diff -Nrcpad gcc-11.3.0/.dir-locals.el gcc-12.1.0/.dir-locals.el
*** gcc-11.3.0/.dir-locals.el	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/.dir-locals.el	Fri May  6 07:30:56 2022
***************
*** 17,23 ****
  ((tcl-mode . ((tcl-indent-level . 4)
  	      (tcl-continued-indent-level . 4)
  	      (indent-tabs-mode . t)))
!  (nil . ((bug-reference-url-format . "http://gcc.gnu.org/PR%s")))
   (c-mode . ((c-file-style . "GNU")
  	    (indent-tabs-mode . t)
! 	    (fill-column . 80))))
--- 17,23 ----
  ((tcl-mode . ((tcl-indent-level . 4)
  	      (tcl-continued-indent-level . 4)
  	      (indent-tabs-mode . t)))
!  (nil . ((bug-reference-url-format . "https://gcc.gnu.org/PR%s")))
   (c-mode . ((c-file-style . "GNU")
  	    (indent-tabs-mode . t)
! 	    (fill-column . 79))))
diff -Nrcpad gcc-11.3.0/.gitignore gcc-12.1.0/.gitignore
*** gcc-11.3.0/.gitignore	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/.gitignore	Fri May  6 07:30:56 2022
*************** POTFILES
*** 32,37 ****
--- 32,38 ----
  
  TAGS
  TAGS.sub
+ cscope.out
  
  .local.vimrc
  .lvimrc
diff -Nrcpad gcc-11.3.0/ChangeLog gcc-12.1.0/ChangeLog
*** gcc-11.3.0/ChangeLog	Thu Apr 21 07:59:16 2022
--- gcc-12.1.0/ChangeLog	Fri May  6 07:30:56 2022
***************
*** 1,26 ****
! 2022-04-21  Release Manager
  
! 	* GCC 11.3.0 released.
  
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	Backported from master:
! 	2021-11-16  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* configure: Regenerate.
  	* configure.ac: Ensure that PIC (shared) defaults are set
  	correctly for Darwin.
  
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	Backported from master:
! 	2021-08-18  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* Makefile.in: Regenerate.
  	* Makefile.tpl: Make the state of the configured host
  	shared flag available to makefile fragements.
  
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* Makefile.def: Add dsymutil defs.
  	* Makefile.in: Regenerated.
--- 1,364 ----
! 2022-05-06  Release Manager
  
! 	* GCC 12.1.0 released.
  
! 2022-04-19  Richard Henderson  <rth@gcc.gnu.org>
  
! 	* MAINTAINERS: Update my email address.
! 
! 2022-04-01  Qian Jianhua  <qianjh@fujitsu.com>
! 
! 	* MAINTAINERS: Update my email address.
! 
! 2022-03-29  Chenghua Xu  <xuchenghua@loongson.cn>
! 
! 	* MAINTAINERS: (CPU Port Maintainers): Add myself and
! 	Lulu as LoongArch port maintainer.
! 
! 2022-03-29  Chenghua Xu  <xuchenghua@loongson.cn>
! 	    Lulu Cheng  <chenglulu@loongson.cn>
! 
! 	* configure.ac: Add LoongArch tuples.
! 	* configure: Regenerate.
! 
! 2022-03-28  Tom Tromey  <tromey@adacore.com>
! 
! 	* configure.ac: Remove --with-mpfr-dir and --with-gmp-dir.
! 	* configure: Rebuild.
! 
! 2022-03-24  Bill Schmidt  <bill.schmidt@gmail.com>
! 
! 	* MAINTAINERS: Change my information.
! 
! 2022-03-16  Chung-Ju Wu  <jasonwucj@gmail.com>
! 
! 	* MAINTAINERS: Add myself to DCO section.
! 
! 2022-03-14  Jonathan Wakely  <jwakely@redhat.com>
! 
! 	* configure.ac: Fix incorrect option in comment.
! 	* configure: Regenerate.
! 
! 2022-03-09  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	* Makefile.def (dependencies): Make configure-sim depend on
! 	all-readline.
! 	* Makefile.in: Regenerate.
! 
! 2022-02-22  Christophe Lyon  <christophe.lyon@foss.st.com>
! 
! 	* MAINTAINERS (Write After Approval): Update my e-mail address.
! 
! 2022-02-08  Ulrich Weigand  <ulrich.weigand@de.ibm.com>
! 
! 	* MAINTAINERS: Remove Hartmut Penner as s390 maintainer.
! 
! 2022-01-31  Ed Smith-Rowland  <esmithrowland@gmail.com>
! 
! 	* MAINTAINERS: Update my email and add myself to the DCO list.
! 
! 2022-01-25  Thomas Schwinge  <thomas@codesourcery.com>
! 
! 	Revert:
! 	2021-09-16  Andrew Pinski  <apinski@marvell.com>
! 
! 	PR bootstrap/67102
! 	* Makefile.def: Have configure-target-libffi depend on
! 	all-target-libstdc++-v3.
! 	* Makefile.in: Regenerate.
! 
! 2022-01-22  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR other/104181
! 	* build.log: Remove.
! 
! 2022-01-20  Martin Liska  <mliska@suse.cz>
! 
! 	* MAINTAINERS: Adjust email address based on IRC request.
! 
! 2022-01-18  Xionghu Luo  <luoxhu@linux.ibm.com>
! 
! 	* MAINTAINERS: Update my email address.
! 
! 2022-01-17  Martin Liska  <mliska@suse.cz>
! 
! 	* MAINTAINERS: Rename .c names to .cc.
! 
! 2022-01-13  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* Makefile.am: Remove.
! 
! 2022-01-11  Thomas Koenig  <tkoenig@gcc.gnu.org>
! 
! 	* Makefile.am: New file.
! 
! 2022-01-11  Martin Liska  <mliska@suse.cz>
! 
! 	* MAINTAINERS: Sort 2 names.
! 
! 2022-01-10  Martin Liska  <mliska@suse.cz>
! 
! 	* MAINTAINERS: Fix obvious issues with sorting.
! 
! 2022-01-07  liuhongt  <hongtao.liu@intel.com>
! 
! 	* build.log: New file.
! 
! 2022-01-05  Nathan Sidwell  <nathan@acm.org>
! 
! 	* MAINTAINERS: Add DCO entry.  Sort that list.
! 
! 2022-01-04  Gaius Mulley  <gaiusmod2@gmail.com>
! 
! 	* MAINTAINERS: Change of email address in both DCO and
! 	Write After Approval list.
! 
! 2021-12-21  Iain Buclaw  <ibuclaw@gdcproject.org>
! 
! 	* configure: Regenerate.
! 
! 2021-12-21  Martin Liska  <mliska@suse.cz>
! 
! 	* config.sub: Change mode back to 755.
! 
! 2021-12-17  Martin Liska  <mliska@suse.cz>
! 
! 	* config.sub: Sync from master.
! 
! 2021-12-17  Martin Liska  <mliska@suse.cz>
! 
! 	Revert:
! 	2021-12-16  Matthias Seidel  <mseidel@apache.org>
! 
! 	* config.sub: Fix typo.
! 
! 2021-12-16  Matthias Seidel  <mseidel@apache.org>
! 
! 	* config.sub: Fix typo.
! 
! 2021-12-16  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Revert:
! 	2021-12-15  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	* Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
! 	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
! 	* configure.ac: Include config/gcc-plugin.m4.
! 	AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
! 	* libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
! 	RANLIB if possible.
! 	* Makefile.in: Regenerated.
! 	* configure: Likewise.
! 
! 2021-12-15  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	* Makefile.tpl (BUILD_CFLAGS): New.
! 	(CFLAGS): Append $(BUILD_CFLAGS).
! 	(CXXFLAGS): Likewise.
! 	(PGO_BUILD_GEN_FLAGS_TO_PASS): New.
! 	(PGO_BUILD_TRAINING_CFLAGS): Likewise.
! 	(PGO_BUILD_TRAINING_CXXFLAGS): Likewise.
! 	(PGO_BUILD_TRAINING_FLAGS_TO_PASS): Likewise.
! 	(PGO_BUILD_TRAINING_MFLAGS): Likewise.
! 	(PGO_BUILD_USE_FLAGS_TO_PASS): Likewise.
! 	(PGO-TRAINING-TARGETS): Likewise.
! 	(PGO_BUILD_TRAINING): Likewise.
! 	(all): Add '+' to the command line for recursive make.  Support
! 	the PGO build.
! 	* configure.ac: Add --enable-pgo-build[=lto].
! 	AC_SUBST PGO_BUILD_GEN_CFLAGS, PGO_BUILD_USE_CFLAGS and
! 	PGO_BUILD_LTO_CFLAGS.  Enable the PGO build in Makefile.
! 	* Makefile.in: Regenerated.
! 	* configure: Likewise.
! 
! 2021-12-15  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	* Makefile.tpl (AR): Add @AR_PLUGIN_OPTION@
! 	(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
! 	* configure.ac: Include config/gcc-plugin.m4.
! 	AC_SUBST AR_PLUGIN_OPTION and RANLIB_PLUGIN_OPTION.
! 	* libtool.m4 (_LT_CMD_OLD_ARCHIVE): Pass --plugin to AR and
! 	RANLIB if possible.
! 	* Makefile.in: Regenerated.
! 	* configure: Likewise.
! 
! 2021-12-14  Marc Poulhiès  <poulhies@adacore.com>
! 
! 	* MAINTAINERS: Add myself to write after approval.
! 
! 2021-12-06  Navid Rahimi  <navidrahimi@microsoft.com>
! 
! 	* MAINTAINERS: Adding myself.
! 
! 2021-12-02  Pekka Seppänen  <pexu@gcc.mail.kapsi.fi>
! 
! 	* configure: Regenerate.
! 	* configure.ac: For CPP_FOR_BUILD use $(CC_FOR_BUILD) -E instead of
! 	$(CPP).
! 
! 2021-11-30  Iain Buclaw  <ibuclaw@gdcproject.org>
! 
! 	* Makefile.def: Add bootstrap to libbacktrace, libphobos, zlib, and
! 	libatomic.
! 	* Makefile.in: Regenerate.
! 	* Makefile.tpl (POSTSTAGE1_HOST_EXPORTS): Fix command for GDC.
! 	(STAGE1_CONFIGURE_FLAGS): Add --with-libphobos-druntime-only if
! 	target-libphobos-bootstrap.
! 	(STAGE2_CONFIGURE_FLAGS): Likewise.
! 	* configure: Regenerate.
! 	* configure.ac: Add support for bootstrapping D front-end.
! 
! 2021-11-16  Martin Uecker  <uecker@gcc.gnu.org>
! 
! 	* MAINTAINERS: Add myself to DCO section and update email address.
! 
! 2021-11-16  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* configure: Regenerate.
  	* configure.ac: Ensure that PIC (shared) defaults are set
  	correctly for Darwin.
  
! 2021-11-16  Jim Wilson  <jim.wilson.gcc@gmail.com>
  
! 	* MAINTAINERS: Update my address.
! 
! 2021-11-12  Alan Modra  <amodra@gmail.com>
! 
! 	* Makefile.def (configure-opcodes): Depend on configure-bfd.
! 	* Makefile.in: Regenerate.
! 
! 2021-11-03  Maciej W. Rozycki  <macro@embecosm.com>
! 
! 	* MAINTAINERS: Clarify the policy WRT the Write After Approval
! 	list.
! 
! 2021-11-02  Andrew Burgess  <andrew.burgess@embecosm.com>
! 
! 	* MAINTAINERS (Reviewers, arc): Remove my entry.
! 	(Write After Approval): Add an entry for myself.
! 
! 2021-10-28  Richard Purdie  <richard.purdie@linuxfoundation.org>
! 
! 	* Makefile.tpl: Add CPP_FOR_BUILD and CPPFLAGS_FOR_BUILD support
! 	* Makefile.in: Regenerate.
! 	* configure: Regenerate.
! 	* configure.ac: Add CPP_FOR_BUILD and CPPFLAGS_FOR_BUILD support
! 
! 2021-10-26  Jeff Law  <jeffreyalaw@gmail.com>
! 
! 	* MAINTAINERS: Fix up Maciej's entries.
! 
! 2021-10-26  Maciej W. Rozycki  <macro@embecosm.com>
! 
! 	* MAINTAINERS (CPU Port Maintainers): Add myself as a VAX port
! 	maintainer.
! 
! 2021-10-22  Eric Gallager  <egallager@gcc.gnu.org>
! 
! 	PR other/102663
! 	* Makefile.def: Handle install-dvi target.
! 	* Makefile.tpl: Likewise.
! 	* Makefile.in: Regenerate.
! 
! 2021-10-19  Clément Chigot  <clement.chigot@atos.net>
! 
! 	* MAINTAINERS: Add myself for write after approval.
! 
! 2021-10-12  Eric Gallager  <egallager@gcc.gnu.org>
! 
! 	* Makefile.def: Mark libcody, libdecnumber,
! 	c++tools, libgcc, and libobjc as missing TAGS
! 	targets.
! 	* Makefile.in: Regenerate.
! 
! 2021-10-07  Siddhesh Poyarekar  <siddhesh@gotplt.org>
! 
! 	* MAINTAINERS: Add myself to DCO section and update email
! 	address.
! 
! 2021-09-29  Jonathan Wakely  <jwakely@redhat.com>
! 
! 	* MAINTAINERS: Add myself to DCO section.
! 
! 2021-09-28  Andrew Burgess  <andrew.burgess@embecosm.com>
! 
! 	* configure: Regenerate.
! 	* configure.ac (skipdirs): Add the contents of target_configdirs if
! 	we are not building gcc.
! 
! 2021-09-24  Andrew Burgess  <andrew.burgess@embecosm.com>
! 
! 	* Makefile.def: Back-port commits ba4d88ad892f and
! 	755ba58ebef0 from binutils-gdb repository.
! 	* Makefile.in: Regenerated.
! 
! 2021-09-20  Harald Anlauf  <anlauf@gmx.de>
! 
! 	* MAINTAINERS (Reviewers): Add myself as Fortran reviewer.
! 
! 2021-09-17  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* Makefile.def: Add a jit check target for the jit
! 	language.
! 	* Makefile.in: Regenerate.
! 
! 2021-09-16  Andrew Pinski  <apinski@marvell.com>
! 
! 	PR bootstrap/67102
! 	* Makefile.def: Have configure-target-libffi depend on
! 	all-target-libstdc++-v3.
! 	* Makefile.in: Regenerate.
! 
! 2021-09-10  Petter Tomner  <tomner@kth.se>
! 
! 	* MAINTAINERS: Me added to DCO and write after approval
! 
! 2021-09-01  YunQiang Su  <syq@debian.org>
! 
! 	* MAINTAINERS: Add myself for write after approval.
! 
! 2021-08-31  Andrew Burgess  <andrew.burgess@embecosm.com>
! 
! 	* Makefile.def: Add all-gdb dependency on all-libbacktrace.
! 	* Makefile.in: Regenerate.
! 
! 2021-08-21  Dragan Mladjenovic  <Dragan.Mladjenovic@syrmia.com>
! 
! 	* MAINTAINERS: Add myself for write after approval.
! 
! 2021-08-18  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* Makefile.in: Regenerate.
  	* Makefile.tpl: Make the state of the configured host
  	shared flag available to makefile fragements.
  
! 2021-08-09  Hongyu Wang  <hongyu.wang@intel.com>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2021-07-20  Richard Earnshaw  <rearnsha@arm.com>
! 
! 	* .dir-locals.el (bug-reference-url-format): Use https.
! 
! 2021-07-20  Richard Earnshaw  <rearnsha@arm.com>
! 
! 	* .dir-locals.el (c-mode): Change fill-column to 79.
! 
! 2021-07-15  Trevor Saunders  <tbsaunde@tbsaunde.org>
! 
! 	* MAINTAINERS: Add myself to DCO section.
! 
! 2021-07-09  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* configure: Regenerate.
! 	* configure.ac: Adjust cases for which it is necessary to
! 	include the Darwin host config fragment.
! 
! 2021-07-06  Gaius Mulley  <gaius.mulley@southwales.ac.uk>
! 
! 	* MAINTAINERS: Add myself for write after approval and DCO.
! 
! 2021-07-05  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* Makefile.def: Add dsymutil defs.
  	* Makefile.in: Regenerated.
***************
*** 28,49 ****
  	* configure: Regenerated.
  	* configure.ac: Add dsymutil to target and build recipes.
  
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	Backported from master:
! 	2021-07-09  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* configure: Regenerate.
- 	* configure.ac: Adjust cases for which it is necessary to
- 	include the Darwin host config fragment.
  
! 2021-07-28  Release Manager
  
! 	* GCC 11.2.0 released.
  
! 2021-04-27  Release Manager
  
! 	* GCC 11.1.0 released.
  
  2021-04-11  Hafiz Abid Qadeer  <abidh@codesourcery.com>
  
--- 366,496 ----
  	* configure: Regenerated.
  	* configure.ac: Add dsymutil to target and build recipes.
  
! 2021-07-01  Ankur Saini  <arsenic@sourceware.org>
  
! 	* MAINTAINERS: Add myself for write after approval.
! 
! 2021-06-30  Xi Ruoyao  <xry111@mengyan1223.wang>
  
+ 	* MAINTAINERS (Write After Approval): Add myself.
+ 
+ 2021-06-25  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	* MAINTAINERS: Add myself for write after approval and DCO
+ 
+ 2021-06-24  prathamesh.kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	* .gitignore: Add entry for cscope.out.
+ 
+ 2021-06-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* MAINTAINERS: Remove my Write After Approval entry.
+ 
+ 2021-06-21  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* MAINTAINERS: Add myself as maintainer of the i386 vector
+ 	extensions.
+ 
+ 2021-06-18  Antoni Boucher  <bouanto@zoho.com>
+ 
+ 	* MAINTAINERS (Write After Approval): Add myself.
+ 
+ 2021-06-17  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* MAINTAINERS (Various Maintainers): Add Andrew and myself
+ 	as *vrp and ranger maintainers.
+ 
+ 2021-06-05  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* MAINTAINERS: Adjust my entry in the DCO section so that it does
+ 	not trigger testsuite failures.
+ 
+ 2021-06-05  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* MAINTAINERS: Add myself to DCO section with both email addresses.
+ 
+ 2021-06-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* MAINTAINERS: Add DCO version number.
+ 
+ 2021-06-02  Jason Merrill  <jason@redhat.com>
+ 
+ 	* MAINTAINERS: Add DCO section.
+ 
+ 2021-05-31  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* MAINTAINERS (Write After Approval): Add myself.
+ 
+ 2021-05-29  Mike Frysinger  <vapier@gentoo.org>
+ 
+ 	* configure.ac: Add gnulib to configdirs for sim.
  	* configure: Regenerate.
  
! 2021-05-18  Mike Frysinger  <vapier@gentoo.org>
  
! 	* Makefile.def: Add configure-sim dependency on all-gnulib.
! 	* Makefile.in: Regenerated.
  
! 2021-05-17  Serge Belyshev  <belyshev@depni.sinp.msu.ru>
  
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2021-05-12  Marcel Vollweiler  <marcel@codesourcery.com>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
! 
! 2021-05-11  Martin Liska  <mliska@suse.cz>
! 
! 	* MAINTAINERS: Remove entries for removed
! 	components (HSA, BRIG, libhsail-rt).
! 	Move Pekka to Write After Approval.
! 
! 2021-05-11  Martin Liska  <mliska@suse.cz>
! 
! 	* Makefile.def: Remove libhsail-rt.
! 	* Makefile.in: Likewise.
! 	* configure.ac: Likewise.
! 	* configure: Regenerate.
! 	* libhsail-rt/ChangeLog: Removed.
! 	* libhsail-rt/Makefile.am: Removed.
! 	* libhsail-rt/Makefile.in: Removed.
! 	* libhsail-rt/README: Removed.
! 	* libhsail-rt/aclocal.m4: Removed.
! 	* libhsail-rt/configure: Removed.
! 	* libhsail-rt/configure.ac: Removed.
! 	* libhsail-rt/configure.tgt: Removed.
! 	* libhsail-rt/include/internal/fibers.h: Removed.
! 	* libhsail-rt/include/internal/phsa-queue-interface.h: Removed.
! 	* libhsail-rt/include/internal/phsa-rt.h: Removed.
! 	* libhsail-rt/include/internal/workitems.h: Removed.
! 	* libhsail-rt/rt/arithmetic.c: Removed.
! 	* libhsail-rt/rt/atomics.c: Removed.
! 	* libhsail-rt/rt/bitstring.c: Removed.
! 	* libhsail-rt/rt/fbarrier.c: Removed.
! 	* libhsail-rt/rt/fibers.c: Removed.
! 	* libhsail-rt/rt/fp16.c: Removed.
! 	* libhsail-rt/rt/misc.c: Removed.
! 	* libhsail-rt/rt/multimedia.c: Removed.
! 	* libhsail-rt/rt/queue.c: Removed.
! 	* libhsail-rt/rt/sat_arithmetic.c: Removed.
! 	* libhsail-rt/rt/segment.c: Removed.
! 	* libhsail-rt/rt/workitems.c: Removed.
! 	* libhsail-rt/target-config.h.in: Removed.
! 
! 2021-05-04  Nick Clifton  <nickc@redhat.com>
! 
! 	* configure.ac (AC_PROG_CC): Replace with AC_PROG_CC_C99.
! 	* configure: Regenerate.
! 
! 2021-04-28  Jakub Jelinek  <jakub@redhat.com>
! 	    Tobias Burnus  <tobias@codesourcery.com>
! 
! 	* configure.ac (--enable-offload-defaulted): New.
! 	* configure: Regenerate.
! 
! 2021-04-23  David Faust  <david.faust@oracle.com>
! 
! 	* MAINTAINERS (Write After Approval): Add myself.
  
  2021-04-11  Hafiz Abid Qadeer  <abidh@codesourcery.com>
  
diff -Nrcpad gcc-11.3.0/INSTALL/binaries.html gcc-12.1.0/INSTALL/binaries.html
*** gcc-11.3.0/INSTALL/binaries.html	Thu Apr 21 07:59:39 2022
--- gcc-12.1.0/INSTALL/binaries.html	Fri May  6 07:31:22 2022
***************
*** 1,6 ****
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
--- 1,6 ----
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2022 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
*************** A GNU Manual
*** 19,25 ****
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Binaries</title>
--- 19,25 ----
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Binaries</title>
*************** You have freedom to copy and modify this
*** 33,55 ****
  <!--
  a.summary-letter {text-decoration: none}
  blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
  div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
  div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
  kbd {font-style: oblique}
  pre.display {font-family: inherit}
  pre.format {font-family: inherit}
  pre.menu-comment {font-family: serif}
  pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
  span.nolinebreak {white-space: nowrap}
  span.roman {font-family: initial; font-weight: normal}
  span.sansserif {font-family: sans-serif; font-weight: normal}
--- 33,46 ----
*************** ul.no-bullet {list-style: none}
*** 85,92 ****
  
  
  
! <a name="index-Binaries"></a>
! <a name="index-Installing-GCC_003a-Binaries"></a>
  
  <p>We are often asked about pre-compiled versions of GCC.  While we cannot
  provide these for all platforms, below you&rsquo;ll find links to binaries for
--- 76,83 ----
  
  
  
! <span id="index-Binaries"></span>
! <span id="index-Installing-GCC_003a-Binaries"></span>
  
  <p>We are often asked about pre-compiled versions of GCC.  While we cannot
  provide these for all platforms, below you&rsquo;ll find links to binaries for
*************** AIX 7.1)</a>.
*** 128,141 ****
  </li><li> Microsoft Windows:
  <ul>
  <li> The <a href="https://sourceware.org/cygwin/">Cygwin</a> project;
! </li><li> The <a href="http://www.mingw.org/">MinGW</a> and
! <a href="http://mingw-w64.org/doku.php">mingw-w64</a> projects.
  </li></ul>
  
  </li><li> <a href="http://www.openpkg.org/">OpenPKG</a> offers binaries for quite a
  number of platforms.
  
! </li><li> The <a href="http://gcc.gnu.org/wiki/GFortranBinaries">GFortran Wiki</a> has
  links to GNU Fortran binaries for several platforms.
  </li></ul>
  
--- 119,132 ----
  </li><li> Microsoft Windows:
  <ul>
  <li> The <a href="https://sourceware.org/cygwin/">Cygwin</a> project;
! </li><li> The <a href="https://osdn.net/projects/mingw/">MinGW</a> and
! <a href="https://www.mingw-w64.org/">mingw-w64</a> projects.
  </li></ul>
  
  </li><li> <a href="http://www.openpkg.org/">OpenPKG</a> offers binaries for quite a
  number of platforms.
  
! </li><li> The <a href="https://gcc.gnu.org/wiki/GFortranBinaries">GFortran Wiki</a> has
  links to GNU Fortran binaries for several platforms.
  </li></ul>
  
*************** links to GNU Fortran binaries for severa
*** 146,152 ****
  
  
  
- 
  
  
  
--- 137,142 ----
diff -Nrcpad gcc-11.3.0/INSTALL/build.html gcc-12.1.0/INSTALL/build.html
*** gcc-11.3.0/INSTALL/build.html	Thu Apr 21 07:59:38 2022
--- gcc-12.1.0/INSTALL/build.html	Fri May  6 07:31:21 2022
***************
*** 1,6 ****
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
--- 1,6 ----
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2022 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
*************** A GNU Manual
*** 19,25 ****
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Building</title>
--- 19,25 ----
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Building</title>
*************** You have freedom to copy and modify this
*** 33,55 ****
  <!--
  a.summary-letter {text-decoration: none}
  blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
  div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
  div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
  kbd {font-style: oblique}
  pre.display {font-family: inherit}
  pre.format {font-family: inherit}
  pre.menu-comment {font-family: serif}
  pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
  span.nolinebreak {white-space: nowrap}
  span.roman {font-family: initial; font-weight: normal}
  span.sansserif {font-family: sans-serif; font-weight: normal}
--- 33,46 ----
*************** ul.no-bullet {list-style: none}
*** 82,88 ****
  
  
  
! <a name="index-Installing-GCC_003a-Building"></a>
  
  <p>Now that GCC is configured, you are ready to build the compiler and
  runtime libraries.
--- 73,79 ----
  
  
  
! <span id="index-Installing-GCC_003a-Building"></span>
  
  <p>Now that GCC is configured, you are ready to build the compiler and
  runtime libraries.
*************** documentation, you need version 4.7 or l
*** 129,136 ****
  want Info documentation to be regenerated.  Releases contain Info
  documentation pre-built for the unmodified documentation in the release.
  </p>
! <a name="Building-a-native-compiler"></a>
! <h3 class="section">Building a native compiler</h3>
  
  <p>For a native build, the default configuration is to perform
  a 3-stage bootstrap of the compiler when &lsquo;<samp>make</samp>&rsquo; is invoked.
--- 120,126 ----
  want Info documentation to be regenerated.  Releases contain Info
  documentation pre-built for the unmodified documentation in the release.
  </p>
! <span id="Building-a-native-compiler"></span><h3 class="section">Building a native compiler</h3>
  
  <p>For a native build, the default configuration is to perform
  a 3-stage bootstrap of the compiler when &lsquo;<samp>make</samp>&rsquo; is invoked.
*************** following example.  This will save rough
*** 172,179 ****
  the bootstrap and the final installation.  (Libraries will still contain
  debugging information.)
  </p>
! <div class="smallexample">
! <pre class="smallexample">make BOOT_CFLAGS='-O' bootstrap
  </pre></div>
  
  <p>You can place non-default optimization flags into <code>BOOT_CFLAGS</code>; they
--- 162,169 ----
  the bootstrap and the final installation.  (Libraries will still contain
  debugging information.)
  </p>
! <div class="example">
! <pre class="example">make BOOT_CFLAGS='-O' bootstrap
  </pre></div>
  
  <p>You can place non-default optimization flags into <code>BOOT_CFLAGS</code>; they
*************** systems that are running Linux kernel ve
*** 337,344 ****
  </dd>
  </dl>
  
! <a name="Building-a-cross-compiler"></a>
! <h3 class="section">Building a cross compiler</h3>
  
  <p>When building a cross compiler, it is not generally possible to do a
  3-stage bootstrap of the compiler.  This makes for an interesting problem
--- 327,333 ----
  </dd>
  </dl>
  
! <span id="Building-a-cross-compiler"></span><h3 class="section">Building a cross compiler</h3>
  
  <p>When building a cross compiler, it is not generally possible to do a
  3-stage bootstrap of the compiler.  This makes for an interesting problem
*************** alternatives for <samp>crt0.o</samp>, fo
*** 415,422 ****
  compilation options.  Check your target&rsquo;s definition of
  <code>STARTFILE_SPEC</code> to find out what start files it uses.
  </p>
! <a name="Building-in-parallel"></a>
! <h3 class="section">Building in parallel</h3>
  
  <p>GNU Make 3.80 and above, which is necessary to build GCC, support
  building in parallel.  To activate this, you can use &lsquo;<samp>make -j 2</samp>&rsquo;
--- 404,410 ----
  compilation options.  Check your target&rsquo;s definition of
  <code>STARTFILE_SPEC</code> to find out what start files it uses.
  </p>
! <span id="Building-in-parallel"></span><h3 class="section">Building in parallel</h3>
  
  <p>GNU Make 3.80 and above, which is necessary to build GCC, support
  building in parallel.  To activate this, you can use &lsquo;<samp>make -j 2</samp>&rsquo;
*************** your machine will result in fewer and sh
*** 426,438 ****
  improving overall throughput; this is especially true for slow drives
  and network filesystems.
  </p>
! <a name="Building-the-Ada-compiler"></a>
! <h3 class="section">Building the Ada compiler</h3>
  
  <p><a href="prerequisites.html#GNAT-prerequisite">GNAT prerequisites</a>.
  </p>
! <a name="Building-with-profile-feedback"></a>
! <h3 class="section">Building with profile feedback</h3>
  
  <p>It is possible to use profile feedback to optimize the compiler itself.  This
  should result in a faster compiler binary.  Experiments done on x86 using gcc
--- 414,428 ----
  improving overall throughput; this is especially true for slow drives
  and network filesystems.
  </p>
! <span id="Building-the-Ada-compiler"></span><h3 class="section">Building the Ada compiler</h3>
  
  <p><a href="prerequisites.html#GNAT-prerequisite">GNAT prerequisites</a>.
  </p>
! <span id="Building-the-D-compiler"></span><h3 class="section">Building the D compiler</h3>
! 
! <p><a href="prerequisites.html#GDC-prerequisite">GDC prerequisites</a>.
! </p>
! <span id="Building-with-profile-feedback"></span><h3 class="section">Building with profile feedback</h3>
  
  <p>It is possible to use profile feedback to optimize the compiler itself.  This
  should result in a faster compiler binary.  Experiments done on x86 using gcc
*************** the code quality may be much worse.
*** 468,474 ****
  
  
  
- 
  
  
  
--- 458,463 ----
diff -Nrcpad gcc-11.3.0/INSTALL/configure.html gcc-12.1.0/INSTALL/configure.html
*** gcc-11.3.0/INSTALL/configure.html	Thu Apr 21 07:59:38 2022
--- gcc-12.1.0/INSTALL/configure.html	Fri May  6 07:31:21 2022
***************
*** 1,6 ****
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
--- 1,6 ----
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2022 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
*************** A GNU Manual
*** 19,25 ****
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Configuration</title>
--- 19,25 ----
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Configuration</title>
*************** You have freedom to copy and modify this
*** 33,55 ****
  <!--
  a.summary-letter {text-decoration: none}
  blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
  div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
  div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
  kbd {font-style: oblique}
  pre.display {font-family: inherit}
  pre.format {font-family: inherit}
  pre.menu-comment {font-family: serif}
  pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
  span.nolinebreak {white-space: nowrap}
  span.roman {font-family: initial; font-weight: normal}
  span.sansserif {font-family: sans-serif; font-weight: normal}
--- 33,46 ----
*************** ul.no-bullet {list-style: none}
*** 81,88 ****
  
  
  
! <a name="index-Configuration"></a>
! <a name="index-Installing-GCC_003a-Configuration"></a>
  
  <p>Like most GNU software, GCC must be configured before it can be built.
  This document describes the recommended configuration procedure
--- 72,79 ----
  
  
  
! <span id="index-Configuration"></span>
! <span id="index-Installing-GCC_003a-Configuration"></span>
  
  <p>Like most GNU software, GCC must be configured before it can be built.
  This document describes the recommended configuration procedure
*************** scripts may fail.
*** 128,141 ****
  
  <p>To configure GCC:
  </p>
! <div class="smallexample">
! <pre class="smallexample">% mkdir <var>objdir</var>
  % cd <var>objdir</var>
  % <var>srcdir</var>/configure [<var>options</var>] [<var>target</var>]
  </pre></div>
  
! <a name="Distributor-options"></a>
! <h3 class="heading">Distributor options</h3>
  
  <p>If you will be distributing binary versions of GCC, with modifications
  to the source code, you should use the options described in this
--- 119,131 ----
  
  <p>To configure GCC:
  </p>
! <div class="example">
! <pre class="example">% mkdir <var>objdir</var>
  % cd <var>objdir</var>
  % <var>srcdir</var>/configure [<var>options</var>] [<var>target</var>]
  </pre></div>
  
! <span id="Distributor-options"></span><h3 class="heading">Distributor options</h3>
  
  <p>If you will be distributing binary versions of GCC, with modifications
  to the source code, you should use the options described in this
*************** The <var>url</var> should end with a <co
*** 176,199 ****
  </dd>
  </dl>
  
! <a name="Target-specification"></a>
! <h3 class="heading">Target specification</h3>
! <ul>
! <li> GCC has code to correctly determine the correct value for <var>target</var>
! for nearly all native systems.  Therefore, we highly recommend you do
! not provide a configure target when configuring a native compiler.
  
! </li><li> <var>target</var> must be specified as <samp>--target=<var>target</var></samp>
! when configuring a cross compiler; examples of valid targets would be
! m68k-elf, sh-elf, etc.
  
! </li><li> Specifying just <var>target</var> instead of <samp>--target=<var>target</var></samp>
! implies that the host defaults to <var>target</var>.
! </li></ul>
  
  
! <a name="Options-specification"></a>
! <h3 class="heading">Options specification</h3>
  
  <p>Use <var>options</var> to override several configure time options for
  GCC.  A list of supported <var>options</var> follows; &lsquo;<samp>configure
--- 166,234 ----
  </dd>
  </dl>
  
! <span id="Host_002c-Build-and-Target-specification"></span><h3 class="heading">Host, Build and Target specification</h3>
  
! <p>Specify the host, build and target machine configurations.  You do this
! when you run the <samp>configure</samp> script.
! </p>
! <p>The <em>build</em> machine is the system which you are using, the
! <em>host</em> machine is the system where you want to run the resulting
! compiler (normally the build machine), and the <em>target</em> machine is
! the system for which you want the compiler to generate code.
! </p>
! <p>If you are building a compiler to produce code for the machine it runs
! on (a native compiler), you normally do not need to specify any operands
! to <samp>configure</samp>; it will try to guess the type of machine you are on
! and use that as the build, host and target machines.  So you don&rsquo;t need
! to specify a configuration when building a native compiler unless
! <samp>configure</samp> cannot figure out what your configuration is or guesses
! wrong.
! </p>
! <p>In those cases, specify the build machine&rsquo;s <em>configuration name</em>
! with the <samp>--host</samp> option; the host and target will default to be
! the same as the host machine.
! </p>
! <p>Here is an example:
! </p>
! <div class="example">
! <pre class="example">./configure --host=x86_64-pc-linux-gnu
! </pre></div>
  
! <p>A configuration name may be canonical or it may be more or less
! abbreviated (<samp>config.sub</samp> script produces canonical versions).
! </p>
! <p>A canonical configuration name has three parts, separated by dashes.
! It looks like this: &lsquo;<samp><var>cpu</var>-<var>company</var>-<var>system</var></samp>&rsquo;.
! </p>
! <p>Here are the possible CPU types:
! </p>
! <blockquote>
! <p>aarch64, aarch64_be, alpha, alpha64, amdgcn, arc, arceb, arm, armeb, avr, bfin,
! bpf, cr16, cris, csky, epiphany, fido, fr30, frv, ft32, h8300, hppa, hppa2.0,
! hppa64, i486, i686, ia64, iq2000, lm32, loongarch64, m32c, m32r, m32rle, m68k,
! mcore, microblaze, microblazeel, mips, mips64, mips64el, mips64octeon,
! mips64orion, mips64vr, mipsel, mipsisa32, mipsisa32r2, mipsisa64, mipsisa64r2,
! mipsisa64r2el, mipsisa64sb1, mipsisa64sr71k, mipstx39, mmix, mn10300, moxie,
! msp430, nds32be, nds32le, nios2, nvptx, or1k, pdp11, powerpc, powerpc64,
! powerpc64le, powerpcle, pru, riscv32, riscv32be, riscv64, riscv64be, rl78, rx,
! s390, s390x, sh, shle, sparc, sparc64, tic6x, tilegx, tilegxbe, tilepro, v850,
! v850e, v850e1, vax, visium, x86_64, xstormy16, xtensa
! </p></blockquote>
  
+ <p>Here is a list of system types:
+ </p>
+ <blockquote>
+ <p>aix<var>version</var>, amdhsa, aout, cygwin, darwin<var>version</var>,
+ eabi, eabialtivec, eabisim, eabisimaltivec, elf, elf32,
+ elfbare, elfoabi, freebsd<var>version</var>, gnu, hpux, hpux<var>version</var>,
+ kfreebsd-gnu, kopensolaris-gnu, linux-androideabi, linux-gnu,
+ linux-gnu_altivec, linux-musl, linux-uclibc, lynxos, mingw32, mingw32crt,
+ mmixware, msdosdjgpp, netbsd, netbsdelf<var>version</var>, nto-qnx, openbsd,
+ rtems, solaris<var>version</var>, symbianelf, tpf, uclinux, uclinux_eabi, vms,
+ vxworks, vxworksae, vxworksmils
+ </p></blockquote>
  
! <span id="Options-specification"></span><h3 class="heading">Options specification</h3>
  
  <p>Use <var>options</var> to override several configure time options for
  GCC.  A list of supported <var>options</var> follows; &lsquo;<samp>configure
*************** but yielding a slightly slower compiler.
*** 469,475 ****
  libraries.
  </p>
  </dd>
! <dt><code><a name="with-gnu-as"></a>--with-gnu-as</code></dt>
  <dd><p>Specify that the compiler should assume that the
  assembler it finds is the GNU assembler.  However, this does not modify
  the rules to find an assembler and will result in confusion if the
--- 504,510 ----
  libraries.
  </p>
  </dd>
! <dt><code><span id="with-gnu-as"></span>--with-gnu-as</code></dt>
  <dd><p>Specify that the compiler should assume that the
  assembler it finds is the GNU assembler.  However, this does not modify
  the rules to find an assembler and will result in confusion if the
*************** whether you use the GNU assembler.  On a
*** 492,498 ****
  </li></ul>
  
  </dd>
! <dt><code><a name="with-as"></a>--with-as=<var>pathname</var></code></dt>
  <dd><p>Specify that the compiler should use the assembler pointed to by
  <var>pathname</var>, rather than the one found by the standard rules to find
  an assembler, which are:
--- 527,533 ----
  </li></ul>
  
  </dd>
! <dt><code><span id="with-as"></span>--with-as=<var>pathname</var></code></dt>
  <dd><p>Specify that the compiler should use the assembler pointed to by
  <var>pathname</var>, rather than the one found by the standard rules to find
  an assembler, which are:
*************** assemblers installed and want to choose
*** 525,531 ****
  above rules.
  </p>
  </dd>
! <dt><code><a name="with-gnu-ld"></a>--with-gnu-ld</code></dt>
  <dd><p>Same as <a href="#with-gnu-as"><samp>--with-gnu-as</samp></a>
  but for the linker.
  </p>
--- 560,566 ----
  above rules.
  </p>
  </dd>
! <dt><code><span id="with-gnu-ld"></span>--with-gnu-ld</code></dt>
  <dd><p>Same as <a href="#with-gnu-as"><samp>--with-gnu-as</samp></a>
  but for the linker.
  </p>
*************** but for the linker.
*** 540,551 ****
  but for the debug linker (only used on Darwin platforms so far).
  </p>
  </dd>
- <dt><code>--with-stabs</code></dt>
- <dd><p>Specify that stabs debugging
- information should be used instead of whatever format the host normally
- uses.  Normally GCC uses the same debug format as the host system.
- </p>
- </dd>
  <dt><code>--with-tls=<var>dialect</var></code></dt>
  <dd><p>Specify the default TLS dialect, for systems were there is a choice.
  For ARM targets, possible values for <var>dialect</var> are <code>gnu</code> or
--- 575,580 ----
*************** sysv, aix.
*** 624,631 ****
  <dt><code>--without-multilib-list</code></dt>
  <dd><p>Specify what multilibs to build.  <var>list</var> is a comma separated list of
  values, possibly consisting of a single value.  Currently only implemented
! for aarch64*-*-*, arm*-*-*, riscv*-*-*, sh*-*-* and x86-64-*-linux*.  The
! accepted values and meaning for each target is given below.
  </p>
  <dl compact="compact">
  <dt><code>aarch64*-*-*</code></dt>
--- 653,661 ----
  <dt><code>--without-multilib-list</code></dt>
  <dd><p>Specify what multilibs to build.  <var>list</var> is a comma separated list of
  values, possibly consisting of a single value.  Currently only implemented
! for aarch64*-*-*, arm*-*-*, loongarch64-*-*, riscv*-*-*, sh*-*-* and
! x86-64-*-linux*.  The accepted values and meaning for each target is given
! below.
  </p>
  <dl compact="compact">
  <dt><code>aarch64*-*-*</code></dt>
*************** profile.  The union of these options is
*** 700,705 ****
--- 730,744 ----
  </table>
  
  </dd>
+ <dt><code>loongarch*-*-*</code></dt>
+ <dd><p><var>list</var> is a comma-separated list of the following ABI identifiers:
+ <code>lp64d[/base]</code> <code>lp64f[/base]</code> <code>lp64d[/base]</code>, where the
+ <code>/base</code> suffix may be omitted, to enable their respective run-time
+ libraries.  If <var>list</var> is empty or <code>default</code>,
+ or if <samp>--with-multilib-list</samp> is not specified, then the default ABI
+ as specified by <samp>--with-abi</samp> or implied by <samp>--target</samp> is selected.
+ </p>
+ </dd>
  <dt><code>riscv*-*-*</code></dt>
  <dd><p><var>list</var> is a single ABI name.  The target architecture must be either
  <code>rv32gc</code> or <code>rv64gc</code>.  This will build a single multilib for the
*************** specialized subset.
*** 729,742 ****
  </p>
  <p>Example 1: to configure a compiler for SH4A only, but supporting both
  endians, with little endian being the default:
! </p><div class="smallexample">
! <pre class="smallexample">--with-cpu=sh4a --with-endian=little,big --with-multilib-list=
  </pre></div>
  
  <p>Example 2: to configure a compiler for both SH4A and SH4AL-DSP, but with
  only little endian SH4AL:
! </p><div class="smallexample">
! <pre class="smallexample">--with-cpu=sh4a --with-endian=little,big \
  --with-multilib-list=sh4al,!mb/m4al
  </pre></div>
  
--- 768,781 ----
  </p>
  <p>Example 1: to configure a compiler for SH4A only, but supporting both
  endians, with little endian being the default:
! </p><div class="example">
! <pre class="example">--with-cpu=sh4a --with-endian=little,big --with-multilib-list=
  </pre></div>
  
  <p>Example 2: to configure a compiler for both SH4A and SH4AL-DSP, but with
  only little endian SH4AL:
! </p><div class="example">
! <pre class="example">--with-cpu=sh4a --with-endian=little,big \
  --with-multilib-list=sh4al,!mb/m4al
  </pre></div>
  
*************** for riscv*-*-elf*.  The accepted values
*** 763,787 ****
  reuse rule with architecture string and reuse rule with sub-extension.
  </p>
  <p>Example 1: Add multi-lib suppport for rv32i with ilp32.
! </p><div class="smallexample">
! <pre class="smallexample">rv32i-ilp32--
  </pre></div>
  
  <p>Example 2: Add multi-lib suppport for rv32i with ilp32 and rv32imafd with ilp32.
! </p><div class="smallexample">
! <pre class="smallexample">rv32i-ilp32--;rv32imafd-ilp32--
  </pre></div>
  
  <p>Example 3: Add multi-lib suppport for rv32i with ilp32; rv32im with ilp32 and
  rv32ic with ilp32 will reuse this multi-lib set.
! </p><div class="smallexample">
! <pre class="smallexample">rv32i-ilp32-rv32im-c
  </pre></div>
  
  <p>Example 4: Add multi-lib suppport for rv64ima with lp64; rv64imaf with lp64,
  rv64imac with lp64 and rv64imafc with lp64 will reuse this multi-lib set.
! </p><div class="smallexample">
! <pre class="smallexample">rv64ima-lp64--f,c,fc
  </pre></div>
  
  <p><samp>--with-multilib-generator</samp> have an optional configuration argument
--- 802,826 ----
  reuse rule with architecture string and reuse rule with sub-extension.
  </p>
  <p>Example 1: Add multi-lib suppport for rv32i with ilp32.
! </p><div class="example">
! <pre class="example">rv32i-ilp32--
  </pre></div>
  
  <p>Example 2: Add multi-lib suppport for rv32i with ilp32 and rv32imafd with ilp32.
! </p><div class="example">
! <pre class="example">rv32i-ilp32--;rv32imafd-ilp32--
  </pre></div>
  
  <p>Example 3: Add multi-lib suppport for rv32i with ilp32; rv32im with ilp32 and
  rv32ic with ilp32 will reuse this multi-lib set.
! </p><div class="example">
! <pre class="example">rv32i-ilp32-rv32im-c
  </pre></div>
  
  <p>Example 4: Add multi-lib suppport for rv64ima with lp64; rv64imaf with lp64,
  rv64imac with lp64 and rv64imafc with lp64 will reuse this multi-lib set.
! </p><div class="example">
! <pre class="example">rv64ima-lp64--f,c,fc
  </pre></div>
  
  <p><samp>--with-multilib-generator</samp> have an optional configuration argument
*************** currently we support medlow and medany.
*** 791,804 ****
  </p>
  <p>Example 5: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and
  medlow code model
! </p><div class="smallexample">
! <pre class="smallexample">rv64ima-lp64--;--cmodel=medlow
  </pre></div>
  
  <p>Example 6: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and
  medlow code model; rv64ima with lp64 and medany code model
! </p><div class="smallexample">
! <pre class="smallexample">rv64ima-lp64--;--cmodel=medlow,medany
  </pre></div>
  
  </dd>
--- 830,843 ----
  </p>
  <p>Example 5: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and
  medlow code model
! </p><div class="example">
! <pre class="example">rv64ima-lp64--;--cmodel=medlow
  </pre></div>
  
  <p>Example 6: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and
  medlow code model; rv64ima with lp64 and medany code model
! </p><div class="example">
! <pre class="example">rv64ima-lp64--;--cmodel=medlow,medany
  </pre></div>
  
  </dd>
*************** size as a power of two in bytes.  On AAr
*** 1092,1097 ****
--- 1131,1154 ----
  12 (4KB) or 16 (64KB).
  </p>
  </dd>
+ <dt><code>--with-isa-spec=<var>ISA-spec-string</var></code></dt>
+ <dd><p>On RISC-V targets specify the default version of the RISC-V Unprivileged
+ (formerly User-Level) ISA specification to produce code conforming to.
+ The possibilities for <var>ISA-spec-string</var> are:
+ </p><dl compact="compact">
+ <dt><code>2.2</code></dt>
+ <dd><p>Produce code conforming to version 2.2.
+ </p></dd>
+ <dt><code>20190608</code></dt>
+ <dd><p>Produce code conforming to version 20190608.
+ </p></dd>
+ <dt><code>20191213</code></dt>
+ <dd><p>Produce code conforming to version 20191213.
+ </p></dd>
+ </dl>
+ <p>In the absence of this configuration option the default version is 20191213.
+ </p>
+ </dd>
  <dt><code>--enable-__cxa_atexit</code></dt>
  <dd><p>Define if you want to use __cxa_atexit, rather than atexit, to
  register C++ destructors for local statics and global objects.
*************** parallel.  The default is &lsquo;<samp>y
*** 1199,1205 ****
  the remaining libraries.
  </p>
  </dd>
! <dt><code><a name="WithAixSoname"></a>--with-aix-soname=&lsquo;<samp>aix</samp>&rsquo;, &lsquo;<samp>svr4</samp>&rsquo; or &lsquo;<samp>both</samp>&rsquo;</code></dt>
  <dd><p>Traditional AIX shared library versioning (versioned <code>Shared Object</code>
  files as members of unversioned <code>Archive Library</code> files named
  &lsquo;<samp>lib.a</samp>&rsquo;) causes numerous headaches for package managers. However,
--- 1256,1262 ----
  the remaining libraries.
  </p>
  </dd>
! <dt><code><span id="WithAixSoname"></span>--with-aix-soname=&lsquo;<samp>aix</samp>&rsquo;, &lsquo;<samp>svr4</samp>&rsquo; or &lsquo;<samp>both</samp>&rsquo;</code></dt>
  <dd><p>Traditional AIX shared library versioning (versioned <code>Shared Object</code>
  files as members of unversioned <code>Archive Library</code> files named
  &lsquo;<samp>lib.a</samp>&rsquo;) causes numerous headaches for package managers. However,
*************** where this is called the &quot;SONAME&qu
*** 1210,1216 ****
  linker does search for &lsquo;<samp>libNAME.so</samp>&rsquo; before &lsquo;<samp>libNAME.a</samp>&rsquo; library
  filenames with the &lsquo;<samp>-lNAME</samp>&rsquo; linker flag.
  </p>
! <a name="AixLdCommand"></a><p>For detailed information please refer to the AIX
  <a href="https://www.ibm.com/support/knowledgecenter/search/%22the%20ld%20command%2C%20also%20called%20the%20linkage%20editor%20or%20binder%22">ld
  Command</a> reference.
  </p>
--- 1267,1273 ----
  linker does search for &lsquo;<samp>libNAME.so</samp>&rsquo; before &lsquo;<samp>libNAME.a</samp>&rsquo; library
  filenames with the &lsquo;<samp>-lNAME</samp>&rsquo; linker flag.
  </p>
! <span id="AixLdCommand"></span><p>For detailed information please refer to the AIX
  <a href="https://www.ibm.com/support/knowledgecenter/search/%22the%20ld%20command%2C%20also%20called%20the%20linkage%20editor%20or%20binder%22">ld
  Command</a> reference.
  </p>
*************** this option is still experimental and no
*** 1310,1317 ****
  their runtime libraries should be built.  For a list of valid values for
  <var>langN</var> you can issue the following command in the
  <samp>gcc</samp> directory of your GCC source tree:<br>
! </p><div class="smallexample">
! <pre class="smallexample">grep ^language= */config-lang.in
  </pre></div>
  <p>Currently, you can use any of the following:
  <code>all</code>, <code>default</code>, <code>ada</code>, <code>c</code>, <code>c++</code>, <code>d</code>,
--- 1367,1374 ----
  their runtime libraries should be built.  For a list of valid values for
  <var>langN</var> you can issue the following command in the
  <samp>gcc</samp> directory of your GCC source tree:<br>
! </p><div class="example">
! <pre class="example">grep ^language= */config-lang.in
  </pre></div>
  <p>Currently, you can use any of the following:
  <code>all</code>, <code>default</code>, <code>ada</code>, <code>c</code>, <code>c++</code>, <code>d</code>,
*************** compiler driver.
*** 1445,1452 ****
  <dd><p>The <samp>--enable-win32-registry</samp> option enables Microsoft Windows-hosted GCC
  to look up installations paths in the registry using the following key:
  </p>
! <div class="smallexample">
! <pre class="smallexample"><code>HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\<var>key</var></code>
  </pre></div>
  
  <p><var>key</var> defaults to GCC version number, and can be overridden by the
--- 1502,1509 ----
  <dd><p>The <samp>--enable-win32-registry</samp> option enables Microsoft Windows-hosted GCC
  to look up installations paths in the registry using the following key:
  </p>
! <div class="example">
! <pre class="example"><code>HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\<var>key</var></code>
  </pre></div>
  
  <p><var>key</var> defaults to GCC version number, and can be overridden by the
*************** Until all of the libraries are converted
*** 1641,1657 ****
  point, it is not recommended to use
  <samp>--with-long-double-format=ieee</samp>.
  </p>
- <p>On little endian PowerPC Linux systems, if you explicitly set the
- <code>long double</code> type, it will build multilibs to allow you to
- select either <code>long double</code> format, unless you disable multilibs
- with the <code>--disable-multilib</code> option.  At present,
- <code>long double</code> multilibs are not built on big endian PowerPC Linux
- systems.  If you are building multilibs, you will need to configure
- the compiler using the <samp>--with-system-zlib</samp> option.
- </p>
- <p>If you do not set the <code>long double</code> type explicitly, no multilibs
- will be generated.
- </p>
  </dd>
  <dt><code>--enable-fdpic</code></dt>
  <dd><p>On SH Linux systems, generate ELF FDPIC code.
--- 1698,1703 ----
*************** GNU/Linux (&lsquo;<samp>i686-pc-linux-gn
*** 1801,1808 ****
  executable on the former system), you can configure GCC as follows for
  getting compatible linker plugins:
  </p>
! <div class="smallexample">
! <pre class="smallexample">% <var>srcdir</var>/configure \
      --host=x86_64-pc-linux-gnu \
      --enable-linker-plugin-configure-flags=--host=i686-pc-linux-gnu \
      --enable-linker-plugin-flags='CC=gcc\ -m32\ -Wl,-rpath,[...]/i686-pc-linux-gnu/lib'
--- 1847,1854 ----
  executable on the former system), you can configure GCC as follows for
  getting compatible linker plugins:
  </p>
! <div class="example">
! <pre class="example">% <var>srcdir</var>/configure \
      --host=x86_64-pc-linux-gnu \
      --enable-linker-plugin-configure-flags=--host=i686-pc-linux-gnu \
      --enable-linker-plugin-flags='CC=gcc\ -m32\ -Wl,-rpath,[...]/i686-pc-linux-gnu/lib'
*************** Offload compilers are expected to be alr
*** 1849,1860 ****
  path for them is <samp><var>exec-prefix</var></samp>, but it can be changed by
  specifying paths <var>path1</var>, &hellip;, <var>pathN</var>.
  </p>
! <div class="smallexample">
! <pre class="smallexample">% <var>srcdir</var>/configure \
      --enable-offload-targets=x86_64-intelmicemul-linux-gnu=/path/to/x86_64/compiler,nvptx-none
  </pre></div>
  
  </dd>
  <dt><code>--with-hsa-runtime=<var>pathname</var></code></dt>
  <dt><code>--with-hsa-runtime-include=<var>pathname</var></code></dt>
  <dt><code>--with-hsa-runtime-lib=<var>pathname</var></code></dt>
--- 1895,1915 ----
  path for them is <samp><var>exec-prefix</var></samp>, but it can be changed by
  specifying paths <var>path1</var>, &hellip;, <var>pathN</var>.
  </p>
! <div class="example">
! <pre class="example">% <var>srcdir</var>/configure \
      --enable-offload-targets=x86_64-intelmicemul-linux-gnu=/path/to/x86_64/compiler,nvptx-none
  </pre></div>
  
  </dd>
+ <dt><code>--enable-offload-defaulted</code></dt>
+ <dd>
+ <p>Tell GCC that configured but not installed offload compilers and libgomp
+ plugins are silently ignored.  Useful for distribution compilers where
+ those are in separate optional packages and where the presence or absence
+ of those optional packages should determine the actual supported offloading
+ target set rather than the GCC configure-time selection.
+ </p>
+ </dd>
  <dt><code>--with-hsa-runtime=<var>pathname</var></code></dt>
  <dt><code>--with-hsa-runtime-include=<var>pathname</var></code></dt>
  <dt><code>--with-hsa-runtime-lib=<var>pathname</var></code></dt>
*************** disabled.
*** 1903,1910 ****
  </p></dd>
  </dl>
  
! <a name="Cross-Compiler-Specific-Options"></a>
! <h4 class="subheading">Cross-Compiler-Specific Options</h4>
  <p>The following options only apply to building cross compilers.
  </p>
  <dl compact="compact">
--- 1958,1964 ----
  </p></dd>
  </dl>
  
! <span id="Cross-Compiler-Specific-Options"></span><h4 class="subheading">Cross-Compiler-Specific Options</h4>
  <p>The following options only apply to building cross compilers.
  </p>
  <dl compact="compact">
*************** omitted from <samp>libgcc.a</samp> on th
*** 1998,2004 ****
  being used as the target C&nbsp; library.  This causes float support
  functions like <code>__addsf3</code> to be omitted from <samp>libgcc.a</samp> on
  the assumption that it will be provided by <samp>libm.a</samp>.  For more
! technical details, cf. <a href="http://gcc.gnu.org/PR54461">PR54461</a>.
  It is not supported for
  RTEMS configurations, which currently use newlib.  The option is
  supported since version 4.7.2 and is the default in 4.8.0 and newer.
--- 2052,2058 ----
  being used as the target C&nbsp; library.  This causes float support
  functions like <code>__addsf3</code> to be omitted from <samp>libgcc.a</samp> on
  the assumption that it will be provided by <samp>libm.a</samp>.  For more
! technical details, cf. <a href="https://gcc.gnu.org/PR54461">PR54461</a>.
  It is not supported for
  RTEMS configurations, which currently use newlib.  The option is
  supported since version 4.7.2 and is the default in 4.8.0 and newer.
*************** tools.
*** 2081,2088 ****
  </p></dd>
  </dl>
  
! <a name="Overriding-configure-test-results"></a>
! <h4 class="subsubheading">Overriding <code>configure</code> test results</h4>
  
  <p>Sometimes, it might be necessary to override the result of some
  <code>configure</code> test, for example in order to ease porting to a new
--- 2135,2141 ----
  </p></dd>
  </dl>
  
! <span id="Overriding-configure-test-results"></span><h4 class="subsubheading">Overriding <code>configure</code> test results</h4>
  
  <p>Sometimes, it might be necessary to override the result of some
  <code>configure</code> test, for example in order to ease porting to a new
*************** script provides three variables for this
*** 2091,2109 ****
  </p>
  <dl compact="compact">
  <dt><code>build_configargs</code></dt>
! <dd><a name="index-build_005fconfigargs"></a>
  <p>The contents of this variable is passed to all build <code>configure</code>
  scripts.
  </p>
  </dd>
  <dt><code>host_configargs</code></dt>
! <dd><a name="index-host_005fconfigargs"></a>
  <p>The contents of this variable is passed to all host <code>configure</code>
  scripts.
  </p>
  </dd>
  <dt><code>target_configargs</code></dt>
! <dd><a name="index-target_005fconfigargs"></a>
  <p>The contents of this variable is passed to all target <code>configure</code>
  scripts.
  </p>
--- 2144,2162 ----
  </p>
  <dl compact="compact">
  <dt><code>build_configargs</code></dt>
! <dd><span id="index-build_005fconfigargs"></span>
  <p>The contents of this variable is passed to all build <code>configure</code>
  scripts.
  </p>
  </dd>
  <dt><code>host_configargs</code></dt>
! <dd><span id="index-host_005fconfigargs"></span>
  <p>The contents of this variable is passed to all host <code>configure</code>
  scripts.
  </p>
  </dd>
  <dt><code>target_configargs</code></dt>
! <dd><span id="index-target_005fconfigargs"></span>
  <p>The contents of this variable is passed to all target <code>configure</code>
  scripts.
  </p>
*************** scripts.
*** 2114,2121 ****
  overrides, you can pass a setting for <code>CONFIG_SITE</code> and set
  variables in the site file.
  </p>
! <a name="Objective-C-Specific-Options"></a>
! <h4 class="subheading">Objective-C-Specific Options</h4>
  
  <p>The following options apply to the build of the Objective-C runtime library.
  </p>
--- 2167,2173 ----
  overrides, you can pass a setting for <code>CONFIG_SITE</code> and set
  variables in the site file.
  </p>
! <span id="Objective-C-Specific-Options"></span><h4 class="subheading">Objective-C-Specific Options</h4>
  
  <p>The following options apply to the build of the Objective-C runtime library.
  </p>
*************** default locations.
*** 2151,2158 ****
  </p></dd>
  </dl>
  
! <a name="D-Specific-Options"></a>
! <h4 class="subheading">D-Specific Options</h4>
  
  <p>The following options apply to the build of the D runtime library.
  </p>
--- 2203,2209 ----
  </p></dd>
  </dl>
  
! <span id="D-Specific-Options"></span><h4 class="subheading">D-Specific Options</h4>
  
  <p>The following options apply to the build of the D runtime library.
  </p>
*************** to be available for each multilib varian
*** 2205,2211 ****
  
  
  
- 
  
  
  
--- 2256,2261 ----
diff -Nrcpad gcc-11.3.0/INSTALL/download.html gcc-12.1.0/INSTALL/download.html
*** gcc-11.3.0/INSTALL/download.html	Thu Apr 21 07:59:38 2022
--- gcc-12.1.0/INSTALL/download.html	Fri May  6 07:31:21 2022
***************
*** 1,6 ****
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
--- 1,6 ----
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2022 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
*************** A GNU Manual
*** 19,25 ****
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Downloading GCC</title>
--- 19,25 ----
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Downloading GCC</title>
*************** You have freedom to copy and modify this
*** 33,55 ****
  <!--
  a.summary-letter {text-decoration: none}
  blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
  div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
  div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
  kbd {font-style: oblique}
  pre.display {font-family: inherit}
  pre.format {font-family: inherit}
  pre.menu-comment {font-family: serif}
  pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
  span.nolinebreak {white-space: nowrap}
  span.roman {font-family: initial; font-weight: normal}
  span.sansserif {font-family: sans-serif; font-weight: normal}
--- 33,46 ----
*************** ul.no-bullet {list-style: none}
*** 80,92 ****
  
  
  
! <a name="index-Downloading-GCC"></a>
! <a name="index-Downloading-the-Source"></a>
  
! <p>GCC is distributed via <a href="http://gcc.gnu.org/git.html">git</a> and via
  HTTPS as tarballs compressed with <code>gzip</code> or <code>bzip2</code>.
  </p>
! <p>Please refer to the <a href="http://gcc.gnu.org/releases.html">releases web page</a>
  for information on how to obtain GCC.
  </p>
  <p>The source distribution includes the C, C++, Objective-C, Fortran,
--- 71,83 ----
  
  
  
! <span id="index-Downloading-GCC"></span>
! <span id="index-Downloading-the-Source"></span>
  
! <p>GCC is distributed via <a href="https://gcc.gnu.org/git.html">git</a> and via
  HTTPS as tarballs compressed with <code>gzip</code> or <code>bzip2</code>.
  </p>
! <p>Please refer to the <a href="https://gcc.gnu.org/releases.html">releases web page</a>
  for information on how to obtain GCC.
  </p>
  <p>The source distribution includes the C, C++, Objective-C, Fortran,
*************** respectively (or use symbolic links with
*** 121,127 ****
  
  
  
- 
  
  
  
--- 112,117 ----
diff -Nrcpad gcc-11.3.0/INSTALL/finalinstall.html gcc-12.1.0/INSTALL/finalinstall.html
*** gcc-11.3.0/INSTALL/finalinstall.html	Thu Apr 21 07:59:39 2022
--- gcc-12.1.0/INSTALL/finalinstall.html	Fri May  6 07:31:21 2022
***************
*** 1,6 ****
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
--- 1,6 ----
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2022 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
*************** A GNU Manual
*** 19,25 ****
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Final installation</title>
--- 19,25 ----
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Final installation</title>
*************** You have freedom to copy and modify this
*** 33,55 ****
  <!--
  a.summary-letter {text-decoration: none}
  blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
  div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
  div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
  kbd {font-style: oblique}
  pre.display {font-family: inherit}
  pre.format {font-family: inherit}
  pre.menu-comment {font-family: serif}
  pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
  span.nolinebreak {white-space: nowrap}
  span.roman {font-family: initial; font-weight: normal}
  span.sansserif {font-family: sans-serif; font-weight: normal}
--- 33,46 ----
*************** ul.no-bullet {list-style: none}
*** 86,93 ****
  
  
  <p>Now that GCC has been built (and optionally tested), you can install it with
! </p><div class="smallexample">
! <pre class="smallexample">cd <var>objdir</var> &amp;&amp; make install
  </pre></div>
  
  <p>We strongly recommend to install into a target directory where there is
--- 77,84 ----
  
  
  <p>Now that GCC has been built (and optionally tested), you can install it with
! </p><div class="example">
! <pre class="example">cd <var>objdir</var> &amp;&amp; make install
  </pre></div>
  
  <p>We strongly recommend to install into a target directory where there is
*************** binutils, including assembler and linker
*** 119,126 ****
  <p>Installation into a temporary staging area or into a <code>chroot</code>
  jail can be achieved with the command
  </p>
! <div class="smallexample">
! <pre class="smallexample">make DESTDIR=<var>path-to-rootdir</var> install
  </pre></div>
  
  <p>where <var>path-to-rootdir</var> is the absolute path of
--- 110,117 ----
  <p>Installation into a temporary staging area or into a <code>chroot</code>
  jail can be achieved with the command
  </p>
! <div class="example">
! <pre class="example">make DESTDIR=<var>path-to-rootdir</var> install
  </pre></div>
  
  <p>where <var>path-to-rootdir</var> is the absolute path of
*************** using the <code>DESTDIR</code> feature.
*** 139,151 ****
  </p>
  <p>You can install stripped programs and libraries with
  </p>
! <div class="smallexample">
! <pre class="smallexample">make install-strip
  </pre></div>
  
  <p>If you are bootstrapping a released version of GCC then please
  quickly review the build status page for your release, available from
! <a href="http://gcc.gnu.org/buildstat.html">http://gcc.gnu.org/buildstat.html</a>.
  If your system is not listed for the version of GCC that you built,
  send a note to
  <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a> indicating
--- 130,142 ----
  </p>
  <p>You can install stripped programs and libraries with
  </p>
! <div class="example">
! <pre class="example">make install-strip
  </pre></div>
  
  <p>If you are bootstrapping a released version of GCC then please
  quickly review the build status page for your release, available from
! <a href="https://gcc.gnu.org/buildstat.html">https://gcc.gnu.org/buildstat.html</a>.
  If your system is not listed for the version of GCC that you built,
  send a note to
  <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a> indicating
*************** recent version of GCC.
*** 218,224 ****
  
  
  
- 
  
  
  
--- 209,214 ----
diff -Nrcpad gcc-11.3.0/INSTALL/gfdl.html gcc-12.1.0/INSTALL/gfdl.html
*** gcc-11.3.0/INSTALL/gfdl.html	Thu Apr 21 07:59:40 2022
--- gcc-12.1.0/INSTALL/gfdl.html	Fri May  6 07:31:22 2022
***************
*** 1,6 ****
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
--- 1,6 ----
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2022 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
*************** A GNU Manual
*** 19,25 ****
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: GNU Free Documentation License</title>
--- 19,25 ----
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: GNU Free Documentation License</title>
*************** You have freedom to copy and modify this
*** 33,55 ****
  <!--
  a.summary-letter {text-decoration: none}
  blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
  div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
  div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
  kbd {font-style: oblique}
  pre.display {font-family: inherit}
  pre.format {font-family: inherit}
  pre.menu-comment {font-family: serif}
  pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
  span.nolinebreak {white-space: nowrap}
  span.roman {font-family: initial; font-weight: normal}
  span.sansserif {font-family: sans-serif; font-weight: normal}
--- 33,46 ----
*************** ul.no-bullet {list-style: none}
*** 87,101 ****
  
  
  
- 
  <h1 align="center">Installing GCC: GNU Free Documentation License</h1>
  
! <a name="index-FDL_002c-GNU-Free-Documentation-License"></a>
  <div align="center">Version 1.3, 3 November 2008
  </div>
  <div class="display">
  <pre class="display">Copyright &copy; 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
! <a href="http://fsf.org/">http://fsf.org/</a>
  
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
--- 78,91 ----
  
  
  
  <h1 align="center">Installing GCC: GNU Free Documentation License</h1>
  
! <span id="index-FDL_002c-GNU-Free-Documentation-License"></span>
  <div align="center">Version 1.3, 3 November 2008
  </div>
  <div class="display">
  <pre class="display">Copyright &copy; 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
! <a href="https://fsf.org/">https://fsf.org/</a>
  
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
*************** not give you any rights to use it.
*** 477,483 ****
  of the GNU Free Documentation License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.  See
! <a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>.
  </p>
  <p>Each version of the License is given a distinguishing version number.
  If the Document specifies that a particular numbered version of this
--- 467,473 ----
  of the GNU Free Documentation License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.  See
! <a href="https://www.gnu.org/copyleft/">https://www.gnu.org/copyleft/</a>.
  </p>
  <p>Each version of the License is given a distinguishing version number.
  If the Document specifies that a particular numbered version of this
*************** provided the MMC is eligible for relicen
*** 523,537 ****
  </p>
  </li></ol>
  
! <a name="ADDENDUM_003a-How-to-use-this-License-for-your-documents"></a>
! <h3 class="unnumberedsec">ADDENDUM: How to use this License for your documents</h3>
  
  <p>To use this License in a document you have written, include a copy of
  the License in the document and put the following copyright and
  license notices just after the title page:
  </p>
! <div class="smallexample">
! <pre class="smallexample">  Copyright (C)  <var>year</var>  <var>your name</var>.
    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
--- 513,526 ----
  </p>
  </li></ol>
  
! <span id="ADDENDUM_003a-How-to-use-this-License-for-your-documents"></span><h3 class="unnumberedsec">ADDENDUM: How to use this License for your documents</h3>
  
  <p>To use this License in a document you have written, include a copy of
  the License in the document and put the following copyright and
  license notices just after the title page:
  </p>
! <div class="example">
! <pre class="example">  Copyright (C)  <var>year</var>  <var>your name</var>.
    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
*************** license notices just after the title pag
*** 543,550 ****
  <p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
  replace the &ldquo;with...Texts.&rdquo; line with this:
  </p>
! <div class="smallexample">
! <pre class="smallexample">    with the Invariant Sections being <var>list their titles</var>, with
      the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
      being <var>list</var>.
  </pre></div>
--- 532,539 ----
  <p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
  replace the &ldquo;with...Texts.&rdquo; line with this:
  </p>
! <div class="example">
! <pre class="example">    with the Invariant Sections being <var>list their titles</var>, with
      the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
      being <var>list</var>.
  </pre></div>
diff -Nrcpad gcc-11.3.0/INSTALL/index.html gcc-12.1.0/INSTALL/index.html
*** gcc-11.3.0/INSTALL/index.html	Thu Apr 21 07:59:37 2022
--- gcc-12.1.0/INSTALL/index.html	Fri May  6 07:31:20 2022
***************
*** 1,6 ****
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
--- 1,6 ----
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2022 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
*************** A GNU Manual
*** 19,25 ****
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC</title>
--- 19,25 ----
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC</title>
*************** You have freedom to copy and modify this
*** 33,55 ****
  <!--
  a.summary-letter {text-decoration: none}
  blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
  div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
  div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
  kbd {font-style: oblique}
  pre.display {font-family: inherit}
  pre.format {font-family: inherit}
  pre.menu-comment {font-family: serif}
  pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
  span.nolinebreak {white-space: nowrap}
  span.roman {font-family: initial; font-weight: normal}
  span.sansserif {font-family: sans-serif; font-weight: normal}
--- 33,46 ----
*************** ul.no-bullet {list-style: none}
*** 80,86 ****
  
  
  <p>The latest version of this document is always available at
! <a href="http://gcc.gnu.org/install/">http://gcc.gnu.org/install/</a>.
  It refers to the current development sources, instructions for
  specific released versions are included with the sources.
  </p>
--- 71,77 ----
  
  
  <p>The latest version of this document is always available at
! <a href="https://gcc.gnu.org/install/">https://gcc.gnu.org/install/</a>.
  It refers to the current development sources, instructions for
  specific released versions are included with the sources.
  </p>
*************** We recommend you browse the entire gener
*** 97,103 ****
  you proceed.
  </p>
  <p>Lists of successful builds for released versions of GCC are
! available at <a href="http://gcc.gnu.org/buildstat.html">http://gcc.gnu.org/buildstat.html</a>.
  These lists are updated as new information becomes available.
  </p>
  <p>The installation procedure itself is broken into five steps.
--- 88,94 ----
  you proceed.
  </p>
  <p>Lists of successful builds for released versions of GCC are
! available at <a href="https://gcc.gnu.org/buildstat.html">https://gcc.gnu.org/buildstat.html</a>.
  These lists are updated as new information becomes available.
  </p>
  <p>The installation procedure itself is broken into five steps.
*************** remove that directory when you do not ne
*** 118,132 ****
  any longer, and, if shared libraries are installed there as well, no
  more binaries exist that use them.
  </p>
- <p>There are also some <a href="old.html">old installation instructions</a>,
- which are mostly obsolete but still contain some information which has
- not yet been merged into the main part of this manual.
- </p>
  <hr />
  <p>
  <p><a href="./index.html">Return to the GCC Installation page</a>
  </p>
! <p>Copyright &copy; 1988-2021 Free Software Foundation, Inc.
  </p><br>
  <p>Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
--- 109,119 ----
  any longer, and, if shared libraries are installed there as well, no
  more binaries exist that use them.
  </p>
  <hr />
  <p>
  <p><a href="./index.html">Return to the GCC Installation page</a>
  </p>
! <p>Copyright &copy; 1988-2022 Free Software Foundation, Inc.
  </p><br>
  <p>Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
*************** Free Documentation License</a>&rdquo;.
*** 149,156 ****
  
  
  
- 
- 
  
  
  
--- 136,141 ----
diff -Nrcpad gcc-11.3.0/INSTALL/old.html gcc-12.1.0/INSTALL/old.html
*** gcc-11.3.0/INSTALL/old.html	Thu Apr 21 07:59:39 2022
--- gcc-12.1.0/INSTALL/old.html	Thu Jan  1 00:00:00 1970
***************
*** 1,255 ****
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
- 
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3 or
- any later version published by the Free Software Foundation; with no
- Invariant Sections, the Front-Cover texts being (a) (see below), and
- with the Back-Cover Texts being (b) (see below).  A copy of the
- license is included in the section entitled "GNU
- Free Documentation License".
- 
- (a) The FSF's Front-Cover Text is:
- 
- A GNU Manual
- 
- (b) The FSF's Back-Cover Text is:
- 
- You have freedom to copy and modify this GNU Manual, like GNU
-      software.  Copies published by the Free Software Foundation raise
-      funds for GNU development. -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>Installing GCC: Old documentation</title>
- 
- <meta name="description" content="Installing GCC: Old documentation">
- <meta name="keywords" content="Installing GCC: Old documentation">
- <meta name="resource-type" content="document">
- <meta name="distribution" content="global">
- <meta name="Generator" content="makeinfo">
- <style type="text/css">
- <!--
- a.summary-letter {text-decoration: none}
- blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
- div.display {margin-left: 3.2em}
- div.example {margin-left: 3.2em}
- div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
- kbd {font-style: oblique}
- pre.display {font-family: inherit}
- pre.format {font-family: inherit}
- pre.menu-comment {font-family: serif}
- pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
- span.nolinebreak {white-space: nowrap}
- span.roman {font-family: initial; font-weight: normal}
- span.sansserif {font-family: sans-serif; font-weight: normal}
- ul.no-bullet {list-style: none}
- -->
- </style>
- 
- 
- </head>
- 
- <body lang="en">
- <h1 class="settitle" align="center">Installing GCC: Old documentation</h1>
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- <h1 align="center">Old installation documentation</h1>
- 
- <p>Note most of this information is out of date and superseded by the
- previous chapters of this manual.  It is provided for historical
- reference only, because of a lack of volunteers to merge it into the
- main manual.
- </p>
- 
- <p>Here is the procedure for installing GCC on a GNU or Unix system.
- </p>
- <ol>
- <li> If you have chosen a configuration for GCC which requires other GNU
- tools (such as GAS or the GNU linker) instead of the standard system
- tools, install the required tools in the build directory under the names
- <samp>as</samp>, <samp>ld</samp> or whatever is appropriate.
- 
- <p>Alternatively, you can do subsequent compilation using a value of the
- <code>PATH</code> environment variable such that the necessary GNU tools come
- before the standard system tools.
- </p>
- </li><li> Specify the host, build and target machine configurations.  You do this
- when you run the <samp>configure</samp> script.
- 
- <p>The <em>build</em> machine is the system which you are using, the
- <em>host</em> machine is the system where you want to run the resulting
- compiler (normally the build machine), and the <em>target</em> machine is
- the system for which you want the compiler to generate code.
- </p>
- <p>If you are building a compiler to produce code for the machine it runs
- on (a native compiler), you normally do not need to specify any operands
- to <samp>configure</samp>; it will try to guess the type of machine you are on
- and use that as the build, host and target machines.  So you don&rsquo;t need
- to specify a configuration when building a native compiler unless
- <samp>configure</samp> cannot figure out what your configuration is or guesses
- wrong.
- </p>
- <p>In those cases, specify the build machine&rsquo;s <em>configuration name</em>
- with the <samp>--host</samp> option; the host and target will default to be
- the same as the host machine.
- </p>
- <p>Here is an example:
- </p>
- <div class="smallexample">
- <pre class="smallexample">./configure --host=sparc-sun-sunos4.1
- </pre></div>
- 
- <p>A configuration name may be canonical or it may be more or less
- abbreviated.
- </p>
- <p>A canonical configuration name has three parts, separated by dashes.
- It looks like this: &lsquo;<samp><var>cpu</var>-<var>company</var>-<var>system</var></samp>&rsquo;.
- (The three parts may themselves contain dashes; <samp>configure</samp>
- can figure out which dashes serve which purpose.)  For example,
- &lsquo;<samp>m68k-sun-sunos4.1</samp>&rsquo; specifies a Sun 3.
- </p>
- <p>You can also replace parts of the configuration by nicknames or aliases.
- For example, &lsquo;<samp>sun3</samp>&rsquo; stands for &lsquo;<samp>m68k-sun</samp>&rsquo;, so
- &lsquo;<samp>sun3-sunos4.1</samp>&rsquo; is another way to specify a Sun 3.
- </p>
- <p>You can specify a version number after any of the system types, and some
- of the CPU types.  In most cases, the version is irrelevant, and will be
- ignored.  So you might as well specify the version if you know it.
- </p>
- <p>See <a href="#Configurations">Configurations</a>, for a list of supported configuration names and
- notes on many of the configurations.  You should check the notes in that
- section before proceeding any further with the installation of GCC.
- </p>
- </li></ol>
- 
- <h2><a name="Configurations"></a>Configurations Supported by GCC</h2>
- <a name="index-configurations-supported-by-GCC"></a>
- 
- <p>Here are the possible CPU types:
- </p>
- <blockquote>
- <p>1750a, a29k, alpha, arm, avr, c<var>n</var>, clipper, dsp16xx, elxsi, fr30, h8300,
- hppa1.0, hppa1.1, i370, i386, i486, i586, i686, i786, i860, i960, ip2k, m32r,
- m68000, m68k, m88k, mcore, mips, mipsel, mips64, mips64el,
- mn10200, mn10300, ns32k, pdp11, powerpc, powerpcle, romp, rs6000, sh, sparc,
- sparclite, sparc64, v850, vax, we32k.
- </p></blockquote>
- 
- <p>Here are the recognized company names.  As you can see, customary
- abbreviations are used rather than the longer official names.
- </p>
- <blockquote>
- <p>acorn, alliant, altos, apollo, apple, att, bull,
- cbm, convergent, convex, crds, dec, dg, dolphin,
- elxsi, encore, harris, hitachi, hp, ibm, intergraph, isi,
- mips, motorola, ncr, next, ns, omron, plexus,
- sequent, sgi, sony, sun, tti, unicom, wrs.
- </p></blockquote>
- 
- <p>The company name is meaningful only to disambiguate when the rest of
- the information supplied is insufficient.  You can omit it, writing
- just &lsquo;<samp><var>cpu</var>-<var>system</var></samp>&rsquo;, if it is not needed.  For example,
- &lsquo;<samp>vax-ultrix4.2</samp>&rsquo; is equivalent to &lsquo;<samp>vax-dec-ultrix4.2</samp>&rsquo;.
- </p>
- <p>Here is a list of system types:
- </p>
- <blockquote>
- <p>386bsd, aix, acis, amigaos, aos, aout, aux, bosx, bsd, clix, coff, ctix, cxux,
- dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, genix, gnu, linux,
- linux-gnu, hiux, hpux, iris, irix, isc, luna, lynxos, mach, minix, msdos, mvs,
- netbsd, newsos, nindy, ns, osf, osfrose, ptx, riscix, riscos, rtu, sco, sim,
- solaris, sunos, sym, sysv, udi, ultrix, unicos, uniplus, unos, vms, vsta,
- vxworks, winnt, xenix.
- </p></blockquote>
- 
- <p>You can omit the system type; then <samp>configure</samp> guesses the
- operating system from the CPU and company.
- </p>
- <p>You can add a version number to the system type; this may or may not
- make a difference.  For example, you can write &lsquo;<samp>bsd4.3</samp>&rsquo; or
- &lsquo;<samp>bsd4.4</samp>&rsquo; to distinguish versions of BSD.  In practice, the version
- number is most needed for &lsquo;<samp>sysv3</samp>&rsquo; and &lsquo;<samp>sysv4</samp>&rsquo;, which are often
- treated differently.
- </p>
- <p>&lsquo;<samp>linux-gnu</samp>&rsquo; is the canonical name for the GNU/Linux target; however
- GCC will also accept &lsquo;<samp>linux</samp>&rsquo;.  The version of the kernel in use is
- not relevant on these systems.  A suffix such as &lsquo;<samp>libc1</samp>&rsquo; or &lsquo;<samp>aout</samp>&rsquo;
- distinguishes major versions of the C library; all of the suffixed versions
- are obsolete.
- </p>
- <p>If you specify an impossible combination such as &lsquo;<samp>i860-dg-vms</samp>&rsquo;,
- then you may get an error message from <samp>configure</samp>, or it may
- ignore part of the information and do the best it can with the rest.
- <samp>configure</samp> always prints the canonical name for the alternative
- that it used.  GCC does not support all possible alternatives.
- </p>
- <p>Often a particular model of machine has a name.  Many machine names are
- recognized as aliases for CPU/company combinations.  Thus, the machine
- name &lsquo;<samp>sun3</samp>&rsquo;, mentioned above, is an alias for &lsquo;<samp>m68k-sun</samp>&rsquo;.
- Sometimes we accept a company name as a machine name, when the name is
- popularly used for a particular machine.  Here is a table of the known
- machine names:
- </p>
- <blockquote>
- <p>3300, 3b1, 3b<var>n</var>, 7300, altos3068, altos,
- apollo68, att-7300, balance,
- convex-c<var>n</var>, crds, decstation-3100,
- decstation, delta, encore,
- fx2800, gmicro, hp7<var>nn</var>, hp8<var>nn</var>,
- hp9k2<var>nn</var>, hp9k3<var>nn</var>, hp9k7<var>nn</var>,
- hp9k8<var>nn</var>, iris4d, iris, isi68,
- m3230, magnum, merlin, miniframe,
- mmax, news-3600, news800, news, next,
- pbd, pc532, pmax, powerpc, powerpcle, ps2, risc-news,
- rtpc, sun2, sun386i, sun386, sun3,
- sun4, symmetry, tower-32, tower.
- </p></blockquote>
- 
- <p>Remember that a machine name specifies both the cpu type and the company
- name.
- <hr />
- <p>
- <a href="./index.html">Return to the GCC Installation page</a>
- </p>
- 
- 
- 
- 
- 
- </body>
- </html>
--- 0 ----
diff -Nrcpad gcc-11.3.0/INSTALL/prerequisites.html gcc-12.1.0/INSTALL/prerequisites.html
*** gcc-11.3.0/INSTALL/prerequisites.html	Thu Apr 21 07:59:37 2022
--- gcc-12.1.0/INSTALL/prerequisites.html	Fri May  6 07:31:20 2022
***************
*** 1,6 ****
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
--- 1,6 ----
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2022 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
*************** A GNU Manual
*** 19,25 ****
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Prerequisites for GCC</title>
--- 19,25 ----
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Prerequisites for GCC</title>
*************** You have freedom to copy and modify this
*** 33,55 ****
  <!--
  a.summary-letter {text-decoration: none}
  blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
  div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
  div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
  kbd {font-style: oblique}
  pre.display {font-family: inherit}
  pre.format {font-family: inherit}
  pre.menu-comment {font-family: serif}
  pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
  span.nolinebreak {white-space: nowrap}
  span.roman {font-family: initial; font-weight: normal}
  span.sansserif {font-family: sans-serif; font-weight: normal}
--- 33,46 ----
*************** ul.no-bullet {list-style: none}
*** 79,92 ****
  
  
  
! <a name="index-Prerequisites"></a>
  
  <p>GCC requires that various tools and packages be available for use in the
  build procedure.  Modifying GCC sources requires additional tools
  described below.
  </p>
! <a name="Tools_002fpackages-necessary-for-building-GCC"></a>
! <h3 class="heading">Tools/packages necessary for building GCC</h3>
  <dl compact="compact">
  <dt>ISO C++11 compiler</dt>
  <dd><p>Necessary to bootstrap GCC.
--- 70,82 ----
  
  
  
! <span id="index-Prerequisites"></span>
  
  <p>GCC requires that various tools and packages be available for use in the
  build procedure.  Modifying GCC sources requires additional tools
  described below.
  </p>
! <span id="Tools_002fpackages-necessary-for-building-GCC"></span><h3 class="heading">Tools/packages necessary for building GCC</h3>
  <dl compact="compact">
  <dt>ISO C++11 compiler</dt>
  <dd><p>Necessary to bootstrap GCC.
*************** bootstrapping with a traditional (K&amp;
*** 101,111 ****
  GCC binary (version 4.8 or later) because source code for language
  frontends other than C might use GCC extensions.
  </p>
- <p>Note that to bootstrap GCC with versions of GCC earlier than 4.8, you
- may need to use <samp>--disable-stage1-checking</samp>, though
- bootstrapping the compiler with such earlier compilers is strongly
- discouraged.
- </p>
  </dd>
  <dt>C standard library and headers</dt>
  <dd>
--- 91,96 ----
*************** name of the package depends on your dist
*** 124,133 ****
  &lsquo;<samp>fatal error: gnu/stubs-32.h: No such file</samp>&rsquo;
  </p>
  </dd>
! <dt><a name="GNAT-prerequisite"></a>GNAT</dt>
  <dd>
  <p>In order to build GNAT, the Ada compiler, you need a working GNAT
! compiler (GCC version 4.7 or later).
  </p>
  <p>This includes GNAT tools such as <code>gnatmake</code> and
  <code>gnatlink</code>, since the Ada front end is written in Ada and
--- 109,118 ----
  &lsquo;<samp>fatal error: gnu/stubs-32.h: No such file</samp>&rsquo;
  </p>
  </dd>
! <dt><span id="GNAT-prerequisite"></span>GNAT</dt>
  <dd>
  <p>In order to build GNAT, the Ada compiler, you need a working GNAT
! compiler (GCC version 5.1 or later).
  </p>
  <p>This includes GNAT tools such as <code>gnatmake</code> and
  <code>gnatlink</code>, since the Ada front end is written in Ada and
*************** by verifying that &lsquo;<samp>gnatls -v
*** 154,159 ****
--- 139,169 ----
  section.
  </p>
  </dd>
+ <dt><span id="GDC-prerequisite"></span>GDC</dt>
+ <dd>
+ <p>In order to build GDC, the D compiler, you need a working GDC
+ compiler (GCC version 9.1 or later) and D runtime library,
+ &lsquo;<samp>libphobos</samp>&rsquo;, as the D front end is written in D.
+ </p>
+ <p>Versions of GDC prior to 12 can be built with an ISO C++11 compiler, which can
+ then be installed and used to bootstrap newer versions of the D front end.
+ </p>
+ <p>It is strongly recommended to use an older version of GDC to build GDC. More
+ recent versions of GDC than the version built are not guaranteed to work and
+ will often fail during the build with compilation errors relating to
+ deprecations or removed features.
+ </p>
+ <p>Note that <code>configure</code> does not test whether the GDC installation works
+ and has a sufficiently recent version.  Though the implementation of the D
+ front end does not make use of any GDC-specific extensions, or novel features
+ of the D language, if too old a GDC version is installed and
+ <samp>--enable-languages=d</samp> is used, the build will fail.
+ </p>
+ <p>On some targets, &lsquo;<samp>libphobos</samp>&rsquo; isn&rsquo;t enabled by default, but compiles
+ and works if <samp>--enable-libphobos</samp> is used.  Specifics are
+ documented for affected targets.
+ </p>
+ </dd>
  <dt>A &ldquo;working&rdquo; POSIX compatible shell, or GNU bash</dt>
  <dd>
  <p>Necessary when running <code>configure</code> because some
*************** are broken.  GNU awk version 3.1.5 is kn
*** 186,191 ****
--- 196,204 ----
  host/target specific instructions for your platform for the exact
  requirements.
  </p>
+ <p>Note binutils 2.35 or newer is required for LTO to work correctly
+ with GNU libtool that includes doing a bootstrap with LTO enabled.
+ </p>
  </dd>
  <dt>gzip version 1.2.4 (or later) or</dt>
  <dt>bzip2 version 1.0.2 (or later)</dt>
*************** download_prerequisites installs.
*** 263,269 ****
  <dt>MPC Library version 1.0.1 (or later)</dt>
  <dd>
  <p>Necessary to build GCC.  It can be downloaded from
! <a href="http://www.multiprecision.org/mpc/">http://www.multiprecision.org/mpc/</a>.  If an MPC source distribution
  is found in a subdirectory of your GCC sources named <samp>mpc</samp>, it
  will be built together with GCC.  Alternatively, if MPC is already
  installed but it is not in your default library search path, the
--- 276,282 ----
  <dt>MPC Library version 1.0.1 (or later)</dt>
  <dd>
  <p>Necessary to build GCC.  It can be downloaded from
! <a href="https://www.multiprecision.org/mpc/">https://www.multiprecision.org/mpc/</a>.  If an MPC source distribution
  is found in a subdirectory of your GCC sources named <samp>mpc</samp>, it
  will be built together with GCC.  Alternatively, if MPC is already
  installed but it is not in your default library search path, the
*************** Alternatively, the <samp>--with-zstd</sa
*** 293,300 ****
  </dd>
  </dl>
  
! <a name="Tools_002fpackages-necessary-for-modifying-GCC"></a>
! <h3 class="heading">Tools/packages necessary for modifying GCC</h3>
  <dl compact="compact">
  <dt>autoconf version 2.69</dt>
  <dt>GNU m4 version 1.4.6 (or later)</dt>
--- 306,312 ----
  </dd>
  </dl>
  
! <span id="Tools_002fpackages-necessary-for-modifying-GCC"></span><h3 class="heading">Tools/packages necessary for modifying GCC</h3>
  <dl compact="compact">
  <dt>autoconf version 2.69</dt>
  <dt>GNU m4 version 1.4.6 (or later)</dt>
*************** to the latest released version.
*** 331,337 ****
  <samp>gcc/cp/cfns.h</samp>.
  </p>
  </dd>
! <dt>DejaGnu 1.4.4</dt>
  <dt>Expect</dt>
  <dt>Tcl</dt>
  <dd>
--- 343,349 ----
  <samp>gcc/cp/cfns.h</samp>.
  </p>
  </dd>
! <dt>DejaGnu version 1.5.3 (or later)</dt>
  <dt>Expect</dt>
  <dt>Tcl</dt>
  <dd>
*************** own sources.
*** 414,420 ****
  
  
  
- 
  
  
  
--- 426,431 ----
diff -Nrcpad gcc-11.3.0/INSTALL/specific.html gcc-12.1.0/INSTALL/specific.html
*** gcc-11.3.0/INSTALL/specific.html	Thu Apr 21 07:59:37 2022
--- gcc-12.1.0/INSTALL/specific.html	Fri May  6 07:31:20 2022
***************
*** 1,6 ****
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
--- 1,6 ----
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2022 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
*************** A GNU Manual
*** 19,25 ****
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Host/Target specific installation notes for GCC</title>
--- 19,25 ----
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Host/Target specific installation notes for GCC</title>
*************** You have freedom to copy and modify this
*** 33,55 ****
  <!--
  a.summary-letter {text-decoration: none}
  blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
  div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
  div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
  kbd {font-style: oblique}
  pre.display {font-family: inherit}
  pre.format {font-family: inherit}
  pre.menu-comment {font-family: serif}
  pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
  span.nolinebreak {white-space: nowrap}
  span.roman {font-family: initial; font-weight: normal}
  span.sansserif {font-family: sans-serif; font-weight: normal}
--- 33,46 ----
*************** ul.no-bullet {list-style: none}
*** 86,96 ****
  
  
  
! <a name="index-Specific"></a>
! <a name="index-Specific-installation-notes"></a>
! <a name="index-Target-specific-installation"></a>
! <a name="index-Host-specific-installation"></a>
! <a name="index-Target-specific-installation-notes"></a>
  
  <p>Please read this document carefully <em>before</em> installing the
  GNU Compiler Collection on your machine.
--- 77,87 ----
  
  
  
! <span id="index-Specific"></span>
! <span id="index-Specific-installation-notes"></span>
! <span id="index-Target-specific-installation"></span>
! <span id="index-Host-specific-installation"></span>
! <span id="index-Target-specific-installation-notes"></span>
  
  <p>Please read this document carefully <em>before</em> installing the
  GNU Compiler Collection on your machine.
*************** information have to.
*** 180,187 ****
  
  <!-- -------- host/target specific issues start here ---------------- -->
  <hr />
! <a name="aarch64-x-x"></a><a name="aarch64*-*-*"></a>
! <h3 class="heading">aarch64*-*-*</h3>
  <p>Binutils pre 2.24 does not have support for selecting <samp>-mabi</samp> and
  does not support ILP32.  If it is used to build GCC 4.9 or later, GCC will
  not support option <samp>-mabi=ilp32</samp>.
--- 171,177 ----
  
  <!-- -------- host/target specific issues start here ---------------- -->
  <hr />
! <span id="aarch64-x-x"></span><span id="aarch64*-*-*"></span><h3 class="heading">aarch64*-*-*</h3>
  <p>Binutils pre 2.24 does not have support for selecting <samp>-mabi</samp> and
  does not support ILP32.  If it is used to build GCC 4.9 or later, GCC will
  not support option <samp>-mabi=ilp32</samp>.
*************** protections by default.  This mechanism
*** 218,237 ****
  of the options are given at configure time.
  </p>
  <hr />
! <a name="alpha-x-x"></a><a name="alpha*-*-*"></a>
! <h3 class="heading">alpha*-*-*</h3>
  <p>This section contains general configuration information for all
  Alpha-based platforms using ELF.  In addition to reading this
  section, please read all other sections that match your target.
  </p>
  <hr />
! <a name="amd64-x-solaris2"></a><a name="amd64-*-solaris2*"></a>
! <h3 class="heading">amd64-*-solaris2*</h3>
  <p>This is a synonym for &lsquo;<samp>x86_64-*-solaris2*</samp>&rsquo;.
  </p>
  <hr />
! <a name="amdgcn-x-amdhsa"></a><a name="amdgcn-*-amdhsa"></a>
! <h3 class="heading">amdgcn-*-amdhsa</h3>
  <p>AMD GCN GPU target.
  </p>
  <p>Instead of GNU Binutils, you will need to install LLVM 6, or later, and copy
--- 208,224 ----
  of the options are given at configure time.
  </p>
  <hr />
! <span id="alpha-x-x"></span><span id="alpha*-*-*"></span><h3 class="heading">alpha*-*-*</h3>
  <p>This section contains general configuration information for all
  Alpha-based platforms using ELF.  In addition to reading this
  section, please read all other sections that match your target.
  </p>
  <hr />
! <span id="amd64-x-solaris2"></span><span id="amd64-*-solaris2*"></span><h3 class="heading">amd64-*-solaris2*</h3>
  <p>This is a synonym for &lsquo;<samp>x86_64-*-solaris2*</samp>&rsquo;.
  </p>
  <hr />
! <span id="amdgcn-x-amdhsa"></span><span id="amdgcn-*-amdhsa"></span><h3 class="heading">amdgcn-*-amdhsa</h3>
  <p>AMD GCN GPU target.
  </p>
  <p>Instead of GNU Binutils, you will need to install LLVM 6, or later, and copy
*************** section, please read all other sections
*** 249,270 ****
  on the GPU.
  </p>
  <hr />
! <a name="arc-x-elf32"></a><a name="arc-*-elf32"></a>
! <h3 class="heading">arc-*-elf32</h3>
  
  <p>Use &lsquo;<samp>configure --target=arc-elf32 --with-cpu=<var>cpu</var> --enable-languages=&quot;c,c++&quot;</samp>&rsquo;
  to configure GCC, with <var>cpu</var> being one of &lsquo;<samp>arc600</samp>&rsquo;, &lsquo;<samp>arc601</samp>&rsquo;,
  or &lsquo;<samp>arc700</samp>&rsquo;.
  </p>
  <hr />
! <a name="arc-linux-uclibc"></a><a name="arc-linux-uclibc-1"></a>
! <h3 class="heading">arc-linux-uclibc</h3>
  
  <p>Use &lsquo;<samp>configure --target=arc-linux-uclibc --with-cpu=arc700 --enable-languages=&quot;c,c++&quot;</samp>&rsquo; to configure GCC.
  </p>
  <hr />
! <a name="arm-x-eabi"></a><a name="arm-*-eabi"></a>
! <h3 class="heading">arm-*-eabi</h3>
  <p>ARM-family processors.
  </p>
  <p>Building the Ada frontend commonly fails (an infinite loop executing
--- 236,254 ----
  on the GPU.
  </p>
  <hr />
! <span id="arc-x-elf32"></span><span id="arc-*-elf32"></span><h3 class="heading">arc-*-elf32</h3>
  
  <p>Use &lsquo;<samp>configure --target=arc-elf32 --with-cpu=<var>cpu</var> --enable-languages=&quot;c,c++&quot;</samp>&rsquo;
  to configure GCC, with <var>cpu</var> being one of &lsquo;<samp>arc600</samp>&rsquo;, &lsquo;<samp>arc601</samp>&rsquo;,
  or &lsquo;<samp>arc700</samp>&rsquo;.
  </p>
  <hr />
! <span id="arc-linux-uclibc"></span><span id="arc-linux-uclibc-1"></span><h3 class="heading">arc-linux-uclibc</h3>
  
  <p>Use &lsquo;<samp>configure --target=arc-linux-uclibc --with-cpu=arc700 --enable-languages=&quot;c,c++&quot;</samp>&rsquo; to configure GCC.
  </p>
  <hr />
! <span id="arm-x-eabi"></span><span id="arm-*-eabi"></span><h3 class="heading">arm-*-eabi</h3>
  <p>ARM-family processors.
  </p>
  <p>Building the Ada frontend commonly fails (an infinite loop executing
*************** or &lsquo;<samp>arc700</samp>&rsquo;.
*** 272,279 ****
  GNAT 4.6, 4.9 or 5 release branches are known to succeed.
  </p>
  <hr />
! <a name="avr"></a><a name="avr-1"></a>
! <h3 class="heading">avr</h3>
  <p>ATMEL AVR-family micro controllers.  These are used in embedded
  applications.  There are no standard Unix configurations.
  See &ldquo;AVR Options&rdquo; in the main manual
--- 256,262 ----
  GNAT 4.6, 4.9 or 5 release branches are known to succeed.
  </p>
  <hr />
! <span id="avr"></span><span id="avr-1"></span><h3 class="heading">avr</h3>
  <p>ATMEL AVR-family micro controllers.  These are used in embedded
  applications.  There are no standard Unix configurations.
  See &ldquo;AVR Options&rdquo; in the main manual
*************** can also be obtained from:
*** 290,304 ****
  </li></ul>
  
  <p>The following error:
! </p><div class="smallexample">
! <pre class="smallexample">Error: register required
  </pre></div>
  
  <p>indicates that you should upgrade to a newer version of the binutils.
  </p>
  <hr />
! <a name="bfin"></a><a name="Blackfin"></a>
! <h3 class="heading">Blackfin</h3>
  <p>The Blackfin processor, an Analog Devices DSP.
  See &ldquo;Blackfin Options&rdquo; in the main manual
  </p>
--- 273,286 ----
  </li></ul>
  
  <p>The following error:
! </p><div class="example">
! <pre class="example">Error: register required
  </pre></div>
  
  <p>indicates that you should upgrade to a newer version of the binutils.
  </p>
  <hr />
! <span id="bfin"></span><span id="Blackfin"></span><h3 class="heading">Blackfin</h3>
  <p>The Blackfin processor, an Analog Devices DSP.
  See &ldquo;Blackfin Options&rdquo; in the main manual
  </p>
*************** See &ldquo;Blackfin Options&rdquo; in th
*** 306,313 ****
  are available at <a href="https://sourceforge.net/projects/adi-toolchain/">https://sourceforge.net/projects/adi-toolchain/</a>.
  </p>
  <hr />
! <a name="cr16"></a><a name="CR16"></a>
! <h3 class="heading">CR16</h3>
  <p>The CR16 CompactRISC architecture is a 16-bit architecture. This
  architecture is used in embedded applications.
  </p>
--- 288,294 ----
  are available at <a href="https://sourceforge.net/projects/adi-toolchain/">https://sourceforge.net/projects/adi-toolchain/</a>.
  </p>
  <hr />
! <span id="cr16"></span><span id="CR16"></span><h3 class="heading">CR16</h3>
  <p>The CR16 CompactRISC architecture is a 16-bit architecture. This
  architecture is used in embedded applications.
  </p>
*************** GCC&nbsp;for building a CR16 elf cross-c
*** 321,328 ****
  configure GCC&nbsp;for building a CR16 uclinux cross-compiler.
  </p>
  <hr />
! <a name="cris"></a><a name="CRIS"></a>
! <h3 class="heading">CRIS</h3>
  <p>CRIS is a CPU architecture in Axis Communications systems-on-a-chip, for
  example the ETRAX series.  These are used in embedded applications.
  </p>
--- 302,308 ----
  configure GCC&nbsp;for building a CR16 uclinux cross-compiler.
  </p>
  <hr />
! <span id="cris"></span><span id="CRIS"></span><h3 class="heading">CRIS</h3>
  <p>CRIS is a CPU architecture in Axis Communications systems-on-a-chip, for
  example the ETRAX series.  These are used in embedded applications.
  </p>
*************** for a list of CRIS-specific options.
*** 332,339 ****
  <p>Use &lsquo;<samp>configure --target=cris-elf</samp>&rsquo; to configure GCC&nbsp;for building
  a cross-compiler for CRIS.
  <hr />
! <a name="dos"></a></p><a name="DOS"></a>
! <h3 class="heading">DOS</h3>
  <p>Please have a look at the <a href="binaries.html">binaries page</a>.
  </p>
  <p>You cannot install GCC by itself on MSDOS; it will not compile under
--- 312,318 ----
  <p>Use &lsquo;<samp>configure --target=cris-elf</samp>&rsquo; to configure GCC&nbsp;for building
  a cross-compiler for CRIS.
  <hr />
! <span id="dos"></span></p><span id="DOS"></span><h3 class="heading">DOS</h3>
  <p>Please have a look at the <a href="binaries.html">binaries page</a>.
  </p>
  <p>You cannot install GCC by itself on MSDOS; it will not compile under
*************** compilation package DJGPP, which include
*** 342,359 ****
  and includes all the necessary compilation tools and libraries.
  </p>
  <hr />
! <a name="epiphany-x-elf"></a><a name="epiphany-*-elf"></a>
! <h3 class="heading">epiphany-*-elf</h3>
  <p>Adapteva Epiphany.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="x-x-freebsd"></a><a name="g_t*-*-freebsd*"></a>
! <h3 class="heading">*-*-freebsd*</h3>
! <p>Support for FreeBSD 1 was discontinued in GCC 3.2.  Support for
! FreeBSD 2 (and any mutant a.out variants of FreeBSD 3) was
! discontinued in GCC 4.0.
! </p>
  <p>In order to better utilize FreeBSD base system functionality and match
  the configuration of the system compiler, GCC 4.5 and above as well as
  GCC 4.4 past 2010-06-20 leverage SSP support in libc (which is present
--- 321,332 ----
  and includes all the necessary compilation tools and libraries.
  </p>
  <hr />
! <span id="epiphany-x-elf"></span><span id="epiphany-*-elf"></span><h3 class="heading">epiphany-*-elf</h3>
  <p>Adapteva Epiphany.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <span id="x-x-freebsd"></span><span id="g_t*-*-freebsd*"></span><h3 class="heading">*-*-freebsd*</h3>
  <p>In order to better utilize FreeBSD base system functionality and match
  the configuration of the system compiler, GCC 4.5 and above as well as
  GCC 4.4 past 2010-06-20 leverage SSP support in libc (which is present
*************** properly on FreeBSD prior to the FreeBSD
*** 384,397 ****
  after 2.16.1.
  </p>
  <hr />
! <a name="ft32-x-elf"></a><a name="ft32-*-elf"></a>
! <h3 class="heading">ft32-*-elf</h3>
  <p>The FT32 processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="h8300-hms"></a><a name="h8300-hms-1"></a>
! <h3 class="heading">h8300-hms</h3>
  <p>Renesas H8/300 series of processors.
  </p>
  <p>Please have a look at the <a href="binaries.html">binaries page</a>.
--- 357,368 ----
  after 2.16.1.
  </p>
  <hr />
! <span id="ft32-x-elf"></span><span id="ft32-*-elf"></span><h3 class="heading">ft32-*-elf</h3>
  <p>The FT32 processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <span id="h8300-hms"></span><span id="h8300-hms-1"></span><h3 class="heading">h8300-hms</h3>
  <p>Renesas H8/300 series of processors.
  </p>
  <p>Please have a look at the <a href="binaries.html">binaries page</a>.
*************** first three arguments in function calls
*** 402,409 ****
  longer a multiple of 2 bytes.
  </p>
  <hr />
! <a name="hppa-hp-hpux"></a><a name="hppa*-hp-hpux*"></a>
! <h3 class="heading">hppa*-hp-hpux*</h3>
  <p>Support for HP-UX version 9 and older was discontinued in GCC 3.4.
  </p>
  <p>We require using gas/binutils on all hppa platforms.  Version 2.19 or
--- 373,379 ----
  longer a multiple of 2 bytes.
  </p>
  <hr />
! <span id="hppa-hp-hpux"></span><span id="hppa*-hp-hpux*"></span><h3 class="heading">hppa*-hp-hpux*</h3>
  <p>Support for HP-UX version 9 and older was discontinued in GCC 3.4.
  </p>
  <p>We require using gas/binutils on all hppa platforms.  Version 2.19 or
*************** a list of the predefines used with each
*** 453,460 ****
  <p>More specific information to &lsquo;<samp>hppa*-hp-hpux*</samp>&rsquo; targets follows.
  </p>
  <hr />
! <a name="hppa-hp-hpux10"></a><a name="hppa*-hp-hpux10"></a>
! <h3 class="heading">hppa*-hp-hpux10</h3>
  <p>For hpux10.20, we <em>highly</em> recommend you pick up the latest sed patch
  <code>PHCO_19798</code> from HP.
  </p>
--- 423,429 ----
  <p>More specific information to &lsquo;<samp>hppa*-hp-hpux*</samp>&rsquo; targets follows.
  </p>
  <hr />
! <span id="hppa-hp-hpux10"></span><span id="hppa*-hp-hpux10"></span><h3 class="heading">hppa*-hp-hpux10</h3>
  <p>For hpux10.20, we <em>highly</em> recommend you pick up the latest sed patch
  <code>PHCO_19798</code> from HP.
  </p>
*************** problems in using C++ on this target.  H
*** 464,471 ****
  with the one implemented under HP-UX 11 using secondary definitions.
  </p>
  <hr />
! <a name="hppa-hp-hpux11"></a><a name="hppa*-hp-hpux11"></a>
! <h3 class="heading">hppa*-hp-hpux11</h3>
  <p>GCC 3.0 and up support HP-UX 11.  GCC 2.95.x is not supported and cannot
  be used to compile GCC 3.0 and up.
  </p>
--- 433,439 ----
  with the one implemented under HP-UX 11 using secondary definitions.
  </p>
  <hr />
! <span id="hppa-hp-hpux11"></span><span id="hppa*-hp-hpux11"></span><h3 class="heading">hppa*-hp-hpux11</h3>
  <p>GCC 3.0 and up support HP-UX 11.  GCC 2.95.x is not supported and cannot
  be used to compile GCC 3.0 and up.
  </p>
*************** versioning with <samp>--disable-symvers<
*** 568,592 ****
  supported, so <samp>--enable-threads=dce</samp> does not work.
  </p>
  <hr />
! <a name="x-x-linux-gnu"></a><a name="g_t*-*-linux-gnu"></a>
! <h3 class="heading">*-*-linux-gnu</h3>
  <p>Versions of libstdc++-v3 starting with 3.2.1 require bug fixes present
  in glibc 2.2.5 and later.  More information is available in the
  libstdc++-v3 documentation.
  </p>
  <hr />
! <a name="ix86-x-linux"></a><a name="i_003f86-*-linux*"></a>
! <h3 class="heading">i?86-*-linux*</h3>
  <p>As of GCC 3.3, binutils 2.13.1 or later is required for this platform.
! See <a href="http://gcc.gnu.org/PR10877">bug 10877</a> for more information.
  </p>
  <p>If you receive Signal 11 errors when building on GNU/Linux, then it is
  possible you have a hardware problem.  Further information on this can be
! found on <a href="http://www.bitwizard.nl/sig11/">www.bitwizard.nl</a>.
  </p>
  <hr />
! <a name="ix86-x-solaris2"></a><a name="i_003f86-*-solaris2*"></a>
! <h3 class="heading">i?86-*-solaris2*</h3>
  <p>Use this for Solaris 11.3 or later on x86 and x86-64 systems.  Starting
  with GCC 4.7, there is also a 64-bit &lsquo;<samp>amd64-*-solaris2*</samp>&rsquo; or
  &lsquo;<samp>x86_64-*-solaris2*</samp>&rsquo; configuration that corresponds to
--- 536,560 ----
  supported, so <samp>--enable-threads=dce</samp> does not work.
  </p>
  <hr />
! <span id="x-x-linux-gnu"></span><span id="g_t*-*-linux-gnu"></span><h3 class="heading">*-*-linux-gnu</h3>
! <p>The <code>.init_array</code> and <code>.fini_array</code> sections are enabled
! unconditionally which requires at least glibc 2.1 and binutils 2.12.
! </p>
  <p>Versions of libstdc++-v3 starting with 3.2.1 require bug fixes present
  in glibc 2.2.5 and later.  More information is available in the
  libstdc++-v3 documentation.
  </p>
  <hr />
! <span id="ix86-x-linux"></span><span id="i_003f86-*-linux*"></span><h3 class="heading">i?86-*-linux*</h3>
  <p>As of GCC 3.3, binutils 2.13.1 or later is required for this platform.
! See <a href="https://gcc.gnu.org/PR10877">bug 10877</a> for more information.
  </p>
  <p>If you receive Signal 11 errors when building on GNU/Linux, then it is
  possible you have a hardware problem.  Further information on this can be
! found on <a href="https://www.bitwizard.nl/sig11/">www.bitwizard.nl</a>.
  </p>
  <hr />
! <span id="ix86-x-solaris2"></span><span id="i_003f86-*-solaris2*"></span><h3 class="heading">i?86-*-solaris2*</h3>
  <p>Use this for Solaris 11.3 or later on x86 and x86-64 systems.  Starting
  with GCC 4.7, there is also a 64-bit &lsquo;<samp>amd64-*-solaris2*</samp>&rsquo; or
  &lsquo;<samp>x86_64-*-solaris2*</samp>&rsquo; configuration that corresponds to
*************** to configure with <samp>--without-gnu-ld
*** 610,617 ****
  guarantee use of Solaris <code>ld</code>.
  </p>
  <hr />
! <a name="ia64-x-linux"></a><a name="ia64-*-linux"></a>
! <h3 class="heading">ia64-*-linux</h3>
  <p>IA-64 processor (also known as IPF, or Itanium Processor Family)
  running GNU/Linux.
  </p>
--- 578,584 ----
  guarantee use of Solaris <code>ld</code>.
  </p>
  <hr />
! <span id="ia64-x-linux"></span><span id="ia64-*-linux"></span><h3 class="heading">ia64-*-linux</h3>
  <p>IA-64 processor (also known as IPF, or Itanium Processor Family)
  running GNU/Linux.
  </p>
*************** running GNU/Linux.
*** 619,636 ****
  <samp>--with-system-libunwind</samp>, then you must use libunwind 0.98 or
  later.
  </p>
- <p>None of the following versions of GCC has an ABI that is compatible
- with any of the other versions in this list, with the exception that
- Red Hat 2.96 and Trillian 000171 are compatible with each other:
- 3.1, 3.0.2, 3.0.1, 3.0, Red Hat 2.96, and Trillian 000717.
- This primarily affects C++ programs and programs that create shared libraries.
- GCC 3.1 or later is recommended for compiling linux, the kernel.
- As of version 3.1 GCC is believed to be fully ABI compliant, and hence no
- more major ABI changes are expected.
- </p>
  <hr />
! <a name="ia64-x-hpux"></a><a name="ia64-*-hpux*"></a>
! <h3 class="heading">ia64-*-hpux*</h3>
  <p>Building GCC on this target requires the GNU Assembler.  The bundled HP
  assembler will not work.  To prevent GCC from using the wrong assembler,
  the option <samp>--with-gnu-as</samp> may be necessary.
--- 586,593 ----
  <samp>--with-system-libunwind</samp>, then you must use libunwind 0.98 or
  later.
  </p>
  <hr />
! <span id="ia64-x-hpux"></span><span id="ia64-*-hpux*"></span><h3 class="heading">ia64-*-hpux*</h3>
  <p>Building GCC on this target requires the GNU Assembler.  The bundled HP
  assembler will not work.  To prevent GCC from using the wrong assembler,
  the option <samp>--with-gnu-as</samp> may be necessary.
*************** removed and the system libunwind library
*** 643,650 ****
  </p>
  <hr />
  <!-- rs6000-ibm-aix*, powerpc-ibm-aix* -->
! <a name="x-ibm-aix"></a><a name="g_t*-ibm-aix*"></a>
! <h3 class="heading">*-ibm-aix*</h3>
  <p>Support for AIX version 3 and older was discontinued in GCC 3.4.
  Support for AIX version 4.2 and older was discontinued in GCC 4.5.
  </p>
--- 600,606 ----
  </p>
  <hr />
  <!-- rs6000-ibm-aix*, powerpc-ibm-aix* -->
! <span id="x-ibm-aix"></span><span id="g_t*-ibm-aix*"></span><h3 class="heading">*-ibm-aix*</h3>
  <p>Support for AIX version 3 and older was discontinued in GCC 3.4.
  Support for AIX version 4.2 and older was discontinued in GCC 4.5.
  </p>
*************** with an earlier release of GCC is recomm
*** 661,668 ****
  requires a larger data segment, which can be enabled through the
  <var>LDR_CNTRL</var> environment variable, e.g.,
  </p>
! <div class="smallexample">
! <pre class="smallexample">% LDR_CNTRL=MAXDATA=0x50000000
  % export LDR_CNTRL
  </pre></div>
  
--- 617,624 ----
  requires a larger data segment, which can be enabled through the
  <var>LDR_CNTRL</var> environment variable, e.g.,
  </p>
! <div class="example">
! <pre class="example">% LDR_CNTRL=MAXDATA=0x50000000
  % export LDR_CNTRL
  </pre></div>
  
*************** with a version of GCC built for an earli
*** 673,680 ****
  <p>To speed up the configuration phases of bootstrapping and installing GCC,
  one may use GNU Bash instead of AIX <code>/bin/sh</code>, e.g.,
  </p>
! <div class="smallexample">
! <pre class="smallexample">% CONFIG_SHELL=/opt/freeware/bin/bash
  % export CONFIG_SHELL
  </pre></div>
  
--- 629,636 ----
  <p>To speed up the configuration phases of bootstrapping and installing GCC,
  one may use GNU Bash instead of AIX <code>/bin/sh</code>, e.g.,
  </p>
! <div class="example">
! <pre class="example">% CONFIG_SHELL=/opt/freeware/bin/bash
  % export CONFIG_SHELL
  </pre></div>
  
*************** APAR IY26685 (AIX 4.3) or APAR IY25528 (
*** 724,730 ****
  fix for another AIX Assembler bug and a co-dependent AIX Archiver fix
  referenced as APAR IY53606 (AIX 5.2) or as APAR IY54774 (AIX 5.1)
  </p>
! <a name="TransferAixShobj"></a><p>&lsquo;<samp>libstdc++</samp>&rsquo; in GCC 3.4 increments the major version number of the
  shared object and GCC installation places the <samp>libstdc++.a</samp>
  shared library in a common location which will overwrite the and GCC
  3.3 version of the shared library.  Applications either need to be
--- 680,686 ----
  fix for another AIX Assembler bug and a co-dependent AIX Archiver fix
  referenced as APAR IY53606 (AIX 5.2) or as APAR IY54774 (AIX 5.1)
  </p>
! <span id="TransferAixShobj"></span><p>&lsquo;<samp>libstdc++</samp>&rsquo; in GCC 3.4 increments the major version number of the
  shared object and GCC installation places the <samp>libstdc++.a</samp>
  shared library in a common location which will overwrite the and GCC
  3.3 version of the shared library.  Applications either need to be
*************** multilib <samp>libstdc++.a</samp> instal
*** 738,757 ****
  </p>
  <p>Extract the shared objects from the currently installed
  <samp>libstdc++.a</samp> archive:
! </p><div class="smallexample">
! <pre class="smallexample">% ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5
  </pre></div>
  
  <p>Enable the &lsquo;<samp>F_LOADONLY</samp>&rsquo; flag so that the shared object will be
  available for runtime dynamic loading, but not linking:
! </p><div class="smallexample">
! <pre class="smallexample">% strip -e libstdc++.so.4 libstdc++.so.5
  </pre></div>
  
  <p>Archive the runtime-only shared object in the GCC 3.4
  <samp>libstdc++.a</samp> archive:
! </p><div class="smallexample">
! <pre class="smallexample">% ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5
  </pre></div>
  
  <p>Eventually, the
--- 694,713 ----
  </p>
  <p>Extract the shared objects from the currently installed
  <samp>libstdc++.a</samp> archive:
! </p><div class="example">
! <pre class="example">% ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5
  </pre></div>
  
  <p>Enable the &lsquo;<samp>F_LOADONLY</samp>&rsquo; flag so that the shared object will be
  available for runtime dynamic loading, but not linking:
! </p><div class="example">
! <pre class="example">% strip -e libstdc++.so.4 libstdc++.so.5
  </pre></div>
  
  <p>Archive the runtime-only shared object in the GCC 3.4
  <samp>libstdc++.a</samp> archive:
! </p><div class="example">
! <pre class="example">% ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5
  </pre></div>
  
  <p>Eventually, the
*************** overflow severe error when the <samp>-bb
*** 781,799 ****
  GCC-produced object files into an executable that overflows the TOC.  A fix
  for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC) is
  available from IBM Customer Support and from its
! <a href="http://techsupport.services.ibm.com/">techsupport.services.ibm.com</a>
  website as PTF U455193.
  </p>
  <p>The AIX 4.3.2.1 linker (bos.rte.bind_cmds Level 4.3.2.1) will dump core
  with a segmentation fault when invoked by any version of GCC.  A fix for
  APAR IX87327 is available from IBM Customer Support and from its
! <a href="http://techsupport.services.ibm.com/">techsupport.services.ibm.com</a>
  website as PTF U461879.  This fix is incorporated in AIX 4.3.3 and above.
  </p>
  <p>The initial assembler shipped with AIX 4.3.0 generates incorrect object
  files.  A fix for APAR IX74254 (64BIT DISASSEMBLED OUTPUT FROM COMPILER FAILS
  TO ASSEMBLE/BIND) is available from IBM Customer Support and from its
! <a href="http://techsupport.services.ibm.com/">techsupport.services.ibm.com</a>
  website as PTF U453956.  This fix is incorporated in AIX 4.3.1 and above.
  </p>
  <p>AIX provides National Language Support (NLS).  Compilers and assemblers
--- 737,755 ----
  GCC-produced object files into an executable that overflows the TOC.  A fix
  for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC) is
  available from IBM Customer Support and from its
! <a href="https://techsupport.services.ibm.com/">techsupport.services.ibm.com</a>
  website as PTF U455193.
  </p>
  <p>The AIX 4.3.2.1 linker (bos.rte.bind_cmds Level 4.3.2.1) will dump core
  with a segmentation fault when invoked by any version of GCC.  A fix for
  APAR IX87327 is available from IBM Customer Support and from its
! <a href="https://techsupport.services.ibm.com/">techsupport.services.ibm.com</a>
  website as PTF U461879.  This fix is incorporated in AIX 4.3.3 and above.
  </p>
  <p>The initial assembler shipped with AIX 4.3.0 generates incorrect object
  files.  A fix for APAR IX74254 (64BIT DISASSEMBLED OUTPUT FROM COMPILER FAILS
  TO ASSEMBLE/BIND) is available from IBM Customer Support and from its
! <a href="https://techsupport.services.ibm.com/">techsupport.services.ibm.com</a>
  website as PTF U453956.  This fix is incorporated in AIX 4.3.1 and above.
  </p>
  <p>AIX provides National Language Support (NLS).  Compilers and assemblers
*************** environment variable to &lsquo;<samp>C</
*** 808,845 ****
  switch and using the configure option <samp>--with-cpu-<var>cpu_type</var></samp>.
  </p>
  <hr />
! <a name="iq2000-x-elf"></a><a name="iq2000-*-elf"></a>
! <h3 class="heading">iq2000-*-elf</h3>
  <p>Vitesse IQ2000 processors.  These are used in embedded
  applications.  There are no standard Unix configurations.
  </p>
  <hr />
! <a name="lm32-x-elf"></a><a name="lm32-*-elf"></a>
! <h3 class="heading">lm32-*-elf</h3>
  <p>Lattice Mico32 processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="lm32-x-uclinux"></a><a name="lm32-*-uclinux"></a>
! <h3 class="heading">lm32-*-uclinux</h3>
  <p>Lattice Mico32 processor.
  This configuration is intended for embedded systems running uClinux.
  </p>
  <hr />
! <a name="m32c-x-elf"></a><a name="m32c-*-elf"></a>
! <h3 class="heading">m32c-*-elf</h3>
  <p>Renesas M32C processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="m32r-x-elf"></a><a name="m32r-*-elf"></a>
! <h3 class="heading">m32r-*-elf</h3>
  <p>Renesas M32R processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="m68k-x-x"></a><a name="m68k-*-*"></a>
! <h3 class="heading">m68k-*-*</h3>
  <p>By default,
  &lsquo;<samp>m68k-*-elf*</samp>&rsquo;, &lsquo;<samp>m68k-*-rtems</samp>&rsquo;,  &lsquo;<samp>m68k-*-uclinux</samp>&rsquo; and
  &lsquo;<samp>m68k-*-linux</samp>&rsquo;
--- 764,825 ----
  switch and using the configure option <samp>--with-cpu-<var>cpu_type</var></samp>.
  </p>
  <hr />
! <span id="iq2000-x-elf"></span><span id="iq2000-*-elf"></span><h3 class="heading">iq2000-*-elf</h3>
  <p>Vitesse IQ2000 processors.  These are used in embedded
  applications.  There are no standard Unix configurations.
  </p>
  <hr />
! <span id="lm32-x-elf"></span><span id="lm32-*-elf"></span><h3 class="heading">lm32-*-elf</h3>
  <p>Lattice Mico32 processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <span id="lm32-x-uclinux"></span><span id="lm32-*-uclinux"></span><h3 class="heading">lm32-*-uclinux</h3>
  <p>Lattice Mico32 processor.
  This configuration is intended for embedded systems running uClinux.
  </p>
  <hr />
! <span id="loongarch"></span><span id="LoongArch"></span><h3 class="heading">LoongArch</h3>
! <p>LoongArch processor.
! The following LoongArch targets are available:
! </p><dl compact="compact">
! <dt><code>loongarch64-linux-gnu*</code></dt>
! <dd><p>LoongArch processor running GNU/Linux.  This target triplet may be coupled
! with a small set of possible suffixes to identify their default ABI type:
! </p><dl compact="compact">
! <dt><code>f64</code></dt>
! <dd><p>Uses <code>lp64d/base</code> ABI by default.
! </p></dd>
! <dt><code>f32</code></dt>
! <dd><p>Uses <code>lp64f/base</code> ABI by default.
! </p></dd>
! <dt><code>sf</code></dt>
! <dd><p>Uses <code>lp64s/base</code> ABI by default.
! </p></dd>
! </dl>
! 
! </dd>
! <dt><code>loongarch64-linux-gnu</code></dt>
! <dd><p>Same as <code>loongarch64-linux-gnuf64</code>, but may be used with
! <samp>--with-abi=*</samp> to configure the default ABI type.
! </p></dd>
! </dl>
! 
! <p>More information about LoongArch can be found at
! <a href="https://github.com/loongson/LoongArch-Documentation">https://github.com/loongson/LoongArch-Documentation</a>.
! </p>
! <hr />
! <span id="m32c-x-elf"></span><span id="m32c-*-elf"></span><h3 class="heading">m32c-*-elf</h3>
  <p>Renesas M32C processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <span id="m32r-x-elf"></span><span id="m32r-*-elf"></span><h3 class="heading">m32r-*-elf</h3>
  <p>Renesas M32R processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <span id="m68k-x-x"></span><span id="m68k-*-*"></span><h3 class="heading">m68k-*-*</h3>
  <p>By default,
  &lsquo;<samp>m68k-*-elf*</samp>&rsquo;, &lsquo;<samp>m68k-*-rtems</samp>&rsquo;,  &lsquo;<samp>m68k-*-uclinux</samp>&rsquo; and
  &lsquo;<samp>m68k-*-linux</samp>&rsquo;
*************** be a <samp>-mcpu</samp> argument or one
*** 865,886 ****
  <p>GCC requires at least binutils version 2.17 on these targets.
  </p>
  <hr />
! <a name="m68k-x-uclinux"></a><a name="m68k-*-uclinux"></a>
! <h3 class="heading">m68k-*-uclinux</h3>
  <p>GCC 4.3 changed the uClinux configuration so that it uses the
  &lsquo;<samp>m68k-linux-gnu</samp>&rsquo; ABI rather than the &lsquo;<samp>m68k-elf</samp>&rsquo; ABI.
  It also added improved support for C++ and flat shared libraries,
  both of which were ABI changes.
  </p>
  <hr />
! <a name="microblaze-x-elf"></a><a name="microblaze-*-elf"></a>
! <h3 class="heading">microblaze-*-elf</h3>
  <p>Xilinx MicroBlaze processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="mips-x-x"></a><a name="mips-*-*"></a>
! <h3 class="heading">mips-*-*</h3>
  <p>If on a MIPS system you get an error message saying &ldquo;does not have gp
  sections for all it&rsquo;s [sic] sectons [sic]&rdquo;, don&rsquo;t worry about it.  This
  happens whenever you use GAS with the MIPS linker, but there is not
--- 845,863 ----
  <p>GCC requires at least binutils version 2.17 on these targets.
  </p>
  <hr />
! <span id="m68k-x-uclinux"></span><span id="m68k-*-uclinux"></span><h3 class="heading">m68k-*-uclinux</h3>
  <p>GCC 4.3 changed the uClinux configuration so that it uses the
  &lsquo;<samp>m68k-linux-gnu</samp>&rsquo; ABI rather than the &lsquo;<samp>m68k-elf</samp>&rsquo; ABI.
  It also added improved support for C++ and flat shared libraries,
  both of which were ABI changes.
  </p>
  <hr />
! <span id="microblaze-x-elf"></span><span id="microblaze-*-elf"></span><h3 class="heading">microblaze-*-elf</h3>
  <p>Xilinx MicroBlaze processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <span id="mips-x-x"></span><span id="mips-*-*"></span><h3 class="heading">mips-*-*</h3>
  <p>If on a MIPS system you get an error message saying &ldquo;does not have gp
  sections for all it&rsquo;s [sic] sectons [sic]&rdquo;, don&rsquo;t worry about it.  This
  happens whenever you use GAS with the MIPS linker, but there is not
*************** the use of break, use the <samp>--with-d
*** 920,932 ****
  use traps on systems that support them.
  </p>
  <hr />
! <a name="moxie-x-elf"></a><a name="moxie-*-elf"></a>
! <h3 class="heading">moxie-*-elf</h3>
  <p>The moxie processor.
  </p>
  <hr />
! <a name="msp430-x-elf"></a><a name="msp430-*-elf*"></a>
! <h3 class="heading">msp430-*-elf*</h3>
  <p>TI MSP430 processor.
  This configuration is intended for embedded systems.
  </p>
--- 897,907 ----
  use traps on systems that support them.
  </p>
  <hr />
! <span id="moxie-x-elf"></span><span id="moxie-*-elf"></span><h3 class="heading">moxie-*-elf</h3>
  <p>The moxie processor.
  </p>
  <hr />
! <span id="msp430-x-elf"></span><span id="msp430-*-elf*"></span><h3 class="heading">msp430-*-elf*</h3>
  <p>TI MSP430 processor.
  This configuration is intended for embedded systems.
  </p>
*************** in a minimal run-time environment by def
*** 945,962 ****
  </li></ul>
  
  <hr />
! <a name="nds32le-x-elf"></a><a name="nds32le-*-elf"></a>
! <h3 class="heading">nds32le-*-elf</h3>
  <p>Andes NDS32 target in little endian mode.
  </p>
  <hr />
! <a name="nds32be-x-elf"></a><a name="nds32be-*-elf"></a>
! <h3 class="heading">nds32be-*-elf</h3>
  <p>Andes NDS32 target in big endian mode.
  </p>
  <hr />
! <a name="nvptx-x-none"></a><a name="nvptx-*-none"></a>
! <h3 class="heading">nvptx-*-none</h3>
  <p>Nvidia PTX target.
  </p>
  <p>Instead of GNU binutils, you will need to install
--- 920,934 ----
  </li></ul>
  
  <hr />
! <span id="nds32le-x-elf"></span><span id="nds32le-*-elf"></span><h3 class="heading">nds32le-*-elf</h3>
  <p>Andes NDS32 target in little endian mode.
  </p>
  <hr />
! <span id="nds32be-x-elf"></span><span id="nds32be-*-elf"></span><h3 class="heading">nds32be-*-elf</h3>
  <p>Andes NDS32 target in big endian mode.
  </p>
  <hr />
! <span id="nvptx-x-none"></span><span id="nvptx-*-none"></span><h3 class="heading">nvptx-*-none</h3>
  <p>Nvidia PTX target.
  </p>
  <p>Instead of GNU binutils, you will need to install
*************** the GCC sources.
*** 974,1000 ****
  <samp>--enable-newlib-io-long-long</samp> options when configuring.
  </p>
  <hr />
! <a name="or1k-x-elf"></a><a name="or1k-*-elf"></a>
! <h3 class="heading">or1k-*-elf</h3>
  <p>The OpenRISC 1000 32-bit processor with delay slots.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="or1k-x-linux"></a><a name="or1k-*-linux"></a>
! <h3 class="heading">or1k-*-linux</h3>
  <p>The OpenRISC 1000 32-bit processor with delay slots.
  </p>
  <hr />
! <a name="powerpc-x-x"></a><a name="powerpc-*-*"></a>
! <h3 class="heading">powerpc-*-*</h3>
  <p>You can specify a default version for the <samp>-mcpu=<var>cpu_type</var></samp>
  switch by using the configure option <samp>--with-cpu-<var>cpu_type</var></samp>.
  </p>
  <p>You will need GNU binutils 2.20 or newer.
  </p>
  <hr />
! <a name="powerpc-x-darwin"></a><a name="powerpc-*-darwin*"></a>
! <h3 class="heading">powerpc-*-darwin*</h3>
  <p>PowerPC running Darwin (Mac OS X kernel).
  </p>
  <p>Pre-installed versions of Mac OS X may not include any developer tools,
--- 946,968 ----
  <samp>--enable-newlib-io-long-long</samp> options when configuring.
  </p>
  <hr />
! <span id="or1k-x-elf"></span><span id="or1k-*-elf"></span><h3 class="heading">or1k-*-elf</h3>
  <p>The OpenRISC 1000 32-bit processor with delay slots.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <span id="or1k-x-linux"></span><span id="or1k-*-linux"></span><h3 class="heading">or1k-*-linux</h3>
  <p>The OpenRISC 1000 32-bit processor with delay slots.
  </p>
  <hr />
! <span id="powerpc-x-x"></span><span id="powerpc-*-*"></span><h3 class="heading">powerpc-*-*</h3>
  <p>You can specify a default version for the <samp>-mcpu=<var>cpu_type</var></samp>
  switch by using the configure option <samp>--with-cpu-<var>cpu_type</var></samp>.
  </p>
  <p>You will need GNU binutils 2.20 or newer.
  </p>
  <hr />
! <span id="powerpc-x-darwin"></span><span id="powerpc-*-darwin*"></span><h3 class="heading">powerpc-*-darwin*</h3>
  <p>PowerPC running Darwin (Mac OS X kernel).
  </p>
  <p>Pre-installed versions of Mac OS X may not include any developer tools,
*************** binaries are available at
*** 1004,1110 ****
  </p>
  <p>This version of GCC requires at least cctools-590.36.  The
  cctools-590.36 package referenced from
! <a href="http://gcc.gnu.org/ml/gcc/2006-03/msg00507.html">http://gcc.gnu.org/ml/gcc/2006-03/msg00507.html</a> will not work
  on systems older than 10.3.9 (aka darwin7.9.0).
  </p>
  <hr />
! <a name="powerpc-x-elf"></a><a name="powerpc-*-elf"></a>
! <h3 class="heading">powerpc-*-elf</h3>
  <p>PowerPC system in big endian mode, running System V.4.
  </p>
  <hr />
! <a name="powerpc-x-linux-gnu"></a><a name="powerpc*-*-linux-gnu*"></a>
! <h3 class="heading">powerpc*-*-linux-gnu*</h3>
  <p>PowerPC system in big endian mode running Linux.
  </p>
  <hr />
! <a name="powerpc-x-netbsd"></a><a name="powerpc-*-netbsd*"></a>
! <h3 class="heading">powerpc-*-netbsd*</h3>
  <p>PowerPC system in big endian mode running NetBSD.
  </p>
  <hr />
! <a name="powerpc-x-eabisim"></a><a name="powerpc-*-eabisim"></a>
! <h3 class="heading">powerpc-*-eabisim</h3>
  <p>Embedded PowerPC system in big endian mode for use in running under the
  PSIM simulator.
  </p>
  <hr />
! <a name="powerpc-x-eabi"></a><a name="powerpc-*-eabi"></a>
! <h3 class="heading">powerpc-*-eabi</h3>
  <p>Embedded PowerPC system in big endian mode.
  </p>
  <hr />
! <a name="powerpcle-x-elf"></a><a name="powerpcle-*-elf"></a>
! <h3 class="heading">powerpcle-*-elf</h3>
  <p>PowerPC system in little endian mode, running System V.4.
  </p>
  <hr />
! <a name="powerpcle-x-eabisim"></a><a name="powerpcle-*-eabisim"></a>
! <h3 class="heading">powerpcle-*-eabisim</h3>
  <p>Embedded PowerPC system in little endian mode for use in running under
  the PSIM simulator.
  </p>
  <hr />
! <a name="powerpcle-x-eabi"></a><a name="powerpcle-*-eabi"></a>
! <h3 class="heading">powerpcle-*-eabi</h3>
  <p>Embedded PowerPC system in little endian mode.
  </p>
  <hr />
! <a name="rl78-x-elf"></a><a name="rl78-*-elf"></a>
! <h3 class="heading">rl78-*-elf</h3>
  <p>The Renesas RL78 processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="riscv32-x-elf"></a><a name="riscv32-*-elf"></a>
! <h3 class="heading">riscv32-*-elf</h3>
  <p>The RISC-V RV32 instruction set.
  This configuration is intended for embedded systems.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <a name="riscv32-x-linux"></a><a name="riscv32-*-linux"></a>
! <h3 class="heading">riscv32-*-linux</h3>
  <p>The RISC-V RV32 instruction set running GNU/Linux.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <a name="riscv64-x-elf"></a><a name="riscv64-*-elf"></a>
! <h3 class="heading">riscv64-*-elf</h3>
  <p>The RISC-V RV64 instruction set.
  This configuration is intended for embedded systems.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <a name="riscv64-x-linux"></a><a name="riscv64-*-linux"></a>
! <h3 class="heading">riscv64-*-linux</h3>
  <p>The RISC-V RV64 instruction set running GNU/Linux.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <a name="rx-x-elf"></a><a name="rx-*-elf"></a>
! <h3 class="heading">rx-*-elf</h3>
  <p>The Renesas RX processor.
  </p>
  <hr />
! <a name="s390-x-linux"></a><a name="s390-*-linux*"></a>
! <h3 class="heading">s390-*-linux*</h3>
  <p>S/390 system running GNU/Linux for S/390.
  </p>
  <hr />
! <a name="s390x-x-linux"></a><a name="s390x-*-linux*"></a>
! <h3 class="heading">s390x-*-linux*</h3>
  <p>zSeries system (64-bit) running GNU/Linux for zSeries.
  </p>
  <hr />
! <a name="s390x-ibm-tpf"></a><a name="s390x-ibm-tpf*"></a>
! <h3 class="heading">s390x-ibm-tpf*</h3>
  <p>zSeries system (64-bit) running TPF.  This platform is
  supported as cross-compilation target only.
  </p>
  <hr />
! <a name="x-x-solaris2"></a><a name="g_t*-*-solaris2*"></a>
! <h3 class="heading">*-*-solaris2*</h3>
  <p>Support for Solaris 10 has been removed in GCC 10.  Support for Solaris
  9 has been removed in GCC 5.  Support for Solaris 8 has been removed in
  GCC 4.8.  Support for Solaris 7 has been removed in GCC 4.6.
--- 972,1060 ----
  </p>
  <p>This version of GCC requires at least cctools-590.36.  The
  cctools-590.36 package referenced from
! <a href="https://gcc.gnu.org/ml/gcc/2006-03/msg00507.html">https://gcc.gnu.org/ml/gcc/2006-03/msg00507.html</a> will not work
  on systems older than 10.3.9 (aka darwin7.9.0).
  </p>
  <hr />
! <span id="powerpc-x-elf"></span><span id="powerpc-*-elf"></span><h3 class="heading">powerpc-*-elf</h3>
  <p>PowerPC system in big endian mode, running System V.4.
  </p>
  <hr />
! <span id="powerpc-x-linux-gnu"></span><span id="powerpc*-*-linux-gnu*"></span><h3 class="heading">powerpc*-*-linux-gnu*</h3>
  <p>PowerPC system in big endian mode running Linux.
  </p>
  <hr />
! <span id="powerpc-x-netbsd"></span><span id="powerpc-*-netbsd*"></span><h3 class="heading">powerpc-*-netbsd*</h3>
  <p>PowerPC system in big endian mode running NetBSD.
  </p>
  <hr />
! <span id="powerpc-x-eabisim"></span><span id="powerpc-*-eabisim"></span><h3 class="heading">powerpc-*-eabisim</h3>
  <p>Embedded PowerPC system in big endian mode for use in running under the
  PSIM simulator.
  </p>
  <hr />
! <span id="powerpc-x-eabi"></span><span id="powerpc-*-eabi"></span><h3 class="heading">powerpc-*-eabi</h3>
  <p>Embedded PowerPC system in big endian mode.
  </p>
  <hr />
! <span id="powerpcle-x-elf"></span><span id="powerpcle-*-elf"></span><h3 class="heading">powerpcle-*-elf</h3>
  <p>PowerPC system in little endian mode, running System V.4.
  </p>
  <hr />
! <span id="powerpcle-x-eabisim"></span><span id="powerpcle-*-eabisim"></span><h3 class="heading">powerpcle-*-eabisim</h3>
  <p>Embedded PowerPC system in little endian mode for use in running under
  the PSIM simulator.
  </p>
  <hr />
! <span id="powerpcle-x-eabi"></span><span id="powerpcle-*-eabi"></span><h3 class="heading">powerpcle-*-eabi</h3>
  <p>Embedded PowerPC system in little endian mode.
  </p>
  <hr />
! <span id="rl78-x-elf"></span><span id="rl78-*-elf"></span><h3 class="heading">rl78-*-elf</h3>
  <p>The Renesas RL78 processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <span id="riscv32-x-elf"></span><span id="riscv32-*-elf"></span><h3 class="heading">riscv32-*-elf</h3>
  <p>The RISC-V RV32 instruction set.
  This configuration is intended for embedded systems.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <span id="riscv32-x-linux"></span><span id="riscv32-*-linux"></span><h3 class="heading">riscv32-*-linux</h3>
  <p>The RISC-V RV32 instruction set running GNU/Linux.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <span id="riscv64-x-elf"></span><span id="riscv64-*-elf"></span><h3 class="heading">riscv64-*-elf</h3>
  <p>The RISC-V RV64 instruction set.
  This configuration is intended for embedded systems.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <span id="riscv64-x-linux"></span><span id="riscv64-*-linux"></span><h3 class="heading">riscv64-*-linux</h3>
  <p>The RISC-V RV64 instruction set running GNU/Linux.
  This (and all other RISC-V) targets require the binutils 2.30 release.
  </p>
  <hr />
! <span id="rx-x-elf"></span><span id="rx-*-elf"></span><h3 class="heading">rx-*-elf</h3>
  <p>The Renesas RX processor.
  </p>
  <hr />
! <span id="s390-x-linux"></span><span id="s390-*-linux*"></span><h3 class="heading">s390-*-linux*</h3>
  <p>S/390 system running GNU/Linux for S/390.
  </p>
  <hr />
! <span id="s390x-x-linux"></span><span id="s390x-*-linux*"></span><h3 class="heading">s390x-*-linux*</h3>
  <p>zSeries system (64-bit) running GNU/Linux for zSeries.
  </p>
  <hr />
! <span id="s390x-ibm-tpf"></span><span id="s390x-ibm-tpf*"></span><h3 class="heading">s390x-ibm-tpf*</h3>
  <p>zSeries system (64-bit) running TPF.  This platform is
  supported as cross-compilation target only.
  </p>
  <hr />
! <span id="x-x-solaris2"></span><span id="g_t*-*-solaris2*"></span><h3 class="heading">*-*-solaris2*</h3>
  <p>Support for Solaris 10 has been removed in GCC 10.  Support for Solaris
  9 has been removed in GCC 5.  Support for Solaris 8 has been removed in
  GCC 4.8.  Support for Solaris 7 has been removed in GCC 4.6.
*************** you can install a pre-built GCC to boots
*** 1119,1126 ****
  &lsquo;<samp>libstdc++-v3</samp>&rsquo;.  We therefore recommend using the
  following initial sequence of commands
  </p>
! <div class="smallexample">
! <pre class="smallexample">% CONFIG_SHELL=/bin/ksh
  % export CONFIG_SHELL
  </pre></div>
  
--- 1069,1076 ----
  &lsquo;<samp>libstdc++-v3</samp>&rsquo;.  We therefore recommend using the
  following initial sequence of commands
  </p>
! <div class="example">
! <pre class="example">% CONFIG_SHELL=/bin/ksh
  % export CONFIG_SHELL
  </pre></div>
  
*************** GNU binutils.  &lsquo;<samp>libstdc++</s
*** 1163,1168 ****
--- 1113,1124 ----
  appropriate version is found.  Solaris <code>c++filt</code> from the Solaris
  Studio compilers does <em>not</em> work.
  </p>
+ <p>In order to build the GNU D compiler, GDC, a working &lsquo;<samp>libphobos</samp>&rsquo; is
+ needed.  That library wasn&rsquo;t built by default in GCC 9&ndash;11 on SPARC, or
+ on x86 when the Solaris assembler is used, but can be enabled by
+ configuring with <samp>--enable-libphobos</samp>.  Also, GDC 9.4.0 is
+ required on x86, while GDC 9.3.0 is known to work on SPARC.
+ </p>
  <p>The versions of the GNU Multiple Precision Library (GMP), the MPFR
  library and the MPC library bundled with Solaris 11.3 and later are
  usually recent enough to match GCC&rsquo;s requirements.  There are two
*************** need to configure with <samp>--with-gmp-
*** 1174,1184 ****
  
  </li><li> The version of the MPFR libary included in Solaris 11.3 is too old; you
  need to provide a more recent one.
  </li></ul>
  
  <hr />
! <a name="sparc-x-x"></a><a name="sparc*-*-*"></a>
! <h3 class="heading">sparc*-*-*</h3>
  <p>This section contains general configuration information for all
  SPARC-based platforms.  In addition to reading this section, please
  read all other sections that match your target.
--- 1130,1140 ----
  
  </li><li> The version of the MPFR libary included in Solaris 11.3 is too old; you
  need to provide a more recent one.
+ 
  </li></ul>
  
  <hr />
! <span id="sparc-x-x"></span><span id="sparc*-*-*"></span><h3 class="heading">sparc*-*-*</h3>
  <p>This section contains general configuration information for all
  SPARC-based platforms.  In addition to reading this section, please
  read all other sections that match your target.
*************** of the exact versions of these libraries
*** 1190,1197 ****
  in <a href="prerequisites.html">the prerequisites</a>.
  </p>
  <hr />
! <a name="sparc-sun-solaris2"></a><a name="sparc-sun-solaris2*"></a>
! <h3 class="heading">sparc-sun-solaris2*</h3>
  <p>When GCC is configured to use GNU binutils 2.14 or later, the binaries
  produced are smaller than the ones produced using Solaris native tools;
  this difference is quite significant for binaries containing debugging
--- 1146,1152 ----
  in <a href="prerequisites.html">the prerequisites</a>.
  </p>
  <hr />
! <span id="sparc-sun-solaris2"></span><span id="sparc-sun-solaris2*"></span><h3 class="heading">sparc-sun-solaris2*</h3>
  <p>When GCC is configured to use GNU binutils 2.14 or later, the binaries
  produced are smaller than the ones produced using Solaris native tools;
  this difference is quite significant for binaries containing debugging
*************** target triplet must be specified as the
*** 1211,1227 ****
  configure line.  This target triplet can be obtained by invoking <code>./config.guess</code> in the toplevel source directory of GCC (and
  not that of GMP or MPFR or MPC).  For example on a Solaris 11 system:
  </p>
! <div class="smallexample">
! <pre class="smallexample">% ./configure --build=sparc-sun-solaris2.11 --prefix=xxx
  </pre></div>
  
  <hr />
! <a name="sparc-x-linux"></a><a name="sparc-*-linux*"></a>
! <h3 class="heading">sparc-*-linux*</h3>
  
  <hr />
! <a name="sparc64-x-solaris2"></a><a name="sparc64-*-solaris2*"></a>
! <h3 class="heading">sparc64-*-solaris2*</h3>
  <p>When configuring a 64-bit-default GCC on Solaris/SPARC, you must use a
  build compiler that generates 64-bit code, either by default or by
  specifying &lsquo;<samp>CC='gcc -m64' CXX='gcc-m64'</samp>&rsquo; to <code>configure</code>.
--- 1166,1180 ----
  configure line.  This target triplet can be obtained by invoking <code>./config.guess</code> in the toplevel source directory of GCC (and
  not that of GMP or MPFR or MPC).  For example on a Solaris 11 system:
  </p>
! <div class="example">
! <pre class="example">% ./configure --build=sparc-sun-solaris2.11 --prefix=xxx
  </pre></div>
  
  <hr />
! <span id="sparc-x-linux"></span><span id="sparc-*-linux*"></span><h3 class="heading">sparc-*-linux*</h3>
  
  <hr />
! <span id="sparc64-x-solaris2"></span><span id="sparc64-*-solaris2*"></span><h3 class="heading">sparc64-*-solaris2*</h3>
  <p>When configuring a 64-bit-default GCC on Solaris/SPARC, you must use a
  build compiler that generates 64-bit code, either by default or by
  specifying &lsquo;<samp>CC='gcc -m64' CXX='gcc-m64'</samp>&rsquo; to <code>configure</code>.
*************** library or the MPC library, the canonica
*** 1234,1280 ****
  as the <code>build</code> parameter on the configure line.  For example
  on a Solaris 11 system:
  </p>
! <div class="smallexample">
! <pre class="smallexample">% ./configure --build=sparc64-sun-solaris2.11 --prefix=xxx
  </pre></div>
  
  <hr />
! <a name="sparcv9-x-solaris2"></a><a name="sparcv9-*-solaris2*"></a>
! <h3 class="heading">sparcv9-*-solaris2*</h3>
  <p>This is a synonym for &lsquo;<samp>sparc64-*-solaris2*</samp>&rsquo;.
  </p>
  <hr />
! <a name="c6x-x-x"></a><a name="c6x-*-*"></a>
! <h3 class="heading">c6x-*-*</h3>
  <p>The C6X family of processors. This port requires binutils-2.22 or newer.
  </p>
  <hr />
! <a name="tilegx-*-linux"></a><a name="tilegx-*-linux*"></a>
! <h3 class="heading">tilegx-*-linux*</h3>
  <p>The TILE-Gx processor in little endian mode, running GNU/Linux.  This
  port requires binutils-2.22 or newer.
  </p>
  <hr />
! <a name="tilegxbe-*-linux"></a><a name="tilegxbe-*-linux*"></a>
! <h3 class="heading">tilegxbe-*-linux*</h3>
  <p>The TILE-Gx processor in big endian mode, running GNU/Linux.  This
  port requires binutils-2.23 or newer.
  </p>
  <hr />
! <a name="tilepro-*-linux"></a><a name="tilepro-*-linux*"></a>
! <h3 class="heading">tilepro-*-linux*</h3>
  <p>The TILEPro processor running GNU/Linux.  This port requires
  binutils-2.22 or newer.
  </p>
  <hr />
! <a name="visium-x-elf"></a><a name="visium-*-elf"></a>
! <h3 class="heading">visium-*-elf</h3>
  <p>CDS VISIUMcore processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <a name="x-x-vxworks"></a><a name="g_t*-*-vxworks*"></a>
! <h3 class="heading">*-*-vxworks*</h3>
  <p>Support for VxWorks is in flux.  At present GCC supports <em>only</em> the
  very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC.
  We welcome patches for other architectures supported by VxWorks 5.5.
--- 1187,1226 ----
  as the <code>build</code> parameter on the configure line.  For example
  on a Solaris 11 system:
  </p>
! <div class="example">
! <pre class="example">% ./configure --build=sparc64-sun-solaris2.11 --prefix=xxx
  </pre></div>
  
  <hr />
! <span id="sparcv9-x-solaris2"></span><span id="sparcv9-*-solaris2*"></span><h3 class="heading">sparcv9-*-solaris2*</h3>
  <p>This is a synonym for &lsquo;<samp>sparc64-*-solaris2*</samp>&rsquo;.
  </p>
  <hr />
! <span id="c6x-x-x"></span><span id="c6x-*-*"></span><h3 class="heading">c6x-*-*</h3>
  <p>The C6X family of processors. This port requires binutils-2.22 or newer.
  </p>
  <hr />
! <span id="tilegx-*-linux"></span><span id="tilegx-*-linux*"></span><h3 class="heading">tilegx-*-linux*</h3>
  <p>The TILE-Gx processor in little endian mode, running GNU/Linux.  This
  port requires binutils-2.22 or newer.
  </p>
  <hr />
! <span id="tilegxbe-*-linux"></span><span id="tilegxbe-*-linux*"></span><h3 class="heading">tilegxbe-*-linux*</h3>
  <p>The TILE-Gx processor in big endian mode, running GNU/Linux.  This
  port requires binutils-2.23 or newer.
  </p>
  <hr />
! <span id="tilepro-*-linux"></span><span id="tilepro-*-linux*"></span><h3 class="heading">tilepro-*-linux*</h3>
  <p>The TILEPro processor running GNU/Linux.  This port requires
  binutils-2.22 or newer.
  </p>
  <hr />
! <span id="visium-x-elf"></span><span id="visium-*-elf"></span><h3 class="heading">visium-*-elf</h3>
  <p>CDS VISIUMcore processor.
  This configuration is intended for embedded systems.
  </p>
  <hr />
! <span id="x-x-vxworks"></span><span id="g_t*-*-vxworks*"></span><h3 class="heading">*-*-vxworks*</h3>
  <p>Support for VxWorks is in flux.  At present GCC supports <em>only</em> the
  very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC.
  We welcome patches for other architectures supported by VxWorks 5.5.
*************** that file to add the module to your kern
*** 1307,1322 ****
  VxWorks will incorporate this module.)
  </p>
  <hr />
! <a name="x86-64-x-x"></a><a name="x86_005f64-*-*_002c-amd64-*-*"></a>
! <h3 class="heading">x86_64-*-*, amd64-*-*</h3>
  <p>GCC supports the x86-64 architecture implemented by the AMD64 processor
  (amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD.
  On GNU/Linux the default is a bi-arch compiler which is able to generate
  both 64-bit x86-64 and 32-bit x86 code (via the <samp>-m32</samp> switch).
  </p>
  <hr />
! <a name="x86-64-x-solaris2"></a><a name="x86_005f64-*-solaris2*"></a>
! <h3 class="heading">x86_64-*-solaris2*</h3>
  <p>GCC also supports the x86-64 architecture implemented by the AMD64
  processor (&lsquo;<samp>amd64-*-*</samp>&rsquo; is an alias for &lsquo;<samp>x86_64-*-*</samp>&rsquo;) on
  Solaris 10 or later.  Unlike other systems, without special options a
--- 1253,1266 ----
  VxWorks will incorporate this module.)
  </p>
  <hr />
! <span id="x86-64-x-x"></span><span id="x86_005f64-*-*_002c-amd64-*-*"></span><h3 class="heading">x86_64-*-*, amd64-*-*</h3>
  <p>GCC supports the x86-64 architecture implemented by the AMD64 processor
  (amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD.
  On GNU/Linux the default is a bi-arch compiler which is able to generate
  both 64-bit x86-64 and 32-bit x86 code (via the <samp>-m32</samp> switch).
  </p>
  <hr />
! <span id="x86-64-x-solaris2"></span><span id="x86_005f64-*-solaris2*"></span><h3 class="heading">x86_64-*-solaris2*</h3>
  <p>GCC also supports the x86-64 architecture implemented by the AMD64
  processor (&lsquo;<samp>amd64-*-*</samp>&rsquo; is an alias for &lsquo;<samp>x86_64-*-*</samp>&rsquo;) on
  Solaris 10 or later.  Unlike other systems, without special options a
*************** as 64-bit code, configure with <samp>--t
*** 1329,1336 ****
  and &lsquo;<samp>CC=gcc -m64</samp>&rsquo;.
  </p>
  <hr />
! <a name="xtensa-x-elf"></a><a name="xtensa*-*-elf"></a>
! <h3 class="heading">xtensa*-*-elf</h3>
  <p>This target is intended for embedded Xtensa systems using the
  &lsquo;<samp>newlib</samp>&rsquo; C library.  It uses ELF but does not support shared
  objects.  Designed-defined instructions specified via the
--- 1273,1279 ----
  and &lsquo;<samp>CC=gcc -m64</samp>&rsquo;.
  </p>
  <hr />
! <span id="xtensa-x-elf"></span><span id="xtensa*-*-elf"></span><h3 class="heading">xtensa*-*-elf</h3>
  <p>This target is intended for embedded Xtensa systems using the
  &lsquo;<samp>newlib</samp>&rsquo; C library.  It uses ELF but does not support shared
  objects.  Designed-defined instructions specified via the
*************** downloaded files include a customized co
*** 1345,1352 ****
  which you can use to replace the default header file.
  </p>
  <hr />
! <a name="xtensa-x-linux"></a><a name="xtensa*-*-linux*"></a>
! <h3 class="heading">xtensa*-*-linux*</h3>
  <p>This target is for Xtensa systems running GNU/Linux.  It supports ELF
  shared objects and the GNU C library (glibc).  It also generates
  position-independent code (PIC) regardless of whether the
--- 1288,1294 ----
  which you can use to replace the default header file.
  </p>
  <hr />
! <span id="xtensa-x-linux"></span><span id="xtensa*-*-linux*"></span><h3 class="heading">xtensa*-*-linux*</h3>
  <p>This target is for Xtensa systems running GNU/Linux.  It supports ELF
  shared objects and the GNU C library (glibc).  It also generates
  position-independent code (PIC) regardless of whether the
*************** respects, this target is the same as the
*** 1355,1373 ****
  <a href="#xtensa*-*-elf">&lsquo;<samp>xtensa*-*-elf</samp>&rsquo;</a> target.
  </p>
  <hr />
! <a name="windows"></a><a name="Microsoft-Windows"></a>
! <h3 class="heading">Microsoft Windows</h3>
  
! <a name="Intel-16-bit-versions"></a>
! <h4 class="subheading">Intel 16-bit versions</h4>
  <p>The 16-bit versions of Microsoft Windows, such as Windows 3.1, are not
  supported.
  </p>
  <p>However, the 32-bit port has limited support for Microsoft
  Windows 3.11 in the Win32s environment, as a target only.  See below.
  </p>
! <a name="Intel-32-bit-versions"></a>
! <h4 class="subheading">Intel 32-bit versions</h4>
  <p>The 32-bit versions of Windows, including Windows 95, Windows NT, Windows
  XP, and Windows Vista, are supported by several different target
  platforms.  These targets differ in which Windows subsystem they target
--- 1297,1312 ----
  <a href="#xtensa*-*-elf">&lsquo;<samp>xtensa*-*-elf</samp>&rsquo;</a> target.
  </p>
  <hr />
! <span id="windows"></span><span id="Microsoft-Windows"></span><h3 class="heading">Microsoft Windows</h3>
  
! <span id="Intel-16-bit-versions"></span><h4 class="subheading">Intel 16-bit versions</h4>
  <p>The 16-bit versions of Microsoft Windows, such as Windows 3.1, are not
  supported.
  </p>
  <p>However, the 32-bit port has limited support for Microsoft
  Windows 3.11 in the Win32s environment, as a target only.  See below.
  </p>
! <span id="Intel-32-bit-versions"></span><h4 class="subheading">Intel 32-bit versions</h4>
  <p>The 32-bit versions of Windows, including Windows 95, Windows NT, Windows
  XP, and Windows Vista, are supported by several different target
  platforms.  These targets differ in which Windows subsystem they target
*************** the Win32 subsystem that provides a subs
*** 1382,1402 ****
  <a href="https://www.mkssoftware.com">https://www.mkssoftware.com</a> for more information.
  </li></ul>
  
! <a name="Intel-64-bit-versions"></a>
! <h4 class="subheading">Intel 64-bit versions</h4>
  <p>GCC contains support for x86-64 using the mingw-w64
! runtime library, available from <a href="http://mingw-w64.org/doku.php">http://mingw-w64.org/doku.php</a>.
  This library should be used with the target triple x86_64-pc-mingw32.
  </p>
! <p>Presently Windows for Itanium is not supported.
! </p>
! <a name="Windows-CE"></a>
! <h4 class="subheading">Windows CE</h4>
  <p>Windows CE is supported as a target only on Hitachi
  SuperH (sh-wince-pe), and MIPS (mips-wince-pe).
  </p>
! <a name="Other-Windows-Platforms"></a>
! <h4 class="subheading">Other Windows Platforms</h4>
  <p>GCC no longer supports Windows NT on the Alpha or PowerPC.
  </p>
  <p>GCC no longer supports the Windows POSIX subsystem.  However, it does
--- 1321,1336 ----
  <a href="https://www.mkssoftware.com">https://www.mkssoftware.com</a> for more information.
  </li></ul>
  
! <span id="Intel-64-bit-versions"></span><h4 class="subheading">Intel 64-bit versions</h4>
  <p>GCC contains support for x86-64 using the mingw-w64
! runtime library, available from <a href="https://www.mingw-w64.org/downloads/">https://www.mingw-w64.org/downloads/</a>.
  This library should be used with the target triple x86_64-pc-mingw32.
  </p>
! <span id="Windows-CE"></span><h4 class="subheading">Windows CE</h4>
  <p>Windows CE is supported as a target only on Hitachi
  SuperH (sh-wince-pe), and MIPS (mips-wince-pe).
  </p>
! <span id="Other-Windows-Platforms"></span><h4 class="subheading">Other Windows Platforms</h4>
  <p>GCC no longer supports Windows NT on the Alpha or PowerPC.
  </p>
  <p>GCC no longer supports the Windows POSIX subsystem.  However, it does
*************** be inactive.  See <a href="http://pw32.s
*** 1410,1417 ****
  <p>UWIN support has been removed due to a lack of maintenance.
  </p>
  <hr />
! <a name="x-x-cygwin"></a><a name="g_t*-*-cygwin"></a>
! <h3 class="heading">*-*-cygwin</h3>
  <p>Ports of GCC are included with the
  <a href="http://www.cygwin.com/">Cygwin environment</a>.
  </p>
--- 1344,1350 ----
  <p>UWIN support has been removed due to a lack of maintenance.
  </p>
  <hr />
! <span id="x-x-cygwin"></span><span id="g_t*-*-cygwin"></span><h3 class="heading">*-*-cygwin</h3>
  <p>Ports of GCC are included with the
  <a href="http://www.cygwin.com/">Cygwin environment</a>.
  </p>
*************** the latest official GNU binutils release
*** 1425,1439 ****
  or version 2.20 or above if building your own.
  </p>
  <hr />
! <a name="x-x-mingw32"></a><a name="g_t*-*-mingw32"></a>
! <h3 class="heading">*-*-mingw32</h3>
  <p>GCC will build with and support only MinGW runtime 3.12 and later.
  Earlier versions of headers are incompatible with the new default semantics
  of <code>extern inline</code> in <code>-std=c99</code> and <code>-std=gnu99</code> modes.
  </p>
  <hr />
! <a name="older"></a><a name="Older-systems"></a>
! <h3 class="heading">Older systems</h3>
  <p>GCC contains support files for many older (1980s and early
  1990s) Unix variants.  For the most part, support for these systems
  has not been deliberately removed, but it has not been maintained for
--- 1358,1374 ----
  or version 2.20 or above if building your own.
  </p>
  <hr />
! <span id="x-x-mingw32"></span><span id="g_t*-*-mingw32"></span><h3 class="heading">*-*-mingw32</h3>
  <p>GCC will build with and support only MinGW runtime 3.12 and later.
  Earlier versions of headers are incompatible with the new default semantics
  of <code>extern inline</code> in <code>-std=c99</code> and <code>-std=gnu99</code> modes.
  </p>
+ <p>To support emitting DWARF debugging info you need to use GNU binutils
+ version 2.16 or above containing support for the <code>.secrel32</code>
+ assembler pseudo-op.
+ </p>
  <hr />
! <span id="older"></span><span id="Older-systems"></span><h3 class="heading">Older systems</h3>
  <p>GCC contains support files for many older (1980s and early
  1990s) Unix variants.  For the most part, support for these systems
  has not been deliberately removed, but it has not been maintained for
*************** about GCC on such systems (which may no
*** 1476,1483 ****
  current GCC) is to be found in the GCC texinfo manual.
  </p>
  <hr />
! <a name="elf"></a><a name="all-ELF-targets-_0028SVR4_002c-Solaris-2_002c-etc_002e_0029"></a>
! <h3 class="heading">all ELF targets (SVR4, Solaris 2, etc.)</h3>
  <p>C++ support is significantly better on ELF targets if you use the
  <a href="./configure.html#with-gnu-ld">GNU linker</a>; duplicate copies of
  inlines, vtables and template instantiations will be discarded
--- 1411,1417 ----
  current GCC) is to be found in the GCC texinfo manual.
  </p>
  <hr />
! <span id="elf"></span><span id="all-ELF-targets-_0028SVR4_002c-Solaris-2_002c-etc_002e_0029"></span><h3 class="heading">all ELF targets (SVR4, Solaris 2, etc.)</h3>
  <p>C++ support is significantly better on ELF targets if you use the
  <a href="./configure.html#with-gnu-ld">GNU linker</a>; duplicate copies of
  inlines, vtables and template instantiations will be discarded
*************** automatically.
*** 1491,1497 ****
  
  
  
- 
  
  
  </body>
--- 1425,1430 ----
diff -Nrcpad gcc-11.3.0/INSTALL/test.html gcc-12.1.0/INSTALL/test.html
*** gcc-11.3.0/INSTALL/test.html	Thu Apr 21 07:59:39 2022
--- gcc-12.1.0/INSTALL/test.html	Fri May  6 07:31:21 2022
***************
*** 1,6 ****
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
--- 1,6 ----
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
! <!-- Copyright (C) 1988-2022 Free Software Foundation, Inc.
  
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
*************** A GNU Manual
*** 19,25 ****
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Testing</title>
--- 19,25 ----
  You have freedom to copy and modify this GNU Manual, like GNU
       software.  Copies published by the Free Software Foundation raise
       funds for GNU development. -->
! <!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Installing GCC: Testing</title>
*************** You have freedom to copy and modify this
*** 33,55 ****
  <!--
  a.summary-letter {text-decoration: none}
  blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
  div.display {margin-left: 3.2em}
  div.example {margin-left: 3.2em}
  div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
  kbd {font-style: oblique}
  pre.display {font-family: inherit}
  pre.format {font-family: inherit}
  pre.menu-comment {font-family: serif}
  pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
  span.nolinebreak {white-space: nowrap}
  span.roman {font-family: initial; font-weight: normal}
  span.sansserif {font-family: sans-serif; font-weight: normal}
--- 33,46 ----
*************** ul.no-bullet {list-style: none}
*** 83,98 ****
  
  
  
! <a name="index-Testing"></a>
! <a name="index-Installing-GCC_003a-Testing"></a>
! <a name="index-Testsuite"></a>
  
  <p>Before you install GCC, we encourage you to run the testsuites and to
  compare your results with results from a similar configuration that have
  been submitted to the
! <a href="http://gcc.gnu.org/ml/gcc-testresults/">gcc-testresults mailing list</a>.
  Some of these archived results are linked from the build status lists
! at <a href="http://gcc.gnu.org/buildstat.html">http://gcc.gnu.org/buildstat.html</a>, although not everyone who
  reports a successful build runs the testsuites and submits the results.
  This step is optional and may require you to download additional software,
  but it can give you confidence in your new GCC installation or point out
--- 74,89 ----
  
  
  
! <span id="index-Testing"></span>
! <span id="index-Installing-GCC_003a-Testing"></span>
! <span id="index-Testsuite"></span>
  
  <p>Before you install GCC, we encourage you to run the testsuites and to
  compare your results with results from a similar configuration that have
  been submitted to the
! <a href="https://gcc.gnu.org/ml/gcc-testresults/">gcc-testresults mailing list</a>.
  Some of these archived results are linked from the build status lists
! at <a href="https://gcc.gnu.org/buildstat.html">https://gcc.gnu.org/buildstat.html</a>, although not everyone who
  reports a successful build runs the testsuites and submits the results.
  This step is optional and may require you to download additional software,
  but it can give you confidence in your new GCC installation or point out
*************** These are part of the full distribution,
*** 104,122 ****
  separately.
  </p>
  <p>Second, you must have the testing tools installed.  This includes
! <a href="http://www.gnu.org/software/dejagnu/">DejaGnu</a>, Tcl, and Expect;
! the DejaGnu site has links to these. For running the BRIG frontend
! tests, a tool to assemble the binary BRIGs from HSAIL text,
! <a href="https://github.com/HSAFoundation/HSAIL-Tools/">HSAILasm</a> must
! be installed.  Some optional tests also require Python3 and pytest module.
  </p>
  <p>If the directories where <code>runtest</code> and <code>expect</code> were
  installed are not in the <code>PATH</code>, you may need to set the following
  environment variables appropriately, as in the following example (which
  assumes that DejaGnu has been installed under <samp>/usr/local</samp>):
  </p>
! <div class="smallexample">
! <pre class="smallexample">TCL_LIBRARY = /usr/local/share/tcl8.0
  DEJAGNULIBS = /usr/local/share/dejagnu
  </pre></div>
  
--- 95,111 ----
  separately.
  </p>
  <p>Second, you must have the testing tools installed.  This includes
! <a href="https://www.gnu.org/software/dejagnu/">DejaGnu</a>, Tcl, and Expect;
! the DejaGnu site has links to these.
! Some optional tests also require Python3 and pytest module.
  </p>
  <p>If the directories where <code>runtest</code> and <code>expect</code> were
  installed are not in the <code>PATH</code>, you may need to set the following
  environment variables appropriately, as in the following example (which
  assumes that DejaGnu has been installed under <samp>/usr/local</samp>):
  </p>
! <div class="example">
! <pre class="example">TCL_LIBRARY = /usr/local/share/tcl8.0
  DEJAGNULIBS = /usr/local/share/dejagnu
  </pre></div>
  
*************** portability in the DejaGnu code.)
*** 126,133 ****
  </p>
  
  <p>Finally, you can run the testsuite (which may take a long time):
! </p><div class="smallexample">
! <pre class="smallexample">cd <var>objdir</var>; make -k check
  </pre></div>
  
  <p>This will test various components of GCC, such as compiler
--- 115,122 ----
  </p>
  
  <p>Finally, you can run the testsuite (which may take a long time):
! </p><div class="example">
! <pre class="example">cd <var>objdir</var>; make -k check
  </pre></div>
  
  <p>This will test various components of GCC, such as compiler
*************** might emit some harmless messages resemb
*** 137,146 ****
  &lsquo;<samp>WARNING: Couldn't find tool init file</samp>&rsquo; that can be ignored.
  </p>
  <p>If you are testing a cross-compiler, you may want to run the testsuite
! on a simulator as described at <a href="http://gcc.gnu.org/simtest-howto.html">http://gcc.gnu.org/simtest-howto.html</a>.
  </p>
! <a name="How-can-you-run-the-testsuite-on-selected-tests_003f"></a>
! <h3 class="section">How can you run the testsuite on selected tests?</h3>
  
  <p>In order to run sets of tests selectively, there are targets
  &lsquo;<samp>make check-gcc</samp>&rsquo; and language specific &lsquo;<samp>make check-c</samp>&rsquo;,
--- 126,134 ----
  &lsquo;<samp>WARNING: Couldn't find tool init file</samp>&rsquo; that can be ignored.
  </p>
  <p>If you are testing a cross-compiler, you may want to run the testsuite
! on a simulator as described at <a href="https://gcc.gnu.org/simtest-howto.html">https://gcc.gnu.org/simtest-howto.html</a>.
  </p>
! <span id="How-can-you-run-the-testsuite-on-selected-tests_003f"></span><h3 class="section">How can you run the testsuite on selected tests?</h3>
  
  <p>In order to run sets of tests selectively, there are targets
  &lsquo;<samp>make check-gcc</samp>&rsquo; and language specific &lsquo;<samp>make check-c</samp>&rsquo;,
*************** just run &lsquo;<samp>make check</samp>&
*** 154,168 ****
  <p>A more selective way to just run all <code>gcc</code> execute tests in the
  testsuite is to use
  </p>
! <div class="smallexample">
! <pre class="smallexample">make check-gcc RUNTESTFLAGS=&quot;execute.exp <var>other-options</var>&quot;
  </pre></div>
  
  <p>Likewise, in order to run only the <code>g++</code> &ldquo;old-deja&rdquo; tests in
  the testsuite with filenames matching &lsquo;<samp>9805*</samp>&rsquo;, you would use
  </p>
! <div class="smallexample">
! <pre class="smallexample">make check-g++ RUNTESTFLAGS=&quot;old-deja.exp=9805* <var>other-options</var>&quot;
  </pre></div>
  
  <p>The file-matching expression following <var>filename</var><code>.exp=</code> is treated
--- 142,156 ----
  <p>A more selective way to just run all <code>gcc</code> execute tests in the
  testsuite is to use
  </p>
! <div class="example">
! <pre class="example">make check-gcc RUNTESTFLAGS=&quot;execute.exp <var>other-options</var>&quot;
  </pre></div>
  
  <p>Likewise, in order to run only the <code>g++</code> &ldquo;old-deja&rdquo; tests in
  the testsuite with filenames matching &lsquo;<samp>9805*</samp>&rsquo;, you would use
  </p>
! <div class="example">
! <pre class="example">make check-g++ RUNTESTFLAGS=&quot;old-deja.exp=9805* <var>other-options</var>&quot;
  </pre></div>
  
  <p>The file-matching expression following <var>filename</var><code>.exp=</code> is treated
*************** as a series of whitespace-delimited glob
*** 170,177 ****
  may be passed, although any whitespace must either be escaped or surrounded by
  single quotes if multiple expressions are desired. For example,
  </p>
! <div class="smallexample">
! <pre class="smallexample">make check-g++ RUNTESTFLAGS=&quot;old-deja.exp=9805*\ virtual2.c <var>other-options</var>&quot;
  make check-g++ RUNTESTFLAGS=&quot;'old-deja.exp=9805* virtual2.c' <var>other-options</var>&quot;
  </pre></div>
  
--- 158,165 ----
  may be passed, although any whitespace must either be escaped or surrounded by
  single quotes if multiple expressions are desired. For example,
  </p>
! <div class="example">
! <pre class="example">make check-g++ RUNTESTFLAGS=&quot;old-deja.exp=9805*\ virtual2.c <var>other-options</var>&quot;
  make check-g++ RUNTESTFLAGS=&quot;'old-deja.exp=9805* virtual2.c' <var>other-options</var>&quot;
  </pre></div>
  
*************** To get a list of the possible <samp>*.ex
*** 182,197 ****
  output of &lsquo;<samp>make check</samp>&rsquo; into a file and look at the
  &lsquo;<samp>Running &hellip;  .exp</samp>&rsquo; lines.
  </p>
! <a name="Passing-options-and-running-multiple-testsuites"></a>
! <h3 class="section">Passing options and running multiple testsuites</h3>
  
  <p>You can pass multiple options to the testsuite using the
  &lsquo;<samp>--target_board</samp>&rsquo; option of DejaGNU, either passed as part of
  &lsquo;<samp>RUNTESTFLAGS</samp>&rsquo;, or directly to <code>runtest</code> if you prefer to
  work outside the makefiles.  For example,
  </p>
! <div class="smallexample">
! <pre class="smallexample">make check-g++ RUNTESTFLAGS=&quot;--target_board=unix/-O3/-fmerge-constants&quot;
  </pre></div>
  
  <p>will run the standard <code>g++</code> testsuites (&ldquo;unix&rdquo; is the target name
--- 170,184 ----
  output of &lsquo;<samp>make check</samp>&rsquo; into a file and look at the
  &lsquo;<samp>Running &hellip;  .exp</samp>&rsquo; lines.
  </p>
! <span id="Passing-options-and-running-multiple-testsuites"></span><h3 class="section">Passing options and running multiple testsuites</h3>
  
  <p>You can pass multiple options to the testsuite using the
  &lsquo;<samp>--target_board</samp>&rsquo; option of DejaGNU, either passed as part of
  &lsquo;<samp>RUNTESTFLAGS</samp>&rsquo;, or directly to <code>runtest</code> if you prefer to
  work outside the makefiles.  For example,
  </p>
! <div class="example">
! <pre class="example">make check-g++ RUNTESTFLAGS=&quot;--target_board=unix/-O3/-fmerge-constants&quot;
  </pre></div>
  
  <p>will run the standard <code>g++</code> testsuites (&ldquo;unix&rdquo; is the target name
*************** slashes separate options.
*** 202,217 ****
  <p>You can run the testsuites multiple times using combinations of options
  with a syntax similar to the brace expansion of popular shells:
  </p>
! <div class="smallexample">
! <pre class="smallexample">&hellip;&quot;--target_board=arm-sim\{-mhard-float,-msoft-float\}\{-O1,-O2,-O3,\}&quot;
  </pre></div>
  
  <p>(Note the empty option caused by the trailing comma in the final group.)
  The following will run each testsuite eight times using the &lsquo;<samp>arm-sim</samp>&rsquo;
  target, as if you had specified all possible combinations yourself:
  </p>
! <div class="smallexample">
! <pre class="smallexample">--target_board='arm-sim/-mhard-float/-O1 \
                  arm-sim/-mhard-float/-O2 \
                  arm-sim/-mhard-float/-O3 \
                  arm-sim/-mhard-float \
--- 189,204 ----
  <p>You can run the testsuites multiple times using combinations of options
  with a syntax similar to the brace expansion of popular shells:
  </p>
! <div class="example">
! <pre class="example">&hellip;&quot;--target_board=arm-sim\{-mhard-float,-msoft-float\}\{-O1,-O2,-O3,\}&quot;
  </pre></div>
  
  <p>(Note the empty option caused by the trailing comma in the final group.)
  The following will run each testsuite eight times using the &lsquo;<samp>arm-sim</samp>&rsquo;
  target, as if you had specified all possible combinations yourself:
  </p>
! <div class="example">
! <pre class="example">--target_board='arm-sim/-mhard-float/-O1 \
                  arm-sim/-mhard-float/-O2 \
                  arm-sim/-mhard-float/-O3 \
                  arm-sim/-mhard-float \
*************** target, as if you had specified all poss
*** 224,231 ****
  <p>They can be combined as many times as you wish, in arbitrary ways.  This
  list:
  </p>
! <div class="smallexample">
! <pre class="smallexample">&hellip;&quot;--target_board=unix/-Wextra\{-O3,-fno-strength\}\{-fomit-frame,\}&quot;
  </pre></div>
  
  <p>will generate four combinations, all involving &lsquo;<samp>-Wextra</samp>&rsquo;.
--- 211,218 ----
  <p>They can be combined as many times as you wish, in arbitrary ways.  This
  list:
  </p>
! <div class="example">
! <pre class="example">&hellip;&quot;--target_board=unix/-Wextra\{-O3,-fno-strength\}\{-fomit-frame,\}&quot;
  </pre></div>
  
  <p>will generate four combinations, all involving &lsquo;<samp>-Wextra</samp>&rsquo;.
*************** parallel by having the shell perform the
*** 237,250 ****
  do the parallel runs.  Instead of using &lsquo;<samp>--target_board</samp>&rsquo;, use a
  special makefile target:
  </p>
! <div class="smallexample">
! <pre class="smallexample">make -j<var>N</var> check-<var>testsuite</var>//<var>test-target</var>/<var>option1</var>/<var>option2</var>/&hellip;
  </pre></div>
  
  <p>For example,
  </p>
! <div class="smallexample">
! <pre class="smallexample">make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}
  </pre></div>
  
  <p>will run three concurrent &ldquo;make-gcc&rdquo; testsuites, eventually testing all
--- 224,237 ----
  do the parallel runs.  Instead of using &lsquo;<samp>--target_board</samp>&rsquo;, use a
  special makefile target:
  </p>
! <div class="example">
! <pre class="example">make -j<var>N</var> check-<var>testsuite</var>//<var>test-target</var>/<var>option1</var>/<var>option2</var>/&hellip;
  </pre></div>
  
  <p>For example,
  </p>
! <div class="example">
! <pre class="example">make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}
  </pre></div>
  
  <p>will run three concurrent &ldquo;make-gcc&rdquo; testsuites, eventually testing all
*************** supported in the <samp>gcc</samp> subdir
*** 253,260 ****
  typing <code>echo</code> before the example given here.)
  </p>
  
! <a name="How-to-interpret-test-results"></a>
! <h3 class="section">How to interpret test results</h3>
  
  <p>The result of running the testsuite are various <samp>*.sum</samp> and <samp>*.log</samp>
  files in the testsuite subdirectories.  The <samp>*.log</samp> files contain a
--- 240,246 ----
  typing <code>echo</code> before the example given here.)
  </p>
  
! <span id="How-to-interpret-test-results"></span><h3 class="section">How to interpret test results</h3>
  
  <p>The result of running the testsuite are various <samp>*.sum</samp> and <samp>*.log</samp>
  files in the testsuite subdirectories.  The <samp>*.log</samp> files contain a
*************** over whether or not a test is expected t
*** 278,291 ****
  be fixed in future releases.
  </p>
  
! <a name="Submitting-test-results"></a>
! <h3 class="section">Submitting test results</h3>
  
  <p>If you want to report the results to the GCC project, use the
  <samp>contrib/test_summary</samp> shell script.  Start it in the <var>objdir</var> with
  </p>
! <div class="smallexample">
! <pre class="smallexample"><var>srcdir</var>/contrib/test_summary -p your_commentary.txt \
      -m gcc-testresults@gcc.gnu.org |sh
  </pre></div>
  
--- 264,276 ----
  be fixed in future releases.
  </p>
  
! <span id="Submitting-test-results"></span><h3 class="section">Submitting test results</h3>
  
  <p>If you want to report the results to the GCC project, use the
  <samp>contrib/test_summary</samp> shell script.  Start it in the <var>objdir</var> with
  </p>
! <div class="example">
! <pre class="example"><var>srcdir</var>/contrib/test_summary -p your_commentary.txt \
      -m gcc-testresults@gcc.gnu.org |sh
  </pre></div>
  
*************** messages may be automatically processed.
*** 303,309 ****
  
  
  
- 
  
  
  <hr>
--- 288,293 ----
diff -Nrcpad gcc-11.3.0/LAST_UPDATED gcc-12.1.0/LAST_UPDATED
*** gcc-11.3.0/LAST_UPDATED	Thu Apr 21 07:59:37 2022
--- gcc-12.1.0/LAST_UPDATED	Fri May  6 07:31:20 2022
***************
*** 1 ****
! Obtained from git: releases/gcc-11.3.0 revision 2d280e7eafc086e9df85f50ed1a6526d6a3a204d
--- 1 ----
! Obtained from git: releases/gcc-12 revision 1ea978e3066ac565a1ec28a96a4d61eaf38e2726
diff -Nrcpad gcc-11.3.0/MAINTAINERS gcc-12.1.0/MAINTAINERS
*** gcc-11.3.0/MAINTAINERS	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/MAINTAINERS	Fri May  6 07:30:56 2022
*************** To report problems in GCC, please visit:
*** 15,27 ****
  
    http://gcc.gnu.org/bugs/
  
  Maintainers
  ===========
  
  			Global Reviewers
  
- Richard Earnshaw				<richard.earnshaw@arm.com>
  Richard Biener					<rguenther@suse.de>
  Jakub Jelinek					<jakub@redhat.com>
  Richard Kenner					<kenner@nyu.edu>
  Jeff Law					<jlaw@tachyum.com>
--- 15,33 ----
  
    http://gcc.gnu.org/bugs/
  
+ Note: when adding someone to a more specific section please remove any
+ corresponding entry from the Write After Approval list.
+ 
+ Note: please verify that sorting is correct with:
+ ./contrib/check-MAINTAINERS.py MAINTAINERS
+ 
  Maintainers
  ===========
  
  			Global Reviewers
  
  Richard Biener					<rguenther@suse.de>
+ Richard Earnshaw				<richard.earnshaw@arm.com>
  Jakub Jelinek					<jakub@redhat.com>
  Richard Kenner					<kenner@nyu.edu>
  Jeff Law					<jlaw@tachyum.com>
*************** aarch64 port		Richard Earnshaw	<richard.
*** 47,53 ****
  aarch64 port		Richard Sandiford	<richard.sandiford@arm.com>
  aarch64 port		Marcus Shawcroft	<marcus.shawcroft@arm.com>
  aarch64 port		Kyrylo Tkachov		<kyrylo.tkachov@arm.com>
! alpha port		Richard Henderson	<rth@twiddle.net>
  amdgcn port		Julian Brown		<julian@codesourcery.com>
  amdgcn port		Andrew Stubbs		<ams@codesourcery.com>
  arc port		Joern Rennecke		<gnu@amylaar.uk>
--- 53,59 ----
  aarch64 port		Richard Sandiford	<richard.sandiford@arm.com>
  aarch64 port		Marcus Shawcroft	<marcus.shawcroft@arm.com>
  aarch64 port		Kyrylo Tkachov		<kyrylo.tkachov@arm.com>
! alpha port		Richard Henderson	<rth@gcc.gnu.org>
  amdgcn port		Julian Brown		<julian@codesourcery.com>
  amdgcn port		Andrew Stubbs		<ams@codesourcery.com>
  arc port		Joern Rennecke		<gnu@amylaar.uk>
*************** hppa port		John David Anglin	<dave.angli
*** 74,81 ****
--- 80,90 ----
  i386 port		Jan Hubicka		<hubicka@ucw.cz>
  i386 port		Uros Bizjak		<ubizjak@gmail.com>
  i386 vector ISA extns	Kirill Yukhin		<kirill.yukhin@gmail.com>
+ i386 vector ISA extns	Hongtao Liu		<hongtao.liu@intel.com>
  iq2000 port		Nick Clifton		<nickc@redhat.com>
  lm32 port		Sebastien Bourdeauducq	<sebastien@milkymist.org>
+ LoongArch port		Chenghua Xu		<xuchenghua@loongson.cn>
+ LoongArch port		Lulu Cheng		<chenglulu@loongson.cn>
  m32r port		Nick Clifton		<nickc@redhat.com>
  m68k port (?)		Jeff Law		<jeffreyalaw@gmail.com>
  m68k port		Andreas Schwab		<schwab@linux-m68k.org>
*************** pru port		Dimitar Dimitrov	<dimitar@dinu
*** 100,111 ****
  riscv port		Kito Cheng		<kito.cheng@gmail.com>
  riscv port		Palmer Dabbelt		<palmer@dabbelt.com>
  riscv port		Andrew Waterman		<andrew@sifive.com>
! riscv port		Jim Wilson		<jimw@sifive.com>
  rs6000/powerpc port	David Edelsohn		<dje.gcc@gmail.com>
  rs6000/powerpc port	Segher Boessenkool	<segher@kernel.crashing.org>
  rs6000 vector extns	Aldy Hernandez		<aldyh@redhat.com>
  rx port			Nick Clifton		<nickc@redhat.com>
- s390 port		Hartmut Penner		<hepenner@us.ibm.com>
  s390 port		Ulrich Weigand		<uweigand@de.ibm.com>
  s390 port		Andreas Krebbel		<krebbel@linux.ibm.com>
  sh port			Alexandre Oliva		<aoliva@gcc.gnu.org>
--- 109,119 ----
  riscv port		Kito Cheng		<kito.cheng@gmail.com>
  riscv port		Palmer Dabbelt		<palmer@dabbelt.com>
  riscv port		Andrew Waterman		<andrew@sifive.com>
! riscv port		Jim Wilson		<jim.wilson.gcc@gmail.com>
  rs6000/powerpc port	David Edelsohn		<dje.gcc@gmail.com>
  rs6000/powerpc port	Segher Boessenkool	<segher@kernel.crashing.org>
  rs6000 vector extns	Aldy Hernandez		<aldyh@redhat.com>
  rx port			Nick Clifton		<nickc@redhat.com>
  s390 port		Ulrich Weigand		<uweigand@de.ibm.com>
  s390 port		Andreas Krebbel		<krebbel@linux.ibm.com>
  sh port			Alexandre Oliva		<aoliva@gcc.gnu.org>
*************** tilegx port		Walter Lee		<walt@tilera.co
*** 116,121 ****
--- 124,130 ----
  tilepro port		Walter Lee		<walt@tilera.com>
  v850 port		Nick Clifton		<nickc@redhat.com>
  vax port		Matt Thomas		<matt@3am-software.com>
+ vax port		Maciej W. Rozycki	<macro@embecosm.com>
  visium port		Eric Botcazou		<ebotcazou@libertysurf.fr>
  x86-64 port		Jan Hubicka		<hubicka@ucw.cz>
  xstormy16 port		Nick Clifton		<nickc@redhat.com>
*************** C front end/ISO C99	Joseph Myers		<josep
*** 150,157 ****
  Ada front end		Arnaud Charlet		<charlet@adacore.com>
  Ada front end		Eric Botcazou		<ebotcazou@libertysurf.fr>
  Ada front end		Pierre-Marie de Rodat	<derodat@adacore.com>
- BRIG (HSAIL) front end	Pekka Jääskeläinen	<pekka.jaaskelainen@parmance.com>
- BRIG (HSAIL) front end 	Martin Jambor		<mjambor@suse.cz>
  c++			Jason Merrill		<jason@redhat.com>
  c++			Nathan Sidwell		<nathan@acm.org>
  D front end		Iain Buclaw		<ibuclaw@gdcproject.org>
--- 159,164 ----
*************** libobjc			Andrew Pinski		<pinskia@gmail.
*** 177,184 ****
  libquadmath		Tobias Burnus		<tobias@codesourcery.com>
  libquadmath		Jakub Jelinek		<jakub@redhat.com>
  libvtv			Caroline Tice		<cmtice@google.com>
- libhsail-rt		Pekka Jääskeläinen	<pekka.jaaskelainen@parmance.com>
- libhsail-rt		Martin Jambor		<mjambor@suse.cz>
  libphobos		Iain Buclaw		<ibuclaw@gdcproject.org>
  line map		Dodji Seketeli		<dodji@redhat.com>
  soft-fp			Joseph Myers		<joseph@codesourcery.com>
--- 184,189 ----
*************** scheduler (+ haifa)	Jeff Law		<jeffreyal
*** 188,194 ****
  scheduler (+ haifa)	Vladimir Makarov	<vmakarov@redhat.com>
  modulo-scheduler	Roman Zhuykov		<zhroma@ispras.ru>
  reorg			Jeff Law		<jeffreyalaw@gmail.com>
! caller-save.c		Jeff Law		<jeffreyalaw@gmail.com>
  callgraph		Jan Hubicka		<hubicka@ucw.cz>
  debugging code		Jim Wilson		<wilson@tuliptree.org>
  dwarf debugging code	Jason Merrill		<jason@redhat.com>
--- 193,199 ----
  scheduler (+ haifa)	Vladimir Makarov	<vmakarov@redhat.com>
  modulo-scheduler	Roman Zhuykov		<zhroma@ispras.ru>
  reorg			Jeff Law		<jeffreyalaw@gmail.com>
! caller-save.cc		Jeff Law		<jeffreyalaw@gmail.com>
  callgraph		Jan Hubicka		<hubicka@ucw.cz>
  debugging code		Jim Wilson		<wilson@tuliptree.org>
  dwarf debugging code	Jason Merrill		<jason@redhat.com>
*************** fixincludes		Bruce Korb		<bkorb@gnu.org>
*** 202,211 ****
  *gimpl*			Jakub Jelinek		<jakub@redhat.com>
  *gimpl*			Aldy Hernandez		<aldyh@redhat.com>
  *gimpl*			Jason Merrill		<jason@redhat.com>
! gcse.c			Jeff Law		<jeffreyalaw@gmail.com>
  global opt framework	Jeff Law		<jeffreyalaw@gmail.com>
! hsa			Martin Jambor		<mjambor@suse.cz>
! jump.c			David S. Miller		<davem@redhat.com>
  web pages		Gerald Pfeifer		<gerald@pfeifer.com>
  config.sub/config.guess	Ben Elliston		<config-patches@gnu.org>
  i18n			Philipp Thomas		<pth@suse.de>
--- 207,215 ----
  *gimpl*			Jakub Jelinek		<jakub@redhat.com>
  *gimpl*			Aldy Hernandez		<aldyh@redhat.com>
  *gimpl*			Jason Merrill		<jason@redhat.com>
! gcse.cc			Jeff Law		<jeffreyalaw@gmail.com>
  global opt framework	Jeff Law		<jeffreyalaw@gmail.com>
! jump.cc			David S. Miller		<davem@redhat.com>
  web pages		Gerald Pfeifer		<gerald@pfeifer.com>
  config.sub/config.guess	Ben Elliston		<config-patches@gnu.org>
  i18n			Philipp Thomas		<pth@suse.de>
*************** option handling		Joseph Myers		<joseph@c
*** 229,234 ****
--- 233,240 ----
  middle-end		Jeff Law		<jeffreyalaw@gmail.com>
  middle-end		Ian Lance Taylor	<ian@airs.com>
  middle-end		Richard Biener		<rguenther@suse.de>
+ *vrp, ranger		Aldy Hernandez		<aldyh@redhat.com>
+ *vrp, ranger		Andrew MacLeod		<amacleod@redhat.com>
  tree-ssa		Andrew MacLeod		<amacleod@redhat.com>
  tree browser/unparser	Sebastian Pop		<sebpop@gmail.com>
  scev, data dependence	Sebastian Pop		<sebpop@gmail.com>
*************** testsuite		Rainer Orth		<ro@CeBiTec.Uni-
*** 248,254 ****
  testsuite		Mike Stump		<mikestump@comcast.net>
  register allocation	Vladimir Makarov	<vmakarov@redhat.com>
  gdbhooks.py		David Malcolm		<dmalcolm@redhat.com>
- SLSR			Bill Schmidt		<wschmidt@linux.ibm.com>
  jit			David Malcolm		<dmalcolm@redhat.com>
  gen* on machine desc	Richard Sandiford	<rdsandiford@googlemail.com>
  static analyzer		David Malcolm		<dmalcolm@redhat.com>
--- 254,259 ----
*************** check in changes outside of the parts of
*** 258,264 ****
  
  			Reviewers
  
- arc port		Andrew Burgess		<andrew.burgess@embecosm.com>
  arc port		Claudiu Zissulescu	<claziss@synopsys.com>
  callgraph		Martin Liska		<mliska@suse.cz>
  callgraph		Martin Jambor		<mjambor@suse.cz>
--- 263,268 ----
*************** dataflow		Paolo Bonzini		<bonzini@gnu.or
*** 267,272 ****
--- 271,277 ----
  dataflow		Seongbae Park		<seongbae.park@gmail.com>
  dataflow		Kenneth Zadeck		<zadeck@naturalbridge.com>
  driver			Joseph Myers		<joseph@codesourcery.com>
+ Fortran			Harald Anlauf		<anlauf@gmx.de>
  Fortran			Janne Blomqvist		<jb@gcc.gnu.org>
  Fortran			Tobias Burnus		<tobias@codesourcery.com>
  Fortran			François-Xavier Coudert	<fxcoudert@gcc.gnu.org>
*************** Fortran			Janus Weil		<janus@gcc.gnu.org
*** 283,292 ****
  Graphite		Tobias Grosser		<grosser@fim.uni-passau.de>
  Graphite		Sebastian Pop		<sebpop@gmail.com>
  libcpp			Tom Tromey		<tromey@redhat.com>
! libsanitizer, asan.c	Jakub Jelinek		<jakub@redhat.com>
! libsanitizer, asan.c	Dodji Seketeli		<dodji@redhat.com>
! libsanitizer, asan.c	Kostya Serebryany	<kcc@google.com>
! libsanitizer, asan.c	Dmitry Vyukov		<dvyukov@google.com>
  loop optimizer		Zdenek Dvorak		<ook@ucw.cz>
  LTO			Richard Biener		<rguenther@suse.de>
  LTO plugin		Cary Coutant		<ccoutant@gmail.com>
--- 288,297 ----
  Graphite		Tobias Grosser		<grosser@fim.uni-passau.de>
  Graphite		Sebastian Pop		<sebpop@gmail.com>
  libcpp			Tom Tromey		<tromey@redhat.com>
! libsanitizer, asan.cc	Jakub Jelinek		<jakub@redhat.com>
! libsanitizer, asan.cc	Dodji Seketeli		<dodji@redhat.com>
! libsanitizer, asan.cc	Kostya Serebryany	<kcc@google.com>
! libsanitizer, asan.cc	Dmitry Vyukov		<dvyukov@google.com>
  loop optimizer		Zdenek Dvorak		<ook@ucw.cz>
  LTO			Richard Biener		<rguenther@suse.de>
  LTO plugin		Cary Coutant		<ccoutant@gmail.com>
*************** from other maintainers or reviewers.
*** 309,315 ****
  
  Mark G. Adams					<mark.g.adams@sympatico.ca>
  Pedro Alves					<palves@redhat.com>
- Harald Anlauf					<anlauf@gmx.de>
  Raksit Ashok					<raksit@google.com>
  Matt Austern					<austern@google.com>
  David Ayers					<ayers@fsfe.org>
--- 314,319 ----
*************** Gergö Barany					<gergo@codesourcery.co
*** 322,333 ****
--- 326,339 ----
  Charles Baylis					<charles.baylis@linaro.org>
  Tejas Belagod					<tejas.belagod@arm.com>
  Matthew Beliveau				<mbelivea@redhat.com>
+ Serge Belyshev					<belyshev@depni.sinp.msu.ru>
  Jon Beniston					<jon@beniston.com>
  Andrew Bennett					<andrew.bennett@imgtec.com>
  Andrew Benson					<abensonca@gmail.com>
  Daniel Berlin					<dberlin@dberlin.org>
  Pat Bernardi					<bernardi@adacore.com>
  Jan Beulich					<jbeulich@novell.com>
+ Indu Bhagat					<indu.bhagat@oracle.com>
  David Billinghurst				<David.Billinghurst@riotinto.com>
  Tomas Bily					<tbily@suse.cz>
  Laurynas Biveinis				<laurynas.biveinis@gmail.com>
*************** Lynn Boger					<laboger@linux.vnet.ibm.c
*** 338,348 ****
--- 344,356 ----
  Ian Bolton					<ian.bolton@arm.com>
  Andrea Bona					<andrea.bona@st.com>
  Neil Booth					<neil@daikokuya.co.uk>
+ Antoni Boucher					<bouanto@zoho.com>
  Robert Bowdidge					<bowdidge@apple.com>
  Joel Brobecker					<brobecker@gnat.com>
  Dave Brolley					<brolley@redhat.com>
  Christian Bruel					<christian.bruel@st.com>
  Kevin Buettner					<kevinb@redhat.com>
+ Andrew Burgess					<aburgess@redhat.com>
  Adam Butcher					<adam@jessamine.co.uk>
  Andrew Cagney					<cagney@gnu.org>
  Daniel Carrera					<dcarrera@gmail.com>
*************** Gabriel Charette				<gchare@google.com>
*** 351,356 ****
--- 359,365 ----
  Chandra Chavva					<cchavva@redhat.com>
  Dehao Chen					<dehao@google.com>
  Fabien Chêne					<fabien@gcc.gnu.org>
+ Clément Chigot					<clement.chigot@atos.net>
  Harshit Chopra					<harshit@google.com>
  Tamar Christina					<tamar.christina@arm.com>
  Eric Christopher				<echristo@gmail.com>
*************** Doug Evans					<dje@google.com>
*** 387,392 ****
--- 396,402 ----
  Chris Fairles					<cfairles@gcc.gnu.org>
  Alessandro Fanfarillo				<fanfarillo.gcc@gmail.com>
  Changpeng Fang					<changpeng.fang@amd.com>
+ David Faust					<david.faust@oracle.com>
  Li Feng						<nemokingdom@gmail.com>
  Thomas Fitzsimmons				<fitzsim@redhat.com>
  Alexander Fomin					<afomin.mailbox@gmail.com>
*************** Haochen Gui					<guihaoc@gcc.gnu.org>
*** 415,420 ****
--- 425,431 ----
  Jiufu Guo					<guojiufu@linux.ibm.com>
  Xuepeng Guo					<terry.xpguo@gmail.com>
  Wei Guozhi					<carrot@google.com>
+ Naveen H.S					<naveenh@marvell.com>
  Mostafa Hagog					<hagog@gcc.gnu.org>
  Andrew Haley					<aph@redhat.com>
  Frederik Harwath				<frederik@codesourcery.com>
*************** Manfred Hollstein				<mh@suse.com>
*** 436,446 ****
  Cong Hou					<congh@google.com>
  Falk Hueffner					<falk@debian.org>
  Andrew John Hughes				<gnu_andrew@member.fsf.org>
! Dominique d'Humieres				<dominiq@lps.ens.fr>
  Andy Hutchinson					<hutchinsonandy@aim.com>
  Joel Hutton					<joel.hutton@arm.com>
  Lewis Hyatt					<lhyatt@gmail.com>
- Naveen H.S					<naveenh@marvell.com>
  Roland Illig					<roland.illig@gmx.de>
  Meador Inge					<meadori@codesourcery.com>
  Bernardo Innocenti				<bernie@develer.com>
--- 447,456 ----
  Cong Hou					<congh@google.com>
  Falk Hueffner					<falk@debian.org>
  Andrew John Hughes				<gnu_andrew@member.fsf.org>
! Dominique d'Humieres				<dhumieres.dominique@free.fr>
  Andy Hutchinson					<hutchinsonandy@aim.com>
  Joel Hutton					<joel.hutton@arm.com>
  Lewis Hyatt					<lhyatt@gmail.com>
  Roland Illig					<roland.illig@gmx.de>
  Meador Inge					<meadori@codesourcery.com>
  Bernardo Innocenti				<bernie@develer.com>
*************** Mihail Ionescu					<mihail.ionescu@arm.c
*** 448,458 ****
  Vladislav Ivanishin				<vlad@ispras.ru>
  Alexander Ivchenko				<aivchenk@gmail.com>
  Balaji V. Iyer					<bviyer@gmail.com>
  Daniel Jacobowitz				<drow@false.org>
  Andreas Jaeger					<aj@suse.de>
  Harsha Jagasia					<harsha.jagasia@amd.com>
  Fariborz Jahanian				<fjahanian@apple.com>
! Qian Jianhua					<qianjh@cn.fujitsu.com>
  Janis Johnson					<janis.marie.johnson@gmail.com>
  Teresa Johnson					<tejohnson@google.com>
  Kean Johnston					<jkj@sco.com>
--- 458,469 ----
  Vladislav Ivanishin				<vlad@ispras.ru>
  Alexander Ivchenko				<aivchenk@gmail.com>
  Balaji V. Iyer					<bviyer@gmail.com>
+ Pekka Jääskeläinen				<pekka.jaaskelainen@parmance.com>
  Daniel Jacobowitz				<drow@false.org>
  Andreas Jaeger					<aj@suse.de>
  Harsha Jagasia					<harsha.jagasia@amd.com>
  Fariborz Jahanian				<fjahanian@apple.com>
! Qian Jianhua					<qianjh@fujitsu.com>
  Janis Johnson					<janis.marie.johnson@gmail.com>
  Teresa Johnson					<tejohnson@google.com>
  Kean Johnston					<jkj@sco.com>
*************** Tim Josling					<tej@melbpc.org.au>
*** 461,485 ****
  Victor Kaplansky				<victork@il.ibm.com>
  Geoffrey Keating				<geoffk@geoffk.org>
  Brendan Kehoe					<brendan@zen.org>
- Matthias Klose					<doko@debian.org>
  Andi Kleen					<andi@firstfloor.org>
  Jeff Knaggs					<jknaggs@redhat.com>
  Michael Koch					<konqueror@gmx.de>
  Nicolas Koenig					<koenigni@student.ethz.ch>
  Boris Kolpackov					<boris@codesynthesis.com>
  Dave Korn					<dave.korn.cygwin@gmail.com>
  Julia Koval					<julia.koval@intel.com>
- Hongtao Liu					<hongtao.liu@intel.com>
  Matt Kraai					<kraai@ftbfs.org>
  Jan Kratochvil					<jan.kratochvil@redhat.com>
  Louis Krupp					<louis.krupp@zoho.com>
  Prathamesh Kulkarni				<prathamesh.kulkarni@linaro.org>
  Venkataramanan Kumar				<venkataramanan.kumar@amd.com>
  Doug Kwan					<dougkwan@google.com>
  Scott Robert Ladd				<scott.ladd@coyotegulch.com>
  Razya Ladelsky					<razya@gcc.gnu.org>
  Thierry Lafage					<thierry.lafage@inria.fr>
- Aaron W. LaFramboise				<aaronavay62@aaronwl.com>
  Rask Ingemann Lambertsen			<ccc94453@vip.cybercity.dk>
  Jerome Lambourg					<lambourg@adacore.com>
  Asher Langton					<langton2@llnl.gov>
--- 472,496 ----
  Victor Kaplansky				<victork@il.ibm.com>
  Geoffrey Keating				<geoffk@geoffk.org>
  Brendan Kehoe					<brendan@zen.org>
  Andi Kleen					<andi@firstfloor.org>
+ Matthias Klose					<doko@debian.org>
  Jeff Knaggs					<jknaggs@redhat.com>
  Michael Koch					<konqueror@gmx.de>
  Nicolas Koenig					<koenigni@student.ethz.ch>
  Boris Kolpackov					<boris@codesynthesis.com>
  Dave Korn					<dave.korn.cygwin@gmail.com>
  Julia Koval					<julia.koval@intel.com>
  Matt Kraai					<kraai@ftbfs.org>
  Jan Kratochvil					<jan.kratochvil@redhat.com>
+ Matthias Kretz					<m.kretz@gsi.de>
  Louis Krupp					<louis.krupp@zoho.com>
  Prathamesh Kulkarni				<prathamesh.kulkarni@linaro.org>
  Venkataramanan Kumar				<venkataramanan.kumar@amd.com>
  Doug Kwan					<dougkwan@google.com>
+ Aaron W. LaFramboise				<aaronavay62@aaronwl.com>
  Scott Robert Ladd				<scott.ladd@coyotegulch.com>
  Razya Ladelsky					<razya@gcc.gnu.org>
  Thierry Lafage					<thierry.lafage@inria.fr>
  Rask Ingemann Lambertsen			<ccc94453@vip.cybercity.dk>
  Jerome Lambourg					<lambourg@adacore.com>
  Asher Langton					<langton2@llnl.gov>
*************** Manuel López-Ibáñez				<manu@gcc.gnu.
*** 506,514 ****
  Carl Love					<cel@us.ibm.com>
  Martin v. Löwis					<loewis@informatik.hu-berlin.de>
  H.J. Lu						<hjl.tools@gmail.com>
! Xiong Hu Luo					<luoxhu@linux.vnet.ibm.com>
  Bin Bin Lv					<shlb@linux.ibm.com>
! Christophe Lyon					<christophe.lyon@st.com>
  Luis Machado					<luisgpm@br.ibm.com>
  Ziga Mahkovec					<ziga.mahkovec@klika.si>
  Matthew Malcomson				<matthew.malcomson@arm.com>
--- 517,526 ----
  Carl Love					<cel@us.ibm.com>
  Martin v. Löwis					<loewis@informatik.hu-berlin.de>
  H.J. Lu						<hjl.tools@gmail.com>
! Xiong Hu Luo					<luoxhu@gcc.gnu.org>
  Bin Bin Lv					<shlb@linux.ibm.com>
! Christophe Lyon					<christophe.lyon@arm.com>
! Jun Ma						<junma@linux.alibaba.com>
  Luis Machado					<luisgpm@br.ibm.com>
  Ziga Mahkovec					<ziga.mahkovec@klika.si>
  Matthew Malcomson				<matthew.malcomson@arm.com>
*************** Bingfeng Mei					<bmei@broadcom.com>
*** 528,541 ****
  Jim Meyering					<jim@meyering.net>
  Martin Michlmayr				<tbm@cyrius.com>
  Lee Millward					<lee.millward@gmail.com>
  Alan Modra					<amodra@gmail.com>
  Catherine Moore					<clm@codesourcery.com>
  James A. Morrison				<phython@gcc.gnu.org>
  Brooks Moses					<bmoses@google.com>
  Dirk Mueller					<dmueller@suse.de>
  Phil Muldoon					<pmuldoon@redhat.com>
  Steven Munroe					<munroesj52@gmail.com>
- Jun Ma						<junma@linux.alibaba.com>
  Szabolcs Nagy					<szabolcs.nagy@arm.com>
  Quentin Neill					<quentin.neill.gnu@gmail.com>
  Adam Nemet					<adambnemet@gmail.com>
--- 540,554 ----
  Jim Meyering					<jim@meyering.net>
  Martin Michlmayr				<tbm@cyrius.com>
  Lee Millward					<lee.millward@gmail.com>
+ Dragan Mladjenovic				<Dragan.Mladjenovic@syrmia.com>
  Alan Modra					<amodra@gmail.com>
  Catherine Moore					<clm@codesourcery.com>
  James A. Morrison				<phython@gcc.gnu.org>
  Brooks Moses					<bmoses@google.com>
  Dirk Mueller					<dmueller@suse.de>
  Phil Muldoon					<pmuldoon@redhat.com>
+ Gaius Mulley					<gaiusmod2@gmail.com>
  Steven Munroe					<munroesj52@gmail.com>
  Szabolcs Nagy					<szabolcs.nagy@arm.com>
  Quentin Neill					<quentin.neill.gnu@gmail.com>
  Adam Nemet					<adambnemet@gmail.com>
*************** James Norris
*** 546,554 ****
  Diego Novillo					<dnovillo@google.com>
  Dorit Nuzman					<dorit@il.ibm.com>
  David O'Brien					<obrien@FreeBSD.org>
- Braden Obrzut					<admin@maniacsvault.net>
  Carlos O'Donell					<carlos@redhat.com>
  Peter O'Gorman					<pogma@thewrittenword.com>
  Andrea Ornstein					<andrea.ornstein@st.com>
  Maxim Ostapenko					<m.ostapenko@samsung.com>
  Patrick Palka					<ppalka@gcc.gnu.org>
--- 559,567 ----
  Diego Novillo					<dnovillo@google.com>
  Dorit Nuzman					<dorit@il.ibm.com>
  David O'Brien					<obrien@FreeBSD.org>
  Carlos O'Donell					<carlos@redhat.com>
  Peter O'Gorman					<pogma@thewrittenword.com>
+ Braden Obrzut					<admin@maniacsvault.net>
  Andrea Ornstein					<andrea.ornstein@st.com>
  Maxim Ostapenko					<m.ostapenko@samsung.com>
  Patrick Palka					<ppalka@gcc.gnu.org>
*************** Nicolas Pitre					<nico@cam.org>
*** 564,576 ****
  Michael Ploujnikov				<michael.ploujnikov@oracle.com>
  Paul Pluzhnikov					<ppluzhnikov@google.com>
  Antoniu Pop					<antoniu.pop@gmail.com>
! Siddhesh Poyarekar				<siddhesh@sourceware.org>
  Vidya Praveen					<vidyapraveen@arm.com>
  Thomas Preud'homme				<thomas.preudhomme@celest.fr>
  Vladimir Prus					<vladimir@codesourcery.com>
  Hafiz Abid Qadeer				<abidh@codesourcery.com>
  Yao Qi						<yao@codesourcery.com>
  Jerry Quinn					<jlquinn@optonline.net>
  Easwaran Raman					<eraman@google.com>
  Joe Ramsay					<joe.ramsay@arm.com>
  Rolf Rasmussen					<rolfwr@gcc.gnu.org>
--- 577,591 ----
  Michael Ploujnikov				<michael.ploujnikov@oracle.com>
  Paul Pluzhnikov					<ppluzhnikov@google.com>
  Antoniu Pop					<antoniu.pop@gmail.com>
! Marc Poulhiès					<poulhies@adacore.com>
! Siddhesh Poyarekar				<siddhesh@gotplt.org>
  Vidya Praveen					<vidyapraveen@arm.com>
  Thomas Preud'homme				<thomas.preudhomme@celest.fr>
  Vladimir Prus					<vladimir@codesourcery.com>
  Hafiz Abid Qadeer				<abidh@codesourcery.com>
  Yao Qi						<yao@codesourcery.com>
  Jerry Quinn					<jlquinn@optonline.net>
+ Navid Rahimi					<navidrahimi@microsoft.com>
  Easwaran Raman					<eraman@google.com>
  Joe Ramsay					<joe.ramsay@arm.com>
  Rolf Rasmussen					<rolfwr@gcc.gnu.org>
*************** Erven Rohou					<erven.rohou@inria.fr>
*** 584,592 ****
  Ira Rosen					<irar@il.ibm.com>
  Yvan Roux					<yvan.roux@linaro.org>
  Eugene Rozenfeld				<erozen@microsoft.com>
- Maciej W. Rozycki				<macro@orcam.me.uk>
  Silvius Rus					<rus@google.com>
  Matthew Sachs					<msachs@apple.com>
  Hariharan Sandanagobalane			<hariharan.gcc@gmail.com>
  Duncan Sands					<baldrick@gcc.gnu.org>
  Sujoy Saraswati					<sujoy.saraswati@hpe.com>
--- 599,607 ----
  Ira Rosen					<irar@il.ibm.com>
  Yvan Roux					<yvan.roux@linaro.org>
  Eugene Rozenfeld				<erozen@microsoft.com>
  Silvius Rus					<rus@google.com>
  Matthew Sachs					<msachs@apple.com>
+ Ankur Saini					<arsenic@sourceware.org>
  Hariharan Sandanagobalane			<hariharan.gcc@gmail.com>
  Duncan Sands					<baldrick@gcc.gnu.org>
  Sujoy Saraswati					<sujoy.saraswati@hpe.com>
*************** Johannes Singler				<singler@kit.edu>
*** 608,622 ****
  Franz Sirl					<franz.sirl-kernel@lauterbach.com>
  Jan Sjodin					<jan.sjodin@amd.com>
  Trevor Smigiel					<trevor_smigiel@playstation.sony.com>
! Edward Smith-Rowland				<3dw4rd@verizon.net>
! Jayant Sonar					<rsonar.jayant@gmail.com>
  Anatoly Sokolov					<aesok@dol.ru>
  Michael Sokolov					<msokolov@ivan.Harhan.ORG>
  Richard Stallman				<rms@gnu.org>
  Basile Starynkevitch				<basile@starynkevitch.net>
  Jakub Staszak					<kuba@et.pl>
  Graham Stott					<graham.stott@btinternet.com>
  Jeff Sturm					<jsturm@gcc.gnu.org>
  Robert Suchanek					<rsuchy84@gmail.com>
  Andrew Sutton					<andrew.n.sutton@gmail.com>
  Gabriele Svelto					<gabriele.svelto@st.com>
--- 623,638 ----
  Franz Sirl					<franz.sirl-kernel@lauterbach.com>
  Jan Sjodin					<jan.sjodin@amd.com>
  Trevor Smigiel					<trevor_smigiel@playstation.sony.com>
! Edward Smith-Rowland				<esmithrowland@gmail.com>
  Anatoly Sokolov					<aesok@dol.ru>
  Michael Sokolov					<msokolov@ivan.Harhan.ORG>
+ Jayant Sonar					<rsonar.jayant@gmail.com>
  Richard Stallman				<rms@gnu.org>
  Basile Starynkevitch				<basile@starynkevitch.net>
  Jakub Staszak					<kuba@et.pl>
  Graham Stott					<graham.stott@btinternet.com>
  Jeff Sturm					<jsturm@gcc.gnu.org>
+ YunQiang Su					<yunqiang.su@cipunited.com>
  Robert Suchanek					<rsuchy84@gmail.com>
  Andrew Sutton					<andrew.n.sutton@gmail.com>
  Gabriele Svelto					<gabriele.svelto@st.com>
*************** Dinar Temirbulatov				<dtemirbulatov@gma
*** 629,641 ****
  Kresten Krab Thorup				<krab@gcc.gnu.org>
  Kai Tietz					<ktietz70@googlemail.com>
  Ilya Tocar					<tocarip@gmail.com>
  Philipp Tomsich					<philipp.tomsich@vrull.eu>
  Daniel Towner					<dant@picochip.com>
  Konrad Trifunovic				<konrad.trifunovic@inria.fr>
  Markus Trippelsdorf				<markus@trippelsdorf.de>
  Sergei Trofimovich				<slyfox@gcc.gnu.org>
  Igor Tsimbalist					<igor.v.tsimbalist@intel.com>
! Martin Uecker					<muecker@gwdg.de>
  David Ung					<davidu@mips.com>
  Neil Vachharajani				<nvachhar@gmail.com>
  Kris Van Hees					<kris.van.hees@oracle.com>
--- 645,658 ----
  Kresten Krab Thorup				<krab@gcc.gnu.org>
  Kai Tietz					<ktietz70@googlemail.com>
  Ilya Tocar					<tocarip@gmail.com>
+ Petter Tomner					<tomner@kth.se>
  Philipp Tomsich					<philipp.tomsich@vrull.eu>
  Daniel Towner					<dant@picochip.com>
  Konrad Trifunovic				<konrad.trifunovic@inria.fr>
  Markus Trippelsdorf				<markus@trippelsdorf.de>
  Sergei Trofimovich				<slyfox@gcc.gnu.org>
  Igor Tsimbalist					<igor.v.tsimbalist@intel.com>
! Martin Uecker					<uecker@gcc.gnu.org>
  David Ung					<davidu@mips.com>
  Neil Vachharajani				<nvachhar@gmail.com>
  Kris Van Hees					<kris.van.hees@oracle.com>
*************** Ilya Verbin					<iverbin@gmail.com>
*** 646,654 ****
--- 663,673 ----
  Andre Vieira					<andre.simoesdiasvieira@arm.com>
  Rasmus Villemoes				<rv@rasmusvillemoes.dk>
  Kugan Vivekanandarajah				<kuganv@linaro.org>
+ Marcel Vollweiler				<marcel@codesourcery.com>
  Ville Voutilainen				<ville.voutilainen@gmail.com>
  Nenad Vukicevic					<nenad@intrepid.com>
  Feng Wang					<fengwang@nudt.edu.cn>
+ Hongyu Wang					<hongyu.wang@intel.com>
  Jiong Wang					<jiong.wang@arm.com>
  Stephen M. Webb					<stephen.webb@bregmasoft.com>
  John Wehle					<john@feith.com>
*************** Przemyslaw Wirkus				<przemyslaw.wirkus@
*** 662,667 ****
--- 681,687 ----
  Carlo Wood					<carlo@alinoe.com>
  Jackson Woodruff				<jackson.woodruff@arm.com>
  Jonathan Wright					<jonathan.wright@arm.com>
+ Ruoyao Xi					<xry111@mengyan1223.wang>
  Mingjie Xing					<mingjie.xing@gmail.com>
  Chenghua Xu					<paul.hua.gm@gmail.com>
  Canqun Yang					<canqun@nudt.edu.cn>
*************** Josef Zlomek					<josef.zlomek@email.cz>
*** 685,687 ****
--- 705,730 ----
  James Dennett					<jdennett@acm.org>
  Christian Ehrhardt				<ehrhardt@mathematik.uni-ulm.de>
  Dara Hazeghi					<dhazeghi@yahoo.com>
+ 
+ 			Contributing under the DCO
+ 
+ By adding your name and email to this section, you certify that all your
+ subsequent contributions to GCC are made under the terms of the Developer's
+ Certificate of Origin Version 1.1.  See https://gcc.gnu.org/dco.html for more
+ information.
+ 
+ 
+ Matthias Kretz					<m.kretz@gsi.de>
+ Jeff Law					<jeffreyalaw@gmail.com>
+ Jeff Law					<jlaw@tachyum.com>
+ Gaius Mulley					<gaiusmod2@gmail.com>
+ Siddhesh Poyarekar				<siddhesh@gotplt.org>
+ Navid Rahimi					<navidrahimi@microsoft.com>
+ Trevor Saunders					<tbsaunde+gcc@tbsaunde.org>
+ Bill Schmidt					<bill.schmidt@fastmail.com>
+ Nathan Sidwell					<nathan@acm.org>
+ Edward Smith-Rowland				<esmithrowland@gmail.com>
+ Petter Tomner					<tomner@kth.se>
+ Martin Uecker					<uecker@gcc.gnu.org>
+ Jonathan Wakely					<jwakely@redhat.com>
+ Chung-Ju Wu					<jasonwucj@gmail.com>
diff -Nrcpad gcc-11.3.0/MD5SUMS gcc-12.1.0/MD5SUMS
*** gcc-11.3.0/MD5SUMS	Thu Apr 21 08:32:17 2022
--- gcc-12.1.0/MD5SUMS	Fri May  6 07:53:42 2022
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the 
! # gcc-11.3.0.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
--- 1,5 ----
  # This file contains the MD5 checksums of the files in the 
! # gcc-12.1.0.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
***************
*** 8,61 ****
  # Suggested usage:
  # md5sum -c MD5SUMS | grep -v "OK$"
  #
! c0eb7bac11479e0032693e4e55297c40  .dir-locals.el
  5b296b32e07d2a84f4ac051ed7f95b91  .gitattributes
! 79b46988417a8ff9423aeca2247266f0  .gitignore
  8c00452ef1e298846493ec8b239f93e2  ABOUT-NLS
  59530bdf33659b29e73d4adb9f9f6552  COPYING
  2d5025d4aa3495befef8f17206a5b0a1  COPYING.LIB
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! fad7e1929ef6bb608fa937fc5a03bb45  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! bc7bdcccf93f4034179af78f65536f21  INSTALL/binaries.html
! 47057783bb8704ed0f9a9b77196febec  INSTALL/build.html
! 4e1d74971c4f88186a2f719f8119f026  INSTALL/configure.html
! 4ad42e872d55de846185619a86a9acab  INSTALL/download.html
! 2ebc451429ebe4a0f55bc64b839512fc  INSTALL/finalinstall.html
! 035bd0aca4c9df3c4b92a8978e95a67b  INSTALL/gfdl.html
! b6a001358f0bb55ee8a22d7fedf3a639  INSTALL/index.html
! b1c9de1da8a8a66ea54722abde3498b1  INSTALL/old.html
! 3b37510298c2b0d3e77ed664a1653da1  INSTALL/prerequisites.html
! 343ae5d41e1449e92582e99bbbd039d1  INSTALL/specific.html
! 7d9e6352d151d352657bd02f0e09c3ef  INSTALL/test.html
! 726f348a8d755b1d266468f41b9a9d0a  LAST_UPDATED
! 863d0fffeb06d7a45df38d7836e342bd  MAINTAINERS
! 8a667df3c1ab240343b2f6a644f92970  Makefile.def
! 468d396660b8969b6f51738c94ad90ef  Makefile.in
! 87a68bd7215bdcd229ae57f7f8c3622f  Makefile.tpl
! f95caff4339451dfc8ad6a08cd2aa87d  NEWS
  80d26bc3b1ad4f6969a96a24c9181bf5  README
  a657821f65bab77f4fbf3a75cdee6da9  ar-lib
! 9e739efdd890bfa55fe3e5546c20d6e6  c++tools/ChangeLog
! 436118acd883073ecd4bbbc8e56f8e5c  c++tools/Makefile.in
! c4735269d3a60846e4e67459fe4c4811  c++tools/config.h.in
! dc92ffb2a8f3fefb9cf3381e7474d193  c++tools/configure
! 187429e66ff4a4f1dfd106cdfeab9a91  c++tools/configure.ac
! dbf071e12c975472c7fb6dbc22cb6f81  c++tools/resolver.cc
! 638228e6632a53edcfe90c75fe725be8  c++tools/resolver.h
! c7a6315035957c9c2b36f5d267723408  c++tools/server.cc
  500b9244caa7a7ab23ece1db37efa76d  compile
  0a5df71d999a1a0135a99ab79fb42e4f  config-ml.in
  c64564b7c7563dae5ebe016f340c9cd9  config.guess
  040359150cf11493f973a46d8a25b06b  config.rpath
! d320a9a1a5eb63901563ae5adf268433  config.sub
! 57ccaa30ed28f1d0ad5d75ec89dca553  config/ChangeLog
! 0fcd4badfe2a2191778bdf5ab94aa40c  config/acinclude.m4
! 2ea0edfde0ce5ce69b49317a5650f048  config/acx.m4
  6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
  a6bf9c39c62222092ea6d5d8551c077f  config/ax_check_define.m4
  fa1446baa94824d733d33eb615217d23  config/ax_count_cpus.m4
--- 8,60 ----
  # Suggested usage:
  # md5sum -c MD5SUMS | grep -v "OK$"
  #
! c234515d9056662b94af0653f8562888  .dir-locals.el
  5b296b32e07d2a84f4ac051ed7f95b91  .gitattributes
! 1827b498bbbb07804e7d5b4eecaa3106  .gitignore
  8c00452ef1e298846493ec8b239f93e2  ABOUT-NLS
  59530bdf33659b29e73d4adb9f9f6552  COPYING
  2d5025d4aa3495befef8f17206a5b0a1  COPYING.LIB
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 0bf1dbbfc8d2ea13317e16fcb8811ed0  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 332e64962c41a68d4f827f4e19088a30  INSTALL/binaries.html
! 7206aa008db3e7b87ce525ed88eed36f  INSTALL/build.html
! c1d9ecd4c305d5e6ba9efa5d2e1e01fc  INSTALL/configure.html
! e819fc358b74bb45221df4b02b8aa1b6  INSTALL/download.html
! 0e67d2866051c558de16469f8e0a252c  INSTALL/finalinstall.html
! d501b1e599d130468141739b628b20c0  INSTALL/gfdl.html
! bc263c88943c2fcb4bc40f9de0861ac6  INSTALL/index.html
! 21f3e87d3cd51be63c2bdec26da2323e  INSTALL/prerequisites.html
! 38d7fd2a1e58c0971ca220da9041c974  INSTALL/specific.html
! 7f75660ee5e5690415c8b7e14b1ab5f1  INSTALL/test.html
! df00b30fd9770425da72faec035ce6ec  LAST_UPDATED
! e854cb1e639422e089031eba0c689e15  MAINTAINERS
! 5b26d0dff99e7a528342ab4d77a284df  Makefile.def
! e2f1751d40a9663c173f048c1179539e  Makefile.in
! 382a58bdaf362535403c959d6afd6a00  Makefile.tpl
! 8acb315c85aa3b8c442de9e082862296  NEWS
  80d26bc3b1ad4f6969a96a24c9181bf5  README
  a657821f65bab77f4fbf3a75cdee6da9  ar-lib
! 56b7dcd41f5297382b944272a2c8c8ba  c++tools/ChangeLog
! 2c6571dc657d98d1537d54460dab13c7  c++tools/Makefile.in
! edf805e559bf9ecb62db313d2e6edb47  c++tools/config.h.in
! ccd3498e6b247dfe4e65793a88a27296  c++tools/configure
! d0a958ed0647ffae3446c59780997d14  c++tools/configure.ac
! da3f3927414dbcf7878d2d582a2a8992  c++tools/resolver.cc
! 2f289f995668c3da5c27ce8ce93f91fb  c++tools/resolver.h
! 47cce9032389f473d27c2ab8f07441dc  c++tools/server.cc
  500b9244caa7a7ab23ece1db37efa76d  compile
  0a5df71d999a1a0135a99ab79fb42e4f  config-ml.in
  c64564b7c7563dae5ebe016f340c9cd9  config.guess
  040359150cf11493f973a46d8a25b06b  config.rpath
! 111d54aa3a3019adbab413c8fb435f22  config.sub
! 1cf06860acb0d7cad2e0ee577dba3d07  config/ChangeLog
! 0d9cf183f9cbbe5f59796e35831fe774  config/acinclude.m4
! 0b0c1d39d39d11f4b42359daf3516e62  config/acx.m4
  6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
  a6bf9c39c62222092ea6d5d8551c077f  config/ax_check_define.m4
  fa1446baa94824d733d33eb615217d23  config/ax_count_cpus.m4
*************** f0d17f3362caa1926e231994168f1e8d  config
*** 74,85 ****
  babb6167c05386834412652e8b27239e  config/bootstrap-debug-lib.mk
  9a194b56c06b616528d1e76306aa78e6  config/bootstrap-debug.mk
  584327e59bbe42cfcf0b041fed0f4526  config/bootstrap-hwasan.mk
! abb913a79f307c92b276ddb058600c2b  config/bootstrap-lto-lean.mk
  33768879cdb11bf946d977ab6632d169  config/bootstrap-lto-noplugin.mk
! 300f4b357f96bcf7bed569192152a866  config/bootstrap-lto.mk
  f466ea6022e6627a2e3d94bb0cc7eeb9  config/bootstrap-time.mk
  065f6478cf9a6fdc999f666517cfb8b4  config/bootstrap-ubsan.mk
! f1139d31b40bd5985bd749e15a83f971  config/cet.m4
  04bdbef77f5fd2e282f7dee0bde60444  config/codeset.m4
  b5a5c394536a15e50be1998bd341fd02  config/depstand.m4
  321e8bd6894bd9a668af361e89e92e9b  config/dfp.m4
--- 73,84 ----
  babb6167c05386834412652e8b27239e  config/bootstrap-debug-lib.mk
  9a194b56c06b616528d1e76306aa78e6  config/bootstrap-debug.mk
  584327e59bbe42cfcf0b041fed0f4526  config/bootstrap-hwasan.mk
! a3bca109766820001668b4d4f41057c6  config/bootstrap-lto-lean.mk
  33768879cdb11bf946d977ab6632d169  config/bootstrap-lto-noplugin.mk
! ece3bc716fac1aca84326d40b97a4b4b  config/bootstrap-lto.mk
  f466ea6022e6627a2e3d94bb0cc7eeb9  config/bootstrap-time.mk
  065f6478cf9a6fdc999f666517cfb8b4  config/bootstrap-ubsan.mk
! 2ef96b7f5ed3e6a5fd105f2cb18b1887  config/cet.m4
  04bdbef77f5fd2e282f7dee0bde60444  config/codeset.m4
  b5a5c394536a15e50be1998bd341fd02  config/depstand.m4
  321e8bd6894bd9a668af361e89e92e9b  config/dfp.m4
*************** b5a5c394536a15e50be1998bd341fd02  config
*** 88,96 ****
  15b8d5adf53ad5ec75f055b193a6b1c2  config/extensions.m4
  2f2de833dd86bba89d64e5813be81550  config/futex.m4
  d3eafe382a46e6747e3644cf4a55d5cc  config/gc++filt.m4
! 9495055af79ee43819009a4faf0df96b  config/gcc-plugin.m4
  1282ef4331970c26224afd363968e276  config/gettext-sister.m4
! 1a627bc39dc12ae705bd4136731da428  config/gettext.m4
  29c9c3d57667bc9e6f14d625b2cd5894  config/glibc21.m4
  e271ffe7b43dfbd759f0195c2c1624dd  config/gthr.m4
  c385066b0fe61ef55d44cf2619e79b26  config/gxx-include-dir.m4
--- 87,95 ----
  15b8d5adf53ad5ec75f055b193a6b1c2  config/extensions.m4
  2f2de833dd86bba89d64e5813be81550  config/futex.m4
  d3eafe382a46e6747e3644cf4a55d5cc  config/gc++filt.m4
! 68942d1252e9006387da49e35242dbce  config/gcc-plugin.m4
  1282ef4331970c26224afd363968e276  config/gettext-sister.m4
! b90ad089e8e05e8e4a3f865bca41504f  config/gettext.m4
  29c9c3d57667bc9e6f14d625b2cd5894  config/glibc21.m4
  e271ffe7b43dfbd759f0195c2c1624dd  config/gthr.m4
  c385066b0fe61ef55d44cf2619e79b26  config/gxx-include-dir.m4
*************** c950e3234da1eb9ad5f29bc1c2d2ae74  config
*** 135,141 ****
  120ec56e3aa27739a2945bc1c8a2530a  config/nls.m4
  8f2bd36861dd8e2742bcd719a977271b  config/no-executables.m4
  5135144630c100a01c62fa64629aafb4  config/override.m4
! d31260ea4a04e5fe935a240278d5d02b  config/picflag.m4
  f82299b33f28607e9d15e486a58add90  config/pkg.m4
  a155332d4af74bcf3f4c52b4dbadca34  config/plugins.m4
  5413d2cdbde706860854a69f6fc12f81  config/po.m4
--- 134,140 ----
  120ec56e3aa27739a2945bc1c8a2530a  config/nls.m4
  8f2bd36861dd8e2742bcd719a977271b  config/no-executables.m4
  5135144630c100a01c62fa64629aafb4  config/override.m4
! 9a51a7a177dce9ef0c5574cbe35de7ef  config/picflag.m4
  f82299b33f28607e9d15e486a58add90  config/pkg.m4
  a155332d4af74bcf3f4c52b4dbadca34  config/plugins.m4
  5413d2cdbde706860854a69f6fc12f81  config/po.m4
*************** e2dc6b4fd62b77bff96b7951ef74f78f  config
*** 154,172 ****
  5cabffc02a90bd9698105b9eef507f11  config/warnings.m4
  7ef51b0adb98e5c5f7aba46d2c7293f1  config/weakref.m4
  0163b672c888aaf1c8ad3e867a0ec9f1  config/zlib.m4
! cb1e93e58dff05f85e66aa5c2e04475f  configure
! 587878b0d48aa2561ab3250371bee056  configure.ac
! a15cac46215dff88bd5478b79e7704db  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
! 8498c0cdfe3f444ad6f540ec9e11cbec  contrib/analyze_brprob.py
! 70c4cbdda692e5a2727a91c4c9b64046  contrib/analyze_brprob_spec.py
  1a424ea171db6416938f23bb6ca28584  contrib/bench-stringop
! 6afd57579bc6654d4242324c3c79644c  contrib/check-internal-format-escaping.py
! dd3816d0e1f0c3e10b634d2c65278a9d  contrib/check-params-in-docs.py
  5e2ff01f3f3129b3e9ca90a9d0043b05  contrib/check_GNU_style.py
  998cf407b76e1f4efe6919a56b59cd9f  contrib/check_GNU_style.sh
! 2a46557203b808477a2fcf4698085cf8  contrib/check_GNU_style_lib.py
  c3763df74b9b0ad3498815e6a77dc5b4  contrib/check_makefile_deps.sh
  debdf0b8904f5982062eef19a66b07dd  contrib/check_warning_flags.sh
  c7edaf703e193f7c29fbfbf2539498c8  contrib/clang-format
--- 153,172 ----
  5cabffc02a90bd9698105b9eef507f11  config/warnings.m4
  7ef51b0adb98e5c5f7aba46d2c7293f1  config/weakref.m4
  0163b672c888aaf1c8ad3e867a0ec9f1  config/zlib.m4
! 856983826b8a23e737488c8702dc8df9  configure
! fe4f5e87d4d87c4612040acc70334eb4  configure.ac
! 1ddef3be6b96efc960d40ba7ac2c74ab  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
! 2f6b9814f09a97f9774b07d75d13e405  contrib/analyze_brprob.py
! de542eacc9b5d2a6d6233ee80642c312  contrib/analyze_brprob_spec.py
  1a424ea171db6416938f23bb6ca28584  contrib/bench-stringop
! 918f9207f7387efef9ef8d701238cea8  contrib/check-MAINTAINERS.py
! 14d637c1673ab29eb925fc542cf5955c  contrib/check-internal-format-escaping.py
! 26003ed3d25c6ca8f36b62de907b3387  contrib/check-params-in-docs.py
  5e2ff01f3f3129b3e9ca90a9d0043b05  contrib/check_GNU_style.py
  998cf407b76e1f4efe6919a56b59cd9f  contrib/check_GNU_style.sh
! f9727f6d3a2f7a87aee97eefba4d1125  contrib/check_GNU_style_lib.py
  c3763df74b9b0ad3498815e6a77dc5b4  contrib/check_makefile_deps.sh
  debdf0b8904f5982062eef19a66b07dd  contrib/check_warning_flags.sh
  c7edaf703e193f7c29fbfbf2539498c8  contrib/clang-format
*************** ba098127814007beeedbdecb8686685f  contri
*** 176,216 ****
  bc8bc1290a409ac41a763005f95b5758  contrib/compareSumTests3
  54f31390bacd889f234ca6a9b189a9fd  contrib/compare_tests
  e2e52abbbb307e16e160946e13bbe530  contrib/compare_two_ftime_report_sets
! d755e264c1bc130786d66c6aaf42ff91  contrib/config-list.mk
  6134d179ba058a381f67bbc5daa02010  contrib/dg-cmp-results.sh
  afd0452908aeb3a24045e5201bcf9d34  contrib/dg-extract-results.py
  514fb178de0ad540660b4552d55a6f84  contrib/dg-extract-results.sh
  87ae17b353cdce921324af084ec6dcb1  contrib/dglib.pm
! ed17c670372f8e9ec155bdb09c36c7fd  contrib/download_prerequisites
! a22ccd173c2d00c00e7ad01e97342bcc  contrib/filter-clang-warnings.py
  080dea8d6b4a4c8c6bf8ae7b8ecf15a6  contrib/filter_gcc_for_doxygen
  db03e57377f9eb202b7b783eb81fe40d  contrib/filter_knr2ansi.pl
  b038940be99369232106ef9e9b15bee3  contrib/filter_params.py
  65b703f51d9d7a7a56a649493e3c01b9  contrib/gcc-changelog/git_check_commit.py
! 2d072240bf6de5330608921ceb48bf43  contrib/gcc-changelog/git_commit.py
  722c96f24ea159413d6e28c6b91a7a23  contrib/gcc-changelog/git_email.py
  a9d06dee58845e59874c5f7fc58e2824  contrib/gcc-changelog/git_repository.py
! b83d69417c5c5d4f873dd999bef094e1  contrib/gcc-changelog/git_update_version.py
  1fcc4f18e9f9043eaea6c3c990d96d9b  contrib/gcc-changelog/setup.cfg
  7226a8eee0694eb4b73201404f06a8c2  contrib/gcc-changelog/test_email.py
  0dce8095b39e54d03c1207f021756933  contrib/gcc-changelog/test_patches.txt
! afffb72bfd599fda78278a8c0dccfc16  contrib/gcc-git-customization.sh
  dfceb883caf21f3071f7309ee0ac8a6b  contrib/gcc.doxy
  55236e85d8087042189b701cd05d84be  contrib/gcc_build
! 11e43a96424d1e407bded6b3324c345c  contrib/gcc_update
! 61ad7a180a7895f83d32ef7b15cb8386  contrib/gen_autofdo_event.py
! 9cadf9c7940df721a2ba59b5adb1180e  contrib/gennews
  25491ab6a5a68d252f311f5a9c6f4c8f  contrib/git-add-user-branch.sh
  7e5729822d673e846d5ef26e1f1b8591  contrib/git-add-vendor-branch.sh
  db81d221a5a18e48788ee8984d453248  contrib/git-backport.py
  e9bac7c82bdb5f92b354d9da854d463b  contrib/git-commit-mklog.py
! 6400831de9622ded00d0c379a99db5a4  contrib/git-descr.sh
  6277756eb398a594323d2d2b52962046  contrib/git-fetch-vendor.sh
  e462c83bdf45bf6e9b434d18fa9f66e4  contrib/git-fix-changelog.py
! 6996a054c7e7aaf9f27737c3d6f2518c  contrib/git-undescr.sh
  59304fc08afa489baa6b920cc76dc625  contrib/gthr_supp_vxw_5x.c
! fde7eaaf5d043e049d3eef60ad615b0c  contrib/header-tools/ChangeLog
! 4f7d3bf5dd67c6b144a7a1ea0bb4127b  contrib/header-tools/README
  05ef7fb87e90ba93ee04659be072a357  contrib/header-tools/count-headers
  ba0485a3c721bce9e32407ef996d2a9d  contrib/header-tools/gcc-order-headers
  220c792fabd90ddca7181ec2b630861f  contrib/header-tools/graph-header-logs
--- 176,216 ----
  bc8bc1290a409ac41a763005f95b5758  contrib/compareSumTests3
  54f31390bacd889f234ca6a9b189a9fd  contrib/compare_tests
  e2e52abbbb307e16e160946e13bbe530  contrib/compare_two_ftime_report_sets
! 26c9969e7953cfaeffe226c2bb10ceb7  contrib/config-list.mk
  6134d179ba058a381f67bbc5daa02010  contrib/dg-cmp-results.sh
  afd0452908aeb3a24045e5201bcf9d34  contrib/dg-extract-results.py
  514fb178de0ad540660b4552d55a6f84  contrib/dg-extract-results.sh
  87ae17b353cdce921324af084ec6dcb1  contrib/dglib.pm
! 8061ea24752141d2a31708c07b081137  contrib/download_prerequisites
! ccbbbebce9bd139c9acff51467e5b0a2  contrib/filter-clang-warnings.py
  080dea8d6b4a4c8c6bf8ae7b8ecf15a6  contrib/filter_gcc_for_doxygen
  db03e57377f9eb202b7b783eb81fe40d  contrib/filter_knr2ansi.pl
  b038940be99369232106ef9e9b15bee3  contrib/filter_params.py
  65b703f51d9d7a7a56a649493e3c01b9  contrib/gcc-changelog/git_check_commit.py
! 5fe848ed59caa7945ac304bfb5d42981  contrib/gcc-changelog/git_commit.py
  722c96f24ea159413d6e28c6b91a7a23  contrib/gcc-changelog/git_email.py
  a9d06dee58845e59874c5f7fc58e2824  contrib/gcc-changelog/git_repository.py
! 4711164526138300c980ca1920320734  contrib/gcc-changelog/git_update_version.py
  1fcc4f18e9f9043eaea6c3c990d96d9b  contrib/gcc-changelog/setup.cfg
  7226a8eee0694eb4b73201404f06a8c2  contrib/gcc-changelog/test_email.py
  0dce8095b39e54d03c1207f021756933  contrib/gcc-changelog/test_patches.txt
! 2e6ec5b0179e47a683e1c4214f9fb3af  contrib/gcc-git-customization.sh
  dfceb883caf21f3071f7309ee0ac8a6b  contrib/gcc.doxy
  55236e85d8087042189b701cd05d84be  contrib/gcc_build
! 239616fd6d956dbe4ab4c510206764d3  contrib/gcc_update
! e82fa4b922b98afc2902629524d688b7  contrib/gen_autofdo_event.py
! 5a9bcce756aa38ac8302195bcb280e37  contrib/gennews
  25491ab6a5a68d252f311f5a9c6f4c8f  contrib/git-add-user-branch.sh
  7e5729822d673e846d5ef26e1f1b8591  contrib/git-add-vendor-branch.sh
  db81d221a5a18e48788ee8984d453248  contrib/git-backport.py
  e9bac7c82bdb5f92b354d9da854d463b  contrib/git-commit-mklog.py
! 5e9e19a370ec59178541956d41005636  contrib/git-descr.sh
  6277756eb398a594323d2d2b52962046  contrib/git-fetch-vendor.sh
  e462c83bdf45bf6e9b434d18fa9f66e4  contrib/git-fix-changelog.py
! 5d80e88da5ae83c53513280bcff7c0a1  contrib/git-undescr.sh
  59304fc08afa489baa6b920cc76dc625  contrib/gthr_supp_vxw_5x.c
! 8df231edb5fd99693e4a640ea6998a8a  contrib/header-tools/ChangeLog
! e3aa4ad384beb34e8a96561bee91c3b6  contrib/header-tools/README
  05ef7fb87e90ba93ee04659be072a357  contrib/header-tools/count-headers
  ba0485a3c721bce9e32407ef996d2a9d  contrib/header-tools/gcc-order-headers
  220c792fabd90ddca7181ec2b630861f  contrib/header-tools/graph-header-logs
*************** fa945bac89ee68b410027dcfe1312f4b  contri
*** 224,241 ****
  a7318fa2f0580c3a0d5dd4b14e4d0e0d  contrib/jit-coverage-report.py
  60407a5923bc8a58a2d9b937c3f2cea8  contrib/legacy/mklog
  fc4965b52fd7de27941bf5183aa1ece9  contrib/legacy/mklog.pl
- 8dca730e1215abbc5fb6330e5cf8432a  contrib/maintainers-verify.sh
  43e3d77ae19b5c6304d6d6846792c173  contrib/make-obstacks-texi.pl
  652b57f03f525e02ceac3dee8f672204  contrib/make_sunver.pl
  bd49fb9eed9f0a5344158e834dd6f468  contrib/mark_spam.py
! 81f9fb8a95f10dbb07425dfd3fd50782  contrib/mklog.py
! 0fb5c8c3cd465d8bd57b55b2548c683a  contrib/paranoia.cc
  a34668cfad9dec733354503fbc67fb24  contrib/patch_tester.sh
  74f52724a4c200534bfccf086dc8783d  contrib/prepare-commit-msg
  87a19b40fbd220938cf6c23c42c255e2  contrib/prepare_patch.sh
! 6bc8415291f74dbbb7994622ca9a7b28  contrib/prerequisites.md5
! 2a7fbcbf9b708ecbd31408646f9dd122  contrib/prerequisites.sha512
! 2ec57861b5624197c06ffe94ea485ca2  contrib/reghunt/ChangeLog
  cf247a580e49d212518de409793db0a8  contrib/reghunt/bin/gcc-build-full
  724e70ea3e80f87f2a201bbe2f1eef37  contrib/reghunt/bin/gcc-build-simple
  3f2318bae7562a4ad1639e686916a545  contrib/reghunt/bin/gcc-cleanup
--- 224,240 ----
  a7318fa2f0580c3a0d5dd4b14e4d0e0d  contrib/jit-coverage-report.py
  60407a5923bc8a58a2d9b937c3f2cea8  contrib/legacy/mklog
  fc4965b52fd7de27941bf5183aa1ece9  contrib/legacy/mklog.pl
  43e3d77ae19b5c6304d6d6846792c173  contrib/make-obstacks-texi.pl
  652b57f03f525e02ceac3dee8f672204  contrib/make_sunver.pl
  bd49fb9eed9f0a5344158e834dd6f468  contrib/mark_spam.py
! 6a08f88f916d9f0883eff8d4a2212a2d  contrib/mklog.py
! 9bb8c12fc069b7624268da15bd911667  contrib/paranoia.cc
  a34668cfad9dec733354503fbc67fb24  contrib/patch_tester.sh
  74f52724a4c200534bfccf086dc8783d  contrib/prepare-commit-msg
  87a19b40fbd220938cf6c23c42c255e2  contrib/prepare_patch.sh
! bad2b96e4296c0938aab1c646e9ccf33  contrib/prerequisites.md5
! 4a395ab2dd4d15d66cb0183ec7e7bbd0  contrib/prerequisites.sha512
! 1e00e28c98a6c4df8dcf834d13e9b7f1  contrib/reghunt/ChangeLog
  cf247a580e49d212518de409793db0a8  contrib/reghunt/bin/gcc-build-full
  724e70ea3e80f87f2a201bbe2f1eef37  contrib/reghunt/bin/gcc-build-simple
  3f2318bae7562a4ad1639e686916a545  contrib/reghunt/bin/gcc-cleanup
*************** f251d49dd87647250fcd74dd50b7835f  contri
*** 294,300 ****
  e2829fc4af4f433a6a328a62d5ce8066  contrib/reghunt/examples/reg-watch
  afd863c2ec84c906e20f9b9787b1f0fe  contrib/reghunt/examples/reg-watch.awk
  8955535523d4b5f48006bcb851ba9b4b  contrib/reghunt/examples/testall
! 00346ff11b28235c16270018e1093185  contrib/regression/ChangeLog
  30553bfced1b2b46bf7ca01ef6ba69d1  contrib/regression/GCC_Regression_Tester.wdgt/Default.png
  ad38ddd771df222eb9d413e3c7f6a751  contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
  777bd286c147cc02861811f66b9a4440  contrib/regression/GCC_Regression_Tester.wdgt/Info.plist
--- 293,299 ----
  e2829fc4af4f433a6a328a62d5ce8066  contrib/reghunt/examples/reg-watch
  afd863c2ec84c906e20f9b9787b1f0fe  contrib/reghunt/examples/reg-watch.awk
  8955535523d4b5f48006bcb851ba9b4b  contrib/reghunt/examples/testall
! ffafd6aa2d53917519fe1879e1f40924  contrib/regression/ChangeLog
  30553bfced1b2b46bf7ca01ef6ba69d1  contrib/regression/GCC_Regression_Tester.wdgt/Default.png
  ad38ddd771df222eb9d413e3c7f6a751  contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
  777bd286c147cc02861811f66b9a4440  contrib/regression/GCC_Regression_Tester.wdgt/Info.plist
*************** fb1ff65a78c592489a09d18e42238a68  contri
*** 309,318 ****
  dc562ddb86567c65e82953825713dc4b  contrib/regression/site.exp
  7f6418948396f8250447e3e6182322d8  contrib/repro_fail
  39442479834f1c02d6ce11eab6889b6e  contrib/test_installed
! 9cc97e47ccced46f47870847040e0d41  contrib/test_mklog.py
  2c2a06a23394c548bb4afba3c25aacce  contrib/test_recheck
  c650e776de65a2de80bbfb0033641805  contrib/test_summary
! 45bd745cf293127fa6b729c7b58cf11f  contrib/testsuite-management/validate_failures.py
  0202e4875fa43ec09cf5e8442c873a56  contrib/testsuite-management/x86_64-unknown-linux-gnu.xfail
  923892d7a9f7a205c33b7a17819ff704  contrib/texi2pod.pl
  12cde958811f4482e4560d5cb45f851a  contrib/unicode/EastAsianWidth.txt
--- 308,317 ----
  dc562ddb86567c65e82953825713dc4b  contrib/regression/site.exp
  7f6418948396f8250447e3e6182322d8  contrib/repro_fail
  39442479834f1c02d6ce11eab6889b6e  contrib/test_installed
! 30bb3f8ef82812a67d3ba7ba17ba5cb2  contrib/test_mklog.py
  2c2a06a23394c548bb4afba3c25aacce  contrib/test_recheck
  c650e776de65a2de80bbfb0033641805  contrib/test_summary
! c0d468fe3119514362a769498eed5f64  contrib/testsuite-management/validate_failures.py
  0202e4875fa43ec09cf5e8442c873a56  contrib/testsuite-management/x86_64-unknown-linux-gnu.xfail
  923892d7a9f7a205c33b7a17819ff704  contrib/texi2pod.pl
  12cde958811f4482e4560d5cb45f851a  contrib/unicode/EastAsianWidth.txt
*************** c650e776de65a2de80bbfb0033641805  contri
*** 323,340 ****
  191680bc9f44847c072c9b46239b1a33  contrib/unicode/from_glibc/utf8_gen.py
  53bce7c8a18d257ac361919611f46022  contrib/unicode/gen_wcwidth.py
  8b5fa928c1da8636733a0a76a2da5bc8  contrib/unicode/unicode-license.txt
  13955dc4ee3f74718a3869155e474db6  contrib/uninclude
  9001fc047ca1feb126416897c520d55f  contrib/unused_functions.py
! 42920035361488d6810b0603082b37a1  contrib/update-copyright.py
  e96e470317bafce43e11f5d3dc027f1c  contrib/vim-gcc-dev/README
  a0d12be401961a2557883b7c09dc71eb  contrib/vim-gcc-dev/ftdetect/gcc-dev.vim
  0d02cd23d72dff87da126925264d8356  contrib/vim-gcc-dev/syntax/gcc-match.vim
  62c751cbf874deb96b0e6ce4f1c65f0a  contrib/vim-gcc-dev/syntax/gcc-rtl.vim
  77a1724cb607ac6e76b6cf20aea0c1ca  contrib/vim-gcc-dev/syntax/gimple.vim
! 57440d4c6da7b6438ebfa203135f381a  contrib/vimrc
  da7aeedeb5a86ee6f5982e559a2d6dcc  contrib/warn_summary
  8b59f0d0a2dcdced14765c514fbad719  depcomp
! 61562441855348f5513747ba4de446c1  fixincludes/ChangeLog
  6de190723745dc3f75080144dfa2215e  fixincludes/Makefile.in
  b6e3f4950abc6e254b467063381f6473  fixincludes/README
  455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
--- 322,340 ----
  191680bc9f44847c072c9b46239b1a33  contrib/unicode/from_glibc/utf8_gen.py
  53bce7c8a18d257ac361919611f46022  contrib/unicode/gen_wcwidth.py
  8b5fa928c1da8636733a0a76a2da5bc8  contrib/unicode/unicode-license.txt
+ 93fd39f4c6ff7bf4e5f9e035b65e6e1a  contrib/unicode/utf8-dump.py
  13955dc4ee3f74718a3869155e474db6  contrib/uninclude
  9001fc047ca1feb126416897c520d55f  contrib/unused_functions.py
! 2151a4c24584cc2d486bad9f33edb0bd  contrib/update-copyright.py
  e96e470317bafce43e11f5d3dc027f1c  contrib/vim-gcc-dev/README
  a0d12be401961a2557883b7c09dc71eb  contrib/vim-gcc-dev/ftdetect/gcc-dev.vim
  0d02cd23d72dff87da126925264d8356  contrib/vim-gcc-dev/syntax/gcc-match.vim
  62c751cbf874deb96b0e6ce4f1c65f0a  contrib/vim-gcc-dev/syntax/gcc-rtl.vim
  77a1724cb607ac6e76b6cf20aea0c1ca  contrib/vim-gcc-dev/syntax/gimple.vim
! 0c8236340920a3dd16200808b0bcb38d  contrib/vimrc
  da7aeedeb5a86ee6f5982e559a2d6dcc  contrib/warn_summary
  8b59f0d0a2dcdced14765c514fbad719  depcomp
! 7d28b16b689757166549c61336277c3c  fixincludes/ChangeLog
  6de190723745dc3f75080144dfa2215e  fixincludes/Makefile.in
  b6e3f4950abc6e254b467063381f6473  fixincludes/README
  455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
*************** b6e3f4950abc6e254b467063381f6473  fixinc
*** 343,359 ****
  4f0cff44689cac00e5599c785c1be9f4  fixincludes/config.h.in
  f63405125ac9ed944ecf9c9bd1f24dff  fixincludes/configure
  a319a505bde6920ddb4832cf41af3488  fixincludes/configure.ac
! 65a41a71dba4815011eaccf4390aaccd  fixincludes/fixfixes.c
! a316c9d3351e61998fa688dceaf610a3  fixincludes/fixinc.in
! 1582ffd94ecc91318eebfb3b81e0bcb1  fixincludes/fixincl.c
  adf245e3714f799eafba40af16be8eb5  fixincludes/fixincl.tpl
! 0c5a153c3a80883a20851c74a2cdd369  fixincludes/fixincl.x
  545875b4fe1c26bc3e1befc75b34e9f5  fixincludes/fixlib.c
  620c770139fc32c75b975b614d3156e8  fixincludes/fixlib.h
  5b2c1fd3ef9d44fb6beb1a0d45ddd533  fixincludes/fixopts.c
  ed1415e9dbc8f421fd9288bde0d90ad1  fixincludes/fixtests.c
  51e915676df084b64297d3c4fb0d9c18  fixincludes/genfixes
! 2c44f764c039021368e0856e419d1a7c  fixincludes/inclhack.def
  dd5ae70d9f725bcaf2a15212782db49a  fixincludes/mkfixinc.sh
  516608ac1550577d47f48809bb512629  fixincludes/mkheaders.in
  3aa0563cd682ee61ecd9eb6eea0b0bce  fixincludes/procopen.c
--- 343,359 ----
  4f0cff44689cac00e5599c785c1be9f4  fixincludes/config.h.in
  f63405125ac9ed944ecf9c9bd1f24dff  fixincludes/configure
  a319a505bde6920ddb4832cf41af3488  fixincludes/configure.ac
! 2002770d703d59245d89f941a21f783d  fixincludes/fixfixes.c
! 77fbad4fc8ec7be3578d045d003446ec  fixincludes/fixinc.in
! 8ca216a7024876b7eb9b8abc30a30775  fixincludes/fixincl.c
  adf245e3714f799eafba40af16be8eb5  fixincludes/fixincl.tpl
! dcbeb83e4eff3897508700553f3db3d9  fixincludes/fixincl.x
  545875b4fe1c26bc3e1befc75b34e9f5  fixincludes/fixlib.c
  620c770139fc32c75b975b614d3156e8  fixincludes/fixlib.h
  5b2c1fd3ef9d44fb6beb1a0d45ddd533  fixincludes/fixopts.c
  ed1415e9dbc8f421fd9288bde0d90ad1  fixincludes/fixtests.c
  51e915676df084b64297d3c4fb0d9c18  fixincludes/genfixes
! ecaa9d9c26a381ba58e6e3ff4c141a88  fixincludes/inclhack.def
  dd5ae70d9f725bcaf2a15212782db49a  fixincludes/mkfixinc.sh
  516608ac1550577d47f48809bb512629  fixincludes/mkheaders.in
  3aa0563cd682ee61ecd9eb6eea0b0bce  fixincludes/procopen.c
*************** f1160d24e4253643c441ba3a4b227e43  fixinc
*** 384,396 ****
  7664d896c62ce0ef7874adff4ba21c96  fixincludes/tests/base/curses.h
  339892e95a87af44aed61c0cd1f7beb9  fixincludes/tests/base/dispatch/object.h
  1c654a39cf9704389beaac48967e4217  fixincludes/tests/base/errno.h
! 099987dd3e705438dc51edcc5a202f45  fixincludes/tests/base/fcntl.h
  31a666eaf86d15fa19e6d1834f15ec38  fixincludes/tests/base/features.h
  3a4a1069077318929fc82027df39ca82  fixincludes/tests/base/fixinc-test-limits.h
  7e364ced80dd56f237390965aa7f15d0  fixincludes/tests/base/hsfs/hsfs_spec.h
  53be8accb111b5d7b7323bbfc52ed91f  fixincludes/tests/base/i386/setjmp.h
  bfb58e3983fc133c965e434e57aed732  fixincludes/tests/base/ia64/sys/getppdp.h
! e29844fa173902ac65e6b40860b40fe5  fixincludes/tests/base/inttypes.h
  833e9408a49784184bee7981d665c911  fixincludes/tests/base/io-quotes-def-1.h
  a1c808325bd0d74c2f465bf54db680e2  fixincludes/tests/base/ioLib.h
  c8dd71b57c3a35b0c6760f7d38af6f42  fixincludes/tests/base/iso/math_c99.h
--- 384,396 ----
  7664d896c62ce0ef7874adff4ba21c96  fixincludes/tests/base/curses.h
  339892e95a87af44aed61c0cd1f7beb9  fixincludes/tests/base/dispatch/object.h
  1c654a39cf9704389beaac48967e4217  fixincludes/tests/base/errno.h
! 9a38915e18f515038482d0d6b906892b  fixincludes/tests/base/fcntl.h
  31a666eaf86d15fa19e6d1834f15ec38  fixincludes/tests/base/features.h
  3a4a1069077318929fc82027df39ca82  fixincludes/tests/base/fixinc-test-limits.h
  7e364ced80dd56f237390965aa7f15d0  fixincludes/tests/base/hsfs/hsfs_spec.h
  53be8accb111b5d7b7323bbfc52ed91f  fixincludes/tests/base/i386/setjmp.h
  bfb58e3983fc133c965e434e57aed732  fixincludes/tests/base/ia64/sys/getppdp.h
! bc9eae9fcd842f9d5f7d3f62385dcdb8  fixincludes/tests/base/inttypes.h
  833e9408a49784184bee7981d665c911  fixincludes/tests/base/io-quotes-def-1.h
  a1c808325bd0d74c2f465bf54db680e2  fixincludes/tests/base/ioLib.h
  c8dd71b57c3a35b0c6760f7d38af6f42  fixincludes/tests/base/iso/math_c99.h
*************** e1bd28539aceeab13a3028da02f8c4ae  fixinc
*** 403,409 ****
  8ac97a3367b9a99503c5b21430993cd4  fixincludes/tests/base/mach-o/dyld.h
  dbbbc9ead412bbd125f56bc509994066  fixincludes/tests/base/mach-o/swap.h
  c48dea510c587eea0b229def965ef77a  fixincludes/tests/base/malloc.h
! 72c7a983f178e7690e3642c6e8408d67  fixincludes/tests/base/math.h
  d2cbc665e9046f8acb42c1271592be47  fixincludes/tests/base/net/if.h
  98099ff70c675f84c19b58da050f3712  fixincludes/tests/base/net/if_arp.h
  a911f5fbb127353024e77149fcf90596  fixincludes/tests/base/netdnet/dnetdb.h
--- 403,409 ----
  8ac97a3367b9a99503c5b21430993cd4  fixincludes/tests/base/mach-o/dyld.h
  dbbbc9ead412bbd125f56bc509994066  fixincludes/tests/base/mach-o/swap.h
  c48dea510c587eea0b229def965ef77a  fixincludes/tests/base/malloc.h
! d312017cecca26f45fb733bb2dbdf8db  fixincludes/tests/base/math.h
  d2cbc665e9046f8acb42c1271592be47  fixincludes/tests/base/net/if.h
  98099ff70c675f84c19b58da050f3712  fixincludes/tests/base/net/if_arp.h
  a911f5fbb127353024e77149fcf90596  fixincludes/tests/base/netdnet/dnetdb.h
*************** d669f7372e28cb610f59526574b4c70a  fixinc
*** 462,486 ****
  4ef7922e2fa168e9e4f0dd00e3b67d09  fixincludes/tests/base/sys/signal.h
  3e9e56d2c35deaad3b2afe0fd41e3749  fixincludes/tests/base/sys/socket.h
  58c647b7471bba144d18903e6c2d770a  fixincludes/tests/base/sys/spinlock.h
! c1ad7ee1d4fc49d2066b3a98530f0b53  fixincludes/tests/base/sys/stat.h
  bfb0bb27aa39f2c36040bfbe5d32dc17  fixincludes/tests/base/sys/sysmacros.h
  a8fb105bfe4990072ee55164a8ab1b5e  fixincludes/tests/base/sys/time.h
  f5a3e0b3c38ab605f0a83d661c1bbc65  fixincludes/tests/base/sys/types.h
  c340da8e13edf5d70941b01670df6228  fixincludes/tests/base/sys/ucontext.h
  52cc64fed944e6760d36f79ae62e014d  fixincludes/tests/base/sys/wait.h
! f558a755efaec3b313d782bba2af6c84  fixincludes/tests/base/testing.h
  a5e817d35ded04a0fb03999b50c0e89e  fixincludes/tests/base/tgmath.h
! 4c5eeb62a358a4c9140db2c1e93a8bd6  fixincludes/tests/base/time.h
  7dc68f10756f3c5df014326605fe9efe  fixincludes/tests/base/tinfo.h
  955462b555900ecd3934223c64e21fa7  fixincludes/tests/base/types/vxTypesBase.h
  8baab8698bb83c6b90ef4091c00ddc1e  fixincludes/tests/base/unistd.h
! cdc9afb0404ea932194e623e80f3443f  gcc/ABOUT-GCC-NLS
! edbdfaa5c5054804fc72b34949d1cf6e  gcc/BASE-VER
  59530bdf33659b29e73d4adb9f9f6552  gcc/COPYING
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! fc634b2d32d48b149245c5eb70684c15  gcc/ChangeLog
  a3b63c675afa7a655cc2bfa8a907af79  gcc/ChangeLog-1997
  d9a88529352a010253c2e8fb1ed6023b  gcc/ChangeLog-1998
  240f08f81cb4699e8b49347db38233db  gcc/ChangeLog-1999
--- 462,487 ----
  4ef7922e2fa168e9e4f0dd00e3b67d09  fixincludes/tests/base/sys/signal.h
  3e9e56d2c35deaad3b2afe0fd41e3749  fixincludes/tests/base/sys/socket.h
  58c647b7471bba144d18903e6c2d770a  fixincludes/tests/base/sys/spinlock.h
! ee758dcb1daebe6c337d05a7b8bab11e  fixincludes/tests/base/sys/stat.h
  bfb0bb27aa39f2c36040bfbe5d32dc17  fixincludes/tests/base/sys/sysmacros.h
  a8fb105bfe4990072ee55164a8ab1b5e  fixincludes/tests/base/sys/time.h
  f5a3e0b3c38ab605f0a83d661c1bbc65  fixincludes/tests/base/sys/types.h
  c340da8e13edf5d70941b01670df6228  fixincludes/tests/base/sys/ucontext.h
  52cc64fed944e6760d36f79ae62e014d  fixincludes/tests/base/sys/wait.h
! ba5bf0e3b419ae404e07f145f9a15c6e  fixincludes/tests/base/testing.h
  a5e817d35ded04a0fb03999b50c0e89e  fixincludes/tests/base/tgmath.h
! a22e70b3f29292d0e628450f4bb11e62  fixincludes/tests/base/time.h
  7dc68f10756f3c5df014326605fe9efe  fixincludes/tests/base/tinfo.h
  955462b555900ecd3934223c64e21fa7  fixincludes/tests/base/types/vxTypesBase.h
  8baab8698bb83c6b90ef4091c00ddc1e  fixincludes/tests/base/unistd.h
! 75d75572793b62bdd8ff4d1504e0cb4c  fixincludes/tests/base/yvals.h
! 76f58c169c1a57cb2dd035a5136b56dd  gcc/ABOUT-GCC-NLS
! 855d70e919338d63d25eaca411d96053  gcc/BASE-VER
  59530bdf33659b29e73d4adb9f9f6552  gcc/COPYING
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 146f9c502665bcd5a16fbe5b961bfa89  gcc/ChangeLog
  a3b63c675afa7a655cc2bfa8a907af79  gcc/ChangeLog-1997
  d9a88529352a010253c2e8fb1ed6023b  gcc/ChangeLog-1998
  240f08f81cb4699e8b49347db38233db  gcc/ChangeLog-1999
*************** df9c831b1f0d6bde02941728f8f12da3  gcc/Ch
*** 505,510 ****
--- 506,512 ----
  b9daed1dfb9364dc6bd9e4eef70a1681  gcc/ChangeLog-2018
  e70c675c353dff12c134496566b63c83  gcc/ChangeLog-2019
  a8115a08b5042f830403fa427ce7c243  gcc/ChangeLog-2020
+ 393ff914a89e665be5638fc0ebce548f  gcc/ChangeLog-2021
  99fbd9e13a4133855332bf21b0e8fc4c  gcc/ChangeLog.dataflow
  e36816ca56b2bbc8bfc358e0185fc1d3  gcc/ChangeLog.gimple-classes
  fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/ChangeLog.graphite
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 513,530 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 6a93411f698590de2b94f169c9f6d730  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
! ac51fd18e066886140aa55eab71477be  gcc/LANGUAGES
! 6ae41e7939ed3bb1f77dc4a68defae9b  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
! a3349a2ff19906d526e15f8845deb002  gcc/README.Portability
! 7a09ff48173d234174dd04f94f3d495c  gcc/acinclude.m4
  6526979dd900a0b58b7691b478a91fec  gcc/aclocal.m4
! 08ed911edc9c9c33433cdc5205d2a507  gcc/ada/ChangeLog
  683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
  7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
  cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
--- 515,533 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 4f6cf3bebd281dccfac90ea0231c88cc  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
! 344b503d3678445acf0d656cf7f9fa81  gcc/LANGUAGES
! 4b36a121de8f694a404b19d3a6722e61  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
! 5eff92c318906d6fcb5087b9484ed5e4  gcc/README.Portability
! 40d826b642dccc9eb94a099ef3cefa86  gcc/acinclude.m4
  6526979dd900a0b58b7691b478a91fec  gcc/aclocal.m4
! 16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 561ae49530620ed3b5255c1bf146a6a1  gcc/ada/ChangeLog
  683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
  7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
  cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
*************** cb98e18d4548238540bce953ec52f828  gcc/ad
*** 545,1276 ****
  e1e4800d4922875de1a9dcfaacf7e1fe  gcc/ada/ChangeLog-2018
  e886b111487071a30a52edb616ff7844  gcc/ada/ChangeLog-2019
  25a37c68917fa9927277f5c8fda08d05  gcc/ada/ChangeLog-2020
  5598cfcecd6612ea21efddabbbe1ecc0  gcc/ada/ChangeLog.ptr
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
! a2eeb36cd2de35ce6a808c67a61edb7e  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
! 9ac8a754981b79ea5cbe9cd20b9c7f36  gcc/ada/Makefile.rtl
! 739d1cf14f9f642cbac45cfcd1f8d75f  gcc/ada/ada_get_targ.adb
! b3e84dc1c9a7e552156affe8808cf24e  gcc/ada/adabkend.adb
! 25824eaa1216abca343134c0c41f3aae  gcc/ada/adabkend.ads
! b1ff69aeaeec4fe857f859ff61a80898  gcc/ada/adadecode.c
! 17a8281790ea9a0497546fcef5348529  gcc/ada/adadecode.h
! 20826557771d6342ab9f414523d88b32  gcc/ada/adaint.c
! 74f039c3d41e22a6a47f32d2e95a1e81  gcc/ada/adaint.h
! 83adc06d0be4f0196e82a5041f46b40e  gcc/ada/affinity.c
! 35eac1459f1fd1e41615c982c2214838  gcc/ada/ali-util.adb
! e94c9ad20dfed5c82c5e93679dbf2225  gcc/ada/ali-util.ads
! 6dbe791e85bc32e99618ccd8c1a655b7  gcc/ada/ali.adb
! b66f94b1e164d8d23bf49625df1f2ac3  gcc/ada/ali.ads
! e5078e3fd26a2754e097776921a5fb18  gcc/ada/alloc.ads
! 0348245b329d825e5428b6f8c39fa9e6  gcc/ada/argv-lynxos178-raven-cert.c
! 088597e80ba406bb7fca3179304a3206  gcc/ada/argv.c
! 80d9f2ac1330b5adfff4c27d37daf720  gcc/ada/aspects.adb
! e701d8df22435327922f34bd5031db0e  gcc/ada/aspects.ads
! 93d183b59d78c6fc90198722ebefaa47  gcc/ada/atree.adb
! c9190094748f94a6d49778c4c90ddd3c  gcc/ada/atree.ads
! d3dd37bc0f46ceecf5a0cf200c5d405e  gcc/ada/atree.h
! 62b5d60871672b425c998bccc45d3dfb  gcc/ada/aux-io.c
! fc49eb8af6c9e5352549e7017e7c0a17  gcc/ada/back_end.adb
! c1f90d17f40fbaa20cd1a32401f32678  gcc/ada/back_end.ads
! 2f9901752aa085838c884e14311c7e64  gcc/ada/bcheck.adb
! f86d577c3b7029bd8bef2e0ac60cdb76  gcc/ada/bcheck.ads
! ce3c2d2dc01a5ca0d8683a85a7a11abd  gcc/ada/binde.adb
! a46200adba77ecf52257c43a3323afa7  gcc/ada/binde.ads
! a299a6a965402a166fa37e50c17700bc  gcc/ada/binderr.adb
! acf3ed302eab726b1656e407509b519c  gcc/ada/binderr.ads
! 20bf627d0a693f00d76ec7334f6a9087  gcc/ada/bindgen.adb
! 0653bdc6865d987cf1bbf34a5c55aa79  gcc/ada/bindgen.ads
! fb359417ce598c51f7dc868b8c29beaf  gcc/ada/bindo-augmentors.adb
! 9b29f0742b89221df3d2a120ba8253a1  gcc/ada/bindo-augmentors.ads
! 0b70e9a277d8cf8b52c3c94ea838b642  gcc/ada/bindo-builders.adb
! 39f9ec095ac8dc40f5b4ef98f4424e5c  gcc/ada/bindo-builders.ads
! 40e36e6690b49dbbc32f036f8f6f90c3  gcc/ada/bindo-diagnostics.adb
! 6d50968516287364b4c87d0aa5c2f102  gcc/ada/bindo-diagnostics.ads
! def9e60cf371fd24086543fab767c1d7  gcc/ada/bindo-elaborators.adb
! e1120684fc553154e9913b586a4081d0  gcc/ada/bindo-elaborators.ads
! 87b4e3ede83bcf6debe8a60a6f841fbc  gcc/ada/bindo-graphs.adb
! 587548ce93fceec2c039d308c7175ac9  gcc/ada/bindo-graphs.ads
! 83fcf6ca58d324655f84a7de7157e3d1  gcc/ada/bindo-units.adb
! 06ef630edbdb66a902bf5fbb3490b515  gcc/ada/bindo-units.ads
! 9929e6accf95e4e4d1ff510b031234f0  gcc/ada/bindo-validators.adb
! 380efd6bc84457b6752d553b1c54445d  gcc/ada/bindo-validators.ads
! 766d158a41bc8db24b2658453a0572d4  gcc/ada/bindo-writers.adb
! 30f6e55fb20c2589168e37b68c528245  gcc/ada/bindo-writers.ads
! 7a287e68cc8b614399cb643a25995141  gcc/ada/bindo.adb
! 256c17ea31e755376756c8db0b8372b3  gcc/ada/bindo.ads
! 6ee2735891fbfb63faf14fd6a5e3afa1  gcc/ada/bindusg.adb
! 5389a48211a9807fe14f0bc43a036739  gcc/ada/bindusg.ads
! a1593674c163909bc7aed6d390af115b  gcc/ada/butil.adb
! 0c0f26cfcf5631fd5359997642e79e8f  gcc/ada/butil.ads
! b61f7dc3829085a46a750682b730ebe9  gcc/ada/cal.c
! 8f83a262277c271be34ca704165db90a  gcc/ada/casing.adb
! 99cbb407e30c309d91fca2747bd695bd  gcc/ada/casing.ads
! daca4f443c2130c677d1b2fa28713a44  gcc/ada/ceinfo.adb
! e12e10a68e600cd5b326a7d4fc2d09c2  gcc/ada/checks.adb
! 707b6d246f4efdb6604630ab5b2fc7bb  gcc/ada/checks.ads
! 7badc319b6a78b2731532e3eafb68a7a  gcc/ada/cio.c
! eba1bb826d1697c51b108a55cba56263  gcc/ada/clean.adb
! 4d862cca5276d46b8c70442f01e0166c  gcc/ada/clean.ads
! 9af4b98244f973137c474020231b5c6d  gcc/ada/comperr.adb
! 3c804b0aadfb8b2bf12d85c152a8a3a3  gcc/ada/comperr.ads
  fbd23958a6d5c4207e39317e708436ac  gcc/ada/config-lang.in
! f9ce19592776878e7ae3d540d6f4f7fd  gcc/ada/contracts.adb
! 8cd6dcf6937fe851bebf206d940a49ff  gcc/ada/contracts.ads
! 769bc2b700fcbb7a50d5ca5858853578  gcc/ada/csets.adb
! 39335cc7f9726519afd2b81ff32499eb  gcc/ada/csets.ads
! 879e96d7fc412c12a19e8b2cf3bfe322  gcc/ada/csinfo.adb
! c96f4f17b1fde9e7d5371564507e17a3  gcc/ada/cstand.adb
! 4eb914f8ea473814a50844206d256ec3  gcc/ada/cstand.ads
! 428169c81ff39b3a013f19ee5794efbd  gcc/ada/cstreams.c
! aadd9aa681994589e3b38c984d786aad  gcc/ada/ctrl_c.c
! 7d55d0dabbe75092b7e95c00795a584e  gcc/ada/debug.adb
! 7d38d16559569ce53c5721deccc467f6  gcc/ada/debug.ads
! d51a2d72b2f1575d967eb35d9a3e1ddf  gcc/ada/debug_a.adb
! 47ddb3784f575ec23fa3a134d46e2796  gcc/ada/debug_a.ads
! 80943324aea8ba4501b7450d6ae26ce5  gcc/ada/doc/Makefile
! 0725845d1d42dd6a346a89132bcfb5c7  gcc/ada/doc/gnat_rm.rst
! 2333c6ac6129e29e589b44fba5bdb9ed  gcc/ada/doc/gnat_rm/about_this_guide.rst
  e183e323bf87ac50a5767106862fef97  gcc/ada/doc/gnat_rm/compatibility_and_porting_guide.rst
! a0d75bf85a31c09f0640b6cc4197d31e  gcc/ada/doc/gnat_rm/implementation_advice.rst
! 2dd3f58a8af0504a92557e149f864302  gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
! 5522cd2f8466a8af46f1ae73cbbbe58f  gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst
! 9af4feea32f3b0368bd250ace9a6d2d6  gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst
! 9f7218691a7101ef43159cbefb87d913  gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
  4c8f34f9d69c20b677b885ec36ef9844  gcc/ada/doc/gnat_rm/implementation_of_ada_2012_features.rst
! 5bc57d8ad4c60bddfaa4f93ef5c032b3  gcc/ada/doc/gnat_rm/implementation_of_specific_ada_features.rst
  8ac597e4a14e2e70cf692a87fa810b0a  gcc/ada/doc/gnat_rm/interfacing_to_other_languages.rst
! da2499e7bd9a977ee60d48d2f4d9bba0  gcc/ada/doc/gnat_rm/intrinsic_subprograms.rst
  bb3c8ae8aaf1cbd06bc44135da97d801  gcc/ada/doc/gnat_rm/obsolescent_features.rst
! 4e58ab300c85e8093931722d25020414  gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst
  03676be4f649629e37041b8c849c7825  gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst
! 67c0b4ee893d284988ca2a4fcd3cc3e3  gcc/ada/doc/gnat_rm/standard_and_implementation_defined_restrictions.rst
  0c417860d1b59e9ed53a0bb81cbdf579  gcc/ada/doc/gnat_rm/standard_library_routines.rst
! 7e156458301180588ddf94cfa3cc36f4  gcc/ada/doc/gnat_rm/the_gnat_library.rst
  8b68d207a54ca14c6fe2d33005ece437  gcc/ada/doc/gnat_rm/the_implementation_of_standard_i_o.rst
  ad0b18bc67f8911f5f0d9d2762f19f82  gcc/ada/doc/gnat_ugn.rst
  522a8b1f4fc69117e20c4690b1cde1a3  gcc/ada/doc/gnat_ugn/about_this_guide.rst
! 9b3f5777651a08453203f6f31c0ca543  gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
  2e09bbabc6b508ce5d975d5e9e0eff30  gcc/ada/doc/gnat_ugn/elaboration_order_handling_in_gnat.rst
  c8c5cebc5a8966a6a0b278b30b2f5738  gcc/ada/doc/gnat_ugn/example_of_binder_output.rst
  329d0c3464eb53db9196226f014d72c9  gcc/ada/doc/gnat_ugn/getting_started_with_gnat.rst
! 33db14ccff060e833a0547894e973f4c  gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst
! afc7d6b43384b58647cfc4dce8ae966f  gcc/ada/doc/gnat_ugn/gnat_utility_programs.rst
  996c912f607538e32d01140682b88ff2  gcc/ada/doc/gnat_ugn/inline_assembler.rst
! 14aa18b6183d603e39fda045d07397c4  gcc/ada/doc/gnat_ugn/platform_specific_information.rst
  062c912e168e9f97d4b4ae9c766300b8  gcc/ada/doc/gnat_ugn/rtlibrary-structure.png
! a7fa30ed47b8265834175bca576afd48  gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst
  caf064904358a8a1d6029b136176ff9d  gcc/ada/doc/share/ada_pygments.py
! 072a6de1fa85aa471593edbd11db5cc9  gcc/ada/doc/share/conf.py
  c7da61a05156d50b4888cdfaae4241d0  gcc/ada/doc/share/copyright.tex
! 9f43695687d6ab9372dfe236a9829279  gcc/ada/doc/share/gnu_free_documentation_license.rst
  f1c71b64e1c84e240c7b5aea7331a32a  gcc/ada/doc/share/latex_elements.py
  90adfcde2feb6d6c090c2b18a1578145  gcc/ada/doc/share/sphinx.sty
! a81aac9d0c99f4a30f1b68e450024209  gcc/ada/einfo.adb
! 76685b132b3f7c177efb7825a40e8ca9  gcc/ada/einfo.ads
! 0d67bb00dc12b2639355a196714367a7  gcc/ada/elists.adb
! d0a6169b8017a41d0de6120b7b4c4dec  gcc/ada/elists.ads
! bffb78824ecf53515de2e5a912d4bfcf  gcc/ada/elists.h
! f5bb97445eb36dad1da175454a933ebf  gcc/ada/env.c
! 08b47045e8cec895029fafbcf89063c7  gcc/ada/env.h
! e64a7f5ac069c641a63facd2c08487b7  gcc/ada/err_vars.ads
! f659c7401cf93660d9039e2101881892  gcc/ada/errno.c
! c03b8a6ba269ae258028292e62df64b5  gcc/ada/errout.adb
! 76f10b2439f71c8ff217464dd13ad958  gcc/ada/errout.ads
! a9d6b59bc58aec400d1caf390ab9566c  gcc/ada/erroutc.adb
! 93acedefd60a66ae70a983c2bcbf0a22  gcc/ada/erroutc.ads
! 0ef2641a0d3f9a58da1f56c874ac8906  gcc/ada/errutil.adb
! 7bc82b75885b5e2a637fd95dd80501ec  gcc/ada/errutil.ads
! 356e134167c1b88e0b2bcfe86752efd2  gcc/ada/eval_fat.adb
! 2fa1b28be243e15222d0df6f966fef03  gcc/ada/eval_fat.ads
! d06216ec37cc58cc20970f716c05b280  gcc/ada/exit.c
! e7dac99a71a49294edd2cce0e9e98eee  gcc/ada/exp_aggr.adb
! 43fe2f55aa6c174d249ef5cd350e2a60  gcc/ada/exp_aggr.ads
! 0a7edf59a7f33642af4704eade3e97c3  gcc/ada/exp_atag.adb
! 7c47f5843f77312d2886a7bb632c33df  gcc/ada/exp_atag.ads
! 3b068fcdae75cbbeec4f726be21a07ab  gcc/ada/exp_attr.adb
! 9cc8f6f1395030a3e1ddae2f64ef59c7  gcc/ada/exp_attr.ads
! aec21341801b7f40af17364da40d37d0  gcc/ada/exp_cg.adb
! 4739d2290f71028d3c4bc87ed372186b  gcc/ada/exp_cg.ads
! b548849797058639b98ba1ec5e46823f  gcc/ada/exp_ch10.ads
! d82a02dd9bd23b359985f2580167d007  gcc/ada/exp_ch11.adb
! c2a21fef0ac0ce5e0bc11d3b4b117fa7  gcc/ada/exp_ch11.ads
! 2cd906ae56f478010d54cdc57421f559  gcc/ada/exp_ch12.adb
! 771bdc5328cf0816aec5562bc1391705  gcc/ada/exp_ch12.ads
! e53ee0c6d2ee981bec18700fb64ab397  gcc/ada/exp_ch13.adb
! 45c02a773f6306ee7f17d151e33149b7  gcc/ada/exp_ch13.ads
! a2d962cd2c4d8e5a92692154284b38ff  gcc/ada/exp_ch2.adb
! 9fc10f38bd720c619ada102df74ef01c  gcc/ada/exp_ch2.ads
! b4911c9eaadfa8edbca97226db2cacd8  gcc/ada/exp_ch3.adb
! ed23c980ddc4646e547e4d9d797e30f2  gcc/ada/exp_ch3.ads
! b7c6851b08712a100cead380559a90ee  gcc/ada/exp_ch4.adb
! 050a84d226682ff6b0cf73e569d48769  gcc/ada/exp_ch4.ads
! e23176144fd3113efb017afecfc68a90  gcc/ada/exp_ch5.adb
! 7bba8e3eda393994835a35015e9fa337  gcc/ada/exp_ch5.ads
! 66b526434a346e60579c80c31719f229  gcc/ada/exp_ch6.adb
! b4c23d1aab55fa6be28d20be281e76b9  gcc/ada/exp_ch6.ads
! e01f503be5ea1cccca1e3af41e97504f  gcc/ada/exp_ch7.adb
! 7ed04831559835dfc491855d3d7c50eb  gcc/ada/exp_ch7.ads
! 8839dd025995762da916fad943789acd  gcc/ada/exp_ch8.adb
! 557a822b97445be54a1438a8c6a2329e  gcc/ada/exp_ch8.ads
! d9997dcdbdb80463b026c8b082e21365  gcc/ada/exp_ch9.adb
! b4a328d0ee5369039c79af06c07067ab  gcc/ada/exp_ch9.ads
! 9c5ad6c32bb867e051708e7118030a62  gcc/ada/exp_code.adb
! bb88a85165230e766c036f59b673cdfe  gcc/ada/exp_code.ads
! a92ddb14f39cb239d449f8171f011c82  gcc/ada/exp_dbug.adb
! 2463226e66cd6099f17b0156f3c0ed1a  gcc/ada/exp_dbug.ads
! e3c548c6d9eeb81d0751eddd2e9ad37e  gcc/ada/exp_disp.adb
! cd7432bfb61e050f32f48c83a597f69a  gcc/ada/exp_disp.ads
! f54729f547276d6ecd9cf8f5cb06a013  gcc/ada/exp_dist.adb
! bf9fe6697c21ef7d66892cf224094939  gcc/ada/exp_dist.ads
! 3b24d86753197f9df2edac6dbeb00370  gcc/ada/exp_fixd.adb
! 152e91a6c1e4b2c9e1e5d1732006186a  gcc/ada/exp_fixd.ads
! 8402e651bfecaf3da8b4dbc00f0a399b  gcc/ada/exp_imgv.adb
! 922ce86cdb2df6292a89e37d00db0c5e  gcc/ada/exp_imgv.ads
! b8638c9d4129fe3cfde7cd2cda26b485  gcc/ada/exp_intr.adb
! 79c61ad66ad1d5b7772705454c9d6fd9  gcc/ada/exp_intr.ads
! 4828b0b5a5d4f5339786bc921c697455  gcc/ada/exp_pakd.adb
! 2f1db81322087ecfb1abba57d1492293  gcc/ada/exp_pakd.ads
! 587a6c474b3fc8b974617df5f6ed54f3  gcc/ada/exp_prag.adb
! 9cf681f2279fd3dd308dd37add12966b  gcc/ada/exp_prag.ads
! fbfeecd587557581978a2be2f9a2404a  gcc/ada/exp_put_image.adb
! 1e39422cbe15f71826161da63c93e350  gcc/ada/exp_put_image.ads
! ac1d20b8337753783ac654734b1bed99  gcc/ada/exp_sel.adb
! 6188cea61dc1933073d217bf32f5511c  gcc/ada/exp_sel.ads
! dcfafba600d585a807728d9a08227805  gcc/ada/exp_smem.adb
! de82fa4d304d03a3290cbd695a3cbaf3  gcc/ada/exp_smem.ads
! 134ed9ac82d9d7986818c8e9a1a6b698  gcc/ada/exp_spark.adb
! c55b8d21ec4542bc1ce7d51fae75f839  gcc/ada/exp_spark.ads
! 85df6c4881eced6f1125f8f156d39cc2  gcc/ada/exp_strm.adb
! b47ea94e33ebedf8760c44871114c4d3  gcc/ada/exp_strm.ads
! 92da1f07e022d6c26d72d1460482caa4  gcc/ada/exp_tss.adb
! 00feab14eaeeb45131167149147241e0  gcc/ada/exp_tss.ads
! ab824b996b7a0c8a2c2a22dcdaa00855  gcc/ada/exp_unst.adb
! e9a3a6517b98cd6d8fea1c6e59534e20  gcc/ada/exp_unst.ads
! ab177bbde8a1a18046f2ae71ae50d4e1  gcc/ada/exp_util.adb
! b5e1985e34dcd9ae3d3d555fb3934e25  gcc/ada/exp_util.ads
! e34f0290bca8640889baf3eaf05e04d6  gcc/ada/expander.adb
! 8ce470670744309c62f91df924faf082  gcc/ada/expander.ads
! e209e130f7d05a761924e6eb5f5d3c7f  gcc/ada/expect.c
! aa24a2f45231b3e92d4536ee5e1b5290  gcc/ada/fe.h
! 5521e935c0968ebc6ae024ba55aa12d6  gcc/ada/final.c
! 3d994d600c41b968b7457748be4c7c3f  gcc/ada/fmap.adb
! 214245fd127cfb2555518e85d4d0d757  gcc/ada/fmap.ads
! 7496a91e2bfb7e6a1a7443ae51426f44  gcc/ada/fname-sf.adb
! f51124ba7bc12991c2598279eb2da82e  gcc/ada/fname-sf.ads
! 0b88cdefa8ec362e8c33a44f1d171d58  gcc/ada/fname-uf.adb
! 48afbf29f85c0043d666932f80d65d5e  gcc/ada/fname-uf.ads
! 04400388d328150ce356b115566c80aa  gcc/ada/fname.adb
! 2e5bdc9f675a59249d1c6088bf9b7a56  gcc/ada/fname.ads
! 9644dd6497b3ac0c2895c4cc2950258e  gcc/ada/freeze.adb
! 9eefd6f8b8977ab2b8a8fb8e3637ab12  gcc/ada/freeze.ads
! 009cce51246a860a5f901d2e2e7ac369  gcc/ada/frontend.adb
! b48a3449a29d92c0b5434a73385b1e97  gcc/ada/frontend.ads
! 72ca66c12963f38334507f56ace14098  gcc/ada/gcc-interface/Make-lang.in
! 9acbd2c7d9ca8b0c725b411f336d268d  gcc/ada/gcc-interface/Makefile.in
  35dd49b4643582a2e1e847bc6aea01e1  gcc/ada/gcc-interface/ada-builtin-types.def
  f7677c298cb2f4c70ecf284c7e18cb80  gcc/ada/gcc-interface/ada-builtins.def
  055be3d11fa6ccb53ffe7f8970a005ce  gcc/ada/gcc-interface/ada-tree.def
! a21ffea82ae8a271cdcc3acbf1428099  gcc/ada/gcc-interface/ada-tree.h
! 5d0689f7acb36d977c27b633105517b7  gcc/ada/gcc-interface/ada.h
! 2962facaf5b9ac376e7335599112a520  gcc/ada/gcc-interface/config-lang.in
! 2be995167a94a991025f94bdf029b598  gcc/ada/gcc-interface/cuintp.c
! 56a02aa3744dcb0c162ed9cccd347c5a  gcc/ada/gcc-interface/decl.c
! d92dc0232ed2c36ad8969076cb25a3c8  gcc/ada/gcc-interface/gadaint.h
! 86b8f2bd39b4d74d80e6f6c19aa4e026  gcc/ada/gcc-interface/gigi.h
! c7ba118bbfa02ecb67d9a8d287beae60  gcc/ada/gcc-interface/lang-specs.h
  0c17b9bf1e38c0153d2d49a7cb476cee  gcc/ada/gcc-interface/lang.opt
! a1a44880269c822fbb41284003a97cb4  gcc/ada/gcc-interface/misc.c
! 88ae5d221d943abb83c91d7a58188ed2  gcc/ada/gcc-interface/system.ads
! 189f873df9e746e3c38349dac7d6ee3c  gcc/ada/gcc-interface/targtyps.c
! f22f4edc2eef3094d4b869d6cdaf1df5  gcc/ada/gcc-interface/trans.c
! 2ef279e28f46bda607f14cfe50ebca56  gcc/ada/gcc-interface/utils.c
! 6488d2b5188bae086c45a766edd2ae20  gcc/ada/gcc-interface/utils2.c
! 8c17131152309ee5d6ed879c994993da  gcc/ada/get_scos.adb
! a0c84c8e04708bbb9c8b04f7ede85477  gcc/ada/get_scos.ads
! 756365e6f03ee31ec4d33ddf9edeeca1  gcc/ada/get_targ.adb
! 8b6c03a3aad44e53d9238c821e4e283f  gcc/ada/get_targ.ads
! bfdd1d59da3c70447e9fd6375ed14a65  gcc/ada/ghost.adb
! a299aeedc6289ffd6519a0278c60c76f  gcc/ada/ghost.ads
! c39e2928a111b0037c2dc63f22527cb4  gcc/ada/gnat-style.texi
! b7900f371d66305fb644f6c78c79f983  gcc/ada/gnat1drv.adb
! ea1485fb0c9e7b4234a4735691bbb23e  gcc/ada/gnat1drv.ads
! b8f81eb71b0ae177c5e8d34f44b3c4cd  gcc/ada/gnat_cuda.adb
! 8257155673183f92724fc204536b5c64  gcc/ada/gnat_cuda.ads
! eee0a1b473496e3a70f1bff9ecc75c43  gcc/ada/gnat_rm.texi
! b0cce06d3bed26d0b4123fa2b0a6b7a4  gcc/ada/gnat_ugn.texi
! e6e49ade998e633eee01c2bd07583ec9  gcc/ada/gnatbind.adb
! 63ab58dbb6fad46f7ec19f3920b3125c  gcc/ada/gnatbind.ads
! 0202afd0bfd9d2e9f4fc825aa7601c4a  gcc/ada/gnatchop.adb
! 9c5efc98008ecf302616952d739f7d66  gcc/ada/gnatclean.adb
! 515f1d6f2acb3435899faf5f16b7c844  gcc/ada/gnatcmd.adb
! b50ef925dc6ad53f4c8cc994ac882944  gcc/ada/gnatcmd.ads
! 3e015b4a7655880616b7fc856c35970e  gcc/ada/gnatdll.adb
! 3f8d79aa5c79f6c905202a0e3bde9a66  gcc/ada/gnatfind.adb
  670cd3e724c6b64c7b322c6e75a0e7c4  gcc/ada/gnathtml.pl
! 639324278b27b654a7f1d12ea43476b6  gcc/ada/gnatkr.adb
! 9b1c09c7f9bfcc5fd9cced3c1bc1164e  gcc/ada/gnatkr.ads
! 88117611e93eb458a5be90b40ec959ba  gcc/ada/gnatlink.adb
! 598591d33525a5962aa536ad4a63cc75  gcc/ada/gnatlink.ads
! 2f0809781e6df448e287301e77cf48be  gcc/ada/gnatls.adb
! 42891712038d6a61c506a2eb2b13edfa  gcc/ada/gnatls.ads
! da56645bfa5143f9e9e5fb7d1e1abca8  gcc/ada/gnatmake.adb
! db6e8f0b5fbdb86adb1eeff1d0d8490e  gcc/ada/gnatmake.ads
! ae621d45fe27a7c1300505e77175748b  gcc/ada/gnatname.adb
! dae0ce86bf38d9cb9fd54087c282cdfd  gcc/ada/gnatname.ads
! 780f8b968144c5f11377533a18406065  gcc/ada/gnatprep.adb
! 870e9f3cf591fcf39bcf3d954c4d2988  gcc/ada/gnatprep.ads
! 17bf45742c92ea5f6d8c46a1611dbd18  gcc/ada/gnatvsn.adb
! 61b389b72d5efb6c3a3adddfb1f6a509  gcc/ada/gnatvsn.ads
! 27342c3e80937b5cd62a6746e24d9fb9  gcc/ada/gnatxref.adb
! 769b89c5d9f33501d70f0cc17cc4ed76  gcc/ada/gprep.adb
! db31e7cf7f7c455ad472662a21c729d3  gcc/ada/gprep.ads
! 5d4b424fb3fc8d22a5cb39bb04e7383d  gcc/ada/gsocket.h
! 334d9f2300e9f502535c0e18d15e71d8  gcc/ada/hostparm.ads
! 4e4d9d934e19296b7fbf6c66bf0e1481  gcc/ada/impunit.adb
! c4acd38e43023764b649261fb45b1e21  gcc/ada/impunit.ads
! d79be3b9517ff095be4f4480934e6f9e  gcc/ada/indepsw-aix.adb
! 0dd927adeb98416d662550728b919aa7  gcc/ada/indepsw-darwin.adb
! 797a26e9931b74f1b9e7bad19b31c888  gcc/ada/indepsw-gnu.adb
! 7a640f31d5c26014b12f72045a2b0755  gcc/ada/indepsw.adb
! 28a62e58a4ea1056338564ac6fb7112a  gcc/ada/indepsw.ads
! 310f96ef3fc6fb573b2ea456dc08db0e  gcc/ada/init.c
! 6c5fb11a904dd020792e14a8d6810faf  gcc/ada/initialize.c
! 0fc230c39563b680a77e286b966633fe  gcc/ada/inline.adb
! 67d9a0bfd2544bbf68386381d59ebe06  gcc/ada/inline.ads
! 83c5fe61b94a3fa61386eb489717bfe2  gcc/ada/itypes.adb
! f8d6494d99ae4db09f736ffb461dd974  gcc/ada/itypes.ads
! c82eb34fed24fc01ddd394dbbb4e9b9e  gcc/ada/krunch.adb
! ee3a69febc75d6606529c70ebc5fae5e  gcc/ada/krunch.ads
! b231a932bc914d322be9ab8a79764bde  gcc/ada/layout.adb
! 54c2ea3e68716552e9219443f84703cc  gcc/ada/layout.ads
! 7a196718e8e619341d5f8b615ceb6e13  gcc/ada/lib-list.adb
! 10bd8650fd1b3863a8b4fd9326c4e398  gcc/ada/lib-load.adb
! a6a5affe782a9dbc017df71dbe29c29a  gcc/ada/lib-load.ads
! 43fa1f068c053ff7ac30b30975b4354c  gcc/ada/lib-sort.adb
! ec301843a7ef6ab91f9242d9b5636f57  gcc/ada/lib-util.adb
! da08675fea0b95c8e8af55f07511a6a3  gcc/ada/lib-util.ads
! 3ab320fb3dda72ae8040bb6e8c46df53  gcc/ada/lib-writ.adb
! a4cd7b703147d9a2c6d939e43681a25c  gcc/ada/lib-writ.ads
! 3678a498ee7449b9541d1143558ee38b  gcc/ada/lib-xref-spark_specific.adb
! 2a3689a8858cfdd0e082dd80e4f2f7d7  gcc/ada/lib-xref.adb
! 0fa330085d234950647a990a5619041e  gcc/ada/lib-xref.ads
! 9a33b6788ec6e1753259eef39a3e6a9e  gcc/ada/lib.adb
! 0a27eed41916815bfe89d9e858c9fb3b  gcc/ada/lib.ads
! fc42dae0ee75252aa27f9c01ff51ec53  gcc/ada/libgnarl/a-astaco.adb
  c13d27ec688dfebb1965a8e9eaf55c2c  gcc/ada/libgnarl/a-astaco.ads
  66247d074eecb4270e7cf01d16e0cfce  gcc/ada/libgnarl/a-dinopr.ads
  c4e9620896065355c1895fb26186b8d2  gcc/ada/libgnarl/a-diroro.ads
  d33d03640fb0fae0a821bbeb1be518f7  gcc/ada/libgnarl/a-disedf.ads
! 4994783810ed047d64fa43284988042c  gcc/ada/libgnarl/a-dispat.adb
  380695cb64d70014260c4cbc5dc99e54  gcc/ada/libgnarl/a-dispat.ads
! 1f15ee76789f7b6c54c9d2fcc0473cf1  gcc/ada/libgnarl/a-dynpri.adb
  a2784499cf21750d8840eeaf03b9e700  gcc/ada/libgnarl/a-dynpri.ads
! a8d570360f11c3f4c11dd73ed0496a7f  gcc/ada/libgnarl/a-etgrbu.ads
  3e60794a02e6ff3380c0daf20c7c6bc2  gcc/ada/libgnarl/a-exetim.ads
! 25539628402a9acbf3d274ef27d4a188  gcc/ada/libgnarl/a-exetim__darwin.adb
! 9a7200439d3d618dc770444e92e1b13d  gcc/ada/libgnarl/a-exetim__default.ads
! 779330b956e32b25c9392ef557dc5e0d  gcc/ada/libgnarl/a-exetim__mingw.adb
! 323db832db4b8727c6f7c1922b973fa4  gcc/ada/libgnarl/a-exetim__mingw.ads
! 3cb4d532e305172c148bc2d93c0562b2  gcc/ada/libgnarl/a-exetim__posix.adb
  8a70e70c5d53efd2ae8de2a025db3217  gcc/ada/libgnarl/a-extiin.ads
  66ba8470ba07e36d23031779e1ebee31  gcc/ada/libgnarl/a-extiti.ads
! 00aba886950db66a76384b15f968687d  gcc/ada/libgnarl/a-interr.adb
! c309f21b9151832a1fe360b008770dec  gcc/ada/libgnarl/a-interr.ads
! c640001896c62395b0be81195b2ab8c0  gcc/ada/libgnarl/a-intnam.ads
! 82e082ac1602e6c4da1d1c1ca685fa96  gcc/ada/libgnarl/a-intnam__aix.ads
! 1642934d85828c453c2d0aaf97b29d00  gcc/ada/libgnarl/a-intnam__darwin.ads
! e8ed3f911686487b47577f5bc3164fde  gcc/ada/libgnarl/a-intnam__dragonfly.ads
! 0fc94b85038efe6af1517476e2df2c32  gcc/ada/libgnarl/a-intnam__dummy.ads
! 43f4d35a412746c3743bfa6e315b559a  gcc/ada/libgnarl/a-intnam__freebsd.ads
! c5919a9c4189f0d0d47b1c1cd3b08725  gcc/ada/libgnarl/a-intnam__hpux.ads
! 5be0301faecf6ce8ea272eb13696dd04  gcc/ada/libgnarl/a-intnam__linux.ads
! 5ead5c768474bcfa912cabe6d1cfa17c  gcc/ada/libgnarl/a-intnam__lynxos.ads
! f34d3485256671da85734a098f5955c0  gcc/ada/libgnarl/a-intnam__mingw.ads
! 4f780d3103d8a9436cd777079c0c875f  gcc/ada/libgnarl/a-intnam__qnx.ads
! fc475de80116197d0cb4d70557c7e0f6  gcc/ada/libgnarl/a-intnam__rtems.ads
! 276784fe2c414e995980d8ae3139baea  gcc/ada/libgnarl/a-intnam__solaris.ads
! 201e8148972479a8466701405e13ef54  gcc/ada/libgnarl/a-intnam__vxworks.ads
! 2dd0c1b3951061a37d5063113220fa1f  gcc/ada/libgnarl/a-reatim.adb
! 176768d760f99333bb5d206e21b0631d  gcc/ada/libgnarl/a-reatim.ads
! f8a51d7d348d27f955bd467bca70ecfa  gcc/ada/libgnarl/a-retide.adb
! 160f132dca8b4af716fe862692be2175  gcc/ada/libgnarl/a-retide.ads
! b3cf812a0d1573856c962961d3fc7200  gcc/ada/libgnarl/a-rttiev.adb
! 6ebf0cd393e91cffb5e496f4be693538  gcc/ada/libgnarl/a-rttiev.ads
  c04bb8934366f43faa60d914e7ebea7a  gcc/ada/libgnarl/a-stcoed.ads
! e4c3884f2d6833337713a3c3e2e6b525  gcc/ada/libgnarl/a-synbar.adb
! c35bf41dc5ca25ad2406877ba7897724  gcc/ada/libgnarl/a-synbar.ads
! 96046964fcced7f9674a154e72b78c6f  gcc/ada/libgnarl/a-synbar__posix.adb
! c919fa46f9ea857dcd25ba6b5e9e4914  gcc/ada/libgnarl/a-synbar__posix.ads
! 55112a4efac057b6f1d03e689374ee77  gcc/ada/libgnarl/a-sytaco.adb
! bcc4d27b43fab1e5e9f304e17830d608  gcc/ada/libgnarl/a-sytaco.ads
! 8b51a86b3d61c44c7161c126cd1aca68  gcc/ada/libgnarl/a-tasatt.adb
! a43ebe691b2a3aee8bc31f4dd26b9631  gcc/ada/libgnarl/a-tasatt.ads
! ba1107cb82484eb3419ed1f05f9822cd  gcc/ada/libgnarl/a-taside.adb
! 54ff4ee164c477269d7b0d9d4108ba6b  gcc/ada/libgnarl/a-taside.ads
! 23b92ff078748784548e67c052b5f7df  gcc/ada/libgnarl/a-tasini.adb
! 78fbaa05dc233b36fee25ca921345da9  gcc/ada/libgnarl/a-tasini.ads
! 3319513a8be6c2b2be7778cef1b26431  gcc/ada/libgnarl/a-taster.adb
  281fc9a014bf9c5a3677f1dd38cc9d5d  gcc/ada/libgnarl/a-taster.ads
! 4d367d1f3b740897ff66a7446f46ec4e  gcc/ada/libgnarl/g-boubuf.adb
! 537f7514617a3f9e6db60ec1e1a5a08f  gcc/ada/libgnarl/g-boubuf.ads
! 365c406c958119ee2c7ed7801cf8b94f  gcc/ada/libgnarl/g-boumai.ads
! f23ff70225ed2aa2e19b4ce861baed59  gcc/ada/libgnarl/g-semaph.adb
! cb07a3182eff1691cfb1eb243242e36e  gcc/ada/libgnarl/g-semaph.ads
! 888e43732d49419e3dd9854c91159771  gcc/ada/libgnarl/g-signal.adb
! 1575dd06d2dffdb76743b31880b5c161  gcc/ada/libgnarl/g-signal.ads
! f269f77173e2698b8976ee12b22569c2  gcc/ada/libgnarl/g-tastus.ads
! b3d0eb7c2d096413712c6fe0bec2b746  gcc/ada/libgnarl/g-thread.adb
! d445335da34187d6ccc477538a4fe9da  gcc/ada/libgnarl/g-thread.ads
! 430047f0904be1fd61207c3efcbe6444  gcc/ada/libgnarl/i-vxinco.adb
! 24eeebe84e4a923919582387cff536cc  gcc/ada/libgnarl/i-vxinco.ads
  5cfb9f62dd9599caab03143b5745a967  gcc/ada/libgnarl/libgnarl.gpr
! 67ae70d928fe08cc052a0185e5e48cc5  gcc/ada/libgnarl/s-inmaop.ads
! dc67168c2aa853d421e3aa6ba95f6529  gcc/ada/libgnarl/s-inmaop__dummy.adb
! c61b14c34e8aa3abfd907c008376ad3f  gcc/ada/libgnarl/s-inmaop__posix.adb
! 554ddac801c3a4f70c2f6dc250e0755d  gcc/ada/libgnarl/s-inmaop__vxworks.adb
! 08f430d3c5bcd989a95c018b04216825  gcc/ada/libgnarl/s-interr.adb
! 12afe71ceed5f117a6983680ff1a3376  gcc/ada/libgnarl/s-interr.ads
! e48fd8c250a2dbd1dec542e904831b6e  gcc/ada/libgnarl/s-interr__dummy.adb
! 7506ae9a5aa4c83214e64410731f105b  gcc/ada/libgnarl/s-interr__hwint.adb
! ab5be3709c3464ed9bdecb0067420526  gcc/ada/libgnarl/s-interr__sigaction.adb
! 4529c9f5fafbfdc67fe6fd60fa099006  gcc/ada/libgnarl/s-interr__vxworks.adb
! 505b2accaae1e0c66a23e5ab5f3cddb2  gcc/ada/libgnarl/s-intman.ads
! aeffb224947ec2ef7dbb9621a82b8e2f  gcc/ada/libgnarl/s-intman__android.adb
! 9f728950a68db2ae316c9eca1079ede2  gcc/ada/libgnarl/s-intman__dummy.adb
! 9e0a0f1d08a474220ae6ba5f05dc0cdf  gcc/ada/libgnarl/s-intman__lynxos.adb
! 0928ad01a9218d4083798cbafb3dc24b  gcc/ada/libgnarl/s-intman__mingw.adb
! 969557efb6f32217fd9746f5a913616e  gcc/ada/libgnarl/s-intman__posix.adb
! c4f583876e1a6799b5eef81ae0820b45  gcc/ada/libgnarl/s-intman__qnx.adb
! e3488c4e5e2fea8ab4d8d0de635213bc  gcc/ada/libgnarl/s-intman__solaris.adb
! 8e9747731cc84623fc404e738301c610  gcc/ada/libgnarl/s-intman__susv3.adb
! aa262f5356526e0bb686f4c3af2a849d  gcc/ada/libgnarl/s-intman__vxworks.adb
! f33fd4a21b5f0ff7ae0ed7c18af3623c  gcc/ada/libgnarl/s-intman__vxworks.ads
! 3d738d33b7f4798c5a41d03208ffcebd  gcc/ada/libgnarl/s-linux.ads
! 78e3c67ec40152456a88e14b5743676b  gcc/ada/libgnarl/s-linux__alpha.ads
! ef5e98b4b708aa23bf517c647adbd29f  gcc/ada/libgnarl/s-linux__android.ads
! 5e821f16e129589347cd5cd6ee851576  gcc/ada/libgnarl/s-linux__hppa.ads
! 848c9bbcea54331ded3a388d67c9fa0d  gcc/ada/libgnarl/s-linux__mips.ads
! 77835f4ffa62b6624fee9fd41c5fa3b6  gcc/ada/libgnarl/s-linux__riscv.ads
! 7ff372469339c573051dd650145f9f51  gcc/ada/libgnarl/s-linux__sparc.ads
! f9be795509c5870dd4de94c7bb2cfb1c  gcc/ada/libgnarl/s-linux__x32.ads
! 547c024c5cd8ced2f4ad34bb64c12408  gcc/ada/libgnarl/s-mudido.adb
  e6304ab8465d5bc7fadbcaf1933a0980  gcc/ada/libgnarl/s-mudido.ads
! 8c6ad2d95275273e32239418b137ef48  gcc/ada/libgnarl/s-mudido__affinity.adb
! e48ff4657c850e047e9cb8ea8c8e31a4  gcc/ada/libgnarl/s-osinte__aix.adb
! e1bb0aa97810294458e6591c5120e8c6  gcc/ada/libgnarl/s-osinte__aix.ads
! b63ee7de8c0342326b2a102f5c215934  gcc/ada/libgnarl/s-osinte__android.adb
! 894cbb2bc04ca004d77ae1fee75ce878  gcc/ada/libgnarl/s-osinte__android.ads
! 253cdd1f095109b6d72f157f56fbeba7  gcc/ada/libgnarl/s-osinte__darwin.adb
! 535f0c4d4aa7fd65a2432a3b4b8068b4  gcc/ada/libgnarl/s-osinte__darwin.ads
! 5471292242432f3b2f1180b71162deb8  gcc/ada/libgnarl/s-osinte__dragonfly.adb
! fa846dc58868a34ed9fc1bb9adfa6874  gcc/ada/libgnarl/s-osinte__dragonfly.ads
! 14149a2e88d48f7b1b3d05a2888fdb01  gcc/ada/libgnarl/s-osinte__dummy.ads
! 6d529a44eef816adbb49bfd616355b8d  gcc/ada/libgnarl/s-osinte__freebsd.adb
! ddb4bdb29e84961dfbdaacfa5df4bbc2  gcc/ada/libgnarl/s-osinte__freebsd.ads
! 33229d146db06a563e49c2202a13055c  gcc/ada/libgnarl/s-osinte__gnu.adb
! 0cdfba1b1a4fc27a7388eb6c37700cae  gcc/ada/libgnarl/s-osinte__gnu.ads
! 30b854e3e016d5c462f192e8dff3d3ac  gcc/ada/libgnarl/s-osinte__hpux-dce.adb
! 8c79279519fbe66ed2da7146888253c6  gcc/ada/libgnarl/s-osinte__hpux-dce.ads
! bf62a948fb6414c60873e6f6a040093f  gcc/ada/libgnarl/s-osinte__hpux.ads
! e96fa3af835a6d6d5ce78737b8ed6d75  gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads
! 2febde608b07adda980acf3f13c0c123  gcc/ada/libgnarl/s-osinte__linux.ads
! fff25a1dd6f886ed9e626b85a64bd636  gcc/ada/libgnarl/s-osinte__lynxos178.adb
! 3587612dc8785c12a3d10f9f84444066  gcc/ada/libgnarl/s-osinte__lynxos178e.ads
! 0af5f3478af6003d17d7bbd75532ed01  gcc/ada/libgnarl/s-osinte__mingw.ads
! 6189083f2291dcd9d9bfa4619cffa450  gcc/ada/libgnarl/s-osinte__posix.adb
! ff3f2e428b4d008c758d25aae6cc58ad  gcc/ada/libgnarl/s-osinte__qnx.adb
! 46f37ad7de44ae6d3fa117d62e19d600  gcc/ada/libgnarl/s-osinte__qnx.ads
! 8c87749c0a20c60b0bbe916798b6b9f2  gcc/ada/libgnarl/s-osinte__rtems.adb
! ae2109c24f773547234722e7680c34c0  gcc/ada/libgnarl/s-osinte__rtems.ads
! d7731856f67eda40eef57a397fa778fb  gcc/ada/libgnarl/s-osinte__solaris.adb
! d0aaa116a9e48c6b92a87cec3415c8fe  gcc/ada/libgnarl/s-osinte__solaris.ads
! 4c46de582ae29e47ae7798c256d538a8  gcc/ada/libgnarl/s-osinte__vxworks.adb
! 59465ffb3d2d73008aef3af87ad2d013  gcc/ada/libgnarl/s-osinte__vxworks.ads
! 1a876ab492211e1eb7ac741ec0cf336c  gcc/ada/libgnarl/s-osinte__x32.adb
! 80efb4d852ba36fd2926d42f91bf4f60  gcc/ada/libgnarl/s-proinf.adb
! 6a864e5ee38123edd4251048c9365672  gcc/ada/libgnarl/s-proinf.ads
! 7129c5c014fe8feecf82edf1c55911d5  gcc/ada/libgnarl/s-qnx.ads
! 1bfba289b0b1745708cd3e3ec92bbaee  gcc/ada/libgnarl/s-solita.adb
! 396e319b544b690959507740d7ba6b87  gcc/ada/libgnarl/s-solita.ads
! ed4053116a3dba200c3f281c1ae51384  gcc/ada/libgnarl/s-stusta.adb
! 963072d238c74bef68cef023f45e09d6  gcc/ada/libgnarl/s-stusta.ads
! 7ea916804f86aba20924ccdf01c69cb4  gcc/ada/libgnarl/s-taasde.adb
! 4231bccdd623fa3b33a9aca46fa0e3b0  gcc/ada/libgnarl/s-taasde.ads
! f626d29d15436a582f29c52233b28394  gcc/ada/libgnarl/s-tadeca.adb
! e3c5d870e5fe22aa7dcf6db49fe5543c  gcc/ada/libgnarl/s-tadeca.ads
! 2e4608c27a868d9e010d5e1c0e20d9cb  gcc/ada/libgnarl/s-tadert.adb
! bda5be1ebdb012e81fabc0320a12de9b  gcc/ada/libgnarl/s-tadert.ads
! e70e3501915ce74c804ba91f4fed753a  gcc/ada/libgnarl/s-taenca.adb
! 51a298f6917822d677d07ce46bc19fb0  gcc/ada/libgnarl/s-taenca.ads
! cbc76a4ea9a05326af67a2971b2219be  gcc/ada/libgnarl/s-taprob.adb
! 3163390006693943c80b8fa66eeadae1  gcc/ada/libgnarl/s-taprob.ads
! a44dee0a503d6e42cd69def9cfef4221  gcc/ada/libgnarl/s-taprop.ads
! 9ebec071e09d648d42ee279862a88d44  gcc/ada/libgnarl/s-taprop__dummy.adb
! dbbf1a4dcb002a43c6f703fead38e7ea  gcc/ada/libgnarl/s-taprop__hpux-dce.adb
! 2554a98e60d4e22b69eef3b377760759  gcc/ada/libgnarl/s-taprop__linux.adb
! e099d072002bb09560c006aac1191a94  gcc/ada/libgnarl/s-taprop__mingw.adb
! 4a571b143746ab81ff84bbf99622ea92  gcc/ada/libgnarl/s-taprop__posix.adb
! 45dd7de9ce8e5d5504d1941b6791806c  gcc/ada/libgnarl/s-taprop__qnx.adb
! 513f4e61f1fda7ad43d77eb8809e2a2d  gcc/ada/libgnarl/s-taprop__solaris.adb
! bcf21b3fa59fb51ef1252315a6111de3  gcc/ada/libgnarl/s-taprop__vxworks.adb
! 1e34b436556268b45794225669b9bcac  gcc/ada/libgnarl/s-tarest.adb
! a91651d6142133667a6e7f4a543243d4  gcc/ada/libgnarl/s-tarest.ads
! 2cd6b8d6213e97b61cb337c072bebeb2  gcc/ada/libgnarl/s-tasdeb.adb
! 68e44af71b04ec2a9007f8cda9ffcb82  gcc/ada/libgnarl/s-tasdeb.ads
! a5230093302c216a01fc66b790f4ea1f  gcc/ada/libgnarl/s-tasinf.adb
! 4d7a45c782c0c24b6c72da3f02388be4  gcc/ada/libgnarl/s-tasinf.ads
! 55ca6f8f59fe6e6596efef011d7588db  gcc/ada/libgnarl/s-tasinf__linux.adb
! 0085ed26e300d3bba6c06f209c361a69  gcc/ada/libgnarl/s-tasinf__linux.ads
! 1240fa13bdc58e8db7ccba857aea1293  gcc/ada/libgnarl/s-tasinf__mingw.adb
! 4a10cd39135cedb4a83c102edc3cf520  gcc/ada/libgnarl/s-tasinf__mingw.ads
! b915f146ea78a1482cd9f7a6f009ef6b  gcc/ada/libgnarl/s-tasinf__solaris.adb
! 5d2894d0f05414c4136f3649bd2babae  gcc/ada/libgnarl/s-tasinf__solaris.ads
! 7019beba18a7e542ed3c15dd6ce3ab64  gcc/ada/libgnarl/s-tasinf__vxworks.ads
! 9c30a33990811d2dc0ee9e46fa0f3c71  gcc/ada/libgnarl/s-tasini.adb
! 905eb039f338e367d7f5f8b95af48c0e  gcc/ada/libgnarl/s-tasini.ads
! fa30efb5e4b1a84cf2cb33356c64812d  gcc/ada/libgnarl/s-taskin.adb
! f21551e4844766e99e59af5ca283968e  gcc/ada/libgnarl/s-taskin.ads
! fe3ef14ccdf56df7e8479c57eedd1004  gcc/ada/libgnarl/s-taspri__dummy.ads
! 84057d325c9509dfb940c5106b79d10d  gcc/ada/libgnarl/s-taspri__hpux-dce.ads
! f8be07f0674c918cb14c866504499181  gcc/ada/libgnarl/s-taspri__lynxos.ads
! 67f5ee77ae5b25ab301dc73b65cd46b2  gcc/ada/libgnarl/s-taspri__mingw.ads
! 474ee344de1d8063feb0b6b38fd2777e  gcc/ada/libgnarl/s-taspri__posix-noaltstack.ads
! 05f8564522bacdc57b249cbe957cd60a  gcc/ada/libgnarl/s-taspri__posix.ads
! 3b16768ec8e3eeafc5ad422c612eede2  gcc/ada/libgnarl/s-taspri__solaris.ads
! 127f8e0bda8fe204a688b605e309a4e7  gcc/ada/libgnarl/s-taspri__vxworks.ads
! 14dfc985eccfb1b6ed4c2d0a38679831  gcc/ada/libgnarl/s-tasque.adb
! 1cb6476d4ab341f96e0cc619da72b799  gcc/ada/libgnarl/s-tasque.ads
! b771bcbe5249fe4948ee7e54d799c624  gcc/ada/libgnarl/s-tasren.adb
! d02ff5f9b894a67d15ecab324e500d45  gcc/ada/libgnarl/s-tasren.ads
! edcd3a278497c8176d10d1eba41b60ab  gcc/ada/libgnarl/s-tasres.ads
! c53704111b5068b25a6b280a6f539c40  gcc/ada/libgnarl/s-tassta.adb
! d6e2eec9579318e6c8afde53b4c36d6c  gcc/ada/libgnarl/s-tassta.ads
! 6dc8b937d196beec1647bc6b4953644e  gcc/ada/libgnarl/s-tasuti.adb
! e8a0013ba266c4ee85e43bf1cf904afa  gcc/ada/libgnarl/s-tasuti.ads
! a0e83ad2af9183dd63375ba8d2bf1ed1  gcc/ada/libgnarl/s-tataat.adb
! ee69fd7aab543be69434affb93f2fb42  gcc/ada/libgnarl/s-tataat.ads
! a93ceb9592c496d000e85ee35473bf57  gcc/ada/libgnarl/s-tpinop.adb
! 6cc7684d5a5703cc753dd15f37f908ff  gcc/ada/libgnarl/s-tpinop.ads
! 9f33e3022022fc2db2440dc1ac9ea4c8  gcc/ada/libgnarl/s-tpoaal.adb
! 12e5f992727572c4271470f3a02b1aff  gcc/ada/libgnarl/s-tpoben.adb
! d747b0b9ec2fb339a2b1a6c339a8bb9b  gcc/ada/libgnarl/s-tpoben.ads
! ba1ee3a77439416bdbe8bfb5093eb734  gcc/ada/libgnarl/s-tpobmu.adb
! b9f411f943c9a062dee8bc524a701c37  gcc/ada/libgnarl/s-tpobmu.ads
! 8c6b3e5f0b81f493fe603d31d66db2d9  gcc/ada/libgnarl/s-tpobop.adb
! 749b1a2b8f2147c3ac3ae08fcb790a5c  gcc/ada/libgnarl/s-tpobop.ads
! 43d07e90937d535464a2475196254d87  gcc/ada/libgnarl/s-tpopmo.adb
! 6bdd1880215c39dded4562ea291d0f54  gcc/ada/libgnarl/s-tpopsp__posix-foreign.adb
! 83a0ae84c13ecd20b15b5b94185cf1f2  gcc/ada/libgnarl/s-tpopsp__posix.adb
! ef51bff0c2a3db9f592be2cf00d3b2f3  gcc/ada/libgnarl/s-tpopsp__solaris.adb
! 856ccfabb6b31b1a7c98100293aece2c  gcc/ada/libgnarl/s-tpopsp__tls.adb
! 8d93b0adb08438769215df5d45bb36cd  gcc/ada/libgnarl/s-tpopsp__vxworks-rtp.adb
! 5399c2a47748d86df68e03da3a461b13  gcc/ada/libgnarl/s-tpopsp__vxworks-tls.adb
! 18fef9b5b0d2f6bac17d7d53e13f6420  gcc/ada/libgnarl/s-tpopsp__vxworks.adb
! d8c9886b1a0dec7ab771c2b831e790e5  gcc/ada/libgnarl/s-tporft.adb
! a902f28939292b988e64d9be5260d4b3  gcc/ada/libgnarl/s-tposen.adb
! 43321132b1b551adde16ed0fb27c4d44  gcc/ada/libgnarl/s-tposen.ads
! fcce03cb942165d1ebc804ef03356ebd  gcc/ada/libgnarl/s-vxwext.adb
! b99c2f810a5813047153640bb04f57bf  gcc/ada/libgnarl/s-vxwext.ads
! df8644174c275a3158a992d06ebe7f91  gcc/ada/libgnarl/s-vxwext__kernel-smp.adb
! 496e480bce042f5fff64db422e2cd1a6  gcc/ada/libgnarl/s-vxwext__kernel.adb
! d330e80302f003cd9f458918219d7759  gcc/ada/libgnarl/s-vxwext__kernel.ads
! da2f5457df9b8af38bd11eb8d2cfe3fd  gcc/ada/libgnarl/s-vxwext__noints.adb
! 65eefa8844a8843971f78b77ab9816bc  gcc/ada/libgnarl/s-vxwext__rtp-smp.adb
! 642936dcff2d0c8135a513181a8a2966  gcc/ada/libgnarl/s-vxwext__rtp.adb
! f9a59fdf59bfacd96185b1127c581dfb  gcc/ada/libgnarl/s-vxwext__rtp.ads
! a5631c4f57eb67936303b6c201cf4b55  gcc/ada/libgnarl/s-vxwext__vthreads.ads
! 7b6c96aecc37c28333b69f29c9950766  gcc/ada/libgnarl/s-vxwork__aarch64.ads
! 04931c420e5a5df139f62b468fce66e5  gcc/ada/libgnarl/s-vxwork__arm.ads
! 048ef39d084f5c7d01fac4516ad85b58  gcc/ada/libgnarl/s-vxwork__ppc.ads
! 56dd6d7deca5932d285e8c48b370f815  gcc/ada/libgnarl/s-vxwork__x86.ads
! 078cd6da773ad724e13e28426acd8948  gcc/ada/libgnarl/thread.c
! 7571a27310030c4708deb9e361b1a6c3  gcc/ada/libgnat/a-assert.adb
! 866f57b8f8b1d88089c0ec3ca0e5d505  gcc/ada/libgnat/a-assert.ads
! 50dfd418a2c4a4950c0737d2b2f6c5af  gcc/ada/libgnat/a-btgbso.adb
! e94c8e4e2ef8fbd89beb78d1b4ea15fe  gcc/ada/libgnat/a-btgbso.ads
! 104913692171414b864b805c24cbc890  gcc/ada/libgnat/a-calari.adb
! f0bfc3cd18cc83155d9b574182af4975  gcc/ada/libgnat/a-calari.ads
! 02700d3b60f3e1dc7fc026d6d60c1f03  gcc/ada/libgnat/a-calcon.adb
! 9bb6937c689262fc52e63bffd83d5fc6  gcc/ada/libgnat/a-calcon.ads
! 734bc97e89bfa1b50eadacef612f7c8b  gcc/ada/libgnat/a-caldel.adb
! b9b8bbe2070b9560ec512c220e449dfc  gcc/ada/libgnat/a-caldel.ads
! 6f2630132e8645f2044027cb4923dcb6  gcc/ada/libgnat/a-calend.adb
! 9425a034ac3b5c1ac5f2edaec3e34227  gcc/ada/libgnat/a-calend.ads
! ab4f67517a2e9abb914ef4808d8a47e3  gcc/ada/libgnat/a-calfor.adb
! 8487f8df90a842526d531fea70a96adf  gcc/ada/libgnat/a-calfor.ads
! ab7dfc13d1e0638d7cbdeb8fdec73faa  gcc/ada/libgnat/a-catizo.adb
  d731f2a00c2328507e1708628b8f8534  gcc/ada/libgnat/a-catizo.ads
! ebffb833e7a0e0554365235b73ce54f7  gcc/ada/libgnat/a-cbdlli.adb
! d5f41fe55e97c2abf3b9bdb2e6488c99  gcc/ada/libgnat/a-cbdlli.ads
! b57f75434a369c476d13fba17b43c137  gcc/ada/libgnat/a-cbhama.adb
! 761e1d06ba948ea1d11f5a1df83920bf  gcc/ada/libgnat/a-cbhama.ads
! be0a20e5882ac5c132508abd90fcef07  gcc/ada/libgnat/a-cbhase.adb
! bcc6f8c98a0717b856ca5c4be367da25  gcc/ada/libgnat/a-cbhase.ads
! c4eea50f3042ad04d3900072dd9a23a8  gcc/ada/libgnat/a-cbmutr.adb
! 86e70f628abc8f1d4b5a8b457fd36c2e  gcc/ada/libgnat/a-cbmutr.ads
! 5879c201ee48ee324568f9c77de79249  gcc/ada/libgnat/a-cborma.adb
! ceecd26f8f66a71f10e8c7d0839db329  gcc/ada/libgnat/a-cborma.ads
! 5fe494807434a8ee1542cce74d6f777e  gcc/ada/libgnat/a-cborse.adb
! 5f9c1502b12ba202e4acefc1b7af4279  gcc/ada/libgnat/a-cborse.ads
! 49aaa1cb988638dade7bc2d7b559c190  gcc/ada/libgnat/a-cbprqu.adb
! c9695cec7da45bf9117b504c4969b894  gcc/ada/libgnat/a-cbprqu.ads
! 4665016189859aebe481d33dc8816c4c  gcc/ada/libgnat/a-cbsyqu.adb
! 9a6ddf2cca4eb228bdb982d284b37435  gcc/ada/libgnat/a-cbsyqu.ads
! b31c986a83542ae878369b0cbcebcc56  gcc/ada/libgnat/a-cdlili.adb
! 8a04afa5f594b66565c72711909be2f4  gcc/ada/libgnat/a-cdlili.ads
! 435d6b567defe95ca275e5f78c8d617d  gcc/ada/libgnat/a-cfdlli.adb
! 50a6c44bf58ef87557dab0b1e3478fe1  gcc/ada/libgnat/a-cfdlli.ads
! b62247da58b9913463f3266042fde81c  gcc/ada/libgnat/a-cfhama.adb
! 7ccc3f6e60c5a91b0fcf52e719d5ce99  gcc/ada/libgnat/a-cfhama.ads
! 865f4586a9cb1b0175c5b701f83b5d73  gcc/ada/libgnat/a-cfhase.adb
! 147cf7ed631a0dcfdb447cb04b4dadd4  gcc/ada/libgnat/a-cfhase.ads
! e3e6dc11284f5278b4878802b8e02172  gcc/ada/libgnat/a-cfinve.adb
! a0df14fa3d46c112c92d7657c09d5dfa  gcc/ada/libgnat/a-cfinve.ads
! cd0ec7999232fdd3714577cedc34013d  gcc/ada/libgnat/a-cforma.adb
! a1f5b3e2b4fc121c878997df9e57c94f  gcc/ada/libgnat/a-cforma.ads
! 51989469d7e5b92f1b86773da664da44  gcc/ada/libgnat/a-cforse.adb
! 98ba270b1b114cfc36f45e602591e426  gcc/ada/libgnat/a-cforse.ads
! 96685d034166ebe2782adbaf7cb457a8  gcc/ada/libgnat/a-cgaaso.adb
! 8de884a5e49286da2dc0a401ab355a37  gcc/ada/libgnat/a-cgaaso.ads
! 39cd371ceb30562830618eedd7dd887c  gcc/ada/libgnat/a-cgarso.adb
  ef7fab6c5e61256ac64c9dae1dd27960  gcc/ada/libgnat/a-cgarso.ads
! dfd3081ec5367e91337bccad470d1637  gcc/ada/libgnat/a-cgcaso.adb
  68226484befc5e389cd3dafaab608090  gcc/ada/libgnat/a-cgcaso.ads
! d5c04d126dd7e659dc02316ebed0e174  gcc/ada/libgnat/a-chacon.adb
! 901031518fb7d0ded923751bf4f49232  gcc/ada/libgnat/a-chacon.ads
! 4672143b117578f3153686b570ce3d4e  gcc/ada/libgnat/a-chahan.adb
! d3283b3045b0e3de15a5a1b53c7b7cfe  gcc/ada/libgnat/a-chahan.ads
  00b37c98f6f96d2b5499c1f98cb503f0  gcc/ada/libgnat/a-charac.ads
! afa2e1575497c9ce53cef7122846df58  gcc/ada/libgnat/a-chlat1.ads
! d5d13db548dba4e8f72d9de72d1077af  gcc/ada/libgnat/a-chlat9.ads
! 7c679067a27023f9ed5e3c36ddfcc35b  gcc/ada/libgnat/a-chtgbk.adb
! 5a5cade0895c382d5f8bee52e4152707  gcc/ada/libgnat/a-chtgbk.ads
! 8c19039ec12e43ce141466d7956b0dbb  gcc/ada/libgnat/a-chtgbo.adb
! 9375ffbcbb6ca101db1151e5d8abeabb  gcc/ada/libgnat/a-chtgbo.ads
! a0f229404b213c47237e25efa730cfa6  gcc/ada/libgnat/a-chtgke.adb
! 06e647607aec0c1b03927023b2a729dd  gcc/ada/libgnat/a-chtgke.ads
! 6d35e49ce9283da9ca5fde258b121fd4  gcc/ada/libgnat/a-chtgop.adb
! d614120aadeab925fb0382750806b2dc  gcc/ada/libgnat/a-chtgop.ads
! f6319dd94ac15ba229e4c59f133d1912  gcc/ada/libgnat/a-chzla1.ads
! 7bcf03e03057101b286e76a9b8610d47  gcc/ada/libgnat/a-chzla9.ads
! e5be9059f323caafddabf56d30fe9c1e  gcc/ada/libgnat/a-cidlli.adb
! 13ab75f9366201080608595868389776  gcc/ada/libgnat/a-cidlli.ads
! ed41e7635ee3f70cc9695e1e86f4a0c4  gcc/ada/libgnat/a-cihama.adb
! a85e9c15e0f968c419b582e73cc67407  gcc/ada/libgnat/a-cihama.ads
! 6d77d362f8a03571b405a72e99ed76c4  gcc/ada/libgnat/a-cihase.adb
! 42a46a6e0341e46e1738bf9aa503e033  gcc/ada/libgnat/a-cihase.ads
! e6f7acbbd06754b7bdc764f701379547  gcc/ada/libgnat/a-cimutr.adb
! 8fa70fa4e557516d34043f56d0eaf9d4  gcc/ada/libgnat/a-cimutr.ads
! 16463570e3e60a240e54a857af077642  gcc/ada/libgnat/a-ciorma.adb
! a07f64ff2da675f2492734cff07a6205  gcc/ada/libgnat/a-ciorma.ads
! 9b1443ed8da599158b84b5ea42b9f913  gcc/ada/libgnat/a-ciormu.adb
! e8a719498a1fac28b1516c11a1728643  gcc/ada/libgnat/a-ciormu.ads
! 6488bf12c91ed3b5877f066bbf58fc0f  gcc/ada/libgnat/a-ciorse.adb
! 739856f8ffb603e44c7467755f0aa6d2  gcc/ada/libgnat/a-ciorse.ads
! 7aeb0fb0d435c6f0b194141f6ecf52f4  gcc/ada/libgnat/a-clrefi.adb
! 83f8251fa2c48abb3b89da1cb64c08a7  gcc/ada/libgnat/a-clrefi.ads
! a482eeff7d57c2316400f7dc4cc69f53  gcc/ada/libgnat/a-coboho.adb
! ab19343fe19433f8f36c71af2b8250b7  gcc/ada/libgnat/a-coboho.ads
! b755f1241d0860b233fb52e3def6f6d1  gcc/ada/libgnat/a-cobove.adb
! 8eb16590730030d2bef3f1a9cfc5afa1  gcc/ada/libgnat/a-cobove.ads
! 4db8d43e25d619ae3151f441feeac95e  gcc/ada/libgnat/a-cofove.adb
! 77e15ef3e99619f1306f077afbe2c808  gcc/ada/libgnat/a-cofove.ads
! 9fc03e3296775dab8cd70ecafb32c007  gcc/ada/libgnat/a-cofuba.adb
! 65d67b9f57c8f0c903af7ca1d88cb1ae  gcc/ada/libgnat/a-cofuba.ads
! f9460b1a69d3d3c46d12d9e55aff3aec  gcc/ada/libgnat/a-cofuma.adb
! 5d2b608ee5f36560f397125a2993b61a  gcc/ada/libgnat/a-cofuma.ads
! fe2b1246b4ebadd5fc2c471291e286f9  gcc/ada/libgnat/a-cofuse.adb
! 9e6db7cbc8cce53e4dfde4612fe08678  gcc/ada/libgnat/a-cofuse.ads
! ed65d273ac11ec7375aa05327221e4ab  gcc/ada/libgnat/a-cofuve.adb
! 52650330b6f2be4baa5c532fa37398eb  gcc/ada/libgnat/a-cofuve.ads
! eb06668687bf8f535534de9b28bbc741  gcc/ada/libgnat/a-cogeso.adb
! 14fb2e7fd94b4f593a5a6c702466735f  gcc/ada/libgnat/a-cogeso.ads
! 3c6cad35ba4a30f7ab61de626ff7ddb5  gcc/ada/libgnat/a-cohama.adb
! 75a13a3342d5e85443a2703f37cf6f4a  gcc/ada/libgnat/a-cohama.ads
! 6dc0ee45e3bfdd812a5a53ffbb1f0512  gcc/ada/libgnat/a-cohase.adb
! b40179f53f84178611e5648e966d8d59  gcc/ada/libgnat/a-cohase.ads
! 14fa1da9cb7349183760c72eab16c3a8  gcc/ada/libgnat/a-cohata.ads
! 8e0d196507a265a75ff79bd7baa6e93e  gcc/ada/libgnat/a-coinho.adb
! a40c2cb583012c0d7e68324b0a9ac4a1  gcc/ada/libgnat/a-coinho.ads
! 7604c7f4222e3703eafc49ff7e67884c  gcc/ada/libgnat/a-coinho__shared.adb
! 9a541a3fdfd61506773057a56d3428af  gcc/ada/libgnat/a-coinho__shared.ads
! 691b877810c91b1688255e102c440bf7  gcc/ada/libgnat/a-coinve.adb
! 09d7c38c5e6456f352d5737407089e72  gcc/ada/libgnat/a-coinve.ads
! 0842ab9868684d1c41744061d7ca86c6  gcc/ada/libgnat/a-colien.adb
! f36e0eb2cbe60ca0289fa9efdf077a6c  gcc/ada/libgnat/a-colien.ads
! a9a21cd93a4fa8edac7bae563900335f  gcc/ada/libgnat/a-colire.adb
! 299356e1d249869c69a2c8b12ecd6072  gcc/ada/libgnat/a-colire.ads
! a34874fb46b45d50647658c415f3d939  gcc/ada/libgnat/a-comlin.adb
! cfe799b8e08c0f4cbe1729b27d0047f1  gcc/ada/libgnat/a-comlin.ads
! bdfe4f573d38eed2d9efecde45e9cd00  gcc/ada/libgnat/a-comutr.adb
! 692cbf509737510e311509df4b7476f6  gcc/ada/libgnat/a-comutr.ads
! a8fad0896d5d15b9263631ad58caedd0  gcc/ada/libgnat/a-conhel.adb
! 7ed1d366f6e7d963e62d625d3cbb7f38  gcc/ada/libgnat/a-conhel.ads
  38baf99435420fa514890cac49ee9242  gcc/ada/libgnat/a-contai.ads
! a2a45e43d2e4dc07260af601cfbf8a55  gcc/ada/libgnat/a-convec.adb
! b4ad14c007382a54b3c6fd09d4266dc9  gcc/ada/libgnat/a-convec.ads
! 33a335abfcdf3e278aa15d4badfe1da4  gcc/ada/libgnat/a-coorma.adb
! 258a413c409730066e2e0d2072609178  gcc/ada/libgnat/a-coorma.ads
! 5f9fef1ec0f19e31a6a1f8303fcc99b8  gcc/ada/libgnat/a-coormu.adb
! d1dea1b8844d0781c77c27541d9de520  gcc/ada/libgnat/a-coormu.ads
! f942f1acbf28ed0bc0e4828428467d88  gcc/ada/libgnat/a-coorse.adb
! 09ded9a71d3a4fe70ab25c13c32cd139  gcc/ada/libgnat/a-coorse.ads
! d9da76834dc3c6324a653866493d417a  gcc/ada/libgnat/a-coprnu.adb
! 889a01a8c4c313e24cbb7de278433bf0  gcc/ada/libgnat/a-coprnu.ads
  2399731eabd6e0bbc0a8f28a60d3c3c8  gcc/ada/libgnat/a-coteio.ads
! 6ff101b0487edc20c22293b7ef7cafc4  gcc/ada/libgnat/a-crbltr.ads
! 3dc3055f01d015a5362c6ae411ce8841  gcc/ada/libgnat/a-crbtgk.adb
! 23cce6013f0a629efccd81464736a342  gcc/ada/libgnat/a-crbtgk.ads
! 180a355e882f9ea2f29d6466a140a39b  gcc/ada/libgnat/a-crbtgo.adb
! 27f286b032f38f085322814175753784  gcc/ada/libgnat/a-crbtgo.ads
! fa90dc02b61ae0661b5536e094234fa5  gcc/ada/libgnat/a-crdlli.adb
! 60a263f015b27196c850bcd5960792a5  gcc/ada/libgnat/a-crdlli.ads
! 1a3841e8d868f658a8dac1aae1b50ca6  gcc/ada/libgnat/a-csquin.ads
! 700dea87cd1ddc5f05a1c182ac5bc1d3  gcc/ada/libgnat/a-cuprqu.adb
! b8d34586e507b1c89a2ebcc55b93ed15  gcc/ada/libgnat/a-cuprqu.ads
! 00ce942fdc0453c9aebdf3c8cd938c54  gcc/ada/libgnat/a-cusyqu.adb
! f145b32529b2c1021eebc46321cbdca3  gcc/ada/libgnat/a-cusyqu.ads
! 537dca063ecd08e9fe0a68a97e4590d8  gcc/ada/libgnat/a-cwila1.ads
! c943c1017aeed88b81479556b426636e  gcc/ada/libgnat/a-cwila9.ads
! cfdc98fafc541540714b13e2188bd862  gcc/ada/libgnat/a-decima.adb
! 17512acb8794f52dfa7b4c7e7b622c2e  gcc/ada/libgnat/a-decima.ads
! 0dfc43ee29274767c7857d6ba9717d03  gcc/ada/libgnat/a-decima__128.ads
! 59d17c1b6ab4bb37cfeef30d94c40e59  gcc/ada/libgnat/a-dhfina.adb
! ba0e80f1aa48967c7655e4a9cf94eb96  gcc/ada/libgnat/a-dhfina.ads
! 9aaa6dbf369285c77a7726778072c97c  gcc/ada/libgnat/a-diocst.adb
! 9eac017de9b6e80601aa117ed2108bfc  gcc/ada/libgnat/a-diocst.ads
! a85a51d5a059ffeaf2996a661dc34d48  gcc/ada/libgnat/a-direct.adb
! eb6808c132e2b20655f30d4caeb81f85  gcc/ada/libgnat/a-direct.ads
! 78c1c57c479ba3ac923e1de375589556  gcc/ada/libgnat/a-direio.adb
! 873193f322dd1be3fd138a874af71158  gcc/ada/libgnat/a-direio.ads
! 02ce1d66769d765593deb52aa97c8bdc  gcc/ada/libgnat/a-dirval.adb
! a6e30370cedbacf95fe1364522819e14  gcc/ada/libgnat/a-dirval.ads
! 3df4b653027ab90eb8e4534f3677fb8a  gcc/ada/libgnat/a-dirval__mingw.adb
! fa1dffe9fbedd41b913bcc573676c5c0  gcc/ada/libgnat/a-einuoc.adb
! 55348bbc8d69807bce26601a54b1875c  gcc/ada/libgnat/a-einuoc.ads
! a20f83807e21d19e95cb306222d4387f  gcc/ada/libgnat/a-elchha.adb
! 5bd7a66868af8e2f305384a347478fdf  gcc/ada/libgnat/a-elchha.ads
! 5ceead8a586d23a55d8b309a55555435  gcc/ada/libgnat/a-elchha__vxworks-ppc-full.adb
! d1e3db1ebeb3803711402a4184b3ea20  gcc/ada/libgnat/a-envvar.adb
  e77a221e76c3e19394bf433277f04c0f  gcc/ada/libgnat/a-envvar.ads
! 4e73bf3ce74c1149f961c1e3c4753727  gcc/ada/libgnat/a-excach.adb
! ec76090a3532c9768a9de9b57e1e0266  gcc/ada/libgnat/a-except.adb
! f6b2383f91b2d3f9658be8d89d13c0e0  gcc/ada/libgnat/a-except.ads
! 57205ba46feb1e62f32658ef8ad8525d  gcc/ada/libgnat/a-exctra.adb
! d3da51344299766028689d3994924b35  gcc/ada/libgnat/a-exctra.ads
! 03e86ae3688bb00bc870d02fe58c8e99  gcc/ada/libgnat/a-exexda.adb
! 0217cec719cc427b8ba3e58d34c1b690  gcc/ada/libgnat/a-exexpr.adb
! 44336c7e56f8838139f486841efc9a21  gcc/ada/libgnat/a-exextr.adb
! 804667bf2a1c763c8da0bc3d7a4625c3  gcc/ada/libgnat/a-exstat.adb
! ec83ae24d146ddb6969eb6be98645d75  gcc/ada/libgnat/a-finali.adb
! c21f451195b9547d68e71b1a094a2865  gcc/ada/libgnat/a-finali.ads
  b6ba93109a253e15591b1eefa685bc24  gcc/ada/libgnat/a-flteio.ads
  f7e337bf223b3a491d58fb6db81ef7b1  gcc/ada/libgnat/a-fwteio.ads
  2bf5d12193c278c4a482ae0dda1129a9  gcc/ada/libgnat/a-fzteio.ads
  195c855e8e96de38bc292de9a4544754  gcc/ada/libgnat/a-inteio.ads
! f5cead0a0f9422214238f41f7aaa23f7  gcc/ada/libgnat/a-ioexce.ads
! acc89489d76f468d41b8773192282dba  gcc/ada/libgnat/a-iteint.ads
  39b8821573ea224defa1f1b9b1a5248e  gcc/ada/libgnat/a-iwteio.ads
  b237e9ea879dc91ffa87b41e0d78b2c2  gcc/ada/libgnat/a-izteio.ads
  6a6cf739ac25eff18ec7bded73be1862  gcc/ada/libgnat/a-lcteio.ads
--- 548,1300 ----
  e1e4800d4922875de1a9dcfaacf7e1fe  gcc/ada/ChangeLog-2018
  e886b111487071a30a52edb616ff7844  gcc/ada/ChangeLog-2019
  25a37c68917fa9927277f5c8fda08d05  gcc/ada/ChangeLog-2020
+ eb047ffc35b1d44455bed0519888503c  gcc/ada/ChangeLog-2021
  5598cfcecd6612ea21efddabbbe1ecc0  gcc/ada/ChangeLog.ptr
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
! 79432d3beb46b4a8f4c4c114203a6527  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
! 87ef82c8aad0e2530882436cb0a03443  gcc/ada/Makefile.rtl
! c9e89f300abcda134a1a604241085980  gcc/ada/ada_get_targ.adb
! 340e6148317da7a48a9b6e559bb78b37  gcc/ada/adabkend.adb
! 000a9d75ae95cc17f681998d95d6bd95  gcc/ada/adabkend.ads
! 143495bc279b5665b1b6fac5a4b23ab4  gcc/ada/adadecode.c
! 1677048585847303e8e587d77f9cea7f  gcc/ada/adadecode.h
! 33f7beb8c7e4e500c97566c007b2f2a8  gcc/ada/adaint.c
! e45fd21f903a7a450a6e8f0b97cdd02c  gcc/ada/adaint.h
! cd057b4aab78ef11070e3cc98b6452a4  gcc/ada/affinity.c
! ab6bbc8b5f4cbe048e675b8d77b37e11  gcc/ada/ali-util.adb
! 961496fb8cb8bcd2464c40f39f60000d  gcc/ada/ali-util.ads
! d49a3d529afd23f1bbd6fb4c7ae090c5  gcc/ada/ali.adb
! 41758084d594e96bccabbf47236138a2  gcc/ada/ali.ads
! 94761557870db4edf5f5a92d1d4eeb3a  gcc/ada/alloc.ads
! 5f6c999511a416a17c6efa44402e34c1  gcc/ada/argv-lynxos178-raven-cert.c
! cf387b70c9d5d17e48d6fe3b7de090ea  gcc/ada/argv.c
! ef5915e1fde7db3e68610cf7d6eae5f1  gcc/ada/aspects.adb
! 2dffb6c811683a9d3b1eff2964ec5eca  gcc/ada/aspects.ads
! 652dabae2b38ccb150484cacfe949900  gcc/ada/atree.adb
! 05f6e6b8acfd925d5708bbb2b02ee25d  gcc/ada/atree.ads
! 8a465aa0de9d12e72af47d41c409e622  gcc/ada/atree.h
! 9b2f3ac5f8aec6668b67265ff928f7c5  gcc/ada/aux-io.c
! 40d285dedc90f32652320a1762edc701  gcc/ada/back_end.adb
! dfb39a3c62ce22e20dd7501513c1beef  gcc/ada/back_end.ads
! cdc478c0e3394d3280b2150d63d1a61c  gcc/ada/backend_utils.adb
! 8f9862abad036a55e196f7a444a1fbf8  gcc/ada/backend_utils.ads
! e2f2d7d58bb13f15cc2b2bdb05a0ce9b  gcc/ada/bcheck.adb
! 021abf805c938061849b6cdc3d982850  gcc/ada/bcheck.ads
! 43490912b44a4721ee27246b93b97c89  gcc/ada/binde.adb
! ea01fe912f8e166ddac8e12ee4b82835  gcc/ada/binde.ads
! 99e1a82825735fb2b5d3a3614b672b07  gcc/ada/binderr.adb
! 404ad154964d187aee9f2a10c85cf38d  gcc/ada/binderr.ads
! 12fe74a14ea8b268e94104ebc1dbf0fa  gcc/ada/bindgen.adb
! 60f9b926a7fa1bff30b181943b1e5fe2  gcc/ada/bindgen.ads
! 8dfc5df30dea117498a765e1325ed842  gcc/ada/bindo-augmentors.adb
! c6d12e21802f00b6266d2478defa78e3  gcc/ada/bindo-augmentors.ads
! a92e5263c330da171eeccc3bb7328c13  gcc/ada/bindo-builders.adb
! 5ced02e36f7ad0931b58c8e5ad4a1a79  gcc/ada/bindo-builders.ads
! 1a0582752582b6aef10996ba4855fd95  gcc/ada/bindo-diagnostics.adb
! 957f1458704891d7f844daaf0e64f678  gcc/ada/bindo-diagnostics.ads
! 80c2c69908174dcdae4f536fd3b52a73  gcc/ada/bindo-elaborators.adb
! 4174dddd40e7bc5934e3b43f860195b4  gcc/ada/bindo-elaborators.ads
! 2beed848b2468520770e39463234d308  gcc/ada/bindo-graphs.adb
! 092d6e4244c07a0aff833bc6474fc300  gcc/ada/bindo-graphs.ads
! caa215a5a97f6b3a3778cd68274672bf  gcc/ada/bindo-units.adb
! 7f8692cddb6a6911512585feb4aaebe3  gcc/ada/bindo-units.ads
! 35e7ea619b01ddb064f0af2d2f79b053  gcc/ada/bindo-validators.adb
! f761c5242047911b09263f7c3ffb8c28  gcc/ada/bindo-validators.ads
! 2a7c2ca09d1678f8e888a37c03153549  gcc/ada/bindo-writers.adb
! fc2ea25cfd42e9815af3d239052dc9a5  gcc/ada/bindo-writers.ads
! 8345c16b25c104280cbcf32fad049ab9  gcc/ada/bindo.adb
! 726718d4de8fb770b4e433ade20d60fd  gcc/ada/bindo.ads
! 371fd18d186bd02bb62be6e2876a5a2c  gcc/ada/bindusg.adb
! f9912e569ad55846a0edb7796327c169  gcc/ada/bindusg.ads
! 88c3231cb5b0cbadc78e9bbdbcd2fb48  gcc/ada/butil.adb
! aaf91eb612c3609411c6e023f5bb66c0  gcc/ada/butil.ads
! f99a67883670b32df0dfaf4c2e100d99  gcc/ada/cal.c
! 50ec1344da1b017e65a5eb5a28c9536a  gcc/ada/casing.adb
! 592c20ca587a6b1c899f07001d99fb8a  gcc/ada/casing.ads
! bf7dde4bc31048eec96689ff40b3d433  gcc/ada/checks.adb
! aebcb80ff995a10442ee627fa91ec2f1  gcc/ada/checks.ads
! 52835d65af202f58a22a7c6767b07408  gcc/ada/cio.c
! eaf64fd94febe71bc32da33b94997d2d  gcc/ada/clean.adb
! 58d35c683225d7941ed85ca811dc0f4e  gcc/ada/clean.ads
! db9985881e22e80c4e3ed2f877f4210f  gcc/ada/comperr.adb
! 1c3a86c34937a5fd35c5ae6a277c8c55  gcc/ada/comperr.ads
  fbd23958a6d5c4207e39317e708436ac  gcc/ada/config-lang.in
! ec43b0e9748d09b20b111e24b440a6f3  gcc/ada/contracts.adb
! 4e0fc0d5b3cea79c8f4ec8610c22d962  gcc/ada/contracts.ads
! 973599e60a95cf93e0273f1e243b37ab  gcc/ada/csets.adb
! 27f5a100ccef1bc54f4d9362c24bf716  gcc/ada/csets.ads
! 4646a10ff0e0e0718a26e27c176c6e8d  gcc/ada/cstand.adb
! 8d94abe51c49ca942be0284a200de7af  gcc/ada/cstand.ads
! 1db98771f5117dd943fec57f65c73895  gcc/ada/cstreams.c
! 91814fa30a47aebd007aca8ce34745c2  gcc/ada/ctrl_c.c
! 0f9e026f56ebd786d0f5eaad1c6aa70b  gcc/ada/debug.adb
! a669a384c73d1bded640f919332d58e9  gcc/ada/debug.ads
! 1f51a34362995cb1d3a01cdc1da54396  gcc/ada/debug_a.adb
! 86bd16c2c87a721c7d239368284e23ff  gcc/ada/debug_a.ads
! e985c86f5eb27a1af5221f7338ac92cb  gcc/ada/doc/Makefile
! a012e0cb5df366014b5a4988036a509a  gcc/ada/doc/gnat-style.rst
! 146dcc045a420b5f36161c6e32a7dea8  gcc/ada/doc/gnat_rm.rst
! c4f5f27a027adfe3db5b39193542c956  gcc/ada/doc/gnat_rm/about_this_guide.rst
  e183e323bf87ac50a5767106862fef97  gcc/ada/doc/gnat_rm/compatibility_and_porting_guide.rst
! 30468948a242697354c65f06568389ee  gcc/ada/doc/gnat_rm/implementation_advice.rst
! ef4cecce680c33b415ea227fd2e5712e  gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
! 3ef1d464bd3b4a25502f09b3a0b85c96  gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst
! 05324d39fa9d83b4f19105b5f1c12145  gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst
! 098eeb5714b03f8afece4bfeec8188dd  gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
  4c8f34f9d69c20b677b885ec36ef9844  gcc/ada/doc/gnat_rm/implementation_of_ada_2012_features.rst
! 70af879066bdb8351dd70d66647ae613  gcc/ada/doc/gnat_rm/implementation_of_specific_ada_features.rst
  8ac597e4a14e2e70cf692a87fa810b0a  gcc/ada/doc/gnat_rm/interfacing_to_other_languages.rst
! d3ffb5a905c9520d87b68e10029eb023  gcc/ada/doc/gnat_rm/intrinsic_subprograms.rst
  bb3c8ae8aaf1cbd06bc44135da97d801  gcc/ada/doc/gnat_rm/obsolescent_features.rst
! ab2bef7f5a321aa12f45ca500dd29a93  gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst
! 2558efb96a3ef6fe1dcfecccb751a9d7  gcc/ada/doc/gnat_rm/security_hardening_features.rst
  03676be4f649629e37041b8c849c7825  gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst
! 3912a487cc84df1d901218cba2d89b23  gcc/ada/doc/gnat_rm/standard_and_implementation_defined_restrictions.rst
  0c417860d1b59e9ed53a0bb81cbdf579  gcc/ada/doc/gnat_rm/standard_library_routines.rst
! 0cb9808264d3ce8206127466415059b6  gcc/ada/doc/gnat_rm/the_gnat_library.rst
  8b68d207a54ca14c6fe2d33005ece437  gcc/ada/doc/gnat_rm/the_implementation_of_standard_i_o.rst
  ad0b18bc67f8911f5f0d9d2762f19f82  gcc/ada/doc/gnat_ugn.rst
  522a8b1f4fc69117e20c4690b1cde1a3  gcc/ada/doc/gnat_ugn/about_this_guide.rst
! 28a7e171022984ddb57ad9d2b16fe8be  gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
  2e09bbabc6b508ce5d975d5e9e0eff30  gcc/ada/doc/gnat_ugn/elaboration_order_handling_in_gnat.rst
  c8c5cebc5a8966a6a0b278b30b2f5738  gcc/ada/doc/gnat_ugn/example_of_binder_output.rst
  329d0c3464eb53db9196226f014d72c9  gcc/ada/doc/gnat_ugn/getting_started_with_gnat.rst
! e489ee5246fa454188060767f54cb814  gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst
! 1834be8e958f1b7a8e0914428ed7368d  gcc/ada/doc/gnat_ugn/gnat_utility_programs.rst
  996c912f607538e32d01140682b88ff2  gcc/ada/doc/gnat_ugn/inline_assembler.rst
! 0925eb2067c78d26235b64bfca9e7f21  gcc/ada/doc/gnat_ugn/platform_specific_information.rst
  062c912e168e9f97d4b4ae9c766300b8  gcc/ada/doc/gnat_ugn/rtlibrary-structure.png
! 34a01a2b148815ad873c47768c7aa982  gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst
  caf064904358a8a1d6029b136176ff9d  gcc/ada/doc/share/ada_pygments.py
! 309751622eb4b63aafe66e794dc4fe28  gcc/ada/doc/share/conf.py
  c7da61a05156d50b4888cdfaae4241d0  gcc/ada/doc/share/copyright.tex
! 1b7b0904041eb97a9ac023e776774561  gcc/ada/doc/share/gnat.sty
! 0a025bfec2a94c0fcd11a19d18f6c0c5  gcc/ada/doc/share/gnu_free_documentation_license.rst
  f1c71b64e1c84e240c7b5aea7331a32a  gcc/ada/doc/share/latex_elements.py
  90adfcde2feb6d6c090c2b18a1578145  gcc/ada/doc/share/sphinx.sty
! 077b4ef785c5047b58bf77d071d0fdbc  gcc/ada/einfo-utils.adb
! 19cf753ca49fd3a186f2d65e75f08cef  gcc/ada/einfo-utils.ads
! e0acabac141c91bf8a74dd7bf9f39d40  gcc/ada/einfo.adb
! 3e87715cea15634f13ffd2a12a7cc913  gcc/ada/einfo.ads
! c808b432e7f90163bb7945ee07cb8083  gcc/ada/elists.adb
! a6b4d61435ba4081c0ad2d1039406d12  gcc/ada/elists.ads
! b397ee225575d1c5cd31bf265ffd6b3a  gcc/ada/elists.h
! bf372363916f293a3b5aa0398ae9f7b7  gcc/ada/env.c
! 92c0d697710561270b6e768d5cdd64a6  gcc/ada/env.h
! 2a53e60a9a2f91ff1769f699641b528d  gcc/ada/err_vars.ads
! ff8b851761450f865b497793ffe58c79  gcc/ada/errno.c
! 61d16455a0c1677f20f9f27618cc113f  gcc/ada/errout.adb
! 02d64772e366a2ad835d213341147639  gcc/ada/errout.ads
! c11710b6c2f29b1a7be4076c550130ce  gcc/ada/erroutc.adb
! 81dcf79732930a7a41706fe2197db401  gcc/ada/erroutc.ads
! 247fc2ddc399cd1e1668485753c7e6ec  gcc/ada/errutil.adb
! b758ca9ff1e670b06faa91172b54821c  gcc/ada/errutil.ads
! 4973644be06a9ffee0f1ecc75fd661b8  gcc/ada/eval_fat.adb
! b3afcb4757e1716de34c0bfa9592e38b  gcc/ada/eval_fat.ads
! 5984eaf2b94418d32ae102682dfdf568  gcc/ada/exit.c
! 20f27f498e9b06aaad420c4fb96b8102  gcc/ada/exp_aggr.adb
! 36e1c9b931704c591af9513c4532543b  gcc/ada/exp_aggr.ads
! e10405e98b44d560103a055b1f00418e  gcc/ada/exp_atag.adb
! 774118c8b5d8ee467bab29cc546bfe90  gcc/ada/exp_atag.ads
! bc6bd227da810b414dd3759e2db7291a  gcc/ada/exp_attr.adb
! acba950d800fbbbc5eae6efac51ce2e2  gcc/ada/exp_attr.ads
! a5e8c56591ffbbc19192a1c2895dda24  gcc/ada/exp_cg.adb
! 254834bf9d359d6c3921d50e5d8b5a0f  gcc/ada/exp_cg.ads
! 399d7a34b96ab5802acf5a39f39eeb3e  gcc/ada/exp_ch10.ads
! 87ed5276811cfd045629be04bfcb5f5f  gcc/ada/exp_ch11.adb
! 2cc2d4f3c40d2aa45771beb2345f88ab  gcc/ada/exp_ch11.ads
! 61a425f8c34d2f905fd1bad571a3d83c  gcc/ada/exp_ch12.adb
! a16b833d7af8c9999d879a1ac0e08c1a  gcc/ada/exp_ch12.ads
! 12cd0646b2456dca2f23d77ec600a3cd  gcc/ada/exp_ch13.adb
! 1ca1a2d00c7b2a35ccbf99e70865d806  gcc/ada/exp_ch13.ads
! be56f221d42251fd1dae73968881b1fa  gcc/ada/exp_ch2.adb
! c8d75e8e54eccbcf942dc059b85a3bb5  gcc/ada/exp_ch2.ads
! fd4cf5651067e0b1554c80d51507bcb6  gcc/ada/exp_ch3.adb
! 0a54d172f10092ff3ff2c2d2d095ba55  gcc/ada/exp_ch3.ads
! aa9d2e89f4c039691e7312000c600df8  gcc/ada/exp_ch4.adb
! 1c15cbd77887db9d3bd25c6972b592c8  gcc/ada/exp_ch4.ads
! 9a235cf11293bc86d8c0cb1600c55088  gcc/ada/exp_ch5.adb
! 979227d95a6dac9baddbe04b8c3493c8  gcc/ada/exp_ch5.ads
! 038fc84fbbe4efe323e805b580979589  gcc/ada/exp_ch6.adb
! 8d66ec9e862ba21f160a8170f1e49325  gcc/ada/exp_ch6.ads
! c8113af9b067f0ae46ac677bd654998c  gcc/ada/exp_ch7.adb
! 1fb7263aebbb4f05b0d18af30966f286  gcc/ada/exp_ch7.ads
! c878c67c93d75a156d7addd650439dfc  gcc/ada/exp_ch8.adb
! e113b356ea2318ef4ca18e3488bce0ee  gcc/ada/exp_ch8.ads
! d14cef46ffa5969487acf8a2b60f077b  gcc/ada/exp_ch9.adb
! 0ad037ac708b260c527d2cc406fc9b4e  gcc/ada/exp_ch9.ads
! 2c7edc0fd0249fe0e9cff1fa5862b99f  gcc/ada/exp_code.adb
! 1537bb3d872bd50ff12f21701f180737  gcc/ada/exp_code.ads
! 9dea05ce3951788ed76b7837b346a5c4  gcc/ada/exp_dbug.adb
! cd288878709892336f3b30133eb6e256  gcc/ada/exp_dbug.ads
! 97ee8c747b69f4c35d77976094096555  gcc/ada/exp_disp.adb
! ec63bbb7626cf9ad17a801c990e4105f  gcc/ada/exp_disp.ads
! 4664680145b5d3e29cae84e4e4f0ec7c  gcc/ada/exp_dist.adb
! fc5edab27cdaed1d95b8e08d99a0c832  gcc/ada/exp_dist.ads
! 9a83f9319a2aa9aaaa5bc4debd9ef4ad  gcc/ada/exp_fixd.adb
! 735735b7a3b319a7b5c929194ebd2d67  gcc/ada/exp_fixd.ads
! 23a118f6c03dd25b00e839dbe6f51c75  gcc/ada/exp_imgv.adb
! 62a72d818540b3d6a633ac51ff960c90  gcc/ada/exp_imgv.ads
! fac962bb5cafa01fe15c9e54de01b873  gcc/ada/exp_intr.adb
! bafb87ef3df7eaeaf2f4a2d748c9a4f8  gcc/ada/exp_intr.ads
! 5880bc36cde4b60d3274d5491964fdde  gcc/ada/exp_pakd.adb
! ec9b04ca8b2f8bf92fae9d7152ff9fc7  gcc/ada/exp_pakd.ads
! 67e56bdb41255ae4967a1bf907bf4edf  gcc/ada/exp_prag.adb
! e71e5270763f785a70999bdce5040d39  gcc/ada/exp_prag.ads
! 6ea395c514878b0a25360c7c7cc9ad83  gcc/ada/exp_put_image.adb
! 219becf6e2526f8ddf91239ad0f559b1  gcc/ada/exp_put_image.ads
! 844081effca7d7d0264444322420b9a9  gcc/ada/exp_sel.adb
! c42de5191c8a08b45280852624d62a4c  gcc/ada/exp_sel.ads
! cc967130fd3035e3e3b996794bedec75  gcc/ada/exp_smem.adb
! e8b5a7a608439951d89518d8bdb866c1  gcc/ada/exp_smem.ads
! 0eee7a32d97d00b7e38bcbf1aee9191c  gcc/ada/exp_spark.adb
! ee1066e7c5413819b03e6001a9cfae3a  gcc/ada/exp_spark.ads
! 3024ccde020978e7bbc056c7abfa393a  gcc/ada/exp_strm.adb
! 371c1be0effc44a9302c0cfc8f196645  gcc/ada/exp_strm.ads
! 1fb9b9b5951171444f981e745a53ce43  gcc/ada/exp_tss.adb
! f278fc9fa8e840c2b94e28c3d094650a  gcc/ada/exp_tss.ads
! 0e337130cf6c6c0372f0952e49f7d985  gcc/ada/exp_unst.adb
! d5908f51ae172d7ceff89f100340126b  gcc/ada/exp_unst.ads
! 41a87f3f2511529ac9316c9d9458b905  gcc/ada/exp_util.adb
! 7ffa7e0ec39d43af001a15aaac9ba78c  gcc/ada/exp_util.ads
! a9edaee743b4d940a7706a0e09b30fb2  gcc/ada/expander.adb
! 9af78763a2ab23ffd55521e61c23ae50  gcc/ada/expander.ads
! d434b090b6baf3dc34c1bb2270d7559b  gcc/ada/expect.c
! c36edc6e0004e8940eff79d111bc73da  gcc/ada/fe.h
! bc5bbea2c63f8a38f7a017a615feef01  gcc/ada/final.c
! f6306675fca720f37fff70d71485f7f1  gcc/ada/fmap.adb
! 7d78fba7f6f92d969ba7d95a1bbf1c14  gcc/ada/fmap.ads
! 326f4f504c4d53b32e4341e2c0762bc2  gcc/ada/fname-sf.adb
! a7c1e341774de2430c67da6c82d16588  gcc/ada/fname-sf.ads
! 1815d7a2a29ed0e6f33c41962400738b  gcc/ada/fname-uf.adb
! 7e6a08c35db7455b9496c4171903fb7f  gcc/ada/fname-uf.ads
! c2ec6fcdb9d733c37d0eaf3cd6d95b6d  gcc/ada/fname.adb
! d054a156bf04ecfad524d877e49e5cc8  gcc/ada/fname.ads
! f4803c7c5c388915cd757f7539e5c623  gcc/ada/freeze.adb
! e0947e0537bfcf9ef386e9dd22d22ccc  gcc/ada/freeze.ads
! 34a4d520e10386bdddf0f9a846a06ebc  gcc/ada/frontend.adb
! 9e0e13513f7008d7436b11566fc51162  gcc/ada/frontend.ads
! 6e3f84a0381a328502fc75659214e30c  gcc/ada/gcc-interface/Make-lang.in
! 815ca83318c00efdb98b84eb0d0a9e66  gcc/ada/gcc-interface/Makefile.in
  35dd49b4643582a2e1e847bc6aea01e1  gcc/ada/gcc-interface/ada-builtin-types.def
  f7677c298cb2f4c70ecf284c7e18cb80  gcc/ada/gcc-interface/ada-builtins.def
  055be3d11fa6ccb53ffe7f8970a005ce  gcc/ada/gcc-interface/ada-tree.def
! 17e94b8ad47f834c02ffa404cad6a5c5  gcc/ada/gcc-interface/ada-tree.h
! c624ca95ac9cafe80b36002e2082ba32  gcc/ada/gcc-interface/ada.h
! 94e0754690ae0c8dc74fe08f0a50999e  gcc/ada/gcc-interface/config-lang.in
! 5b910ac4d9e39a40ea0683b0648e49d2  gcc/ada/gcc-interface/cuintp.cc
! 9bdb6a78832ac52be4a2af482e2a4572  gcc/ada/gcc-interface/decl.cc
! 86b3aa73d9a4f83e3574afdb2cba3bd1  gcc/ada/gcc-interface/gadaint.h
! 685316e06bf82a1d265c8a8240afc33b  gcc/ada/gcc-interface/gigi.h
! 61f788f464d3715bb66330ecca2ade58  gcc/ada/gcc-interface/lang-specs.h
  0c17b9bf1e38c0153d2d49a7cb476cee  gcc/ada/gcc-interface/lang.opt
! 62b968ec91ce4b7a11f33851d1bd1140  gcc/ada/gcc-interface/misc.cc
! c72e1e6f142057c645c4f468812d0ef6  gcc/ada/gcc-interface/system.ads
! f90bf61642fd847fee99bdb046417a52  gcc/ada/gcc-interface/targtyps.cc
! 547939c0657a7e8ef5b64ff209647ba7  gcc/ada/gcc-interface/trans.cc
! e51c641c60c08bf3b6b518bbe0216aa1  gcc/ada/gcc-interface/utils.cc
! bb629ed986dc148ade9c1aa91064d240  gcc/ada/gcc-interface/utils2.cc
! 29c7d604ec0ca9d614e46b1b3961a4eb  gcc/ada/gen_il-fields.ads
! 946fddb0d501dee20d12b65b9cc46437  gcc/ada/gen_il-gen-gen_entities.adb
! 90c3402c1bf9360da61d9cfca5e75e5e  gcc/ada/gen_il-gen-gen_nodes.adb
! 5d4c1175e8bf2993fded686d0054f966  gcc/ada/gen_il-gen.adb
! 80d1b370ac59bca0a3f4c05c17f896a4  gcc/ada/gen_il-gen.ads
! 673b70a7dbba818cbeb23cde116f50d3  gcc/ada/gen_il-internals.adb
! 1731fe5d9dc6e6e3a15d19038a250566  gcc/ada/gen_il-internals.ads
! 8c97a4656c1665b8d195c892754720c7  gcc/ada/gen_il-main.adb
! b26aee58c45d16d52f79af6f8daf88ab  gcc/ada/gen_il-types.ads
! ec2ab47d9e4c71d5ffee047cafa1605a  gcc/ada/gen_il.adb
! a5d6b1701ea5bf215da72f26665211b2  gcc/ada/gen_il.ads
! 7bedc1c03029b29dfee39835229cf7a2  gcc/ada/get_scos.adb
! 2e59a7438a16673efcd5c70daf5a0e18  gcc/ada/get_scos.ads
! 9f3dc356b9d91b96adf53a3fb7a606c9  gcc/ada/get_targ.adb
! 351ecddbbf279ecacda6f8b110b1aa57  gcc/ada/get_targ.ads
! 749cbaf5fd78c41a5722faa5df1ef62a  gcc/ada/ghost.adb
! ba047e58cd77fc336c90b01b23f71c24  gcc/ada/ghost.ads
! 48138aadca0757211cd66500b22c20c0  gcc/ada/gnat-style.texi
! f1f04a1c1f86fac3b3f000732bd4b90c  gcc/ada/gnat1drv.adb
! afa6e65ceda1cab37dd5aeae315e83d0  gcc/ada/gnat1drv.ads
! c103505e4c64967f875c7a4238798e4e  gcc/ada/gnat_cuda.adb
! 0927017a26f803816c66013199c6381a  gcc/ada/gnat_cuda.ads
! b82878927be65ce37185c6f06e771bf7  gcc/ada/gnat_rm.texi
! 36ea8fcfb3fcb7f870a0bb158f1fbb12  gcc/ada/gnat_ugn.texi
! ce40b6396b0acdb9483ee8aab9dc817f  gcc/ada/gnatbind.adb
! c9569f7a1940b7eba403a6fe5e05e812  gcc/ada/gnatbind.ads
! 25b3f7a90a2fa5686e2a38a76f1c635a  gcc/ada/gnatchop.adb
! 3264871b4e4ffb3ae1b66299835ee03a  gcc/ada/gnatclean.adb
! 09d8cc80e1d28536ef2fee92b5291323  gcc/ada/gnatcmd.adb
! c0f6f3d8e43bcb668dd35e6bb3765a61  gcc/ada/gnatcmd.ads
! 698187c16a4c5728189f8dad3175ac27  gcc/ada/gnatdll.adb
! 7d071e8f06079ef529dc3b7096cf0db5  gcc/ada/gnatfind.adb
  670cd3e724c6b64c7b322c6e75a0e7c4  gcc/ada/gnathtml.pl
! 56dd44500bb8413dfa78f339678dbb19  gcc/ada/gnatkr.adb
! 4a08c44973dfb8798a144de4a4382323  gcc/ada/gnatkr.ads
! abdc8ac5c8a0a44b3a8be0d6256d6dc7  gcc/ada/gnatlink.adb
! a01ce3cfa580c83e6f3ff578dd90faaf  gcc/ada/gnatlink.ads
! 76efb8d1e9825a239f9d2901c05795b7  gcc/ada/gnatls.adb
! 008c7d145c00883d5ed49529b69c8438  gcc/ada/gnatls.ads
! 422136c9fd80c98d38ff7579a8e48b0b  gcc/ada/gnatmake.adb
! c644e5128369eb58431084edb4dbf579  gcc/ada/gnatmake.ads
! 8270889e7a7b52f6aa0e6526c7789569  gcc/ada/gnatname.adb
! 2c2a0ebbd0675ec853a34635035f260e  gcc/ada/gnatname.ads
! 8aeafbe31b5998852d69e8c9e65a0250  gcc/ada/gnatprep.adb
! c21a15f7a0586b2c9b64ddd701ce45e3  gcc/ada/gnatprep.ads
! aaf95b1ef85ff9c1554072f1ea7b261f  gcc/ada/gnatvsn.adb
! 650410eaa4c35c6d3957b4aac334800a  gcc/ada/gnatvsn.ads
! 0358a5c8118b84d5a959b3e00266ed8e  gcc/ada/gnatxref.adb
! 49bc19d7e396c6088497a148513098e1  gcc/ada/gprep.adb
! 9510aa5668897b508c629072d71b3d91  gcc/ada/gprep.ads
! 6ddfceb174ead121eff511383fa19785  gcc/ada/gsocket.h
! b61a05d72a16a8947e575d18c5ece341  gcc/ada/hostparm.ads
! 35471dba1ebe8cfe192b209ef9c366bf  gcc/ada/impunit.adb
! 4ddaecc9dab0bd00fb6dee043bf0699a  gcc/ada/impunit.ads
! 777cab6afa8521661d460ddcc7f152e5  gcc/ada/indepsw-aix.adb
! 69995b01499fb7214296e915509c989e  gcc/ada/indepsw-darwin.adb
! 47e4d274f5e7c2e075d3cd8610c86d5a  gcc/ada/indepsw-gnu.adb
! da149ea0b4a9fea047279e04ad9feaaf  gcc/ada/indepsw.adb
! dde138e2acee482827854d23dd03b4e4  gcc/ada/indepsw.ads
! 83365bfa2cd3e2323425356d09f278e2  gcc/ada/init.c
! f24c72371216274d4a3e763f57de1912  gcc/ada/initialize.c
! 830ac028dc929fee73c7c4d45f999c53  gcc/ada/inline.adb
! e7461fbd9bc072501c8b6a76306075d0  gcc/ada/inline.ads
! 533945c26092735d5363ec5210c3bd0a  gcc/ada/itypes.adb
! 11bef7cb043df9c1b8f818f721ed74fb  gcc/ada/itypes.ads
! c8b5aaf5549e40a1c68b17a000e9d185  gcc/ada/krunch.adb
! 47223c1ee9d9180775f5fd9cc8948d61  gcc/ada/krunch.ads
! f366c730d5898f7e751249f650fa67ae  gcc/ada/layout.adb
! aecf49839060eac6112a5e116902a766  gcc/ada/layout.ads
! 837d9c2f9d74e8fbe7593c487e5f9d62  gcc/ada/lib-list.adb
! 6a2f83138973a96ade6343a938de09e0  gcc/ada/lib-load.adb
! b409d974c986cc22b2631e4645502d37  gcc/ada/lib-load.ads
! d10256d3bc9906428e25ca6ad8948a9b  gcc/ada/lib-sort.adb
! bd43e595b1ed924ae3055d568eeacf64  gcc/ada/lib-util.adb
! fcb14f2efe4961cd853b863d1a6f144f  gcc/ada/lib-util.ads
! cfc593fb4ae8cde5407e64a854f36d24  gcc/ada/lib-writ.adb
! 37e8687e96296e70768c7a9838ddea9f  gcc/ada/lib-writ.ads
! 50eaa7273c55e3b0f87ee621ee75fcf9  gcc/ada/lib-xref-spark_specific.adb
! 5b3bc2dc145f103b4556dc04d1cdcd56  gcc/ada/lib-xref.adb
! 6fe50c3e851d7a5836853e62b88b9403  gcc/ada/lib-xref.ads
! 5c2ebdb59f16049aa815d31765921d39  gcc/ada/lib.adb
! fa69ba3cbef19f90ed4e37b4e69a4653  gcc/ada/lib.ads
! b629711368df2f3d17489b9af22a1fd7  gcc/ada/libgnarl/a-astaco.adb
  c13d27ec688dfebb1965a8e9eaf55c2c  gcc/ada/libgnarl/a-astaco.ads
  66247d074eecb4270e7cf01d16e0cfce  gcc/ada/libgnarl/a-dinopr.ads
  c4e9620896065355c1895fb26186b8d2  gcc/ada/libgnarl/a-diroro.ads
  d33d03640fb0fae0a821bbeb1be518f7  gcc/ada/libgnarl/a-disedf.ads
! 351d64d720221bff94de3d240dd458f8  gcc/ada/libgnarl/a-dispat.adb
  380695cb64d70014260c4cbc5dc99e54  gcc/ada/libgnarl/a-dispat.ads
! fdb1b464be95c3d50cfb836acc6d1c09  gcc/ada/libgnarl/a-dynpri.adb
  a2784499cf21750d8840eeaf03b9e700  gcc/ada/libgnarl/a-dynpri.ads
! 040a9c5b4698bac3c9547819b39b4874  gcc/ada/libgnarl/a-etgrbu.ads
  3e60794a02e6ff3380c0daf20c7c6bc2  gcc/ada/libgnarl/a-exetim.ads
! 2b7e7c66e475e674815a6cf3c8f9e5b0  gcc/ada/libgnarl/a-exetim__darwin.adb
! 478217037a415b844cdf476842a608ac  gcc/ada/libgnarl/a-exetim__default.ads
! 2bcb0bdc5c20abc97d27e439696ed100  gcc/ada/libgnarl/a-exetim__mingw.adb
! bcc95e82abb8f455ee7d1a78f56d70cc  gcc/ada/libgnarl/a-exetim__mingw.ads
! 192849cd5099bff080a7aa7bc5681fcc  gcc/ada/libgnarl/a-exetim__posix.adb
  8a70e70c5d53efd2ae8de2a025db3217  gcc/ada/libgnarl/a-extiin.ads
  66ba8470ba07e36d23031779e1ebee31  gcc/ada/libgnarl/a-extiti.ads
! 2454dc03738d20b46c5462c868e1bfc0  gcc/ada/libgnarl/a-interr.adb
! 44ff625603e235e14cdda57f67915050  gcc/ada/libgnarl/a-interr.ads
! 396a633929c04959b3fc8580a5cc1f49  gcc/ada/libgnarl/a-intnam.ads
! e403b5ce9eeac886084a22cff5ba3471  gcc/ada/libgnarl/a-intnam__aix.ads
! 7123026a77a98d57af13fee21f892336  gcc/ada/libgnarl/a-intnam__darwin.ads
! 0bc2f05b2203df578ca7b85570ab1e33  gcc/ada/libgnarl/a-intnam__dragonfly.ads
! 373420aba03317b451075e81f71e5ab2  gcc/ada/libgnarl/a-intnam__dummy.ads
! 37b516aa93a97c68dd1f1e93df518b5d  gcc/ada/libgnarl/a-intnam__freebsd.ads
! bcbeb6fb547c460ae0e29c98d0d5eff6  gcc/ada/libgnarl/a-intnam__hpux.ads
! d04c1f6daa007ff9411d7c270c63296f  gcc/ada/libgnarl/a-intnam__linux.ads
! dcee1be8c2050d4ed1dbcd55a676afb7  gcc/ada/libgnarl/a-intnam__lynxos.ads
! 3bd4b4020bf0d8868c39297e411b9570  gcc/ada/libgnarl/a-intnam__mingw.ads
! b64a5ab76d153fd5c0e28b3413e12dce  gcc/ada/libgnarl/a-intnam__qnx.ads
! 60ebe59b1c2796713b50d3bd0430e8c3  gcc/ada/libgnarl/a-intnam__rtems.ads
! 4d6a051688ba6045f0698bed324d7d4f  gcc/ada/libgnarl/a-intnam__solaris.ads
! b3b8cf0ca98be609af8c17ca32002aae  gcc/ada/libgnarl/a-intnam__vxworks.ads
! 9c7ad0c99ef411c517123583a955c954  gcc/ada/libgnarl/a-reatim.adb
! 2bd4bc11894aa5c74224bcbc4f47f9ca  gcc/ada/libgnarl/a-reatim.ads
! 19322f3b3642284085c64cc5db130873  gcc/ada/libgnarl/a-retide.adb
! 29e8875ff15d1ddb3f7d9620593f47de  gcc/ada/libgnarl/a-retide.ads
! 428c372050da7a4ae256de4339056a24  gcc/ada/libgnarl/a-rttiev.adb
! f66dc484df24d7e819bc1fd5a6cd8403  gcc/ada/libgnarl/a-rttiev.ads
  c04bb8934366f43faa60d914e7ebea7a  gcc/ada/libgnarl/a-stcoed.ads
! 44dba5fb1c09aaa799612dac2309cbd5  gcc/ada/libgnarl/a-synbar.adb
! c3ca3242f847947c9be76142e0811dd7  gcc/ada/libgnarl/a-synbar.ads
! 5b3323debb1be2b67cdb5f20b855b774  gcc/ada/libgnarl/a-synbar__posix.adb
! 5f750c3d3b2e5a67cff633f2d230e2cc  gcc/ada/libgnarl/a-synbar__posix.ads
! ba325e01f4d5fee658afea5320e4be64  gcc/ada/libgnarl/a-sytaco.adb
! 6ca6a000058230fd35d843c2b13b94f9  gcc/ada/libgnarl/a-sytaco.ads
! b920b4eabc447b8bf070037900539dba  gcc/ada/libgnarl/a-tasatt.adb
! aedc9d3fcd1be52162e56fbd804d8808  gcc/ada/libgnarl/a-tasatt.ads
! cda374d848bea4661db7f945aa6bf4de  gcc/ada/libgnarl/a-taside.adb
! 835badd8ea622d45c809544b915fe127  gcc/ada/libgnarl/a-taside.ads
! 50a72c7b2571570a65b0f47af1b5b632  gcc/ada/libgnarl/a-tasini.adb
! 652b653590ebfc11db1f621244e5223e  gcc/ada/libgnarl/a-tasini.ads
! 94918b297f1ca43ae169fa572bf4d0c9  gcc/ada/libgnarl/a-taster.adb
  281fc9a014bf9c5a3677f1dd38cc9d5d  gcc/ada/libgnarl/a-taster.ads
! 52da797b89ea8a4d32c725d9a2091934  gcc/ada/libgnarl/g-boubuf.adb
! 5aa50dc4d56fa7cb86abdd4e5df51178  gcc/ada/libgnarl/g-boubuf.ads
! 431da8c439d3f6e4eda9e257f053fb7c  gcc/ada/libgnarl/g-boumai.ads
! a57a71c9a07762792f4a38c110cd12bb  gcc/ada/libgnarl/g-semaph.adb
! b2de0d35f22831b7fd4e993612c85546  gcc/ada/libgnarl/g-semaph.ads
! 2dd19922378e4eae92556ca3fec93f0d  gcc/ada/libgnarl/g-signal.adb
! 69b15c3a08a9deb69c0b3740ab54c528  gcc/ada/libgnarl/g-signal.ads
! c569b62016691637d283b08b6ba6eae7  gcc/ada/libgnarl/g-tastus.ads
! d0316a86df65a61fec4987240c2f9638  gcc/ada/libgnarl/g-thread.adb
! ded3a2e7f3a55f8048f167039936c031  gcc/ada/libgnarl/g-thread.ads
! 9778737d53be6a4426809d5f617ba7b7  gcc/ada/libgnarl/i-vxinco.adb
! f422c560a5fdc1fd9d25dfe2a493bf30  gcc/ada/libgnarl/i-vxinco.ads
  5cfb9f62dd9599caab03143b5745a967  gcc/ada/libgnarl/libgnarl.gpr
! 56d04bb1ffd511a5b8f1cc77e04335bd  gcc/ada/libgnarl/s-inmaop.ads
! da4656dfdd284ee93ad30ca5356da255  gcc/ada/libgnarl/s-inmaop__dummy.adb
! e995c209db9400af18b2deff6a793ac5  gcc/ada/libgnarl/s-inmaop__hwint.adb
! f2bc733c5c6be78e414f47098d465658  gcc/ada/libgnarl/s-inmaop__posix.adb
! 91a9e0ebbc280f2d4923e244cd8cae52  gcc/ada/libgnarl/s-interr.adb
! aa7573acaff7e7128086e8b47285b0c2  gcc/ada/libgnarl/s-interr.ads
! 99fd52629f6046b50d51d454c57ba284  gcc/ada/libgnarl/s-interr__dummy.adb
! 99d956d3d5ff871254356e567537b847  gcc/ada/libgnarl/s-interr__hwint.adb
! 6df8d2a396e67a5a2069fbd984486f4a  gcc/ada/libgnarl/s-interr__sigaction.adb
! 5f2e39e453eceb7d07083f158e90b170  gcc/ada/libgnarl/s-interr__vxworks.adb
! db63b30afb64adcc665da1353c13d6fa  gcc/ada/libgnarl/s-intman.ads
! 9c6ebff45b5829e1d1cb0e235f5ae9f6  gcc/ada/libgnarl/s-intman__android.adb
! dea424d43ea6c04dea6f6713bab342a2  gcc/ada/libgnarl/s-intman__dummy.adb
! d64281abf0a09a591e3df71519481ee0  gcc/ada/libgnarl/s-intman__lynxos.adb
! 41403a84256e0c09336297188aef63d3  gcc/ada/libgnarl/s-intman__mingw.adb
! f2234b14567c04495b8575274c8f66a9  gcc/ada/libgnarl/s-intman__posix.adb
! 9c43021ef2e8d720af0666bdc5da6642  gcc/ada/libgnarl/s-intman__qnx.adb
! 035c0aa6f92a4657671d7d40ea835f4b  gcc/ada/libgnarl/s-intman__rtems.adb
! b2b74cb0ac30ef08fe6c5c7d69fe76f1  gcc/ada/libgnarl/s-intman__rtems.ads
! 491781818b2247ccc775d60bcc40baa3  gcc/ada/libgnarl/s-intman__solaris.adb
! 36eacbc1a1e5d78bfb774d5ed7c9a0c6  gcc/ada/libgnarl/s-intman__susv3.adb
! f35b5f412ca0f78e3f3a9bbae163efe9  gcc/ada/libgnarl/s-intman__vxworks.adb
! 83a5d698f4a46da4e50a917b17350ffd  gcc/ada/libgnarl/s-intman__vxworks.ads
! 81d86ccaa527230e0079375a2b4136dd  gcc/ada/libgnarl/s-linux.ads
! 624a5ee9526d79b4d5722ff4d458d36f  gcc/ada/libgnarl/s-linux__alpha.ads
! 4678e2575358d9dafe98a20fc6369cb3  gcc/ada/libgnarl/s-linux__android.ads
! 67fd6c06b1589eb1e9b491ef5c1cfb30  gcc/ada/libgnarl/s-linux__hppa.ads
! ff3141a90b72f8202c7257e9e97bdacf  gcc/ada/libgnarl/s-linux__mips.ads
! 49495d623eee848b3ef80ac4c1019df8  gcc/ada/libgnarl/s-linux__riscv.ads
! f1f75b9e6b4c219c6fdeeadc11e5eb4a  gcc/ada/libgnarl/s-linux__sparc.ads
! 8d62c23cacac703154cbbf22aa10f5c0  gcc/ada/libgnarl/s-linux__x32.ads
! 16d28da9b8a01cf3dd40dfbdc620bd57  gcc/ada/libgnarl/s-mudido.adb
  e6304ab8465d5bc7fadbcaf1933a0980  gcc/ada/libgnarl/s-mudido.ads
! cc12d18402dc3cebfbc120e838a6f7e0  gcc/ada/libgnarl/s-mudido__affinity.adb
! 2930819916bf8ed54ddc30ee899f4871  gcc/ada/libgnarl/s-osinte__aix.adb
! f2dff66e053b50cb77de0bd0fb561065  gcc/ada/libgnarl/s-osinte__aix.ads
! f64dfbb57a4c514616196bf4aa9007a5  gcc/ada/libgnarl/s-osinte__android.adb
! 8c0a651b578a7417f6a59f2d977a4363  gcc/ada/libgnarl/s-osinte__android.ads
! dc0a8fd5a38b75a83c0d2f367a1e2347  gcc/ada/libgnarl/s-osinte__darwin.adb
! 23ac19d755ab1e35a7c55e7da5425d2d  gcc/ada/libgnarl/s-osinte__darwin.ads
! 9d08a5ea853ee16b52c5e71af40fe219  gcc/ada/libgnarl/s-osinte__dragonfly.adb
! d6bcbe31d4af7472373d4174b6aa9899  gcc/ada/libgnarl/s-osinte__dragonfly.ads
! 3c59fea8309fec0733d1a388dbb64bef  gcc/ada/libgnarl/s-osinte__dummy.ads
! 58543a0139ea7428947d4ee14d894981  gcc/ada/libgnarl/s-osinte__freebsd.adb
! ed2d1ff0c9aafb042fc7c861bb872852  gcc/ada/libgnarl/s-osinte__freebsd.ads
! a5aa5b6064c09d379bb6a9ee1159513a  gcc/ada/libgnarl/s-osinte__gnu.adb
! 5646ba9b498d7699b5223647b43aeac6  gcc/ada/libgnarl/s-osinte__gnu.ads
! b9f3a9464ef0a57a6d8ff43a1e90b1ff  gcc/ada/libgnarl/s-osinte__hpux-dce.adb
! 49ccdda83f94d1caec0b3c9a143e31ac  gcc/ada/libgnarl/s-osinte__hpux-dce.ads
! e4270b55c24c889705502729912a97cf  gcc/ada/libgnarl/s-osinte__hpux.ads
! edf29e73edaf253bf5d6c6f4ed08e3aa  gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads
! 3168711bf4773ea59a70cabce39b8744  gcc/ada/libgnarl/s-osinte__linux.ads
! a7c219b2fdb50e5a32b5ca576b91fcd0  gcc/ada/libgnarl/s-osinte__lynxos178.adb
! d1f22355a08c59cb48a2e63dc9fa7e3e  gcc/ada/libgnarl/s-osinte__lynxos178e.ads
! a86b253d2c8e7d307fa6d1db4934e806  gcc/ada/libgnarl/s-osinte__mingw.ads
! c6d2e215d9fc940eee24d3b8202be40a  gcc/ada/libgnarl/s-osinte__posix.adb
! 0acb76c1fb510126813cc5392c81abb1  gcc/ada/libgnarl/s-osinte__qnx.adb
! c941896fba9ee0321a216d5e5e6533e2  gcc/ada/libgnarl/s-osinte__qnx.ads
! fb826e23f1ada6e80318482812e9cdb7  gcc/ada/libgnarl/s-osinte__rtems.adb
! c7efdea3ae529f3dbe7fac7480e1b58c  gcc/ada/libgnarl/s-osinte__rtems.ads
! 48f8113a7f4085fba0ed58a65a3747b9  gcc/ada/libgnarl/s-osinte__solaris.adb
! 219205d487b6812b86c67cb9a5369036  gcc/ada/libgnarl/s-osinte__solaris.ads
! 6a527dd69ded6ecf03cffa2e2273cc8f  gcc/ada/libgnarl/s-osinte__vxworks.adb
! 3a2b78a326a3b217a96d401edd86cbf0  gcc/ada/libgnarl/s-osinte__vxworks.ads
! 3044ac62e9fa14903dbd20f998774e62  gcc/ada/libgnarl/s-osinte__x32.adb
! d56c74cb5230f306b99df99d0173c6a7  gcc/ada/libgnarl/s-proinf.adb
! c4eb07f1f605d04da7e10cd6075efce7  gcc/ada/libgnarl/s-proinf.ads
! bff4e5147efe10f8a857403b58d58206  gcc/ada/libgnarl/s-putaim.adb
! c0bc94ba5c8ac0efdee00c2a47448588  gcc/ada/libgnarl/s-putaim.ads
! c9f3c81d8438149a92cfaa019ecda4c8  gcc/ada/libgnarl/s-qnx.ads
! 423b17101f645ea886f230ef58f69329  gcc/ada/libgnarl/s-solita.adb
! 8eabc04c6dd6ac2f4a8f7e2dc3d8ef9b  gcc/ada/libgnarl/s-solita.ads
! 134c608d81d1ffe92eec2ebf8bd46387  gcc/ada/libgnarl/s-stusta.adb
! 87681f98c41f754abf3a11b909ba1278  gcc/ada/libgnarl/s-stusta.ads
! f6ac5a0c075c1e347d70a7fa88e64ff0  gcc/ada/libgnarl/s-taasde.adb
! 8bc0ada93c861ff912e1ac1c7c35839a  gcc/ada/libgnarl/s-taasde.ads
! 12c0be7a7aa596c92464ddac76b2a85c  gcc/ada/libgnarl/s-tadeca.adb
! ea3a9f3581fade9879201e44b5a88c4c  gcc/ada/libgnarl/s-tadeca.ads
! 85dfc264210906a80ad09984c3d756f9  gcc/ada/libgnarl/s-tadert.adb
! b58d97b9cc5af0a3d40484f2a2f788a5  gcc/ada/libgnarl/s-tadert.ads
! 70aaa220e27aff3413ec7868c3405802  gcc/ada/libgnarl/s-taenca.adb
! 0d51d8c5ba1eb9fae48a5ed5dbf3ddeb  gcc/ada/libgnarl/s-taenca.ads
! 4b44bbfaf2b28f517960c74f544e51bf  gcc/ada/libgnarl/s-taprob.adb
! 275b510eed63de65855a8c2c094e1d6c  gcc/ada/libgnarl/s-taprob.ads
! 54de2e2648b91941489bc5540d0c7b2c  gcc/ada/libgnarl/s-taprop.ads
! d0470e39c593b3221f3144e31077acfa  gcc/ada/libgnarl/s-taprop__dummy.adb
! 03dfbcf4714bd43ef7fdda008e931854  gcc/ada/libgnarl/s-taprop__hpux-dce.adb
! c7aeab8526e44003049730e6bf49ccde  gcc/ada/libgnarl/s-taprop__linux.adb
! 649e7e8ebf59815c6185eebb05a7a00c  gcc/ada/libgnarl/s-taprop__mingw.adb
! e3e513deea753a8de421d9efdeae962d  gcc/ada/libgnarl/s-taprop__posix.adb
! f3f4fd31bccc8752592620d84ecce439  gcc/ada/libgnarl/s-taprop__qnx.adb
! 220cb375dc8021a33cbeffa851808c77  gcc/ada/libgnarl/s-taprop__rtems.adb
! 80442b35ee40f37dbabe3ea91d58cfda  gcc/ada/libgnarl/s-taprop__solaris.adb
! 4f5ad59eeb4b703f207a4462f1d31540  gcc/ada/libgnarl/s-taprop__vxworks.adb
! 11e05dd7d866061a45e1fbbc93b5802d  gcc/ada/libgnarl/s-tarest.adb
! c51b562f5ec0b6dbd196d3fd3ddcfd6b  gcc/ada/libgnarl/s-tarest.ads
! f48726ef977b838259a76265b124ad08  gcc/ada/libgnarl/s-tasdeb.adb
! 9b7c827fa58dcc7dfdd48bf974235301  gcc/ada/libgnarl/s-tasdeb.ads
! 043d2b3990dec8da4ba324554e359538  gcc/ada/libgnarl/s-tasinf.adb
! 3addfa564e3482bd939511d291ebf94d  gcc/ada/libgnarl/s-tasinf.ads
! 2d0e8453cfc58006b8c44f96299e5eb8  gcc/ada/libgnarl/s-tasinf__linux.adb
! 71256458718e760c7e306a5d5a160243  gcc/ada/libgnarl/s-tasinf__linux.ads
! eb31fe092d38a5612d59abfc574c12e6  gcc/ada/libgnarl/s-tasinf__mingw.adb
! 2067c941cedd27d3c6e8df08d8cbd8d7  gcc/ada/libgnarl/s-tasinf__mingw.ads
! 729bcb094c862393c6cb702ae0bcf39c  gcc/ada/libgnarl/s-tasinf__solaris.adb
! 636b2cbf0db344726e8277d8c18d91a6  gcc/ada/libgnarl/s-tasinf__solaris.ads
! e7f75d3d1466d6e5fbaa1b779e4866e3  gcc/ada/libgnarl/s-tasinf__vxworks.ads
! 1b3bf7fa01113f6c9efdeb55f9d31138  gcc/ada/libgnarl/s-tasini.adb
! 3806746835cf8ff98234411d89377e80  gcc/ada/libgnarl/s-tasini.ads
! 03165813d6641807744919a521faad36  gcc/ada/libgnarl/s-taskin.adb
! 22a06d5024bf407badd6b300ca5ca58e  gcc/ada/libgnarl/s-taskin.ads
! 9e91219bcf83077c619e83daf50bdb22  gcc/ada/libgnarl/s-taspri__dummy.ads
! 05b646d57cadcf7182eff42332a90a76  gcc/ada/libgnarl/s-taspri__hpux-dce.ads
! 19f3a1eec171a3ffe91d1f98bb30c949  gcc/ada/libgnarl/s-taspri__lynxos.ads
! 61eed4b789e11dd6137cfbbb5842077a  gcc/ada/libgnarl/s-taspri__mingw.ads
! 3015b1ea65c682004da864d34fc6a12d  gcc/ada/libgnarl/s-taspri__posix-noaltstack.ads
! 63ce6d4bbe9d770832d785c8a379607d  gcc/ada/libgnarl/s-taspri__posix.ads
! 469b53e1c0a17b64dc348a023746afee  gcc/ada/libgnarl/s-taspri__solaris.ads
! 128ea90bad4f4990adda3669ad25c18e  gcc/ada/libgnarl/s-taspri__vxworks.ads
! 3a201fa591cb2a268f9084c183018f4b  gcc/ada/libgnarl/s-tasque.adb
! 78056ab6426bb8098f310e9bea365e90  gcc/ada/libgnarl/s-tasque.ads
! b336a9ba43a74bdd9443cb1ba16ab212  gcc/ada/libgnarl/s-tasren.adb
! 10bf205b78fa36244143df835e14ff13  gcc/ada/libgnarl/s-tasren.ads
! 6260451d26d85b8f3a2587b2251f811b  gcc/ada/libgnarl/s-tasres.ads
! fb061e1d0771c514fb4e53cc83990043  gcc/ada/libgnarl/s-tassta.adb
! d86f0026aeaefb0f8a2a89ab2a36b571  gcc/ada/libgnarl/s-tassta.ads
! dae0dac3a418fbec1d9b7255448e2571  gcc/ada/libgnarl/s-tasuti.adb
! a7e953a41cc7649df6a9998209fa4b38  gcc/ada/libgnarl/s-tasuti.ads
! af510e119db83ef9969f2b45af3420a7  gcc/ada/libgnarl/s-tataat.adb
! 4423ce84b52aab4725f5bbe767f33d73  gcc/ada/libgnarl/s-tataat.ads
! c52930e64d6736a5be88d1006066fdf3  gcc/ada/libgnarl/s-tpinop.adb
! 30e79bba7723bc576eeb7e613c74df37  gcc/ada/libgnarl/s-tpinop.ads
! e302b004b7802b331ac82cc2877ce71a  gcc/ada/libgnarl/s-tpoaal.adb
! c06b997212879ef96d39a88e2b848529  gcc/ada/libgnarl/s-tpoben.adb
! 593d402c991656e6d2c2c4af863fe36f  gcc/ada/libgnarl/s-tpoben.ads
! 5818045f4a13c1f7fab71aeafea57bff  gcc/ada/libgnarl/s-tpobmu.adb
! 56f873ea76620289f40d61798af7b7ec  gcc/ada/libgnarl/s-tpobmu.ads
! 34aa32a831aaef758006f8b890035d55  gcc/ada/libgnarl/s-tpobop.adb
! 034ad2fabce49a88c7d9c76df1e6ac12  gcc/ada/libgnarl/s-tpobop.ads
! f0dca411de61fbef206fb11e431ae1f3  gcc/ada/libgnarl/s-tpopmo.adb
! f3a184f007aab22edf66baffc001b17d  gcc/ada/libgnarl/s-tpopsp__posix-foreign.adb
! b1ea3748914078d10ffc378cee1502d4  gcc/ada/libgnarl/s-tpopsp__posix.adb
! c0c3de1c930c184c62a3eb82811531d4  gcc/ada/libgnarl/s-tpopsp__solaris.adb
! 6b0b57b215cc6f46ab44fdbf563000e6  gcc/ada/libgnarl/s-tpopsp__tls.adb
! 260064ad2ef59804cbec7082ad7ddd03  gcc/ada/libgnarl/s-tpopsp__vxworks-rtp.adb
! 489fc3e21e5ef1fb2d148799e165977e  gcc/ada/libgnarl/s-tpopsp__vxworks-tls.adb
! fa12151ccc2a857e0eca75cd7cbaa35a  gcc/ada/libgnarl/s-tpopsp__vxworks.adb
! 63aded0418bdec40ad483a0291f7a555  gcc/ada/libgnarl/s-tporft.adb
! b5bfb729e16af2e2eab58e033968664c  gcc/ada/libgnarl/s-tposen.adb
! 5c160aaba1e0a653ca4608f88647a540  gcc/ada/libgnarl/s-tposen.ads
! 0d99cd8d8c95a16e21ad2c46100d3ab5  gcc/ada/libgnarl/s-vxwext.adb
! 432f68307a56babd70275b23dd20d6a6  gcc/ada/libgnarl/s-vxwext.ads
! ea881621779cbc0da24dfd9029d25efe  gcc/ada/libgnarl/s-vxwext__kernel-smp.adb
! a546979a7a4ad19f3fc03b6a33c6f495  gcc/ada/libgnarl/s-vxwext__kernel.adb
! 42b5a567219a8c2c5468e83aeb8212f2  gcc/ada/libgnarl/s-vxwext__kernel.ads
! 652a1ad1c17a077bcf8bf82e111a6318  gcc/ada/libgnarl/s-vxwext__rtp-smp.adb
! e394109cc34a5790a4e617e9a24972d7  gcc/ada/libgnarl/s-vxwext__rtp.adb
! 2d0678e5e063f1cf9156937b881c1ebe  gcc/ada/libgnarl/s-vxwext__rtp.ads
! c0cff1664a65cc7d9f7260d001d4a5c3  gcc/ada/libgnarl/s-vxwork__aarch64.ads
! a4742952f515360f76143b9375401f07  gcc/ada/libgnarl/s-vxwork__arm.ads
! cc5c56c9873f0656a092384fa42adb7b  gcc/ada/libgnarl/s-vxwork__ppc.ads
! 45636bc1fea8cde801064dbe70c511af  gcc/ada/libgnarl/s-vxwork__x86.ads
! 937d831fea225e716f6d529c3ac9e727  gcc/ada/libgnarl/thread.c
! 582b7236285487c4d89e7c469b6dc571  gcc/ada/libgnat/a-assert.adb
! 236b6937f2a5909c39e030cbd2e51f34  gcc/ada/libgnat/a-assert.ads
! 03a79609a6279489ed1a50526f559185  gcc/ada/libgnat/a-btgbso.adb
! b82e85e4dc5756b89171371c58b9e203  gcc/ada/libgnat/a-btgbso.ads
! 34894a66844b2862af0a9cbf3adb476a  gcc/ada/libgnat/a-calari.adb
! b1b33fb3296e8c51799b89afc5e72a01  gcc/ada/libgnat/a-calari.ads
! de846e7a614a0f9ca7cd4955ae336017  gcc/ada/libgnat/a-calcon.adb
! 75bdb5b8c80473f8813cb05c13157c72  gcc/ada/libgnat/a-calcon.ads
! 22f677f25e5e27daa2038d9627cd9f44  gcc/ada/libgnat/a-caldel.adb
! 7f98833a57731e93b3aa6a5863945584  gcc/ada/libgnat/a-caldel.ads
! 91152f7f64f85a0a773e06defc576dc4  gcc/ada/libgnat/a-calend.adb
! 88562c78b8e5678863ff36a5a1607f71  gcc/ada/libgnat/a-calend.ads
! de6e66567a5291bb5db0aaa94e744ccf  gcc/ada/libgnat/a-calfor.adb
! f50378872d2d5b198bfb9d5d9f3409b7  gcc/ada/libgnat/a-calfor.ads
! 9ba9bb39dcf7b5952dc2b02756b98960  gcc/ada/libgnat/a-catizo.adb
  d731f2a00c2328507e1708628b8f8534  gcc/ada/libgnat/a-catizo.ads
! 382ac7c6f922a443bad73888cd1344f5  gcc/ada/libgnat/a-cbdlli.adb
! fa02f229c5f7e518dc98e829d81a6ef8  gcc/ada/libgnat/a-cbdlli.ads
! c664f833a9a20ca361e820d872c06d70  gcc/ada/libgnat/a-cbhama.adb
! 5ed223611ec8bc1662e7a5d9d347a032  gcc/ada/libgnat/a-cbhama.ads
! dcadc7a1558ffaa09e61fbdcf719364d  gcc/ada/libgnat/a-cbhase.adb
! 53c8dffcd54c46def43cf48d75fb3f64  gcc/ada/libgnat/a-cbhase.ads
! e875f5ae6f913565a94486d600853841  gcc/ada/libgnat/a-cbmutr.adb
! 012e0976b7e9b58c9e178589e8940541  gcc/ada/libgnat/a-cbmutr.ads
! a42f7e625a86fa9c7dff5fa490b9c9b2  gcc/ada/libgnat/a-cborma.adb
! 97560683f6bd72bccb4a40a87dc00163  gcc/ada/libgnat/a-cborma.ads
! a30c80f65ee0fa284357e41f2068c737  gcc/ada/libgnat/a-cborse.adb
! 4c891b6ac68096c35e6222101c04e240  gcc/ada/libgnat/a-cborse.ads
! bd7f09fd2a8b87924aaa9ac1881c791d  gcc/ada/libgnat/a-cbprqu.adb
! 0b09c22a95134b4de8a6da2cc3b5fdf2  gcc/ada/libgnat/a-cbprqu.ads
! 7e38fd065d8e833f8d4e3db3e69d7a43  gcc/ada/libgnat/a-cbsyqu.adb
! d6999f7009fca8381619db1a60008312  gcc/ada/libgnat/a-cbsyqu.ads
! 2473b923c9ea955608bc8aced1171fa4  gcc/ada/libgnat/a-cdlili.adb
! 73b15b405cb2082228090a5aa6f618fe  gcc/ada/libgnat/a-cdlili.ads
! a0e4e874bbf05bf59e78fde76c08aef3  gcc/ada/libgnat/a-cfdlli.adb
! 1563a4b9368f97dc5b97577682f88e75  gcc/ada/libgnat/a-cfdlli.ads
! a830cdf684ba7e225c96c9d1451862a0  gcc/ada/libgnat/a-cfhama.adb
! cd767ce671b3462d889d1b4950916992  gcc/ada/libgnat/a-cfhama.ads
! bca7f6db9518eaf569150a8173786e21  gcc/ada/libgnat/a-cfhase.adb
! c058cd48b243469e59368ef89ecc6814  gcc/ada/libgnat/a-cfhase.ads
! 5b841fe03cdf1f831cdc7e767bb79663  gcc/ada/libgnat/a-cfinve.adb
! 2b57ce0cddd07f6633b7eec84e4c3b23  gcc/ada/libgnat/a-cfinve.ads
! 8ea71d09c239a8b0e651cd12f7bd1fd7  gcc/ada/libgnat/a-cforma.adb
! f9ac140fc5fdb06e701ddd2e7da488ee  gcc/ada/libgnat/a-cforma.ads
! a7b6e67ad72c5aece24ff77950b3d568  gcc/ada/libgnat/a-cforse.adb
! 09604cfbc3e19d8e5ccf3b44b1c9e7b5  gcc/ada/libgnat/a-cforse.ads
! 3d1cffc2474b9f8909f43f224c27daac  gcc/ada/libgnat/a-cgaaso.adb
! 465965485b00f97beafb520c5eba3809  gcc/ada/libgnat/a-cgaaso.ads
! 6c40c9084a65a37775fe210be07102a1  gcc/ada/libgnat/a-cgarso.adb
  ef7fab6c5e61256ac64c9dae1dd27960  gcc/ada/libgnat/a-cgarso.ads
! 644e62088b096adbcf64c3397b0490a0  gcc/ada/libgnat/a-cgcaso.adb
  68226484befc5e389cd3dafaab608090  gcc/ada/libgnat/a-cgcaso.ads
! dbbd507fad4e2ca383c046452628a917  gcc/ada/libgnat/a-chacon.adb
! f03486ec552fb8c5cb102545620ad8a0  gcc/ada/libgnat/a-chacon.ads
! fcc131a98cd8ee498eec5adf26ede4bb  gcc/ada/libgnat/a-chahan.adb
! 130d3029181113bb95ae3fe4b9b25ac0  gcc/ada/libgnat/a-chahan.ads
  00b37c98f6f96d2b5499c1f98cb503f0  gcc/ada/libgnat/a-charac.ads
! 1e2a45aa2f9324faab423eb0f9a85a8e  gcc/ada/libgnat/a-chlat1.ads
! 67d93fab209fc0fe3506947bf472cf6f  gcc/ada/libgnat/a-chlat9.ads
! 175bc551a4b2fba1d00dd340a2814d72  gcc/ada/libgnat/a-chtgbk.adb
! e049bc9f2b7793315f07b6e38aeb2086  gcc/ada/libgnat/a-chtgbk.ads
! a2013f4c43e7d05f22e1781f2d2faa84  gcc/ada/libgnat/a-chtgbo.adb
! 1ddbe2d95cb9f32fe04071725147c6d7  gcc/ada/libgnat/a-chtgbo.ads
! 5b04ff5acd8c64bcd28e37196fb0ab99  gcc/ada/libgnat/a-chtgke.adb
! fd7ab87a475f6e63304ff7bf13b84a4d  gcc/ada/libgnat/a-chtgke.ads
! 022589ae0a787e5767c9dc5ad97aee3f  gcc/ada/libgnat/a-chtgop.adb
! 95b654ce39cf2203d35ed0d05853af8f  gcc/ada/libgnat/a-chtgop.ads
! 8b27154c2019e24f9747280874cd3327  gcc/ada/libgnat/a-chzla1.ads
! eca5170c6b65e83c534882f6447e49bf  gcc/ada/libgnat/a-chzla9.ads
! fdc2ebc9e918e731d8a6592927c9c542  gcc/ada/libgnat/a-cidlli.adb
! 691360ce9169d4393c7a9184fa0a83ab  gcc/ada/libgnat/a-cidlli.ads
! 2146038acf1a60ac154b02ef2d17ae87  gcc/ada/libgnat/a-cihama.adb
! b32f575be81c7a1b57e07db05eac06cf  gcc/ada/libgnat/a-cihama.ads
! 16ebd1af51d07ca930c52d0398bc67e9  gcc/ada/libgnat/a-cihase.adb
! 83549427e7b10f1f3603e6ad66a5ca46  gcc/ada/libgnat/a-cihase.ads
! 848bfb05726ab11e6ac16e1e24f335e7  gcc/ada/libgnat/a-cimutr.adb
! a365f797e5a2d5dbe4477e2d5cc04157  gcc/ada/libgnat/a-cimutr.ads
! 775259b331e527fe6b65f8e5dcf07379  gcc/ada/libgnat/a-ciorma.adb
! 55ce5791e4c625d0f1ce3fe6fd4f5b18  gcc/ada/libgnat/a-ciorma.ads
! 68bfa9c8318b821e9b52ed625876fd48  gcc/ada/libgnat/a-ciormu.adb
! 0bfc943c8d4c4113c2935b002aa68683  gcc/ada/libgnat/a-ciormu.ads
! aa9502ebc17e7b649d4e730780167bf3  gcc/ada/libgnat/a-ciorse.adb
! 268968fc183100c86203ecdec455792d  gcc/ada/libgnat/a-ciorse.ads
! 1938bc89252c4c191bcec565b187f1f1  gcc/ada/libgnat/a-clrefi.adb
! cdbb23798f43e96aa5088e1b5d1d1788  gcc/ada/libgnat/a-clrefi.ads
! 6b9ee89ef973f5f147b5b128f50ca0f6  gcc/ada/libgnat/a-coboho.adb
! 8605177c36ba8b81026e41c56a856da1  gcc/ada/libgnat/a-coboho.ads
! a9f14e60ac5b5f17490b092278812def  gcc/ada/libgnat/a-cobove.adb
! f175d425aaf48570a128e1d18ea9214e  gcc/ada/libgnat/a-cobove.ads
! 2a44c722c026ae90712295ae989181bc  gcc/ada/libgnat/a-cofove.adb
! eb890b83bb02e05de3160a967d8347e9  gcc/ada/libgnat/a-cofove.ads
! 915c7ad5ff167a36a491b0412989297a  gcc/ada/libgnat/a-cofuba.adb
! 481878d52cf5ee4aba7668cdc974c4ef  gcc/ada/libgnat/a-cofuba.ads
! d7a2eac1c9dd25c1612ca7abc1a64f33  gcc/ada/libgnat/a-cofuma.adb
! 775d616e73e7cad259bfdf06f6f71e6f  gcc/ada/libgnat/a-cofuma.ads
! cd64570e27728b7a2c4cb5f34a34300a  gcc/ada/libgnat/a-cofuse.adb
! e535f4bcb789f54b4a40fb7cf6307fe4  gcc/ada/libgnat/a-cofuse.ads
! d841796ced396939620ee85b6b350471  gcc/ada/libgnat/a-cofuve.adb
! cafaba415707233d9404e71ca0442c7d  gcc/ada/libgnat/a-cofuve.ads
! 369048db7f658eacd76b5fd218facfa5  gcc/ada/libgnat/a-cogeso.adb
! eeea1c826995ab131aa497d15b4dda6e  gcc/ada/libgnat/a-cogeso.ads
! d55d35727cdcc8d9881498a60e568cd1  gcc/ada/libgnat/a-cohama.adb
! d2410af268b9e5f3c5368774de07cf1a  gcc/ada/libgnat/a-cohama.ads
! 33f69a7d47a4dd21ff3227a69fa17bcb  gcc/ada/libgnat/a-cohase.adb
! 01977a2ecaeae3ba33fa5e177f9b501a  gcc/ada/libgnat/a-cohase.ads
! e656087ae9d1688fd1827a5d0710e8f8  gcc/ada/libgnat/a-cohata.ads
! f7cc86c4a40767c3f59126523a6c7b81  gcc/ada/libgnat/a-coinho.adb
! c69c6b5fbb5109eb29211632d6699147  gcc/ada/libgnat/a-coinho.ads
! 5ea911d48cc7f23ccb6bc11a37d92bed  gcc/ada/libgnat/a-coinho__shared.adb
! 46bf2be794b5165e208d3521de9f554d  gcc/ada/libgnat/a-coinho__shared.ads
! 5129af522d1dfe92b50ea3a397f527c3  gcc/ada/libgnat/a-coinve.adb
! fcac6a9911c53e4d213163d820fd4766  gcc/ada/libgnat/a-coinve.ads
! 9952cf4c7c5da8a7a465049de3197651  gcc/ada/libgnat/a-colien.adb
! 4c394e560dbeb1db82c16fd8d62b4d5c  gcc/ada/libgnat/a-colien.ads
! 0a68844d9d1b7cc976386515cb1f6064  gcc/ada/libgnat/a-colire.adb
! 35f53ded1c8d2259c76e7d58d3a47915  gcc/ada/libgnat/a-colire.ads
! 3694220305e42604dd27d7036c6b0263  gcc/ada/libgnat/a-comlin.adb
! 50b3e0a61f66a2a1bc4261e55dc01067  gcc/ada/libgnat/a-comlin.ads
! 9233073b21e45cb0acb2e9f2cf947055  gcc/ada/libgnat/a-comutr.adb
! c454a2a4c95c657fb05335ce47eeb2a3  gcc/ada/libgnat/a-comutr.ads
! b290becc4cd7cf002538becbd5de39cd  gcc/ada/libgnat/a-conhel.adb
! 762a5237ee092796b3a5ab33ec54451f  gcc/ada/libgnat/a-conhel.ads
  38baf99435420fa514890cac49ee9242  gcc/ada/libgnat/a-contai.ads
! b7ae250e7818c4cfd2519c9ab4d852b0  gcc/ada/libgnat/a-convec.adb
! 8d366ab4430dc4727d93a5cfb054cd7e  gcc/ada/libgnat/a-convec.ads
! dae3688109574f53d9e055acb000ba41  gcc/ada/libgnat/a-coorma.adb
! d7662464c94d9fb9fd2db58f911a0fce  gcc/ada/libgnat/a-coorma.ads
! 45e1368288f9a9ff775ff32fba68690e  gcc/ada/libgnat/a-coormu.adb
! 739c794f4020959d926a6d20cafb6f9b  gcc/ada/libgnat/a-coormu.ads
! c65affa20179957cf5576e78f93b264b  gcc/ada/libgnat/a-coorse.adb
! d22a7503c9be279a05e4baea0d0319e4  gcc/ada/libgnat/a-coorse.ads
! 4eb7fd0c53079b8c1d9eac9fcd6a659f  gcc/ada/libgnat/a-coprnu.adb
! c3de76d8362a8ac6c252e05d18fc5f2b  gcc/ada/libgnat/a-coprnu.ads
! 42e76ab0e3e2d87d4db9f465c6a67824  gcc/ada/libgnat/a-costso.adb
! 861198c84867b399f9174598b1ac3cd7  gcc/ada/libgnat/a-costso.ads
  2399731eabd6e0bbc0a8f28a60d3c3c8  gcc/ada/libgnat/a-coteio.ads
! 9995372e8ed652d8a09c2032eafa4598  gcc/ada/libgnat/a-crbltr.ads
! 20f3ecfea64d55f0d4667a03d7414469  gcc/ada/libgnat/a-crbtgk.adb
! b49e62de116fc64637bcf868ef225e71  gcc/ada/libgnat/a-crbtgk.ads
! fcd7ee0590d1ff1055e06c0b61ad8785  gcc/ada/libgnat/a-crbtgo.adb
! adee1b7f511f38f0162f01638da1a42e  gcc/ada/libgnat/a-crbtgo.ads
! cb7afadff663ea819331818166714b74  gcc/ada/libgnat/a-crdlli.adb
! 20409ef9d365f603efcc42b9ee9ef38e  gcc/ada/libgnat/a-crdlli.ads
! 90a287dac8982607ebfabbdb3824cc9c  gcc/ada/libgnat/a-csquin.ads
! 47bbee2be256be64dee6652f033a2b06  gcc/ada/libgnat/a-cuprqu.adb
! bcba9d992d76b390152427ad737f6a8a  gcc/ada/libgnat/a-cuprqu.ads
! 80212d4c55a2bd107335c66e914aab06  gcc/ada/libgnat/a-cusyqu.adb
! c39ab4c333a10f6cc925fa919c468254  gcc/ada/libgnat/a-cusyqu.ads
! 76273491b7488feced0194edd7d62ffb  gcc/ada/libgnat/a-cwila1.ads
! 0e04684a74ecc11ff0cb3a56636290c5  gcc/ada/libgnat/a-cwila9.ads
! fa84f9ec15d00bc577b4e345ca16f248  gcc/ada/libgnat/a-decima.adb
! 679dc0ecd62c41c078d8bfae9845354e  gcc/ada/libgnat/a-decima.ads
! 31d1a4289a46de1e84ec8e2ea13d6055  gcc/ada/libgnat/a-decima__128.ads
! 6f84c7e8c084c223ee9906222357625d  gcc/ada/libgnat/a-dhfina.adb
! 4789f4388f7fa478e385c205046dfbcb  gcc/ada/libgnat/a-dhfina.ads
! 17f6caefef521b6123453b49af7869bf  gcc/ada/libgnat/a-diocst.adb
! 8cd70585dd107f13b580170319124c9d  gcc/ada/libgnat/a-diocst.ads
! 6f072aa491ca6fca699f51f27340aa1b  gcc/ada/libgnat/a-direct.adb
! 4ae2a342ff95b3cea5b02c497f94ec01  gcc/ada/libgnat/a-direct.ads
! e77d1f67d0aa6fb8781d2765075a6582  gcc/ada/libgnat/a-direio.adb
! 66d4a0acd1db496944356b02876ca8d0  gcc/ada/libgnat/a-direio.ads
! 126a88b751f395752515ea978efc50c3  gcc/ada/libgnat/a-dirval.adb
! cbe4b5bd9606465d0396f16c000d2b39  gcc/ada/libgnat/a-dirval.ads
! b7a3e9e464aab549a94a48496905e96d  gcc/ada/libgnat/a-dirval__mingw.adb
! bc1b5065bc4315e91a7c4dd3f73c4cb0  gcc/ada/libgnat/a-einuoc.adb
! 86198687c22068b08413fcf8af08ce44  gcc/ada/libgnat/a-einuoc.ads
! 12db9e2d9d9d0c8836e34e6330deb21b  gcc/ada/libgnat/a-elchha.adb
! 1c16eba0bdf7ef2662ced22af79024ed  gcc/ada/libgnat/a-elchha.ads
! f03c54b8ef26057d5c4b1b3ca07034dd  gcc/ada/libgnat/a-envvar.adb
  e77a221e76c3e19394bf433277f04c0f  gcc/ada/libgnat/a-envvar.ads
! 2a9ea3bce3a71b08842e510545c546bb  gcc/ada/libgnat/a-excach.adb
! b171a4ee6dd6787f69fcf4124250ed9f  gcc/ada/libgnat/a-except.adb
! 81b3e317172b572175224a65fa50a4a2  gcc/ada/libgnat/a-except.ads
! 094992614936ca98ea1687d0c76ffe29  gcc/ada/libgnat/a-exctra.adb
! a17e860742565a86ea03e8bdaac2e5e0  gcc/ada/libgnat/a-exctra.ads
! de66c7d18e56880fedc5ebb0131abe63  gcc/ada/libgnat/a-exexda.adb
! 8039c9a647cd3c43d50b708fde8536cb  gcc/ada/libgnat/a-exexpr.adb
! faedb14db444e59f34da123c06071472  gcc/ada/libgnat/a-exextr.adb
! 08b3639069fc5c896fae5c21402df1e9  gcc/ada/libgnat/a-exstat.adb
! 97ec396d774a614c1264f16a937de60f  gcc/ada/libgnat/a-finali.adb
! 6f5b7ec94926e5eada5685999652d61b  gcc/ada/libgnat/a-finali.ads
  b6ba93109a253e15591b1eefa685bc24  gcc/ada/libgnat/a-flteio.ads
  f7e337bf223b3a491d58fb6db81ef7b1  gcc/ada/libgnat/a-fwteio.ads
  2bf5d12193c278c4a482ae0dda1129a9  gcc/ada/libgnat/a-fzteio.ads
  195c855e8e96de38bc292de9a4544754  gcc/ada/libgnat/a-inteio.ads
! d13d02272762c17bcc595e933ecb3be4  gcc/ada/libgnat/a-ioexce.ads
! 9dcee082a445bc735fd96489734c7384  gcc/ada/libgnat/a-iteint.ads
  39b8821573ea224defa1f1b9b1a5248e  gcc/ada/libgnat/a-iwteio.ads
  b237e9ea879dc91ffa87b41e0d78b2c2  gcc/ada/libgnat/a-izteio.ads
  6a6cf739ac25eff18ec7bded73be1862  gcc/ada/libgnat/a-lcteio.ads
*************** efa823912da5d16e6f8d4aa6f78b768a  gcc/ad
*** 1290,1321 ****
  d90ff1db87e7c9bf483659701a55671c  gcc/ada/libgnat/a-llltio.ads
  b8fcc586001cbdaddc04c29fc016fa48  gcc/ada/libgnat/a-lllwti.ads
  5faeef2817310c83968117416e0120b0  gcc/ada/libgnat/a-lllzti.ads
! 45fa2df9387fae84d3ba3ade42e0682b  gcc/ada/libgnat/a-locale.adb
! d22e1ca62d75a4e0e8023a34b7863b49  gcc/ada/libgnat/a-locale.ads
! 23b44f413e4b80dbecc0e33168fb5f95  gcc/ada/libgnat/a-nagefl.ads
! c52e9e8933b773432bfa87331620f917  gcc/ada/libgnat/a-naliop.ads
! a959bd8bae8da9f00fd5f91efa286917  gcc/ada/libgnat/a-naliop__nolibm.ads
! 18bd20017a389a91f420a1cb17167669  gcc/ada/libgnat/a-nallfl.ads
! 4595410eb65e66ef7cbd32fcbd66def3  gcc/ada/libgnat/a-nallfl__wraplf.ads
! c5e8730e95401b8aa869382ff80f649a  gcc/ada/libgnat/a-nalofl.ads
! 7c042990bdd9a04daf0cc84a3e3fba4b  gcc/ada/libgnat/a-nashfl.ads
! 059c349b3ea537d1e3b772e0caa1d40b  gcc/ada/libgnat/a-nashfl__wraplf.ads
! 508eca4d1e5d19d392789b69ac605ea1  gcc/ada/libgnat/a-nbnbin.adb
! 7811ac446706dea5c20591610f9af751  gcc/ada/libgnat/a-nbnbin.ads
! f2dca2652e1c099596ef863854248921  gcc/ada/libgnat/a-nbnbin__gmp.adb
! c0c0bf5d143d9b3bb8646f51b72ef861  gcc/ada/libgnat/a-nbnbre.adb
! 67bc747ca7c871121c3f54d1c836d6a3  gcc/ada/libgnat/a-nbnbre.ads
  f8a74f5169bf9eba09b0050d2ce025f4  gcc/ada/libgnat/a-ncelfu.ads
! 5125d4f41876a386b0e8bf540b07d86e  gcc/ada/libgnat/a-ngcefu.adb
  2e229d27b615410dbc242fd1d7d4bd98  gcc/ada/libgnat/a-ngcefu.ads
! f508133ab0dab1217aa33e72374486c6  gcc/ada/libgnat/a-ngcoar.adb
  a26d13d8c2030d72490c9b3c42f94f28  gcc/ada/libgnat/a-ngcoar.ads
! 04c826aa5fde661e20708f1f008d9c0b  gcc/ada/libgnat/a-ngcoty.adb
! 2a202fa0d154986212702488cea5dc12  gcc/ada/libgnat/a-ngcoty.ads
! 0d9713a59ea26518625dbf4d00150473  gcc/ada/libgnat/a-ngelfu.adb
! 4bdba1ee485a383c0c5346adb028a3ae  gcc/ada/libgnat/a-ngelfu.ads
! 9f3c43762dab180e5fe4166bdd4eebc6  gcc/ada/libgnat/a-ngrear.adb
! 671b98acd48d6c8c1aff06ba18a1733e  gcc/ada/libgnat/a-ngrear.ads
  7f894c161f872e68b50172715a8a311e  gcc/ada/libgnat/a-nlcefu.ads
  307582c16af8c2d164031fd8dfb72581  gcc/ada/libgnat/a-nlcoar.ads
  2341d761d1df9c74f5d4396b2a243874  gcc/ada/libgnat/a-nlcoty.ads
--- 1314,1347 ----
  d90ff1db87e7c9bf483659701a55671c  gcc/ada/libgnat/a-llltio.ads
  b8fcc586001cbdaddc04c29fc016fa48  gcc/ada/libgnat/a-lllwti.ads
  5faeef2817310c83968117416e0120b0  gcc/ada/libgnat/a-lllzti.ads
! 7d78be8a273c54cd7bb58c3b08b35117  gcc/ada/libgnat/a-locale.adb
! c779499f316926e0bd186b76b6571474  gcc/ada/libgnat/a-locale.ads
! bffc64b435016d9559b7f02d2ad45beb  gcc/ada/libgnat/a-nagefl.ads
! 80b4eca3d2350861bba0c2a87cd7bbb4  gcc/ada/libgnat/a-naliop.ads
! a4f64c15a1860365c3b6f710c208d513  gcc/ada/libgnat/a-naliop__nolibm.ads
! 2aad6e9e29652a2b39a58f72649d43b3  gcc/ada/libgnat/a-nallfl.ads
! 6f4a85208c9260ea86a9c5944531288c  gcc/ada/libgnat/a-nallfl__wraplf.ads
! a1d8b98951822d80292b2cc5a2bd9559  gcc/ada/libgnat/a-nalofl.ads
! 872240d7289d1365de0289fead9c432c  gcc/ada/libgnat/a-nashfl.ads
! 7dd85003d530359c746a7cb5517435f3  gcc/ada/libgnat/a-nashfl__wraplf.ads
! cf414a37d02534ed2a3ad8fbe9a44ca5  gcc/ada/libgnat/a-nbnbig.adb
! 53d1163859d9a1ddaa7b524d4db2745f  gcc/ada/libgnat/a-nbnbig.ads
! 966ec344cdbac704e0ee18a808ca4df9  gcc/ada/libgnat/a-nbnbin.adb
! 0482b90ac615e63445281b85e9c512e0  gcc/ada/libgnat/a-nbnbin.ads
! 2c6a0da5213c0d4dc5bbb9c26db9e3a5  gcc/ada/libgnat/a-nbnbin__gmp.adb
! e218c2bcb70e6fc32a4f04799d83d200  gcc/ada/libgnat/a-nbnbre.adb
! e01e5568219b9887dc3e0af1641e4fcd  gcc/ada/libgnat/a-nbnbre.ads
  f8a74f5169bf9eba09b0050d2ce025f4  gcc/ada/libgnat/a-ncelfu.ads
! dc4a387ada5c32ac0973dee502c80457  gcc/ada/libgnat/a-ngcefu.adb
  2e229d27b615410dbc242fd1d7d4bd98  gcc/ada/libgnat/a-ngcefu.ads
! f1f543b8e781922438cdc3c5ce02aebe  gcc/ada/libgnat/a-ngcoar.adb
  a26d13d8c2030d72490c9b3c42f94f28  gcc/ada/libgnat/a-ngcoar.ads
! fff1b31ad32fa569b8c5a4a7ad96c7f3  gcc/ada/libgnat/a-ngcoty.adb
! d418fbf604b7373dc4c9f00e8ad0bc90  gcc/ada/libgnat/a-ngcoty.ads
! d4c4c7b457433508926f7d73accc7810  gcc/ada/libgnat/a-ngelfu.adb
! 6d7cd31ca27629d4a92170ca3c723788  gcc/ada/libgnat/a-ngelfu.ads
! 8564b3477f26c86fe243e7ba097c30e5  gcc/ada/libgnat/a-ngrear.adb
! 8be04f786df7a145ad4d191f3dc3a166  gcc/ada/libgnat/a-ngrear.ads
  7f894c161f872e68b50172715a8a311e  gcc/ada/libgnat/a-nlcefu.ads
  307582c16af8c2d164031fd8dfb72581  gcc/ada/libgnat/a-nlcoar.ads
  2341d761d1df9c74f5d4396b2a243874  gcc/ada/libgnat/a-nlcoty.ads
*************** dc556e736d290554bf97bb7153c2e96b  gcc/ad
*** 1329,2952 ****
  ed8c8d1cff975d8128d8a34e6fa60333  gcc/ada/libgnat/a-nscefu.ads
  ae6657265a333ec061d886c2e0a9be47  gcc/ada/libgnat/a-nscoty.ads
  c7bddd6abb488c8cd0d9982769254df5  gcc/ada/libgnat/a-nselfu.ads
! cc99ad8d43d44c965d5e6d3dfb18e986  gcc/ada/libgnat/a-nuauco.ads
! 140f1d6a7a3ede540e4cf3c741ff0150  gcc/ada/libgnat/a-nuauco__x86.ads
! a9b34fef6e03bca988c0ebabe8968540  gcc/ada/libgnat/a-nuaufl.ads
! 5924db0d2f5ae6ca9df8a89384823231  gcc/ada/libgnat/a-nuaufl__wraplf.ads
  7714df1a41c354211d217f99429093ef  gcc/ada/libgnat/a-nubinu.ads
  22a793d6936415ee70b725c6d2b2020a  gcc/ada/libgnat/a-nucoar.ads
  bda677b507deb699333f9baa2c37a694  gcc/ada/libgnat/a-nucoty.ads
! e533ed477ad8685d492fb89e77082108  gcc/ada/libgnat/a-nudira.adb
! a035d3711e572aa51e51f29352b1d5b6  gcc/ada/libgnat/a-nudira.ads
  bd9eed0e40585ba218b0badca225b64c  gcc/ada/libgnat/a-nuelfu.ads
! 7d8e0139f36b7dab967302927557dc3d  gcc/ada/libgnat/a-nuflra.adb
! a9578d9ba7e4085b5ecb852fda146046  gcc/ada/libgnat/a-nuflra.ads
! d17a1a29b5ac23f90c8c9540cdffa904  gcc/ada/libgnat/a-numaux.ads
  c4d4bea6dcd8066d2ddcb0789ef64586  gcc/ada/libgnat/a-numeri.ads
  88b948f6713b009c76e8b3b7b75a22c9  gcc/ada/libgnat/a-nurear.ads
! 8a29f093fd694cf7d93cf4573886f1bf  gcc/ada/libgnat/a-rbtgbk.adb
! d23f49e551b0a84e5d9d04f92c303c43  gcc/ada/libgnat/a-rbtgbk.ads
! 1b4fd7972528605716ebb8e2ce850426  gcc/ada/libgnat/a-rbtgbo.adb
! 1f218110f4fd240964fdcf0debbbdeeb  gcc/ada/libgnat/a-rbtgbo.ads
! 6d53628a6992d08c3a927cbbf3d143bf  gcc/ada/libgnat/a-rbtgso.adb
! 7b35f5f0d0cb5f6728ead7c296e38649  gcc/ada/libgnat/a-rbtgso.ads
! bd517fcab8541d90ed29465793532e36  gcc/ada/libgnat/a-sbecin.adb
! 365183f37fa72e5f1b93b6bf2115de4e  gcc/ada/libgnat/a-sbecin.ads
! ce11ce2aab5afef651f11989ecc08a9f  gcc/ada/libgnat/a-sbhcin.adb
! 33794f9158ab65b6c21dcb96326a5da5  gcc/ada/libgnat/a-sbhcin.ads
! 7114c42014ec3143058d2acc2ca9bdb9  gcc/ada/libgnat/a-sblcin.adb
! 56080ba32efea0db61884a8990da9dfe  gcc/ada/libgnat/a-sblcin.ads
  67b280f23d76be962783b397ef7e60c7  gcc/ada/libgnat/a-scteio.ads
! 02bd343cd70236fe0354d1eef4ed62c0  gcc/ada/libgnat/a-secain.adb
! 3898030e946a2afd0d9df255643dfaf4  gcc/ada/libgnat/a-secain.ads
! 7d14e02122866e0530a6551193b8323d  gcc/ada/libgnat/a-sequio.adb
! 79e0b5302469759d5564c5bee10266f3  gcc/ada/libgnat/a-sequio.ads
! 4e16dded549e7342c1fd34255435a23c  gcc/ada/libgnat/a-sfecin.ads
! 03adbd963a2f93e215479cb1fa3b74c2  gcc/ada/libgnat/a-sfhcin.ads
! 4fdc7c933c6a3a05e210058f86738286  gcc/ada/libgnat/a-sflcin.ads
  43123af888cd4637ee6a1eaf9dde9e34  gcc/ada/libgnat/a-sfteio.ads
  63d0f0f0aed733a972873cb3a4b767ea  gcc/ada/libgnat/a-sfwtio.ads
  7207d517b5474be90def505e3a2be187  gcc/ada/libgnat/a-sfztio.ads
! d2539525b16040496c07912539ba3c62  gcc/ada/libgnat/a-shcain.adb
! 7ee9bfac69a9e5ccc98fd4b4943f6a06  gcc/ada/libgnat/a-shcain.ads
! b7f0f2bcef556b6665fbf77082783413  gcc/ada/libgnat/a-siocst.adb
! 8a55901edc5d36f522b755e92e9f318a  gcc/ada/libgnat/a-siocst.ads
  6fce3ea5eecdf93f2ec7d0446ebd14af  gcc/ada/libgnat/a-siteio.ads
  9330fbe80fe3844d3bf5aeb4946381f6  gcc/ada/libgnat/a-siwtio.ads
  c816a5bc136362b2468801e67deb9ae9  gcc/ada/libgnat/a-siztio.ads
! ae97bcb6b7cf363bc79750d6d13800ca  gcc/ada/libgnat/a-slcain.adb
! be23d887a2aeecfe9424d69c7a6e2057  gcc/ada/libgnat/a-slcain.ads
! 5ad270ee65f53ca6d11d07b3d3fec046  gcc/ada/libgnat/a-ssicst.adb
! 7d464e2b19e071ab5b3ab220d18d96d4  gcc/ada/libgnat/a-ssicst.ads
  3ec2f925719d14de3a80c38042157f78  gcc/ada/libgnat/a-ssitio.ads
  387afdf3ceb85d07a14d8ae4e2f0eeec  gcc/ada/libgnat/a-ssiwti.ads
  366683e8278e7e71bc63a8c7a3f2238f  gcc/ada/libgnat/a-ssizti.ads
! 24e95088cb64475c797c299d72f8a7eb  gcc/ada/libgnat/a-stboha.adb
  8274f77970c3b1ed9a51aa8ddf6a4d0f  gcc/ada/libgnat/a-stboha.ads
  756f44b0c7f4483ecd7302aee8bc110a  gcc/ada/libgnat/a-stfiha.ads
! a25bb60836b03a12db20c2c38d76371d  gcc/ada/libgnat/a-stmaco.ads
! 7794e1f4856a76d3a439520a9c55f678  gcc/ada/libgnat/a-stobbu.adb
! 1d3e99e361709c4c25dfbf0ecf64d12b  gcc/ada/libgnat/a-stobbu.ads
! 45fe2164eb6c7cf92d046e2456f6371a  gcc/ada/libgnat/a-stobfi.adb
! ee2218be3a04edb02581ec135257f67b  gcc/ada/libgnat/a-stobfi.ads
! fd849dd36fe4713fa819e7bf429e0b90  gcc/ada/libgnat/a-storio.adb
  34175bb2f712422ab4cfd24b3e452b0d  gcc/ada/libgnat/a-storio.ads
! 362bf484f5c36d24f82673a385564786  gcc/ada/libgnat/a-stoubu.adb
! b2f538217b8940820835eec730d8daab  gcc/ada/libgnat/a-stoubu.ads
! e7ab2165f08e0f127096d7a3999b2be7  gcc/ada/libgnat/a-stoufi.adb
! 130961e2e34ba6147edc699df21e302d  gcc/ada/libgnat/a-stoufi.ads
! 991ffdfc8192e8ed973966b30e6d0afe  gcc/ada/libgnat/a-stoufo.adb
! d5d9ca91439b10ee6d21b3a71d4dc9a0  gcc/ada/libgnat/a-stoufo.ads
! 399835be83b4a797c486d70ab5afdab9  gcc/ada/libgnat/a-stouut.adb
! f3378a7464fbbb58a1bf85987f86728a  gcc/ada/libgnat/a-stouut.ads
! c2880386d09aa0c4c4b940e9cc37e9d0  gcc/ada/libgnat/a-strbou.adb
! d25d318460ae2fafc6d243fea5a9f460  gcc/ada/libgnat/a-strbou.ads
! 5d0414a7df461978ee72753b27c93597  gcc/ada/libgnat/a-stream.adb
! 7efaa782c867acaf12b456485e2adc95  gcc/ada/libgnat/a-stream.ads
! 89d5d2d474c1393d73859a46c8ca8268  gcc/ada/libgnat/a-strfix.adb
! a0df2abd85b2d36021427e7961a3ec2c  gcc/ada/libgnat/a-strfix.ads
! ae008cc1e3670374e5686ee8b20a4230  gcc/ada/libgnat/a-strhas.adb
! 930f541d2f838554d072231b1bcb510a  gcc/ada/libgnat/a-strhas.ads
  de0f93afe5feaf6819d5a9a2e09172e6  gcc/ada/libgnat/a-string.ads
! cbc68cb5081b8ddac3851b582a44ed45  gcc/ada/libgnat/a-strmap.adb
! 2dfaa24f675818379649f23d51bebc8d  gcc/ada/libgnat/a-strmap.ads
! ac1c3b25916f49573c56384752aca4bb  gcc/ada/libgnat/a-strsea.adb
! af180744e6971ade2b173d8916d2c437  gcc/ada/libgnat/a-strsea.ads
! 548c1a56c0e62ffef72b8873b0737f29  gcc/ada/libgnat/a-strsto.ads
! c766aa29d0339aabba00eef8c7dbeb46  gcc/ada/libgnat/a-strsup.adb
! 86cdfd3b9bf30a1c9a53a91e1e05d762  gcc/ada/libgnat/a-strsup.ads
! fcf78c3685bc71825762cdf344f5f5ec  gcc/ada/libgnat/a-strunb.adb
! ffbd21626ff1ce4caee4418dc2f90b3b  gcc/ada/libgnat/a-strunb.ads
! 9b4a512cdf8019c81320414ea7b11921  gcc/ada/libgnat/a-strunb__shared.adb
! 41077edacc554da630fad2231a8aa9b1  gcc/ada/libgnat/a-strunb__shared.ads
! ab135f084e71149485a03af43d526d94  gcc/ada/libgnat/a-ststbo.adb
! 711a41dfe11a36b9638847e7faaa9199  gcc/ada/libgnat/a-ststbo.ads
! 393974ba09999b9507b88d8db649cd22  gcc/ada/libgnat/a-ststio.adb
! c883d4828ff1906ed0cf3c8121a90d8e  gcc/ada/libgnat/a-ststio.ads
! 7a91203dcfd076856ad9a7fb72f9e013  gcc/ada/libgnat/a-ststun.adb
! 992157f40c7b3262d43c200d47d46e20  gcc/ada/libgnat/a-ststun.ads
! 56f72ef9a6a4b2d59c484e3b162014c9  gcc/ada/libgnat/a-stteou.ads
! 71bcf68b76b19419a438e9329963537e  gcc/ada/libgnat/a-stunau.adb
! 2dae78e3ab98e6b847473fadbc05df3e  gcc/ada/libgnat/a-stunau.ads
! f652b551908134eea3cd285c44d40f36  gcc/ada/libgnat/a-stunau__shared.adb
! 23240ade0f30a4b715b035e4d5fe16a3  gcc/ada/libgnat/a-stunha.adb
  da4a8d13f76850d714a8213ada7477d2  gcc/ada/libgnat/a-stunha.ads
! 2a6309c66e825c43c9fa14a6ad6444a6  gcc/ada/libgnat/a-stuten.adb
! 91801320eab187501cb48bd0c74a06b0  gcc/ada/libgnat/a-stuten.ads
! 1d34d39cfcd6c2fd99141a4beb635f99  gcc/ada/libgnat/a-stwibo.adb
! 5e49f7add46327ae772cad1ca9274e4f  gcc/ada/libgnat/a-stwibo.ads
! 4779d8d741141bd2f0fe3b11002cc396  gcc/ada/libgnat/a-stwifi.adb
  b0cf3f05e49e1640bf231034269cb951  gcc/ada/libgnat/a-stwifi.ads
! c6110db3bf0eefc326cccfbd4225e20d  gcc/ada/libgnat/a-stwiha.adb
  3255ad19d07346032c9d005d6a27475f  gcc/ada/libgnat/a-stwiha.ads
! 2b2fcada1fe042ff8dbacdca5195095b  gcc/ada/libgnat/a-stwima.adb
! 919da092fbe829438db11136446845f6  gcc/ada/libgnat/a-stwima.ads
! 80762a7f1e61bc51a4cfb6d13414b444  gcc/ada/libgnat/a-stwise.adb
! c1a079cdffa2c127ee7152c7e5312b8d  gcc/ada/libgnat/a-stwise.ads
! b9c820e956816bbd4df8435019f228d4  gcc/ada/libgnat/a-stwisu.adb
! 622e1e6397c15371d4a3628046a1e974  gcc/ada/libgnat/a-stwisu.ads
! 0a44f179a3325c661f0858bacf5a3dbb  gcc/ada/libgnat/a-stwiun.adb
! e49bf5e6c76736a497fba6b1b3bbe5ef  gcc/ada/libgnat/a-stwiun.ads
! 482aa9cc3aecb42a9cf151978c50b0a5  gcc/ada/libgnat/a-stwiun__shared.adb
! 9cc266dec61ca32681baf77c81804337  gcc/ada/libgnat/a-stwiun__shared.ads
! 60c0e0037de1aa35687b38a19bd28bcc  gcc/ada/libgnat/a-stzbou.adb
! a4d545572bfec89ca9d1c7ef485b12d4  gcc/ada/libgnat/a-stzbou.ads
! 2257a6fede9dfafe4d1b46205bf3584e  gcc/ada/libgnat/a-stzfix.adb
  f3ddc25c20b07c4072918c6c0ea20ff9  gcc/ada/libgnat/a-stzfix.ads
! 29456d30ca067c4aecb9a48bbd4e32cd  gcc/ada/libgnat/a-stzhas.adb
  41c71febbb354000bccca4ccd3a59c54  gcc/ada/libgnat/a-stzhas.ads
! 70b16ce3eeaff4986e286e5a84fea10e  gcc/ada/libgnat/a-stzmap.adb
! 4e64acdf29965dba3beb5d51e32089ae  gcc/ada/libgnat/a-stzmap.ads
! 147b96c280c7f4cd8bc5dd4c01618425  gcc/ada/libgnat/a-stzsea.adb
! ea978959e79f54608ac221e15b725367  gcc/ada/libgnat/a-stzsea.ads
! 4cc0ed2a4824444e353f3546396d0031  gcc/ada/libgnat/a-stzsup.adb
! 81e0ae8f829dcc96d120ced14de4bb1f  gcc/ada/libgnat/a-stzsup.ads
! c2d8b2a9ee32f773bc3f37eac9528ee9  gcc/ada/libgnat/a-stzunb.adb
! a71ee972db1ccf7a3c15e9ab18c5965f  gcc/ada/libgnat/a-stzunb.ads
! b78d8f3eede5ef99387247c42e085ea0  gcc/ada/libgnat/a-stzunb__shared.adb
! 9a741780917c398be10c5d3dbf3aead4  gcc/ada/libgnat/a-stzunb__shared.ads
! b523ee4efa646060867b5fd169ccffa6  gcc/ada/libgnat/a-suecin.adb
! bbe1435b6d5dde07d1a704975ef7b51d  gcc/ada/libgnat/a-suecin.ads
! 2536c3401fe78b04c631e669eb811d4b  gcc/ada/libgnat/a-suenco.adb
  24c625ef90e191bc1baa69c58ae2600f  gcc/ada/libgnat/a-suenco.ads
! 2ce50b5aca8a94c3b37082cec9e5322e  gcc/ada/libgnat/a-suenst.adb
  5a81ae9196b241db71c16198169dbed7  gcc/ada/libgnat/a-suenst.ads
! 3b7412a3d1d4dba2467db925fec7a94b  gcc/ada/libgnat/a-suewst.adb
  88073629f5531c7f6fba98820112cd02  gcc/ada/libgnat/a-suewst.ads
! f6273f68208d079bfb023e0d90cc279b  gcc/ada/libgnat/a-suezst.adb
  5aaf32a65e951f050f1cbb5adf5af9d2  gcc/ada/libgnat/a-suezst.ads
! 5a582dd6894f07470634ef2bd57dcd05  gcc/ada/libgnat/a-suhcin.adb
! 624d17e4e7c450b5a69785a9d9e7ae29  gcc/ada/libgnat/a-suhcin.ads
! 4580e794d38ce20e730de4961a681cf9  gcc/ada/libgnat/a-sulcin.adb
! ccf352f17ef85a5e3afdaeea00b5e95d  gcc/ada/libgnat/a-sulcin.ads
! 0e104266a4ed788fb22813395c47399e  gcc/ada/libgnat/a-suteio.adb
! 614c1b52a77aa4cedcf9d77ab61b97c2  gcc/ada/libgnat/a-suteio.ads
! dc42af9f80fe0912f764745fa25ca5cd  gcc/ada/libgnat/a-suteio__shared.adb
! 7a874db50a915dd2fed91020bb9cfcd7  gcc/ada/libgnat/a-swbwha.adb
  65f3f68c6718760b4c2b0beba2af9f82  gcc/ada/libgnat/a-swbwha.ads
  aaf273ef9a113dedcab8fb87b71b7365  gcc/ada/libgnat/a-swfwha.ads
! 7458fe84ee95b39dcb0f1a25eab525b6  gcc/ada/libgnat/a-swmwco.ads
! 6e95abdf02698150ef2b6a58f6623bca  gcc/ada/libgnat/a-swunau.adb
! adc23080f593d9f2398768f1c410e321  gcc/ada/libgnat/a-swunau.ads
! a9aa1e3d0d778c1345b497e4ee8cee56  gcc/ada/libgnat/a-swunau__shared.adb
! 8bda3ffc4eeb6a180635543a32a32f2d  gcc/ada/libgnat/a-swuwha.adb
  45d76b5b911889e181b3717ab6c91651  gcc/ada/libgnat/a-swuwha.ads
! c72305c6588745575f28be5703da5139  gcc/ada/libgnat/a-swuwti.adb
! bde3df4c98bcc94bc4003da104f03fec  gcc/ada/libgnat/a-swuwti.ads
! 0432a434a46ab90482ad2bfe99d41269  gcc/ada/libgnat/a-swuwti__shared.adb
! a7e7cae7fea4d883718e51dd85b714fe  gcc/ada/libgnat/a-szbzha.adb
  18b9cf476495930cec4ac3eb881257db  gcc/ada/libgnat/a-szbzha.ads
  32bb3b01e46ff7648c862537bd77aa0d  gcc/ada/libgnat/a-szfzha.ads
! 5a1ef5a08b4b5dde4dd1dcb480693724  gcc/ada/libgnat/a-szmzco.ads
! 474568fe8f57d275deeee90b56130ee8  gcc/ada/libgnat/a-szunau.adb
! cf92cdc6afd2fb152acbbaf852e58d31  gcc/ada/libgnat/a-szunau.ads
! 6246882989955dc3ab13aca75f4ab308  gcc/ada/libgnat/a-szunau__shared.adb
! 2c7475f78c376ace5c28ebd90226124c  gcc/ada/libgnat/a-szuzha.adb
  01cf107c9e66d7e5284c9b7ce2e2ed7e  gcc/ada/libgnat/a-szuzha.ads
! daeb742a06bf6c906fec3788594326c7  gcc/ada/libgnat/a-szuzti.adb
! 658c9774c750b6c574e5fc7befab78f2  gcc/ada/libgnat/a-szuzti.ads
! 9ab976052433dc1d378ca5903568798e  gcc/ada/libgnat/a-szuzti__shared.adb
! 86d91e9532edc488263c155e732f4256  gcc/ada/libgnat/a-tags.adb
! dbbe43050b49b0b88aceaec453fa4a57  gcc/ada/libgnat/a-tags.ads
! 426401490a86d7f2f289f04567ed1b33  gcc/ada/libgnat/a-teioed.adb
! 2ba66cca9fc1f051aae59655c1011b12  gcc/ada/libgnat/a-teioed.ads
! e517c014baa8cabc742c4718df1e0a7f  gcc/ada/libgnat/a-textio.adb
! c502629d29922ae98eec355f25ab47cb  gcc/ada/libgnat/a-textio.ads
  c74a673b222c3d0037a22fb766c67488  gcc/ada/libgnat/a-tgdico.ads
! 7a848ae44dad18ebbefb09f4c5563c65  gcc/ada/libgnat/a-tiboio.adb
  7b163db9f1467e9392f347bee1400136  gcc/ada/libgnat/a-tiboio.ads
! 67f965ef62d0665ee836755a03bc3af1  gcc/ada/libgnat/a-ticoau.adb
! 45d8572b37f01d5a4dc233d1fe2c7fe1  gcc/ada/libgnat/a-ticoau.ads
! 29356df5db0c15180bf0d2e1e8d9579b  gcc/ada/libgnat/a-ticoio.adb
! 17bd5485629796795caaaf42332e852c  gcc/ada/libgnat/a-ticoio.ads
! 7d0a352b558bb8630654c70069fe68e8  gcc/ada/libgnat/a-tideau.adb
! 73a3c4f61422740b1ce246c5afe6c413  gcc/ada/libgnat/a-tideau.ads
! d05dd19fea13009b66900ce4bb13066e  gcc/ada/libgnat/a-tideio.adb
! a424f1224421a8da8d386ae16cee5563  gcc/ada/libgnat/a-tideio.ads
! 2f6fd9c0027bedd247fa50705710d207  gcc/ada/libgnat/a-tideio__128.adb
! d59576972a4dd4b17e4b00057e38f784  gcc/ada/libgnat/a-tienau.adb
! e7af09a1eed0d3d7bf02b317ef9a25aa  gcc/ada/libgnat/a-tienau.ads
! d37dc4b66d3e3d9c4c08b308ba3539b7  gcc/ada/libgnat/a-tienio.adb
  d3f704d27dd8f64a1e52fcde5fd565d8  gcc/ada/libgnat/a-tienio.ads
! 11ab4efca04333102cb63ecf2360b189  gcc/ada/libgnat/a-tifiau.adb
! 24a9f843cd0a6f3e92b9e0a0b8172231  gcc/ada/libgnat/a-tifiau.ads
! a8b3ddd6611f5668d37c5e2ca04a85a2  gcc/ada/libgnat/a-tifiio.adb
  cb652b43513ee9f3e9818139e2f690db  gcc/ada/libgnat/a-tifiio.ads
! 5a21a371ccc3cec6b4c336f32c94e38f  gcc/ada/libgnat/a-tifiio__128.adb
! 7a563fd23622e89301937c451be820cf  gcc/ada/libgnat/a-tiflau.adb
! 31e55381891276237fc3353d729da1d1  gcc/ada/libgnat/a-tiflau.ads
! f600f87c5aff3d7a51b3f5c1b55d337f  gcc/ada/libgnat/a-tiflio.adb
! db828631bb8a8377d63d76aae1fd5dbf  gcc/ada/libgnat/a-tiflio.ads
! 3b78a63f59b63950eb21175611ca5c39  gcc/ada/libgnat/a-tigeau.adb
! ef178f9b2983f62908829fa22d06af27  gcc/ada/libgnat/a-tigeau.ads
! 099d70e9439831673090ef09d1011b86  gcc/ada/libgnat/a-tigeli.adb
! d1da66d510b30650b666e5201646fce3  gcc/ada/libgnat/a-tiinau.adb
! 4f251b42fd4f49c79cf867f034eb58a6  gcc/ada/libgnat/a-tiinau.ads
! d75e8d500c607ac83716ce19ec3a7a28  gcc/ada/libgnat/a-tiinio.adb
! 51cf4a9f3252af8991416721b96bd1eb  gcc/ada/libgnat/a-tiinio.ads
! 647f98937cb8c78c8465150af0c2a2b4  gcc/ada/libgnat/a-tiinio__128.adb
! 6820763c3abdb6a7521964e06c38bb31  gcc/ada/libgnat/a-timoio.adb
! 62243c88b1e322d76719ace237b12f65  gcc/ada/libgnat/a-timoio.ads
! 9f1ccde076a62c0cb43a0f1a7e5af2f6  gcc/ada/libgnat/a-timoio__128.adb
! cf4a9124840d9128a2b410336738be38  gcc/ada/libgnat/a-tiocst.adb
! 8f29dadcf26900c454dc19a850caefd2  gcc/ada/libgnat/a-tiocst.ads
! 1ec09e45dccb73c7e9b45c763842cdfc  gcc/ada/libgnat/a-tirsfi.adb
! 940b7104155c6c9ebfed3287f6a1b290  gcc/ada/libgnat/a-tirsfi.ads
! 50f3f0ad9c3c9c39bf018ec95898e069  gcc/ada/libgnat/a-titest.adb
  7b71ac41d87e6c43f98663d1d110846c  gcc/ada/libgnat/a-titest.ads
  1a5a51a7ff392f1819e96c8c7b6ba50b  gcc/ada/libgnat/a-tiunio.ads
  ebdefb0717ee54e84334b4468aea7da2  gcc/ada/libgnat/a-unccon.ads
! f5bc02683fdb56d97621e0a91a7452b9  gcc/ada/libgnat/a-uncdea.ads
! 06ec29b6a8e4d593c168a0d89f8fae8a  gcc/ada/libgnat/a-undesu.adb
  82a804005be52b8d315b11082ce952d4  gcc/ada/libgnat/a-undesu.ads
! 4ba6c73ff9135bd90aa097fb696e4419  gcc/ada/libgnat/a-wichha.adb
  bc85d10bd14a8eda24559935a5472a57  gcc/ada/libgnat/a-wichha.ads
! 275d3326bd6e12536c98a9501a5c0a87  gcc/ada/libgnat/a-wichun.adb
! adb4173fc3ed96bd492833c0994aea58  gcc/ada/libgnat/a-wichun.ads
  495dc144d91ae1388ae48ceb32e47f91  gcc/ada/libgnat/a-widcha.ads
! d12c64a7c07d4ad322cc2676de63dca5  gcc/ada/libgnat/a-witeio.adb
! 379382a6f34225f01437e60a370dcfa6  gcc/ada/libgnat/a-witeio.ads
! 99309f986366977d0e00f08c0d5e287d  gcc/ada/libgnat/a-wrstfi.adb
! db36c095f4ebc78aa4c84eae34eff5fd  gcc/ada/libgnat/a-wrstfi.ads
! f9ce2e067be48f43cff153a1e910f1a4  gcc/ada/libgnat/a-wtcoau.adb
! 74dcffe9c544e8308cf327290b382cc5  gcc/ada/libgnat/a-wtcoau.ads
! e0b771471e637fad94159347acd8194a  gcc/ada/libgnat/a-wtcoio.adb
  d76fe24c6988d732303e4f40830c2082  gcc/ada/libgnat/a-wtcoio.ads
! fe019029896f3ae047694ec07f88a035  gcc/ada/libgnat/a-wtcstr.adb
! 861cf8907f0558dc29f4760412be9bea  gcc/ada/libgnat/a-wtcstr.ads
! 80c1e61440ef3a4d4faac6133de0c772  gcc/ada/libgnat/a-wtdeau.adb
! 77e0b377916f3f86311da49b196eb172  gcc/ada/libgnat/a-wtdeau.ads
! e77f45a0070ec2dea24b394e63d31cd2  gcc/ada/libgnat/a-wtdeio.adb
  20d4a8b1dbec170436bce906004aaac8  gcc/ada/libgnat/a-wtdeio.ads
! 8d5bb6632d10f1f1c86e1dff45d02c2e  gcc/ada/libgnat/a-wtdeio__128.adb
! 64b32ec534c973f2d3c2fa5f5f7f68a7  gcc/ada/libgnat/a-wtedit.adb
! 1e2cab838acb970708d33f548736b858  gcc/ada/libgnat/a-wtedit.ads
! 0fb9e5e030ff8edb1d01ab462506c695  gcc/ada/libgnat/a-wtenau.adb
! b904be06cda617fd74017ea57fe405bc  gcc/ada/libgnat/a-wtenau.ads
! 773f313cb9ac2db1fc492ac710fcf5b3  gcc/ada/libgnat/a-wtenio.adb
  fa13b730a5c90ff293982415bf7bcecb  gcc/ada/libgnat/a-wtenio.ads
! 9184800a3306d75f277cde1eb74773a1  gcc/ada/libgnat/a-wtfiau.adb
! 30133cc1423d4391daa409fabbf38eb9  gcc/ada/libgnat/a-wtfiau.ads
! 770861491bf5963ea904a8474bb5ccdb  gcc/ada/libgnat/a-wtfiio.adb
  495444487be476924785b4b8eff6b910  gcc/ada/libgnat/a-wtfiio.ads
! c9bc87cae0bd38f0b4d80c163e9407c6  gcc/ada/libgnat/a-wtfiio__128.adb
! c0547b9a6ea693150b72b39e15974d4a  gcc/ada/libgnat/a-wtflau.adb
! 0d4fc350eb24c0317148ab987f160541  gcc/ada/libgnat/a-wtflau.ads
! af807f6ec0e7fdc9835733c5ff59c758  gcc/ada/libgnat/a-wtflio.adb
  bb57e8648d7de30496bb43f8a849fc3f  gcc/ada/libgnat/a-wtflio.ads
! a21d880234449cb10c9863c8fe095366  gcc/ada/libgnat/a-wtgeau.adb
! 509acc9dae2169795a342748c2c28289  gcc/ada/libgnat/a-wtgeau.ads
! 7289e5c14d0df061ab0c97dfa9854d97  gcc/ada/libgnat/a-wtinau.adb
! 9fe7634a0cca183a2aaccb22d023d7d2  gcc/ada/libgnat/a-wtinau.ads
! da60eb50808aca8a5786759aa1078de2  gcc/ada/libgnat/a-wtinio.adb
  62a64f1715aaaa145cf2b6d360381363  gcc/ada/libgnat/a-wtinio.ads
! 04c571990b83ec2ac57e395986a0e2bd  gcc/ada/libgnat/a-wtinio__128.adb
! e3d90f1d44b4582cce5783843c961098  gcc/ada/libgnat/a-wtmoio.adb
! 3af14d15898cba0664ece7130ee9ea12  gcc/ada/libgnat/a-wtmoio.ads
! 0b1904f7db0c74b51dbcd40edfa5c2b7  gcc/ada/libgnat/a-wtmoio__128.adb
! e0acdfaa5b1451ab4dcb8c38dfbe8230  gcc/ada/libgnat/a-wttest.adb
  53d3d301f9afb69992013f55fe363511  gcc/ada/libgnat/a-wttest.ads
! 3a30cf8c77cc2d72aaed70946ef379ff  gcc/ada/libgnat/a-wwboio.adb
  899e14502ec4dedbf4fdb28f8cecfa35  gcc/ada/libgnat/a-wwboio.ads
  1c2480c111fa5b71fca7c67f21525f8f  gcc/ada/libgnat/a-wwunio.ads
  107d2989204d28e32923acc02d444f67  gcc/ada/libgnat/a-zchara.ads
! 26ec384361fa688d4fc64be5b61017e9  gcc/ada/libgnat/a-zchhan.adb
! b4dfcd2a952fce78d22b325897b1391a  gcc/ada/libgnat/a-zchhan.ads
! 9bb827bf4d71a747d155c7d554aab905  gcc/ada/libgnat/a-zchuni.adb
! 8b0bb30553504f95ec5a1735180bc090  gcc/ada/libgnat/a-zchuni.ads
! 4b30c40ce6da89a309a1da523c7445ef  gcc/ada/libgnat/a-zrstfi.adb
! 0fd173c3dd2b15ed9f4313e9f09464fb  gcc/ada/libgnat/a-zrstfi.ads
! b220eef1430a7bac07c1d87e3bc5657f  gcc/ada/libgnat/a-ztcoau.adb
! 4f158ff20732f0f7ddb1a83263fee277  gcc/ada/libgnat/a-ztcoau.ads
! 5bac98ca0d46a3590c4a6a9698639e65  gcc/ada/libgnat/a-ztcoio.adb
  7440d81a0d7886b3f76b271c7fcbf8b3  gcc/ada/libgnat/a-ztcoio.ads
! 7c9a33d0e9ab1b0f4460e70ad8d62d63  gcc/ada/libgnat/a-ztcstr.adb
! 4f808a45b43793790b07c5613f448b94  gcc/ada/libgnat/a-ztcstr.ads
! a43836522c9de51280b8ef28a273f496  gcc/ada/libgnat/a-ztdeau.adb
! e6406b072ed0c068c606ee6d62f25879  gcc/ada/libgnat/a-ztdeau.ads
! 64d7b4a6f3a4e7a5e105d1f2150b4a7e  gcc/ada/libgnat/a-ztdeio.adb
  a1457649e626ebf32915696e5afd2ac0  gcc/ada/libgnat/a-ztdeio.ads
! 57586358e10896d7ef728c26ff7e631e  gcc/ada/libgnat/a-ztdeio__128.adb
! 415e9be697a32fcdf914b41abda83f9f  gcc/ada/libgnat/a-ztedit.adb
! 9c6a4bf70117fc0a04446e5a341ef87d  gcc/ada/libgnat/a-ztedit.ads
! d4f0dcb4b4768bcd95dd49c8d4a54fbf  gcc/ada/libgnat/a-ztenau.adb
! 357c8a6d6f74409239f5269978e1c9db  gcc/ada/libgnat/a-ztenau.ads
! 3326861b0b6260406a5404fc0ec1f158  gcc/ada/libgnat/a-ztenio.adb
  33aa889d92f43b14a348a444135fc992  gcc/ada/libgnat/a-ztenio.ads
! 83774e52bbf642748d81ce1ccfbe32a0  gcc/ada/libgnat/a-ztexio.adb
! 55c6b3ba6a60a629cc4331dfd32113e4  gcc/ada/libgnat/a-ztexio.ads
! 4731bfedddc037e189b23366b47c0a3c  gcc/ada/libgnat/a-ztfiau.adb
! ad811ce7ec10d304309ece1212397ca1  gcc/ada/libgnat/a-ztfiau.ads
! 0c9c0d701e222b2d55a9666a611fc57c  gcc/ada/libgnat/a-ztfiio.adb
  9e2efe8c1c2d6658a575fbecb5ab1418  gcc/ada/libgnat/a-ztfiio.ads
! 5e9e02c20772e61edb13cde9bf290da7  gcc/ada/libgnat/a-ztfiio__128.adb
! efb04986a685b99fe0a5048d55e41ee4  gcc/ada/libgnat/a-ztflau.adb
! 7c247a8d0bfef5caeacba51c70410974  gcc/ada/libgnat/a-ztflau.ads
! bbb14a78f1e6f35545cd2587bde3d7e3  gcc/ada/libgnat/a-ztflio.adb
  7aae0945e67f16f4f77aa54a65552f3e  gcc/ada/libgnat/a-ztflio.ads
! 30491d3e355071d08a2d70503bba2ae4  gcc/ada/libgnat/a-ztgeau.adb
! 7d4418c187a0303650f27f7bb5a888eb  gcc/ada/libgnat/a-ztgeau.ads
! 0402f7220ac077ad06ab249b0ece580c  gcc/ada/libgnat/a-ztinau.adb
! 3996f1e5cc0619ad5c1c29598cfa75d5  gcc/ada/libgnat/a-ztinau.ads
! 724d14f5bd42a7b92b82968a38c436d3  gcc/ada/libgnat/a-ztinio.adb
  f0456d31ec0aa6f6786e1b635f8023cb  gcc/ada/libgnat/a-ztinio.ads
! d7e34374127a5b5f04e38b6b70005ec3  gcc/ada/libgnat/a-ztinio__128.adb
! 16f9f601cbecfe34bd05b0345ac0a604  gcc/ada/libgnat/a-ztmoio.adb
  9831d312ef279fc55e5e051745be05d2  gcc/ada/libgnat/a-ztmoio.ads
! e0da254648e9fb13aa5bccae554310a8  gcc/ada/libgnat/a-ztmoio__128.adb
! 14bda678ce5907c369a5598ad950867f  gcc/ada/libgnat/a-zttest.adb
  2caf047380f684add2bd5a35dc4e1091  gcc/ada/libgnat/a-zttest.ads
! b7c2bb95be036352d4474fbbbf49002a  gcc/ada/libgnat/a-zzboio.adb
  a80428bcd2bf9ab7214609e68ff1651c  gcc/ada/libgnat/a-zzboio.ads
  a6d7b54a7a1a401188cfe54d1c2bad3b  gcc/ada/libgnat/a-zzunio.ads
  aad41855092e5648dbc6e7ab9d94cda3  gcc/ada/libgnat/ada.ads
  71c71bcd90c113e366bf720c3d886660  gcc/ada/libgnat/calendar.ads
  e150ba4c7f01d70e0086543a96ffd40b  gcc/ada/libgnat/directio.ads
! 53080e367ccb4754a50fc562afa66973  gcc/ada/libgnat/g-allein.ads
! b61c77167d70e6b25409a2cf97b86e1d  gcc/ada/libgnat/g-alleve.adb
! 4443b619254c4b91132303bb58eb1426  gcc/ada/libgnat/g-alleve.ads
! 168c1b1d898ea2519f1fdf490423a835  gcc/ada/libgnat/g-alleve__hard.adb
! d2ce81973c03a4103fdf3d1d73d15f1e  gcc/ada/libgnat/g-alleve__hard.ads
! 124ac18cae256093385106fd8a229012  gcc/ada/libgnat/g-altcon.adb
! 78b18b3effc75834741bf4bedc7cb2b5  gcc/ada/libgnat/g-altcon.ads
! 6d1b4600a9498ce73410154b22bf1422  gcc/ada/libgnat/g-altive.ads
! 592ecf18b29faf403ce2d1277dbfcccf  gcc/ada/libgnat/g-alveop.adb
! 1aeaa8c6db7c803126e3f664cb1d6caf  gcc/ada/libgnat/g-alveop.ads
! 6d373aed91f08ef40c01628c4c4a49a3  gcc/ada/libgnat/g-alvety.ads
! 455d832532a0d5c8f4c70bb9d911a0ce  gcc/ada/libgnat/g-alvevi.ads
! 2892bc230f4bc13b9ad5b475b57049bb  gcc/ada/libgnat/g-arrspl.adb
! af2e597e4f0095b1ae54f76d13dd2479  gcc/ada/libgnat/g-arrspl.ads
! 511720f4c2c47355305ca98e0782e1a3  gcc/ada/libgnat/g-awk.adb
! ac4a93c1321ed86ee0fc9c44b7c18c0c  gcc/ada/libgnat/g-awk.ads
! 5a4bca21e472ddcb4b2edfa85b8afbb3  gcc/ada/libgnat/g-binenv.adb
! a85835519f67351f9ece1f5b40cc53fa  gcc/ada/libgnat/g-binenv.ads
! 72748e89d2bc05aa4befb977eb4f834b  gcc/ada/libgnat/g-brapre.ads
! 90fcc4274782bdf49297e47fbda85353  gcc/ada/libgnat/g-bubsor.adb
! 1a6de69e91fd3438f141af1f50a71bd0  gcc/ada/libgnat/g-bubsor.ads
! d40741a84136fa66bb3ccbd44b805be9  gcc/ada/libgnat/g-busora.adb
! 9de91965e6a05e46ef2ec7fbdadfbef1  gcc/ada/libgnat/g-busora.ads
! cca7b673ff2a3bb70fe47f71c9878559  gcc/ada/libgnat/g-busorg.adb
! cf6333d63cbd41330220f05a1075fc0a  gcc/ada/libgnat/g-busorg.ads
! 80c3f8a27c4b709943b83ffc4ab799f5  gcc/ada/libgnat/g-byorma.adb
! 2d6d8a3b89a4ea2d8b1b5394d104c6de  gcc/ada/libgnat/g-byorma.ads
! 3bb10277ca1e6e1d58f626aefb6d7a92  gcc/ada/libgnat/g-bytswa.adb
! bb3a0d07de4ecde8430afdf14aace693  gcc/ada/libgnat/g-bytswa.ads
! 5ef8046b6787f71bf17ca4b1188be6ea  gcc/ada/libgnat/g-calend.adb
! 5f0e84e1451d6880884b11398fdabfd6  gcc/ada/libgnat/g-calend.ads
! 1449e1ca47f123a8bd97f8a442e12835  gcc/ada/libgnat/g-casuti.adb
! 51f4660e97cd1b83bcfd6577430abd40  gcc/ada/libgnat/g-casuti.ads
! 7b35b08c59d6ae3d97161f4f217cdbbd  gcc/ada/libgnat/g-catiio.adb
! 3b699a2d615bf7cc95694e74ef2f6249  gcc/ada/libgnat/g-catiio.ads
! 5d431070f0402b5707822ea5cfa32265  gcc/ada/libgnat/g-cgi.adb
! d225a9276adab2dc9c10d60dde92df2b  gcc/ada/libgnat/g-cgi.ads
! e5270b41d55fc951d1e3709ad128171d  gcc/ada/libgnat/g-cgicoo.adb
! af766b22b599aa9005696116351c8879  gcc/ada/libgnat/g-cgicoo.ads
! cb5287fc8c86a7391b19a58c97c90983  gcc/ada/libgnat/g-cgideb.adb
! 7fb087ef116e1637d709221af5eca4db  gcc/ada/libgnat/g-cgideb.ads
! c71d608cf957605f0b8b79a3753772c5  gcc/ada/libgnat/g-comlin.adb
! 553128783edb67ba4087e02fffccda4b  gcc/ada/libgnat/g-comlin.ads
! b2ff6010ac8553b314d72b7faa487475  gcc/ada/libgnat/g-comver.adb
! 1fc1c362207c66082df969b20b09224e  gcc/ada/libgnat/g-comver.ads
! 579d474b7c39153f7f212a25edf3a4d3  gcc/ada/libgnat/g-cppexc.adb
! 41d9844c32469d26e8643f704fb0e233  gcc/ada/libgnat/g-cppexc.ads
! 700a38b653e474f40b98a2ad0ba61e5d  gcc/ada/libgnat/g-crc32.adb
! 1a7b1adfa6a382902d8d7527a1264d8a  gcc/ada/libgnat/g-crc32.ads
! 4f8cee1c85041f063b319bfc4a6ae000  gcc/ada/libgnat/g-ctrl_c.adb
! 0cb7848af218eba8ea3ab4b48b890d0a  gcc/ada/libgnat/g-ctrl_c.ads
! e1d16690d7f4d21e2a729047951b602d  gcc/ada/libgnat/g-curexc.ads
! 576f513df74ce21a13d6dc205816d5ee  gcc/ada/libgnat/g-debpoo.adb
! 20c5a7971e2db18b770af8eb9612bcd4  gcc/ada/libgnat/g-debpoo.ads
! 2aa0e5123a52ff0f4bd6b61c1fb02bb2  gcc/ada/libgnat/g-debuti.adb
! 2184b489112116a556310dbb61b08939  gcc/ada/libgnat/g-debuti.ads
! 6f379460dfc916f1bfa0bf0763f2fff2  gcc/ada/libgnat/g-decstr.adb
! b8ab140695a47592e3405f16c1b8b063  gcc/ada/libgnat/g-decstr.ads
! 648817e2b16a8a416bdd127e41dc0f72  gcc/ada/libgnat/g-deutst.ads
! 4f109b7ace555e69ec21a2c0edd5b205  gcc/ada/libgnat/g-diopit.adb
! 570bb7c6703f2d1bd76d2e09fa23a1fe  gcc/ada/libgnat/g-diopit.ads
! 3656f6c20a6ec0ac10c57ccf7e3163bc  gcc/ada/libgnat/g-dirope.adb
! 7ff8a2f13581b6133fe7c69ac161f717  gcc/ada/libgnat/g-dirope.ads
! 15364214ba8da6ca6eab2e017cafee43  gcc/ada/libgnat/g-dynhta.adb
! c81cc42c2e8b8b127cc57a3ac2d924fb  gcc/ada/libgnat/g-dynhta.ads
! 03013d64a03d692ad8ea3c1222010a81  gcc/ada/libgnat/g-dyntab.adb
! 93f0db1f202e5fe4c9baad72c960dc40  gcc/ada/libgnat/g-dyntab.ads
! e259a5980650bf0b58495bd321b18da1  gcc/ada/libgnat/g-eacodu.adb
! 6892dd04fc5b25126ae21239b999bb48  gcc/ada/libgnat/g-encstr.adb
! 60cb0036a0878f12d1b41b73c30a792f  gcc/ada/libgnat/g-encstr.ads
! 0c7356525966af261e3bdc60c00408f2  gcc/ada/libgnat/g-enutst.ads
! 9849c1db6ca8c38ae54b96447f8129a4  gcc/ada/libgnat/g-excact.adb
! a0071dde4aaf0c5a480bb374c72f1cb3  gcc/ada/libgnat/g-excact.ads
! 2c42b24539914ec3efc455899f1167e2  gcc/ada/libgnat/g-except.ads
! 92c5bfafc49a72f8ca0466cc69f587c2  gcc/ada/libgnat/g-exctra.adb
! 2a0568bfcbc40fc4cb02a95820877f0e  gcc/ada/libgnat/g-exctra.ads
! ec4df461b369194375c685f5ec242735  gcc/ada/libgnat/g-expect.adb
! 63b7e6b7a7fb7b9a711dcbcd0115fff0  gcc/ada/libgnat/g-expect.ads
! b4a217ef02a14d65dad52b0cff261247  gcc/ada/libgnat/g-exptty.adb
! e249643252d399aa38867500d253e6b7  gcc/ada/libgnat/g-exptty.ads
! d3356f767ebe3bbe05b207d019c01c42  gcc/ada/libgnat/g-flocon.ads
! e40402541cb32026930060339cf80bcf  gcc/ada/libgnat/g-forstr.adb
! daaae77ba310638b00b55e0786030058  gcc/ada/libgnat/g-forstr.ads
! 288509ca9c6df4a8c39244582e618669  gcc/ada/libgnat/g-graphs.adb
! 21bb468993f21d50be64a67d113d9cc1  gcc/ada/libgnat/g-graphs.ads
! 7deba3b8b17cd477b71a4530c0b87e50  gcc/ada/libgnat/g-heasor.adb
! 2d3f691997cfae7240bbf1570c01d0b3  gcc/ada/libgnat/g-heasor.ads
! 2bb555c53686887ef1df8bc999175bf8  gcc/ada/libgnat/g-hesora.adb
! 4a8893e1cdcf31245ef8728cdc4ad326  gcc/ada/libgnat/g-hesora.ads
! 3bc876a1a6f50b673c563562753922e9  gcc/ada/libgnat/g-hesorg.adb
! 6da5fcd3dc96bc771c8f1326c162ff57  gcc/ada/libgnat/g-hesorg.ads
! 91f02bb06b6f78e2966c42a2e6f712d4  gcc/ada/libgnat/g-htable.adb
! 5f585239c43781d883bdbf8280e8adc1  gcc/ada/libgnat/g-htable.ads
! 45fd336c30b0c23d5eedf148b7caaee3  gcc/ada/libgnat/g-io-put__vxworks.adb
! 4df0b562a7b2f0a61262c7da5f6db838  gcc/ada/libgnat/g-io.adb
! 5557c25f4e81de4dfb74d506417c091c  gcc/ada/libgnat/g-io.ads
! b52c24d99fd72c6501eed15d865f0d40  gcc/ada/libgnat/g-io_aux.adb
! 95cb4dd60cacc363ced2977441c992df  gcc/ada/libgnat/g-io_aux.ads
! 218d37a7698a1fcf42a0abad356afc9b  gcc/ada/libgnat/g-lists.adb
! f4618efbee0d011c31806aa30936f2f8  gcc/ada/libgnat/g-lists.ads
! b7c6a4b990b84072dd10c2db23c86a3d  gcc/ada/libgnat/g-locfil.adb
! be1235c39efd670bd21343f1a1c03bff  gcc/ada/libgnat/g-locfil.ads
! 8dde74f91f2ad5cd9310f3a1d6b99643  gcc/ada/libgnat/g-mbdira.adb
! 3eec40435438b864644852500d93eaee  gcc/ada/libgnat/g-mbdira.ads
! e0413a7537c172aeb07095401080432a  gcc/ada/libgnat/g-mbflra.adb
! 2a3b79cd21523cdcf8c0fe18686a35d4  gcc/ada/libgnat/g-mbflra.ads
! 7cef206bbf15b5e7f55be9fc85e8190d  gcc/ada/libgnat/g-md5.adb
! 1a93cfa089b45a4a13ff4c1095288cb7  gcc/ada/libgnat/g-md5.ads
! 47354a55828f2a697e1224f923c48086  gcc/ada/libgnat/g-memdum.adb
! 9c3fce0459a7d12dddd0972527c52242  gcc/ada/libgnat/g-memdum.ads
! 6e0397df4d98adf20f6b0260eb8f1410  gcc/ada/libgnat/g-moreex.adb
! 931bfaf51de03dc1788969ff1394b242  gcc/ada/libgnat/g-moreex.ads
! 404d3c6f7d1b7e10ec300cc4ed439b77  gcc/ada/libgnat/g-os_lib.adb
! cdfc447d62ea650105243b5ee2dfc5ea  gcc/ada/libgnat/g-os_lib.ads
! 587ede8aa49df3d637519ca496d9918d  gcc/ada/libgnat/g-pehage.adb
! c6e31495d4b957aca23eded16cc2c845  gcc/ada/libgnat/g-pehage.ads
! 784fe650eda30aed4cd04638b2a3f4a8  gcc/ada/libgnat/g-rannum.adb
! 01643f5d85a69887c0c5471947676108  gcc/ada/libgnat/g-rannum.ads
! 225feba48c85c7848c3da1ee85863e19  gcc/ada/libgnat/g-regexp.adb
! 1693bf1e541dc960470e6b2c60d63522  gcc/ada/libgnat/g-regexp.ads
! 212365c46639de192539501cb4d6b207  gcc/ada/libgnat/g-regist.adb
! 6fc57dc4939780fe550f5415be8f47ab  gcc/ada/libgnat/g-regist.ads
! 02c0968b1f2a2378cc18fa2a70aa5fa8  gcc/ada/libgnat/g-regpat.adb
! fb52c13eb87d5d5efe77ec5cf9219f69  gcc/ada/libgnat/g-regpat.ads
! 685d8edf263a8b7fa3ed5765062c7261  gcc/ada/libgnat/g-rewdat.adb
! e884fb15f10b52e33cbbebf4ec7d97e7  gcc/ada/libgnat/g-rewdat.ads
! 4b5b268b3672aa902466e00ad212decc  gcc/ada/libgnat/g-sechas.adb
! a9ce994ac63e5aa4c0958c1e1c8c2c6c  gcc/ada/libgnat/g-sechas.ads
! 56a2a4911d50ac64e86b840020307f60  gcc/ada/libgnat/g-sehamd.adb
! 091b222437bc15e405838ac1b482bc00  gcc/ada/libgnat/g-sehamd.ads
! b4b22b475378c7893f79298b3a0b6051  gcc/ada/libgnat/g-sehash.adb
! ff7fb5c46035678b37916c92efd6a8e7  gcc/ada/libgnat/g-sehash.ads
! 2f966bd72cfa71436e132176cce0607c  gcc/ada/libgnat/g-sercom.adb
! 2327eebf15f0161535f97e36d522c919  gcc/ada/libgnat/g-sercom.ads
! b705ae0f7e3180ad18e69043ba6ca3c0  gcc/ada/libgnat/g-sercom__linux.adb
! 4c970d11447091933bdbe978405a45a8  gcc/ada/libgnat/g-sercom__mingw.adb
! cf9f76487630b5764583300619ee100f  gcc/ada/libgnat/g-sestin.ads
! 17abc89befd38713dbd3633a63acec05  gcc/ada/libgnat/g-sets.adb
! 9c2f84479da954966f31560976cc7bf8  gcc/ada/libgnat/g-sets.ads
! a30f92f02abe4b75f4d03e56fddda9cf  gcc/ada/libgnat/g-sha1.adb
! adfae26cd24fe1a8385e6066dc70a726  gcc/ada/libgnat/g-sha1.ads
! ff27b816de75b34cb05a3c9e68d0dbf4  gcc/ada/libgnat/g-sha224.ads
! 6b80d5d243f4871054bd9970fe6f77c5  gcc/ada/libgnat/g-sha256.ads
! 71b6cb8ed1a0982b5d17f496383dd8d9  gcc/ada/libgnat/g-sha384.ads
! 8bb659724d8ee789dfd04bd8d4c3061e  gcc/ada/libgnat/g-sha512.ads
! 1d6f77e765af8b5161dba0fdf9971f81  gcc/ada/libgnat/g-shsh32.adb
! b776e46df9493498ea1bb18f129fe244  gcc/ada/libgnat/g-shsh32.ads
! b9d565a780ee2ddd4ff86fa481078e97  gcc/ada/libgnat/g-shsh64.adb
! 79715dd078abdf4ae7293e8e6683025c  gcc/ada/libgnat/g-shsh64.ads
! f39fccee36573065e53f2911e3703f76  gcc/ada/libgnat/g-shshco.adb
! 1d3e6d5beee7c212b0af9d70a3d21fcd  gcc/ada/libgnat/g-shshco.ads
! 6e0a72a86dc722d7c7e69e880217e278  gcc/ada/libgnat/g-soccon.ads
! d41f46e98d5e9afbb81e228c87667a3b  gcc/ada/libgnat/g-socket.adb
! 8b5d0e5cb9af99bf2badba1f7feac655  gcc/ada/libgnat/g-socket.ads
! 848c9631a4f8327ffbcdc25a42b9e88b  gcc/ada/libgnat/g-socket__dummy.adb
! f81579e41de5d1a4f7d6bea879dcd8e0  gcc/ada/libgnat/g-socket__dummy.ads
! 3d785509e03faee4c0220507a9e9ef1c  gcc/ada/libgnat/g-socpol.adb
! 72236b368d92321627fbdf9a4059dbfc  gcc/ada/libgnat/g-socpol.ads
! 274bb162124aee3332889bd07c2fdd7a  gcc/ada/libgnat/g-socpol__dummy.adb
! 08d73765aa3aca733acacfec3f6df058  gcc/ada/libgnat/g-socpol__dummy.ads
! daca640c115c2022cc382fef01dde7d3  gcc/ada/libgnat/g-socthi.adb
! 8986e0f37092f63584c5a94778e10616  gcc/ada/libgnat/g-socthi.ads
! 854f888b534ccb5dec04c940e65b7c9c  gcc/ada/libgnat/g-socthi__dummy.adb
! 13e3df133ec95285ff159f2ea3192f57  gcc/ada/libgnat/g-socthi__dummy.ads
! 9ded057794bf9074a31924cae4f52910  gcc/ada/libgnat/g-socthi__mingw.adb
! 5293fc19eade9cc5126d488d951a5528  gcc/ada/libgnat/g-socthi__mingw.ads
! 95ae891356b2dcdca3675a1b88542cc1  gcc/ada/libgnat/g-socthi__vxworks.adb
! 0b4238b350bb58f9bdeac5e501fefbf4  gcc/ada/libgnat/g-socthi__vxworks.ads
! 3ef7c507d1801ccea5cab17be62d4af2  gcc/ada/libgnat/g-soliop.ads
! 40f061f67260010e42f53f5213430f51  gcc/ada/libgnat/g-soliop__lynxos.ads
! bdf05dba97ac26b6cdb9426a863b6124  gcc/ada/libgnat/g-soliop__mingw.ads
! cfac7e3b54c69ce2a4018302460a883d  gcc/ada/libgnat/g-soliop__qnx.ads
! 678a78e542b563a369e434943e537d71  gcc/ada/libgnat/g-soliop__solaris.ads
! c5fa36f708e8266f303076fece5d7aed  gcc/ada/libgnat/g-sopowa.adb
! 6c610fcd217073e7aad6188b75b160f8  gcc/ada/libgnat/g-sopowa__mingw.adb
! 762b3819f93aaff7611333d42408200d  gcc/ada/libgnat/g-sopowa__posix.adb
! a8b9ad6a09ca6008d0839df8fe681713  gcc/ada/libgnat/g-sothco.adb
! cadf48f62621d2ed1dc27013a862d480  gcc/ada/libgnat/g-sothco.ads
! 46d4fa3e5cf014b6f378d22c3ae02b03  gcc/ada/libgnat/g-sothco__dummy.adb
! 659d64d3563125f236b2f466e3a59d4a  gcc/ada/libgnat/g-sothco__dummy.ads
! 70e268b7a9d02cc2554f553546f9ed97  gcc/ada/libgnat/g-souinf.ads
! 9f87e22e35807fa7e7c3ee731024f891  gcc/ada/libgnat/g-spchge.adb
! eeecddb8eb07d5185a6b6418b364fef9  gcc/ada/libgnat/g-spchge.ads
! f8fb823d4189a3fbe91f2a0d3a863b30  gcc/ada/libgnat/g-speche.adb
! ab9dac00ab96c57991593df880faa37b  gcc/ada/libgnat/g-speche.ads
! 114015e6c6f365e81f004ee34b8bc672  gcc/ada/libgnat/g-spipat.adb
! f281dfc2555d933c67832af58a50a22e  gcc/ada/libgnat/g-spipat.ads
! 04f5abbb4046bc4ce8d8410c3dde8af6  gcc/ada/libgnat/g-spitbo.adb
! c852b3b56eb9c6df39be80ab624b4171  gcc/ada/libgnat/g-spitbo.ads
! f573af8134a5bdb1da36461648270b86  gcc/ada/libgnat/g-spogwa.adb
! ce3e0c7692b86054c567bdb096a351d0  gcc/ada/libgnat/g-spogwa.ads
! d3e2150d099265e44c815843fa3b3347  gcc/ada/libgnat/g-sptabo.ads
! d35aaea40f2b2bcca4a89e2df1758398  gcc/ada/libgnat/g-sptain.ads
! 5a7635ab917379368d1f916cfa4aa75c  gcc/ada/libgnat/g-sptavs.ads
! 3f18f7acae7b67f8799c02a917e4e8e0  gcc/ada/libgnat/g-sse.ads
! 6a285ca8d98d419c79153d64e076e52a  gcc/ada/libgnat/g-ssvety.ads
! fc4e1b95baf21934bd86d72639b0ed56  gcc/ada/libgnat/g-sthcso.adb
! 3ab08d46f61d59ef0200068d8c718fb1  gcc/ada/libgnat/g-stheme.adb
! c57e840184452a2c046f6a972e29876c  gcc/ada/libgnat/g-strhas.ads
! bc251a3f6100fcd562c1b369656ae8ae  gcc/ada/libgnat/g-string.adb
! cf0892231032e3b4990ece66ad6c7936  gcc/ada/libgnat/g-string.ads
! c0c4a306efc58cbc109c053760c513d7  gcc/ada/libgnat/g-strspl.ads
! 6c7ac61fefa408083a3ae7cc1f8c2ec8  gcc/ada/libgnat/g-stseme.adb
! 1f57c22f6b5946dd51936c6c8442158c  gcc/ada/libgnat/g-stsifd__sockets.adb
! dd65f32b0ec828fcd0e15cf2e4692846  gcc/ada/libgnat/g-table.adb
! 0e711aa10c0979e73eb1325700b72ebd  gcc/ada/libgnat/g-table.ads
! 0ecd7447eaf668a051fdfda3391d9a9d  gcc/ada/libgnat/g-tasloc.adb
! fb520959ae0c0651532a653a59234923  gcc/ada/libgnat/g-tasloc.ads
! 47f4ca8306414272ec654711747dc587  gcc/ada/libgnat/g-timsta.adb
! 8b1ce3db19b12e6a33b066a2291ecc54  gcc/ada/libgnat/g-timsta.ads
! 7a8e6feec66bf6942b4fe42f97becd1f  gcc/ada/libgnat/g-traceb.adb
! dbd714f1673491f5cac10aba0fa97657  gcc/ada/libgnat/g-traceb.ads
! 411248d740b5fea82fb32d5d0cde883b  gcc/ada/libgnat/g-trasym.adb
! 36d5770ccafc0a168cb412abf5345a74  gcc/ada/libgnat/g-trasym.ads
! 0970793c85c149e560df14ea32eee545  gcc/ada/libgnat/g-tty.adb
! 4b3c3561bff5919ae803530cb6f65aa2  gcc/ada/libgnat/g-tty.ads
! 0e3b08e094cd092d006680c978a23551  gcc/ada/libgnat/g-u3spch.adb
! e1c467aa5580d604cbdf1465257c2157  gcc/ada/libgnat/g-u3spch.ads
! be9701f445dae5e1a54cfa3315819b50  gcc/ada/libgnat/g-utf_32.adb
! 94611c82061bff2e7857d86843166d80  gcc/ada/libgnat/g-utf_32.ads
! eafe5742e68f64025458fda9fc623f3f  gcc/ada/libgnat/g-wispch.adb
! 3ef25ee8e0eff29a46691709dd00f77a  gcc/ada/libgnat/g-wispch.ads
! 9bf563492a32c63aa122ee0fccfabc32  gcc/ada/libgnat/g-wistsp.ads
! fa71743048ada76f20393781e3f42013  gcc/ada/libgnat/g-zspche.adb
! 340c0440e004ff9a7d1b046bacc6d932  gcc/ada/libgnat/g-zspche.ads
! 9f9f16210bac6a73e6fe999cf95825d8  gcc/ada/libgnat/g-zstspl.ads
! f8792544db9b79fb471b1ab8dfd89b19  gcc/ada/libgnat/gnat.ads
! 6a7e17a96ce7ae4e976d4663aff2e6cc  gcc/ada/libgnat/i-c.adb
! 66fc003c2a301cdca2257119d84e2f37  gcc/ada/libgnat/i-c.ads
! 69258f8075782264406612c1d51d78c3  gcc/ada/libgnat/i-cexten.ads
! 20bdc298a8eea80726cc2f8d7313c1b1  gcc/ada/libgnat/i-cexten__128.ads
! 742eba1a01c294130b7a0f3e95d705c1  gcc/ada/libgnat/i-cobol.adb
! 4216e51da73d7954f8297e9044e28f52  gcc/ada/libgnat/i-cobol.ads
! b109b11ea9892385930f086451cfa6f5  gcc/ada/libgnat/i-cpoint.adb
! 91520ffd91287a3d254af1e39127e33b  gcc/ada/libgnat/i-cpoint.ads
! 1eef90157f88d547c7f35e5d96601d3e  gcc/ada/libgnat/i-cstrea.adb
! 5ae88a5eff6be767f202a1b935463f63  gcc/ada/libgnat/i-cstrea.ads
! 1e90b31a775a35f4b9c33958be1f489d  gcc/ada/libgnat/i-cstrin.adb
! 72f59ec34ebdd90187da5433d16be703  gcc/ada/libgnat/i-cstrin.ads
! 5c8b61e589d4ae403731ed66ce16cd23  gcc/ada/libgnat/i-fortra.adb
  fe08792d30f40125dd75d63c7bcd68fe  gcc/ada/libgnat/i-fortra.ads
! 294e0b5491c67de6065ba266c95ff970  gcc/ada/libgnat/i-pacdec.adb
! 91f1e6cd5792d23a9386aa1025ecd641  gcc/ada/libgnat/i-pacdec.ads
! ef898870d5311b8ba82fd17cdd27c276  gcc/ada/libgnat/i-vxwoio.adb
! 8b07be34ee8ef0c29e0babf3ba3d2bd7  gcc/ada/libgnat/i-vxwoio.ads
! bdcd6709757197915fdea2249fb97ce1  gcc/ada/libgnat/i-vxwork.ads
! 4bbd1923f8cd479e70d6978d86b8acd2  gcc/ada/libgnat/i-vxwork__x86.ads
! 80bc992875d453fa5c1282fe7b151232  gcc/ada/libgnat/interfac.ads
! 51993a59775f1e3aa9b95d4d20b1f188  gcc/ada/libgnat/interfac__2020.ads
  c2121d458a346c0b9d83825c544b9516  gcc/ada/libgnat/ioexcept.ads
  a8eb2329946dd4041335c2c4cfd086af  gcc/ada/libgnat/libada.gpr
  9b37ec6e60899a7dadce7f301acc9eee  gcc/ada/libgnat/libgnat.gpr
  fbe275186bb4f8ccd7519acfa1499671  gcc/ada/libgnat/libgnat_common.gpr
  38f101ad4a6eba55ef694b1ab6315683  gcc/ada/libgnat/machcode.ads
! 5d96fe050a8a9c222b25dc5429df2feb  gcc/ada/libgnat/memtrack.adb
! 72260defef1c548460961aec8f6ad824  gcc/ada/libgnat/s-addima.adb
! 5865e94f441d822eac2767735fc5d9c5  gcc/ada/libgnat/s-addima.ads
! adbda9e28e610ddd8d26747b6679686d  gcc/ada/libgnat/s-addope.adb
! 990196a110bc590581af2f53bcee4d8e  gcc/ada/libgnat/s-addope.ads
! 9bd09334a1488b3ceb644248c54cacfe  gcc/ada/libgnat/s-aoinar.adb
! 087143d13a05d40d395461b209d510ee  gcc/ada/libgnat/s-aoinar.ads
! 0909903ba29b1c7f708a1a86a965ec28  gcc/ada/libgnat/s-aomoar.adb
! c81a0ba430a2392fcf68618e3a2024f1  gcc/ada/libgnat/s-aomoar.ads
! 1710a2df388af3f5618130eb826ce509  gcc/ada/libgnat/s-aotase.adb
! f392f8baf2bb9556e5223e5e578ffc35  gcc/ada/libgnat/s-aotase.ads
! 91bf2d4b5a22b809aa04f9cbb9e0adb0  gcc/ada/libgnat/s-aridou.adb
! 818aa915a9e6739257e142baef8b988c  gcc/ada/libgnat/s-aridou.ads
! b83694acaf16ccdd9888a2e3a68413b0  gcc/ada/libgnat/s-arit128.adb
! e8a616dce75d8d1c05403ba1c72cf436  gcc/ada/libgnat/s-arit128.ads
! 4f62af36cd09341aa51d28694b46fee0  gcc/ada/libgnat/s-arit32.adb
! 85887cc4723e69da16fb7ef21a205b75  gcc/ada/libgnat/s-arit32.ads
! f8f38a9b39eba0a07a3d818398872faf  gcc/ada/libgnat/s-arit64.adb
! bc1d9d1f4161a9d8603f9b918a16a0e0  gcc/ada/libgnat/s-arit64.ads
! 2f8d973a29903b3b949f60ee6a08b336  gcc/ada/libgnat/s-assert.adb
! 12794742493b209b2513d7748e0df79b  gcc/ada/libgnat/s-assert.ads
! db5b6ffa3476388400358f7009200a5f  gcc/ada/libgnat/s-atacco.adb
! eba43ca6e48fcb36f89e6f20b8c209ff  gcc/ada/libgnat/s-atacco.ads
! ac0c4ec9dd1379fdb84f06835bd5faf1  gcc/ada/libgnat/s-atocou.adb
! feebdf52cd14183ecdb53ded5902e666  gcc/ada/libgnat/s-atocou.ads
! a92113545a15841a55aa1ef9989f0a75  gcc/ada/libgnat/s-atocou__builtin.adb
! 4f424c38af732ab5e03f967786bd4b91  gcc/ada/libgnat/s-atocou__x86.adb
! f84d28add1014a5b2c182a92a73bfeec  gcc/ada/libgnat/s-atoope.ads
! 97ea758f1bb4a34e1ce2d820f5c0ce9e  gcc/ada/libgnat/s-atopex.adb
! da5bf85742617cd0a28fc4cc8cde1838  gcc/ada/libgnat/s-atopex.ads
! ccdc5cea2a4f209a01c5d64893f94f9b  gcc/ada/libgnat/s-atopri.adb
! 62bb2ffd65359d3468e7a394acf94277  gcc/ada/libgnat/s-atopri.ads
! 3de6b56a00c42dadbd35283781a104c4  gcc/ada/libgnat/s-auxdec.adb
! 538fcc2fdbc384c8b4d85dbb59e18866  gcc/ada/libgnat/s-auxdec.ads
! e8f78e084d304c55d6a72b4042b07fe7  gcc/ada/libgnat/s-bignum.adb
! f0fc96bcb20317555b3b3407107d42ee  gcc/ada/libgnat/s-bignum.ads
! 15cb2be9e9cd287da12e322f07291609  gcc/ada/libgnat/s-bitfie.ads
! ad6ba190009f6b059426acae7f1cf477  gcc/ada/libgnat/s-bitops.adb
! e3072895659a57969a7162dedc5f46eb  gcc/ada/libgnat/s-bitops.ads
! aa6ffe24b7ee4010e1cfd1dc67b51a0c  gcc/ada/libgnat/s-bituti.adb
! 7fe458c9405658ed76a16f97987daa22  gcc/ada/libgnat/s-bituti.ads
! ce2b88bad6d1503e143644b97874abfa  gcc/ada/libgnat/s-boarop.ads
! a8eb8d755a1f78d614dec3b30a2242af  gcc/ada/libgnat/s-boustr.adb
! b02911f0260035410216c657326723ab  gcc/ada/libgnat/s-boustr.ads
! a99a7b62ceebb8e7e686301d293fcd7a  gcc/ada/libgnat/s-bytswa.ads
! 3202fbdfab0b75ca81cda2edae30c4cf  gcc/ada/libgnat/s-carsi8.adb
! 5269791b90a657ed4de6b36ec00f2e6e  gcc/ada/libgnat/s-carsi8.ads
! 053719ca6e2c2750a82c34f01dbc337d  gcc/ada/libgnat/s-carun8.adb
! e531e727efa44a2547190e4146fde71d  gcc/ada/libgnat/s-carun8.ads
! 0673727378d100bd5ced003d5d0add76  gcc/ada/libgnat/s-casi128.adb
! 392541ead9785328966205097c452266  gcc/ada/libgnat/s-casi128.ads
! a9461974671d25f2b3661d00364b17e5  gcc/ada/libgnat/s-casi16.adb
! 3ce01ecbf4829ab1911f62aaa351ea2c  gcc/ada/libgnat/s-casi16.ads
! 3661c0535d5cc8a2b926a46996625a2a  gcc/ada/libgnat/s-casi32.adb
! 8c3364b553b47629381d6deb31ceee88  gcc/ada/libgnat/s-casi32.ads
! e35f191cae85bfd640d2b209e974bb71  gcc/ada/libgnat/s-casi64.adb
! 67aba8402c2d8f8ab8af95c433ee5f18  gcc/ada/libgnat/s-casi64.ads
! ba6cc180363c5293715c4b8cf79de898  gcc/ada/libgnat/s-casuti.adb
! 30b2b3f1244cc40a9b29e880fc23ada6  gcc/ada/libgnat/s-casuti.ads
! 0bb8f5467e68c9fb6e4fdd84189fbd2e  gcc/ada/libgnat/s-caun128.adb
! 4d67f98b15b1a26d460f4d6c13cb40c2  gcc/ada/libgnat/s-caun128.ads
! d3a946b2b292fe2f9999cfbb0b6e8a69  gcc/ada/libgnat/s-caun16.adb
! 6c2f59b6fd208527b1be8edc31ff7cb3  gcc/ada/libgnat/s-caun16.ads
! 9411bb305e2be82237d7cac3b8ae5bbb  gcc/ada/libgnat/s-caun32.adb
! 77a04088f3c5080a7d44f336d88834ad  gcc/ada/libgnat/s-caun32.ads
! 671a13867e3eb38deb3fc95fb2c30dd2  gcc/ada/libgnat/s-caun64.adb
! a95547d7b3f2f0705d47064175a33346  gcc/ada/libgnat/s-caun64.ads
! b32567f59a006854d248ac6b7bdc6a8d  gcc/ada/libgnat/s-chepoo.ads
! 57d67659bb07de4111fce4e3708a21bc  gcc/ada/libgnat/s-commun.adb
! 2b0052e846af517ac5cb2d4fcc2a3c74  gcc/ada/libgnat/s-commun.ads
! d1038cb9c78fae307bc3aa21dbb5032f  gcc/ada/libgnat/s-conca2.adb
! 5639b7d0a2b3e466b9d1cdbb600a8407  gcc/ada/libgnat/s-conca2.ads
! 35ed93c4b8a2d47ce7ad366ec0762c59  gcc/ada/libgnat/s-conca3.adb
! 77ec9a7f386102406e1a68bcb8e3047a  gcc/ada/libgnat/s-conca3.ads
! 76c3f43ef78a0bf226306b6ad8846f6a  gcc/ada/libgnat/s-conca4.adb
! ef4f113e62e139a8b1e7e464743e57dd  gcc/ada/libgnat/s-conca4.ads
! 71f81df85f2f465cf8d2fa140dc83721  gcc/ada/libgnat/s-conca5.adb
! ff40026289bc8ba6b2c4e918f84093cc  gcc/ada/libgnat/s-conca5.ads
! ceb1f62328661df49037326a7e6bf2dc  gcc/ada/libgnat/s-conca6.adb
! 777fb3bf93bd492c2935ab5e4480d7b7  gcc/ada/libgnat/s-conca6.ads
! 0001723f83d7592fe727a1b585ed1ce0  gcc/ada/libgnat/s-conca7.adb
! 4d1fc74c8527b18be883ac45d2abed4e  gcc/ada/libgnat/s-conca7.ads
! 3daadfb66d58b1ec505c9e482e8ae2b7  gcc/ada/libgnat/s-conca8.adb
! b695e3508c90e93536fdf8dfcedc7113  gcc/ada/libgnat/s-conca8.ads
! 0722f21ae087e3ebd99e1f04d5d9ff02  gcc/ada/libgnat/s-conca9.adb
! 36fb8c7589ff53735ddf4bb8f0db99cb  gcc/ada/libgnat/s-conca9.ads
! f10863bed8a67467608b15dc3e10d9e8  gcc/ada/libgnat/s-crc32.adb
! 026fefb2994b649c6a1ee5f6fcf5383d  gcc/ada/libgnat/s-crc32.ads
! 80128fb5fcc54f2cc229be18619c8166  gcc/ada/libgnat/s-crtl.ads
! 7d97379319f9caf01501db6b6ade1947  gcc/ada/libgnat/s-dfmkio.ads
! 7861425a0ee8ff59ed43b00c148c6625  gcc/ada/libgnat/s-dfmopr.ads
! 6cb00524aba89deaa7e6e10271420ea8  gcc/ada/libgnat/s-dgmgop.ads
! e1fc5587d6f88db609fc39a47b99f73e  gcc/ada/libgnat/s-diflio.adb
! b5312f29c7a83a8c57fc6bf1ab7ffdf7  gcc/ada/libgnat/s-diflio.ads
! fdff3626c1411ae01bdb9e1f774c6003  gcc/ada/libgnat/s-diflmk.ads
! b149bd7e3889f486e782dab3f2ff4312  gcc/ada/libgnat/s-digemk.ads
! ad8b3e0e640d82e96189db162faa58ff  gcc/ada/libgnat/s-diinio.adb
! cab4adad7107cb59f53ad5f40508ffaf  gcc/ada/libgnat/s-diinio.ads
! 9c8dc35245094fcb837ef27287137e8f  gcc/ada/libgnat/s-dilomk.ads
! da386635225fcbcc3a5553c19a228b3e  gcc/ada/libgnat/s-dim.ads
! 2fa3c3361121b6d4acd45726e6072d38  gcc/ada/libgnat/s-dimkio.ads
! 722ba3c919d70248730fe6bbc6a99b50  gcc/ada/libgnat/s-dimmks.ads
! 8bd404a6999337ee2bdedd29c30b5ea9  gcc/ada/libgnat/s-direio.adb
! df3e75368abbada2ac7ac8a688c60522  gcc/ada/libgnat/s-direio.ads
! 7c22fcabe19be9182e15dfd25bbcdcb3  gcc/ada/libgnat/s-dlmkio.ads
! f8a4584126b444bfd4408966324ceb82  gcc/ada/libgnat/s-dlmopr.ads
! 7f56016df6daecd0636379768657421a  gcc/ada/libgnat/s-dmotpr.ads
! 16105281d35bb4678544b788497c60c7  gcc/ada/libgnat/s-dsaser.ads
! bb938882d46f4af7f1ced34c616b8856  gcc/ada/libgnat/s-dwalin.adb
! bb841bdd03c7dc118596bdafa07f6f5a  gcc/ada/libgnat/s-dwalin.ads
! a5339ba0c6ed98a1a4836870f13db3e3  gcc/ada/libgnat/s-elaall.adb
! 24f36a692d305131a25e47796f5ba5bd  gcc/ada/libgnat/s-elaall.ads
! 0dd4338cd28438a704f9186353e0e1fa  gcc/ada/libgnat/s-excdeb.adb
! d59a9e5990ff17c2da23b8a57ae9a012  gcc/ada/libgnat/s-excdeb.ads
! 46785adab829fb01f81b6f844004185e  gcc/ada/libgnat/s-except.adb
! 5d29e684bf78365274fa8b7475e61949  gcc/ada/libgnat/s-except.ads
! 0833e16d7a8c2bfaa477de26555d4596  gcc/ada/libgnat/s-excmac__arm.adb
! 1f387ebd1084f37f653ae7f284926626  gcc/ada/libgnat/s-excmac__arm.ads
! 759e6da28d6ca83f710497e2fee772d0  gcc/ada/libgnat/s-excmac__gcc.adb
! 42de5d265c560f9b05b38add94348aad  gcc/ada/libgnat/s-excmac__gcc.ads
! 84d09e207a176a373f2dea24462165ac  gcc/ada/libgnat/s-exctab.adb
! f28b4667ba3f14b0824bc04c87678f67  gcc/ada/libgnat/s-exctab.ads
! 163afc4f60eb95896433ae797a94e771  gcc/ada/libgnat/s-exctra.adb
! 58746115e95282950c071536adac791a  gcc/ada/libgnat/s-exctra.ads
! be6097f0c5fcb90dd5002019b5e31ec6  gcc/ada/libgnat/s-exnint.adb
! bea3559958520ad7b53fbdc9a93d5e1a  gcc/ada/libgnat/s-exnint.ads
! 630cec97bd1817f07f7967a16e0e6423  gcc/ada/libgnat/s-exnllf.adb
! 14adc4f2d85bbf5f2fe206259004fb96  gcc/ada/libgnat/s-exnllf.ads
! 57b0ad3d84494f8e49c8633f9fbe5087  gcc/ada/libgnat/s-exnlli.adb
! e9ee2699b94c534d0afb340170deccae  gcc/ada/libgnat/s-exnlli.ads
! 00202c6412243935c7d91f945a330efd  gcc/ada/libgnat/s-exnllli.ads
! 0657b064e862e286e4282a1f95fb3b0b  gcc/ada/libgnat/s-expint.adb
! 2a520e5ef77d5d8f93744a8bb852e371  gcc/ada/libgnat/s-expint.ads
! 85f951fba8dfb02e2d7088864f1999fd  gcc/ada/libgnat/s-explli.adb
! d6e2983533e23601d856f715ed765d50  gcc/ada/libgnat/s-explli.ads
! ff73727dd4fe8341262d6182c8becc21  gcc/ada/libgnat/s-expllli.ads
! dc66433ee0fb5e4c92c4e5be30174efd  gcc/ada/libgnat/s-explllu.ads
! 90ee393ef2e71711929aabf1916c61e1  gcc/ada/libgnat/s-expllu.adb
! c88a66530849d247b8ecd70674d31aa7  gcc/ada/libgnat/s-expllu.ads
! 9dce269df4800bf329dc17b6ff6d20c3  gcc/ada/libgnat/s-expmod.adb
! e7bbd971baddffc8c10b52f8069d087a  gcc/ada/libgnat/s-expmod.ads
! 1f9b7db2d50df6b32165cf2f97d3132f  gcc/ada/libgnat/s-exponn.adb
! 4d23c238d87330edac36c3345e12ddde  gcc/ada/libgnat/s-exponn.ads
! 48563aab06969bae2d30dc9b00533656  gcc/ada/libgnat/s-expont.adb
! a40a7038ef7ec07a4222710ec95ca5c1  gcc/ada/libgnat/s-expont.ads
! 829bba2174041b0f691e440b5ae1a9da  gcc/ada/libgnat/s-exponu.adb
! c4599ca02a073643cd724fd9095fa254  gcc/ada/libgnat/s-exponu.ads
! bafc5fb004375e9c4bc368785fc57663  gcc/ada/libgnat/s-expuns.adb
! b03284c66e65e31c105abda2311ace30  gcc/ada/libgnat/s-expuns.ads
! 8429877cbd5a2131d77564d46fc3f716  gcc/ada/libgnat/s-fatflt.ads
! 4570fdac5d2a54760122d2a97de7d352  gcc/ada/libgnat/s-fatgen.adb
! 4de438a65d4c443d452fe5634a41edc8  gcc/ada/libgnat/s-fatgen.ads
! b4c158e4dba4174571da761b9089746f  gcc/ada/libgnat/s-fatlfl.ads
! ca5fa0d4b2aebba5da1a3bdf56965b7d  gcc/ada/libgnat/s-fatllf.ads
! 117fb1bbe02f19fdb384ab479d0081c4  gcc/ada/libgnat/s-ficobl.ads
! 5583e01e5cb546ea4b37fb06bbf93f1c  gcc/ada/libgnat/s-filatt.ads
! bb1ff18bef4be87f17733a037035838d  gcc/ada/libgnat/s-fileio.adb
! b5ab3ee26ca0da63ac04afc40df2005a  gcc/ada/libgnat/s-fileio.ads
! 963836be538a6b3aacc554af2f4b9f5a  gcc/ada/libgnat/s-finmas.adb
! 92100c4a572f5f46627083beea204d09  gcc/ada/libgnat/s-finmas.ads
! 621c517f71a880066d7f42cac2f66c2a  gcc/ada/libgnat/s-finroo.adb
! da5e2f5c5a9de87998420ff3849f12a5  gcc/ada/libgnat/s-finroo.ads
! 357db2624ce0474d12ea303601e918b6  gcc/ada/libgnat/s-flocon.adb
! 162d9a1a4ae75fdf7863146298e5363d  gcc/ada/libgnat/s-flocon.ads
! 260027561d242848f3606c5bf011737b  gcc/ada/libgnat/s-flocon__none.adb
! 664b5f7eb74a5e9dd3dd13557ebc022a  gcc/ada/libgnat/s-fode128.ads
! ca1551c6f0d447692e7c171bc50ade7c  gcc/ada/libgnat/s-fode32.ads
! f12abff2663d20be858c684f85445eb8  gcc/ada/libgnat/s-fode64.ads
! 6a59a390b0efeb3b099b64949c5d16ee  gcc/ada/libgnat/s-fofi128.ads
! ae1946d1807f30a215797d6d76f2ea45  gcc/ada/libgnat/s-fofi32.ads
! 9e0690d6aa4995df8a33896bd7788d97  gcc/ada/libgnat/s-fofi64.ads
! 9d996da738f5b84aee0add05e0fe1236  gcc/ada/libgnat/s-fore_d.adb
! 57328dea21e064cc837bc9f814f5fb9e  gcc/ada/libgnat/s-fore_d.ads
! c42a2bc8cd049d3d32bf65ec6d88e87c  gcc/ada/libgnat/s-fore_f.adb
! d6a98037dc2d7dce8df579d6931198f7  gcc/ada/libgnat/s-fore_f.ads
! 81b7123e8cf333bbc4b02b5027b84959  gcc/ada/libgnat/s-forrea.adb
! f3c0ec7ed04b016ee9cfa503b1d7815f  gcc/ada/libgnat/s-forrea.ads
! 2e13e7b04c74b139ba475ccaab752a8d  gcc/ada/libgnat/s-gearop.adb
! 5a79f7a9fffb921af15b79a495059c21  gcc/ada/libgnat/s-gearop.ads
! 2a96a4eda27a597d4655364a832207ee  gcc/ada/libgnat/s-genbig.adb
! bce1f8b11ee28239f4c3d1ac5e4927cd  gcc/ada/libgnat/s-genbig.ads
! 4c1d97bbb56f17bd0757b1342ab2f836  gcc/ada/libgnat/s-geveop.adb
! fa170c7dc3345868e002eb90b609af1a  gcc/ada/libgnat/s-geveop.ads
! 37d1acce28e9d24cce9fadd903b03792  gcc/ada/libgnat/s-gloloc.adb
! 966c01f8ef32d2dec86f48046197ae74  gcc/ada/libgnat/s-gloloc.ads
! 4fa5a833f3e060b50037d9529048c011  gcc/ada/libgnat/s-gloloc__mingw.adb
! 487f82edff565c673cbb640f7d4f5ed4  gcc/ada/libgnat/s-htable.adb
! ed9057e7ae23ee4da0201f16188996b6  gcc/ada/libgnat/s-htable.ads
! 957d821ed5d7351e7e99774c4f4f920c  gcc/ada/libgnat/s-imageb.adb
! 5a6584f75a9fc7371e95ed5facf958d7  gcc/ada/libgnat/s-imageb.ads
! b719ba4609ee0d22d790bfa6af6ea9ea  gcc/ada/libgnat/s-imaged.adb
! f1063af3562119a3dfcf8c89dd415b7b  gcc/ada/libgnat/s-imaged.ads
! a342b2a55b5657f7a37b2eb16887b42c  gcc/ada/libgnat/s-imagef.adb
! e544bddc44e64f53baf1b52beb0919b8  gcc/ada/libgnat/s-imagef.ads
! 0301fb8e30554d0827f50df2b729cd3a  gcc/ada/libgnat/s-imagei.adb
! a0998648d9dc211b5bf9b7af08a93804  gcc/ada/libgnat/s-imagei.ads
! fd2c0ed4ff09cd177037cdb7f984d9a4  gcc/ada/libgnat/s-imageu.adb
! 8a0f3ac1b0001f906d7952b31ce8a1cf  gcc/ada/libgnat/s-imageu.ads
! 4706ed526a9ad59627f678613d53f2db  gcc/ada/libgnat/s-imagew.adb
! 4ee071d8aa3d2723421b9e6bc6ab9ca9  gcc/ada/libgnat/s-imagew.ads
! d3137a3346f7b112faeb272503783c99  gcc/ada/libgnat/s-imde128.ads
! ec8c93e773609f93977512ca560a1c82  gcc/ada/libgnat/s-imde32.ads
! 61d256fd83dd21daf70e41c4a053b933  gcc/ada/libgnat/s-imde64.ads
! 1281626baf406e4c86e90ae1448ab894  gcc/ada/libgnat/s-imenne.adb
! aee5de1f2757660eb397fe80b7375b96  gcc/ada/libgnat/s-imenne.ads
! 5eaa9fa58c19d0056a52cb4309d37a8d  gcc/ada/libgnat/s-imfi128.ads
! 930e73eddaeaf643b585738817a78f50  gcc/ada/libgnat/s-imfi32.ads
! eb6d98083459ee2e3e6d874cfa04f72a  gcc/ada/libgnat/s-imfi64.ads
! 5d63c26d460500b6afe9fec4ced9e787  gcc/ada/libgnat/s-imgbiu.adb
! 4ef6d1aadd5858f4c72391d11a050476  gcc/ada/libgnat/s-imgbiu.ads
! 42843e7fde059f427f6a36f5208769ee  gcc/ada/libgnat/s-imgboo.adb
! 359d2f9f8dead7da4129d1d91121348a  gcc/ada/libgnat/s-imgboo.ads
! 4ef4ff8ff71506a0e730e43252855d59  gcc/ada/libgnat/s-imgcha.adb
! 1228fbd720560c0a0e22e268b9b8cd86  gcc/ada/libgnat/s-imgcha.ads
! 2427cefa3d5f5bd2519ef1e699ef037d  gcc/ada/libgnat/s-imgenu.adb
! 6e14e67c8aeeaf28dba128d1c1fa7f4c  gcc/ada/libgnat/s-imgenu.ads
! 42e3cc8f630e96be928e0deca819b341  gcc/ada/libgnat/s-imgint.adb
! a545095f4bce287d69a9b59a035d45d1  gcc/ada/libgnat/s-imgint.ads
! 387f01c1cc6445d15d1a2d0042da63b2  gcc/ada/libgnat/s-imgllb.adb
! 0ae238475354472c9a874fae929358eb  gcc/ada/libgnat/s-imgllb.ads
! d2ce7202a6254b3db80b2b315e0ed50d  gcc/ada/libgnat/s-imglli.adb
! 81a4389f715138c9017d1f365f2409e2  gcc/ada/libgnat/s-imglli.ads
! a236d0079c0b1036b23c81855d0fa2ba  gcc/ada/libgnat/s-imglllb.ads
! 808f9a4e5d877b8e45e6b8536d3cce65  gcc/ada/libgnat/s-imgllli.ads
! 5521e02f61fc3ad369a7c4698f4f3b4b  gcc/ada/libgnat/s-imglllu.ads
! b24d352d5cfc21198615e58577012064  gcc/ada/libgnat/s-imglllw.ads
! f234f250253e6df0daff26c26a2f73de  gcc/ada/libgnat/s-imgllu.adb
! 01a0d8e48fe92c269eca2ca8287379ac  gcc/ada/libgnat/s-imgllu.ads
! 7ec27300e6091dd9b00405988692fa6a  gcc/ada/libgnat/s-imgllw.adb
! a0bfacb2c3ae9b5b3d397e6500c07671  gcc/ada/libgnat/s-imgllw.ads
! dce6bd85ddd7e8144b50cc00b44b6625  gcc/ada/libgnat/s-imgrea.adb
! 39ec0a895ad59cef50bee8b8d327e5ae  gcc/ada/libgnat/s-imgrea.ads
! abcf1a231d1fd92538dc5d9e57e31ed7  gcc/ada/libgnat/s-imguns.adb
! 631e98fe68a2b673629c126edd485765  gcc/ada/libgnat/s-imguns.ads
! b2f758e63f432d29cc2b16139a364ed4  gcc/ada/libgnat/s-imguti.adb
! 01170938d7718d0cf6fc9cc56aaa0e9c  gcc/ada/libgnat/s-imguti.ads
! 13edfb36cf2c13d13a219bee05787092  gcc/ada/libgnat/s-imgwch.adb
! a471bbf94f0e241f573fc0f1105a241f  gcc/ada/libgnat/s-imgwch.ads
! 241c4bb5d82339ac5c3f66beed5a2ea3  gcc/ada/libgnat/s-imgwiu.adb
! 7fbbed3dac9d2c7aa8d8fc20d32290cc  gcc/ada/libgnat/s-imgwiu.ads
! 7e2b8a32b76c636144be0b6d852f98d1  gcc/ada/libgnat/s-io.adb
! 2001bf92987049c8054d26e3ff9e7d2a  gcc/ada/libgnat/s-io.ads
! e56677828d65e781a074340c52c4cdf5  gcc/ada/libgnat/s-llflex.ads
! ae23fd16618055e54b87420484e68bb8  gcc/ada/libgnat/s-maccod.ads
! bd00acac3c5fcff2f5082f32cc97dc13  gcc/ada/libgnat/s-mantis.adb
! 64e5f692cb201ca91bf370aab7d98b16  gcc/ada/libgnat/s-mantis.ads
! 369e957355973a9e3a33051a0a8d0cef  gcc/ada/libgnat/s-mastop.adb
! f57be18c26930f98683a3c9661a1e9a9  gcc/ada/libgnat/s-mastop.ads
! 30dbf76839f0c13af781c2e49af81fd8  gcc/ada/libgnat/s-memcop.ads
! 1fb04437ac5bc777db746e4cf78e724c  gcc/ada/libgnat/s-memory.adb
! ada99e1f329507069ddb72f3031b5754  gcc/ada/libgnat/s-memory.ads
! 25a60fb3af5ba8b851f394aef46e5be9  gcc/ada/libgnat/s-mmap.adb
! dab2b8be550e55d00ca94247fac2498c  gcc/ada/libgnat/s-mmap.ads
! aa254fb95efa452bb15616e1b7bf174b  gcc/ada/libgnat/s-mmauni__long.ads
! 194ecdaf0f4da7cf4020c3c0e1669110  gcc/ada/libgnat/s-mmosin__mingw.adb
! 25f531f0dc5532d97e99d762ab0eaf4d  gcc/ada/libgnat/s-mmosin__mingw.ads
! 4cbd3ceb66ebfe9309f4d03cc2703792  gcc/ada/libgnat/s-mmosin__unix.adb
! ab01a15caf9165c063e0d20a38877d4d  gcc/ada/libgnat/s-mmosin__unix.ads
! 611b533cb01f61813d94cb23135309f6  gcc/ada/libgnat/s-multip.adb
  c4045ad22005510940d70e1a445db431  gcc/ada/libgnat/s-multip.ads
! c3e909dbfbec3dd425b7b004620717e1  gcc/ada/libgnat/s-objrea.adb
! bc4adc62598e23e17cc77c0cd01510ff  gcc/ada/libgnat/s-objrea.ads
! b0e9287c8eecd65d0d3b68e8cc84fa7d  gcc/ada/libgnat/s-optide.adb
! fdc60857ea008fc2ef4dd93a4be4017b  gcc/ada/libgnat/s-os_lib.adb
! 941a9e868e71769fb5d06f25039e0c01  gcc/ada/libgnat/s-os_lib.ads
! 4fa3052479a238c184ccbb8acfae7216  gcc/ada/libgnat/s-osprim.ads
! 2cbb7d626c96b8e4b9b9809958ed59d0  gcc/ada/libgnat/s-osprim__darwin.adb
! f5539c249f1867f95d0c1ba2e3e718fc  gcc/ada/libgnat/s-osprim__lynxos.ads
! 5d08e4f0f6140c63a77b6ffee91e077d  gcc/ada/libgnat/s-osprim__mingw.adb
! 44987890981a4890d2a92443e5bc4c93  gcc/ada/libgnat/s-osprim__posix.adb
! 6097164212bbdb9326264fc5df983ec8  gcc/ada/libgnat/s-osprim__posix2008.adb
! 8b8b3559c7d2b584be4c14c78d05bdab  gcc/ada/libgnat/s-osprim__rtems.adb
! b24307917e74d62eecb992f564d905fe  gcc/ada/libgnat/s-osprim__solaris.adb
! d85a8e90c12e2fda9454aa6d8b534aad  gcc/ada/libgnat/s-osprim__unix.adb
! eef2f98a7ea14aea35e30003674d4ec1  gcc/ada/libgnat/s-osprim__vxworks.adb
! 19d8d33a98aac2f1e7f14770d6d3e506  gcc/ada/libgnat/s-osprim__x32.adb
! c1aae562f0c9f6342aa463cca0bebfd2  gcc/ada/libgnat/s-osvers__vxworks-653.ads
! ca3eda032e23614b22b8f32fd8346092  gcc/ada/libgnat/s-pack03.adb
! bca3aa8c440de98088d2575e88004b1b  gcc/ada/libgnat/s-pack03.ads
! f325cd1ccb9cfcfede7662093f7441d7  gcc/ada/libgnat/s-pack05.adb
! 17b48fab23b6c9ea06fc6ab495996754  gcc/ada/libgnat/s-pack05.ads
! f58d4204ac8d667846b789518b1f482d  gcc/ada/libgnat/s-pack06.adb
! 77e4027fab9a53486448e59b7600e434  gcc/ada/libgnat/s-pack06.ads
! c82f76d792cf1e1a400919e24aab4a21  gcc/ada/libgnat/s-pack07.adb
! 9105f1aab9fff6dee38ecbf633978585  gcc/ada/libgnat/s-pack07.ads
! c4f869712fb8a42d3f3542c53acca3e5  gcc/ada/libgnat/s-pack09.adb
! 3b907999aa9bbac10f28dbc6e8ffa1b8  gcc/ada/libgnat/s-pack09.ads
! b9306e122d8d421bde6c46aa00813c53  gcc/ada/libgnat/s-pack10.adb
! 274ba00c70c57b29c53ea09391165d11  gcc/ada/libgnat/s-pack10.ads
! 446e560e1d168feb5d842bcad614e5fd  gcc/ada/libgnat/s-pack100.adb
! eb74b4779356b13a642b36697804284d  gcc/ada/libgnat/s-pack100.ads
! 5ab5444ae71e17dddaac4cc83b268f37  gcc/ada/libgnat/s-pack101.adb
! 17cebc69df59a69bf5e6da152fa46846  gcc/ada/libgnat/s-pack101.ads
! bdf843ac12f4a208cdfdfaec93202e9e  gcc/ada/libgnat/s-pack102.adb
! 7861a3411093f2714136b35cfac23f15  gcc/ada/libgnat/s-pack102.ads
! 839b6d1ae17903692e957721fcb8355a  gcc/ada/libgnat/s-pack103.adb
! 464ce990dc6c4f479b7852c2013a624a  gcc/ada/libgnat/s-pack103.ads
! 2c42782c119e4929660f6aa8821d6705  gcc/ada/libgnat/s-pack104.adb
! f020f420387adcaea26b1a987730b78f  gcc/ada/libgnat/s-pack104.ads
! f3c3cbdd14346408b4e4e27e79dd8928  gcc/ada/libgnat/s-pack105.adb
! d29d642aa14446d3681d610220fba3f1  gcc/ada/libgnat/s-pack105.ads
! f8d1f45622396d04f28b7efa097ae997  gcc/ada/libgnat/s-pack106.adb
! 5719ccf09be874bedf5e7ff2e6e50ee0  gcc/ada/libgnat/s-pack106.ads
! 303efdce43e0fc987b089b3593755c1c  gcc/ada/libgnat/s-pack107.adb
! ab5469093963966c6827983f72dd0ab7  gcc/ada/libgnat/s-pack107.ads
! 12976ed669260ffe03a55b600d7028b4  gcc/ada/libgnat/s-pack108.adb
! 1e35d169e24779b45d77dbc4328bb084  gcc/ada/libgnat/s-pack108.ads
! 2cc8db940a485a154659453d99c2975b  gcc/ada/libgnat/s-pack109.adb
! 32d7b8773a804b34fbd920278c215244  gcc/ada/libgnat/s-pack109.ads
! b2dac557fce841176e7e91f7860c9fae  gcc/ada/libgnat/s-pack11.adb
! 62619080d89e1dc19f3ccce710dbde9c  gcc/ada/libgnat/s-pack11.ads
! fab609ff4832a6fd8038eb7da6c7071b  gcc/ada/libgnat/s-pack110.adb
! 7202337eb9a0ff1755d16fcea5b8ea68  gcc/ada/libgnat/s-pack110.ads
! fe100230d1b8acf94fd400362bc8e546  gcc/ada/libgnat/s-pack111.adb
! 500a960e173c31308d3314510693f2ad  gcc/ada/libgnat/s-pack111.ads
! c089a679e7b8b4c1bd2165bd024f5b90  gcc/ada/libgnat/s-pack112.adb
! d56808b64f35e515bbca38bfedab13bf  gcc/ada/libgnat/s-pack112.ads
! 9bb9891b05c9218d1e71882f4f366b4c  gcc/ada/libgnat/s-pack113.adb
! a12d86a41860479380aa0163fa4f098b  gcc/ada/libgnat/s-pack113.ads
! eeb5b7c42781f22d3311aeeff946ddb7  gcc/ada/libgnat/s-pack114.adb
! 012626035e4705371b867fa91c5835f6  gcc/ada/libgnat/s-pack114.ads
! 7d090fdccfbac17c9c9325c6cc86f84e  gcc/ada/libgnat/s-pack115.adb
! 496fe5ab7066af6bcb6f30ac430ebbc0  gcc/ada/libgnat/s-pack115.ads
! 79f68ff29c1310090db9c9ad0e2fb4ca  gcc/ada/libgnat/s-pack116.adb
! 6c9809abb5d75bfc2125343f185829c8  gcc/ada/libgnat/s-pack116.ads
! 8c2eab9baaeaebf5a518853d0cd331ea  gcc/ada/libgnat/s-pack117.adb
! 4d6e4ea31f417c674c5523c6b5d15aa7  gcc/ada/libgnat/s-pack117.ads
! 2dd38449efa385a9dcb78503ac199f9a  gcc/ada/libgnat/s-pack118.adb
! 184bfc99cac445d66e63cbb162f1bda5  gcc/ada/libgnat/s-pack118.ads
! 3ffc11692eee244e8223d0700ce3b802  gcc/ada/libgnat/s-pack119.adb
! fcd10ae63b04194ecf5e002b367fe0da  gcc/ada/libgnat/s-pack119.ads
! 9f4b6dbec7a1306346e83c8f69d84b40  gcc/ada/libgnat/s-pack12.adb
! 9d5eacdd293064bb7cd5c81150deeeb7  gcc/ada/libgnat/s-pack12.ads
! 31abb4af7cb1c60ccde09fe0628e66a7  gcc/ada/libgnat/s-pack120.adb
! 519095c042dcbe5d3b0082cf6f698477  gcc/ada/libgnat/s-pack120.ads
! e41cbc3ad98f7a019648c28c44eec8eb  gcc/ada/libgnat/s-pack121.adb
! 25236606edd24a45a3a14bd54ca3923e  gcc/ada/libgnat/s-pack121.ads
! ea59319faaf96d2f5d2b2ca8263e5618  gcc/ada/libgnat/s-pack122.adb
! 4cd3d9eae73c1bcde08064844b95a2c8  gcc/ada/libgnat/s-pack122.ads
! e80a8c8cbd9d991212d8279e3819c245  gcc/ada/libgnat/s-pack123.adb
! 23e119c0a097aa7001edbc8889897ddc  gcc/ada/libgnat/s-pack123.ads
! e705cac38ea7beb267816d286da93f0e  gcc/ada/libgnat/s-pack124.adb
! e96053720b83f1937cb8737542eac646  gcc/ada/libgnat/s-pack124.ads
! 98425d63d2468631a3920dd8c351860b  gcc/ada/libgnat/s-pack125.adb
! 6f24bd68ff775207225e2ac338f2bf51  gcc/ada/libgnat/s-pack125.ads
! 7a8e27c121a7b940c5bada896e2ed57d  gcc/ada/libgnat/s-pack126.adb
! bdffc96ce9c61da4bd830712f302ddf0  gcc/ada/libgnat/s-pack126.ads
! 51419ec2152eac6a300e6b661b5eafe0  gcc/ada/libgnat/s-pack127.adb
! 5249264afe04859940f0ee5e077b2939  gcc/ada/libgnat/s-pack127.ads
! 0f9749f58bd21073eea634fde0fe6528  gcc/ada/libgnat/s-pack13.adb
! 52a9e8c02f6a6ab93f4a81a42cd61289  gcc/ada/libgnat/s-pack13.ads
! 02664d26345d6c55c87fd5a35ce77144  gcc/ada/libgnat/s-pack14.adb
! c6dddade011f752afefc9b667a4f68cb  gcc/ada/libgnat/s-pack14.ads
! 3905c135366ae7ca5815e37c7f82c682  gcc/ada/libgnat/s-pack15.adb
! d2dba5d176de56d50533e06faaa21ab3  gcc/ada/libgnat/s-pack15.ads
! c5d3fa3a996bb854a21efdda4b571e8d  gcc/ada/libgnat/s-pack17.adb
! d752b91e8d87541db871418ca1d7cbf3  gcc/ada/libgnat/s-pack17.ads
! 77fd1961b7cc9cd6a320bd83cec0794e  gcc/ada/libgnat/s-pack18.adb
! a45d3097da3c3b37236c0b0047b0ceab  gcc/ada/libgnat/s-pack18.ads
! 6b9fa7fc9ba1ea6f62c2092a9729d657  gcc/ada/libgnat/s-pack19.adb
! 5f109703da92522b80e3978aeb325c72  gcc/ada/libgnat/s-pack19.ads
! 2adfdcc428a0a3d68a975cde85f509d2  gcc/ada/libgnat/s-pack20.adb
! defea63537ba00ea5f2d3090546f5768  gcc/ada/libgnat/s-pack20.ads
! 39af6620dbee07f6c472f98f1d20333c  gcc/ada/libgnat/s-pack21.adb
! 0a9e23428004abd27d39c497c4b828c6  gcc/ada/libgnat/s-pack21.ads
! 67bb11a6c00bb22031cd6ab8ffcd185f  gcc/ada/libgnat/s-pack22.adb
! f9780134c74676eafc17bd8dcf59b9d6  gcc/ada/libgnat/s-pack22.ads
! c71e74eb99abd1cb0adb44b3bb28d882  gcc/ada/libgnat/s-pack23.adb
! dbe098a0477bb881f3f03a8047fd58dd  gcc/ada/libgnat/s-pack23.ads
! 107c941d2ecfb9a32ba7973611b612e6  gcc/ada/libgnat/s-pack24.adb
! cda4b74acd16fb7e188f2b967fd95365  gcc/ada/libgnat/s-pack24.ads
! 62320f06e34cd78fc58f57e59ff388b1  gcc/ada/libgnat/s-pack25.adb
! cbda45dec3b05cfcf72bb373b207f0f2  gcc/ada/libgnat/s-pack25.ads
! 1749874b6744a5118bd3fffedb1a9f37  gcc/ada/libgnat/s-pack26.adb
! c616b84b3bb4bf93753edb119c421bbd  gcc/ada/libgnat/s-pack26.ads
! 43be92c9fa9f7096ee75f300645076fd  gcc/ada/libgnat/s-pack27.adb
! 0ae28b19265828177e7ff9a5ba020da5  gcc/ada/libgnat/s-pack27.ads
! 4eace469d4d5a88b9e971db625adc4df  gcc/ada/libgnat/s-pack28.adb
! 0a519a35b13ffb62745222a375a74740  gcc/ada/libgnat/s-pack28.ads
! ab72c679349d084ec9c53c98bea805b0  gcc/ada/libgnat/s-pack29.adb
! 5cbfc9d70b6c8c5735dd86942cf34fe7  gcc/ada/libgnat/s-pack29.ads
! 1d8a9cf465bb3b56b1247f29631fea08  gcc/ada/libgnat/s-pack30.adb
! 4c0dac182bc296646ced03aff583bc1c  gcc/ada/libgnat/s-pack30.ads
! bfdfe822791aafeadec4ec3eedbfb3ee  gcc/ada/libgnat/s-pack31.adb
! 6eb3b23494d51cf3f046f703f3e52c33  gcc/ada/libgnat/s-pack31.ads
! 61d097bfaef50c00f9b3d053ee7ad577  gcc/ada/libgnat/s-pack33.adb
! 4a9637730692f23a3666e44aec12c500  gcc/ada/libgnat/s-pack33.ads
! 36959db4e6ee4d77f042e7adfa4fe89b  gcc/ada/libgnat/s-pack34.adb
! 136c045992204682fb684448e741fee3  gcc/ada/libgnat/s-pack34.ads
! d86e55ffd2cbe16971fad40b25ad9421  gcc/ada/libgnat/s-pack35.adb
! 80ac1781dd33bde9b4aef8924b20cac4  gcc/ada/libgnat/s-pack35.ads
! a414fdc07b17c0b0aec55c123a965203  gcc/ada/libgnat/s-pack36.adb
! e53149127ee1da438bec51e2aad1a8f0  gcc/ada/libgnat/s-pack36.ads
! 01761fdf5ad0e9f6715f63ffc3eade49  gcc/ada/libgnat/s-pack37.adb
! ef7ceba443dee467268738c1d81665c7  gcc/ada/libgnat/s-pack37.ads
! 071165e3d529c89e22c15896fefe96fd  gcc/ada/libgnat/s-pack38.adb
! 3e62a9128e70930ec1fc84a05567abab  gcc/ada/libgnat/s-pack38.ads
! d3fce8e639a56f4a22f732ed6e32353a  gcc/ada/libgnat/s-pack39.adb
! d1f9caacd9228585a595f2402d9fea80  gcc/ada/libgnat/s-pack39.ads
! 3f307603eb96220e28add9299d1eb8bf  gcc/ada/libgnat/s-pack40.adb
! b5457896c7b9ae99b59bed6ed07af33e  gcc/ada/libgnat/s-pack40.ads
! 858f89995aeb16d40d1a7028b7fb4d1b  gcc/ada/libgnat/s-pack41.adb
! 0ec8e5c9307ec378ec49a0a6b4b35280  gcc/ada/libgnat/s-pack41.ads
! 5b13871787a55bd4bf9fddb4e285bfa9  gcc/ada/libgnat/s-pack42.adb
! 4c465550ab1b0b962bebfefe2a08a53f  gcc/ada/libgnat/s-pack42.ads
! 3ea383dda21660e29f321718119d62bf  gcc/ada/libgnat/s-pack43.adb
! 88918b0a2a7c8a5e83c129502c59e307  gcc/ada/libgnat/s-pack43.ads
! 33ef57dc69601fcb7119395331d9af7d  gcc/ada/libgnat/s-pack44.adb
! d6e552914b99aaa48bb9abb2f4702222  gcc/ada/libgnat/s-pack44.ads
! 681e5bfaac039722698e84d0633d0e8c  gcc/ada/libgnat/s-pack45.adb
! 4a85ef2da93eff6a73e1adc54082d5be  gcc/ada/libgnat/s-pack45.ads
! 5d97d5cdf98f4e756b7876eb6f73bdca  gcc/ada/libgnat/s-pack46.adb
! f1ef65efecb6bb88b9b8ae707e092efa  gcc/ada/libgnat/s-pack46.ads
! a8953f1cafc1c82edcae967b82928f7f  gcc/ada/libgnat/s-pack47.adb
! dcf9d3ea5071c0a0eee58360b720886b  gcc/ada/libgnat/s-pack47.ads
! 123a8e82eaba3dd10305a989cbcfbdb2  gcc/ada/libgnat/s-pack48.adb
! b2997072692fe3d02ba0e6484e8287a8  gcc/ada/libgnat/s-pack48.ads
! 14fa61990488c455cb8c19415691b68a  gcc/ada/libgnat/s-pack49.adb
! ed901a8059e5af5b323a0aedf02b2847  gcc/ada/libgnat/s-pack49.ads
! 9448839e8dd6850b722b4f4adb5773e2  gcc/ada/libgnat/s-pack50.adb
! f2a82c8bb1214877735ce523708ba312  gcc/ada/libgnat/s-pack50.ads
! ed97472c123f9650ddbc311cdc7db1d7  gcc/ada/libgnat/s-pack51.adb
! 959f1a4493b73d8f3cf03f29fb31ba56  gcc/ada/libgnat/s-pack51.ads
! 362f830f537b9f917250a0a92c4f5e89  gcc/ada/libgnat/s-pack52.adb
! 62d680f61797f5507c750df43b038f08  gcc/ada/libgnat/s-pack52.ads
! 45bfec2dcd03d981eabae64c07689ea3  gcc/ada/libgnat/s-pack53.adb
! 282921602ae358724f53f6b2accaa446  gcc/ada/libgnat/s-pack53.ads
! d51eeb5e8a00b9dde7cc2358f7e0a569  gcc/ada/libgnat/s-pack54.adb
! ed2ff44800a6f60cdfe5ea892c82d556  gcc/ada/libgnat/s-pack54.ads
! 9dbfe7b47a24a161dabfa6e184c174e2  gcc/ada/libgnat/s-pack55.adb
! 45e2b7c389d4c2d668eeec9be6b2fc80  gcc/ada/libgnat/s-pack55.ads
! 3b26906437ba02a7fab834f75393a8e3  gcc/ada/libgnat/s-pack56.adb
! 1f7c067f59a3e246348b92dfbe93c116  gcc/ada/libgnat/s-pack56.ads
! 354a4db4c0f935f84efe3e5f98abb439  gcc/ada/libgnat/s-pack57.adb
! c606fa27a16e23a71de158a1dd9e7615  gcc/ada/libgnat/s-pack57.ads
! 70022ef673e8bba43ee37b065f5ac3a4  gcc/ada/libgnat/s-pack58.adb
! 8fcf9d87242a13acf3d9f101d9799043  gcc/ada/libgnat/s-pack58.ads
! eedb3ee61a848f79ee840a572a898f62  gcc/ada/libgnat/s-pack59.adb
! a84809cb843bfa8617599b0c93c4bcf4  gcc/ada/libgnat/s-pack59.ads
! 1ac3d94b27d17e97b97d298e9502bcd2  gcc/ada/libgnat/s-pack60.adb
! a0272dfa7e8049c9b938bd9916fbab9c  gcc/ada/libgnat/s-pack60.ads
! a2f2c204f25ffa3f925219a6a01a095f  gcc/ada/libgnat/s-pack61.adb
! f3ec988474a66aa39eea5d7359f92806  gcc/ada/libgnat/s-pack61.ads
! 2e233e28d4c316aa96e08ba1689a79e0  gcc/ada/libgnat/s-pack62.adb
! 1249d2f3829287a3aecd816723d617a9  gcc/ada/libgnat/s-pack62.ads
! 4b6b8b37c92f7cb9ecdf01d2910b2498  gcc/ada/libgnat/s-pack63.adb
! 2de0c7b2e891d220eeffe6dfe725590e  gcc/ada/libgnat/s-pack63.ads
! d5bf5419f3691823a82c10876309081b  gcc/ada/libgnat/s-pack65.adb
! f3f21a9c122ea72c39abbddd24b1f2f7  gcc/ada/libgnat/s-pack65.ads
! d44d069ac0a2f862a15f62a7fb93fac6  gcc/ada/libgnat/s-pack66.adb
! a0c4e9f76db43901ca35b976de4dd0d0  gcc/ada/libgnat/s-pack66.ads
! 0072baaf4c0a5376840f67b0867866e1  gcc/ada/libgnat/s-pack67.adb
! 11a4a0406e01c9dcb692e165de223714  gcc/ada/libgnat/s-pack67.ads
! ba2ce15617d7b618f3fe943874e79156  gcc/ada/libgnat/s-pack68.adb
! 1416a9ed79b588bd214fe28acdc476d1  gcc/ada/libgnat/s-pack68.ads
! 53a6f6bd0474418326dd886aaf0fe619  gcc/ada/libgnat/s-pack69.adb
! ea3aea6ae3386362ffd3ee4dc1fff66b  gcc/ada/libgnat/s-pack69.ads
! 837d5d7c114a25b35620d6a66dab182e  gcc/ada/libgnat/s-pack70.adb
! 3698ce749a4f2034e5190c43b8f49d9e  gcc/ada/libgnat/s-pack70.ads
! d4d7d42c8c7ade1d1c63a3b600187636  gcc/ada/libgnat/s-pack71.adb
! 44040597654a7ec5c9a73c3232db191e  gcc/ada/libgnat/s-pack71.ads
! 7951721e8a39bfadb5747ee8f8fccc5e  gcc/ada/libgnat/s-pack72.adb
! ee7c530f355cf2f9757b7182243f735c  gcc/ada/libgnat/s-pack72.ads
! 16fc733dcb5fa1e164645c1547be5df4  gcc/ada/libgnat/s-pack73.adb
! aba276a235f4eda5a724c8f6be008738  gcc/ada/libgnat/s-pack73.ads
! 2efdb41c1f52eee9099b7be5fe7d5ba5  gcc/ada/libgnat/s-pack74.adb
! ea3d13e0d59b861416c87a242e83e55b  gcc/ada/libgnat/s-pack74.ads
! fae31d9d7a30b946b1507ed4d778b0ac  gcc/ada/libgnat/s-pack75.adb
! eaf4a2e44f9ed528b2eb0c100bf55a6d  gcc/ada/libgnat/s-pack75.ads
! 89accc08670cf1a3152acc15e11d5a75  gcc/ada/libgnat/s-pack76.adb
! 48389c98350cc8c0b8e31d2924695e16  gcc/ada/libgnat/s-pack76.ads
! 03145570a6054b43d131e615074444e2  gcc/ada/libgnat/s-pack77.adb
! a76a52c345008737ad499a02874b967c  gcc/ada/libgnat/s-pack77.ads
! fc54e71745cb7dfdb4cf2f3e33af6278  gcc/ada/libgnat/s-pack78.adb
! 3a992cd4b8f8373af8f43aa1cc62699a  gcc/ada/libgnat/s-pack78.ads
! 4dd06e29f1584ac53d456e804cef5689  gcc/ada/libgnat/s-pack79.adb
! dd34e4264966f7c251a37623f529dc09  gcc/ada/libgnat/s-pack79.ads
! 15775be92a1f07a948b2b796f452be9d  gcc/ada/libgnat/s-pack80.adb
! 592aca4cf95640e73e6c21e69a9ce0c6  gcc/ada/libgnat/s-pack80.ads
! aa99f41ffc36e31fd3ed03ba96244529  gcc/ada/libgnat/s-pack81.adb
! 620440aad740937c0a6eb821e962973c  gcc/ada/libgnat/s-pack81.ads
! 427777782b04896147d6e48880124a3c  gcc/ada/libgnat/s-pack82.adb
! fb3c7a88ff92b0431154a7541902d1a4  gcc/ada/libgnat/s-pack82.ads
! 315cda339bfd94bb8199174418b3d814  gcc/ada/libgnat/s-pack83.adb
! 66d0657bf0df065c20292f2d01cac39a  gcc/ada/libgnat/s-pack83.ads
! fc133be5a5b131754cf5506fa73be643  gcc/ada/libgnat/s-pack84.adb
! 5557d3e0285f5eae87a1c8e99b7a178a  gcc/ada/libgnat/s-pack84.ads
! 44b82aa354e25d08085deddf889301ad  gcc/ada/libgnat/s-pack85.adb
! da2e15037409f66ee562765cb0b578a0  gcc/ada/libgnat/s-pack85.ads
! 11b7071fae70030591ed5c5404d80092  gcc/ada/libgnat/s-pack86.adb
! e445db04d88e3b7f9c2ce2e0b9f06d5c  gcc/ada/libgnat/s-pack86.ads
! 74b201c88ae18c5874753d09904c4aa5  gcc/ada/libgnat/s-pack87.adb
! ab877679c05d91b81aac7d89cf636af7  gcc/ada/libgnat/s-pack87.ads
! a30e7e145960c3f17935a0c1d0845e52  gcc/ada/libgnat/s-pack88.adb
! e1603983fe1963467d2429e848c007ed  gcc/ada/libgnat/s-pack88.ads
! 9dc332a4a2f74028a67f29a4ec6b6add  gcc/ada/libgnat/s-pack89.adb
! fc4a533da0d50c6055622eb9e2a1a32e  gcc/ada/libgnat/s-pack89.ads
! 81445ce2a49f0e54b88bafd737d84ec4  gcc/ada/libgnat/s-pack90.adb
! 97525dbaab098a2a7034180e83d63872  gcc/ada/libgnat/s-pack90.ads
! c4cbee79d8b8b6fba44fe7e8b6a333ff  gcc/ada/libgnat/s-pack91.adb
! 6c6c629437bd16526c2a4585bd28ffa1  gcc/ada/libgnat/s-pack91.ads
! 5a4242056f08c77fac872bcbb0ec572a  gcc/ada/libgnat/s-pack92.adb
! a6585e3ce0a0d29bbe0240d1f34805e4  gcc/ada/libgnat/s-pack92.ads
! e681e5da8e5ae60ddcdcbd42d782f649  gcc/ada/libgnat/s-pack93.adb
! 3a70de51c2d285edd84de859f537424b  gcc/ada/libgnat/s-pack93.ads
! f5b3d69a93cbfc029453ff383de0f411  gcc/ada/libgnat/s-pack94.adb
! f3fdd4308202560f022229a22a80ee1c  gcc/ada/libgnat/s-pack94.ads
! a77910674652663eb254c79ec4ea8430  gcc/ada/libgnat/s-pack95.adb
! d485a1bd121b58118d78855881715950  gcc/ada/libgnat/s-pack95.ads
! 44b07b1b1ff362e9fd3f2f04b410bc75  gcc/ada/libgnat/s-pack96.adb
! 187a05a3dd00db015d1f85239ffc7687  gcc/ada/libgnat/s-pack96.ads
! aab91e06f0b8ae9aefde5c43825ca583  gcc/ada/libgnat/s-pack97.adb
! 87885610fb905c45f0320ad05b63d164  gcc/ada/libgnat/s-pack97.ads
! 0aa14376cfb595f238fb982fc35580ee  gcc/ada/libgnat/s-pack98.adb
! e66486da53d07c5928afe2ed5e05f785  gcc/ada/libgnat/s-pack98.ads
! a3f332d17948adc79b2de25dac563794  gcc/ada/libgnat/s-pack99.adb
! 5c5bc0ebdc3d8a264e5d01cecfbecacb  gcc/ada/libgnat/s-pack99.ads
! 8630dcb5864bb4d30c894c8a2346bfa5  gcc/ada/libgnat/s-parame.adb
! 2f6047500aa770a9b56a4b12c46e1141  gcc/ada/libgnat/s-parame.ads
! 40572bea97a781fb08e34bab4180353d  gcc/ada/libgnat/s-parame__ae653.ads
! fd663bb9840209b0e68ab528a3799086  gcc/ada/libgnat/s-parame__hpux.ads
! d8d79e26ae471ed32859e3e2e471f2d4  gcc/ada/libgnat/s-parame__rtems.adb
! 4fac8501615e595f5421a3acfda1dee3  gcc/ada/libgnat/s-parame__vxworks.adb
! 3b27bb33caf990226bc9401d3da27be3  gcc/ada/libgnat/s-parame__vxworks.ads
! 6ef12dfa6faf3de4d38d79d5d4a8b8d4  gcc/ada/libgnat/s-parint.adb
! bff521600ba179509c6bea79cf575c94  gcc/ada/libgnat/s-parint.ads
! d0ad12a80e3531a2958b0aad5c4f74ae  gcc/ada/libgnat/s-pooglo.adb
! 3e0c31907128d7b54d2b7036440ee42d  gcc/ada/libgnat/s-pooglo.ads
! 5e7df4439f8e2f26d638443ece9fc873  gcc/ada/libgnat/s-pooloc.adb
! c8f4595b13a1a40471397fc6c624e373  gcc/ada/libgnat/s-pooloc.ads
! 4121b64e3d224a07a8354a00756e65bd  gcc/ada/libgnat/s-poosiz.adb
! 0f9ed4425115d091c24d178289b56bba  gcc/ada/libgnat/s-poosiz.ads
! 58a60931663ad6ffe891b32939528dc6  gcc/ada/libgnat/s-powflt.ads
! fe14093b2c226f856d6994ea26c5e343  gcc/ada/libgnat/s-powlfl.ads
! c3f69f9c25b6f57085c410ccd40c745f  gcc/ada/libgnat/s-powllf.ads
! 22dfc969d7b2d71cfc297bd9654913fe  gcc/ada/libgnat/s-purexc.ads
! 189b3c28a6d2cc16677c0270bc4594cc  gcc/ada/libgnat/s-putaim.adb
! 66120269340625696f17638a4081dfba  gcc/ada/libgnat/s-putaim.ads
! 4f4cbdc418ecf9308bcb8183f280a5a7  gcc/ada/libgnat/s-putima.adb
! d6844babc0cefd66bb6faedc75e61373  gcc/ada/libgnat/s-putima.ads
! 06d3e09b2db3ab1c03ebfbf16db2d7e8  gcc/ada/libgnat/s-rannum.adb
! d3566372255b10a501275e586c37d3db  gcc/ada/libgnat/s-rannum.ads
! 0e2e87dd4c9277061b131e328b3f5c05  gcc/ada/libgnat/s-ransee.adb
! 2128d450713bb8a6ad6f7d2b669b4f8d  gcc/ada/libgnat/s-ransee.ads
! 4875dd6e9213b501a98daf29703f060a  gcc/ada/libgnat/s-regexp.adb
! 992b83e68ce1c2aa88a8bd973d3e8f9b  gcc/ada/libgnat/s-regexp.ads
! 6ceed49c8cec41a5dd78b0150975ba24  gcc/ada/libgnat/s-regpat.adb
! 796b5648f0c4ccbf46521b11dabd65ec  gcc/ada/libgnat/s-regpat.ads
! f1d9a10b827763a2ef46934e4d721551  gcc/ada/libgnat/s-resfil.adb
! f8390315dfef614a5159ffcb4f1668d7  gcc/ada/libgnat/s-resfil.ads
! e64d33047208491fe0526260390d9bb5  gcc/ada/libgnat/s-restri.adb
! 6b95a646e1182205c3dc93d846a19689  gcc/ada/libgnat/s-restri.ads
! b121d762b347523cf9ac88e58dc6995e  gcc/ada/libgnat/s-rident.ads
! cba844f3577073a05c4caf8a1db5fcfd  gcc/ada/libgnat/s-rpc.adb
! 5a204f98ff673a4a41eeb97bf92a237b  gcc/ada/libgnat/s-rpc.ads
! 8f9bb62211536ea0a507bbaa4b1fc00b  gcc/ada/libgnat/s-scaval.adb
! 03346e54d79782d3ec37af1c638d7a0e  gcc/ada/libgnat/s-scaval.ads
! 44644c58f97dba13c8f8d5212e4cf8a3  gcc/ada/libgnat/s-scaval__128.adb
! 2719e2b894fbfd51052d5af127f3e7cf  gcc/ada/libgnat/s-scaval__128.ads
! c42d4045c0bc7ac4517b073eb5d49dd4  gcc/ada/libgnat/s-secsta.adb
! 6aece0ff273beb1d4fbb79d1342adff0  gcc/ada/libgnat/s-secsta.ads
! 738516efd1b3a798c8230e39e4f6458b  gcc/ada/libgnat/s-sequio.adb
! a8c11109985e8e23bcf237e2756fbeb1  gcc/ada/libgnat/s-sequio.ads
! 81630df21e4edc197dff604b6a1fb744  gcc/ada/libgnat/s-shabig.ads
! 7d3a1edcf3c2276e1a6298889f3e74a8  gcc/ada/libgnat/s-shasto.adb
! baed31e6be2aef0aafe291689cabc7fc  gcc/ada/libgnat/s-shasto.ads
! c5ffba481f7bb43d65d3c385e028103c  gcc/ada/libgnat/s-soflin.adb
! 3ac6cd9ee0744d854b3bfc8477ada086  gcc/ada/libgnat/s-soflin.ads
! 36d258f3880ddc5d339da263f3801c2d  gcc/ada/libgnat/s-soliin.adb
! eb770c3e48b86782041c97e2d7c9560e  gcc/ada/libgnat/s-soliin.ads
! ccff21a14cb7e862e3ad5375090b8b49  gcc/ada/libgnat/s-sopco3.adb
! df6f81e109c94cd6a39d8fd2d9f0c0fd  gcc/ada/libgnat/s-sopco3.ads
! 4be78119d60c941fe39dda5711a02952  gcc/ada/libgnat/s-sopco4.adb
! b981e47281b7382189f017163286083a  gcc/ada/libgnat/s-sopco4.ads
! 4ec8cf417d69c9ee121c8714f6d773b1  gcc/ada/libgnat/s-sopco5.adb
! 8ec240e29b9924db576da681c59ba9c7  gcc/ada/libgnat/s-sopco5.ads
! cb759ff3c241206e2bcb7e5311358688  gcc/ada/libgnat/s-spsufi.adb
! 632f4e6dada547e6e11947082bd8342e  gcc/ada/libgnat/s-spsufi.ads
! 49012b274f130dbae4fca428962d3fba  gcc/ada/libgnat/s-stache.adb
! a9ea3665df3327a8eeefe98f8f475973  gcc/ada/libgnat/s-stache.ads
! eeeb7e26e2291a6668a46ef6af3c4319  gcc/ada/libgnat/s-stalib.adb
! 2062244673d10683b255c16becfcd31e  gcc/ada/libgnat/s-stalib.ads
! 5667d745dd5474ea14e644f5943fe0c7  gcc/ada/libgnat/s-statxd.adb
! 4bf97f8b9b60bbfe7e1967cb604015e5  gcc/ada/libgnat/s-statxd.ads
! fc35a9beeaee8dc04fc5dcd4a8af0538  gcc/ada/libgnat/s-stausa.adb
! 06d948e1f9f4289e924a1c6925ac40c8  gcc/ada/libgnat/s-stausa.ads
! 6f63feed91bc985f321e96c90e857368  gcc/ada/libgnat/s-stchop.adb
! 7ccecdee6fb732276f3636d8eb8c7021  gcc/ada/libgnat/s-stchop.ads
! 9e4988e7a5be8f7e7ee9a98dfad05312  gcc/ada/libgnat/s-stchop__limit.ads
! f06d09edafa782ea5d4e55a453faabb6  gcc/ada/libgnat/s-stchop__rtems.adb
! a28b005bdb4e4940bbe49f5d0ea78039  gcc/ada/libgnat/s-stchop__vxworks.adb
! 7d438a48e40f6d490ebc1905c2ec6cf3  gcc/ada/libgnat/s-stoele.adb
! 0b7d9330bc0fd353d850a664841bcb5b  gcc/ada/libgnat/s-stoele.ads
! af12be7d6400d5c73ab2c9e5545634b0  gcc/ada/libgnat/s-stopoo.adb
! 052cb7641e5df216790b97841d18db1b  gcc/ada/libgnat/s-stopoo.ads
! a6f5e515f8443ac563f57fe19cd3993f  gcc/ada/libgnat/s-stposu.adb
! 8881eac9a3cef25fc801cb2eab1035b0  gcc/ada/libgnat/s-stposu.ads
! 4496677a6e71fc8a11ba156aa527a605  gcc/ada/libgnat/s-stratt.adb
! 19c1b6f5472ea25173c5351c81569705  gcc/ada/libgnat/s-stratt.ads
! 49464101d821540a897f54070079a996  gcc/ada/libgnat/s-strcom.adb
! 39e40f862c7273678ec83518c0df61e2  gcc/ada/libgnat/s-strcom.ads
! c2e0271b490ade3df9f4fb89f3ad2e3b  gcc/ada/libgnat/s-strhas.adb
! ad6689f6f2819cde5b52bae34939f8a4  gcc/ada/libgnat/s-strhas.ads
! c3b9c77760c9817e807bbdd6d5e9644f  gcc/ada/libgnat/s-string.adb
! 68bcf74bef517710b58ab05099f0ed0a  gcc/ada/libgnat/s-string.ads
! e5b13af1002795ac7dc0ebeb77d9fd60  gcc/ada/libgnat/s-strops.adb
! 544f93a0d007989d0b6a0e1adefd8c09  gcc/ada/libgnat/s-strops.ads
! 1e9562f5e07931e3daeae8ef1623777e  gcc/ada/libgnat/s-ststop.adb
! 79bbb9d4c17009232330ff19d02f8f52  gcc/ada/libgnat/s-ststop.ads
! 1c0af573fa0382a3f5a2672ccca8907f  gcc/ada/libgnat/s-tasloc.adb
! 2e0afe42684e604fbd8641a5710f405f  gcc/ada/libgnat/s-tasloc.ads
! 0e411f6e65f03660a82097da9d131767  gcc/ada/libgnat/s-thread.ads
! fea86440d2ba46f632f0659bea759d07  gcc/ada/libgnat/s-thread__ae653.adb
! 3ba7d4463691971efb0b7f2425ff79bf  gcc/ada/libgnat/s-traceb.adb
! 53c9af0ed98d36ed4641cf04284a63e6  gcc/ada/libgnat/s-traceb.ads
! 43d8ee9188387121837a0f539641deed  gcc/ada/libgnat/s-traceb__hpux.adb
! db393944be6b546e20ce1ba8627b6e68  gcc/ada/libgnat/s-traceb__mastop.adb
! 9f3079f8de6599d1d7d89e3d022768bf  gcc/ada/libgnat/s-traent.adb
! f40f2f16edec3e5c980cdece8402b5c7  gcc/ada/libgnat/s-traent.ads
! 383a81b97650b559f5dbd5b8da23b83b  gcc/ada/libgnat/s-trasym.adb
! 1feb0d8000996f4cabf250846ec6a960  gcc/ada/libgnat/s-trasym.ads
! 6ba88349e3f2339995bd184891764891  gcc/ada/libgnat/s-trasym__dwarf.adb
! a37246ddec613efee9abe5a5f4f9c00b  gcc/ada/libgnat/s-tsmona.adb
! 4e00845cbfcd5c6fb1965a80298269c9  gcc/ada/libgnat/s-tsmona__linux.adb
! 847ac6079bd94e35bc80f6edf3fde6bf  gcc/ada/libgnat/s-tsmona__mingw.adb
! 2944f17e1b3e33f3730b1b937614c4df  gcc/ada/libgnat/s-unstyp.ads
! b7f3f5f466f41b51a4bf80f7f659631e  gcc/ada/libgnat/s-utf_32.adb
! 20d820599465b3d3c883e73004c0728e  gcc/ada/libgnat/s-utf_32.ads
! 97e620d86cea3abb15cebd1383e754df  gcc/ada/libgnat/s-vade128.ads
! 67e5ff0de571b6f729065df0ac3a2384  gcc/ada/libgnat/s-vade32.ads
! be0d4858538cac407c1b10caa83b6a1c  gcc/ada/libgnat/s-vade64.ads
! 6a96baa5bb7b220a39b81d69d423da7d  gcc/ada/libgnat/s-vafi128.ads
! 217a1d2564fec7ccdca750b8b4143b54  gcc/ada/libgnat/s-vafi32.ads
! 3142f0d0d67e59f57f3565716c7ff9a7  gcc/ada/libgnat/s-vafi64.ads
! f39481fb26beb946fc3cdade29eb4166  gcc/ada/libgnat/s-valboo.adb
! e8de0092e036bd32029090bfc332c9a7  gcc/ada/libgnat/s-valboo.ads
! d82380e21317af60c55156f8ae44fd6a  gcc/ada/libgnat/s-valcha.adb
! 0d049293775f2c0e49ce5266635732a0  gcc/ada/libgnat/s-valcha.ads
! 853abb2e76c34b8bcec928876ac8cd7c  gcc/ada/libgnat/s-valenu.adb
! 8c6703fe0e665befa27fdc8380d4a845  gcc/ada/libgnat/s-valenu.ads
! 5f54b42c52b6cbf58039f97362760957  gcc/ada/libgnat/s-valflt.ads
! e45bc543dc615b5a4fcb066d32c863fc  gcc/ada/libgnat/s-valint.adb
! 321685ebe59eae47957601b232986b94  gcc/ada/libgnat/s-valint.ads
! 5c1084d4b7ec444691ec645552a1fe32  gcc/ada/libgnat/s-vallfl.ads
! 8072e55923a724a1fb54d05a9b74077b  gcc/ada/libgnat/s-valllf.ads
! c282d774f463afca7c59c5f6507d3686  gcc/ada/libgnat/s-vallli.adb
! a34c9884dbb5f8908bba393a2de949fa  gcc/ada/libgnat/s-vallli.ads
! ef59cfed58278ae1729f83372844b4ee  gcc/ada/libgnat/s-valllli.ads
! a4cebb37e5e22bee12429f282e8391f1  gcc/ada/libgnat/s-vallllu.ads
! ebb05b393442c7b706485f946618ea73  gcc/ada/libgnat/s-valllu.adb
! aef1d70a8b8200aa2e7a87f453e3608b  gcc/ada/libgnat/s-valllu.ads
! ffe06e66b3698906a9947b3da5d42883  gcc/ada/libgnat/s-valrea.adb
! 678c163f40e57a10282fdc98bab194f9  gcc/ada/libgnat/s-valrea.ads
! 80b9359368047a90bb403b1362c5c799  gcc/ada/libgnat/s-valued.adb
! be1df6959b636ad1a58167ae9c272eae  gcc/ada/libgnat/s-valued.ads
! 91431ac7a32bc13ada3a234eb2a4c7ad  gcc/ada/libgnat/s-valuef.adb
! f094a772abd5a45b75d425228cff81b3  gcc/ada/libgnat/s-valuef.ads
! 3bb8758c82e11dcd114dc793b3fefd76  gcc/ada/libgnat/s-valuei.adb
! b34718b9b08c18677e9e41434b8b5fc4  gcc/ada/libgnat/s-valuei.ads
! 99205191ef8e55c1cd8e587bbd3432b6  gcc/ada/libgnat/s-valuer.adb
! 2ad4249ab14c5e8019ec65abcb8d9b99  gcc/ada/libgnat/s-valuer.ads
! 012afda995f9dfe6232af405b8d44bd7  gcc/ada/libgnat/s-valueu.adb
! 7c85cc993bdc3f0640a27d4af7d4a8f5  gcc/ada/libgnat/s-valueu.ads
! 3ccbdabeee57195485093b2a3773ba9e  gcc/ada/libgnat/s-valuns.adb
! 878f17ce528d8d2a80e1f0789e7b5424  gcc/ada/libgnat/s-valuns.ads
! 7b570d4b661dcfb500f2c167127712b5  gcc/ada/libgnat/s-valuti.adb
! 044e5508f0aa3387440b522e62c75fc7  gcc/ada/libgnat/s-valuti.ads
! f57019cda279a60b392e6f25c0b43f65  gcc/ada/libgnat/s-valwch.adb
! 7d1ff9369ebf10f38f3b521d986f9acb  gcc/ada/libgnat/s-valwch.ads
! 52e248666eef2fe38df081998bb0e02c  gcc/ada/libgnat/s-veboop.adb
! f410af5106eb1afdb8dac913bfbd65b7  gcc/ada/libgnat/s-veboop.ads
! c831d82f89d414ab6dc313d733f44622  gcc/ada/libgnat/s-vector.ads
! e2036d9211c909975e7e9ff87199d906  gcc/ada/libgnat/s-vercon.adb
! 2f81c9f94f8d44edfbb6bf902e94d6e8  gcc/ada/libgnat/s-vercon.ads
! 2b7fe92855b1386769698bf6cecbe4ae  gcc/ada/libgnat/s-wchcnv.adb
! b2704e354412802f2a75e37262cca8e2  gcc/ada/libgnat/s-wchcnv.ads
! fdea3b26bd0f919b7ad61b97e944a1c9  gcc/ada/libgnat/s-wchcon.adb
! df692d4346238764ee8606eef673e6c8  gcc/ada/libgnat/s-wchcon.ads
! 0eea47d66ddfbd6acc2c1f72d0b23210  gcc/ada/libgnat/s-wchjis.adb
! f4513cc291fd64570263d3070cf5982f  gcc/ada/libgnat/s-wchjis.ads
! dc791c4bd7af9edcc28ae331ba435d8d  gcc/ada/libgnat/s-wchstw.adb
! c020241a709f8ceb301fd4cd2541cd66  gcc/ada/libgnat/s-wchstw.ads
! a3e9ee510030707e7d327874f9936701  gcc/ada/libgnat/s-wchwts.adb
! fac5f7e6321e3b09140c6644804ebd4d  gcc/ada/libgnat/s-wchwts.ads
! 636e0c239096390fd34af4e02f0aee24  gcc/ada/libgnat/s-widboo.adb
! 7b004565110eff8337ddb2b6174747e2  gcc/ada/libgnat/s-widboo.ads
! a30c2469d47eb281739328df750a707c  gcc/ada/libgnat/s-widcha.adb
! f6ccda7121a493722c9cb704d5f63e36  gcc/ada/libgnat/s-widcha.ads
! 853116ea2e8aa06fecc2a1fa344d82e7  gcc/ada/libgnat/s-widenu.adb
! 8226e395fa98b3f927fa9da0c60be34c  gcc/ada/libgnat/s-widenu.ads
! 671fb6ff2baac5eef110d83332a3b188  gcc/ada/libgnat/s-widint.ads
! e5d83646c2c20e7f8b931138c9415d8c  gcc/ada/libgnat/s-widlli.adb
! 4075027e8be641f41d9b35c4e7827a06  gcc/ada/libgnat/s-widlli.ads
! d9d35440c09d799aa643925acf32d13b  gcc/ada/libgnat/s-widllli.ads
! c267b4eb1951ce1e7b632f84dee58ffc  gcc/ada/libgnat/s-widlllu.ads
! 22caca38987a1e4eca0c8834de591771  gcc/ada/libgnat/s-widllu.adb
! e7ca07ec52f84bcd9760658fd55a1809  gcc/ada/libgnat/s-widllu.ads
! f5e39740565e276a3f52b5f4d35f3aa2  gcc/ada/libgnat/s-widthi.adb
! 2c7b4ca3c5bc20061afb0ddc52f77812  gcc/ada/libgnat/s-widthi.ads
! 4db5fa9495308f4e0a7fd2fa8e27d551  gcc/ada/libgnat/s-widthu.adb
! 05fcb42367b7f9b56b2be8c401d889b4  gcc/ada/libgnat/s-widthu.ads
! e5022a763df770beba52eece5a1c32d6  gcc/ada/libgnat/s-widuns.ads
! 3583def5e50382cd54e832de7bf86dd7  gcc/ada/libgnat/s-widwch.adb
! b60d57fb0a9dcf645be06f0007a1f1c3  gcc/ada/libgnat/s-widwch.ads
! 0807949e1fd737ce3401f74bbd143c5f  gcc/ada/libgnat/s-win32.ads
! f19309aca0b4ea910f51a92c1942f7bf  gcc/ada/libgnat/s-winext.ads
! b206614497537c45ac60f2e1109bf2fa  gcc/ada/libgnat/s-wwdcha.adb
! 6d23ddcf2926fd20f4feaf67c210343c  gcc/ada/libgnat/s-wwdcha.ads
! b955bbc47a2b35d4408a19411bd46b33  gcc/ada/libgnat/s-wwdenu.adb
! 0cea33dce74e7fb4613581cd1dcd3f70  gcc/ada/libgnat/s-wwdenu.ads
! 43e91da39ee331e72f23fa942dbe467e  gcc/ada/libgnat/s-wwdwch.adb
! 982c725dd83ef08584e71bdb88236245  gcc/ada/libgnat/s-wwdwch.ads
  0f4c21401ad2531f8c5d4010537dc6d2  gcc/ada/libgnat/sequenio.ads
! 79c9b766cc2023a4a9afb40ac4075dfe  gcc/ada/libgnat/system-aix.ads
! a7e1d975d4c35e7bec3932e349843657  gcc/ada/libgnat/system-darwin-arm.ads
! bed96e276db1b161e25c2996d12a1b8c  gcc/ada/libgnat/system-darwin-ppc.ads
! 3eef6d8b2f2638e2ed6c108e83115944  gcc/ada/libgnat/system-darwin-x86.ads
! c5c747b918002f48989efdbaa0d82579  gcc/ada/libgnat/system-djgpp.ads
! 63569ae963cad6ff29b60b9be9fd5f54  gcc/ada/libgnat/system-dragonfly-x86_64.ads
! 06b4fd1e66f65a9625ad4349cc511c61  gcc/ada/libgnat/system-freebsd.ads
! a453e48c70610fd75e8b8954cd141c79  gcc/ada/libgnat/system-hpux-ia64.ads
! 5d564498a952f31cbcbdbd815feb80f9  gcc/ada/libgnat/system-hpux.ads
! 659d4a41aa045806a111c8336cdf67aa  gcc/ada/libgnat/system-linux-alpha.ads
! fdd19a95f5cbe9dcf92b2f7c316aad24  gcc/ada/libgnat/system-linux-arm.ads
! a1bedc0223dd3bfb9d3effa9225e33b2  gcc/ada/libgnat/system-linux-hppa.ads
! bb41906d46197d48309d1f0cf27782c9  gcc/ada/libgnat/system-linux-ia64.ads
! 93e8883c92e91293948c5b34a7ca3e78  gcc/ada/libgnat/system-linux-m68k.ads
! 573159da906924eb569d074579658130  gcc/ada/libgnat/system-linux-mips.ads
! 3c26c3d3ed70e23ff3af5c5dde1789ec  gcc/ada/libgnat/system-linux-ppc.ads
! 1c6e360c20d8861dc5d310fdc286df22  gcc/ada/libgnat/system-linux-riscv.ads
! 5156568baa010b0ec0422a66eb8aa2ce  gcc/ada/libgnat/system-linux-s390.ads
! 711d7fc744e978cebf15fc920bec7f1c  gcc/ada/libgnat/system-linux-sh4.ads
! f8b5a432d74d3f01022fdc912ab54459  gcc/ada/libgnat/system-linux-sparc.ads
! b2fb017db92cf8408d0b8c00ed73d666  gcc/ada/libgnat/system-linux-x86.ads
! db8b8eb00e7deab67f8de2402f171c31  gcc/ada/libgnat/system-lynxos178-ppc.ads
! 6c64e8dae80fcaef0a88f2a3f77789b3  gcc/ada/libgnat/system-lynxos178-x86.ads
! 5fe96823026492f5023ed64494bb9b97  gcc/ada/libgnat/system-mingw.ads
! 747197dcfaeaa68ad60b4294b2d1da1e  gcc/ada/libgnat/system-qnx-aarch64.ads
! 573a9ebc49216d2795e47a1dcc28c2cd  gcc/ada/libgnat/system-rtems.ads
! 4d80f11c2961722f1fc5c63f362d11a7  gcc/ada/libgnat/system-solaris-sparc.ads
! 6022542e9a7535eb4b412e401e9fc3a9  gcc/ada/libgnat/system-solaris-x86.ads
! e59064263e43409bf6292197bfe97510  gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads
! 14851c7fef12a7b438bed7cba4cd92b4  gcc/ada/libgnat/system-vxworks-arm-rtp.ads
! a9a1285c00badc885e7e6c7e3938dc62  gcc/ada/libgnat/system-vxworks-arm.ads
! 1112a65e0996bc4b5501e3db3d231e20  gcc/ada/libgnat/system-vxworks-e500-kernel.ads
! ecf9fc2f7685f89a60a980d7df8b2c76  gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads
! 048e5a5c4208582a51955c2eb1cd2a9f  gcc/ada/libgnat/system-vxworks-e500-rtp.ads
! d3e90b5f41e3bfa93372f039c2d0cf17  gcc/ada/libgnat/system-vxworks-e500-vthread.ads
! ef763e1439e52f26127e321dd00aea90  gcc/ada/libgnat/system-vxworks-ppc-kernel.ads
! 93032a1865a7e0a2e7ccd92778bc1dfe  gcc/ada/libgnat/system-vxworks-ppc-ravenscar.ads
! 742847a29ddb12d15d79370c9ab32ed0  gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads
! cef7bb256d3dbbc886a2a261d4aecd7e  gcc/ada/libgnat/system-vxworks-ppc-rtp.ads
! d2970eb2d348e3f416948fdcf16978b2  gcc/ada/libgnat/system-vxworks-ppc-vthread.ads
! 2337c882c2ca979af17b5d1875893ecf  gcc/ada/libgnat/system-vxworks-ppc.ads
! aab7f9f2077015843c35e9f0ce78215b  gcc/ada/libgnat/system-vxworks-x86-kernel.ads
! 8f51a643c214503016b6b14f1a54b2a2  gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads
! fa1b9c8e8927284c7abb42668054aa36  gcc/ada/libgnat/system-vxworks-x86-rtp.ads
! 3c48f438bf605c6348297e5db4a9784a  gcc/ada/libgnat/system-vxworks-x86-vthread.ads
! d3420b5d907b465965a8e8bd7deaf885  gcc/ada/libgnat/system-vxworks-x86.ads
! e330b51d3782b3ec5fdc99a1081dca05  gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads
! 2fc7789396f8ad480d2d0749c9cdbd73  gcc/ada/libgnat/system-vxworks7-aarch64.ads
! 8447b846870c686fdd4232696ec737f4  gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads
! a9a1285c00badc885e7e6c7e3938dc62  gcc/ada/libgnat/system-vxworks7-arm.ads
! 1c9e2691e99f1e1456c0f9dc0be09bda  gcc/ada/libgnat/system-vxworks7-e500-kernel.ads
! 4d35e7a887009ebf8bb9a5e7b1a1c357  gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads
! 8762b0d567e8750bb3578202e9224d02  gcc/ada/libgnat/system-vxworks7-e500-rtp.ads
! 3a38c0bb2a20c6567816b3334fbe0aac  gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads
! b041ac4682d3fb2079f7ae8531bfae1e  gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads
! 67eb453cded96dbdac3ae180749cc52d  gcc/ada/libgnat/system-vxworks7-ppc-rtp.ads
! 48ac67d39ef324dbc6d886109eff19a9  gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads
! fe4bab0e153b300dcf4582b7b9abbaab  gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads
! 20d849af0f8e4451f06b6c53056acef4  gcc/ada/libgnat/system-vxworks7-x86-kernel.ads
! fc4fe35c83fd68918d3fdf634d7c246f  gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads
! 07532fa8e392a5246c540aa6f007e1e1  gcc/ada/libgnat/system-vxworks7-x86-rtp.ads
! 2949919056affead7235214cba2f0c4c  gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads
! d2aa4548a9868150beea4d33c022d7fc  gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads
  2dc890e2791f7e9d6e1e9ca1cfb55c71  gcc/ada/libgnat/text_io.ads
  9a646eb97c6840de5d4bbb081dd2031a  gcc/ada/libgnat/unchconv.ads
  b8b0f9c3471d18ee5ac33521fe6f6d31  gcc/ada/libgnat/unchdeal.ads
! 4fad3dfad39a352acdf789f317f57d1d  gcc/ada/link.c
! 3d965b5c634775853d29f9ca73a79b5e  gcc/ada/live.adb
! 53134fc12d5eafb7bd0829578bd688e5  gcc/ada/live.ads
! a0f71e8835f258edf11cacfeecd22cf8  gcc/ada/locales.c
! fcb25837a5d879b1c73efc9ba539474b  gcc/ada/make.adb
! e5f95f959961e6bf84bd08a0b177dd53  gcc/ada/make.ads
! 1c46758e68656eac566811ebf2a98bcb  gcc/ada/make_util.adb
! 474b87c38841afccb59140e8a2fadb9b  gcc/ada/make_util.ads
! ddde07ee98b4ad6a0575d9b51c61e595  gcc/ada/makeusg.adb
! 1ad4bd5cf42deeff7b0f24becc1908aa  gcc/ada/makeusg.ads
! bab1376d1d7e8559341a975d10d14c8b  gcc/ada/mdll-fil.adb
! aa698c252928cfce96d38027ecabb8e9  gcc/ada/mdll-fil.ads
! 9abc75d3fcf268dcdf10d33f061bee68  gcc/ada/mdll-utl.adb
! 33e7c353426bb9a4ede6960c3149ec26  gcc/ada/mdll-utl.ads
! edfe14c7c706fbe109838d15f8f8ee47  gcc/ada/mdll.adb
! 9626d410d6330780c58d3e52c0211ac5  gcc/ada/mdll.ads
! 011caab3d9d7c1ce5415a3706e27eb5b  gcc/ada/mingw32.h
! 63e1c5e64d717747d1e039e9b6a24955  gcc/ada/mkdir.c
! 5494dc1cdac25e8ca415479cf483ea5c  gcc/ada/namet-sp.adb
! 8dd9b5c3c6c736cf6f855e5717e0501b  gcc/ada/namet-sp.ads
! 4267d421d81da4c3388093041aaf74a4  gcc/ada/namet.adb
! db5ba24ec74c662526024ac446bfd65f  gcc/ada/namet.ads
! ec3d9cda46df62c9af3e6c8f5b46de06  gcc/ada/namet.h
! 93c208057c4de537a4c88717ee16632b  gcc/ada/nlists.adb
! 1c8b0ec04a81c7dbd6f4285416f547eb  gcc/ada/nlists.ads
! 33617c5a716dd2da832471fea4410d68  gcc/ada/nlists.h
! 349f0f4aeff5f96eb16ad78474248af9  gcc/ada/nmake.adt
! 37fdc3b5a28d51bb41b4016fc22f306f  gcc/ada/opt.adb
! f066a98ad20b33886c5f0f0aea4296d6  gcc/ada/opt.ads
! 39f8a7cd7936424f4fa462262a92913c  gcc/ada/osint-b.adb
! 5d505c4866a0fe94c72fc28c1dae507f  gcc/ada/osint-b.ads
! e223b2bf9de2b2ee893572757e99a02f  gcc/ada/osint-c.adb
! 1c3401480c17e375453b83ff078fc21f  gcc/ada/osint-c.ads
! 0c889502c74d7b394fdc0d992a77342d  gcc/ada/osint-l.adb
! a61047bc784de9f3d1396f03856d4087  gcc/ada/osint-l.ads
! 36a91dd19392e5d0b867e0ec08b4cc99  gcc/ada/osint-m.adb
! 705e6f372d1faf465751654467f8822f  gcc/ada/osint-m.ads
! 46312b046cb2d09382facd20ed21adf9  gcc/ada/osint.adb
! 09b5d0791caa8b80705dc12c4d9fba31  gcc/ada/osint.ads
! e404e7dcd5ada04de77568405298a868  gcc/ada/output.adb
! 3cd49b64aa1d13c2a363ed553fac111f  gcc/ada/output.ads
! 60b6ed2bd2e9b3fa79b250b23c2b5171  gcc/ada/par-ch10.adb
! 9f9b8a78eea3e34b4eb3d05b15775117  gcc/ada/par-ch11.adb
! 5f6f2724ff5edae4f78650037fe8bc0b  gcc/ada/par-ch12.adb
! b9b5136bc3ed29ac5d5577e3236c59c2  gcc/ada/par-ch13.adb
! b98567d532ee7a0d2c884788eac2acb0  gcc/ada/par-ch2.adb
! c96bb61b4f38a92dc4f5c8f23290cab5  gcc/ada/par-ch3.adb
! af8a7c7091f68ba13d62efbe62c94282  gcc/ada/par-ch4.adb
! 28dd2b21e1d83df7967559d8c4c86cc4  gcc/ada/par-ch5.adb
! db0d84e8e8360351bb6fbd4c58654747  gcc/ada/par-ch6.adb
! df851b1ac654aaf3e5f2c7c974203b1c  gcc/ada/par-ch7.adb
! eea155ea68e8f5564f63ce8f427bc2f7  gcc/ada/par-ch8.adb
! 417db569b54ac6319b48cf0c7e155aed  gcc/ada/par-ch9.adb
! c8249094dfaa62a6c3785c5ff65a1dae  gcc/ada/par-endh.adb
! 9ae858bf2dd6fb27a8ccf9f6e6c19f30  gcc/ada/par-labl.adb
! a1d8b90a822f20210e0ce07003b6c243  gcc/ada/par-load.adb
! d86f3d4a0164f2b462350f3521f41cf1  gcc/ada/par-prag.adb
! 5c628f4fe23077207f5b0ec1e6866209  gcc/ada/par-sync.adb
! 454ff465e347b9b907f01d9f1b8a5b38  gcc/ada/par-tchk.adb
! 2a2dd13cde3d8698d258d8f535aff002  gcc/ada/par-util.adb
! 48d134d01ec2a3b7bccae0d841ab0220  gcc/ada/par.adb
! be0ddf1983e44849c4c682e2b944f798  gcc/ada/par.ads
! feaa995f4c86411a1e7eb922af5738c1  gcc/ada/par_sco.adb
! 3ba59fc7ef47ef809bfe7152827792e5  gcc/ada/par_sco.ads
! 00c7b88969e899fd05a6a706dc32733f  gcc/ada/pprint.adb
! 57989b1991c3e0b4bfaee67d7ea229d5  gcc/ada/pprint.ads
! a53ec08a9fc26dd755c145f98160f3b1  gcc/ada/prep.adb
! a2ddc8267987086b98b458cf5caabe4e  gcc/ada/prep.ads
! 1e971b3b1650b43718957467cb0da486  gcc/ada/prepcomp.adb
! 4a4eb0e2d33bf72f305bd9511048af7d  gcc/ada/prepcomp.ads
! 0ce88231f884ee2b8315d6e9dd9285f0  gcc/ada/put_scos.adb
! 05c43ca05e6d64c1c534e89f0e6887d7  gcc/ada/put_scos.ads
! d6aa4e1286ed91ef78d5b928f08ad812  gcc/ada/raise-gcc.c
! 3ce9a666b464606378570efbaad7b446  gcc/ada/raise.c
! 81e26727a457cd48867b56605ee2579e  gcc/ada/raise.h
! dee9611985e0d1ddb0598652ffde8534  gcc/ada/repinfo-input.adb
! ea265e6fa331462d9ed3793d78f020b2  gcc/ada/repinfo-input.ads
! 6f5b0ca60aa04892eb784346bfd35a6a  gcc/ada/repinfo.adb
! c03fe01aabb794a6d8726443037b2615  gcc/ada/repinfo.ads
! e21d1a343e95bb392390c6a817d70097  gcc/ada/repinfo.h
! 375027e45ffcf8326f585730fa9d191f  gcc/ada/restrict.adb
! 4473f1b14cc08aa331960608c5d301cf  gcc/ada/restrict.ads
! 5f0c7b2c4905109b4a24b18c3f4c8699  gcc/ada/rident.ads
! 603bdde9bda526324f9ce304f9215078  gcc/ada/rtfinal.c
! 71b8029372ba8f5ab88d1cd5d06c65f2  gcc/ada/rtinit.c
! e38d53992bbdb5181f34e9aae5ad784d  gcc/ada/rtsfind.adb
! 391dc7d3e0e92c631eaf88d577733e7c  gcc/ada/rtsfind.ads
! 01020e05ef8963636c4c944b3571bac2  gcc/ada/runtime.h
! 0d173c79df4e207ee478ec6fd4dd0e34  gcc/ada/s-oscons-tmplt.c
! 66e833e627034130ed506b06e4a333a0  gcc/ada/sa_messages.adb
! e36ac753cd026907359b1a6c2e334af9  gcc/ada/sa_messages.ads
! e4c2628a4c0ff27764362969bdd534e5  gcc/ada/scans.adb
! 645f9986ca70baeab85453cfbba087f3  gcc/ada/scans.ads
! ca9b836acff1212fafdae6aa390cb20e  gcc/ada/scil_ll.adb
! 293cf51e3cdb0bafdf22e5c16317c121  gcc/ada/scil_ll.ads
! cf98dccb07658f591d1e5a9b57c53948  gcc/ada/scn.adb
! 9fbb0c31d7ebbcb3061d5472b62bae6e  gcc/ada/scn.ads
! cc2c5dd8a03ca4efc4acefd89a588a5f  gcc/ada/scng.adb
! f2236e87d16c2a24352fd58ed5321baa  gcc/ada/scng.ads
! 2da8c40e26c995a1d452136120fd791d  gcc/ada/scos.adb
! b5fa1c7e1cb32ad0d3dd256cb0f4f80b  gcc/ada/scos.ads
! 72a88bddda1882a9d2aadd1fecf679a2  gcc/ada/scos.h
! 245b35cc08f05ebec3044ce5d1e1da66  gcc/ada/sdefault.ads
! 248df603af937bacda4c06a754c0cef9  gcc/ada/seh_init.c
! d7a7f3c2f3f057b6430caf6eb17065cd  gcc/ada/sem.adb
! d438a9237ea0067caf9abd9ef6565343  gcc/ada/sem.ads
! 746c2f64a838ebc8809e58896dfb9965  gcc/ada/sem_aggr.adb
! 77bdf69e7d05f2d9d84a1daa64c1a5a1  gcc/ada/sem_aggr.ads
! acb5c6e133e4fd339718744dd4fbcca8  gcc/ada/sem_attr.adb
! 8da09f4ae2750756773013986e14da43  gcc/ada/sem_attr.ads
! 1ce586272ba1df4a95cddd6cd0193f96  gcc/ada/sem_aux.adb
! 78367c66baadee04cc046c7e3fe8c97a  gcc/ada/sem_aux.ads
! d5457eefa4928094733d677a24cd9ede  gcc/ada/sem_case.adb
! c6a33720c4ba3d00bc583c87518e5980  gcc/ada/sem_case.ads
! 541fa1e90e870fd55821d5928c19bf9e  gcc/ada/sem_cat.adb
! 2ec2ce67ad670b16ba5fde83830ecf4b  gcc/ada/sem_cat.ads
! 35f464f52218ff1d7e723f722acec78d  gcc/ada/sem_ch10.adb
! 3e962239d46fbfa25ae0fcc5020f07da  gcc/ada/sem_ch10.ads
! ed42c53897f76de0362f503d80307e80  gcc/ada/sem_ch11.adb
! bb0e976f657e92ea176df2ab63008e91  gcc/ada/sem_ch11.ads
! ce4d479679ea66c7da2343af5a60a49e  gcc/ada/sem_ch12.adb
! 91261f169581b4c19684a14fd8f96c43  gcc/ada/sem_ch12.ads
! 9d0fa94206ce29b2253df5339d5a6371  gcc/ada/sem_ch13.adb
! 57429f8387d8ff964f77937f5a11948f  gcc/ada/sem_ch13.ads
! 27ecfe93459e591ddf10730f0a7b3a03  gcc/ada/sem_ch2.adb
! 1532aba80d87d1bc3acf3af3432f3a4b  gcc/ada/sem_ch2.ads
! a3022e87d4ef2d68cfeed11704c55f63  gcc/ada/sem_ch3.adb
! bf5181eceb3131edc0ae88d1f8dc4a79  gcc/ada/sem_ch3.ads
! 733edd91473ab94dc3434cdd29561f86  gcc/ada/sem_ch4.adb
! 4736b4b06c9365a93c5b330354906898  gcc/ada/sem_ch4.ads
! 09e4daeba969a6748462b9e1bbab57a0  gcc/ada/sem_ch5.adb
! 46c16fcf70ab4ee9381e47415f3f0213  gcc/ada/sem_ch5.ads
! b2740467e69aeda4fa4556dbbbe6f9e0  gcc/ada/sem_ch6.adb
! 07d1a14dc445352ee7e847bf5f89bbfe  gcc/ada/sem_ch6.ads
! 59570fb86510058b38dd0f68bdbca157  gcc/ada/sem_ch7.adb
! ffc59f9922dde56d8a48ade211773c08  gcc/ada/sem_ch7.ads
! 4d4a218f7a343882e4861941c810c401  gcc/ada/sem_ch8.adb
! e112c8497e7036354ef1b2cc89cd96da  gcc/ada/sem_ch8.ads
! 7044be84153a8f653f0c89adf2b5ef59  gcc/ada/sem_ch9.adb
! cf4cc88f391ca151b5529a9c83def3b2  gcc/ada/sem_ch9.ads
! 09aaeb0525d3ef92fdad3fa3e6349a94  gcc/ada/sem_dim.adb
! f07ebf18aecd0e6816cd6a35fa866a25  gcc/ada/sem_dim.ads
! 85de38bdb60baca51fee970e0024bc2d  gcc/ada/sem_disp.adb
! 2a3aa659e9d799e47d2e000c985de4ee  gcc/ada/sem_disp.ads
! 1f1968ab2e4eec816176de2f10645b95  gcc/ada/sem_dist.adb
! 44a998a6e6d882dba448e7e1aea07980  gcc/ada/sem_dist.ads
! b7a00e7a1fdb0163029620de0b81b433  gcc/ada/sem_elab.adb
! 193df60091e2d9bf06ccbcb309c26b73  gcc/ada/sem_elab.ads
! 02cff59a62200f88860198fccd15f348  gcc/ada/sem_elim.adb
! 945649ada8713dffa86569077bd6a48b  gcc/ada/sem_elim.ads
! ca720fcc36cb5825933df726c2446794  gcc/ada/sem_eval.adb
! 2db809581fa48b6f4d47de434b2df9c6  gcc/ada/sem_eval.ads
! 6c4fda840389713d097602aaf458dc35  gcc/ada/sem_intr.adb
! 87dd282f5584837ad701a97d0bda94f7  gcc/ada/sem_intr.ads
! 7a042eac334274f27f5cec6e4ca137cb  gcc/ada/sem_mech.adb
! 4b4150c9557fa50ca8bdd5d1b30dec58  gcc/ada/sem_mech.ads
! 1c067003a0054b7ff526f461da4259cc  gcc/ada/sem_prag.adb
! 0a3a4d3df68490e4cafce685685a5a0a  gcc/ada/sem_prag.ads
! 32e9334a0b8113aa45d9a739afda458b  gcc/ada/sem_res.adb
! c18ac43b20949fd32407782bf0f69d90  gcc/ada/sem_res.ads
! ceeb3e67fc14eac0b759a2b189aba489  gcc/ada/sem_scil.adb
! 40313d60f28039ce7a03cc1027ede905  gcc/ada/sem_scil.ads
! 3a3771ead17ccb9a790737ad9a8c9e3a  gcc/ada/sem_smem.adb
! e9e58f2382df8370d57eeb66da51780a  gcc/ada/sem_smem.ads
! 55d2bb5cb99f7dc0d949befd3f434a86  gcc/ada/sem_type.adb
! 21567a7a45be86d3d6dccef9931177bb  gcc/ada/sem_type.ads
! 1b465ac58eddcc2fdb20c4f5dedfa6dd  gcc/ada/sem_util.adb
! d0ceb095c7ac1c341ad054d337cb7324  gcc/ada/sem_util.ads
! 38f3eaf93307c81e701317e7ce9386f9  gcc/ada/sem_warn.adb
! bafeaa174a1c6ddd4ffde2d131230ef4  gcc/ada/sem_warn.ads
! b2fa8ca943a74dfab0f9fda4a36777b8  gcc/ada/set_targ.adb
! ec7527bcf159999f6ddf531db337f1c1  gcc/ada/set_targ.ads
! 5ba95f528a42c888d9dbc7d50676a357  gcc/ada/sfn_scan.adb
! 22f88e6308d1a7832b020dce153f9016  gcc/ada/sfn_scan.ads
! bdb859f07f97cf798c1bb5bc4c8343da  gcc/ada/sigtramp-armdroid.c
! dc241f44674e6d69251a529299329c9d  gcc/ada/sigtramp-ios.c
! 215871eaa846bff6a0c87056ef5e3b40  gcc/ada/sigtramp-qnx.c
! 6aea4f4f7077aa5e0b303c43da8d4d8c  gcc/ada/sigtramp-vxworks-target.inc
! 0f110dfe90db19a273bf57d0b2e159d4  gcc/ada/sigtramp-vxworks.c
! bc7b25491246007663bcb55020385a60  gcc/ada/sigtramp.h
! 17e88fafd9cabf8fe887cd81e002d990  gcc/ada/sinfo-cn.adb
! 0ccbe6d74867c2b71aa5ada88190c02f  gcc/ada/sinfo-cn.ads
! defc3b9605e70782de1056aca256424a  gcc/ada/sinfo.adb
! 47c57e9a4349a9d689e7e576aa2ee805  gcc/ada/sinfo.ads
! 2f4d44a3b9d343b6a44cd6a2997ee552  gcc/ada/sinput-c.adb
! f34e0381ce7e25e5579cacbd971a35a1  gcc/ada/sinput-c.ads
! 015bfd21bbe63bb6f6498e8443d98358  gcc/ada/sinput-d.adb
! 649fdd8368acecebad5b6c9fe345fe68  gcc/ada/sinput-d.ads
! 96b89a926a29a13d2d32ebf3e66a5bdb  gcc/ada/sinput-l.adb
! 2def0cb33e7c6f1e9e7e88cff8222652  gcc/ada/sinput-l.ads
! 0db99cc0a644a30a9cfe82a01ce6ea31  gcc/ada/sinput.adb
! 753fdf6f55e0fc3b7a7b47586155ac02  gcc/ada/sinput.ads
! 0c8e1a3fcd1a6eadd1860104776e2e83  gcc/ada/snames.adb-tmpl
! bc59233e946bc6c8c829997a70744397  gcc/ada/snames.ads-tmpl
  1d0f0a946dfb952f009ada43305106dd  gcc/ada/snames.h-tmpl
! 1937d8662d857690e5aa02f18de72fc5  gcc/ada/socket.c
! 0d2519dcd71376ca2eeec3e86512f6a6  gcc/ada/spark_xrefs.adb
! d6ef1b26ac59bad0fbe38c606086dde0  gcc/ada/spark_xrefs.ads
! 2b1786b48a43d72dd5f747c139a1a810  gcc/ada/sprint.adb
! cb7b3868ccdf644f8dcd19ee23b626a8  gcc/ada/sprint.ads
! 3d4ff3bd08d81b3502f1b5cb8b2f354a  gcc/ada/stand.ads
  92510faaca8c15e63e6f22f0b28dbe5f  gcc/ada/standard.ads.h
! 7d2cee302664eee1b142a8ba1de5c1c5  gcc/ada/stringt.adb
! b5e3a52da56366a49830e10d597631f1  gcc/ada/stringt.ads
! cbc3c16849db4f94bd53473dfd063623  gcc/ada/stringt.h
! 85cbebda740b713f94d24c84ea523e56  gcc/ada/style.adb
! 01f6dcb3f211f4a57e4fab5e8b42ef9e  gcc/ada/style.ads
! b7eb137c0fe7f166ce82c50012a3fbb1  gcc/ada/styleg.adb
! e294b26d034b26a5ca605576f3c7c269  gcc/ada/styleg.ads
! 6306efdc8955708d7ad75d02434241a0  gcc/ada/stylesw.adb
! 457351a18ff1f58a26b96ea700be0820  gcc/ada/stylesw.ads
! bf4dca2bfb46a5cc85392de10f5162ca  gcc/ada/switch-b.adb
! 1066379f34f8d9f7aea15b32a7210bfa  gcc/ada/switch-b.ads
! 619ba4d1207121b183a9510f0db0492d  gcc/ada/switch-c.adb
! b8739e5cab3169b1184aa5ffa00b6112  gcc/ada/switch-c.ads
! 612477eafd2d412a197106472d98ca41  gcc/ada/switch-m.adb
! c3bc9bd0dd7695c2435334190f33319e  gcc/ada/switch-m.ads
! 41a5711dfe385cc565c00a4f1ac15e5e  gcc/ada/switch.adb
! 1316160cb399034c8acf7eb0e87078b6  gcc/ada/switch.ads
! e9b617acfb0dd5cdd17ba990f8a8a5b1  gcc/ada/sysdep.c
! 9412b6fb1eeb3fde711ca66c3733980e  gcc/ada/table.adb
! 96a44cac40758e32b651b9210adcbfbf  gcc/ada/table.ads
! ea7e3fc5f73eaf30a216470d1e324e3f  gcc/ada/targext.c
! b0cc3cd6fafb0ea02c2279faa421d296  gcc/ada/targparm.adb
! bd294481530b20a5c62a0edcc5cf28b7  gcc/ada/targparm.ads
! 20136ccafa7576bfb2f09b383f4bd5b0  gcc/ada/tbuild.adb
! b8a378854e8f41322b70c5a488334589  gcc/ada/tbuild.ads
! f022dfd35f21a2dc08e45ec9733c43ec  gcc/ada/tempdir.adb
! 552d6b7517cbbc92ad6bc2f47feb5d19  gcc/ada/tempdir.ads
! 5db9be4ba6b9334639f152d70cda96dc  gcc/ada/terminals.c
! 9f2fa793f2cd355e63f29c5dea9f3ec3  gcc/ada/tracebak.c
! ee0120c8f593c2ce70db7c56064576ee  gcc/ada/treepr.adb
! 178d02bc8d4451dee8e6c753d5e8bb37  gcc/ada/treepr.ads
! b1a12d53199396f327ddecc980e710d1  gcc/ada/treeprs.adt
! 487f9a3d06b66ddce3c9a9f046d6eace  gcc/ada/ttypes.ads
! 55da25c889bc945c4eafd09bd9546d65  gcc/ada/types.adb
! 646b1bec882b16f5a6b64a76e07830b3  gcc/ada/types.ads
! 8b09caaa776bdf1beb42ba0f03323c3b  gcc/ada/types.h
! 6776f957cd89a3e1a932b0fba72506d6  gcc/ada/uintp.adb
! d568026ece2e4f41f6cc6195b7e87825  gcc/ada/uintp.ads
! ddf17011df98af1adc266b55c32f9f24  gcc/ada/uintp.h
! 38860b51d4ec221fa016f2777d58ae55  gcc/ada/uname.adb
! 0bb3b9037a5f67fcbdd700bfe31ff439  gcc/ada/uname.ads
! 11c0c1166d387fd6d04d37cba1876272  gcc/ada/urealp.adb
! fb8e214311c2472a864617824b779d72  gcc/ada/urealp.ads
! 0de0ce04217e34fa1c407c9ae0db32c9  gcc/ada/urealp.h
! 0fe825e817196c1a5b9bcc54cb146376  gcc/ada/usage.adb
! 40d39cffb7448703e4eb150fcf7a3083  gcc/ada/usage.ads
! d11181de0f17da07e3427303fecb8ef1  gcc/ada/validsw.adb
! 11c7b886fbe4fa2d281ddaf1ad2e4639  gcc/ada/validsw.ads
! 39b48dbc0580bc5e241790f61b5e7b21  gcc/ada/vast.adb
! 81ef35f15f179e53f9dc85633b772544  gcc/ada/vast.ads
  49ef8bc97a344f91b927f23054ade642  gcc/ada/vx_stack_info.c
  884e1a54368295893128977447d7e59c  gcc/ada/vxworks-arm-link.spec
  e158d4a4cda56237d4f66dfddc3b9915  gcc/ada/vxworks-e500-link.spec
--- 1355,2976 ----
  ed8c8d1cff975d8128d8a34e6fa60333  gcc/ada/libgnat/a-nscefu.ads
  ae6657265a333ec061d886c2e0a9be47  gcc/ada/libgnat/a-nscoty.ads
  c7bddd6abb488c8cd0d9982769254df5  gcc/ada/libgnat/a-nselfu.ads
! fb7d9ebedf88ad17b218daf73863877c  gcc/ada/libgnat/a-nuauco.ads
! fb590f6277661a80bc6036b8b964a004  gcc/ada/libgnat/a-nuauco__x86.ads
! a56d412792282f2fbdbd0ed099b0e72c  gcc/ada/libgnat/a-nuaufl.ads
! 31e395cc1a688ce93edacdb6f37f1e5f  gcc/ada/libgnat/a-nuaufl__wraplf.ads
  7714df1a41c354211d217f99429093ef  gcc/ada/libgnat/a-nubinu.ads
  22a793d6936415ee70b725c6d2b2020a  gcc/ada/libgnat/a-nucoar.ads
  bda677b507deb699333f9baa2c37a694  gcc/ada/libgnat/a-nucoty.ads
! f34218df55abb1690e77b94d6764f9a9  gcc/ada/libgnat/a-nudira.adb
! de06a1c262264637817d5c239d5e7f55  gcc/ada/libgnat/a-nudira.ads
  bd9eed0e40585ba218b0badca225b64c  gcc/ada/libgnat/a-nuelfu.ads
! 39a89256fa7cb74e77cda20bae09863e  gcc/ada/libgnat/a-nuflra.adb
! a9c015a63a27e198909de873e13c41e2  gcc/ada/libgnat/a-nuflra.ads
! 7f1ef40ddcde46cabce6fc71d5d694cb  gcc/ada/libgnat/a-numaux.ads
  c4d4bea6dcd8066d2ddcb0789ef64586  gcc/ada/libgnat/a-numeri.ads
  88b948f6713b009c76e8b3b7b75a22c9  gcc/ada/libgnat/a-nurear.ads
! 2726cf58fc06b2c003d5ea187f4b3260  gcc/ada/libgnat/a-rbtgbk.adb
! 4eea50deb7e3f5ef2df430e2f52273eb  gcc/ada/libgnat/a-rbtgbk.ads
! 8ce3ec39e74d3b4ad5a07c2924012760  gcc/ada/libgnat/a-rbtgbo.adb
! d53c893d33fa6896bcc29a0a1e31241b  gcc/ada/libgnat/a-rbtgbo.ads
! 349ca2f3721f7ad17611ebb90cfeaf53  gcc/ada/libgnat/a-rbtgso.adb
! 166ff9c21ff62e0309430082db82b47c  gcc/ada/libgnat/a-rbtgso.ads
! 23d73666c412ea0b368151f12f570ecd  gcc/ada/libgnat/a-sbecin.adb
! 8f8b444d21cbe31abb84a102ea741bf2  gcc/ada/libgnat/a-sbecin.ads
! 15237aa56b7ff00afaaad3ad229e2336  gcc/ada/libgnat/a-sbhcin.adb
! 8fb70496136ee6b0b5740a7e12a2a160  gcc/ada/libgnat/a-sbhcin.ads
! f842a90572e07f355de72137b406d842  gcc/ada/libgnat/a-sblcin.adb
! c991cd5dad7b801d2f539d485ea97b5b  gcc/ada/libgnat/a-sblcin.ads
  67b280f23d76be962783b397ef7e60c7  gcc/ada/libgnat/a-scteio.ads
! 07189161872dbfdb8c644f8e797fa174  gcc/ada/libgnat/a-secain.adb
! ae02ff34b1eb4b73169b0bc397c47068  gcc/ada/libgnat/a-secain.ads
! 639ea89ccca308ec8de5b3343a58e3df  gcc/ada/libgnat/a-sequio.adb
! 864ee0a18c5b495ef02136d363de4a0c  gcc/ada/libgnat/a-sequio.ads
! 688e9f51157e926b262df237ef9fcae0  gcc/ada/libgnat/a-sfecin.ads
! 8d7f654520fcdd4a91dba73c1571a0a3  gcc/ada/libgnat/a-sfhcin.ads
! 6951fa3acadc155efda2dbc693b0994d  gcc/ada/libgnat/a-sflcin.ads
  43123af888cd4637ee6a1eaf9dde9e34  gcc/ada/libgnat/a-sfteio.ads
  63d0f0f0aed733a972873cb3a4b767ea  gcc/ada/libgnat/a-sfwtio.ads
  7207d517b5474be90def505e3a2be187  gcc/ada/libgnat/a-sfztio.ads
! af0a321b020d2237d3ad327216f587b9  gcc/ada/libgnat/a-shcain.adb
! b6cc98c0860e81e70e7e8128d7a771e4  gcc/ada/libgnat/a-shcain.ads
! b7c34b7ca23681d390c8e7c280e29875  gcc/ada/libgnat/a-siocst.adb
! aed0be69801af00ba96f33e2b969bacc  gcc/ada/libgnat/a-siocst.ads
  6fce3ea5eecdf93f2ec7d0446ebd14af  gcc/ada/libgnat/a-siteio.ads
  9330fbe80fe3844d3bf5aeb4946381f6  gcc/ada/libgnat/a-siwtio.ads
  c816a5bc136362b2468801e67deb9ae9  gcc/ada/libgnat/a-siztio.ads
! 37fabeaeb3647f8ff4c4581ab2dd38c5  gcc/ada/libgnat/a-slcain.adb
! 66d405722b3e5519c3d8b8a3daf16175  gcc/ada/libgnat/a-slcain.ads
! d63e7f5cd2c9b327d57c0b7950a60b25  gcc/ada/libgnat/a-ssicst.adb
! e9b93a7d82e581ba6ad2a628575873af  gcc/ada/libgnat/a-ssicst.ads
  3ec2f925719d14de3a80c38042157f78  gcc/ada/libgnat/a-ssitio.ads
  387afdf3ceb85d07a14d8ae4e2f0eeec  gcc/ada/libgnat/a-ssiwti.ads
  366683e8278e7e71bc63a8c7a3f2238f  gcc/ada/libgnat/a-ssizti.ads
! 20fa26f5eb1617444dfc391ce8de802b  gcc/ada/libgnat/a-stboha.adb
  8274f77970c3b1ed9a51aa8ddf6a4d0f  gcc/ada/libgnat/a-stboha.ads
+ bb447b17288ebb9e22a973378c38fafd  gcc/ada/libgnat/a-stbubo.adb
+ e091d125c40fa8958b48268ba10d60ff  gcc/ada/libgnat/a-stbubo.ads
+ 5110cb355786ba55953dcb1d151c22ad  gcc/ada/libgnat/a-stbufi.adb
+ 794bc8c5b75311853ea2da256f98b519  gcc/ada/libgnat/a-stbufi.ads
+ 6e8789fb95fefcfeaf8234bb59b1e892  gcc/ada/libgnat/a-stbufo.adb
+ 6cfd45353ed2b9e871e09be56f5eec80  gcc/ada/libgnat/a-stbufo.ads
+ a0a4bf76f96b1aa94380b8271ca56cc1  gcc/ada/libgnat/a-stbuun.adb
+ 1e900014d9809db78ef32d2e97e1531b  gcc/ada/libgnat/a-stbuun.ads
+ 672c3f12ff35dbfbabbe2c91ffddaeaf  gcc/ada/libgnat/a-stbuut.adb
+ 6a742582058c372a6879b8172b21eaec  gcc/ada/libgnat/a-stbuut.ads
  756f44b0c7f4483ecd7302aee8bc110a  gcc/ada/libgnat/a-stfiha.ads
! 3d1b1e7118e38ecff5aa81ba23678772  gcc/ada/libgnat/a-stmaco.ads
! a67e33fb6321873c897d90717a51cf9b  gcc/ada/libgnat/a-storio.adb
  34175bb2f712422ab4cfd24b3e452b0d  gcc/ada/libgnat/a-storio.ads
! cf61406c4e7dcb036f99c471d850d16d  gcc/ada/libgnat/a-strbou.adb
! 8da7d1a7f30dea89979cbf2af9980514  gcc/ada/libgnat/a-strbou.ads
! c6ce40c596f39851dfbced315ec043aa  gcc/ada/libgnat/a-stream.adb
! 9b8552b91468cca2ddcdbd34af496669  gcc/ada/libgnat/a-stream.ads
! 920251f650e9dff06b4c465a18b75b36  gcc/ada/libgnat/a-strfix.adb
! 6f1a24c3534c6b9f731bb6960811ef1e  gcc/ada/libgnat/a-strfix.ads
! 05b9610c610ea255842bfacf9e05ecea  gcc/ada/libgnat/a-strhas.adb
! b0a210089b94e668314dbcff62c4c997  gcc/ada/libgnat/a-strhas.ads
  de0f93afe5feaf6819d5a9a2e09172e6  gcc/ada/libgnat/a-string.ads
! f61541cbb4c47c661cf323046b6f7993  gcc/ada/libgnat/a-strmap.adb
! 98f3a570f04f07155a6a9f2d79412172  gcc/ada/libgnat/a-strmap.ads
! 68bd09bcbc9bbf08cb831429264f4a8a  gcc/ada/libgnat/a-strsea.adb
! 6e1d30d5426deaff53738fb289cb2c9e  gcc/ada/libgnat/a-strsea.ads
! f9c6c14e38d65318f557f1859a92f219  gcc/ada/libgnat/a-strsto.ads
! ffb131957ca49b0a5c0211f9fb9e289b  gcc/ada/libgnat/a-strsup.adb
! 85b5ec60a88cf7392b7c78cf16ae7188  gcc/ada/libgnat/a-strsup.ads
! 3d6a2519dcc33a91835b33bf66d8aae1  gcc/ada/libgnat/a-strunb.adb
! 5aef4507818d001e1ae01f33f0b2b28b  gcc/ada/libgnat/a-strunb.ads
! e1381ca161ea75368fef0cc3b7f4637f  gcc/ada/libgnat/a-strunb__shared.adb
! 26d58ff9f96a51635b5ab34e09d8e7f8  gcc/ada/libgnat/a-strunb__shared.ads
! 450ec40dedb3d81dfd14e252317a9f23  gcc/ada/libgnat/a-ststbo.adb
! 40ed25d9f57edef4a68ad4c2b4b7d779  gcc/ada/libgnat/a-ststbo.ads
! 86ce55f1bd25b533460708aabe74925e  gcc/ada/libgnat/a-ststio.adb
! 739d23d4f282d931aa082020162ae882  gcc/ada/libgnat/a-ststio.ads
! 5f34ad1cd237f51ce1009136f21e142b  gcc/ada/libgnat/a-ststun.adb
! 230be435e7573ab2ac82695b7490341d  gcc/ada/libgnat/a-ststun.ads
! 50bfd1d7f1d8fe8ea70f03bd7d2d3092  gcc/ada/libgnat/a-sttebu.adb
! 12508ff440bbd4fb3a6c62587afe28dd  gcc/ada/libgnat/a-sttebu.ads
! e102d575a553b463ce6d6044024e839b  gcc/ada/libgnat/a-stunau.adb
! f79dc938750f53b6a852ee156a821194  gcc/ada/libgnat/a-stunau.ads
! 8e21a16734f99a4e875a4198c35fdcd1  gcc/ada/libgnat/a-stunau__shared.adb
! 6e1015f8855cb85f720840e34e629af5  gcc/ada/libgnat/a-stunha.adb
  da4a8d13f76850d714a8213ada7477d2  gcc/ada/libgnat/a-stunha.ads
! d3482384ad3303893ddf63869dbc24a8  gcc/ada/libgnat/a-stuten.adb
! 78ba8f162b44899309545f45c60a6cf9  gcc/ada/libgnat/a-stuten.ads
! 8d33d4c665aedc46c47a59a2213750d0  gcc/ada/libgnat/a-stwibo.adb
! 4e13f407ce1d3cd723e50caf563fe004  gcc/ada/libgnat/a-stwibo.ads
! 404bfcbde295b21d469c217ee7af1de4  gcc/ada/libgnat/a-stwifi.adb
  b0cf3f05e49e1640bf231034269cb951  gcc/ada/libgnat/a-stwifi.ads
! c40ab53cfc479e270b40b26a63d257db  gcc/ada/libgnat/a-stwiha.adb
  3255ad19d07346032c9d005d6a27475f  gcc/ada/libgnat/a-stwiha.ads
! cb5c384b23660de6debc4ab21b743f55  gcc/ada/libgnat/a-stwima.adb
! 1f52bc934330717ccc1efedc66dd7593  gcc/ada/libgnat/a-stwima.ads
! ee02fc2e477600adeb0a431a9237a765  gcc/ada/libgnat/a-stwise.adb
! f0aa1a13eb4958d2254107cd415ee7b7  gcc/ada/libgnat/a-stwise.ads
! de86f92e9d8276774e55cf06a4e23926  gcc/ada/libgnat/a-stwisu.adb
! ab4f9847a6b1fad07af44395de67ea52  gcc/ada/libgnat/a-stwisu.ads
! 5b3aface6a2ccc8e3f8e5eb7c4acd8b7  gcc/ada/libgnat/a-stwiun.adb
! e25fec20f7220d2d0b97e3e9b77e552d  gcc/ada/libgnat/a-stwiun.ads
! 58f087a4d06ab5e5351c60ec681cbd03  gcc/ada/libgnat/a-stwiun__shared.adb
! b48a24f98570227d8cea4d40ff7663aa  gcc/ada/libgnat/a-stwiun__shared.ads
! 8d732b4165a5fbf756a2b67ed000290f  gcc/ada/libgnat/a-stzbou.adb
! cb74ebd0f70dcbbecf2b489a43ee0aa4  gcc/ada/libgnat/a-stzbou.ads
! ab6e937303f32cc0d37c2721a6fcf4bb  gcc/ada/libgnat/a-stzfix.adb
  f3ddc25c20b07c4072918c6c0ea20ff9  gcc/ada/libgnat/a-stzfix.ads
! e76bcdb88cf8f5eeb7ef6c30141aa7c6  gcc/ada/libgnat/a-stzhas.adb
  41c71febbb354000bccca4ccd3a59c54  gcc/ada/libgnat/a-stzhas.ads
! 41413ffe0ac611a4dec5b64548f96a65  gcc/ada/libgnat/a-stzmap.adb
! 04cfd9ab72caf992fc1d1c6af3d490a6  gcc/ada/libgnat/a-stzmap.ads
! 3dcdb96d27cb8123cd5d19bc7fe0e5b7  gcc/ada/libgnat/a-stzsea.adb
! 25a388bdbfa91813558cda08c8804b26  gcc/ada/libgnat/a-stzsea.ads
! eb26b800d76087fc389b1f19dc4017b1  gcc/ada/libgnat/a-stzsup.adb
! f458d076899709e2c4f42c253c94a21a  gcc/ada/libgnat/a-stzsup.ads
! 580ce2a0fd64ab111f4816d49d9a7415  gcc/ada/libgnat/a-stzunb.adb
! 5e0594005749f3e279d62647777be866  gcc/ada/libgnat/a-stzunb.ads
! ed04f1d46c0bae47e7d7947fbed4bd9c  gcc/ada/libgnat/a-stzunb__shared.adb
! 48054c7976854da69627dfd9829f5d95  gcc/ada/libgnat/a-stzunb__shared.ads
! 42d477374d9dfc52a15f79481ab703c4  gcc/ada/libgnat/a-suecin.adb
! e065882bae98ea1aefaa78d24051b1d1  gcc/ada/libgnat/a-suecin.ads
! 4369335b33048198ad8b7aba5cc01391  gcc/ada/libgnat/a-suenco.adb
  24c625ef90e191bc1baa69c58ae2600f  gcc/ada/libgnat/a-suenco.ads
! a2989f75ffdaf93063d7101090b1c170  gcc/ada/libgnat/a-suenst.adb
  5a81ae9196b241db71c16198169dbed7  gcc/ada/libgnat/a-suenst.ads
! 81f26dde783cec8a675496007bec99c9  gcc/ada/libgnat/a-suewst.adb
  88073629f5531c7f6fba98820112cd02  gcc/ada/libgnat/a-suewst.ads
! 2bf87a0b29c80a00a5e1246e927fabf5  gcc/ada/libgnat/a-suezst.adb
  5aaf32a65e951f050f1cbb5adf5af9d2  gcc/ada/libgnat/a-suezst.ads
! 592f76f79f0be74656a8705c89e75119  gcc/ada/libgnat/a-suhcin.adb
! 73d86d66afb77f45e4ef123bd06e6808  gcc/ada/libgnat/a-suhcin.ads
! 0a80d488b1e6a6e187e18331a171813a  gcc/ada/libgnat/a-sulcin.adb
! 3ad556f8199fb6c2b792222c58116539  gcc/ada/libgnat/a-sulcin.ads
! 9c5666a0191bef402424c391163f017b  gcc/ada/libgnat/a-suteio.adb
! 6b4b2585234b53f5dac55bfb9a373771  gcc/ada/libgnat/a-suteio.ads
! 6912a7d92d0171753c4eaf54ce4b49c4  gcc/ada/libgnat/a-suteio__shared.adb
! 1c07ebaad2f9cff5c793e1b42a73762d  gcc/ada/libgnat/a-swbwha.adb
  65f3f68c6718760b4c2b0beba2af9f82  gcc/ada/libgnat/a-swbwha.ads
  aaf273ef9a113dedcab8fb87b71b7365  gcc/ada/libgnat/a-swfwha.ads
! 4976b0307ef0a7e8b16049d58f40a708  gcc/ada/libgnat/a-swmwco.ads
! 20f5fbb376d9650b44876124a6d457c2  gcc/ada/libgnat/a-swunau.adb
! bcc9e1bc89b20773f79e751a4f2d8302  gcc/ada/libgnat/a-swunau.ads
! 029320e031df160e65a3a19035d5f626  gcc/ada/libgnat/a-swunau__shared.adb
! a842c739cced08bcf9b153c2044e45a4  gcc/ada/libgnat/a-swuwha.adb
  45d76b5b911889e181b3717ab6c91651  gcc/ada/libgnat/a-swuwha.ads
! c73cd45d86df23a0d5ad27eb78c451fb  gcc/ada/libgnat/a-swuwti.adb
! 5aad4835ae3c0c7e00ed799e7cb4620f  gcc/ada/libgnat/a-swuwti.ads
! c7686d6d36815ddf946e654e10a42a21  gcc/ada/libgnat/a-swuwti__shared.adb
! 18bbe0fbcb9cf85de91b09cb2b2ae78f  gcc/ada/libgnat/a-szbzha.adb
  18b9cf476495930cec4ac3eb881257db  gcc/ada/libgnat/a-szbzha.ads
  32bb3b01e46ff7648c862537bd77aa0d  gcc/ada/libgnat/a-szfzha.ads
! 97176dfe148a27649ebcf89b058520df  gcc/ada/libgnat/a-szmzco.ads
! a8e0836929551004fd03352cd751e184  gcc/ada/libgnat/a-szunau.adb
! 7560f22fbebb11f54f702e0cd6f4f836  gcc/ada/libgnat/a-szunau.ads
! 35c6b78bd39d2b82bc5d3af39bfccea0  gcc/ada/libgnat/a-szunau__shared.adb
! cc0baad86b2314d3bbc5cd8fa21dfd44  gcc/ada/libgnat/a-szuzha.adb
  01cf107c9e66d7e5284c9b7ce2e2ed7e  gcc/ada/libgnat/a-szuzha.ads
! 337094483b886cd8289e89b914629d5f  gcc/ada/libgnat/a-szuzti.adb
! ab755b41b999079ab2e4a26d1e820309  gcc/ada/libgnat/a-szuzti.ads
! 5c731b33e2c5a88e9f675b8f2e94c28a  gcc/ada/libgnat/a-szuzti__shared.adb
! 6dcc31da23b4e72bd2b54be474117695  gcc/ada/libgnat/a-tags.adb
! ffabd8a804e070f47a6a6e8caf6d43e6  gcc/ada/libgnat/a-tags.ads
! 8483701f5ea38129203924b330239eb1  gcc/ada/libgnat/a-teioed.adb
! 8db515faa43b1f11c5a4e5648164eb3e  gcc/ada/libgnat/a-teioed.ads
! 240b489b33a2bbfd2ba6637cbad14df0  gcc/ada/libgnat/a-textio.adb
! eea4c845f819b48a195191f25d89f544  gcc/ada/libgnat/a-textio.ads
  c74a673b222c3d0037a22fb766c67488  gcc/ada/libgnat/a-tgdico.ads
! 9643366b606d758d02a603ed8f6ff3c7  gcc/ada/libgnat/a-tiboio.adb
  7b163db9f1467e9392f347bee1400136  gcc/ada/libgnat/a-tiboio.ads
! 0898ea71e0c98db0429a29a0b2dd6962  gcc/ada/libgnat/a-ticoau.adb
! b8ddc3293849f5bef4432882a8cc2b34  gcc/ada/libgnat/a-ticoau.ads
! 9162ef8620989f5e5e793b24411b54fd  gcc/ada/libgnat/a-ticoio.adb
! 16e53eda06d980469a3947b16e84cea8  gcc/ada/libgnat/a-ticoio.ads
! e6d477724d256bc98063e2076a729861  gcc/ada/libgnat/a-tideau.adb
! ce639000fc82a11aaacef2efc86b94c7  gcc/ada/libgnat/a-tideau.ads
! 63f96e86d72f2a1673ba68a01ae24047  gcc/ada/libgnat/a-tideio.adb
! a9be433a3b366c90d75bf1391f5f716d  gcc/ada/libgnat/a-tideio.ads
! 296fe465738f657970c5b821678e8971  gcc/ada/libgnat/a-tideio__128.adb
! a6a59a0b78656c73e821a87d0a7b8504  gcc/ada/libgnat/a-tienau.adb
! 38597792fd9171fdd8f2a2583f3baf2d  gcc/ada/libgnat/a-tienau.ads
! 8966ef70eb700d4816f9bacc0cae2d39  gcc/ada/libgnat/a-tienio.adb
  d3f704d27dd8f64a1e52fcde5fd565d8  gcc/ada/libgnat/a-tienio.ads
! fb5fc93d0a40bad0974b9172414ceade  gcc/ada/libgnat/a-tifiau.adb
! a9bf463425c61712b5cbb1754508825c  gcc/ada/libgnat/a-tifiau.ads
! 4eb5f5252dac05ac7a12cb8aef421ed9  gcc/ada/libgnat/a-tifiio.adb
  cb652b43513ee9f3e9818139e2f690db  gcc/ada/libgnat/a-tifiio.ads
! f66e2628fe559dfe03e6aeeca66c7ad5  gcc/ada/libgnat/a-tifiio__128.adb
! 8131090e8fc9c460e87efaa30ac5bfeb  gcc/ada/libgnat/a-tiflau.adb
! f4cb578e5a930f38aed28ba3be9c6fca  gcc/ada/libgnat/a-tiflau.ads
! ff1bbc694b5470b8022daa7ef049338d  gcc/ada/libgnat/a-tiflio.adb
! 9bae1f24380a83e3046ac934853796ff  gcc/ada/libgnat/a-tiflio.ads
! 122bf3120f0a1d2f2fc4ad4a258ea0d2  gcc/ada/libgnat/a-tigeau.adb
! e512749fab87f5524efbad33530b2557  gcc/ada/libgnat/a-tigeau.ads
! b155a12cb230aa2cf087216e68e28736  gcc/ada/libgnat/a-tigeli.adb
! c027c2b29bea52e981cca3c48636cd25  gcc/ada/libgnat/a-tiinau.adb
! 1a2d573ab95e0aa89f244030edc0b17c  gcc/ada/libgnat/a-tiinau.ads
! e2daf45c63d739ad1a90303224a8c94b  gcc/ada/libgnat/a-tiinio.adb
! 3626c88ed860d9b7db70690d91ed33c1  gcc/ada/libgnat/a-tiinio.ads
! 3604ac041acf10f2db78fc45ea07a418  gcc/ada/libgnat/a-tiinio__128.adb
! f4087224c75e5b5417fe1c7e2d64d36e  gcc/ada/libgnat/a-timoio.adb
! 069a513aaf479a697d6528816527f7db  gcc/ada/libgnat/a-timoio.ads
! 46b6bab173c6032ee2370bdab788973c  gcc/ada/libgnat/a-timoio__128.adb
! eb947eeaf04748a1667c421634b6722a  gcc/ada/libgnat/a-tiocst.adb
! 36ffce13eda32eed759d8c8f0f628492  gcc/ada/libgnat/a-tiocst.ads
! 6b7997287c987b6c43416e7c64cb8abb  gcc/ada/libgnat/a-tirsfi.adb
! db46e046b114321bf1c10b8ec6a7f7f9  gcc/ada/libgnat/a-tirsfi.ads
! a82a7f22aaf2bfdafd2685033c0726a5  gcc/ada/libgnat/a-titest.adb
  7b71ac41d87e6c43f98663d1d110846c  gcc/ada/libgnat/a-titest.ads
  1a5a51a7ff392f1819e96c8c7b6ba50b  gcc/ada/libgnat/a-tiunio.ads
  ebdefb0717ee54e84334b4468aea7da2  gcc/ada/libgnat/a-unccon.ads
! 8eb8e50901a7293468a57fa9630abb8c  gcc/ada/libgnat/a-uncdea.ads
! 229ab736c0ebe9b98ba211d31181c3af  gcc/ada/libgnat/a-undesu.adb
  82a804005be52b8d315b11082ce952d4  gcc/ada/libgnat/a-undesu.ads
! 0955b2ef1370da105fc31bd9b5689827  gcc/ada/libgnat/a-wichha.adb
  bc85d10bd14a8eda24559935a5472a57  gcc/ada/libgnat/a-wichha.ads
! 07345e566121406c5d932c93489ac163  gcc/ada/libgnat/a-wichun.adb
! d4706997805048470bae6f2d0a3da550  gcc/ada/libgnat/a-wichun.ads
  495dc144d91ae1388ae48ceb32e47f91  gcc/ada/libgnat/a-widcha.ads
! f55955650f707e6c64566fa12601f9da  gcc/ada/libgnat/a-witeio.adb
! ab1149ca9a6717d29c8e1824cd753d97  gcc/ada/libgnat/a-witeio.ads
! 213ad0be16bdfd2d031bb3f287c4b2c6  gcc/ada/libgnat/a-wrstfi.adb
! 14f31e2918fdf5edfc5e7aee2ffd9295  gcc/ada/libgnat/a-wrstfi.ads
! 82319715367183d84159d5e1627a66cb  gcc/ada/libgnat/a-wtcoau.adb
! 7ade4028e01074f635eb5b287162f6a3  gcc/ada/libgnat/a-wtcoau.ads
! 25931d12d7590f50f173dac6d090075a  gcc/ada/libgnat/a-wtcoio.adb
  d76fe24c6988d732303e4f40830c2082  gcc/ada/libgnat/a-wtcoio.ads
! f8e99d2ab94a3e7bd3463d22aa4bcd3c  gcc/ada/libgnat/a-wtcstr.adb
! 965b23bab6d37dc6f73f9b958c7e106a  gcc/ada/libgnat/a-wtcstr.ads
! b7866a7abab79af42356c03e1d5d9a7f  gcc/ada/libgnat/a-wtdeau.adb
! eaf62af4df803da86e82c1af00291f2a  gcc/ada/libgnat/a-wtdeau.ads
! b258574596e923d14dadfee041af8a94  gcc/ada/libgnat/a-wtdeio.adb
  20d4a8b1dbec170436bce906004aaac8  gcc/ada/libgnat/a-wtdeio.ads
! 54924bc2a7110d2364ee62e675367e5e  gcc/ada/libgnat/a-wtdeio__128.adb
! 0f7bf856fbbc31b73d7def92c60118a6  gcc/ada/libgnat/a-wtedit.adb
! af7b55b8bedc1619ec3bfa04838b1195  gcc/ada/libgnat/a-wtedit.ads
! 34504aec35ccf20a7943abe4432ba6de  gcc/ada/libgnat/a-wtenau.adb
! 56c70c81328b49ee2c70ed2fffde22ac  gcc/ada/libgnat/a-wtenau.ads
! f504b4a402c715b379338dc907010762  gcc/ada/libgnat/a-wtenio.adb
  fa13b730a5c90ff293982415bf7bcecb  gcc/ada/libgnat/a-wtenio.ads
! d83c16337f4139894d5eec7bc2c6f879  gcc/ada/libgnat/a-wtfiau.adb
! 405a3581e0067bb9c7c641d7606e3f5b  gcc/ada/libgnat/a-wtfiau.ads
! 482d866f5483a59b8e2fde6d82f91fc4  gcc/ada/libgnat/a-wtfiio.adb
  495444487be476924785b4b8eff6b910  gcc/ada/libgnat/a-wtfiio.ads
! 90b8cdd9f9564b072b8d40bfa9cbbaa0  gcc/ada/libgnat/a-wtfiio__128.adb
! c1eced561212165fede080ead5f97627  gcc/ada/libgnat/a-wtflau.adb
! b7794212f1e1adbd49be00eb9cd45c7e  gcc/ada/libgnat/a-wtflau.ads
! b07627b223b6782ff034145367751462  gcc/ada/libgnat/a-wtflio.adb
  bb57e8648d7de30496bb43f8a849fc3f  gcc/ada/libgnat/a-wtflio.ads
! 49a3eb5ae53f4632872db4c508afec45  gcc/ada/libgnat/a-wtgeau.adb
! d904d2b4f88c5fd89e3cbc4529179676  gcc/ada/libgnat/a-wtgeau.ads
! d43ae6912bfc4e359fd5160cb86664e3  gcc/ada/libgnat/a-wtinau.adb
! daeb9692be07bbd35d5143effb7ec7c0  gcc/ada/libgnat/a-wtinau.ads
! 62bf05f2299f37c93f0831377de561df  gcc/ada/libgnat/a-wtinio.adb
  62a64f1715aaaa145cf2b6d360381363  gcc/ada/libgnat/a-wtinio.ads
! ae48dd01639b1c1120830747fde46d87  gcc/ada/libgnat/a-wtinio__128.adb
! 9d9d561415d8c79b9ac9727c7636aecb  gcc/ada/libgnat/a-wtmoio.adb
! e25766d15ad8b869771fcb0a4246ecc7  gcc/ada/libgnat/a-wtmoio.ads
! 5b47c2a1135ccf5016c17bfd5b7e2844  gcc/ada/libgnat/a-wtmoio__128.adb
! 443ab84d2c299801c0f9456061c9be72  gcc/ada/libgnat/a-wttest.adb
  53d3d301f9afb69992013f55fe363511  gcc/ada/libgnat/a-wttest.ads
! d76909fbac906e09ab27d42e657217c8  gcc/ada/libgnat/a-wwboio.adb
  899e14502ec4dedbf4fdb28f8cecfa35  gcc/ada/libgnat/a-wwboio.ads
  1c2480c111fa5b71fca7c67f21525f8f  gcc/ada/libgnat/a-wwunio.ads
  107d2989204d28e32923acc02d444f67  gcc/ada/libgnat/a-zchara.ads
! 03432eb9d62799633edbc1187a5d9ec8  gcc/ada/libgnat/a-zchhan.adb
! ce55ee9974e330611ce057d096fe581f  gcc/ada/libgnat/a-zchhan.ads
! 99972d0122b24386d0c3e211c237d905  gcc/ada/libgnat/a-zchuni.adb
! ead99b55be6224b426746317226874d5  gcc/ada/libgnat/a-zchuni.ads
! 1e3bdfc3b22218d592ef2bb1201130d0  gcc/ada/libgnat/a-zrstfi.adb
! 9c5e70d24e64609ef665305e9688a56a  gcc/ada/libgnat/a-zrstfi.ads
! ddc5c105b892bc4ce632156d740228bf  gcc/ada/libgnat/a-ztcoau.adb
! fe39d89a6c321af618f6fa9308e66666  gcc/ada/libgnat/a-ztcoau.ads
! af4103a864d7466de492ff50a92dbef6  gcc/ada/libgnat/a-ztcoio.adb
  7440d81a0d7886b3f76b271c7fcbf8b3  gcc/ada/libgnat/a-ztcoio.ads
! 25bf0d356a062baf214d440692730935  gcc/ada/libgnat/a-ztcstr.adb
! aceb2776cb52e55b721fdbf7ca627186  gcc/ada/libgnat/a-ztcstr.ads
! 6863e77ebbaea3e0a838ff598a6757a8  gcc/ada/libgnat/a-ztdeau.adb
! bde1a710e23fb9a0ed462d802d72578f  gcc/ada/libgnat/a-ztdeau.ads
! 71a891cea77b5b630ee15a6db4287a28  gcc/ada/libgnat/a-ztdeio.adb
  a1457649e626ebf32915696e5afd2ac0  gcc/ada/libgnat/a-ztdeio.ads
! 70240496c95b3fffc317fb58d7e2e6da  gcc/ada/libgnat/a-ztdeio__128.adb
! 44594067782e7fbf67050ed725c41cb8  gcc/ada/libgnat/a-ztedit.adb
! c6f180c31d4d12f5e9319480f0370080  gcc/ada/libgnat/a-ztedit.ads
! 2ab6a53f1d404d4803fba54ca79d0e39  gcc/ada/libgnat/a-ztenau.adb
! c31415516d18d8f8ba31aaaf059b2c0b  gcc/ada/libgnat/a-ztenau.ads
! 74f189cc50a5a81796a42e17d6b486f1  gcc/ada/libgnat/a-ztenio.adb
  33aa889d92f43b14a348a444135fc992  gcc/ada/libgnat/a-ztenio.ads
! 3ad604d16ce712000e8d73c3ec3470d1  gcc/ada/libgnat/a-ztexio.adb
! 1e04ce102d6ea8362b1918190977d06a  gcc/ada/libgnat/a-ztexio.ads
! 2f6909d11747f9fa6ea3ef379a1585f8  gcc/ada/libgnat/a-ztfiau.adb
! d3dd475343a9cad2e67b907acb42a169  gcc/ada/libgnat/a-ztfiau.ads
! 59ee2075807135d0758d7a8378757521  gcc/ada/libgnat/a-ztfiio.adb
  9e2efe8c1c2d6658a575fbecb5ab1418  gcc/ada/libgnat/a-ztfiio.ads
! 822e73bbe5db92bc6c36eb2caaf7b6bd  gcc/ada/libgnat/a-ztfiio__128.adb
! f0c11f65e22cd92c8cf6351977e1bc92  gcc/ada/libgnat/a-ztflau.adb
! b577063248f7bad3e5f96242ba47b013  gcc/ada/libgnat/a-ztflau.ads
! 88bfd811d91284efc90b3b7f50ae2742  gcc/ada/libgnat/a-ztflio.adb
  7aae0945e67f16f4f77aa54a65552f3e  gcc/ada/libgnat/a-ztflio.ads
! e9818464849e1f5a1882285fc3d5d328  gcc/ada/libgnat/a-ztgeau.adb
! 6982b57935d6ff3a82cda888d66c7d3e  gcc/ada/libgnat/a-ztgeau.ads
! de233d7c8a2d8ac6425bb155c091f7ea  gcc/ada/libgnat/a-ztinau.adb
! 1ea07d87a3abe777ad2fa869b623dd0e  gcc/ada/libgnat/a-ztinau.ads
! 0c33701746ee37f92918ba35e00ea130  gcc/ada/libgnat/a-ztinio.adb
  f0456d31ec0aa6f6786e1b635f8023cb  gcc/ada/libgnat/a-ztinio.ads
! 9f9c66c7b35087d52a867f9fc9dd98c2  gcc/ada/libgnat/a-ztinio__128.adb
! 73520a84f28b98505e22c655341b2f30  gcc/ada/libgnat/a-ztmoio.adb
  9831d312ef279fc55e5e051745be05d2  gcc/ada/libgnat/a-ztmoio.ads
! dce3c2e7a8ff10678e48b2489eab36fa  gcc/ada/libgnat/a-ztmoio__128.adb
! 7bcf95a864a2e6bc3ef2c9b935c0f9b4  gcc/ada/libgnat/a-zttest.adb
  2caf047380f684add2bd5a35dc4e1091  gcc/ada/libgnat/a-zttest.ads
! 605eed33b288c95d6f7fe161ab85df0f  gcc/ada/libgnat/a-zzboio.adb
  a80428bcd2bf9ab7214609e68ff1651c  gcc/ada/libgnat/a-zzboio.ads
  a6d7b54a7a1a401188cfe54d1c2bad3b  gcc/ada/libgnat/a-zzunio.ads
  aad41855092e5648dbc6e7ab9d94cda3  gcc/ada/libgnat/ada.ads
  71c71bcd90c113e366bf720c3d886660  gcc/ada/libgnat/calendar.ads
  e150ba4c7f01d70e0086543a96ffd40b  gcc/ada/libgnat/directio.ads
! 6945be79a1020f77f5754585f4d486df  gcc/ada/libgnat/g-allein.ads
! 3dfe0695fdc094bd97b6c70df1b8c75a  gcc/ada/libgnat/g-alleve.adb
! 33ae951fa403c4e1dd1337124c54c6f4  gcc/ada/libgnat/g-alleve.ads
! 9e2359c8d3dd7794d978f6ddd2add9dc  gcc/ada/libgnat/g-alleve__hard.adb
! 298710bed138ecdc9143880d1fa8bd38  gcc/ada/libgnat/g-alleve__hard.ads
! f87bedf307c7b82f6946856c66bf5f3c  gcc/ada/libgnat/g-altcon.adb
! 1484cff5c75d441c7956bb37bfe71fd0  gcc/ada/libgnat/g-altcon.ads
! 875d4767fd2bc2d564da793f0ef39aae  gcc/ada/libgnat/g-altive.ads
! 6f46de14654fbb1dcad5f39b0a661b3e  gcc/ada/libgnat/g-alveop.adb
! f61f15b0c52abc1910e5d66ea4a2cb9b  gcc/ada/libgnat/g-alveop.ads
! b4ab76d6e13d3b20202a5ca73358f17c  gcc/ada/libgnat/g-alvety.ads
! 07c7c64f9871c9c3f2a8a93b7a379ae8  gcc/ada/libgnat/g-alvevi.ads
! bfabb6ded7c2d12ee4931e83ab1d3e53  gcc/ada/libgnat/g-arrspl.adb
! 45a6d97142bc478244595e96fc018329  gcc/ada/libgnat/g-arrspl.ads
! 6dedfa79cd570f4988c3cb944f4725d9  gcc/ada/libgnat/g-awk.adb
! d3a82df096104e9a9e3717e2090773bb  gcc/ada/libgnat/g-awk.ads
! 2e4ee25eceb86e92aa5284ae5a8112f0  gcc/ada/libgnat/g-binenv.adb
! 5398e8b958960497a7cb3511eb7e3ae2  gcc/ada/libgnat/g-binenv.ads
! 3221ee65fa1a8930c70ef9c473c28bc3  gcc/ada/libgnat/g-brapre.ads
! 10dfa3dd585c25b5c0b80455363616b0  gcc/ada/libgnat/g-bubsor.adb
! 7fe62953d12288e169240b901fa435ef  gcc/ada/libgnat/g-bubsor.ads
! ff6d1cfcb0bf954b8fc6eeda902d9e48  gcc/ada/libgnat/g-busora.adb
! 24fa88ea9bde2b5905a5466f013851c5  gcc/ada/libgnat/g-busora.ads
! df479534851b08df536b2e979006b6c3  gcc/ada/libgnat/g-busorg.adb
! 68cfc204c004d7e39792d6b99c4fdf8e  gcc/ada/libgnat/g-busorg.ads
! 09ba195dcfac26b5c922acb0f8c3d945  gcc/ada/libgnat/g-byorma.adb
! 6486fe7779da89f5b05662357b1237e0  gcc/ada/libgnat/g-byorma.ads
! c9d1f84213ad9ad4aa1ca050f60aa0c9  gcc/ada/libgnat/g-bytswa.adb
! e450fba7c292259d27f769f0972eb8f9  gcc/ada/libgnat/g-bytswa.ads
! 3bd75d8a6bd7479beb762c93afb10420  gcc/ada/libgnat/g-calend.adb
! 95ac238d5f3cd2e513229bd097f9a05f  gcc/ada/libgnat/g-calend.ads
! 1ee576bb708230d9b41cd96ca449adc3  gcc/ada/libgnat/g-casuti.adb
! 0373ce634d0fcbb2818c4a5d883695c6  gcc/ada/libgnat/g-casuti.ads
! 396f10f29a91fdca303e15c08f9106d3  gcc/ada/libgnat/g-catiio.adb
! e4a02b51308e6670983c18f6842cf537  gcc/ada/libgnat/g-catiio.ads
! 1614a27b0e38da1b8eba0a52bf865939  gcc/ada/libgnat/g-cgi.adb
! 6c411a69fc1648606cc31d466ca64e67  gcc/ada/libgnat/g-cgi.ads
! 6156c6ec0a351b87c9e1c071a8a90663  gcc/ada/libgnat/g-cgicoo.adb
! f0164edbfd727646c1364c6645da9096  gcc/ada/libgnat/g-cgicoo.ads
! feb86d1bb0b492a0c4aa6d4e61801fd9  gcc/ada/libgnat/g-cgideb.adb
! 6f5683cc2842d668c16a0e9e63bfcad7  gcc/ada/libgnat/g-cgideb.ads
! 6f313eeb0e99b9a9c1e5d85e4f243081  gcc/ada/libgnat/g-comlin.adb
! d612c484b5a110e0d0f5bb1546348e69  gcc/ada/libgnat/g-comlin.ads
! 43314ded37d203cef775184550a2cb79  gcc/ada/libgnat/g-comver.adb
! e7d07c89e97da5aafddc6aee6cfd398e  gcc/ada/libgnat/g-comver.ads
! 48a08af04ae1fe67360ebc956a971c1d  gcc/ada/libgnat/g-cppexc.adb
! 694ab0a58aa8402465191f524035ae40  gcc/ada/libgnat/g-cppexc.ads
! 98e7fc2806cbbd243779cd0e992963c0  gcc/ada/libgnat/g-crc32.adb
! a9fe3d94fa71c651a383b2be29e6c2d2  gcc/ada/libgnat/g-crc32.ads
! 7f69d6e419de7b16b2e13a6043a9fa55  gcc/ada/libgnat/g-ctrl_c.adb
! c9a6df083e2ad8327344e4ac32faf761  gcc/ada/libgnat/g-ctrl_c.ads
! 5afe793fa768bdaa9cbee3312f56aa7d  gcc/ada/libgnat/g-curexc.ads
! dd33204c22838faf2872d3b72aad6d46  gcc/ada/libgnat/g-debpoo.adb
! 56e11e896b0d1b45fbc96359ec58a810  gcc/ada/libgnat/g-debpoo.ads
! 66c4a21406b98200da5fe48fd5a652ba  gcc/ada/libgnat/g-debuti.adb
! f6ab1a423a44cf4a35bfd3f0486800de  gcc/ada/libgnat/g-debuti.ads
! 472781c75db60122af8ca64745ff4465  gcc/ada/libgnat/g-decstr.adb
! c3e66c4ecef2ad6ee2a934a6e536abdb  gcc/ada/libgnat/g-decstr.ads
! efd1f6ff40c93b3b33901c936b871bdd  gcc/ada/libgnat/g-deutst.ads
! bb5f33cafbe1e235e303edbb4210c940  gcc/ada/libgnat/g-diopit.adb
! 047fc4eb93f5bdb6711bd20a97371732  gcc/ada/libgnat/g-diopit.ads
! 18cc3706cf1cce070b14e69b72a9fa8a  gcc/ada/libgnat/g-dirope.adb
! c741a9e4793e4b460d704536bd62213b  gcc/ada/libgnat/g-dirope.ads
! d160ea6165a31db8f36271ece4262f48  gcc/ada/libgnat/g-dynhta.adb
! d8d185de5a4221f4a624cb47b1d21a8c  gcc/ada/libgnat/g-dynhta.ads
! c8738e92a4e941bbdd1039e2db986c8c  gcc/ada/libgnat/g-dyntab.adb
! 2ea275c78e50c0a646fcb099ffdfd026  gcc/ada/libgnat/g-dyntab.ads
! 34f1fb292a75995d8a139e4abe867e70  gcc/ada/libgnat/g-eacodu.adb
! 217272c410266df9ee0f52fc4f4eabcc  gcc/ada/libgnat/g-encstr.adb
! 1ce932d86bb171afcd05600d4e54ecc7  gcc/ada/libgnat/g-encstr.ads
! 0d1d8ab5dca7edb1d52bbbcebfe34e18  gcc/ada/libgnat/g-enutst.ads
! d41a5dfe7bad44e7aaf7ad61f18f4304  gcc/ada/libgnat/g-excact.adb
! fa6e4a3c8f8c1985f335764dbadf2af9  gcc/ada/libgnat/g-excact.ads
! cbf3cd10789ad8bc4bb29e5559192bcd  gcc/ada/libgnat/g-except.ads
! 3d7083f74bbed1ff629c48d3ce56cfc6  gcc/ada/libgnat/g-exctra.adb
! 22069005c9e4aaa9e51ae6da0f6f663a  gcc/ada/libgnat/g-exctra.ads
! 99f91ebd52db0442fb1490226de1348f  gcc/ada/libgnat/g-expect.adb
! b10e8c4698d3275198cc1031c2e992e4  gcc/ada/libgnat/g-expect.ads
! 2acb52b63e3fa5de252102c902055ab8  gcc/ada/libgnat/g-exptty.adb
! 8789f7e9e06ab748f67594c4d02e7b9b  gcc/ada/libgnat/g-exptty.ads
! c235c8fb78cb8eaab652d1388eeb93f4  gcc/ada/libgnat/g-flocon.ads
! d6c4c89b2519e6626148cf031f1e69ff  gcc/ada/libgnat/g-forstr.adb
! 025901acd1355b3b4a6f6d201815d20e  gcc/ada/libgnat/g-forstr.ads
! e324d1cb47d2d2112d2b6a50188ab8f8  gcc/ada/libgnat/g-graphs.adb
! d4c6440072fc6557a744ae7760bfb8ef  gcc/ada/libgnat/g-graphs.ads
! 33f39207c520cb3b32e570e4b2c12e53  gcc/ada/libgnat/g-heasor.adb
! ebb460e6f50aca90e8165f9c9086d6a4  gcc/ada/libgnat/g-heasor.ads
! 6b965fec563f832f6135a704857d1798  gcc/ada/libgnat/g-hesora.adb
! 84a1901c6947b6f3ddf03f60ccfbb129  gcc/ada/libgnat/g-hesora.ads
! 2a56b072402c86d6d740a54ba055f396  gcc/ada/libgnat/g-hesorg.adb
! afa95271fda451a5efeed13fea5ac1ab  gcc/ada/libgnat/g-hesorg.ads
! c694597cb8a6bd078e3d78517587b37e  gcc/ada/libgnat/g-htable.adb
! 9c0dd9eed588a94c52bea3f39bace847  gcc/ada/libgnat/g-htable.ads
! a5ec333ab36c5466dc9ac2a7da01b7ab  gcc/ada/libgnat/g-io.adb
! cfc3c4f660a3702300897783662e3025  gcc/ada/libgnat/g-io.ads
! 9ad494f90612dcd4cf9ee6c07d3e783d  gcc/ada/libgnat/g-io_aux.adb
! 25fb7cd0f0ac96bed6668bf9b87b4219  gcc/ada/libgnat/g-io_aux.ads
! 214beb168c28fcdfeb254d78462eca29  gcc/ada/libgnat/g-lists.adb
! 2d460afc43393e2deb40b734f652955a  gcc/ada/libgnat/g-lists.ads
! 9338425ddff9c08c8a2b4e02d63e97d4  gcc/ada/libgnat/g-locfil.adb
! fc9b601d0794eed1a92f097fb196390e  gcc/ada/libgnat/g-locfil.ads
! 87d10c58ff1d916f4fb9ebfa3c1ba369  gcc/ada/libgnat/g-mbdira.adb
! a775163b0231635413fb73b74c077d27  gcc/ada/libgnat/g-mbdira.ads
! c7efccd90a9070346560283a7f3c2389  gcc/ada/libgnat/g-mbflra.adb
! b3e32e4100b4d01eddf409cc5658ef08  gcc/ada/libgnat/g-mbflra.ads
! a814f3f46b2f78dd0bcc24e6b92bca72  gcc/ada/libgnat/g-md5.adb
! a82a4e4c877740388de6a2a345520767  gcc/ada/libgnat/g-md5.ads
! 4489e6f07a961888be7c2f8d8e60084e  gcc/ada/libgnat/g-memdum.adb
! 979d768f851b83feb717f23ce32f4534  gcc/ada/libgnat/g-memdum.ads
! 2784b745a4c9b9de8584d6bcd8a029b1  gcc/ada/libgnat/g-moreex.adb
! 3fe22c284ebad4421fb384ff7b2e2001  gcc/ada/libgnat/g-moreex.ads
! 11fbfa03c76fff023c92a572b0126144  gcc/ada/libgnat/g-os_lib.adb
! c41dbfc692f6878cda3d3820803ddb78  gcc/ada/libgnat/g-os_lib.ads
! 5d73c7a725d84d8c0312fd3db8980ba8  gcc/ada/libgnat/g-pehage.adb
! 313e250f96ad0165a5a6aa26c63cb829  gcc/ada/libgnat/g-pehage.ads
! 424cf63c3377d0cb36e570c2a678ea56  gcc/ada/libgnat/g-rannum.adb
! a4f08ea36f2ba048b5a30eb78c66dc3b  gcc/ada/libgnat/g-rannum.ads
! cc273da947b03d98ce0e163d745c01a6  gcc/ada/libgnat/g-regexp.adb
! d590e0f8b2d57974415ca4a607b6ca91  gcc/ada/libgnat/g-regexp.ads
! 3abf40f375e2a6f1360d32654054ef2b  gcc/ada/libgnat/g-regist.adb
! 9aace94299d8a2b4dc9e4f572a3783b4  gcc/ada/libgnat/g-regist.ads
! 85abb29d83166a054c562be0b4af4c22  gcc/ada/libgnat/g-regpat.adb
! 675d596ac6b42b5f243ebe40d503b9ce  gcc/ada/libgnat/g-regpat.ads
! 53bdaa942af91728238bf8be2ccb536b  gcc/ada/libgnat/g-rewdat.adb
! dc8a704ee47a96be2f5bdf858dff5c8a  gcc/ada/libgnat/g-rewdat.ads
! 2f6c7c820d58eebd7ce9efce4cdb299b  gcc/ada/libgnat/g-sechas.adb
! 3b48a1501bad270e19badfabebab8967  gcc/ada/libgnat/g-sechas.ads
! 47ae8082973edd52c557068bba540e4f  gcc/ada/libgnat/g-sehamd.adb
! 6d95516b86575283ccf66cc5c3176ef6  gcc/ada/libgnat/g-sehamd.ads
! 6257afbac6c247ed3243aa0234030973  gcc/ada/libgnat/g-sehash.adb
! 1caf33dd26bacc741e914dc386e5b97b  gcc/ada/libgnat/g-sehash.ads
! e641bfd0206971a262b70bed2eb69f78  gcc/ada/libgnat/g-sercom.adb
! 4066c1e6f1775e5f1b24de5cc55f2f4d  gcc/ada/libgnat/g-sercom.ads
! 056187f41bd20aa51a8eab224e8a946d  gcc/ada/libgnat/g-sercom__linux.adb
! c5ee0e03e6ebf9c4efcd0a7b52f0f665  gcc/ada/libgnat/g-sercom__mingw.adb
! 974ae718f5d0115709cac48acb4c3dc7  gcc/ada/libgnat/g-sestin.ads
! 7e17b0c74fdce107c9afe5a5c6ee6c11  gcc/ada/libgnat/g-sets.adb
! df14d1e43a1ccca9500568465482634c  gcc/ada/libgnat/g-sets.ads
! a1491bcec628b1fa5e7736032fb631dc  gcc/ada/libgnat/g-sha1.adb
! 5dbdaca339705d7dc196386ecbf985c8  gcc/ada/libgnat/g-sha1.ads
! ec0e27e70c70473c103ff5aec525dfd3  gcc/ada/libgnat/g-sha224.ads
! 3c344fd3a7334d9c03d6906a1cf2a8d7  gcc/ada/libgnat/g-sha256.ads
! e0465120631601689696ec6b773726e2  gcc/ada/libgnat/g-sha384.ads
! 18d4ea8bf943d2657de3b2308648141f  gcc/ada/libgnat/g-sha512.ads
! 851f275591ba8d1a3c663cb6c21b775d  gcc/ada/libgnat/g-shsh32.adb
! acc55feb1f9b36beeb6bac34a026c7f8  gcc/ada/libgnat/g-shsh32.ads
! acbe0ef5927702466b3f860ce42c8f0d  gcc/ada/libgnat/g-shsh64.adb
! b48c446fff5aaaa86bafe34fd0ed8901  gcc/ada/libgnat/g-shsh64.ads
! e19ad13e3b057cfceeb10b6cf0df7a15  gcc/ada/libgnat/g-shshco.adb
! 8a80527a9d0d918c6628e674944f1c84  gcc/ada/libgnat/g-shshco.ads
! 7795f6af302ef79d93aa9eb56efb75d5  gcc/ada/libgnat/g-soccon.ads
! f09e74d924834ebfbdce445f0a73d203  gcc/ada/libgnat/g-socket.adb
! d0d569c87f4919475a480810f06fdb4d  gcc/ada/libgnat/g-socket.ads
! a70c6f97cb49ddcbff41db0fa8b4e01f  gcc/ada/libgnat/g-socket__dummy.adb
! eb5c690d823c81be96a7b9c8767c2b81  gcc/ada/libgnat/g-socket__dummy.ads
! c0e4a910f223bcec101b772151f5a5c0  gcc/ada/libgnat/g-socpol.adb
! 7c28503679899f94530653db9c12d724  gcc/ada/libgnat/g-socpol.ads
! f3d0a719b7a96e24f7df7f8458de08b0  gcc/ada/libgnat/g-socpol__dummy.adb
! 6219c82f1059326c061e51988ff30c4e  gcc/ada/libgnat/g-socpol__dummy.ads
! 4a3b6f7317595c612d2313e4aac4aca7  gcc/ada/libgnat/g-socthi.adb
! 2082c239ab9515dcbe94d48eff8afc09  gcc/ada/libgnat/g-socthi.ads
! 6e61f29ae50a98d09651d642f8c77c7b  gcc/ada/libgnat/g-socthi__dummy.adb
! eb12e3dc2ea81d6089a650b6a612e248  gcc/ada/libgnat/g-socthi__dummy.ads
! aeb0f45be185072afdec0f2f99097af2  gcc/ada/libgnat/g-socthi__mingw.adb
! 6e13c689c23da3a50f8c12a8cb69fb90  gcc/ada/libgnat/g-socthi__mingw.ads
! 5b11eda972f07dc49bd3f533b85c5af4  gcc/ada/libgnat/g-socthi__vxworks.adb
! f47a3ef0836afe779d31bd719d8e6e2a  gcc/ada/libgnat/g-socthi__vxworks.ads
! ff3709c6f562bc99ea28670f50ab7a40  gcc/ada/libgnat/g-soliop.ads
! 9339a398b32b9ffa846b32c044cdfabc  gcc/ada/libgnat/g-soliop__lynxos.ads
! 17e2cb1662fbd534fc45e4773a8fe412  gcc/ada/libgnat/g-soliop__mingw.ads
! 841c84c1b7b5193865bbbedc80e82966  gcc/ada/libgnat/g-soliop__qnx.ads
! b8503ff0b70ade2ff0fc379b7ee3a6f7  gcc/ada/libgnat/g-soliop__solaris.ads
! c2b034b109f0adc9d0265c9269c2b10e  gcc/ada/libgnat/g-sopowa.adb
! c3377a32ce07c2b9c1f875437cf4ec47  gcc/ada/libgnat/g-sopowa__mingw.adb
! b0aade11d7af22e5277714ba1cc68f8a  gcc/ada/libgnat/g-sopowa__posix.adb
! b38de735dd5227ab1ed51e15981d3b2b  gcc/ada/libgnat/g-sothco.adb
! 81d502d26a4465d57c249c0522973562  gcc/ada/libgnat/g-sothco.ads
! dbb60edcd75ab1a83b09818253f2fea6  gcc/ada/libgnat/g-sothco__dummy.adb
! 86901f7251c3946fac28200a9df992c5  gcc/ada/libgnat/g-sothco__dummy.ads
! 605f07ec13b5755cb34822ea41aa940c  gcc/ada/libgnat/g-souinf.ads
! deaac3023746993469f39d98eb08ff30  gcc/ada/libgnat/g-spchge.adb
! d66ebecb26a085051b4219c95569f245  gcc/ada/libgnat/g-spchge.ads
! 53e67afbb4d956803979a92488feb671  gcc/ada/libgnat/g-speche.adb
! cc190f5fb36a88288bfe728b1aa95c94  gcc/ada/libgnat/g-speche.ads
! a6453d6fc0188491c0e31207832f2ce6  gcc/ada/libgnat/g-spipat.adb
! 32096a12e492fbcd04240f95cb134261  gcc/ada/libgnat/g-spipat.ads
! 6e5c28264bf4157876f7153bbcceb23d  gcc/ada/libgnat/g-spitbo.adb
! 5f5d0dfd376c0b12f38f943eef99e08d  gcc/ada/libgnat/g-spitbo.ads
! 9f2688ba2f12921cec7cf8096640611f  gcc/ada/libgnat/g-spogwa.adb
! 740bca46a70ddbbb85bcd527b72127df  gcc/ada/libgnat/g-spogwa.ads
! db76db232f8685b5e2ed137eb07ab03a  gcc/ada/libgnat/g-sptabo.ads
! 4d0ec39e521b2117bde5dfb34fafb979  gcc/ada/libgnat/g-sptain.ads
! 77555c274ec898b10579dbaee5e1ac7e  gcc/ada/libgnat/g-sptavs.ads
! 5c3eff02851004ca9d1185c09185d4e8  gcc/ada/libgnat/g-sse.ads
! 9bdfb0d8f2030b8a73a323c61bc4a6aa  gcc/ada/libgnat/g-ssvety.ads
! f055f184707ea3098da38772cf4da6cc  gcc/ada/libgnat/g-sthcso.adb
! 50793b293c74406821a29b9f42c91fc4  gcc/ada/libgnat/g-stheme.adb
! 702976b72eb195b81a2fcd5aed00b9c2  gcc/ada/libgnat/g-strhas.ads
! 016d0e14e53d27821caa033fca85740a  gcc/ada/libgnat/g-string.adb
! 9a891d1947de6d921fb09dc3987fc810  gcc/ada/libgnat/g-string.ads
! 0740dea102ffe9db061f02be0920b996  gcc/ada/libgnat/g-strspl.ads
! cdd8b9b9d0210a69ac588a48c31715cb  gcc/ada/libgnat/g-stseme.adb
! df86500b0b3ef27b4901a1a6ca6f90b0  gcc/ada/libgnat/g-stsifd__sockets.adb
! b6cd3c9e3a829fbf5fbf4403aa06cc9a  gcc/ada/libgnat/g-table.adb
! 3fb5f3b02a1b5b4a8d7b574ec81615d3  gcc/ada/libgnat/g-table.ads
! b4374898d4e8690c77b87468ef7477ea  gcc/ada/libgnat/g-tasloc.adb
! d125e54a7810e9061c79a36fbef797e2  gcc/ada/libgnat/g-tasloc.ads
! f3ab892d16d39120c9adc140e2fafb78  gcc/ada/libgnat/g-timsta.adb
! 19376587c0a26400ecca4ba43a8240bf  gcc/ada/libgnat/g-timsta.ads
! 040964f2c1b283fab234559a6c79c3fc  gcc/ada/libgnat/g-traceb.adb
! fe7b4c3ea912e6467e660236ca42edb3  gcc/ada/libgnat/g-traceb.ads
! 86f159d4d23e7057b3bd3de4b41a5dde  gcc/ada/libgnat/g-trasym.adb
! eadadfbedb3f2914c16ddf64fcf38765  gcc/ada/libgnat/g-trasym.ads
! c0f2eaf7350386352165e99ddb58fb38  gcc/ada/libgnat/g-tty.adb
! 37f55bd457cf354dade80d6c13255ab7  gcc/ada/libgnat/g-tty.ads
! 406c4a249f5298a67fae55abe74eb49b  gcc/ada/libgnat/g-u3spch.adb
! 5e478d2c62a49c447f1bbece4737a961  gcc/ada/libgnat/g-u3spch.ads
! 746b9188ba1a73a99b569f04b83c6ed6  gcc/ada/libgnat/g-utf_32.adb
! 77a8dabcb17c12092dc5879b6b36162c  gcc/ada/libgnat/g-utf_32.ads
! 5392830a899e144d6aa214d7d0b7fa98  gcc/ada/libgnat/g-wispch.adb
! b279d277495529b58476fad5e205fc1e  gcc/ada/libgnat/g-wispch.ads
! e5ae1e23e92d52e64700e4b7a4b0997a  gcc/ada/libgnat/g-wistsp.ads
! ffb84728009f6911ffb7b2f7e50c2838  gcc/ada/libgnat/g-zspche.adb
! e7babf9ee106e651e7a6926fe07de064  gcc/ada/libgnat/g-zspche.ads
! 4dca2f7676a4c1491981c0565c8769b2  gcc/ada/libgnat/g-zstspl.ads
! 8e9b40f2857fd3a243222e3701eda93a  gcc/ada/libgnat/gnat.ads
! 5bd69f86161a7abeeea80a3dcf1249bf  gcc/ada/libgnat/i-c.adb
! ed104cb023748ff03db6a2ac4f5202a4  gcc/ada/libgnat/i-c.ads
! 3cd8ff8254b2d3b6d8013daf9ac76f7c  gcc/ada/libgnat/i-cexten.ads
! cc06f30d7754f2a5d9cc860d6a06e0e3  gcc/ada/libgnat/i-cexten__128.ads
! 2a85a8bcdb2ce1a101a18a29436dce59  gcc/ada/libgnat/i-cobol.adb
! 76fd1e32db3dfd3e383c4aa61227d419  gcc/ada/libgnat/i-cobol.ads
! 5869e8cd6a51881252a947fc28832293  gcc/ada/libgnat/i-cpoint.adb
! d9469df88bd9636f7f24c99fc6b87e67  gcc/ada/libgnat/i-cpoint.ads
! a275b1ac6479c33d2eea7e6bafe03224  gcc/ada/libgnat/i-cstrea.adb
! 8be2ac376a994e938b373418736d0d04  gcc/ada/libgnat/i-cstrea.ads
! 061c4cbcb1e1bf4019cc146c9e6ed9bb  gcc/ada/libgnat/i-cstrin.adb
! 5fcee4f15f50bececd400cabc921f6a9  gcc/ada/libgnat/i-cstrin.ads
! 6cbd75b79246d8e460d85e15133c76e5  gcc/ada/libgnat/i-fortra.adb
  fe08792d30f40125dd75d63c7bcd68fe  gcc/ada/libgnat/i-fortra.ads
! 9d36e47ecc297538054cf63ab6650b70  gcc/ada/libgnat/i-pacdec.adb
! 51c4b45da22314bd2f0002479a4fa22e  gcc/ada/libgnat/i-pacdec.ads
! d2949c68c0f22283489d746bb59c66f3  gcc/ada/libgnat/i-vxwoio.adb
! 7fca8428ae451f10f83037e71cb64466  gcc/ada/libgnat/i-vxwoio.ads
! 42c07022975d8e32578e5defb45c71ee  gcc/ada/libgnat/i-vxwork.ads
! 92497684ac1632d97ac0f47ee95ad713  gcc/ada/libgnat/i-vxwork__x86.ads
! 439f56d40ed3947c389cf034ddbeeab9  gcc/ada/libgnat/interfac.ads
! 546e9ceffb204c0ed5e5c18df483f20c  gcc/ada/libgnat/interfac__2020.ads
  c2121d458a346c0b9d83825c544b9516  gcc/ada/libgnat/ioexcept.ads
  a8eb2329946dd4041335c2c4cfd086af  gcc/ada/libgnat/libada.gpr
  9b37ec6e60899a7dadce7f301acc9eee  gcc/ada/libgnat/libgnat.gpr
  fbe275186bb4f8ccd7519acfa1499671  gcc/ada/libgnat/libgnat_common.gpr
  38f101ad4a6eba55ef694b1ab6315683  gcc/ada/libgnat/machcode.ads
! 0a158afd8bafd6281d22ed7e6171defc  gcc/ada/libgnat/memtrack.adb
! 2174308e6c2df19cc05e5becdf994ef2  gcc/ada/libgnat/s-addima.adb
! 8b8f3122f80bc2eaf0269f03a1bd2e0b  gcc/ada/libgnat/s-addima.ads
! 1b45838c1dbfe632f139e6df7f45ac22  gcc/ada/libgnat/s-addope.adb
! 98b85f0fa2d8401540e3b1bd0623086e  gcc/ada/libgnat/s-addope.ads
! e01095e6b3e3f3178ac2671b803d9457  gcc/ada/libgnat/s-aoinar.adb
! e30080370e64bfca7b617fd58faa9c9b  gcc/ada/libgnat/s-aoinar.ads
! 4919f052fc64cd9f16c921d35fa22fd3  gcc/ada/libgnat/s-aomoar.adb
! 2edecd32834df0d9890935b5c1659fe7  gcc/ada/libgnat/s-aomoar.ads
! fc6b73fcdb5b9da1e5b7518199f1103e  gcc/ada/libgnat/s-aotase.adb
! f11a3a53fb1f7e31bab62d19e219ea57  gcc/ada/libgnat/s-aotase.ads
! f644a94d827a2552c9c4d662cf44da6a  gcc/ada/libgnat/s-aridou.adb
! 2c708236fceec2a1689a9079fb1986f6  gcc/ada/libgnat/s-aridou.ads
! 2f0638c8a5bdccaed233bbca925b0c91  gcc/ada/libgnat/s-arit128.adb
! 3b22cdcacfb1762408a99bc405dc67b6  gcc/ada/libgnat/s-arit128.ads
! 6e468f7503a62af3a6fbf5bb2ee6c3e0  gcc/ada/libgnat/s-arit32.adb
! 9af9f041918db3910d366e5d87c40941  gcc/ada/libgnat/s-arit32.ads
! 22080cf5719984e98daf85de53bc9de3  gcc/ada/libgnat/s-arit64.adb
! 78a517e55285510dbe35216bf526e242  gcc/ada/libgnat/s-arit64.ads
! 765915187f19f59b11453570d81bea58  gcc/ada/libgnat/s-assert.adb
! 741c5f361c8de5c1236e9959bc4e2e6b  gcc/ada/libgnat/s-assert.ads
! d2a105a0cd118af92b7558e87149fe33  gcc/ada/libgnat/s-atacco.adb
! 581a49dffcd659427e43cb99aac63839  gcc/ada/libgnat/s-atacco.ads
! c445145f82787e87f8d315d92fc973df  gcc/ada/libgnat/s-atocou.adb
! a64151f2a7b04aec3cbbbb986404cee4  gcc/ada/libgnat/s-atocou.ads
! 6c0f6fc5353edb5b3104bacbed4f9bbe  gcc/ada/libgnat/s-atocou__builtin.adb
! 96cdbd1f9f92c94ae72f44aa4f33e164  gcc/ada/libgnat/s-atoope.ads
! 7ff53fd78728feab57d3d41ff3ebc9b6  gcc/ada/libgnat/s-atopex.adb
! 38a2912a03e3577755f4de5f7cf0a9e8  gcc/ada/libgnat/s-atopex.ads
! 239612681aed0a3d512f4e531c0bbb35  gcc/ada/libgnat/s-atopri.adb
! 033de8f4ff7dea40651b85c5d9e8bbbd  gcc/ada/libgnat/s-atopri.ads
! 946030693697d17660eff3ccd3ce3dfc  gcc/ada/libgnat/s-auxdec.adb
! 019296e9acb46a8561f19d7a8be11348  gcc/ada/libgnat/s-auxdec.ads
! e1d9d7f07b2dbc2e8a724f48d5dceb57  gcc/ada/libgnat/s-bignum.adb
! 9d58b9a33aa5ad4de87e3fbaa700107a  gcc/ada/libgnat/s-bignum.ads
! 1e3b41f3fd95839b7b1f1533d281fc51  gcc/ada/libgnat/s-bitfie.ads
! ceedf925f52ee1b9687a08c40a22ae84  gcc/ada/libgnat/s-bitops.adb
! 8cf11e177087e612927ec496266f08b4  gcc/ada/libgnat/s-bitops.ads
! 5a12db9e60332ef94691deeca3b5aa2f  gcc/ada/libgnat/s-bituti.adb
! e392ab2a6090fdb88cdd2e213315cc23  gcc/ada/libgnat/s-bituti.ads
! 9b77f0a8425dad4420f326a97e8e382c  gcc/ada/libgnat/s-boarop.ads
! dac99e261d4b68d50e0773ab047cdd7f  gcc/ada/libgnat/s-boustr.adb
! 10e1ca082ccda9a5bce407e627352845  gcc/ada/libgnat/s-boustr.ads
! dfe13b198ab87ecb73a40ef78f5ca1f1  gcc/ada/libgnat/s-bytswa.ads
! 98da53164ee314870908733abb9a293e  gcc/ada/libgnat/s-carsi8.adb
! 1a6c238955cfa0a9906e79be1021837a  gcc/ada/libgnat/s-carsi8.ads
! 47f9c93c9b7cd977adfb5951f7c4135e  gcc/ada/libgnat/s-carun8.adb
! 9b138b25195dc6b2f997165c262a54a8  gcc/ada/libgnat/s-carun8.ads
! c222e4408cee41b8a7dc2c3d9e29948d  gcc/ada/libgnat/s-casi128.adb
! ea35289d03f12ed6781db2168339def8  gcc/ada/libgnat/s-casi128.ads
! bccc292fd6edec6e87a756a629bde421  gcc/ada/libgnat/s-casi16.adb
! e076e29f06c17a09f5e794acff678383  gcc/ada/libgnat/s-casi16.ads
! 61f2833ae0cbec787b816a8669cacafe  gcc/ada/libgnat/s-casi32.adb
! d6e175eef2a71ff1839b5299aea59d86  gcc/ada/libgnat/s-casi32.ads
! 4a8b8e27464d51e6280dbcf44ac725fc  gcc/ada/libgnat/s-casi64.adb
! 1a2936cff0d47e5faf905164597575fe  gcc/ada/libgnat/s-casi64.ads
! 9f8f46c22fd5ff82adb4a342e123021c  gcc/ada/libgnat/s-casuti.adb
! e73b533b81695beb281559903a631678  gcc/ada/libgnat/s-casuti.ads
! c5e1987b5554eb581f4fe1ddeb509e80  gcc/ada/libgnat/s-caun128.adb
! d54f43a00db2dc430d0a7bebedd69678  gcc/ada/libgnat/s-caun128.ads
! e2cd562dd63a638dde7336511376f5a9  gcc/ada/libgnat/s-caun16.adb
! a4c5739dd1b7b62aa6d385030eb98113  gcc/ada/libgnat/s-caun16.ads
! 562b5b1b13db93d9373522115bffa41f  gcc/ada/libgnat/s-caun32.adb
! 96131e34c0afb874273ba842df848d07  gcc/ada/libgnat/s-caun32.ads
! c5a10e1efd8e753b785e7312dc2e9f18  gcc/ada/libgnat/s-caun64.adb
! f5cc33a556c5ff52de5097d0e4b7b1fe  gcc/ada/libgnat/s-caun64.ads
! fc27ade539a0db61d7d04b0d683ec54e  gcc/ada/libgnat/s-chepoo.ads
! 365c0f976ddd99b4e6f6b9664e282ed9  gcc/ada/libgnat/s-commun.adb
! 66776a9b5d2ba95f612a414aed77572a  gcc/ada/libgnat/s-commun.ads
! 2fa331473a41c7a4e80a735fd7b98dfd  gcc/ada/libgnat/s-conca2.adb
! 30c54ba6465bbb691134645608a50cea  gcc/ada/libgnat/s-conca2.ads
! 23c942999731411ae0c43ded66c6707e  gcc/ada/libgnat/s-conca3.adb
! 24982c59a9174a0228b7bd802f9a9829  gcc/ada/libgnat/s-conca3.ads
! 3d09aa0e57ca72683c2d1d56a91ea0df  gcc/ada/libgnat/s-conca4.adb
! 6f0e3e54d25ffe6ed7efd59ff54ea7ad  gcc/ada/libgnat/s-conca4.ads
! 1be76fe8cd44aa7dfd3334ef792f6ac2  gcc/ada/libgnat/s-conca5.adb
! 6d8743e1086cf26368aea1d244c756cf  gcc/ada/libgnat/s-conca5.ads
! 6c7b7c37bf02b0c4e5b7b66aab4dda7f  gcc/ada/libgnat/s-conca6.adb
! 5234efd599286bb5aa1990082aeac794  gcc/ada/libgnat/s-conca6.ads
! f9fa6d286f3fa9b353726bf229929197  gcc/ada/libgnat/s-conca7.adb
! 21728f09f3489074f2f74c9b627f65a8  gcc/ada/libgnat/s-conca7.ads
! 1193f2ca3d2e76cd90de15fbc0e3b3d9  gcc/ada/libgnat/s-conca8.adb
! 7dd4afefa6bf4afc5d8aa36c32278e46  gcc/ada/libgnat/s-conca8.ads
! b70da61606891c851313530b5cdc3841  gcc/ada/libgnat/s-conca9.adb
! ad65742c3ea8caa0dfee94a776d45e82  gcc/ada/libgnat/s-conca9.ads
! e622f383d4797a1005706284ce3d2445  gcc/ada/libgnat/s-crc32.adb
! 55ca1ae30c67c51d5e4d5a33b01ea507  gcc/ada/libgnat/s-crc32.ads
! 6f02f535f5e3c65f32b6616d7de82e72  gcc/ada/libgnat/s-crtl.ads
! 5c294ae7cbc4e82b55df32cb5122817a  gcc/ada/libgnat/s-dfmkio.ads
! 55907dafc81660826f4827641b9b0c61  gcc/ada/libgnat/s-dfmopr.ads
! df724da381838d41b07accba8d3ca2e2  gcc/ada/libgnat/s-dgmgop.ads
! e5b713a4e1c21cdeb31aa470fbe6727a  gcc/ada/libgnat/s-diflio.adb
! 238b648a09e9b698d95be2e47af6d2ca  gcc/ada/libgnat/s-diflio.ads
! 6bc582606cb0e74c46d5ccfde0a87fab  gcc/ada/libgnat/s-diflmk.ads
! 1228f641c413c853a82b12274754405e  gcc/ada/libgnat/s-digemk.ads
! 69e1df5c50d0ba3182b11bb6569f99f8  gcc/ada/libgnat/s-diinio.adb
! 5dc23bcf81b276aef2e7c19e518d889f  gcc/ada/libgnat/s-diinio.ads
! 2b26749f088c31371a83302e51bcb3c9  gcc/ada/libgnat/s-dilomk.ads
! 220a220014b49166c9ddba016b471494  gcc/ada/libgnat/s-dim.ads
! c685897d73b0dd7a07be37754050db74  gcc/ada/libgnat/s-dimkio.ads
! ef016676fbc8d81067cf184fe4ff1a39  gcc/ada/libgnat/s-dimmks.ads
! fdf5c85bf7c0e480e38be0304293b625  gcc/ada/libgnat/s-direio.adb
! eb4028f006fd0cb6382152163430904e  gcc/ada/libgnat/s-direio.ads
! 0148df01259eb33e2e7dd9ad7fb5dd22  gcc/ada/libgnat/s-dlmkio.ads
! 93a100a96ae52b55f265a687f3e8e3d9  gcc/ada/libgnat/s-dlmopr.ads
! 08cf155178bc09bfaa5759d83a788166  gcc/ada/libgnat/s-dmotpr.ads
! f8a52699d8feb20e69e6a2d502d88050  gcc/ada/libgnat/s-dorepr.adb
! 010d855fa885ef103c4842495cbebb35  gcc/ada/libgnat/s-dorepr__fma.adb
! 562128326ef8b16d96a03a2cf4b32819  gcc/ada/libgnat/s-dourea.adb
! afbaf868483fc31869ca137dc47963d0  gcc/ada/libgnat/s-dourea.ads
! abcf07c86e5502fd604a8e89dc574f20  gcc/ada/libgnat/s-dsaser.ads
! 156d66ac9949672b4d5ddf440901c06a  gcc/ada/libgnat/s-dwalin.adb
! 134dea009531533ddbad4d6cd39c21d1  gcc/ada/libgnat/s-dwalin.ads
! 5c9acc69a9df3b1606472052097bbe5b  gcc/ada/libgnat/s-elaall.adb
! 6620a7cea9f9d8683e5b2dfc33eec330  gcc/ada/libgnat/s-elaall.ads
! 278024961438e6626cd72010b5ccecd7  gcc/ada/libgnat/s-excdeb.adb
! 130594efbdd7ce203b3e5ac14209c308  gcc/ada/libgnat/s-excdeb.ads
! 45691213fc65f6b4acd82fe127aece63  gcc/ada/libgnat/s-except.adb
! 443e010a583affa3d77492831331d676  gcc/ada/libgnat/s-except.ads
! 0a175e1a9f88b02d37436b60a8c1dd77  gcc/ada/libgnat/s-excmac__arm.adb
! 5bb2c3f7ba4915a1a7b34c48d714b862  gcc/ada/libgnat/s-excmac__arm.ads
! 8e10c05c089e5833bd7de16a32fcb437  gcc/ada/libgnat/s-excmac__gcc.adb
! ce7749129b8314630709fdeed270e372  gcc/ada/libgnat/s-excmac__gcc.ads
! 2e3ea1b2d91b00bab88782c5b1f16da1  gcc/ada/libgnat/s-exctab.adb
! ae0b1b4e0ff3c5fc4260bd7d31ac2c37  gcc/ada/libgnat/s-exctab.ads
! 6adfd1904947437082974d72e6f6816f  gcc/ada/libgnat/s-exctra.adb
! e553241f6bc13417881628eab19865bf  gcc/ada/libgnat/s-exctra.ads
! 517381593dbf32375d54f7a5683e9850  gcc/ada/libgnat/s-exnflt.ads
! 7ecc29826b6875ec0dd5bdc155ed6a60  gcc/ada/libgnat/s-exnint.adb
! e2bef9e959fe7867fa7072fbf1cf02b6  gcc/ada/libgnat/s-exnint.ads
! e61341e30a60404bbac661300fd0119e  gcc/ada/libgnat/s-exnlfl.ads
! 8651f2b6fbb4def8f18a829af213fa6b  gcc/ada/libgnat/s-exnllf.adb
! 8d9889ea7f37fcf1bce1ecc5a7a8bf78  gcc/ada/libgnat/s-exnllf.ads
! 40005582305eab354d07b66cedafc34f  gcc/ada/libgnat/s-exnlli.adb
! 7577b32abaf85a0435ab25317df46c14  gcc/ada/libgnat/s-exnlli.ads
! 550c32a8a310c850b4fc1a45cf0e0bc3  gcc/ada/libgnat/s-exnllli.ads
! a39f656b5aa19dab9db1e78147fbe2a6  gcc/ada/libgnat/s-expint.adb
! 7084fdc494b444b53cd8582f8d757cb7  gcc/ada/libgnat/s-expint.ads
! ff04bdf220adfd8dff592d49f67e3120  gcc/ada/libgnat/s-explli.adb
! 1070b8be4b6eedf92e32b6b027705f88  gcc/ada/libgnat/s-explli.ads
! ece864b1e6a6c992b4dd208de1866beb  gcc/ada/libgnat/s-expllli.ads
! 16e99bd32924c07eaa4560e0e5d6d719  gcc/ada/libgnat/s-explllu.ads
! a41e2289ab3a66948d79d9061a3634e7  gcc/ada/libgnat/s-expllu.adb
! 80d807da414946b98007d7451ee3b8b8  gcc/ada/libgnat/s-expllu.ads
! 48cc9fb8213a4977f1474ec5b1665180  gcc/ada/libgnat/s-expmod.adb
! 2a895b6591092f8e28905e63c7717cfc  gcc/ada/libgnat/s-expmod.ads
! ade1881944ac7f2b6ffca03d72ed3290  gcc/ada/libgnat/s-exponn.adb
! f6fbf37c7634d754869b2b5a1a9bf2f5  gcc/ada/libgnat/s-exponn.ads
! ec1f7e5d78523eaa93fd326cdb72708e  gcc/ada/libgnat/s-exponr.adb
! af2d06e4f708e75d3c4fcf17b98c8530  gcc/ada/libgnat/s-exponr.ads
! c123040f443a6b00531866f5114c6c26  gcc/ada/libgnat/s-expont.adb
! e99b5fd0de20b514945fa862fdfea554  gcc/ada/libgnat/s-expont.ads
! 111ec256fa8c1c0e6ea6f0d97b1f22af  gcc/ada/libgnat/s-exponu.adb
! c30d5a68db95762d4e80b1d24f86848b  gcc/ada/libgnat/s-exponu.ads
! d917a0d634a6012c901a48d24c37c360  gcc/ada/libgnat/s-expuns.adb
! 3f029bd5abdc3234db1cb84602ea32a5  gcc/ada/libgnat/s-expuns.ads
! 0549254c13f17084773858b3c02d6f64  gcc/ada/libgnat/s-fatflt.ads
! febcb11be056afbe9d96bc8758f6e1a3  gcc/ada/libgnat/s-fatgen.adb
! e0d33d1b9a2ff42791fd0efcdcfc382c  gcc/ada/libgnat/s-fatgen.ads
! f54388a7dc3bbec017fa9a3bd79a592a  gcc/ada/libgnat/s-fatlfl.ads
! 768983755441c7b11d9a94bfc7d37856  gcc/ada/libgnat/s-fatllf.ads
! aeabfe8f953aa1565000d2af705c6eaa  gcc/ada/libgnat/s-ficobl.ads
! 28aede66d42d01b56b345c1184f64189  gcc/ada/libgnat/s-filatt.ads
! dd9118137769882d3c05f01557ed8273  gcc/ada/libgnat/s-fileio.adb
! 10b10841d66a55eb3c0c6a77465b9abc  gcc/ada/libgnat/s-fileio.ads
! 1cf5dda37fb00d046fe26c097f2f81ed  gcc/ada/libgnat/s-finmas.adb
! cf237e4155a13f45e0a132e1104fbe8b  gcc/ada/libgnat/s-finmas.ads
! a7f54dd2efa49fddbcfbae82bfc37aad  gcc/ada/libgnat/s-finroo.adb
! e264a749d5f58184d4c02393bc45f8eb  gcc/ada/libgnat/s-finroo.ads
! b8721219d270f18c717fbb452be034bf  gcc/ada/libgnat/s-flocon.adb
! 13d1e70ea243cb5f961c21853865dadf  gcc/ada/libgnat/s-flocon.ads
! 2513a31797c96d454e42c34eb6b02acf  gcc/ada/libgnat/s-flocon__none.adb
! 2e08fc5fdf88074725325b4fdd49fa1f  gcc/ada/libgnat/s-fode128.ads
! ccbc46e8e262607a0a1fe68976d54ef9  gcc/ada/libgnat/s-fode32.ads
! 16f0719e307936ea362049cd724735aa  gcc/ada/libgnat/s-fode64.ads
! 3e0db6f544e84fdebf8c7a1523d3e499  gcc/ada/libgnat/s-fofi128.ads
! bd47c98ccb741df41a26ea9e1a9235d5  gcc/ada/libgnat/s-fofi32.ads
! 149c344d1e664aff6cab8950566c4f8c  gcc/ada/libgnat/s-fofi64.ads
! 95f8930692850479ec81c2c72ae6a052  gcc/ada/libgnat/s-fore_d.adb
! d7bc02e237febb6118ce212e6e0ee23e  gcc/ada/libgnat/s-fore_d.ads
! 460f33d31d64ffe64edc24ffb47f0a0e  gcc/ada/libgnat/s-fore_f.adb
! 44748ce624e29e5425d8c6c6fe7a3807  gcc/ada/libgnat/s-fore_f.ads
! acc40e54527ba0b5dec1187603aeb881  gcc/ada/libgnat/s-forrea.adb
! 00c4d38d8cf6d623d42e6fdb476beafd  gcc/ada/libgnat/s-forrea.ads
! 60a5822d010aee4e55e55d597eda3e26  gcc/ada/libgnat/s-gearop.adb
! fe4f5adf8fad4353b6a48ba66fd7d0d2  gcc/ada/libgnat/s-gearop.ads
! d1bbd26208e7316042f076718df540fb  gcc/ada/libgnat/s-genbig.adb
! 4037a3a3aa3505e1b4a7dd2ded73c413  gcc/ada/libgnat/s-genbig.ads
! 0859dbf6104436779a155237bc09d5df  gcc/ada/libgnat/s-geveop.adb
! 87437b4dbf7aeaa86d578cdd39b476ed  gcc/ada/libgnat/s-geveop.ads
! 465d9aa38ade0256e60377c55e274100  gcc/ada/libgnat/s-gloloc.adb
! f6a2449c8c188805af2c186523eed0a9  gcc/ada/libgnat/s-gloloc.ads
! a654d781e268c27ae4ff5196393bbedf  gcc/ada/libgnat/s-gloloc__mingw.adb
! 9e94a1bbb0d0bdb5295341836b726204  gcc/ada/libgnat/s-htable.adb
! 52e28927311d91b3826914b6c3f626d7  gcc/ada/libgnat/s-htable.ads
! 5e83d02c725df7d26c18d5399ab73eb9  gcc/ada/libgnat/s-imageb.adb
! 33293ebd90a2387c03c409b59aa1f7f8  gcc/ada/libgnat/s-imageb.ads
! 4110b1a9ef9a19a4ddc87003698bb8f6  gcc/ada/libgnat/s-imaged.adb
! c3c0e093f037a75356697348fdb2f224  gcc/ada/libgnat/s-imaged.ads
! c99ed2ff1113e81a82f7c585148317bc  gcc/ada/libgnat/s-imagef.adb
! 4e2e8c2c2bb72df75712251c5bd11a0f  gcc/ada/libgnat/s-imagef.ads
! 78502c3c55c8681389f363f0f99d4aa6  gcc/ada/libgnat/s-imagei.adb
! 82528e4e8693f8fa5e7e2c1cbd225920  gcc/ada/libgnat/s-imagei.ads
! c248783472918e3780a50412f5f256d6  gcc/ada/libgnat/s-imagen.adb
! a1226b37008caa3aef0a729ec18308d4  gcc/ada/libgnat/s-imagen.ads
! 1f8e880e1a10c7b136b01f5ae41357fe  gcc/ada/libgnat/s-imager.adb
! 1fa9901b18b34c62a1b08a6c76a6ee4f  gcc/ada/libgnat/s-imager.ads
! ecd90c56af19cb124f12c9d9e4e18967  gcc/ada/libgnat/s-imageu.adb
! 59864f7fe23c0da550e7b6e4f1557c55  gcc/ada/libgnat/s-imageu.ads
! d5e39df4eb269af4ee9ea9773192e4b5  gcc/ada/libgnat/s-imagew.adb
! 3ce7635c980a09c9723ceeb5ae9432ec  gcc/ada/libgnat/s-imagew.ads
! c29cb2d381d661d8141c09b12689d951  gcc/ada/libgnat/s-imde128.ads
! ad2ab3c0d3c9f22666572ef47a5eedf0  gcc/ada/libgnat/s-imde32.ads
! 6068e3e1fbf0d35e5647939d33dbc2f5  gcc/ada/libgnat/s-imde64.ads
! a972a910488e2c33c1602719b63cd58c  gcc/ada/libgnat/s-imen16.ads
! f02864c77dbb7b28a2fbb0d483178e6c  gcc/ada/libgnat/s-imen32.ads
! 244b868671fc200131658341c4174568  gcc/ada/libgnat/s-imenu8.ads
! 88a9b6716551f9e8dd19fcae939b814a  gcc/ada/libgnat/s-imfi128.ads
! f107d5815fe25d8604adbccbbea7b03d  gcc/ada/libgnat/s-imfi32.ads
! a74442247a2621beb33946ccba74d7d9  gcc/ada/libgnat/s-imfi64.ads
! 6b42a36c89b29bc2bdcb29d5da163a4a  gcc/ada/libgnat/s-imgbiu.adb
! 5f4635f97ab88a57d2602dcddc9f9215  gcc/ada/libgnat/s-imgbiu.ads
! 06988c4bd910bc35e5b4055e50c440e5  gcc/ada/libgnat/s-imgboo.adb
! 690d8c26517b687f116eb53b971e6e2d  gcc/ada/libgnat/s-imgboo.ads
! ef8811ee2803c609c0da7b62e54f53a3  gcc/ada/libgnat/s-imgcha.adb
! b92c7a07205dda8fd7b30ea397f8403c  gcc/ada/libgnat/s-imgcha.ads
! 29aec41b10f1fb8d0eed6fe7e33e5ac2  gcc/ada/libgnat/s-imgflt.ads
! 108c0683813c2f60af26242d78f8909f  gcc/ada/libgnat/s-imgint.adb
! 9dbddb8d00ab9f9e2273d73c90757883  gcc/ada/libgnat/s-imgint.ads
! b437ec67a9fd5202de71d2414bec859b  gcc/ada/libgnat/s-imglfl.ads
! 3bd8261221c489e03d8f434974d3f63d  gcc/ada/libgnat/s-imgllb.adb
! d2145fc300ab3e6ddf67990e714b97d2  gcc/ada/libgnat/s-imgllb.ads
! 3150913dfaa00cbde3eedbba2295d575  gcc/ada/libgnat/s-imgllf.ads
! 7d02dee0b472191be4d435ee9c954c79  gcc/ada/libgnat/s-imglli.adb
! abd060c82e0850dd3050e87767452fb7  gcc/ada/libgnat/s-imglli.ads
! a369b5d12f6cc230c163730f09e748d3  gcc/ada/libgnat/s-imglllb.ads
! 6c797c6c8bc268815582089d52fc489d  gcc/ada/libgnat/s-imgllli.ads
! 8fe762070c5c8cb69041cc3c2fe84581  gcc/ada/libgnat/s-imglllu.ads
! 4e9396d71460457c05de8af8ae02035d  gcc/ada/libgnat/s-imglllw.ads
! 261a1bf3e5180a581363f4799aeb42f8  gcc/ada/libgnat/s-imgllu.adb
! d1623b79688968d51018f8f35bd5a3bb  gcc/ada/libgnat/s-imgllu.ads
! 159091037eca39b42d0154e06cce9bd0  gcc/ada/libgnat/s-imgllw.adb
! 68677a345d3bb6eec5995570b42a8c56  gcc/ada/libgnat/s-imgllw.ads
! 0afb72551507662093d8e541d99174f0  gcc/ada/libgnat/s-imgrea.adb
! dcd672a593149115b123305e2f12617c  gcc/ada/libgnat/s-imgrea.ads
! 5879b6d390f775a03c9eebc7728de6e5  gcc/ada/libgnat/s-imguns.adb
! 7313bc0afa67e7f65053478152252695  gcc/ada/libgnat/s-imguns.ads
! c5eff64e853fa1c0658819a1c5c06e19  gcc/ada/libgnat/s-imguti.adb
! b12acab510b0519b60d02b61c197500c  gcc/ada/libgnat/s-imguti.ads
! dc5202843e9952c7e0be0d1902c0154d  gcc/ada/libgnat/s-imgwch.adb
! 443107d1f5c32bd5827de75562b3c9d6  gcc/ada/libgnat/s-imgwch.ads
! d92d26cf0099d069bb9817558cdf6544  gcc/ada/libgnat/s-imgwiu.adb
! 512804175db551aa8ed04e9a30723d38  gcc/ada/libgnat/s-imgwiu.ads
! b5d301c90b3504735386b32652bbb5f4  gcc/ada/libgnat/s-io.adb
! f8771a912fd8892caf16e1acc41473bd  gcc/ada/libgnat/s-io.ads
! 21cf808f6d59ece94765bc2b53ef0cdb  gcc/ada/libgnat/s-llflex.ads
! 7b043b9e23e9e9b94acdd5b54846f9c2  gcc/ada/libgnat/s-maccod.ads
! cd0945e3f1b8b5672631c0d4f6fea742  gcc/ada/libgnat/s-mantis.adb
! 9c3ba55f2b23d652721bb8756c912bc1  gcc/ada/libgnat/s-mantis.ads
! d47f1d82c900ab2913ffa04628cf5251  gcc/ada/libgnat/s-mastop.adb
! 75d2df14266f386696c30ab6e6c5c557  gcc/ada/libgnat/s-mastop.ads
! 54a372db7e5a8b4561609aa38793a47c  gcc/ada/libgnat/s-memcop.ads
! 841d9daf473d16c4f06ce54aefb7232f  gcc/ada/libgnat/s-memory.adb
! 2fff590daba080fa8be51504c48a5f2a  gcc/ada/libgnat/s-memory.ads
! b51b34970421d9f1bc7dee44a342a576  gcc/ada/libgnat/s-mmap.adb
! 1777c748d8c461ecaa1ef461f8345bbd  gcc/ada/libgnat/s-mmap.ads
! 0e0b79b5f307fb95f42a24cea02d3c14  gcc/ada/libgnat/s-mmauni__long.ads
! a6256c2df80fd2b5d1dc6a792dabd781  gcc/ada/libgnat/s-mmosin__mingw.adb
! 1a87431c898ea8e9099ad0c9875dccdd  gcc/ada/libgnat/s-mmosin__mingw.ads
! d34a05e84678b2e61e578050f6c4e25e  gcc/ada/libgnat/s-mmosin__unix.adb
! 49396bb81cafe1be39cb90f6102a3bd7  gcc/ada/libgnat/s-mmosin__unix.ads
! e23a660cce72f1ca870962e27f1cc8ce  gcc/ada/libgnat/s-multip.adb
  c4045ad22005510940d70e1a445db431  gcc/ada/libgnat/s-multip.ads
! be4a11224b3a6c7ece4dbb755955474e  gcc/ada/libgnat/s-objrea.adb
! cb8ebba2259aca7ad7cb6ef39a8d04ee  gcc/ada/libgnat/s-objrea.ads
! 93cdbb5def6abc59034520d01371eb0d  gcc/ada/libgnat/s-optide.adb
! 009373f20d350b875325800ed72a7199  gcc/ada/libgnat/s-os_lib.adb
! 894375f24aa8ed568fd62fdb06e38328  gcc/ada/libgnat/s-os_lib.ads
! 565048ba7f89a293c8d03895f50eb4e2  gcc/ada/libgnat/s-osprim.ads
! 902a7e8d7c5c55fb5298d73e2ed62ef1  gcc/ada/libgnat/s-osprim__darwin.adb
! c8d26ca8f8c3ebed41ef1bbac1c7bdd0  gcc/ada/libgnat/s-osprim__lynxos.ads
! 18fc225a59cf0084ab2cee392e8a52d3  gcc/ada/libgnat/s-osprim__mingw.adb
! af33580cc3d4124827c638efd4417f0d  gcc/ada/libgnat/s-osprim__posix.adb
! 2cbdafa979adb679e722f7eb6798e96d  gcc/ada/libgnat/s-osprim__posix2008.adb
! c9df7620b102cf4c4f7b4955f1ccdca7  gcc/ada/libgnat/s-osprim__rtems.adb
! ef68aeff25ac1b0be0625eb1707c221a  gcc/ada/libgnat/s-osprim__solaris.adb
! d70661d7a483e7515218c271f3c302b6  gcc/ada/libgnat/s-osprim__unix.adb
! 17ba3fb02c3e07ebfc5142cdf9e81f9c  gcc/ada/libgnat/s-osprim__x32.adb
! c929653a7985f6887079a2b196a034e2  gcc/ada/libgnat/s-pack03.adb
! 24767752c49850e1b2c395a9eb000be5  gcc/ada/libgnat/s-pack03.ads
! a654befcf9c9b379bc90e614f637dee4  gcc/ada/libgnat/s-pack05.adb
! a2da7727257bf963524a63ab78976997  gcc/ada/libgnat/s-pack05.ads
! 3a0dd2fdd1872b5286e19bd57809a432  gcc/ada/libgnat/s-pack06.adb
! ffa0fea9fd605311bb0aea0f80a519ac  gcc/ada/libgnat/s-pack06.ads
! 3feb1b0598be0c3187ef0b8f50795a6b  gcc/ada/libgnat/s-pack07.adb
! 51730d82cbd3c1e08d05c80686eeda59  gcc/ada/libgnat/s-pack07.ads
! 517bf94bf24e5dc9b2754f3fac3a5b56  gcc/ada/libgnat/s-pack09.adb
! d60ffd8d277b29e8a5f91a09761f07cb  gcc/ada/libgnat/s-pack09.ads
! 5c7598c226a0ac5fb6a8dad91a98a420  gcc/ada/libgnat/s-pack10.adb
! d027de45067363d287fa5068b2b30cc8  gcc/ada/libgnat/s-pack10.ads
! bdfaeed955e084da93318b3d4b8f02cd  gcc/ada/libgnat/s-pack100.adb
! 3b0f2e83f906efcba50293cd0c36c1a0  gcc/ada/libgnat/s-pack100.ads
! 7eccd59c3097a7c951c8f855d44f9c0b  gcc/ada/libgnat/s-pack101.adb
! bbc53522905bc241cfa553d874ffeb93  gcc/ada/libgnat/s-pack101.ads
! 6e887331971365f7fe5a596bafc44516  gcc/ada/libgnat/s-pack102.adb
! 520af8519db21919537980953e6870e2  gcc/ada/libgnat/s-pack102.ads
! a68a9d305075c9bafa57d866258b4d79  gcc/ada/libgnat/s-pack103.adb
! 2a839f64ae180a0a105b0bd1d0095dce  gcc/ada/libgnat/s-pack103.ads
! 1d4d9a7b71fb95a59c26c03ceb14597f  gcc/ada/libgnat/s-pack104.adb
! ec2946f6d7affc435fe7336a43984da1  gcc/ada/libgnat/s-pack104.ads
! 49a870c761119ba8d43c9e17fa6d259e  gcc/ada/libgnat/s-pack105.adb
! a4051104163992869915ffb3252cbe4b  gcc/ada/libgnat/s-pack105.ads
! 960f2f190aa625ecc9e95a7dabf58bea  gcc/ada/libgnat/s-pack106.adb
! 607ffc4d5edac6af97d63463802c4442  gcc/ada/libgnat/s-pack106.ads
! ac08941bfeab4fd34cd9b26925987a9f  gcc/ada/libgnat/s-pack107.adb
! 6c85d94e937a28ddf008b57b82c1b337  gcc/ada/libgnat/s-pack107.ads
! d20b0185de58772f19938df75b5158ff  gcc/ada/libgnat/s-pack108.adb
! 0f74abaf3549afcfbf5bb9afa21c5edb  gcc/ada/libgnat/s-pack108.ads
! abd90d374f34253ca9a877f857304ee8  gcc/ada/libgnat/s-pack109.adb
! e673447cadd54db671d70064645808e3  gcc/ada/libgnat/s-pack109.ads
! 5e76a3588919d4d21b410d5ef0684394  gcc/ada/libgnat/s-pack11.adb
! 15e38fd6d50cadfe1b16dc44c0c156dc  gcc/ada/libgnat/s-pack11.ads
! 42a26947a9b1cf4d35a34fbb58ab3e23  gcc/ada/libgnat/s-pack110.adb
! 164e3f82f39b6cff5782af3068ed8cce  gcc/ada/libgnat/s-pack110.ads
! cb05df0aa2791e8e196d77f5f02403d9  gcc/ada/libgnat/s-pack111.adb
! 94c657031e508aa96a09ad29f4688641  gcc/ada/libgnat/s-pack111.ads
! 79c4b722d80f8480b72c5e4ae0b86179  gcc/ada/libgnat/s-pack112.adb
! dc068faf52bc83e2dcaf26f494918b34  gcc/ada/libgnat/s-pack112.ads
! bc8ce398341dcc6e563a4fc83b9de8d6  gcc/ada/libgnat/s-pack113.adb
! 707af8a3f1930bda64290de0f4cd19cf  gcc/ada/libgnat/s-pack113.ads
! d7993a21ad356a036791c584a89d08c3  gcc/ada/libgnat/s-pack114.adb
! ebdf88dfce6d6304965791554f478ae2  gcc/ada/libgnat/s-pack114.ads
! 670b442d8055dd6d38481a9fc24bce60  gcc/ada/libgnat/s-pack115.adb
! 3fa7d99cb011d3a340e99b5bbcac1763  gcc/ada/libgnat/s-pack115.ads
! 776d20a878538ec04ce8b12b0215a718  gcc/ada/libgnat/s-pack116.adb
! b630ac45543b20e69044eab19d0091d6  gcc/ada/libgnat/s-pack116.ads
! 5db3bca2b4e995071cf5c7d6b096165e  gcc/ada/libgnat/s-pack117.adb
! 57801edcdf6f86671193a92c8c9baa52  gcc/ada/libgnat/s-pack117.ads
! 3b8d15932303b2f6feb2a4fbd52e883c  gcc/ada/libgnat/s-pack118.adb
! d2160b718988a1fd83874e203f7ff652  gcc/ada/libgnat/s-pack118.ads
! 4724ab3bdfa917da7090d28929558f53  gcc/ada/libgnat/s-pack119.adb
! cca7294363cd61354c9d85a534621400  gcc/ada/libgnat/s-pack119.ads
! 2eb8fbe41b435a2b0d86928da9b8ab92  gcc/ada/libgnat/s-pack12.adb
! 14c1b10eab575acc3ea07de5cc381ccd  gcc/ada/libgnat/s-pack12.ads
! 09594bcd5c0cc941f50012c0698ca13b  gcc/ada/libgnat/s-pack120.adb
! a953490642f0507a32ac826e2ffe4c7d  gcc/ada/libgnat/s-pack120.ads
! 8c10286b95a3bc57af96e5a7ec76aa22  gcc/ada/libgnat/s-pack121.adb
! 1cb1e19a232c26b8cabcc26b13eed8ee  gcc/ada/libgnat/s-pack121.ads
! a62757574eeb1f8d05c8bfa635343ef4  gcc/ada/libgnat/s-pack122.adb
! a815f124d0cc54e8b96e2b0ae9acf9ad  gcc/ada/libgnat/s-pack122.ads
! b76b76b8617c025c0684db28bb681ed9  gcc/ada/libgnat/s-pack123.adb
! 44104e6294ed18289f97a24274d8e648  gcc/ada/libgnat/s-pack123.ads
! 4f0c12cdb4ab547b7ccdedfab34b779a  gcc/ada/libgnat/s-pack124.adb
! 9bafc93707d4535ddef1f63d1708b19c  gcc/ada/libgnat/s-pack124.ads
! 8e3baa4c12b05a13772c43c1d258fa3e  gcc/ada/libgnat/s-pack125.adb
! 5ea21bce575acda75a708f5abe7c3a27  gcc/ada/libgnat/s-pack125.ads
! c25140e8f77c0f855908870ab81c7cac  gcc/ada/libgnat/s-pack126.adb
! 829f04fd85a4c22b3f52fdba2067d588  gcc/ada/libgnat/s-pack126.ads
! 0500414f7f3a52f0efda52112cd9f71c  gcc/ada/libgnat/s-pack127.adb
! f8bdeea65d802f94cb765116b5aac321  gcc/ada/libgnat/s-pack127.ads
! 4ff41f79ab840ea8e7cf0385aa649e07  gcc/ada/libgnat/s-pack13.adb
! 4606cac37b4b6c8247d4c76860e26554  gcc/ada/libgnat/s-pack13.ads
! 01afe2aec63ef94d1b57698618b8fd5b  gcc/ada/libgnat/s-pack14.adb
! 59a3b0ed5e5345f8231d782af55a3881  gcc/ada/libgnat/s-pack14.ads
! 09ee1134d14d8821c9978ecc8e1e061b  gcc/ada/libgnat/s-pack15.adb
! 9534714ed0d434a2eebafcdfb8755eda  gcc/ada/libgnat/s-pack15.ads
! d1b2af5b105dc65973a80909e985eca7  gcc/ada/libgnat/s-pack17.adb
! 38fdafc17123651308241a991a833695  gcc/ada/libgnat/s-pack17.ads
! dcaf67ae6a016848386d09465a380beb  gcc/ada/libgnat/s-pack18.adb
! 9d9b4dd7f0db6c24b07335000d9c571d  gcc/ada/libgnat/s-pack18.ads
! 2d438053b67424ae377ce76c9b143355  gcc/ada/libgnat/s-pack19.adb
! 01d2ff49d9c4b73bf580c5b1f7f56efe  gcc/ada/libgnat/s-pack19.ads
! e4ecfda69f8d3c6e52128cd3a7e48533  gcc/ada/libgnat/s-pack20.adb
! d22bdb8753cbf5a77a0a455803a73f13  gcc/ada/libgnat/s-pack20.ads
! 6168a0f657ce2e05cfa4740aeda8f22c  gcc/ada/libgnat/s-pack21.adb
! f1cc98bce98ce25052089d8e9de03536  gcc/ada/libgnat/s-pack21.ads
! 25104519cefca2430da2c4a32771a060  gcc/ada/libgnat/s-pack22.adb
! 048064366efe0e06eb96b504aa5dd970  gcc/ada/libgnat/s-pack22.ads
! 09a8a0074ada35cfaeaf050d4ada694b  gcc/ada/libgnat/s-pack23.adb
! 83f9611ee8b50ca86a1e95496b9f8691  gcc/ada/libgnat/s-pack23.ads
! bf4a50306c88b4b83a93cf8d5cd90b47  gcc/ada/libgnat/s-pack24.adb
! 4348d191c8d32beab66ead0492ee813f  gcc/ada/libgnat/s-pack24.ads
! 96358278498d7a2f8c33e0b0b2aba5cc  gcc/ada/libgnat/s-pack25.adb
! 1968221adbb59a6fa2367b7d798408a4  gcc/ada/libgnat/s-pack25.ads
! 7539cc1f7f81b373ebbd56437afd6afb  gcc/ada/libgnat/s-pack26.adb
! 690304e63af4e639681922af6fa88b14  gcc/ada/libgnat/s-pack26.ads
! 5e68d3874102c24f39f2094300887afd  gcc/ada/libgnat/s-pack27.adb
! c1f41f41dfbd1b4d53e6c9162c0a04b6  gcc/ada/libgnat/s-pack27.ads
! 11663af6bdbc8cb3522afdcadc8fd022  gcc/ada/libgnat/s-pack28.adb
! 6602603b3da779ba2e77d568c47b205e  gcc/ada/libgnat/s-pack28.ads
! ef165de17e21f501d95c0479cdd18c97  gcc/ada/libgnat/s-pack29.adb
! 710a1c83f867d10b204f243026b4578d  gcc/ada/libgnat/s-pack29.ads
! 530c6338be341e7805241ebe502df3ef  gcc/ada/libgnat/s-pack30.adb
! af9d6aca958b7e3d710e395704045342  gcc/ada/libgnat/s-pack30.ads
! 50b2dbb758c45677e96bf8cd96b60e33  gcc/ada/libgnat/s-pack31.adb
! 5cedd806bff937f18b56c0f45bbf9492  gcc/ada/libgnat/s-pack31.ads
! 51b729ba7d77937904c832e9db659fe5  gcc/ada/libgnat/s-pack33.adb
! 4dccc994e3f0c808cc6605602b571c02  gcc/ada/libgnat/s-pack33.ads
! f4ad8579eeca414b5204111f9e253c8b  gcc/ada/libgnat/s-pack34.adb
! 7efffc549fa1f22c083c51b5e5656992  gcc/ada/libgnat/s-pack34.ads
! 39a655a1d6e13770aaf2afa400c244cf  gcc/ada/libgnat/s-pack35.adb
! d4e53474ae903536c5db0b2809c3dfa6  gcc/ada/libgnat/s-pack35.ads
! fe3b5ea39982a2e1573adc6db0566d11  gcc/ada/libgnat/s-pack36.adb
! 3f6f2584666a745dc317b108953e0bba  gcc/ada/libgnat/s-pack36.ads
! 47702e7e22cd3146f1ad804362d30fea  gcc/ada/libgnat/s-pack37.adb
! a688c3719b2743808cd9dcc52a79f8c5  gcc/ada/libgnat/s-pack37.ads
! 3a6afab8eefc58cf3d349fec510a46c4  gcc/ada/libgnat/s-pack38.adb
! f57d2dce1419a14dcd4515f7b27d2aa6  gcc/ada/libgnat/s-pack38.ads
! 622b9b9fdbe9d45965f24c6152921bd3  gcc/ada/libgnat/s-pack39.adb
! 37a368a690fb3547532225b890b4a927  gcc/ada/libgnat/s-pack39.ads
! 6faae2c8d051c8b4a7de6cd00808ed21  gcc/ada/libgnat/s-pack40.adb
! f3cba532260f604eeeedad1968a75728  gcc/ada/libgnat/s-pack40.ads
! eb45a463b83ff96519a6bf91054f08d8  gcc/ada/libgnat/s-pack41.adb
! 7f12d0f969e685c8a0058f3896d5f702  gcc/ada/libgnat/s-pack41.ads
! 8febef73691228f646f2b45860fc5ffc  gcc/ada/libgnat/s-pack42.adb
! fc336b9a7ecd1a73c5679be2c88303d0  gcc/ada/libgnat/s-pack42.ads
! dfe3cadd056026f541e22166ae4e169f  gcc/ada/libgnat/s-pack43.adb
! 6c53c5bfb2cf3e7f4cbce046ff1b5cff  gcc/ada/libgnat/s-pack43.ads
! 5a5024da581b0fc8f330f8a1a11a2e2e  gcc/ada/libgnat/s-pack44.adb
! f9a0fcf7fb0954af664219ed4f112a45  gcc/ada/libgnat/s-pack44.ads
! 932c45d65fe174b72b70c5227e7b1bd5  gcc/ada/libgnat/s-pack45.adb
! dcb6ab1ee1d5aab1e29e02ba9ea828dd  gcc/ada/libgnat/s-pack45.ads
! b72513013eac20da94c91520835d339f  gcc/ada/libgnat/s-pack46.adb
! 1ef00879b93406e74353bebba43501e2  gcc/ada/libgnat/s-pack46.ads
! d78dd09dfa36262e9fd07382fbee8f1c  gcc/ada/libgnat/s-pack47.adb
! 2bd9ffa22a6b8e8f1cb5396495ab73dc  gcc/ada/libgnat/s-pack47.ads
! 01bbeaa392bbfd35e472ea2626e938f3  gcc/ada/libgnat/s-pack48.adb
! 728347e774348186c247e944817fb8ff  gcc/ada/libgnat/s-pack48.ads
! 60b9026d97c6504539e7b4d1d8db4e1a  gcc/ada/libgnat/s-pack49.adb
! 5630d4cdb96ecf40a3e60beb35971e4e  gcc/ada/libgnat/s-pack49.ads
! aa9e337cb479d8257e14bd017488fb5c  gcc/ada/libgnat/s-pack50.adb
! a523a15ee2a95ad9cc115055db3b62c4  gcc/ada/libgnat/s-pack50.ads
! 34437dd5dfeb279ba7f6c3433125995b  gcc/ada/libgnat/s-pack51.adb
! c082e44423c5125ffbdfe4f120ec4434  gcc/ada/libgnat/s-pack51.ads
! 4f897ede377c05f241ccc363b3aff2ee  gcc/ada/libgnat/s-pack52.adb
! 837f4c8b92f073d80bf6377fb33b99a0  gcc/ada/libgnat/s-pack52.ads
! 0d6beb18fa509f81a33489dd2a43a7d1  gcc/ada/libgnat/s-pack53.adb
! 31b112db3f81e6bb57a97602243fd776  gcc/ada/libgnat/s-pack53.ads
! 6ad0ead9deaf4d1339b7f9c42681f2d6  gcc/ada/libgnat/s-pack54.adb
! dbf413c5f4a2e30ff0afb49ab1ba087e  gcc/ada/libgnat/s-pack54.ads
! fe21fdf4867c0a550c8c306d17ea54aa  gcc/ada/libgnat/s-pack55.adb
! b1b7a4fb3f500d77effe65e88c9d7efe  gcc/ada/libgnat/s-pack55.ads
! ed68c009da9d36de064999633d7b228f  gcc/ada/libgnat/s-pack56.adb
! 58ccf5db38a480e1f08e722fcc7bad55  gcc/ada/libgnat/s-pack56.ads
! 502f505140edeb275812e5cf8530c367  gcc/ada/libgnat/s-pack57.adb
! a07c4fa7084701650e26a973384c62fb  gcc/ada/libgnat/s-pack57.ads
! d0f6a6e3e783a55a557af9308feb6629  gcc/ada/libgnat/s-pack58.adb
! 73dd602a2f13e9ceaecfa03084ca12ff  gcc/ada/libgnat/s-pack58.ads
! 59de68a7bca2873f996f5d2eb6737c4f  gcc/ada/libgnat/s-pack59.adb
! 06ee0c5a2b8cdbe7211681ab99272673  gcc/ada/libgnat/s-pack59.ads
! 33c06fc1601e6e5d0e0a1f41755cd0ab  gcc/ada/libgnat/s-pack60.adb
! 41780ee91ccd49b6d330e3c9363da794  gcc/ada/libgnat/s-pack60.ads
! bdce5c871a976d1a7bb4a80f2a87e103  gcc/ada/libgnat/s-pack61.adb
! 3353b3bba2aa52b62e397aa9c4989df3  gcc/ada/libgnat/s-pack61.ads
! 5111e137f436eec2fb374a02f02a2cf1  gcc/ada/libgnat/s-pack62.adb
! 0077e726d29d9560143e37abd95b7b80  gcc/ada/libgnat/s-pack62.ads
! 6abd5d8e4a0828aef9a1a90dc64d91f1  gcc/ada/libgnat/s-pack63.adb
! f255334e7e603f7d13667e5a46751680  gcc/ada/libgnat/s-pack63.ads
! 84644efe9e68a5b77cd70dacb993df08  gcc/ada/libgnat/s-pack65.adb
! 314192b632b608cf6af05b9e65e1d516  gcc/ada/libgnat/s-pack65.ads
! 87fc7bafd9f4e3846c0285d85f7ba214  gcc/ada/libgnat/s-pack66.adb
! 19cec8f2e8a9118454b8f8d469df7270  gcc/ada/libgnat/s-pack66.ads
! 1cd3ea7c88002cf10125a5deac66e708  gcc/ada/libgnat/s-pack67.adb
! 7e1a55e6f1c2e3f21954a111f67f1c8a  gcc/ada/libgnat/s-pack67.ads
! 07a4f6562adee52bf204ec2388a43ecd  gcc/ada/libgnat/s-pack68.adb
! 18eec47a8d202bb2b3674f6a656bace0  gcc/ada/libgnat/s-pack68.ads
! a91ef7f9e48479736a5463cdb941a6ee  gcc/ada/libgnat/s-pack69.adb
! 4831765d3043ad3a8cbaef81661a1a72  gcc/ada/libgnat/s-pack69.ads
! 5e2e80ad286463618e48f0d1c6792dcc  gcc/ada/libgnat/s-pack70.adb
! d6721d6f5e2e12c15b0564631a11df50  gcc/ada/libgnat/s-pack70.ads
! b0ae1b3662133505fe4426ccd90a7ee2  gcc/ada/libgnat/s-pack71.adb
! d232a8b44ac153b21021266841c29d66  gcc/ada/libgnat/s-pack71.ads
! 85a5cd54dd219b209a6a45950f1bd584  gcc/ada/libgnat/s-pack72.adb
! c878348edd8ffb414094cb36553a08c1  gcc/ada/libgnat/s-pack72.ads
! 6ec0217f84789df21fd61c71bbfc92cd  gcc/ada/libgnat/s-pack73.adb
! cc9537a2e832d0fc4856fa2cf6f699b7  gcc/ada/libgnat/s-pack73.ads
! 53e1b220a0840f661139c2a24c170db1  gcc/ada/libgnat/s-pack74.adb
! b34b4cd7c04f6ab06097668f5c62d0f8  gcc/ada/libgnat/s-pack74.ads
! 5f8ccdae91a5ba811dd542a0f4f9d8d5  gcc/ada/libgnat/s-pack75.adb
! ee1df697660498feaa5b92319e6d7b03  gcc/ada/libgnat/s-pack75.ads
! ab32d50e99dc99182bc5710b75cbd194  gcc/ada/libgnat/s-pack76.adb
! bdd3eaedc2edc4dbc8b1696ced420b9a  gcc/ada/libgnat/s-pack76.ads
! 8d114740a61ca7f645850c667ab99891  gcc/ada/libgnat/s-pack77.adb
! 8cb2a362069972c1c5e424f23b433df6  gcc/ada/libgnat/s-pack77.ads
! 49822316e55f3e3565ba27d523661b29  gcc/ada/libgnat/s-pack78.adb
! 8939180ed0ce7328f74d569c798152cb  gcc/ada/libgnat/s-pack78.ads
! adae447b85dacc1fab11468e8c39d6ea  gcc/ada/libgnat/s-pack79.adb
! 3a7f968454f9739158bf9e8c4f0f3a32  gcc/ada/libgnat/s-pack79.ads
! a2c1c836be3471dc04858ecb30ec87ac  gcc/ada/libgnat/s-pack80.adb
! 0f36f02e492d8744c9841649e9430ce4  gcc/ada/libgnat/s-pack80.ads
! 8bf192f6e794023a810f2ca82a756a7d  gcc/ada/libgnat/s-pack81.adb
! defb95c9793d5cac8119038c8ba721dd  gcc/ada/libgnat/s-pack81.ads
! 2ef4a383460b2b300b6be358555f3b41  gcc/ada/libgnat/s-pack82.adb
! 200e7005daa2797762c0789046e51a08  gcc/ada/libgnat/s-pack82.ads
! af2d57984571025130df5e568e29f88f  gcc/ada/libgnat/s-pack83.adb
! 9fd513a6d4f4522b1843cde883f28e7c  gcc/ada/libgnat/s-pack83.ads
! b11109a969dcc2bad4fe2b1338b6b58e  gcc/ada/libgnat/s-pack84.adb
! c2786fa4f839d1391c7471dc29ca108d  gcc/ada/libgnat/s-pack84.ads
! 36d7a526c08f07046af9ddc9af28c4dd  gcc/ada/libgnat/s-pack85.adb
! ced93c4611d5daefc6f67d064a48c11e  gcc/ada/libgnat/s-pack85.ads
! 6d873542e32e024fc226c5073ac787fd  gcc/ada/libgnat/s-pack86.adb
! 68d2b8ae5295c5449afa8b437261ec05  gcc/ada/libgnat/s-pack86.ads
! 094370352dbfbe9e3f269a47eb307f5f  gcc/ada/libgnat/s-pack87.adb
! 1b5fd12b715f4e75b3c3f5639ee1dfe7  gcc/ada/libgnat/s-pack87.ads
! 7a0d1c059761813cb3e979eb77fca4e5  gcc/ada/libgnat/s-pack88.adb
! 833b30c762e665f63d87561c34accec1  gcc/ada/libgnat/s-pack88.ads
! 51742c2abde87b48df3a8871fc7eb361  gcc/ada/libgnat/s-pack89.adb
! 73c6ad0e45bfa70f7d3ea534391cf24d  gcc/ada/libgnat/s-pack89.ads
! 1e6ec64fe25aef9acbea5261f444ab6e  gcc/ada/libgnat/s-pack90.adb
! dd66d825371b2fb30bcf64a4777e241c  gcc/ada/libgnat/s-pack90.ads
! 60755cb0b23f74a69e072aa2ca63cd23  gcc/ada/libgnat/s-pack91.adb
! 005ef034f47f122dac747d2e70abcf0f  gcc/ada/libgnat/s-pack91.ads
! f3e4bad2f1174ce4b27fc5c2b3beb9a1  gcc/ada/libgnat/s-pack92.adb
! fafc4503755abc158b3a3db3e67f2411  gcc/ada/libgnat/s-pack92.ads
! 3942ed04a1db723c3d1f23d9c923b2f2  gcc/ada/libgnat/s-pack93.adb
! 2571c35e4ed0e15952029db095ff25ba  gcc/ada/libgnat/s-pack93.ads
! 6e204bf3ac9d492093fc98d7f280dcee  gcc/ada/libgnat/s-pack94.adb
! b0c994f291ff2c67890fd8f46afb49d9  gcc/ada/libgnat/s-pack94.ads
! 183579fa4091325fcf9d9ac0b8ee1379  gcc/ada/libgnat/s-pack95.adb
! 4e4e08e1952e0f3326fc1ec9075052a5  gcc/ada/libgnat/s-pack95.ads
! 8fbdd88b7147e47fda9f2d61546b87d3  gcc/ada/libgnat/s-pack96.adb
! 397293cb0cc4d89b9bb2c28278502723  gcc/ada/libgnat/s-pack96.ads
! dec30d1487facb049b6144db9ac7877b  gcc/ada/libgnat/s-pack97.adb
! 4a27bb56c65907e0b8371afd8c84928c  gcc/ada/libgnat/s-pack97.ads
! 384d86332caa835cda2d2230237d0008  gcc/ada/libgnat/s-pack98.adb
! 895b7a09b5dc8c5c937807e7bacf0e98  gcc/ada/libgnat/s-pack98.ads
! 5cae5bb744f91cf285b193bfe38a28bd  gcc/ada/libgnat/s-pack99.adb
! 9cdb8069b2fdf5f58de0db1418b09e70  gcc/ada/libgnat/s-pack99.ads
! 9c243f6b6cf451af8f13d7f26a814d95  gcc/ada/libgnat/s-parame.adb
! bc4f081d11f57349045205c2eb284251  gcc/ada/libgnat/s-parame.ads
! 9265ab6dde3d33d7ded66e62d670853a  gcc/ada/libgnat/s-parame__hpux.ads
! e84fd9b8f14494f79bf862cda3cf9cd6  gcc/ada/libgnat/s-parame__posix2008.ads
! 00735b071ae8e04c8414935f9027675e  gcc/ada/libgnat/s-parame__rtems.adb
! 21c270de219a8aaeb8fd7955fa9a9a5b  gcc/ada/libgnat/s-parame__vxworks.adb
! 13ba3ba4c4f9296c0b5424ed82014413  gcc/ada/libgnat/s-parame__vxworks.ads
! 2a2aa11365be3bdeb453ca8e2d5d843a  gcc/ada/libgnat/s-parint.adb
! 9c8fb5817dde45caf5f9e8eafaa65e02  gcc/ada/libgnat/s-parint.ads
! 7a35ae7e194ceeee0e84e687814ba4b2  gcc/ada/libgnat/s-pehage.adb
! c94402d5404ff17646b4a3b7349d501a  gcc/ada/libgnat/s-pehage.ads
! 8a2432c2572d3a3d6e58b4078182b70e  gcc/ada/libgnat/s-pooglo.adb
! 5d1201dff15f74194d481a665380e922  gcc/ada/libgnat/s-pooglo.ads
! 4593b8015a44f593edaef35724cd90ba  gcc/ada/libgnat/s-pooloc.adb
! 4c423934210cce16d5cdc4c6b5356412  gcc/ada/libgnat/s-pooloc.ads
! 1c3a0c6eeb161cc0853799a217f13b92  gcc/ada/libgnat/s-poosiz.adb
! f41515a892a512b248dccce2fdf06736  gcc/ada/libgnat/s-poosiz.ads
! 9692c9f280f6cef1c5765a43844a01b2  gcc/ada/libgnat/s-powflt.ads
! c0fb6fa9c1e7bd36b9587dc3c62cddd4  gcc/ada/libgnat/s-powlfl.ads
! 548334bcf4e535acecc5efa2bf70d4fd  gcc/ada/libgnat/s-powllf.ads
! a4834916531b11e1cf60e1b00352bfbb  gcc/ada/libgnat/s-purexc.ads
! c8e7ecf424b1f0c330d866dac2191464  gcc/ada/libgnat/s-putima.adb
! 8b2765e075c99ae1694303fb6b300de3  gcc/ada/libgnat/s-putima.ads
! 8a3ac546c451babad650db2b1a87203b  gcc/ada/libgnat/s-rannum.adb
! 89a1c8203aecc686556370959c807efe  gcc/ada/libgnat/s-rannum.ads
! 75586be724c39f1c44260af6c6b8b10b  gcc/ada/libgnat/s-ransee.adb
! e018d23294adfd1c6c7d66ab4c8ca60e  gcc/ada/libgnat/s-ransee.ads
! 701f902d20fb86cf6cdc436b7e55cb80  gcc/ada/libgnat/s-regexp.adb
! 7d6cf366c40366dede233463750a8edd  gcc/ada/libgnat/s-regexp.ads
! 2b6f8963af48a23bba762b1c0a7cd9d4  gcc/ada/libgnat/s-regpat.adb
! 0b059703129b7263f750f0fc30303829  gcc/ada/libgnat/s-regpat.ads
! 7ff82c22ca87053d07414369bce2aa42  gcc/ada/libgnat/s-resfil.adb
! 063236347c4cbac2e9e9f96fe272ecd7  gcc/ada/libgnat/s-resfil.ads
! 4ca022646101be37c3b4518668ff571a  gcc/ada/libgnat/s-restri.adb
! 419d296ce1e249ee278cb447d95aff82  gcc/ada/libgnat/s-restri.ads
! b42363410d88844d85cb7439c9a1bc89  gcc/ada/libgnat/s-rident.ads
! 1ea08a534d4893a07aacd1efe61c71cc  gcc/ada/libgnat/s-rpc.adb
! 82957b03e92c451bdec8261467a51713  gcc/ada/libgnat/s-rpc.ads
! 6973f21b8684cecf0b123afd0af26f2a  gcc/ada/libgnat/s-scaval.adb
! 9c4071a7cb651fcda328a74f16942945  gcc/ada/libgnat/s-scaval.ads
! 32a851d6cc39b3d971b5f90945012ce2  gcc/ada/libgnat/s-scaval__128.adb
! cecac13d18bf6a0bba385e987d1cde72  gcc/ada/libgnat/s-scaval__128.ads
! 55df3aa3d57952e68f3f98795254cbf1  gcc/ada/libgnat/s-secsta.adb
! 4bdf82a4986cf86890742b62aeaca1a2  gcc/ada/libgnat/s-secsta.ads
! e1f4f85abc22eeaa1944a1cd95a23862  gcc/ada/libgnat/s-sequio.adb
! 0b4a2db8216ab5d550598e55f73aa40c  gcc/ada/libgnat/s-sequio.ads
! 383878abf8fa57a7e27c5b3dece09cbc  gcc/ada/libgnat/s-shabig.ads
! 82a3c6728231e21c55a5bdfe241b4113  gcc/ada/libgnat/s-shasto.adb
! 0217d24cab43a433f5ba9f86b691a947  gcc/ada/libgnat/s-shasto.ads
! 107f794327cfbc7d097fc4f206f06ed5  gcc/ada/libgnat/s-soflin.adb
! 64812e18840c255af23e5ff2bee97735  gcc/ada/libgnat/s-soflin.ads
! 262162f79dc2336eec74261c564b333b  gcc/ada/libgnat/s-soliin.adb
! bbb28dbc1e4a310a6633d547d604e34d  gcc/ada/libgnat/s-soliin.ads
! 59d894ed9d7cc691a55779a021b9b66e  gcc/ada/libgnat/s-spsufi.adb
! 6bc14f9cc7e0ede934e0f93ee5af0d76  gcc/ada/libgnat/s-spsufi.ads
! abc108f659656fdbcca9eabf4364c9d4  gcc/ada/libgnat/s-stache.adb
! 4a2695ad3528333026a4e837a88386fc  gcc/ada/libgnat/s-stache.ads
! 69e985aebb4b17e451ae950c28c73689  gcc/ada/libgnat/s-stalib.adb
! aa9b7fe0fb94fa18e5ec936f0137d541  gcc/ada/libgnat/s-stalib.ads
! cc8e11f87c04e9692a0fa83686e8f699  gcc/ada/libgnat/s-statxd.adb
! 9f72c621f819241c3365d2ba0f91281e  gcc/ada/libgnat/s-statxd.ads
! 08711e98a346fc595d4614ccf926fe0b  gcc/ada/libgnat/s-stausa.adb
! b3d21d06fdbf31e18eb06b97a4b67237  gcc/ada/libgnat/s-stausa.ads
! 28fdb19b0ac5f713d9da3847cd1417f2  gcc/ada/libgnat/s-stchop.adb
! c7b3a3ef6e99da38f7fcd56d1a8651ae  gcc/ada/libgnat/s-stchop.ads
! 52b78f3064dbb7580b516b076b30e9e7  gcc/ada/libgnat/s-stchop__limit.ads
! f9f70aca8261c7bd8117d3403fca3c8c  gcc/ada/libgnat/s-stchop__vxworks.adb
! c7cc66a303d6f94cda1f5b02138fb89e  gcc/ada/libgnat/s-stoele.adb
! cd006d4ea979780b32312a21172ac416  gcc/ada/libgnat/s-stoele.ads
! f4932a6c833412abf81404cf276f6474  gcc/ada/libgnat/s-stopoo.adb
! 3a3ac9e214980884f3bb21b33506945c  gcc/ada/libgnat/s-stopoo.ads
! 38573b294df285aafa7a1864f5c9ca86  gcc/ada/libgnat/s-stposu.adb
! ec5e983c0a931039b9bfeaafacaac781  gcc/ada/libgnat/s-stposu.ads
! 56bb157b3c636c0784a96bb4e408adec  gcc/ada/libgnat/s-stratt.adb
! 90c5c20492e0c3b6c914afc279b33d41  gcc/ada/libgnat/s-stratt.ads
! 55e0627a7567b9b2d797929440e8e42a  gcc/ada/libgnat/s-strcom.adb
! a78a4cc42c67b76249a3a7fe05af8817  gcc/ada/libgnat/s-strcom.ads
! 647db4dfed8172018810f39c9e6c5b54  gcc/ada/libgnat/s-strhas.adb
! 4eab7ef00fe09906d525d9001c7886ea  gcc/ada/libgnat/s-strhas.ads
! 9a457858168eb0a581b9e591fff49392  gcc/ada/libgnat/s-string.adb
! 8e11ec315c163f360e0209e643f1e492  gcc/ada/libgnat/s-string.ads
! 56a47f8efb871cec1217750c03378504  gcc/ada/libgnat/s-ststop.adb
! 50eb94ab13c9883485cf4f3f4ca981f8  gcc/ada/libgnat/s-ststop.ads
! 32d7e3e5257191b172c093407a7a69a6  gcc/ada/libgnat/s-tasloc.adb
! 74ef8b98a3bd5e196d42f46bd55ca4a8  gcc/ada/libgnat/s-tasloc.ads
! aaa28a79a3801820f8ff2cbeb394cf00  gcc/ada/libgnat/s-traceb.adb
! 71733d9b8c1db0c98e8b474b49810035  gcc/ada/libgnat/s-traceb.ads
! f116d856450d1fb4876ca0af023e4d2f  gcc/ada/libgnat/s-traceb__hpux.adb
! fb8da2a42385a663b580915eece8173d  gcc/ada/libgnat/s-traceb__mastop.adb
! ab40f438ff83c9ec4378fb1a22bbd8de  gcc/ada/libgnat/s-traent.adb
! 59b1f239bd02494269def8e0a9d3feee  gcc/ada/libgnat/s-traent.ads
! 4ab5bc94a78ea511321d00b1db942f92  gcc/ada/libgnat/s-trasym.adb
! 2e1fe08efee40a9e7ed44dffa0aedef5  gcc/ada/libgnat/s-trasym.ads
! 9d7dcc3b9e1fd352545d96b68aed67e1  gcc/ada/libgnat/s-trasym__dwarf.adb
! 6bf568167a14b8c31d8eb05d73e10713  gcc/ada/libgnat/s-tsmona.adb
! ef9653ab0a68eedb3f35ac9745a9f21b  gcc/ada/libgnat/s-tsmona__linux.adb
! a2c4a07d4f9169821202248580e431a8  gcc/ada/libgnat/s-tsmona__mingw.adb
! 956bf45d6708e37716f1ef0a58e81e47  gcc/ada/libgnat/s-unstyp.ads
! 43107c2117ea8a7d80ef3d6f6eadfb70  gcc/ada/libgnat/s-utf_32.adb
! 2f1fa43478e6ec7d206dcdd664534010  gcc/ada/libgnat/s-utf_32.ads
! 7085a0dca50e532e89f73bc918d148f1  gcc/ada/libgnat/s-vade128.ads
! 45dead57159c79c3b06fd2e23c76b21a  gcc/ada/libgnat/s-vade32.ads
! b26cb72fba08634fff060ffd9eed12c3  gcc/ada/libgnat/s-vade64.ads
! bdd6d20803191986f06e0ca78e09a2be  gcc/ada/libgnat/s-vaen16.ads
! 14f7c7de79024a7447ce8940274cdf04  gcc/ada/libgnat/s-vaen32.ads
! 944ad725722900c2f0332edcf8c03520  gcc/ada/libgnat/s-vaenu8.ads
! e4fb744ac18f148409f47f9ac4092857  gcc/ada/libgnat/s-vafi128.ads
! eb14c979a017c4ba2768773fb0108c19  gcc/ada/libgnat/s-vafi32.ads
! efa49bc674b7989e5ff38d7341563c8f  gcc/ada/libgnat/s-vafi64.ads
! c0f4f5eac3217fb737aada72b011e1d7  gcc/ada/libgnat/s-valboo.adb
! 3fc4f5fd793898555dcd088f67cc354a  gcc/ada/libgnat/s-valboo.ads
! 81efdb6a682f6fe20d05d45b2afd81ef  gcc/ada/libgnat/s-valcha.adb
! 5c28b91964ac3eca7223cfb6d8c73d58  gcc/ada/libgnat/s-valcha.ads
! b6b6a1d1fef57396a226efcc85142c06  gcc/ada/libgnat/s-valflt.ads
! 2b10daf435b430e1ab14b2225bce6ce9  gcc/ada/libgnat/s-valint.adb
! 1f891895114a65e5d781e7a50b3b3ace  gcc/ada/libgnat/s-valint.ads
! 4b0404cd71b02c867099f452bcd0d1c2  gcc/ada/libgnat/s-vallfl.ads
! 17e2df66dd116d997886c665637d01f2  gcc/ada/libgnat/s-valllf.ads
! 14dd52d78b28fc1f380952751c6d081a  gcc/ada/libgnat/s-vallli.adb
! 9367ca2797e519947c702393a0c046ab  gcc/ada/libgnat/s-vallli.ads
! 8f74b03051758fb8b0a070a1ca679b96  gcc/ada/libgnat/s-valllli.ads
! 4c6a215805b3615a998a10f5a3f78bc7  gcc/ada/libgnat/s-vallllu.ads
! e306206da415090be53e94cffb57a62b  gcc/ada/libgnat/s-valllu.adb
! ddec337ab42ee090fc748c0394d28082  gcc/ada/libgnat/s-valllu.ads
! 3cff4a95465642f1b6ac9f2a364b4bda  gcc/ada/libgnat/s-valrea.adb
! 47271631aed59b91f1169a5c3d40a577  gcc/ada/libgnat/s-valrea.ads
! 9939984d95de1aa739ffbda021ff84e0  gcc/ada/libgnat/s-valued.adb
! e25b256b59f85cc516b0763f978f1e07  gcc/ada/libgnat/s-valued.ads
! 9b900c480fc651421a3df71f7934a486  gcc/ada/libgnat/s-valuef.adb
! ee6f5600e2c654a71837b9577e6bb76d  gcc/ada/libgnat/s-valuef.ads
! 5836aa39045d1857673ebd5e44f4bae3  gcc/ada/libgnat/s-valuei.adb
! f6153c315bf48f052b20da07726a8719  gcc/ada/libgnat/s-valuei.ads
! 11271d7669659bb032578df130c32b29  gcc/ada/libgnat/s-valuen.adb
! f21895494733328cea9737cf9b5ef35a  gcc/ada/libgnat/s-valuen.ads
! 98563fab5cfd23417a724019131ace61  gcc/ada/libgnat/s-valuer.adb
! 62838351bfc56f11ddc2108c8559b9ec  gcc/ada/libgnat/s-valuer.ads
! 8e3bec155282a8410cc8a6549f5a8332  gcc/ada/libgnat/s-valueu.adb
! 7c9d11c6a7c5575e351c8286bc534ffd  gcc/ada/libgnat/s-valueu.ads
! 2f6183e818352491eb1262b8173e745f  gcc/ada/libgnat/s-valuns.adb
! 745ffa95c1b4f3ec3567ec1247639f96  gcc/ada/libgnat/s-valuns.ads
! 0af69934ac0b849d8a4349fb4feffe1d  gcc/ada/libgnat/s-valuti.adb
! 686ba984f6f24658dbcc776b2f5c911c  gcc/ada/libgnat/s-valuti.ads
! 5b9973eef7153282d19ca764d2c6a6ec  gcc/ada/libgnat/s-valwch.adb
! 0441a0498cc076a73bf261846032fbf1  gcc/ada/libgnat/s-valwch.ads
! fb05d675ef0d3f740077fefbcdad74f2  gcc/ada/libgnat/s-veboop.adb
! 4af508eb69d3ce1af7db460856aecf38  gcc/ada/libgnat/s-veboop.ads
! 04af14fa34e99ae0b9e7047c43bec7b1  gcc/ada/libgnat/s-vector.ads
! 7d8b084a272820d83dbff013d7120320  gcc/ada/libgnat/s-vercon.adb
! a8dc8fe6d6005d0efd9b91df8b42f3a4  gcc/ada/libgnat/s-vercon.ads
! d62722fbcfddd305dff65db1e3b9fba8  gcc/ada/libgnat/s-wchcnv.adb
! 5c5e0e634468a33856b375f36f1f55b5  gcc/ada/libgnat/s-wchcnv.ads
! 2a22f96103841c380c9f99b838ea3833  gcc/ada/libgnat/s-wchcon.adb
! c4403e9cb27435a1b07ca360afd349ea  gcc/ada/libgnat/s-wchcon.ads
! 91a3083f01ac58027731231d7f985977  gcc/ada/libgnat/s-wchjis.adb
! e8b4c1148d50aca082bd233acb77b5ac  gcc/ada/libgnat/s-wchjis.ads
! 98f78645a830b263e2d3974d3afea7f3  gcc/ada/libgnat/s-wchstw.adb
! d8874e29cbbad721e66cc205e714c3fb  gcc/ada/libgnat/s-wchstw.ads
! af417bb81ee4fa50eb6a70194875c97b  gcc/ada/libgnat/s-wchwts.adb
! f816f7753762b8c1f0220cfe89ad9f77  gcc/ada/libgnat/s-wchwts.ads
! e0364dffe89c64be4eaa7156a56beb35  gcc/ada/libgnat/s-widboo.adb
! 29f8ede63f88d74ee79e98eea42d1a39  gcc/ada/libgnat/s-widboo.ads
! 3d545619cb267c31b6aba1918255dbb2  gcc/ada/libgnat/s-widcha.adb
! 05d5175b50b57ff4fc70b72ecc7fdfc7  gcc/ada/libgnat/s-widcha.ads
! eb812e18f2b4629a8528536a0d25c56e  gcc/ada/libgnat/s-widenu.adb
! 619e2e15bd156a4242f30df09a4bf277  gcc/ada/libgnat/s-widenu.ads
! 55336dce3eced562cb757d496049f724  gcc/ada/libgnat/s-widint.ads
! 90243ee2fffc47b43fbeff9337c1ce79  gcc/ada/libgnat/s-widlli.adb
! f89cef2fa87e8f60f1344d17208fa7e6  gcc/ada/libgnat/s-widlli.ads
! 3822d0965fd55dd4ac6a46ef4de0180a  gcc/ada/libgnat/s-widllli.ads
! 575d80dbc5bed2247a65b14fdefe5fd7  gcc/ada/libgnat/s-widlllu.ads
! 96a06854d3cfb2236155636ee9dc9bb5  gcc/ada/libgnat/s-widllu.adb
! c62a7c4b40b09d2e14f58954192c3939  gcc/ada/libgnat/s-widllu.ads
! 1792488d68133b6f1c8e928b093505a1  gcc/ada/libgnat/s-widthi.adb
! acdf492aff8c7fb06441fe6fcb17bc83  gcc/ada/libgnat/s-widthi.ads
! 7f8e2ad3e24954a8b7064d86be80d83a  gcc/ada/libgnat/s-widthu.adb
! 94f7a022c20e3c251d203a01291a7269  gcc/ada/libgnat/s-widthu.ads
! 4f6620d1c3990127ba9301200cfcfa13  gcc/ada/libgnat/s-widuns.ads
! a14d2455812396df36dd783f8bb555fd  gcc/ada/libgnat/s-widwch.adb
! d244099bebf71c384d4fd1f930ceaef9  gcc/ada/libgnat/s-widwch.ads
! a0335dc710fd6c12b511f7c26c46efc4  gcc/ada/libgnat/s-win32.ads
! 231805a8c7c248fa4ae7b901974c5394  gcc/ada/libgnat/s-winext.ads
! 5092c84c10dae2f00bfb1abd8ffa2c9a  gcc/ada/libgnat/s-wwdcha.adb
! 60308032d7b2f0faeeb531b4a2d21af9  gcc/ada/libgnat/s-wwdcha.ads
! f464358d73d6c0292724fef010da9607  gcc/ada/libgnat/s-wwdenu.adb
! 6189de89079abc7ae09507912e51c5b9  gcc/ada/libgnat/s-wwdenu.ads
! 0100b226ea6a2f7f848117bd082d506d  gcc/ada/libgnat/s-wwdwch.adb
! 62746a77b83de88f98ac0160c6cd4b9e  gcc/ada/libgnat/s-wwdwch.ads
  0f4c21401ad2531f8c5d4010537dc6d2  gcc/ada/libgnat/sequenio.ads
! d32a674a78be780fa45e5c667c586295  gcc/ada/libgnat/system-aix.ads
! 62f025f5445951e97e5610e80ad7314d  gcc/ada/libgnat/system-darwin-arm.ads
! f369ec2979e2b7f4a7374288b679fcef  gcc/ada/libgnat/system-darwin-ppc.ads
! 7054ff226dacb7b956291dc716a7c2ea  gcc/ada/libgnat/system-darwin-x86.ads
! d3a4ef0833f23e3a6cef864a04211ce3  gcc/ada/libgnat/system-djgpp.ads
! 431ef52c82801f6e7583a30747cde122  gcc/ada/libgnat/system-dragonfly-x86_64.ads
! 98dffdb5615de58ceafc81854d21fbd1  gcc/ada/libgnat/system-freebsd.ads
! 08edd2c9157628f5b010704e3ceb5ca3  gcc/ada/libgnat/system-hpux-ia64.ads
! 1223deb2d104398091040c2422669abd  gcc/ada/libgnat/system-hpux.ads
! 03684e8e1a71eb6f70513a8b0c5cedc3  gcc/ada/libgnat/system-linux-alpha.ads
! 0e10e43dd3fb5902d2124515e4aaaaea  gcc/ada/libgnat/system-linux-arm.ads
! 60d4a9e9331c9391139f29b8fc17fac5  gcc/ada/libgnat/system-linux-hppa.ads
! 3ad9c0a1ae3012024c3b071e9224014e  gcc/ada/libgnat/system-linux-ia64.ads
! c151a89b901a605e324d70c95141d1af  gcc/ada/libgnat/system-linux-m68k.ads
! e2ee048a88639440a82358846a05aff9  gcc/ada/libgnat/system-linux-mips.ads
! b6b1660d2a1cb064a01668bfd703931a  gcc/ada/libgnat/system-linux-ppc.ads
! aea36ef4376ac7fef38c1f3845b5bc0d  gcc/ada/libgnat/system-linux-riscv.ads
! 95da5182ebd679f4a9a6064fc49458f3  gcc/ada/libgnat/system-linux-s390.ads
! e3f46264c5bb0ae1f6b1212dfaae9b67  gcc/ada/libgnat/system-linux-sh4.ads
! cbc03f7a9f430ad6e5d85128ae51c9a2  gcc/ada/libgnat/system-linux-sparc.ads
! c726e8f424c2e6db110969a4e6bee34a  gcc/ada/libgnat/system-linux-x86.ads
! 97b28a1a2fa7e30de8564f5e3bdebee3  gcc/ada/libgnat/system-lynxos178-ppc.ads
! 36b2973eb6f27c03433a93b3ae4063b9  gcc/ada/libgnat/system-lynxos178-x86.ads
! 8a80bf329d88104be3761d09194d4479  gcc/ada/libgnat/system-mingw.ads
! 1626ce9c92a722a3cd527f0622682142  gcc/ada/libgnat/system-qnx-aarch64.ads
! 5faa41f8c97d7192172b65806b676e23  gcc/ada/libgnat/system-rtems.ads
! ce8812cd95c5005c97a303de80271095  gcc/ada/libgnat/system-solaris-sparc.ads
! 61996a8c629ae813935bf399eefb3bb2  gcc/ada/libgnat/system-solaris-x86.ads
! 0ef9bfe9bc393570e9ebbdd10adcc3bc  gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads
! c02cad7f8c166d31cba9f1285335022c  gcc/ada/libgnat/system-vxworks-arm-rtp.ads
! 85a8185666db797cff21014baf8e5723  gcc/ada/libgnat/system-vxworks-arm.ads
! f577fff8370a6d2c0e27ad763c23adf1  gcc/ada/libgnat/system-vxworks-e500-kernel.ads
! f6f6487c2c86812bc2f2381bb80481d0  gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads
! 76d13f5da99a0fca1934ce15eac5b3a5  gcc/ada/libgnat/system-vxworks-e500-rtp.ads
! 4808c12bde90ba7a51d32d4dbcb7bc49  gcc/ada/libgnat/system-vxworks-ppc-kernel.ads
! aaa91aa055cf7de5c2f15a665aa84fee  gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads
! 8cfb240c7b4341d9a8f749c317d130cf  gcc/ada/libgnat/system-vxworks-ppc-rtp.ads
! 53c006afd0735d87ecdb4bffdd4cc99c  gcc/ada/libgnat/system-vxworks-x86-kernel.ads
! 93c9d8f11949e73b4e0bcc58a1fa63df  gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads
! b07bdeb92d65a431a884db682aa3b33e  gcc/ada/libgnat/system-vxworks-x86-rtp.ads
! b3a7e79f4a18be9db236cdb3b649e889  gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads
! eb0888171ee0830610b10824d1501f17  gcc/ada/libgnat/system-vxworks7-aarch64.ads
! fa1ab8423e0026724fbc3d5c7c8d009c  gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads
! 85a8185666db797cff21014baf8e5723  gcc/ada/libgnat/system-vxworks7-arm.ads
! 3007e2b20cc591154270f68d3425ec7a  gcc/ada/libgnat/system-vxworks7-e500-kernel.ads
! d4a6e4d13fa0946c804debdd8191d58b  gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads
! f063603154860a55fd55c9f004dcea9a  gcc/ada/libgnat/system-vxworks7-e500-rtp.ads
! 756eb60665562bee11985765039504de  gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads
! 4dda164ab1d86c02d0377dfadac765f9  gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads
! 39bd39b282dde733325c131f93778a1d  gcc/ada/libgnat/system-vxworks7-ppc-rtp.ads
! 782e454f1a7002715943b9c37c9a5581  gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads
! 6b14229b2f45ecbbff4969fa79b113ab  gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads
! ba06d37a722fe587ded13be80c0e5aa2  gcc/ada/libgnat/system-vxworks7-x86-kernel.ads
! a027a342a5cb024211caa44b5cd8d6cf  gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads
! 08875beab5fa27ddc161fb21e5ef331f  gcc/ada/libgnat/system-vxworks7-x86-rtp.ads
! c9770c051453cc2493230f97b8b32290  gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads
! b87922b9874ccaf810d676e5f604638b  gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads
  2dc890e2791f7e9d6e1e9ca1cfb55c71  gcc/ada/libgnat/text_io.ads
  9a646eb97c6840de5d4bbb081dd2031a  gcc/ada/libgnat/unchconv.ads
  b8b0f9c3471d18ee5ac33521fe6f6d31  gcc/ada/libgnat/unchdeal.ads
! da79c65bc1cd504d30fa3f8b47e79651  gcc/ada/link.c
! ada06d2d8d6638f58a1cee5a5e17d6d0  gcc/ada/live.adb
! 63de46074dbec75bae4332e47f60c9bc  gcc/ada/live.ads
! 70ae6226c4ae0bcd5e2dd100ba54104c  gcc/ada/locales.c
! 575111e0d536cdec99c563c4ccd3934d  gcc/ada/make.adb
! a7839b7e0d424c7e4c4fce09ffd2aaff  gcc/ada/make.ads
! 6c1c403c83a1e73c44bf7f512f020916  gcc/ada/make_util.adb
! 3a4ea2382e32ddb06aa73fc1c5ac4c65  gcc/ada/make_util.ads
! 6c56b14091a3f8c5e5fa0f99cb3fd8f4  gcc/ada/makeusg.adb
! beaf9598c47fdb2cd31deb853adc2080  gcc/ada/makeusg.ads
! 999cb2c5c43a07691b5f40f0e2064fc4  gcc/ada/mdll-fil.adb
! 7cdefd0c951e8e4f559a08d11dafd7ab  gcc/ada/mdll-fil.ads
! 1372c16ad7029744a8387c23baca37d4  gcc/ada/mdll-utl.adb
! 19dccb6db878e09409dc1b11e97a1841  gcc/ada/mdll-utl.ads
! 1b929b926bb2eff5ca331b72dab58f04  gcc/ada/mdll.adb
! 587869307c058f24e881916b7251d4fb  gcc/ada/mdll.ads
! c04c493dd0ef5ae90a4d07f8f3310182  gcc/ada/mingw32.h
! 3cdd4847a3bb0afc46e0cabad926c432  gcc/ada/mkdir.c
! d4195f932699d9f15d453637644edddc  gcc/ada/namet-sp.adb
! 0b0cbd8738d6209d646b22ca17a0b817  gcc/ada/namet-sp.ads
! fb8ebb5f00774fa65c71030168dd5fcc  gcc/ada/namet.adb
! 9ddb078efa8a3755d06e02cbed9b727f  gcc/ada/namet.ads
! 7d16d29523da1855daf142426cbc4e26  gcc/ada/namet.h
! 9bc537654decacfee72745789e5f7fb1  gcc/ada/nlists.adb
! ee36797a701095f914afeb20d5a5599a  gcc/ada/nlists.ads
! b22d48dec3cb1adffb52deb8e4161598  gcc/ada/nlists.h
! e95afdeb03ecb018b52648561a403544  gcc/ada/opt.adb
! 06986356c231ee170a8163d5990c44c8  gcc/ada/opt.ads
! 03ab82809d059536b06d3c3900af8b0e  gcc/ada/osint-b.adb
! fea6a45343f58e807a7f7992748a9c05  gcc/ada/osint-b.ads
! 50f8e7e89c1f4b7e81cf9314aa76b6fc  gcc/ada/osint-c.adb
! 0841ef1790829f0430429eb80b4a5d6f  gcc/ada/osint-c.ads
! 1fbfe3fd74f4a3cc06eb2ecee9d62072  gcc/ada/osint-l.adb
! 17aaa737408f260004fde1dc5907b19a  gcc/ada/osint-l.ads
! 76df6484e05f0fdd8af1a577d9b99a89  gcc/ada/osint-m.adb
! 3b9e2acb0f0347e8596cc1842d336c87  gcc/ada/osint-m.ads
! f6f8217dad5d3e98b9a014bd77953e3b  gcc/ada/osint.adb
! 4173c8115d8c0486d9dbbd7fca7be8b9  gcc/ada/osint.ads
! 07c5813f9b5237627d4e565a0655c09c  gcc/ada/output.adb
! 3279b919a3966167173bb0d912e5578b  gcc/ada/output.ads
! 3691ad909d2e735f4213f8a34b86e2b7  gcc/ada/par-ch10.adb
! 6fd8fa8afb17e611d132db1e0e7e5789  gcc/ada/par-ch11.adb
! 0cc454a6bcc0c61d0d91e7edcaf891cb  gcc/ada/par-ch12.adb
! d347c63b2fe79723bfe87da9cf6e9ed5  gcc/ada/par-ch13.adb
! 5ed416d8d09d540a2d13b324cae27030  gcc/ada/par-ch2.adb
! a305101d3ee956a06fac16bc21895f5a  gcc/ada/par-ch3.adb
! 329f5d81f7d2572022b42bbfaf11ff75  gcc/ada/par-ch4.adb
! 6feb564918bbbae475fa263faf128248  gcc/ada/par-ch5.adb
! f72a948f8600b917a49036057f4dabae  gcc/ada/par-ch6.adb
! 85a1c8df50de764975818c7005e6f2c9  gcc/ada/par-ch7.adb
! e9bd35b32b663d7ab79c9f009b27a047  gcc/ada/par-ch8.adb
! fec387e10ac9dc4f6c91f1ff590bd548  gcc/ada/par-ch9.adb
! 41ad08478eee69e143a4baaf843ac7b1  gcc/ada/par-endh.adb
! 51fa2467ed0b53748e973f27d9d5efbc  gcc/ada/par-labl.adb
! feddc3776f56f394c11be93839eda2d5  gcc/ada/par-load.adb
! 98216448db84209e5dfa54fe514d747d  gcc/ada/par-prag.adb
! 1a0d368815cdaa889aa63ccd703c6915  gcc/ada/par-sync.adb
! 26834127738433343075c17fbd5cb1c7  gcc/ada/par-tchk.adb
! 01f6a078e6226826f9fd365417ed5db8  gcc/ada/par-util.adb
! bb417c6dd33d781c8b77fabadbca023b  gcc/ada/par.adb
! f6c0bd501f85ef3c38ab7c370ee8303a  gcc/ada/par.ads
! 59693345eda5680d2439a48f3bf70ef6  gcc/ada/par_sco.adb
! ae873427abf1e52123bc56f5b458c55d  gcc/ada/par_sco.ads
! a8b0c75ac49c1b02954afb8d70392d6e  gcc/ada/pprint.adb
! 418a3a0780e3d49407487d681f24478e  gcc/ada/pprint.ads
! eb2314a13eba635c369ea7e300221b20  gcc/ada/prep.adb
! 608f98f215e3e4e27a95a8c3051416a9  gcc/ada/prep.ads
! 12b49d128d3cb0d91b90757b67559098  gcc/ada/prepcomp.adb
! d53698ae9cd62c9875df437799b1c81e  gcc/ada/prepcomp.ads
! 661aaeb5a5cc5393e896c1db7d94b682  gcc/ada/put_scos.adb
! 3ac16ef47fa75f7e2cf04363398c45f9  gcc/ada/put_scos.ads
! 16909d1824435e11af39feebd67df6f9  gcc/ada/raise-gcc.c
! 7a15f4ba106a2b5df185709b3ad26afe  gcc/ada/raise.c
! ad5b31e81585c31308be786877191424  gcc/ada/raise.h
! 3dd8e27b0d2c3d9324365d44e5d13f1f  gcc/ada/repinfo-input.adb
! e49bfc0e2ca91f3619403816c4680d13  gcc/ada/repinfo-input.ads
! 00348a758e14bc06d7f93fb3c60acdca  gcc/ada/repinfo.adb
! 0f4db0fd7abce5c16b94c38bda02e179  gcc/ada/repinfo.ads
! 5771e11c4a36c3e12ae085cb0f637758  gcc/ada/repinfo.h
! 866f4553620f6724d5391f963bfc2417  gcc/ada/restrict.adb
! 986b5c865a1fd59615a0ae661d2b57cb  gcc/ada/restrict.ads
! 8ed555d9793e4f615b976cc7b9acf72c  gcc/ada/rident.ads
! 7ce1c090d8a578ba07733a0c95eff670  gcc/ada/rtfinal.c
! 769f3c8ad265f681c0f8d721cd30b56a  gcc/ada/rtinit.c
! fd45cde81618f7c3c3390e27e3ca777f  gcc/ada/rtsfind.adb
! 21dc0d767c39f9a74eeb48b6b010a158  gcc/ada/rtsfind.ads
! 5015c83558995d394606da1d0f9433a8  gcc/ada/runtime.h
! 4ce32403271dbf0ff851ff8351dec962  gcc/ada/s-oscons-tmplt.c
! ec3d3b26622cb5376b9e534f28b12034  gcc/ada/sa_messages.adb
! c84e50165f5678bbe0ea62bdfe831bc5  gcc/ada/sa_messages.ads
! 61b09b0c7704ce093e73a0569fb6670b  gcc/ada/scans.adb
! 1317be9ee56d4c83b3960a6ce5f125f0  gcc/ada/scans.ads
! c0637d4c09b82e6084691f4cd851c99c  gcc/ada/scil_ll.adb
! a85c95bdb56a426df94a0cc384d4a9d4  gcc/ada/scil_ll.ads
! b3d80cf3366bf3fd894d7ff1c787b52a  gcc/ada/scn.adb
! b9a812119b38eb08f6455346b4ac903c  gcc/ada/scn.ads
! 9677c242d810901c25e3815a1b0ddac1  gcc/ada/scng.adb
! b65bfe7356001dba81736fb0b950a880  gcc/ada/scng.ads
! 39a32f00e8f68fa7a458eb18d81b73fe  gcc/ada/scos.adb
! 079d82c5d3d154eb7114318881b49b12  gcc/ada/scos.ads
! 63fa2cbabd78b5e8d05a73ecfe1f69bb  gcc/ada/scos.h
! 8fa91b7fdb64086efc531fbbc7f05585  gcc/ada/sdefault.ads
! 785451d3db2023c5690cce3d69c30edb  gcc/ada/seh_init.c
! 0ae7af7ee357f861e423a532be1151e9  gcc/ada/sem.adb
! 4e111cbd516c30fc6c5909405371a363  gcc/ada/sem.ads
! ef4f36d06546bf3a233afcc1d224aa09  gcc/ada/sem_aggr.adb
! 2dbc22f67596fad4d92ec77e2157fef0  gcc/ada/sem_aggr.ads
! 1c0f408f94606b5d04db61e7a9677c41  gcc/ada/sem_attr.adb
! 2d20cc508225ed2271eb40bb88095def  gcc/ada/sem_attr.ads
! 04d789eb44222a69d105f46f434a7e80  gcc/ada/sem_aux.adb
! 0a0d04a40f212143924eea90f1d6f839  gcc/ada/sem_aux.ads
! 908d9cf517266b10dbb4a478c56d817a  gcc/ada/sem_case.adb
! bf81de207e35a9479ee5bd890ae045b8  gcc/ada/sem_case.ads
! 0518d306ab4da872853f0a5b8d0c2b9c  gcc/ada/sem_cat.adb
! d81f7ed8766a1ec8b6bdf6c06c7ef18c  gcc/ada/sem_cat.ads
! 4697be3d9174c09e1f93775d435c1709  gcc/ada/sem_ch10.adb
! 79bc7e26f39653588a58b11336f82aeb  gcc/ada/sem_ch10.ads
! e4f99936bb2871c451e35d7d11c25698  gcc/ada/sem_ch11.adb
! 64028d5bd4aa02edf513c2a5c1826530  gcc/ada/sem_ch11.ads
! d694dd519c5f789cad58721e253a122d  gcc/ada/sem_ch12.adb
! 5331f51f39581254e5c1dbbd0e475d28  gcc/ada/sem_ch12.ads
! 6aeeb7f3c41e49b19da415ca11a85767  gcc/ada/sem_ch13.adb
! 87174c7b267e1b9dc81a5091770097fc  gcc/ada/sem_ch13.ads
! 8c14b8558181576205ff17817a3cf8df  gcc/ada/sem_ch2.adb
! ff60fe2e05a26faa93a2a7b67096abb0  gcc/ada/sem_ch2.ads
! bb4d40e2b459128f5d338c5fc2728f61  gcc/ada/sem_ch3.adb
! 482c8765cc6f649b0ec7e1ca5c9468e4  gcc/ada/sem_ch3.ads
! e86e0f302e7aa63837499619c5c2f695  gcc/ada/sem_ch4.adb
! cbe2249b846df4671a17137587ddbfcb  gcc/ada/sem_ch4.ads
! 18f0260ca5de6ca73d3bde744b2fcdb4  gcc/ada/sem_ch5.adb
! 800bdbfd7d8f4a9b628e9c502f4c63b9  gcc/ada/sem_ch5.ads
! a8172ffa6afd8a861ceb3da1a9296516  gcc/ada/sem_ch6.adb
! 6ec9de00de79861a1b35ea1b516dc1c0  gcc/ada/sem_ch6.ads
! 3c7348fe2f63b8400d0b192fcc031e95  gcc/ada/sem_ch7.adb
! 4ec373a7b97e85750c3f905f3404c224  gcc/ada/sem_ch7.ads
! 0508c243f39cd4204d780c3383529fae  gcc/ada/sem_ch8.adb
! 740a8551c0b303df2c01c5afd32db5f5  gcc/ada/sem_ch8.ads
! 5347cdcc13660bb0078bde79da7dd0f8  gcc/ada/sem_ch9.adb
! 733da863bddfbe7c28f4dfadb75caa71  gcc/ada/sem_ch9.ads
! babb2b0ebf80a619317b511afab18350  gcc/ada/sem_dim.adb
! 67c30c4708f759e2c20999a1ade7b639  gcc/ada/sem_dim.ads
! 5bfcc30e4eaef66077fd0afeab4f6cef  gcc/ada/sem_disp.adb
! da1f9dc66ffa3e573fc659da888aa56d  gcc/ada/sem_disp.ads
! 95e651ed27f89a05b3069890f6e1d60b  gcc/ada/sem_dist.adb
! c4a7589fafcbce992911887125403fe9  gcc/ada/sem_dist.ads
! 1cadf7e42bb0e5c662dbe0d71e0d4183  gcc/ada/sem_elab.adb
! 111866dc77e8e07616b2227a95bb492f  gcc/ada/sem_elab.ads
! a9f6ccfb3b3d25af8699d16d5eb39a61  gcc/ada/sem_elim.adb
! 6c058e002c04cd30e3775f70175d66bb  gcc/ada/sem_elim.ads
! 5e738ff5bf6c12d8fa929aa242f0e6b6  gcc/ada/sem_eval.adb
! 2c367ed8b4c68e138cdcaf52616b62ea  gcc/ada/sem_eval.ads
! 185914ec9390902862ce4d3a90966562  gcc/ada/sem_intr.adb
! 70332de027e0adf40cb45b491f3b4db3  gcc/ada/sem_intr.ads
! 829b02b037f39a816bd2e5f37a48dd9e  gcc/ada/sem_mech.adb
! ced6f4c926b27df96eabe9cc72246849  gcc/ada/sem_mech.ads
! b7cb1944ad2e4d61e7a6499657b6b2e5  gcc/ada/sem_prag.adb
! c6e6052728dc8f38b8706c60a66f87ce  gcc/ada/sem_prag.ads
! 7ce3735415ba26c26e07da64fa468dd3  gcc/ada/sem_res.adb
! 8aafa0bbe0659305fca1075cf9a63c76  gcc/ada/sem_res.ads
! 30540a00a0ce832eed79b6ff5b0cc1c5  gcc/ada/sem_scil.adb
! 59032b02529742b631ce33ade9468c5a  gcc/ada/sem_scil.ads
! 2c138b358f7901202d2c96edfdfc1f1b  gcc/ada/sem_smem.adb
! 478eb6ea661d5b540267c4201773eff1  gcc/ada/sem_smem.ads
! 51410f50817afb7b5094d6a6e5df03ce  gcc/ada/sem_type.adb
! 7e6ab12fc0bce9d19b4e8e0b9327be8f  gcc/ada/sem_type.ads
! bcf68d301dcea3e1e527845ed079cbc0  gcc/ada/sem_util.adb
! 746ca2f7005c08414f729a68fc968c6c  gcc/ada/sem_util.ads
! 60cb492388f0caa03e204c000be58bd0  gcc/ada/sem_warn.adb
! 7b374cdde28e95c32461b8d806966e17  gcc/ada/sem_warn.ads
! 5fd3414f332fe2b02bd14ccd6d951b9e  gcc/ada/set_targ.adb
! 82df0579aa8194f9e54a816e317141e3  gcc/ada/set_targ.ads
! b445347192ca80b7acf2b09228dff955  gcc/ada/sfn_scan.adb
! abfa22d631dc21630485221e945138a2  gcc/ada/sfn_scan.ads
! 6af1769adb8fbb4143e9f6e06691f8f4  gcc/ada/sigtramp-armdroid.c
! 39c941f5460479083c8d189c2bfe3d5a  gcc/ada/sigtramp-ios.c
! bd78eb5982c8703be6ec06af46de6618  gcc/ada/sigtramp-qnx.c
! 9d224c67981390aba02a2110bccab26d  gcc/ada/sigtramp-vxworks-target.h
! be8f16b5fda01ee355d51280fdb4ab78  gcc/ada/sigtramp-vxworks.c
! 7eb5df6879c058a2bd811b74f8206cce  gcc/ada/sigtramp.h
! 7557fb8957d940e9f72bda1fae30ea4f  gcc/ada/sinfo-cn.adb
! 48ae2cf1843051e94b3d19b75ea3e86e  gcc/ada/sinfo-cn.ads
! 485af01f4701922b5592c6a772073ec0  gcc/ada/sinfo-utils.adb
! d52777101a06469b82866ea6710e3aab  gcc/ada/sinfo-utils.ads
! 89889fc2b16e4a41f68936945fc14cb4  gcc/ada/sinfo.adb
! 61d06f6c02cc84756de595ac14af16e5  gcc/ada/sinfo.ads
! c630b8b087800655f9f68595ed31039c  gcc/ada/sinput-c.adb
! 7665c1614c6d82c2397f4f9b2a3f7a54  gcc/ada/sinput-c.ads
! 5b8e7cb6de5fdfb10b61b54c495dcef8  gcc/ada/sinput-d.adb
! e6c477a86d6b90c74f715328b4602084  gcc/ada/sinput-d.ads
! 83bd925a96feead168eb84165ca15512  gcc/ada/sinput-l.adb
! b2714489d6ffd075bd3fcf385e87d358  gcc/ada/sinput-l.ads
! 715af354108ce873f01834a8adbfd5b1  gcc/ada/sinput.adb
! e2ab251bb158aa0bdc6c55cf46bf17ec  gcc/ada/sinput.ads
! f95f0e1a0ced56502d8f72e9026d0909  gcc/ada/snames.adb-tmpl
! 0623d156a141a88687d5cf8cd7f055ef  gcc/ada/snames.ads-tmpl
  1d0f0a946dfb952f009ada43305106dd  gcc/ada/snames.h-tmpl
! 98e8ababdc8c2e15a262eea1ee505af8  gcc/ada/socket.c
! 19de92a56bb55fdc929066a4ed15dc51  gcc/ada/spark_xrefs.adb
! 4512bc3a91b233dfcb01de83fd8caef1  gcc/ada/spark_xrefs.ads
! 6771b278fa039eb1672c0592c961c73d  gcc/ada/sprint.adb
! 75285d04f5d8ed2c57d4c0648aa0f162  gcc/ada/sprint.ads
! 04363a2c5bb49ef6551523ef8ab92c11  gcc/ada/stand.ads
  92510faaca8c15e63e6f22f0b28dbe5f  gcc/ada/standard.ads.h
! dde969526472fe586cb92a061a40367b  gcc/ada/stringt.adb
! 091647ee57507a8445d2e57c02d9d0df  gcc/ada/stringt.ads
! a070e6aceea52d9d09d6939b5cd2df27  gcc/ada/stringt.h
! bd19d7e1162caf199ddd96ceff4884ad  gcc/ada/strub.adb
! 2e9a0f935b2786582b55471a76eb95fc  gcc/ada/strub.ads
! c20ac80677d52d6e1eefd04f1232ab86  gcc/ada/style.adb
! 0a579d24768b9a3de6dcd58962e59237  gcc/ada/style.ads
! 39224e09ec8a539f140be0eed27267a5  gcc/ada/styleg.adb
! 3df435bc79781cc6b6c12a406c1ab5b0  gcc/ada/styleg.ads
! 78b4d6bf503e599c275cd38ed609bab6  gcc/ada/stylesw.adb
! 9f80da542815841b4d95c5f7a1d8d27a  gcc/ada/stylesw.ads
! d1dd1331325bbefdfa9d9bb5bdbfeb4c  gcc/ada/switch-b.adb
! 07d30e29e7eca0b7c17d6d35ea3e4510  gcc/ada/switch-b.ads
! d440c7918568b171f2fba32f813774ab  gcc/ada/switch-c.adb
! b771c79a47713857d98e39ad3697b329  gcc/ada/switch-c.ads
! 3d61a6a02b0a95565d156cd1571bf25d  gcc/ada/switch-m.adb
! e252ed7e29a9d6cf49aa1eef23d28f77  gcc/ada/switch-m.ads
! 48133129809d3cd1831ec20501fde6f5  gcc/ada/switch.adb
! 4e17809bdbb37e7f1a4af4181036c9c2  gcc/ada/switch.ads
! 1e1a9c74287a321534640ccba1c830f2  gcc/ada/sysdep.c
! c475353d4a2e397b288485e6e2465906  gcc/ada/table.adb
! 50382173ce842e671b02093114cc5568  gcc/ada/table.ads
! 285bec0062294c8235077b5b67c353cb  gcc/ada/targext.c
! 4014db88e71236f1f165687b3d1dccc7  gcc/ada/targparm.adb
! f8712aba7956a2e69a699b5e7e1ab120  gcc/ada/targparm.ads
! 3a066fcfdd4138ea99004b941048c50a  gcc/ada/tbuild.adb
! afb3dbfe79a801182d6beea14ab9e2e7  gcc/ada/tbuild.ads
! 64efa8cb3294c9f863e52153cac11b78  gcc/ada/tempdir.adb
! f775bea80d4cdf2c5b8337c6c157240d  gcc/ada/tempdir.ads
! ad3a082f7308f338cec4f42c7688e3af  gcc/ada/terminals.c
! f0996b5accb2882de47099fa73dff763  gcc/ada/tracebak.c
! e5f7440f9946f2870b643e88a70eba19  gcc/ada/treepr.adb
! af5666ffc69041fdca0fb0986dc7d4c3  gcc/ada/treepr.ads
! c40575ddefb1cc7ab9a0b50e42cbe943  gcc/ada/ttypes.ads
! 55bff27547e72deb761d4133710b8ab7  gcc/ada/types.adb
! 9f116d3fc488f135370afbedea833b9c  gcc/ada/types.ads
! 3174678735343fa5d7d6d0e658c5b349  gcc/ada/types.h
! 98e5aac240575d1b0a4143875e3e6f19  gcc/ada/uintp.adb
! 6ef967eb58384b920abb990ef7a844d2  gcc/ada/uintp.ads
! de232673004ab271995b3d25645632aa  gcc/ada/uintp.h
! e415f4bddfd4a515542b7960270421d4  gcc/ada/uname.adb
! 8bcad65a862106190fbea6635d6eee96  gcc/ada/uname.ads
! dd342f515874b28dc64b29e7214df18d  gcc/ada/urealp.adb
! e07d1a0dccbb7addcf0eb6736ee0cecb  gcc/ada/urealp.ads
! d185de024e397dc6e20a7405ce074fe3  gcc/ada/urealp.h
! e2c8eddfb8829984bc16d92fd467c3e7  gcc/ada/usage.adb
! c1e639a7e03ec39e0fd228126cfc9029  gcc/ada/usage.ads
! f6b908ab4dfb434bd6afac8d19ea3276  gcc/ada/validsw.adb
! 37b910fbabf4f79382fbd303e310d9fc  gcc/ada/validsw.ads
! dc26bc03330c6085ea3ca9b101ce682c  gcc/ada/vast.adb
! 9900e838f80047e22058c2d7ac2b35fd  gcc/ada/vast.ads
! 107a84185fe50c348afd3b9e76042a6e  gcc/ada/version.c
  49ef8bc97a344f91b927f23054ade642  gcc/ada/vx_stack_info.c
  884e1a54368295893128977447d7e59c  gcc/ada/vxworks-arm-link.spec
  e158d4a4cda56237d4f66dfddc3b9915  gcc/ada/vxworks-e500-link.spec
*************** f972a9a2e32e4d6aa260193203ee6862  gcc/ad
*** 2956,5031 ****
  745188949cd7ff6df266579735782385  gcc/ada/vxworks-smp-ppc-link.spec
  297ba61aeda52a880298da8069891ecc  gcc/ada/vxworks-smp-x86-link.spec
  cf24e76097812a932a26f6600d193208  gcc/ada/vxworks-x86-link.spec
! 860c19e56f3d39ef44e44c1fd41664dc  gcc/ada/vxworks7-cert-rtp-link.spec
! a4c31f21970c4586891846b93f40d801  gcc/ada/warnsw.adb
! 827ebed8c15baa4d09bf60dcaf8d97ca  gcc/ada/warnsw.ads
! 18f178163a20a1f25824b55fe75ffe79  gcc/ada/widechar.adb
! c3fe0a30d997ac558d8cd369b7848277  gcc/ada/widechar.ads
! 53e96745130f200c3bdc708db6b848de  gcc/ada/xeinfo.adb
! 2fd4e080391f7b2fe016d3ebfae35e3f  gcc/ada/xnmake.adb
! f5203a4415586ebb91f04d9c4e2b31ad  gcc/ada/xoscons.adb
! 5955570573ef24673f2b0afa7613b803  gcc/ada/xr_tabls.adb
! 40d136e505894d95d0c42d24f33953db  gcc/ada/xr_tabls.ads
! 3ded8aeb3d8f019e732ae277202835e3  gcc/ada/xref_lib.adb
! b7ff47b27255dd50263543f0b5aa9135  gcc/ada/xref_lib.ads
! 127f5d43e21d4717e276071b82baff90  gcc/ada/xsinfo.adb
! 070e810a3ce06654af6d39c5a7c7d5f6  gcc/ada/xsnamest.adb
! c309b7a190960aa537e3a7707a67bb65  gcc/ada/xtreeprs.adb
! 6159f99c522f8dcc77d11e24ea792dbc  gcc/ada/xutil.adb
! 0031559b96ebc24dd2c747d1f8a00f12  gcc/ada/xutil.ads
! d3e945808548972240fb2f1b7494a8bd  gcc/addresses.h
! 3045d45db0db300d02be3c139d5f8c5b  gcc/adjust-alignment.c
! b7a90c45c5477c6b5975292eb532f64f  gcc/alias.c
! 5446b95e14f1a787f9e0a6d82db041bf  gcc/alias.h
! e561a7bae0b2b221a73a390c77be757b  gcc/align.h
! 23442a2d3df1b83bd32978d68e46bcd1  gcc/alloc-pool.c
! 3ec9e55d9093d096913575231b7b7943  gcc/alloc-pool.h
! 3700ac4b73516aef576260d2391e704d  gcc/analyzer/ChangeLog
! 7ea5759779b2ed252edaea813907bd5a  gcc/analyzer/analysis-plan.cc
! 4717c47360bc5772a2a5d0afdeae18e0  gcc/analyzer/analysis-plan.h
! 73de39c552e216c1cc1fe1e7d3513cc6  gcc/analyzer/analyzer-logging.cc
! d0081cc7ad4b5cba46ab06970fa72bb2  gcc/analyzer/analyzer-logging.h
! edca3a9887d89c37586785c292fc5989  gcc/analyzer/analyzer-pass.cc
! c2cf9d34a21571d8acec6c8231a49bbb  gcc/analyzer/analyzer-selftests.cc
! 56894b238dce27535cfbad7a39b76e16  gcc/analyzer/analyzer-selftests.h
! ab1a1c4c3f82ed6806cb4e722e3a66c3  gcc/analyzer/analyzer.cc
! 8e9753a2a1580e8a67fbadf3758c48d8  gcc/analyzer/analyzer.h
! 661c0babcf0e7a5138917c2fc3ec2edf  gcc/analyzer/analyzer.opt
! 1ef3b59ee3119254057f7cd83ce90fbf  gcc/analyzer/bar-chart.cc
! 3083d2a026bd42d40613d43c2f21fcc4  gcc/analyzer/bar-chart.h
! 9b62ca6dc34a09f50145f5b61d272bad  gcc/analyzer/call-string.cc
! 1f760f478bba4edcb281d68edb9045c5  gcc/analyzer/call-string.h
! 15700e7ecc5645ea48ce677e8f54ad7b  gcc/analyzer/checker-path.cc
! 20bd401aba0e7a732049c44b41bbe604  gcc/analyzer/checker-path.h
! e8bbf1718bd23bbe0021e69270c32966  gcc/analyzer/complexity.cc
! 9ee3719737d8440c3e6b1f925e350525  gcc/analyzer/complexity.h
! 5bd662ff33a0283b78b88921a93def50  gcc/analyzer/constraint-manager.cc
! 4ae502dacd7c0ccc679154922478e4e0  gcc/analyzer/constraint-manager.h
! feb7fc05a744e341ecb884bfc9c7d22b  gcc/analyzer/diagnostic-manager.cc
! 28fdf2442227e1253d37b0857f997501  gcc/analyzer/diagnostic-manager.h
! b7dc93d879e6f60c5ca02629b8dfe79a  gcc/analyzer/engine.cc
! e90f82f6fa234cea036d87c315906a4f  gcc/analyzer/engine.h
! a07ce96959a56e56ecc042d055a3d0e8  gcc/analyzer/exploded-graph.h
! ebeb52d49420ae2b268ffbfc4a02e515  gcc/analyzer/feasible-graph.cc
! c5724208b3a91394da482f45c5125d46  gcc/analyzer/feasible-graph.h
! e9260f872f4deaa00e67cb88fcc970b0  gcc/analyzer/function-set.cc
! 9b37bde9380e5bdca3a8972023d4b11b  gcc/analyzer/function-set.h
! ae169b6a0f9422d8a83bc87caf63ac71  gcc/analyzer/pending-diagnostic.cc
! 58cd6ebab838e4c3eb2c07f925a0aa87  gcc/analyzer/pending-diagnostic.h
! c2fb252f174415b0644c6deee8b3af95  gcc/analyzer/program-point.cc
! 09b1408fbe1c9a1f43ac1f8de6599084  gcc/analyzer/program-point.h
! 525d1d5ec60d82f913ae7c906029e265  gcc/analyzer/program-state.cc
! c4d612a96ce20b139f0d233760a0cb77  gcc/analyzer/program-state.h
! 838a432ea8dde43104d6e6d9b06fa101  gcc/analyzer/reachability.h
! 4f1084100e6452ac8cd6245011a452cc  gcc/analyzer/region-model-impl-calls.cc
! 24e3dae926e0e8df754fe8e26c7def58  gcc/analyzer/region-model-manager.cc
! 9faa52eb7a0589418eea7610e39ea842  gcc/analyzer/region-model-reachability.cc
! 0a0e9c1f4c814b36727206784fad7196  gcc/analyzer/region-model-reachability.h
! d1223839f9414ea0ab78d438abbce07a  gcc/analyzer/region-model.cc
! e3f0536bf76e036335b94f367751d88f  gcc/analyzer/region-model.h
! 3cc645a582a40be05f73777684522788  gcc/analyzer/region.cc
! 821031b2cb42153e649f270612c73ce9  gcc/analyzer/region.h
! c4dac83db9546e290daf74b0b530b9e7  gcc/analyzer/sm-file.cc
! 031ff545a2c1daf317d211e69bda3e65  gcc/analyzer/sm-malloc.cc
! 2d359609f738aa3f949920ac674fb886  gcc/analyzer/sm-malloc.dot
! e60888404e0efbc46edbb012bdffb470  gcc/analyzer/sm-pattern-test.cc
! 38650323e4aacbf04621da597ae78fbf  gcc/analyzer/sm-sensitive.cc
! fc8fa3324d4b1cee7dbe09b5c359392e  gcc/analyzer/sm-signal.cc
! 6a6be25f52789d81fc74c632e9905b18  gcc/analyzer/sm-taint.cc
! 7565695a16e50fea758de778ce2e517b  gcc/analyzer/sm.cc
! 2d56c8f91158fc747839add6dd1f883d  gcc/analyzer/sm.h
! d1740145f2366ef993079808555efe90  gcc/analyzer/state-purge.cc
! f120126786d5313c48e4fbdef1deb90f  gcc/analyzer/state-purge.h
! 87123a6a3ba276a82f3de4cb90c0459f  gcc/analyzer/store.cc
! d126912489f635e7522c41ae704a59c6  gcc/analyzer/store.h
! 8e4eceefe5a130b8fe395934d81e06f0  gcc/analyzer/supergraph.cc
! b1345e496e4e4a76d182dc95dd2b92b2  gcc/analyzer/supergraph.h
! b49b0004f99fd470658a7d0207bc8917  gcc/analyzer/svalue.cc
! 863cc86de6157d498a4f09fdf38c1386  gcc/analyzer/svalue.h
! 185fe9c53545064ee1e53b91358f7de7  gcc/analyzer/trimmed-graph.cc
! 74a5cb5dcaf4cfb2dce05019ec345914  gcc/analyzer/trimmed-graph.h
! 4dc5fb48242295b1a20860e9026ef907  gcc/array-traits.h
! eb3c809269737f7f4c3b94e4a2bd8dbf  gcc/asan.c
! 487ef86d71c549a16efa36238b86952f  gcc/asan.h
! 542d06ea0e3478abe23c1efa8f3be1c9  gcc/attr-fnspec.h
! 56f7fa0363ae129223b5eb125d069fea  gcc/attribs.c
! b62a19a18359e023c63a5a045f9d97dd  gcc/attribs.h
! 0abcbaaeab3b080c913716fca5d4a9fd  gcc/auto-inc-dec.c
! 2eef15ab83617fc37f40877b720394d9  gcc/auto-profile.c
! 1963f1d6c80c316f8cdcc8a028d3c9ca  gcc/auto-profile.h
! 3ff58d5a06d5eaee37d7cb2ed6c43edf  gcc/backend.h
! c85b11c624a3273aac7365b0f34125b6  gcc/basic-block.h
! 28009e6ac712423681bc6e96d2da535f  gcc/bb-reorder.c
! d0ab00f1b3fc80f5bfda75adc6c362d6  gcc/bb-reorder.h
! 49ad33d59190a283fb4c85a41861b83a  gcc/bitmap.c
! 08cf7dff98e7181511efc1517f735186  gcc/bitmap.h
! 6b9e1cb83032742218edd1600590d286  gcc/brig-builtins.def
! 155f6d9e8fbc91e6580a8d2a5a0d988d  gcc/brig/ChangeLog
! 32f54aacbd7e3a02140d36f7e8f58da6  gcc/brig/Make-lang.in
! 966892b9e3cc742708ffb50160e7ea6f  gcc/brig/brig-builtins.h
! 0676a7ca45684ceb5fbde93beb5b3950  gcc/brig/brig-c.h
! 1ab2060328bc79a2d5aab21f6c206db0  gcc/brig/brig-lang.c
! f94aca8021e6a490ba7723b65c953cb7  gcc/brig/brigfrontend/brig-arg-block-handler.cc
! 8791e40b4d8eb3025ce1e6af8697faef  gcc/brig/brigfrontend/brig-atomic-inst-handler.cc
! 148977ae1d57373d3a3aa33549a74d27  gcc/brig/brigfrontend/brig-basic-inst-handler.cc
! 2865ff9eb0796e38b2c70eceb67aa4f2  gcc/brig/brigfrontend/brig-branch-inst-handler.cc
! 49a8ba9b4979fbfecdb6ece48df34c24  gcc/brig/brigfrontend/brig-cmp-inst-handler.cc
! 91f016167347657b197dff6cd86f92da  gcc/brig/brigfrontend/brig-code-entry-handler.cc
! 19928afd0221eeb84903ca84423a3773  gcc/brig/brigfrontend/brig-code-entry-handler.h
! d66d598c3e4be1925c68bfef41a30278  gcc/brig/brigfrontend/brig-comment-handler.cc
! f7be85bd0ce9385761c5dbcd1a5c67bd  gcc/brig/brigfrontend/brig-control-handler.cc
! db04bcb67edd115f1dadb16495b00111  gcc/brig/brigfrontend/brig-copy-move-inst-handler.cc
! cf531d6bd8a55ea294cae0b4ce59001c  gcc/brig/brigfrontend/brig-cvt-inst-handler.cc
! 8cb1946907d1e50bfe62b80a6db36c9e  gcc/brig/brigfrontend/brig-fbarrier-handler.cc
! fdc41a162dc9bc96ec960f5ec370e43f  gcc/brig/brigfrontend/brig-function-handler.cc
! 71c2aca0d5a08acc76bfdcbfc231e598  gcc/brig/brigfrontend/brig-function.cc
! ac8182a965c651e67da897bba8f68062  gcc/brig/brigfrontend/brig-function.h
! 4f9e8d2ef3ab796050f6c6cc860226f7  gcc/brig/brigfrontend/brig-inst-mod-handler.cc
! 31d82c5a14cdb5d60c80443ae6d8c3c8  gcc/brig/brigfrontend/brig-label-handler.cc
! 42d7129ee06bc0fb5a66ae30c6b353b6  gcc/brig/brigfrontend/brig-lane-inst-handler.cc
! f97038c577d5a0ba8d782c0e13ebfbe3  gcc/brig/brigfrontend/brig-machine.c
! 9a024092aa03ef009717a68dd809765c  gcc/brig/brigfrontend/brig-machine.h
! 82c9248d3281220cd4fac5fd8d63d63c  gcc/brig/brigfrontend/brig-mem-inst-handler.cc
! 58d6aaa137f4cbaa330c3c2957b2d877  gcc/brig/brigfrontend/brig-module-handler.cc
! f3f8c0764c443833babf1b5a331a8325  gcc/brig/brigfrontend/brig-queue-inst-handler.cc
! 3244888dad48558f56ee651f6af3d1f3  gcc/brig/brigfrontend/brig-seg-inst-handler.cc
! 4a8139768883b5b66a7a530113c3c9b5  gcc/brig/brigfrontend/brig-signal-inst-handler.cc
! f24ee32cd3d2a773c8e82090769137f3  gcc/brig/brigfrontend/brig-to-generic.cc
! 69d79676fea8873f9bbc4fc07acf9af3  gcc/brig/brigfrontend/brig-to-generic.h
! 34b166e8b4897182a998fccb1be666b8  gcc/brig/brigfrontend/brig-util.cc
! d9e2fd4476f1d68098415f64337e84f3  gcc/brig/brigfrontend/brig-util.h
! 114b47262a72afdb81132cde6848ea39  gcc/brig/brigfrontend/brig-variable-handler.cc
! 92b81214376d948c1abf2f9123379808  gcc/brig/brigfrontend/hsa-brig-format.h
! a22024fd9249890634b3313bd1719264  gcc/brig/brigfrontend/phsa.h
! 178500afa7a1cecbc78ec0ef76332179  gcc/brig/brigspec.c
! cc2164b02cd1b96873ef661498e9eb6a  gcc/brig/config-lang.in
! 70db166d2ccbe32a49c48d3c4ede5d27  gcc/brig/gccbrig.texi
! a1cc43f2d0aedbd5540d15c4ec568a8d  gcc/brig/lang-specs.h
! 746844ca02d1cafc9fb4b3f354b3dc78  gcc/brig/lang.opt
! 1b7da82494d0c161ca60a8de1b55195a  gcc/builtin-attrs.def
! 0fb3ced35d472c83b8689686b224ad01  gcc/builtin-types.def
! f99fcf4646e7b70fc27e5eb3893e1f40  gcc/builtins.c
! ae94d8196a803d4a2c69cded88dbbb76  gcc/builtins.def
! f501faddb738e7422e75672d29bfc823  gcc/builtins.h
! a6e0fcbeafcff3f3e6f0f88984e46c7b  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
! ff19b079a30065b282983bff90d28fe1  gcc/c-family/c-ada-spec.c
! aaefdc238734ee62a127bef557ad07e3  gcc/c-family/c-ada-spec.h
! 815dd7c5b46ef4b50d5e40c0da6700c7  gcc/c-family/c-attribs.c
! 031c235f8d46cbe87d86009060c1d846  gcc/c-family/c-common.c
! e46ad48dbbcefe97d0490955db40eddf  gcc/c-family/c-common.def
! dfe16edb3b81b111e6c4034e30b62631  gcc/c-family/c-common.h
! b6e403e7f46d368695a66de3ed639255  gcc/c-family/c-cppbuiltin.c
! e8d118aa27a40cfef46375271877c458  gcc/c-family/c-dump.c
! 6ec458ba4f30ca4f67e8a0c37cbc852a  gcc/c-family/c-format.c
! 24ddc77a1aaacd70e8638b0cbeb2d12d  gcc/c-family/c-format.h
! 77e82f3c8d0ce0df0c22bbf84684cd21  gcc/c-family/c-gimplify.c
! 47cae120dbbc6dc65b3d06445c7ffd2c  gcc/c-family/c-indentation.c
! d0a5008a37b6b90aad01170ec4597384  gcc/c-family/c-indentation.h
! 987a47512367efd11640028189ddd6da  gcc/c-family/c-lex.c
! 5be62f7688c8de29dc7aa9faf1367d40  gcc/c-family/c-objc.h
! bf96a414cbeb69cd94bfeb88daa0056f  gcc/c-family/c-omp.c
! fe74cabeb11f779eecd7428ce0eaf1b0  gcc/c-family/c-opts.c
! 0c3e87810e8edfc7c91b38b0958fe994  gcc/c-family/c-pch.c
! 094ea467499de4520c5a2f6ee1abc7e0  gcc/c-family/c-ppoutput.c
! ff199d71952d05520517d7906169f3ff  gcc/c-family/c-pragma.c
! ae0c3df9ebba6d5955c4d243271bc4ef  gcc/c-family/c-pragma.h
! a8a409e310da7c679cbdab6592d319d5  gcc/c-family/c-pretty-print.c
! 020ff5f56ad03d7bca8b8eec66f6b106  gcc/c-family/c-pretty-print.h
! 4cf9dde57eca469e002941f3476f5e47  gcc/c-family/c-semantics.c
! 39f5e410e60e515e5090db5fa8b436e7  gcc/c-family/c-spellcheck.cc
! 81ea7161b8159e20b33f0b4e8cf4c29e  gcc/c-family/c-spellcheck.h
! 1b4bd0524aaca890cc050af5017a483d  gcc/c-family/c-target-def.h
! 2a979b918b62205beea7e25f63c95fff  gcc/c-family/c-target.def
! 25b2b1b67352149295b6b87a3266dbfd  gcc/c-family/c-target.h
! 76c24983e5b87d60c98c49b5e39fd292  gcc/c-family/c-ubsan.c
! 687717e96ebfecf566b59f5ed52dd61c  gcc/c-family/c-ubsan.h
! 4a2cb3c29a7d2f8188445559577ab548  gcc/c-family/c-warn.c
! bf642fdf30770e997cdf36ff997db522  gcc/c-family/c.opt
! dda3a883f8b1367723b357a3494a9ad2  gcc/c-family/cppspec.c
! 03976e75d63506e61159cb33e38a17a4  gcc/c-family/known-headers.cc
! 24a64eac5a3ca85c2141b26c328e720c  gcc/c-family/known-headers.h
! d945fcf11b0cf9b680801477d4d6dc5d  gcc/c-family/name-hint.h
! 10c210b270bd57796c125ceacb8aacf3  gcc/c-family/stub-objc.c
! ecf4e71780d21ba6285bd549d11cd5ab  gcc/c/ChangeLog
! c2c16ebc27917ec274266a7f0a5de762  gcc/c/Make-lang.in
! 4b3d7694a2cabd663e29accad2dc49fd  gcc/c/c-aux-info.c
! 477103be514e3fee8add675ebdf6c643  gcc/c/c-convert.c
! 921f0c40165ee46a2a9839c794b075b8  gcc/c/c-decl.c
! 252e1c166ac85eeca88c8832c302422b  gcc/c/c-errors.c
! c55b3e5a9640ada3dcbf15fce3d36e8d  gcc/c/c-fold.c
! ac32535d53226e7747b1f0c599af0aa6  gcc/c/c-lang.c
! 7679e451f36a4519a03c17b2df2b1f45  gcc/c/c-lang.h
! e52e3c088bd255130df86d60669a01b4  gcc/c/c-objc-common.c
! 6dedcac49f0945db05052a9a1ccdba34  gcc/c/c-objc-common.h
! fd9cc8f7a7047c24872ebbe627edde56  gcc/c/c-parser.c
! e8275c52f6f57f9005771a7e88cab453  gcc/c/c-parser.h
! 88b5db93f3375c32222a9f47e689286d  gcc/c/c-tree.h
! 9d4291cceb1ce6c6bd32ede937605c34  gcc/c/c-typeck.c
! 14475dbf3b5b7a18fbbedf33d6d8b389  gcc/c/config-lang.in
! aa25d2829660b30c35d0853ebf4823c8  gcc/c/gccspec.c
! 5543668009c8b1a506c088278d56eb1f  gcc/c/gimple-parser.c
! 11de19cdadf88dc735a98424b4446d0f  gcc/c/gimple-parser.h
! 6e9b6512ecb2e91435f3965783d9d8a9  gcc/caller-save.c
! 8e298cc5c5aa2b4402f0ed79d2e9924b  gcc/calls.c
! 9d7dc213758e156c7688bea530991bbb  gcc/calls.h
! f8f30bc82844b74d9260c5b65a8df708  gcc/ccmp.c
! bcc5728c95c60624d67bb7472fc6bfbe  gcc/ccmp.h
! c79281095d98e567b1cdd6bd2e75a3d7  gcc/cfg-flags.def
! 63d656248058bc51a5dbfd25e2e5bc28  gcc/cfg.c
! ca6328adbf190b5d1895b2f4bf21c53b  gcc/cfg.h
! a3f6082ee8044d951dd495cf2599bd46  gcc/cfganal.c
! 06649f7ed6b72ab7eec91dad178178ce  gcc/cfganal.h
! 2ac76b0a5a1835a7bd0662c6595617d6  gcc/cfgbuild.c
! 8d2d2838a75a74f980c02a0c1dccc6f7  gcc/cfgbuild.h
! a087ea8cb868ef146a0166e01834b655  gcc/cfgcleanup.c
! 76493c30b63093a62270af2c53f028b4  gcc/cfgcleanup.h
! a7caec3104f1896bbb3ee04a20132035  gcc/cfgexpand.c
! c4c6266c4888e09280fdca3bcdd6c927  gcc/cfgexpand.h
! 241b624068329a0557ba643040ea7a52  gcc/cfghooks.c
! 2844f8c444cf87319afcc888a92372d4  gcc/cfghooks.h
! 13550c9ff7be56f421a602f6ba842631  gcc/cfgloop.c
! aa71757a8881b31ac75eda23b83e392d  gcc/cfgloop.h
! 532afc445fb123afc9610af6032bf074  gcc/cfgloopanal.c
! 11cf49613ab20334c1fc9121524d6381  gcc/cfgloopmanip.c
! 48131d2e7e0d663e5f4d7a8c8c2863f6  gcc/cfgloopmanip.h
! 4baf418bb54906cefac073f3ff23dd15  gcc/cfgrtl.c
! 627d4ecbd5c5b924d8cd3e490761285c  gcc/cfgrtl.h
! 3c76f58b3f3e0e44a99975afed43c27e  gcc/cgraph.c
! dccdc21f74f0e2a035bc78105bec8a3e  gcc/cgraph.h
! ab4feb9f136b4b239302421056d5aa8a  gcc/cgraphbuild.c
! c8a1525cfb171995108034e37d5933a6  gcc/cgraphclones.c
! 2b08a54f89b4650895dbbcdb3e2d34e9  gcc/cgraphunit.c
! 521bd63dc8fb9c35c26f7a2b7c04f7c6  gcc/cif-code.def
! b49865466bbb7aec08e5fc1f12b8fee1  gcc/collect-utils.c
! 35567207ddff3c6a55598c11201c07e9  gcc/collect-utils.h
! 2e9b2ff70bc3b01d2592857c05906fe9  gcc/collect2-aix.c
! 4a4133868bd2d57a5c7ee709f9bc72d5  gcc/collect2-aix.h
! 93da9730bf6e1f09161d471415ab49ce  gcc/collect2.c
! e7cf7224890831969cdba55079c3f8c5  gcc/collect2.h
! f7e4d84c9831e6b006e3abaf0cda296d  gcc/color-macros.h
! ed6f48014eba9e2fdba773c6bbc66f41  gcc/combine-stack-adj.c
! a75f6f58e211cbfa8cfc60d8948c376d  gcc/combine.c
! 654752e8e1da5146591a7aa1c1503728  gcc/common.md
! e830d7a639390f601506579c91d429ac  gcc/common.opt
! d39719c8a8249d7c11783eb1a99e6629  gcc/common/common-target-def.h
! 77b5f9067bdf47c77a81595371bc8097  gcc/common/common-target.def
! e99e94f2234ef2a69147e0d4ee70f2b4  gcc/common/common-target.h
! 52e3ac42276a17461e1787c6a7933909  gcc/common/common-targhooks.c
! 2faa1fd8c8565c8fcbefea103dc655ef  gcc/common/common-targhooks.h
! af218d96808155b08cb781a3ceae404d  gcc/common/config/aarch64/aarch64-common.c
! a303a5d9bcbab6c766f777d8ea7bf8ec  gcc/common/config/alpha/alpha-common.c
! 5ec3ee8198db84e2d7c130fdcecb2628  gcc/common/config/arc/arc-common.c
! fe6482419bd8014a1b35d1ba6ce090f0  gcc/common/config/arm/arm-common.c
! 105247587f3306522c28945279c5b3d5  gcc/common/config/avr/avr-common.c
! f85c0fadead416e555bc6af5c42571eb  gcc/common/config/bfin/bfin-common.c
! 1393f4a9986b435c97277636348da4ef  gcc/common/config/bpf/bpf-common.c
! f6d39339d06de4679e87dfbf8ab1d6e5  gcc/common/config/c6x/c6x-common.c
! fcc86a4ca8d05def4429d5630636c248  gcc/common/config/cr16/cr16-common.c
! b9e205cf83be687340f57069d2828c97  gcc/common/config/cris/cris-common.c
! 6e1692541aa64c28e46a5bd1f5d0bf6f  gcc/common/config/csky/csky-common.c
! 0f7312b8d0b66dd632bf83c70a749e6a  gcc/common/config/default-common.c
! 16ddfb2f9271e0c991efb9c914d2e313  gcc/common/config/epiphany/epiphany-common.c
! 889c4b13dfecfa86c2bac4eda05dd951  gcc/common/config/fr30/fr30-common.c
! b302028eafbaf815953381baed1c74b4  gcc/common/config/frv/frv-common.c
! 9b09cc59d4b2abf439f40174f9576a69  gcc/common/config/gcn/gcn-common.c
! 4c82be520bd57ce5fdb0b57810fa90c9  gcc/common/config/h8300/h8300-common.c
! cc097d962111af656c91ce30b31c5590  gcc/common/config/i386/cpuinfo.h
! 6dc32a89301fd0b5dcf0460900c0f84a  gcc/common/config/i386/i386-common.c
! abdf89aeee73e0bc78d1c7c7096c04de  gcc/common/config/i386/i386-cpuinfo.h
! 2b7433f285684f4da203c7d39cd60be7  gcc/common/config/i386/i386-isas.h
! 41afdf8ce4284f33a46b2605ce6eafc7  gcc/common/config/ia64/ia64-common.c
! 48dcb9e9504ab558c9bfeb4d255c570a  gcc/common/config/iq2000/iq2000-common.c
! 6d748e18cdc7a7d21a35e4e486f5a396  gcc/common/config/lm32/lm32-common.c
! a1588ef1737452dcc45b75928e6ca171  gcc/common/config/m32r/m32r-common.c
! bc1ffa91addb2c8818396addfed9f55c  gcc/common/config/m68k/m68k-common.c
! 036b71eb6252f1d4da64d732fc95724c  gcc/common/config/mcore/mcore-common.c
! 9257dab20a02dde649e3458bfdbf3dc4  gcc/common/config/microblaze/microblaze-common.c
! 2a8a73eac7cb4fe038d7140a6c49ef0a  gcc/common/config/mips/mips-common.c
! b6419c337568dd173d2f8c1e4f3faed3  gcc/common/config/mmix/mmix-common.c
! 26477273369d8c91549deb7113bc8f11  gcc/common/config/mn10300/mn10300-common.c
! 5a70e12ecb200e388b740c40a310b8d2  gcc/common/config/msp430/msp430-common.c
! fac874fb3e2ac405b8a89713fa296443  gcc/common/config/nds32/nds32-common.c
! da6eae53a78649d358a44750e71ba100  gcc/common/config/nios2/nios2-common.c
! c90e4a6fa0f79bf807dcfbed250daa98  gcc/common/config/nvptx/nvptx-common.c
! 98f8d987b5eefbb63a8c11517af73bcc  gcc/common/config/or1k/or1k-common.c
! dcf26e1a553f369f46a4715d27f98011  gcc/common/config/pa/pa-common.c
! 632a5fdabf385ce711aa58e26b678e45  gcc/common/config/pdp11/pdp11-common.c
! dc136056beaa5131fb60de92a65b0cd4  gcc/common/config/pru/pru-common.c
! cce42ab829b767cbf008002ca7266ee5  gcc/common/config/riscv/riscv-common.c
! b96b79061c46add3630b3c0932b23d01  gcc/common/config/rs6000/rs6000-common.c
! 356ae7f15ec175ef0839a3cad41c7a8d  gcc/common/config/rx/rx-common.c
! f5dd8177e9c897ae8b1af68158785443  gcc/common/config/s390/s390-common.c
! 7e2a19d57fd75e9f77c7f92f0461111f  gcc/common/config/sh/sh-common.c
! 0d35cfa0c5b6fff1703404123f09de26  gcc/common/config/sparc/sparc-common.c
! f969c92621b2f91048e39bbd4160557a  gcc/common/config/tilegx/tilegx-common.c
! e6160ce2fa84e59a23f085913b5b21b1  gcc/common/config/tilepro/tilepro-common.c
! 8cc892ccbea812b016eb83c06b903b42  gcc/common/config/v850/v850-common.c
! b06bd63be3390da03901ca5e4793c912  gcc/common/config/vax/vax-common.c
! adba2f65f35979e33c3e4f513a73203f  gcc/common/config/visium/visium-common.c
! c76932f579954210dab548bf32d46347  gcc/common/config/xstormy16/xstormy16-common.c
! adb9f88eafb276d0ce398300d4103015  gcc/common/config/xtensa/xtensa-common.c
! b2ffc0034da9ccbf178a5e5748c52c0a  gcc/compare-elim.c
! e4b6829ec591a11a2cb0db458fe65ff2  gcc/conditions.h
! cc62394ef13d37ac049f14027a48482a  gcc/config.build
! 186f10f255472d14437dc2b523ace799  gcc/config.gcc
! 31bf67644c4d7d8b27828e16398dc1d9  gcc/config.host
! de5f053f58e1109f62bcdbdef6b90b44  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
! 1e9e77d433aa4a980b2aa08ff1ac55db  gcc/config/aarch64/aarch64-arches.def
! 1ab879dfa2a1dd57f0cacc5494704f42  gcc/config/aarch64/aarch64-bti-insert.c
! 73f1d76b1e34329d429fa9dd801cea9e  gcc/config/aarch64/aarch64-builtins.c
! 40828c1edbad134cf62039c3f3acb336  gcc/config/aarch64/aarch64-c.c
! e59a3f748c562e36ae56da5a4a570356  gcc/config/aarch64/aarch64-cc-fusion.cc
! 6fb063c2a47c49fad6e24534f9f99f8b  gcc/config/aarch64/aarch64-cores.def
! b4d9dcbbe8caafbf9854283fbc6e3238  gcc/config/aarch64/aarch64-cost-tables.h
! 7a209f0ae0add87b9144ece813928a90  gcc/config/aarch64/aarch64-d.c
! 89bdbb01cb73e3f0919c1d6d2ba307bb  gcc/config/aarch64/aarch64-elf-raw.h
! f21ecc1635eb9a794f1d03cc75500f1d  gcc/config/aarch64/aarch64-elf.h
! 90d5a8b0bf7c4aee052f2892bd06cd9f  gcc/config/aarch64/aarch64-errata.h
! 8933374edbf830f362aa88cc9cbf56bf  gcc/config/aarch64/aarch64-freebsd.h
! 81e20548549eec1bda12655880536aff  gcc/config/aarch64/aarch64-fusion-pairs.def
! 4bf6eb8aa5d716f9f3868a520832836a  gcc/config/aarch64/aarch64-ldpstp.md
! 02999a24065853e9ae6c97ba1453c6e2  gcc/config/aarch64/aarch64-linux.h
! 900f62f582105e91c9eba7381f3b34a0  gcc/config/aarch64/aarch64-modes.def
! c5cb6a8b03d65fae0375198834e67a89  gcc/config/aarch64/aarch64-netbsd.h
! b94d8d3eab975242d7f1db8a1921e2d4  gcc/config/aarch64/aarch64-option-extensions.def
! 5070a0c7b6edddd4794f877823f6a675  gcc/config/aarch64/aarch64-opts.h
! bd39101ee7e523cee8589bddf788a863  gcc/config/aarch64/aarch64-passes.def
! 74161d5048d9a6a157d644ae98ba38e0  gcc/config/aarch64/aarch64-protos.h
! f4e8ddb01a0c073af7bd47950e5052d8  gcc/config/aarch64/aarch64-simd-builtin-types.def
! a57e7294debe2760574e76f5405efc29  gcc/config/aarch64/aarch64-simd-builtins.def
! 48798f4881b4294ff03e89b3573283b0  gcc/config/aarch64/aarch64-simd.md
! 5a9f2f65b25636e30ba5254866b36124  gcc/config/aarch64/aarch64-speculation.cc
! 2193126f11ce458f9f1292dcf8f9f1bf  gcc/config/aarch64/aarch64-sve-builtins-base.cc
! 2e5ac221624603ecfcaff6c29bbc8ff0  gcc/config/aarch64/aarch64-sve-builtins-base.def
! 6eb01fac73f48bc4c2e6486a90db2fe3  gcc/config/aarch64/aarch64-sve-builtins-base.h
! a48e47086140739b3f98e0b42b8b2c88  gcc/config/aarch64/aarch64-sve-builtins-functions.h
! 158c675614d9405feb5c84fa533b6365  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
! 21155877c1a7c30e32f03119e5d572d3  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
! d825b33742f9b68f8efbad389e7a83ff  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
! d7b507459d8322632f7a6054d221420c  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
! 27772360ef1e61832d4975722c8f9388  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
! 8b07b4ea6c45579f7a06fee6c687e734  gcc/config/aarch64/aarch64-sve-builtins.cc
! 84e976c61e7df417c4615f873f6260d9  gcc/config/aarch64/aarch64-sve-builtins.def
! 2bb49c05f0be70f85d5eb7341a3fed80  gcc/config/aarch64/aarch64-sve-builtins.h
! 6cefef30f3cc1d09d20dbbb0cd69121b  gcc/config/aarch64/aarch64-sve.md
! 024f1f15f2747beb21971036aa2e89d9  gcc/config/aarch64/aarch64-sve2.md
! 93880d302d6c66c857022719598265b0  gcc/config/aarch64/aarch64-tune.md
! 02788d998926c5d56579837ba517a991  gcc/config/aarch64/aarch64-tuning-flags.def
! 9f502cdcedcd85f77d279b53ea68cfc3  gcc/config/aarch64/aarch64-vxworks.h
! 2a4ac397720238bf00c6070f51b8869f  gcc/config/aarch64/aarch64.c
! 0ca942e84e4b92f73aaaec7bfa1ccbc9  gcc/config/aarch64/aarch64.h
! 477f0cc9cbbc752a226b3a17f9a95f90  gcc/config/aarch64/aarch64.md
! 4923901cd53cde9dcd83c7f0dab8ef58  gcc/config/aarch64/aarch64.opt
! 9fef16059a26a1320f080c830acef3bf  gcc/config/aarch64/arm_acle.h
! ba8c2535e9626ae4e550de5047888287  gcc/config/aarch64/arm_bf16.h
! 05d7dd122d4058557d659713d2c9b8c7  gcc/config/aarch64/arm_fp16.h
! ae69dc7e22047d2b46f6970580beb3c1  gcc/config/aarch64/arm_neon.h
! ef1dd222bbbaca1e6dac76b9321bab92  gcc/config/aarch64/arm_sve.h
! d92a3d5acf1ebe31d01e378d08932d3b  gcc/config/aarch64/atomics.md
! c5e4dc1aa8aa96b1e98708782e715b10  gcc/config/aarch64/biarchilp32.h
! 5b6abcf28f1e954ef136e3756734f1cc  gcc/config/aarch64/biarchlp64.h
! d1bbf361745ec677a615eb0a11e5b715  gcc/config/aarch64/check-sve-md.awk
! 3985ee432d883112d1960e775ad320a7  gcc/config/aarch64/constraints.md
! 1ad03640d8fc76d1f796698531cdb0f1  gcc/config/aarch64/cortex-a57-fma-steering.c
! cf52b0975e4c0d0924ed38da6a43949c  gcc/config/aarch64/driver-aarch64.c
! 9dca576b967f36193e144d26def4a9c5  gcc/config/aarch64/falkor-tag-collision-avoidance.c
! 72804cc2b3f5d7e52809a06b3c251c54  gcc/config/aarch64/falkor.md
! 63d0eebbd3376ae240e4547760915f66  gcc/config/aarch64/fractional-cost.h
! 67157c8970cb22f05a2e298f9a6b84c7  gcc/config/aarch64/geniterators.sh
! 9a3499491d4a8101f057a66925192785  gcc/config/aarch64/gentune.sh
! 05fb97992a51e3216fc9eb440e168427  gcc/config/aarch64/iterators.md
! 22bf9e47c529401c9f9ae72aeefdfeb7  gcc/config/aarch64/predicates.md
! 1a2b7c99ac3e699f010a2a5e143dfb8c  gcc/config/aarch64/rtems.h
! 38550170272505346a8ad5dd6a1b63db  gcc/config/aarch64/saphira.md
! 7459db542df0cab065589aa58e8e93ff  gcc/config/aarch64/t-aarch64
! b012c1f5b32ef8620150f29283c8aaeb  gcc/config/aarch64/t-aarch64-freebsd
! a264697d79eed5fef4c77cdd8f870ae4  gcc/config/aarch64/t-aarch64-linux
! b012c1f5b32ef8620150f29283c8aaeb  gcc/config/aarch64/t-aarch64-netbsd
! ab48ffa82fb8892fbe901a1484e361d2  gcc/config/aarch64/t-aarch64-vxworks
! cffb77e28aaee1ef71df44208c8cf08e  gcc/config/aarch64/thunderx.md
! 92f39a3e7710d5bfe5657e35e0ac0058  gcc/config/aarch64/thunderx2t99.md
! 0385995321948c293208a3c8e11ccb05  gcc/config/aarch64/thunderx3t110.md
! 5284f896b6a094c24139bc55a13dd29b  gcc/config/aarch64/tsv110.md
! 8b41b511cae4a5eda35cf19755875d5a  gcc/config/aarch64/x-aarch64
! 3af502026ddf49d69ce20f7f355413c5  gcc/config/alpha/alpha-modes.def
! 7b2a95a3c1649335efec41840c0563b4  gcc/config/alpha/alpha-passes.def
! 734c46dde1390585094d037bd921b4be  gcc/config/alpha/alpha-protos.h
! 5555e630af513fb70ff81e8224650ddf  gcc/config/alpha/alpha.c
! b583c637be36f7ba4943158c259f9071  gcc/config/alpha/alpha.h
! 96f465578b3bc22c52447c9dfa49487b  gcc/config/alpha/alpha.md
! c8a659f2d0ece9ed25fb00c2b65109dc  gcc/config/alpha/alpha.opt
! a69c90e08fbd52ed0a529d829106ee0b  gcc/config/alpha/constraints.md
! 922bc1be27f184824dfc6ee89eb40afb  gcc/config/alpha/driver-alpha.c
! 71b456abb6ba28ef390d8665eb986ca7  gcc/config/alpha/elf.h
! b2e7fd5895398a60097812bda344908e  gcc/config/alpha/elf.opt
! 24c560b186b12f1e569216f1fdee293d  gcc/config/alpha/ev4.md
! 2c40c2dff38fa716014d2a876f121e92  gcc/config/alpha/ev5.md
! 9548e09fdf569e439f479c3e8d8f6cf9  gcc/config/alpha/ev6.md
! 94ba2e261cf99a359bb052692241ed4e  gcc/config/alpha/linux-elf.h
! 5d94999f26e19ac7f216b788b8af8bbb  gcc/config/alpha/linux.h
! 1e4a93b59fc1ed77d69bb826b4b5a636  gcc/config/alpha/netbsd.h
! 32cd36e05984e606dd85615a68b0b773  gcc/config/alpha/openbsd.h
! 3d273036189ef9b6a2d58ce129d071fe  gcc/config/alpha/predicates.md
! cc9e3d1396b7dc743ebfb166aa411c15  gcc/config/alpha/sync.md
! fdbb91f07b7195d65f4e9d9d2098acde  gcc/config/alpha/t-alpha
  6e8dd648b9668f18b1dfd9f1203c9885  gcc/config/alpha/t-linux
! de1fa8b5ec0135002586a573da8e5d3d  gcc/config/alpha/t-vms
! 9312d528eacea1a2d5eb040e65f85d5b  gcc/config/alpha/vms.h
! 1fd9a45b4f2b1e546182ce0fe35ac6d1  gcc/config/alpha/x-alpha
! f2650206fce4bea2c4a8f3b1bd15d557  gcc/config/arc/arc-arch.h
! 359335e2f192a637db17bac4f57f9f2e  gcc/config/arc/arc-arches.def
! 68b0bed4d1a0d0ccbbe69b749d535579  gcc/config/arc/arc-c.c
! c5c2cb498d2b40d6c3d1a14c322b5664  gcc/config/arc/arc-c.def
! 5d58de8355c697860ec1c81d52a58cf9  gcc/config/arc/arc-cpus.def
! f210d0e86d6a1c639ddd0293a521fa40  gcc/config/arc/arc-modes.def
! 098d4fc5c07db3dc9f0c6f3c187e41f4  gcc/config/arc/arc-options.def
! 140fe7021f313fd7bd4697c4d96a5ad2  gcc/config/arc/arc-opts.h
! 89247c6eb904410f7d7c8e7f04aa1ea0  gcc/config/arc/arc-passes.def
! c6065fed0e69417bd4a0fd9b3225cc0a  gcc/config/arc/arc-protos.h
! 0ab44e2572284f7a20d5e8bda975d914  gcc/config/arc/arc-simd.h
! c1c288c9a70add71779ddea1381561a3  gcc/config/arc/arc-tables.opt
! c31775c1285d9fb5d1d863b42d20d806  gcc/config/arc/arc.c
! 8500dad16076fe6fdc4661a8c1109ed8  gcc/config/arc/arc.h
! 710506a0a92fbd9ae518e492d6e8cf04  gcc/config/arc/arc.md
! ed0ac9440c0f5f1b4f72a3602bd5ca34  gcc/config/arc/arc.opt
! a7930f00d9b7b05367e91b43a1f42895  gcc/config/arc/arc600.md
! 5168429e439fc01e49fec5f6bcb7e7c7  gcc/config/arc/arc700.md
! e95572b327bad96f0b577e1722e144cf  gcc/config/arc/arcEM.md
! 5a901549845127819793b90989ba1f85  gcc/config/arc/arcHS.md
! 5dbfc6b83d2b695a0ac69d043e3816b3  gcc/config/arc/arcHS4x.md
! 969b749bcbdde02a9abf0a5f7d42b274  gcc/config/arc/atomic.md
! cc4d5a57dc230a3a474b7814d546b0c3  gcc/config/arc/big.h
! 9e6d4f46fa1c4871a2091c17cebd6b97  gcc/config/arc/builtins.def
! 6abd961b7d712d2f5bdd3f548e9ba492  gcc/config/arc/constraints.md
! cfeede9413247641930e6edf25c1c87e  gcc/config/arc/driver-arc.c
! 029d958c6b7cc45f98f73b993d1c366b  gcc/config/arc/elf.h
  255d583e6d23d9cbed1614263d159a1b  gcc/config/arc/fpu.md
! 8ce0af4bcc9c3034ccaa5bad3565de26  gcc/config/arc/fpx.md
! 93679dc2f557a6d1b2516cbe2273c781  gcc/config/arc/genmultilib.awk
! 170daa192c0ac6675ca7c29957bc243a  gcc/config/arc/genoptions.awk
! 74bbb5c37887182e5e7f61b46b3f990a  gcc/config/arc/linux.h
! 51f5b1ebe1fd693ba42e524882b6e37f  gcc/config/arc/predicates.md
! 2aace0e2d4b32b6812ac2968eb0d1125  gcc/config/arc/simdext.md
! 8cc8fec220d6de6e07b26b1fb360d3ce  gcc/config/arc/t-arc
! a3f6d72692b8c9dd6beeaeb49b41dc01  gcc/config/arc/t-multilib
! 1cc5f2c623c109a0ca59f4729f06d1f7  gcc/config/arc/t-multilib-linux
! a43f49882ebd60b6ec1f3546fcc4255a  gcc/config/arm/README-interworking
! 0477ae3e3b9aff03d7dea09042999055  gcc/config/arm/aarch-common-protos.h
! bafeb90dee387b017b95b6ebdf1e7d23  gcc/config/arm/aarch-common.c
! 52cd23cb3f4fdb8cb709cbc94d331939  gcc/config/arm/aarch-cost-tables.h
! d48d5df954efeefe686652ee316a5ea3  gcc/config/arm/aout.h
! 4209093957da24b06ca8ee2328b86d08  gcc/config/arm/arm-builtins.c
! 4379c1e8afc18227f1b48f0dcdebd62c  gcc/config/arm/arm-builtins.h
! 6d9a6f32fd86f8b88bff780a7698d580  gcc/config/arm/arm-c.c
! e007b37cee092f5b5a612a8a4871cd65  gcc/config/arm/arm-cpus.in
! 5510fc0a22e6f1b48800e5ae75faf958  gcc/config/arm/arm-d.c
! e697f61ce1f19207b754f9e4e060df79  gcc/config/arm/arm-fixed.md
! 9f56291be317bd7c26843f3b901e70ab  gcc/config/arm/arm-flags.h
! 32250970374653b73e974c0432dbe0f4  gcc/config/arm/arm-generic.md
! cadb5b1cf604bbd9e06000676a096db5  gcc/config/arm/arm-ldmstm.ml
! 05bf396d4add547832f286e046643971  gcc/config/arm/arm-modes.def
! 25635e5e9dde05adc23f3ba0d5866385  gcc/config/arm/arm-opts.h
! acae73854486ed7ab4e8e8af88c5eb58  gcc/config/arm/arm-protos.h
! 095ccfc0877933dc53eb40c2369fcf9a  gcc/config/arm/arm-simd-builtin-types.def
! e15ee919dad399c4e00ca11efe4bcd94  gcc/config/arm/arm-tables.opt
! d70a50caf4aae1fb3ab57300fd85cd84  gcc/config/arm/arm-tune.md
! a6942f87d3c677f8628741b7c277c775  gcc/config/arm/arm.c
! fa7937aa82161053523e64455115ac0d  gcc/config/arm/arm.h
! 9b8b431e40e39b11d70fe124e6b05b1e  gcc/config/arm/arm.md
! eabc54f06df24e849baa2f7e1d988bb0  gcc/config/arm/arm.opt
! 4e8f8d7a828a2fafaf77c37723c261d2  gcc/config/arm/arm1020e.md
! d70cb415fe667cb4c7ac20d8fe3dd244  gcc/config/arm/arm1026ejs.md
! 6c2465b6e56604f9ea139960f9f28bc0  gcc/config/arm/arm1136jfs.md
! c57eb0d04bce6b337e419a074f83c9ac  gcc/config/arm/arm926ejs.md
! 094d833c0a9095d17ab518993eb69ac5  gcc/config/arm/arm_acle.h
! e989cbde7f13f942a27f2663cf070d1c  gcc/config/arm/arm_acle_builtins.def
! 272e0ad6dab00cfc4a5dab8eafa0dba4  gcc/config/arm/arm_bf16.h
! cbd337565b4f575afdb3dd52410870b1  gcc/config/arm/arm_cde.h
! b3ff620bd4c7d4f7a374b8b19c778f8b  gcc/config/arm/arm_cde_builtins.def
! d6ade416bb7470bf6720a319a6338eea  gcc/config/arm/arm_cmse.h
! 4f4f4a20209f5621b7e361bd1aceed91  gcc/config/arm/arm_fp16.h
! 716f36a8c4a971c05e1374fc31e74056  gcc/config/arm/arm_mve.h
! 908c5eff411e7da1583bec9a5f5eb9f5  gcc/config/arm/arm_mve_builtins.def
! 88bbc52aa44aed209be04d7e97d96e42  gcc/config/arm/arm_mve_types.h
! 359287a0a608dd167686e2ae84c54ea0  gcc/config/arm/arm_neon.h
! cbca5f0c85ad3b6ac0e5929359764930  gcc/config/arm/arm_neon_builtins.def
! d046918bcae84588bd3674d5fd1379da  gcc/config/arm/arm_vfp_builtins.def
! d38fb86a101a0c45b14efe3c44729d0c  gcc/config/arm/bpabi.h
! f202d6b26eae69e1d38719f4676cf1b9  gcc/config/arm/common.md
! 98b2033272cadcfab68d536db9fd764b  gcc/config/arm/constraints.md
! 3ead1f829830bdb9b191217dd8bed34c  gcc/config/arm/cortex-a15-neon.md
! 995634fa135396159bf8d72f6af5b817  gcc/config/arm/cortex-a15.md
! 9dce3b82c4f7d4e8e6740b8fd8bac33c  gcc/config/arm/cortex-a17-neon.md
! a9cc42689720ea8dc56704c497609793  gcc/config/arm/cortex-a17.md
! 4a3c884bcfef7048502df0054f943758  gcc/config/arm/cortex-a5.md
! 3975419260d751e0f716f359aa419714  gcc/config/arm/cortex-a53.md
! da5bf048c4b39076dfdc0238cc8d8cba  gcc/config/arm/cortex-a57.md
! e4bad8e2d295a4be59dcc67221c1e920  gcc/config/arm/cortex-a7.md
! dc96aacb756f5f6bd544f2f338dd388c  gcc/config/arm/cortex-a8-neon.md
! 8da6e6f5e7d530a5dfcd308f22c3114b  gcc/config/arm/cortex-a8.md
! c2c8a47136d2d2ab15746b6295fae37c  gcc/config/arm/cortex-a9-neon.md
! 888e3b55e54b01dc2064a96861ff8528  gcc/config/arm/cortex-a9.md
! 5fa8d9226399b5c6376597e09960b244  gcc/config/arm/cortex-m4-fpu.md
! 0e57517fbd00369f93798dcd0b1d69dd  gcc/config/arm/cortex-m4.md
! f711224f5aade6be2b8623ac4f7a3619  gcc/config/arm/cortex-m7.md
! feb37da4ab94384cd45d00b78053c43a  gcc/config/arm/cortex-r4.md
! dae8e1862e28590cb3e305a125c03f23  gcc/config/arm/cortex-r4f.md
! db672d3bf120053136f8785ca78f30f4  gcc/config/arm/crypto.def
! 0357bf50b1aedb2a838e322c43bf39b7  gcc/config/arm/crypto.md
! 06aefdf8a428a038d263110882d11901  gcc/config/arm/driver-arm.c
! eb8ac5825aa98b1de4080c2d5d2bac1a  gcc/config/arm/elf.h
! 0fc4a399b09e2d166599b4b454686d03  gcc/config/arm/exynos-m1.md
! f2023d1001207deff25610a6ba5defe0  gcc/config/arm/fa526.md
! 3c5cd9d9b81046f483f8bb23824051c1  gcc/config/arm/fa606te.md
! 545b0165cfaf2c02c2a3e9927156d772  gcc/config/arm/fa626te.md
! 8d7ef78a55e953c4efbeb7a507b2c909  gcc/config/arm/fa726te.md
! e8f87dd39e307c81c6dae8a3edd043f2  gcc/config/arm/fmp626.md
! 188a2196ca715a0a3b153bdb153df481  gcc/config/arm/freebsd.h
! 3e95055c41005c4d71e52d43abc83c1d  gcc/config/arm/fuchsia-elf.h
! ff890c264ce6d3805bae3235d04bfea4  gcc/config/arm/iterators.md
! 7cc764e7427411ddf078ac06848cd77d  gcc/config/arm/iwmmxt.md
! ce372c0d2b66d97508d2975727540cfc  gcc/config/arm/iwmmxt2.md
! d69b9646816d0775125dc3d35c12b4e9  gcc/config/arm/ldmstm.md
! 6e96d01ded8a5fdf41422e165c5fd750  gcc/config/arm/ldrdstrd.md
! ecffe56fab8520ae8bb52c40c2dddcc3  gcc/config/arm/linux-eabi.h
! bd2045b2f5d8245c16a45237dce679a6  gcc/config/arm/linux-elf.h
! 4cd31f4b65a03e7092e927d9df3eed9f  gcc/config/arm/linux-gas.h
! 41ed5979d5b4c0328c84b1411af4d063  gcc/config/arm/marvell-f-iwmmxt.md
! 64a1f7d58f31d526a6b511b59068a296  gcc/config/arm/marvell-pj4.md
! 43fdc3285e4cf2925affd75f5e519dda  gcc/config/arm/mmintrin.h
! de871d10cad9745db0ca15dd6c63933a  gcc/config/arm/mve.md
! 9f532768a1dd1fd1a7115fc72bbf7a88  gcc/config/arm/neon.md
! e602d4f71105bebaba1f0160067b903c  gcc/config/arm/netbsd-eabi.h
! 4868137991adc2b3ed94f92b94681a5c  gcc/config/arm/netbsd-elf.h
! cae8e4d7062cc8528b86ba742f87b233  gcc/config/arm/parsecpu.awk
! 6cd54aae61604447f82f1f8ce4241e07  gcc/config/arm/predicates.md
! caa19ea0702740cb515513dc3ffd1b34  gcc/config/arm/rtems.h
! fd8f292e71a132025a8830e9fb1d20a5  gcc/config/arm/semi.h
! e726b8b47355a98ca8086010faca628b  gcc/config/arm/symbian.h
! 23878893a3659ea1320584e159a41e41  gcc/config/arm/sync.md
! 8badd5029d52a0d2eb7c0b8382b11c32  gcc/config/arm/t-aprofile
! 0457e96bc4b1969f20fb34f134dad03c  gcc/config/arm/t-arm
! d9e3716a846550c13e8f893a49641899  gcc/config/arm/t-arm-elf
  4dc427c456af5e56b1ac39bda8969af6  gcc/config/arm/t-bpabi
! 8d67404982da420db25687717428b78f  gcc/config/arm/t-fuchsia
  e3950ec6bd159734835f8f8fb143efc6  gcc/config/arm/t-linux-androideabi
! 38f852e8a280ed7764b2b2969e73b984  gcc/config/arm/t-linux-eabi
! 0c67576ec2d3fa0d713d42c3ddcac2ab  gcc/config/arm/t-multilib
! 8a2cebef7aa8ff109c2afa853812d5f7  gcc/config/arm/t-phoenix
! c61531900151765446001d0f5847783a  gcc/config/arm/t-rmprofile
  c434e99f4fc47fd32ffab26fbeea8464  gcc/config/arm/t-rtems
! 0608d6c58b6f51d78cb76e7173fde2b4  gcc/config/arm/t-symbian
! 8069db9516f877b2af5cb2cc7b6f9290  gcc/config/arm/t-vxworks
! 47ca8d04a85a8ec174d292ca9586e93f  gcc/config/arm/thumb1.md
! c1ce8990c1043f299ab96a7d2c9feac2  gcc/config/arm/thumb2.md
! 69d922b1b0c625143462a478dbcb5de7  gcc/config/arm/types.md
! 61a16e5032a6d43fa8f2e7aa951493c7  gcc/config/arm/uclinux-eabi.h
! 0c4b326414e106a6841e37bf28ac8135  gcc/config/arm/uclinux-elf.h
! 9bc8c1d93425150291f333f13713387d  gcc/config/arm/uclinuxfdpiceabi.h
! 3285e4d14032fb0ae4faa2809a98b43b  gcc/config/arm/unknown-elf.h
! 4d486054574a4f147041002f62b9faa5  gcc/config/arm/unspecs.md
! 63618d304ddef37b30a4e977d5558a61  gcc/config/arm/vec-common.md
! e03dd376edfeaf6532effda3526527c1  gcc/config/arm/vfp.md
! 5b03ce06f03ed9738ed6cee13b1475ab  gcc/config/arm/vfp11.md
! 77f809b2e1735d57d8681bbd8e506d7c  gcc/config/arm/vxworks.h
! 3f347f182b169716d6be40e6781e10b4  gcc/config/arm/vxworks.opt
! a17a638dc98f3f18b0e13448c69e1e65  gcc/config/arm/x-arm
! 53c463a79ed2a15849a3e55bf97d4e15  gcc/config/arm/xgene1.md
! 892adc022f756711b44b611a66c3f995  gcc/config/avr/avr-arch.h
! ccc46ada82df0fa7bb9733dffafcea11  gcc/config/avr/avr-c.c
! 776d48463e19f4ba6e745325104ee6b2  gcc/config/avr/avr-devices.c
! c1947a9af665ace4b4179086e3c165e4  gcc/config/avr/avr-dimode.md
! 5f03a05113cd8c94a499c82dc45fe84d  gcc/config/avr/avr-fixed.md
! f30a55e0255dba5d5d2c19df2c480a7c  gcc/config/avr/avr-log.c
! ae58fc8e911e5126311ae65b36e36520  gcc/config/avr/avr-mcus.def
! cd740966e7749795d372fba373ae3928  gcc/config/avr/avr-modes.def
! 7643e434f13ab3e2404f779621622d00  gcc/config/avr/avr-passes.def
! b81c0f73ca7db3f1fb88d95aae490ab6  gcc/config/avr/avr-protos.h
! 794d72dff8f490d2477d53cf0a17a59e  gcc/config/avr/avr-stdint.h
! da4759beb267e1b95c7f6aa98dfa02bd  gcc/config/avr/avr.c
! 255b3120305b831dc27d5e9fd24cba03  gcc/config/avr/avr.h
! 69ba81ee0df70de20935f38148e99876  gcc/config/avr/avr.md
! 4825a8c46960995423e4772273636241  gcc/config/avr/avr.opt
! c66b7ff6ce2c1dd01571398ba1dfa7d7  gcc/config/avr/avrlibc.h
! 2c477f95ea623b47ad6d8a669bcaedc8  gcc/config/avr/builtins.def
! d57cfce95da8bb853b2a4fa9dd9e2e41  gcc/config/avr/constraints.md
! 80c041554bb9ea92837a12a4d551f71d  gcc/config/avr/driver-avr.c
! 0aea93aacc85a638c37311db3d7896de  gcc/config/avr/elf.h
! f3e5f97da1fd6e0ef0928386a7f4282e  gcc/config/avr/gen-avr-mmcu-specs.c
! 063adffbd8221e11a68bee0d0e0544c4  gcc/config/avr/gen-avr-mmcu-texi.c
! d9827fe491e7081285903a74c00792cb  gcc/config/avr/genmultilib.awk
! 11d62e247c84e33dcb11bc718dbaa65b  gcc/config/avr/predicates.md
! 45ce2b67ec91ea77fa047191075cccef  gcc/config/avr/specs.h
! ad5ecf50af7a72a21b929c9eb1c8156e  gcc/config/avr/stdfix.h
! 2f4e5522c6b717d2f8d7f6f503c59226  gcc/config/avr/t-avr
! 2756b76f4f1567d916b7efa2fbd04cf5  gcc/config/bfin/bfin-modes.def
! a76dfb7bf94f40d85ae72b05b47351c0  gcc/config/bfin/bfin-opts.h
! 819990c6b4b80a5d4aca5f57b73a24d4  gcc/config/bfin/bfin-protos.h
! ebf59a009843565bdb7f7b421aa71a41  gcc/config/bfin/bfin.c
! 1ec985f3e4f5dfaa7b81776612949906  gcc/config/bfin/bfin.h
! dd6c6066591db90d0ee72471ebf2bf74  gcc/config/bfin/bfin.md
! 53442494b7fbbec48b91fee3f70d4025  gcc/config/bfin/bfin.opt
! a1d9c224d6dba8f2f16b474950b25511  gcc/config/bfin/constraints.md
! f845de9049bb421596edf1bb0fdb828b  gcc/config/bfin/elf.h
! 59e5f9e4e5d23b590255022a472561f9  gcc/config/bfin/linux.h
! b6f1fc10c719f4ed096856d43f3b69af  gcc/config/bfin/predicates.md
! 1bc7cdcf05c1e1082a30a2ba424365b5  gcc/config/bfin/print-sysroot-suffix.sh
! a36f8cfe0200b7b83c2cd0b451af4568  gcc/config/bfin/rtems.h
! fdc480553d6e39f23efefe1384d0aca9  gcc/config/bfin/sync.md
! d03105666acb1a9f30b1b136545fcbbd  gcc/config/bfin/t-bfin-elf
! a4169ea7c305414c0004d2e1323dff47  gcc/config/bfin/t-bfin-linux
! 25de22a888463feb521f8ab62575e8b5  gcc/config/bfin/t-bfin-uclinux
  6f4817f759fcac5ac27233ee451780a6  gcc/config/bfin/t-rtems
! 3b79945fb7cef44596228264f9c115c1  gcc/config/bfin/uclinux.h
! c9d6fa09859274c45cb98fee18a15653  gcc/config/bpf/bpf-helpers.h
! 8e8c35a3fcfe39836567c0598109153a  gcc/config/bpf/bpf-opts.h
! 0a812651ffbdf008842ab5324f284a01  gcc/config/bpf/bpf-protos.h
! 50fb8e1176f8adb0bbd6534131ed369f  gcc/config/bpf/bpf.c
! c52d7c558aa6a2d41d4a231981b9e3a8  gcc/config/bpf/bpf.h
! bc6fc98da097d9c9818e924597315fc7  gcc/config/bpf/bpf.md
! 9fae99ea46af877072be6e635250fb6a  gcc/config/bpf/bpf.opt
! 7178fd1d3de4e7146939e82d1d3a3b2f  gcc/config/bpf/constraints.md
! eedf5fb16825f78bd29c003598d23cd6  gcc/config/bpf/predicates.md
! d41d8cd98f00b204e9800998ecf8427e  gcc/config/bpf/t-bpf
! b4eaf8bae7d1a6bdf25c5bddf9a122a3  gcc/config/c6x/c6x-isas.def
! c4d5cee7544af0ae3024b48eecaede7f  gcc/config/c6x/c6x-modes.def
! 8409aa510d2c7b3407b2d9fd4ec1bb57  gcc/config/c6x/c6x-mult.md
! 96170c9fcf305f16925ca15465196670  gcc/config/c6x/c6x-mult.md.in
! 18491b2fa2829293cae03ee795608ee2  gcc/config/c6x/c6x-opts.h
! d825adc7ee1c8cd891d52fa41c630b57  gcc/config/c6x/c6x-protos.h
! 20f4eb13584b46ce02f131bb43953912  gcc/config/c6x/c6x-sched.md
! 408a80257d4ad41061221d3e549dc7dd  gcc/config/c6x/c6x-sched.md.in
! e4942dc4e50257b7461cea5ae67aba10  gcc/config/c6x/c6x-tables.opt
! eade163d2e41cb9453b164b29e3641ef  gcc/config/c6x/c6x.c
! 9a8805781b656e7f0343e112e60d8e09  gcc/config/c6x/c6x.h
! e7d37381ae0e5a00e70d53e470b1ccb9  gcc/config/c6x/c6x.md
! 2f4d50c6560b82130becdd43159d1484  gcc/config/c6x/c6x.opt
! 42dcc641cff0a9e8669cd668a4abbb1b  gcc/config/c6x/c6x_intrinsics.h
! db926e839c99f0dd396b9a2ab74bfeba  gcc/config/c6x/constraints.md
! ec3cc71150534c92df8240fde547c4df  gcc/config/c6x/elf-common.h
! 059c6a37861c81ffce8c501bcebb7976  gcc/config/c6x/elf.h
! 854506319c13134eb6693a4a39aa7e72  gcc/config/c6x/genmult.sh
! ac89cfea93cc957357181a80a74bec4d  gcc/config/c6x/genopt.sh
! 30131f63c76c37145f49d98dffdc7e76  gcc/config/c6x/gensched.sh
! 6a861a021009a3177b2f50cc979692e8  gcc/config/c6x/predicates.md
! c4d80b1d0a46210a62086d11a18387f0  gcc/config/c6x/sync.md
! 9bc85c3b8055fabe3eb0f81d0d70d0a1  gcc/config/c6x/t-c6x
! 164b036647efcf66ceeab592e7600f85  gcc/config/c6x/t-c6x-elf
  428034a210600b6b423dfadb06636e03  gcc/config/c6x/t-c6x-uclinux
! c1527a04e3a037a2d02ad05c51965cc5  gcc/config/c6x/uclinux-elf.h
! 85ebca89e2f9c7c0ce5cbbdb9acdc779  gcc/config/cr16/constraints.md
! ddc742c5a795cc90363cfe341f23a8c2  gcc/config/cr16/cr16-protos.h
! 2f9f1763b32e9973854df88997347401  gcc/config/cr16/cr16.c
! 28cbd23d02254973af053805d1e02fa7  gcc/config/cr16/cr16.h
! 91e47a39f697dd2bb8f58b99992f27b6  gcc/config/cr16/cr16.md
! 823514400d9df17a1c31b33ff330afb5  gcc/config/cr16/cr16.opt
! e62acac3d5caa3602079a82025dc561d  gcc/config/cr16/predicates.md
! 0c7cfeabdd926946ffda7ba1e67a3aaf  gcc/config/cr16/t-cr16
! f9860aed01e7f2d8dd67f2c4a5ee9bdd  gcc/config/cris/constraints.md
! 06c50643188bd9cc3d5c8a1e88159957  gcc/config/cris/cris-modes.def
! 9e4cfa751d5efcb49ad0339ee9dc0f30  gcc/config/cris/cris-passes.def
! aff86dd08a27d28a9d25109f1b3a155f  gcc/config/cris/cris-protos.h
! 4148b734c6acdb89af79bef4bfaf1639  gcc/config/cris/cris.c
! 0326eeb80107d0409ce75c31a0cf0487  gcc/config/cris/cris.h
! 43e34cfdd35b4339b2a296c0a5da4b6e  gcc/config/cris/cris.md
! bace91811fe9204c4492ac987d609ef4  gcc/config/cris/cris.opt
! 81c1c5e3e5d9d4077057c4d3a8c5f273  gcc/config/cris/elf.opt
! 6ecd25a4f4a0a4e1a874f9d1caf4ac11  gcc/config/cris/predicates.md
! 3d74a56d026bf1a78313fd4b8bc5287d  gcc/config/cris/sync.md
! bb6348e64338fe486d7bc77137834e44  gcc/config/cris/t-cris
! b838757736afd1c79f7da312cb2e305b  gcc/config/cris/t-elfmulti
! 4ddae35394ec8e780dfae22d9b226e9b  gcc/config/csky/constraints.md
! fd9f2701b324584835adbc87ddf3ed3e  gcc/config/csky/csky-elf.h
! c6da8c43049e06ecbe25521de348da96  gcc/config/csky/csky-linux-elf.h
! 0c5e1b1896c6a45e17b18432ca1cc09f  gcc/config/csky/csky-protos.h
! 0eff7e7fd03ddf046e07985f8780af45  gcc/config/csky/csky.c
! c53b6f3442758c16fdf6d2b494afb482  gcc/config/csky/csky.h
! f70e22a401b91c78d87ab95f284fdd4c  gcc/config/csky/csky.md
! 37485b38d8a102357d169e28ff787ada  gcc/config/csky/csky.opt
! aaf32624c75f2908acde137f4b9c8c5d  gcc/config/csky/csky_cores.def
! 68324b30c7db755a5d88d43e72b4db7a  gcc/config/csky/csky_genopt.sh
! 191604c25ba284cd6f23052674887e83  gcc/config/csky/csky_insn_dsp.md
! 9ebb286c27d9aa7bacf50128b512e1e2  gcc/config/csky/csky_insn_fpu.md
! 3829282fd1b68db9116b50dd88e66dc6  gcc/config/csky/csky_isa.def
! d370155a552ad48a981ec1e40e15999c  gcc/config/csky/csky_isa.h
! 7d49b41f0810cdcd0d2b8e3c45243ec7  gcc/config/csky/csky_opts.h
! 346f09a487a941599173dc2f95e7eef7  gcc/config/csky/csky_pipeline_ck801.md
! db1e9ab731342109c9e0de72233c1e76  gcc/config/csky/csky_pipeline_ck802.md
! f4abd53a3efb27a167c0b1ddc954cae0  gcc/config/csky/csky_pipeline_ck803.md
! 8b3e64498ad942dd5485b58fcf8b2379  gcc/config/csky/csky_pipeline_ck810.md
! 2f049f6cb92b9b360e0bea0e11c75f14  gcc/config/csky/csky_tables.opt
! 5783bf025ed91d1c55a09b0ceecf26a1  gcc/config/csky/predicates.md
! d60f590cb6f4d4348e1e3d111785452e  gcc/config/csky/print-sysroot-suffix.sh
! 47a5c18ef0ececda6384e4f1397951d2  gcc/config/csky/t-csky
! 50644547da413f442c233fc649602657  gcc/config/csky/t-csky-elf
! 75c37c753546509bef2946cf75d47653  gcc/config/csky/t-csky-linux
! 4495725c3c863ee081187ccfd1118a02  gcc/config/csky/t-sysroot-suffix
! a8233b75fe59757a51457ef68fe9678c  gcc/config/darwin-c.c
! bf77a54b5c52ed103705a4e960d9f814  gcc/config/darwin-d.c
! 7c3e8c7f69a5d63e6061bdfeda0ba727  gcc/config/darwin-driver.c
! dbb6f1d5dc4ceaaf0fd2e5bc4bbb2a29  gcc/config/darwin-f.c
! 1e7f34ef6b48c907fbf5b2d5a629e957  gcc/config/darwin-ppc-ldouble-patch.def
! d888c4de74a969d5751349e288d4728d  gcc/config/darwin-protos.h
! fe391a430f76c969aa3909a7239a4812  gcc/config/darwin-sections.def
! 742a51260c78210a2dd5cbd87312e6ba  gcc/config/darwin.c
! 050abc87b0d8cec0efab57ee18a61c6e  gcc/config/darwin.h
! 3d206af3a9f3e409c3fa42bc4e807a7b  gcc/config/darwin.opt
! 23bab33707e2ef99310565f620c62080  gcc/config/dbx.h
! 04c3ad90675d44af0d58b60b7ce96c32  gcc/config/dbxcoff.h
! 201708cb71e4d33abc802e38b34cb75c  gcc/config/dbxelf.h
! 7f36fe29c3ba3de362ebee9659ca2c0d  gcc/config/default-c.c
! 10d519a10eb60f0f820d73d7bd4a5652  gcc/config/default-d.c
! 76b6675d29b19f6fa54af85e759d8ea7  gcc/config/dragonfly-d.c
! 71b2f47fe0c71e75fc8c00bf617787e8  gcc/config/dragonfly-stdint.h
! d42ef97c5515246eeacc4bf7623659ad  gcc/config/dragonfly.h
! 1c53bc4fbe184f2d385bd66f216e5aaf  gcc/config/dragonfly.opt
! a6627ffbe98a1f3d165a077187bad42b  gcc/config/elfos.h
! 26a36dc2c4dbc89fd57192c8b4f3fab0  gcc/config/epiphany/constraints.md
! 429cad21199885c3384e40735ad6ce49  gcc/config/epiphany/epiphany-modes.def
! 801af077e35c9df6d0651097da2f4044  gcc/config/epiphany/epiphany-protos.h
! e59d6a031a223f62b897db22b28675e7  gcc/config/epiphany/epiphany-sched.md
! 1a99d8769d63bcfbb68dbfb0dbf9353f  gcc/config/epiphany/epiphany.c
! c934c116fd44ff1574976bfca48d567d  gcc/config/epiphany/epiphany.h
! 564b9524f371d17417e237fbf41f30f4  gcc/config/epiphany/epiphany.md
! 97363f42dc2cba7e2d10dec27e8519e2  gcc/config/epiphany/epiphany.opt
! b4ccaf093bb1f009f7f63524184c762a  gcc/config/epiphany/epiphany_intrinsics.h
! b122cb1dd6cb789d0a79dd2391021ca4  gcc/config/epiphany/mode-switch-use.c
! c95d6f42bc9e73b363b471357678bda0  gcc/config/epiphany/predicates.md
! c37b30111322548fa1f1b5b293bc9d13  gcc/config/epiphany/resolve-sw-modes.c
! 2747a5b60b5d575b0ed0ebf15513aa0b  gcc/config/epiphany/rtems.h
! 0345179dde20347474295ca02856c657  gcc/config/epiphany/t-epiphany
! 5a842c313a09d93416cdaf2ab3333520  gcc/config/flat.h
! ac9c7b7fbc39e87f0bf544a02292d44c  gcc/config/fr30/constraints.md
! a0c5b498ae475f459d18c29baa57d711  gcc/config/fr30/fr30-protos.h
! bfccf32b2f1bfdc6914deef6fb2092b9  gcc/config/fr30/fr30.c
! 9a64f241513030a09f4d2fc475e2e0d3  gcc/config/fr30/fr30.h
! a63a84e5ea1a2b912487bc97daa211cc  gcc/config/fr30/fr30.md
! 9c44ce42d09c29b6720221be8ac76637  gcc/config/fr30/fr30.opt
! 8b5551c4252c5c4a55e297b2abe5bef1  gcc/config/fr30/predicates.md
! d8afd1bfda601bab1d213c3bf4fcd46b  gcc/config/freebsd-d.c
! 08f9c8e5e264396f90a4529f4f6375cb  gcc/config/freebsd-nthr.h
! 51d5ae30ce3244cce7e79b70c23e196f  gcc/config/freebsd-spec.h
! cd641a4477e4c117109ceb2ac4f7f854  gcc/config/freebsd-stdint.h
! 96c50fe33f127d394bb31c7381b537b3  gcc/config/freebsd.h
! 2ad2d6626b69b31b8f003bfef35d6f9d  gcc/config/freebsd.opt
! a926152f735c27cc9d4d536b3d446628  gcc/config/frv/constraints.md
! 1501495531206405813b4cfe5d9abf30  gcc/config/frv/frv-asm.h
! ac33bfd728d7b0304baad49c90e46f87  gcc/config/frv/frv-modes.def
! 8ddc8664df1a488b1ace7f6a5e053595  gcc/config/frv/frv-opts.h
! ad0c45316408de39f748b510fbf263e3  gcc/config/frv/frv-protos.h
! 1ecaebbd4f8350562fc7064e89530a8e  gcc/config/frv/frv.c
! 0e0a2a4cc7b48c1469474c70334f0d47  gcc/config/frv/frv.h
! c2293117065e641a3cc15d785c46536d  gcc/config/frv/frv.md
! bec14eb47d30932bb17a6b4bb90c74c2  gcc/config/frv/frv.opt
! b0733d7419f6be478d66f18c20d253e2  gcc/config/frv/linux.h
! 37bc7fbac875f1e8d08b4cb17f30573b  gcc/config/frv/predicates.md
! 0eb844404fea2d61e27f9bb893628645  gcc/config/frv/t-frv
! ff50af67ed2bb3a37d4b33441e70c1f0  gcc/config/frv/t-linux
! 675fe96f39450656e0de64467b264041  gcc/config/ft32/constraints.md
! e24441b49f90d32c9614c0fa30e53f18  gcc/config/ft32/ft32-protos.h
! 97dee3fa0bb20575fddf3229f25c5ddb  gcc/config/ft32/ft32.c
! 2bd7905acd3080c2cec7414206ca1d40  gcc/config/ft32/ft32.h
! 6922bdc145bd86c90f14a74d7ba2594b  gcc/config/ft32/ft32.md
! 2eb1af375bdd4b44fec59eba65f9d6da  gcc/config/ft32/ft32.opt
! 116c2a814f3f6bdd5c3b3427a044b0ae  gcc/config/ft32/predicates.md
! fa0e0ad732b2d43429272b9b3219bcb5  gcc/config/ft32/t-ft32
! 370f671d46b32c25413ba4fb17be3bd2  gcc/config/fuchsia.h
! ae85d420d4bf4958137e8cb372f3f369  gcc/config/fused-madd.opt
! 3ef7b0d5225414d3e2e75ee5a7be8dda  gcc/config/g.opt
! a733f81349c20385c50f770a10f7de6c  gcc/config/gcn/constraints.md
! 82b13df8b593c159805782c7dbe7fda9  gcc/config/gcn/driver-gcn.c
! 732098b93e714142df8252b91f3dce07  gcc/config/gcn/gcn-builtins.def
! 714b4a4e9019c8297cfc9d081048fa5a  gcc/config/gcn/gcn-hsa.h
! 1d42068551367c9e444a731d3bada9e4  gcc/config/gcn/gcn-modes.def
! 6961b68782327f056c423f7a6044fed9  gcc/config/gcn/gcn-opts.h
! f98eab048f5a637fd467a18481b30752  gcc/config/gcn/gcn-protos.h
! 51d24974357a28897734b5ec5c2d6b63  gcc/config/gcn/gcn-run.c
! 6760b3c4adf61c7dacb360016778a0ef  gcc/config/gcn/gcn-tree.c
! a3cc21b7718ac9926bfb57218235776a  gcc/config/gcn/gcn-valu.md
! 3e8b773f5c57e023afb6c434c097805e  gcc/config/gcn/gcn.c
! 0a40d3d00785d82115ce3014003dfb19  gcc/config/gcn/gcn.h
! a165794717431db2cfdc9e560e45d385  gcc/config/gcn/gcn.md
! e70d28ddc1211f83878f6dcc44912420  gcc/config/gcn/gcn.opt
! 835d09167780dd01b66edb64e967079a  gcc/config/gcn/mkoffload.c
! 589b28de219a2e291d2de1d1c971e5a7  gcc/config/gcn/offload.h
! b5330a50584c27019826b271b0f61941  gcc/config/gcn/predicates.md
! bcfdc39d82599c4a137956732c96c957  gcc/config/gcn/t-gcn-hsa
! e847e0da0c2d88300803484023231c14  gcc/config/gcn/t-omp-device
! 5f27b434d02f9b7295a2893661294767  gcc/config/glibc-c.c
! e9938157d6cf2e3e3f09ce226b008ec3  gcc/config/glibc-d.c
! f8a642ceaf3efe91fbe5fe61f40505f5  gcc/config/glibc-stdint.h
! 8014f277143dd3f1861ff81a4175738d  gcc/config/gnu-user.h
! 6b48c6825de8b01be1ba4deb71a10330  gcc/config/gnu-user.opt
! c894d85e6c5f9607f83a6e007cfacb2f  gcc/config/gnu.h
! 0feb34cad3a43079f7e9cca6704028e1  gcc/config/h8300/addsub.md
! 5c70f05e2d8c2c2e8badd881471bf640  gcc/config/h8300/bitfield.md
! 739a66e1d02dc0301bb4fc684ad21f97  gcc/config/h8300/combiner.md
! 1e9ffe93e0e7ff026a01a3a4bf10a689  gcc/config/h8300/constraints.md
! 85ca1d670e370df9efaab39e43dbab8f  gcc/config/h8300/divmod.md
! 45f45682c4ad7bff04b526e592542e45  gcc/config/h8300/elf.h
! 135a616ba91a8a5f150eaf97233d3445  gcc/config/h8300/extensions.md
! 695cd81dfb912a0ea62cbb85ae917e13  gcc/config/h8300/genmova.sh
! fce2df2444def70d0ec699c328802259  gcc/config/h8300/h8300-modes.def
! aa00820e6b487ec1a3b7da59c3375226  gcc/config/h8300/h8300-protos.h
! b6b29092c057b7ab699b3967f7728fa2  gcc/config/h8300/h8300.c
! 9bbc5716f543195d4c0f338d85748483  gcc/config/h8300/h8300.h
! 00d9101ffd31238f9cf1b2748a1af8fd  gcc/config/h8300/h8300.md
! 269bd23897f429f623e104ae9a71af32  gcc/config/h8300/h8300.opt
! afb50ec680d8184ce6d098f1abab2de7  gcc/config/h8300/jumpcall.md
! 5b6d27ff26b577328021a335f98d041e  gcc/config/h8300/linux.h
! e82f0e24370875405fc8ac81fd38c382  gcc/config/h8300/logical.md
! 0eaf500581a3ee2a982743772cbf9baf  gcc/config/h8300/mova.md
! 89bfb55bb5ffb16eb60d5b3f0d83a6f2  gcc/config/h8300/movepush.md
! 1cc3e9b120dcaec74f74e65b2bc56f8c  gcc/config/h8300/multiply.md
! fc7ee39dc20614bae8a3a48a66cbe9fd  gcc/config/h8300/other.md
! c1aee67fcf1ef3d546eb371dc4fc0695  gcc/config/h8300/peepholes.md
! 70fbc7a4201e4848062dcc320e29d262  gcc/config/h8300/predicates.md
! 9408f38af0138d69b898cdbd9c5c079a  gcc/config/h8300/proepi.md
! 17f2d7f0a11c766c9db02b97ff3ec96a  gcc/config/h8300/shiftrotate.md
! fa113ab2ce2ecb35801333089606d27a  gcc/config/h8300/t-h8300
! ec6b78e14e330b2834d5072ec199af82  gcc/config/h8300/t-linux
! de68ba63b5898b0f6d41860abd8dd67f  gcc/config/h8300/testcompare.md
! e71081f44c45c6f7015f891cb881bda4  gcc/config/host-darwin.c
! 08555921514c5ede8b38a1204f7e24c2  gcc/config/host-darwin.h
! 09c703aa5fb5e1ebe43451a266b08e45  gcc/config/host-hpux.c
! ce3c8e3aceb984fed9047665478326c7  gcc/config/host-linux.c
! f7058f530e780386bfff96d559515732  gcc/config/host-netbsd.c
! bce872407ffa808d0db599bc7629d590  gcc/config/host-openbsd.c
! 0d48b7931c02b5621b0af0eeca37e2d2  gcc/config/host-solaris.c
  2c191e2d8d033611c6fccc8362d9e8f0  gcc/config/hpux-stdint.h
! 3c7925b05c2dab7ea7529815092e77c4  gcc/config/hpux11.opt
! 263b37387c22edd1eb9e96646a158fa6  gcc/config/i386/adxintrin.h
! 5b432e4704ce6c673a612e9ee95f8330  gcc/config/i386/ammintrin.h
! 28dcfe5268c82cdc42292f182469963b  gcc/config/i386/amxbf16intrin.h
! 2d9d8e73beb1902033e40d93fe7ae3bf  gcc/config/i386/amxint8intrin.h
! f4ac9cdd6fe1c388fb12a3695be9e14b  gcc/config/i386/amxtileintrin.h
! 191a6ecdf5316e7035dcc896f1aaaaf0  gcc/config/i386/athlon.md
! 1203fdf8b1487c9f925131b28b02b44b  gcc/config/i386/atom.md
! 24b0ba3db73234857e9f4e731b3667a0  gcc/config/i386/att.h
! 5a82bdf78e64c8cf7480964b2128d873  gcc/config/i386/avx2intrin.h
! 0a6cb593262395bc291cb0d92015ad64  gcc/config/i386/avx5124fmapsintrin.h
! 7723144a0f10bb7b090a57a091e3b069  gcc/config/i386/avx5124vnniwintrin.h
! 6ea0db3c330bfe4947b655b49a5fe6c3  gcc/config/i386/avx512bf16intrin.h
! 17ade423b427c62e967e5b967ddfb79c  gcc/config/i386/avx512bf16vlintrin.h
! 618b88152e063926b86abd8ffa5d1a6b  gcc/config/i386/avx512bitalgintrin.h
! 118a53e3f98f316a1cbf54453cad801f  gcc/config/i386/avx512bwintrin.h
! fc95a6779839884b9fc3c3eecfab9669  gcc/config/i386/avx512cdintrin.h
! 77f8546571fb61d83fb84241a97b7fd0  gcc/config/i386/avx512dqintrin.h
! 8cc4f2851dfd47e6cbd9f8043434b618  gcc/config/i386/avx512erintrin.h
! 57760a73af5f476ce5071cf19e403644  gcc/config/i386/avx512fintrin.h
! 06c4e386cd05fafff0c2d017aa8ba05e  gcc/config/i386/avx512ifmaintrin.h
! 3a6a368007d6b7c1d9bc93f91ca4bfc3  gcc/config/i386/avx512ifmavlintrin.h
! 2c23a2ad463c4660ffec749da97c76b5  gcc/config/i386/avx512pfintrin.h
! a0c0e88addebad24adfb1f8e5365f2bc  gcc/config/i386/avx512vbmi2intrin.h
! 6a23978cfeeb2ee4d14a12db97552e55  gcc/config/i386/avx512vbmi2vlintrin.h
! 53ea451d4062d5780ffe52f79796fbd3  gcc/config/i386/avx512vbmiintrin.h
! 1f2a1cd6949ea60bb4f394767fea292a  gcc/config/i386/avx512vbmivlintrin.h
! d442ca6ba65d88252446650d365d976b  gcc/config/i386/avx512vlbwintrin.h
! 193e0561211290a017203889a8493ad9  gcc/config/i386/avx512vldqintrin.h
! 493da1f43b7d7e61cee810aa9763d5a3  gcc/config/i386/avx512vlintrin.h
! ef5341dfb493824b3754736d510cb1c6  gcc/config/i386/avx512vnniintrin.h
! 04105c4479e4c01b1929435603e0692e  gcc/config/i386/avx512vnnivlintrin.h
! a969a30b3a2e94336738f2f9e502e111  gcc/config/i386/avx512vp2intersectintrin.h
! 3c58c709bc23bb34c2ccdea02afaf083  gcc/config/i386/avx512vp2intersectvlintrin.h
! 5802bdcf96501f2f5ae54e6fab72580b  gcc/config/i386/avx512vpopcntdqintrin.h
! 2abfe40a3d6b4c81aa88838acc5f13a7  gcc/config/i386/avx512vpopcntdqvlintrin.h
! 56808e378039c6259fb02670a8058641  gcc/config/i386/avxintrin.h
! 5aa4e21c1fed1376f3f4064fd53d1392  gcc/config/i386/avxmath.h
! db53c9013345485c7da192d58adf0476  gcc/config/i386/avxvnniintrin.h
! ca108380d0dffef4c7a5146eef2b8413  gcc/config/i386/bdver1.md
! 29e622d10c86e3f2156498bc001fda86  gcc/config/i386/bdver3.md
! 3357019c425f5d4ee295236f4ea3907a  gcc/config/i386/biarch64.h
! f3fe570a9a0f5eea26809292b7a2ba99  gcc/config/i386/biarchx32.h
! b62a55814e1394d7f451bb96c5d19992  gcc/config/i386/bmi2intrin.h
! e60820399d449004a50aee109408bda7  gcc/config/i386/bmiintrin.h
! 07beaefa8828a57a17582739cd8125b7  gcc/config/i386/bmmintrin.h
! a9201ca9fc04e72085670ed1c89ed1d0  gcc/config/i386/bsd.h
! af01cc9f3729f016bc4c78afea6a7b3b  gcc/config/i386/btver2.md
! a8d6049f5a5f72a7fbe3b8d4c2c0d4ba  gcc/config/i386/cet.h
! 41bb75e6eea2d4813baa3289706ba7b2  gcc/config/i386/cetintrin.h
! 62aac65b3ed61249d6be157fe4afb091  gcc/config/i386/cldemoteintrin.h
! 39bdcc420e8a84a74cd5947223064b10  gcc/config/i386/clflushoptintrin.h
! 3e3bde0662c291cb954da4c63efe9ce7  gcc/config/i386/clwbintrin.h
! 0c3d45c97529fbdedb432fc823cf8a6f  gcc/config/i386/clzerointrin.h
! 95f79c416a20963a9571c532e60955fc  gcc/config/i386/constraints.md
! 6b090caccbe40cc7364c01d6955ae695  gcc/config/i386/core2.md
! 63121c44c1f55ab239d908600580e6e4  gcc/config/i386/cpuid.h
! d953ded987a4f0af89ae9755a0f7ef97  gcc/config/i386/cross-stdarg.h
! 2231fe3b31aa5b8c847d515b62cfa994  gcc/config/i386/crtdll.h
! a2f5dc3cebc9ff380d4e2f7612ee5a71  gcc/config/i386/cygming.h
! c9c593611b6e66ec45e60aa9d4ff592d  gcc/config/i386/cygming.opt
! e54ea527bab7db8b62707abf7d8590ca  gcc/config/i386/cygwin-stdint.h
! b5ae0a1d0b938c1efa427d0072eabbf1  gcc/config/i386/cygwin-w64.h
! 986fdbf17c77b47402de2e1d369fdb93  gcc/config/i386/cygwin.h
! aa7f76fe99be46381f2818bb1514a2f5  gcc/config/i386/cygwin.opt
! b8fc0b400408d58cc2bb1539185eec9e  gcc/config/i386/darwin.h
! e4db542240e16290cbdc69380f3b9dc6  gcc/config/i386/darwin32-biarch.h
! 1656f562846ff5f0c45ad1291cc82d18  gcc/config/i386/darwin64-biarch.h
! 2361d24556fbdcd6f9f833148a1254fa  gcc/config/i386/djgpp-stdint.h
! d04ed61f749e229f239897b3baca4938  gcc/config/i386/djgpp.c
! 7eef87bf6d5ed6ed58a3f49b605fa304  gcc/config/i386/djgpp.h
! eb87f240e280f50a4f7213e4c1693b58  gcc/config/i386/djgpp.opt
! 7107a1b32e7712e57535cf017a9e3b31  gcc/config/i386/dragonfly.h
! 66a900eaa0c5b9b9da750d357f64cc44  gcc/config/i386/driver-i386.c
! 3957794a408aca3d78d50443cdaa5160  gcc/config/i386/driver-mingw32.c
! a58296a3ce52541fa1ec1d97d428a2d7  gcc/config/i386/emmintrin.h
! 4f000e9cad83855e36be99512cff28a1  gcc/config/i386/enqcmdintrin.h
! 5dca9fc8ad0373a79d14f2d2627fe342  gcc/config/i386/f16cintrin.h
! de22fe956565fe70e9f6e91f3a38fc99  gcc/config/i386/fma4intrin.h
! b2ce7749429816e6e2c8ffbdbf650a6f  gcc/config/i386/fmaintrin.h
! ff05b8e7f14c1f9cbe4691a475d8cb62  gcc/config/i386/freebsd.h
! 1bb7c1ea5ebab3621ccf47b69a803aae  gcc/config/i386/freebsd64.h
! 38af74017977ef87ee4928cd8119615e  gcc/config/i386/fxsrintrin.h
! ea421e955b9420fa01f752557868d6f0  gcc/config/i386/gas.h
! d87f5906e5cee04c568119528636e1c2  gcc/config/i386/gcc-auto-profile
! 82f699b20b56ef956ba64fed907ea2a2  gcc/config/i386/geode.md
! 5ee4f49d0e7aab0f82a49d884fbc049b  gcc/config/i386/gfniintrin.h
! 150b5138b9224e24e53f821c744484eb  gcc/config/i386/glm.md
! 1875affe4277584801678d7587573a36  gcc/config/i386/gmm_malloc.h
! 1c08f4ff502d16c18bb54e318e030ce4  gcc/config/i386/gnu-property.c
! c9dd44c13100f270f8dac4c4353d5205  gcc/config/i386/gnu-user-common.h
! f63afc859775aca634f9c3038a88a2e8  gcc/config/i386/gnu-user.h
! 69d747426a2cd567127374ec436971c7  gcc/config/i386/gnu-user64.h
! 54529083ddab72f042302240de5c66c4  gcc/config/i386/gnu.h
! 3688414c789551729f539ac00a1959db  gcc/config/i386/haswell.md
! 778af68d34cac9803f97b5a2d277cf37  gcc/config/i386/host-cygwin.c
! 54879f151cb49c41b25012bad45ff4fa  gcc/config/i386/host-i386-darwin.c
! 6a81b196bbb5f45746b5c1414563946d  gcc/config/i386/host-mingw32.c
! dfd31f5b9f3ae6b0f0cfbc91f34b22d3  gcc/config/i386/hresetintrin.h
! f416d4c1b5f76b0c32dcfa57cbef9de0  gcc/config/i386/i386-builtin-types.awk
! 4e99fd2d8e886c8fedca887be1ceccad  gcc/config/i386/i386-builtin-types.def
! 61439f21b1fafa107dda0a49e355123a  gcc/config/i386/i386-builtin.def
! 1dc75a552c0d6998bea2786836c26452  gcc/config/i386/i386-builtins.c
! 2eb66258231da97923f18a6fb2fb2526  gcc/config/i386/i386-builtins.h
! e93ce5f91f999045596fda2304d9776d  gcc/config/i386/i386-c.c
! e87e1d322f0b5d6d0862f8b523832d11  gcc/config/i386/i386-d.c
! e671600d18912b4f01a5d0fceea3d4df  gcc/config/i386/i386-expand.c
! 68f53a8d27a4bdcd5018b83939e20f6c  gcc/config/i386/i386-expand.h
! dd464cbc7d083f9311116080f270e855  gcc/config/i386/i386-features.c
! 86c0fda429064123819ee0155f367a5f  gcc/config/i386/i386-features.h
! 04cdac9cb26ba183b03b6f9c7a01b792  gcc/config/i386/i386-modes.def
! b14988c53d21c3bf19b5d157a1503564  gcc/config/i386/i386-options.c
! fe60119ebc2cc86648e81161137ee957  gcc/config/i386/i386-options.h
! 6162f2f6d59de8eec399101815b311fb  gcc/config/i386/i386-opts.h
! b52d1366937ad82efd6efd1590e73779  gcc/config/i386/i386-passes.def
! 1905e9dbeb917e8b2caf32cc98f4b5d3  gcc/config/i386/i386-protos.h
! f9a563f0072fa2e4091c35d5fe3d53c7  gcc/config/i386/i386.c
! efd333c54c81f2840c9dbb82e80e68e2  gcc/config/i386/i386.h
! 1f2ce4d81972398ffabd0e5b5795b5e4  gcc/config/i386/i386.md
! b79dc8d1e7ab48a57991e3149abf23cf  gcc/config/i386/i386.opt
! c10c5e5da62216f81b78dd46673df070  gcc/config/i386/i386elf.h
! e54b0acb11af35cf1d05cfef525dd659  gcc/config/i386/ia32intrin.h
! fa1c19397f6d7ac84e3a77d2fd9d70bc  gcc/config/i386/iamcu.h
! 3ce8963cf73ccf635fd53ce0930a7da5  gcc/config/i386/immintrin.h
! c14173e496e1e984d1b647264b8f98ab  gcc/config/i386/intelmic-mkoffload.c
! 811b0b00a8c0fc124e622ad90b547852  gcc/config/i386/intelmic-offload.h
! 47310d5ba442b06cdedcdd06e9c4b177  gcc/config/i386/k6.md
! efa399a1683c2e9e620fe07fb93a27cc  gcc/config/i386/keylockerintrin.h
! 4d16043ddf484b49f258111f16673bf0  gcc/config/i386/kfreebsd-gnu.h
! 7ed0dc43e55f25c2d16997360745fa1c  gcc/config/i386/kfreebsd-gnu64.h
! e25cabdfc5646b345eb7b5e25ad23625  gcc/config/i386/kopensolaris-gnu.h
! e000f39370e7db781a2612bd57ff2a1c  gcc/config/i386/linux-common.h
! 5fcf5477921b3b4ea9362b1183335850  gcc/config/i386/linux.h
! ed16e42326df5567034dce043d45a719  gcc/config/i386/linux64.h
! 37d0bc3f86f837f1b2deae4ee5b240bd  gcc/config/i386/lwpintrin.h
! 6e2f234802dc1807a2142f293afced8e  gcc/config/i386/lynx.h
! 5bd9da959ad79e849d0ded2a10415e66  gcc/config/i386/lzcntintrin.h
! 2cd35fa3d499c2c1e50055c513822737  gcc/config/i386/mingw-pthread.h
! c912f02783f7a414328c5eb819720dfc  gcc/config/i386/mingw-stdint.h
! b38248cde141fc9fed08e9ac46211173  gcc/config/i386/mingw-w64.h
! 4b1f092fa8c0e01719f92b1c69851f1d  gcc/config/i386/mingw-w64.opt
! 3a5730df9219d8ba566f353d1466e6a4  gcc/config/i386/mingw.opt
! 9de786275129d0f546dcac922a1c671a  gcc/config/i386/mingw32.h
! 8c2a40be98f698117815409db5755e07  gcc/config/i386/mm3dnow.h
! ebadd8939e5045c483e0067e83f84ea5  gcc/config/i386/mmintrin.h
! a4907954895f6236cf5afcdba2be40d0  gcc/config/i386/mmx.md
! 3ead5a3ca4f10d35ec0b1d203eaff264  gcc/config/i386/movdirintrin.h
! de4344ede8a257d98598f21855100331  gcc/config/i386/msformat-c.c
! 1978ffb70e7e93e7a11ef43e7a27396c  gcc/config/i386/mwaitintrin.h
! adf3c14908d936944b2ea922606143fb  gcc/config/i386/mwaitxintrin.h
! 0e21d66bda8a66c89768a983be7fe0c6  gcc/config/i386/netbsd-elf.h
! ad369093e019a0008ffcaa00fc1a9d03  gcc/config/i386/netbsd64.h
! fe5c6cd44f6407a878554f5522880cf6  gcc/config/i386/nmmintrin.h
! ea4646632f0c33d007f51c3870147b0c  gcc/config/i386/nto.h
! ddcb120bd2dd518b9e9ff21da3af9092  gcc/config/i386/nto.opt
! 0626a0366289685e0c40684fcb3de783  gcc/config/i386/openbsdelf.h
! 24b8247a77542f8774c4eb7900669016  gcc/config/i386/pconfigintrin.h
! ab0bc4d2292acd69dbbf4d7b6f0c309d  gcc/config/i386/pentium.md
! c44e6c969a56ce15caac8fb01e42f8b6  gcc/config/i386/pkuintrin.h
! 635647f1ab99ee96dd5ccc07618b2098  gcc/config/i386/pmm_malloc.h
! 92edc254628b377d78d6e9491fdce8aa  gcc/config/i386/pmmintrin.h
! b912f7a44accd114d932f1bd128eb83c  gcc/config/i386/popcntintrin.h
! b753cd41f6fdd8ee8be1c1034d4d3e9e  gcc/config/i386/ppro.md
! a57d58241691ba144e0ba6d871a157a4  gcc/config/i386/predicates.md
! 7df26c7af82cf825758be1dddd83d323  gcc/config/i386/prfchwintrin.h
! 6d07e8e896f2aafcdeabb31c3f68dbac  gcc/config/i386/rdos.h
! f78da15b73fdb639b57920b0a86dd843  gcc/config/i386/rdos64.h
! 89c221695ee77e529de9345a4857a667  gcc/config/i386/rdseedintrin.h
! ce08abc4ca53730d8530efa0fc1ac873  gcc/config/i386/rtemself.h
! e1e11d9cd0e8002dee79ab23d590ed1a  gcc/config/i386/rtmintrin.h
! 62f26943a123c6b6edfd395d46c9f811  gcc/config/i386/serializeintrin.h
! 76a58cad0f61b44b8fe7d4915dd50d07  gcc/config/i386/sgxintrin.h
! 738791e034eae8f304812280d786951d  gcc/config/i386/shaintrin.h
! f808dc4b45bc244b7588e4dbe292d158  gcc/config/i386/slm.md
! aa606ad57b003eaf3855a789cfdbdfda  gcc/config/i386/smmintrin.h
! 86d70f5d5123563facc0d2e2dcfbd9e6  gcc/config/i386/sol2.h
! 3ce3a9d7e8ce3adabd84c82a66ba3692  gcc/config/i386/sse.md
! df2791f0495a636b555c9a5f3f9ff153  gcc/config/i386/ssemath.h
! fdb6c5262186a722ee43fabb890960ae  gcc/config/i386/stringop.def
! fdbc1c329d68559ae10ad05554ed8b15  gcc/config/i386/subst.md
! 30b0ee227a655b804805737bb7342b62  gcc/config/i386/sync.md
! 523680b87658712da91756e5298ef1b9  gcc/config/i386/sysv4.h
! 260160f6386fd4a4cfba109571bdc862  gcc/config/i386/t-cygming
  d5339d6e5a09a02383903f617230e19e  gcc/config/i386/t-cygwin-w64
  98d94861be252f8541038afee279417f  gcc/config/i386/t-darwin32-biarch
  8f92133cb94c59e2939cd65dc5fc8cb4  gcc/config/i386/t-darwin64-biarch
! 4c5d6e2fe993d41a182cdd83904065d4  gcc/config/i386/t-djgpp
! 1f4fa538507be7ed71d3de1f7044a983  gcc/config/i386/t-freebsd64
  3a1c0dac7740fd9ef48c7bdf5f313c9d  gcc/config/i386/t-gmm_malloc
  d5939c6bccbf8957206c63308ce628a6  gcc/config/i386/t-gnu
! e6397043c320f46b30091283f4821cbb  gcc/config/i386/t-gnu-property
! 3d2dfb3e9e6270ca47e84d8ecc33a902  gcc/config/i386/t-i386
! c3fde04ef47ddd6ec0a60c98d7f55224  gcc/config/i386/t-intelmic
  51dcf9826007c01cfd67be11d5f0d538  gcc/config/i386/t-kfreebsd
  39ad69cb2a2e67aa8d46664a75b02789  gcc/config/i386/t-linux
! 5b47a0a81e41e98d3aa64f7068d10e37  gcc/config/i386/t-linux64
  cd662e746e08a18749e8272fa759278e  gcc/config/i386/t-mingw-w32
  67bcf41f125bbec93a13ad3bd98abaee  gcc/config/i386/t-mingw-w64
! f08b968820f569b865f6053578dc6e2b  gcc/config/i386/t-omp-device
  12a68576d3577a8da82089f18d60c613  gcc/config/i386/t-pmm_malloc
! 3294904a3dfd5c4738a2d2674b6bafd3  gcc/config/i386/t-rtems
! 30e794d70ef1385b5d9cd7597c67e420  gcc/config/i386/t-sol2
! 17093f3079d5c350bd1aea028845141e  gcc/config/i386/t-vxworks
  b80a5a4a8c8fc32ca318158abc98dc20  gcc/config/i386/t-vxworksae
! 8f2742c5384ea504dd09aa6d53505c68  gcc/config/i386/tbmintrin.h
! bf8ed74a2bd0dbd7bdd9ca9d43f881f7  gcc/config/i386/tmmintrin.h
! dc4a21bccdf5e50692bb3f8e1b212fed  gcc/config/i386/tsxldtrkintrin.h
! b6641b5f4756ee97ac2b08ef48840c72  gcc/config/i386/uintrintrin.h
! b17e9a7d2e931aa76f39cb379121fe74  gcc/config/i386/unix.h
! 37d0e42f0e357072e9c374bd8d3675c7  gcc/config/i386/vaesintrin.h
! 572228cf66709298b339e5060476550f  gcc/config/i386/vpclmulqdqintrin.h
! 6a144336e877160462acca14ffff69ff  gcc/config/i386/vxworks.h
! 5a19a148670955c1547256bb4d34f001  gcc/config/i386/vxworksae.h
! eede74031d50d03c3a90ce1056bf311e  gcc/config/i386/waitpkgintrin.h
! 7d158f1926bd4e087e49b4273c7cb260  gcc/config/i386/wbnoinvdintrin.h
! 376a221887c2df38da7c2c6dc81fc799  gcc/config/i386/winnt-cxx.c
! f1dccd3e065a37af0bc94226ffad931e  gcc/config/i386/winnt-d.c
! 0878afa7d753dfbb613ff2eafd75c0bb  gcc/config/i386/winnt-stubs.c
! 9f66ca6a43e400bd35cc3d7f9f4a82c7  gcc/config/i386/winnt.c
! cadb3f72418ba1b08a78435820016345  gcc/config/i386/wmmintrin.h
! 627c3e925a142fb6d2a14368fb637f28  gcc/config/i386/x-cygwin
! bae69273c5e47d61e99558ca73c4fabd  gcc/config/i386/x-darwin
! 12e09c6fa27c603c6db59fbfc2a6b089  gcc/config/i386/x-i386
! 97c8723c0a17cc27496bf3f2e00575fd  gcc/config/i386/x-mingw32
! 79a43ba764ecdf9a8182ebdd85310d50  gcc/config/i386/x86-64.h
! e8de4d87d46a089a190cdcfd5ab996cb  gcc/config/i386/x86-tune-costs.h
! 7fbc73604928f2f3eae088fea7082e0b  gcc/config/i386/x86-tune-sched-atom.c
! 8e3814442de68a4801c8a7449d277e25  gcc/config/i386/x86-tune-sched-bd.c
! 83e27c2de80a1b674196a9f6c758a5a6  gcc/config/i386/x86-tune-sched-core.c
! 9a5ed19a8a9efd3aa8f780c637126988  gcc/config/i386/x86-tune-sched.c
! e4c639befde2ed972037502a8c268a95  gcc/config/i386/x86-tune.def
! a37907df7b82725358293d96278edc51  gcc/config/i386/x86gprintrin.h
! 01c872023bcadf9bc3f32938f1290d99  gcc/config/i386/x86intrin.h
! bedb15dc5d9dc0741fa2f65684e6afc8  gcc/config/i386/xm-cygwin.h
! 632cea0ba390f635083b2227179602ea  gcc/config/i386/xm-djgpp.h
! 140ea44571ef35b3a03d1365f14ca2d5  gcc/config/i386/xm-mingw32.h
! 4a6ed6e424b88d5035e3e8f341605e34  gcc/config/i386/xmmintrin.h
! 52609834f7079326fece899956e91313  gcc/config/i386/xopintrin.h
! 1204d5e0c8e3c529834b7432dc6dfd81  gcc/config/i386/xsavecintrin.h
! 68241aedb0d08e7498ac4ec9ed1c2783  gcc/config/i386/xsaveintrin.h
! ced95bb984b96ed6d6768b2b5d4d9d23  gcc/config/i386/xsaveoptintrin.h
! 8b1811e1567e01938b667ebe3954f991  gcc/config/i386/xsavesintrin.h
! 28f7cd3a41b61a99c1560e6e0aef01c2  gcc/config/i386/xtestintrin.h
! 1a12d00791dc5750b71e438d322ddf2b  gcc/config/i386/znver1.md
! b4f1f741cb220bde1a5477221381c160  gcc/config/ia64/constraints.md
! fb20b99e59a0837f7730623933540364  gcc/config/ia64/div.md
! ebab5f6ec27511ec34a317311dc1fb3d  gcc/config/ia64/elf.h
! fc38fed4b419d7baacd5e2aeaf0907df  gcc/config/ia64/freebsd.h
  89edd175b4bfe583ec3ee965092fd5d0  gcc/config/ia64/hpux-unix2003.h
! c05c3e328149dc1368fe39582c50a681  gcc/config/ia64/hpux.h
! 54b1e96aee001fac7e82f7677d87fb19  gcc/config/ia64/ia64-c.c
! 87a48f76590c1526adbdfc0e5b487f63  gcc/config/ia64/ia64-modes.def
! fb2a648b5b42647d93703ec1a763127a  gcc/config/ia64/ia64-opts.h
! 88dac5ae24ec63f44bc3995f73b3402e  gcc/config/ia64/ia64-protos.h
! 1293fd6558b4787a20dc5f9aedcaf378  gcc/config/ia64/ia64.c
! 8c12b45d74ebb7dfad8edafae0bcedfd  gcc/config/ia64/ia64.h
! 019abc73c0877db421ea662d2dde1641  gcc/config/ia64/ia64.md
! 5801e0eb3c9e43b1a14fd543a029569b  gcc/config/ia64/ia64.opt
  dcc77d7023d20b64688bf213c2d327b5  gcc/config/ia64/ia64intrin.h
  4b86fa74a7636ffdb9787a8643220eec  gcc/config/ia64/ilp32.opt
! ef35197279b492c0f03db2be4af9550c  gcc/config/ia64/itanium2.md
! 736bd64ceb98f5e82f6f343adbc4363a  gcc/config/ia64/linux.h
! 4dd6678c41a28a26226823d3dcfd13e5  gcc/config/ia64/predicates.md
! c5fef6bae8e2719e8e1714c32efadb33  gcc/config/ia64/sync.md
! 7812ea35099636289a6c15a6604d3e8f  gcc/config/ia64/sysv4.h
! c0250b0c37d7fa734d0cb46c0b2a38b1  gcc/config/ia64/t-hpux
! ecd2eb048639b226c66b484afc1db7bc  gcc/config/ia64/t-ia64
  67736f64800d10923b58be4e448620d6  gcc/config/ia64/t-linux
! de11210e721afefa6711545176a69c07  gcc/config/ia64/vect.md
! f2c9df77c312ac536026f78de3935654  gcc/config/ia64/vms.h
! aa85b11ca73afbe4c87fbb341bb60ea1  gcc/config/ia64/vms.opt
! 48623b369e6f4348becac05dc57367d6  gcc/config/initfini-array.h
! 427f415bd88193684fdaa0d83e494702  gcc/config/iq2000/abi
! ba95cc055c87b678122aa53b42694b0d  gcc/config/iq2000/constraints.md
! 570464f808f4789c3dbeced89e303710  gcc/config/iq2000/iq2000-opts.h
! dfe8e69a1cead98174bdfe8840a0e1e7  gcc/config/iq2000/iq2000-protos.h
! a2439e450ba389e3484d90dbd2cf03d9  gcc/config/iq2000/iq2000.c
! 6e9dd5dbea31ab234fbfb4ca7b56f2c3  gcc/config/iq2000/iq2000.h
! 41deeabe714e51390b5517706901c7bb  gcc/config/iq2000/iq2000.md
! e0d2df414639c2b1d48a747e066e73e5  gcc/config/iq2000/iq2000.opt
! 9a5a0e12e4826d6a936fc1d2fd44d75b  gcc/config/iq2000/predicates.md
! b35e7aa6798e18be972a77ad6cb71581  gcc/config/kfreebsd-gnu.h
! 0252347a96801a882ffb0304eea0038e  gcc/config/kopensolaris-gnu.h
! d88908c1f1be156dd76a1d95479538f4  gcc/config/linux-android.h
! 9732c22669168f53451ddbbf6304e923  gcc/config/linux-android.opt
! d346387fa76bb85ca7b362afea3e349f  gcc/config/linux-protos.h
! a11a91a8d62e393c0a2ebeaa8bb84eb2  gcc/config/linux.c
! 035f0504b24b213064e21b8091b83bdd  gcc/config/linux.h
! 478c20e44c47f112477328e3524e71bd  gcc/config/linux.opt
! 33d605a6160b54f51844d471f8b37bf2  gcc/config/lm32/constraints.md
! 8d6b1cd265aaf048f3e9b6c7679ce6c6  gcc/config/lm32/lm32-protos.h
! c7d536607d523bb296dbf4b5b91b49ed  gcc/config/lm32/lm32.c
! f2af4acb1059e654efed4e1bbc51f143  gcc/config/lm32/lm32.h
! 548cd44a56b861ea125c331870a4ad3e  gcc/config/lm32/lm32.md
! 9a249d3b3d234eaf811829bc24682f30  gcc/config/lm32/lm32.opt
! ae6a9b8b65fb42c82b09b57d8616ad7a  gcc/config/lm32/predicates.md
! d1bd62d45eaef79c1b32e21c13a536ee  gcc/config/lm32/rtems.h
  a9d1d80c40cc6eb8e9a32d54f82dae43  gcc/config/lm32/t-lm32
  660559cdac2b08e91486a9db7b4a2872  gcc/config/lm32/t-rtems
! 9177ac536ecf5956261c9f57654b7da9  gcc/config/lm32/uclinux-elf.h
! 1d34816592584af197c40ba1f56d1260  gcc/config/lynx.h
! 071a159be3e2ba5f2df99f13c63921fa  gcc/config/lynx.opt
! f36f04bf512941f427ad8c8b91718f85  gcc/config/m32c/addsub.md
! 5650cb29a05a4dcfaefdb3b8c1019617  gcc/config/m32c/bitops.md
! 19f5526ef4e25ee78a486f42113aadae  gcc/config/m32c/blkmov.md
! 02267fad34a77671e20f58d61c351397  gcc/config/m32c/cond.md
! e3aa8d2e50dca817c681bb6d799d658c  gcc/config/m32c/constraints.md
! 0e41d8d8ee6cb56c0e563d0b6fd4a6bb  gcc/config/m32c/jump.md
! d06250d6100b78208c3b28c571c6bf8d  gcc/config/m32c/m32c-modes.def
! b55771a4e7ef98a46ea5a6ec5eba3203  gcc/config/m32c/m32c-pragma.c
! de3000462acd3eafd3f8f25bad057a3b  gcc/config/m32c/m32c-protos.h
! 4b66f4329ded96c40719351957377174  gcc/config/m32c/m32c.abi
! 1dc52514eac3e12a4f948fc4290f2190  gcc/config/m32c/m32c.c
! b73a827aaff1faaf41deef838aef8181  gcc/config/m32c/m32c.h
! 9b71e1e7d780d06e3e8fc2469d7ba413  gcc/config/m32c/m32c.md
! 15893c07c190f8182254885c05d07fc1  gcc/config/m32c/m32c.opt
! 3b6c76dfdfdc3dcd43bf81f309b0ee35  gcc/config/m32c/minmax.md
! 764c746c08158c3363ffe2d955419297  gcc/config/m32c/mov.md
! 83c3896335a0b020ae8361ecbf173e72  gcc/config/m32c/muldiv.md
! 900a7bfa13b1585a8e397ab706696de3  gcc/config/m32c/predicates.md
! 9a20fa89c4294d90dc7f6044a0bd298b  gcc/config/m32c/prologue.md
! 7addc8f11f627275ab46c561f335942e  gcc/config/m32c/rtems.h
! 8b4bb58678109ace58cee0c61f0b1619  gcc/config/m32c/shift.md
! b8a3603dccf5c661fac5928318f400de  gcc/config/m32c/t-m32c
! 6b453eb1ac3a3290b287bbb61903288f  gcc/config/m32r/constraints.md
! 0db2efd8e225490fee35e81ea7407c36  gcc/config/m32r/linux.h
! a413e060f823e310f0398a7d6443fb8b  gcc/config/m32r/little.h
! c20244a1cdb7448944c17d8cfe30b968  gcc/config/m32r/m32r-opts.h
! 783f7caaac016ee9fbcba0180acf40ec  gcc/config/m32r/m32r-protos.h
! 38e83876e345a7faf54f7e80f82cba27  gcc/config/m32r/m32r.c
! e333bf4883f492d12f6149515659c675  gcc/config/m32r/m32r.h
! c363127e05a6d9e2a0407c72e6b296ee  gcc/config/m32r/m32r.md
! df7c96994ec3e906b21ea7159394d8ec  gcc/config/m32r/m32r.opt
! 9ee63682ad4bff23b196236768e9b84c  gcc/config/m32r/predicates.md
! e31234913635018c07ac44ec36347bff  gcc/config/m32r/t-linux
! bc02cecd972e5873d7e16e9701d552a3  gcc/config/m32r/t-m32r
! 594b6759202beb6443afddd756b41618  gcc/config/m68k/cf.md
! dbc6fb1c37367a838e72e9beb2917975  gcc/config/m68k/constraints.md
! 5e69b21c86a418836bfd2e77202fda31  gcc/config/m68k/genopt.sh
! 12c75385ecc6a95ef618b041bc9b150d  gcc/config/m68k/ieee.opt
! aaeca1cc3a35d3cf7efad02e6da5f83c  gcc/config/m68k/linux.h
! ebae2b5008ba81897a057955a2798359  gcc/config/m68k/m68020-elf.h
! 2b474c53a9a1fa109e9877cf1ecb7ba8  gcc/config/m68k/m68k-devices.def
! 513a812bf024b269657e6b9be8f0ca6e  gcc/config/m68k/m68k-isas.def
! e95622b004006c9720e9eb2407bee4c2  gcc/config/m68k/m68k-microarchs.def
! 1d4578a2258d826f9c52729f67bd80f1  gcc/config/m68k/m68k-modes.def
! cf2501ddbaf6dcfd1cebd3a721ff3d4a  gcc/config/m68k/m68k-none.h
! 50f446307c655437b2727ac35853d8ec  gcc/config/m68k/m68k-opts.h
! 0fa1aa9658cfa6e0e63370fb372b56a9  gcc/config/m68k/m68k-protos.h
! 6a83e791c85c61abceea5c616e7d41eb  gcc/config/m68k/m68k-tables.opt
! 02d7c9e45339b442d75bc8d3707c6cfd  gcc/config/m68k/m68k.c
! 71c681ab4d49ac7c235f59e3684ce72e  gcc/config/m68k/m68k.h
! f0c4b0cbd145ae30d89c75b9d23d0dd9  gcc/config/m68k/m68k.md
! 2579550a73e90682048a8ebccfab32e7  gcc/config/m68k/m68k.opt
! df24e5620dee3db7ff23fb2aeeacba72  gcc/config/m68k/m68kelf.h
! a2a184d82937a38be07cddd5e9be5114  gcc/config/m68k/m68kemb.h
  c0472199959f16fcb58702880954da6e  gcc/config/m68k/math-68881.h
! 3f026bf6e0b284291e55b1cf7e5dedb1  gcc/config/m68k/netbsd-elf.h
! 3354867988f5632d4796f3e2fe53a887  gcc/config/m68k/openbsd.h
! 45cefaf9003911b21b39b534aeb575de  gcc/config/m68k/predicates.md
! 5b8cf71ad7e7f44b20a75ae652d22eb7  gcc/config/m68k/print-sysroot-suffix.sh
! 6f2baa166dabed458c5729618be1a86a  gcc/config/m68k/rtemself.h
! b45d4068fe3ac2abf51df75035e2cc44  gcc/config/m68k/sync.md
  19d5ed41f3394c9423ff3afe64804076  gcc/config/m68k/t-cf
! 4f96cbb7c086889f4baf86e42e1d091f  gcc/config/m68k/t-linux
  baa4595148bafa6426b8d665881ced45  gcc/config/m68k/t-m68k
  c8278c25339f71d746d91a193efd6cea  gcc/config/m68k/t-m68kbare
! 8f3069d96b80178713e738a74a4b7f90  gcc/config/m68k/t-mlibs
  0fd519d41689e5af998ca53a2f11e7d2  gcc/config/m68k/t-openbsd
  2919d876e31e6c4e0955d8cd4be5ce28  gcc/config/m68k/t-opts
  2899d62cd61c46fe504594a232959581  gcc/config/m68k/t-rtems
! 98a77d9f868d370ef1bdf4b4205c3b81  gcc/config/m68k/t-uclinux
! ae0f33baf8aad52883d911b212f5cdf2  gcc/config/m68k/uclinux.h
! 880c7ecbeca894049fc22848055807dc  gcc/config/m68k/uclinux.opt
! de054b3ca841cde1b51ab93ead7fe165  gcc/config/mcore/constraints.md
! 2855d3edfa206c963e50cd5f150d10fe  gcc/config/mcore/mcore-elf.h
! bedf9a27a0a2c347812a4cfa148c8c35  gcc/config/mcore/mcore-protos.h
! 613b74b328a902fbe101f0c3dbdd0990  gcc/config/mcore/mcore.c
! ebd3668ea76041d586c375a6bf330e90  gcc/config/mcore/mcore.h
! 7a20cfeeeac8b03cb78dbbcdd743a235  gcc/config/mcore/mcore.md
! 51dff2cb043b70cd28d07c79c9b3db89  gcc/config/mcore/mcore.opt
! ccb31dd2e613ea63febf122562af9e68  gcc/config/mcore/predicates.md
! 37438277460ac996badd7da3d5ae53a3  gcc/config/mcore/t-mcore
! 754b1e8e3c9e242971d0815eb0d13a6b  gcc/config/microblaze/constraints.md
! 09fe256071d39f6547a74e432fa74c68  gcc/config/microblaze/linux.h
! 83bf4f10883f6d9735fc9830b14eff24  gcc/config/microblaze/microblaze-c.c
! 4c958c9830d99b71c55a915f5087ca6a  gcc/config/microblaze/microblaze-protos.h
! 7681ff55c49d568e72bfc887d453cc30  gcc/config/microblaze/microblaze.c
! 85339f4feb09d1271527cb952529b919  gcc/config/microblaze/microblaze.h
! 475b490ad1becb69c5d9ac98db46cc62  gcc/config/microblaze/microblaze.md
! 3b0dee8f5b5f42c0ad3e038a629f0f11  gcc/config/microblaze/microblaze.opt
! 7328a364bd25fae66803ef76e62708b8  gcc/config/microblaze/predicates.md
! 73942535ea6ecce789228385b87d3dbe  gcc/config/microblaze/rtems.h
! 09c3b26a5f25e12bf125e876ab0cca25  gcc/config/microblaze/sync.md
! 17818a25ae3112098cd91d698e37f0f7  gcc/config/microblaze/t-microblaze
  63ccba4e7f745d36609d7c129bac6288  gcc/config/microblaze/t-microblaze-linux
  a8b08640136e3e7712d2278eb84c21d9  gcc/config/microblaze/t-rtems
! 207a70b57805e1f730f167eaaf78d375  gcc/config/mips/10000.md
! 59cf6e01539c33ba5175f53d10645293  gcc/config/mips/20kc.md
! 06667eea47c81552a4e1ae90724c5773  gcc/config/mips/24k.md
! d147cd11e0c67debe302a5a49a8c8f47  gcc/config/mips/3000.md
! 153eabe3333c0477669eb6e5f51625b9  gcc/config/mips/4000.md
! c951320893b40f25628ff9968a328dbc  gcc/config/mips/4100.md
! 6cf9855b4c9039920c5a24af159ae1ba  gcc/config/mips/4130.md
! 55502e0fb603a1aad337833c1dd26e61  gcc/config/mips/4300.md
! e2fe86c37b5ad0523f862be254dca4f4  gcc/config/mips/4600.md
! 2cab074b0d66e05ba4c35fb19d0fc64b  gcc/config/mips/4k.md
! 243e5baef70dd7b2d341776ab69d093f  gcc/config/mips/5000.md
! cd5ee578b8ad09b3ec3d67df5883b6dd  gcc/config/mips/5400.md
! 8b5f2d53a0e0432249f45a33cf155cdd  gcc/config/mips/5500.md
! db0d1c8a3b95f3279bcc6b99acbc2fc5  gcc/config/mips/5k.md
! 07eb4060a0381dead526ec15e8acbc53  gcc/config/mips/6000.md
! 3c4c8631f3a4478c212e6c2289ace41f  gcc/config/mips/7000.md
! caded01ae0b728effad4417753db2ca0  gcc/config/mips/74k.md
! 8c25d523fb40e91ff6f76f86e66dc37a  gcc/config/mips/9000.md
! d67ec97f9f9e1d5bcf583bf28e6406ef  gcc/config/mips/constraints.md
! db9307f81352439d709004a2c09bd3a2  gcc/config/mips/driver-native.c
! 9a677843d924d1517619b79307a3e19c  gcc/config/mips/elf.h
! 17dfc740f60b651166c7762e70a796e4  gcc/config/mips/elfoabi.h
! fde7cbbe8f8b8ade9910a0765b38a362  gcc/config/mips/elforion.h
! d3cb0b5b02e943128f1c00fea6f388b4  gcc/config/mips/frame-header-opt.c
! 45451d4728cb76141898a57812424ee4  gcc/config/mips/generic.md
! 88998235af80c743045f5f85621536d5  gcc/config/mips/genopt.sh
! c32285773525cd8f11a0763d145451e3  gcc/config/mips/gnu-user.h
! 0e1c487d3c9f3cc1b0bed4fc05891f35  gcc/config/mips/gs264e.md
! a7ce0001cb2f280f4fa8a3a33ddcf8aa  gcc/config/mips/gs464.md
! 7b9926862f43be6598f94075ff42b3c8  gcc/config/mips/gs464e.md
! 6bbfb76a306e4fb13675f3192b89efe2  gcc/config/mips/i6400.md
! 3650a27a8514395d42c276fe5ae6e57f  gcc/config/mips/linux-common.h
! 877f3ecbe38026391f8ed3f7bd6fa843  gcc/config/mips/linux.h
! add4b4838d8cbeacd45cf82d610df7df  gcc/config/mips/loongson-mmi.md
! 36a9a7bf88440c91715c4e214f7ecd04  gcc/config/mips/loongson-mmiintrin.h
! 42c44ddc5936cb3f92d09f3458127390  gcc/config/mips/loongson.h
! 88eafe1f5edbd3493e18b1800a42d77b  gcc/config/mips/loongson2ef.md
! 8c2be3bba43c86cf7d7776cd35be8e17  gcc/config/mips/m5100.md
! df776efabac3deea45e8af596426db50  gcc/config/mips/micromips.md
! 891c22e4ce1fbcd5b76b1da593985ab4  gcc/config/mips/mips-cpus.def
! ecdaa0df7ff80b4dae784974fb6aec3f  gcc/config/mips/mips-d.c
! c367c0630f7f023a908b12f4b0bcd43e  gcc/config/mips/mips-dsp.md
! 1e430aed06f2d59db5cfaa2ed082bbf9  gcc/config/mips/mips-dspr2.md
! af514a1f925002faa534e8e9af7e4c2a  gcc/config/mips/mips-fixed.md
! 6fe9c019b23470a4713ed97e64767ff0  gcc/config/mips/mips-ftypes.def
! b125f873d072e558225faced30c16710  gcc/config/mips/mips-modes.def
! 5dde86fd55084be46ad7c49c01a2a1aa  gcc/config/mips/mips-msa.md
! 82ce3594b1b612d1465ebdab253281a5  gcc/config/mips/mips-opts.h
! 1419718ff2e070b1c21d04048b50a805  gcc/config/mips/mips-protos.h
! e972e6ee968c5ceea9564ce75b572eb5  gcc/config/mips/mips-ps-3d.md
! b47b9237ca1cdd376492147fef2ebceb  gcc/config/mips/mips-tables.opt
! 11732488744371fbb103be5b89157d28  gcc/config/mips/mips.c
! 7dde563fb33bd1ab036762c99d9e484b  gcc/config/mips/mips.h
! cc41f5dfa824b8ebc1999709b81b6ecb  gcc/config/mips/mips.md
! 3bafa6a814101c62b01241da0805afca  gcc/config/mips/mips.opt
! 1fd42223964cc3f11f1cfd752daa8661  gcc/config/mips/msa.h
! be6c2c0ff3bd551ad19de35b7bf8a746  gcc/config/mips/mti-elf.h
! 9cce52aa207547861744c07a652ad293  gcc/config/mips/mti-linux.h
! 5d21ef19c6966537b2810515c0c771ca  gcc/config/mips/n32-elf.h
! af5f33fe97d295db83e00cbef23b56bd  gcc/config/mips/netbsd.h
! 65d9032ee9348a31ae00d98ca176a84a  gcc/config/mips/octeon.md
! f7866bc8a8d2091438e28099c0810614  gcc/config/mips/p5600.md
! d7878e7b4a161aa0d5898546226d3253  gcc/config/mips/p6600.md
! 6a6bd71f64e25549c8077f86164f53e7  gcc/config/mips/predicates.md
! 9064c5cf2d5f79ed0bc641cc010b831d  gcc/config/mips/r3900.h
! 4b67914db87ba0a1af22c8f80450bf50  gcc/config/mips/rtems.h
! a26c7aa400b11c75256ea9416adfa41b  gcc/config/mips/sb1.md
! 6bbddaedec2b5070efc0b41611261479  gcc/config/mips/sde.h
! 0e0f8d297eb79d14b43f8cb06783e8e6  gcc/config/mips/sde.opt
! cc78ee0926d98e9e65806a9fd177f8a7  gcc/config/mips/sdemtk.h
! 276824079e102e84a62f4ae2afe9723f  gcc/config/mips/sr71k.md
! e49e25c3c010e90ce06240313ab6fac3  gcc/config/mips/st.h
! fa1bfc95d15a014c67bee2bcb59547eb  gcc/config/mips/sync.md
! 84148177e8c2b2057414bf535b157ce1  gcc/config/mips/t-elf
! 28982a822a95dab6f6b9a203b8daf4ab  gcc/config/mips/t-img-elf
! d1b871f1c51d0849b7a7ee98e0627ff9  gcc/config/mips/t-img-linux
  f99fd825138aaee60804b8915e20d22e  gcc/config/mips/t-irix6
! 0eed341949343bc317a1e82419d1e2aa  gcc/config/mips/t-isa3264
! 9551cac0c5c85fb77e20b0eddf31ad0b  gcc/config/mips/t-linux64
! e70ae13d31a4a9a8d25f93b43c3b80d6  gcc/config/mips/t-mips
! 2c02999945c32d8eca801bf761afd575  gcc/config/mips/t-mti-elf
! 00905a75d84355cf00d8ec0e33656518  gcc/config/mips/t-mti-linux
! 03e59e8541ec183a8665f6e98ee0609f  gcc/config/mips/t-r3900
! 6f499bd391d054ee4fb5c0c979ed3414  gcc/config/mips/t-rtems
! 5ef774bf597fd8545bf32f63aee11f08  gcc/config/mips/t-sb1
! 3cc33d54b51e78cdb833539d8b817349  gcc/config/mips/t-sde
! 4c21e0e7b5638f30e7b6bbfa5f6533dc  gcc/config/mips/t-sdemtk
! c35042a60cbb9c3573425be723fb62f2  gcc/config/mips/t-sr71k
! 4a5b94ccfa56718c10ac987f5550e51a  gcc/config/mips/t-st
! 46ce0be1f18689fa0f8f11915bb7ff23  gcc/config/mips/t-vr
! 05be1f629ecea27c5c53fe721c9af797  gcc/config/mips/t-vxworks
! bf9b2976a917d1194b9f2246d8280cf6  gcc/config/mips/vr.h
! ac3c2b32541ac44d2db2ced743c99736  gcc/config/mips/vxworks.h
! 28d4de1043946a571cca5f03b486aafe  gcc/config/mips/x-native
! e80758080cf80095fb7053b0979e2c59  gcc/config/mips/xlp.md
! 0c7f416d5ee38c59fb808ea033f9527f  gcc/config/mips/xlr.md
! 0377b2bc7dc06a8cf57d7cbcfb75193f  gcc/config/mmix/constraints.md
! aff84b141da7a5369ff504c2671979c6  gcc/config/mmix/mmix-modes.def
! fde2d8673605274015716be62d61e826  gcc/config/mmix/mmix-protos.h
! a14b17d4dccfad690d3d77c59d851934  gcc/config/mmix/mmix.c
! 3399b22a28e25ad3e5fbd70335aa4532  gcc/config/mmix/mmix.h
! 21a333052e498bc925744d25480b7e39  gcc/config/mmix/mmix.md
! 8865f3c65caab3cddb237581d8393d85  gcc/config/mmix/mmix.opt
! cc3118d3373c8595c356d4da91f90dcf  gcc/config/mmix/predicates.md
! 050333e486703262c45555fe06055b59  gcc/config/mmix/t-mmix
! 7f470c7773c030ec5008355711667827  gcc/config/mn10300/constraints.md
! 6ebd59fd52e6364c7819cb81909b80e0  gcc/config/mn10300/linux.h
! 3bc9fee9a8adde0d87722f3390262482  gcc/config/mn10300/mn10300-modes.def
! f6b4069ec034f05579c9df40570c1b64  gcc/config/mn10300/mn10300-opts.h
! a778b60741fc18c19a351f1ed98cd239  gcc/config/mn10300/mn10300-protos.h
! d9af0b928fc083b0478adc64fbb37901  gcc/config/mn10300/mn10300.c
! 8c494fde61d00746703d43b567e1a762  gcc/config/mn10300/mn10300.h
! fc97a828871a4b085e4055d666a16560  gcc/config/mn10300/mn10300.md
! 260e037d582ca6dc05626f4ad78e726d  gcc/config/mn10300/mn10300.opt
! 00c2af96d7b5d7752202b8a1f5561f95  gcc/config/mn10300/predicates.md
! 4d80e3a21ce8f60687cc8eba58e87c4b  gcc/config/mn10300/t-mn10300
! 5029c5619ce911e0b95c7594918e20b8  gcc/config/moxie/constraints.md
! 0c05129f9233d3fcb9a948a0e64241a5  gcc/config/moxie/moxie-protos.h
! 5d305276e97df3a38df5d2044cf00c16  gcc/config/moxie/moxie.c
! 7744997abc1538ac208844f69722d834  gcc/config/moxie/moxie.h
! 8eabbfc56d81a4b83395260268833863  gcc/config/moxie/moxie.md
! 35ac81cbd8e8d8bb29d64f1201989b5e  gcc/config/moxie/moxie.opt
! cf40b507a7482538ef4ed13a1af87f87  gcc/config/moxie/moxiebox.h
! a233fe7f07d8870199a4a840c8cc8851  gcc/config/moxie/predicates.md
! f12f187017cb40cc28a9338e2de99264  gcc/config/moxie/rtems.h
! ccf94e699c43371caa0655b47542799d  gcc/config/moxie/t-moxie
! 0a760906aa082b9e1f70d9b9b7f807be  gcc/config/moxie/uclinux.h
  f276505b774e975b88b6c90362783e73  gcc/config/msp430/README.txt
! a8dffddb364ed157ede6cf015e77d83d  gcc/config/msp430/constraints.md
! e72ebec5657b474087d2bd158b7eeb51  gcc/config/msp430/driver-msp430.c
! b4f3c7e06b210c61c9c5b9aeaf588c9f  gcc/config/msp430/msp430-c.c
! 2c1c96162a472debc9dab3db144d1435  gcc/config/msp430/msp430-devices.c
! c294f752a7edfb1e21ced64619e09b37  gcc/config/msp430/msp430-devices.h
  e081143def3cf3a59cd1181fc9162d41  gcc/config/msp430/msp430-modes.def
! 5f66636ea189cb030213f493eb606bb0  gcc/config/msp430/msp430-opts.h
! ef03bfed700cd4225418b5dcacb5ad36  gcc/config/msp430/msp430-protos.h
! 3c8cd7827868683cc46ecc1fe1fc062a  gcc/config/msp430/msp430.c
! 8dfee1fce1d6153b2860144c89a26176  gcc/config/msp430/msp430.h
! 4bf817d19c2b3928a4072433cde6be2c  gcc/config/msp430/msp430.md
  a20875cf634836537faeacfb5a4f59d1  gcc/config/msp430/msp430.opt
! 60ce8491cbf3331b771540f23381625a  gcc/config/msp430/predicates.md
! 43b0d7aa9e45e830b6c5b14d1d3141d6  gcc/config/msp430/t-msp430
! c9e31973fa3f34be3b6c2235ee72369e  gcc/config/nds32/constants.md
! 6071343a7db67c0afd558e6f8f7fca39  gcc/config/nds32/constraints.md
! 96d3c26ae8efca44e1ee3f822f0b6020  gcc/config/nds32/elf.h
! 91aa06c31ddf88721538610e6e5f1aec  gcc/config/nds32/iterators.md
! af58c131cb82f271d6b777662ab7e6a1  gcc/config/nds32/linux.h
! dbae75994723f9245a8bcc54583decf0  gcc/config/nds32/nds32-cost.c
! 756635857a4dc85c98886fa4fcbef9ef  gcc/config/nds32/nds32-doubleword.md
! 9750feac2bc9b68b5977b33492dc629a  gcc/config/nds32/nds32-dspext.md
! 0927e24a92095f7131f5f67b5886b7e1  gcc/config/nds32/nds32-e8.md
  c316334a86026beb55e5c25b4b855f95  gcc/config/nds32/nds32-elf.opt
! ff8756f3a5ae5cd3b27cf3248813ae9b  gcc/config/nds32/nds32-fp-as-gp.c
! bfba0d20b3630df333820e2d8fde09f2  gcc/config/nds32/nds32-fpu.md
! fb8f5266673835509271a06586b0eec6  gcc/config/nds32/nds32-graywolf.md
! 59d03ddd51daadeff04840993ba49730  gcc/config/nds32/nds32-intrinsic.c
! 58f3c263abb7385d72dec6d49c5402e1  gcc/config/nds32/nds32-intrinsic.md
! 3d458d21924c1cd07a09ab650d74dab4  gcc/config/nds32/nds32-isr.c
  d94163fd5e4660359b8b12a0d90ed1bd  gcc/config/nds32/nds32-linux.opt
! 592beabbe4d2b4fc8ca40f41719cfd39  gcc/config/nds32/nds32-md-auxiliary.c
! 79ef26daf4629503d4f1f18adcad9899  gcc/config/nds32/nds32-memory-manipulation.c
! d92e1385335b0d9d946f1de22c2745e8  gcc/config/nds32/nds32-modes.def
! 0185a5ab14c0e4165237e6a7c746a38f  gcc/config/nds32/nds32-multiple.md
! 736e9f86a9667c35fc84bde35234ac52  gcc/config/nds32/nds32-n10.md
! 6520965c9de0f4c2265afe52a57524b7  gcc/config/nds32/nds32-n13.md
! 191b304993331bcbcf4c234ccd83d538  gcc/config/nds32/nds32-n7.md
! 9c7e42cdb964a3908d507daf7cd9980e  gcc/config/nds32/nds32-n8.md
! bd95221de0f4945e2305d76243cdc326  gcc/config/nds32/nds32-n9-2r1w.md
! 136b4b636581de536050b5e550bea06d  gcc/config/nds32/nds32-n9-3r2w.md
! b3c17bb539ff9f9a8c424816af121774  gcc/config/nds32/nds32-opts.h
! f3466868be1ae87e895ec877decf6e35  gcc/config/nds32/nds32-peephole2.md
! 80e72560e917e56418ffe2263c571973  gcc/config/nds32/nds32-pipelines-auxiliary.c
! 88da56316e487b75bf67b3fbd3855e45  gcc/config/nds32/nds32-predicates.c
! cecf8ed407c479b2b66f871bdda34eb2  gcc/config/nds32/nds32-protos.h
! 2bf8857163e0e8e3bb3d1dbacbaac0da  gcc/config/nds32/nds32-relax-opt.c
! b9e1844c4ee9e43b8f2528dabe0185f5  gcc/config/nds32/nds32-utils.c
! 35d215c9e0b758cd30f125495f70808b  gcc/config/nds32/nds32.c
! 0b6740a5900580cbeec4b5fcc1bc6247  gcc/config/nds32/nds32.h
! a28b1def6205883f16e1e403961c95a5  gcc/config/nds32/nds32.md
! d8602ec3f40f7adb13f72f6a7582cbf7  gcc/config/nds32/nds32.opt
  c09acceb380f58ddb795ee3e973945d7  gcc/config/nds32/nds32_init.inc
! a80002b7becf04fb9a3f72ae5b9618c6  gcc/config/nds32/nds32_intrinsic.h
! 17475dbb78491a1f5460cf3dec718f22  gcc/config/nds32/nds32_isr.h
! fa896da4a45c2ee48fdb389972dbcbfb  gcc/config/nds32/pipelines.md
! c2f26cfcffd1b8dc4a316af43228f97f  gcc/config/nds32/predicates.md
! 9b625a74b2aa7600056b8131fec93803  gcc/config/nds32/t-elf
! c69829c71c43b5d13b40c052f01b3b86  gcc/config/nds32/t-linux
! 89b35c9320193378808933c8b3eab3e5  gcc/config/nds32/t-mlibs
! e5d5ee625c384b6cf6f993006fbb6402  gcc/config/nds32/t-nds32
! fb19f040c3c1dd70c70df2da17c3e20c  gcc/config/netbsd-d.c
! 15f232609850fa1ce539d03097614706  gcc/config/netbsd-elf.h
! 6b45050b1388d0fea138a7de3280717c  gcc/config/netbsd-elf.opt
! 3ea936eb7ff2e15d1fdba12d15d379db  gcc/config/netbsd-protos.h
! 66a44a1bcce9e21225a9404ea1ea1520  gcc/config/netbsd-stdint.h
! af34fb5a4ba7910371c99cb06e3dc40d  gcc/config/netbsd.c
! a6d14c3ec010275da3e953a4990c5dac  gcc/config/netbsd.h
! d3851f9d7a2dc15557391b7f67ae5583  gcc/config/netbsd.opt
! 312b332a2a19e314d3a0bbbed9fa7c8c  gcc/config/newlib-stdint.h
! 9bbb0e3dc5b3ea91bac03ac61f4a902e  gcc/config/nios2/constraints.md
! 61bc52fc5087f93162b88245b3bbf731  gcc/config/nios2/elf.h
! 15e35aa9946f54e9f66a4a9c0e7bb257  gcc/config/nios2/elf.opt
! 8ca4a295d066f9ef6341b3177a5f9ef8  gcc/config/nios2/ldstwm.md
! df25273b42658dd3bf2f794473663a63  gcc/config/nios2/linux.h
! 21ac2faa6c0cd4cc27a1efa5febd26c8  gcc/config/nios2/nios2-ldstwm.sml
! 84aa941f307242ac69c916ed78e76443  gcc/config/nios2/nios2-opts.h
! 64d150c84d6a232c3c50fa7951ee0b51  gcc/config/nios2/nios2-protos.h
! df48e8df2d902c40910a111d7287d4c5  gcc/config/nios2/nios2.c
! c23dad057f5efbfca49712cae738f125  gcc/config/nios2/nios2.h
! e8d6d383632cb24f52b62b1a43bc3306  gcc/config/nios2/nios2.md
! 53c5a21d2b70a962f037b87be59cc91f  gcc/config/nios2/nios2.opt
! 4e0c44b284ccd1962a407546f0ffc714  gcc/config/nios2/predicates.md
! 10056de80bc047feb0e5c1d1d408a912  gcc/config/nios2/rtems.h
! 2484545b8413ab110fb39a8534e19514  gcc/config/nios2/sync.md
! addd410d89c8d535d3bb44bcdc976f34  gcc/config/nios2/t-nios2
  3369cb7fd894ad0eaae773a6ab4a00dd  gcc/config/nios2/t-rtems
! c44a21d6173dfc25f9ea06d39259b98b  gcc/config/nvptx/mkoffload.c
! c2aabf1e8738380511a66426506fe906  gcc/config/nvptx/nvptx-modes.def
! dca89acc73c1e607543f77bff11454fb  gcc/config/nvptx/nvptx-opts.h
! 9ca7d94c2be28d9abdb34a47582fd30f  gcc/config/nvptx/nvptx-protos.h
! 0ae128e298c4577f1c737e010ffb5c34  gcc/config/nvptx/nvptx.c
! c0b0b2bacfa72578f4672edf1c0f50db  gcc/config/nvptx/nvptx.h
! 9c8498d440319ec5925062d2d6c68415  gcc/config/nvptx/nvptx.md
! 6d617ffea69db6bcfe22bbd6fb2c7e29  gcc/config/nvptx/nvptx.opt
! e917c97da0e4b76432a791778f806d36  gcc/config/nvptx/offload.h
! 161bfe9f99d4d18fdb67553220ba175a  gcc/config/nvptx/t-nvptx
! f9036e875fd1f68b4e56b8e278983e89  gcc/config/nvptx/t-omp-device
! 67620e0936250e48d59613b6124a8424  gcc/config/openbsd-d.c
! d74d3525f940d27436889ef730d84755  gcc/config/openbsd-libpthread.h
  3d4a70d0decf61f1fba17df545cea7f5  gcc/config/openbsd-stdint.h
! 2f03d8c6f233734c425c066a3a610299  gcc/config/openbsd.h
! 1237c0f0c21f84d1a890451a2bc447db  gcc/config/openbsd.opt
! f26db210861297c237df0c594e4c4691  gcc/config/or1k/constraints.md
! cd1569e39b4e4d7d755497bd32dc47ea  gcc/config/or1k/elf.h
! 319583e7aa6c3be58a218e0f2f30baf8  gcc/config/or1k/elf.opt
! 190d11ed2685816912329f7dc4dd8fe1  gcc/config/or1k/linux.h
! 73440462fceeb3a685172073ff432096  gcc/config/or1k/or1k-protos.h
! 1348c0e12bfba12eb6bf88babf2b584a  gcc/config/or1k/or1k.c
! 9cc947d9f0d0165ed1026667258ce5c9  gcc/config/or1k/or1k.h
! 8f439232206201a8946633ec1d82af82  gcc/config/or1k/or1k.md
! 748faeb9d6350682a79366ba99fccc96  gcc/config/or1k/or1k.opt
! d6e9de18c21719b5ad42e0ac98a823a8  gcc/config/or1k/predicates.md
! f86fc2dac4e5119d00917f9aad9cf384  gcc/config/or1k/rtems.h
! 6e9d994897653baaaf200c9027564386  gcc/config/or1k/t-or1k
  f58d4380ee68891690f4302989ce00cb  gcc/config/or1k/t-rtems
! 8b8ba2b5d8f7259e9e496481e0b16ca6  gcc/config/pa/constraints.md
! 98d71aa95ac7ee507b50b69e9588f53a  gcc/config/pa/elf.h
! 4604d212bda13ead36e4fb031c7c151e  gcc/config/pa/pa-64.h
! 2fa72c163c05995731d570d007fcbc3d  gcc/config/pa/pa-d.c
! 49adb8849b89392f7c51e3bce0d7e07b  gcc/config/pa/pa-hpux.h
! 14351757ad9891cb21df1be8f0602b45  gcc/config/pa/pa-hpux.opt
! 0ace1a5e8695491e017227e2317ac23e  gcc/config/pa/pa-hpux10.h
! 6a920bf1a262a7c99fb173114f192a63  gcc/config/pa/pa-hpux10.opt
! 4ee348186693eaa4a6ab8bda53b9ab26  gcc/config/pa/pa-hpux1010.h
! f149462f68efe87f30a548606bd0f89a  gcc/config/pa/pa-hpux1010.opt
! 75ea79fef5e58eef2d45fd6818cf2f42  gcc/config/pa/pa-hpux11.h
! c1cb9c1696900e1a42acec48514f0407  gcc/config/pa/pa-hpux1111.h
! 3282a42c8895f9ba055c97fc64362b11  gcc/config/pa/pa-hpux1111.opt
! b0fb9ca642462e6862d1af7601acb142  gcc/config/pa/pa-hpux1131.h
! 426815cf30b8a89a2704db8859a2aee6  gcc/config/pa/pa-hpux1131.opt
! 9eabf18ee63c9837aa080baafd4c4a1d  gcc/config/pa/pa-linux.h
! be5a8a129f69b4222d84bf8d4af4181d  gcc/config/pa/pa-modes.def
! e20b327d30706926261c1317764ee479  gcc/config/pa/pa-netbsd.h
! caff43adac59469f64f1c7e4385c27d2  gcc/config/pa/pa-openbsd.h
! 904b7f071b6b5c7fbcd244403e468d7f  gcc/config/pa/pa-opts.h
! 85dc61345aa9b8f74041dfe95eebf2e7  gcc/config/pa/pa-protos.h
! 0d77b7513676faac2b9365e1786e465c  gcc/config/pa/pa.c
! c3f6aadadbf72faef69e3a2422b6e223  gcc/config/pa/pa.h
! 58b599c016970fec733bd266261ba0fd  gcc/config/pa/pa.md
! 570c43b9b6987181b5756267f6cf7973  gcc/config/pa/pa.opt
! d414dff3f6a4b50b49f81539036bff88  gcc/config/pa/pa32-linux.h
! 8e685ad04b0b38e5885bfcc8012cdd92  gcc/config/pa/pa32-netbsd.h
! dedcc9a6eddd69c21c777bb8aa7e4a57  gcc/config/pa/pa32-openbsd.h
! 88e8786958c2f49a0e619ff2c1786c44  gcc/config/pa/pa32-regs.h
! 769cd3ea5fb051c3232099ade0d4b7e3  gcc/config/pa/pa64-hpux.h
! 4f25545a275e9fe5ba6305488ca6b05f  gcc/config/pa/pa64-hpux.opt
! a2f3af5eec6e99e29cb85deae8d9a2e5  gcc/config/pa/pa64-linux.h
! a42105d8bc7e82bc45ac8da4fbcdc875  gcc/config/pa/pa64-regs.h
  a9a6afd79b827565ffb8de8330b4cfe6  gcc/config/pa/pa64-start.h
! 4bfec2e9652e4336e3c94772feb82232  gcc/config/pa/predicates.md
! e93d4d41261cde3dfe1a90d3e5ed1132  gcc/config/pa/som.h
  4104beb84cb7f3a8a5915652c3da66c5  gcc/config/pa/t-dce-thr
  6fd25f8c665d2d7390ea94c01dcb8e34  gcc/config/pa/t-linux
! b6278c3de5f5690b62f0fdb46d14dfde  gcc/config/pa/t-pa
! 24f93a3736588ed56cca5230c87febe4  gcc/config/pdp11/constraints.md
! 8783695422a3cc810efc99a92010d2fd  gcc/config/pdp11/pdp11-modes.def
! ee70a17be36a2e5f4c100227ea2d3599  gcc/config/pdp11/pdp11-protos.h
! a2e7b320206dcb6d0c0766823c889367  gcc/config/pdp11/pdp11.c
! cff22a09cde078d24e6e3c64fd05413a  gcc/config/pdp11/pdp11.h
! 2d5b9e1f119bd84ad5d1f7236e88f07b  gcc/config/pdp11/pdp11.md
! adcd93d9df3e4003beabd42eac95eea9  gcc/config/pdp11/pdp11.opt
! 9aaa33fe7413f512a498506e3b3259c2  gcc/config/pdp11/predicates.md
! 6b7f573dccc276ebb2addbc8a233fcd0  gcc/config/pdp11/t-pdp11
! 2907859bc3b63c034660392cb470267e  gcc/config/phoenix.h
! 729c9350391d74035cc99d62e094b669  gcc/config/print-sysroot-suffix.sh
! 3159dbd951a57be2014ba48c4de251f1  gcc/config/pru/alu-zext.md
! 3a0f43efb574d2c6bb9f301b845e8395  gcc/config/pru/constraints.md
! 504f2ff02cacd17a40209a895c68dbbd  gcc/config/pru/predicates.md
! 40b63a0f22894a3cb47c58b52083f1ff  gcc/config/pru/pru-opts.h
! c62f794a3016ccd74f1cc0e579e8aea3  gcc/config/pru/pru-passes.c
! b6607d3410bf037c34e0b8a0422adbe5  gcc/config/pru/pru-pragma.c
! 8008f645c2d6305298f0f5996b8530a8  gcc/config/pru/pru-protos.h
! a7fdc306986a7202a2f2b209faf8f5ea  gcc/config/pru/pru.c
! 783a6ce5f683fda7f039ad745e09e1f9  gcc/config/pru/pru.h
! 06d17121b1ca155cfd8a17344a5d3f8d  gcc/config/pru/pru.md
! 3b98988e55ce8cf649751cd3d3bf38cd  gcc/config/pru/pru.opt
! 10430f6518a3627421b6e41146222090  gcc/config/pru/t-pru
! 724bf92da89c5b91ba44623b319a2d4e  gcc/config/riscv/arch-canonicalize
! 1b1e5fb14202743e68ddd48543aca24e  gcc/config/riscv/constraints.md
! ef0028af881cf895e537c21cc4643fb8  gcc/config/riscv/elf.h
! de2fc9c3ace4fd5d8f5573b8bd906069  gcc/config/riscv/freebsd.h
! 69166b0924d5c3c2d1f7e72fa40247ae  gcc/config/riscv/generic.md
! 1950ffa0536a23ea56ed8e99b993615e  gcc/config/riscv/linux.h
! 6554854b1f1d1cbdc90542ab85a1a6ad  gcc/config/riscv/multilib-generator
! 4e629508d2e1b7aaba28f7173c7b07bb  gcc/config/riscv/peephole.md
! 82fdb0fb5f4287f1bf506404d0ad0c41  gcc/config/riscv/pic.md
! 7e2a43545d38d2540fdd13ed3e22adbe  gcc/config/riscv/predicates.md
! f9c0791b3dbcf7aee60d29862a7d7c70  gcc/config/riscv/riscv-builtins.c
! 5b7056f5b738f06dc6f321f954818c24  gcc/config/riscv/riscv-c.c
! 09decd8605acb0b96996257078390b2a  gcc/config/riscv/riscv-cores.def
! aead97962d12004bef87017b0ff26bad  gcc/config/riscv/riscv-d.c
! d79ed8f84354bbde78492c096f5d05ba  gcc/config/riscv/riscv-ftypes.def
! 5332cdc57d255d79b47739cb93c378d7  gcc/config/riscv/riscv-modes.def
! f246e78b2654ab5d1fd33ede72f31d05  gcc/config/riscv/riscv-opts.h
! 0674236422e04162b66bdb80c60bdab8  gcc/config/riscv/riscv-passes.def
! 00e38bf454ad4a280301d1e5b16dfaf9  gcc/config/riscv/riscv-protos.h
! 5a056ac88b21a92249c97026dd86fb63  gcc/config/riscv/riscv-shorten-memrefs.c
! f60d94e10e9a0c6a4ddae1f3aae0bbc4  gcc/config/riscv/riscv-sr.c
! fe56b04e91c00c9e49f48d845571ab3b  gcc/config/riscv/riscv-subset.h
! 100c0a3c8832058427f3f3ead05a0e99  gcc/config/riscv/riscv.c
! 3fae617bcb3cc8d28a0150ce3dd2831d  gcc/config/riscv/riscv.h
! 669de2f404329e0417902902f3dfab46  gcc/config/riscv/riscv.md
! eaec766078425731f12d482d8e7a7f03  gcc/config/riscv/riscv.opt
! 0a71dd013f158a4aa8183a3df7bfead1  gcc/config/riscv/rtems.h
  462630614e6e7a6209f8f18b6dff0eef  gcc/config/riscv/sifive-7.md
! 29fc0216ff4cf6b387754748c6a26f3d  gcc/config/riscv/sync.md
  1c27821991689abdaa7a908a0cc8dfa4  gcc/config/riscv/t-elf-multilib
  d8ae7bee35ef1ecd77143535da9aae78  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
! b289440a78dd64e8c68b767f483a39bc  gcc/config/riscv/t-riscv
  7dbd61c5a07b1adefe5429a41008fda5  gcc/config/riscv/t-rtems
  97a182737ed075d29be4ab1e848de420  gcc/config/riscv/t-withmultilib
  0478f4e79601d91fb8ad8f210b304a7b  gcc/config/riscv/t-withmultilib-generator
! 61a949c3b6e9949677ecb87c7dd89aac  gcc/config/rl78/constraints.md
! 572e3026262220c40cf27840498f5a3d  gcc/config/rl78/predicates.md
! 6a94d99b48f252fbbe3a3821ffa8e148  gcc/config/rl78/rl78-c.c
! de007450d9a5d4edc243569e1a92d050  gcc/config/rl78/rl78-expand.md
! a85b79db86092a0ab20b17aac8431d4b  gcc/config/rl78/rl78-opts.h
! b620547883412fbeebcc89cbb2be71a7  gcc/config/rl78/rl78-protos.h
! df13d69f15a78712e709819e19b5eb58  gcc/config/rl78/rl78-real.md
! 0f758406f0279aea97bffeb2e780bd26  gcc/config/rl78/rl78-virt.md
! d383b4529ab816692b9c9fc5e3ed400a  gcc/config/rl78/rl78.c
! f07ad8057c6d9ac4d88db0a0456ede44  gcc/config/rl78/rl78.h
! d933969f0ed6c74e712921035310d41e  gcc/config/rl78/rl78.md
! 7543afd8a1cdbb134369c97d36157346  gcc/config/rl78/rl78.opt
! b8ab7b117ac843a8f7d4c4ffa79341a0  gcc/config/rl78/t-rl78
! d22c8890dc8a7b7f6fcf482ea45c98c3  gcc/config/rpath.opt
! cc657622a7833f21cf41fd88e7954133  gcc/config/rs6000/40x.md
! 627d98d01c467e8a3e82ccb6cbf3c232  gcc/config/rs6000/440.md
! 1169f14a6b731cf0ab8796a4a1560a1c  gcc/config/rs6000/476.h
! fe30e9f2c6680c3a0ffbb8c32aaf03fc  gcc/config/rs6000/476.md
! 16f8ea20ee5a16ffb0578adaaae6a722  gcc/config/rs6000/476.opt
! 8bebd0ba7d09100998b70711c283e120  gcc/config/rs6000/601.md
! c4ee8dff4b53ff20a117eb8419b45dfd  gcc/config/rs6000/603.md
! 539365d9416f2665f34a6157e8164c01  gcc/config/rs6000/6xx.md
! 37de1ca43e80414564771bac13fd272c  gcc/config/rs6000/7450.md
! 5694ce94385ecd19d08754c78644e5e6  gcc/config/rs6000/7xx.md
! 0342f39328d64e5982bb3f94168b17db  gcc/config/rs6000/8540.md
! 50c0da5fa8979225eeb102a8b2ee0094  gcc/config/rs6000/a2.md
! bee6a7628f0cee352ae751f13fd603f3  gcc/config/rs6000/aix-stdint.h
! 769e474b1758c97e19e4409db960b071  gcc/config/rs6000/aix.h
! 36c9a6523bd55cdaa1c9b01077874227  gcc/config/rs6000/aix61.h
! ff3f6b224d4ef9f550a96131d45e0003  gcc/config/rs6000/aix64.opt
! d0cdfe5862d3c4d23b88f181a823e824  gcc/config/rs6000/aix71.h
! cc7b2251556991a7fa60f7bf6b8f4fb8  gcc/config/rs6000/aix72.h
! 6cf9077f7280ae45fdb83156bcbed199  gcc/config/rs6000/altivec.h
! 65b676e981a532defde7fdd5e321ffe1  gcc/config/rs6000/altivec.md
! 0c189a8215a637236016075d7153c0dd  gcc/config/rs6000/amo.h
! 8c3585d22f96b860147fbb93ebbbf06f  gcc/config/rs6000/biarch64.h
! c82bb588a1f3b6715f005e723b02aaf9  gcc/config/rs6000/bmi2intrin.h
! f60f0b041683bd09fde61d526b77a06b  gcc/config/rs6000/bmiintrin.h
! fea022102d4856327a0e7478d476825d  gcc/config/rs6000/cell.md
! 39f59e5bae022fcbbef313410d10672c  gcc/config/rs6000/constraints.md
! 87701804dfcbf3943f2ef24c36f6b98a  gcc/config/rs6000/crypto.md
! 453ee06270ccdf4c0b6c5246ca394266  gcc/config/rs6000/darwin.h
! dd4bb9179101766c68130ca8a0c0394e  gcc/config/rs6000/darwin.md
! d7cfb8e861e9ce70e75110e0717d4d48  gcc/config/rs6000/darwin.opt
! ca74b9e31768f3d073078ccbbf6db3b4  gcc/config/rs6000/darwin32-biarch.h
! 9a9eabe5fde024a9e8fb7da1f3065798  gcc/config/rs6000/darwin64-biarch.h
! 15d4fb2ad496a66a85102eac5202047a  gcc/config/rs6000/darwin7.h
! 402972fd0d7c627a52416797c9cec3b4  gcc/config/rs6000/default64.h
! f4504f65de85f5d392697641ff462105  gcc/config/rs6000/dfp.md
! 5de21bde48b538036daa368e312e52be  gcc/config/rs6000/driver-rs6000.c
! 8f83d7c9e905cf53e85e17effff65e94  gcc/config/rs6000/e300c2c3.md
! e48e30df023432a0999f7219dd167766  gcc/config/rs6000/e500mc.md
! 15078c51a9c9340e7d7e492a0acb0d30  gcc/config/rs6000/e500mc64.md
! 27c2c493a22cf2c6167ca1cf6ce61b44  gcc/config/rs6000/e5500.md
! 6299f7478b39da37132844e2423b618a  gcc/config/rs6000/e6500.md
! 1645c6c2584fc4d395804e020830ff0f  gcc/config/rs6000/eabi.h
! b106f3dd78c027be0e6fa9e040d3d7d1  gcc/config/rs6000/eabialtivec.h
! 8fe4344bd8fd32f48a15e10f99d9f820  gcc/config/rs6000/eabisim.h
! bd291b65ad28211370bde89d9e88c7ae  gcc/config/rs6000/emmintrin.h
! fbeee1c894dc51358ee6abecca818f38  gcc/config/rs6000/freebsd.h
! c815c61d1f8556dee28776379d38f97f  gcc/config/rs6000/freebsd64.h
! b4f8e33b4342aea64cc25b24e2b5ce17  gcc/config/rs6000/fusion.md
! f57795fd3975e6a45558b5b8dd430631  gcc/config/rs6000/genfusion.pl
! c466bda58b985814fa22f4d4bc0a464a  gcc/config/rs6000/genopt.sh
! 96ef7ba4b98df3c89168a75c71690601  gcc/config/rs6000/host-darwin.c
! 775ea72fb46676e26f93f160be6cc291  gcc/config/rs6000/host-ppc64-darwin.c
! 5c3bdcb1b652548c3c51f7d137eeec2d  gcc/config/rs6000/htm.md
! 947e4fc8941feb6d78ffa647b9e867ce  gcc/config/rs6000/htmintrin.h
! 4f55e86cb57831d27bd7329f112d6fb6  gcc/config/rs6000/htmxlintrin.h
! eb5963a9afac325222a3cf411425b69b  gcc/config/rs6000/linux.h
! 8bec1a629d31cc69c35d9dc5fd4c3d77  gcc/config/rs6000/linux64.h
! 0bbcee311ec2d8e7219c402ad62f2935  gcc/config/rs6000/linux64.opt
! 254a479975bb0033d38c5532c46689a5  gcc/config/rs6000/linuxaltivec.h
! b3d3483f2acc61db4751725d0556e646  gcc/config/rs6000/lynx.h
  0cc3c5f9101501b8253ce3176c3ffce4  gcc/config/rs6000/milli.exp
! 7151c90fd6e11f55cab19007cca511bc  gcc/config/rs6000/mm_malloc.h
! d3dde08c758b098e296736f30b64afac  gcc/config/rs6000/mma.md
! c40f50dc03075bb41a64373adb30112d  gcc/config/rs6000/mmintrin.h
! 7da8551ea5a0e205407dfa782c773ce4  gcc/config/rs6000/mpc.md
! 5bca07190d45ef2ade8d1a237c5ac20b  gcc/config/rs6000/netbsd.h
! d1918653ab5439dfd3636ceb66800628  gcc/config/rs6000/option-defaults.h
! 46370b1354544906ee1f18bf5ee65e42  gcc/config/rs6000/pcrel-opt.md
! 84d852177b47e1fcd8d20355aeb4a2a4  gcc/config/rs6000/pmmintrin.h
! 41a5be3155e7ed775bb412cbe0c0ed19  gcc/config/rs6000/power10.md
! ee97c3d3da7334e31ee2e714ae392125  gcc/config/rs6000/power4.md
! 377d2d64b0642c07bdab693f542c4988  gcc/config/rs6000/power5.md
! 56f637c066be25f0e1df986784252bbb  gcc/config/rs6000/power6.md
! fc071bb968f683a069ae0962bf6c4c42  gcc/config/rs6000/power7.md
! d9fb9904c02856f7a1ec4b25a72a8402  gcc/config/rs6000/power8.md
! de0878750a3c4d20a063d22571380621  gcc/config/rs6000/power9.md
! bb48fecf965ae77e0dd88aae5488f291  gcc/config/rs6000/ppc-asm.h
! 751ccf6be4b01d18f226acef853ef444  gcc/config/rs6000/ppc-auxv.h
! bfe475364cf3901b029f758b9ccfd8b8  gcc/config/rs6000/ppu_intrinsics.h
! e03ab0dade27c849af56b6b99de13cd4  gcc/config/rs6000/predicates.md
! 90d62e46a8384f3f606d9cacbd7fcf20  gcc/config/rs6000/rs6000-builtin.def
! 600d0487670d447fdf8b9c3e58e76c9a  gcc/config/rs6000/rs6000-c.c
! 92110d3957e94da0c004e1a0ebf2d849  gcc/config/rs6000/rs6000-call.c
! 928f5d55248167067486388e4cc0a56e  gcc/config/rs6000/rs6000-cpus.def
! 7c18f5387ecc6581faacf61631fecb37  gcc/config/rs6000/rs6000-d.c
! 2d982a648287d8b1211d52b4f1335bb6  gcc/config/rs6000/rs6000-internal.h
! bdb01381a7509193220dbd43b881802b  gcc/config/rs6000/rs6000-linux.c
! d7eb270fa829edb1e107dc421d30800a  gcc/config/rs6000/rs6000-logue.c
! 8d3fa7c26d80c9ee359e3991e289666e  gcc/config/rs6000/rs6000-modes.def
! e65509760cf40241ff24df3a715c4f43  gcc/config/rs6000/rs6000-modes.h
! b7cac3afa5fb8f71d3b8ea1a0cd5c7ce  gcc/config/rs6000/rs6000-opts.h
! 8b947d2151ae91ad54fac00cb369345c  gcc/config/rs6000/rs6000-p8swap.c
! 26ea894428823455da38add11e434423  gcc/config/rs6000/rs6000-passes.def
! 00c6fc44dcc86d36065fbda93661b17b  gcc/config/rs6000/rs6000-pcrel-opt.c
! 39fa09a60604eae142447fcf0f829606  gcc/config/rs6000/rs6000-protos.h
! 8cfc3e1c712d5e4cef1250c605cdca98  gcc/config/rs6000/rs6000-string.c
! 7a14e24f9ddae251943bacda6071c833  gcc/config/rs6000/rs6000-tables.opt
! 6f928343f299cc0a238e78460e5d8611  gcc/config/rs6000/rs6000.c
! 703c5b2480408d2cecd0ae48da054aad  gcc/config/rs6000/rs6000.h
! 93f46761638f204b23488e30666a914a  gcc/config/rs6000/rs6000.md
! f5bccc13629fee1e5e80d2c56373e1ab  gcc/config/rs6000/rs6000.opt
! c7f02424d98bd46c451c6c03893132ba  gcc/config/rs6000/rs64.md
! 49c33d9ae6a5142ba9a3e0c617c6cdc2  gcc/config/rs6000/rtems.h
! b13403d0a3113444b4d47950f5cba69e  gcc/config/rs6000/secureplt.h
! f6fd7be6926a0f8aa7fd3c3c105fe905  gcc/config/rs6000/si2vmx.h
! 050357a1637de917eedddffab4cef27f  gcc/config/rs6000/smmintrin.h
! 1cb7c7dac47be97126c30f4b384ab8de  gcc/config/rs6000/spu2vmx.h
! 35284754edbf099ba3f34621db1e14f3  gcc/config/rs6000/sync.md
! 02b934139a896ec4d1951184fe879275  gcc/config/rs6000/sysv4.h
! 9c042ea04c17db32bdf709dd1e57dca5  gcc/config/rs6000/sysv4.opt
! 643c18274e90fd26bbb6184f1a232be9  gcc/config/rs6000/sysv4le.h
! 98f66680ba32040a587f7409f8b1ac5d  gcc/config/rs6000/t-aix52
! 4e422123f0871effc2b790d928ba471c  gcc/config/rs6000/t-aix64
  636250eb91fc5dada4804efcd525fc02  gcc/config/rs6000/t-darwin32-biarch
  f3250b9720d1149346f1ef8e21b52ea9  gcc/config/rs6000/t-darwin64-biarch
! 3c56e27cd4b012d23cb6f1ca23d2ee8d  gcc/config/rs6000/t-fprules
! 428117fb7fc39d4b986721bb9a62260d  gcc/config/rs6000/t-freebsd64
! 40e5cd20542141b80d5fcf1a7b10b3fd  gcc/config/rs6000/t-linux
! c4a95ba3fe3ba43cf7a20e38f6f97d43  gcc/config/rs6000/t-linux64
  71c0a0470047f0171a3bb4c483eb2b72  gcc/config/rs6000/t-linux64bele
  489699b655594f05bae0b429fd261edb  gcc/config/rs6000/t-linux64le
  60f26523152f6a061a12cb17e987de12  gcc/config/rs6000/t-linux64lebe
! f8fa950d8832c10c3d56d74a76e6ca4e  gcc/config/rs6000/t-lynx
! f86123341245f4c6640ae62be7c764e3  gcc/config/rs6000/t-netbsd
! a6b51489641a338647ec5c62b2c57063  gcc/config/rs6000/t-ppccomm
! 5362ae64ee0fef54de5aaa03f9681327  gcc/config/rs6000/t-ppcendian
! 4926b14756498c795fff06e6418c09cc  gcc/config/rs6000/t-ppcgas
  1b8aba690a39464c4ea9c647d73d6983  gcc/config/rs6000/t-ppcos
! 67cb48ae93012381975865b9dcd42aa7  gcc/config/rs6000/t-rs6000
! 6d7850e3ddb17d1bd681815d01556fba  gcc/config/rs6000/t-rtems
! 5b0559fc3febaa083e29dc5d4523f430  gcc/config/rs6000/t-vxworks
  f11925c88524d2fd457bf77944da1302  gcc/config/rs6000/t-vxworksae
  3f0601a68de7a0aee8264b538228d943  gcc/config/rs6000/t-vxworksmils
! cc0cc82e1a5c2e41b283b3b890368e20  gcc/config/rs6000/titan.md
! e7d9802113af7f106be83e0d60f10bac  gcc/config/rs6000/tmmintrin.h
! 5d59b8706cb4357b0b55b2b15c113f77  gcc/config/rs6000/vec_types.h
! 3583e31aec012fcc7fb04420d37fb7b3  gcc/config/rs6000/vector.md
! 6ca279ba044eebd7d0a7d39898b605af  gcc/config/rs6000/vsx.md
! f36a85a18aa0b7d63a88bb6c96ef28be  gcc/config/rs6000/vxworks.h
! 8d88ff930fb293ccc19693f4198f0ffb  gcc/config/rs6000/vxworksae.h
! 7dc95d3194372c5c0ac2e9b886d11097  gcc/config/rs6000/vxworksmils.h
  44a93bbae0ad5aba424ba7b97cc6914d  gcc/config/rs6000/x-aix
! af875b9bcb1ec1da1f33d5e34df8ca7b  gcc/config/rs6000/x-darwin
! 9ffcc92667a16102520a017eabc7d7d2  gcc/config/rs6000/x-darwin64
  3f42272f4bcf66031ebf71a6c876adb8  gcc/config/rs6000/x-linux-relax
! 1aff8cb3714b63b6c3367f552dae743f  gcc/config/rs6000/x-rs6000
! cd352b7dae266946ea1432f3087e478b  gcc/config/rs6000/x86intrin.h
! 1f68ec49be41fcbbc5edf6461732b616  gcc/config/rs6000/xcoff.h
! a395b93932607e082764fd6338f5ddc9  gcc/config/rs6000/xmmintrin.h
! 6f40de2bceef1102ced6e9e62cf8780f  gcc/config/rtems.h
! 4fc47ba72f6e5bc6ad16e9993ed01536  gcc/config/rtems.opt
! 7fdcbf6a0552c69e8b6c1b2c0ec17a41  gcc/config/rx/constraints.md
! ef49ba0eda1debfdbf86e76738dd4d87  gcc/config/rx/elf.opt
  84ae77475029b49553276e3d7ed74cec  gcc/config/rx/linux.h
! 33ee179b34a2eb601f9485aecdb5a44d  gcc/config/rx/predicates.md
! ca62f0da16183b123ed51d87c6a95261  gcc/config/rx/rx-modes.def
! 8cb7c0d0ee0fb64f53b79e504225de6f  gcc/config/rx/rx-opts.h
! 8af7d65721b5b8defcb84a9db5e3a4da  gcc/config/rx/rx-protos.h
! 37e7079aed3153b7317df85b6f3b6ee9  gcc/config/rx/rx.c
! d2904d916d43fdc0310a752ed2a2c59f  gcc/config/rx/rx.h
! 879f36a83f17ac111c6f6a1b09073d52  gcc/config/rx/rx.md
! 167f160b1691cf287cb0a1c0412c7508  gcc/config/rx/rx.opt
  032cf36abc28f171fc24229e32796402  gcc/config/rx/t-linux
! 88e849e6598e1fb13cfc629838e9bfab  gcc/config/rx/t-rx
! 61e1723a0ac1399867cadae94395f729  gcc/config/s390/2064.md
! 257bbed0316aefc96a037f0a474b5376  gcc/config/s390/2084.md
! 3c78a54349c646bda0874395446ba437  gcc/config/s390/2097.md
! 371049958a80e8cd8d411bdcc2be7a91  gcc/config/s390/2817.md
! 2031a06c920ce15d67ad02c8867ba494  gcc/config/s390/2827.md
! 6205d0cca9479c2dcd5c10d28fce247d  gcc/config/s390/2964.md
! a971b3640a3d7b88d20ef0e92abf9324  gcc/config/s390/3906.md
! 9ebd4b5a83e1dfe318e9604fd342595b  gcc/config/s390/8561.md
! 5a8e22ff23d87a558b94acca3b8754dd  gcc/config/s390/constraints.md
! d7003f813f34d4d29acabeb362ea9ec7  gcc/config/s390/driver-native.c
! eea54eb2d5be394c5e1deb85a2ce7d0d  gcc/config/s390/htmintrin.h
! 1e94fd3732594eed7cb7c9cdd952d01d  gcc/config/s390/htmxlintrin.h
! c9b817d15324f399218870b825623350  gcc/config/s390/linux.h
! bc3eb05d9948013cf5d98708eec135d4  gcc/config/s390/predicates.md
! 450293c45cad155e0914e838978eeece  gcc/config/s390/s390-builtin-types.def
! cd2a28a13096345b3d35041e8e4ae052  gcc/config/s390/s390-builtins.def
! 5eeac8eed4d5e326eaacd304a583c792  gcc/config/s390/s390-builtins.h
! ba17382ec005210043b92a6daf5d0204  gcc/config/s390/s390-c.c
! b8518a69c0543b0ab9a0194ccd0628c8  gcc/config/s390/s390-d.c
! 5b41350b22c1a027f0d29006df753cce  gcc/config/s390/s390-modes.def
! 0a593ac49e545a9bf5dad3b9d13ffead  gcc/config/s390/s390-opts.h
! 0cda88116bff0a5ea22724e0f749d0ea  gcc/config/s390/s390-passes.def
! 82c0fbbcc31f177afdb9a9feec3bb485  gcc/config/s390/s390-protos.h
! 83684bdbbd2861d3047dc9d88135e070  gcc/config/s390/s390.c
! 12b0051b843bc27c918bc7a7c0621ee1  gcc/config/s390/s390.h
! b2b097d0d62128852bfcb39d7e0a8e9a  gcc/config/s390/s390.md
! c1758c2e438e31db9a49f289e3d30ad1  gcc/config/s390/s390.opt
! 4d1a750cc61210e4e7dacc3b05c202cb  gcc/config/s390/s390intrin.h
! 33f73e7880d2cc346d18611e3062cb5c  gcc/config/s390/s390x.h
! c7d66ac4bbcf504879ad210e2f9085d7  gcc/config/s390/subst.md
  551847ee4c38fa1a7e95fd93cdb32f17  gcc/config/s390/t-linux64
! 2cfed5b3e9a6940f6f0c461e41d32dc2  gcc/config/s390/t-s390
! 53fb8a01a9af1fefe380f46897e0eb3b  gcc/config/s390/tpf.h
! 33117991a5581854d87f4c6ff4129e70  gcc/config/s390/tpf.md
! 7d6bd68ca86c3340136814011885df72  gcc/config/s390/tpf.opt
! feca096829a3542c6569d7395249dd54  gcc/config/s390/vecintrin.h
! abcbf2f33d12c6a37f4a1bb9b7a88595  gcc/config/s390/vector.md
! 61702fd5f23b53d0940eaf4898e4e89e  gcc/config/s390/vx-builtins.md
! 19876f77a242921272972ac5b8bd32d0  gcc/config/s390/x-native
! 6a5d7379165d447e6331bc9d2e3abbc8  gcc/config/sh/constraints.md
! ffe53d98b45f377c2aa442e2a53241e2  gcc/config/sh/divcost-analysis
! 551ee7c986573c36b8b78ed7d40089fd  gcc/config/sh/divtab-sh4-300.c
! e1f432996e98789b9962cd923f4fabe1  gcc/config/sh/divtab-sh4.c
! 320a177d025baa23d3a40af8b012ac0e  gcc/config/sh/divtab.c
! f723de4a83b85f80b49f9701c0447862  gcc/config/sh/elf.h
! 5bfada9a7fd7c3e860d3387a285c45f1  gcc/config/sh/embed-elf.h
! 7f41c2e4584f5f2a1cc3fd857e03e803  gcc/config/sh/iterators.md
! 62204296743b9203c688a441a9757057  gcc/config/sh/linux.h
! 1f257ed19e17d32c9e867a3fb602b340  gcc/config/sh/little.h
! adcef5eddced78f87ec18ac2e781d45c  gcc/config/sh/netbsd-elf.h
! 37339f0c0fd0544bc637684b308c58f8  gcc/config/sh/newlib.h
! b710cd20c617c7ee7fb9ac759787f22d  gcc/config/sh/predicates.md
! 19cdfca30fa5d8c891881da933bddbe0  gcc/config/sh/rtems.h
! 4a3e1aa5b89942ab75bf2628526aa8af  gcc/config/sh/rtemself.h
! 1cdb289b0e7e3c4d4e88d2708c747f70  gcc/config/sh/sh-c.c
! fc1bf3d98ba4868ac185ac03af952e88  gcc/config/sh/sh-mem.cc
! 2143917d9da6004c5d38619849b35534  gcc/config/sh/sh-modes.def
! 5ce91cd44cd6f721b7498e50643fe273  gcc/config/sh/sh-protos.h
! fcc4dc434a25f92288b3b4934aa633f5  gcc/config/sh/sh.c
! 5616a24f889393d41e9fa0010c8e249e  gcc/config/sh/sh.h
! 29769c718219ae18be67242072aa8b8b  gcc/config/sh/sh.md
! e02a937f714f704741abcb139eebd433  gcc/config/sh/sh.opt
! 2fdd70cc6d89a7205ef035084235f4ec  gcc/config/sh/sh1.md
! 2bd4053c0d5e4aa6b93d0c36772af770  gcc/config/sh/sh4-300.md
! fc22de21c1718b5acb0bb324bfa30ec6  gcc/config/sh/sh4.md
! b65c1cfbcd87f4e63912bfc4430ac6fb  gcc/config/sh/sh4a.md
! 7bb3e0dc4bda8adac4830bee31043ba6  gcc/config/sh/sh_optimize_sett_clrt.cc
! ac57d8d3cb1f14439cf73e3f341dd2a9  gcc/config/sh/sh_treg_combine.cc
! f30882a6215b8e2a550b2d404d65ac45  gcc/config/sh/superh.h
  06158b0f1e33501120db330d7734228d  gcc/config/sh/superh.opt
! b7769ae5038bf2050b9b823af7e86938  gcc/config/sh/sync.md
! d136f788a5f1c0fd4a8cf495f33aabd8  gcc/config/sh/t-linux
  ad88281b142c81e6c7017a842c281d5f  gcc/config/sh/t-rtems
! 4223b10c47d9bde55e5ddf8ee3d9b375  gcc/config/sh/t-sh
  9f0e9638f478c08d204c5dce468c95ce  gcc/config/sh/t-vxworks
! a249a1b79cb6e67f3fb6fb375239a10f  gcc/config/sh/vxworks.h
! 1e03b7580e5a056b280b0993d9adea77  gcc/config/sol2-c.c
  5c26c2321d68d4724b0d0076803c6b89  gcc/config/sol2-clearcap.map
  73dd11dea23019ab25cbbd70968694e7  gcc/config/sol2-clearcapv2.map
! daf530df33b7d314a1a7ea93096a1128  gcc/config/sol2-cxx.c
! 24bafd84e67864c228ffd4b6ef8f8d68  gcc/config/sol2-d.c
! 97ea32386ac69d4ab7a9f7d18523f782  gcc/config/sol2-protos.h
! cd0bf14dc38178008246e20e970d9e21  gcc/config/sol2-stubs.c
! 2fc77b1383e522960284354ead101b91  gcc/config/sol2.c
! 879f26249fbe743b2c3ee6a76185517f  gcc/config/sol2.h
! d3304d46556ce709ccc0317b07d8ec9a  gcc/config/sol2.opt
! 41e18a40dd57f8ac6e231b2a0eb9eeb7  gcc/config/sparc/biarch64.h
! f1883ceb989a450146631e32191812e5  gcc/config/sparc/constraints.md
! bca177eb0473cc7fd60c1f268282663c  gcc/config/sparc/cypress.md
! c3da2f6d64d0828afc8ab8b2eb4c9ce2  gcc/config/sparc/default64.h
! dba7e2b89d25850ed88d3df9d908b04a  gcc/config/sparc/driver-sparc.c
! 4d5da08e210ff4ae14b018ef0fdcaa12  gcc/config/sparc/freebsd.h
! cbcc569238f4519e913cec1cadefdc46  gcc/config/sparc/hypersparc.md
! caff42ee3fbdf9d4c0c898b6015d5c51  gcc/config/sparc/leon.md
! 9d495003ccd8d4728e02705a8fafe134  gcc/config/sparc/leon5.md
! fe7084bb31e8913acc97482b438b948f  gcc/config/sparc/linux.h
! 77c7e2f056cc6443b0a03cd2d5598258  gcc/config/sparc/linux64.h
! 056c173c33c18bd79ddc6d6442218676  gcc/config/sparc/long-double-switch.opt
! aa2db25246a32372c5ff2d5ac80c59ee  gcc/config/sparc/m8.md
! e9633f0ae47d5fe3d908578c4130be3e  gcc/config/sparc/netbsd-elf.h
! 1938328036f761f1cc88712845a6e8a8  gcc/config/sparc/niagara.md
! ae1fcbbc8a15cd903e22cac21df78e70  gcc/config/sparc/niagara2.md
! 409b782f9a61920dde3691bd7fbf07e5  gcc/config/sparc/niagara4.md
! 8c5be0aadb4c014d5348a81c96675eeb  gcc/config/sparc/niagara7.md
! 2a347d9bfbcd46b9d2e0f02a20a287af  gcc/config/sparc/openbsd1-64.h
! 3d5edd0c90b0e6db476cfd5905ae8c1d  gcc/config/sparc/openbsd64.h
! ccf6ce819ca1a664cc0a27296fe6d37a  gcc/config/sparc/predicates.md
! b9d01d4d1a9a46d694ce6fe918ad97df  gcc/config/sparc/rtemself.h
! de0415b43ccf9962190767d9d673bdd6  gcc/config/sparc/sol2.h
! bd373e4c36d4f36006262f8ad76ea34d  gcc/config/sparc/sp-elf.h
! 7f3272d43031813a458f09aea259ac77  gcc/config/sparc/sp64-elf.h
! a2c001107d11d64a6867b5ad3cf7b5b7  gcc/config/sparc/sparc-c.c
! 54653da5737fd74bb8b80866d7cf2017  gcc/config/sparc/sparc-d.c
! 795f2c35a8c53db6f25f4a5de7e263b8  gcc/config/sparc/sparc-modes.def
! fcb95746dc487d8860421e2c23676851  gcc/config/sparc/sparc-opts.h
! d133793a37112a304bbee95d6391bde1  gcc/config/sparc/sparc-passes.def
! 9da368e6d99a08be41e8a2859745f7d6  gcc/config/sparc/sparc-protos.h
! 33b19a596c65372140a78e376b3d6d02  gcc/config/sparc/sparc.c
! 76e709251a5150bf023bbfe87bd6697e  gcc/config/sparc/sparc.h
! 7ad0daaa5ca1d1686bb621079ea25b7a  gcc/config/sparc/sparc.md
! 64c3cef9b0736ca1716488a3adc1bce2  gcc/config/sparc/sparc.opt
! b62168c8d25717e777239fb6d2c2bdf7  gcc/config/sparc/sparclet.md
! c87db0e52fe6f1b5721136e265bd705a  gcc/config/sparc/supersparc.md
! 9fd1101df0273cd72c851f5a92189d8e  gcc/config/sparc/sync.md
! 0671c09b69799ee74b6ee0abb22f5ddc  gcc/config/sparc/sysv4.h
! 784ba365f0a521ed34a2b0ce14358c9a  gcc/config/sparc/t-elf
! a9667e893d8e0201464dda5d9dcd72eb  gcc/config/sparc/t-leon
! 3bd0abb99c7cefb98ea11e9de681dc06  gcc/config/sparc/t-leon3
  4a7d3f368a24d549fabaafbe44fcb134  gcc/config/sparc/t-linux
! be838019c0823c727d69991d6b92a8a3  gcc/config/sparc/t-linux64
  75987b7fdc6fa9c9ff2108ff1003e6d2  gcc/config/sparc/t-netbsd64
! fc61a311312b257cad9e92fb4b68ec46  gcc/config/sparc/t-rtems
! 3fab20f95c3e896eba00e1ecb45f722c  gcc/config/sparc/t-rtems-64
  511770bb20c2707fabd4f231ce8b83cf  gcc/config/sparc/t-sol2
! e4c11048d729fc97400d3fda6cd69e8e  gcc/config/sparc/t-sparc
  b04597637b0c08dd3e6d1a40c43e76b4  gcc/config/sparc/t-vxworks
! d3b4ae0287d8450e8a5e99c1f8ea333b  gcc/config/sparc/tso.h
! 7d4d1b2be9d0794d455aa470efee9b30  gcc/config/sparc/ultra1_2.md
! f007b3e3de9aaf3f5d96b15e6cce6731  gcc/config/sparc/ultra3.md
! cd6e19dcf288575e7958e9160158a0a6  gcc/config/sparc/visintrin.h
! bdf77bb177c5f75e690ba2312f815e81  gcc/config/sparc/vxworks.h
! 9b2ddc345afcea4f415dd0c8bc2d2ed3  gcc/config/sparc/x-sparc
! 562993ea78c297dd4ab88e93b65abc9c  gcc/config/stormy16/constraints.md
! 5c33fa78a2ad448246668ae3cb7df3ae  gcc/config/stormy16/predicates.md
! 45ef82ae0a8d9088a0b6fd1fe1a76d90  gcc/config/stormy16/stormy-abi
! a1bac601d82fe1d733248fbca4cb703c  gcc/config/stormy16/stormy16-protos.h
! 627ac5ccb4a603d688b031635f0a9e35  gcc/config/stormy16/stormy16.c
! d790e43254d9ac8bda2e6b4f55974705  gcc/config/stormy16/stormy16.h
! 7c347d42d0dcbf4579a60f6481964fd7  gcc/config/stormy16/stormy16.md
! f51f3fe6a2cf0daab4c5fd47f0266dfd  gcc/config/stormy16/stormy16.opt
! 4ccfc452130afd1277ddf578faea2531  gcc/config/t-darwin
! e6b99697d5f0f9738cf7a230b23c6459  gcc/config/t-dragonfly
! 5c0cc6acef074c7bbe71ca42a8d8e71f  gcc/config/t-freebsd
! 29365df696a0990ec29acc8800a10ec3  gcc/config/t-glibc
! 900756249b1a10abf0e9dde1140f3e51  gcc/config/t-libunwind
! 232bfa7c4a707d88409ac0d23ac1da68  gcc/config/t-linux
! 99147f9d5b217c7127caa459d53f28d6  gcc/config/t-lynx
  5dad674732908a1c6e62e627e047929e  gcc/config/t-musl
! cf175949790970f5dc56002ec8064dfb  gcc/config/t-netbsd
! 8acc351f052e7d44e78e5b049d0a124a  gcc/config/t-openbsd
! 45ea87ff9ccfe246dc3a28d7e137b7b2  gcc/config/t-pnt16-warn
  501751f2be56698ed1c9cf18358b67ac  gcc/config/t-rtems
  51d3678acb41d4448cc332f7a8e8cb2e  gcc/config/t-slibgcc
! 28a4954f9c852c9cf6aefffface69da0  gcc/config/t-sol2
  94b3e10150e75899d2fc1410cf218e3f  gcc/config/t-sysroot-suffix
  6f78c5decbfb4b465e7c289b60109023  gcc/config/t-uclibc
! 88caadcc98bbcf6c7cfb74cbdf6d41ae  gcc/config/t-vxworks
! 4bad79d49a7cdb5faf1468e97ccfbc35  gcc/config/t-winnt
! 197e911393d23fe1912c152030d9c63e  gcc/config/tilegx/constraints.md
  f62347fb17ffdccf93a30b860f9f4dc2  gcc/config/tilegx/feedback.h
! 8525d026aa9df4140b6c01ef428d522b  gcc/config/tilegx/linux.h
! eca36a99199bc518f8c5bc1e11b7f1ac  gcc/config/tilegx/mul-tables.c
! 0b36122163d6c57e62c978b43f4fb234  gcc/config/tilegx/predicates.md
! 83a270082295f585ad0126447ef92621  gcc/config/tilegx/sync.md
! 94847c7229d625be28df740c61698b73  gcc/config/tilegx/t-tilegx
! 341548174821f01f1c7467c61963366b  gcc/config/tilegx/tilegx-builtins.h
! 6682f09bf54d0166f7aed85d0f400b02  gcc/config/tilegx/tilegx-c.c
! 7dfe59c129fd7feab0ad6b7b96e02b44  gcc/config/tilegx/tilegx-generic.md
! bcba0d24e618f157786f0a42bfcf0c75  gcc/config/tilegx/tilegx-modes.def
! ae19f41171a60963b86535af4a9a094e  gcc/config/tilegx/tilegx-multiply.h
! dd108c4e08e3dfeac2ef1a5d1bdc8264  gcc/config/tilegx/tilegx-opts.h
! 8bdc822556abfe63bfa6354b8b51b6b5  gcc/config/tilegx/tilegx-protos.h
! acb2b7a676593dc97292218f018685e2  gcc/config/tilegx/tilegx.c
! 4595acfb169fa80f7a83669fcf079ae2  gcc/config/tilegx/tilegx.h
! f4410f8e050ccee97ee129e9063ea8c0  gcc/config/tilegx/tilegx.md
! 557ae9e8eb9d7e236218ae3d90bf8751  gcc/config/tilegx/tilegx.opt
! c387c44b6e6a7768c8230f9895cb2b2c  gcc/config/tilepro/constraints.md
  f62347fb17ffdccf93a30b860f9f4dc2  gcc/config/tilepro/feedback.h
! 9098dcc4db99d0eaf1d682431bab928e  gcc/config/tilepro/gen-mul-tables.cc
! 73f582498292440c97799a431dd8993e  gcc/config/tilepro/linux.h
! ce9144c5ac87f719213c7fed543cea7d  gcc/config/tilepro/mul-tables.c
! 2aafe04a74fd58c9260f32303a6321b9  gcc/config/tilepro/predicates.md
! 3f18cdd00997ddf3552919159dbe4bbb  gcc/config/tilepro/t-tilepro
! f7ede512ec5f3761e3a26f64a5624ca7  gcc/config/tilepro/tilepro-builtins.h
! c4819750c46d03c20c4d289ddbbdf992  gcc/config/tilepro/tilepro-c.c
! 7eb13faa3726bf0750d24e27d870a599  gcc/config/tilepro/tilepro-generic.md
! 9134d8080922c7051ca36dfab31808ff  gcc/config/tilepro/tilepro-modes.def
! c191741e56c9fbf690b52d9cadf256ab  gcc/config/tilepro/tilepro-multiply.h
! e81b3414895c1b716a598b137f5fa628  gcc/config/tilepro/tilepro-protos.h
! c71d8bb3b87af0337e882ae233736b01  gcc/config/tilepro/tilepro.c
! 32ccf584b7d4089998a19493842591ff  gcc/config/tilepro/tilepro.h
! 1d8cc30575deb4dbc941764bcad4a619  gcc/config/tilepro/tilepro.md
! b97ee2f5d85ccead768ac302e99e743d  gcc/config/tilepro/tilepro.opt
  17fd5cabcc31b720b23bad47cf7fe84c  gcc/config/tm-dwarf2.h
! 5c136b2e8885db042bb049c78c9e955d  gcc/config/usegas.h
  a6ae71a556271cc116214b3e9e87d867  gcc/config/usegld.h
! f410ad608b013ba78124e51f9c5efe9c  gcc/config/v850/constraints.md
! c5a3c89a1c923e2476bf07126705ffd2  gcc/config/v850/predicates.md
! d2e41a02aa6f43c6e8c0fbb02e5a1812  gcc/config/v850/rtems.h
  41b5d5e91cc905b1e3ba5de47db5f9c6  gcc/config/v850/t-rtems
! 89c3f32e12f7042ede7cea030bbd2361  gcc/config/v850/t-v850
! dbbaee77cc147fa9a327a31a76756c18  gcc/config/v850/v850-c.c
! 384b5b17fe167742cd6e5115063c1386  gcc/config/v850/v850-modes.def
! 748072e9ac0d6727203ed4805e6e09e3  gcc/config/v850/v850-opts.h
! 2e6c8e1ed082a63900e313c202b26840  gcc/config/v850/v850-protos.h
! 4d0c0de89ce82c6b0e903b455b02ae5a  gcc/config/v850/v850.c
! 50d0eed0d2aa8da1050d851613335ab9  gcc/config/v850/v850.h
! e8484740d5719d2e1b12a880e2b0de68  gcc/config/v850/v850.md
! 90a6ed7b51cbc9dae9f69666a478d7d5  gcc/config/v850/v850.opt
! 6609374c2d2b3aacf29f62cd73f5a343  gcc/config/vax/builtins.md
! 85b5974e2bad18a70309b939815093ed  gcc/config/vax/constraints.md
! 5bb720226e6d447777ddb574d3380f76  gcc/config/vax/elf.h
! 1a8efb9ad4517c812682f8fa922e2802  gcc/config/vax/elf.opt
! 7b0c8e9cb91c7be445099a8946de8845  gcc/config/vax/linux.h
! 5b745bf4a85df9576df2cd1024f81ce7  gcc/config/vax/netbsd-elf.h
! 5cd1435f2a16fcb5505a495c732e5df4  gcc/config/vax/openbsd.h
! e73530b82940344e65c464f787f0ea53  gcc/config/vax/openbsd1.h
! a1e190d3b341bc6ddeb76fbf961e7b78  gcc/config/vax/predicates.md
! 4c689845b2e868dbae5ebbbb8b8005d8  gcc/config/vax/vax-modes.def
! 7e0c2696f78ab7b89c7db443c436779c  gcc/config/vax/vax-protos.h
! acb0a2d19a78a0ff20e2c972ee8b2fd3  gcc/config/vax/vax.c
! a68f8b03e844439f59b4160c2f55efa9  gcc/config/vax/vax.h
! 48661c71f0f5d9bfbc22a2ff6cc7d0e9  gcc/config/vax/vax.md
! e520abd9398f1388046ec8dc7914589d  gcc/config/vax/vax.opt
! d80f4fcca05c464187a4256ac7f26d56  gcc/config/visium/constraints.md
! 421863138c200f1fa1d74ed5fa5ca84d  gcc/config/visium/elf.h
! b101fe12afce4531562c46fd695f42ef  gcc/config/visium/gr5.md
! 91b6a567cccfacf2f6fcfc492063ce9c  gcc/config/visium/gr6.md
! 26886e21b60775d13dd9ba0bfce264ff  gcc/config/visium/predicates.md
! 86d7fcc4645a8ff4e92b6be797fbbc79  gcc/config/visium/t-visium
! 0c8d1268199f74868866c3f3b9fb73f4  gcc/config/visium/visium-modes.def
! bae69735f03839fb213bbec99b157b79  gcc/config/visium/visium-opts.h
! 29ea606398f47c0deb0981abb81e7aa6  gcc/config/visium/visium-passes.def
! 31aa2bd49205ecdb391cdf598c6b09b5  gcc/config/visium/visium-protos.h
! cc820131ba5262aa363c14cc7ec49ebb  gcc/config/visium/visium.c
! 00e7824ad7f627693be706aacb70c37d  gcc/config/visium/visium.h
! 9b6f57ee259afb6b58122d02c72a9147  gcc/config/visium/visium.md
! 3c6f66507be96571022410d913b14c39  gcc/config/visium/visium.opt
! a35383b156a256ba8b7a543665d0c364  gcc/config/vms/make-crtlmap.awk
! 2a2cbceba3284ecc6659a28f4655d4e1  gcc/config/vms/t-vms
! 7f3fd5e5fbdd12393abf8baf7b0d7cf4  gcc/config/vms/t-vmsnative
! ed9ef5f03aaab5cea39519986fb0ea94  gcc/config/vms/vms-ar.c
! 686c99f46111c26b3f62f88fe322ef40  gcc/config/vms/vms-c.c
! 88a072da5fbb7828331d88720c03679d  gcc/config/vms/vms-crtlmap.map
! b2a03daf85a7a9c0c602ab47d426e936  gcc/config/vms/vms-f.c
! 96f9e97a2d2f8a6b4413b9b59ffb2f41  gcc/config/vms/vms-ld.c
! fed0294dccf7d4c6dc84f620ec547967  gcc/config/vms/vms-opts.h
! 3588a87c0d437892a287d7847cc0cf70  gcc/config/vms/vms-protos.h
! c5c7cd36faf5d207ad3c0c789592c691  gcc/config/vms/vms-stdint.h
! e7d3a88c0991f70ab9fbb932203b1c51  gcc/config/vms/vms.c
! ae2820ac7d43cf59e93f97657bc44c4d  gcc/config/vms/vms.h
! 828a857c6b0f3a23869e1adaeb53f3df  gcc/config/vms/vms.opt
! d169abb7e439c5dc86b832320f47569f  gcc/config/vms/x-vms
! 19d889677a4e78220b438c10136349ea  gcc/config/vms/xm-vms.h
! a840dd8b538edf98d2ac04d7b66594af  gcc/config/vx-common.h
! ee2d7624a1cf8a055beab64a9f01a8d9  gcc/config/vxworks-c.c
! 35ab1cb7e1a5fc52ce8d72b668a912d4  gcc/config/vxworks-dummy.h
! 3fa5a61490392704bd52ce26bba3a1ac  gcc/config/vxworks-stdint.h
! 5ee1854216d708e655c076effc3235b8  gcc/config/vxworks.c
! 79a33886fff43b068a90b2c97d5dc5f7  gcc/config/vxworks.h
! 93a6417ac698f4a1b486f240a11d75b8  gcc/config/vxworks.opt
  d55d2805d12ce9917cb284aac8570878  gcc/config/vxworks/_vxworks-versions.h
  2c7fb7482d87758a9305ce4fec4c94ea  gcc/config/vxworks/_yvals-wrapper.h
! 01e406b5ec3947608efc9e86649771ac  gcc/config/vxworks/_yvals.h
  9e122a12d3e14f20967d135228bf88dc  gcc/config/vxworks/complex.h
  49b7fa25b0fb42a6ae7a81eddfed84cf  gcc/config/vxworks/inttypes.h
  4e93f0754151b93c5a74975e7d3cc3b1  gcc/config/vxworks/math.h
  6844198023015462d685c40332394d86  gcc/config/vxworks/setjmp.h
- 69890065cadae9a4f89c1b535e9155b2  gcc/config/vxworks/stdint.h
  e8eef5870ca1f50784d7ccedc98d709d  gcc/config/vxworks/vxworks-predef.h
! 5cf2045e7c212d5a5a9a24fe63fa030a  gcc/config/vxworksae.h
! b93dc9cc6617eb733ccb70bc6911c444  gcc/config/winnt-c.c
  5cc0a69d6149e22cb7ea38c2206a2af3  gcc/config/x-cflags-O1
! e039340cbf1639956ac7be2a90852c1b  gcc/config/x-darwin
! 70a634635eff456ffab3bc53b2a81690  gcc/config/x-hpux
! be8a6e9a94bd2fa1d41af513297364dc  gcc/config/x-linux
! 7b1b069277d1d63aa08b764e640329ac  gcc/config/x-netbsd
! 2a6ad432bb06a41ba76f613b392d784b  gcc/config/x-openbsd
! 6ad0b39a7daae38439d6d8cfd23c3ba5  gcc/config/x-solaris
! c67d6db68add0126408109cc5b6457ae  gcc/config/xtensa/constraints.md
! bf27ee51add23d218ca627b3d40fda5d  gcc/config/xtensa/elf.h
! 3a971bb0d6a114496a5942d1ddc00326  gcc/config/xtensa/elf.opt
! 1c4e0a2008f4677243015613dd5a8b46  gcc/config/xtensa/linux.h
! 0aa9ecb2e40c4ba9958ab5c4944fbd77  gcc/config/xtensa/predicates.md
! 229d83aa036bafd17c30632942638b60  gcc/config/xtensa/t-xtensa
! 1bcf98a33e1bda802125575257a30784  gcc/config/xtensa/uclinux.h
! 9f2e36203965b3914925884725920df2  gcc/config/xtensa/uclinux.opt
! 84c554b196894a50ca18c5fd8a6edf20  gcc/config/xtensa/xtensa-protos.h
! 648a531dd6883762e216cc9bea2507d0  gcc/config/xtensa/xtensa.c
! 06bc01a7ccf9f8e76a200854e3483443  gcc/config/xtensa/xtensa.h
! 6c6d0b85211762c11d2e72a6182bb110  gcc/config/xtensa/xtensa.md
! f5b73b7b0901f94c273f343137c0a387  gcc/config/xtensa/xtensa.opt
! 1ba5e43f94b8286a6f2912dbb52f200e  gcc/configure
! a336102eddc61c8a86cbc237b6a0ce5c  gcc/configure.ac
! 27d42bf7c74759dfd549975615fc5068  gcc/context.c
! 16c3aa3c912f686f2a31e9390d85475c  gcc/context.h
! f4ce7d4c40b8bd5fdb65296621e3c102  gcc/convert.c
! 70fc96b69d15408e8fdd3f28979c7efe  gcc/convert.h
! 58838e86153d7aad6779dd34024780f6  gcc/coretypes.h
! 165e8c92386e4de91399049eaf43a842  gcc/coroutine-builtins.def
! b92bf93ad5a628ce259b9055426c0cd4  gcc/coroutine-passes.cc
! bde87550feaf889731652f27f77bc587  gcc/coverage.c
! 040e51182a2000cd08580cee4c8591c6  gcc/coverage.h
! d3d396b1c45bdd2d8e6f37a4dc32fdda  gcc/cp/ChangeLog
  d271e3663538ba1f3281cab3838e92cd  gcc/cp/ChangeLog-1993
  f5a44adbc05521162350ca409d1d95ce  gcc/cp/ChangeLog-1994
  ac55db48d964cb5469ff03c1cd3ee04d  gcc/cp/ChangeLog-1995
--- 2980,5077 ----
  745188949cd7ff6df266579735782385  gcc/ada/vxworks-smp-ppc-link.spec
  297ba61aeda52a880298da8069891ecc  gcc/ada/vxworks-smp-x86-link.spec
  cf24e76097812a932a26f6600d193208  gcc/ada/vxworks-x86-link.spec
! 06e57b640d1aca0be4b6da38098e4157  gcc/ada/vxworks7-cert-rtp-base-link.spec
! 3f3270b5bb2062f4d0477ab7e768d46d  gcc/ada/vxworks7-cert-rtp-base-link__ppc64.spec
! c0ffb82152caa9bd08b1350cec3ffcba  gcc/ada/vxworks7-cert-rtp-base-link__x86.spec
! 2ed87baf5014d1345a1142ceab80bb13  gcc/ada/vxworks7-cert-rtp-base-link__x86_64.spec
! 987b48a23594fd72c3697baf88d4e628  gcc/ada/vxworks7-cert-rtp-link.spec
! d374967a9c157fd079d5b2491f43f68a  gcc/ada/vxworks7-cert-rtp-link__ppcXX.spec
! 2335f5267c95b1b00d90139d0681ca2e  gcc/ada/warnsw.adb
! aa803022673b156a14e11b609eb57b01  gcc/ada/warnsw.ads
! f295940dbd9fa9fdbd559025d2ac7002  gcc/ada/widechar.adb
! ca27b5abc81b9a5c50a09c84c8e2c2d0  gcc/ada/widechar.ads
! 20a13d744627fc8c3a5e7c04dac343b5  gcc/ada/xoscons.adb
! 4422d1b4b09f698febaf9e4e5351d17f  gcc/ada/xr_tabls.adb
! 995b2f66c76b6feb31735b24161797d6  gcc/ada/xr_tabls.ads
! 883dc2ae6fd9fd363e0ca070ddb0a84b  gcc/ada/xref_lib.adb
! 9b69d53dd62fb26d9f4b3d74c9360c06  gcc/ada/xref_lib.ads
! 41b19d5ba03455cb4246975a86e238c4  gcc/ada/xsnamest.adb
! bd46f3f31e55bfb75dc18bc050637dcd  gcc/ada/xutil.adb
! a90368159c1f4354778fdfba479b896d  gcc/ada/xutil.ads
! 187b0627159fdbe16634c07044940109  gcc/addresses.h
! 0b8589934ce41117a403f141ed60851b  gcc/adjust-alignment.cc
! 5e47b9def7e2b037aa3b62fbd58c8377  gcc/alias.cc
! ababde2c5bb14917f39624789742a3bd  gcc/alias.h
! 2cc2cdd05c8be53c1cb016bba012fd9b  gcc/align.h
! b2ce75825ccf75e072ab6c8975c38232  gcc/alloc-pool.cc
! b7c04162e76f23d56fa00205e789f7dc  gcc/alloc-pool.h
! f83b4f1316acfef8021fbc0da97633b4  gcc/analyzer/ChangeLog
! 3acec58f414ce82e99f2983591f45b43  gcc/analyzer/analysis-plan.cc
! 8ce96491e4c46bedd4a35adc52251a3a  gcc/analyzer/analysis-plan.h
! 3cadfbc2a96c42c26013f8530330f752  gcc/analyzer/analyzer-logging.cc
! 6633ab0df888810cb47a0698bfbb7333  gcc/analyzer/analyzer-logging.h
! 0148f1071e10998f253ce7d4016c7ae6  gcc/analyzer/analyzer-pass.cc
! 00378bed5aa71fefd27addcfcb0fe105  gcc/analyzer/analyzer-selftests.cc
! 3e703118e15e2acff7324ff2a5e61e9f  gcc/analyzer/analyzer-selftests.h
! 86097836c7e35fcf638d49cfab39a89c  gcc/analyzer/analyzer.cc
! 99dfcf844adbd58a6811d5b818f44ef6  gcc/analyzer/analyzer.h
! 5f478af30eee134b5b46762511f06939  gcc/analyzer/analyzer.opt
! d658907315ee0110f41b29d76a0530c4  gcc/analyzer/bar-chart.cc
! ecb411853a5c687c99306fd03bd3a4d7  gcc/analyzer/bar-chart.h
! 1793b5dd91206494aec46774449a1d6a  gcc/analyzer/call-info.cc
! e6d806581b137f3d47a08cdae8e89f4a  gcc/analyzer/call-info.h
! ca6b1b7227c5d3f79f7ce7b9f8227193  gcc/analyzer/call-string.cc
! 0ebe9af80abcf7c965214e8fc80c0f05  gcc/analyzer/call-string.h
! 784bbbe98cd752cdf05611dc04e5eee0  gcc/analyzer/checker-path.cc
! 211812e8119826c866c3e97eae3e4fa2  gcc/analyzer/checker-path.h
! c1527fc64354fa32cb004c9e035d1617  gcc/analyzer/complexity.cc
! 88cdec9445bfdbd0d1d87004c9038101  gcc/analyzer/complexity.h
! 9f5f4cd88dacf50014788a65d75335be  gcc/analyzer/constraint-manager.cc
! 75fcad93d7f279dc445c2ec29a0be5e5  gcc/analyzer/constraint-manager.h
! 06122ccc8b8b5f69ece4c9c30d015feb  gcc/analyzer/diagnostic-manager.cc
! 67052cb0063cfe6dc069cf06cd5e77a3  gcc/analyzer/diagnostic-manager.h
! 46e758bcf68bfe94156848f2d02d5b83  gcc/analyzer/engine.cc
! 2bb0210c571ff005f8f42528998ac0dc  gcc/analyzer/engine.h
! b298fc2acc220c9ecf05e35ca889bf3d  gcc/analyzer/exploded-graph.h
! 2356d51c1295764de8e82920db3cc200  gcc/analyzer/feasible-graph.cc
! c4873314df40e7092a39f274c7eab1c9  gcc/analyzer/feasible-graph.h
! 902a9704d9df18cc2938172380bdb7c7  gcc/analyzer/function-set.cc
! 90d0a2085e0fed28d026871e91907e18  gcc/analyzer/function-set.h
! ef8a62a87e86917f47141aa65b6ae121  gcc/analyzer/pending-diagnostic.cc
! 19b630b6d3d6883346bf58ca36bc995a  gcc/analyzer/pending-diagnostic.h
! c5de598cfeca32b0c6b15b758871e29a  gcc/analyzer/program-point.cc
! 8cdb3e4cf8c6e7860b58bb9998e99f71  gcc/analyzer/program-point.h
! 6c1a5254f07786f6c9290a71237e721b  gcc/analyzer/program-state.cc
! 64abfcace7eb73e594f51f224ee142b2  gcc/analyzer/program-state.h
! 92699f3645fa03dc1bac69caefd67c11  gcc/analyzer/reachability.h
! a9de6e1fa8278f5957c0ccd02acd014d  gcc/analyzer/region-model-asm.cc
! ae1e4b08caa82053daa648685174efa8  gcc/analyzer/region-model-impl-calls.cc
! a71b819dbe58ef4fdcbdc9541a897e06  gcc/analyzer/region-model-manager.cc
! b0b62fd80628cdd3dc8b5604bd91375a  gcc/analyzer/region-model-reachability.cc
! 4c5d2a3c0898ca5bd41abb5bc5fbe038  gcc/analyzer/region-model-reachability.h
! 2f3e3bf083a24df93c38079cd80c8bfd  gcc/analyzer/region-model.cc
! 4cb057e92d9b45a3f512e6da59f188fb  gcc/analyzer/region-model.h
! ea912728bd7e81585560c2e8fb7f1163  gcc/analyzer/region.cc
! 3e4768734e6689221f3a21ec74d26194  gcc/analyzer/region.h
! 16f968d3c070962af0752d38fbdc7f86  gcc/analyzer/sm-file.cc
! 6f0466bc0ed99d07496aa05f7d8f92d9  gcc/analyzer/sm-malloc.cc
! 31726160712dbb2b54c951609b52ea41  gcc/analyzer/sm-malloc.dot
! acbe4b8f485b30d4e419c676b232ca7e  gcc/analyzer/sm-pattern-test.cc
! a3d99cead5f4178ec70a5e30db095cd5  gcc/analyzer/sm-sensitive.cc
! f0f35148e2ca4bcbe405a1fe09dda592  gcc/analyzer/sm-signal.cc
! 09d0f84251e51407a68299971c0fc42a  gcc/analyzer/sm-taint.cc
! d1ad1df62e24df1164c04999f62f39bc  gcc/analyzer/sm.cc
! 5a03bb4c78c096ec0b42ddc49de2e80d  gcc/analyzer/sm.h
! d04ff82294c3a090396e7e192fe74cf5  gcc/analyzer/state-purge.cc
! 2194e5f9d22b9d7f322bce8b58938c5e  gcc/analyzer/state-purge.h
! 1a403f91e9e195780214418397a7ca3a  gcc/analyzer/store.cc
! 100d47c30b94a50b13a23ae3e5abd6d6  gcc/analyzer/store.h
! f4af466e5d46265a82b77b69fd5c2fee  gcc/analyzer/supergraph.cc
! d1ece647573091c4b6a0434986d022b9  gcc/analyzer/supergraph.h
! 7e94ce1e1558b43731321b5db841de5e  gcc/analyzer/svalue.cc
! 11a3a82a92b7013acefd3b1d269b4cde  gcc/analyzer/svalue.h
! d88189bdcecfa56e5ffaab39a03396f5  gcc/analyzer/trimmed-graph.cc
! 4bafa74d2a8c0d933f1620cbe9887fc2  gcc/analyzer/trimmed-graph.h
! 0b95095c8e8df661977864b73fa53bcc  gcc/array-traits.h
! efff56a9276dba1568b377b1f33c2545  gcc/asan.cc
! 9d182c46a0fa9d235966ac5a88ef883f  gcc/asan.h
! 336ce4517e459467aec46c73e361403c  gcc/attr-fnspec.h
! 94bff5727492a16c140450adc5bec8f2  gcc/attribs.cc
! f35983fbc75e85ec6bb625c1e3d93060  gcc/attribs.h
! f2a5b546c85c4efb7d2f0103653a5728  gcc/auto-inc-dec.cc
! 98a3904d4727900960256e4afbf77de7  gcc/auto-profile.cc
! 96b0d496f959bdb607cc3d80d8f0e62e  gcc/auto-profile.h
! e8ddb5768af138adb4c7dc9ceeef18fc  gcc/backend.h
! 789f9c53260b2e6310c6d9cce6573842  gcc/basic-block.h
! fb8f63861d710db7c449cbcb6b351915  gcc/bb-reorder.cc
! 6617828b52b378fcd102261c0a5e92b5  gcc/bb-reorder.h
! 86e6d04ba8d6db17822d7e77f111b625  gcc/bitmap.cc
! 463d4f90c70a2ee34e18e4e1cdac3017  gcc/bitmap.h
! effc7bf1ccdcbbcde7f3785aa54561c2  gcc/btfout.cc
! 054e5fb089c16e62b46b994b919a245d  gcc/builtin-attrs.def
! 9397c619ec5582634dc3e244ff03f6c9  gcc/builtin-types.def
! 2ad4483a2ffe816992a2a9dae48bc70b  gcc/builtins.cc
! a72c74534e856f4d387a76fa2204ea5b  gcc/builtins.def
! 48b30dc7e25f5905415a1dac460e9750  gcc/builtins.h
! b1f6a9006e3f1af697cae45156c55b2e  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
! 4b2baed57eb6f15b65d73c6d4b90b862  gcc/c-family/c-ada-spec.cc
! 77ea826f6e5f43400d6095c1026cb640  gcc/c-family/c-ada-spec.h
! 1ac3eb502ce4873ac4d8cea0f46f5931  gcc/c-family/c-attribs.cc
! 5c97f797136cada5078deee5328f2dde  gcc/c-family/c-common.cc
! 8a7421b92ec542eccb81b8a4069ba2ad  gcc/c-family/c-common.def
! 8bf5d16691b94652ed2d37b183ef0e41  gcc/c-family/c-common.h
! 8991a62ab96fa1fad9d89d551283bdd5  gcc/c-family/c-cppbuiltin.cc
! ace6960d00063212ee9ff914f19af263  gcc/c-family/c-dump.cc
! a6e6412df113a871984e4d3e0c59a954  gcc/c-family/c-format.cc
! 074df03d16455b2d5d97400267b29292  gcc/c-family/c-format.h
! 9d9e35d40269aedb8d1cf35a004b3aa6  gcc/c-family/c-gimplify.cc
! 78c1df4a556b61f6fbcf775b1b06ef03  gcc/c-family/c-indentation.cc
! 366be7ff35d4473fe925e98f64d0fa83  gcc/c-family/c-indentation.h
! 6443c345952222040741cbd8a1d6e1b9  gcc/c-family/c-lex.cc
! f53bf811224874c8cf6803a9d4766c7c  gcc/c-family/c-objc.h
! af9a0fa4e63145b3c994f3cfd9d608a1  gcc/c-family/c-omp.cc
! ba4e6aa580bcb97695f1e88ac963111e  gcc/c-family/c-opts.cc
! 00ed0919fbaac7675375ccdfaab6a8bf  gcc/c-family/c-pch.cc
! 12e90bdd8eac8ef2f8fb0bd3d4520db0  gcc/c-family/c-ppoutput.cc
! 2c66f0f1cfcfe4ee885f16bd33a6d2db  gcc/c-family/c-pragma.cc
! 84bfd9edb36a8013d6108c26781c39dc  gcc/c-family/c-pragma.h
! 7711d04d7e1ba677219ecac31ee22781  gcc/c-family/c-pretty-print.cc
! 0c6371d3a654141a9cd26a12aaad0911  gcc/c-family/c-pretty-print.h
! d88141dbe6ee4cdf0241ecea034a6ebd  gcc/c-family/c-semantics.cc
! eb037f948fa34a189765877123cb18b4  gcc/c-family/c-spellcheck.cc
! 72360260da59625f86cab66729dabd3c  gcc/c-family/c-spellcheck.h
! 66c8d42042722a1bf4dcf07fbf909452  gcc/c-family/c-target-def.h
! 9a361f164225f5ce69aacf7688496476  gcc/c-family/c-target.def
! d377f983a2b7608542fc0d1034ab9e5a  gcc/c-family/c-target.h
! dc8a64253c8832dc72e170910b72b8f7  gcc/c-family/c-ubsan.cc
! 644fa2dfeaf0cfe53b8bca3d6ad5bb1c  gcc/c-family/c-ubsan.h
! 960c40098259304e63fe7e65d89fe179  gcc/c-family/c-warn.cc
! 9ba31ec21d4ddd5e65ec4f2a9510fb5f  gcc/c-family/c.opt
! dcb2cef5a26e1633b9899946a2ea78cb  gcc/c-family/cppspec.cc
! 9123fcb7ad65bc2ed96b2a8e6532c62c  gcc/c-family/known-headers.cc
! a68d869def2a6738d328ed7689f87190  gcc/c-family/known-headers.h
! 55d4227fdfb9e5cd81ffac2fadcf85c9  gcc/c-family/name-hint.h
! d5e5e6221af65ab5bf8c100105a7e635  gcc/c-family/stub-objc.cc
! 9b036dc1aa9bde6c0b1795baaf93ba5e  gcc/c/ChangeLog
! c34f18ab50963bd48783733e4cc912d5  gcc/c/Make-lang.in
! bca8b48089af255e3dc7cdc6705005fa  gcc/c/c-aux-info.cc
! a670199451d3424bfef5a97af7e81f86  gcc/c/c-convert.cc
! 5e7e80bdb1617ffa6061cab0933fef77  gcc/c/c-decl.cc
! 76e38393aeab52ee4fd15f1b7bcfe5c0  gcc/c/c-errors.cc
! e2d3c0a7888d2d1089c7b84ca5cf8adb  gcc/c/c-fold.cc
! 36585bbdc134fac93bf37ce4a266a742  gcc/c/c-lang.cc
! 4c41bcf57ef70a715d912f300edcaa93  gcc/c/c-lang.h
! 9568e9971745ea65bd3d2cd78d731b5a  gcc/c/c-objc-common.cc
! 1002460f01d21f3324f0ab1de4f57e08  gcc/c/c-objc-common.h
! e0e5479e0f6f4f20a5bcd4d9ec2ba1e5  gcc/c/c-parser.cc
! 9a67949fe8b699fa17a2d86df0c26982  gcc/c/c-parser.h
! a0c8332636dfa9ddad34279ddb02f408  gcc/c/c-tree.h
! b3bef05629447672940e4d17d2c6ce96  gcc/c/c-typeck.cc
! b7fb26d29af07468efe2938b8b9bf0af  gcc/c/config-lang.in
! 3afc109228b19fcb0d4a94d5d641b0bb  gcc/c/gccspec.cc
! 781af451520f205a34a5c0cf153b304e  gcc/c/gimple-parser.cc
! a9f235efd21dd80628fc14eaab414e66  gcc/c/gimple-parser.h
! 05bb49193ebee058883b9e7b5e927a62  gcc/caller-save.cc
! 6b63091fa395cf3b64a2565eca53818f  gcc/calls.cc
! 1c7fd0b9b35cbc453724d299377cf94a  gcc/calls.h
! 57c4db410b8bdc8381dc5c909d13a8f9  gcc/ccmp.cc
! d6875984b5cc2128903dbb2b1ddbd0cd  gcc/ccmp.h
! 5cfa5baa10504b0ce0fc1ce7978d9618  gcc/cfg-flags.def
! 6583c5dad6f16c03b17ea97a6cefb07f  gcc/cfg.cc
! 6d01c3e658529344de86c02213d0ae07  gcc/cfg.h
! 6bb9ef3ac284718bf56cea5427a4a16f  gcc/cfganal.cc
! d28ee28e1915a34068f3acb03f4a49bb  gcc/cfganal.h
! 0d2a82cb58b1cfefbbc755ce0827fdd6  gcc/cfgbuild.cc
! b12c021dcabda408f8a77b1262578938  gcc/cfgbuild.h
! 1eee849ccec795885a6e23f54f6f2564  gcc/cfgcleanup.cc
! 26d6ce4714a68321ba5ee3ca8d8d5042  gcc/cfgcleanup.h
! 61eb20374be6ec6c364c92ede21b7c95  gcc/cfgexpand.cc
! 2081ed1f982aff326fd96314f500b487  gcc/cfgexpand.h
! ec7594dfe02fd1aa4366747bf98b01ef  gcc/cfghooks.cc
! c07ae507570a86e164131d0adbb19c7a  gcc/cfghooks.h
! 83b1d3c7f520aa855c953002612181fa  gcc/cfgloop.cc
! 8e1dc1f587147e4913317aec3dd62f3c  gcc/cfgloop.h
! 5b7a334e2dcaeb9a33896540bd01f7bb  gcc/cfgloopanal.cc
! 50b7fc6231c733144dc1c33d48b8b739  gcc/cfgloopmanip.cc
! 4455a96e3179beb08bf7d4c4275ea90a  gcc/cfgloopmanip.h
! 4b7f057d656f23fd1f511f22357ee7e3  gcc/cfgrtl.cc
! f7f172c645d893709e8151eeaad80a16  gcc/cfgrtl.h
! 2dee47e9aaa47cf315dd169834a7cb5a  gcc/cgraph.cc
! 6497485368e3b1ee6de055bdfd6270c2  gcc/cgraph.h
! 5757ec66e81724328cf4c78ce0354445  gcc/cgraphbuild.cc
! f689051cba48a1d85ea48819c7f1cd64  gcc/cgraphclones.cc
! f45bc1d0f76a903a939aff1f2b1d119f  gcc/cgraphunit.cc
! c4a638b8438c85490d58aa4c8a364b19  gcc/cif-code.def
! 51b9093b582e7ab838747e098a7aeedd  gcc/collect-utils.cc
! 553d6ef88e3bbc59f1562d2aa4b14ada  gcc/collect-utils.h
! 0ebcb199f055d68f8c1764be28d38fe8  gcc/collect2-aix.cc
! e218b7389df915c65932d195e32dc5ba  gcc/collect2-aix.h
! edbea9c45bd94aaebcdc56d9cf836f77  gcc/collect2.cc
! 2ec72d0e57c1f7b840013ba711e852c7  gcc/collect2.h
! a11d1e0986f7e4980609556464f7402b  gcc/color-macros.h
! 8944f9bf83d393ae5343dc8323fbe27c  gcc/combine-stack-adj.cc
! 3f3fdbe6897fed5eacdbf6771f715875  gcc/combine.cc
! 95a28c5bec13efb49456ad7b0b35c5e8  gcc/common.md
! e204bf4b5990ec9536bc7ebd5fbed741  gcc/common.opt
! 1dfb24e07014e2857e3871b986f7cda8  gcc/common/common-target-def.h
! b40fa7b7f796158035bf897b90c5c9c7  gcc/common/common-target.def
! dd4780cefdc0ff70db891cc7364072df  gcc/common/common-target.h
! 5d29f71b420bf5f035414f395796abce  gcc/common/common-targhooks.cc
! 1a99753a3b206d3e8662f45e6ea668ea  gcc/common/common-targhooks.h
! b517f5736c81ece16b8ffbacc124e60d  gcc/common/config/aarch64/aarch64-common.cc
! 53bac84b3174cc2a1ec1b416779fa017  gcc/common/config/alpha/alpha-common.cc
! 14d82ac4081ee923e20c85f6bd01b94c  gcc/common/config/arc/arc-common.cc
! 3325f85dc9b72138d667d4f544f2acdc  gcc/common/config/arm/arm-common.cc
! d10c718feb101d59127d3ac280855934  gcc/common/config/avr/avr-common.cc
! ee2200c71804a48ee3e212e3b665b29e  gcc/common/config/bfin/bfin-common.cc
! b587bfef0eef0f460e1b2fc6a5a5bb7c  gcc/common/config/bpf/bpf-common.cc
! 1679dff58cd1fc1e18a5a030aa10f1e5  gcc/common/config/c6x/c6x-common.cc
! 9da71d688c2c72561d27e55ea893ab8a  gcc/common/config/cr16/cr16-common.cc
! 44280053230b7493bf5e090243f5b3ef  gcc/common/config/cris/cris-common.cc
! 8e15a64d6c7b461997b61a3c8a37b878  gcc/common/config/csky/csky-common.cc
! c85c72f18c8e06fc76e7359f7118ae83  gcc/common/config/default-common.cc
! 06944f88abf3573fcb44ff5c9458f983  gcc/common/config/epiphany/epiphany-common.cc
! cd40090c6b0ff392d059a73dafb6c8e7  gcc/common/config/fr30/fr30-common.cc
! 20e390668a44860c3145733d9c796800  gcc/common/config/frv/frv-common.cc
! be9b9d41f6660137eeec7dfdf8a7f359  gcc/common/config/gcn/gcn-common.cc
! 165032b6a1a6571ace982867c4ff2039  gcc/common/config/h8300/h8300-common.cc
! c95c698fe0fd035b24ee338303913401  gcc/common/config/i386/cpuinfo.h
! ef1e2e2c663227bfa9d74b7f36ac933d  gcc/common/config/i386/i386-common.cc
! e3de61972b405d3f76d1af51e277103c  gcc/common/config/i386/i386-cpuinfo.h
! 3f143be99f8781c66861c65ae2a601a3  gcc/common/config/i386/i386-isas.h
! 5494bdbe00937fd7a5af86c32a0899ff  gcc/common/config/ia64/ia64-common.cc
! 6dbb6f1d886765f6d8351ac84a0be2e5  gcc/common/config/iq2000/iq2000-common.cc
! b3048b67c6beed36a30c691610f23458  gcc/common/config/lm32/lm32-common.cc
! 86cb7fd6b104d4050bab19621d766f07  gcc/common/config/loongarch/loongarch-common.cc
! 44cd08ef21b8dfe4ee43184e0d29b3f5  gcc/common/config/m32r/m32r-common.cc
! da6403487e543808aacea65df5afffac  gcc/common/config/m68k/m68k-common.cc
! 0de6dddaf99bd0c62c05f01e6cfa1cce  gcc/common/config/mcore/mcore-common.cc
! e9c0aedef0d1dc4bcc35300253a65a49  gcc/common/config/microblaze/microblaze-common.cc
! 569e0c88171830928db5af30edcce37d  gcc/common/config/mips/mips-common.cc
! 606a13966281d9680abaf49ea3d09763  gcc/common/config/mmix/mmix-common.cc
! 200d036a60fdde399879db2ade45322d  gcc/common/config/mn10300/mn10300-common.cc
! e3e7f98e0533f2cb62d7f370c107c1f5  gcc/common/config/msp430/msp430-common.cc
! 33de86f4d3cb59b5e4288fd433de50ce  gcc/common/config/nds32/nds32-common.cc
! 1b024590ad4fd89de41ecbf4f5f381a8  gcc/common/config/nios2/nios2-common.cc
! 31c14a07052a2185c1c926feec2c465b  gcc/common/config/nvptx/nvptx-common.cc
! 7032e9972daba5fcf39119eb9cf3e622  gcc/common/config/or1k/or1k-common.cc
! 4fa8b66cd59f483cf3ba5b78c0c29fdd  gcc/common/config/pa/pa-common.cc
! 56adda05770f4da873cb9455af96d19b  gcc/common/config/pdp11/pdp11-common.cc
! b41cc1a5a9c2a024d6503911644809b9  gcc/common/config/pru/pru-common.cc
! 7574eebd1f993e3fc8424f8f5994b447  gcc/common/config/riscv/riscv-common.cc
! 68d7ce5d2aabc8a4b1051db4bbffa62f  gcc/common/config/rs6000/rs6000-common.cc
! 91b14dacc519e2f60e76984679ac621e  gcc/common/config/rx/rx-common.cc
! c548772c8a9a8daa6fe02fdee9655ded  gcc/common/config/s390/s390-common.cc
! 456479481c8ac654b4d06e185f6334a2  gcc/common/config/sh/sh-common.cc
! 861d6a2c5fe08de16d7d559a75a42d1a  gcc/common/config/sparc/sparc-common.cc
! 649e96680b7d44bbda844df9b67a3c81  gcc/common/config/tilegx/tilegx-common.cc
! f0b94e820b2b03859ffa95f3ac1d700a  gcc/common/config/tilepro/tilepro-common.cc
! c013c03de17be9e65a3a183bc79ae317  gcc/common/config/v850/v850-common.cc
! 1b1e62c748ce6c0d24ce55263b809224  gcc/common/config/vax/vax-common.cc
! e0c84d669ee99cd7622e8c33152058ed  gcc/common/config/visium/visium-common.cc
! 104b674540ea47a950a80a291c8269a3  gcc/common/config/xstormy16/xstormy16-common.cc
! 4fdeb404d6089d276c7f759a0d4ba3fb  gcc/common/config/xtensa/xtensa-common.cc
! 25664084a9decb16a9842381eb5de52d  gcc/compare-elim.cc
! 7d9fe45f414a34e7ac860c896c22256a  gcc/conditions.h
! 6a09dc5d69c18159e48b650b80038ce6  gcc/config.build
! 60b00a431eb84d79260c5a27fbbceec4  gcc/config.gcc
! f9e9c6799c33fd97ecef8d0371a5960e  gcc/config.host
! 05aae2b3f68c309d65e695856db883b9  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
! f1de29e1b542d2f98786a8a5bed74596  gcc/config/aarch64/aarch64-arches.def
! fe42934bb2be20fce3a65bddc5f20adf  gcc/config/aarch64/aarch64-bti-insert.cc
! fc3a2cc78fc13c89f74ad0a18ff9adce  gcc/config/aarch64/aarch64-builtins.cc
! 6ae38a043ca5cb2daf3dd593f3907f0c  gcc/config/aarch64/aarch64-c.cc
! 228a5b455d8db6951f07072ca3e905a0  gcc/config/aarch64/aarch64-cc-fusion.cc
! 0acf6a229377a8e57df59ba39569138b  gcc/config/aarch64/aarch64-cores.def
! ac95d64830a0d770a37130e913c56e68  gcc/config/aarch64/aarch64-cost-tables.h
! f5f68e331308b7c24d25679b9271f4d6  gcc/config/aarch64/aarch64-d.cc
! bf3ffb60b43135348a698c8fedc24e46  gcc/config/aarch64/aarch64-elf-raw.h
! 1e0bf648ff22a93639e936ea6b20da3c  gcc/config/aarch64/aarch64-elf.h
! d6dce1d495101ce658a5d8ba0c370c40  gcc/config/aarch64/aarch64-errata.h
! fb8e0faa9f5e8abd640462d03f6ceef0  gcc/config/aarch64/aarch64-freebsd.h
! d7a75dbbf19c68f4bfa46c4935ad96e6  gcc/config/aarch64/aarch64-fusion-pairs.def
! 7dd870a58148cf0c4e7db53481a164ff  gcc/config/aarch64/aarch64-ldpstp.md
! 9ab0d5809ab5ca7d2c2d92a5e7b6f9e7  gcc/config/aarch64/aarch64-linux.h
! edb0ec8cbd93536777f413a3077f7915  gcc/config/aarch64/aarch64-modes.def
! bbf7795c7deae4a1b994b366a3ee10c7  gcc/config/aarch64/aarch64-netbsd.h
! 81f259af6086b92d472c64bb1a57e9ef  gcc/config/aarch64/aarch64-option-extensions.def
! 4e47319bbf2818a04226e243058e04c9  gcc/config/aarch64/aarch64-opts.h
! bc2702391f7a1d6ceedc1a05d62a8dca  gcc/config/aarch64/aarch64-passes.def
! 4171b9d0f75f79b3c93ebd90a570349b  gcc/config/aarch64/aarch64-protos.h
! be2d39d69b16e211235b01445aa8434d  gcc/config/aarch64/aarch64-simd-builtin-types.def
! 605913e6bba64efb989549a141209408  gcc/config/aarch64/aarch64-simd-builtins.def
! b8a92fbfee2db55bdd4f875b88f99882  gcc/config/aarch64/aarch64-simd.md
! 89b6e3bb922a7ecffb1ea41a6096a245  gcc/config/aarch64/aarch64-speculation.cc
! 1dfc36ff708ed17d15151c526f798cfa  gcc/config/aarch64/aarch64-sve-builtins-base.cc
! 5d4f0cd0807c7b852603326ad3b0b5ac  gcc/config/aarch64/aarch64-sve-builtins-base.def
! cbf190821c63dfc5a59e6ff4f682d34e  gcc/config/aarch64/aarch64-sve-builtins-base.h
! d2457037123414759e6ef743d9c63a7a  gcc/config/aarch64/aarch64-sve-builtins-functions.h
! 11df915ce043c8d922d3f026e07f7ab6  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
! d53d0fbc6526d523bedefd90ee66c697  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
! 968b189490f5273319fde73f6ad25c65  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
! 2d5340bb94a493478cab1985c1a09161  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
! 9a1fe6850cb86e9827354606ff929415  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
! ffdbdf4a6b513a34df384566a88e5b7a  gcc/config/aarch64/aarch64-sve-builtins.cc
! 383ed610f544cbe7d2313216b980674d  gcc/config/aarch64/aarch64-sve-builtins.def
! 85b90f18099c71fc34e444232db3299e  gcc/config/aarch64/aarch64-sve-builtins.h
! 5557f429e66cff2588408d878ec01b10  gcc/config/aarch64/aarch64-sve.md
! 4a8e12ce42731642b5f6346e6f2509b5  gcc/config/aarch64/aarch64-sve2.md
! 60c48990ae1c8c80a92dd2c05db80703  gcc/config/aarch64/aarch64-tune.md
! 3320efe9e8c3f43f0f10073f07d479e6  gcc/config/aarch64/aarch64-tuning-flags.def
! 4f60050851035039851c9bded03b452d  gcc/config/aarch64/aarch64-vxworks.h
! ca0f9b27bc1449780b513392b14e4f9d  gcc/config/aarch64/aarch64.cc
! f9978e99472d6e5f36e00146941e3e39  gcc/config/aarch64/aarch64.h
! 06097ed2c300f7c3a7a0b9501fe19cb4  gcc/config/aarch64/aarch64.md
! 3d8b1c6373873351739af54d209f8abe  gcc/config/aarch64/aarch64.opt
! 8f345db5d05cabae879ae79759e771d9  gcc/config/aarch64/arm_acle.h
! 8c46e4dc6d25951568fbb758738a675e  gcc/config/aarch64/arm_bf16.h
! b041e1c91c2a57f1b07188bd82b07c88  gcc/config/aarch64/arm_fp16.h
! 14cc63c6b8c265d0279b0dd2a525ad94  gcc/config/aarch64/arm_neon.h
! 2f349b1cdfd65e5c3ea7c5a81e9eddd6  gcc/config/aarch64/arm_sve.h
! 120845fdc8adead6576399f154adb9f9  gcc/config/aarch64/atomics.md
! a779240a611702aa33ca956ba324bc48  gcc/config/aarch64/biarchilp32.h
! 1e5237134158092e78d4e5ea4ff337bc  gcc/config/aarch64/biarchlp64.h
! 8dad64b7a0a60974bb343bd58aa0b3de  gcc/config/aarch64/check-sve-md.awk
! 3107ef644b29d4dc23c0c2d52e6edb80  gcc/config/aarch64/constraints.md
! 73496431779184a69193ef62053601f1  gcc/config/aarch64/cortex-a57-fma-steering.cc
! 91e821bb10d1ed5d78384ccc13b46243  gcc/config/aarch64/driver-aarch64.cc
! 4b0eb2a47900a60f2007f5dc1c8c6a2f  gcc/config/aarch64/falkor-tag-collision-avoidance.cc
! 5bb4a2c73d2ffd2540325830d9791d98  gcc/config/aarch64/falkor.md
! 96fbac352065a05467f9d3b2f3654940  gcc/config/aarch64/fractional-cost.h
! 9aa9cbf52d3975e3e11ff0152e1430ee  gcc/config/aarch64/geniterators.sh
! c5b65803ffe39ccd4b441618ce74971c  gcc/config/aarch64/gentune.sh
! 86eaf33edeb885c2c9ae2a9825879e59  gcc/config/aarch64/host-aarch64-darwin.cc
! 10e67b7220f39f6169264acf51acbe7c  gcc/config/aarch64/iterators.md
! 962d936dedd891ed2d66240d3afad507  gcc/config/aarch64/predicates.md
! 7973f7652f6c3d5b279e949d43cf87ae  gcc/config/aarch64/rtems.h
! 539a63ae970b4d407ca6785b9ea15eff  gcc/config/aarch64/saphira.md
! 757a6d99e51fa6e89ad81781a4975878  gcc/config/aarch64/t-aarch64
! 30fa068e63dc1e7599fc11abd5a96272  gcc/config/aarch64/t-aarch64-freebsd
! e144bd589569c8966ad6cf6baab314a3  gcc/config/aarch64/t-aarch64-linux
! 30fa068e63dc1e7599fc11abd5a96272  gcc/config/aarch64/t-aarch64-netbsd
! 8b8c2774a4a38c7a4eab423e87136b10  gcc/config/aarch64/t-aarch64-vxworks
! 3d9df80ab245112c9ba2d17a77a1ec53  gcc/config/aarch64/thunderx.md
! 43a39ee8549d23a6dba43ea86ce2f14f  gcc/config/aarch64/thunderx2t99.md
! 981fe6fb7ac21a5c1a1843cd838ce169  gcc/config/aarch64/thunderx3t110.md
! 571b7d13a766f78100d5fb5d0e9f9c06  gcc/config/aarch64/tsv110.md
! 88acf4a83af801cf69b1a23964f4c67f  gcc/config/aarch64/x-aarch64
! a07ee362a4961e9d41cb0ab83553de74  gcc/config/aarch64/x-darwin
! 9857ce0f95eda3ad2548d3c99d7db2b0  gcc/config/alpha/alpha-modes.def
! 85c03ec553f163234803a92cef295052  gcc/config/alpha/alpha-passes.def
! 61732a4e1c20873f24a49780397ac80f  gcc/config/alpha/alpha-protos.h
! 7777ef03ebdc18c9cd86d01e473839e7  gcc/config/alpha/alpha.cc
! 05c0209aea53a4b5fe54f1962ba99c45  gcc/config/alpha/alpha.h
! 9db29f7c69d016b0a51cd6e4de9dff8c  gcc/config/alpha/alpha.md
! bf0393dd31f6ef36bef17dc70498bb0d  gcc/config/alpha/alpha.opt
! 7181a3078a97bc9cabc46f9e25dcaef5  gcc/config/alpha/constraints.md
! 201f3f214a1b283e6a27afe845fad351  gcc/config/alpha/driver-alpha.cc
! 7b2f7b1ec2d2b742979f48f3a8c0a63e  gcc/config/alpha/elf.h
! 10364c8bfc3e1be17c4006b0afcdf86a  gcc/config/alpha/elf.opt
! d4ef838f0624230fcf897d1ed6d3ce03  gcc/config/alpha/ev4.md
! dff1203be38a81b4d564a4ba0d7ae189  gcc/config/alpha/ev5.md
! 6c123c337abff7ea86c3c348dcc89daa  gcc/config/alpha/ev6.md
! 7262d3d67f1d22a14797827b524ea49a  gcc/config/alpha/linux-elf.h
! 65dd7e0bfa3689e29c1cecd91b4dd66a  gcc/config/alpha/linux.h
! ad5587c110ef90781021c6360b31c776  gcc/config/alpha/netbsd.h
! 77a3fc2b1e28ce730e1ced24f1bdb271  gcc/config/alpha/openbsd.h
! 1d221b77ff63d78d1d35402a67b843af  gcc/config/alpha/predicates.md
! 43dbeb672133ec981702c9c78e214f0f  gcc/config/alpha/sync.md
! 9fe5403690d5ca38afc9634eb755cf65  gcc/config/alpha/t-alpha
  6e8dd648b9668f18b1dfd9f1203c9885  gcc/config/alpha/t-linux
! 35f462892773e262594655604793ed23  gcc/config/alpha/t-vms
! be30f2016b450abfaeb818f07bb75fe6  gcc/config/alpha/vms.h
! b3c50e1f46a9bdacf84333c01cb8ec66  gcc/config/alpha/x-alpha
! f45a273c82f039f5caa1cd41410b0fed  gcc/config/arc/arc-arch.h
! b783a49ee646c798b3398e2235ae263f  gcc/config/arc/arc-arches.def
! 4981485617f1c580069c852c13b01957  gcc/config/arc/arc-c.cc
! f076b474796530a5e46213a5e6388924  gcc/config/arc/arc-c.def
! bd838d5b3dfcd1f0722b4e7fdf2bc6b8  gcc/config/arc/arc-cpus.def
! 3ced12987f75b89ade04d9ca58b9e272  gcc/config/arc/arc-modes.def
! 929352efd692b15953649c436dca4252  gcc/config/arc/arc-options.def
! fc9533ceaef28718446dd1fd89278665  gcc/config/arc/arc-opts.h
! 2b7ca67ca692e647e9a7f08bdb5d50e1  gcc/config/arc/arc-passes.def
! 4e5d6e784bf138b8fa769611abaea1ff  gcc/config/arc/arc-protos.h
! 9435a8a56c2b8de425cb9b6b1ae61478  gcc/config/arc/arc-simd.h
! bd29d5a070cb26c8920b7f49cd90d6dd  gcc/config/arc/arc-tables.opt
! c67f411f9a7160d1c362062fbdf35b78  gcc/config/arc/arc.cc
! 1ca0cc900aedbff5a88d112d4108e808  gcc/config/arc/arc.h
! 5a3662a473405b6e658619e9079edfdc  gcc/config/arc/arc.md
! 600872a4c784cc2ada54ca5abeab4797  gcc/config/arc/arc.opt
! 0f1c8332e1154eeabad29f456fe30e81  gcc/config/arc/arc600.md
! b6131ba531b20606acd8d0ec4095e6cb  gcc/config/arc/arc700.md
! 9a596b66793f8599c3f1fd3fc3255920  gcc/config/arc/arcEM.md
! 8163d3a59ade3360658217445b12d903  gcc/config/arc/arcHS.md
! e9a3e763aae1374c078331a1f4b1ec67  gcc/config/arc/arcHS4x.md
! f00a483c20150d6a73d4ae308fa01755  gcc/config/arc/atomic.md
! 55c2316ab909a0f0996169ed254b6738  gcc/config/arc/big.h
! d2c0351ce70a7aeab21276428c04ee27  gcc/config/arc/builtins.def
! 99abbf3b5a8cb3cc4be17ab12e4e5523  gcc/config/arc/constraints.md
! 7a31afa39448a4dc6716d2b585efc6da  gcc/config/arc/driver-arc.cc
! bdda4ff31d002d7d64bb38ba9617d6fc  gcc/config/arc/elf.h
  255d583e6d23d9cbed1614263d159a1b  gcc/config/arc/fpu.md
! fe67ba59750f2d6e2f9be8c86f7a0c26  gcc/config/arc/fpx.md
! 2626f5cb224084e0b120e595af99742e  gcc/config/arc/genmultilib.awk
! e18834b1d1698a2e3203ea1cdafd435e  gcc/config/arc/genoptions.awk
! 108eb7f3958802b251641029c2874672  gcc/config/arc/linux.h
! 71bda2dd008a3b33927aae5b36c09071  gcc/config/arc/predicates.md
! 19037669a9abd6e02eca1acd7f53aded  gcc/config/arc/simdext.md
! 62dd6f419f35b272347c511d3250f845  gcc/config/arc/t-arc
! bbb3f15c7ac8f5a326b36502d4a2b931  gcc/config/arc/t-multilib
! 3eb66143846fb2dab71a8c863d42f8c9  gcc/config/arc/t-multilib-linux
! a3abe95e921378f448412d6e65f96560  gcc/config/arm/README-interworking
! afc3b989a3b35a84eedcdbaffcbf7597  gcc/config/arm/aarch-common-protos.h
! 86ad934fe071d60aa0944c4e5629ee45  gcc/config/arm/aarch-common.cc
! 561912196221bf550ecb2d25ad60cf91  gcc/config/arm/aarch-cost-tables.h
! fad8b46a6005f06698eb532c1291d5d1  gcc/config/arm/aout.h
! 6126555e47e65862b1299f227e550eff  gcc/config/arm/arm-builtins.cc
! cf18f061428a5d02bf8f40090add93ff  gcc/config/arm/arm-builtins.h
! c71241cda48d4ff0a62a3790ba45c5fc  gcc/config/arm/arm-c.cc
! 492769dadd3b1200d72feb224819263f  gcc/config/arm/arm-cpus.in
! 863e559ff44d4225c22ded02bd4bb744  gcc/config/arm/arm-d.cc
! 9e1faac693049636d6c78b354d1c0260  gcc/config/arm/arm-fixed.md
! 2e1b91fd27ab63791d12e04a4ec05a8e  gcc/config/arm/arm-flags.h
! 66f33cb015e50febf8845b387383937c  gcc/config/arm/arm-generic.md
! f8939150ad1e5a6abc1909cfce894df0  gcc/config/arm/arm-ldmstm.ml
! 0d5c132b7b600a4a6425890c1bb7909b  gcc/config/arm/arm-modes.def
! 7c2aea615088bbdb534938361dac9bbe  gcc/config/arm/arm-mve-builtins.cc
! 1bf1dc03515ee84180323fdec57b9705  gcc/config/arm/arm-mve-builtins.def
! f9fcb84ac4cb22448555a4d17e657837  gcc/config/arm/arm-mve-builtins.h
! 65266118574d7fe565d520b23ec3e15f  gcc/config/arm/arm-opts.h
! e5088fd77c4179ab5157393fa6955e87  gcc/config/arm/arm-protos.h
! e6d8d15841677273be28f2c17f0334d0  gcc/config/arm/arm-simd-builtin-types.def
! 5760ab040aa998c3ead41b255c932c2e  gcc/config/arm/arm-tables.opt
! 92cd8a4833cea94a90965e7682f7a34c  gcc/config/arm/arm-tune.md
! df76b9dc833e95b76067b46c19170b51  gcc/config/arm/arm.cc
! a74495141de646abdb9bb70e4e293aea  gcc/config/arm/arm.h
! 3eba8a70b188a11cea7c47566c17ba74  gcc/config/arm/arm.md
! ad6a9cfbbef5a63b153aea7b4ddcea81  gcc/config/arm/arm.opt
! 2eea8eb5a626c35bdb3b9bcaa1f235cb  gcc/config/arm/arm1020e.md
! 52e6ca4bd01cf86b7cb20e854aec637a  gcc/config/arm/arm1026ejs.md
! 0e7e519675dd147e77fdb69a866ca15b  gcc/config/arm/arm1136jfs.md
! 88d68729caa81a43bd61a3832d585dee  gcc/config/arm/arm926ejs.md
! 3eb110fd32cd19a0e831ed7b664f7506  gcc/config/arm/arm_acle.h
! a331837418095c073b67fcb9cdf6ac52  gcc/config/arm/arm_acle_builtins.def
! f82fe1ddbe3db8a800ef98ecafa6bd46  gcc/config/arm/arm_bf16.h
! 602c1e18596173d2fc37493f35573ad4  gcc/config/arm/arm_cde.h
! fc5cc271a5697d0016cd6c64a67c71db  gcc/config/arm/arm_cde_builtins.def
! 2d8f46acb748e5350c359a70c09571a8  gcc/config/arm/arm_cmse.h
! c4cb23cd7b0bb7e50703761c71c47806  gcc/config/arm/arm_fp16.h
! 190b68b5fcda4c346a4ca41f853b38ea  gcc/config/arm/arm_mve.h
! 4d52cc595e40683c2116c1c9505f3c21  gcc/config/arm/arm_mve_builtins.def
! 675c2bc4d01144ddb0d3ca1324746a54  gcc/config/arm/arm_mve_types.h
! 46cdfe229792555c51a5405c7d7daaf3  gcc/config/arm/arm_neon.h
! 1c21874aa25780518de958786ec1fc00  gcc/config/arm/arm_neon_builtins.def
! b713bc09f037a0f4cd254202dd76a14b  gcc/config/arm/arm_vfp_builtins.def
! 9e78fb9227c3d2b30c14089309f6d8af  gcc/config/arm/bpabi.h
! 82ebffe80579478445adfec7e1cfab29  gcc/config/arm/common.md
! bb53e3991a07c64de306a6524a9a2c48  gcc/config/arm/constraints.md
! 6586aa5e34ca29411e927c3fc6560313  gcc/config/arm/cortex-a15-neon.md
! a16eee7162f182645beb92f387325e33  gcc/config/arm/cortex-a15.md
! 6dc9c5189db0cf6db32e63018f40b702  gcc/config/arm/cortex-a17-neon.md
! 79057c0cdbaf4d89cdf6bd801c18b1c2  gcc/config/arm/cortex-a17.md
! af3801087677e741708ede19c0436718  gcc/config/arm/cortex-a5.md
! 303067576b59b94d4e19ae5a35ee7fc5  gcc/config/arm/cortex-a53.md
! 5ed1506a381e5e0a7439cee66b9a8fd2  gcc/config/arm/cortex-a57.md
! a0c795781e116e90d6b90a0185073270  gcc/config/arm/cortex-a7.md
! 7df28572dddba3208ca73afdf1ac8fd7  gcc/config/arm/cortex-a8-neon.md
! 95ec456bdda1056756fd92e1740ef1d3  gcc/config/arm/cortex-a8.md
! 2e0acdcbb6098e4f5d74ea940285938a  gcc/config/arm/cortex-a9-neon.md
! f010482a44b3210a79503c5fd88f9128  gcc/config/arm/cortex-a9.md
! 2b14c5e718bcb44b54bbc5e9f64a6f86  gcc/config/arm/cortex-m4-fpu.md
! 3979c582cc7b1e49a04cece961e7cb57  gcc/config/arm/cortex-m4.md
! b939c2711294bdbbeb4a6c9f99065f1f  gcc/config/arm/cortex-m7.md
! 2d8a18f3656b15e013d942bc5e9909c6  gcc/config/arm/cortex-r4.md
! 3d61451de0610785e77ec46632257914  gcc/config/arm/cortex-r4f.md
! 5c2d844c88ade0906290eaa788255672  gcc/config/arm/crypto.def
! 78235b7d74aab7fff6e350b08e3a0bd8  gcc/config/arm/crypto.md
! 5267b102ac87652fea088120d975a0a0  gcc/config/arm/driver-arm.cc
! 035685113b44932597d9d713cf9ea3f8  gcc/config/arm/elf.h
! 26bcf38e9737d53262f2fe663521a312  gcc/config/arm/exynos-m1.md
! 29242d28f65285ef9af952812e483563  gcc/config/arm/fa526.md
! d5ce12283f8696068be65cc08173e1b5  gcc/config/arm/fa606te.md
! 75ebe84e8d85a486a43a7242a337cce6  gcc/config/arm/fa626te.md
! 1ce2767b09409ae5759da51630e1b555  gcc/config/arm/fa726te.md
! c2a37535f7537f0a3d2244cd3a9aced2  gcc/config/arm/fmp626.md
! 67b3ee0061e519355f6aa2b0ad0784f4  gcc/config/arm/freebsd.h
! 057650ebaec5b7c4c9610d9468700454  gcc/config/arm/fuchsia-elf.h
! 540f2a1211ccdedda21a62baa315569d  gcc/config/arm/iterators.md
! 2fd471d291624fb34dd0ba675ec84cc5  gcc/config/arm/iwmmxt.md
! 2eece61e269478aae959e6e5bb3d42cc  gcc/config/arm/iwmmxt2.md
! e099fc5056b286828db365609ce8e01a  gcc/config/arm/ldmstm.md
! 5bdb1a33b5ab4d7629505d5297019543  gcc/config/arm/ldrdstrd.md
! 3876beffe07c6e729e263b01a2aba9f5  gcc/config/arm/linux-eabi.h
! 5ec12d81474a8b3168a96550721633b4  gcc/config/arm/linux-elf.h
! b50c07130eb3ca41d10c14b178702537  gcc/config/arm/linux-gas.h
! 412a503ee16d05e1867a26c7d731c031  gcc/config/arm/marvell-f-iwmmxt.md
! eca77d0ebe850d280b635d61d19d0052  gcc/config/arm/marvell-pj4.md
! 37e6b29bad3412ebd9262122316c26f8  gcc/config/arm/mmintrin.h
! fa044b3d335edef65fa08b3acf7e0561  gcc/config/arm/mve.md
! cea37ecbae4aec8ae25bcd0171dfd308  gcc/config/arm/neon.md
! 9d7507b760b746eedf6516e465f78934  gcc/config/arm/netbsd-eabi.h
! 2acba2050567d91862751ac4509442fc  gcc/config/arm/netbsd-elf.h
! 778cf6a75ff4abe8d012c19053effcd5  gcc/config/arm/parsecpu.awk
! fde36d4a15d3485138f27ad85bca6686  gcc/config/arm/predicates.md
! 567d8a0fb6e1fd78d4e4653f0021a9a0  gcc/config/arm/rtems.h
! 196b5a000d1c792979e929fcf7f24a84  gcc/config/arm/semi.h
! 83f6bb89bd00ca7c4381bd036c0ca6ba  gcc/config/arm/symbian.h
! 61add320585d1d0fac9a392fe22871c4  gcc/config/arm/sync.md
! 79157aca718d3c9074dab6400794631a  gcc/config/arm/t-aprofile
! a15399ac58f6f1adb30676707635988f  gcc/config/arm/t-arm
! d1174debd12a6ea90a6969db07ef027f  gcc/config/arm/t-arm-elf
  4dc427c456af5e56b1ac39bda8969af6  gcc/config/arm/t-bpabi
! 78e9c5fb319e9f6e571425172cd27960  gcc/config/arm/t-fuchsia
  e3950ec6bd159734835f8f8fb143efc6  gcc/config/arm/t-linux-androideabi
! c6730c9413632fc1eb99ce60e0368c36  gcc/config/arm/t-linux-eabi
! 837b815277b735b021879f4ef6d0e668  gcc/config/arm/t-multilib
! 9eed0f8d525d0d49b3dad11681960aba  gcc/config/arm/t-phoenix
! 495dfbb24c10e5e0d4869baad4d0ccc5  gcc/config/arm/t-rmprofile
  c434e99f4fc47fd32ffab26fbeea8464  gcc/config/arm/t-rtems
! 2973e9386d5d4d6435a87b50c0b52a7d  gcc/config/arm/t-symbian
! 1c884e103715aee920df4afd873d5b0d  gcc/config/arm/t-vxworks
! 2421d4e2888b7a94f6d88b32dcb8a181  gcc/config/arm/thumb1.md
! 20cdea0918875d00f8843fff50dba75c  gcc/config/arm/thumb2.md
! e714c23060e5798d18921aea7f1d2428  gcc/config/arm/types.md
! 49aaa2a24703d560a1ddc6b9d404559b  gcc/config/arm/uclinux-eabi.h
! df9b3fed001223cd70a167527c8bf05c  gcc/config/arm/uclinux-elf.h
! 3030dea0d248eb6b532794cfd859e7a7  gcc/config/arm/uclinuxfdpiceabi.h
! 80a116f15f21f7abef8ef372d4eeb59d  gcc/config/arm/unknown-elf.h
! 53a7b4e744d2fffe93ab9bf627338c3d  gcc/config/arm/unspecs.md
! e85633e59cdd313b077f2bd102bf65d2  gcc/config/arm/vec-common.md
! 7de39f682715329a3b33858ebba386c9  gcc/config/arm/vfp.md
! 95def474af7af4de37dc84d6fc296632  gcc/config/arm/vfp11.md
! df81f23fd0210a50276836db87675296  gcc/config/arm/vxworks.h
! 267f32e117cb09202d6198b83964ee77  gcc/config/arm/vxworks.opt
! 8bb1a840fb87b138c620682ccad6aee4  gcc/config/arm/x-arm
! 2d1f84525fa04ec8662e53f9e39d1134  gcc/config/arm/xgene1.md
! 36f89cb38dc871cf3cdcd051075d114f  gcc/config/avr/avr-arch.h
! 2f32979b314fdfa213d04509e193eea9  gcc/config/avr/avr-c.cc
! 480668763d17f2b5167991c067befc49  gcc/config/avr/avr-devices.cc
! a8e967b831bb88067a50ebe1aaa9000e  gcc/config/avr/avr-dimode.md
! f8da9c6ca3a4de8f25b05bad4aab4103  gcc/config/avr/avr-fixed.md
! 0a144448d4f6070a4b9fcace87d0201f  gcc/config/avr/avr-log.cc
! 58b191ddfbc4f4f3b2eef149e125eb82  gcc/config/avr/avr-mcus.def
! 480a983b45cb16a07fb0c86c70ec186f  gcc/config/avr/avr-modes.def
! b2592117f31aced3aafa07535e6a04f0  gcc/config/avr/avr-passes.def
! 37ff17dbaf245f390ea36c7f29a7a0bf  gcc/config/avr/avr-protos.h
! 164ff6dd3b6f3a910fed5a48242842d5  gcc/config/avr/avr-stdint.h
! 3a0e450cacf4210bd66c3cb58b3937b2  gcc/config/avr/avr.cc
! 647d1e4da991324cf2eaa9b93c7586b3  gcc/config/avr/avr.h
! 863c53d8ecc4e08370b4bdaab6e94edb  gcc/config/avr/avr.md
! 13a7e96bc1d8ac7544d5f185ff8e8e8a  gcc/config/avr/avr.opt
! eaed73ea14d92bf236ad5c9187507c16  gcc/config/avr/avrlibc.h
! 9f9294792b117b0797422b0f0fd8db86  gcc/config/avr/builtins.def
! cf2f538d0f7523461b7a22551657d622  gcc/config/avr/constraints.md
! 519d174e61a3b68e3bd0433b39d3da66  gcc/config/avr/driver-avr.cc
! bec6d9236523353c7e7397b804a6437a  gcc/config/avr/elf.h
! 994f8b1234a164d23683bad0667c5f61  gcc/config/avr/gen-avr-mmcu-specs.cc
! e24c8d6e0f93587aab14772ff2f948c0  gcc/config/avr/gen-avr-mmcu-texi.cc
! 9aacb3efacdfbea2504d9362807594fd  gcc/config/avr/genmultilib.awk
! bdd0de08d8ef9281ea68799bf0dc4666  gcc/config/avr/predicates.md
! cac8c94973c07d9bc0bdb4c2508bd82b  gcc/config/avr/specs.h
! 0c00177746f6857c43084485cb9756eb  gcc/config/avr/stdfix.h
! 0d13497f8f07c60ebbb52a5beaecfede  gcc/config/avr/t-avr
! 68dd53362e51b93e3df7834e74bbe642  gcc/config/bfin/bfin-modes.def
! bccbf7092436e3e34820b83133d65662  gcc/config/bfin/bfin-opts.h
! d7ae0a3f2a9ecdaa07d95febdc9d0d77  gcc/config/bfin/bfin-protos.h
! 0588273046915f4509cb86a1b9a99e15  gcc/config/bfin/bfin.cc
! 0a8faf385eb42e8482637d3f66226924  gcc/config/bfin/bfin.h
! bdbebaee1621d9920ab971e5208c7c11  gcc/config/bfin/bfin.md
! 7bd61c12394cd54de8d17df299d4f146  gcc/config/bfin/bfin.opt
! 783e6fc4fb52a6967bfaec7e04739e92  gcc/config/bfin/constraints.md
! 8af17cb35dd1a99983abbd563ee86612  gcc/config/bfin/elf.h
! 3db762cf8f2344143665f637c89762b8  gcc/config/bfin/linux.h
! 77bddaf338ffb46b70229b5527da4572  gcc/config/bfin/predicates.md
! cb839f1ea99225ef5ba24ff4aaf3be5a  gcc/config/bfin/print-sysroot-suffix.sh
! 3b2551c72ae83c225edf61088c95f4ff  gcc/config/bfin/rtems.h
! 5cd8760f9a746f9ebed4294d4462d3b4  gcc/config/bfin/sync.md
! 0f78c50e01b8dff76c4d58e6b2403e81  gcc/config/bfin/t-bfin-elf
! 341bacd65fd66f79dee69813619d6d61  gcc/config/bfin/t-bfin-linux
! a94ed2f004c3740cf9fd8d955294d32a  gcc/config/bfin/t-bfin-uclinux
  6f4817f759fcac5ac27233ee451780a6  gcc/config/bfin/t-rtems
! 497949350ae9b4a61ac6adac318b4e7f  gcc/config/bfin/uclinux.h
! aa24b7afbcd75bd4dc6d4ad576ebf804  gcc/config/bpf/bpf-helpers.h
! 8c938c13f8a38816b68e92490ec1851a  gcc/config/bpf/bpf-opts.h
! ee1ef97c91b06886a2797b0359881a39  gcc/config/bpf/bpf-passes.def
! 66694c610d32f257ebc50abbff131a56  gcc/config/bpf/bpf-protos.h
! 9047c5372e5bb4384d6c49c927ad64c2  gcc/config/bpf/bpf.cc
! 8523b199c43166c7d63c20ccce258684  gcc/config/bpf/bpf.h
! 2eb464ebd948d47392d9f97f6d0b0263  gcc/config/bpf/bpf.md
! 38b4454115b68a2a92634d50a12b73c5  gcc/config/bpf/bpf.opt
! dc94cca585b162fe0498472b5642b4c5  gcc/config/bpf/constraints.md
! 418257021895f7856402bb9b4a5dcd65  gcc/config/bpf/coreout.cc
! 59aab81a1aef0934a4dbfba7d751484c  gcc/config/bpf/coreout.h
! a7e3cb5a8876ad15a3282423f6328ae6  gcc/config/bpf/predicates.md
! 290c61502f2095fde313896f88d95081  gcc/config/bpf/t-bpf
! ab4629a4f5b82360f1ed66239a9f0b85  gcc/config/c6x/c6x-isas.def
! 33ab80f8116396cde19a05772a3c59eb  gcc/config/c6x/c6x-modes.def
! 4421ec84ac118a19c1c9c62d785adf4f  gcc/config/c6x/c6x-mult.md
! 073c38ffab73988adcec4f871da793df  gcc/config/c6x/c6x-mult.md.in
! 687430af26740a504df76747e5b50adf  gcc/config/c6x/c6x-opts.h
! e7959077a95d960d0d1637cdc55b60a2  gcc/config/c6x/c6x-protos.h
! f2aabe6f1c206badf3c41038822ddc6b  gcc/config/c6x/c6x-sched.md
! d2b5e3bfc313e01f22fd1c6da1e3f600  gcc/config/c6x/c6x-sched.md.in
! d87eef1d4c742a19c6ebcf8aabcfa1af  gcc/config/c6x/c6x-tables.opt
! d7ce3476b98c5eb82debe077deec0b4c  gcc/config/c6x/c6x.cc
! f74ab3bfc19960eb5c34c2fc10e62e7c  gcc/config/c6x/c6x.h
! 0d95a420ddd260afa7dfdc79014fc904  gcc/config/c6x/c6x.md
! 233973862cd63e9f8025ed697c82b6e5  gcc/config/c6x/c6x.opt
! dbe3fe8f7be60a24f4edec298790b078  gcc/config/c6x/c6x_intrinsics.h
! 0323605ca84132cdf4013c5ec2d0d1e4  gcc/config/c6x/constraints.md
! 8efa29807e119e18806aad1876e31042  gcc/config/c6x/elf-common.h
! b5022d083f67430759267e47c1b97d88  gcc/config/c6x/elf.h
! 38deccff2cff79cb58b47b2361cb4b93  gcc/config/c6x/genmult.sh
! 8289ab2be9534463028a0c33e177c0a8  gcc/config/c6x/genopt.sh
! 7d9b7854dc9e597f80fd472981b7a01d  gcc/config/c6x/gensched.sh
! 9a17f6980ad74061d90e0f8afb935e49  gcc/config/c6x/predicates.md
! edbd04b10944b0d018bbcceae192ecf7  gcc/config/c6x/sync.md
! 64975e4b89676f9b4ba7335710437dd1  gcc/config/c6x/t-c6x
! 2df40c7e173c1ca21d0c0ad1a9c672dd  gcc/config/c6x/t-c6x-elf
  428034a210600b6b423dfadb06636e03  gcc/config/c6x/t-c6x-uclinux
! 006a20307f55e7905e696471f9bc8648  gcc/config/c6x/uclinux-elf.h
! 251aabec13f52eca7640175ce78071fe  gcc/config/cr16/constraints.md
! 052c53549c50918883ba2053a61a8c72  gcc/config/cr16/cr16-protos.h
! 5c867fd6ac26791ce9a0700a8e32daec  gcc/config/cr16/cr16.cc
! 6a43bf10fe7a2738cd477c8941dc5bb7  gcc/config/cr16/cr16.h
! d61c528834fc7d6eea8d3029e53d1113  gcc/config/cr16/cr16.md
! 8cf3ade39992adf707d837a226f4d1ae  gcc/config/cr16/cr16.opt
! 8c38fe042c97552dcc363063f09e0bb4  gcc/config/cr16/predicates.md
! 187bec0101b194b2dd4475e51841de70  gcc/config/cr16/t-cr16
! 9d30c4345c8058faec28b4c17548c952  gcc/config/cris/constraints.md
! 9a1087f0ac96954064bf010f3f0c1ac3  gcc/config/cris/cris-modes.def
! 3619a44102142e10dc0799d89057f177  gcc/config/cris/cris-passes.def
! f131d3f609c309c9277824e3dee4867d  gcc/config/cris/cris-protos.h
! 1670e4698247200d86349dd18e476c95  gcc/config/cris/cris.cc
! f60ff2b8ef89a371b8e637f48fc3cb76  gcc/config/cris/cris.h
! 7cabf542432ca9c493f9dde54806cff9  gcc/config/cris/cris.md
! d8f9df0ad1573867e24d727be0311613  gcc/config/cris/cris.opt
! 65335198db400558feec5f2cd2b757b9  gcc/config/cris/elf.opt
! 08135364adf9e700dab1b427f3c12a3b  gcc/config/cris/predicates.md
! 6a926e765e16e83d05eec0cd07690565  gcc/config/cris/sync.md
! 2bfb4b8008fa21636f62b1d790b71452  gcc/config/cris/t-cris
! 187e6196ef2eff032d6eef2415dc3ecb  gcc/config/cris/t-elfmulti
! 769c728913fbbcc0231f024bfa33bb0c  gcc/config/csky/constraints.md
! 19f02e8d229543bd7e6222e68ede2fa3  gcc/config/csky/csky-elf.h
! 0cc1a2cb395a136e70652bfc948bdc90  gcc/config/csky/csky-linux-elf.h
! 96ecbda882d31804fd320042b1d970df  gcc/config/csky/csky-modes.def
! 470e4a0e8b8eca527e63ce25fa531a18  gcc/config/csky/csky-protos.h
! ebecbabacdbfabbd4d9660e143aa608b  gcc/config/csky/csky.cc
! ebe9eeafa412f30de039c43d0142ea5c  gcc/config/csky/csky.h
! 17bda973dbfef4d1b3a4a7a9b82d41bc  gcc/config/csky/csky.md
! 2aee0785afd6af8b9bb45845f6fba1aa  gcc/config/csky/csky.opt
! a35d297639a721efc246a113ed914668  gcc/config/csky/csky_cores.def
! 9e6f277a017242e6c642bea60ede0065  gcc/config/csky/csky_genopt.sh
! 89764e17f8c6b914cfa968d6af2b295e  gcc/config/csky/csky_insn_dsp.md
! d4b0e43bdf4cf1e220f9ace9c9fc6635  gcc/config/csky/csky_insn_fpu.md
! 3b32191e49a8ac794ad0677264ed7654  gcc/config/csky/csky_insn_fpuv2.md
! ec42b2e0a5034d95272c60f84d61a3d6  gcc/config/csky/csky_insn_fpuv3.md
! 986d1eaa60d89b101363b05d0faf8635  gcc/config/csky/csky_isa.def
! 2e1848d4513224e036ad92532a6ef401  gcc/config/csky/csky_isa.h
! f66737cc288f574cc3e42605e01ad014  gcc/config/csky/csky_opts.h
! 75c097e9d36bc1ac3797f7459ec55a64  gcc/config/csky/csky_pipeline_ck801.md
! 681e21c5e19121565a3e2dc1b4e71b5f  gcc/config/csky/csky_pipeline_ck802.md
! 3b769d5b247e37cb356754a158545d44  gcc/config/csky/csky_pipeline_ck803.md
! 1a3afb2f1ebd9c1ea3830c8ac5bc64b6  gcc/config/csky/csky_pipeline_ck810.md
! e7879265d13d182c067ab4ff7285742d  gcc/config/csky/csky_tables.opt
! 31bc59aa147f643926978d1aa777a1b6  gcc/config/csky/predicates.md
! b0d2adcd9439a44dc07ef8f9982ef205  gcc/config/csky/t-csky
! f23ad2cadbfd4e0d9800d7231be589b7  gcc/config/csky/t-csky-elf
! 087cc4a34dc1390ce208b02f74c9acd1  gcc/config/csky/t-csky-linux
! d5ce3677e3d67714eef72f9cba9c824f  gcc/config/darwin-c.cc
! 111f6d2cef3e23a9868db19144a5eaeb  gcc/config/darwin-d.cc
! 6ba83fc3658208e199f69dcc8d155ab9  gcc/config/darwin-driver.cc
! f45abe10e3aa93ce43dc8cdba5640b58  gcc/config/darwin-f.cc
! 2f008666ac55a1275ad46737705557fc  gcc/config/darwin-ppc-ldouble-patch.def
! dd284730639b90f8e1b9409230c9dfc9  gcc/config/darwin-protos.h
! cb5bf7a5e59178a24f11676df7bd36ec  gcc/config/darwin-sections.def
! 6afc2ac3df5167a08a2ab5ff1e94577d  gcc/config/darwin.cc
! 5e8e40ec5d481b96467e3b3f25ba2b27  gcc/config/darwin.h
! 73a379c0bcbe698b48e59ff3d032707e  gcc/config/darwin.opt
! 3565bbd41b50b8b5d5ee9ea2a2f7418a  gcc/config/dbxcoff.h
! 6d89a3bd0a87690df3f4303c420c070f  gcc/config/dbxelf.h
! 362acdec0f55c89a1402846a3c6a8f6f  gcc/config/default-c.cc
! 4c9f59ac7d772ab2957cf1ec1711060b  gcc/config/default-d.cc
! 321c7b131ef0d6a3d341e18f563fab47  gcc/config/dragonfly-d.cc
! 0ee0aeac48e6c3492228d096d35ca676  gcc/config/dragonfly-stdint.h
! a36893760198b3140b0778c4e686a0ab  gcc/config/dragonfly.h
! ea387db97b71b5fb730e6fc7807f4e9d  gcc/config/dragonfly.opt
! 1077f784e8cdc84fc6e9c72d19524c73  gcc/config/elfos.h
! b79e997a3f2a7b44d9644fe18c11d65c  gcc/config/epiphany/constraints.md
! 2263a16bcf22863fcb5ad28dd791cbeb  gcc/config/epiphany/epiphany-modes.def
! 61da4626286e3dec119bda58e235c9d0  gcc/config/epiphany/epiphany-protos.h
! b067341ab65d3556db241244bc548f52  gcc/config/epiphany/epiphany-sched.md
! c82db60490f93c9c4518be4cc7b2b3f7  gcc/config/epiphany/epiphany.cc
! a96ffdc21848503d764b4c6090b94d8a  gcc/config/epiphany/epiphany.h
! b6fd47a3d091810a2a1ff0f4094c76ed  gcc/config/epiphany/epiphany.md
! b5487ca78a46fcbadf6526040d6ca8a9  gcc/config/epiphany/epiphany.opt
! fd60bfce062b6c359dadc049adbd98ab  gcc/config/epiphany/epiphany_intrinsics.h
! 2ffa12429ca5b027842a5db414be2480  gcc/config/epiphany/mode-switch-use.cc
! 0858a4f31d8383fd5fb608d696cf4aff  gcc/config/epiphany/predicates.md
! 5fbb53a1ddd0e29724e9f41cebe394eb  gcc/config/epiphany/resolve-sw-modes.cc
! ece4b9241236bf43585a065be68129d2  gcc/config/epiphany/rtems.h
! f55fcd75e496d40a9834bc068700407b  gcc/config/epiphany/t-epiphany
! 39a07477a2a4d2d1d095bfdcf012c9ae  gcc/config/flat.h
! ad54e7d71d588b85b091ac59ddb3ccca  gcc/config/fr30/constraints.md
! 0e0b177244891fb4f3d3ad5225875bab  gcc/config/fr30/fr30-protos.h
! 322d6d5f8a855215ddfeec4dedf1c2da  gcc/config/fr30/fr30.cc
! 2c01b56be985ab055557bd8e0bf6608d  gcc/config/fr30/fr30.h
! a8bb52c68d5ff6d8d6f4e824cc2887fc  gcc/config/fr30/fr30.md
! 05dd545759122b52d1673afd18a05116  gcc/config/fr30/fr30.opt
! fef57bdfcd54f9dfa859058c3312929b  gcc/config/fr30/predicates.md
! 9d7d445fabed50666865af464c6e12cd  gcc/config/freebsd-d.cc
! 3f1ffbb4c52de9bd495a6283ae18abb9  gcc/config/freebsd-nthr.h
! 6fbbe18c06386a866f4fda3a47fa95a0  gcc/config/freebsd-spec.h
! f1af6242fbeced63be659528fc126923  gcc/config/freebsd-stdint.h
! 773661a9c3a0ffc146cbe3dc006d137d  gcc/config/freebsd.h
! da976f16e44d0cfcc8634de5063c0549  gcc/config/freebsd.opt
! 6f2a84f5988def710be7e5ca30095881  gcc/config/frv/constraints.md
! 1216c55feca9e71350dc461aaccabee7  gcc/config/frv/frv-asm.h
! 6270130252c90454fcc728214af2da81  gcc/config/frv/frv-modes.def
! 1149835e7ba0297fec985d745b00ce2f  gcc/config/frv/frv-opts.h
! fa3c74923d58614233a0bd91bf2246be  gcc/config/frv/frv-protos.h
! 20e0c78f1db7e00c91706bdf5862a2e8  gcc/config/frv/frv.cc
! 4d743010f5e5823da4e7f114dc2b4a8b  gcc/config/frv/frv.h
! c0d13606155952a09de227b149d8b80e  gcc/config/frv/frv.md
! 56aaa5b42aa72f73e59020335330eab6  gcc/config/frv/frv.opt
! f73a5bbd6be837b4317441fc36258778  gcc/config/frv/linux.h
! 0d360153ffa36dbe85a4fd3083c0f1dc  gcc/config/frv/predicates.md
! 9d4bafb65b161778029cfaff02fdd869  gcc/config/frv/t-frv
! b124af981a7da0c397253e9a2b116d48  gcc/config/frv/t-linux
! 7eb370154a8e98d2c8727644cfdae0cc  gcc/config/ft32/constraints.md
! 5a8d82c00210a1eb06004e0fa2eaed0f  gcc/config/ft32/ft32-protos.h
! c20c678900fd30f58a1be6c1918992ae  gcc/config/ft32/ft32.cc
! 55deca0cf481df0a9b2152ca15be64d1  gcc/config/ft32/ft32.h
! cc79626f169d7aff503a135000e90e94  gcc/config/ft32/ft32.md
! f3e051d56f94b468e1b5fb52f231a5c8  gcc/config/ft32/ft32.opt
! ba1463419662bce8e9595eb003413b0e  gcc/config/ft32/predicates.md
! 74898d4f885ef48060ac76d0f163ced7  gcc/config/ft32/t-ft32
! dca2c7cfa93d27c2c9dea8aeb106a5ef  gcc/config/fuchsia.h
! d6844ace6a33edf9c0a4affef9b0f1fb  gcc/config/fused-madd.opt
! 290d5bc344d1575a34bc4b4a7540166b  gcc/config/g.opt
! 88a2248be6dd5fab8e5dcf5e136e62e9  gcc/config/gcn/constraints.md
! dd69772865a5cbb5522336344e56cd76  gcc/config/gcn/driver-gcn.cc
! 7c8ae44c35c05bdc787b678c2252a9d0  gcc/config/gcn/gcn-builtins.def
! 59a1f2ed51b24ba196d81ae2c5b678a0  gcc/config/gcn/gcn-hsa.h
! e5e4969cff9f1a94ae3b58eb83546818  gcc/config/gcn/gcn-modes.def
! fa5b07fc337cf6c1c63f45879d09f265  gcc/config/gcn/gcn-opts.h
! ced91140c61d0b72bfb63f082fe0728c  gcc/config/gcn/gcn-protos.h
! b5b75729636274accf073772980d78cc  gcc/config/gcn/gcn-run.cc
! 7c7cfb68405ad52f790c141fc252fd30  gcc/config/gcn/gcn-tree.cc
! ff9aa0876e6409325633f208ca567d28  gcc/config/gcn/gcn-valu.md
! c36b2ab0ba94fabe1b917b092a1125c0  gcc/config/gcn/gcn.cc
! a983193d61c7c2c03709642878544a31  gcc/config/gcn/gcn.h
! 1ab3295e556fe5ccd3676c04f6005aab  gcc/config/gcn/gcn.md
! f55412710d9e4eadc9607481003547ce  gcc/config/gcn/gcn.opt
! f17df9747158c5dc29f6654b5195a5a5  gcc/config/gcn/mkoffload.cc
! 2a53fbd33ed1f8edf50ed24dc08e1f41  gcc/config/gcn/offload.h
! 569a86827188aeb1e90b23ee29f92a4f  gcc/config/gcn/predicates.md
! d757458b061ce559326d88e7d9bbd81a  gcc/config/gcn/t-gcn-hsa
! 91e6ce30a7f50f5bd2f1cdba83a875a3  gcc/config/gcn/t-omp-device
! 29b9f1d790c18f2de0a8b9c5ec0bc7cd  gcc/config/glibc-c.cc
! 9675a130ee88a43894241a89fa582353  gcc/config/glibc-d.cc
! 0616ca61c29d5b8d6464757c7c5dfe70  gcc/config/glibc-stdint.h
! 6a5c078099b5a2e2c727bfdc52385226  gcc/config/gnu-user.h
! d206380055cafd7bafda28f47181efc4  gcc/config/gnu-user.opt
! 547c4d2400a2a07b669b93db2159e589  gcc/config/gnu.h
! 614bb3102b667d8f96684dddffd1f625  gcc/config/h8300/addsub.md
! cddc64825ce6e6e92692684251745f9e  gcc/config/h8300/bitfield.md
! a0fc6d56138367ab6a5bb3fe7949d05c  gcc/config/h8300/combiner.md
! 4e63ba3bcc7f404f6c89b7744e8a7a8b  gcc/config/h8300/constraints.md
! 6951bae6ec523668ea56b4c855810ce3  gcc/config/h8300/divmod.md
! 7f39f85b18224fc6d6dfe92803e1fe74  gcc/config/h8300/elf.h
! 85931a4b7cb4497d2dfcfe7a72251934  gcc/config/h8300/extensions.md
! b9969e9bfb721f9aaff121bcdb91ac34  gcc/config/h8300/genmova.sh
! 85f785fbe5f0871b67e561b22a0710c5  gcc/config/h8300/h8300-modes.def
! e95757598ef266058ebb722051b68915  gcc/config/h8300/h8300-protos.h
! 086b4e710d1a4b8a4865994e71799bcc  gcc/config/h8300/h8300.cc
! e4dfc00f9837ef3dfbeb3747f2292309  gcc/config/h8300/h8300.h
! c1e7b1f5959721e8dc3b4c9c07204465  gcc/config/h8300/h8300.md
! 4e48bd9ec394449fffcbc9ce846f00ed  gcc/config/h8300/h8300.opt
! b5d25924674b9d28333ecf000341f07e  gcc/config/h8300/jumpcall.md
! 590e80efbe03ffa5e7e7d402353a3395  gcc/config/h8300/linux.h
! aadf1bc3214dfe74ed3fcee32bc9332c  gcc/config/h8300/logical.md
! bc7daba8bc9e2b92133cf79aa13f531e  gcc/config/h8300/mova.md
! a9707c57a01c32195161ee72779e503e  gcc/config/h8300/movepush.md
! 6497e83ede4f1f9ec82eb6a07ba6f856  gcc/config/h8300/multiply.md
! 56b9e51103f6a9c3bfc3777663b9a4f7  gcc/config/h8300/other.md
! e673e4aefe8a67834929eb43e99ac3df  gcc/config/h8300/peepholes.md
! 75cd86332ef61455533fbeda7964af28  gcc/config/h8300/predicates.md
! 229fc2c8a83deb14625c4ee888cbb642  gcc/config/h8300/proepi.md
! daa266a3eae63ee1e65cb8c441f4c9c2  gcc/config/h8300/shiftrotate.md
! bf3f92dcf6121f90e68ab1b01f9d2e31  gcc/config/h8300/t-h8300
! 4055a30bb0b76042f6c909307ccdc108  gcc/config/h8300/t-linux
! 08fc74adfb2edd542bad09338b800e79  gcc/config/h8300/testcompare.md
! 4f841b17b39ccabd6a5c045119bc0133  gcc/config/host-darwin.cc
! 42392ae127fbe1ed4489af62c1e83947  gcc/config/host-darwin.h
! d3aae93a2553761e3bd38eb3bbe52ca4  gcc/config/host-hpux.cc
! 9c36a0a896956969d9486298f6f60bed  gcc/config/host-linux.cc
! cf7bcabc347f4fbe94842dc3d36f9d94  gcc/config/host-netbsd.cc
! 8644923c06fb578a16585297ef8cab0b  gcc/config/host-openbsd.cc
! cf1bbcc054268a6a185f17503b37010d  gcc/config/host-solaris.cc
  2c191e2d8d033611c6fccc8362d9e8f0  gcc/config/hpux-stdint.h
! 16d07d8d3bcd9999cfae085068c77069  gcc/config/hpux11.opt
! 9de664a72849b7e98bcf9315b6ad625a  gcc/config/i386/adxintrin.h
! 7140c08161ca9219fd720c34f93a602b  gcc/config/i386/ammintrin.h
! d4a6c7a692c80f0ed51ec3d6099f15dd  gcc/config/i386/amxbf16intrin.h
! d6abc2d151311152cb0693652c7b05cf  gcc/config/i386/amxint8intrin.h
! bfb02611a831325683c52234036d89ed  gcc/config/i386/amxtileintrin.h
! d6b432ae98731354d73e97ad3d785397  gcc/config/i386/athlon.md
! d146e533457f0a84f8ed2dfcc599c0c5  gcc/config/i386/atom.md
! d3b4f4cbfc84b2f53ce3827afe4b7945  gcc/config/i386/att.h
! b2d71df4955ec62788dd834e597bbb4b  gcc/config/i386/avx2intrin.h
! 0ffa1bc8325980a781ec70d915447c36  gcc/config/i386/avx5124fmapsintrin.h
! 5b88de21534946a0f61d12b57ba6a572  gcc/config/i386/avx5124vnniwintrin.h
! 823cf4a556009acbb4bd0204278674b7  gcc/config/i386/avx512bf16intrin.h
! bde1cc60bc22dd5c40dbe9162fbe2181  gcc/config/i386/avx512bf16vlintrin.h
! 0d1af95164b629c8b7619906eaa97f05  gcc/config/i386/avx512bitalgintrin.h
! 57f72074beed4351594174390bd9b12c  gcc/config/i386/avx512bwintrin.h
! ec59a1f379b4a6d2df23c1d1f791a3b9  gcc/config/i386/avx512cdintrin.h
! b8f23feb64286343e8c537a762328cd8  gcc/config/i386/avx512dqintrin.h
! 738470dbc828d093caa01f60ef6c7b4c  gcc/config/i386/avx512erintrin.h
! 7918814982f7ef9f0267c9f8b110a5b7  gcc/config/i386/avx512fintrin.h
! 660873208fdba04c5b56129870dcc33f  gcc/config/i386/avx512fp16intrin.h
! 032a09af8cd224ec0665d77f4b9eb092  gcc/config/i386/avx512fp16vlintrin.h
! ac74949772b9541e61d1682972037dae  gcc/config/i386/avx512ifmaintrin.h
! fc191ab288a6a41536ca5d96ad45699b  gcc/config/i386/avx512ifmavlintrin.h
! 44a538c6846c96c75b5e83fdee39905b  gcc/config/i386/avx512pfintrin.h
! 3de2d88a31427b9eeb84e19dcbbb59ee  gcc/config/i386/avx512vbmi2intrin.h
! d653d694cb28bfc56860269d956df861  gcc/config/i386/avx512vbmi2vlintrin.h
! defbe635d7ee201cee8ca21199314805  gcc/config/i386/avx512vbmiintrin.h
! 79fb67ae683bc52be5dffa7356b50e53  gcc/config/i386/avx512vbmivlintrin.h
! e1a827ccee55d539e84cc4221c704f1f  gcc/config/i386/avx512vlbwintrin.h
! 03026296f468ffeaa3c1a073aa5397ad  gcc/config/i386/avx512vldqintrin.h
! baeb5882f6596e82a75b91e6ae18f054  gcc/config/i386/avx512vlintrin.h
! 25b2058dfd67782c5354eba5d7d350e6  gcc/config/i386/avx512vnniintrin.h
! 2de001abaf8dccb13af0bedd3a865855  gcc/config/i386/avx512vnnivlintrin.h
! c3c8d8a04233e3add79dddec32b01182  gcc/config/i386/avx512vp2intersectintrin.h
! f85fb16715244401213f45c166f17aeb  gcc/config/i386/avx512vp2intersectvlintrin.h
! c7fcceb67c03799447ac35c56eaf5c56  gcc/config/i386/avx512vpopcntdqintrin.h
! c4c851662256e43117d57636126364d7  gcc/config/i386/avx512vpopcntdqvlintrin.h
! 5f69b4b4bd7cfc19b0eb68864334fdfd  gcc/config/i386/avxintrin.h
! c8acddbe32eb74dd6cf7d580940c565f  gcc/config/i386/avxmath.h
! d7599c23e226a7fbe643b244a7959f05  gcc/config/i386/avxvnniintrin.h
! 1211737522a90eb04429b39859f57b77  gcc/config/i386/bdver1.md
! e1a8f3836d4456da30926e098f022d0a  gcc/config/i386/bdver3.md
! 1ed276cf2639d6e23daf44690703cd80  gcc/config/i386/biarch64.h
! 4f95d11d449b5410d641572a899aa2c6  gcc/config/i386/biarchx32.h
! a461be2938b8df4418b89cd7126bc109  gcc/config/i386/bmi2intrin.h
! 274c1a76d65b7fe00193d6a9000a9ae9  gcc/config/i386/bmiintrin.h
! aeb4af0eba89c101d7309b011b3c4a1a  gcc/config/i386/bmmintrin.h
! 8d2f6bfccb08de90cb3c622b8ae6857d  gcc/config/i386/bsd.h
! f7ca71f828338d4873e78b9b6bd6ccd5  gcc/config/i386/btver2.md
! 94c9fafeafa7d519e01525b6bfac06e1  gcc/config/i386/cet.h
! 5bfa38e7c6b0fed3af49c337f03a9722  gcc/config/i386/cetintrin.h
! 755b3aa6686c7d76a4d4475860b448cc  gcc/config/i386/cldemoteintrin.h
! bc01acfe036d2d3ce5793b08e7e71e84  gcc/config/i386/clflushoptintrin.h
! 8a68f20d16a95399525876593d0f0c5e  gcc/config/i386/clwbintrin.h
! 08ed13abc6279c8d104750728c0eda30  gcc/config/i386/clzerointrin.h
! 6f7a046604e438dfd3188b35279b140b  gcc/config/i386/constraints.md
! 723dcedc010d5320b4aaf22a6c002f15  gcc/config/i386/core2.md
! 09cc0a2e973bdd1c8da875aea61cfbf9  gcc/config/i386/cpuid.h
! c458e148668e78e4e02a6f3565ab7e07  gcc/config/i386/cross-stdarg.h
! 1ebc9bc3a99a3a49b2d55c01b282c8af  gcc/config/i386/crtdll.h
! 2edc18cd22e6d10bf772bde0f2c72ef7  gcc/config/i386/cygming.h
! 881a6a791a72addc382da31af0ffbf7e  gcc/config/i386/cygming.opt
! 68301008ce277633b6bcf0040cbfb53f  gcc/config/i386/cygwin-stdint.h
! 73065376169b922762be869e9e462310  gcc/config/i386/cygwin-w64.h
! 9530f33d46cf20b7412ae03da7784ffe  gcc/config/i386/cygwin.h
! b60e062357a44078a917798542979921  gcc/config/i386/cygwin.opt
! e3830e39ae8b0d14fb1335be03c09c32  gcc/config/i386/darwin.h
! 9babe6eff270583b672cdffa01aca413  gcc/config/i386/darwin32-biarch.h
! a22fb0f4889ea875908c2fdd7aea518b  gcc/config/i386/darwin64-biarch.h
! 681f8c7a400d3008ee990b4357496d22  gcc/config/i386/djgpp-stdint.h
! d814710db736a5c02793ee42a6b77cd2  gcc/config/i386/djgpp.cc
! 5135abfd085a03440a72720ea08d1236  gcc/config/i386/djgpp.h
! 6c2cff0c0935c1a4e69a6a5a3d530d57  gcc/config/i386/djgpp.opt
! 4d2bdb5675fe72510f87cfc2f1f59ed9  gcc/config/i386/dragonfly.h
! 199085854288e13fb3af1da0df71b159  gcc/config/i386/driver-i386.cc
! 46537b6e4f3201da0654cd2cd0817466  gcc/config/i386/driver-mingw32.cc
! 6b42eadf21cd82212fe05dafdc90f29b  gcc/config/i386/emmintrin.h
! ecc97a46ec73aa2bb87f8b72eea7dec8  gcc/config/i386/enqcmdintrin.h
! 13626720813386c0938da23b38d9c97a  gcc/config/i386/f16cintrin.h
! 35e951ad2257e26df143625e79717a59  gcc/config/i386/fma4intrin.h
! de319ddfee901f4c6ca8080a9197f3f0  gcc/config/i386/fmaintrin.h
! 4f1b5b19291ddefd9b0f471a1d5cba3e  gcc/config/i386/freebsd.h
! 46353ba86876744af05e90756c4ed074  gcc/config/i386/freebsd64.h
! 28889174c956c4b00d187d8776bc6251  gcc/config/i386/fxsrintrin.h
! af2fd3e95ca042d7783f0936b2b4a3a1  gcc/config/i386/gas.h
! 154d22d80f283cb083eea321720d22b0  gcc/config/i386/gcc-auto-profile
! eaf588e81ca9563c002c3652ae42785a  gcc/config/i386/geode.md
! b8f390f29e7cbe3b57bc812ec1f6aaab  gcc/config/i386/gfniintrin.h
! ab3fa41803950084ee3cd9958e6a1393  gcc/config/i386/glm.md
! 61a7d42e02dbdb9257d8b64555e94d1f  gcc/config/i386/gmm_malloc.h
! 2a4d03ea9a09acb2e27c79bc3055ab84  gcc/config/i386/gnu-property.cc
! 3acfb57e99e43adb2e845e037899cf1c  gcc/config/i386/gnu-user-common.h
! 059d140455c7939d025adab7aa395a84  gcc/config/i386/gnu-user.h
! 9ef90e64bcac5c359183947852d99edd  gcc/config/i386/gnu-user64.h
! 44386b4d54a6ab2c5d2b8ce484bab564  gcc/config/i386/gnu.h
! 6f569be59bbc90df6992a8924938484f  gcc/config/i386/haswell.md
! a94249ef281fbb9dfa5d9ac5b177a20a  gcc/config/i386/host-cygwin.cc
! dac1d55fce23c07f7334ab60107d2740  gcc/config/i386/host-i386-darwin.cc
! 460a4ff60aa7b574b688eafe1955e4ee  gcc/config/i386/host-mingw32.cc
! f49f27ecc3f73457a104e71798f69e31  gcc/config/i386/hresetintrin.h
! 59f4f2b14da54e4579a407bec8feacf2  gcc/config/i386/i386-builtin-types.awk
! e5f608519e1f03ddbe8c845378fdadc8  gcc/config/i386/i386-builtin-types.def
! 0c8160ff431805fb9aa6bad7aa561ce8  gcc/config/i386/i386-builtin.def
! ca7c3598c73f7ae3a4573a140b553c12  gcc/config/i386/i386-builtins.cc
! 1386ed6c665b92fb05c52b30d7fab44f  gcc/config/i386/i386-builtins.h
! 93f893196b560fc75a669d6c671c2874  gcc/config/i386/i386-c.cc
! df02cbcdd37135634e4ea1aa13f7591b  gcc/config/i386/i386-d.cc
! 9988025b7aebc2dd27c28a851ec6695d  gcc/config/i386/i386-expand.cc
! 3c709d191abaf095a50b0ccc29328991  gcc/config/i386/i386-expand.h
! 754bff776651063ff06b2bcb50252ee7  gcc/config/i386/i386-features.cc
! ffd76bdf4194098464fbcf9c1dc4c463  gcc/config/i386/i386-features.h
! 6937d1c6ece95c74b1c7ca2eb0265674  gcc/config/i386/i386-isa.def
! 0093d40a44064ad74492537c26a7eac7  gcc/config/i386/i386-modes.def
! 4f64ae2a2ad82d70ee3487a76a4f5ba6  gcc/config/i386/i386-options.cc
! 7be51e744d8f9807ab03a83afaf685ca  gcc/config/i386/i386-options.h
! af85d0ff6d4cd15b14460985c816bbb3  gcc/config/i386/i386-opts.h
! bc068488ad4d00d93e15004aec10c28f  gcc/config/i386/i386-passes.def
! fcba2a8a8295a8fa20ea49a6acb14c4e  gcc/config/i386/i386-protos.h
! 3365dd87ac0c8ea5cd54dc3d37c75756  gcc/config/i386/i386.cc
! 53bc05f636bb53dc4cd6628e217f164a  gcc/config/i386/i386.h
! 46857141a08b22996a9b4d5f1ae00e46  gcc/config/i386/i386.md
! 760bf2f0864d522deeec6cf13ccacb12  gcc/config/i386/i386.opt
! 916e372af07c88992a4dde741f963eac  gcc/config/i386/i386elf.h
! 14e1802bbf5e0d6233d80d8f9fc83ed0  gcc/config/i386/ia32intrin.h
! b72f097222302e248e86a1bd8e98ca9b  gcc/config/i386/iamcu.h
! ff335b5d2c7b040cbfa0d022b9c453a8  gcc/config/i386/immintrin.h
! dc9c50e429199cf2dd0f058abc35cbe6  gcc/config/i386/intelmic-mkoffload.cc
! e403fa6a083b9971dd0c693fd14bd2d1  gcc/config/i386/intelmic-offload.h
! 26a0096206de742bfe54256806cfb0c7  gcc/config/i386/k6.md
! 9f3cf7fc77114c8d7221444edd023774  gcc/config/i386/keylockerintrin.h
! d2dc2529d3412e738793490ef6f7bafd  gcc/config/i386/kfreebsd-gnu.h
! 2e330b4bb455918a0c27837932ca3045  gcc/config/i386/kfreebsd-gnu64.h
! 943ec97ab4e7f7f7bb1cc0971cefb136  gcc/config/i386/kopensolaris-gnu.h
! 5dd81da5402284326c92d1dd47c18f7c  gcc/config/i386/linux-common.h
! c7b1a010d634025177f6c9f54a292df9  gcc/config/i386/linux.h
! 71973bfd73765c7d545240907f09e6e2  gcc/config/i386/linux64.h
! cd2b4412e5ac2e46b9782c181c770fcf  gcc/config/i386/lwpintrin.h
! f6ca3e67acecc57a053c10f2f95ce00d  gcc/config/i386/lynx.h
! e083229fb7cb77ef463cb9e6eb22dd42  gcc/config/i386/lzcntintrin.h
! 65804f1d7130b74dec987d85789e5c73  gcc/config/i386/mingw-pthread.h
! deb7d09bcda1f23f297841aa569db37a  gcc/config/i386/mingw-stdint.h
! 6f2e20eb5413e72135658acb3c265d88  gcc/config/i386/mingw-w64.h
! 7825d17d84303a77ad8b6bc6dd673906  gcc/config/i386/mingw-w64.opt
! bbcda60db12697e323b00933ee40ded8  gcc/config/i386/mingw.opt
! b6cb7e0a3811006748966469cf8cc56b  gcc/config/i386/mingw32.h
! ea23ad893a55f744d2c1b92bb1fa58b7  gcc/config/i386/mm3dnow.h
! 6c1c7c663150e74b9ab2511d744352d3  gcc/config/i386/mmintrin.h
! f8c70420148e0e93e459f18f491381d6  gcc/config/i386/mmx.md
! 31346a482647fdb2ff94eca6e48e57ec  gcc/config/i386/movdirintrin.h
! 70ad1e0e1a2bcedfd68558e53106cced  gcc/config/i386/msformat-c.cc
! 2b0e639ce8a95cf149bf779faa505657  gcc/config/i386/mwaitintrin.h
! f75348243aa05ec0927de45b4b3da4e7  gcc/config/i386/mwaitxintrin.h
! 763a7fce92ea4c5a4046f905f65245b1  gcc/config/i386/netbsd-elf.h
! e86d27399389b06fa7ee5dc52671ae8e  gcc/config/i386/netbsd64.h
! 5596f49c6ec89d71d1516e42284d79a6  gcc/config/i386/nmmintrin.h
! 6863e9da080e5db799a113f7e416457f  gcc/config/i386/nto.h
! 4a63b001e3d3448c0f885192884fdd63  gcc/config/i386/nto.opt
! 8cbb0c50ce5a8f3f130657a765df379b  gcc/config/i386/openbsdelf.h
! 22a5f6bac7fc374b807fbf31d2df6b89  gcc/config/i386/pconfigintrin.h
! 4b226ebf5d0aec98c7bc034bb8fc7115  gcc/config/i386/pentium.md
! 61a4d9722ec40a62599f55485b0e6f63  gcc/config/i386/pkuintrin.h
! 72ec6d0a7a2d05c11ed42e0fa64dd86c  gcc/config/i386/pmm_malloc.h
! 0016f431018d5c2c671fde4ec115e212  gcc/config/i386/pmmintrin.h
! d51332ca4bfd37239c2f527c1bffb242  gcc/config/i386/popcntintrin.h
! 6c08223f3fd50a4b28e490019010fcdc  gcc/config/i386/ppro.md
! a1686f5acf3257e4fd654d1a89e36593  gcc/config/i386/predicates.md
! 57a22bdb77fab5d266769d7ee77ead85  gcc/config/i386/prfchwintrin.h
! b938ee96c5ce1f69e192c4adffec5c98  gcc/config/i386/rdos.h
! 716de2731941dadfb7fa61c4f59804fc  gcc/config/i386/rdos64.h
! b0b5e55f7bc2138fe9786cb4086d5220  gcc/config/i386/rdseedintrin.h
! cc2d9f762a82c33ee8275338d9a2eaa2  gcc/config/i386/rtemself.h
! 7cd854b839ed71558e47449b94017ec2  gcc/config/i386/rtmintrin.h
! d6906912055f25ce87b3f315021dd99b  gcc/config/i386/serializeintrin.h
! 65201526e6f7d676db4b6bdf4d6253dc  gcc/config/i386/sgxintrin.h
! 1a48e88f0c2421723dd06eab2d35e499  gcc/config/i386/shaintrin.h
! 5dc568f106b96e0944f39b6c8f27c51d  gcc/config/i386/slm.md
! 7073e5e1c72cdcc05b51009c7f569fae  gcc/config/i386/smmintrin.h
! daccd4e3cdd63f0dbda7ded81a1478e8  gcc/config/i386/sol2.h
! fa206d3379862c2742a3db627f7a14e6  gcc/config/i386/sse.md
! 10b2b2efc6fdb5368eb608587f67539d  gcc/config/i386/ssemath.h
! 6bdc7b51876de6e87681dd2c97093efb  gcc/config/i386/stringop.def
! 63673be1e52dad91e6e09ab3fd23682e  gcc/config/i386/subst.md
! 6b6e12c5305ed84ce236c77eead867ac  gcc/config/i386/sync.md
! 95b4519ccfef2ae18ed93a2d7a1425f2  gcc/config/i386/sysv4.h
! 7564e944008a7878b7028ed05d6c4100  gcc/config/i386/t-cygming
  d5339d6e5a09a02383903f617230e19e  gcc/config/i386/t-cygwin-w64
  98d94861be252f8541038afee279417f  gcc/config/i386/t-darwin32-biarch
  8f92133cb94c59e2939cd65dc5fc8cb4  gcc/config/i386/t-darwin64-biarch
! 633a95f7feb14d4eebe0039fa5ef4dec  gcc/config/i386/t-djgpp
! 111265038614a83f41b65393211dcc0e  gcc/config/i386/t-freebsd64
  3a1c0dac7740fd9ef48c7bdf5f313c9d  gcc/config/i386/t-gmm_malloc
  d5939c6bccbf8957206c63308ce628a6  gcc/config/i386/t-gnu
! c4fb60041db4966e7b39850ecbfdcb6c  gcc/config/i386/t-gnu-property
! e980de009a734793e2b9aff4c4676833  gcc/config/i386/t-i386
! 4cfcdcb6aa20d8d50c59a8a83a0a2dbb  gcc/config/i386/t-intelmic
  51dcf9826007c01cfd67be11d5f0d538  gcc/config/i386/t-kfreebsd
  39ad69cb2a2e67aa8d46664a75b02789  gcc/config/i386/t-linux
! 41ca42b3c552709487dcfe6e59485efd  gcc/config/i386/t-linux64
  cd662e746e08a18749e8272fa759278e  gcc/config/i386/t-mingw-w32
  67bcf41f125bbec93a13ad3bd98abaee  gcc/config/i386/t-mingw-w64
! b9516414ae6978a5ec3e5162cc01f490  gcc/config/i386/t-omp-device
  12a68576d3577a8da82089f18d60c613  gcc/config/i386/t-pmm_malloc
! e7475bfbb1d433890273787275530e00  gcc/config/i386/t-rtems
! e7c152345d4578aae07b1b99494a8d5b  gcc/config/i386/t-sol2
! 6c6dc6647856991d7275637384be6c03  gcc/config/i386/t-vxworks
  b80a5a4a8c8fc32ca318158abc98dc20  gcc/config/i386/t-vxworksae
! 00e30fc1db6d8a0b7c17c705c1646ea2  gcc/config/i386/tbmintrin.h
! a651d0488afa31259400ce856c5de724  gcc/config/i386/tmmintrin.h
! 06bcf84783da9684f5bbc39090c78ab2  gcc/config/i386/tsxldtrkintrin.h
! e21da7e1f18e32aad8c5a904e0275cc3  gcc/config/i386/uintrintrin.h
! e01001bf7db35f68c87771752abd6bc8  gcc/config/i386/unix.h
! 3693b31cbddda67591e14040a9fae9df  gcc/config/i386/vaesintrin.h
! ee11f3a25020e7c1047ff460980bf924  gcc/config/i386/vpclmulqdqintrin.h
! e78a3d4373f1908b142054bd0fdba04e  gcc/config/i386/vxworks.h
! 4869942b894c2349fef119cd214c6403  gcc/config/i386/vxworksae.h
! f817a6ca009eb7a3ca104b2cba24c648  gcc/config/i386/waitpkgintrin.h
! 38b720694bac08eef408497a9a74b97b  gcc/config/i386/wbnoinvdintrin.h
! b5af5e1d40ef7455e15f90656627330e  gcc/config/i386/winnt-cxx.cc
! 6653e301243a42ec2a5c22e190206e8e  gcc/config/i386/winnt-d.cc
! e13a1550336b5e7f22d992ef93193b6c  gcc/config/i386/winnt-stubs.cc
! 8534035b329a81f1a791e555ab75cb36  gcc/config/i386/winnt.cc
! c21af9783c49378b164d52fedefb265a  gcc/config/i386/wmmintrin.h
! b4cde95b709fc93c90bf4d6b3edc7fd0  gcc/config/i386/x-cygwin
! 1ab2099a92787dd158135dbcaceb0bf9  gcc/config/i386/x-darwin
! 8d6956f3535d501680a321eb01dafb35  gcc/config/i386/x-i386
! 14d904f1842012d94e081c578d51a5c0  gcc/config/i386/x-mingw32
! f73f78a01e075bc90fe68c6a1b71ac1b  gcc/config/i386/x86-64.h
! fa56607044bb837c2b1d8aaf66e478da  gcc/config/i386/x86-tune-costs.h
! 032dfa38c24a2e6d5688d2ee24822928  gcc/config/i386/x86-tune-sched-atom.cc
! 389139c200520120fb9419c1c8e1b828  gcc/config/i386/x86-tune-sched-bd.cc
! 40bf2fd6e01b2d322f54a763a3b55a06  gcc/config/i386/x86-tune-sched-core.cc
! 34eb3da1f1ce41693a40fa0458a9b1bf  gcc/config/i386/x86-tune-sched.cc
! c9bc1ba22e3e98c672ab96584e241d06  gcc/config/i386/x86-tune.def
! ce22b05cc535a89dbb219457d178cacf  gcc/config/i386/x86gprintrin.h
! e44c986b85092282aced3b766506ebb6  gcc/config/i386/x86intrin.h
! 111ac823774e8831ad95ac74302324da  gcc/config/i386/xm-cygwin.h
! 3ed90d68a097e72b8b721985a8265f9a  gcc/config/i386/xm-djgpp.h
! a92bf8aa5e210c7103eb55d2ca02115b  gcc/config/i386/xm-mingw32.h
! 6e12634adc9cc3731f38c210ef301ddb  gcc/config/i386/xmmintrin.h
! 510d9a64927cfd7d79408d7e822ba9ba  gcc/config/i386/xopintrin.h
! c7c4480d077162974a6c2f5b66f1f902  gcc/config/i386/xsavecintrin.h
! 394ff757142df4dc2d7d400b9a086bfd  gcc/config/i386/xsaveintrin.h
! fdc9a224be0ac9d209959ec3b01b8ee9  gcc/config/i386/xsaveoptintrin.h
! cf28c57990b8c5cf140b1a7d87680476  gcc/config/i386/xsavesintrin.h
! 1b799c94b2d5a4e806fa102223ad2783  gcc/config/i386/xtestintrin.h
! 00f2f2bc20dd8833ba5d58a528808c78  gcc/config/i386/znver1.md
! 13e36aec05a89d945eed6a80045e9b60  gcc/config/ia64/constraints.md
! ccfd0b47609d79688c15727c453d954a  gcc/config/ia64/div.md
! 2a5ccfba319b36e873c8175cdf580f86  gcc/config/ia64/elf.h
! c5bb582b37decef29d13884e29ef6620  gcc/config/ia64/freebsd.h
  89edd175b4bfe583ec3ee965092fd5d0  gcc/config/ia64/hpux-unix2003.h
! c103f2bcd9cfd4de3ccd8221674a70f6  gcc/config/ia64/hpux.h
! 99540ebb658c77fb32ef2b1622967822  gcc/config/ia64/ia64-c.cc
! 8f650a740454cb884de7a0181f0e9d7c  gcc/config/ia64/ia64-modes.def
! 1782b11b34f793c4cd6e758c7b1eabdf  gcc/config/ia64/ia64-opts.h
! 4d8639bc5ddfe2f85b350efe2ef4a095  gcc/config/ia64/ia64-protos.h
! ecd6b18fca86038e815e3ab17816496b  gcc/config/ia64/ia64.cc
! 2bccadd4202f3a70f2108173e3428d23  gcc/config/ia64/ia64.h
! 0350ba8ce40d6b038079b5150111307c  gcc/config/ia64/ia64.md
! e66b9603b9e055a1f16867d60333afde  gcc/config/ia64/ia64.opt
  dcc77d7023d20b64688bf213c2d327b5  gcc/config/ia64/ia64intrin.h
  4b86fa74a7636ffdb9787a8643220eec  gcc/config/ia64/ilp32.opt
! 803ca5851779a61dd1bc49b0b56a2928  gcc/config/ia64/itanium2.md
! cf1d6143d27aa6df92a594941245c746  gcc/config/ia64/linux.h
! 8aebc36d3725a6d02798ad2f744eb626  gcc/config/ia64/predicates.md
! b5fea19f48760f08bc3672d520de1233  gcc/config/ia64/sync.md
! 54b7531c7a91f5cc54174159433bd547  gcc/config/ia64/sysv4.h
! 8464771db1ceacbb243781c762c83e7f  gcc/config/ia64/t-hpux
! 91b4b9706500b7070b46eee3bc13a26a  gcc/config/ia64/t-ia64
  67736f64800d10923b58be4e448620d6  gcc/config/ia64/t-linux
! f5c0377a8473c3ef773dd3b5dbcaf3ec  gcc/config/ia64/vect.md
! d822f93f63a18230ee775c6a9ca99f14  gcc/config/ia64/vms.h
! 903967326e608b1729e5088d3b001563  gcc/config/ia64/vms.opt
! 7de2657e5e60d3d97eaf7dc65e267a60  gcc/config/initfini-array.h
! 1c1de4169888f3230654831b87aebb0c  gcc/config/iq2000/abi
! e158a0614433348d1f01581e7fb813dc  gcc/config/iq2000/constraints.md
! 10c5244b880b53af24729684d361abbd  gcc/config/iq2000/iq2000-opts.h
! 1d98da0ad78a82f48e895d974cc773f1  gcc/config/iq2000/iq2000-protos.h
! 02ff2fef10a659d02e0618eefa3bb3fc  gcc/config/iq2000/iq2000.cc
! b371d6b70298f204812bdd7d4d7e12b0  gcc/config/iq2000/iq2000.h
! 9e2c940e3b2931bcf7266c21438ebb44  gcc/config/iq2000/iq2000.md
! e848f597c0f21096ab024a7a12a9b135  gcc/config/iq2000/iq2000.opt
! 03a360f532781aa048d34e5b64f040f4  gcc/config/iq2000/predicates.md
! 02297a6f001675dc6b9ea2d551038b8d  gcc/config/kfreebsd-gnu.h
! 270cec57e6c9b128606877651a5b87bc  gcc/config/kopensolaris-gnu.h
! 6ad27f4921c5f8b7bcd7fa8cd988107b  gcc/config/linux-android.h
! 617bbc461f515d17871c5ab5113cab5e  gcc/config/linux-android.opt
! 4c88d40e7cafa6a4d7f171d128254dbc  gcc/config/linux-protos.h
! f91e36f7bd2f18e800a70fa43f4338fb  gcc/config/linux.cc
! f34013f3937f9ef339028f23f84df693  gcc/config/linux.h
! 5c4ee106a71286a6879548408151f2d9  gcc/config/linux.opt
! b6b8181411a4c65cfd7bb9e13ac36d95  gcc/config/lm32/constraints.md
! eb506807a013303ad149977d3ee3514a  gcc/config/lm32/lm32-protos.h
! 2592e9bedf8aeacb8e2f75bda40c34e7  gcc/config/lm32/lm32.cc
! 8a62e29aa1b825ca4f0a04e6180f6466  gcc/config/lm32/lm32.h
! 5e310c7ff7c61a684b9e8d302bd20d20  gcc/config/lm32/lm32.md
! 37bbebc93130dc86a35ca0b1081a76ee  gcc/config/lm32/lm32.opt
! fd4bf5e1cf6e59059040070b2a63eb5c  gcc/config/lm32/predicates.md
! 6078ae98e766029b327f56dd8db537e4  gcc/config/lm32/rtems.h
  a9d1d80c40cc6eb8e9a32d54f82dae43  gcc/config/lm32/t-lm32
  660559cdac2b08e91486a9db7b4a2872  gcc/config/lm32/t-rtems
! 7df85b171e02b6dcb6438a5d2c40b675  gcc/config/lm32/uclinux-elf.h
! d7c9029984fb692c48b03c7edec3da62  gcc/config/loongarch/constraints.md
! 187927a38ef291c9b146c6e31ce8bde9  gcc/config/loongarch/generic.md
! 93bbe6d503e459bec56c7dd59ad562e4  gcc/config/loongarch/genopts/genstr.sh
! 2c9c3f2661b6a86014d3af7826513e10  gcc/config/loongarch/genopts/loongarch-strings
! af5583deee0ea7e02967cb03a6c85dfb  gcc/config/loongarch/genopts/loongarch.opt.in
! 85adbedddbea6f7a3893f22710de0e28  gcc/config/loongarch/gnu-user.h
! b0b53e3aa4b2caf4c8fc56270f53b8ba  gcc/config/loongarch/la464.md
! d131557e8500011af1d08a79d6541c67  gcc/config/loongarch/larchintrin.h
! c561ec008b9da44240632a2e8738cd84  gcc/config/loongarch/linux.h
! 62b00006a4fae66987787a54c01ec45f  gcc/config/loongarch/loongarch-builtins.cc
! 13df72ec76eb2836b7f443e88d63a9a7  gcc/config/loongarch/loongarch-c.cc
! bf8395007027603dfae1b2aea27e62e0  gcc/config/loongarch/loongarch-cpu.cc
! e4a334364fa17e4dc6909066fe1fe2d3  gcc/config/loongarch/loongarch-cpu.h
! 265736d354d7ca10d9bec4dfa22a916e  gcc/config/loongarch/loongarch-def.c
! 5c933068d75b0083cf2c7b9c49a50666  gcc/config/loongarch/loongarch-def.h
! cae26252c54a28513d91f790be149a4c  gcc/config/loongarch/loongarch-driver.cc
! 1953cc130563d0ebe2e054c9e39b1bf5  gcc/config/loongarch/loongarch-driver.h
! 5cc9d4c848862dcad636760ca3b54297  gcc/config/loongarch/loongarch-ftypes.def
! 15082170b1e96d1d677239d8373f4ce4  gcc/config/loongarch/loongarch-modes.def
! 9d590a79ec519fc8a1563b9ef017498c  gcc/config/loongarch/loongarch-opts.cc
! 6f8d5bdd9db684a6838b5c6c56a120ac  gcc/config/loongarch/loongarch-opts.h
! ce786b3bbe89341012dadc4b50812bea  gcc/config/loongarch/loongarch-protos.h
! 7dac179891b7f5030f246b3dc5063a34  gcc/config/loongarch/loongarch-str.h
! e87e1fc114ac64d998e217fc70bb284d  gcc/config/loongarch/loongarch-tune.h
! d22f5d8d14b76a99d46829128f37498c  gcc/config/loongarch/loongarch.cc
! a7976b742f3fc8cb3f5096b64f37b56a  gcc/config/loongarch/loongarch.h
! 9ff2b46b66aa2096a392247dd63f64b2  gcc/config/loongarch/loongarch.md
! 6ce82e6fac38842ebeab30d9fa9c86ee  gcc/config/loongarch/loongarch.opt
! 341adb054a917216830fd2decd29e84b  gcc/config/loongarch/predicates.md
! 979df61029c4441e0e86295923d58040  gcc/config/loongarch/sync.md
! c2a3c1ebaf68e2caa4d6f359e4796081  gcc/config/loongarch/t-linux
! fc7d079b5f56ba7e8ce7b4ab0cb064dd  gcc/config/loongarch/t-loongarch
! 0694afecae00bd387716b1c1aa91f58f  gcc/config/lynx.h
! 54c0ca65e031c269266318a6793975f2  gcc/config/lynx.opt
! 620af35e67d564c03797d0efed05ee3c  gcc/config/m32c/addsub.md
! 3a030c6c66a0b55a56d34140ff65c9f1  gcc/config/m32c/bitops.md
! 2e6d1c75772253fd64123915e5f707aa  gcc/config/m32c/blkmov.md
! 187412779239f2b805a4595fb44e7efc  gcc/config/m32c/cond.md
! 20d35c76ffbbfd9ecbb954b59641e683  gcc/config/m32c/constraints.md
! fb5e1ca690a1495fa79408a6578fa55e  gcc/config/m32c/jump.md
! d3398bc3fda8aea6ea64f7bb169f0511  gcc/config/m32c/m32c-modes.def
! 27bd49a308e279742b73a801be3a3c9c  gcc/config/m32c/m32c-pragma.cc
! e4924e545015fa709b54649b2c31af8a  gcc/config/m32c/m32c-protos.h
! e1266084d45d886958a6e7e3e1af30e4  gcc/config/m32c/m32c.abi
! 3ffe42f2118490e3ac39387b51d374e1  gcc/config/m32c/m32c.cc
! 8b679d1e595d5033eb01b25459738a07  gcc/config/m32c/m32c.h
! 946b460530402eeba979543558c010cd  gcc/config/m32c/m32c.md
! d693291ba30c3e54d558eb7dd1aa02c2  gcc/config/m32c/m32c.opt
! 756194f58715a7126352425000a68e54  gcc/config/m32c/minmax.md
! edb87a4fd06219942373347592148f9c  gcc/config/m32c/mov.md
! a68e76c9b250c0a64b967a2ecf24295a  gcc/config/m32c/muldiv.md
! d8c9bf805ce5b9258c56ce0f06e2e717  gcc/config/m32c/predicates.md
! b0d4fb23e07bd9b8d9e1bdc7994951cf  gcc/config/m32c/prologue.md
! 3e8501dc62b8b4c5b41038ccf760347a  gcc/config/m32c/rtems.h
! 8e4dd7550d872965ac411f7cbd053f5e  gcc/config/m32c/shift.md
! dec5aee99ac5606b75f6ca4242a3d216  gcc/config/m32c/t-m32c
! 4f808e1471694ddf407978c47165c433  gcc/config/m32r/constraints.md
! 508245577263de4769f3ed5d5a4ec497  gcc/config/m32r/little.h
! 71567d5fe8a5e95bce6bca6775aff2df  gcc/config/m32r/m32r-opts.h
! 05ea4cbc6e80fc4f7b3488ce1f40c02e  gcc/config/m32r/m32r-protos.h
! 95d0d9b98964f7b0a0bdd0dcef12f578  gcc/config/m32r/m32r.cc
! 37bad490f741cab811e2a6d3acca2ef8  gcc/config/m32r/m32r.h
! 835a1394dcf57a8513203227713b760b  gcc/config/m32r/m32r.md
! 97070eabb1ea7aa38f5e88a6f9b742d7  gcc/config/m32r/m32r.opt
! 4fba80d76771c42cdc2f815d9204e4e6  gcc/config/m32r/predicates.md
! a1eba02654a4720d2a592b7b029b8c77  gcc/config/m32r/t-m32r
! dee5704d0a16d53208c72917f65f3ad6  gcc/config/m68k/cf.md
! a3fea841ddd08ed65ab638903d0667bf  gcc/config/m68k/constraints.md
! f9dd81ada29dd3131b73fb5e2f89ed32  gcc/config/m68k/genopt.sh
! 32c2401663114818c9d357ee69c18a8e  gcc/config/m68k/ieee.opt
! ac4e3b58424b86b0676a4171755891e9  gcc/config/m68k/linux.h
! c53a4a3b08354420900dc99fc13db754  gcc/config/m68k/m68020-elf.h
! dfd51d18a5d63096899d00eb3951aca7  gcc/config/m68k/m68k-devices.def
! 5eb8d3b86ffc5df010e8d965d073955f  gcc/config/m68k/m68k-isas.def
! 0e0e83bc66b0f66d782e31909033d224  gcc/config/m68k/m68k-microarchs.def
! 9025e30de0fcdffa600810b91d8fda20  gcc/config/m68k/m68k-modes.def
! 9e26dcbeaa28681d06bd9b1873e97541  gcc/config/m68k/m68k-none.h
! ef9185eddac6b4aa175123afa0169274  gcc/config/m68k/m68k-opts.h
! 434d6b80164e2fa5e1e7fe830aaa50c3  gcc/config/m68k/m68k-protos.h
! a2a977f34cac0f7b334fc40e198c8cd7  gcc/config/m68k/m68k-tables.opt
! fa4716f4d62d8ed77f69715e52f37fc1  gcc/config/m68k/m68k.cc
! 5bf06962de1720dce0e4d312afb4db9a  gcc/config/m68k/m68k.h
! ec5910be016a9ab9af1969ec303b32cf  gcc/config/m68k/m68k.md
! 7fe6e99a8c54a674943d0ea0d7ab223f  gcc/config/m68k/m68k.opt
! 14d8420e23e25fd51c46c1e4010c4fa3  gcc/config/m68k/m68kelf.h
! 666546fa48704ccc660261bad413765c  gcc/config/m68k/m68kemb.h
  c0472199959f16fcb58702880954da6e  gcc/config/m68k/math-68881.h
! 7a943426cf75a1683f6432aa893253bb  gcc/config/m68k/netbsd-elf.h
! 6c2e6e0c0399209907540ad6b3c3008b  gcc/config/m68k/openbsd.h
! 1323f2cd2eac63c0e47fe17d32a00d69  gcc/config/m68k/predicates.md
! 5498c8352f8d61536c2fc3382f42a3b9  gcc/config/m68k/print-sysroot-suffix.sh
! 7d3d6198a49a5b1aebf92b2ace3fcf11  gcc/config/m68k/rtemself.h
! eaf562aa18213d08e9b1fefe37141539  gcc/config/m68k/sync.md
  19d5ed41f3394c9423ff3afe64804076  gcc/config/m68k/t-cf
! 2ff5aea3d6a5eb5c266c25cbd9fc75b4  gcc/config/m68k/t-linux
  baa4595148bafa6426b8d665881ced45  gcc/config/m68k/t-m68k
  c8278c25339f71d746d91a193efd6cea  gcc/config/m68k/t-m68kbare
! 4dbc8aef9260741753fdd2fcd812f120  gcc/config/m68k/t-mlibs
  0fd519d41689e5af998ca53a2f11e7d2  gcc/config/m68k/t-openbsd
  2919d876e31e6c4e0955d8cd4be5ce28  gcc/config/m68k/t-opts
  2899d62cd61c46fe504594a232959581  gcc/config/m68k/t-rtems
! e2a4da6fda1d85113f9ac1389021b9f8  gcc/config/m68k/t-uclinux
! 0ea1cfacdacf70ad427d62dcd311d2c8  gcc/config/m68k/uclinux.h
! 3298739d3592ac21eafb7dbf298a3783  gcc/config/m68k/uclinux.opt
! ccadb80f780fa1208a292c16eeac0826  gcc/config/mcore/constraints.md
! 2627519e6860342f1e0767bdf36cc34b  gcc/config/mcore/mcore-elf.h
! c158e542ed6439912afc62e41f24cae8  gcc/config/mcore/mcore-protos.h
! 61ece7548be84cd269ec5c78890f1d8b  gcc/config/mcore/mcore.cc
! 4b897ebea5352012c75439525ad05573  gcc/config/mcore/mcore.h
! fcd0bd5a5a623be3c5c5cc8694c5d94b  gcc/config/mcore/mcore.md
! 48897d50a88ce1dbff53a1cc2b6634c8  gcc/config/mcore/mcore.opt
! 54d8378b25899a50b2452f39e08366fa  gcc/config/mcore/predicates.md
! 75779822cc3559ce0c6c8b02ea4d5f69  gcc/config/mcore/t-mcore
! efff3f0872996051e3dbf25c5cdb2052  gcc/config/microblaze/constraints.md
! eddbd6b3f9b24b2553d3e751a2ac6d44  gcc/config/microblaze/linux.h
! 1f755799146c980fd9a9fcd727b67140  gcc/config/microblaze/microblaze-c.cc
! ef92f77d449cf59adb82c53485c8f2e2  gcc/config/microblaze/microblaze-protos.h
! 31a76ead9ed0c8f303b550b8b7f7bceb  gcc/config/microblaze/microblaze.cc
! d1d404c0401f6913b095eff8c9190cbc  gcc/config/microblaze/microblaze.h
! fc04d0a98abffd66b53239119be74c0a  gcc/config/microblaze/microblaze.md
! 0891315340900f68042a99dda028701a  gcc/config/microblaze/microblaze.opt
! 95a62fb0ac6349e73fb8cc90a4795feb  gcc/config/microblaze/predicates.md
! 48c6e340e312467e14844447751ec130  gcc/config/microblaze/rtems.h
! 659a915908970376219d2ee55139e0e5  gcc/config/microblaze/sync.md
! df031372af9c825d21d2058d266247a0  gcc/config/microblaze/t-microblaze
  63ccba4e7f745d36609d7c129bac6288  gcc/config/microblaze/t-microblaze-linux
  a8b08640136e3e7712d2278eb84c21d9  gcc/config/microblaze/t-rtems
! 988c9091986aff6bf2cee0dd2ca4affb  gcc/config/mips/10000.md
! c61e34f65a87be51ee207c476abf0b75  gcc/config/mips/20kc.md
! 943eaf40a74524989e00927a7a4345c3  gcc/config/mips/24k.md
! 19d8802c87c49eb58caafe154ea4aaf9  gcc/config/mips/3000.md
! 785699ca5bda088a160bbc824874ba0b  gcc/config/mips/4000.md
! 713c7eb2b12773efdee707f4ab8316f2  gcc/config/mips/4100.md
! 1aa103a524b6871ba8fd382958bad1db  gcc/config/mips/4130.md
! 214f7b9ddee769b93980401e04c43a02  gcc/config/mips/4300.md
! ed9e033e9c0d1052fedcc1b51a823fd0  gcc/config/mips/4600.md
! d136af4f218c3dce01236a2a4bd321f1  gcc/config/mips/4k.md
! 307c69cd6d7cdf26a532a56c53ac1a75  gcc/config/mips/5000.md
! 09c8f7b6540f6ed907c6813d5ba9c59f  gcc/config/mips/5400.md
! 10cb615259d84a60373300428d818f9b  gcc/config/mips/5500.md
! 683a202b536d8342f336606d81260dd0  gcc/config/mips/5k.md
! 6b81f7371a4c4ca5796f179c4aa84c3b  gcc/config/mips/6000.md
! 9629cfb9b789b1c26894f150b1f2c2fe  gcc/config/mips/7000.md
! 654071d4638169bc31211a672b7c05e2  gcc/config/mips/74k.md
! c10f90e7bf98c283fbf9101c6a69cc81  gcc/config/mips/9000.md
! 9fb672cb70c8ed1e0b78a1957871cea0  gcc/config/mips/constraints.md
! 0c3d8bfc1943dc8ec5f8a88856cf4040  gcc/config/mips/driver-native.cc
! 95b7e1f48f8204e7de860ee8d51c4e9e  gcc/config/mips/elf.h
! 52b5c779a4f0cc2d709b99305d5c814c  gcc/config/mips/elfoabi.h
! 861f9757c3f14b1efbf2aa4a4871d4f7  gcc/config/mips/elforion.h
! 28d28b845de4f737dfcd5225fe6432bf  gcc/config/mips/frame-header-opt.cc
! 24994f3ad367cdffd8ad60cf6ee06844  gcc/config/mips/generic.md
! 188aa3852e37e916d7de412d3fc99c23  gcc/config/mips/genopt.sh
! afd7af27daec09e1d6820603aa7b8ceb  gcc/config/mips/gnu-user.h
! d431d707c682be398c3debbe0a0f3680  gcc/config/mips/gs264e.md
! f3b68f708d02ba58ac283363998d132e  gcc/config/mips/gs464.md
! 332ff3849bbf839d80428d0f525f707f  gcc/config/mips/gs464e.md
! dbc44ea2508c032fcf3349da26fc268f  gcc/config/mips/i6400.md
! 96eac8e2bebd39792ad0d6e3c7abc864  gcc/config/mips/linux-common.h
! a61940aabd5b43263db6f90a8889a774  gcc/config/mips/linux.h
! fe7e83da0660ba6e495f74f2d2325c58  gcc/config/mips/loongson-mmi.md
! 15cc3908ec873a2c9dac30937b3c6815  gcc/config/mips/loongson-mmiintrin.h
! 874940a8717b01b01dadf37556dd3bf8  gcc/config/mips/loongson.h
! 2d4829178159b380010392af01ace06c  gcc/config/mips/loongson2ef.md
! 2a506c9f79ab44b2156bd367791c1b50  gcc/config/mips/m5100.md
! 808178533950aa60fe64914b43d89c38  gcc/config/mips/micromips.md
! 5f9dfb6f2e23b98333eaa45f146ca642  gcc/config/mips/mips-cpus.def
! 7fe11728818380f4023ec131e8669ffc  gcc/config/mips/mips-d.cc
! c3ef461a61245d5d932cb01ed4d833e8  gcc/config/mips/mips-dsp.md
! 136d8ac0f2fef9475e94fb66e522bf41  gcc/config/mips/mips-dspr2.md
! 88e78340f91191e86961da7cb0f6d396  gcc/config/mips/mips-fixed.md
! d8c324596c91841b46a3f6309447a40d  gcc/config/mips/mips-ftypes.def
! 435edb7c2c6c1b16de8e29d60737747c  gcc/config/mips/mips-modes.def
! 3348d4620bd6195017ce782801822395  gcc/config/mips/mips-msa.md
! ea23feec32f144d135b5d5f32396a8ad  gcc/config/mips/mips-opts.h
! 5099aa311cdfb1bf9817d504df6e1310  gcc/config/mips/mips-protos.h
! 0e10771a2b2d29acfcc816bac79ef440  gcc/config/mips/mips-ps-3d.md
! 234d90729fafb2d011d97c39dd26e283  gcc/config/mips/mips-tables.opt
! e4b5aaf56a0b2c5dbfec8047f2704ec8  gcc/config/mips/mips.cc
! fa0001c2840889486bd44d42609b845d  gcc/config/mips/mips.h
! 225a53521100ee70d70387865e0c1fb6  gcc/config/mips/mips.md
! 0d82471eaffa9f4749a237e08b80ad37  gcc/config/mips/mips.opt
! e216b0716f550a45c890c2898a08ea64  gcc/config/mips/msa.h
! 7468e200a61c0d3a68694e33ad457c03  gcc/config/mips/mti-elf.h
! 66fa78d1924424acb9053c6b9c142a67  gcc/config/mips/mti-linux.h
! 63c871c614254abcd80b03c349121da1  gcc/config/mips/n32-elf.h
! 02acdc50f69a3429b1d6c5e99e836d0e  gcc/config/mips/netbsd.h
! c19483dacfc2a537bc711f1686e70759  gcc/config/mips/octeon.md
! 15affe0c9a5197b3312864334c7ad779  gcc/config/mips/p5600.md
! 27e462de79695f56b5f9d434d5896f6d  gcc/config/mips/p6600.md
! c249b6d8c7d18bcb1e4736e0980d4f92  gcc/config/mips/predicates.md
! e5e7d0e66c77c7ae1640bd0400a3c0d8  gcc/config/mips/r3900.h
! fbf28b8c2efe48268d3e90f7ca6311ed  gcc/config/mips/rtems.h
! ddbf36a09196111debe6956b7c7c4127  gcc/config/mips/sb1.md
! 8ddd704f4097179f6f0c39a7076707dc  gcc/config/mips/sde.h
! 5f4c803c7ff5e7dddd22e9b2ef88da82  gcc/config/mips/sde.opt
! 30a193b8624d60b0e2e49ff8d395cc06  gcc/config/mips/sdemtk.h
! 1ca20ffd34cdc3fa59bdb832ec71edf6  gcc/config/mips/sr71k.md
! 0fc40ba292b32cefb81af61d83d3a4af  gcc/config/mips/st.h
! 40cb75baa26de34c2944b80a610fc573  gcc/config/mips/sync.md
! 11fd3f46f67dd0203427b1babea49a3f  gcc/config/mips/t-elf
! 969051df7ddb19f659c647c889bfe1b0  gcc/config/mips/t-img-elf
! e3026124c4f397d1326e6258306111da  gcc/config/mips/t-img-linux
  f99fd825138aaee60804b8915e20d22e  gcc/config/mips/t-irix6
! 4d0ec67da5e4e512522bf17f7a116c44  gcc/config/mips/t-isa3264
! 749f682677542066ff939e9761b82c7f  gcc/config/mips/t-linux64
! 25e4aa18ef7d5da70fc04b8918f83cac  gcc/config/mips/t-mips
! be66167c63ec485d16ff511d9f5b1af4  gcc/config/mips/t-mti-elf
! 476dd0ddbc7bd4077ca921404ed39875  gcc/config/mips/t-mti-linux
! b30252954207421b114f24f109726ecd  gcc/config/mips/t-r3900
! a11bf8ad006fd578b641c07a50afbc27  gcc/config/mips/t-rtems
! d933687efcf563744c6d9e479713eeaf  gcc/config/mips/t-sb1
! 51083b2c419b6649f88768917f5a8967  gcc/config/mips/t-sde
! 1d962f1a01fe9ef041dc88423634f946  gcc/config/mips/t-sdemtk
! b0f87fe597101bbab83dbf24dc91b9ce  gcc/config/mips/t-sr71k
! 83d549b7f49a5bb348914c0a9b3d85ca  gcc/config/mips/t-st
! d222df8b154085a87d9578579474f80c  gcc/config/mips/t-vr
! 997f0d1c1213582f82da6025af574a78  gcc/config/mips/t-vxworks
! c892db6b6310703409b23e1824649873  gcc/config/mips/vr.h
! 5f0ef25b4677665cbfc90c982fe32126  gcc/config/mips/vxworks.h
! 06537756ff14579bc850163a24d5a2f8  gcc/config/mips/x-native
! 0cd650a46e2c695334cad3df940c23f9  gcc/config/mips/xlp.md
! fe8fcc9d08a0363284d55f17c48ef147  gcc/config/mips/xlr.md
! baf868d5a6ec7d5cad670b887547ed95  gcc/config/mmix/constraints.md
! 6544fd7915fb9bd741e261ed005052c6  gcc/config/mmix/mmix-modes.def
! b28698e2baf77f7d3fe4764470aac88c  gcc/config/mmix/mmix-protos.h
! 84f5d1e12bae916976e6b581c8997ba4  gcc/config/mmix/mmix.cc
! e00f23c01bdaccb1a7bde23a6b422268  gcc/config/mmix/mmix.h
! 2602d52c1e508475087a7a6fd7b9a83f  gcc/config/mmix/mmix.md
! de8a90e783c63e7fc89cb4ec96a3f9aa  gcc/config/mmix/mmix.opt
! 3d3d0942dd286ec99bda4a42ae4f4a78  gcc/config/mmix/predicates.md
! 0f26dcdb306fc6ea0d1fd3872947c036  gcc/config/mmix/t-mmix
! b0fd2800175b12164b5be10406a66734  gcc/config/mn10300/constraints.md
! 29efc776d02c6681e568da8e47955ea5  gcc/config/mn10300/linux.h
! 569ab20981e61e7baa3511fe53233c59  gcc/config/mn10300/mn10300-modes.def
! 915ebfd0d5ec090577d96976cbbf7914  gcc/config/mn10300/mn10300-opts.h
! 3b6dcc0a3939f8e27adcc5f17c266249  gcc/config/mn10300/mn10300-protos.h
! 59a551df1a457ed40dd30e56848319a3  gcc/config/mn10300/mn10300.cc
! 509a3841c5279c6c4b65715bc223def2  gcc/config/mn10300/mn10300.h
! e751240c51a67bcd59b24c80990924ef  gcc/config/mn10300/mn10300.md
! 8deffbe41301817b6d5807dbefede0f6  gcc/config/mn10300/mn10300.opt
! 3234116feb8fc8c1ee449e09a01b9f1d  gcc/config/mn10300/predicates.md
! 869c2f45c70431b8706b42fe85ddaa26  gcc/config/mn10300/t-mn10300
! 3fc2c9e90d65bee36b948bc326b1056d  gcc/config/moxie/constraints.md
! be6789bc06bb263114022e710878c2a8  gcc/config/moxie/moxie-protos.h
! 7fa21553b2fc26e7ad571e4eb7a27428  gcc/config/moxie/moxie.cc
! d599474a9da60b671321f8a3c89190e4  gcc/config/moxie/moxie.h
! fb7d1cdbde9221e256273fc5089d2b03  gcc/config/moxie/moxie.md
! 5fdab01a0c29ff02a271242365321744  gcc/config/moxie/moxie.opt
! 9995f395bd512206c412cf89c532af34  gcc/config/moxie/moxiebox.h
! a7559ae7d01221749d8c17c22e216b24  gcc/config/moxie/predicates.md
! 2dada5877dac01516f7343803e3b41da  gcc/config/moxie/rtems.h
! 07520790f06a349c6a804faac8e82236  gcc/config/moxie/t-moxie
! 697c73a285910cc72b46c91059b9fafe  gcc/config/moxie/uclinux.h
  f276505b774e975b88b6c90362783e73  gcc/config/msp430/README.txt
! 0fe398f9490f516b504a9de32fdb3c2b  gcc/config/msp430/constraints.md
! 2e36bcb7f2fe2d38e9689732483d06f9  gcc/config/msp430/driver-msp430.cc
! 2e7530ed8d80fee75092b1ba4d91784c  gcc/config/msp430/msp430-c.cc
! d0ddc2d0383800476fde3c3f7ab16537  gcc/config/msp430/msp430-devices.cc
! daf9422cc051c962e7eeff45b0b1b940  gcc/config/msp430/msp430-devices.h
  e081143def3cf3a59cd1181fc9162d41  gcc/config/msp430/msp430-modes.def
! 36382a4f77e476d0f6c35ba90ee883d1  gcc/config/msp430/msp430-opts.h
! 87d837bd5cb401ade35e6642b1157379  gcc/config/msp430/msp430-protos.h
! d64aa871f11b5088ea15a6a7a26e41a6  gcc/config/msp430/msp430.cc
! e4f3e267ddd316d9e84bdb9d54c09e77  gcc/config/msp430/msp430.h
! f5102c4d8ecc8abb64dcd40f8a6245a8  gcc/config/msp430/msp430.md
  a20875cf634836537faeacfb5a4f59d1  gcc/config/msp430/msp430.opt
! 5f7e8a7a58502d50c9605604d8b5d57e  gcc/config/msp430/predicates.md
! ad8133bf34bedba315456b0b902de3f4  gcc/config/msp430/t-msp430
! 6cb63032a353aaa79c4062cf3946ca08  gcc/config/nds32/constants.md
! 21965660a07b0fac1cb2164a7a0bd6c3  gcc/config/nds32/constraints.md
! 6a635cc2ef3f766fe914cc131e1a9edd  gcc/config/nds32/elf.h
! 6a7587035377712d5000e39c4d8c37f2  gcc/config/nds32/iterators.md
! 2462122f88fdf6dc33459d0549e2cad0  gcc/config/nds32/linux.h
! 858c8adf8121fc92cac6fe3f98614ebb  gcc/config/nds32/nds32-cost.cc
! 49f4c62f0cb8c85e98363566346e8272  gcc/config/nds32/nds32-doubleword.md
! 5b4a3bdaa7b2f791c268d94c49b36c50  gcc/config/nds32/nds32-dspext.md
! 8026d6b255338b57e9d150d1634b9f0a  gcc/config/nds32/nds32-e8.md
  c316334a86026beb55e5c25b4b855f95  gcc/config/nds32/nds32-elf.opt
! 9e71e6aa07c7fc28cc524c2081cedef5  gcc/config/nds32/nds32-fp-as-gp.cc
! 32a8d7be45508f19e867e070ec42092d  gcc/config/nds32/nds32-fpu.md
! 8bb2980bcecb0a878066be0772f24351  gcc/config/nds32/nds32-graywolf.md
! c725b9fe5a40964e816a1a33c7b4f447  gcc/config/nds32/nds32-intrinsic.cc
! 00fcd2a231353b0fafc566e65dc7b981  gcc/config/nds32/nds32-intrinsic.md
! e80f4d1153dd7e4b4ea83e138479149b  gcc/config/nds32/nds32-isr.cc
  d94163fd5e4660359b8b12a0d90ed1bd  gcc/config/nds32/nds32-linux.opt
! 67c00ada7899a8cfbbeb4328c33d51ae  gcc/config/nds32/nds32-md-auxiliary.cc
! 881cbf3bcd8fa5cfd95218e500062b5f  gcc/config/nds32/nds32-memory-manipulation.cc
! f12b80a30b9cb79a93d404b593e88925  gcc/config/nds32/nds32-modes.def
! 77b9587b2d30a9701bd28a5f90879e1c  gcc/config/nds32/nds32-multiple.md
! 99f61911a3a45a42bd65c80819e5f1f0  gcc/config/nds32/nds32-n10.md
! 7275c2f5f08acda7b08ad871dff22bc3  gcc/config/nds32/nds32-n13.md
! 07e091be7bfa819382c567910767bbfa  gcc/config/nds32/nds32-n7.md
! 2f4d93264b507658e6f40424f45b094b  gcc/config/nds32/nds32-n8.md
! 8e60163c6d4267466882b97d9c58c86f  gcc/config/nds32/nds32-n9-2r1w.md
! 72ba9c1b90056ea7bf65d7cdb1dced58  gcc/config/nds32/nds32-n9-3r2w.md
! b38b6362e970e6f27165b0e67625d54d  gcc/config/nds32/nds32-opts.h
! f1f4752b23ef85e7ae0df71987d2f29a  gcc/config/nds32/nds32-peephole2.md
! bd97fb949cf000a2639b0651d173e332  gcc/config/nds32/nds32-pipelines-auxiliary.cc
! a72e71fe82a42eb3bd22513451c7c799  gcc/config/nds32/nds32-predicates.cc
! 5f3a5e718ec2f19efc4b7b74d176c479  gcc/config/nds32/nds32-protos.h
! e47ee3e5d5b8ff75aecd7026b2c4733a  gcc/config/nds32/nds32-relax-opt.cc
! ae7137e8b037fac92e85f6ef8c9f2011  gcc/config/nds32/nds32-utils.cc
! 2abff95806d7099cddf675435c6ba80f  gcc/config/nds32/nds32.cc
! 900bbad68c6811630f6561743c7ed779  gcc/config/nds32/nds32.h
! 99399f67631748fb7971ed148e306793  gcc/config/nds32/nds32.md
! 1743d122013cb49fdfb5039828aa5cb9  gcc/config/nds32/nds32.opt
  c09acceb380f58ddb795ee3e973945d7  gcc/config/nds32/nds32_init.inc
! fc18145b2ce6b7a470ad14779b4ad0d5  gcc/config/nds32/nds32_intrinsic.h
! fdb7587a378fb479f62f9cff3d04ee98  gcc/config/nds32/nds32_isr.h
! 12c9283e666814d2ad7ba958c5ccaf9b  gcc/config/nds32/pipelines.md
! 4e4c670515cc17ae1290dca606709f4a  gcc/config/nds32/predicates.md
! 207971955b140067634d7b9bdc717c95  gcc/config/nds32/t-elf
! 5e410819c5a29604baf33f03f60e4dcd  gcc/config/nds32/t-linux
! 3448bd9a71676e70a8a0fab20456d2bb  gcc/config/nds32/t-mlibs
! f8fd8666e49e77cb350fa0959178744d  gcc/config/nds32/t-nds32
! 058446e508be7dce83d9b4169c19ccf6  gcc/config/netbsd-d.cc
! 9089e8e2b5c63d5557fa01b8a4cc46ae  gcc/config/netbsd-elf.h
! e66cde3c5da698e9eb68f8ebf27e85d1  gcc/config/netbsd-elf.opt
! 71df6d5073f1bd519667a903da813464  gcc/config/netbsd-protos.h
! a25d58c11bd7432d87ed645fa079ed70  gcc/config/netbsd-stdint.h
! a8282d1967c54e7c01c140f289cdd53f  gcc/config/netbsd.cc
! 53685f369d3c0dd04211e7c3605f91c5  gcc/config/netbsd.h
! 044d8d584e35fac7aa65e733621ff353  gcc/config/netbsd.opt
! 5b674505077c2ec968513bdd3930b2d2  gcc/config/newlib-stdint.h
! 9bc4a3f0fa6223302a4154a9c7109c50  gcc/config/nios2/constraints.md
! 610431d9bfe4fc2362ecd97a07c3d5eb  gcc/config/nios2/elf.h
! fcc1c23d7a525a2bd62583c2da04dba3  gcc/config/nios2/elf.opt
! 63e90efd35e8f7d883e8334add05562e  gcc/config/nios2/ldstwm.md
! ea3eeebd16b0bb39f056cd2a3533fbca  gcc/config/nios2/linux.h
! 924e323ba01415642bb83ef028fc8676  gcc/config/nios2/nios2-ldstwm.sml
! 97e49e1563b272e59b618b80a8da69b5  gcc/config/nios2/nios2-opts.h
! 0a1b7c029826b1ad6af51e797f801774  gcc/config/nios2/nios2-protos.h
! 4107389c04cdf907b72ed66bc5717915  gcc/config/nios2/nios2.cc
! 6ab9e1dec039ba9126a5b635a38cac8c  gcc/config/nios2/nios2.h
! 90ebc8abbe618252b8ae2594f26bb0b2  gcc/config/nios2/nios2.md
! 01c576236d74bb97b4b6973913b1d3ca  gcc/config/nios2/nios2.opt
! e530a761f85986460bdef8915feeeb0e  gcc/config/nios2/predicates.md
! 844e661b5fa10e4408f5468cbf82f2e3  gcc/config/nios2/rtems.h
! 5b516490845533ece4dab58370da2d0c  gcc/config/nios2/sync.md
! 36b689f54a71335c10d7f9d934b52fd1  gcc/config/nios2/t-nios2
  3369cb7fd894ad0eaae773a6ab4a00dd  gcc/config/nios2/t-rtems
! 41dacd55876639eded0acf6bb0f0637d  gcc/config/nvptx/gen-copyright.sh
! 1c1b196e40adffa2d5929f81b7e850ea  gcc/config/nvptx/gen-h.sh
! 173f36fee1f739e3618d8e40ca4930f7  gcc/config/nvptx/gen-omp-device-properties.sh
! 6a987f0dc9a69545c621e4527d1f4908  gcc/config/nvptx/gen-opt.sh
! c1ad38a37814e43f97a9c2511b2f05e0  gcc/config/nvptx/mkoffload.cc
! 4b15ab4e02f3b6bdb7ec13e1685f653a  gcc/config/nvptx/nvptx-c.cc
! af2bcd42f13e33ccdad4352e0681db30  gcc/config/nvptx/nvptx-gen.h
! 6757c6c7087740f1aea31c9508919ba0  gcc/config/nvptx/nvptx-gen.opt
! 83dfca9e2eb78c0e3ab66a3ff9681ad3  gcc/config/nvptx/nvptx-modes.def
! ebd0574bf5ea7ace79b2066a22377fc2  gcc/config/nvptx/nvptx-opts.h
! bde7aba55747f4c0cddc582357c9b400  gcc/config/nvptx/nvptx-protos.h
! bf2434d0636138653c724a48b710c2d4  gcc/config/nvptx/nvptx-sm.def
! 638d0b49e4aad1c3c3a3870f49cce61d  gcc/config/nvptx/nvptx.cc
! e69d6ee2b8a7fe0801305b508785dfb7  gcc/config/nvptx/nvptx.h
! 23f266496c8fd8187d450f94bfc132d1  gcc/config/nvptx/nvptx.md
! d9b445a4b2e607c77f96d5a8ea11c4b2  gcc/config/nvptx/nvptx.opt
! 7618e555de939a8a87ca895ee21d449d  gcc/config/nvptx/offload.h
! a98b8f55d931511a59aeb841a255d7da  gcc/config/nvptx/t-nvptx
! bc001c03517e71a9f90411d80f0f2134  gcc/config/nvptx/t-omp-device
! 000b3f007653f70365e23064db0fac51  gcc/config/openbsd-d.cc
! a65ceed029d7300deee7d7dc22dfc93f  gcc/config/openbsd-libpthread.h
  3d4a70d0decf61f1fba17df545cea7f5  gcc/config/openbsd-stdint.h
! 453cf2c44b35af91d5723b1ebf00d461  gcc/config/openbsd.h
! 5ee82d6ced458179f8485de9750dfe54  gcc/config/openbsd.opt
! 63a0ba43116933bbd014dce166910359  gcc/config/or1k/constraints.md
! 3a5f5be781e050608200b5c10a3adef9  gcc/config/or1k/elf.h
! fc5aaecf328d007342cb37bb9ecce19c  gcc/config/or1k/elf.opt
! 698f50b4f2e28bd954e86e465ba9d991  gcc/config/or1k/linux.h
! fc08209326c321688f4a991260325fbe  gcc/config/or1k/or1k-opts.h
! b6684ee0358f9fa93b6b9ed98c5896c7  gcc/config/or1k/or1k-protos.h
! 6152fcc6a410052afb8bea8bd7fe8b74  gcc/config/or1k/or1k.cc
! 028d0ed265e1b78c41230936ee46160f  gcc/config/or1k/or1k.h
! 3fa2a0364f396c407eef8570e20f0f16  gcc/config/or1k/or1k.md
! 10ba64748bc0c916cfb5d03fc81ea89a  gcc/config/or1k/or1k.opt
! 965c3dd4804a512c25bb6004ca639d5a  gcc/config/or1k/predicates.md
! 2041aa735e08d2e87f797b23581f3499  gcc/config/or1k/rtems.h
! 3c394bb4fdc9ff67bd4790c0534ff8b7  gcc/config/or1k/t-or1k
  f58d4380ee68891690f4302989ce00cb  gcc/config/or1k/t-rtems
! 42f38343315c015acccce4fb4dab66d1  gcc/config/pa/constraints.md
! c4de9328f33cf25a1e7b4bd98ce98628  gcc/config/pa/elf.h
! 9e8dea4a54f21283150c386317d0b1ca  gcc/config/pa/pa-64.h
! 2124bf98f07a74b572bf2dbe530c23b1  gcc/config/pa/pa-d.cc
! e56e3027173f2f6ea40ef71d1a3bf525  gcc/config/pa/pa-hpux.h
! be77f265a454344d84e5497bc4135a89  gcc/config/pa/pa-hpux.opt
! 30ba88de0b5823126ff3a38886eac764  gcc/config/pa/pa-hpux10.h
! 2fc02d35764e4ac1c51e14824f6544e3  gcc/config/pa/pa-hpux10.opt
! a73dbc08c36278d137a8e336dcbeb022  gcc/config/pa/pa-hpux1010.h
! 26550115e305a0cc51dbdcbaee99ca08  gcc/config/pa/pa-hpux1010.opt
! 91d62be94a465f2171467c105b41e1d8  gcc/config/pa/pa-hpux11.h
! 9f23c032ded2f9b50c519c801561dad3  gcc/config/pa/pa-hpux1111.h
! c44dcf4bfdb1fd06c246d1462a8c7334  gcc/config/pa/pa-hpux1111.opt
! f2c69fb5655b2cb22df86cc408739e2e  gcc/config/pa/pa-hpux1131.h
! d6619977545d5efa41edfe75d4367153  gcc/config/pa/pa-hpux1131.opt
! 748184241abd60ec9f430126ca554df8  gcc/config/pa/pa-linux.h
! c4f705eeb54ff34c883f9c113e818df5  gcc/config/pa/pa-modes.def
! e47d71d86ebb0d0f8afddf6d199f5364  gcc/config/pa/pa-netbsd.h
! 2eda1205dffee59771ece16cfd9f0d8b  gcc/config/pa/pa-openbsd.h
! 7a10250d76ade2d934709e9b7bb5ed6a  gcc/config/pa/pa-opts.h
! 5fa96a631a5b9b8b1217738f0e2dd69b  gcc/config/pa/pa-protos.h
! 2b7010eb6f030f630eee00fe0df62405  gcc/config/pa/pa.cc
! 13ae728a98f3a25e3637e33a21882b3f  gcc/config/pa/pa.h
! b044c40caa8d6d8cd41ed85b476d782d  gcc/config/pa/pa.md
! 64cec30c3507a2146fe6ab58b03330af  gcc/config/pa/pa.opt
! 891f23207e8d80f19e1df8c9e5118ab1  gcc/config/pa/pa32-linux.h
! b721e31e8ac5cfd5c02dda7a9fbca7c3  gcc/config/pa/pa32-netbsd.h
! 97292197746bd674a0a991f5adb7c047  gcc/config/pa/pa32-openbsd.h
! a46bddf0c41ab2d8e73b4edb4c044aac  gcc/config/pa/pa32-regs.h
! ac3161b72a192cbb0d9e4f1f448f188a  gcc/config/pa/pa64-hpux.h
! 41a82ce71a1f146358eabdaa8599e50c  gcc/config/pa/pa64-hpux.opt
! 3339b90a27e3347097e3f0e935ccd59a  gcc/config/pa/pa64-linux.h
! 3c0e1b7137bc357c160bce5f855edb49  gcc/config/pa/pa64-regs.h
  a9a6afd79b827565ffb8de8330b4cfe6  gcc/config/pa/pa64-start.h
! 3f936b513ff18f1cac0701d75f6e875a  gcc/config/pa/predicates.md
! 5ed8ceb2c6b54273f0f7fcff46fc9389  gcc/config/pa/som.h
  4104beb84cb7f3a8a5915652c3da66c5  gcc/config/pa/t-dce-thr
  6fd25f8c665d2d7390ea94c01dcb8e34  gcc/config/pa/t-linux
! 16f4ce216414d19c044dd93c60d948ae  gcc/config/pa/t-pa
! e26a156d2ef2ae60a2e01e15a61083f3  gcc/config/pdp11/constraints.md
! ea3070da7ccd303c197951f267399902  gcc/config/pdp11/pdp11-modes.def
! 53eb050770d2edeaf6187a8b1ac32a22  gcc/config/pdp11/pdp11-protos.h
! 89de3c9ec73262949bf12a44e296da70  gcc/config/pdp11/pdp11.cc
! efd71fd4cfa71545818e66c48680568b  gcc/config/pdp11/pdp11.h
! c9d1b0af02848c07de653ca949f36de1  gcc/config/pdp11/pdp11.md
! 8fd2343b8b50371a583beafccb83ee09  gcc/config/pdp11/pdp11.opt
! 10b1a82aa9429433d579e8863acc2b46  gcc/config/pdp11/predicates.md
! 1a2afe1e84ef544a937b4242e8860526  gcc/config/pdp11/t-pdp11
! 7a81ca7c7866c64fafe02bd78c03fde1  gcc/config/phoenix.h
! c8a6f881a028221dbbafedcb777812d0  gcc/config/print-sysroot-suffix.sh
! 06da7ecfd46e6730430cb01da80e7006  gcc/config/pru/alu-zext.md
! 0f1372ef494b220d0d720a687c4a3532  gcc/config/pru/constraints.md
! 37036e88280bd9cece0753ddc31b14d4  gcc/config/pru/predicates.md
! 508af9ff87c968d18da6a3b668c562e1  gcc/config/pru/pru-opts.h
! adb45c1df20d8312291f0dd590617c0d  gcc/config/pru/pru-passes.cc
! 6241f585359920cfe0e733093e1e7f3f  gcc/config/pru/pru-pragma.cc
! f6300af18a2a97bf286101e248ab2bd9  gcc/config/pru/pru-protos.h
! b0a7f6b1dccd9910b995770137a814c2  gcc/config/pru/pru.cc
! d6ddca521bf89584b85c1199c93e35c6  gcc/config/pru/pru.h
! e8e8964e44430e7645394a1a3e11f54f  gcc/config/pru/pru.md
! 085632e783decd2fe0bcc528a8e7b08f  gcc/config/pru/pru.opt
! 5514ce27c9f3d29399f1ab38369f94b0  gcc/config/pru/t-pru
! 2aafa6176e7abd01ec60b4d006134955  gcc/config/riscv/arch-canonicalize
! 0bbaaefb3f2a184dbdc18ed078219dd2  gcc/config/riscv/bitmanip.md
! 108efd0fc7ef534416cdfcbb423b7ef4  gcc/config/riscv/constraints.md
! 893fbb9c056d310ef0a6fee05d8916cf  gcc/config/riscv/elf.h
! de8267ad388b3b279d7d610dcb138d59  gcc/config/riscv/freebsd.h
! 6f1b8a140d0d8281ddf6bbb9b3665265  gcc/config/riscv/generic.md
! 4f6682a6c1d4278507083534df00daec  gcc/config/riscv/linux.h
! 65a686eb0c4b00c62765aa84b65ed759  gcc/config/riscv/multilib-generator
! 3c1d7af3fba8316bc7243f710c319180  gcc/config/riscv/peephole.md
! b54ef392ffaae587b124086e3c1caee3  gcc/config/riscv/pic.md
! 3c43ec4b4984dcfebab815b2caa17d1c  gcc/config/riscv/predicates.md
! 1c01418f219752b6ba081ae006749e8f  gcc/config/riscv/riscv-builtins.cc
! 55ef098f774ff1dbb09f1ee749a872ff  gcc/config/riscv/riscv-c.cc
! e267d8bddb126e0239cae0ebf00e2114  gcc/config/riscv/riscv-cores.def
! 80987db46d039b6171659b70b01f9a1a  gcc/config/riscv/riscv-d.cc
! f6cfc204ee0e08a394d6125a897e518e  gcc/config/riscv/riscv-ftypes.def
! dbafba6f7908712c577d60e18001b0a5  gcc/config/riscv/riscv-modes.def
! 796b4502adbc827019e994c18ab6c7a3  gcc/config/riscv/riscv-opts.h
! 34ec7b5469ef1cb3878f717c08f912dc  gcc/config/riscv/riscv-passes.def
! 205d0bae7903bb49d6aad5b9c4b2d50a  gcc/config/riscv/riscv-protos.h
! 88c2c78891ab447d2675d0968c6626d9  gcc/config/riscv/riscv-shorten-memrefs.cc
! f60d94e10e9a0c6a4ddae1f3aae0bbc4  gcc/config/riscv/riscv-sr.cc
! d21366ce6d880e1560089312a963636e  gcc/config/riscv/riscv-subset.h
! 10e6f1be47185deafba3fb01e1b02f08  gcc/config/riscv/riscv.cc
! 40ba46222a85d2f790bef97860324a43  gcc/config/riscv/riscv.h
! aab10ec69fa6a1e30f7ccbbf5981a1b3  gcc/config/riscv/riscv.md
! 5d262ceccd11d7637234635169e18019  gcc/config/riscv/riscv.opt
! 1f8d9fb5328ab69d6ee6aea7cbc52af8  gcc/config/riscv/rtems.h
  462630614e6e7a6209f8f18b6dff0eef  gcc/config/riscv/sifive-7.md
! 68ce7572bf65c61a8e3297e7e05368fd  gcc/config/riscv/sync.md
  1c27821991689abdaa7a908a0cc8dfa4  gcc/config/riscv/t-elf-multilib
  d8ae7bee35ef1ecd77143535da9aae78  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
! d74581662dc8388b434ba22f496042cf  gcc/config/riscv/t-riscv
  7dbd61c5a07b1adefe5429a41008fda5  gcc/config/riscv/t-rtems
  97a182737ed075d29be4ab1e848de420  gcc/config/riscv/t-withmultilib
  0478f4e79601d91fb8ad8f210b304a7b  gcc/config/riscv/t-withmultilib-generator
! 90f4169f99bfb7a4d89df6421d6317d8  gcc/config/rl78/constraints.md
! e26f905fb947d230ce8267bfc94cddfa  gcc/config/rl78/predicates.md
! 315c50687ceb4ab8dd0585c2630157a1  gcc/config/rl78/rl78-c.cc
! 27a00caa2efe6228724dedeef942b0d9  gcc/config/rl78/rl78-expand.md
! e5c5f726d984761bbb3797e015347f8c  gcc/config/rl78/rl78-opts.h
! 0f6d27fdddc2223563da35acc7904558  gcc/config/rl78/rl78-protos.h
! ae86de95c84d5731022640510060bd3f  gcc/config/rl78/rl78-real.md
! 4e83e9ea00d5e29d8e8d3c891915c0c1  gcc/config/rl78/rl78-virt.md
! 9e7113585a9b2471836eafa0fe5fba86  gcc/config/rl78/rl78.cc
! caa262f48bb095995bd69f31bead8b24  gcc/config/rl78/rl78.h
! b92f959d09ff22d7470b7fb99deae3b2  gcc/config/rl78/rl78.md
! 23a285273eb7003005e37a72baa83290  gcc/config/rl78/rl78.opt
! 4db46990f1e16a6c4a4fa362fe69084e  gcc/config/rl78/t-rl78
! f1359d304f1c4ca2a707865a972484df  gcc/config/rpath.opt
! 757339103d1695ceb44968b1df802134  gcc/config/rs6000/40x.md
! a29fb1ba2195bab7e022aa556f6a7a67  gcc/config/rs6000/440.md
! df4cc133045d29816105cfc8b5dd7566  gcc/config/rs6000/476.h
! e8f68a13cda915c0d35c57a7cd6b3007  gcc/config/rs6000/476.md
! 25a29b2205cb1ed1e293cf0fea4ff344  gcc/config/rs6000/476.opt
! bf95869a997c7762b97f3b55d8590efc  gcc/config/rs6000/601.md
! 356aeed5643c1059728362ab760fd4ad  gcc/config/rs6000/603.md
! ad9a9920464016b790c81eec3e34e483  gcc/config/rs6000/6xx.md
! fa871f4e28c8f2596d588c763bede19a  gcc/config/rs6000/7450.md
! 90f413483f6bff7aa611cce566fe5126  gcc/config/rs6000/7xx.md
! ee5651ff9f99cba0fc11a42687b94de6  gcc/config/rs6000/8540.md
! 1d0b124e28d6890e92a4f4f36c6c88a3  gcc/config/rs6000/a2.md
! 103aaecab1f8cc882e519935f2cca0f0  gcc/config/rs6000/aix-stdint.h
! ff4a6b203fb6d5089653a8497f00f395  gcc/config/rs6000/aix.h
! 6b79f6395b94ff2ec852620489ff8662  gcc/config/rs6000/aix64.opt
! 8b5f9792725b97142ff95e625d0f253f  gcc/config/rs6000/aix71.h
! ba9a44e430912aebbb6a1b81be97cd3a  gcc/config/rs6000/aix72.h
! 896ac66876b04d2b76989e6eee0b90ce  gcc/config/rs6000/aix73.h
! ef2ced8f2fb6ce8c5c1245ce6cee66f6  gcc/config/rs6000/altivec.h
! d9c91154013d0ca6a016f09081c95120  gcc/config/rs6000/altivec.md
! cc49b81ab7c9ca29772c01a9a7535cca  gcc/config/rs6000/amo.h
! 02da5ce24a764b70228b18b91f3c71b7  gcc/config/rs6000/biarch64.h
! 1085f75a8407fb26f3c9146067f6f20b  gcc/config/rs6000/bmi2intrin.h
! 8a5022bd5be332623fff8b360ac05bae  gcc/config/rs6000/bmiintrin.h
! 54ec91ad1765f5503425295580f47013  gcc/config/rs6000/cell.md
! 48092c856b89587cf747f397635a814e  gcc/config/rs6000/constraints.md
! 441921d402e9838d42e073dbdae44779  gcc/config/rs6000/crypto.md
! 77c27779e033c8aebcea737036e485a2  gcc/config/rs6000/darwin.h
! 503185b2f1b7ecba15c3130eeb6de309  gcc/config/rs6000/darwin.md
! 6262a630a0319b874ebf7bb603354dff  gcc/config/rs6000/darwin.opt
! 4d1427642846be99ef5df72c1c464cbd  gcc/config/rs6000/darwin32-biarch.h
! 15194aee2c08a42200dd77e878fa388b  gcc/config/rs6000/darwin64-biarch.h
! b7f0fafe2c845b85e2545c92a2c4c9c7  gcc/config/rs6000/darwin7.h
! 9d70b7b25d5171e2721594ed66b5f948  gcc/config/rs6000/default64.h
! 1de21ca2491e6514d8eb735e7a339a6a  gcc/config/rs6000/dfp.md
! 2c10bbc23530bb77425cec1703aab7b4  gcc/config/rs6000/driver-rs6000.cc
! 6399ff8d4fbcfcd4b6c5d26b953300db  gcc/config/rs6000/e300c2c3.md
! 8c90be2625dc4b722c014e150a46f9ee  gcc/config/rs6000/e500mc.md
! 2eadc45ed3621dba026a3b32c6fccd41  gcc/config/rs6000/e500mc64.md
! 1424b41f3a328f3d94d23a17e9e5068e  gcc/config/rs6000/e5500.md
! 639dcebafd1ba8253fd70c5c7f7aad1a  gcc/config/rs6000/e6500.md
! a882d196df1da1a95ffccf96731237b6  gcc/config/rs6000/eabi.h
! ca44783c9c7d3e980434a37fd5ebd2bd  gcc/config/rs6000/eabialtivec.h
! 47f83a7b7a0deb16a2ec4d9abd3a3e5d  gcc/config/rs6000/eabisim.h
! 177812c3c73950afb57861e8b44764a8  gcc/config/rs6000/emmintrin.h
! e2f33e3ad8c58ae7c4d37c57668d5d6d  gcc/config/rs6000/freebsd.h
! 1b9d73432959c122188bd5c2819c226d  gcc/config/rs6000/freebsd64.h
! 294d38ad800a36068f5e357f6120ffe6  gcc/config/rs6000/fusion.md
! 510d12e161addcd3e90133d8016734f0  gcc/config/rs6000/genfusion.pl
! 77483e03f3638fc04120ec5e72cc81c6  gcc/config/rs6000/genopt.sh
! e424c8451aa2fa5e941011dedc3f3d08  gcc/config/rs6000/host-darwin.cc
! e6df280cc5a65d387c7826ba6a8d5c36  gcc/config/rs6000/host-ppc64-darwin.cc
! 9a8cfa7f106d19afdd46dd6c5ac3efa8  gcc/config/rs6000/htm.md
! 81d9e52c55d389395eeb31e2aaf06dda  gcc/config/rs6000/htmintrin.h
! cf43f5ffe672029aecb6485a3efe4f16  gcc/config/rs6000/htmxlintrin.h
! de267b1162c8f31d6058d88d79f9cf03  gcc/config/rs6000/immintrin.h
! 4f01bb81a02de98b2d73f6317c5b99b9  gcc/config/rs6000/linux.h
! 39171f7a272691d5b96fe66f757d2a63  gcc/config/rs6000/linux64.h
! 151bab462852e69e501b3e0de164f454  gcc/config/rs6000/linux64.opt
! db8e0cbf1cbd090070ea33edd5629e0b  gcc/config/rs6000/linuxaltivec.h
! 527bc8f53c10064aed61f852b917df1f  gcc/config/rs6000/lynx.h
  0cc3c5f9101501b8253ce3176c3ffce4  gcc/config/rs6000/milli.exp
! c483353b3be8e4608e9f79096169e69a  gcc/config/rs6000/mm_malloc.h
! 02078504e55e7aa06714622a33c765d8  gcc/config/rs6000/mma.md
! 6eadcc7d4dcedd8624a1fb7b41da66f6  gcc/config/rs6000/mmintrin.h
! 61c28e3586fb2b03805991a64b45cb8c  gcc/config/rs6000/mpc.md
! 95952f5d67af6326d2a04de86ee33226  gcc/config/rs6000/netbsd.h
! a424231ee97d90cb2112ecb8cc4e1c63  gcc/config/rs6000/nmmintrin.h
! a533c84978ddc41f07cd146aeec89c8b  gcc/config/rs6000/option-defaults.h
! 97268f911beb024ab7cd06bb77c81417  gcc/config/rs6000/pcrel-opt.md
! d676165f97dfe570f40849d5bf4fb872  gcc/config/rs6000/pmmintrin.h
! 926e68fc4e0bfa2d1dc117f078d40abb  gcc/config/rs6000/power10.md
! 07cf066c13012406f93c538c2004aea6  gcc/config/rs6000/power4.md
! f4a8d3ea7997157c7382e726efb58750  gcc/config/rs6000/power5.md
! f12b39e724a115282cd4de3ccbc3f32f  gcc/config/rs6000/power6.md
! e97b3d16e4e1103722ffef182951eb15  gcc/config/rs6000/power7.md
! 8669c9dc7deb445a88498648cc09d4e5  gcc/config/rs6000/power8.md
! ee5eec4bab981773b4e3f805b4675170  gcc/config/rs6000/power9.md
! dd882bb8b346fd5c71c3edc3523c9837  gcc/config/rs6000/ppc-asm.h
! 6d1c5a9feee6656b996e2ca020d567d5  gcc/config/rs6000/ppc-auxv.h
! 1bd0038bfa018ab27c48f63a4e6515e1  gcc/config/rs6000/ppu_intrinsics.h
! 5cf2585a27776874e85afbf8f7d3c75e  gcc/config/rs6000/predicates.md
! 8c1455ab31e44fd0dfaba2988aeac309  gcc/config/rs6000/rbtree.cc
! a8d5a7b4dde5aabdefe618616c9a0f75  gcc/config/rs6000/rbtree.h
! a592cf8ab82eb050d145672c94444303  gcc/config/rs6000/rs6000-builtin.cc
! 7b43eb7d33bae512afeb222964e2d444  gcc/config/rs6000/rs6000-builtins.def
! 1a0e08e79cd1500bdf84f4ac80c77252  gcc/config/rs6000/rs6000-c.cc
! 58b892c1eca7785db4397586788ca9bb  gcc/config/rs6000/rs6000-call.cc
! 788bbb7b212d3eb79c98533414d76742  gcc/config/rs6000/rs6000-cpus.def
! baef72211efe1ab18d6cf33e92a07f0b  gcc/config/rs6000/rs6000-d.cc
! 73fdd592a835c4516b858963e5bdccd1  gcc/config/rs6000/rs6000-gen-builtins.cc
! a490bd1734755760e696287f317cb9db  gcc/config/rs6000/rs6000-internal.h
! a9fd9182753b1742f0240fb46af52781  gcc/config/rs6000/rs6000-linux.cc
! e1b996a92005c128588ec97c24cabb6c  gcc/config/rs6000/rs6000-logue.cc
! a4c1225bedfe922184db546f041df392  gcc/config/rs6000/rs6000-modes.def
! 8440a5bf31dc635cd102f3098d8d48cb  gcc/config/rs6000/rs6000-modes.h
! b0ebc5652bf92a4f2c752b74777afe46  gcc/config/rs6000/rs6000-opts.h
! da6f20a65f51451cf71d2ff0e6ef46e9  gcc/config/rs6000/rs6000-overload.def
! 55b829f30029627192f779e582fa77c8  gcc/config/rs6000/rs6000-p8swap.cc
! 67835799ee87533e04f2fbed2bd60702  gcc/config/rs6000/rs6000-passes.def
! ffda8f63c8242e1c9b8ca7d891c3106a  gcc/config/rs6000/rs6000-pcrel-opt.cc
! 0c32d9fcf2b6dbef5aa9c813917fd608  gcc/config/rs6000/rs6000-protos.h
! ef3e25381794d8ed8d7aca2e005897ea  gcc/config/rs6000/rs6000-string.cc
! e63a23cfbabbc08ab82c8dba906a13b9  gcc/config/rs6000/rs6000-tables.opt
! 7d4398178b5b1350db22c654a06b81d2  gcc/config/rs6000/rs6000.cc
! 1556205e5dd680131677f468dddda5e1  gcc/config/rs6000/rs6000.h
! 2ee6ea0d1586d1c4a10173335450eeaf  gcc/config/rs6000/rs6000.md
! bb01fd05fe116c89bb06cc20336b7160  gcc/config/rs6000/rs6000.opt
! 6ae739401a438fbbd4f5625c7f040ce2  gcc/config/rs6000/rs64.md
! 283ed86923077668fb4d66a8bfbd2f55  gcc/config/rs6000/rtems.h
! bff178b842621aa040def2dfb8f23961  gcc/config/rs6000/secureplt.h
! 4cd1a17cf4a5c4513fa536342bd05c08  gcc/config/rs6000/si2vmx.h
! 74fec54256246722343a25e55e6bf8c8  gcc/config/rs6000/smmintrin.h
! 1db752cf5d94e330e5a450c8f6433bee  gcc/config/rs6000/spu2vmx.h
! 42be9dac85ac345cb001e80ce4da1e80  gcc/config/rs6000/sync.md
! 26912fd8d2f4a6e562cea44ccc1c0940  gcc/config/rs6000/sysv4.h
! d352c4bc3be5031e8863ef90ae8d0aa3  gcc/config/rs6000/sysv4.opt
! 898ac40955161eaacfa50d85d623088e  gcc/config/rs6000/sysv4le.h
! f586992cb0e8eddc439f89d38c72f056  gcc/config/rs6000/t-aix52
! 614bcaa942c5799f6f4bd755c6fec847  gcc/config/rs6000/t-aix64
  636250eb91fc5dada4804efcd525fc02  gcc/config/rs6000/t-darwin32-biarch
  f3250b9720d1149346f1ef8e21b52ea9  gcc/config/rs6000/t-darwin64-biarch
! a9019bb5c4ac122d85203c4fdb162617  gcc/config/rs6000/t-fprules
! 2d6aba64455fda10dd731dc34e8a1ea3  gcc/config/rs6000/t-freebsd64
! 7708df4fc7a5677f2dd3097c7bb5b338  gcc/config/rs6000/t-linux
! c23ca5dd6d43159b37712da76a8c191c  gcc/config/rs6000/t-linux64
  71c0a0470047f0171a3bb4c483eb2b72  gcc/config/rs6000/t-linux64bele
  489699b655594f05bae0b429fd261edb  gcc/config/rs6000/t-linux64le
  60f26523152f6a061a12cb17e987de12  gcc/config/rs6000/t-linux64lebe
! 69a483fc3a521db632c102fcc752d2a4  gcc/config/rs6000/t-lynx
! 0de22c83c73c1d22820da94b169001ac  gcc/config/rs6000/t-netbsd
! af9b5183e5f9bb34de3653e4ed43e01b  gcc/config/rs6000/t-ppccomm
! 1021a1008e3c77b73f781fcb41135c29  gcc/config/rs6000/t-ppcendian
! c20e012230bd360686481a6f707cde3c  gcc/config/rs6000/t-ppcgas
  1b8aba690a39464c4ea9c647d73d6983  gcc/config/rs6000/t-ppcos
! 82f0247bdc2b607c836174e7c90bbdbf  gcc/config/rs6000/t-rs6000
! 1ff5e132c78dfdcb9c1ba39f0b812d53  gcc/config/rs6000/t-rtems
! 6b511839e6a30576e8dd17b1bc7baab9  gcc/config/rs6000/t-vxworks
  f11925c88524d2fd457bf77944da1302  gcc/config/rs6000/t-vxworksae
  3f0601a68de7a0aee8264b538228d943  gcc/config/rs6000/t-vxworksmils
! afddd2a7589607f0c4fbe9ac61a90663  gcc/config/rs6000/titan.md
! be77ffba248fa7ebb90e840df8bdae02  gcc/config/rs6000/tmmintrin.h
! 79d33dfc94147d876ca015f4a25d8cac  gcc/config/rs6000/vec_types.h
! 82e3237968e3452badf566f6de573a2a  gcc/config/rs6000/vector.md
! 64e95e4dabf6a01288af5a72ccbbfff5  gcc/config/rs6000/vsx.md
! 07be543763620625532c4855fd2bbd8b  gcc/config/rs6000/vxworks.h
! 410becd5ec1d44b12ad8abac150d8386  gcc/config/rs6000/vxworksae.h
! c81225cedf76fb8af245069ce63f1856  gcc/config/rs6000/vxworksmils.h
  44a93bbae0ad5aba424ba7b97cc6914d  gcc/config/rs6000/x-aix
! b56ad5be71cef10dc9ee90f9f5577c21  gcc/config/rs6000/x-darwin
! 0d6a4902892897c148fbf634ca039f71  gcc/config/rs6000/x-darwin64
  3f42272f4bcf66031ebf71a6c876adb8  gcc/config/rs6000/x-linux-relax
! c8b5860d3a61eeddd3a9790a0f09ed6c  gcc/config/rs6000/x-rs6000
! ef375a56b9dbd47d07e26c47d2e49854  gcc/config/rs6000/x86gprintrin.h
! 2124ee19a02b6e4cad6f26e5a6f904d9  gcc/config/rs6000/x86intrin.h
! 06106fe93fc6400e28c36dc385f28b45  gcc/config/rs6000/xcoff.h
! f9cce80c808e97c18d34ebf2033d5b20  gcc/config/rs6000/xmmintrin.h
! 81a6589ce3c5af486491c6ad3e8ce4d0  gcc/config/rtems.h
! 3d09b12850f22d655dbab80f8021c740  gcc/config/rtems.opt
! 406c8c5b973bc841d2a048cb37daf719  gcc/config/rx/constraints.md
! b0a8ea410c73efe8ca4d7c7e26ab47f6  gcc/config/rx/elf.opt
  84ae77475029b49553276e3d7ed74cec  gcc/config/rx/linux.h
! 6c10f5b4d191a521b88a10d6a4b4a759  gcc/config/rx/predicates.md
! 3ce60092795e76dad464616e1d50e55f  gcc/config/rx/rx-modes.def
! 9b28441533c53af0353ce34a8dd704fc  gcc/config/rx/rx-opts.h
! c2790659034562164832cff93282c6d0  gcc/config/rx/rx-protos.h
! a1fe8f3dabb5c708a294d3912e77477e  gcc/config/rx/rx.cc
! b0f1e1597fff05f6f7a1fad9af42f9a4  gcc/config/rx/rx.h
! 7fd7352a6d489450e4f219194c1d515e  gcc/config/rx/rx.md
! 9ced13453ebff9841aade58bd08b8be9  gcc/config/rx/rx.opt
  032cf36abc28f171fc24229e32796402  gcc/config/rx/t-linux
! de67420738c00cde2f34bd0ae3b92279  gcc/config/rx/t-rx
! ffcb26c64e6f68659ab244efab6817e5  gcc/config/s390/2064.md
! 77d3b5f6c5b275327c041507d537a700  gcc/config/s390/2084.md
! b572677d505bb79ea32527552d589140  gcc/config/s390/2097.md
! e026bdfc658b8a60cfd31deec2bbfa1f  gcc/config/s390/2817.md
! c5d3bebac716fd4a316b901396acc252  gcc/config/s390/2827.md
! b5ef7b2524783a772ddc76ea26d7eccc  gcc/config/s390/2964.md
! d4e1e800040c115bce581bd7d85a5226  gcc/config/s390/3906.md
! 3de5efa33fd3b43fd73ae9987f9041b1  gcc/config/s390/3931.md
! 32823a5e5b65e7ba2a07d792157dd28a  gcc/config/s390/8561.md
! 10a569eac4473f3ddded15ee29819c3f  gcc/config/s390/constraints.md
! 9e4d71bfef068f24f886008038b950e9  gcc/config/s390/driver-native.cc
! 2f598c563bf6371ff4d512868e66e7e0  gcc/config/s390/htmintrin.h
! 240f0c0d34234777c8ca6cb5a365dbad  gcc/config/s390/htmxlintrin.h
! 9e45b4f3c97895e94cb73ae6b075aacc  gcc/config/s390/linux.h
! 663639b580eacf2f32f2b09f8379efe8  gcc/config/s390/predicates.md
! 594de881b84d2f9fdf9eee00d90b8f2c  gcc/config/s390/s390-builtin-types.def
! 03a2ec9d36d2a73872bd80f3f7148d44  gcc/config/s390/s390-builtins.def
! 22357511e88799e5bfc88e5b20872bf3  gcc/config/s390/s390-builtins.h
! 516c46c6b49109c567bf1ebcf7ebce07  gcc/config/s390/s390-c.cc
! d54a529b08d2222ce065e8ffb9549761  gcc/config/s390/s390-d.cc
! 8b80a6657af26d782f169c111c636dad  gcc/config/s390/s390-modes.def
! e0c7d30da142a08bd9975fbdb040f734  gcc/config/s390/s390-opts.h
! 4cfd0da8f3916e0e979b45418a3be3c1  gcc/config/s390/s390-passes.def
! 62ca661840c9e06d5aca4aba5d19b9dd  gcc/config/s390/s390-protos.h
! f343006cc87307ef4f09b9710b02a8d9  gcc/config/s390/s390.cc
! 1cec2d97f81fa75eb6035538ec1ee3f8  gcc/config/s390/s390.h
! 009c8932583ae80a9648c07ba4ccbf99  gcc/config/s390/s390.md
! 675257e80950b443158a1f1a91b85fa1  gcc/config/s390/s390.opt
! e1e734cafc3999b9c4451398b3ff4e92  gcc/config/s390/s390intrin.h
! d2ef3b386594d6299790fa7d37320d79  gcc/config/s390/s390x.h
! 4dd5590794c77455681691bce6f37efe  gcc/config/s390/subst.md
  551847ee4c38fa1a7e95fd93cdb32f17  gcc/config/s390/t-linux64
! 269deffc1b76a915c40a4fe0b5546af4  gcc/config/s390/t-s390
! dea694db96376a2d9908b267a5040c17  gcc/config/s390/tpf.h
! 47d557aa9caaa18246e98d2d9eddef04  gcc/config/s390/tpf.md
! 18d4c6e4b3a1b1818fa4f2cd9ecc6f05  gcc/config/s390/tpf.opt
! c7b92ccab9bff5c85e9152a5010610f4  gcc/config/s390/vecintrin.h
! 835b6545a20827a93fdb24a95fc1d095  gcc/config/s390/vector.md
! 104589867a20db109bb390beebaac56d  gcc/config/s390/vx-builtins.md
! 7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
! 1f3d467f5460c18c2b65887f6efc41ef  gcc/config/sh/constraints.md
! 75d267b5eeb53c88ff4ce97efc53929c  gcc/config/sh/divcost-analysis
! dc2cf1d8bf2f6c7704eccf3599aa4726  gcc/config/sh/divtab-sh4-300.cc
! 1ff73e278d191edaf3e5368f718ff8b9  gcc/config/sh/divtab-sh4.cc
! 1d1167357b6d443002b51b380a848dea  gcc/config/sh/divtab.cc
! dd20dce71bb2a02c0a24965fcd857f9b  gcc/config/sh/elf.h
! cfc9cc48c4f9aafe41d32da3b2eb9397  gcc/config/sh/embed-elf.h
! 4b7b34958fa3614b225a51e492de2fed  gcc/config/sh/iterators.md
! 60dec3f7ba5aee7f8808123089327dfb  gcc/config/sh/linux.h
! 46fbedaba33f33cd432383b56cc9f250  gcc/config/sh/little.h
! d1510b6bdbdb585258df7b78918ecd02  gcc/config/sh/netbsd-elf.h
! df711d3c4209dc2078403fede05b0c9f  gcc/config/sh/newlib.h
! 6861969eafe3078738774833a4c3703b  gcc/config/sh/predicates.md
! 818bdedf65464af04097cec9a4f96fcd  gcc/config/sh/rtems.h
! 9f61a6d022e5a2c63682057103c4b071  gcc/config/sh/rtemself.h
! 7435360096c659308fd1d0b7de520fb7  gcc/config/sh/sh-c.cc
! f6221f8d3397d492618e56579e467e42  gcc/config/sh/sh-mem.cc
! d22ca9f61b3c805404561dcfc87d2298  gcc/config/sh/sh-modes.def
! 2df8afb4e4a2466319288500b8b1cafa  gcc/config/sh/sh-protos.h
! e89a3a16ea0b36a982fbad98271497ca  gcc/config/sh/sh.cc
! d7a6129121131f3e3e065eca8b30ecaf  gcc/config/sh/sh.h
! 209a3bc0c73d88acbc59af0353d39fbf  gcc/config/sh/sh.md
! 139aee6f03e0b710a7924323803aae81  gcc/config/sh/sh.opt
! 084246870c25f111b506b273305de323  gcc/config/sh/sh1.md
! 62872f49ccc9aaaa5931032f18cb33ee  gcc/config/sh/sh4-300.md
! de1ffc7485829b4c1829022e8c18cfa3  gcc/config/sh/sh4.md
! b513326c77a24af4716e52c2187ce2a9  gcc/config/sh/sh4a.md
! 23ce1444bb9d11f50a1348cfca3bcb64  gcc/config/sh/sh_optimize_sett_clrt.cc
! e6463102cdb7fa30f8a08d8896586422  gcc/config/sh/sh_treg_combine.cc
! 85b3b9260ba16b29271cdc22d46df733  gcc/config/sh/superh.h
  06158b0f1e33501120db330d7734228d  gcc/config/sh/superh.opt
! 7ef467da960017f1cab28ea3b64842af  gcc/config/sh/sync.md
! 88130a11ca77c8572260539cc46ef7ac  gcc/config/sh/t-linux
  ad88281b142c81e6c7017a842c281d5f  gcc/config/sh/t-rtems
! 8ef8a91921a8ab07feb5825d10fee038  gcc/config/sh/t-sh
  9f0e9638f478c08d204c5dce468c95ce  gcc/config/sh/t-vxworks
! 186b8a155a68bc034f6acbab60a33178  gcc/config/sh/vxworks.h
! ae0154c4599c501858af9357718be49c  gcc/config/sol2-c.cc
  5c26c2321d68d4724b0d0076803c6b89  gcc/config/sol2-clearcap.map
  73dd11dea23019ab25cbbd70968694e7  gcc/config/sol2-clearcapv2.map
! 0d75d79a1c041580d567cb9208142ccf  gcc/config/sol2-cxx.cc
! 8f2a5a0aa4ef2596efe07c85141e58c4  gcc/config/sol2-d.cc
! 3d64659260ed5d901bd4542e90252495  gcc/config/sol2-protos.h
! db3ea8e52e21ff6b25a7409df09edef3  gcc/config/sol2-stubs.cc
! 250832249ff98706cb605f95ff63d4f1  gcc/config/sol2.cc
! 5f3d9124b3515b8a41a67fdc594e3a88  gcc/config/sol2.h
! 3f11e32edbf5184683614e0c12cf4552  gcc/config/sol2.opt
! a527e04f14085041dac21845087511d3  gcc/config/sparc/biarch64.h
! 62b80ce881fa4d4c7d04319252327e94  gcc/config/sparc/constraints.md
! a878211c108fecf34ef02a2e3948263c  gcc/config/sparc/cypress.md
! 5a6291651116c0b9687b87420bfd122d  gcc/config/sparc/default64.h
! 07180a64a54934dac5e07e24770706d5  gcc/config/sparc/driver-sparc.cc
! 673f138bbc31f4a04b6737e78281c495  gcc/config/sparc/freebsd.h
! 7b95f23d69b7b5f6ca1e8c6df4b8829d  gcc/config/sparc/hypersparc.md
! 0f1ddd98b1d2d775133d0b269ff3064a  gcc/config/sparc/leon.md
! ff215f480f43cbc47b1f6c5bab3b5cbd  gcc/config/sparc/leon5.md
! 0dff70a3c7b6e17eacbd6ded8f2d34ea  gcc/config/sparc/linux.h
! 631b09ef7cc0c83f43348a8d006a7afe  gcc/config/sparc/linux64.h
! 656ad8d3c24dbbbc3952e5978634cae7  gcc/config/sparc/long-double-switch.opt
! 25423419af05043ec729e1ed369dd058  gcc/config/sparc/m8.md
! d86ea460099f8902ec27493bf303b422  gcc/config/sparc/netbsd-elf.h
! 8cccb610459259664d692a3e33f9c5b2  gcc/config/sparc/niagara.md
! 2857de0c1e4d2128e0d5448d59aa5be6  gcc/config/sparc/niagara2.md
! cc71854d826696843d2942b03981edeb  gcc/config/sparc/niagara4.md
! d3dc9145de44ea30315b32e69f53aa50  gcc/config/sparc/niagara7.md
! 0555e1e3006ffc138c9ab56280c2afba  gcc/config/sparc/openbsd1-64.h
! 7901e46336182dbdd2db72507eb93bd5  gcc/config/sparc/openbsd64.h
! 3288b0e98c74f1aadcc3daa0e2e499c3  gcc/config/sparc/predicates.md
! 7269dc730873039c8e673b15c7a91d0d  gcc/config/sparc/rtemself.h
! db6ae6d4ccd0b5bdf6fe86aab97ff0bf  gcc/config/sparc/sol2.h
! 3d81093270755e8c197efce4a8650a13  gcc/config/sparc/sp-elf.h
! e27aba32f28d423ef46e3006ab3ac058  gcc/config/sparc/sp64-elf.h
! f01d31f696ab03137ceb6593b6a9cd03  gcc/config/sparc/sparc-c.cc
! 30b300332d9fd9bc53425e02cec8e717  gcc/config/sparc/sparc-d.cc
! 5e694acb117acb196c2cd599ef2d6e73  gcc/config/sparc/sparc-modes.def
! 5914308bfa82bb3244b0a3f7b7583505  gcc/config/sparc/sparc-opts.h
! a51bb2475eb881f8d714527603fcbc78  gcc/config/sparc/sparc-passes.def
! c4de36f293c0ed8a0ff011ea2103b8ab  gcc/config/sparc/sparc-protos.h
! 3a34ad9dab2894c6d6d6289e5a513684  gcc/config/sparc/sparc.cc
! 39c4eb77d664c08dc38a425bd46164e8  gcc/config/sparc/sparc.h
! 49e4c953b7b1bf2020ec076f1ced388b  gcc/config/sparc/sparc.md
! 967d1d5e6ff154d0f5b481b60929983a  gcc/config/sparc/sparc.opt
! a54cd3f6e2b8a723dad353f41ab5c303  gcc/config/sparc/sparclet.md
! 18800e2c4216e2a890b117fcc8c3871b  gcc/config/sparc/supersparc.md
! 59843eb9f273349827231c17f329067f  gcc/config/sparc/sync.md
! 1e0463db2ba5bb6c246d7c55172a8054  gcc/config/sparc/sysv4.h
! a2f6e0c277b9a660bc80e00e7dff1494  gcc/config/sparc/t-elf
! 58518a997e4ce5d65bf338cefc9e52f9  gcc/config/sparc/t-leon
! 4765c855ac4ed9b675329c248971d183  gcc/config/sparc/t-leon3
  4a7d3f368a24d549fabaafbe44fcb134  gcc/config/sparc/t-linux
! e3ca8828ca423f9ec0a02a8bbb30dcc7  gcc/config/sparc/t-linux64
  75987b7fdc6fa9c9ff2108ff1003e6d2  gcc/config/sparc/t-netbsd64
! 138d612944f25753997578e498a40e22  gcc/config/sparc/t-rtems
! 8484f899d677780952a96cefbbeb2cdc  gcc/config/sparc/t-rtems-64
  511770bb20c2707fabd4f231ce8b83cf  gcc/config/sparc/t-sol2
! 9f5601e1105701e56ab6d030b9e611e9  gcc/config/sparc/t-sparc
  b04597637b0c08dd3e6d1a40c43e76b4  gcc/config/sparc/t-vxworks
! 13dcfcac27cd6b903b16e3253d6e2c41  gcc/config/sparc/tso.h
! 63e2e3314a95e631cb59c94b50f48b99  gcc/config/sparc/ultra1_2.md
! 13103e771e72c6ba32ca5ae9a0a4444f  gcc/config/sparc/ultra3.md
! bddb19bf715eee7b83930794c2506347  gcc/config/sparc/visintrin.h
! d378ca0ee8b9fa1f6dc599fbf5b4d116  gcc/config/sparc/vxworks.h
! 5e0da0cb45fdd1424679c054727e1bfd  gcc/config/sparc/x-sparc
! bc7350d87a229f55b28d91a557f2073d  gcc/config/stormy16/constraints.md
! 59a510dffb85f78ff0d9d5a0d62d9132  gcc/config/stormy16/predicates.md
! 14d652581be71228d90645dbcc01cb05  gcc/config/stormy16/stormy-abi
! 7da82147e0b7515528c854e90ba0ef51  gcc/config/stormy16/stormy16-protos.h
! 7b14965bfe74a56528fdb6b861218df8  gcc/config/stormy16/stormy16.cc
! acd00a750e1107912434e679dacb8d1e  gcc/config/stormy16/stormy16.h
! 1a4bfad37f1fe4bcd49e99fe2ab498e8  gcc/config/stormy16/stormy16.md
! 7ba5b65bd7f8bc231566af5553fbe0eb  gcc/config/stormy16/stormy16.opt
! 8e2219370a226804e47008d6d9cce121  gcc/config/t-darwin
! c929119418bd6428fbe733712ca7da75  gcc/config/t-dragonfly
! 4a19d1697b232e5a204266e1ff962875  gcc/config/t-freebsd
! 76851f19ed25f46373cfc0c781da3d04  gcc/config/t-glibc
! 0f86559791641c4ca49f9b85bc25a196  gcc/config/t-libunwind
! 44f8539be84ff346952f1cf38b69c967  gcc/config/t-linux
! b5df7d1278280952109408064eaaf512  gcc/config/t-lynx
  5dad674732908a1c6e62e627e047929e  gcc/config/t-musl
! 555ee96911070bc5447e1ce13075a926  gcc/config/t-netbsd
! a11abd37e1474532461e8f226466c582  gcc/config/t-openbsd
! 2f0a4332aa321e8434fb92a7077281e2  gcc/config/t-pnt16-warn
  501751f2be56698ed1c9cf18358b67ac  gcc/config/t-rtems
  51d3678acb41d4448cc332f7a8e8cb2e  gcc/config/t-slibgcc
! 7f8b80c9b624b81ff2ab0000e681210f  gcc/config/t-sol2
  94b3e10150e75899d2fc1410cf218e3f  gcc/config/t-sysroot-suffix
  6f78c5decbfb4b465e7c289b60109023  gcc/config/t-uclibc
! dfad2cc758d971c8723c1fa08723df9a  gcc/config/t-vxworks
! 48d9c485226367fecc791dca3c3a6da1  gcc/config/t-winnt
! d6f63092252f029c0116652afd5a84c3  gcc/config/tilegx/constraints.md
  f62347fb17ffdccf93a30b860f9f4dc2  gcc/config/tilegx/feedback.h
! 9f830f182fb5ebe9118969b455e8e820  gcc/config/tilegx/linux.h
! 87a6aa0995f95c8c1506287879dbbad6  gcc/config/tilegx/mul-tables.cc
! 4eb06829f2ce3ee514046b188c87142e  gcc/config/tilegx/predicates.md
! 55921b7e84102a5e9fa33f186a78eea2  gcc/config/tilegx/sync.md
! a2ef3cda986604c3082605c95bf25126  gcc/config/tilegx/t-tilegx
! a66f43c52ffb77798cb0b191fef6423a  gcc/config/tilegx/tilegx-builtins.h
! 4d138f8c44c48c5e329c0a3d607b4000  gcc/config/tilegx/tilegx-c.cc
! e4ec189ef825399fa9cb4f1b85622c39  gcc/config/tilegx/tilegx-generic.md
! 33db4eb224c916fa42ae74b7fb4c331b  gcc/config/tilegx/tilegx-modes.def
! 5107cb30ceb8e812691d7eb133008ddf  gcc/config/tilegx/tilegx-multiply.h
! 3f70fb100444785c95b470060c3e6324  gcc/config/tilegx/tilegx-opts.h
! f013c24127a6161e7010f9bf844cfd23  gcc/config/tilegx/tilegx-protos.h
! 90ac2d0807737c1db3442c6e0e4800ba  gcc/config/tilegx/tilegx.cc
! 3ba4507f2a8c2eb1a3eef461081bb8a5  gcc/config/tilegx/tilegx.h
! 5ea679c46bcfcd9c7c6a24ab9cec0546  gcc/config/tilegx/tilegx.md
! 2c52b488d6a963012afc4fa71aff9e8b  gcc/config/tilegx/tilegx.opt
! d575c8e323bb9059e43261fc61e6b9da  gcc/config/tilepro/constraints.md
  f62347fb17ffdccf93a30b860f9f4dc2  gcc/config/tilepro/feedback.h
! 641d0aa01e28d644c00f3674dc502165  gcc/config/tilepro/gen-mul-tables.cc
! b535ad3c86b0c7ec08c555cfeb3ebb6f  gcc/config/tilepro/linux.h
! 5e87a9daba1de0c55a14e5135975ee15  gcc/config/tilepro/mul-tables.cc
! c5b9da1b0ff8cff8395b89d557b5ebff  gcc/config/tilepro/predicates.md
! 255f762fd8aa908e1b6a9628cebf90cb  gcc/config/tilepro/t-tilepro
! e13dead60993eaeec5ab14f29d53876f  gcc/config/tilepro/tilepro-builtins.h
! 4dcb473c712e6546db5d04d8dcdf9d15  gcc/config/tilepro/tilepro-c.cc
! bbbd0fd14553d6f7f56c8ef2bf936864  gcc/config/tilepro/tilepro-generic.md
! aa49b61f9eccc16e5f75315901bb5882  gcc/config/tilepro/tilepro-modes.def
! 3e69865ec46a92b7a286b8b63253ee51  gcc/config/tilepro/tilepro-multiply.h
! 1f8e72c272fe86aca4108389cc9ffb6e  gcc/config/tilepro/tilepro-protos.h
! 5d7d99eb823024a4f26f911d5b1e2df3  gcc/config/tilepro/tilepro.cc
! cacd6037f98007d353f42541d51a8adf  gcc/config/tilepro/tilepro.h
! 84f287a543aaa056cd857cc50b90b2da  gcc/config/tilepro/tilepro.md
! 22e7dc7beb3ab06c0b757b7a2ac31ce5  gcc/config/tilepro/tilepro.opt
  17fd5cabcc31b720b23bad47cf7fe84c  gcc/config/tm-dwarf2.h
! da113081fd608d524b35233d4fda89fc  gcc/config/usegas.h
  a6ae71a556271cc116214b3e9e87d867  gcc/config/usegld.h
! 3b423852d27f05f8e2e537fb5d8131ff  gcc/config/v850/constraints.md
! c97c52d1a9c270252b3319c2699abb95  gcc/config/v850/predicates.md
! 499600034a578f9aedc08af8d374c75b  gcc/config/v850/rtems.h
  41b5d5e91cc905b1e3ba5de47db5f9c6  gcc/config/v850/t-rtems
! be56e7c21d85816e92788c8bf043d23d  gcc/config/v850/t-v850
! 2dbf536f8fa075b2d289b0e8b84b36ae  gcc/config/v850/v850-c.cc
! 95db3e26c253d15492e58b4ee188dc0a  gcc/config/v850/v850-modes.def
! 99b4bb593a1e8aba317acf011e8a291d  gcc/config/v850/v850-opts.h
! 7caff843505e8a75e96d469e87cc985a  gcc/config/v850/v850-protos.h
! 100810ad932a6b17dfc0c4feece5a723  gcc/config/v850/v850.cc
! ff204bbf10a6454f9dc201f870455ae0  gcc/config/v850/v850.h
! 383da14fb1a52fba41333f926d3ec4cc  gcc/config/v850/v850.md
! 39b01d7c47c650ff60faad583dc349d6  gcc/config/v850/v850.opt
! 43f79198199226ddea3acf6c2c57fd9d  gcc/config/vax/builtins.md
! 545683dc853fa225a244c4144a1be8f1  gcc/config/vax/constraints.md
! 17371b06813fe1a55dabe820f072648f  gcc/config/vax/elf.h
! c3823fcd8ae6e73d66eb1302b7f649bf  gcc/config/vax/elf.opt
! cb0386496eda63a29643c648cdef81fe  gcc/config/vax/linux.h
! b742bf679bb164d5323e722923534bd2  gcc/config/vax/netbsd-elf.h
! 030dd0c671ab520c5e40fcc85815a6b2  gcc/config/vax/openbsd.h
! edf42a730fa0e206acb4c36eb4fa36fe  gcc/config/vax/openbsd1.h
! fc45ffa911b2561f64220620c3d3a7d3  gcc/config/vax/predicates.md
! 8bafffc4214815e9fd184580c1e1f0d8  gcc/config/vax/vax-modes.def
! 88dfdb263a18d045e0249cea9e3cc56b  gcc/config/vax/vax-protos.h
! a6103824529000c4a1f5896987881fbf  gcc/config/vax/vax.cc
! af2d177a52d10d2e653044329a046dc3  gcc/config/vax/vax.h
! 6a22e9e199a573b6ff7872cc7945723c  gcc/config/vax/vax.md
! f094875de5c978bed96156c015cce2b8  gcc/config/vax/vax.opt
! 5854550561cd88d8ca40dabd3e5bba96  gcc/config/visium/constraints.md
! 2f496046aadc47943252c420a93f7da4  gcc/config/visium/elf.h
! 860198641aba62c11a7027670bceee63  gcc/config/visium/gr5.md
! d61eec454332c40b944b3bcaed84e7d0  gcc/config/visium/gr6.md
! f6f624ecc140b3faa35cd18f9f9fa312  gcc/config/visium/predicates.md
! 82ad5d79178c3f16267435005252ce70  gcc/config/visium/t-visium
! 12e8951d2133d008c7c4c128fffba783  gcc/config/visium/visium-modes.def
! 7231c7529a12095c367f6b873ecb1bdc  gcc/config/visium/visium-opts.h
! cc22762cdcf9d3f4fbd54af90a57e934  gcc/config/visium/visium-passes.def
! d1f86bf9b06ddd9a4e491ad781c435db  gcc/config/visium/visium-protos.h
! 6ed20b1759cd6da726cda092e6888fa3  gcc/config/visium/visium.cc
! f7bdd93de1022384e5812028d3e28941  gcc/config/visium/visium.h
! 66b5e1689ca87d1977e75df02f9b3730  gcc/config/visium/visium.md
! e4a9c2caa063b88e562625857140559b  gcc/config/visium/visium.opt
! 61899709b2f88b93c574a7eedcabf010  gcc/config/vms/make-crtlmap.awk
! f5c6ec5f8875559e5313283c3eaa64ba  gcc/config/vms/t-vms
! 8335f1fff2aa77ba47cafa50607ccfca  gcc/config/vms/t-vmsnative
! 5384fae3b3f21f9d8a22600059f2b248  gcc/config/vms/vms-ar.c
! 88be5e6718b765cbe0eda971dda1a413  gcc/config/vms/vms-c.cc
! c4603dec4151d376a2092ed7555c06d7  gcc/config/vms/vms-crtlmap.map
! f27dde9601ed7e4e8c5f4b64c1f28c7a  gcc/config/vms/vms-f.cc
! 7b20dbfa371eb45e2a1548ca6f191b7a  gcc/config/vms/vms-ld.c
! 3f46f835f2aaf82e73dea34002ceb397  gcc/config/vms/vms-opts.h
! b2b95a1fd808709c5579f1e12b653a74  gcc/config/vms/vms-protos.h
! f7724b2e12613d19907cfb26278980f6  gcc/config/vms/vms-stdint.h
! 2509e1418c36cc72e68327122fd7945b  gcc/config/vms/vms.cc
! 357992126eefd2128bf7a060ca795ccd  gcc/config/vms/vms.h
! af50eae58459da8d326e716b07f90955  gcc/config/vms/vms.opt
! 2ccf8ff15c39b912573ffeba2d72d60c  gcc/config/vms/x-vms
! 7e62ed545d17d5d3bcebc16c359e96f3  gcc/config/vms/xm-vms.h
! b0adbf71f6e5abb5bedd1d8696c9a2cb  gcc/config/vx-common.h
! 8daad6948c35677aae1adfa80d336af2  gcc/config/vxworks-c.cc
! dd693271190986e82ef7ad5d4c2afa08  gcc/config/vxworks-dummy.h
! 9a4f2e8f67edbb319d02e8d8c8b5c128  gcc/config/vxworks-stdint.h
! d02b8abd1e27ec306211859077c07e26  gcc/config/vxworks.cc
! 181f459a19593ff0e25b8675e1188577  gcc/config/vxworks.h
! 9cac07b08044cea039faf1bd9d1b18d6  gcc/config/vxworks.opt
  d55d2805d12ce9917cb284aac8570878  gcc/config/vxworks/_vxworks-versions.h
  2c7fb7482d87758a9305ce4fec4c94ea  gcc/config/vxworks/_yvals-wrapper.h
! 83f08d69839ac4c7dc87a99be6c69a2b  gcc/config/vxworks/_yvals.h
  9e122a12d3e14f20967d135228bf88dc  gcc/config/vxworks/complex.h
  49b7fa25b0fb42a6ae7a81eddfed84cf  gcc/config/vxworks/inttypes.h
  4e93f0754151b93c5a74975e7d3cc3b1  gcc/config/vxworks/math.h
  6844198023015462d685c40332394d86  gcc/config/vxworks/setjmp.h
  e8eef5870ca1f50784d7ccedc98d709d  gcc/config/vxworks/vxworks-predef.h
! ef1769e22071662c767a27ee21a056d4  gcc/config/vxworksae.h
! ce22ce02584ff74acb3580532b671bae  gcc/config/winnt-c.cc
  5cc0a69d6149e22cb7ea38c2206a2af3  gcc/config/x-cflags-O1
! 459b5094b535d46dc221505b9407603b  gcc/config/x-darwin
! 6f4ad358c209ab9f624d9537b4f0be78  gcc/config/x-hpux
! 27f861c423e98f281006be5bd86283ef  gcc/config/x-linux
! 17f9168a86db5596e32e2a9091f99d7f  gcc/config/x-netbsd
! 622a11bb30d8162bffd0e70d8e546b5e  gcc/config/x-openbsd
! 60c44ffe57cc1280e854dc1840adc766  gcc/config/x-solaris
! 8075249cf3b893ada90a36c8617c851f  gcc/config/xtensa/constraints.md
! ac463e0c1bfaf19e2e09b2bbf4fc3f22  gcc/config/xtensa/elf.h
! 2433dca319e3df5b66724d30ec5c4c9f  gcc/config/xtensa/elf.opt
! 816e6d5c170417923bfd9ebb2f827664  gcc/config/xtensa/linux.h
! 68d72562265d3c45c5a5fd5ef50f11d0  gcc/config/xtensa/predicates.md
! 08afb61a6de7bce380b8be02e74339b7  gcc/config/xtensa/t-xtensa
! 936107bde8736132c5cba290d771a730  gcc/config/xtensa/uclinux.h
! 7a0596c8957c02438ce4344aaf726ecc  gcc/config/xtensa/uclinux.opt
! 2370bed8f1d88787c848b40eed8beabe  gcc/config/xtensa/xtensa-protos.h
! db7e9d820bb832167ac7f105d093fdda  gcc/config/xtensa/xtensa.cc
! 414aed735962abfc0a242138b2833d30  gcc/config/xtensa/xtensa.h
! cdf9eaf2307da762170cc79fa7489990  gcc/config/xtensa/xtensa.md
! 49b91f52a0ff696a3067d3288badf84f  gcc/config/xtensa/xtensa.opt
! 7f190b80c0224bf47e26ebd1629860dc  gcc/configure
! 3d01eaf4fa3338eac16e1899a941ad66  gcc/configure.ac
! 2c3b5239194c0b4a2e4fb1effa7de1fe  gcc/context.cc
! f0af356bf719524dae46597a2b9376be  gcc/context.h
! 9f79427f6fb6308f148ac1b824d74c87  gcc/convert.cc
! c55bf25c1980931f1e4ddab1b6bbb071  gcc/convert.h
! b81f031d36161f2b75151b5503458623  gcc/coretypes.h
! 1b88bcfeb53530fd6571432ae95ba0b0  gcc/coroutine-builtins.def
! 5f947cfa4f11adffe84f558e88a17922  gcc/coroutine-passes.cc
! 0fa89640cf054df390ce1a7cc7f2a797  gcc/coverage.cc
! b0252895005c33390b86f406799d9e70  gcc/coverage.h
! 367b3df2a0804bd8716b022efda94603  gcc/cp/ChangeLog
  d271e3663538ba1f3281cab3838e92cd  gcc/cp/ChangeLog-1993
  f5a44adbc05521162350ca409d1d95ce  gcc/cp/ChangeLog-1994
  ac55db48d964cb5469ff03c1cd3ee04d  gcc/cp/ChangeLog-1995
*************** c70c873ca0345be312457bdc551e3636  gcc/cp
*** 5054,5127 ****
  f6ebb1c64d8e002666e58a4da0d97ecb  gcc/cp/ChangeLog-2018
  6e4e23f29e05a4d68f00e1e0306fe285  gcc/cp/ChangeLog-2019
  1ea0510e0c84257e030079fda09b655d  gcc/cp/ChangeLog-2020
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
! 82f86a266d5edfdd6fbdee627fdfc94d  gcc/cp/Make-lang.in
! 805a74c176fc9da5c8c00650be6fa813  gcc/cp/call.c
! 013fc77930854f5ca6df4b4955b9cd5d  gcc/cp/cfns.gperf
! 94073c4e9f5c434dbd02f5fab8ef2fec  gcc/cp/cfns.h
! aa4071bfecf6b015c47cdbab9841661a  gcc/cp/class.c
! 52c149e840d6ef546324992e040dffc9  gcc/cp/config-lang.in
! 281b240e64442eca3828a39ab3450365  gcc/cp/constexpr.c
! 2d187983f45a0e24913874acf4ab80b9  gcc/cp/constraint.cc
! 774b12ba7796f225fc0b3873743b4046  gcc/cp/coroutines.cc
! 3adde1f450aedb33649d2497891e5bc6  gcc/cp/cp-gimplify.c
! 9f675ade86f6f438186c3359d251522d  gcc/cp/cp-lang.c
! 3a17e28f03f7b86b06a0f7f2f1b38ee1  gcc/cp/cp-name-hint.h
! 6546ac35987ddbbd4baddabf4a418fdc  gcc/cp/cp-objcp-common.c
! fc5f614233d1e1aab44be266429426d9  gcc/cp/cp-objcp-common.h
! e5a3c0227c5d7f6f15753ecf70d86dce  gcc/cp/cp-tree.def
! c15606a3bc0492328f29aebce8f255c1  gcc/cp/cp-tree.h
! ad2891a30f319f1059b3cd8cb85c2a66  gcc/cp/cp-ubsan.c
! 9f7577d6131c40516642a76a3cd4b349  gcc/cp/cvt.c
! 80fc2cbdfb0b939d06eb0c83cec629b0  gcc/cp/cxx-pretty-print.c
! f217ad40ae4095f745573953940bc517  gcc/cp/cxx-pretty-print.h
! 2113714dc6eb431ec3b698883f0a86f7  gcc/cp/decl.c
! 2ee48334d4ea854bc0b6138b17db0eca  gcc/cp/decl.h
! 8f6d5e2435483bb9efe75ff263436eb1  gcc/cp/decl2.c
! babde369bad84c4348cbb81fef27de19  gcc/cp/dump.c
! 65e7fee5d2a2ff328b09d262bdeb3b42  gcc/cp/error.c
! ae9a51d72d46922925309791e4610beb  gcc/cp/except.c
! 9ef7eb731264636da96bb3ee4f5d92bd  gcc/cp/expr.c
! bf339c04a11eb1ff6ae77b76d8a44e0c  gcc/cp/friend.c
! af1b9753c30b60683233adf6dc1ebed9  gcc/cp/g++spec.c
! b1ac51933647fe1ccb10f6135b3d52df  gcc/cp/init.c
! 778410400a5a0810061bddb226c20863  gcc/cp/lambda.c
! 1b5fe425de21c6959e8fcf809a4d9bf0  gcc/cp/lang-specs.h
! 8b55a87f580d7fabcd05e1be8bf8678a  gcc/cp/lex.c
! 9a5b5f363f6a7bd9716c92383bbb1288  gcc/cp/logic.cc
! df964d3c9b0c731d24d450faca820026  gcc/cp/mangle.c
! e9bd33d0476c27e8dc7ae163523b0c43  gcc/cp/mapper-client.cc
! 7e088d81d8f48a2718ab084df953d006  gcc/cp/mapper-client.h
! e9215833b37c3eb15eca691a16a697c2  gcc/cp/mapper-resolver.cc
! e9a208e30d27c64ecd8cf48641166778  gcc/cp/method.c
! 42305a8479586d5aa1f847d57d4bf6eb  gcc/cp/module.cc
! 4f44ae45107fb19664c4ea6fc1f9617d  gcc/cp/name-lookup.c
! 7942e2da44ee806a67fc5508fa55227c  gcc/cp/name-lookup.h
! 74ef5d5c783b19f58d24af2f5d586229  gcc/cp/operators.def
! 135e2526b78ff7fba60e97120acd13ce  gcc/cp/optimize.c
! 01006045247b7da33610408f203ef633  gcc/cp/parser.c
! 33e6205b133939ff76752369e76e776e  gcc/cp/parser.h
! 3b6f3c5af64170b7fbea87816eec8423  gcc/cp/pt.c
! 185afe382f5cbb5102c5c681fca68144  gcc/cp/ptree.c
! d406c7234ce4950b24a30a51bdfdd50a  gcc/cp/rtti.c
! 8cb37681d9be422bc5accc1da48d5a75  gcc/cp/search.c
! 9ed1ff9cfbe2339c04127e55d60e3ea3  gcc/cp/semantics.c
! 192df66d3d7d2e34c2ba762538f4a0a5  gcc/cp/tree.c
! 7edfa58f1051f1f2f0f0b14381ef44a3  gcc/cp/type-utils.h
! 925b792e840a25f5f671128d881e89f3  gcc/cp/typeck.c
! e4cc977761b34df297265283c01fd95a  gcc/cp/typeck2.c
! 2106dba4a8c689a23ae0c6ed874a57e3  gcc/cp/vtable-class-hierarchy.c
! a1dcb34fdd7a1dfb94f27bc0ac1a9306  gcc/cppbuiltin.c
! 26ece193a6d338989d1c337b7137c072  gcc/cppbuiltin.h
! 6e7d827a3ec222ae6ca62e9c22436e8a  gcc/cppdefault.c
! 35cd9b2cb53030bd2c74276e74b26538  gcc/cppdefault.h
! 5c83369d9944aaedc414144a7e855b95  gcc/cprop.c
! 8453e4603f3a5d2e76b69d883c9bb4e9  gcc/cse.c
! a7c636b547b9582524b0bd62c6178487  gcc/cselib.c
! 857b8e6c3caa1a049b93761fde09419a  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
! 4851f4c4d8a370263326460fe4537aab  gcc/d/ChangeLog
  86f687c485111eedca2eb048294f957e  gcc/d/ChangeLog-2006
  70ed1c47fd9b3f5dd95055642ed79265  gcc/d/ChangeLog-2007
  a7090ab2dd83aa4f44823c17566b83ef  gcc/d/ChangeLog-2008
--- 5100,5177 ----
  f6ebb1c64d8e002666e58a4da0d97ecb  gcc/cp/ChangeLog-2018
  6e4e23f29e05a4d68f00e1e0306fe285  gcc/cp/ChangeLog-2019
  1ea0510e0c84257e030079fda09b655d  gcc/cp/ChangeLog-2020
+ bb663add91c7d9a78c9ac229a8930cef  gcc/cp/ChangeLog-2021
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
! 97d42162cd1affce03ad93b18b14ade9  gcc/cp/Make-lang.in
! 0894932a8b6b8d9efaada34f31a69bec  gcc/cp/call.cc
! 61492df7414a94076d2ea1be4ad1bdd5  gcc/cp/cfns.gperf
! 4af50d4f82b93440a2801cf7837dce2e  gcc/cp/cfns.h
! b5be773065fee0dae8ad1365db0b7200  gcc/cp/class.cc
! 19c35c5421d2b8d512ffa110701df758  gcc/cp/config-lang.in
! 54c5ed7b96b8045db30f668f8aae5d8e  gcc/cp/constexpr.cc
! 82018904e8bb5c78a01011f032cbd45c  gcc/cp/constraint.cc
! 447a66db065559ac7114b71b952a0f76  gcc/cp/coroutines.cc
! eba7366210849b1dea13f9985a4e0c1a  gcc/cp/cp-gimplify.cc
! 59c2096cf662e2d5bf81f477c55c9d2d  gcc/cp/cp-lang.cc
! 6b0b8ba87ad071a0acceb6567386ef78  gcc/cp/cp-name-hint.h
! aaf38ac222fd4e4ac8a0b31c8edbc2d1  gcc/cp/cp-objcp-common.cc
! af9e79c65b8109b071bfab436f53fd06  gcc/cp/cp-objcp-common.h
! 1503b8e00198c339d86d7125d96a92e0  gcc/cp/cp-tree.def
! 09f4a95d875b97cb667e60ae1d020ae6  gcc/cp/cp-tree.h
! 93d92e57a74a5fd9ee45f47650516d4f  gcc/cp/cp-ubsan.cc
! cf937b536f89656bbd216fda359c5f56  gcc/cp/cvt.cc
! 2b73a9fc46b5816431c794ab7d308871  gcc/cp/cxx-pretty-print.cc
! fb305bef28206d87862d28cb7233a56b  gcc/cp/cxx-pretty-print.h
! f5f1d312f0472c7d5dcdbff3cadcb7c6  gcc/cp/decl.cc
! cffc01a2fb968bde8c15a0cf880e57f3  gcc/cp/decl.h
! 6030d4f693563cf87a96a895da20aba1  gcc/cp/decl2.cc
! a5dba9831bf8a38a28a4b412c76ceef5  gcc/cp/dump.cc
! b05e7f9587bf188168b525f48c7479f4  gcc/cp/error.cc
! 3cbe31c3d7fef346bdad1c86ece2bc64  gcc/cp/except.cc
! f77ac3923587bd842accacb8cfc230cf  gcc/cp/expr.cc
! 8f9cf15d3bcc8810ff72801bba8fa135  gcc/cp/friend.cc
! bc3bb34c8c708bd0a0f8320a9bf32d07  gcc/cp/g++spec.cc
! b336f385c458ff448158a74607ada093  gcc/cp/init.cc
! 2529bbe714fb950b03864717e666f237  gcc/cp/lambda.cc
! 2d025243c67abcccf63845127a051ce4  gcc/cp/lang-specs.h
! 7fae35cf7f4dae942a3e4ba08e3fc077  gcc/cp/lex.cc
! 759fe1cd255ae198380e59f3fe7c721f  gcc/cp/logic.cc
! 5385f4754cdecafa61d7b0757c77fcf8  gcc/cp/mangle.cc
! cecdf29155ff81890b25abd8bcc31636  gcc/cp/mapper-client.cc
! c08ce26e97ca92d6e36c71453aac5baf  gcc/cp/mapper-client.h
! ce2227a9821f2a243b3d5735eb021637  gcc/cp/mapper-resolver.cc
! 475b454a38b3292062e999c0725ce2d3  gcc/cp/method.cc
! 0a84043ec790d82519904b16aac10244  gcc/cp/module.cc
! 48a643e9cf584afe2de25b954f66cd95  gcc/cp/name-lookup.cc
! 9a3b7d6aa1623145cbb45cf2be753fe9  gcc/cp/name-lookup.h
! a8c0211ed0a1501bf948aff39864fd1b  gcc/cp/operators.def
! a175d4e76fa35476b1f2d1cef21b9d1e  gcc/cp/optimize.cc
! c8ee353f8eeefe65e8414e32ff63b37a  gcc/cp/parser.cc
! dee781c4e5da6a9ed8a8ed1119c12dbb  gcc/cp/parser.h
! 2cd45f4b2f97ecf403368dba4d95944c  gcc/cp/pt.cc
! 39ea1e495d971ae62d15c580b9b26531  gcc/cp/ptree.cc
! 019a840cac2b53e4499428a540490d12  gcc/cp/rtti.cc
! 763aed8f1a637266774e6466b1b98345  gcc/cp/search.cc
! 6889d0973848592e01d63c33d01878a8  gcc/cp/semantics.cc
! 275a9d807841758d90094457188ee8b1  gcc/cp/tree.cc
! 3ffb7b1546d92ce86c89a0d8324fa763  gcc/cp/type-utils.h
! c536223f3fe2920ab6e6fa4330ff52dc  gcc/cp/typeck.cc
! 5833643279133cc5dbf13a9631077ce4  gcc/cp/typeck2.cc
! 04b0f0bf0cbb8a2ebc3665e2acdd1be9  gcc/cp/vtable-class-hierarchy.cc
! 2ed020c144695714d83ff76c8dc8551c  gcc/cppbuiltin.cc
! 5e7300b7656f214ebad548e0d02d2d89  gcc/cppbuiltin.h
! 22407913ee8063f2b6226b5860f0ea95  gcc/cppdefault.cc
! 6ec17d982c4a82bb37cb668fada8a325  gcc/cppdefault.h
! e8c76f1c7d54af3fadeec185d659c528  gcc/cprop.cc
! d3549242a7c196c98ef8e1502ef6ee3c  gcc/cse.cc
! c15ebaeabf8fddf95734ce274a814122  gcc/cselib.cc
! 189765acdc0ac0093b874a1570e6b332  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
! d5ed22370e5dd622b0b12c32b21f04cd  gcc/ctfc.cc
! 0a1449a42c84460895e02a7a3ee5eb09  gcc/ctfc.h
! c86420385a29dc1b103e1a4cca601af9  gcc/ctfout.cc
! 61c58d6586ba59b7c5fc76c87e411470  gcc/d/ChangeLog
  86f687c485111eedca2eb048294f957e  gcc/d/ChangeLog-2006
  70ed1c47fd9b3f5dd95055642ed79265  gcc/d/ChangeLog-2007
  a7090ab2dd83aa4f44823c17566b83ef  gcc/d/ChangeLog-2008
*************** bceb78f40e91b21668a604125812931c  gcc/d/
*** 5137,5491 ****
  d46228dde1a38d9a1d640d737074c7c6  gcc/d/ChangeLog-2018
  2bdf87680f3ebc496c728540c3e6d88a  gcc/d/ChangeLog-2019
  e432bfc5c605ae0b1beedf0492ad40d1  gcc/d/ChangeLog-2020
! 6898d1f79bb53b436f3709b6ff681517  gcc/d/Make-lang.in
  426254b45d40584d0597c63f3fd1f889  gcc/d/README.gcc
! c828f621dae15ecdebcb6483cc2a359a  gcc/d/config-lang.in
! ac5afa7752655d02611f15cb06067ee5  gcc/d/d-attribs.cc
! 2859511236eb18116b8f704c0893fc82  gcc/d/d-builtins.cc
! 79699adb49367908f31e0aba2aaaa568  gcc/d/d-codegen.cc
! 75ceab1f211190aa8a607de211d92550  gcc/d/d-compiler.cc
! cdd16f63672008a0bf919957625a0ae1  gcc/d/d-convert.cc
! c68cc8b289e0bed7991d8ba214514b52  gcc/d/d-ctfloat.cc
! 96e81ac3898e23a215821a9ca3faac03  gcc/d/d-diagnostic.cc
! 9ad7d94122a0e53b642e569ef01bd97c  gcc/d/d-frontend.cc
! 0410f105b76530dc8ba9c7328b5a0b73  gcc/d/d-gimplify.cc
! 47fd25e95ab17fd0c598380f4dcf775e  gcc/d/d-incpath.cc
! 96052adec5c3542ca6303076367be7f9  gcc/d/d-lang.cc
! 4caed6522470a27c7bc55349d4e41997  gcc/d/d-longdouble.cc
! a80cf667b6cde2503c142172b86d4a32  gcc/d/d-port.cc
! 7706828e60cb570bd143b79764e2026a  gcc/d/d-spec.cc
! 5a2b9ffbe1b7e05aae3752561c81df38  gcc/d/d-system.h
! 269cf45854f0a7573a9c0fee24922f96  gcc/d/d-target-def.h
! 47901d67a22e6cb06354d26f256b1f44  gcc/d/d-target.cc
! e510e0920097f33c1584945cb08e080f  gcc/d/d-target.def
! bd403a5022b9229546c86481f8f9b61e  gcc/d/d-target.h
! 03f0da7679723f02dabef26c57f6b354  gcc/d/d-tree.def
! ea5292cd7004a68b8465731456abc987  gcc/d/d-tree.h
! 70d017a7d035eb8d878bcf3b962c2237  gcc/d/decl.cc
! 3b33e14d54fdeb23eedefb85531d96d9  gcc/d/dmd/MERGE
! 56e5dec62f6a10592384f715f378eef0  gcc/d/dmd/access.c
! 3791d70488bc98342964c686b935b89c  gcc/d/dmd/aggregate.h
! eece32d82156ad5d3988556db9b81f03  gcc/d/dmd/aliasthis.c
! aac81d65f76195316f543667e7745353  gcc/d/dmd/aliasthis.h
! 3ad72c8100aa1dfde82f71857be1971d  gcc/d/dmd/apply.c
! 250076790cfd255b1605b9d7b2129d24  gcc/d/dmd/arrayop.c
! 2c30fc9c278a1f7224273b010c555d77  gcc/d/dmd/arraytypes.h
! 8ff2e360969b815af63ecfebbbca7ef6  gcc/d/dmd/ast_node.h
! e62ac10cab814f6974cf5fc5279c63cb  gcc/d/dmd/attrib.c
! 13d1a3c27646b56ee5b82a61e608a55b  gcc/d/dmd/attrib.h
! 36d4aa9dea4b358f5661dce717f0991c  gcc/d/dmd/blockexit.c
  e4224ccaecb14d942c71d31bef20d78c  gcc/d/dmd/boostlicense.txt
! a51ed07f5da186d65847749167e82c0e  gcc/d/dmd/canthrow.c
! ae717399fd26f7747a58c12390bc9014  gcc/d/dmd/chkformat.c
! 5e28d0ededd7e4af10c1aff346014852  gcc/d/dmd/clone.c
! d05f10bcb9ba460086b710ba23400fb3  gcc/d/dmd/compiler.h
! 40cd3a2487d04f502dd3425f131c26e9  gcc/d/dmd/complex_t.h
! e6183e6da7533442f308852374d80b20  gcc/d/dmd/cond.c
! 5542a5ec234264dd4893910c9fa95200  gcc/d/dmd/cond.h
! 64bbdcaeea500396e82b7395d8e9b627  gcc/d/dmd/constfold.c
! 5328bd316bae93daf3c0c8353e1a5be7  gcc/d/dmd/cppmangle.c
! 50a4587df5508c17ec0ba64e907e6c2a  gcc/d/dmd/ctfe.h
! 52d369590e7009570bb88a39be30427c  gcc/d/dmd/ctfeexpr.c
! 08811bc74b0e84c93dbe62167237b58e  gcc/d/dmd/dcast.c
! a7638e93d90f022b82f6ec861081f2da  gcc/d/dmd/dclass.c
! d33b24b30e8e31a17e3a7e39f3c67bdd  gcc/d/dmd/declaration.c
! d23cee2b9d07116997cebcb46669827a  gcc/d/dmd/declaration.h
! 20e6433cd9095919b4a2bee01595a9b6  gcc/d/dmd/delegatize.c
! 8fe999fa3cb1a5480c72d74362fe5584  gcc/d/dmd/denum.c
! bda548f1854f17362b4dc956996b72c1  gcc/d/dmd/dimport.c
! 7009e0a3a509412f9c69c0c4bcd04043  gcc/d/dmd/dinterpret.c
! 26be8934a4c84e87ab8c06032f54f67d  gcc/d/dmd/dmacro.c
! ae3f5303a6957010e3af61bcd0b976b7  gcc/d/dmd/dmangle.c
! f48ad9578476ae3893dd5a8ae3267e33  gcc/d/dmd/dmodule.c
! 8bd7d5710183f8ba15b7341ad7bd4fbf  gcc/d/dmd/doc.c
! de792e1d70eaba27ca84765b28a15659  gcc/d/dmd/doc.h
! 0b50a9fdfb5fb7e542fc9e30badb24b3  gcc/d/dmd/dscope.c
! 7372f6ae79a6b90d79cfe3858dfed2b3  gcc/d/dmd/dstruct.c
! 9c78611a204489bd89ab19b28315f022  gcc/d/dmd/dsymbol.c
! b0cd857fd633fe19b72db3c598608fe4  gcc/d/dmd/dsymbol.h
! aa33a443b068837b1c537bc089fa5d93  gcc/d/dmd/dsymbolsem.c
! d5b34f72fef968b37217c531947bc6ba  gcc/d/dmd/dtemplate.c
! 7788cc23e060465e5ffdea72fe9c35fb  gcc/d/dmd/dversion.c
! 65a1534ca37e92d9491ddc791ef238ad  gcc/d/dmd/entity.c
! 660ab05c0f664d6f7e48fecd034297ba  gcc/d/dmd/enum.h
! dda2e57e23eed0e5d751a553fb16d446  gcc/d/dmd/errors.h
! 577fa35cc9a9391c0626f6c86b7ff946  gcc/d/dmd/escape.c
! 64a57e95f2aafac3bedd65e080c585d9  gcc/d/dmd/expression.c
! b29b7963b6b682ffdcfde106efa2df33  gcc/d/dmd/expression.h
! 5b8f33811a9cdce4c63c076519318ca3  gcc/d/dmd/expressionsem.c
! 7f44497a182abfa3fb9dc8a2759f0f64  gcc/d/dmd/func.c
! 584c6d25fe0605ec4df673034ed70a09  gcc/d/dmd/globals.h
! 7a04a18c4e7fb560860651d33c970846  gcc/d/dmd/hdrgen.c
! 6827ec6203f1ff8ee8a4ead7512ca7f9  gcc/d/dmd/hdrgen.h
! 2a7b6b9623967d706691446d7c1dc41d  gcc/d/dmd/iasm.c
! a5dbb319611f0a3c62dcebc7aadf230f  gcc/d/dmd/iasmgcc.c
! cbacd4f4d6e27f73e37acead4efdbd70  gcc/d/dmd/identifier.c
! 9a70fe04d8c53782624c99772b05e45b  gcc/d/dmd/identifier.h
! cbc616d68690aabfd8e9a91a5080c4e9  gcc/d/dmd/idgen.c
! 2d05de281e3adf429a6392f0af1321fc  gcc/d/dmd/impcnvgen.c
! 4d688f7e97853fa9c349972eac4abc2b  gcc/d/dmd/imphint.c
! d9d91393b7bc325a70d4a1fc10c5d583  gcc/d/dmd/import.h
! 467015546b2641171ac4c37e30ae76c6  gcc/d/dmd/init.c
! 31ea11155d85df5187943a831a57c2ce  gcc/d/dmd/init.h
! 1450e4c864680e7cdbd2094992289f9e  gcc/d/dmd/initsem.c
! 95c0af3370fb30aa3374ffcaa509f58e  gcc/d/dmd/intrange.c
! 9365b5e4e7a32dfacf12451d68fdc3de  gcc/d/dmd/intrange.h
! 0e6647ca35c8d43705fb29b09ff6562d  gcc/d/dmd/json.c
! 48bdf804491036bffbcbc26be6a4800f  gcc/d/dmd/json.h
! b084a971a8b6a96c616331bd416fc88c  gcc/d/dmd/lexer.c
! d57595937258e947361ea999c0db9692  gcc/d/dmd/lexer.h
! 7f3e76171e1fda79b3bdfbbe3724b3c4  gcc/d/dmd/macro.h
! 85372a43a93b7459bce42818377dd5a9  gcc/d/dmd/mangle.h
! 92fb8f6e169ab24b2f6710cb36fae5e4  gcc/d/dmd/mars.h
! 26a6be934d8259bef0d27b7d681559b3  gcc/d/dmd/module.h
! ac0603127c1649d7cf448481bb50685e  gcc/d/dmd/mtype.c
! f89d40d7ae1dfd6c020cf5f1cfc3cefe  gcc/d/dmd/mtype.h
! 820182635d7ecd2a4891f7785361a3cb  gcc/d/dmd/nogc.c
! 1d367eb0929de9e9b942aee4c5a5c337  gcc/d/dmd/nspace.c
! c81b419170ba590d04d056b044a9a441  gcc/d/dmd/nspace.h
! 23d5c690adfa7d3418f4a33c60905e6d  gcc/d/dmd/objc.c
! 6da314d908369af759772f7e21920b5e  gcc/d/dmd/objc.h
! 505c499e034ba9fe8810721419e11478  gcc/d/dmd/opover.c
! 7f68302b9c0b9920fde3d09d6b171f9b  gcc/d/dmd/optimize.c
! 8b1e6fd6581e22f193e34580297c9740  gcc/d/dmd/parse.c
! 3372a096b210843296205e4680374675  gcc/d/dmd/parse.h
! 54ae5cbd9a68461db24a887f1116fd0f  gcc/d/dmd/readme.txt
! 12df853a0cbc6d057158ed8dcbe25627  gcc/d/dmd/root/aav.c
! 2a230c532cde4b972c6c04e56d197d4c  gcc/d/dmd/root/aav.h
! 84fbb43a2e729c56030cbb7f7b8af4b1  gcc/d/dmd/root/array.h
! 4e8d69d5088aa0cdd6b69948adb9f6d0  gcc/d/dmd/root/bitarray.h
! 092236c0d831e050e416ef1158a7d2cb  gcc/d/dmd/root/checkedint.c
! 6e0d0dc01930ab7dfec2b515706f63ef  gcc/d/dmd/root/checkedint.h
! 65925481fc2951740b1bfe23a332f5cb  gcc/d/dmd/root/ctfloat.h
! 92a8f63d3d96314a39668f6d0ab8febb  gcc/d/dmd/root/dcompat.h
! 2bee808b731d6d94f5a152b27bde91c2  gcc/d/dmd/root/dsystem.h
! cbb5a236c04e6434c7ee08f6d04812fe  gcc/d/dmd/root/file.c
! e4b4bbefed670be811f0369b96d41bba  gcc/d/dmd/root/file.h
! 9a84dc36ffce09b8f3c5b43ff00949d4  gcc/d/dmd/root/filename.c
! 81cc03fcc64679de51adbcbad835a6dd  gcc/d/dmd/root/filename.h
! 00c2a4b8c9fb2e110fd3b09f97727ba2  gcc/d/dmd/root/hash.h
! 836f51b44e4b3c53053ef5d5bf260171  gcc/d/dmd/root/object.h
! a859585d0aff7d03977e3ddd2a180de0  gcc/d/dmd/root/outbuffer.c
! b2ca031327dddfda2c363d801b1ca5f5  gcc/d/dmd/root/outbuffer.h
! 12b9b1920b7cfdaf05c46bb9ea8ce0a4  gcc/d/dmd/root/port.h
! 10e565189a97623df667a8f6f137f1b8  gcc/d/dmd/root/rmem.c
! 4b0c75dbba6e2c81d9d1c8d2911928e7  gcc/d/dmd/root/rmem.h
! 367e670a7324fb4ed8f2adb5b5aadb55  gcc/d/dmd/root/root.h
! 29ad53c6ec4d5aca722b5cf9af394530  gcc/d/dmd/root/rootobject.c
! 76514edd997faf1d4c36f6e899eae972  gcc/d/dmd/root/speller.c
! 2c3c03cbd6f1d3e4f29f90b35477eedb  gcc/d/dmd/root/speller.h
! 4d2c821a6538d45de565c4e0208f5eba  gcc/d/dmd/root/stringtable.c
! 50dd5f59f01133df1de293656686cc0d  gcc/d/dmd/root/stringtable.h
! f480d6504f04aae8a00702230b8f3ad4  gcc/d/dmd/safe.c
! d2617f94be8000960e01a4663dc214d7  gcc/d/dmd/sapply.c
! 957a867c3cd95771d5fa94c813bf6d51  gcc/d/dmd/scope.h
! 318a596d46dc5308e62921eb7801489b  gcc/d/dmd/semantic2.c
! 562d041710d78f335e24018054b15299  gcc/d/dmd/semantic3.c
! 5963ebbbb918bc178d2ff35e0e4cf141  gcc/d/dmd/sideeffect.c
! 8c0befb9b471533fd7d890e0c19e45b9  gcc/d/dmd/statement.c
! 0f1b528d9e383870af5eb8eb5b24fe81  gcc/d/dmd/statement.h
! 6a6ee7b71e2824249d9d3c1c5af9d397  gcc/d/dmd/statement_rewrite_walker.h
! 133a7c5ac7d46c7535a5a9ef8cfb924e  gcc/d/dmd/statementsem.c
! 641aa7d7d8feacbca554d10e49c0ef53  gcc/d/dmd/staticassert.c
! 2ce7bef5338431cd8b7012cd98d75b3c  gcc/d/dmd/staticassert.h
! 58e2a84abe6eaaa7c3217f7780afac41  gcc/d/dmd/staticcond.c
! 2f1fd2714b537e805114a3229e7cdf06  gcc/d/dmd/target.h
! 487f8c23d8d5281f408fad4dbe6689ab  gcc/d/dmd/template.h
! 8eb47cb9e9818109fe6e591d274d7488  gcc/d/dmd/templateparamsem.c
! b5aec8792fe3feebbe9c1aea617e25f7  gcc/d/dmd/tokens.c
! f84fae1a61c553e9207c6f16383a3c8c  gcc/d/dmd/tokens.h
! 7466ed4162908a8c753b05437a185a24  gcc/d/dmd/traits.c
! df2a78f5b00debf6e042e43602e9d42c  gcc/d/dmd/typesem.c
! 722c7e5c7787cc94bd446dabfd0ae0d9  gcc/d/dmd/utf.c
! 2a8e6c6a0addccab2f6c3aea1e6cf238  gcc/d/dmd/utf.h
! 24197b380374c982964e1ded75baa656  gcc/d/dmd/utils.c
! 4f4d6813c8ea201f84a5a083a752c723  gcc/d/dmd/version.h
! 0ab1d21cbddf7956fc552e2637e36eb7  gcc/d/dmd/visitor.h
! 972db9b2d0b44561d878e4726d7bf38c  gcc/d/expr.cc
! b12d8cdbe556dcc8f51b72d45078d563  gcc/d/gdc.texi
! 4ef002e6f38a41b929d9fb7ee2d7d853  gcc/d/imports.cc
! fd28164e92119c746c3971d13fd80699  gcc/d/intrinsics.cc
! 4fe7ce256ef44a3d0fae8336b3d3ed5d  gcc/d/intrinsics.def
! d86483b35c844004766bacbcd21e16ed  gcc/d/lang-specs.h
! dcd9f842c89c2eb8cda2d4e66cfd3a75  gcc/d/lang.opt
! 012a2404a4bf3adc2e1e37947bf01902  gcc/d/longdouble.h
! ea64a4d9552ea8f63780ef71e40ad1cc  gcc/d/modules.cc
! 920201a2a1193fcf0af779565d49ea5d  gcc/d/runtime.cc
! fb778fcb2c41447123e9fc33e23ee981  gcc/d/runtime.def
! 099e663fecd3413f5850ddf7c3ac9f1d  gcc/d/toir.cc
! 8b2d669e1d76dedad749ae14beb662ac  gcc/d/typeinfo.cc
! 5044f1a2a7c0d860d5f118453582b445  gcc/d/types.cc
! ffe6cb4083340e61aa80419c3ac2f84a  gcc/d/verstr.h
! 888f179fbed34dff2cb09f3941f28b3f  gcc/data-streamer-in.c
! bdbe70f8cb140083bbbf06e081f01c55  gcc/data-streamer-out.c
! 16f31b8f1dc7e405518ffebe98f7e39d  gcc/data-streamer.c
! d4d423c0ee3b1e4dcb2c1a57c6f07f0e  gcc/data-streamer.h
! 2ba4b3127094fe9811396e325a5b1e7f  gcc/dbgcnt.c
! 0082072c379913b8e78bdc4214d4ff32  gcc/dbgcnt.def
! 55eaeb62341ca00152e00e7df912317e  gcc/dbgcnt.h
! ed7e3e91446674e4868921e79d3db943  gcc/dbxout.c
! 233b74ba843a379d2b893c010b7bcd2b  gcc/dbxout.h
! 51f20e6dda3d9b8802f5f4d6b1aa5edb  gcc/dce.c
! f04393d6cb3beb8b2a1666d322412d81  gcc/dce.h
! e7ee33ea43a39261fa7fb53cbe532985  gcc/ddg.c
! 0c28d2b61e807cd6c77dd86ad2aee337  gcc/ddg.h
! 358d4f0925f3781c284139e085a43119  gcc/debug.c
! 85a8e4f9dce37242af74a0eccac95d68  gcc/debug.h
! c3f1bea532ad148b97392cd37536943f  gcc/defaults.h
! 78f1f6b9bc278d026982087b11acbb30  gcc/df-core.c
! b6af87c075b8eed58a3bce50a1f7d7ad  gcc/df-problems.c
! 85ab5e157b541546e9db627c1c346bf0  gcc/df-scan.c
! 6c24eea69becc41cb923f65e7276e2d1  gcc/df.h
! 361d7ab2ccda0310c21f287c644b8bca  gcc/dfp.c
! 1af308648d69dc7ed2dcd7eabb379bba  gcc/dfp.h
! ae430a63bfbf8542739c3e61f175b3e7  gcc/diagnostic-color.c
! 72fd0c6450ff590ba12b5a8d55062758  gcc/diagnostic-color.h
! dd28f99406cc56aa197b33e9367dbcb7  gcc/diagnostic-core.h
! 1a211d546c70dfcb742c50b45748c27a  gcc/diagnostic-event-id.h
! a6c1b7e5dddc21d94ace4b61d80162a1  gcc/diagnostic-format-json.cc
! 0eeb8a323ec4d6ebd8d0fab8f8078815  gcc/diagnostic-metadata.h
! e817216f3e948be28b9ad1adad6b0615  gcc/diagnostic-path.h
! 835516e21bf97efb89a4859f4060ccdf  gcc/diagnostic-show-locus.c
! bab3b6fb291c363f78f9ee199e93845a  gcc/diagnostic-url.h
! a60d3b2dcb5f7ad6ac9493f3c600ef76  gcc/diagnostic.c
! 68b312055a870807ee88155e23203ecf  gcc/diagnostic.def
! 2e2faeaaeb8de2147afa0fa5a0723bbc  gcc/diagnostic.h
! 7216b81308a9d590c289dd4cbb71fe6e  gcc/digraph.cc
! 2e73066d8b4ea02ee4d898818dcc1a54  gcc/digraph.h
! 5891833a36e5bd03bd93933e157f18b8  gcc/doc/analyzer.texi
! 196cec6ad9da5c01b63fc1d3d16f3fca  gcc/doc/avr-mmcu.texi
! 37449e85605dd6949a6b283a189a76da  gcc/doc/bugreport.texi
! e5f7c3bb5a62582c943f557cd1c728dc  gcc/doc/cfg.texi
! 36ecd212a288a1cf26e92ece84e21417  gcc/doc/collect2.texi
! d3f48eb6291337b70a8663fea43c5e35  gcc/doc/compat.texi
! 2fab6c33298f75dbf038a0697460e8d6  gcc/doc/configfiles.texi
! 218582d80c3a5be7ef0215bc9e37347d  gcc/doc/configterms.texi
! 3f7bc37ecd638efa9217dbc8049586bd  gcc/doc/contrib.texi
! 21f4ebe254eeaf839f14e76f6d98e0f3  gcc/doc/contribute.texi
! 4be347ce540d68ba609652150fe5767b  gcc/doc/cpp.1
! 9a76a8fbb00e749ffe25a45fc4151499  gcc/doc/cpp.info
! f65281217c508bccc04841ecdb70678e  gcc/doc/cpp.texi
! 9fdf410cbb02057509020001009b7a76  gcc/doc/cppdiropts.texi
! dab6d92d04827098dfeb7e47e827f2b5  gcc/doc/cppenv.texi
! 83f756111b8b2a66eb68208c84092964  gcc/doc/cppinternals.info
! 5d6d94ebaaee9c663ccd7de2d90928cb  gcc/doc/cppinternals.texi
! 0b1d4f633c271ebe3278233e58d2dd20  gcc/doc/cppopts.texi
! 5e580ffce6393e71cea1d0f253c2235e  gcc/doc/cppwarnopts.texi
! 27adb8013ca72a66619395e712c36d90  gcc/doc/extend.texi
! 25e9d455e6d1bd64d661a3b9b7c760d1  gcc/doc/fragments.texi
! b286e11fcfd62c37fae56d6d6c31d1fe  gcc/doc/frontends.texi
! 075239552ebe343c2bb5085533a8d05c  gcc/doc/fsf-funding.7
! 473b3a7220fc066052b0d23dab975f24  gcc/doc/g++.1
! 473b3a7220fc066052b0d23dab975f24  gcc/doc/gcc.1
! cd525b46194415f97726b78f6f2285dc  gcc/doc/gcc.info
! 1b8b50b15f7f7dfd2bfc10cf04e79196  gcc/doc/gcc.texi
! 768bab962d73747ebeb6173aef123d14  gcc/doc/gccinstall.info
! adcb79b32580efc6524846726aa35b34  gcc/doc/gccint.info
! e0b2b9651dfdfcc12ee2da87c17e11e1  gcc/doc/gccint.texi
! 8ecc5776d3632343caeed8164ff92289  gcc/doc/gcov-dump.1
! d9797edde2661ae0e512c8176c290ae9  gcc/doc/gcov-dump.texi
! 6d5d67fa1aa26eb99fab49466de7340e  gcc/doc/gcov-tool.1
! ca308b028dbb9daa82d92ccca156e07b  gcc/doc/gcov-tool.texi
! e4e5030720d97110126eae7ee4d337b6  gcc/doc/gcov.1
! fd33c1e0e0091bc38ffbee7177921ff3  gcc/doc/gcov.texi
! 3bc5fab4bd53960b1121c87434e0b742  gcc/doc/generic.texi
! 30a6efd42c3982776b9e98891bce5e5b  gcc/doc/gfdl.7
! 6c51c207d22bcba97d015676831faa8d  gcc/doc/gfortran.1
! 587484a2f8ff3cf6b292b5c044724d4b  gcc/doc/gimple.texi
! 290370669f02bef1502ada9273e5261f  gcc/doc/gnu.texi
! 5a48d55bc69a52aaf35233f47bebfa85  gcc/doc/gpl.7
! c89eb85139a4c6829a59358310920b18  gcc/doc/gty.texi
! 7bf48d369f1899cf21f53b06605706c6  gcc/doc/headerdirs.texi
! 880f6eba982285c503ae42d08a7abad8  gcc/doc/hostconfig.texi
! f5e8dbf5e49e4652b7393cd31b2dc978  gcc/doc/implement-c.texi
! 41cc199306b69ae81d9b4c2aa273c4f7  gcc/doc/implement-cxx.texi
! b82b1143f78f373e3c76f6958d830869  gcc/doc/include/fdl.texi
  8787976f426cd52da24a856cd41d87be  gcc/doc/include/funding.texi
! 0d74934d0ac0cf69cc54e08ca0abcae6  gcc/doc/include/gcc-common.texi
! b6389c8331319f90193f11ac084e86e4  gcc/doc/include/gpl_v3.texi
  73819b3930a3d4be5d6234070d02386a  gcc/doc/include/texinfo.tex
! 9003c1b6a06c7661deb5ffc0dd0e145f  gcc/doc/install-old.texi
! 7af71caf0d189c0c71b7268793e1400f  gcc/doc/install.texi
! 532fb3c092b7b296ddcec4a99a0c475d  gcc/doc/install.texi2html
! 2bdd76b105eea8ff35649ac4ffb8eb5d  gcc/doc/interface.texi
! 2d88c68d539e547f3a6a0d8382303341  gcc/doc/invoke.texi
! c0f8bb0ef887855830a3b2948920db28  gcc/doc/languages.texi
! 0250c30f49d52e180cf510442a084475  gcc/doc/libgcc.texi
! 3c5a8fa331cb442336e2ff249f1f0aee  gcc/doc/loop.texi
! da6758f13cca915f0ef8e900cadb54e7  gcc/doc/lto-dump.1
! 45b0e2c9fe4e809535fd2665b7efe706  gcc/doc/lto-dump.texi
! 1e20b8193e6a33b7a5258cacf05c5634  gcc/doc/lto.texi
! 959966ff2c0bf27c64314d6bdc06d05a  gcc/doc/makefile.texi
! 3c7466056002814f6c005ea620b49ed5  gcc/doc/match-and-simplify.texi
! 644d59411fcc5a411f795ed8a14af490  gcc/doc/md.texi
! f769222ae6869bc37b118c5be0d92d0b  gcc/doc/objc.texi
! 76a993580876d01ee5f77b3512773a81  gcc/doc/optinfo.texi
! 8bf2bba12f2fb6df2869c9bebd35dc64  gcc/doc/options.texi
! 1b3e1afd821c6fd158f2382616e82a26  gcc/doc/passes.texi
! 6d12d3b04d19748966c49a7c13307be8  gcc/doc/plugins.texi
  0603ab3940871fa2a55ddbd7c2719eb7  gcc/doc/poly-int.texi
! 3c91752a7efcf15b052979c89d7d5bbc  gcc/doc/portability.texi
! a307378c56ec70371c9a935472cbfd42  gcc/doc/rtl.texi
! 47714e0c449e2849262ea093f2a51055  gcc/doc/service.texi
! 2a2424de5e45e8f0091cac3e29487994  gcc/doc/sourcebuild.texi
! 9881c6973427acd0eb815283b1cb2c8f  gcc/doc/standards.texi
! f1f267363c04ab1c0c10737bfc6fa406  gcc/doc/tm.texi
! 8bdc6e08d5f1569316a83b1f755e0d48  gcc/doc/tm.texi.in
! 3bb2055106c22395abf95d30d7743e0c  gcc/doc/tree-ssa.texi
! 282c72a4d6f725bc853239e4ba3ad2a9  gcc/doc/trouble.texi
! 32028ce5e1d5119d8df72ebdf6c2ce1f  gcc/doc/ux.texi
! c247015669b5390c3cc897117efc631a  gcc/dojump.c
! 65b3f7a15fe3cae6dd34ae6675409c86  gcc/dojump.h
! a2f207c234d4682ccf4f6d5aa495a223  gcc/dominance.c
! 365c5869a09e50147416898404673cce  gcc/dominance.h
! 1773e8aac5d05ee9d39ec8ee343becb5  gcc/domwalk.c
! 8cea2a00e1535e5f231ab41a9682ef64  gcc/domwalk.h
! dd64460f06e1554c5fd8e1fe09836939  gcc/double-int.c
! a16c69e33dc1ae6808e9a513e2545d03  gcc/double-int.h
! 36eb0e4ab78e524788de3bca959ad797  gcc/dse.c
! dbe8c1d99e18c5f9a07096a230996e8f  gcc/dump-context.h
! 43bfbc6fc46ac173417adbbceab515a2  gcc/dumpfile.c
! a0e7d76c9e6820c8c60fd7162484c1aa  gcc/dumpfile.h
! 8731562505e8ee4827d4bffe59b4e5e6  gcc/dwarf2asm.c
! b301aca61d8288586da32dd2c3e6c7ea  gcc/dwarf2asm.h
! 301a89cf04dc4a12bb77b09ad0daa51f  gcc/dwarf2cfi.c
! 91c44eafbc6d9c88d6c660c8f2282309  gcc/dwarf2out.c
! f9339d6f2072113fa5a26bc27c7764c9  gcc/dwarf2out.h
! c41773ac5892c49b8063e85e4cf7d803  gcc/early-remat.c
! 5d0344605084d3d22969ca333fe08a2e  gcc/edit-context.c
! f5dacf671f84564bb73a46cd515800a4  gcc/edit-context.h
! 77e8d660e3de5f5101840e1cf555d5bb  gcc/emit-rtl.c
! 3eb40e7e84207f7a1af03674336f1ab6  gcc/emit-rtl.h
! f5dba8046a94c319e61cc3cd8a11ad44  gcc/errors.c
! f22c15861cfd290b1e83fccc65b534d1  gcc/errors.h
! e4a758c0717017e530a551158fe05460  gcc/escaped_string.h
! fa2e545077bed02cd450f695d1d3a3bd  gcc/et-forest.c
! 55e328bfde7103c0f827d2dec978b600  gcc/et-forest.h
! 1da50c5c4a1ecf74913f87f1a132430b  gcc/except.c
! acf60971867c3bda77169fa63b5d9155  gcc/except.h
! 829e4322150b9f6d41f14010e7a57a0e  gcc/exec-tool.in
! 26871eb3fbf33e5b942cb7c8c2995bd2  gcc/explow.c
! 4abb7d44019c01df643228a63102e0a4  gcc/explow.h
! 12ac80aeab1b9a80e5593f38c6250825  gcc/expmed.c
! 461a5c7a292b43e45d34d15a6123aa1b  gcc/expmed.h
! 0713647c19b8efba960495ff009cf061  gcc/expr.c
! 8dcbd4db5ca82e1fb16c9af198cace7e  gcc/expr.h
! 361f6eafe4496f203f4bc0ba87d7ef2a  gcc/fibonacci_heap.c
! 8f6ccc49ae1e2133d15bff71830df67c  gcc/fibonacci_heap.h
! e7e18ce2573a662e30c5fd6b58a1eb3a  gcc/file-find.c
! c7891cb18bd7d53442b00c8f0f6f2ad3  gcc/file-find.h
! 274a4f2064b82d7c0ddbfa2991658078  gcc/file-prefix-map.c
! 53f82142016ce50fc45ed195f5ba2da3  gcc/file-prefix-map.h
! 256e091cd677cfbd1dc3b060bf15c05e  gcc/final.c
! dd5675fa5273cb81f71cfac4c6f14485  gcc/fixed-value.c
! bc014c20048c035718ad5836f6097d78  gcc/fixed-value.h
! 5c89638f196f5a8bdaff99024fe13136  gcc/flag-types.h
! 764f38b5e7ac1b3b4079577b45cb0331  gcc/flags.h
! 891064e4722e3a6a11417a8a1ecd065a  gcc/fold-const-call.c
! d74e6be78940750833ff959c0f5571bd  gcc/fold-const-call.h
! ed239488833de5f1534c1b74cd5ac146  gcc/fold-const.c
! 3812bf5faa6f093ebc438439b278eb2e  gcc/fold-const.h
! 764205aa5c7b9934f7614881a5c9d953  gcc/fortran/ChangeLog
  3330102ad3a0217cba963be6b5eefd58  gcc/fortran/ChangeLog-2002
  d000ab985b1eeb1ad5749f98b8fef99f  gcc/fortran/ChangeLog-2003
  bf42f94f0c51dcc7d8051cc7fda1efdc  gcc/fortran/ChangeLog-2004
--- 5187,5578 ----
  d46228dde1a38d9a1d640d737074c7c6  gcc/d/ChangeLog-2018
  2bdf87680f3ebc496c728540c3e6d88a  gcc/d/ChangeLog-2019
  e432bfc5c605ae0b1beedf0492ad40d1  gcc/d/ChangeLog-2020
! 1978e6674dd960299d771fdb335a9df2  gcc/d/ChangeLog-2021
! 718e75aef088ebea5fb535a8b8f56fa1  gcc/d/Make-lang.in
  426254b45d40584d0597c63f3fd1f889  gcc/d/README.gcc
! 8bf5d890e781b56206924e00d9e49939  gcc/d/config-lang.in
! d08c623f247be5cfa5170417f26d5480  gcc/d/d-attribs.cc
! 69376a17d40f468c514561874ccaf99a  gcc/d/d-builtins.cc
! 5dca0cdf40992dee520f6575dd866ea9  gcc/d/d-codegen.cc
! d392fda0a2aca5434b3f337c80f8f864  gcc/d/d-compiler.cc
! 4a9bfd84ebec7ae7cec1d243ac29e5ec  gcc/d/d-convert.cc
! 8d7ac5eca73cc075b175513a7fc713e3  gcc/d/d-ctfloat.cc
! a45dc5a01e8d32b42d3e48a112e065b4  gcc/d/d-diagnostic.cc
! 1e4c2f76e9781d5cadf99f2a0b628299  gcc/d/d-frontend.cc
! 081862d5113ae5cc3ad55dc801bbe7a5  gcc/d/d-frontend.h
! cb775a32edc8b619a1dbd854af89efab  gcc/d/d-gimplify.cc
! d187ab42ee24bae8e09e49fbd31d3752  gcc/d/d-incpath.cc
! aae72c68626967eb82687e2b42d91aff  gcc/d/d-lang.cc
! 7318ef907f2b33e0b107950b0ea87935  gcc/d/d-longdouble.cc
! 73015d522ced90e2e8281c387934577d  gcc/d/d-port.cc
! 7fd2410570d6cc275d2f4bd82620eb39  gcc/d/d-spec.cc
! 5e7a162f22439e5912f58fe3facdc6ee  gcc/d/d-system.h
! 6f744f77de810e88c4285983c844098c  gcc/d/d-target-def.h
! 4cfffbb4a41292bee39777510036647b  gcc/d/d-target.cc
! 021df40040406e7afee01d7e08802798  gcc/d/d-target.def
! af194d51ac76779c9790fddaa8ca34ec  gcc/d/d-target.h
! e67401e2b9e7e3fd1c7867f4a1dd0db2  gcc/d/d-tree.def
! 983cd26182c7fbe5a28ad6d9693f72e4  gcc/d/d-tree.h
! 7c851f889944daa7cf3317ee0323359d  gcc/d/decl.cc
! 2bb888e37359842fd8f40d7571621452  gcc/d/dmd/MERGE
! c65e8ed7b55dcb02725394bcde7c2da6  gcc/d/dmd/README.md
! c78aa66b3314dbb9a4ff4c5461ba2a60  gcc/d/dmd/VERSION
! fee1124c67987d66a0df1db139185575  gcc/d/dmd/access.d
! a168589ac70f62a374e6ab64288c6d01  gcc/d/dmd/aggregate.d
! 37c6b3eaa80ad090aed4f88a25159f4a  gcc/d/dmd/aggregate.h
! fb522b44e17c9c1ce259581adf6f084a  gcc/d/dmd/aliasthis.d
! d4a45a4e0032dc6e29510e07ca6cba6e  gcc/d/dmd/aliasthis.h
! 90d75a9688dfb98c7f66f79d03238259  gcc/d/dmd/apply.d
! 927cf986a73753881d8404bbb7a7dada  gcc/d/dmd/arrayop.d
! 63ea6c8967a97fb5174eab73eb9aefda  gcc/d/dmd/arraytypes.d
! 921b0d69ec9fac01c1d876cb04630a6c  gcc/d/dmd/arraytypes.h
! afa67342ce21d3c5637b5c4c6a1c1ab5  gcc/d/dmd/ast_node.d
! 6bd1b211b8b28658719048ba49b663b5  gcc/d/dmd/ast_node.h
! 30dc80ea532b838d4ecebbf63bbb2649  gcc/d/dmd/astcodegen.d
! 286cf99ec560ca302694415b55b32e9d  gcc/d/dmd/astenums.d
! 17c48fa4bf6a12d6e6c701737199d0dc  gcc/d/dmd/attrib.d
! 87c62db7cd02f92458e13a3fcfa01026  gcc/d/dmd/attrib.h
! e10a6d4cc21552d9c975f8152deae1d2  gcc/d/dmd/blockexit.d
  e4224ccaecb14d942c71d31bef20d78c  gcc/d/dmd/boostlicense.txt
! 5857f43e9496e3122eaccea53e3cfbf4  gcc/d/dmd/builtin.d
! e805aaabad2ad8a5f29adf99ecdfc4fe  gcc/d/dmd/canthrow.d
! 4ff85f3c50760b861a15844b465f0b64  gcc/d/dmd/chkformat.d
! 3561bd741677d0ec1243c4d87417b412  gcc/d/dmd/clone.d
! 45b88c639fb2c94835612227c0b7e6ee  gcc/d/dmd/common/README.md
! e9dda03570478d2600d0772d69951b1c  gcc/d/dmd/common/bitfields.d
! efba4b6f03c6204eb1a6fd6e4a5df56d  gcc/d/dmd/common/file.d
! 22bcddbebcab315c1581b57b67263181  gcc/d/dmd/common/outbuffer.d
! c78e0af31bed25d8024b7ce5c5a323ee  gcc/d/dmd/common/outbuffer.h
! 69f2c583a7f1a89857c86539f5e805f2  gcc/d/dmd/common/string.d
! 543c4c6bc93c259ba03653b96882691d  gcc/d/dmd/compiler.d
! b38f3823ac758bce13c7ecc5fc4b4c38  gcc/d/dmd/compiler.h
! 9065cc7fadab0c2c207934a610a41a06  gcc/d/dmd/cond.d
! 74860c0d944157e04bd18f83351af59e  gcc/d/dmd/cond.h
! fb8502b92a7f1819e38e02b94537238c  gcc/d/dmd/constfold.d
! 2b8fe3692fa47ab17a6bbff03f10beb8  gcc/d/dmd/cparse.d
! 77870d2956a29cbcf1cba6f2b606dcee  gcc/d/dmd/cppmangle.d
! 4aa8caf479e044b054d893e56cbe962d  gcc/d/dmd/ctfe.h
! f1e0c409377a80c2f093702c1a7b4196  gcc/d/dmd/ctfeexpr.d
! 14575700db973a2c2789dc9e19787fcb  gcc/d/dmd/ctorflow.d
! 20a27b4fd780264ce31625550c1db06c  gcc/d/dmd/dcast.d
! 7ff2162898f0aa768b10071d616e696e  gcc/d/dmd/dclass.d
! 49da6e5caf4c1ec0350da8a14e9715b8  gcc/d/dmd/declaration.d
! 6abca60dbd2e3aa22a72b2350453c5f6  gcc/d/dmd/declaration.h
! 58d03f21c060c81890aaea88286b3aa0  gcc/d/dmd/delegatize.d
! d1554b47cf996a8a108a6b3451e052b2  gcc/d/dmd/denum.d
! 5b4303a98042d0bc691c7227703d20d2  gcc/d/dmd/dimport.d
! 4aa21407b1725eccd282d1e08142e7b2  gcc/d/dmd/dinterpret.d
! 59c569b838ce8dd176921d0caf7d219a  gcc/d/dmd/dmacro.d
! ad01bba7233700817c043fc679040d94  gcc/d/dmd/dmangle.d
! 0765c6c523b4dc8f1816676970466626  gcc/d/dmd/dmodule.d
! 40a2361835476825bb89851d1c6057ee  gcc/d/dmd/doc.d
! f2d33c239db71d4caa28de9031d1e93a  gcc/d/dmd/doc.h
! 570018214bda87aa2ac47e5a35737882  gcc/d/dmd/dscope.d
! d9b0b9593df66b6f6004fe171df0a3b1  gcc/d/dmd/dstruct.d
! 7f7e0bf02588f8e67112aca7940cbd93  gcc/d/dmd/dsymbol.d
! bdcd9fae9c9729e6d486bdcb77f7c156  gcc/d/dmd/dsymbol.h
! e1d08cda4e00a5a26e2b122b94e2a537  gcc/d/dmd/dsymbolsem.d
! 256410131fdd6881fb3a92362c4c3624  gcc/d/dmd/dtemplate.d
! 66309606f60bf4223a3793165e1beeff  gcc/d/dmd/dtoh.d
! 0ee0d7b932860ac1bec982ffa05479a5  gcc/d/dmd/dversion.d
! ecc4eb65f17c436f7acd52c25ffc3dc9  gcc/d/dmd/entity.d
! 3b65e001bd0b54436775fc65eb906cf0  gcc/d/dmd/enum.h
! 4590fc95a8da11567a3591472896a008  gcc/d/dmd/errors.d
! 1447ec42d748faaec4c9dadc3321b31d  gcc/d/dmd/errors.h
! 9543d30480f629845391ec6d19c0d26b  gcc/d/dmd/escape.d
! f62c3acd764eaa2ae5acc91ad782d373  gcc/d/dmd/expression.d
! 48cf81586f4dde3773ab84a856f3c6ca  gcc/d/dmd/expression.h
! a1e10dbcc121e353f9b05745dd595861  gcc/d/dmd/expressionsem.d
! 9f90ce55efd03f86135c7c3719d61d35  gcc/d/dmd/file_manager.d
! 5cb2f2865af80f962854e4ef9849ce03  gcc/d/dmd/foreachvar.d
! 2b4bd315d60c804774e90eef6b80a08d  gcc/d/dmd/func.d
! 12614d5ffda1fa315ba0e7acc9c39307  gcc/d/dmd/globals.d
! b3e2894e834f08ad6cb7e8fa387c352b  gcc/d/dmd/globals.h
! d64cbd4dc1fdc30a4567d6d19dc1d809  gcc/d/dmd/gluelayer.d
! 7df6307744baa22cfc2da296ebd23ce7  gcc/d/dmd/hdrgen.d
! 9f37477a62bfdddcebef93e8ab76dce5  gcc/d/dmd/hdrgen.h
! 0bdf659541bb589e9c14a18cad5798da  gcc/d/dmd/iasm.d
! 29912edfb68b3acf8254de57ad8c1245  gcc/d/dmd/iasmgcc.d
! cb302a9787e6a46075ad4e265a8f011f  gcc/d/dmd/id.d
! cf562110b14887bbeb78fdadc8064350  gcc/d/dmd/id.h
! 87f901805001f18d29fa0f0ad229eed2  gcc/d/dmd/identifier.d
! 607cfd4ca56a08932a90b7bfa3ebd6b3  gcc/d/dmd/identifier.h
! 5d39b8de5c724e603eccc754e981a677  gcc/d/dmd/impcnvtab.d
! d201448e88ed77c0dc9cfbc95a98c525  gcc/d/dmd/imphint.d
! f849bc9dd7b664b7f7026dd687454a5c  gcc/d/dmd/import.h
! a212194ad913f1518ae9e00f35895fb7  gcc/d/dmd/importc.d
! 581439b145b78fd3bd96f2468ffe3c52  gcc/d/dmd/init.d
! 1adbc9c765d87174ece1886f36dd222c  gcc/d/dmd/init.h
! 50e1dbc328d5addf611f82a59c0dbe2a  gcc/d/dmd/initsem.d
! 72b13e79b30263155a3e19554ca27aff  gcc/d/dmd/inline.d
! 2981b636adc891af6c90ac6e5fa5a35a  gcc/d/dmd/intrange.d
! bf7f01e2ccd1e4821da90cfb569e939d  gcc/d/dmd/json.d
! ee4a7e77e3a8e3a48c589b08719f4247  gcc/d/dmd/json.h
! daf8c67ba126913faedb4942624557e1  gcc/d/dmd/lambdacomp.d
! 4025a1bc295482ba09d17b77523943fc  gcc/d/dmd/lexer.d
! 6a70c0e7234f73f19a7c4025b1ecf7dc  gcc/d/dmd/mangle.h
! 462763ffeca5bb34abe4a8fda9f1644f  gcc/d/dmd/module.h
! 2fbc407abeaf95349333ff19b3889e70  gcc/d/dmd/mtype.d
! 70cfc7e33e40918f01d58398635297ad  gcc/d/dmd/mtype.h
! 240cfb439706a6bd62008a93a0ad40d4  gcc/d/dmd/mustuse.d
! 0190cb41cd56a1d6b47b372a3300d4fa  gcc/d/dmd/nogc.d
! 157597331e63d28616f902c9dd385d87  gcc/d/dmd/nspace.d
! a49dd74783ddad8520c6b0a54aab22d5  gcc/d/dmd/nspace.h
! ba8d8daad7b9e2ba7619e03cd03c83df  gcc/d/dmd/ob.d
! 879545a014a25b353a0a0272da2d26ea  gcc/d/dmd/objc.d
! a51ce6c75048c2a0524e08f79897480e  gcc/d/dmd/objc.h
! 678b1b973c726e0fc52c81a86e2d5d1e  gcc/d/dmd/opover.d
! 5d37dc7d63cd8f972228e3ba0c00246c  gcc/d/dmd/optimize.d
! 8ffdb231511e6c57d9ae02d9409fa69d  gcc/d/dmd/parse.d
! 8618a9d2246862dcf37009559abdf2a4  gcc/d/dmd/parsetimevisitor.d
! ee6e0066bd1ecd30866617f68d1387dc  gcc/d/dmd/permissivevisitor.d
! 932b7cfb494fbcbf900d4422f19167bf  gcc/d/dmd/printast.d
! 1e405e3030862fbf076562d0cf79da95  gcc/d/dmd/res/default_ddoc_theme.ddoc
! 4a37ef79cb20454911f8f92e79aa8e99  gcc/d/dmd/root/README.md
! 077e88e12451f44cdb89c0103a116c6b  gcc/d/dmd/root/aav.d
! a89f535f70499db3d2d51e4040004155  gcc/d/dmd/root/array.d
! 6a36e16fdc30b71f3a642d096bd0ec7d  gcc/d/dmd/root/array.h
! 213cb2d99889c0fa3db09a14f4dc43bd  gcc/d/dmd/root/bitarray.d
! 3b6184ce16564f9db3192c18f8371bfe  gcc/d/dmd/root/bitarray.h
! 274be6487a8851ce2a75f65358ff3e0c  gcc/d/dmd/root/complex.d
! 5404266db839312d981463ac4dc6351c  gcc/d/dmd/root/complex_t.h
! f9fa04f3ecd69b8a18d6d49b6a861f28  gcc/d/dmd/root/ctfloat.d
! 167a84cb498bf7237f90c8acea2a6d97  gcc/d/dmd/root/ctfloat.h
! f46911f478518bcba6f975e2317195dd  gcc/d/dmd/root/dcompat.h
! c2c959bd345b89666f9829e195cc26ed  gcc/d/dmd/root/dsystem.h
! 190522e69801526e949b2062bd59f35a  gcc/d/dmd/root/file.d
! 6f9562ea5f0230462501ae57494356ad  gcc/d/dmd/root/filename.d
! dc41d155d02d53601cba15ec9fda135d  gcc/d/dmd/root/filename.h
! 9a3dc9dae37709a0b8641d559a284f7b  gcc/d/dmd/root/hash.d
! b568c77947b43bb9e8c68a2507e34d98  gcc/d/dmd/root/longdouble.d
! 72e9aef38524c721fdefd886743d269d  gcc/d/dmd/root/object.h
! c4766632092f8b49195f485afaba5741  gcc/d/dmd/root/optional.d
! 425506318629a1d90b78fce3666bf6d3  gcc/d/dmd/root/optional.h
! 09bb90f8d1aa334405350019f5ef5a21  gcc/d/dmd/root/port.d
! af6248bff10510177128627692a16782  gcc/d/dmd/root/port.h
! 85177b1081c369679f5e13ac1e53b733  gcc/d/dmd/root/region.d
! e617ef9e1de2a82edd50c36295bb090d  gcc/d/dmd/root/rmem.d
! 1babbd41a1020008accb89ca2723aa57  gcc/d/dmd/root/rmem.h
! 3302f7dabd31d562ca0ede11cf17e641  gcc/d/dmd/root/rootobject.d
! bafd6f5434ca029e7f466818e8560bca  gcc/d/dmd/root/speller.d
! 1495b3d4527fd66394bf312a23e1b2c6  gcc/d/dmd/root/string.d
! 9f4988bd0b6cf0255d907b64a14bbb77  gcc/d/dmd/root/stringtable.d
! 22068cc1a67e72ffc980a5177b4750f2  gcc/d/dmd/root/utf.d
! 920d26625a87b03e320e957a2d32fb02  gcc/d/dmd/safe.d
! cca2ef3c5fa1e2a3e2c2c2e7c6c96887  gcc/d/dmd/sapply.d
! 34a1d2b91ca0f8b2ff88915c36634f13  gcc/d/dmd/scope.h
! d12260d7ec0466e551e1ee6bcdde6cce  gcc/d/dmd/semantic2.d
! ab4bd92be75deb12b1c665bdfa3861ab  gcc/d/dmd/semantic3.d
! 502044c590d3a887430453ad77720c17  gcc/d/dmd/sideeffect.d
! b548fae0283104002ad0a61611dcf0c4  gcc/d/dmd/statement.d
! 71c5ad18c15d21b8242a8c6d1c61c679  gcc/d/dmd/statement.h
! f2d91e35d4e8d435c22d4fc9fa0bccd0  gcc/d/dmd/statement_rewrite_walker.d
! 6be338470c853794c35f7f649b96cd96  gcc/d/dmd/statementsem.d
! 08137d8dcb76c7e45b041a8921289003  gcc/d/dmd/staticassert.d
! e9b292ae75ee5968e0e93bcd59ddaf6e  gcc/d/dmd/staticassert.h
! 57d1ecff5eab6e0f0e0f7670b3814c83  gcc/d/dmd/staticcond.d
! fed980c1b0393b81b1b71493e086c4eb  gcc/d/dmd/stmtstate.d
! 8a0fc8b6f5f7b4baade6ac1dae39067c  gcc/d/dmd/target.d
! cf7bb2e55ee018f8a0150e7cbafb32c1  gcc/d/dmd/target.h
! 0e641b3a221b253e7a8306d09e4b60ea  gcc/d/dmd/template.h
! f25ccb0961ad69b3744b5830b78d9035  gcc/d/dmd/templateparamsem.d
! 516057afb378b08a8422f4bb5fd7f364  gcc/d/dmd/tokens.d
! 118696bac3e2325080c820aa3a09b35a  gcc/d/dmd/tokens.h
! 2e9bd9143d717ee26d29dac662c6145a  gcc/d/dmd/traits.d
! 6606321f8db83322d4434c11c323c3eb  gcc/d/dmd/transitivevisitor.d
! d5204f87064447609d6339627fdff5d1  gcc/d/dmd/typesem.d
! 5aa5e325368a65efe346375ba041b8d8  gcc/d/dmd/typinf.d
! 902f3b3b05c2d3b38211f78222b74ceb  gcc/d/dmd/utils.d
! 484e2455ce6e8669895e099600f824a6  gcc/d/dmd/version.h
! ddc228ae57e81b4b8d64d30be36696ec  gcc/d/dmd/visitor.d
! 64beecc207e7f501df4ed2c6baf7a398  gcc/d/dmd/visitor.h
! 43a04064a5a8531ec60ca2aad0e3e071  gcc/d/expr.cc
! 471a212e41874c6944f051fba77637aa  gcc/d/gdc.texi
! b5572c947784ecef422b1fdb688dbe26  gcc/d/imports.cc
! a64c38b4bc97f8d81f862fa9e5685e52  gcc/d/intrinsics.cc
! 64c73cd509877a6967d709b72d528b40  gcc/d/intrinsics.def
! 5f46cece4cf39b1190b559bd7a38e482  gcc/d/lang-specs.h
! 47b0991b66e20e7fb6deb3b0c5d726d7  gcc/d/lang.opt
! 2223a0b14c657c8628dde685ca2a7e21  gcc/d/longdouble.h
! bb90980c98a2fb304cb5522404317e6c  gcc/d/modules.cc
! ef51af63f3d28d970fa354b57e27e1c9  gcc/d/runtime.cc
! 34cc9679fc05c8c104e0d7d566c0006c  gcc/d/runtime.def
! 2c6ab4de4d735468d250a15e829c8ade  gcc/d/toir.cc
! 4fe954425663948f256d5b591b6dcca4  gcc/d/typeinfo.cc
! aaeb0e35af05709c56cc84725ebf3619  gcc/d/types.cc
! 7190a15f37d4f7ff57e61d95811688ee  gcc/data-streamer-in.cc
! ed3faa827a6dda47ad1f234f5e7e0be5  gcc/data-streamer-out.cc
! a2b2afc07edacc88155bd02fbddc74a4  gcc/data-streamer.cc
! b3aa034652fe9378e51232cadd507137  gcc/data-streamer.h
! 38f923cc6a0fdbdf677fd095fe354916  gcc/dbgcnt.cc
! 5de751715194526f05710d96f5b21338  gcc/dbgcnt.def
! 05019b56107fd46ea3388faa72f9acb6  gcc/dbgcnt.h
! 85d66fb39ad4e7b58c1c85eb70ce68cc  gcc/dbxout.cc
! 64eb0d8f1af86ed1ff81c51cee520db8  gcc/dbxout.h
! 2b1c8af26a7b59ab521e7e155e08ae74  gcc/dce.cc
! d075db654717c9c8bcb316cbb1f2e40b  gcc/dce.h
! 5212e01db818b1e0a6341642d89c6827  gcc/ddg.cc
! ffea256fc730c237f2321d3c920f8afd  gcc/ddg.h
! 4314e28bca21ba8a100bb89102e92db6  gcc/debug.cc
! 1dc9f8001040e0826b7a38db7b66f5bc  gcc/debug.h
! e04e0ab971a272cf98a0c03386a2ba34  gcc/defaults.h
! 27b4a82493588153035930f04d741918  gcc/df-core.cc
! 7cc1910d78f8cbc03f999a767642156e  gcc/df-problems.cc
! 9a0da8b80ab422998ce18b85244a7a45  gcc/df-scan.cc
! c8db7a8caacb75191f768e57365be4c4  gcc/df.h
! 501abd95cb1ca6134594e6d452dc8cce  gcc/dfp.cc
! 1d60ebc5ee6176b15e6bb026653d1ed0  gcc/dfp.h
! 3928cf08ad9182f01ec98e5e8574808c  gcc/diagnostic-color.cc
! 7464750dedcb31e74a5eae374ef9c416  gcc/diagnostic-color.h
! 6f677b2998d2857a52e2fa86d289dd84  gcc/diagnostic-core.h
! e05dde5222520551c2255da2c2c7cf42  gcc/diagnostic-event-id.h
! d85b16cec8e58d138ba2efeb431946b4  gcc/diagnostic-format-json.cc
! 3b683f244723f7c9c0b0654d5218e71d  gcc/diagnostic-metadata.h
! c9fe5314d7e3d4abdcc430fe9d13fd25  gcc/diagnostic-path.h
! 8c386487c2e38a6dab0fe35ffaff19da  gcc/diagnostic-show-locus.cc
! 4ecf5702c866b85aed5fd4f7d8d42a31  gcc/diagnostic-spec.cc
! f250b85c45f870d1a94280d3b5f33d6e  gcc/diagnostic-spec.h
! bd575057397d98c2ebb0e9d2cd0bf2e0  gcc/diagnostic-url.h
! 6969e90e65c92eaeab5b369f25a3ec0d  gcc/diagnostic.cc
! aeb30115d32d92c071c21455b168a757  gcc/diagnostic.def
! a3ceb8a0362a43c2fcd99cb29e1dfc64  gcc/diagnostic.h
! 4abcebccda704b5459132b50c1a41479  gcc/digraph.cc
! 9c15b06626075c48695b2978a224667a  gcc/digraph.h
! ecdbfb57ce381d670cfc28b407341a23  gcc/doc/analyzer.texi
! aa1622a854139a4e3a9cff7d135929ba  gcc/doc/avr-mmcu.texi
! 07ad7c31bc22a55f1cc8f82cdfbb2cb6  gcc/doc/bugreport.texi
! 2e6791fec8df18e66c12b1a2078e8176  gcc/doc/cfg.texi
! a32d4b37e98def59fecbefe9651f80e2  gcc/doc/collect2.texi
! e6ac52160ef064eac82f02f0376d855f  gcc/doc/compat.texi
! aa3b7596dd5b6f06217a90d7090a99b9  gcc/doc/configfiles.texi
! fbce9ef3057c5f46171c7f3214e3bd9b  gcc/doc/configterms.texi
! eb2a47d945ad5f919fce2e58dff16598  gcc/doc/contrib.texi
! ebe9d4f914f26d51d300bb1949a5014b  gcc/doc/contribute.texi
! 5e4f0365f15c898745703793f1519bd7  gcc/doc/cpp.1
! b6e4ff118e743cf17ce535c6990542df  gcc/doc/cpp.info
! 42df7076a2292d64e19b48fc9937d922  gcc/doc/cpp.texi
! f06003c25ea278478f8d118f1aa63c83  gcc/doc/cppdiropts.texi
! 6b35517a77153b269c71dd54e78e7cf2  gcc/doc/cppenv.texi
! e2c6d6c5e7cbc6c7f25f7106c849f31b  gcc/doc/cppinternals.info
! fb4b91ad27bb3454d9988d80aa141644  gcc/doc/cppinternals.texi
! 89c03a16115e31cdb6eea620adcecbf5  gcc/doc/cppopts.texi
! a6ec6f6984012460fa04c405c52a8edc  gcc/doc/cppwarnopts.texi
! 746fb29bfdc008947e24033ae78d9020  gcc/doc/extend.texi
! f78fa1359032f84915fdfb60653ea30e  gcc/doc/fragments.texi
! e3001342aaa637f17a507b55b36479bd  gcc/doc/frontends.texi
! bced38b01e1103db85214df25d5121be  gcc/doc/fsf-funding.7
! 28b7b46c169c7b00fec17f86fc21ec2d  gcc/doc/g++.1
! 28b7b46c169c7b00fec17f86fc21ec2d  gcc/doc/gcc.1
! e6f2e95a2238396125d166d32de05300  gcc/doc/gcc.info
! c6b0b2d1fe3f28a04931a2a794048df7  gcc/doc/gcc.texi
! b785eb658c4e586541e549d752c37670  gcc/doc/gccinstall.info
! 5132ae56f913fdcdcb5abc2e55f67a95  gcc/doc/gccint.info
! 83afe7721012ae63b2ecff4e1ebbd1a9  gcc/doc/gccint.texi
! f9f864eb39f8a6711a06155f289a3542  gcc/doc/gcov-dump.1
! 16145e16ee9428009371a59cc1659d32  gcc/doc/gcov-dump.texi
! 5018afc28f00cf4a1f8f53d595263467  gcc/doc/gcov-tool.1
! f234ef2a5d2f8fe46b7356d02c709f19  gcc/doc/gcov-tool.texi
! 1eb7a1b5067f2260145d6c1b1253147a  gcc/doc/gcov.1
! 6bd61a8c28ffcb5521e74ade47e2ef45  gcc/doc/gcov.texi
! 2f43892b39a9311e39e46a722e46d0b3  gcc/doc/generic.texi
! d74538ee8d65b59c6fb449481eabb9ef  gcc/doc/gfdl.7
! b015d9843b708e5cf77d97a129503b15  gcc/doc/gfortran.1
! ca8fb1fb499d550701f96d68b817cb3d  gcc/doc/gimple.texi
! dc4ccd9843d88bc01c909438dabfd6ab  gcc/doc/gnu.texi
! 8d968d5d5aac957c487e2544d65e89db  gcc/doc/gpl.7
! 8330c58afc651426d5be3104dc1ae1c1  gcc/doc/gty.texi
! 1840b0e622f12b4964da9c34e9416d46  gcc/doc/headerdirs.texi
! db2126fd791cbb35d3fcb1c79364c6d7  gcc/doc/hostconfig.texi
! 753e7bc89e303990d41ceb8744e82460  gcc/doc/implement-c.texi
! dd8c13d054a03c44488a8459a63c7235  gcc/doc/implement-cxx.texi
! a2fcc43c6167952462815a241fa20c2d  gcc/doc/include/fdl.texi
  8787976f426cd52da24a856cd41d87be  gcc/doc/include/funding.texi
! 746a9c5cd326194812af286fabb48964  gcc/doc/include/gcc-common.texi
! 6d27572837b7c19e0d1c4121d3c0ae94  gcc/doc/include/gpl_v3.texi
  73819b3930a3d4be5d6234070d02386a  gcc/doc/include/texinfo.tex
! af1c4475c12bfefe9b62905b03acc2a1  gcc/doc/install.texi
! 83bdbd3efd0ffdf2178c97f60413b453  gcc/doc/install.texi2html
! 8e0aeb138252c5b0cc976f5c554be2d0  gcc/doc/interface.texi
! c73f996f6e8f042b0d04633f8e88788e  gcc/doc/invoke.texi
! 93a82af201aef19ff405acd00915277e  gcc/doc/languages.texi
! 0f02293e0eb313d57f6242dda564ff0d  gcc/doc/libgcc.texi
! de63c5bbc556a96d33ce1ee36e44532b  gcc/doc/loop.texi
! e1f7baeea248d10840363e03120cff8b  gcc/doc/lto-dump.1
! 701872dd40d1ad8a34b97404ea51aba7  gcc/doc/lto-dump.texi
! 408827455143000e36d847cc841a3315  gcc/doc/lto.texi
! 56814e4949686c0010ab623d14f28323  gcc/doc/makefile.texi
! b29c16f802cabd83a2b9ab99c8cf7f20  gcc/doc/match-and-simplify.texi
! b4d6ce4e64c2ebd5d675fcebef26b707  gcc/doc/md.texi
! c1c317f9c3f662e20435b14c06b24c87  gcc/doc/objc.texi
! 01f5b6f58393da9b1dfba72fd36232f6  gcc/doc/optinfo.texi
! 201e0b25e5f3bb1a9e4e14178f1c266b  gcc/doc/options.texi
! d0f4114e702026befeabc3127bc54323  gcc/doc/passes.texi
! 92f6af6911752ddb5a776e6893c9a041  gcc/doc/plugins.texi
  0603ab3940871fa2a55ddbd7c2719eb7  gcc/doc/poly-int.texi
! 609761190ed46487404ad82b8a4f4d06  gcc/doc/portability.texi
! 0ead564edff5d6f37e02427bff13626a  gcc/doc/rtl.texi
! 7e984008e99ff7653a2765f54d15a23a  gcc/doc/service.texi
! 40c59ebf5e75aec1bb634b424376f7e3  gcc/doc/sourcebuild.texi
! 80d831a61658f6babc86aaf34fc124ed  gcc/doc/standards.texi
! b7e52cbf62f9804dd44a0f24837f2fda  gcc/doc/tm.texi
! a156e2857ed8ffc437abad84c38c2834  gcc/doc/tm.texi.in
! 242990e6b89707d9f405a34379e69e6e  gcc/doc/tree-ssa.texi
! 886b39dc650d07494ed433c0ac3f7600  gcc/doc/trouble.texi
! 90f0b23af0e3d94f0b84a07e589ecba6  gcc/doc/ux.texi
! 3139c73bef440adde14117a338cf3d5c  gcc/dojump.cc
! 49218e327f52caf3b5bcfa6442ff5516  gcc/dojump.h
! fdc55e10241e055875052a421d415daa  gcc/dominance.cc
! 4fbc803e6ecbf2ccc878d921d3950b5c  gcc/dominance.h
! 3f4ea1d3ec775cd593712197fbd6848f  gcc/domwalk.cc
! fd767c68a3a349d9567bffddc6a58548  gcc/domwalk.h
! 44c654b2782b877a79c8abc0b654fa0f  gcc/double-int.cc
! 64c258c2761d4ddc8b585e03ea95e055  gcc/double-int.h
! d41198ff591e1428515b2f4417530b29  gcc/dse.cc
! f632a58265e8b78f0813590dda2827e9  gcc/dump-context.h
! 5305835827f1cc4e15836f28a847814d  gcc/dumpfile.cc
! 59e2e29c1e9187e9ed922d203d72c131  gcc/dumpfile.h
! 16e322e92322d91c83611ce394a492f5  gcc/dwarf2asm.cc
! 361d9fc26df0a2d58c8ff1fedcbbc157  gcc/dwarf2asm.h
! a71b91c784b6166c1b4be181bda6caac  gcc/dwarf2cfi.cc
! 71ac2d69ff39fb99294791dec0cc85ae  gcc/dwarf2ctf.cc
! eeae724f08b54913ece6df74e3a19d36  gcc/dwarf2ctf.h
! f0adc14522f65d8f757f46e202e33431  gcc/dwarf2out.cc
! 3e42c05ab78134fd04c1dc8c269ed921  gcc/dwarf2out.h
! 37794f2c604b388af0205c21ac9c1490  gcc/early-remat.cc
! 4a6f1c497ad523e05aa422bf8fad5d1d  gcc/edit-context.cc
! a2ee41c4742adb409ccdc43c8df10917  gcc/edit-context.h
! 0e3f6502b06f80b5bf42ea6f67e33d8f  gcc/emit-rtl.cc
! f12b0bfacc235b95fc96a7749cc34616  gcc/emit-rtl.h
! 63dfcb100b10ae607acdf81b5f550d38  gcc/errors.cc
! c844952cfe2642f0dd0361d70ec9bffa  gcc/errors.h
! fac4dc8e95eb5eae825a0db47ce1ab7b  gcc/escaped_string.h
! 3b0f4c63c8cea8da78fc4646096cd806  gcc/et-forest.cc
! 9199096b782143b97a1c0b49e6398c40  gcc/et-forest.h
! b81446cad469d50f18943e386f286fbd  gcc/except.cc
! f009c0b679814cf0230400579922b602  gcc/except.h
! d6bf493c0749d890bd5bee8a86e3f372  gcc/exec-tool.in
! 7e0bd768e3f2308a8645fe64c8fac922  gcc/explow.cc
! 4bb0068974444cdffe19b60784f8e189  gcc/explow.h
! 3957c728c29c6a0391a02e0c0ff103d5  gcc/expmed.cc
! ba8393b3e2b8742976d1fc0c4727108f  gcc/expmed.h
! 14b98112a4278c193f01e38da29bb3b9  gcc/expr.cc
! 063529794de14145f9a6e5822e051a83  gcc/expr.h
! 66a613022a116043c27ff79966e7f6dd  gcc/fibonacci_heap.cc
! afc1b29624fc1932c0588c26e81bdae8  gcc/fibonacci_heap.h
! 116161bbd5c5329e61a13a93807648b8  gcc/file-find.cc
! 9a1908e89c4cedc23d7b8cafd6494b35  gcc/file-find.h
! d296a9fbf031636c9cbb9d90df1a55c7  gcc/file-prefix-map.cc
! d0051818c00184510e1a5cf9fd3d2233  gcc/file-prefix-map.h
! 4a9cd658f2b66c395304d1831da3d9c0  gcc/final.cc
! 39766f7f0402e4710761f1aecae6a4d9  gcc/fixed-value.cc
! f7b68b5bf0105bcfb975bf6c1949ca00  gcc/fixed-value.h
! ba26be1a33461d149c9e3304d436ea94  gcc/flag-types.h
! b5865a9b1d197f5a98a75fb462cb0989  gcc/flags.h
! acba3643fd3d7dbe62ff3b7f99130cb8  gcc/fold-const-call.cc
! f1700f1cc85dfe93bddd7114e6202635  gcc/fold-const-call.h
! 532a172b4a79f4f56b57d65e408c4a0e  gcc/fold-const.cc
! 63f13230cb3584d77e9b8a26c6ac5fd8  gcc/fold-const.h
! 328ea5da191b20252c6c48f54575d3ce  gcc/fortran/ChangeLog
  3330102ad3a0217cba963be6b5eefd58  gcc/fortran/ChangeLog-2002
  d000ab985b1eeb1ad5749f98b8fef99f  gcc/fortran/ChangeLog-2003
  bf42f94f0c51dcc7d8051cc7fda1efdc  gcc/fortran/ChangeLog-2004
*************** a71efd3e199a80ee07c7f350cc8fcf91  gcc/fo
*** 5505,5765 ****
  39853cc400101b0b047305cb3e912707  gcc/fortran/ChangeLog-2018
  65ff19d3a00eda2236e8a41b7f46ab5a  gcc/fortran/ChangeLog-2019
  d1595b2ed8fb2a33f6ce0dc595f4f33c  gcc/fortran/ChangeLog-2020
  9e0636f92243fb9b3480e27cefc96749  gcc/fortran/ChangeLog.ptr
! ff3a70a964289eb29172b7a5e086ee3f  gcc/fortran/Make-lang.in
! e4b7aeea57f8a7edeb226df1058af6ed  gcc/fortran/arith.c
! 5478da78bbb9c6f5ec6f4c291556f64b  gcc/fortran/arith.h
! 9ad68060ee5cc6a20a3bcc4eb8bf35b0  gcc/fortran/array.c
! 41d9862a96a73a3888dd71dbfd6a6f48  gcc/fortran/bbt.c
! 6bf670ce7c9199fae127f9c0e2f721a0  gcc/fortran/check.c
! 3717b8a023b319090152a5f6aadaff78  gcc/fortran/class.c
! f5d7a68caf3076d5812b149cf771093f  gcc/fortran/config-lang.in
! 9ec79e4ff334ab1ae73233b75630f91b  gcc/fortran/constructor.c
! 8306e6e55c16d82d8de3979194536043  gcc/fortran/constructor.h
! b860d37e8ed1b28a0e78ef2e1737bbe5  gcc/fortran/convert.c
! b1628a6231ddb7f7e4b2cf44b836b928  gcc/fortran/cpp.c
! 315cf57aecb390202190f4259ba3a36b  gcc/fortran/cpp.h
! ee7a54e5c7f7a1043642f3148aa0e591  gcc/fortran/data.c
! 82bc765451efda646706547a38c09487  gcc/fortran/data.h
! bb6a608fea49bacea5ce0a917f5b9673  gcc/fortran/decl.c
! c4f73bba061adfe9eabf763a1a418e5b  gcc/fortran/dependency.c
! d43b0d544fe709c25b81ee187b848372  gcc/fortran/dependency.h
! fc814ce5ee0d7b357f14b97588a3287c  gcc/fortran/dump-parse-tree.c
! d1cd71bb3644df2833513aea82c56ad6  gcc/fortran/error.c
! 5a8abdc1352d538d51c02a492084d7d1  gcc/fortran/expr.c
! da3a0c04f8f87fdb6697ab1965ac58bc  gcc/fortran/f95-lang.c
! 8353b630bdf330e4d2b8ef9df747b1df  gcc/fortran/frontend-passes.c
! 61d212b06741cc79879806a53df1eaa2  gcc/fortran/gfc-diagnostic.def
! 862a8dcb967ce0c214bce57208763cfc  gcc/fortran/gfc-internals.texi
! 1e9576f9f76b696a9f3ef0d67154e18d  gcc/fortran/gfortran.h
! 83b13c91736e3468e0fe9e79cdc27a1a  gcc/fortran/gfortran.info
! 58ec938eb719edf2ffe5dbfcce4dd1d8  gcc/fortran/gfortran.texi
! 13ef845dc55ae5b20f8afe50368263ea  gcc/fortran/gfortranspec.c
! 8042dcc4cf37a109aa435902c09017d9  gcc/fortran/interface.c
! 02c410f8928702184b16506978d79946  gcc/fortran/intrinsic.c
! 2e04d6a800add4904e0bf8ba5da7b994  gcc/fortran/intrinsic.h
! c09f27d7a8071860d1a900d96da0ec71  gcc/fortran/intrinsic.texi
! c6a48e4292d1489642fbb1664cc3e6c3  gcc/fortran/invoke.texi
! 5d1f82f037a7a8c9483a449ef7c29876  gcc/fortran/io.c
! cfb055fb9cb1a68a9974d4b65003c3cb  gcc/fortran/ioparm.def
! 3a153534afac4c41d573cf0c82caf421  gcc/fortran/iresolve.c
! 074cd74d31e55c226d9f97157593dc3d  gcc/fortran/iso-c-binding.def
! efbaccc5d8e94375f348176fc0781246  gcc/fortran/iso-fortran-env.def
! 0a1b06a8103dcc19be16396515acaa9b  gcc/fortran/lang-specs.h
! 09e0020c10cf80b36c91236e34f4d348  gcc/fortran/lang.opt
! 4c92759881e572b635603ebb42a2455f  gcc/fortran/libgfortran.h
! ae2f02c68f9911672bdb3b401cb210c2  gcc/fortran/match.c
! 7da585148fe4f59ce5a733a65b82746c  gcc/fortran/match.h
! af7a3aa1a1204dd37e34eefa510399cd  gcc/fortran/matchexp.c
! b3b81cd6b5386b281800a93f8e4ade0b  gcc/fortran/mathbuiltins.def
! 6f7fc5d0b4f3b65e166f5d6c5e5f9f8f  gcc/fortran/misc.c
! 34d7f6342ff4b004dd80669ed3646570  gcc/fortran/module.c
! 52a543b51ac574c91c996a85d775d71d  gcc/fortran/openmp.c
! 94fda6c5e12794dcdd5f378023229c01  gcc/fortran/options.c
! ebce0975022c83898880627b1d236b65  gcc/fortran/parse.c
! 35501e834b34f6440232d3c4c2bbd56c  gcc/fortran/parse.h
! 9c9d88bede3c641a5faed0a5f008897c  gcc/fortran/primary.c
! 0dfd0f9a0463797275cb74211f7102e6  gcc/fortran/resolve.c
! 15654692fbf8143321f77d50d70bf5db  gcc/fortran/scanner.c
! e878063bf09025352b6adf6b5d0ab78d  gcc/fortran/scanner.h
! ea3832e9d8c05d62f7fb910e16f84497  gcc/fortran/simplify.c
! 52826d539d76cfcf3218c02df40aecf6  gcc/fortran/st.c
! e5e5b5f672739daa6b4e6407f9759adf  gcc/fortran/symbol.c
! 758aeef05fd4d7d6a4474397ada7c8f3  gcc/fortran/target-memory.c
! 0ce203c000f89bcab4e2f2b5885ec8f5  gcc/fortran/target-memory.h
! ce3ff6e2419c5377d733f854a87eb6b2  gcc/fortran/trans-array.c
! e1d78c99b48125ffad30fedc872dc207  gcc/fortran/trans-array.h
! ec0059b31f88bbb8c77c8501ca451961  gcc/fortran/trans-common.c
! 42b243fa66682aca47b104fdf75790a3  gcc/fortran/trans-const.c
! 08d74bbf02852561cf584f029734d164  gcc/fortran/trans-const.h
! 6f8ae55bd9f6d63f35db16c211fbac35  gcc/fortran/trans-decl.c
! 14d62d3cabdfcfd47bf63ffb587dcaca  gcc/fortran/trans-expr.c
! bf366d42e4c38b769cd37f6d91680376  gcc/fortran/trans-intrinsic.c
! d442a2920715f33cb7ca72f6cf551377  gcc/fortran/trans-io.c
! 43be2b05b7e5fd910ea552fab87c7b34  gcc/fortran/trans-openmp.c
! eaeb250c0757adb537819cf0f257fa05  gcc/fortran/trans-stmt.c
! adac91a5c3e9a289d1e225ac37f895f2  gcc/fortran/trans-stmt.h
! d326420e4ce44493518e5114159f04f6  gcc/fortran/trans-types.c
! a1fc23f04301b08a0068afcd35eff141  gcc/fortran/trans-types.h
! 8cbeb3565f45e859c5c085e783fa0db6  gcc/fortran/trans.c
! b262b4a95cd0df959a318ec78009eaeb  gcc/fortran/trans.h
! 4933a105c1594895df1049f4ba65aa6a  gcc/fortran/trigd_fe.inc
! 83124a3111ee9ddc77f41f656b346c44  gcc/fortran/types.def
! 47606f3caeb8667613c0b0a243ec2342  gcc/fp-test.c
! a7378b0ee32d1a8103f2106f776ddeef  gcc/function-abi.cc
! 85a682a8db05fbb8149ff43de9b26ac7  gcc/function-abi.h
! 3be627fea3a3a6c9f0031cdd2808bada  gcc/function-tests.c
! 0c8a7eb6d8a1230e14ab527edcd7c100  gcc/function.c
! d79e4923da49c9efd0d27575ebe0c3e0  gcc/function.h
! bc49cccf40de468c5af3f7b3077601e9  gcc/fwprop.c
! 628dd8bc4c3033a144ca9d7411e136d8  gcc/gcc-ar.c
! 9b3cde5e018ae1629dad78df7495c686  gcc/gcc-main.c
! 36270fbfd00ae013d66af03d3b996492  gcc/gcc-plugin.h
! 219ebc9f8c4780423b0e00faf25cf15c  gcc/gcc-rich-location.c
! 7c5eb0bd2d135dca8076b6bbc8e46fe2  gcc/gcc-rich-location.h
! a3ee86700ebe6da680866c325a9e6d01  gcc/gcc-symtab.h
! 495f60d858a8cdbeca218ae37d68ebf0  gcc/gcc.c
! 43c0152df742051b3b7f216ea3327943  gcc/gcc.h
! 90734fcaf7c44a435600bae6c4f56607  gcc/gcov-counter.def
! 2b180ee6c8ef5773ae1afe08e2a54ba5  gcc/gcov-dump.c
! e032de0a4f21692633427f5784f1ba2a  gcc/gcov-io.c
! 61c2e6a9bd20c215b89cc0a608b46955  gcc/gcov-io.h
! 9afcd572ff991ca0ef8d882afb91238d  gcc/gcov-iov.c
! 667795832b55dfdeeeba297c67c51ded  gcc/gcov-tool.c
! 813b5200c059254d9a66c1f23d065a79  gcc/gcov.c
! 9ffcae42c1998aaa1d1ad9d8513bf523  gcc/gcse-common.c
! 54daf4578fe36e4c52ee5e02e3543dbd  gcc/gcse-common.h
! 8d9f85a330d647efae671bfb616adb3b  gcc/gcse.c
! 4aa40aaadd49ce353aa1bbbd30f305d1  gcc/gcse.h
  af83e4b4719ee065872080b713d24c2f  gcc/gdbasan.in
! aaa4d9f783dca382190c06942747b88f  gcc/gdbhooks.py
! f7a76c2178455861766b55b2ea6c1a90  gcc/gdbinit.in
! b97506b2880dff907fe0885ca976988d  gcc/gen-pass-instances.awk
! 14f3e6f58d913889ab05499961d1d8ce  gcc/genattr-common.c
! c8daa28b1f2ce679ebe5b81d97a39bf0  gcc/genattr.c
! 857bce67d2baacb488ee062b6aad37a7  gcc/genattrtab.c
! 5e22519ce3f1209f28adc934102abc6f  gcc/genautomata.c
! dced76e3826cb05f9a04f180df8e979e  gcc/gencfn-macros.c
! e10cb04b2dd3349bc164b72623aad725  gcc/gencheck.c
! c920211a66f60aee1bd685d466ad0b1b  gcc/genchecksum.c
! 3baf30d853d5796d6c4294c6e853096a  gcc/gencodes.c
! 5f09fa48385b2d5d96276f1de8d69132  gcc/genconditions.c
! 2dcb52a0fc3fa4fe0804cf6fce152ed2  gcc/genconfig.c
! dd3c872700fc3cbd561dcd8da99e48d6  gcc/genconstants.c
! 28414f1934057369df9b38283563f07f  gcc/genemit.c
! 5515dbfe6da4ebbeeb7c82287ab99cb4  gcc/genenums.c
! 837b58b37f8a325a85eff474915a9d44  gcc/generic-match-head.c
! 1fe363efff16e5f61dc836ca90c79ac6  gcc/generic-match.h
! 0851ab0217a3550c4694dc56da1d14a0  gcc/genextract.c
! d8284cac8286a7a7d64ac13ec870daa7  gcc/genflags.c
! 950b7513fef07bfbefb505897b6d7448  gcc/gengenrtl.c
! 5dec9be550420ad9483c8c3f8aaea9a1  gcc/gengtype-lex.c
! 8ea8a37c0cf6f91ded53bb6db384da0d  gcc/gengtype-lex.l
! 548a8efcdbfd7022ebabcc0492a34cf9  gcc/gengtype-parse.c
! 87b2b2c69bc05df6161d23040833a374  gcc/gengtype-state.c
! a37cbb582a0ae6a61b86eda06ffb9ac6  gcc/gengtype.c
! 94881ec27434a3f6e7b70357815509c7  gcc/gengtype.h
! 89b650e6804cbe365244e8a1a6c62d2f  gcc/genhooks.c
! 3153b01c6502511189cd27b40fac2dbb  gcc/genmatch.c
! 54cca04c9cb300d0ab0ad99273a73e7c  gcc/genmddeps.c
! 0b1ec8e93aaa85abaf253992e194254d  gcc/genmddump.c
! f1d29bde9cddf2b5a4a9c55cad19d1fa  gcc/genmodes.c
! 573d812be2fa353cda5db820100e6420  gcc/genmultilib
! 9f48352ced1163a4587ebee2051ce0f5  gcc/genopinit.c
! 7e1b609db6d5c123ae6901c930f01735  gcc/genoutput.c
! e26a33688e93a17c6d28f9f1a142a5a7  gcc/genpeep.c
! 9d9e66a6ea9495706ea11325b56ff947  gcc/genpreds.c
! eee65b830d92b08ccefe0305a7ecf443  gcc/genrecog.c
! 7b267fb18416db55766adcdc5040b393  gcc/gensupport.c
! 276b0239802b262fa9255b7d95ff3a50  gcc/gensupport.h
! ee26a74157272577fcd385b7f1cc5e68  gcc/gentarget-def.c
! f57cf443d784ee093c2c5ba1ab06c0bc  gcc/ggc-common.c
! 579c17aa1e95997848af63105dab74db  gcc/ggc-internal.h
! 17c34c7502be938cc4e7b52a66470c53  gcc/ggc-none.c
! 7bfeded454c8971d940aa36328e9cf6d  gcc/ggc-page.c
! ecf8d9fd8c961c7c8143950d0dffa4ad  gcc/ggc-tests.c
! 8c4c95942af92fe1df1464e359aa00e5  gcc/ggc.h
! 586c2cab2915e4fcfc60eef73c5aa542  gcc/gimple-array-bounds.cc
! ca2520162ec5b4b80e57e4f46690e4c6  gcc/gimple-array-bounds.h
! 0050f15d9f43589b0e2f6d2502d4f292  gcc/gimple-builder.c
! 6a22e0a2c2e663ac23a368e20fa1fe9c  gcc/gimple-builder.h
! 036cecd86563f6394e964dc1bb605895  gcc/gimple-expr.c
! 6b5f6aa1713f09243d1159a75ecd7976  gcc/gimple-expr.h
! 9864da12a5fa4e9052e9a2444e49bdc1  gcc/gimple-fold.c
! 19b1447666533a8e534b359325a40685  gcc/gimple-fold.h
! ae9c923ed2c8a79aaa3ca54a22881ef0  gcc/gimple-if-to-switch.cc
! 16b85d8ae65dd9edd56bbf0d38b43aa9  gcc/gimple-isel.cc
! 58eb44f6e28f845aeb88cd375156397c  gcc/gimple-iterator.c
! 6fd4aeb4f777fa04b054a2682011f913  gcc/gimple-iterator.h
! 3471799f94511265663f55a068653533  gcc/gimple-laddress.c
! 9aa4fcd22acca88f36a4dc821ff9751b  gcc/gimple-loop-interchange.cc
! 4f9daeaa792ad229f0c1259463bf8d30  gcc/gimple-loop-jam.c
! b7bd86f1e8a440a81a812eede18b61dd  gcc/gimple-loop-versioning.cc
! 70563b4bd57a3dbe8cc827ff4e0397f2  gcc/gimple-low.c
! e0253d8d1270dfd7059ea3316782e941  gcc/gimple-low.h
! 5e921a612fa7af507b01e317dac6506c  gcc/gimple-match-head.c
! 0a23920f2e7d4e6b624470e6baea813a  gcc/gimple-match.h
! 5f9cee3b6f666df0127815986e25eda3  gcc/gimple-predict.h
! 0780ae9f7851e54c1063bb2e57d983ab  gcc/gimple-pretty-print.c
! 3ff1cbafa7db47dee0ab5fd8570498e7  gcc/gimple-pretty-print.h
! 6251cb7e5299049ffc5bb28857b8fc35  gcc/gimple-range-cache.cc
! a5f6cff42cef43846738248ba84846e3  gcc/gimple-range-cache.h
! 68bc95c68a5d3ef09ad9d5cb40fc7394  gcc/gimple-range-edge.cc
! 723ede0e82e5626cca6fcbb16ff6f571  gcc/gimple-range-edge.h
! 13413d7cf635bc5431995e5c77657b3c  gcc/gimple-range-gori.cc
! f61a8ff332c742ad4bc134e6154e28c7  gcc/gimple-range-gori.h
! 7a4d5971631f3acee678a1d6bbce867f  gcc/gimple-range.cc
! 2c5c9f17c97ce09156b83e764c567987  gcc/gimple-range.h
! e3b577427781a76267364ec3efa54f51  gcc/gimple-ssa-backprop.c
! 07f08a30d5a28800e5c2ea26c217d226  gcc/gimple-ssa-evrp-analyze.c
! e5bfc6ff4a07f1f5591f18021b017283  gcc/gimple-ssa-evrp-analyze.h
! 84bc1f1b8180d0896c63d8a631d2008c  gcc/gimple-ssa-evrp.c
! f96959d86d6678e1a7fdf38b6e127bcd  gcc/gimple-ssa-isolate-paths.c
! b6d23698f494095d6a2998fccaa3f8b9  gcc/gimple-ssa-nonnull-compare.c
! aced049779ec566808a605d67e3515fc  gcc/gimple-ssa-split-paths.c
! 1d753067436e68b37dba76eb3eb35ff8  gcc/gimple-ssa-sprintf.c
! dee9befafe077802d5e58f3a7762b100  gcc/gimple-ssa-store-merging.c
! 3e8d8a511e1e447865e4c63ef9d1f0dc  gcc/gimple-ssa-strength-reduction.c
! 3ac9a7ed69ad0ec6148c051f54d9a4df  gcc/gimple-ssa-warn-alloca.c
! 3a0b8da8458ff788072a9389e1e51b1b  gcc/gimple-ssa-warn-restrict.c
! cc4f6240e418b12d3aa1b0720c58934c  gcc/gimple-ssa-warn-restrict.h
! 495e1a1ff15867379be8e30c1585c550  gcc/gimple-ssa.h
! 86582d0b25b77eb58dcf6d25a67f7bd7  gcc/gimple-streamer-in.c
! 179791432d914d2b4a5bc300bb27ecda  gcc/gimple-streamer-out.c
! 1af5ae446d1fd8b5441632e7a4149331  gcc/gimple-streamer.h
! 7f6a6f2dbf33fae398e9a806a5c9062c  gcc/gimple-walk.c
! 3e8f456bcdd4750b0b7c2ea2a509e3a9  gcc/gimple-walk.h
! 67199d51c4d34de1eb3af60b6df1343f  gcc/gimple.c
! 4817f53b0ae7f841b0a2912852140f7a  gcc/gimple.def
! 3be7edbac1a6dd8eb1720166985e3bc6  gcc/gimple.h
! e9afce92bc9364d0b5565b93832dc4e8  gcc/gimplify-me.c
! 224fdd664cd0f580204dafa07a303940  gcc/gimplify-me.h
! 284ca005300b978d37714e82aea46d93  gcc/gimplify.c
! 856b47f3f4a5bbd47b90f36cbc2fb193  gcc/gimplify.h
! 911cef7485ca1b6df98ae6a03e5f003a  gcc/ginclude/float.h
! 5c63f78b341c5627e43ead0434e54a83  gcc/ginclude/iso646.h
! 84c0769f63e132d952967dc0a0b29d1c  gcc/ginclude/stdalign.h
! 5e924f4859a353cfe5630921ef7419e4  gcc/ginclude/stdarg.h
! 49e6aeabbbbf77f94a706ba24b179f19  gcc/ginclude/stdatomic.h
! bea975cc4cca239db9592b67c10bbd12  gcc/ginclude/stdbool.h
! 7b88ecc021d23f09422baa2497aa596b  gcc/ginclude/stddef.h
! 1531f66f300c490fe42e9063e778f3a5  gcc/ginclude/stdfix.h
! 62c6e3d3db397c54df8b35ab5256d7c1  gcc/ginclude/stdint-gcc.h
  f85aa0745c3e9e0d32fa64753089b2f1  gcc/ginclude/stdint-wrap.h
! f600ba03fe6a2c3cd6c70bcc66153eed  gcc/ginclude/stdnoreturn.h
! 9a059ab5591828a6c3d62d5222c2279b  gcc/ginclude/tgmath.h
! fd1e7b72f05881b3313665c73e2f4da9  gcc/ginclude/unwind-arm-common.h
  8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
! 5081e1e198938204286d03d45535b34b  gcc/glimits.h
! 9539e564fe28bea03e53c4372798beb9  gcc/go/ChangeLog
! e905ea0930382dd7f885f6df4e826e16  gcc/go/Make-lang.in
  60ea054548c83c7f66170073f9f3e74c  gcc/go/README.gcc
! 441e07f72df962bba81b0fca4787a622  gcc/go/config-lang.in
! 88479225176a663f9ecb3aed6b241ad6  gcc/go/gccgo.texi
! 1bfe12d4d420dea782bfc43f73f50629  gcc/go/go-backend.c
! 36093348dc9f5bfa786624db0014386e  gcc/go/go-c.h
! 19e44eeadca75d05b7d0722682e1268d  gcc/go/go-gcc-diagnostics.cc
! 7cc5c5737f3346d824976c10bdc0d692  gcc/go/go-gcc.cc
! a64e89816f7f16f13cbd044f4c56515e  gcc/go/go-gcc.h
! c48761e2b947c22f3ca2f5eed4f8cdf9  gcc/go/go-lang.c
  c5d6aaa7e913ef205113a2bba2e5206f  gcc/go/go-linemap.cc
  91c7a6773e207cc086ae0888826cc3c4  gcc/go/go-location.h
! 3a0ebd75d30f31d898f41763a9326903  gcc/go/go-sha1.cc
! 5345db4cb134b73159be87b15d9d9fae  gcc/go/go-system.h
  5d4950ecb7b26d2c5e4e7b4e0dd74707  gcc/go/gofrontend/LICENSE
! aa0db5ed26a6f9c114e0fe721f06541a  gcc/go/gofrontend/MERGE
  3a55d95595a6f9e37dee53826b4daff2  gcc/go/gofrontend/PATENTS
  31c16a91d82f8ad3319819ebbba2d17f  gcc/go/gofrontend/README
  38df5a2d45162cae2b454cd17fa8df7a  gcc/go/gofrontend/ast-dump.cc
  456b6d4cc785176b6e3eb0c685a93b39  gcc/go/gofrontend/ast-dump.h
  ea386ab9fecd1e6a9d230d51e7190683  gcc/go/gofrontend/backend.h
  f4698d5111935f1c789b7efd8ed91a74  gcc/go/gofrontend/embed.cc
! 374636e1427f469d60b661c2c2ec21d0  gcc/go/gofrontend/escape.cc
  ee8753eb1d8ca2fa168f6a71d3991455  gcc/go/gofrontend/escape.h
! 41e47500f61f75ad228a7d51a2df529b  gcc/go/gofrontend/export.cc
! b72c14ae63bb87f55620d747d46e54c7  gcc/go/gofrontend/export.h
! d2b69e49a586b9ff0ca76cd68f00fbe5  gcc/go/gofrontend/expressions.cc
! c87e0f8b68d6e4e8638ca14783d9c684  gcc/go/gofrontend/expressions.h
  bf7f8a519eadaa90804fe15cfa37ba6f  gcc/go/gofrontend/go-diagnostics.cc
  accfd5ea41ee789e6adbaec31a228cfe  gcc/go/gofrontend/go-diagnostics.h
  19e66447fa803385274b4e1a7501a4d5  gcc/go/gofrontend/go-dump.cc
--- 5592,5866 ----
  39853cc400101b0b047305cb3e912707  gcc/fortran/ChangeLog-2018
  65ff19d3a00eda2236e8a41b7f46ab5a  gcc/fortran/ChangeLog-2019
  d1595b2ed8fb2a33f6ce0dc595f4f33c  gcc/fortran/ChangeLog-2020
+ 6c371391409a36c72d51955cc875301c  gcc/fortran/ChangeLog-2021
  9e0636f92243fb9b3480e27cefc96749  gcc/fortran/ChangeLog.ptr
! c93756bb4ee576f99f47f43be795e510  gcc/fortran/Make-lang.in
! 46a0fa04d75ac5d094cc13ebf4523aa4  gcc/fortran/arith.cc
! a6b3571c6f914f0f4fd835ef362e3224  gcc/fortran/arith.h
! e5fe7459d4774cece4e4c90977aca196  gcc/fortran/array.cc
! 9c32e870aec1383306e74eb7c6c8540b  gcc/fortran/bbt.cc
! b84f0b3767a656fb2d64cac8bbc2be55  gcc/fortran/check.cc
! 7ef2d4ad3a6c2fd671004682ecd6ac7b  gcc/fortran/class.cc
! e11a3080d41189997988eee6de9d778a  gcc/fortran/config-lang.in
! 5fdcd0ceb00212849de377cccc9d450d  gcc/fortran/constructor.cc
! f2515ce2d4eea4ae49c7f087b70eeb2a  gcc/fortran/constructor.h
! 0d6a640c77ab2f533c387ee00c6e1a68  gcc/fortran/convert.cc
! 6a8b6a08b09189e7a2a8e74dca8c6388  gcc/fortran/cpp.cc
! e56cff2ad51a1b28676176eb3400bc07  gcc/fortran/cpp.h
! 0da9a435768cc177cbc0d04823ce91bc  gcc/fortran/data.cc
! 89e31dec4e882508d7059aab12320a40  gcc/fortran/data.h
! 2c311c45d19d97e7344213cbdb36ce14  gcc/fortran/decl.cc
! 1d786ce4b09d236a55fd49eaeab15b04  gcc/fortran/dependency.cc
! 250e4847bac7531e425b6d1630dbc690  gcc/fortran/dependency.h
! 7dedf6e1d3115c5180ae49f0802cabbc  gcc/fortran/dump-parse-tree.cc
! a148fdc43cbb2bba84d76259bebc9f8f  gcc/fortran/error.cc
! 433b097c93f4ae3b437c8542d45b3b50  gcc/fortran/expr.cc
! 54eab6083e18094acf7a347aad646504  gcc/fortran/f95-lang.cc
! 91906f34da01b8f98358ab7964500d4e  gcc/fortran/frontend-passes.cc
! 3842572731984dc9a83b47e901428f04  gcc/fortran/gfc-diagnostic.def
! d7b4e8b2f31d751e0a42d341c615dc7f  gcc/fortran/gfc-internals.texi
! e30d5ebe7a924a96667b64684e834883  gcc/fortran/gfortran.h
! 26ea048d0092169e0b0c725fe2560174  gcc/fortran/gfortran.info
! 5c2caffc27a96f9251901dd1c9cfd20a  gcc/fortran/gfortran.texi
! b4bb48ba890803cc506acdcb573cfeae  gcc/fortran/gfortranspec.cc
! 440908778ddfe905c1b52cb3c39ff24c  gcc/fortran/interface.cc
! c4ce7c36c0063f4af6a2d1fbe9baa85a  gcc/fortran/intrinsic.cc
! d09791007ba9b64b832806a486152ed3  gcc/fortran/intrinsic.h
! 9c3f90c89e00cbc99c598333c76cd336  gcc/fortran/intrinsic.texi
! d99f0c16e1a2b815183e0d83b0a602cf  gcc/fortran/invoke.texi
! 36547d2bc9ccba00d020590bec9e71d5  gcc/fortran/io.cc
! 4d85156eacc66f030b89af30bce754dc  gcc/fortran/ioparm.def
! 31d862bff0a865c5fdbe4fe7f5dbb421  gcc/fortran/iresolve.cc
! 8f42f4ecedfd1939ba8180d7d4121ef8  gcc/fortran/iso-c-binding.def
! f008d3a6da41af237126d87d5692c6c2  gcc/fortran/iso-fortran-env.def
! 04bbcb96ec60c56c43fb9ebda82e9ebf  gcc/fortran/lang-specs.h
! 62f204ebbefe65d09c98419e35d9000e  gcc/fortran/lang.opt
! 9c038ca4b80301361e5d72ee2a327908  gcc/fortran/libgfortran.h
! 081f01fb07e16c90bbf9a92a1c1c7858  gcc/fortran/match.cc
! bd0ab91f17def7a653d5ff09c58bb9f4  gcc/fortran/match.h
! 10fbc914f1a899407778deafa7f5875f  gcc/fortran/matchexp.cc
! fb7c80f6f5f88ba80c7723f53eb05efe  gcc/fortran/mathbuiltins.def
! 7d2e2d3ee5b1e4e1964aaf46366e0f08  gcc/fortran/misc.cc
! 6904178505bd48ed077b64999749decd  gcc/fortran/module.cc
! c875691be60c3d4494974b4a38712f97  gcc/fortran/openmp.cc
! b48cbfda0304562a0eaac72d7b9a6d90  gcc/fortran/options.cc
! 6a493c4fffe5ed58d68e8a971fe3feb5  gcc/fortran/parse.cc
! 0a48590b2bb36243e9f4a9d98183afa0  gcc/fortran/parse.h
! f7c808481dad7f1cedf562479e7304cd  gcc/fortran/primary.cc
! 39fe88d67db352c77457e7795a85e44d  gcc/fortran/resolve.cc
! 0573ab635ad3ccc4839e1f4636811d27  gcc/fortran/scanner.cc
! caa38bdbcffb68e954b6424c1c3c340c  gcc/fortran/scanner.h
! 9f6062c67c64420cc08feb5e49baf251  gcc/fortran/simplify.cc
! 4a7855d2420481b81f4ff31d48066f24  gcc/fortran/st.cc
! 73f73406077c6e2dd531ee2929fc811c  gcc/fortran/symbol.cc
! c6d5b41165a24519b1877dafd17780c7  gcc/fortran/target-memory.cc
! d58dc979add87c7e22ecf3fe8ea7d636  gcc/fortran/target-memory.h
! 0098f5d21665f0d43af91ad6fa9a32d7  gcc/fortran/trans-array.cc
! 3c63baa722bc0668b7e98b40bceb9bbf  gcc/fortran/trans-array.h
! 451f5b83f594fdd9a854e00dbc66fd9b  gcc/fortran/trans-common.cc
! 60dfb80d5ab4bb8f574d40380456a8ef  gcc/fortran/trans-const.cc
! 7468f5a70b780bf92036ea75d5312bd4  gcc/fortran/trans-const.h
! e78dddca7c99259402a2748babcf45b2  gcc/fortran/trans-decl.cc
! 1a021b4742f6c0e8262a45254a67f9e5  gcc/fortran/trans-expr.cc
! 217c59692c5b9657a1741ab153b81fa1  gcc/fortran/trans-intrinsic.cc
! 85141448817f23e9ee692c3b7b763c75  gcc/fortran/trans-io.cc
! 6ab25b4e0dc1d9dbd4f00a17fe0c3a90  gcc/fortran/trans-openmp.cc
! ee76646a8bbb271f793e1e8867f57d71  gcc/fortran/trans-stmt.cc
! c1090320bf95fa2c75837c319782984c  gcc/fortran/trans-stmt.h
! 3fc352317589cad867e62acd055db1ab  gcc/fortran/trans-types.cc
! cb13a76438e8c91e7a9270ff09482701  gcc/fortran/trans-types.h
! d70d45e7b5f84d54baf2f1a446348ab7  gcc/fortran/trans.cc
! 6e787224d6174622e37e10948fccd5ad  gcc/fortran/trans.h
! f9cda8b36d0d9d128f86b927658c42bb  gcc/fortran/trigd_fe.inc
! e407ce5e464ee5640a9730448c53532b  gcc/fortran/types.def
! 7c762223a8c6ca66407cd05adcd27cc0  gcc/fp-test.cc
! 45bd02cc1348dbf322ee97df8ac53c43  gcc/function-abi.cc
! 4c0c4b1c00c37358843ae3349346bdec  gcc/function-abi.h
! 4e2f34bb1401e871b7cca9babb99ec3e  gcc/function-tests.cc
! e16fa11ac1c539a91fdb10cf057b5854  gcc/function.cc
! d2dfcae29be9c50d45619a7f227e9a21  gcc/function.h
! 4cc6ef071dbb01f6c1e057a1f76f44f0  gcc/fwprop.cc
! 254a48c75187b7e47b94abf826e16c94  gcc/gcc-ar.cc
! c21ee37cecaf1b25e3bd8de9fb19e968  gcc/gcc-main.cc
! 43e771c4505a7e453452149b727fb8e8  gcc/gcc-plugin.h
! a85c939fa43dfee6075872172327e4f3  gcc/gcc-rich-location.cc
! c6a1992de949bd6bd63861fbebe06618  gcc/gcc-rich-location.h
! 5eba488d62cd83afcd74ebaddd3e2db9  gcc/gcc-symtab.h
! 238116a6e833982312bae76c95470082  gcc/gcc.cc
! 50339e09857ada5c5cbc9c2c74775d71  gcc/gcc.h
! 907e96abb298d108295ecfe939301b54  gcc/gcov-counter.def
! 098804cd843ca0a2ac068140d2023f15  gcc/gcov-dump.cc
! c30b9cc387aceef2ce9681befa2d54aa  gcc/gcov-io.cc
! 070aa24831d93cc52ad4813b0174e113  gcc/gcov-io.h
! 34e11480c937af29cffbe4691740bd0e  gcc/gcov-tool.cc
! 2e0f1f88ae97e4ddf8f2aa90205f228f  gcc/gcov.cc
! 045ad91e52e4a8e546106162f9b7fc0c  gcc/gcse-common.cc
! cdd90826f09f2dda0c34e54bd2d9c7f5  gcc/gcse-common.h
! 768f6714f77b265aaf32f64514974c6d  gcc/gcse.cc
! a61c1608c160c4f7314b09b141f97303  gcc/gcse.h
  af83e4b4719ee065872080b713d24c2f  gcc/gdbasan.in
! 62a709217ff995a16eaf5c71bc7fb5d9  gcc/gdbhooks.py
! 1a05e4281ecdf60c3bb4c99ec1720d72  gcc/gdbinit.in
! dda76c5b5ec0948d9ce70a2bef27cfca  gcc/gen-pass-instances.awk
! 2432cbe939cbb7a5372cde88c946d50d  gcc/genattr-common.cc
! 75da21cfde7e116835aec220cd9be1b9  gcc/genattr.cc
! 819311f444f94a9139c5b08ef130794d  gcc/genattrtab.cc
! 0ba27d303bec1bd1072b35d1e4bf673d  gcc/genautomata.cc
! 1b860d71137ce697637feddef156dce8  gcc/gencfn-macros.cc
! 737436dcf51f8f9f75ab2e2f7e7f4fd1  gcc/gencheck.cc
! 3004285788bb3ea898abf2a24a56996b  gcc/genchecksum.cc
! c00c76b40fd2e003985935f8191dc0bb  gcc/gencodes.cc
! d395633972edfe49f035e7654f42ec7f  gcc/genconditions.cc
! a9a669f4d283200c8f2bc4d9f5d3e071  gcc/genconfig.cc
! 92d112d338c65b76ab1fee6469ef43d0  gcc/genconstants.cc
! 908326f62403d92576d19a6d60a5c16c  gcc/genemit.cc
! 805dc8119200b4c7094d9cf17cce3b93  gcc/genenums.cc
! 1d3175afcd635df7eadd8e24abaae55a  gcc/generic-match-head.cc
! b061e1a9c4a98dd20f874b7c8b25e7d6  gcc/generic-match.h
! f750f2d25d09cf621bc33d71e2d4257a  gcc/genextract.cc
! 1afb6dee14dd76199f347ef290ebb806  gcc/genflags.cc
! e57a4ee7a3efa6f9879d9401732ce8e9  gcc/gengenrtl.cc
! b48bc3d147e38254c6f643c69446fa7b  gcc/gengtype-lex.cc
! dccb6b651cc3b08a9d91dc473d2c5c56  gcc/gengtype-lex.l
! eb4d9740e017bdc5f85328a53d2d1727  gcc/gengtype-parse.cc
! 50a65f1126e7a18b74cea77bdd779e98  gcc/gengtype-state.cc
! f478a818c2202fa1a9c5eeeb9e716b7b  gcc/gengtype.cc
! 0ba34863951c3fb241ac4a955bddc0a5  gcc/gengtype.h
! f24c75731c311961c21c8e8305435b00  gcc/genhooks.cc
! 0b999c86fa99fab7ce7ff0d357c0f148  gcc/genmatch.cc
! 2cf04cf8cf3ed9bfee20f1dec10e924f  gcc/genmddeps.cc
! 7a9894fd2f41e06b7a03e40b67376964  gcc/genmddump.cc
! c4a535228e71fdb6c6526d7cdc6e93be  gcc/genmodes.cc
! c7fd3cd7e5600f29a0e731689ff54131  gcc/genmultilib
! 2074ffc541592bc2d539fea53d54756e  gcc/genopinit.cc
! e64f40f704856f3ac82972d94253af34  gcc/genoutput.cc
! 61a8f678234abcbb08185ef6b4975931  gcc/genpeep.cc
! 52d1058cd657f5c56b9b82f8645d8612  gcc/genpreds.cc
! 5df383414740fb5e430363be7f0602d6  gcc/genrecog.cc
! b2a4b31d65ce0513e1b55b3cc0fb9562  gcc/gensupport.cc
! e85779601c137dcdd709c761e1f9f81c  gcc/gensupport.h
! 746501b7bdfad06b392960c121e24b85  gcc/gentarget-def.cc
! 8225a557753a2ad91f93ca46a0650179  gcc/genversion.cc
! 9fe719a18729c28d50a65a218b84be60  gcc/ggc-common.cc
! 2554173627e7abbcf9b350008d28ed3d  gcc/ggc-internal.h
! 92993def7552bd1f56210bccd8199b5e  gcc/ggc-none.cc
! ae5ff28b8e5857f2e89a7a499c0cb706  gcc/ggc-page.cc
! bbca916c48235ccd181eeac0628a881d  gcc/ggc-tests.cc
! 87b927f2612946c651177dd356485001  gcc/ggc.h
! 1cdc244a6063c8879d6b9376e4929276  gcc/gimple-array-bounds.cc
! 9e34b6c0ac98f04d76ac1c5ac6498112  gcc/gimple-array-bounds.h
! c09c9c82904f715ce24dbb5f5e7ae143  gcc/gimple-builder.cc
! 71288f9828f96bb6d528314ca5d455fd  gcc/gimple-builder.h
! f50e26d784233d2ffe55ee17bc3ac46a  gcc/gimple-expr.cc
! d1de4fb8ce13938f7c3dd22dd3afe622  gcc/gimple-expr.h
! 59c242c3a7847e41cb5aca4bb0cacfe2  gcc/gimple-fold.cc
! 759408e1e968762ac2845df7ae6efa73  gcc/gimple-fold.h
! 3234718da206092bb450cb11633c2e48  gcc/gimple-harden-conditionals.cc
! 5397f4236c244ea6e396da577b07cb75  gcc/gimple-if-to-switch.cc
! 58ed690548535ae2628fec06b33a857a  gcc/gimple-isel.cc
! f9d354fe0de883a8e04540c764cf1128  gcc/gimple-iterator.cc
! 6800bca49ee3d1f5c964f5ff789b91ec  gcc/gimple-iterator.h
! 273c34c7e5f11b3c27736f861ff39dd1  gcc/gimple-laddress.cc
! ea6739e1baae6fef631091cd341aeb7a  gcc/gimple-loop-interchange.cc
! 278049a0befd1100b7907765baf0b1a2  gcc/gimple-loop-jam.cc
! f5fb978108285be3c589c1080dbbad96  gcc/gimple-loop-versioning.cc
! 14024b204b227ade2750e2161a5c3082  gcc/gimple-low.cc
! e5fb54e1c9ffbbb7c5e6cff5991f2104  gcc/gimple-low.h
! 1607a52f6c468949efc067de9ae1f173  gcc/gimple-match-head.cc
! 72fb6758017af5de87e230d25359555b  gcc/gimple-match.h
! 8d43733f6347e3670a9aef1e2d7419ee  gcc/gimple-predicate-analysis.cc
! 7eb33d03e7b1e6b6327f7cb427da050e  gcc/gimple-predicate-analysis.h
! 4cb1a344328d9b4fc0c4735add3da4a4  gcc/gimple-predict.h
! 3c38ca4d1ec0bfb067a868c99d216cd0  gcc/gimple-pretty-print.cc
! 3efe916bb7c15be5080b13dbaee9c3b0  gcc/gimple-pretty-print.h
! 60e7e4a38c58fb84ea4cf7e8322c294f  gcc/gimple-range-cache.cc
! 34423785bbebf48c5894527a2d85dfa3  gcc/gimple-range-cache.h
! de819abc38e5513404e31ba8147f6719  gcc/gimple-range-edge.cc
! ff7214e2064e1c914da68bbc5c59ac6d  gcc/gimple-range-edge.h
! cda14e228d899f1e4166623e8a1f24eb  gcc/gimple-range-fold.cc
! a25f3a6963c602d111eb631ee4444cf9  gcc/gimple-range-fold.h
! 907091739ab8a7df723e8daa1e7a22b3  gcc/gimple-range-gori.cc
! 5fe5f05a236de0492006918bee486f98  gcc/gimple-range-gori.h
! c07084f0a48eb3917f54d93973b563a6  gcc/gimple-range-path.cc
! 5f9c5bca0ea21cd23f44f6fbea308f4d  gcc/gimple-range-path.h
! 76adf9d818ec2c8c5a3e49afe34ddcc1  gcc/gimple-range-tests.cc
! f0756e5b5cf48a95b7e157d22e9faeda  gcc/gimple-range-trace.cc
! ae1d2577cae83e6acea7dc5239c033f3  gcc/gimple-range-trace.h
! 59b9f2f75e5de30ecfda93bde785915a  gcc/gimple-range.cc
! 79c8ed03d56c9a2f09f77ece8c2838bc  gcc/gimple-range.h
! f4eef9979afe1a62a26aab899f31fd5e  gcc/gimple-ssa-backprop.cc
! 3a9acfb81d934871fc78a536f2df929c  gcc/gimple-ssa-evrp-analyze.cc
! a2e47746135af17dac3a1f31d5ec570b  gcc/gimple-ssa-evrp-analyze.h
! 7b4c1e8f532bae009a7eee5a9914f4e0  gcc/gimple-ssa-evrp.cc
! 1b1d4df650a10ddd70ed93d3ff96663c  gcc/gimple-ssa-isolate-paths.cc
! 6881154cb788d83ed5d3a6faa40e8491  gcc/gimple-ssa-nonnull-compare.cc
! 8e1e93b40c3c71852038f4e15cc0ea0e  gcc/gimple-ssa-split-paths.cc
! e4a4e3892d4f43c1336be03c0b223389  gcc/gimple-ssa-sprintf.cc
! 8e08afa1d32d2080467ce94a87d93940  gcc/gimple-ssa-store-merging.cc
! ca63b943de7942e5678ba99a1ddd3285  gcc/gimple-ssa-strength-reduction.cc
! 85a19a8621ed8aba6da1f237a03c8f53  gcc/gimple-ssa-warn-access.cc
! 7064ea947fe572efdcb48307a73cc457  gcc/gimple-ssa-warn-access.h
! 1196b371cc6aba5694b6162ff454e3c8  gcc/gimple-ssa-warn-alloca.cc
! 70bafa6a9b94dcb6cb594f117e2bf2df  gcc/gimple-ssa-warn-restrict.cc
! 4c204306ae3e8d01d8d61c5f0b6d3636  gcc/gimple-ssa-warn-restrict.h
! 1a25ed5e8af1218f818917a10887c915  gcc/gimple-ssa.h
! a4af0a8c8375bd561488c9026db1eb1b  gcc/gimple-streamer-in.cc
! e6f970943a6488a82067db8970a3e786  gcc/gimple-streamer-out.cc
! b39e1a48a480dd829d786f82a4635b66  gcc/gimple-streamer.h
! 149358450e12efacc8e1de44432ee829  gcc/gimple-walk.cc
! 453e298e952d7961504e614fcf760433  gcc/gimple-walk.h
! 851410fecaff8b30ce6ecc9819c6b558  gcc/gimple-warn-recursion.cc
! 5cb9ca8b08afd3120831ff323666fd1d  gcc/gimple.cc
! cedfeeeb6a89b08187da0a55778ff05c  gcc/gimple.def
! b1f2597055332f7a009df2374360eee2  gcc/gimple.h
! 1a79444af2bcf0c019b20c37cb346635  gcc/gimplify-me.cc
! 489260dcd67a90caca7adf7b361f9078  gcc/gimplify-me.h
! 5c75c7affa993dc8fb3b9c74b2f306de  gcc/gimplify.cc
! acbd4cf19da012507fa6f90cc988cc15  gcc/gimplify.h
! 4b707ba8acc84c0c2c69cd7d11b0b878  gcc/ginclude/float.h
! 5e92ed0886d68a4cce339044cf03cd57  gcc/ginclude/iso646.h
! 62ea76ca87d63938a77a6d50f4bdd893  gcc/ginclude/stdalign.h
! 4d968448da3c8fdfdca9e5816fa8651e  gcc/ginclude/stdarg.h
! c14817e9b6598620231dcea766bd74d9  gcc/ginclude/stdatomic.h
! f29d199076eeabb983c592515ee1b045  gcc/ginclude/stdbool.h
! c04d87ca74aace83418fd9dc43e383ef  gcc/ginclude/stddef.h
! 5b9e7df8fd61a38ee9302497665ef191  gcc/ginclude/stdfix.h
! 657569f629dffb6939ca342765760fad  gcc/ginclude/stdint-gcc.h
  f85aa0745c3e9e0d32fa64753089b2f1  gcc/ginclude/stdint-wrap.h
! 86c2868069be6d672061b3ccc872b1c9  gcc/ginclude/stdnoreturn.h
! d6e38b1f29ed7cbf094498b65058bc0c  gcc/ginclude/tgmath.h
! 35c8e63b0bb041362d4e62e0722a0f12  gcc/ginclude/unwind-arm-common.h
  8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
! 90ab079b9764cd0047ebb8e51e5950d5  gcc/glimits.h
! b4d575b71dcb94ecf9b54e2621e09412  gcc/go/ChangeLog
! 1e8d98252d6f5b7d8428ae93446ae0c1  gcc/go/Make-lang.in
  60ea054548c83c7f66170073f9f3e74c  gcc/go/README.gcc
! d9ae6df7a9c50076ec6b5e564516ca11  gcc/go/config-lang.in
! 6de103fbcaf3ede09e154b4507410fad  gcc/go/gccgo.texi
! abb8870216b1dcb46678a28424efe8e5  gcc/go/go-backend.cc
! d5f87e40815add17cf3d7b44e1f1e16c  gcc/go/go-c.h
! c8ae93841aa60c948162af93a875a63b  gcc/go/go-gcc-diagnostics.cc
! 03db2c35a39e03c8ab1f72e866ecd76c  gcc/go/go-gcc.cc
! 3331ac40c70c2495e29194d7a6ce2149  gcc/go/go-gcc.h
! c218daa2fbe96a9f0c4b05d8fbb89a77  gcc/go/go-lang.cc
  c5d6aaa7e913ef205113a2bba2e5206f  gcc/go/go-linemap.cc
  91c7a6773e207cc086ae0888826cc3c4  gcc/go/go-location.h
! e7ac1a933b9be9177f17122bbdaf7f15  gcc/go/go-sha1.cc
! c0d3df9f78aaab124d5664ef5cb60e7b  gcc/go/go-system.h
  5d4950ecb7b26d2c5e4e7b4e0dd74707  gcc/go/gofrontend/LICENSE
! ad0775a801bdf03c787cc15a49d05836  gcc/go/gofrontend/MERGE
  3a55d95595a6f9e37dee53826b4daff2  gcc/go/gofrontend/PATENTS
  31c16a91d82f8ad3319819ebbba2d17f  gcc/go/gofrontend/README
  38df5a2d45162cae2b454cd17fa8df7a  gcc/go/gofrontend/ast-dump.cc
  456b6d4cc785176b6e3eb0c685a93b39  gcc/go/gofrontend/ast-dump.h
  ea386ab9fecd1e6a9d230d51e7190683  gcc/go/gofrontend/backend.h
  f4698d5111935f1c789b7efd8ed91a74  gcc/go/gofrontend/embed.cc
! 9f2438f4946c0987f3884309ecf5fa0b  gcc/go/gofrontend/escape.cc
  ee8753eb1d8ca2fa168f6a71d3991455  gcc/go/gofrontend/escape.h
! dccb73c4ca0b41d94f8c32f09722e264  gcc/go/gofrontend/export.cc
! c10142760925e22c72c7072c9c214bf8  gcc/go/gofrontend/export.h
! d21670515fe23df2b0c0f939571e07a3  gcc/go/gofrontend/expressions.cc
! f12860a9f12260693e40f993afb8726d  gcc/go/gofrontend/expressions.h
  bf7f8a519eadaa90804fe15cfa37ba6f  gcc/go/gofrontend/go-diagnostics.cc
  accfd5ea41ee789e6adbaec31a228cfe  gcc/go/gofrontend/go-diagnostics.h
  19e66447fa803385274b4e1a7501a4d5  gcc/go/gofrontend/go-dump.cc
*************** c08c0bc386a3e50faacf99daf94c080f  gcc/go
*** 5771,6354 ****
  ead5ac25b7b99d361225e0fd940e286a  gcc/go/gofrontend/go-optimize.h
  5b59619fab7e543c5bb28dd8a6d62793  gcc/go/gofrontend/go-sha1.h
  8d64d49cf01e7d7605f32b644d82c7e1  gcc/go/gofrontend/go.cc
! 047533e959055bdd54465d0785428331  gcc/go/gofrontend/gogo.cc
! 80b391a86b1bc3375909d0bc35db0210  gcc/go/gofrontend/gogo.h
  f9015ccccf7764d4c6eeae1bd5e01c7f  gcc/go/gofrontend/import-archive.cc
! 1496f53f85d6a3a7304496aeaad6272f  gcc/go/gofrontend/import.cc
  0a9e27f1c3baa96ef288093aae5e2d3d  gcc/go/gofrontend/import.h
! 81f7aa5cb47f00e4c16a0f9af7c54b10  gcc/go/gofrontend/lex.cc
! e334b91562a94d1584423d0152a3408e  gcc/go/gofrontend/lex.h
  43b62193a1fb46a6002699db1d668d60  gcc/go/gofrontend/names.cc
  98235b1a736055cd6a130337a9ee8e8e  gcc/go/gofrontend/operator.h
! 13c5b5418ef8b2b082fc2dab629bdc49  gcc/go/gofrontend/parse.cc
! 1718bd1f08e3ba35038cc644bc16f687  gcc/go/gofrontend/parse.h
  2c0d81f700bca5c56dfcd3a7673e2e82  gcc/go/gofrontend/runtime.cc
! f5457f31b072a79cb18b4a3779db3ab3  gcc/go/gofrontend/runtime.def
  978a7b1924ca7f696fa5d0da3c9ccf60  gcc/go/gofrontend/runtime.h
! a509ef74addeabe9aa2e0a94a18d86ed  gcc/go/gofrontend/statements.cc
  2eb4054e4a44955e627d6732684b0563  gcc/go/gofrontend/statements.h
  bfc57c7a1e73452c4b277ad13efbddbd  gcc/go/gofrontend/string-dump.h
! cbf2bc3ea9e7f11e7faa815d7d19c70d  gcc/go/gofrontend/types.cc
! 1f89d4553c3d2e12136f23fee3bcb4d4  gcc/go/gofrontend/types.h
! 3662dad559a197b0771d9930d494949d  gcc/go/gofrontend/unsafe.cc
  090095c2b56e6d719c7e5ec12e5daf7a  gcc/go/gofrontend/wb.cc
! e54fa7b2eb4871dc0180ab15d67520d6  gcc/go/gospec.c
! 84e0725f269b734371a03c6a936b80ac  gcc/go/lang-specs.h
! 21223a7ec8f67e860c302b35f751e136  gcc/go/lang.opt
! 66002fff8e9d72ba872a78faf799551b  gcc/godump.c
! 0f5819a7cfb5d152bc73620584ab9694  gcc/graph.c
! 6518582a0f750ebafd37191f5ab8ddc9  gcc/graph.h
! f571062b3e3399dc225a203aaf0453ec  gcc/graphds.c
! 3a923748471bde9c76981812de6e8d96  gcc/graphds.h
! cbb74dcdb56c5350c4d5e724b52b83b4  gcc/graphite-dependences.c
! 16dfa8fb215204566b6a63c2dd4a4a00  gcc/graphite-isl-ast-to-gimple.c
! 40078652243dec6bde96bc9605161830  gcc/graphite-optimize-isl.c
! cac5a3a0a5507ee75db4b2d77657d37b  gcc/graphite-poly.c
! 17c9801b105ba432f28a37f75daf7d2b  gcc/graphite-scop-detection.c
! fe9eb63ea539aeda358a1205a887b3a5  gcc/graphite-sese-to-poly.c
! 5cfa977a168e0076f0a61905e2d42061  gcc/graphite.c
! 6d40472c6a6ca2e407b9fb53752d325b  gcc/graphite.h
! 9c20fa595654927f37b82de67fd0bc66  gcc/graphviz.cc
! 7f19dc16c2b154abcaac4827fd84d9db  gcc/graphviz.h
! 0e72d362ed4037146374926a642a9eda  gcc/gsstruct.def
! c5513ef74034b4747840c3ba1832b32e  gcc/gstab.h
! 0ad3735a86e85c1288f083d20419774a  gcc/gsyms.h
  c32a1d882e7039afe158bb9e59b65223  gcc/gsyslimits.h
  053ee4a84e4593c88c088f25e153d1a5  gcc/gtm-builtins.def
! 7a5ce92e9ebe94f4c30d2e485e7f9c74  gcc/haifa-sched.c
! 69070a6f376400ec35ffa830de4144e2  gcc/hard-reg-set.h
! 6242bc0cf92fb018b511de099c4f2f24  gcc/hash-map-tests.c
! 8de07ddcae80f91418a94b24e3646990  gcc/hash-map-traits.h
! 7429369f6658981db56baaec01d642bd  gcc/hash-map.h
! 16e2f9f6b430ddce706e730efc684112  gcc/hash-set-tests.c
! 1cfe5f517d788192961b7aaa5764857a  gcc/hash-set.h
! b2326f04bc12ea8777ead7646b0e123d  gcc/hash-table.c
! a12365c0cfe3f735c645a4b77894a99a  gcc/hash-table.h
! b8e10cc03382e6a86da9ee13f1772130  gcc/hash-traits.h
! fd9d4e47e708e95cf233e8a1723b36ea  gcc/highlev-plugin-common.h
! 0885495cbfdfbecf32be7af9c2490942  gcc/hooks.c
! 484c05f4c7c536e681b131ca3219752b  gcc/hooks.h
! f5c07894fc823218e9f5099bc58d41fa  gcc/host-default.c
! 9820ed482f076272a9da16ab933a4a9a  gcc/hosthooks-def.h
! c295442f623ae639ab0eef77ed196a06  gcc/hosthooks.h
! 4e7abde5d74479bb9eba1e320701ea1f  gcc/hw-doloop.c
! 47380fcad22a8fd1e1a458f7d1a9e758  gcc/hw-doloop.h
! 5447fa3d6d110fde15af8fa04ca0f1a1  gcc/hwint.c
! c753347aefd98061e32a83982d6c8f1b  gcc/hwint.h
! c344af190aeaa7efa77f8684fa1c4a76  gcc/ifcvt.c
! 5b179229655a9e1ff4addac6bd17bfd3  gcc/ifcvt.h
! 4a8573d35397afe052d60dc399f91959  gcc/inchash.c
! ff9cd748484a95fca3cf23a3ed3844e7  gcc/inchash.h
! 10154f3e446307647acfad7a9257e8c0  gcc/incpath.c
! c890af2497a7295e5ad9f2603cf17cb8  gcc/incpath.h
! 49c0905b34673d1e7112d909ab59ab50  gcc/init-regs.c
! 58658ed4853449eb71ecc2faa5fec8cf  gcc/input.c
! 3e1af2416ad34267258219c82ee2e784  gcc/input.h
! 8448a04e26d84db7cae7935f7d8c3b9a  gcc/insn-addr.h
! 723316db4cf40aed5f78795fd24221c1  gcc/insn-notes.def
! 7f143576fc4600b1f908b599cc1d58b5  gcc/int-vector-builder.h
! ee877c2060889fa2d68b9332a105f967  gcc/internal-fn.c
! f3f89b671d0605b3e93ee9b6ef8a3852  gcc/internal-fn.def
! de5c239aa4766cc69fc2017ae8e7d8d1  gcc/internal-fn.h
! 6aa6c9959854056e3c3e0d2587f2ef78  gcc/intl.c
! 0fef88b77c65fd1ec349ae84ced8a83d  gcc/intl.h
! 57522642f0e35761146d57a1f4971ce7  gcc/ipa-comdats.c
! 93a53ce20489e36bf458a63b27c0d8fc  gcc/ipa-cp.c
! 0ca725ecef6f1f086a5dd68523861ec2  gcc/ipa-devirt.c
! 66b73527284b0e13f4e5b690d066ee85  gcc/ipa-fnsummary.c
! f95a69b1f3983dc781ef570590f5b01d  gcc/ipa-fnsummary.h
! 7c46ef6a7d9230f2798ed1ce630eeb4a  gcc/ipa-icf-gimple.c
! bde983e86d6dce7cfa528ed5003fbf84  gcc/ipa-icf-gimple.h
! f797e88796d2c2bdb45fdd0f7774f7e5  gcc/ipa-icf.c
! d1c62ca27392156d9ab55eb9a8c5941f  gcc/ipa-icf.h
! 6ff03f4502965e2dae22d99c4abbc97c  gcc/ipa-inline-analysis.c
! 8eb383763689a3d5ad9bd67cbd1fcb32  gcc/ipa-inline-transform.c
! ec72952e216f97113f1ba6e99817c9ab  gcc/ipa-inline.c
! a10b26f8b2cd4e43b6eb7b9c5fc18a0d  gcc/ipa-inline.h
! 527be6d4d86fbdd9748e4c8e967604f6  gcc/ipa-modref-tree.c
! 0d2c0f1bc1412e346c4a96960ac25b80  gcc/ipa-modref-tree.h
! 828eec681c95cd80a228140315eaa47d  gcc/ipa-modref.c
! 24571d56e05a081b381bee5973dbc170  gcc/ipa-modref.h
! db0361c41637ca821b894c2d6a58dd78  gcc/ipa-param-manipulation.c
! 0ec8c7dc1c02b4b835fb52f233bdcd80  gcc/ipa-param-manipulation.h
! 257879916ba7a05ee55dbe52f518dbc6  gcc/ipa-polymorphic-call.c
! 55afec3b06a051269d9c3495954f589c  gcc/ipa-predicate.c
! b6c2e60f0bb50b61ffc003d4287b4a7d  gcc/ipa-predicate.h
! 2c565d155fe9a836088f9f0b8d38b331  gcc/ipa-profile.c
! ad3f3de29b2a55179063f8d7c1019dd3  gcc/ipa-prop.c
! 26dbfb8e2bba32dbfcc64d9bfc065969  gcc/ipa-prop.h
! 69165999b252c49cd319201d87c2ee82  gcc/ipa-pure-const.c
! f4b0cf2eeaf1190a6a7682b15df55bf3  gcc/ipa-ref.c
! b0b504a2c999e7b1ad1df73df84cfb8c  gcc/ipa-ref.h
! 4b604c3db2c1086771ca173c0fdd97dc  gcc/ipa-reference.c
! 9033a420e6a286037d901439da8f5ff2  gcc/ipa-reference.h
! e098ddbd4be0af0842f88e64e8f4466b  gcc/ipa-split.c
! c1dc66d2ea8aa4cfddebdbd29cf0377a  gcc/ipa-sra.c
! 842380624d66fae05d3a693e5929ffa5  gcc/ipa-utils.c
! 1766c3b1f6b59b660404460b25d838d3  gcc/ipa-utils.h
! 9cdf0cbb22a93045634de6e5fc83cbb8  gcc/ipa-visibility.c
! 20e523da6d0cf2dfb75b1cb15523364d  gcc/ipa.c
! 420f64db44a55dc486630154a503b01a  gcc/ira-build.c
! 294e8f4137b8651abf438ac9b9fcc8be  gcc/ira-color.c
! 05ded0649c09aca2587c5e6478e40a1f  gcc/ira-conflicts.c
! fcdecd375e9f7dcef39dfb29545d6859  gcc/ira-costs.c
! 90a73493c275e6fa26e716b5f9a62dcb  gcc/ira-emit.c
! 5aec1e89bce0dbfd2b02b96804404e27  gcc/ira-int.h
! 6b1fed42d9f5470a586a9f4a2df1625e  gcc/ira-lives.c
! c365b13304c481cc4b9f3145c452a198  gcc/ira.c
! f2cefc86c9a11fe045772f372434ad3c  gcc/ira.h
! a034d62871bbde98ccf4abce95e4bbd3  gcc/is-a.h
! dd335e7d147186c7f4aa9327f600007b  gcc/iterator-utils.h
! 52a82347f59890f016cfeed79a75e907  gcc/jit/ChangeLog
  6071bdf04fb356c5ac99a99ec00c9a12  gcc/jit/ChangeLog.jit
! 7da588bb30eff47e724348cf30c9b423  gcc/jit/Make-lang.in
  fd0d76b6467c987f813d430a35d4760a  gcc/jit/TODO.rst
! 7a93c8cedef319d0da7ea43c5ac5fa02  gcc/jit/config-lang.in
  df53fb6b84c435b56ac2cb2727b62b27  gcc/jit/docs/Makefile
  aefe50c9e37a2e7a06545dbc6b38bbd4  gcc/jit/docs/_build/texinfo/Makefile
! 40d770c0fff5fdb135c9832c697a6e05  gcc/jit/docs/_build/texinfo/factorial.png
! 40d770c0fff5fdb135c9832c697a6e05  gcc/jit/docs/_build/texinfo/factorial1.png
! 27acbf7fa2700f2093f680abaa233b0e  gcc/jit/docs/_build/texinfo/libgccjit.texi
! 11b13c2e317ff217420ed928ce4ba00e  gcc/jit/docs/_build/texinfo/sum-of-squares.png
! 11b13c2e317ff217420ed928ce4ba00e  gcc/jit/docs/_build/texinfo/sum-of-squares1.png
! 4ac392e79208cea578e8f77fd205f5dc  gcc/jit/docs/conf.py
! d956eed537297cb449649a3680f9e6b6  gcc/jit/docs/cp/index.rst
! 2651cd1ee910d13946f20f5d24643cae  gcc/jit/docs/cp/intro/index.rst
! e129ea685dd93a066f970538de39fb10  gcc/jit/docs/cp/intro/tutorial01.rst
! 417a26847dcca161201ac3dc975710f6  gcc/jit/docs/cp/intro/tutorial02.rst
! 903c805021c441ecc5e5148c9f3f0b86  gcc/jit/docs/cp/intro/tutorial03.rst
! 071ae55ee0ad46673eae816a542b7f3a  gcc/jit/docs/cp/intro/tutorial04.rst
! 81d0879ec3da87b9ad38262b1a9d76d7  gcc/jit/docs/cp/topics/asm.rst
! 3d1c6663332db948f4abc55e33cb1c75  gcc/jit/docs/cp/topics/compilation.rst
! 7418bd4a7434755c6443f89b5e9bd718  gcc/jit/docs/cp/topics/contexts.rst
! 1e240b0064582e38468e9946691d6be1  gcc/jit/docs/cp/topics/expressions.rst
! b6c1d6961aafaae57f9ddde47cc86b8f  gcc/jit/docs/cp/topics/functions.rst
! 3b88bcfd7c57b0b99df9e686bf2ea9bb  gcc/jit/docs/cp/topics/index.rst
! 703194459edf78a7deda83b6d25ee6bf  gcc/jit/docs/cp/topics/locations.rst
! f4b4d37712fe03787aec1ebfce8f1d57  gcc/jit/docs/cp/topics/objects.rst
! 582b5f0139e25c0e37e9d6dca6d2dac2  gcc/jit/docs/cp/topics/types.rst
  98a4c0efa41e5eb7177483e4cd99a81e  gcc/jit/docs/examples/emit-alphabet.bf
! 24095142bbe96437290a6248f5c22ac7  gcc/jit/docs/examples/tut01-hello-world.c
! 00a1dee07f6591b2bd78e3cc6e154aa9  gcc/jit/docs/examples/tut01-hello-world.cc
! 9994c34a7d43a857516aa1a28caeef50  gcc/jit/docs/examples/tut02-square.c
! d132178089ea0320c6d2dfdcd76ea716  gcc/jit/docs/examples/tut02-square.cc
! 448f12bbf8ed48b80a3d157f50ef8664  gcc/jit/docs/examples/tut03-sum-of-squares.c
! 062536d04b8c5f0c3e3b00406f11e3eb  gcc/jit/docs/examples/tut03-sum-of-squares.cc
  6369d2b07520cb0fc9d14082499f6be2  gcc/jit/docs/examples/tut04-toyvm/Makefile
  999c1d2b92d5d71565c67854aad60e9c  gcc/jit/docs/examples/tut04-toyvm/factorial.toy
  efe1998ded06ac3721d9ced4d96056f0  gcc/jit/docs/examples/tut04-toyvm/fibonacci.toy
! f73ab292e47c142f5d6513c511c17cce  gcc/jit/docs/examples/tut04-toyvm/toyvm.c
! bc97ade927d36b7b27b81ca2dc40d581  gcc/jit/docs/examples/tut04-toyvm/toyvm.cc
  3cbe9daf70398730ee60aa4caf2fc200  gcc/jit/docs/examples/tut05-bf.c
! 0cd2786bc335e1864971d23fc9a144b7  gcc/jit/docs/index.rst
! 011aca92c584ea08ce925e7ac431c80b  gcc/jit/docs/internals/index.rst
  d72502d68617b68873d385bcee6e9c4b  gcc/jit/docs/internals/test-hello-world.exe.log.txt
  40d770c0fff5fdb135c9832c697a6e05  gcc/jit/docs/intro/factorial.png
! 431adb6806ca3fa64a74466fdce5f9e0  gcc/jit/docs/intro/index.rst
  11b13c2e317ff217420ed928ce4ba00e  gcc/jit/docs/intro/sum-of-squares.png
! 03421f416ff6c8c550c002783429da66  gcc/jit/docs/intro/tutorial01.rst
! c4b1bad79e102f68d57bbea04d840d2f  gcc/jit/docs/intro/tutorial02.rst
! e025bb9ae26e458a776dc8c6a9d0e2b9  gcc/jit/docs/intro/tutorial03.rst
! 2e11a2b49b4ed5133b330e5ebbbc80c7  gcc/jit/docs/intro/tutorial04.rst
! 229a18e22637447793872a06d5648908  gcc/jit/docs/intro/tutorial05.rst
! 609ee22d98c43ae72cabc14bf7f0db0c  gcc/jit/docs/topics/asm.rst
! e14ac928eed672aa0813738a9e6be349  gcc/jit/docs/topics/compatibility.rst
! 5c612531bc64c6257894ef30908be314  gcc/jit/docs/topics/compilation.rst
! 7ec549ccc2b46e847d76c9456c1b8ecd  gcc/jit/docs/topics/contexts.rst
! 649de93c5bb4aef99b994291de78b3ae  gcc/jit/docs/topics/expressions.rst
! ab3e41b12056f1e3647f5e10f80566be  gcc/jit/docs/topics/function-pointers.rst
! cba3e883a8bc6016528431cd2976b97b  gcc/jit/docs/topics/functions.rst
! e3961d2b5be64b85c50bfa5c62a76728  gcc/jit/docs/topics/index.rst
! f383480cae732453fdc0840798156777  gcc/jit/docs/topics/locations.rst
! e392cf227ebf265d2cf6c0b91ff1ec63  gcc/jit/docs/topics/objects.rst
! 344f74a846df80e523e805d1f10e82d7  gcc/jit/docs/topics/performance.rst
! 1d1cf03656a1e7d868921b55ea6efafa  gcc/jit/docs/topics/types.rst
! 08893100252fb29f861871367e19088f  gcc/jit/dummy-frontend.c
! edf7af6ea819ca9e8808709a392fc48d  gcc/jit/jit-builtins.c
! 74c00b718035eddae618e017e314fa0d  gcc/jit/jit-builtins.h
! c11779a47ed270de47ed2a6154896ab2  gcc/jit/jit-common.h
! 1b75c79801ee8999f5470885283c2668  gcc/jit/jit-dejagnu.h
! b6d839f613d7ba1e2049ece1005e6d9d  gcc/jit/jit-logging.c
! 7cba46ec14b5fdbeb1b2afaa60343ae7  gcc/jit/jit-logging.h
! 3430fd3ac8108d906e4af86cab18fc69  gcc/jit/jit-playback.c
! 986c94b3e1f28d1f08449933a2662721  gcc/jit/jit-playback.h
! 115de2434f9dac9fe426ec052bb0e781  gcc/jit/jit-recording.c
! 01b40c0320a54733e62039338f3329f1  gcc/jit/jit-recording.h
! 2b4df168c05501aec7ee5853e455165b  gcc/jit/jit-result.c
! 737e89d941a9eabb2a83eeb02c419aca  gcc/jit/jit-result.h
! a65e8f285929bc594ef4ed7801575b61  gcc/jit/jit-spec.c
! 62eec0f11512401a753b5d61e4e8fa8e  gcc/jit/jit-tempdir.c
! e3db52c2bdf2089f3518cad629deba24  gcc/jit/jit-tempdir.h
! 03df4ed6fc879ff9b7887db08cf7b72e  gcc/jit/jit-w32.c
! 9fa963f67a08d2dc921cd6d505db85fc  gcc/jit/jit-w32.h
! d85e22e3a831e54a55caed1c440a5a0c  gcc/jit/libgccjit++.h
! 833a65f04d21fabe3a57534d3a54f644  gcc/jit/libgccjit.c
! af3735f9a574fcc19ed30bac19464af0  gcc/jit/libgccjit.h
! 92eab2771f504aaf31f5de8e70466b9e  gcc/jit/libgccjit.map
! aaaa50e3d4a7c60cc413faccb2d831c6  gcc/jit/notes.txt
! 33509cf6c78192754449490531df9afd  gcc/json.cc
! 1751079be41a6e0e3a93335a8c8a3487  gcc/json.h
! f46f8a420e068add24447575c91851a0  gcc/jump.c
! 8f385b34eb3b04ffd9416f38a57cec77  gcc/langhooks-def.h
! 1bb1f2cc5fcaa98339e1031e35334b4b  gcc/langhooks.c
! 79d19ec345ccfb73e37c51d98f9c7319  gcc/langhooks.h
! 2966a137017533401da8437bbd04f2a9  gcc/lcm.c
! bdae38125e17ccdbcbd3740ff81dfc29  gcc/lcm.h
! 6d1fc2506b845573b3a3c469b6f7c9e5  gcc/libfuncs.h
! 583b6faaa019e1ef72380c889fdec5cc  gcc/limitx.h
  83de5c6450456e215a5484083afcd32a  gcc/limity.h
! 7eb300e545644ff4b4eae3716b99482c  gcc/lists.c
  30b8e3e407f46ad2cb39260ec4bab9f6  gcc/lock-and-run.sh
! a09713569704def17fe9b152b78ba9cc  gcc/loop-doloop.c
! 9f6ba5d7d3c36c5fbe0b75e45c60a201  gcc/loop-init.c
! 2a163cd72274af8bcfbce0e199266237  gcc/loop-invariant.c
! 6dcb3e50702c1fe35fd4c4afc5d49fc5  gcc/loop-iv.c
! e44196ccae22e5b571a6fc06b0fdda4b  gcc/loop-unroll.c
! 4e3d14a2bb20bbfa0b2d7c513a99193d  gcc/loop-unroll.h
! 238b4457d72f8b584d6d0aa811cd3184  gcc/lower-subreg.c
! 643bcadd79bc8430146b2c58a5fbdf02  gcc/lower-subreg.h
! e88f6ce06ede4edda0af58c2ba7077cd  gcc/lra-assigns.c
! c2e5571dfeb8184312575c2fd39a0c13  gcc/lra-coalesce.c
! a6d81472aa9380f911642c153c4f493f  gcc/lra-constraints.c
! 4ab369c9de8d32d33099df49e6d9d1fb  gcc/lra-eliminations.c
! 5980c281076ead34e5f20748bdaff2c0  gcc/lra-int.h
! 39882530244da95ee68fcf8642a261ad  gcc/lra-lives.c
! 7ebc003e14a046b20364addb18b925e9  gcc/lra-remat.c
! 93619388b5977a612f81f1a5f6d8cbb1  gcc/lra-spills.c
! 7caa6a007513219815bef12df3e9433a  gcc/lra.c
! 5cf7029a6ad442e84e48ac1d45a8a5ee  gcc/lra.h
! b18ef0c868c3693b6eb6c22f3bf3921f  gcc/lto-cgraph.c
! 1c62e9f5c1d6d037f3dae174e3b39412  gcc/lto-compress.c
! 2cd135622df35abe09c369e3d3649aca  gcc/lto-compress.h
! e891b7eb2f83b1624be70538a0e0d189  gcc/lto-opts.c
! 47aac9d44038f619b8a94acf28f087cf  gcc/lto-section-in.c
! 9893be09e11b4b0a29845a41ec6d3cad  gcc/lto-section-names.h
! 9363334f16d1c6574695194883b24bd0  gcc/lto-section-out.c
! db7cd7675793a8855cd0550edb79177a  gcc/lto-streamer-in.c
! 40a5c9904f9b80ca7236bd30c0679296  gcc/lto-streamer-out.c
! 5ad327021166fdb0ecad2661fbca70be  gcc/lto-streamer.c
! c75e2adeba7a17a10efdd07b0b9113b2  gcc/lto-streamer.h
! 8a45ce855be3f79e24add330a8fe9755  gcc/lto-wrapper.c
! 8d9b3cfbdf846260bb3bde211b9b30a9  gcc/lto/ChangeLog
! d5bb42eff522196004d91ca34cfaa49b  gcc/lto/Make-lang.in
! c1fff5b6c2a7f236e55f0d3b5cb28062  gcc/lto/common.c
! 71bd5c32de47c74a39491375ef7f71c5  gcc/lto/common.h
! 38e6a5e2f440f66a514fd524aeb49bc6  gcc/lto/config-lang.in
! f9f8e7b721f11cb6fda71038fa294211  gcc/lto/lang-specs.h
! ef551b8e8a4e1a4744f051f802241208  gcc/lto/lang.opt
! db5b324cd51a636eeccab2d228e5999f  gcc/lto/lto-common.c
! 42ff60fe4976af063eeac9ef4237318e  gcc/lto/lto-common.h
! 618e4b7d8d607a603d4b29c305bf420a  gcc/lto/lto-dump.c
! eee2b801c9d9d5815a706f5230cf4543  gcc/lto/lto-lang.c
! 6c3902a905540535829c60e3e71d211a  gcc/lto/lto-object.c
! 6b9c32795380fd112bdd9382d90bb966  gcc/lto/lto-partition.c
! 11275487d3fdff451ea5d49bac49948e  gcc/lto/lto-partition.h
! a2ca7044cc53910baa4e330728493648  gcc/lto/lto-symtab.c
! 678e59118f3c450d4c302bb537bfc126  gcc/lto/lto-symtab.h
! a3d7fa7b491b3c623e8ad32109a8af10  gcc/lto/lto-tree.h
! 7049ec17edb333bc321530606e9e0766  gcc/lto/lto.c
! 79c922d71cdca27a28f9b921a17e4415  gcc/lto/lto.h
! c0598ad047996b6b546ae37ac7961415  gcc/machmode.def
! 9ed2f72363a926d2750418ef5c5cf728  gcc/machmode.h
! 1e3feea915d17412b3e57a55c5a785e8  gcc/main.c
! 98f9f222d0c9d650062597b00dc2c409  gcc/match.pd
! 4b41ba6f5c2972934928d702e6ab5c99  gcc/mcf.c
! 12ed5d7cdbe37098551333c0d54e68ad  gcc/mem-stats-traits.h
! d36e5c61d9079e93d8844808c4280f3b  gcc/mem-stats.h
! 821fb4b5564db5b035190d56e39c64f6  gcc/memmodel.h
! 1c8fb1810ae245d05c2e570e2bbbf2f0  gcc/memory-block.cc
! 4b7bcf166b9d495d8a7927923eaacfae  gcc/memory-block.h
! f48ef213fac95cd91d953e912e2353c5  gcc/mkconfig.sh
! 7e3e688e0b70e4fd2f9ef2132d5a1ac6  gcc/mode-classes.def
! ffb6709ef6e104f353edb09bc1651596  gcc/mode-switching.c
! a98e50c063ce3f17ab72abe936f7f210  gcc/modulo-sched.c
! 9b2e40398cd8e086e71e5f469b2799b7  gcc/multiple_target.c
! f82c4a6b9621c8883a3eab86f0dd3768  gcc/mux-utils.h
! d9ee201dfb3a9b7b93a211bfb3c65015  gcc/objc/ChangeLog
! 8a483da76277f1107ee3864484da7cfd  gcc/objc/Make-lang.in
! 81acf2f4cbd8edc8581291e0c02e76f9  gcc/objc/config-lang.in
! 8ca11b02b2a9e21229f11063fb154aee  gcc/objc/lang-specs.h
! d64749fa6e7edf794e43ca2d299513e8  gcc/objc/objc-act.c
! d82921cbb439a19f64f1d25a6a14f4c4  gcc/objc/objc-act.h
! 3d5a7b3f2b8ede25454e6cc796103e45  gcc/objc/objc-encoding.c
! da34ed0a750a923083050676a1d84d7f  gcc/objc/objc-encoding.h
! 1ec80ae69345505cefde7f2b3ec43757  gcc/objc/objc-gnu-runtime-abi-01.c
! da44c8a74d037da7c6f82e94b45d4f31  gcc/objc/objc-lang.c
! 9119c424c5236534f584a7402787b21b  gcc/objc/objc-map.c
! 3fcca193bef44adbb41940862673aebb  gcc/objc/objc-map.h
! 70a2bbb9f1a1c992e16b427f0f1b1e53  gcc/objc/objc-next-metadata-tags.h
! efc719a9d69c08a88c9ca68c3d91dea6  gcc/objc/objc-next-runtime-abi-01.c
! 10f604e0990badb228f6efd7253f925b  gcc/objc/objc-next-runtime-abi-02.c
! 1efae5adac9e2d08776809405ec27a56  gcc/objc/objc-runtime-hooks.h
! 3c7320cdc77c5d2c8ad240f498e04b42  gcc/objc/objc-runtime-shared-support.c
! 544d016401099d9ba39ea7ddbce01333  gcc/objc/objc-runtime-shared-support.h
! 88490072a5d5ef2282898959e8e55de1  gcc/objc/objc-tree.def
! 6476680a7d05a886660bcc342e25222b  gcc/objcp/ChangeLog
! 8268a2fcb604c22c75202509b0338862  gcc/objcp/Make-lang.in
! add0ba454d5eb83cd065d29d3f6b676a  gcc/objcp/config-lang.in
! fbbceaf466354af7b3851fc32a591c77  gcc/objcp/lang-specs.h
! 8dbca9bd89fc3206efeeae8593dbba79  gcc/objcp/objcp-decl.c
! f839d2547a23f21881f462d878a2df5d  gcc/objcp/objcp-decl.h
! a7a0bf03aa321b1e7cc047dd65c275c4  gcc/objcp/objcp-lang.c
! 605fb5272cb554608cefda2c23cc03c0  gcc/obstack-utils.h
! 7b56d1dcf3fd603f94c47c1cf6f3841a  gcc/omp-builtins.def
! 079e9f2c902b70e61e63d018d5de4e95  gcc/omp-expand.c
! acdf170f52ac34b2d16d7fc8d784656e  gcc/omp-expand.h
! 4b91eade4a6fc39a4a1bee3e8e7187c3  gcc/omp-general.c
! 9b7e003d231715f982f2185c6971389b  gcc/omp-general.h
! 8c065ca396f861e8e44c67a018f1ad88  gcc/omp-low.c
! c8a35605fb251282ba6b62d2877c47ad  gcc/omp-low.h
! 968555a5938f5016374fc7d6fe116877  gcc/omp-oacc-kernels-decompose.cc
! 655ce306b6a6a7a3eafc559e46ec1feb  gcc/omp-offload.c
! d71fab83488e17c36772acdb30630baa  gcc/omp-offload.h
! c6c1d2b4fef8a0566ed2f596764b4095  gcc/omp-simd-clone.c
! 909a1a93f282ec30c282438b2c473dc1  gcc/omp-simd-clone.h
! bd237663f814338857293d57435ae0cb  gcc/opt-functions.awk
! a5997eea63f27b2f160f553e02720823  gcc/opt-gather.awk
! e31916815933ce03699303686e1d68a9  gcc/opt-include.awk
! 6a251fbaa228ff904a30d0f558c7a760  gcc/opt-problem.cc
! 56d8bdaa783f296c25aae288e0b6a651  gcc/opt-problem.h
! daad6e85fa888e78ea461f1e895527be  gcc/opt-read.awk
! df80e7a26a0f6adb5d02ff9b18699a2a  gcc/opt-suggestions.c
! 3604764a75ad709d3fd64f2e1e168f43  gcc/opt-suggestions.h
! 6e48b122f95d98d38e883fc04ab1c521  gcc/optabs-libfuncs.c
! dcb81b8ac4afdc7cb3fd19ea5e279e5d  gcc/optabs-libfuncs.h
! 3365c04d909aa83e33bf9f6a5de76028  gcc/optabs-query.c
! 3d45bbec835bec871b2db466d0150a4e  gcc/optabs-query.h
! 833eb38b58c81cfbf059cbbb6965b4c7  gcc/optabs-tree.c
! 6793a28de0c56876c2112b5d16023055  gcc/optabs-tree.h
! 281198130b8e66f39c5bdc3a00962acf  gcc/optabs.c
! b53437741beaf4c99ae67bb5623581dc  gcc/optabs.def
! bb7dd65101e190027bd7f5d00537d338  gcc/optabs.h
! 87a1a5bcddba75fc52ca8e27664704dc  gcc/optc-gen.awk
! 990b061d98f28e3f81bece38e55950bb  gcc/optc-save-gen.awk
! 644f55b613498a30ad5561d8ac2ef3e4  gcc/opth-gen.awk
! 41e153ce211a7ce936f374042e78626c  gcc/optinfo-emit-json.cc
! 9f4a9925296f20d19d64305038880c83  gcc/optinfo-emit-json.h
! 856ea796d22dcbc9579527e46613d813  gcc/optinfo.cc
! bc4ea40198df1dade8ab163363fce555  gcc/optinfo.h
! 4f56fcf0a392e7e80904a168ee8e362e  gcc/opts-common.c
! d5cb4f8e14c4ba3e56b5393c98bf2a04  gcc/opts-diagnostic.h
! c9cb78ef27abfd3a19982545f0f1808d  gcc/opts-global.c
! f316f70576f525302035fef1dada4d51  gcc/opts.c
! e49edd063f36ca8da3c7e467dd2e72bb  gcc/opts.h
! 529cc4ae108023927cb547f8ca02217a  gcc/ordered-hash-map-tests.cc
! b8aef1accc1173ea4c812bb38b6d838c  gcc/ordered-hash-map.h
! 5a1e78bb30f4fce7f27617243badc49f  gcc/output.h
! 02d290c71b380e6229207c1d11cea4a9  gcc/params.opt
! a20c703e91812007ab8b94eec673c02c  gcc/pass_manager.h
! e733e0309389f9d07184e98b6ad9b536  gcc/passes.c
! 79107250ba3fffee8a8c1198fac08f35  gcc/passes.def
! f09db14eb185fcdd795ff7e690b607a3  gcc/plugin.c
! 3cc53b8d5f30aebe3f70c00e1bc4929e  gcc/plugin.def
! 7a5190d86531b8d3fa67e8cea7db5d60  gcc/plugin.h
! 7cd32b134f7041026af3fd0f94e9cfb7  gcc/po/ChangeLog
! edbad8e043a44996d844fa6a7965ea6f  gcc/po/EXCLUDES
  f2e76d86dce1f72d4adc901bce318410  gcc/po/be.gmo
! ac4e50148300959070bbe8161dc44c3d  gcc/po/be.po
! 680b85df73c3595a24203e46470cab71  gcc/po/da.gmo
! cd209a61ad16e7cd931a0de9463cc2c8  gcc/po/da.po
! 5652feae38920ea7c536d1aabecaf6b4  gcc/po/de.gmo
! 819c90fd3d4e90e218cb106d8f0fffa3  gcc/po/de.po
  189b9d1af87594807b0d0e10036a64c3  gcc/po/el.gmo
! d33491ab49bccbbed36414a307dc2e2c  gcc/po/el.po
! bf440aba8eb74a05312b58ccf530d289  gcc/po/es.gmo
! bd9b9853259dd7b907e88909b289310d  gcc/po/es.po
! 7864bb17dac2262d471e713d8281391d  gcc/po/exgettext
! 13d326d68d0562189cef7984da95acfa  gcc/po/fi.gmo
! 6497c49deafad1bd02158573a715d662  gcc/po/fi.po
! bae835b73696971851e5ab5e4718fd16  gcc/po/fr.gmo
! ff5fcbca705ab819895923a776364dd9  gcc/po/fr.po
! 772351e0c50cb32d0067a5ce96df6dde  gcc/po/gcc.pot
! 93a1b38e65e3c610a790c05f56e0b4c7  gcc/po/hr.gmo
! bf405571bd70e4e74e61e467a5b26edf  gcc/po/hr.po
! 00ce488da37914ae93c162110da8fc42  gcc/po/id.gmo
! 9215fff2c92c12bcc03b88595bae9f46  gcc/po/id.po
! 7f926ece8835398e225eeb2afe24873e  gcc/po/ja.gmo
! a7fe213c8e9b044ffdfa020820f18b3d  gcc/po/ja.po
! 53742057e3aba5de16019e5240ccf1cf  gcc/po/nl.gmo
! 17c967325d3bdb88a0cdf4524a0dc45f  gcc/po/nl.po
! 7838d5c61226e7bbcd591aa0b1ec6d91  gcc/po/ru.gmo
! 69df1831786980800afb69beff6a592b  gcc/po/ru.po
! 8bc081540eb1f847686363280275c751  gcc/po/sr.gmo
! 94f8d433e2a9cc81b713fd1a43b98247  gcc/po/sr.po
! e9194b8f95d23ce1c7b794a47eb9a182  gcc/po/sv.gmo
! 3eed1ac86eb61ee32f3ed9545a60c849  gcc/po/sv.po
! 7e8b7655e543e71878170717144160d5  gcc/po/tr.gmo
! 133ea5f00a61873be00939a665dcd243  gcc/po/tr.po
! 31eb9b0da58652b61873eaf3e518af8f  gcc/po/uk.gmo
! 25d23f17c7099ad327e32dbe61515f2f  gcc/po/uk.po
! 74badc940a2b0fe1c95de867f9ff00ea  gcc/po/vi.gmo
! 9c6dcdbb9403d9ba3f850cd27abbffe4  gcc/po/vi.po
! b9fee1bc17d127675ad7e0c002fb483d  gcc/po/zh_CN.gmo
! 0a73c42c60500ceaecad47f35d392794  gcc/po/zh_CN.po
! 2ce773282dbd8183473fa94acc97bcc1  gcc/po/zh_TW.gmo
! a7e9bd5354e5a900313112268fece3ed  gcc/po/zh_TW.po
! b5cf217de74bfb4c25a64c52994cfb70  gcc/poly-int-types.h
! 0799d24ba449e6a51e2fd9ed43c2c895  gcc/poly-int.h
! 64ee81daa4eca1addeddac912f6da05f  gcc/postreload-gcse.c
! b404bf87ba532b757ab920bf8cfe6048  gcc/postreload.c
! 1c6e02c995e8a1da4d8f82546e0f7c22  gcc/predict.c
! 692b197c8926e88856e6061898336287  gcc/predict.def
! 41abb41efe44ad2ee6ea81fa0efe8981  gcc/predict.h
! df55ecfee3c8d6902de1f0a401662b34  gcc/prefix.c
! 9fba94532cf396fff56f772ffa6107b8  gcc/prefix.h
! d29c40bceaa5fc6b443a08ba4630233b  gcc/pretty-print.c
! d01d7a2533e9497668e7404796746bd9  gcc/pretty-print.h
! 90a47dce7301a37bf58e4042ebabe951  gcc/print-rtl-function.c
! cb226062ece2a84c1c6361850c4031c0  gcc/print-rtl.c
! deee577e231c225d30f402a5dbfbbf97  gcc/print-rtl.h
! c254cdb20b6b4f0d1184f5efbdb7a12c  gcc/print-tree.c
! 939e1ac4ae79e543283a86483c65be64  gcc/print-tree.h
! 1a448948309f39bb6e30b497b910e707  gcc/profile-count.c
! 732d17acf6267a969e39ba2419b27ff9  gcc/profile-count.h
! a96706db9e9f3013d94609d7b3718fab  gcc/profile.c
! 1cb6f0995127d2a5f07d8852252b9204  gcc/profile.h
! 5e2a9fce41837994cb9cab6678b9699f  gcc/range-op.cc
! 530b558465d45ba8a4791807c6b35b24  gcc/range-op.h
! e63b7b269775057b328a377113078b16  gcc/range.cc
! 1d7d661f2f501c3ed5b4b1b370a6a4f0  gcc/range.h
! a486c75e8bb4883fbf34d1f33297b7b6  gcc/read-md.c
! c02193da75688acb66896e09eb244741  gcc/read-md.h
! 2de4ba78c5390a42fd0329c2be88b8c2  gcc/read-rtl-function.c
! ea3522c1c481b20f1132e7405a14ac3f  gcc/read-rtl-function.h
! f16337b3cb06bf956e8b9881213c9ca6  gcc/read-rtl.c
! 9599f1d43ca1293cc811368da86d01a3  gcc/real.c
! 2a8c2fe81f01afe8b43a1f6a07743fd1  gcc/real.h
! 3cfbe5c8f6f8cb8aeeb10c0c20847942  gcc/realmpfr.c
! 1336428ec3de403ee3a67a32e46a2950  gcc/realmpfr.h
! 6a97b272d95ec05f8a4ca551c2031d37  gcc/recog.c
! 6d79a91b3db1ae875470ac88c3017e73  gcc/recog.h
! d413cb4a0b232cc480a3b8be25d8be8c  gcc/ree.c
! 4991d12d362b1f941f85124f99dd06ed  gcc/reg-notes.def
! 37dee4e1c279832a39f2cc014a775cc4  gcc/reg-stack.c
! 705a476e963c6de845f4a9cd4a8f5d54  gcc/regcprop.c
! f0e333f39bc1495a06bf48c9bf845507  gcc/regcprop.h
! afbaaa4f2b3dbd0fe78f439084f99424  gcc/reginfo.c
! 94f9d872d3709162b0c8f5cb5a59f3f2  gcc/regrename.c
! db1c9b9d3057a97aba76c18fa6e65fe3  gcc/regrename.h
! cbb3ec9de2848e74201ddcf7756e6912  gcc/regs.h
! b4f529c79dd2003cb163fccdd4d12a8c  gcc/regset.h
! 112f438c4bd1a37cd81243afadaf37b1  gcc/regstat.c
! 52ee4cbbdfe3502a793c22f6c717d543  gcc/reload.c
! 3d85d06e0f7956157e20afc1f42fcc4c  gcc/reload.h
! fc737be9f0a22313bce027bb53172bbc  gcc/reload1.c
! 0f882f5afe61c8f2d0f0b96fce3cd1d1  gcc/reorg.c
! e706490a6624ce6a4464a59f26d1a1ef  gcc/resource.c
! e28191cb00a98e949cbc143f320a07f6  gcc/resource.h
! 395545fee8f1c11da026dce110db4a5b  gcc/rtl-error.c
! 398f3fc2e537011bb0d00cdd81ae876c  gcc/rtl-error.h
! 4e409a0d5cc6dc9e0629b228d3b558ba  gcc/rtl-iter.h
! b476f310624f2f8985ae9e6f5cf84795  gcc/rtl-ssa.h
! 2bd899bd5847e63d4b3c22b4c3f8d681  gcc/rtl-ssa/access-utils.h
! 9822866edc851e6fd12a04438671f67e  gcc/rtl-ssa/accesses.cc
! f83f422aa1010eeeedab15e026a7da14  gcc/rtl-ssa/accesses.h
! d732812e79a20c21accf4bbde2d16fe6  gcc/rtl-ssa/blocks.cc
! 26f90cf52a833397e160517c50f76928  gcc/rtl-ssa/blocks.h
! b749412578d62bfb2a22711a55df1124  gcc/rtl-ssa/change-utils.h
! 91a7a054b154b2b8dc02633939d813fe  gcc/rtl-ssa/changes.cc
! c56eb80685157a57af3f4b646a16c3f5  gcc/rtl-ssa/changes.h
! 30aa74b1044e85d68bd3845aa629468d  gcc/rtl-ssa/functions.cc
! d3d3033d7a0921fde6380ce023929f4c  gcc/rtl-ssa/functions.h
! c13065dc1b1a9319f869cccc13d93de1  gcc/rtl-ssa/insn-utils.h
! de2b4ba71be041cd082a66fef50ee399  gcc/rtl-ssa/insns.cc
! e1595b6b1a7c703394640bffc7357aa5  gcc/rtl-ssa/insns.h
! 3e2be38fa239ba65ce01840b6b1e6717  gcc/rtl-ssa/internals.h
! 3bcc3658e3e130fbbe4a9fbd9b0c3cd3  gcc/rtl-ssa/internals.inl
! 35c148bf46eb74781693030d7425a974  gcc/rtl-ssa/is-a.inl
! 105bec65bd605c46e6821361bf1e5708  gcc/rtl-ssa/member-fns.inl
! fc0c483ef35b0916889eb450dec30684  gcc/rtl-ssa/movement.h
! 6ee04c4c4fb71b581e0a42e7b5a7a73c  gcc/rtl-tests.c
! dea69c3608ee51d947ef5ac67c2ca95b  gcc/rtl.c
! 6e2727b9e2075fddcf252ad25dc6d604  gcc/rtl.def
! 7e6d263d2294090c692ce74d323d8da7  gcc/rtl.h
! f1c9464a3f3b95e046a84ab7490fa640  gcc/rtlanal.c
! 394592e1cbc71b6283d230cf895f1248  gcc/rtlanal.h
! 600140db9bd5eefa41bca935dcc1a901  gcc/rtlhash.c
! 97a32042580f6bc444125e76325e9f8e  gcc/rtlhash.h
! d442e404f8a12b3482e26c26359a21e4  gcc/rtlhooks-def.h
! 5c83843134a5634190ac6b06ecab793f  gcc/rtlhooks.c
! e2fa89c07eab45e7d8ce537cdc0fca26  gcc/rtx-vector-builder.c
! e5637ad1421cf58755da5be7aa6e031e  gcc/rtx-vector-builder.h
! d756cda29fd0d41dd981deb94691ead6  gcc/run-rtl-passes.c
! 849a7f68c59cf805134725f6d573a12a  gcc/run-rtl-passes.h
! 88681762ad1b72a93cd61d0ceb6922d4  gcc/sancov.c
! 30e67ef52139f9ecf2b0d6888b611676  gcc/sanitizer.def
! e62a73311b504f4617cb975542b8bfce  gcc/sanopt.c
! 652586958a380c79d7c38c0636cb92cf  gcc/sbitmap.c
! dd08726afeecf49aad987d4602b45083  gcc/sbitmap.h
! 5ba010d53c8923a1bfac3c71876ec3cf  gcc/sched-deps.c
! 1dccb8120a3864d3dad7e50e67049a04  gcc/sched-ebb.c
! a8ab69f209817a41138f90b904cb7edb  gcc/sched-int.h
! 7e8892a23a063802c661974bdff21879  gcc/sched-rgn.c
! 0f47429913095f74e550ab80382df538  gcc/sel-sched-dump.c
! 30aed15a512cd06bec303a19beb3e317  gcc/sel-sched-dump.h
! a81acae3c8eb55b9ef11d3725fd55380  gcc/sel-sched-ir.c
! 32ad0fcb213a9554215b78467d9d8c75  gcc/sel-sched-ir.h
! 1e3da1400d44477e586418140c5d4bab  gcc/sel-sched.c
! a263ac7eb263d57d0455625ac91b1815  gcc/sel-sched.h
! 81d86b5e84c70aa16ff704be30595478  gcc/selftest-diagnostic.c
! 266029d83f048bbaa186112f998ff289  gcc/selftest-diagnostic.h
! a58b078dfc2bee6fff5ee6c5c8542221  gcc/selftest-rtl.c
! 0a3fdf0a7c1020814aa458f9a978ebe5  gcc/selftest-rtl.h
! 764a7bc7372f40e78b70bf1e3cc2011c  gcc/selftest-run-tests.c
! 0256b9c977081184cd3a5907950fdd0d  gcc/selftest.c
! ca6c4f01ecb98f274836e166b200acdb  gcc/selftest.h
! 213896722fa74c4884070001b3a930a2  gcc/sese.c
! 256d72469217c4294582199ff0064ae6  gcc/sese.h
! 29fbb2d830b49fedf1c7c03f9afdb693  gcc/shortest-paths.h
! f5280ccc5a3572f730e3e9f2d666a2f2  gcc/shrink-wrap.c
! 9897b577c2ae3dd2e97acbc7f9997aa1  gcc/shrink-wrap.h
! 76ee65471a4687e0cc302ecc0eabc3ed  gcc/signop.h
! 4fb4cd68fe24ab86377885622438650d  gcc/simplify-rtx.c
! d725c1ed28fee55321c1c32911d4a901  gcc/sort.cc
! 547559932032c53f749936f4ba29219d  gcc/sparseset.c
! b20b0d6450f782b45d5fc19a0f3afc6b  gcc/sparseset.h
! a0bd356844b79af9c45b4fafe8042ba8  gcc/spellcheck-tree.c
! 7378c8ab08c6c1892a425eed6914788a  gcc/spellcheck-tree.h
! 19ad406f40d5fb9d45d9e1bc2a755d25  gcc/spellcheck.c
! fce094b8d65c6be9ee501d18f3bdd196  gcc/spellcheck.h
! 76d47608d5a09c52796654b91af873bc  gcc/splay-tree-utils.cc
! 8925bd354a6cec7e3a93baca2faea91e  gcc/splay-tree-utils.h
! 0e5658f8917cda0fde86f53fcf4fd246  gcc/splay-tree-utils.tcc
! ca166e9be3879c73288fcf5aa8b15061  gcc/sreal.c
! e21ab1dd466e275c55e4d9436f0ff6fc  gcc/sreal.h
! 684df6130537ea5d117383f38321b712  gcc/ssa-iterators.h
! 9c05d3e1415bdfa6a2ad5323337e36a7  gcc/ssa.h
! d6e902e1888744274c2611087cd4fb1a  gcc/stab.def
! 738d6eddb41bc5386cde6728ae4dbfb3  gcc/stack-ptr-mod.c
! 7e2ceb17ac9ff8aa77aeb5d9cba17ce1  gcc/statistics.c
! ccd953321d2603ba18ef5b6536815833  gcc/statistics.h
! 7588fbd59266bcd160cfd33fb0eb5d80  gcc/stmt.c
! 41b5fe94eb0a36e9f9edf3a3fdd6b215  gcc/stmt.h
! a03499ddf4891bc19a18b98c310fa971  gcc/stor-layout.c
! 406feb3d225e839add7be6e10e526345  gcc/stor-layout.h
! 94159ed363bf1689cf4a8aa85ca88bcc  gcc/store-motion.c
! 1e33dff2827f85693cb4f885a8425185  gcc/streamer-hooks.c
! 9ab54c0386b4f7964f5f46f6d51f745a  gcc/streamer-hooks.h
! 225060532ff5c2b868012b5842b39af8  gcc/stringpool.c
! ba17f60121ba1b5f039f9dc1078b46f8  gcc/stringpool.h
! 0e9ba4d784593d4ed23ac7186c35ae50  gcc/substring-locations.c
! 8dd5c05fb4ef8cc3bf57f5ca63d32846  gcc/substring-locations.h
! 8789ac541d37b67407d2c8a73d692d40  gcc/symbol-summary.h
! 236c95c47ab750764d02d4876b55e442  gcc/symtab-clones.cc
! bedb42e729e5bd698d0861dc145266fb  gcc/symtab-clones.h
! 8a9324974824a4c433f0d463bbfb69ec  gcc/symtab-thunks.cc
! b5513d86b09f522ec7305a04036d4f3b  gcc/symtab-thunks.h
! 1552f6db8056e30c357dfeec0ecdf6d0  gcc/symtab.c
! f013ee71feefa0d9ab11d092dab3f62c  gcc/sync-builtins.def
! 487aa89152c81610d6b03aeae45f0edb  gcc/system.h
! aba120075a77f6e309a720d322ee9eed  gcc/target-def.h
! 292e1d752e2b328261c6a201aeb21faa  gcc/target-globals.c
! 3e5db4530f6645ebcf4b051d11524230  gcc/target-globals.h
! 5ccf494f338932b80bf5f93892dd28e0  gcc/target-hooks-macros.h
! d55ca9dbaab4bc389a7da2b52a7ccd04  gcc/target-insns.def
! 7651332c9a341d2dd3decbd6a938d857  gcc/target.def
! b3739b072aa976c2f9f9825ac6d07c80  gcc/target.h
! b71dcf011f9b95f3a705da052a95caf9  gcc/targhooks.c
! 104445ec4cf950b087d249c268d36edc  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 27401e67713b44e67fb8e8100e2ef209  gcc/testsuite/ChangeLog
  862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
  029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
  13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
--- 5872,6459 ----
  ead5ac25b7b99d361225e0fd940e286a  gcc/go/gofrontend/go-optimize.h
  5b59619fab7e543c5bb28dd8a6d62793  gcc/go/gofrontend/go-sha1.h
  8d64d49cf01e7d7605f32b644d82c7e1  gcc/go/gofrontend/go.cc
! d0c206bbee40862a4251351a8a3194ea  gcc/go/gofrontend/gogo.cc
! 7225312726c1a007ca4244c66fe8157d  gcc/go/gofrontend/gogo.h
  f9015ccccf7764d4c6eeae1bd5e01c7f  gcc/go/gofrontend/import-archive.cc
! 69248b78bc1185657dbc63be6016ac45  gcc/go/gofrontend/import.cc
  0a9e27f1c3baa96ef288093aae5e2d3d  gcc/go/gofrontend/import.h
! 52b99a209e77281dd06be084c671c85f  gcc/go/gofrontend/lex.cc
! 9122b6b86b48dacc593e397f5f915922  gcc/go/gofrontend/lex.h
  43b62193a1fb46a6002699db1d668d60  gcc/go/gofrontend/names.cc
  98235b1a736055cd6a130337a9ee8e8e  gcc/go/gofrontend/operator.h
! ab2752d4c13503459d9b0e72aef27311  gcc/go/gofrontend/parse.cc
! fdc23bf9fa3d45fac329dccdacdc09bc  gcc/go/gofrontend/parse.h
  2c0d81f700bca5c56dfcd3a7673e2e82  gcc/go/gofrontend/runtime.cc
! 06ed40caa7a515346c6a4708bc2dd50e  gcc/go/gofrontend/runtime.def
  978a7b1924ca7f696fa5d0da3c9ccf60  gcc/go/gofrontend/runtime.h
! 30757cf9cc9c43ff745ecbafbb382796  gcc/go/gofrontend/statements.cc
  2eb4054e4a44955e627d6732684b0563  gcc/go/gofrontend/statements.h
  bfc57c7a1e73452c4b277ad13efbddbd  gcc/go/gofrontend/string-dump.h
! ae8b0ec75f2ebcf5ae469db758072686  gcc/go/gofrontend/types.cc
! 0e2585f706525b962e98b90c1661ecc2  gcc/go/gofrontend/types.h
! 1a87c48a17e95c935789de3db97a6ba8  gcc/go/gofrontend/unsafe.cc
  090095c2b56e6d719c7e5ec12e5daf7a  gcc/go/gofrontend/wb.cc
! 9bab8094ad5c05dd6a3023b0c84de22e  gcc/go/gospec.cc
! 1f1f31492444863057fdf7f636c0e3fa  gcc/go/lang-specs.h
! b26f58f9b8d2e66f41b69e41a5fc634e  gcc/go/lang.opt
! 0b4376ad5ba057571460bf2f28d621bf  gcc/godump.cc
! 8c795c8e443ee545bd61b9d00efb93e2  gcc/graph.cc
! 0166e629ed9af9dbcf8cd7821198a3e0  gcc/graph.h
! c0cfb31988470f2c7746d3acf71db806  gcc/graphds.cc
! 49a20d3c138232b389e4f378c44dde94  gcc/graphds.h
! 439a7883bbd573e16bfa84e5d29dd85a  gcc/graphite-dependences.cc
! e1d2641de73f71e858bdc59642478e79  gcc/graphite-isl-ast-to-gimple.cc
! b6a750b8bd7d464db0302a8855d47a3d  gcc/graphite-optimize-isl.cc
! 2bd681a2e2694bc581985dcc664b6af4  gcc/graphite-poly.cc
! b1345c750ec1f358eddd66040dea5c73  gcc/graphite-scop-detection.cc
! abdec23c79b7c93b53b7ec244ba96f98  gcc/graphite-sese-to-poly.cc
! d113ba3e95d248901ece4282463c7d20  gcc/graphite.cc
! 86795d470c30733a02cf24919dc32af2  gcc/graphite.h
! 670eca0f178e49233969f1794051443e  gcc/graphviz.cc
! 8faff969ae1c246dbe2636a0821afbec  gcc/graphviz.h
! 87b40b91b9f082b31567e1e7d427a457  gcc/gsstruct.def
! 8af61f74886a7d089a64a325ed3ad03d  gcc/gstab.h
! ff9772ebe36c907d443ac5547b9e1eb9  gcc/gsyms.h
  c32a1d882e7039afe158bb9e59b65223  gcc/gsyslimits.h
  053ee4a84e4593c88c088f25e153d1a5  gcc/gtm-builtins.def
! 86f0aed1712cf07dd58801c0a74f2fc8  gcc/haifa-sched.cc
! e8d57ef6cd4e7cf457a7c55214b1e7be  gcc/hard-reg-set.h
! f754701a3dfeb0bc0064efd1d93dde91  gcc/hash-map-tests.cc
! 864337924f855f4a26edd60a03a83f01  gcc/hash-map-traits.h
! 0680a18203966ab0047ba39cc867057d  gcc/hash-map.h
! 74f9d4c70b96de3e65a447d728de3771  gcc/hash-set-tests.cc
! 1d4959572958d197bd66adbb014cc5aa  gcc/hash-set.h
! 75fae46ce694e01815f579a0c813481d  gcc/hash-table.cc
! 319a2b3b8cb215498607d3e0ec5385a0  gcc/hash-table.h
! 544b88197685524c8552a2e9cb0e14f7  gcc/hash-traits.h
! a6dfe40be12633caecf9adb44f93a5f1  gcc/highlev-plugin-common.h
! 4c2e6fd659243e49ddde1820ac178750  gcc/hooks.cc
! 0b9aabf6caef04446af82ac2efa97f11  gcc/hooks.h
! b38b09eda344be477ef827e9f4fe19fc  gcc/host-default.cc
! af24555e2f19dd23a9d89645c9b00577  gcc/hosthooks-def.h
! 8e327cf34321afea611379a9fb109383  gcc/hosthooks.h
! bf47ed453b2791c3b17c322089fdb9b5  gcc/hw-doloop.cc
! 6e9157293e477321b57dc9ba415b3547  gcc/hw-doloop.h
! db784c4dec382bf69e2da718a29b71f0  gcc/hwint.cc
! 5637a86533a4ad6cffd85d62f9a3e55e  gcc/hwint.h
! 2d0a18cc55557a107c60820df5195939  gcc/ifcvt.cc
! 58891b9146041bf3fb0a551f9f19d519  gcc/ifcvt.h
! 77b20fe549fa329cc38f5020121033e0  gcc/inchash.cc
! 96c0d1fcd738780624d5f80686c5092d  gcc/inchash.h
! b2601efef3469f55f906681ff6be137c  gcc/incpath.cc
! 98fb0e89e4d4cb74def77b7e62322e54  gcc/incpath.h
! 2e118234c0b022ba48c6f832f398997a  gcc/init-regs.cc
! 14450cd0dfb4aec0128aebdf8538bad2  gcc/input.cc
! acf3629698886d7731465289650fbbae  gcc/input.h
! 4c297622fd65667c55ca02af467839b5  gcc/insn-addr.h
! 5709259b06b655ea8191ac2302e2d9b7  gcc/insn-notes.def
! 2e02df0276f8a31361cab997f6a982d5  gcc/int-vector-builder.h
! d8b816ce0804ccf49972f9737caa47c8  gcc/internal-fn.cc
! d7430b67aefa3403a2207e43265581a4  gcc/internal-fn.def
! 1c74a8a85d4a17c3325c17130dd7db5b  gcc/internal-fn.h
! b443a7d193ebaabda76bd4c23fe54323  gcc/intl.cc
! fdcce39ba434215ff2ed425e037af50e  gcc/intl.h
! af937d6371bfc6dae1126fa3b845a40d  gcc/ipa-comdats.cc
! 2664f3c0c08cbcc354c2084e9bb2512e  gcc/ipa-cp.cc
! 16e76ae631e7fbdef7ff117fe1630735  gcc/ipa-devirt.cc
! b8faf7652ab73348eb8dfd2b188a5d56  gcc/ipa-fnsummary.cc
! 634795391b1718599123e8f6f5dd1068  gcc/ipa-fnsummary.h
! b34559e01a3cf2fa5b4a65c745283e25  gcc/ipa-free-lang-data.cc
! 8549067301085950d4377b2f3edf87a0  gcc/ipa-icf-gimple.cc
! ac03bc194f37ee5eb93086c446e09d46  gcc/ipa-icf-gimple.h
! b00f962e46fff91577c8b17bed439305  gcc/ipa-icf.cc
! 160f6907201241c29aa0aba8c773fb7d  gcc/ipa-icf.h
! 565b1ea811f3e7314cb48b887d1bd0a3  gcc/ipa-inline-analysis.cc
! 3691be748be0839f168ca434883e3578  gcc/ipa-inline-transform.cc
! e3a631a3659e24702ef403fc44290218  gcc/ipa-inline.cc
! 1fa2c0c59dc4da56860cc6f2a97f7f83  gcc/ipa-inline.h
! df25330f62b3dfe116e3d208d97382c0  gcc/ipa-modref-tree.cc
! e232a9fa53a9e55ca7d904fd6d08cfd3  gcc/ipa-modref-tree.h
! 626c06f88fb95c500f85a961b35a2586  gcc/ipa-modref.cc
! a1998332fb371fefb1d136e55f251318  gcc/ipa-modref.h
! d31cf24ad65cb55bd058bbf61fcb7bfc  gcc/ipa-param-manipulation.cc
! e01722139c46d541a8e92df69558f7b8  gcc/ipa-param-manipulation.h
! 1a2032e460d88a8d7a36ee255cd5def4  gcc/ipa-polymorphic-call.cc
! 8e4ffa832ff8be986741e4db4fb7a14d  gcc/ipa-predicate.cc
! 8ea80a7dfb62d31f755b1bab47536cfb  gcc/ipa-predicate.h
! 186ed06995655200325c448906fd4688  gcc/ipa-profile.cc
! ea45e35710e0b61781d0a4c3954469b8  gcc/ipa-prop.cc
! 1886f17f08aedfc3b28183e70fa52ff0  gcc/ipa-prop.h
! 2c96c4cdf72bb1e412dadeb5734512bf  gcc/ipa-pure-const.cc
! 57bca18eaf2476064d1e04fcdcff555b  gcc/ipa-ref.cc
! 2704b79d11adc7a154b9c72ea85288ec  gcc/ipa-ref.h
! a5c421a540721b61c61e6e0e8cb8ac47  gcc/ipa-reference.cc
! b5523beb6810c27a90444c6dd0744a80  gcc/ipa-reference.h
! 94d75f3a7f9fcda0204662eb63802065  gcc/ipa-split.cc
! 0399373d69f5a7085e6029ab7bf3959a  gcc/ipa-sra.cc
! 1eff5e5b8af176fb3f489ae49f5cbc09  gcc/ipa-utils.cc
! dbfb6bb9b1400f13bca5fda78201273f  gcc/ipa-utils.h
! 8a547e92baf737a8fc04f7c0160bcfe8  gcc/ipa-visibility.cc
! 24068487465b2b0884da77d0edd56104  gcc/ipa.cc
! f4080e815a15377b31e1a5121b4f355a  gcc/ira-build.cc
! 663de3973953c591647e0751949d3404  gcc/ira-color.cc
! e1cc00ac750d2309c8bf601fdc0ff939  gcc/ira-conflicts.cc
! fb9cb73627e80643993ba3bb95fc6a5a  gcc/ira-costs.cc
! 700ffd99cced69aa1063e1e15c326aa6  gcc/ira-emit.cc
! bf17a41178d7542874bac4bb67e4e39f  gcc/ira-int.h
! dd51496e4c7b4c7a7fab6af86cc145d1  gcc/ira-lives.cc
! 7a1006d3db9cf4ac789afbbb5b61175f  gcc/ira.cc
! 16270966db2614c9182968e8d3013de9  gcc/ira.h
! 6823bfd00e26375bea4870c4262d82b0  gcc/is-a.h
! f0e382f9c69d3559571d2a5c7142f12d  gcc/iterator-utils.h
! 3e0e0f5c7c6e65c37681b445a3ba5390  gcc/jit/ChangeLog
  6071bdf04fb356c5ac99a99ec00c9a12  gcc/jit/ChangeLog.jit
! e62751adf42d37bc9f1df41eb7d60bec  gcc/jit/Make-lang.in
  fd0d76b6467c987f813d430a35d4760a  gcc/jit/TODO.rst
! 402c4c7ebd371c4d044b0d12519fdad5  gcc/jit/config-lang.in
  df53fb6b84c435b56ac2cb2727b62b27  gcc/jit/docs/Makefile
  aefe50c9e37a2e7a06545dbc6b38bbd4  gcc/jit/docs/_build/texinfo/Makefile
! 40d770c0fff5fdb135c9832c697a6e05  gcc/jit/docs/_build/texinfo/libgccjit-figures/factorial.png
! 40d770c0fff5fdb135c9832c697a6e05  gcc/jit/docs/_build/texinfo/libgccjit-figures/factorial1.png
! 11b13c2e317ff217420ed928ce4ba00e  gcc/jit/docs/_build/texinfo/libgccjit-figures/sum-of-squares.png
! 11b13c2e317ff217420ed928ce4ba00e  gcc/jit/docs/_build/texinfo/libgccjit-figures/sum-of-squares1.png
! 8f111c576100424bbfefdced11dd0094  gcc/jit/docs/_build/texinfo/libgccjit.texi
! 275ca6e3751c9aefb9091a848cb75e1e  gcc/jit/docs/conf.py
! 1f74fd570fcd4f621610673dab94c89c  gcc/jit/docs/cp/index.rst
! e3883177e1a58f3ed7a9cc9bbf509a5b  gcc/jit/docs/cp/intro/index.rst
! 481c040ec748877e05bc6802e28b05be  gcc/jit/docs/cp/intro/tutorial01.rst
! 091c91d52dd7ce0e830961a880d0b691  gcc/jit/docs/cp/intro/tutorial02.rst
! 6ecfccde09676bdd23b9502329eff50c  gcc/jit/docs/cp/intro/tutorial03.rst
! f0ac492e6e028a4e1c664869d048952f  gcc/jit/docs/cp/intro/tutorial04.rst
! 11ba6e827755883eab16cb12f7d4bdf9  gcc/jit/docs/cp/topics/asm.rst
! d2a7085370d8a9543da60cf4cfb6c05d  gcc/jit/docs/cp/topics/compilation.rst
! 66154d213f6daf0381aa6dddadb6ee29  gcc/jit/docs/cp/topics/contexts.rst
! 0d207fdaccc9ad58289de4c213ff269f  gcc/jit/docs/cp/topics/expressions.rst
! 020b662969db4f466e869dd51ad8fe5b  gcc/jit/docs/cp/topics/functions.rst
! 0e6c3d1be9d3c31c693d6be176a42617  gcc/jit/docs/cp/topics/index.rst
! dfb41d8aadcd5ed15039283ff27e0b85  gcc/jit/docs/cp/topics/locations.rst
! 8080716494a217970f63875da6a77acc  gcc/jit/docs/cp/topics/objects.rst
! 2ad2788f6ac9584aa3a338f68bbb7744  gcc/jit/docs/cp/topics/types.rst
  98a4c0efa41e5eb7177483e4cd99a81e  gcc/jit/docs/examples/emit-alphabet.bf
! e4cadb33ae71e3b564503c06a3cd756c  gcc/jit/docs/examples/tut01-hello-world.c
! dfff336f9ff05fc08650fcb3a96c3beb  gcc/jit/docs/examples/tut01-hello-world.cc
! 358adcaaa6f3fc48bb9eeea9edc981ae  gcc/jit/docs/examples/tut02-square.c
! e2f8595fe7ce9f1fb90817f82ee4ad48  gcc/jit/docs/examples/tut02-square.cc
! 0eb88ef6af1ceb1b4499b4fa4b0fca17  gcc/jit/docs/examples/tut03-sum-of-squares.c
! 7f1af178bff65a053602e8c38dea1a39  gcc/jit/docs/examples/tut03-sum-of-squares.cc
  6369d2b07520cb0fc9d14082499f6be2  gcc/jit/docs/examples/tut04-toyvm/Makefile
  999c1d2b92d5d71565c67854aad60e9c  gcc/jit/docs/examples/tut04-toyvm/factorial.toy
  efe1998ded06ac3721d9ced4d96056f0  gcc/jit/docs/examples/tut04-toyvm/fibonacci.toy
! 37aaea2452323bfba95a12e1882ad2fe  gcc/jit/docs/examples/tut04-toyvm/toyvm.c
! a491531d04e13cb5eafdd268e5b70e2d  gcc/jit/docs/examples/tut04-toyvm/toyvm.cc
  3cbe9daf70398730ee60aa4caf2fc200  gcc/jit/docs/examples/tut05-bf.c
! 0c995e11f2e1b7498a431089f027ecca  gcc/jit/docs/index.rst
! ab89d7116bc3e173b1bb83d0f492e6df  gcc/jit/docs/internals/index.rst
  d72502d68617b68873d385bcee6e9c4b  gcc/jit/docs/internals/test-hello-world.exe.log.txt
  40d770c0fff5fdb135c9832c697a6e05  gcc/jit/docs/intro/factorial.png
! 860a0e552515d0b60176494c7f83cb94  gcc/jit/docs/intro/index.rst
  11b13c2e317ff217420ed928ce4ba00e  gcc/jit/docs/intro/sum-of-squares.png
! 8b28780b7c0bcb7accc44e0823aca381  gcc/jit/docs/intro/tutorial01.rst
! 4c7a99553de8972d38363291efeb7c30  gcc/jit/docs/intro/tutorial02.rst
! fbbe9606b116b197cb494d328fb2c867  gcc/jit/docs/intro/tutorial03.rst
! eb06c420b7016f9753c7c2850670436e  gcc/jit/docs/intro/tutorial04.rst
! 4f2f54a3f25e07e7cd27bc4814a06359  gcc/jit/docs/intro/tutorial05.rst
! 565e27214bdb913e773f1f9cc0ebb034  gcc/jit/docs/topics/asm.rst
! 26c87ba669b8ee4cb102c69d5bc2bd4f  gcc/jit/docs/topics/compatibility.rst
! b5542c66a7d2c811edb211067f6f679a  gcc/jit/docs/topics/compilation.rst
! 5d35bb561c32a689ebac635cdcca3910  gcc/jit/docs/topics/contexts.rst
! 9d72c81e82f52e2cfa9c056e4656db50  gcc/jit/docs/topics/expressions.rst
! 1f6297afd8b054b357149db79a3e29a9  gcc/jit/docs/topics/function-pointers.rst
! 7f3678ad946b6c95a8914b312cebf1e2  gcc/jit/docs/topics/functions.rst
! 8698de581a131542acfd2f5b43671b7f  gcc/jit/docs/topics/index.rst
! 0385e65a963ad3c4a03318c98a5f7384  gcc/jit/docs/topics/locations.rst
! d5eb7f870a52392a7f851b9273e79558  gcc/jit/docs/topics/objects.rst
! dfc5a4183f788312374f4c164f54ba72  gcc/jit/docs/topics/performance.rst
! 0011b7e32875f033ad6e1d9cac733cd7  gcc/jit/docs/topics/types.rst
! da3b2dac0a80b6671368d9c9ef01bcab  gcc/jit/dummy-frontend.cc
! b657f7dee2d560961b9d00a791da8f95  gcc/jit/jit-builtins.cc
! 48cf4bc13be34bb0f1528b650afd1da6  gcc/jit/jit-builtins.h
! 40a4f68ba479151c1ccade41ac529858  gcc/jit/jit-common.h
! e5a16b4bac6915a6051f99af06a38e4d  gcc/jit/jit-dejagnu.h
! 6a651ddbc42e2a56c2bd64081350566d  gcc/jit/jit-logging.cc
! c4162fddf2309911a007c1e108ff1694  gcc/jit/jit-logging.h
! 8a0750b3e6ba91abbc049c2a315d5f51  gcc/jit/jit-playback.cc
! 115c16c21eb261f4e87aea73a56ebc42  gcc/jit/jit-playback.h
! 19eb6ef85eda452678f708a58ab16997  gcc/jit/jit-recording.cc
! 31b6491b360e994550528f00ef2f36d6  gcc/jit/jit-recording.h
! da823dca57773c9e824f412a80da4c7a  gcc/jit/jit-result.cc
! c01bb9487495ff1f2437193b9fdf4f29  gcc/jit/jit-result.h
! d072c6bd97bf96e0a4eb6eeb48e017d0  gcc/jit/jit-spec.cc
! 233d6b76a4f88605dfd082be43b0d825  gcc/jit/jit-tempdir.cc
! 38f4bb548ab41d03190c2cdcb2ee8d2c  gcc/jit/jit-tempdir.h
! cc545497c12300f9ef4ef17d957c4ffe  gcc/jit/jit-w32.cc
! 0c697219d096ce33fc4569e9619f5db0  gcc/jit/jit-w32.h
! 553ad6dd1cc7854ba6dd020e2ac39e5c  gcc/jit/libgccjit++.h
! cb3fd52cb928caf63a058a8b968d07bf  gcc/jit/libgccjit.cc
! 9a5bf994908c1ea75e3f5a2fc96d66cf  gcc/jit/libgccjit.h
! 516a7625ba55338e13cd7bfe3d60c53f  gcc/jit/libgccjit.map
! a683bef6f6721b574c76acc1efb5050c  gcc/jit/notes.txt
! 0d53b6549783fcefaf2fcb7b3e807763  gcc/json.cc
! 4f356cb91c6cb892d59536f2e540ccaf  gcc/json.h
! 60182b399ff72445629262551a23ae17  gcc/jump.cc
! 1c6bf3d0c57e2664305f3ba09b757754  gcc/langhooks-def.h
! 48bc65d3ed140518cc0488f09e3e383e  gcc/langhooks.cc
! 743d8d6dab8bc572af097aacf98211b4  gcc/langhooks.h
! 8301acf58dc339bc908008f1392cae60  gcc/lcm.cc
! 905be6ce47df0841e62b166823bf69da  gcc/lcm.h
! 1e7c3a29e43c13d41e249a061e9d2108  gcc/libfuncs.h
! d4c66c0391e81354d287eec0bcf46762  gcc/limitx.h
  83de5c6450456e215a5484083afcd32a  gcc/limity.h
! e341f9a991267d99f0bc9e1c4453d3ac  gcc/lists.cc
  30b8e3e407f46ad2cb39260ec4bab9f6  gcc/lock-and-run.sh
! 0a9c4c99ad1df21ceeeb816a2c7b541b  gcc/loop-doloop.cc
! e5932fb927bbb4bfb85cb5d33ffd6417  gcc/loop-init.cc
! 7a07a24b653f1598d13fe10794320302  gcc/loop-invariant.cc
! 8e7bd8eadb7b7bdc1e578d13b7da86c2  gcc/loop-iv.cc
! 7aef99ad78fa5457db08b420c46229eb  gcc/loop-unroll.cc
! 6308b915ddd46a98380a107c928037e6  gcc/loop-unroll.h
! 99c24ed97611de97ea37d0f4cc2288c9  gcc/lower-subreg.cc
! d5ac5a89e073a7e5b33668071523cef0  gcc/lower-subreg.h
! d5e19107ed41503bb67b0d933a4d56a3  gcc/lra-assigns.cc
! 7c4d1173e371deee7b43743215497a0b  gcc/lra-coalesce.cc
! 5c9e4539deefe9a5b8c5a1f4bd61935d  gcc/lra-constraints.cc
! 27b30505478beaf07d23cdc19a5c2d06  gcc/lra-eliminations.cc
! e9afb9364b5e117827c3db67a1717c17  gcc/lra-int.h
! cfd5ab112698229bbb833f8a805d27ef  gcc/lra-lives.cc
! b1a7f9f7a4796f7d3f6a6c60ac9d2bd2  gcc/lra-remat.cc
! 9da7b66029853aad8ec4a3840205a8ee  gcc/lra-spills.cc
! 3651205587b5293818168470115ab539  gcc/lra.cc
! f490aaab2d136c3ac960b8a2268bbeae  gcc/lra.h
! e1627fa0450d2bf925dc226db5eea40f  gcc/lto-cgraph.cc
! 5f9713f5327a766eda14c98080a2f793  gcc/lto-compress.cc
! dc7879f80a53a211ef0a2279b918b482  gcc/lto-compress.h
! abb79d7ba9534061b9c18bc473a07b94  gcc/lto-opts.cc
! 76aa6318b1ff313a3ebae8c03a117449  gcc/lto-section-in.cc
! daebc1236d16034267b252a3005afafe  gcc/lto-section-names.h
! 552822b6b924fec051ecb1eedb0d585e  gcc/lto-section-out.cc
! 5fa72ad1f6ab343eb57e2a9f42e0ec37  gcc/lto-streamer-in.cc
! 45cf33f2a79f186280384b15b18641e0  gcc/lto-streamer-out.cc
! f8113169f67aa54af90435250435dd6c  gcc/lto-streamer.cc
! 2936f9135f911160faf0cb4b721086ea  gcc/lto-streamer.h
! fc1d6bd828a1fef058695520b86517a7  gcc/lto-wrapper.cc
! c70d8cf6dfa4572082d0223de039fe6f  gcc/lto/ChangeLog
! 3abc3928a490a07a555d38d6e8879173  gcc/lto/Make-lang.in
! 26c76b7cd7c3c43bd918e8cf35d2e1c8  gcc/lto/common.cc
! f4c6748bc258cf396c8c26902b79122c  gcc/lto/common.h
! 6afd7023ef9fd6a8fae29779c0bb1578  gcc/lto/config-lang.in
! f31532497458ba97547513ece031819c  gcc/lto/lang-specs.h
! 44463c0af32e56fbd314c42ffa53a9e4  gcc/lto/lang.opt
! 6051a00819c22a3bf3e5a4249ab55ff1  gcc/lto/lto-common.cc
! 72acf275b682285263f8ded6bf1cb73e  gcc/lto/lto-common.h
! b9beeed845c35b17fc93c93c6d48f4ce  gcc/lto/lto-dump.cc
! 70c335ec062983dbc2cf79cab3a8719e  gcc/lto/lto-lang.cc
! e719d993ca5644498c09e65a9997d4a8  gcc/lto/lto-object.cc
! 4fd3b5c29ead1d413aff659921336d56  gcc/lto/lto-partition.cc
! b3aeaab4af3bbe880adc32eab519bbd0  gcc/lto/lto-partition.h
! 5856df4a1de591e39896c5c3bfb1e56f  gcc/lto/lto-symtab.cc
! 7f60a7cb3744a70b89288720475121b0  gcc/lto/lto-symtab.h
! 961812bc8fc7de0dd27cdc381f40e3ef  gcc/lto/lto-tree.h
! bf5e6aa2269343ff80fdecaeae86c158  gcc/lto/lto.cc
! dff2331e5edc5d66c07f2ba05c20a9c5  gcc/lto/lto.h
! 704dbc3758376f5f1a822ef60e3ab455  gcc/machmode.def
! ae630ad63e4030b0c8fb86461bc683c9  gcc/machmode.h
! 002d4a917af4cc0bb0f4dc295bbc4b17  gcc/main.cc
! 26bf026918b722f86e5d7d1417a03c1d  gcc/match.pd
! d9414a0dc03cec270c998d720054b9fa  gcc/mcf.cc
! efc7ef9dc4204c76b419e2a76287ef0b  gcc/mem-stats-traits.h
! a31c8fb12b7bbe32c163b580c91affad  gcc/mem-stats.h
! 6e539f0d8b20b442eaabb161f16ca39f  gcc/memmodel.h
! fe14474934e6ad2ed1af2ebf252dc75c  gcc/memory-block.cc
! 6ff8a84b1f91135bed7d0e9e560fc612  gcc/memory-block.h
! b95605bc52a4f8d760769e6d26d195e4  gcc/mkconfig.sh
! 2dd496fa05fee36c46311f63c76dbf04  gcc/mode-classes.def
! 17d331820fa48e76d6a9342e12db076f  gcc/mode-switching.cc
! 6b3daff0bb8e0990085d41fecb74b358  gcc/modulo-sched.cc
! 041841a4d2557cb845ce87946a35041d  gcc/multiple_target.cc
! b220a9ffc3d8617670a7ca765ef6303d  gcc/mux-utils.h
! 3f9518945d635e4b1e2d8fc0909495fb  gcc/objc/ChangeLog
! 80b0c093eda57fcbb8e9eddd18bedd4f  gcc/objc/Make-lang.in
! 42537e8757f2e49f7a380397d2307abf  gcc/objc/config-lang.in
! a9d5df1830f72db7d881701c1880a27e  gcc/objc/lang-specs.h
! 18a697734ecb13a1a12c866eca740486  gcc/objc/objc-act.cc
! 1289a7740d247d5b27c9c968e8cd35a3  gcc/objc/objc-act.h
! 1b8a6511f7b276a98264e2efaa13d10c  gcc/objc/objc-encoding.cc
! af186e2684d2aff9faa352ea1cff213e  gcc/objc/objc-encoding.h
! b22836839e7030071d74a1f688b18c03  gcc/objc/objc-gnu-runtime-abi-01.cc
! 6be8d81909bf67efd601e108c875bf9e  gcc/objc/objc-lang.cc
! 8a4717b33ca054bf3c6935d877772385  gcc/objc/objc-map.cc
! 05d231e9dffe3bce371b3e635e1b5921  gcc/objc/objc-map.h
! a0f7e1b164f83858a9fb8f0c96ef5e43  gcc/objc/objc-next-metadata-tags.h
! f00dfd533135d24682bb29c07f6659e2  gcc/objc/objc-next-runtime-abi-01.cc
! 0b1d7e857ce9a5805b4ead292b2f2e49  gcc/objc/objc-next-runtime-abi-02.cc
! 0ee886e63684089ef6b339e3cabd690f  gcc/objc/objc-runtime-hooks.h
! d5208088eb44cde2354166919108e041  gcc/objc/objc-runtime-shared-support.cc
! d0dff9b6758f610e9a1fd8c2351656a8  gcc/objc/objc-runtime-shared-support.h
! 9789f1f3d85fb6f3104485905ec9459f  gcc/objc/objc-tree.def
! f8d17512b9024636194dbb0b23f58f55  gcc/objcp/ChangeLog
! 00d4fe33b04eb68f4fc29d3af98290a2  gcc/objcp/Make-lang.in
! c7147535d919b13c29b364931facc65e  gcc/objcp/config-lang.in
! 53dd8ccdff91b6a4a408dc313b0705d2  gcc/objcp/lang-specs.h
! d2c6fc9e746263d862668f94a7312032  gcc/objcp/objcp-decl.cc
! 4047f9c45907fa7ca7491dc6d4ce3008  gcc/objcp/objcp-decl.h
! 1d57186920863b45e407890ff8e0a2bc  gcc/objcp/objcp-lang.cc
! 2e26690a7f9c9cfff17ce7bc5741300f  gcc/obstack-utils.h
! 7380d54b0ecce1b4b85b7730c23d962f  gcc/omp-builtins.def
! e92eaa4444ef2a0d34e9f29d19f96dd7  gcc/omp-expand.cc
! d2882be1e5e0c8bcb94e40249892eda8  gcc/omp-expand.h
! e15f4aee3401c6c0f37a5a75e94b0c2c  gcc/omp-general.cc
! e09a162f54780baf753d31877328939a  gcc/omp-general.h
! a4882775933e1b717fec703f197462e6  gcc/omp-low.cc
! adc2a811c1f1bc7a7875e5135bf5eedf  gcc/omp-low.h
! 50c0e46408111c6d28c93e42441766a6  gcc/omp-oacc-kernels-decompose.cc
! 87a8b76c5f815edca8f75a99dae1ccd1  gcc/omp-oacc-neuter-broadcast.cc
! d44efe241c116cb422d2d37f703244ba  gcc/omp-offload.cc
! b8d95a4ff9253b5ebac1c9af19eb1bff  gcc/omp-offload.h
! ce4ca27c2ad818fc1db0d7480e81ed37  gcc/omp-simd-clone.cc
! f06abfa4ba14881ee3010baefbf69d4c  gcc/omp-simd-clone.h
! 3fd03d3c8152cf473a00d6efedadb6e0  gcc/opt-functions.awk
! 60b81d4891ae3eaf5bb30f5175f93cc9  gcc/opt-gather.awk
! c51124a47a3b6c89f04733f9177ae51e  gcc/opt-include.awk
! cc40c946f7b8d8f98cea92c31d89b31e  gcc/opt-problem.cc
! 0040ccd16fe3412114ec53a82407a4c7  gcc/opt-problem.h
! 3695862735cbfad640dc6ff8238ee68a  gcc/opt-read.awk
! 6a908766705881b86f2093fb082edaf3  gcc/opt-suggestions.cc
! bd0e05064e12f50320714a3a859b59c8  gcc/opt-suggestions.h
! 5a8cce324b219e51fa147e21531c0383  gcc/optabs-libfuncs.cc
! 3a8bf24583a0106af624d257ab7ef573  gcc/optabs-libfuncs.h
! 8aa04be32c980d38fdaa7df2dd1541a5  gcc/optabs-query.cc
! c0ba177165367a0975291f9920aadf51  gcc/optabs-query.h
! 0e8bfc89a9c3d2e3abcf8600733f2fb0  gcc/optabs-tree.cc
! 52ec5ad3f57345e13cb41d723e2a33af  gcc/optabs-tree.h
! 54e76ae6a0e002668ce32afc2bb50cda  gcc/optabs.cc
! 3b5dde2042c9c3b420ce7becb5248f58  gcc/optabs.def
! 234d417c73a1c9170dfe1eb986c28950  gcc/optabs.h
! 75d4127222473ed096547c333b8da80c  gcc/optc-gen.awk
! 9fc627bb99094c96975ba6d753fadbe4  gcc/optc-save-gen.awk
! f304b54f13e9f101244e3f6f98fcb2bc  gcc/opth-gen.awk
! c74285e950d8a6ff441bcf560e0287da  gcc/optinfo-emit-json.cc
! b4ac54463074944fdc745ff8daa183bf  gcc/optinfo-emit-json.h
! a88f4db5a2f071deae7fb76236a41ee6  gcc/optinfo.cc
! 8cd985fe2f6d5ad07cd1a5234b58705e  gcc/optinfo.h
! bf4aa3291e587eeebcd692e0a392c1af  gcc/opts-common.cc
! fba5619d803715ac83289523abdb5513  gcc/opts-diagnostic.h
! cc4beb900c58d571dccc6e32de83cdfa  gcc/opts-global.cc
! f8aad64f3edffedf3ea9c927d2f8dc5e  gcc/opts.cc
! dd938b67c09210b4529d1bbb649209c6  gcc/opts.h
! 608c96449ff8c54df49bcfa66acc603c  gcc/ordered-hash-map-tests.cc
! 2fd1e46a1f4bb2fc5c2e9ffef4833830  gcc/ordered-hash-map.h
! 651aface5de56b8c0ab53aa2dcbb9bab  gcc/output.h
! 4f9fcd9e2fa2cc6ca1906fdf77c07269  gcc/params.opt
! 4f40ad3f787c9cdfef883674f2915de5  gcc/pass_manager.h
! a25a5f1c7bca0a8fba155d5af8353005  gcc/passes.cc
! ca27fff752bb2bf3547470865f677089  gcc/passes.def
! 22890b5c1619eacc2afbe4c483eba3b3  gcc/plugin.cc
! 12395edd2893f064e235e9c7ef33f67c  gcc/plugin.def
! 6a447e1b290c005312a2ddf9a4095bc6  gcc/plugin.h
! ae511386b08ed7a2c0bb223ae8f139ad  gcc/po/ChangeLog
! 23c6b9cdf5b89eab23474e0d050bc452  gcc/po/EXCLUDES
  f2e76d86dce1f72d4adc901bce318410  gcc/po/be.gmo
! bf26a05640d9bb5695285ebfd18d919a  gcc/po/be.po
! 706db60f20cf60864e74dd9ae2851a50  gcc/po/da.gmo
! 3efc10bd732edafb53fe72e876c9d35f  gcc/po/da.po
! ee38594f81d5e3c2ad29cdf99a376c3a  gcc/po/de.gmo
! 507ea3b87103231ecaf2ea96b733026f  gcc/po/de.po
  189b9d1af87594807b0d0e10036a64c3  gcc/po/el.gmo
! a5a44661cbfe028dcd77d047ba229afa  gcc/po/el.po
! 6a5ce9b214617a3d2ef05a7408541841  gcc/po/es.gmo
! 5c830c89efee4c10a3b412c1be38eeaf  gcc/po/es.po
! 80d928e1b407031cef9ae2af1c3b693a  gcc/po/exgettext
! 978aaaf6c70725e561a181f47f2db916  gcc/po/fi.gmo
! cbb017b577e048250c465bc34a067cb9  gcc/po/fi.po
! 987235fb07c0c913c83914f0937c499e  gcc/po/fr.gmo
! 4aa4cd32b446e9e1fe6752a079f58483  gcc/po/fr.po
! f21c81da86ff6ea6e8e30a2ba8dd2be6  gcc/po/gcc.pot
! fc721cab4a673e3a147ab2c3efd8bcb8  gcc/po/hr.gmo
! d784a5b1f9edd4c94651859d5119c933  gcc/po/hr.po
! 240f703e5237a9e973e99a684a6ea6bc  gcc/po/id.gmo
! 290f0d4f3d7a6aa08cdf9955a3d3b35b  gcc/po/id.po
! 068fa6ce92baa1419594dc12e93b9938  gcc/po/ja.gmo
! 6f04fa6f6e595fe2d64d360cfe7d4336  gcc/po/ja.po
! fb0cd9c2cf0534bc1ca9614cbc66bfc1  gcc/po/nl.gmo
! ef4f5eb2907c25edcbf024d57d3ef144  gcc/po/nl.po
! dd14895adb5a082b1b6b40b66f85ec49  gcc/po/ru.gmo
! 0f353933f0f64b80bbff64551616f234  gcc/po/ru.po
! d600e1ac2fd4aacfce9740df4a82096b  gcc/po/sr.gmo
! 1d4256671148817564c290e76fe893b6  gcc/po/sr.po
! 107d661c527d20cb26f110d95902caec  gcc/po/sv.gmo
! 356ef8dd6fd32949fd5626e3605702cf  gcc/po/sv.po
! 4bbe3eaa6714843da5bb0fe682576667  gcc/po/tr.gmo
! 3c81ce0562cdfd3a992a76f7cc4ef61c  gcc/po/tr.po
! ec69c259db75ea21c86e84b6fe626dc2  gcc/po/uk.gmo
! 98cc46c1cfcde9676a3d4f6d3c426469  gcc/po/uk.po
! 4599e98c2a8c0f98c7c320c76e722ceb  gcc/po/vi.gmo
! 441c0f87351a263bf8e539b5ee89afe6  gcc/po/vi.po
! 3d2ec47a18bf4d504bbbc4b19ca622da  gcc/po/zh_CN.gmo
! 8cef80587c424301818475d51950a849  gcc/po/zh_CN.po
! 971030d1bbc7c16b0a5e6d814402c139  gcc/po/zh_TW.gmo
! 4943a0dfd9e8461dc6867c9da2a46d92  gcc/po/zh_TW.po
! 685237ee0d713897ffc548a35e6064fa  gcc/pointer-query.cc
! c64ba944344ccbf9de24872de9d05e23  gcc/pointer-query.h
! 805123a4729c62a7508babaf78dbce36  gcc/poly-int-types.h
! 43c674080bb28f988f54a8a9d074f887  gcc/poly-int.h
! fd2ae1cce5d28d40cfc938db3b584898  gcc/postreload-gcse.cc
! be6dd5d8514ada55df00b97407257f02  gcc/postreload.cc
! ed394721b13fb56acf1c6191d5f8cec5  gcc/predict.cc
! eb593055037edd0d305496230579ecdf  gcc/predict.def
! 8a6cfe0b4faf09d76a3acd867697f693  gcc/predict.h
! 5ecfd67fb357b4e04e4522894ce4b298  gcc/prefix.cc
! 7760a9bcc11a08ce755f485ca05977a8  gcc/prefix.h
! afd7777a75d7e25ba8f6f5db4f553de2  gcc/pretty-print.cc
! e8a83ac50a9fe1b21760d80d0fbb98f8  gcc/pretty-print.h
! 7d8a96623d7ca4d1a1264382ed54e5fc  gcc/print-rtl-function.cc
! f5f78dc2acc9696b52d931cb01ddf20d  gcc/print-rtl.cc
! e742d3b4a182ef32a4c23e701f19da0e  gcc/print-rtl.h
! de01fe47e5757d0b334b5a7bec2027fb  gcc/print-tree.cc
! 7588bb24b0559cb171ad395838cf0226  gcc/print-tree.h
! 85f7e815b5e23825690352a470507824  gcc/profile-count.cc
! 83154797f3fac26334db4b6dabdaa09d  gcc/profile-count.h
! 4a3ee7f894aaf14b3ff668036f11d491  gcc/profile.cc
! 5639abf0de0b6df84638ef972c1a686c  gcc/profile.h
! 748eaaef6246737aaa8b9db005a0341a  gcc/range-op.cc
! 2a90c23a731511a2351b9f6a7ec6fde0  gcc/range-op.h
! 477608b7c12d6ef282bb06b52ec8bf5d  gcc/range.cc
! 2c94ae18620c7b0a4f08fd11a254cb24  gcc/range.h
! b149c10ec9175a62b2cacecd1a122265  gcc/read-md.cc
! 90b4d011426d1645ae73561e9580f7d7  gcc/read-md.h
! 395567685a6400596031764ffab205d9  gcc/read-rtl-function.cc
! d4585c5b545aa5cacf2e013b2ff344ba  gcc/read-rtl-function.h
! 3c88d8d8b7ab7b0008173c12d284746e  gcc/read-rtl.cc
! 707e5482d6c4e9fa7260cdea542405d0  gcc/real.cc
! 5e52056da5c57c516abcd8cdd3ec7daf  gcc/real.h
! 7b4e904ee64a419d0981d9b23045cc05  gcc/realmpfr.cc
! 03313b503aec1d8db4d8fde449f49d84  gcc/realmpfr.h
! d0bf0a01617142085da0701f6831f712  gcc/recog.cc
! 12a45da60edeb46c2a0d3bf386862e9d  gcc/recog.h
! b1ddc2cd23d55e34a97053ed9c1ce363  gcc/ree.cc
! 53189b1272110f2df33bb1c1ef365631  gcc/reg-notes.def
! e68c28f4da6b5b361b882d3f1b6129ec  gcc/reg-stack.cc
! e1f8089e7ec6ea9e3b6fb855bdeec5d1  gcc/regcprop.cc
! f627cd41dcd4aad44c9c2470a3f6b308  gcc/regcprop.h
! 5842d969ebe2befc3104772191621fe0  gcc/reginfo.cc
! f1b7fb6ce9004a800c39e5e0d62e8067  gcc/regrename.cc
! 14604ebf77e7f756c58d57468cab59c4  gcc/regrename.h
! 9b15cad90e011e8531588f247806ab1f  gcc/regs.h
! e220fee4e4977ddb2570fe12f97f45a5  gcc/regset.h
! 3d4aeabbe31eb2b0f404bfe55bb7b92e  gcc/regstat.cc
! 8045d9a1685d70ea8674222e4aa0fa7d  gcc/reload.cc
! 706a2adc5d0c484db36057fb33b0eefc  gcc/reload.h
! 0775a3d3caf169a31c61ae0213ae8b2b  gcc/reload1.cc
! df014e7829f7df5e9773bd9573d4e19c  gcc/reorg.cc
! 617ed1529638865ae3fc830d27ecd144  gcc/resource.cc
! 809404bdc57031fca063f81dbec0f528  gcc/resource.h
! b1ba4fb3766a132eabe47d085b341c4d  gcc/rtl-error.cc
! 3e7e3f7c4ccd0f29328e0d0c1874d875  gcc/rtl-error.h
! e73cb6832d267dceb8fc8136ffc253a0  gcc/rtl-iter.h
! c88b1a148e33f6b40896031ef906b6c5  gcc/rtl-ssa.h
! 8610a93cea6304dc2788aa6f01b3ec6f  gcc/rtl-ssa/access-utils.h
! d52cc7612c1da629541def7c939484a9  gcc/rtl-ssa/accesses.cc
! 3eb5db75af53d23d684d33354c25204d  gcc/rtl-ssa/accesses.h
! 170884c1fe55938892eadc9c779200a4  gcc/rtl-ssa/blocks.cc
! 912b1f1f358db9dc275de8d3b04c173f  gcc/rtl-ssa/blocks.h
! 97ecca51a81b7af9d4163706bb786a25  gcc/rtl-ssa/change-utils.h
! a9b0466a8fcaf8dcc0656ccfdcd9326e  gcc/rtl-ssa/changes.cc
! 675065672536cd5c3943e596a4be118e  gcc/rtl-ssa/changes.h
! f2e5391d409bb2869501df7414d15292  gcc/rtl-ssa/functions.cc
! 6c29b451df7d9b282a7e8aa5509dfb14  gcc/rtl-ssa/functions.h
! dfbe2a31f6c9d2d62db95973aa982e2e  gcc/rtl-ssa/insn-utils.h
! faee7a4258d4cc82d171b5528a07d5e9  gcc/rtl-ssa/insns.cc
! a113252925b8ea30a5f90d4e3167aa31  gcc/rtl-ssa/insns.h
! 701b877ebe837af2ef880a275cf2fd92  gcc/rtl-ssa/internals.h
! 9865ca5b56fe6adfb2c037988441e583  gcc/rtl-ssa/internals.inl
! 187d31c847aa120e0d67eea3ebed4e1e  gcc/rtl-ssa/is-a.inl
! aba021400841b2455680b33c4ae146d7  gcc/rtl-ssa/member-fns.inl
! 27dfad4fe1b8def1992e3c5a7712f20b  gcc/rtl-ssa/movement.h
! 9a15eb08c8bc3e37f3e7f02091131bca  gcc/rtl-tests.cc
! 28d849e47de1a855134d525a0ba82f9b  gcc/rtl.cc
! 95f3049d5b4203fcc3f5ae088a5135f0  gcc/rtl.def
! 97f14f16cb2979c7ebe82f23c5437364  gcc/rtl.h
! 7a854d48bacd0a212dcda634a01d20fa  gcc/rtlanal.cc
! 754a233fb9fe65a4d647a068203de262  gcc/rtlanal.h
! 24872c67a33407066d1e2a68985d66ee  gcc/rtlhash.cc
! 98bdbda9c84d693847fc9d684a5f4062  gcc/rtlhash.h
! f340d2b3d9ec996a2778aa96e5d82e65  gcc/rtlhooks-def.h
! 5b5b7156041df75951365976c5c1b3bb  gcc/rtlhooks.cc
! 6f9cf6bff5222921e29ca2adc3109833  gcc/rtx-vector-builder.cc
! 55dffa5fdf827fb8ce6ac8e4c660324b  gcc/rtx-vector-builder.h
! 5c61a40b0db2c1604fcd81dace1600a3  gcc/run-rtl-passes.cc
! 88e5e5d5c546ebfa1e660b422bdfbc1d  gcc/run-rtl-passes.h
! 21754afec4d866fd36dccc9ec097ea90  gcc/sancov.cc
! 71585d61ca3e48945c9a788d7c11629f  gcc/sanitizer.def
! 55d27ff9d307c5ad41acbff976fcc4f0  gcc/sanopt.cc
! 00aa700cacc18e479f90f7d8975e5450  gcc/sbitmap.cc
! 60808f183971685333deca5955f086a8  gcc/sbitmap.h
! d3b0269892929818b42afe15a6cdd1df  gcc/sched-deps.cc
! 57df39e1c2d59a750bb25e4379685e75  gcc/sched-ebb.cc
! 017ef4a455c2236ad43daf22c2172883  gcc/sched-int.h
! a4d5463105a9448325f12c8d335df6ed  gcc/sched-rgn.cc
! 43b03642fdaef9bee8435f07dda13a1b  gcc/sel-sched-dump.cc
! 1d6f4a4a865ff8e5c2efb1a3e4467d61  gcc/sel-sched-dump.h
! 52b13f65379f047101cc0832c65ce795  gcc/sel-sched-ir.cc
! cf9d9508ac668af502674e80a1e1d435  gcc/sel-sched-ir.h
! 876c5dcdabb8597731ee9d9979c83466  gcc/sel-sched.cc
! c3a9219a6864607e99cab9683343ae49  gcc/sel-sched.h
! e799b6d52240c0dc58b75a6d793951c0  gcc/selftest-diagnostic.cc
! a9a71c522c2346daf123827f4408af60  gcc/selftest-diagnostic.h
! c9d6648ba00cdd876945d21e7b692d6f  gcc/selftest-rtl.cc
! 134167454394caeb5ce1beea69160dda  gcc/selftest-rtl.h
! 37bcb2cf7ce7d38eaf1fcc1cdaba6c04  gcc/selftest-run-tests.cc
! 48b3931f094142613551ddfee0ce34d4  gcc/selftest.cc
! 5827409b9ac4eccd926431936dd0a736  gcc/selftest.h
! ee069b4d77956657e89b85e20855985e  gcc/sese.cc
! 741ca81389bb04a271234258629e1e81  gcc/sese.h
! 95edbadf9156f4759dc2eef235dae90d  gcc/shortest-paths.h
! 9b3adf3d8034c3b27a0fbfffb994519d  gcc/shrink-wrap.cc
! 7cf766d2a67d9a5f01cbf94ee65a7e4d  gcc/shrink-wrap.h
! 3f916b9b41ec4e4afc7dcba87bd1849e  gcc/signop.h
! d575133a94ebe83c78a8bd088fa010c5  gcc/simplify-rtx.cc
! ce34fc321bf19dbe85456eb6078d7c74  gcc/sort.cc
! c5448c3010b78c119176ba2fb21d4fd9  gcc/sparseset.cc
! 064eac30694daa27f2ce404ae7f6f59d  gcc/sparseset.h
! 8faff9a1754b8a1d7fddba2533c74537  gcc/spellcheck-tree.cc
! fd1ea65102d02a75c80bf55417765fc8  gcc/spellcheck-tree.h
! 50587638809b948bc2dfa619fe6c090e  gcc/spellcheck.cc
! 8d1eadacb0aeb08f0cecc38758c1957f  gcc/spellcheck.h
! 5b980806cf85aa82042c82cc22e9e243  gcc/splay-tree-utils.cc
! 5190c84781cbd90f849c0b58560cda47  gcc/splay-tree-utils.h
! 262dec9693b99f9b1b2e60ddb484d243  gcc/splay-tree-utils.tcc
! 34bc4ff85c25f44664c78339a2340be8  gcc/sreal.cc
! 9ac44a827e67092f1b48d83013e13979  gcc/sreal.h
! 720f9570f9e48df8a5accaae279cfcb9  gcc/ssa-iterators.h
! 918d467a2e1902b6ce8813bbfcded932  gcc/ssa.h
! 28fb0432f19b42568b4b8a3cb91774ff  gcc/stab.def
! 885c50d81ce31ca32c5f3cd351ec3e8a  gcc/stack-ptr-mod.cc
! 9dfb3c1b7e7145abc4bccafd2f75cc04  gcc/statistics.cc
! 2292602210d50d4e1b10ef7a0e5a92fd  gcc/statistics.h
! 1f89317e8e96fc3cc9fe10cb378007a6  gcc/stmt.cc
! 65903628aeb72876d7f8efa1acb37992  gcc/stmt.h
! a4180b1e8ac4398a5b20e7ba7b3fba04  gcc/stor-layout.cc
! 54b29f46a07214ad023ab51bd6cf0853  gcc/stor-layout.h
! 9576d64e55d33664bd19f4ef62596b1f  gcc/store-motion.cc
! 8940418ca4bca84c53b6223eb7e92040  gcc/streamer-hooks.cc
! 65a2d100d81ef9c034103391e8a596f1  gcc/streamer-hooks.h
! 26275a0f645566ab4da8ce4b22d48953  gcc/stringpool.cc
! 7f57ed7b36a6a7688a92c59c9ab24a7b  gcc/stringpool.h
! 3344c7a62f2c5d26e290e67d0be86e37  gcc/substring-locations.cc
! 5b5f14f2e0f93311875465eb15ea73a5  gcc/substring-locations.h
! e63973649559188ccd962a10fb0a8dae  gcc/symbol-summary.h
! d52426f1c62c0c37089feeaada3b4d81  gcc/symtab-clones.cc
! c7126fa37eaa25a33e2b35604b5232f5  gcc/symtab-clones.h
! f43d0bfaf43737b32022d2a4ed73a4e5  gcc/symtab-thunks.cc
! 20b6451c425095eeefa43b022116651f  gcc/symtab-thunks.h
! 8ba132a13bc2f6b25ab737f2f0136ebf  gcc/symtab.cc
! 6625bcc0a02138697a70425ce07e60b8  gcc/sync-builtins.def
! 9f2041a2246f4daef6c70b56b84baa62  gcc/system.h
! 2f02f0cf084fed693b3eef7675fa2958  gcc/target-def.h
! 84c7e8f0d12964716f9bc0f4ccf2a050  gcc/target-globals.cc
! 311cc5bdc01848ade2860f8dc148f0e5  gcc/target-globals.h
! 7871f47d38cc1b1e4e5df88ae8e5fff0  gcc/target-hooks-macros.h
! bdb7861240a719686c5923e70bd8347a  gcc/target-insns.def
! 1be8dcc4382db4d9bcefb2eace0cb217  gcc/target.def
! 78892c17919188d1359e9d43fdf777b0  gcc/target.h
! 6149228cab283a1f92d51b26eb37646e  gcc/targhooks.cc
! 008304bca4d8ea66f0c9bc8749e23bb5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 9e53758dc37272931b1c2dc0ac1f9b2d  gcc/testsuite/ChangeLog
  862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
  029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
  13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
*************** c9ec5aa19ca3c027fb99e61cbe7aff7a  gcc/te
*** 6363,6375 ****
  321b9905bcb2a68af6bf33c8b58ec43f  gcc/testsuite/ChangeLog-2018
  91a08c35405a286b3ada0b88a667a7e5  gcc/testsuite/ChangeLog-2019
  4b46ab741e570fbea4c5e62643efc2bc  gcc/testsuite/ChangeLog-2020
  e7518ff11c24876171978acda7f03080  gcc/testsuite/ChangeLog.graphite
  ec409caa3f1727e7dbe6b65dd8df068c  gcc/testsuite/ChangeLog.jit
  4e315f3ead950078f8af109b2d771220  gcc/testsuite/ChangeLog.ptr
  b2adb3e6b3129c9473b7e401edb63a71  gcc/testsuite/ChangeLog.tree-ssa
! 0edb4e6fa8a4958c412996f0fc107ea3  gcc/testsuite/README
! 25476f23ae8bf54276a8bfd08cf7f84f  gcc/testsuite/README.compat
! ebabd4943e4b977b06c2f19d5d783217  gcc/testsuite/README.gcc
  2ad7c00ea00d78f6d6ee090f7894dadc  gcc/testsuite/ada/.gitignore
  4004844198395fe50ecb798ed5d30f4b  gcc/testsuite/ada/acats/elabd.lst
  b32871a59b0c07cb4eda259b98fa6aab  gcc/testsuite/ada/acats/floatstore.lst
--- 6468,6481 ----
  321b9905bcb2a68af6bf33c8b58ec43f  gcc/testsuite/ChangeLog-2018
  91a08c35405a286b3ada0b88a667a7e5  gcc/testsuite/ChangeLog-2019
  4b46ab741e570fbea4c5e62643efc2bc  gcc/testsuite/ChangeLog-2020
+ befd8924364e1b5fef37bb8113265b1a  gcc/testsuite/ChangeLog-2021
  e7518ff11c24876171978acda7f03080  gcc/testsuite/ChangeLog.graphite
  ec409caa3f1727e7dbe6b65dd8df068c  gcc/testsuite/ChangeLog.jit
  4e315f3ead950078f8af109b2d771220  gcc/testsuite/ChangeLog.ptr
  b2adb3e6b3129c9473b7e401edb63a71  gcc/testsuite/ChangeLog.tree-ssa
! 69c146daa9f05c5b7095c4f980a8d5d2  gcc/testsuite/README
! 04a6e2dd58cd2ed03019db60742d5258  gcc/testsuite/README.compat
! 32f708eb2a3bbf2580770b415a48b62d  gcc/testsuite/README.gcc
  2ad7c00ea00d78f6d6ee090f7894dadc  gcc/testsuite/ada/.gitignore
  4004844198395fe50ecb798ed5d30f4b  gcc/testsuite/ada/acats/elabd.lst
  b32871a59b0c07cb4eda259b98fa6aab  gcc/testsuite/ada/acats/floatstore.lst
*************** b886a43ab960ee3b74b75b1a1895e692  gcc/te
*** 8974,9009 ****
  2f50ecd2b64eb3a3cefb0066c4c043a1  gcc/testsuite/ada/acats/tests/l/la140271.a
  004386b31584ba3e3f7171f7674e4137  gcc/testsuite/ada/acats/tests/l/la140272.am
  9c63871113de9b518e90c90fe8e20f28  gcc/testsuite/ada/acats/tests/l/la140273.a
- 7dbb3fe0d397fe7a60736cb608563ac7  gcc/testsuite/brig.dg/README
- 075d164955578b32904674b15440550c  gcc/testsuite/brig.dg/dg.exp
- d7b27695da6c28d237451b4f5ae5af57  gcc/testsuite/brig.dg/test/gimple/alloca.hsail
- 1f502a10b337d4d5d3cc57c4fd0d0f06  gcc/testsuite/brig.dg/test/gimple/atomics.hsail
- d837592f24865f99386ab68c6917abc5  gcc/testsuite/brig.dg/test/gimple/branches.hsail
- ae90c21f583f2b6a421fc30804d8899d  gcc/testsuite/brig.dg/test/gimple/fbarrier.hsail
- 97bec0e903a934e2b294ff999c9c57e0  gcc/testsuite/brig.dg/test/gimple/function_calls.hsail
- 02a476935fe7863c4679efb2b4906db2  gcc/testsuite/brig.dg/test/gimple/internal-casts.hsail
- 314cacaffe0535c7e1dab5e7cf00868f  gcc/testsuite/brig.dg/test/gimple/kernarg.hsail
- 9d8377687de37d3501d4060cba204c55  gcc/testsuite/brig.dg/test/gimple/mem.hsail
- 5847a2f69238995faccc83b042397536  gcc/testsuite/brig.dg/test/gimple/mulhi.hsail
- 0da3ce95f7ae9cfc01ac54ffe1ae4ddb  gcc/testsuite/brig.dg/test/gimple/packed.hsail
- b1d581eabac062c87bc61c1f774274ac  gcc/testsuite/brig.dg/test/gimple/priv-array-offset-access.hsail
- 94b970ae376af0e284f2976c104818e0  gcc/testsuite/brig.dg/test/gimple/smoke_test.hsail
- 1dc6e95345fe36c7fa2a0733cb0ad9dd  gcc/testsuite/brig.dg/test/gimple/variables.hsail
- 58a44273e0caa3895dd39c85e67ec453  gcc/testsuite/brig.dg/test/gimple/vector.hsail
  25005a9265a333af56789fab16cd8e0e  gcc/testsuite/c-c++-common/Waddress-1.c
  81e4d27a297a7ce6fddf1ac2a8961317  gcc/testsuite/c-c++-common/Waddress-2.c
  cc70faf06727814cce7b45e0a0d0614d  gcc/testsuite/c-c++-common/Waddress-of-packed-member-1.c
  76fa33c917471922e94d50763fda451c  gcc/testsuite/c-c++-common/Waddress-of-packed-member-2.c
  26f47ca8f4d16158af229f5e0181ba58  gcc/testsuite/c-c++-common/Warray-bounds-2.c
! 34280c62c9b758155754170a9b229274  gcc/testsuite/c-c++-common/Warray-bounds-3.c
! 77fb98b4de58c40eb015ddc94143f957  gcc/testsuite/c-c++-common/Warray-bounds-4.c
  c51902099b5071373c02eb23d9a61aab  gcc/testsuite/c-c++-common/Warray-bounds-5.c
  1614a81bdc170f1a42520e869c6dd71e  gcc/testsuite/c-c++-common/Warray-bounds-6.c
  9b53f623c31e9c02bcd8e8045056e09d  gcc/testsuite/c-c++-common/Warray-bounds-7.c
  8c8f0a3b217c247195f32bdfc2d93c74  gcc/testsuite/c-c++-common/Warray-bounds-8.c
  ad210b6699449d7c2f1c95f9c363d606  gcc/testsuite/c-c++-common/Warray-bounds.c
  fe25f03fdb469ad245f6cae14480ddad  gcc/testsuite/c-c++-common/Wattributes-2.c
! 0bcda44055ed5df42b261295603d2147  gcc/testsuite/c-c++-common/Wattributes.c
  714425fa09f1458ac9dd7cad4ad33ed2  gcc/testsuite/c-c++-common/Wbool-compare-1.c
  2137f66b6bcfc9d19df56b2f3ea80f8e  gcc/testsuite/c-c++-common/Wbool-compare-2.c
  da6daa27c49af7ff04e05ae804b39498  gcc/testsuite/c-c++-common/Wbool-compare-3.c
--- 9080,9132 ----
  2f50ecd2b64eb3a3cefb0066c4c043a1  gcc/testsuite/ada/acats/tests/l/la140271.a
  004386b31584ba3e3f7171f7674e4137  gcc/testsuite/ada/acats/tests/l/la140272.am
  9c63871113de9b518e90c90fe8e20f28  gcc/testsuite/ada/acats/tests/l/la140273.a
  25005a9265a333af56789fab16cd8e0e  gcc/testsuite/c-c++-common/Waddress-1.c
  81e4d27a297a7ce6fddf1ac2a8961317  gcc/testsuite/c-c++-common/Waddress-2.c
+ ae85096226db49d6155303ac5a238c4f  gcc/testsuite/c-c++-common/Waddress-3.c
+ a7634a62a2c327ea1954c160e43b6d3d  gcc/testsuite/c-c++-common/Waddress-4.c
+ 73aa6e9b17719a2006689e3efff2c01e  gcc/testsuite/c-c++-common/Waddress-5.c
+ 3516a006e99c58af12e0922fe48fb612  gcc/testsuite/c-c++-common/Waddress-6.c
  cc70faf06727814cce7b45e0a0d0614d  gcc/testsuite/c-c++-common/Waddress-of-packed-member-1.c
  76fa33c917471922e94d50763fda451c  gcc/testsuite/c-c++-common/Waddress-of-packed-member-2.c
+ 273f580aad8918060378ff0f64998aa7  gcc/testsuite/c-c++-common/Walloca-larger-than.c
+ afef2f2a384ff98fc41df320bb6a2419  gcc/testsuite/c-c++-common/Warray-bounds-10.c
  26f47ca8f4d16158af229f5e0181ba58  gcc/testsuite/c-c++-common/Warray-bounds-2.c
! 735f67562fd278388dfba29a23faba55  gcc/testsuite/c-c++-common/Warray-bounds-3.c
! bd8f64abbcab43dedc51e54273763e0c  gcc/testsuite/c-c++-common/Warray-bounds-4.c
  c51902099b5071373c02eb23d9a61aab  gcc/testsuite/c-c++-common/Warray-bounds-5.c
  1614a81bdc170f1a42520e869c6dd71e  gcc/testsuite/c-c++-common/Warray-bounds-6.c
  9b53f623c31e9c02bcd8e8045056e09d  gcc/testsuite/c-c++-common/Warray-bounds-7.c
  8c8f0a3b217c247195f32bdfc2d93c74  gcc/testsuite/c-c++-common/Warray-bounds-8.c
+ 2c4fa0b8c2a4b67bf8ba5136d06f762c  gcc/testsuite/c-c++-common/Warray-bounds-9.c
  ad210b6699449d7c2f1c95f9c363d606  gcc/testsuite/c-c++-common/Warray-bounds.c
+ 1465c746ce0da634140bd11994689fb1  gcc/testsuite/c-c++-common/Warray-compare-1.c
+ 86563e27b22c96809703786cd874a440  gcc/testsuite/c-c++-common/Warray-compare-2.c
  fe25f03fdb469ad245f6cae14480ddad  gcc/testsuite/c-c++-common/Wattributes-2.c
! e07fdc272a434aa05e75700c13b249b0  gcc/testsuite/c-c++-common/Wattributes.c
! 66c5aeebcf29f51b19641fb8b159ab7b  gcc/testsuite/c-c++-common/Wbidi-chars-1.c
! 2a90a24dbbfbbcbbfba3080caeecb033  gcc/testsuite/c-c++-common/Wbidi-chars-10.c
! 0833a4f93997d974698a4b722e29caf4  gcc/testsuite/c-c++-common/Wbidi-chars-11.c
! 20ce9b28c2bfc87f467645ab38450f35  gcc/testsuite/c-c++-common/Wbidi-chars-12.c
! 614d9e47d3a0473415aa1bc62e063627  gcc/testsuite/c-c++-common/Wbidi-chars-13.c
! 96d70ce07f52cf45433db54e0d431b68  gcc/testsuite/c-c++-common/Wbidi-chars-14.c
! 8361aeccbb67acd46d9b8e35b2bf3e49  gcc/testsuite/c-c++-common/Wbidi-chars-15.c
! a3cda7b1446f9d44d9a1fce64775d0f5  gcc/testsuite/c-c++-common/Wbidi-chars-16.c
! e3564dd628cf8de1e82dd5739305f30d  gcc/testsuite/c-c++-common/Wbidi-chars-17.c
! 450a0abdeae3e78582e78ea96997e801  gcc/testsuite/c-c++-common/Wbidi-chars-18.c
! 5c640fb85878a8a1bf9a66238e40e21b  gcc/testsuite/c-c++-common/Wbidi-chars-19.c
! 1da1d837c02207d509ec659494dadb34  gcc/testsuite/c-c++-common/Wbidi-chars-2.c
! 7ed7ef440da020d1a3f4aff2949610e1  gcc/testsuite/c-c++-common/Wbidi-chars-20.c
! e536d64e9379d6bc6925ec335006b6ef  gcc/testsuite/c-c++-common/Wbidi-chars-21.c
! 7b8b5de94c2fe054521837605cc50bc5  gcc/testsuite/c-c++-common/Wbidi-chars-22.c
! 0b0df64f765ef60ed59e384aa26aee66  gcc/testsuite/c-c++-common/Wbidi-chars-23.c
! 742ee33fd0300615b08a5fe0b00649ad  gcc/testsuite/c-c++-common/Wbidi-chars-3.c
! 5ddbdaf462456c7fe7718bf4a6101a52  gcc/testsuite/c-c++-common/Wbidi-chars-4.c
! 857e0d28756f79a91dfa4f0bf989be7c  gcc/testsuite/c-c++-common/Wbidi-chars-5.c
! 2b2f5dec46ff19686f10bdd06d48bd87  gcc/testsuite/c-c++-common/Wbidi-chars-6.c
! cbf25a642bc345adf290028892966dc3  gcc/testsuite/c-c++-common/Wbidi-chars-7.c
! c5218c6ea80057e8059147950288bef6  gcc/testsuite/c-c++-common/Wbidi-chars-8.c
! c6c1ccb4a5aabc71669e23e90a02f6ad  gcc/testsuite/c-c++-common/Wbidi-chars-9.c
! cb1d5b99aa4eae2a0cb9a5598c7c0793  gcc/testsuite/c-c++-common/Wbidi-chars-ranges.c
  714425fa09f1458ac9dd7cad4ad33ed2  gcc/testsuite/c-c++-common/Wbool-compare-1.c
  2137f66b6bcfc9d19df56b2f3ea80f8e  gcc/testsuite/c-c++-common/Wbool-compare-2.c
  da6daa27c49af7ff04e05ae804b39498  gcc/testsuite/c-c++-common/Wbool-compare-3.c
*************** bb6692f219b1f0fff84900944e5cbbb4  gcc/te
*** 9020,9025 ****
--- 9143,9156 ----
  f4c88a37de8b9cf0f4dfe3e1bc876a01  gcc/testsuite/c-c++-common/Wdangling-else-2.c
  ea18cf61a2996e250f28de9ce0131778  gcc/testsuite/c-c++-common/Wdangling-else-3.c
  a476cd08d04537a1546143f21ae9ed21  gcc/testsuite/c-c++-common/Wdangling-else-4.c
+ 6516d4611bf9348a8fa38ab7ea7e60b1  gcc/testsuite/c-c++-common/Wdangling-pointer-2.c
+ f3145c655104e18743ecb5afae49ea1a  gcc/testsuite/c-c++-common/Wdangling-pointer-3.c
+ 57948dbb46716b784119183c0ecfc8e6  gcc/testsuite/c-c++-common/Wdangling-pointer-4.c
+ 88e769d825fd74f4b12ac03358df9839  gcc/testsuite/c-c++-common/Wdangling-pointer-5.c
+ 0267389602bccf5974267c04b864b33b  gcc/testsuite/c-c++-common/Wdangling-pointer-6.c
+ ff3de265fbccf3612a0ffb10010db450  gcc/testsuite/c-c++-common/Wdangling-pointer-7.c
+ d9ebfe45a2e22628c68723c17e000678  gcc/testsuite/c-c++-common/Wdangling-pointer-8.c
+ 96a9e6d56248f8f913daf667a15473f1  gcc/testsuite/c-c++-common/Wdangling-pointer.c
  df5ffd2746b9c571dd4ecaec40584254  gcc/testsuite/c-c++-common/Wduplicated-branches-1.c
  36747e99be11c2fa6022dbb012b5e657  gcc/testsuite/c-c++-common/Wduplicated-branches-10.c
  ab46b28ebe1588d3da5a24b1ba47c9dc  gcc/testsuite/c-c++-common/Wduplicated-branches-11.c
*************** fff3d649531c83150863cb9215b5f6e0  gcc/te
*** 9040,9045 ****
--- 9171,9177 ----
  95f2572fa60b98e2330727d451042922  gcc/testsuite/c-c++-common/Wduplicated-cond-3.c
  ef4f4b5de989d9dc5bddbdc69330bc75  gcc/testsuite/c-c++-common/Wduplicated-cond-4.c
  59751b3dc53f63d60e7442231719d920  gcc/testsuite/c-c++-common/Wfloat-conversion.c
+ 49b7e0ebbe8f98aaa0546f15e91b002d  gcc/testsuite/c-c++-common/Wformat-pr104148.c
  856413eebe730a0c7a3ad5fb9397241a  gcc/testsuite/c-c++-common/Wformat-pr84258.c
  312a2ba796d2f8b759556fb3292d0dc4  gcc/testsuite/c-c++-common/Wformat-pr88257.c
  bfab16ac2e29ff30ff0d3dd400e68b04  gcc/testsuite/c-c++-common/Wformat-pr88257.h
*************** a74182327fe0e8b068f3e993e5896f7b  gcc/te
*** 9077,9082 ****
--- 9209,9216 ----
  c302c1a4893711fc86a172f63f8bd9dc  gcc/testsuite/c-c++-common/Wimplicit-fallthrough-35.c
  cda3bb9ca57e369084621185346974dc  gcc/testsuite/c-c++-common/Wimplicit-fallthrough-36.c
  3c49eb8103fe7dc5e5ef9a32c553d418  gcc/testsuite/c-c++-common/Wimplicit-fallthrough-37.c
+ 1a9973e86f2c609088bc53d6e4cb9eee  gcc/testsuite/c-c++-common/Wimplicit-fallthrough-38.c
+ 0b6d904bf060ceb9f9b0c1b12f434d8e  gcc/testsuite/c-c++-common/Wimplicit-fallthrough-39.c
  209de9c779ee1c2bb93781cd743aa8e7  gcc/testsuite/c-c++-common/Wimplicit-fallthrough-4.c
  006c2c882c026a00e907e95f539d0817  gcc/testsuite/c-c++-common/Wimplicit-fallthrough-5.c
  35ef745805a62adf180cc3c34449ff39  gcc/testsuite/c-c++-common/Wimplicit-fallthrough-6.c
*************** eab9ee4fc9a53a45a514b59423382679  gcc/te
*** 9089,9094 ****
--- 9223,9229 ----
  bf40eeeb39e4c3a5b2abcfb88c1a5418  gcc/testsuite/c-c++-common/Wint-to-pointer-cast-1.c
  dea22dd4025a7040dc5c391a1242c40f  gcc/testsuite/c-c++-common/Wint-to-pointer-cast-2.c
  d9cdfbae99648465508b147314e8ff61  gcc/testsuite/c-c++-common/Wint-to-pointer-cast-3.c
+ 2f450da4a2ed1d264d3dfd76e41a6a29  gcc/testsuite/c-c++-common/Winvalid-memory-model.c
  1bbb047ef3ed4bc168efca199ce6efa3  gcc/testsuite/c-c++-common/Wlogical-not-parentheses-1.c
  a02c709f77ada1bf7c11b66f87adf20d  gcc/testsuite/c-c++-common/Wlogical-not-parentheses-2.c
  a4097e11dbd186a4a835f4b4cc1bdc2e  gcc/testsuite/c-c++-common/Wlogical-not-parentheses-3.c
*************** d17ae32a38b973bb1e30dfe6eedbd3b8  gcc/te
*** 9102,9107 ****
--- 9237,9243 ----
  395a0a903e6e849452276783431987a1  gcc/testsuite/c-c++-common/Wmisleading-indentation-3.c
  336ca93b175f135bba95e9e1462d761f  gcc/testsuite/c-c++-common/Wmisleading-indentation-4.c
  cf4158d0a3ab3c67e7bb3304d044b16f  gcc/testsuite/c-c++-common/Wmisleading-indentation-5.c
+ 58bb0ea0779d251bb81e002c4b7ae506  gcc/testsuite/c-c++-common/Wmisleading-indentation-6.c
  e0c2b30e8f5146a4572f1179b3dd0c61  gcc/testsuite/c-c++-common/Wmisleading-indentation-pr70693.c
  f45c9bbce5d89d30db65ab853a4143d2  gcc/testsuite/c-c++-common/Wmisleading-indentation.c
  6c40dabc9d6af3978a6cf20c50cf6a33  gcc/testsuite/c-c++-common/Wmismatched-dealloc.c
*************** b9e75edcf569571358a30637151c8236  gcc/te
*** 9118,9123 ****
--- 9254,9265 ----
  b44bd876d38f53dd6df2b7c2310e6f0a  gcc/testsuite/c-c++-common/Wmultistatement-macros-7.c
  87dd29da5f0461953e627efaf0e5921d  gcc/testsuite/c-c++-common/Wmultistatement-macros-8.c
  a0bc51d5990da2df457fd68c965179a2  gcc/testsuite/c-c++-common/Wmultistatement-macros-9.c
+ 12ffbb3c88d3111cae35be6f5bd693f3  gcc/testsuite/c-c++-common/Wno-attributes-1.c
+ 1ebacfcb02d2d7553c67db8304bcf11c  gcc/testsuite/c-c++-common/Wno-attributes-2.c
+ 72291fbb9426093865fcadad1fbc4751  gcc/testsuite/c-c++-common/Wno-attributes-3.c
+ e993f3bb55c7b2b80690d29d047b0351  gcc/testsuite/c-c++-common/Wno-attributes-4.c
+ 8346ffa7534d11b66db33f000da92e37  gcc/testsuite/c-c++-common/Wno-attributes-5.c
+ 205ab8d23caa0811de460e64eaaf4e45  gcc/testsuite/c-c++-common/Wno-attributes-6.c
  4f6ad8cac6b84de53049a5eea97fab49  gcc/testsuite/c-c++-common/Wno-builtin-declaration-mismatch-1.c
  b935c2a58d7f731bf0cccb6a7d11766c  gcc/testsuite/c-c++-common/Wparentheses-1.c
  0c7edfe9355052ed29a31dd7ba300828  gcc/testsuite/c-c++-common/Wparentheses-2.c
*************** f6687e96d1a359321b94d5babcf73720  gcc/te
*** 9161,9171 ****
  40bc1e540d092c06d14dc9842ee9cd03  gcc/testsuite/c-c++-common/Wsign-conversion-1.c
  c7eebf2a6120dfecf1a6ae7de1f49694  gcc/testsuite/c-c++-common/Wsizeof-array-div1.c
  60f2f0aa7f30ae4b7fc18937d32ed9b7  gcc/testsuite/c-c++-common/Wsizeof-pointer-div.c
! f8e71991761921aac66c6e562d69b2e8  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess1.c
  bf0b620625355f346eefd54a379f0ac2  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess2.c
  9435b893d35596d6e6c421a7d0ca6b4e  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess3.c
  c2f8af9a24cbf598244cbdf23a6eb007  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess4.c
! f99318c6660ede68836f5ad6e8d8ce00  gcc/testsuite/c-c++-common/Wstringop-overflow-2.c
  ed599254a04855f3e360dc18fbdba9d9  gcc/testsuite/c-c++-common/Wstringop-overflow.c
  b9163d26f5124adacd165e32f8b32a62  gcc/testsuite/c-c++-common/Wstringop-truncation-2.c
  e43106fc454dedd36c41a975a04be5e3  gcc/testsuite/c-c++-common/Wstringop-truncation-3.c
--- 9303,9314 ----
  40bc1e540d092c06d14dc9842ee9cd03  gcc/testsuite/c-c++-common/Wsign-conversion-1.c
  c7eebf2a6120dfecf1a6ae7de1f49694  gcc/testsuite/c-c++-common/Wsizeof-array-div1.c
  60f2f0aa7f30ae4b7fc18937d32ed9b7  gcc/testsuite/c-c++-common/Wsizeof-pointer-div.c
! 268f9f6b5ca637f309e4817c68deddda  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess1.c
  bf0b620625355f346eefd54a379f0ac2  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess2.c
  9435b893d35596d6e6c421a7d0ca6b4e  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess3.c
  c2f8af9a24cbf598244cbdf23a6eb007  gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess4.c
! f65e675073fa6e887cf5c8b46811dbbd  gcc/testsuite/c-c++-common/Wstringop-overflow-2-novec.c
! 72b026b6797ea3ac3a7342c55601477c  gcc/testsuite/c-c++-common/Wstringop-overflow-2.c
  ed599254a04855f3e360dc18fbdba9d9  gcc/testsuite/c-c++-common/Wstringop-overflow.c
  b9163d26f5124adacd165e32f8b32a62  gcc/testsuite/c-c++-common/Wstringop-truncation-2.c
  e43106fc454dedd36c41a975a04be5e3  gcc/testsuite/c-c++-common/Wstringop-truncation-3.c
*************** f79bc4a80b6890a56ed93a450311aa3f  gcc/te
*** 9198,9204 ****
  15fe0702a484a3fe1c89d3bcd75bd508  gcc/testsuite/c-c++-common/Wunused-var-13.c
  80c4ecb8009d5febfdba9eeaee769526  gcc/testsuite/c-c++-common/Wunused-var-14.c
  4cf8b02a3b864706401fd6b605f0f57f  gcc/testsuite/c-c++-common/Wunused-var-15.c
! 9836c6883123f86042f04422818c01ae  gcc/testsuite/c-c++-common/Wunused-var-16.c
  f7cf252f8fb24838c4491a1b681216d3  gcc/testsuite/c-c++-common/Wunused-var-17.c
  5f69d6398e9b0fc829351a16f994916d  gcc/testsuite/c-c++-common/Wunused-var-2.c
  8504217c544401c14012c8e1a1c18970  gcc/testsuite/c-c++-common/Wunused-var-3.c
--- 9341,9347 ----
  15fe0702a484a3fe1c89d3bcd75bd508  gcc/testsuite/c-c++-common/Wunused-var-13.c
  80c4ecb8009d5febfdba9eeaee769526  gcc/testsuite/c-c++-common/Wunused-var-14.c
  4cf8b02a3b864706401fd6b605f0f57f  gcc/testsuite/c-c++-common/Wunused-var-15.c
! 9c1e8e695b2a8304922b1e0f0874f4cd  gcc/testsuite/c-c++-common/Wunused-var-16.c
  f7cf252f8fb24838c4491a1b681216d3  gcc/testsuite/c-c++-common/Wunused-var-17.c
  5f69d6398e9b0fc829351a16f994916d  gcc/testsuite/c-c++-common/Wunused-var-2.c
  8504217c544401c14012c8e1a1c18970  gcc/testsuite/c-c++-common/Wunused-var-3.c
*************** f7cf252f8fb24838c4491a1b681216d3  gcc/te
*** 9208,9213 ****
--- 9351,9363 ----
  3acd34af9a98cb4913d6b6310f170f6c  gcc/testsuite/c-c++-common/Wunused-var-7.c
  955505dd1a7bcb4ea846ce40b428a43d  gcc/testsuite/c-c++-common/Wunused-var-8.c
  521676114b454f97187cc76d533621e6  gcc/testsuite/c-c++-common/Wunused-var-9.c
+ 47095408bb7fd6842b216b9c049e5877  gcc/testsuite/c-c++-common/Wuse-after-free-2.c
+ 5c5a689bbd8d2064a1cf9417c75365db  gcc/testsuite/c-c++-common/Wuse-after-free-3.c
+ a081939c072c3d03d878123df4595138  gcc/testsuite/c-c++-common/Wuse-after-free-4.c
+ c1d4aac82aafc22d1b2884cf0190af84  gcc/testsuite/c-c++-common/Wuse-after-free-5.c
+ acbac1460120e4d80cf537af7b4f0835  gcc/testsuite/c-c++-common/Wuse-after-free-6.c
+ 5d35423b98da25ba2e8266e892e6fa46  gcc/testsuite/c-c++-common/Wuse-after-free-7.c
+ 0ebe37f28e2842c7d2c1eb3a5adff498  gcc/testsuite/c-c++-common/Wuse-after-free.c
  65cf5a15ffd224b6b51f7d207aa29f27  gcc/testsuite/c-c++-common/Wvarargs-2.c
  70d4ab70f79cf2ba91c2d0552436e561  gcc/testsuite/c-c++-common/Wvarargs.c
  e104bcfe21abe9fcad2b191ce9dee6c6  gcc/testsuite/c-c++-common/addrtmp.c
*************** e4943a29b314a6337f7b56e003bd32eb  gcc/te
*** 9235,9241 ****
  a19feeb74b26953ebaaf91c93429fd81  gcc/testsuite/c-c++-common/asan/bitfield-5.c
  fc345f9432dbaf202b33b89e3729af4e  gcc/testsuite/c-c++-common/asan/clone-test-1.c
  2b7a63d20c047f64c3e1caa408ba593b  gcc/testsuite/c-c++-common/asan/force-inline-opt0-1.c
! b2db2d3e56743cf6e27e5b5285ce58c8  gcc/testsuite/c-c++-common/asan/global-overflow-1.c
  3e11274291024634a4a707ea2297e543  gcc/testsuite/c-c++-common/asan/halt_on_error-1.c
  110b851a84d7abdb717efa4ccf904baf  gcc/testsuite/c-c++-common/asan/halt_on_error-2.c
  583c97672fe7272cc8e06d1fc5e3adfb  gcc/testsuite/c-c++-common/asan/heap-overflow-1.c
--- 9385,9391 ----
  a19feeb74b26953ebaaf91c93429fd81  gcc/testsuite/c-c++-common/asan/bitfield-5.c
  fc345f9432dbaf202b33b89e3729af4e  gcc/testsuite/c-c++-common/asan/clone-test-1.c
  2b7a63d20c047f64c3e1caa408ba593b  gcc/testsuite/c-c++-common/asan/force-inline-opt0-1.c
! 4530cbfea8c731b91ad6d80e1e832ab7  gcc/testsuite/c-c++-common/asan/global-overflow-1.c
  3e11274291024634a4a707ea2297e543  gcc/testsuite/c-c++-common/asan/halt_on_error-1.c
  110b851a84d7abdb717efa4ccf904baf  gcc/testsuite/c-c++-common/asan/halt_on_error-2.c
  583c97672fe7272cc8e06d1fc5e3adfb  gcc/testsuite/c-c++-common/asan/heap-overflow-1.c
*************** f331676357e0c5aeca5e80d429de4a40  gcc/te
*** 9273,9279 ****
  f040c23b54cf32adff7b8ed8f739fb60  gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-8.c
  db4942fb1e6237d8999cbd7befad36c5  gcc/testsuite/c-c++-common/asan/no-redundant-odr-indicators-1.c
  d96e86e0b770414e72de009b6c7afadd  gcc/testsuite/c-c++-common/asan/no-use-after-return.c
! 869ef47c74f02e648046301bafcd185b  gcc/testsuite/c-c++-common/asan/null-deref-1.c
  59906ecf875395218548e49754288ce9  gcc/testsuite/c-c++-common/asan/pointer-compare-1.c
  7b3d7827b76153028c59412c76979a9a  gcc/testsuite/c-c++-common/asan/pointer-compare-2.c
  9c368a814bd51803559b20c95cbb2ca4  gcc/testsuite/c-c++-common/asan/pointer-compare-3.c
--- 9423,9429 ----
  f040c23b54cf32adff7b8ed8f739fb60  gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-8.c
  db4942fb1e6237d8999cbd7befad36c5  gcc/testsuite/c-c++-common/asan/no-redundant-odr-indicators-1.c
  d96e86e0b770414e72de009b6c7afadd  gcc/testsuite/c-c++-common/asan/no-use-after-return.c
! b40632dc7412e10c338cdcc965f676bc  gcc/testsuite/c-c++-common/asan/null-deref-1.c
  59906ecf875395218548e49754288ce9  gcc/testsuite/c-c++-common/asan/pointer-compare-1.c
  7b3d7827b76153028c59412c76979a9a  gcc/testsuite/c-c++-common/asan/pointer-compare-2.c
  9c368a814bd51803559b20c95cbb2ca4  gcc/testsuite/c-c++-common/asan/pointer-compare-3.c
*************** c8b98a656dafef917e51ff4b5433e980  gcc/te
*** 9338,9344 ****
  c646b644758e950a4110aea0b34c55f2  gcc/testsuite/c-c++-common/attr-nocf-check-3.c
  6e74d4217acfc4ff85814de60a3f7e75  gcc/testsuite/c-c++-common/attr-nonstring-1.c
  8121851e9adc24f2cb9196e1c2dab2ab  gcc/testsuite/c-c++-common/attr-nonstring-2.c
! c3654b7b59b3c9795191f3ba8956b636  gcc/testsuite/c-c++-common/attr-nonstring-3.c
  40d520a76461aa407b60693028189473  gcc/testsuite/c-c++-common/attr-nonstring-4.c
  aecf8808dcce2f2171e6ff35d91b4e01  gcc/testsuite/c-c++-common/attr-nonstring-5.c
  1fe056301e1358a5a84901dc70b18ff6  gcc/testsuite/c-c++-common/attr-nonstring-6.c
--- 9488,9494 ----
  c646b644758e950a4110aea0b34c55f2  gcc/testsuite/c-c++-common/attr-nocf-check-3.c
  6e74d4217acfc4ff85814de60a3f7e75  gcc/testsuite/c-c++-common/attr-nonstring-1.c
  8121851e9adc24f2cb9196e1c2dab2ab  gcc/testsuite/c-c++-common/attr-nonstring-2.c
! 8934c5fb47a81f2174d60102a8884b02  gcc/testsuite/c-c++-common/attr-nonstring-3.c
  40d520a76461aa407b60693028189473  gcc/testsuite/c-c++-common/attr-nonstring-4.c
  aecf8808dcce2f2171e6ff35d91b4e01  gcc/testsuite/c-c++-common/attr-nonstring-5.c
  1fe056301e1358a5a84901dc70b18ff6  gcc/testsuite/c-c++-common/attr-nonstring-6.c
*************** aecf8808dcce2f2171e6ff35d91b4e01  gcc/te
*** 9346,9359 ****
  a64bfafada3fcdd3081bfa50b0677966  gcc/testsuite/c-c++-common/attr-nonstring-8.c
  98687838cf46c8c28ee0ab7af818dc38  gcc/testsuite/c-c++-common/attr-opt-1.c
  8d1dd31ffd75e182c35879b275b838f6  gcc/testsuite/c-c++-common/attr-retain-1.c
  f87049d3f8f00219a982070324ee0f35  gcc/testsuite/c-c++-common/attr-retain-2.c
  4de67302bfe88af5e0e57d4bf78f397f  gcc/testsuite/c-c++-common/attr-retain-3.c
  3289ab2836be0f6b496e8239acfc6a4f  gcc/testsuite/c-c++-common/attr-retain-4.c
! a62197120e93eed4bd64d141d6baa411  gcc/testsuite/c-c++-common/attr-retain-5.c
! 511d62b0f59745a4be662ba7cfb9ebf9  gcc/testsuite/c-c++-common/attr-retain-6.c
  a9a489c34a0d2601c46b7482ebd71e9d  gcc/testsuite/c-c++-common/attr-retain-7.c
  3d42e870659770b0b762203aa78f09be  gcc/testsuite/c-c++-common/attr-retain-8.c
! 65b11158430a285feede10c19cfde4a0  gcc/testsuite/c-c++-common/attr-retain-9.c
  5ad24543b6d83246f7cebf2bed5c2379  gcc/testsuite/c-c++-common/attr-simd-2.c
  ba228dab53d862be27c7036d86f735eb  gcc/testsuite/c-c++-common/attr-simd-4.c
  8a1a222d75843dbe3f9d7834834cefa3  gcc/testsuite/c-c++-common/attr-simd-5.c
--- 9496,9511 ----
  a64bfafada3fcdd3081bfa50b0677966  gcc/testsuite/c-c++-common/attr-nonstring-8.c
  98687838cf46c8c28ee0ab7af818dc38  gcc/testsuite/c-c++-common/attr-opt-1.c
  8d1dd31ffd75e182c35879b275b838f6  gcc/testsuite/c-c++-common/attr-retain-1.c
+ dbadc777f6538f0c9769931967284aa7  gcc/testsuite/c-c++-common/attr-retain-10.c
+ d1109f449ee7186e9a9c70d3dbb8dbd7  gcc/testsuite/c-c++-common/attr-retain-11.c
  f87049d3f8f00219a982070324ee0f35  gcc/testsuite/c-c++-common/attr-retain-2.c
  4de67302bfe88af5e0e57d4bf78f397f  gcc/testsuite/c-c++-common/attr-retain-3.c
  3289ab2836be0f6b496e8239acfc6a4f  gcc/testsuite/c-c++-common/attr-retain-4.c
! 3978ac65fb6dc08608f57b3665556d66  gcc/testsuite/c-c++-common/attr-retain-5.c
! fe9070b22308205fcdc0befb530e4972  gcc/testsuite/c-c++-common/attr-retain-6.c
  a9a489c34a0d2601c46b7482ebd71e9d  gcc/testsuite/c-c++-common/attr-retain-7.c
  3d42e870659770b0b762203aa78f09be  gcc/testsuite/c-c++-common/attr-retain-8.c
! 5f1030b824821ee81197083480694885  gcc/testsuite/c-c++-common/attr-retain-9.c
  5ad24543b6d83246f7cebf2bed5c2379  gcc/testsuite/c-c++-common/attr-simd-2.c
  ba228dab53d862be27c7036d86f735eb  gcc/testsuite/c-c++-common/attr-simd-4.c
  8a1a222d75843dbe3f9d7834834cefa3  gcc/testsuite/c-c++-common/attr-simd-5.c
*************** ba228dab53d862be27c7036d86f735eb  gcc/te
*** 9361,9371 ****
  4a8c900352b41f7f81b5e982203aa47f  gcc/testsuite/c-c++-common/attr-used-2.c
  64568f542038e5966961f07cc96eda3d  gcc/testsuite/c-c++-common/attr-used-3.c
  e627e94303559061b566ee6a67d2e153  gcc/testsuite/c-c++-common/attr-used-4.c
! 52ed0b5526f024f30c64d90ae4e0e209  gcc/testsuite/c-c++-common/attr-used-5.c
! 19b8d40c0098f7509763eda78c1b4e7c  gcc/testsuite/c-c++-common/attr-used-6.c
  63ff21caf029c53a19ce6ec60c81053a  gcc/testsuite/c-c++-common/attr-used-7.c
  b11e87307044446d68555332a0f37924  gcc/testsuite/c-c++-common/attr-used-8.c
! 521cb3e451ddff9ddf9ed5b9a101b6c4  gcc/testsuite/c-c++-common/attr-used-9.c
  0765b8273c3c0c19396e32788dd03b94  gcc/testsuite/c-c++-common/attr-used.c
  c16cfe2fc05f8ec7fa89428b9e32fef6  gcc/testsuite/c-c++-common/attr-warn-unused-result.c
  0757d414096e0b54b72399cfd533c8fc  gcc/testsuite/c-c++-common/attributes-1.c
--- 9513,9523 ----
  4a8c900352b41f7f81b5e982203aa47f  gcc/testsuite/c-c++-common/attr-used-2.c
  64568f542038e5966961f07cc96eda3d  gcc/testsuite/c-c++-common/attr-used-3.c
  e627e94303559061b566ee6a67d2e153  gcc/testsuite/c-c++-common/attr-used-4.c
! 479317f8b37db039783c79ffd15d2bfa  gcc/testsuite/c-c++-common/attr-used-5.c
! 895fc812891c972f149cfe831ef3f93c  gcc/testsuite/c-c++-common/attr-used-6.c
  63ff21caf029c53a19ce6ec60c81053a  gcc/testsuite/c-c++-common/attr-used-7.c
  b11e87307044446d68555332a0f37924  gcc/testsuite/c-c++-common/attr-used-8.c
! 7e4e1b68ca991560ece1eee831e8bacd  gcc/testsuite/c-c++-common/attr-used-9.c
  0765b8273c3c0c19396e32788dd03b94  gcc/testsuite/c-c++-common/attr-used.c
  c16cfe2fc05f8ec7fa89428b9e32fef6  gcc/testsuite/c-c++-common/attr-warn-unused-result.c
  0757d414096e0b54b72399cfd533c8fc  gcc/testsuite/c-c++-common/attributes-1.c
*************** c16cfe2fc05f8ec7fa89428b9e32fef6  gcc/te
*** 9374,9382 ****
--- 9526,9555 ----
  5113c71e64eb505940e6121dbd1b0816  gcc/testsuite/c-c++-common/attributes-4.c
  debeca168f3a9a432da9b7fe19f105d0  gcc/testsuite/c-c++-common/attributes-enum-1.c
  05e6e3f334bd062d9e932f51ca25a73d  gcc/testsuite/c-c++-common/attributes-enum-2.c
+ 3131054fcbf980eadae11132c783d2d3  gcc/testsuite/c-c++-common/auto-init-1.c
+ 4b56486d7ec65e9df698bb07a1e1d8d9  gcc/testsuite/c-c++-common/auto-init-10.c
+ acc04566cca5062120daa675392bd4ac  gcc/testsuite/c-c++-common/auto-init-11.c
+ 1da3b70f4ede84f3f11e966fe4a7fef2  gcc/testsuite/c-c++-common/auto-init-12.c
+ 8eacc25e3fed8962ea2f13aa9bc87315  gcc/testsuite/c-c++-common/auto-init-13.c
+ 4449dd9ead5e5cf924df3e11121b5fb4  gcc/testsuite/c-c++-common/auto-init-14.c
+ e3b67fbebf6391441124743b1bfc679b  gcc/testsuite/c-c++-common/auto-init-15.c
+ 47596b12b605b20b22bcab204cb4ba44  gcc/testsuite/c-c++-common/auto-init-16.c
+ 2b337316a80008e9f711b3b44eff336b  gcc/testsuite/c-c++-common/auto-init-2.c
+ 2e1d05f9bea092be65011bccbd213475  gcc/testsuite/c-c++-common/auto-init-3.c
+ db8f56bdf0e9c7f911a1a3a2233a697d  gcc/testsuite/c-c++-common/auto-init-4.c
+ c318d637078a9354b41c05599224f26b  gcc/testsuite/c-c++-common/auto-init-5.c
+ 31f4f59aeb97b3389f55dc44718de7ce  gcc/testsuite/c-c++-common/auto-init-6.c
+ 9b9ce0895edb92d1cf3752fe18a2dfd5  gcc/testsuite/c-c++-common/auto-init-7.c
+ 261302a2ed5ff58938633a1d2013bd37  gcc/testsuite/c-c++-common/auto-init-8.c
+ 30b428fd95d6b294d8a0c2210fcf8ae6  gcc/testsuite/c-c++-common/auto-init-9.c
+ 131a976bb3a6bb260f77ca3e48f8227f  gcc/testsuite/c-c++-common/auto-init-esra.c
+ b845dd6471572bb727666776f13e77e9  gcc/testsuite/c-c++-common/auto-init-padding-1.c
+ 5cbfe8618a47642b9cebe81e615210bb  gcc/testsuite/c-c++-common/auto-init-padding-2.c
+ b92163ecc65b967a1ace1294db1ac938  gcc/testsuite/c-c++-common/auto-init-padding-3.c
  638cc45b546ce4e45ccb7b3846c6747f  gcc/testsuite/c-c++-common/builtin-arith-overflow-1.c
  563de839d84e990d18f755b18712b764  gcc/testsuite/c-c++-common/builtin-arith-overflow-2.c
  edbcc39f20e5248e2b957a28e01fee51  gcc/testsuite/c-c++-common/builtin-arith-overflow-3.c
+ 29addeec3c750c9f563a87b82013d69e  gcc/testsuite/c-c++-common/builtin-assoc-barrier-1.c
  16488560f51c9fbb0acea48f3f246dd7  gcc/testsuite/c-c++-common/builtin-clear-padding-1.c
  05a22e0270d8d2693bab4092ee6a1edc  gcc/testsuite/c-c++-common/builtin-clear-padding-2.c
  0ba3f576ed243d50b6d6f59a8e9daa19  gcc/testsuite/c-c++-common/builtin-clear-padding-3.c
*************** edbcc39f20e5248e2b957a28e01fee51  gcc/te
*** 9393,9398 ****
--- 9566,9572 ----
  0aa8a0c8ebe6c4dea5fc14bb97f9f327  gcc/testsuite/c-c++-common/builtin-offsetof-2.c
  41df51bc4faa62cf4b0a5b0f48fd7eda  gcc/testsuite/c-c++-common/builtin-offsetof.c
  ef95b2391ac4310fde10257ba4f7463b  gcc/testsuite/c-c++-common/builtin-shuffle-1.c
+ e05263912b24ac871d65efa4a51d10ea  gcc/testsuite/c-c++-common/builtin-shufflevector-2.c
  3a349fcc5db93dcaf44a93c32735f04a  gcc/testsuite/c-c++-common/builtin_location.c
  2341b1258f7e71f5aeb2fc1ac6a17b27  gcc/testsuite/c-c++-common/builtins.c
  a15893a996b14e9ab79c08a9d37157ee  gcc/testsuite/c-c++-common/cold-1.c
*************** d320f7159ec0c49c01579cadb6132ae4  gcc/te
*** 9431,9436 ****
--- 9605,9611 ----
  6d793027f92f3668bc379d25936d8781  gcc/testsuite/c-c++-common/cpp/eof-2.h
  5d15dc76c8bd6eb00137bc1aef3eeaa1  gcc/testsuite/c-c++-common/cpp/eof-3.c
  80917e73eda1f9f63bafbcc4d94a0927  gcc/testsuite/c-c++-common/cpp/ffile-prefix-map.c
+ e5ed57bfbd2502d615ef60835f1f0352  gcc/testsuite/c-c++-common/cpp/file-name-1.c
  040be3c971d2d342750c402c54b9b869  gcc/testsuite/c-c++-common/cpp/fmacro-prefix-map.c
  1ccb9ebc08e51c65b99fa5f74657100a  gcc/testsuite/c-c++-common/cpp/fmax-include-depth-1a.h
  f7fc996e6cb72eb21ae19ef5b5a25faa  gcc/testsuite/c-c++-common/cpp/fmax-include-depth-1b.h
*************** bc23e7fea0a34a28d11356c984dbef26  gcc/te
*** 9442,9450 ****
  63f74f9fe01b458a7f669b372a1d3acc  gcc/testsuite/c-c++-common/cpp/has-include-1.c
  531592f10d055837951d413baf4a7c33  gcc/testsuite/c-c++-common/cpp/has-include-next-1.c
  f886530357fac0e7bc06382bcf2120f9  gcc/testsuite/c-c++-common/cpp/line-1.c
! 3b236d3ebd6688157dfec255f8054957  gcc/testsuite/c-c++-common/cpp/line-2.c
  876ace0217b7806955a4e72551b3afbc  gcc/testsuite/c-c++-common/cpp/line-2.h
! bc17d61a124641a580dcb74c99aed4d6  gcc/testsuite/c-c++-common/cpp/line-3.c
  e4a82afc909a711b27adb1d72035a0f7  gcc/testsuite/c-c++-common/cpp/line-4.c
  b0dbf2ee0d65771fb476f1bead18e214  gcc/testsuite/c-c++-common/cpp/line-4.h
  ec867e7b9ed2db10d86511396a956702  gcc/testsuite/c-c++-common/cpp/macro-arg-count-1.c
--- 9617,9625 ----
  63f74f9fe01b458a7f669b372a1d3acc  gcc/testsuite/c-c++-common/cpp/has-include-1.c
  531592f10d055837951d413baf4a7c33  gcc/testsuite/c-c++-common/cpp/has-include-next-1.c
  f886530357fac0e7bc06382bcf2120f9  gcc/testsuite/c-c++-common/cpp/line-1.c
! 0557dce35a2acf74358513e32435ab40  gcc/testsuite/c-c++-common/cpp/line-2.c
  876ace0217b7806955a4e72551b3afbc  gcc/testsuite/c-c++-common/cpp/line-2.h
! b32704485867004dc02650fac1c82802  gcc/testsuite/c-c++-common/cpp/line-3.c
  e4a82afc909a711b27adb1d72035a0f7  gcc/testsuite/c-c++-common/cpp/line-4.c
  b0dbf2ee0d65771fb476f1bead18e214  gcc/testsuite/c-c++-common/cpp/line-4.h
  ec867e7b9ed2db10d86511396a956702  gcc/testsuite/c-c++-common/cpp/macro-arg-count-1.c
*************** aa884d944cf2bbf71c7c642a33b7244f  gcc/te
*** 9483,9493 ****
  7b4c563757483bd5f5e1b37915f01b6d  gcc/testsuite/c-c++-common/cpp/pr97471.c
  f2e2a6171e51d284aef6b4356f338ad3  gcc/testsuite/c-c++-common/cpp/pragma-eof.c
  17f09d053664aa8b96634b37ce0988da  gcc/testsuite/c-c++-common/cpp/spaceship-1.c
! 9cdc13ca5a948af9c95ec156cac8609c  gcc/testsuite/c-c++-common/cpp/ucnid-2011-1-utf8.c
! 791d43cbbb9115404405c22be44e4ae7  gcc/testsuite/c-c++-common/cpp/ucnid-2011-1.c
  0f93514d0ad79c03edfd672fb354e619  gcc/testsuite/c-c++-common/cpp/va-opt-2.c
! d4400c02e16c9ce8399bebed26d20e37  gcc/testsuite/c-c++-common/cpp/va-opt-3.c
  ffa7f1250b7f00a641ad13c5836e4f01  gcc/testsuite/c-c++-common/cpp/va-opt-4.c
  2afcba443f0dcc8170bbf6957a6f9cad  gcc/testsuite/c-c++-common/cpp/va-opt-9.c
  111311014e0b7d3088a84587438910e7  gcc/testsuite/c-c++-common/cpp/va-opt-error.c
  eea6a019e69d78eae4d98554090253c2  gcc/testsuite/c-c++-common/cpp/va-opt-pedantic.c
--- 9658,9672 ----
  7b4c563757483bd5f5e1b37915f01b6d  gcc/testsuite/c-c++-common/cpp/pr97471.c
  f2e2a6171e51d284aef6b4356f338ad3  gcc/testsuite/c-c++-common/cpp/pragma-eof.c
  17f09d053664aa8b96634b37ce0988da  gcc/testsuite/c-c++-common/cpp/spaceship-1.c
! 027fa50fd78720edd2f51bb22c3bd84f  gcc/testsuite/c-c++-common/cpp/ucnid-2011-1-utf8.c
! 3a1169881f0152504462d4376c3b8083  gcc/testsuite/c-c++-common/cpp/ucnid-2011-1.c
  0f93514d0ad79c03edfd672fb354e619  gcc/testsuite/c-c++-common/cpp/va-opt-2.c
! adb3860eef253c75b743827724ba1bbc  gcc/testsuite/c-c++-common/cpp/va-opt-3.c
  ffa7f1250b7f00a641ad13c5836e4f01  gcc/testsuite/c-c++-common/cpp/va-opt-4.c
+ fd40571567f01233bfa44fa08bec2d16  gcc/testsuite/c-c++-common/cpp/va-opt-5.c
+ 859e4cbbaa532f1f681adefb00392657  gcc/testsuite/c-c++-common/cpp/va-opt-6.c
+ f62e2cb62fbc47a02df1795460d7bdf6  gcc/testsuite/c-c++-common/cpp/va-opt-7.c
+ b94572e342c8ff13a560de9051372bae  gcc/testsuite/c-c++-common/cpp/va-opt-8.c
  2afcba443f0dcc8170bbf6957a6f9cad  gcc/testsuite/c-c++-common/cpp/va-opt-9.c
  111311014e0b7d3088a84587438910e7  gcc/testsuite/c-c++-common/cpp/va-opt-error.c
  eea6a019e69d78eae4d98554090253c2  gcc/testsuite/c-c++-common/cpp/va-opt-pedantic.c
*************** ec9404dfa572066d29306781114781a5  gcc/te
*** 9585,9595 ****
  b55d67c31827320a4218c9bfa118857d  gcc/testsuite/c-c++-common/dfp/struct-layout-1.c
  48d67f7f36d890f8419440d99f232731  gcc/testsuite/c-c++-common/dfp/usual-arith-conv-const.c
  c0e0d2f46bf19ec2b6f3291f97a1ac27  gcc/testsuite/c-c++-common/dfp/usual-arith-conv.c
! b791e333c7992738d6e55368c254b200  gcc/testsuite/c-c++-common/diagnostic-format-json-1.c
! 47fa94b7aa8c13bdadc4c4ec23527516  gcc/testsuite/c-c++-common/diagnostic-format-json-2.c
! 310956db3dcfb59b2a596783587a9310  gcc/testsuite/c-c++-common/diagnostic-format-json-3.c
! 02191452899d70d18010f5eb049932c6  gcc/testsuite/c-c++-common/diagnostic-format-json-4.c
! 620a210f29cb12610f18db257397f821  gcc/testsuite/c-c++-common/diagnostic-format-json-5.c
  7ba00026f4502cec45f9e81640ab2978  gcc/testsuite/c-c++-common/diagnostic-units-1.c
  a3932920c58cae162a8f51b19ff5c460  gcc/testsuite/c-c++-common/diagnostic-units-2.c
  82cb424e6ccab8351b892a0bc4f1b4e9  gcc/testsuite/c-c++-common/diagnostic-units-3.c
--- 9764,9774 ----
  b55d67c31827320a4218c9bfa118857d  gcc/testsuite/c-c++-common/dfp/struct-layout-1.c
  48d67f7f36d890f8419440d99f232731  gcc/testsuite/c-c++-common/dfp/usual-arith-conv-const.c
  c0e0d2f46bf19ec2b6f3291f97a1ac27  gcc/testsuite/c-c++-common/dfp/usual-arith-conv.c
! db9bceb8d4532f36dc3c3a966819fae5  gcc/testsuite/c-c++-common/diagnostic-format-json-1.c
! 589c3904b0371f478d557d2c51976137  gcc/testsuite/c-c++-common/diagnostic-format-json-2.c
! 4dd18e1345ed826947ceb2cfa6dc3e98  gcc/testsuite/c-c++-common/diagnostic-format-json-3.c
! b8e8b964da963fa199d6837e8c15245d  gcc/testsuite/c-c++-common/diagnostic-format-json-4.c
! e657bc2863209b4fe6fa23a9601a4597  gcc/testsuite/c-c++-common/diagnostic-format-json-5.c
  7ba00026f4502cec45f9e81640ab2978  gcc/testsuite/c-c++-common/diagnostic-units-1.c
  a3932920c58cae162a8f51b19ff5c460  gcc/testsuite/c-c++-common/diagnostic-units-2.c
  82cb424e6ccab8351b892a0bc4f1b4e9  gcc/testsuite/c-c++-common/diagnostic-units-3.c
*************** d5d9e4636806cc2c21ba5269905d360d  gcc/te
*** 9603,9609 ****
  8814d397a23c89c3297e65f3682e9915  gcc/testsuite/c-c++-common/dump-ada-spec-11.c
  8827eb74f0cafa02e7ac44673f062550  gcc/testsuite/c-c++-common/dump-ada-spec-12.c
  1ed2cdeec0479de57049ec71f84e59ad  gcc/testsuite/c-c++-common/dump-ada-spec-13.c
! 605445bdc11b6eea029486c30b6c2887  gcc/testsuite/c-c++-common/dump-ada-spec-14.c
  7ac1a7c49ffa6c0f99b0152427b088a0  gcc/testsuite/c-c++-common/dump-ada-spec-15.c
  b7ca570ac280601076a28194f31ba77a  gcc/testsuite/c-c++-common/dump-ada-spec-2.c
  ec450dea19e4d8bdd513fcf03b8610a9  gcc/testsuite/c-c++-common/dump-ada-spec-3.c
--- 9782,9788 ----
  8814d397a23c89c3297e65f3682e9915  gcc/testsuite/c-c++-common/dump-ada-spec-11.c
  8827eb74f0cafa02e7ac44673f062550  gcc/testsuite/c-c++-common/dump-ada-spec-12.c
  1ed2cdeec0479de57049ec71f84e59ad  gcc/testsuite/c-c++-common/dump-ada-spec-13.c
! 3dcb9fb1b4d5f41b86d9980442db2301  gcc/testsuite/c-c++-common/dump-ada-spec-14.c
  7ac1a7c49ffa6c0f99b0152427b088a0  gcc/testsuite/c-c++-common/dump-ada-spec-15.c
  b7ca570ac280601076a28194f31ba77a  gcc/testsuite/c-c++-common/dump-ada-spec-2.c
  ec450dea19e4d8bdd513fcf03b8610a9  gcc/testsuite/c-c++-common/dump-ada-spec-3.c
*************** f4eb480d84c0d74ec37a6a42e4f034f6  gcc/te
*** 9632,9657 ****
  a485c2cf2b8fb5018ff6ffa1d09b0291  gcc/testsuite/c-c++-common/fold-masked-cmp-1.c
  6e779ad03a964087cf36696c444f20e2  gcc/testsuite/c-c++-common/fold-masked-cmp-2.c
  9b3df6f3fe1425a3c20ed01eae079f75  gcc/testsuite/c-c++-common/fold-masked-cmp-3.c
! 4e4f084f5a737ff7447ff9a4d812b396  gcc/testsuite/c-c++-common/goacc-gomp/atomic.c
! 1d12f3305ca06a823562f0fccea56f16  gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c
! 25018148b12e7e9ba0bb52c882a3c39b  gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c
  0c724489142a5ed4513ada6ff6ebaea9  gcc/testsuite/c-c++-common/goacc-gomp/pr93465-1.c
  318406ae2dc40af036abc40c46d96836  gcc/testsuite/c-c++-common/goacc/Wparentheses-1.c
! 06b0d3f7a3b04e4b89feaac74e124f6e  gcc/testsuite/c-c++-common/goacc/acc-icf.c
  8260c137601a88121ec2c63d0df63ff6  gcc/testsuite/c-c++-common/goacc/asyncwait-1.c
  d426111516a83fc5f035da114398322c  gcc/testsuite/c-c++-common/goacc/asyncwait-5.c
  a2cd1716ba4f647ad86a615b0dd86f7e  gcc/testsuite/c-c++-common/goacc/atomic.c
  063beec82d4803f5428815adff355071  gcc/testsuite/c-c++-common/goacc/builtin-goacc-parlevel-id-size-2.c
! db600cccace791c8c14dab91dc19af17  gcc/testsuite/c-c++-common/goacc/builtin-goacc-parlevel-id-size.c
  f1fea57305dfe837e7453401fd24f606  gcc/testsuite/c-c++-common/goacc/cache-1.c
  154e13d09dbd32a818555841bcb2b393  gcc/testsuite/c-c++-common/goacc/cache-2.c
  d520e956ceb1443b8b3d0b100a48fa63  gcc/testsuite/c-c++-common/goacc/cache-3-1.c
  36f9abb3ac94c762f04511594ed7b548  gcc/testsuite/c-c++-common/goacc/cache-3-2.c
! 069b96601ec3dbb953900d35acabe0b6  gcc/testsuite/c-c++-common/goacc/classify-kernels-unparallelized.c
! 47a7c99ae34f4da1883673ac8d09df16  gcc/testsuite/c-c++-common/goacc/classify-kernels.c
! 3358740da18aaf8998915bc1d2baeb1f  gcc/testsuite/c-c++-common/goacc/classify-parallel.c
! d99c4bf7d10ae08e76de310ac61ac639  gcc/testsuite/c-c++-common/goacc/classify-routine.c
! 9bba0489de28001a02b9a04fdfda1eda  gcc/testsuite/c-c++-common/goacc/classify-serial.c
  ed0df84115a0f8b333602804bdee2a95  gcc/testsuite/c-c++-common/goacc/clauses-fail.c
  8bfd01f209498815723e71000488572c  gcc/testsuite/c-c++-common/goacc/collapse-1.c
  a29008ff83202ed302993eae2ce59225  gcc/testsuite/c-c++-common/goacc/collapse-2.c
--- 9811,9839 ----
  a485c2cf2b8fb5018ff6ffa1d09b0291  gcc/testsuite/c-c++-common/fold-masked-cmp-1.c
  6e779ad03a964087cf36696c444f20e2  gcc/testsuite/c-c++-common/fold-masked-cmp-2.c
  9b3df6f3fe1425a3c20ed01eae079f75  gcc/testsuite/c-c++-common/fold-masked-cmp-3.c
! 515d5329012cc0802e7d94f233e276c3  gcc/testsuite/c-c++-common/goacc-gomp/atomic.c
! 8464fa7630cd6bb6fcde3ce9e98ba40e  gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c
! b13e8801f9d977c13a72c002dd2c5a6d  gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c
  0c724489142a5ed4513ada6ff6ebaea9  gcc/testsuite/c-c++-common/goacc-gomp/pr93465-1.c
  318406ae2dc40af036abc40c46d96836  gcc/testsuite/c-c++-common/goacc/Wparentheses-1.c
! 38804e577c485537958c84fd18a8c36d  gcc/testsuite/c-c++-common/goacc/acc-icf.c
  8260c137601a88121ec2c63d0df63ff6  gcc/testsuite/c-c++-common/goacc/asyncwait-1.c
  d426111516a83fc5f035da114398322c  gcc/testsuite/c-c++-common/goacc/asyncwait-5.c
  a2cd1716ba4f647ad86a615b0dd86f7e  gcc/testsuite/c-c++-common/goacc/atomic.c
  063beec82d4803f5428815adff355071  gcc/testsuite/c-c++-common/goacc/builtin-goacc-parlevel-id-size-2.c
! cecb948a9fa279990e4a932593839682  gcc/testsuite/c-c++-common/goacc/builtin-goacc-parlevel-id-size.c
  f1fea57305dfe837e7453401fd24f606  gcc/testsuite/c-c++-common/goacc/cache-1.c
  154e13d09dbd32a818555841bcb2b393  gcc/testsuite/c-c++-common/goacc/cache-2.c
  d520e956ceb1443b8b3d0b100a48fa63  gcc/testsuite/c-c++-common/goacc/cache-3-1.c
  36f9abb3ac94c762f04511594ed7b548  gcc/testsuite/c-c++-common/goacc/cache-3-2.c
! 1a041f41d9bc4d458518fbb0129f7ddd  gcc/testsuite/c-c++-common/goacc/classify-kernels-parloops.c
! 7bc0daca0fb001d3841a4f0f7070d586  gcc/testsuite/c-c++-common/goacc/classify-kernels-unparallelized-parloops.c
! e2b00ec4ab145fcdcd6d67498680ca6e  gcc/testsuite/c-c++-common/goacc/classify-kernels-unparallelized.c
! 5a89ee2242c2d7fd3fc99b8dcf69c213  gcc/testsuite/c-c++-common/goacc/classify-kernels.c
! e61818ed3afe6bb87e0ac3dc3d62903d  gcc/testsuite/c-c++-common/goacc/classify-parallel.c
! 65c423f9b41b6cffd057a8939b4181f6  gcc/testsuite/c-c++-common/goacc/classify-routine-nohost.c
! 279369dd84a9fbef34f83dc3aca28a00  gcc/testsuite/c-c++-common/goacc/classify-routine.c
! 4c2c3b64df5a2577c43684283c008d0e  gcc/testsuite/c-c++-common/goacc/classify-serial.c
  ed0df84115a0f8b333602804bdee2a95  gcc/testsuite/c-c++-common/goacc/clauses-fail.c
  8bfd01f209498815723e71000488572c  gcc/testsuite/c-c++-common/goacc/collapse-1.c
  a29008ff83202ed302993eae2ce59225  gcc/testsuite/c-c++-common/goacc/collapse-2.c
*************** df0c5b2a3f8fd74e59ef06f3c576902b  gcc/te
*** 9668,9674 ****
  49a1e1e29de03de0f3ad515f0e13524f  gcc/testsuite/c-c++-common/goacc/declare-2.c
  fbee36d1c4d6ed4bfdee66194ad75772  gcc/testsuite/c-c++-common/goacc/declare-pr90861.c
  229bed5ef7072db0fa428c10c115e33d  gcc/testsuite/c-c++-common/goacc/declare-pr94120.c
! d8469e069b8c26c06d8a2d2aab67a981  gcc/testsuite/c-c++-common/goacc/deep-copy-arrayofstruct.c
  17b63246fd51599bad2716165cbcff0d  gcc/testsuite/c-c++-common/goacc/default-1.c
  8e4b3f87057e886c28e0ca3244adec22  gcc/testsuite/c-c++-common/goacc/default-2.c
  7d7b279607b90403d1fc926ab594dc28  gcc/testsuite/c-c++-common/goacc/default-3.c
--- 9850,9856 ----
  49a1e1e29de03de0f3ad515f0e13524f  gcc/testsuite/c-c++-common/goacc/declare-2.c
  fbee36d1c4d6ed4bfdee66194ad75772  gcc/testsuite/c-c++-common/goacc/declare-pr90861.c
  229bed5ef7072db0fa428c10c115e33d  gcc/testsuite/c-c++-common/goacc/declare-pr94120.c
! 9f5e4fae993aecfc2adc27d4d8746053  gcc/testsuite/c-c++-common/goacc/deep-copy-arrayofstruct.c
  17b63246fd51599bad2716165cbcff0d  gcc/testsuite/c-c++-common/goacc/default-1.c
  8e4b3f87057e886c28e0ca3244adec22  gcc/testsuite/c-c++-common/goacc/default-2.c
  7d7b279607b90403d1fc926ab594dc28  gcc/testsuite/c-c++-common/goacc/default-3.c
*************** d6dca572326bd0b24e648f6d079d7dfa  gcc/te
*** 9678,9685 ****
  1e678e7e2c101c79192a640cd4d2e407  gcc/testsuite/c-c++-common/goacc/deviceptr-2.c
  b2061cbe48e6c36be03418229b1e6c1c  gcc/testsuite/c-c++-common/goacc/deviceptr-3.c
  21cc12eefbed69c28189deb30ef6ecff  gcc/testsuite/c-c++-common/goacc/deviceptr-4.c
  6645aa455bee82b9f65beedd82a8f916  gcc/testsuite/c-c++-common/goacc/executeables-1.c
! 8b05591aaa9488a181b4907b5258b082  gcc/testsuite/c-c++-common/goacc/finalize-1.c
  ee2c56a8648c3d2971c138604ce265a2  gcc/testsuite/c-c++-common/goacc/firstprivate-mappings-1.c
  c7a7080eb3718456e352647005144afe  gcc/testsuite/c-c++-common/goacc/host_data-1.c
  d77fd6ebff8fb0a959f82a4fb9de022e  gcc/testsuite/c-c++-common/goacc/host_data-2.c
--- 9860,9868 ----
  1e678e7e2c101c79192a640cd4d2e407  gcc/testsuite/c-c++-common/goacc/deviceptr-2.c
  b2061cbe48e6c36be03418229b1e6c1c  gcc/testsuite/c-c++-common/goacc/deviceptr-3.c
  21cc12eefbed69c28189deb30ef6ecff  gcc/testsuite/c-c++-common/goacc/deviceptr-4.c
+ 972bc2425217fdc2810dbedc364f94d6  gcc/testsuite/c-c++-common/goacc/diag-parallelism-1.c
  6645aa455bee82b9f65beedd82a8f916  gcc/testsuite/c-c++-common/goacc/executeables-1.c
! 34c5b5c7d6bece7da5df209b5e5b9dbb  gcc/testsuite/c-c++-common/goacc/finalize-1.c
  ee2c56a8648c3d2971c138604ce265a2  gcc/testsuite/c-c++-common/goacc/firstprivate-mappings-1.c
  c7a7080eb3718456e352647005144afe  gcc/testsuite/c-c++-common/goacc/host_data-1.c
  d77fd6ebff8fb0a959f82a4fb9de022e  gcc/testsuite/c-c++-common/goacc/host_data-2.c
*************** fd810ebe54a80c58e76683e0a559234f  gcc/te
*** 9700,9709 ****
  e3a0f1c375f36ae3f072b97ca4be8af8  gcc/testsuite/c-c++-common/goacc/kernels-alias.c
  37219df46c20afb4e83e03c1789b55cd  gcc/testsuite/c-c++-common/goacc/kernels-counter-var-redundant-load.c
  dc5878971e2c2137e5f435ee5228012f  gcc/testsuite/c-c++-common/goacc/kernels-counter-vars-function-scope.c
! 8f3401119f039c2620e244de2c8ef071  gcc/testsuite/c-c++-common/goacc/kernels-decompose-1.c
! 795dc03488d818408ac6473651280d4f  gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c
! b26bfc4575f7dc6746784c0cf6fec4e5  gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c
! 69bad514f2baf519eaeb1425d9f97614  gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-2.c
  af37b31b976b1c0c41e3db72c626d179  gcc/testsuite/c-c++-common/goacc/kernels-default-2.c
  375d0db26deebb908509391d770e8db4  gcc/testsuite/c-c++-common/goacc/kernels-default.c
  e24acb47fd402e8856dba2a851ec9fe1  gcc/testsuite/c-c++-common/goacc/kernels-double-reduction-n.c
--- 9883,9907 ----
  e3a0f1c375f36ae3f072b97ca4be8af8  gcc/testsuite/c-c++-common/goacc/kernels-alias.c
  37219df46c20afb4e83e03c1789b55cd  gcc/testsuite/c-c++-common/goacc/kernels-counter-var-redundant-load.c
  dc5878971e2c2137e5f435ee5228012f  gcc/testsuite/c-c++-common/goacc/kernels-counter-vars-function-scope.c
! 1fb43a4a25ac7b34ab3dcbb454fc6f1e  gcc/testsuite/c-c++-common/goacc/kernels-decompose-1.c
! 9aa4bfb88d24d9625c6eb48089e08c2d  gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c
! 4fc17751a19f8c4386f7d2e0302a18b6  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100280-1.c
! 49ab6ecc064ed1ad888a55e5df3758b1  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-1.c
! a0884cb50456db7d5b57b015e51087ac  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-2.c
! 48f2502f8a0aebf5face12788c440d39  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-3.c
! 10a6cd5b5bea6d4c0a490f27bdfaa4ed  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-4.c
! 40c6c02497636688d79b463b16e260d4  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr103836-1-1.c
! 2b9fc6f430b53ac42803dc761420b14f  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr103836-1-2.c
! 460180cf3f51384ddef2865996da6756  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr103836-1-3.c
! 592dbe3755ee29ce45dbf49f555ea190  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr103836-1-4.c
! fe5d96992072a9d3fb9d61fd8446a85a  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-1.c
! 239fc88ffd9c8d6e35cf19523eac2903  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-2.c
! 460cc28afa141bacd2c3cfe0a5454bd9  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-3.c
! 7d4aeebef2f37cd9451f96d7987fdca6  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-4.c
! 396acaa01b149b83dd0950563090b67d  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104086-1.c
! ef6fb92d74e15384adb96d6c70aaa661  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104132-1.c
! ef26840544c9405ac2c05fdfbb917785  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104133-1.c
! d7391c912c27171564f090a9852d75e9  gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104774-1.c
  af37b31b976b1c0c41e3db72c626d179  gcc/testsuite/c-c++-common/goacc/kernels-default-2.c
  375d0db26deebb908509391d770e8db4  gcc/testsuite/c-c++-common/goacc/kernels-default.c
  e24acb47fd402e8856dba2a851ec9fe1  gcc/testsuite/c-c++-common/goacc/kernels-double-reduction-n.c
*************** dcd0bc575d17be1941f29ab6d09e983a  gcc/te
*** 9715,9721 ****
  e087633670754b48bf908a69d0b09aec  gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit.c
  b48d03cd3a6081d5488adb2dc84bbde3  gcc/testsuite/c-c++-common/goacc/kernels-loop-data-update.c
  5b6d430eb64f84cb55cf3becf31d96d2  gcc/testsuite/c-c++-common/goacc/kernels-loop-data.c
! ae42fe022b27230c2bd27dfbc93e5b37  gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c
  35476f335af94fbd345732424e7b39b2  gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c
  58830358c63f5abf3d9724126f05aea6  gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c
  ec40c24e83a292c270dabe16dce616b1  gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c
--- 9913,9919 ----
  e087633670754b48bf908a69d0b09aec  gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit.c
  b48d03cd3a6081d5488adb2dc84bbde3  gcc/testsuite/c-c++-common/goacc/kernels-loop-data-update.c
  5b6d430eb64f84cb55cf3becf31d96d2  gcc/testsuite/c-c++-common/goacc/kernels-loop-data.c
! ad264fd75fdc471b2f7e5ff554f649e8  gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c
  35476f335af94fbd345732424e7b39b2  gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c
  58830358c63f5abf3d9724126f05aea6  gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c
  ec40c24e83a292c270dabe16dce616b1  gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c
*************** d8680bac58d645327339827aeb4d6670  gcc/te
*** 9732,9760 ****
  c6bb19f1b877604f532b3271637f15af  gcc/testsuite/c-c++-common/goacc/loop-clauses.c
  943121f9af2ecdb53cd96ba15a3c0258  gcc/testsuite/c-c++-common/goacc/loop-private-1.c
  c433ed40537345c26ace448f210a1463  gcc/testsuite/c-c++-common/goacc/loop-shape.c
! 3514c07408629f55cf122ff9aec042e0  gcc/testsuite/c-c++-common/goacc/mdc-1.c
! a1af888000974e530b8f236ccc5b10f9  gcc/testsuite/c-c++-common/goacc/mdc-2.c
! 4d850a8d50687a36ed1302bf93a4e8b1  gcc/testsuite/c-c++-common/goacc/nested-reductions-1-kernels.c
! d811a39a2cbe5f6731da538c76f4520a  gcc/testsuite/c-c++-common/goacc/nested-reductions-1-parallel.c
! de31c62f805f9c1c5428b4f552502ce1  gcc/testsuite/c-c++-common/goacc/nested-reductions-1-routine.c
! 26c8eeb33fad3176bc8de783be708b25  gcc/testsuite/c-c++-common/goacc/nested-reductions-2-kernels.c
! 345dbed9bd8c00710f02899e1fef6d5b  gcc/testsuite/c-c++-common/goacc/nested-reductions-2-parallel.c
! 6e069659dd6fc8344a5b352709254aeb  gcc/testsuite/c-c++-common/goacc/nested-reductions-2-routine.c
! 8670ca5eb3bccd05d00cc1698ea1ff01  gcc/testsuite/c-c++-common/goacc/nesting-1.c
  1bbc8c8f2872cd7f133d840900d4d0d1  gcc/testsuite/c-c++-common/goacc/nesting-data-1.c
! 5edfd501d11a61e005f7ad74e86b8631  gcc/testsuite/c-c++-common/goacc/nesting-fail-1.c
  ec0de1bc2f55f65b60fe6cbda3d62957  gcc/testsuite/c-c++-common/goacc/note-parallelism.c
  8c7a33093e4b8a8b716fde5f62882b6a  gcc/testsuite/c-c++-common/goacc/parallel-1.c
! 1994a28c1697281b5e4019f4e2bea2c8  gcc/testsuite/c-c++-common/goacc/parallel-dims-1.c
  72833bf83f290c33144334e2aaf10a57  gcc/testsuite/c-c++-common/goacc/parallel-dims-2.c
! 3506964551b29d6bd0669597783ba177  gcc/testsuite/c-c++-common/goacc/parallel-reduction.c
  abf2f06821ef83fd68a177bc03b2f19d  gcc/testsuite/c-c++-common/goacc/pcopy.c
  24874d772e438b20ebcc2ae6aede4234  gcc/testsuite/c-c++-common/goacc/pcopyin.c
  1d90abbfb13aaf9003e6882afdf09ae2  gcc/testsuite/c-c++-common/goacc/pcopyout.c
  e01bc16654eb70269f569e503d5a0905  gcc/testsuite/c-c++-common/goacc/pcreate.c
  68f80b7e6dcd38f96ca6b1b1357fb2e1  gcc/testsuite/c-c++-common/goacc/pr102432.c
  8813fa952a39d7fcd8c338a20bbf1a30  gcc/testsuite/c-c++-common/goacc/pr69916.c
! 8e1c43f24e2ef7b983cdb547f2f410a7  gcc/testsuite/c-c++-common/goacc/pr70688.c
  3cab895fbfe4d9a2a6ee0aceffb2970e  gcc/testsuite/c-c++-common/goacc/pr79428-1.c
  d398b6a88925d39ad550f7a21e489047  gcc/testsuite/c-c++-common/goacc/pr84217.c
  f4e4c18e18f7861d92862c9c4423bf8f  gcc/testsuite/c-c++-common/goacc/pr85782.c
--- 9930,9961 ----
  c6bb19f1b877604f532b3271637f15af  gcc/testsuite/c-c++-common/goacc/loop-clauses.c
  943121f9af2ecdb53cd96ba15a3c0258  gcc/testsuite/c-c++-common/goacc/loop-private-1.c
  c433ed40537345c26ace448f210a1463  gcc/testsuite/c-c++-common/goacc/loop-shape.c
! daafb2cfc55c1e66b6a23616ef96a71e  gcc/testsuite/c-c++-common/goacc/mdc-1.c
! 25e24ffa2c3e130b2ce6c638ad22a064  gcc/testsuite/c-c++-common/goacc/mdc-2.c
! ca52cdb1b4cfd4d80d0632de43a8acb1  gcc/testsuite/c-c++-common/goacc/nested-reductions-1-kernels.c
! 833ecd7a5770c9f4041e327c2d324aac  gcc/testsuite/c-c++-common/goacc/nested-reductions-1-parallel.c
! f6a8c73e3913a7f2cb2ece39276bbe11  gcc/testsuite/c-c++-common/goacc/nested-reductions-1-routine.c
! 7d8ef00ce54017166fe883673f062bb9  gcc/testsuite/c-c++-common/goacc/nested-reductions-2-kernels.c
! 6f1876a53c2c7b4b3e4022e32de884cf  gcc/testsuite/c-c++-common/goacc/nested-reductions-2-parallel.c
! b16e0fccadccfbdc8bf18293db61f011  gcc/testsuite/c-c++-common/goacc/nested-reductions-2-routine.c
! 56d9598ce31d50dfd5d178c2bac86589  gcc/testsuite/c-c++-common/goacc/nesting-1.c
  1bbc8c8f2872cd7f133d840900d4d0d1  gcc/testsuite/c-c++-common/goacc/nesting-data-1.c
! c26dc1ddd2c7cc2e10219fc4c458a65b  gcc/testsuite/c-c++-common/goacc/nesting-fail-1.c
  ec0de1bc2f55f65b60fe6cbda3d62957  gcc/testsuite/c-c++-common/goacc/note-parallelism.c
+ 738e3396a07667309d4be54f9d34482e  gcc/testsuite/c-c++-common/goacc/orphan-reductions-1.c
+ f101d01493fc3da21ffcada3b9fe53f6  gcc/testsuite/c-c++-common/goacc/orphan-reductions-2.c
+ f1f64beec003bfdf47a108b0294d1375  gcc/testsuite/c-c++-common/goacc/orphan-reductions-3.c
  8c7a33093e4b8a8b716fde5f62882b6a  gcc/testsuite/c-c++-common/goacc/parallel-1.c
! a358f6e203ecc7a7968637d8f9a84c44  gcc/testsuite/c-c++-common/goacc/parallel-dims-1.c
  72833bf83f290c33144334e2aaf10a57  gcc/testsuite/c-c++-common/goacc/parallel-dims-2.c
! b21f128f6f33e167b31048385621fc36  gcc/testsuite/c-c++-common/goacc/parallel-reduction.c
  abf2f06821ef83fd68a177bc03b2f19d  gcc/testsuite/c-c++-common/goacc/pcopy.c
  24874d772e438b20ebcc2ae6aede4234  gcc/testsuite/c-c++-common/goacc/pcopyin.c
  1d90abbfb13aaf9003e6882afdf09ae2  gcc/testsuite/c-c++-common/goacc/pcopyout.c
  e01bc16654eb70269f569e503d5a0905  gcc/testsuite/c-c++-common/goacc/pcreate.c
  68f80b7e6dcd38f96ca6b1b1357fb2e1  gcc/testsuite/c-c++-common/goacc/pr102432.c
  8813fa952a39d7fcd8c338a20bbf1a30  gcc/testsuite/c-c++-common/goacc/pr69916.c
! d9a74af59f33958cc09a5d325f52f99e  gcc/testsuite/c-c++-common/goacc/pr70688.c
  3cab895fbfe4d9a2a6ee0aceffb2970e  gcc/testsuite/c-c++-common/goacc/pr79428-1.c
  d398b6a88925d39ad550f7a21e489047  gcc/testsuite/c-c++-common/goacc/pr84217.c
  f4e4c18e18f7861d92862c9c4423bf8f  gcc/testsuite/c-c++-common/goacc/pr85782.c
*************** f7c53b4b7cfca23e012fb42b7951f318  gcc/te
*** 9762,9768 ****
  61a570b9f391acfdfb9b0189424a74ee  gcc/testsuite/c-c++-common/goacc/pr93488.c
  77856d506d7addd81bc68f380358627f  gcc/testsuite/c-c++-common/goacc/pragma_context.c
  d76b8ed3ade6794cf7f243b5df9b41cb  gcc/testsuite/c-c++-common/goacc/present-1.c
! b9c9ccb2e2c82e5d460ac09e049ad1e2  gcc/testsuite/c-c++-common/goacc/private-reduction-1.c
  4331391e656c6687b80ca7ee79b21e73  gcc/testsuite/c-c++-common/goacc/reduction-1.c
  092e43f68f7f9d80d1358ca7dc48cb59  gcc/testsuite/c-c++-common/goacc/reduction-2.c
  5ff7f03babb3159e96873f29fbebc584  gcc/testsuite/c-c++-common/goacc/reduction-3.c
--- 9963,9973 ----
  61a570b9f391acfdfb9b0189424a74ee  gcc/testsuite/c-c++-common/goacc/pr93488.c
  77856d506d7addd81bc68f380358627f  gcc/testsuite/c-c++-common/goacc/pragma_context.c
  d76b8ed3ade6794cf7f243b5df9b41cb  gcc/testsuite/c-c++-common/goacc/present-1.c
! fcf3a663cb7ac512b361f5677f5a6fc1  gcc/testsuite/c-c++-common/goacc/private-reduction-1.c
! 931bc06e0633f1e9fd8cc4aae5c25437  gcc/testsuite/c-c++-common/goacc/privatization-1-compute-loop.c
! a36d137c61c91eebafe06b69005ed065  gcc/testsuite/c-c++-common/goacc/privatization-1-compute.c
! d901676912c84b1538b682b98df630ac  gcc/testsuite/c-c++-common/goacc/privatization-1-routine_gang-loop.c
! fdeb18440623ddebb1218a2b4b499f03  gcc/testsuite/c-c++-common/goacc/privatization-1-routine_gang.c
  4331391e656c6687b80ca7ee79b21e73  gcc/testsuite/c-c++-common/goacc/reduction-1.c
  092e43f68f7f9d80d1358ca7dc48cb59  gcc/testsuite/c-c++-common/goacc/reduction-2.c
  5ff7f03babb3159e96873f29fbebc584  gcc/testsuite/c-c++-common/goacc/reduction-3.c
*************** b9c9ccb2e2c82e5d460ac09e049ad1e2  gcc/te
*** 9770,9794 ****
  87d6fc53480ffc48b9bcc5dbec279543  gcc/testsuite/c-c++-common/goacc/reduction-5.c
  257a77aee12af0f943094c1039f93f8b  gcc/testsuite/c-c++-common/goacc/reduction-6.c
  56a2b01609c03c4779369ba70942e140  gcc/testsuite/c-c++-common/goacc/reduction-promotions.c
! 31851b706d47bb66e2b8de98b7f8934c  gcc/testsuite/c-c++-common/goacc/routine-1.c
! 66d1c557f3ebfa20b746e35c99769fb4  gcc/testsuite/c-c++-common/goacc/routine-2.c
  b8fe6f4ef7484e937e55940896edeb2c  gcc/testsuite/c-c++-common/goacc/routine-3-extern.c
  91d2db0804978500ca4814a650d91c42  gcc/testsuite/c-c++-common/goacc/routine-3.c
! fe9c03ab5265c1d2f0f397b619dc939c  gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
! 979496d47bba4aa1b092f5023de8c229  gcc/testsuite/c-c++-common/goacc/routine-4.c
! 4058dedd0ce4bf12abaa52a2eb5deb92  gcc/testsuite/c-c++-common/goacc/routine-5.c
  5dae5250504c76cc05365cbb5d9a592e  gcc/testsuite/c-c++-common/goacc/routine-level-of-parallelism-1.c
! b0bf71cce5ee03e8c5cc8266b46bfe0a  gcc/testsuite/c-c++-common/goacc/routine-level-of-parallelism-2.c
  71ff1b7541d8c733624f242976e1b747  gcc/testsuite/c-c++-common/goacc/sb-1.c
  1dde0d0d526302b12c8c22cfe846ddc1  gcc/testsuite/c-c++-common/goacc/sb-2.c
  2e25fe0594ffb9e9a8f935be5d6e9cfa  gcc/testsuite/c-c++-common/goacc/sb-3.c
! 0050356033b141d3c915709a0fa7967f  gcc/testsuite/c-c++-common/goacc/struct-enter-exit-data-1.c
  5109f14e1fb05cda829d216ab6c5a02f  gcc/testsuite/c-c++-common/goacc/tile-2.c
  a140f15e3d552040b8f3c805cd73f542  gcc/testsuite/c-c++-common/goacc/tile.c
  4f12915b0be66791d61798f30094289c  gcc/testsuite/c-c++-common/goacc/uninit-copy-clause.c
! 8ff2155015a769278973d385c09e06ea  gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c
! c318a594a0ee4648dcb80161c22fd94d  gcc/testsuite/c-c++-common/goacc/uninit-firstprivate-clause.c
! 4d1086ba1f1e8d24fec2b62f6c3958e3  gcc/testsuite/c-c++-common/goacc/uninit-if-clause.c
  dc80449bfdca5a99a480536d2e1db33b  gcc/testsuite/c-c++-common/goacc/uninit-use-device-clause.c
  3e0f236b99de22401e18251d5b11c962  gcc/testsuite/c-c++-common/goacc/update-1.c
  1c02e1d791c7d07a364d26261ecfa2fd  gcc/testsuite/c-c++-common/goacc/update-if_present-1.c
--- 9975,10001 ----
  87d6fc53480ffc48b9bcc5dbec279543  gcc/testsuite/c-c++-common/goacc/reduction-5.c
  257a77aee12af0f943094c1039f93f8b  gcc/testsuite/c-c++-common/goacc/reduction-6.c
  56a2b01609c03c4779369ba70942e140  gcc/testsuite/c-c++-common/goacc/reduction-promotions.c
! b8d1c8e8a6053ab2f232231f687af30c  gcc/testsuite/c-c++-common/goacc/routine-1.c
! 44f22249f0b427d35f1430b1608fc033  gcc/testsuite/c-c++-common/goacc/routine-2.c
  b8fe6f4ef7484e937e55940896edeb2c  gcc/testsuite/c-c++-common/goacc/routine-3-extern.c
  91d2db0804978500ca4814a650d91c42  gcc/testsuite/c-c++-common/goacc/routine-3.c
! 0d3d853d264c9a680f703ec88a7d65c8  gcc/testsuite/c-c++-common/goacc/routine-4-extern.c
! 617e48a53c34cb330649cf65153823a6  gcc/testsuite/c-c++-common/goacc/routine-4.c
! 1360f2d0ba29c23593e450b5163f08b6  gcc/testsuite/c-c++-common/goacc/routine-5.c
  5dae5250504c76cc05365cbb5d9a592e  gcc/testsuite/c-c++-common/goacc/routine-level-of-parallelism-1.c
! cbd7e5ffbac07cddc3cf1f52861156e9  gcc/testsuite/c-c++-common/goacc/routine-level-of-parallelism-2.c
! a6830a8d2358e26e07f7defa80e922ef  gcc/testsuite/c-c++-common/goacc/routine-nohost-1.c
! b49c7784b16fec25d9d63dff65b06085  gcc/testsuite/c-c++-common/goacc/routine-nohost-2.c
  71ff1b7541d8c733624f242976e1b747  gcc/testsuite/c-c++-common/goacc/sb-1.c
  1dde0d0d526302b12c8c22cfe846ddc1  gcc/testsuite/c-c++-common/goacc/sb-2.c
  2e25fe0594ffb9e9a8f935be5d6e9cfa  gcc/testsuite/c-c++-common/goacc/sb-3.c
! 94af55a13b250c49ee388c813dd285e5  gcc/testsuite/c-c++-common/goacc/struct-enter-exit-data-1.c
  5109f14e1fb05cda829d216ab6c5a02f  gcc/testsuite/c-c++-common/goacc/tile-2.c
  a140f15e3d552040b8f3c805cd73f542  gcc/testsuite/c-c++-common/goacc/tile.c
  4f12915b0be66791d61798f30094289c  gcc/testsuite/c-c++-common/goacc/uninit-copy-clause.c
! 62ebb0e0b12fea8a81543951d20f1b39  gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c
! 397767b2d96d3321574bf53ca80f1027  gcc/testsuite/c-c++-common/goacc/uninit-firstprivate-clause.c
! 2245c15bddd4c2a0ca8381dd4baf60d0  gcc/testsuite/c-c++-common/goacc/uninit-if-clause.c
  dc80449bfdca5a99a480536d2e1db33b  gcc/testsuite/c-c++-common/goacc/uninit-use-device-clause.c
  3e0f236b99de22401e18251d5b11c962  gcc/testsuite/c-c++-common/goacc/update-1.c
  1c02e1d791c7d07a364d26261ecfa2fd  gcc/testsuite/c-c++-common/goacc/update-if_present-1.c
*************** d8d78230b698b1427515ae7b473eaf5f  gcc/te
*** 9797,9807 ****
--- 10004,10023 ----
  63761edcc60694bb3443638fd038e6de  gcc/testsuite/c-c++-common/gomp/Wparentheses-2.c
  87caf85546707f566688fc6b60a4d1e9  gcc/testsuite/c-c++-common/gomp/Wparentheses-3.c
  f2eeacd8e01fce5f98daff2393115250  gcc/testsuite/c-c++-common/gomp/Wparentheses-4.c
+ 5cf6813317fa5ef169d543e63d45b26a  gcc/testsuite/c-c++-common/gomp/affinity-1.c
+ d463344100a0478350affbdc29db0366  gcc/testsuite/c-c++-common/gomp/affinity-2.c
+ 2e8a942227251c348ea0e35322d0512a  gcc/testsuite/c-c++-common/gomp/affinity-3.c
+ 614a49f3f358c35cb4a5b15ce97da263  gcc/testsuite/c-c++-common/gomp/affinity-4.c
+ 9111959cc520a4e29a99b5bb933a762d  gcc/testsuite/c-c++-common/gomp/affinity-5.c
+ 273d5b4d31c635ddabf92c1100055ab0  gcc/testsuite/c-c++-common/gomp/affinity-6.c
+ b97fa9634619ef9609f4b391a3df5de2  gcc/testsuite/c-c++-common/gomp/affinity-7.c
  e9f8d7d790e775b8803a987279857fd8  gcc/testsuite/c-c++-common/gomp/allocate-1.c
  a279457a2689563eb7f9fd80f7f626b4  gcc/testsuite/c-c++-common/gomp/allocate-2.c
  9caab435288f915f6d7fe59b84b443c9  gcc/testsuite/c-c++-common/gomp/allocate-3.c
  b5cc36629f2af04781e8aa71d6a7ae0b  gcc/testsuite/c-c++-common/gomp/allocate-4.c
  707e03e99cd36b731a7a26db01686e9f  gcc/testsuite/c-c++-common/gomp/allocate-5.c
+ 56edad2f1d021dddfe817eecd7e376e2  gcc/testsuite/c-c++-common/gomp/allocate-6.c
+ 97a0a45a85b1c1938d08e940a662893f  gcc/testsuite/c-c++-common/gomp/allocate-7.c
  594f9585c33418a75a6d249f9f52a31b  gcc/testsuite/c-c++-common/gomp/atomic-1.c
  ca9adc82afaa4bfe9afab3d0c83d5427  gcc/testsuite/c-c++-common/gomp/atomic-10.c
  95e1c98e0d2d1d928153976ab5e8cb8f  gcc/testsuite/c-c++-common/gomp/atomic-12.c
*************** ca9adc82afaa4bfe9afab3d0c83d5427  gcc/te
*** 9809,9835 ****
  23b8ae462d6ee9320e3a0721f73e3c9f  gcc/testsuite/c-c++-common/gomp/atomic-14.c
  ea35c8898a66194ddfd4052e95c9b78c  gcc/testsuite/c-c++-common/gomp/atomic-15.c
  0129f6c1e124f845d12d0e1105a1272a  gcc/testsuite/c-c++-common/gomp/atomic-16.c
! 1e7cf6b2e527531bfe1930fd346929f6  gcc/testsuite/c-c++-common/gomp/atomic-17.c
! 9ad3042446baebcc43e5235b00f9ac92  gcc/testsuite/c-c++-common/gomp/atomic-18.c
  1e5d679fc3a0742dc00c356cc6f0524c  gcc/testsuite/c-c++-common/gomp/atomic-19.c
  02a1665574401bc7491c754880894569  gcc/testsuite/c-c++-common/gomp/atomic-2.c
  ef6fbf40bb979e66ae3eedd17f4baaa5  gcc/testsuite/c-c++-common/gomp/atomic-20.c
! 2270bdc798a328bef75686971339d262  gcc/testsuite/c-c++-common/gomp/atomic-21.c
  3bf74d2ed758caccfaf364279bbb7626  gcc/testsuite/c-c++-common/gomp/atomic-22.c
  8a1c4fd345dd7757c147e2ee391cd6ed  gcc/testsuite/c-c++-common/gomp/atomic-23.c
  ef84be84eed7be26fd4aef69eb50de83  gcc/testsuite/c-c++-common/gomp/atomic-3.c
! b2ce89f1ba635f8d6701308583cd4759  gcc/testsuite/c-c++-common/gomp/atomic-4.c
  338ba582f00391fbbba5113c8a1bb792  gcc/testsuite/c-c++-common/gomp/atomic-7.c
  99033a31ad0844a80bb561d39f21bc2c  gcc/testsuite/c-c++-common/gomp/atomic-8.c
  3cc6adb13ca30af2db982d07306a24d7  gcc/testsuite/c-c++-common/gomp/atomic-9.c
! 45c8c473f031ba94eb1154ab4f79b457  gcc/testsuite/c-c++-common/gomp/cancel-1.c
  192802715f9a6395e2ccf6ce992c4fee  gcc/testsuite/c-c++-common/gomp/cancel-2.c
! 22b424a04e803213ee1d9b44ee71dfdd  gcc/testsuite/c-c++-common/gomp/clause-dups-1.c
! 17e4e79f619e96757401f1004472d1a2  gcc/testsuite/c-c++-common/gomp/clauses-1.c
  53df5de9ab063edd49814ad88fb4fb9b  gcc/testsuite/c-c++-common/gomp/clauses-2.c
  657094047e2432f3bc3c5cafde1eafcd  gcc/testsuite/c-c++-common/gomp/clauses-3.c
  8d9ef02ce9840a58a8c64026e4df30b2  gcc/testsuite/c-c++-common/gomp/clauses-4.c
! b5dcc71908364b350a7c979c2633f7fb  gcc/testsuite/c-c++-common/gomp/clauses-5.c
  70b3d73007bef6b23ec15bb120cb88ca  gcc/testsuite/c-c++-common/gomp/combined-1.c
  8971b0fe4f2bfd550f584e814610f06e  gcc/testsuite/c-c++-common/gomp/combined-2.c
  4a818b745d1f8704ddb0479a4cad1ca2  gcc/testsuite/c-c++-common/gomp/combined-3.c
--- 10025,10062 ----
  23b8ae462d6ee9320e3a0721f73e3c9f  gcc/testsuite/c-c++-common/gomp/atomic-14.c
  ea35c8898a66194ddfd4052e95c9b78c  gcc/testsuite/c-c++-common/gomp/atomic-15.c
  0129f6c1e124f845d12d0e1105a1272a  gcc/testsuite/c-c++-common/gomp/atomic-16.c
! 9eb53d2a143f0655a3e2c53684012229  gcc/testsuite/c-c++-common/gomp/atomic-17.c
! f6e4fa6c4c772b5ab149078b05b6398a  gcc/testsuite/c-c++-common/gomp/atomic-18.c
  1e5d679fc3a0742dc00c356cc6f0524c  gcc/testsuite/c-c++-common/gomp/atomic-19.c
  02a1665574401bc7491c754880894569  gcc/testsuite/c-c++-common/gomp/atomic-2.c
  ef6fbf40bb979e66ae3eedd17f4baaa5  gcc/testsuite/c-c++-common/gomp/atomic-20.c
! e40c91a6b7554836f08efc805a22f608  gcc/testsuite/c-c++-common/gomp/atomic-21.c
  3bf74d2ed758caccfaf364279bbb7626  gcc/testsuite/c-c++-common/gomp/atomic-22.c
  8a1c4fd345dd7757c147e2ee391cd6ed  gcc/testsuite/c-c++-common/gomp/atomic-23.c
+ c651c262d3e15c95c53b73871b4f163a  gcc/testsuite/c-c++-common/gomp/atomic-24.c
+ 4766e7d280e79e1621e5cfccc0b0f66a  gcc/testsuite/c-c++-common/gomp/atomic-25.c
+ 72df934869fb3277492bf7e6bc131faf  gcc/testsuite/c-c++-common/gomp/atomic-26.c
+ 7e910f9e21d0019aabf4c57b03fe842e  gcc/testsuite/c-c++-common/gomp/atomic-27.c
+ 5b7585f61e20f6be5898a1d367671265  gcc/testsuite/c-c++-common/gomp/atomic-28.c
+ 49ba77912bdbf7e6d63f7f4441c10850  gcc/testsuite/c-c++-common/gomp/atomic-29.c
  ef84be84eed7be26fd4aef69eb50de83  gcc/testsuite/c-c++-common/gomp/atomic-3.c
! 8b71592268bef25e81e2e553562488ef  gcc/testsuite/c-c++-common/gomp/atomic-30.c
! 712c72ff66738fcaa0053d10a0ef9902  gcc/testsuite/c-c++-common/gomp/atomic-31.c
! dcd88cf4442d15fe1ee6cf0c65bec7ba  gcc/testsuite/c-c++-common/gomp/atomic-4.c
  338ba582f00391fbbba5113c8a1bb792  gcc/testsuite/c-c++-common/gomp/atomic-7.c
  99033a31ad0844a80bb561d39f21bc2c  gcc/testsuite/c-c++-common/gomp/atomic-8.c
  3cc6adb13ca30af2db982d07306a24d7  gcc/testsuite/c-c++-common/gomp/atomic-9.c
! c014acc338c8f751416c40b87de8a9ea  gcc/testsuite/c-c++-common/gomp/attrs-1.c
! 936bf736d9e5166aef93b839a7fb3fcf  gcc/testsuite/c-c++-common/gomp/attrs-2.c
! a6ad21899add03d8c45781b5f59ce8f4  gcc/testsuite/c-c++-common/gomp/attrs-3.c
! 9f730a41da1e4dad0ab17382046a6c23  gcc/testsuite/c-c++-common/gomp/cancel-1.c
  192802715f9a6395e2ccf6ce992c4fee  gcc/testsuite/c-c++-common/gomp/cancel-2.c
! 6f9b225fe1cf719440accba12db2e1a4  gcc/testsuite/c-c++-common/gomp/clause-dups-1.c
! 2d100a7efc7458044156ec5ce1b62589  gcc/testsuite/c-c++-common/gomp/clauses-1.c
  53df5de9ab063edd49814ad88fb4fb9b  gcc/testsuite/c-c++-common/gomp/clauses-2.c
  657094047e2432f3bc3c5cafde1eafcd  gcc/testsuite/c-c++-common/gomp/clauses-3.c
  8d9ef02ce9840a58a8c64026e4df30b2  gcc/testsuite/c-c++-common/gomp/clauses-4.c
! 4495a5b525e167ab62035c686fc8d83b  gcc/testsuite/c-c++-common/gomp/clauses-5.c
  70b3d73007bef6b23ec15bb120cb88ca  gcc/testsuite/c-c++-common/gomp/combined-1.c
  8971b0fe4f2bfd550f584e814610f06e  gcc/testsuite/c-c++-common/gomp/combined-2.c
  4a818b745d1f8704ddb0479a4cad1ca2  gcc/testsuite/c-c++-common/gomp/combined-3.c
*************** d029e5eb6faefe6ca785e1b9e12615d3  gcc/te
*** 9855,9860 ****
--- 10082,10089 ----
  ec57ddf60230099a4e71566afe991826  gcc/testsuite/c-c++-common/gomp/declare-variant-8.c
  97b1f9bfd5c062c5e04176f9ca2486bd  gcc/testsuite/c-c++-common/gomp/declare-variant-9.c
  0dbf545a4d885c579a6fa72fe4bf8332  gcc/testsuite/c-c++-common/gomp/default-1.c
+ 5fb2c1ff7f22a7db37e361c51d486872  gcc/testsuite/c-c++-common/gomp/default-2.c
+ 53f1dfff816cc4e84b475f89e062973d  gcc/testsuite/c-c++-common/gomp/default-3.c
  210213fef63c2c9f7b4d77ee3540dfd2  gcc/testsuite/c-c++-common/gomp/defaultmap-1.c
  cfe9ce2bee6dfde91d715b2c34a5a896  gcc/testsuite/c-c++-common/gomp/defaultmap-2.c
  5ccd214a0e6437b9a7e3a44ab4d50f74  gcc/testsuite/c-c++-common/gomp/defaultmap-3.c
*************** f0e8744f81b4bd363089960ae8a6bbb6  gcc/te
*** 9874,9881 ****
  c9f7d4328381112d463ae5d7abf05d6b  gcc/testsuite/c-c++-common/gomp/doacross-3.c
  b80b407c1b236d995633edd987b92089  gcc/testsuite/c-c++-common/gomp/doacross-4.c
  5a70f931f3d1911a210ec6155240d4dc  gcc/testsuite/c-c++-common/gomp/element-1.c
! b4b404945f33512628e60c9ebd9b767a  gcc/testsuite/c-c++-common/gomp/flush-1.c
! 3ed4af2aec57a7165a1a730e299b4935  gcc/testsuite/c-c++-common/gomp/flush-2.c
  ad1eeb282f9344d4c58d5874c754e5df  gcc/testsuite/c-c++-common/gomp/for-1.c
  72f3b72b6cf3d6d357481874c044b6fd  gcc/testsuite/c-c++-common/gomp/for-2.c
  cbf5ce828963ae443b4d7cc862d9c505  gcc/testsuite/c-c++-common/gomp/for-3.c
--- 10103,10113 ----
  c9f7d4328381112d463ae5d7abf05d6b  gcc/testsuite/c-c++-common/gomp/doacross-3.c
  b80b407c1b236d995633edd987b92089  gcc/testsuite/c-c++-common/gomp/doacross-4.c
  5a70f931f3d1911a210ec6155240d4dc  gcc/testsuite/c-c++-common/gomp/element-1.c
! 56193fbd64f093dd570f7f9543fd8e9e  gcc/testsuite/c-c++-common/gomp/error-1.c
! fa360c10a44a15ddb815a286fa0f2658  gcc/testsuite/c-c++-common/gomp/error-2.c
! 7233b51340bdbb7f07e6d756af1f2c65  gcc/testsuite/c-c++-common/gomp/error-3.c
! abc97c211d8962eb6ce4574a44c559c3  gcc/testsuite/c-c++-common/gomp/flush-1.c
! 753b892002f99b15e5fbcd20dfb060e9  gcc/testsuite/c-c++-common/gomp/flush-2.c
  ad1eeb282f9344d4c58d5874c754e5df  gcc/testsuite/c-c++-common/gomp/for-1.c
  72f3b72b6cf3d6d357481874c044b6fd  gcc/testsuite/c-c++-common/gomp/for-2.c
  cbf5ce828963ae443b4d7cc862d9c505  gcc/testsuite/c-c++-common/gomp/for-3.c
*************** b9f70a44108d3410396c88c5623b3919  gcc/te
*** 9894,9922 ****
  d173a4359da95b48c8d051a752a820ad  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-4.c
  94c1c42c60585a077f568d5bea528077  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-5.c
  2e0840d181813aec1108fbd34f344fea  gcc/testsuite/c-c++-common/gomp/linear-1.c
! 8ad9b1765201c7061303ff4364b00be3  gcc/testsuite/c-c++-common/gomp/loop-1.c
  98a2a47c678a83b550ad02b4645cb7b0  gcc/testsuite/c-c++-common/gomp/loop-2.c
  9592f2cca3c5fd7c0e8fd9da7cb178d1  gcc/testsuite/c-c++-common/gomp/loop-3.c
  96f80819d26df95994ad31e806db9ad9  gcc/testsuite/c-c++-common/gomp/loop-4.c
  f57f51983db80a2fd1be027e87767d44  gcc/testsuite/c-c++-common/gomp/loop-5.c
  a09826f6b14616132ea27a08de9075b1  gcc/testsuite/c-c++-common/gomp/loop-6.c
  576203a21b3e04e83b9327037d1c1809  gcc/testsuite/c-c++-common/gomp/loop-7.c
  6b8389c7145e0ad858f6b5fe2cab60e4  gcc/testsuite/c-c++-common/gomp/map-1.c
  6ec7216703861e0dcd0752796794b32b  gcc/testsuite/c-c++-common/gomp/map-2.c
  84b32011b7cc61bdab96dc5182d6fa16  gcc/testsuite/c-c++-common/gomp/map-3.c
  f26a9793012d174bb469a5a2bbe88ed8  gcc/testsuite/c-c++-common/gomp/map-4.c
  277cedbcd2effa8734f83ed409ddc325  gcc/testsuite/c-c++-common/gomp/map-5.c
  3b2e33f5ff6d1fab628bbc47b669bb42  gcc/testsuite/c-c++-common/gomp/master-combined-1.c
  8fdb590ce90d1a3c558de7dc81a38d89  gcc/testsuite/c-c++-common/gomp/master-combined-2.c
  6fa2115821b7e05f4b4772c894f7cf12  gcc/testsuite/c-c++-common/gomp/nesting-1.c
! 1bae57136b35e5a394e4513b1dfc4f3f  gcc/testsuite/c-c++-common/gomp/nesting-2.c
  406abd50996addc0929156835a0b5686  gcc/testsuite/c-c++-common/gomp/nesting-warn-1.c
  ce3fb89f1513613421cc620156235d68  gcc/testsuite/c-c++-common/gomp/nontemporal-1.c
  22a3481e8c3df4f0596de8f67dab0a59  gcc/testsuite/c-c++-common/gomp/nontemporal-2.c
! 16f6f2aa3b13e584355ef5103361c8dd  gcc/testsuite/c-c++-common/gomp/order-1.c
! fd9490b39935ee32a52e7d5b5bed20d0  gcc/testsuite/c-c++-common/gomp/order-2.c
  db900e16f622568df37b1e202fd25b9f  gcc/testsuite/c-c++-common/gomp/order-3.c
  2c96377fc6a30d8bf8d1cd396f082ca2  gcc/testsuite/c-c++-common/gomp/order-4.c
  346e1047ae41de5d851736fb41185adb  gcc/testsuite/c-c++-common/gomp/ordered-1.c
  ef86bb29dfbea0543e8ca02ce440c823  gcc/testsuite/c-c++-common/gomp/ordered-2.c
  c8eb196146424dae7866984b548de18b  gcc/testsuite/c-c++-common/gomp/ordered-3.c
--- 10126,10170 ----
  d173a4359da95b48c8d051a752a820ad  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-4.c
  94c1c42c60585a077f568d5bea528077  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-5.c
  2e0840d181813aec1108fbd34f344fea  gcc/testsuite/c-c++-common/gomp/linear-1.c
! ab07b5a124255abaa1fd1c7350a95ec7  gcc/testsuite/c-c++-common/gomp/loop-1.c
! 1eefa1e4ebf9306f021a466fbfb0458a  gcc/testsuite/c-c++-common/gomp/loop-10.c
! d28fa472d0ed4264e8bf9d4545e77ae5  gcc/testsuite/c-c++-common/gomp/loop-11.c
  98a2a47c678a83b550ad02b4645cb7b0  gcc/testsuite/c-c++-common/gomp/loop-2.c
  9592f2cca3c5fd7c0e8fd9da7cb178d1  gcc/testsuite/c-c++-common/gomp/loop-3.c
  96f80819d26df95994ad31e806db9ad9  gcc/testsuite/c-c++-common/gomp/loop-4.c
  f57f51983db80a2fd1be027e87767d44  gcc/testsuite/c-c++-common/gomp/loop-5.c
  a09826f6b14616132ea27a08de9075b1  gcc/testsuite/c-c++-common/gomp/loop-6.c
  576203a21b3e04e83b9327037d1c1809  gcc/testsuite/c-c++-common/gomp/loop-7.c
+ bbbe92047177151542b6ff825d52c4e4  gcc/testsuite/c-c++-common/gomp/loop-8.c
+ 67e2138fdf955d87a5868fe981258015  gcc/testsuite/c-c++-common/gomp/loop-9.c
  6b8389c7145e0ad858f6b5fe2cab60e4  gcc/testsuite/c-c++-common/gomp/map-1.c
  6ec7216703861e0dcd0752796794b32b  gcc/testsuite/c-c++-common/gomp/map-2.c
  84b32011b7cc61bdab96dc5182d6fa16  gcc/testsuite/c-c++-common/gomp/map-3.c
  f26a9793012d174bb469a5a2bbe88ed8  gcc/testsuite/c-c++-common/gomp/map-4.c
  277cedbcd2effa8734f83ed409ddc325  gcc/testsuite/c-c++-common/gomp/map-5.c
+ 67c80af0682db4c373d338c03bb665ac  gcc/testsuite/c-c++-common/gomp/map-6.c
+ b8e110ebbec9c6db80b28e633ae2f67e  gcc/testsuite/c-c++-common/gomp/map-7.c
+ d5ee74feb13dd8875f12132dccfe8126  gcc/testsuite/c-c++-common/gomp/masked-1.c
+ c8a1a97bda2a787e6f55c68563e256b6  gcc/testsuite/c-c++-common/gomp/masked-2.c
+ cfaa12085558b78e5edbdb4a338479d2  gcc/testsuite/c-c++-common/gomp/masked-combined-1.c
+ 6e3cc2570637ae982148840ff511645f  gcc/testsuite/c-c++-common/gomp/masked-combined-2.c
  3b2e33f5ff6d1fab628bbc47b669bb42  gcc/testsuite/c-c++-common/gomp/master-combined-1.c
  8fdb590ce90d1a3c558de7dc81a38d89  gcc/testsuite/c-c++-common/gomp/master-combined-2.c
  6fa2115821b7e05f4b4772c894f7cf12  gcc/testsuite/c-c++-common/gomp/nesting-1.c
! a42a0cc1bcf4e86e482ce7f0b675ebf1  gcc/testsuite/c-c++-common/gomp/nesting-2.c
  406abd50996addc0929156835a0b5686  gcc/testsuite/c-c++-common/gomp/nesting-warn-1.c
  ce3fb89f1513613421cc620156235d68  gcc/testsuite/c-c++-common/gomp/nontemporal-1.c
  22a3481e8c3df4f0596de8f67dab0a59  gcc/testsuite/c-c++-common/gomp/nontemporal-2.c
! 3e7ebce90610e937ccdb0944369794bd  gcc/testsuite/c-c++-common/gomp/nothing-1.c
! a8cae7afccfdaf5c55701d1fd623cbae  gcc/testsuite/c-c++-common/gomp/nothing-2.c
! 314d7c905d7b458917321c534f1d5520  gcc/testsuite/c-c++-common/gomp/num-teams-1.c
! 9284f2bc3ab39d4db900b0510ab44cb3  gcc/testsuite/c-c++-common/gomp/num-teams-2.c
! a5b411651a6f93c5cf3ce9b7c306c2e4  gcc/testsuite/c-c++-common/gomp/order-1.c
! e576d3919b1276ac29fcd10c2af0e650  gcc/testsuite/c-c++-common/gomp/order-2.c
  db900e16f622568df37b1e202fd25b9f  gcc/testsuite/c-c++-common/gomp/order-3.c
  2c96377fc6a30d8bf8d1cd396f082ca2  gcc/testsuite/c-c++-common/gomp/order-4.c
+ e8952d612b22320252f24d04beb2a8c4  gcc/testsuite/c-c++-common/gomp/order-5.c
+ 06c6eba3d88519d1f5d47f8bff4ee5bd  gcc/testsuite/c-c++-common/gomp/order-6.c
  346e1047ae41de5d851736fb41185adb  gcc/testsuite/c-c++-common/gomp/ordered-1.c
  ef86bb29dfbea0543e8ca02ce440c823  gcc/testsuite/c-c++-common/gomp/ordered-2.c
  c8eb196146424dae7866984b548de18b  gcc/testsuite/c-c++-common/gomp/ordered-3.c
*************** b3c3fe5a4ecc31231711cb240274d62c  gcc/te
*** 9928,9933 ****
--- 10176,10184 ----
  5d5843e74a197943e19c270c43a913e1  gcc/testsuite/c-c++-common/gomp/pr102431.c
  6c331d01569cfa98850571463b5b3cc7  gcc/testsuite/c-c++-common/gomp/pr102432.c
  ef8ec3320ae234be32fcdfc5379eaca2  gcc/testsuite/c-c++-common/gomp/pr102640.c
+ 1135dbe7e40a4ceef1023a659000a164  gcc/testsuite/c-c++-common/gomp/pr103642.c
+ 0e59133481fb703cb575967bddb0ce8e  gcc/testsuite/c-c++-common/gomp/pr103705.c
+ 0cff3c6576e6db18b71f25c5da8bcbb0  gcc/testsuite/c-c++-common/gomp/pr104968.c
  e16ef156ad193ef1f3cba60ad16e57ab  gcc/testsuite/c-c++-common/gomp/pr51360.c
  84c977571aeb43c0224137efe7f5b213  gcc/testsuite/c-c++-common/gomp/pr53580.c
  28bfd873981083756a16f70fdb0b86db  gcc/testsuite/c-c++-common/gomp/pr54017.c
*************** a083f5b1389e4638d7d2505608e6af0b  gcc/te
*** 9950,9958 ****
  83d8f65d36e02aa02588d7b997bdd269  gcc/testsuite/c-c++-common/gomp/pr60823-4.c
  1610228a9a46a0984cc32fd91d652f9f  gcc/testsuite/c-c++-common/gomp/pr61200.c
  5a77df631a4cbd5ca518a8d11dea1c5c  gcc/testsuite/c-c++-common/gomp/pr61486-1.c
! c27da319ecbe03bbb4e6920e22fc86c0  gcc/testsuite/c-c++-common/gomp/pr61486-2.c
  2b6ae32069c2763c6ff2b173604cf38c  gcc/testsuite/c-c++-common/gomp/pr63249.c
! 62348e7da5ae6308200d9dbbfa1c187e  gcc/testsuite/c-c++-common/gomp/pr63326.c
  f4fc237b3b36260e213984cfa4346314  gcc/testsuite/c-c++-common/gomp/pr63328.c
  30dce45d7575c95b65d5773d81737750  gcc/testsuite/c-c++-common/gomp/pr64769.c
  9847fa21aef2357ee2b4d8dcdb931ce8  gcc/testsuite/c-c++-common/gomp/pr66429.c
--- 10201,10209 ----
  83d8f65d36e02aa02588d7b997bdd269  gcc/testsuite/c-c++-common/gomp/pr60823-4.c
  1610228a9a46a0984cc32fd91d652f9f  gcc/testsuite/c-c++-common/gomp/pr61200.c
  5a77df631a4cbd5ca518a8d11dea1c5c  gcc/testsuite/c-c++-common/gomp/pr61486-1.c
! 28934043880a72198ba5007df167aaf6  gcc/testsuite/c-c++-common/gomp/pr61486-2.c
  2b6ae32069c2763c6ff2b173604cf38c  gcc/testsuite/c-c++-common/gomp/pr63249.c
! 301fa510c5c9466fd8fc36226349fc5e  gcc/testsuite/c-c++-common/gomp/pr63326.c
  f4fc237b3b36260e213984cfa4346314  gcc/testsuite/c-c++-common/gomp/pr63328.c
  30dce45d7575c95b65d5773d81737750  gcc/testsuite/c-c++-common/gomp/pr64769.c
  9847fa21aef2357ee2b4d8dcdb931ce8  gcc/testsuite/c-c++-common/gomp/pr66429.c
*************** ae2ea6f7d6a1c903e63c85894d80fa1f  gcc/te
*** 9999,10014 ****
  5f698bea3b17b89ee6b2d1f2c4d53245  gcc/testsuite/c-c++-common/gomp/pr98187.c
  ca8127e06402e403622dc86e29c1968a  gcc/testsuite/c-c++-common/gomp/pr99226.c
  c256c2058eeb3e746f5e3aa43e5ef703  gcc/testsuite/c-c++-common/gomp/pr99322.c
  5d522e2f1f7455bc45f6c1f230d5a5b0  gcc/testsuite/c-c++-common/gomp/priority-1.c
  a5ab254ee603749ef9330558229e6163  gcc/testsuite/c-c++-common/gomp/reduction-1.c
  857f55ab743945a521e3287d1b905b4b  gcc/testsuite/c-c++-common/gomp/reduction-task-1.c
! 040477a98707a5ccf3fe66c561644189  gcc/testsuite/c-c++-common/gomp/reduction-task-2.c
  6bfb4e8e6e1307990ff6a4535855f6b7  gcc/testsuite/c-c++-common/gomp/reduction-task-3.c
  510098e898a0bf706702fa24a48e71ac  gcc/testsuite/c-c++-common/gomp/requires-1.c
  402906410edb43bb1d0515698684f3a6  gcc/testsuite/c-c++-common/gomp/requires-2.c
! b69afb2466e8b2efa22ee4a458ff3bc2  gcc/testsuite/c-c++-common/gomp/requires-3.c
  7737b0ae3793f150650db4af4fdfa22d  gcc/testsuite/c-c++-common/gomp/requires-4.c
! 98d49db0122233c9a1c869817a9b3df8  gcc/testsuite/c-c++-common/gomp/scan-1.c
  3fb5b28574137ba1aa754466a8ea9a57  gcc/testsuite/c-c++-common/gomp/scan-2.c
  9f76c491a629f3bbd470f28c269ef485  gcc/testsuite/c-c++-common/gomp/scan-3.c
  640bcd6f5cf5af442783c7dc5ad52d3b  gcc/testsuite/c-c++-common/gomp/scan-4.c
--- 10250,10286 ----
  5f698bea3b17b89ee6b2d1f2c4d53245  gcc/testsuite/c-c++-common/gomp/pr98187.c
  ca8127e06402e403622dc86e29c1968a  gcc/testsuite/c-c++-common/gomp/pr99226.c
  c256c2058eeb3e746f5e3aa43e5ef703  gcc/testsuite/c-c++-common/gomp/pr99322.c
+ c1255515899e883bf101b8fe9669ddb2  gcc/testsuite/c-c++-common/gomp/pr99928-1.c
+ 70eb1900010f320f470971a222064987  gcc/testsuite/c-c++-common/gomp/pr99928-10.c
+ c5857956820c1e5a99f8582d85f4edfb  gcc/testsuite/c-c++-common/gomp/pr99928-11.c
+ ecc136fa73d3794c39f5db17e7e1bf89  gcc/testsuite/c-c++-common/gomp/pr99928-12.c
+ 86b220f458eae9523d2d9ffaea28bfde  gcc/testsuite/c-c++-common/gomp/pr99928-13.c
+ d2840e9245156eb839b5d29ba5d04813  gcc/testsuite/c-c++-common/gomp/pr99928-14.c
+ 0fe7c8f841c4d50dbdc412ced09bdc5f  gcc/testsuite/c-c++-common/gomp/pr99928-15.c
+ b0234431895813833f4cb4751ffcf698  gcc/testsuite/c-c++-common/gomp/pr99928-16.c
+ 01e5e6c358c1b2bda2f912c662479951  gcc/testsuite/c-c++-common/gomp/pr99928-2.c
+ 27c451c1baffe80971c04424e2db95ed  gcc/testsuite/c-c++-common/gomp/pr99928-3.c
+ 3a7443fce23b0e51df79d4de738fb3aa  gcc/testsuite/c-c++-common/gomp/pr99928-4.c
+ b08ed6597bae58dc36345d182457b284  gcc/testsuite/c-c++-common/gomp/pr99928-5.c
+ 8118a0357c6e9834a6d55e44534aa7e7  gcc/testsuite/c-c++-common/gomp/pr99928-6.c
+ edd476c7cf2235802faddcd9994b240a  gcc/testsuite/c-c++-common/gomp/pr99928-7.c
+ 40dfbce0df2820963a349d5fc46aa1bc  gcc/testsuite/c-c++-common/gomp/pr99928-8.c
+ bb6de6a22e5ed8a789047eb3e5ce9194  gcc/testsuite/c-c++-common/gomp/pr99928-9.c
+ 9163b15a47c5f6fdd167e356b13cc71d  gcc/testsuite/c-c++-common/gomp/pragma-1.c
+ ec917d1b32d82ceef9c2bdec8d8da20c  gcc/testsuite/c-c++-common/gomp/pragma-2.c
+ b6d91b877628af3986156ce77680cebb  gcc/testsuite/c-c++-common/gomp/pragma-3.c
+ f4385174b55a4a8fa770e9d647279749  gcc/testsuite/c-c++-common/gomp/pragma-4.c
+ dabd023bbc0a31348a44d9590d4e000d  gcc/testsuite/c-c++-common/gomp/pragma-5.c
  5d522e2f1f7455bc45f6c1f230d5a5b0  gcc/testsuite/c-c++-common/gomp/priority-1.c
  a5ab254ee603749ef9330558229e6163  gcc/testsuite/c-c++-common/gomp/reduction-1.c
  857f55ab743945a521e3287d1b905b4b  gcc/testsuite/c-c++-common/gomp/reduction-task-1.c
! 640bf7069a4c648fde61378b5eae80c8  gcc/testsuite/c-c++-common/gomp/reduction-task-2.c
  6bfb4e8e6e1307990ff6a4535855f6b7  gcc/testsuite/c-c++-common/gomp/reduction-task-3.c
  510098e898a0bf706702fa24a48e71ac  gcc/testsuite/c-c++-common/gomp/requires-1.c
  402906410edb43bb1d0515698684f3a6  gcc/testsuite/c-c++-common/gomp/requires-2.c
! f91ff40a21debb2c128ac02f5443f258  gcc/testsuite/c-c++-common/gomp/requires-3.c
  7737b0ae3793f150650db4af4fdfa22d  gcc/testsuite/c-c++-common/gomp/requires-4.c
! d2b914e7da7d449d03bc2fd5a17d4ac9  gcc/testsuite/c-c++-common/gomp/scan-1.c
  3fb5b28574137ba1aa754466a8ea9a57  gcc/testsuite/c-c++-common/gomp/scan-2.c
  9f76c491a629f3bbd470f28c269ef485  gcc/testsuite/c-c++-common/gomp/scan-3.c
  640bcd6f5cf5af442783c7dc5ad52d3b  gcc/testsuite/c-c++-common/gomp/scan-4.c
*************** e413f648ce33386781b2b3e3e93cb96b  gcc/te
*** 10017,10023 ****
  22fba04602b98c0a4fd88b5b47d5ffee  gcc/testsuite/c-c++-common/gomp/schedule-modifiers-1.c
  5924e1e32a4e62ad7e1324d01a4ed89e  gcc/testsuite/c-c++-common/gomp/schedule-modifiers-2.c
  0ec2e2f575568924dc191f53badc3e5d  gcc/testsuite/c-c++-common/gomp/schedule-simd-1.c
! 328147f679f9eac26be960bf85acb2e8  gcc/testsuite/c-c++-common/gomp/sections1.c
  a51768554ba67aa659d21bbab17ca919  gcc/testsuite/c-c++-common/gomp/simd-setjmp-1.c
  c7cb982e272572b3d42948b23c3c6229  gcc/testsuite/c-c++-common/gomp/simd1.c
  3ffb158d7db65691583ca6ff7330457a  gcc/testsuite/c-c++-common/gomp/simd2.c
--- 10289,10299 ----
  22fba04602b98c0a4fd88b5b47d5ffee  gcc/testsuite/c-c++-common/gomp/schedule-modifiers-1.c
  5924e1e32a4e62ad7e1324d01a4ed89e  gcc/testsuite/c-c++-common/gomp/schedule-modifiers-2.c
  0ec2e2f575568924dc191f53badc3e5d  gcc/testsuite/c-c++-common/gomp/schedule-simd-1.c
! 53548358c583f3560b346d6cccb7c834  gcc/testsuite/c-c++-common/gomp/scope-1.c
! 906c14d7b336cf66e0e4fa5638bc2dcd  gcc/testsuite/c-c++-common/gomp/scope-2.c
! 57efa71543dedf5dbf1920791f533a05  gcc/testsuite/c-c++-common/gomp/scope-3.c
! e04f56a00b201b68dca47f2c9ef16e14  gcc/testsuite/c-c++-common/gomp/scope-4.c
! c038583116ace59c25138e987e477f21  gcc/testsuite/c-c++-common/gomp/sections1.c
  a51768554ba67aa659d21bbab17ca919  gcc/testsuite/c-c++-common/gomp/simd-setjmp-1.c
  c7cb982e272572b3d42948b23c3c6229  gcc/testsuite/c-c++-common/gomp/simd1.c
  3ffb158d7db65691583ca6ff7330457a  gcc/testsuite/c-c++-common/gomp/simd2.c
*************** cbcc4bef361026a7cc530337842d4576  gcc/te
*** 10032,10038 ****
--- 10308,10329 ----
  1c82cae2e7ce3866f8094c1dd264cbae  gcc/testsuite/c-c++-common/gomp/sink-2.c
  5da781fbb8445e840fae91d1a209f84a  gcc/testsuite/c-c++-common/gomp/sink-3.c
  0c93f7b88c30539ace084df2f4c7f5ae  gcc/testsuite/c-c++-common/gomp/sink-4.c
+ c95f2cef3c7fd923368769c2f5efbc75  gcc/testsuite/c-c++-common/gomp/sink-5.c
  0f606c818aafa917b4e4ca06798a0500  gcc/testsuite/c-c++-common/gomp/target-data-1.c
+ cb81da252c32b67e25bcb9e0177c3269  gcc/testsuite/c-c++-common/gomp/target-device-1.c
+ 012d8a9c07dcebcd384c14829364ca84  gcc/testsuite/c-c++-common/gomp/target-device-2.c
+ a89d3bc336c39386e5c41b412c5cadf6  gcc/testsuite/c-c++-common/gomp/target-device-ancestor-1.c
+ 7c5a68ee5f5e2c289c91c9d137bf95ec  gcc/testsuite/c-c++-common/gomp/target-device-ancestor-2.c
+ e72899251887369d21a334bbc7002a40  gcc/testsuite/c-c++-common/gomp/target-device-ancestor-3.c
+ dcf2f1deac989725d6599354642db249  gcc/testsuite/c-c++-common/gomp/target-device-ancestor-4.c
+ 603f6027fbfbdbc9630eda8b61d659ee  gcc/testsuite/c-c++-common/gomp/target-enter-data-1.c
+ 5ffcda40553abef98cacdff0ec06eea2  gcc/testsuite/c-c++-common/gomp/target-has-device-addr-1.c
+ e5def8b0431262a97550aa7141a818a1  gcc/testsuite/c-c++-common/gomp/target-has-device-addr-2.c
+ d84886ef1e121f255fa075c6838ac885  gcc/testsuite/c-c++-common/gomp/target-implicit-map-1.c
+ a26fd1e6046be289a1c410feb9b08179  gcc/testsuite/c-c++-common/gomp/target-implicit-map-2.c
+ add511064b968c5d11ab265fa90ad3bc  gcc/testsuite/c-c++-common/gomp/target-in-reduction-1.c
+ 1a46b3c3357de4a3d24943d0266026f3  gcc/testsuite/c-c++-common/gomp/target-is-device-ptr-1.c
+ 2cfdfdc278ef7c85c5e2ad7e2f1e95be  gcc/testsuite/c-c++-common/gomp/target-is-device-ptr-2.c
  a8435825c61a8dc6ab7b5b8cda3dd35d  gcc/testsuite/c-c++-common/gomp/target-teams-1.c
  25d48772fc72e3c1f8e2192ec44ffb95  gcc/testsuite/c-c++-common/gomp/task-detach-1.c
  1bc40a217ad51b17433b0b59c1491757  gcc/testsuite/c-c++-common/gomp/task-detach-2.c
*************** bd7a4a612b8188086bf0650fb29a279a  gcc/te
*** 10041,10046 ****
--- 10332,10338 ----
  2308634fac41b5571bbc8ecf6a185772  gcc/testsuite/c-c++-common/gomp/taskwait-depend-1.c
  539c731e3f7fd40b1bf0432a8a02c04f  gcc/testsuite/c-c++-common/gomp/teams-1.c
  3020e821377ef557f546cba8a78f1192  gcc/testsuite/c-c++-common/gomp/teams-2.c
+ 3f5e45489b8b980cc7ab48dc63fd1c6d  gcc/testsuite/c-c++-common/gomp/teams-3.c
  5e0762ad9f0a708e2bb91ebe98e91915  gcc/testsuite/c-c++-common/gomp/udr-1.c
  ae581c139df3ad068476c3c0011b10df  gcc/testsuite/c-c++-common/guality/Og-dce-1.c
  77dfce37c98a7f3ba9475b987b487300  gcc/testsuite/c-c++-common/guality/Og-dce-2.c
*************** b0c7bf5988f0583459fa73ced65ee847  gcc/te
*** 10136,10148 ****
  8dc709a510615d4b7752427741282b37  gcc/testsuite/c-c++-common/patchable_function_entry-error-1.c
  80a177ccd304d62e86cb7f75375f0958  gcc/testsuite/c-c++-common/patchable_function_entry-error-2.c
  498ddd8ad30f33954c75dc8c4bb14a15  gcc/testsuite/c-c++-common/patchable_function_entry-error-3.c
! ae2fa528701d8a7118d0446869032faa  gcc/testsuite/c-c++-common/pr100785.c
  05e5f34e1a745d2204989ec4f256e3c7  gcc/testsuite/c-c++-common/pr101537.c
  3b77bbb422eaff74de51c6cd92512232  gcc/testsuite/c-c++-common/pr103881.c
  f7797890edb72db96871a3c3582464f4  gcc/testsuite/c-c++-common/pr105186.c
  f5dce8e27cfb8a6bfffe57596fecb796  gcc/testsuite/c-c++-common/pr19807-1.c
! 325d7c32f3748e10d55ba2faba3f1ce2  gcc/testsuite/c-c++-common/pr19807-2.c
! fb902cfe5a28251e99c554d18fb797e4  gcc/testsuite/c-c++-common/pr19807-3.c
  a369d890b3c8a2c5aefbfa5a42a6d9f8  gcc/testsuite/c-c++-common/pr20000.c
  84cc81e8de7fc76ea0c59bd53658e880  gcc/testsuite/c-c++-common/pr20318.c
  740052c7ac807a2f73312082a624ac77  gcc/testsuite/c-c++-common/pr27336.c
--- 10428,10443 ----
  8dc709a510615d4b7752427741282b37  gcc/testsuite/c-c++-common/patchable_function_entry-error-1.c
  80a177ccd304d62e86cb7f75375f0958  gcc/testsuite/c-c++-common/patchable_function_entry-error-2.c
  498ddd8ad30f33954c75dc8c4bb14a15  gcc/testsuite/c-c++-common/patchable_function_entry-error-3.c
! a6ce976933c82e0ff9cfe2bb28e85af5  gcc/testsuite/c-c++-common/pr100785.c
  05e5f34e1a745d2204989ec4f256e3c7  gcc/testsuite/c-c++-common/pr101537.c
+ 8709cca98d2978c94addb154e2c7ae32  gcc/testsuite/c-c++-common/pr102281.c
+ 24cfa37b3314f819eee358a0281492a7  gcc/testsuite/c-c++-common/pr102285.c
  3b77bbb422eaff74de51c6cd92512232  gcc/testsuite/c-c++-common/pr103881.c
+ 0ad1fe60770cce573f6337c8d24e0fe7  gcc/testsuite/c-c++-common/pr104505.c
  f7797890edb72db96871a3c3582464f4  gcc/testsuite/c-c++-common/pr105186.c
  f5dce8e27cfb8a6bfffe57596fecb796  gcc/testsuite/c-c++-common/pr19807-1.c
! 78a05c6e7d414ef4fd6f21dece4e9f21  gcc/testsuite/c-c++-common/pr19807-2.c
! 39c0873a2c1c7f951e8b2f90ebc9e12d  gcc/testsuite/c-c++-common/pr19807-3.c
  a369d890b3c8a2c5aefbfa5a42a6d9f8  gcc/testsuite/c-c++-common/pr20000.c
  84cc81e8de7fc76ea0c59bd53658e880  gcc/testsuite/c-c++-common/pr20318.c
  740052c7ac807a2f73312082a624ac77  gcc/testsuite/c-c++-common/pr27336.c
*************** e257567d3e45108aa92c38c2756f8082  gcc/te
*** 10223,10229 ****
  93039c44a01737b0dc6ca34eeea375fc  gcc/testsuite/c-c++-common/pr57371-1.c
  88910d91b58adeb8bf74efa42b6a6a9d  gcc/testsuite/c-c++-common/pr57371-2.c
  d7d4bbcfc6cb3a970e0d8d14ece542b8  gcc/testsuite/c-c++-common/pr57371-3.c
! fd2930d2b601be1780cecd8ea48e3c6d  gcc/testsuite/c-c++-common/pr57371-4.c
  d38efef14d0ab2c49efc359e81d86d1c  gcc/testsuite/c-c++-common/pr57653-2.c
  68b329da9893e34099c7d8ad5cb9c940  gcc/testsuite/c-c++-common/pr57653-2.h
  96f621870e8a9d49a5339944dcf7beca  gcc/testsuite/c-c++-common/pr57653.c
--- 10518,10524 ----
  93039c44a01737b0dc6ca34eeea375fc  gcc/testsuite/c-c++-common/pr57371-1.c
  88910d91b58adeb8bf74efa42b6a6a9d  gcc/testsuite/c-c++-common/pr57371-2.c
  d7d4bbcfc6cb3a970e0d8d14ece542b8  gcc/testsuite/c-c++-common/pr57371-3.c
! 076fa96d2edfc4f24e676b6a522f3d6f  gcc/testsuite/c-c++-common/pr57371-4.c
  d38efef14d0ab2c49efc359e81d86d1c  gcc/testsuite/c-c++-common/pr57653-2.c
  68b329da9893e34099c7d8ad5cb9c940  gcc/testsuite/c-c++-common/pr57653-2.h
  96f621870e8a9d49a5339944dcf7beca  gcc/testsuite/c-c++-common/pr57653.c
*************** ee387176acb2650d09f446c7722b79b9  gcc/te
*** 10306,10312 ****
  bebc31048be44ae555572a0e940ffae0  gcc/testsuite/c-c++-common/pr81376.c
  29c7ff6eb5caca1dd6391410ce6c69e4  gcc/testsuite/c-c++-common/pr82112.c
  49fab2d699364fd497a4ea99d034dd39  gcc/testsuite/c-c++-common/pr82872.c
! 331f0a8981efa3c9d46048548df29cb7  gcc/testsuite/c-c++-common/pr83059.c
  bd3f72430a07d0b5e231d78def646e60  gcc/testsuite/c-c++-common/pr84293.c
  0addab8483a2751fe42aeb39bb3e48eb  gcc/testsuite/c-c++-common/pr84293.h
  2d96e1440882ef4cd93d76271dcc4b77  gcc/testsuite/c-c++-common/pr84305.c
--- 10601,10607 ----
  bebc31048be44ae555572a0e940ffae0  gcc/testsuite/c-c++-common/pr81376.c
  29c7ff6eb5caca1dd6391410ce6c69e4  gcc/testsuite/c-c++-common/pr82112.c
  49fab2d699364fd497a4ea99d034dd39  gcc/testsuite/c-c++-common/pr82872.c
! e6ecc478ef1270f4bf6107978b83a557  gcc/testsuite/c-c++-common/pr83059.c
  bd3f72430a07d0b5e231d78def646e60  gcc/testsuite/c-c++-common/pr84293.c
  0addab8483a2751fe42aeb39bb3e48eb  gcc/testsuite/c-c++-common/pr84293.h
  2d96e1440882ef4cd93d76271dcc4b77  gcc/testsuite/c-c++-common/pr84305.c
*************** ea258fcc065ffda90982abc5cfd1d059  gcc/te
*** 10404,10410 ****
  44e124b6efbd861ac0aa2c9196131cd3  gcc/testsuite/c-c++-common/sizeof-array-argument.c
  3b6b1021a97b044fd6f4d5e187425192  gcc/testsuite/c-c++-common/spec-barrier-1.c
  80f293e41667e8b36f21d7e67a6c70b0  gcc/testsuite/c-c++-common/spec-barrier-2.c
! 559b16a4a85f21eeaaa2e75ac7769f51  gcc/testsuite/c-c++-common/spellcheck-reserved.c
  3904c1e06218e5b72020662cd962cf18  gcc/testsuite/c-c++-common/substring-location-PR-87562-1-a.h
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/c-c++-common/substring-location-PR-87562-1-b.h
  f963895d994b62510e687873776b4ef0  gcc/testsuite/c-c++-common/substring-location-PR-87562-1.c
--- 10699,10705 ----
  44e124b6efbd861ac0aa2c9196131cd3  gcc/testsuite/c-c++-common/sizeof-array-argument.c
  3b6b1021a97b044fd6f4d5e187425192  gcc/testsuite/c-c++-common/spec-barrier-1.c
  80f293e41667e8b36f21d7e67a6c70b0  gcc/testsuite/c-c++-common/spec-barrier-2.c
! 403164cc4cec42d9f5f11f736590d5da  gcc/testsuite/c-c++-common/spellcheck-reserved.c
  3904c1e06218e5b72020662cd962cf18  gcc/testsuite/c-c++-common/substring-location-PR-87562-1-a.h
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/c-c++-common/substring-location-PR-87562-1-b.h
  f963895d994b62510e687873776b4ef0  gcc/testsuite/c-c++-common/substring-location-PR-87562-1.c
*************** a4ea85477797866805ea1b7ba50ac38a  gcc/te
*** 10421,10427 ****
  760b86f9f2b8020d24fb1a3ddc47561e  gcc/testsuite/c-c++-common/tm/cancel-1.c
  24ff23ed7aec69e78f509593b0501e85  gcc/testsuite/c-c++-common/tm/freq.c
  f8244e4647992e9a0345e21a44b31fc3  gcc/testsuite/c-c++-common/tm/inline-asm-2.c
! bd39372523b64e552803d182ebbe5f26  gcc/testsuite/c-c++-common/tm/inline-asm.c
  08d397d9c83e4bef2fecf1ac0e08c4b5  gcc/testsuite/c-c++-common/tm/ipa-1.c
  2ba8b54a665f15db63ba7de21e65fcdb  gcc/testsuite/c-c++-common/tm/malloc.c
  eeedc4e342124b573cee07ce3df192b7  gcc/testsuite/c-c++-common/tm/memcpy-1.c
--- 10716,10722 ----
  760b86f9f2b8020d24fb1a3ddc47561e  gcc/testsuite/c-c++-common/tm/cancel-1.c
  24ff23ed7aec69e78f509593b0501e85  gcc/testsuite/c-c++-common/tm/freq.c
  f8244e4647992e9a0345e21a44b31fc3  gcc/testsuite/c-c++-common/tm/inline-asm-2.c
! b69c93424ff2674cf70689a92c46c0d3  gcc/testsuite/c-c++-common/tm/inline-asm.c
  08d397d9c83e4bef2fecf1ac0e08c4b5  gcc/testsuite/c-c++-common/tm/ipa-1.c
  2ba8b54a665f15db63ba7de21e65fcdb  gcc/testsuite/c-c++-common/tm/malloc.c
  eeedc4e342124b573cee07ce3df192b7  gcc/testsuite/c-c++-common/tm/memcpy-1.c
*************** e6b8806ad0c5451ea3a2026279567203  gcc/te
*** 10436,10441 ****
--- 10731,10737 ----
  5fd633620b57d8f9514eddc68014f07c  gcc/testsuite/c-c++-common/tm/trxn-expr.c
  0be2a21ad8cc895096a63b0b41046768  gcc/testsuite/c-c++-common/tm/volatile-1.c
  7bca2da5972cb85245dd77174723b039  gcc/testsuite/c-c++-common/tm/wrap-1.c
+ 2a460af511669879d590f5b1a8e1fb2a  gcc/testsuite/c-c++-common/torture/20050113-1.c
  c1e50a7071b6999a8895b383c899231c  gcc/testsuite/c-c++-common/torture/aarch64-vect-lane-1.c
  e71883f492cebf8129478eb15f05b834  gcc/testsuite/c-c++-common/torture/aarch64-vect-lane-2.c
  a10b02fb3b2593b2641dfd572427f365  gcc/testsuite/c-c++-common/torture/asm-inline.c
*************** c0ced56aa092fbe05fcfb0400e4a7973  gcc/te
*** 10492,10500 ****
  80c6991dac30744cf52461dd3f956e72  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c
  dcfe45ba6f5d3cfc6a596ae589694b44  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c
  895fbc9bc655600ce8926f0324c028bf  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c
! 4ff8867bffb2428f7170faffc42f73a7  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c
  02ccc099dac6a69400f154fddb7c755d  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c
  e6519a905d51bc4a47ceea85c886d98b  gcc/testsuite/c-c++-common/torture/builtin-convertvector-1.c
  255588ac3834ead37b7f36c6b58cd61b  gcc/testsuite/c-c++-common/torture/complex-alias-1.c
  252f95ec0162dd10262e227d09b36737  gcc/testsuite/c-c++-common/torture/complex-sign-add.c
  2e42a65fc880e668586d3506db231d5b  gcc/testsuite/c-c++-common/torture/complex-sign-mixed-add.c
--- 10788,10800 ----
  80c6991dac30744cf52461dd3f956e72  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c
  dcfe45ba6f5d3cfc6a596ae589694b44  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c
  895fbc9bc655600ce8926f0324c028bf  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c
! ecf00277bf404ed30fb08d5a8347834e  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c
  02ccc099dac6a69400f154fddb7c755d  gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c
  e6519a905d51bc4a47ceea85c886d98b  gcc/testsuite/c-c++-common/torture/builtin-convertvector-1.c
+ 1152c43998c24654fd01c67b23e23932  gcc/testsuite/c-c++-common/torture/builtin-convertvector-2.c
+ 78be28e180d73a89ef820b89b8e47458  gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c
+ 6ff515d241bb7ad8a62b371230071c70  gcc/testsuite/c-c++-common/torture/builtin-shufflevector-2.c
+ bc76dceb7876987432ddd7a6c1908c45  gcc/testsuite/c-c++-common/torture/builtin-shufflevector-3.c
  255588ac3834ead37b7f36c6b58cd61b  gcc/testsuite/c-c++-common/torture/complex-alias-1.c
  252f95ec0162dd10262e227d09b36737  gcc/testsuite/c-c++-common/torture/complex-sign-add.c
  2e42a65fc880e668586d3506db231d5b  gcc/testsuite/c-c++-common/torture/complex-sign-mixed-add.c
*************** dd5142586e3d5b7dc7b3a0aec5196b3d  gcc/te
*** 10506,10511 ****
--- 10806,10813 ----
  6733790e29253b482618d3d7ca3d459b  gcc/testsuite/c-c++-common/torture/complex-sign-mul.c
  d61cc0116375f68235d4f54cec36629f  gcc/testsuite/c-c++-common/torture/complex-sign-sub.c
  4ae74720c58c8cbadc297c4a41a985fb  gcc/testsuite/c-c++-common/torture/complex-sign.h
+ 366a7441955bb442ec1e2f37e1cf766a  gcc/testsuite/c-c++-common/torture/harden-comp.c
+ 7a43079b53195516c0a573da0a3b9672  gcc/testsuite/c-c++-common/torture/harden-cond.c
  75b3c9a6df31ced0517c8cbc745ba01b  gcc/testsuite/c-c++-common/torture/pr101636.c
  72a2947bdd50352d6b0c1363882b7249  gcc/testsuite/c-c++-common/torture/pr104497.c
  9f1ae2fa915c5159ec134a1894ad5cf1  gcc/testsuite/c-c++-common/torture/pr42834.c
*************** a9f6c151f3dd058dabd6e497a903829e  gcc/te
*** 10552,10562 ****
  295940b5fce4f89dfc192e8f629a64bf  gcc/testsuite/c-c++-common/torture/vshuf-v8qi.c
  d5ae22105cc01bc1f879fa77bcd076ef  gcc/testsuite/c-c++-common/torture/vshuf-v8si.c
  c8736adfa514ce69214538a49b7c88b2  gcc/testsuite/c-c++-common/transparent-union-1.c
! 93595e9c3ce3c89baabdcecb5e24757c  gcc/testsuite/c-c++-common/tsan/atomic_stack.c
  721a0ccf47f8cf507b223f5ceb1c6e9d  gcc/testsuite/c-c++-common/tsan/bitfield_race.c
  6374856da2d117eb7fa13572b3bf6de0  gcc/testsuite/c-c++-common/tsan/fd_pipe_race.c
! da953592b5918925210396862fda7319  gcc/testsuite/c-c++-common/tsan/free_race.c
! 5578b49fb40ddbd6c66d77de07144fba  gcc/testsuite/c-c++-common/tsan/free_race2.c
  81d8d58ede80d173b1b472d5c0f3d9a2  gcc/testsuite/c-c++-common/tsan/func_entry_exit.c
  03862ec23df05c353f1addf0092e0d59  gcc/testsuite/c-c++-common/tsan/func_entry_exit_disabled.c
  5aaa89ef6ecd6d52e014a7dbe6bff4e9  gcc/testsuite/c-c++-common/tsan/inline.c
--- 10854,10864 ----
  295940b5fce4f89dfc192e8f629a64bf  gcc/testsuite/c-c++-common/torture/vshuf-v8qi.c
  d5ae22105cc01bc1f879fa77bcd076ef  gcc/testsuite/c-c++-common/torture/vshuf-v8si.c
  c8736adfa514ce69214538a49b7c88b2  gcc/testsuite/c-c++-common/transparent-union-1.c
! 537833552e0fb0813fd3d13a4c9b4507  gcc/testsuite/c-c++-common/tsan/atomic_stack.c
  721a0ccf47f8cf507b223f5ceb1c6e9d  gcc/testsuite/c-c++-common/tsan/bitfield_race.c
  6374856da2d117eb7fa13572b3bf6de0  gcc/testsuite/c-c++-common/tsan/fd_pipe_race.c
! 58141ef377d4a1f1a041004ddcb9b99f  gcc/testsuite/c-c++-common/tsan/free_race.c
! 53bf5d0c8e3346b11a90f50c519fceae  gcc/testsuite/c-c++-common/tsan/free_race2.c
  81d8d58ede80d173b1b472d5c0f3d9a2  gcc/testsuite/c-c++-common/tsan/func_entry_exit.c
  03862ec23df05c353f1addf0092e0d59  gcc/testsuite/c-c++-common/tsan/func_entry_exit_disabled.c
  5aaa89ef6ecd6d52e014a7dbe6bff4e9  gcc/testsuite/c-c++-common/tsan/inline.c
*************** ea241630b0a3aed6153f59337a91f543  gcc/te
*** 10619,10627 ****
  1b7d27b069201b0a663821b3643c112b  gcc/testsuite/c-c++-common/ubsan/const-expr-1.c
  967a19e8ebcf02886c03bde760bd29d2  gcc/testsuite/c-c++-common/ubsan/div-by-zero-1.c
  05b159dca2694a2a43f92aaf1e866b20  gcc/testsuite/c-c++-common/ubsan/div-by-zero-2.c
! e421ddf2d69b41e79c4238d86ca23e02  gcc/testsuite/c-c++-common/ubsan/div-by-zero-3.c
! 9b2ae70c831a456b9f440b2c9d1131a6  gcc/testsuite/c-c++-common/ubsan/div-by-zero-4.c
! 701ee447bdcb3bdd63f4e19e0aa275c7  gcc/testsuite/c-c++-common/ubsan/div-by-zero-5.c
  6f79bf0d7a915586511e6d16f808b12f  gcc/testsuite/c-c++-common/ubsan/div-by-zero-6.c
  d48169540b483892cb5aef4288256769  gcc/testsuite/c-c++-common/ubsan/div-by-zero-7.c
  8d9e9d9d9f81061daf513b5ba1554c80  gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-1.c
--- 10921,10929 ----
  1b7d27b069201b0a663821b3643c112b  gcc/testsuite/c-c++-common/ubsan/const-expr-1.c
  967a19e8ebcf02886c03bde760bd29d2  gcc/testsuite/c-c++-common/ubsan/div-by-zero-1.c
  05b159dca2694a2a43f92aaf1e866b20  gcc/testsuite/c-c++-common/ubsan/div-by-zero-2.c
! d6fc9631c4badbefecdf01c3cfb3fca2  gcc/testsuite/c-c++-common/ubsan/div-by-zero-3.c
! 4372be80c58bbb5fcfb5d1250711092a  gcc/testsuite/c-c++-common/ubsan/div-by-zero-4.c
! 1ee93f444bdc1eb257c409781bbb44fb  gcc/testsuite/c-c++-common/ubsan/div-by-zero-5.c
  6f79bf0d7a915586511e6d16f808b12f  gcc/testsuite/c-c++-common/ubsan/div-by-zero-6.c
  d48169540b483892cb5aef4288256769  gcc/testsuite/c-c++-common/ubsan/div-by-zero-7.c
  8d9e9d9d9f81061daf513b5ba1554c80  gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-1.c
*************** fe38964f8532802a42fe779509f4d1a6  gcc/te
*** 10681,10686 ****
--- 10983,10991 ----
  a4b098303ece4486995742ff29ccdd05  gcc/testsuite/c-c++-common/ubsan/overflow-add-3.c
  c52181a20cd068403270fa30cac1a008  gcc/testsuite/c-c++-common/ubsan/overflow-add-4.c
  ae090ae431e425fca22fede2f8f4c79d  gcc/testsuite/c-c++-common/ubsan/overflow-add-5.c
+ 6de08ea7f09b2090039a215c83d0f880  gcc/testsuite/c-c++-common/ubsan/overflow-div-1.c
+ 9ee33ba7d3a8f6a2c2a43b96a23ec111  gcc/testsuite/c-c++-common/ubsan/overflow-div-2.c
+ 24b73c7f8929eba72f4f65b291e74dac  gcc/testsuite/c-c++-common/ubsan/overflow-div-3.c
  1b3f4241791b3db20b24323c80a24d25  gcc/testsuite/c-c++-common/ubsan/overflow-int128.c
  d66651cbf901e6206e6d2ce5a7adb0eb  gcc/testsuite/c-c++-common/ubsan/overflow-mul-1.c
  e51cf27d2d19a5058aebe25dc3bf614b  gcc/testsuite/c-c++-common/ubsan/overflow-mul-2.c
*************** e51cf27d2d19a5058aebe25dc3bf614b  gcc/te
*** 10688,10698 ****
  dbe71690dd793ddf3ef2e0bf6b784c9d  gcc/testsuite/c-c++-common/ubsan/overflow-mul-4.c
  8f45c5d65ff4a40cc4e2dcf3245dfea9  gcc/testsuite/c-c++-common/ubsan/overflow-negate-1.c
  e26e9729e8705bf53b7e72d2234a1460  gcc/testsuite/c-c++-common/ubsan/overflow-negate-2.c
! f5a7d303164048f0b25d898120f096bf  gcc/testsuite/c-c++-common/ubsan/overflow-negate-3.c
  bfb38cda4e974fdf0572322fe35e3a46  gcc/testsuite/c-c++-common/ubsan/overflow-sub-1.c
  e38a861012a1449b45bab897d23db346  gcc/testsuite/c-c++-common/ubsan/overflow-sub-2.c
  07bd365729762ed921bb1e56769ec361  gcc/testsuite/c-c++-common/ubsan/overflow-sub-3.c
! 3fdfb7b541ab32d9386d01e5297559fe  gcc/testsuite/c-c++-common/ubsan/overflow-sub-4.c
  a419ef4838cde6817792405820466636  gcc/testsuite/c-c++-common/ubsan/overflow-vec-1.c
  2ca43a119b7a576e216390fb43e1dd13  gcc/testsuite/c-c++-common/ubsan/overflow-vec-2.c
  52e44aba0bf4e0682451881391dfc23a  gcc/testsuite/c-c++-common/ubsan/pr56917.c
--- 10993,11003 ----
  dbe71690dd793ddf3ef2e0bf6b784c9d  gcc/testsuite/c-c++-common/ubsan/overflow-mul-4.c
  8f45c5d65ff4a40cc4e2dcf3245dfea9  gcc/testsuite/c-c++-common/ubsan/overflow-negate-1.c
  e26e9729e8705bf53b7e72d2234a1460  gcc/testsuite/c-c++-common/ubsan/overflow-negate-2.c
! 6159e4e6ea3fdafa8a02fe58b92dd3a9  gcc/testsuite/c-c++-common/ubsan/overflow-negate-3.c
  bfb38cda4e974fdf0572322fe35e3a46  gcc/testsuite/c-c++-common/ubsan/overflow-sub-1.c
  e38a861012a1449b45bab897d23db346  gcc/testsuite/c-c++-common/ubsan/overflow-sub-2.c
  07bd365729762ed921bb1e56769ec361  gcc/testsuite/c-c++-common/ubsan/overflow-sub-3.c
! f5c3f8c802beee48f514efd82c71f586  gcc/testsuite/c-c++-common/ubsan/overflow-sub-4.c
  a419ef4838cde6817792405820466636  gcc/testsuite/c-c++-common/ubsan/overflow-vec-1.c
  2ca43a119b7a576e216390fb43e1dd13  gcc/testsuite/c-c++-common/ubsan/overflow-vec-2.c
  52e44aba0bf4e0682451881391dfc23a  gcc/testsuite/c-c++-common/ubsan/pr56917.c
*************** c36d540bb12d6ab7f9bd3ae9a8a49d0d  gcc/te
*** 10797,10803 ****
  569ad8bee400ed51ff51ba8905941a80  gcc/testsuite/c-c++-common/ubsan/vla-2.c
  e3a7ad4931c8f5cf4f9d6390c12df575  gcc/testsuite/c-c++-common/ubsan/vla-3.c
  9330b358b2885db0f1bed7db562371e4  gcc/testsuite/c-c++-common/ubsan/vla-4.c
! aedb5db2e026da28759d460ba1161a37  gcc/testsuite/c-c++-common/uninit-17.c
  c326a73ef95aa3122b48330894c55bc2  gcc/testsuite/c-c++-common/uninit-D-O0.c
  ab24bda566bd8141b638ddfb37e53301  gcc/testsuite/c-c++-common/uninit-D.c
  c2855c4483fc57b2f236dfe4faba8d41  gcc/testsuite/c-c++-common/uninit-E-O0.c
--- 11102,11108 ----
  569ad8bee400ed51ff51ba8905941a80  gcc/testsuite/c-c++-common/ubsan/vla-2.c
  e3a7ad4931c8f5cf4f9d6390c12df575  gcc/testsuite/c-c++-common/ubsan/vla-3.c
  9330b358b2885db0f1bed7db562371e4  gcc/testsuite/c-c++-common/ubsan/vla-4.c
! 61cb158dd1c1e7bb459fdb709fbeccc7  gcc/testsuite/c-c++-common/uninit-17.c
  c326a73ef95aa3122b48330894c55bc2  gcc/testsuite/c-c++-common/uninit-D-O0.c
  ab24bda566bd8141b638ddfb37e53301  gcc/testsuite/c-c++-common/uninit-D.c
  c2855c4483fc57b2f236dfe4faba8d41  gcc/testsuite/c-c++-common/uninit-E-O0.c
*************** f05c0689692cbede80befe82de25dc21  gcc/te
*** 10841,10858 ****
  f692b95d21d9a595194cabd09b94759b  gcc/testsuite/c-c++-common/warn-ommitted-condop.c
  4047fbaa76a1a5d41ea12f6f27df3243  gcc/testsuite/c-c++-common/wdate-time.c
  462e99e9925256ef00efecd3c8c8e56f  gcc/testsuite/c-c++-common/zero-scratch-regs-1.c
! 5713b2f199152f92e0018937d9b04af8  gcc/testsuite/c-c++-common/zero-scratch-regs-10.c
! bd70f9cf65ebd1e8dceff746c5d08cef  gcc/testsuite/c-c++-common/zero-scratch-regs-11.c
  3de299c55b18f023da96edc5affac7da  gcc/testsuite/c-c++-common/zero-scratch-regs-2.c
  36143f3f7a466e6b774a0b1bca02855b  gcc/testsuite/c-c++-common/zero-scratch-regs-3.c
  391b6f6417f516fef26bc8122a465851  gcc/testsuite/c-c++-common/zero-scratch-regs-4.c
  a1f90abfa586e9a650f276b2c91c9ad4  gcc/testsuite/c-c++-common/zero-scratch-regs-5.c
  c77f02020cbcf85af6784093386ef648  gcc/testsuite/c-c++-common/zero-scratch-regs-6.c
  906f617c4f95bbe9b519d54be2bd1cca  gcc/testsuite/c-c++-common/zero-scratch-regs-7.c
! 4d515b2db504947e3c4dbc5f6f03c6f0  gcc/testsuite/c-c++-common/zero-scratch-regs-8.c
! b1407379483166171545ff9c4b51ce2d  gcc/testsuite/c-c++-common/zero-scratch-regs-9.c
  5e947ff19698fccb8ffb7ac65277ba5b  gcc/testsuite/c-c++-common/zero-scratch-regs-attr-usages.c
! c09261c9c970d0efd82b97e108d21821  gcc/testsuite/config/default.exp
  8024a8d05ac43431e4b1302cfb4f3a39  gcc/testsuite/g++.dg/20090107-1.C
  1c4ef3fc928b689d06e4e43bd7b1118c  gcc/testsuite/g++.dg/20090121-1.C
  34c8e7d537bafbaafc64457157d9941d  gcc/testsuite/g++.dg/DRs/dr1207-1.C
--- 11146,11163 ----
  f692b95d21d9a595194cabd09b94759b  gcc/testsuite/c-c++-common/warn-ommitted-condop.c
  4047fbaa76a1a5d41ea12f6f27df3243  gcc/testsuite/c-c++-common/wdate-time.c
  462e99e9925256ef00efecd3c8c8e56f  gcc/testsuite/c-c++-common/zero-scratch-regs-1.c
! 8af1c320c235a122f86d053c0e4954d8  gcc/testsuite/c-c++-common/zero-scratch-regs-10.c
! 957658185ce13ddbc20ec4becfe9b993  gcc/testsuite/c-c++-common/zero-scratch-regs-11.c
  3de299c55b18f023da96edc5affac7da  gcc/testsuite/c-c++-common/zero-scratch-regs-2.c
  36143f3f7a466e6b774a0b1bca02855b  gcc/testsuite/c-c++-common/zero-scratch-regs-3.c
  391b6f6417f516fef26bc8122a465851  gcc/testsuite/c-c++-common/zero-scratch-regs-4.c
  a1f90abfa586e9a650f276b2c91c9ad4  gcc/testsuite/c-c++-common/zero-scratch-regs-5.c
  c77f02020cbcf85af6784093386ef648  gcc/testsuite/c-c++-common/zero-scratch-regs-6.c
  906f617c4f95bbe9b519d54be2bd1cca  gcc/testsuite/c-c++-common/zero-scratch-regs-7.c
! 552993960fde37faa6d8b69da5b5bb33  gcc/testsuite/c-c++-common/zero-scratch-regs-8.c
! c58be55f0f9b42d63e15276d36dbd399  gcc/testsuite/c-c++-common/zero-scratch-regs-9.c
  5e947ff19698fccb8ffb7ac65277ba5b  gcc/testsuite/c-c++-common/zero-scratch-regs-attr-usages.c
! c4851ec972cdff448a2dcb82ec1d0ad8  gcc/testsuite/config/default.exp
  8024a8d05ac43431e4b1302cfb4f3a39  gcc/testsuite/g++.dg/20090107-1.C
  1c4ef3fc928b689d06e4e43bd7b1118c  gcc/testsuite/g++.dg/20090121-1.C
  34c8e7d537bafbaafc64457157d9941d  gcc/testsuite/g++.dg/DRs/dr1207-1.C
*************** c34c077c14a731c1e76b55760a45595e  gcc/te
*** 10869,10876 ****
  3f7c4c9040359275e31ad38de5ffd272  gcc/testsuite/g++.dg/DRs/dr2237.C
  33ccffb334dd7be92e0462b76cdef639  gcc/testsuite/g++.dg/DRs/dr2303.C
  7a4b27e45b2c85a34faf94f75f8945d1  gcc/testsuite/g++.dg/DRs/dr625.C
! 6658ee600f846603866a6df5792ccb86  gcc/testsuite/g++.dg/README
  c2db197c9d51ba75cb2475afeb61f7a3  gcc/testsuite/g++.dg/Walloca1.C
  a41465f245515983bde6bb1167545c97  gcc/testsuite/g++.dg/Wattributes-2.C
  855737fcfec2beb103a1b9c7c6e31f1c  gcc/testsuite/g++.dg/Wattributes-3.C
  6eca350a065a90ffa5fe1016ff56b35b  gcc/testsuite/g++.dg/Wattributes-4.C
--- 11174,11182 ----
  3f7c4c9040359275e31ad38de5ffd272  gcc/testsuite/g++.dg/DRs/dr2237.C
  33ccffb334dd7be92e0462b76cdef639  gcc/testsuite/g++.dg/DRs/dr2303.C
  7a4b27e45b2c85a34faf94f75f8945d1  gcc/testsuite/g++.dg/DRs/dr625.C
! f7d57eb62850eb6e0942fff976ade0db  gcc/testsuite/g++.dg/README
  c2db197c9d51ba75cb2475afeb61f7a3  gcc/testsuite/g++.dg/Walloca1.C
+ 320b5b68437c4d4f5168230d3d881f16  gcc/testsuite/g++.dg/Walloca2.C
  a41465f245515983bde6bb1167545c97  gcc/testsuite/g++.dg/Wattributes-2.C
  855737fcfec2beb103a1b9c7c6e31f1c  gcc/testsuite/g++.dg/Wattributes-3.C
  6eca350a065a90ffa5fe1016ff56b35b  gcc/testsuite/g++.dg/Wattributes-4.C
*************** cd93919c065004ea490003c672cd7104  gcc/te
*** 10901,10911 ****
  ff8a45946e2084ced45599c7eec2938e  gcc/testsuite/g++.dg/abi/abi-tag13.C
  d5f2ec3f68f58a172b795a7f5deae99f  gcc/testsuite/g++.dg/abi/abi-tag14.C
  245aef31a343de9e715f99683f6d1ead  gcc/testsuite/g++.dg/abi/abi-tag15.C
! 26733022710d5bb032d5d2eb72f1896d  gcc/testsuite/g++.dg/abi/abi-tag16.C
  d6a3dec90d15ab2e54cbca93322da7ed  gcc/testsuite/g++.dg/abi/abi-tag16a.C
  585a58c93973b99a7cd1f0eb6cfce127  gcc/testsuite/g++.dg/abi/abi-tag17.C
  1f631f103e18b0ae6b6b4b7825a48b7a  gcc/testsuite/g++.dg/abi/abi-tag18.C
! 5ad7bb9339265bac6040ade10c6115ea  gcc/testsuite/g++.dg/abi/abi-tag18a.C
  403b13e4e8f4f1a53472f6656f4e9953  gcc/testsuite/g++.dg/abi/abi-tag19.C
  064eba36c22e1b67e37a8c95a5698520  gcc/testsuite/g++.dg/abi/abi-tag2.C
  f19a797248af01c5d5f5921e6516c19a  gcc/testsuite/g++.dg/abi/abi-tag20.C
--- 11207,11217 ----
  ff8a45946e2084ced45599c7eec2938e  gcc/testsuite/g++.dg/abi/abi-tag13.C
  d5f2ec3f68f58a172b795a7f5deae99f  gcc/testsuite/g++.dg/abi/abi-tag14.C
  245aef31a343de9e715f99683f6d1ead  gcc/testsuite/g++.dg/abi/abi-tag15.C
! 32dbca607fafb85c9f29519a8def8a99  gcc/testsuite/g++.dg/abi/abi-tag16.C
  d6a3dec90d15ab2e54cbca93322da7ed  gcc/testsuite/g++.dg/abi/abi-tag16a.C
  585a58c93973b99a7cd1f0eb6cfce127  gcc/testsuite/g++.dg/abi/abi-tag17.C
  1f631f103e18b0ae6b6b4b7825a48b7a  gcc/testsuite/g++.dg/abi/abi-tag18.C
! e3c413bf3ccfabd14c4ac28d8ad5b7bd  gcc/testsuite/g++.dg/abi/abi-tag18a.C
  403b13e4e8f4f1a53472f6656f4e9953  gcc/testsuite/g++.dg/abi/abi-tag19.C
  064eba36c22e1b67e37a8c95a5698520  gcc/testsuite/g++.dg/abi/abi-tag2.C
  f19a797248af01c5d5f5921e6516c19a  gcc/testsuite/g++.dg/abi/abi-tag20.C
*************** f3ab2d1f8d99db36cb9e2cd278c1f937  gcc/te
*** 11011,11017 ****
  81d54a8ce0f88af87b94623f3b24e0b5  gcc/testsuite/g++.dg/abi/guard1.C
  af2f348dc394b09edc0540c3c0e13115  gcc/testsuite/g++.dg/abi/guard2.C
  aeaf70ac2113165664ca8c8208320777  gcc/testsuite/g++.dg/abi/guard3.C
! 30c2238f695a2b333dea47d996d50abc  gcc/testsuite/g++.dg/abi/guard4.C
  111786b8402b8dd840adfb9a53cf3aac  gcc/testsuite/g++.dg/abi/inline1.C
  0da487653363b2d57b4be53f3c1e584f  gcc/testsuite/g++.dg/abi/invisiref1.C
  f567a6076697b72a2d4da2d5f3d44e24  gcc/testsuite/g++.dg/abi/invisiref1a.C
--- 11317,11323 ----
  81d54a8ce0f88af87b94623f3b24e0b5  gcc/testsuite/g++.dg/abi/guard1.C
  af2f348dc394b09edc0540c3c0e13115  gcc/testsuite/g++.dg/abi/guard2.C
  aeaf70ac2113165664ca8c8208320777  gcc/testsuite/g++.dg/abi/guard3.C
! ec13c627edd2714b96e84d230a7a1133  gcc/testsuite/g++.dg/abi/guard4.C
  111786b8402b8dd840adfb9a53cf3aac  gcc/testsuite/g++.dg/abi/inline1.C
  0da487653363b2d57b4be53f3c1e584f  gcc/testsuite/g++.dg/abi/invisiref1.C
  f567a6076697b72a2d4da2d5f3d44e24  gcc/testsuite/g++.dg/abi/invisiref1a.C
*************** afcddf1b30dc19c258215591ad57145a  gcc/te
*** 11020,11026 ****
  7b495c695618e4f19335c4fb222ac39e  gcc/testsuite/g++.dg/abi/key1.C
  bb31b4837b79e765fedbacaa8bb430d3  gcc/testsuite/g++.dg/abi/key2.C
  d06c8255efe2bb66e4bb6606d9fb8b0c  gcc/testsuite/g++.dg/abi/lambda-capture1.C
! ab6dac1a25f6d8fc7ccddc228d1d80f2  gcc/testsuite/g++.dg/abi/lambda-defarg1.C
  2c4486b0b97a7d8919b8fffad18a0478  gcc/testsuite/g++.dg/abi/lambda-static-1.C
  75bbddd165a101e33a88857c65eb383d  gcc/testsuite/g++.dg/abi/lambda-vis.C
  44d0f298ab4a8fb8dcb8f4930bac5fd0  gcc/testsuite/g++.dg/abi/layout1.C
--- 11326,11332 ----
  7b495c695618e4f19335c4fb222ac39e  gcc/testsuite/g++.dg/abi/key1.C
  bb31b4837b79e765fedbacaa8bb430d3  gcc/testsuite/g++.dg/abi/key2.C
  d06c8255efe2bb66e4bb6606d9fb8b0c  gcc/testsuite/g++.dg/abi/lambda-capture1.C
! debb971cc045e8ae567ecab94e5e9b5e  gcc/testsuite/g++.dg/abi/lambda-defarg1.C
  2c4486b0b97a7d8919b8fffad18a0478  gcc/testsuite/g++.dg/abi/lambda-static-1.C
  75bbddd165a101e33a88857c65eb383d  gcc/testsuite/g++.dg/abi/lambda-vis.C
  44d0f298ab4a8fb8dcb8f4930bac5fd0  gcc/testsuite/g++.dg/abi/layout1.C
*************** ab6dac1a25f6d8fc7ccddc228d1d80f2  gcc/te
*** 11029,11035 ****
  1b56fef803fe85ec97121919ad3ba2b9  gcc/testsuite/g++.dg/abi/local1-a.cc
  4ab5160617737559c38e1ffb650b797e  gcc/testsuite/g++.dg/abi/local1.C
  34ecb36205a7c22314ddda92d332a23d  gcc/testsuite/g++.dg/abi/local2.C
! 8f9b1dad971382994a3f762d4995d31b  gcc/testsuite/g++.dg/abi/macro0.C
  06f0193b05c4ae743af4e38aec8d1122  gcc/testsuite/g++.dg/abi/macro2.C
  5a637c99e4aa66fa130b6c1d893fc41e  gcc/testsuite/g++.dg/abi/main.C
  ad6491d281aef40e7e1cf7d856f2aa05  gcc/testsuite/g++.dg/abi/mangle-arm-crypto.C
--- 11335,11341 ----
  1b56fef803fe85ec97121919ad3ba2b9  gcc/testsuite/g++.dg/abi/local1-a.cc
  4ab5160617737559c38e1ffb650b797e  gcc/testsuite/g++.dg/abi/local1.C
  34ecb36205a7c22314ddda92d332a23d  gcc/testsuite/g++.dg/abi/local2.C
! dc9c8e9f43551f66bdfdbf9bc00296bc  gcc/testsuite/g++.dg/abi/macro0.C
  06f0193b05c4ae743af4e38aec8d1122  gcc/testsuite/g++.dg/abi/macro2.C
  5a637c99e4aa66fa130b6c1d893fc41e  gcc/testsuite/g++.dg/abi/main.C
  ad6491d281aef40e7e1cf7d856f2aa05  gcc/testsuite/g++.dg/abi/mangle-arm-crypto.C
*************** f27a51ea9de5c032fc80016778dbe5ec  gcc/te
*** 11052,11058 ****
  e9b6e0cbb0fdfc7c2d759709e120ac89  gcc/testsuite/g++.dg/abi/mangle23.C
  af8a23e436afd93b61c9bc9551fac99b  gcc/testsuite/g++.dg/abi/mangle24.C
  ae04b64f75744d4e08d314ffccafb713  gcc/testsuite/g++.dg/abi/mangle25.C
! 39be8be8221e8bfcf3cf9fad019a3ed1  gcc/testsuite/g++.dg/abi/mangle26.C
  044232763276597f7d67befd1bd50a9d  gcc/testsuite/g++.dg/abi/mangle27.C
  8a0d615dc9ec8202a830aeb08e5dcb92  gcc/testsuite/g++.dg/abi/mangle28.C
  2c430e967d278da976c5ea2d63efd9c4  gcc/testsuite/g++.dg/abi/mangle29.C
--- 11358,11364 ----
  e9b6e0cbb0fdfc7c2d759709e120ac89  gcc/testsuite/g++.dg/abi/mangle23.C
  af8a23e436afd93b61c9bc9551fac99b  gcc/testsuite/g++.dg/abi/mangle24.C
  ae04b64f75744d4e08d314ffccafb713  gcc/testsuite/g++.dg/abi/mangle25.C
! 7c0a630f01c6b4192282f75ecd27b5eb  gcc/testsuite/g++.dg/abi/mangle26.C
  044232763276597f7d67befd1bd50a9d  gcc/testsuite/g++.dg/abi/mangle27.C
  8a0d615dc9ec8202a830aeb08e5dcb92  gcc/testsuite/g++.dg/abi/mangle28.C
  2c430e967d278da976c5ea2d63efd9c4  gcc/testsuite/g++.dg/abi/mangle29.C
*************** cc6afae4c242d6e5a9083cec1a9a9907  gcc/te
*** 11114,11125 ****
  d85264fae2b4c2eb4d8629cb29c42e90  gcc/testsuite/g++.dg/abi/no-linkage-expr1.C
  0cccf158230e7bf1d438169164c8020a  gcc/testsuite/g++.dg/abi/no-weak1.C
  d225468019d278bd912122141926f160  gcc/testsuite/g++.dg/abi/no_unique_address1.C
! 48b909710ca07ab5943cb42b0c394835  gcc/testsuite/g++.dg/abi/no_unique_address2.C
  523016c45428d79c5e295b5455d62e97  gcc/testsuite/g++.dg/abi/no_unique_address3.C
  9299f9aa3143d1b7ad21248a7b6baa50  gcc/testsuite/g++.dg/abi/no_unique_address4.C
  2e75f55031268b8e445a244515ca63f0  gcc/testsuite/g++.dg/abi/no_unique_address5.C
  6d86ff25fe0e7bc030ff238bd833862a  gcc/testsuite/g++.dg/abi/noreturn1.C
  c57345fa3b5ca1a7540c77ee0ce25605  gcc/testsuite/g++.dg/abi/noreturn2.C
  39432d801ca8ec61309ef8049d99d222  gcc/testsuite/g++.dg/abi/nullptr-align.C
  40aa8920043c7a566e640f5317c18f1f  gcc/testsuite/g++.dg/abi/nullptr-align2.C
  f56cfc930682b0322a618b55658899d7  gcc/testsuite/g++.dg/abi/nvptx-nrv1.C
--- 11420,11434 ----
  d85264fae2b4c2eb4d8629cb29c42e90  gcc/testsuite/g++.dg/abi/no-linkage-expr1.C
  0cccf158230e7bf1d438169164c8020a  gcc/testsuite/g++.dg/abi/no-weak1.C
  d225468019d278bd912122141926f160  gcc/testsuite/g++.dg/abi/no_unique_address1.C
! dc946b2841ac32fc9fd34522264439b5  gcc/testsuite/g++.dg/abi/no_unique_address2.C
  523016c45428d79c5e295b5455d62e97  gcc/testsuite/g++.dg/abi/no_unique_address3.C
  9299f9aa3143d1b7ad21248a7b6baa50  gcc/testsuite/g++.dg/abi/no_unique_address4.C
  2e75f55031268b8e445a244515ca63f0  gcc/testsuite/g++.dg/abi/no_unique_address5.C
+ d974d143c86cea668485a435c71e0e98  gcc/testsuite/g++.dg/abi/no_unique_address6.C
  6d86ff25fe0e7bc030ff238bd833862a  gcc/testsuite/g++.dg/abi/noreturn1.C
  c57345fa3b5ca1a7540c77ee0ce25605  gcc/testsuite/g++.dg/abi/noreturn2.C
+ 6cfa463b31864926599a103492701f5e  gcc/testsuite/g++.dg/abi/nsdmi-aggr1.C
+ 4a1564d0fc5555f57e65545a60482540  gcc/testsuite/g++.dg/abi/nsdmi-aggr1a.C
  39432d801ca8ec61309ef8049d99d222  gcc/testsuite/g++.dg/abi/nullptr-align.C
  40aa8920043c7a566e640f5317c18f1f  gcc/testsuite/g++.dg/abi/nullptr-align2.C
  f56cfc930682b0322a618b55658899d7  gcc/testsuite/g++.dg/abi/nvptx-nrv1.C
*************** a3ef49aa5fa035e0eaa1fb23c589fe61  gcc/te
*** 11194,11200 ****
  6881f6a907aed22e3604db9a81d71753  gcc/testsuite/g++.dg/abi/vthunk3.C
  59cdef1c2f5ac26231205b723cb9ea52  gcc/testsuite/g++.dg/abi/vtt1.C
  cb66889e261971e64a6568617bffaeaa  gcc/testsuite/g++.dg/addr_builtin-1.C
! 2f5108ed5b6b9b8c5c8dc9bf131e306f  gcc/testsuite/g++.dg/analyzer/analyzer.exp
  0918dccee8951925f7bc4640874a6cd3  gcc/testsuite/g++.dg/analyzer/cstdlib-2.C
  b1051c81ee9929eae4057f7d1ce5ecd2  gcc/testsuite/g++.dg/analyzer/cstdlib.C
  7951a855cc080064bcfdf98631e39a2e  gcc/testsuite/g++.dg/analyzer/ctor-dtor-1.C
--- 11503,11509 ----
  6881f6a907aed22e3604db9a81d71753  gcc/testsuite/g++.dg/abi/vthunk3.C
  59cdef1c2f5ac26231205b723cb9ea52  gcc/testsuite/g++.dg/abi/vtt1.C
  cb66889e261971e64a6568617bffaeaa  gcc/testsuite/g++.dg/addr_builtin-1.C
! 3873c0eea694648531ae4b8683347ec2  gcc/testsuite/g++.dg/analyzer/analyzer.exp
  0918dccee8951925f7bc4640874a6cd3  gcc/testsuite/g++.dg/analyzer/cstdlib-2.C
  b1051c81ee9929eae4057f7d1ce5ecd2  gcc/testsuite/g++.dg/analyzer/cstdlib.C
  7951a855cc080064bcfdf98631e39a2e  gcc/testsuite/g++.dg/analyzer/ctor-dtor-1.C
*************** d1eaf073a251f60143e80284bc5a504c  gcc/te
*** 11202,11217 ****
  e618363917558f650a6b91cce53eb8d2  gcc/testsuite/g++.dg/analyzer/malloc.C
  7292fd874dc6a2a17f2f505c44add678  gcc/testsuite/g++.dg/analyzer/new-1.C
  bcda06f94e400d0e9992cb49d4db7fdb  gcc/testsuite/g++.dg/analyzer/new-vs-malloc.C
! 9fb91eb182c82d720a405a12d046d027  gcc/testsuite/g++.dg/analyzer/placement-new.C
! af55c476e637621aefc72d52051296d7  gcc/testsuite/g++.dg/analyzer/pr100244.C
! 337663ec28ba5178e5e5832bde31b266  gcc/testsuite/g++.dg/analyzer/pr93212.C
  6730f749b069d8ed2ba525a0ff83ad2c  gcc/testsuite/g++.dg/analyzer/pr93288.C
  c12e9b1c9d4173ff464e74ea78ab647e  gcc/testsuite/g++.dg/analyzer/pr93777.C
  a2fd899038ad8292f72a6822b197251e  gcc/testsuite/g++.dg/analyzer/pr93899.C
  eaa9774dd2e5983a606c09705cc0910d  gcc/testsuite/g++.dg/analyzer/pr93950.C
! 317062e91d10f97f58ad71d672140545  gcc/testsuite/g++.dg/analyzer/pr94011.C
  c90584aac63ae727d47d415aa0a5f85b  gcc/testsuite/g++.dg/analyzer/pr94028.C
! f7fda54a6437cce3dc8394b07cfb3eeb  gcc/testsuite/g++.dg/analyzer/pr94503.C
  52afe02bc242a0578da458c6b600f7a9  gcc/testsuite/g++.dg/analyzer/pr94816.C
  6509a360a1cfc8a35798c6570be50e53  gcc/testsuite/g++.dg/analyzer/pr95042.C
  1f1ca76966db742950e5c41205a0e5c5  gcc/testsuite/g++.dg/analyzer/pr96641.C
--- 11511,11528 ----
  e618363917558f650a6b91cce53eb8d2  gcc/testsuite/g++.dg/analyzer/malloc.C
  7292fd874dc6a2a17f2f505c44add678  gcc/testsuite/g++.dg/analyzer/new-1.C
  bcda06f94e400d0e9992cb49d4db7fdb  gcc/testsuite/g++.dg/analyzer/new-vs-malloc.C
! 39dffeb2dfa6a606367678b8e0c26ba4  gcc/testsuite/g++.dg/analyzer/placement-new.C
! 6ab96cda82abd2c6b9e8503cad810e6d  gcc/testsuite/g++.dg/analyzer/pr100244.C
! d4bc63615a492ebed26cfe6dcaccf3f8  gcc/testsuite/g++.dg/analyzer/pr101522.C
! f196621f1d8a0f8a5cd5899222a61f1b  gcc/testsuite/g++.dg/analyzer/pr102662.C
! db9f2a586decb860632833c22f0bc4d6  gcc/testsuite/g++.dg/analyzer/pr93212.C
  6730f749b069d8ed2ba525a0ff83ad2c  gcc/testsuite/g++.dg/analyzer/pr93288.C
  c12e9b1c9d4173ff464e74ea78ab647e  gcc/testsuite/g++.dg/analyzer/pr93777.C
  a2fd899038ad8292f72a6822b197251e  gcc/testsuite/g++.dg/analyzer/pr93899.C
  eaa9774dd2e5983a606c09705cc0910d  gcc/testsuite/g++.dg/analyzer/pr93950.C
! 8be1b2df9cb18eee82a4ec915b0dc6bd  gcc/testsuite/g++.dg/analyzer/pr94011.C
  c90584aac63ae727d47d415aa0a5f85b  gcc/testsuite/g++.dg/analyzer/pr94028.C
! a4e6ecf8eb5d90837d394182e0f66932  gcc/testsuite/g++.dg/analyzer/pr94503.C
  52afe02bc242a0578da458c6b600f7a9  gcc/testsuite/g++.dg/analyzer/pr94816.C
  6509a360a1cfc8a35798c6570be50e53  gcc/testsuite/g++.dg/analyzer/pr95042.C
  1f1ca76966db742950e5c41205a0e5c5  gcc/testsuite/g++.dg/analyzer/pr96641.C
*************** f7fda54a6437cce3dc8394b07cfb3eeb  gcc/te
*** 11222,11234 ****
  fd2e08e4f10e3ceec481fed9289f968c  gcc/testsuite/g++.dg/analyzer/pr97489.C
  db2b7f6c1be40cc086aa678eb7d66cad  gcc/testsuite/g++.dg/analyzer/pr99064.C
  b355f66bf32fab6d4e4348cbfdd707d2  gcc/testsuite/g++.dg/analyzer/vfunc-1.C
! 82fda82080a7cebe84e11c5479b8ec9c  gcc/testsuite/g++.dg/asan/asan.exp
  aaab0b483d6b43b9fb8facfcf01ac3b3  gcc/testsuite/g++.dg/asan/asan_globals_test-wrapper.cc
  58f1893fa192cc0429f68ba9628696b9  gcc/testsuite/g++.dg/asan/asan_globals_test.cc
  573f81866bae96b4c422317d9f9f630c  gcc/testsuite/g++.dg/asan/asan_mem_test.cc
  ae18505cf8bcf60c7595916e5c13ca68  gcc/testsuite/g++.dg/asan/asan_oob_test.cc
  a21e7d58f33bd86c0ccf7a0bac1f06bf  gcc/testsuite/g++.dg/asan/asan_str_test.cc
! b3ee475b9ac75657f5397ac26f2397ea  gcc/testsuite/g++.dg/asan/asan_test.C
  2c352907f3b51c80dddf49f6527d00d3  gcc/testsuite/g++.dg/asan/asan_test.cc
  7b5f694f7ad9cbae4aab558727eaceaf  gcc/testsuite/g++.dg/asan/asan_test_config.h
  a455db6e8dc9b02d6f2c59488f513896  gcc/testsuite/g++.dg/asan/asan_test_utils.h
--- 11533,11549 ----
  fd2e08e4f10e3ceec481fed9289f968c  gcc/testsuite/g++.dg/analyzer/pr97489.C
  db2b7f6c1be40cc086aa678eb7d66cad  gcc/testsuite/g++.dg/analyzer/pr99064.C
  b355f66bf32fab6d4e4348cbfdd707d2  gcc/testsuite/g++.dg/analyzer/vfunc-1.C
! 5eeefd70c9d4493cf685b8eca4313dd4  gcc/testsuite/g++.dg/analyzer/vfunc-2.C
! 13526f89c6948b95aef336c0a8d9d75c  gcc/testsuite/g++.dg/analyzer/vfunc-3.C
! 9b9a001e3dcd409dc5312ef55387e581  gcc/testsuite/g++.dg/analyzer/vfunc-4.C
! f211479ac4d0a91cf570369c53463c2d  gcc/testsuite/g++.dg/analyzer/vfunc-5.C
! 8790fab05b558c71c1f6762436f70c5c  gcc/testsuite/g++.dg/asan/asan.exp
  aaab0b483d6b43b9fb8facfcf01ac3b3  gcc/testsuite/g++.dg/asan/asan_globals_test-wrapper.cc
  58f1893fa192cc0429f68ba9628696b9  gcc/testsuite/g++.dg/asan/asan_globals_test.cc
  573f81866bae96b4c422317d9f9f630c  gcc/testsuite/g++.dg/asan/asan_mem_test.cc
  ae18505cf8bcf60c7595916e5c13ca68  gcc/testsuite/g++.dg/asan/asan_oob_test.cc
  a21e7d58f33bd86c0ccf7a0bac1f06bf  gcc/testsuite/g++.dg/asan/asan_str_test.cc
! 631e8e57cd8e7aa2135bbcd88e39e92f  gcc/testsuite/g++.dg/asan/asan_test.C
  2c352907f3b51c80dddf49f6527d00d3  gcc/testsuite/g++.dg/asan/asan_test.cc
  7b5f694f7ad9cbae4aab558727eaceaf  gcc/testsuite/g++.dg/asan/asan_test_config.h
  a455db6e8dc9b02d6f2c59488f513896  gcc/testsuite/g++.dg/asan/asan_test_utils.h
*************** c7018c25d3568fc8c57341e5f27c2399  gcc/te
*** 11245,11251 ****
  23a150302e388ceffe71037fe85813ef  gcc/testsuite/g++.dg/asan/interception-failure-test-1.C
  fb777e6427f4a224508112af8340c3d4  gcc/testsuite/g++.dg/asan/interception-malloc-test-1.C
  5528ec64328b52adcb592f8a39c2ea36  gcc/testsuite/g++.dg/asan/interception-test-1.C
! 280404310b225d80bc4ec71addcc10a9  gcc/testsuite/g++.dg/asan/large-func-test-1.C
  ca4a8065918a3119cb5474bacec801f2  gcc/testsuite/g++.dg/asan/pr102656.C
  b03be3a03970717959df65ccdcbebe88  gcc/testsuite/g++.dg/asan/pr104449.C
  e472f2ce37f2b55b1358ec08717d9f08  gcc/testsuite/g++.dg/asan/pr55617.C
--- 11560,11566 ----
  23a150302e388ceffe71037fe85813ef  gcc/testsuite/g++.dg/asan/interception-failure-test-1.C
  fb777e6427f4a224508112af8340c3d4  gcc/testsuite/g++.dg/asan/interception-malloc-test-1.C
  5528ec64328b52adcb592f8a39c2ea36  gcc/testsuite/g++.dg/asan/interception-test-1.C
! 0bd40d9ed57b38d1bedec8f7fbb98d1c  gcc/testsuite/g++.dg/asan/large-func-test-1.C
  ca4a8065918a3119cb5474bacec801f2  gcc/testsuite/g++.dg/asan/pr102656.C
  b03be3a03970717959df65ccdcbebe88  gcc/testsuite/g++.dg/asan/pr104449.C
  e472f2ce37f2b55b1358ec08717d9f08  gcc/testsuite/g++.dg/asan/pr55617.C
*************** e20a12eb6455f420adb919299f6e8991  gcc/te
*** 11287,11293 ****
  7876e3ae48981ffdea338e795be1efe9  gcc/testsuite/g++.dg/asm-qual-1.C
  0a7cdd480ff9677cd742fad1ef91da3a  gcc/testsuite/g++.dg/asm-qual-2.C
  d20368f5d5a6e496d867b6db2befc2af  gcc/testsuite/g++.dg/asm-qual-3.C
! cebc2f46fc7a60122d9b2f3bdc5fe433  gcc/testsuite/g++.dg/bprob/bprob.exp
  6683eda46cb30a95dcb3ae310aa86684  gcc/testsuite/g++.dg/bprob/g++-bprob-1.C
  91292dc36de1287d9de59661dd0c8c78  gcc/testsuite/g++.dg/bprob/g++-bprob-2.C
  eb7c2ac5d3e686273e3fe6fe17a3abe4  gcc/testsuite/g++.dg/cdce3.C
--- 11602,11612 ----
  7876e3ae48981ffdea338e795be1efe9  gcc/testsuite/g++.dg/asm-qual-1.C
  0a7cdd480ff9677cd742fad1ef91da3a  gcc/testsuite/g++.dg/asm-qual-2.C
  d20368f5d5a6e496d867b6db2befc2af  gcc/testsuite/g++.dg/asm-qual-3.C
! e0fa4a9e3d3debbc97f800a78bdcbfdb  gcc/testsuite/g++.dg/auto-init-uninit-pred-1_a.C
! d0f4a6bb82734b4bff2e3839790242cb  gcc/testsuite/g++.dg/auto-init-uninit-pred-2_a.C
! f7f7c06ac90f234094ae984c3c676df3  gcc/testsuite/g++.dg/auto-init-uninit-pred-3_a.C
! 6076d42dd1204b922d5fb0babad714f5  gcc/testsuite/g++.dg/auto-init-uninit-pred-4.C
! 93b4cac6dee814b112e8d59b40dc6ad9  gcc/testsuite/g++.dg/bprob/bprob.exp
  6683eda46cb30a95dcb3ae310aa86684  gcc/testsuite/g++.dg/bprob/g++-bprob-1.C
  91292dc36de1287d9de59661dd0c8c78  gcc/testsuite/g++.dg/bprob/g++-bprob-2.C
  eb7c2ac5d3e686273e3fe6fe17a3abe4  gcc/testsuite/g++.dg/cdce3.C
*************** bd34927c7e8ef0637a91744aa30c8e22  gcc/te
*** 11299,11305 ****
  13aa9df754ce327f35901d755310d167  gcc/testsuite/g++.dg/charset/asm5.c
  188e64ef71cd1832cf590f89eb899d5b  gcc/testsuite/g++.dg/charset/attribute1.c
  5ec905da0c5303d292f6f23f2befdd9b  gcc/testsuite/g++.dg/charset/attribute2.c
! 7cf37485a96c8b4af089044e98aeb7df  gcc/testsuite/g++.dg/charset/charset.exp
  c3f1b1efe5249f47d609a5022d321c0a  gcc/testsuite/g++.dg/charset/extern1.cc
  e00c15044b80ea8ae41ddca791f728b5  gcc/testsuite/g++.dg/charset/extern2.cc
  8c029ca8175e4d8995ea0dbac6040733  gcc/testsuite/g++.dg/charset/extern3.cc
--- 11618,11624 ----
  13aa9df754ce327f35901d755310d167  gcc/testsuite/g++.dg/charset/asm5.c
  188e64ef71cd1832cf590f89eb899d5b  gcc/testsuite/g++.dg/charset/attribute1.c
  5ec905da0c5303d292f6f23f2befdd9b  gcc/testsuite/g++.dg/charset/attribute2.c
! c24b8960bb0fc98c84ac0aafa0ad6641  gcc/testsuite/g++.dg/charset/charset.exp
  c3f1b1efe5249f47d609a5022d321c0a  gcc/testsuite/g++.dg/charset/extern1.cc
  e00c15044b80ea8ae41ddca791f728b5  gcc/testsuite/g++.dg/charset/extern2.cc
  8c029ca8175e4d8995ea0dbac6040733  gcc/testsuite/g++.dg/charset/extern3.cc
*************** f21dc1eb54ea34814c912bb958cc243b  gcc/te
*** 11338,11344 ****
  3e6b5a438641d0fa418b9b6b59dc9ad5  gcc/testsuite/g++.dg/compat/abi/vbase8-4_main.C
  218fc83d35fc2202ce2c23a8d88a2a0e  gcc/testsuite/g++.dg/compat/abi/vbase8-4_x.C
  ad654d45c988963d6d91e514325cd68c  gcc/testsuite/g++.dg/compat/abi/vbase8-4_y.C
! c638e626102046775bf9a173d4a31643  gcc/testsuite/g++.dg/compat/break/README
  a1f42f9828f95c9f3dd670a142b67209  gcc/testsuite/g++.dg/compat/break/bitfield5.h
  a4f5bc9b9eeba848df2b3660451312e5  gcc/testsuite/g++.dg/compat/break/bitfield5_main.C
  34a963a4f73f5fc81a2a3c61cb1410b4  gcc/testsuite/g++.dg/compat/break/bitfield5_x.C
--- 11657,11663 ----
  3e6b5a438641d0fa418b9b6b59dc9ad5  gcc/testsuite/g++.dg/compat/abi/vbase8-4_main.C
  218fc83d35fc2202ce2c23a8d88a2a0e  gcc/testsuite/g++.dg/compat/abi/vbase8-4_x.C
  ad654d45c988963d6d91e514325cd68c  gcc/testsuite/g++.dg/compat/abi/vbase8-4_y.C
! b7ee45f1311fecc555b99540b481aa05  gcc/testsuite/g++.dg/compat/break/README
  a1f42f9828f95c9f3dd670a142b67209  gcc/testsuite/g++.dg/compat/break/bitfield5.h
  a4f5bc9b9eeba848df2b3660451312e5  gcc/testsuite/g++.dg/compat/break/bitfield5_main.C
  34a963a4f73f5fc81a2a3c61cb1410b4  gcc/testsuite/g++.dg/compat/break/bitfield5_x.C
*************** d9e96ae25c2319373bcfd08d3028762f  gcc/te
*** 11359,11365 ****
  c066ba2e23a50eda1497704cad37719c  gcc/testsuite/g++.dg/compat/break/vbase11_main.C
  cc9fd160c8ac0d554f08ed78757c1ad7  gcc/testsuite/g++.dg/compat/break/vbase11_x.C
  3af15235a86640de95ef01c264b9a669  gcc/testsuite/g++.dg/compat/break/vbase11_y.C
! 934c2a66981521941125693688fb57f9  gcc/testsuite/g++.dg/compat/compat.exp
  d84d0fab6bdaa40e3302c2dc1bd89d10  gcc/testsuite/g++.dg/compat/decimal/compat-common.h
  5606bac1873edfc020404d944e030ebb  gcc/testsuite/g++.dg/compat/decimal/decimal-dummy.h
  3d52f6f9878705d4ff92b2d02c56e07f  gcc/testsuite/g++.dg/compat/decimal/pass-1_main.C
--- 11678,11684 ----
  c066ba2e23a50eda1497704cad37719c  gcc/testsuite/g++.dg/compat/break/vbase11_main.C
  cc9fd160c8ac0d554f08ed78757c1ad7  gcc/testsuite/g++.dg/compat/break/vbase11_x.C
  3af15235a86640de95ef01c264b9a669  gcc/testsuite/g++.dg/compat/break/vbase11_y.C
! ca29cbd17c89a0b652bdf05ec16e98c9  gcc/testsuite/g++.dg/compat/compat.exp
  d84d0fab6bdaa40e3302c2dc1bd89d10  gcc/testsuite/g++.dg/compat/decimal/compat-common.h
  5606bac1873edfc020404d944e030ebb  gcc/testsuite/g++.dg/compat/decimal/decimal-dummy.h
  3d52f6f9878705d4ff92b2d02c56e07f  gcc/testsuite/g++.dg/compat/decimal/pass-1_main.C
*************** e6954ac1ae67eacbb067ca0a7269df99  gcc/te
*** 11457,11463 ****
  7099b2ccdbe9faffb91a1279b3d9c958  gcc/testsuite/g++.dg/compat/init/init-ref2_main.C
  6599bf4c55d10d3d74d35fd52dc68f6c  gcc/testsuite/g++.dg/compat/init/init-ref2_x.C
  75bddd0f3c0ceb101b0c3111cedc4fb4  gcc/testsuite/g++.dg/compat/init/init-ref2_y.C
! dae278aacaf1421495ff012fc7f6c34e  gcc/testsuite/g++.dg/compat/struct-layout-1.exp
  b3150d6e06b56824040f5b2dadcf18ce  gcc/testsuite/g++.dg/compat/struct-layout-1.h
  78cfce9cf8a86fdda9aa267ac227bd42  gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c
  e615a3a6c348fc2427a919e6edad325b  gcc/testsuite/g++.dg/compat/struct-layout-1_x1.h
--- 11776,11786 ----
  7099b2ccdbe9faffb91a1279b3d9c958  gcc/testsuite/g++.dg/compat/init/init-ref2_main.C
  6599bf4c55d10d3d74d35fd52dc68f6c  gcc/testsuite/g++.dg/compat/init/init-ref2_x.C
  75bddd0f3c0ceb101b0c3111cedc4fb4  gcc/testsuite/g++.dg/compat/init/init-ref2_y.C
! 8fde52af77eb1c0e53abe75d42f39f10  gcc/testsuite/g++.dg/compat/pr102024_main.C
! 2b3d95c509a4be70d740edc005431765  gcc/testsuite/g++.dg/compat/pr102024_test.h
! 5a1c23b6f9ed32ad835953cc5de843ad  gcc/testsuite/g++.dg/compat/pr102024_x.C
! 9145407f3d1330de95b18aa4b816a2c5  gcc/testsuite/g++.dg/compat/pr102024_y.C
! 9eee478f202ae4c14ffa4fafdb789b76  gcc/testsuite/g++.dg/compat/struct-layout-1.exp
  b3150d6e06b56824040f5b2dadcf18ce  gcc/testsuite/g++.dg/compat/struct-layout-1.h
  78cfce9cf8a86fdda9aa267ac227bd42  gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c
  e615a3a6c348fc2427a919e6edad325b  gcc/testsuite/g++.dg/compat/struct-layout-1_x1.h
*************** fc3e1038d2ddd359b5ea90ab469aed59  gcc/te
*** 11492,11499 ****
  21ef60ea1c10078f9a73502249868868  gcc/testsuite/g++.dg/concepts/diagnostic14.C
  513ed21afc6e2fbd849f7323535b309c  gcc/testsuite/g++.dg/concepts/diagnostic15.C
  27a7858fa5861377320c52cf05cca000  gcc/testsuite/g++.dg/concepts/diagnostic16.C
  d352f75f268eea6c2a42ba0bacd702bd  gcc/testsuite/g++.dg/concepts/diagnostic2.C
! 43b3f3ef79f7a8577a5888a9d29002eb  gcc/testsuite/g++.dg/concepts/diagnostic3.C
  16b69c7102110cf6646baa3518c9f7f6  gcc/testsuite/g++.dg/concepts/diagnostic4.C
  f7fdf5e1ceaf1a59cf71d50d58950a1e  gcc/testsuite/g++.dg/concepts/diagnostic5.C
  b383f5a2190e1234282797b64ffc0dc8  gcc/testsuite/g++.dg/concepts/diagnostic6.C
--- 11815,11824 ----
  21ef60ea1c10078f9a73502249868868  gcc/testsuite/g++.dg/concepts/diagnostic14.C
  513ed21afc6e2fbd849f7323535b309c  gcc/testsuite/g++.dg/concepts/diagnostic15.C
  27a7858fa5861377320c52cf05cca000  gcc/testsuite/g++.dg/concepts/diagnostic16.C
+ 37fe9bc6efb6073ed748fadad6b16d34  gcc/testsuite/g++.dg/concepts/diagnostic17.C
+ 5eb8e1c2d451af20c10df785a0b37ff7  gcc/testsuite/g++.dg/concepts/diagnostic18.C
  d352f75f268eea6c2a42ba0bacd702bd  gcc/testsuite/g++.dg/concepts/diagnostic2.C
! e13c4d6a598c0e04a760d87586dfb82e  gcc/testsuite/g++.dg/concepts/diagnostic3.C
  16b69c7102110cf6646baa3518c9f7f6  gcc/testsuite/g++.dg/concepts/diagnostic4.C
  f7fdf5e1ceaf1a59cf71d50d58950a1e  gcc/testsuite/g++.dg/concepts/diagnostic5.C
  b383f5a2190e1234282797b64ffc0dc8  gcc/testsuite/g++.dg/concepts/diagnostic6.C
*************** c7379c0f2c3c21faeeef50c4d8999424  gcc/te
*** 11598,11603 ****
--- 11923,11929 ----
  8ad5552b5468c97d780280b2830522e3  gcc/testsuite/g++.dg/concepts/variadic3.C
  d11a4fa08a7da825858193244daaf54c  gcc/testsuite/g++.dg/concepts/variadic4.C
  269ac7b99d88175237e466f69cfb1baf  gcc/testsuite/g++.dg/concepts/variadic5.C
+ 80f790242b0cedc0924485313675abbd  gcc/testsuite/g++.dg/concepts/variadic6.C
  47d50ea9841dfff2e1add4fe21d8cdd8  gcc/testsuite/g++.dg/conflict-markers-1.C
  f8f8119851ae2427bb5baa9f11ad5936  gcc/testsuite/g++.dg/conflict-markers-2.C
  f25f03bef75b49b3242b2b981a26687a  gcc/testsuite/g++.dg/constexpr-null1.C
*************** c0f35a8e0a449b69b0039186b48a3942  gcc/te
*** 11649,11654 ****
--- 11975,11981 ----
  b3506f6da49052d7a7e20089f99f17b7  gcc/testsuite/g++.dg/conversion/op7.C
  9661d2d3622759ea353cb1cafe1633c9  gcc/testsuite/g++.dg/conversion/packed1.C
  5c78730bf80025f457f190a83a71fc4e  gcc/testsuite/g++.dg/conversion/packed2.C
+ aadd9c8f0e37dbd4368b036b8516964b  gcc/testsuite/g++.dg/conversion/pr100635.C
  9b3ae1f3e79f50fca27a3e00a91d2baa  gcc/testsuite/g++.dg/conversion/pr16333.C
  519c18e7a304cfef222dd6fb78722c0d  gcc/testsuite/g++.dg/conversion/pr41426.C
  57621b2c950d1c44fdcadc7ab14ae9ac  gcc/testsuite/g++.dg/conversion/pr59879.C
*************** cb41fef7448625fa4e0c8fd96e24fc4d  gcc/te
*** 11745,11753 ****
  478574fcd282b18447d13478fa0bec3f  gcc/testsuite/g++.dg/coroutines/coro1-missing-await-method.C
  6f5627b19b794cfdd383607165c8ad4e  gcc/testsuite/g++.dg/coroutines/coro1-refs-and-ctors.h
  6487c0454968e62ff493f215450a35cc  gcc/testsuite/g++.dg/coroutines/coro1-ret-int-yield-int.h
! 0338cdb719c46fedef7227899cb0ad47  gcc/testsuite/g++.dg/coroutines/coroutines.exp
  5a6ab803d16d71889bbcfbe081300785  gcc/testsuite/g++.dg/coroutines/pr102454.C
  85cc1b4c4f0e73f17a81693bed3275fa  gcc/testsuite/g++.dg/coroutines/pr103328.C
  cbb42d13b1660a8eb1d40a3d88308140  gcc/testsuite/g++.dg/coroutines/pr93458-1-missing-traits.C
  d9151fc224e4913ed7ffacd748769917  gcc/testsuite/g++.dg/coroutines/pr93458-2-bad-traits.C
  e9b715cb41c54f5b179b4725b788e338  gcc/testsuite/g++.dg/coroutines/pr93458-3-missing-handle.C
--- 12072,12091 ----
  478574fcd282b18447d13478fa0bec3f  gcc/testsuite/g++.dg/coroutines/coro1-missing-await-method.C
  6f5627b19b794cfdd383607165c8ad4e  gcc/testsuite/g++.dg/coroutines/coro1-refs-and-ctors.h
  6487c0454968e62ff493f215450a35cc  gcc/testsuite/g++.dg/coroutines/coro1-ret-int-yield-int.h
! ae3f4fa8827fb0936773b30a07e0aafa  gcc/testsuite/g++.dg/coroutines/coroutines.exp
! 61b68061e919892b77d9a8401fa1bde0  gcc/testsuite/g++.dg/coroutines/pr100127.C
! 46087ea7fe5f7e548d1db1fe2bd1cdf7  gcc/testsuite/g++.dg/coroutines/pr100673.C
! c3400c7cd98281b570bf893a90a079d9  gcc/testsuite/g++.dg/coroutines/pr100772-a.C
! 20ff89f3e9d7d2dac356dd8e9d1b88cd  gcc/testsuite/g++.dg/coroutines/pr100772-b.C
! 3b360a406ca4de73d3459cedee0d38e5  gcc/testsuite/g++.dg/coroutines/pr101133.C
! 3b7900c34ea0474d337aa825a01675c2  gcc/testsuite/g++.dg/coroutines/pr101765.C
  5a6ab803d16d71889bbcfbe081300785  gcc/testsuite/g++.dg/coroutines/pr102454.C
+ fcf423593c66a6801268d44dcd7b6ae1  gcc/testsuite/g++.dg/coroutines/pr102489.C
  85cc1b4c4f0e73f17a81693bed3275fa  gcc/testsuite/g++.dg/coroutines/pr103328.C
+ 0e86724aa7dbc01acaa7860397f33bb4  gcc/testsuite/g++.dg/coroutines/pr103868.C
+ 4be4670ffeb4857d864cfa5cfa5dc16f  gcc/testsuite/g++.dg/coroutines/pr104051.C
+ 27e919b929acdcd5721b1869fde7cbf1  gcc/testsuite/g++.dg/coroutines/pr105287.C
+ d790a308ebfc34da4805acce40128a0a  gcc/testsuite/g++.dg/coroutines/pr105301.C
  cbb42d13b1660a8eb1d40a3d88308140  gcc/testsuite/g++.dg/coroutines/pr93458-1-missing-traits.C
  d9151fc224e4913ed7ffacd748769917  gcc/testsuite/g++.dg/coroutines/pr93458-2-bad-traits.C
  e9b715cb41c54f5b179b4725b788e338  gcc/testsuite/g++.dg/coroutines/pr93458-3-missing-handle.C
*************** b221a446db70accee39ff0c2783ab71c  gcc/te
*** 11791,11803 ****
  71e3db62fe8c830866c66122ae3a0b56  gcc/testsuite/g++.dg/coroutines/pr95823.C
  f3711dab25fac8bb7802f39735ea954d  gcc/testsuite/g++.dg/coroutines/pr95824.C
  03aa07b826568c4887ee864d32462f71  gcc/testsuite/g++.dg/coroutines/pr96251.C
  09ad0ccdf1203d227f2f6da85d74297c  gcc/testsuite/g++.dg/coroutines/pr96749-1.C
  c9053b02ff32311dfd9d7b646bb29551  gcc/testsuite/g++.dg/coroutines/pr96749-2.C
  0dd229753914401c8af3e84d3934dbfc  gcc/testsuite/g++.dg/coroutines/pr97438.C
  7f93d96e5cf64c45c34eb259e9bb9c11  gcc/testsuite/g++.dg/coroutines/pr97587.C
  f095b3e5361e6b39aaa76b256225bae8  gcc/testsuite/g++.dg/coroutines/pr98118.C
  13e8e708074a4e784b2756a16cffac95  gcc/testsuite/g++.dg/coroutines/pr98480.C
! 24170bfffebf70344e3511fba162c10d  gcc/testsuite/g++.dg/coroutines/pr99047.C
  e5855150057a1e681eabe6c4c4c37e4d  gcc/testsuite/g++.dg/coroutines/ramp-return-a.C
  695b11618163db1e2b396417d78f1fa9  gcc/testsuite/g++.dg/coroutines/ramp-return-b.C
  91d4b87670d3ca11ec1c3b3225271fc4  gcc/testsuite/g++.dg/coroutines/ramp-return-c.C
--- 12129,12144 ----
  71e3db62fe8c830866c66122ae3a0b56  gcc/testsuite/g++.dg/coroutines/pr95823.C
  f3711dab25fac8bb7802f39735ea954d  gcc/testsuite/g++.dg/coroutines/pr95824.C
  03aa07b826568c4887ee864d32462f71  gcc/testsuite/g++.dg/coroutines/pr96251.C
+ 893c1e476cefb7fe09e215a6c634bb61  gcc/testsuite/g++.dg/coroutines/pr96517.C
  09ad0ccdf1203d227f2f6da85d74297c  gcc/testsuite/g++.dg/coroutines/pr96749-1.C
  c9053b02ff32311dfd9d7b646bb29551  gcc/testsuite/g++.dg/coroutines/pr96749-2.C
  0dd229753914401c8af3e84d3934dbfc  gcc/testsuite/g++.dg/coroutines/pr97438.C
  7f93d96e5cf64c45c34eb259e9bb9c11  gcc/testsuite/g++.dg/coroutines/pr97587.C
  f095b3e5361e6b39aaa76b256225bae8  gcc/testsuite/g++.dg/coroutines/pr98118.C
  13e8e708074a4e784b2756a16cffac95  gcc/testsuite/g++.dg/coroutines/pr98480.C
! e7ca2ef0f0db55f629fcfb4d4227cd60  gcc/testsuite/g++.dg/coroutines/pr99047.C
! 609255984b51c63eb216d8341218b2c3  gcc/testsuite/g++.dg/coroutines/pr99575.C
! a52a8d452461422c8ad1bacec0e8c15f  gcc/testsuite/g++.dg/coroutines/pr99710.C
  e5855150057a1e681eabe6c4c4c37e4d  gcc/testsuite/g++.dg/coroutines/ramp-return-a.C
  695b11618163db1e2b396417d78f1fa9  gcc/testsuite/g++.dg/coroutines/ramp-return-b.C
  91d4b87670d3ca11ec1c3b3225271fc4  gcc/testsuite/g++.dg/coroutines/ramp-return-c.C
*************** eeb744d3368ba25e26be1112d9ca230c  gcc/te
*** 11927,11932 ****
--- 12268,12280 ----
  731959b0908b124d4eee4dab104d68bb  gcc/testsuite/g++.dg/cpp/c++98.C
  7e8a47b64bd4b7100fb7912bb8130ffa  gcc/testsuite/g++.dg/cpp/c++_cmd_1.C
  00dc832b75beaca735b4084d056fae83  gcc/testsuite/g++.dg/cpp/c++_cmd_1.h
+ 1cf46e6ce91a8ddaa768b5a2cecff8be  gcc/testsuite/g++.dg/cpp/elifdef-1.C
+ 55ade09c97b6c14f1e745916fdd8e1c7  gcc/testsuite/g++.dg/cpp/elifdef-2.C
+ 6a7cfe44863944df11dbbc4cc7affa72  gcc/testsuite/g++.dg/cpp/elifdef-3.C
+ cd98bb75a2905b4efb0b0e28772e6089  gcc/testsuite/g++.dg/cpp/elifdef-4.C
+ 7d166fd683540bb46bab4f5591f6cb7a  gcc/testsuite/g++.dg/cpp/elifdef-5.C
+ a02fdbd418bcf04f05b9c831f60efdff  gcc/testsuite/g++.dg/cpp/elifdef-6.C
+ 1494c84b56e510e0fb687cc28d257e80  gcc/testsuite/g++.dg/cpp/elifdef-7.C
  bb3c9b1e81779a43b584dae48604b8d1  gcc/testsuite/g++.dg/cpp/limits.C
  c41c3c60e8a193075ec6d307d58b6911  gcc/testsuite/g++.dg/cpp/paste1.C
  e9e3011043a9faa30c42b61fa3bdb8a8  gcc/testsuite/g++.dg/cpp/paste2.C
*************** bd0549c40900a8f050eb69c787548ddf  gcc/te
*** 11949,11961 ****
  57c7663de020fb8be24c6eb80efeda0b  gcc/testsuite/g++.dg/cpp/syshdr3.h
  d80eeb1b5ab70a413bed1a37f44a69d6  gcc/testsuite/g++.dg/cpp/truefalse.C
  2cd39b3f2dd56ebb9d95ad2fc9977e0d  gcc/testsuite/g++.dg/cpp/ucn-1.C
! f5bcae4438eda75b9f9815b7960f539c  gcc/testsuite/g++.dg/cpp/ucnid-1-utf8.C
! 726bfe196a82a785510e363a206f39bf  gcc/testsuite/g++.dg/cpp/ucnid-1.C
  79e2374ae788bd2f2d3d7e394cf6fbaa  gcc/testsuite/g++.dg/cpp/ucnid-2-utf8.C
  5a0563c711e1144e47f96764adf36313  gcc/testsuite/g++.dg/cpp/ucnid-2.C
  3dc6e18e971a70fce9ab746e55e7c9d4  gcc/testsuite/g++.dg/cpp/ucnid-3-utf8.C
  51d5f30d4e9c9d914f798d5d9fd7f0af  gcc/testsuite/g++.dg/cpp/ucnid-3.C
! 16390d057eb7383c7119fe22751cd913  gcc/testsuite/g++.dg/cpp/ucnid-4-utf8.C
  7a8d6ee38bbf6e99549056f57a4b5890  gcc/testsuite/g++.dg/cpp/utf16-pr41698-1.C
  388f26d66093d4cf51084fa41b5fbe6e  gcc/testsuite/g++.dg/cpp/weak.C
  81d80cdbba7e7386b9ae9e86a8d48685  gcc/testsuite/g++.dg/cpp0x/Wattributes1.C
--- 12297,12309 ----
  57c7663de020fb8be24c6eb80efeda0b  gcc/testsuite/g++.dg/cpp/syshdr3.h
  d80eeb1b5ab70a413bed1a37f44a69d6  gcc/testsuite/g++.dg/cpp/truefalse.C
  2cd39b3f2dd56ebb9d95ad2fc9977e0d  gcc/testsuite/g++.dg/cpp/ucn-1.C
! 6a2a40588f05a7aa42c9288e3695ab25  gcc/testsuite/g++.dg/cpp/ucnid-1-utf8.C
! aed5e9b084469df5f53338297df34ac5  gcc/testsuite/g++.dg/cpp/ucnid-1.C
  79e2374ae788bd2f2d3d7e394cf6fbaa  gcc/testsuite/g++.dg/cpp/ucnid-2-utf8.C
  5a0563c711e1144e47f96764adf36313  gcc/testsuite/g++.dg/cpp/ucnid-2.C
  3dc6e18e971a70fce9ab746e55e7c9d4  gcc/testsuite/g++.dg/cpp/ucnid-3-utf8.C
  51d5f30d4e9c9d914f798d5d9fd7f0af  gcc/testsuite/g++.dg/cpp/ucnid-3.C
! df09112b080a4f413dd67072191ec1c6  gcc/testsuite/g++.dg/cpp/ucnid-4-utf8.C
  7a8d6ee38bbf6e99549056f57a4b5890  gcc/testsuite/g++.dg/cpp/utf16-pr41698-1.C
  388f26d66093d4cf51084fa41b5fbe6e  gcc/testsuite/g++.dg/cpp/weak.C
  81d80cdbba7e7386b9ae9e86a8d48685  gcc/testsuite/g++.dg/cpp0x/Wattributes1.C
*************** deb6cb3161ca7aaacc743984b6723181  gcc/te
*** 11973,11978 ****
--- 12321,12327 ----
  b128409123afa20f665fe2d5e291048c  gcc/testsuite/g++.dg/cpp0x/Wnarrowing16.C
  58eec29aef8f1d51c0570f6246dea0bd  gcc/testsuite/g++.dg/cpp0x/Wnarrowing17.C
  378c161f7f4fe5f6220dceedd8380af8  gcc/testsuite/g++.dg/cpp0x/Wnarrowing18.C
+ e62a4dedf879dc2231d0301f8e3e4934  gcc/testsuite/g++.dg/cpp0x/Wnarrowing19.C
  24c57c9d07145952c5515888f1ebb983  gcc/testsuite/g++.dg/cpp0x/Wnarrowing2.C
  74bb2cd707774dcc79b45b939b21d2a8  gcc/testsuite/g++.dg/cpp0x/Wnarrowing3.C
  98f5997ac53fff61b85f99bfe358a506  gcc/testsuite/g++.dg/cpp0x/Wnarrowing4.C
*************** ae3a00e426b12806ada699df6be4f347  gcc/te
*** 12082,12096 ****
  e227fd117edd6417d4721f5cf77d96ca  gcc/testsuite/g++.dg/cpp0x/alias-decl-69.C
  816dbf372a71890f9515376534ec312b  gcc/testsuite/g++.dg/cpp0x/alias-decl-7.C
  2b6a57b666b21c32c78675b73c3c2d86  gcc/testsuite/g++.dg/cpp0x/alias-decl-70.C
  3d9ba2b7ecc7fefba84ee62ec62685ca  gcc/testsuite/g++.dg/cpp0x/alias-decl-72.C
  d5f8995eb967b699d6937c5a92465df7  gcc/testsuite/g++.dg/cpp0x/alias-decl-72a.C
  2721f38b2811c2ff06ae54c5c96790df  gcc/testsuite/g++.dg/cpp0x/alias-decl-74.C
  77aa48fcd9f9b9ffab08fa7ebc5d52e2  gcc/testsuite/g++.dg/cpp0x/alias-decl-8.C
  0fea677a266ad89646463d41e4df0566  gcc/testsuite/g++.dg/cpp0x/alias-decl-80296.C
  2b0ac9ee7e77902ee76b92dfbfcc37b3  gcc/testsuite/g++.dg/cpp0x/alias-decl-9.C
  c194f48c0c5ddd81f4151d3104e6eaa4  gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C
  0c857f35d307877fbdc35abb07bb117c  gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286.C
! e2071d46036912555df15661828c4105  gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286a.C
  ef369c9d8dbd4b3ba5c764f92fc53a46  gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286b.C
  cc6f68db48a7d48195916001cb0b7b64  gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1558.C
  830a80101d211b99c4fce4c743aa6771  gcc/testsuite/g++.dg/cpp0x/alias-decl-enum-1.C
--- 12431,12447 ----
  e227fd117edd6417d4721f5cf77d96ca  gcc/testsuite/g++.dg/cpp0x/alias-decl-69.C
  816dbf372a71890f9515376534ec312b  gcc/testsuite/g++.dg/cpp0x/alias-decl-7.C
  2b6a57b666b21c32c78675b73c3c2d86  gcc/testsuite/g++.dg/cpp0x/alias-decl-70.C
+ acffea557d5dc888edca87b798ec9cf1  gcc/testsuite/g++.dg/cpp0x/alias-decl-71.C
  3d9ba2b7ecc7fefba84ee62ec62685ca  gcc/testsuite/g++.dg/cpp0x/alias-decl-72.C
  d5f8995eb967b699d6937c5a92465df7  gcc/testsuite/g++.dg/cpp0x/alias-decl-72a.C
+ b363cc23eaa94cfb4d642e0e990d1ff1  gcc/testsuite/g++.dg/cpp0x/alias-decl-73.C
  2721f38b2811c2ff06ae54c5c96790df  gcc/testsuite/g++.dg/cpp0x/alias-decl-74.C
  77aa48fcd9f9b9ffab08fa7ebc5d52e2  gcc/testsuite/g++.dg/cpp0x/alias-decl-8.C
  0fea677a266ad89646463d41e4df0566  gcc/testsuite/g++.dg/cpp0x/alias-decl-80296.C
  2b0ac9ee7e77902ee76b92dfbfcc37b3  gcc/testsuite/g++.dg/cpp0x/alias-decl-9.C
  c194f48c0c5ddd81f4151d3104e6eaa4  gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C
  0c857f35d307877fbdc35abb07bb117c  gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286.C
! 50768d1b6db3a8fc26c4cfb6c5811b35  gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286a.C
  ef369c9d8dbd4b3ba5c764f92fc53a46  gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286b.C
  cc6f68db48a7d48195916001cb0b7b64  gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1558.C
  830a80101d211b99c4fce4c743aa6771  gcc/testsuite/g++.dg/cpp0x/alias-decl-enum-1.C
*************** fd8b4313cac23b2447fb99a794640ade  gcc/te
*** 12163,12175 ****
  bad0e410f23dcdb0acee4e8365284563  gcc/testsuite/g++.dg/cpp0x/auto21.C
  833e733e541c0f1404c9bebc10fc45b7  gcc/testsuite/g++.dg/cpp0x/auto22.C
  e96a936d84bcdee82b6373ca3666d8e3  gcc/testsuite/g++.dg/cpp0x/auto23.C
! 6067981795c347570d1eaceb19f3f427  gcc/testsuite/g++.dg/cpp0x/auto24.C
! db7f71aaaa2f73308e27313c0029f47b  gcc/testsuite/g++.dg/cpp0x/auto25.C
  6a57404450d7c19ecf1c90ef718482e5  gcc/testsuite/g++.dg/cpp0x/auto26.C
  3d8db8c33e753c0134f6f319133442ff  gcc/testsuite/g++.dg/cpp0x/auto27.C
  44d2e83b6f5fa64578c3121035174b58  gcc/testsuite/g++.dg/cpp0x/auto28.C
  0c6f2e035663c64946f00a0114eb6b45  gcc/testsuite/g++.dg/cpp0x/auto29.C
! 701572707062cb14dc0c2fee7daff48a  gcc/testsuite/g++.dg/cpp0x/auto3.C
  137b55f91ad6b59634d3e05053c11138  gcc/testsuite/g++.dg/cpp0x/auto30.C
  24926b96269b354631ff38d43957ddae  gcc/testsuite/g++.dg/cpp0x/auto31.C
  2cbc64372a2839e349e2ff9492fea8c2  gcc/testsuite/g++.dg/cpp0x/auto32.C
--- 12514,12526 ----
  bad0e410f23dcdb0acee4e8365284563  gcc/testsuite/g++.dg/cpp0x/auto21.C
  833e733e541c0f1404c9bebc10fc45b7  gcc/testsuite/g++.dg/cpp0x/auto22.C
  e96a936d84bcdee82b6373ca3666d8e3  gcc/testsuite/g++.dg/cpp0x/auto23.C
! 760895e5c4143cf7b00b70c7dd01db07  gcc/testsuite/g++.dg/cpp0x/auto24.C
! 1adf4d9cb95636cdcac01771bc6c44f5  gcc/testsuite/g++.dg/cpp0x/auto25.C
  6a57404450d7c19ecf1c90ef718482e5  gcc/testsuite/g++.dg/cpp0x/auto26.C
  3d8db8c33e753c0134f6f319133442ff  gcc/testsuite/g++.dg/cpp0x/auto27.C
  44d2e83b6f5fa64578c3121035174b58  gcc/testsuite/g++.dg/cpp0x/auto28.C
  0c6f2e035663c64946f00a0114eb6b45  gcc/testsuite/g++.dg/cpp0x/auto29.C
! 804a935ee0ea3a09faf462d48be0ea3c  gcc/testsuite/g++.dg/cpp0x/auto3.C
  137b55f91ad6b59634d3e05053c11138  gcc/testsuite/g++.dg/cpp0x/auto30.C
  24926b96269b354631ff38d43957ddae  gcc/testsuite/g++.dg/cpp0x/auto31.C
  2cbc64372a2839e349e2ff9492fea8c2  gcc/testsuite/g++.dg/cpp0x/auto32.C
*************** d420df2f8f923f095a129abfc120b93d  gcc/te
*** 12183,12189 ****
  71c45e682fd4110207b00eebaee3cab9  gcc/testsuite/g++.dg/cpp0x/auto4.C
  1ed3bdad79aa7dbba80cabd3681be148  gcc/testsuite/g++.dg/cpp0x/auto40.C
  b5369cf36db60b598de75460558c3937  gcc/testsuite/g++.dg/cpp0x/auto41.C
! 7db80cce5f1d06d3ebae536a255756d9  gcc/testsuite/g++.dg/cpp0x/auto42.C
  8b826f0950dbcb62259fc73cff6fb691  gcc/testsuite/g++.dg/cpp0x/auto43.C
  6bbe0a14d0e66a533849c123efd3aa7a  gcc/testsuite/g++.dg/cpp0x/auto44.C
  d9b716e1c070d979f6ba213732af91c4  gcc/testsuite/g++.dg/cpp0x/auto45.C
--- 12534,12540 ----
  71c45e682fd4110207b00eebaee3cab9  gcc/testsuite/g++.dg/cpp0x/auto4.C
  1ed3bdad79aa7dbba80cabd3681be148  gcc/testsuite/g++.dg/cpp0x/auto40.C
  b5369cf36db60b598de75460558c3937  gcc/testsuite/g++.dg/cpp0x/auto41.C
! ecdd538024a663cec02f196c99cb4f66  gcc/testsuite/g++.dg/cpp0x/auto42.C
  8b826f0950dbcb62259fc73cff6fb691  gcc/testsuite/g++.dg/cpp0x/auto43.C
  6bbe0a14d0e66a533849c123efd3aa7a  gcc/testsuite/g++.dg/cpp0x/auto44.C
  d9b716e1c070d979f6ba213732af91c4  gcc/testsuite/g++.dg/cpp0x/auto45.C
*************** d7e67c489de3f4699b1cb6ee43c6142c  gcc/te
*** 12199,12205 ****
  f6b00042d67759a33bbf3becf2621e18  gcc/testsuite/g++.dg/cpp0x/auto54.C
  c927462765eef1949fbb945e0a8b8a4a  gcc/testsuite/g++.dg/cpp0x/auto55.C
  7051782825f2720fd5eee3be6f2027e9  gcc/testsuite/g++.dg/cpp0x/auto7.C
! 2f31670e4a2ab4485678d229fa64a484  gcc/testsuite/g++.dg/cpp0x/auto9.C
  4a89b70ea75ae6415ffb0149eed4dc01  gcc/testsuite/g++.dg/cpp0x/bad_array_new1.C
  a8491f3e4ee92a8454ad6b7d6c1e4429  gcc/testsuite/g++.dg/cpp0x/bad_array_new2.C
  1ea60b441f8073714f5b0d7662a304e9  gcc/testsuite/g++.dg/cpp0x/bind.C
--- 12550,12556 ----
  f6b00042d67759a33bbf3becf2621e18  gcc/testsuite/g++.dg/cpp0x/auto54.C
  c927462765eef1949fbb945e0a8b8a4a  gcc/testsuite/g++.dg/cpp0x/auto55.C
  7051782825f2720fd5eee3be6f2027e9  gcc/testsuite/g++.dg/cpp0x/auto7.C
! 13b23623fc6ec1dc0109c253f332de7c  gcc/testsuite/g++.dg/cpp0x/auto9.C
  4a89b70ea75ae6415ffb0149eed4dc01  gcc/testsuite/g++.dg/cpp0x/bad_array_new1.C
  a8491f3e4ee92a8454ad6b7d6c1e4429  gcc/testsuite/g++.dg/cpp0x/bad_array_new2.C
  1ea60b441f8073714f5b0d7662a304e9  gcc/testsuite/g++.dg/cpp0x/bind.C
*************** c11fb9d024f89aea2e027172cee4bda2  gcc/te
*** 12216,12222 ****
--- 12567,12575 ----
  5337801b3f3b1399a7748f6f77351f43  gcc/testsuite/g++.dg/cpp0x/cond1.C
  82b611352fd26c7db573eb5226ef4366  gcc/testsuite/g++.dg/cpp0x/cond2.C
  49892879cc50168564ac99cc87bfb0ab  gcc/testsuite/g++.dg/cpp0x/constexpr-100111.C
+ 5319a9de79517accc19d4cb1801c0616  gcc/testsuite/g++.dg/cpp0x/constexpr-104226.C
  eeac975a1b841cef4d5a4c468314ed8c  gcc/testsuite/g++.dg/cpp0x/constexpr-104472.C
+ 6ef86dfa8bcd129320f2714974f8ad93  gcc/testsuite/g++.dg/cpp0x/constexpr-105321.C
  3e4cac522763806230540d3da6cc5ee1  gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C
  d079e67f3b2be485ac7aed93b70984d2  gcc/testsuite/g++.dg/cpp0x/constexpr-46420.C
  329a82a822423273c0c0256fd27a6d52  gcc/testsuite/g++.dg/cpp0x/constexpr-47570.C
*************** ac98415dcf1478783865ded48b802514  gcc/te
*** 12229,12235 ****
  ae50dcd26c1db9c21ab23c7c6fd3e728  gcc/testsuite/g++.dg/cpp0x/constexpr-51707.C
  96317097d82b7260177af2929bb7e881  gcc/testsuite/g++.dg/cpp0x/constexpr-52282-1.C
  d55311e37ed0d20d2c44697761f33eca  gcc/testsuite/g++.dg/cpp0x/constexpr-52672.C
! 78d3ccbb3d9653e478f717fed27c41fa  gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C
  ed879f2262461536a8a87a38152015b7  gcc/testsuite/g++.dg/cpp0x/constexpr-52892-1.C
  3ae1b0a16fe1c7d2133dc2faf68bfc01  gcc/testsuite/g++.dg/cpp0x/constexpr-52892-2.C
  ecc3b96f5ee5f153f34313ef65b34ef6  gcc/testsuite/g++.dg/cpp0x/constexpr-53094-1.C
--- 12582,12588 ----
  ae50dcd26c1db9c21ab23c7c6fd3e728  gcc/testsuite/g++.dg/cpp0x/constexpr-51707.C
  96317097d82b7260177af2929bb7e881  gcc/testsuite/g++.dg/cpp0x/constexpr-52282-1.C
  d55311e37ed0d20d2c44697761f33eca  gcc/testsuite/g++.dg/cpp0x/constexpr-52672.C
! 6bd755fcbf25a02e31fe929122a04294  gcc/testsuite/g++.dg/cpp0x/constexpr-52830.C
  ed879f2262461536a8a87a38152015b7  gcc/testsuite/g++.dg/cpp0x/constexpr-52892-1.C
  3ae1b0a16fe1c7d2133dc2faf68bfc01  gcc/testsuite/g++.dg/cpp0x/constexpr-52892-2.C
  ecc3b96f5ee5f153f34313ef65b34ef6  gcc/testsuite/g++.dg/cpp0x/constexpr-53094-1.C
*************** b2677ed5d88c259b9b0fac3db40c4180  gcc/te
*** 12301,12307 ****
  a41c6fa5f9f050cf59e34e5334dd0947  gcc/testsuite/g++.dg/cpp0x/constexpr-arith-overflow.C
  4901daebef7a51847b08d357c96855a3  gcc/testsuite/g++.dg/cpp0x/constexpr-arith-overflow2.C
  d184daf58a1efefa9b5d9f2675332595  gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr.C
! 63eee311d4a3d8cc4e3036fb19147515  gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr10.C
  8fd033f4e6b69599a1e293c45d0814cb  gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr2.C
  0a82455c1794efadc3bbb4e4ba357339  gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr3.C
  12a7829023637da75e6542a82c846dd8  gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr4.C
--- 12654,12660 ----
  a41c6fa5f9f050cf59e34e5334dd0947  gcc/testsuite/g++.dg/cpp0x/constexpr-arith-overflow.C
  4901daebef7a51847b08d357c96855a3  gcc/testsuite/g++.dg/cpp0x/constexpr-arith-overflow2.C
  d184daf58a1efefa9b5d9f2675332595  gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr.C
! 3b1cc7e2a7af436731e0137ca9ab15f5  gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr10.C
  8fd033f4e6b69599a1e293c45d0814cb  gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr2.C
  0a82455c1794efadc3bbb4e4ba357339  gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr3.C
  12a7829023637da75e6542a82c846dd8  gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr4.C
*************** f4f262de9adf968192a3da56a3c4adc1  gcc/te
*** 12330,12335 ****
--- 12683,12689 ----
  37381df196b22d02192a5089e6c46365  gcc/testsuite/g++.dg/cpp0x/constexpr-array25.C
  0a27a7a45bdad25c5a48b1f4e3bfcb8b  gcc/testsuite/g++.dg/cpp0x/constexpr-array26.C
  3100c3b4b2ec90a6762a56edc16076a1  gcc/testsuite/g++.dg/cpp0x/constexpr-array27.C
+ 216c8de64dd9752d2d84eb202e80c708  gcc/testsuite/g++.dg/cpp0x/constexpr-array28.C
  8b7c8e7c1b64cfa0626f7f2311c9fef5  gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C
  6451aa5bb5fa736dda3ebad1dc2e8336  gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C
  1d46f32449f9e0292d662928246ec784  gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C
*************** b94eb3b8291b32feaea3689ea9f3d351  gcc/te
*** 12340,12345 ****
--- 12694,12700 ----
  0054ee3f75e70491b1d3ca96c22b785d  gcc/testsuite/g++.dg/cpp0x/constexpr-attribute.C
  227bc499e99c2762ddd9c7f10396a2b7  gcc/testsuite/g++.dg/cpp0x/constexpr-attribute2.C
  ca1853de9a98e8925f6e38fc0dc6ca1e  gcc/testsuite/g++.dg/cpp0x/constexpr-attribute3.C
+ b6d6c02ff1db71935dea8fea4cc1bea0  gcc/testsuite/g++.dg/cpp0x/constexpr-attribute4.C
  a38638e5f2e5311e8f06a790b3745aa9  gcc/testsuite/g++.dg/cpp0x/constexpr-auto.C
  fdf8f1e07e73475c94cf62fcbb1aab77  gcc/testsuite/g++.dg/cpp0x/constexpr-base.C
  460ea40517988382f23290096b62251e  gcc/testsuite/g++.dg/cpp0x/constexpr-base2.C
*************** e4e15e959aaae288fa7a722d7abb7509  gcc/te
*** 12358,12367 ****
  85fdfb48424c10ce307707bc1d85353b  gcc/testsuite/g++.dg/cpp0x/constexpr-builtin4.C
  a3e1dfa48f53c341c8fd1fed39d39593  gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C
  2d072e1c9404478ff6f2aff9be053f5d  gcc/testsuite/g++.dg/cpp0x/constexpr-cast.C
! c617e2dbb5fde7d48a70e2596c3b5468  gcc/testsuite/g++.dg/cpp0x/constexpr-cast2.C
  7cd97e4615765a106cbe7e09df58b19e  gcc/testsuite/g++.dg/cpp0x/constexpr-cast3.C
  c69a3f036aa1a3b23cdbaaea842e210b  gcc/testsuite/g++.dg/cpp0x/constexpr-cleanup.C
  4c7ae3f55ce6d714d60e08811293b1e3  gcc/testsuite/g++.dg/cpp0x/constexpr-comma1.C
  80367967b9445fd60f61c8e306a887c1  gcc/testsuite/g++.dg/cpp0x/constexpr-complex.C
  81e19679cf444654f916ddfdba9dddbb  gcc/testsuite/g++.dg/cpp0x/constexpr-complex2.C
  91a3ed066890c479ed4178dddf5077d3  gcc/testsuite/g++.dg/cpp0x/constexpr-compound.C
--- 12713,12724 ----
  85fdfb48424c10ce307707bc1d85353b  gcc/testsuite/g++.dg/cpp0x/constexpr-builtin4.C
  a3e1dfa48f53c341c8fd1fed39d39593  gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C
  2d072e1c9404478ff6f2aff9be053f5d  gcc/testsuite/g++.dg/cpp0x/constexpr-cast.C
! f6c2f32e395bbfd34b6d6b3181eb3c0d  gcc/testsuite/g++.dg/cpp0x/constexpr-cast2.C
  7cd97e4615765a106cbe7e09df58b19e  gcc/testsuite/g++.dg/cpp0x/constexpr-cast3.C
  c69a3f036aa1a3b23cdbaaea842e210b  gcc/testsuite/g++.dg/cpp0x/constexpr-cleanup.C
  4c7ae3f55ce6d714d60e08811293b1e3  gcc/testsuite/g++.dg/cpp0x/constexpr-comma1.C
+ 6fdd84c643464de26956dded064a3489  gcc/testsuite/g++.dg/cpp0x/constexpr-compare1.C
+ 97583116f3168f5cc81264f1e957921a  gcc/testsuite/g++.dg/cpp0x/constexpr-compare2.C
  80367967b9445fd60f61c8e306a887c1  gcc/testsuite/g++.dg/cpp0x/constexpr-complex.C
  81e19679cf444654f916ddfdba9dddbb  gcc/testsuite/g++.dg/cpp0x/constexpr-complex2.C
  91a3ed066890c479ed4178dddf5077d3  gcc/testsuite/g++.dg/cpp0x/constexpr-compound.C
*************** cff5ffbde8aa11968863d58f12230fd8  gcc/te
*** 12409,12420 ****
  670301964142ce35b76536de5b9b09c4  gcc/testsuite/g++.dg/cpp0x/constexpr-default1.C
  b9f62d1adc6b6e0fe01886a17a69c102  gcc/testsuite/g++.dg/cpp0x/constexpr-delegating.C
  7931d487bd0cfaf955fae2246fa72de9  gcc/testsuite/g++.dg/cpp0x/constexpr-delegating2.C
  5b017b9ac3b68833449b967e43cba950  gcc/testsuite/g++.dg/cpp0x/constexpr-delete.C
  f85801423624d5e4e418f9fe401034b6  gcc/testsuite/g++.dg/cpp0x/constexpr-delete2.C
  4f2e7c33f09e5b0c1d98c13b7f990e4a  gcc/testsuite/g++.dg/cpp0x/constexpr-deref.C
  a5ca183a9981a662b98c564cad9d2142  gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C
  262bf0368b4b07acdfe79a5a0de00e78  gcc/testsuite/g++.dg/cpp0x/constexpr-diag2.C
! 98281a1dbf50db36e4d79b6a2285d939  gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C
  f40741605855158bc8dc6da1beb0acec  gcc/testsuite/g++.dg/cpp0x/constexpr-diag4.C
  cdcf1abb99ff7db2a6de02d4da860839  gcc/testsuite/g++.dg/cpp0x/constexpr-diag5.C
  3b6a46c1a5699fddb411eb1188a5afbc  gcc/testsuite/g++.dg/cpp0x/constexpr-eh-spec.C
--- 12766,12778 ----
  670301964142ce35b76536de5b9b09c4  gcc/testsuite/g++.dg/cpp0x/constexpr-default1.C
  b9f62d1adc6b6e0fe01886a17a69c102  gcc/testsuite/g++.dg/cpp0x/constexpr-delegating.C
  7931d487bd0cfaf955fae2246fa72de9  gcc/testsuite/g++.dg/cpp0x/constexpr-delegating2.C
+ 0d9eeb2203a8449f75b9f707a22b2c1b  gcc/testsuite/g++.dg/cpp0x/constexpr-delegating3.C
  5b017b9ac3b68833449b967e43cba950  gcc/testsuite/g++.dg/cpp0x/constexpr-delete.C
  f85801423624d5e4e418f9fe401034b6  gcc/testsuite/g++.dg/cpp0x/constexpr-delete2.C
  4f2e7c33f09e5b0c1d98c13b7f990e4a  gcc/testsuite/g++.dg/cpp0x/constexpr-deref.C
  a5ca183a9981a662b98c564cad9d2142  gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C
  262bf0368b4b07acdfe79a5a0de00e78  gcc/testsuite/g++.dg/cpp0x/constexpr-diag2.C
! 359dd47653eb9e24f5fcacce2f78e3a0  gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C
  f40741605855158bc8dc6da1beb0acec  gcc/testsuite/g++.dg/cpp0x/constexpr-diag4.C
  cdcf1abb99ff7db2a6de02d4da860839  gcc/testsuite/g++.dg/cpp0x/constexpr-diag5.C
  3b6a46c1a5699fddb411eb1188a5afbc  gcc/testsuite/g++.dg/cpp0x/constexpr-eh-spec.C
*************** baf44bb3bbcc1b19835fcba0732c07b8  gcc/te
*** 12425,12431 ****
  769dc1c8f5dd3fe287febfc28bff67f6  gcc/testsuite/g++.dg/cpp0x/constexpr-empty11.C
  381479cfc8a4816cc7ecac86af925b76  gcc/testsuite/g++.dg/cpp0x/constexpr-empty12.C
  753e5f64602d5b078b77508da90185f6  gcc/testsuite/g++.dg/cpp0x/constexpr-empty13.C
! dc35528dcc7c952d5f423188cb941644  gcc/testsuite/g++.dg/cpp0x/constexpr-empty14.C
  39d49ad5520441d592a3a79408382c59  gcc/testsuite/g++.dg/cpp0x/constexpr-empty15.C
  a275ad66d9fc657917af98f6fe78b474  gcc/testsuite/g++.dg/cpp0x/constexpr-empty16.C
  2cb172046684cd137813e8662b4c2325  gcc/testsuite/g++.dg/cpp0x/constexpr-empty17.C
--- 12783,12790 ----
  769dc1c8f5dd3fe287febfc28bff67f6  gcc/testsuite/g++.dg/cpp0x/constexpr-empty11.C
  381479cfc8a4816cc7ecac86af925b76  gcc/testsuite/g++.dg/cpp0x/constexpr-empty12.C
  753e5f64602d5b078b77508da90185f6  gcc/testsuite/g++.dg/cpp0x/constexpr-empty13.C
! 2a33a8f9f599ab8ad56bcf27c4f4faa1  gcc/testsuite/g++.dg/cpp0x/constexpr-empty14.C
! 6f24c04a770fe57c3c036f5e37f70b0b  gcc/testsuite/g++.dg/cpp0x/constexpr-empty14a.C
  39d49ad5520441d592a3a79408382c59  gcc/testsuite/g++.dg/cpp0x/constexpr-empty15.C
  a275ad66d9fc657917af98f6fe78b474  gcc/testsuite/g++.dg/cpp0x/constexpr-empty16.C
  2cb172046684cd137813e8662b4c2325  gcc/testsuite/g++.dg/cpp0x/constexpr-empty17.C
*************** cf5dbf6e27520dc069362029f5cb0540  gcc/te
*** 12437,12451 ****
  0747afdc6137d0b7079cb129c5f34cd6  gcc/testsuite/g++.dg/cpp0x/constexpr-empty7.C
  3775b8d3a8d0d114191c1e741ebedbf9  gcc/testsuite/g++.dg/cpp0x/constexpr-empty8.C
  0639a526e3e93a7d7ddd53722d0d65a4  gcc/testsuite/g++.dg/cpp0x/constexpr-empty9.C
! 4570544b4f85e2fcc79cdc49cab6983d  gcc/testsuite/g++.dg/cpp0x/constexpr-ex1.C
  4e6fff7f5e83663f75c94efbf299525b  gcc/testsuite/g++.dg/cpp0x/constexpr-ex2.C
  c42ce017f72e0ac9bc977500bc2d096c  gcc/testsuite/g++.dg/cpp0x/constexpr-ex3.C
  ce75146a9a51521a3b4ff82cc14225c3  gcc/testsuite/g++.dg/cpp0x/constexpr-ex4.C
  19eb610e0af0918f7473197af97c60d4  gcc/testsuite/g++.dg/cpp0x/constexpr-expinst.C
  54953d2c31360e2eeefa3305044bd360  gcc/testsuite/g++.dg/cpp0x/constexpr-explicit-inst.C
  aa1967267d5d21b22c4d54dfa617fcfc  gcc/testsuite/g++.dg/cpp0x/constexpr-fnptr.C
  928d1a775ac6fb68d34dd89fdd936ada  gcc/testsuite/g++.dg/cpp0x/constexpr-fold1.C
  216c6548cc77db922bab7f78e595ac97  gcc/testsuite/g++.dg/cpp0x/constexpr-fold2.C
  575c4150d2d4e2ad3c10f32ecfbb8566  gcc/testsuite/g++.dg/cpp0x/constexpr-friend-2.C
  059916cbb6f4b35f06a970eef2a60fc9  gcc/testsuite/g++.dg/cpp0x/constexpr-friend-3.C
  8f8662a4c1ee1c3b08d1ce3b309a0cdc  gcc/testsuite/g++.dg/cpp0x/constexpr-friend.C
--- 12796,12812 ----
  0747afdc6137d0b7079cb129c5f34cd6  gcc/testsuite/g++.dg/cpp0x/constexpr-empty7.C
  3775b8d3a8d0d114191c1e741ebedbf9  gcc/testsuite/g++.dg/cpp0x/constexpr-empty8.C
  0639a526e3e93a7d7ddd53722d0d65a4  gcc/testsuite/g++.dg/cpp0x/constexpr-empty9.C
! af9e5b5e3be0951644251f1530904097  gcc/testsuite/g++.dg/cpp0x/constexpr-ex1.C
  4e6fff7f5e83663f75c94efbf299525b  gcc/testsuite/g++.dg/cpp0x/constexpr-ex2.C
  c42ce017f72e0ac9bc977500bc2d096c  gcc/testsuite/g++.dg/cpp0x/constexpr-ex3.C
  ce75146a9a51521a3b4ff82cc14225c3  gcc/testsuite/g++.dg/cpp0x/constexpr-ex4.C
  19eb610e0af0918f7473197af97c60d4  gcc/testsuite/g++.dg/cpp0x/constexpr-expinst.C
  54953d2c31360e2eeefa3305044bd360  gcc/testsuite/g++.dg/cpp0x/constexpr-explicit-inst.C
+ 98f85ca947a471fd37217a8fc9e771fb  gcc/testsuite/g++.dg/cpp0x/constexpr-fno-elide-ctors1.C
  aa1967267d5d21b22c4d54dfa617fcfc  gcc/testsuite/g++.dg/cpp0x/constexpr-fnptr.C
  928d1a775ac6fb68d34dd89fdd936ada  gcc/testsuite/g++.dg/cpp0x/constexpr-fold1.C
  216c6548cc77db922bab7f78e595ac97  gcc/testsuite/g++.dg/cpp0x/constexpr-fold2.C
+ 54d13632b3b2de9c55a44e7f11be5f5f  gcc/testsuite/g++.dg/cpp0x/constexpr-fp-except1.C
  575c4150d2d4e2ad3c10f32ecfbb8566  gcc/testsuite/g++.dg/cpp0x/constexpr-friend-2.C
  059916cbb6f4b35f06a970eef2a60fc9  gcc/testsuite/g++.dg/cpp0x/constexpr-friend-3.C
  8f8662a4c1ee1c3b08d1ce3b309a0cdc  gcc/testsuite/g++.dg/cpp0x/constexpr-friend.C
*************** b9f6048a90a69c192d74f1909302134b  gcc/te
*** 12469,12481 ****
  445bc8616121c0024196e496ceb530a8  gcc/testsuite/g++.dg/cpp0x/constexpr-ice20.C
  8338efcd83a2b6552bc4ad1d47c18171  gcc/testsuite/g++.dg/cpp0x/constexpr-ice3.C
  a2444cbecc90b8c642eeb0fb89f00654  gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C
! 25e7b5480798a573cd8c5ee6185e0e93  gcc/testsuite/g++.dg/cpp0x/constexpr-ice5.C
  3d70f2796d289fb3feeb427d6b1754c5  gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C
  996613e01ba0152564096ee0dd625dd7  gcc/testsuite/g++.dg/cpp0x/constexpr-ice7.C
  2720d2f3cb78afd7d5dc73bc55faced2  gcc/testsuite/g++.dg/cpp0x/constexpr-ice8.C
  a493c011ce3849fcada47c0a411641cf  gcc/testsuite/g++.dg/cpp0x/constexpr-ice9.C
  436d84a87112b4df7028d15367f662ab  gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C
! d1cc67ebbaf225027d63dadf52226cb5  gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete2.C
  5f8ea4d699883534fc470b2a2d74c3aa  gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete3.C
  3a6eb5a62fbc60ea133029fb288f7075  gcc/testsuite/g++.dg/cpp0x/constexpr-inhctor1.C
  c9e05e81b17b9625dcde91ea2746794d  gcc/testsuite/g++.dg/cpp0x/constexpr-initlist.C
--- 12830,12842 ----
  445bc8616121c0024196e496ceb530a8  gcc/testsuite/g++.dg/cpp0x/constexpr-ice20.C
  8338efcd83a2b6552bc4ad1d47c18171  gcc/testsuite/g++.dg/cpp0x/constexpr-ice3.C
  a2444cbecc90b8c642eeb0fb89f00654  gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C
! c41f1725b48f2e3e21611244c4c6208e  gcc/testsuite/g++.dg/cpp0x/constexpr-ice5.C
  3d70f2796d289fb3feeb427d6b1754c5  gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C
  996613e01ba0152564096ee0dd625dd7  gcc/testsuite/g++.dg/cpp0x/constexpr-ice7.C
  2720d2f3cb78afd7d5dc73bc55faced2  gcc/testsuite/g++.dg/cpp0x/constexpr-ice8.C
  a493c011ce3849fcada47c0a411641cf  gcc/testsuite/g++.dg/cpp0x/constexpr-ice9.C
  436d84a87112b4df7028d15367f662ab  gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C
! 83c0193d01164a004302f9751660ce07  gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete2.C
  5f8ea4d699883534fc470b2a2d74c3aa  gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete3.C
  3a6eb5a62fbc60ea133029fb288f7075  gcc/testsuite/g++.dg/cpp0x/constexpr-inhctor1.C
  c9e05e81b17b9625dcde91ea2746794d  gcc/testsuite/g++.dg/cpp0x/constexpr-initlist.C
*************** ad96b3db3327ae43c2490e49c0c6271b  gcc/te
*** 12492,12510 ****
  42b085cfa5a3a60f9db66f7cc0e24a06  gcc/testsuite/g++.dg/cpp0x/constexpr-initlist9.C
  eaac16fcdf22c3bbc12d42310c8808c0  gcc/testsuite/g++.dg/cpp0x/constexpr-inline-1.C
  3028c5814c73724e635c8dabd796f82f  gcc/testsuite/g++.dg/cpp0x/constexpr-inline.C
  683db5db98fc74d6eadc7aa9954bdb28  gcc/testsuite/g++.dg/cpp0x/constexpr-invisiref1.C
  f9b635cca60e39e92118ea02065b9619  gcc/testsuite/g++.dg/cpp0x/constexpr-is_literal.C
  78f36282c1b77dbf3aea60391389914d  gcc/testsuite/g++.dg/cpp0x/constexpr-list1.C
  f288c9405b4d691b91ef3844e3b9dd08  gcc/testsuite/g++.dg/cpp0x/constexpr-list2.C
  25358bf087f99e99f8fbfc8bcd9f01be  gcc/testsuite/g++.dg/cpp0x/constexpr-main.C
  795a9ff23653541832d521a034128e3d  gcc/testsuite/g++.dg/cpp0x/constexpr-memchr.C
! eadd7fb5df730440e565cdf877d0c66f  gcc/testsuite/g++.dg/cpp0x/constexpr-memfn1.C
  211c953e7e3e1153239acc0f3fee4960  gcc/testsuite/g++.dg/cpp0x/constexpr-missing.C
  bf6f271556a8b151987d288c88c9b77d  gcc/testsuite/g++.dg/cpp0x/constexpr-mutable1.C
  123ce7f549210e41438da89fdee5c4f9  gcc/testsuite/g++.dg/cpp0x/constexpr-mutable2.C
  64cb73f78ba207f5415530836a27af3e  gcc/testsuite/g++.dg/cpp0x/constexpr-neg1.C
  e02963b07b48f6e88a5b755a616555ce  gcc/testsuite/g++.dg/cpp0x/constexpr-neg2.C
! 57ffb63082d5ee0a0b3b7fdf424bff83  gcc/testsuite/g++.dg/cpp0x/constexpr-neg3.C
  e5edb7904b37f34e9b7834b8b913ff6c  gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept.C
  48555ea134a5bce8f9bbcab609ea86ff  gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept2.C
  d1abe20c022e04bea9a779e8c64a213a  gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept3.C
--- 12853,12872 ----
  42b085cfa5a3a60f9db66f7cc0e24a06  gcc/testsuite/g++.dg/cpp0x/constexpr-initlist9.C
  eaac16fcdf22c3bbc12d42310c8808c0  gcc/testsuite/g++.dg/cpp0x/constexpr-inline-1.C
  3028c5814c73724e635c8dabd796f82f  gcc/testsuite/g++.dg/cpp0x/constexpr-inline.C
+ 3392aabfef120dae03389b4219cb231c  gcc/testsuite/g++.dg/cpp0x/constexpr-inst1.C
  683db5db98fc74d6eadc7aa9954bdb28  gcc/testsuite/g++.dg/cpp0x/constexpr-invisiref1.C
  f9b635cca60e39e92118ea02065b9619  gcc/testsuite/g++.dg/cpp0x/constexpr-is_literal.C
  78f36282c1b77dbf3aea60391389914d  gcc/testsuite/g++.dg/cpp0x/constexpr-list1.C
  f288c9405b4d691b91ef3844e3b9dd08  gcc/testsuite/g++.dg/cpp0x/constexpr-list2.C
  25358bf087f99e99f8fbfc8bcd9f01be  gcc/testsuite/g++.dg/cpp0x/constexpr-main.C
  795a9ff23653541832d521a034128e3d  gcc/testsuite/g++.dg/cpp0x/constexpr-memchr.C
! f017215ed1e9a0accaca9212f861d9f2  gcc/testsuite/g++.dg/cpp0x/constexpr-memfn1.C
  211c953e7e3e1153239acc0f3fee4960  gcc/testsuite/g++.dg/cpp0x/constexpr-missing.C
  bf6f271556a8b151987d288c88c9b77d  gcc/testsuite/g++.dg/cpp0x/constexpr-mutable1.C
  123ce7f549210e41438da89fdee5c4f9  gcc/testsuite/g++.dg/cpp0x/constexpr-mutable2.C
  64cb73f78ba207f5415530836a27af3e  gcc/testsuite/g++.dg/cpp0x/constexpr-neg1.C
  e02963b07b48f6e88a5b755a616555ce  gcc/testsuite/g++.dg/cpp0x/constexpr-neg2.C
! 4c036c92f09357e434d2815847248b49  gcc/testsuite/g++.dg/cpp0x/constexpr-neg3.C
  e5edb7904b37f34e9b7834b8b913ff6c  gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept.C
  48555ea134a5bce8f9bbcab609ea86ff  gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept2.C
  d1abe20c022e04bea9a779e8c64a213a  gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept3.C
*************** db629678a3f266682c3a566dd37c8b81  gcc/te
*** 12564,12570 ****
  99d2ac51d143edf6ad6147fb059396f4  gcc/testsuite/g++.dg/cpp0x/constexpr-ref9.C
  7c740c2600da22d8ec93e0d98e4d6ca6  gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C
  2837e188d6c2796de22556bf7f21a88d  gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret2.C
! c40c8e60c51460a8c4576cf7e9487ce3  gcc/testsuite/g++.dg/cpp0x/constexpr-rom.C
  0243ed8d6dc6cc84334b7250ce7437cc  gcc/testsuite/g++.dg/cpp0x/constexpr-sassert.C
  707c661c266e778c1084c105e9d93852  gcc/testsuite/g++.dg/cpp0x/constexpr-self1.C
  f0ab53b23cf8ef048b8891b5ab461a71  gcc/testsuite/g++.dg/cpp0x/constexpr-shift1.C
--- 12926,12932 ----
  99d2ac51d143edf6ad6147fb059396f4  gcc/testsuite/g++.dg/cpp0x/constexpr-ref9.C
  7c740c2600da22d8ec93e0d98e4d6ca6  gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C
  2837e188d6c2796de22556bf7f21a88d  gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret2.C
! c5fc1b06031517750a628c7785e37445  gcc/testsuite/g++.dg/cpp0x/constexpr-rom.C
  0243ed8d6dc6cc84334b7250ce7437cc  gcc/testsuite/g++.dg/cpp0x/constexpr-sassert.C
  707c661c266e778c1084c105e9d93852  gcc/testsuite/g++.dg/cpp0x/constexpr-self1.C
  f0ab53b23cf8ef048b8891b5ab461a71  gcc/testsuite/g++.dg/cpp0x/constexpr-shift1.C
*************** edabbe102f6cd2a1c942ec042cd84549  gcc/te
*** 12572,12578 ****
  7a36f88a96eb3ed09cffef0f69eabd70  gcc/testsuite/g++.dg/cpp0x/constexpr-sizeof1.C
  e18407480b883d38af683aed53d2093c  gcc/testsuite/g++.dg/cpp0x/constexpr-sizeof2.C
  f2a2bd8f3f76f7eef94a256167e0f091  gcc/testsuite/g++.dg/cpp0x/constexpr-sizeof3.C
! dd4700728489bec2565506d830e467d8  gcc/testsuite/g++.dg/cpp0x/constexpr-specialization.C
  0ad13d3b95df07add5489b194d0a0c30  gcc/testsuite/g++.dg/cpp0x/constexpr-static.C
  6750ddb6d120c8e7368eaae5150e78c1  gcc/testsuite/g++.dg/cpp0x/constexpr-static10.C
  7431d68cb7a29a352611ab8a7cdad67b  gcc/testsuite/g++.dg/cpp0x/constexpr-static11.C
--- 12934,12940 ----
  7a36f88a96eb3ed09cffef0f69eabd70  gcc/testsuite/g++.dg/cpp0x/constexpr-sizeof1.C
  e18407480b883d38af683aed53d2093c  gcc/testsuite/g++.dg/cpp0x/constexpr-sizeof2.C
  f2a2bd8f3f76f7eef94a256167e0f091  gcc/testsuite/g++.dg/cpp0x/constexpr-sizeof3.C
! f16dda62df059fc44ac847381763f4ed  gcc/testsuite/g++.dg/cpp0x/constexpr-specialization.C
  0ad13d3b95df07add5489b194d0a0c30  gcc/testsuite/g++.dg/cpp0x/constexpr-static.C
  6750ddb6d120c8e7368eaae5150e78c1  gcc/testsuite/g++.dg/cpp0x/constexpr-static10.C
  7431d68cb7a29a352611ab8a7cdad67b  gcc/testsuite/g++.dg/cpp0x/constexpr-static11.C
*************** e5015fd9f0623f977ee75ae8cbde2169  gcc/te
*** 12598,12603 ****
--- 12960,12966 ----
  f3d2db606274ae9c9c0d830bbb7ebb27  gcc/testsuite/g++.dg/cpp0x/constexpr-targ2.C
  ba638c2a427eedfb5bf4ec41ae37ed36  gcc/testsuite/g++.dg/cpp0x/constexpr-targ3.C
  4b2c8215ad8bda62399e4c6ea49cb25b  gcc/testsuite/g++.dg/cpp0x/constexpr-temp1.C
+ f721bfcd9caf4abf649ecc1b690d4df0  gcc/testsuite/g++.dg/cpp0x/constexpr-temp2.C
  c715cc77c59c08b4178c8df94944f49a  gcc/testsuite/g++.dg/cpp0x/constexpr-template1.C
  56e1285a24a4fbdb11978e8af54953ca  gcc/testsuite/g++.dg/cpp0x/constexpr-template10.C
  cf1b5ea6542ce4e4c53d713d22353179  gcc/testsuite/g++.dg/cpp0x/constexpr-template11.C
*************** d423b4e954788b36b3142a79b4a48be3  gcc/te
*** 12620,12625 ****
--- 12983,12989 ----
  10def9083d768359e04a00a40af24e13  gcc/testsuite/g++.dg/cpp0x/constexpr-type-def1.C
  e4e296b91d878f03ac7d69d384efc1f4  gcc/testsuite/g++.dg/cpp0x/constexpr-typedef1.C
  c868309eb133e9093601e0e6e0842fa8  gcc/testsuite/g++.dg/cpp0x/constexpr-typeid.C
+ 849160e4a60a1317ae36136fd99401e2  gcc/testsuite/g++.dg/cpp0x/constexpr-typeid2.C
  23385779f30a9c5bbced6e730f47b4ca  gcc/testsuite/g++.dg/cpp0x/constexpr-union.C
  3284c160f8cd7f776749a492a915afad  gcc/testsuite/g++.dg/cpp0x/constexpr-union2.C
  4c8925527b341742a37fea8686026b8c  gcc/testsuite/g++.dg/cpp0x/constexpr-union3.C
*************** c6ed9a173e49cf9b4145563ba4d4d758  gcc/te
*** 12655,12660 ****
--- 13019,13025 ----
  38cf671e2c9af718ef5149c2d09c8383  gcc/testsuite/g++.dg/cpp0x/cplusplus.C
  61947bc3307a11bf874ab41c139e4d41  gcc/testsuite/g++.dg/cpp0x/cplusplus_0x.C
  450d9ea3c6d9042a0f4898432bc9c749  gcc/testsuite/g++.dg/cpp0x/dc1.C
+ 9af5dd9f61d600e6480d6655596bb64e  gcc/testsuite/g++.dg/cpp0x/dc10.C
  2316af8e56dcf8aca79100a06b89fffa  gcc/testsuite/g++.dg/cpp0x/dc2.C
  c560a5c9ccf40d9f553aca2c54cdbc91  gcc/testsuite/g++.dg/cpp0x/dc3.C
  86a73804c5d75cd770c1b8d72949a84b  gcc/testsuite/g++.dg/cpp0x/dc4.C
*************** ad9d85d4500ad557c6ff5d638338e37f  gcc/te
*** 12709,12715 ****
  021557ce4daa43fc2cb8cd09714c4ed8  gcc/testsuite/g++.dg/cpp0x/decltype26.C
  36fe3ea3f2239bc457e9ecfbbf2b8b79  gcc/testsuite/g++.dg/cpp0x/decltype27.C
  cf4a89f6a97febee3af4a5464d4376e2  gcc/testsuite/g++.dg/cpp0x/decltype28.C
! c2f6b0368e7faea893818dbfe1543040  gcc/testsuite/g++.dg/cpp0x/decltype29.C
  f02ab3e345ebaf2c7e838bc888533dd9  gcc/testsuite/g++.dg/cpp0x/decltype3.C
  3ffe9a4bd265e99a11cdc602b9903250  gcc/testsuite/g++.dg/cpp0x/decltype30.C
  a66c63b98b7a52091279ca1dd1553df9  gcc/testsuite/g++.dg/cpp0x/decltype31.C
--- 13074,13080 ----
  021557ce4daa43fc2cb8cd09714c4ed8  gcc/testsuite/g++.dg/cpp0x/decltype26.C
  36fe3ea3f2239bc457e9ecfbbf2b8b79  gcc/testsuite/g++.dg/cpp0x/decltype27.C
  cf4a89f6a97febee3af4a5464d4376e2  gcc/testsuite/g++.dg/cpp0x/decltype28.C
! 6be8ee5bd899ec1cabd7cc32dc9fcb45  gcc/testsuite/g++.dg/cpp0x/decltype29.C
  f02ab3e345ebaf2c7e838bc888533dd9  gcc/testsuite/g++.dg/cpp0x/decltype3.C
  3ffe9a4bd265e99a11cdc602b9903250  gcc/testsuite/g++.dg/cpp0x/decltype30.C
  a66c63b98b7a52091279ca1dd1553df9  gcc/testsuite/g++.dg/cpp0x/decltype31.C
*************** f192edc5aab7159d4df05835d1b9ecd0  gcc/te
*** 12766,12771 ****
--- 13131,13138 ----
  21abe8f16d0d01595ec939e338038b2b  gcc/testsuite/g++.dg/cpp0x/decltype78.C
  6fca30204c9f40dfe34f43d06bc82ff6  gcc/testsuite/g++.dg/cpp0x/decltype79.C
  bbdff105c665351973aaa6a25eaa0940  gcc/testsuite/g++.dg/cpp0x/decltype8.C
+ f1a18efe6427e0498be3702d4614f0e5  gcc/testsuite/g++.dg/cpp0x/decltype80.C
+ 8b610d64de6905aa68e67fd0017df0c1  gcc/testsuite/g++.dg/cpp0x/decltype81.C
  037e88423c377bc171f0dea56fb59c12  gcc/testsuite/g++.dg/cpp0x/decltype9.C
  3b20b1750b2ca6ed0f61eed98be9416e  gcc/testsuite/g++.dg/cpp0x/deduce.C
  3187223bdfa9e7cd351538529dc18cf1  gcc/testsuite/g++.dg/cpp0x/defaulted1.C
*************** a5a365073fed8c5bd9263eef7df7b899  gcc/te
*** 12836,12842 ****
  2983561177357253ebbb1f5c1fa5f8e4  gcc/testsuite/g++.dg/cpp0x/deleted12.C
  20f5ce4631c9d2ed308c5c54cf5abbbf  gcc/testsuite/g++.dg/cpp0x/deleted13.C
  acf27aac5d288264569c9a250fea5c37  gcc/testsuite/g++.dg/cpp0x/deleted14.C
! b424551062a0c0731590f5604f125974  gcc/testsuite/g++.dg/cpp0x/deleted15.C
  80874d553919bf312b4841380187e0f9  gcc/testsuite/g++.dg/cpp0x/deleted2.C
  a9129f4cd34b93dbe745e3849ea1c38a  gcc/testsuite/g++.dg/cpp0x/deleted3.C
  d6f65d86ea217a2efd4c31ebedc9c9db  gcc/testsuite/g++.dg/cpp0x/deleted4.C
--- 13203,13209 ----
  2983561177357253ebbb1f5c1fa5f8e4  gcc/testsuite/g++.dg/cpp0x/deleted12.C
  20f5ce4631c9d2ed308c5c54cf5abbbf  gcc/testsuite/g++.dg/cpp0x/deleted13.C
  acf27aac5d288264569c9a250fea5c37  gcc/testsuite/g++.dg/cpp0x/deleted14.C
! f0e116d82b5a6de3a9e5af9a0a9f86f6  gcc/testsuite/g++.dg/cpp0x/deleted15.C
  80874d553919bf312b4841380187e0f9  gcc/testsuite/g++.dg/cpp0x/deleted2.C
  a9129f4cd34b93dbe745e3849ea1c38a  gcc/testsuite/g++.dg/cpp0x/deleted3.C
  d6f65d86ea217a2efd4c31ebedc9c9db  gcc/testsuite/g++.dg/cpp0x/deleted4.C
*************** ca26ad5278a2ac2347db2c2a451bdddf  gcc/te
*** 12850,12855 ****
--- 13217,13224 ----
  3c3ad36552189c7402279e37b7b6b485  gcc/testsuite/g++.dg/cpp0x/dependent3.C
  76420e94bb106abb520db142b01ffdcb  gcc/testsuite/g++.dg/cpp0x/depr-copy1.C
  4a822a67b0bd440c48f63f58b5bfe94c  gcc/testsuite/g++.dg/cpp0x/depr-copy2.C
+ 83ee21cd7668d7d0efc97ac677fbe487  gcc/testsuite/g++.dg/cpp0x/depr-copy3.C
+ ccd3a4b436ff2db96745ef4e4dbf9661  gcc/testsuite/g++.dg/cpp0x/depr-copy4.C
  861890614eff3a18d972ae21c8cedb3f  gcc/testsuite/g++.dg/cpp0x/desig1.C
  5b8e06a1ebe55e784146bad7f9381d14  gcc/testsuite/g++.dg/cpp0x/desig2.C
  9325507793124d714ba42d0b77847a70  gcc/testsuite/g++.dg/cpp0x/desig3.C
*************** f8840f0998d1d23158832c277c888d14  gcc/te
*** 12859,12864 ****
--- 13228,13234 ----
  56b051f9e6f8f51d106fe800ef06e54a  gcc/testsuite/g++.dg/cpp0x/diag2.C
  6d4629d016ec53ea282d36e875e3ca38  gcc/testsuite/g++.dg/cpp0x/diag3.C
  be2f327033fbf2bb4c287d571b817102  gcc/testsuite/g++.dg/cpp0x/dr2061.C
+ a07bd7a492a7f2ce7bfdf2835ea992a7  gcc/testsuite/g++.dg/cpp0x/dr2351.C
  bd568f7f1307dab8f5eb35fec36e71e2  gcc/testsuite/g++.dg/cpp0x/duplicate1.C
  d4426133b81413ad1d3051caa8d7c24a  gcc/testsuite/g++.dg/cpp0x/dyncast1.C
  66b2af972cbee8009e3e5f9895cb0a1a  gcc/testsuite/g++.dg/cpp0x/elision.C
*************** f55b557f4964b9a55a6419d83ef1aef3  gcc/te
*** 12916,12922 ****
  8a6c7d9c3f587b61cecae1fd579674cd  gcc/testsuite/g++.dg/cpp0x/enum_base5.C
  e7c84c63ead58305d6411cb0d3c78c80  gcc/testsuite/g++.dg/cpp0x/enum_base_warn.C
  1d7dcb56751b766d0b400f8472c4bd2f  gcc/testsuite/g++.dg/cpp0x/error1.C
! 64639657f60c12134229fb047d181d85  gcc/testsuite/g++.dg/cpp0x/error2.C
  f62a97fe793cbb758f511e602db308aa  gcc/testsuite/g++.dg/cpp0x/error3.C
  83ab65f197e5c2213b61b6e52383a309  gcc/testsuite/g++.dg/cpp0x/error4.C
  86f522a545bee30850aaa68973292430  gcc/testsuite/g++.dg/cpp0x/error5.C
--- 13286,13292 ----
  8a6c7d9c3f587b61cecae1fd579674cd  gcc/testsuite/g++.dg/cpp0x/enum_base5.C
  e7c84c63ead58305d6411cb0d3c78c80  gcc/testsuite/g++.dg/cpp0x/enum_base_warn.C
  1d7dcb56751b766d0b400f8472c4bd2f  gcc/testsuite/g++.dg/cpp0x/error1.C
! a5277e49f374917a632ac11e6a313844  gcc/testsuite/g++.dg/cpp0x/error2.C
  f62a97fe793cbb758f511e602db308aa  gcc/testsuite/g++.dg/cpp0x/error3.C
  83ab65f197e5c2213b61b6e52383a309  gcc/testsuite/g++.dg/cpp0x/error4.C
  86f522a545bee30850aaa68973292430  gcc/testsuite/g++.dg/cpp0x/error5.C
*************** fd7ae1b35a49011d276e428736f4f11a  gcc/te
*** 12931,12936 ****
--- 13301,13307 ----
  04d323815939ee79d5f47c7f6eb46028  gcc/testsuite/g++.dg/cpp0x/explicit12.C
  1a2bb99e92ffa2d1e6477ef38633d9ee  gcc/testsuite/g++.dg/cpp0x/explicit13.C
  08da4fbac4fef79e26d26b24a22682af  gcc/testsuite/g++.dg/cpp0x/explicit14.C
+ 63532988eb5c68fd93bfaccea9c6c7a6  gcc/testsuite/g++.dg/cpp0x/explicit15.C
  fec28f5357647ffbc93c027ac0fbf703  gcc/testsuite/g++.dg/cpp0x/explicit2.C
  ef5c8a016f49426952ad2493c17aef13  gcc/testsuite/g++.dg/cpp0x/explicit3.C
  438a3bc90c2ee1fc82bce90fdfa60da5  gcc/testsuite/g++.dg/cpp0x/explicit4.C
*************** b25800bcf52ab901ab8ddbc9ea153561  gcc/te
*** 12947,12953 ****
  b44ed86d19fab7414d28d1f3fd36a7f9  gcc/testsuite/g++.dg/cpp0x/extern_template-6.C
  592cc710524d5d21c28b065dd6c6de7c  gcc/testsuite/g++.dg/cpp0x/fallthrough1.C
  fabf296040650b16fb1ee761285e2841  gcc/testsuite/g++.dg/cpp0x/fallthrough2.C
! bcba4e18395ca9e8f9917788775bc3c1  gcc/testsuite/g++.dg/cpp0x/fntmp-equiv1.C
  e719fc0782c02fa926744188563c8722  gcc/testsuite/g++.dg/cpp0x/fntmpdefarg1.C
  101686a12f4027487963b47c2243cef7  gcc/testsuite/g++.dg/cpp0x/fntmpdefarg10.C
  d6975e94a38c08c7522664a293b0718d  gcc/testsuite/g++.dg/cpp0x/fntmpdefarg11.C
--- 13318,13324 ----
  b44ed86d19fab7414d28d1f3fd36a7f9  gcc/testsuite/g++.dg/cpp0x/extern_template-6.C
  592cc710524d5d21c28b065dd6c6de7c  gcc/testsuite/g++.dg/cpp0x/fallthrough1.C
  fabf296040650b16fb1ee761285e2841  gcc/testsuite/g++.dg/cpp0x/fallthrough2.C
! d4e053aec4e8eb7313176419926ab588  gcc/testsuite/g++.dg/cpp0x/fntmp-equiv1.C
  e719fc0782c02fa926744188563c8722  gcc/testsuite/g++.dg/cpp0x/fntmpdefarg1.C
  101686a12f4027487963b47c2243cef7  gcc/testsuite/g++.dg/cpp0x/fntmpdefarg10.C
  d6975e94a38c08c7522664a293b0718d  gcc/testsuite/g++.dg/cpp0x/fntmpdefarg11.C
*************** d4322d3a60ab9276cc1264c288db974f  gcc/te
*** 12982,12987 ****
--- 13353,13360 ----
  31af356fd46efd356e7ce6ac470d2427  gcc/testsuite/g++.dg/cpp0x/friend4.C
  026439040836176852865f6754370e70  gcc/testsuite/g++.dg/cpp0x/friend5.C
  736bc36c391541a4cfc54f1e72d16923  gcc/testsuite/g++.dg/cpp0x/friend6.C
+ e01f2e488294d133656e7be315b4b0b1  gcc/testsuite/g++.dg/cpp0x/friend7.C
+ f9dd224cca108136fa4e5142a8eeadcb  gcc/testsuite/g++.dg/cpp0x/friend8.C
  4ee6b098255abe7601f2a9f6bc71d637  gcc/testsuite/g++.dg/cpp0x/gen-attrs-1.C
  cb97cb3c29926aede38017aa01da015d  gcc/testsuite/g++.dg/cpp0x/gen-attrs-10.C
  7de2f3d73363a0558cd75484e381dcca  gcc/testsuite/g++.dg/cpp0x/gen-attrs-11.C
*************** bcd108fab23ce4022e3dec63114c9ff3  gcc/te
*** 13017,13031 ****
  ca1e38d01edaab7d8c2016f5d27be7c0  gcc/testsuite/g++.dg/cpp0x/gen-attrs-36.C
  4604ed42d9891e8fd3cc31832bd33578  gcc/testsuite/g++.dg/cpp0x/gen-attrs-37.C
  bb1fc6dd579b1a618936a4dadc14db97  gcc/testsuite/g++.dg/cpp0x/gen-attrs-38.C
! 98100318c81e01be9cde3359f29d785e  gcc/testsuite/g++.dg/cpp0x/gen-attrs-39-1.C
  1e9f1592b1b32cddbd98886cee9b568e  gcc/testsuite/g++.dg/cpp0x/gen-attrs-39.C
! d4be6942ea0a3d7cd69b59fbcb5ffd8f  gcc/testsuite/g++.dg/cpp0x/gen-attrs-4.C
  07d8ce7aa1bb54786d8dcfb173bcb392  gcc/testsuite/g++.dg/cpp0x/gen-attrs-40.C
  77126c882ae6b13b5eaf6bdda66c4f26  gcc/testsuite/g++.dg/cpp0x/gen-attrs-41.C
  97507133ec7407e6a8b7f3a4fc369b12  gcc/testsuite/g++.dg/cpp0x/gen-attrs-42.C
  862c0de8eebeba661b318aa5db148611  gcc/testsuite/g++.dg/cpp0x/gen-attrs-43.C
  12437169955b7d6fc70547853053ddac  gcc/testsuite/g++.dg/cpp0x/gen-attrs-44.C
! 8849387bb929004a2ffb108ee6698e48  gcc/testsuite/g++.dg/cpp0x/gen-attrs-45.C
  4b66f6c6e80bc0c50865a5ce21ae4025  gcc/testsuite/g++.dg/cpp0x/gen-attrs-46.C
  7b4e526ee8108f3100a358dd702343b1  gcc/testsuite/g++.dg/cpp0x/gen-attrs-47-1.C
  8cebe1c86890d80770a5d35af3f47211  gcc/testsuite/g++.dg/cpp0x/gen-attrs-47.C
--- 13390,13404 ----
  ca1e38d01edaab7d8c2016f5d27be7c0  gcc/testsuite/g++.dg/cpp0x/gen-attrs-36.C
  4604ed42d9891e8fd3cc31832bd33578  gcc/testsuite/g++.dg/cpp0x/gen-attrs-37.C
  bb1fc6dd579b1a618936a4dadc14db97  gcc/testsuite/g++.dg/cpp0x/gen-attrs-38.C
! acf3a0a43c6a09cd6775e581357b5c50  gcc/testsuite/g++.dg/cpp0x/gen-attrs-39-1.C
  1e9f1592b1b32cddbd98886cee9b568e  gcc/testsuite/g++.dg/cpp0x/gen-attrs-39.C
! 9510074df3f667bbd305490060d8c4f0  gcc/testsuite/g++.dg/cpp0x/gen-attrs-4.C
  07d8ce7aa1bb54786d8dcfb173bcb392  gcc/testsuite/g++.dg/cpp0x/gen-attrs-40.C
  77126c882ae6b13b5eaf6bdda66c4f26  gcc/testsuite/g++.dg/cpp0x/gen-attrs-41.C
  97507133ec7407e6a8b7f3a4fc369b12  gcc/testsuite/g++.dg/cpp0x/gen-attrs-42.C
  862c0de8eebeba661b318aa5db148611  gcc/testsuite/g++.dg/cpp0x/gen-attrs-43.C
  12437169955b7d6fc70547853053ddac  gcc/testsuite/g++.dg/cpp0x/gen-attrs-44.C
! 0a237dc484875157b3c279b6d4c2c495  gcc/testsuite/g++.dg/cpp0x/gen-attrs-45.C
  4b66f6c6e80bc0c50865a5ce21ae4025  gcc/testsuite/g++.dg/cpp0x/gen-attrs-46.C
  7b4e526ee8108f3100a358dd702343b1  gcc/testsuite/g++.dg/cpp0x/gen-attrs-47-1.C
  8cebe1c86890d80770a5d35af3f47211  gcc/testsuite/g++.dg/cpp0x/gen-attrs-47.C
*************** ca13ed21048782e55ad0ede2242369dc  gcc/te
*** 13041,13048 ****
  521123bd63091227c1498c5303ed24e6  gcc/testsuite/g++.dg/cpp0x/gen-attrs-55.C
  bc43ce97e9bc5daf3503a6eb18b5f526  gcc/testsuite/g++.dg/cpp0x/gen-attrs-56.C
  0b245fbb9cc3ac28a40dc6e149c159ec  gcc/testsuite/g++.dg/cpp0x/gen-attrs-57.C
! 21ffb7b66577a1e363c063bd539c7530  gcc/testsuite/g++.dg/cpp0x/gen-attrs-58.C
! 8b1eab7dca23abfa68d79475abe6ca6d  gcc/testsuite/g++.dg/cpp0x/gen-attrs-59.C
  d1722efa262e03d4b29a04648feeaa80  gcc/testsuite/g++.dg/cpp0x/gen-attrs-6.C
  c39b7a651d41ae8206e4121d2a561994  gcc/testsuite/g++.dg/cpp0x/gen-attrs-60.C
  7b0e99b02e7789690f20d9d1114188d0  gcc/testsuite/g++.dg/cpp0x/gen-attrs-61.C
--- 13414,13421 ----
  521123bd63091227c1498c5303ed24e6  gcc/testsuite/g++.dg/cpp0x/gen-attrs-55.C
  bc43ce97e9bc5daf3503a6eb18b5f526  gcc/testsuite/g++.dg/cpp0x/gen-attrs-56.C
  0b245fbb9cc3ac28a40dc6e149c159ec  gcc/testsuite/g++.dg/cpp0x/gen-attrs-57.C
! 5b573ee365932b792233053ff892427d  gcc/testsuite/g++.dg/cpp0x/gen-attrs-58.C
! 11bdda69623f08f0fc5831cca0c878f9  gcc/testsuite/g++.dg/cpp0x/gen-attrs-59.C
  d1722efa262e03d4b29a04648feeaa80  gcc/testsuite/g++.dg/cpp0x/gen-attrs-6.C
  c39b7a651d41ae8206e4121d2a561994  gcc/testsuite/g++.dg/cpp0x/gen-attrs-60.C
  7b0e99b02e7789690f20d9d1114188d0  gcc/testsuite/g++.dg/cpp0x/gen-attrs-61.C
*************** f55fa66c82d267feca5db82dc835210a  gcc/te
*** 13059,13064 ****
--- 13432,13440 ----
  1e684e9934b01f7c9c53981ab2a9cd8f  gcc/testsuite/g++.dg/cpp0x/gen-attrs-71.C
  47cf728d336aa8b06ee1ae9e0421fa73  gcc/testsuite/g++.dg/cpp0x/gen-attrs-72.C
  d7e6d19983fefaaf3bad930060d8d107  gcc/testsuite/g++.dg/cpp0x/gen-attrs-73.C
+ b0ab6438c410f443c2791a7956a155dd  gcc/testsuite/g++.dg/cpp0x/gen-attrs-74.C
+ 9cfea1f1343dd1303bdb11adb1fa60b4  gcc/testsuite/g++.dg/cpp0x/gen-attrs-75.C
+ daf9ff306e1d54572eb4cce16d2d598f  gcc/testsuite/g++.dg/cpp0x/gen-attrs-76.C
  29ab98a7b8d445bb51e5069dd98f7cca  gcc/testsuite/g++.dg/cpp0x/gen-attrs-8.C
  5dd92815927177080853d47a890f5439  gcc/testsuite/g++.dg/cpp0x/gen-attrs-9.C
  40caf35e131e99903b76e36f0e04b2a9  gcc/testsuite/g++.dg/cpp0x/gnu_fext-numeric-literals.C
*************** d63030a495d3f739100adf7533569800  gcc/te
*** 13094,13100 ****
  a7f67e0eab3d70e4f56823ba13a96ea4  gcc/testsuite/g++.dg/cpp0x/inh-ctor16.C
  00a6abfdfac7889f5de46610f04cc955  gcc/testsuite/g++.dg/cpp0x/inh-ctor17.C
  d3df2168b01c7df3891e31a076616e58  gcc/testsuite/g++.dg/cpp0x/inh-ctor18.C
! 798dc3612d523e6b99b6a497b1f8ae60  gcc/testsuite/g++.dg/cpp0x/inh-ctor19.C
  69ee4b066e7054d7163a882761fcc7c7  gcc/testsuite/g++.dg/cpp0x/inh-ctor2.C
  1e245cab6f0228068139bd22ddc79d66  gcc/testsuite/g++.dg/cpp0x/inh-ctor20.C
  ae53be78261501cbb9b25c7630f78cb5  gcc/testsuite/g++.dg/cpp0x/inh-ctor21.C
--- 13470,13476 ----
  a7f67e0eab3d70e4f56823ba13a96ea4  gcc/testsuite/g++.dg/cpp0x/inh-ctor16.C
  00a6abfdfac7889f5de46610f04cc955  gcc/testsuite/g++.dg/cpp0x/inh-ctor17.C
  d3df2168b01c7df3891e31a076616e58  gcc/testsuite/g++.dg/cpp0x/inh-ctor18.C
! 11d8958ab2d7606398a9776e2acf4891  gcc/testsuite/g++.dg/cpp0x/inh-ctor19.C
  69ee4b066e7054d7163a882761fcc7c7  gcc/testsuite/g++.dg/cpp0x/inh-ctor2.C
  1e245cab6f0228068139bd22ddc79d66  gcc/testsuite/g++.dg/cpp0x/inh-ctor20.C
  ae53be78261501cbb9b25c7630f78cb5  gcc/testsuite/g++.dg/cpp0x/inh-ctor21.C
*************** baf0ca575018768eef366236d48b8fdb  gcc/te
*** 13107,13113 ****
  48029edfe0255d5b925cd71e792db3c4  gcc/testsuite/g++.dg/cpp0x/inh-ctor28.C
  a7a3abf33b10ca007c7fa43b9a1b4c19  gcc/testsuite/g++.dg/cpp0x/inh-ctor29.C
  bbc63910b25c6f98c35fc2a38455ffe0  gcc/testsuite/g++.dg/cpp0x/inh-ctor3.C
! ef58cfd45b994e29a5ffb11ea1d0cd8b  gcc/testsuite/g++.dg/cpp0x/inh-ctor30.C
  d07f1b6155878998e554213d7b63dd95  gcc/testsuite/g++.dg/cpp0x/inh-ctor31.C
  eb356bb5e47b9ce813f868c74583298f  gcc/testsuite/g++.dg/cpp0x/inh-ctor32.C
  91fb1bbb0e0976a6ebadf14fc40f2b46  gcc/testsuite/g++.dg/cpp0x/inh-ctor33.C
--- 13483,13489 ----
  48029edfe0255d5b925cd71e792db3c4  gcc/testsuite/g++.dg/cpp0x/inh-ctor28.C
  a7a3abf33b10ca007c7fa43b9a1b4c19  gcc/testsuite/g++.dg/cpp0x/inh-ctor29.C
  bbc63910b25c6f98c35fc2a38455ffe0  gcc/testsuite/g++.dg/cpp0x/inh-ctor3.C
! 68ef8eb076ec0dac2031c4be70ec428b  gcc/testsuite/g++.dg/cpp0x/inh-ctor30.C
  d07f1b6155878998e554213d7b63dd95  gcc/testsuite/g++.dg/cpp0x/inh-ctor31.C
  eb356bb5e47b9ce813f868c74583298f  gcc/testsuite/g++.dg/cpp0x/inh-ctor32.C
  91fb1bbb0e0976a6ebadf14fc40f2b46  gcc/testsuite/g++.dg/cpp0x/inh-ctor33.C
*************** f933eabf4dcde8d87d03370c9257ce9d  gcc/te
*** 13127,13132 ****
--- 13503,13509 ----
  a4d425861fbc15c68f5c3a9c0b1d1b8c  gcc/testsuite/g++.dg/cpp0x/initlist-array11.C
  acdc66e4d80b02a42a452d3b516a42b6  gcc/testsuite/g++.dg/cpp0x/initlist-array12.C
  85db0f3cfbd5f43f0c7eeee7a715292b  gcc/testsuite/g++.dg/cpp0x/initlist-array13.C
+ 2fdfbb5de00ce9e1c9d3b1de20d688a7  gcc/testsuite/g++.dg/cpp0x/initlist-array14.C
  09f09079c354ad93c3844a14549e0854  gcc/testsuite/g++.dg/cpp0x/initlist-array2.C
  8c888f7ab5cc44480801a14718225380  gcc/testsuite/g++.dg/cpp0x/initlist-array3.C
  6c1907913d332611dd16d03002d759f9  gcc/testsuite/g++.dg/cpp0x/initlist-array4.C
*************** f0118d5667765863d9b140fbe97f21fe  gcc/te
*** 13138,13143 ****
--- 13515,13521 ----
  110edad11491436d7ef19ef7a8517bf0  gcc/testsuite/g++.dg/cpp0x/initlist-base1.C
  56c081b4510fd319fae6d0ce40b10398  gcc/testsuite/g++.dg/cpp0x/initlist-base2.C
  3bd8f8e03e5ae6051554dde874bf03f6  gcc/testsuite/g++.dg/cpp0x/initlist-base3.C
+ f01a40c7b455f2057375d7377cc73996  gcc/testsuite/g++.dg/cpp0x/initlist-base4.C
  68f886cb4e912d3c297c2a92ab92832f  gcc/testsuite/g++.dg/cpp0x/initlist-cast1.C
  6c5330c1db9324895d3422e0847edb6d  gcc/testsuite/g++.dg/cpp0x/initlist-cleanup1.C
  994605127bf908d7a5b9745b9991101e  gcc/testsuite/g++.dg/cpp0x/initlist-ctor1.C
*************** f8949630a7a02f66d0ceb796b5525cb8  gcc/te
*** 13159,13164 ****
--- 13537,13544 ----
  c7426143406ef7a62dfbbb6b6ef974ca  gcc/testsuite/g++.dg/cpp0x/initlist-new3.C
  2462ced2f35f174d3a192fbb553556f8  gcc/testsuite/g++.dg/cpp0x/initlist-new4.C
  0eb8216638573813eaf1d41d50899505  gcc/testsuite/g++.dg/cpp0x/initlist-new5.C
+ eb8899f6095da627d668fbc099e59316  gcc/testsuite/g++.dg/cpp0x/initlist-new6.C
+ 99344f656bc7edb059f04cde31dcaa17  gcc/testsuite/g++.dg/cpp0x/initlist-nrv1.C
  bcbe398391cda8139c8462f46935b7e2  gcc/testsuite/g++.dg/cpp0x/initlist-opt.C
  e572423dbc63856346f68c0f83dab54a  gcc/testsuite/g++.dg/cpp0x/initlist-overload1.C
  a054a7d4e96233b7a3a6591843a8d33f  gcc/testsuite/g++.dg/cpp0x/initlist-pmf1.C
*************** f787403dc64b99be9c0c9b763121c4d7  gcc/te
*** 13195,13208 ****
  69eec03ee9eb1e7dae7248aae0903fd0  gcc/testsuite/g++.dg/cpp0x/initlist113.C
  4d9bf62c5a26d090ff28c1f8c54bbfcf  gcc/testsuite/g++.dg/cpp0x/initlist114.C
  2a71e373ad8beaab8b8cdfe204c0f1fe  gcc/testsuite/g++.dg/cpp0x/initlist115.C
  f3e3a423075b6d0d03243d7a3125c656  gcc/testsuite/g++.dg/cpp0x/initlist118.C
  31217547242c5595304fc359b0208dd1  gcc/testsuite/g++.dg/cpp0x/initlist119.C
  72c0cb48cd09853c2fc6940f74aaccd2  gcc/testsuite/g++.dg/cpp0x/initlist12.C
  29c35f2a6e40093e69a57af1acacdc58  gcc/testsuite/g++.dg/cpp0x/initlist120.C
  541d894667b752e80fa965821d083b78  gcc/testsuite/g++.dg/cpp0x/initlist121.C
! 92d788f8062cd25acbb2f8240948a8d4  gcc/testsuite/g++.dg/cpp0x/initlist122.C
  55f71400cae4fa6705b0241bc9d07d6b  gcc/testsuite/g++.dg/cpp0x/initlist123.C
  b7697481944ebf7dcffa343dfbabc854  gcc/testsuite/g++.dg/cpp0x/initlist124.C
  a5e64985a46db12492fa03d5e7dfd347  gcc/testsuite/g++.dg/cpp0x/initlist13.C
  3071307e831ae441c218cbab9dbc1d8f  gcc/testsuite/g++.dg/cpp0x/initlist14.C
  803cc72c140b1d53ee7a3e50e344d414  gcc/testsuite/g++.dg/cpp0x/initlist15.C
--- 13575,13595 ----
  69eec03ee9eb1e7dae7248aae0903fd0  gcc/testsuite/g++.dg/cpp0x/initlist113.C
  4d9bf62c5a26d090ff28c1f8c54bbfcf  gcc/testsuite/g++.dg/cpp0x/initlist114.C
  2a71e373ad8beaab8b8cdfe204c0f1fe  gcc/testsuite/g++.dg/cpp0x/initlist115.C
+ c09d8a2f7e24e1a7e068cf5b2319558b  gcc/testsuite/g++.dg/cpp0x/initlist116.C
+ 324fec01236224360d8beb35667b018a  gcc/testsuite/g++.dg/cpp0x/initlist117.C
  f3e3a423075b6d0d03243d7a3125c656  gcc/testsuite/g++.dg/cpp0x/initlist118.C
  31217547242c5595304fc359b0208dd1  gcc/testsuite/g++.dg/cpp0x/initlist119.C
  72c0cb48cd09853c2fc6940f74aaccd2  gcc/testsuite/g++.dg/cpp0x/initlist12.C
  29c35f2a6e40093e69a57af1acacdc58  gcc/testsuite/g++.dg/cpp0x/initlist120.C
  541d894667b752e80fa965821d083b78  gcc/testsuite/g++.dg/cpp0x/initlist121.C
! 8db0d50e3e1f1d2c08b37dbe261bf2b7  gcc/testsuite/g++.dg/cpp0x/initlist122.C
  55f71400cae4fa6705b0241bc9d07d6b  gcc/testsuite/g++.dg/cpp0x/initlist123.C
  b7697481944ebf7dcffa343dfbabc854  gcc/testsuite/g++.dg/cpp0x/initlist124.C
+ 29ae4f7c867bddb1dae9a4045c064365  gcc/testsuite/g++.dg/cpp0x/initlist125.C
+ fe1759287ef65bc9b64a45ce0e53055f  gcc/testsuite/g++.dg/cpp0x/initlist126.C
+ 0cf4db6ce0293c03e6d931e481231301  gcc/testsuite/g++.dg/cpp0x/initlist127.C
+ 5fb0b35772deba539e69a7869f4312df  gcc/testsuite/g++.dg/cpp0x/initlist128.C
+ 427ec04d095e40d4e721a366c58d12a9  gcc/testsuite/g++.dg/cpp0x/initlist129.C
  a5e64985a46db12492fa03d5e7dfd347  gcc/testsuite/g++.dg/cpp0x/initlist13.C
  3071307e831ae441c218cbab9dbc1d8f  gcc/testsuite/g++.dg/cpp0x/initlist14.C
  803cc72c140b1d53ee7a3e50e344d414  gcc/testsuite/g++.dg/cpp0x/initlist15.C
*************** f6dc1b5373312bc10801343f86529643  gcc/te
*** 13241,13247 ****
  e78b41b2aa461ebe540e52ebf6339d42  gcc/testsuite/g++.dg/cpp0x/initlist45.C
  5522196cccbc6b3aa3e3d90a513b05ca  gcc/testsuite/g++.dg/cpp0x/initlist46.C
  012b0613830ba9e997ec6a1aa5dd1787  gcc/testsuite/g++.dg/cpp0x/initlist47.C
! d375ad850b8e39546ef2da5df1ce9682  gcc/testsuite/g++.dg/cpp0x/initlist48.C
  fa1b568c2a6b67c0aef8139179850064  gcc/testsuite/g++.dg/cpp0x/initlist49.C
  481aa69f954fee0d04b6369bade4e79f  gcc/testsuite/g++.dg/cpp0x/initlist5.C
  f3fac88e7a8455137c0751872cb1eb16  gcc/testsuite/g++.dg/cpp0x/initlist50.C
--- 13628,13634 ----
  e78b41b2aa461ebe540e52ebf6339d42  gcc/testsuite/g++.dg/cpp0x/initlist45.C
  5522196cccbc6b3aa3e3d90a513b05ca  gcc/testsuite/g++.dg/cpp0x/initlist46.C
  012b0613830ba9e997ec6a1aa5dd1787  gcc/testsuite/g++.dg/cpp0x/initlist47.C
! 570375a26102f2dd3bb59d344bdaabdc  gcc/testsuite/g++.dg/cpp0x/initlist48.C
  fa1b568c2a6b67c0aef8139179850064  gcc/testsuite/g++.dg/cpp0x/initlist49.C
  481aa69f954fee0d04b6369bade4e79f  gcc/testsuite/g++.dg/cpp0x/initlist5.C
  f3fac88e7a8455137c0751872cb1eb16  gcc/testsuite/g++.dg/cpp0x/initlist50.C
*************** a33532ad7af196396dbdaa8318439b90  gcc/te
*** 13270,13282 ****
  a92c5fb6a84d2db86bc3c1e4b73d2393  gcc/testsuite/g++.dg/cpp0x/initlist72.C
  5cf8b2f84ab8fc8e89731cbd8b53f9ba  gcc/testsuite/g++.dg/cpp0x/initlist73.C
  a24ee93bb483567fad2912fb15cba6a3  gcc/testsuite/g++.dg/cpp0x/initlist74.C
! 6119e2abeed29d3f2c5eefb5b14be301  gcc/testsuite/g++.dg/cpp0x/initlist75.C
  17dc666d60c45aa84904ad515bee0392  gcc/testsuite/g++.dg/cpp0x/initlist76.C
  d5b016047cf8f1ab79bc52ea41141d4c  gcc/testsuite/g++.dg/cpp0x/initlist77.C
  0ea881619a668e35542e587d9eb84ead  gcc/testsuite/g++.dg/cpp0x/initlist78.C
  11f7b1bf623dafb7980bb254a51eb178  gcc/testsuite/g++.dg/cpp0x/initlist79.C
  745c3a25cb48bd95f6daa8a7b67b1d9f  gcc/testsuite/g++.dg/cpp0x/initlist8.C
! 709816d80a76a004d3fceb3268834ac3  gcc/testsuite/g++.dg/cpp0x/initlist80.C
  02ef88866a33af3b82367f920d4380ba  gcc/testsuite/g++.dg/cpp0x/initlist81.C
  3df81dd8acdfbccf6fba7648b64b32c5  gcc/testsuite/g++.dg/cpp0x/initlist82.C
  83de25293174e756116bd26b4cedab21  gcc/testsuite/g++.dg/cpp0x/initlist83.C
--- 13657,13669 ----
  a92c5fb6a84d2db86bc3c1e4b73d2393  gcc/testsuite/g++.dg/cpp0x/initlist72.C
  5cf8b2f84ab8fc8e89731cbd8b53f9ba  gcc/testsuite/g++.dg/cpp0x/initlist73.C
  a24ee93bb483567fad2912fb15cba6a3  gcc/testsuite/g++.dg/cpp0x/initlist74.C
! 2ccd4c0f07953b34c0d830bcb13754a5  gcc/testsuite/g++.dg/cpp0x/initlist75.C
  17dc666d60c45aa84904ad515bee0392  gcc/testsuite/g++.dg/cpp0x/initlist76.C
  d5b016047cf8f1ab79bc52ea41141d4c  gcc/testsuite/g++.dg/cpp0x/initlist77.C
  0ea881619a668e35542e587d9eb84ead  gcc/testsuite/g++.dg/cpp0x/initlist78.C
  11f7b1bf623dafb7980bb254a51eb178  gcc/testsuite/g++.dg/cpp0x/initlist79.C
  745c3a25cb48bd95f6daa8a7b67b1d9f  gcc/testsuite/g++.dg/cpp0x/initlist8.C
! 70de866136853347438c99c1733b7368  gcc/testsuite/g++.dg/cpp0x/initlist80.C
  02ef88866a33af3b82367f920d4380ba  gcc/testsuite/g++.dg/cpp0x/initlist81.C
  3df81dd8acdfbccf6fba7648b64b32c5  gcc/testsuite/g++.dg/cpp0x/initlist82.C
  83de25293174e756116bd26b4cedab21  gcc/testsuite/g++.dg/cpp0x/initlist83.C
*************** da8580feb725981b1da24c49345d0739  gcc/te
*** 13308,13313 ****
--- 13695,13701 ----
  7da1d317c0e74ab901f17a10189784da  gcc/testsuite/g++.dg/cpp0x/inline-ns8.C
  81170031ad2a38d5f6c077134ed385f1  gcc/testsuite/g++.dg/cpp0x/inline-ns9.C
  3e4053a4f87f13e8a2207eebaa53813e  gcc/testsuite/g++.dg/cpp0x/iop.C
+ c6b850154544f0ba1eb99965d56573c7  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-104403.C
  9162d8fc6d7cb877ccad37a220cff3e3  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C
  af1ad4683eb1f8657e01dc730a845031  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-58566.C
  0d04db583ca02925777a135fa0e718a2  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-59483.C
*************** dbabde6c9b65d0b2533bd2602dd6b6c4  gcc/te
*** 13379,13384 ****
--- 13767,13773 ----
  f84ddfe5534d65a28836f3e1f7f92bbe  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy.C
  6ae63f2c8f3dcde85465487f60927b71  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctor-neg.C
  8e8636849d06c71cef7fbe0973b2ace5  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctors.C
+ b7541efb5750181bf83ef0c6c0074ed7  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-current-inst1.C
  620c51f35ce9293367e1ae8b3038f83a  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-debug.C
  23762f5c7832f1cc2669f9358277141c  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-decltype1.C
  3ad56243aecddd505746acfd0489c7b7  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-decltype2.C
*************** b0a5175c866c3f8cc9595a3a187eaad5  gcc/te
*** 13401,13407 ****
  38a5c8e0569ee441818049e1f170838f  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-dependent1.C
  e8dd4784bd328df4e1de1999906f386b  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-diag1.C
  e4baead2918480aa1e47e55ecfdaef26  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-direct-init.C
! 648328393aca4082788e0744e52e3e04  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C
  0ab2ed931f43d51b53e363fe32167ff6  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C
  9d4fde9cfb96267081f1aa77d2deeb36  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err1.C
  060163907dc82ea50945260f2b6fdcc8  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err2.C
--- 13790,13797 ----
  38a5c8e0569ee441818049e1f170838f  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-dependent1.C
  e8dd4784bd328df4e1de1999906f386b  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-diag1.C
  e4baead2918480aa1e47e55ecfdaef26  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-direct-init.C
! 28ad78082c92c4d37008d067d39e4eb1  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh.C
! 996dcc09722bd8ebc9d5816ef57c24b2  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C
  0ab2ed931f43d51b53e363fe32167ff6  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C
  9d4fde9cfb96267081f1aa77d2deeb36  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err1.C
  060163907dc82ea50945260f2b6fdcc8  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err2.C
*************** bc00a977840d32643b8a79c194a24b04  gcc/te
*** 13452,13460 ****
  3d5fac660854c02a5bec76cbbd0ba95d  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-lookup-neg.C
  0c66941b78fb17dd08b48ed0294e0479  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C
  bc4834e829a567ab458b88513efb0adc  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle2.C
! a3babe4a5a450c501c6d3daf88a2a741  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle3.C
  9dc008f9d5045d3deab89ba4ac3a1544  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle4.C
! 543ea50ea09345cb7118e5bb0639b733  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle5.C
  6240609c482a5a29a2e64e03e50d440c  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle6.C
  eeae91bf7da7535c64375c8b6e2ad746  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mixed.C
  3292c801823c4c4aa6fe6e560dd10624  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable.C
--- 13842,13850 ----
  3d5fac660854c02a5bec76cbbd0ba95d  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-lookup-neg.C
  0c66941b78fb17dd08b48ed0294e0479  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C
  bc4834e829a567ab458b88513efb0adc  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle2.C
! 7c30ed1f13edc6346b784047a7b8fb5f  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle3.C
  9dc008f9d5045d3deab89ba4ac3a1544  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle4.C
! fd4bc46fcec54561fe0bc8e8acbf6434  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle5.C
  6240609c482a5a29a2e64e03e50d440c  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle6.C
  eeae91bf7da7535c64375c8b6e2ad746  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mixed.C
  3292c801823c4c4aa6fe6e560dd10624  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable.C
*************** b4ee4e860077c15b5f446a344ee80eb1  gcc/te
*** 13468,13473 ****
--- 13858,13865 ----
  5fbb17b854d8fd1a54b7633e8347d839  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested6.C
  2afcec0e454c28a93482d36c07cd282d  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested7.C
  39c02f2dc9c62660fbcbb8626a08e194  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested8.C
+ 549065376847c792966d6df2dbb610c3  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested9.C
+ 74a6ccc39520b83c4e5f20b47deae002  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested9a.C
  473ec19f81d0003cf47717bbb9c67549  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-non-const.C
  13b04ea49dab2a7467a572aa0ce6de66  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-non-local.C
  fc0cbc487d6a1b6d02de8cbeb0f06f70  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nop.C
*************** b91279d49de21edd13a5e72ad91a5008  gcc/te
*** 13497,13503 ****
  e81e4a7747008a7958f1b544db0eea2f  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow3.C
  adb1d2fb2d918c692d644ded0dc5f428  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-std-function.C
  b8cc2b4775f53161af6fb5ad8dd9aec9  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-stmtexpr1.C
! 6b1b26afb40c5b2d2ebfcb3cb099bcc2  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C
  86e977ceaeb59c6acfa35d4a54405c92  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch2.C
  435ee00e9c56e1b0748b8cde4e05e6f2  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-syntax1.C
  0b50e569431704571ea619200252f236  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template.C
--- 13889,13895 ----
  e81e4a7747008a7958f1b544db0eea2f  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow3.C
  adb1d2fb2d918c692d644ded0dc5f428  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-std-function.C
  b8cc2b4775f53161af6fb5ad8dd9aec9  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-stmtexpr1.C
! b5a8c7f6bf983d4b8cd194d08c08cd65  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C
  86e977ceaeb59c6acfa35d4a54405c92  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch2.C
  435ee00e9c56e1b0748b8cde4e05e6f2  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-syntax1.C
  0b50e569431704571ea619200252f236  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template.C
*************** bb6feb4793b61fdd7abfa89b1284d0ab  gcc/te
*** 13548,13554 ****
  3ac45d44a43ae18f34839cf90f32815e  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic10.C
  e28b7ba4f97d99103a4aaa5baa5f22b8  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic11.C
  1cdbaa0235aedc3580cd19f0e8e140c6  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic12.C
! e14a3518aff17f223367df506659dc75  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic13.C
  4207a17bd687f925ffa814b5967e6fad  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic2.C
  4aceadd2b246ab66ad033bf33c21e79a  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic3.C
  f834269fe12aa32c10b9a1ccedad58d6  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic4.C
--- 13940,13950 ----
  3ac45d44a43ae18f34839cf90f32815e  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic10.C
  e28b7ba4f97d99103a4aaa5baa5f22b8  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic11.C
  1cdbaa0235aedc3580cd19f0e8e140c6  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic12.C
! 5bc795ac80a1e21f0e1df6f13d988d68  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic13.C
! 44bb5e5b819b29c02d3005d0e5d5bbc7  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic14.C
! d0793b20a4018695e109c6efdcc74b65  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic14a.C
! 4d06cd271ded7f3cbc1cf43dc0dd3cdb  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic15.C
! 84dded20a87284d7f6e2c13030986c6a  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic16.C
  4207a17bd687f925ffa814b5967e6fad  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic2.C
  4aceadd2b246ab66ad033bf33c21e79a  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic3.C
  f834269fe12aa32c10b9a1ccedad58d6  gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic4.C
*************** c5a2b23e292dd396ddf3637bb4fdfc11  gcc/te
*** 13598,13605 ****
  48229a2de7f7c1fa6e1b2f8a03c23281  gcc/testsuite/g++.dg/cpp0x/noexcept03.C
  2a0c2baa8007810de477502a427981b6  gcc/testsuite/g++.dg/cpp0x/noexcept04.C
  089ec1d7518156a5d6a94f2652816ae4  gcc/testsuite/g++.dg/cpp0x/noexcept05.C
! a92beb6dbe320fc85e5fa38d109d550d  gcc/testsuite/g++.dg/cpp0x/noexcept06.C
! e4e4ad572dd98eec19762cbc9b5cad9f  gcc/testsuite/g++.dg/cpp0x/noexcept07.C
  665481fa567941e2d63f5c077850b637  gcc/testsuite/g++.dg/cpp0x/noexcept08.C
  ab80de8b3a73be629d9ec38a2fa0910f  gcc/testsuite/g++.dg/cpp0x/noexcept09.C
  41709bd79f8c59f70e3a34cf743752de  gcc/testsuite/g++.dg/cpp0x/noexcept10.C
--- 13994,14001 ----
  48229a2de7f7c1fa6e1b2f8a03c23281  gcc/testsuite/g++.dg/cpp0x/noexcept03.C
  2a0c2baa8007810de477502a427981b6  gcc/testsuite/g++.dg/cpp0x/noexcept04.C
  089ec1d7518156a5d6a94f2652816ae4  gcc/testsuite/g++.dg/cpp0x/noexcept05.C
! 97f9f2ea61d4edad1ff45ca193169fb5  gcc/testsuite/g++.dg/cpp0x/noexcept06.C
! 5946c50f2228f905593efe91484f2fcf  gcc/testsuite/g++.dg/cpp0x/noexcept07.C
  665481fa567941e2d63f5c077850b637  gcc/testsuite/g++.dg/cpp0x/noexcept08.C
  ab80de8b3a73be629d9ec38a2fa0910f  gcc/testsuite/g++.dg/cpp0x/noexcept09.C
  41709bd79f8c59f70e3a34cf743752de  gcc/testsuite/g++.dg/cpp0x/noexcept10.C
*************** cfad5669952ee25edab337f1649e6f22  gcc/te
*** 13626,13632 ****
  a1bfa16a893d783dac2fb16b310309aa  gcc/testsuite/g++.dg/cpp0x/noexcept31.C
  561d9b65f7315d6bab3a710ec4347c9c  gcc/testsuite/g++.dg/cpp0x/noexcept32.C
  3d6304a7e40ea170469ff8d2c1f0376e  gcc/testsuite/g++.dg/cpp0x/noexcept33.C
! f6c3e9620dfcdf1c35aefba4d784cf8d  gcc/testsuite/g++.dg/cpp0x/noexcept34.C
  25cfc463f9d68f24a4020039ffdf7ba2  gcc/testsuite/g++.dg/cpp0x/noexcept35.C
  a0e44dc1e8f11505922ef4ad50fc35c3  gcc/testsuite/g++.dg/cpp0x/noexcept36.C
  6ca0bee4c20a976bb07ee1cc45dda9a4  gcc/testsuite/g++.dg/cpp0x/noexcept37.C
--- 14022,14028 ----
  a1bfa16a893d783dac2fb16b310309aa  gcc/testsuite/g++.dg/cpp0x/noexcept31.C
  561d9b65f7315d6bab3a710ec4347c9c  gcc/testsuite/g++.dg/cpp0x/noexcept32.C
  3d6304a7e40ea170469ff8d2c1f0376e  gcc/testsuite/g++.dg/cpp0x/noexcept33.C
! dd6f731dbd21ffcdf674b03415ed7898  gcc/testsuite/g++.dg/cpp0x/noexcept34.C
  25cfc463f9d68f24a4020039ffdf7ba2  gcc/testsuite/g++.dg/cpp0x/noexcept35.C
  a0e44dc1e8f11505922ef4ad50fc35c3  gcc/testsuite/g++.dg/cpp0x/noexcept36.C
  6ca0bee4c20a976bb07ee1cc45dda9a4  gcc/testsuite/g++.dg/cpp0x/noexcept37.C
*************** e423ce7aafce83ac62c98b5375c8fce1  gcc/te
*** 13663,13672 ****
--- 14059,14071 ----
  8e3444aa5b9c9f35186b3ad1658c800d  gcc/testsuite/g++.dg/cpp0x/noexcept68.C
  d0df5cd0a2632cf9b66f18aec0cc6e21  gcc/testsuite/g++.dg/cpp0x/noexcept69.C
  02e09b143c63de3a81f9191fa6e9404d  gcc/testsuite/g++.dg/cpp0x/noexcept70.C
+ f3d2fffd65d07f53816efd48f798b38b  gcc/testsuite/g++.dg/cpp0x/noexcept71.C
  8c12591fc58e3959d1d0358f4a377d5a  gcc/testsuite/g++.dg/cpp0x/noexcept72.C
  dd169c18a4c3d9571a259e67ef8648ef  gcc/testsuite/g++.dg/cpp0x/noexcept73.C
  12fa60794a927f2fea0965155d13a228  gcc/testsuite/g++.dg/cpp0x/noexcept74.C
  1f3e552c43d920f75b1dde7450f0be06  gcc/testsuite/g++.dg/cpp0x/noexcept74a.C
+ e2b18220e252af35e7715d6c7d99895e  gcc/testsuite/g++.dg/cpp0x/noexcept75.C
+ b86be1b4c25b3063ddc7e4cb746b89ad  gcc/testsuite/g++.dg/cpp0x/noexcept76.C
  3bf83ccb654cedbb57a45851fb14aa9d  gcc/testsuite/g++.dg/cpp0x/nolinkage1.C
  6b7c91b931bbdacbbffbf9b90a79bc6a  gcc/testsuite/g++.dg/cpp0x/nolinkage1.h
  c92e0eda44dd6b3d74960b249fa5204f  gcc/testsuite/g++.dg/cpp0x/nolinkage1a.cc
*************** cdc2dd8446367df53617b11c9a86394a  gcc/te
*** 13685,13690 ****
--- 14084,14090 ----
  cb5b10af278fbafac78a6d53829b3d37  gcc/testsuite/g++.dg/cpp0x/not_special.C
  e950526c0d7127f5718072cb9366641e  gcc/testsuite/g++.dg/cpp0x/nsdmi-aggr1.C
  94c644ef2cfc0af0de150c6699b774ed  gcc/testsuite/g++.dg/cpp0x/nsdmi-anon-struct1.C
+ 5c1de897b64b39fb775a2664a3561676  gcc/testsuite/g++.dg/cpp0x/nsdmi-array1.C
  333540e9a24be2138a5f0577b985d91d  gcc/testsuite/g++.dg/cpp0x/nsdmi-const1.C
  8d47330d250732b4512c767f7e3de3c4  gcc/testsuite/g++.dg/cpp0x/nsdmi-defer1.C
  4e737e4950688a6f722d97a47d7cf157  gcc/testsuite/g++.dg/cpp0x/nsdmi-defer2.C
*************** ef20e3e0e53b4fb3163e5066efb89b64  gcc/te
*** 13701,13706 ****
--- 14101,14108 ----
  e7c5d3acfd99916be199f83340ddc3b9  gcc/testsuite/g++.dg/cpp0x/nsdmi-list4.C
  4f2b0e8a700c813c8e71144b9058962b  gcc/testsuite/g++.dg/cpp0x/nsdmi-list5.C
  fa7f946c0cff896c422779a2b5819550  gcc/testsuite/g++.dg/cpp0x/nsdmi-list6.C
+ ee42a0aeb16a7131a04999eccc339e5f  gcc/testsuite/g++.dg/cpp0x/nsdmi-list7.C
+ c0d475fdef395d626f2b38aa568cbf9e  gcc/testsuite/g++.dg/cpp0x/nsdmi-list8.C
  bb52d0707dea46cd2224e8f36c397c29  gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C
  532b3e2c733c1b03dfa22d18667650fb  gcc/testsuite/g++.dg/cpp0x/nsdmi-sizeof.C
  6a97f223fff723db9f950c32a7828e35  gcc/testsuite/g++.dg/cpp0x/nsdmi-template1.C
*************** f306084dc287062131a42d269c3790f5  gcc/te
*** 13734,13740 ****
--- 14136,14145 ----
  e5098383445167a9adaab2059cbe85c6  gcc/testsuite/g++.dg/cpp0x/nsdmi-union5.C
  ed53ad00262a806fb5d832cb3c14fa67  gcc/testsuite/g++.dg/cpp0x/nsdmi-union6.C
  54a77ab9cbeaf8802273eefd6e7a3c55  gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual1.C
+ 3c0cb799b24991eb3f632cb370865807  gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual1a.C
  f9a95403a108b26b2de03038d43da14f  gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual2.C
+ 55416802843324b7e118899642174407  gcc/testsuite/g++.dg/cpp0x/nsdmi-warn1.C
+ c9f4270054943c80bf86b903b1e476af  gcc/testsuite/g++.dg/cpp0x/nsdmi-warn1.h
  377e2e1b16dfc68982483f5462e7a1b0  gcc/testsuite/g++.dg/cpp0x/nsdmi1.C
  89839a6cc97a927eda8799f3b3b7c1fc  gcc/testsuite/g++.dg/cpp0x/nsdmi10.C
  ef00b2c2beb9680889aec5881ac6e71e  gcc/testsuite/g++.dg/cpp0x/nsdmi11.C
*************** c1eb4016685cdf315801aa4137a02728  gcc/te
*** 13762,13768 ****
  7bc03ec249f301bc0bfde63509409344  gcc/testsuite/g++.dg/cpp0x/nullptr08.C
  ba23888c33f468a020c07f0681e9620a  gcc/testsuite/g++.dg/cpp0x/nullptr09.C
  12d51ea94930b3f4bda324025061e028  gcc/testsuite/g++.dg/cpp0x/nullptr10.C
! 479562c95d823a2e2f8c04221d516077  gcc/testsuite/g++.dg/cpp0x/nullptr11.C
  d8d40a7d36271f6b91a0d7274d8de7ee  gcc/testsuite/g++.dg/cpp0x/nullptr12.C
  eef3b49a6f9e96517cf7aae1882fd86d  gcc/testsuite/g++.dg/cpp0x/nullptr13.C
  212cc29fbbd45ba2d4e81e9958232cfc  gcc/testsuite/g++.dg/cpp0x/nullptr14.C
--- 14167,14173 ----
  7bc03ec249f301bc0bfde63509409344  gcc/testsuite/g++.dg/cpp0x/nullptr08.C
  ba23888c33f468a020c07f0681e9620a  gcc/testsuite/g++.dg/cpp0x/nullptr09.C
  12d51ea94930b3f4bda324025061e028  gcc/testsuite/g++.dg/cpp0x/nullptr10.C
! bd71c4b94ab21ca83e27a15cb1900534  gcc/testsuite/g++.dg/cpp0x/nullptr11.C
  d8d40a7d36271f6b91a0d7274d8de7ee  gcc/testsuite/g++.dg/cpp0x/nullptr12.C
  eef3b49a6f9e96517cf7aae1882fd86d  gcc/testsuite/g++.dg/cpp0x/nullptr13.C
  212cc29fbbd45ba2d4e81e9958232cfc  gcc/testsuite/g++.dg/cpp0x/nullptr14.C
*************** cce8d7efe84ba47b6a9a649b7e96db1d  gcc/te
*** 13797,13803 ****
  cd57481c3233939f35a9152176ba0610  gcc/testsuite/g++.dg/cpp0x/nullptr43.C
  3bffe4cc168fde4f27dd432ad19e2f12  gcc/testsuite/g++.dg/cpp0x/nullptr44.C
  afdfafb40dd063d062a20c67e4309ae4  gcc/testsuite/g++.dg/cpp0x/nullptr45.C
! fd97d08f3976a4a83f1c49415efc3eca  gcc/testsuite/g++.dg/cpp0x/nullptr46.C
  9ac544c85b4718bef7e0acbc03dd004f  gcc/testsuite/g++.dg/cpp0x/overflow1.C
  fb7661df85ad6b415b31574c67fa4ee0  gcc/testsuite/g++.dg/cpp0x/overload-conv-1.C
  5ca00ae02aa7919e0b3d9730fa9f9ac5  gcc/testsuite/g++.dg/cpp0x/overload-conv-2.C
--- 14202,14208 ----
  cd57481c3233939f35a9152176ba0610  gcc/testsuite/g++.dg/cpp0x/nullptr43.C
  3bffe4cc168fde4f27dd432ad19e2f12  gcc/testsuite/g++.dg/cpp0x/nullptr44.C
  afdfafb40dd063d062a20c67e4309ae4  gcc/testsuite/g++.dg/cpp0x/nullptr45.C
! b34fb57802d0e40ddc608dc33eb1600e  gcc/testsuite/g++.dg/cpp0x/nullptr46.C
  9ac544c85b4718bef7e0acbc03dd004f  gcc/testsuite/g++.dg/cpp0x/overflow1.C
  fb7661df85ad6b415b31574c67fa4ee0  gcc/testsuite/g++.dg/cpp0x/overload-conv-1.C
  5ca00ae02aa7919e0b3d9730fa9f9ac5  gcc/testsuite/g++.dg/cpp0x/overload-conv-2.C
*************** ec3fccada021f17376f5255d71d5545b  gcc/te
*** 13815,13820 ****
--- 14220,14226 ----
  63a98616cfbc7aecbf849404acae0e55  gcc/testsuite/g++.dg/cpp0x/parse1.C
  a174690fe306aaf345b02df91c3ddebe  gcc/testsuite/g++.dg/cpp0x/parse2.C
  6802ea11c1f5811ef4a3d0490040dcc1  gcc/testsuite/g++.dg/cpp0x/pr102305.C
+ 70ac2374ee7486817d2f1310406bcc69  gcc/testsuite/g++.dg/cpp0x/pr104668.C
  ab53f37eb7254188dd01a8c1e25841fd  gcc/testsuite/g++.dg/cpp0x/pr105256.C
  26dea799d49ce223a0c4130a3c955271  gcc/testsuite/g++.dg/cpp0x/pr31431-2.C
  4d1da29b669bf3178b3987abce4d58b1  gcc/testsuite/g++.dg/cpp0x/pr31431.C
*************** a39d3f73029ae0da81fbb5f96ffc2836  gcc/te
*** 13878,13884 ****
  c5f3717677f94f92f6a25afd1b3fafa2  gcc/testsuite/g++.dg/cpp0x/pr54318.C
  6eb4712996c5c48893b31133038f46f0  gcc/testsuite/g++.dg/cpp0x/pr54323.C
  c5091a4a3b736068cec4aaf84f7bc0c4  gcc/testsuite/g++.dg/cpp0x/pr54377.C
! 154f74f9fc29beca2cef4e45723806f6  gcc/testsuite/g++.dg/cpp0x/pr56868.cpp
  cb1b6f1a94a7aa65d43fa4b308064d85  gcc/testsuite/g++.dg/cpp0x/pr57101.C
  34ff4ce2dea26f675261a4d5cc053bc9  gcc/testsuite/g++.dg/cpp0x/pr57172.C
  61f21d8df7c5bf86294921e6f7a23feb  gcc/testsuite/g++.dg/cpp0x/pr57416.C
--- 14284,14290 ----
  c5f3717677f94f92f6a25afd1b3fafa2  gcc/testsuite/g++.dg/cpp0x/pr54318.C
  6eb4712996c5c48893b31133038f46f0  gcc/testsuite/g++.dg/cpp0x/pr54323.C
  c5091a4a3b736068cec4aaf84f7bc0c4  gcc/testsuite/g++.dg/cpp0x/pr54377.C
! 154f74f9fc29beca2cef4e45723806f6  gcc/testsuite/g++.dg/cpp0x/pr56868.C
  cb1b6f1a94a7aa65d43fa4b308064d85  gcc/testsuite/g++.dg/cpp0x/pr57101.C
  34ff4ce2dea26f675261a4d5cc053bc9  gcc/testsuite/g++.dg/cpp0x/pr57172.C
  61f21d8df7c5bf86294921e6f7a23feb  gcc/testsuite/g++.dg/cpp0x/pr57416.C
*************** b2c6b8e617bc163eb317b7668652e006  gcc/te
*** 13901,13907 ****
  97725be33d84460ca43942d2adc95953  gcc/testsuite/g++.dg/cpp0x/pr59641.C
  9c12f7e3cf9e7442fe342f4be1463b79  gcc/testsuite/g++.dg/cpp0x/pr59816.C
  3d0500d1d666af43dc6c0f875f02c205  gcc/testsuite/g++.dg/cpp0x/pr60047.C
! 22bb408a48a86c72b96399eafc775b4f  gcc/testsuite/g++.dg/cpp0x/pr60209-neg.C
  a4d3796e26e4be4195bf46b19a76adeb  gcc/testsuite/g++.dg/cpp0x/pr60209.C
  b183a4e80609d3b7c1a96a71d68c8355  gcc/testsuite/g++.dg/cpp0x/pr60215.C
  17a7d3331efe07a3a8ad8feaefd13408  gcc/testsuite/g++.dg/cpp0x/pr60249.C
--- 14307,14313 ----
  97725be33d84460ca43942d2adc95953  gcc/testsuite/g++.dg/cpp0x/pr59641.C
  9c12f7e3cf9e7442fe342f4be1463b79  gcc/testsuite/g++.dg/cpp0x/pr59816.C
  3d0500d1d666af43dc6c0f875f02c205  gcc/testsuite/g++.dg/cpp0x/pr60047.C
! 21c5cce08d19e74d5ec72d1ac0c6372c  gcc/testsuite/g++.dg/cpp0x/pr60209-neg.C
  a4d3796e26e4be4195bf46b19a76adeb  gcc/testsuite/g++.dg/cpp0x/pr60209.C
  b183a4e80609d3b7c1a96a71d68c8355  gcc/testsuite/g++.dg/cpp0x/pr60215.C
  17a7d3331efe07a3a8ad8feaefd13408  gcc/testsuite/g++.dg/cpp0x/pr60249.C
*************** e9182fc181b2f685d1473abd3dc6494e  gcc/te
*** 13917,13923 ****
  d3f16d565d5f0234c072b9148097482d  gcc/testsuite/g++.dg/cpp0x/pr65072.C
  bf269a0fc59902ae095a9d63af2f15e1  gcc/testsuite/g++.dg/cpp0x/pr65075.C
  e1e37c782e8544f0f2bd4a0a8c3d6b56  gcc/testsuite/g++.dg/cpp0x/pr65127.C
! 93322883b4296edf830fc7e52bf7d4a0  gcc/testsuite/g++.dg/cpp0x/pr65327.C
  3b11d27f9ec6ae594f5bfe44a2630c07  gcc/testsuite/g++.dg/cpp0x/pr65398-2.C
  15a18c8ec6bc66fe94b289311d90d95b  gcc/testsuite/g++.dg/cpp0x/pr65398.C
  525a7f1677a2f8d9ca18bad15207261b  gcc/testsuite/g++.dg/cpp0x/pr65558.C
--- 14323,14329 ----
  d3f16d565d5f0234c072b9148097482d  gcc/testsuite/g++.dg/cpp0x/pr65072.C
  bf269a0fc59902ae095a9d63af2f15e1  gcc/testsuite/g++.dg/cpp0x/pr65075.C
  e1e37c782e8544f0f2bd4a0a8c3d6b56  gcc/testsuite/g++.dg/cpp0x/pr65127.C
! 70f4a34034a805f780f5230a38566120  gcc/testsuite/g++.dg/cpp0x/pr65327.C
  3b11d27f9ec6ae594f5bfe44a2630c07  gcc/testsuite/g++.dg/cpp0x/pr65398-2.C
  15a18c8ec6bc66fe94b289311d90d95b  gcc/testsuite/g++.dg/cpp0x/pr65398.C
  525a7f1677a2f8d9ca18bad15207261b  gcc/testsuite/g++.dg/cpp0x/pr65558.C
*************** e3798eda72e850294e15fe5d76637811  gcc/te
*** 13932,13938 ****
  e85408993e6b3f61f5073e187d03547d  gcc/testsuite/g++.dg/cpp0x/pr67767.C
  0962e3a6b5951296548ed3ba38744cf9  gcc/testsuite/g++.dg/cpp0x/pr68116.C
  448bc36042e9d013ec7bfb4a8df5c4ca  gcc/testsuite/g++.dg/cpp0x/pr68348.C
! 9fa085e414e7864d4503ab7c516f33a3  gcc/testsuite/g++.dg/cpp0x/pr68724.C
  c0edf3639960b767f1f8d042067bcc34  gcc/testsuite/g++.dg/cpp0x/pr68726.C
  d584417478a609ab589447aa7e173812  gcc/testsuite/g++.dg/cpp0x/pr69056.C
  72ddfeb4cc0f740fe85e9fb11ecf08c6  gcc/testsuite/g++.dg/cpp0x/pr69481.C
--- 14338,14344 ----
  e85408993e6b3f61f5073e187d03547d  gcc/testsuite/g++.dg/cpp0x/pr67767.C
  0962e3a6b5951296548ed3ba38744cf9  gcc/testsuite/g++.dg/cpp0x/pr68116.C
  448bc36042e9d013ec7bfb4a8df5c4ca  gcc/testsuite/g++.dg/cpp0x/pr68348.C
! ff53fc0c1854f9c465c7f9e019c19ad7  gcc/testsuite/g++.dg/cpp0x/pr68724.C
  c0edf3639960b767f1f8d042067bcc34  gcc/testsuite/g++.dg/cpp0x/pr68726.C
  d584417478a609ab589447aa7e173812  gcc/testsuite/g++.dg/cpp0x/pr69056.C
  72ddfeb4cc0f740fe85e9fb11ecf08c6  gcc/testsuite/g++.dg/cpp0x/pr69481.C
*************** b4d7017820845d86c934ceb6c48d1527  gcc/te
*** 13975,13981 ****
  7f20ecc1d0425b01c320b4d638d5dc4c  gcc/testsuite/g++.dg/cpp0x/pr78649.C
  fc11ff78853c75dd1793494cd38f1023  gcc/testsuite/g++.dg/cpp0x/pr78693.C
  a32de62864222434c111c70941412a14  gcc/testsuite/g++.dg/cpp0x/pr78701.C
! 634d925422244d7dc3ea82ddd9c041a0  gcc/testsuite/g++.dg/cpp0x/pr78765.C
  6faf3adc7de5944ed717ae146678774e  gcc/testsuite/g++.dg/cpp0x/pr78771-new.C
  59ab20c472dedbf6674ed028c898469b  gcc/testsuite/g++.dg/cpp0x/pr78771-old.C
  cd99ffd2dd5d16ea3eda3778014b17cf  gcc/testsuite/g++.dg/cpp0x/pr78890-1.C
--- 14381,14387 ----
  7f20ecc1d0425b01c320b4d638d5dc4c  gcc/testsuite/g++.dg/cpp0x/pr78649.C
  fc11ff78853c75dd1793494cd38f1023  gcc/testsuite/g++.dg/cpp0x/pr78693.C
  a32de62864222434c111c70941412a14  gcc/testsuite/g++.dg/cpp0x/pr78701.C
! b5b405b08e47ae5ccadcceead707453a  gcc/testsuite/g++.dg/cpp0x/pr78765.C
  6faf3adc7de5944ed717ae146678774e  gcc/testsuite/g++.dg/cpp0x/pr78771-new.C
  59ab20c472dedbf6674ed028c898469b  gcc/testsuite/g++.dg/cpp0x/pr78771-old.C
  cd99ffd2dd5d16ea3eda3778014b17cf  gcc/testsuite/g++.dg/cpp0x/pr78890-1.C
*************** c340da8892c614858df3de778cf44493  gcc/te
*** 14018,14024 ****
  f87bb7b5d326b2381e5de10c17cfee3f  gcc/testsuite/g++.dg/cpp0x/pr84705.C
  ed0dd9312e23c91d39d60d54ee8245c4  gcc/testsuite/g++.dg/cpp0x/pr85014.C
  88046ad6a8410e2d0f776eb549cf76c8  gcc/testsuite/g++.dg/cpp0x/pr85015.C
! 3f5434d725132012253c8f849187e3c7  gcc/testsuite/g++.dg/cpp0x/pr85070.C
  49c3a5dd9d0d26115234efcfe79bf7e1  gcc/testsuite/g++.dg/cpp0x/pr85112.C
  e220051a1789469e32d70224f27f40f1  gcc/testsuite/g++.dg/cpp0x/pr85147.C
  d443a2f727fe9f7c945ca225877f4250  gcc/testsuite/g++.dg/cpp0x/pr85437-1.C
--- 14424,14430 ----
  f87bb7b5d326b2381e5de10c17cfee3f  gcc/testsuite/g++.dg/cpp0x/pr84705.C
  ed0dd9312e23c91d39d60d54ee8245c4  gcc/testsuite/g++.dg/cpp0x/pr85014.C
  88046ad6a8410e2d0f776eb549cf76c8  gcc/testsuite/g++.dg/cpp0x/pr85015.C
! b319eda52adb2c1fc7f94b38df502987  gcc/testsuite/g++.dg/cpp0x/pr85070.C
  49c3a5dd9d0d26115234efcfe79bf7e1  gcc/testsuite/g++.dg/cpp0x/pr85112.C
  e220051a1789469e32d70224f27f40f1  gcc/testsuite/g++.dg/cpp0x/pr85147.C
  d443a2f727fe9f7c945ca225877f4250  gcc/testsuite/g++.dg/cpp0x/pr85437-1.C
*************** bc534d453c8bf059bcb562e4107fc4b3  gcc/te
*** 14052,14057 ****
--- 14458,14465 ----
  dcbe4765436c36185b5dce9c468362d1  gcc/testsuite/g++.dg/cpp0x/pr92447.C
  cf4d7a0934fa5897248e568b884df620  gcc/testsuite/g++.dg/cpp0x/pr92524.C
  b01c3079ace1bdd462b03d3af7906721  gcc/testsuite/g++.dg/cpp0x/pr93905.C
+ 114fa71f09fe7fd9b70ee4d41e776e26  gcc/testsuite/g++.dg/cpp0x/pr94616.C
+ c60c0db646b29d21cd7d61d24670d63e  gcc/testsuite/g++.dg/cpp0x/pr96440.C
  1f725aacb479fe72f5d994446fab5d54  gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C
  6e8e648c26d9bf237cc152180e88c2c2  gcc/testsuite/g++.dg/cpp0x/range-for1.C
  5eec4a19463d582cbc114d93dbff246a  gcc/testsuite/g++.dg/cpp0x/range-for11.C
*************** b111f953ff16a99ffc3ad09a151f0958  gcc/te
*** 14092,14101 ****
  663c80121f28c2e7c23a73bc07b03f24  gcc/testsuite/g++.dg/cpp0x/ref-bind1.C
  8a71cf891e8518665824499f113e2f05  gcc/testsuite/g++.dg/cpp0x/ref-bind2.C
  2d20779c52193e2ab44ed26a7073b235  gcc/testsuite/g++.dg/cpp0x/ref-bind3.C
! 7bd7d572797664b340cbbd95894feb6e  gcc/testsuite/g++.dg/cpp0x/ref-bind4.C
  26f40a31991788187bf4bd2b2bebe9b5  gcc/testsuite/g++.dg/cpp0x/ref-bind5.C
  49a197500ff063e67fcb6e5da7a86594  gcc/testsuite/g++.dg/cpp0x/ref-bind6.C
  40e3f42cd5f4b322013adb46fba11bd2  gcc/testsuite/g++.dg/cpp0x/ref-bind7.C
  87cba3bd81389f956a4ab8405ad5dc46  gcc/testsuite/g++.dg/cpp0x/ref-qual-mangle1.C
  af4673410b97bcc5393dd82a2599c2d1  gcc/testsuite/g++.dg/cpp0x/ref-qual-multi-neg.C
  d0d588806aef3922d92ee7fb7c632659  gcc/testsuite/g++.dg/cpp0x/ref-qual1.C
--- 14500,14510 ----
  663c80121f28c2e7c23a73bc07b03f24  gcc/testsuite/g++.dg/cpp0x/ref-bind1.C
  8a71cf891e8518665824499f113e2f05  gcc/testsuite/g++.dg/cpp0x/ref-bind2.C
  2d20779c52193e2ab44ed26a7073b235  gcc/testsuite/g++.dg/cpp0x/ref-bind3.C
! 050b4a2d3a8f313526e14084d11d939e  gcc/testsuite/g++.dg/cpp0x/ref-bind4.C
  26f40a31991788187bf4bd2b2bebe9b5  gcc/testsuite/g++.dg/cpp0x/ref-bind5.C
  49a197500ff063e67fcb6e5da7a86594  gcc/testsuite/g++.dg/cpp0x/ref-bind6.C
  40e3f42cd5f4b322013adb46fba11bd2  gcc/testsuite/g++.dg/cpp0x/ref-bind7.C
+ 15ad30c4d2016e8133378c56ef3b191f  gcc/testsuite/g++.dg/cpp0x/ref-bind8.C
  87cba3bd81389f956a4ab8405ad5dc46  gcc/testsuite/g++.dg/cpp0x/ref-qual-mangle1.C
  af4673410b97bcc5393dd82a2599c2d1  gcc/testsuite/g++.dg/cpp0x/ref-qual-multi-neg.C
  d0d588806aef3922d92ee7fb7c632659  gcc/testsuite/g++.dg/cpp0x/ref-qual1.C
*************** baf0dc0526b9c7116fa5e5cbccbe2286  gcc/te
*** 14111,14116 ****
--- 14520,14526 ----
  b29a1864b99db07583a850e2242025b0  gcc/testsuite/g++.dg/cpp0x/ref-qual19.C
  17d77d3ef6cc0e1cfd53228f15a40017  gcc/testsuite/g++.dg/cpp0x/ref-qual2.C
  14edaa2083aa1c7fda41f39e5ec57607  gcc/testsuite/g++.dg/cpp0x/ref-qual20.C
+ b5e0bd0074ec33c2369ad0e104f63179  gcc/testsuite/g++.dg/cpp0x/ref-qual21.C
  68b27ec15231994ad0330625660d2720  gcc/testsuite/g++.dg/cpp0x/ref-qual3.C
  1bb06529f586a3e77263290dd006534e  gcc/testsuite/g++.dg/cpp0x/ref-qual4.C
  32e38316bdc7aa39b2e1811744ca40b7  gcc/testsuite/g++.dg/cpp0x/ref-qual5.C
*************** e1722a256dfcd4ecb3759322af915f24  gcc/te
*** 14251,14256 ****
--- 14661,14668 ----
  5057317176f66cb1d8063c4f091fb9ef  gcc/testsuite/g++.dg/cpp0x/sfinae64.C
  fadfd124d98089fde0add757adc40755  gcc/testsuite/g++.dg/cpp0x/sfinae65.C
  652e811b9432bae8ea8feb762a0c0616  gcc/testsuite/g++.dg/cpp0x/sfinae66.C
+ 9ca198fec634d96b239b04a35162e134  gcc/testsuite/g++.dg/cpp0x/sfinae67.C
+ decb015a6daf878107fde89d7eabebb7  gcc/testsuite/g++.dg/cpp0x/sfinae68.C
  ec1a51ea3fd41e6e61c8f425bde1fd0b  gcc/testsuite/g++.dg/cpp0x/sfinae7.C
  547894832b1452d5f513938e0cb8a166  gcc/testsuite/g++.dg/cpp0x/sfinae8.C
  03177ceac1dca2efe41bd4b603c2a79e  gcc/testsuite/g++.dg/cpp0x/sfinae9.C
*************** f7ee372a6e85bc9010a49d3d9086a4ff  gcc/te
*** 14379,14384 ****
--- 14791,14798 ----
  c2935d37441711e00030dd4962af84b5  gcc/testsuite/g++.dg/cpp0x/variadic-104.C
  0fa36631e12ec97e9e0d646888cd43ab  gcc/testsuite/g++.dg/cpp0x/variadic-alias1.C
  05f34d2879385095df8946531cb7c747  gcc/testsuite/g++.dg/cpp0x/variadic-alias2.C
+ b7183fd5bda0595bbbef206572b928ee  gcc/testsuite/g++.dg/cpp0x/variadic-alias3.C
+ e5424a3313cd8b37eb1ae4e02ffab5bf  gcc/testsuite/g++.dg/cpp0x/variadic-alias4.C
  ca37ddadc3989b47a8f871dbc75cb358  gcc/testsuite/g++.dg/cpp0x/variadic-alias5.C
  442ba0256c0aa3571579aa5a4d8d9d46  gcc/testsuite/g++.dg/cpp0x/variadic-alias6.C
  b9f93dd6756e0bd64271c918d2533edc  gcc/testsuite/g++.dg/cpp0x/variadic-alias7.C
*************** f64443a27f946984ec474714387b99a8  gcc/te
*** 14421,14427 ****
  8dd845093d366e371bdaf222fda42413  gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C
  efdeb5b65b79fc6ff926b12f711edcb1  gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C
  6c67e276177a53a05508b5e974504d12  gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn.C
! b043a7c3881a23960f0e2b05e750d94c  gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn2.C
  08d2bff6abb7f96f072898cb08f80fbc  gcc/testsuite/g++.dg/cpp0x/variadic-nested1.C
  7932640fecd96fc5ff03d9f94a7cf005  gcc/testsuite/g++.dg/cpp0x/variadic-nested2.C
  e47543bd9482646c5c0d1023519e7eb1  gcc/testsuite/g++.dg/cpp0x/variadic-nested3.C
--- 14835,14841 ----
  8dd845093d366e371bdaf222fda42413  gcc/testsuite/g++.dg/cpp0x/variadic-mangle3.C
  efdeb5b65b79fc6ff926b12f711edcb1  gcc/testsuite/g++.dg/cpp0x/variadic-mangle3a.C
  6c67e276177a53a05508b5e974504d12  gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn.C
! 3cb08ca5f565f9984bffaa086cbace20  gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn2.C
  08d2bff6abb7f96f072898cb08f80fbc  gcc/testsuite/g++.dg/cpp0x/variadic-nested1.C
  7932640fecd96fc5ff03d9f94a7cf005  gcc/testsuite/g++.dg/cpp0x/variadic-nested2.C
  e47543bd9482646c5c0d1023519e7eb1  gcc/testsuite/g++.dg/cpp0x/variadic-nested3.C
*************** a1cfbfd1d513943453ec5c392ec8212f  gcc/te
*** 14546,14551 ****
--- 14960,14966 ----
  716318ff1db2bdd640b1c6835c0659e3  gcc/testsuite/g++.dg/cpp0x/variadic18.C
  45285d93bd88ba5954fe172558a9740a  gcc/testsuite/g++.dg/cpp0x/variadic180.C
  71729e6ac870845bd172167993fa7579  gcc/testsuite/g++.dg/cpp0x/variadic181.C
+ 908e5186424a59fe18bcd9c5b80473e7  gcc/testsuite/g++.dg/cpp0x/variadic182.C
  d07d2dff70e4403857f709c6f88dd0d9  gcc/testsuite/g++.dg/cpp0x/variadic19.C
  2fa72711afa172c723554cf582b008c8  gcc/testsuite/g++.dg/cpp0x/variadic2.C
  263ca23f80cf33c1a49a4d4a564e8ac3  gcc/testsuite/g++.dg/cpp0x/variadic20.C
*************** d2e705d9f1219e15107bd104bcaed23f  gcc/te
*** 14567,14573 ****
  6489a8d10da4de0eed472ee88c0f4ab4  gcc/testsuite/g++.dg/cpp0x/variadic35.C
  239fd9ea878832ef61b5d23e777d8467  gcc/testsuite/g++.dg/cpp0x/variadic36.C
  9d67c3ea87784b8527535dd4d9eb6951  gcc/testsuite/g++.dg/cpp0x/variadic37.C
! f30cac187377000f917929234e687999  gcc/testsuite/g++.dg/cpp0x/variadic38.C
  5b5e4cc3907d08ca4401fb9e0aef12a0  gcc/testsuite/g++.dg/cpp0x/variadic39.C
  c4cff8b389e60f8c0ad855f0a781e8cc  gcc/testsuite/g++.dg/cpp0x/variadic4.C
  62a619cc37b61e107c4fe5cb7fceb4e2  gcc/testsuite/g++.dg/cpp0x/variadic40.C
--- 14982,14988 ----
  6489a8d10da4de0eed472ee88c0f4ab4  gcc/testsuite/g++.dg/cpp0x/variadic35.C
  239fd9ea878832ef61b5d23e777d8467  gcc/testsuite/g++.dg/cpp0x/variadic36.C
  9d67c3ea87784b8527535dd4d9eb6951  gcc/testsuite/g++.dg/cpp0x/variadic37.C
! 23ba0229426ca57379998bee82958b29  gcc/testsuite/g++.dg/cpp0x/variadic38.C
  5b5e4cc3907d08ca4401fb9e0aef12a0  gcc/testsuite/g++.dg/cpp0x/variadic39.C
  c4cff8b389e60f8c0ad855f0a781e8cc  gcc/testsuite/g++.dg/cpp0x/variadic4.C
  62a619cc37b61e107c4fe5cb7fceb4e2  gcc/testsuite/g++.dg/cpp0x/variadic40.C
*************** f7319a26887a2ba156ff389654598514  gcc/te
*** 14647,14653 ****
  f75efa8325d3c21aa2e509046e84cd73  gcc/testsuite/g++.dg/cpp0x/vt-34103.C
  ffedf1e64b2d3400b223433982b63f96  gcc/testsuite/g++.dg/cpp0x/vt-34219-2.C
  702b037f4b469e426938436c9814f05f  gcc/testsuite/g++.dg/cpp0x/vt-34219.C
! ba8bf373cdcb70ddeea78844d5a22809  gcc/testsuite/g++.dg/cpp0x/vt-34314.C
  439fdbdf3020584ecd29d79b9d1c3017  gcc/testsuite/g++.dg/cpp0x/vt-34399.C
  9ae58cd25d56dbaad7ed7765c88d2e17  gcc/testsuite/g++.dg/cpp0x/vt-34606.C
  d7c16cf0b31308876be36bd64d788e89  gcc/testsuite/g++.dg/cpp0x/vt-34751.C
--- 15062,15068 ----
  f75efa8325d3c21aa2e509046e84cd73  gcc/testsuite/g++.dg/cpp0x/vt-34103.C
  ffedf1e64b2d3400b223433982b63f96  gcc/testsuite/g++.dg/cpp0x/vt-34219-2.C
  702b037f4b469e426938436c9814f05f  gcc/testsuite/g++.dg/cpp0x/vt-34219.C
! 53b6b26c96878ad0643b1019ff14927c  gcc/testsuite/g++.dg/cpp0x/vt-34314.C
  439fdbdf3020584ecd29d79b9d1c3017  gcc/testsuite/g++.dg/cpp0x/vt-34399.C
  9ae58cd25d56dbaad7ed7765c88d2e17  gcc/testsuite/g++.dg/cpp0x/vt-34606.C
  d7c16cf0b31308876be36bd64d788e89  gcc/testsuite/g++.dg/cpp0x/vt-34751.C
*************** b823b50bc430c6f0253adad46e2b9fea  gcc/te
*** 14690,14695 ****
--- 15105,15112 ----
  5e4a99649ec4c892a39fa54f3643eb49  gcc/testsuite/g++.dg/cpp1y/69098-2.C
  c8a2c7e8b1e0cbd3443ab02738d85644  gcc/testsuite/g++.dg/cpp1y/69098.C
  8cb32d00716e6f14136f2c7d256f5456  gcc/testsuite/g++.dg/cpp1y/Wnarrowing1.C
+ 133fb4d5b5a699f7b89e0d403a4f4e04  gcc/testsuite/g++.dg/cpp1y/Wnarrowing2.C
+ 4c4207ac314f8a522c4a4154f20cb829  gcc/testsuite/g++.dg/cpp1y/Wnarrowing2.h
  7e139c0fd3ae89953faa45ef71bd8838  gcc/testsuite/g++.dg/cpp1y/alias-decl1.C
  51bba41824667d1a48654ae6fb05aad6  gcc/testsuite/g++.dg/cpp1y/alias-decl2.C
  9cb42e3162b14f4df1a55310215558e2  gcc/testsuite/g++.dg/cpp1y/alias-decl3.C
*************** fb2e417a364945cb8149b9526292009b  gcc/te
*** 14703,14709 ****
  dc5451a9ff24848e54d61818d52a6d94  gcc/testsuite/g++.dg/cpp1y/auto-fn1.C
  7f87375ea759512b1c52f02744bd144b  gcc/testsuite/g++.dg/cpp1y/auto-fn10.C
  d9026dcf90b4d54bee061436620287a9  gcc/testsuite/g++.dg/cpp1y/auto-fn11.C
! 6950bbb2c8ef00d1a36cb08f2d608d53  gcc/testsuite/g++.dg/cpp1y/auto-fn12.C
  7b669827bea28277027a523e33b45f0e  gcc/testsuite/g++.dg/cpp1y/auto-fn13.C
  e44b3597936dd6f357553246a242335d  gcc/testsuite/g++.dg/cpp1y/auto-fn14.C
  12bb503f3f6cd0861f245adc2f63e35e  gcc/testsuite/g++.dg/cpp1y/auto-fn15.C
--- 15120,15126 ----
  dc5451a9ff24848e54d61818d52a6d94  gcc/testsuite/g++.dg/cpp1y/auto-fn1.C
  7f87375ea759512b1c52f02744bd144b  gcc/testsuite/g++.dg/cpp1y/auto-fn10.C
  d9026dcf90b4d54bee061436620287a9  gcc/testsuite/g++.dg/cpp1y/auto-fn11.C
! e8ede97fc5803eed57d07b4123b9a523  gcc/testsuite/g++.dg/cpp1y/auto-fn12.C
  7b669827bea28277027a523e33b45f0e  gcc/testsuite/g++.dg/cpp1y/auto-fn13.C
  e44b3597936dd6f357553246a242335d  gcc/testsuite/g++.dg/cpp1y/auto-fn14.C
  12bb503f3f6cd0861f245adc2f63e35e  gcc/testsuite/g++.dg/cpp1y/auto-fn15.C
*************** af7d2fcb1d1338760b009b72c73a0154  gcc/te
*** 14777,14782 ****
--- 15194,15200 ----
  596bb0c9ae27b7c107953a30347295f0  gcc/testsuite/g++.dg/cpp1y/constexpr-104284-3.C
  b18c63a0e6b162de2b47ab0e61b704bd  gcc/testsuite/g++.dg/cpp1y/constexpr-104284-4.C
  6193cad472a1684eae83fead9fc5d0d7  gcc/testsuite/g++.dg/cpp1y/constexpr-104513.C
+ 5711009968ffb66e220bca69d717f9fd  gcc/testsuite/g++.dg/cpp1y/constexpr-105050.C
  2d72668eefa5659edd32ef8dabc1c48e  gcc/testsuite/g++.dg/cpp1y/constexpr-50060.C
  9b2030f5f70b0e913feb1b957c799f4f  gcc/testsuite/g++.dg/cpp1y/constexpr-66093.C
  9ecc58eab147adafbf3780c51ed706fc  gcc/testsuite/g++.dg/cpp1y/constexpr-70265-1.C
*************** b9e6a245bf8b000527fce6b59f4f31f8  gcc/te
*** 14804,14811 ****
  64bd8ff31626e8ade0181a27877bbb95  gcc/testsuite/g++.dg/cpp1y/constexpr-86767.C
  cae3ede91b1281417cb4b2b0a3fed7a8  gcc/testsuite/g++.dg/cpp1y/constexpr-87481.C
  817fb530a2cf5d5fba5f428b5bd47862  gcc/testsuite/g++.dg/cpp1y/constexpr-88983.C
! b702d3854b4dc2c640e523def5507a8f  gcc/testsuite/g++.dg/cpp1y/constexpr-89285-2.C
! 5c678f7fcbe3d45c2443e58a7430c9a9  gcc/testsuite/g++.dg/cpp1y/constexpr-89285.C
  6287f6343875c97718b7c31626b1a892  gcc/testsuite/g++.dg/cpp1y/constexpr-89336-1.C
  fe38eb995d3f36bcf45ac701099de121  gcc/testsuite/g++.dg/cpp1y/constexpr-89336-2.C
  d97642d3edfa83e4dceb98692f10ca15  gcc/testsuite/g++.dg/cpp1y/constexpr-89336-3.C
--- 15222,15232 ----
  64bd8ff31626e8ade0181a27877bbb95  gcc/testsuite/g++.dg/cpp1y/constexpr-86767.C
  cae3ede91b1281417cb4b2b0a3fed7a8  gcc/testsuite/g++.dg/cpp1y/constexpr-87481.C
  817fb530a2cf5d5fba5f428b5bd47862  gcc/testsuite/g++.dg/cpp1y/constexpr-88983.C
! c0c65bed3f0ec11995705af19bb8b6ad  gcc/testsuite/g++.dg/cpp1y/constexpr-89074-1.C
! 54065250db8014b94087e19130b9d3ce  gcc/testsuite/g++.dg/cpp1y/constexpr-89074-2.C
! 1cfec2a008c883718d7eb9a906eac434  gcc/testsuite/g++.dg/cpp1y/constexpr-89074-3.C
! 2a98a032769264c1453829a7b23ff007  gcc/testsuite/g++.dg/cpp1y/constexpr-89285-2.C
! 07637923a25d4865628527c667773cb7  gcc/testsuite/g++.dg/cpp1y/constexpr-89285.C
  6287f6343875c97718b7c31626b1a892  gcc/testsuite/g++.dg/cpp1y/constexpr-89336-1.C
  fe38eb995d3f36bcf45ac701099de121  gcc/testsuite/g++.dg/cpp1y/constexpr-89336-2.C
  d97642d3edfa83e4dceb98692f10ca15  gcc/testsuite/g++.dg/cpp1y/constexpr-89336-3.C
*************** d8d5c97f0cfc535ec6b3092d8c2ad0a6  gcc/te
*** 14816,14821 ****
--- 15237,15243 ----
  d74feec74ad417ce346db9a37de13b2b  gcc/testsuite/g++.dg/cpp1y/constexpr-90199.C
  6da026613aee5ef4a0c106f2bd05788e  gcc/testsuite/g++.dg/cpp1y/constexpr-90383-1.C
  14a30fd2e20dff6196843757b1aeaa95  gcc/testsuite/g++.dg/cpp1y/constexpr-90383-2.C
+ 38a136c1d282956f084c040e535a3083  gcc/testsuite/g++.dg/cpp1y/constexpr-94716.C
  d331ead07f524eb8eb9cff1a8f14ee16  gcc/testsuite/g++.dg/cpp1y/constexpr-96182.C
  689e7fdbc7e2f53c290b53e763b04728  gcc/testsuite/g++.dg/cpp1y/constexpr-96241.C
  7b969c5a8bcb74e6e17d4cb0df34a497  gcc/testsuite/g++.dg/cpp1y/constexpr-98122.C
*************** fdb8b6b86d13d007f2629fe0e79ef65b  gcc/te
*** 14834,14845 ****
  9c189b4b801bac3aaf8dffbbc66e22fc  gcc/testsuite/g++.dg/cpp1y/constexpr-assert1.C
  717b5c723c35c334359c678ac4628aa8  gcc/testsuite/g++.dg/cpp1y/constexpr-assert2.C
  96e7ff76936ad5471dd6bfb8bb617ccc  gcc/testsuite/g++.dg/cpp1y/constexpr-assign1.C
  9912061f6e14d9f4a1f557e23a4f89c2  gcc/testsuite/g++.dg/cpp1y/constexpr-copy1.C
  464341f29e9993d1f1a167321ef412cf  gcc/testsuite/g++.dg/cpp1y/constexpr-copy2.C
  e6815ab618d6af99025ddeacf6ab0545  gcc/testsuite/g++.dg/cpp1y/constexpr-copy3.C
  4808950072f67f78922c9046e31e486d  gcc/testsuite/g++.dg/cpp1y/constexpr-dr1684.C
  9b6ce1c2202c1ce9ea82fda5f060499b  gcc/testsuite/g++.dg/cpp1y/constexpr-empty1.C
! 9e871814c326197a59b4ae1738313788  gcc/testsuite/g++.dg/cpp1y/constexpr-empty2.C
  d4fc72d059e047077b1d6033d4c13026  gcc/testsuite/g++.dg/cpp1y/constexpr-empty3.C
  f1a863bb06163b628459fbc6a355ec3f  gcc/testsuite/g++.dg/cpp1y/constexpr-empty4.C
  995873768089d805df939c03d2be8b1c  gcc/testsuite/g++.dg/cpp1y/constexpr-hana1.C
--- 15256,15270 ----
  9c189b4b801bac3aaf8dffbbc66e22fc  gcc/testsuite/g++.dg/cpp1y/constexpr-assert1.C
  717b5c723c35c334359c678ac4628aa8  gcc/testsuite/g++.dg/cpp1y/constexpr-assert2.C
  96e7ff76936ad5471dd6bfb8bb617ccc  gcc/testsuite/g++.dg/cpp1y/constexpr-assign1.C
+ e994f9235ea884899f4cb5f923eca140  gcc/testsuite/g++.dg/cpp1y/constexpr-base1.C
+ 62c9fcd027436752619939db3ffca36e  gcc/testsuite/g++.dg/cpp1y/constexpr-base2.C
+ e383dd00754b034ccf88071ffbf49978  gcc/testsuite/g++.dg/cpp1y/constexpr-base2a.C
  9912061f6e14d9f4a1f557e23a4f89c2  gcc/testsuite/g++.dg/cpp1y/constexpr-copy1.C
  464341f29e9993d1f1a167321ef412cf  gcc/testsuite/g++.dg/cpp1y/constexpr-copy2.C
  e6815ab618d6af99025ddeacf6ab0545  gcc/testsuite/g++.dg/cpp1y/constexpr-copy3.C
  4808950072f67f78922c9046e31e486d  gcc/testsuite/g++.dg/cpp1y/constexpr-dr1684.C
  9b6ce1c2202c1ce9ea82fda5f060499b  gcc/testsuite/g++.dg/cpp1y/constexpr-empty1.C
! b8279a438f13574240482fd43dc100d3  gcc/testsuite/g++.dg/cpp1y/constexpr-empty2.C
  d4fc72d059e047077b1d6033d4c13026  gcc/testsuite/g++.dg/cpp1y/constexpr-empty3.C
  f1a863bb06163b628459fbc6a355ec3f  gcc/testsuite/g++.dg/cpp1y/constexpr-empty4.C
  995873768089d805df939c03d2be8b1c  gcc/testsuite/g++.dg/cpp1y/constexpr-hana1.C
*************** f4f6c3d1cdaf2aa67bfa2b8c851853d5  gcc/te
*** 14847,14853 ****
  af9863e9fca568fa5ae3ad41b051cf84  gcc/testsuite/g++.dg/cpp1y/constexpr-incr2.C
  3e9dd485a2a6d99132c92a6d04b96ee9  gcc/testsuite/g++.dg/cpp1y/constexpr-initlist1.C
  ab56709d31a56066e2a96779bd194779  gcc/testsuite/g++.dg/cpp1y/constexpr-instantiate.C
! c1f0367d18b0ce3b18a08cd6eb3f8931  gcc/testsuite/g++.dg/cpp1y/constexpr-label.C
  14b35cb8a87b121f413f22b600d19592  gcc/testsuite/g++.dg/cpp1y/constexpr-local-compound1.C
  3a3d744ee7d9f610351075218538740d  gcc/testsuite/g++.dg/cpp1y/constexpr-local1.C
  b9802763e15bc5d3383abb6baf492f9a  gcc/testsuite/g++.dg/cpp1y/constexpr-local2.C
--- 15272,15278 ----
  af9863e9fca568fa5ae3ad41b051cf84  gcc/testsuite/g++.dg/cpp1y/constexpr-incr2.C
  3e9dd485a2a6d99132c92a6d04b96ee9  gcc/testsuite/g++.dg/cpp1y/constexpr-initlist1.C
  ab56709d31a56066e2a96779bd194779  gcc/testsuite/g++.dg/cpp1y/constexpr-instantiate.C
! a3eb2783b3258724406759b817abc91a  gcc/testsuite/g++.dg/cpp1y/constexpr-label.C
  14b35cb8a87b121f413f22b600d19592  gcc/testsuite/g++.dg/cpp1y/constexpr-local-compound1.C
  3a3d744ee7d9f610351075218538740d  gcc/testsuite/g++.dg/cpp1y/constexpr-local1.C
  b9802763e15bc5d3383abb6baf492f9a  gcc/testsuite/g++.dg/cpp1y/constexpr-local2.C
*************** ed1ec65ac2a503707f1f7a1f22815b90  gcc/te
*** 14856,14866 ****
  dd06742193a8b1ab94aab1b448819b99  gcc/testsuite/g++.dg/cpp1y/constexpr-loop2.C
  9bf4b1a4941ca58f18681abd38e8f7ca  gcc/testsuite/g++.dg/cpp1y/constexpr-loop3.C
  b7ba36048381eed51408ea95cc97cab5  gcc/testsuite/g++.dg/cpp1y/constexpr-loop4.C
! 492f6cac7562b468e917e717a4a042ae  gcc/testsuite/g++.dg/cpp1y/constexpr-loop5.C
  521dc899a08f28cc384d6ecb466fe37e  gcc/testsuite/g++.dg/cpp1y/constexpr-loop6.C
  ca962f3256b3b1d6a489a9b876b8f615  gcc/testsuite/g++.dg/cpp1y/constexpr-loop7.C
  2c3af685bf6854fb957640fc9e12dc46  gcc/testsuite/g++.dg/cpp1y/constexpr-loop8.C
! 251c8268a1a6df8f9134215212294cd9  gcc/testsuite/g++.dg/cpp1y/constexpr-neg1.C
  668a624ab093686a10323938506ba10a  gcc/testsuite/g++.dg/cpp1y/constexpr-new.C
  383e769ca0523aee3432cc57a015a3da  gcc/testsuite/g++.dg/cpp1y/constexpr-noexcept1.C
  870daa2b4f4ec7ae726e417d7da3945a  gcc/testsuite/g++.dg/cpp1y/constexpr-nsdmi2.C
--- 15281,15291 ----
  dd06742193a8b1ab94aab1b448819b99  gcc/testsuite/g++.dg/cpp1y/constexpr-loop2.C
  9bf4b1a4941ca58f18681abd38e8f7ca  gcc/testsuite/g++.dg/cpp1y/constexpr-loop3.C
  b7ba36048381eed51408ea95cc97cab5  gcc/testsuite/g++.dg/cpp1y/constexpr-loop4.C
! 987caca5cc2025735f79c0e48586b395  gcc/testsuite/g++.dg/cpp1y/constexpr-loop5.C
  521dc899a08f28cc384d6ecb466fe37e  gcc/testsuite/g++.dg/cpp1y/constexpr-loop6.C
  ca962f3256b3b1d6a489a9b876b8f615  gcc/testsuite/g++.dg/cpp1y/constexpr-loop7.C
  2c3af685bf6854fb957640fc9e12dc46  gcc/testsuite/g++.dg/cpp1y/constexpr-loop8.C
! 357d611114c1eb8cb04a38ddcb504bcb  gcc/testsuite/g++.dg/cpp1y/constexpr-neg1.C
  668a624ab093686a10323938506ba10a  gcc/testsuite/g++.dg/cpp1y/constexpr-new.C
  383e769ca0523aee3432cc57a015a3da  gcc/testsuite/g++.dg/cpp1y/constexpr-noexcept1.C
  870daa2b4f4ec7ae726e417d7da3945a  gcc/testsuite/g++.dg/cpp1y/constexpr-nsdmi2.C
*************** b6f3cbabd3fb752ace73590e7135e551  gcc/te
*** 14873,14878 ****
--- 15298,15304 ----
  c3cd90392b0ef60308de7e44fb884c6f  gcc/testsuite/g++.dg/cpp1y/constexpr-nsdmi7b.C
  8e2e9946848c5ffc12f5f2da3fb70c72  gcc/testsuite/g++.dg/cpp1y/constexpr-nsdmi8.C
  5d70ae105705b7db38c2cb81da31b2fc  gcc/testsuite/g++.dg/cpp1y/constexpr-nsdmi9.C
+ 14a6242de0a2e59abd4b2ccf95495c91  gcc/testsuite/g++.dg/cpp1y/constexpr-ptrsub1.C
  3ebd2f678927c3d6b60ebc749680a96e  gcc/testsuite/g++.dg/cpp1y/constexpr-recursion1.C
  777febedb9b77383ec600e70a1668eb9  gcc/testsuite/g++.dg/cpp1y/constexpr-ref1.C
  6688f378d2b0f24307bbda6bfb45a808  gcc/testsuite/g++.dg/cpp1y/constexpr-return1.C
*************** f9177d17a8e7ca1cf52d2e3f3738490b  gcc/te
*** 14926,14934 ****
  382c88b3557d1313cf8ea52c3a5c5e11  gcc/testsuite/g++.dg/cpp1y/cplusplus.C
  f8cacc42b6d0ee02c4ec28b4871b946c  gcc/testsuite/g++.dg/cpp1y/cplusplus_1y.C
  5b15891a6820c943437e7dcf50430c8c  gcc/testsuite/g++.dg/cpp1y/decltype-auto1.C
  194055ab7fa17e843b9e74ef24b2d117  gcc/testsuite/g++.dg/cpp1y/decltype-auto5.C
  516d0cef75f4267f67d755a810807bc2  gcc/testsuite/g++.dg/cpp1y/digit-sep-cxx11-neg.C
! 7831663fbcb0e77846ba3e5ab2442d2e  gcc/testsuite/g++.dg/cpp1y/digit-sep-neg.C
  2ccf049767734b973a90dea30576d8a8  gcc/testsuite/g++.dg/cpp1y/digit-sep.C
  c4436fb0148cf765eb9ae5580af8f058  gcc/testsuite/g++.dg/cpp1y/dr1560.C
  f76edece5ff5aa3ce9cb5508f587b65c  gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C
--- 15352,15368 ----
  382c88b3557d1313cf8ea52c3a5c5e11  gcc/testsuite/g++.dg/cpp1y/cplusplus.C
  f8cacc42b6d0ee02c4ec28b4871b946c  gcc/testsuite/g++.dg/cpp1y/cplusplus_1y.C
  5b15891a6820c943437e7dcf50430c8c  gcc/testsuite/g++.dg/cpp1y/decltype-auto1.C
+ 767b8c2e89c1b87095adbf462dad7025  gcc/testsuite/g++.dg/cpp1y/decltype-auto2.C
+ 12c22b7a794484f616e052459e6ee353  gcc/testsuite/g++.dg/cpp1y/decltype-auto3.C
+ e210eaaa7545615d95f00423c888ec15  gcc/testsuite/g++.dg/cpp1y/decltype-auto4.C
  194055ab7fa17e843b9e74ef24b2d117  gcc/testsuite/g++.dg/cpp1y/decltype-auto5.C
  516d0cef75f4267f67d755a810807bc2  gcc/testsuite/g++.dg/cpp1y/digit-sep-cxx11-neg.C
! 689cbb9207e775c0f7572b0587fbd4fd  gcc/testsuite/g++.dg/cpp1y/digit-sep-line-neg.C
! b0b8339395130310f925dd038dff1c6c  gcc/testsuite/g++.dg/cpp1y/digit-sep-line.C
! b3a7b9939d0caf6f1afeaa7cc739f24d  gcc/testsuite/g++.dg/cpp1y/digit-sep-neg-2.C
! a9f1e899725b7a519105e0ffa1776db0  gcc/testsuite/g++.dg/cpp1y/digit-sep-neg.C
! 037e3cafb9dc5652631db3f9c4898206  gcc/testsuite/g++.dg/cpp1y/digit-sep-paste.C
! 1f30a80b96994a075c5358fc9ad2efd9  gcc/testsuite/g++.dg/cpp1y/digit-sep-pp-number.C
  2ccf049767734b973a90dea30576d8a8  gcc/testsuite/g++.dg/cpp1y/digit-sep.C
  c4436fb0148cf765eb9ae5580af8f058  gcc/testsuite/g++.dg/cpp1y/dr1560.C
  f76edece5ff5aa3ce9cb5508f587b65c  gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C
*************** a7934d89f8791f62bbbf0b9d7fa7ece6  gcc/te
*** 14958,14964 ****
  f257a2d5d1384a750676e55da76dca2e  gcc/testsuite/g++.dg/cpp1y/lambda-generic-79005.C
  7d5f83c685271e73682308e9f1c0115f  gcc/testsuite/g++.dg/cpp1y/lambda-generic-83856.C
  5209bc3f1d48d6d7100a438fe34ed022  gcc/testsuite/g++.dg/cpp1y/lambda-generic-84125.C
! ce46afbfc90bd6c537bbcba93a9d556a  gcc/testsuite/g++.dg/cpp1y/lambda-generic-85713-2.C
  dfa08547ad14229fe77e680e387d3dbe  gcc/testsuite/g++.dg/cpp1y/lambda-generic-85713.C
  e3c04ea33a4074f5cd6955ab214fc656  gcc/testsuite/g++.dg/cpp1y/lambda-generic-86875.C
  7640b354152fd775d65ec145fc4635da  gcc/testsuite/g++.dg/cpp1y/lambda-generic-87523.C
--- 15392,15398 ----
  f257a2d5d1384a750676e55da76dca2e  gcc/testsuite/g++.dg/cpp1y/lambda-generic-79005.C
  7d5f83c685271e73682308e9f1c0115f  gcc/testsuite/g++.dg/cpp1y/lambda-generic-83856.C
  5209bc3f1d48d6d7100a438fe34ed022  gcc/testsuite/g++.dg/cpp1y/lambda-generic-84125.C
! 820a5fe8ebe09a20adae190de86d8df5  gcc/testsuite/g++.dg/cpp1y/lambda-generic-85713-2.C
  dfa08547ad14229fe77e680e387d3dbe  gcc/testsuite/g++.dg/cpp1y/lambda-generic-85713.C
  e3c04ea33a4074f5cd6955ab214fc656  gcc/testsuite/g++.dg/cpp1y/lambda-generic-86875.C
  7640b354152fd775d65ec145fc4635da  gcc/testsuite/g++.dg/cpp1y/lambda-generic-87523.C
*************** a429d84bc7f4132705bbe16ebbde7773  gcc/te
*** 14986,14991 ****
--- 15420,15426 ----
  82b03b4626aa950dab28dc141638ae81  gcc/testsuite/g++.dg/cpp1y/lambda-generic-dep2.C
  b3d105376831c9fced97427b9128fab4  gcc/testsuite/g++.dg/cpp1y/lambda-generic-empty1.C
  d3f8bce30776925a103e5bcc1681b6ab  gcc/testsuite/g++.dg/cpp1y/lambda-generic-enum1.C
+ bebbad2dccf149ad3697584e53703d3d  gcc/testsuite/g++.dg/cpp1y/lambda-generic-enum2.C
  b7efd8d29878f4a8e3a07f9cf622188c  gcc/testsuite/g++.dg/cpp1y/lambda-generic-func1.C
  82fea772a2540cf9ab702c17cc2cdb54  gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice1.C
  2c1a495f8eecefe79fade7ccb361c16c  gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice10.C
*************** fd449c2760b279bd0767e28da8a563bf  gcc/te
*** 14998,15003 ****
--- 15433,15439 ----
  8efe65d95bbc02645dd6c2656587135e  gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice8.C
  cbe44bb553e043d66e5399d7f388dabf  gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice9.C
  65815d2456686230a8b4da8685461cb9  gcc/testsuite/g++.dg/cpp1y/lambda-generic-local-class1.C
+ 81a4729d1c94303fbb34bf57ad79ac29  gcc/testsuite/g++.dg/cpp1y/lambda-generic-local-fn1.C
  a5e1f08b66165b58419bbab37da9a962  gcc/testsuite/g++.dg/cpp1y/lambda-generic-mixed.C
  230ab773acec47b7efe832181c6c4972  gcc/testsuite/g++.dg/cpp1y/lambda-generic-nested1.C
  fcdbf299db7426d40d79e7ce91bbbc1e  gcc/testsuite/g++.dg/cpp1y/lambda-generic-nested2.C
*************** c9ebf7c65d25936f6751b5ecbf146c97  gcc/te
*** 15032,15037 ****
--- 15468,15474 ----
  723f502d3b40be6c90106e7124cc9e69  gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic2.C
  d146dfb92f0c30b11d9e7d20af8428d9  gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic20.C
  a85138cb5fc79cb28fc85f398f8a118d  gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic21.C
+ ea0ef488e2f9b474fdcfe07e601ce060  gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic22.C
  93fa62fac80c2db40c8540dcc1bb3cb1  gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic3.C
  3b97ac4e949f2c389ffb4065dc536705  gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic4.C
  141535a56934b529ba244dc7e7d15d06  gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic5.C
*************** a0fd7a682321878b07d220b8dae15ac3  gcc/te
*** 15077,15082 ****
--- 15514,15520 ----
  105e2ac1493d370f7fefe776ab7d70db  gcc/testsuite/g++.dg/cpp1y/new1.C
  b7000c26c6ee8cc9d890f03d21c575eb  gcc/testsuite/g++.dg/cpp1y/new2.C
  57ba16f858c68b0fbba78bdf9dabaf2a  gcc/testsuite/g++.dg/cpp1y/noexcept1.C
+ dc85812a9a16f085139b655ebe8b721c  gcc/testsuite/g++.dg/cpp1y/noexcept2.C
  bedfe39f995dd913a1715072975f6a1c  gcc/testsuite/g++.dg/cpp1y/nontype1.C
  4707396951c53026c3f457ecd9db5312  gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr1.C
  5326d1798f69e0f75031ab294cf8dd21  gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr10.C
*************** e8c6da7fb812f06074a9399c95d62136  gcc/te
*** 15101,15106 ****
--- 15539,15545 ----
  86a0b848e4db7d7f6ee1c78dcc897448  gcc/testsuite/g++.dg/cpp1y/paren4.C
  f5ccbfc0fb9fd723ce3d0565bf79908b  gcc/testsuite/g++.dg/cpp1y/paren5.C
  a59e5fd28eae5235838080483b6939a6  gcc/testsuite/g++.dg/cpp1y/phoobhar.h
+ 371feb662742879744f401685dc5a5e0  gcc/testsuite/g++.dg/cpp1y/pr104031.C
  7d18afb36bcaa55af2030c6546d5df38  gcc/testsuite/g++.dg/cpp1y/pr57640.C
  854092e98063500453c7c800d8eb73a5  gcc/testsuite/g++.dg/cpp1y/pr57644.C
  247d52471516e4b902d29d652eae1a51  gcc/testsuite/g++.dg/cpp1y/pr58533.C
*************** b1e9ba9fa637eed063b4c011ab1e7cc0  gcc/te
*** 15115,15124 ****
  43aaa4ff9a2dee14ecb92be853dd1a29  gcc/testsuite/g++.dg/cpp1y/pr59638.C
  ebbeb9821c2fa485e7209174b64bbb30  gcc/testsuite/g++.dg/cpp1y/pr59867.C
  0f216d35e00b88ff8d654b3497f3afdd  gcc/testsuite/g++.dg/cpp1y/pr60033.C
! 7099ae5675f3cf252a848317dcd61e0f  gcc/testsuite/g++.dg/cpp1y/pr60054.C
  fd4301fd2844bd03569ca727f83a92f9  gcc/testsuite/g++.dg/cpp1y/pr60190.C
  29dadd5c2626936723a7403fa5dfe8e2  gcc/testsuite/g++.dg/cpp1y/pr60311.C
! 77581530c256daf1a2c75e681f5f201b  gcc/testsuite/g++.dg/cpp1y/pr60332.C
  40acec3ac1a454f56e383b48fc8ebae2  gcc/testsuite/g++.dg/cpp1y/pr60376.C
  14980cdff98c45051c5c7902501ae872  gcc/testsuite/g++.dg/cpp1y/pr60384.C
  99c763cd99f25e862a2e2810898e21f2  gcc/testsuite/g++.dg/cpp1y/pr60393.C
--- 15554,15563 ----
  43aaa4ff9a2dee14ecb92be853dd1a29  gcc/testsuite/g++.dg/cpp1y/pr59638.C
  ebbeb9821c2fa485e7209174b64bbb30  gcc/testsuite/g++.dg/cpp1y/pr59867.C
  0f216d35e00b88ff8d654b3497f3afdd  gcc/testsuite/g++.dg/cpp1y/pr60033.C
! 54685a6b39b17b8d605ea07b1a8be812  gcc/testsuite/g++.dg/cpp1y/pr60054.C
  fd4301fd2844bd03569ca727f83a92f9  gcc/testsuite/g++.dg/cpp1y/pr60190.C
  29dadd5c2626936723a7403fa5dfe8e2  gcc/testsuite/g++.dg/cpp1y/pr60311.C
! f67d5719ba6a9dd401d757778ffe53d1  gcc/testsuite/g++.dg/cpp1y/pr60332.C
  40acec3ac1a454f56e383b48fc8ebae2  gcc/testsuite/g++.dg/cpp1y/pr60376.C
  14980cdff98c45051c5c7902501ae872  gcc/testsuite/g++.dg/cpp1y/pr60384.C
  99c763cd99f25e862a2e2810898e21f2  gcc/testsuite/g++.dg/cpp1y/pr60393.C
*************** c467fa18d9fd990ded06e474c9bddf3b  gcc/te
*** 15197,15202 ****
--- 15636,15642 ----
  00fd55359af11227a5a4b86e14abbb87  gcc/testsuite/g++.dg/cpp1y/pr94066-2.C
  b0cb037b3d1369f48884f81384e62dbb  gcc/testsuite/g++.dg/cpp1y/pr94066-3.C
  bf131a7532349a5471d38a10151a773d  gcc/testsuite/g++.dg/cpp1y/pr94066.C
+ ab8012aa0dfa04189dc1ec2234890234  gcc/testsuite/g++.dg/cpp1y/pr95226.C
  ac3a3cc471361b1fc9f3e55ad12dd7a8  gcc/testsuite/g++.dg/cpp1y/regress1.C
  9a759de4b7ac375d3c274acdf73c4fbe  gcc/testsuite/g++.dg/cpp1y/sized-dealloc1.C
  aeb199bf9a897359b6d538b5bce4e5ef  gcc/testsuite/g++.dg/cpp1y/sized-dealloc2.C
*************** b49a994714f8ac92c508dd3d6ab50d9d  gcc/te
*** 15282,15287 ****
--- 15722,15728 ----
  9e8483cf087cf5a9253eda7a0e3287b3  gcc/testsuite/g++.dg/cpp1y/var-templ67.C
  b481e5273496bfbbf3b3909be7169b4c  gcc/testsuite/g++.dg/cpp1y/var-templ68.C
  7ec7355a58dc65697a20d36778907420  gcc/testsuite/g++.dg/cpp1y/var-templ68a.C
+ b5a20feb4541fc90f07997bf20b2164d  gcc/testsuite/g++.dg/cpp1y/var-templ69.C
  3c670164f1a7f8f91ef1db2f80526182  gcc/testsuite/g++.dg/cpp1y/var-templ7.C
  7490ba7f2bf9511118a48f52e8c4ceed  gcc/testsuite/g++.dg/cpp1y/var-templ8.C
  c62c3c5ce4dabfb077ffd26896b1d204  gcc/testsuite/g++.dg/cpp1y/var-templ9.C
*************** f578ef92ec8a79f6e9dc1a030af56203  gcc/te
*** 15297,15302 ****
--- 15738,15744 ----
  d9d52b8fe2f970e02f1be30318793801  gcc/testsuite/g++.dg/cpp1z/Wpessimizing-move1.C
  03237ed8ef5d96f1a58edcbd6d1c7f00  gcc/testsuite/g++.dg/cpp1z/aggr-base1.C
  7248748a9a13eeb2cb077c3407b109c5  gcc/testsuite/g++.dg/cpp1z/aggr-base10.C
+ 1278598316884deb31a9cde2b03366a0  gcc/testsuite/g++.dg/cpp1z/aggr-base11.C
  5a42f67c17ea24ccec45839b5086bd26  gcc/testsuite/g++.dg/cpp1z/aggr-base12.C
  e149ab5ecfa10339d5771953be185fa8  gcc/testsuite/g++.dg/cpp1z/aggr-base1a.C
  4583da3d1eb350853a7252d4e6a3a64b  gcc/testsuite/g++.dg/cpp1z/aggr-base2.C
*************** ca10f046e47ea09ba5b87084372f1ce2  gcc/te
*** 15317,15322 ****
--- 15759,15765 ----
  4dbddfffb31fb9d4ab9b40b6ac489d84  gcc/testsuite/g++.dg/cpp1z/aligned-new6.C
  c5e8ac858eac19a1f1f10709e9b49389  gcc/testsuite/g++.dg/cpp1z/aligned-new7.C
  1c005f415746635350d5fd1bf3068b93  gcc/testsuite/g++.dg/cpp1z/aligned-new8.C
+ 91a3b7a59ec3f2f070c0cc2e24a851b2  gcc/testsuite/g++.dg/cpp1z/aligned-new9.C
  15f78f24e2133987caada47dbd4501b6  gcc/testsuite/g++.dg/cpp1z/attr-lambda1.C
  34121807f233280bd4b9ceb565c64cf6  gcc/testsuite/g++.dg/cpp1z/attributes-enum-1.C
  a6e3099890bf75adfc276a625b3b0e3f  gcc/testsuite/g++.dg/cpp1z/attributes-enum-1a.C
*************** a88352c069738f54613c17951d635f5e  gcc/te
*** 15324,15337 ****
  1a8594071bf162a6b7ab2b120a5e43d3  gcc/testsuite/g++.dg/cpp1z/bool-increment1.C
  daf6a1ab8d18fad76864f7a9c31adc71  gcc/testsuite/g++.dg/cpp1z/byte1.C
  6da7247a3eb4b4c4507555e38efb303e  gcc/testsuite/g++.dg/cpp1z/byte2.C
  2cd76aed036d115c3cb06e8ca0d0ece1  gcc/testsuite/g++.dg/cpp1z/class-deduction-decltype1.C
  3366b9d94d7b1a6e36f4c73b5364de67  gcc/testsuite/g++.dg/cpp1z/class-deduction-spec1.C
  6e5c654f918bffb16660300054fe6143  gcc/testsuite/g++.dg/cpp1z/class-deduction1.C
  521dabadcf6ec5d76ee583121d751149  gcc/testsuite/g++.dg/cpp1z/class-deduction10.C
  871331a13941944f7010cfb1344eab6e  gcc/testsuite/g++.dg/cpp1z/class-deduction109.C
  517aaeb274419d156e09eb5a7d5b7077  gcc/testsuite/g++.dg/cpp1z/class-deduction11.C
  9f4ecb418c0bbb6f3b318882c20889a4  gcc/testsuite/g++.dg/cpp1z/class-deduction110.C
! 0ee09ea78093c92338c6b29bc4a5b4ba  gcc/testsuite/g++.dg/cpp1z/class-deduction12.C
  8033f2dbb1dc793a3fea073353a0487a  gcc/testsuite/g++.dg/cpp1z/class-deduction13.C
  f51a81e3b0aa46f289c5ca9d3faaded6  gcc/testsuite/g++.dg/cpp1z/class-deduction14.C
  e3e05c165da411f84f868e0fb1238dca  gcc/testsuite/g++.dg/cpp1z/class-deduction15.C
--- 15767,15798 ----
  1a8594071bf162a6b7ab2b120a5e43d3  gcc/testsuite/g++.dg/cpp1z/bool-increment1.C
  daf6a1ab8d18fad76864f7a9c31adc71  gcc/testsuite/g++.dg/cpp1z/byte1.C
  6da7247a3eb4b4c4507555e38efb303e  gcc/testsuite/g++.dg/cpp1z/byte2.C
+ bcbf759bb56ccf456971d10508e36bb1  gcc/testsuite/g++.dg/cpp1z/class-deduction-access1.C
+ 5ab8afcca29134239a30485b208c8e93  gcc/testsuite/g++.dg/cpp1z/class-deduction-access2.C
+ 4a6517fab21cad4da983c00a3f671348  gcc/testsuite/g++.dg/cpp1z/class-deduction-access3.C
+ 514d4ea8264e43021db03981b8713674  gcc/testsuite/g++.dg/cpp1z/class-deduction-alias1.C
  2cd76aed036d115c3cb06e8ca0d0ece1  gcc/testsuite/g++.dg/cpp1z/class-deduction-decltype1.C
+ c7ee5ec4ba4078c806be180c8be3daba  gcc/testsuite/g++.dg/cpp1z/class-deduction-new1.C
  3366b9d94d7b1a6e36f4c73b5364de67  gcc/testsuite/g++.dg/cpp1z/class-deduction-spec1.C
  6e5c654f918bffb16660300054fe6143  gcc/testsuite/g++.dg/cpp1z/class-deduction1.C
  521dabadcf6ec5d76ee583121d751149  gcc/testsuite/g++.dg/cpp1z/class-deduction10.C
+ 9b8f3a733f926ad666152072dfb39e59  gcc/testsuite/g++.dg/cpp1z/class-deduction100.C
+ f5f2635e9cc881003f7d80ef7c841575  gcc/testsuite/g++.dg/cpp1z/class-deduction101.C
+ 5816ac0034574e7dab2a0f25fea93d66  gcc/testsuite/g++.dg/cpp1z/class-deduction101a.C
+ f2b658b7a96ad8710a98322a54dbcadc  gcc/testsuite/g++.dg/cpp1z/class-deduction101b.C
+ 87682194cd59186fa8a4525b7c03e593  gcc/testsuite/g++.dg/cpp1z/class-deduction102.C
+ e320dfc860965ae34a623e999125146d  gcc/testsuite/g++.dg/cpp1z/class-deduction102a.C
+ 43b70732d2f5e9a666dc46e06925899a  gcc/testsuite/g++.dg/cpp1z/class-deduction102b.C
+ d9f540743c02412636db1c146f00d7e0  gcc/testsuite/g++.dg/cpp1z/class-deduction103.C
+ 18c95cb5facbe6542568c3a66805bf15  gcc/testsuite/g++.dg/cpp1z/class-deduction104.C
+ 8b82ef55c6de52ccc067aba66c7ce89b  gcc/testsuite/g++.dg/cpp1z/class-deduction105.C
+ 361c5ab50ea7990cdc7574ddc618a95e  gcc/testsuite/g++.dg/cpp1z/class-deduction106.C
+ 4b701bdb0babeb887c506539ae224e75  gcc/testsuite/g++.dg/cpp1z/class-deduction107.C
+ db3b073f0c7359db6e2ad4fbfa9c08d5  gcc/testsuite/g++.dg/cpp1z/class-deduction108.C
  871331a13941944f7010cfb1344eab6e  gcc/testsuite/g++.dg/cpp1z/class-deduction109.C
  517aaeb274419d156e09eb5a7d5b7077  gcc/testsuite/g++.dg/cpp1z/class-deduction11.C
  9f4ecb418c0bbb6f3b318882c20889a4  gcc/testsuite/g++.dg/cpp1z/class-deduction110.C
! fccf66f75d0bb293e6ce56753e50eeda  gcc/testsuite/g++.dg/cpp1z/class-deduction12.C
  8033f2dbb1dc793a3fea073353a0487a  gcc/testsuite/g++.dg/cpp1z/class-deduction13.C
  f51a81e3b0aa46f289c5ca9d3faaded6  gcc/testsuite/g++.dg/cpp1z/class-deduction14.C
  e3e05c165da411f84f868e0fb1238dca  gcc/testsuite/g++.dg/cpp1z/class-deduction15.C
*************** f663fe16c189e85a87c99ac3e556cdff  gcc/te
*** 15411,15422 ****
--- 15872,15899 ----
  23e958854e1d39365c37e1a997d55a26  gcc/testsuite/g++.dg/cpp1z/class-deduction83.C
  7d0faa5e56f529947c47f73b3309ce56  gcc/testsuite/g++.dg/cpp1z/class-deduction84.C
  533990a3a8f21fecb63572f9aaf57a51  gcc/testsuite/g++.dg/cpp1z/class-deduction85.C
+ 8c96b566db2c9121dc0b34340e319d94  gcc/testsuite/g++.dg/cpp1z/class-deduction86.C
+ 1881ca72a837ea5c2ce4a14f7b67011a  gcc/testsuite/g++.dg/cpp1z/class-deduction87.C
+ fc705d5ed4f31bc4bdee3ed6523409d4  gcc/testsuite/g++.dg/cpp1z/class-deduction88.C
+ 4856ef06404c53a4b449e35a290424f8  gcc/testsuite/g++.dg/cpp1z/class-deduction89.C
  3920e918276476b088679b893b9cde19  gcc/testsuite/g++.dg/cpp1z/class-deduction9.C
+ b58031fdedbc4e0198262164feb2a642  gcc/testsuite/g++.dg/cpp1z/class-deduction90.C
+ 5c4cafaeadf753c2c9d4939e3814a4e8  gcc/testsuite/g++.dg/cpp1z/class-deduction91.C
+ 1392326422a067cdf4c7bfad3cb8363a  gcc/testsuite/g++.dg/cpp1z/class-deduction92.C
+ 47836f3a37be81c812c3b34fae697f5f  gcc/testsuite/g++.dg/cpp1z/class-deduction93.C
+ d1e8043a46c8a82299d7c90ff59e7fde  gcc/testsuite/g++.dg/cpp1z/class-deduction94.C
+ d6c4d4d65be955d16055ed3d8131241b  gcc/testsuite/g++.dg/cpp1z/class-deduction95.C
+ e5653327dac59b8fbbaf57941cdf7070  gcc/testsuite/g++.dg/cpp1z/class-deduction96.C
+ 72569990a4289b5fd2ca50f289a5457b  gcc/testsuite/g++.dg/cpp1z/class-deduction97.C
+ ee498b90c48803ed7e1e39f604107077  gcc/testsuite/g++.dg/cpp1z/class-deduction98.C
+ 196827ac69f45d97751bae8af9fb4549  gcc/testsuite/g++.dg/cpp1z/class-deduction99.C
  d09105e6c1f377543e5514e34d2837cd  gcc/testsuite/g++.dg/cpp1z/constexpr-83692.C
  6962bfa121a4383ee0b7a8f045abde3f  gcc/testsuite/g++.dg/cpp1z/constexpr-84684.C
+ 7417be75f23f5974ec35fe6261395c8c  gcc/testsuite/g++.dg/cpp1z/constexpr-89074-1.C
  45c5f013f34b63d5d77c2d394365a506  gcc/testsuite/g++.dg/cpp1z/constexpr-96575.C
  db812bf22a911000584c903aac50ffd3  gcc/testsuite/g++.dg/cpp1z/constexpr-96862.C
  58f65982ee216b64a2a721ba861c9e63  gcc/testsuite/g++.dg/cpp1z/constexpr-array1.C
+ 3e441287d887fe3be7eeab84a6b5695f  gcc/testsuite/g++.dg/cpp1z/constexpr-compare1.C
  d309961f0255b13605cf111efa2b095a  gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda1.C
  6031d9adb83bdf87e2dd05c8108493d1  gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda2.C
  6a2eb0af9be5a3b73df8e66127a94fd9  gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda3.C
*************** e0afea8f31b482e49f193350069eb677  gcc/te
*** 15449,15454 ****
--- 15926,15933 ----
  1d5b594f51f04bb4c8cdd450a24fd9e0  gcc/testsuite/g++.dg/cpp1z/constexpr-if32.C
  eef6b48a8fbf8eddc05a5373a7369c26  gcc/testsuite/g++.dg/cpp1z/constexpr-if33.C
  bb1e8039c5f9a1898a554f4a2c5b948b  gcc/testsuite/g++.dg/cpp1z/constexpr-if34.C
+ 285cf42451d3202fa49e91d006ccaf69  gcc/testsuite/g++.dg/cpp1z/constexpr-if35.C
+ d2b00d74edfce4b38dded9d7db2fe03e  gcc/testsuite/g++.dg/cpp1z/constexpr-if36.C
  d32800b4d59baf4fd0d00036181adc4d  gcc/testsuite/g++.dg/cpp1z/constexpr-if4.C
  8fa44fc4f9f1105ec488f8e5308e62eb  gcc/testsuite/g++.dg/cpp1z/constexpr-if5.C
  dd3fed7a614d71be04ab2475cca10561  gcc/testsuite/g++.dg/cpp1z/constexpr-if6.C
*************** dce176a560dd4b2fef1e83521ee11564  gcc/te
*** 15478,15484 ****
  5267d9825ab86007a9529cb6214eae5c  gcc/testsuite/g++.dg/cpp1z/constexpr-lambda4.C
  7b6d8d9af2ed24c66e7de295c6bd2cf9  gcc/testsuite/g++.dg/cpp1z/constexpr-lambda5.C
  f52bfa10d1639ecf00dde7f41065a8d5  gcc/testsuite/g++.dg/cpp1z/constexpr-lambda6.C
! 6bf895beb6f74fabc9674f6ac43f17fa  gcc/testsuite/g++.dg/cpp1z/constexpr-lambda7.C
  0cb6ac9bf693d7e79cc037b8bb03c507  gcc/testsuite/g++.dg/cpp1z/constexpr-lambda8.C
  6eeb4cc38b29ea107311eb709f951bce  gcc/testsuite/g++.dg/cpp1z/constexpr-lambda9.C
  dc79da7673ed16d15d0d867cdb7fd216  gcc/testsuite/g++.dg/cpp1z/constexpr-tracking-const1.C
--- 15957,15963 ----
  5267d9825ab86007a9529cb6214eae5c  gcc/testsuite/g++.dg/cpp1z/constexpr-lambda4.C
  7b6d8d9af2ed24c66e7de295c6bd2cf9  gcc/testsuite/g++.dg/cpp1z/constexpr-lambda5.C
  f52bfa10d1639ecf00dde7f41065a8d5  gcc/testsuite/g++.dg/cpp1z/constexpr-lambda6.C
! 3af36d6e5c42055ea5eb6b8a76c700f9  gcc/testsuite/g++.dg/cpp1z/constexpr-lambda7.C
  0cb6ac9bf693d7e79cc037b8bb03c507  gcc/testsuite/g++.dg/cpp1z/constexpr-lambda8.C
  6eeb4cc38b29ea107311eb709f951bce  gcc/testsuite/g++.dg/cpp1z/constexpr-lambda9.C
  dc79da7673ed16d15d0d867cdb7fd216  gcc/testsuite/g++.dg/cpp1z/constexpr-tracking-const1.C
*************** dc79da7673ed16d15d0d867cdb7fd216  gcc/te
*** 15487,15492 ****
--- 15966,15972 ----
  ba5e9d24245e572b3aebcc78d67fa0ac  gcc/testsuite/g++.dg/cpp1z/cplusplus_1z.C
  6cb5bd64dee599d4a945e5214571a950  gcc/testsuite/g++.dg/cpp1z/decomp-bitfield1.C
  54fceed618c734a72a2d434f2e034c83  gcc/testsuite/g++.dg/cpp1z/decomp-constexpr1.C
+ 6a345da0d66cfd381de9d2b7ee32b1f9  gcc/testsuite/g++.dg/cpp1z/decomp-decltype1.C
  ea7e537a1ad5bc31eef18e636048f90d  gcc/testsuite/g++.dg/cpp1z/decomp-lambda1.C
  84bc152455f2541db49df06bc811b1f3  gcc/testsuite/g++.dg/cpp1z/decomp1.C
  a0b3020edb75d5164c9ece29abdf24d9  gcc/testsuite/g++.dg/cpp1z/decomp10.C
*************** af1e704cf45a12bb8c7e2865e6b7debc  gcc/te
*** 15544,15555 ****
--- 16024,16037 ----
  0d7ba62c8322f4f98a085026e3ac529a  gcc/testsuite/g++.dg/cpp1z/decomp8.C
  20aa008483ed89882491910be20354b8  gcc/testsuite/g++.dg/cpp1z/decomp9.C
  fefdc934b2400f6aa155ad0d67a11e85  gcc/testsuite/g++.dg/cpp1z/direct-enum-init1.C
+ 45244811ce64588865c6f7822fd17ad3  gcc/testsuite/g++.dg/cpp1z/direct-enum-init2.C
  bb80552b47c4d46b3400512a6ca45bad  gcc/testsuite/g++.dg/cpp1z/dr393.C
  51bdf0d78f7ce1379a544070332830da  gcc/testsuite/g++.dg/cpp1z/elide1.C
  6b57844cae97efac146accbaaa00449b  gcc/testsuite/g++.dg/cpp1z/elide2.C
  bafa3ed0da0c14fc9337428032934f0f  gcc/testsuite/g++.dg/cpp1z/elide3.C
  d0b40ed850fd3e55310fb990acbb4a46  gcc/testsuite/g++.dg/cpp1z/elide4.C
  c19f90a6b67cea2957e319db88a63ee3  gcc/testsuite/g++.dg/cpp1z/elide5.C
+ e6baed7e5941603d690b9c2c737ea663  gcc/testsuite/g++.dg/cpp1z/elide6.C
  63be3b6d75aa3c2c8088552683d5245e  gcc/testsuite/g++.dg/cpp1z/eval-order10.C
  3abc6084e572264410718d38beb290bb  gcc/testsuite/g++.dg/cpp1z/eval-order11.C
  bb194d9ce590c9e5e69935ebac0f25e4  gcc/testsuite/g++.dg/cpp1z/eval-order2.C
*************** a53a61e2c3773add424075de3343c370  gcc/te
*** 15572,15577 ****
--- 16054,16060 ----
  c74b2113efcb17ebf1be773837691046  gcc/testsuite/g++.dg/cpp1z/fold10.C
  ba52c35faa435abd9cb368147dc00857  gcc/testsuite/g++.dg/cpp1z/fold11.C
  91bd8e80a033defa1c149b412cb7ba1c  gcc/testsuite/g++.dg/cpp1z/fold12.C
+ fa4ff7e96ff3b0d8cb7114d58f8127ac  gcc/testsuite/g++.dg/cpp1z/fold13.C
  5e8f1589e281e551eba15be5ad14bd8b  gcc/testsuite/g++.dg/cpp1z/fold2.C
  a33f917557c76cefc8e7e59dedbf0a4e  gcc/testsuite/g++.dg/cpp1z/fold3.C
  954117a731946951912acd1615190810  gcc/testsuite/g++.dg/cpp1z/fold4.C
*************** ac9f13854ea3e455a1371aaa819ee22a  gcc/te
*** 15586,15592 ****
  5f34b6f6c6b9801ac84fd35a7072c291  gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations2.C
  712e0c3f886fdb90e5e03d39bd877f92  gcc/testsuite/g++.dg/cpp1z/inh-ctor1.C
  a5a039fe3394138160509efa1a2212c5  gcc/testsuite/g++.dg/cpp1z/inh-ctor22.C
! b303784bcf07c99011e96f0a6da77c55  gcc/testsuite/g++.dg/cpp1z/inh-ctor23.C
  3c416011576c10ed86b95bf304ca023f  gcc/testsuite/g++.dg/cpp1z/inh-ctor24.C
  45131e9210d716ae2d9a812904a3ce5f  gcc/testsuite/g++.dg/cpp1z/inh-ctor25.C
  d4d712c093f995cda6f3e05b6c39d40c  gcc/testsuite/g++.dg/cpp1z/inh-ctor26.C
--- 16069,16075 ----
  5f34b6f6c6b9801ac84fd35a7072c291  gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations2.C
  712e0c3f886fdb90e5e03d39bd877f92  gcc/testsuite/g++.dg/cpp1z/inh-ctor1.C
  a5a039fe3394138160509efa1a2212c5  gcc/testsuite/g++.dg/cpp1z/inh-ctor22.C
! 08e66730eb666f41f2d9476748d3745f  gcc/testsuite/g++.dg/cpp1z/inh-ctor23.C
  3c416011576c10ed86b95bf304ca023f  gcc/testsuite/g++.dg/cpp1z/inh-ctor24.C
  45131e9210d716ae2d9a812904a3ce5f  gcc/testsuite/g++.dg/cpp1z/inh-ctor25.C
  d4d712c093f995cda6f3e05b6c39d40c  gcc/testsuite/g++.dg/cpp1z/inh-ctor26.C
*************** bedc458500693b5518d2b34bdc4de5cb  gcc/te
*** 15681,15686 ****
--- 16164,16170 ----
  67c6b023262a15cbea344311656cb28f  gcc/testsuite/g++.dg/cpp1z/noexcept-type22.C
  34cf97af47dbe4a7ade75b94363e77b9  gcc/testsuite/g++.dg/cpp1z/noexcept-type23.C
  8a677f921d635efea7480743417cad8f  gcc/testsuite/g++.dg/cpp1z/noexcept-type24.C
+ c5c848aea6f9a89e57f856a7b0fcfa31  gcc/testsuite/g++.dg/cpp1z/noexcept-type25.C
  a07bd6eee0bbce4f76caa1372e66c614  gcc/testsuite/g++.dg/cpp1z/noexcept-type3.C
  a1507d2a44a55f27a0e7109b7c2a2c43  gcc/testsuite/g++.dg/cpp1z/noexcept-type4.C
  2cbc6352072676c50982358370c66f1e  gcc/testsuite/g++.dg/cpp1z/noexcept-type5.C
*************** baa03d7258d20d4b9ab40c9db7bbc6b5  gcc/te
*** 15698,15704 ****
--- 16182,16190 ----
  98029cae32829adabcd476dc0d20251a  gcc/testsuite/g++.dg/cpp1z/nontype-auto16.C
  136588cec3c8fd1e4bfed33946433773  gcc/testsuite/g++.dg/cpp1z/nontype-auto17.C
  837d034a6f13e4e73019dee244d8bd6e  gcc/testsuite/g++.dg/cpp1z/nontype-auto18.C
+ 9c0545a642cd717b278b9781827b2ce1  gcc/testsuite/g++.dg/cpp1z/nontype-auto19.C
  ed6e021d8ba1db6a16b34256da084028  gcc/testsuite/g++.dg/cpp1z/nontype-auto2.C
+ d7a225864717dba5339af4608d8e13d4  gcc/testsuite/g++.dg/cpp1z/nontype-auto20.C
  cd20029423efae4adb87e862f927bf40  gcc/testsuite/g++.dg/cpp1z/nontype-auto3.C
  b7708449a230c66742c4b7273cffd6ff  gcc/testsuite/g++.dg/cpp1z/nontype-auto4.C
  1402258969b8e2de72b5d503776c4a4d  gcc/testsuite/g++.dg/cpp1z/nontype-auto5.C
*************** a97faaabc3ad077a0c916a25784bae51  gcc/te
*** 15710,15718 ****
  c621c0bd6807d2ddfd41755033d7b5d3  gcc/testsuite/g++.dg/cpp1z/nontype2.C
  ae3e1959f85f05c9ec509a6dbdbe24ca  gcc/testsuite/g++.dg/cpp1z/nontype3.C
  97b68e1efbd20ee3ef9eee20ccf717b4  gcc/testsuite/g++.dg/cpp1z/nontype3a.C
  e668ace19a2b0d8946e0e19fd8317af1  gcc/testsuite/g++.dg/cpp1z/pr78771.C
  bc5edc17d9b70d77a054dd4736a66223  gcc/testsuite/g++.dg/cpp1z/pr79143.C
! 07da6d9fdd2eb774e9b4b1d81aaca836  gcc/testsuite/g++.dg/cpp1z/pr81016.C
  d87dc7397fe03d75b41fb964195637d0  gcc/testsuite/g++.dg/cpp1z/pr81349.C
  d9c61dc32a1457892b6df30a48dfa700  gcc/testsuite/g++.dg/cpp1z/pr83020.C
  f6ffc70de816e7e603a0d5498e97f07d  gcc/testsuite/g++.dg/cpp1z/pr83644.C
--- 16196,16206 ----
  c621c0bd6807d2ddfd41755033d7b5d3  gcc/testsuite/g++.dg/cpp1z/nontype2.C
  ae3e1959f85f05c9ec509a6dbdbe24ca  gcc/testsuite/g++.dg/cpp1z/nontype3.C
  97b68e1efbd20ee3ef9eee20ccf717b4  gcc/testsuite/g++.dg/cpp1z/nontype3a.C
+ 6459f300d92f04eeb92c53237b82baac  gcc/testsuite/g++.dg/cpp1z/nontype4.C
+ 2d69a9b79c8f3fadb2bfb68b9d761c49  gcc/testsuite/g++.dg/cpp1z/nontype4a.C
  e668ace19a2b0d8946e0e19fd8317af1  gcc/testsuite/g++.dg/cpp1z/pr78771.C
  bc5edc17d9b70d77a054dd4736a66223  gcc/testsuite/g++.dg/cpp1z/pr79143.C
! 3e5ca07aaa322577e51fd003d9524cb0  gcc/testsuite/g++.dg/cpp1z/pr81016.C
  d87dc7397fe03d75b41fb964195637d0  gcc/testsuite/g++.dg/cpp1z/pr81349.C
  d9c61dc32a1457892b6df30a48dfa700  gcc/testsuite/g++.dg/cpp1z/pr83020.C
  f6ffc70de816e7e603a0d5498e97f07d  gcc/testsuite/g++.dg/cpp1z/pr83644.C
*************** fcb976b72ee32e007373a445749a9790  gcc/te
*** 15754,15765 ****
  5be5d7f2f40f7aea358f9007942afde2  gcc/testsuite/g++.dg/cpp1z/utf8-2a.C
  744ee2159e8e7541ebf28afa0155714d  gcc/testsuite/g++.dg/cpp1z/utf8-neg.C
  c307915525471ee8f08e6059faf237d8  gcc/testsuite/g++.dg/cpp1z/utf8.C
  e8f7bd0576728e974495935283ad4f39  gcc/testsuite/g++.dg/cpp23/constexpr-nonlit7.C
  94d923eb6e3e9a6e1a82b6aa88915ed5  gcc/testsuite/g++.dg/cpp23/cplusplus.C
! d39bcd154de40d84b2eefbe2f9697524  gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C
  570aa212dcff2a498d044c98fa66a858  gcc/testsuite/g++.dg/cpp23/lambda-specifiers1.C
  0b54a398f8b42d5fc1ce9e8f422c3298  gcc/testsuite/g++.dg/cpp23/lambda-specifiers2.C
  5fe66da6d2baee159060686defa0e47e  gcc/testsuite/g++.dg/cpp23/size_t-literals.C
  6e521186d896dd387882c734f9554b0d  gcc/testsuite/g++.dg/cpp2a/aggr1.C
  4c16f1196fa5b9ac2fd9ba5882eba51c  gcc/testsuite/g++.dg/cpp2a/aggr2.C
  92044f5b7098db5aa135ac9643297edb  gcc/testsuite/g++.dg/cpp2a/array-conv1.C
--- 16242,16311 ----
  5be5d7f2f40f7aea358f9007942afde2  gcc/testsuite/g++.dg/cpp1z/utf8-2a.C
  744ee2159e8e7541ebf28afa0155714d  gcc/testsuite/g++.dg/cpp1z/utf8-neg.C
  c307915525471ee8f08e6059faf237d8  gcc/testsuite/g++.dg/cpp1z/utf8.C
+ 21a6016a5ed226991ec2335d7534f279  gcc/testsuite/g++.dg/cpp23/auto-array.C
+ c2925243df4a98c7db45d3f75b3740b2  gcc/testsuite/g++.dg/cpp23/auto-array2.C
+ 82713ac60222a2a50f281bf875d44dd2  gcc/testsuite/g++.dg/cpp23/auto-array3.C
+ 5f84b8e5dc9371ae970490708491ce3c  gcc/testsuite/g++.dg/cpp23/auto-array4.C
+ cf5aa0107f8f30f3fff1a4de8babd1c7  gcc/testsuite/g++.dg/cpp23/auto-fncast1.C
+ f2780bc5fd525d2709b14d4b73adff01  gcc/testsuite/g++.dg/cpp23/auto-fncast10.C
+ 3204d4ae77e55c08f93f7bedf052d297  gcc/testsuite/g++.dg/cpp23/auto-fncast11.C
+ d132bd3d955db10a4c1bdd4e4fb66f69  gcc/testsuite/g++.dg/cpp23/auto-fncast12.C
+ 76d2964f5d2d58ccec6afc73c59f1b53  gcc/testsuite/g++.dg/cpp23/auto-fncast2.C
+ dda23dff758a778a7ead9dd8b58268fc  gcc/testsuite/g++.dg/cpp23/auto-fncast3.C
+ 7f7896e62e131143c799cd8b4ac52168  gcc/testsuite/g++.dg/cpp23/auto-fncast4.C
+ a3e45fa43e93f0feee63229645360240  gcc/testsuite/g++.dg/cpp23/auto-fncast5.C
+ ee275a353940684ccbb7ddd7068ccda8  gcc/testsuite/g++.dg/cpp23/auto-fncast6.C
+ ee32c4ffc3127b060ad7d2d7978d4c00  gcc/testsuite/g++.dg/cpp23/auto-fncast7.C
+ 8a8ca882186bd5d55e6181a90b89c5b0  gcc/testsuite/g++.dg/cpp23/auto-fncast8.C
+ 908376aadbb678dfe697398a3cf0bdb3  gcc/testsuite/g++.dg/cpp23/auto-fncast9.C
+ 436f3521c73eff29eb95a9935488f619  gcc/testsuite/g++.dg/cpp23/charlit-encoding1.C
+ a5e6981af3e3d461e280ff24cd289402  gcc/testsuite/g++.dg/cpp23/concepts-err1.C
+ 636155e5662c48788ae52677e22b5249  gcc/testsuite/g++.dg/cpp23/consteval-if1.C
+ c28c6948b623079449034db89bdf8f88  gcc/testsuite/g++.dg/cpp23/consteval-if10.C
+ ccce1958f813ec9cf507643e2e946897  gcc/testsuite/g++.dg/cpp23/consteval-if11.C
+ 180f93b23c3a64571573a219dfa17a40  gcc/testsuite/g++.dg/cpp23/consteval-if12.C
+ 0c2987c36a44c0c98a383d70be5c942e  gcc/testsuite/g++.dg/cpp23/consteval-if2.C
+ 909e8ba3173bcd65b84cb0817fc9d921  gcc/testsuite/g++.dg/cpp23/consteval-if3.C
+ 4dee0d03b04a747975829c69d2be6072  gcc/testsuite/g++.dg/cpp23/consteval-if4.C
+ 65e5d02e104d487ca69f9975bb729fbf  gcc/testsuite/g++.dg/cpp23/consteval-if5.C
+ ff9b290f487266d6ca91e864dfc563ad  gcc/testsuite/g++.dg/cpp23/consteval-if6.C
+ f393b96b1ce41606f9636a99684380eb  gcc/testsuite/g++.dg/cpp23/consteval-if7.C
+ c3433159b2bd23aac24ee2591dc866c3  gcc/testsuite/g++.dg/cpp23/consteval-if8.C
+ 7c4ec5fd631e7574891119be6fac6d15  gcc/testsuite/g++.dg/cpp23/consteval-if9.C
+ 48fd48c755d95afe74bea715a263d398  gcc/testsuite/g++.dg/cpp23/constexpr-nonlit1.C
+ 201248a105e514c4c72fbf0a70e36da5  gcc/testsuite/g++.dg/cpp23/constexpr-nonlit2.C
+ 29b978782c8ecbf640542ecb33c721df  gcc/testsuite/g++.dg/cpp23/constexpr-nonlit3.C
+ 95ee7fbe282c20f6111c715f5abb98de  gcc/testsuite/g++.dg/cpp23/constexpr-nonlit4.C
+ 53c4ea2ddf9cf367f5c2485dffae1c1b  gcc/testsuite/g++.dg/cpp23/constexpr-nonlit5.C
+ 6bfd7e3fb2dd8f7e8d9c698e12bcb12d  gcc/testsuite/g++.dg/cpp23/constexpr-nonlit6.C
  e8f7bd0576728e974495935283ad4f39  gcc/testsuite/g++.dg/cpp23/constexpr-nonlit7.C
  94d923eb6e3e9a6e1a82b6aa88915ed5  gcc/testsuite/g++.dg/cpp23/cplusplus.C
! 92d47ef004cad05d17725e67099961ba  gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C
! b2919427c96be25ae3a72933323c8de1  gcc/testsuite/g++.dg/cpp23/init-stmt1.C
! 368308646b02bb36cf22014a0d5bbbdb  gcc/testsuite/g++.dg/cpp23/init-stmt2.C
  570aa212dcff2a498d044c98fa66a858  gcc/testsuite/g++.dg/cpp23/lambda-specifiers1.C
  0b54a398f8b42d5fc1ce9e8f422c3298  gcc/testsuite/g++.dg/cpp23/lambda-specifiers2.C
+ 7dfb88c8fc8142f5c07fe2c473ad00e1  gcc/testsuite/g++.dg/cpp23/lookup2.C
+ 9b6a18d5dc65ed2734b38938569e70bd  gcc/testsuite/g++.dg/cpp23/mixed-concat1.C
+ 687cd081771bc128431790436ec4d97b  gcc/testsuite/g++.dg/cpp23/narrowing-bool1.C
+ 02ae654405ab40dff13d7bf9efbc86c9  gcc/testsuite/g++.dg/cpp23/normalize1.C
+ 7aae36e156f721eb96f9f2971ec2efdb  gcc/testsuite/g++.dg/cpp23/normalize2.C
+ 89ad4e6ac3a80405914de06a6e9c7ed5  gcc/testsuite/g++.dg/cpp23/normalize3.C
+ db740268984e13059571b37af26229f7  gcc/testsuite/g++.dg/cpp23/normalize4.C
+ 5300ced02ead4880cbff47e1d6373999  gcc/testsuite/g++.dg/cpp23/normalize5.C
+ 8125bd59f190ca2bccecdec26bb94127  gcc/testsuite/g++.dg/cpp23/normalize6.C
+ ef7d7c0e26159c8de94fcb3f8aeb2c11  gcc/testsuite/g++.dg/cpp23/normalize7.C
  5fe66da6d2baee159060686defa0e47e  gcc/testsuite/g++.dg/cpp23/size_t-literals.C
+ 36f6327df1a56ea4e9b05f09e62c676c  gcc/testsuite/g++.dg/cpp23/subscript1.C
+ 4fc343553d0042f79bb6999971e7f3f1  gcc/testsuite/g++.dg/cpp23/subscript2.C
+ 5c1847673786b152609b1696a5e8c094  gcc/testsuite/g++.dg/cpp23/subscript3.C
+ 1cc2764b96a62eefc30e464e19cc2483  gcc/testsuite/g++.dg/cpp23/subscript4.C
+ 80e6dc5c6a33d1b4cff9fb1b2fd780da  gcc/testsuite/g++.dg/cpp23/subscript5.C
+ 8fcc8a8ee33aa0447a667acdbe7e96c4  gcc/testsuite/g++.dg/cpp23/subscript6.C
+ ac774c183ac6257c45b8fd97824ef1a0  gcc/testsuite/g++.dg/cpp23/subscript7.C
+ 08f054da96e20dbe3d814a912b9f815e  gcc/testsuite/g++.dg/cpp23/ucnid-1-utf8.C
+ 1c3bafba4e398318c09ff055adc0c76a  gcc/testsuite/g++.dg/cpp23/ucnid-2-utf8.C
+ 60f9d3d6a5d9c7ef12a738913318d3ba  gcc/testsuite/g++.dg/cpp23/whitespace-splice1.C
  6e521186d896dd387882c734f9554b0d  gcc/testsuite/g++.dg/cpp2a/aggr1.C
  4c16f1196fa5b9ac2fd9ba5882eba51c  gcc/testsuite/g++.dg/cpp2a/aggr2.C
  92044f5b7098db5aa135ac9643297edb  gcc/testsuite/g++.dg/cpp2a/array-conv1.C
*************** f45c14802a831b4c2d66638708833b4e  gcc/te
*** 15787,15792 ****
--- 16333,16342 ----
  fdfceca1c064eeb01d47f6a29cee1f95  gcc/testsuite/g++.dg/cpp2a/attr-likely6.C
  3ad5e93951baf0d22ea016ff9e7e5647  gcc/testsuite/g++.dg/cpp2a/bit-cast1.C
  a3d09682b891e46d2909fa15e90968be  gcc/testsuite/g++.dg/cpp2a/bit-cast10.C
+ 7a65b964ef0c3be6bb2d00ec1bdc20ac  gcc/testsuite/g++.dg/cpp2a/bit-cast11.C
+ 9bcf8bdfc6df75ec002468c1f548c44e  gcc/testsuite/g++.dg/cpp2a/bit-cast12.C
+ 6ef777b34934fa2f70b3248e0ca3f4c0  gcc/testsuite/g++.dg/cpp2a/bit-cast13.C
+ b3285f9f18a8d9542bc46f53e0efd28e  gcc/testsuite/g++.dg/cpp2a/bit-cast14.C
  fc2669bf6c2d9f293b18029e7572dc94  gcc/testsuite/g++.dg/cpp2a/bit-cast15.C
  1a2fa5e09ce4afea93f8549367941793  gcc/testsuite/g++.dg/cpp2a/bit-cast2.C
  4cd9a6c75b7b9c06d500d33a4b70e045  gcc/testsuite/g++.dg/cpp2a/bit-cast3.C
*************** efde6c8c1860e6796275cd76c0810b5d  gcc/te
*** 15800,15805 ****
--- 16350,16356 ----
  6459f6af0671a76d588568648ec2536c  gcc/testsuite/g++.dg/cpp2a/bitfield2.C
  dbb38d79b4b755c3350566626fdf9bd8  gcc/testsuite/g++.dg/cpp2a/bitfield3.C
  74cc445497f4dd39bb1cc3a9955074a9  gcc/testsuite/g++.dg/cpp2a/bitfield4.C
+ ce2ca706a5ade45822ac6444b2054bc1  gcc/testsuite/g++.dg/cpp2a/builtin-clear-padding1.C
  2a52f543924b11d7fbba0d5b92cdf169  gcc/testsuite/g++.dg/cpp2a/char8_t1.C
  6af0af64f6a4543707d9245ae3e3cb2c  gcc/testsuite/g++.dg/cpp2a/char8_t2.C
  f185c95e6533c47459ae6a6e7821f682  gcc/testsuite/g++.dg/cpp2a/class-deduction-abbrev1.C
*************** cb1a58e37d4fb866418947cb0f59edad  gcc/te
*** 15817,15822 ****
--- 16368,16374 ----
  a6e0596871a58160e95f35f1da953609  gcc/testsuite/g++.dg/cpp2a/class-deduction-aggr9.C
  435d8338859edbe8d0c9cba841bea218  gcc/testsuite/g++.dg/cpp2a/class-deduction-alias1.C
  c5ed9bcafe878933a01c19df089efba7  gcc/testsuite/g++.dg/cpp2a/class-deduction-alias10.C
+ a9fe8b77c077e10499786d1f43d69e35  gcc/testsuite/g++.dg/cpp2a/class-deduction-alias11.C
  5fc58f05c478c6749c3f3dd4351420b0  gcc/testsuite/g++.dg/cpp2a/class-deduction-alias2.C
  2fd0252922ffc9e49528942c28494f78  gcc/testsuite/g++.dg/cpp2a/class-deduction-alias3.C
  06de637acc58c0572ef2eb75419e55e3  gcc/testsuite/g++.dg/cpp2a/class-deduction-alias4.C
*************** c5ed9bcafe878933a01c19df089efba7  gcc/te
*** 15825,15836 ****
  3d59688f146fdaa417c0679c3daf962b  gcc/testsuite/g++.dg/cpp2a/class-deduction-alias7.C
  860b0c6e24138897f501915458fc4a3e  gcc/testsuite/g++.dg/cpp2a/class-deduction-alias8.C
  ea4809b73e64f7ee4e0393e4a03cac8f  gcc/testsuite/g++.dg/cpp2a/class-deduction-alias9.C
! c1e1f79f140203dd924a70f88886c62e  gcc/testsuite/g++.dg/cpp2a/comma1.C
  09399dec8eb1e8129209692532bf9ba5  gcc/testsuite/g++.dg/cpp2a/comma2.C
! d6c6fbba9ebe083780b2e382feedd3f0  gcc/testsuite/g++.dg/cpp2a/comma3.C
! 91cdf86169cdf8a6437bdab0961cddb2  gcc/testsuite/g++.dg/cpp2a/comma4.C
! 748110ebf8f30e5bf4ddcacbf8d323d5  gcc/testsuite/g++.dg/cpp2a/comma5.C
  3982ca152ace777ab5c2835845d0dbcc  gcc/testsuite/g++.dg/cpp2a/concepts-access1.C
  4af40a8c84fb1337e9cb46bed9294d68  gcc/testsuite/g++.dg/cpp2a/concepts-alias.C
  7ae1a25f7b8ee467de1b91bf2df83b3f  gcc/testsuite/g++.dg/cpp2a/concepts-alias2.C
  02000fba8afd50c1bb78d185c12511eb  gcc/testsuite/g++.dg/cpp2a/concepts-alias3.C
--- 16377,16389 ----
  3d59688f146fdaa417c0679c3daf962b  gcc/testsuite/g++.dg/cpp2a/class-deduction-alias7.C
  860b0c6e24138897f501915458fc4a3e  gcc/testsuite/g++.dg/cpp2a/class-deduction-alias8.C
  ea4809b73e64f7ee4e0393e4a03cac8f  gcc/testsuite/g++.dg/cpp2a/class-deduction-alias9.C
! 7d917e356f7b1ce28dabca77544643e7  gcc/testsuite/g++.dg/cpp2a/comma1.C
  09399dec8eb1e8129209692532bf9ba5  gcc/testsuite/g++.dg/cpp2a/comma2.C
! 65a245776e70ed16a967523446870976  gcc/testsuite/g++.dg/cpp2a/comma3.C
! f33888b04953680fc8c3106a62bd41c1  gcc/testsuite/g++.dg/cpp2a/comma4.C
! 71742c6c9c3e31f0af60c84fc31f4958  gcc/testsuite/g++.dg/cpp2a/comma5.C
  3982ca152ace777ab5c2835845d0dbcc  gcc/testsuite/g++.dg/cpp2a/concepts-access1.C
+ b4e33fccd7f224ba9afcc26891ea6deb  gcc/testsuite/g++.dg/cpp2a/concepts-access2.C
  4af40a8c84fb1337e9cb46bed9294d68  gcc/testsuite/g++.dg/cpp2a/concepts-alias.C
  7ae1a25f7b8ee467de1b91bf2df83b3f  gcc/testsuite/g++.dg/cpp2a/concepts-alias2.C
  02000fba8afd50c1bb78d185c12511eb  gcc/testsuite/g++.dg/cpp2a/concepts-alias3.C
*************** c7b9c33b4c64892adbf5412ad5123053  gcc/te
*** 15855,15861 ****
  fb0e127ecb1cec0db6d4a1f2dc191508  gcc/testsuite/g++.dg/cpp2a/concepts-ctad2.C
  b767b966d12988229b81b213bca08722  gcc/testsuite/g++.dg/cpp2a/concepts-ctad3.C
  92b00677c84ff0ab7a080b5e24484d91  gcc/testsuite/g++.dg/cpp2a/concepts-ctad4.C
! 6cb53000f2b233d691cd0777f551b3c5  gcc/testsuite/g++.dg/cpp2a/concepts-decltype.C
  ce0107015099b9bc8bbb6308d69d1335  gcc/testsuite/g++.dg/cpp2a/concepts-decltype2.C
  20942197b42aecb2031c455e6c7139db  gcc/testsuite/g++.dg/cpp2a/concepts-decltype3.C
  2ff1559b74cd8147b9de258edac783b1  gcc/testsuite/g++.dg/cpp2a/concepts-defarg1.C
--- 16408,16414 ----
  fb0e127ecb1cec0db6d4a1f2dc191508  gcc/testsuite/g++.dg/cpp2a/concepts-ctad2.C
  b767b966d12988229b81b213bca08722  gcc/testsuite/g++.dg/cpp2a/concepts-ctad3.C
  92b00677c84ff0ab7a080b5e24484d91  gcc/testsuite/g++.dg/cpp2a/concepts-ctad4.C
! edb46bdf72eaeb378f5f0d557153ad9d  gcc/testsuite/g++.dg/cpp2a/concepts-decltype.C
  ce0107015099b9bc8bbb6308d69d1335  gcc/testsuite/g++.dg/cpp2a/concepts-decltype2.C
  20942197b42aecb2031c455e6c7139db  gcc/testsuite/g++.dg/cpp2a/concepts-decltype3.C
  2ff1559b74cd8147b9de258edac783b1  gcc/testsuite/g++.dg/cpp2a/concepts-defarg1.C
*************** c215ebfad2b56bf6dd6b0a287515afa7  gcc/te
*** 15865,15870 ****
--- 16418,16424 ----
  9a6f2742da84cba311f0be393cccdd14  gcc/testsuite/g++.dg/cpp2a/concepts-err1.C
  9cfd545ae89835254bd89b814539ec8f  gcc/testsuite/g++.dg/cpp2a/concepts-err2.C
  d953a772cd1d2f181c0e4b6b2f47961d  gcc/testsuite/g++.dg/cpp2a/concepts-err3.C
+ 1badb94d696850d2e24621a9c6a91613  gcc/testsuite/g++.dg/cpp2a/concepts-err4.C
  58c69136270d7c38c79f96cdf4f5677a  gcc/testsuite/g++.dg/cpp2a/concepts-explicit-inst1.C
  a36328931eee1fbab16d05f42eacf4bd  gcc/testsuite/g++.dg/cpp2a/concepts-explicit-inst2.C
  8d43f44aae36b8a20d34b07e48caa27e  gcc/testsuite/g++.dg/cpp2a/concepts-explicit-inst3.C
*************** d5de687d9a2db5030fe9635cd6b560fc  gcc/te
*** 15909,15915 ****
  e459f662c1babef952fc8ed43a3c456a  gcc/testsuite/g++.dg/cpp2a/concepts-lambda11.C
  00c2df64959390d6aa7fae1303f13993  gcc/testsuite/g++.dg/cpp2a/concepts-lambda12.C
  b593885abfe9fa1e41aac5773b850812  gcc/testsuite/g++.dg/cpp2a/concepts-lambda13.C
! ce799078e9f1ff1339d260a0437f50bb  gcc/testsuite/g++.dg/cpp2a/concepts-lambda14.C
  06d21d29a1465389d640dd9c6385524d  gcc/testsuite/g++.dg/cpp2a/concepts-lambda15.C
  e4194669f093a7afc4d5ecdf72352e0f  gcc/testsuite/g++.dg/cpp2a/concepts-lambda16.C
  06bd50a31b004aed3b6d5dbd8ba09c45  gcc/testsuite/g++.dg/cpp2a/concepts-lambda17.C
--- 16463,16469 ----
  e459f662c1babef952fc8ed43a3c456a  gcc/testsuite/g++.dg/cpp2a/concepts-lambda11.C
  00c2df64959390d6aa7fae1303f13993  gcc/testsuite/g++.dg/cpp2a/concepts-lambda12.C
  b593885abfe9fa1e41aac5773b850812  gcc/testsuite/g++.dg/cpp2a/concepts-lambda13.C
! 8ba79212001dde02c4b54e39b9286678  gcc/testsuite/g++.dg/cpp2a/concepts-lambda14.C
  06d21d29a1465389d640dd9c6385524d  gcc/testsuite/g++.dg/cpp2a/concepts-lambda15.C
  e4194669f093a7afc4d5ecdf72352e0f  gcc/testsuite/g++.dg/cpp2a/concepts-lambda16.C
  06bd50a31b004aed3b6d5dbd8ba09c45  gcc/testsuite/g++.dg/cpp2a/concepts-lambda17.C
*************** ca398f2b2e8443dc7a94b70c83a40ca1  gcc/te
*** 15949,15954 ****
--- 16503,16510 ----
  c02adf26d58e820807cae8699c98d45a  gcc/testsuite/g++.dg/cpp2a/concepts-p2113a.C
  d419d794d35f72a64d62ad6da7dc8b75  gcc/testsuite/g++.dg/cpp2a/concepts-p2113b.C
  832c51f3914e8bfe28767b53255b00e6  gcc/testsuite/g++.dg/cpp2a/concepts-partial-spec.C
+ 2448a29ac89b37a27f8024471c30a008  gcc/testsuite/g++.dg/cpp2a/concepts-partial-spec10.C
+ a218e21f1b85fa16709c2ec57c9d12cd  gcc/testsuite/g++.dg/cpp2a/concepts-partial-spec11.C
  73a09ba5b73bea20b72e95116b9c7dee  gcc/testsuite/g++.dg/cpp2a/concepts-partial-spec2.C
  3c01201683b221045bd1faca7a936921  gcc/testsuite/g++.dg/cpp2a/concepts-partial-spec3.C
  fe3419a05a4d0b37befa20fa2b74e5c7  gcc/testsuite/g++.dg/cpp2a/concepts-partial-spec4.C
*************** f1cbfc7c7a5b436ba46f015490d1f5e3  gcc/te
*** 16040,16048 ****
  254ef1258be3b4ea81014ce3f0ff41aa  gcc/testsuite/g++.dg/cpp2a/concepts-pr84140.C
  36d00fa8a1fecaba261bd00d6dd6094e  gcc/testsuite/g++.dg/cpp2a/concepts-pr84551.C
  32711f92204c15d0d19e4313d121f6b8  gcc/testsuite/g++.dg/cpp2a/concepts-pr84810.C
! 2a5a858e25e1416cbd2029c32f64cf71  gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C
! 6bd241ea34c787bf8f72199a6d0cbfd2  gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C
! 22398666d350a2e24538f2403ca8c4ec  gcc/testsuite/g++.dg/cpp2a/concepts-pr84979.C
  59cb220f0035bd18b133b1aee68c3f93  gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C
  7eeddbc465798c530d779ab3ff662f46  gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C
  27d70640425a392e01875d0ec6be9397  gcc/testsuite/g++.dg/cpp2a/concepts-pr85706.C
--- 16596,16604 ----
  254ef1258be3b4ea81014ce3f0ff41aa  gcc/testsuite/g++.dg/cpp2a/concepts-pr84140.C
  36d00fa8a1fecaba261bd00d6dd6094e  gcc/testsuite/g++.dg/cpp2a/concepts-pr84551.C
  32711f92204c15d0d19e4313d121f6b8  gcc/testsuite/g++.dg/cpp2a/concepts-pr84810.C
! 2d71d4e3fdb05dc2f79f2d5aff64e1ac  gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C
! d51d28c74ca23bd4646a3d3bfb16bcd3  gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C
! 13fe164a5fd78a533b38323a606f025a  gcc/testsuite/g++.dg/cpp2a/concepts-pr84979.C
  59cb220f0035bd18b133b1aee68c3f93  gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C
  7eeddbc465798c530d779ab3ff662f46  gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C
  27d70640425a392e01875d0ec6be9397  gcc/testsuite/g++.dg/cpp2a/concepts-pr85706.C
*************** a1669b67bbdc997b3e18d984f69a5dd7  gcc/te
*** 16057,16063 ****
  84e3bf69ec5b7c3c513058b3d69bfc41  gcc/testsuite/g++.dg/cpp2a/concepts-pr95497.C
  f14a1d093c6192fd601a94286a19cd55  gcc/testsuite/g++.dg/cpp2a/concepts-pr97093.C
  f713831318164c8a8d53cee4f41a5feb  gcc/testsuite/g++.dg/cpp2a/concepts-pr98394.C
! b643732d29e3ea4d763cb2354949bd77  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat1.C
  494a9362815e7269cd14d3b6eb900c68  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat2.C
  c74823853141d61f8e8a8e1d3a3f8bd4  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat3.C
  e73f0ee4378def5488befad6282159a1  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat4.C
--- 16613,16620 ----
  84e3bf69ec5b7c3c513058b3d69bfc41  gcc/testsuite/g++.dg/cpp2a/concepts-pr95497.C
  f14a1d093c6192fd601a94286a19cd55  gcc/testsuite/g++.dg/cpp2a/concepts-pr97093.C
  f713831318164c8a8d53cee4f41a5feb  gcc/testsuite/g++.dg/cpp2a/concepts-pr98394.C
! 47d56c0b8e4b2e304785aae26d0409fb  gcc/testsuite/g++.dg/cpp2a/concepts-pr98644.C
! 7bff00217f0937919ad829a2aa4986de  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat1.C
  494a9362815e7269cd14d3b6eb900c68  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat2.C
  c74823853141d61f8e8a8e1d3a3f8bd4  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat3.C
  e73f0ee4378def5488befad6282159a1  gcc/testsuite/g++.dg/cpp2a/concepts-recursive-sat4.C
*************** de98c5b97dd70e513e1c4be84c9e9153  gcc/te
*** 16081,16090 ****
--- 16638,16649 ----
  533db7e7d7422951c2d0551729c35e3d  gcc/testsuite/g++.dg/cpp2a/concepts-requires24.C
  798127f49ece043211b259a3610451d5  gcc/testsuite/g++.dg/cpp2a/concepts-requires25.C
  a8200681bca98aa623d744251dada14f  gcc/testsuite/g++.dg/cpp2a/concepts-requires26.C
+ 1aba743488c31f3653a4ba0d07686705  gcc/testsuite/g++.dg/cpp2a/concepts-requires27.C
  0d93946d4bdaa9dd958a99b19128372c  gcc/testsuite/g++.dg/cpp2a/concepts-requires28.C
  9c9bfab9cfda662c9a6cf1fcf12eba12  gcc/testsuite/g++.dg/cpp2a/concepts-requires29.C
  e6e703168548b58827e38ded644feb36  gcc/testsuite/g++.dg/cpp2a/concepts-requires29a.C
  ed7e50860b352f18084c5990524595b2  gcc/testsuite/g++.dg/cpp2a/concepts-requires3.C
+ af01c600c3ac040f6855ee2ed2bff7bc  gcc/testsuite/g++.dg/cpp2a/concepts-requires30.C
  d3851914c01bf78597e5cb411ed0b3d5  gcc/testsuite/g++.dg/cpp2a/concepts-requires4.C
  480013be0f806d0b078176447ae77360  gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C
  8ea6ab45de0c359b113c65f1958a54a1  gcc/testsuite/g++.dg/cpp2a/concepts-requires6.C
*************** cd7abc8d42b6882b26382ab5c9549dc9  gcc/te
*** 16094,16099 ****
--- 16653,16659 ----
  df41d5e3eb088a4079a9e8ca6adc1cd1  gcc/testsuite/g++.dg/cpp2a/concepts-return-req1.C
  73d7ca2c4ac7816b0388f526d4e04629  gcc/testsuite/g++.dg/cpp2a/concepts-return-req2.C
  328e3a75620bf7edb8349523d4785673  gcc/testsuite/g++.dg/cpp2a/concepts-return-req3.C
+ ad64150b7244228f6fbd5e2a90ba099c  gcc/testsuite/g++.dg/cpp2a/concepts-return-req4.C
  dfcd95576f20c2cc8e894aafe754dd43  gcc/testsuite/g++.dg/cpp2a/concepts-sfinae1.C
  94e516c88a3b958114e11fa18857ea12  gcc/testsuite/g++.dg/cpp2a/concepts-spec1.C
  e7d2cd347c791b674d0be66da74077a1  gcc/testsuite/g++.dg/cpp2a/concepts-syntax1.C
*************** ec9215388b111eac1916dca163b2b4dd  gcc/te
*** 16107,16112 ****
--- 16667,16673 ----
  ee36c7ebc03385f37bcba1c49e06c808  gcc/testsuite/g++.dg/cpp2a/concepts-this1.C
  39c15f1dc604f714304d144250164089  gcc/testsuite/g++.dg/cpp2a/concepts-traits1.C
  c9a6ab7bc0f1947e843b9c7150ccb98c  gcc/testsuite/g++.dg/cpp2a/concepts-traits2.C
+ da802903e656a602947ee543e58f625e  gcc/testsuite/g++.dg/cpp2a/concepts-traits3.C
  82c399ad9b34b095f9489e636de58940  gcc/testsuite/g++.dg/cpp2a/concepts-ts1.C
  202e848af4b3017e51ab2eb5995fffeb  gcc/testsuite/g++.dg/cpp2a/concepts-ts2.C
  ea441494e2367b584a16520ca6327732  gcc/testsuite/g++.dg/cpp2a/concepts-ts3.C
*************** ef5b971f899385a069755bce1facefe5  gcc/te
*** 16115,16123 ****
--- 16676,16686 ----
  ac4c42a0f2fd071297e154c82dd3e5cc  gcc/testsuite/g++.dg/cpp2a/concepts-ts6.C
  427561cea6003909c32f28fbe3d276c7  gcc/testsuite/g++.dg/cpp2a/concepts-ttp1.C
  e9afe83f998c36b2fb7c1f09347d0bde  gcc/testsuite/g++.dg/cpp2a/concepts-ttp2.C
+ 61d4933dc5691f3ec1773e39ad6449b4  gcc/testsuite/g++.dg/cpp2a/concepts-ttp3.C
  9fd760dc32683991c1046ee2a7769a0f  gcc/testsuite/g++.dg/cpp2a/concepts-ttp4.C
  12bfd0f0b99ab93e9f3c3ea3610ad8db  gcc/testsuite/g++.dg/cpp2a/concepts-uneval1.C
  728cf90d57c99021cb85c6b8dd9ffa5e  gcc/testsuite/g++.dg/cpp2a/concepts-uneval2.C
+ 8ededbbf50406070bfd15b600f7ea746  gcc/testsuite/g++.dg/cpp2a/concepts-uneval3.C
  b06aea4ef34a1015ed525413558ddac0  gcc/testsuite/g++.dg/cpp2a/concepts-uneval4.C
  46c88800430846d1342afc6e037103b6  gcc/testsuite/g++.dg/cpp2a/concepts-uneval5.C
  0b2965d78d2aee9abfaea9a39dd0dd98  gcc/testsuite/g++.dg/cpp2a/concepts-using1.C
*************** b821d53c13959d1237a15620094c9130  gcc/te
*** 16143,16148 ****
--- 16706,16713 ----
  32d8d55981aa81f973b7e8fdf83830c7  gcc/testsuite/g++.dg/cpp2a/consteval-defarg1.C
  6b5fc6f23fc6df75d45300b8bc1ad4ef  gcc/testsuite/g++.dg/cpp2a/consteval-defarg2.C
  06108a2b84aac0c8eb7f2844fc732944  gcc/testsuite/g++.dg/cpp2a/consteval-expinst1.C
+ f29020257148069c835c9a7a2f6c2449  gcc/testsuite/g++.dg/cpp2a/consteval-memfn1.C
+ db212700d636aa0588ecc9341fc2ff01  gcc/testsuite/g++.dg/cpp2a/consteval-memfn2.C
  7b90d1522f394885f74ddf54ce29750f  gcc/testsuite/g++.dg/cpp2a/consteval-virtual1.C
  9f2787601c2b5593ddafd943b082968f  gcc/testsuite/g++.dg/cpp2a/consteval-virtual2.C
  291b799cfb4c7cddd247f15746dbb707  gcc/testsuite/g++.dg/cpp2a/consteval-virtual3.C
*************** e653be614b47427e0ec998982e197f92  gcc/te
*** 16153,16159 ****
  405a4e1920b1811e8affa4f06ff6cb2c  gcc/testsuite/g++.dg/cpp2a/consteval10.C
  248503818c0f58904cf573627cfae347  gcc/testsuite/g++.dg/cpp2a/consteval11.C
  86103552db866d480f1646bc3430ffad  gcc/testsuite/g++.dg/cpp2a/consteval12.C
! 253cdb8b4de32ff490fe51e83298a01b  gcc/testsuite/g++.dg/cpp2a/consteval13.C
  d47ccb9544381b6ea21634d25ac4e852  gcc/testsuite/g++.dg/cpp2a/consteval14.C
  4a0878e63450081d81763b22f9b843b8  gcc/testsuite/g++.dg/cpp2a/consteval15.C
  8bd8f68291a139315c558daf74cdcf52  gcc/testsuite/g++.dg/cpp2a/consteval16.C
--- 16718,16724 ----
  405a4e1920b1811e8affa4f06ff6cb2c  gcc/testsuite/g++.dg/cpp2a/consteval10.C
  248503818c0f58904cf573627cfae347  gcc/testsuite/g++.dg/cpp2a/consteval11.C
  86103552db866d480f1646bc3430ffad  gcc/testsuite/g++.dg/cpp2a/consteval12.C
! eb28a4971b66b319163236552ce55bb9  gcc/testsuite/g++.dg/cpp2a/consteval13.C
  d47ccb9544381b6ea21634d25ac4e852  gcc/testsuite/g++.dg/cpp2a/consteval14.C
  4a0878e63450081d81763b22f9b843b8  gcc/testsuite/g++.dg/cpp2a/consteval15.C
  8bd8f68291a139315c558daf74cdcf52  gcc/testsuite/g++.dg/cpp2a/consteval16.C
*************** bbfc0967b09bb4b2f1ace77c10c76387  gcc/te
*** 16161,16182 ****
  cf282e3680d2137a27a9a74bced96291  gcc/testsuite/g++.dg/cpp2a/consteval18.C
  b25072b636670ba0bf6636ee75629f7f  gcc/testsuite/g++.dg/cpp2a/consteval19.C
  6053d37c0ed21135f3f081cb54bda42d  gcc/testsuite/g++.dg/cpp2a/consteval2.C
  419c55859a9fd338cbd6417cdd3b15d3  gcc/testsuite/g++.dg/cpp2a/consteval26.C
  7b94006f015ce630f646bbae9c502103  gcc/testsuite/g++.dg/cpp2a/consteval27.C
! fc387c7b911c42cac7b695c9473df70b  gcc/testsuite/g++.dg/cpp2a/consteval3.C
  2d6205fea644048201c44086df527c3a  gcc/testsuite/g++.dg/cpp2a/consteval4.C
  e71633ec506016932dc09c057d98c36c  gcc/testsuite/g++.dg/cpp2a/consteval5.C
  f8b2a0016c59d132f059d57a7638806f  gcc/testsuite/g++.dg/cpp2a/consteval6.C
! 75811bb9ee95bc32d33817404220baac  gcc/testsuite/g++.dg/cpp2a/consteval7.C
  72c19713fa49fcd9432f9e2dfe1238e0  gcc/testsuite/g++.dg/cpp2a/consteval8.C
  be6031c0bedd5678304d7154f8ea2b35  gcc/testsuite/g++.dg/cpp2a/consteval9.C
  249686f0fb9ecbea2e909ed986426855  gcc/testsuite/g++.dg/cpp2a/constexpr-98122.C
  d28d3e5520803aa70919b2a4b20e6386  gcc/testsuite/g++.dg/cpp2a/constexpr-99287.C
  2004a926e55a105d0f80db50528a9def  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor1.C
  cbf5d5a37bc2a85bde738f9433003a39  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor10.C
  0e35a64721caa10ace15014c6a57e598  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor12.C
  18ceb8d2ffe5d8e310f40839d2edf0d5  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor2.C
! 16ca73f823848454829fa2e5ea9b75f8  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor3.C
  780076eefadeb33a1dce586533960b80  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor4.C
  1ab49acfb4093ac63d8a1117dc494fcd  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor5.C
  e4a44aaa3ef782710c6fe5bed9f0f6cc  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor6.C
--- 16726,16757 ----
  cf282e3680d2137a27a9a74bced96291  gcc/testsuite/g++.dg/cpp2a/consteval18.C
  b25072b636670ba0bf6636ee75629f7f  gcc/testsuite/g++.dg/cpp2a/consteval19.C
  6053d37c0ed21135f3f081cb54bda42d  gcc/testsuite/g++.dg/cpp2a/consteval2.C
+ 55b5033031b184a6bf3c75e731005d9f  gcc/testsuite/g++.dg/cpp2a/consteval20.C
+ c7a9592af554427e4d3ff8482c958f03  gcc/testsuite/g++.dg/cpp2a/consteval21.C
+ 455bb311d894e85865796adacbc0dfbc  gcc/testsuite/g++.dg/cpp2a/consteval22.C
+ f670522ff5493be6b8a1ad0951c4c2e6  gcc/testsuite/g++.dg/cpp2a/consteval23.C
+ d306cf1e4f8279256c5b02b526410efc  gcc/testsuite/g++.dg/cpp2a/consteval24.C
+ dd7f450d8249e6d1090b3199c6d986dd  gcc/testsuite/g++.dg/cpp2a/consteval25.C
  419c55859a9fd338cbd6417cdd3b15d3  gcc/testsuite/g++.dg/cpp2a/consteval26.C
  7b94006f015ce630f646bbae9c502103  gcc/testsuite/g++.dg/cpp2a/consteval27.C
! f5703307896a18a98097a63f1f2f7166  gcc/testsuite/g++.dg/cpp2a/consteval28.C
! 25fb3b0d5dda2594a4293da515c49586  gcc/testsuite/g++.dg/cpp2a/consteval29.C
! 859ad3618c84933e95dea3b475eaa500  gcc/testsuite/g++.dg/cpp2a/consteval3.C
! d13a3bb7f52d0ff550c2883f5a2c9b93  gcc/testsuite/g++.dg/cpp2a/consteval30.C
  2d6205fea644048201c44086df527c3a  gcc/testsuite/g++.dg/cpp2a/consteval4.C
  e71633ec506016932dc09c057d98c36c  gcc/testsuite/g++.dg/cpp2a/consteval5.C
  f8b2a0016c59d132f059d57a7638806f  gcc/testsuite/g++.dg/cpp2a/consteval6.C
! bdfb68953ed4b7a071f8df42f94d7b54  gcc/testsuite/g++.dg/cpp2a/consteval7.C
  72c19713fa49fcd9432f9e2dfe1238e0  gcc/testsuite/g++.dg/cpp2a/consteval8.C
  be6031c0bedd5678304d7154f8ea2b35  gcc/testsuite/g++.dg/cpp2a/consteval9.C
  249686f0fb9ecbea2e909ed986426855  gcc/testsuite/g++.dg/cpp2a/constexpr-98122.C
  d28d3e5520803aa70919b2a4b20e6386  gcc/testsuite/g++.dg/cpp2a/constexpr-99287.C
  2004a926e55a105d0f80db50528a9def  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor1.C
  cbf5d5a37bc2a85bde738f9433003a39  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor10.C
+ 08860ee32627d515f3d5dc256b10d0a9  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor11.C
  0e35a64721caa10ace15014c6a57e598  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor12.C
  18ceb8d2ffe5d8e310f40839d2edf0d5  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor2.C
! 4161e44d5b894de84f1601dd80255a1b  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor3.C
  780076eefadeb33a1dce586533960b80  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor4.C
  1ab49acfb4093ac63d8a1117dc494fcd  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor5.C
  e4a44aaa3ef782710c6fe5bed9f0f6cc  gcc/testsuite/g++.dg/cpp2a/constexpr-dtor6.C
*************** aa504b7ff788990adcf5e4c4b174e0ae  gcc/te
*** 16202,16208 ****
  6951be3b101c71e7ba4f26c0359d99e3  gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic8.C
  a3321cfaafcd76ed99e5ad88a213868d  gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic9.C
  573850937e1fbb5a2c2bc0b4b0da9e0a  gcc/testsuite/g++.dg/cpp2a/constexpr-indeterminate1.C
! 36b687c1aaec7560f8f30286dfb2333d  gcc/testsuite/g++.dg/cpp2a/constexpr-init1.C
  3d47e986a1a87c4a72e6fd1725b4e073  gcc/testsuite/g++.dg/cpp2a/constexpr-init10.C
  04c3b02790750ecd890832ae5a34b579  gcc/testsuite/g++.dg/cpp2a/constexpr-init11.C
  d5a45edda643ea413b271e9b0eeaba6f  gcc/testsuite/g++.dg/cpp2a/constexpr-init12.C
--- 16777,16783 ----
  6951be3b101c71e7ba4f26c0359d99e3  gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic8.C
  a3321cfaafcd76ed99e5ad88a213868d  gcc/testsuite/g++.dg/cpp2a/constexpr-dynamic9.C
  573850937e1fbb5a2c2bc0b4b0da9e0a  gcc/testsuite/g++.dg/cpp2a/constexpr-indeterminate1.C
! 796d26fbaeadc99bc831e2dd55e4508c  gcc/testsuite/g++.dg/cpp2a/constexpr-init1.C
  3d47e986a1a87c4a72e6fd1725b4e073  gcc/testsuite/g++.dg/cpp2a/constexpr-init10.C
  04c3b02790750ecd890832ae5a34b579  gcc/testsuite/g++.dg/cpp2a/constexpr-init11.C
  d5a45edda643ea413b271e9b0eeaba6f  gcc/testsuite/g++.dg/cpp2a/constexpr-init12.C
*************** fa18d410e4118425de72c6cf57d09982  gcc/te
*** 16216,16221 ****
--- 16791,16797 ----
  2865da6445445c4c614b839971af9b90  gcc/testsuite/g++.dg/cpp2a/constexpr-init2.C
  a94c82ed85193a40a70f8909b798a539  gcc/testsuite/g++.dg/cpp2a/constexpr-init20.C
  d36dc1f73de070f083e4540bf2abf1a9  gcc/testsuite/g++.dg/cpp2a/constexpr-init21.C
+ 9357b169f5b879c1938f2758d0545164  gcc/testsuite/g++.dg/cpp2a/constexpr-init22.C
  c6ad8dd084ea7848f43b81095f5664a0  gcc/testsuite/g++.dg/cpp2a/constexpr-init3.C
  41402b0966f8577d729ff533aebaa8cb  gcc/testsuite/g++.dg/cpp2a/constexpr-init4.C
  3658cd70e02d2a1b9bdd1b43b2e99cba  gcc/testsuite/g++.dg/cpp2a/constexpr-init5.C
*************** fc64959989383a30e896772beafe5765  gcc/te
*** 16228,16234 ****
  bf612b2e0a4a17b8bf679dd44dbbf19c  gcc/testsuite/g++.dg/cpp2a/constexpr-new10.C
  8f2efe7c8b150f5362a6ee3c235d3d14  gcc/testsuite/g++.dg/cpp2a/constexpr-new11.C
  4b1bc923fe1171a6f3a5f32e27c87ec3  gcc/testsuite/g++.dg/cpp2a/constexpr-new12.C
! 897d64e74d4fec51d18faea9a304c8e5  gcc/testsuite/g++.dg/cpp2a/constexpr-new13.C
  bb9d4356d352f35e2f1275cd7739f826  gcc/testsuite/g++.dg/cpp2a/constexpr-new14.C
  8088a7cc9210263a003278c59aa0c59e  gcc/testsuite/g++.dg/cpp2a/constexpr-new15.C
  d03c70bf2e20a7e4078f0e590a42e18a  gcc/testsuite/g++.dg/cpp2a/constexpr-new16.C
--- 16804,16810 ----
  bf612b2e0a4a17b8bf679dd44dbbf19c  gcc/testsuite/g++.dg/cpp2a/constexpr-new10.C
  8f2efe7c8b150f5362a6ee3c235d3d14  gcc/testsuite/g++.dg/cpp2a/constexpr-new11.C
  4b1bc923fe1171a6f3a5f32e27c87ec3  gcc/testsuite/g++.dg/cpp2a/constexpr-new12.C
! 5e37deed14e1b8c4b97b8fe5674e3865  gcc/testsuite/g++.dg/cpp2a/constexpr-new13.C
  bb9d4356d352f35e2f1275cd7739f826  gcc/testsuite/g++.dg/cpp2a/constexpr-new14.C
  8088a7cc9210263a003278c59aa0c59e  gcc/testsuite/g++.dg/cpp2a/constexpr-new15.C
  d03c70bf2e20a7e4078f0e590a42e18a  gcc/testsuite/g++.dg/cpp2a/constexpr-new16.C
*************** fe2e298a3cf2e9094a79a25a4ffd8fc2  gcc/te
*** 16251,16257 ****
  27ac7e1957f04ea6ee6160a7f7c14ecc  gcc/testsuite/g++.dg/cpp2a/constexpr-try2.C
  c169c0f663257a769b1da0d94c0c7307  gcc/testsuite/g++.dg/cpp2a/constexpr-try3.C
  d74e93a21b21eb22ce0742e9b6bbb923  gcc/testsuite/g++.dg/cpp2a/constexpr-try4.C
! 379e0a2257c175d93bee70f8cbbc80ce  gcc/testsuite/g++.dg/cpp2a/constexpr-try5.C
  e8575fbcf5a3e212ea28a4b89fbf8253  gcc/testsuite/g++.dg/cpp2a/constexpr-typeid1.C
  e9ee7a058b99aafd367d4607dea8fd61  gcc/testsuite/g++.dg/cpp2a/constexpr-typeid2.C
  f078be8dacba182f7d71dbd5dc780d67  gcc/testsuite/g++.dg/cpp2a/constexpr-typeid3.C
--- 16827,16833 ----
  27ac7e1957f04ea6ee6160a7f7c14ecc  gcc/testsuite/g++.dg/cpp2a/constexpr-try2.C
  c169c0f663257a769b1da0d94c0c7307  gcc/testsuite/g++.dg/cpp2a/constexpr-try3.C
  d74e93a21b21eb22ce0742e9b6bbb923  gcc/testsuite/g++.dg/cpp2a/constexpr-try4.C
! 6d4991f71185ad9d281f612d66716d33  gcc/testsuite/g++.dg/cpp2a/constexpr-try5.C
  e8575fbcf5a3e212ea28a4b89fbf8253  gcc/testsuite/g++.dg/cpp2a/constexpr-typeid1.C
  e9ee7a058b99aafd367d4607dea8fd61  gcc/testsuite/g++.dg/cpp2a/constexpr-typeid2.C
  f078be8dacba182f7d71dbd5dc780d67  gcc/testsuite/g++.dg/cpp2a/constexpr-typeid3.C
*************** d39d73d76c96183868eeee6ef1f857f5  gcc/te
*** 16269,16274 ****
--- 16845,16851 ----
  aad62a0962b0becb6f9d460d4e8a552b  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual18.C
  b41b1406ccaabb57748ecf4f05c3e13b  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual19.C
  8356345162577a74b103ae82b69fde6d  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual2.C
+ 86447166a312855244c09f8495d3f788  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual20.C
  387607aa06c3438be11d475781b728ae  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual3.C
  4d58f9556b7091659bbc5730f1a2697b  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual4.C
  ff80d3043b2e823e497517b5dffee736  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual5.C
*************** f3e4086567377173b2f1ad21c51c419a  gcc/te
*** 16278,16288 ****
  c9096ec9ab85bc8af326d314ed3e9209  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual9.C
  dbce59796cf14d5203c5f6510a0ae622  gcc/testsuite/g++.dg/cpp2a/constinit1.C
  4d2e42a015d2f0120fc0657144a14aca  gcc/testsuite/g++.dg/cpp2a/constinit10.C
! 36472405e08ac35611ed0b721d258f6c  gcc/testsuite/g++.dg/cpp2a/constinit11.C
! 2d9298d9f42f10ccc04187480965d2df  gcc/testsuite/g++.dg/cpp2a/constinit12.C
  a5ab0c1acf96ddc777b5af2b1b69b23d  gcc/testsuite/g++.dg/cpp2a/constinit13.C
! abe4f29f72a423fef4342d122db1f1e3  gcc/testsuite/g++.dg/cpp2a/constinit14.C
! 6c452707a42527df0dd492198f4a03d6  gcc/testsuite/g++.dg/cpp2a/constinit15.C
  9f7da905ea744d36251021c627953aa7  gcc/testsuite/g++.dg/cpp2a/constinit2.C
  ec97b4f24af7c726b645ccd07978270a  gcc/testsuite/g++.dg/cpp2a/constinit3.C
  ec5836ef75d0047a1e68f87292524d25  gcc/testsuite/g++.dg/cpp2a/constinit4.C
--- 16855,16866 ----
  c9096ec9ab85bc8af326d314ed3e9209  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual9.C
  dbce59796cf14d5203c5f6510a0ae622  gcc/testsuite/g++.dg/cpp2a/constinit1.C
  4d2e42a015d2f0120fc0657144a14aca  gcc/testsuite/g++.dg/cpp2a/constinit10.C
! e25bc28f0b6e34ad034e87a07431c5ce  gcc/testsuite/g++.dg/cpp2a/constinit11.C
! 3a8c22f7aef66372b70bc1ff6d80cbe8  gcc/testsuite/g++.dg/cpp2a/constinit12.C
  a5ab0c1acf96ddc777b5af2b1b69b23d  gcc/testsuite/g++.dg/cpp2a/constinit13.C
! 456e0d2a62b21ac916064a5f6c17d219  gcc/testsuite/g++.dg/cpp2a/constinit14.C
! 94ee35190fa1fe7affa8b19c3f096e85  gcc/testsuite/g++.dg/cpp2a/constinit15.C
! b4a46903f1578c613195d03127dbcae5  gcc/testsuite/g++.dg/cpp2a/constinit16.C
  9f7da905ea744d36251021c627953aa7  gcc/testsuite/g++.dg/cpp2a/constinit2.C
  ec97b4f24af7c726b645ccd07978270a  gcc/testsuite/g++.dg/cpp2a/constinit3.C
  ec5836ef75d0047a1e68f87292524d25  gcc/testsuite/g++.dg/cpp2a/constinit4.C
*************** bc8c268c08fedc23cbbb52f3be804b6b  gcc/te
*** 16307,16313 ****
--- 16885,16894 ----
  e45f962710cd5503949da46156ed4ab9  gcc/testsuite/g++.dg/cpp2a/desig16.C
  b3b483cf26f0312c306ce1c7d48e001b  gcc/testsuite/g++.dg/cpp2a/desig17.C
  c75fc09bc39f984910adbf5fac4d1df6  gcc/testsuite/g++.dg/cpp2a/desig18.C
+ cb17141557e98446c746c0e1c3ac5070  gcc/testsuite/g++.dg/cpp2a/desig19.C
  97c50b687300c510314f41249a28b6ad  gcc/testsuite/g++.dg/cpp2a/desig2.C
+ bac0eb7f7a56f14797c7c6820268768b  gcc/testsuite/g++.dg/cpp2a/desig20.C
+ 0317e83814518cda49f89cad9153c22b  gcc/testsuite/g++.dg/cpp2a/desig21.C
  a6ee108d333ad358664c642b33d39e46  gcc/testsuite/g++.dg/cpp2a/desig22.C
  989b46f026a86ab54fda41f606108878  gcc/testsuite/g++.dg/cpp2a/desig23.C
  37f9adbe25dc46488b6c27d2e6505657  gcc/testsuite/g++.dg/cpp2a/desig24.C
*************** e4e06994c2abc2f0b15bad63bc84687d  gcc/te
*** 16323,16329 ****
  5ec493f5d121e6cb1670ef4889b7a1ee  gcc/testsuite/g++.dg/cpp2a/destroying-delete2.C
  cc0268c504556040e78bce5b6a029f64  gcc/testsuite/g++.dg/cpp2a/destroying-delete3.C
  709f9b5a4431b31c6b23bb87e2d889b1  gcc/testsuite/g++.dg/cpp2a/destroying-delete4.C
! 850048b27da8d87f7014576aa62daf5d  gcc/testsuite/g++.dg/cpp2a/destroying-delete5.C
  13ce43bc00d27c743e449e1386ffa46a  gcc/testsuite/g++.dg/cpp2a/enum-conv1.C
  dedca5854b0e7bf2b75e811a11f0a159  gcc/testsuite/g++.dg/cpp2a/enum-conv2.C
  e2d076d1bf2b561366a64fc2e1ea3381  gcc/testsuite/g++.dg/cpp2a/enum-conv3.C
--- 16904,16911 ----
  5ec493f5d121e6cb1670ef4889b7a1ee  gcc/testsuite/g++.dg/cpp2a/destroying-delete2.C
  cc0268c504556040e78bce5b6a029f64  gcc/testsuite/g++.dg/cpp2a/destroying-delete3.C
  709f9b5a4431b31c6b23bb87e2d889b1  gcc/testsuite/g++.dg/cpp2a/destroying-delete4.C
! d19721429920a1897dfb416d86f876bd  gcc/testsuite/g++.dg/cpp2a/destroying-delete5.C
! 95bcd1b1427453dfdb84ee76afa7dba0  gcc/testsuite/g++.dg/cpp2a/destroying-delete6.C
  13ce43bc00d27c743e449e1386ffa46a  gcc/testsuite/g++.dg/cpp2a/enum-conv1.C
  dedca5854b0e7bf2b75e811a11f0a159  gcc/testsuite/g++.dg/cpp2a/enum-conv2.C
  e2d076d1bf2b561366a64fc2e1ea3381  gcc/testsuite/g++.dg/cpp2a/enum-conv3.C
*************** ffff1f1e5445186cd85fc18de4595b89  gcc/te
*** 16345,16351 ****
  2c9a2b5474c2b3d7b8c260a855385434  gcc/testsuite/g++.dg/cpp2a/explicit7.C
  aa2bb54a77cb3fec28379d767c80f012  gcc/testsuite/g++.dg/cpp2a/explicit8.C
  05f18b846e0e3446396676836acfabc0  gcc/testsuite/g++.dg/cpp2a/explicit9.C
! c0b09186575f0d09e16d2837933358ec  gcc/testsuite/g++.dg/cpp2a/feat-cxx2a.C
  1308cad2957585ab947868996b5fa85c  gcc/testsuite/g++.dg/cpp2a/fn-template1.C
  96c4e27953bf932ba7135b847e79207d  gcc/testsuite/g++.dg/cpp2a/fn-template10.C
  2cbcabc3565e69c4edf1f078a2c0aecc  gcc/testsuite/g++.dg/cpp2a/fn-template11.C
--- 16927,16933 ----
  2c9a2b5474c2b3d7b8c260a855385434  gcc/testsuite/g++.dg/cpp2a/explicit7.C
  aa2bb54a77cb3fec28379d767c80f012  gcc/testsuite/g++.dg/cpp2a/explicit8.C
  05f18b846e0e3446396676836acfabc0  gcc/testsuite/g++.dg/cpp2a/explicit9.C
! 24f00de38e48fe6f66d789e3b23daa80  gcc/testsuite/g++.dg/cpp2a/feat-cxx2a.C
  1308cad2957585ab947868996b5fa85c  gcc/testsuite/g++.dg/cpp2a/fn-template1.C
  96c4e27953bf932ba7135b847e79207d  gcc/testsuite/g++.dg/cpp2a/fn-template10.C
  2cbcabc3565e69c4edf1f078a2c0aecc  gcc/testsuite/g++.dg/cpp2a/fn-template11.C
*************** c187aa931c17eb73cbb88ab97078392e  gcc/te
*** 16361,16367 ****
--- 16943,16951 ----
  655dd897a255a0f79bc05d8bbd4cc03c  gcc/testsuite/g++.dg/cpp2a/fn-template20.C
  835ed618b64943de09c741378f2370fe  gcc/testsuite/g++.dg/cpp2a/fn-template21.C
  6280e6d73ec3673f4eaf69b3a23bce4b  gcc/testsuite/g++.dg/cpp2a/fn-template22.C
+ 7324807f6575cb5baa400323aabf710c  gcc/testsuite/g++.dg/cpp2a/fn-template23.C
  98f18c64e1cb5a6319dcfb95e3bbfad4  gcc/testsuite/g++.dg/cpp2a/fn-template24.C
+ 1da3a94fbc91e10d52e02ac527a92204  gcc/testsuite/g++.dg/cpp2a/fn-template25.C
  b67c0882307bae581d479d6ccd962725  gcc/testsuite/g++.dg/cpp2a/fn-template3.C
  4b303717beb6d4ba59f719e006fbc2ad  gcc/testsuite/g++.dg/cpp2a/fn-template4.C
  bc63639b07fc35a159383408739b1edd  gcc/testsuite/g++.dg/cpp2a/fn-template5.C
*************** f9f5ebc76edafa3cb1e99a32c67ec4f3  gcc/te
*** 16378,16383 ****
--- 16962,16969 ----
  5aa6c838680e7a1a1da22f5ee9de6c76  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated1.C
  f2ad91569581aa3fa670ae32821491f9  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated10.C
  90589ce06ced8c136aaf37770e1ec488  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated11.C
+ d61cc66863701219edff4cd7fe87ebb9  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated12.C
+ c158bbb4df76b9867cf177e079c2ce23  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated13.C
  4617b7d86ad3299b351c033f194bee8a  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated2.C
  73b56ba004639bd18c7c3c95c3bfd080  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated3.C
  5c37b5cacdb70688ac2e90c563d9613c  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated4.C
*************** f2ad91569581aa3fa670ae32821491f9  gcc/te
*** 16385,16391 ****
  724355f3cd691d6763da9a88f8f5ef72  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated6.C
  2745fc684e028b3d39bec425df6c1404  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated7.C
  701a2fd7b4ea3bddd0f07315aa1f060b  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated8.C
! b37f129ff7900818716e38b8fde743c0  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated9.C
  40ea32951dfb4570c1774e238c30f434  gcc/testsuite/g++.dg/cpp2a/lambda-generic-variadic20.C
  c1cdf23c08dcb292bbd629847ef95a23  gcc/testsuite/g++.dg/cpp2a/lambda-generic-variadic21.C
  f3d333d9133ccc3fed58f15dd1e6c1c1  gcc/testsuite/g++.dg/cpp2a/lambda-generic1.C
--- 16971,16995 ----
  724355f3cd691d6763da9a88f8f5ef72  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated6.C
  2745fc684e028b3d39bec425df6c1404  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated7.C
  701a2fd7b4ea3bddd0f07315aa1f060b  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated8.C
! e26b53f769c1a6da2429ed8d4f3e5a11  gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated9.C
! 06ff2bf72a9405eef729f9ca42fd7d11  gcc/testsuite/g++.dg/cpp2a/is-corresponding-member1.C
! bca6a54a8efaaafbb25d25f8bf2483a5  gcc/testsuite/g++.dg/cpp2a/is-corresponding-member2.C
! 0b97963dbeddacfae228bfc6805c4c7c  gcc/testsuite/g++.dg/cpp2a/is-corresponding-member3.C
! 6326dfca9bdfb75139aa1e71e1c4e94b  gcc/testsuite/g++.dg/cpp2a/is-corresponding-member4.C
! d7ed0ebf26a6437db2b5aa0d69a1e9d1  gcc/testsuite/g++.dg/cpp2a/is-corresponding-member5.C
! 2b242d5384bb8389eed3715b97a73fbf  gcc/testsuite/g++.dg/cpp2a/is-corresponding-member6.C
! 34fbb70e36dd077c05eed82d9def7169  gcc/testsuite/g++.dg/cpp2a/is-corresponding-member7.C
! f02e6aefd434d4811321f7875fea5c79  gcc/testsuite/g++.dg/cpp2a/is-corresponding-member8.C
! 78d84cdb6c4c5f91546e47eea2a2f29a  gcc/testsuite/g++.dg/cpp2a/is-layout-compatible1.C
! 40b9c7b3198914d9138b2e9cb7c85b9e  gcc/testsuite/g++.dg/cpp2a/is-layout-compatible2.C
! 50717208e5af0da18715a842d5b0bef9  gcc/testsuite/g++.dg/cpp2a/is-layout-compatible3.C
! 087bb26b7fb10078d7689347b3385e63  gcc/testsuite/g++.dg/cpp2a/is-pointer-interconvertible-base-of1.C
! 82ca9bc7a0479a2d7beaa0abe322c607  gcc/testsuite/g++.dg/cpp2a/is-pointer-interconvertible-with-class1.C
! c3fcc7088915b8703f4605aa1eca4ce3  gcc/testsuite/g++.dg/cpp2a/is-pointer-interconvertible-with-class2.C
! a32a0480aae35890db6a4b74ebac6bc0  gcc/testsuite/g++.dg/cpp2a/is-pointer-interconvertible-with-class3.C
! 7f96ab4053f252522be19af8ee81643f  gcc/testsuite/g++.dg/cpp2a/is-pointer-interconvertible-with-class4.C
! 8d2ec48a83de0c935d73330f3e8a7b55  gcc/testsuite/g++.dg/cpp2a/is-pointer-interconvertible-with-class5.C
! 108a1e84430a208365c8e85df1f93cc2  gcc/testsuite/g++.dg/cpp2a/is-pointer-interconvertible-with-class6.C
  40ea32951dfb4570c1774e238c30f434  gcc/testsuite/g++.dg/cpp2a/lambda-generic-variadic20.C
  c1cdf23c08dcb292bbd629847ef95a23  gcc/testsuite/g++.dg/cpp2a/lambda-generic-variadic21.C
  f3d333d9133ccc3fed58f15dd1e6c1c1  gcc/testsuite/g++.dg/cpp2a/lambda-generic1.C
*************** f50c8e7c7812a7eade38d014e8410110  gcc/te
*** 16404,16409 ****
--- 17008,17014 ----
  76aebdeb346269b3700ddb3dc4e2d8ac  gcc/testsuite/g++.dg/cpp2a/lambda-pack-init4.C
  922e5dff9ed1946970d8d28661c33f0f  gcc/testsuite/g++.dg/cpp2a/lambda-pack-init5.C
  05ee01266fc805cc3327ad09e070330c  gcc/testsuite/g++.dg/cpp2a/lambda-pack-init6.C
+ 85f2c06ad2ac5e902901d52119b92b66  gcc/testsuite/g++.dg/cpp2a/lambda-pack-init7.C
  22ec10632b049637a7cbf82f46eda177  gcc/testsuite/g++.dg/cpp2a/lambda-this1.C
  c09b3406a6984eced941c654f03df8b6  gcc/testsuite/g++.dg/cpp2a/lambda-this2.C
  58b6c8506ae6f77f9498fd7dbed8bdeb  gcc/testsuite/g++.dg/cpp2a/lambda-this3.C
*************** d5f804b9a165b9a149f8abd1027510b5  gcc/te
*** 16505,16510 ****
--- 17110,17117 ----
  1724161e3c4a13c45aa669a07a0bf4a5  gcc/testsuite/g++.dg/cpp2a/nontype-class5.C
  f285697eea399206e793409d3e3967ae  gcc/testsuite/g++.dg/cpp2a/nontype-class50.C
  3d2b8201f489f4abeaf39e7f23050ce6  gcc/testsuite/g++.dg/cpp2a/nontype-class50a.C
+ 232f7980871c2b37f0c2cb789e4cc1d7  gcc/testsuite/g++.dg/cpp2a/nontype-class51.C
+ bbdb1fabe043c15d9231e499a5a3f7b6  gcc/testsuite/g++.dg/cpp2a/nontype-class52.C
  86d91c051a62b8d9f32d57f4047a6534  gcc/testsuite/g++.dg/cpp2a/nontype-class6.C
  c78f774590fd68025c389ab4361f5714  gcc/testsuite/g++.dg/cpp2a/nontype-class7.C
  44a04e768668501da12fed78805a7d70  gcc/testsuite/g++.dg/cpp2a/nontype-class8.C
*************** fc8ccbfe7f14dd4a41ff708c5a05b226  gcc/te
*** 16554,16559 ****
--- 17161,17167 ----
  7d1c1719a1c3e44cf69662819769f8a5  gcc/testsuite/g++.dg/cpp2a/pr88534.C
  3a4139bbe15eef2dce96cb020b2681f7  gcc/testsuite/g++.dg/cpp2a/pr88537.C
  b94ce4741edeca1190c4590e425522dc  gcc/testsuite/g++.dg/cpp2a/pr89913.C
+ f55408c6eef47c3f6b0e0f53655fc989  gcc/testsuite/g++.dg/cpp2a/pr96437.C
  3e07a78a62c8fb8bb5f05d3360073723  gcc/testsuite/g++.dg/cpp2a/pr98082.C
  d5943026b7bd9f1357d76ae6399779ce  gcc/testsuite/g++.dg/cpp2a/pr99833.C
  0b76f09e4e3095958613ee48842ded89  gcc/testsuite/g++.dg/cpp2a/ptrmem1.C
*************** bf80b786a1a4ec9eac5fda8277196264  gcc/te
*** 16576,16590 ****
  2bd66f342ffc69804585e162a722f4b9  gcc/testsuite/g++.dg/cpp2a/range-for7.C
  3c0149d6d960f694469d39f927642d6f  gcc/testsuite/g++.dg/cpp2a/range-for8.C
  56bf7a295364a50ff08473d2937104c0  gcc/testsuite/g++.dg/cpp2a/range-for9.C
! 23d437af665cfd4b1086d4497d4e8fe5  gcc/testsuite/g++.dg/cpp2a/spaceship-constexpr1.C
  860dab1621019c38393bc07b92b6d02f  gcc/testsuite/g++.dg/cpp2a/spaceship-constexpr2.C
  53471c31db550d658146ff8dbe979243  gcc/testsuite/g++.dg/cpp2a/spaceship-constexpr3.C
  494f62ed4d3c86eb9614203922c107f6  gcc/testsuite/g++.dg/cpp2a/spaceship-decltype1.C
  78449a6026dc94a1940145f131e40dbd  gcc/testsuite/g++.dg/cpp2a/spaceship-eq1.C
  7ef8ca64f3d128751171c4bc6c6d1dc9  gcc/testsuite/g++.dg/cpp2a/spaceship-eq10.C
  35b5b00dc11e88e35813caed81c920fc  gcc/testsuite/g++.dg/cpp2a/spaceship-eq1a.C
  da366bbf37859e5c77c24a8138c72180  gcc/testsuite/g++.dg/cpp2a/spaceship-eq2.C
! 930eb55b3ccd27e9ad1d90ede793b4f1  gcc/testsuite/g++.dg/cpp2a/spaceship-eq3.C
  2e352e95da1c82415807443658c1a83a  gcc/testsuite/g++.dg/cpp2a/spaceship-eq4.C
  08a0480f8c4995afec7c957681a59391  gcc/testsuite/g++.dg/cpp2a/spaceship-eq5.C
  1d81eaad3295957fc272634f08a3559c  gcc/testsuite/g++.dg/cpp2a/spaceship-eq6.C
--- 17184,17201 ----
  2bd66f342ffc69804585e162a722f4b9  gcc/testsuite/g++.dg/cpp2a/range-for7.C
  3c0149d6d960f694469d39f927642d6f  gcc/testsuite/g++.dg/cpp2a/range-for8.C
  56bf7a295364a50ff08473d2937104c0  gcc/testsuite/g++.dg/cpp2a/range-for9.C
! 4153e4b19e08599e4737b8296cb0b300  gcc/testsuite/g++.dg/cpp2a/spaceship-constexpr1.C
  860dab1621019c38393bc07b92b6d02f  gcc/testsuite/g++.dg/cpp2a/spaceship-constexpr2.C
  53471c31db550d658146ff8dbe979243  gcc/testsuite/g++.dg/cpp2a/spaceship-constexpr3.C
  494f62ed4d3c86eb9614203922c107f6  gcc/testsuite/g++.dg/cpp2a/spaceship-decltype1.C
  78449a6026dc94a1940145f131e40dbd  gcc/testsuite/g++.dg/cpp2a/spaceship-eq1.C
  7ef8ca64f3d128751171c4bc6c6d1dc9  gcc/testsuite/g++.dg/cpp2a/spaceship-eq10.C
+ c7c933568cc5b17f6d8dadb7cec8101f  gcc/testsuite/g++.dg/cpp2a/spaceship-eq11.C
+ 279eb9b925ca084c1b6d0115a14ecb82  gcc/testsuite/g++.dg/cpp2a/spaceship-eq12.C
+ ae3ef3d8cbf3145fa938c567ccc11530  gcc/testsuite/g++.dg/cpp2a/spaceship-eq13.C
  35b5b00dc11e88e35813caed81c920fc  gcc/testsuite/g++.dg/cpp2a/spaceship-eq1a.C
  da366bbf37859e5c77c24a8138c72180  gcc/testsuite/g++.dg/cpp2a/spaceship-eq2.C
! 695134b1125f480b4d381c7ab5398d05  gcc/testsuite/g++.dg/cpp2a/spaceship-eq3.C
  2e352e95da1c82415807443658c1a83a  gcc/testsuite/g++.dg/cpp2a/spaceship-eq4.C
  08a0480f8c4995afec7c957681a59391  gcc/testsuite/g++.dg/cpp2a/spaceship-eq5.C
  1d81eaad3295957fc272634f08a3559c  gcc/testsuite/g++.dg/cpp2a/spaceship-eq6.C
*************** f0b381dc1068e13197aafa5434301a0e  gcc/te
*** 16597,16602 ****
--- 17208,17214 ----
  810bc29b38dab05c72043929f15628b5  gcc/testsuite/g++.dg/cpp2a/spaceship-err4.C
  a23752018562dba0fd625f34b6aaf89b  gcc/testsuite/g++.dg/cpp2a/spaceship-err5.C
  c0498bdab0da3d0f2726f005d8cde8c7  gcc/testsuite/g++.dg/cpp2a/spaceship-err6.C
+ fedceca40086cc3551b12c5d92f783ec  gcc/testsuite/g++.dg/cpp2a/spaceship-err7.C
  78202203f70e3f075f22d5801a11c9a2  gcc/testsuite/g++.dg/cpp2a/spaceship-fallback1.C
  ebb778c7a30944f50dc09ed15f9d75bd  gcc/testsuite/g++.dg/cpp2a/spaceship-friend1.C
  e980e1da8fb13bc55d58a2c9c4789bb6  gcc/testsuite/g++.dg/cpp2a/spaceship-p1186.C
*************** e6037687c8367081183d5ad6f709b4a7  gcc/te
*** 16617,16624 ****
--- 17229,17242 ----
  48cc4340eb8546a39438777b57d87c47  gcc/testsuite/g++.dg/cpp2a/spaceship-synth-neg3.C
  15bc319256750cf3a9caf5d852b30aa1  gcc/testsuite/g++.dg/cpp2a/spaceship-synth-neg4.C
  853bb4d901c7e141b3533566d35db6c5  gcc/testsuite/g++.dg/cpp2a/spaceship-synth-neg5.C
+ 11ce883df5bfcdc17848d1a182086ec8  gcc/testsuite/g++.dg/cpp2a/spaceship-synth-neg6.C
  fbe4f142dfdc31d389f336c3a2132127  gcc/testsuite/g++.dg/cpp2a/spaceship-synth1.C
  56777e80c383d43521bd39e52f0c078c  gcc/testsuite/g++.dg/cpp2a/spaceship-synth10.C
+ 4631b382efc1b305e76bdb16bb231c7f  gcc/testsuite/g++.dg/cpp2a/spaceship-synth11.C
+ 25737c275a63634f4325f220814c9fb7  gcc/testsuite/g++.dg/cpp2a/spaceship-synth12.C
+ 91f2e33001c655b461532a4c839e5957  gcc/testsuite/g++.dg/cpp2a/spaceship-synth13.C
+ ea73038f47b70b2d70c4032d05c21938  gcc/testsuite/g++.dg/cpp2a/spaceship-synth14.C
+ ccb67d98b82aa9a514ad98e1a5cb8e6f  gcc/testsuite/g++.dg/cpp2a/spaceship-synth15.C
  8f91979209d8d288d5c97266ecd046d7  gcc/testsuite/g++.dg/cpp2a/spaceship-synth1a.C
  5daa0011ffb3db93835d71c071ec0d71  gcc/testsuite/g++.dg/cpp2a/spaceship-synth2.C
  6a6f4a83eb2e888266655b23bebfc463  gcc/testsuite/g++.dg/cpp2a/spaceship-synth2a.C
*************** ab1df3b823c1b3eb75d2ed7f56e1db29  gcc/te
*** 16629,16635 ****
  9cf4b21e47e7125f4ac79cc64be706db  gcc/testsuite/g++.dg/cpp2a/spaceship-synth5.C
  fa24ee04269507190905ce50ace9fb4d  gcc/testsuite/g++.dg/cpp2a/spaceship-synth6.C
  1b6f8df9a6ce77ca9e241e892b9a4dbb  gcc/testsuite/g++.dg/cpp2a/spaceship-synth7.C
! 83f77ef2823ba7737df735f6162a6a41  gcc/testsuite/g++.dg/cpp2a/spaceship-synth8.C
  e6eff6554eb70bbd03e6aacbb13adf31  gcc/testsuite/g++.dg/cpp2a/spaceship-synth9.C
  15d8852abeec5772820ae98eb7eaba47  gcc/testsuite/g++.dg/cpp2a/spaceship-union1.C
  894dc2618d8240d82bbbd6fa81e459f0  gcc/testsuite/g++.dg/cpp2a/spaceship-vec1.C
--- 17247,17254 ----
  9cf4b21e47e7125f4ac79cc64be706db  gcc/testsuite/g++.dg/cpp2a/spaceship-synth5.C
  fa24ee04269507190905ce50ace9fb4d  gcc/testsuite/g++.dg/cpp2a/spaceship-synth6.C
  1b6f8df9a6ce77ca9e241e892b9a4dbb  gcc/testsuite/g++.dg/cpp2a/spaceship-synth7.C
! 0e164c2e8c62a2c45fdbc36850d69217  gcc/testsuite/g++.dg/cpp2a/spaceship-synth8.C
! bcdf54aadf7c186cab3729e8811e2fea  gcc/testsuite/g++.dg/cpp2a/spaceship-synth8a.C
  e6eff6554eb70bbd03e6aacbb13adf31  gcc/testsuite/g++.dg/cpp2a/spaceship-synth9.C
  15d8852abeec5772820ae98eb7eaba47  gcc/testsuite/g++.dg/cpp2a/spaceship-union1.C
  894dc2618d8240d82bbbd6fa81e459f0  gcc/testsuite/g++.dg/cpp2a/spaceship-vec1.C
*************** e13ad9cd7ad81ba583e7c26eafc6ec63  gcc/te
*** 16647,16652 ****
--- 17266,17272 ----
  a8ec3f289340278b03ee97c8ebff51ae  gcc/testsuite/g++.dg/cpp2a/srcloc18.C
  c951a3e5bb4bc2d67ee9dcf55822ab1e  gcc/testsuite/g++.dg/cpp2a/srcloc19.C
  73b3d0055024c3e89cf343ad697d921f  gcc/testsuite/g++.dg/cpp2a/srcloc2.C
+ d0d6d97ed7c799dfd6ee3c3c281ece09  gcc/testsuite/g++.dg/cpp2a/srcloc20.C
  bdcc6dcb33b016ca165853f376d37a46  gcc/testsuite/g++.dg/cpp2a/srcloc3.C
  105c3578c5e06652ad38da066c2e6f4b  gcc/testsuite/g++.dg/cpp2a/srcloc4.C
  b10f83b6961f4d7c400d206766b3878a  gcc/testsuite/g++.dg/cpp2a/srcloc5.C
*************** d5f9722c983a8693c05cb62cb32deda1  gcc/te
*** 16679,16685 ****
  ad2201a1b978f4f4fbdb00d19864f54d  gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad-neg2.C
  8a7f7465c6acee0050e7da22ab20d5fc  gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad.C
  4f2ea21c6a4b05f9bb5a6571d4805a8f  gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-neg.C
! 7f0d1385e1d873dc35e42cfe339b6373  gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-neg2.C
  d4af70129929097daef5c738f2508ba5  gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp.C
  8b123b46e3ee970336060676f9af3ef4  gcc/testsuite/g++.dg/cpp2a/using-enum-1.C
  fd7bc6d132436a68e16dbd3cf7dbe4a1  gcc/testsuite/g++.dg/cpp2a/using-enum-2.C
--- 17299,17305 ----
  ad2201a1b978f4f4fbdb00d19864f54d  gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad-neg2.C
  8a7f7465c6acee0050e7da22ab20d5fc  gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad.C
  4f2ea21c6a4b05f9bb5a6571d4805a8f  gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-neg.C
! f2fa833dd2de8109a1887e708aa4cf5b  gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-neg2.C
  d4af70129929097daef5c738f2508ba5  gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp.C
  8b123b46e3ee970336060676f9af3ef4  gcc/testsuite/g++.dg/cpp2a/using-enum-1.C
  fd7bc6d132436a68e16dbd3cf7dbe4a1  gcc/testsuite/g++.dg/cpp2a/using-enum-2.C
*************** e4aee91d21a8cdbd286094f893319c70  gcc/te
*** 16703,16709 ****
  b196cb4af4d539f545ae961b8905ba24  gcc/testsuite/g++.dg/debug/const4.C
  8c7b9540eb6278b6bd197c3c55ae7945  gcc/testsuite/g++.dg/debug/const5.C
  36f088b22dca6ab78668e7d505839fbd  gcc/testsuite/g++.dg/debug/crash1.C
! 23719bc76bc6d533a01b2cc833c3f97b  gcc/testsuite/g++.dg/debug/debug.exp
  2b6f3bdb657c8865549db08f96a15223  gcc/testsuite/g++.dg/debug/debug1.C
  cece96666e504d9287aaadf8a4855138  gcc/testsuite/g++.dg/debug/debug2.C
  b5c1d1e26252e6e306ee37c885cc449b  gcc/testsuite/g++.dg/debug/debug3.C
--- 17323,17329 ----
  b196cb4af4d539f545ae961b8905ba24  gcc/testsuite/g++.dg/debug/const4.C
  8c7b9540eb6278b6bd197c3c55ae7945  gcc/testsuite/g++.dg/debug/const5.C
  36f088b22dca6ab78668e7d505839fbd  gcc/testsuite/g++.dg/debug/crash1.C
! 446cf408d4ed631ff296f97839117dca  gcc/testsuite/g++.dg/debug/debug.exp
  2b6f3bdb657c8865549db08f96a15223  gcc/testsuite/g++.dg/debug/debug1.C
  cece96666e504d9287aaadf8a4855138  gcc/testsuite/g++.dg/debug/debug2.C
  b5c1d1e26252e6e306ee37c885cc449b  gcc/testsuite/g++.dg/debug/debug3.C
*************** cc8cc227c23048bcf594a85463fd6374  gcc/te
*** 16728,16740 ****
  e933397eda73396c9f6bee7892623ab1  gcc/testsuite/g++.dg/debug/dwarf2/array-2.C
  5ee5d11dca01f0768dca7001112d1492  gcc/testsuite/g++.dg/debug/dwarf2/array-3.C
  aade3ae7d11d61781544debadb9053f1  gcc/testsuite/g++.dg/debug/dwarf2/array-4.C
! a9c705db2bb888c55e2017779a9efedd  gcc/testsuite/g++.dg/debug/dwarf2/auto1.C
  35cfadb8c5470e8c9b783b410b1ff4ca  gcc/testsuite/g++.dg/debug/dwarf2/block.C
! d04df262b14869ca10ac8a82668b5b5e  gcc/testsuite/g++.dg/debug/dwarf2/cdtor-1.C
! e70f88144abfc6a69a1241301a9b5e68  gcc/testsuite/g++.dg/debug/dwarf2/const2.C
  a3b0790d7c7d8a7f32c52e58d6dc6967  gcc/testsuite/g++.dg/debug/dwarf2/const2b.C
  5bc0695b9e25d8bd7ab40bb846cfe645  gcc/testsuite/g++.dg/debug/dwarf2/constexpr-var-1.C
! ab8980eae15554e92e57b8e4ddfc3d38  gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C
  6239637f8dd625e114ae1c449f66f431  gcc/testsuite/g++.dg/debug/dwarf2/default-arg1.C
  31c652b7a7ca00754ce7edb453eceef6  gcc/testsuite/g++.dg/debug/dwarf2/defaulted-member-function-1.C
  b2c8b3306db46316b9bd092051e44e6d  gcc/testsuite/g++.dg/debug/dwarf2/defaulted-member-function-2.C
--- 17348,17359 ----
  e933397eda73396c9f6bee7892623ab1  gcc/testsuite/g++.dg/debug/dwarf2/array-2.C
  5ee5d11dca01f0768dca7001112d1492  gcc/testsuite/g++.dg/debug/dwarf2/array-3.C
  aade3ae7d11d61781544debadb9053f1  gcc/testsuite/g++.dg/debug/dwarf2/array-4.C
! 894f28c94116458f7bd7826559d185fc  gcc/testsuite/g++.dg/debug/dwarf2/auto1.C
  35cfadb8c5470e8c9b783b410b1ff4ca  gcc/testsuite/g++.dg/debug/dwarf2/block.C
! 95d9aa78d366937db2391fe4088ff4eb  gcc/testsuite/g++.dg/debug/dwarf2/cdtor-1.C
  a3b0790d7c7d8a7f32c52e58d6dc6967  gcc/testsuite/g++.dg/debug/dwarf2/const2b.C
  5bc0695b9e25d8bd7ab40bb846cfe645  gcc/testsuite/g++.dg/debug/dwarf2/constexpr-var-1.C
! 95067cc6cbb914db1b82a04ba4c5eef4  gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C
  6239637f8dd625e114ae1c449f66f431  gcc/testsuite/g++.dg/debug/dwarf2/default-arg1.C
  31c652b7a7ca00754ce7edb453eceef6  gcc/testsuite/g++.dg/debug/dwarf2/defaulted-member-function-1.C
  b2c8b3306db46316b9bd092051e44e6d  gcc/testsuite/g++.dg/debug/dwarf2/defaulted-member-function-2.C
*************** b68f44c11557e3825fd41d4340b7bf62  gcc/te
*** 16742,16748 ****
  b60cdd725e03d3b1d9c56248e0f623f0  gcc/testsuite/g++.dg/debug/dwarf2/deleted-member-function.C
  2d11614b04b4a82a2bd316bf588c7852  gcc/testsuite/g++.dg/debug/dwarf2/dwarf2-1.C
  906b48b71d0ea35137dc20a9fd2f8965  gcc/testsuite/g++.dg/debug/dwarf2/dwarf2-2.C
! 3c68c94a7da92a91234b4901afb00fc3  gcc/testsuite/g++.dg/debug/dwarf2/dwarf2.exp
  626624da3f5685a0850aad1b683ac3d4  gcc/testsuite/g++.dg/debug/dwarf2/dwarf4-nested.C
  22d59b45b21c13f83b0b24bf88a853bf  gcc/testsuite/g++.dg/debug/dwarf2/dwarf4-typedef.C
  1b130ad10876bc9db6cf83c8fa07435f  gcc/testsuite/g++.dg/debug/dwarf2/enum1.C
--- 17361,17367 ----
  b60cdd725e03d3b1d9c56248e0f623f0  gcc/testsuite/g++.dg/debug/dwarf2/deleted-member-function.C
  2d11614b04b4a82a2bd316bf588c7852  gcc/testsuite/g++.dg/debug/dwarf2/dwarf2-1.C
  906b48b71d0ea35137dc20a9fd2f8965  gcc/testsuite/g++.dg/debug/dwarf2/dwarf2-2.C
! 49fcbf3df546c93fda12a847f6db90f4  gcc/testsuite/g++.dg/debug/dwarf2/dwarf2.exp
  626624da3f5685a0850aad1b683ac3d4  gcc/testsuite/g++.dg/debug/dwarf2/dwarf4-nested.C
  22d59b45b21c13f83b0b24bf88a853bf  gcc/testsuite/g++.dg/debug/dwarf2/dwarf4-typedef.C
  1b130ad10876bc9db6cf83c8fa07435f  gcc/testsuite/g++.dg/debug/dwarf2/enum1.C
*************** d6a23e0e5a6ec9b1682a91b30d778f71  gcc/te
*** 16774,16780 ****
  b417a416a8a1cf833a827647470d303c  gcc/testsuite/g++.dg/debug/dwarf2/inline-var-3.C
  b35aef275e8c1cc68e99f8801dc846e4  gcc/testsuite/g++.dg/debug/dwarf2/inline1.C
  b2bca0913e4135c3359c9933520119f6  gcc/testsuite/g++.dg/debug/dwarf2/integer-typedef.C
! 160222ca46523a932828616d1c7b60e0  gcc/testsuite/g++.dg/debug/dwarf2/lambda1.C
  c3fa5758249954844813f6f83797cbb6  gcc/testsuite/g++.dg/debug/dwarf2/lang-cpp11.C
  b7cb0f476479fbda78bd90153450d0f6  gcc/testsuite/g++.dg/debug/dwarf2/lang-cpp14.C
  84736775aaab673865f2994daaa52e89  gcc/testsuite/g++.dg/debug/dwarf2/lang-cpp17.C
--- 17393,17399 ----
  b417a416a8a1cf833a827647470d303c  gcc/testsuite/g++.dg/debug/dwarf2/inline-var-3.C
  b35aef275e8c1cc68e99f8801dc846e4  gcc/testsuite/g++.dg/debug/dwarf2/inline1.C
  b2bca0913e4135c3359c9933520119f6  gcc/testsuite/g++.dg/debug/dwarf2/integer-typedef.C
! 74923529aa2cdbd53ab1fff64ffa48b4  gcc/testsuite/g++.dg/debug/dwarf2/lambda1.C
  c3fa5758249954844813f6f83797cbb6  gcc/testsuite/g++.dg/debug/dwarf2/lang-cpp11.C
  b7cb0f476479fbda78bd90153450d0f6  gcc/testsuite/g++.dg/debug/dwarf2/lang-cpp14.C
  84736775aaab673865f2994daaa52e89  gcc/testsuite/g++.dg/debug/dwarf2/lang-cpp17.C
*************** c7ffd1dd0ae40378732be3ac8729a37c  gcc/te
*** 16795,16800 ****
--- 17414,17420 ----
  abe2799d2ba99877ff9ac9491b7f3baf  gcc/testsuite/g++.dg/debug/dwarf2/noreturn-function.C
  b3cbbd79d5ff077a6732280d76b2284e  gcc/testsuite/g++.dg/debug/dwarf2/omp-fesdr.C
  b117227269644a100a7a06bf2bc9bf6f  gcc/testsuite/g++.dg/debug/dwarf2/pr101378.C
+ 660a2a2e1e89fe3e9cfe2899e7f1e627  gcc/testsuite/g++.dg/debug/dwarf2/pr104407.C
  7054dc65c88179389afb9e79cad0df38  gcc/testsuite/g++.dg/debug/dwarf2/pr41063.C
  9118e81e091fae9d3d9c8c39a846e724  gcc/testsuite/g++.dg/debug/dwarf2/pr44641.C
  90028c65be83718cb8e154df1b502d99  gcc/testsuite/g++.dg/debug/dwarf2/pr45997-1.C
*************** b117227269644a100a7a06bf2bc9bf6f  gcc/te
*** 16803,16809 ****
  0b06a651bd88729cd5005f63297ed8ff  gcc/testsuite/g++.dg/debug/dwarf2/pr46123.C
  61d7e2de1732fd9c25378d4c85a4bb53  gcc/testsuite/g++.dg/debug/dwarf2/pr46527.C
  77d7e1ad341ac6addc71df4dbb8ec2e2  gcc/testsuite/g++.dg/debug/dwarf2/pr52260.C
! bec26218174ce021c4d89096b9f0c537  gcc/testsuite/g++.dg/debug/dwarf2/pr54508.C
  4c0d597e83fc2b5e8fb252e99bae1dae  gcc/testsuite/g++.dg/debug/dwarf2/pr61433.C
  3dc0f561c3ebaf29a4f14ee6f25555c1  gcc/testsuite/g++.dg/debug/dwarf2/pr67764.C
  3cfcb26c02f6e51b53e2490df47fc140  gcc/testsuite/g++.dg/debug/dwarf2/pr77363.C
--- 17423,17429 ----
  0b06a651bd88729cd5005f63297ed8ff  gcc/testsuite/g++.dg/debug/dwarf2/pr46123.C
  61d7e2de1732fd9c25378d4c85a4bb53  gcc/testsuite/g++.dg/debug/dwarf2/pr46527.C
  77d7e1ad341ac6addc71df4dbb8ec2e2  gcc/testsuite/g++.dg/debug/dwarf2/pr52260.C
! ac4e3e97f6b85df751fc3ac40ecaad83  gcc/testsuite/g++.dg/debug/dwarf2/pr54508.C
  4c0d597e83fc2b5e8fb252e99bae1dae  gcc/testsuite/g++.dg/debug/dwarf2/pr61433.C
  3dc0f561c3ebaf29a4f14ee6f25555c1  gcc/testsuite/g++.dg/debug/dwarf2/pr67764.C
  3cfcb26c02f6e51b53e2490df47fc140  gcc/testsuite/g++.dg/debug/dwarf2/pr77363.C
*************** eb8df2f4b1148c5f6b77553d91cb7877  gcc/te
*** 16821,16828 ****
  1f426b6d87ce5765a45728a91f7e3337  gcc/testsuite/g++.dg/debug/dwarf2/pr91887.C
  e03d4790a0350f655bfc579c2cf31194  gcc/testsuite/g++.dg/debug/dwarf2/ptrdmem-1.C
  5d8f03fa19703b37b960eccf4cdd64b6  gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C
! 76d02e352aba879b4ba37be3e5443ee8  gcc/testsuite/g++.dg/debug/dwarf2/pubnames-2.C
! 332f87c00059cf860922539ea58fc908  gcc/testsuite/g++.dg/debug/dwarf2/pubnames-3.C
  5ee5136319eb2e380c30aea5cdd61634  gcc/testsuite/g++.dg/debug/dwarf2/redeclaration-1.C
  2059d1611fd4125683228bd68f4312ee  gcc/testsuite/g++.dg/debug/dwarf2/ref-1.C
  49f64e5b9319be6e42ee1b9a13b65e96  gcc/testsuite/g++.dg/debug/dwarf2/ref-2.C
--- 17441,17448 ----
  1f426b6d87ce5765a45728a91f7e3337  gcc/testsuite/g++.dg/debug/dwarf2/pr91887.C
  e03d4790a0350f655bfc579c2cf31194  gcc/testsuite/g++.dg/debug/dwarf2/ptrdmem-1.C
  5d8f03fa19703b37b960eccf4cdd64b6  gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C
! a5ad6fdca07e4d5484e1379f8d2daacf  gcc/testsuite/g++.dg/debug/dwarf2/pubnames-2.C
! d90662a62b1701ab0a39b3a98b607032  gcc/testsuite/g++.dg/debug/dwarf2/pubnames-3.C
  5ee5136319eb2e380c30aea5cdd61634  gcc/testsuite/g++.dg/debug/dwarf2/redeclaration-1.C
  2059d1611fd4125683228bd68f4312ee  gcc/testsuite/g++.dg/debug/dwarf2/ref-1.C
  49f64e5b9319be6e42ee1b9a13b65e96  gcc/testsuite/g++.dg/debug/dwarf2/ref-2.C
*************** f00dea52c61cb46b3702ed0755e5be94  gcc/te
*** 16949,16955 ****
  5381563d83a802d89887422d01bc17d1  gcc/testsuite/g++.dg/dfp/44473-1.C
  ca2c3afed1d1ac0b4c3f2b2b82264602  gcc/testsuite/g++.dg/dfp/44473-2.C
  694614d4f71e398dcda11523059a774e  gcc/testsuite/g++.dg/dfp/base.C
! 99352f4ee74dd0a92e063603e8bdeaa8  gcc/testsuite/g++.dg/dfp/dfp.exp
  b98372f1dd5bbd1ea23e2933d4bdf03a  gcc/testsuite/g++.dg/dfp/mangle-1.C
  c0592e7184d9390b10cd93d3b6f1f7a0  gcc/testsuite/g++.dg/dfp/mangle-2.C
  97de1869469f8592b096b761b6a2cceb  gcc/testsuite/g++.dg/dfp/mangle-3.C
--- 17569,17575 ----
  5381563d83a802d89887422d01bc17d1  gcc/testsuite/g++.dg/dfp/44473-1.C
  ca2c3afed1d1ac0b4c3f2b2b82264602  gcc/testsuite/g++.dg/dfp/44473-2.C
  694614d4f71e398dcda11523059a774e  gcc/testsuite/g++.dg/dfp/base.C
! eab549fa858a7a4d7865c4c2aa96cb86  gcc/testsuite/g++.dg/dfp/dfp.exp
  b98372f1dd5bbd1ea23e2933d4bdf03a  gcc/testsuite/g++.dg/dfp/mangle-1.C
  c0592e7184d9390b10cd93d3b6f1f7a0  gcc/testsuite/g++.dg/dfp/mangle-2.C
  97de1869469f8592b096b761b6a2cceb  gcc/testsuite/g++.dg/dfp/mangle-3.C
*************** becc0e6f064af285a504ff10eaffc525  gcc/te
*** 16960,16966 ****
  3a865b01c504023d0b90b1f055163c6a  gcc/testsuite/g++.dg/dfp/nofields.C
  919ff80bde2b401e1cf10423071bab16  gcc/testsuite/g++.dg/dfp/pr92744.C
  cd0133a632a541db051ef84d53754ac6  gcc/testsuite/g++.dg/dfp/typeid1.C
! a6b0a7e3ea4d102b606bb8593d4669b9  gcc/testsuite/g++.dg/dg.exp
  acfb4c292cab52af7c96437dfeb91332  gcc/testsuite/g++.dg/diagnostic/aka1.C
  6daf9c84b004ad38b36ca9e885175631  gcc/testsuite/g++.dg/diagnostic/aka2.C
  0aacbf4bd10589d329e7f0a05be533bb  gcc/testsuite/g++.dg/diagnostic/aka3.C
--- 17580,17586 ----
  3a865b01c504023d0b90b1f055163c6a  gcc/testsuite/g++.dg/dfp/nofields.C
  919ff80bde2b401e1cf10423071bab16  gcc/testsuite/g++.dg/dfp/pr92744.C
  cd0133a632a541db051ef84d53754ac6  gcc/testsuite/g++.dg/dfp/typeid1.C
! 8481466a617788f108ff8a6c964f8a9a  gcc/testsuite/g++.dg/dg.exp
  acfb4c292cab52af7c96437dfeb91332  gcc/testsuite/g++.dg/diagnostic/aka1.C
  6daf9c84b004ad38b36ca9e885175631  gcc/testsuite/g++.dg/diagnostic/aka2.C
  0aacbf4bd10589d329e7f0a05be533bb  gcc/testsuite/g++.dg/diagnostic/aka3.C
*************** e083f6b3ba321e7cdc9c8d54972f027b  gcc/te
*** 16973,16979 ****
  8dfa99aaf3b734e4b4a8f9dcfbed7cdd  gcc/testsuite/g++.dg/diagnostic/alignof3.C
  1f68f132aa0d07e47ed9cf254749fe74  gcc/testsuite/g++.dg/diagnostic/array-init1.C
  f468ff0e470b813ba90ab6f552dfbb51  gcc/testsuite/g++.dg/diagnostic/auto-storage-1.C
! ff860856c2893a017f1f53ffe7a296c7  gcc/testsuite/g++.dg/diagnostic/auto1.C
  2782c3a1ba0fe921f95b73de11d6bf55  gcc/testsuite/g++.dg/diagnostic/bad-binary-ops.C
  748783b112c42a8deeb80f2d23c3aa1f  gcc/testsuite/g++.dg/diagnostic/base-operand-non-pointer-1.C
  d7dcca6cdb24ff15a17be482e130bf4e  gcc/testsuite/g++.dg/diagnostic/bindings1.C
--- 17593,17599 ----
  8dfa99aaf3b734e4b4a8f9dcfbed7cdd  gcc/testsuite/g++.dg/diagnostic/alignof3.C
  1f68f132aa0d07e47ed9cf254749fe74  gcc/testsuite/g++.dg/diagnostic/array-init1.C
  f468ff0e470b813ba90ab6f552dfbb51  gcc/testsuite/g++.dg/diagnostic/auto-storage-1.C
! d6cd69df86e5ef21af4548c3401c93ba  gcc/testsuite/g++.dg/diagnostic/auto1.C
  2782c3a1ba0fe921f95b73de11d6bf55  gcc/testsuite/g++.dg/diagnostic/bad-binary-ops.C
  748783b112c42a8deeb80f2d23c3aa1f  gcc/testsuite/g++.dg/diagnostic/base-operand-non-pointer-1.C
  d7dcca6cdb24ff15a17be482e130bf4e  gcc/testsuite/g++.dg/diagnostic/bindings1.C
*************** d7dcca6cdb24ff15a17be482e130bf4e  gcc/te
*** 16983,16989 ****
  f9722392abd0d8da545dd7e9182420ee  gcc/testsuite/g++.dg/diagnostic/bitfld4.C
  08395de92ca6c9d616701695de58f2ce  gcc/testsuite/g++.dg/diagnostic/complex-invalid-1.C
  bdbe25cf432b7755bcf34617531e70c9  gcc/testsuite/g++.dg/diagnostic/conflicting-specifiers-1.C
! e9fd392a1d3ed755bb9e3e8d6c554095  gcc/testsuite/g++.dg/diagnostic/constexpr1.C
  13461b7c9b3b8e9d46f44892e6c9d868  gcc/testsuite/g++.dg/diagnostic/constexpr2.C
  e824a88234abd039ffea31d13a8e9e42  gcc/testsuite/g++.dg/diagnostic/delete1.C
  4a4ed8a805a81f8726e0ba889c68ff19  gcc/testsuite/g++.dg/diagnostic/disable.C
--- 17603,17609 ----
  f9722392abd0d8da545dd7e9182420ee  gcc/testsuite/g++.dg/diagnostic/bitfld4.C
  08395de92ca6c9d616701695de58f2ce  gcc/testsuite/g++.dg/diagnostic/complex-invalid-1.C
  bdbe25cf432b7755bcf34617531e70c9  gcc/testsuite/g++.dg/diagnostic/conflicting-specifiers-1.C
! f7373a71dd891357231338f7279d20ca  gcc/testsuite/g++.dg/diagnostic/constexpr1.C
  13461b7c9b3b8e9d46f44892e6c9d868  gcc/testsuite/g++.dg/diagnostic/constexpr2.C
  e824a88234abd039ffea31d13a8e9e42  gcc/testsuite/g++.dg/diagnostic/delete1.C
  4a4ed8a805a81f8726e0ba889c68ff19  gcc/testsuite/g++.dg/diagnostic/disable.C
*************** b4e50b6bf0aa4ab59b9a9cb6e129a903  gcc/te
*** 17006,17011 ****
--- 17626,17632 ----
  3cb4de68f3722265cb8bb8c3ec74b8c2  gcc/testsuite/g++.dg/diagnostic/long-short.C
  5e5dde276892455bc269dfa7e14e456a  gcc/testsuite/g++.dg/diagnostic/main1.C
  17ad778ff7ed164cbd2116ff51b37594  gcc/testsuite/g++.dg/diagnostic/main2.C
+ 01c883ff580c9cfefb83129a484038d7  gcc/testsuite/g++.dg/diagnostic/maybe_unused1.C
  1c088f537800130c2d2097ad3522d6a7  gcc/testsuite/g++.dg/diagnostic/mem-init1.C
  f75c82dfbdf0eea67c71d62ca274e22b  gcc/testsuite/g++.dg/diagnostic/member-decl-1.C
  4656c9afc261871baeb12bca5d22f022  gcc/testsuite/g++.dg/diagnostic/member-fn-1.C
*************** a57099362f24a92fdb8ee593039405ff  gcc/te
*** 17022,17027 ****
--- 17643,17650 ----
  bd4b7e0e3c910f4e6940a6a7cca5b15b  gcc/testsuite/g++.dg/diagnostic/param-type-mismatch-3.C
  fdc6714748f5715201fad71a1c77a9eb  gcc/testsuite/g++.dg/diagnostic/param-type-mismatch.C
  87d8d501c7c4afd85a94fca95720d273  gcc/testsuite/g++.dg/diagnostic/parm1.C
+ 89cfaafcf845bcadd2f98e3b9ca0c024  gcc/testsuite/g++.dg/diagnostic/pr100716-1.C
+ a4c08a9df3d26ab29ba0a94cfdaab5d1  gcc/testsuite/g++.dg/diagnostic/pr100716.C
  b925bc078075ee65909b19494337263e  gcc/testsuite/g++.dg/diagnostic/pr13981.C
  88fee03436512dbcf1e58122fba64aea  gcc/testsuite/g++.dg/diagnostic/pr58979.C
  7447a4913a5c3f623216b378589bebc7  gcc/testsuite/g++.dg/diagnostic/pr59838.C
*************** e6f1beb39c362797a43008d683753438  gcc/te
*** 17051,17070 ****
  e189e0c892951d7a0756094c06ff9ad3  gcc/testsuite/g++.dg/diagnostic/pr96045-2.C
  5507cf31f35b15260187a95b5c916e6d  gcc/testsuite/g++.dg/diagnostic/pr96045-3.C
  bd9b993605b269dc55604ebbb4049ea6  gcc/testsuite/g++.dg/diagnostic/pr96328.C
! 235559a0e679b9d9b09aa82af7add023  gcc/testsuite/g++.dg/diagnostic/ptrtomem1.C
  22810075c6736e148fdad4df31746f9b  gcc/testsuite/g++.dg/diagnostic/ptrtomem2.C
  64e332410e9790f9161cfceca5cb41d4  gcc/testsuite/g++.dg/diagnostic/redeclaration-1.C
  bb193b240fa78433d956d57357da2858  gcc/testsuite/g++.dg/diagnostic/ref1.C
  b70b854343c43b4b0eac609476ee8fc1  gcc/testsuite/g++.dg/diagnostic/ref2.C
  fabec9ff676df7e51a4bfcca57117fa6  gcc/testsuite/g++.dg/diagnostic/ref3.C
  e3aa447c8519e3886f54a6a8d59c31c4  gcc/testsuite/g++.dg/diagnostic/return-type-invalid-1.C
  ed0a135e3f6f6280fe8fd6ee38207fb6  gcc/testsuite/g++.dg/diagnostic/returning-a-value-1.C
  d625b560f030fba41078f9ffd66c536e  gcc/testsuite/g++.dg/diagnostic/signed-unsigned.C
  56b153bce2ef2880be3f566067731dc9  gcc/testsuite/g++.dg/diagnostic/static-cdtor-1.C
  b754a2ad578f67afe512ad74ff03b31f  gcc/testsuite/g++.dg/diagnostic/static_assert1.C
  a7b5530f2822e6294b3a5ff037237c86  gcc/testsuite/g++.dg/diagnostic/static_assert2.C
  fb6ded9332966bea148bf51803a3e64f  gcc/testsuite/g++.dg/diagnostic/static_assert3.C
! c5118b2b3d40ad89746624615a874180  gcc/testsuite/g++.dg/diagnostic/string-literal-concat.C
  ecb01c09c49ca387feb23a52c154974e  gcc/testsuite/g++.dg/diagnostic/thread-thread_local.C
  367b21b37820f516cd49cb6ead5340a9  gcc/testsuite/g++.dg/diagnostic/thread1.C
  7c42a2efea497582f4a4e7748bb8644a  gcc/testsuite/g++.dg/diagnostic/top-level-auto-1.C
--- 17674,17698 ----
  e189e0c892951d7a0756094c06ff9ad3  gcc/testsuite/g++.dg/diagnostic/pr96045-2.C
  5507cf31f35b15260187a95b5c916e6d  gcc/testsuite/g++.dg/diagnostic/pr96045-3.C
  bd9b993605b269dc55604ebbb4049ea6  gcc/testsuite/g++.dg/diagnostic/pr96328.C
! 5d7c98f57af8d51803bc217bfb5be718  gcc/testsuite/g++.dg/diagnostic/ptrtomem1.C
  22810075c6736e148fdad4df31746f9b  gcc/testsuite/g++.dg/diagnostic/ptrtomem2.C
+ 31a4f22f01b86144e8c21918ef3d701b  gcc/testsuite/g++.dg/diagnostic/ptrtomem3.C
+ 28d2cfc7c717fd3639026aaded3ecf23  gcc/testsuite/g++.dg/diagnostic/recur-align.C
  64e332410e9790f9161cfceca5cb41d4  gcc/testsuite/g++.dg/diagnostic/redeclaration-1.C
+ b366f10d78ca81d757eef37957892a2f  gcc/testsuite/g++.dg/diagnostic/redeclaration-2.C
  bb193b240fa78433d956d57357da2858  gcc/testsuite/g++.dg/diagnostic/ref1.C
  b70b854343c43b4b0eac609476ee8fc1  gcc/testsuite/g++.dg/diagnostic/ref2.C
  fabec9ff676df7e51a4bfcca57117fa6  gcc/testsuite/g++.dg/diagnostic/ref3.C
  e3aa447c8519e3886f54a6a8d59c31c4  gcc/testsuite/g++.dg/diagnostic/return-type-invalid-1.C
  ed0a135e3f6f6280fe8fd6ee38207fb6  gcc/testsuite/g++.dg/diagnostic/returning-a-value-1.C
+ a05ba839cb9338f35410b986c40f0385  gcc/testsuite/g++.dg/diagnostic/scope1.C
  d625b560f030fba41078f9ffd66c536e  gcc/testsuite/g++.dg/diagnostic/signed-unsigned.C
  56b153bce2ef2880be3f566067731dc9  gcc/testsuite/g++.dg/diagnostic/static-cdtor-1.C
  b754a2ad578f67afe512ad74ff03b31f  gcc/testsuite/g++.dg/diagnostic/static_assert1.C
  a7b5530f2822e6294b3a5ff037237c86  gcc/testsuite/g++.dg/diagnostic/static_assert2.C
  fb6ded9332966bea148bf51803a3e64f  gcc/testsuite/g++.dg/diagnostic/static_assert3.C
! 356d9ff5d1d1c03e2a293f19c79c3b7a  gcc/testsuite/g++.dg/diagnostic/static_assert4.C
! 44f760c7519cb2fd28e1b57a7e670f75  gcc/testsuite/g++.dg/diagnostic/string-literal-concat.C
  ecb01c09c49ca387feb23a52c154974e  gcc/testsuite/g++.dg/diagnostic/thread-thread_local.C
  367b21b37820f516cd49cb6ead5340a9  gcc/testsuite/g++.dg/diagnostic/thread1.C
  7c42a2efea497582f4a4e7748bb8644a  gcc/testsuite/g++.dg/diagnostic/top-level-auto-1.C
*************** d84401f4f10886da506d8acbdb74a1d9  gcc/te
*** 17075,17080 ****
--- 17703,17710 ----
  41b891220463d2f235b6aafb7a120598  gcc/testsuite/g++.dg/diagnostic/unclosed-function.C
  1f7945145b6225ba6290bb000423cf46  gcc/testsuite/g++.dg/diagnostic/unclosed-namespace.C
  349d7476d1a27bd2806b8e0a3097a511  gcc/testsuite/g++.dg/diagnostic/unclosed-struct.C
+ a76cb15a146e724270d69d28ec781710  gcc/testsuite/g++.dg/diagnostic/undeclared1.C
+ 9cc3611144e3b22b3f5ce232cc20df91  gcc/testsuite/g++.dg/diagnostic/using1.C
  0420bcbb4f7abd68c02f908026ad1f11  gcc/testsuite/g++.dg/diagnostic/variably-modified-type-1.C
  242539537e0b01ca558d91adcac7cb35  gcc/testsuite/g++.dg/diagnostic/variadic1.C
  793d6d70a83796d613da9b245936f84c  gcc/testsuite/g++.dg/diagnostic/virtual-constexpr.C
*************** d84401f4f10886da506d8acbdb74a1d9  gcc/te
*** 17082,17094 ****
  0e5fa001ad7da0e3850de27d0c3c2661  gcc/testsuite/g++.dg/diagnostic/virtual-static.C
  c7f8ff703c53611ffdb66eccc4747879  gcc/testsuite/g++.dg/diagnostic/wrong-tag-1.C
  99f14d5ed8c140b0a7c970bb12a4c5f0  gcc/testsuite/g++.dg/eh/080514-1.C
  562ca7c694e89bb3ac76711c239d5c5e  gcc/testsuite/g++.dg/eh/alias1.C
  8d65b4e77af51b19427e0978978ad81f  gcc/testsuite/g++.dg/eh/anon1.C
  48d7d6ffdcfbf80b116c2987f4baf9f2  gcc/testsuite/g++.dg/eh/anon1a.cc
  d6a2edbc35caa25cec47fb759e313e04  gcc/testsuite/g++.dg/eh/anon2.C
  991eb7aeea02d80e000538741bcc1603  gcc/testsuite/g++.dg/eh/arm-iwmmxt-unwind.C
! 7a789c5f5b392854e4bcc712122b232c  gcc/testsuite/g++.dg/eh/arm-vfp-unwind.C
! d4e8a0fe46920b2021613a1a745597e4  gcc/testsuite/g++.dg/eh/array1.C
  88ca3337a1391414cccfd8e3f11d8b42  gcc/testsuite/g++.dg/eh/async-unwind1.C
  8c15167347f9d4cc57635e5a972d90ef  gcc/testsuite/g++.dg/eh/async-unwind2.C
  b9f64f18eca81e96e3ebd977319e1b79  gcc/testsuite/g++.dg/eh/builtin1.C
--- 17712,17728 ----
  0e5fa001ad7da0e3850de27d0c3c2661  gcc/testsuite/g++.dg/diagnostic/virtual-static.C
  c7f8ff703c53611ffdb66eccc4747879  gcc/testsuite/g++.dg/diagnostic/wrong-tag-1.C
  99f14d5ed8c140b0a7c970bb12a4c5f0  gcc/testsuite/g++.dg/eh/080514-1.C
+ 193547bb91302f954fd632ebd9a73abc  gcc/testsuite/g++.dg/eh/aggregate1.C
+ 82be37f058a4cec3d7472da4ed601f58  gcc/testsuite/g++.dg/eh/aggregate2.C
  562ca7c694e89bb3ac76711c239d5c5e  gcc/testsuite/g++.dg/eh/alias1.C
  8d65b4e77af51b19427e0978978ad81f  gcc/testsuite/g++.dg/eh/anon1.C
  48d7d6ffdcfbf80b116c2987f4baf9f2  gcc/testsuite/g++.dg/eh/anon1a.cc
  d6a2edbc35caa25cec47fb759e313e04  gcc/testsuite/g++.dg/eh/anon2.C
  991eb7aeea02d80e000538741bcc1603  gcc/testsuite/g++.dg/eh/arm-iwmmxt-unwind.C
! 9467c9f73786a798fd398340aa3f0748  gcc/testsuite/g++.dg/eh/arm-vfp-unwind.C
! 773ab6ae8270305a343dabbcc546689f  gcc/testsuite/g++.dg/eh/array1.C
! f0d5ef741ce578782aaf2af5c75f69f5  gcc/testsuite/g++.dg/eh/array2.C
! 772a16028e0ff2c5a37eb8683d338bae  gcc/testsuite/g++.dg/eh/array3.C
  88ca3337a1391414cccfd8e3f11d8b42  gcc/testsuite/g++.dg/eh/async-unwind1.C
  8c15167347f9d4cc57635e5a972d90ef  gcc/testsuite/g++.dg/eh/async-unwind2.C
  b9f64f18eca81e96e3ebd977319e1b79  gcc/testsuite/g++.dg/eh/builtin1.C
*************** b6cd2e012197b87e353240d0e17623e0  gcc/te
*** 17114,17119 ****
--- 17748,17754 ----
  a779539302385f915a13ecb1283ac58c  gcc/testsuite/g++.dg/eh/cleanup3.C
  fdfb8828613e7c687d87d7facb0e2135  gcc/testsuite/g++.dg/eh/cleanup4.C
  374e1d6aca3b77423c5ac592a57b451a  gcc/testsuite/g++.dg/eh/cleanup5.C
+ d5b4d3665b9fe9add2cf30ed70aa2ebf  gcc/testsuite/g++.dg/eh/cleanup6.C
  5a4cb3c8d739e6d9bde39ba9bebd19e2  gcc/testsuite/g++.dg/eh/comdat1.C
  bd6bd3cc57144658b6137dc9123743ed  gcc/testsuite/g++.dg/eh/cond1.C
  9218246502a1a48c13f74d67b4b19c2d  gcc/testsuite/g++.dg/eh/cond2.C
*************** e917a91ae5be207defc427d0a079f7e9  gcc/te
*** 17132,17138 ****
  87d9e27b3716eabb3dabd6b8b1a837e7  gcc/testsuite/g++.dg/eh/defarg1.C
  6d24a241b37d9461b161f8ce01317ab8  gcc/testsuite/g++.dg/eh/delayslot1.C
  8df5b68d232832afbaddc003b31e8de2  gcc/testsuite/g++.dg/eh/delegating1.C
! f030d79186c78f39f9a09e546ff44eab  gcc/testsuite/g++.dg/eh/delete1.C
  576fca342f1265b23facee2429c2f6ce  gcc/testsuite/g++.dg/eh/div.C
  1521a64435be961406151b3df9665c39  gcc/testsuite/g++.dg/eh/dtor1.C
  946e2e4e3fafd42b9f9d9e2594d511ac  gcc/testsuite/g++.dg/eh/dtor2.C
--- 17767,17773 ----
  87d9e27b3716eabb3dabd6b8b1a837e7  gcc/testsuite/g++.dg/eh/defarg1.C
  6d24a241b37d9461b161f8ce01317ab8  gcc/testsuite/g++.dg/eh/delayslot1.C
  8df5b68d232832afbaddc003b31e8de2  gcc/testsuite/g++.dg/eh/delegating1.C
! fd403bd2492abf66a1421658620fc19a  gcc/testsuite/g++.dg/eh/delete1.C
  576fca342f1265b23facee2429c2f6ce  gcc/testsuite/g++.dg/eh/div.C
  1521a64435be961406151b3df9665c39  gcc/testsuite/g++.dg/eh/dtor1.C
  946e2e4e3fafd42b9f9d9e2594d511ac  gcc/testsuite/g++.dg/eh/dtor2.C
*************** c6ed6afa9f180a60e542789d58e23a4a  gcc/te
*** 17144,17150 ****
  12090d44df12e33d62fc4a9cf4bcd257  gcc/testsuite/g++.dg/eh/filter2.C
  b9e40a9f396b0f5897d9a01a383448d0  gcc/testsuite/g++.dg/eh/forced1.C
  c57d00c7e2509174eb67af39ca23acc8  gcc/testsuite/g++.dg/eh/forced2.C
! 5b5d48b7cc0c97e55932d8c409fcc8b5  gcc/testsuite/g++.dg/eh/forced3.C
  59ef26e9718a21aaef4d713fbc8eebec  gcc/testsuite/g++.dg/eh/forced4.C
  2fa97d2eb1070b8ff9ed142189631d04  gcc/testsuite/g++.dg/eh/fp-regs.C
  08684655cbbdb7a5f4f96546c22535c1  gcc/testsuite/g++.dg/eh/gcsec1.C
--- 17779,17785 ----
  12090d44df12e33d62fc4a9cf4bcd257  gcc/testsuite/g++.dg/eh/filter2.C
  b9e40a9f396b0f5897d9a01a383448d0  gcc/testsuite/g++.dg/eh/forced1.C
  c57d00c7e2509174eb67af39ca23acc8  gcc/testsuite/g++.dg/eh/forced2.C
! 4b47200e01435896ded16c32f5f815de  gcc/testsuite/g++.dg/eh/forced3.C
  59ef26e9718a21aaef4d713fbc8eebec  gcc/testsuite/g++.dg/eh/forced4.C
  2fa97d2eb1070b8ff9ed142189631d04  gcc/testsuite/g++.dg/eh/fp-regs.C
  08684655cbbdb7a5f4f96546c22535c1  gcc/testsuite/g++.dg/eh/gcsec1.C
*************** c0abaf19bc6ccea1ddcd7d45a062e6f7  gcc/te
*** 17159,17170 ****
  741a6b9a2519e96d9a6a3d7503d9cdfa  gcc/testsuite/g++.dg/eh/loop2.C
  c8f6f4459095bf15bd799a6d96061277  gcc/testsuite/g++.dg/eh/nested-try.C
  addd3f35897f7c52014f1e26226e9219  gcc/testsuite/g++.dg/eh/new1.C
  02bc77a36c6c86bb6c3fa9d05ed2ca11  gcc/testsuite/g++.dg/eh/nrv1.C
  39b82c2cef9b1e2c8c66b3ae639c6a35  gcc/testsuite/g++.dg/eh/o32-fp.C
  ee5fb539eb5e41ab9f5aa0028f011fce  gcc/testsuite/g++.dg/eh/omit-frame-pointer.C
  dfa0fe611ce9682e5de477f908c0b5c0  gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C
  b0149e5a2fbd5ae0fa0d1eb763a1f18e  gcc/testsuite/g++.dg/eh/partial1.C
- bafc15005abdfe9131f6074efde175eb  gcc/testsuite/g++.dg/eh/ppc64-sighandle-cr.C
  339f1ef3219aace218fecaa5c9b19c83  gcc/testsuite/g++.dg/eh/pr29166.C
  fa076f7aee99ba9138c0541bc50c2e01  gcc/testsuite/g++.dg/eh/pr38662.C
  3c71b722751263d1baefa007004a90bb  gcc/testsuite/g++.dg/eh/pr41819.C
--- 17794,17805 ----
  741a6b9a2519e96d9a6a3d7503d9cdfa  gcc/testsuite/g++.dg/eh/loop2.C
  c8f6f4459095bf15bd799a6d96061277  gcc/testsuite/g++.dg/eh/nested-try.C
  addd3f35897f7c52014f1e26226e9219  gcc/testsuite/g++.dg/eh/new1.C
+ f30e123e5206b61bc091e205033573e1  gcc/testsuite/g++.dg/eh/new2.C
  02bc77a36c6c86bb6c3fa9d05ed2ca11  gcc/testsuite/g++.dg/eh/nrv1.C
  39b82c2cef9b1e2c8c66b3ae639c6a35  gcc/testsuite/g++.dg/eh/o32-fp.C
  ee5fb539eb5e41ab9f5aa0028f011fce  gcc/testsuite/g++.dg/eh/omit-frame-pointer.C
  dfa0fe611ce9682e5de477f908c0b5c0  gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C
  b0149e5a2fbd5ae0fa0d1eb763a1f18e  gcc/testsuite/g++.dg/eh/partial1.C
  339f1ef3219aace218fecaa5c9b19c83  gcc/testsuite/g++.dg/eh/pr29166.C
  fa076f7aee99ba9138c0541bc50c2e01  gcc/testsuite/g++.dg/eh/pr38662.C
  3c71b722751263d1baefa007004a90bb  gcc/testsuite/g++.dg/eh/pr41819.C
*************** fa076f7aee99ba9138c0541bc50c2e01  gcc/te
*** 17172,17179 ****
  6b7a6fb9b5bb6227cd79629a94634556  gcc/testsuite/g++.dg/eh/pr43365.C
  6eb9d68250f630420d0fdb982047fe17  gcc/testsuite/g++.dg/eh/pr45569.C
  d38795dc5765c85251d1b51d2837fa65  gcc/testsuite/g++.dg/eh/pr84968.C
  a9ed8d0335c982c533cb9ab886ed3a49  gcc/testsuite/g++.dg/eh/registers1.C
! 9c31dc536009419f724140b51bd51f7a  gcc/testsuite/g++.dg/eh/return1.C
  10cee1522872b7a635448041c93abb77  gcc/testsuite/g++.dg/eh/scope1.C
  be5af3c4aa82f74a07dbbdc316e9c02c  gcc/testsuite/g++.dg/eh/seh-xmm-unwind.C
  25142fe6cff6b7d981b3267f13c2b8ab  gcc/testsuite/g++.dg/eh/shadow1.C
--- 17807,17816 ----
  6b7a6fb9b5bb6227cd79629a94634556  gcc/testsuite/g++.dg/eh/pr43365.C
  6eb9d68250f630420d0fdb982047fe17  gcc/testsuite/g++.dg/eh/pr45569.C
  d38795dc5765c85251d1b51d2837fa65  gcc/testsuite/g++.dg/eh/pr84968.C
+ 9623b61344d258574a3ed60670199161  gcc/testsuite/g++.dg/eh/ref-temp1.C
+ edd7f2bf186873e0f253e337b7c0baa7  gcc/testsuite/g++.dg/eh/ref-temp2.C
  a9ed8d0335c982c533cb9ab886ed3a49  gcc/testsuite/g++.dg/eh/registers1.C
! b17a8e37ca2c7024b8fdc3747635ee79  gcc/testsuite/g++.dg/eh/return1.C
  10cee1522872b7a635448041c93abb77  gcc/testsuite/g++.dg/eh/scope1.C
  be5af3c4aa82f74a07dbbdc316e9c02c  gcc/testsuite/g++.dg/eh/seh-xmm-unwind.C
  25142fe6cff6b7d981b3267f13c2b8ab  gcc/testsuite/g++.dg/eh/shadow1.C
*************** be5af3c4aa82f74a07dbbdc316e9c02c  gcc/te
*** 17181,17188 ****
  83a7ff2264ae46e51ffcca7ca6a7cf8c  gcc/testsuite/g++.dg/eh/simd-1.C
  8ca9b346be7f84c368ac74fd74ad5bbf  gcc/testsuite/g++.dg/eh/simd-2.C
  55e1817e6d2f866b9cd25ef5751e2b9c  gcc/testsuite/g++.dg/eh/simd-3.C
- d46aab23b9e76d1da7631a4184db1622  gcc/testsuite/g++.dg/eh/simd-4.C
- 7bbbffa771c48a85ca22cc69554f7cc4  gcc/testsuite/g++.dg/eh/simd-5.C
  8eaf0730198c7e8fe14a657869d38fde  gcc/testsuite/g++.dg/eh/spbp.C
  82939fb6cdaf944681687fca28788638  gcc/testsuite/g++.dg/eh/spec1.C
  3d659e64086eab4c277f68cb3479ada7  gcc/testsuite/g++.dg/eh/spec10.C
--- 17818,17823 ----
*************** fd9d6b2aeb10f429dd19c2675cd7ac03  gcc/te
*** 17209,17217 ****
  45cea983dcee48d4c249758ac270c782  gcc/testsuite/g++.dg/eh/throw3.C
  d949616391e9201fe80327c74d26daf0  gcc/testsuite/g++.dg/eh/uncaught1.C
  0a4a6e449503f9ebd41b838472d08e86  gcc/testsuite/g++.dg/eh/uncaught2.C
- 9d1aa5beb1fa132e80d87d15ad2b9c90  gcc/testsuite/g++.dg/eh/uncaught3.C
  99e4a259aad973b217052ad01fc8c886  gcc/testsuite/g++.dg/eh/uncaught4.C
! 517827300493efe68758475aed8cb79f  gcc/testsuite/g++.dg/eh/unexpected1.C
  0dd221086ed06eda43a00693a7ba5e7a  gcc/testsuite/g++.dg/eh/unwind-direct.C
  75e632be1251d6094d2cf9147ed3621d  gcc/testsuite/g++.dg/eh/unwind1.C
  d0664ba773ff7e78659033ad657627df  gcc/testsuite/g++.dg/eh/unwind2.C
--- 17844,17851 ----
  45cea983dcee48d4c249758ac270c782  gcc/testsuite/g++.dg/eh/throw3.C
  d949616391e9201fe80327c74d26daf0  gcc/testsuite/g++.dg/eh/uncaught1.C
  0a4a6e449503f9ebd41b838472d08e86  gcc/testsuite/g++.dg/eh/uncaught2.C
  99e4a259aad973b217052ad01fc8c886  gcc/testsuite/g++.dg/eh/uncaught4.C
! ed30e020c0e4d35376ab0ac8ba41cc4a  gcc/testsuite/g++.dg/eh/unexpected1.C
  0dd221086ed06eda43a00693a7ba5e7a  gcc/testsuite/g++.dg/eh/unwind-direct.C
  75e632be1251d6094d2cf9147ed3621d  gcc/testsuite/g++.dg/eh/unwind1.C
  d0664ba773ff7e78659033ad657627df  gcc/testsuite/g++.dg/eh/unwind2.C
*************** e0ba8ce6144da0b9ed7164d2baac70c5  gcc/te
*** 17309,17314 ****
--- 17943,17949 ----
  13112f3c26efe031e498e9d598fd432b  gcc/testsuite/g++.dg/expr/ptr-comp1.C
  9cd0d78bf3adf868453a660652fb543c  gcc/testsuite/g++.dg/expr/ptr-comp2.C
  8e7ebd3abd11e20445775435479bf925  gcc/testsuite/g++.dg/expr/ptr-comp3.C
+ 84e8632b0773b27644d42a37057c3e35  gcc/testsuite/g++.dg/expr/ptr-comp4.C
  d108472b30fd8a2ccb535bb57ff25d0a  gcc/testsuite/g++.dg/expr/ptrmem1.C
  fdcee3f5eda44b0547ceaf548bc1c6e9  gcc/testsuite/g++.dg/expr/ptrmem10.C
  00a3281a5c60b23cc64b650f1e1bc13e  gcc/testsuite/g++.dg/expr/ptrmem4.C
*************** b7f5975e22585a2f3d80be63f70dccc8  gcc/te
*** 17356,17388 ****
  9b72806f0ff8dd6bff6e2ef84f0ce102  gcc/testsuite/g++.dg/ext/align2.C
  ae6df71fd3bee2754f2c1b710ca23b88  gcc/testsuite/g++.dg/ext/alignof1.C
  c193f1254c92080bca2fd5ab48c1e175  gcc/testsuite/g++.dg/ext/alignof2.C
- f94bcd708feb1a029065a7503b545f54  gcc/testsuite/g++.dg/ext/altivec-1.C
- 11c64f0deba1e4621429dc584ee88ae4  gcc/testsuite/g++.dg/ext/altivec-10.C
- 11e05978299d38b5d2b835ef7303988d  gcc/testsuite/g++.dg/ext/altivec-11.C
- ce4ff2095f5aadd1429d75f9964e3068  gcc/testsuite/g++.dg/ext/altivec-12.C
- 8269af4690723c041adba936c4db6226  gcc/testsuite/g++.dg/ext/altivec-13.C
- 12b4431d53d79d271888051ac7a6c837  gcc/testsuite/g++.dg/ext/altivec-14.C
- e79911e2babacda30b877e71d44e32a4  gcc/testsuite/g++.dg/ext/altivec-15.C
- 1f347fa1c57370132e750e4fb8b77f9d  gcc/testsuite/g++.dg/ext/altivec-16.C
- e7b8730e35adae22637664edfdba084d  gcc/testsuite/g++.dg/ext/altivec-17.C
- 4c612ecdb73822d456d417a307c5969e  gcc/testsuite/g++.dg/ext/altivec-18.C
- 0d2b8f9e1b8506c8de6da887d8b08add  gcc/testsuite/g++.dg/ext/altivec-2.C
- d3261ef497bef041056bc7661e3a3686  gcc/testsuite/g++.dg/ext/altivec-3.C
- 4f6acab6c14678a58ab3251c4c5a0ce1  gcc/testsuite/g++.dg/ext/altivec-4.C
- 355a9e23c60206207713180015d48356  gcc/testsuite/g++.dg/ext/altivec-5.C
- d57f577c518b4ac5cca112e37b6cc22b  gcc/testsuite/g++.dg/ext/altivec-6.C
- 7660d6ca0bb2815453a8a46cf5d11214  gcc/testsuite/g++.dg/ext/altivec-7.C
- 683588ba7d8e9b0d8436b68f5b28c8cb  gcc/testsuite/g++.dg/ext/altivec-8.C
- 5bc21f478c5c54165eb98a3afe01f181  gcc/testsuite/g++.dg/ext/altivec-9.C
- dd9c52efe2c8d9b6297333f40984600a  gcc/testsuite/g++.dg/ext/altivec-cell-1.C
- ee8876bb4c7e26216a124a7d6118d4ed  gcc/testsuite/g++.dg/ext/altivec-cell-2.C
- 141d17972ddb9632037c663fb3999e80  gcc/testsuite/g++.dg/ext/altivec-cell-3.C
- a187c6adacfe593dd505a2340e53e439  gcc/testsuite/g++.dg/ext/altivec-cell-4.C
- cc9ef742610f22a59244e4dadcfabb8e  gcc/testsuite/g++.dg/ext/altivec-cell-5.C
- 772eadd4242b243e5e5a0efb88bedd97  gcc/testsuite/g++.dg/ext/altivec-types-1.C
- 7263da6aee0d862b959ff54189189998  gcc/testsuite/g++.dg/ext/altivec-types-2.C
- af5ab077811439033f9383ef557968f9  gcc/testsuite/g++.dg/ext/altivec-types-3.C
- 44353ecc66faa31e60f8e0a690173f56  gcc/testsuite/g++.dg/ext/altivec-types-4.C
  644c5b82757cda2bb4ab9658b9dff77a  gcc/testsuite/g++.dg/ext/always_inline-1.C
  44b18dc394b2fe02bfec7111c89c3315  gcc/testsuite/g++.dg/ext/always_inline-2.C
  501bf92c734eebe5c5c57a9e64a340e1  gcc/testsuite/g++.dg/ext/always_inline-3.C
--- 17991,17996 ----
*************** f8e1155ac1e5e2ac874ef60de1dbe74e  gcc/te
*** 17396,17401 ****
--- 18004,18011 ----
  a883399d4251a031b0d761ef41a67f52  gcc/testsuite/g++.dg/ext/anon-struct5.C
  f0c98c112823b1ebcaa945f17c09d04a  gcc/testsuite/g++.dg/ext/anon-struct6.C
  2792f1c8cc3327e23d859e893eac1679  gcc/testsuite/g++.dg/ext/anon-struct7.C
+ 267e78dd898208d0d16ab91751f699c1  gcc/testsuite/g++.dg/ext/anon-struct8.C
+ c96f8f799b21508c3c9d07a76eca024e  gcc/testsuite/g++.dg/ext/anon-struct9.C
  a49bb05a98ee7ad2eb4c9f08711d3d4d  gcc/testsuite/g++.dg/ext/arm-bf16/bf16-mangle-1.C
  d9feefe3043369b99ac1813781a3c3a3  gcc/testsuite/g++.dg/ext/arm-bf16/bf16-mangle-aarch64-1.C
  9ad9eafed83197342bcdbe7afa3a727f  gcc/testsuite/g++.dg/ext/arm-fp16/arm-fp16-ops-1.C
*************** abcc4257209dae8941d67580c272bb5e  gcc/te
*** 17485,17490 ****
--- 18095,18111 ----
  359c96c31d10d777ab488b368388f5fa  gcc/testsuite/g++.dg/ext/attr-returns-nonnull.C
  dc83c0d6c6079968c8315e6161d79429  gcc/testsuite/g++.dg/ext/attr-trailing1.C
  9a34dbee24601c3613d18b683ab0431d  gcc/testsuite/g++.dg/ext/attr-type1.C
+ 436654db69995e2c5c9e51a240c1fb2b  gcc/testsuite/g++.dg/ext/attr-unavailable-1.C
+ 363318401f6c24d1fd4eb4b1352223b5  gcc/testsuite/g++.dg/ext/attr-unavailable-10.C
+ dcdd1affde3b96d5073c02e9962a3e1f  gcc/testsuite/g++.dg/ext/attr-unavailable-11.C
+ edbfa498035679b0c1142cf98ca9e622  gcc/testsuite/g++.dg/ext/attr-unavailable-2.C
+ 4e90e81502c480379e69d6b0b0b238aa  gcc/testsuite/g++.dg/ext/attr-unavailable-3.C
+ 5403ddd4b93109633d19e176e484580f  gcc/testsuite/g++.dg/ext/attr-unavailable-4.C
+ 37e3ce0cbec4d5cfd96c3258f5a59673  gcc/testsuite/g++.dg/ext/attr-unavailable-5.C
+ 082d4131977fb749083a3f7380051b5c  gcc/testsuite/g++.dg/ext/attr-unavailable-6.C
+ 422148e5f44383a4df8e2cae532f1eba  gcc/testsuite/g++.dg/ext/attr-unavailable-7.C
+ 4eae5dbc8f3affa7dfd6b3de039701cd  gcc/testsuite/g++.dg/ext/attr-unavailable-8.C
+ 1fa294104487a6c17fe32437c2d67db6  gcc/testsuite/g++.dg/ext/attr-unavailable-9.C
  5c2088defb983e68f4b6df2ee178d499  gcc/testsuite/g++.dg/ext/attr-used-1.C
  9c0d6d667a50a66a3885e9b069750b72  gcc/testsuite/g++.dg/ext/attr-used-2.C
  758b042dd0d19638f99e51139b65df3d  gcc/testsuite/g++.dg/ext/attr-warning.C
*************** f6addddeaf5bf3773bacaf903a33daa7  gcc/te
*** 17546,17552 ****
  76284b29c6fce52f56ddbcc04acd3a97  gcc/testsuite/g++.dg/ext/attrib6.C
  b6c134d4646b46725f8f4f231df5349f  gcc/testsuite/g++.dg/ext/attrib60.C
  df4711200e4e7cd7c5366aa4bdd29d74  gcc/testsuite/g++.dg/ext/attrib61.C
! 7fcf8dcb8e15b7e121eaede34f3aedfa  gcc/testsuite/g++.dg/ext/attrib62.C
  c992ba90cd524ff973d2e06226c41bfa  gcc/testsuite/g++.dg/ext/attrib64.C
  7af1e9265de26187b4a3a3880f99ac11  gcc/testsuite/g++.dg/ext/attrib7.C
  23c4a640241391acec5a1fd2c3fa5f25  gcc/testsuite/g++.dg/ext/attrib8.C
--- 18167,18174 ----
  76284b29c6fce52f56ddbcc04acd3a97  gcc/testsuite/g++.dg/ext/attrib6.C
  b6c134d4646b46725f8f4f231df5349f  gcc/testsuite/g++.dg/ext/attrib60.C
  df4711200e4e7cd7c5366aa4bdd29d74  gcc/testsuite/g++.dg/ext/attrib61.C
! 5254a238524950c95810e43d56192c6d  gcc/testsuite/g++.dg/ext/attrib62.C
! 27519d8ffae247f3603111ebadacea31  gcc/testsuite/g++.dg/ext/attrib63.C
  c992ba90cd524ff973d2e06226c41bfa  gcc/testsuite/g++.dg/ext/attrib64.C
  7af1e9265de26187b4a3a3880f99ac11  gcc/testsuite/g++.dg/ext/attrib7.C
  23c4a640241391acec5a1fd2c3fa5f25  gcc/testsuite/g++.dg/ext/attrib8.C
*************** dcb61316c0f1ade91e6e2073e223bb73  gcc/te
*** 17572,17583 ****
  0bb7d7fb8e7941c2b887e97c4e4eaeee  gcc/testsuite/g++.dg/ext/bitfield7.C
  2a578b0c3d2d59e741cf5ff41b1559a2  gcc/testsuite/g++.dg/ext/bitfield8.C
  aee0568fa7f966a2398438c01e48d5d8  gcc/testsuite/g++.dg/ext/bitfield9.C
! 1371f46aed56d32c7b6433596ea7eacf  gcc/testsuite/g++.dg/ext/boolcomplex-1.c
  f858ebd95b83f4b214a9ef94ced0beb5  gcc/testsuite/g++.dg/ext/builtin-arith-overflow-1.C
  85ec4b83c9e5b2bc81e40e73aa3f129b  gcc/testsuite/g++.dg/ext/builtin-arith-overflow-2.C
  fff9b32833bf9b9b7bbcc10ac630a0d9  gcc/testsuite/g++.dg/ext/builtin-bswap1.C
  cb1f5787f134f3ea0a60b047b2e5da42  gcc/testsuite/g++.dg/ext/builtin-clear-padding-1.C
  e365f8ad6640a0436ca0135ba83acfe3  gcc/testsuite/g++.dg/ext/builtin-convertvector-1.C
  85ee2bb51775678716017f28fed495b0  gcc/testsuite/g++.dg/ext/builtin-has-attribute.C
  282c952c379da688cac62d8eceee8d16  gcc/testsuite/g++.dg/ext/builtin-has-attribute2.C
  28c9dbe7fd0321641cd617b67234b425  gcc/testsuite/g++.dg/ext/builtin-line1.C
--- 18194,18207 ----
  0bb7d7fb8e7941c2b887e97c4e4eaeee  gcc/testsuite/g++.dg/ext/bitfield7.C
  2a578b0c3d2d59e741cf5ff41b1559a2  gcc/testsuite/g++.dg/ext/bitfield8.C
  aee0568fa7f966a2398438c01e48d5d8  gcc/testsuite/g++.dg/ext/bitfield9.C
! 1371f46aed56d32c7b6433596ea7eacf  gcc/testsuite/g++.dg/ext/boolcomplex-1.C
  f858ebd95b83f4b214a9ef94ced0beb5  gcc/testsuite/g++.dg/ext/builtin-arith-overflow-1.C
  85ec4b83c9e5b2bc81e40e73aa3f129b  gcc/testsuite/g++.dg/ext/builtin-arith-overflow-2.C
  fff9b32833bf9b9b7bbcc10ac630a0d9  gcc/testsuite/g++.dg/ext/builtin-bswap1.C
  cb1f5787f134f3ea0a60b047b2e5da42  gcc/testsuite/g++.dg/ext/builtin-clear-padding-1.C
  e365f8ad6640a0436ca0135ba83acfe3  gcc/testsuite/g++.dg/ext/builtin-convertvector-1.C
+ 2c901803d894dc7b4891ab1564d0f505  gcc/testsuite/g++.dg/ext/builtin-dynamic-object-size1.C
+ 361742fc6ad7fab43786bb8676128e52  gcc/testsuite/g++.dg/ext/builtin-dynamic-object-size2.C
  85ee2bb51775678716017f28fed495b0  gcc/testsuite/g++.dg/ext/builtin-has-attribute.C
  282c952c379da688cac62d8eceee8d16  gcc/testsuite/g++.dg/ext/builtin-has-attribute2.C
  28c9dbe7fd0321641cd617b67234b425  gcc/testsuite/g++.dg/ext/builtin-line1.C
*************** dc55e7eba1b2185bc5a3bc7222592855  gcc/te
*** 17588,17593 ****
--- 18212,18220 ----
  681316b793aa237fc32be0fdfa11fd84  gcc/testsuite/g++.dg/ext/builtin-offsetof2.C
  03868b51a83cebe5d5cb047444c07075  gcc/testsuite/g++.dg/ext/builtin-offsetof3.C
  6dd1a0154e492bdda77cc9611fe7f88a  gcc/testsuite/g++.dg/ext/builtin-offsetof4.C
+ 90c76b7602f9d89b58c1fef8b457695e  gcc/testsuite/g++.dg/ext/builtin-shufflevector-1.C
+ af019eee15e37fe7fad2b4c7a1a60836  gcc/testsuite/g++.dg/ext/builtin-shufflevector-2.C
+ 6fe972cece2d8f6c59ec8928b18ac781  gcc/testsuite/g++.dg/ext/builtin-shufflevector-3.C
  2688425f4bb09561395ab602acbbe5c1  gcc/testsuite/g++.dg/ext/builtin1.C
  913f9cc9acadced31bfe1ff51190752e  gcc/testsuite/g++.dg/ext/builtin10.C
  0159469d5f1eba2e6013c4c9e15f33ea  gcc/testsuite/g++.dg/ext/builtin11.C
*************** fc9e1cc0855f665bacefa1b241de30ef  gcc/te
*** 17647,17652 ****
--- 18274,18280 ----
  a0c742e6de13ed3078a1cafe0cfbeb58  gcc/testsuite/g++.dg/ext/cleanup-9.C
  c710ca5bf9dfd62c6681f4709fc4d90a  gcc/testsuite/g++.dg/ext/cleanup-dtor.C
  15f53dad7ebd6c04a3f9232631c7a032  gcc/testsuite/g++.dg/ext/complex1.C
+ cae7130650411ec19351e5b37b31f71a  gcc/testsuite/g++.dg/ext/complex10.C
  756c2a4b372550f3325f3e64e36de6a3  gcc/testsuite/g++.dg/ext/complex2.C
  fc4c3dfc15df590705add4def1833513  gcc/testsuite/g++.dg/ext/complex3.C
  35b7aa6c0d6fc7e40536c9546a810234  gcc/testsuite/g++.dg/ext/complex4.C
*************** b1566206f932f28f1735fbaf347ef172  gcc/te
*** 17688,17693 ****
--- 18316,18322 ----
  99a62b29bb81ca6e787650e40495cb03  gcc/testsuite/g++.dg/ext/constexpr-vla5.C
  10abc828e1142ff735666c5c8f9d280f  gcc/testsuite/g++.dg/ext/construct1.C
  356f009d32e7c4d124b9aff9f08aa85b  gcc/testsuite/g++.dg/ext/conv1.C
+ 3bb50ee395de79dadc26789478a32775  gcc/testsuite/g++.dg/ext/conv2.C
  23a3636722151d503a22f1be497277f0  gcc/testsuite/g++.dg/ext/deprecate-1.C
  d7e31c37139238d965ce29bfb25cd3ce  gcc/testsuite/g++.dg/ext/deprecate-2.C
  739dd1176941bfc4e49f4d7f144da1d3  gcc/testsuite/g++.dg/ext/desig1.C
*************** c0dc41d4a72302e0ac9ef29725c83d30  gcc/te
*** 17736,17742 ****
  dd7550889cf0d41c9400551794f8692d  gcc/testsuite/g++.dg/ext/flexary10.C
  0b124f63dabdd2f90b8c042c8a233bf5  gcc/testsuite/g++.dg/ext/flexary11.C
  6a5488720de549743f03ad256dcef6d0  gcc/testsuite/g++.dg/ext/flexary12.C
! 0c84425f353587c77748ab0c61b52806  gcc/testsuite/g++.dg/ext/flexary13.C
  2ea7dcbe16574519f66a2d3f21059b8d  gcc/testsuite/g++.dg/ext/flexary14.C
  05fe822b180be902095b4ddaaa5dfc5e  gcc/testsuite/g++.dg/ext/flexary15.C
  210a2b48daeaa3ac9f1e524b6ea66a8c  gcc/testsuite/g++.dg/ext/flexary16.C
--- 18365,18371 ----
  dd7550889cf0d41c9400551794f8692d  gcc/testsuite/g++.dg/ext/flexary10.C
  0b124f63dabdd2f90b8c042c8a233bf5  gcc/testsuite/g++.dg/ext/flexary11.C
  6a5488720de549743f03ad256dcef6d0  gcc/testsuite/g++.dg/ext/flexary12.C
! cf37bcc8d91bd2f17724afd65572f20f  gcc/testsuite/g++.dg/ext/flexary13.C
  2ea7dcbe16574519f66a2d3f21059b8d  gcc/testsuite/g++.dg/ext/flexary14.C
  05fe822b180be902095b4ddaaa5dfc5e  gcc/testsuite/g++.dg/ext/flexary15.C
  210a2b48daeaa3ac9f1e524b6ea66a8c  gcc/testsuite/g++.dg/ext/flexary16.C
*************** c1e635c954030e7a49c5a15d469f0933  gcc/te
*** 17761,17767 ****
  b2c60991d5b6f21b7202a6d5a7c81412  gcc/testsuite/g++.dg/ext/flexary34.C
  17026c219335daa904b63aabf2ba8120  gcc/testsuite/g++.dg/ext/flexary35.C
  da96fc262f063d29280b10e42245318e  gcc/testsuite/g++.dg/ext/flexary36.C
! af99e27a41b2fdd9e20db6d7755a990c  gcc/testsuite/g++.dg/ext/flexary37.C
  bdc1e53895229e84f994524314021292  gcc/testsuite/g++.dg/ext/flexary38.C
  e3abdb563edb7ccc89af09138c07030d  gcc/testsuite/g++.dg/ext/flexary39.C
  7c5aa9e0bd6655b7c3b04f320d67e736  gcc/testsuite/g++.dg/ext/flexary4.C
--- 18390,18396 ----
  b2c60991d5b6f21b7202a6d5a7c81412  gcc/testsuite/g++.dg/ext/flexary34.C
  17026c219335daa904b63aabf2ba8120  gcc/testsuite/g++.dg/ext/flexary35.C
  da96fc262f063d29280b10e42245318e  gcc/testsuite/g++.dg/ext/flexary36.C
! 85a83d39e1773a504a4c9ba024b9a6b9  gcc/testsuite/g++.dg/ext/flexary37.C
  bdc1e53895229e84f994524314021292  gcc/testsuite/g++.dg/ext/flexary38.C
  e3abdb563edb7ccc89af09138c07030d  gcc/testsuite/g++.dg/ext/flexary39.C
  7c5aa9e0bd6655b7c3b04f320d67e736  gcc/testsuite/g++.dg/ext/flexary4.C
*************** b579998c84a7b6c9374dbdc81f28e45a  gcc/te
*** 17855,17867 ****
  76eb31665e6c2034d39a3a88d38ad3b1  gcc/testsuite/g++.dg/ext/is_constructible3.C
  ed04365b57dec8b58125996aefe86234  gcc/testsuite/g++.dg/ext/is_constructible4.C
  dc3385dfd74c1bf2c03d4da78571f637  gcc/testsuite/g++.dg/ext/is_constructible5.C
  deb5d60ce9955a69d116b30edd2cf933  gcc/testsuite/g++.dg/ext/is_empty.C
  51590a59aaf8715b9fe4a7ae06414cb8  gcc/testsuite/g++.dg/ext/is_empty2.C
  03f82ac5f5b864878fa0ffa4383fa338  gcc/testsuite/g++.dg/ext/is_enum.C
  37398fff65ce2d16df6f0cb340b97987  gcc/testsuite/g++.dg/ext/is_final.C
  d97310b12ece2c21881785f78f44e64a  gcc/testsuite/g++.dg/ext/is_literal_type1.C
  cce82a97f2d80557fc2ee719db6afda2  gcc/testsuite/g++.dg/ext/is_literal_type2.C
! c2a9f4dd52c4575b0a2274166a418bd4  gcc/testsuite/g++.dg/ext/is_literal_type3.C
  e67120ecbad2182a8b5968b32fa2b9b2  gcc/testsuite/g++.dg/ext/is_nothrow_constructible1.C
  f21216a45d73afa0f45a28cdfc72ee5e  gcc/testsuite/g++.dg/ext/is_nothrow_constructible2.C
  87907ea2536e2aec35a04030fc8592ce  gcc/testsuite/g++.dg/ext/is_nothrow_constructible3.C
--- 18484,18498 ----
  76eb31665e6c2034d39a3a88d38ad3b1  gcc/testsuite/g++.dg/ext/is_constructible3.C
  ed04365b57dec8b58125996aefe86234  gcc/testsuite/g++.dg/ext/is_constructible4.C
  dc3385dfd74c1bf2c03d4da78571f637  gcc/testsuite/g++.dg/ext/is_constructible5.C
+ 9553e2b6c2e80320fe1dbc53bb218083  gcc/testsuite/g++.dg/ext/is_constructible6.C
  deb5d60ce9955a69d116b30edd2cf933  gcc/testsuite/g++.dg/ext/is_empty.C
  51590a59aaf8715b9fe4a7ae06414cb8  gcc/testsuite/g++.dg/ext/is_empty2.C
  03f82ac5f5b864878fa0ffa4383fa338  gcc/testsuite/g++.dg/ext/is_enum.C
+ 9c4168f06e4b4e0721a2821a1bdd02c0  gcc/testsuite/g++.dg/ext/is_enum2.C
  37398fff65ce2d16df6f0cb340b97987  gcc/testsuite/g++.dg/ext/is_final.C
  d97310b12ece2c21881785f78f44e64a  gcc/testsuite/g++.dg/ext/is_literal_type1.C
  cce82a97f2d80557fc2ee719db6afda2  gcc/testsuite/g++.dg/ext/is_literal_type2.C
! 70b8167d4c887f159d75bd15861c519b  gcc/testsuite/g++.dg/ext/is_literal_type3.C
  e67120ecbad2182a8b5968b32fa2b9b2  gcc/testsuite/g++.dg/ext/is_nothrow_constructible1.C
  f21216a45d73afa0f45a28cdfc72ee5e  gcc/testsuite/g++.dg/ext/is_nothrow_constructible2.C
  87907ea2536e2aec35a04030fc8592ce  gcc/testsuite/g++.dg/ext/is_nothrow_constructible3.C
*************** c8b5af558a67cf874bb7bd69c49e93fb  gcc/te
*** 17883,17889 ****
  76b226bf6ae177c81d4a2cf611add294  gcc/testsuite/g++.dg/ext/is_trivially_constructible4.C
  d78a2d4cf0d25d5c41563a855f2655c8  gcc/testsuite/g++.dg/ext/is_trivially_constructible5.C
  274ba6a4204132602ce81bb35c3ad2c9  gcc/testsuite/g++.dg/ext/is_trivially_constructible6.C
! 374c8d748d6f3a2ae7c4dc04efb332d4  gcc/testsuite/g++.dg/ext/is_trivially_constructible7.C
  4595fa7ec3da0916bc04836cb7e0b080  gcc/testsuite/g++.dg/ext/is_trivially_copyable.C
  f68f695366fe576aaf12aeac3127a68d  gcc/testsuite/g++.dg/ext/is_union.C
  db0b295df95be25a97d67c002c45679e  gcc/testsuite/g++.dg/ext/ivdep-1.C
--- 18514,18520 ----
  76b226bf6ae177c81d4a2cf611add294  gcc/testsuite/g++.dg/ext/is_trivially_constructible4.C
  d78a2d4cf0d25d5c41563a855f2655c8  gcc/testsuite/g++.dg/ext/is_trivially_constructible5.C
  274ba6a4204132602ce81bb35c3ad2c9  gcc/testsuite/g++.dg/ext/is_trivially_constructible6.C
! c3525831665d7cbb0d4199640426a8c0  gcc/testsuite/g++.dg/ext/is_trivially_constructible7.C
  4595fa7ec3da0916bc04836cb7e0b080  gcc/testsuite/g++.dg/ext/is_trivially_copyable.C
  f68f695366fe576aaf12aeac3127a68d  gcc/testsuite/g++.dg/ext/is_union.C
  db0b295df95be25a97d67c002c45679e  gcc/testsuite/g++.dg/ext/ivdep-1.C
*************** cac7810767ae23faa6823a798e9c3cea  gcc/te
*** 18031,18037 ****
  a9d136cfb86815cbf4d2e46089c90ce0  gcc/testsuite/g++.dg/ext/typeof8.C
  d7e6d10c23ed31b44c2e6c3268ab2b30  gcc/testsuite/g++.dg/ext/typeof9.C
  365e2c3a8b25788d819bb132cd50c108  gcc/testsuite/g++.dg/ext/unary_trait_incomplete.C
- ca736ec11bb72d52657ce5c352fa4126  gcc/testsuite/g++.dg/ext/undef-bool-1.C
  b56af9a8974b21c26c4d8df3e75c33dd  gcc/testsuite/g++.dg/ext/underlying_type1.C
  999bb6333438249f93af4d0c7b177d10  gcc/testsuite/g++.dg/ext/underlying_type10.C
  32d08b925dba9e7ca38d9ec9643c84fa  gcc/testsuite/g++.dg/ext/underlying_type11.C
--- 18662,18667 ----
*************** e3920251c1881f799695cd65335b3cac  gcc/te
*** 18047,18060 ****
  265da9fd5c8f508dc7188b306541554d  gcc/testsuite/g++.dg/ext/unroll-1.C
  a7fce0dd60f863364affd6e56b7f245e  gcc/testsuite/g++.dg/ext/unroll-2.C
  285baa853f6386189859dff27a9a3327  gcc/testsuite/g++.dg/ext/unroll-3.C
  28679c5e259c2a169fa3381ab32688b9  gcc/testsuite/g++.dg/ext/uow-1.C
  56fb8e2b89ccd1554be150dc21820262  gcc/testsuite/g++.dg/ext/uow-2.C
  4a9bbd8b307258097b08718cb2af1df3  gcc/testsuite/g++.dg/ext/uow-3.C
  ed785b06528c5ed0fec073ec7ec447d2  gcc/testsuite/g++.dg/ext/uow-4.C
  1d3d5107cdf0f451c7645a2733e24901  gcc/testsuite/g++.dg/ext/utf-array-short-wchar.C
  029ac868cafa47d257b99808f0dd1707  gcc/testsuite/g++.dg/ext/utf-array.C
! 8489bdb85e5446c128b69c25e8731e24  gcc/testsuite/g++.dg/ext/utf-badconcat.C
! 4d3e1e2d76aabbc270bb762c8b9aab48  gcc/testsuite/g++.dg/ext/utf-badconcat2.C
  dc07217be8352750ef7e90618d9a0325  gcc/testsuite/g++.dg/ext/utf-cvt-char8_t.C
  bf8ab1fbee9372adebdfaa9a7f4b1688  gcc/testsuite/g++.dg/ext/utf-cvt.C
  bb128ce7c4aa022f8046c469bbe3faa3  gcc/testsuite/g++.dg/ext/utf-cxx0x.C
--- 18677,18691 ----
  265da9fd5c8f508dc7188b306541554d  gcc/testsuite/g++.dg/ext/unroll-1.C
  a7fce0dd60f863364affd6e56b7f245e  gcc/testsuite/g++.dg/ext/unroll-2.C
  285baa853f6386189859dff27a9a3327  gcc/testsuite/g++.dg/ext/unroll-3.C
+ cdf5946e18d62c848aa41c2fbcdc39da  gcc/testsuite/g++.dg/ext/unsigned-typedef1.C
  28679c5e259c2a169fa3381ab32688b9  gcc/testsuite/g++.dg/ext/uow-1.C
  56fb8e2b89ccd1554be150dc21820262  gcc/testsuite/g++.dg/ext/uow-2.C
  4a9bbd8b307258097b08718cb2af1df3  gcc/testsuite/g++.dg/ext/uow-3.C
  ed785b06528c5ed0fec073ec7ec447d2  gcc/testsuite/g++.dg/ext/uow-4.C
  1d3d5107cdf0f451c7645a2733e24901  gcc/testsuite/g++.dg/ext/utf-array-short-wchar.C
  029ac868cafa47d257b99808f0dd1707  gcc/testsuite/g++.dg/ext/utf-array.C
! 8538efb68a7bec811a141ca3c45041cc  gcc/testsuite/g++.dg/ext/utf-badconcat.C
! 4fd8a1c37385e05f2e7d4985f7db1abe  gcc/testsuite/g++.dg/ext/utf-badconcat2.C
  dc07217be8352750ef7e90618d9a0325  gcc/testsuite/g++.dg/ext/utf-cvt-char8_t.C
  bf8ab1fbee9372adebdfaa9a7f4b1688  gcc/testsuite/g++.dg/ext/utf-cvt.C
  bb128ce7c4aa022f8046c469bbe3faa3  gcc/testsuite/g++.dg/ext/utf-cxx0x.C
*************** ff1db1bf54183447b20849ac3c27f4ab  gcc/te
*** 18124,18129 ****
--- 18755,18761 ----
  72f43e40f9934a61ef48ff977ec8f942  gcc/testsuite/g++.dg/ext/vector39.C
  1d6b45dce331a414b31b64c5104ab383  gcc/testsuite/g++.dg/ext/vector4.C
  7527a84a941056775919388a2f30abe5  gcc/testsuite/g++.dg/ext/vector40.C
+ f9d2ebdedaca8d41e448e7a698122e11  gcc/testsuite/g++.dg/ext/vector41.C
  3231264b4b96091ab8a2351e76707e8d  gcc/testsuite/g++.dg/ext/vector5.C
  f630b6880676201345d2e753913e064c  gcc/testsuite/g++.dg/ext/vector6.C
  499980717843a208168505a264f263e3  gcc/testsuite/g++.dg/ext/vector7.C
*************** f898972c4719f3058c25c921c50c6487  gcc/te
*** 18147,18153 ****
  39853e4e9f2fbdad2560ca7d53bb3626  gcc/testsuite/g++.dg/ext/visibility/class1.C
  9f6874b06aea35e844ab40f0f69550c5  gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden-2.C
  5c8d17e33f840c89b8d56a22d680b9d1  gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden-3.C
! bc5e3935f9fd3f5f54ca89ee581b2c03  gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden-4.C
  3b9b3a714c4150e9b400e976deff30a3  gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden-5.C
  18d8a1310b12aec50bcac70a4583e44d  gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden.C
  05621e547003978809101724b30f453e  gcc/testsuite/g++.dg/ext/visibility/fvisibility-override1.C
--- 18779,18785 ----
  39853e4e9f2fbdad2560ca7d53bb3626  gcc/testsuite/g++.dg/ext/visibility/class1.C
  9f6874b06aea35e844ab40f0f69550c5  gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden-2.C
  5c8d17e33f840c89b8d56a22d680b9d1  gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden-3.C
! 48096f509d784bbd5bdab5cc25bb96e3  gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden-4.C
  3b9b3a714c4150e9b400e976deff30a3  gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden-5.C
  18d8a1310b12aec50bcac70a4583e44d  gcc/testsuite/g++.dg/ext/visibility/fvisibility-inlines-hidden.C
  05621e547003978809101724b30f453e  gcc/testsuite/g++.dg/ext/visibility/fvisibility-override1.C
*************** ba11348446ec391f21e6b8e4d8f190a9  gcc/te
*** 18182,18188 ****
  fb3ad5f97cd55ecbfba7cb114a0aeaf1  gcc/testsuite/g++.dg/ext/visibility/template3.C
  f5ac27fd889272cadd85a3d10b84b964  gcc/testsuite/g++.dg/ext/visibility/template4.C
  00cfc060a9c05e18b0256ee03319fad5  gcc/testsuite/g++.dg/ext/visibility/template6.C
! b9c473338c01a3d603ac21bdb245de64  gcc/testsuite/g++.dg/ext/visibility/template7.C
  db72d12d4b84a371d752b985fdf77e3a  gcc/testsuite/g++.dg/ext/visibility/template8.C
  926acd646b31535dbeb0478bc820dab7  gcc/testsuite/g++.dg/ext/visibility/template9.C
  90b35e4187c59e0ec19eadda1bd4254b  gcc/testsuite/g++.dg/ext/visibility/typeinfo1.C
--- 18814,18820 ----
  fb3ad5f97cd55ecbfba7cb114a0aeaf1  gcc/testsuite/g++.dg/ext/visibility/template3.C
  f5ac27fd889272cadd85a3d10b84b964  gcc/testsuite/g++.dg/ext/visibility/template4.C
  00cfc060a9c05e18b0256ee03319fad5  gcc/testsuite/g++.dg/ext/visibility/template6.C
! fbff31159f01b1ce24c6bbe67b7fde48  gcc/testsuite/g++.dg/ext/visibility/template7.C
  db72d12d4b84a371d752b985fdf77e3a  gcc/testsuite/g++.dg/ext/visibility/template8.C
  926acd646b31535dbeb0478bc820dab7  gcc/testsuite/g++.dg/ext/visibility/template9.C
  90b35e4187c59e0ec19eadda1bd4254b  gcc/testsuite/g++.dg/ext/visibility/typeinfo1.C
*************** f964b5b8563862b3b5de4077cc1fb8e4  gcc/te
*** 18220,18226 ****
  83bf1823c9e81467f20ea26043a713e9  gcc/testsuite/g++.dg/ext/vla2.C
  d35e3d499f9c61083c8cc1857f8e1c17  gcc/testsuite/g++.dg/ext/vla20.C
  9b6080415288de72842bd85208414ade  gcc/testsuite/g++.dg/ext/vla21.C
! a74556a89523d9e92d56253803605cd3  gcc/testsuite/g++.dg/ext/vla22.C
  094facd4da54e59d052fc6a3d9479d29  gcc/testsuite/g++.dg/ext/vla23.C
  320764967cdf14eb97d11fff57ae0db4  gcc/testsuite/g++.dg/ext/vla24.C
  6aaa10f349349a2417e726c48cb7e61e  gcc/testsuite/g++.dg/ext/vla3.C
--- 18852,18858 ----
  83bf1823c9e81467f20ea26043a713e9  gcc/testsuite/g++.dg/ext/vla2.C
  d35e3d499f9c61083c8cc1857f8e1c17  gcc/testsuite/g++.dg/ext/vla20.C
  9b6080415288de72842bd85208414ade  gcc/testsuite/g++.dg/ext/vla21.C
! 0ba2afbdaf6e73dfcd5ff164e2020f97  gcc/testsuite/g++.dg/ext/vla22.C
  094facd4da54e59d052fc6a3d9479d29  gcc/testsuite/g++.dg/ext/vla23.C
  320764967cdf14eb97d11fff57ae0db4  gcc/testsuite/g++.dg/ext/vla24.C
  6aaa10f349349a2417e726c48cb7e61e  gcc/testsuite/g++.dg/ext/vla3.C
*************** a90a1ccb44e24f11ce27ee962f1c9c2d  gcc/te
*** 18243,18255 ****
  3463cd7092fa60532a8c0f93b76eef64  gcc/testsuite/g++.dg/gcov/gcov-1.C
  3bb74e0b30131d9ca29c007bfd471494  gcc/testsuite/g++.dg/gcov/gcov-10.C
  22fc6504c62d44c9b94fe8d23a3e383f  gcc/testsuite/g++.dg/gcov/gcov-11.C
! 8db03c21164b6fdca1cc2722dde24a47  gcc/testsuite/g++.dg/gcov/gcov-12.C
  7a1698611acb707485b8f5e55a748337  gcc/testsuite/g++.dg/gcov/gcov-13.C
  be0288522b31602de2c7b3eeb2fb4b18  gcc/testsuite/g++.dg/gcov/gcov-14.C
  56dbe86604b8680b3d2c3f63fd217d0a  gcc/testsuite/g++.dg/gcov/gcov-15.C
  1a43a673011a87c94649d32b935958ea  gcc/testsuite/g++.dg/gcov/gcov-16.C
  e805ae6edf39a4a965f4aeb5e98c1ab7  gcc/testsuite/g++.dg/gcov/gcov-17.C
! 089da33c19e685cf43a3b1b99fa8cee6  gcc/testsuite/g++.dg/gcov/gcov-2.C
  0e241a16c3faf2f0c387bd2978d2b824  gcc/testsuite/g++.dg/gcov/gcov-3.C
  2c83bff9a3f14aa6fc5d7755bf82c9b6  gcc/testsuite/g++.dg/gcov/gcov-3.h
  a7c093e32d8e0cc08e02c3253748979c  gcc/testsuite/g++.dg/gcov/gcov-4.C
--- 18875,18887 ----
  3463cd7092fa60532a8c0f93b76eef64  gcc/testsuite/g++.dg/gcov/gcov-1.C
  3bb74e0b30131d9ca29c007bfd471494  gcc/testsuite/g++.dg/gcov/gcov-10.C
  22fc6504c62d44c9b94fe8d23a3e383f  gcc/testsuite/g++.dg/gcov/gcov-11.C
! c95c4e2bd4e437ad3ff1db17dc98ed8a  gcc/testsuite/g++.dg/gcov/gcov-12.C
  7a1698611acb707485b8f5e55a748337  gcc/testsuite/g++.dg/gcov/gcov-13.C
  be0288522b31602de2c7b3eeb2fb4b18  gcc/testsuite/g++.dg/gcov/gcov-14.C
  56dbe86604b8680b3d2c3f63fd217d0a  gcc/testsuite/g++.dg/gcov/gcov-15.C
  1a43a673011a87c94649d32b935958ea  gcc/testsuite/g++.dg/gcov/gcov-16.C
  e805ae6edf39a4a965f4aeb5e98c1ab7  gcc/testsuite/g++.dg/gcov/gcov-17.C
! 76d4b63734995c717c5a329c312c8803  gcc/testsuite/g++.dg/gcov/gcov-2.C
  0e241a16c3faf2f0c387bd2978d2b824  gcc/testsuite/g++.dg/gcov/gcov-3.C
  2c83bff9a3f14aa6fc5d7755bf82c9b6  gcc/testsuite/g++.dg/gcov/gcov-3.h
  a7c093e32d8e0cc08e02c3253748979c  gcc/testsuite/g++.dg/gcov/gcov-4.C
*************** a7c093e32d8e0cc08e02c3253748979c  gcc/te
*** 18259,18271 ****
  35c5d8591ad30e9b50844567554d9973  gcc/testsuite/g++.dg/gcov/gcov-8.C
  1daf1c411209223b51591e3ac9090bfb  gcc/testsuite/g++.dg/gcov/gcov-dump-1.C
  7def4ed5b129018a31fbca4ad8fd6300  gcc/testsuite/g++.dg/gcov/gcov-dump-2.C
! 7c98164def1e3b4af2573a0cde4a581e  gcc/testsuite/g++.dg/gcov/gcov-threads-1.C
! 03ad48bbeb7dd85884131d311266dac2  gcc/testsuite/g++.dg/gcov/gcov.exp
! f1179ddefb9d0f823abc3eb9c07a73a1  gcc/testsuite/g++.dg/gcov/gcov.py
  28167c93ffea74cb328ff3cd087d643a  gcc/testsuite/g++.dg/gcov/gcovpart-12b.C
  4486858dfdc63ab6e7f3c42c2b6b11ed  gcc/testsuite/g++.dg/gcov/loop.C
! 7d9eee67c3f8041f2ddace387e1df1c2  gcc/testsuite/g++.dg/gcov/pr16855-priority.C
! 0e2959a120e9dabe4dc820b1236a1579  gcc/testsuite/g++.dg/gcov/pr16855.C
  62015e4e627cd00c71bb0efd21af8d60  gcc/testsuite/g++.dg/gcov/pr84548.C
  c8c006792fd429653df69e08d74da961  gcc/testsuite/g++.dg/gcov/pr86109.C
  3c05a5a4b4007f9635bf800d5335487b  gcc/testsuite/g++.dg/gcov/pr88045.C
--- 18891,18903 ----
  35c5d8591ad30e9b50844567554d9973  gcc/testsuite/g++.dg/gcov/gcov-8.C
  1daf1c411209223b51591e3ac9090bfb  gcc/testsuite/g++.dg/gcov/gcov-dump-1.C
  7def4ed5b129018a31fbca4ad8fd6300  gcc/testsuite/g++.dg/gcov/gcov-dump-2.C
! 10bbabd8392ab7ee5799bc6a14018686  gcc/testsuite/g++.dg/gcov/gcov-threads-1.C
! 534f2451d78aee913c70b855701cd584  gcc/testsuite/g++.dg/gcov/gcov.exp
! 6a2ed5ca795d47c333efae7c155c43b1  gcc/testsuite/g++.dg/gcov/gcov.py
  28167c93ffea74cb328ff3cd087d643a  gcc/testsuite/g++.dg/gcov/gcovpart-12b.C
  4486858dfdc63ab6e7f3c42c2b6b11ed  gcc/testsuite/g++.dg/gcov/loop.C
! 4b7602a5329796aad4278cddb665ec25  gcc/testsuite/g++.dg/gcov/pr16855-priority.C
! d7a0158c08e0cb831164f3f727141d1c  gcc/testsuite/g++.dg/gcov/pr16855.C
  62015e4e627cd00c71bb0efd21af8d60  gcc/testsuite/g++.dg/gcov/pr84548.C
  c8c006792fd429653df69e08d74da961  gcc/testsuite/g++.dg/gcov/pr86109.C
  3c05a5a4b4007f9635bf800d5335487b  gcc/testsuite/g++.dg/gcov/pr88045.C
*************** a967f09270d7b705a4f98a125b76c7a6  gcc/te
*** 18276,18282 ****
  7ad2f2c71c908fc0a03c6dc6be0bbd06  gcc/testsuite/g++.dg/gcov/ternary.C
  13fff407256fdeadcb3617a113957a17  gcc/testsuite/g++.dg/gcov/test-gcov-17.py
  756bdf5e4081168579b0347da701c42f  gcc/testsuite/g++.dg/gcov/test-pr98273.py
! a816b42138c64e009ad7f88f876b3803  gcc/testsuite/g++.dg/goacc-gomp/goacc-gomp.exp
  57aec36453f242d12bf5515cb425f04e  gcc/testsuite/g++.dg/goacc/cache-1.C
  1f2e4a88f87fa010e31b6c237e00aea7  gcc/testsuite/g++.dg/goacc/cache-2.C
  7f9f08a09fc949be2045ab00795bc184  gcc/testsuite/g++.dg/goacc/cache-3-1.C
--- 18908,18914 ----
  7ad2f2c71c908fc0a03c6dc6be0bbd06  gcc/testsuite/g++.dg/gcov/ternary.C
  13fff407256fdeadcb3617a113957a17  gcc/testsuite/g++.dg/gcov/test-gcov-17.py
  756bdf5e4081168579b0347da701c42f  gcc/testsuite/g++.dg/gcov/test-pr98273.py
! d1cbb5a66b4bfa8ec114cd91d6c746af  gcc/testsuite/g++.dg/goacc-gomp/goacc-gomp.exp
  57aec36453f242d12bf5515cb425f04e  gcc/testsuite/g++.dg/goacc/cache-1.C
  1f2e4a88f87fa010e31b6c237e00aea7  gcc/testsuite/g++.dg/goacc/cache-2.C
  7f9f08a09fc949be2045ab00795bc184  gcc/testsuite/g++.dg/goacc/cache-3-1.C
*************** d4df15d043d8968539a88c1beeda4e7e  gcc/te
*** 18287,18315 ****
  ab5a2e3886c2a5718ee179f9c9a446ce  gcc/testsuite/g++.dg/goacc/declare-pr94120.C
  2b70bd2b15144e92ee104c07a8e2bc13  gcc/testsuite/g++.dg/goacc/deviceptr-1.C
  50fb26ed859d201ce4b714967a5c4066  gcc/testsuite/g++.dg/goacc/firstprivate-mappings-1.C
! ada0b64fd084872e20f55ba767d06b29  gcc/testsuite/g++.dg/goacc/goacc.exp
! 4fb843954b38655551a396240e94dda0  gcc/testsuite/g++.dg/goacc/mdc.C
  d597d4e7ee031afa50fadecd64ddac77  gcc/testsuite/g++.dg/goacc/pr101759.C
  e2e937b81f60d45e6f0fbe6cdc7207e4  gcc/testsuite/g++.dg/goacc/reference.C
  18b27d379a2a779f530009ced1114ae3  gcc/testsuite/g++.dg/goacc/routine-1.C
  9be1fd00ad32c627f4396d3b564fad56  gcc/testsuite/g++.dg/goacc/routine-2.C
! af26fce137579d8a882aa73c2269b690  gcc/testsuite/g++.dg/goacc/template.C
  63c7a5fb86ca9e170a766952f0dda797  gcc/testsuite/g++.dg/goacc/tile-1.C
  e741249479c6c7025b48c7e503fcff98  gcc/testsuite/g++.dg/gomp/allocate-1.C
  49202612ed526412e25f866f82bd0573  gcc/testsuite/g++.dg/gomp/allocate-2.C
  0c676d0276d06d9e6ec17a845969619a  gcc/testsuite/g++.dg/gomp/allocate-3.C
  0f8c6d06e1f378355b0404338dbd037b  gcc/testsuite/g++.dg/gomp/atomic-14.C
  4c00b09b19e9a90c9f90d361477d4f07  gcc/testsuite/g++.dg/gomp/atomic-17.C
! 1ca861261dd5cdd3c5786a09fbd6c14a  gcc/testsuite/g++.dg/gomp/atomic-18.C
  606225c1b31c1bfdda9ae0d47152092b  gcc/testsuite/g++.dg/gomp/atomic-19.C
! cc718339c11b871b3e6364a1a4412ffd  gcc/testsuite/g++.dg/gomp/atomic-5.C
  64f007dc7d84cb3393b19e626e175a25  gcc/testsuite/g++.dg/gomp/atomic-6.C
  28210efb6de9f161ddfddd705210bc01  gcc/testsuite/g++.dg/gomp/barrier-1.C
! a410aa2b8862c24cecd923f5b96ea983  gcc/testsuite/g++.dg/gomp/barrier-2.C
  418aec9a82d0d6ecba7659cc2cbb6dfa  gcc/testsuite/g++.dg/gomp/block-0.C
  b68b8e44bec144fb908749a6399485dc  gcc/testsuite/g++.dg/gomp/block-1.C
  83bac61e5c1132bd7687cebc5785ce08  gcc/testsuite/g++.dg/gomp/block-10.C
! 64de75e0ae05fb493c94bd4478f76721  gcc/testsuite/g++.dg/gomp/block-11.C
  dd21a5a260cbe7e0fc9b94738fea89c9  gcc/testsuite/g++.dg/gomp/block-2.C
  7410e73e91a3af1eef7217429e3f1e0d  gcc/testsuite/g++.dg/gomp/block-3.C
  09c50aad0519d6f7a79e6985abb70a88  gcc/testsuite/g++.dg/gomp/block-4.C
--- 18919,18963 ----
  ab5a2e3886c2a5718ee179f9c9a446ce  gcc/testsuite/g++.dg/goacc/declare-pr94120.C
  2b70bd2b15144e92ee104c07a8e2bc13  gcc/testsuite/g++.dg/goacc/deviceptr-1.C
  50fb26ed859d201ce4b714967a5c4066  gcc/testsuite/g++.dg/goacc/firstprivate-mappings-1.C
! 7f228db5940b4c0b4137561d5c316a67  gcc/testsuite/g++.dg/goacc/goacc.exp
! dca2050aa56eecbf14b017115feac6a7  gcc/testsuite/g++.dg/goacc/mdc.C
  d597d4e7ee031afa50fadecd64ddac77  gcc/testsuite/g++.dg/goacc/pr101759.C
  e2e937b81f60d45e6f0fbe6cdc7207e4  gcc/testsuite/g++.dg/goacc/reference.C
  18b27d379a2a779f530009ced1114ae3  gcc/testsuite/g++.dg/goacc/routine-1.C
  9be1fd00ad32c627f4396d3b564fad56  gcc/testsuite/g++.dg/goacc/routine-2.C
! 09546a7023f0a91753083cc3cbcd8a3d  gcc/testsuite/g++.dg/goacc/template.C
  63c7a5fb86ca9e170a766952f0dda797  gcc/testsuite/g++.dg/goacc/tile-1.C
  e741249479c6c7025b48c7e503fcff98  gcc/testsuite/g++.dg/gomp/allocate-1.C
  49202612ed526412e25f866f82bd0573  gcc/testsuite/g++.dg/gomp/allocate-2.C
  0c676d0276d06d9e6ec17a845969619a  gcc/testsuite/g++.dg/gomp/allocate-3.C
+ 88f1b88f618e371fa510de1faa5e2ba9  gcc/testsuite/g++.dg/gomp/allocate-4.C
  0f8c6d06e1f378355b0404338dbd037b  gcc/testsuite/g++.dg/gomp/atomic-14.C
  4c00b09b19e9a90c9f90d361477d4f07  gcc/testsuite/g++.dg/gomp/atomic-17.C
! 2c0577ea8f9867c9816d031f9b0f6d9a  gcc/testsuite/g++.dg/gomp/atomic-18.C
  606225c1b31c1bfdda9ae0d47152092b  gcc/testsuite/g++.dg/gomp/atomic-19.C
! b88c4d2eb787d594ae7d4448ee809655  gcc/testsuite/g++.dg/gomp/atomic-20.C
! 791fe553aa8c81aef018b426f29f5e89  gcc/testsuite/g++.dg/gomp/atomic-5.C
  64f007dc7d84cb3393b19e626e175a25  gcc/testsuite/g++.dg/gomp/atomic-6.C
+ 11618da00a76ca370f69c7e68fd7d55b  gcc/testsuite/g++.dg/gomp/attrs-1.C
+ c48109a6488b41bbc1725ed104120e2b  gcc/testsuite/g++.dg/gomp/attrs-10.C
+ 6a00cf4cba9075ab202ce5a65ca3aa8b  gcc/testsuite/g++.dg/gomp/attrs-11.C
+ 2f120ea276638046a850ac83bd0ea37a  gcc/testsuite/g++.dg/gomp/attrs-12.C
+ 374abff67695b66d14322ae5a94abae0  gcc/testsuite/g++.dg/gomp/attrs-13.C
+ 0312393ea50f9742543a50b6b4052785  gcc/testsuite/g++.dg/gomp/attrs-14.C
+ 7ddf4a898a65ee85467f4b669b2db473  gcc/testsuite/g++.dg/gomp/attrs-2.C
+ afb240a82f143b0c0fd381b905ad9012  gcc/testsuite/g++.dg/gomp/attrs-3.C
+ f6f7f13d6edea5043634dbe54727d513  gcc/testsuite/g++.dg/gomp/attrs-4.C
+ 87087766f29fa1ed6f5e1834dc53e8e6  gcc/testsuite/g++.dg/gomp/attrs-5.C
+ 768e4f024ce850867145580f3410ade0  gcc/testsuite/g++.dg/gomp/attrs-6.C
+ f41f249db9ee61949e786f1e1854ee77  gcc/testsuite/g++.dg/gomp/attrs-7.C
+ de68616288c62ad9860d6c876e1b7668  gcc/testsuite/g++.dg/gomp/attrs-8.C
+ df455735715efc11aa08a4b1a5799ac4  gcc/testsuite/g++.dg/gomp/attrs-9.C
  28210efb6de9f161ddfddd705210bc01  gcc/testsuite/g++.dg/gomp/barrier-1.C
! 4c453c9ea0f47e5cb5f0c015b01aa7c9  gcc/testsuite/g++.dg/gomp/barrier-2.C
  418aec9a82d0d6ecba7659cc2cbb6dfa  gcc/testsuite/g++.dg/gomp/block-0.C
  b68b8e44bec144fb908749a6399485dc  gcc/testsuite/g++.dg/gomp/block-1.C
  83bac61e5c1132bd7687cebc5785ce08  gcc/testsuite/g++.dg/gomp/block-10.C
! 06bc4bbc09faaebbfe030db4359dba90  gcc/testsuite/g++.dg/gomp/block-11.C
  dd21a5a260cbe7e0fc9b94738fea89c9  gcc/testsuite/g++.dg/gomp/block-2.C
  7410e73e91a3af1eef7217429e3f1e0d  gcc/testsuite/g++.dg/gomp/block-3.C
  09c50aad0519d6f7a79e6985abb70a88  gcc/testsuite/g++.dg/gomp/block-4.C
*************** d10a9dad0712612df3be24ae02ed9f6a  gcc/te
*** 18336,18341 ****
--- 18984,18990 ----
  d66c2d955608b28091f45938dce39989  gcc/testsuite/g++.dg/gomp/declare-simd-5.C
  5a587ac99f134c07ba81955351d61058  gcc/testsuite/g++.dg/gomp/declare-simd-6.C
  cd6bf0619b43f5bc63b2d8c757532754  gcc/testsuite/g++.dg/gomp/declare-simd-7.C
+ 02bf257ed2f303e3b9c8e12dfe76b7e8  gcc/testsuite/g++.dg/gomp/declare-simd-8.C
  634bd3d929883e4c691a682ea0817a3e  gcc/testsuite/g++.dg/gomp/declare-target-1.C
  afbb2c51ce08bb72df769bd10e2948b8  gcc/testsuite/g++.dg/gomp/declare-target-2.C
  00c210712d93b7b86bd0fd979516b3a4  gcc/testsuite/g++.dg/gomp/declare-target-3.C
*************** a3f2e52db25001dd2c0c657370103181  gcc/te
*** 18347,18358 ****
--- 18996,19011 ----
  123fa55359a62c8d9629112336b31c22  gcc/testsuite/g++.dg/gomp/declare-variant-6.C
  dab31b3a40ca29ce009cab53890820ab  gcc/testsuite/g++.dg/gomp/declare-variant-7.C
  f1c961906365e69ec5d85efca251f7e0  gcc/testsuite/g++.dg/gomp/declare-variant-8.C
+ 0ee7395de6f3410cc3e0730f18e4a8f6  gcc/testsuite/g++.dg/gomp/default-1.C
  7051d268375289f1835cdff78728de81  gcc/testsuite/g++.dg/gomp/depend-1.C
  5ed836221748ac8946497bda6d311d53  gcc/testsuite/g++.dg/gomp/depend-2.C
  fb99d6d7d52ead46e97905bf42cf8877  gcc/testsuite/g++.dg/gomp/depend-iterator-1.C
  55e3a09904888da975d3d4b76f18d294  gcc/testsuite/g++.dg/gomp/depend-iterator-2.C
+ e7b69c86d16171732a1c9ef74218d864  gcc/testsuite/g++.dg/gomp/depend-iterator-3.C
  3bb931acb0bb9987aa54258180ee8d8b  gcc/testsuite/g++.dg/gomp/depobj-1.C
  b3a64480fb5bca64c20c44719293a088  gcc/testsuite/g++.dg/gomp/doacross-1.C
+ bed93c8af3078a414d71ee17e30cb559  gcc/testsuite/g++.dg/gomp/doacross-2.C
+ a641b3c27a53d1c10c399e1d07c6aaba  gcc/testsuite/g++.dg/gomp/error-1.C
  e4901d684aa3fbe52403cc2e9ed392dd  gcc/testsuite/g++.dg/gomp/flush-1.C
  ef2c50dfa26076520b9b148afd7e6d6b  gcc/testsuite/g++.dg/gomp/flush-2.C
  c997d28408785fd402deed9c757ec3b2  gcc/testsuite/g++.dg/gomp/for-1.C
*************** b5dd1e3c7e6a1c45e25d9fbbcf82dc0c  gcc/te
*** 18376,18397 ****
  80a82ac0d4faa464e36b67b133df4697  gcc/testsuite/g++.dg/gomp/for-7.C
  d9604d99f8b1a6974afc5a3cab2765b3  gcc/testsuite/g++.dg/gomp/for-8.C
  34eb86e893e0bd796aad8d236b5bc215  gcc/testsuite/g++.dg/gomp/for-9.C
! 51bb99ec40d787387cea7c547cae83bc  gcc/testsuite/g++.dg/gomp/gomp.exp
  eb763d050fd680e1a3302fbda441475d  gcc/testsuite/g++.dg/gomp/lastprivate-1.C
  7f682781cd88149270eb73eb44f419f7  gcc/testsuite/g++.dg/gomp/linear-1.C
  2fe09fbd7df28122d262deb35faa2ae9  gcc/testsuite/g++.dg/gomp/linear-2.C
  b233240aa872c73ae04a12a8d81356a7  gcc/testsuite/g++.dg/gomp/loop-1.C
  c220284cfbbe6d86192d110c5d4bcf7a  gcc/testsuite/g++.dg/gomp/loop-2.C
! af9aa00aecd9c08bb1bacab6e47db24c  gcc/testsuite/g++.dg/gomp/loop-3.C
  84c5a2238f80432c8d0755b414a0d9b8  gcc/testsuite/g++.dg/gomp/loop-4.C
  16c5d24784bf5777212249fa80d7581d  gcc/testsuite/g++.dg/gomp/loop-5.C
  113dea997a32d872d9e4ab19dfaa1722  gcc/testsuite/g++.dg/gomp/loop-6.C
  a4271cf7824f2a837486e7951ee23884  gcc/testsuite/g++.dg/gomp/macro-1.C
  eabb0107af4ef893414bb3cef506ad03  gcc/testsuite/g++.dg/gomp/macro-2.C
  942f8defe03c25bf08f780cf22c0a1e5  gcc/testsuite/g++.dg/gomp/macro-3.C
  9254a2c9545e874172464af7e042681f  gcc/testsuite/g++.dg/gomp/macro-4.C
  2a90373b9280848f40b1036e42fdd914  gcc/testsuite/g++.dg/gomp/map-1.C
  cd955c2057012ba387a6b029e23c0d53  gcc/testsuite/g++.dg/gomp/map-2.C
  9dff449fe2d97c4b3ade07b982e69364  gcc/testsuite/g++.dg/gomp/master-1.C
  c6830eca56ca17885a14ffa21aeb16c4  gcc/testsuite/g++.dg/gomp/master-2.C
  aec913fefeac6132003dfcbe3fd035eb  gcc/testsuite/g++.dg/gomp/master-3.C
--- 19029,19053 ----
  80a82ac0d4faa464e36b67b133df4697  gcc/testsuite/g++.dg/gomp/for-7.C
  d9604d99f8b1a6974afc5a3cab2765b3  gcc/testsuite/g++.dg/gomp/for-8.C
  34eb86e893e0bd796aad8d236b5bc215  gcc/testsuite/g++.dg/gomp/for-9.C
! b4ea000bba7dc0427dbfd8a9089a3721  gcc/testsuite/g++.dg/gomp/gomp.exp
  eb763d050fd680e1a3302fbda441475d  gcc/testsuite/g++.dg/gomp/lastprivate-1.C
  7f682781cd88149270eb73eb44f419f7  gcc/testsuite/g++.dg/gomp/linear-1.C
  2fe09fbd7df28122d262deb35faa2ae9  gcc/testsuite/g++.dg/gomp/linear-2.C
  b233240aa872c73ae04a12a8d81356a7  gcc/testsuite/g++.dg/gomp/loop-1.C
  c220284cfbbe6d86192d110c5d4bcf7a  gcc/testsuite/g++.dg/gomp/loop-2.C
! 85a54900b277e797b5dff30d84b7fdaa  gcc/testsuite/g++.dg/gomp/loop-3.C
  84c5a2238f80432c8d0755b414a0d9b8  gcc/testsuite/g++.dg/gomp/loop-4.C
  16c5d24784bf5777212249fa80d7581d  gcc/testsuite/g++.dg/gomp/loop-5.C
  113dea997a32d872d9e4ab19dfaa1722  gcc/testsuite/g++.dg/gomp/loop-6.C
+ 24e8ebd6a539d2447e4236d5087149a5  gcc/testsuite/g++.dg/gomp/loop-7.C
+ d7abbbc2867aab2afff28c6e0dea6960  gcc/testsuite/g++.dg/gomp/loop-8.C
  a4271cf7824f2a837486e7951ee23884  gcc/testsuite/g++.dg/gomp/macro-1.C
  eabb0107af4ef893414bb3cef506ad03  gcc/testsuite/g++.dg/gomp/macro-2.C
  942f8defe03c25bf08f780cf22c0a1e5  gcc/testsuite/g++.dg/gomp/macro-3.C
  9254a2c9545e874172464af7e042681f  gcc/testsuite/g++.dg/gomp/macro-4.C
  2a90373b9280848f40b1036e42fdd914  gcc/testsuite/g++.dg/gomp/map-1.C
  cd955c2057012ba387a6b029e23c0d53  gcc/testsuite/g++.dg/gomp/map-2.C
+ c0b53dcb8d3f8e31c7445987d35c43e7  gcc/testsuite/g++.dg/gomp/masked-1.C
  9dff449fe2d97c4b3ade07b982e69364  gcc/testsuite/g++.dg/gomp/master-1.C
  c6830eca56ca17885a14ffa21aeb16c4  gcc/testsuite/g++.dg/gomp/master-2.C
  aec913fefeac6132003dfcbe3fd035eb  gcc/testsuite/g++.dg/gomp/master-3.C
*************** fc63cfdc56a33b15fa4d063e5ef655b2  gcc/te
*** 18400,18405 ****
--- 19056,19063 ----
  57b9a2c844df3931aacf1c2702dc3ebe  gcc/testsuite/g++.dg/gomp/member-3.C
  135dd9ca392aa9976b7a20570053aa68  gcc/testsuite/g++.dg/gomp/member-4.C
  40ddfb4cf46a4ea2a28ece501a9d1b2b  gcc/testsuite/g++.dg/gomp/method-1.C
+ d829c2c1f9a522a97ec0370c1f67a993  gcc/testsuite/g++.dg/gomp/num-teams-1.C
+ ebf6d36088516c323fa66747a975021b  gcc/testsuite/g++.dg/gomp/num-teams-2.C
  badbf609721acd5ee04999023c4af494  gcc/testsuite/g++.dg/gomp/openmp-simd-1.C
  2e7e4a5c79eb8fe54062fed88c9a9fa3  gcc/testsuite/g++.dg/gomp/openmp-simd-2.C
  ad5a2c143fabe766d3848eb100ea6c38  gcc/testsuite/g++.dg/gomp/openmp-simd-3.C
*************** d9a1f43ca6ac2a073e22bbbf243f300b  gcc/te
*** 18413,18418 ****
--- 19071,19080 ----
  9950e1331756ada98404843c3491b239  gcc/testsuite/g++.dg/gomp/pr101516.C
  0c11b92a016ab75deb360c1427f9b571  gcc/testsuite/g++.dg/gomp/pr101759.C
  3da3560251942b44a47c6e2c267e97f2  gcc/testsuite/g++.dg/gomp/pr102431.C
+ 96b200ccbaab02df383790a41d4deb4b  gcc/testsuite/g++.dg/gomp/pr103704.C
+ 745b3d4f8032be6841890fdb1bb681a7  gcc/testsuite/g++.dg/gomp/pr103851.C
+ 6fd504859922066c8bc38b2a926a5e17  gcc/testsuite/g++.dg/gomp/pr104623.C
+ fce64f47dec68912cbdef7b1329bf864  gcc/testsuite/g++.dg/gomp/pr105092.C
  539bba6df5330b7a6631eca5665a0899  gcc/testsuite/g++.dg/gomp/pr24849.C
  78ea34fd7a1a2767f61a703271e7070a  gcc/testsuite/g++.dg/gomp/pr25874.C
  93a85a09acfdf011a86ff95fc9184a94  gcc/testsuite/g++.dg/gomp/pr25996.C
*************** d447246d410ae61ed9f733998e77b958  gcc/te
*** 18546,18570 ****
  ffadc8e40c091c0d15ed95d26b29e5a6  gcc/testsuite/g++.dg/gomp/requires-2.C
  a041602adc6954974b227cecf103a64b  gcc/testsuite/g++.dg/gomp/scan-1.C
  536359d59fc418a1570a6d8574a66ca1  gcc/testsuite/g++.dg/gomp/sections-1.C
! c8fdbed05305ecb29a74eae041f265e9  gcc/testsuite/g++.dg/gomp/sections-2.C
  b72fe99f861779472bd3b1cf3587d478  gcc/testsuite/g++.dg/gomp/sections-3.C
  9f60edc949854690c68fa7fb1e8b3157  gcc/testsuite/g++.dg/gomp/sections-4.C
  001ce7e20e9af591527473ee699c1fee  gcc/testsuite/g++.dg/gomp/sharing-1.C
  f97f1706978c263c63bb1cf7a9b02300  gcc/testsuite/g++.dg/gomp/sharing-2.C
  641ac4dd2d2bc4be8797863fb6b5c286  gcc/testsuite/g++.dg/gomp/simd-1.C
  02e91fef2b3e3caf9b1f7f5696c2c507  gcc/testsuite/g++.dg/gomp/simd-2.C
  459676a4eb36be81f7a549bd53ee45ab  gcc/testsuite/g++.dg/gomp/sink-1.C
  0412fd9af76a7ee57249908358bbd69e  gcc/testsuite/g++.dg/gomp/sink-2.C
  4700c4fd7a0a53bd064b879e10cad37f  gcc/testsuite/g++.dg/gomp/sink-3.C
  d5056d7847f2753ff16e19275fe96735  gcc/testsuite/g++.dg/gomp/target-1.C
  8c284b2db0213aba2b9a945275ec6d74  gcc/testsuite/g++.dg/gomp/target-2.C
  e364244678eabb5fde7dbd8cb1a23102  gcc/testsuite/g++.dg/gomp/target-teams-1.C
  926d8449d7242be3abf0b04b4f5a0201  gcc/testsuite/g++.dg/gomp/task-1.C
  dd317148fbd7859764db9b7028cfa23d  gcc/testsuite/g++.dg/gomp/task-detach-1.C
  35893a5f773c2133df70cf6c3b2593a4  gcc/testsuite/g++.dg/gomp/taskgroup-1.C
  104e3fe5ad79c64aa1ed9ae097073285  gcc/testsuite/g++.dg/gomp/teams-1.C
! ff128067ae6995a40c86a14e37d2e928  gcc/testsuite/g++.dg/gomp/this-1.C
! 6c90d0418afc4d79214d65c1c8937352  gcc/testsuite/g++.dg/gomp/this-2.C
  e413a547924c043723b9ade8080ee072  gcc/testsuite/g++.dg/gomp/tls-1.C
  cd8b1db623a07d865bb9a34cd8affe37  gcc/testsuite/g++.dg/gomp/tls-2.C
  b3697ff885906cda6a552df791bb35c6  gcc/testsuite/g++.dg/gomp/tls-3.C
--- 19208,19241 ----
  ffadc8e40c091c0d15ed95d26b29e5a6  gcc/testsuite/g++.dg/gomp/requires-2.C
  a041602adc6954974b227cecf103a64b  gcc/testsuite/g++.dg/gomp/scan-1.C
  536359d59fc418a1570a6d8574a66ca1  gcc/testsuite/g++.dg/gomp/sections-1.C
! f027428463eb3710e7fbcd6d2994dcdc  gcc/testsuite/g++.dg/gomp/sections-2.C
  b72fe99f861779472bd3b1cf3587d478  gcc/testsuite/g++.dg/gomp/sections-3.C
  9f60edc949854690c68fa7fb1e8b3157  gcc/testsuite/g++.dg/gomp/sections-4.C
  001ce7e20e9af591527473ee699c1fee  gcc/testsuite/g++.dg/gomp/sharing-1.C
  f97f1706978c263c63bb1cf7a9b02300  gcc/testsuite/g++.dg/gomp/sharing-2.C
  641ac4dd2d2bc4be8797863fb6b5c286  gcc/testsuite/g++.dg/gomp/simd-1.C
  02e91fef2b3e3caf9b1f7f5696c2c507  gcc/testsuite/g++.dg/gomp/simd-2.C
+ 2b624343bfc79fe101d846a4291f71c8  gcc/testsuite/g++.dg/gomp/simd-3.C
  459676a4eb36be81f7a549bd53ee45ab  gcc/testsuite/g++.dg/gomp/sink-1.C
  0412fd9af76a7ee57249908358bbd69e  gcc/testsuite/g++.dg/gomp/sink-2.C
  4700c4fd7a0a53bd064b879e10cad37f  gcc/testsuite/g++.dg/gomp/sink-3.C
  d5056d7847f2753ff16e19275fe96735  gcc/testsuite/g++.dg/gomp/target-1.C
  8c284b2db0213aba2b9a945275ec6d74  gcc/testsuite/g++.dg/gomp/target-2.C
+ 07e8aa40bf4b05f8e242c3fbbc0e5313  gcc/testsuite/g++.dg/gomp/target-3.C
+ 24f23b540aa3a84ff9558d74b50767c8  gcc/testsuite/g++.dg/gomp/target-lambda-1.C
+ 0af399d08e71042cdbc9609c343d255c  gcc/testsuite/g++.dg/gomp/target-lambda-2.C
  e364244678eabb5fde7dbd8cb1a23102  gcc/testsuite/g++.dg/gomp/target-teams-1.C
+ bcd255e2d0e26acf60901103fc4678cc  gcc/testsuite/g++.dg/gomp/target-this-1.C
+ 8ff7327af3f9d49efb8436b6523710bd  gcc/testsuite/g++.dg/gomp/target-this-2.C
+ 6c08c38be467fd2be4ad6892f294a6fa  gcc/testsuite/g++.dg/gomp/target-this-3.C
+ 96f8a80f1785cb94ed51e29a464a887f  gcc/testsuite/g++.dg/gomp/target-this-4.C
+ 0ff4f4ce212c8528a4be5b080fdf156c  gcc/testsuite/g++.dg/gomp/target-this-5.C
  926d8449d7242be3abf0b04b4f5a0201  gcc/testsuite/g++.dg/gomp/task-1.C
  dd317148fbd7859764db9b7028cfa23d  gcc/testsuite/g++.dg/gomp/task-detach-1.C
  35893a5f773c2133df70cf6c3b2593a4  gcc/testsuite/g++.dg/gomp/taskgroup-1.C
  104e3fe5ad79c64aa1ed9ae097073285  gcc/testsuite/g++.dg/gomp/teams-1.C
! a547c8ef2e75bfdc4d85b287f9987f7e  gcc/testsuite/g++.dg/gomp/this-1.C
! e21ee3fa41dbe8ceab108966a5db5da1  gcc/testsuite/g++.dg/gomp/this-2.C
  e413a547924c043723b9ade8080ee072  gcc/testsuite/g++.dg/gomp/tls-1.C
  cd8b1db623a07d865bb9a34cd8affe37  gcc/testsuite/g++.dg/gomp/tls-2.C
  b3697ff885906cda6a552df791bb35c6  gcc/testsuite/g++.dg/gomp/tls-3.C
*************** a37dc2aba240a63836ffe018660b5576  gcc/te
*** 18582,18587 ****
--- 19253,19259 ----
  4a4bf7fb6d4865db8fa5a4940198eab3  gcc/testsuite/g++.dg/gomp/tpl-for-1.C
  1d61bc720d46fe83c80881e1450f263f  gcc/testsuite/g++.dg/gomp/tpl-for-2.C
  b057b654090f4695277d8c1866894100  gcc/testsuite/g++.dg/gomp/tpl-for-3.C
+ 28adf9e9fa5e0143101a0890bf7bd18e  gcc/testsuite/g++.dg/gomp/tpl-masked-1.C
  357c0eef566a98817ab37efc3875adb1  gcc/testsuite/g++.dg/gomp/tpl-master-1.C
  3fe09daf99ddda4ea1fef59c61e34f47  gcc/testsuite/g++.dg/gomp/tpl-parallel-1.C
  d647e97b4f8477aa549f4f2f6eb6daa1  gcc/testsuite/g++.dg/gomp/tpl-parallel-2.C
*************** d647e97b4f8477aa549f4f2f6eb6daa1  gcc/te
*** 18592,18599 ****
  a10dd83ffd8fea8213e9a3713b91277f  gcc/testsuite/g++.dg/gomp/udr-4.C
  cbb9b7e93953b72bbadec7a3dd5d1de0  gcc/testsuite/g++.dg/gomp/udr-5.C
  432e931e22639a849a7183275e9c7582  gcc/testsuite/g++.dg/gomp/udr-6.C
! b143b6294c19bb76e169a4c5c1a3beb5  gcc/testsuite/g++.dg/gomp/unmappable-1.C
! 9a714ec26db9cd176e6cf441379c99f9  gcc/testsuite/g++.dg/graphite/graphite.exp
  de81689ffe7845348fd7504b61336c82  gcc/testsuite/g++.dg/graphite/id-1.C
  5c6a1178f4fd620e8792644c534c29f8  gcc/testsuite/g++.dg/graphite/pr39447.C
  266d67267efa84e1ec7b55b895fd2442  gcc/testsuite/g++.dg/graphite/pr41305.C
--- 19264,19271 ----
  a10dd83ffd8fea8213e9a3713b91277f  gcc/testsuite/g++.dg/gomp/udr-4.C
  cbb9b7e93953b72bbadec7a3dd5d1de0  gcc/testsuite/g++.dg/gomp/udr-5.C
  432e931e22639a849a7183275e9c7582  gcc/testsuite/g++.dg/gomp/udr-6.C
! e5a7964681322dad9df0ebf2bee44df8  gcc/testsuite/g++.dg/gomp/unmappable-1.C
! 02b97c91e459ce34a3fab324c5b13eb7  gcc/testsuite/g++.dg/graphite/graphite.exp
  de81689ffe7845348fd7504b61336c82  gcc/testsuite/g++.dg/graphite/id-1.C
  5c6a1178f4fd620e8792644c534c29f8  gcc/testsuite/g++.dg/graphite/pr39447.C
  266d67267efa84e1ec7b55b895fd2442  gcc/testsuite/g++.dg/graphite/pr41305.C
*************** a4cc053c9d17978de8abeaa091606802  gcc/te
*** 18613,18619 ****
  a0dca44ebd71904f8aeb3e055b8d94c7  gcc/testsuite/g++.dg/guality/pr93888.C
  0a776e30f0b520134b2f63d4d5e4e170  gcc/testsuite/g++.dg/guality/redeclaration1.C
  d4b1aa612cf9b628d986d19617ad2770  gcc/testsuite/g++.dg/header.C
! ab79aaf52be89928967b23711a7d0eb5  gcc/testsuite/g++.dg/hwasan/hwasan.exp
  da4fad928e1600184552de0820443fc5  gcc/testsuite/g++.dg/hwasan/rvo-handled.C
  176e66df5d6aa9dd76c8fe406b78a370  gcc/testsuite/g++.dg/inherit/access1.C
  06874da0f9322a8d8220986c9c167391  gcc/testsuite/g++.dg/inherit/access2.C
--- 19285,19291 ----
  a0dca44ebd71904f8aeb3e055b8d94c7  gcc/testsuite/g++.dg/guality/pr93888.C
  0a776e30f0b520134b2f63d4d5e4e170  gcc/testsuite/g++.dg/guality/redeclaration1.C
  d4b1aa612cf9b628d986d19617ad2770  gcc/testsuite/g++.dg/header.C
! 70792bcbf5a824d2e5c8db4ea152a469  gcc/testsuite/g++.dg/hwasan/hwasan.exp
  da4fad928e1600184552de0820443fc5  gcc/testsuite/g++.dg/hwasan/rvo-handled.C
  176e66df5d6aa9dd76c8fe406b78a370  gcc/testsuite/g++.dg/inherit/access1.C
  06874da0f9322a8d8220986c9c167391  gcc/testsuite/g++.dg/inherit/access2.C
*************** a9833a51cb156e8d3d578bcfb66c9840  gcc/te
*** 18647,18652 ****
--- 19319,19325 ----
  3f2664dc416902abf3e84a4d95de8f7a  gcc/testsuite/g++.dg/inherit/covariant20.C
  56d1ed6d9e40e8f5de8809e9aeccf1dd  gcc/testsuite/g++.dg/inherit/covariant21.C
  b0fbc509fc3009c704d9abec3ca8be74  gcc/testsuite/g++.dg/inherit/covariant22.C
+ 4f5b3c16fdd0a6dbcd45a8b26237759e  gcc/testsuite/g++.dg/inherit/covariant23.C
  24ff947b4da8f1fcee6c7b66d8388009  gcc/testsuite/g++.dg/inherit/covariant3.C
  8c6bb6aaa56fa2bea8b375c52fab5688  gcc/testsuite/g++.dg/inherit/covariant4.C
  93a19aa63029d81a5f4f59b8b81d11a8  gcc/testsuite/g++.dg/inherit/covariant5.C
*************** a31e2bf200a372c568a40cc3a4bcfe53  gcc/te
*** 18738,18748 ****
--- 19411,19425 ----
  6cd6ab8e0f69d00cb3e2b7e6e23c5e85  gcc/testsuite/g++.dg/init/aggr12.C
  ffc79e54be3c4de73d41f5506278d717  gcc/testsuite/g++.dg/init/aggr13.C
  aacbd487f9d3f5d3e89885788e54012c  gcc/testsuite/g++.dg/init/aggr14.C
+ 15e280bba85cd23e1a8a05df459840b9  gcc/testsuite/g++.dg/init/aggr15.C
  a79ad2e50ca8d0ab6dd5b27254f204b5  gcc/testsuite/g++.dg/init/aggr2.C
  9f0814e4f47903c340ece647e3a040fa  gcc/testsuite/g++.dg/init/aggr3.C
  78d872d27441b5eb9867a5feae7ce0f6  gcc/testsuite/g++.dg/init/aggr4.C
  b13f6872740c13eeb5b260b78e7c78dd  gcc/testsuite/g++.dg/init/aggr5.C
  769a94ec8a7e41cbb2ec24cc39f71dc1  gcc/testsuite/g++.dg/init/aggr6.C
+ 54f1e52e6cc7270afa92e3f291b2e6b8  gcc/testsuite/g++.dg/init/aggr7-eh.C
+ 661dd4cb23853fa555afda29e59ffcb9  gcc/testsuite/g++.dg/init/aggr7-eh2.C
+ 6428b70dbfb83f85ff816e07beba5a4a  gcc/testsuite/g++.dg/init/aggr7-eh3.C
  bee0927298bd1d13c118fdddbac5ee49  gcc/testsuite/g++.dg/init/aggr7.C
  8eaf6042526686e7717214b420cfcaf5  gcc/testsuite/g++.dg/init/aggr8.C
  a7bd0d962c09abd6aa73b256f57ea748  gcc/testsuite/g++.dg/init/aggr9.C
*************** a7bd0d962c09abd6aa73b256f57ea748  gcc/te
*** 18750,18756 ****
  92960aa3fba7b251d088910f7ca36c73  gcc/testsuite/g++.dg/init/array1.C
  52be26e8b242500ae671c570de13a1a7  gcc/testsuite/g++.dg/init/array10.C
  8748605914a325a2f261b23fd3561ecc  gcc/testsuite/g++.dg/init/array11.C
! cdd8bcf2d0f951ea0f042ff962ed9854  gcc/testsuite/g++.dg/init/array12.C
  d0bb03e714f655f56840d4e660ac77be  gcc/testsuite/g++.dg/init/array13.C
  46ee7376992213a7ad7da95e9c59931d  gcc/testsuite/g++.dg/init/array14.C
  b1549a9bc301572f770559980a857397  gcc/testsuite/g++.dg/init/array15.C
--- 19427,19433 ----
  92960aa3fba7b251d088910f7ca36c73  gcc/testsuite/g++.dg/init/array1.C
  52be26e8b242500ae671c570de13a1a7  gcc/testsuite/g++.dg/init/array10.C
  8748605914a325a2f261b23fd3561ecc  gcc/testsuite/g++.dg/init/array11.C
! baabf6eede30b3ac082731ed9fd7f898  gcc/testsuite/g++.dg/init/array12.C
  d0bb03e714f655f56840d4e660ac77be  gcc/testsuite/g++.dg/init/array13.C
  46ee7376992213a7ad7da95e9c59931d  gcc/testsuite/g++.dg/init/array14.C
  b1549a9bc301572f770559980a857397  gcc/testsuite/g++.dg/init/array15.C
*************** f39111fa11b0d25bd84e443cd5df726a  gcc/te
*** 18782,18787 ****
--- 19459,19465 ----
  a82da606f2deae46784697a2e5730d6b  gcc/testsuite/g++.dg/init/array4.C
  c78f890c91fdf049382c54b81829036e  gcc/testsuite/g++.dg/init/array40.C
  3069a9d1d08fb86eb0dacb7754298c53  gcc/testsuite/g++.dg/init/array41.C
+ 981886d230cde6a03b9761f020440f4b  gcc/testsuite/g++.dg/init/array41a.C
  40d7d180bb48e5e751055e0ee5e1d6ea  gcc/testsuite/g++.dg/init/array42.C
  fcaa7d413f1761941469dbfb9918edc7  gcc/testsuite/g++.dg/init/array43.C
  cd684232807d8e9f0bce981e62f25567  gcc/testsuite/g++.dg/init/array44.C
*************** e7a4920eaa905e671e74b6482c654721  gcc/te
*** 18803,18808 ****
--- 19481,19487 ----
  75ec5b148dcbeb2412d88d1fcfb89b82  gcc/testsuite/g++.dg/init/array59.C
  12f516d0ef7088644b46185bbd83ef4d  gcc/testsuite/g++.dg/init/array6.C
  c083b6ec43687658fab80f7d11038fb8  gcc/testsuite/g++.dg/init/array60.C
+ cb77b5e3742bffa76c379088ce860b88  gcc/testsuite/g++.dg/init/array61.C
  02cf876b0b0d2594118addc046b9112a  gcc/testsuite/g++.dg/init/array7.C
  4ab5bb9dc38b78d749ba584adefbdc33  gcc/testsuite/g++.dg/init/array8.C
  b1c2a3438d19ab4734ef026ce6aba7fa  gcc/testsuite/g++.dg/init/array9.C
*************** f93344289d2f2663e5df449820c5dae4  gcc/te
*** 18815,18820 ****
--- 19494,19500 ----
  ba9cb6a74a0589c86569f80ab3a2d5fc  gcc/testsuite/g++.dg/init/bitfield3.C
  3d9dc85d249bab59ebe8894e33879a6f  gcc/testsuite/g++.dg/init/bitfield4.C
  a501f3ca19411cb888e7821f67f96f1b  gcc/testsuite/g++.dg/init/bitfield5.C
+ e32312793464be40e4de9a9c22ff9127  gcc/testsuite/g++.dg/init/bitfield6.C
  ce83d99cd2f3602fc1addd06d175b024  gcc/testsuite/g++.dg/init/brace1.C
  7db79f23c55a4f84f9789c534028c4ac  gcc/testsuite/g++.dg/init/brace2.C
  c46d05cc9ceeb4d3a8a4d25cd908ba7a  gcc/testsuite/g++.dg/init/brace3.C
*************** c55d67e7ef83de8fc0fa30f01b68f5f7  gcc/te
*** 18866,18871 ****
--- 19546,19553 ----
  4252d0c5002398ece95fee29e3cd2c0e  gcc/testsuite/g++.dg/init/delete1.C
  468ee3e464fecbec120056e490e0ffe4  gcc/testsuite/g++.dg/init/delete2.C
  1e8eac418e9a6794591435e6f4346a97  gcc/testsuite/g++.dg/init/delete3.C
+ 1023849b0213da9de86c24654d2012f0  gcc/testsuite/g++.dg/init/delete4.C
+ 89aed537008012b0c5e151436e317c90  gcc/testsuite/g++.dg/init/delete5.C
  6397e70e81dad7f42c086d6457110fb8  gcc/testsuite/g++.dg/init/dso_handle1.C
  247663aa181cc3911b484b28ff590334  gcc/testsuite/g++.dg/init/dso_handle2.C
  0282b33cfb0b201499908c95a2e9b57d  gcc/testsuite/g++.dg/init/dtor1.C
*************** d15f6f1dc25618b84c64325897aefd35  gcc/te
*** 18954,18959 ****
--- 19636,19642 ----
  ece146914185349992892b6c7e289bb0  gcc/testsuite/g++.dg/init/new48.C
  9ca5511847720382b5f5eb6e481a9a08  gcc/testsuite/g++.dg/init/new49.C
  165b53a00e07117f81b4b42f0b88ed5c  gcc/testsuite/g++.dg/init/new5.C
+ 28c8b93bf9233d503208c75095d2b4ab  gcc/testsuite/g++.dg/init/new50.C
  6142030ce76d1ab9453ff0a223722577  gcc/testsuite/g++.dg/init/new6.C
  625c88e7ce2f57c2f27e69085c8278eb  gcc/testsuite/g++.dg/init/new7.C
  9e9ce794649ccc9a4507b42cb8c4c0d0  gcc/testsuite/g++.dg/init/new8.C
*************** c5e9a1f0512a55d50ec7174c592a3022  gcc/te
*** 19109,19125 ****
  5c336f011df582bbb61ab1f66713bacc  gcc/testsuite/g++.dg/ipa/devirt-32.C
  3b9e97d22e7c620ad38b7c8edcdb5e50  gcc/testsuite/g++.dg/ipa/devirt-33.C
  88cdebd4fa34ee49cc43372781b50ff1  gcc/testsuite/g++.dg/ipa/devirt-34.C
! af71e4ad430c6621490104b76bd286c5  gcc/testsuite/g++.dg/ipa/devirt-35.C
! 92d2235b57fd1e4391f687d99e0b2a80  gcc/testsuite/g++.dg/ipa/devirt-36.C
! a4928dadb59f3abf3083bb3253bc654a  gcc/testsuite/g++.dg/ipa/devirt-37.C
  37353246ea7006017939a1089caa2bd4  gcc/testsuite/g++.dg/ipa/devirt-38.C
  a2972db3912accc9638a8980355e47ed  gcc/testsuite/g++.dg/ipa/devirt-39.C
  2878c81a10148de820784e19c1fe44f9  gcc/testsuite/g++.dg/ipa/devirt-4.C
! 92e9e6b1652a4e88f7bb04768346a9f1  gcc/testsuite/g++.dg/ipa/devirt-40.C
  d78ab57adfda4c091e90fca3cb9fff80  gcc/testsuite/g++.dg/ipa/devirt-41.C
  e915138ffa27270843cb0bce3000e00b  gcc/testsuite/g++.dg/ipa/devirt-42.C
  db476e68b1dec09bf7f43dcc225319f2  gcc/testsuite/g++.dg/ipa/devirt-43.C
! d8833179da27d4f2553e2c4ddfcc2619  gcc/testsuite/g++.dg/ipa/devirt-44.C
  f47bc7a9c37789213c8eb800176ec3ff  gcc/testsuite/g++.dg/ipa/devirt-45.C
  8072c0f695bd61651ee2b95dd242d870  gcc/testsuite/g++.dg/ipa/devirt-46.C
  87e2032503d599965c24246566d7e086  gcc/testsuite/g++.dg/ipa/devirt-47.C
--- 19792,19808 ----
  5c336f011df582bbb61ab1f66713bacc  gcc/testsuite/g++.dg/ipa/devirt-32.C
  3b9e97d22e7c620ad38b7c8edcdb5e50  gcc/testsuite/g++.dg/ipa/devirt-33.C
  88cdebd4fa34ee49cc43372781b50ff1  gcc/testsuite/g++.dg/ipa/devirt-34.C
! 2e0819be850a36f8ca4764bbc8aa1112  gcc/testsuite/g++.dg/ipa/devirt-35.C
! a52210c16a3671bcbcd24f73d3bb7ed2  gcc/testsuite/g++.dg/ipa/devirt-36.C
! 3ac931f8c6ad7d3505beb34da20d731c  gcc/testsuite/g++.dg/ipa/devirt-37.C
  37353246ea7006017939a1089caa2bd4  gcc/testsuite/g++.dg/ipa/devirt-38.C
  a2972db3912accc9638a8980355e47ed  gcc/testsuite/g++.dg/ipa/devirt-39.C
  2878c81a10148de820784e19c1fe44f9  gcc/testsuite/g++.dg/ipa/devirt-4.C
! 03e6ae8a2d5519bf23e14fa67d702d7e  gcc/testsuite/g++.dg/ipa/devirt-40.C
  d78ab57adfda4c091e90fca3cb9fff80  gcc/testsuite/g++.dg/ipa/devirt-41.C
  e915138ffa27270843cb0bce3000e00b  gcc/testsuite/g++.dg/ipa/devirt-42.C
  db476e68b1dec09bf7f43dcc225319f2  gcc/testsuite/g++.dg/ipa/devirt-43.C
! d6b86291c68660fa38d0d11d0821a8bd  gcc/testsuite/g++.dg/ipa/devirt-44.C
  f47bc7a9c37789213c8eb800176ec3ff  gcc/testsuite/g++.dg/ipa/devirt-45.C
  8072c0f695bd61651ee2b95dd242d870  gcc/testsuite/g++.dg/ipa/devirt-46.C
  87e2032503d599965c24246566d7e086  gcc/testsuite/g++.dg/ipa/devirt-47.C
*************** f2bb748502e340561bce6eaed7285e91  gcc/te
*** 19146,19160 ****
  abc30277f2967caa33209d71858d7ffc  gcc/testsuite/g++.dg/ipa/iinline-1.C
  c188d8feec72dc790708bf458e6b93cf  gcc/testsuite/g++.dg/ipa/iinline-2.C
  ed2ebadecdee89ff7f0834345b5ae2e8  gcc/testsuite/g++.dg/ipa/iinline-3.C
! 161af6862da787a4283065953a419e69  gcc/testsuite/g++.dg/ipa/imm-devirt-1.C
  70736b7b80d0246c821c3d97507376a9  gcc/testsuite/g++.dg/ipa/imm-devirt-2.C
  292cd76f08d09af9b57303292d8a6673  gcc/testsuite/g++.dg/ipa/inline-1.C
  dec5937371d1df40c00adcd2a4fe5793  gcc/testsuite/g++.dg/ipa/inline-2.C
  3f7c2518e8312e41b7a0d31455313ef9  gcc/testsuite/g++.dg/ipa/inline-3.C
  af1630ba13bdbd20938ab0c47a373b5a  gcc/testsuite/g++.dg/ipa/ipa-icf-1.C
  7f5303cbb5d32dfc7e93cc886c6eaa10  gcc/testsuite/g++.dg/ipa/ipa-icf-2.C
  2feb9adc74dbd9a4b092469877b4252f  gcc/testsuite/g++.dg/ipa/ipa-icf-3.C
! 1385efbd19ccaf0f22072dab45038115  gcc/testsuite/g++.dg/ipa/ipa-icf-4.C
  890af13d278e4e0706986dbc2c5a1884  gcc/testsuite/g++.dg/ipa/ipa-icf-5.C
  91f7284baf9c02068705da50e95886c9  gcc/testsuite/g++.dg/ipa/ipa-icf-6.C
  baa7a26fbd7f93011660ae486b2d5a03  gcc/testsuite/g++.dg/ipa/ipa-pta-1.C
--- 19829,19844 ----
  abc30277f2967caa33209d71858d7ffc  gcc/testsuite/g++.dg/ipa/iinline-1.C
  c188d8feec72dc790708bf458e6b93cf  gcc/testsuite/g++.dg/ipa/iinline-2.C
  ed2ebadecdee89ff7f0834345b5ae2e8  gcc/testsuite/g++.dg/ipa/iinline-3.C
! 0e4c8c729f288c50d9cb446902b5a576  gcc/testsuite/g++.dg/ipa/imm-devirt-1.C
  70736b7b80d0246c821c3d97507376a9  gcc/testsuite/g++.dg/ipa/imm-devirt-2.C
  292cd76f08d09af9b57303292d8a6673  gcc/testsuite/g++.dg/ipa/inline-1.C
  dec5937371d1df40c00adcd2a4fe5793  gcc/testsuite/g++.dg/ipa/inline-2.C
  3f7c2518e8312e41b7a0d31455313ef9  gcc/testsuite/g++.dg/ipa/inline-3.C
+ ffdbd39bf7256fe7cdd80a0507ecc133  gcc/testsuite/g++.dg/ipa/inline-4.C
  af1630ba13bdbd20938ab0c47a373b5a  gcc/testsuite/g++.dg/ipa/ipa-icf-1.C
  7f5303cbb5d32dfc7e93cc886c6eaa10  gcc/testsuite/g++.dg/ipa/ipa-icf-2.C
  2feb9adc74dbd9a4b092469877b4252f  gcc/testsuite/g++.dg/ipa/ipa-icf-3.C
! 8c1a79016f63ba6106b140bbc3aba3af  gcc/testsuite/g++.dg/ipa/ipa-icf-4.C
  890af13d278e4e0706986dbc2c5a1884  gcc/testsuite/g++.dg/ipa/ipa-icf-5.C
  91f7284baf9c02068705da50e95886c9  gcc/testsuite/g++.dg/ipa/ipa-icf-6.C
  baa7a26fbd7f93011660ae486b2d5a03  gcc/testsuite/g++.dg/ipa/ipa-pta-1.C
*************** baa7a26fbd7f93011660ae486b2d5a03  gcc/te
*** 19162,19167 ****
--- 19846,19852 ----
  0821376df11b41b60c1e760e355f7429  gcc/testsuite/g++.dg/ipa/ipa-sra-1.C
  311cf63f592827ae694b276e1fd87094  gcc/testsuite/g++.dg/ipa/ipa-sra-2.C
  dd9da84319526c87d1b5ab5555ecf0ce  gcc/testsuite/g++.dg/ipa/ipa-sra-3.C
+ 979ddadf770264dfe40f1f19ce96f7aa  gcc/testsuite/g++.dg/ipa/ipa-sra-4.C
  d006a1cb4b42713f1a4e2c48ea89a5ef  gcc/testsuite/g++.dg/ipa/ivinline-1.C
  0612f7455e1930eacd9d89722d3bc4f1  gcc/testsuite/g++.dg/ipa/ivinline-2.C
  2b579f9c8cd3abef21905cb01ba2edc8  gcc/testsuite/g++.dg/ipa/ivinline-3.C
*************** d006a1cb4b42713f1a4e2c48ea89a5ef  gcc/te
*** 19170,19183 ****
  667463cbb79cc07199ea2a9e124352f3  gcc/testsuite/g++.dg/ipa/ivinline-7.C
  d0415e5d5ed79c73a04e7df5551e4b95  gcc/testsuite/g++.dg/ipa/ivinline-8.C
  867fb18fd70a2df8847d32f03eb09d64  gcc/testsuite/g++.dg/ipa/ivinline-9.C
  89a697678c960075181328b0bed18d5a  gcc/testsuite/g++.dg/ipa/nothrow-1.C
  ecfa94e705bc436ad699767b1e4c929e  gcc/testsuite/g++.dg/ipa/polymorphic-call-1.C
  02f3704c0511b2d171c55dbf09c64325  gcc/testsuite/g++.dg/ipa/pr43695.C
  5345293723ad062b59b168c319738e1e  gcc/testsuite/g++.dg/ipa/pr43812.C
  b001cbe3dfdeb7d2a1061f024aa08ea4  gcc/testsuite/g++.dg/ipa/pr44372.C
  34f01b9fc4157e35aef42fe4303714df  gcc/testsuite/g++.dg/ipa/pr45565.C
  c39768e60c48a8140ac1eb7b8c2adfcb  gcc/testsuite/g++.dg/ipa/pr45572-1.C
! 0d4cd7a0dcc526799f7b4db021c2f68d  gcc/testsuite/g++.dg/ipa/pr45572-2.C
  308bcf23bb271af4ffddb96f07a09beb  gcc/testsuite/g++.dg/ipa/pr45875.C
  3b13da9b176812433b85dc81c337079d  gcc/testsuite/g++.dg/ipa/pr46053.C
  177b805c9038f9f21dc4bd1516592ade  gcc/testsuite/g++.dg/ipa/pr46287-1.C
--- 19855,19870 ----
  667463cbb79cc07199ea2a9e124352f3  gcc/testsuite/g++.dg/ipa/ivinline-7.C
  d0415e5d5ed79c73a04e7df5551e4b95  gcc/testsuite/g++.dg/ipa/ivinline-8.C
  867fb18fd70a2df8847d32f03eb09d64  gcc/testsuite/g++.dg/ipa/ivinline-9.C
+ 5a074a312e6275492245e6c6e1262496  gcc/testsuite/g++.dg/ipa/modref-1.C
  89a697678c960075181328b0bed18d5a  gcc/testsuite/g++.dg/ipa/nothrow-1.C
  ecfa94e705bc436ad699767b1e4c929e  gcc/testsuite/g++.dg/ipa/polymorphic-call-1.C
+ 901698e6dabf29dd6ced031811fcf59e  gcc/testsuite/g++.dg/ipa/pr103099.C
  02f3704c0511b2d171c55dbf09c64325  gcc/testsuite/g++.dg/ipa/pr43695.C
  5345293723ad062b59b168c319738e1e  gcc/testsuite/g++.dg/ipa/pr43812.C
  b001cbe3dfdeb7d2a1061f024aa08ea4  gcc/testsuite/g++.dg/ipa/pr44372.C
  34f01b9fc4157e35aef42fe4303714df  gcc/testsuite/g++.dg/ipa/pr45565.C
  c39768e60c48a8140ac1eb7b8c2adfcb  gcc/testsuite/g++.dg/ipa/pr45572-1.C
! 8586d60deeb1a2d13cae5054ea644f3d  gcc/testsuite/g++.dg/ipa/pr45572-2.C
  308bcf23bb271af4ffddb96f07a09beb  gcc/testsuite/g++.dg/ipa/pr45875.C
  3b13da9b176812433b85dc81c337079d  gcc/testsuite/g++.dg/ipa/pr46053.C
  177b805c9038f9f21dc4bd1516592ade  gcc/testsuite/g++.dg/ipa/pr46287-1.C
*************** e3931f023ac1cf9205a7c1660d952c18  gcc/te
*** 19264,19270 ****
  89f95e75e402e5135147f26252be06e5  gcc/testsuite/g++.dg/ipa/pr80205.C
  672d4d8f8ba337f0169555f30ee6a2d7  gcc/testsuite/g++.dg/ipa/pr81248.C
  c430165f569fa5b83e06f136d915a840  gcc/testsuite/g++.dg/ipa/pr81261.C
! e9a3cd760e81664690da407f52b34364  gcc/testsuite/g++.dg/ipa/pr82352.C
  05592a0935fec817a7688eb12baa50c2  gcc/testsuite/g++.dg/ipa/pr82801.C
  a6ea68da40fdbc3c5627d8fd52058c74  gcc/testsuite/g++.dg/ipa/pr83549.C
  06f49f7abbe4bfaee23390b33bd5d8a6  gcc/testsuite/g++.dg/ipa/pr83667.C
--- 19951,19957 ----
  89f95e75e402e5135147f26252be06e5  gcc/testsuite/g++.dg/ipa/pr80205.C
  672d4d8f8ba337f0169555f30ee6a2d7  gcc/testsuite/g++.dg/ipa/pr81248.C
  c430165f569fa5b83e06f136d915a840  gcc/testsuite/g++.dg/ipa/pr81261.C
! 39c52ca311d33b3dcb36e04dee5c84bf  gcc/testsuite/g++.dg/ipa/pr82352.C
  05592a0935fec817a7688eb12baa50c2  gcc/testsuite/g++.dg/ipa/pr82801.C
  a6ea68da40fdbc3c5627d8fd52058c74  gcc/testsuite/g++.dg/ipa/pr83549.C
  06f49f7abbe4bfaee23390b33bd5d8a6  gcc/testsuite/g++.dg/ipa/pr83667.C
*************** e2988362ecb41c55df743fe23666ff05  gcc/te
*** 19296,19302 ****
  67ce956b024be06467602bda94a08aa7  gcc/testsuite/g++.dg/ipa/pr98690.C
  36fa3f305af8daf292a5a974b6cd8017  gcc/testsuite/g++.dg/ipa/pure-const-1.C
  82a7eaa06c8e9918346a40ce4e5c9881  gcc/testsuite/g++.dg/ipa/pure-const-2.C
! ee6095015820d87205d7dcbb848a66d1  gcc/testsuite/g++.dg/ipa/pure-const-3.C
  c3659ea03164ca46a25f7148ed889974  gcc/testsuite/g++.dg/ipa/remref-1.C
  c8c5e8bc4984a582357e6ff03fb165cb  gcc/testsuite/g++.dg/ipa/remref-2.C
  b4804485e0df8c8497236eb6966a8244  gcc/testsuite/g++.dg/ipa/type-inheritance-1.C
--- 19983,19989 ----
  67ce956b024be06467602bda94a08aa7  gcc/testsuite/g++.dg/ipa/pr98690.C
  36fa3f305af8daf292a5a974b6cd8017  gcc/testsuite/g++.dg/ipa/pure-const-1.C
  82a7eaa06c8e9918346a40ce4e5c9881  gcc/testsuite/g++.dg/ipa/pure-const-2.C
! 5e761e76cdfdc05bb2efdd250afd3264  gcc/testsuite/g++.dg/ipa/pure-const-3.C
  c3659ea03164ca46a25f7148ed889974  gcc/testsuite/g++.dg/ipa/remref-1.C
  c8c5e8bc4984a582357e6ff03fb165cb  gcc/testsuite/g++.dg/ipa/remref-2.C
  b4804485e0df8c8497236eb6966a8244  gcc/testsuite/g++.dg/ipa/type-inheritance-1.C
*************** cfdf5397516549087b4462086afc619e  gcc/te
*** 19306,19311 ****
--- 19993,19999 ----
  de856e7aa42c7ec995eed0e4ed7dac20  gcc/testsuite/g++.dg/lookup/ambig3.C
  763e9272cd68992e2826922e21df9b67  gcc/testsuite/g++.dg/lookup/ambig4.C
  dbba00ef334068fd19de1479525fdb7e  gcc/testsuite/g++.dg/lookup/ambig5.C
+ a258071297ba6da31370be72d0d3d213  gcc/testsuite/g++.dg/lookup/ambig6.C
  2f777984f797382f3dba7eab93665be9  gcc/testsuite/g++.dg/lookup/anon1.C
  af77d184009ac1aa02cbf79020da1c7d  gcc/testsuite/g++.dg/lookup/anon2.C
  563e134d27e728c49412fd9e968a6cd8  gcc/testsuite/g++.dg/lookup/anon3.C
*************** f6ed60ec36721bb21df4b4b0a445bcff  gcc/te
*** 19317,19323 ****
  5b03fcc95fe345eaff394c7c89375c40  gcc/testsuite/g++.dg/lookup/builtin2.C
  f7071ebb383c4bfa6e3d7a62fe5aeeeb  gcc/testsuite/g++.dg/lookup/builtin3.C
  6296f0916fc8d5d3cd5a9b99cd2637aa  gcc/testsuite/g++.dg/lookup/builtin4.C
! 5a22fe14e5179e9986e83f3e28285b3f  gcc/testsuite/g++.dg/lookup/builtin5.C
  4dcccce4cd513b5df988b4563dbe004b  gcc/testsuite/g++.dg/lookup/builtin6.C
  ed6f2e8dc3a4572bd4b133bcd9732ede  gcc/testsuite/g++.dg/lookup/builtin7.C
  bc073e143a6282f72567c59c57156341  gcc/testsuite/g++.dg/lookup/class-member-1.C
--- 20005,20011 ----
  5b03fcc95fe345eaff394c7c89375c40  gcc/testsuite/g++.dg/lookup/builtin2.C
  f7071ebb383c4bfa6e3d7a62fe5aeeeb  gcc/testsuite/g++.dg/lookup/builtin3.C
  6296f0916fc8d5d3cd5a9b99cd2637aa  gcc/testsuite/g++.dg/lookup/builtin4.C
! ec0e7a236638c394f7a6036a324f74e1  gcc/testsuite/g++.dg/lookup/builtin5.C
  4dcccce4cd513b5df988b4563dbe004b  gcc/testsuite/g++.dg/lookup/builtin6.C
  ed6f2e8dc3a4572bd4b133bcd9732ede  gcc/testsuite/g++.dg/lookup/builtin7.C
  bc073e143a6282f72567c59c57156341  gcc/testsuite/g++.dg/lookup/class-member-1.C
*************** c3c7c64dd008283d64151a83f3fb88f5  gcc/te
*** 19433,19438 ****
--- 20121,20127 ----
  0014cd2335a3fc2ab0314f2b01e6434c  gcc/testsuite/g++.dg/lookup/member3.C
  a02c9e78c023a6582cecd8bcf992d2fd  gcc/testsuite/g++.dg/lookup/member4.C
  acece40c5f32aaa3b38f954b91368d3c  gcc/testsuite/g++.dg/lookup/member5.C
+ e83bdcb2aef83f2c2e93cbd6baabdc72  gcc/testsuite/g++.dg/lookup/memfn1.C
  f81aac5278aa8141c0b1aedacbd46e7c  gcc/testsuite/g++.dg/lookup/missing-std-include-10.C
  6bc56500657f8c3b71b20af4c69e967f  gcc/testsuite/g++.dg/lookup/missing-std-include-10.h
  0a27fbf25062d8b94cfcffbfb481b8b7  gcc/testsuite/g++.dg/lookup/missing-std-include-11.C
*************** f73a831dbfcd6430b723ed4198037c98  gcc/te
*** 19468,19473 ****
--- 20157,20172 ----
  b16d2b44bfa0aeed86e99a04f412703d  gcc/testsuite/g++.dg/lookup/ns4.C
  03c780f0918b370b2240f09b83a68b35  gcc/testsuite/g++.dg/lookup/operator-1.C
  6c03273d407e5d6de3e0a600b18d65db  gcc/testsuite/g++.dg/lookup/operator-2.C
+ 4ac40a808fc6626ca65568a08429f7c3  gcc/testsuite/g++.dg/lookup/operator-3-ops.h
+ ded80207a3c202999aba8a023d8f0516  gcc/testsuite/g++.dg/lookup/operator-3.C
+ c3f226bb4eb9d68500427ac361b3969b  gcc/testsuite/g++.dg/lookup/operator-3a.C
+ a2b014e2e43329bb9803e683981e2a7c  gcc/testsuite/g++.dg/lookup/operator-4.C
+ 61b511ee2de9434777de31902baed37d  gcc/testsuite/g++.dg/lookup/operator-4a.C
+ 61e73d3b7b58c8241dae11d8d97d7f82  gcc/testsuite/g++.dg/lookup/operator-5.C
+ a1ec3c39e5a1beac0e1f9dbbc1635692  gcc/testsuite/g++.dg/lookup/operator-5a.C
+ f5603b028cb5e4f040fc3af7776ea00e  gcc/testsuite/g++.dg/lookup/operator-6.C
+ 60fb08261559503592bcae8f4f347885  gcc/testsuite/g++.dg/lookup/operator-7.C
+ 8a4bc664943ba55e02c1041859cf9c36  gcc/testsuite/g++.dg/lookup/operator-8.C
  87eba878015147f0a75c48fd47e42fbb  gcc/testsuite/g++.dg/lookup/pr21802.C
  2378e813c805e961b5f594f4a76ec56d  gcc/testsuite/g++.dg/lookup/pr60994.C
  e8c219b570d08e589efca8f832a6b0b3  gcc/testsuite/g++.dg/lookup/pr67074.C
*************** d0e63df38adea95bde4f29a4a8adbd7a  gcc/te
*** 19526,19533 ****
  36c8df686ba39d71b24a97d15b78bcba  gcc/testsuite/g++.dg/lookup/scoped7.C
  26af3964407b493bd173a74dadeb7ffb  gcc/testsuite/g++.dg/lookup/scoped8.C
  6369d16eb28b1bd2774c54434aaec082  gcc/testsuite/g++.dg/lookup/scoped9.C
! f538be817e65ad59f02c512caf0889fb  gcc/testsuite/g++.dg/lookup/strong-using.C
! 67193c36a64a5481aaf5ed0f26a2686a  gcc/testsuite/g++.dg/lookup/strong-using2.C
  14a5eeccea742bec62851ac5c1d69945  gcc/testsuite/g++.dg/lookup/struct-hack1.C
  5c1c26a3d7600538118a4941d09bc349  gcc/testsuite/g++.dg/lookup/struct1.C
  1ddaea536458f2a22766e38863baea74  gcc/testsuite/g++.dg/lookup/struct2.C
--- 20225,20232 ----
  36c8df686ba39d71b24a97d15b78bcba  gcc/testsuite/g++.dg/lookup/scoped7.C
  26af3964407b493bd173a74dadeb7ffb  gcc/testsuite/g++.dg/lookup/scoped8.C
  6369d16eb28b1bd2774c54434aaec082  gcc/testsuite/g++.dg/lookup/scoped9.C
! 64366cec36dbd7795d5b9d0a7ca6b910  gcc/testsuite/g++.dg/lookup/strong-using.C
! d0193c7d137be2fd4150097ff443772a  gcc/testsuite/g++.dg/lookup/strong-using2.C
  14a5eeccea742bec62851ac5c1d69945  gcc/testsuite/g++.dg/lookup/struct-hack1.C
  5c1c26a3d7600538118a4941d09bc349  gcc/testsuite/g++.dg/lookup/struct1.C
  1ddaea536458f2a22766e38863baea74  gcc/testsuite/g++.dg/lookup/struct2.C
*************** f8613a1cd0ab743997c2513235f7f398  gcc/te
*** 19547,19552 ****
--- 20246,20252 ----
  8bcdfec3b2bc3c59b46d319647268367  gcc/testsuite/g++.dg/lookup/typedef1.C
  78b03437c70230e8ccd0238677d2b192  gcc/testsuite/g++.dg/lookup/used-before-declaration.C
  37ba62633a35db58ce53d2e965c7405c  gcc/testsuite/g++.dg/lookup/using-10.C
+ c557908b239b5fca0e2d32f13aac9473  gcc/testsuite/g++.dg/lookup/using-decl1.C
  5ce5cb2e61a3bd571b8a258301e82f47  gcc/testsuite/g++.dg/lookup/using.C
  3b1be5c1d7f024899683d6b51a3db2aa  gcc/testsuite/g++.dg/lookup/using11.C
  4aa371c96c095ece93ba36b9aa1ab516  gcc/testsuite/g++.dg/lookup/using12.C
*************** e0b7621e55bc08def1537fb40f4102ca  gcc/te
*** 19608,19613 ****
--- 20308,20315 ----
  6c26df12875686b1804ffb0f4bd77408  gcc/testsuite/g++.dg/lookup/using64.C
  109f9257daa57f3721dc498d62169cb6  gcc/testsuite/g++.dg/lookup/using65.C
  d858e2316bc63bb7df9c94f3a0c89324  gcc/testsuite/g++.dg/lookup/using66.C
+ 94a4a82a6b18ee96914050ff567910de  gcc/testsuite/g++.dg/lookup/using66a.C
+ 301c23408aa2bf860b1394d2de53d104  gcc/testsuite/g++.dg/lookup/using67.C
  9be044a2ccf500ea6536f0f7ccbdef45  gcc/testsuite/g++.dg/lookup/using7.C
  05105c11218492c8a6c6943b32a316ec  gcc/testsuite/g++.dg/lookup/using8.C
  94092d782dab067a9255cde42b45a3bf  gcc/testsuite/g++.dg/lookup/using9.C
*************** e2962420140b6e0421de06683f9149c8  gcc/te
*** 19747,19752 ****
--- 20449,20455 ----
  2ef2b691edad0ee8b4dd561c29d3d15c  gcc/testsuite/g++.dg/lto/alias-5_0.C
  50a6e9bd266c58ab5313b04df122c82f  gcc/testsuite/g++.dg/lto/alias-5_1.C
  f03426c068aac3d1ee495b03396ee9be  gcc/testsuite/g++.dg/lto/alias-5_2.c
+ fced8e46c694568be8b50dee557fbd52  gcc/testsuite/g++.dg/lto/alignas1_0.C
  c0f11869332c05465003b67a2f8ebfbe  gcc/testsuite/g++.dg/lto/devirt-13_0.C
  fd3170a6b712de5185af83d1df9fb44a  gcc/testsuite/g++.dg/lto/devirt-14_0.C
  4ea78e172e0e577c99f1b6be4568f2c5  gcc/testsuite/g++.dg/lto/devirt-19_0.C
*************** ee32a0cf6347e7a4d892db61abd203c3  gcc/te
*** 19761,19773 ****
  a44566d13ced1a79770276fc437e80d4  gcc/testsuite/g++.dg/lto/devirt-5_0.C
  78fad15d709c4b90517723468c4f5fe6  gcc/testsuite/g++.dg/lto/devirt-6_0.C
  62ce00e27e2297def984a00e603cd45f  gcc/testsuite/g++.dg/lto/inline-crossmodule-1.h
! 08353ac2e76a0bc6d953f77bca05c308  gcc/testsuite/g++.dg/lto/inline-crossmodule-1_0.C
  a9aa6c16f15dfad712dab4d5e34d1ad3  gcc/testsuite/g++.dg/lto/inline-crossmodule-1_1.C
! c20655d92e3ed73d30af9647f9551f4e  gcc/testsuite/g++.dg/lto/lto.exp
! 95d507e6740bbc0a4bd79e79c59225e8  gcc/testsuite/g++.dg/lto/odr-1_0.C
! 9db1b1f72a71107aab0a900b608189d8  gcc/testsuite/g++.dg/lto/odr-1_1.C
  5c6ba6285c9f905aad689d0df9b3b508  gcc/testsuite/g++.dg/lto/odr-2_0.C
! db984cbf710cf63ef16f5f658c2a0feb  gcc/testsuite/g++.dg/lto/odr-2_1.C
  ae2a21a09162634ab87c5e6c02f1b32a  gcc/testsuite/g++.dg/lto/odr-3_0.C
  99073e3379205965da1f40917399f1ba  gcc/testsuite/g++.dg/lto/odr-3_1.C
  1dc314eb8b3c36997015a00ce06dd68c  gcc/testsuite/g++.dg/lto/odr-4_0.C
--- 20464,20476 ----
  a44566d13ced1a79770276fc437e80d4  gcc/testsuite/g++.dg/lto/devirt-5_0.C
  78fad15d709c4b90517723468c4f5fe6  gcc/testsuite/g++.dg/lto/devirt-6_0.C
  62ce00e27e2297def984a00e603cd45f  gcc/testsuite/g++.dg/lto/inline-crossmodule-1.h
! 88882257febd460b4ecf31b840a232c7  gcc/testsuite/g++.dg/lto/inline-crossmodule-1_0.C
  a9aa6c16f15dfad712dab4d5e34d1ad3  gcc/testsuite/g++.dg/lto/inline-crossmodule-1_1.C
! fba6a2d0efb04f024ff1f0cd44522991  gcc/testsuite/g++.dg/lto/lto.exp
! 51384f349888b259f190c2e578232db0  gcc/testsuite/g++.dg/lto/odr-1_0.C
! d2314a32a8cfaa76cd78c66c44bfc35a  gcc/testsuite/g++.dg/lto/odr-1_1.C
  5c6ba6285c9f905aad689d0df9b3b508  gcc/testsuite/g++.dg/lto/odr-2_0.C
! 0bad154459acfdb076ca3b6502047cbf  gcc/testsuite/g++.dg/lto/odr-2_1.C
  ae2a21a09162634ab87c5e6c02f1b32a  gcc/testsuite/g++.dg/lto/odr-3_0.C
  99073e3379205965da1f40917399f1ba  gcc/testsuite/g++.dg/lto/odr-3_1.C
  1dc314eb8b3c36997015a00ce06dd68c  gcc/testsuite/g++.dg/lto/odr-4_0.C
*************** b4dd44f973b53dae3faddbc3dd5bd634  gcc/te
*** 19780,19785 ****
--- 20483,20491 ----
  366c09064796fa26fbf614a9a0354d57  gcc/testsuite/g++.dg/lto/odr-7_1.C
  cac1beb5973f2ae7f413286aea273726  gcc/testsuite/g++.dg/lto/odr-8_0.C
  06e1b3ad0dd33edf678d2cd0d58c62f0  gcc/testsuite/g++.dg/lto/odr-8_1.C
+ 8b0aae3760bbbdbb56a12a24c02e7d7e  gcc/testsuite/g++.dg/lto/pr101396_0.C
+ ac5555b4df88275d04e41aa95b0aca9a  gcc/testsuite/g++.dg/lto/pr101396_1.C
+ 57e4a1572912531a0ef7ae5e66a36910  gcc/testsuite/g++.dg/lto/pr105399_0.C
  ba9b686c163762488051ec4094a838b2  gcc/testsuite/g++.dg/lto/pr40818_0.C
  08a786b250f802e56e458c7d60a358fc  gcc/testsuite/g++.dg/lto/pr42987_0.C
  1b56fef803fe85ec97121919ad3ba2b9  gcc/testsuite/g++.dg/lto/pr42987_1.C
*************** f401bc7b53e7de843d517ee0ad528749  gcc/te
*** 19985,19991 ****
  3b264755fa54e09c174088a50027eb56  gcc/testsuite/g++.dg/modules/auto-2.h
  d479e8fed74f485f9b8e9b4816402569  gcc/testsuite/g++.dg/modules/auto-2_a.H
  9e4842387b313ba5aa98f2d5cc9a3592  gcc/testsuite/g++.dg/modules/auto-2_b.C
! 72bf9acc19d27deaa12e7c7f1cdabe03  gcc/testsuite/g++.dg/modules/bad-mapper-1.C
  429207e0eb777b4a43a566e8777f6503  gcc/testsuite/g++.dg/modules/bad-mapper-2.C
  aa678a370b72d6bb266600443ab8d76f  gcc/testsuite/g++.dg/modules/bad-mapper-3.C
  757428deb56e7859633745b2778125ea  gcc/testsuite/g++.dg/modules/ben-1.map
--- 20691,20697 ----
  3b264755fa54e09c174088a50027eb56  gcc/testsuite/g++.dg/modules/auto-2.h
  d479e8fed74f485f9b8e9b4816402569  gcc/testsuite/g++.dg/modules/auto-2_a.H
  9e4842387b313ba5aa98f2d5cc9a3592  gcc/testsuite/g++.dg/modules/auto-2_b.C
! 4bad490d7b6fb20e48a9cbf8891a7514  gcc/testsuite/g++.dg/modules/bad-mapper-1.C
  429207e0eb777b4a43a566e8777f6503  gcc/testsuite/g++.dg/modules/bad-mapper-2.C
  aa678a370b72d6bb266600443ab8d76f  gcc/testsuite/g++.dg/modules/bad-mapper-3.C
  757428deb56e7859633745b2778125ea  gcc/testsuite/g++.dg/modules/ben-1.map
*************** f8ae8345e0918908805964c313e6738d  gcc/te
*** 20098,20104 ****
  98e286748a71de409ea8ea91c61bff89  gcc/testsuite/g++.dg/modules/dir-only-3.C
  751bc164d219ba7ac2c0a5df96b7e328  gcc/testsuite/g++.dg/modules/dir-only-4.C
  7e9a537d2bfa5adb9b6da64d83a6f631  gcc/testsuite/g++.dg/modules/dir-recovery.C
! ebeb00e11d9140a28e9529cf3483427c  gcc/testsuite/g++.dg/modules/enum-1_a.C
  07cd39c397707ffd7ecad5f19200c483  gcc/testsuite/g++.dg/modules/enum-1_b.C
  930da5cebd5959d9a725229b25f0d412  gcc/testsuite/g++.dg/modules/enum-2_a.C
  5488ef734856a78f2d7be7a0489c33b5  gcc/testsuite/g++.dg/modules/enum-2_b.C
--- 20804,20810 ----
  98e286748a71de409ea8ea91c61bff89  gcc/testsuite/g++.dg/modules/dir-only-3.C
  751bc164d219ba7ac2c0a5df96b7e328  gcc/testsuite/g++.dg/modules/dir-only-4.C
  7e9a537d2bfa5adb9b6da64d83a6f631  gcc/testsuite/g++.dg/modules/dir-recovery.C
! 02bf8548b63223a7f975e8051966d186  gcc/testsuite/g++.dg/modules/enum-1_a.C
  07cd39c397707ffd7ecad5f19200c483  gcc/testsuite/g++.dg/modules/enum-1_b.C
  930da5cebd5959d9a725229b25f0d412  gcc/testsuite/g++.dg/modules/enum-2_a.C
  5488ef734856a78f2d7be7a0489c33b5  gcc/testsuite/g++.dg/modules/enum-2_b.C
*************** c311149a0a6563fecde09d7efca30c49  gcc/te
*** 20130,20135 ****
--- 20836,20843 ----
  3bad6e7573d6b5409a829e01d0ffe5b0  gcc/testsuite/g++.dg/modules/except-3_b.C
  cb17af4e1eb66bb3cb7788a721007fca  gcc/testsuite/g++.dg/modules/exp-xlate-1_a.H
  0dbb925b1876b5a9913a4082238721d7  gcc/testsuite/g++.dg/modules/exp-xlate-1_b.C
+ 0b4b4c74e5b9f066dfdcb2869b1d2d2d  gcc/testsuite/g++.dg/modules/explicit-bool-1_a.H
+ 2ea5f84f7b8269aa96541a6b022b47ac  gcc/testsuite/g++.dg/modules/explicit-bool-1_b.C
  92949b19e9a68f9337ca11fe99f3370f  gcc/testsuite/g++.dg/modules/export-1.C
  72f93a05f3b46d53e36617fe0e02c955  gcc/testsuite/g++.dg/modules/extern-tpl-1_a.H
  3315098b4e8445874ea0c80fd4fb9568  gcc/testsuite/g++.dg/modules/extern-tpl-1_b.C
*************** aa899969e8b42307961a751a6ebd8f1a  gcc/te
*** 20141,20148 ****
  d71dc02e0dccd34f57e09aa796289c04  gcc/testsuite/g++.dg/modules/flag-1_a.C
  c24d799e9fbfec25ec3006fa0b94eb6e  gcc/testsuite/g++.dg/modules/flag-1_b.C
  d0e66028f7bb2b6764d1f42f5dd90fb0  gcc/testsuite/g++.dg/modules/fn-inline-1_a.C
! dea19e8abb6a9adc691590e33dd5b742  gcc/testsuite/g++.dg/modules/fn-inline-1_b.C
! b95bfe4179a1074b2469bbf640df8507  gcc/testsuite/g++.dg/modules/fn-inline-1_c.C
  aea84e1ee79a28bf76003883aae845d4  gcc/testsuite/g++.dg/modules/freeze-1_a.C
  2630f4c41b5b8de69a1173e8e5098ec9  gcc/testsuite/g++.dg/modules/freeze-1_b.C
  b1593a47c024d179302751243a0ddf7e  gcc/testsuite/g++.dg/modules/freeze-1_c.C
--- 20849,20856 ----
  d71dc02e0dccd34f57e09aa796289c04  gcc/testsuite/g++.dg/modules/flag-1_a.C
  c24d799e9fbfec25ec3006fa0b94eb6e  gcc/testsuite/g++.dg/modules/flag-1_b.C
  d0e66028f7bb2b6764d1f42f5dd90fb0  gcc/testsuite/g++.dg/modules/fn-inline-1_a.C
! 2b3ac2f2b812767f483c020b6499f29b  gcc/testsuite/g++.dg/modules/fn-inline-1_b.C
! aeba68d3b9b08080c5535840d19166b5  gcc/testsuite/g++.dg/modules/fn-inline-1_c.C
  aea84e1ee79a28bf76003883aae845d4  gcc/testsuite/g++.dg/modules/freeze-1_a.C
  2630f4c41b5b8de69a1173e8e5098ec9  gcc/testsuite/g++.dg/modules/freeze-1_b.C
  b1593a47c024d179302751243a0ddf7e  gcc/testsuite/g++.dg/modules/freeze-1_c.C
*************** a019a46920ed46fd8bfa291454b001fd  gcc/te
*** 20188,20195 ****
  5b2fd64582759540fd82f5d665aa8e8b  gcc/testsuite/g++.dg/modules/horcrux-1_a.C
  788de7c389f8b3a13de07086529b3b5e  gcc/testsuite/g++.dg/modules/horcrux-1_b.C
  ea76c720a8e24b78691dffa2eef6d22d  gcc/testsuite/g++.dg/modules/ice-1.C
! 9bfeaf9cef06ca3d110e922527eca7d1  gcc/testsuite/g++.dg/modules/imp-inline-1_a.C
! 2036754df88d4c67e6c2bea5d0faec70  gcc/testsuite/g++.dg/modules/imp-inline-1_b.C
  721b56d9b31aeb6501e728106fd0d0db  gcc/testsuite/g++.dg/modules/imp-member-1_a.C
  c1a2a3390492a95192a3736b25423528  gcc/testsuite/g++.dg/modules/imp-member-1_b.C
  707c639d14f2d2fc997128997ebb51f2  gcc/testsuite/g++.dg/modules/imp-member-1_c.C
--- 20896,20903 ----
  5b2fd64582759540fd82f5d665aa8e8b  gcc/testsuite/g++.dg/modules/horcrux-1_a.C
  788de7c389f8b3a13de07086529b3b5e  gcc/testsuite/g++.dg/modules/horcrux-1_b.C
  ea76c720a8e24b78691dffa2eef6d22d  gcc/testsuite/g++.dg/modules/ice-1.C
! 69549d9d0cd6cda0e027ab2de29bb818  gcc/testsuite/g++.dg/modules/imp-inline-1_a.C
! 9f2f3c61195a26f3fa5aaccee82d8a0b  gcc/testsuite/g++.dg/modules/imp-inline-1_b.C
  721b56d9b31aeb6501e728106fd0d0db  gcc/testsuite/g++.dg/modules/imp-member-1_a.C
  c1a2a3390492a95192a3736b25423528  gcc/testsuite/g++.dg/modules/imp-member-1_b.C
  707c639d14f2d2fc997128997ebb51f2  gcc/testsuite/g++.dg/modules/imp-member-1_c.C
*************** c01dcb11c5d36976b14d9fd7c4516581  gcc/te
*** 20230,20238 ****
  b0fd01fc5ecf329ebeb91627e98dd165  gcc/testsuite/g++.dg/modules/inh-tmpl-ctor-1_b.C
  6f534c4c44593fcb2f1b0e2f899fbc10  gcc/testsuite/g++.dg/modules/init-1_a.C
  0b620f715f0e94e454380a2cffbc8367  gcc/testsuite/g++.dg/modules/init-1_b.C
! d96a13fbbabfd668054b4b668fc429ed  gcc/testsuite/g++.dg/modules/init-2_a.C
! c6de6d840b40fe71295d508f1d4b4b2c  gcc/testsuite/g++.dg/modules/init-2_b.C
! f4b1cec17a5fb61383cbebe8288f37ad  gcc/testsuite/g++.dg/modules/init-2_c.C
  30908e323612f1e35765a18cc68bc403  gcc/testsuite/g++.dg/modules/inst-1_a.C
  c1563babb7ad3b33d7a48b6846276373  gcc/testsuite/g++.dg/modules/inst-1_b.C
  3a7d1df29e3e9ca965b7f8c21b60b189  gcc/testsuite/g++.dg/modules/inst-2_a.C
--- 20938,20946 ----
  b0fd01fc5ecf329ebeb91627e98dd165  gcc/testsuite/g++.dg/modules/inh-tmpl-ctor-1_b.C
  6f534c4c44593fcb2f1b0e2f899fbc10  gcc/testsuite/g++.dg/modules/init-1_a.C
  0b620f715f0e94e454380a2cffbc8367  gcc/testsuite/g++.dg/modules/init-1_b.C
! fc5c7f354d22517c4b6cc16ba51fca03  gcc/testsuite/g++.dg/modules/init-2_a.C
! b0a9dd8b818c5be64dfe629d8ce864fa  gcc/testsuite/g++.dg/modules/init-2_b.C
! 48ca1194272e4126402b9b473151ace0  gcc/testsuite/g++.dg/modules/init-2_c.C
  30908e323612f1e35765a18cc68bc403  gcc/testsuite/g++.dg/modules/inst-1_a.C
  c1563babb7ad3b33d7a48b6846276373  gcc/testsuite/g++.dg/modules/inst-1_b.C
  3a7d1df29e3e9ca965b7f8c21b60b189  gcc/testsuite/g++.dg/modules/inst-2_a.C
*************** f691c09989d6058636ac0eaed83e2c4a  gcc/te
*** 20401,20407 ****
  fead4c02dd484c1c8c2a14069d7982f9  gcc/testsuite/g++.dg/modules/member-def-2_a.C
  5ca5c0fd9d2d85af88b312ba816fa0f3  gcc/testsuite/g++.dg/modules/member-def-2_b.C
  8bc88cbbe340174776ec829fdbb0755b  gcc/testsuite/g++.dg/modules/member-def-2_c.C
! 03bbc2550ace46589a4e535d301f608b  gcc/testsuite/g++.dg/modules/member-def-2_d.C
  2d4e1648bccbafb604c116d49a74a799  gcc/testsuite/g++.dg/modules/memref-1_a.C
  f3e7b8f4ecec1dcfedf0461f3acc9e3e  gcc/testsuite/g++.dg/modules/memref-1_b.C
  2f43b22fe1592145d0ad189a6973f938  gcc/testsuite/g++.dg/modules/merge-10.h
--- 21109,21115 ----
  fead4c02dd484c1c8c2a14069d7982f9  gcc/testsuite/g++.dg/modules/member-def-2_a.C
  5ca5c0fd9d2d85af88b312ba816fa0f3  gcc/testsuite/g++.dg/modules/member-def-2_b.C
  8bc88cbbe340174776ec829fdbb0755b  gcc/testsuite/g++.dg/modules/member-def-2_c.C
! c9dc3bdcba22a854a006e06947118350  gcc/testsuite/g++.dg/modules/member-def-2_d.C
  2d4e1648bccbafb604c116d49a74a799  gcc/testsuite/g++.dg/modules/memref-1_a.C
  f3e7b8f4ecec1dcfedf0461f3acc9e3e  gcc/testsuite/g++.dg/modules/memref-1_b.C
  2f43b22fe1592145d0ad189a6973f938  gcc/testsuite/g++.dg/modules/merge-10.h
*************** de6660e4acc49035a9e5e9821835deb7  gcc/te
*** 20474,20487 ****
  9ee990c6915cfcce4c19d1af207e2718  gcc/testsuite/g++.dg/modules/mod-stamp-1_b.C
  8f791002bd4f86102e51942791f60a5e  gcc/testsuite/g++.dg/modules/mod-stamp-1_c.C
  8c51aa8958a134b9ef359f0045da83f4  gcc/testsuite/g++.dg/modules/mod-stamp-1_d.C
! 94bfe4a9657c23dbc8ce759db1c06da3  gcc/testsuite/g++.dg/modules/mod-sym-1.C
! 34b383c2af14ed128b219ddb2a82216f  gcc/testsuite/g++.dg/modules/mod-sym-2.C
! d14cb80e340ed6b7ddd5e319ea1bb089  gcc/testsuite/g++.dg/modules/mod-sym-3.C
  b66a905fae26f7efc4eaf3f3c60a6b65  gcc/testsuite/g++.dg/modules/mod-tpl-1_a.C
  e83f9a9aca70673da8258ca0631a2125  gcc/testsuite/g++.dg/modules/mod-tpl-1_b.C
  ad9ef329572dab16f2d3d5613538cd3f  gcc/testsuite/g++.dg/modules/mod-tpl-2_a.C
  95ab3577dee99f3d59838a96f1cbf4fc  gcc/testsuite/g++.dg/modules/mod-tpl-2_b.C
! 1561667e80513a985350c588c47355ec  gcc/testsuite/g++.dg/modules/modules.exp
  f49c118362c9a45e801940d0725a767d  gcc/testsuite/g++.dg/modules/mutual-friend.ii
  ebce3d8effe71472ad6b1910c0b435f6  gcc/testsuite/g++.dg/modules/namespace-1_a.C
  c34c17e18223f5c84607e68a5f2dd81a  gcc/testsuite/g++.dg/modules/namespace-1_b.C
--- 21182,21195 ----
  9ee990c6915cfcce4c19d1af207e2718  gcc/testsuite/g++.dg/modules/mod-stamp-1_b.C
  8f791002bd4f86102e51942791f60a5e  gcc/testsuite/g++.dg/modules/mod-stamp-1_c.C
  8c51aa8958a134b9ef359f0045da83f4  gcc/testsuite/g++.dg/modules/mod-stamp-1_d.C
! 2129e3bf78fea701d2748fc468af1932  gcc/testsuite/g++.dg/modules/mod-sym-1.C
! 075fd04762fcd0609fc02a557a3afa98  gcc/testsuite/g++.dg/modules/mod-sym-2.C
! e803cdb19c3e7f7d188196d7bb80cb80  gcc/testsuite/g++.dg/modules/mod-sym-3.C
  b66a905fae26f7efc4eaf3f3c60a6b65  gcc/testsuite/g++.dg/modules/mod-tpl-1_a.C
  e83f9a9aca70673da8258ca0631a2125  gcc/testsuite/g++.dg/modules/mod-tpl-1_b.C
  ad9ef329572dab16f2d3d5613538cd3f  gcc/testsuite/g++.dg/modules/mod-tpl-2_a.C
  95ab3577dee99f3d59838a96f1cbf4fc  gcc/testsuite/g++.dg/modules/mod-tpl-2_b.C
! b866b0c561d4e3823316d2b8b70d1c91  gcc/testsuite/g++.dg/modules/modules.exp
  f49c118362c9a45e801940d0725a767d  gcc/testsuite/g++.dg/modules/mutual-friend.ii
  ebce3d8effe71472ad6b1910c0b435f6  gcc/testsuite/g++.dg/modules/namespace-1_a.C
  c34c17e18223f5c84607e68a5f2dd81a  gcc/testsuite/g++.dg/modules/namespace-1_b.C
*************** a2aa06a6dcdfe826f8453f44b86ccdb9  gcc/te
*** 20528,20538 ****
  3d00837382b2eca4c90e4c08b1ea1938  gcc/testsuite/g++.dg/modules/nsdmi-1_a.C
  6cb7d26fcc0836ec3d62ff53322af1a3  gcc/testsuite/g++.dg/modules/nsdmi-1_b.C
  431c9b35843130b9d9e5706eb1d8a1a0  gcc/testsuite/g++.dg/modules/nsdmi-2.C
! 33a8e3b2d73eadf2ddf53cb10f435343  gcc/testsuite/g++.dg/modules/omp-1_a.C
! 6125a4aa43e54b47468e393abfb80318  gcc/testsuite/g++.dg/modules/omp-1_b.C
! 4c77bd7c0292fc10e62cc381e37f7a23  gcc/testsuite/g++.dg/modules/omp-1_c.C
! 3b7fd8a01c48ee2820c8e0a28b6b5fb6  gcc/testsuite/g++.dg/modules/omp-2_a.C
! f74357d8d48ab8b254a9c5d85e5afc04  gcc/testsuite/g++.dg/modules/omp-2_b.C
  34456a885afd5a670c7b1b36d6100de6  gcc/testsuite/g++.dg/modules/only-1.C
  457cc97eb504e8bcc8d9e91eb9ca090c  gcc/testsuite/g++.dg/modules/only-2.C
  05f020b885cb1696012f8f737d88e9c5  gcc/testsuite/g++.dg/modules/only-3.C
--- 21236,21246 ----
  3d00837382b2eca4c90e4c08b1ea1938  gcc/testsuite/g++.dg/modules/nsdmi-1_a.C
  6cb7d26fcc0836ec3d62ff53322af1a3  gcc/testsuite/g++.dg/modules/nsdmi-1_b.C
  431c9b35843130b9d9e5706eb1d8a1a0  gcc/testsuite/g++.dg/modules/nsdmi-2.C
! 0e6bcf468ade208270e53b7ab784a34d  gcc/testsuite/g++.dg/modules/omp-1_a.C
! c637ff229e67ef7204c508f84142a2dc  gcc/testsuite/g++.dg/modules/omp-1_b.C
! b9e7ffb3665e3229bd0c8486736caacd  gcc/testsuite/g++.dg/modules/omp-1_c.C
! 1f9e12bed1e68eab92d1c7932b4539b7  gcc/testsuite/g++.dg/modules/omp-2_a.C
! df0879669024f953e4247de3f790c925  gcc/testsuite/g++.dg/modules/omp-2_b.C
  34456a885afd5a670c7b1b36d6100de6  gcc/testsuite/g++.dg/modules/only-1.C
  457cc97eb504e8bcc8d9e91eb9ca090c  gcc/testsuite/g++.dg/modules/only-2.C
  05f020b885cb1696012f8f737d88e9c5  gcc/testsuite/g++.dg/modules/only-3.C
*************** e366846489950b58c52df35a27846525  gcc/te
*** 20577,20584 ****
  6dbe3ef9e0f9f227062003ba18e1cc0b  gcc/testsuite/g++.dg/modules/partial-1_a.H
  cc4a92d4663ab8a3eb6403f1efd63522  gcc/testsuite/g++.dg/modules/partial-1_b.C
  fbd0b1dab6ed1e2ae131e2b1eb041193  gcc/testsuite/g++.dg/modules/pmf-1.h
! 7ca52ed66494aace282e9a020f27d054  gcc/testsuite/g++.dg/modules/pmf-1_a.H
! 0ba74499682d415a48c7a572004349f1  gcc/testsuite/g++.dg/modules/pmf-1_b.C
  e687b3fee0938d40c890c91d23a95a1b  gcc/testsuite/g++.dg/modules/pmf-2.h
  2bbfed7b7200f95fcbfd4829ff82c049  gcc/testsuite/g++.dg/modules/pmf-2_a.H
  f979d20df148ee22f4beaaca4b13ab43  gcc/testsuite/g++.dg/modules/pmf-2_b.C
--- 21285,21292 ----
  6dbe3ef9e0f9f227062003ba18e1cc0b  gcc/testsuite/g++.dg/modules/partial-1_a.H
  cc4a92d4663ab8a3eb6403f1efd63522  gcc/testsuite/g++.dg/modules/partial-1_b.C
  fbd0b1dab6ed1e2ae131e2b1eb041193  gcc/testsuite/g++.dg/modules/pmf-1.h
! 27588c87bfcbced49f086af1780f7380  gcc/testsuite/g++.dg/modules/pmf-1_a.H
! f9973f82fe827543518c93e5883577cf  gcc/testsuite/g++.dg/modules/pmf-1_b.C
  e687b3fee0938d40c890c91d23a95a1b  gcc/testsuite/g++.dg/modules/pmf-2.h
  2bbfed7b7200f95fcbfd4829ff82c049  gcc/testsuite/g++.dg/modules/pmf-2_a.H
  f979d20df148ee22f4beaaca4b13ab43  gcc/testsuite/g++.dg/modules/pmf-2_b.C
*************** f979d20df148ee22f4beaaca4b13ab43  gcc/te
*** 20586,20591 ****
--- 21294,21300 ----
  807404dae49679f55eec9277e3160153  gcc/testsuite/g++.dg/modules/pmp-1_b.C
  2234c7539ce1ba0ef576226e3393ce3e  gcc/testsuite/g++.dg/modules/pmp-2.C
  3a56ec9de09c0aba7fb1a5e3c762e714  gcc/testsuite/g++.dg/modules/pmp-3.C
+ 16afad71e1a1a8502b6e6aec951409cc  gcc/testsuite/g++.dg/modules/pr101582-1.C
  56ba9e2a41b995724a511df79d8df541  gcc/testsuite/g++.dg/modules/pr98531-1.h
  7155fba8679861dc6ac8879b5f49a6eb  gcc/testsuite/g++.dg/modules/pr98531-1_a.H
  db36409e89afb58e627178caf0f3d7d5  gcc/testsuite/g++.dg/modules/pr98531-1_b.C
*************** c080c59625958504bf04e1d791f2e185  gcc/te
*** 20734,20739 ****
--- 21443,21453 ----
  ccd007366f5705a31d52fe9c5bab9141  gcc/testsuite/g++.dg/modules/static-1_c.C
  ead144c6dd6a554943704f3fcabf2981  gcc/testsuite/g++.dg/modules/std-1_a.C
  44eb33e5fba5df9a2f785daa5a7a97df  gcc/testsuite/g++.dg/modules/std-1_b.C
+ f2f914e81d0e558e16d8c2b531a02840  gcc/testsuite/g++.dg/modules/std-subst-2.C
+ bec32861cc98aa5a0e141a075afc4d0b  gcc/testsuite/g++.dg/modules/std-subst-3.C
+ 340ce8cf3bf0e1640f62280dab48c289  gcc/testsuite/g++.dg/modules/std-subst-4_a.C
+ 1e084f664fd944fcee6a6a2215258bf7  gcc/testsuite/g++.dg/modules/std-subst-4_b.C
+ 6fdedd7882608c63b53359f6e630bebc  gcc/testsuite/g++.dg/modules/std-subst-4_c.C
  4a699eee76dc46f6a20c7f5f5797357c  gcc/testsuite/g++.dg/modules/stdio-1_a.H
  37612669466de5cfca7ce69e87c24b51  gcc/testsuite/g++.dg/modules/stdio-1_b.C
  ca9003bc2800bcf7617b612f1b9ccade  gcc/testsuite/g++.dg/modules/stdns_a.C
*************** ef28b2634fdf892dda62a1cb87d77d5b  gcc/te
*** 20745,20758 ****
  807dee9ffcea2ce4eaf5377a88b1a0d1  gcc/testsuite/g++.dg/modules/sv-1.h
  ccd47d1ef1d5748e9fa9556e5be38e88  gcc/testsuite/g++.dg/modules/sv-1_a.C
  f3a297562b64c48a9d44578c1d4e2f17  gcc/testsuite/g++.dg/modules/sv-1_b.C
! b0292568f9efa5f019059ac51097f343  gcc/testsuite/g++.dg/modules/sym-subst-1.C
  ab796623dd9b8d4bca278f341844c137  gcc/testsuite/g++.dg/modules/sym-subst-2_a.C
! 6f3d962042e8a9b297e9174619c8b422  gcc/testsuite/g++.dg/modules/sym-subst-2_b.C
! 200d03ca6c9ce0cbb868c852268c15cf  gcc/testsuite/g++.dg/modules/sym-subst-3_a.C
! 35ff6fd270f4bda312c8418f732abf1a  gcc/testsuite/g++.dg/modules/sym-subst-3_b.C
! 1d6c355ba813e84fd809ea5858712397  gcc/testsuite/g++.dg/modules/sym-subst-4.C
! fced0c8129b7ead5817381f8cac1528f  gcc/testsuite/g++.dg/modules/sym-subst-5.C
! 89cece6e118fd6f32c2ef1dcfb69d09a  gcc/testsuite/g++.dg/modules/sym-subst-6.C
  fbd4c9345f73c8edbbeb1bfe02293ed7  gcc/testsuite/g++.dg/modules/sys/inext-1.H
  ea4b5904f70eebbbb3d51fadf842357a  gcc/testsuite/g++.dg/modules/tdef-1_a.C
  2a121abd95086507345a5cc1fea0ba42  gcc/testsuite/g++.dg/modules/tdef-1_b.C
--- 21459,21472 ----
  807dee9ffcea2ce4eaf5377a88b1a0d1  gcc/testsuite/g++.dg/modules/sv-1.h
  ccd47d1ef1d5748e9fa9556e5be38e88  gcc/testsuite/g++.dg/modules/sv-1_a.C
  f3a297562b64c48a9d44578c1d4e2f17  gcc/testsuite/g++.dg/modules/sv-1_b.C
! 6989d506a1c0f2f4cbf5a0ce70143664  gcc/testsuite/g++.dg/modules/sym-subst-1.C
  ab796623dd9b8d4bca278f341844c137  gcc/testsuite/g++.dg/modules/sym-subst-2_a.C
! 926ead74bc2a1237d354436c0497a81f  gcc/testsuite/g++.dg/modules/sym-subst-2_b.C
! 4ad78c35df612f13279220fe6c4ea9dd  gcc/testsuite/g++.dg/modules/sym-subst-3_a.C
! 268594668f5869f351080cbbeea3b1bd  gcc/testsuite/g++.dg/modules/sym-subst-3_b.C
! b305a2ddbd9037e08a2b28849be93359  gcc/testsuite/g++.dg/modules/sym-subst-4.C
! b16f7be3671fae9aa6d895a84cc2dd2f  gcc/testsuite/g++.dg/modules/sym-subst-5.C
! bb081f69fb6114236592fcbfb3007d95  gcc/testsuite/g++.dg/modules/sym-subst-6.C
  fbd4c9345f73c8edbbeb1bfe02293ed7  gcc/testsuite/g++.dg/modules/sys/inext-1.H
  ea4b5904f70eebbbb3d51fadf842357a  gcc/testsuite/g++.dg/modules/tdef-1_a.C
  2a121abd95086507345a5cc1fea0ba42  gcc/testsuite/g++.dg/modules/tdef-1_b.C
*************** c3a597a86ab8aea976e73b9fb71e8904  gcc/te
*** 20828,20840 ****
  bfcdf70f7788a8dca2494d7d8d98cf17  gcc/testsuite/g++.dg/modules/tpl-friend-merge-1_d.C
  2f2e36fe2c5786eb40d564742c4b2b2d  gcc/testsuite/g++.dg/modules/tpl-friend-merge-1_e.C
  29059418af14e2e24bbe106c907ce051  gcc/testsuite/g++.dg/modules/tpl-friend-merge-1_f.C
! d1ae70fdfdc2e0a3b7413557b93e6667  gcc/testsuite/g++.dg/modules/tpl-spec-1_a.C
  a27985b4d2c331b6fd3664ba0db91db0  gcc/testsuite/g++.dg/modules/tpl-spec-1_b.C
  fca545a9a5246c83ffa778552ee9c057  gcc/testsuite/g++.dg/modules/tpl-spec-2_a.C
! 9cdc38cd1de1b774fd5bd5525506964c  gcc/testsuite/g++.dg/modules/tpl-spec-2_b.C
  5393afd28f9dc22b5680b318763bc052  gcc/testsuite/g++.dg/modules/tpl-spec-2_c.C
! 73921f79aa0159341e32d381478ee979  gcc/testsuite/g++.dg/modules/tpl-spec-2_d.C
! 09bb3f251de36d1eac6ff3b3201d1b2c  gcc/testsuite/g++.dg/modules/tpl-spec-3_a.C
  0f7ebd9f663a5f2653614fca8ecc80b7  gcc/testsuite/g++.dg/modules/tpl-spec-3_b.C
  0b779eb3f6cd92dc02ef75401fecfcea  gcc/testsuite/g++.dg/modules/tpl-spec-4_a.C
  bf06ee8fbede92aacd5ecf4a5c769327  gcc/testsuite/g++.dg/modules/tpl-spec-4_b.C
--- 21542,21554 ----
  bfcdf70f7788a8dca2494d7d8d98cf17  gcc/testsuite/g++.dg/modules/tpl-friend-merge-1_d.C
  2f2e36fe2c5786eb40d564742c4b2b2d  gcc/testsuite/g++.dg/modules/tpl-friend-merge-1_e.C
  29059418af14e2e24bbe106c907ce051  gcc/testsuite/g++.dg/modules/tpl-friend-merge-1_f.C
! a2ef21998bce68180a4877e9083a344b  gcc/testsuite/g++.dg/modules/tpl-spec-1_a.C
  a27985b4d2c331b6fd3664ba0db91db0  gcc/testsuite/g++.dg/modules/tpl-spec-1_b.C
  fca545a9a5246c83ffa778552ee9c057  gcc/testsuite/g++.dg/modules/tpl-spec-2_a.C
! 2c8455492adca490bfd60c0d009a3122  gcc/testsuite/g++.dg/modules/tpl-spec-2_b.C
  5393afd28f9dc22b5680b318763bc052  gcc/testsuite/g++.dg/modules/tpl-spec-2_c.C
! fae4c4164e213525bbfe21c8f21b0935  gcc/testsuite/g++.dg/modules/tpl-spec-2_d.C
! 359406cd3ddc352ad7ebb3359e4438dc  gcc/testsuite/g++.dg/modules/tpl-spec-3_a.C
  0f7ebd9f663a5f2653614fca8ecc80b7  gcc/testsuite/g++.dg/modules/tpl-spec-3_b.C
  0b779eb3f6cd92dc02ef75401fecfcea  gcc/testsuite/g++.dg/modules/tpl-spec-4_a.C
  bf06ee8fbede92aacd5ecf4a5c769327  gcc/testsuite/g++.dg/modules/tpl-spec-4_b.C
*************** fcd88fa087afa6876483c9180896600f  gcc/te
*** 20875,20881 ****
  b56edd1f3ed182e1e681ca48a66740bf  gcc/testsuite/g++.dg/modules/unnamed-2.C
  e4a6306468bce09f1c68b8841c79217d  gcc/testsuite/g++.dg/modules/used-1_a.H
  59b1ee96e3967482f0bbb3d3c8233b09  gcc/testsuite/g++.dg/modules/used-1_b.H
! d0a65a400403c2a39b1e17cff3a2376c  gcc/testsuite/g++.dg/modules/used-1_c.C
  d1bb4b9f574e484059e6aed78c592b09  gcc/testsuite/g++.dg/modules/using-1_a.C
  9117c391ec874e241340d0076cae8490  gcc/testsuite/g++.dg/modules/using-1_b.C
  fb3dbacda6463c6d08dd383a53fee3f7  gcc/testsuite/g++.dg/modules/using-1_c.C
--- 21589,21595 ----
  b56edd1f3ed182e1e681ca48a66740bf  gcc/testsuite/g++.dg/modules/unnamed-2.C
  e4a6306468bce09f1c68b8841c79217d  gcc/testsuite/g++.dg/modules/used-1_a.H
  59b1ee96e3967482f0bbb3d3c8233b09  gcc/testsuite/g++.dg/modules/used-1_b.H
! 0931ec969846c0231395079d6d6cd55b  gcc/testsuite/g++.dg/modules/used-1_c.C
  d1bb4b9f574e484059e6aed78c592b09  gcc/testsuite/g++.dg/modules/using-1_a.C
  9117c391ec874e241340d0076cae8490  gcc/testsuite/g++.dg/modules/using-1_b.C
  fb3dbacda6463c6d08dd383a53fee3f7  gcc/testsuite/g++.dg/modules/using-1_c.C
*************** eb2ad12d4827c51d7751ae4192a8fae0  gcc/te
*** 20901,20918 ****
  5f8cf2838a372b40a928ec329398609d  gcc/testsuite/g++.dg/modules/var-tpl-concept-1.h
  adc4f32bd70209871e3deed494628f03  gcc/testsuite/g++.dg/modules/var-tpl-concept-1_a.C
  5363cb6d035a0839de3364cef17f901a  gcc/testsuite/g++.dg/modules/var-tpl-concept-1_b.C
! bfda5ff6cc03bf07bd84d1dc1cb444ee  gcc/testsuite/g++.dg/modules/virt-1_a.C
  ef900fef308d0ecbd503017332905389  gcc/testsuite/g++.dg/modules/virt-1_b.C
! 73aabdf470b341374dca4d3970fe98d9  gcc/testsuite/g++.dg/modules/virt-2_a.C
! fff4d217ed50f7d0061235e42d569374  gcc/testsuite/g++.dg/modules/virt-2_b.C
! c33c2c38a1bcbf161aef9468e589415a  gcc/testsuite/g++.dg/modules/virt-2_c.C
  1127461faa60a09d4c3f0ce98cd9d08b  gcc/testsuite/g++.dg/modules/vmort-1_a.C
  e4510618d0f219adedac6528c5d88023  gcc/testsuite/g++.dg/modules/vmort-1_b.C
  fd51a80db9cdb5d0aca98cd21e6b7bb6  gcc/testsuite/g++.dg/modules/vmort-2_a.C
  d3b9ed9f839fcb523afc599b67ede85f  gcc/testsuite/g++.dg/modules/vmort-2_b.C
  7782b9a66ea06a005a6c0688dd52799d  gcc/testsuite/g++.dg/modules/vmort-2_c.C
! 7bb05084bc922edff1737dd0dc8d7f00  gcc/testsuite/g++.dg/modules/vtt-1_a.C
! 271c66801ebcec5dedc002f7ea1634ad  gcc/testsuite/g++.dg/modules/vtt-1_b.C
  fb2dff43314c2b3715f353986395f3c8  gcc/testsuite/g++.dg/modules/vtt-1_c.C
  61a0de9a0b291c9828e798d288cd1d63  gcc/testsuite/g++.dg/modules/vtt-2.h
  1f7a42538a18498e42ad3605fc45068e  gcc/testsuite/g++.dg/modules/vtt-2_a.H
--- 21615,21632 ----
  5f8cf2838a372b40a928ec329398609d  gcc/testsuite/g++.dg/modules/var-tpl-concept-1.h
  adc4f32bd70209871e3deed494628f03  gcc/testsuite/g++.dg/modules/var-tpl-concept-1_a.C
  5363cb6d035a0839de3364cef17f901a  gcc/testsuite/g++.dg/modules/var-tpl-concept-1_b.C
! c1b40f22d6234f4c5283687a112d1f6e  gcc/testsuite/g++.dg/modules/virt-1_a.C
  ef900fef308d0ecbd503017332905389  gcc/testsuite/g++.dg/modules/virt-1_b.C
! e0772c636c0bb479773598528943bc1c  gcc/testsuite/g++.dg/modules/virt-2_a.C
! 35a755a2f769813335533080fb611f80  gcc/testsuite/g++.dg/modules/virt-2_b.C
! 04591658e0d8d0795e7f23f57ba2c242  gcc/testsuite/g++.dg/modules/virt-2_c.C
  1127461faa60a09d4c3f0ce98cd9d08b  gcc/testsuite/g++.dg/modules/vmort-1_a.C
  e4510618d0f219adedac6528c5d88023  gcc/testsuite/g++.dg/modules/vmort-1_b.C
  fd51a80db9cdb5d0aca98cd21e6b7bb6  gcc/testsuite/g++.dg/modules/vmort-2_a.C
  d3b9ed9f839fcb523afc599b67ede85f  gcc/testsuite/g++.dg/modules/vmort-2_b.C
  7782b9a66ea06a005a6c0688dd52799d  gcc/testsuite/g++.dg/modules/vmort-2_c.C
! 60e329bd52c8187bb45ca68ad79a6328  gcc/testsuite/g++.dg/modules/vtt-1_a.C
! fbc02abf425398867310e78477572873  gcc/testsuite/g++.dg/modules/vtt-1_b.C
  fb2dff43314c2b3715f353986395f3c8  gcc/testsuite/g++.dg/modules/vtt-1_c.C
  61a0de9a0b291c9828e798d288cd1d63  gcc/testsuite/g++.dg/modules/vtt-2.h
  1f7a42538a18498e42ad3605fc45068e  gcc/testsuite/g++.dg/modules/vtt-2_a.H
*************** d94a040fd383960841da3874312807b4  gcc/te
*** 20948,20954 ****
  6df9a71a58dbf8146adfa33a7c18858e  gcc/testsuite/g++.dg/modules/xtreme-tr1_a.H
  847138241047c39840018b1c3eb8bd7d  gcc/testsuite/g++.dg/modules/xtreme-tr1_b.C
  328d5426468f09a9a108df6191684b78  gcc/testsuite/g++.dg/no-stack-protector-attr-2.C
! 7d6c1b26f4587930274e314a38ba5659  gcc/testsuite/g++.dg/no-stack-protector-attr-3.C
  020cc92178f45d27f797218781bfe02c  gcc/testsuite/g++.dg/no-stack-protector-attr.C
  8782d87c3ab6e3b20b317d9f1492e146  gcc/testsuite/g++.dg/opt/20050511-1.C
  5e1f1ec360f2ae54c78ee347de5c583f  gcc/testsuite/g++.dg/opt/20181025-1.C
--- 21662,21668 ----
  6df9a71a58dbf8146adfa33a7c18858e  gcc/testsuite/g++.dg/modules/xtreme-tr1_a.H
  847138241047c39840018b1c3eb8bd7d  gcc/testsuite/g++.dg/modules/xtreme-tr1_b.C
  328d5426468f09a9a108df6191684b78  gcc/testsuite/g++.dg/no-stack-protector-attr-2.C
! 7f74fa2cbb8a6b5d2e3cfba656e474c3  gcc/testsuite/g++.dg/no-stack-protector-attr-3.C
  020cc92178f45d27f797218781bfe02c  gcc/testsuite/g++.dg/no-stack-protector-attr.C
  8782d87c3ab6e3b20b317d9f1492e146  gcc/testsuite/g++.dg/opt/20050511-1.C
  5e1f1ec360f2ae54c78ee347de5c583f  gcc/testsuite/g++.dg/opt/20181025-1.C
*************** b879c3972fcf09a0bef4781d973dea10  gcc/te
*** 20992,20997 ****
--- 21706,21712 ----
  6ce6781eee8599f8f5762ae874d368af  gcc/testsuite/g++.dg/opt/const4.C
  8acf967b641c44d3b713b18abd459981  gcc/testsuite/g++.dg/opt/const5.C
  77ef3f0315a1d75cc03361805c714b79  gcc/testsuite/g++.dg/opt/const6.C
+ 5bc6618e030e397aeed7cf91aa526f63  gcc/testsuite/g++.dg/opt/const7.C
  8a6577c2e8b91d69c2d55b8ed2488fc8  gcc/testsuite/g++.dg/opt/copysign-1.C
  5c2d124413a2eaf9d343379ef14570a2  gcc/testsuite/g++.dg/opt/covariant1.C
  2b8e568482a37c0e98a0154aa649f58b  gcc/testsuite/g++.dg/opt/crash1.C
*************** e94377182a1dedb230f53db874897364  gcc/te
*** 21092,21097 ****
--- 21807,21813 ----
  b5ea3678b95f88606bb0d37ee1f58a68  gcc/testsuite/g++.dg/opt/nrv19.C
  360692bdb55de35cb68717ceb6c51fd7  gcc/testsuite/g++.dg/opt/nrv2.C
  b95995f2a1b93421818fb349cdf03d17  gcc/testsuite/g++.dg/opt/nrv20.C
+ 815c4f8d7b5dba8a23289fdf4b87b3c5  gcc/testsuite/g++.dg/opt/nrv21.C
  42adcc800d5d2029a2b831e1453e8f32  gcc/testsuite/g++.dg/opt/nrv3.C
  b2773b15109a2fc43572a97edf29b236  gcc/testsuite/g++.dg/opt/nrv4.C
  13481653ab41a707cb4c4eed2199c57f  gcc/testsuite/g++.dg/opt/nrv5.C
*************** b16ae5b90244df2461a7c023c7f3c88e  gcc/te
*** 21104,21114 ****
--- 21820,21842 ----
  cf9e1c6c02a4aee1d10b86325166de66  gcc/testsuite/g++.dg/opt/pmf1.C
  b7d92853a5faa70c9b8f4e124609991d  gcc/testsuite/g++.dg/opt/pr100148.C
  b599b75470b905e959a7172363b13d69  gcc/testsuite/g++.dg/opt/pr100254.C
+ 5f80ce2bf0e46962ab3163d51184a71d  gcc/testsuite/g++.dg/opt/pr100469.C
+ a20957cb224400b82f49f893cfc5697b  gcc/testsuite/g++.dg/opt/pr100541-1.C
+ ff7512105427d8f290f51b22d0cae001  gcc/testsuite/g++.dg/opt/pr100541-2.C
  31aad10c0131b0e4e3859efb82f712ed  gcc/testsuite/g++.dg/opt/pr100852.C
+ 49c1ecbb3aacea3160338db0218e73d2  gcc/testsuite/g++.dg/opt/pr101162.C
+ dca6feccf1e7e07ee6370b06a42e6810  gcc/testsuite/g++.dg/opt/pr101597.C
  42a75325fdbce13b49d3755c902bfa38  gcc/testsuite/g++.dg/opt/pr102970.C
+ abd8b7af1368e21ac1e33d4374b73a24  gcc/testsuite/g++.dg/opt/pr103742.C
+ 102b63bfa00dba7950bea333464a023e  gcc/testsuite/g++.dg/opt/pr103756.C
+ d136e38dee13129995acfc6e78e53437  gcc/testsuite/g++.dg/opt/pr103842.C
+ 5df975dd16407b09ce95f607721a896a  gcc/testsuite/g++.dg/opt/pr103984.C
+ e141ab3f56d2a4720067fd492381fe2e  gcc/testsuite/g++.dg/opt/pr103989.C
+ b503536c5b760d3b8bf52f3b09253012  gcc/testsuite/g++.dg/opt/pr104334.C
  4821bda808ec2c117c297e4f155752e3  gcc/testsuite/g++.dg/opt/pr104681.C
  a05f3fe9e917eacdb552f9ade1d73f34  gcc/testsuite/g++.dg/opt/pr104880.C
  bad9496f071793031ea4ab93b911a483  gcc/testsuite/g++.dg/opt/pr105235-1.C
+ 793a7a376d70ab6e7e1088ceec9a6b33  gcc/testsuite/g++.dg/opt/pr105306.C
  2896f5b1a96dd9fabb1dbb65cb4c5921  gcc/testsuite/g++.dg/opt/pr13066-1.C
  4f87f86b9f018cae74888e97468b2fe0  gcc/testsuite/g++.dg/opt/pr14029.C
  8fb7e68e9e9b5eb02628e03f5333e645  gcc/testsuite/g++.dg/opt/pr14888.C
*************** f3354bc934b81b5fc93ff5fd02c9dc9a  gcc/te
*** 21182,21188 ****
  ce12e27bbb9344379eb93fb80a67ab97  gcc/testsuite/g++.dg/opt/pr47366.C
  4479af75349155b0e00d76a989293cee  gcc/testsuite/g++.dg/opt/pr47615.C
  32b9348acc365a25c1e63908184a61bc  gcc/testsuite/g++.dg/opt/pr47632.C
! 33506a150063a0e5ef4bd82b202852d9  gcc/testsuite/g++.dg/opt/pr47639.c
  16fdb00e82f91a3d2db5392bf143a395  gcc/testsuite/g++.dg/opt/pr48272.C
  796f76c253276afe0a9f65af8ddbd45e  gcc/testsuite/g++.dg/opt/pr48273.C
  5d73a18e7b1b6d012190b19dd2ea56b1  gcc/testsuite/g++.dg/opt/pr48302.C
--- 21910,21916 ----
  ce12e27bbb9344379eb93fb80a67ab97  gcc/testsuite/g++.dg/opt/pr47366.C
  4479af75349155b0e00d76a989293cee  gcc/testsuite/g++.dg/opt/pr47615.C
  32b9348acc365a25c1e63908184a61bc  gcc/testsuite/g++.dg/opt/pr47632.C
! 158e654669b1bc90c5ca7a2138b832c1  gcc/testsuite/g++.dg/opt/pr47639.C
  16fdb00e82f91a3d2db5392bf143a395  gcc/testsuite/g++.dg/opt/pr48272.C
  796f76c253276afe0a9f65af8ddbd45e  gcc/testsuite/g++.dg/opt/pr48273.C
  5d73a18e7b1b6d012190b19dd2ea56b1  gcc/testsuite/g++.dg/opt/pr48302.C
*************** f75f3f4635c40b43f89ebcbc943c4cac  gcc/te
*** 21322,21333 ****
--- 22050,22066 ----
  8c9f6ff817f97b4a9a7a5efc31b4c885  gcc/testsuite/g++.dg/opt/pr94223.C
  ead957b0577914db81f592ac5a260cc6  gcc/testsuite/g++.dg/opt/pr94441.C
  6df5004704796dc776e18fced94a434f  gcc/testsuite/g++.dg/opt/pr94468.C
+ 37bafc89b07fae686fd0375c877bb6ec  gcc/testsuite/g++.dg/opt/pr94589-1.C
+ 058fea5f8549aa92b69d316fbec84f04  gcc/testsuite/g++.dg/opt/pr94589-2.C
+ fbf31592874c852b0610411198cae900  gcc/testsuite/g++.dg/opt/pr94589-3.C
+ c8d100425b84f9c19e66b664f68a043b  gcc/testsuite/g++.dg/opt/pr94589-4.C
  dacd41d6dbf618fb881768d6a068d7f1  gcc/testsuite/g++.dg/opt/pr94618.C
  68efdf843522ab51908aa0aba5c03000  gcc/testsuite/g++.dg/opt/pr95080.C
  676550989cb8fb3f894f5522d6476c32  gcc/testsuite/g++.dg/opt/pr95528.C
  2ae3bd1284401f329edadc0752cf28be  gcc/testsuite/g++.dg/opt/pr96194.C
  2f5723dc00ebdebb54dc9e15de17ee39  gcc/testsuite/g++.dg/opt/pr96354.C
  dcb0e957efba822ddb1534eef4cc12de  gcc/testsuite/g++.dg/opt/pr96722.C
+ 499506770018be9affe6ec8762622f4c  gcc/testsuite/g++.dg/opt/pr96780.C
  4b753129b68995eae44509f12e5d1b7f  gcc/testsuite/g++.dg/opt/pr97315-1.C
  79549a33c6d768c44bac8faf72935e35  gcc/testsuite/g++.dg/opt/pr97767.C
  4ef3daa69807c9e8a0d77dc39f9f81d5  gcc/testsuite/g++.dg/opt/pr98130.C
*************** c053dc5cfc80e82d4a13e2b993212e58  gcc/te
*** 21341,21346 ****
--- 22074,22080 ----
  841b31767df25235634c79f15b505601  gcc/testsuite/g++.dg/opt/pr99034.C
  ddf3cfcb6556d3f65d76b61d63c8f12d  gcc/testsuite/g++.dg/opt/pr99305.C
  458d1c1eb655d901fab6401cefc014fb  gcc/testsuite/g++.dg/opt/pr99456.C
+ a4227d5d00dec67a978358bdf054ef8e  gcc/testsuite/g++.dg/opt/pr99728.C
  1451eba24eea82cbd0c1ab87885c0f77  gcc/testsuite/g++.dg/opt/preinc1.C
  0841088f825be785d32663d712ecf675  gcc/testsuite/g++.dg/opt/ptrintsum1.C
  8ceccf2f02b3f64f372600e32148e146  gcc/testsuite/g++.dg/opt/ptrmem1.C
*************** fdfa290c70a18c73e24a679861f4474f  gcc/te
*** 21482,21488 ****
  65eddadb762992e1d04f2d942d692aeb  gcc/testsuite/g++.dg/other/cv_func4.C
  387b148a5035f81e24623a420d7735af  gcc/testsuite/g++.dg/other/cxa-atexit1.C
  3b677387cd5cf367fe538e8a673a0c0f  gcc/testsuite/g++.dg/other/darwin-cfstring1.C
- bd1c35be302338df14b1aa330813797d  gcc/testsuite/g++.dg/other/darwin-minversion-1.C
  5af94f8039df2b744ff5d415b5e74405  gcc/testsuite/g++.dg/other/datasec1.C
  9e7395f0094f6f5737290e2034fc9ed7  gcc/testsuite/g++.dg/other/default1.C
  cd13b43d765a4c8ba515ee87ed6f4d09  gcc/testsuite/g++.dg/other/default10.C
--- 22216,22221 ----
*************** eda67a8394a25b381e47971e78264eba  gcc/te
*** 21589,21596 ****
  3ca5017faf45f39326ff4e30a1ec1ba8  gcc/testsuite/g++.dg/other/i386-1.C
  9913a24914ce11f6a0606c70ed58cb96  gcc/testsuite/g++.dg/other/i386-10.C
  8925c3efd781e76570846cfd6f817fd2  gcc/testsuite/g++.dg/other/i386-11.C
! db8aca3c9d9b8318c58ee47494cb2c19  gcc/testsuite/g++.dg/other/i386-2.C
! 4c76b6a25ee613f5e0fd1a83e397e1d1  gcc/testsuite/g++.dg/other/i386-3.C
  a4ad4c2cb3c1448496351241a77aedb7  gcc/testsuite/g++.dg/other/i386-4.C
  a32a5af1b4c57aabcbdaa817835a698d  gcc/testsuite/g++.dg/other/i386-7.C
  b3ef431f4cf4776208d7042aff2ddb83  gcc/testsuite/g++.dg/other/i386-8.C
--- 22322,22329 ----
  3ca5017faf45f39326ff4e30a1ec1ba8  gcc/testsuite/g++.dg/other/i386-1.C
  9913a24914ce11f6a0606c70ed58cb96  gcc/testsuite/g++.dg/other/i386-10.C
  8925c3efd781e76570846cfd6f817fd2  gcc/testsuite/g++.dg/other/i386-11.C
! 2086b5b366ae30f08951f7ec0d621892  gcc/testsuite/g++.dg/other/i386-2.C
! 75657a09fab5874092430b19f8416d79  gcc/testsuite/g++.dg/other/i386-3.C
  a4ad4c2cb3c1448496351241a77aedb7  gcc/testsuite/g++.dg/other/i386-4.C
  a32a5af1b4c57aabcbdaa817835a698d  gcc/testsuite/g++.dg/other/i386-7.C
  b3ef431f4cf4776208d7042aff2ddb83  gcc/testsuite/g++.dg/other/i386-8.C
*************** da1ba255024d00bac0a97620f4ffaba7  gcc/te
*** 21642,21647 ****
--- 22375,22381 ----
  983bbfea996145b298440ca410c9fb19  gcc/testsuite/g++.dg/other/operator4.C
  6be92beab52e0fd0c83b0cabc3f7e83a  gcc/testsuite/g++.dg/other/packed1.C
  b693bdc6d9288cba68d5f6c6be19b743  gcc/testsuite/g++.dg/other/pr100580.C
+ a7f0f2c1d80a46d3283257e09b5b8611  gcc/testsuite/g++.dg/other/pr104989.C
  f43f96bf3c378817b959c22aee3466c0  gcc/testsuite/g++.dg/other/pr20366.C
  972110c0d861ecae87ae8ad4d861dd0f  gcc/testsuite/g++.dg/other/pr22003.C
  57901344b69ec7b216bf1128cc5a7242  gcc/testsuite/g++.dg/other/pr22358.C
*************** f915e6694b9e2771166f40017bbcf352  gcc/te
*** 21708,21718 ****
  9c615713b6e4a30e77d2cb7350fd51d9  gcc/testsuite/g++.dg/other/pr82032.C
  6802bc2f6787e1e5332cc0a3ef03e6f6  gcc/testsuite/g++.dg/other/pr84792-1.C
  e55644b29ef2ddb4f407f2db5d2d9134  gcc/testsuite/g++.dg/other/pr84792-2.C
  13c0075f5c1ed3cc04f6b8285a72ad36  gcc/testsuite/g++.dg/other/pr86669.C
  82a5633c4b93f75de45b869ecaed0e9b  gcc/testsuite/g++.dg/other/pr87398.C
  5f6ab4128e11120f688850f44d53ecaf  gcc/testsuite/g++.dg/other/pr87574.C
  df676a65c96d13e14bff94fbda29e6ef  gcc/testsuite/g++.dg/other/pr87916.C
! 9ecd0075397474bd19d0304fcb545393  gcc/testsuite/g++.dg/other/pr88187.C
  e716b31d86bef260a0d00fd877fbc9cf  gcc/testsuite/g++.dg/other/pr88568.C
  24ac76b9cd1e6471539e65dc34e63be3  gcc/testsuite/g++.dg/other/pr89560.C
  a0e823e69e02d21c09fddd6ef53d51e3  gcc/testsuite/g++.dg/other/pr89692.C
--- 22442,22453 ----
  9c615713b6e4a30e77d2cb7350fd51d9  gcc/testsuite/g++.dg/other/pr82032.C
  6802bc2f6787e1e5332cc0a3ef03e6f6  gcc/testsuite/g++.dg/other/pr84792-1.C
  e55644b29ef2ddb4f407f2db5d2d9134  gcc/testsuite/g++.dg/other/pr84792-2.C
+ c9d6e6790690fcee671a26cac51fa9b4  gcc/testsuite/g++.dg/other/pr84964.C
  13c0075f5c1ed3cc04f6b8285a72ad36  gcc/testsuite/g++.dg/other/pr86669.C
  82a5633c4b93f75de45b869ecaed0e9b  gcc/testsuite/g++.dg/other/pr87398.C
  5f6ab4128e11120f688850f44d53ecaf  gcc/testsuite/g++.dg/other/pr87574.C
  df676a65c96d13e14bff94fbda29e6ef  gcc/testsuite/g++.dg/other/pr87916.C
! b08d9c3341cae35c6a77c06588038f0b  gcc/testsuite/g++.dg/other/pr88187.C
  e716b31d86bef260a0d00fd877fbc9cf  gcc/testsuite/g++.dg/other/pr88568.C
  24ac76b9cd1e6471539e65dc34e63be3  gcc/testsuite/g++.dg/other/pr89560.C
  a0e823e69e02d21c09fddd6ef53d51e3  gcc/testsuite/g++.dg/other/pr89692.C
*************** c5fc831f4230513b5f02a1aad917c686  gcc/te
*** 21743,21749 ****
  6c164a00f937e457895437563cb4fbc2  gcc/testsuite/g++.dg/other/s390-1.C
  97e48186eadf96baa75dab50f7628d6a  gcc/testsuite/g++.dg/other/scope1.C
  a2a80603fcddfe63208d0fe7940f2149  gcc/testsuite/g++.dg/other/semicolon.C
- a9957b37b938af52bd091dea4f661da6  gcc/testsuite/g++.dg/other/spu2vmx-1.C
  4db8e5745090b406932240672ccb8e5c  gcc/testsuite/g++.dg/other/sse2-pr85572-1.C
  7101dd3d8948d81899593208c95009c1  gcc/testsuite/g++.dg/other/sse2-pr85572-2.C
  f9ca50b6e63332cd9218b158f25436d8  gcc/testsuite/g++.dg/other/sse4-pr85572-1.C
--- 22478,22483 ----
*************** e28afd768a2d5516c9bb5a7357c72738  gcc/te
*** 21847,21852 ****
--- 22581,22587 ----
  dcdfcb2530eb653d4b7e6f556992d19d  gcc/testsuite/g++.dg/overload/operator4.C
  ecc217fd3257caf539a7d5322c023048  gcc/testsuite/g++.dg/overload/operator5.C
  0acbc2855c72efb17bfcf35234e3c9b7  gcc/testsuite/g++.dg/overload/operator6.C
+ 8c3d0b1f67459163f993ef8b1b685a63  gcc/testsuite/g++.dg/overload/paren1.C
  1e646cd0268e48cb7fce3c641c350ed1  gcc/testsuite/g++.dg/overload/pmf1.C
  92e24f7dfd7fc511e68b61e3c390f729  gcc/testsuite/g++.dg/overload/pmf2.C
  89dadeb91db9b7e2c5b173a5eff8a287  gcc/testsuite/g++.dg/overload/pmf3.C
*************** bc8c4ed875b2c4b0e6b1ec9bcec25d41  gcc/te
*** 21903,21909 ****
  0befa26c74e8cbfa279f5b49a61408eb  gcc/testsuite/g++.dg/parse/angle-bracket2.C
  4d20fab4130f31b7ec276380c3136f16  gcc/testsuite/g++.dg/parse/args1.C
  daf5f5fa938643351cbd008ccc3bb60f  gcc/testsuite/g++.dg/parse/array-size1.C
! 2be2d98a393b91a88e8d452ba93d8fdf  gcc/testsuite/g++.dg/parse/array-size2.C
  caa2ee43dfe02eccbe80ecf8b55cbfc5  gcc/testsuite/g++.dg/parse/array-size3.C
  765f7e5bc908ac50e66bdeeac57851f0  gcc/testsuite/g++.dg/parse/asm1.C
  16b06ccce5dbf6640797da7bada365f5  gcc/testsuite/g++.dg/parse/asm2.C
--- 22638,22644 ----
  0befa26c74e8cbfa279f5b49a61408eb  gcc/testsuite/g++.dg/parse/angle-bracket2.C
  4d20fab4130f31b7ec276380c3136f16  gcc/testsuite/g++.dg/parse/args1.C
  daf5f5fa938643351cbd008ccc3bb60f  gcc/testsuite/g++.dg/parse/array-size1.C
! 80091bf5d1cd8a833fc214914fce1ada  gcc/testsuite/g++.dg/parse/array-size2.C
  caa2ee43dfe02eccbe80ecf8b55cbfc5  gcc/testsuite/g++.dg/parse/array-size3.C
  765f7e5bc908ac50e66bdeeac57851f0  gcc/testsuite/g++.dg/parse/asm1.C
  16b06ccce5dbf6640797da7bada365f5  gcc/testsuite/g++.dg/parse/asm2.C
*************** eef8c677d4ba7576d1abc34640929821  gcc/te
*** 22245,22251 ****
  eb7d271a7110d4e8fc3f749e65b2288f  gcc/testsuite/g++.dg/parse/new5.C
  5070f40d76becad391ac11ebc8fc25b2  gcc/testsuite/g++.dg/parse/new6.C
  802d61ac08eb06bb2eb54839cd4accf8  gcc/testsuite/g++.dg/parse/no-type-defn1.C
! 43b7207a4c945d2ace1328cdc697c267  gcc/testsuite/g++.dg/parse/no-typename1.C
  aa5411fd5e6b230e1e272f2eabca94bc  gcc/testsuite/g++.dg/parse/no-value1.C
  d3d5c74c2536d2bbc64765e6108f9905  gcc/testsuite/g++.dg/parse/non-dependent1.C
  73062b089778c12a0028db31493ae2c0  gcc/testsuite/g++.dg/parse/non-dependent2.C
--- 22980,22986 ----
  eb7d271a7110d4e8fc3f749e65b2288f  gcc/testsuite/g++.dg/parse/new5.C
  5070f40d76becad391ac11ebc8fc25b2  gcc/testsuite/g++.dg/parse/new6.C
  802d61ac08eb06bb2eb54839cd4accf8  gcc/testsuite/g++.dg/parse/no-type-defn1.C
! 69077da5839ad8d28331fbad77fcd87e  gcc/testsuite/g++.dg/parse/no-typename1.C
  aa5411fd5e6b230e1e272f2eabca94bc  gcc/testsuite/g++.dg/parse/no-value1.C
  d3d5c74c2536d2bbc64765e6108f9905  gcc/testsuite/g++.dg/parse/non-dependent1.C
  73062b089778c12a0028db31493ae2c0  gcc/testsuite/g++.dg/parse/non-dependent2.C
*************** c203de39cbb4bd246d0e315aa6662a15  gcc/te
*** 22287,22292 ****
--- 23022,23028 ----
  ce5771924fa5fd60b270c30c11bee489  gcc/testsuite/g++.dg/parse/parser-pr14875.C
  290161573b66c49ae4261f07f77681d3  gcc/testsuite/g++.dg/parse/parser-pr28152-2.C
  a0fee4f3ee4678b54afd993b619baa05  gcc/testsuite/g++.dg/parse/parser-pr28152.C
+ 19f7d11d9ad101a38756eab150921947  gcc/testsuite/g++.dg/parse/pr101783.C
  2dde7d845edb3fc1b6b06c1f7c1d71f6  gcc/testsuite/g++.dg/parse/pr16696-permissive.C
  f8326578679fecd658e1bec2d3ed7654  gcc/testsuite/g++.dg/parse/pr16696.C
  29f6ba15da1283765b5179abe6707d09  gcc/testsuite/g++.dg/parse/pr18770.C
*************** c6f961c7e0a3abdb6c65204f7692ed1b  gcc/te
*** 22299,22304 ****
--- 23035,23041 ----
  d2c97158a600f119f8f39017dbe65cb6  gcc/testsuite/g++.dg/parse/pr34049.C
  b195499fe12f3f3c5a8b1fb7605ee881  gcc/testsuite/g++.dg/parse/pr34758.C
  a57434275b0ab07b7a1f918fef7791bc  gcc/testsuite/g++.dg/parse/pr37862.C
+ 31387583570b64cad2244457cb26fa75  gcc/testsuite/g++.dg/parse/pr39751.C
  12fdd2d4e53c5ae1c19c96b8ccf6a98f  gcc/testsuite/g++.dg/parse/pr43765.C
  2252cf60ba80a25df99456a82a994206  gcc/testsuite/g++.dg/parse/pr52071.C
  1440b05640ed86e97c3a5a22e8fec412  gcc/testsuite/g++.dg/parse/pr55080.C
*************** f04a95da8935ec0cc5089d05affb78d8  gcc/te
*** 22322,22327 ****
--- 23059,23065 ----
  a22ea5750225f2612d7e42c34ccab198  gcc/testsuite/g++.dg/parse/pr83634.C
  7e4a18dbdde15d3df2c3ac9c839f0aa2  gcc/testsuite/g++.dg/parse/pr84263.C
  eb26fb436b8f8415a8abc1bccfbe0115  gcc/testsuite/g++.dg/parse/pr88180.C
+ ea7f3915f2a7ae810b80994ab09f9f4a  gcc/testsuite/g++.dg/parse/pr95999.C
  e092324667ee9b9d28e3bbedbac9d8cb  gcc/testsuite/g++.dg/parse/pr96257.C
  5ed1c736ecb0dfd7d196f7b0355e826d  gcc/testsuite/g++.dg/parse/pr96258.C
  44edf260253cab603050f781362fdeda  gcc/testsuite/g++.dg/parse/pragma-recovery.C
*************** ed8b4046f6c267966d1156016f2f0431  gcc/te
*** 22343,22348 ****
--- 23081,23087 ----
  322abe6d2d840b6218ecf16b70637d21  gcc/testsuite/g++.dg/parse/qualified3.C
  c6c725343704e95eb7f4ce2862bce46b  gcc/testsuite/g++.dg/parse/qualified4.C
  5f4c2303e76572835b5428d77b8b77ec  gcc/testsuite/g++.dg/parse/qualified5.C
+ 2c7ef51e8071727ef6ac34013c08759f  gcc/testsuite/g++.dg/parse/qualified6.C
  8d6d8891281e77e95edf66cda3bc270f  gcc/testsuite/g++.dg/parse/redef1.C
  ea5aebd8cd9820744d1d08f3b5429dca  gcc/testsuite/g++.dg/parse/redef2.C
  19c9483f0726842c500357ad04acc983  gcc/testsuite/g++.dg/parse/ref-qual1.C
*************** bf3916285ed2309a4ee27696a63242d1  gcc/te
*** 22370,22375 ****
--- 23109,23117 ----
  cbf7a3936e5d89d8e57f7c69e30d0fbe  gcc/testsuite/g++.dg/parse/struct-5.C
  81d12bf2d7a9512144b42af9331933c1  gcc/testsuite/g++.dg/parse/struct-as-enum1.C
  9b4e3355e5e6a024a9c508709ce845ad  gcc/testsuite/g++.dg/parse/template-keyword1.C
+ 9955bf0b92095e016d6a64e15847fc61  gcc/testsuite/g++.dg/parse/template-keyword2.C
+ 19ffc3f190d9ebd95e8e2ec00e602173  gcc/testsuite/g++.dg/parse/template-keyword3.C
+ 83047bb27204d2ebaea1a66c786b8650  gcc/testsuite/g++.dg/parse/template-keyword4.C
  3dad07cbf6929262693afc2ecdc53b66  gcc/testsuite/g++.dg/parse/template1.C
  e09de720f2c9e56b0965a0866614ebb9  gcc/testsuite/g++.dg/parse/template10.C
  e27cd941f0cc2426c0ef84a7925d30a4  gcc/testsuite/g++.dg/parse/template11.C
*************** f9271dce9d7980fa8b426246ec2b9126  gcc/te
*** 22457,22463 ****
  4a61ad56a41cb4cbee40e9821143277c  gcc/testsuite/g++.dg/pch/operator-1.Hs
  a42f209088bbce8d3650be5966861b6b  gcc/testsuite/g++.dg/pch/pch.C
  95603c8965412870090ed14011f4b123  gcc/testsuite/g++.dg/pch/pch.Hs
! 408d2df6439e4254bbbf6d36880dd6c5  gcc/testsuite/g++.dg/pch/pch.exp
  a79b4c14973bc580e45325abf4c19b72  gcc/testsuite/g++.dg/pch/pr90326.C
  8733db8bb02cf7abd5d7d07601acc332  gcc/testsuite/g++.dg/pch/pr90326.Hs
  f820a691997c43f0fd5a910e8712635b  gcc/testsuite/g++.dg/pch/pr92458.C
--- 23199,23205 ----
  4a61ad56a41cb4cbee40e9821143277c  gcc/testsuite/g++.dg/pch/operator-1.Hs
  a42f209088bbce8d3650be5966861b6b  gcc/testsuite/g++.dg/pch/pch.C
  95603c8965412870090ed14011f4b123  gcc/testsuite/g++.dg/pch/pch.Hs
! 8b59c96160dbc17a147836b4e8c57f14  gcc/testsuite/g++.dg/pch/pch.exp
  a79b4c14973bc580e45325abf4c19b72  gcc/testsuite/g++.dg/pch/pr90326.C
  8733db8bb02cf7abd5d7d07601acc332  gcc/testsuite/g++.dg/pch/pr90326.Hs
  f820a691997c43f0fd5a910e8712635b  gcc/testsuite/g++.dg/pch/pr92458.C
*************** b393922db8d338bed7f3bcf037edd19c  gcc/te
*** 22492,22498 ****
  3a80079be7a0bfd6f8efce4de8795fcb  gcc/testsuite/g++.dg/plugin/header_plugin.c
  1c30a8080468929a3cbbc7a4ef384c4c  gcc/testsuite/g++.dg/plugin/location-overflow-test-pr100796.c
  0422777feb5bb202ec0e53d6551fe397  gcc/testsuite/g++.dg/plugin/location-overflow-test-pr96391.c
! 294f52175c04907607246b4565c83a6f  gcc/testsuite/g++.dg/plugin/plugin.exp
  0555e81b1b7c9c8e06b4e9d9ffccb7ff  gcc/testsuite/g++.dg/plugin/pragma_plugin-test-1.C
  bb9719af4ef365b9625ed93e9794b8b2  gcc/testsuite/g++.dg/plugin/pragma_plugin.c
  503f96544096dfaa1ea93338e21923ff  gcc/testsuite/g++.dg/plugin/self-assign-test-1.C
--- 23234,23240 ----
  3a80079be7a0bfd6f8efce4de8795fcb  gcc/testsuite/g++.dg/plugin/header_plugin.c
  1c30a8080468929a3cbbc7a4ef384c4c  gcc/testsuite/g++.dg/plugin/location-overflow-test-pr100796.c
  0422777feb5bb202ec0e53d6551fe397  gcc/testsuite/g++.dg/plugin/location-overflow-test-pr96391.c
! c55832f0688f7b95e7414cc8adaac59d  gcc/testsuite/g++.dg/plugin/plugin.exp
  0555e81b1b7c9c8e06b4e9d9ffccb7ff  gcc/testsuite/g++.dg/plugin/pragma_plugin-test-1.C
  bb9719af4ef365b9625ed93e9794b8b2  gcc/testsuite/g++.dg/plugin/pragma_plugin.c
  503f96544096dfaa1ea93338e21923ff  gcc/testsuite/g++.dg/plugin/self-assign-test-1.C
*************** e051d5cb1d92744fe18b74552249a54e  gcc/te
*** 22504,22510 ****
  34171c7d3f22062d3826646c0e5f1f9d  gcc/testsuite/g++.dg/plugin/show-template-tree-color.C
  4e74baf6e971213789395d81a85385e0  gcc/testsuite/g++.dg/plugin/show_template_tree_color_plugin.c
  2e53d96b8ba6ffa8b9414775da7e87f3  gcc/testsuite/g++.dg/pr100253.C
! b4e42a0948b84ed96d9d06db882fdc2e  gcc/testsuite/g++.dg/pr100574.C
  2ac64817a39fe1a5c2dc328f4233cda1  gcc/testsuite/g++.dg/pr37742.C
  32b2fbda29ffd2ac2181c43c971f3a7d  gcc/testsuite/g++.dg/pr44328.C
  e43b4ea2d038b181b57782d5d56d22ba  gcc/testsuite/g++.dg/pr44486.C
--- 23246,23271 ----
  34171c7d3f22062d3826646c0e5f1f9d  gcc/testsuite/g++.dg/plugin/show-template-tree-color.C
  4e74baf6e971213789395d81a85385e0  gcc/testsuite/g++.dg/plugin/show_template_tree_color_plugin.c
  2e53d96b8ba6ffa8b9414775da7e87f3  gcc/testsuite/g++.dg/pr100253.C
! 8565710d6f77641a38bd4e09919a3fb2  gcc/testsuite/g++.dg/pr100574.C
! d3a2e291e213458826ecfcc0e5d8cd46  gcc/testsuite/g++.dg/pr100774.C
! f236ce0dc0fda54ce2f7cf384f1dc29b  gcc/testsuite/g++.dg/pr101331.C
! 6f0617957144c31d2d94ce32f70bb279  gcc/testsuite/g++.dg/pr101511.C
! 15e96bcd73215914d723945f149e608e  gcc/testsuite/g++.dg/pr102359_1.C
! cc3e8e8053f6b7384a5d0ce0ba47bac4  gcc/testsuite/g++.dg/pr102359_2.C
! e7c6b568866644a62567cfa02de05df6  gcc/testsuite/g++.dg/pr102360.C
! d6cfdbfe5d49594a720e546a2e274747  gcc/testsuite/g++.dg/pr102796.C
! a51427a30f77979c20dee7e511f9b370  gcc/testsuite/g++.dg/pr102955.C
! 8fa6da9600b3275dbe5d9beb428ec733  gcc/testsuite/g++.dg/pr102988.C
! bc073049efd8de31a04ecce7e05f88df  gcc/testsuite/g++.dg/pr103007.C
! 2f79e70399174942900e88eff9982433  gcc/testsuite/g++.dg/pr103024.C
! 96329e85a8771446a7beca99acc0f1e8  gcc/testsuite/g++.dg/pr103038.C
! 2bf77a81f489c0628c643a2a3df76898  gcc/testsuite/g++.dg/pr103122.C
! 3fc694d366af647e9b78c02133e52da4  gcc/testsuite/g++.dg/pr103326.C
! 46f210b54d7564e698736b4e327a2037  gcc/testsuite/g++.dg/pr103530.C
! c1251c5de07903c2976e214b0ce9b893  gcc/testsuite/g++.dg/pr103856.C
! cb3b0d87ebb06649d90f205f72680272  gcc/testsuite/g++.dg/pr104648.C
! 18b9174889675eec328ca8173a24e49a  gcc/testsuite/g++.dg/pr104869.C
! 152c50eb40e9677388868b9fc74192a1  gcc/testsuite/g++.dg/pr105276.C
  2ac64817a39fe1a5c2dc328f4233cda1  gcc/testsuite/g++.dg/pr37742.C
  32b2fbda29ffd2ac2181c43c971f3a7d  gcc/testsuite/g++.dg/pr44328.C
  e43b4ea2d038b181b57782d5d56d22ba  gcc/testsuite/g++.dg/pr44486.C
*************** c196198d50bad93b87f24ccaf1c0ee15  gcc/te
*** 22576,22593 ****
  2925678828b854c5f2a448d4d34d8e08  gcc/testsuite/g++.dg/pr64688.C
  0f0d9bb4908d6bdb56109652b1ef4e88  gcc/testsuite/g++.dg/pr65032.C
  2a99023224d23b7b4c2df438196b9877  gcc/testsuite/g++.dg/pr65049.C
! e806b69344c18eb3f9f4d25e7ef1cbb7  gcc/testsuite/g++.dg/pr65240-1.C
! ee3a7e458d7954444a8959c8662bdeba  gcc/testsuite/g++.dg/pr65240-2.C
! 3a4a8f388dfc83911ec4b20be25740b4  gcc/testsuite/g++.dg/pr65240-3.C
! 185b61c9f9f2771ca0469650321db79c  gcc/testsuite/g++.dg/pr65240-4.C
  ff90a96b0f5bda64aea35147770302e1  gcc/testsuite/g++.dg/pr65240.h
! 0057ba501387c41f5fcb4c3488ae63ac  gcc/testsuite/g++.dg/pr65242.C
  c987d521d6ec4222a0bbaff58ae0df77  gcc/testsuite/g++.dg/pr65295.C
  20bcb78b164336c6b42304de362d905a  gcc/testsuite/g++.dg/pr66655.C
  575d8cfa0f7cc7a30ac74c14eec274d2  gcc/testsuite/g++.dg/pr66655.h
  9b717eabe7d22f65a71673e3ffc1470b  gcc/testsuite/g++.dg/pr66655_1.cc
  c014278b0e7c6cf72bd8834b1b9d6631  gcc/testsuite/g++.dg/pr66866.C
! e76d57f03d20c287845bd04c939c4d73  gcc/testsuite/g++.dg/pr67211.C
  54fc8bd86f8a81eead6183ed98044e5e  gcc/testsuite/g++.dg/pr67351.C
  c15a8cc45a8eaf8903cfaae658dc8822  gcc/testsuite/g++.dg/pr67405.C
  61d6f57e830446105d84b6744eecd7eb  gcc/testsuite/g++.dg/pr67666.C
--- 23337,23354 ----
  2925678828b854c5f2a448d4d34d8e08  gcc/testsuite/g++.dg/pr64688.C
  0f0d9bb4908d6bdb56109652b1ef4e88  gcc/testsuite/g++.dg/pr65032.C
  2a99023224d23b7b4c2df438196b9877  gcc/testsuite/g++.dg/pr65049.C
! 922496f33a9ac5ccae6f8aa317a02a67  gcc/testsuite/g++.dg/pr65240-1.C
! 8bd9fd039876f7fc1a911c89028258ff  gcc/testsuite/g++.dg/pr65240-2.C
! 5ba7c1a90046e9179ea6288129367815  gcc/testsuite/g++.dg/pr65240-3.C
! d50cfc924c3c6bfe48d010f49b0320c5  gcc/testsuite/g++.dg/pr65240-4.C
  ff90a96b0f5bda64aea35147770302e1  gcc/testsuite/g++.dg/pr65240.h
! 225c688c4f2ead1be77c30e05bf4245c  gcc/testsuite/g++.dg/pr65242.C
  c987d521d6ec4222a0bbaff58ae0df77  gcc/testsuite/g++.dg/pr65295.C
  20bcb78b164336c6b42304de362d905a  gcc/testsuite/g++.dg/pr66655.C
  575d8cfa0f7cc7a30ac74c14eec274d2  gcc/testsuite/g++.dg/pr66655.h
  9b717eabe7d22f65a71673e3ffc1470b  gcc/testsuite/g++.dg/pr66655_1.cc
  c014278b0e7c6cf72bd8834b1b9d6631  gcc/testsuite/g++.dg/pr66866.C
! 6e5baacb67506374f7db3dffb5272daf  gcc/testsuite/g++.dg/pr67211.C
  54fc8bd86f8a81eead6183ed98044e5e  gcc/testsuite/g++.dg/pr67351.C
  c15a8cc45a8eaf8903cfaae658dc8822  gcc/testsuite/g++.dg/pr67405.C
  61d6f57e830446105d84b6744eecd7eb  gcc/testsuite/g++.dg/pr67666.C
*************** b76c7ee65b34b2377285a776d351781b  gcc/te
*** 22606,22622 ****
  29300174b10233fd47c932d1ffd4c3bf  gcc/testsuite/g++.dg/pr69123.C
  72bb8a9ea548aaaada55dbcdb8d6a802  gcc/testsuite/g++.dg/pr69338.C
  07ceb93faa4d6543359b7c47e9a5e94a  gcc/testsuite/g++.dg/pr69379.C
! 7577b450ba2f8422ac17aa9a168a69c1  gcc/testsuite/g++.dg/pr69667.C
  1b19e570cc03e72ec7115cbf16663717  gcc/testsuite/g++.dg/pr69697.C
  6574022bacba25e4efad4b7c4931c69a  gcc/testsuite/g++.dg/pr70098.C
  52e836d540fc39ce14dbc3124fd1ad8e  gcc/testsuite/g++.dg/pr70590-2.C
  d8fba4e6baf8e0880ae882765e1135b4  gcc/testsuite/g++.dg/pr70590.C
  5c6cf3e2bb082400e2ca3d17973fdd4b  gcc/testsuite/g++.dg/pr70965.C
  0b728dae13a5f48195e47018a83c4f35  gcc/testsuite/g++.dg/pr71184.C
! 8b83dfbae2a2ae737596ef723b347d76  gcc/testsuite/g++.dg/pr71294.C
! dd5b895f9e8e377b3fc861eecf9bdbf7  gcc/testsuite/g++.dg/pr71389.C
  6b1ee9b05340152c90e7c09d5b9eb5c2  gcc/testsuite/g++.dg/pr71488.C
! 8756c72da60c2ac8cdddc20291df82e3  gcc/testsuite/g++.dg/pr71655.C
  e71ffaaf0dda0a585015ab52583b2b01  gcc/testsuite/g++.dg/pr71694.C
  1202ce040862ab92e1f0e7f8da8f372a  gcc/testsuite/g++.dg/pr71973-1.C
  723e9507a3916605af59b5df349ee3e5  gcc/testsuite/g++.dg/pr71973-2.C
--- 23367,23383 ----
  29300174b10233fd47c932d1ffd4c3bf  gcc/testsuite/g++.dg/pr69123.C
  72bb8a9ea548aaaada55dbcdb8d6a802  gcc/testsuite/g++.dg/pr69338.C
  07ceb93faa4d6543359b7c47e9a5e94a  gcc/testsuite/g++.dg/pr69379.C
! 2c2e860fd96f20dc6b16a5da17796c8e  gcc/testsuite/g++.dg/pr69667.C
  1b19e570cc03e72ec7115cbf16663717  gcc/testsuite/g++.dg/pr69697.C
  6574022bacba25e4efad4b7c4931c69a  gcc/testsuite/g++.dg/pr70098.C
  52e836d540fc39ce14dbc3124fd1ad8e  gcc/testsuite/g++.dg/pr70590-2.C
  d8fba4e6baf8e0880ae882765e1135b4  gcc/testsuite/g++.dg/pr70590.C
  5c6cf3e2bb082400e2ca3d17973fdd4b  gcc/testsuite/g++.dg/pr70965.C
  0b728dae13a5f48195e47018a83c4f35  gcc/testsuite/g++.dg/pr71184.C
! 1c81a3ae2a74a3e67c56f46fd05e05ae  gcc/testsuite/g++.dg/pr71294.C
! f16de79e4d58f2cc3e59dec4e4bdcce4  gcc/testsuite/g++.dg/pr71389.C
  6b1ee9b05340152c90e7c09d5b9eb5c2  gcc/testsuite/g++.dg/pr71488.C
! c31e2e223082d89e965cb706ebd83efc  gcc/testsuite/g++.dg/pr71655.C
  e71ffaaf0dda0a585015ab52583b2b01  gcc/testsuite/g++.dg/pr71694.C
  1202ce040862ab92e1f0e7f8da8f372a  gcc/testsuite/g++.dg/pr71973-1.C
  723e9507a3916605af59b5df349ee3e5  gcc/testsuite/g++.dg/pr71973-2.C
*************** f8418c6f8a6bbeb32b7b4b87b05ee7c1  gcc/te
*** 22652,22661 ****
  9458a9d71c656889a5451865dac2313a  gcc/testsuite/g++.dg/pr82836.C
  4b4fc14dd13047efb646fa51bb68756a  gcc/testsuite/g++.dg/pr82899.C
  bf14562b088e1e4c01e4050adbd18394  gcc/testsuite/g++.dg/pr83239.C
! a8cae2d227c02ee5705e9b5b205bb1d1  gcc/testsuite/g++.dg/pr83979.c
  8528aaf5d93c3e6771dcc4828d7264b5  gcc/testsuite/g++.dg/pr84231.C
  083c1f5c90058b5d83822264c5d52f0e  gcc/testsuite/g++.dg/pr84264.C
! 11b4cccb7d83f94f276075c4b5417588  gcc/testsuite/g++.dg/pr84279.C
  fcd3d77f2c884effb0321a5b04ff8ca6  gcc/testsuite/g++.dg/pr84492.C
  ebc2502b64fbdf6e7c61b806ec979487  gcc/testsuite/g++.dg/pr84729.C
  75d741968e42202427b6e9c163e5c326  gcc/testsuite/g++.dg/pr84821.C
--- 23413,23423 ----
  9458a9d71c656889a5451865dac2313a  gcc/testsuite/g++.dg/pr82836.C
  4b4fc14dd13047efb646fa51bb68756a  gcc/testsuite/g++.dg/pr82899.C
  bf14562b088e1e4c01e4050adbd18394  gcc/testsuite/g++.dg/pr83239.C
! 136beb2446d7ea3b218dd029e09e25bd  gcc/testsuite/g++.dg/pr83541.C
! a8cae2d227c02ee5705e9b5b205bb1d1  gcc/testsuite/g++.dg/pr83979.C
  8528aaf5d93c3e6771dcc4828d7264b5  gcc/testsuite/g++.dg/pr84231.C
  083c1f5c90058b5d83822264c5d52f0e  gcc/testsuite/g++.dg/pr84264.C
! 26d10f4b383162ffd9eb468d61656fe3  gcc/testsuite/g++.dg/pr84279.C
  fcd3d77f2c884effb0321a5b04ff8ca6  gcc/testsuite/g++.dg/pr84492.C
  ebc2502b64fbdf6e7c61b806ec979487  gcc/testsuite/g++.dg/pr84729.C
  75d741968e42202427b6e9c163e5c326  gcc/testsuite/g++.dg/pr84821.C
*************** fed9311785d1724d80180ea16a9d6995  gcc/te
*** 22686,22696 ****
--- 23448,23465 ----
  2f7247b57aca412d510ca9f155d7ac79  gcc/testsuite/g++.dg/pr87469.C
  15069a16fa71bba2dc8e50a2019f3227  gcc/testsuite/g++.dg/pr87633.C
  d30d77c47257592a098c491dc29a80b1  gcc/testsuite/g++.dg/pr87770.C
+ 1d2cf52d68d476691aaa280a4eecae76  gcc/testsuite/g++.dg/pr88173-1.C
+ ffb015852a7ac879a1674e571cbce008  gcc/testsuite/g++.dg/pr88173-2.C
  d0caf9e5362287726dc95d5165f20feb  gcc/testsuite/g++.dg/pr88217.C
  ed2c407a8454e62219c76dc3c5b72a1e  gcc/testsuite/g++.dg/pr89242.C
  7287759250de84d3108a523dee756970  gcc/testsuite/g++.dg/pr89790.C
  35c17f0646594d5891b1fa427e1c3ea7  gcc/testsuite/g++.dg/pr90338.C
  8845d6628ae38eb29b32ff51b4743848  gcc/testsuite/g++.dg/pr90462.C
+ edffccfb11f8c2904fa921c0561d1d9a  gcc/testsuite/g++.dg/pr90773-1.h
+ 3b24e07ec2e2fe92e9e0e41335fb1b36  gcc/testsuite/g++.dg/pr90773-1a.C
+ ade4b8d60a1f2cb059d6fbb5a0692ff3  gcc/testsuite/g++.dg/pr90773-1b.C
+ 9a8929e73306e53a444ce05775fe4690  gcc/testsuite/g++.dg/pr90773-1c.C
+ 95991c4c38e4b3c4e6bebee1a8224980  gcc/testsuite/g++.dg/pr90773-1d.C
  ef4a81fd10ae2fa7d08a594e3439223d  gcc/testsuite/g++.dg/pr90981.C
  8d5a3269887286ec688e05d86356d904  gcc/testsuite/g++.dg/pr91173.C
  6cf276d7a373a7ae31fdbb79d0596c7b  gcc/testsuite/g++.dg/pr91221.C
*************** a632da06916027a661eebd4e506433e3  gcc/te
*** 22709,22716 ****
  b28f1aa5479585861779a602aaf7d3f3  gcc/testsuite/g++.dg/pr94314-4.C
  fdf3135e57da2e320f80a80723315d9f  gcc/testsuite/g++.dg/pr94314.C
  482706f039139a44488ccf489c439fdd  gcc/testsuite/g++.dg/pr94666.C
! 8567df518ccb50301e2a6ac33853f9db  gcc/testsuite/g++.dg/pr95768.C
  5fa1238dc25e63c91396c8b3a76f125d  gcc/testsuite/g++.dg/pr96308.C
  d7c3ed7863806da0874952af08162681  gcc/testsuite/g++.dg/pr96818.C
  c228b3ed01594ed861f4cadcaf972679  gcc/testsuite/g++.dg/pr97538.C
  54b7e9e284a4bb84b630d364fb0bcec9  gcc/testsuite/g++.dg/pr97560.C
--- 23478,23486 ----
  b28f1aa5479585861779a602aaf7d3f3  gcc/testsuite/g++.dg/pr94314-4.C
  fdf3135e57da2e320f80a80723315d9f  gcc/testsuite/g++.dg/pr94314.C
  482706f039139a44488ccf489c439fdd  gcc/testsuite/g++.dg/pr94666.C
! a9ce4502f1b279312e1fdca7af49461c  gcc/testsuite/g++.dg/pr95768.C
  5fa1238dc25e63c91396c8b3a76f125d  gcc/testsuite/g++.dg/pr96308.C
+ ffcc5666b0bec69ad84fdd0dbbd00e5f  gcc/testsuite/g++.dg/pr96707.C
  d7c3ed7863806da0874952af08162681  gcc/testsuite/g++.dg/pr96818.C
  c228b3ed01594ed861f4cadcaf972679  gcc/testsuite/g++.dg/pr97538.C
  54b7e9e284a4bb84b630d364fb0bcec9  gcc/testsuite/g++.dg/pr97560.C
*************** c228b3ed01594ed861f4cadcaf972679  gcc/te
*** 22720,22725 ****
--- 23490,23496 ----
  45c7d0b314ede5e6800294c0564f4ad7  gcc/testsuite/g++.dg/pr98136.C
  3c3d1ae2c4512842cdd56b62eb3843c0  gcc/testsuite/g++.dg/pr98213.C
  66a9e8988a7a1c485ca65b45157efb0f  gcc/testsuite/g++.dg/pr98330.C
+ 5e50c9ad39f7329157da7f21ef7f50c4  gcc/testsuite/g++.dg/pr98335.C
  4c8ee28b75b6181d48b6370da1d724c1  gcc/testsuite/g++.dg/pr98499.C
  b9c413e1dc01687c00feebd03ca30772  gcc/testsuite/g++.dg/pr99165.C
  26d6cca564c83a4cd20ad0860975aebe  gcc/testsuite/g++.dg/pr99218.C
*************** f45226306cb853d7f47a657db3e4f853  gcc/te
*** 22771,22782 ****
  b0c0786c803eaf05e6755f729c87257e  gcc/testsuite/g++.dg/rtti/typeid7.C
  3bf0c0d4697ad1ada3cda87b9bc2dc61  gcc/testsuite/g++.dg/rtti/typeid8.C
  1f8ec1c3ba15e07e5cd63d52ea64abab  gcc/testsuite/g++.dg/rtti/typeid9.C
  9645499a8d417e1ccb227d0c5593c669  gcc/testsuite/g++.dg/semicolon-fixits.C
  358da784b700bf42b91032b2ceb71406  gcc/testsuite/g++.dg/simulate-thread/atomics-1.C
  3357bf9a2204710e948cb278fb4c4266  gcc/testsuite/g++.dg/simulate-thread/atomics-2.C
  0f9193c70bd9c12ca05e5645fdd35442  gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C
  f9a70819a6e534b6c462618926ea0a80  gcc/testsuite/g++.dg/simulate-thread/bitfields.C
! 417bf79d18f36137f438f1e7b3d2c6b5  gcc/testsuite/g++.dg/simulate-thread/simulate-thread.exp
  c6cf9552e831a422e53a8ee8d8817449  gcc/testsuite/g++.dg/simulate-thread/simulate-thread.gdb
  8ed1bb09d81129e522f6ac6dce99d52a  gcc/testsuite/g++.dg/simulate-thread/simulate-thread.h
  2a467b197d39f6d623192355bbc4b5d3  gcc/testsuite/g++.dg/special/conpr-1.C
--- 23542,23554 ----
  b0c0786c803eaf05e6755f729c87257e  gcc/testsuite/g++.dg/rtti/typeid7.C
  3bf0c0d4697ad1ada3cda87b9bc2dc61  gcc/testsuite/g++.dg/rtti/typeid8.C
  1f8ec1c3ba15e07e5cd63d52ea64abab  gcc/testsuite/g++.dg/rtti/typeid9.C
+ 1f6dccfd0b7bb5ffeb1fce36767c67d0  gcc/testsuite/g++.dg/rtti/undeclared1.C
  9645499a8d417e1ccb227d0c5593c669  gcc/testsuite/g++.dg/semicolon-fixits.C
  358da784b700bf42b91032b2ceb71406  gcc/testsuite/g++.dg/simulate-thread/atomics-1.C
  3357bf9a2204710e948cb278fb4c4266  gcc/testsuite/g++.dg/simulate-thread/atomics-2.C
  0f9193c70bd9c12ca05e5645fdd35442  gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C
  f9a70819a6e534b6c462618926ea0a80  gcc/testsuite/g++.dg/simulate-thread/bitfields.C
! 07f59ac4f0cef96e569ebaff7be3fb0b  gcc/testsuite/g++.dg/simulate-thread/simulate-thread.exp
  c6cf9552e831a422e53a8ee8d8817449  gcc/testsuite/g++.dg/simulate-thread/simulate-thread.gdb
  8ed1bb09d81129e522f6ac6dce99d52a  gcc/testsuite/g++.dg/simulate-thread/simulate-thread.h
  2a467b197d39f6d623192355bbc4b5d3  gcc/testsuite/g++.dg/special/conpr-1.C
*************** ce313483756ae4ae75458a512a089656  gcc/te
*** 22786,22792 ****
  09034a812fccea6ecaa6edd2f8089fc9  gcc/testsuite/g++.dg/special/conpr-3a.cc
  0d5597e1f29008b02b626a0d09bf9c34  gcc/testsuite/g++.dg/special/conpr-3b.cc
  a0eb468046d5e36275ade20495e2f0c4  gcc/testsuite/g++.dg/special/conpr-4.C
! fb633cf0b73b71287579d4a438e884b3  gcc/testsuite/g++.dg/special/ecos.exp
  d646642e04b6f7a6bb987dddc08a0268  gcc/testsuite/g++.dg/special/initp1.C
  ae5f6e9b349b6bd54b510d6f4e11eab0  gcc/testsuite/g++.dg/special/initpri1.C
  495d2d9e552898de91e04d1536c2d0bc  gcc/testsuite/g++.dg/special/initpri2.C
--- 23558,23564 ----
  09034a812fccea6ecaa6edd2f8089fc9  gcc/testsuite/g++.dg/special/conpr-3a.cc
  0d5597e1f29008b02b626a0d09bf9c34  gcc/testsuite/g++.dg/special/conpr-3b.cc
  a0eb468046d5e36275ade20495e2f0c4  gcc/testsuite/g++.dg/special/conpr-4.C
! ba32e42ac1c06a54e1181d6ee4326da9  gcc/testsuite/g++.dg/special/ecos.exp
  d646642e04b6f7a6bb987dddc08a0268  gcc/testsuite/g++.dg/special/initp1.C
  ae5f6e9b349b6bd54b510d6f4e11eab0  gcc/testsuite/g++.dg/special/initpri1.C
  495d2d9e552898de91e04d1536c2d0bc  gcc/testsuite/g++.dg/special/initpri2.C
*************** c0c20230f9ca78ee531a757fe9c20cdc  gcc/te
*** 22800,22805 ****
--- 23572,23578 ----
  c7d19bcfd6293dcc2e1b62c71b24d14e  gcc/testsuite/g++.dg/spellcheck-macro-ordering.C
  138b26dd96477d5ca37e93e1baad9a7f  gcc/testsuite/g++.dg/spellcheck-ns.C
  dea81150700765a4bf726fcbf91fe264  gcc/testsuite/g++.dg/spellcheck-pr104806.C
+ e0b7add2701cd70f88a83a0d885fe339  gcc/testsuite/g++.dg/spellcheck-pr77565.C
  bec792904e3254c1f1b123d9654da558  gcc/testsuite/g++.dg/spellcheck-pr77829.C
  8917eaf0965b3d85de7008f1d17dee06  gcc/testsuite/g++.dg/spellcheck-pr78313.C
  c58af17755be032fd83d41b6fc234488  gcc/testsuite/g++.dg/spellcheck-pr78656.C
*************** f5d8d2f92f0dbaa3ca7558a778137fb3  gcc/te
*** 22808,22814 ****
  569260f7b52f8c920f20c7151931a919  gcc/testsuite/g++.dg/spellcheck-reswords.C
  a450a634e49ab2a381246a13bda48525  gcc/testsuite/g++.dg/spellcheck-single-vs-multiple.C
  cf711ea2ac1f0a7044e001bc02282e5e  gcc/testsuite/g++.dg/spellcheck-stdint.C
! 46f61fb2a7c1973c8e816d526bb76ffc  gcc/testsuite/g++.dg/spellcheck-stdlib.C
  7eb03d350a29bce257b72d771d908294  gcc/testsuite/g++.dg/spellcheck-typenames.C
  9ad7d6448de7763f41feba51662efa9e  gcc/testsuite/g++.dg/sso-1.C
  3effe360372112f0a4945b07676db736  gcc/testsuite/g++.dg/sso-2.C
--- 23581,23587 ----
  569260f7b52f8c920f20c7151931a919  gcc/testsuite/g++.dg/spellcheck-reswords.C
  a450a634e49ab2a381246a13bda48525  gcc/testsuite/g++.dg/spellcheck-single-vs-multiple.C
  cf711ea2ac1f0a7044e001bc02282e5e  gcc/testsuite/g++.dg/spellcheck-stdint.C
! ad23be0de490aa81ef9e9e24565d1bea  gcc/testsuite/g++.dg/spellcheck-stdlib.C
  7eb03d350a29bce257b72d771d908294  gcc/testsuite/g++.dg/spellcheck-typenames.C
  9ad7d6448de7763f41feba51662efa9e  gcc/testsuite/g++.dg/sso-1.C
  3effe360372112f0a4945b07676db736  gcc/testsuite/g++.dg/sso-2.C
*************** fc82819a276388c85441dd10835850d1  gcc/te
*** 22862,22868 ****
  092b63314ea4c83dfe2ff66c762901cd  gcc/testsuite/g++.dg/template/access17.C
  35206c44c357891279078bee49e30310  gcc/testsuite/g++.dg/template/access18.C
  38812e89f55e3ceb34ddb0deaee8b90b  gcc/testsuite/g++.dg/template/access19.C
! a47ba10cd083356d71cb373cc66a3b42  gcc/testsuite/g++.dg/template/access2.C
  8ab45ab3ea7ca8cf21d525e544abe2bd  gcc/testsuite/g++.dg/template/access20.C
  43eff768ad4b6ca2454cbc1618596fb1  gcc/testsuite/g++.dg/template/access21.C
  0efb5f7bc1cba01bee2985b139c1277e  gcc/testsuite/g++.dg/template/access22.C
--- 23635,23641 ----
  092b63314ea4c83dfe2ff66c762901cd  gcc/testsuite/g++.dg/template/access17.C
  35206c44c357891279078bee49e30310  gcc/testsuite/g++.dg/template/access18.C
  38812e89f55e3ceb34ddb0deaee8b90b  gcc/testsuite/g++.dg/template/access19.C
! f11a28ab3f5cf49a8ddd062ecfa81169  gcc/testsuite/g++.dg/template/access2.C
  8ab45ab3ea7ca8cf21d525e544abe2bd  gcc/testsuite/g++.dg/template/access20.C
  43eff768ad4b6ca2454cbc1618596fb1  gcc/testsuite/g++.dg/template/access21.C
  0efb5f7bc1cba01bee2985b139c1277e  gcc/testsuite/g++.dg/template/access22.C
*************** d5229c37c43e6a9c1a45d1ec7d2bf7e5  gcc/te
*** 22880,22890 ****
--- 23653,23668 ----
  9e6c1fd417041a51a4d86a49baef2d00  gcc/testsuite/g++.dg/template/access33.C
  8085d28744228961aaed5d3af4e1df4e  gcc/testsuite/g++.dg/template/access34.C
  0524646845bf130c39116db60554f59c  gcc/testsuite/g++.dg/template/access35.C
+ 688d6bcdb9fea3206932e292dd7d0e39  gcc/testsuite/g++.dg/template/access36.C
  332a0fdadcd28e79ffca0c295240fa57  gcc/testsuite/g++.dg/template/access37.C
  2a54b59867fdc21e69f762aca1ccbe7c  gcc/testsuite/g++.dg/template/access37a.C
  629f28b6f4a03eb3b5b1a8b07fb518c8  gcc/testsuite/g++.dg/template/access38.C
  d1ab3a2909d9d576c5dfa94f007a2714  gcc/testsuite/g++.dg/template/access39.C
  7ea6af968e54287945d17d2352e36fd6  gcc/testsuite/g++.dg/template/access4.C
+ 18b4518359a3e0f55ae3041a4133d13f  gcc/testsuite/g++.dg/template/access40.C
+ 5428fd71694c60d17f4ec642a0d2f66b  gcc/testsuite/g++.dg/template/access40a.C
+ 70ca1a844bab441488d753b92bdb5b0a  gcc/testsuite/g++.dg/template/access41.C
+ 546a46c71775301a03f3deb4b60d4aad  gcc/testsuite/g++.dg/template/access41a.C
  043c53bbc7cad60a3c72bfa79987f011  gcc/testsuite/g++.dg/template/access5.C
  3f2e5ae210f767c1589637afbcf45353  gcc/testsuite/g++.dg/template/access6.C
  974ff59cea85bedc028eb1bc9e350cc5  gcc/testsuite/g++.dg/template/access7.C
*************** d2eee19abbd6cd68d3e5a6d0796250ea  gcc/te
*** 22939,22944 ****
--- 23717,23724 ----
  58bf2945c28e88b34cd3972d57fea390  gcc/testsuite/g++.dg/template/array32.C
  cfe8d64e9ca37d3d958070b43b9508ee  gcc/testsuite/g++.dg/template/array33.C
  c3bf718e40674b7f92cc163501e6cb19  gcc/testsuite/g++.dg/template/array34.C
+ b61cd4449e714e370fbecc4fe1c24eb9  gcc/testsuite/g++.dg/template/array35.C
+ e65889f5cceab5c9e8951170856d669d  gcc/testsuite/g++.dg/template/array36.C
  3904f7cfd18135b5f8ef1dbb020648fc  gcc/testsuite/g++.dg/template/array4.C
  c557bdb58ff52b9fc368185880923627  gcc/testsuite/g++.dg/template/array5.C
  294448858892b33e7116237b86ab785a  gcc/testsuite/g++.dg/template/array6.C
*************** e30efe0e5c7e8e02c14d6e5369fe8a0d  gcc/te
*** 22952,22957 ****
--- 23732,23738 ----
  b8d7ae2a709e06f2d49e19cfb00e77d3  gcc/testsuite/g++.dg/template/asm1.C
  03f049d177796d104aceac695a6617c7  gcc/testsuite/g++.dg/template/asmgoto1.C
  63a5e3d5f634ef4eb13aa4a9d62a8cd7  gcc/testsuite/g++.dg/template/assign1.C
+ 8e794a2b5f572ca60f83d8b02961a7b6  gcc/testsuite/g++.dg/template/attr-used.C
  2f3399aac63bff69580e94f66f716e0b  gcc/testsuite/g++.dg/template/bitfield1.C
  fc503a6c4d63b92622d495b917629877  gcc/testsuite/g++.dg/template/bitfield2.C
  8a0fec8b2c65fed33977466ab46bb239  gcc/testsuite/g++.dg/template/bitfield3.C
*************** e459df3ddd572b111e8694073c95e5b9  gcc/te
*** 22965,22976 ****
--- 23746,23762 ----
  36a3f07072e917bab86270ea2e45099e  gcc/testsuite/g++.dg/template/call5.C
  e3d27e71e5cdf1b6216b87f64c98c15c  gcc/testsuite/g++.dg/template/call6.C
  4430bc3c331103d5a2ee03d64056e256  gcc/testsuite/g++.dg/template/call7.C
+ e876f99b62be9e0bbabeb4b79921dc36  gcc/testsuite/g++.dg/template/call8.C
  d7bcb12b4251a66478891aad1a8828b7  gcc/testsuite/g++.dg/template/canon-type-1.C
  ad0e0128dad7b2d09241fb6a378fc1d5  gcc/testsuite/g++.dg/template/canon-type-10.C
  839b78a8760c0ceeabf6faa7c1d3df53  gcc/testsuite/g++.dg/template/canon-type-11.C
  aa7133ad1bbd90029e808f551c0b104d  gcc/testsuite/g++.dg/template/canon-type-12.C
  2362e973e8b912676ccc13f84fcc1ab3  gcc/testsuite/g++.dg/template/canon-type-13.C
  05a29400dfe86e20be550aef7029b05d  gcc/testsuite/g++.dg/template/canon-type-14.C
+ c0878730b7c8472ddb19e20d3c955b7d  gcc/testsuite/g++.dg/template/canon-type-15.C
+ 801f5f681e4a6ebde6aacf9306721112  gcc/testsuite/g++.dg/template/canon-type-16.C
+ 0df539c586b67a00ff5e8be8f9d0b057  gcc/testsuite/g++.dg/template/canon-type-17.C
+ cf04b466159d8d844c08eba37f7def9e  gcc/testsuite/g++.dg/template/canon-type-18.C
  cb422094173e29b6267dd8e869190b16  gcc/testsuite/g++.dg/template/canon-type-2.C
  6dd8c537054ea8cf4d688cc3066c6c21  gcc/testsuite/g++.dg/template/canon-type-3.C
  6182badf792f2a554489f1b490e70bc3  gcc/testsuite/g++.dg/template/canon-type-4.C
*************** c31c403acbaa655ae0413e1d4350ae4b  gcc/te
*** 23018,23023 ****
--- 23804,23812 ----
  c28b6679b01f4bbe8403c045289d2aef  gcc/testsuite/g++.dg/template/conv14.C
  d03295ed120e37ef2651d9c57aa0b774  gcc/testsuite/g++.dg/template/conv15.C
  bc45c52058d378ff45879106160f09fc  gcc/testsuite/g++.dg/template/conv16.C
+ c96fbe06df46f858258f3ea5558788f1  gcc/testsuite/g++.dg/template/conv17.C
+ 93a91f0833b39ca0b08d8b6d0c0d19b1  gcc/testsuite/g++.dg/template/conv18.C
+ bd99141c68d90e04855763e3f2bfa63a  gcc/testsuite/g++.dg/template/conv19.C
  383f6618c1ccaddea23b36ff23d6d35e  gcc/testsuite/g++.dg/template/conv2.C
  be5017725e9889a47d07ba0d3a3464ff  gcc/testsuite/g++.dg/template/conv3.C
  53aab59e272fd22ef1ad191d0f31e01d  gcc/testsuite/g++.dg/template/conv4.C
*************** f75072de1c2abdfca708b732cbfafa89  gcc/te
*** 23034,23040 ****
  44d05d042dc79a79585f17b3bcda6ec0  gcc/testsuite/g++.dg/template/crash103.C
  1225a54926913e691b51137aef8b5d33  gcc/testsuite/g++.dg/template/crash104.C
  f07fd8a3820e9db30fbbab54d71dd891  gcc/testsuite/g++.dg/template/crash105.C
! d00025415184603d65c2c72426112c43  gcc/testsuite/g++.dg/template/crash106.C
  792c7b5aeb05b03e17861b41172963b0  gcc/testsuite/g++.dg/template/crash107.C
  01e34c6dbadd8c372851425abdb78adb  gcc/testsuite/g++.dg/template/crash108.C
  b3167df4bc44e634fce27a27e383e9a4  gcc/testsuite/g++.dg/template/crash109.C
--- 23823,23829 ----
  44d05d042dc79a79585f17b3bcda6ec0  gcc/testsuite/g++.dg/template/crash103.C
  1225a54926913e691b51137aef8b5d33  gcc/testsuite/g++.dg/template/crash104.C
  f07fd8a3820e9db30fbbab54d71dd891  gcc/testsuite/g++.dg/template/crash105.C
! f19bbfba4bb14d6e3ff2d65c8da05557  gcc/testsuite/g++.dg/template/crash106.C
  792c7b5aeb05b03e17861b41172963b0  gcc/testsuite/g++.dg/template/crash107.C
  01e34c6dbadd8c372851425abdb78adb  gcc/testsuite/g++.dg/template/crash108.C
  b3167df4bc44e634fce27a27e383e9a4  gcc/testsuite/g++.dg/template/crash109.C
*************** fac18fbcfe10c67843c28437a6b92d3c  gcc/te
*** 23146,23152 ****
  59238bcb93582e024a0c5cb12c7ab7e1  gcc/testsuite/g++.dg/template/crash88.C
  253b3010ea41f19cf1dc0f74c2af6b21  gcc/testsuite/g++.dg/template/crash89.C
  44592f20d07e36f90633528dd90bfad3  gcc/testsuite/g++.dg/template/crash9.C
! 6dc1679f704a073c3d6c7683ed6140ab  gcc/testsuite/g++.dg/template/crash90.C
  6e5869fff35fe84df27ea845600fd1b3  gcc/testsuite/g++.dg/template/crash91.C
  e7ff2129d4e25ee3b9f96c6b85e5ebc9  gcc/testsuite/g++.dg/template/crash92.C
  6ce63664012487deb9533d83bc1200a8  gcc/testsuite/g++.dg/template/crash93.C
--- 23935,23941 ----
  59238bcb93582e024a0c5cb12c7ab7e1  gcc/testsuite/g++.dg/template/crash88.C
  253b3010ea41f19cf1dc0f74c2af6b21  gcc/testsuite/g++.dg/template/crash89.C
  44592f20d07e36f90633528dd90bfad3  gcc/testsuite/g++.dg/template/crash9.C
! 66f0f153bb5904ec2597f13671907d4d  gcc/testsuite/g++.dg/template/crash90.C
  6e5869fff35fe84df27ea845600fd1b3  gcc/testsuite/g++.dg/template/crash91.C
  e7ff2129d4e25ee3b9f96c6b85e5ebc9  gcc/testsuite/g++.dg/template/crash92.C
  6ce63664012487deb9533d83bc1200a8  gcc/testsuite/g++.dg/template/crash93.C
*************** c2f7a35b429490ab54f2fba257ca0dd9  gcc/te
*** 23195,23200 ****
--- 23984,23991 ----
  307285b77c17f229ecbeb4c647090190  gcc/testsuite/g++.dg/template/defarg20.C
  c96940bb22962f4c0c4140417e941221  gcc/testsuite/g++.dg/template/defarg21.C
  36be74ab38dfc08e2e1dd78b440aebf1  gcc/testsuite/g++.dg/template/defarg22.C
+ 45f4e97e2c13e9d490a347d7a32d446d  gcc/testsuite/g++.dg/template/defarg23.C
+ 822c19c10de6090a592642ff360f031f  gcc/testsuite/g++.dg/template/defarg23a.C
  e55baeaf118c452b9f707b8236ee86b1  gcc/testsuite/g++.dg/template/defarg3.C
  85fedaa782f4c82823c89324e1881131  gcc/testsuite/g++.dg/template/defarg4.C
  84d085b3ed907df1747cc523efd8d714  gcc/testsuite/g++.dg/template/defarg5.C
*************** f23d748a70179cdd1a4176b5cf3a3e9b  gcc/te
*** 23224,23229 ****
--- 24015,24024 ----
  a9520cdae6a851db507e9382f9099b88  gcc/testsuite/g++.dg/template/dependent-name12.C
  6497291d8f95dbcaebafb311bcecd4b5  gcc/testsuite/g++.dg/template/dependent-name13.C
  014e01792570089773bb7e6bdf655b23  gcc/testsuite/g++.dg/template/dependent-name14.C
+ ecf4a5a96a9a66275db51c43656e4549  gcc/testsuite/g++.dg/template/dependent-name15.C
+ 5a8510fe4f107344e120dad60a01d61e  gcc/testsuite/g++.dg/template/dependent-name16.C
+ 821354ce1318166659eba50d9ae2f7bc  gcc/testsuite/g++.dg/template/dependent-name17.C
+ e8a32b9dc0ab464b7f14ed88342967c0  gcc/testsuite/g++.dg/template/dependent-name18.C
  18d61b100652dfe4816b8b9c6cefa923  gcc/testsuite/g++.dg/template/dependent-name2.C
  03c5fb73327b7854a036dd70874ee185  gcc/testsuite/g++.dg/template/dependent-name3.C
  147338e18276d105fca28005404df2a8  gcc/testsuite/g++.dg/template/dependent-name4.C
*************** da49e3bfe08f2e0003c1ae998fbe1341  gcc/te
*** 23246,23255 ****
  5df8658381333f348754c7590f128994  gcc/testsuite/g++.dg/template/dr408.C
  c10faccbba72797e793c4697fe233f9c  gcc/testsuite/g++.dg/template/dtor1.C
  1884ceace01fa586f2b2e401389c4d6c  gcc/testsuite/g++.dg/template/dtor10.C
  9fd7932701e6809fa0bec2f61112a78d  gcc/testsuite/g++.dg/template/dtor2.C
  1a5ba691093323438c61f31621e88355  gcc/testsuite/g++.dg/template/dtor3.C
  30baa920951cc8b6314c9d2634a73d46  gcc/testsuite/g++.dg/template/dtor4.C
! 6df398ccb1fe455e5493303db41ea421  gcc/testsuite/g++.dg/template/dtor5.C
  7c26bce0e147a736ed5e0ed0993c315e  gcc/testsuite/g++.dg/template/dtor6.C
  4a814bc6794f74cc5cd4043a45a39370  gcc/testsuite/g++.dg/template/dtor7.C
  742d7a2b91f4f06a277defe5ec77d638  gcc/testsuite/g++.dg/template/dtor8.C
--- 24041,24051 ----
  5df8658381333f348754c7590f128994  gcc/testsuite/g++.dg/template/dr408.C
  c10faccbba72797e793c4697fe233f9c  gcc/testsuite/g++.dg/template/dtor1.C
  1884ceace01fa586f2b2e401389c4d6c  gcc/testsuite/g++.dg/template/dtor10.C
+ 9114f16f9adb7110272b71b98727d1a0  gcc/testsuite/g++.dg/template/dtor11.C
  9fd7932701e6809fa0bec2f61112a78d  gcc/testsuite/g++.dg/template/dtor2.C
  1a5ba691093323438c61f31621e88355  gcc/testsuite/g++.dg/template/dtor3.C
  30baa920951cc8b6314c9d2634a73d46  gcc/testsuite/g++.dg/template/dtor4.C
! f506b1031f9f0a990434e45230ea7a0e  gcc/testsuite/g++.dg/template/dtor5.C
  7c26bce0e147a736ed5e0ed0993c315e  gcc/testsuite/g++.dg/template/dtor6.C
  4a814bc6794f74cc5cd4043a45a39370  gcc/testsuite/g++.dg/template/dtor7.C
  742d7a2b91f4f06a277defe5ec77d638  gcc/testsuite/g++.dg/template/dtor8.C
*************** bae48045ce1df918f09c5521dbfe01db  gcc/te
*** 23321,23327 ****
  16cfef30d9df45bb874d63e467a7acb2  gcc/testsuite/g++.dg/template/error53.C
  88b870e41229c363cbb5085bd02d7557  gcc/testsuite/g++.dg/template/error54.C
  55e4e0e15fc84a205703c1483c8dcb09  gcc/testsuite/g++.dg/template/error55.C
! 5ab9045e0c04a7f30535d864a605ddc4  gcc/testsuite/g++.dg/template/error56.C
  d7dd197474ca91bf31cfac374404267d  gcc/testsuite/g++.dg/template/error57.C
  07b03a083081547de28e0a1afd970688  gcc/testsuite/g++.dg/template/error58.C
  4077977a426a678e1310042bae833fd5  gcc/testsuite/g++.dg/template/error59.C
--- 24117,24123 ----
  16cfef30d9df45bb874d63e467a7acb2  gcc/testsuite/g++.dg/template/error53.C
  88b870e41229c363cbb5085bd02d7557  gcc/testsuite/g++.dg/template/error54.C
  55e4e0e15fc84a205703c1483c8dcb09  gcc/testsuite/g++.dg/template/error55.C
! 74695d6bcb52fce6ca84e84fc1c37ae8  gcc/testsuite/g++.dg/template/error56.C
  d7dd197474ca91bf31cfac374404267d  gcc/testsuite/g++.dg/template/error57.C
  07b03a083081547de28e0a1afd970688  gcc/testsuite/g++.dg/template/error58.C
  4077977a426a678e1310042bae833fd5  gcc/testsuite/g++.dg/template/error59.C
*************** e55630cc11be91571d5b580292e51090  gcc/te
*** 23334,23339 ****
--- 24130,24137 ----
  231648bc12e1dfdeee041e3845e82de6  gcc/testsuite/g++.dg/template/explicit-args3.C
  423c767a5a26b27f06ba2a9e2443961a  gcc/testsuite/g++.dg/template/explicit-args4.C
  ebbbdf155c7037b83cc023e3e0fdf4e2  gcc/testsuite/g++.dg/template/explicit-args5.C
+ 758a90528ad869ffc7b6c7723faf93ad  gcc/testsuite/g++.dg/template/explicit-args6.C
+ c516af6d3dbacce330102f6926ee7107  gcc/testsuite/g++.dg/template/explicit-args7.C
  740f8870f14cf5cb47de273475c965b1  gcc/testsuite/g++.dg/template/explicit-instantiation.C
  6335a6cb9fd88717c1c31d2bc8b80c3e  gcc/testsuite/g++.dg/template/explicit-instantiation2.C
  7c2daced476ed6b72c25a10611af9a2c  gcc/testsuite/g++.dg/template/explicit-instantiation3.C
*************** bf4059583f0cb76eb21c8462cd632142  gcc/te
*** 23355,23360 ****
--- 24153,24159 ----
  636ef7c6b9de68376146848db023fb19  gcc/testsuite/g++.dg/template/fn-ref1.C
  f85ab66eeb2b191e2fee2b0b5013d956  gcc/testsuite/g++.dg/template/fn.C
  1581f9141ad183d6d31a009275ebf7a4  gcc/testsuite/g++.dg/template/fnspec1.C
+ b3daac63a206f01addf077a8790a86dc  gcc/testsuite/g++.dg/template/fnspec2.C
  8f101d84c90c958381606b762e3df298  gcc/testsuite/g++.dg/template/fntry1.C
  c3025665d58f3b1443b5cbb53b5bd0f6  gcc/testsuite/g++.dg/template/fntype1.C
  7ac174f3aacd8bf0e65398beb7becf93  gcc/testsuite/g++.dg/template/friend.C
*************** f8b96612d216a7b190f337247c8e8315  gcc/te
*** 23427,23432 ****
--- 24226,24234 ----
  1d4f923241bfe8578940f39c34f80d7c  gcc/testsuite/g++.dg/template/friend7.C
  33f91697bdb7e2294d13e7eb88e92b55  gcc/testsuite/g++.dg/template/friend70.C
  20f36227317bf6bb8a652c05ab8aac80  gcc/testsuite/g++.dg/template/friend71.C
+ 5af8ab1164ed20d8f699efec85950e6e  gcc/testsuite/g++.dg/template/friend72.C
+ e99bfe98523cadafac68ba8e9e8c8f35  gcc/testsuite/g++.dg/template/friend72a.C
+ 76ebd5e11a16898d1bdf51f8b1f76449  gcc/testsuite/g++.dg/template/friend73.C
  ceb858e95982ac0af2e9168f31aea229  gcc/testsuite/g++.dg/template/friend8.C
  59b5bf61b7f6210d3cf3b9b45692794a  gcc/testsuite/g++.dg/template/friend9.C
  d5d24fc94d133229a10c5b13f44c253b  gcc/testsuite/g++.dg/template/func1.C
*************** af3470ca5b94b44392cb92a00a9fb40f  gcc/te
*** 23483,23488 ****
--- 24285,24292 ----
  6dfc1674746db8a02b5504e177f5aca0  gcc/testsuite/g++.dg/template/koenig1.C
  d57d3d6b5c4c1d0a3fa0910f3184bb28  gcc/testsuite/g++.dg/template/koenig10.C
  d7b25ce77b1c73d29c031fd124333dbd  gcc/testsuite/g++.dg/template/koenig11.C
+ 2a237bf85b5110767ee2d7fc60431d5d  gcc/testsuite/g++.dg/template/koenig12.C
+ 910b9b56e4cf571a16e7268a8f27dd9c  gcc/testsuite/g++.dg/template/koenig12a.C
  5e527c865bacdb52386cdb2f216a99d4  gcc/testsuite/g++.dg/template/koenig2.C
  84d2678d3ce8241c254dd0501f0e4816  gcc/testsuite/g++.dg/template/koenig3.C
  56c1c2325d188ec369a6eca6c10766b7  gcc/testsuite/g++.dg/template/koenig4.C
*************** dafd18b2a80a47f586915194376b5a3e  gcc/te
*** 23515,23520 ****
--- 24319,24325 ----
  234161e540c0b821bea3172ffd68f500  gcc/testsuite/g++.dg/template/lookup15.C
  ac8830ccab134a3fc1afbb58a4aad381  gcc/testsuite/g++.dg/template/lookup16.C
  c9d8ca8991f1e26608a14a3215be602c  gcc/testsuite/g++.dg/template/lookup17.C
+ 02c2ead9054c1955bed18bc35eca908a  gcc/testsuite/g++.dg/template/lookup18.C
  3327af698900091e44488904c96d0346  gcc/testsuite/g++.dg/template/lookup2.C
  0287287b4b02081228b1429a9526248d  gcc/testsuite/g++.dg/template/lookup3.C
  9932d99ab28768093ab672853377af03  gcc/testsuite/g++.dg/template/lookup4.C
*************** ffd1465e85fe6778f5e32548bb4d2ad5  gcc/te
*** 23582,23587 ****
--- 24387,24393 ----
  b12c9a151e46871b430564ee47c57714  gcc/testsuite/g++.dg/template/nested4.C
  55bd98cb7f4709362363619cbba3ca30  gcc/testsuite/g++.dg/template/nested5.C
  3d7ff2f50901cdae15e987265ff20ed6  gcc/testsuite/g++.dg/template/nested6.C
+ eb97b845951649a22172514806d1ef72  gcc/testsuite/g++.dg/template/nested7.C
  57b33208329c8d10ea904c3d123076a9  gcc/testsuite/g++.dg/template/new1.C
  dd5106154e8f9fa0866be1a1283b490e  gcc/testsuite/g++.dg/template/new10.C
  8a3716757b496de374cb6d6a4f5b6a64  gcc/testsuite/g++.dg/template/new11.C
*************** c68de3013fc66d5b9ca387b1f0f294ad  gcc/te
*** 23603,23610 ****
--- 24409,24423 ----
  40b38a3d73d53481f9e1570a38ed4eab  gcc/testsuite/g++.dg/template/non-dependent13.C
  1600f68e67fb6396c6b980337441f30d  gcc/testsuite/g++.dg/template/non-dependent14.C
  dcf7edf4a9b89b8e4db4df23e3c71906  gcc/testsuite/g++.dg/template/non-dependent15.C
+ df2f9450b4c23f009b618a2858c5edd2  gcc/testsuite/g++.dg/template/non-dependent16.C
+ 7c13d47f8b24c0780b2f8805083cd529  gcc/testsuite/g++.dg/template/non-dependent16a.C
+ 4fa92805e5bcd1b0f7fe4d7037c94fe1  gcc/testsuite/g++.dg/template/non-dependent16b.C
+ a4d78ed7d9ce9fe8995ab9c022cc3e17  gcc/testsuite/g++.dg/template/non-dependent17.C
  05ce173457f3772b248c409372ff2019  gcc/testsuite/g++.dg/template/non-dependent18.C
+ 6de7844a997a602f8a4534b9e853b804  gcc/testsuite/g++.dg/template/non-dependent19.C
+ 0fd3fc7611c5462416036e63b49a3c70  gcc/testsuite/g++.dg/template/non-dependent19a.C
  3ce6c8331c1ddbc56b2c89ca07992343  gcc/testsuite/g++.dg/template/non-dependent2.C
+ 7705c628c0acfa625ec3f1ae7f12999e  gcc/testsuite/g++.dg/template/non-dependent20.C
  f0c450f8db48d43656ca65a653823c20  gcc/testsuite/g++.dg/template/non-dependent21.C
  3f4aec0e7128a2b9a75631b613288601  gcc/testsuite/g++.dg/template/non-dependent22.C
  9c0fc4f566e5de8ff0339df3c3ef274d  gcc/testsuite/g++.dg/template/non-dependent3.C
*************** d208e10201185efb319abd86bee2ff98  gcc/te
*** 23639,23645 ****
  2b3037f477965e6ee2c5f77022f74ae7  gcc/testsuite/g++.dg/template/nontype26.C
  9fa0b3b07546b30d6e129c3bdd6ff439  gcc/testsuite/g++.dg/template/nontype27.C
  29426ea06c65ca7c3fa8d5ecd6177ab6  gcc/testsuite/g++.dg/template/nontype28.C
! dd760a40f589eabdc6ad0b0f974eddf2  gcc/testsuite/g++.dg/template/nontype29.C
  a90bca38d3ce6988650e843cd4d6cf44  gcc/testsuite/g++.dg/template/nontype3.C
  6b7e8b2d3824f0454ad886de81e794a3  gcc/testsuite/g++.dg/template/nontype4.C
  1b9356f2c2f64b75b3145a2a1f0fd55a  gcc/testsuite/g++.dg/template/nontype5.C
--- 24452,24458 ----
  2b3037f477965e6ee2c5f77022f74ae7  gcc/testsuite/g++.dg/template/nontype26.C
  9fa0b3b07546b30d6e129c3bdd6ff439  gcc/testsuite/g++.dg/template/nontype27.C
  29426ea06c65ca7c3fa8d5ecd6177ab6  gcc/testsuite/g++.dg/template/nontype28.C
! 53853006e3509ee627e6904d05925a8d  gcc/testsuite/g++.dg/template/nontype29.C
  a90bca38d3ce6988650e843cd4d6cf44  gcc/testsuite/g++.dg/template/nontype3.C
  6b7e8b2d3824f0454ad886de81e794a3  gcc/testsuite/g++.dg/template/nontype4.C
  1b9356f2c2f64b75b3145a2a1f0fd55a  gcc/testsuite/g++.dg/template/nontype5.C
*************** ef296b5932e0fe10416d5e48eb64ccb1  gcc/te
*** 23686,23694 ****
--- 24499,24517 ----
  efb971f4591133c5f1a27dea6aeb5d1a  gcc/testsuite/g++.dg/template/param1.C
  335d675c515abc3965d67af12d3a7c72  gcc/testsuite/g++.dg/template/param2.C
  9cdc0ea3c87c4634fd17c85b389758e3  gcc/testsuite/g++.dg/template/param3.C
+ 16a4d698702a87712f5f29479cb72e89  gcc/testsuite/g++.dg/template/param4.C
+ c58b2d32f1995ef6c37b087328d5049d  gcc/testsuite/g++.dg/template/param5.C
+ 0579109357d90e53e9dcc5c46d6ff097  gcc/testsuite/g++.dg/template/param6.C
+ 6c0f10c2ea7776224f52d08aadc8fc53  gcc/testsuite/g++.dg/template/parm-cv1.C
+ 0ce46a39ea3fbd6bcc0de928407a465b  gcc/testsuite/g++.dg/template/parm-cv2.C
+ cf88c333627b0b71c493b6375c6b9286  gcc/testsuite/g++.dg/template/parm-cv3.C
  486d4c5a4f5f81e0939deae14d55e933  gcc/testsuite/g++.dg/template/partial-order1.C
  ae5d48999739c18e13002880ad3cd978  gcc/testsuite/g++.dg/template/partial-order2.C
  e187a317d102d915368fe357726202ba  gcc/testsuite/g++.dg/template/partial-specialization.C
+ dff775a30f72a8e3c0ef1db583a1ea7b  gcc/testsuite/g++.dg/template/partial-specialization10.C
+ 9ba8631cf52f4ca9887f51f7e2a0dee4  gcc/testsuite/g++.dg/template/partial-specialization11.C
+ c6626df8c629f478dbdc351fb543d7ae  gcc/testsuite/g++.dg/template/partial-specialization12.C
+ d778cb1d13749495385a6eb523e7986b  gcc/testsuite/g++.dg/template/partial-specialization13.C
  85762b85724149f8854c0c886e8d724f  gcc/testsuite/g++.dg/template/partial-specialization2.C
  e3bba8fb10b84a1583b714234f4d0593  gcc/testsuite/g++.dg/template/partial-specialization3.C
  e860cd8afddc5e6a3e1e2380ceb1d83c  gcc/testsuite/g++.dg/template/partial-specialization4.C
*************** e860cd8afddc5e6a3e1e2380ceb1d83c  gcc/te
*** 23696,23701 ****
--- 24519,24525 ----
  77d387a1f2b7f4f210ae06ffd544f113  gcc/testsuite/g++.dg/template/partial-specialization6.C
  72d17296056997135c1eea4f3d0d9a5a  gcc/testsuite/g++.dg/template/partial-specialization7.C
  21d91ec2743a88a7efcfc1b03d04dca0  gcc/testsuite/g++.dg/template/partial-specialization8.C
+ 23e79901718347c7d394beb57a5f24de  gcc/testsuite/g++.dg/template/partial-specialization9.C
  bb04475dfd1abb6699b6daee337bc7ef  gcc/testsuite/g++.dg/template/partial1.C
  95285adf34852cd6fef29d70203d9ed6  gcc/testsuite/g++.dg/template/partial10.C
  3dc2f7f38ec49323d6044ddb2bc2e191  gcc/testsuite/g++.dg/template/partial11.C
*************** de5b350b4a291d22a6e427de9a0c69fc  gcc/te
*** 23703,23712 ****
  60cae52d36e0a429fcd673ddc92f855f  gcc/testsuite/g++.dg/template/partial13.C
  ed8b9d57a67bc5c5ea55951ca907f5d9  gcc/testsuite/g++.dg/template/partial14.C
  007e963e6560ba4fd5ed5856096ee4cc  gcc/testsuite/g++.dg/template/partial15.C
  e2ea27f4d30c89986de472da016881a2  gcc/testsuite/g++.dg/template/partial2.C
  629ba41b72a6f4a573aa2b2fc66bf5c8  gcc/testsuite/g++.dg/template/partial3.C
  dbd288590e967c40dee79909821124df  gcc/testsuite/g++.dg/template/partial4.C
! 5fb7e14f347a27ef95a822332fd0dcd4  gcc/testsuite/g++.dg/template/partial5.C
  af2b317af1f920fbca6b70a32297df09  gcc/testsuite/g++.dg/template/partial6.C
  27869f98e951e86a28a79500f1a221da  gcc/testsuite/g++.dg/template/partial7.C
  2b23d416282107a906fcf6e2b3a898e7  gcc/testsuite/g++.dg/template/partial8.C
--- 24527,24541 ----
  60cae52d36e0a429fcd673ddc92f855f  gcc/testsuite/g++.dg/template/partial13.C
  ed8b9d57a67bc5c5ea55951ca907f5d9  gcc/testsuite/g++.dg/template/partial14.C
  007e963e6560ba4fd5ed5856096ee4cc  gcc/testsuite/g++.dg/template/partial15.C
+ e8cf29d5c02656537615112321edbb06  gcc/testsuite/g++.dg/template/partial16.C
+ fe8c95867fca968b1195eda542a24685  gcc/testsuite/g++.dg/template/partial17.C
+ d5aafb7e33779e10c0e110bb5a800ffa  gcc/testsuite/g++.dg/template/partial18.C
+ 833cbbb3f47b6a880fa086a80f1f92fa  gcc/testsuite/g++.dg/template/partial19.C
  e2ea27f4d30c89986de472da016881a2  gcc/testsuite/g++.dg/template/partial2.C
+ dbdbac6ea161a4ae33573d41818336a5  gcc/testsuite/g++.dg/template/partial20.C
  629ba41b72a6f4a573aa2b2fc66bf5c8  gcc/testsuite/g++.dg/template/partial3.C
  dbd288590e967c40dee79909821124df  gcc/testsuite/g++.dg/template/partial4.C
! b565fd8036ecdcf772883c635a5021db  gcc/testsuite/g++.dg/template/partial5.C
  af2b317af1f920fbca6b70a32297df09  gcc/testsuite/g++.dg/template/partial6.C
  27869f98e951e86a28a79500f1a221da  gcc/testsuite/g++.dg/template/partial7.C
  2b23d416282107a906fcf6e2b3a898e7  gcc/testsuite/g++.dg/template/partial8.C
*************** e8d40cd108e2f974a3fc10d060390e72  gcc/te
*** 23785,23793 ****
  60a2a8d876ab6b293ad9f28872942166  gcc/testsuite/g++.dg/template/pr88795.C
  58e4366fc2e06fbcebe48e7f053ae773  gcc/testsuite/g++.dg/template/pr90138.C
  4415cbfb73a456e4f8771706daa1c8ae  gcc/testsuite/g++.dg/template/pr90916.C
! 88f54efc4feef5b437c46f16554c427b  gcc/testsuite/g++.dg/template/pr92440.C
  879f2ddb0bd7cce4775cd1ce02a715f8  gcc/testsuite/g++.dg/template/pr95263.C
  ba5359b3b242b9dcf160ced942b84c77  gcc/testsuite/g++.dg/template/pr95672.C
  d825be7334938ed0813b268843286b89  gcc/testsuite/g++.dg/template/pr97105.C
  1a9c2b77bea572d9e9b53d1028ecba93  gcc/testsuite/g++.dg/template/pr97399.C
  486493b3b0093218ac03594efca72c4d  gcc/testsuite/g++.dg/template/pr97460.C
--- 24614,24623 ----
  60a2a8d876ab6b293ad9f28872942166  gcc/testsuite/g++.dg/template/pr88795.C
  58e4366fc2e06fbcebe48e7f053ae773  gcc/testsuite/g++.dg/template/pr90138.C
  4415cbfb73a456e4f8771706daa1c8ae  gcc/testsuite/g++.dg/template/pr90916.C
! 1ee8c2808ecc5ca67f13be67035f5509  gcc/testsuite/g++.dg/template/pr92440.C
  879f2ddb0bd7cce4775cd1ce02a715f8  gcc/testsuite/g++.dg/template/pr95263.C
  ba5359b3b242b9dcf160ced942b84c77  gcc/testsuite/g++.dg/template/pr95672.C
+ 54e393bbcd59607fdab14dde12030183  gcc/testsuite/g++.dg/template/pr96329.C
  d825be7334938ed0813b268843286b89  gcc/testsuite/g++.dg/template/pr97105.C
  1a9c2b77bea572d9e9b53d1028ecba93  gcc/testsuite/g++.dg/template/pr97399.C
  486493b3b0093218ac03594efca72c4d  gcc/testsuite/g++.dg/template/pr97460.C
*************** a5be65b82f1aef08aa55aeaa5da0c8d4  gcc/te
*** 23877,23883 ****
  c7309345696ac164222361961daab266  gcc/testsuite/g++.dg/template/redecl1.C
  6931ae73eaf26b6f436460259c61e3bb  gcc/testsuite/g++.dg/template/redecl2.C
  397a393f391e401bd8e5e28d01882ef8  gcc/testsuite/g++.dg/template/redecl3.C
! 2fc8ecaf6e21a27a95a25b7e1641c675  gcc/testsuite/g++.dg/template/redecl4.C
  c6c126721707d148ce66066de06c754b  gcc/testsuite/g++.dg/template/ref1.C
  e5547a0a17e476f40de83fdf6f7b297f  gcc/testsuite/g++.dg/template/ref10.C
  55ce57535ea4f812b4b3a2be7cafa6c4  gcc/testsuite/g++.dg/template/ref11.C
--- 24707,24713 ----
  c7309345696ac164222361961daab266  gcc/testsuite/g++.dg/template/redecl1.C
  6931ae73eaf26b6f436460259c61e3bb  gcc/testsuite/g++.dg/template/redecl2.C
  397a393f391e401bd8e5e28d01882ef8  gcc/testsuite/g++.dg/template/redecl3.C
! 8e462a455af2cab1b1ec9d82ebdab57b  gcc/testsuite/g++.dg/template/redecl4.C
  c6c126721707d148ce66066de06c754b  gcc/testsuite/g++.dg/template/ref1.C
  e5547a0a17e476f40de83fdf6f7b297f  gcc/testsuite/g++.dg/template/ref10.C
  55ce57535ea4f812b4b3a2be7cafa6c4  gcc/testsuite/g++.dg/template/ref11.C
*************** a7bf058a51ee7236a37311a73bf15c69  gcc/te
*** 23896,23908 ****
  b3e926a09671bb6d64fb4f63dde975e0  gcc/testsuite/g++.dg/template/scope4.C
  ef990e1f472156561fef3a8840a530bd  gcc/testsuite/g++.dg/template/scope5.C
  0186275439ee5dd117414c26c3ceb2be  gcc/testsuite/g++.dg/template/scope6.C
  08b97a56f0e4650959c70cc0fae65678  gcc/testsuite/g++.dg/template/sfinae-dr657.C
  d4a6fe33f1456d026d068d25f316aa9c  gcc/testsuite/g++.dg/template/sfinae1.C
  08e40e1ccd7635d093d248a8b6295788  gcc/testsuite/g++.dg/template/sfinae10.C
  52303ab3e71ec37ab5f5099984d9715b  gcc/testsuite/g++.dg/template/sfinae11.C
  52f7c4200182090df187eb901e5e01fe  gcc/testsuite/g++.dg/template/sfinae12.C
  fd186f6ad5502f92e5c2137c6fc41c9a  gcc/testsuite/g++.dg/template/sfinae13.C
! 8cbf9e9ec798570f590ac39820557fc3  gcc/testsuite/g++.dg/template/sfinae14.C
  342781775b0e1a80ce495730cb3c43ce  gcc/testsuite/g++.dg/template/sfinae15.C
  37aa08b679e2bc731dc1f5806f3107dc  gcc/testsuite/g++.dg/template/sfinae16.C
  2bc096ac62072d7fefd78642d341f372  gcc/testsuite/g++.dg/template/sfinae17.C
--- 24726,24739 ----
  b3e926a09671bb6d64fb4f63dde975e0  gcc/testsuite/g++.dg/template/scope4.C
  ef990e1f472156561fef3a8840a530bd  gcc/testsuite/g++.dg/template/scope5.C
  0186275439ee5dd117414c26c3ceb2be  gcc/testsuite/g++.dg/template/scope6.C
+ 2cd0b64dfe6040cab0c7b4c02fb0ac81  gcc/testsuite/g++.dg/template/sfinae-dr1227.C
  08b97a56f0e4650959c70cc0fae65678  gcc/testsuite/g++.dg/template/sfinae-dr657.C
  d4a6fe33f1456d026d068d25f316aa9c  gcc/testsuite/g++.dg/template/sfinae1.C
  08e40e1ccd7635d093d248a8b6295788  gcc/testsuite/g++.dg/template/sfinae10.C
  52303ab3e71ec37ab5f5099984d9715b  gcc/testsuite/g++.dg/template/sfinae11.C
  52f7c4200182090df187eb901e5e01fe  gcc/testsuite/g++.dg/template/sfinae12.C
  fd186f6ad5502f92e5c2137c6fc41c9a  gcc/testsuite/g++.dg/template/sfinae13.C
! 737c3ec214ee800394d0e74a09b6bcd0  gcc/testsuite/g++.dg/template/sfinae14.C
  342781775b0e1a80ce495730cb3c43ce  gcc/testsuite/g++.dg/template/sfinae15.C
  37aa08b679e2bc731dc1f5806f3107dc  gcc/testsuite/g++.dg/template/sfinae16.C
  2bc096ac62072d7fefd78642d341f372  gcc/testsuite/g++.dg/template/sfinae17.C
*************** ae991b2f4a945b814f41ee4ceb9ae3e5  gcc/te
*** 23922,23927 ****
--- 24753,24760 ----
  df17c39af3a33df1f3370cca4ca51b18  gcc/testsuite/g++.dg/template/sfinae3.C
  6ed43416c7527cfd981b9c32ebcd26cd  gcc/testsuite/g++.dg/template/sfinae30.C
  7f378098b4a82d5d47518ed450e9113c  gcc/testsuite/g++.dg/template/sfinae31.C
+ 4ecb18193c506692934a47b3527683c5  gcc/testsuite/g++.dg/template/sfinae32.C
+ f1a145fcd62b5f844470ea87991cdb7b  gcc/testsuite/g++.dg/template/sfinae32a.C
  14c823d80f9e1e49b0085a00aa357406  gcc/testsuite/g++.dg/template/sfinae4.C
  d489a85672b2d956beff65b15b095039  gcc/testsuite/g++.dg/template/sfinae5.C
  2622d4a8e2409cf748878b7d2db89477  gcc/testsuite/g++.dg/template/sfinae6.C
*************** b03d3fac8b47ebc0e95fe00fc6b76bb1  gcc/te
*** 23974,23980 ****
  27f9cbb46ad58d9e144b84e0550d6e27  gcc/testsuite/g++.dg/template/spec23.C
  756d8965e92fbeb951248f1d353ce9a9  gcc/testsuite/g++.dg/template/spec24.C
  2397475238ed6c0124020eca88d48cbd  gcc/testsuite/g++.dg/template/spec25.C
! db213be2f1542903882424960efec00b  gcc/testsuite/g++.dg/template/spec26.C
  5549dda851b53530395009f544d09652  gcc/testsuite/g++.dg/template/spec27.C
  2bb0c1bb03c5a5683ffbcab3a0b5b66b  gcc/testsuite/g++.dg/template/spec28.C
  9b290630d01c434872c1ed3db6067a4f  gcc/testsuite/g++.dg/template/spec29.C
--- 24807,24813 ----
  27f9cbb46ad58d9e144b84e0550d6e27  gcc/testsuite/g++.dg/template/spec23.C
  756d8965e92fbeb951248f1d353ce9a9  gcc/testsuite/g++.dg/template/spec24.C
  2397475238ed6c0124020eca88d48cbd  gcc/testsuite/g++.dg/template/spec25.C
! 90af08c7295c94a9d0389f1fd6e46d9a  gcc/testsuite/g++.dg/template/spec26.C
  5549dda851b53530395009f544d09652  gcc/testsuite/g++.dg/template/spec27.C
  2bb0c1bb03c5a5683ffbcab3a0b5b66b  gcc/testsuite/g++.dg/template/spec28.C
  9b290630d01c434872c1ed3db6067a4f  gcc/testsuite/g++.dg/template/spec29.C
*************** d9dcbec8c7ed6d179520a787d5246717  gcc/te
*** 24080,24085 ****
--- 24913,24921 ----
  bba921ba78bd2bb216169aa4ed7d5a1f  gcc/testsuite/g++.dg/template/ttp31.C
  b16d03388df71f44a49ac42b14bb0b78  gcc/testsuite/g++.dg/template/ttp32.C
  eff4a38049a6b02f4545e91036c5fce8  gcc/testsuite/g++.dg/template/ttp33.C
+ d0358242f59f83c835c6f294b4b63d99  gcc/testsuite/g++.dg/template/ttp34.C
+ f1061bfe9cbd4c443a0c7f071ebe178b  gcc/testsuite/g++.dg/template/ttp34a.C
+ c9fdebc946ad552adbe984f19d967fb6  gcc/testsuite/g++.dg/template/ttp34b.C
  ab6711e26bfa413d472fc55475e7cc75  gcc/testsuite/g++.dg/template/ttp4.C
  786176b167efb2fb05f5876afccf4ea7  gcc/testsuite/g++.dg/template/ttp5.C
  ede8e95c1aeeeb0cf1c4cfb0fd860e07  gcc/testsuite/g++.dg/template/ttp6.C
*************** cc03adff320bfe4d556ca4c56ce6a4d6  gcc/te
*** 24190,24195 ****
--- 25026,25033 ----
  cb0bcba86115588eec939f8284e3cf91  gcc/testsuite/g++.dg/template/using28.C
  97d5663b600fcdde53f2a0e991d27e6e  gcc/testsuite/g++.dg/template/using29.C
  2131f7be9d523457118116995b368d74  gcc/testsuite/g++.dg/template/using3.C
+ 778f0770a87efee4fb8b112fb76e020f  gcc/testsuite/g++.dg/template/using30.C
+ c32bab9091d9377b6926efec1f94c2f8  gcc/testsuite/g++.dg/template/using31.C
  cd698ebd98a80f55920d17ae629b4d9b  gcc/testsuite/g++.dg/template/using4.C
  730dbbdbfc73d70df6d68467f8af3c39  gcc/testsuite/g++.dg/template/using5.C
  6bc8a704452336d9d0ee978fef2a7f60  gcc/testsuite/g++.dg/template/using6.C
*************** e4cfba8fd55d0168821bd21efa0237d8  gcc/te
*** 24257,24265 ****
  99dccd364a36e6a92aff0c835b1005ec  gcc/testsuite/g++.dg/tls/thread_local-wrap4.C
  29af05035afeff433899afc9dd95e242  gcc/testsuite/g++.dg/tls/thread_local1.C
  8c04798ad83e68ad71e341845cf0aeea  gcc/testsuite/g++.dg/tls/thread_local10.C
! d51480fe7dc0200fc725bf275a051cb5  gcc/testsuite/g++.dg/tls/thread_local11.C
  8d34f091643f50841b92580e83aa27fb  gcc/testsuite/g++.dg/tls/thread_local11.h
! 9ba00c6b2ff009c3c09ac3dc8f87325b  gcc/testsuite/g++.dg/tls/thread_local11a.C
  4ee3a501daaa3f91b5a4941105652046  gcc/testsuite/g++.dg/tls/thread_local12a.C
  07a03169e8eaaa6a65499c38ca8154a8  gcc/testsuite/g++.dg/tls/thread_local12b.C
  cfa272153ce2e8b87bddf23c6c971e83  gcc/testsuite/g++.dg/tls/thread_local12c.C
--- 25095,25103 ----
  99dccd364a36e6a92aff0c835b1005ec  gcc/testsuite/g++.dg/tls/thread_local-wrap4.C
  29af05035afeff433899afc9dd95e242  gcc/testsuite/g++.dg/tls/thread_local1.C
  8c04798ad83e68ad71e341845cf0aeea  gcc/testsuite/g++.dg/tls/thread_local10.C
! 821d323a1db810533df9cb258c65dfbc  gcc/testsuite/g++.dg/tls/thread_local11.C
  8d34f091643f50841b92580e83aa27fb  gcc/testsuite/g++.dg/tls/thread_local11.h
! 445de3c23ef56c9dfd97f6df57d95140  gcc/testsuite/g++.dg/tls/thread_local11a.C
  4ee3a501daaa3f91b5a4941105652046  gcc/testsuite/g++.dg/tls/thread_local12a.C
  07a03169e8eaaa6a65499c38ca8154a8  gcc/testsuite/g++.dg/tls/thread_local12b.C
  cfa272153ce2e8b87bddf23c6c971e83  gcc/testsuite/g++.dg/tls/thread_local12c.C
*************** cf26e329259baed2e3c2675d10b71343  gcc/te
*** 24286,24298 ****
  3aecfa587091ae9e3524d10e3013ccf0  gcc/testsuite/g++.dg/tls/thread_local7g.C
  9399e18da7889fb7fc5333e641e339e4  gcc/testsuite/g++.dg/tls/thread_local8.C
  46eb3382c1226c7ec68020221453058a  gcc/testsuite/g++.dg/tls/thread_local9.C
! a82ac5b5da7f4998222b5709b05d500d  gcc/testsuite/g++.dg/tls/tls.exp
  86479ffee518e8ec862d5e9dcaa9866f  gcc/testsuite/g++.dg/tls/tls_model1.C
  7212556766805451a098e554a8ab648e  gcc/testsuite/g++.dg/tls/trivial.C
  debf53c602437e43da099fa943834a84  gcc/testsuite/g++.dg/tm/20100429.C
  3dc66157ce361f2f57953ba4b03f9099  gcc/testsuite/g++.dg/tm/20100727.C
  28d2dd05a777910a0b8f465c60b2eb81  gcc/testsuite/g++.dg/tm/alias.C
! 416c983354efe7043ab1c5c6bf402236  gcc/testsuite/g++.dg/tm/asm-1.c
  b3c6fad876fb9fbc95733f84b7fb6645  gcc/testsuite/g++.dg/tm/attrib-2.C
  7de0dbf10fd117711f389b7fbc639fe1  gcc/testsuite/g++.dg/tm/attrib-3.C
  118ca6537a61acc3774d0044bb336a87  gcc/testsuite/g++.dg/tm/attrib-4.C
--- 25124,25136 ----
  3aecfa587091ae9e3524d10e3013ccf0  gcc/testsuite/g++.dg/tls/thread_local7g.C
  9399e18da7889fb7fc5333e641e339e4  gcc/testsuite/g++.dg/tls/thread_local8.C
  46eb3382c1226c7ec68020221453058a  gcc/testsuite/g++.dg/tls/thread_local9.C
! cd38ceee0d36b0fce45f86e5de14dc60  gcc/testsuite/g++.dg/tls/tls.exp
  86479ffee518e8ec862d5e9dcaa9866f  gcc/testsuite/g++.dg/tls/tls_model1.C
  7212556766805451a098e554a8ab648e  gcc/testsuite/g++.dg/tls/trivial.C
  debf53c602437e43da099fa943834a84  gcc/testsuite/g++.dg/tm/20100429.C
  3dc66157ce361f2f57953ba4b03f9099  gcc/testsuite/g++.dg/tm/20100727.C
  28d2dd05a777910a0b8f465c60b2eb81  gcc/testsuite/g++.dg/tm/alias.C
! 416c983354efe7043ab1c5c6bf402236  gcc/testsuite/g++.dg/tm/asm-1.C
  b3c6fad876fb9fbc95733f84b7fb6645  gcc/testsuite/g++.dg/tm/attrib-2.C
  7de0dbf10fd117711f389b7fbc639fe1  gcc/testsuite/g++.dg/tm/attrib-3.C
  118ca6537a61acc3774d0044bb336a87  gcc/testsuite/g++.dg/tm/attrib-4.C
*************** ab1fc8e002302cf3993d553b5114313e  gcc/te
*** 24332,24338 ****
  4b6db556a8e3d45e2e01c92800fdd59c  gcc/testsuite/g++.dg/tm/pr46300.C
  70fe4817ba2f24556c641274822a4472  gcc/testsuite/g++.dg/tm/pr46567.C
  bb3dfa1492a9ed1f8ea1e71e74649e1d  gcc/testsuite/g++.dg/tm/pr46646.C
! 2303ff11da94ae0fff0fe3e1a792a6e2  gcc/testsuite/g++.dg/tm/pr46653.C
  d91165469d6631654c58cff1df797af2  gcc/testsuite/g++.dg/tm/pr46714.C
  8ade92c7c0b4d1148412e0c5db36a110  gcc/testsuite/g++.dg/tm/pr46941.C
  5560027a8cae4f1065af6f83cef4786b  gcc/testsuite/g++.dg/tm/pr47340.C
--- 25170,25176 ----
  4b6db556a8e3d45e2e01c92800fdd59c  gcc/testsuite/g++.dg/tm/pr46300.C
  70fe4817ba2f24556c641274822a4472  gcc/testsuite/g++.dg/tm/pr46567.C
  bb3dfa1492a9ed1f8ea1e71e74649e1d  gcc/testsuite/g++.dg/tm/pr46646.C
! b88d8b3ea383ebe5d3335a2e030eeb8e  gcc/testsuite/g++.dg/tm/pr46653.C
  d91165469d6631654c58cff1df797af2  gcc/testsuite/g++.dg/tm/pr46714.C
  8ade92c7c0b4d1148412e0c5db36a110  gcc/testsuite/g++.dg/tm/pr46941.C
  5560027a8cae4f1065af6f83cef4786b  gcc/testsuite/g++.dg/tm/pr47340.C
*************** b8417aa0335eeb4b3381d508ea7f5c38  gcc/te
*** 24366,24372 ****
  8ee54951fa048ab382ca2cdb618a0489  gcc/testsuite/g++.dg/tm/template-3.C
  90fa076ea202f452e01e1b4dcbe98e33  gcc/testsuite/g++.dg/tm/template-4.C
  0b77afa8d842f0a0b08d94321879afc3  gcc/testsuite/g++.dg/tm/template-5.C
! 9aa210e4efb569cc00de32c4fbbca1cb  gcc/testsuite/g++.dg/tm/tm.exp
  74d340d87dae689e01101883f8aa0e51  gcc/testsuite/g++.dg/tm/unsafe1.C
  21a5d2c89779740daec0728828afc1e7  gcc/testsuite/g++.dg/tm/unsafe2.C
  6c44d3ee04abacf4b43b2418345ac8d3  gcc/testsuite/g++.dg/tm/vector-1.C
--- 25204,25210 ----
  8ee54951fa048ab382ca2cdb618a0489  gcc/testsuite/g++.dg/tm/template-3.C
  90fa076ea202f452e01e1b4dcbe98e33  gcc/testsuite/g++.dg/tm/template-4.C
  0b77afa8d842f0a0b08d94321879afc3  gcc/testsuite/g++.dg/tm/template-5.C
! e87221d16e64dd90db50a3302f9d2c9b  gcc/testsuite/g++.dg/tm/tm.exp
  74d340d87dae689e01101883f8aa0e51  gcc/testsuite/g++.dg/tm/unsafe1.C
  21a5d2c89779740daec0728828afc1e7  gcc/testsuite/g++.dg/tm/unsafe2.C
  6c44d3ee04abacf4b43b2418345ac8d3  gcc/testsuite/g++.dg/tm/vector-1.C
*************** bbb4b68b2b55f3e5d143dfc3cb49196e  gcc/te
*** 24399,24415 ****
  0d7497eea071865e0a522c601884bc48  gcc/testsuite/g++.dg/torture/builtin-clear-padding-2.C
  bea4ac8fffc99273818cdff738206eea  gcc/testsuite/g++.dg/torture/builtin-clear-padding-3.C
  a311bc7bf2311aa8855ffbd171dc6632  gcc/testsuite/g++.dg/torture/builtin-clear-padding-4.C
  318bc94e0ad549681cfaba4d1ff517f8  gcc/testsuite/g++.dg/torture/builtin-location.C
  12bbc31ebdb5389852fb19dbc0efd9b4  gcc/testsuite/g++.dg/torture/covariant-1.C
  ce4f8106ed96ef070bead8ca0df02eea  gcc/testsuite/g++.dg/torture/darwin-cfstring-3.C
  4a0b418d1bbb783ee191f2d05263d191  gcc/testsuite/g++.dg/torture/dg-torture.exp
  fab1470d87fc879a4a285622c057b736  gcc/testsuite/g++.dg/torture/init-list1.C
  4054dd6c177ca7971902e3ac60e34695  gcc/testsuite/g++.dg/torture/ipa-cp-1.C
! 37b54578dbb493ce1238308444c1008c  gcc/testsuite/g++.dg/torture/ppc-ldst-array.C
  ae9c2124c5383beeccdcf4ac2d3bcbd0  gcc/testsuite/g++.dg/torture/pr10148.C
  3fd9794b761154c19e5b03ca7b0727a1  gcc/testsuite/g++.dg/torture/pr102505.C
  674377855743be77a442d6fe11fc86e1  gcc/testsuite/g++.dg/torture/pr103361.C
! 7bea79d22c6b5a627f409edb9e3048f3  gcc/testsuite/g++.dg/torture/pr104601.C
  55421b614773ff9e900b6ad17ffe7df3  gcc/testsuite/g++.dg/torture/pr105189.C
  161154ed9f6193a2a7da119e068c3f3f  gcc/testsuite/g++.dg/torture/pr27218.C
  a84e9fff95df4801f8e582fbc33303b8  gcc/testsuite/g++.dg/torture/pr30252.C
--- 25237,25269 ----
  0d7497eea071865e0a522c601884bc48  gcc/testsuite/g++.dg/torture/builtin-clear-padding-2.C
  bea4ac8fffc99273818cdff738206eea  gcc/testsuite/g++.dg/torture/builtin-clear-padding-3.C
  a311bc7bf2311aa8855ffbd171dc6632  gcc/testsuite/g++.dg/torture/builtin-clear-padding-4.C
+ 43e2079cc83a48891834b215ce568e6b  gcc/testsuite/g++.dg/torture/builtin-clear-padding-5.C
  318bc94e0ad549681cfaba4d1ff517f8  gcc/testsuite/g++.dg/torture/builtin-location.C
  12bbc31ebdb5389852fb19dbc0efd9b4  gcc/testsuite/g++.dg/torture/covariant-1.C
  ce4f8106ed96ef070bead8ca0df02eea  gcc/testsuite/g++.dg/torture/darwin-cfstring-3.C
  4a0b418d1bbb783ee191f2d05263d191  gcc/testsuite/g++.dg/torture/dg-torture.exp
  fab1470d87fc879a4a285622c057b736  gcc/testsuite/g++.dg/torture/init-list1.C
  4054dd6c177ca7971902e3ac60e34695  gcc/testsuite/g++.dg/torture/ipa-cp-1.C
! dd60ebe4e09cf5edd91dd360bcbcba8e  gcc/testsuite/g++.dg/torture/ppc-ldst-array.C
! 3a32f1508211597859da662863730a83  gcc/testsuite/g++.dg/torture/pr100303.C
! bcfa60433b43854760763807c6d1e968  gcc/testsuite/g++.dg/torture/pr100382.C
! b80fd1ce24b9c442efd24bda5db1ee9e  gcc/testsuite/g++.dg/torture/pr100925.C
! 463e24c083efbd763eb3e56fc9eaa555  gcc/testsuite/g++.dg/torture/pr101256.C
! cc991354162e81cb56e6ccfbbe5bef30  gcc/testsuite/g++.dg/torture/pr101373.C
  ae9c2124c5383beeccdcf4ac2d3bcbd0  gcc/testsuite/g++.dg/torture/pr10148.C
+ 6817e09401c09e0c069effadf7724cdb  gcc/testsuite/g++.dg/torture/pr102142.C
  3fd9794b761154c19e5b03ca7b0727a1  gcc/testsuite/g++.dg/torture/pr102505.C
+ 5b67d5f4102db3f2190bc079135ed8cb  gcc/testsuite/g++.dg/torture/pr102581.C
+ 9352df1af47d4caea65a1778683c5d93  gcc/testsuite/g++.dg/torture/pr103040.C
+ 69830e09d5de81b90ba8fd9c1d8b9fd5  gcc/testsuite/g++.dg/torture/pr103073.C
+ f5a9c12e412c8a93a448f288800780b5  gcc/testsuite/g++.dg/torture/pr103266.C
+ 085ab0f1d4d5f66a379f44a3891724c4  gcc/testsuite/g++.dg/torture/pr103351.C
  674377855743be77a442d6fe11fc86e1  gcc/testsuite/g++.dg/torture/pr103361.C
! 98b99f62694b7e1a1f93baf61144a7e7  gcc/testsuite/g++.dg/torture/pr103669.C
! e4fcffb0dc348c47faab30b8fa077a54  gcc/testsuite/g++.dg/torture/pr104450.C
! 1b2c9def415a40edab88d66194706da2  gcc/testsuite/g++.dg/torture/pr104601.C
! ccefc659a7c47911812c4aa74e717a3c  gcc/testsuite/g++.dg/torture/pr104679.C
! e0f2cfb1a1f922a19280efa88e1e5f1c  gcc/testsuite/g++.dg/torture/pr105142.C
  55421b614773ff9e900b6ad17ffe7df3  gcc/testsuite/g++.dg/torture/pr105189.C
  161154ed9f6193a2a7da119e068c3f3f  gcc/testsuite/g++.dg/torture/pr27218.C
  a84e9fff95df4801f8e582fbc33303b8  gcc/testsuite/g++.dg/torture/pr30252.C
*************** e98948443ddbeeb525e86474cba062c6  gcc/te
*** 24622,24627 ****
--- 25476,25482 ----
  fea25c3d92bc951c5129b640f68807a3  gcc/testsuite/g++.dg/torture/pr57190.C
  24828d66ce0b440be3a1976d754d6802  gcc/testsuite/g++.dg/torture/pr57235.C
  f57dc8a39ba283ab87221e83f802be5a  gcc/testsuite/g++.dg/torture/pr57499.C
+ 3523c2fd4ff0b534e0401271ae384ce9  gcc/testsuite/g++.dg/torture/pr57993-2.C
  5dc530d4fc0332bbb42d6d5c5c47a692  gcc/testsuite/g++.dg/torture/pr58201.h
  1f56a692b545bbff0314a6e3861e243e  gcc/testsuite/g++.dg/torture/pr58201_0.C
  af1ff8fa6013e1d4ae4758b7461f737e  gcc/testsuite/g++.dg/torture/pr58201_1.C
*************** bedbbc0d327f38c0cda7664fd1507e7e  gcc/te
*** 24724,24729 ****
--- 25579,25585 ----
  874216a8c65d270dcf488d29a8847247  gcc/testsuite/g++.dg/torture/pr71448.C
  34adfe8ff76a8fce170482e1855f1999  gcc/testsuite/g++.dg/torture/pr71464.C
  1a5141d0024cd5aaec602821dfe13e1b  gcc/testsuite/g++.dg/torture/pr71571.C
+ 42d61e061ef63436adcbbc94d27b23dd  gcc/testsuite/g++.dg/torture/pr71792.C
  6d87997ae70f613b7ae47faba21523d9  gcc/testsuite/g++.dg/torture/pr71874.C
  8afdcc3d1b5353acd0f2b08cedf58326  gcc/testsuite/g++.dg/torture/pr77555.C
  d733eeece63ab510f30d07dad32e3c23  gcc/testsuite/g++.dg/torture/pr77674.C
*************** e81182d941656df2cf9317a908d63c3a  gcc/te
*** 24830,24835 ****
--- 25686,25693 ----
  3162c3dc7f72a4b2566d143f27e1095d  gcc/testsuite/g++.dg/torture/pr95493.C
  881563a4734c7bc6a542eac2ffa6e78b  gcc/testsuite/g++.dg/torture/pr95548.C
  b8b82b8b079f8b69e6feb08f5f8b6787  gcc/testsuite/g++.dg/torture/pr95717.C
+ c7e4af5b1c1eda54df07de9a87086f1e  gcc/testsuite/g++.dg/torture/pr96881-1.C
+ 05680818103b97772c2350c75cd2fca7  gcc/testsuite/g++.dg/torture/pr96881-2.C
  ae315ba77976817d76246168005eeed5  gcc/testsuite/g++.dg/torture/pr97474.C
  0ce41593aacf4a64d2a12d686d969de6  gcc/testsuite/g++.dg/torture/pr97960.C
  e4a2806756d77b77d7647a06211473a0  gcc/testsuite/g++.dg/torture/pr98568.C
*************** cae456330f7461197045e0a2f5fa12ce  gcc/te
*** 24845,24851 ****
  798d1fe29ec407f8783626ddb0d01446  gcc/testsuite/g++.dg/torture/stackalign/eh-thiscall-1.C
  ac2b625997ec285af8b6598167ada1fa  gcc/testsuite/g++.dg/torture/stackalign/eh-vararg-1.C
  5e58161ad482c690ceda702d708037b4  gcc/testsuite/g++.dg/torture/stackalign/eh-vararg-2.C
! 761bc86a6064e359ccfc61fdc6e02b59  gcc/testsuite/g++.dg/torture/stackalign/stackalign.exp
  b1433c47f1b3510e41343cb1176ab88e  gcc/testsuite/g++.dg/torture/stackalign/stdcall-1.C
  b01a92d8302c9dc593001dd53f236dcf  gcc/testsuite/g++.dg/torture/stackalign/test-unwind.h
  46c8c72894cd196236d1548df5c8b779  gcc/testsuite/g++.dg/torture/stackalign/throw-1.C
--- 25703,25709 ----
  798d1fe29ec407f8783626ddb0d01446  gcc/testsuite/g++.dg/torture/stackalign/eh-thiscall-1.C
  ac2b625997ec285af8b6598167ada1fa  gcc/testsuite/g++.dg/torture/stackalign/eh-vararg-1.C
  5e58161ad482c690ceda702d708037b4  gcc/testsuite/g++.dg/torture/stackalign/eh-vararg-2.C
! 702639d85c6ab9692c8cce7a04ee7da7  gcc/testsuite/g++.dg/torture/stackalign/stackalign.exp
  b1433c47f1b3510e41343cb1176ab88e  gcc/testsuite/g++.dg/torture/stackalign/stdcall-1.C
  b01a92d8302c9dc593001dd53f236dcf  gcc/testsuite/g++.dg/torture/stackalign/test-unwind.h
  46c8c72894cd196236d1548df5c8b779  gcc/testsuite/g++.dg/torture/stackalign/throw-1.C
*************** b6c068331ea8c597c13f4878202542bd  gcc/te
*** 24882,24890 ****
  fd3e16a63f00c852c7ac13cbaf5de3b5  gcc/testsuite/g++.dg/torture/vshuf-v8si.C
  b61be4cebf40ca9123f6df364b96b5ba  gcc/testsuite/g++.dg/tree-prof/devirt.C
  80d09170dea54500770122f27eddf44e  gcc/testsuite/g++.dg/tree-prof/indir-call-prof-2.C
! f6d6af3a33fbd9e143a59990c0a241f2  gcc/testsuite/g++.dg/tree-prof/indir-call-prof.C
  2d47f898b6bc4eb5afc1d14262819ed9  gcc/testsuite/g++.dg/tree-prof/inline_mismatch_args.C
! 3110455f6b8221d5f8a0c4fbb19296ea  gcc/testsuite/g++.dg/tree-prof/morefunc.C
  912d73328c4d61995aa0fc60ff274036  gcc/testsuite/g++.dg/tree-prof/partition1.C
  f2275b14adf17ff6f3e0efb26fefe49b  gcc/testsuite/g++.dg/tree-prof/partition2.C
  f1c8c7969780812c78ada663781cdf94  gcc/testsuite/g++.dg/tree-prof/partition3.C
--- 25740,25749 ----
  fd3e16a63f00c852c7ac13cbaf5de3b5  gcc/testsuite/g++.dg/torture/vshuf-v8si.C
  b61be4cebf40ca9123f6df364b96b5ba  gcc/testsuite/g++.dg/tree-prof/devirt.C
  80d09170dea54500770122f27eddf44e  gcc/testsuite/g++.dg/tree-prof/indir-call-prof-2.C
! a38e5ee6e1d042ca58387d5677d36b34  gcc/testsuite/g++.dg/tree-prof/indir-call-prof.C
! 7f3dca5a6193f0f1e49c0109249d7e8f  gcc/testsuite/g++.dg/tree-prof/indir-call-recursive-inlining.C
  2d47f898b6bc4eb5afc1d14262819ed9  gcc/testsuite/g++.dg/tree-prof/inline_mismatch_args.C
! ba1e590b1e37707f808a653458061d38  gcc/testsuite/g++.dg/tree-prof/morefunc.C
  912d73328c4d61995aa0fc60ff274036  gcc/testsuite/g++.dg/tree-prof/partition1.C
  f2275b14adf17ff6f3e0efb26fefe49b  gcc/testsuite/g++.dg/tree-prof/partition2.C
  f1c8c7969780812c78ada663781cdf94  gcc/testsuite/g++.dg/tree-prof/partition3.C
*************** a54a5070a3789fa2ec977323faa81e1d  gcc/te
*** 24895,24905 ****
  70c6aef0cd7751caa0c6b7ed44aabd8b  gcc/testsuite/g++.dg/tree-prof/pr59255.C
  f3b48aeb86621caf4df1f285501e7a5e  gcc/testsuite/g++.dg/tree-prof/pr63581.C
  e5c358735afed9e9c54950b2b1516563  gcc/testsuite/g++.dg/tree-prof/pr79259.C
! 4596cc60725cb368fc62ab2b1db48ad4  gcc/testsuite/g++.dg/tree-prof/reorder.C
  45ee371a772198109e5e2acb3f7c0f0b  gcc/testsuite/g++.dg/tree-prof/reorder_class1.h
  3dacd3cf3baf954cf35437e3859e7171  gcc/testsuite/g++.dg/tree-prof/reorder_class2.h
! 48a21377db7e75a1f567a2a233cc0c84  gcc/testsuite/g++.dg/tree-prof/tree-prof.exp
  2a1f9c8b1ccb241e4745f1e06c56fac3  gcc/testsuite/g++.dg/tree-ssa/20040317-1.C
  9b3694af0b6195c5c10b4b0caa6af5a4  gcc/testsuite/g++.dg/tree-ssa/alias-access-path-1.C
  b08c03e3cfb53a5fe650ed3f65313c3a  gcc/testsuite/g++.dg/tree-ssa/array-temp1.C
  08d69e786b9ad4d3160a39a0d5e489fa  gcc/testsuite/g++.dg/tree-ssa/block1.C
--- 25754,25765 ----
  70c6aef0cd7751caa0c6b7ed44aabd8b  gcc/testsuite/g++.dg/tree-prof/pr59255.C
  f3b48aeb86621caf4df1f285501e7a5e  gcc/testsuite/g++.dg/tree-prof/pr63581.C
  e5c358735afed9e9c54950b2b1516563  gcc/testsuite/g++.dg/tree-prof/pr79259.C
! 3e4967b80142545b6a4d840a9e18f3b3  gcc/testsuite/g++.dg/tree-prof/reorder.C
  45ee371a772198109e5e2acb3f7c0f0b  gcc/testsuite/g++.dg/tree-prof/reorder_class1.h
  3dacd3cf3baf954cf35437e3859e7171  gcc/testsuite/g++.dg/tree-prof/reorder_class2.h
! 6fa635c5a5417b86b038672d89d93a4c  gcc/testsuite/g++.dg/tree-prof/tree-prof.exp
  2a1f9c8b1ccb241e4745f1e06c56fac3  gcc/testsuite/g++.dg/tree-ssa/20040317-1.C
+ 7dda69fb98d47a720fec9044146ebd16  gcc/testsuite/g++.dg/tree-ssa/aggregate1.C
  9b3694af0b6195c5c10b4b0caa6af5a4  gcc/testsuite/g++.dg/tree-ssa/alias-access-path-1.C
  b08c03e3cfb53a5fe650ed3f65313c3a  gcc/testsuite/g++.dg/tree-ssa/array-temp1.C
  08d69e786b9ad4d3160a39a0d5e489fa  gcc/testsuite/g++.dg/tree-ssa/block1.C
*************** d049885f4d053577c545356b2aed7783  gcc/te
*** 24934,24939 ****
--- 25794,25800 ----
  7f7f7d6d353f34c98889acc527e3e195  gcc/testsuite/g++.dg/tree-ssa/ldist-1.C
  e48684fba8399ff995984d71ebc63e26  gcc/testsuite/g++.dg/tree-ssa/lifetime-dse1.C
  9899faa1c78631285ecad43af2fa053d  gcc/testsuite/g++.dg/tree-ssa/loop-cond-split-1.C
+ 8a88746bf26b483b92bb27194cb12cb4  gcc/testsuite/g++.dg/tree-ssa/modref-1.C
  c60f58c35051bdf33475572fe6676ded  gcc/testsuite/g++.dg/tree-ssa/new1.C
  15ab0ba34272a9b9cb6f26af6f24d6be  gcc/testsuite/g++.dg/tree-ssa/nonzero-1.C
  7966471926be0c3228b95fecdf1c10bc  gcc/testsuite/g++.dg/tree-ssa/nonzero-2.C
*************** c8003cf8b272bb11f8a21275b9e5c595  gcc/te
*** 24942,24947 ****
--- 25803,25813 ----
  9ea732e01391f201c070578af2e42c8a  gcc/testsuite/g++.dg/tree-ssa/obj-type-ref.C
  6474aef48daec343e8355cccf7ae5d56  gcc/testsuite/g++.dg/tree-ssa/phiopt-1.C
  daf046d4911258823d8a9f8947354f8c  gcc/testsuite/g++.dg/tree-ssa/pointer-reference-alias.C
+ 38a84cee75caf37cd532dd21e3d1fc85  gcc/testsuite/g++.dg/tree-ssa/pr101769.C
+ 7837e8067b44742d47649f2f8b536584  gcc/testsuite/g++.dg/tree-ssa/pr102216-1.C
+ 1a99806d72062cb909c91fe385b75643  gcc/testsuite/g++.dg/tree-ssa/pr102216-2.C
+ b43892ed3a0294f440ccfdc4017d74ed  gcc/testsuite/g++.dg/tree-ssa/pr103168.C
+ 4f4b9d993ed3cb39bcc4613af0e55332  gcc/testsuite/g++.dg/tree-ssa/pr104529.C
  482a64ed60783060cd1097d55e09aa68  gcc/testsuite/g++.dg/tree-ssa/pr13146.C
  e92faf794746371f0e92e8a68244ff5e  gcc/testsuite/g++.dg/tree-ssa/pr13954.C
  316b32deb2433fa7d0e4ad1c5a62804b  gcc/testsuite/g++.dg/tree-ssa/pr14703.C
*************** b7fb5b853f7854c141799346f2354a0c  gcc/te
*** 25015,25021 ****
  8aea640c13c12833067fe21f2796f0ab  gcc/testsuite/g++.dg/tree-ssa/pr28238.C
  376ebc3d295f82c1a09d3726e5adb664  gcc/testsuite/g++.dg/tree-ssa/pr29902.C
  9ba7a3040603a45fb04631498ba8894c  gcc/testsuite/g++.dg/tree-ssa/pr30738.C
! 18903dd38f72e9e65b9dc4d3d145bf5a  gcc/testsuite/g++.dg/tree-ssa/pr31146-2.C
  5ecc94721fc6b658cc6ddbdb37dc1489  gcc/testsuite/g++.dg/tree-ssa/pr31146.C
  b39514536a29fff0b9033f022be8908b  gcc/testsuite/g++.dg/tree-ssa/pr31307.C
  22dcd80f01872c86b3e1268b90f33072  gcc/testsuite/g++.dg/tree-ssa/pr33593.C
--- 25881,25887 ----
  8aea640c13c12833067fe21f2796f0ab  gcc/testsuite/g++.dg/tree-ssa/pr28238.C
  376ebc3d295f82c1a09d3726e5adb664  gcc/testsuite/g++.dg/tree-ssa/pr29902.C
  9ba7a3040603a45fb04631498ba8894c  gcc/testsuite/g++.dg/tree-ssa/pr30738.C
! 61052fabe4d162cf6a2af7be3489a981  gcc/testsuite/g++.dg/tree-ssa/pr31146-2.C
  5ecc94721fc6b658cc6ddbdb37dc1489  gcc/testsuite/g++.dg/tree-ssa/pr31146.C
  b39514536a29fff0b9033f022be8908b  gcc/testsuite/g++.dg/tree-ssa/pr31307.C
  22dcd80f01872c86b3e1268b90f33072  gcc/testsuite/g++.dg/tree-ssa/pr33593.C
*************** a8fec5c2428ff5aa3f865ba34c0b76b8  gcc/te
*** 25072,25078 ****
  a51f5b92849ce1d0cdf4ba95ddc138d6  gcc/testsuite/g++.dg/tree-ssa/pr78847.C
  4dd9b463d938a2a49979c117342e2bdd  gcc/testsuite/g++.dg/tree-ssa/pr79159.C
  d3522c1a0ee5ce4a75cee9a89f394737  gcc/testsuite/g++.dg/tree-ssa/pr80293.C
! 2dbfe8ad8977fe308da47882716043fa  gcc/testsuite/g++.dg/tree-ssa/pr81408.C
  8b26e12d4d19370d3975bee970535253  gcc/testsuite/g++.dg/tree-ssa/pr81702.C
  07328ee6469ac64e4bd4807c2a72bd66  gcc/testsuite/g++.dg/tree-ssa/pr81719.C
  8f34a42b700068a3be53751206c5e499  gcc/testsuite/g++.dg/tree-ssa/pr82294.C
--- 25938,25944 ----
  a51f5b92849ce1d0cdf4ba95ddc138d6  gcc/testsuite/g++.dg/tree-ssa/pr78847.C
  4dd9b463d938a2a49979c117342e2bdd  gcc/testsuite/g++.dg/tree-ssa/pr79159.C
  d3522c1a0ee5ce4a75cee9a89f394737  gcc/testsuite/g++.dg/tree-ssa/pr80293.C
! f8e59bfb825e83395c2fc6015cf29cbe  gcc/testsuite/g++.dg/tree-ssa/pr81408.C
  8b26e12d4d19370d3975bee970535253  gcc/testsuite/g++.dg/tree-ssa/pr81702.C
  07328ee6469ac64e4bd4807c2a72bd66  gcc/testsuite/g++.dg/tree-ssa/pr81719.C
  8f34a42b700068a3be53751206c5e499  gcc/testsuite/g++.dg/tree-ssa/pr82294.C
*************** b510682a84117ab69d6d6fc7663c13eb  gcc/te
*** 25098,25104 ****
  8150252ff7ee797b435e80b9a09b8447  gcc/testsuite/g++.dg/tree-ssa/pr93845.C
  3d6952e95a1d28016364fe2ef5108b78  gcc/testsuite/g++.dg/tree-ssa/pr93940.C
  e3fc8e52e34eeab2a0ee22888a080920  gcc/testsuite/g++.dg/tree-ssa/pr94224.C
! 923e882ed0f63d86765b1563169471f0  gcc/testsuite/g++.dg/tree-ssa/pr94403.C
  898168c15a8e46be3b42ea4b0dae43a7  gcc/testsuite/g++.dg/tree-ssa/pr95638.C
  8cb82713ae80f84d454074acf0670135  gcc/testsuite/g++.dg/tree-ssa/pr95649.C
  e53cec97097a9dc8117c2effbf4ea8d5  gcc/testsuite/g++.dg/tree-ssa/pr96930.C
--- 25964,25970 ----
  8150252ff7ee797b435e80b9a09b8447  gcc/testsuite/g++.dg/tree-ssa/pr93845.C
  3d6952e95a1d28016364fe2ef5108b78  gcc/testsuite/g++.dg/tree-ssa/pr93940.C
  e3fc8e52e34eeab2a0ee22888a080920  gcc/testsuite/g++.dg/tree-ssa/pr94224.C
! 6fb2fc9390aae4ab8ae1323b158d6706  gcc/testsuite/g++.dg/tree-ssa/pr94403.C
  898168c15a8e46be3b42ea4b0dae43a7  gcc/testsuite/g++.dg/tree-ssa/pr95638.C
  8cb82713ae80f84d454074acf0670135  gcc/testsuite/g++.dg/tree-ssa/pr95649.C
  e53cec97097a9dc8117c2effbf4ea8d5  gcc/testsuite/g++.dg/tree-ssa/pr96930.C
*************** cbba22e9568932c7e9798b4143e8babf  gcc/te
*** 25120,25126 ****
  96f8700e9d4c1998c5e9b1d7fb20edd1  gcc/testsuite/g++.dg/tree-ssa/ssa-sra-2.C
  3fc97853b7f5a33a82d43b9c8b97e80a  gcc/testsuite/g++.dg/tree-ssa/ssa-sra-3.C
  21d667243f1873cc74a1060b9e5a0f15  gcc/testsuite/g++.dg/tree-ssa/ssa-store-ccp-1.C
- 49ee787a379cb6910b9e5718ae694e10  gcc/testsuite/g++.dg/tree-ssa/stabilize1.C
  23df56c1ec29f9a5d4f481355d17c3dc  gcc/testsuite/g++.dg/tree-ssa/strlenopt-1.C
  948d00fc979cc2bd7b0f86e83a4eb496  gcc/testsuite/g++.dg/tree-ssa/strlenopt-2.C
  2a5935f325533fa199bc7f5e3b2b36d5  gcc/testsuite/g++.dg/tree-ssa/tail-call-1.C
--- 25986,25991 ----
*************** dc3ef40ef566357c4f0d41f5f42c2bcc  gcc/te
*** 25138,25144 ****
  cd932ca55aa9252a2188bb383ac82ed7  gcc/testsuite/g++.dg/tsan/pr64265.C
  96f255f38a0cb7c1f48e01e6e96d0abf  gcc/testsuite/g++.dg/tsan/pr80110.C
  ba8b56e337f98c3bdfc0402e0dac484a  gcc/testsuite/g++.dg/tsan/pr88018.C
! de72bd7c19fc047d8e97a5a456b78c98  gcc/testsuite/g++.dg/tsan/tsan.exp
  1048d0e6a3ca80d3b4720a445847e7cb  gcc/testsuite/g++.dg/tsan/tsan_barrier.h
  4a8a525549940ddd77b19875ffb1bcc6  gcc/testsuite/g++.dg/tsan/vptr_benign_race.C
  580f9f0da39034a82858b2ac3acfb1dc  gcc/testsuite/g++.dg/tsan/vptr_harmful_race.C
--- 26003,26010 ----
  cd932ca55aa9252a2188bb383ac82ed7  gcc/testsuite/g++.dg/tsan/pr64265.C
  96f255f38a0cb7c1f48e01e6e96d0abf  gcc/testsuite/g++.dg/tsan/pr80110.C
  ba8b56e337f98c3bdfc0402e0dac484a  gcc/testsuite/g++.dg/tsan/pr88018.C
! f7cc5e2f9d147758fb8abe92b561f4e8  gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C
! 9727afd6a8832645ef17f13c675ff682  gcc/testsuite/g++.dg/tsan/tsan.exp
  1048d0e6a3ca80d3b4720a445847e7cb  gcc/testsuite/g++.dg/tsan/tsan_barrier.h
  4a8a525549940ddd77b19875ffb1bcc6  gcc/testsuite/g++.dg/tsan/vptr_benign_race.C
  580f9f0da39034a82858b2ac3acfb1dc  gcc/testsuite/g++.dg/tsan/vptr_harmful_race.C
*************** a31d68dcdd494a9e3696522314a2d394  gcc/te
*** 25189,25195 ****
  f7faaf2b97bab58f52954e0aa5270369  gcc/testsuite/g++.dg/ubsan/pr68259.C
  830daa3cb9e6fe6ba043b18fda26fbcd  gcc/testsuite/g++.dg/ubsan/pr68508.C
  a6c1f578df40baa9289b2034df0bba52  gcc/testsuite/g++.dg/ubsan/pr69922.C
! 9925a290b1a4d8a4bdcf5ddebaab9887  gcc/testsuite/g++.dg/ubsan/pr70035.C
  ce9a3608f9ea7f32723d27471f56a902  gcc/testsuite/g++.dg/ubsan/pr70135.C
  56810c4012d688f214e18664f2974426  gcc/testsuite/g++.dg/ubsan/pr70147-1.C
  af8fe8f8c142ba4099bf3fd97c7fb5f4  gcc/testsuite/g++.dg/ubsan/pr70147-2.C
--- 26055,26061 ----
  f7faaf2b97bab58f52954e0aa5270369  gcc/testsuite/g++.dg/ubsan/pr68259.C
  830daa3cb9e6fe6ba043b18fda26fbcd  gcc/testsuite/g++.dg/ubsan/pr68508.C
  a6c1f578df40baa9289b2034df0bba52  gcc/testsuite/g++.dg/ubsan/pr69922.C
! 26eaf7c6273ca2784ba994631c131209  gcc/testsuite/g++.dg/ubsan/pr70035.C
  ce9a3608f9ea7f32723d27471f56a902  gcc/testsuite/g++.dg/ubsan/pr70135.C
  56810c4012d688f214e18664f2974426  gcc/testsuite/g++.dg/ubsan/pr70147-1.C
  af8fe8f8c142ba4099bf3fd97c7fb5f4  gcc/testsuite/g++.dg/ubsan/pr70147-2.C
*************** ceefdce8629af65f842f11d82ad86264  gcc/te
*** 25238,25244 ****
  a512113af0ac3172f2466ee3a8c93259  gcc/testsuite/g++.dg/ubsan/static-init-1.C
  b1a38b150fef25f02239b481561ad148  gcc/testsuite/g++.dg/ubsan/static-init-2.C
  76c5d965e0f0683fddef3a001be6193c  gcc/testsuite/g++.dg/ubsan/static-init-3.C
! 9fa75d580ce9a35e561b204d8bdf8b2d  gcc/testsuite/g++.dg/ubsan/ubsan.exp
  cc0dd6c9b1afc04ca7636be396fec990  gcc/testsuite/g++.dg/ubsan/vla-1.C
  f36d3df10de7d616fdeaf6bd08060535  gcc/testsuite/g++.dg/ubsan/vla-2.C
  5217088a7dd4248f6e9f0170ee0f262b  gcc/testsuite/g++.dg/ubsan/vptr-1.C
--- 26104,26110 ----
  a512113af0ac3172f2466ee3a8c93259  gcc/testsuite/g++.dg/ubsan/static-init-1.C
  b1a38b150fef25f02239b481561ad148  gcc/testsuite/g++.dg/ubsan/static-init-2.C
  76c5d965e0f0683fddef3a001be6193c  gcc/testsuite/g++.dg/ubsan/static-init-3.C
! 20c3104ab79db6aca177698bb0a40e3d  gcc/testsuite/g++.dg/ubsan/ubsan.exp
  cc0dd6c9b1afc04ca7636be396fec990  gcc/testsuite/g++.dg/ubsan/vla-1.C
  f36d3df10de7d616fdeaf6bd08060535  gcc/testsuite/g++.dg/ubsan/vla-2.C
  5217088a7dd4248f6e9f0170ee0f262b  gcc/testsuite/g++.dg/ubsan/vptr-1.C
*************** cef046f562c0a23eb331cea94cd5b44f  gcc/te
*** 25259,25264 ****
--- 26125,26131 ----
  be256b721153266207c19c200b69e403  gcc/testsuite/g++.dg/ubsan/vptr-7.C
  46d3d7c5be428e6ff1218aa017f38d54  gcc/testsuite/g++.dg/ubsan/vptr-8.C
  d84ccb64e326e6f939102655055da75e  gcc/testsuite/g++.dg/ubsan/vptr-9.C
+ d2e64a4a0ecb590f25f40402647fb5a3  gcc/testsuite/g++.dg/uninit-pr74762.C
  bc857364cab52e462e2e718cd7fefaa8  gcc/testsuite/g++.dg/uninit-pred-1_a.C
  6b26b973249421d830f2fec8a5610837  gcc/testsuite/g++.dg/uninit-pred-1_b.C
  f0a1fb92cf38358bf8b5f06449cca963  gcc/testsuite/g++.dg/uninit-pred-2_a.C
*************** c299a2e8f2fcb74286fbc4d6d1cf115d  gcc/te
*** 25266,25280 ****
  5786bf78cee1b70c9836b60ec34f42ba  gcc/testsuite/g++.dg/uninit-pred-3_a.C
  e7062d8b8ae34f0a4f8b5b407e180316  gcc/testsuite/g++.dg/uninit-pred-3_b.C
  5ee1b7f723d2f67283e9a5a7eb0c38f1  gcc/testsuite/g++.dg/uninit-pred-4.C
! 2fcbc57bdfc93414220095e1211dcd11  gcc/testsuite/g++.dg/uninit-pred-loop-1_a.cc
! 03d2a78bcc9e78b2411e9795306910ae  gcc/testsuite/g++.dg/uninit-pred-loop-1_b.cc
! 78a350564146421e6be7ebee31e87669  gcc/testsuite/g++.dg/uninit-pred-loop-1_c.cc
! 2fcbc57bdfc93414220095e1211dcd11  gcc/testsuite/g++.dg/uninit-pred-loop_1.cc
  0264f53339319263fc37b72714421f02  gcc/testsuite/g++.dg/vec-init-1.C
  ec1873d6dd21d2c7cc0b6215931efed0  gcc/testsuite/g++.dg/vect/param-max-aliased-pr26197.cc
  2f4df2b1afc45455438253ceb176020a  gcc/testsuite/g++.dg/vect/pr102572.cc
  276b94843e74f8cadd0fe569be60befb  gcc/testsuite/g++.dg/vect/pr102788.cc
  5cc7bcb3384dda5ac9ed1595171888bf  gcc/testsuite/g++.dg/vect/pr105053.cc
  02ab0e7dea4c30ddeaecb971c0b8241e  gcc/testsuite/g++.dg/vect/pr19951.cc
  e7c5a636a280962b70166d1494223f9c  gcc/testsuite/g++.dg/vect/pr21218.cc
  9a0a6f56bdb2cc697abc78c901418a19  gcc/testsuite/g++.dg/vect/pr21734_1.cc
--- 26133,26152 ----
  5786bf78cee1b70c9836b60ec34f42ba  gcc/testsuite/g++.dg/uninit-pred-3_a.C
  e7062d8b8ae34f0a4f8b5b407e180316  gcc/testsuite/g++.dg/uninit-pred-3_b.C
  5ee1b7f723d2f67283e9a5a7eb0c38f1  gcc/testsuite/g++.dg/uninit-pred-4.C
! 2fcbc57bdfc93414220095e1211dcd11  gcc/testsuite/g++.dg/uninit-pred-loop-1_a.C
! 9a63e9b5506271a4e3d1932baef3c60c  gcc/testsuite/g++.dg/uninit-pred-loop-1_b.C
! 03f4073fa87ba95286c70ed7ad57b553  gcc/testsuite/g++.dg/uninit-pred-loop-1_c.C
! 2fcbc57bdfc93414220095e1211dcd11  gcc/testsuite/g++.dg/uninit-pred-loop_1.C
  0264f53339319263fc37b72714421f02  gcc/testsuite/g++.dg/vec-init-1.C
  ec1873d6dd21d2c7cc0b6215931efed0  gcc/testsuite/g++.dg/vect/param-max-aliased-pr26197.cc
+ bb3b906322f73b1bfddaab3658a0314e  gcc/testsuite/g++.dg/vect/pr102226.cc
+ 091450be1a744e77a7f8e0ccd877203d  gcc/testsuite/g++.dg/vect/pr102421.cc
  2f4df2b1afc45455438253ceb176020a  gcc/testsuite/g++.dg/vect/pr102572.cc
+ 5297a137025a3614c26b3000c88e12ab  gcc/testsuite/g++.dg/vect/pr102696.cc
  276b94843e74f8cadd0fe569be60befb  gcc/testsuite/g++.dg/vect/pr102788.cc
+ 31e8975bb6e0a9a4f2dbd4cf496dbc6b  gcc/testsuite/g++.dg/vect/pr103494.cc
  5cc7bcb3384dda5ac9ed1595171888bf  gcc/testsuite/g++.dg/vect/pr105053.cc
+ 333be91f77cee11284aa46108024ad5e  gcc/testsuite/g++.dg/vect/pr105254.cc
  02ab0e7dea4c30ddeaecb971c0b8241e  gcc/testsuite/g++.dg/vect/pr19951.cc
  e7c5a636a280962b70166d1494223f9c  gcc/testsuite/g++.dg/vect/pr21218.cc
  9a0a6f56bdb2cc697abc78c901418a19  gcc/testsuite/g++.dg/vect/pr21734_1.cc
*************** d09670c30fbad6b7f0837b7f7af80847  gcc/te
*** 25315,25321 ****
  45fba772e8df802bc65558d22969f8bc  gcc/testsuite/g++.dg/vect/pr70729-nest.cc
  e13bcab5554300f88fc649bd78d61877  gcc/testsuite/g++.dg/vect/pr70729.cc
  dc35acb0f3b80c07fb4789cb89eb09b2  gcc/testsuite/g++.dg/vect/pr70944.cc
! 0258e5eedd1d313ba5369d22c0225708  gcc/testsuite/g++.dg/vect/pr71483.c
  6fd4436b3a842028430df081b867cc96  gcc/testsuite/g++.dg/vect/pr84362.cc
  57ec4c770d54501152de549d1dd29844  gcc/testsuite/g++.dg/vect/pr84556.cc
  179d2cf91ba3eb321a9c8dc0e19457fc  gcc/testsuite/g++.dg/vect/pr87621.cc
--- 26187,26193 ----
  45fba772e8df802bc65558d22969f8bc  gcc/testsuite/g++.dg/vect/pr70729-nest.cc
  e13bcab5554300f88fc649bd78d61877  gcc/testsuite/g++.dg/vect/pr70729.cc
  dc35acb0f3b80c07fb4789cb89eb09b2  gcc/testsuite/g++.dg/vect/pr70944.cc
! 0258e5eedd1d313ba5369d22c0225708  gcc/testsuite/g++.dg/vect/pr71483.cc
  6fd4436b3a842028430df081b867cc96  gcc/testsuite/g++.dg/vect/pr84362.cc
  57ec4c770d54501152de549d1dd29844  gcc/testsuite/g++.dg/vect/pr84556.cc
  179d2cf91ba3eb321a9c8dc0e19457fc  gcc/testsuite/g++.dg/vect/pr87621.cc
*************** c0a7423fe6c8b91501b54c66ebfe3c32  gcc/te
*** 25333,25339 ****
  542124827fb9187c91a9422b19bbdbd5  gcc/testsuite/g++.dg/vect/pr97255.cc
  59531286c9e0eca9137074a891cbae16  gcc/testsuite/g++.dg/vect/pr97347.cc
  ad03cf9b82f9825b989c4dbfdd8a2d38  gcc/testsuite/g++.dg/vect/pr98064.cc
! d069359b51fa53b7e19c17437cb21559  gcc/testsuite/g++.dg/vect/pr99149.cc
  b9b7aeb622b8ca037050c102cf2f4775  gcc/testsuite/g++.dg/vect/pr99220.cc
  fc32d36182f79190004abe52c516089e  gcc/testsuite/g++.dg/vect/simd-1.cc
  c0baf08fc01514d3f4fca19bf3fc9596  gcc/testsuite/g++.dg/vect/simd-10.cc
--- 26205,26211 ----
  542124827fb9187c91a9422b19bbdbd5  gcc/testsuite/g++.dg/vect/pr97255.cc
  59531286c9e0eca9137074a891cbae16  gcc/testsuite/g++.dg/vect/pr97347.cc
  ad03cf9b82f9825b989c4dbfdd8a2d38  gcc/testsuite/g++.dg/vect/pr98064.cc
! b4c03b87b1332ccdfc7fb8407f7a526f  gcc/testsuite/g++.dg/vect/pr99149.cc
  b9b7aeb622b8ca037050c102cf2f4775  gcc/testsuite/g++.dg/vect/pr99220.cc
  fc32d36182f79190004abe52c516089e  gcc/testsuite/g++.dg/vect/simd-1.cc
  c0baf08fc01514d3f4fca19bf3fc9596  gcc/testsuite/g++.dg/vect/simd-10.cc
*************** b8fb5b23ece050421d669915c600780b  gcc/te
*** 25366,25401 ****
  1d058dbf5c45144767f1dcf45b0e4501  gcc/testsuite/g++.dg/vect/slp-pr87105.cc
  0b813e60a26de881560d29211902ec5c  gcc/testsuite/g++.dg/vect/slp-pr92516.cc
  575eb20a7046f483778f87a8b184d092  gcc/testsuite/g++.dg/vect/slp-pr97636.cc
! c4870dc8df97cfdf99e9845844e277e0  gcc/testsuite/g++.dg/vect/slp-pr98855.cc
  474ba1e8afc259a33d5d37ef2c18cf22  gcc/testsuite/g++.dg/vect/vec-cond-expr-eh.C
! 4c4988dc2dd2a935b16d2d85b551d22c  gcc/testsuite/g++.dg/vect/vect.exp
  71d10a285587bb46cc1bf1ab339fa743  gcc/testsuite/g++.dg/warn/83895.C
  daeef1989c46da48d17102900d28c0c7  gcc/testsuite/g++.dg/warn/Waddress-1.C
  76f33c61a70fa23046bdab31539d3229  gcc/testsuite/g++.dg/warn/Waddress-2.C
  ed2324232decd497351f560a041de128  gcc/testsuite/g++.dg/warn/Waddress-3.C
  dc053c634cf498503fefe544d38cf6bd  gcc/testsuite/g++.dg/warn/Waddress-4.C
  f70b05c7c6da2eb1e388cdb09831d355  gcc/testsuite/g++.dg/warn/Waddress-of-packed-member1.C
  7e2363ecaf57d636dba9be32a29d05fa  gcc/testsuite/g++.dg/warn/Waddress-of-packed-member2.C
  38c1d3bcd70aac8e2e1f0e19b075e6a9  gcc/testsuite/g++.dg/warn/Wall-write-strings.C
  37d0be0d56d9e0aa2b1a4c10c166ffd2  gcc/testsuite/g++.dg/warn/Walways-true-1.C
! b743913da43f9ec511faf7814e2e77c8  gcc/testsuite/g++.dg/warn/Walways-true-2.C
  85946d6c4d80b74fc3bf7351777c73a0  gcc/testsuite/g++.dg/warn/Walways-true-3.C
! 31884c272729c36503a83644d8a5da3a  gcc/testsuite/g++.dg/warn/Warray-bounds-10.C
! 46868ccc2900cad79bbc60748b0f9a2d  gcc/testsuite/g++.dg/warn/Warray-bounds-11.C
! 78540f5a492103fb057f69838aed0582  gcc/testsuite/g++.dg/warn/Warray-bounds-12.C
! a48159ca7c6ab8b2c9be10d9045d0fcd  gcc/testsuite/g++.dg/warn/Warray-bounds-13.C
  751a532e4227b40e2fb6a1e86824d452  gcc/testsuite/g++.dg/warn/Warray-bounds-14.C
  572a6d7fa549dc456ad9ccafcd0de9c3  gcc/testsuite/g++.dg/warn/Warray-bounds-15.C
  8f5c02cdd45c1c3c413d6acbed9a3818  gcc/testsuite/g++.dg/warn/Warray-bounds-16.C
! 95942f0a33d153158cb14cc46802363b  gcc/testsuite/g++.dg/warn/Warray-bounds-17.C
  35573117acc546f03b1b924b513e72cd  gcc/testsuite/g++.dg/warn/Warray-bounds-18.C
  0186412c3f9a47b93aafb28f79f2d7c7  gcc/testsuite/g++.dg/warn/Warray-bounds-19.C
  798433d4099cd8d7572fde802e640896  gcc/testsuite/g++.dg/warn/Warray-bounds-2.C
! 1b0615848ca5ff6a70ebec91e1f985ec  gcc/testsuite/g++.dg/warn/Warray-bounds-20.C
  b524c7274934e8875fa2c0efd508fc92  gcc/testsuite/g++.dg/warn/Warray-bounds-21.C
  017ae9052a1c7ed7c39be76298ec9639  gcc/testsuite/g++.dg/warn/Warray-bounds-22.C
  d36f126068fa0852b0b29fa28089dbd3  gcc/testsuite/g++.dg/warn/Warray-bounds-23.C
  a0e826a4537965b07b3880791c956f9a  gcc/testsuite/g++.dg/warn/Warray-bounds-24.C
  de22eb15ae2420b77fbb90f3b584c785  gcc/testsuite/g++.dg/warn/Warray-bounds-3.C
  44982cde6de999156b24ac5b0d41b330  gcc/testsuite/g++.dg/warn/Warray-bounds-4.C
  843811e9e3bbecf56a84c608e9fd1073  gcc/testsuite/g++.dg/warn/Warray-bounds-5.C
--- 26238,26280 ----
  1d058dbf5c45144767f1dcf45b0e4501  gcc/testsuite/g++.dg/vect/slp-pr87105.cc
  0b813e60a26de881560d29211902ec5c  gcc/testsuite/g++.dg/vect/slp-pr92516.cc
  575eb20a7046f483778f87a8b184d092  gcc/testsuite/g++.dg/vect/slp-pr97636.cc
! 06bbcfadea2fee02b417d4dadcb3d241  gcc/testsuite/g++.dg/vect/slp-pr98855.cc
! cd8c6e5cf62f7909f63f4516114ba39c  gcc/testsuite/g++.dg/vect/slp-pr99971.cc
  474ba1e8afc259a33d5d37ef2c18cf22  gcc/testsuite/g++.dg/vect/vec-cond-expr-eh.C
! 4adc68b9aa6a516c1c4680fdaee33148  gcc/testsuite/g++.dg/vect/vect.exp
  71d10a285587bb46cc1bf1ab339fa743  gcc/testsuite/g++.dg/warn/83895.C
  daeef1989c46da48d17102900d28c0c7  gcc/testsuite/g++.dg/warn/Waddress-1.C
  76f33c61a70fa23046bdab31539d3229  gcc/testsuite/g++.dg/warn/Waddress-2.C
  ed2324232decd497351f560a041de128  gcc/testsuite/g++.dg/warn/Waddress-3.C
  dc053c634cf498503fefe544d38cf6bd  gcc/testsuite/g++.dg/warn/Waddress-4.C
+ 3184b0e7ee124a608dd149e10fb0f927  gcc/testsuite/g++.dg/warn/Waddress-5.C
+ 94176442e0035daabf1057e70c9b69fb  gcc/testsuite/g++.dg/warn/Waddress-6.C
+ fcac9b73ac8cbfd48e4e11bb0babbb2f  gcc/testsuite/g++.dg/warn/Waddress-7.C
+ c18412e7f733b11c25c87e0fa6292752  gcc/testsuite/g++.dg/warn/Waddress-8.C
  f70b05c7c6da2eb1e388cdb09831d355  gcc/testsuite/g++.dg/warn/Waddress-of-packed-member1.C
  7e2363ecaf57d636dba9be32a29d05fa  gcc/testsuite/g++.dg/warn/Waddress-of-packed-member2.C
  38c1d3bcd70aac8e2e1f0e19b075e6a9  gcc/testsuite/g++.dg/warn/Wall-write-strings.C
  37d0be0d56d9e0aa2b1a4c10c166ffd2  gcc/testsuite/g++.dg/warn/Walways-true-1.C
! 2bb8416db71e09d2c32b48ff9fe3eb8c  gcc/testsuite/g++.dg/warn/Walways-true-2.C
  85946d6c4d80b74fc3bf7351777c73a0  gcc/testsuite/g++.dg/warn/Walways-true-3.C
! b40dbeaf2e568c93093f4ad87f6ac81c  gcc/testsuite/g++.dg/warn/Warray-bounds-10.C
! 97555d7f68183f45a66353b91d1af8ef  gcc/testsuite/g++.dg/warn/Warray-bounds-11.C
! 2123f61403306ff8d528996d09bd5843  gcc/testsuite/g++.dg/warn/Warray-bounds-12.C
! 28b860c60ef771ec7e50f1e3d59c34d7  gcc/testsuite/g++.dg/warn/Warray-bounds-13.C
  751a532e4227b40e2fb6a1e86824d452  gcc/testsuite/g++.dg/warn/Warray-bounds-14.C
  572a6d7fa549dc456ad9ccafcd0de9c3  gcc/testsuite/g++.dg/warn/Warray-bounds-15.C
  8f5c02cdd45c1c3c413d6acbed9a3818  gcc/testsuite/g++.dg/warn/Warray-bounds-16.C
! 2cd766446f96df7744ae53d65c7724fd  gcc/testsuite/g++.dg/warn/Warray-bounds-17.C
  35573117acc546f03b1b924b513e72cd  gcc/testsuite/g++.dg/warn/Warray-bounds-18.C
  0186412c3f9a47b93aafb28f79f2d7c7  gcc/testsuite/g++.dg/warn/Warray-bounds-19.C
  798433d4099cd8d7572fde802e640896  gcc/testsuite/g++.dg/warn/Warray-bounds-2.C
! d1fa658cfb569518415ea697c27200c3  gcc/testsuite/g++.dg/warn/Warray-bounds-20.C
  b524c7274934e8875fa2c0efd508fc92  gcc/testsuite/g++.dg/warn/Warray-bounds-21.C
  017ae9052a1c7ed7c39be76298ec9639  gcc/testsuite/g++.dg/warn/Warray-bounds-22.C
  d36f126068fa0852b0b29fa28089dbd3  gcc/testsuite/g++.dg/warn/Warray-bounds-23.C
  a0e826a4537965b07b3880791c956f9a  gcc/testsuite/g++.dg/warn/Warray-bounds-24.C
+ 774ed8eb93b664b475eb1981665963a0  gcc/testsuite/g++.dg/warn/Warray-bounds-25.C
+ 5d0c7eff938b7dc66c372a0ec11956e7  gcc/testsuite/g++.dg/warn/Warray-bounds-26.C
  de22eb15ae2420b77fbb90f3b584c785  gcc/testsuite/g++.dg/warn/Warray-bounds-3.C
  44982cde6de999156b24ac5b0d41b330  gcc/testsuite/g++.dg/warn/Warray-bounds-4.C
  843811e9e3bbecf56a84c608e9fd1073  gcc/testsuite/g++.dg/warn/Warray-bounds-5.C
*************** a1916c2510751afdcbb293e075fc4b79  gcc/te
*** 25446,25451 ****
--- 26325,26335 ----
  0f6b09801c09e79156b9009cc3a19adc  gcc/testsuite/g++.dg/warn/Wctad-maybe-unsupported4.C
  2d2da24222711602624d6870a966c8b0  gcc/testsuite/g++.dg/warn/Wctor-dtor.C
  b75d4f8883c7ddd7a04229eea603e6d3  gcc/testsuite/g++.dg/warn/Wctor-dtor2.C
+ 9db1cf26d0b90c23744fe71b3745d007  gcc/testsuite/g++.dg/warn/Wdangling-pointer-2.C
+ ac355f312027ebf3e91d21475ab4e796  gcc/testsuite/g++.dg/warn/Wdangling-pointer-3.C
+ 04389df734f9e345759f783a9ae88097  gcc/testsuite/g++.dg/warn/Wdangling-pointer-4.C
+ 7665878652e47fd15f97fc1fbda21d1e  gcc/testsuite/g++.dg/warn/Wdangling-pointer-5.C
+ 3c62bc574bc5f258ee0353c4ce2e9a85  gcc/testsuite/g++.dg/warn/Wdangling-pointer.C
  81f664dba5a025cdc726a4ce39403653  gcc/testsuite/g++.dg/warn/Wdelete-incomplete-1.C
  e5cc13e8f74ebb47c678a7c5745e57a8  gcc/testsuite/g++.dg/warn/Wdelete-incomplete-2.C
  1a61a88751379aff79eff4189d8d053d  gcc/testsuite/g++.dg/warn/Wdelete-incomplete-3.C
*************** c051125966f7b3d00fdd612ba7549043  gcc/te
*** 25488,25499 ****
  1aa6546fa5ce8c8ed4a822cce70a4601  gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-3.C
  55d500ce55b0e7b9f2e52d00593782d8  gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-4.C
  f25961c7b179af7200015aeb505d51e6  gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-5.C
! 3db84a32ea3da5328c8f152af3366d9f  gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-6.C
  22bd17b03f712caef0bc32ea1942421d  gcc/testsuite/g++.dg/warn/Wfree-nonheap-object.C
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/g++.dg/warn/Wfree-nonheap-object.s
  caf05a8324926e9472342da0584539ad  gcc/testsuite/g++.dg/warn/Wignored-attributes-1.C
  55295c0bc11e5dffe89757d080280054  gcc/testsuite/g++.dg/warn/Wignored-attributes-2.C
  a5142c9cd89ebb3502a6adbdb75fa29c  gcc/testsuite/g++.dg/warn/Wignored-qualifiers1.C
  f9b7e3158d7918eb87fb4faeb4bb757d  gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-1.C
  e8496d82a0f58fc4bc26efa7a0a75fd3  gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-2.C
  126f476a9780bcba16781feab90ed2d8  gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-3.C
--- 26372,26384 ----
  1aa6546fa5ce8c8ed4a822cce70a4601  gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-3.C
  55d500ce55b0e7b9f2e52d00593782d8  gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-4.C
  f25961c7b179af7200015aeb505d51e6  gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-5.C
! 7f075bbcdd22ad2928b9576d6849509e  gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-6.C
  22bd17b03f712caef0bc32ea1942421d  gcc/testsuite/g++.dg/warn/Wfree-nonheap-object.C
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/g++.dg/warn/Wfree-nonheap-object.s
  caf05a8324926e9472342da0584539ad  gcc/testsuite/g++.dg/warn/Wignored-attributes-1.C
  55295c0bc11e5dffe89757d080280054  gcc/testsuite/g++.dg/warn/Wignored-attributes-2.C
  a5142c9cd89ebb3502a6adbdb75fa29c  gcc/testsuite/g++.dg/warn/Wignored-qualifiers1.C
+ 90dde3d2eabc1a35285253724486da84  gcc/testsuite/g++.dg/warn/Wignored-qualifiers2.C
  f9b7e3158d7918eb87fb4faeb4bb757d  gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-1.C
  e8496d82a0f58fc4bc26efa7a0a75fd3  gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-2.C
  126f476a9780bcba16781feab90ed2d8  gcc/testsuite/g++.dg/warn/Wimplicit-fallthrough-3.C
*************** d7994bdf14d7e911b1d67ed7456f38a5  gcc/te
*** 25502,25511 ****
--- 26387,26400 ----
  1c4861af5bed5772efe00044b2fba444  gcc/testsuite/g++.dg/warn/Winaccessible-base-2.C
  c793e11db22751c42cd4efac4c6e4868  gcc/testsuite/g++.dg/warn/Winaccessible-virtual-base-1.C
  8c47c333e57d7a38cfb57df230de1587  gcc/testsuite/g++.dg/warn/Winaccessible-virtual-base-2.C
+ 6d4eabf8c48734aef917404fba069c7d  gcc/testsuite/g++.dg/warn/Winfinite-recursion-2.C
+ 3e991b331e0b779715505589aa391a40  gcc/testsuite/g++.dg/warn/Winfinite-recursion-3.C
+ 093f8d1925846a0ba582bf88a36d4b02  gcc/testsuite/g++.dg/warn/Winfinite-recursion.C
  34ef776f2e6de10953d2565fdd08a426  gcc/testsuite/g++.dg/warn/Winit-list1.C
  59963a59cab2e70536733c20bef445b9  gcc/testsuite/g++.dg/warn/Winit-list2.C
  be08197ff1e9fe131158c9e64ecfcf10  gcc/testsuite/g++.dg/warn/Winit-list3.C
  267d9b4cf246c71186f6e11d22876701  gcc/testsuite/g++.dg/warn/Winit-list4.C
+ 11292aff7133cb62072514b5b838c759  gcc/testsuite/g++.dg/warn/Winit-list5.C
  5aaa168dd17b2a6cccd0048ee7abaa2e  gcc/testsuite/g++.dg/warn/Winit-self-2.C
  279c1660a514d3b05c577d1c615c3a99  gcc/testsuite/g++.dg/warn/Winit-self-3.C
  6a51f790f1905c68f12c2109638c7edb  gcc/testsuite/g++.dg/warn/Winit-self.C
*************** be08197ff1e9fe131158c9e64ecfcf10  gcc/te
*** 25514,25530 ****
  e5e6d08567eb0a03fffadca1da754cde  gcc/testsuite/g++.dg/warn/Winline-3.C
  401a1cfacaa701f3e1459d7dcaf225d9  gcc/testsuite/g++.dg/warn/Winline-4.C
  b383f047a6af35035ecd836253175c30  gcc/testsuite/g++.dg/warn/Wint-in-bool-context-1.C
  90a871726cae9dea93ce0da4b5bb7b2c  gcc/testsuite/g++.dg/warn/Wlogical-op-1.C
  13ee95f1cd2836b595541e2a9917c06d  gcc/testsuite/g++.dg/warn/Wlogical-op-2.C
! a37debb0423a6fba06b31bb633c0794f  gcc/testsuite/g++.dg/warn/Wlogical-op-3.C
  0d474dffc39eac06f1ef0fff37a5792f  gcc/testsuite/g++.dg/warn/Wmemset-elt-size1.C
  640ad4c16d17c7bf605e6b30568da488  gcc/testsuite/g++.dg/warn/Wmemset-transposed-args-1.C
  1184b1df4ae243b5ab6917e0e3b219b6  gcc/testsuite/g++.dg/warn/Wmismatched-dealloc-2.C
  d183cd43f2c2caf1b71024ba3762ff44  gcc/testsuite/g++.dg/warn/Wmismatched-dealloc.C
  74decc16b8ca63b12db874b7dde868cf  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-2.C
  5c4cad449e21fe0fade92c9c0d19fb5f  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-3.C
  da3dbc8526151b41f4a741a5d5e51eae  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-4.C
! 1632b5578dfbecab9e72d333b0e82675  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-5.C
  3089b7e4a074a4993652acd742390397  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete.C
  9e3053e15f6b0726e17bd19ce7fc3bf8  gcc/testsuite/g++.dg/warn/Wmismatched-tags-2.C
  34c810b16cc722166ffa4de29c41c7e5  gcc/testsuite/g++.dg/warn/Wmismatched-tags-3.C
--- 26403,26428 ----
  e5e6d08567eb0a03fffadca1da754cde  gcc/testsuite/g++.dg/warn/Winline-3.C
  401a1cfacaa701f3e1459d7dcaf225d9  gcc/testsuite/g++.dg/warn/Winline-4.C
  b383f047a6af35035ecd836253175c30  gcc/testsuite/g++.dg/warn/Wint-in-bool-context-1.C
+ ae2abc2a5a067a849f424b7aee4a38f1  gcc/testsuite/g++.dg/warn/Wint-in-bool-context-2.C
+ c84bc79847f1966edf2b1f4b3b013e19  gcc/testsuite/g++.dg/warn/Winterference-2.C
+ 7a5fabbcc3f8e983ae01b4963469c94a  gcc/testsuite/g++.dg/warn/Winterference.C
+ f1360330e2c03adfb9e1efd9136d3f31  gcc/testsuite/g++.dg/warn/Winterference.H
+ 617b1baf48ffae995c6198567500b3c3  gcc/testsuite/g++.dg/warn/Winvalid-memory-model-2.C
+ 507bac8cb77177c06aaebaae13d81c2a  gcc/testsuite/g++.dg/warn/Winvalid-memory-model.C
  90a871726cae9dea93ce0da4b5bb7b2c  gcc/testsuite/g++.dg/warn/Wlogical-op-1.C
  13ee95f1cd2836b595541e2a9917c06d  gcc/testsuite/g++.dg/warn/Wlogical-op-2.C
! 73a4aa4570ee8ec2a83f04a672162a02  gcc/testsuite/g++.dg/warn/Wlogical-op-3.C
  0d474dffc39eac06f1ef0fff37a5792f  gcc/testsuite/g++.dg/warn/Wmemset-elt-size1.C
  640ad4c16d17c7bf605e6b30568da488  gcc/testsuite/g++.dg/warn/Wmemset-transposed-args-1.C
  1184b1df4ae243b5ab6917e0e3b219b6  gcc/testsuite/g++.dg/warn/Wmismatched-dealloc-2.C
+ beb0dbeb6a47cd7fb34d04b431670905  gcc/testsuite/g++.dg/warn/Wmismatched-dealloc-3.C
  d183cd43f2c2caf1b71024ba3762ff44  gcc/testsuite/g++.dg/warn/Wmismatched-dealloc.C
  74decc16b8ca63b12db874b7dde868cf  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-2.C
  5c4cad449e21fe0fade92c9c0d19fb5f  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-3.C
  da3dbc8526151b41f4a741a5d5e51eae  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-4.C
! f53b1f90733acd430c8cdf6142c6d0ae  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-5.C
! 8afe47a7579150c18e697be841db6df5  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-6.C
! c6df77cbbce60aad70c6bc987ecd4bd2  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-7.C
  3089b7e4a074a4993652acd742390397  gcc/testsuite/g++.dg/warn/Wmismatched-new-delete.C
  9e3053e15f6b0726e17bd19ce7fc3bf8  gcc/testsuite/g++.dg/warn/Wmismatched-tags-2.C
  34c810b16cc722166ffa4de29c41c7e5  gcc/testsuite/g++.dg/warn/Wmismatched-tags-3.C
*************** f54d3fb57e7ea75f1954d2671e769fd5  gcc/te
*** 25613,25618 ****
--- 26511,26518 ----
  fbe474c3ff1c910d01a5cb5e4447a752  gcc/testsuite/g++.dg/warn/Wparentheses-8.C
  6e767451a876da4d1880041cbfd264b0  gcc/testsuite/g++.dg/warn/Wparentheses-9.C
  d6d302322c17b62b7594047d0c81b5cd  gcc/testsuite/g++.dg/warn/Wplacement-new-size-1.C
+ 59084ba53d0a718a92a26128b81d7474  gcc/testsuite/g++.dg/warn/Wplacement-new-size-10.C
+ bdd877cb0a1d1ac83c428e67ad0a5b39  gcc/testsuite/g++.dg/warn/Wplacement-new-size-11.C
  cdbb40e0e6f99e726332c11579b1d822  gcc/testsuite/g++.dg/warn/Wplacement-new-size-2.C
  d384bb1bb46e31c69b6a5c612b417019  gcc/testsuite/g++.dg/warn/Wplacement-new-size-3.C
  175ea195dd8d43c87f6e9050006ff679  gcc/testsuite/g++.dg/warn/Wplacement-new-size-4.C
*************** c581ab7bc1c10728c1e68266d06af6e9  gcc/te
*** 25641,25656 ****
  6a9ad99dea244e7a1d6655a1e95ccfea  gcc/testsuite/g++.dg/warn/Wreturn-2.C
  d0e225992bc2f0e5e2e51d846e21a8b4  gcc/testsuite/g++.dg/warn/Wreturn-3.C
  2517f12853f6838edd913b1fa72b10a6  gcc/testsuite/g++.dg/warn/Wreturn-4.C
  47e19e0aa7cc935c5692f22838d704d8  gcc/testsuite/g++.dg/warn/Wreturn-local-addr-2.C
  9c909989b6fe62571bb57ca4b30ea4e2  gcc/testsuite/g++.dg/warn/Wreturn-local-addr-3.C
  514216b0701c15265ff14809c766c104  gcc/testsuite/g++.dg/warn/Wreturn-local-addr-4.C
  8020f9bd49dcb3bd70e40a1e2beda78c  gcc/testsuite/g++.dg/warn/Wreturn-local-addr-5.C
! d65c00ca7eab93097380a676907d2243  gcc/testsuite/g++.dg/warn/Wreturn-local-addr-6.C
  7e583350bd73c98912c56f5d3dd90aed  gcc/testsuite/g++.dg/warn/Wreturn-local-addr.C
  784c916e3f956afe80f26ff565b29be6  gcc/testsuite/g++.dg/warn/Wreturn-type-1.C
  152517b8ffa5661c5b6be0b9234c1501  gcc/testsuite/g++.dg/warn/Wreturn-type-10.C
  0e594e6f78e55b364baf8496c437b7bf  gcc/testsuite/g++.dg/warn/Wreturn-type-11.C
  20c4d793244cd5cb364b9631b78d67f6  gcc/testsuite/g++.dg/warn/Wreturn-type-12.C
  1d81b4c94aef9d2c63d5599d4508e03a  gcc/testsuite/g++.dg/warn/Wreturn-type-2.C
  51f71c28926644cc57251a17721dbc28  gcc/testsuite/g++.dg/warn/Wreturn-type-3.C
  79fe0e6ffebc4d7f5207bf12d0168f9b  gcc/testsuite/g++.dg/warn/Wreturn-type-4.C
--- 26541,26558 ----
  6a9ad99dea244e7a1d6655a1e95ccfea  gcc/testsuite/g++.dg/warn/Wreturn-2.C
  d0e225992bc2f0e5e2e51d846e21a8b4  gcc/testsuite/g++.dg/warn/Wreturn-3.C
  2517f12853f6838edd913b1fa72b10a6  gcc/testsuite/g++.dg/warn/Wreturn-4.C
+ 9e1882cc8fcb69eefac6004d8d0a4bb9  gcc/testsuite/g++.dg/warn/Wreturn-5.C
  47e19e0aa7cc935c5692f22838d704d8  gcc/testsuite/g++.dg/warn/Wreturn-local-addr-2.C
  9c909989b6fe62571bb57ca4b30ea4e2  gcc/testsuite/g++.dg/warn/Wreturn-local-addr-3.C
  514216b0701c15265ff14809c766c104  gcc/testsuite/g++.dg/warn/Wreturn-local-addr-4.C
  8020f9bd49dcb3bd70e40a1e2beda78c  gcc/testsuite/g++.dg/warn/Wreturn-local-addr-5.C
! 12f1cd49790214f42fa39885b008bf25  gcc/testsuite/g++.dg/warn/Wreturn-local-addr-6.C
  7e583350bd73c98912c56f5d3dd90aed  gcc/testsuite/g++.dg/warn/Wreturn-local-addr.C
  784c916e3f956afe80f26ff565b29be6  gcc/testsuite/g++.dg/warn/Wreturn-type-1.C
  152517b8ffa5661c5b6be0b9234c1501  gcc/testsuite/g++.dg/warn/Wreturn-type-10.C
  0e594e6f78e55b364baf8496c437b7bf  gcc/testsuite/g++.dg/warn/Wreturn-type-11.C
  20c4d793244cd5cb364b9631b78d67f6  gcc/testsuite/g++.dg/warn/Wreturn-type-12.C
+ 792a4d9dc806f441c5e3bdbf0fae1f7a  gcc/testsuite/g++.dg/warn/Wreturn-type-13.C
  1d81b4c94aef9d2c63d5599d4508e03a  gcc/testsuite/g++.dg/warn/Wreturn-type-2.C
  51f71c28926644cc57251a17721dbc28  gcc/testsuite/g++.dg/warn/Wreturn-type-3.C
  79fe0e6ffebc4d7f5207bf12d0168f9b  gcc/testsuite/g++.dg/warn/Wreturn-type-4.C
*************** c9a313a018bffcf8c74feab4d7de24ee  gcc/te
*** 25673,25678 ****
--- 26575,26581 ----
  7eb0487629ffafe8015a0f69383aaa9d  gcc/testsuite/g++.dg/warn/Wshadow-15.C
  ffad6b5038655c4c4e389de3106c88b0  gcc/testsuite/g++.dg/warn/Wshadow-16.C
  38815e928f4e863202914977f5520b74  gcc/testsuite/g++.dg/warn/Wshadow-17.C
+ e8c004a48240f458631dbb4f69010a3a  gcc/testsuite/g++.dg/warn/Wshadow-18.C
  6a6527871d476c4275232fa53d041994  gcc/testsuite/g++.dg/warn/Wshadow-2.C
  c6d10f027652eb4c20869c7eaeebb358  gcc/testsuite/g++.dg/warn/Wshadow-3.C
  2e33a5dd790901f2d6f4cc57f311efc6  gcc/testsuite/g++.dg/warn/Wshadow-4.C
*************** a0b497dc1f8dc8ce49f81bc391f0deb1  gcc/te
*** 25734,25744 ****
  839fdbb04e93708d893f0f0e3f961ef5  gcc/testsuite/g++.dg/warn/Wstring-literal-comparison-4.C
  6410b05c3b999712196121758246d3f4  gcc/testsuite/g++.dg/warn/Wstringop-overflow-1.C
  bab7e5656bf0736ab8cd5ae9256981d6  gcc/testsuite/g++.dg/warn/Wstringop-overflow-2.C
! fc43844819b668594cd996e06b4958c0  gcc/testsuite/g++.dg/warn/Wstringop-overflow-3.C
! c555293c1b84203987ee5112b6ef8bdf  gcc/testsuite/g++.dg/warn/Wstringop-overflow-4.C
  d1f308b2ce4d89fda2347e839404f085  gcc/testsuite/g++.dg/warn/Wstringop-overflow-5.C
  1bab351a542f6d244c9a83d65c6f27d4  gcc/testsuite/g++.dg/warn/Wstringop-overflow-6.C
  ea32c8c8b42add7fd76338f37d3b13e0  gcc/testsuite/g++.dg/warn/Wstringop-overflow-7.C
  d82f666f00c8743076b52f2debf12c0a  gcc/testsuite/g++.dg/warn/Wstringop-overread-1.C
  ac765247730b2bbd6e40254f091bba3e  gcc/testsuite/g++.dg/warn/Wstringop-truncation-1.C
  68de0b45c161b67b13b219e943fa0f70  gcc/testsuite/g++.dg/warn/Wstringop-truncation-2.C
--- 26637,26648 ----
  839fdbb04e93708d893f0f0e3f961ef5  gcc/testsuite/g++.dg/warn/Wstring-literal-comparison-4.C
  6410b05c3b999712196121758246d3f4  gcc/testsuite/g++.dg/warn/Wstringop-overflow-1.C
  bab7e5656bf0736ab8cd5ae9256981d6  gcc/testsuite/g++.dg/warn/Wstringop-overflow-2.C
! 38d9e0f462fe42c6229028728971ef78  gcc/testsuite/g++.dg/warn/Wstringop-overflow-3.C
! fdf3f6774c83c8402eaa4a82c19e0470  gcc/testsuite/g++.dg/warn/Wstringop-overflow-4.C
  d1f308b2ce4d89fda2347e839404f085  gcc/testsuite/g++.dg/warn/Wstringop-overflow-5.C
  1bab351a542f6d244c9a83d65c6f27d4  gcc/testsuite/g++.dg/warn/Wstringop-overflow-6.C
  ea32c8c8b42add7fd76338f37d3b13e0  gcc/testsuite/g++.dg/warn/Wstringop-overflow-7.C
+ 6375de29cae890fc7943bd82832a3c88  gcc/testsuite/g++.dg/warn/Wstringop-overflow-8.C
  d82f666f00c8743076b52f2debf12c0a  gcc/testsuite/g++.dg/warn/Wstringop-overread-1.C
  ac765247730b2bbd6e40254f091bba3e  gcc/testsuite/g++.dg/warn/Wstringop-truncation-1.C
  68de0b45c161b67b13b219e943fa0f70  gcc/testsuite/g++.dg/warn/Wstringop-truncation-2.C
*************** fe4c6303d7ec13423e71cfb150c05d00  gcc/te
*** 25776,25784 ****
  01a8663e3575b9fdd6f13fef9387d669  gcc/testsuite/g++.dg/warn/Wuninitialized-10.C
  5133d39459a0fa751e7c8606e7d29b94  gcc/testsuite/g++.dg/warn/Wuninitialized-11.C
  6cbb1f3c3335added60923dffee22b16  gcc/testsuite/g++.dg/warn/Wuninitialized-12.C
! a0dbc67641d49814408bb7698b2c5690  gcc/testsuite/g++.dg/warn/Wuninitialized-13.C
  21fc5ac0f1ee255b648d071723254d87  gcc/testsuite/g++.dg/warn/Wuninitialized-2.C
  ff7e55750a566580a7e5b746cf7dfa22  gcc/testsuite/g++.dg/warn/Wuninitialized-3.C
  be5b47714ba41b25933660896d6c7427  gcc/testsuite/g++.dg/warn/Wuninitialized-4.C
  1f013ef9d737e679cea70e842d47a7ce  gcc/testsuite/g++.dg/warn/Wuninitialized-5.C
  5d5a54e16a8f1ca7a7dc521b9a20af28  gcc/testsuite/g++.dg/warn/Wuninitialized-6.C
--- 26680,26707 ----
  01a8663e3575b9fdd6f13fef9387d669  gcc/testsuite/g++.dg/warn/Wuninitialized-10.C
  5133d39459a0fa751e7c8606e7d29b94  gcc/testsuite/g++.dg/warn/Wuninitialized-11.C
  6cbb1f3c3335added60923dffee22b16  gcc/testsuite/g++.dg/warn/Wuninitialized-12.C
! 95978d0f61d66a9c1693abb0b01ebd1b  gcc/testsuite/g++.dg/warn/Wuninitialized-13.C
! 87d9fc9607c558f95bb00777d8ae53d9  gcc/testsuite/g++.dg/warn/Wuninitialized-14.C
! 871c79dd8bb79c9bcb24e0add5b704e4  gcc/testsuite/g++.dg/warn/Wuninitialized-15.C
! c0b5caca7ef146b3aa1249ecd34b6ed9  gcc/testsuite/g++.dg/warn/Wuninitialized-16.C
! 1a5899c4a426c3b9c03a1e2ba48ee90e  gcc/testsuite/g++.dg/warn/Wuninitialized-17.C
! 2759eb4bb1dc623bdd303d03f8a84cb7  gcc/testsuite/g++.dg/warn/Wuninitialized-18.C
! 9c743fe24d652473ee45ea4570401f81  gcc/testsuite/g++.dg/warn/Wuninitialized-19.C
  21fc5ac0f1ee255b648d071723254d87  gcc/testsuite/g++.dg/warn/Wuninitialized-2.C
+ 69e8e35504887a7ce6ccfea5ba42290d  gcc/testsuite/g++.dg/warn/Wuninitialized-20.C
+ b251ad17de0e040bd200dde965e5b646  gcc/testsuite/g++.dg/warn/Wuninitialized-21.C
+ 42332463e3e8610c816d9e672e69beb2  gcc/testsuite/g++.dg/warn/Wuninitialized-22.C
+ 3a7158e8a24764c6c6d109ec831de6f6  gcc/testsuite/g++.dg/warn/Wuninitialized-23.C
+ 31a7e7054e9f6b6c2c627267c078aabe  gcc/testsuite/g++.dg/warn/Wuninitialized-24.C
+ 80bb675bf44f4c749e3e401d82f3b173  gcc/testsuite/g++.dg/warn/Wuninitialized-25.C
+ 5df1e2584dd1dcf9f5e2cf9b6943667e  gcc/testsuite/g++.dg/warn/Wuninitialized-26.C
+ 9fe039edc825db77dff5b9c5462ea70e  gcc/testsuite/g++.dg/warn/Wuninitialized-27.C
+ d2e81e22b099ac68b8b03bef15414923  gcc/testsuite/g++.dg/warn/Wuninitialized-28.C
+ e40994876de61a313aa825b0b94b1ebd  gcc/testsuite/g++.dg/warn/Wuninitialized-29.C
  ff7e55750a566580a7e5b746cf7dfa22  gcc/testsuite/g++.dg/warn/Wuninitialized-3.C
+ 39f7eedf0fd2f2f37ba740674e0e8b37  gcc/testsuite/g++.dg/warn/Wuninitialized-30.C
+ d6ab64b605a24d07d95eb4282b431dac  gcc/testsuite/g++.dg/warn/Wuninitialized-31.C
+ 396db29dd4ffacf13fccefd03552734c  gcc/testsuite/g++.dg/warn/Wuninitialized-32.C
  be5b47714ba41b25933660896d6c7427  gcc/testsuite/g++.dg/warn/Wuninitialized-4.C
  1f013ef9d737e679cea70e842d47a7ce  gcc/testsuite/g++.dg/warn/Wuninitialized-5.C
  5d5a54e16a8f1ca7a7dc521b9a20af28  gcc/testsuite/g++.dg/warn/Wuninitialized-6.C
*************** a1e8f0d7b53ea96c7283034075724914  gcc/te
*** 25794,25799 ****
--- 26717,26724 ----
  04ac62179b35dfe46c9f95baa7db1afb  gcc/testsuite/g++.dg/warn/Wunused-15.C
  aa054897a9a999252af634fb37c47a72  gcc/testsuite/g++.dg/warn/Wunused-16.C
  40d9f628c1c36f04e81c2707bb2dd44f  gcc/testsuite/g++.dg/warn/Wunused-17.C
+ 33878a9da8e50ae35fbb0fff902b70f9  gcc/testsuite/g++.dg/warn/Wunused-18.C
+ 488569a164e9095f261a293811daf94b  gcc/testsuite/g++.dg/warn/Wunused-19.C
  b2e5b74ee5fb6060bcc71f2dc3c382d1  gcc/testsuite/g++.dg/warn/Wunused-2.C
  100b96f03eb66e7fa747a34b5fb876bb  gcc/testsuite/g++.dg/warn/Wunused-3.C
  2a408c99296d8b89eff20f87c2ea2d51  gcc/testsuite/g++.dg/warn/Wunused-4.C
*************** b81dd316dd30881afe998cc16667340f  gcc/te
*** 25863,25868 ****
--- 26788,26797 ----
  12fcfa7c307d6c91a9038bade9f8e105  gcc/testsuite/g++.dg/warn/Wunused-var-8.C
  66e0712402c08575f2486cc95d89f9b2  gcc/testsuite/g++.dg/warn/Wunused-var-9.C
  f62d0efa105434ddb77f8584066aa865  gcc/testsuite/g++.dg/warn/Wunused-var30.C
+ 05ca808832d9fd67738b75a8019ab2d3  gcc/testsuite/g++.dg/warn/Wuse-after-free.C
+ e458d0fab0b37edff03370ba4ad52623  gcc/testsuite/g++.dg/warn/Wuse-after-free2.C
+ 7661f517c59be2c2775ba11daa38e4e6  gcc/testsuite/g++.dg/warn/Wuse-after-free3.C
+ 3cfad577c57b131562e2e5cae28cc116  gcc/testsuite/g++.dg/warn/Wuse-after-free4.C
  7c73aa4b260c1d16ea9a76d2e0a28fcb  gcc/testsuite/g++.dg/warn/Wuseless-cast.C
  ff8ed0a4ce8ad573aa89f6b015e4a122  gcc/testsuite/g++.dg/warn/Wuseless-cast2.C
  9de23321d5ac135de5ba8afa251a359a  gcc/testsuite/g++.dg/warn/Wvexing-parse.C
*************** ef6b448559dfb55f716baaf60ef6e508  gcc/te
*** 25930,25935 ****
--- 26859,26869 ----
  1ad1df12de321b9457640c9c53f46b52  gcc/testsuite/g++.dg/warn/deprecated-11.C
  5a5b9cd25ea60d04b4baa2fcbeef0fec  gcc/testsuite/g++.dg/warn/deprecated-12.C
  f9f47c74a750ce8f2c75e0d27d3ad1f7  gcc/testsuite/g++.dg/warn/deprecated-13.C
+ a3552f053f461c724ff11e7afbcb8bdc  gcc/testsuite/g++.dg/warn/deprecated-14.C
+ c935eb4f9165b002b3615d052e7ee8db  gcc/testsuite/g++.dg/warn/deprecated-15.C
+ d5e518a89029e53244731ceed8c64fc4  gcc/testsuite/g++.dg/warn/deprecated-16.C
+ 0fb7e93661517b2d46da504d60c18ce0  gcc/testsuite/g++.dg/warn/deprecated-17.C
+ 5ba17fcb74188f6bd8e6e540093b8cd8  gcc/testsuite/g++.dg/warn/deprecated-18.C
  26bafcbe2a9f3729e0b0e2ff8ccf5317  gcc/testsuite/g++.dg/warn/deprecated-2.C
  482df2a6c06bdf9046c6729484298715  gcc/testsuite/g++.dg/warn/deprecated-3.C
  98c2c2dc0644115f45902f826dc56a04  gcc/testsuite/g++.dg/warn/deprecated-4.C
*************** ee6a633cbcb41c7241335ac4002bc5bd  gcc/te
*** 26022,26028 ****
--- 26956,26965 ----
  eee589a3fa31332d5466e5037b1a870e  gcc/testsuite/g++.dg/warn/pmf1.C
  c36be50bce1bb66a16eefbbb8eed1e5c  gcc/testsuite/g++.dg/warn/pmf2.C
  ac14aaa010428fa00cd60d6e6bb808c0  gcc/testsuite/g++.dg/warn/pointer-integer-comparison.C
+ 67a27919869c40526380d6d5fa65b772  gcc/testsuite/g++.dg/warn/pr101219.C
  cc35779b6305bb8c111aecea1f3f7d25  gcc/testsuite/g++.dg/warn/pr101515.C
+ 96b3e712fbdbacb6647076bf03b56975  gcc/testsuite/g++.dg/warn/pr104025.C
+ edc1a994e1246279f2c5c7c45650e061  gcc/testsuite/g++.dg/warn/pr104492.C
  adea0a023eba0c3c51b6a4894014d35a  gcc/testsuite/g++.dg/warn/pr11159.C
  f257fca4d00c8c67aa2b9d6e43ee906f  gcc/testsuite/g++.dg/warn/pr11492.C
  5fab7f879534ef351718dc73d825b667  gcc/testsuite/g++.dg/warn/pr12242.C
*************** ad68bbb45548b2f681a5f0e57f41ef19  gcc/te
*** 26066,26072 ****
  509e9b77a9ef20ea518a0a1e9728cc30  gcc/testsuite/g++.dg/warn/pr82424.C
  6d310dab9abdfd7931331e525069468c  gcc/testsuite/g++.dg/warn/pr82710.C
  1f3994c2dd20f477a579542a531ccd8a  gcc/testsuite/g++.dg/warn/pr83045.C
! 9444c7a3cc93b0e704601f41453a1776  gcc/testsuite/g++.dg/warn/pr83054.C
  d8e09f06f5ec03c8ee79f8a008ae77df  gcc/testsuite/g++.dg/warn/pr83974.C
  591b28c4968c297ab14c8ab1384a1394  gcc/testsuite/g++.dg/warn/pr8570.C
  90e0fdda9d2de3f7bdb6aca19993e448  gcc/testsuite/g++.dg/warn/pr86453.C
--- 27003,27009 ----
  509e9b77a9ef20ea518a0a1e9728cc30  gcc/testsuite/g++.dg/warn/pr82424.C
  6d310dab9abdfd7931331e525069468c  gcc/testsuite/g++.dg/warn/pr82710.C
  1f3994c2dd20f477a579542a531ccd8a  gcc/testsuite/g++.dg/warn/pr83045.C
! 1a0f2d242a6c90da2b74827fd103f9dd  gcc/testsuite/g++.dg/warn/pr83054.C
  d8e09f06f5ec03c8ee79f8a008ae77df  gcc/testsuite/g++.dg/warn/pr83974.C
  591b28c4968c297ab14c8ab1384a1394  gcc/testsuite/g++.dg/warn/pr8570.C
  90e0fdda9d2de3f7bdb6aca19993e448  gcc/testsuite/g++.dg/warn/pr86453.C
*************** b95277fda9b1b8a4b6b4202b57e14529  gcc/te
*** 26090,26096 ****
  ead08695035c4edabe2cbf3251983089  gcc/testsuite/g++.dg/warn/pragma-system_header5.C
  f589a557984dd9757ade5f6409471bb5  gcc/testsuite/g++.dg/warn/pragma-system_header5.h
  8c096cfbcb0f16fa5bde02650ac4ab41  gcc/testsuite/g++.dg/warn/private1.C
! dcf594b88cf5da1b2174fbc2c262fb71  gcc/testsuite/g++.dg/warn/ref-temp1.C
  4298cb37de7f2562b424c1ca4cf7c9a8  gcc/testsuite/g++.dg/warn/register-parm-1.C
  91dd53b7d7d2954e6728c3851a3a75e9  gcc/testsuite/g++.dg/warn/register-var-1.C
  569ffeb5e3022fdfe1f42c216faf9974  gcc/testsuite/g++.dg/warn/register-var-2.C
--- 27027,27033 ----
  ead08695035c4edabe2cbf3251983089  gcc/testsuite/g++.dg/warn/pragma-system_header5.C
  f589a557984dd9757ade5f6409471bb5  gcc/testsuite/g++.dg/warn/pragma-system_header5.h
  8c096cfbcb0f16fa5bde02650ac4ab41  gcc/testsuite/g++.dg/warn/private1.C
! 5a8eed272c67bdc2b8cf77d9197fbf09  gcc/testsuite/g++.dg/warn/ref-temp1.C
  4298cb37de7f2562b424c1ca4cf7c9a8  gcc/testsuite/g++.dg/warn/register-parm-1.C
  91dd53b7d7d2954e6728c3851a3a75e9  gcc/testsuite/g++.dg/warn/register-var-1.C
  569ffeb5e3022fdfe1f42c216faf9974  gcc/testsuite/g++.dg/warn/register-var-2.C
*************** cbeb61a079567f59bdce9faa40877398  gcc/te
*** 26113,26119 ****
--- 27050,27059 ----
  338b16478b2b401f31f40a2d7b08dfb1  gcc/testsuite/g++.dg/warn/uninit-1.C
  69c608be9c8c02e5a60a4342603a5fac  gcc/testsuite/g++.dg/warn/uninit-pr48483.C
  75fa85b1e27813223938d58d1e38e67f  gcc/testsuite/g++.dg/warn/uninit-pr55288.C
+ f3fc1f6861ab16ba7eaf8a5da2bda79e  gcc/testsuite/g++.dg/warn/uninit-pr55881.C
+ cb2dc9676afd95b7735a016564c8fd0c  gcc/testsuite/g++.dg/warn/uninit-pr74765.C
  4cdbc10f60c2aab00b399523a5cb099d  gcc/testsuite/g++.dg/warn/uninit-pr82800.C
+ 28f5cbc738c708f5e12210ff79249ce5  gcc/testsuite/g++.dg/warn/uninit-pr93100.C
  f61b425b296038544edfc817dc29fd84  gcc/testsuite/g++.dg/warn/unit-1.C
  b90595080713a3c154e188ca44093e52  gcc/testsuite/g++.dg/warn/unused-fn1.C
  d10b13b30c4f610f231317924054b5ee  gcc/testsuite/g++.dg/warn/unused-result1-Werror.c
*************** e70f6c72d0bdb4e3f855ac85cd751b3f  gcc/te
*** 26155,26161 ****
  9395d9e9e9319220bb7b637faff8c284  gcc/testsuite/g++.old-deja/g++.abi/primary4.C
  6f380830639cca69801edec0c70561f2  gcc/testsuite/g++.old-deja/g++.abi/primary5.C
  57336bb0967886c438b9ee6c25ae18ef  gcc/testsuite/g++.old-deja/g++.abi/ptrflags.C
! 2272bf3104dfa369c255cf1480de8359  gcc/testsuite/g++.old-deja/g++.abi/ptrmem.C
  84fee86dc35b4828d76a638ec9084b6d  gcc/testsuite/g++.old-deja/g++.abi/vbase1.C
  7514a6865a786af97664162d7f6693e9  gcc/testsuite/g++.old-deja/g++.abi/vbase2.C
  7e744eb415f839dd8cad69bc77d3950a  gcc/testsuite/g++.old-deja/g++.abi/vbase3.C
--- 27095,27101 ----
  9395d9e9e9319220bb7b637faff8c284  gcc/testsuite/g++.old-deja/g++.abi/primary4.C
  6f380830639cca69801edec0c70561f2  gcc/testsuite/g++.old-deja/g++.abi/primary5.C
  57336bb0967886c438b9ee6c25ae18ef  gcc/testsuite/g++.old-deja/g++.abi/ptrflags.C
! 5c787d20e890b4ab101b277ed589891c  gcc/testsuite/g++.old-deja/g++.abi/ptrmem.C
  84fee86dc35b4828d76a638ec9084b6d  gcc/testsuite/g++.old-deja/g++.abi/vbase1.C
  7514a6865a786af97664162d7f6693e9  gcc/testsuite/g++.old-deja/g++.abi/vbase2.C
  7e744eb415f839dd8cad69bc77d3950a  gcc/testsuite/g++.old-deja/g++.abi/vbase3.C
*************** da80b7e97d4e9ee67decc3ead64065ff  gcc/te
*** 26240,26246 ****
  320f3eae6dc6bbd5aa64e7a285f758f7  gcc/testsuite/g++.old-deja/g++.bob/template2.C
  d3aa332b02a50a2c976fd3acd8f16058  gcc/testsuite/g++.old-deja/g++.bob/template3.C
  aeb5818b98767c6df0e85e3dd85f0da7  gcc/testsuite/g++.old-deja/g++.bob/template4.C
! 2c1f7de9f8379d66def3b3aa34a24965  gcc/testsuite/g++.old-deja/g++.brendan/README
  ae92d366fb4b1fb345a39cf07442d5f1  gcc/testsuite/g++.old-deja/g++.brendan/abstract1.C
  fc6063368e5474a8653856d27762de94  gcc/testsuite/g++.old-deja/g++.brendan/access1.C
  cd7e52b4b869a50f1833437935e02700  gcc/testsuite/g++.old-deja/g++.brendan/alignof.C
--- 27180,27186 ----
  320f3eae6dc6bbd5aa64e7a285f758f7  gcc/testsuite/g++.old-deja/g++.bob/template2.C
  d3aa332b02a50a2c976fd3acd8f16058  gcc/testsuite/g++.old-deja/g++.bob/template3.C
  aeb5818b98767c6df0e85e3dd85f0da7  gcc/testsuite/g++.old-deja/g++.bob/template4.C
! ba6215629bc2b40ac5a0c47d535422d1  gcc/testsuite/g++.old-deja/g++.brendan/README
  ae92d366fb4b1fb345a39cf07442d5f1  gcc/testsuite/g++.old-deja/g++.brendan/abstract1.C
  fc6063368e5474a8653856d27762de94  gcc/testsuite/g++.old-deja/g++.brendan/access1.C
  cd7e52b4b869a50f1833437935e02700  gcc/testsuite/g++.old-deja/g++.brendan/alignof.C
*************** f719d5e34281fd7f7695b6c2eb8f292e  gcc/te
*** 26696,26705 ****
  34717a940f38a3059d5e85f5417dfc31  gcc/testsuite/g++.old-deja/g++.eh/rethrow4.C
  b08fe5424b926c4b2ba51c914a22ebd3  gcc/testsuite/g++.old-deja/g++.eh/rethrow5.C
  7d8ba296412c83f633f9284c22944391  gcc/testsuite/g++.old-deja/g++.eh/rethrow6.C
! e745d6dfc7259a45bdc13f8bb0ee92fb  gcc/testsuite/g++.old-deja/g++.eh/spec1.C
! 6544789146f46721dbf3eb873d8c4402  gcc/testsuite/g++.old-deja/g++.eh/spec2.C
! 01f036efd83762faa930b6ddab3d411e  gcc/testsuite/g++.old-deja/g++.eh/spec3.C
! 5fa9d40ab586ae03b198256bba8e2af4  gcc/testsuite/g++.old-deja/g++.eh/spec4.C
  6661bd6d7f84a5facb2e16615b994483  gcc/testsuite/g++.old-deja/g++.eh/spec5.C
  0ea51fde02cad26f6d93f1007c516515  gcc/testsuite/g++.old-deja/g++.eh/spec6.C
  e1be1d604a2e019c1bf80d17a2993239  gcc/testsuite/g++.old-deja/g++.eh/spec7.C
--- 27636,27645 ----
  34717a940f38a3059d5e85f5417dfc31  gcc/testsuite/g++.old-deja/g++.eh/rethrow4.C
  b08fe5424b926c4b2ba51c914a22ebd3  gcc/testsuite/g++.old-deja/g++.eh/rethrow5.C
  7d8ba296412c83f633f9284c22944391  gcc/testsuite/g++.old-deja/g++.eh/rethrow6.C
! 10b219c388957278be819537b45a4cef  gcc/testsuite/g++.old-deja/g++.eh/spec1.C
! 571abdfe965dcd6c4d50cb6ee2755751  gcc/testsuite/g++.old-deja/g++.eh/spec2.C
! 5aa90e1aae9931cc713924d1f505422f  gcc/testsuite/g++.old-deja/g++.eh/spec3.C
! d47179fa50db48d46a8e727db89588d1  gcc/testsuite/g++.old-deja/g++.eh/spec4.C
  6661bd6d7f84a5facb2e16615b994483  gcc/testsuite/g++.old-deja/g++.eh/spec5.C
  0ea51fde02cad26f6d93f1007c516515  gcc/testsuite/g++.old-deja/g++.eh/spec6.C
  e1be1d604a2e019c1bf80d17a2993239  gcc/testsuite/g++.old-deja/g++.eh/spec7.C
*************** fb72e0d2fea16c73ec4fddda21e15df1  gcc/te
*** 27404,27410 ****
  7852b50ea06c609148bfee1ccab7b3e6  gcc/testsuite/g++.old-deja/g++.law/union1.C
  85ad05509e4f3dea2c39732d411b58d3  gcc/testsuite/g++.old-deja/g++.law/union2.C
  4a037a2b9ff9c90b575c035057cf4efa  gcc/testsuite/g++.old-deja/g++.law/union3.C
! dd1d8f05753d74e619d900850647204d  gcc/testsuite/g++.old-deja/g++.law/union4.C
  7e48a824266024bbb564141961124a61  gcc/testsuite/g++.old-deja/g++.law/unsorted1.C
  380881aebe61094f4df13be7d32eb06f  gcc/testsuite/g++.old-deja/g++.law/unsorted2.C
  b670a00f5a22d3c4393b7380abc9bb6f  gcc/testsuite/g++.old-deja/g++.law/vbase1.C
--- 28344,28350 ----
  7852b50ea06c609148bfee1ccab7b3e6  gcc/testsuite/g++.old-deja/g++.law/union1.C
  85ad05509e4f3dea2c39732d411b58d3  gcc/testsuite/g++.old-deja/g++.law/union2.C
  4a037a2b9ff9c90b575c035057cf4efa  gcc/testsuite/g++.old-deja/g++.law/union3.C
! 8fb9d7411a8b891ecdcfaa7c306a0390  gcc/testsuite/g++.old-deja/g++.law/union4.C
  7e48a824266024bbb564141961124a61  gcc/testsuite/g++.old-deja/g++.law/unsorted1.C
  380881aebe61094f4df13be7d32eb06f  gcc/testsuite/g++.old-deja/g++.law/unsorted2.C
  b670a00f5a22d3c4393b7380abc9bb6f  gcc/testsuite/g++.old-deja/g++.law/vbase1.C
*************** bbcf18896f3a1d744cf356a0a66cd95a  gcc/te
*** 27450,27456 ****
  35f6ed93fa63b9db22cde011b976421d  gcc/testsuite/g++.old-deja/g++.martin/crash1.C
  1fcbe469d9287f683e48ab8325c6dc60  gcc/testsuite/g++.old-deja/g++.martin/eval1.C
  f7c3c07528a0fc1e61c6d947e61d78ac  gcc/testsuite/g++.old-deja/g++.martin/lookup1.C
! ba8a347349b1bb0043c7d42249c8fd24  gcc/testsuite/g++.old-deja/g++.martin/new1.C
  cbc1074c24be7acf9a3d5e06f47f9987  gcc/testsuite/g++.old-deja/g++.martin/overload1.C
  48a5f2cf28d6fed53bd37f93a37d127f  gcc/testsuite/g++.old-deja/g++.martin/pmf1.C
  45900dcbe065b97983fa9607056287f8  gcc/testsuite/g++.old-deja/g++.martin/pmf2.C
--- 28390,28396 ----
  35f6ed93fa63b9db22cde011b976421d  gcc/testsuite/g++.old-deja/g++.martin/crash1.C
  1fcbe469d9287f683e48ab8325c6dc60  gcc/testsuite/g++.old-deja/g++.martin/eval1.C
  f7c3c07528a0fc1e61c6d947e61d78ac  gcc/testsuite/g++.old-deja/g++.martin/lookup1.C
! 856d44bd56cbf26344be69730323a1f3  gcc/testsuite/g++.old-deja/g++.martin/new1.C
  cbc1074c24be7acf9a3d5e06f47f9987  gcc/testsuite/g++.old-deja/g++.martin/overload1.C
  48a5f2cf28d6fed53bd37f93a37d127f  gcc/testsuite/g++.old-deja/g++.martin/pmf1.C
  45900dcbe065b97983fa9607056287f8  gcc/testsuite/g++.old-deja/g++.martin/pmf2.C
*************** b7fa20379a5b48ef16b0a75fd8198fb6  gcc/te
*** 27505,27512 ****
  1dc3deea4e99a8ba7ca8ec0b2d018452  gcc/testsuite/g++.old-deja/g++.mike/eh30.C
  68bc71cf1693b679ec89fdfbdca319d7  gcc/testsuite/g++.old-deja/g++.mike/eh31.C
  17875da95a253b79fa1e5e982394cdf2  gcc/testsuite/g++.old-deja/g++.mike/eh32.C
! 50b3b270e19abec2dc24984bbdf59bcf  gcc/testsuite/g++.old-deja/g++.mike/eh33.C
! 75bd2f3b10287d948d7d6fe7f59b8da5  gcc/testsuite/g++.old-deja/g++.mike/eh34.C
  21a472444f8aa3f3d0af43174d790306  gcc/testsuite/g++.old-deja/g++.mike/eh35.C
  7390e69ab818f917b6a1ac1124acf37b  gcc/testsuite/g++.old-deja/g++.mike/eh36.C
  2617698177a755ce33d79b47ec3921d7  gcc/testsuite/g++.old-deja/g++.mike/eh37.C
--- 28445,28452 ----
  1dc3deea4e99a8ba7ca8ec0b2d018452  gcc/testsuite/g++.old-deja/g++.mike/eh30.C
  68bc71cf1693b679ec89fdfbdca319d7  gcc/testsuite/g++.old-deja/g++.mike/eh31.C
  17875da95a253b79fa1e5e982394cdf2  gcc/testsuite/g++.old-deja/g++.mike/eh32.C
! c57b3f69b4396a7bd59c0659cac52b65  gcc/testsuite/g++.old-deja/g++.mike/eh33.C
! 370167d46c116b4c7d320e4b9371a015  gcc/testsuite/g++.old-deja/g++.mike/eh34.C
  21a472444f8aa3f3d0af43174d790306  gcc/testsuite/g++.old-deja/g++.mike/eh35.C
  7390e69ab818f917b6a1ac1124acf37b  gcc/testsuite/g++.old-deja/g++.mike/eh36.C
  2617698177a755ce33d79b47ec3921d7  gcc/testsuite/g++.old-deja/g++.mike/eh37.C
*************** be155d22320e9da21c546ff91ca2290c  gcc/te
*** 27523,27530 ****
  5083cf45dcc8da838129224b25d5bb9a  gcc/testsuite/g++.old-deja/g++.mike/eh48.C
  56edd02b7784e92a67033d6faa6ca9c3  gcc/testsuite/g++.old-deja/g++.mike/eh49.C
  e8830fa94b8e95afd3d97b061a114384  gcc/testsuite/g++.old-deja/g++.mike/eh5.C
! ec3c10381e9796ec344ce7922ff20ba7  gcc/testsuite/g++.old-deja/g++.mike/eh50.C
! ab3b14296b0131025ad22d3dcff031e0  gcc/testsuite/g++.old-deja/g++.mike/eh51.C
  b510dab899ef0bf0c572e31b58dadecb  gcc/testsuite/g++.old-deja/g++.mike/eh52.C
  3f10506613385d154f4f3c9ff3452bb5  gcc/testsuite/g++.old-deja/g++.mike/eh53.C
  262974dca680b7a7debb6d5ed0a3fce1  gcc/testsuite/g++.old-deja/g++.mike/eh54.C
--- 28463,28470 ----
  5083cf45dcc8da838129224b25d5bb9a  gcc/testsuite/g++.old-deja/g++.mike/eh48.C
  56edd02b7784e92a67033d6faa6ca9c3  gcc/testsuite/g++.old-deja/g++.mike/eh49.C
  e8830fa94b8e95afd3d97b061a114384  gcc/testsuite/g++.old-deja/g++.mike/eh5.C
! 3ed3fb5986e202a9c87e9594894f75a6  gcc/testsuite/g++.old-deja/g++.mike/eh50.C
! 1f6dbbcf129396d5f08404f2340e4d53  gcc/testsuite/g++.old-deja/g++.mike/eh51.C
  b510dab899ef0bf0c572e31b58dadecb  gcc/testsuite/g++.old-deja/g++.mike/eh52.C
  3f10506613385d154f4f3c9ff3452bb5  gcc/testsuite/g++.old-deja/g++.mike/eh53.C
  262974dca680b7a7debb6d5ed0a3fce1  gcc/testsuite/g++.old-deja/g++.mike/eh54.C
*************** b453de23a9a42236701db32f7c39cd5c  gcc/te
*** 28150,28156 ****
  49bad56c5760d85acb515a9a73eb18b2  gcc/testsuite/g++.old-deja/g++.other/delete3.C
  48cb9639142065438719c2e0123ef935  gcc/testsuite/g++.old-deja/g++.other/delete4.C
  f2e3e23b1fda185e1f462c9e3bf913e6  gcc/testsuite/g++.old-deja/g++.other/delete5.C
! 002b9210ec0b57b8244b0909a259b25f  gcc/testsuite/g++.old-deja/g++.other/delete6.C
  db00ad7b8cb4aebea3e6520ea992edfe  gcc/testsuite/g++.old-deja/g++.other/delete7.C
  84bdff781f1a6fd221ea3dfef103b8d4  gcc/testsuite/g++.old-deja/g++.other/delete8.C
  253dbe9e0bf5dc174a8b76ce5a433857  gcc/testsuite/g++.old-deja/g++.other/deref1.C
--- 29090,29096 ----
  49bad56c5760d85acb515a9a73eb18b2  gcc/testsuite/g++.old-deja/g++.other/delete3.C
  48cb9639142065438719c2e0123ef935  gcc/testsuite/g++.old-deja/g++.other/delete4.C
  f2e3e23b1fda185e1f462c9e3bf913e6  gcc/testsuite/g++.old-deja/g++.other/delete5.C
! 42474a42e66c8ef05d564e7ef0187b76  gcc/testsuite/g++.old-deja/g++.other/delete6.C
  db00ad7b8cb4aebea3e6520ea992edfe  gcc/testsuite/g++.old-deja/g++.other/delete7.C
  84bdff781f1a6fd221ea3dfef103b8d4  gcc/testsuite/g++.old-deja/g++.other/delete8.C
  253dbe9e0bf5dc174a8b76ce5a433857  gcc/testsuite/g++.old-deja/g++.other/deref1.C
*************** f1224fb4be126166d0a579ea0dc6acc8  gcc/te
*** 28262,28268 ****
  28e4cd2fa1658df97a354ad0f586f2a8  gcc/testsuite/g++.old-deja/g++.other/inline4.C
  ccfaa381b4b7ddc2ae21136f982f0584  gcc/testsuite/g++.old-deja/g++.other/inline5.C
  4b2c8697535041bce609a3148c50d503  gcc/testsuite/g++.old-deja/g++.other/inline6.C
! 4eaa61a7f4169081f2327958cf38f524  gcc/testsuite/g++.old-deja/g++.other/inline7.C
  c6b3fa00cf108cf19a444d52bb108901  gcc/testsuite/g++.old-deja/g++.other/inline8.C
  4ff7844073d913c0d5099f3c5a9d1905  gcc/testsuite/g++.old-deja/g++.other/inline9.C
  024add5304c41b827990193948da5b1f  gcc/testsuite/g++.old-deja/g++.other/instan1.C
--- 29202,29208 ----
  28e4cd2fa1658df97a354ad0f586f2a8  gcc/testsuite/g++.old-deja/g++.other/inline4.C
  ccfaa381b4b7ddc2ae21136f982f0584  gcc/testsuite/g++.old-deja/g++.other/inline5.C
  4b2c8697535041bce609a3148c50d503  gcc/testsuite/g++.old-deja/g++.other/inline6.C
! 468b20436781dab1f31e82d9b9c7f756  gcc/testsuite/g++.old-deja/g++.other/inline7.C
  c6b3fa00cf108cf19a444d52bb108901  gcc/testsuite/g++.old-deja/g++.other/inline8.C
  4ff7844073d913c0d5099f3c5a9d1905  gcc/testsuite/g++.old-deja/g++.other/inline9.C
  024add5304c41b827990193948da5b1f  gcc/testsuite/g++.old-deja/g++.other/instan1.C
*************** f2f30ce82159469ba3ab6c0547473a91  gcc/te
*** 28956,28962 ****
  0859fb1604dffcb7150609995f0c7167  gcc/testsuite/g++.old-deja/g++.pt/nontype2.C
  c31cb85da575ef89bae17d43d16c2431  gcc/testsuite/g++.old-deja/g++.pt/nontype3.C
  b8f73a75eea223306130ca7acbb0d8c0  gcc/testsuite/g++.old-deja/g++.pt/nontype4.C
! b9bb8ed83d5de4ef7c492ee49635ea20  gcc/testsuite/g++.old-deja/g++.pt/nontype5.C
  fb0d9b0c70fadf9233f9da77e12933ab  gcc/testsuite/g++.old-deja/g++.pt/nttp1.C
  94f0fcc44ea927fff0f0b4a7ea3ee67c  gcc/testsuite/g++.old-deja/g++.pt/nttp2.C
  f1256260eab2b60b9e6f1cb00dd7cc6c  gcc/testsuite/g++.old-deja/g++.pt/operator1.C
--- 29896,29902 ----
  0859fb1604dffcb7150609995f0c7167  gcc/testsuite/g++.old-deja/g++.pt/nontype2.C
  c31cb85da575ef89bae17d43d16c2431  gcc/testsuite/g++.old-deja/g++.pt/nontype3.C
  b8f73a75eea223306130ca7acbb0d8c0  gcc/testsuite/g++.old-deja/g++.pt/nontype4.C
! a9ee4bfcc111cd4e0c5be901536f2a06  gcc/testsuite/g++.old-deja/g++.pt/nontype5.C
  fb0d9b0c70fadf9233f9da77e12933ab  gcc/testsuite/g++.old-deja/g++.pt/nttp1.C
  94f0fcc44ea927fff0f0b4a7ea3ee67c  gcc/testsuite/g++.old-deja/g++.pt/nttp2.C
  f1256260eab2b60b9e6f1cb00dd7cc6c  gcc/testsuite/g++.old-deja/g++.pt/operator1.C
*************** f07eca4ce324c88a3c4c0a6c61c825d2  gcc/te
*** 28992,29004 ****
  fd6c9bbde46f9a741d3ea6fcf4196c71  gcc/testsuite/g++.old-deja/g++.pt/ptrmem3.C
  bf3497f7210e8501db836f12a50b4847  gcc/testsuite/g++.old-deja/g++.pt/ptrmem4.C
  307b552baa37598a74e96cc36e240254  gcc/testsuite/g++.old-deja/g++.pt/ptrmem5.C
! e2a99f033bd90bddb4e27cd5f0ff6575  gcc/testsuite/g++.old-deja/g++.pt/ptrmem6.C
  43af7526c15acf063c86ed2628da6ed1  gcc/testsuite/g++.old-deja/g++.pt/ptrmem7.C
  e52e6177e655a4986751dbd9747d4dc7  gcc/testsuite/g++.old-deja/g++.pt/ptrmem8.C
  abb79ef912e0e96abdb5a966b3df11bb  gcc/testsuite/g++.old-deja/g++.pt/ptrmem9.C
  d32874636fe85b59968597a9e03e060b  gcc/testsuite/g++.old-deja/g++.pt/recursion.C
  f52f7adcc5fe58e460e0e642279da385  gcc/testsuite/g++.old-deja/g++.pt/recursion2.C
! e7093f602c6807edd2f39d043d05f0f2  gcc/testsuite/g++.old-deja/g++.pt/redecl1.C
  4b0d2c4de566d4685481d1e70444f070  gcc/testsuite/g++.old-deja/g++.pt/redecl2.C
  d2ba4d7263802ba42326b543f3865c8e  gcc/testsuite/g++.old-deja/g++.pt/ref1.C
  9496be7cce9dca2d16421479e66c783d  gcc/testsuite/g++.old-deja/g++.pt/ref2.C
--- 29932,29944 ----
  fd6c9bbde46f9a741d3ea6fcf4196c71  gcc/testsuite/g++.old-deja/g++.pt/ptrmem3.C
  bf3497f7210e8501db836f12a50b4847  gcc/testsuite/g++.old-deja/g++.pt/ptrmem4.C
  307b552baa37598a74e96cc36e240254  gcc/testsuite/g++.old-deja/g++.pt/ptrmem5.C
! 0e05489243c41303d64b785997eac695  gcc/testsuite/g++.old-deja/g++.pt/ptrmem6.C
  43af7526c15acf063c86ed2628da6ed1  gcc/testsuite/g++.old-deja/g++.pt/ptrmem7.C
  e52e6177e655a4986751dbd9747d4dc7  gcc/testsuite/g++.old-deja/g++.pt/ptrmem8.C
  abb79ef912e0e96abdb5a966b3df11bb  gcc/testsuite/g++.old-deja/g++.pt/ptrmem9.C
  d32874636fe85b59968597a9e03e060b  gcc/testsuite/g++.old-deja/g++.pt/recursion.C
  f52f7adcc5fe58e460e0e642279da385  gcc/testsuite/g++.old-deja/g++.pt/recursion2.C
! 2b077cd8a73322215d4fc796bac12921  gcc/testsuite/g++.old-deja/g++.pt/redecl1.C
  4b0d2c4de566d4685481d1e70444f070  gcc/testsuite/g++.old-deja/g++.pt/redecl2.C
  d2ba4d7263802ba42326b543f3865c8e  gcc/testsuite/g++.old-deja/g++.pt/ref1.C
  9496be7cce9dca2d16421479e66c783d  gcc/testsuite/g++.old-deja/g++.pt/ref2.C
*************** be4c4aaf4896a204dd3b537e9467220b  gcc/te
*** 29023,29029 ****
  20894f40e5d69e5aae0b8e042159c827  gcc/testsuite/g++.old-deja/g++.pt/spec19.C
  6dea43e72960bc1d42aee3da9eaf0230  gcc/testsuite/g++.old-deja/g++.pt/spec2.C
  b1a3ba7235eea7ca9df252cf433cdd5f  gcc/testsuite/g++.old-deja/g++.pt/spec20.C
! 25b12bac3c14d516ca04719edc708f32  gcc/testsuite/g++.old-deja/g++.pt/spec21.C
  05b0244f0c064cd598fd696cc4cdfbf1  gcc/testsuite/g++.old-deja/g++.pt/spec22.C
  367cdf2dd4f938be53439e37487c6a8f  gcc/testsuite/g++.old-deja/g++.pt/spec23.C
  c641e36402b485a24d11862e3fabfc28  gcc/testsuite/g++.old-deja/g++.pt/spec24.C
--- 29963,29969 ----
  20894f40e5d69e5aae0b8e042159c827  gcc/testsuite/g++.old-deja/g++.pt/spec19.C
  6dea43e72960bc1d42aee3da9eaf0230  gcc/testsuite/g++.old-deja/g++.pt/spec2.C
  b1a3ba7235eea7ca9df252cf433cdd5f  gcc/testsuite/g++.old-deja/g++.pt/spec20.C
! 1e12385ef24722e4df13ea0ba84f2d4a  gcc/testsuite/g++.old-deja/g++.pt/spec21.C
  05b0244f0c064cd598fd696cc4cdfbf1  gcc/testsuite/g++.old-deja/g++.pt/spec22.C
  367cdf2dd4f938be53439e37487c6a8f  gcc/testsuite/g++.old-deja/g++.pt/spec23.C
  c641e36402b485a24d11862e3fabfc28  gcc/testsuite/g++.old-deja/g++.pt/spec24.C
*************** d6c8f4a2bd3eee6e10304d0f21bed927  gcc/te
*** 29212,29218 ****
  bf884302d62e4009612a7e93dd7f10df  gcc/testsuite/g++.old-deja/g++.pt/unify2.C
  1e49fa76a69677164367e1fd374b5370  gcc/testsuite/g++.old-deja/g++.pt/unify3.C
  02a316ebb358fa9ef570713317263701  gcc/testsuite/g++.old-deja/g++.pt/unify4.C
! 3ef881ff73ec78d86099104b8be2cb75  gcc/testsuite/g++.old-deja/g++.pt/unify6.C
  cb46cc17a18f69d164593218a5d630a0  gcc/testsuite/g++.old-deja/g++.pt/unify7.C
  0197b97b5f17e14d0e551702b078f130  gcc/testsuite/g++.old-deja/g++.pt/unify8.C
  112581a8e8c2b083893e14209dc8e197  gcc/testsuite/g++.old-deja/g++.pt/union1.C
--- 30152,30158 ----
  bf884302d62e4009612a7e93dd7f10df  gcc/testsuite/g++.old-deja/g++.pt/unify2.C
  1e49fa76a69677164367e1fd374b5370  gcc/testsuite/g++.old-deja/g++.pt/unify3.C
  02a316ebb358fa9ef570713317263701  gcc/testsuite/g++.old-deja/g++.pt/unify4.C
! 7463d37b7b2fd8396b098dc4fc426ab1  gcc/testsuite/g++.old-deja/g++.pt/unify6.C
  cb46cc17a18f69d164593218a5d630a0  gcc/testsuite/g++.old-deja/g++.pt/unify7.C
  0197b97b5f17e14d0e551702b078f130  gcc/testsuite/g++.old-deja/g++.pt/unify8.C
  112581a8e8c2b083893e14209dc8e197  gcc/testsuite/g++.old-deja/g++.pt/union1.C
*************** e4bacbe47abba3ebf1104b50d7cf9249  gcc/te
*** 29233,29239 ****
  e890a612b46d6c7b501609a21a4674a8  gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C
  e26ad5718ff51449da03b8b3023ebab1  gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C
  18090564deaeabb2833db724176f5e3e  gcc/testsuite/g++.old-deja/g++.robertl/980310-1.C
! 1c4348bdac8331cd084d64cb7791eb02  gcc/testsuite/g++.old-deja/g++.robertl/README
  7043c0e8dd58f93b9ec2d562d4af77b8  gcc/testsuite/g++.old-deja/g++.robertl/eb10.C
  ee83a1efbd7590614fbf204920c56047  gcc/testsuite/g++.old-deja/g++.robertl/eb102.C
  16b83875b8a1cbbdb43a0c94bc18228d  gcc/testsuite/g++.old-deja/g++.robertl/eb103.C
--- 30173,30179 ----
  e890a612b46d6c7b501609a21a4674a8  gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C
  e26ad5718ff51449da03b8b3023ebab1  gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C
  18090564deaeabb2833db724176f5e3e  gcc/testsuite/g++.old-deja/g++.robertl/980310-1.C
! 644730dc4a224c564918f312da13d4fb  gcc/testsuite/g++.old-deja/g++.robertl/README
  7043c0e8dd58f93b9ec2d562d4af77b8  gcc/testsuite/g++.old-deja/g++.robertl/eb10.C
  ee83a1efbd7590614fbf204920c56047  gcc/testsuite/g++.old-deja/g++.robertl/eb102.C
  16b83875b8a1cbbdb43a0c94bc18228d  gcc/testsuite/g++.old-deja/g++.robertl/eb103.C
*************** db68a817c3bdd5f97fe7e97593e0eee4  gcc/te
*** 29300,29306 ****
  b92d300c6fe701dce20422ebf6b69f31  gcc/testsuite/g++.old-deja/g++.robertl/eb39.C
  c170abbc78a34e272358a4329e335d08  gcc/testsuite/g++.old-deja/g++.robertl/eb4.C
  a2554475431f18dfadd63645b06b9130  gcc/testsuite/g++.old-deja/g++.robertl/eb41.C
! c19d073bd29f349dea6c1f5359c38217  gcc/testsuite/g++.old-deja/g++.robertl/eb43.C
  cf5b525b1de75ecc4865c73f60df5ba9  gcc/testsuite/g++.old-deja/g++.robertl/eb44.C
  ef8dd1079f1a0fbed1487226cb19d1f4  gcc/testsuite/g++.old-deja/g++.robertl/eb45.C
  162242e8a8ce35ee0319175bf101e399  gcc/testsuite/g++.old-deja/g++.robertl/eb46.C
--- 30240,30246 ----
  b92d300c6fe701dce20422ebf6b69f31  gcc/testsuite/g++.old-deja/g++.robertl/eb39.C
  c170abbc78a34e272358a4329e335d08  gcc/testsuite/g++.old-deja/g++.robertl/eb4.C
  a2554475431f18dfadd63645b06b9130  gcc/testsuite/g++.old-deja/g++.robertl/eb41.C
! 7c85eb0f79d89ec346f7a92efcd4204a  gcc/testsuite/g++.old-deja/g++.robertl/eb43.C
  cf5b525b1de75ecc4865c73f60df5ba9  gcc/testsuite/g++.old-deja/g++.robertl/eb44.C
  ef8dd1079f1a0fbed1487226cb19d1f4  gcc/testsuite/g++.old-deja/g++.robertl/eb45.C
  162242e8a8ce35ee0319175bf101e399  gcc/testsuite/g++.old-deja/g++.robertl/eb46.C
*************** f0d75f94742cf514d429d51c4d4df58c  gcc/te
*** 29374,29387 ****
  a885b90302ee9e0cb5c2e13efa009de3  gcc/testsuite/g++.old-deja/g++.warn/inline.C
  d53cb2073c8f36697f63dfe19779eb13  gcc/testsuite/g++.old-deja/g++.warn/iomanip.C
  0c1003d602150141b4f4705044d2624f  gcc/testsuite/g++.old-deja/g++.warn/virt1.C
! 9db5edbc66abe3faac9be3ff82011df6  gcc/testsuite/g++.old-deja/old-deja.exp
! bee40081d8891411f689d510017ed4cc  gcc/testsuite/g++.target/aarch64/aarch64.exp
! 3f212b0014307c14669d5a3154904207  gcc/testsuite/g++.target/aarch64/advsimd-intrinsics/advsimd-intrinsics.exp
  992600153061bcf9c4f34a765c2c8f7e  gcc/testsuite/g++.target/aarch64/advsimd-intrinsics/pr98852.C
  ebce94697839c9a076df3569eade77eb  gcc/testsuite/g++.target/aarch64/bfloat_cpp_typecheck.C
  c11e5f97e7a5971cc5c5017024f54496  gcc/testsuite/g++.target/aarch64/diag_aka_1.C
  4d5fd415b9746bcd53f093e8282fb37d  gcc/testsuite/g++.target/aarch64/no_unique_address_1.C
  20b857cf626aad749264f74e19d94347  gcc/testsuite/g++.target/aarch64/no_unique_address_2.C
  1755134bcb84bdbcfd658df7150649e0  gcc/testsuite/g++.target/aarch64/pr89752.C
  ba9d23bf9864be2b6061429c3faa49b7  gcc/testsuite/g++.target/aarch64/pr94052.C
  376b3a47b3ddd89e448a765321d0e622  gcc/testsuite/g++.target/aarch64/pr94514.C
--- 30314,30338 ----
  a885b90302ee9e0cb5c2e13efa009de3  gcc/testsuite/g++.old-deja/g++.warn/inline.C
  d53cb2073c8f36697f63dfe19779eb13  gcc/testsuite/g++.old-deja/g++.warn/iomanip.C
  0c1003d602150141b4f4705044d2624f  gcc/testsuite/g++.old-deja/g++.warn/virt1.C
! ffa93750b4f76bf897309b5d9b1f635e  gcc/testsuite/g++.old-deja/old-deja.exp
! fc2548fe3f5c4917ea6f09e32422f740  gcc/testsuite/g++.target/aarch64/aarch64.exp
! 2daf84a2bbcebee0fcf0559817712401  gcc/testsuite/g++.target/aarch64/advsimd-intrinsics/advsimd-intrinsics.exp
  992600153061bcf9c4f34a765c2c8f7e  gcc/testsuite/g++.target/aarch64/advsimd-intrinsics/pr98852.C
  ebce94697839c9a076df3569eade77eb  gcc/testsuite/g++.target/aarch64/bfloat_cpp_typecheck.C
  c11e5f97e7a5971cc5c5017024f54496  gcc/testsuite/g++.target/aarch64/diag_aka_1.C
+ 4320de0414b96b162e7734443992dd38  gcc/testsuite/g++.target/aarch64/interference.C
  4d5fd415b9746bcd53f093e8282fb37d  gcc/testsuite/g++.target/aarch64/no_unique_address_1.C
  20b857cf626aad749264f74e19d94347  gcc/testsuite/g++.target/aarch64/no_unique_address_2.C
+ ff91378a7ee794cf81b35b9b219bd4b2  gcc/testsuite/g++.target/aarch64/pr103147-1.C
+ b15b5a75c4e74aa074353168cf929941  gcc/testsuite/g++.target/aarch64/pr103147-10.C
+ 51603f65ccab9c1ede5d7110a43c75a1  gcc/testsuite/g++.target/aarch64/pr103147-2.C
+ 846f32ec61a2c44d9395459e726dc310  gcc/testsuite/g++.target/aarch64/pr103147-3.C
+ b45179fb4c2cb954cc481e0a385817d5  gcc/testsuite/g++.target/aarch64/pr103147-4.C
+ 61a760575cff2cf4bd17ba9244e96518  gcc/testsuite/g++.target/aarch64/pr103147-5.C
+ e41794101e1163933e295ca13a5ea408  gcc/testsuite/g++.target/aarch64/pr103147-6.C
+ 02bff38b96b8706f58c3b373fea990f2  gcc/testsuite/g++.target/aarch64/pr103147-7.C
+ 8931dca56e54462bd94ce184b0a14e21  gcc/testsuite/g++.target/aarch64/pr103147-8.C
+ 18f8443138a6fbfd030458bc4aee321e  gcc/testsuite/g++.target/aarch64/pr103147-9.C
  1755134bcb84bdbcfd658df7150649e0  gcc/testsuite/g++.target/aarch64/pr89752.C
  ba9d23bf9864be2b6061429c3faa49b7  gcc/testsuite/g++.target/aarch64/pr94052.C
  376b3a47b3ddd89e448a765321d0e622  gcc/testsuite/g++.target/aarch64/pr94514.C
*************** af40dade74feb71f52277a623af87930  gcc/te
*** 29391,29400 ****
  716e0dc0f2b0b7fa20373a1a78ece033  gcc/testsuite/g++.target/aarch64/pr95726.C
  1ce9a3af843eab0dca2dbb5193fb0db2  gcc/testsuite/g++.target/aarch64/return_address_sign_ab_exception.C
  1649b9447d9bcb87e619e52bd2ad8119  gcc/testsuite/g++.target/aarch64/return_address_sign_b_exception.C
! 7df5e70f80e65eff33f23719e1fb97de  gcc/testsuite/g++.target/aarch64/sve/aarch64-sve.exp
  a6360472eed92aa68d9de7e0dcbbc077  gcc/testsuite/g++.target/aarch64/sve/abd_1.C
! 96d7bcbba2173dbb0323c9eb5f6f5c68  gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp
! 0b7f7e2c0e465c0444688dd5c4cd9213  gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle.exp
  a4694db6f43496d141f7d03b0bad5454  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/add_1.C
  c9bec53dca7f345d3812bc87a82ac56e  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/add_1.h
  c264d7575a5c60660881b415fc9e52ba  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/add_2.C
--- 30342,30351 ----
  716e0dc0f2b0b7fa20373a1a78ece033  gcc/testsuite/g++.target/aarch64/pr95726.C
  1ce9a3af843eab0dca2dbb5193fb0db2  gcc/testsuite/g++.target/aarch64/return_address_sign_ab_exception.C
  1649b9447d9bcb87e619e52bd2ad8119  gcc/testsuite/g++.target/aarch64/return_address_sign_b_exception.C
! 90ae5414c17860a635feef8d1b2d1fb4  gcc/testsuite/g++.target/aarch64/sve/aarch64-sve.exp
  a6360472eed92aa68d9de7e0dcbbc077  gcc/testsuite/g++.target/aarch64/sve/abd_1.C
! 2b043d6919e106347f4c2cef41a1f11f  gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp
! c18222f032e2d76ac4ce26ad8eee2806  gcc/testsuite/g++.target/aarch64/sve/acle/aarch64-sve-acle.exp
  a4694db6f43496d141f7d03b0bad5454  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/add_1.C
  c9bec53dca7f345d3812bc87a82ac56e  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/add_1.h
  c264d7575a5c60660881b415fc9e52ba  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/add_2.C
*************** f3ce91773bd0b4a3127c481ccd50f20e  gcc/te
*** 29520,29525 ****
--- 30471,30477 ----
  9e6f261244b524db00958d47111eef62  gcc/testsuite/g++.target/aarch64/sve/dup_sel_6.C
  57a0aa7896383cbb0273342d58a4a7b5  gcc/testsuite/g++.target/aarch64/sve/max_1.C
  ab6c5e333d0a740ae5ecff69966813a2  gcc/testsuite/g++.target/aarch64/sve/min_1.C
+ 6bb662ee32d75fad86cbbcc07aab9998  gcc/testsuite/g++.target/aarch64/sve/pr102252.C
  032fe0d5fa79aaf6c36c32fb19a50c00  gcc/testsuite/g++.target/aarch64/sve/pr96974.C
  6c0e94c363caf9e62df35ea98b4918ed  gcc/testsuite/g++.target/aarch64/sve/pr98177-1.C
  e64000c150bb204c31dca884ee33dd4f  gcc/testsuite/g++.target/aarch64/sve/pr98177-2.C
*************** e64000c150bb204c31dca884ee33dd4f  gcc/te
*** 29527,29543 ****
  7a3f6881450cc6c3e64742a99fe7ce38  gcc/testsuite/g++.target/aarch64/sve/pr99766.C
  2593683d9c7386135d4e8b8ef8a59b7a  gcc/testsuite/g++.target/aarch64/sve/pr99781.C
  6979d0ef19d61a437acf8559362a5af8  gcc/testsuite/g++.target/aarch64/sve/pr99813.C
  221b0724e04f13318fe418921311ae33  gcc/testsuite/g++.target/aarch64/sve/tls_2.C
  7d111b2af4cdd362d19027877d6ff20b  gcc/testsuite/g++.target/aarch64/sve/vcond_1.C
  aa928203aafdb1f6793fe73d77390fc9  gcc/testsuite/g++.target/aarch64/sve/vcond_1_run.C
! d781f46d1e9b4baf743fb70810f6fa6a  gcc/testsuite/g++.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp
! 6641cdc36ed7b63701fe0ef5214d218e  gcc/testsuite/g++.target/arm/arm.exp
  99b5cde1aa5ba8d3c40ce3af92ef40f5  gcc/testsuite/g++.target/arm/bfloat_cpp_typecheck.C
  e64278e516f7ebae5481e326b54f28dd  gcc/testsuite/g++.target/arm/cde_mve.C
! 205ccdefdbb3b9b53e0013ab1c5146c0  gcc/testsuite/g++.target/arm/mve.exp
  fefb1ea34abe2e49510cd8293f8c14e5  gcc/testsuite/g++.target/arm/no_unique_address_1.C
  bb7292912fa6d506586421d0df58412b  gcc/testsuite/g++.target/arm/no_unique_address_2.C
  4c06abe7b8d5bd183704907c3993392c  gcc/testsuite/g++.target/arm/pr102842.C
  86ce099311b8a462979885c1f82c41db  gcc/testsuite/g++.target/arm/pr81497.C
  c66ac2233f3efac56ec64b9294b3708d  gcc/testsuite/g++.target/arm/pr95726.C
  881bcc41183f756e0d7cbda13b2b51df  gcc/testsuite/g++.target/arm/pr99593.C
--- 30479,30498 ----
  7a3f6881450cc6c3e64742a99fe7ce38  gcc/testsuite/g++.target/aarch64/sve/pr99766.C
  2593683d9c7386135d4e8b8ef8a59b7a  gcc/testsuite/g++.target/aarch64/sve/pr99781.C
  6979d0ef19d61a437acf8559362a5af8  gcc/testsuite/g++.target/aarch64/sve/pr99813.C
+ eb290283439217e61bf7146ea947386f  gcc/testsuite/g++.target/aarch64/sve/static-var-in-template.C
  221b0724e04f13318fe418921311ae33  gcc/testsuite/g++.target/aarch64/sve/tls_2.C
  7d111b2af4cdd362d19027877d6ff20b  gcc/testsuite/g++.target/aarch64/sve/vcond_1.C
  aa928203aafdb1f6793fe73d77390fc9  gcc/testsuite/g++.target/aarch64/sve/vcond_1_run.C
! a1a42dd995b59da298bae8bcaad1b1c3  gcc/testsuite/g++.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp
! cfbfc60ac3aac9250378ca80229421f7  gcc/testsuite/g++.target/arm/arm.exp
  99b5cde1aa5ba8d3c40ce3af92ef40f5  gcc/testsuite/g++.target/arm/bfloat_cpp_typecheck.C
  e64278e516f7ebae5481e326b54f28dd  gcc/testsuite/g++.target/arm/cde_mve.C
! 817f6b8bbc13fc92c8ffbe3bcaf7963d  gcc/testsuite/g++.target/arm/interference.C
! 3e16bc7c86081cf42bd4e6913125c90d  gcc/testsuite/g++.target/arm/mve.exp
  fefb1ea34abe2e49510cd8293f8c14e5  gcc/testsuite/g++.target/arm/no_unique_address_1.C
  bb7292912fa6d506586421d0df58412b  gcc/testsuite/g++.target/arm/no_unique_address_2.C
  4c06abe7b8d5bd183704907c3993392c  gcc/testsuite/g++.target/arm/pr102842.C
+ 5d0bfb5484f8db2f1a2556bb0ea6394b  gcc/testsuite/g++.target/arm/pr103676.C
  86ce099311b8a462979885c1f82c41db  gcc/testsuite/g++.target/arm/pr81497.C
  c66ac2233f3efac56ec64b9294b3708d  gcc/testsuite/g++.target/arm/pr95726.C
  881bcc41183f756e0d7cbda13b2b51df  gcc/testsuite/g++.target/arm/pr99593.C
*************** d01c52e5837b17bc9fa153504ea3aaff  gcc/te
*** 29547,29564 ****
  a4d5da9937e99905b3690c88b7431aa7  gcc/testsuite/g++.target/i386/avx-pr54700-2.C
  16aa802b1a9f81b592b5893f84f37c44  gcc/testsuite/g++.target/i386/avx2-check.h
  074d2a8f9ad1c4fb9c585d003bcc655f  gcc/testsuite/g++.target/i386/avx2-pr54700-1.C
! c89f1a3e08d60ec31255e6ecadfed12e  gcc/testsuite/g++.target/i386/avx2-pr54700-2.C
  734b3ce37270b7f5daf230629716c5c2  gcc/testsuite/g++.target/i386/avx512bw-pr96246-1.C
  2caa88a24107fa33264fd116f453ae5e  gcc/testsuite/g++.target/i386/avx512bw-pr96246-2.C
  4a44f470ea24c20123902146bd5273ad  gcc/testsuite/g++.target/i386/avx512bw-pr98537-1.C
  3ec2a7fddbb432f8b259b0ada49c99a8  gcc/testsuite/g++.target/i386/avx512f-helper.h
  cbe0c3947d51802a4bf66ce01377fb64  gcc/testsuite/g++.target/i386/avx512f-pr96891-1.C
  c174ff7705931b0de0e317387956baa9  gcc/testsuite/g++.target/i386/avx512vl-pr96246-1.C
  989085cee5b240a6124a1eb805392cfd  gcc/testsuite/g++.target/i386/avx512vl-pr96246-2.C
  4b4064fa7873d4cb7157ac2a64b60aa1  gcc/testsuite/g++.target/i386/avx512vl-pr98537-1.C
  6fb49c93f0095a942a2bf1dd276425d5  gcc/testsuite/g++.target/i386/avx512vl-pr98537-2.C
  7a33fea3b2ecb10736e762b211f6ae42  gcc/testsuite/g++.target/i386/crc32-4.C
! d9e69c3fbb0935ee7e83bf287faa8455  gcc/testsuite/g++.target/i386/i386.exp
  0ec10c6dd8c46db7332b15201fba84ba  gcc/testsuite/g++.target/i386/m128-check.h
  a1f73425439294ed2e5c470eb6a67f31  gcc/testsuite/g++.target/i386/m256-check.h
  d9283642c1e353810c049d439e8f3c60  gcc/testsuite/g++.target/i386/mv1.C
--- 30502,30532 ----
  a4d5da9937e99905b3690c88b7431aa7  gcc/testsuite/g++.target/i386/avx-pr54700-2.C
  16aa802b1a9f81b592b5893f84f37c44  gcc/testsuite/g++.target/i386/avx2-check.h
  074d2a8f9ad1c4fb9c585d003bcc655f  gcc/testsuite/g++.target/i386/avx2-pr54700-1.C
! bb1656a836158ee012bbed4bc10d85f0  gcc/testsuite/g++.target/i386/avx2-pr54700-2.C
  734b3ce37270b7f5daf230629716c5c2  gcc/testsuite/g++.target/i386/avx512bw-pr96246-1.C
  2caa88a24107fa33264fd116f453ae5e  gcc/testsuite/g++.target/i386/avx512bw-pr96246-2.C
  4a44f470ea24c20123902146bd5273ad  gcc/testsuite/g++.target/i386/avx512bw-pr98537-1.C
  3ec2a7fddbb432f8b259b0ada49c99a8  gcc/testsuite/g++.target/i386/avx512f-helper.h
  cbe0c3947d51802a4bf66ce01377fb64  gcc/testsuite/g++.target/i386/avx512f-pr96891-1.C
+ c89ba9cfe468937652adb223c2fe88f9  gcc/testsuite/g++.target/i386/avx512fp16-vcondmn-minmax.C
+ d5287c6ed2bebf01314526c64e9b26ba  gcc/testsuite/g++.target/i386/avx512fp16-vcondmn-vec.C
+ 5df96b365d4dc9fff3b4d57ee1d9f8e5  gcc/testsuite/g++.target/i386/avx512vl-pr100738-1.C
+ ac447501e5a00129c3467a59a4c9c737  gcc/testsuite/g++.target/i386/avx512vl-pr54700-1a.C
+ 7fca2d9a501da9a8639dc4c73aa19924  gcc/testsuite/g++.target/i386/avx512vl-pr54700-1b.C
+ 9da4ce54e9e834858c102fdf8215f14b  gcc/testsuite/g++.target/i386/avx512vl-pr54700-2a.C
+ f82cbff6e1260c85aa901dd233997fb8  gcc/testsuite/g++.target/i386/avx512vl-pr54700-2b.C
  c174ff7705931b0de0e317387956baa9  gcc/testsuite/g++.target/i386/avx512vl-pr96246-1.C
  989085cee5b240a6124a1eb805392cfd  gcc/testsuite/g++.target/i386/avx512vl-pr96246-2.C
  4b4064fa7873d4cb7157ac2a64b60aa1  gcc/testsuite/g++.target/i386/avx512vl-pr98537-1.C
  6fb49c93f0095a942a2bf1dd276425d5  gcc/testsuite/g++.target/i386/avx512vl-pr98537-2.C
  7a33fea3b2ecb10736e762b211f6ae42  gcc/testsuite/g++.target/i386/crc32-4.C
! ea7a625a5c087724f70333c1b6ad80fc  gcc/testsuite/g++.target/i386/empty-class1.C
! fc6584cb6450a43c850eb626ce94a8d0  gcc/testsuite/g++.target/i386/empty-class2.C
! 59baaf7d8dc52c0829364fc8f3bc8cf9  gcc/testsuite/g++.target/i386/float16-1.C
! 9925d7b9c6c837b57951d0f9591f8d67  gcc/testsuite/g++.target/i386/float16-2.C
! 4e150fddd678b3b96442fa875ac8becb  gcc/testsuite/g++.target/i386/float16-3.C
! 0c244671d8508bc0dbd62c69231c32b3  gcc/testsuite/g++.target/i386/i386.exp
! f23b91fd4df934b4b8cb89c14e082b05  gcc/testsuite/g++.target/i386/interference.C
  0ec10c6dd8c46db7332b15201fba84ba  gcc/testsuite/g++.target/i386/m128-check.h
  a1f73425439294ed2e5c470eb6a67f31  gcc/testsuite/g++.target/i386/m256-check.h
  d9283642c1e353810c049d439e8f3c60  gcc/testsuite/g++.target/i386/mv1.C
*************** c3abd0fb44ca490064aaa6988814d40c  gcc/te
*** 29586,29591 ****
--- 30554,30561 ----
  015182fced49b5ec2160104b1e1fcfd5  gcc/testsuite/g++.target/i386/mv28.C
  dac0893381524d0f9aaec2e84e62637f  gcc/testsuite/g++.target/i386/mv29.C
  bad9a677892adffe2c45653797aad55c  gcc/testsuite/g++.target/i386/mv3.C
+ 8e16cb4ef8b3ee3b728e21112c7331d1  gcc/testsuite/g++.target/i386/mv30.C
+ 6c2437562ef96defbdcf21aa49f5676f  gcc/testsuite/g++.target/i386/mv31.C
  253207ecb3f4d04076efa9253026fa4c  gcc/testsuite/g++.target/i386/mv4.C
  dc39143004995c38b524d1b929c9c96c  gcc/testsuite/g++.target/i386/mv5.C
  01094409b78d48ec67bbf367448ecc93  gcc/testsuite/g++.target/i386/mv6.C
*************** c2d5d87b3488ab338dcccb9091181331  gcc/te
*** 29596,29612 ****
--- 30566,30628 ----
  cc57ca4fd9c378f13126f05fd23d44f9  gcc/testsuite/g++.target/i386/mvc2.C
  5770edbad8bcf6303a34e5d14d63a98d  gcc/testsuite/g++.target/i386/mvc3.C
  4b58a8b362895e2d3227500db9f7df3f  gcc/testsuite/g++.target/i386/mvc4.C
+ 9a0d428fd560d4c3147d5fbc1f53faf7  gcc/testsuite/g++.target/i386/pr100581.C
+ e0917eeb573b58e334ffa0538638b3a0  gcc/testsuite/g++.target/i386/pr100637-1b.C
+ b0cba5b3c1e414b000bad882628ff2ed  gcc/testsuite/g++.target/i386/pr100637-1w.C
+ a277103a707b6f5b5719538a812d00f4  gcc/testsuite/g++.target/i386/pr100738-1.C
  1c0fbaabc2aefc10da9582b80f11789c  gcc/testsuite/g++.target/i386/pr100885.C
  a1f1d426b1b50862a624c700e26cea03  gcc/testsuite/g++.target/i386/pr101023a.C
  06163cba2fd3bcf61e06ef2a745befdb  gcc/testsuite/g++.target/i386/pr101023b.C
+ 10ea5542036caa6579f738f91b2b2e45  gcc/testsuite/g++.target/i386/pr101180.C
+ 63229803684ae696a4d865ddf1758e61  gcc/testsuite/g++.target/i386/pr102024.C
  945955607a22f7b849c624a91c2f5c9d  gcc/testsuite/g++.target/i386/pr102166.C
  186a4f48c778c8bfd308076ed5277d77  gcc/testsuite/g++.target/i386/pr102295.C
  6d6c399b53fe1c3078aa132a559fe2ab  gcc/testsuite/g++.target/i386/pr102548.C
+ ebe6429ff62615172a441fe393a00b47  gcc/testsuite/g++.target/i386/pr102566-1.C
+ a10b340ea460d0d5764cc2e35ea7917c  gcc/testsuite/g++.target/i386/pr102566-2.C
+ d9b6fd4a0567b511454c8f290dead706  gcc/testsuite/g++.target/i386/pr102566-3.C
+ e7c4ad8e3b4d2a6588c231359cacaffb  gcc/testsuite/g++.target/i386/pr102566-4.C
+ 2c383dd9fc6676dddeef16d2aab0e4cf  gcc/testsuite/g++.target/i386/pr102566-5a.C
+ 55dc02825e792c771d7116580948fd0d  gcc/testsuite/g++.target/i386/pr102566-5b.C
+ 90fdb9bef2585466a4828d4b7df1d6ed  gcc/testsuite/g++.target/i386/pr102566-6a.C
+ 14b2c1c0042744a49eb44819dbaab8ba  gcc/testsuite/g++.target/i386/pr102566-6b.C
+ 5bf0e7dd3443f6ba12f2fc4e9513d0d5  gcc/testsuite/g++.target/i386/pr102639.C
  2a03baff08b5b7bdeb8d3633c49032bb  gcc/testsuite/g++.target/i386/pr103012.C
+ d14b3d4a9b5fcacba2b980352b05c8e3  gcc/testsuite/g++.target/i386/pr103696.C
+ e15d8bcd429002b90cd8c1aedf71247c  gcc/testsuite/g++.target/i386/pr103750-fwprop-1.C
+ a87febe2b07ccee6b99d32890b389fd3  gcc/testsuite/g++.target/i386/pr103861-1-sse4.C
+ 37faebe0845bea899c8c08c800497d7a  gcc/testsuite/g++.target/i386/pr103861-1-xop.C
+ cb51cbf5595e7107c9dcac8259bccec4  gcc/testsuite/g++.target/i386/pr103861-1.C
+ 0621f08ee0ccea43d3165f4cbee54aa3  gcc/testsuite/g++.target/i386/pr103973-1.C
+ 9b42fb5b27cfa547195c05eb253364a2  gcc/testsuite/g++.target/i386/pr103973-10.C
+ ae52cea3b81b61d3e836bd051d8fd995  gcc/testsuite/g++.target/i386/pr103973-11.C
+ 374695eb5a8496450e7bf51a8620ef56  gcc/testsuite/g++.target/i386/pr103973-12.C
+ d72124ffc6e25f4a647f00fd4999dd4b  gcc/testsuite/g++.target/i386/pr103973-13.C
+ b407cbb7870fedb726d9b5f785f6cc67  gcc/testsuite/g++.target/i386/pr103973-14.C
+ 630b6de64452450c644f4ad8b364344d  gcc/testsuite/g++.target/i386/pr103973-15.C
+ 5dd0980538e35516acacfd8b2b878997  gcc/testsuite/g++.target/i386/pr103973-16.C
+ 08b9367e1bb7d0978280fc4ced12fa5e  gcc/testsuite/g++.target/i386/pr103973-17.C
+ 54155da08aa90df1020db8b8b427a3ea  gcc/testsuite/g++.target/i386/pr103973-18.C
+ 6d99ec255d3d71ace627a3e54766c2a3  gcc/testsuite/g++.target/i386/pr103973-19.C
+ 9b4b653dc8a574ac40deafd83f94ba00  gcc/testsuite/g++.target/i386/pr103973-2.C
+ b4e238ef9818c6e6961fdcf0421fcd86  gcc/testsuite/g++.target/i386/pr103973-20.C
+ 1e42168558efc28a35ae001a6aafc4dc  gcc/testsuite/g++.target/i386/pr103973-3.C
+ 24677a5711d8413f58b1d6724430e34c  gcc/testsuite/g++.target/i386/pr103973-4.C
+ 6d4340ddb10cd850959f7191f534b3d7  gcc/testsuite/g++.target/i386/pr103973-5.C
+ 56d5e792dad81e0e3a01f642159d15b0  gcc/testsuite/g++.target/i386/pr103973-6.C
+ 9c0be0cac6b53a1aac9b113bc2fc1a66  gcc/testsuite/g++.target/i386/pr103973-7.C
+ a180acec30b50a433b12979e550fdfba  gcc/testsuite/g++.target/i386/pr103973-8.C
+ a87c63cefd62030b99bd90bcd75c66f2  gcc/testsuite/g++.target/i386/pr103973-9.C
+ 528fa6bfe03c4eae15918407205bb139  gcc/testsuite/g++.target/i386/pr104533.C
+ e22bf5b2b8a89ad669b8340531ba8f41  gcc/testsuite/g++.target/i386/pr104540.C
+ 55fb67abf6517f92b1a0240d2c06b5c5  gcc/testsuite/g++.target/i386/pr35513-1.C
+ 14dde546e4eefec7aa6d1ac41261cb16  gcc/testsuite/g++.target/i386/pr35513-2.C
  1c706f97b6d93c0124dc4a203c98f6d2  gcc/testsuite/g++.target/i386/pr57362.C
  db3c3a9d9f798eff6348f0813dccc376  gcc/testsuite/g++.target/i386/pr57548.C
  e8a006e5050e191010d1a6ecff4873a3  gcc/testsuite/g++.target/i386/pr58372.C
  a9182e6d928d363b56a91bded6231bb9  gcc/testsuite/g++.target/i386/pr59492.C
+ 4ec9a5753441130dc533fd918508a7c7  gcc/testsuite/g++.target/i386/pr80566-1.C
+ 86d74fadde941f269d85c201b35ecf20  gcc/testsuite/g++.target/i386/pr80566-2.C
  819ecf07fe897248c2153cdb9dee2292  gcc/testsuite/g++.target/i386/pr82625.C
  595e95a52a8e7241531daede25387052  gcc/testsuite/g++.target/i386/pr85329-2.C
  83ee00a9e7a064242ad6f43457dfa886  gcc/testsuite/g++.target/i386/pr85329.C
*************** ce4ef4a52cb8cca61d3ad37ccd43c5c3  gcc/te
*** 29633,29638 ****
--- 30649,30656 ----
  ba6d7ab9bcf9d2c19d1b8ac3ed405800  gcc/testsuite/g++.target/i386/pr94185.C
  64e33a95d43ea5ee0af2cfdcb318bf00  gcc/testsuite/g++.target/i386/pr95229.C
  bdb455b2331ad2932c1fc9e92219df39  gcc/testsuite/g++.target/i386/pr97054.C
+ d000551f0144506c6c541d980aa84d65  gcc/testsuite/g++.target/i386/pr98218-1.C
+ afb8b6ab7d54fa8eab8865a52a46caa4  gcc/testsuite/g++.target/i386/pr98335.C
  12b9e7025b922a770edbd85b09d3b099  gcc/testsuite/g++.target/i386/pr98847.C
  eafc363e633aef7542e621d7ecaa914e  gcc/testsuite/g++.target/i386/pr99108.C
  3660db29974db1f63f1a1f458c8894db  gcc/testsuite/g++.target/i386/pr99679-1.C
*************** b3fdfe2866e1905292894d815f1fa291  gcc/te
*** 29640,29650 ****
  a621b799eff193996043d9d5462e5c27  gcc/testsuite/g++.target/i386/sse4_1-check.h
  821d1f6cc7812ffc5220fc45c484c00f  gcc/testsuite/g++.target/i386/sse4_1-pr54700-1.C
  05e47f652ea4bc7c8df9bae20aaaa2b4  gcc/testsuite/g++.target/i386/sse4_1-pr54700-2.C
  436543179ef45c1a7c596bfa70c8ef1d  gcc/testsuite/g++.target/msp430/data-attributes.C
! 105ca4af68fcc0dddd766a75cb581d3b  gcc/testsuite/g++.target/msp430/msp430.exp
  5848d6741a53192ff50fe53e91b24df1  gcc/testsuite/g++.target/nios2/hello-pie.C
! b3b6e31577bc973ad6e12e7336213059  gcc/testsuite/g++.target/nios2/nios2.exp
! fa8aa783bcf6fa703e7e93442b148996  gcc/testsuite/g++.target/powerpc/powerpc.exp
  63b698681e4a076eb88feccb3e6373df  gcc/testsuite/g++.target/powerpc/pr94707-1.C
  75c93ba90b3ca18a6d5c5264e2816651  gcc/testsuite/g++.target/powerpc/pr94707-2.C
  a63f2ade84bc38838f3986dfc4bc9d85  gcc/testsuite/g++.target/powerpc/pr94707-3.C
--- 30658,30703 ----
  a621b799eff193996043d9d5462e5c27  gcc/testsuite/g++.target/i386/sse4_1-check.h
  821d1f6cc7812ffc5220fc45c484c00f  gcc/testsuite/g++.target/i386/sse4_1-pr54700-1.C
  05e47f652ea4bc7c8df9bae20aaaa2b4  gcc/testsuite/g++.target/i386/sse4_1-pr54700-2.C
+ 6d0d9132ecd5c558bd1ec20dcee32d5d  gcc/testsuite/g++.target/i386/vec-tmpl1.C
+ 0326a0afb833c5dbd49b5d623c8dd93b  gcc/testsuite/g++.target/mips/cxx17_empty_base.C
+ c56f5e56a00b90a56d9dd4ef483dbda1  gcc/testsuite/g++.target/mips/mips.exp
+ dcd3af289f36f150df28be99b5efc7ed  gcc/testsuite/g++.target/mips/pr102024.C
  436543179ef45c1a7c596bfa70c8ef1d  gcc/testsuite/g++.target/msp430/data-attributes.C
! c809a17796021867ed7808be437cfa29  gcc/testsuite/g++.target/msp430/msp430.exp
  5848d6741a53192ff50fe53e91b24df1  gcc/testsuite/g++.target/nios2/hello-pie.C
! 16100719ebd0336852fd4cf76239d792  gcc/testsuite/g++.target/nios2/nios2.exp
! 866ae57bf40de984200cce23327a2675  gcc/testsuite/g++.target/powerpc/altivec-1.C
! b4f090ce0f4d5a698db06ef3858c0a8b  gcc/testsuite/g++.target/powerpc/altivec-10.C
! b42156baabeb4c76393e9c82a906d6ac  gcc/testsuite/g++.target/powerpc/altivec-11.C
! a1293ea68a65df3ef70a69b5ec3515eb  gcc/testsuite/g++.target/powerpc/altivec-12.C
! 2cd2c60716d54d147d5c2d0537aa2441  gcc/testsuite/g++.target/powerpc/altivec-13.C
! a4e096ed0dab9358413f64b1ae0f3131  gcc/testsuite/g++.target/powerpc/altivec-14.C
! 3f6e7e18594ff429135bf8ea589ffab2  gcc/testsuite/g++.target/powerpc/altivec-15.C
! 44ff306fe2c3a37c20e6d609d95bf3a4  gcc/testsuite/g++.target/powerpc/altivec-16.C
! 0f5d326347940ec031d3fd5119be1160  gcc/testsuite/g++.target/powerpc/altivec-17.C
! 8388b9f21951bbfa78d96488ec44e03f  gcc/testsuite/g++.target/powerpc/altivec-18.C
! 6a9b08511f4acfbbde92fc75cf25a6bc  gcc/testsuite/g++.target/powerpc/altivec-2.C
! c8a44f6657e28782a0d9ee917a7e73a6  gcc/testsuite/g++.target/powerpc/altivec-3.C
! 04d5a6e0ef6cf6b17430721bd094fb87  gcc/testsuite/g++.target/powerpc/altivec-4.C
! 7068d53209da74ea98e7f05584f28362  gcc/testsuite/g++.target/powerpc/altivec-5.C
! e8f89178dc03b33f6a56ccc87a42db92  gcc/testsuite/g++.target/powerpc/altivec-6.C
! 8dc6c909b0579c6e8745bcda10fbf664  gcc/testsuite/g++.target/powerpc/altivec-7.C
! 3729abf89d9980d3b0950cc261a38820  gcc/testsuite/g++.target/powerpc/altivec-8.C
! eca9601265fbca8acc9aaff26f88f9f1  gcc/testsuite/g++.target/powerpc/altivec-9.C
! 7dc54f771a13e8640cbf1db9253b7fe1  gcc/testsuite/g++.target/powerpc/altivec-cell-1.C
! 492478d99aec611a136a0ebbd8b73db0  gcc/testsuite/g++.target/powerpc/altivec-cell-2.C
! 52b0b0261face2abf0f1751190d54d1d  gcc/testsuite/g++.target/powerpc/altivec-cell-3.C
! 29628f23515c39abd41a7827a9353c78  gcc/testsuite/g++.target/powerpc/altivec-cell-4.C
! ace1668590f04da8d87791b2b820e239  gcc/testsuite/g++.target/powerpc/altivec-cell-5.C
! 172c900209f03cd3eebf87a1a14ed373  gcc/testsuite/g++.target/powerpc/altivec-types-1.C
! 0329087cfb60fb1c40bc010bb96a9e26  gcc/testsuite/g++.target/powerpc/altivec-types-2.C
! 07dcb539e4083f18ecc3ba6a00a64cc4  gcc/testsuite/g++.target/powerpc/altivec-types-3.C
! 672bbca6e5a2428df4bd9349a317ae28  gcc/testsuite/g++.target/powerpc/altivec-types-4.C
! e70f88144abfc6a69a1241301a9b5e68  gcc/testsuite/g++.target/powerpc/const2.C
! bd1c35be302338df14b1aa330813797d  gcc/testsuite/g++.target/powerpc/darwin-minversion-1.C
! 47b35306d5dd665c6e6a343068bc3e24  gcc/testsuite/g++.target/powerpc/powerpc.exp
! bafc15005abdfe9131f6074efde175eb  gcc/testsuite/g++.target/powerpc/ppc64-sighandle-cr.C
! bac7601eaf931ebd7c595a2dc9672d64  gcc/testsuite/g++.target/powerpc/pr102024.C
  63b698681e4a076eb88feccb3e6373df  gcc/testsuite/g++.target/powerpc/pr94707-1.C
  75c93ba90b3ca18a6d5c5264e2816651  gcc/testsuite/g++.target/powerpc/pr94707-2.C
  a63f2ade84bc38838f3986dfc4bc9d85  gcc/testsuite/g++.target/powerpc/pr94707-3.C
*************** e1ba72e4820ed6fee0a19c482579539a  gcc/te
*** 29654,29659 ****
--- 30707,30717 ----
  a71a068de2c137d6ff37cfba20e45e06  gcc/testsuite/g++.target/powerpc/pr97947.C
  4aa850893daf75099b810c7d79530d83  gcc/testsuite/g++.target/powerpc/pr99041.C
  ec9d88502adf58241b652d1155cafc87  gcc/testsuite/g++.target/powerpc/pr99842.C
+ 7b5177c75ebae506d562d994be186761  gcc/testsuite/g++.target/powerpc/simd-4.C
+ 7bbbffa771c48a85ca22cc69554f7cc4  gcc/testsuite/g++.target/powerpc/simd-5.C
+ dc88c4a16670b88873deaa496d62f7e0  gcc/testsuite/g++.target/powerpc/spu2vmx-1.C
+ d524c0f12362d29431b637fe039b54af  gcc/testsuite/g++.target/powerpc/uncaught3.C
+ 36d64226b0cf06f34f4cc117335fae5d  gcc/testsuite/g++.target/powerpc/undef-bool-1.C
  fb915623fe5d0c1208c53c6de33e722a  gcc/testsuite/g++.target/powerpc/undef-bool-3.C
  84541f8edc35b61b62256dbd71b731b8  gcc/testsuite/g++.target/riscv/call-with-empty-struct-float.C
  0224a15f72de72af47e3eeb572c2d4eb  gcc/testsuite/g++.target/riscv/call-with-empty-struct-int.C
*************** fb915623fe5d0c1208c53c6de33e722a  gcc/te
*** 29661,29678 ****
  bda24fd764e95be6398892d48adf8be7  gcc/testsuite/g++.target/riscv/frflags.C
  4c45e102d6dd19ee08a476904b64542d  gcc/testsuite/g++.target/riscv/pr96759.C
  ac37e529bda1269045c3681cc4b425dd  gcc/testsuite/g++.target/riscv/pr97682.C
! 27530d4b7acf9021544916f3300ffbe1  gcc/testsuite/g++.target/riscv/riscv.exp
  74f02d12b4213817c3460e1eebfa9eae  gcc/testsuite/g++.target/s390/mi-thunk.C
  93b786c04aacd9a92606e85c55410461  gcc/testsuite/g++.target/s390/pr100281-1.C
  4b5a44a1819e9404a2b1305798c19846  gcc/testsuite/g++.target/s390/pr100281-2.C
  63c9cacf807bdee09a1606a202373f30  gcc/testsuite/g++.target/s390/pr94704-1.C
  f536562eba9a9954ace3a616ac52f438  gcc/testsuite/g++.target/s390/pr94704-2.C
  673a3b45283bd1b872f1b198781a14a3  gcc/testsuite/g++.target/s390/pr94704-3.C
  0a3c74a94606c9870a40fec1d0577aa8  gcc/testsuite/g++.target/s390/pr94704-4.C
  c0aa169f53b6c831c9c42b449fec63b6  gcc/testsuite/g++.target/s390/pr98722.C
! 182cb3ea97d85a56bc3010b65ebcb2a0  gcc/testsuite/g++.target/s390/s390.exp
  f53fd3b921a5138fb5d1fa0708eecb01  gcc/testsuite/g++.target/xtensa/pr95571.C
! 3c06ffa92768f174ce56001fc4b33e43  gcc/testsuite/g++.target/xtensa/xtensa.exp
  ab411a7e60cfec57473a2cab3ecc3197  gcc/testsuite/gcc.c-torture/ChangeLog.0
  84740fd4194274c1fbddfa5575623a40  gcc/testsuite/gcc.c-torture/compat/strct-layout.c
  3bb9d56b7cd137b146d286534c43ff8c  gcc/testsuite/gcc.c-torture/compat/struct-align.c
--- 30719,30742 ----
  bda24fd764e95be6398892d48adf8be7  gcc/testsuite/g++.target/riscv/frflags.C
  4c45e102d6dd19ee08a476904b64542d  gcc/testsuite/g++.target/riscv/pr96759.C
  ac37e529bda1269045c3681cc4b425dd  gcc/testsuite/g++.target/riscv/pr97682.C
! 80ce8b9351d212eeffc9d9ea6cfef75a  gcc/testsuite/g++.target/riscv/riscv.exp
  74f02d12b4213817c3460e1eebfa9eae  gcc/testsuite/g++.target/s390/mi-thunk.C
  93b786c04aacd9a92606e85c55410461  gcc/testsuite/g++.target/s390/pr100281-1.C
  4b5a44a1819e9404a2b1305798c19846  gcc/testsuite/g++.target/s390/pr100281-2.C
+ 63295459a56a4b00261e4ccbe8a56004  gcc/testsuite/g++.target/s390/pr102024-1.C
+ 8ca6bd9e1369172583402612ca9bfcb9  gcc/testsuite/g++.target/s390/pr102024-2.C
+ 1a6cd1b4df3725508e8dd8909473c68a  gcc/testsuite/g++.target/s390/pr102024-3.C
+ 1f98b1d1757ebed2e4df3c91f91846f5  gcc/testsuite/g++.target/s390/pr102024-4.C
+ f0a679d402cd83e81a6efa4bbb02d02b  gcc/testsuite/g++.target/s390/pr102024-5.C
+ f65e23ee2638d7bc7c063a2f41350d9c  gcc/testsuite/g++.target/s390/pr102024-6.C
  63c9cacf807bdee09a1606a202373f30  gcc/testsuite/g++.target/s390/pr94704-1.C
  f536562eba9a9954ace3a616ac52f438  gcc/testsuite/g++.target/s390/pr94704-2.C
  673a3b45283bd1b872f1b198781a14a3  gcc/testsuite/g++.target/s390/pr94704-3.C
  0a3c74a94606c9870a40fec1d0577aa8  gcc/testsuite/g++.target/s390/pr94704-4.C
  c0aa169f53b6c831c9c42b449fec63b6  gcc/testsuite/g++.target/s390/pr98722.C
! b69988978fc7f84355c6d0cb081f2379  gcc/testsuite/g++.target/s390/s390.exp
  f53fd3b921a5138fb5d1fa0708eecb01  gcc/testsuite/g++.target/xtensa/pr95571.C
! 65e009123581709547b492e32b41fd98  gcc/testsuite/g++.target/xtensa/xtensa.exp
  ab411a7e60cfec57473a2cab3ecc3197  gcc/testsuite/gcc.c-torture/ChangeLog.0
  84740fd4194274c1fbddfa5575623a40  gcc/testsuite/gcc.c-torture/compat/strct-layout.c
  3bb9d56b7cd137b146d286534c43ff8c  gcc/testsuite/gcc.c-torture/compat/struct-align.c
*************** ab411a7e60cfec57473a2cab3ecc3197  gcc/te
*** 29681,29686 ****
--- 30745,30751 ----
  33d61e2f2d5a36044962db710bce81db  gcc/testsuite/gcc.c-torture/compat/struct-ic.c
  b1a7d4218caf9bcc557077d4aa43e94e  gcc/testsuite/gcc.c-torture/compat/struct-ii.c
  426584adc31397d8ab72547a8b07a853  gcc/testsuite/gcc.c-torture/compat/struct-ret-1.c
+ 3a8c5ed2460ef2f4104262599246b808  gcc/testsuite/gcc.c-torture/compile/103818.c
  020eb2921d5899a38ea379f354f54233  gcc/testsuite/gcc.c-torture/compile/20000105-1.c
  9851010109199ab205947b27c7a81ab1  gcc/testsuite/gcc.c-torture/compile/20000105-2.c
  ea95b5ed026fb753ad9419303d80eff5  gcc/testsuite/gcc.c-torture/compile/20000120-1.c
*************** a4174c863a6566eb8cb4be521a0ee3fb  gcc/te
*** 29881,29886 ****
--- 30946,30952 ----
  73bf3aed397c6b3c6218590a3f60d762  gcc/testsuite/gcc.c-torture/compile/20030330-1.c
  6948cd26b8e708cff8d37323f927fb52  gcc/testsuite/gcc.c-torture/compile/20030331-1.c
  17ed95f22c1255f726d1d0145b6fac72  gcc/testsuite/gcc.c-torture/compile/20030405-1.c
+ 6ab0d927aa44fcf2fc7edc3dfada840c  gcc/testsuite/gcc.c-torture/compile/20030405-2.c
  c4fd77091527f2145295022bba574a5b  gcc/testsuite/gcc.c-torture/compile/20030410-1.c
  e60ee81e19d3fe57e3a4a4b1abd5ea23  gcc/testsuite/gcc.c-torture/compile/20030415-1.c
  4de5a5a4ec4c579a1da05a0040fa348f  gcc/testsuite/gcc.c-torture/compile/20030416-1.c
*************** dd14cd7290887c4bcd0fcc90ee4c855d  gcc/te
*** 29948,29953 ****
--- 31014,31020 ----
  2d5941b36334df2b864ed79bae041a59  gcc/testsuite/gcc.c-torture/compile/20040303-1.c
  311d1a38be397120a5d70598406b2391  gcc/testsuite/gcc.c-torture/compile/20040303-2.c
  d01d13e580ce843d84477175e781c25a  gcc/testsuite/gcc.c-torture/compile/20040304-1.c
+ 4649fd5630e4b0a4c70d02c348037298  gcc/testsuite/gcc.c-torture/compile/20040304-2.c
  529bf74dd8bb764a7ae17c7f8b8e2243  gcc/testsuite/gcc.c-torture/compile/20040309-1.c
  84d42595b81c8ad79b1bc744b20b3874  gcc/testsuite/gcc.c-torture/compile/20040310-1.c
  fd64b182c5da4d9893626a607ed57ab3  gcc/testsuite/gcc.c-torture/compile/20040317-1.c
*************** f7267d866e2c9994d6790ee48c297305  gcc/te
*** 29986,29992 ****
  c6449a8923abf15931148da535a307e5  gcc/testsuite/gcc.c-torture/compile/20041119-1.c
  a65ce16daad930d2b2cb353a1b698c99  gcc/testsuite/gcc.c-torture/compile/20041211-1.c
  3ba7d89e5d94393d65afef34e6a8d19b  gcc/testsuite/gcc.c-torture/compile/20050105-1.c
- 8e2d936b757c204110f8779a96c5e5ca  gcc/testsuite/gcc.c-torture/compile/20050113-1.c
  d071b846a7b8e965e0599e525e8f58d0  gcc/testsuite/gcc.c-torture/compile/20050119-1.c
  9f413b9f38f6d75b7be73a79a7045db2  gcc/testsuite/gcc.c-torture/compile/20050122-1.c
  a5c3073dfd44b5eb8205071b3da335e3  gcc/testsuite/gcc.c-torture/compile/20050122-2.c
--- 31053,31058 ----
*************** aab2cdafbd3ed9c8764dc795ce65d92d  gcc/te
*** 30216,30225 ****
  016341077feda00aeee74cdc972c5750  gcc/testsuite/gcc.c-torture/compile/920821-2.c
  96517ca597624b0cb757b55166ac4182  gcc/testsuite/gcc.c-torture/compile/920825-1.c
  2695c68c561079bf663a3d750705bade  gcc/testsuite/gcc.c-torture/compile/920825-2.c
! 193ae37b863754a7e5c36fa6c323ec98  gcc/testsuite/gcc.c-torture/compile/920826-1.c
  7f0456d608a560faf35105b0c09c3236  gcc/testsuite/gcc.c-torture/compile/920828-1.c
  caa1a01ede4333d698bef680a5d041ef  gcc/testsuite/gcc.c-torture/compile/920829-1.c
! 4f6411ec998a18ed4b75cee1c11b8085  gcc/testsuite/gcc.c-torture/compile/920831-1.c
  7516f511f79af2ea564813bc97908657  gcc/testsuite/gcc.c-torture/compile/920902-1.c
  dcd35de0f89d9f5f78e924e63b2bd56e  gcc/testsuite/gcc.c-torture/compile/920909-1.c
  83d6ce63e1cc029ae51730cf57e67162  gcc/testsuite/gcc.c-torture/compile/920917-1.c
--- 31282,31291 ----
  016341077feda00aeee74cdc972c5750  gcc/testsuite/gcc.c-torture/compile/920821-2.c
  96517ca597624b0cb757b55166ac4182  gcc/testsuite/gcc.c-torture/compile/920825-1.c
  2695c68c561079bf663a3d750705bade  gcc/testsuite/gcc.c-torture/compile/920825-2.c
! 56190d8f81c77bd5e67bf0423c4398fe  gcc/testsuite/gcc.c-torture/compile/920826-1.c
  7f0456d608a560faf35105b0c09c3236  gcc/testsuite/gcc.c-torture/compile/920828-1.c
  caa1a01ede4333d698bef680a5d041ef  gcc/testsuite/gcc.c-torture/compile/920829-1.c
! 52869a998d121da36c8f3bb3ec2ed8f9  gcc/testsuite/gcc.c-torture/compile/920831-1.c
  7516f511f79af2ea564813bc97908657  gcc/testsuite/gcc.c-torture/compile/920902-1.c
  dcd35de0f89d9f5f78e924e63b2bd56e  gcc/testsuite/gcc.c-torture/compile/920909-1.c
  83d6ce63e1cc029ae51730cf57e67162  gcc/testsuite/gcc.c-torture/compile/920917-1.c
*************** cbe67a4212b7d85b023f62848033fa31  gcc/te
*** 30459,30466 ****
  1dc09506975eee8e6b4451c77c2ca0f5  gcc/testsuite/gcc.c-torture/compile/asmgoto-3.c
  44775d2c2c8031eaffd51797729f6b78  gcc/testsuite/gcc.c-torture/compile/asmgoto-4.c
  22f5be5aa586df70b0fd5248cd64def3  gcc/testsuite/gcc.c-torture/compile/asmgoto-5.c
! 0bbe13cb510a94a6ade32456423b2799  gcc/testsuite/gcc.c-torture/compile/attr-retain-1.c
! ac0d75a26dbd7b82fa02ab4f5c265b75  gcc/testsuite/gcc.c-torture/compile/attr-retain-2.c
  16c9fd8e3aabf68056e65c3fde97fd4c  gcc/testsuite/gcc.c-torture/compile/attr-used-retain-1.c
  e9afcf78aba1d501c2099075165c0f26  gcc/testsuite/gcc.c-torture/compile/attr-used-retain-2.c
  4f3a6a3945ac2d0657452e368e414b3b  gcc/testsuite/gcc.c-torture/compile/b.c
--- 31525,31534 ----
  1dc09506975eee8e6b4451c77c2ca0f5  gcc/testsuite/gcc.c-torture/compile/asmgoto-3.c
  44775d2c2c8031eaffd51797729f6b78  gcc/testsuite/gcc.c-torture/compile/asmgoto-4.c
  22f5be5aa586df70b0fd5248cd64def3  gcc/testsuite/gcc.c-torture/compile/asmgoto-5.c
! d8d6d3a3bdc75e33ad9224aa3ca20839  gcc/testsuite/gcc.c-torture/compile/attr-complex-method-2.c
! 6cceb06a530ca6cf611287cae72b0437  gcc/testsuite/gcc.c-torture/compile/attr-complex-method.c
! 518904c535699cbcecc96482c0284cbe  gcc/testsuite/gcc.c-torture/compile/attr-retain-1.c
! 5a438692e9c3f90679360b39bf72aa6d  gcc/testsuite/gcc.c-torture/compile/attr-retain-2.c
  16c9fd8e3aabf68056e65c3fde97fd4c  gcc/testsuite/gcc.c-torture/compile/attr-used-retain-1.c
  e9afcf78aba1d501c2099075165c0f26  gcc/testsuite/gcc.c-torture/compile/attr-used-retain-2.c
  4f3a6a3945ac2d0657452e368e414b3b  gcc/testsuite/gcc.c-torture/compile/b.c
*************** f5766202f628b43d0fac0910adc0eecb  gcc/te
*** 30514,30520 ****
  2db408a5885d812f5975ff6d22d8deb5  gcc/testsuite/gcc.c-torture/compile/cn1.c
  6bc0454ef3b51ee1abf897438c9d20f8  gcc/testsuite/gcc.c-torture/compile/comb.c
  646c27d881cf11bdfb63a423ffd3b604  gcc/testsuite/gcc.c-torture/compile/combine-hang.c
! 451f766d8a3473c5d2e6fb8c4e975633  gcc/testsuite/gcc.c-torture/compile/compile.exp
  a87e64aae03ac41e010753e916d8ee6d  gcc/testsuite/gcc.c-torture/compile/complex-1.c
  9d993598ddcfa7b7cd841fe5a114cec2  gcc/testsuite/gcc.c-torture/compile/complex-2.c
  e78988c1feb46a12813cd47feaaab89f  gcc/testsuite/gcc.c-torture/compile/complex-3.c
--- 31582,31588 ----
  2db408a5885d812f5975ff6d22d8deb5  gcc/testsuite/gcc.c-torture/compile/cn1.c
  6bc0454ef3b51ee1abf897438c9d20f8  gcc/testsuite/gcc.c-torture/compile/comb.c
  646c27d881cf11bdfb63a423ffd3b604  gcc/testsuite/gcc.c-torture/compile/combine-hang.c
! 5b3d08df99700f8987331faef7e3eec7  gcc/testsuite/gcc.c-torture/compile/compile.exp
  a87e64aae03ac41e010753e916d8ee6d  gcc/testsuite/gcc.c-torture/compile/complex-1.c
  9d993598ddcfa7b7cd841fe5a114cec2  gcc/testsuite/gcc.c-torture/compile/complex-2.c
  e78988c1feb46a12813cd47feaaab89f  gcc/testsuite/gcc.c-torture/compile/complex-3.c
*************** e89355b99660c53d3dac89eba0ac8986  gcc/te
*** 30678,30688 ****
  048ad13954512f77d283379cc894eaed  gcc/testsuite/gcc.c-torture/compile/poor.c
  5dd01a3a30ba2b97a934273ca5fe3170  gcc/testsuite/gcc.c-torture/compile/pp.c
  5e2710168af4ad47d5838cfdfc0a5ecd  gcc/testsuite/gcc.c-torture/compile/pr100106.c
  ede20faf9b203e25b39b7032970f58be  gcc/testsuite/gcc.c-torture/compile/pr100305.c
  dcaa1bc6d2f365241f63a018eb986a02  gcc/testsuite/gcc.c-torture/compile/pr100316.c
! 39dff9806811d8b2c82afb7f1bb80e27  gcc/testsuite/gcc.c-torture/compile/pr100576.c
  9c461bedf4ba5d689841294e9c5464f6  gcc/testsuite/gcc.c-torture/compile/pr101562.c
  6d13d2354182ca3dc50d8f4d6d5ed5ab  gcc/testsuite/gcc.c-torture/compile/pr103813.c
  33c7141fcf5b1add3ddd2be0100f1f0d  gcc/testsuite/gcc.c-torture/compile/pr12517.c
  ec16b12ab11c499bf321be18ea59da33  gcc/testsuite/gcc.c-torture/compile/pr12578.c
  86f3d5cf87d24e97aa663b79f2d0ac5d  gcc/testsuite/gcc.c-torture/compile/pr12899.c
--- 31746,31776 ----
  048ad13954512f77d283379cc894eaed  gcc/testsuite/gcc.c-torture/compile/poor.c
  5dd01a3a30ba2b97a934273ca5fe3170  gcc/testsuite/gcc.c-torture/compile/pp.c
  5e2710168af4ad47d5838cfdfc0a5ecd  gcc/testsuite/gcc.c-torture/compile/pr100106.c
+ a542de03bbd3e4126e78e5767194e993  gcc/testsuite/gcc.c-torture/compile/pr100241-1.c
+ 9dcc503ae55f6c0f214640860f3e5ff3  gcc/testsuite/gcc.c-torture/compile/pr100278.c
  ede20faf9b203e25b39b7032970f58be  gcc/testsuite/gcc.c-torture/compile/pr100305.c
  dcaa1bc6d2f365241f63a018eb986a02  gcc/testsuite/gcc.c-torture/compile/pr100316.c
! 358e0560b782adecef1a220270900ed2  gcc/testsuite/gcc.c-torture/compile/pr100576.c
! e97a737f0299f3c9f1da7d1ce3711453  gcc/testsuite/gcc.c-torture/compile/pr101159.c
! 13e7494d151b9cab31c591acca4bb537  gcc/testsuite/gcc.c-torture/compile/pr101189.c
! 8b2f7aa49d9179d508ec51fb1ed95f39  gcc/testsuite/gcc.c-torture/compile/pr101437.c
! fa3f701afc63bd87bf60ff4644cd5f8b  gcc/testsuite/gcc.c-torture/compile/pr10153-1.c
! b0ed36604383c5259a08f538e09226d0  gcc/testsuite/gcc.c-torture/compile/pr10153-2.c
  9c461bedf4ba5d689841294e9c5464f6  gcc/testsuite/gcc.c-torture/compile/pr101562.c
+ 67632467529ede8644ffdbc34cc973da  gcc/testsuite/gcc.c-torture/compile/pr101642.c
+ a2656a59d00f50e3a24dc4e71bfb3973  gcc/testsuite/gcc.c-torture/compile/pr101941-1.c
+ 7a371c7f1b96247a3031f9675ddafbe0  gcc/testsuite/gcc.c-torture/compile/pr102645.c
+ 591c66784ef966bccceddcd49fbc4005  gcc/testsuite/gcc.c-torture/compile/pr103288-1.c
+ 9f778fd57b066f50140e6cb8717835e3  gcc/testsuite/gcc.c-torture/compile/pr103314-1.c
+ 9d0ef099ebd99953796eaed57e77fedb  gcc/testsuite/gcc.c-torture/compile/pr103317-1.c
+ 516dbea7197792a04ec7f907b76d59db  gcc/testsuite/gcc.c-torture/compile/pr103376.c
+ 98dfd82b902bb1a40821bf1c96727774  gcc/testsuite/gcc.c-torture/compile/pr103513.c
+ 8b249aa4baa43999dc027c800c2c82f2  gcc/testsuite/gcc.c-torture/compile/pr103682.c
  6d13d2354182ca3dc50d8f4d6d5ed5ab  gcc/testsuite/gcc.c-torture/compile/pr103813.c
+ 4a6f867d2a09bace8b7a324f6a4f5237  gcc/testsuite/gcc.c-torture/compile/pr104327.c
+ 43abe0671a6ea621a4ca89fda41e49b8  gcc/testsuite/gcc.c-torture/compile/pr104499.c
+ b8c09513cab59ca8f22d38e515f50fa8  gcc/testsuite/gcc.c-torture/compile/pr105234.c
+ 112c17f5638bc2cf5c04c9e917943218  gcc/testsuite/gcc.c-torture/compile/pr105247.c
  33c7141fcf5b1add3ddd2be0100f1f0d  gcc/testsuite/gcc.c-torture/compile/pr12517.c
  ec16b12ab11c499bf321be18ea59da33  gcc/testsuite/gcc.c-torture/compile/pr12578.c
  86f3d5cf87d24e97aa663b79f2d0ac5d  gcc/testsuite/gcc.c-torture/compile/pr12899.c
*************** e534cfe0451d578c8bd575b6c72d4b3f  gcc/te
*** 30776,30782 ****
  4a29668fb24ae53cf0bea8d0de6d2bfa  gcc/testsuite/gcc.c-torture/compile/pr27373.c
  b25244c37bcc4b8ca2185de9d14fceb5  gcc/testsuite/gcc.c-torture/compile/pr27528.c
  2e6835d1b25845717344c8965a30d964  gcc/testsuite/gcc.c-torture/compile/pr27571.c
! eb864b214a6144a514e1c21b41db8a7b  gcc/testsuite/gcc.c-torture/compile/pr27863.c
  7d663a0db6ea8483f6d5488cfed6438c  gcc/testsuite/gcc.c-torture/compile/pr27889.c
  97fb7aafd0d6e9b130a3cadca58c2f08  gcc/testsuite/gcc.c-torture/compile/pr27907.c
  11a70afa3b664836b9d111964f18874a  gcc/testsuite/gcc.c-torture/compile/pr28489.c
--- 31864,31870 ----
  4a29668fb24ae53cf0bea8d0de6d2bfa  gcc/testsuite/gcc.c-torture/compile/pr27373.c
  b25244c37bcc4b8ca2185de9d14fceb5  gcc/testsuite/gcc.c-torture/compile/pr27528.c
  2e6835d1b25845717344c8965a30d964  gcc/testsuite/gcc.c-torture/compile/pr27571.c
! ff77ca797c969b4733f204f4ea1a83b5  gcc/testsuite/gcc.c-torture/compile/pr27863.c
  7d663a0db6ea8483f6d5488cfed6438c  gcc/testsuite/gcc.c-torture/compile/pr27889.c
  97fb7aafd0d6e9b130a3cadca58c2f08  gcc/testsuite/gcc.c-torture/compile/pr27907.c
  11a70afa3b664836b9d111964f18874a  gcc/testsuite/gcc.c-torture/compile/pr28489.c
*************** c49cf1853620ae71c65055c74c2e446b  gcc/te
*** 31216,31222 ****
  ecd86b2ec3c6e99f8c9357249b8569eb  gcc/testsuite/gcc.c-torture/compile/pr60655-2.c
  0d246b57fcfef0380c5ac5b0dccf1f50  gcc/testsuite/gcc.c-torture/compile/pr60818.c
  d47d48bc5d0479f66961edb27b343038  gcc/testsuite/gcc.c-torture/compile/pr61042.c
! 536212210d5a7e3242586a0b99ad2fd0  gcc/testsuite/gcc.c-torture/compile/pr61159.c
  9463b77ac06a55b7d4a912e2b3389cc1  gcc/testsuite/gcc.c-torture/compile/pr61222-1.c
  e2006840cb2c2f8c11c42c49fd948263  gcc/testsuite/gcc.c-torture/compile/pr61222-2.c
  eb9a44bf10d9af818d3d8df7abc434ba  gcc/testsuite/gcc.c-torture/compile/pr61684.c
--- 32304,32310 ----
  ecd86b2ec3c6e99f8c9357249b8569eb  gcc/testsuite/gcc.c-torture/compile/pr60655-2.c
  0d246b57fcfef0380c5ac5b0dccf1f50  gcc/testsuite/gcc.c-torture/compile/pr60818.c
  d47d48bc5d0479f66961edb27b343038  gcc/testsuite/gcc.c-torture/compile/pr61042.c
! ae9b2ae18f182bfb1326d208f6011903  gcc/testsuite/gcc.c-torture/compile/pr61159.c
  9463b77ac06a55b7d4a912e2b3389cc1  gcc/testsuite/gcc.c-torture/compile/pr61222-1.c
  e2006840cb2c2f8c11c42c49fd948263  gcc/testsuite/gcc.c-torture/compile/pr61222-2.c
  eb9a44bf10d9af818d3d8df7abc434ba  gcc/testsuite/gcc.c-torture/compile/pr61684.c
*************** aac9fa1e0a8f32d26d0b91a6ce4f86c0  gcc/te
*** 31256,31262 ****
  579adea75f6aa056952979b5e14a9b09  gcc/testsuite/gcc.c-torture/compile/pr69989-2.c
  e0d6dae3e4ec80a7af59c5a2351d64cd  gcc/testsuite/gcc.c-torture/compile/pr69999.c
  82152226977cc4ece855420e47e35025  gcc/testsuite/gcc.c-torture/compile/pr70061.c
! 3ea2ba133eee452f9b1e3144d3670655  gcc/testsuite/gcc.c-torture/compile/pr70190.c
  99f992fda89309a8306abbf796e2b398  gcc/testsuite/gcc.c-torture/compile/pr70199.c
  3432615f7bad11bc141a46d45047d51c  gcc/testsuite/gcc.c-torture/compile/pr70240.c
  1906f2e6e6b20628e9f16d77bc066d28  gcc/testsuite/gcc.c-torture/compile/pr70263-1.c
--- 32344,32350 ----
  579adea75f6aa056952979b5e14a9b09  gcc/testsuite/gcc.c-torture/compile/pr69989-2.c
  e0d6dae3e4ec80a7af59c5a2351d64cd  gcc/testsuite/gcc.c-torture/compile/pr69999.c
  82152226977cc4ece855420e47e35025  gcc/testsuite/gcc.c-torture/compile/pr70061.c
! 73855c5427853707e766118d543e5a2f  gcc/testsuite/gcc.c-torture/compile/pr70190.c
  99f992fda89309a8306abbf796e2b398  gcc/testsuite/gcc.c-torture/compile/pr70199.c
  3432615f7bad11bc141a46d45047d51c  gcc/testsuite/gcc.c-torture/compile/pr70240.c
  1906f2e6e6b20628e9f16d77bc066d28  gcc/testsuite/gcc.c-torture/compile/pr70263-1.c
*************** f74c5382e840fc04557f9406abbf7cc8  gcc/te
*** 31334,31340 ****
  7ae3102a4192dfb8687bc9e9b496ca68  gcc/testsuite/gcc.c-torture/compile/pr83222.c
  e7f459c4af5a8e616ac0225605a4c7c0  gcc/testsuite/gcc.c-torture/compile/pr83448.c
  d4ec17d192138c66acbc94ebc3f3e06d  gcc/testsuite/gcc.c-torture/compile/pr83487.c
! 58495ddabacd76c55042260d8e4f4962  gcc/testsuite/gcc.c-torture/compile/pr83510.c
  285fb13f0a67d5136a5f83631ee41eef  gcc/testsuite/gcc.c-torture/compile/pr83547.c
  722068613484abb5172f5eb021d06c1d  gcc/testsuite/gcc.c-torture/compile/pr83575.c
  24c5103483543644e127eda1d695ed87  gcc/testsuite/gcc.c-torture/compile/pr84111.c
--- 32422,32428 ----
  7ae3102a4192dfb8687bc9e9b496ca68  gcc/testsuite/gcc.c-torture/compile/pr83222.c
  e7f459c4af5a8e616ac0225605a4c7c0  gcc/testsuite/gcc.c-torture/compile/pr83448.c
  d4ec17d192138c66acbc94ebc3f3e06d  gcc/testsuite/gcc.c-torture/compile/pr83487.c
! b19a849e34a33352c83a0c6f5e6b9e64  gcc/testsuite/gcc.c-torture/compile/pr83510.c
  285fb13f0a67d5136a5f83631ee41eef  gcc/testsuite/gcc.c-torture/compile/pr83547.c
  722068613484abb5172f5eb021d06c1d  gcc/testsuite/gcc.c-torture/compile/pr83575.c
  24c5103483543644e127eda1d695ed87  gcc/testsuite/gcc.c-torture/compile/pr84111.c
*************** b592aab14164964644385997ee799b46  gcc/te
*** 31413,31419 ****
  9877434a52aaa17b1ab89487f9497639  gcc/testsuite/gcc.c-torture/compile/pr97144.c
  c9ed8216d07e31f7a802eeba042e1179  gcc/testsuite/gcc.c-torture/compile/pr97205.c
  cc5e48690516796c192d2b020ebc6353  gcc/testsuite/gcc.c-torture/compile/pr97243.c
! e672533f0d4a6792ad60114dedbca802  gcc/testsuite/gcc.c-torture/compile/pr97576.c
  c78cceed0dd8426d7c1d6f399fa3390e  gcc/testsuite/gcc.c-torture/compile/pr97578.c
  835f7a3d701aaaa1a2985c869be63315  gcc/testsuite/gcc.c-torture/compile/pr97979.c
  1ecd4c9d478fb14673cceb746a00bead  gcc/testsuite/gcc.c-torture/compile/pr98087.c
--- 32501,32507 ----
  9877434a52aaa17b1ab89487f9497639  gcc/testsuite/gcc.c-torture/compile/pr97144.c
  c9ed8216d07e31f7a802eeba042e1179  gcc/testsuite/gcc.c-torture/compile/pr97205.c
  cc5e48690516796c192d2b020ebc6353  gcc/testsuite/gcc.c-torture/compile/pr97243.c
! d94e8dba114bf6c1428ecd7c7475f51e  gcc/testsuite/gcc.c-torture/compile/pr97576.c
  c78cceed0dd8426d7c1d6f399fa3390e  gcc/testsuite/gcc.c-torture/compile/pr97578.c
  835f7a3d701aaaa1a2985c869be63315  gcc/testsuite/gcc.c-torture/compile/pr97979.c
  1ecd4c9d478fb14673cceb746a00bead  gcc/testsuite/gcc.c-torture/compile/pr98087.c
*************** cd903132649fbefa350b8179bddd0078  gcc/te
*** 31428,31433 ****
--- 32516,32522 ----
  96a2bedeedcefc8923dc44147661604e  gcc/testsuite/gcc.c-torture/compile/pr99225.c
  11bf664a070ad544ff6eddf359ebb9d0  gcc/testsuite/gcc.c-torture/compile/pr99324.c
  7e408a9bcbb29363eda9fb015d8d84f3  gcc/testsuite/gcc.c-torture/compile/pr99647.c
+ f817865c153b0e9e863b52705bdba23c  gcc/testsuite/gcc.c-torture/compile/pr99787-1.c
  e69d829e7459addd09ce31c5321dc0c0  gcc/testsuite/gcc.c-torture/compile/pr99822.c
  c5c13bdc8c7ab97f002934f003e92b63  gcc/testsuite/gcc.c-torture/compile/pret-arg.c
  554bb1e8a9da058c129438ee67eeacaa  gcc/testsuite/gcc.c-torture/compile/pta-1.c
*************** af6534ad23d8784f5133c8ae82991810  gcc/te
*** 31476,31481 ****
--- 32565,32571 ----
  3f1d40fe535905c095668255dd94dbdf  gcc/testsuite/gcc.c-torture/compile/speed.c
  68c4756a5e6657f7df9a8a02d6dda55e  gcc/testsuite/gcc.c-torture/compile/sra-1.c
  1fb17fb58efa11a8c2d892a6946321bc  gcc/testsuite/gcc.c-torture/compile/ssa-pre-1.c
+ 4244c9cfe127bb336d948adca93fc3fc  gcc/testsuite/gcc.c-torture/compile/ssa-unused-1.c
  5a331624fdc7e78c66ac23a5954db625  gcc/testsuite/gcc.c-torture/compile/stack-check-1.c
  49fbb3c50078b64b22ced2e9db241130  gcc/testsuite/gcc.c-torture/compile/statement-expression-1.c
  3984f03f2913b4d4313709d27b57c803  gcc/testsuite/gcc.c-torture/compile/stor.c
*************** ece957bd2db1749c32578bdb5e0c533d  gcc/te
*** 31525,31530 ****
--- 32615,32621 ----
  950dd480879e49e520f75027bfd6c33e  gcc/testsuite/gcc.c-torture/compile/vector-5.c
  39c80b120fd9223106e136841ab72011  gcc/testsuite/gcc.c-torture/compile/vector-6.c
  f22fa3d40420e1d3face4986ae537c69  gcc/testsuite/gcc.c-torture/compile/vector-align-1.c
+ 157b51d7ce9c15037387105cd05282b6  gcc/testsuite/gcc.c-torture/compile/vector-dup-1.c
  d15bacdeb3488c9844bef78c3669d147  gcc/testsuite/gcc.c-torture/compile/vla-const-1.c
  967fa88da6ed3bc1aed48cc1d0645240  gcc/testsuite/gcc.c-torture/compile/vla-const-2.c
  c5f3f4df6f7c679e7f264b10b16f1988  gcc/testsuite/gcc.c-torture/compile/volatile-1.c
*************** f746b5e58906596c57b6b818bd0784f7  gcc/te
*** 32180,32186 ****
  33df996a16d2eb2f60c3385480b3ff8e  gcc/testsuite/gcc.c-torture/execute/950612-1.c
  aeba387843a8fd72f9305e3abe4cfab6  gcc/testsuite/gcc.c-torture/execute/950621-1.c
  a7a30f18c1c18948a0c611579b4950e9  gcc/testsuite/gcc.c-torture/execute/950628-1.c
! add8f041efb9ef7d47ed7f3eb3ed4416  gcc/testsuite/gcc.c-torture/execute/950704-1.c
  a2d4942fa5a272c8916edff697ea8822  gcc/testsuite/gcc.c-torture/execute/950706-1.c
  f94e762bd2a0e456c1c55074078fad0a  gcc/testsuite/gcc.c-torture/execute/950710-1.c
  d937401d969e1facfeba411534a88f5a  gcc/testsuite/gcc.c-torture/execute/950714-1.c
--- 33271,33277 ----
  33df996a16d2eb2f60c3385480b3ff8e  gcc/testsuite/gcc.c-torture/execute/950612-1.c
  aeba387843a8fd72f9305e3abe4cfab6  gcc/testsuite/gcc.c-torture/execute/950621-1.c
  a7a30f18c1c18948a0c611579b4950e9  gcc/testsuite/gcc.c-torture/execute/950628-1.c
! 77504274d3f867fdd649113ccd313f35  gcc/testsuite/gcc.c-torture/execute/950704-1.c
  a2d4942fa5a272c8916edff697ea8822  gcc/testsuite/gcc.c-torture/execute/950706-1.c
  f94e762bd2a0e456c1c55074078fad0a  gcc/testsuite/gcc.c-torture/execute/950710-1.c
  d937401d969e1facfeba411534a88f5a  gcc/testsuite/gcc.c-torture/execute/950714-1.c
*************** ea5cc37862d9328e904262478ea2dfb1  gcc/te
*** 32309,32315 ****
  ee18345ed511ceff311552d973c6426f  gcc/testsuite/gcc.c-torture/execute/991227-1.c
  220ea595eb4fba31918096db7ae47ada  gcc/testsuite/gcc.c-torture/execute/991228-1.c
  50b7b403a3dd7a84e4b0576329f37247  gcc/testsuite/gcc.c-torture/execute/alias-1.c
! 09d5e97749a6a6fe93e84adc6daa059d  gcc/testsuite/gcc.c-torture/execute/alias-2.c
  ab29943fe82dfa750b41d94433d65a3f  gcc/testsuite/gcc.c-torture/execute/alias-3.c
  54f160fd36e3e44f683867a0f05bb036  gcc/testsuite/gcc.c-torture/execute/alias-4.c
  153f4cd8d14833813ddc813d134907a5  gcc/testsuite/gcc.c-torture/execute/alias-access-path-1.c
--- 33400,33406 ----
  ee18345ed511ceff311552d973c6426f  gcc/testsuite/gcc.c-torture/execute/991227-1.c
  220ea595eb4fba31918096db7ae47ada  gcc/testsuite/gcc.c-torture/execute/991228-1.c
  50b7b403a3dd7a84e4b0576329f37247  gcc/testsuite/gcc.c-torture/execute/alias-1.c
! 3c04a8a56d5c5c2eea89e9316d57decb  gcc/testsuite/gcc.c-torture/execute/alias-2.c
  ab29943fe82dfa750b41d94433d65a3f  gcc/testsuite/gcc.c-torture/execute/alias-3.c
  54f160fd36e3e44f683867a0f05bb036  gcc/testsuite/gcc.c-torture/execute/alias-4.c
  153f4cd8d14833813ddc813d134907a5  gcc/testsuite/gcc.c-torture/execute/alias-access-path-1.c
*************** caa74354806f94b1777d3d438547d909  gcc/te
*** 32364,32370 ****
  d7d9ce89ee3d3fe0e8938f62790f051e  gcc/testsuite/gcc.c-torture/execute/builtins/abs-2.c
  1dda6f7a5d9ce23a5db5f59c430ae29e  gcc/testsuite/gcc.c-torture/execute/builtins/abs-3-lib.c
  8784d3bd9b264b3c2abfb7b7ea25ccb6  gcc/testsuite/gcc.c-torture/execute/builtins/abs-3.c
! 710ac7a18a8cdc05723de6fd00da66ec  gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp
  82dc8c0cc07405b06eb5eee9b43cb713  gcc/testsuite/gcc.c-torture/execute/builtins/chk.h
  f36e146a2aececdc84d9199d53a363ec  gcc/testsuite/gcc.c-torture/execute/builtins/complex-1-lib.c
  8b5a662c0134cd00115a5866e1c0b6c9  gcc/testsuite/gcc.c-torture/execute/builtins/complex-1.c
--- 33455,33461 ----
  d7d9ce89ee3d3fe0e8938f62790f051e  gcc/testsuite/gcc.c-torture/execute/builtins/abs-2.c
  1dda6f7a5d9ce23a5db5f59c430ae29e  gcc/testsuite/gcc.c-torture/execute/builtins/abs-3-lib.c
  8784d3bd9b264b3c2abfb7b7ea25ccb6  gcc/testsuite/gcc.c-torture/execute/builtins/abs-3.c
! 149006d9fde9f36f54014a976468fd05  gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp
  82dc8c0cc07405b06eb5eee9b43cb713  gcc/testsuite/gcc.c-torture/execute/builtins/chk.h
  f36e146a2aececdc84d9199d53a363ec  gcc/testsuite/gcc.c-torture/execute/builtins/complex-1-lib.c
  8b5a662c0134cd00115a5866e1c0b6c9  gcc/testsuite/gcc.c-torture/execute/builtins/complex-1.c
*************** a2c6a368bc2b14728093f3e15b60bca2  gcc/te
*** 32377,32383 ****
  2ac6f3be9fb3e03f958363fe6feb5ddd  gcc/testsuite/gcc.c-torture/execute/builtins/lib/abs.c
  203feadf3b2ef38b39a672ad869b3593  gcc/testsuite/gcc.c-torture/execute/builtins/lib/bfill.c
  b8037fc112af35d75cbef5e2f265e838  gcc/testsuite/gcc.c-torture/execute/builtins/lib/bzero.c
! 666083381172446012bb17aa79a66318  gcc/testsuite/gcc.c-torture/execute/builtins/lib/chk.c
  1c0fc5ab61516586bd2ec29c8a19e68d  gcc/testsuite/gcc.c-torture/execute/builtins/lib/fprintf.c
  3238aa4caa71aef23dcc1833234b1bd8  gcc/testsuite/gcc.c-torture/execute/builtins/lib/main.c
  247424fd02a4cce244c444ce10c36c06  gcc/testsuite/gcc.c-torture/execute/builtins/lib/memchr.c
--- 33468,33474 ----
  2ac6f3be9fb3e03f958363fe6feb5ddd  gcc/testsuite/gcc.c-torture/execute/builtins/lib/abs.c
  203feadf3b2ef38b39a672ad869b3593  gcc/testsuite/gcc.c-torture/execute/builtins/lib/bfill.c
  b8037fc112af35d75cbef5e2f265e838  gcc/testsuite/gcc.c-torture/execute/builtins/lib/bzero.c
! 6bc0f24320e5a407205ec2036abe6eeb  gcc/testsuite/gcc.c-torture/execute/builtins/lib/chk.c
  1c0fc5ab61516586bd2ec29c8a19e68d  gcc/testsuite/gcc.c-torture/execute/builtins/lib/fprintf.c
  3238aa4caa71aef23dcc1833234b1bd8  gcc/testsuite/gcc.c-torture/execute/builtins/lib/main.c
  247424fd02a4cce244c444ce10c36c06  gcc/testsuite/gcc.c-torture/execute/builtins/lib/memchr.c
*************** e329c7fca0108570e81273f5b62d90e0  gcc/te
*** 32555,32571 ****
  b75081070e5d6cda7c7fa71f2652e5c4  gcc/testsuite/gcc.c-torture/execute/enum-1.c
  0de8cd8896dc35069287acffcf0cf023  gcc/testsuite/gcc.c-torture/execute/enum-2.c
  91b8922c3b6304ab6ab99942dbca6c66  gcc/testsuite/gcc.c-torture/execute/enum-3.c
! 7732eacd0086b7602afc33b52f84ab6d  gcc/testsuite/gcc.c-torture/execute/execute.exp
  3f877fc808f2ba680241c6f0726afdb8  gcc/testsuite/gcc.c-torture/execute/extzvsi.c
  d2dbbb18d94c0dbb1f03952bbd682bdc  gcc/testsuite/gcc.c-torture/execute/ffs-1.c
  59890cc9fc7ac6d103d95e083b353cd1  gcc/testsuite/gcc.c-torture/execute/ffs-2.c
  8dee21292eb0545b049b5e2dd3fe21dd  gcc/testsuite/gcc.c-torture/execute/float-floor.c
  4c3d6e8ef819da9ec61210a6df3315c8  gcc/testsuite/gcc.c-torture/execute/floatunsisf-1.c
  bcea053f530aa11916510fa094950161  gcc/testsuite/gcc.c-torture/execute/fprintf-1.c
! ab02f11cfb24bd3cd77ad4d17bf058dc  gcc/testsuite/gcc.c-torture/execute/fprintf-2.c
  e09dd80f5a40a566b1014f568f2c3ba4  gcc/testsuite/gcc.c-torture/execute/fprintf-chk-1.c
  d3b5b37c4d7486d3dedb71055717ecef  gcc/testsuite/gcc.c-torture/execute/frame-address.c
  9052c118de9977e04df6f3eb53a232a8  gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c
  c6a25cdd568c96b091a4ad69470802a4  gcc/testsuite/gcc.c-torture/execute/gofast.c
  d7e5d823095813f4e037fc2146b69922  gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c
  739ddcf743d3b57ec98e87c96cbb64b0  gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.x
--- 33646,33663 ----
  b75081070e5d6cda7c7fa71f2652e5c4  gcc/testsuite/gcc.c-torture/execute/enum-1.c
  0de8cd8896dc35069287acffcf0cf023  gcc/testsuite/gcc.c-torture/execute/enum-2.c
  91b8922c3b6304ab6ab99942dbca6c66  gcc/testsuite/gcc.c-torture/execute/enum-3.c
! cd48fef6fa8e18518eeb4bdf64624890  gcc/testsuite/gcc.c-torture/execute/execute.exp
  3f877fc808f2ba680241c6f0726afdb8  gcc/testsuite/gcc.c-torture/execute/extzvsi.c
  d2dbbb18d94c0dbb1f03952bbd682bdc  gcc/testsuite/gcc.c-torture/execute/ffs-1.c
  59890cc9fc7ac6d103d95e083b353cd1  gcc/testsuite/gcc.c-torture/execute/ffs-2.c
  8dee21292eb0545b049b5e2dd3fe21dd  gcc/testsuite/gcc.c-torture/execute/float-floor.c
  4c3d6e8ef819da9ec61210a6df3315c8  gcc/testsuite/gcc.c-torture/execute/floatunsisf-1.c
  bcea053f530aa11916510fa094950161  gcc/testsuite/gcc.c-torture/execute/fprintf-1.c
! 66d81ae03407850e174e458d6dbcbb08  gcc/testsuite/gcc.c-torture/execute/fprintf-2.c
  e09dd80f5a40a566b1014f568f2c3ba4  gcc/testsuite/gcc.c-torture/execute/fprintf-chk-1.c
  d3b5b37c4d7486d3dedb71055717ecef  gcc/testsuite/gcc.c-torture/execute/frame-address.c
  9052c118de9977e04df6f3eb53a232a8  gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c
+ f9daf38f7ad252ee296ef6df53c6e989  gcc/testsuite/gcc.c-torture/execute/gcc_tmpnam.h
  c6a25cdd568c96b091a4ad69470802a4  gcc/testsuite/gcc.c-torture/execute/gofast.c
  d7e5d823095813f4e037fc2146b69922  gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c
  739ddcf743d3b57ec98e87c96cbb64b0  gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.x
*************** a97c5124480e7231f6d6af194cc220f2  gcc/te
*** 32584,32589 ****
--- 33676,33685 ----
  0c03d63f6fb50a233511d65f0eecd5da  gcc/testsuite/gcc.c-torture/execute/ieee/acc1.c
  80f1cec8ee9879e5f9cf1ee6b1704a17  gcc/testsuite/gcc.c-torture/execute/ieee/acc2.c
  a1ea960717201196b74eeb896ca4f445  gcc/testsuite/gcc.c-torture/execute/ieee/builtin-nan-1.c
+ 0012f310d4823bfb3b3732351eed8bd1  gcc/testsuite/gcc.c-torture/execute/ieee/cdivchkd.c
+ 66d7fb51134f54324651f1b78c43c692  gcc/testsuite/gcc.c-torture/execute/ieee/cdivchkf.c
+ 50551bee34b1d2c64c8b9748f44348f9  gcc/testsuite/gcc.c-torture/execute/ieee/cdivchkld.c
+ a0b00affcad7636a7e7f4586907299b7  gcc/testsuite/gcc.c-torture/execute/ieee/cdivchkld.x
  f0eeef1d82cfa9d661c40547e550431b  gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-1.c
  e32051ed90e292b8eaee90f95a632a72  gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-2.c
  14f9a8ec89e8df86cfa9cf9d721ccc4c  gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-3.c
*************** e6e4bf75b7bfe776a42e2d834c668aa0  gcc/te
*** 32613,32619 ****
  987c92fc82b6f0a9fcd149cb6983020f  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8l.c
  eda53ee18df0e1666f58ac145f30c8bc  gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.c
  c8b196e822d4b979813f1d04c3197dff  gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x
! 4091ab9eb641fa6f62e72a956c541e84  gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp
  becc504a322770453dcee9cedb700b2a  gcc/testsuite/gcc.c-torture/execute/ieee/inf-1.c
  455ba77f92be22cda1b657fc7de869ac  gcc/testsuite/gcc.c-torture/execute/ieee/inf-2.c
  2b23329ee0437a7e47b835bee3d9d3e1  gcc/testsuite/gcc.c-torture/execute/ieee/inf-3.c
--- 33709,33715 ----
  987c92fc82b6f0a9fcd149cb6983020f  gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8l.c
  eda53ee18df0e1666f58ac145f30c8bc  gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.c
  c8b196e822d4b979813f1d04c3197dff  gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x
! 603c016997aab4955e1ac71ed5f1e95f  gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp
  becc504a322770453dcee9cedb700b2a  gcc/testsuite/gcc.c-torture/execute/ieee/inf-1.c
  455ba77f92be22cda1b657fc7de869ac  gcc/testsuite/gcc.c-torture/execute/ieee/inf-2.c
  2b23329ee0437a7e47b835bee3d9d3e1  gcc/testsuite/gcc.c-torture/execute/ieee/inf-3.c
*************** ca24b3bde293e0dc51664263dfbd7596  gcc/te
*** 32628,32634 ****
  863479e0e407e39a90ba2476bf1207e3  gcc/testsuite/gcc.c-torture/execute/ieee/mzero6.c
  1b9dac5340cc72f68524acd4c4da7e80  gcc/testsuite/gcc.c-torture/execute/ieee/pr28634.c
  d8612b7bdffc24880131ef35f74be2d6  gcc/testsuite/gcc.c-torture/execute/ieee/pr29302-1.c
! 87465ba98d1672b9f25e024f5fbc88de  gcc/testsuite/gcc.c-torture/execute/ieee/pr29302-1.x
  cc3ca61cbd7ec3722dcd75ad3cab0f8a  gcc/testsuite/gcc.c-torture/execute/ieee/pr30704.c
  b2ab2df25ae61fdb2695a27e3847bca4  gcc/testsuite/gcc.c-torture/execute/ieee/pr30704.x
  0ab3ea8fb0e14aa33a47d758c67f0b83  gcc/testsuite/gcc.c-torture/execute/ieee/pr36332.c
--- 33724,33730 ----
  863479e0e407e39a90ba2476bf1207e3  gcc/testsuite/gcc.c-torture/execute/ieee/mzero6.c
  1b9dac5340cc72f68524acd4c4da7e80  gcc/testsuite/gcc.c-torture/execute/ieee/pr28634.c
  d8612b7bdffc24880131ef35f74be2d6  gcc/testsuite/gcc.c-torture/execute/ieee/pr29302-1.c
! 34f935573c831edc6e12782ff995e44a  gcc/testsuite/gcc.c-torture/execute/ieee/pr29302-1.x
  cc3ca61cbd7ec3722dcd75ad3cab0f8a  gcc/testsuite/gcc.c-torture/execute/ieee/pr30704.c
  b2ab2df25ae61fdb2695a27e3847bca4  gcc/testsuite/gcc.c-torture/execute/ieee/pr30704.x
  0ab3ea8fb0e14aa33a47d758c67f0b83  gcc/testsuite/gcc.c-torture/execute/ieee/pr36332.c
*************** e854bc80f793329b6c96d31e3f80a012  gcc/te
*** 32710,32718 ****
--- 33806,33825 ----
  9c9024650c8b4b1672ea993228511949  gcc/testsuite/gcc.c-torture/execute/packed-aligned.c
  12785ab6e086a50cd8ab9f5bdb9a9bc5  gcc/testsuite/gcc.c-torture/execute/pending-4.c
  5ad23d6cafc55e78896b90e3669a14b8  gcc/testsuite/gcc.c-torture/execute/postmod-1.c
+ 64b80dcfbe526f0e5993e4b739431227  gcc/testsuite/gcc.c-torture/execute/pr100453.c
+ 859a8616bb39c775a0c9e44482a3e048  gcc/testsuite/gcc.c-torture/execute/pr101335.c
+ a2175770e21b82966738b5577f0fae06  gcc/testsuite/gcc.c-torture/execute/pr102134.c
  6f562291c92a478431678da451525a90  gcc/testsuite/gcc.c-torture/execute/pr103052.c
+ 7db85911509669346107156f80cd36a2  gcc/testsuite/gcc.c-torture/execute/pr103209.c
  a5b5957138d71ec5e7dbb1056f5b6cf4  gcc/testsuite/gcc.c-torture/execute/pr103255.c
+ c679b2f93e28cfb99a26c4bdafb29492  gcc/testsuite/gcc.c-torture/execute/pr103376.c
+ 804ac46703f97fd2be64ffb507261f8f  gcc/testsuite/gcc.c-torture/execute/pr103405.c
+ 9b4487564bc91a30922019d7c0d9e720  gcc/testsuite/gcc.c-torture/execute/pr103417.c
+ e3ac376d67fc8be136e9485818084877  gcc/testsuite/gcc.c-torture/execute/pr10352-1.c
+ a89a9f97e9f6a37a0db709c2b09097b9  gcc/testsuite/gcc.c-torture/execute/pr104196.c
+ eda9698796bef969bb50e5712208e61b  gcc/testsuite/gcc.c-torture/execute/pr104604.c
  8f1a8c89149c065ac6e73140793989be  gcc/testsuite/gcc.c-torture/execute/pr104814.c
+ 87b1203ac926f7da31883b0ba420b9b8  gcc/testsuite/gcc.c-torture/execute/pr104839.c
  7758cb727d75f4fc1c0e483d503de146  gcc/testsuite/gcc.c-torture/execute/pr15262-1.c
  58dc249612dbc918d7fc4010e94deb8d  gcc/testsuite/gcc.c-torture/execute/pr15262-2.c
  d9c36fc850771445c5e4b6ce6dae1a12  gcc/testsuite/gcc.c-torture/execute/pr15262.c
*************** f4f2930202484cfce2950cfa08ed6346  gcc/te
*** 33268,33274 ****
  68a00a5f6197b192d0a9ba3b1f2f4938  gcc/testsuite/gcc.c-torture/execute/pr99079.c
  1ff23ec06c77aefc42faa46db9f3fa0d  gcc/testsuite/gcc.c-torture/execute/pr99751.c
  8587088d2eab0e974762ba6cd20b4f04  gcc/testsuite/gcc.c-torture/execute/printf-1.c
! 9bc91ebc5706a25ee5b9542884f53fa1  gcc/testsuite/gcc.c-torture/execute/printf-2.c
  9e89c9802e280d635a7bc6756bbaf6e6  gcc/testsuite/gcc.c-torture/execute/printf-chk-1.c
  f397d221ccf3a7ce631cf42078dfadb5  gcc/testsuite/gcc.c-torture/execute/pta-field-1.c
  559d28c240437de1613fea4a132f68c1  gcc/testsuite/gcc.c-torture/execute/pta-field-2.c
--- 34375,34381 ----
  68a00a5f6197b192d0a9ba3b1f2f4938  gcc/testsuite/gcc.c-torture/execute/pr99079.c
  1ff23ec06c77aefc42faa46db9f3fa0d  gcc/testsuite/gcc.c-torture/execute/pr99751.c
  8587088d2eab0e974762ba6cd20b4f04  gcc/testsuite/gcc.c-torture/execute/printf-1.c
! 79145d19a453735bfef1e243d8a7b11a  gcc/testsuite/gcc.c-torture/execute/printf-2.c
  9e89c9802e280d635a7bc6756bbaf6e6  gcc/testsuite/gcc.c-torture/execute/printf-chk-1.c
  f397d221ccf3a7ce631cf42078dfadb5  gcc/testsuite/gcc.c-torture/execute/pta-field-1.c
  559d28c240437de1613fea4a132f68c1  gcc/testsuite/gcc.c-torture/execute/pta-field-2.c
*************** ba93f0b459fe7321a82190489fff365d  gcc/te
*** 33328,33334 ****
  86621df21132f7e8109a2ec9cd820275  gcc/testsuite/gcc.c-torture/execute/tstdi-1.c
  f281cd45767072414a16da2783b713b8  gcc/testsuite/gcc.c-torture/execute/unroll-1.c
  c2d5578e9040ef5e233418ff136ee3b9  gcc/testsuite/gcc.c-torture/execute/usad-run.c
! 17cac50d11f5ec0e054e3e1a463a709c  gcc/testsuite/gcc.c-torture/execute/user-printf.c
  4b127b1de7f76499b7afc4997f86e4d6  gcc/testsuite/gcc.c-torture/execute/usmul.c
  f738a70ed047349d26729f0c306cf6d9  gcc/testsuite/gcc.c-torture/execute/va-arg-1.c
  6e7bdc15d1b371ddba4afe09deab2ab0  gcc/testsuite/gcc.c-torture/execute/va-arg-10.c
--- 34435,34441 ----
  86621df21132f7e8109a2ec9cd820275  gcc/testsuite/gcc.c-torture/execute/tstdi-1.c
  f281cd45767072414a16da2783b713b8  gcc/testsuite/gcc.c-torture/execute/unroll-1.c
  c2d5578e9040ef5e233418ff136ee3b9  gcc/testsuite/gcc.c-torture/execute/usad-run.c
! ebc695df4af12ca0cc784680f010f23f  gcc/testsuite/gcc.c-torture/execute/user-printf.c
  4b127b1de7f76499b7afc4997f86e4d6  gcc/testsuite/gcc.c-torture/execute/usmul.c
  f738a70ed047349d26729f0c306cf6d9  gcc/testsuite/gcc.c-torture/execute/va-arg-1.c
  6e7bdc15d1b371ddba4afe09deab2ab0  gcc/testsuite/gcc.c-torture/execute/va-arg-10.c
*************** f30bf0095addeef700a83f36c598deab  gcc/te
*** 33378,33385 ****
  5d8fbb34f7ad51fedc394527a5885d4d  gcc/testsuite/gcc.c-torture/execute/zerolen-2.c
  44c6ad090d3f06206aa54f59582ae32c  gcc/testsuite/gcc.c-torture/unsorted/dump-noaddr.c
  76a05adc513bcf00de7e94465ef0bc6d  gcc/testsuite/gcc.c-torture/unsorted/dump-noaddr.x
! bdcbc5cab14e0e84344eb82db2a16368  gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp
! 9f934e665466881aea1787d1cc031924  gcc/testsuite/gcc.dg-selftests/dg-final.exp
  d0289bfc068c575e2168df7bc156b45a  gcc/testsuite/gcc.dg/20000108-1.c
  586ef49702317acb226ba076aeea11ee  gcc/testsuite/gcc.dg/20000111-1.c
  d8a5405adb98e221c4fa41ce145177c6  gcc/testsuite/gcc.dg/20000623-1.c
--- 34485,34492 ----
  5d8fbb34f7ad51fedc394527a5885d4d  gcc/testsuite/gcc.c-torture/execute/zerolen-2.c
  44c6ad090d3f06206aa54f59582ae32c  gcc/testsuite/gcc.c-torture/unsorted/dump-noaddr.c
  76a05adc513bcf00de7e94465ef0bc6d  gcc/testsuite/gcc.c-torture/unsorted/dump-noaddr.x
! a6f0f63358be034e9a7780ea3e01749e  gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp
! 901bf464d29edfb10eb7c0060b53d2c5  gcc/testsuite/gcc.dg-selftests/dg-final.exp
  d0289bfc068c575e2168df7bc156b45a  gcc/testsuite/gcc.dg/20000108-1.c
  586ef49702317acb226ba076aeea11ee  gcc/testsuite/gcc.dg/20000111-1.c
  d8a5405adb98e221c4fa41ce145177c6  gcc/testsuite/gcc.dg/20000623-1.c
*************** a7c72bd6aaf9dfbb7dc938acbaa6464d  gcc/te
*** 33426,33432 ****
  867102925c30a3ad5b40eaa96c7bebcf  gcc/testsuite/gcc.dg/20020222-1.c
  b50d600af07c946c10a573622c1b53a1  gcc/testsuite/gcc.dg/20020310-1.c
  f624e0acdc4cf507ceeea3c01ebd027f  gcc/testsuite/gcc.dg/20020312-1.c
! c160e487b0cb39f2396d024bc9ee4bff  gcc/testsuite/gcc.dg/20020312-2.c
  0bc0a613df9e226c6994a04c3f7c16d7  gcc/testsuite/gcc.dg/20020319-1.c
  f43235cff626421b3780c396317263aa  gcc/testsuite/gcc.dg/20020411-1.c
  07a34c6b31217ca7e5b642784943f7a6  gcc/testsuite/gcc.dg/20020415-1.c
--- 34533,34539 ----
  867102925c30a3ad5b40eaa96c7bebcf  gcc/testsuite/gcc.dg/20020222-1.c
  b50d600af07c946c10a573622c1b53a1  gcc/testsuite/gcc.dg/20020310-1.c
  f624e0acdc4cf507ceeea3c01ebd027f  gcc/testsuite/gcc.dg/20020312-1.c
! 289751de732eae37756971f54183f5be  gcc/testsuite/gcc.dg/20020312-2.c
  0bc0a613df9e226c6994a04c3f7c16d7  gcc/testsuite/gcc.dg/20020319-1.c
  f43235cff626421b3780c396317263aa  gcc/testsuite/gcc.dg/20020411-1.c
  07a34c6b31217ca7e5b642784943f7a6  gcc/testsuite/gcc.dg/20020415-1.c
*************** f73b8f76b68c625111a3567ed0b32593  gcc/te
*** 33447,33453 ****
  db4ae37e58ac25724070033d60b98346  gcc/testsuite/gcc.dg/20021014-1.c
  e0a338b56ef60f7330376e2cca8ee295  gcc/testsuite/gcc.dg/20021018-1.c
  a80fc1e3c09e8ce28290a89b6310c081  gcc/testsuite/gcc.dg/20021023-1.c
! e0d3e010baaffb9e233555a5e987890f  gcc/testsuite/gcc.dg/20021029-1.c
  dbac8533c2d035b1062c392d57919926  gcc/testsuite/gcc.dg/20021029-2.c
  9614eaf8aeab9dce78f299f486339133  gcc/testsuite/gcc.dg/20021116-1.c
  352f6d00f9872a03fa995703402ca5f6  gcc/testsuite/gcc.dg/20030107-1.c
--- 34554,34560 ----
  db4ae37e58ac25724070033d60b98346  gcc/testsuite/gcc.dg/20021014-1.c
  e0a338b56ef60f7330376e2cca8ee295  gcc/testsuite/gcc.dg/20021018-1.c
  a80fc1e3c09e8ce28290a89b6310c081  gcc/testsuite/gcc.dg/20021023-1.c
! 26c7395b78bdf87b2ae61e6fb80cf279  gcc/testsuite/gcc.dg/20021029-1.c
  dbac8533c2d035b1062c392d57919926  gcc/testsuite/gcc.dg/20021029-2.c
  9614eaf8aeab9dce78f299f486339133  gcc/testsuite/gcc.dg/20021116-1.c
  352f6d00f9872a03fa995703402ca5f6  gcc/testsuite/gcc.dg/20030107-1.c
*************** fb8e19f630a58be9d2b01baffc65b9c6  gcc/te
*** 33463,33468 ****
--- 34570,34576 ----
  5d54150f39cbb4e9b9985ecf99c5ef74  gcc/testsuite/gcc.dg/20030414-1.c
  6c9b33a7b2a588e199ea141abf4ad4b6  gcc/testsuite/gcc.dg/20030414-2.c
  85f2c8aad52295fc0347fe9d298fa10c  gcc/testsuite/gcc.dg/20030612-1.c
+ 5d5af522fadf859e83a0f2317646a9d5  gcc/testsuite/gcc.dg/20030612-2.c
  12636f2c4a6070d3b4149b67e5cb503f  gcc/testsuite/gcc.dg/20030625-1.c
  01600f04a5bc3600ff140ceb707ce243  gcc/testsuite/gcc.dg/20030626-1.c
  7b030115274cda25e38bbfd46a79ac3e  gcc/testsuite/gcc.dg/20030627-1.c
*************** cda741cce59ba0dcd70871f300400003  gcc/te
*** 33599,33608 ****
  eba607c17011c649eb3d7e1c5513ffdd  gcc/testsuite/gcc.dg/Foundation.framework/empty
  509fc4e45ca169a2f01541865c72e7d9  gcc/testsuite/gcc.dg/O16384.c
  5572aaa0a05957fff2416d1f5f7c0cc6  gcc/testsuite/gcc.dg/PR68002.c
! 99828623c9bf77544aeea2ded6f1de1b  gcc/testsuite/gcc.dg/README
  bd2b0579d869dd45682e46db89fcdb4f  gcc/testsuite/gcc.dg/Wabsolute-value.c
  3b152bda38c8adacaa17cce7b0cf4e42  gcc/testsuite/gcc.dg/Waddress-2.c
! e061bee34094ea6ecd29d049eafb229b  gcc/testsuite/gcc.dg/Waddress.c
  92e0f6dce9be7a9119066cc81f5f6407  gcc/testsuite/gcc.dg/Wall.c
  4d94ecdb845c416b2f88185761237f07  gcc/testsuite/gcc.dg/Walloc-size-larger-than-1.c
  47f319a9e00eb54e9627ad88f18bc24a  gcc/testsuite/gcc.dg/Walloc-size-larger-than-10.c
--- 34707,34717 ----
  eba607c17011c649eb3d7e1c5513ffdd  gcc/testsuite/gcc.dg/Foundation.framework/empty
  509fc4e45ca169a2f01541865c72e7d9  gcc/testsuite/gcc.dg/O16384.c
  5572aaa0a05957fff2416d1f5f7c0cc6  gcc/testsuite/gcc.dg/PR68002.c
! 1114586d4079131c7fbb2e93290d46fb  gcc/testsuite/gcc.dg/README
  bd2b0579d869dd45682e46db89fcdb4f  gcc/testsuite/gcc.dg/Wabsolute-value.c
  3b152bda38c8adacaa17cce7b0cf4e42  gcc/testsuite/gcc.dg/Waddress-2.c
! c24bef0f408b6e43c19ee75c1ce7717a  gcc/testsuite/gcc.dg/Waddress-3.c
! ae480ca484b7c3dd4cd9862adc8df1b3  gcc/testsuite/gcc.dg/Waddress.c
  92e0f6dce9be7a9119066cc81f5f6407  gcc/testsuite/gcc.dg/Wall.c
  4d94ecdb845c416b2f88185761237f07  gcc/testsuite/gcc.dg/Walloc-size-larger-than-1.c
  47f319a9e00eb54e9627ad88f18bc24a  gcc/testsuite/gcc.dg/Walloc-size-larger-than-10.c
*************** f4ae192745e9cc38db12b7ac4545d0fa  gcc/te
*** 33642,33650 ****
  2c9d0a685e423262c1e6e00284417c7a  gcc/testsuite/gcc.dg/Walloca-larger-than-2.c
  0d9c9d66e7b54246cbb26dbd25282aea  gcc/testsuite/gcc.dg/Walloca-larger-than-3.c
  3712b4a261ff2fa5613a6b7873d33ad2  gcc/testsuite/gcc.dg/Walloca-larger-than-3.h
  cb4200f2eb907130481e17db75d38aed  gcc/testsuite/gcc.dg/Walloca-larger-than.c
  e0f03fe3585a327467250a2ec39fc2be  gcc/testsuite/gcc.dg/Walways-true-1.c
! 832a40756369d5e785179df5ca909745  gcc/testsuite/gcc.dg/Walways-true-2.c
  33a98cba1121b42ccbc1b9ea87c0a5e2  gcc/testsuite/gcc.dg/Warray-bounds-10.c
  fab4e8097a76381883777cdb08a59bac  gcc/testsuite/gcc.dg/Warray-bounds-11.c
  aff04d276a341a86dbe0aeb9559c0a09  gcc/testsuite/gcc.dg/Warray-bounds-12.c
--- 34751,34760 ----
  2c9d0a685e423262c1e6e00284417c7a  gcc/testsuite/gcc.dg/Walloca-larger-than-2.c
  0d9c9d66e7b54246cbb26dbd25282aea  gcc/testsuite/gcc.dg/Walloca-larger-than-3.c
  3712b4a261ff2fa5613a6b7873d33ad2  gcc/testsuite/gcc.dg/Walloca-larger-than-3.h
+ 7f7694b5b535b8aa43e585d3d2846fe5  gcc/testsuite/gcc.dg/Walloca-larger-than-4.c
  cb4200f2eb907130481e17db75d38aed  gcc/testsuite/gcc.dg/Walloca-larger-than.c
  e0f03fe3585a327467250a2ec39fc2be  gcc/testsuite/gcc.dg/Walways-true-1.c
! e0eaa51369369eede5d7e28a789540d5  gcc/testsuite/gcc.dg/Walways-true-2.c
  33a98cba1121b42ccbc1b9ea87c0a5e2  gcc/testsuite/gcc.dg/Warray-bounds-10.c
  fab4e8097a76381883777cdb08a59bac  gcc/testsuite/gcc.dg/Warray-bounds-11.c
  aff04d276a341a86dbe0aeb9559c0a09  gcc/testsuite/gcc.dg/Warray-bounds-12.c
*************** b4a524baa9581904a5f7b7e0d7ca6a76  gcc/te
*** 33665,33682 ****
  dedff38471f8963dc7ff6b71f19af4e2  gcc/testsuite/gcc.dg/Warray-bounds-26.c
  57d135c63b4ee7667d3bee8da66ddf5e  gcc/testsuite/gcc.dg/Warray-bounds-27.c
  1ac6f17bcd2f058f86a0facf496777b3  gcc/testsuite/gcc.dg/Warray-bounds-28.c
! 07e494b2b5359be461562717db03429c  gcc/testsuite/gcc.dg/Warray-bounds-29.c
  9eeb5d2b156c00ad712626333e2f1f56  gcc/testsuite/gcc.dg/Warray-bounds-3.c
! 32c6bbc4cfebd62192d54063476cb5a9  gcc/testsuite/gcc.dg/Warray-bounds-30.c
! 162af82980c3b72cce2dfae4adbcca0c  gcc/testsuite/gcc.dg/Warray-bounds-31.c
! 75bcac3d74e7039aa63757acb754d677  gcc/testsuite/gcc.dg/Warray-bounds-32.c
  6b9ac8ad880ced5374b2667375c34928  gcc/testsuite/gcc.dg/Warray-bounds-33.c
  0d5c45e1045ae1cfb51e99b1a996737e  gcc/testsuite/gcc.dg/Warray-bounds-34.c
  70792e0f2bd388c08d846ece8c1a9894  gcc/testsuite/gcc.dg/Warray-bounds-35.c
  53cf522d5540d20053932c1c37e42025  gcc/testsuite/gcc.dg/Warray-bounds-36.c
  88110b8c8042e3a992d1fae3d97c87b0  gcc/testsuite/gcc.dg/Warray-bounds-37.c
  e7237b88231aff2adb46cd199c02550b  gcc/testsuite/gcc.dg/Warray-bounds-38.c
! 51cf8f7f77d0b01204452bd074d852bc  gcc/testsuite/gcc.dg/Warray-bounds-39.c
  84a306ba6a47b60426131bffe9ec7a0c  gcc/testsuite/gcc.dg/Warray-bounds-4.c
  a24dbf2381bca49baad37bd9894a1364  gcc/testsuite/gcc.dg/Warray-bounds-40.c
  ade1fdd3e190a5dcc364ebe1609610ba  gcc/testsuite/gcc.dg/Warray-bounds-41.c
--- 34775,34792 ----
  dedff38471f8963dc7ff6b71f19af4e2  gcc/testsuite/gcc.dg/Warray-bounds-26.c
  57d135c63b4ee7667d3bee8da66ddf5e  gcc/testsuite/gcc.dg/Warray-bounds-27.c
  1ac6f17bcd2f058f86a0facf496777b3  gcc/testsuite/gcc.dg/Warray-bounds-28.c
! db89bc16bba99d1896fd369f83d6a7b5  gcc/testsuite/gcc.dg/Warray-bounds-29.c
  9eeb5d2b156c00ad712626333e2f1f56  gcc/testsuite/gcc.dg/Warray-bounds-3.c
! 8081619aca0555d94a4544dbea2ea790  gcc/testsuite/gcc.dg/Warray-bounds-30.c
! 8b65ddd6aa612fd11722b98bcdac2196  gcc/testsuite/gcc.dg/Warray-bounds-31.c
! 81bd321922b3694940694510b0d8d0c4  gcc/testsuite/gcc.dg/Warray-bounds-32.c
  6b9ac8ad880ced5374b2667375c34928  gcc/testsuite/gcc.dg/Warray-bounds-33.c
  0d5c45e1045ae1cfb51e99b1a996737e  gcc/testsuite/gcc.dg/Warray-bounds-34.c
  70792e0f2bd388c08d846ece8c1a9894  gcc/testsuite/gcc.dg/Warray-bounds-35.c
  53cf522d5540d20053932c1c37e42025  gcc/testsuite/gcc.dg/Warray-bounds-36.c
  88110b8c8042e3a992d1fae3d97c87b0  gcc/testsuite/gcc.dg/Warray-bounds-37.c
  e7237b88231aff2adb46cd199c02550b  gcc/testsuite/gcc.dg/Warray-bounds-38.c
! f1d188ca73d565a2f5f0ef5ac4da7de3  gcc/testsuite/gcc.dg/Warray-bounds-39.c
  84a306ba6a47b60426131bffe9ec7a0c  gcc/testsuite/gcc.dg/Warray-bounds-4.c
  a24dbf2381bca49baad37bd9894a1364  gcc/testsuite/gcc.dg/Warray-bounds-40.c
  ade1fdd3e190a5dcc364ebe1609610ba  gcc/testsuite/gcc.dg/Warray-bounds-41.c
*************** bcfdc1bd403c9aafe13abbe133808f9a  gcc/te
*** 33686,33728 ****
  f3112cdf9edbe2af3277d38e4643af1f  gcc/testsuite/gcc.dg/Warray-bounds-45.c
  6e95be44603cc2f0f4a1e04edd5ae3c4  gcc/testsuite/gcc.dg/Warray-bounds-46.c
  cb64293b7b9a92cb5cd94dedde913801  gcc/testsuite/gcc.dg/Warray-bounds-47.c
! 62fb96fbec5aa97bc91149028e507e28  gcc/testsuite/gcc.dg/Warray-bounds-48.c
  3aa7adb94918bc13234602f8516dd1a9  gcc/testsuite/gcc.dg/Warray-bounds-49.c
  6a53ea6731c8e33605392ac843284e1c  gcc/testsuite/gcc.dg/Warray-bounds-5.c
  99ca661fd44c871abb678e58007bc467  gcc/testsuite/gcc.dg/Warray-bounds-50.c
! 69c29926e1d21fcf8f9256fdb81062ea  gcc/testsuite/gcc.dg/Warray-bounds-51.c
! cc4d87376121fbd87425aadccaddbf48  gcc/testsuite/gcc.dg/Warray-bounds-52.c
! 2e06a9ac76c84c0cc45e97edd5cc021f  gcc/testsuite/gcc.dg/Warray-bounds-53.c
  12a0fa5409b214bab70ca278f4e5c555  gcc/testsuite/gcc.dg/Warray-bounds-54.c
  3735dc90a235299206d9177f18fbe519  gcc/testsuite/gcc.dg/Warray-bounds-55.c
  1b1959a1d1ebfb04562568b593cbc665  gcc/testsuite/gcc.dg/Warray-bounds-56.c
  fcd274aa9e98ef2eed6f4ff3d3a74b4c  gcc/testsuite/gcc.dg/Warray-bounds-57.c
! e487b1e3afb81459de026ce1e504fba3  gcc/testsuite/gcc.dg/Warray-bounds-58.c
  7de695ba5920d7bf7dad04b97e1dd4b9  gcc/testsuite/gcc.dg/Warray-bounds-59.c
  80c3d31a9d8de2d05bed1c5c1e97d4c5  gcc/testsuite/gcc.dg/Warray-bounds-6.c
  1b21b1f193ad0d2c647f55a9a290acf2  gcc/testsuite/gcc.dg/Warray-bounds-61.c
  c78bbb71f763798ca7a0fb499b6de460  gcc/testsuite/gcc.dg/Warray-bounds-62.c
! c6fb1eddded2a406e3cf969e99ff8581  gcc/testsuite/gcc.dg/Warray-bounds-63.c
! 885e1e30393f12e893506bb2afbd4e4e  gcc/testsuite/gcc.dg/Warray-bounds-64.c
  1df7f806db7a39bd9829ad74b9781b37  gcc/testsuite/gcc.dg/Warray-bounds-65.c
! 0e2312b94c8aaebec696c5ebbd21b4c8  gcc/testsuite/gcc.dg/Warray-bounds-66.c
  2131e610c7552a866719b6f05200b219  gcc/testsuite/gcc.dg/Warray-bounds-67.c
  51359502b5a5964989bb9a3452967e27  gcc/testsuite/gcc.dg/Warray-bounds-68.c
! 046a84350f26e4565c2d5464cfceaa35  gcc/testsuite/gcc.dg/Warray-bounds-69.c
  5be3608072cf842ac1c1ee348830d85a  gcc/testsuite/gcc.dg/Warray-bounds-7.c
  bd5d161ada67db246eb1ad520d4f5497  gcc/testsuite/gcc.dg/Warray-bounds-70.c
  21d65e4a3ed9e583a7990c62514f991a  gcc/testsuite/gcc.dg/Warray-bounds-8.c
  4e1e873542b1218915f33f761b49e234  gcc/testsuite/gcc.dg/Warray-bounds-9.c
  0b85a8646c05f520e95768e6d605a0dd  gcc/testsuite/gcc.dg/Warray-bounds.c
  08e3a5d407e0fc2dbcabe26ce368584d  gcc/testsuite/gcc.dg/Warray-parameter-2.c
! f6a786ff1a6cb61cde5db224523fe850  gcc/testsuite/gcc.dg/Warray-parameter-3.c
  9d5c473fe24359cf5dc7d2cd313b459c  gcc/testsuite/gcc.dg/Warray-parameter-4.c
  63747ac1f532ee92e6bae2bb3c3536d9  gcc/testsuite/gcc.dg/Warray-parameter-5.c
  afd1e9e12b9f03d47bc7d0a07df0c5d5  gcc/testsuite/gcc.dg/Warray-parameter-6.c
  8062c6aa0e8bde1eb625eb32bf6be129  gcc/testsuite/gcc.dg/Warray-parameter-7.c
  a8dc9cdf9fada2be584320b55edec236  gcc/testsuite/gcc.dg/Warray-parameter-8.c
  2991b35700cc4b55ee85a6af0af3aa7c  gcc/testsuite/gcc.dg/Warray-parameter-9.c
! 222ba3f1d84fa436a7986096292f8e36  gcc/testsuite/gcc.dg/Warray-parameter.c
  09bb4331b7486fe7f81374366f7df056  gcc/testsuite/gcc.dg/Wattribute-alias.c
  335e155c329413d2a8e0eaf02def9f82  gcc/testsuite/gcc.dg/Wattributes-1.c
  3726bb79299560facdb4e0a352f6c5c2  gcc/testsuite/gcc.dg/Wattributes-10.c
--- 34796,34865 ----
  f3112cdf9edbe2af3277d38e4643af1f  gcc/testsuite/gcc.dg/Warray-bounds-45.c
  6e95be44603cc2f0f4a1e04edd5ae3c4  gcc/testsuite/gcc.dg/Warray-bounds-46.c
  cb64293b7b9a92cb5cd94dedde913801  gcc/testsuite/gcc.dg/Warray-bounds-47.c
! 61b5f4a019ea5aba637f88d12c0f3b26  gcc/testsuite/gcc.dg/Warray-bounds-48-novec.c
! 332f91c662d10e51d4f762b426cf3e05  gcc/testsuite/gcc.dg/Warray-bounds-48.c
  3aa7adb94918bc13234602f8516dd1a9  gcc/testsuite/gcc.dg/Warray-bounds-49.c
  6a53ea6731c8e33605392ac843284e1c  gcc/testsuite/gcc.dg/Warray-bounds-5.c
  99ca661fd44c871abb678e58007bc467  gcc/testsuite/gcc.dg/Warray-bounds-50.c
! 80b1ec0f5441fed204561ea4b998732e  gcc/testsuite/gcc.dg/Warray-bounds-51-novec.c
! 76dcbe5fc7b7946795b40b27b4583187  gcc/testsuite/gcc.dg/Warray-bounds-51.c
! 6de6b62504aa1addbf743e98f598c3c9  gcc/testsuite/gcc.dg/Warray-bounds-52.c
! e14bc5062e6d55c30a8533079955b491  gcc/testsuite/gcc.dg/Warray-bounds-53.c
  12a0fa5409b214bab70ca278f4e5c555  gcc/testsuite/gcc.dg/Warray-bounds-54.c
  3735dc90a235299206d9177f18fbe519  gcc/testsuite/gcc.dg/Warray-bounds-55.c
  1b1959a1d1ebfb04562568b593cbc665  gcc/testsuite/gcc.dg/Warray-bounds-56.c
  fcd274aa9e98ef2eed6f4ff3d3a74b4c  gcc/testsuite/gcc.dg/Warray-bounds-57.c
! 63871b8f79d02609f958dc78379aaf91  gcc/testsuite/gcc.dg/Warray-bounds-58.c
  7de695ba5920d7bf7dad04b97e1dd4b9  gcc/testsuite/gcc.dg/Warray-bounds-59.c
  80c3d31a9d8de2d05bed1c5c1e97d4c5  gcc/testsuite/gcc.dg/Warray-bounds-6.c
  1b21b1f193ad0d2c647f55a9a290acf2  gcc/testsuite/gcc.dg/Warray-bounds-61.c
  c78bbb71f763798ca7a0fb499b6de460  gcc/testsuite/gcc.dg/Warray-bounds-62.c
! 9799710c9e895f3ddbad63b12f0e1886  gcc/testsuite/gcc.dg/Warray-bounds-63.c
! 9ea4759a96c75558f69e6cce54c34eb3  gcc/testsuite/gcc.dg/Warray-bounds-64.c
  1df7f806db7a39bd9829ad74b9781b37  gcc/testsuite/gcc.dg/Warray-bounds-65.c
! 64c0f3d72e38d983c88ebd5b09eb3ae2  gcc/testsuite/gcc.dg/Warray-bounds-66.c
  2131e610c7552a866719b6f05200b219  gcc/testsuite/gcc.dg/Warray-bounds-67.c
  51359502b5a5964989bb9a3452967e27  gcc/testsuite/gcc.dg/Warray-bounds-68.c
! 437c9dd07c10a3a3666af06f7ed40442  gcc/testsuite/gcc.dg/Warray-bounds-69.c
  5be3608072cf842ac1c1ee348830d85a  gcc/testsuite/gcc.dg/Warray-bounds-7.c
  bd5d161ada67db246eb1ad520d4f5497  gcc/testsuite/gcc.dg/Warray-bounds-70.c
+ 87fd290782b8c27106977ce8bc36ce55  gcc/testsuite/gcc.dg/Warray-bounds-71.c
+ 3c0dd36cca59148ab2e11e90e44c5336  gcc/testsuite/gcc.dg/Warray-bounds-71.h
+ 0b06f05c732e79dcc6ad8721defd49b9  gcc/testsuite/gcc.dg/Warray-bounds-72.c
+ 1876fa5380b75c7388f3aa34218db5ff  gcc/testsuite/gcc.dg/Warray-bounds-73.c
+ 004896294f793f1891887abc314691ff  gcc/testsuite/gcc.dg/Warray-bounds-74.c
+ 2f820dd9ae62a618464d666f0d5bca08  gcc/testsuite/gcc.dg/Warray-bounds-75.c
+ 9b4b6adb0a2122a06351c5ff7ff8931a  gcc/testsuite/gcc.dg/Warray-bounds-76.c
+ 4fa750669c47097c048bcb3a10f141ab  gcc/testsuite/gcc.dg/Warray-bounds-77.c
+ 81fdef5c5772a853c20fe673e3d4deff  gcc/testsuite/gcc.dg/Warray-bounds-78.c
+ facb4afb751b21f95cf5def2ba3c699c  gcc/testsuite/gcc.dg/Warray-bounds-79.c
  21d65e4a3ed9e583a7990c62514f991a  gcc/testsuite/gcc.dg/Warray-bounds-8.c
+ f9c24f7db5aa32c862de15d58154effa  gcc/testsuite/gcc.dg/Warray-bounds-80.c
+ 53b9639a00720876539823bec1811c2c  gcc/testsuite/gcc.dg/Warray-bounds-81.c
+ 4c3b9543f15ec24d816bcb205b1e8e34  gcc/testsuite/gcc.dg/Warray-bounds-82.c
+ 9097a05257b26da4c281f707af3f6b57  gcc/testsuite/gcc.dg/Warray-bounds-83.c
+ ed0be1b0dbc4d096cf7420e0e0916ba7  gcc/testsuite/gcc.dg/Warray-bounds-84.c
+ 9a27636f6f1b92e93419cf4950581217  gcc/testsuite/gcc.dg/Warray-bounds-85.c
+ 4fb1dc52306f29ae862fbaedfbfd5d94  gcc/testsuite/gcc.dg/Warray-bounds-87.c
+ 96e4003546a026a010af179381f3f926  gcc/testsuite/gcc.dg/Warray-bounds-88.c
+ 8c1655b4123087846331fc1762278a96  gcc/testsuite/gcc.dg/Warray-bounds-89.c
  4e1e873542b1218915f33f761b49e234  gcc/testsuite/gcc.dg/Warray-bounds-9.c
+ 34a2f1dde5b0d1ece3145392c920538a  gcc/testsuite/gcc.dg/Warray-bounds-90.c
+ 597845c74f9e6de5ac325edc29f2ac80  gcc/testsuite/gcc.dg/Warray-bounds-91.c
+ aaf0c5347a83074f9bddec09f86caea5  gcc/testsuite/gcc.dg/Warray-bounds-92.c
  0b85a8646c05f520e95768e6d605a0dd  gcc/testsuite/gcc.dg/Warray-bounds.c
+ 02492a8b231edd0a885fae4c951d176c  gcc/testsuite/gcc.dg/Warray-parameter-10.c
+ 3ea5d5a49094bf793c5897fff9d315be  gcc/testsuite/gcc.dg/Warray-parameter-11.c
  08e3a5d407e0fc2dbcabe26ce368584d  gcc/testsuite/gcc.dg/Warray-parameter-2.c
! 0dd43a716376c38d59b0b101465ce325  gcc/testsuite/gcc.dg/Warray-parameter-3-novec.c
! d0ad662b4441fbb80442aa49c085713b  gcc/testsuite/gcc.dg/Warray-parameter-3.c
  9d5c473fe24359cf5dc7d2cd313b459c  gcc/testsuite/gcc.dg/Warray-parameter-4.c
  63747ac1f532ee92e6bae2bb3c3536d9  gcc/testsuite/gcc.dg/Warray-parameter-5.c
  afd1e9e12b9f03d47bc7d0a07df0c5d5  gcc/testsuite/gcc.dg/Warray-parameter-6.c
  8062c6aa0e8bde1eb625eb32bf6be129  gcc/testsuite/gcc.dg/Warray-parameter-7.c
  a8dc9cdf9fada2be584320b55edec236  gcc/testsuite/gcc.dg/Warray-parameter-8.c
  2991b35700cc4b55ee85a6af0af3aa7c  gcc/testsuite/gcc.dg/Warray-parameter-9.c
! e99b377200ee21d2df02171cbe56461b  gcc/testsuite/gcc.dg/Warray-parameter.c
  09bb4331b7486fe7f81374366f7df056  gcc/testsuite/gcc.dg/Wattribute-alias.c
  335e155c329413d2a8e0eaf02def9f82  gcc/testsuite/gcc.dg/Wattributes-1.c
  3726bb79299560facdb4e0a352f6c5c2  gcc/testsuite/gcc.dg/Wattributes-10.c
*************** a8dc9cdf9fada2be584320b55edec236  gcc/te
*** 33730,33736 ****
  b87b7ebc31064d6e57b0af0b3017afeb  gcc/testsuite/gcc.dg/Wattributes-3.c
  1988735c2661df622a2ab226b3a093b9  gcc/testsuite/gcc.dg/Wattributes-4.c
  5b6c200e82806a6e48523fca76ca9baa  gcc/testsuite/gcc.dg/Wattributes-5.c
! 2b2bba50cdf649b0d5aaa58f907d702f  gcc/testsuite/gcc.dg/Wattributes-6.c
  fe25f03fdb469ad245f6cae14480ddad  gcc/testsuite/gcc.dg/Wattributes-7.c
  88ca5f23785409e414d83a6e43d561a3  gcc/testsuite/gcc.dg/Wattributes-8.c
  3657d8392090a291a46e662e66ab20ac  gcc/testsuite/gcc.dg/Wbad-function-cast-1.c
--- 34867,34873 ----
  b87b7ebc31064d6e57b0af0b3017afeb  gcc/testsuite/gcc.dg/Wattributes-3.c
  1988735c2661df622a2ab226b3a093b9  gcc/testsuite/gcc.dg/Wattributes-4.c
  5b6c200e82806a6e48523fca76ca9baa  gcc/testsuite/gcc.dg/Wattributes-5.c
! e07fdc272a434aa05e75700c13b249b0  gcc/testsuite/gcc.dg/Wattributes-6.c
  fe25f03fdb469ad245f6cae14480ddad  gcc/testsuite/gcc.dg/Wattributes-7.c
  88ca5f23785409e414d83a6e43d561a3  gcc/testsuite/gcc.dg/Wattributes-8.c
  3657d8392090a291a46e662e66ab20ac  gcc/testsuite/gcc.dg/Wbad-function-cast-1.c
*************** e30c655105453062112de9c7e9443274  gcc/te
*** 33805,33810 ****
--- 34942,34951 ----
  03d4250ede74859e29ac57d5e76cd614  gcc/testsuite/gcc.dg/Wcxx-compat-7.c
  9be41814ea6c590091140a830a6d4af9  gcc/testsuite/gcc.dg/Wcxx-compat-8.c
  1748e08febf7c1273a32907d6a0255a1  gcc/testsuite/gcc.dg/Wcxx-compat-9.c
+ 364e7c4451765a266ace542e3351811d  gcc/testsuite/gcc.dg/Wdangling-pointer-2.c
+ b2580351ea9d40e4accaa522c5d2f399  gcc/testsuite/gcc.dg/Wdangling-pointer-3.c
+ 316f1623e5acd83274de418921892a69  gcc/testsuite/gcc.dg/Wdangling-pointer-4.c
+ ec2abae8e4d243e4139a0b6f517f7f0f  gcc/testsuite/gcc.dg/Wdangling-pointer.c
  01f0cbfc5de1ea87105985bb541819fb  gcc/testsuite/gcc.dg/Wdeclaration-after-statement-1.c
  2da9aabb3c1d80fdd6cd7e866760fe3d  gcc/testsuite/gcc.dg/Wdeclaration-after-statement-2.c
  347b0f043a7fbcf5f80c2e080c648104  gcc/testsuite/gcc.dg/Wdeclaration-after-statement-3.c
*************** a3fccbf1a7232687802f00c0e1f6aa94  gcc/te
*** 33837,33846 ****
  8d0791011fc11919d43bcce331d009ee  gcc/testsuite/gcc.dg/Wframe-larger-than-2.c
  ef08bcadd8d487914acf2e600b7cdba9  gcc/testsuite/gcc.dg/Wframe-larger-than-3.c
  c0d5151a121a2bf7d609671e32fa7369  gcc/testsuite/gcc.dg/Wframe-larger-than.c
! 2cbe255fb8526e8ca50c5dd883504ddd  gcc/testsuite/gcc.dg/Wfree-nonheap-object-2.c
  e273443a6f4eccf5890b6c4d46998324  gcc/testsuite/gcc.dg/Wfree-nonheap-object-3.c
! 15322620a340e31f77c3b61cdb0f6321  gcc/testsuite/gcc.dg/Wfree-nonheap-object-4.c
! bffa4b7686d94b14a3aff3c48fbcbcc6  gcc/testsuite/gcc.dg/Wfree-nonheap-object.c
  cb738b6ee3ce33cfd417ae097ee81f56  gcc/testsuite/gcc.dg/Wimplicit-fallthrough-1.c
  ae92a1d93725fe1a5989579c55f7c873  gcc/testsuite/gcc.dg/Wimplicit-function-declaration-c89-default.c
  b2f857eeba51813f44aa61785c849357  gcc/testsuite/gcc.dg/Wimplicit-function-declaration-c89-pedantic.c
--- 34978,34989 ----
  8d0791011fc11919d43bcce331d009ee  gcc/testsuite/gcc.dg/Wframe-larger-than-2.c
  ef08bcadd8d487914acf2e600b7cdba9  gcc/testsuite/gcc.dg/Wframe-larger-than-3.c
  c0d5151a121a2bf7d609671e32fa7369  gcc/testsuite/gcc.dg/Wframe-larger-than.c
! 3a0f812d190477f907dda347762facc8  gcc/testsuite/gcc.dg/Wfree-nonheap-object-2.c
  e273443a6f4eccf5890b6c4d46998324  gcc/testsuite/gcc.dg/Wfree-nonheap-object-3.c
! 1f871dc63d9bfee79601f4586343f709  gcc/testsuite/gcc.dg/Wfree-nonheap-object-4.c
! 469e7b8c90d9b200ae40cccf77711ce5  gcc/testsuite/gcc.dg/Wfree-nonheap-object-5.c
! c19a454bcf29265915e365069507e42a  gcc/testsuite/gcc.dg/Wfree-nonheap-object-6.c
! 0e3385327ea6f047857fb850694856e1  gcc/testsuite/gcc.dg/Wfree-nonheap-object.c
  cb738b6ee3ce33cfd417ae097ee81f56  gcc/testsuite/gcc.dg/Wimplicit-fallthrough-1.c
  ae92a1d93725fe1a5989579c55f7c873  gcc/testsuite/gcc.dg/Wimplicit-function-declaration-c89-default.c
  b2f857eeba51813f44aa61785c849357  gcc/testsuite/gcc.dg/Wimplicit-function-declaration-c89-pedantic.c
*************** ac1d198e2464fa90c280daa6cf4b9d41  gcc/te
*** 33853,33860 ****
--- 34996,35009 ----
  f8f5871d8419d984891017d51ef8e7ba  gcc/testsuite/gcc.dg/Wimplicit-int-4.c
  02fa446835e68b1fee242baf645a5191  gcc/testsuite/gcc.dg/Wincompatible-pointer-types-1.c
  aef2ea71e6f4f2975f702f53e97d2b41  gcc/testsuite/gcc.dg/Wincompatible-pointer-types.c
+ ec94ea91fd72e297720a4c000e43bf8b  gcc/testsuite/gcc.dg/Winfinite-recursion-2.c
+ 8014bc1f3e733c365d03e3b45305eae7  gcc/testsuite/gcc.dg/Winfinite-recursion-3.c
+ b2205067aa4bbb6400450a87e601c3f4  gcc/testsuite/gcc.dg/Winfinite-recursion-4.c
+ cabf796e8c41620ee0eb568ad7e759ba  gcc/testsuite/gcc.dg/Winfinite-recursion-5.c
+ 05bb3c5d451fe37624daecd880e38726  gcc/testsuite/gcc.dg/Winfinite-recursion.c
  6d0d608128d8809fe8e06f0cd06c58b7  gcc/testsuite/gcc.dg/Wint-conversion-2.c
  73a57349114b445c41ee7bcc15d3bd1b  gcc/testsuite/gcc.dg/Wint-conversion.c
+ 756b797936acd5f6c41a6d5ccfc696b9  gcc/testsuite/gcc.dg/Wint-in-bool-context-4.c
  74e00c0632715138d6110d495d44182c  gcc/testsuite/gcc.dg/Wjump-misses-init-1.c
  afe3ee2ad32e9663adf1bf0ad0d91263  gcc/testsuite/gcc.dg/Wjump-misses-init-2.c
  623d989fba31af9cb3c8d7eab5cb6b66  gcc/testsuite/gcc.dg/Wlarger-than.c
*************** afe3ee2ad32e9663adf1bf0ad0d91263  gcc/te
*** 33862,33869 ****
  9323a6a92dcf4c5b25b6c5bbd0d9345b  gcc/testsuite/gcc.dg/Wlarger-than3.c
  d79543b851bd31a8a690f71bf1604287  gcc/testsuite/gcc.dg/Wlarger-than4.c
  7a78b5f2f518e41ccc653581c0c185fa  gcc/testsuite/gcc.dg/Wlogical-op-1.c
! 5b9ea5a8d55eeba7c4e4fa9121f05ed9  gcc/testsuite/gcc.dg/Wmismatched-dealloc-2.c
! 059095539bcd6196f3b0457d59426e0d  gcc/testsuite/gcc.dg/Wmismatched-dealloc-3.c
  e9b43cdaccdcfde39febbc540e1b23a1  gcc/testsuite/gcc.dg/Wmismatched-dealloc.c
  a97f092c5509b2033f63d1931d689d9c  gcc/testsuite/gcc.dg/Wmissing-attributes.c
  4dffc6d38cc584021e126813104bef46  gcc/testsuite/gcc.dg/Wmissing-braces-fixits.c
--- 35011,35018 ----
  9323a6a92dcf4c5b25b6c5bbd0d9345b  gcc/testsuite/gcc.dg/Wlarger-than3.c
  d79543b851bd31a8a690f71bf1604287  gcc/testsuite/gcc.dg/Wlarger-than4.c
  7a78b5f2f518e41ccc653581c0c185fa  gcc/testsuite/gcc.dg/Wlogical-op-1.c
! 4a2614088f353615776e5318fc9c7439  gcc/testsuite/gcc.dg/Wmismatched-dealloc-2.c
! da32cf209aa8547c5bb5e6d2b201629f  gcc/testsuite/gcc.dg/Wmismatched-dealloc-3.c
  e9b43cdaccdcfde39febbc540e1b23a1  gcc/testsuite/gcc.dg/Wmismatched-dealloc.c
  a97f092c5509b2033f63d1931d689d9c  gcc/testsuite/gcc.dg/Wmissing-attributes.c
  4dffc6d38cc584021e126813104bef46  gcc/testsuite/gcc.dg/Wmissing-braces-fixits.c
*************** d45570f5347d0d2fceb2f46d5bb28195  gcc/te
*** 33888,33895 ****
  08895ef19d744c4f6c25826532c70aee  gcc/testsuite/gcc.dg/Wnonnull-4.c
  122d168a76610b5995ed8402529d4c4d  gcc/testsuite/gcc.dg/Wnonnull-5.c
  349ca7e23fb9ac66e9d5e90eeec2b9bc  gcc/testsuite/gcc.dg/Wnonnull-6.c
  12ac8bc4beaf9edbdf04979c8dfcb9e8  gcc/testsuite/gcc.dg/Wnonnull.c
! d7f40d768e2fdadb8ed5f332424b19cf  gcc/testsuite/gcc.dg/Wobjsize-1.c
  964f8252363c2458931200da17eaaa36  gcc/testsuite/gcc.dg/Wobjsize-1.h
  b92f8933f909c18a277ea167043b2847  gcc/testsuite/gcc.dg/Wold-style-definition-1.c
  8fa8c8f96ec9b62258e5040409f3e505  gcc/testsuite/gcc.dg/Wold-style-definition-2.c
--- 35037,35045 ----
  08895ef19d744c4f6c25826532c70aee  gcc/testsuite/gcc.dg/Wnonnull-4.c
  122d168a76610b5995ed8402529d4c4d  gcc/testsuite/gcc.dg/Wnonnull-5.c
  349ca7e23fb9ac66e9d5e90eeec2b9bc  gcc/testsuite/gcc.dg/Wnonnull-6.c
+ 80eac9b22b9d41ef2026f9a55a1c269c  gcc/testsuite/gcc.dg/Wnonnull-7.c
  12ac8bc4beaf9edbdf04979c8dfcb9e8  gcc/testsuite/gcc.dg/Wnonnull.c
! f3a584c667b58c927f9e96a3b3bf281d  gcc/testsuite/gcc.dg/Wobjsize-1.c
  964f8252363c2458931200da17eaaa36  gcc/testsuite/gcc.dg/Wobjsize-1.h
  b92f8933f909c18a277ea167043b2847  gcc/testsuite/gcc.dg/Wold-style-definition-1.c
  8fa8c8f96ec9b62258e5040409f3e505  gcc/testsuite/gcc.dg/Wold-style-definition-2.c
*************** cbcad025f9db9dd9bc691ef7d570b45a  gcc/te
*** 33954,33965 ****
  43d30678ba33cddb6c841bf40dfdd00d  gcc/testsuite/gcc.dg/Wrestrict-20.c
  430fc6af8946de5e86d8f7257f6fd392  gcc/testsuite/gcc.dg/Wrestrict-21.c
  d49a9b700850d16301f8a6b3602788e1  gcc/testsuite/gcc.dg/Wrestrict-22.c
  8419743602ff50406cde80f5966c551d  gcc/testsuite/gcc.dg/Wrestrict-3.c
  f2eda54521742f896f2566e9eb58a04d  gcc/testsuite/gcc.dg/Wrestrict-4.c
  f56e03be28331b4bfb167f5242de9f60  gcc/testsuite/gcc.dg/Wrestrict-5.c
  36417853230ae255ba34aed0d26d7ce9  gcc/testsuite/gcc.dg/Wrestrict-6.c
  fe0626428135706f333c543b692a92d1  gcc/testsuite/gcc.dg/Wrestrict-7.c
! ca4f1b5ab467df7523ff4071434ec4df  gcc/testsuite/gcc.dg/Wrestrict-8.c
  cea920b3a29300c471794198f93fc0a4  gcc/testsuite/gcc.dg/Wrestrict-9.c
  700e83815b3577c72420082462c3b61b  gcc/testsuite/gcc.dg/Wrestrict.c
  a03f514f500af8001574fcd81565c4f3  gcc/testsuite/gcc.dg/Wreturn-local-addr-10.c
--- 35104,35116 ----
  43d30678ba33cddb6c841bf40dfdd00d  gcc/testsuite/gcc.dg/Wrestrict-20.c
  430fc6af8946de5e86d8f7257f6fd392  gcc/testsuite/gcc.dg/Wrestrict-21.c
  d49a9b700850d16301f8a6b3602788e1  gcc/testsuite/gcc.dg/Wrestrict-22.c
+ d52443fd255ba4011445ce61fb9d6e29  gcc/testsuite/gcc.dg/Wrestrict-23.c
  8419743602ff50406cde80f5966c551d  gcc/testsuite/gcc.dg/Wrestrict-3.c
  f2eda54521742f896f2566e9eb58a04d  gcc/testsuite/gcc.dg/Wrestrict-4.c
  f56e03be28331b4bfb167f5242de9f60  gcc/testsuite/gcc.dg/Wrestrict-5.c
  36417853230ae255ba34aed0d26d7ce9  gcc/testsuite/gcc.dg/Wrestrict-6.c
  fe0626428135706f333c543b692a92d1  gcc/testsuite/gcc.dg/Wrestrict-7.c
! 6bb8b2cd496b8f89601290a8c4df6b12  gcc/testsuite/gcc.dg/Wrestrict-8.c
  cea920b3a29300c471794198f93fc0a4  gcc/testsuite/gcc.dg/Wrestrict-9.c
  700e83815b3577c72420082462c3b61b  gcc/testsuite/gcc.dg/Wrestrict.c
  a03f514f500af8001574fcd81565c4f3  gcc/testsuite/gcc.dg/Wreturn-local-addr-10.c
*************** bb2099f1da2a18a8306bbf5e15b7e411  gcc/te
*** 34028,34066 ****
  dca4d071a83223262a2d5fa630b1dce7  gcc/testsuite/gcc.dg/Wstrict-overflow-8.c
  c31d451fdf70251ea95a67385daae0da  gcc/testsuite/gcc.dg/Wstrict-overflow-9.c
  d16c4746f11d3c8c32ad67a5f38a857d  gcc/testsuite/gcc.dg/Wstring-compare-2.c
! 48bbf69aa65d298f7a9efb1da71474cf  gcc/testsuite/gcc.dg/Wstring-compare-3.c
! e887fe774c4998e55326ddafc6795bed  gcc/testsuite/gcc.dg/Wstring-compare.c
  b2ac295c001e28b6659dd1cbaecfc2a9  gcc/testsuite/gcc.dg/Wstring-literal-comparison-1.c
  c608f5d02a06d2e24d8ab0ca0d977f67  gcc/testsuite/gcc.dg/Wstring-literal-comparison-2.c
  a0b497dc1f8dc8ce49f81bc391f0deb1  gcc/testsuite/gcc.dg/Wstring-literal-comparison-3.c
  839fdbb04e93708d893f0f0e3f961ef5  gcc/testsuite/gcc.dg/Wstring-literal-comparison-4.c
  633e342b1f1848dfffdc4e7671a9e67d  gcc/testsuite/gcc.dg/Wstringop-overflow-10.c
! 571a6cfdad81bc7b1b2e9bd67b6a9973  gcc/testsuite/gcc.dg/Wstringop-overflow-11.c
! b37ad851100f4bbe9a93d013de6855e6  gcc/testsuite/gcc.dg/Wstringop-overflow-12.c
  678dd8795e2d4b71950da04a334572b3  gcc/testsuite/gcc.dg/Wstringop-overflow-13.c
! 577f745388a86398d56f13ea1f0206e2  gcc/testsuite/gcc.dg/Wstringop-overflow-14.c
! 5ae7d3be56041b88dcde3575ba0cd7d6  gcc/testsuite/gcc.dg/Wstringop-overflow-15.c
  e2fac449ae832c81aae5b9abe7514224  gcc/testsuite/gcc.dg/Wstringop-overflow-16.c
  d366ca5d83db48731bafe29064edaa87  gcc/testsuite/gcc.dg/Wstringop-overflow-17.c
  0a51125b45f5bb7eef06d222d474237a  gcc/testsuite/gcc.dg/Wstringop-overflow-18.c
  b5a3ffd63651849d688100d2798c30b6  gcc/testsuite/gcc.dg/Wstringop-overflow-19.c
  af4e5809f9266e2fb666c9460e41953b  gcc/testsuite/gcc.dg/Wstringop-overflow-2.c
  27fcd84b8007a626fab9afdda1e6539e  gcc/testsuite/gcc.dg/Wstringop-overflow-20.c
! 8c6011cc4d33e34f8175a3f1987b560e  gcc/testsuite/gcc.dg/Wstringop-overflow-21.c
! 0e40c3c68f4dd0be9285c294a2eff04f  gcc/testsuite/gcc.dg/Wstringop-overflow-22.c
  1f59494ebaecbe071a2c01d2905e2063  gcc/testsuite/gcc.dg/Wstringop-overflow-23.c
  c5b2dc2356fd5ccabe71e439d6ef62df  gcc/testsuite/gcc.dg/Wstringop-overflow-24.c
  b3c7a2a93013311f2a1426d17d94074d  gcc/testsuite/gcc.dg/Wstringop-overflow-25.c
  a12f3d3cadf20e360082b45e4281ddf9  gcc/testsuite/gcc.dg/Wstringop-overflow-26.c
  d75556624422f599c13c9d1a65bd84fb  gcc/testsuite/gcc.dg/Wstringop-overflow-27.c
! 5f31e355a7e7583abaf12963e0889e77  gcc/testsuite/gcc.dg/Wstringop-overflow-28.c
  d66169d9c9200a12f5a885f937a1f21c  gcc/testsuite/gcc.dg/Wstringop-overflow-29.c
  5d48ea7df70ba4f96d66951fae7159f6  gcc/testsuite/gcc.dg/Wstringop-overflow-3.c
  7c84e0c01a5c5e3d3007bf94ba654a0f  gcc/testsuite/gcc.dg/Wstringop-overflow-30.c
  cc8e118f33fe820b55d7576cd6e8fb7d  gcc/testsuite/gcc.dg/Wstringop-overflow-31.c
  668a5a1b6231cf303a907b7876c1f9af  gcc/testsuite/gcc.dg/Wstringop-overflow-32.c
  77fe78ac00612e3e71920645caa45a04  gcc/testsuite/gcc.dg/Wstringop-overflow-33.c
! 9439b755b18aadc5f72f353cc7600653  gcc/testsuite/gcc.dg/Wstringop-overflow-34.c
  13754b916e5864101bd91a8f527bcd2a  gcc/testsuite/gcc.dg/Wstringop-overflow-35.c
  5716c2c5f024632a181daf9fa118beda  gcc/testsuite/gcc.dg/Wstringop-overflow-36.c
  a9379e3d73fc65bf48db2f440d0394fb  gcc/testsuite/gcc.dg/Wstringop-overflow-37.c
--- 35179,35219 ----
  dca4d071a83223262a2d5fa630b1dce7  gcc/testsuite/gcc.dg/Wstrict-overflow-8.c
  c31d451fdf70251ea95a67385daae0da  gcc/testsuite/gcc.dg/Wstrict-overflow-9.c
  d16c4746f11d3c8c32ad67a5f38a857d  gcc/testsuite/gcc.dg/Wstring-compare-2.c
! f386e62f0368675c818d0680e43238c1  gcc/testsuite/gcc.dg/Wstring-compare-3.c
! 1af01381c92736dc6947178cfbe38286  gcc/testsuite/gcc.dg/Wstring-compare.c
  b2ac295c001e28b6659dd1cbaecfc2a9  gcc/testsuite/gcc.dg/Wstring-literal-comparison-1.c
  c608f5d02a06d2e24d8ab0ca0d977f67  gcc/testsuite/gcc.dg/Wstring-literal-comparison-2.c
  a0b497dc1f8dc8ce49f81bc391f0deb1  gcc/testsuite/gcc.dg/Wstring-literal-comparison-3.c
  839fdbb04e93708d893f0f0e3f961ef5  gcc/testsuite/gcc.dg/Wstring-literal-comparison-4.c
  633e342b1f1848dfffdc4e7671a9e67d  gcc/testsuite/gcc.dg/Wstringop-overflow-10.c
! d4ebbcbb33a270d753f43e4012923260  gcc/testsuite/gcc.dg/Wstringop-overflow-11.c
! 706f9847f02771a60abbc137daf8355c  gcc/testsuite/gcc.dg/Wstringop-overflow-12.c
  678dd8795e2d4b71950da04a334572b3  gcc/testsuite/gcc.dg/Wstringop-overflow-13.c
! 0179c40004be5b59c9a4f748ff9661b6  gcc/testsuite/gcc.dg/Wstringop-overflow-14-novec.c
! 186ad80a8f095556d07bc00e83284cde  gcc/testsuite/gcc.dg/Wstringop-overflow-14.c
! 188155d1d6f3e8cc47dbcf006992cf66  gcc/testsuite/gcc.dg/Wstringop-overflow-15.c
  e2fac449ae832c81aae5b9abe7514224  gcc/testsuite/gcc.dg/Wstringop-overflow-16.c
  d366ca5d83db48731bafe29064edaa87  gcc/testsuite/gcc.dg/Wstringop-overflow-17.c
  0a51125b45f5bb7eef06d222d474237a  gcc/testsuite/gcc.dg/Wstringop-overflow-18.c
  b5a3ffd63651849d688100d2798c30b6  gcc/testsuite/gcc.dg/Wstringop-overflow-19.c
  af4e5809f9266e2fb666c9460e41953b  gcc/testsuite/gcc.dg/Wstringop-overflow-2.c
  27fcd84b8007a626fab9afdda1e6539e  gcc/testsuite/gcc.dg/Wstringop-overflow-20.c
! 921a284bdb6779ad1d578d5c39075d94  gcc/testsuite/gcc.dg/Wstringop-overflow-21-novec.c
! 28c96f106316d71c7dd5095af52b221b  gcc/testsuite/gcc.dg/Wstringop-overflow-21.c
! d00eef9d0aed77761b640addfc8fd749  gcc/testsuite/gcc.dg/Wstringop-overflow-22.c
  1f59494ebaecbe071a2c01d2905e2063  gcc/testsuite/gcc.dg/Wstringop-overflow-23.c
  c5b2dc2356fd5ccabe71e439d6ef62df  gcc/testsuite/gcc.dg/Wstringop-overflow-24.c
  b3c7a2a93013311f2a1426d17d94074d  gcc/testsuite/gcc.dg/Wstringop-overflow-25.c
  a12f3d3cadf20e360082b45e4281ddf9  gcc/testsuite/gcc.dg/Wstringop-overflow-26.c
  d75556624422f599c13c9d1a65bd84fb  gcc/testsuite/gcc.dg/Wstringop-overflow-27.c
! bdc5f8ac56024c46170185bd122c67f5  gcc/testsuite/gcc.dg/Wstringop-overflow-28.c
  d66169d9c9200a12f5a885f937a1f21c  gcc/testsuite/gcc.dg/Wstringop-overflow-29.c
  5d48ea7df70ba4f96d66951fae7159f6  gcc/testsuite/gcc.dg/Wstringop-overflow-3.c
  7c84e0c01a5c5e3d3007bf94ba654a0f  gcc/testsuite/gcc.dg/Wstringop-overflow-30.c
  cc8e118f33fe820b55d7576cd6e8fb7d  gcc/testsuite/gcc.dg/Wstringop-overflow-31.c
  668a5a1b6231cf303a907b7876c1f9af  gcc/testsuite/gcc.dg/Wstringop-overflow-32.c
  77fe78ac00612e3e71920645caa45a04  gcc/testsuite/gcc.dg/Wstringop-overflow-33.c
! 234df61d673b6c618be4427b5b4833b6  gcc/testsuite/gcc.dg/Wstringop-overflow-34.c
  13754b916e5864101bd91a8f527bcd2a  gcc/testsuite/gcc.dg/Wstringop-overflow-35.c
  5716c2c5f024632a181daf9fa118beda  gcc/testsuite/gcc.dg/Wstringop-overflow-36.c
  a9379e3d73fc65bf48db2f440d0394fb  gcc/testsuite/gcc.dg/Wstringop-overflow-37.c
*************** e75c1027bb0b8f2c2697b6cee86bfd67  gcc/te
*** 34068,34080 ****
  ba118a95c99308209283d1459a41d71c  gcc/testsuite/gcc.dg/Wstringop-overflow-39.c
  975f320b4cadb606592c196f32d08f02  gcc/testsuite/gcc.dg/Wstringop-overflow-4.c
  a73c11cb63e83bca9055ba05c4e88b53  gcc/testsuite/gcc.dg/Wstringop-overflow-40.c
! 2bcf86ddb4cab5b647a6699c8dd586f5  gcc/testsuite/gcc.dg/Wstringop-overflow-41.c
! cedc6d362f1bd13505f6fdf4dcaa101f  gcc/testsuite/gcc.dg/Wstringop-overflow-42.c
! 575754f25245323aa2916c8b2f7bbf53  gcc/testsuite/gcc.dg/Wstringop-overflow-43.c
  855fbbdc3d5be4f2d0684e44e4fec515  gcc/testsuite/gcc.dg/Wstringop-overflow-44.c
  d4f0d56a7c087ab9e26e9e5b226957e0  gcc/testsuite/gcc.dg/Wstringop-overflow-45.c
! cc0f088dbb6a7164eecab4a65ac543a9  gcc/testsuite/gcc.dg/Wstringop-overflow-46.c
! 7ac6d0bbb8c05eac4c5a2e73f640cee7  gcc/testsuite/gcc.dg/Wstringop-overflow-47.c
  e47b31031fbcddf0625b2f4928216e92  gcc/testsuite/gcc.dg/Wstringop-overflow-49.c
  b6e551c9441e53cd1be6e84faec996ed  gcc/testsuite/gcc.dg/Wstringop-overflow-5.c
  8f7f0322c20d1913c505cfa93fc16056  gcc/testsuite/gcc.dg/Wstringop-overflow-50.c
--- 35221,35233 ----
  ba118a95c99308209283d1459a41d71c  gcc/testsuite/gcc.dg/Wstringop-overflow-39.c
  975f320b4cadb606592c196f32d08f02  gcc/testsuite/gcc.dg/Wstringop-overflow-4.c
  a73c11cb63e83bca9055ba05c4e88b53  gcc/testsuite/gcc.dg/Wstringop-overflow-40.c
! f5a92a0de23b213fa01a61cf7fe1ae34  gcc/testsuite/gcc.dg/Wstringop-overflow-41.c
! 821b72f6a2d7ff36c66054c60407ed95  gcc/testsuite/gcc.dg/Wstringop-overflow-42.c
! 44ba55c252b9e22566ae90f7cb83ae66  gcc/testsuite/gcc.dg/Wstringop-overflow-43.c
  855fbbdc3d5be4f2d0684e44e4fec515  gcc/testsuite/gcc.dg/Wstringop-overflow-44.c
  d4f0d56a7c087ab9e26e9e5b226957e0  gcc/testsuite/gcc.dg/Wstringop-overflow-45.c
! c491d7d16a5eccfc3aa26cb9789fb97e  gcc/testsuite/gcc.dg/Wstringop-overflow-46.c
! 45fc497eb7a6b33639764926221aeee9  gcc/testsuite/gcc.dg/Wstringop-overflow-47.c
  e47b31031fbcddf0625b2f4928216e92  gcc/testsuite/gcc.dg/Wstringop-overflow-49.c
  b6e551c9441e53cd1be6e84faec996ed  gcc/testsuite/gcc.dg/Wstringop-overflow-5.c
  8f7f0322c20d1913c505cfa93fc16056  gcc/testsuite/gcc.dg/Wstringop-overflow-50.c
*************** b6e551c9441e53cd1be6e84faec996ed  gcc/te
*** 34082,34110 ****
  c815b2efdf55c4de505762685ef71bc5  gcc/testsuite/gcc.dg/Wstringop-overflow-52.c
  3b40f9fa6398b4ac96d54b52985854c7  gcc/testsuite/gcc.dg/Wstringop-overflow-53.c
  0f7f0c6fd8115112808853d1769b2b23  gcc/testsuite/gcc.dg/Wstringop-overflow-54.c
! 81fa21cbbddfba979b4a6037e013769c  gcc/testsuite/gcc.dg/Wstringop-overflow-55.c
! 69fe355ae220e5f0eb451b036a3e7945  gcc/testsuite/gcc.dg/Wstringop-overflow-56.c
! c3428e5083743bc319eaa32eaa6d9a6a  gcc/testsuite/gcc.dg/Wstringop-overflow-57.c
! 4722c1c11d466b375de20aa8d4f1588b  gcc/testsuite/gcc.dg/Wstringop-overflow-58.c
! 6caa97f015a492b8ee0412091922238e  gcc/testsuite/gcc.dg/Wstringop-overflow-59.c
  3ed0228ee42fdeeee600954a398a1234  gcc/testsuite/gcc.dg/Wstringop-overflow-6.c
  7bbffc672c74ca8a522c2041f9deb5ee  gcc/testsuite/gcc.dg/Wstringop-overflow-60.c
! 13806369a45fb57dae28977cfc2ecadb  gcc/testsuite/gcc.dg/Wstringop-overflow-61.c
! ee38ba18b584e17241b5c4dbe845e71e  gcc/testsuite/gcc.dg/Wstringop-overflow-62.c
  5f5bbe8b13d63449ad123893fd334f76  gcc/testsuite/gcc.dg/Wstringop-overflow-63.c
  ca15ac122386ace1c5f64e5fc3ed9352  gcc/testsuite/gcc.dg/Wstringop-overflow-64.c
  ba09b89eacd1a1f030c52761621d27c3  gcc/testsuite/gcc.dg/Wstringop-overflow-65.c
  a8fd1d734e0d0078a564b6c6951f3f06  gcc/testsuite/gcc.dg/Wstringop-overflow-66.c
  11b9e3955ab46194825fbf5d88ba5648  gcc/testsuite/gcc.dg/Wstringop-overflow-7.c
  739ccb86ac13fef9cbd1d60df950a4b5  gcc/testsuite/gcc.dg/Wstringop-overflow-8.c
  949a031e65e64751dcadeeed6b8a8c28  gcc/testsuite/gcc.dg/Wstringop-overflow-86.c
  efc30ea8232c5270c8cbd61b0a271ef1  gcc/testsuite/gcc.dg/Wstringop-overflow-9.c
  f16f5c5471020dfe24813accb55a72a7  gcc/testsuite/gcc.dg/Wstringop-overflow.c
  82a023f65dab8d4e888e7b6af021dc1d  gcc/testsuite/gcc.dg/Wstringop-overread-2.c
  ce1a42317ef0bc7599074fc1fe734a77  gcc/testsuite/gcc.dg/Wstringop-overread-3.c
  2b88278edbf923406d84a3e78cb08c26  gcc/testsuite/gcc.dg/Wstringop-overread-4.c
  42b1936595b9e663e43d14172db8178e  gcc/testsuite/gcc.dg/Wstringop-overread-5.c
! 086cf53083b996ca149eb7632e452a82  gcc/testsuite/gcc.dg/Wstringop-overread.c
  77f8b46e5b817f35a15c273b28d5ea1d  gcc/testsuite/gcc.dg/Wstringop-truncation-2.c
  123dc9f0fa7c858d0a700362851787d2  gcc/testsuite/gcc.dg/Wstringop-truncation-3.c
  ac58f2a58734d632defb053d4fc5cd8d  gcc/testsuite/gcc.dg/Wstringop-truncation-4.c
--- 35235,35286 ----
  c815b2efdf55c4de505762685ef71bc5  gcc/testsuite/gcc.dg/Wstringop-overflow-52.c
  3b40f9fa6398b4ac96d54b52985854c7  gcc/testsuite/gcc.dg/Wstringop-overflow-53.c
  0f7f0c6fd8115112808853d1769b2b23  gcc/testsuite/gcc.dg/Wstringop-overflow-54.c
! d6150f5ba1aef3514d38e7a5a01653ad  gcc/testsuite/gcc.dg/Wstringop-overflow-55.c
! 905be5d529064227d2e09ad10a38f398  gcc/testsuite/gcc.dg/Wstringop-overflow-56.c
! 840970aec727bc77fadcd0bad194a8a0  gcc/testsuite/gcc.dg/Wstringop-overflow-57.c
! def8fa5a7aa6b0a519559905119bf281  gcc/testsuite/gcc.dg/Wstringop-overflow-58.c
! 22613036e156958906f37596c26645e1  gcc/testsuite/gcc.dg/Wstringop-overflow-59.c
  3ed0228ee42fdeeee600954a398a1234  gcc/testsuite/gcc.dg/Wstringop-overflow-6.c
  7bbffc672c74ca8a522c2041f9deb5ee  gcc/testsuite/gcc.dg/Wstringop-overflow-60.c
! 6939fabd511eb9944599e0b4a108d8a0  gcc/testsuite/gcc.dg/Wstringop-overflow-61.c
! 357bbe80d1d933328b212478cfbf9ef5  gcc/testsuite/gcc.dg/Wstringop-overflow-62.c
  5f5bbe8b13d63449ad123893fd334f76  gcc/testsuite/gcc.dg/Wstringop-overflow-63.c
  ca15ac122386ace1c5f64e5fc3ed9352  gcc/testsuite/gcc.dg/Wstringop-overflow-64.c
  ba09b89eacd1a1f030c52761621d27c3  gcc/testsuite/gcc.dg/Wstringop-overflow-65.c
  a8fd1d734e0d0078a564b6c6951f3f06  gcc/testsuite/gcc.dg/Wstringop-overflow-66.c
+ f8d04ac3706f96af6c35deaaed75b392  gcc/testsuite/gcc.dg/Wstringop-overflow-67.c
+ 4069be3dcec9446339f381f22f938667  gcc/testsuite/gcc.dg/Wstringop-overflow-68.c
+ 636cb80b9a0d85ca751860a46b67e5bc  gcc/testsuite/gcc.dg/Wstringop-overflow-69.c
  11b9e3955ab46194825fbf5d88ba5648  gcc/testsuite/gcc.dg/Wstringop-overflow-7.c
+ bbb13453f29603d2c3faec7a3eb4e8fd  gcc/testsuite/gcc.dg/Wstringop-overflow-70.c
+ e3d97a6508f4d604d5441795f29782a1  gcc/testsuite/gcc.dg/Wstringop-overflow-71.c
+ 098d5d40b31a6f640a37dfafc9993954  gcc/testsuite/gcc.dg/Wstringop-overflow-72.c
+ 14383b1a9ab3a03c52886c4a40773d53  gcc/testsuite/gcc.dg/Wstringop-overflow-73.c
+ b0f972d926e2d6705f2ea47fe4b1bd7b  gcc/testsuite/gcc.dg/Wstringop-overflow-74.c
+ 354b5d0689454f3a9a4e6013727ee65d  gcc/testsuite/gcc.dg/Wstringop-overflow-75.c
+ e6ffe67eda73c279da81f2954d29f8b8  gcc/testsuite/gcc.dg/Wstringop-overflow-76-novec.c
+ 8b9ee3f9b5ed6110014ee270714b2b8b  gcc/testsuite/gcc.dg/Wstringop-overflow-76.c
+ 03a0b9ce98ddbe5e0acbb8161687a53f  gcc/testsuite/gcc.dg/Wstringop-overflow-77.c
+ c5c975f39605e4a85aa40a031219c01d  gcc/testsuite/gcc.dg/Wstringop-overflow-78.c
+ 0cba250ab4526ce5b454dda455c90a6a  gcc/testsuite/gcc.dg/Wstringop-overflow-79.c
  739ccb86ac13fef9cbd1d60df950a4b5  gcc/testsuite/gcc.dg/Wstringop-overflow-8.c
+ de67b32c723a15710d834418c5cd7e3f  gcc/testsuite/gcc.dg/Wstringop-overflow-80.c
+ da2a9adabc979c4b3274e86fe4a6b9cf  gcc/testsuite/gcc.dg/Wstringop-overflow-81.c
+ 4d6b890161ef28d985439a82be4ea78b  gcc/testsuite/gcc.dg/Wstringop-overflow-82.c
+ 3cdf77bf40b7e45ac8eea773999e5b9b  gcc/testsuite/gcc.dg/Wstringop-overflow-83.c
+ af3b50877504362cbb1ccef9ff0f0400  gcc/testsuite/gcc.dg/Wstringop-overflow-84.c
+ 5010963b6bfeba1a7e4abe9b8b7522d2  gcc/testsuite/gcc.dg/Wstringop-overflow-85.c
  949a031e65e64751dcadeeed6b8a8c28  gcc/testsuite/gcc.dg/Wstringop-overflow-86.c
+ e2bd77542ae008c9402736b63e4a5343  gcc/testsuite/gcc.dg/Wstringop-overflow-87.c
+ 3becedb6b1d221ae76e4e6975376ea8b  gcc/testsuite/gcc.dg/Wstringop-overflow-88.c
  efc30ea8232c5270c8cbd61b0a271ef1  gcc/testsuite/gcc.dg/Wstringop-overflow-9.c
  f16f5c5471020dfe24813accb55a72a7  gcc/testsuite/gcc.dg/Wstringop-overflow.c
  82a023f65dab8d4e888e7b6af021dc1d  gcc/testsuite/gcc.dg/Wstringop-overread-2.c
  ce1a42317ef0bc7599074fc1fe734a77  gcc/testsuite/gcc.dg/Wstringop-overread-3.c
  2b88278edbf923406d84a3e78cb08c26  gcc/testsuite/gcc.dg/Wstringop-overread-4.c
  42b1936595b9e663e43d14172db8178e  gcc/testsuite/gcc.dg/Wstringop-overread-5.c
! 2a60502d5e73aa4d4f7ef9b994688f46  gcc/testsuite/gcc.dg/Wstringop-overread-6.c
! e75257ba3bef975cc6ef932c937358fd  gcc/testsuite/gcc.dg/Wstringop-overread.c
  77f8b46e5b817f35a15c273b28d5ea1d  gcc/testsuite/gcc.dg/Wstringop-truncation-2.c
  123dc9f0fa7c858d0a700362851787d2  gcc/testsuite/gcc.dg/Wstringop-truncation-3.c
  ac58f2a58734d632defb053d4fc5cd8d  gcc/testsuite/gcc.dg/Wstringop-truncation-4.c
*************** a13eb5b6d56da8e97b1f212cb86cf10e  gcc/te
*** 34146,34151 ****
--- 35322,35330 ----
  60507dbf641d9a6406e5d78edb6b1edf  gcc/testsuite/gcc.dg/Wunused-var-4.c
  e84c031d0cb7a11693c4b37f0142bded  gcc/testsuite/gcc.dg/Wunused-var-5.c
  6a41e2bb8df7e9d9c2dc7b7aa9fa559f  gcc/testsuite/gcc.dg/Wunused-var-6.c
+ 349cdcb7c52fd8473d2de9460bdbeecb  gcc/testsuite/gcc.dg/Wuse-after-free-2.c
+ 1451aa756e6066ce78c4abc8cdd5081c  gcc/testsuite/gcc.dg/Wuse-after-free-3.c
+ e6fbb87a8003326f83f635271804917e  gcc/testsuite/gcc.dg/Wuse-after-free.c
  285c7e1e346f5498c52fc3f2557e2f20  gcc/testsuite/gcc.dg/Wvla-1.c
  64bfeb26603a057e080b6ec9a2b39583  gcc/testsuite/gcc.dg/Wvla-2.c
  67cbf7c91a2b07bdea32b1bdef02001d  gcc/testsuite/gcc.dg/Wvla-3.c
*************** d82ccf26405a48ba48cf01a532ba9660  gcc/te
*** 34157,34166 ****
  c8849c136769b4d5fe441ab284b49719  gcc/testsuite/gcc.dg/Wvla-larger-than-2.c
  cfa79c0ccdb4661ab37d8dd91c0b69c2  gcc/testsuite/gcc.dg/Wvla-larger-than-3.c
  93fd4352fb385bc1039adcaf51e1723d  gcc/testsuite/gcc.dg/Wvla-larger-than-4.c
  d8079498555414ed8e20a1866a122002  gcc/testsuite/gcc.dg/Wvla-parameter-12.c
  b0cbf3f973ac6c7f66e3eabc7286596e  gcc/testsuite/gcc.dg/Wvla-parameter-13.c
! bb6bfe4639819fd02e238129b72af1c1  gcc/testsuite/gcc.dg/Wvla-parameter-2.c
! 62a2c486287bf98e7759d9a79900a83f  gcc/testsuite/gcc.dg/Wvla-parameter-3.c
  7b7fde0c88aeeb625320c956342a669d  gcc/testsuite/gcc.dg/Wvla-parameter-4.c
  c0135afc5269c6f871dc2d0d446ace02  gcc/testsuite/gcc.dg/Wvla-parameter-5.c
  9816fc98d7e0e6bfff4591725207d6f3  gcc/testsuite/gcc.dg/Wvla-parameter-6.c
--- 35336,35348 ----
  c8849c136769b4d5fe441ab284b49719  gcc/testsuite/gcc.dg/Wvla-larger-than-2.c
  cfa79c0ccdb4661ab37d8dd91c0b69c2  gcc/testsuite/gcc.dg/Wvla-larger-than-3.c
  93fd4352fb385bc1039adcaf51e1723d  gcc/testsuite/gcc.dg/Wvla-larger-than-4.c
+ 5cef60daebea549d1b0f5a44f8b69841  gcc/testsuite/gcc.dg/Wvla-larger-than-5.c
+ 85cf0a2e624dc3a384b0942d83569c18  gcc/testsuite/gcc.dg/Wvla-parameter-10.c
+ 10b737bfd12274eb6cf36110efb425e3  gcc/testsuite/gcc.dg/Wvla-parameter-11.c
  d8079498555414ed8e20a1866a122002  gcc/testsuite/gcc.dg/Wvla-parameter-12.c
  b0cbf3f973ac6c7f66e3eabc7286596e  gcc/testsuite/gcc.dg/Wvla-parameter-13.c
! d78811fe7cce70276c7b5e1eff5af29e  gcc/testsuite/gcc.dg/Wvla-parameter-2.c
! 84426447172d5f7e335b761dafb7aa5a  gcc/testsuite/gcc.dg/Wvla-parameter-3.c
  7b7fde0c88aeeb625320c956342a669d  gcc/testsuite/gcc.dg/Wvla-parameter-4.c
  c0135afc5269c6f871dc2d0d446ace02  gcc/testsuite/gcc.dg/Wvla-parameter-5.c
  9816fc98d7e0e6bfff4591725207d6f3  gcc/testsuite/gcc.dg/Wvla-parameter-6.c
*************** c0135afc5269c6f871dc2d0d446ace02  gcc/te
*** 34169,34177 ****
  61db3569f87675cf18aa9ec737d4482e  gcc/testsuite/gcc.dg/Wvla-parameter-9.c
  719e8d0d3ef2404f3da8959ccf484f95  gcc/testsuite/gcc.dg/Wvla-parameter.c
  5fffb57610eb1fa0134cbf5e15786d2f  gcc/testsuite/gcc.dg/Wwrite-strings-1.c
! cae758f0744109b377d852d3f70c4bb4  gcc/testsuite/gcc.dg/Wzero-length-array-bounds-2.c
  fdd470d58568d2da9fbf935b7a830003  gcc/testsuite/gcc.dg/Wzero-length-array-bounds.c
  ba877f8bb7ef9b285db351d83d2d0fa3  gcc/testsuite/gcc.dg/absu.c
  6635be8a44d0fb2136fde83d328e24a8  gcc/testsuite/gcc.dg/addr_builtin-1.c
  21ad05f6b9ac6c5ce3a6111aba633586  gcc/testsuite/gcc.dg/addr_equal-1.c
  30a7d179045c9dfbeaf77863c9a666ee  gcc/testsuite/gcc.dg/alias-1.c
--- 35351,35361 ----
  61db3569f87675cf18aa9ec737d4482e  gcc/testsuite/gcc.dg/Wvla-parameter-9.c
  719e8d0d3ef2404f3da8959ccf484f95  gcc/testsuite/gcc.dg/Wvla-parameter.c
  5fffb57610eb1fa0134cbf5e15786d2f  gcc/testsuite/gcc.dg/Wwrite-strings-1.c
! 2c1df90fdfff3161d9b25eb34c52ba47  gcc/testsuite/gcc.dg/Wzero-length-array-bounds-2-novec.c
! 0d34355156e16f914866f763a54d03cb  gcc/testsuite/gcc.dg/Wzero-length-array-bounds-2.c
  fdd470d58568d2da9fbf935b7a830003  gcc/testsuite/gcc.dg/Wzero-length-array-bounds.c
  ba877f8bb7ef9b285db351d83d2d0fa3  gcc/testsuite/gcc.dg/absu.c
+ ac5d23bd8b84607e06f4682d24c54e96  gcc/testsuite/gcc.dg/add-mul-overflow-1.c
  6635be8a44d0fb2136fde83d328e24a8  gcc/testsuite/gcc.dg/addr_builtin-1.c
  21ad05f6b9ac6c5ce3a6111aba633586  gcc/testsuite/gcc.dg/addr_equal-1.c
  30a7d179045c9dfbeaf77863c9a666ee  gcc/testsuite/gcc.dg/alias-1.c
*************** e2a64f56410868c5eb66cd68651eeef9  gcc/te
*** 34187,34193 ****
  a4dc0f78c6e8859ac3aee7cea562abb5  gcc/testsuite/gcc.dg/alias-4.c
  a015fbd6293bb654de6f42847beb62d6  gcc/testsuite/gcc.dg/alias-5.c
  eb4dade8877d21e8bb08fe3851d63835  gcc/testsuite/gcc.dg/alias-6.c
! d8688a64bc8e859cafb656af61814d25  gcc/testsuite/gcc.dg/alias-7.c
  c148e43fbd3ce61f45f61644f6b622c8  gcc/testsuite/gcc.dg/alias-8.c
  ab3955f55aa596a98faf0528f22b1d0c  gcc/testsuite/gcc.dg/alias-9.c
  b87d726d798335bcf014c51ea61e9a4c  gcc/testsuite/gcc.dg/align-1.c
--- 35371,35377 ----
  a4dc0f78c6e8859ac3aee7cea562abb5  gcc/testsuite/gcc.dg/alias-4.c
  a015fbd6293bb654de6f42847beb62d6  gcc/testsuite/gcc.dg/alias-5.c
  eb4dade8877d21e8bb08fe3851d63835  gcc/testsuite/gcc.dg/alias-6.c
! cd343ee1d84558c4670f117bdd3d9ad2  gcc/testsuite/gcc.dg/alias-7.c
  c148e43fbd3ce61f45f61644f6b622c8  gcc/testsuite/gcc.dg/alias-8.c
  ab3955f55aa596a98faf0528f22b1d0c  gcc/testsuite/gcc.dg/alias-9.c
  b87d726d798335bcf014c51ea61e9a4c  gcc/testsuite/gcc.dg/align-1.c
*************** f69e8cd9fd4e56cc65e71a4dfef997a4  gcc/te
*** 34205,34236 ****
  ae69c46005567e7d1eb865066adcb226  gcc/testsuite/gcc.dg/analyzer/abs-1.c
  ca39a9bcc32da0de969872e39eec2dcb  gcc/testsuite/gcc.dg/analyzer/aliasing-1.c
  21ccef1b042617794f28392a02c47c2e  gcc/testsuite/gcc.dg/analyzer/aliasing-2.c
  18fc2a84aecda4ede234a6de9d8690c2  gcc/testsuite/gcc.dg/analyzer/alloca-leak.c
! dd4df85fe659db1378fda61d87434683  gcc/testsuite/gcc.dg/analyzer/analyzer-decls.h
  90dda8fe240a90810c6e1ceac986f94d  gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-0.c
  4a550fb2a3d0da71845491af53126fc1  gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-1.c
  4af04acb904167afb9365e7d69bb67d7  gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-2.c
! 49f34d122be90ac08b79866dc15f776d  gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-2a.c
  91071d4bdc9f508d03823383cfe8302a  gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-3.c
! 936c1358c732a05bab2a8932de0b6544  gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-3a.c
! 0b1c654ffdac2437b7967e0cd8585abe  gcc/testsuite/gcc.dg/analyzer/analyzer.exp
! 3d758ecb74d0d9588a9ab65677c2ad84  gcc/testsuite/gcc.dg/analyzer/attr-malloc-1.c
  b4515e65ed785bcd07a7162f6ccb804a  gcc/testsuite/gcc.dg/analyzer/attr-malloc-2.c
  046d0c0ef6b5715f28a641d19c38b314  gcc/testsuite/gcc.dg/analyzer/attr-malloc-4.c
  52c21034354662dddfd5114d1e6b1126  gcc/testsuite/gcc.dg/analyzer/attr-malloc-5.c
  243c8e733d93a30f1b96b68044c19782  gcc/testsuite/gcc.dg/analyzer/attr-malloc-6.c
  35f38fdea541935448e811384d026d07  gcc/testsuite/gcc.dg/analyzer/attr-malloc-CVE-2019-19078-usb-leak.c
  bccece796597d19d1f7a0fea1ecd1d5c  gcc/testsuite/gcc.dg/analyzer/attr-malloc-misuses.c
  86a8afc40e3c3f447547c16cf1afd633  gcc/testsuite/gcc.dg/analyzer/attribute-nonnull.c
  215f65c0f414779a43cca081e7a96b0b  gcc/testsuite/gcc.dg/analyzer/bitfields-1.c
  de1c3d5d0b46c866fdd4ebeca363175b  gcc/testsuite/gcc.dg/analyzer/bzero-1.c
  2a6fd4b0596437c81584911234e358fe  gcc/testsuite/gcc.dg/analyzer/bzip2-arg-parse-1.c
  768424351f1b238f53407ec9bb29e126  gcc/testsuite/gcc.dg/analyzer/call-summaries-1.c
  a99cd9f5718c9d37aee6aee0294cc872  gcc/testsuite/gcc.dg/analyzer/callbacks-1.c
  0b7fa83ab4d00972ea110527aa160a26  gcc/testsuite/gcc.dg/analyzer/callbacks-2.c
  054c975de1ad550bc0b3a3000890f5ab  gcc/testsuite/gcc.dg/analyzer/callbacks-3.c
! 4a02cf452d655d2580f80ad2a8f4ae53  gcc/testsuite/gcc.dg/analyzer/casts-1.c
  079606c0ec9f4acfbec886c8a9bf1f97  gcc/testsuite/gcc.dg/analyzer/casts-2.c
  2faef601592f61931a6a0fa8bf058245  gcc/testsuite/gcc.dg/analyzer/combined-conditionals-1.c
  0b52169dbc3123d514322d16dd4277af  gcc/testsuite/gcc.dg/analyzer/compound-assignment-1.c
  a60083781c2444fc0afb93119adde9cd  gcc/testsuite/gcc.dg/analyzer/compound-assignment-2.c
--- 35389,35438 ----
  ae69c46005567e7d1eb865066adcb226  gcc/testsuite/gcc.dg/analyzer/abs-1.c
  ca39a9bcc32da0de969872e39eec2dcb  gcc/testsuite/gcc.dg/analyzer/aliasing-1.c
  21ccef1b042617794f28392a02c47c2e  gcc/testsuite/gcc.dg/analyzer/aliasing-2.c
+ 32fde96ad42a02a24edc6a02b1226299  gcc/testsuite/gcc.dg/analyzer/aliasing-3.c
  18fc2a84aecda4ede234a6de9d8690c2  gcc/testsuite/gcc.dg/analyzer/alloca-leak.c
! f77fcc9ffd92ab717a2d6107303723f5  gcc/testsuite/gcc.dg/analyzer/analyzer-decls.h
  90dda8fe240a90810c6e1ceac986f94d  gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-0.c
  4a550fb2a3d0da71845491af53126fc1  gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-1.c
  4af04acb904167afb9365e7d69bb67d7  gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-2.c
! 6f13c48d287fe59d52b17e51ccd6fca9  gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-2a.c
  91071d4bdc9f508d03823383cfe8302a  gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-3.c
! ddd318f0d7ec18cf56dba10884be8c19  gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-3a.c
! f0abf39d853f4de954184bd7ca42952a  gcc/testsuite/gcc.dg/analyzer/analyzer.exp
! fc965261104eb781f63faa0fe5a3d7b1  gcc/testsuite/gcc.dg/analyzer/asm-x86-1.c
! 7145b6f3637a739ae894c4e1ebe7ee08  gcc/testsuite/gcc.dg/analyzer/asm-x86-dyndbg-1.c
! 2d9b7a44f7c158100d74ae0014a15577  gcc/testsuite/gcc.dg/analyzer/asm-x86-dyndbg-2.c
! d780518e28005b87079c2be1a96dab0e  gcc/testsuite/gcc.dg/analyzer/asm-x86-lp64-1.c
! a4b48a92bf5c5ed1b18d749eccdb9e3a  gcc/testsuite/gcc.dg/analyzer/asm-x86-lp64-2.c
! c41899060576b47d99e59ea79b7abcf5  gcc/testsuite/gcc.dg/analyzer/attr-const-1.c
! a0b2e2cd9950584a2520f1fcc3f0968d  gcc/testsuite/gcc.dg/analyzer/attr-const-2.c
! 6b887f043f42b25927fbf3734691e148  gcc/testsuite/gcc.dg/analyzer/attr-const-3.c
! 7e04586dfdf34765be05ca4a006473a3  gcc/testsuite/gcc.dg/analyzer/attr-malloc-1.c
  b4515e65ed785bcd07a7162f6ccb804a  gcc/testsuite/gcc.dg/analyzer/attr-malloc-2.c
  046d0c0ef6b5715f28a641d19c38b314  gcc/testsuite/gcc.dg/analyzer/attr-malloc-4.c
  52c21034354662dddfd5114d1e6b1126  gcc/testsuite/gcc.dg/analyzer/attr-malloc-5.c
  243c8e733d93a30f1b96b68044c19782  gcc/testsuite/gcc.dg/analyzer/attr-malloc-6.c
  35f38fdea541935448e811384d026d07  gcc/testsuite/gcc.dg/analyzer/attr-malloc-CVE-2019-19078-usb-leak.c
  bccece796597d19d1f7a0fea1ecd1d5c  gcc/testsuite/gcc.dg/analyzer/attr-malloc-misuses.c
+ 7a814ea917099316d0741d5799a472f0  gcc/testsuite/gcc.dg/analyzer/attr-tainted_args-1.c
+ 3f7d3cba520a26c38c50f22274b6c413  gcc/testsuite/gcc.dg/analyzer/attr-tainted_args-misuses.c
  86a8afc40e3c3f447547c16cf1afd633  gcc/testsuite/gcc.dg/analyzer/attribute-nonnull.c
  215f65c0f414779a43cca081e7a96b0b  gcc/testsuite/gcc.dg/analyzer/bitfields-1.c
+ 9a9ee4011d51982118bd3982ddc26b5e  gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c
  de1c3d5d0b46c866fdd4ebeca363175b  gcc/testsuite/gcc.dg/analyzer/bzero-1.c
  2a6fd4b0596437c81584911234e358fe  gcc/testsuite/gcc.dg/analyzer/bzip2-arg-parse-1.c
  768424351f1b238f53407ec9bb29e126  gcc/testsuite/gcc.dg/analyzer/call-summaries-1.c
  a99cd9f5718c9d37aee6aee0294cc872  gcc/testsuite/gcc.dg/analyzer/callbacks-1.c
  0b7fa83ab4d00972ea110527aa160a26  gcc/testsuite/gcc.dg/analyzer/callbacks-2.c
  054c975de1ad550bc0b3a3000890f5ab  gcc/testsuite/gcc.dg/analyzer/callbacks-3.c
! 2c6557a5341ec3d7722179773a3a315f  gcc/testsuite/gcc.dg/analyzer/calloc-1.c
! 2f05fa08e6cfadef4f032f92d90fc335  gcc/testsuite/gcc.dg/analyzer/capacity-1.c
! 70268e9d3be18e97a3643aa3d912c1a1  gcc/testsuite/gcc.dg/analyzer/capacity-2.c
! 0ac37e462c4c78f67a1c354ffba96eaf  gcc/testsuite/gcc.dg/analyzer/capacity-3.c
! 66aa74c6297ad1a2026f455611b0a4fc  gcc/testsuite/gcc.dg/analyzer/casts-1.c
  079606c0ec9f4acfbec886c8a9bf1f97  gcc/testsuite/gcc.dg/analyzer/casts-2.c
+ cef5e3bcdf11b82aa8bc65b81170878f  gcc/testsuite/gcc.dg/analyzer/clobbers-1.c
+ cdf915de6aa445e00b8a320d8b7b09dc  gcc/testsuite/gcc.dg/analyzer/clobbers-2.c
  2faef601592f61931a6a0fa8bf058245  gcc/testsuite/gcc.dg/analyzer/combined-conditionals-1.c
  0b52169dbc3123d514322d16dd4277af  gcc/testsuite/gcc.dg/analyzer/compound-assignment-1.c
  a60083781c2444fc0afb93119adde9cd  gcc/testsuite/gcc.dg/analyzer/compound-assignment-2.c
*************** ea761a32a87e7dd14f7f4d83472c0e79  gcc/te
*** 34240,34246 ****
  a9211e3f54bc8dd31aed70c7c3f9b905  gcc/testsuite/gcc.dg/analyzer/conditionals-3.c
  1c0a20304d7da2a80255211819446599  gcc/testsuite/gcc.dg/analyzer/conditionals-notrans.c
  8cfdc88c0b5a96aa0b303a5409085dfc  gcc/testsuite/gcc.dg/analyzer/conditionals-trans.c
! d86cdc24948cfce0feb2f9da58ce6331  gcc/testsuite/gcc.dg/analyzer/data-model-1.c
  fbf171c2475c36b54306b4fa689eee97  gcc/testsuite/gcc.dg/analyzer/data-model-10.c
  6c6fdb499c22eb058dcbea40374d2696  gcc/testsuite/gcc.dg/analyzer/data-model-11.c
  9117b1e1f037bbea1974142b15b71ebf  gcc/testsuite/gcc.dg/analyzer/data-model-12.c
--- 35442,35448 ----
  a9211e3f54bc8dd31aed70c7c3f9b905  gcc/testsuite/gcc.dg/analyzer/conditionals-3.c
  1c0a20304d7da2a80255211819446599  gcc/testsuite/gcc.dg/analyzer/conditionals-notrans.c
  8cfdc88c0b5a96aa0b303a5409085dfc  gcc/testsuite/gcc.dg/analyzer/conditionals-trans.c
! 5e1eac67b9b0fb99867b15785509dc37  gcc/testsuite/gcc.dg/analyzer/data-model-1.c
  fbf171c2475c36b54306b4fa689eee97  gcc/testsuite/gcc.dg/analyzer/data-model-10.c
  6c6fdb499c22eb058dcbea40374d2696  gcc/testsuite/gcc.dg/analyzer/data-model-11.c
  9117b1e1f037bbea1974142b15b71ebf  gcc/testsuite/gcc.dg/analyzer/data-model-12.c
*************** fbf171c2475c36b54306b4fa689eee97  gcc/te
*** 34252,34259 ****
  41986412fcfd0857f096ced958eeadf1  gcc/testsuite/gcc.dg/analyzer/data-model-18.c
  7eb55f055f46c9020d8e30ecaf87a8ec  gcc/testsuite/gcc.dg/analyzer/data-model-19.c
  4553c74241f2cd9efbf26371de99807d  gcc/testsuite/gcc.dg/analyzer/data-model-2.c
! b3d1205c18024feae48af7ea2263b10a  gcc/testsuite/gcc.dg/analyzer/data-model-20.c
  1a7244f30f830702369a54bb48fc8aef  gcc/testsuite/gcc.dg/analyzer/data-model-21.c
  99c2999efefff19cb59bd84ab2498758  gcc/testsuite/gcc.dg/analyzer/data-model-23.c
  e7daf7589a18b2ab24bdc2f3f62367d5  gcc/testsuite/gcc.dg/analyzer/data-model-4.c
  ec77a3f181dddb102f833affeab3f86a  gcc/testsuite/gcc.dg/analyzer/data-model-5.c
--- 35454,35462 ----
  41986412fcfd0857f096ced958eeadf1  gcc/testsuite/gcc.dg/analyzer/data-model-18.c
  7eb55f055f46c9020d8e30ecaf87a8ec  gcc/testsuite/gcc.dg/analyzer/data-model-19.c
  4553c74241f2cd9efbf26371de99807d  gcc/testsuite/gcc.dg/analyzer/data-model-2.c
! e5cb255db014dc57d570bbe1561719b2  gcc/testsuite/gcc.dg/analyzer/data-model-20.c
  1a7244f30f830702369a54bb48fc8aef  gcc/testsuite/gcc.dg/analyzer/data-model-21.c
+ 167e706d53055dd18733c241608420b2  gcc/testsuite/gcc.dg/analyzer/data-model-22.c
  99c2999efefff19cb59bd84ab2498758  gcc/testsuite/gcc.dg/analyzer/data-model-23.c
  e7daf7589a18b2ab24bdc2f3f62367d5  gcc/testsuite/gcc.dg/analyzer/data-model-4.c
  ec77a3f181dddb102f833affeab3f86a  gcc/testsuite/gcc.dg/analyzer/data-model-5.c
*************** e9598af7814c9b574008795653746252  gcc/te
*** 34270,34308 ****
  0ec3d38b15165ad7732c142bfbb0329f  gcc/testsuite/gcc.dg/analyzer/double-free-lto-1-a.c
  5da5e08e5a3b9fac183936207016118f  gcc/testsuite/gcc.dg/analyzer/double-free-lto-1-b.c
  9bd730005568e90798a30108ba063dd2  gcc/testsuite/gcc.dg/analyzer/double-free-lto-1.h
! 6d17b9b60da13df7ebd7b19f81cc43a3  gcc/testsuite/gcc.dg/analyzer/edges-1.c
  5349560ff6dd31c0631eedd6b00658ee  gcc/testsuite/gcc.dg/analyzer/edges-2.c
  cd58bff2b56161f01ab9307737cbe5dd  gcc/testsuite/gcc.dg/analyzer/equivalence.c
  7a41edb146e30ff88645faff41cd6660  gcc/testsuite/gcc.dg/analyzer/error-1.c
  959242e188dc1726d5f00627897522c2  gcc/testsuite/gcc.dg/analyzer/error-2.c
  c5de56a4561f064e270ee358ffb7aa30  gcc/testsuite/gcc.dg/analyzer/error-3.c
  a5f30efaea21fb670c8c02fcd0a225ba  gcc/testsuite/gcc.dg/analyzer/expect-1.c
! 795627eea0b935f0c9c3b36f636d9a99  gcc/testsuite/gcc.dg/analyzer/explode-1.c
! 4ea0cc97a9fb5644dbe8324c68757243  gcc/testsuite/gcc.dg/analyzer/explode-2.c
  8a65bc460ebfced6ab82065135e57d26  gcc/testsuite/gcc.dg/analyzer/factorial.c
  c67fd7150c48c2cbde13c569af42d724  gcc/testsuite/gcc.dg/analyzer/feasibility-1.c
  00d15989662428086fefe3003fd1d85d  gcc/testsuite/gcc.dg/analyzer/feasibility-2.c
  0d6e01df673fded93678160ef3f843e9  gcc/testsuite/gcc.dg/analyzer/fibonacci.c
! 8377f2dd6fe8a11668e28671ad01ffe4  gcc/testsuite/gcc.dg/analyzer/fields.c
! f743a2cf23b8153fcd2ae2ff3c1405d3  gcc/testsuite/gcc.dg/analyzer/file-1.c
! e9d3699471cb51251871aeac21fb74ac  gcc/testsuite/gcc.dg/analyzer/file-2.c
  4d1005ccd0e2c6b96780497a29dc930f  gcc/testsuite/gcc.dg/analyzer/file-3.c
! c04f42892bc69046879362bd3dafd510  gcc/testsuite/gcc.dg/analyzer/file-paths-1.c
! c9f76d12c82b804f1293bf80c42d98c8  gcc/testsuite/gcc.dg/analyzer/file-pr58237.c
  20d65cfa29c33455231b4036f2cf5708  gcc/testsuite/gcc.dg/analyzer/first-field-1.c
  205728a949c258519a4725538e6f2dd9  gcc/testsuite/gcc.dg/analyzer/first-field-2.c
  e02f4f3f73df89227f8853a4206f0cad  gcc/testsuite/gcc.dg/analyzer/function-ptr-1.c
! 3c5d45b92c6abb855743843f006dea85  gcc/testsuite/gcc.dg/analyzer/function-ptr-2.c
  6a55e6868fb6e1f3a4844412e8ad9f93  gcc/testsuite/gcc.dg/analyzer/function-ptr-3.c
  1e42bf8a97fe52a292508ac165061fc7  gcc/testsuite/gcc.dg/analyzer/getchar-1.c
  cd629fc9b87516508b6418bde7e6512b  gcc/testsuite/gcc.dg/analyzer/gzio-2.c
! 7d1b6662384f920fc830afc797151100  gcc/testsuite/gcc.dg/analyzer/gzio-3.c
! c2840f0bce03aedaccec84de418cdc83  gcc/testsuite/gcc.dg/analyzer/gzio-3a.c
  95ad79e96dde48a914a9588f08788b19  gcc/testsuite/gcc.dg/analyzer/gzio.c
  a2174c9e3aefc65ef7370280cd66e38b  gcc/testsuite/gcc.dg/analyzer/infinite-recursion.c
  28a2c270aa1b745766369de60cee0f7c  gcc/testsuite/gcc.dg/analyzer/init.c
  7a48058aaf7419920b16429c67d04982  gcc/testsuite/gcc.dg/analyzer/invalid-shift-1.c
  094b1340efd825baefc9ac68d2865171  gcc/testsuite/gcc.dg/analyzer/leak-2.c
  9b630a4b5d2445a17f5fcc0d2d08b96b  gcc/testsuite/gcc.dg/analyzer/loop-0-up-to-n-by-1-with-iter-obj.c
  ccff25473fa2d7eb6b31302f8757af2e  gcc/testsuite/gcc.dg/analyzer/loop-0-up-to-n-by-1.c
  e7d3ac631bcaca30613f84fbe2cfae3f  gcc/testsuite/gcc.dg/analyzer/loop-2.c
--- 35473,35521 ----
  0ec3d38b15165ad7732c142bfbb0329f  gcc/testsuite/gcc.dg/analyzer/double-free-lto-1-a.c
  5da5e08e5a3b9fac183936207016118f  gcc/testsuite/gcc.dg/analyzer/double-free-lto-1-b.c
  9bd730005568e90798a30108ba063dd2  gcc/testsuite/gcc.dg/analyzer/double-free-lto-1.h
! 8ea34a719fd27f31787cfb7f8ff38940  gcc/testsuite/gcc.dg/analyzer/dump-state.c
! 101f9021149cc564f0ca9fb761c01032  gcc/testsuite/gcc.dg/analyzer/edges-1.c
  5349560ff6dd31c0631eedd6b00658ee  gcc/testsuite/gcc.dg/analyzer/edges-2.c
  cd58bff2b56161f01ab9307737cbe5dd  gcc/testsuite/gcc.dg/analyzer/equivalence.c
  7a41edb146e30ff88645faff41cd6660  gcc/testsuite/gcc.dg/analyzer/error-1.c
  959242e188dc1726d5f00627897522c2  gcc/testsuite/gcc.dg/analyzer/error-2.c
  c5de56a4561f064e270ee358ffb7aa30  gcc/testsuite/gcc.dg/analyzer/error-3.c
+ f336bce0a86a089cef98497358794093  gcc/testsuite/gcc.dg/analyzer/escaping-1.c
  a5f30efaea21fb670c8c02fcd0a225ba  gcc/testsuite/gcc.dg/analyzer/expect-1.c
! fcf118c836d3e0314fa725f5f6a9a5cd  gcc/testsuite/gcc.dg/analyzer/explode-1.c
! 10d31dc45c3f21fbd96aa46492473138  gcc/testsuite/gcc.dg/analyzer/explode-2.c
! 0924e466b64c157716b9918defbc3848  gcc/testsuite/gcc.dg/analyzer/explode-2a.c
  8a65bc460ebfced6ab82065135e57d26  gcc/testsuite/gcc.dg/analyzer/factorial.c
  c67fd7150c48c2cbde13c569af42d724  gcc/testsuite/gcc.dg/analyzer/feasibility-1.c
  00d15989662428086fefe3003fd1d85d  gcc/testsuite/gcc.dg/analyzer/feasibility-2.c
+ 1ecf4969c7b67421cceea02a7cfb7e0b  gcc/testsuite/gcc.dg/analyzer/feasibility-3.c
+ b4ae76ed4a7c1a97bdbfd34c861b3338  gcc/testsuite/gcc.dg/analyzer/fgets-1.c
  0d6e01df673fded93678160ef3f843e9  gcc/testsuite/gcc.dg/analyzer/fibonacci.c
! 2e05a981243c5494d6a9ea0b4514acc7  gcc/testsuite/gcc.dg/analyzer/fields.c
! b96aa952b9e9493745143747fbb4ca86  gcc/testsuite/gcc.dg/analyzer/file-1.c
! b29483f2758f47b95759473be5a64ba6  gcc/testsuite/gcc.dg/analyzer/file-2.c
  4d1005ccd0e2c6b96780497a29dc930f  gcc/testsuite/gcc.dg/analyzer/file-3.c
! 60112ba55cc527ed2f374a5469b8bb21  gcc/testsuite/gcc.dg/analyzer/file-paths-1.c
! d915eedeb695b8593d6c7101dd8eeea5  gcc/testsuite/gcc.dg/analyzer/file-pr58237.c
  20d65cfa29c33455231b4036f2cf5708  gcc/testsuite/gcc.dg/analyzer/first-field-1.c
  205728a949c258519a4725538e6f2dd9  gcc/testsuite/gcc.dg/analyzer/first-field-2.c
+ b56e6fc2ffb4fe410aeca9754005de9b  gcc/testsuite/gcc.dg/analyzer/fread-1.c
+ 4f24d2c6cf1a7ea65c4721e2a5b02c15  gcc/testsuite/gcc.dg/analyzer/fread-2.c
  e02f4f3f73df89227f8853a4206f0cad  gcc/testsuite/gcc.dg/analyzer/function-ptr-1.c
! 65a4362aae50033f7c6b13c2daab548c  gcc/testsuite/gcc.dg/analyzer/function-ptr-2.c
  6a55e6868fb6e1f3a4844412e8ad9f93  gcc/testsuite/gcc.dg/analyzer/function-ptr-3.c
+ b2879bf88ff165ec7fcf358bfa0851f9  gcc/testsuite/gcc.dg/analyzer/function-ptr-4.c
  1e42bf8a97fe52a292508ac165061fc7  gcc/testsuite/gcc.dg/analyzer/getchar-1.c
  cd629fc9b87516508b6418bde7e6512b  gcc/testsuite/gcc.dg/analyzer/gzio-2.c
! fda86ff25535c945555b6fc4c394a45e  gcc/testsuite/gcc.dg/analyzer/gzio-3.c
! 826438f921dddc8033a63027fd6280aa  gcc/testsuite/gcc.dg/analyzer/gzio-3a.c
  95ad79e96dde48a914a9588f08788b19  gcc/testsuite/gcc.dg/analyzer/gzio.c
  a2174c9e3aefc65ef7370280cd66e38b  gcc/testsuite/gcc.dg/analyzer/infinite-recursion.c
  28a2c270aa1b745766369de60cee0f7c  gcc/testsuite/gcc.dg/analyzer/init.c
  7a48058aaf7419920b16429c67d04982  gcc/testsuite/gcc.dg/analyzer/invalid-shift-1.c
  094b1340efd825baefc9ac68d2865171  gcc/testsuite/gcc.dg/analyzer/leak-2.c
+ 862c513838cce7710b72958de0e089e7  gcc/testsuite/gcc.dg/analyzer/leak-3.c
+ 70c3b4e23da4264b5547a8adf9a264d6  gcc/testsuite/gcc.dg/analyzer/leak-4.c
  9b630a4b5d2445a17f5fcc0d2d08b96b  gcc/testsuite/gcc.dg/analyzer/loop-0-up-to-n-by-1-with-iter-obj.c
  ccff25473fa2d7eb6b31302f8757af2e  gcc/testsuite/gcc.dg/analyzer/loop-0-up-to-n-by-1.c
  e7d3ac631bcaca30613f84fbe2cfae3f  gcc/testsuite/gcc.dg/analyzer/loop-2.c
*************** e7d3ac631bcaca30613f84fbe2cfae3f  gcc/te
*** 34315,34326 ****
  8ad1b0087276cc9cb69d159e668f8e0f  gcc/testsuite/gcc.dg/analyzer/loop-start-to-end-by-step.c
  a338db9e662a64be9acd7699f6b8f480  gcc/testsuite/gcc.dg/analyzer/loop-start-up-to-end-by-1.c
  bac89c08a695635d761a021615d9e74e  gcc/testsuite/gcc.dg/analyzer/loop.c
! 81e073aeefb95d2569eae992eccc97e2  gcc/testsuite/gcc.dg/analyzer/malloc-1.c
  016c3c7250e597b255e646086af41c0d  gcc/testsuite/gcc.dg/analyzer/malloc-2.c
  9de3ac19ac5e83db9dc669b5ded16421  gcc/testsuite/gcc.dg/analyzer/malloc-3.c
  2b64001dfbd8f6e02b57086866f713a5  gcc/testsuite/gcc.dg/analyzer/malloc-4.c
  a0bcfa3badd49dd40ba6ca4b9c4af6e3  gcc/testsuite/gcc.dg/analyzer/malloc-5.c
! 05416e600ebee9c3e0688b9ab257266f  gcc/testsuite/gcc.dg/analyzer/malloc-callbacks.c
  212fdabc9998e80319bb376300f15a4c  gcc/testsuite/gcc.dg/analyzer/malloc-dce.c
  a0baef29e471a23f4b1d85765e6c323a  gcc/testsuite/gcc.dg/analyzer/malloc-dedupe-1.c
  98d6716096afb847d597604ce1dd4ebc  gcc/testsuite/gcc.dg/analyzer/malloc-in-loop.c
--- 35528,35539 ----
  8ad1b0087276cc9cb69d159e668f8e0f  gcc/testsuite/gcc.dg/analyzer/loop-start-to-end-by-step.c
  a338db9e662a64be9acd7699f6b8f480  gcc/testsuite/gcc.dg/analyzer/loop-start-up-to-end-by-1.c
  bac89c08a695635d761a021615d9e74e  gcc/testsuite/gcc.dg/analyzer/loop.c
! ad0fd753458919d0e77f4a31fc95eda2  gcc/testsuite/gcc.dg/analyzer/malloc-1.c
  016c3c7250e597b255e646086af41c0d  gcc/testsuite/gcc.dg/analyzer/malloc-2.c
  9de3ac19ac5e83db9dc669b5ded16421  gcc/testsuite/gcc.dg/analyzer/malloc-3.c
  2b64001dfbd8f6e02b57086866f713a5  gcc/testsuite/gcc.dg/analyzer/malloc-4.c
  a0bcfa3badd49dd40ba6ca4b9c4af6e3  gcc/testsuite/gcc.dg/analyzer/malloc-5.c
! c606c5eea506dc27983a3a924100f88c  gcc/testsuite/gcc.dg/analyzer/malloc-callbacks.c
  212fdabc9998e80319bb376300f15a4c  gcc/testsuite/gcc.dg/analyzer/malloc-dce.c
  a0baef29e471a23f4b1d85765e6c323a  gcc/testsuite/gcc.dg/analyzer/malloc-dedupe-1.c
  98d6716096afb847d597604ce1dd4ebc  gcc/testsuite/gcc.dg/analyzer/malloc-in-loop.c
*************** c70af2073448635855d144cc02268df7  gcc/te
*** 34357,34371 ****
  c0512edf80944ffafce5cf9e1f06c2ee  gcc/testsuite/gcc.dg/analyzer/malloc-paths-5.c
  54fdccce21f567ce613c24d9a16b1593  gcc/testsuite/gcc.dg/analyzer/malloc-paths-6.c
  601cd4c7b73ebb6e97b3bda99e6bea6b  gcc/testsuite/gcc.dg/analyzer/malloc-paths-7.c
! 3969fbaaf8932e239565d3c47d853692  gcc/testsuite/gcc.dg/analyzer/malloc-paths-8.c
  6cc81ee18fb6d2aecab26207acd6c349  gcc/testsuite/gcc.dg/analyzer/malloc-paths-9.c
  8261cb8449d54e0382dc64b74d46d2c0  gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1a.c
  b5bb321785e7bea5388cb2b64e173213  gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1b.c
  d464c105278a3135eece0b536dfddef1  gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-2.c
  d612c4dbe9f34c8b84f01f0c3b2c896f  gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-3.c
  79dc7e451e8ed0274f282b8d09979e95  gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-4.c
! 89b234c7a25eca3d9b5ca536ea353da4  gcc/testsuite/gcc.dg/analyzer/memcpy-1.c
! b9b1ecda7d18d3f9e093eaade3bfdc9f  gcc/testsuite/gcc.dg/analyzer/memset-1.c
  aaddc4b9a407ce80be75f1c757af9df4  gcc/testsuite/gcc.dg/analyzer/operations.c
  7c6c9ed633de8bd71c9e5bf5ec95ceb7  gcc/testsuite/gcc.dg/analyzer/params-2.c
  7cc16c21f19526f1926009cff6d0e22f  gcc/testsuite/gcc.dg/analyzer/params.c
--- 35570,35588 ----
  c0512edf80944ffafce5cf9e1f06c2ee  gcc/testsuite/gcc.dg/analyzer/malloc-paths-5.c
  54fdccce21f567ce613c24d9a16b1593  gcc/testsuite/gcc.dg/analyzer/malloc-paths-6.c
  601cd4c7b73ebb6e97b3bda99e6bea6b  gcc/testsuite/gcc.dg/analyzer/malloc-paths-7.c
! 16ddee2fac1ab9a0fbc3731f7cd52b2e  gcc/testsuite/gcc.dg/analyzer/malloc-paths-8.c
  6cc81ee18fb6d2aecab26207acd6c349  gcc/testsuite/gcc.dg/analyzer/malloc-paths-9.c
  8261cb8449d54e0382dc64b74d46d2c0  gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1a.c
  b5bb321785e7bea5388cb2b64e173213  gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-1b.c
  d464c105278a3135eece0b536dfddef1  gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-2.c
  d612c4dbe9f34c8b84f01f0c3b2c896f  gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-3.c
  79dc7e451e8ed0274f282b8d09979e95  gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-4.c
! 6ccd146a06cc2ba54e9f0262c6f28597  gcc/testsuite/gcc.dg/analyzer/many-disabled-diagnostics.c
! a9a24860ed497a76f830a117a460b2ec  gcc/testsuite/gcc.dg/analyzer/many-unused-locals.c
! 145ed1a412b6387db33ed9536ecc69e8  gcc/testsuite/gcc.dg/analyzer/memcpy-1.c
! 039e14e5522dc7ae2630c4abefa8173f  gcc/testsuite/gcc.dg/analyzer/memset-1.c
! 669fd539af0a545567f25d8aa7b91bd0  gcc/testsuite/gcc.dg/analyzer/memset-2.c
! 2785076373883719abdd8e35f6e8606b  gcc/testsuite/gcc.dg/analyzer/memset-CVE-2017-18549-1.c
  aaddc4b9a407ce80be75f1c757af9df4  gcc/testsuite/gcc.dg/analyzer/operations.c
  7c6c9ed633de8bd71c9e5bf5ec95ceb7  gcc/testsuite/gcc.dg/analyzer/params-2.c
  7cc16c21f19526f1926009cff6d0e22f  gcc/testsuite/gcc.dg/analyzer/params.c
*************** e743e8bda033473fcaea2882346cd62e  gcc/te
*** 34379,34413 ****
  58de178e30758a2cbc22f446455554a1  gcc/testsuite/gcc.dg/analyzer/paths-7.c
  5d0ae057d107f23b1484b5e6f2032230  gcc/testsuite/gcc.dg/analyzer/paths-8.c
  b818695de20677346ff28a3913c7b163  gcc/testsuite/gcc.dg/analyzer/pattern-test-1.c
! bdfc84bbf5e13810fd8696c1956e6639  gcc/testsuite/gcc.dg/analyzer/pattern-test-2.c
  8704d0b888bfd7cbf5c7f8dfbb9f5610  gcc/testsuite/gcc.dg/analyzer/pointer-merging.c
  3f583dbde80b3efe12b65cefa6758f9f  gcc/testsuite/gcc.dg/analyzer/pr100011.c
  e0e00f8ff65a3533430a5abc47af4315  gcc/testsuite/gcc.dg/analyzer/pr100615.c
! 7bab391201f50e8d8fb6965f76c3af60  gcc/testsuite/gcc.dg/analyzer/pr101962.c
  4d9dda4c090b351e888380f256fdf703  gcc/testsuite/gcc.dg/analyzer/pr61861.c
  3b715088546567d4c2cc30cc26417f11  gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-simplified.c
! 9198ebbc5c221a40b5e3d9c3b8dfadad  gcc/testsuite/gcc.dg/analyzer/pr93032-mztools.c
  ddd38a6cae93f735290778e9e2854548  gcc/testsuite/gcc.dg/analyzer/pr93290.c
  571c9ec61e278add06ca460a7d410139  gcc/testsuite/gcc.dg/analyzer/pr93352.c
  78f6a2bac494d559babbd8d3edebe61a  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility-2.c
  d4232896f839f8b1b10297172b034331  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility-3.c
! 2bdba09142e4e808f4a5922c1d58f0c5  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility.c
  34c8a40339a82547bfbde334593d1f9a  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-simplified.c
  0ddb73cbb7d38d16a36e6ec4f7fc183e  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias.c
  a593341d1b08c788e70141f3755b74a7  gcc/testsuite/gcc.dg/analyzer/pr93375.c
! 8004661c4d744c3fb9a808f9349b3fff  gcc/testsuite/gcc.dg/analyzer/pr93382.c
  8865edf8f256b0fc34c1ce3be6c823d2  gcc/testsuite/gcc.dg/analyzer/pr93457.c
  87cc4e2cb508a70da43eb0d9e6c83cd9  gcc/testsuite/gcc.dg/analyzer/pr93546.c
  9d197d56580541ddcf5a28595b6fcd8a  gcc/testsuite/gcc.dg/analyzer/pr93547.c
  dc22921b1f8adf04e247fd77f0e4622d  gcc/testsuite/gcc.dg/analyzer/pr93669.c
  6c8c208f91e712fb856e8b40b7a757c1  gcc/testsuite/gcc.dg/analyzer/pr93695-1.c
  d092c910db92eea5975a648161bb95f1  gcc/testsuite/gcc.dg/analyzer/pr93938.c
! 53fbbd0134bcc70f28d3359778b0af59  gcc/testsuite/gcc.dg/analyzer/pr94047.c
  872037e09757aa86b694f245b71c154d  gcc/testsuite/gcc.dg/analyzer/pr94099.c
  76559ba88816dd3d385d56090dd3e037  gcc/testsuite/gcc.dg/analyzer/pr94105.c
  2b860df7bd7544da2d884a29b5b8270b  gcc/testsuite/gcc.dg/analyzer/pr94399.c
  9c96000a1a0a853d0179d8fd11c65e55  gcc/testsuite/gcc.dg/analyzer/pr94447.c
  e5b15ee45fe6adafc7624ced3274120b  gcc/testsuite/gcc.dg/analyzer/pr94458.c
  0c775d0f9074e6cf5558982e3f78d348  gcc/testsuite/gcc.dg/analyzer/pr94596.c
  1be53c5b37cf4078b3541a25345038a4  gcc/testsuite/gcc.dg/analyzer/pr94639.c
  fd0f492f05905f9735a1c3fb5aba65e2  gcc/testsuite/gcc.dg/analyzer/pr94640.c
--- 35596,35676 ----
  58de178e30758a2cbc22f446455554a1  gcc/testsuite/gcc.dg/analyzer/paths-7.c
  5d0ae057d107f23b1484b5e6f2032230  gcc/testsuite/gcc.dg/analyzer/paths-8.c
  b818695de20677346ff28a3913c7b163  gcc/testsuite/gcc.dg/analyzer/pattern-test-1.c
! de88cc940a155308bb436a246da730b9  gcc/testsuite/gcc.dg/analyzer/pattern-test-2.c
! 9cb68fed0c8d449d4662e8c12866a2f9  gcc/testsuite/gcc.dg/analyzer/phi-1.c
! 08c8643d827be311b98875441004c1ab  gcc/testsuite/gcc.dg/analyzer/phi-2.c
  8704d0b888bfd7cbf5c7f8dfbb9f5610  gcc/testsuite/gcc.dg/analyzer/pointer-merging.c
  3f583dbde80b3efe12b65cefa6758f9f  gcc/testsuite/gcc.dg/analyzer/pr100011.c
+ 2a829c368b1b687fbe16de043fb0b895  gcc/testsuite/gcc.dg/analyzer/pr100546.c
  e0e00f8ff65a3533430a5abc47af4315  gcc/testsuite/gcc.dg/analyzer/pr100615.c
! 62c29c74bff34938d246ad62ccf4f5ac  gcc/testsuite/gcc.dg/analyzer/pr101143.c
! 30e835c53c7baf5d03ea63776d856b43  gcc/testsuite/gcc.dg/analyzer/pr101503.c
! 0504e7622f87684dd7dcb0b7516b76bb  gcc/testsuite/gcc.dg/analyzer/pr101547.c
! 67f1876dabdfe679ca73c0ea199f4d5a  gcc/testsuite/gcc.dg/analyzer/pr101570.c
! d7fdd42f2b44dc1e43a9f30292acc743  gcc/testsuite/gcc.dg/analyzer/pr101721.c
! 8e16196108463716a2cfc4f344af5d64  gcc/testsuite/gcc.dg/analyzer/pr101837.c
! 55f06fbd95d33996a3b032d659a86aac  gcc/testsuite/gcc.dg/analyzer/pr101875.c
! 1b447e5ae01d885666f0f8ccb0aaaf74  gcc/testsuite/gcc.dg/analyzer/pr101962.c
! 60b2a5e408979c204812ee09c755be9d  gcc/testsuite/gcc.dg/analyzer/pr101983-main.c
! 9af3fc4e1a3e5925599c434e4d8ec749  gcc/testsuite/gcc.dg/analyzer/pr101983-not-main.c
! e84f664468060451e3cb304c75cea3d6  gcc/testsuite/gcc.dg/analyzer/pr102692-2.c
! 7eea22d259719a44f082976446139ac0  gcc/testsuite/gcc.dg/analyzer/pr102695.c
! f9a946d0a888655a1f29a16de6bf45ab  gcc/testsuite/gcc.dg/analyzer/pr103217-2.c
! ad50af17d1dfc4b00965c6c82364bf7d  gcc/testsuite/gcc.dg/analyzer/pr103217-3.c
! 89328508480588c2f80fa5160078a764  gcc/testsuite/gcc.dg/analyzer/pr103217-4.c
! 682c85a8b33655e8e6969f2b149c32c6  gcc/testsuite/gcc.dg/analyzer/pr103217-5.c
! e4770f9374ec5c6abb03702adbb1453c  gcc/testsuite/gcc.dg/analyzer/pr103217.c
! dcc4c6bd6d83e4936d09cdeae09d3666  gcc/testsuite/gcc.dg/analyzer/pr103526.c
! cfd3f0c9f53b040ab3ea2a88856d3a72  gcc/testsuite/gcc.dg/analyzer/pr103892.c
! 7a58cd43a2a659fa092cdd52995bac99  gcc/testsuite/gcc.dg/analyzer/pr104029.c
! 4b6bcda7fd7ddd782af1e52f3db973fe  gcc/testsuite/gcc.dg/analyzer/pr104062.c
! b37b97c145c4e03b92cc527ed777ccc3  gcc/testsuite/gcc.dg/analyzer/pr104089.c
! d54f32a5ce7fc98376feb14d2a9894d2  gcc/testsuite/gcc.dg/analyzer/pr104224.c
! 2476fa0b2e91faf3777b4bf56eaf8ea9  gcc/testsuite/gcc.dg/analyzer/pr104308.c
! bf6a963459611cfe7f4b6014800f6b70  gcc/testsuite/gcc.dg/analyzer/pr104369-1.c
! 2377091a5eb83285a6c4c67beda4dfc6  gcc/testsuite/gcc.dg/analyzer/pr104369-2.c
! 193bbc40b5d1663602f78ebcf3ec7d09  gcc/testsuite/gcc.dg/analyzer/pr104417.c
! 740583ce32547a8d87a3cd63946b90f2  gcc/testsuite/gcc.dg/analyzer/pr104434-const.c
! bd08c3118e654f97ec8726f35f798dfe  gcc/testsuite/gcc.dg/analyzer/pr104434-nonconst.c
! 0eae8bc57da919ca1bbfbe4b5652153e  gcc/testsuite/gcc.dg/analyzer/pr104434.h
! 3dfd74edcc351f3dff957bcaadb54f2c  gcc/testsuite/gcc.dg/analyzer/pr104452.c
! 42995504c3a9b54cbe98514bec88a47e  gcc/testsuite/gcc.dg/analyzer/pr104524.c
! 9f88d9ad0d5d0c458ae8f1fe6079c8f5  gcc/testsuite/gcc.dg/analyzer/pr104560-1.c
! 7335c8c3d4d1cf3d8915f83b7e5c549e  gcc/testsuite/gcc.dg/analyzer/pr104560-2.c
! 20851e8be3d1f3da1cf23c165c453e68  gcc/testsuite/gcc.dg/analyzer/pr105074.c
! ff3edd5d7ef8daa0dbc4754f1e087dea  gcc/testsuite/gcc.dg/analyzer/pr105087-1.c
! 31e66e50ca6137c903edb9a5f1c33bb8  gcc/testsuite/gcc.dg/analyzer/pr105087-2.c
! 7db1771ee016e8eff4a7d43565e82ac4  gcc/testsuite/gcc.dg/analyzer/pr105252.c
! 7ec8beca5852bf5760ba785d3b75d3e5  gcc/testsuite/gcc.dg/analyzer/pr105365.c
! 9c9974fbe8ddd03c7a3dd80e2127e20d  gcc/testsuite/gcc.dg/analyzer/pr105366.c
  4d9dda4c090b351e888380f256fdf703  gcc/testsuite/gcc.dg/analyzer/pr61861.c
+ 242590eedae3d5fb56d59f94b5ce9dbf  gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-signed-char.c
  3b715088546567d4c2cc30cc26417f11  gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-simplified.c
! 562df96159e2b65ad173b44da3227274  gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-unsigned-char.c
  ddd38a6cae93f735290778e9e2854548  gcc/testsuite/gcc.dg/analyzer/pr93290.c
  571c9ec61e278add06ca460a7d410139  gcc/testsuite/gcc.dg/analyzer/pr93352.c
  78f6a2bac494d559babbd8d3edebe61a  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility-2.c
  d4232896f839f8b1b10297172b034331  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility-3.c
! 886770a134200e9f837705535ed475a3  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility.c
  34c8a40339a82547bfbde334593d1f9a  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-simplified.c
  0ddb73cbb7d38d16a36e6ec4f7fc183e  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias.c
  a593341d1b08c788e70141f3755b74a7  gcc/testsuite/gcc.dg/analyzer/pr93375.c
! 9c87eeb676e9d387f0a455fb77c42242  gcc/testsuite/gcc.dg/analyzer/pr93382.c
  8865edf8f256b0fc34c1ce3be6c823d2  gcc/testsuite/gcc.dg/analyzer/pr93457.c
  87cc4e2cb508a70da43eb0d9e6c83cd9  gcc/testsuite/gcc.dg/analyzer/pr93546.c
  9d197d56580541ddcf5a28595b6fcd8a  gcc/testsuite/gcc.dg/analyzer/pr93547.c
  dc22921b1f8adf04e247fd77f0e4622d  gcc/testsuite/gcc.dg/analyzer/pr93669.c
  6c8c208f91e712fb856e8b40b7a757c1  gcc/testsuite/gcc.dg/analyzer/pr93695-1.c
  d092c910db92eea5975a648161bb95f1  gcc/testsuite/gcc.dg/analyzer/pr93938.c
! d562f145d761d598c4cf5d581b61e546  gcc/testsuite/gcc.dg/analyzer/pr94047.c
  872037e09757aa86b694f245b71c154d  gcc/testsuite/gcc.dg/analyzer/pr94099.c
  76559ba88816dd3d385d56090dd3e037  gcc/testsuite/gcc.dg/analyzer/pr94105.c
+ b21eff0f44ad6505379993b9408fb518  gcc/testsuite/gcc.dg/analyzer/pr94362-1.c
+ 26e11daef97e39d6db3d2431e8863ce9  gcc/testsuite/gcc.dg/analyzer/pr94362-2.c
  2b860df7bd7544da2d884a29b5b8270b  gcc/testsuite/gcc.dg/analyzer/pr94399.c
  9c96000a1a0a853d0179d8fd11c65e55  gcc/testsuite/gcc.dg/analyzer/pr94447.c
  e5b15ee45fe6adafc7624ced3274120b  gcc/testsuite/gcc.dg/analyzer/pr94458.c
+ 92ed6522f4d8b7a542dd38a2a929c2e4  gcc/testsuite/gcc.dg/analyzer/pr94579.c
  0c775d0f9074e6cf5558982e3f78d348  gcc/testsuite/gcc.dg/analyzer/pr94596.c
  1be53c5b37cf4078b3541a25345038a4  gcc/testsuite/gcc.dg/analyzer/pr94639.c
  fd0f492f05905f9735a1c3fb5aba65e2  gcc/testsuite/gcc.dg/analyzer/pr94640.c
*************** fd0f492f05905f9735a1c3fb5aba65e2  gcc/te
*** 34417,34427 ****
  0026c538f0e20f37842630fe25b7d4c0  gcc/testsuite/gcc.dg/analyzer/pr94754.c
  0556ddfd9dd826211ba6a53ea757ed52  gcc/testsuite/gcc.dg/analyzer/pr94839.c
  d11c1fff0713538d5e1cb409bf0ccb85  gcc/testsuite/gcc.dg/analyzer/pr94851-1.c
! a9fbffc5e38669e3c83b48e66c7dfa47  gcc/testsuite/gcc.dg/analyzer/pr94851-2.c
  9ea2ed915597b6c25fabf8d6beb5fffd  gcc/testsuite/gcc.dg/analyzer/pr94851-3.c
  e25cdbeef846ec06d9e2bc17cf57bb2b  gcc/testsuite/gcc.dg/analyzer/pr94851-4.c
! 625c8ff23ceec5d99faa9d1e9eaff558  gcc/testsuite/gcc.dg/analyzer/pr94858-1.c
  620f1057b370b6e564abca5a9e79231d  gcc/testsuite/gcc.dg/analyzer/pr94858-2.c
  de6895701db3c05fb80ecd2032f4075f  gcc/testsuite/gcc.dg/analyzer/pr95026.c
  da360e3b0e9156b732e2cd7f740dacb8  gcc/testsuite/gcc.dg/analyzer/pr95152-4.c
  174c15d3dd4d02fbcfb284b9da683c75  gcc/testsuite/gcc.dg/analyzer/pr95152-5.c
--- 35680,35691 ----
  0026c538f0e20f37842630fe25b7d4c0  gcc/testsuite/gcc.dg/analyzer/pr94754.c
  0556ddfd9dd826211ba6a53ea757ed52  gcc/testsuite/gcc.dg/analyzer/pr94839.c
  d11c1fff0713538d5e1cb409bf0ccb85  gcc/testsuite/gcc.dg/analyzer/pr94851-1.c
! eae76672134a123479373b9f9bbac641  gcc/testsuite/gcc.dg/analyzer/pr94851-2.c
  9ea2ed915597b6c25fabf8d6beb5fffd  gcc/testsuite/gcc.dg/analyzer/pr94851-3.c
  e25cdbeef846ec06d9e2bc17cf57bb2b  gcc/testsuite/gcc.dg/analyzer/pr94851-4.c
! 5706bdced6988827930712af70d3cd5c  gcc/testsuite/gcc.dg/analyzer/pr94858-1.c
  620f1057b370b6e564abca5a9e79231d  gcc/testsuite/gcc.dg/analyzer/pr94858-2.c
+ f538c8eccbeef559ece3b2f12e4a65e8  gcc/testsuite/gcc.dg/analyzer/pr95000-1.c
  de6895701db3c05fb80ecd2032f4075f  gcc/testsuite/gcc.dg/analyzer/pr95026.c
  da360e3b0e9156b732e2cd7f740dacb8  gcc/testsuite/gcc.dg/analyzer/pr95152-4.c
  174c15d3dd4d02fbcfb284b9da683c75  gcc/testsuite/gcc.dg/analyzer/pr95152-5.c
*************** e1cc82ec2de0b3a6c6717f542456a7f7  gcc/te
*** 34442,34452 ****
  d777926cfd1375880c4f587b8ba11656  gcc/testsuite/gcc.dg/analyzer/pr96653.c
  93d3de68df9d3d71a9a39d6fc15caaee  gcc/testsuite/gcc.dg/analyzer/pr96699.c
  59b287a3143a88ac8698f48e67bca083  gcc/testsuite/gcc.dg/analyzer/pr96705.c
! 67da9ec38c31a6847b0a534944782b5e  gcc/testsuite/gcc.dg/analyzer/pr96713.c
  24a97b42d46668731e6aa353b0a87964  gcc/testsuite/gcc.dg/analyzer/pr96764.c
  054ab1c927a55fe5f67ab96348c0bfac  gcc/testsuite/gcc.dg/analyzer/pr96777.c
  3675cea43058febb213ff4846d03855f  gcc/testsuite/gcc.dg/analyzer/pr96792.c
! 1f77532b62ff4656e5c8af026fbcbe52  gcc/testsuite/gcc.dg/analyzer/pr96841.c
  ec51c705859096428ddf0f549b1d2378  gcc/testsuite/gcc.dg/analyzer/pr96860-1.c
  b67ccef1b701357aa6aefedbaa975f0e  gcc/testsuite/gcc.dg/analyzer/pr96860-2.c
  5839d172a96605828b373470e9bcf285  gcc/testsuite/gcc.dg/analyzer/pr97029.c
--- 35706,35716 ----
  d777926cfd1375880c4f587b8ba11656  gcc/testsuite/gcc.dg/analyzer/pr96653.c
  93d3de68df9d3d71a9a39d6fc15caaee  gcc/testsuite/gcc.dg/analyzer/pr96699.c
  59b287a3143a88ac8698f48e67bca083  gcc/testsuite/gcc.dg/analyzer/pr96705.c
! 4ca9c431f41a72254ed6c43b62aa8ddb  gcc/testsuite/gcc.dg/analyzer/pr96713.c
  24a97b42d46668731e6aa353b0a87964  gcc/testsuite/gcc.dg/analyzer/pr96764.c
  054ab1c927a55fe5f67ab96348c0bfac  gcc/testsuite/gcc.dg/analyzer/pr96777.c
  3675cea43058febb213ff4846d03855f  gcc/testsuite/gcc.dg/analyzer/pr96792.c
! e604e08fb12bb423df63eacb82d3dafa  gcc/testsuite/gcc.dg/analyzer/pr96841.c
  ec51c705859096428ddf0f549b1d2378  gcc/testsuite/gcc.dg/analyzer/pr96860-1.c
  b67ccef1b701357aa6aefedbaa975f0e  gcc/testsuite/gcc.dg/analyzer/pr96860-2.c
  5839d172a96605828b373470e9bcf285  gcc/testsuite/gcc.dg/analyzer/pr97029.c
*************** bd0446dc7bfc92ba7fa31dec5245fdc8  gcc/te
*** 34466,34490 ****
  ec3f6b6ab51e286be338a54b446589e9  gcc/testsuite/gcc.dg/analyzer/pr98580-b.c
  e30ab4cce96a744448409fe77f3c5efa  gcc/testsuite/gcc.dg/analyzer/pr98599-a.c
  b8dedb68ebd6efc83061dc56ccf05a12  gcc/testsuite/gcc.dg/analyzer/pr98599-b.c
! 237849dd5408542078d3548b6b0df88d  gcc/testsuite/gcc.dg/analyzer/pr98628.c
  a139a65f55f3b94f92a93d5819d999ff  gcc/testsuite/gcc.dg/analyzer/pr98918.c
! 2f332992660e2dbdaae244db1650e97b  gcc/testsuite/gcc.dg/analyzer/pr98969.c
! 57df4107e960a57eca633b3a56ad53c0  gcc/testsuite/gcc.dg/analyzer/pr99042.c
  db49279a7bbbbb8a7993d65e3a0ed602  gcc/testsuite/gcc.dg/analyzer/pr99044-1.c
  7197855d9b8070e963d693ec7f9cd794  gcc/testsuite/gcc.dg/analyzer/pr99044-2.c
! baf16dc1857c19a9a8641b088c4ef29e  gcc/testsuite/gcc.dg/analyzer/pr99193-1.c
  c02e88827b0942e66ceabd0e09c7e937  gcc/testsuite/gcc.dg/analyzer/pr99193-2.c
! 09012f76ab7c3d223bdf9fb86100350f  gcc/testsuite/gcc.dg/analyzer/pr99193-3.c
! e422c6ce308a7783d27e6e5bfb6d5ea5  gcc/testsuite/gcc.dg/analyzer/pr99716-1.c
! d8d378a2c67cc6181de376d249607099  gcc/testsuite/gcc.dg/analyzer/pr99716-2.c
  0c63418b3608af001507560347c90d57  gcc/testsuite/gcc.dg/analyzer/pr99716-3.c
  cbb6adcc2621ebf0e7bda4537a8d8250  gcc/testsuite/gcc.dg/analyzer/pr99771-1.c
! 14044d052e4f92b71975a1fd4333d97a  gcc/testsuite/gcc.dg/analyzer/pr99774-1.c
  eed361a309e3745bd4ef7b47ad455045  gcc/testsuite/gcc.dg/analyzer/pr99774-2.c
  999daf76457c2842454c315884e1181c  gcc/testsuite/gcc.dg/analyzer/pr99886.c
  e7ec58c8488f858c6b9c88105194899a  gcc/testsuite/gcc.dg/analyzer/pr99906.c
  8c73c87efb75a0bef0c4a982a728d2a5  gcc/testsuite/gcc.dg/analyzer/pragma-1.c
! 25803d877478b3ef63abcf1d97271824  gcc/testsuite/gcc.dg/analyzer/realloc-1.c
  80fa663011e0905b551ff26c0f4ab6aa  gcc/testsuite/gcc.dg/analyzer/refcounting-1.c
  eb90114c90a666d2fc417737f203862d  gcc/testsuite/gcc.dg/analyzer/rhbz1878600.c
  65666ac62f3a2ea02329e2df4a3dc80b  gcc/testsuite/gcc.dg/analyzer/scope-1.c
--- 35730,35759 ----
  ec3f6b6ab51e286be338a54b446589e9  gcc/testsuite/gcc.dg/analyzer/pr98580-b.c
  e30ab4cce96a744448409fe77f3c5efa  gcc/testsuite/gcc.dg/analyzer/pr98599-a.c
  b8dedb68ebd6efc83061dc56ccf05a12  gcc/testsuite/gcc.dg/analyzer/pr98599-b.c
! fb4c327deb6f526b972b1ec3ba4f4a8c  gcc/testsuite/gcc.dg/analyzer/pr98628.c
  a139a65f55f3b94f92a93d5819d999ff  gcc/testsuite/gcc.dg/analyzer/pr98918.c
! 7cf1433308350ac57be8b451b3a2f524  gcc/testsuite/gcc.dg/analyzer/pr98969.c
! 11ed5b2e2254591f0a152015c2b66245  gcc/testsuite/gcc.dg/analyzer/pr99042.c
  db49279a7bbbbb8a7993d65e3a0ed602  gcc/testsuite/gcc.dg/analyzer/pr99044-1.c
  7197855d9b8070e963d693ec7f9cd794  gcc/testsuite/gcc.dg/analyzer/pr99044-2.c
! e32512834e5d006e06d684d8fca85fbe  gcc/testsuite/gcc.dg/analyzer/pr99193-1.c
  c02e88827b0942e66ceabd0e09c7e937  gcc/testsuite/gcc.dg/analyzer/pr99193-2.c
! 6f197eebc3f8e0cff9ea902203296259  gcc/testsuite/gcc.dg/analyzer/pr99193-3.c
! dc948ef5af4dbb9b2512860f38fde8ed  gcc/testsuite/gcc.dg/analyzer/pr99269.c
! 173e7ddffba3cdd78fd1dfabdae58d98  gcc/testsuite/gcc.dg/analyzer/pr99716-1.c
! e0d8ca4cfb2ab1c4a42a62807ee64462  gcc/testsuite/gcc.dg/analyzer/pr99716-2.c
  0c63418b3608af001507560347c90d57  gcc/testsuite/gcc.dg/analyzer/pr99716-3.c
  cbb6adcc2621ebf0e7bda4537a8d8250  gcc/testsuite/gcc.dg/analyzer/pr99771-1.c
! 2e189e0b1932fd120be600a70c729188  gcc/testsuite/gcc.dg/analyzer/pr99774-1.c
  eed361a309e3745bd4ef7b47ad455045  gcc/testsuite/gcc.dg/analyzer/pr99774-2.c
  999daf76457c2842454c315884e1181c  gcc/testsuite/gcc.dg/analyzer/pr99886.c
  e7ec58c8488f858c6b9c88105194899a  gcc/testsuite/gcc.dg/analyzer/pr99906.c
  8c73c87efb75a0bef0c4a982a728d2a5  gcc/testsuite/gcc.dg/analyzer/pragma-1.c
! de595cd3345798980e12641371d110bc  gcc/testsuite/gcc.dg/analyzer/pragma-2.c
! 45cde6a70e0181df10af312e24e4aef4  gcc/testsuite/gcc.dg/analyzer/realloc-1.c
! f54f592f1a34809c785a390fe52842b1  gcc/testsuite/gcc.dg/analyzer/realloc-2.c
! c332adf16123cf980cd4a36081c74582  gcc/testsuite/gcc.dg/analyzer/realloc-3.c
! 7f9a58dbe3d9e59cd0a8e15a8a931a40  gcc/testsuite/gcc.dg/analyzer/realloc-4.c
  80fa663011e0905b551ff26c0f4ab6aa  gcc/testsuite/gcc.dg/analyzer/refcounting-1.c
  eb90114c90a666d2fc417737f203862d  gcc/testsuite/gcc.dg/analyzer/rhbz1878600.c
  65666ac62f3a2ea02329e2df4a3dc80b  gcc/testsuite/gcc.dg/analyzer/scope-1.c
*************** c3d6877dc6b6aaf933b97e6748b315cc  gcc/te
*** 34512,34541 ****
  21f29e324e02af30bdd09e1978dc26f6  gcc/testsuite/gcc.dg/analyzer/sigsetjmp-5.c
  8959874363aade3ab965125e11d3ded5  gcc/testsuite/gcc.dg/analyzer/sigsetjmp-6.c
  041939ea34c3dd2bdd2d95257e5520ad  gcc/testsuite/gcc.dg/analyzer/single-field.c
! 48e91216499370bacb005fecdb79b36b  gcc/testsuite/gcc.dg/analyzer/stale-frame-1.c
  5c824937a2b8b50d8d983130fccd4e81  gcc/testsuite/gcc.dg/analyzer/strcmp-1.c
  75d08bca79f4ac1789e8518f83e25230  gcc/testsuite/gcc.dg/analyzer/strcpy-1.c
! 94cb92233eb5c2bcada4066b1a45a8c5  gcc/testsuite/gcc.dg/analyzer/strdup-1.c
! 161eff2fd6bce43bc965274c803a4857  gcc/testsuite/gcc.dg/analyzer/strndup-1.c
! 5231cd301b8d86c62bf8321d1e5bfb4b  gcc/testsuite/gcc.dg/analyzer/switch.c
! 5fd1467a3fda46f1c5783eb10827dc00  gcc/testsuite/gcc.dg/analyzer/symbolic-1.c
  2982a3481c63231cadba1329977640bd  gcc/testsuite/gcc.dg/analyzer/symbolic-2.c
  24d2d7b09cf8245a68dd00b36075e2cd  gcc/testsuite/gcc.dg/analyzer/symbolic-3.c
  784de898ae2196cc28e4405a23f94314  gcc/testsuite/gcc.dg/analyzer/symbolic-4.c
  8d8ebd7d911c51e682f6290fd9fca032  gcc/testsuite/gcc.dg/analyzer/symbolic-5.c
  2874e0dd4822b9e02d76d958c6b96223  gcc/testsuite/gcc.dg/analyzer/symbolic-6.c
! 177de29e98a04938f93d6caeab096acd  gcc/testsuite/gcc.dg/analyzer/symbolic-7.c
! 2fbcc4d35e990ea06e218d02a38e74eb  gcc/testsuite/gcc.dg/analyzer/taint-1.c
  ca97da792ccb8600104f461e27f88997  gcc/testsuite/gcc.dg/analyzer/test-setjmp.h
  1044a7408c5d7630501b02b9726d7b8b  gcc/testsuite/gcc.dg/analyzer/torture/20060625-1.c
! 2e86ca4009e75424e9ba48f34d0a798b  gcc/testsuite/gcc.dg/analyzer/torture/analyzer-torture.exp
  6600a700d9c3d03886029438e22848f6  gcc/testsuite/gcc.dg/analyzer/torture/conditionals-2.c
  4c43e729ef81f365c923eb98024417c6  gcc/testsuite/gcc.dg/analyzer/torture/conftest-1.c
  2a944db68262f05280b26c9c165685c9  gcc/testsuite/gcc.dg/analyzer/torture/intptr_t.c
  fe447f16fa32a6662b71d48cefafbccc  gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-1.c
  b8568508a8d8d6b0005149ac11f93783  gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-2.c
  707a0e095b5e167db1cb6f2fa2cad4da  gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-3.c
  52faf878195ceb4ad78e8c760c4f86f4  gcc/testsuite/gcc.dg/analyzer/torture/poc.c
  d1bd725bfd85304b0430a4afe4ef5b4e  gcc/testsuite/gcc.dg/analyzer/torture/pr51628-30.c
  ca62b5bdb1c5cf71cd203f8d475fbcdc  gcc/testsuite/gcc.dg/analyzer/torture/pr59037.c
  46c9c74b1f40499fc80ecfe6126ffee2  gcc/testsuite/gcc.dg/analyzer/torture/pr93349.c
--- 35781,35853 ----
  21f29e324e02af30bdd09e1978dc26f6  gcc/testsuite/gcc.dg/analyzer/sigsetjmp-5.c
  8959874363aade3ab965125e11d3ded5  gcc/testsuite/gcc.dg/analyzer/sigsetjmp-6.c
  041939ea34c3dd2bdd2d95257e5520ad  gcc/testsuite/gcc.dg/analyzer/single-field.c
! 5c0567311c3a574a185c84afd8f87b2b  gcc/testsuite/gcc.dg/analyzer/sock-1.c
! d2d0bf430ae5db83cb2eeb1d4c3c4844  gcc/testsuite/gcc.dg/analyzer/sock-2.c
! 0d17ba25adaab3e664c5b31f67e250f4  gcc/testsuite/gcc.dg/analyzer/stale-frame-1.c
! 95c6ab46cff9827d5ae5249cf7ac9527  gcc/testsuite/gcc.dg/analyzer/strchr-1.c
  5c824937a2b8b50d8d983130fccd4e81  gcc/testsuite/gcc.dg/analyzer/strcmp-1.c
  75d08bca79f4ac1789e8518f83e25230  gcc/testsuite/gcc.dg/analyzer/strcpy-1.c
! a20f56474f9327e4df5f75e759a08cfc  gcc/testsuite/gcc.dg/analyzer/strcpy-2.c
! fac607b6d04c358896bf7ed70dbf5347  gcc/testsuite/gcc.dg/analyzer/strdup-1.c
! e2a106505ad57f8fb83ebcbe30b56b27  gcc/testsuite/gcc.dg/analyzer/strndup-1.c
! 18ec83d6218fa8d4d146ea7ca579dbc4  gcc/testsuite/gcc.dg/analyzer/switch.c
! c6ff36bbb860a260cfcab0b25aaded49  gcc/testsuite/gcc.dg/analyzer/symbolic-1.c
  2982a3481c63231cadba1329977640bd  gcc/testsuite/gcc.dg/analyzer/symbolic-2.c
  24d2d7b09cf8245a68dd00b36075e2cd  gcc/testsuite/gcc.dg/analyzer/symbolic-3.c
  784de898ae2196cc28e4405a23f94314  gcc/testsuite/gcc.dg/analyzer/symbolic-4.c
  8d8ebd7d911c51e682f6290fd9fca032  gcc/testsuite/gcc.dg/analyzer/symbolic-5.c
  2874e0dd4822b9e02d76d958c6b96223  gcc/testsuite/gcc.dg/analyzer/symbolic-6.c
! 7f112d0177047915aac74484299c5eea  gcc/testsuite/gcc.dg/analyzer/symbolic-7.c
! 32609711c2e8949725877cdd45605fff  gcc/testsuite/gcc.dg/analyzer/symbolic-8.c
! c8bc6833de96ea946301995b38dec3db  gcc/testsuite/gcc.dg/analyzer/symbolic-9.c
! 6863101d8819b9bf80a78e076396e2a5  gcc/testsuite/gcc.dg/analyzer/taint-CVE-2011-2210-1.c
! 03c5adee66f7bad3a46810ed71abf0f0  gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143-1.c
! 667a1190cd16badacef247391bbfe5ab  gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143-2.c
! ea242e7d6ed95a0e6ef9737d79ede6b5  gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143.h
! 2d5b0cc551c3a336977c5d5a02611d5c  gcc/testsuite/gcc.dg/analyzer/taint-alloc-1.c
! fbd647fd29b471a7a55a1fb5f7c747ce  gcc/testsuite/gcc.dg/analyzer/taint-alloc-2.c
! d12199de8a73038d508adc4781b1c82c  gcc/testsuite/gcc.dg/analyzer/taint-alloc-3.c
! 2e33673bc33d322da439d4e94dbf6afc  gcc/testsuite/gcc.dg/analyzer/taint-alloc-4.c
! acc7ba3d31b74a70e29d2deb549157d4  gcc/testsuite/gcc.dg/analyzer/taint-alloc-5.c
! 6e4fda7b64a8004628295cf4406ce957  gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c
! 6a05eaa2e2c1e6b090ece3c5fd1f2dec  gcc/testsuite/gcc.dg/analyzer/taint-merger.c
! 989ecfdd65e4e4576e9e4c32ea8989c9  gcc/testsuite/gcc.dg/analyzer/taint-ops.c
! f5887ea7ae3861689a706041d25fbc2f  gcc/testsuite/gcc.dg/analyzer/taint-read-index-1.c
! 928375584fe37a44f65bb2b6eecdcb9b  gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c
! 473b57832895b90d940dd27bc74a75d6  gcc/testsuite/gcc.dg/analyzer/taint-realloc.c
! ec8535ecc12c8b894c1d73f4597eb0be  gcc/testsuite/gcc.dg/analyzer/taint-size-1.c
! f4f9f41e54069c509bb5eae592ff6f87  gcc/testsuite/gcc.dg/analyzer/taint-size-access-attr-1.c
! 0337ba6b22c31a1bf490617c707c752e  gcc/testsuite/gcc.dg/analyzer/taint-write-index-1.c
! 477c05f1a507bff1df071f92846c8bbf  gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c
  ca97da792ccb8600104f461e27f88997  gcc/testsuite/gcc.dg/analyzer/test-setjmp.h
+ c4ea4a7111cad6e2223b4b4e23b1fd95  gcc/testsuite/gcc.dg/analyzer/test-uaccess.h
  1044a7408c5d7630501b02b9726d7b8b  gcc/testsuite/gcc.dg/analyzer/torture/20060625-1.c
! 1f4518ba50d4a0d01953d4dc3eea2d78  gcc/testsuite/gcc.dg/analyzer/torture/analyzer-torture.exp
! ab8b5fe6003e8ef4d2d1b26e247a6207  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-array_index_mask_nospec.c
! 9e0121dee23fed15f762b03898392c8a  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-cpuid-paravirt-1.c
! 144d9ec1f7cc82583ee9bca4b319b24c  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-cpuid-paravirt-2.c
! f4d4fea634dc4622b9b5fbdcd6172a9b  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-cpuid.c
! 954891c1f34c5e5273d262c42ae87034  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-rdmsr-paravirt.c
! adcdfc937d1369e1864074215a1cd12c  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-rdmsr.c
! 3bfae08026199f9f4606002978937612  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-wfx_get_ps_timeout-full.c
! 8953ab993ff3c153bc51dfb30b99bf7e  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-wfx_get_ps_timeout-reduced.c
! 85b99739a5a3b9e52c0675cb96b6e1bd  gcc/testsuite/gcc.dg/analyzer/torture/boxed-int-1.c
! c4652807434ba6ccf4a2477242729b0a  gcc/testsuite/gcc.dg/analyzer/torture/boxed-ptr-1.c
  6600a700d9c3d03886029438e22848f6  gcc/testsuite/gcc.dg/analyzer/torture/conditionals-2.c
  4c43e729ef81f365c923eb98024417c6  gcc/testsuite/gcc.dg/analyzer/torture/conftest-1.c
+ e85d83557fa692d7016e4622b85ca975  gcc/testsuite/gcc.dg/analyzer/torture/empty-struct-1.c
  2a944db68262f05280b26c9c165685c9  gcc/testsuite/gcc.dg/analyzer/torture/intptr_t.c
+ fbd2e05a9e1bee211c5fd03bb02f863a  gcc/testsuite/gcc.dg/analyzer/torture/leak-pr102308-1.c
+ 8f5b6da995738b027bfc202c0abfeb53  gcc/testsuite/gcc.dg/analyzer/torture/leak-pr102308-2.c
  fe447f16fa32a6662b71d48cefafbccc  gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-1.c
  b8568508a8d8d6b0005149ac11f93783  gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-2.c
  707a0e095b5e167db1cb6f2fa2cad4da  gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-3.c
  52faf878195ceb4ad78e8c760c4f86f4  gcc/testsuite/gcc.dg/analyzer/torture/poc.c
+ 01f1ac31cf3854d0ce20abbf6cc01ad2  gcc/testsuite/gcc.dg/analyzer/torture/pr102225.c
+ a939a37317deb3e080ba6ccd04ffd0a8  gcc/testsuite/gcc.dg/analyzer/torture/pr102692.c
+ f220df257b7652557308a81a18da555f  gcc/testsuite/gcc.dg/analyzer/torture/pr103685.c
+ 6df37e6fa084973f15534b808bc30ec4  gcc/testsuite/gcc.dg/analyzer/torture/pr104159.c
+ 64067e2ef0854aeb2bb753c24f92b356  gcc/testsuite/gcc.dg/analyzer/torture/pr104863.c
  d1bd725bfd85304b0430a4afe4ef5b4e  gcc/testsuite/gcc.dg/analyzer/torture/pr51628-30.c
  ca62b5bdb1c5cf71cd203f8d475fbcdc  gcc/testsuite/gcc.dg/analyzer/torture/pr59037.c
  46c9c74b1f40499fc80ecfe6126ffee2  gcc/testsuite/gcc.dg/analyzer/torture/pr93349.c
*************** d0497e5c33b1ac1c4a394d71fab98cc8  gcc/te
*** 34551,34572 ****
  64f32ad6797e83ec5635fbee8b4cb44c  gcc/testsuite/gcc.dg/analyzer/torture/pr93451.c
  edff473b255c0dea0c18477a32ff789c  gcc/testsuite/gcc.dg/analyzer/torture/pr93544.c
  7d61ba3b8fe5f40159915f93daf67457  gcc/testsuite/gcc.dg/analyzer/torture/pr93647.c
! 629733f05345c8989dab989cdae31c50  gcc/testsuite/gcc.dg/analyzer/torture/pr93649.c
  049209558c45a95b2d1cfb0369c75138  gcc/testsuite/gcc.dg/analyzer/torture/pr93947.c
  c1e2ec7b982a6c1d3f3d88277f0a5412  gcc/testsuite/gcc.dg/analyzer/unknown-fns-2.c
  9346d04a573f82a1a5d2aa442f8df654  gcc/testsuite/gcc.dg/analyzer/unknown-fns-3.c
  81481da5bab0e2c1f85b1504bcfab189  gcc/testsuite/gcc.dg/analyzer/unknown-fns-4.c
  b06ba7887a4ece7ea7f11a9caf8e97b4  gcc/testsuite/gcc.dg/analyzer/unknown-fns.c
  fb0acf2dd995d01b9b08a8f1188592f7  gcc/testsuite/gcc.dg/analyzer/use-after-free.c
! 0e26412eb45800cfc2b9b5909a28b098  gcc/testsuite/gcc.dg/analyzer/vla-1.c
  6fcd3abc5b1f2edc5e93bd98f3438e8c  gcc/testsuite/gcc.dg/analyzer/write-to-const-1.c
  67dbd7690fda51d588dc970ff6d5f81e  gcc/testsuite/gcc.dg/analyzer/write-to-string-literal-1.c
  838b90b78b8ec4ed64b4613806941236  gcc/testsuite/gcc.dg/analyzer/zlib-1.c
  57902d5ce798d9c34760d0ab62f511a0  gcc/testsuite/gcc.dg/analyzer/zlib-2.c
! c446a843da441b1eef1485816ccae17b  gcc/testsuite/gcc.dg/analyzer/zlib-3.c
  df72c008ff04db0cf35cc53f456d09e9  gcc/testsuite/gcc.dg/analyzer/zlib-4.c
! 9994e9236629499aa37d1d0d4d893158  gcc/testsuite/gcc.dg/analyzer/zlib-5.c
! 4d2dcddc4524859ec98f647d42524984  gcc/testsuite/gcc.dg/analyzer/zlib-6.c
  9a236d4e4079496d64daed78574cc006  gcc/testsuite/gcc.dg/and-1.c
  8025bb7e0765732f0d28a027a9225fc6  gcc/testsuite/gcc.dg/anon-struct-1.c
  169a57abcdc48109c6aa5c69baf2c0da  gcc/testsuite/gcc.dg/anon-struct-10.c
--- 35863,35919 ----
  64f32ad6797e83ec5635fbee8b4cb44c  gcc/testsuite/gcc.dg/analyzer/torture/pr93451.c
  edff473b255c0dea0c18477a32ff789c  gcc/testsuite/gcc.dg/analyzer/torture/pr93544.c
  7d61ba3b8fe5f40159915f93daf67457  gcc/testsuite/gcc.dg/analyzer/torture/pr93647.c
! 32a48f1dc8e9a869a6baba13956aa4aa  gcc/testsuite/gcc.dg/analyzer/torture/pr93649.c
  049209558c45a95b2d1cfb0369c75138  gcc/testsuite/gcc.dg/analyzer/torture/pr93947.c
+ 9ad091485049c3474ef15f305054d030  gcc/testsuite/gcc.dg/analyzer/torture/switch-2.c
+ 5d72557f7c8e1ba44690dbc97eaf218d  gcc/testsuite/gcc.dg/analyzer/torture/switch-3.c
+ 395de16f08102a554c60112d9f79a4ac  gcc/testsuite/gcc.dg/analyzer/torture/switch-4.c
+ d395542cab6151e7cd1ab370ab6a6181  gcc/testsuite/gcc.dg/analyzer/torture/switch-5.c
+ 1fae21b0c67b5b679beeecb28014ef75  gcc/testsuite/gcc.dg/analyzer/torture/symbolic-10.c
+ b2b79a31b8a0345532a9a02fa98d668f  gcc/testsuite/gcc.dg/analyzer/torture/ubsan-1.c
+ 46dca54a13d3ed78a493a176a50d867e  gcc/testsuite/gcc.dg/analyzer/torture/uninit-bit-field-ref.c
+ d05a3955306cf8591941d3856debd78b  gcc/testsuite/gcc.dg/analyzer/torture/uninit-pr63311.c
+ 2ffa956e249f74277e2565912f3333b9  gcc/testsuite/gcc.dg/analyzer/torture/uninit-trivial-auto-var-init-pattern.c
+ 4b038f337620ba8e85c0752005cb1818  gcc/testsuite/gcc.dg/analyzer/torture/uninit-trivial-auto-var-init-uninitialized.c
+ cc641b4453a1b743c66c43ea1c92e357  gcc/testsuite/gcc.dg/analyzer/torture/uninit-trivial-auto-var-init-zero.c
+ 94e47c8401a81b7ef0d8bf634ae0792f  gcc/testsuite/gcc.dg/analyzer/uninit-1.c
+ f3b04cae0253d04943b8e3a80f6609c3  gcc/testsuite/gcc.dg/analyzer/uninit-2.c
+ 5230c72c5072304c5579bb33f03c01e8  gcc/testsuite/gcc.dg/analyzer/uninit-3.c
+ a99012d995d21d800d52fd2fde4902ac  gcc/testsuite/gcc.dg/analyzer/uninit-4.c
+ 12770fc4b4e596f10d34f77417d0a681  gcc/testsuite/gcc.dg/analyzer/uninit-6.c
+ dc18b7f43ca34ba2bdcf1f2293ef3567  gcc/testsuite/gcc.dg/analyzer/uninit-6b.c
+ 541b34b1ad44afd6ca6d0a768db2946a  gcc/testsuite/gcc.dg/analyzer/uninit-CWE-457-examples.c
+ 4dfe342efb4c45e8a5094ee1ed577042  gcc/testsuite/gcc.dg/analyzer/uninit-alloca.c
+ 76c4fa43fef5c9ac975c951c831adb52  gcc/testsuite/gcc.dg/analyzer/uninit-pr104576.c
+ feedfa199c7f0701af3669f463daaa51  gcc/testsuite/gcc.dg/analyzer/uninit-pr94713.c
+ 27bc9adec517c382409208e0208662ee  gcc/testsuite/gcc.dg/analyzer/uninit-pr94714.c
  c1e2ec7b982a6c1d3f3d88277f0a5412  gcc/testsuite/gcc.dg/analyzer/unknown-fns-2.c
  9346d04a573f82a1a5d2aa442f8df654  gcc/testsuite/gcc.dg/analyzer/unknown-fns-3.c
  81481da5bab0e2c1f85b1504bcfab189  gcc/testsuite/gcc.dg/analyzer/unknown-fns-4.c
  b06ba7887a4ece7ea7f11a9caf8e97b4  gcc/testsuite/gcc.dg/analyzer/unknown-fns.c
+ 087460b24b93f2716c1d11c02d30965e  gcc/testsuite/gcc.dg/analyzer/untracked-1.c
+ 33bcbf1ef7e77468ac1cb0eceb5bb7b9  gcc/testsuite/gcc.dg/analyzer/unused-local-1.c
+ 376fb4403916477fbc28accfb5d269f1  gcc/testsuite/gcc.dg/analyzer/use-after-free-2.c
+ f11e97b1fc5ab33807c3c2d2087970e8  gcc/testsuite/gcc.dg/analyzer/use-after-free-3.c
  fb0acf2dd995d01b9b08a8f1188592f7  gcc/testsuite/gcc.dg/analyzer/use-after-free.c
! fce9eab7faf36d303a43f44482d7c6ee  gcc/testsuite/gcc.dg/analyzer/vasprintf-1.c
! 102385c780a6490b1bab8dac593cbd07  gcc/testsuite/gcc.dg/analyzer/vla-1.c
  6fcd3abc5b1f2edc5e93bd98f3438e8c  gcc/testsuite/gcc.dg/analyzer/write-to-const-1.c
+ d23060d9617d607793c74626be7479fe  gcc/testsuite/gcc.dg/analyzer/write-to-const-2.c
+ 77840cbcb97259e6e74b02896969ea84  gcc/testsuite/gcc.dg/analyzer/write-to-function-1.c
  67dbd7690fda51d588dc970ff6d5f81e  gcc/testsuite/gcc.dg/analyzer/write-to-string-literal-1.c
+ 6ec959b42308e02f8a893a9efaf86d98  gcc/testsuite/gcc.dg/analyzer/write-to-string-literal-2.c
+ 57fc075c8dbac107e616b70295049b4b  gcc/testsuite/gcc.dg/analyzer/write-to-string-literal-3.c
+ a9738509a7a9603042261187b2455209  gcc/testsuite/gcc.dg/analyzer/write-to-string-literal-4-disabled.c
+ 6d83368141768ce083388691e6ba4efd  gcc/testsuite/gcc.dg/analyzer/write-to-string-literal-4.c
+ 55eb51eae3cf20a8c0ed1c6ee5b3e407  gcc/testsuite/gcc.dg/analyzer/write-to-string-literal-5.c
  838b90b78b8ec4ed64b4613806941236  gcc/testsuite/gcc.dg/analyzer/zlib-1.c
  57902d5ce798d9c34760d0ab62f511a0  gcc/testsuite/gcc.dg/analyzer/zlib-2.c
! eb50163c3ad2c6ba6cf64c0de93675e0  gcc/testsuite/gcc.dg/analyzer/zlib-3.c
  df72c008ff04db0cf35cc53f456d09e9  gcc/testsuite/gcc.dg/analyzer/zlib-4.c
! 8c05b90cc0edbdbdb87d92a6ed796f4c  gcc/testsuite/gcc.dg/analyzer/zlib-5.c
! f879ebf85b514c5e20431d11da89e21f  gcc/testsuite/gcc.dg/analyzer/zlib-6.c
! 77a7c1a8959f89a7063736068b232049  gcc/testsuite/gcc.dg/analyzer/zlib-6a.c
  9a236d4e4079496d64daed78574cc006  gcc/testsuite/gcc.dg/and-1.c
  8025bb7e0765732f0d28a027a9225fc6  gcc/testsuite/gcc.dg/anon-struct-1.c
  169a57abcdc48109c6aa5c69baf2c0da  gcc/testsuite/gcc.dg/anon-struct-10.c
*************** f5a2800fc5f21185bd9bdbd69e270c10  gcc/te
*** 34605,34615 ****
  93602cc4baf67e85d9c438d1a69dc55d  gcc/testsuite/gcc.dg/array-quals-1.c
  142997aec138f2b5487250ef14d6de54  gcc/testsuite/gcc.dg/array-quals-2.c
  889ad8871787262fb9533d339c717e6a  gcc/testsuite/gcc.dg/aru-2.c
! c3a77b3c243c9ea87f79d62f7db200dc  gcc/testsuite/gcc.dg/asan/asan.exp
  b8a049317908d7e0078316ad82437346  gcc/testsuite/gcc.dg/asan/nested-1.c
  738544a74dbe22f6a41201227dfe9cd9  gcc/testsuite/gcc.dg/asan/nosanitize-and-inline.c
  62ddd0ab49b2d8a39773ae7568d8aa74  gcc/testsuite/gcc.dg/asan/pr104449.c
  3424b712fda248acb67afe3bbb5dbc46  gcc/testsuite/gcc.dg/asan/pr105214.c
  a5e988481cd66b8acf6c610b847cb713  gcc/testsuite/gcc.dg/asan/pr56417.c
  0c13e4008bb665f05b030eb42e43183f  gcc/testsuite/gcc.dg/asan/pr63845.c
  9a45b4bebab3901180dbe2a44efcd070  gcc/testsuite/gcc.dg/asan/pr64170.c
--- 35952,35963 ----
  93602cc4baf67e85d9c438d1a69dc55d  gcc/testsuite/gcc.dg/array-quals-1.c
  142997aec138f2b5487250ef14d6de54  gcc/testsuite/gcc.dg/array-quals-2.c
  889ad8871787262fb9533d339c717e6a  gcc/testsuite/gcc.dg/aru-2.c
! 70ba2d2e1867ce7e0b883bedefe43e05  gcc/testsuite/gcc.dg/asan/asan.exp
  b8a049317908d7e0078316ad82437346  gcc/testsuite/gcc.dg/asan/nested-1.c
  738544a74dbe22f6a41201227dfe9cd9  gcc/testsuite/gcc.dg/asan/nosanitize-and-inline.c
  62ddd0ab49b2d8a39773ae7568d8aa74  gcc/testsuite/gcc.dg/asan/pr104449.c
  3424b712fda248acb67afe3bbb5dbc46  gcc/testsuite/gcc.dg/asan/pr105214.c
+ 695fe49bfb0b0c5cd4e60ba1a0f27cf6  gcc/testsuite/gcc.dg/asan/pr105396.c
  a5e988481cd66b8acf6c610b847cb713  gcc/testsuite/gcc.dg/asan/pr56417.c
  0c13e4008bb665f05b030eb42e43183f  gcc/testsuite/gcc.dg/asan/pr63845.c
  9a45b4bebab3901180dbe2a44efcd070  gcc/testsuite/gcc.dg/asan/pr64170.c
*************** c6879980a054642fecf33371357e8e0e  gcc/te
*** 34638,34650 ****
  39c8a5f3240912f763b37da76e663389  gcc/testsuite/gcc.dg/asan/pr95033.c
  7ce9fbfd8ab6da25366344e542f90eb2  gcc/testsuite/gcc.dg/asan/pr95051.c
  3454dc6f285abc03efc10b39853cc81b  gcc/testsuite/gcc.dg/asan/pr97294.c
  da89dc3f01ef08b35253f1daef462bec  gcc/testsuite/gcc.dg/asan/sancov-1.c
  7f4f842288c94385c74120c61927a140  gcc/testsuite/gcc.dg/asan/use-after-scope-1.c
  83d04d7ae277af2b6b6c14d844bec429  gcc/testsuite/gcc.dg/asan/use-after-scope-10.c
  66c578cf43e014d671f9d7e77125db49  gcc/testsuite/gcc.dg/asan/use-after-scope-11.c
  4a2351e777916067b334800b4a5c9197  gcc/testsuite/gcc.dg/asan/use-after-scope-2.c
  f4fb2dfe336c8f269e4ebf367fbf1e78  gcc/testsuite/gcc.dg/asan/use-after-scope-3.c
! b58c6cee79440c514382110378d62f3a  gcc/testsuite/gcc.dg/asan/use-after-scope-4.c
  c020d8cb0bfec7181ca03d65a087a939  gcc/testsuite/gcc.dg/asan/use-after-scope-5.c
  366840a89d5ad3b48e23abe8e4355d97  gcc/testsuite/gcc.dg/asan/use-after-scope-6.c
  91083b37f107608362a3527134382682  gcc/testsuite/gcc.dg/asan/use-after-scope-7.c
--- 35986,35999 ----
  39c8a5f3240912f763b37da76e663389  gcc/testsuite/gcc.dg/asan/pr95033.c
  7ce9fbfd8ab6da25366344e542f90eb2  gcc/testsuite/gcc.dg/asan/pr95051.c
  3454dc6f285abc03efc10b39853cc81b  gcc/testsuite/gcc.dg/asan/pr97294.c
+ c6f60f32a95e2d22e279f0a72eae0bca  gcc/testsuite/gcc.dg/asan/pr99673.c
  da89dc3f01ef08b35253f1daef462bec  gcc/testsuite/gcc.dg/asan/sancov-1.c
  7f4f842288c94385c74120c61927a140  gcc/testsuite/gcc.dg/asan/use-after-scope-1.c
  83d04d7ae277af2b6b6c14d844bec429  gcc/testsuite/gcc.dg/asan/use-after-scope-10.c
  66c578cf43e014d671f9d7e77125db49  gcc/testsuite/gcc.dg/asan/use-after-scope-11.c
  4a2351e777916067b334800b4a5c9197  gcc/testsuite/gcc.dg/asan/use-after-scope-2.c
  f4fb2dfe336c8f269e4ebf367fbf1e78  gcc/testsuite/gcc.dg/asan/use-after-scope-3.c
! ee3e651f3451abdc97547c7a60dc387d  gcc/testsuite/gcc.dg/asan/use-after-scope-4.c
  c020d8cb0bfec7181ca03d65a087a939  gcc/testsuite/gcc.dg/asan/use-after-scope-5.c
  366840a89d5ad3b48e23abe8e4355d97  gcc/testsuite/gcc.dg/asan/use-after-scope-6.c
  91083b37f107608362a3527134382682  gcc/testsuite/gcc.dg/asan/use-after-scope-7.c
*************** dca9a54735325b919335c863e6e479ea  gcc/te
*** 34678,34683 ****
--- 36027,36034 ----
  351eb206c98357428c5f86f2cff5b5e3  gcc/testsuite/gcc.dg/assign-warn-1.c
  d4b06bfbd73b9457d05a2d5cc2ccec4b  gcc/testsuite/gcc.dg/assign-warn-2.c
  0e7e975a9850cb9627daeae955a0ba5a  gcc/testsuite/gcc.dg/assign-warn-3.c
+ c5cd0cd62ffcc672eb2eb03a4ddae2da  gcc/testsuite/gcc.dg/associative-math-1.c
+ ceea17365edd23ebeee261b54fa830ff  gcc/testsuite/gcc.dg/associative-math-2.c
  81e03f04f7152ecc9489fafbac5d73a6  gcc/testsuite/gcc.dg/atomic-compare-exchange-1.c
  e02d18b933cd31187ef17173ef98db12  gcc/testsuite/gcc.dg/atomic-compare-exchange-2.c
  550a65284e1b6454e4da4c03ffb9cdb8  gcc/testsuite/gcc.dg/atomic-compare-exchange-3.c
*************** e02d18b933cd31187ef17173ef98db12  gcc/te
*** 34693,34700 ****
  b0ef609e3671be889eb71f25fd978656  gcc/testsuite/gcc.dg/atomic-flag.c
  f75e0131175c31ff487b14172178432a  gcc/testsuite/gcc.dg/atomic-generic-aux.c
  722063c97caec07c4570ab76d14ea5e7  gcc/testsuite/gcc.dg/atomic-generic.c
! 1c2b275839a74e60a8c03188b70be0dc  gcc/testsuite/gcc.dg/atomic-invalid-2.c
! a5315177fc9ac15231e7cdb879877e41  gcc/testsuite/gcc.dg/atomic-invalid.c
  737531300385dc505724c112d98a7266  gcc/testsuite/gcc.dg/atomic-load-1.c
  b1998ee17242ce05e154d6665cbbe6e9  gcc/testsuite/gcc.dg/atomic-load-2.c
  089b633ec721221e134eb2a3453b1321  gcc/testsuite/gcc.dg/atomic-load-3.c
--- 36044,36051 ----
  b0ef609e3671be889eb71f25fd978656  gcc/testsuite/gcc.dg/atomic-flag.c
  f75e0131175c31ff487b14172178432a  gcc/testsuite/gcc.dg/atomic-generic-aux.c
  722063c97caec07c4570ab76d14ea5e7  gcc/testsuite/gcc.dg/atomic-generic.c
! 89387a914b37d1736e72ed81b390fec9  gcc/testsuite/gcc.dg/atomic-invalid-2.c
! a7301ca78640eb0fd9f6dbfaba1a0d39  gcc/testsuite/gcc.dg/atomic-invalid.c
  737531300385dc505724c112d98a7266  gcc/testsuite/gcc.dg/atomic-load-1.c
  b1998ee17242ce05e154d6665cbbe6e9  gcc/testsuite/gcc.dg/atomic-load-2.c
  089b633ec721221e134eb2a3453b1321  gcc/testsuite/gcc.dg/atomic-load-3.c
*************** b6d936bcef333630cc9629b477556dad  gcc/te
*** 34720,34728 ****
  cfbaa184996beeec40d054222582f88d  gcc/testsuite/gcc.dg/atomic-store-4.c
  46ad754bc98b69bc0f3db1488d026dc2  gcc/testsuite/gcc.dg/atomic-store-5.c
  ce7e52f61e6fb003d8ae0bf9772503eb  gcc/testsuite/gcc.dg/atomic-store-6.c
! 2d75d7f841194733bcd4f57385650bbf  gcc/testsuite/gcc.dg/atomic/atomic.exp
  c341a56eb40ffc48dba93161f0413185  gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-1.c
! 53c07ebd1f125e7d5c8ac384d45e3763  gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-2.c
  26c96c849ea8b781c5176b22d3ae0f3f  gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-3.c
  5eb307935a17eefbd29848f81bc97f15  gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-4.c
  3c5d4d4c6cf5bcc01671dbaab29f7927  gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-5.c
--- 36071,36079 ----
  cfbaa184996beeec40d054222582f88d  gcc/testsuite/gcc.dg/atomic-store-4.c
  46ad754bc98b69bc0f3db1488d026dc2  gcc/testsuite/gcc.dg/atomic-store-5.c
  ce7e52f61e6fb003d8ae0bf9772503eb  gcc/testsuite/gcc.dg/atomic-store-6.c
! 9ce1401217683732858d8399f25a7556  gcc/testsuite/gcc.dg/atomic/atomic.exp
  c341a56eb40ffc48dba93161f0413185  gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-1.c
! fc7bfd846491d840116f75940e9fa4d5  gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-2.c
  26c96c849ea8b781c5176b22d3ae0f3f  gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-3.c
  5eb307935a17eefbd29848f81bc97f15  gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-4.c
  3c5d4d4c6cf5bcc01671dbaab29f7927  gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-5.c
*************** e2a79e8b69a6b8bbbeab0ba442c5de78  gcc/te
*** 34781,34787 ****
  675327adce99f8c97f34c5251a8c4280  gcc/testsuite/gcc.dg/attr-alias-5.c
  ef49e9f0f717d3a4d1c827df010599a5  gcc/testsuite/gcc.dg/attr-aligned-2.c
  9a4118e77ef09128c8a4e3bf859f9a05  gcc/testsuite/gcc.dg/attr-aligned-3.c
! d2d3ddd7487e05512cd24d38b3a730ee  gcc/testsuite/gcc.dg/attr-aligned.c
  a9ff03a6ff85f7c46fced4797280e236  gcc/testsuite/gcc.dg/attr-alloc_align-1.c
  daf15f1ec989bc8e1d4831a0d1c70e3e  gcc/testsuite/gcc.dg/attr-alloc_align-2.c
  a40448e5fa79d5f463c4408a645a3bb7  gcc/testsuite/gcc.dg/attr-alloc_align-3.c
--- 36132,36138 ----
  675327adce99f8c97f34c5251a8c4280  gcc/testsuite/gcc.dg/attr-alias-5.c
  ef49e9f0f717d3a4d1c827df010599a5  gcc/testsuite/gcc.dg/attr-aligned-2.c
  9a4118e77ef09128c8a4e3bf859f9a05  gcc/testsuite/gcc.dg/attr-aligned-3.c
! 218ecba16d2d3bab118b45a8fd07376c  gcc/testsuite/gcc.dg/attr-aligned.c
  a9ff03a6ff85f7c46fced4797280e236  gcc/testsuite/gcc.dg/attr-alloc_align-1.c
  daf15f1ec989bc8e1d4831a0d1c70e3e  gcc/testsuite/gcc.dg/attr-alloc_align-2.c
  a40448e5fa79d5f463c4408a645a3bb7  gcc/testsuite/gcc.dg/attr-alloc_align-3.c
*************** be16f6b71bd68991024f0ec321092a06  gcc/te
*** 34794,34803 ****
  6e7b391534abc17673b1ce896f7c3a66  gcc/testsuite/gcc.dg/attr-alloc_size-2.c
  ea7bcf6a72a5617495c3e237cdd515f8  gcc/testsuite/gcc.dg/attr-alloc_size-3.c
  027fba1dfd863548c3847f174d9efa33  gcc/testsuite/gcc.dg/attr-alloc_size-4.c
! 836b93fcecc63143d78e3245441eb8f8  gcc/testsuite/gcc.dg/attr-alloc_size-5.c
! 5c62e3f45c58d5e3a74e6cfb74aacc95  gcc/testsuite/gcc.dg/attr-alloc_size-6.c
! 21634f1909d0eaea5677d4bae51d077b  gcc/testsuite/gcc.dg/attr-alloc_size-7.c
! cc47411b2b3baa583394de250eb7c8ba  gcc/testsuite/gcc.dg/attr-alloc_size-8.c
  52c6f276a374df0f896123bfcbe0aaaa  gcc/testsuite/gcc.dg/attr-alloc_size-9.c
  905e80d8b2e439cd15ed0597458ce2ec  gcc/testsuite/gcc.dg/attr-alloc_size.c
  bff5bf12c7a752b89f17af335428c788  gcc/testsuite/gcc.dg/attr-alwaysinline.c
--- 36145,36154 ----
  6e7b391534abc17673b1ce896f7c3a66  gcc/testsuite/gcc.dg/attr-alloc_size-2.c
  ea7bcf6a72a5617495c3e237cdd515f8  gcc/testsuite/gcc.dg/attr-alloc_size-3.c
  027fba1dfd863548c3847f174d9efa33  gcc/testsuite/gcc.dg/attr-alloc_size-4.c
! 8fe98d8f29faaf86e7e02595bfad1421  gcc/testsuite/gcc.dg/attr-alloc_size-5.c
! 767a30d6428950ef69a57ad5db4e931a  gcc/testsuite/gcc.dg/attr-alloc_size-6.c
! 23b09b9aeeccc2a31c5003324f6f3944  gcc/testsuite/gcc.dg/attr-alloc_size-7.c
! 9b25919a3b9b3cc4bad7ac332956db18  gcc/testsuite/gcc.dg/attr-alloc_size-8.c
  52c6f276a374df0f896123bfcbe0aaaa  gcc/testsuite/gcc.dg/attr-alloc_size-9.c
  905e80d8b2e439cd15ed0597458ce2ec  gcc/testsuite/gcc.dg/attr-alloc_size.c
  bff5bf12c7a752b89f17af335428c788  gcc/testsuite/gcc.dg/attr-alwaysinline.c
*************** e02ec6b9f7fd9ab37c02f7efd3c1f1d5  gcc/te
*** 34834,34847 ****
  2e8d579abde3b50be916cdcd11691f06  gcc/testsuite/gcc.dg/attr-nest.c
  09064ad2ea81b8688ea9d81edf13c136  gcc/testsuite/gcc.dg/attr-noinline.c
  23420c6eb2e3bb0c1cccb8e5b6e5547c  gcc/testsuite/gcc.dg/attr-noipa.c
! fc78d84ff250fc629f2d14152588c44c  gcc/testsuite/gcc.dg/attr-nonstring-2.c
  bb1973e41826aae1a7a467d0b6906cab  gcc/testsuite/gcc.dg/attr-nonstring-3.c
! b14762492fad19373298579706b4fbfc  gcc/testsuite/gcc.dg/attr-nonstring-4.c
  91e470676d23307e9650ac576093d59d  gcc/testsuite/gcc.dg/attr-nonstring.c
  fa14ccaa355e91828fbdd1d92f202deb  gcc/testsuite/gcc.dg/attr-noreturn.c
! 154b3c8b79eb7c731befec33ebaf3c4d  gcc/testsuite/gcc.dg/attr-returns-nonnull.c
  27da52df078954faf55a7223c4ea08ac  gcc/testsuite/gcc.dg/attr-section.c
! b384d3e6b1dc6a5cce4210c51589c4f5  gcc/testsuite/gcc.dg/attr-vector_size.c
  fa7929b130df76e25cb947b7f8fdc470  gcc/testsuite/gcc.dg/attr-weak-1.c
  db8374eda20551d6cd60bccb85b32576  gcc/testsuite/gcc.dg/attr-weak-hidden-1.c
  9d67dfe9d24216b60cb82426bce86193  gcc/testsuite/gcc.dg/attr-weak-hidden-1a.c
--- 36185,36204 ----
  2e8d579abde3b50be916cdcd11691f06  gcc/testsuite/gcc.dg/attr-nest.c
  09064ad2ea81b8688ea9d81edf13c136  gcc/testsuite/gcc.dg/attr-noinline.c
  23420c6eb2e3bb0c1cccb8e5b6e5547c  gcc/testsuite/gcc.dg/attr-noipa.c
! 012b47b0fef60d80ee7071e833bb6f47  gcc/testsuite/gcc.dg/attr-nonstring-2.c
  bb1973e41826aae1a7a467d0b6906cab  gcc/testsuite/gcc.dg/attr-nonstring-3.c
! ae3bdda9f1b989c7eed8752994cdb481  gcc/testsuite/gcc.dg/attr-nonstring-4.c
  91e470676d23307e9650ac576093d59d  gcc/testsuite/gcc.dg/attr-nonstring.c
  fa14ccaa355e91828fbdd1d92f202deb  gcc/testsuite/gcc.dg/attr-noreturn.c
! f1efff831d3f1a374ca2ebdb5ceacdb1  gcc/testsuite/gcc.dg/attr-returns-nonnull.c
  27da52df078954faf55a7223c4ea08ac  gcc/testsuite/gcc.dg/attr-section.c
! d3600675bb718f7ec9a87dfa91e38b66  gcc/testsuite/gcc.dg/attr-unavailable-1.c
! 4312b0296269a552a6836037f67dabef  gcc/testsuite/gcc.dg/attr-unavailable-2.c
! 85e3a52068885babcd8acd968be9b409  gcc/testsuite/gcc.dg/attr-unavailable-3.c
! d34a8237b8b2ae66201cb2c46551b6f9  gcc/testsuite/gcc.dg/attr-unavailable-4.c
! 4554671d9ab35e8acb59840d49480a24  gcc/testsuite/gcc.dg/attr-unavailable-5.c
! ec93f18bfda5d3628b53cbe80df0ce9c  gcc/testsuite/gcc.dg/attr-unavailable-6.c
! f12d440433cd7ec628429457b4195c00  gcc/testsuite/gcc.dg/attr-vector_size.c
  fa7929b130df76e25cb947b7f8fdc470  gcc/testsuite/gcc.dg/attr-weak-1.c
  db8374eda20551d6cd60bccb85b32576  gcc/testsuite/gcc.dg/attr-weak-hidden-1.c
  9d67dfe9d24216b60cb82426bce86193  gcc/testsuite/gcc.dg/attr-weak-hidden-1a.c
*************** b192f8a885f9deddc53ade0456fd18cb  gcc/te
*** 34853,34861 ****
  0331fe485ecb4fe569b79f3c65b5a70a  gcc/testsuite/gcc.dg/attr-weakref-3.c
  a8b698b276857d272916880be5579a44  gcc/testsuite/gcc.dg/attr-weakref-4.c
  c42096cdd70af11210a8acce42d72fc4  gcc/testsuite/gcc.dg/attr-weakref-5.c
  728ad18ac3017195abfa17386cbb7a12  gcc/testsuite/gcc.dg/auto-type-1.c
  c5e609e52b13380aa093916bc7d09fce  gcc/testsuite/gcc.dg/auto-type-2.c
! 678b9390a38368642e36f876da581ece  gcc/testsuite/gcc.dg/autopar/autopar.exp
  aa4d5a35793f7cfe360cd57078e1adc3  gcc/testsuite/gcc.dg/autopar/outer-1.c
  025c98b5845d57489814930464df1724  gcc/testsuite/gcc.dg/autopar/outer-2.c
  89a6c222b7a3ca9428f07d4ea8489cee  gcc/testsuite/gcc.dg/autopar/outer-3.c
--- 36210,36259 ----
  0331fe485ecb4fe569b79f3c65b5a70a  gcc/testsuite/gcc.dg/attr-weakref-3.c
  a8b698b276857d272916880be5579a44  gcc/testsuite/gcc.dg/attr-weakref-4.c
  c42096cdd70af11210a8acce42d72fc4  gcc/testsuite/gcc.dg/attr-weakref-5.c
+ d990ca80c25ec2b5d2ec953b61daf384  gcc/testsuite/gcc.dg/auto-init-hardreg-1.c
+ 91009e4223d448494622eb8732e0760c  gcc/testsuite/gcc.dg/auto-init-pr102276-1.c
+ 93464aac28321802836a8df93c625a4f  gcc/testsuite/gcc.dg/auto-init-pr102276-2.c
+ f30673fe69e53e7e7af6886e4cdf896a  gcc/testsuite/gcc.dg/auto-init-pr102276-3.c
+ f574eca913474b1bc37fc7fa496acd55  gcc/testsuite/gcc.dg/auto-init-pr102276-4.c
+ 3d28b9f5207cefb7a9d96ac40ae8ee8f  gcc/testsuite/gcc.dg/auto-init-pr104550-1.c
+ f86a5f45014dd6b6334facb81fde87be  gcc/testsuite/gcc.dg/auto-init-pr104550-2.c
+ 8ffc16233cc0956bf5c82f8ae28b5ea8  gcc/testsuite/gcc.dg/auto-init-pr104550-3.c
+ a69fe26662acbdd1fdb8d02ce6149839  gcc/testsuite/gcc.dg/auto-init-sra-1.c
+ 743924d8cc84cf57d42c0053b295cbd6  gcc/testsuite/gcc.dg/auto-init-sra-2.c
+ 3f185bfa641b87236695aa87e0a0ceba  gcc/testsuite/gcc.dg/auto-init-uninit-1.c
+ af689fcf0e6540f0e5a60c11473f2f49  gcc/testsuite/gcc.dg/auto-init-uninit-12.c
+ 274ff8dff7819c1b53469aa71431c056  gcc/testsuite/gcc.dg/auto-init-uninit-13.c
+ d6f7c46e3498df8dad35d4281fd48b44  gcc/testsuite/gcc.dg/auto-init-uninit-14.c
+ 5ffaeba3da6f0c7ac9d8346effb216aa  gcc/testsuite/gcc.dg/auto-init-uninit-15.c
+ 5be5b751280a109e8bb4dfcb9acb6384  gcc/testsuite/gcc.dg/auto-init-uninit-16.c
+ fdfdc981e23a2b1ece9d480a29675f01  gcc/testsuite/gcc.dg/auto-init-uninit-17.c
+ a5758b25bb46b199ceb2adc8b48e41a0  gcc/testsuite/gcc.dg/auto-init-uninit-18.c
+ 120b99dd5651a9ab10bbfca8febd26ce  gcc/testsuite/gcc.dg/auto-init-uninit-19.c
+ a4c05cf84a9c561c56b9a31ff5c6ab81  gcc/testsuite/gcc.dg/auto-init-uninit-2.c
+ 0cae6d47a4a4582d941e0ef736d894dc  gcc/testsuite/gcc.dg/auto-init-uninit-20.c
+ ff24f696dd1bd0ee47e96489441f7eff  gcc/testsuite/gcc.dg/auto-init-uninit-21.c
+ 1e8af4f3edbd6ecfe191f7e28af257b2  gcc/testsuite/gcc.dg/auto-init-uninit-22.c
+ 93ceb61e4fd65ecff9b3dcaa38225ca0  gcc/testsuite/gcc.dg/auto-init-uninit-23.c
+ 9f1c262e0ccfa2788a5fcb2552e56633  gcc/testsuite/gcc.dg/auto-init-uninit-24.c
+ 88457b4ff52a6643a0809a384bd9c0b5  gcc/testsuite/gcc.dg/auto-init-uninit-25.c
+ ff36cf2d1e5cc98fdfc0014952134d30  gcc/testsuite/gcc.dg/auto-init-uninit-26.c
+ 75e1b810f480ea436751b6b3f5b0d15e  gcc/testsuite/gcc.dg/auto-init-uninit-3.c
+ 435dbe3319fe05124c4fb1e67bdc2670  gcc/testsuite/gcc.dg/auto-init-uninit-34.c
+ 1af6dcdbc28166879752747d6ba19c93  gcc/testsuite/gcc.dg/auto-init-uninit-36.c
+ 1746a4b77df05a5a2abae884f2e7de59  gcc/testsuite/gcc.dg/auto-init-uninit-37.c
+ f13eb37d5824220df4ae25a6d2accb9b  gcc/testsuite/gcc.dg/auto-init-uninit-4.c
+ b2d3b93f1ce6a31029e471bbe42f94ce  gcc/testsuite/gcc.dg/auto-init-uninit-5.c
+ ef1038696edf0ae2c16b23b22287d830  gcc/testsuite/gcc.dg/auto-init-uninit-6.c
+ ed2f587db175738c9860acd6b53ab7a7  gcc/testsuite/gcc.dg/auto-init-uninit-8.c
+ 707c74b1f65e2977a7cc93c87073c0c2  gcc/testsuite/gcc.dg/auto-init-uninit-9.c
+ b6bd1800be7011feea42a9717b529669  gcc/testsuite/gcc.dg/auto-init-uninit-A.c
+ da68ac31262c3fbaefafb059699ba37f  gcc/testsuite/gcc.dg/auto-init-uninit-B.c
+ 6491a264d2cddc0eaf16befd84a7a690  gcc/testsuite/gcc.dg/auto-init-uninit-C.c
+ 502bde940d7765e100ed9e9fd499e134  gcc/testsuite/gcc.dg/auto-init-uninit-H.c
+ 8d9520bfb4ebbd2f6a732b6469a0a7f9  gcc/testsuite/gcc.dg/auto-init-uninit-I.c
  728ad18ac3017195abfa17386cbb7a12  gcc/testsuite/gcc.dg/auto-type-1.c
  c5e609e52b13380aa093916bc7d09fce  gcc/testsuite/gcc.dg/auto-type-2.c
! d8bcaf6d4213e846b44f0796720f8fac  gcc/testsuite/gcc.dg/autopar/autopar.exp
  aa4d5a35793f7cfe360cd57078e1adc3  gcc/testsuite/gcc.dg/autopar/outer-1.c
  025c98b5845d57489814930464df1724  gcc/testsuite/gcc.dg/autopar/outer-2.c
  89a6c222b7a3ca9428f07d4ea8489cee  gcc/testsuite/gcc.dg/autopar/outer-3.c
*************** f55a1275009ff460210d4b9c67a189a3  gcc/te
*** 34918,34923 ****
--- 36316,36322 ----
  f5e8e01c793a266fa480ec93df8de475  gcc/testsuite/gcc.dg/autopar/uns-outer-6.c
  66a2373ba20bd9b0ef16c05942372b8b  gcc/testsuite/gcc.dg/bad-binary-ops.c
  c3ec1cf03ff502f2425714ca80d1c941  gcc/testsuite/gcc.dg/bad-dereference.c
+ 3ed234e057083db19f4c210ea0092fa9  gcc/testsuite/gcc.dg/bad-pragma-locations.c
  1119d66eeb90467d2bae27e88b92d6bf  gcc/testsuite/gcc.dg/bconstp-1.c
  5e5285944749a753ae7cfa3cc1c2f6fd  gcc/testsuite/gcc.dg/bconstp-2.c
  9c81bf8464f7d045404719b2b619049c  gcc/testsuite/gcc.dg/bconstp-3.c
*************** bed618cfd7222010217a3fe29f1175a8  gcc/te
*** 34930,34935 ****
--- 36329,36346 ----
  ec5b9b1f32647a9cacda264af9d27b8f  gcc/testsuite/gcc.dg/bf-ms-layout.c
  7f07619c88610f37cf243e4e9548534f  gcc/testsuite/gcc.dg/bf-no-ms-layout.c
  0e3716c5009f5c5e6a6e6e89d7cb2051  gcc/testsuite/gcc.dg/bf-spl1.c
+ 57cf54780d88a3f417a30d390ef6649e  gcc/testsuite/gcc.dg/bic-bitmask-13.c
+ 538f63b8c374b19a356184ca0a517f3c  gcc/testsuite/gcc.dg/bic-bitmask-14.c
+ b8787deaac57627a4fa9f02078cfc415  gcc/testsuite/gcc.dg/bic-bitmask-15.c
+ ee21c066d59e8e04ed47a79b46b1f6ae  gcc/testsuite/gcc.dg/bic-bitmask-16.c
+ 6a3b4c949d2284d53ba74da787a2517d  gcc/testsuite/gcc.dg/bic-bitmask-17.c
+ 37a739d4ed53fce5148aca0d09e6929a  gcc/testsuite/gcc.dg/bic-bitmask-18.c
+ 2428f7a4372a0e4028f1d2fbe742c515  gcc/testsuite/gcc.dg/bic-bitmask-19.c
+ 2dd3590815f2972b3111c5b729593875  gcc/testsuite/gcc.dg/bic-bitmask-20.c
+ 0123b2ed36e1f8b664eb51317411404c  gcc/testsuite/gcc.dg/bic-bitmask-21.c
+ 6156aeedc0e5a6db47ab9443faeaf667  gcc/testsuite/gcc.dg/bic-bitmask-22.c
+ 15568b6b6498cb4d440a5f7ef6a5aadd  gcc/testsuite/gcc.dg/bic-bitmask-7.c
+ b253b577b50b503239b7ab43dc7d80ee  gcc/testsuite/gcc.dg/bic-bitmask.h
  f4bf2e19a922fd5744282ba866d43442  gcc/testsuite/gcc.dg/binary-constants-1.c
  82e7cacde02c83919fa111dccb87525b  gcc/testsuite/gcc.dg/binary-constants-2.c
  c54768f9350a4a646eac0814d35f84bf  gcc/testsuite/gcc.dg/binary-constants-3.c
*************** c9bbd70f3dbd7558a9c1c7a6e5901e7b  gcc/te
*** 34981,34987 ****
  29dee620c099065fec233358259a8a12  gcc/testsuite/gcc.dg/bss.c
  bc286f4ff365c89c597fd19aa53a46c4  gcc/testsuite/gcc.dg/builtin-alloc-size.c
  fef5a8d7a1f7cdc1db96edce26047f61  gcc/testsuite/gcc.dg/builtin-apply1.c
! 78d28f033625b669605e6d67ec738c43  gcc/testsuite/gcc.dg/builtin-apply2.c
  4844379205910806b383dbde4bb6bb59  gcc/testsuite/gcc.dg/builtin-apply3.c
  e1eed7b7fb47002f691a4ddfbcb683a9  gcc/testsuite/gcc.dg/builtin-apply4.c
  ba28fc0bde6fe3759423e5308218c5de  gcc/testsuite/gcc.dg/builtin-arith-overflow-1.c
--- 36392,36398 ----
  29dee620c099065fec233358259a8a12  gcc/testsuite/gcc.dg/bss.c
  bc286f4ff365c89c597fd19aa53a46c4  gcc/testsuite/gcc.dg/builtin-alloc-size.c
  fef5a8d7a1f7cdc1db96edce26047f61  gcc/testsuite/gcc.dg/builtin-apply1.c
! db9849e61a5589377bb913beb6893b0f  gcc/testsuite/gcc.dg/builtin-apply2.c
  4844379205910806b383dbde4bb6bb59  gcc/testsuite/gcc.dg/builtin-apply3.c
  e1eed7b7fb47002f691a4ddfbcb683a9  gcc/testsuite/gcc.dg/builtin-apply4.c
  ba28fc0bde6fe3759423e5308218c5de  gcc/testsuite/gcc.dg/builtin-arith-overflow-1.c
*************** e37f4aca281a2c82829d2bf1650d5193  gcc/te
*** 34995,35000 ****
--- 36406,36413 ----
  4ce2c6f029c4970f13dfce974c8072b5  gcc/testsuite/gcc.dg/builtin-bswap-10.c
  999414d3fa6e5bfeb2e073f6ae328e91  gcc/testsuite/gcc.dg/builtin-bswap-11.c
  e54ba2d93788169a40952b8e3c57713a  gcc/testsuite/gcc.dg/builtin-bswap-12.c
+ 5e4b3be88724ad937e4321eb7b64cb57  gcc/testsuite/gcc.dg/builtin-bswap-13.c
+ 7e897d2d7b759e3af206940b06604c3d  gcc/testsuite/gcc.dg/builtin-bswap-14.c
  ffc151478579fb7668adfc666bae4351  gcc/testsuite/gcc.dg/builtin-bswap-2.c
  8ccef9903c65aa8a5c0f7230fad726cd  gcc/testsuite/gcc.dg/builtin-bswap-3.c
  7c810cf00f9d6aa8115b2f0dbc13b483  gcc/testsuite/gcc.dg/builtin-bswap-4.c
*************** dc15cf451146f969eb7aa4813cfbaac9  gcc/te
*** 35012,35017 ****
--- 36425,36452 ----
  b152d7b3044cd4c130385716be2c314d  gcc/testsuite/gcc.dg/builtin-complex-err-1.c
  8a5469840816c0e59551cba587e09908  gcc/testsuite/gcc.dg/builtin-complex-err-2.c
  0c222cc6e71e46ddf388523376157d29  gcc/testsuite/gcc.dg/builtin-constant_p-1.c
+ 9f503648a269c2cbb13ec94b04dd3900  gcc/testsuite/gcc.dg/builtin-dynamic-alloc-size.c
+ 4e30174eb353abd45bd016994a6fe451  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-0.c
+ ed02cb7e1879650329b72f07536751b0  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-1.c
+ 1ff75aa914f15c33a68e1cc40479cd14  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-10.c
+ 6728d15f57ec5dc1e75076fc95a6ef24  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-11.c
+ 9f8620548cc565190f9195dc5ccf4a96  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-12.c
+ 348f6748b02f93fa464f5b91e5e2acc8  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-13.c
+ 3834d60f95cc8498acf1c3196f438495  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-14.c
+ 48eca701a3e9f7ab01d7a73238b1aa35  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-15.c
+ c20cea884b6dfc628cdcbf331fdb46b7  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-16.c
+ 26c61662e9f84f77446c307aac0fc969  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-17.c
+ 7ba18a78460ef2def96b42cf9b6bcbea  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-18.c
+ 350c4a053d83646c38a9aab653275ba5  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-19.c
+ 66fed57f12ef67a1845d335338d126f5  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-2.c
+ 1f68cf4312d9ad1bc08c107749d9b6ec  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-3.c
+ d521316f56e64f3a838487217fe605ee  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-4.c
+ 6a3bd76db06e1cef893e79790a2fbaf9  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-5-main.c
+ aa300b6138aca54a87382d73d77b9afd  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-5.c
+ a5e27521e31c487bc91f8281068f33c3  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-6.c
+ d02094a46939c99eb39495aef7c0d8a1  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-7.c
+ 5433d2eaa76474e2fdf618b7fac6b4bc  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-8.c
+ 1e98ade028fd67df929780516d3fd544  gcc/testsuite/gcc.dg/builtin-dynamic-object-size-9.c
  03141515e920f2326efdd83f7b0681fd  gcc/testsuite/gcc.dg/builtin-ffs-1.c
  919180fc1760483ded11685f7fb367c7  gcc/testsuite/gcc.dg/builtin-has-attribute.c
  accf3598507b8caeb30c44d0552888e4  gcc/testsuite/gcc.dg/builtin-inf-1.c
*************** accf3598507b8caeb30c44d0552888e4  gcc/te
*** 35021,35043 ****
  297482280bba1db1aca62784fdb79b21  gcc/testsuite/gcc.dg/builtin-memchr.c
  a44ac88aa8a6da31cb9b33133af1f622  gcc/testsuite/gcc.dg/builtin-memcpy-2.c
  8f379b287c70f375ef6c56e42f7b980a  gcc/testsuite/gcc.dg/builtin-memcpy.c
! 5f87b3c9bc619a716a474970cdb0e236  gcc/testsuite/gcc.dg/builtin-object-size-1.c
! e977951785a41750921c14be52497347  gcc/testsuite/gcc.dg/builtin-object-size-10.c
  f122f7a281486824649a6f822f81d9d0  gcc/testsuite/gcc.dg/builtin-object-size-11.c
  7b0a4ff07e98aabe7730bc4b5a26e330  gcc/testsuite/gcc.dg/builtin-object-size-12.c
  9f066d6a8e0811eae2ce1fbd68b6a261  gcc/testsuite/gcc.dg/builtin-object-size-13.c
  06173dc325d89329fd5bac54f74ca67c  gcc/testsuite/gcc.dg/builtin-object-size-14.c
  31cd2e853fa3ab150360036e531e0590  gcc/testsuite/gcc.dg/builtin-object-size-15.c
! 5ba14654205964f1429fed9861e68e66  gcc/testsuite/gcc.dg/builtin-object-size-16.c
! 7e9e7a2b3025f8e01e257f5f2081e978  gcc/testsuite/gcc.dg/builtin-object-size-17.c
  869d1b49b0a28836ddaebf74d3462566  gcc/testsuite/gcc.dg/builtin-object-size-18.c
  581a4845d9f8f961c091eaf11a4010f0  gcc/testsuite/gcc.dg/builtin-object-size-19.c
! bccfbcebba6af45769a56fafeb152ae5  gcc/testsuite/gcc.dg/builtin-object-size-2.c
  e93226957585f3511d4d0f68e18234d7  gcc/testsuite/gcc.dg/builtin-object-size-20.c
  6866a8187425ffe835c719a45992dae9  gcc/testsuite/gcc.dg/builtin-object-size-21.c
! 64f46620da8757a8b762bbe273a1f084  gcc/testsuite/gcc.dg/builtin-object-size-3.c
! a7fcf95cb160fae2721ec0d0470911c2  gcc/testsuite/gcc.dg/builtin-object-size-4.c
! d65c470a9173c5d0f37963aa85d49753  gcc/testsuite/gcc.dg/builtin-object-size-5.c
  67f72c638739e21e5096efb451c998f8  gcc/testsuite/gcc.dg/builtin-object-size-6.c
  7d6776c6e0c882e6255b02670cc2458d  gcc/testsuite/gcc.dg/builtin-object-size-7.c
  6cc4c5737df46810ea698b6978820d9e  gcc/testsuite/gcc.dg/builtin-object-size-8.c
--- 36456,36478 ----
  297482280bba1db1aca62784fdb79b21  gcc/testsuite/gcc.dg/builtin-memchr.c
  a44ac88aa8a6da31cb9b33133af1f622  gcc/testsuite/gcc.dg/builtin-memcpy-2.c
  8f379b287c70f375ef6c56e42f7b980a  gcc/testsuite/gcc.dg/builtin-memcpy.c
! 9228436e03a4a423568d53a9b68905e6  gcc/testsuite/gcc.dg/builtin-object-size-1.c
! 03a590dda2c435b8a60eaa573bd785b0  gcc/testsuite/gcc.dg/builtin-object-size-10.c
  f122f7a281486824649a6f822f81d9d0  gcc/testsuite/gcc.dg/builtin-object-size-11.c
  7b0a4ff07e98aabe7730bc4b5a26e330  gcc/testsuite/gcc.dg/builtin-object-size-12.c
  9f066d6a8e0811eae2ce1fbd68b6a261  gcc/testsuite/gcc.dg/builtin-object-size-13.c
  06173dc325d89329fd5bac54f74ca67c  gcc/testsuite/gcc.dg/builtin-object-size-14.c
  31cd2e853fa3ab150360036e531e0590  gcc/testsuite/gcc.dg/builtin-object-size-15.c
! bd55267dc409bf4cd73fc7fdf17926e1  gcc/testsuite/gcc.dg/builtin-object-size-16.c
! d729b9d6db81d465a307ade374f42256  gcc/testsuite/gcc.dg/builtin-object-size-17.c
  869d1b49b0a28836ddaebf74d3462566  gcc/testsuite/gcc.dg/builtin-object-size-18.c
  581a4845d9f8f961c091eaf11a4010f0  gcc/testsuite/gcc.dg/builtin-object-size-19.c
! ae1e70635c1a14b8cfe5cced7df05968  gcc/testsuite/gcc.dg/builtin-object-size-2.c
  e93226957585f3511d4d0f68e18234d7  gcc/testsuite/gcc.dg/builtin-object-size-20.c
  6866a8187425ffe835c719a45992dae9  gcc/testsuite/gcc.dg/builtin-object-size-21.c
! c98801c65ec071817d9b6de8dd8dc855  gcc/testsuite/gcc.dg/builtin-object-size-3.c
! cd31dce4f5149a3d6b8ec494914a9eae  gcc/testsuite/gcc.dg/builtin-object-size-4.c
! 1154c87579fbeba4e04c1f1b8d7bc0f1  gcc/testsuite/gcc.dg/builtin-object-size-5.c
  67f72c638739e21e5096efb451c998f8  gcc/testsuite/gcc.dg/builtin-object-size-6.c
  7d6776c6e0c882e6255b02670cc2458d  gcc/testsuite/gcc.dg/builtin-object-size-7.c
  6cc4c5737df46810ea698b6978820d9e  gcc/testsuite/gcc.dg/builtin-object-size-8.c
*************** e99f948a2420290f76df40092a42fab0  gcc/te
*** 35130,35135 ****
--- 36565,36571 ----
  3a4118157005aab9c57cd3714270e0b2  gcc/testsuite/gcc.dg/builtins-68.c
  f3b66c442dc3455142dcfd21e883bf0f  gcc/testsuite/gcc.dg/builtins-69.c
  1863267706e2e098673111de96a7b9c7  gcc/testsuite/gcc.dg/builtins-7.c
+ e75838cbd7442b0b3e01123b50e4cc85  gcc/testsuite/gcc.dg/builtins-70.c
  467c6e1601c1415e20b67f4540598f61  gcc/testsuite/gcc.dg/builtins-8.c
  5574f1c7eed7cb24dbd2cb84869dac93  gcc/testsuite/gcc.dg/builtins-85.c
  6364406d43c3bf3c1af19d21027e1a8a  gcc/testsuite/gcc.dg/builtins-9.c
*************** fb6856ed42272d2e75705288147407d4  gcc/te
*** 35164,35169 ****
--- 36600,36606 ----
  47c6a18b65d09a5d8bfb22cb00e62f09  gcc/testsuite/gcc.dg/c11-compare-incomplete-1.c
  507babbb6da0d18aba4c0234531bfc0e  gcc/testsuite/gcc.dg/c11-compare-incomplete-2.c
  12ef1e10f51b7a7205f424c6c3ce9ef9  gcc/testsuite/gcc.dg/c11-complex-1.c
+ 4379db3d95da5339cde0b57fed54fb14  gcc/testsuite/gcc.dg/c11-digit-separators-1.c
  d9a2f9168158c56d6257cb7866dbe1f8  gcc/testsuite/gcc.dg/c11-float-1.c
  5a0906a4ebef0b27aa6dd7d4cad0cf9f  gcc/testsuite/gcc.dg/c11-float-2.c
  04b2d9216570787bdcc1f01fba4ad2a8  gcc/testsuite/gcc.dg/c11-float-3.c
*************** e197e3e287789d1604bf0e0c997b89fe  gcc/te
*** 35190,35195 ****
--- 36627,36633 ----
  d937c7e18efe1399d1b5f21633b97edd  gcc/testsuite/gcc.dg/c11-parm-omit-3.c
  935cd3a139ee689c19326c2aa5cdf149  gcc/testsuite/gcc.dg/c11-parm-omit-4.c
  d595f49307eb5192b976a26bca7a9c80  gcc/testsuite/gcc.dg/c11-pointer-float-1.c
+ 15069243a7a641f7a2705a0d1fc6df01  gcc/testsuite/gcc.dg/c11-qual-1.c
  efe9f8d43440cd3d52de742b3f407e19  gcc/testsuite/gcc.dg/c11-static-assert-1.c
  7108e0131dd58f0a0943232e07ae7a08  gcc/testsuite/gcc.dg/c11-static-assert-10.c
  1e1c0e1555e17610aa6e95027b7f72c1  gcc/testsuite/gcc.dg/c11-static-assert-2.c
*************** e2a0227684c75fbd79e6e01a85396388  gcc/te
*** 35208,35213 ****
--- 36646,36653 ----
  cce86829bf185b88188e1478f6f86b43  gcc/testsuite/gcc.dg/c11-typedef-1.c
  6f673adf8dbf19341d44962e8f0acf41  gcc/testsuite/gcc.dg/c11-uni-string-1.c
  8b1d5bf350b30002364428953e7e269f  gcc/testsuite/gcc.dg/c11-uni-string-2.c
+ 4ad07e2f74164421471239f2c41fc7d1  gcc/testsuite/gcc.dg/c11-unproto-1.c
+ 97d39f61e5ba801a91ba7cd19c75c4f4  gcc/testsuite/gcc.dg/c11-unproto-2.c
  0f19b008744e2186cb49b549d66ca484  gcc/testsuite/gcc.dg/c11-utf8char-1.c
  d8fec2fce7b0346ffeb1fbb2bd55d7e5  gcc/testsuite/gcc.dg/c11-version-1.c
  7e31e73dc6465f7388bf6d84893c3a04  gcc/testsuite/gcc.dg/c11-version-2.c
*************** ade7f27c3af0e55308b3f8378df7247b  gcc/te
*** 35225,35231 ****
  f92fdbd923b9ff881a9b6de11a93320f  gcc/testsuite/gcc.dg/c2x-attr-fallthrough-4.c
  9d7950144aebc8e6d928d4108ed10486  gcc/testsuite/gcc.dg/c2x-attr-fallthrough-5.c
  92ef8a5b7fe2bb4f8741a8267b9abb0b  gcc/testsuite/gcc.dg/c2x-attr-fallthrough-6.c
! 59a7370a702940f2d82aeef30bcd3cae  gcc/testsuite/gcc.dg/c2x-attr-maybe_unused-1.c
  4672e1aa92d294e631e09697818f5a40  gcc/testsuite/gcc.dg/c2x-attr-maybe_unused-2.c
  ddd2e02d1492c4dd2fd93bb872328e72  gcc/testsuite/gcc.dg/c2x-attr-maybe_unused-3.c
  fcb97faa38daf1241ac63b55b08b2291  gcc/testsuite/gcc.dg/c2x-attr-maybe_unused-4.c
--- 36665,36671 ----
  f92fdbd923b9ff881a9b6de11a93320f  gcc/testsuite/gcc.dg/c2x-attr-fallthrough-4.c
  9d7950144aebc8e6d928d4108ed10486  gcc/testsuite/gcc.dg/c2x-attr-fallthrough-5.c
  92ef8a5b7fe2bb4f8741a8267b9abb0b  gcc/testsuite/gcc.dg/c2x-attr-fallthrough-6.c
! 07b79ef75eca03e2bdf5c3620e83aa32  gcc/testsuite/gcc.dg/c2x-attr-maybe_unused-1.c
  4672e1aa92d294e631e09697818f5a40  gcc/testsuite/gcc.dg/c2x-attr-maybe_unused-2.c
  ddd2e02d1492c4dd2fd93bb872328e72  gcc/testsuite/gcc.dg/c2x-attr-maybe_unused-3.c
  fcb97faa38daf1241ac63b55b08b2291  gcc/testsuite/gcc.dg/c2x-attr-maybe_unused-4.c
*************** ba639c5eb00f59a2ddffbee0249ebe64  gcc/te
*** 35244,35249 ****
--- 36684,36692 ----
  877291ec915869126d7261bbbafe5547  gcc/testsuite/gcc.dg/c2x-bool-1.c
  e4c4e5028ccfb46dfcc79a41e4ed5488  gcc/testsuite/gcc.dg/c2x-bool-limits-1.c
  396a74b7c1b42fdf67e5d3c36f655b65  gcc/testsuite/gcc.dg/c2x-builtins-1.c
+ 1daa7fbd8e2c976af88ccab67f239d60  gcc/testsuite/gcc.dg/c2x-digit-separators-1.c
+ f3a13d08ce265f16fb1e0bbff905dda0  gcc/testsuite/gcc.dg/c2x-digit-separators-2.c
+ ec1408942667add450a81147a38df95c  gcc/testsuite/gcc.dg/c2x-digit-separators-3.c
  90f5c814361317bbacff5ea0a7b26cf1  gcc/testsuite/gcc.dg/c2x-float-1.c
  7f0f89a42c938a971abc808663e81081  gcc/testsuite/gcc.dg/c2x-float-10.c
  1798707b6c0b60203833f7f8a48f98a5  gcc/testsuite/gcc.dg/c2x-float-2.c
*************** c65227cf031fcfb6cea27f0b13ee542c  gcc/te
*** 35276,35283 ****
--- 36719,36735 ----
  597596705ccebbf3aaa0271c02ad0ee9  gcc/testsuite/gcc.dg/c2x-parm-omit-2.c
  46a1998613654b31cf08003d875762d9  gcc/testsuite/gcc.dg/c2x-parm-omit-3.c
  a941a1c2cdfbb1167a15b9c33ae3006d  gcc/testsuite/gcc.dg/c2x-parm-omit-4.c
+ 496920d3fda20edc90e06e664f4ce071  gcc/testsuite/gcc.dg/c2x-qual-1.c
+ f32ade1ad180ee81c2c0349416e6af4b  gcc/testsuite/gcc.dg/c2x-qual-2.c
+ 5950785a1ab6a8fe575532c382585a53  gcc/testsuite/gcc.dg/c2x-qual-3.c
+ 6dcdb16f62e70c462fc6172bfb9800f1  gcc/testsuite/gcc.dg/c2x-qual-4.c
+ 3dbc169cb2d87ce7505e48ad21d53407  gcc/testsuite/gcc.dg/c2x-qual-5.c
+ 15a48f846fe4775adf814dec6428b651  gcc/testsuite/gcc.dg/c2x-qual-6.c
+ b5e0251d7581115667b0b89d014c5915  gcc/testsuite/gcc.dg/c2x-qual-7.c
  5a0b89a86561a35e1a3f052f805e31a5  gcc/testsuite/gcc.dg/c2x-static-assert-1.c
  b7acfb59773a55aff25adad54de3b253  gcc/testsuite/gcc.dg/c2x-static-assert-2.c
+ fa87adf74504500c72e9d9e5a5a7d185  gcc/testsuite/gcc.dg/c2x-unproto-1.c
+ 8eccadb2d48ac4262caa832fc12500b7  gcc/testsuite/gcc.dg/c2x-unproto-2.c
  c641ae56954ced84038d41d853a95c30  gcc/testsuite/gcc.dg/c2x-utf8char-1.c
  397c0c1279e1fadf70c464bb612caec1  gcc/testsuite/gcc.dg/c2x-utf8char-2.c
  9eccf342d72be6b4c7523a233760ab3f  gcc/testsuite/gcc.dg/c2x-utf8char-3.c
*************** bd34927c7e8ef0637a91744aa30c8e22  gcc/te
*** 35509,35515 ****
  7bcfb1562ffc5ec66175fdcc52054745  gcc/testsuite/gcc.dg/charset/attribute2.c
  d256d028f437be7e103b223e7c20fe96  gcc/testsuite/gcc.dg/charset/builtin1.c
  a00066d47a6f8dc20ebf4861a2541212  gcc/testsuite/gcc.dg/charset/builtin2.c
! 95996a1a10f4889447e7b54d67e6effb  gcc/testsuite/gcc.dg/charset/charset.exp
  8c029ca8175e4d8995ea0dbac6040733  gcc/testsuite/gcc.dg/charset/extern.c
  5314225894f8ef8a8d8249f4a0973380  gcc/testsuite/gcc.dg/charset/function.c
  a59f9cb8c1327a655a207f133f19d6fb  gcc/testsuite/gcc.dg/charset/string.c
--- 36961,36967 ----
  7bcfb1562ffc5ec66175fdcc52054745  gcc/testsuite/gcc.dg/charset/attribute2.c
  d256d028f437be7e103b223e7c20fe96  gcc/testsuite/gcc.dg/charset/builtin1.c
  a00066d47a6f8dc20ebf4861a2541212  gcc/testsuite/gcc.dg/charset/builtin2.c
! e0f8e7afd6458ec3bc591161c6ab8ed1  gcc/testsuite/gcc.dg/charset/charset.exp
  8c029ca8175e4d8995ea0dbac6040733  gcc/testsuite/gcc.dg/charset/extern.c
  5314225894f8ef8a8d8249f4a0973380  gcc/testsuite/gcc.dg/charset/function.c
  a59f9cb8c1327a655a207f133f19d6fb  gcc/testsuite/gcc.dg/charset/string.c
*************** d9e45b781a97ee5ac71b788011eae52c  gcc/te
*** 35535,35540 ****
--- 36987,36994 ----
  b69efdebbddd406113314f5e2222b299  gcc/testsuite/gcc.dg/comp-goto-2.c
  a54f6f3014d2438520af47284381e304  gcc/testsuite/gcc.dg/comp-goto-3.c
  1f4f70817a422107e4e1998a93c17721  gcc/testsuite/gcc.dg/comp-goto-4.c
+ e0c7b9babb964447eeb6e75c819fd78a  gcc/testsuite/gcc.dg/comp-goto-5.c
+ 5e47deeb63a347d23399819f0088659b  gcc/testsuite/gcc.dg/comp-goto-6.c
  78fe3f6717c09fb4c953681eb32836bf  gcc/testsuite/gcc.dg/comp-return-1.c
  a12939cd458d24633aac89881d89e6ad  gcc/testsuite/gcc.dg/compare1.c
  ef38565f80d00d4a0dc79476956bb0b8  gcc/testsuite/gcc.dg/compare10.c
*************** c7cb5e1831bea1746c3a206e4c26e3ec  gcc/te
*** 35547,35553 ****
  ed52253f6b0d3e0e42d8c7d911691e47  gcc/testsuite/gcc.dg/compare8.c
  e505e91e0c3898015606540b084a3cf3  gcc/testsuite/gcc.dg/compare9.c
  320a670a68ed763f73f02634dc198ac9  gcc/testsuite/gcc.dg/compat/compat-common.h
! 1eb9a72dcfbd9055d91e3afd4aa28aca  gcc/testsuite/gcc.dg/compat/compat.exp
  24894b4e4b3498731affefac610f0a05  gcc/testsuite/gcc.dg/compat/fnptr-by-value-1_main.c
  fe9eda5144c4b80c732bde86debf0550  gcc/testsuite/gcc.dg/compat/fnptr-by-value-1_x.c
  564c8abb5b6fdd9d796e4c9983416c75  gcc/testsuite/gcc.dg/compat/fnptr-by-value-1_y.c
--- 37001,37007 ----
  ed52253f6b0d3e0e42d8c7d911691e47  gcc/testsuite/gcc.dg/compare8.c
  e505e91e0c3898015606540b084a3cf3  gcc/testsuite/gcc.dg/compare9.c
  320a670a68ed763f73f02634dc198ac9  gcc/testsuite/gcc.dg/compat/compat-common.h
! a70e25d008273715c9e906a4a5aafc01  gcc/testsuite/gcc.dg/compat/compat.exp
  24894b4e4b3498731affefac610f0a05  gcc/testsuite/gcc.dg/compat/fnptr-by-value-1_main.c
  fe9eda5144c4b80c732bde86debf0550  gcc/testsuite/gcc.dg/compat/fnptr-by-value-1_x.c
  564c8abb5b6fdd9d796e4c9983416c75  gcc/testsuite/gcc.dg/compat/fnptr-by-value-1_y.c
*************** a3ac98dcec269f59ea0f7ebc9b8c3297  gcc/te
*** 35565,35570 ****
--- 37019,37028 ----
  96e66d811afbddf820fffec4485a28c5  gcc/testsuite/gcc.dg/compat/mixed-struct-check.h
  33b111287b9ff87242fe27859d89a852  gcc/testsuite/gcc.dg/compat/mixed-struct-defs.h
  afd394c71967624882d06b437c9681ca  gcc/testsuite/gcc.dg/compat/mixed-struct-init.h
+ eca34388b90d81484c05ad9aa11075da  gcc/testsuite/gcc.dg/compat/pr102024_main.c
+ 9706266a3c3013aa53f61943cf5ec6c7  gcc/testsuite/gcc.dg/compat/pr102024_test.h
+ 07d4e15a3bb1e752e1463cdc59051e7e  gcc/testsuite/gcc.dg/compat/pr102024_x.c
+ 1a910ed0ae68c9280f648fa883503454  gcc/testsuite/gcc.dg/compat/pr102024_y.c
  d74b89e56176fb529e8bb7e7a09ce41d  gcc/testsuite/gcc.dg/compat/pr38736_main.c
  8f20c43d31513b2af00eae22d51e49ba  gcc/testsuite/gcc.dg/compat/pr38736_x.c
  c7861cb9c33a40ea18f9ec149a743d3e  gcc/testsuite/gcc.dg/compat/pr38736_y.c
*************** b13ce33543763e05e497e6e9b0b06afc  gcc/te
*** 35722,35728 ****
  b2ee80d950ef18b6d552d6f80b1ea7ec  gcc/testsuite/gcc.dg/compat/struct-complex-2_main.c
  a03c72d9882332482357735b2b82316a  gcc/testsuite/gcc.dg/compat/struct-complex-2_x.c
  8797a70232b48157299f45876cf6b247  gcc/testsuite/gcc.dg/compat/struct-complex-2_y.c
! 7a45e58e33ccedbc0d391ec8ce29f1c1  gcc/testsuite/gcc.dg/compat/struct-layout-1.exp
  63acee7a9bb7d9a457beb370e4beede2  gcc/testsuite/gcc.dg/compat/struct-layout-1.h
  d628ab6f03137145384ca913f20d6ac3  gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c
  997082aeb20119519c8c3e77ee7f6cd1  gcc/testsuite/gcc.dg/compat/struct-layout-1_main.c
--- 37180,37186 ----
  b2ee80d950ef18b6d552d6f80b1ea7ec  gcc/testsuite/gcc.dg/compat/struct-complex-2_main.c
  a03c72d9882332482357735b2b82316a  gcc/testsuite/gcc.dg/compat/struct-complex-2_x.c
  8797a70232b48157299f45876cf6b247  gcc/testsuite/gcc.dg/compat/struct-complex-2_y.c
! 4c3b9b500200c32da01a0e4ce7ae6d7e  gcc/testsuite/gcc.dg/compat/struct-layout-1.exp
  63acee7a9bb7d9a457beb370e4beede2  gcc/testsuite/gcc.dg/compat/struct-layout-1.h
  d628ab6f03137145384ca913f20d6ac3  gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c
  997082aeb20119519c8c3e77ee7f6cd1  gcc/testsuite/gcc.dg/compat/struct-layout-1_main.c
*************** d6fdc59bae27f9e3097840361d13c67a  gcc/te
*** 35873,35879 ****
  342b42bbace19c658aff4b38bba906c3  gcc/testsuite/gcc.dg/cpp/_Pragma7.c
  5d435e2d88987bbe8d9e62951d0d9d04  gcc/testsuite/gcc.dg/cpp/arith-1.c
  55fe1a813facb5ba765d096c8e745fa1  gcc/testsuite/gcc.dg/cpp/arith-3.c
! 554b47d6da103d1803a3aee83bb7fc07  gcc/testsuite/gcc.dg/cpp/assembl2.S
  d2ceecccef1772ada3beff72d6faed3e  gcc/testsuite/gcc.dg/cpp/assembler.S
  9ca3af4c8a508d8e50858641266fef9f  gcc/testsuite/gcc.dg/cpp/assert1.c
  5e115586c68bc98bb44755b93dcf7068  gcc/testsuite/gcc.dg/cpp/assert2.c
--- 37331,37337 ----
  342b42bbace19c658aff4b38bba906c3  gcc/testsuite/gcc.dg/cpp/_Pragma7.c
  5d435e2d88987bbe8d9e62951d0d9d04  gcc/testsuite/gcc.dg/cpp/arith-1.c
  55fe1a813facb5ba765d096c8e745fa1  gcc/testsuite/gcc.dg/cpp/arith-3.c
! 9ac932a496455d65e0bbcbb06664aca5  gcc/testsuite/gcc.dg/cpp/assembl2.S
  d2ceecccef1772ada3beff72d6faed3e  gcc/testsuite/gcc.dg/cpp/assembler.S
  9ca3af4c8a508d8e50858641266fef9f  gcc/testsuite/gcc.dg/cpp/assert1.c
  5e115586c68bc98bb44755b93dcf7068  gcc/testsuite/gcc.dg/cpp/assert2.c
*************** c7a189aca9e28ef213e587486efddd56  gcc/te
*** 35884,35891 ****
--- 37342,37352 ----
  496fd661182992891454e1a97f9e8da3  gcc/testsuite/gcc.dg/cpp/backslash.c
  518079f5bd3713c612d16067f74f29b2  gcc/testsuite/gcc.dg/cpp/backslash2.c
  8f51f2bf3c9792e415bae62650028376  gcc/testsuite/gcc.dg/cpp/builtin-macro-1.c
+ 37d5a2a32c5264c67c0b77cd9832e868  gcc/testsuite/gcc.dg/cpp/c11-elifdef-1.c
  fcc0ebd873adc208f52d57df24688339  gcc/testsuite/gcc.dg/cpp/c11-scope-1.c
  51e01528783cda46e99a6baa7fb77e34  gcc/testsuite/gcc.dg/cpp/c17-scope-1.c
+ ab8ae4908a134665ec2cb7931aacecf0  gcc/testsuite/gcc.dg/cpp/c2x-elifdef-1.c
+ 0609335dbd9bb86e934747eee7857d95  gcc/testsuite/gcc.dg/cpp/c2x-elifdef-2.c
  e218b8825a7e74b082a068f31665ad82  gcc/testsuite/gcc.dg/cpp/c2x-scope-1.c
  e3fdf9e6251e4e33e1ffc1261f688a0d  gcc/testsuite/gcc.dg/cpp/c2x-scope-2.c
  bbda00c98c81c2379844c5d755ee7246  gcc/testsuite/gcc.dg/cpp/c89-pedantic.c
*************** d62663c6040cd44ce9ceaef5ef47e6be  gcc/te
*** 35950,35956 ****
  0afc77e6745b381c2db4e3eb47069397  gcc/testsuite/gcc.dg/cpp/cmdlne-dU-8.c
  dc9eac76c9e4283c4325c2a6c902a00b  gcc/testsuite/gcc.dg/cpp/cmdlne-dU-9.c
  d698e775932010971513c46f0883bce0  gcc/testsuite/gcc.dg/cpp/counter-1.c
! d2c8b81a59a8ae3e36d9b69e01d06f87  gcc/testsuite/gcc.dg/cpp/cpp.exp
  a4207c77f8d160b9e8cfe0b186630d5a  gcc/testsuite/gcc.dg/cpp/cxxcom1.c
  d77a661fbfed762f6397bfd3581e855e  gcc/testsuite/gcc.dg/cpp/cxxcom2.c
  8af19f954e4c7d8397aa53ac210b124e  gcc/testsuite/gcc.dg/cpp/cxxcom2.h
--- 37411,37417 ----
  0afc77e6745b381c2db4e3eb47069397  gcc/testsuite/gcc.dg/cpp/cmdlne-dU-8.c
  dc9eac76c9e4283c4325c2a6c902a00b  gcc/testsuite/gcc.dg/cpp/cmdlne-dU-9.c
  d698e775932010971513c46f0883bce0  gcc/testsuite/gcc.dg/cpp/counter-1.c
! 0a3ef9da4029805840c2946c0cf273d0  gcc/testsuite/gcc.dg/cpp/cpp.exp
  a4207c77f8d160b9e8cfe0b186630d5a  gcc/testsuite/gcc.dg/cpp/cxxcom1.c
  d77a661fbfed762f6397bfd3581e855e  gcc/testsuite/gcc.dg/cpp/cxxcom2.c
  8af19f954e4c7d8397aa53ac210b124e  gcc/testsuite/gcc.dg/cpp/cxxcom2.h
*************** b28d91565a9d3d3c36d42433a970d0a8  gcc/te
*** 35982,35987 ****
--- 37443,37452 ----
  b28d91565a9d3d3c36d42433a970d0a8  gcc/testsuite/gcc.dg/cpp/frame/one.framework/Frameworks/OneSub.framework/Headers/B.h
  5d89d576a9968b776fdfc226c6bffeab  gcc/testsuite/gcc.dg/cpp/frame/one.framework/Frameworks/OneSub.framework/Headers/C.h
  25ec68dbc03a8ee15912e94f21b09aad  gcc/testsuite/gcc.dg/cpp/frame/one.framework/Headers/one-includeSubs.h
+ 35bd445130b2ce5e686ab4e4e6861691  gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-1.c
+ f63929b880f2dbd68851c905df23edf9  gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-2.c
+ 0ed55dc91c36aa55323e9dc31635730d  gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-3.c
+ 843c5db890295f75563550551ef75427  gcc/testsuite/gcc.dg/cpp/gnu11-elifdef-4.c
  249f8cef8b8882e23c64416d1b349d1b  gcc/testsuite/gcc.dg/cpp/gnu11-scope-1.c
  387a38d01596b5031e131434b9e77173  gcc/testsuite/gcc.dg/cpp/gnu17-scope-1.c
  a2441b4fd086f33f11e77efdec935c19  gcc/testsuite/gcc.dg/cpp/gnu89-scope-1.c
*************** fb8d966edc2bb4f9de1858ef3f07c225  gcc/te
*** 36326,36332 ****
  c1aa9faf5b39d1bba0aeaa85934f3e1a  gcc/testsuite/gcc.dg/cpp/trad/redef1.c
  d02c582ddc7f3e7e944d26e530487750  gcc/testsuite/gcc.dg/cpp/trad/redef2.c
  98ee20f87a972bda969b7109dd4c69d2  gcc/testsuite/gcc.dg/cpp/trad/strify.c
! 2efe08ae2661f0b834f7c117271ca667  gcc/testsuite/gcc.dg/cpp/trad/trad.exp
  4934795b44ee5b4d4a100c69ae18a71a  gcc/testsuite/gcc.dg/cpp/trad/uchar.c
  9741e04a76510827749554c1610f8b02  gcc/testsuite/gcc.dg/cpp/trad/xwin1.c
  1cd5384614e3226fa238ee19dd09ecce  gcc/testsuite/gcc.dg/cpp/trigraphs.c
--- 37791,37797 ----
  c1aa9faf5b39d1bba0aeaa85934f3e1a  gcc/testsuite/gcc.dg/cpp/trad/redef1.c
  d02c582ddc7f3e7e944d26e530487750  gcc/testsuite/gcc.dg/cpp/trad/redef2.c
  98ee20f87a972bda969b7109dd4c69d2  gcc/testsuite/gcc.dg/cpp/trad/strify.c
! ff1061c8f772e71a7c8a53b7c194581d  gcc/testsuite/gcc.dg/cpp/trad/trad.exp
  4934795b44ee5b4d4a100c69ae18a71a  gcc/testsuite/gcc.dg/cpp/trad/uchar.c
  9741e04a76510827749554c1610f8b02  gcc/testsuite/gcc.dg/cpp/trad/xwin1.c
  1cd5384614e3226fa238ee19dd09ecce  gcc/testsuite/gcc.dg/cpp/trigraphs.c
*************** ce78b67bf7fe2746504fa0e106930e4d  gcc/te
*** 36350,36357 ****
  b50a156daf6b8fec1046eea9342912bc  gcc/testsuite/gcc.dg/cpp/ucnid-2.c
  4518c08636f0d2850cfc628428d7753d  gcc/testsuite/gcc.dg/cpp/ucnid-3-utf8.c
  bb69dd725b886a0073557e4197dbc090  gcc/testsuite/gcc.dg/cpp/ucnid-3.c
! 0b96ea076ab6d255e6ca48316d1f5e0b  gcc/testsuite/gcc.dg/cpp/ucnid-4-utf8.c
! d8d04bbbade8402d17a2cfa7a8ad6dae  gcc/testsuite/gcc.dg/cpp/ucnid-4.c
  dccde845ace954123ecd2ca98159393e  gcc/testsuite/gcc.dg/cpp/ucnid-5.c
  4fa00f4b44bc21b82c214e13b2f9770f  gcc/testsuite/gcc.dg/cpp/ucnid-6-utf8.c
  e774025e676a5ba24033d7695eb66167  gcc/testsuite/gcc.dg/cpp/ucnid-6.c
--- 37815,37823 ----
  b50a156daf6b8fec1046eea9342912bc  gcc/testsuite/gcc.dg/cpp/ucnid-2.c
  4518c08636f0d2850cfc628428d7753d  gcc/testsuite/gcc.dg/cpp/ucnid-3-utf8.c
  bb69dd725b886a0073557e4197dbc090  gcc/testsuite/gcc.dg/cpp/ucnid-3.c
! 82606900f3a3963514eb4ab2781fdefd  gcc/testsuite/gcc.dg/cpp/ucnid-4-utf8.c
! 279c2382c941dd479d41e97f4c4eacbb  gcc/testsuite/gcc.dg/cpp/ucnid-4.c
! efc11e309d1c6b47c657a091b698ca2d  gcc/testsuite/gcc.dg/cpp/ucnid-5-utf8.c
  dccde845ace954123ecd2ca98159393e  gcc/testsuite/gcc.dg/cpp/ucnid-5.c
  4fa00f4b44bc21b82c214e13b2f9770f  gcc/testsuite/gcc.dg/cpp/ucnid-6-utf8.c
  e774025e676a5ba24033d7695eb66167  gcc/testsuite/gcc.dg/cpp/ucnid-6.c
*************** b60882f19a9ffb20fe947d5e53d0d6b4  gcc/te
*** 36387,36392 ****
--- 37853,37860 ----
  2917a8d69c01cecc2307903c89c0b267  gcc/testsuite/gcc.dg/cpp/warn-normalized-1.c
  8b5c03d398ab39b3f8b4852e9ee558eb  gcc/testsuite/gcc.dg/cpp/warn-normalized-2.c
  2e4eeb34f8c1173370ed379e8f6b92ab  gcc/testsuite/gcc.dg/cpp/warn-normalized-3.c
+ 27a335c51ae04665c1b65b5a817d5d7b  gcc/testsuite/gcc.dg/cpp/warn-normalized-4-bytes.c
+ 5bad521b05a8accaf66ae2372bde2cff  gcc/testsuite/gcc.dg/cpp/warn-normalized-4-unicode.c
  a99161b8a75e9238962748303dcdba69  gcc/testsuite/gcc.dg/cpp/warn-redefined-2.c
  34c3cc765e57c85b0a9987cf0c5298be  gcc/testsuite/gcc.dg/cpp/warn-redefined.c
  8f65efe0d0f7e1137ad1eefd5d7153e9  gcc/testsuite/gcc.dg/cpp/warn-traditional-2.c
*************** dc6685bcab4cd7ed276483fd8d031507  gcc/te
*** 36412,36420 ****
--- 37880,37890 ----
  d9dc93acb42ceaf059f158db6f7ea6d2  gcc/testsuite/gcc.dg/cwsc1.c
  31f68cda2cf50ca6f7c6c4a9cf4545fd  gcc/testsuite/gcc.dg/darwin-20040809-2.c
  fb2cff7f2512c80434d59d702b80e754  gcc/testsuite/gcc.dg/darwin-20040812-1.c
+ e3c60516eb9991f352d93d33fde752d3  gcc/testsuite/gcc.dg/darwin-aligned-globals.c
  3010db4d547a5bce8e8559d5cc724330  gcc/testsuite/gcc.dg/darwin-cfstring-1.c
  e43f7a2f13e87638cc08c97ba7326543  gcc/testsuite/gcc.dg/darwin-cfstring-2.c
  c4152191bf290926b6b747aa4397e015  gcc/testsuite/gcc.dg/darwin-cfstring-format-1.c
+ 4b9fbc9c27c43751e8b7c93a99afaabc  gcc/testsuite/gcc.dg/darwin-comm-1.c
  7e6cf48347ff53c1f9c509b921aceb22  gcc/testsuite/gcc.dg/darwin-comm.c
  b477cca030ba86435b074a334ee9bfd0  gcc/testsuite/gcc.dg/darwin-ld-1.c
  4ac76811f1a6c80f6dc5191396c37748  gcc/testsuite/gcc.dg/darwin-ld-2.c
*************** ee94511375797117140ca777fd1695b1  gcc/te
*** 36438,36444 ****
  704c9a2dca0a451cca6e5855f7f2347f  gcc/testsuite/gcc.dg/darwin-minversion-7.c
  5a8b775f8ce1e0cafb8782fbc39b58e4  gcc/testsuite/gcc.dg/darwin-minversion-8.c
  aa9dfa39c42ef65a88c0a708412fb842  gcc/testsuite/gcc.dg/darwin-minversion-9.c
! e8f6d0185a2daf606cad42ced94090fb  gcc/testsuite/gcc.dg/darwin-minversion-link.c
  b66bb093837bda7692b73c8aa9711e00  gcc/testsuite/gcc.dg/darwin-sections.c
  3cfa6daebed9a12884613012f50433e4  gcc/testsuite/gcc.dg/darwin-segaddr.c
  e3d2d2840d7d23dee7e2cd94e097a114  gcc/testsuite/gcc.dg/darwin-version-1.c
--- 37908,37914 ----
  704c9a2dca0a451cca6e5855f7f2347f  gcc/testsuite/gcc.dg/darwin-minversion-7.c
  5a8b775f8ce1e0cafb8782fbc39b58e4  gcc/testsuite/gcc.dg/darwin-minversion-8.c
  aa9dfa39c42ef65a88c0a708412fb842  gcc/testsuite/gcc.dg/darwin-minversion-9.c
! 9dbaa15e2b1a56ec7afc29c9929eedab  gcc/testsuite/gcc.dg/darwin-minversion-link.c
  b66bb093837bda7692b73c8aa9711e00  gcc/testsuite/gcc.dg/darwin-sections.c
  3cfa6daebed9a12884613012f50433e4  gcc/testsuite/gcc.dg/darwin-segaddr.c
  e3d2d2840d7d23dee7e2cd94e097a114  gcc/testsuite/gcc.dg/darwin-version-1.c
*************** e0f4e4120371cf9525caceb014ae14e7  gcc/te
*** 36458,36467 ****
--- 37928,38030 ----
  ed81fbec73210f2f3666b468aaf2f326  gcc/testsuite/gcc.dg/debug/20041023-1.c
  4a65d4ddcd3b8b23838f4b862b6f3194  gcc/testsuite/gcc.dg/debug/20041219-1.c
  31ac2b1d7a416b8ab4bf17dca3b4cfc3  gcc/testsuite/gcc.dg/debug/20050907-1.c
+ aa1824da5d04e6736c2ab0b97a0e0a33  gcc/testsuite/gcc.dg/debug/btf/btf-1.c
+ d7ad03b2a6b8077164c037f53a4ee77c  gcc/testsuite/gcc.dg/debug/btf/btf-2.c
+ 877845f7aad96a75a507fe303bd070cf  gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-struct-1.c
+ c6acea5fc07cc366b37498350830514f  gcc/testsuite/gcc.dg/debug/btf/btf-anonymous-union-1.c
+ 8a52dd50e428d9db591c61d1ad91de9a  gcc/testsuite/gcc.dg/debug/btf/btf-array-1.c
+ 7481ea021bfd8e9b987c6d51c84b8e04  gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-1.c
+ a7a6134e3613cad320eef79cddfa7324  gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-2.c
+ dc1f9d1f305a0bcb31d9c3ca21e0d7a6  gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-3.c
+ 09a13f462323e032a306173e42b58069  gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c
+ c8c07917b8fa88fed0014102030b9ee8  gcc/testsuite/gcc.dg/debug/btf/btf-cvr-quals-1.c
+ 88e96eea8e35f64f4c36f032e69e6703  gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c
+ bd2d30371ec87b3856e9fd61f3bf7d65  gcc/testsuite/gcc.dg/debug/btf/btf-enum-1.c
+ f69c19d70ecf052b9849631cd2c96282  gcc/testsuite/gcc.dg/debug/btf/btf-float-1.c
+ 12c1b6f565228e7e78809220514ef2f9  gcc/testsuite/gcc.dg/debug/btf/btf-forward-1.c
+ 822a099318844b46230aaf2fe81d43de  gcc/testsuite/gcc.dg/debug/btf/btf-function-1.c
+ de6cbe052990dd17f62f4ac614384063  gcc/testsuite/gcc.dg/debug/btf/btf-function-2.c
+ d38879c9e7a9ecd9f8d7ad8294064b75  gcc/testsuite/gcc.dg/debug/btf/btf-function-3.c
+ 93f28d03d23acf3ab75cc77e8ac2e00b  gcc/testsuite/gcc.dg/debug/btf/btf-int-1.c
+ ec3ef284064bd1373b5bd16fce95e105  gcc/testsuite/gcc.dg/debug/btf/btf-pointers-1.c
+ d88796e35daf5eabf6a8ee3cc6c5e9b7  gcc/testsuite/gcc.dg/debug/btf/btf-pointers-2.c
+ 149e1772a34f92dbf550628ea67aa0a1  gcc/testsuite/gcc.dg/debug/btf/btf-struct-1.c
+ 8b5304b18e5e95a0e5881320c177bd7c  gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c
+ 0c417a6cf3aa40a3a251e0e4594bafd2  gcc/testsuite/gcc.dg/debug/btf/btf-typedef-1.c
+ 6b4d96c4105d6bdeeb91160048d7a75e  gcc/testsuite/gcc.dg/debug/btf/btf-union-1.c
+ 872eb4b63bebb4c8ab8c55d709584370  gcc/testsuite/gcc.dg/debug/btf/btf-variables-1.c
+ 82303111c5592cc51dccc59eb0a20737  gcc/testsuite/gcc.dg/debug/btf/btf-variables-2.c
+ 3fe28c927bc21d0392a705f27a1bedd7  gcc/testsuite/gcc.dg/debug/btf/btf-variables-3.c
+ 697c63811eaea2d251f9b65955872603  gcc/testsuite/gcc.dg/debug/btf/btf.exp
  43b79cd3ca67853ae15362a1eb8e3d6a  gcc/testsuite/gcc.dg/debug/const-1.c
  b436f74276be886856059b6d921c0daf  gcc/testsuite/gcc.dg/debug/const-2.c
  17393d7ba43c4bb0cb2f02b8906f09ea  gcc/testsuite/gcc.dg/debug/const-3.c
  6a0b65a849bdc8acdd72456e4313ca33  gcc/testsuite/gcc.dg/debug/crash1.c
+ 91f89462bef54de7cb8e26b2bf29ef43  gcc/testsuite/gcc.dg/debug/ctf/ctf-1.c
+ 4b57ba7c9a4afde6867fb14ac626fa41  gcc/testsuite/gcc.dg/debug/ctf/ctf-2.c
+ d590e0475a9b94477644be3c299e63d7  gcc/testsuite/gcc.dg/debug/ctf/ctf-anonymous-struct-1.c
+ b3dfd97b3b7835041ecf0cff0079343b  gcc/testsuite/gcc.dg/debug/ctf/ctf-anonymous-union-1.c
+ ddb651d4136ac7342c8724c7cbda42aa  gcc/testsuite/gcc.dg/debug/ctf/ctf-array-1.c
+ cff7b2e146b8563dac7e20caf96cd2fd  gcc/testsuite/gcc.dg/debug/ctf/ctf-array-2.c
+ 446fb6602d17553e9759034e73e07b58  gcc/testsuite/gcc.dg/debug/ctf/ctf-array-3.c
+ 16fdae08216e80bec0325ad0306d9281  gcc/testsuite/gcc.dg/debug/ctf/ctf-array-4.c
+ c16f16e7207594dd861f602118df4a28  gcc/testsuite/gcc.dg/debug/ctf/ctf-array-5.c
+ e38408e94a60581c143bd47bc2f2585c  gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-mode-1.c
+ f3bfbefc74808effb826ba673d68da20  gcc/testsuite/gcc.dg/debug/ctf/ctf-attr-used-1.c
+ 937ee8a589dd26e52a1517b439e68005  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-1.c
+ d41b96a64d3ca7af1a197f5150af5084  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-2.c
+ bdd351306f463f39d05101125d2bd16a  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c
+ db0188d69141484062b52438e40ce060  gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-4.c
+ 9a90b2e137856346b5d4e61b3a8c50a7  gcc/testsuite/gcc.dg/debug/ctf/ctf-complex-1.c
+ 80a2388c58f3df114d49a2361b291fe4  gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-1.c
+ 00ac7ee4d3c23da2e40c4deb67169366  gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-2.c
+ 8b98063e87fd84f837a1ccebd3e08073  gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-3.c
+ 26a6eeaf54aa265d2048704d72bad95a  gcc/testsuite/gcc.dg/debug/ctf/ctf-cvr-quals-4.c
+ a423dc356cd7db3b21398d719072c60e  gcc/testsuite/gcc.dg/debug/ctf/ctf-debug-1.c
+ e331f12f5b3afb5162356a3d888c5031  gcc/testsuite/gcc.dg/debug/ctf/ctf-debug-2.c
+ 255a053f7b8d6d458d457c001a38369a  gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-1.c
+ 0c9e631069c15793c19286bdb7069767  gcc/testsuite/gcc.dg/debug/ctf/ctf-enum-2.c
+ ed16e5fb17a0ebd71a22006de14b1ff6  gcc/testsuite/gcc.dg/debug/ctf/ctf-file-scope-1.c
+ 4be0a57b9c2cfebf80c8efd2590d76ba  gcc/testsuite/gcc.dg/debug/ctf/ctf-float-1.c
+ a38016ede493493a9c78272c11708caf  gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-1.c
+ 9babdbf56a6936df0e5e9070390dbb0e  gcc/testsuite/gcc.dg/debug/ctf/ctf-forward-2.c
+ af965f44ea6f03451a58be523ab13103  gcc/testsuite/gcc.dg/debug/ctf/ctf-func-index-1.c
+ b3dfcec3be7ab9e5e766437f25a88f30  gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-1.c
+ e0203612db8dcf608ddb289c29889ff4  gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-2.c
+ c6932d672282861d6a16f5a4d9dd5692  gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-3.c
+ f6438ca72d2042332d59b27282f33fda  gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-4.c
+ 60fb0536450f80c958c2503ed90731c9  gcc/testsuite/gcc.dg/debug/ctf/ctf-functions-1.c
+ c4cd7d936bb77f4a6712af613367f783  gcc/testsuite/gcc.dg/debug/ctf/ctf-int-1.c
+ c6381830652bc5708f42fde82ceb0138  gcc/testsuite/gcc.dg/debug/ctf/ctf-objt-index-1.c
+ 7a7fd28bcbd840e71e3a634d212cb121  gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-1.c
+ ee4d32b284e9a030ed8606108e7db766  gcc/testsuite/gcc.dg/debug/ctf/ctf-pointers-2.c
+ 10d28aba4e2e20ef9c3f8d05e45022a4  gcc/testsuite/gcc.dg/debug/ctf/ctf-preamble-1.c
+ 24a2d3d703862a3a6001d9bda3b1dbe9  gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-1.c
+ b139f4c1ce5aa61fd102ff6744a7d946  gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-2.c
+ e11e903bf0c5b074fbb71146db15d440  gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-3.c
+ cd4e29f234a1a98e692f5c6967dea83f  gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-4.c
+ bc7cde4fa3112ed76b62dd49676af591  gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-5.c
+ efebf04cf16ec8fb6723eb4cbe6e92d0  gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-6.c
+ dbdc60fc0f8ccd43b4da19d00c56e508  gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-7.c
+ ea3e1069a2acd8e148e4906ca26ae173  gcc/testsuite/gcc.dg/debug/ctf/ctf-skip-types-8.c
+ f1031a66a00f13889d8aaaad5adf2a1c  gcc/testsuite/gcc.dg/debug/ctf/ctf-str-table-1.c
+ 5a77430dafb4f618b3638e9f29b185e5  gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-1.c
+ 289e6dd5467e5455278c86ecde42c157  gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-2.c
+ 1d70a36cc1bd3d18bf99066c015cbfa6  gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-1.c
+ 3de01187922019e790aa59a9efda9941  gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-array-2.c
+ 9bbcc422ad724f07ae3292136bbac03e  gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-pointer-1.c
+ 27e5ed4fd7b1e833869ba371cd93d8dd  gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-pointer-2.c
+ f8dc5b4e8a7550234494ce573d0d2dcb  gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-1.c
+ d2f681e4f5704b341738729dea82c1a7  gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-2.c
+ 44dd31be122d4e6579b85a1d572d6797  gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-3.c
+ 7a5679ca249793d97b78dae2df5c4f8f  gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-1.c
+ 71f0914b3c6208437609b99192645bd9  gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-2.c
+ 3a267f03b887faa7ed54e49e8869eb00  gcc/testsuite/gcc.dg/debug/ctf/ctf-typedef-struct-3.c
+ ec2103f2d7a749a23acc0690e8c18f4e  gcc/testsuite/gcc.dg/debug/ctf/ctf-union-1.c
+ 8cd93c9afbb749f3453147c93d84a731  gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-1.c
+ b8f9de531119631c3459a93c1fdfd186  gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-2.c
+ e542a430adb55cd8f70ef3fd306d241a  gcc/testsuite/gcc.dg/debug/ctf/ctf-variables-3.c
+ 0409a522b29ec36a38ef4805600df99e  gcc/testsuite/gcc.dg/debug/ctf/ctf.exp
  c5ce68d6bc614fe16f32816d6e22ce66  gcc/testsuite/gcc.dg/debug/debug-1.c
  c17982bc9ca8dd7ebe9f41677e7982f9  gcc/testsuite/gcc.dg/debug/debug-2.c
  ea7172af490d3fb85bddeb7037fddc2e  gcc/testsuite/gcc.dg/debug/debug-3.c
*************** ea7172af490d3fb85bddeb7037fddc2e  gcc/te
*** 36469,36475 ****
  16edfbc8489f8d2648184f4d56272f9a  gcc/testsuite/gcc.dg/debug/debug-5.c
  3a93989c56d211b178b4ce1cb7b8db55  gcc/testsuite/gcc.dg/debug/debug-6.c
  92ca009107fd3047af0ed6bffbcf92f2  gcc/testsuite/gcc.dg/debug/debug-7.c
! 01ff48e40d946c82d3cd4a5e7afb7ff6  gcc/testsuite/gcc.dg/debug/debug.exp
  900fe69daa3b56214378610d534c3e53  gcc/testsuite/gcc.dg/debug/dwarf2-1.c
  9cf87b67a0fe641563a13455b49c7154  gcc/testsuite/gcc.dg/debug/dwarf2-2.c
  0b09f7a5e1f45f894f8df2a63437e7c8  gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c
--- 38032,38038 ----
  16edfbc8489f8d2648184f4d56272f9a  gcc/testsuite/gcc.dg/debug/debug-5.c
  3a93989c56d211b178b4ce1cb7b8db55  gcc/testsuite/gcc.dg/debug/debug-6.c
  92ca009107fd3047af0ed6bffbcf92f2  gcc/testsuite/gcc.dg/debug/debug-7.c
! bb1f061795d3d28c4517c9c69e310e2b  gcc/testsuite/gcc.dg/debug/debug.exp
  900fe69daa3b56214378610d534c3e53  gcc/testsuite/gcc.dg/debug/dwarf2-1.c
  9cf87b67a0fe641563a13455b49c7154  gcc/testsuite/gcc.dg/debug/dwarf2-2.c
  0b09f7a5e1f45f894f8df2a63437e7c8  gcc/testsuite/gcc.dg/debug/dwarf2/align-1.c
*************** fbe375bf9288bf092b7cef1996c14a1f  gcc/te
*** 36508,36514 ****
  41463d28a9bbf97a554feb4c959fed01  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-3.h
  9e89388c0e1fb3e82696e9c739160c92  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c
  eec651e182274afc1200132346cdf1ed  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c
! a514a5c9a44b1ec90624212b2ee5ceae  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp
  362aa298514051f8a5b0ce8f2e1ee91a  gcc/testsuite/gcc.dg/debug/dwarf2/enum-loc1.c
  59c839cb709f2082c72d622c16f665f4  gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c
  f7dc86f08b2d23f2ec144956f62a155d  gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.h
--- 38071,38077 ----
  41463d28a9bbf97a554feb4c959fed01  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-3.h
  9e89388c0e1fb3e82696e9c739160c92  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c
  eec651e182274afc1200132346cdf1ed  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c
! 1636f05124a9ad3cd9fd65e2041e974a  gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp
  362aa298514051f8a5b0ce8f2e1ee91a  gcc/testsuite/gcc.dg/debug/dwarf2/enum-loc1.c
  59c839cb709f2082c72d622c16f665f4  gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.c
  f7dc86f08b2d23f2ec144956f62a155d  gcc/testsuite/gcc.dg/debug/dwarf2/fesd-any.h
*************** f9ab56344241c22521f8d9245e677c22  gcc/te
*** 36526,36532 ****
  47291ca2a7f639676f2662f2d578253f  gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c
  8580bd27cd825c8d49e674c9f31c683c  gcc/testsuite/gcc.dg/debug/dwarf2/inline3.c
  586e0e8fb83eb0dc0f5b5a3a5b6236bf  gcc/testsuite/gcc.dg/debug/dwarf2/inline4.c
! b024aabf64c74205609d3f981c1e165b  gcc/testsuite/gcc.dg/debug/dwarf2/inline5.c
  40c9e189b7b61e8f4d69ce3f98f98206  gcc/testsuite/gcc.dg/debug/dwarf2/inline6.c
  e7c46c2fc25b3773b6adcbd27af4b924  gcc/testsuite/gcc.dg/debug/dwarf2/ipa-cp1.c
  fa5aff1721ed3bcbbc6a8566df69c415  gcc/testsuite/gcc.dg/debug/dwarf2/lang-c11-d4-strict.c
--- 38089,38095 ----
  47291ca2a7f639676f2662f2d578253f  gcc/testsuite/gcc.dg/debug/dwarf2/inline2.c
  8580bd27cd825c8d49e674c9f31c683c  gcc/testsuite/gcc.dg/debug/dwarf2/inline3.c
  586e0e8fb83eb0dc0f5b5a3a5b6236bf  gcc/testsuite/gcc.dg/debug/dwarf2/inline4.c
! cc07cedbdc7f7b69237511da330b487b  gcc/testsuite/gcc.dg/debug/dwarf2/inline5.c
  40c9e189b7b61e8f4d69ce3f98f98206  gcc/testsuite/gcc.dg/debug/dwarf2/inline6.c
  e7c46c2fc25b3773b6adcbd27af4b924  gcc/testsuite/gcc.dg/debug/dwarf2/ipa-cp1.c
  fa5aff1721ed3bcbbc6a8566df69c415  gcc/testsuite/gcc.dg/debug/dwarf2/lang-c11-d4-strict.c
*************** e2f52a89972160427f649396e34b1d0c  gcc/te
*** 36537,36542 ****
--- 38100,38106 ----
  edee97b42c75ecf594a2c63a31f4c416  gcc/testsuite/gcc.dg/debug/dwarf2/noreturn-function-attribute.c
  cbcc356a35e8a8665137c7ae64ec5914  gcc/testsuite/gcc.dg/debug/dwarf2/noreturn-function-keyword.c
  937e8a07b611d24efb44f969833a3cb8  gcc/testsuite/gcc.dg/debug/dwarf2/omp-fesdr.c
+ 65c779aa27fde2981a8fd2eb1b54c195  gcc/testsuite/gcc.dg/debug/dwarf2/pr100515.c
  54b366032eed667161eee7783123c310  gcc/testsuite/gcc.dg/debug/dwarf2/pr103874.c
  250736f38c859fc89fb993ad3155eb20  gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c
  8f522ee214d1db3d04f240eb20eb4474  gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c
*************** a114c478980c8fbc66c3ec796df0b6aa  gcc/te
*** 36621,36627 ****
  cbdd3b08ad2ec42ef73b00a2769043d9  gcc/testsuite/gcc.dg/debug/pr49294.c
  915cc889beb5f606439c7c987c19b105  gcc/testsuite/gcc.dg/debug/pr49522.c
  f83af2708ba44addea950f47d1a44c95  gcc/testsuite/gcc.dg/debug/pr55730.c
! 8025f0406ff53d4c773d94be979209b5  gcc/testsuite/gcc.dg/debug/pr57351.c
  7dc01e28775b3a200d65354a6eb7aad1  gcc/testsuite/gcc.dg/debug/pr65771.c
  91097ab2e9d846f097881afd70e714fe  gcc/testsuite/gcc.dg/debug/pr66068.c
  f04843ea87c9c55accf161e9ee241f15  gcc/testsuite/gcc.dg/debug/pr66432.c
--- 38185,38191 ----
  cbdd3b08ad2ec42ef73b00a2769043d9  gcc/testsuite/gcc.dg/debug/pr49294.c
  915cc889beb5f606439c7c987c19b105  gcc/testsuite/gcc.dg/debug/pr49522.c
  f83af2708ba44addea950f47d1a44c95  gcc/testsuite/gcc.dg/debug/pr55730.c
! fee24f4344400c65c851c1ac2b6c5e4e  gcc/testsuite/gcc.dg/debug/pr57351.c
  7dc01e28775b3a200d65354a6eb7aad1  gcc/testsuite/gcc.dg/debug/pr65771.c
  91097ab2e9d846f097881afd70e714fe  gcc/testsuite/gcc.dg/debug/pr66068.c
  f04843ea87c9c55accf161e9ee241f15  gcc/testsuite/gcc.dg/debug/pr66432.c
*************** dfe075c7272c802e4c6f44b1a66f1302  gcc/te
*** 36734,36740 ****
  4004acaaacb54ecad2e0c6ee8e8224d5  gcc/testsuite/gcc.dg/dfp/dfp-dbg.h
  b0c002cff8051f24b9c9db05f3062f21  gcc/testsuite/gcc.dg/dfp/dfp-except.h
  aadafbfd9e0540666c99d31e72e91f96  gcc/testsuite/gcc.dg/dfp/dfp-round.h
! e633f84e058c54fcd4f3b8d825372bc7  gcc/testsuite/gcc.dg/dfp/dfp.exp
  0daf957dbef663389abca329acc1d74c  gcc/testsuite/gcc.dg/dfp/fe-binop.c
  dc5f56a82263868da11e7d3a3e80a8c8  gcc/testsuite/gcc.dg/dfp/fe-check.h
  e014b3254e79531d97833550fdb2486d  gcc/testsuite/gcc.dg/dfp/fe-convert-1.c
--- 38298,38304 ----
  4004acaaacb54ecad2e0c6ee8e8224d5  gcc/testsuite/gcc.dg/dfp/dfp-dbg.h
  b0c002cff8051f24b9c9db05f3062f21  gcc/testsuite/gcc.dg/dfp/dfp-except.h
  aadafbfd9e0540666c99d31e72e91f96  gcc/testsuite/gcc.dg/dfp/dfp-round.h
! cc2f8360da48efc61a3f570b0a8a3895  gcc/testsuite/gcc.dg/dfp/dfp.exp
  0daf957dbef663389abca329acc1d74c  gcc/testsuite/gcc.dg/dfp/fe-binop.c
  dc5f56a82263868da11e7d3a3e80a8c8  gcc/testsuite/gcc.dg/dfp/fe-check.h
  e014b3254e79531d97833550fdb2486d  gcc/testsuite/gcc.dg/dfp/fe-convert-1.c
*************** ef8eb17f7da56bfde3d6840acb400831  gcc/te
*** 36779,36785 ****
  53e450baff1edfc9b3bf82a5a1b2a674  gcc/testsuite/gcc.dg/dfp/warn-abs-2.c
  9190a1b37c2c0dd750746fbca83c728e  gcc/testsuite/gcc.dg/dfp/wtr-conversion-1.c
  1d1366a913ab3a21a6dbd1b236fc57a4  gcc/testsuite/gcc.dg/dg-test-1.c
! 211656ab2e2c8e53d24e6514901e9d26  gcc/testsuite/gcc.dg/dg.exp
  f26c27ac11691c96c083fca389b2dbb6  gcc/testsuite/gcc.dg/di-longlong64-sync-1.c
  a7ce88f792a87e99ee9aa3c1a4bf5983  gcc/testsuite/gcc.dg/di-sync-multithread.c
  034e91f8d262e00b27763ec15c59df1d  gcc/testsuite/gcc.dg/diag-aka-1.c
--- 38343,38349 ----
  53e450baff1edfc9b3bf82a5a1b2a674  gcc/testsuite/gcc.dg/dfp/warn-abs-2.c
  9190a1b37c2c0dd750746fbca83c728e  gcc/testsuite/gcc.dg/dfp/wtr-conversion-1.c
  1d1366a913ab3a21a6dbd1b236fc57a4  gcc/testsuite/gcc.dg/dg-test-1.c
! 202f58718cd65c81333836bce0fc1126  gcc/testsuite/gcc.dg/dg.exp
  f26c27ac11691c96c083fca389b2dbb6  gcc/testsuite/gcc.dg/di-longlong64-sync-1.c
  a7ce88f792a87e99ee9aa3c1a4bf5983  gcc/testsuite/gcc.dg/di-sync-multithread.c
  034e91f8d262e00b27763ec15c59df1d  gcc/testsuite/gcc.dg/diag-aka-1.c
*************** c5d748774fb2199480c81f1cce289faf  gcc/te
*** 36790,36801 ****
  04707756a63a267ab3d35958405b9e23  gcc/testsuite/gcc.dg/diag-aka-5a.c
  6352145b16e092ab70b3d7b63fb176ac  gcc/testsuite/gcc.dg/diag-aka-5b.c
  f69d4a18ba089cfb7153cf4e77aa059f  gcc/testsuite/gcc.dg/diag-sanity.c
  c62d15575797919e845abb5fb04433d2  gcc/testsuite/gcc.dg/diagnostic-range-bad-called-object.c
  bad47d238e839b516e66fcd453fbcb94  gcc/testsuite/gcc.dg/diagnostic-range-bad-return.c
  dcc653db3a251c337257e1b52bb808dc  gcc/testsuite/gcc.dg/diagnostic-range-static-assert.c
  1850e51342e1e31dc6cc8847d0bd4192  gcc/testsuite/gcc.dg/diagnostic-ranges-1.c
  532b50c735d0ca4cdd7c547d51fef8e1  gcc/testsuite/gcc.dg/diagnostic-token-ranges.c
! d72954c20fb8bc4b34f44be8d89dcdf8  gcc/testsuite/gcc.dg/diagnostic-tree-expr-ranges-2.c
  a1b6f6dc38f81dc434b0af5eb729521a  gcc/testsuite/gcc.dg/diagnostic-types-1.c
  acf65d30040d30d5a4ea7bb09731753b  gcc/testsuite/gcc.dg/div-cmp-1.c
  8d8eb669914bf8307d3e5d52da5018c2  gcc/testsuite/gcc.dg/div-cmp-2.c
--- 38354,38367 ----
  04707756a63a267ab3d35958405b9e23  gcc/testsuite/gcc.dg/diag-aka-5a.c
  6352145b16e092ab70b3d7b63fb176ac  gcc/testsuite/gcc.dg/diag-aka-5b.c
  f69d4a18ba089cfb7153cf4e77aa059f  gcc/testsuite/gcc.dg/diag-sanity.c
+ 28833629ad112b005f0e6a4297ccfb9a  gcc/testsuite/gcc.dg/diagnostic-input-charset-1.c
+ 3bc26289f49ad5037172748300ad2581  gcc/testsuite/gcc.dg/diagnostic-input-utf8-bom.c
  c62d15575797919e845abb5fb04433d2  gcc/testsuite/gcc.dg/diagnostic-range-bad-called-object.c
  bad47d238e839b516e66fcd453fbcb94  gcc/testsuite/gcc.dg/diagnostic-range-bad-return.c
  dcc653db3a251c337257e1b52bb808dc  gcc/testsuite/gcc.dg/diagnostic-range-static-assert.c
  1850e51342e1e31dc6cc8847d0bd4192  gcc/testsuite/gcc.dg/diagnostic-ranges-1.c
  532b50c735d0ca4cdd7c547d51fef8e1  gcc/testsuite/gcc.dg/diagnostic-token-ranges.c
! 8305a00f04715c7339ccbe2e819cdcc3  gcc/testsuite/gcc.dg/diagnostic-tree-expr-ranges-2.c
  a1b6f6dc38f81dc434b0af5eb729521a  gcc/testsuite/gcc.dg/diagnostic-types-1.c
  acf65d30040d30d5a4ea7bb09731753b  gcc/testsuite/gcc.dg/div-cmp-1.c
  8d8eb669914bf8307d3e5d52da5018c2  gcc/testsuite/gcc.dg/div-cmp-2.c
*************** bc02c112e097220e06aa0cfc803d1b07  gcc/te
*** 36854,36859 ****
--- 38420,38427 ----
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gcc.dg/empty.h
  c3d0e5f87b23f96c728ab8dd3707bb9b  gcc/testsuite/gcc.dg/empty1.c
  7908cbe605cd47ed92b1586d03a7c349  gcc/testsuite/gcc.dg/empty2.c
+ ebbead2c256958474254113d9a718d6f  gcc/testsuite/gcc.dg/encoding-issues-bytes.c
+ 51130a02a0d46dd506ac46d36d6a293f  gcc/testsuite/gcc.dg/encoding-issues-unicode.c
  b4f00b2d0fc854a9c192873f0ebeeaa5  gcc/testsuite/gcc.dg/enum-compat-1.c
  e1fe0207f459d8843a756d7853ebc94b  gcc/testsuite/gcc.dg/enum-const-1.c
  c5d67585a3b60da28143ffc545cd326d  gcc/testsuite/gcc.dg/enum-const-2.c
*************** f3a876eb6a0816f6085df8f93e7edd6d  gcc/te
*** 36890,36896 ****
  0bea133ab644808fbf42aef7c37b38ac  gcc/testsuite/gcc.dg/fixed-point/bit-complement.c
  db2e33a998a710ce021678da0caa8f09  gcc/testsuite/gcc.dg/fixed-point/call-by-value.c
  283d6b07483b7a12d06e1477ed57ef1b  gcc/testsuite/gcc.dg/fixed-point/cast-bad.c
! 6e4d9ce01b533d0f3e89dec7f46c53d3  gcc/testsuite/gcc.dg/fixed-point/composite-type.c
  25c70165209aee18b65c27885fb1fd51  gcc/testsuite/gcc.dg/fixed-point/const-1.c
  e2cfc02a19e958287f50ec8124bc07a8  gcc/testsuite/gcc.dg/fixed-point/constant.c
  9bcbe717064d56652fb2487475256fe7  gcc/testsuite/gcc.dg/fixed-point/constants-pedantic.c
--- 38458,38464 ----
  0bea133ab644808fbf42aef7c37b38ac  gcc/testsuite/gcc.dg/fixed-point/bit-complement.c
  db2e33a998a710ce021678da0caa8f09  gcc/testsuite/gcc.dg/fixed-point/call-by-value.c
  283d6b07483b7a12d06e1477ed57ef1b  gcc/testsuite/gcc.dg/fixed-point/cast-bad.c
! 93aa1e2f43f1bc01285f51632812c781  gcc/testsuite/gcc.dg/fixed-point/composite-type.c
  25c70165209aee18b65c27885fb1fd51  gcc/testsuite/gcc.dg/fixed-point/const-1.c
  e2cfc02a19e958287f50ec8124bc07a8  gcc/testsuite/gcc.dg/fixed-point/constant.c
  9bcbe717064d56652fb2487475256fe7  gcc/testsuite/gcc.dg/fixed-point/constants-pedantic.c
*************** af315092d026865340052aee7b9849a3  gcc/te
*** 36906,36912 ****
  11f3b667f90a009058a0bbb781d75c33  gcc/testsuite/gcc.dg/fixed-point/convert-sat.c
  17daa5326aad34d453af61740fa3b55b  gcc/testsuite/gcc.dg/fixed-point/convert.h
  4d465f534ba6b0040d0b907de70eb06d  gcc/testsuite/gcc.dg/fixed-point/define.c
! 591d77b2ddf1b5792d1584435b05abf0  gcc/testsuite/gcc.dg/fixed-point/fixed-point.exp
  7172d69a38fc3346148178e2346509cf  gcc/testsuite/gcc.dg/fixed-point/func-array.c
  c71cd62369fd73371bd64d9e9c2653fe  gcc/testsuite/gcc.dg/fixed-point/func-mixed.c
  2b619b6a57d0ac97a39f559544f66909  gcc/testsuite/gcc.dg/fixed-point/func-scalar.c
--- 38474,38480 ----
  11f3b667f90a009058a0bbb781d75c33  gcc/testsuite/gcc.dg/fixed-point/convert-sat.c
  17daa5326aad34d453af61740fa3b55b  gcc/testsuite/gcc.dg/fixed-point/convert.h
  4d465f534ba6b0040d0b907de70eb06d  gcc/testsuite/gcc.dg/fixed-point/define.c
! 7617a5fdcc0fcaa48a415301a6f16576  gcc/testsuite/gcc.dg/fixed-point/fixed-point.exp
  7172d69a38fc3346148178e2346509cf  gcc/testsuite/gcc.dg/fixed-point/func-array.c
  c71cd62369fd73371bd64d9e9c2653fe  gcc/testsuite/gcc.dg/fixed-point/func-mixed.c
  2b619b6a57d0ac97a39f559544f66909  gcc/testsuite/gcc.dg/fixed-point/func-scalar.c
*************** c5d91152e3c1bb6ccb21494e2c255a62  gcc/te
*** 36980,36985 ****
--- 38548,38554 ----
  270433eea9f840f1e6c7ff666a8e4ee4  gcc/testsuite/gcc.dg/fma-5.c
  adfe35cd53e941a473993e1ea7e90f79  gcc/testsuite/gcc.dg/fma-6.c
  9076469cb937fddd9ccca8b5eec11820  gcc/testsuite/gcc.dg/fma-7.c
+ 19e0dccb010f9e1fd7396bacdc9f36ec  gcc/testsuite/gcc.dg/fmax-fmin-1.c
  929a1f92da326a50b56b5ff9d2cfad9e  gcc/testsuite/gcc.dg/fnegate-1.c
  51edd4e8009c4755c73901f93984a0b3  gcc/testsuite/gcc.dg/fold-abs-1.c
  2d5bb0a0c7a8f3f6b92bdd7b61dd33e4  gcc/testsuite/gcc.dg/fold-abs-2.c
*************** a37478860517cdafde8ff3d3f2a58d1c  gcc/te
*** 37015,37020 ****
--- 38584,38595 ----
  64339b2ae6b4e40d896218f68e77d78f  gcc/testsuite/gcc.dg/fold-cond-3.c
  bc4dc77fe0d5a497c4f5a8fedce878ef  gcc/testsuite/gcc.dg/fold-condcmpconv-1.c
  2c2601a7fc4c7b7ab5ef5af7d6cca601  gcc/testsuite/gcc.dg/fold-condcmpconv-2.c
+ f2542628fe46ccc65fd442a53e80df5f  gcc/testsuite/gcc.dg/fold-condneg-1.c
+ 116ea0254352f300c63ccce760bd3eda  gcc/testsuite/gcc.dg/fold-condneg-2.c
+ 715c50b0cfa6c9e3ba0963335de6e6d0  gcc/testsuite/gcc.dg/fold-condnot-1.c
+ 66ff2dcff0e3fb3f8a572d1cb5e1df62  gcc/testsuite/gcc.dg/fold-convlshift-1.c
+ 7b2a2b6daa6df9af392a37843c445308  gcc/testsuite/gcc.dg/fold-convlshift-2.c
+ 05e73cd385c212fa9c76241382d8993b  gcc/testsuite/gcc.dg/fold-convlshift-3.c
  ee5011d0e6b7fccb87df0fdf4ed4cdaf  gcc/testsuite/gcc.dg/fold-convmaxconv-1.c
  bd0bf08bda1424362307a0339137a72d  gcc/testsuite/gcc.dg/fold-convminconv-1.c
  eaf814577ce35df4d8865fd97a483ccb  gcc/testsuite/gcc.dg/fold-convnotconv-1.c
*************** ecf3e0a507fd9596feac9b2b4403e0c2  gcc/te
*** 37031,37037 ****
--- 38606,38614 ----
  f1489650592f7675e1fc3916f9bec3c3  gcc/testsuite/gcc.dg/fold-eqandshift-1.c
  e1c7fab36a99cc4409e347911757fcfa  gcc/testsuite/gcc.dg/fold-eqandshift-2.c
  50dabcd8afcf8df83d85c612443b1e4d  gcc/testsuite/gcc.dg/fold-eqandshift-3.c
+ bab473e138314f0d96260884a246a76a  gcc/testsuite/gcc.dg/fold-eqbswap-1.c
  84557f0100311fa1251b7bcaad0c8570  gcc/testsuite/gcc.dg/fold-eqcmplx-1.c
+ e759253d06936eb8e73cfea6d866573a  gcc/testsuite/gcc.dg/fold-eqrotate-1.c
  ad120bc52a3ab2107a91dde9826a43fd  gcc/testsuite/gcc.dg/fold-eqxor-1.c
  270bace53ac9faafb7910fa30aba2f17  gcc/testsuite/gcc.dg/fold-eqxor-2.c
  83ebb7f1b122e099c9d0a6b74bb0907a  gcc/testsuite/gcc.dg/fold-eqxor-3.c
*************** fb1942ab921b43867b7fbb82f748d327  gcc/te
*** 37040,37045 ****
--- 38617,38624 ----
  41a30bfd154e6a754a1119edf6cf8589  gcc/testsuite/gcc.dg/fold-ior-1.c
  fd3863d5ae19c0c093a97ed5576367d6  gcc/testsuite/gcc.dg/fold-ior-2.c
  b5d8a05161524c954f45b0f078d90f8d  gcc/testsuite/gcc.dg/fold-ior-3.c
+ 500ddc0a86b24ed9cb3b36938d928c40  gcc/testsuite/gcc.dg/fold-ior-4.c
+ 5cc27f1d52981bd4cd92137bb5a45cf9  gcc/testsuite/gcc.dg/fold-ior-5.c
  7f6284b1b20285c53e8e8c122daba558  gcc/testsuite/gcc.dg/fold-isfinite-1.c
  df9cae5951cdf4855b200bba7d44d331  gcc/testsuite/gcc.dg/fold-isfinite-2.c
  ddbdbd94a8cd2d53cbec12d24f971dea  gcc/testsuite/gcc.dg/fold-isinf-1.c
*************** a5e2dbd5c41bfadcee229c5e5cfecb88  gcc/te
*** 37058,37063 ****
--- 38637,38643 ----
  756a61ce538f9f3b4770dd97dbc536d1  gcc/testsuite/gcc.dg/fold-modpow2.c
  e2cb83c8a04f64016a0601ceb96b26b6  gcc/testsuite/gcc.dg/fold-mulconj-1.c
  8b863df3798cd57dd19965e0949d3a4f  gcc/testsuite/gcc.dg/fold-narrowbopcst-1.c
+ 672d04851269fa9e9524efecb62e512b  gcc/testsuite/gcc.dg/fold-negate-1.c
  b977e3760f87015c054acf2bd95e17c7  gcc/testsuite/gcc.dg/fold-nonneg-1.c
  ef996b86a085ad039dc5e5799132ffe1  gcc/testsuite/gcc.dg/fold-notrotate-1.c
  7932ff6543a96382d8e4ec2cdc3460cd  gcc/testsuite/gcc.dg/fold-notshift-1.c
*************** aad1306a4d98044fd7a6a788f7f87ed7  gcc/te
*** 37083,37089 ****
--- 38663,38673 ----
  2521382255d026b527045de9a1f523ec  gcc/testsuite/gcc.dg/fold-reassoc-1.c
  6be22998a5dadde1050406829d46b305  gcc/testsuite/gcc.dg/fold-reassoc-2.c
  76f7470b6189ce228d02129a9dfc4c00  gcc/testsuite/gcc.dg/fold-reassoc-3.c
+ 0aa598ad8e6c4c320f618d9c96e61a6d  gcc/testsuite/gcc.dg/fold-reduc-1.c
  536db83e6ff0dfa4712a9eeb27f67863  gcc/testsuite/gcc.dg/fold-rotate-1.c
+ 443a53fe759251a4e155769053066cfb  gcc/testsuite/gcc.dg/fold-stringops-1.c
+ 8bbad26c96bd55f1858e4bdfca0ae1c7  gcc/testsuite/gcc.dg/fold-stringops-2.c
+ ab16f59df61d1fa7462735be7c89e03e  gcc/testsuite/gcc.dg/fold-stringops-3.c
  4f2210865daf0cf05e105331c6f9aa8b  gcc/testsuite/gcc.dg/fold-sub.c
  c90dbb8934ec1b212a0e4ecc9b3ca3d5  gcc/testsuite/gcc.dg/fold-xor-1.c
  7d493f5554d1ace59edbb4ff7c5827d9  gcc/testsuite/gcc.dg/fold-xor-2.c
*************** fd0fed4c372f03e7cb66f4d19c80e7b6  gcc/te
*** 37113,37120 ****
  1f25229fd502854e756c57639b3b879d  gcc/testsuite/gcc.dg/format/bitfld-1.c
  2dfa44096e91c2082e5eb88a3df61ab0  gcc/testsuite/gcc.dg/format/branch-1.c
  a5f952800e5755765d6e77745c013e40  gcc/testsuite/gcc.dg/format/builtin-1.c
  c4a2f22ec8cdf76a1d3e0d474153e132  gcc/testsuite/gcc.dg/format/c2x-strftime-1.c
! 4b1ae078a369185069c34052aa23541e  gcc/testsuite/gcc.dg/format/c90-printf-1.c
  912996266243b1739f46e4e34a2c13ba  gcc/testsuite/gcc.dg/format/c90-printf-2.c
  9b16f23720504062a93c79e4ddfb0484  gcc/testsuite/gcc.dg/format/c90-printf-3.c
  885357b5662597beac44561743bb2d5d  gcc/testsuite/gcc.dg/format/c90-scanf-1.c
--- 38697,38712 ----
  1f25229fd502854e756c57639b3b879d  gcc/testsuite/gcc.dg/format/bitfld-1.c
  2dfa44096e91c2082e5eb88a3df61ab0  gcc/testsuite/gcc.dg/format/branch-1.c
  a5f952800e5755765d6e77745c013e40  gcc/testsuite/gcc.dg/format/builtin-1.c
+ 440f0dfd53878248bb6deed7cc1fe9e7  gcc/testsuite/gcc.dg/format/c11-dfp-printf-1.c
+ f37ed9d19977f59844e9e1bf5f0e85f1  gcc/testsuite/gcc.dg/format/c11-dfp-scanf-1.c
+ 3798d8b2bf1e64e819ea105cb32e04f1  gcc/testsuite/gcc.dg/format/c11-printf-1.c
+ b6d984f40b96a651e3aa86975d84d743  gcc/testsuite/gcc.dg/format/c11-scanf-1.c
+ bb4e836704e1e8c7f70d769f7614db91  gcc/testsuite/gcc.dg/format/c2x-dfp-printf-1.c
+ f7fad5f30473b437b8b959bc20f8a12c  gcc/testsuite/gcc.dg/format/c2x-dfp-scanf-1.c
+ 34e1fa3b115ea4cce705ccd6ad52c3cc  gcc/testsuite/gcc.dg/format/c2x-printf-1.c
+ 929276b2f9336ff510d81744bce2f15f  gcc/testsuite/gcc.dg/format/c2x-scanf-1.c
  c4a2f22ec8cdf76a1d3e0d474153e132  gcc/testsuite/gcc.dg/format/c2x-strftime-1.c
! 10e638dd137cfdbd1b51ace231d0c656  gcc/testsuite/gcc.dg/format/c90-printf-1.c
  912996266243b1739f46e4e34a2c13ba  gcc/testsuite/gcc.dg/format/c90-printf-2.c
  9b16f23720504062a93c79e4ddfb0484  gcc/testsuite/gcc.dg/format/c90-printf-3.c
  885357b5662597beac44561743bb2d5d  gcc/testsuite/gcc.dg/format/c90-scanf-1.c
*************** d48360a30dc24fbd67e388a9848b02d3  gcc/te
*** 37144,37149 ****
--- 38736,38742 ----
  4b091c1e85a61834e81c1e1af1595a86  gcc/testsuite/gcc.dg/format/diagnostic-ranges.c
  859d88caa1eeeb23ca9b76526b3a4f3e  gcc/testsuite/gcc.dg/format/errmk-1.c
  07bb1882393eddf8452ebd19e6a983d2  gcc/testsuite/gcc.dg/format/ext-1.c
+ 6da39a87eed828a959bb47b2afae6d63  gcc/testsuite/gcc.dg/format/ext-10.c
  659ecddafea7332aee20e4459efbfa15  gcc/testsuite/gcc.dg/format/ext-2.c
  9b50769784774bf9778bbba444e593e6  gcc/testsuite/gcc.dg/format/ext-3.c
  5655f9db0b2fb6fea5cd089604c3f009  gcc/testsuite/gcc.dg/format/ext-4.c
*************** d48360a30dc24fbd67e388a9848b02d3  gcc/te
*** 37151,37162 ****
  280e9929affa5c28ecacf01249e7f11b  gcc/testsuite/gcc.dg/format/ext-6.c
  0f2ebefdffa8d565f653d54653327fe8  gcc/testsuite/gcc.dg/format/ext-7.c
  9b01ff037cc666ebab469fea9243a970  gcc/testsuite/gcc.dg/format/ext-8.c
  15bea7790574d1770ac396bfef50a19e  gcc/testsuite/gcc.dg/format/few-1.c
! 373b1559d2405582d4a6d7814c81948e  gcc/testsuite/gcc.dg/format/format.exp
  3c298331a5764a4c3e39e92fb781efd5  gcc/testsuite/gcc.dg/format/format.h
  9511da811944e674f4785ad683fe8226  gcc/testsuite/gcc.dg/format/gcc_diag-1.c
! c466aec6fdb07134648d00570dc00c71  gcc/testsuite/gcc.dg/format/gcc_diag-10.c
! 4cc10a5a275e4babf4325ff0b7d1fa67  gcc/testsuite/gcc.dg/format/gcc_diag-11.c
  d63a56715d277d731b74b926a681d346  gcc/testsuite/gcc.dg/format/gcc_diag-2.c
  2b068fc03b193724f240064980e45403  gcc/testsuite/gcc.dg/format/gcc_diag-3.c
  4f5087c56807755a3ac6073de49801bf  gcc/testsuite/gcc.dg/format/gcc_diag-4.c
--- 38744,38756 ----
  280e9929affa5c28ecacf01249e7f11b  gcc/testsuite/gcc.dg/format/ext-6.c
  0f2ebefdffa8d565f653d54653327fe8  gcc/testsuite/gcc.dg/format/ext-7.c
  9b01ff037cc666ebab469fea9243a970  gcc/testsuite/gcc.dg/format/ext-8.c
+ e120ed80e4ef95c8f395df02759a47a6  gcc/testsuite/gcc.dg/format/ext-9.c
  15bea7790574d1770ac396bfef50a19e  gcc/testsuite/gcc.dg/format/few-1.c
! 44fb23a040b5b3a8dd2bf35865439752  gcc/testsuite/gcc.dg/format/format.exp
  3c298331a5764a4c3e39e92fb781efd5  gcc/testsuite/gcc.dg/format/format.h
  9511da811944e674f4785ad683fe8226  gcc/testsuite/gcc.dg/format/gcc_diag-1.c
! a484d0f83ec2d309b89e88feec0dd1e8  gcc/testsuite/gcc.dg/format/gcc_diag-10.c
! d2010406824bbf752492c4811ec55836  gcc/testsuite/gcc.dg/format/gcc_diag-11.c
  d63a56715d277d731b74b926a681d346  gcc/testsuite/gcc.dg/format/gcc_diag-2.c
  2b068fc03b193724f240064980e45403  gcc/testsuite/gcc.dg/format/gcc_diag-3.c
  4f5087c56807755a3ac6073de49801bf  gcc/testsuite/gcc.dg/format/gcc_diag-4.c
*************** b5fc99d5cd488987e446fd40c88fdcde  gcc/te
*** 37263,37269 ****
  5fad85f6a525ba649eb9b2cc42c89366  gcc/testsuite/gcc.dg/format/proto.c
  8e4de68e496a28c03b2a9a568280143e  gcc/testsuite/gcc.dg/format/sec-1.c
  2008185e009c72895d5c225da2bf56c3  gcc/testsuite/gcc.dg/format/sentinel-1.c
! dec47006c2d58150e9bca3a7ab68e4dc  gcc/testsuite/gcc.dg/format/strfmon-1.c
  0580b4faa6d69e15b3dbd3564bef3b03  gcc/testsuite/gcc.dg/format/strfmon-2.c
  4e657e701841e398dd65ba221d93dd1d  gcc/testsuite/gcc.dg/format/sys_format.c
  d5a18bb51ec7b1312df6638edb87bedf  gcc/testsuite/gcc.dg/format/unnamed-1.c
--- 38857,38863 ----
  5fad85f6a525ba649eb9b2cc42c89366  gcc/testsuite/gcc.dg/format/proto.c
  8e4de68e496a28c03b2a9a568280143e  gcc/testsuite/gcc.dg/format/sec-1.c
  2008185e009c72895d5c225da2bf56c3  gcc/testsuite/gcc.dg/format/sentinel-1.c
! 9cbef1e5751733a4ccc852045f747a93  gcc/testsuite/gcc.dg/format/strfmon-1.c
  0580b4faa6d69e15b3dbd3564bef3b03  gcc/testsuite/gcc.dg/format/strfmon-2.c
  4e657e701841e398dd65ba221d93dd1d  gcc/testsuite/gcc.dg/format/sys_format.c
  d5a18bb51ec7b1312df6638edb87bedf  gcc/testsuite/gcc.dg/format/unnamed-1.c
*************** e73a81b78ce09634b29ea8c39f657b96  gcc/te
*** 37304,37309 ****
--- 38898,38904 ----
  8a53a31cb6a7ccbc98d66b16851d8053  gcc/testsuite/gcc.dg/fwrapv-1.c
  f9529b0f4fa81996122f55df493f75c2  gcc/testsuite/gcc.dg/fwrapv-2.c
  4c9e8d7d2b6fc94e654e298890d9a70c  gcc/testsuite/gcc.dg/gcc-have-sync-compare-and-swap.c
+ bd75d759f542c9a302ac19ae05b7c2d2  gcc/testsuite/gcc.dg/gcov-info-to-gcda.c
  53690c04d2b6818eb846076e47cb5a23  gcc/testsuite/gcc.dg/gimplefe-1.c
  41fdff568f467ca45c859b570a911703  gcc/testsuite/gcc.dg/gimplefe-10.c
  5747e00251d6af0838ac8c8688e696be  gcc/testsuite/gcc.dg/gimplefe-11.c
*************** b0673f5a8ea7f6d8ab94cef37553271a  gcc/te
*** 37334,37352 ****
  595df7f84571b785178e53daa0dd0d84  gcc/testsuite/gcc.dg/gimplefe-34.c
  1d2ea52d6350a7e78a5e97c04c3d245b  gcc/testsuite/gcc.dg/gimplefe-35.c
  f8edb1215bfe058bb498b26b97756168  gcc/testsuite/gcc.dg/gimplefe-36.c
! 020767bec02ac2bfbfdf84d527293086  gcc/testsuite/gcc.dg/gimplefe-37.c
  f67882b336f63b608ae43b6730adaaaf  gcc/testsuite/gcc.dg/gimplefe-38.c
  2f4f2de04a6580523825226c6f012cdb  gcc/testsuite/gcc.dg/gimplefe-39.c
  e6814c98756761f222d943c13ee581ad  gcc/testsuite/gcc.dg/gimplefe-4.c
  9ddf86d2eb77d21c2e05769b1538d391  gcc/testsuite/gcc.dg/gimplefe-42.c
  34f653039b6a19157b5e6e939514150b  gcc/testsuite/gcc.dg/gimplefe-43.c
  e77515df730caf92aaccc463aedcd8c1  gcc/testsuite/gcc.dg/gimplefe-44.c
  b900f5308b7aaf209ad303e7426ad1bc  gcc/testsuite/gcc.dg/gimplefe-5.c
  003508c84556e4dd5119101f7dec73f6  gcc/testsuite/gcc.dg/gimplefe-6.c
  8537131248e8cadb5cf09db5f3a17687  gcc/testsuite/gcc.dg/gimplefe-7.c
  db9f8ce39b07fae0c4fd30c72f382e9f  gcc/testsuite/gcc.dg/gimplefe-8.c
  e45dbd809432ea3c6911d238fbd0d89e  gcc/testsuite/gcc.dg/gimplefe-9.c
  8243b6f459d273f2909792678f20e7c4  gcc/testsuite/gcc.dg/gimplefe-error-1.c
  8732eebb459e2274a07edcd677b00f18  gcc/testsuite/gcc.dg/gimplefe-error-2.c
  ada325f0b72d6ab38e2125c5cbc606b4  gcc/testsuite/gcc.dg/gimplefe-error-3.c
  c633216963c8d3e5cf26c00e55663895  gcc/testsuite/gcc.dg/gimplefe-error-4.c
--- 38929,38957 ----
  595df7f84571b785178e53daa0dd0d84  gcc/testsuite/gcc.dg/gimplefe-34.c
  1d2ea52d6350a7e78a5e97c04c3d245b  gcc/testsuite/gcc.dg/gimplefe-35.c
  f8edb1215bfe058bb498b26b97756168  gcc/testsuite/gcc.dg/gimplefe-36.c
! e66a47924e823ea3e4d358f677767383  gcc/testsuite/gcc.dg/gimplefe-37.c
  f67882b336f63b608ae43b6730adaaaf  gcc/testsuite/gcc.dg/gimplefe-38.c
  2f4f2de04a6580523825226c6f012cdb  gcc/testsuite/gcc.dg/gimplefe-39.c
  e6814c98756761f222d943c13ee581ad  gcc/testsuite/gcc.dg/gimplefe-4.c
  9ddf86d2eb77d21c2e05769b1538d391  gcc/testsuite/gcc.dg/gimplefe-42.c
  34f653039b6a19157b5e6e939514150b  gcc/testsuite/gcc.dg/gimplefe-43.c
  e77515df730caf92aaccc463aedcd8c1  gcc/testsuite/gcc.dg/gimplefe-44.c
+ 28822abf98987bb79aad43571bfa5831  gcc/testsuite/gcc.dg/gimplefe-45.c
+ 2f581daa32c54ac01dfbb700b3c55853  gcc/testsuite/gcc.dg/gimplefe-46.c
+ 269ae74f2c685731dd2c577870e6f130  gcc/testsuite/gcc.dg/gimplefe-47.c
+ 42033fd81415a220072769a5adec4eb3  gcc/testsuite/gcc.dg/gimplefe-48.c
+ 611e68f95256c5aa85a7a6eb9796fc78  gcc/testsuite/gcc.dg/gimplefe-49.c
  b900f5308b7aaf209ad303e7426ad1bc  gcc/testsuite/gcc.dg/gimplefe-5.c
  003508c84556e4dd5119101f7dec73f6  gcc/testsuite/gcc.dg/gimplefe-6.c
  8537131248e8cadb5cf09db5f3a17687  gcc/testsuite/gcc.dg/gimplefe-7.c
  db9f8ce39b07fae0c4fd30c72f382e9f  gcc/testsuite/gcc.dg/gimplefe-8.c
  e45dbd809432ea3c6911d238fbd0d89e  gcc/testsuite/gcc.dg/gimplefe-9.c
  8243b6f459d273f2909792678f20e7c4  gcc/testsuite/gcc.dg/gimplefe-error-1.c
+ 75f6ea5fa8a6a1e3c09002ca36ab4e9e  gcc/testsuite/gcc.dg/gimplefe-error-10.c
+ 2145309b7f05be608c3bb110e0b2a1eb  gcc/testsuite/gcc.dg/gimplefe-error-11.c
+ f01a8a4d620c24644f7618e21e2f811b  gcc/testsuite/gcc.dg/gimplefe-error-12.c
+ d075e1ed2b2fb5d21ab476c50aaaa7d4  gcc/testsuite/gcc.dg/gimplefe-error-13.c
+ ab3f4797f7365b2acf6d2c39beef404f  gcc/testsuite/gcc.dg/gimplefe-error-14.c
  8732eebb459e2274a07edcd677b00f18  gcc/testsuite/gcc.dg/gimplefe-error-2.c
  ada325f0b72d6ab38e2125c5cbc606b4  gcc/testsuite/gcc.dg/gimplefe-error-3.c
  c633216963c8d3e5cf26c00e55663895  gcc/testsuite/gcc.dg/gimplefe-error-4.c
*************** c633216963c8d3e5cf26c00e55663895  gcc/te
*** 37354,37359 ****
--- 38959,38965 ----
  00285c44e7a48a1a7fcc5b322913c553  gcc/testsuite/gcc.dg/gimplefe-error-6.c
  f19ba5ec082add7d45bee659e0ca766a  gcc/testsuite/gcc.dg/gimplefe-error-7.c
  1989e8a17547cd0fcc58a9e35f5281fc  gcc/testsuite/gcc.dg/gimplefe-error-8.c
+ 26801e8c9b6cda7f34e1c7d9c7458645  gcc/testsuite/gcc.dg/gimplefe-error-9.c
  a7deb2e877a1f5f71b5144b4d0e6f4ab  gcc/testsuite/gcc.dg/globalalias-2.c
  af413f2a965da90de86711f81ac54bc6  gcc/testsuite/gcc.dg/globalalias.c
  644bbd61aaed9ff26399d6df215c0bf6  gcc/testsuite/gcc.dg/gnu-cond-expr-1.c
*************** ae8f65ff46d5c742b9d555f0c48fdbe3  gcc/te
*** 37384,37395 ****
  465c3878b47ae66788561ddbec36b439  gcc/testsuite/gcc.dg/gnu99-init-1.c
  21af052ed022fbb55651109aaef9f7e0  gcc/testsuite/gcc.dg/gnu99-init-2.c
  6981df5e05752f9975e927f7aa20f8e0  gcc/testsuite/gcc.dg/gnu99-static-1.c
! 2a4aeea4adf51c7519c93b5cace03bc0  gcc/testsuite/gcc.dg/goacc-gomp/goacc-gomp.exp
  e301304e13590c1ce7f775ce00ef95b0  gcc/testsuite/gcc.dg/goacc/acc_on_device-1.c
! fb2464a92b6e224c08a550ee7d8d715f  gcc/testsuite/gcc.dg/goacc/goacc.exp
! 38ff5d5da36acaa115b012c71942b1df  gcc/testsuite/gcc.dg/goacc/loop-processing-1.c
! 9e00e7a94f979942198724398d213cee  gcc/testsuite/gcc.dg/goacc/nested-function-1.c
! d28df196e898f3e95d6f476710c89624  gcc/testsuite/gcc.dg/goacc/nested-function-2.c
  75dd052bd164a3a9070c1d0861bc0e3c  gcc/testsuite/gcc.dg/goacc/pr71373.c
  cee73d50b5f0bd43a38d2bf9b09de485  gcc/testsuite/gcc.dg/goacc/pr98183.c
  f0990e08177a1fbd146dd2412ed83858  gcc/testsuite/gcc.dg/goacc/tile-1.c
--- 38990,39001 ----
  465c3878b47ae66788561ddbec36b439  gcc/testsuite/gcc.dg/gnu99-init-1.c
  21af052ed022fbb55651109aaef9f7e0  gcc/testsuite/gcc.dg/gnu99-init-2.c
  6981df5e05752f9975e927f7aa20f8e0  gcc/testsuite/gcc.dg/gnu99-static-1.c
! b1823dcc4dd19a41aa6d196b8964be53  gcc/testsuite/gcc.dg/goacc-gomp/goacc-gomp.exp
  e301304e13590c1ce7f775ce00ef95b0  gcc/testsuite/gcc.dg/goacc/acc_on_device-1.c
! 6d422c251722d7cc0d57f3e39f03419b  gcc/testsuite/gcc.dg/goacc/goacc.exp
! f1c6a4ba57460443a8ecc12c3bf25d9f  gcc/testsuite/gcc.dg/goacc/loop-processing-1.c
! afb6312838d88aea13a070e21cbe9fb9  gcc/testsuite/gcc.dg/goacc/nested-function-1.c
! 28e371856aae0bf30288fd000314f411  gcc/testsuite/gcc.dg/goacc/nested-function-2.c
  75dd052bd164a3a9070c1d0861bc0e3c  gcc/testsuite/gcc.dg/goacc/pr71373.c
  cee73d50b5f0bd43a38d2bf9b09de485  gcc/testsuite/gcc.dg/goacc/pr98183.c
  f0990e08177a1fbd146dd2412ed83858  gcc/testsuite/gcc.dg/goacc/tile-1.c
*************** c8f1fc2abd5907d2f00fc7d7c83c4252  gcc/te
*** 37433,37442 ****
  dc04151a977fa30d912aa56d55d534f7  gcc/testsuite/gcc.dg/gomp/appendix-a/a.8.1.c
  acb5ff1fe34bdf360b3e8e1e27057c7c  gcc/testsuite/gcc.dg/gomp/appendix-a/a.9.1.c
  83fc5a160131e46d52401ed9a0270d52  gcc/testsuite/gcc.dg/gomp/asm-1.c
! e6f45fe83443f902400a658e93f132bc  gcc/testsuite/gcc.dg/gomp/atomic-5.c
  22d57060102bd3c8f22f99655931b078  gcc/testsuite/gcc.dg/gomp/atomic-6.c
  5bdf2d77d1853d97a643ac387a3d4898  gcc/testsuite/gcc.dg/gomp/barrier-1.c
! 16fc33de0e18582d5964943c2ec3ad40  gcc/testsuite/gcc.dg/gomp/barrier-2.c
  23825024eeec4f1d1ec2539c8661d97f  gcc/testsuite/gcc.dg/gomp/block-1.c
  24937ceae4814ecb18d438678ba39fba  gcc/testsuite/gcc.dg/gomp/block-10.c
  64de75e0ae05fb493c94bd4478f76721  gcc/testsuite/gcc.dg/gomp/block-11.c
--- 39039,39048 ----
  dc04151a977fa30d912aa56d55d534f7  gcc/testsuite/gcc.dg/gomp/appendix-a/a.8.1.c
  acb5ff1fe34bdf360b3e8e1e27057c7c  gcc/testsuite/gcc.dg/gomp/appendix-a/a.9.1.c
  83fc5a160131e46d52401ed9a0270d52  gcc/testsuite/gcc.dg/gomp/asm-1.c
! c621352105a88501ea8e5c4fc6e9fcba  gcc/testsuite/gcc.dg/gomp/atomic-5.c
  22d57060102bd3c8f22f99655931b078  gcc/testsuite/gcc.dg/gomp/atomic-6.c
  5bdf2d77d1853d97a643ac387a3d4898  gcc/testsuite/gcc.dg/gomp/barrier-1.c
! 4cc557fc04cdc32100defee25270433a  gcc/testsuite/gcc.dg/gomp/barrier-2.c
  23825024eeec4f1d1ec2539c8661d97f  gcc/testsuite/gcc.dg/gomp/block-1.c
  24937ceae4814ecb18d438678ba39fba  gcc/testsuite/gcc.dg/gomp/block-10.c
  64de75e0ae05fb493c94bd4478f76721  gcc/testsuite/gcc.dg/gomp/block-11.c
*************** dbc6b0f25b3415b892a1907086b7068c  gcc/te
*** 37463,37471 ****
  dbf4fad9a516a5e21a83632a1bc47d48  gcc/testsuite/gcc.dg/gomp/declare-simd-2.c
  f34b5c5fe038b2af1f915413d2bbddd0  gcc/testsuite/gcc.dg/gomp/declare-simd-3.c
  8ad7fd6bf872bcd397b6264c4199830e  gcc/testsuite/gcc.dg/gomp/declare-simd-4.c
! 12e124b338a2896b223eb44c1f6fb7d5  gcc/testsuite/gcc.dg/gomp/declare-simd-5.c
  d9fdf9f47a3764723441a571868d9cba  gcc/testsuite/gcc.dg/gomp/declare-variant-1.c
! 8ccac109d8934a0cb21d67c6ec1a3b31  gcc/testsuite/gcc.dg/gomp/declare-variant-2.c
  4cbde8501b67eb0634877343d20eda34  gcc/testsuite/gcc.dg/gomp/dump-new-function-2.c
  5a6bfb1bc31247155e2a2829449a3dd5  gcc/testsuite/gcc.dg/gomp/dump-new-function-3.c
  da3311b0af85a7a45f6b528ac08bee72  gcc/testsuite/gcc.dg/gomp/dump-new-function.c
--- 39069,39077 ----
  dbf4fad9a516a5e21a83632a1bc47d48  gcc/testsuite/gcc.dg/gomp/declare-simd-2.c
  f34b5c5fe038b2af1f915413d2bbddd0  gcc/testsuite/gcc.dg/gomp/declare-simd-3.c
  8ad7fd6bf872bcd397b6264c4199830e  gcc/testsuite/gcc.dg/gomp/declare-simd-4.c
! c95154d0c0580392aee19257bfc2e9e4  gcc/testsuite/gcc.dg/gomp/declare-simd-5.c
  d9fdf9f47a3764723441a571868d9cba  gcc/testsuite/gcc.dg/gomp/declare-variant-1.c
! 51d79415450b7870aadd4c879fb233d4  gcc/testsuite/gcc.dg/gomp/declare-variant-2.c
  4cbde8501b67eb0634877343d20eda34  gcc/testsuite/gcc.dg/gomp/dump-new-function-2.c
  5a6bfb1bc31247155e2a2829449a3dd5  gcc/testsuite/gcc.dg/gomp/dump-new-function-3.c
  da3311b0af85a7a45f6b528ac08bee72  gcc/testsuite/gcc.dg/gomp/dump-new-function.c
*************** d04c18e8518877b08e0371599b6643ed  gcc/te
*** 37496,37502 ****
  80a82ac0d4faa464e36b67b133df4697  gcc/testsuite/gcc.dg/gomp/for-7.c
  d9604d99f8b1a6974afc5a3cab2765b3  gcc/testsuite/gcc.dg/gomp/for-8.c
  34eb86e893e0bd796aad8d236b5bc215  gcc/testsuite/gcc.dg/gomp/for-9.c
! fb6a7b6c338514569109730e1ce07adb  gcc/testsuite/gcc.dg/gomp/gomp.exp
  f23a4bf5a986b8f5c098e677d3a78a11  gcc/testsuite/gcc.dg/gomp/linear-1.c
  11c71eb5733cf2b2fd8236737c95dfad  gcc/testsuite/gcc.dg/gomp/loop-1.c
  110dfd4b42962d803dd77ce77900455c  gcc/testsuite/gcc.dg/gomp/loop-2.c
--- 39102,39108 ----
  80a82ac0d4faa464e36b67b133df4697  gcc/testsuite/gcc.dg/gomp/for-7.c
  d9604d99f8b1a6974afc5a3cab2765b3  gcc/testsuite/gcc.dg/gomp/for-8.c
  34eb86e893e0bd796aad8d236b5bc215  gcc/testsuite/gcc.dg/gomp/for-9.c
! 6fa2dd6359051f45572d90f1e5217339  gcc/testsuite/gcc.dg/gomp/gomp.exp
  f23a4bf5a986b8f5c098e677d3a78a11  gcc/testsuite/gcc.dg/gomp/linear-1.c
  11c71eb5733cf2b2fd8236737c95dfad  gcc/testsuite/gcc.dg/gomp/loop-1.c
  110dfd4b42962d803dd77ce77900455c  gcc/testsuite/gcc.dg/gomp/loop-2.c
*************** d77e47d829660c96c43f189c259292a5  gcc/te
*** 37508,37514 ****
  e3d4511cf0643d031beaecffa7d44be0  gcc/testsuite/gcc.dg/gomp/master-2.c
  12980af7dd41b122fc335c0ef4ba07ed  gcc/testsuite/gcc.dg/gomp/master-3.c
  2d3a1739d0f68eb616c52754dd6292ae  gcc/testsuite/gcc.dg/gomp/nestedfn-1.c
! 095dd5dabb76794a29ba538479134f6c  gcc/testsuite/gcc.dg/gomp/nesting-1.c
  b8a262a38fc2393baa245eefd42cb523  gcc/testsuite/gcc.dg/gomp/notify-new-function-2.c
  42242e5f88e1b5f1a49c9fb6ca8bd64a  gcc/testsuite/gcc.dg/gomp/notify-new-function-3.c
  33fdbcf36749189e365ff8da25f16925  gcc/testsuite/gcc.dg/gomp/notify-new-function.c
--- 39114,39120 ----
  e3d4511cf0643d031beaecffa7d44be0  gcc/testsuite/gcc.dg/gomp/master-2.c
  12980af7dd41b122fc335c0ef4ba07ed  gcc/testsuite/gcc.dg/gomp/master-3.c
  2d3a1739d0f68eb616c52754dd6292ae  gcc/testsuite/gcc.dg/gomp/nestedfn-1.c
! 13f30c2066a7cf4479908d3d67d32fe3  gcc/testsuite/gcc.dg/gomp/nesting-1.c
  b8a262a38fc2393baa245eefd42cb523  gcc/testsuite/gcc.dg/gomp/notify-new-function-2.c
  42242e5f88e1b5f1a49c9fb6ca8bd64a  gcc/testsuite/gcc.dg/gomp/notify-new-function-3.c
  33fdbcf36749189e365ff8da25f16925  gcc/testsuite/gcc.dg/gomp/notify-new-function.c
*************** d7769c446568c18d557180c850cf3b4a  gcc/te
*** 37524,37530 ****
  f711435274df71049aa71808a78fc7a5  gcc/testsuite/gcc.dg/gomp/parallel-3.c
  d9a1f43ca6ac2a073e22bbbf243f300b  gcc/testsuite/gcc.dg/gomp/parallel-4.c
  0f7ac2e81ae2d400d52c34aa1c0b379a  gcc/testsuite/gcc.dg/gomp/pr100508.c
! 410119ba8ee90eb1671f6b992533b966  gcc/testsuite/gcc.dg/gomp/pr104517.c
  7a163e65fe52b23fc85f2daa18c442ee  gcc/testsuite/gcc.dg/gomp/pr25874.c
  597de3ed24e1bc1c650af918589d83c3  gcc/testsuite/gcc.dg/gomp/pr25989.c
  0bd3e8dc860de61dd8e09229c090e1f5  gcc/testsuite/gcc.dg/gomp/pr25990.c
--- 39130,39138 ----
  f711435274df71049aa71808a78fc7a5  gcc/testsuite/gcc.dg/gomp/parallel-3.c
  d9a1f43ca6ac2a073e22bbbf243f300b  gcc/testsuite/gcc.dg/gomp/parallel-4.c
  0f7ac2e81ae2d400d52c34aa1c0b379a  gcc/testsuite/gcc.dg/gomp/pr100508.c
! b366c60601c1c55dbcf45891d864da72  gcc/testsuite/gcc.dg/gomp/pr104517.c
! cd38ec3195ea21395e6d6950ff620410  gcc/testsuite/gcc.dg/gomp/pr104532.c
! 0c8d7b49664fa54dbd4054b13e8a3133  gcc/testsuite/gcc.dg/gomp/pr104757.c
  7a163e65fe52b23fc85f2daa18c442ee  gcc/testsuite/gcc.dg/gomp/pr25874.c
  597de3ed24e1bc1c650af918589d83c3  gcc/testsuite/gcc.dg/gomp/pr25989.c
  0bd3e8dc860de61dd8e09229c090e1f5  gcc/testsuite/gcc.dg/gomp/pr25990.c
*************** ca3e6f1780ac0a60027cbe93e57cbbf1  gcc/te
*** 37566,37573 ****
  d202c807b4080808baf99ab9f32b21a4  gcc/testsuite/gcc.dg/gomp/pr39495-1.c
  a68bce75892f83dcd1d4ea4ff82fd7e4  gcc/testsuite/gcc.dg/gomp/pr39495-2.c
  ec3e057593bad1ce490caa7f3ca2b2f8  gcc/testsuite/gcc.dg/gomp/pr44085.c
! b479e6893611bbb984727c7b24fecade  gcc/testsuite/gcc.dg/gomp/pr46032-2.c
! 522c7bfc279cd473b82f0baaadea4fef  gcc/testsuite/gcc.dg/gomp/pr46032-3.c
  81cc1ab572093091d240bd4f73616466  gcc/testsuite/gcc.dg/gomp/pr47963.c
  29cbb3dace50a2db39440a312c796a09  gcc/testsuite/gcc.dg/gomp/pr48591.c
  3fc7af6d272851aacce149761f6d3080  gcc/testsuite/gcc.dg/gomp/pr48716.c
--- 39174,39181 ----
  d202c807b4080808baf99ab9f32b21a4  gcc/testsuite/gcc.dg/gomp/pr39495-1.c
  a68bce75892f83dcd1d4ea4ff82fd7e4  gcc/testsuite/gcc.dg/gomp/pr39495-2.c
  ec3e057593bad1ce490caa7f3ca2b2f8  gcc/testsuite/gcc.dg/gomp/pr44085.c
! 419e89353f09719b56517d2d6e9f06df  gcc/testsuite/gcc.dg/gomp/pr46032-2.c
! ff052a1f1f020d9170af9c7a1048b084  gcc/testsuite/gcc.dg/gomp/pr46032-3.c
  81cc1ab572093091d240bd4f73616466  gcc/testsuite/gcc.dg/gomp/pr47963.c
  29cbb3dace50a2db39440a312c796a09  gcc/testsuite/gcc.dg/gomp/pr48591.c
  3fc7af6d272851aacce149761f6d3080  gcc/testsuite/gcc.dg/gomp/pr48716.c
*************** c5bf7c7917177162a66f3e2ca3cca6d0  gcc/te
*** 37628,37635 ****
  5a96f232ac76ad6d8182f67c3f3a4acf  gcc/testsuite/gcc.dg/gomp/reduction-1.c
  ee48ac12f6aa280cf17765633b31f541  gcc/testsuite/gcc.dg/gomp/reduction-2.c
  33c731ef229e9ead8add30118b091469  gcc/testsuite/gcc.dg/gomp/requires-1.c
  536359d59fc418a1570a6d8574a66ca1  gcc/testsuite/gcc.dg/gomp/sections-1.c
! c8fdbed05305ecb29a74eae041f265e9  gcc/testsuite/gcc.dg/gomp/sections-2.c
  b72fe99f861779472bd3b1cf3587d478  gcc/testsuite/gcc.dg/gomp/sections-3.c
  9f60edc949854690c68fa7fb1e8b3157  gcc/testsuite/gcc.dg/gomp/sections-4.c
  3204cae0e47462621115d4cebb22d26d  gcc/testsuite/gcc.dg/gomp/sharing-1.c
--- 39236,39244 ----
  5a96f232ac76ad6d8182f67c3f3a4acf  gcc/testsuite/gcc.dg/gomp/reduction-1.c
  ee48ac12f6aa280cf17765633b31f541  gcc/testsuite/gcc.dg/gomp/reduction-2.c
  33c731ef229e9ead8add30118b091469  gcc/testsuite/gcc.dg/gomp/requires-1.c
+ 63c552a2e8f0cb5af7f54f430aa3d7dd  gcc/testsuite/gcc.dg/gomp/scan-1.c
  536359d59fc418a1570a6d8574a66ca1  gcc/testsuite/gcc.dg/gomp/sections-1.c
! f027428463eb3710e7fbcd6d2994dcdc  gcc/testsuite/gcc.dg/gomp/sections-2.c
  b72fe99f861779472bd3b1cf3587d478  gcc/testsuite/gcc.dg/gomp/sections-3.c
  9f60edc949854690c68fa7fb1e8b3157  gcc/testsuite/gcc.dg/gomp/sections-4.c
  3204cae0e47462621115d4cebb22d26d  gcc/testsuite/gcc.dg/gomp/sharing-1.c
*************** a7ac9c7250e12a3e2fa3681701b90c4f  gcc/te
*** 37639,37645 ****
  126d0fa445584b17786d97ff1868b4b2  gcc/testsuite/gcc.dg/gomp/simd-2.c
  71529f4901112537840ae2e908cd9b63  gcc/testsuite/gcc.dg/gomp/simd-3.c
  eadcc6e8f85f7b3ef33b80d3fa14380e  gcc/testsuite/gcc.dg/gomp/simd-clones-1.c
! ee13d224fd76947e011c7a925be81f89  gcc/testsuite/gcc.dg/gomp/simd-clones-2.c
  c14634a323696079f49ec83c65002f01  gcc/testsuite/gcc.dg/gomp/simd-clones-3.c
  8bce1bb5063cf99759b09ef1906170fb  gcc/testsuite/gcc.dg/gomp/simd-clones-4.c
  039ac62669587006b5697f833ee30a64  gcc/testsuite/gcc.dg/gomp/simd-clones-5.c
--- 39248,39254 ----
  126d0fa445584b17786d97ff1868b4b2  gcc/testsuite/gcc.dg/gomp/simd-2.c
  71529f4901112537840ae2e908cd9b63  gcc/testsuite/gcc.dg/gomp/simd-3.c
  eadcc6e8f85f7b3ef33b80d3fa14380e  gcc/testsuite/gcc.dg/gomp/simd-clones-1.c
! 43b34d2fe80f127a2a417d2239ae0930  gcc/testsuite/gcc.dg/gomp/simd-clones-2.c
  c14634a323696079f49ec83c65002f01  gcc/testsuite/gcc.dg/gomp/simd-clones-3.c
  8bce1bb5063cf99759b09ef1906170fb  gcc/testsuite/gcc.dg/gomp/simd-clones-4.c
  039ac62669587006b5697f833ee30a64  gcc/testsuite/gcc.dg/gomp/simd-clones-5.c
*************** ad6a9027ae49be1e64cb9dd3311b1b94  gcc/te
*** 37652,37657 ****
--- 39261,39267 ----
  871d2afbf0f76e5d008f733eaf14a059  gcc/testsuite/gcc.dg/gomp/static.c
  0e4b88bcdaea3e0ec538494446e27cde  gcc/testsuite/gcc.dg/gomp/target-1.c
  3dbda1e12ff1651f658704d415f7e84f  gcc/testsuite/gcc.dg/gomp/target-2.c
+ f5d36c4c8c6e9b78f8b507ff3bb8142a  gcc/testsuite/gcc.dg/gomp/target-3.c
  f2e9b1993ad0ade2480d28889a6b9b76  gcc/testsuite/gcc.dg/gomp/task-detach-1.c
  4741c3d5f20c56daf5979276c5b6f618  gcc/testsuite/gcc.dg/gomp/taskgroup-1.c
  b98a2bc5c4eb574a9dd2efa360dc67c3  gcc/testsuite/gcc.dg/gomp/teams-1.c
*************** e93a3e60372e4173905f86d9c0231b9f  gcc/te
*** 37734,37742 ****
  98cf5f10b71583df770890d6475f0a12  gcc/testsuite/gcc.dg/graphite/block-7.c
  d52311b9c131d936e432ecb0ead28e52  gcc/testsuite/gcc.dg/graphite/block-8.c
  5e3ef65d649f9a7d1c1d6819a2188844  gcc/testsuite/gcc.dg/graphite/block-pr47654.c
! c3029918e87d1d13ebf16885b60ceb30  gcc/testsuite/gcc.dg/graphite/fuse-1.c
  63d4a7071763336f82d3784cd09338d4  gcc/testsuite/gcc.dg/graphite/fuse-2.c
! 0e91e0d2a7cef669613878bda53b1ce4  gcc/testsuite/gcc.dg/graphite/graphite.exp
  fcc649eff8ed5565979257e4569372a8  gcc/testsuite/gcc.dg/graphite/id-1.c
  09f79b77ac016159bcb104dc023d7b07  gcc/testsuite/gcc.dg/graphite/id-10.c
  3e96948dcff7f34717278e07eb31443a  gcc/testsuite/gcc.dg/graphite/id-11.c
--- 39344,39352 ----
  98cf5f10b71583df770890d6475f0a12  gcc/testsuite/gcc.dg/graphite/block-7.c
  d52311b9c131d936e432ecb0ead28e52  gcc/testsuite/gcc.dg/graphite/block-8.c
  5e3ef65d649f9a7d1c1d6819a2188844  gcc/testsuite/gcc.dg/graphite/block-pr47654.c
! 9c2252f89106b7004be1067a7dbd5b52  gcc/testsuite/gcc.dg/graphite/fuse-1.c
  63d4a7071763336f82d3784cd09338d4  gcc/testsuite/gcc.dg/graphite/fuse-2.c
! fef7050b6b9a7bc6253684bc76b84fdd  gcc/testsuite/gcc.dg/graphite/graphite.exp
  fcc649eff8ed5565979257e4569372a8  gcc/testsuite/gcc.dg/graphite/id-1.c
  09f79b77ac016159bcb104dc023d7b07  gcc/testsuite/gcc.dg/graphite/id-10.c
  3e96948dcff7f34717278e07eb31443a  gcc/testsuite/gcc.dg/graphite/id-11.c
*************** d0f22c16c5fac5ae8f190b3564aba97d  gcc/te
*** 37904,37910 ****
  cbc1d72a5a486c20f3b581d86ceb6480  gcc/testsuite/gcc.dg/graphite/pr69067.c
  47d652714c7a00602400f743b5e3c11c  gcc/testsuite/gcc.dg/graphite/pr69068.c
  4e7f8240209ca1b787c57a784dd3ab73  gcc/testsuite/gcc.dg/graphite/pr69292.c
! aafff880fbf49209432043549627df9f  gcc/testsuite/gcc.dg/graphite/pr69728.c
  4291fea3d27e2dfa567eac5cd625cee2  gcc/testsuite/gcc.dg/graphite/pr69823.c
  18e2e6ad5faaa133fc0d9a3e341584de  gcc/testsuite/gcc.dg/graphite/pr70045.c
  187adff90265612446489b184d1ca625  gcc/testsuite/gcc.dg/graphite/pr70956.c
--- 39514,39520 ----
  cbc1d72a5a486c20f3b581d86ceb6480  gcc/testsuite/gcc.dg/graphite/pr69067.c
  47d652714c7a00602400f743b5e3c11c  gcc/testsuite/gcc.dg/graphite/pr69068.c
  4e7f8240209ca1b787c57a784dd3ab73  gcc/testsuite/gcc.dg/graphite/pr69292.c
! 19e6d467beb435f6cdfd6cba0bd5c24f  gcc/testsuite/gcc.dg/graphite/pr69728.c
  4291fea3d27e2dfa567eac5cd625cee2  gcc/testsuite/gcc.dg/graphite/pr69823.c
  18e2e6ad5faaa133fc0d9a3e341584de  gcc/testsuite/gcc.dg/graphite/pr70045.c
  187adff90265612446489b184d1ca625  gcc/testsuite/gcc.dg/graphite/pr70956.c
*************** d4da3da3351d0f387c4d466a917ad8fa  gcc/te
*** 37959,37965 ****
  2ce473edf3c1e50255ffa96186cf15eb  gcc/testsuite/gcc.dg/graphite/pr86865.c
  424a5beca9a0b9d00f4c95e73cd4f87b  gcc/testsuite/gcc.dg/graphite/pr87931.c
  c82f3c2ff1dcd8366a9a68108fdbd850  gcc/testsuite/gcc.dg/graphite/pr93964.c
! c6b8698bec7f9a1a2671d400cbe3023b  gcc/testsuite/gcc.dg/graphite/pr99085.c
  c5acb4eef5addd258e89e51e27d3b449  gcc/testsuite/gcc.dg/graphite/run-id-1.c
  69c11dc302a921c92977db519167bec1  gcc/testsuite/gcc.dg/graphite/run-id-2.c
  84a75a861553ce658d85018a3ced0a6b  gcc/testsuite/gcc.dg/graphite/run-id-3.c
--- 39569,39575 ----
  2ce473edf3c1e50255ffa96186cf15eb  gcc/testsuite/gcc.dg/graphite/pr86865.c
  424a5beca9a0b9d00f4c95e73cd4f87b  gcc/testsuite/gcc.dg/graphite/pr87931.c
  c82f3c2ff1dcd8366a9a68108fdbd850  gcc/testsuite/gcc.dg/graphite/pr93964.c
! ce45f82e29aacad99cecfc384558e7d7  gcc/testsuite/gcc.dg/graphite/pr99085.c
  c5acb4eef5addd258e89e51e27d3b449  gcc/testsuite/gcc.dg/graphite/run-id-1.c
  69c11dc302a921c92977db519167bec1  gcc/testsuite/gcc.dg/graphite/run-id-2.c
  84a75a861553ce658d85018a3ced0a6b  gcc/testsuite/gcc.dg/graphite/run-id-3.c
*************** e71816cd1a50c344fa5b377647b8c170  gcc/te
*** 37998,38007 ****
  66890a5de32de9c1f1da0bacb4c8067c  gcc/testsuite/gcc.dg/graphite/scop-7.c
  c0f448dfa77f579c1faa1b00559d0d8b  gcc/testsuite/gcc.dg/graphite/scop-8.c
  b8f5757335e6643b1f4d517434d65b17  gcc/testsuite/gcc.dg/graphite/scop-9.c
! d8b9b64c9519392df030c2b34fff3359  gcc/testsuite/gcc.dg/graphite/scop-dsyr2k-2.c
! 2d41092b5ed6974babf28edde082db4a  gcc/testsuite/gcc.dg/graphite/scop-dsyr2k.c
! 80c4a1ff48aeb1568f265c981c7f50c3  gcc/testsuite/gcc.dg/graphite/scop-dsyrk-2.c
! 5b2184abbab9a4a16f25e9ba155e943a  gcc/testsuite/gcc.dg/graphite/scop-dsyrk.c
  c77dc61357c81049646650148fbf4d14  gcc/testsuite/gcc.dg/graphite/scop-matmult.c
  1722f355450d96aa93c460576fd71fe6  gcc/testsuite/gcc.dg/graphite/scop-mvt.c
  a5d26df6d8c11eebcc74e08ac732bde4  gcc/testsuite/gcc.dg/graphite/scop-pr66980.c
--- 39608,39617 ----
  66890a5de32de9c1f1da0bacb4c8067c  gcc/testsuite/gcc.dg/graphite/scop-7.c
  c0f448dfa77f579c1faa1b00559d0d8b  gcc/testsuite/gcc.dg/graphite/scop-8.c
  b8f5757335e6643b1f4d517434d65b17  gcc/testsuite/gcc.dg/graphite/scop-9.c
! 6799cfd85325c2aa97191187b689c2c3  gcc/testsuite/gcc.dg/graphite/scop-dsyr2k-2.c
! 24f8fad998dbaf6d176e29a3a15dbe90  gcc/testsuite/gcc.dg/graphite/scop-dsyr2k.c
! aed374227e2b5f7d9197449e285032f2  gcc/testsuite/gcc.dg/graphite/scop-dsyrk-2.c
! 46cff98b729dc7370810167ec6f450a1  gcc/testsuite/gcc.dg/graphite/scop-dsyrk.c
  c77dc61357c81049646650148fbf4d14  gcc/testsuite/gcc.dg/graphite/scop-matmult.c
  1722f355450d96aa93c460576fd71fe6  gcc/testsuite/gcc.dg/graphite/scop-mvt.c
  a5d26df6d8c11eebcc74e08ac732bde4  gcc/testsuite/gcc.dg/graphite/scop-pr66980.c
*************** ae25818b60ee7840539730db6fe975ed  gcc/te
*** 38020,38032 ****
  a35da81a17cae7d714bdde9bb66ccd92  gcc/testsuite/gcc.dg/guality/csttest.c
  b9aafcde73d659e8a8f12aec94a7cb09  gcc/testsuite/gcc.dg/guality/ctztest.c
  46fe10dc7c2a1b21f0d7af66c601ad44  gcc/testsuite/gcc.dg/guality/drap.c
! 6572d7b6a1c070b8e6c4fe22f6133e02  gcc/testsuite/gcc.dg/guality/example.c
! c2dbe29811bd94d5d243fab419e7cc46  gcc/testsuite/gcc.dg/guality/guality.c
  6a55e291b85166259225a8d7acf8f3c5  gcc/testsuite/gcc.dg/guality/guality.exp
  8c384d0e247915329d53a586d7639107  gcc/testsuite/gcc.dg/guality/guality.h
  2d9c26760bf9d33b3f102b5e17c22c93  gcc/testsuite/gcc.dg/guality/inline-params-2.c
! 1acafa5b9d5aeba7e4788b85be32dc52  gcc/testsuite/gcc.dg/guality/inline-params.c
! a3a26ee7a85e0c1195f6e162cb7aee32  gcc/testsuite/gcc.dg/guality/loop-1.c
  5c2f6a4b9c1ebab7a391d27540ff3f0b  gcc/testsuite/gcc.dg/guality/nrv-1.c
  eaa385c20377624a5edfaf054552a4f4  gcc/testsuite/gcc.dg/guality/param-1.c
  bc96d3d7a369ee1d75a9841b80312226  gcc/testsuite/gcc.dg/guality/param-2.c
--- 39630,39643 ----
  a35da81a17cae7d714bdde9bb66ccd92  gcc/testsuite/gcc.dg/guality/csttest.c
  b9aafcde73d659e8a8f12aec94a7cb09  gcc/testsuite/gcc.dg/guality/ctztest.c
  46fe10dc7c2a1b21f0d7af66c601ad44  gcc/testsuite/gcc.dg/guality/drap.c
! 35524176317603e370c0e34f6d8bd9ae  gcc/testsuite/gcc.dg/guality/example.c
! b585f5364a9c450ecb2e3b12c31813d4  gcc/testsuite/gcc.dg/guality/guality.c
  6a55e291b85166259225a8d7acf8f3c5  gcc/testsuite/gcc.dg/guality/guality.exp
  8c384d0e247915329d53a586d7639107  gcc/testsuite/gcc.dg/guality/guality.h
  2d9c26760bf9d33b3f102b5e17c22c93  gcc/testsuite/gcc.dg/guality/inline-params-2.c
! 3e4b160c43920e148f7c88f96f5b4f0d  gcc/testsuite/gcc.dg/guality/inline-params.c
! ae369b6ced81ed3fd64cdae89010ad5f  gcc/testsuite/gcc.dg/guality/ipa-sra-1.c
! 7012f59de97a05ed5deb56fd7a5ac984  gcc/testsuite/gcc.dg/guality/loop-1.c
  5c2f6a4b9c1ebab7a391d27540ff3f0b  gcc/testsuite/gcc.dg/guality/nrv-1.c
  eaa385c20377624a5edfaf054552a4f4  gcc/testsuite/gcc.dg/guality/param-1.c
  bc96d3d7a369ee1d75a9841b80312226  gcc/testsuite/gcc.dg/guality/param-2.c
*************** f932e4faa7d538859c699e070447bc01  gcc/te
*** 38036,38055 ****
  b0deaf43b4029cf429b4a541937eefd0  gcc/testsuite/gcc.dg/guality/pr101905.c
  91c528fa3ca63dee1e35b7c6d02cd258  gcc/testsuite/gcc.dg/guality/pr25967-1.c
  fa9ed629eec13dc2cd77fec24ea82b3c  gcc/testsuite/gcc.dg/guality/pr25967-2.c
! 19bacc1e91869a8697eb548fb674e517  gcc/testsuite/gcc.dg/guality/pr36728-1.c
! 15b728fbd163d9aa4e4d3a41ff5d237c  gcc/testsuite/gcc.dg/guality/pr36728-2.c
! 3a0a4f52233f47c7abff4081856aa824  gcc/testsuite/gcc.dg/guality/pr36728-3.c
  c9e147a33e4a3b229f1f7f7ecf62470e  gcc/testsuite/gcc.dg/guality/pr36728-4.c
  870c69b13f7ce3207d60bfb18ef50dec  gcc/testsuite/gcc.dg/guality/pr36977.c
  aa0d3895cb110fb73483ef82390de1b0  gcc/testsuite/gcc.dg/guality/pr37726.c
! 1ca42cb0e262cf769701bb75ee52882d  gcc/testsuite/gcc.dg/guality/pr41353-1.c
  6183e26dbce384fc9ea1b62b210da36c  gcc/testsuite/gcc.dg/guality/pr41353-2.c
  69a084e11405723fc656dcafcdb50d7a  gcc/testsuite/gcc.dg/guality/pr41404-1.c
! 66f4dc4571bc53ecb7aca251a4413bf3  gcc/testsuite/gcc.dg/guality/pr41447-1.c
  8b7993c3d79b46649c241e47ecefaa65  gcc/testsuite/gcc.dg/guality/pr41616-1.c
  cb881ba6e4890d89297a2bcdab492200  gcc/testsuite/gcc.dg/guality/pr42782.c
  3209447ae2fce9e11cd1160e7d1ec4c6  gcc/testsuite/gcc.dg/guality/pr43051-1.c
! e2b283a326e84b9c2ef36dbbcf1d9d7d  gcc/testsuite/gcc.dg/guality/pr43077-1.c
  0e1d83e4c6fe62da664a1d1aefeaa303  gcc/testsuite/gcc.dg/guality/pr43177.c
  14f158db4cf5a7c40a423dede29755cf  gcc/testsuite/gcc.dg/guality/pr43329-1.c
  1116ad785a8f16fde9442eb9189b2c69  gcc/testsuite/gcc.dg/guality/pr43479.c
--- 39647,39666 ----
  b0deaf43b4029cf429b4a541937eefd0  gcc/testsuite/gcc.dg/guality/pr101905.c
  91c528fa3ca63dee1e35b7c6d02cd258  gcc/testsuite/gcc.dg/guality/pr25967-1.c
  fa9ed629eec13dc2cd77fec24ea82b3c  gcc/testsuite/gcc.dg/guality/pr25967-2.c
! 4fe5b7e5b7e0d6b1bda4df1eb9976296  gcc/testsuite/gcc.dg/guality/pr36728-1.c
! 8e17dc11d45d0df604dd9db97a6d6786  gcc/testsuite/gcc.dg/guality/pr36728-2.c
! ebaa7610bcb4b84f2114855d1da9ded1  gcc/testsuite/gcc.dg/guality/pr36728-3.c
  c9e147a33e4a3b229f1f7f7ecf62470e  gcc/testsuite/gcc.dg/guality/pr36728-4.c
  870c69b13f7ce3207d60bfb18ef50dec  gcc/testsuite/gcc.dg/guality/pr36977.c
  aa0d3895cb110fb73483ef82390de1b0  gcc/testsuite/gcc.dg/guality/pr37726.c
! 5c5086cfb3549553ca944ae9dcf86cab  gcc/testsuite/gcc.dg/guality/pr41353-1.c
  6183e26dbce384fc9ea1b62b210da36c  gcc/testsuite/gcc.dg/guality/pr41353-2.c
  69a084e11405723fc656dcafcdb50d7a  gcc/testsuite/gcc.dg/guality/pr41404-1.c
! d483b8568052b98f163d16dfd85eb1b5  gcc/testsuite/gcc.dg/guality/pr41447-1.c
  8b7993c3d79b46649c241e47ecefaa65  gcc/testsuite/gcc.dg/guality/pr41616-1.c
  cb881ba6e4890d89297a2bcdab492200  gcc/testsuite/gcc.dg/guality/pr42782.c
  3209447ae2fce9e11cd1160e7d1ec4c6  gcc/testsuite/gcc.dg/guality/pr43051-1.c
! 6e1829ac829ad885426a4b39555fddaf  gcc/testsuite/gcc.dg/guality/pr43077-1.c
  0e1d83e4c6fe62da664a1d1aefeaa303  gcc/testsuite/gcc.dg/guality/pr43177.c
  14f158db4cf5a7c40a423dede29755cf  gcc/testsuite/gcc.dg/guality/pr43329-1.c
  1116ad785a8f16fde9442eb9189b2c69  gcc/testsuite/gcc.dg/guality/pr43479.c
*************** ad22498cf8ec23e7130f00c09013af31  gcc/te
*** 38061,38079 ****
  f59890b50dc747afab9803faad83af78  gcc/testsuite/gcc.dg/guality/pr48437.c
  0a8f326039eacf3795df083d59d270e1  gcc/testsuite/gcc.dg/guality/pr48466.c
  67820d262d95458ec0b89cffe57437ec  gcc/testsuite/gcc.dg/guality/pr49888.c
! f5d23d5daf139140e3f74b9521e69847  gcc/testsuite/gcc.dg/guality/pr54200.c
! df8d9a90eef54cc78285c05d55378c38  gcc/testsuite/gcc.dg/guality/pr54519-1.c
! eaa0797d9234eb2c7c77adc2b6f86a78  gcc/testsuite/gcc.dg/guality/pr54519-2.c
! 9a7b9d438f9beeabe790f37079045950  gcc/testsuite/gcc.dg/guality/pr54519-3.c
! e6d4a037cd6f46c51bf98f252f17f446  gcc/testsuite/gcc.dg/guality/pr54519-4.c
! 90f0962ff701077564ce577af2a1c3ad  gcc/testsuite/gcc.dg/guality/pr54519-5.c
! 5cd6cc6e9848c4f9020e17dbb2075adf  gcc/testsuite/gcc.dg/guality/pr54519-6.c
  3b698bcedbf976b8fb41e5ed0e6c24d4  gcc/testsuite/gcc.dg/guality/pr54551.c
! 3dd986c049a5c961a464187ccaf8d398  gcc/testsuite/gcc.dg/guality/pr54693-2.c
  a0f519834f82ace4b5906cd4aac0b98e  gcc/testsuite/gcc.dg/guality/pr54693.c
  f6545f32d210f8c908e8b567c811af9c  gcc/testsuite/gcc.dg/guality/pr54796.c
! 821120078679b849dea1d88696ee67aa  gcc/testsuite/gcc.dg/guality/pr54970.c
! 0806241ec48af974aff7b61707c11916  gcc/testsuite/gcc.dg/guality/pr56154-1.c
  f2e11607d04914713628932840c715c5  gcc/testsuite/gcc.dg/guality/pr56154-2.c
  93af310cf109bfc0389356d204c56ae4  gcc/testsuite/gcc.dg/guality/pr56154-3.c
  65ec6e80388a7d16c5fa3558ab822e2e  gcc/testsuite/gcc.dg/guality/pr56154-4.c
--- 39672,39690 ----
  f59890b50dc747afab9803faad83af78  gcc/testsuite/gcc.dg/guality/pr48437.c
  0a8f326039eacf3795df083d59d270e1  gcc/testsuite/gcc.dg/guality/pr48466.c
  67820d262d95458ec0b89cffe57437ec  gcc/testsuite/gcc.dg/guality/pr49888.c
! 9e835811e321a45d04341afae4b5d3b0  gcc/testsuite/gcc.dg/guality/pr54200.c
! f9732f3ad196f0166cb59e0c4ab93fc2  gcc/testsuite/gcc.dg/guality/pr54519-1.c
! c3794a4a04d5241ee82db84945cf689a  gcc/testsuite/gcc.dg/guality/pr54519-2.c
! 2be47aa882a60989678f09f07674eb36  gcc/testsuite/gcc.dg/guality/pr54519-3.c
! 292fbf7ab8412c8dae773c8eae697d44  gcc/testsuite/gcc.dg/guality/pr54519-4.c
! ecb604a07138737ba579b3cb4d7cd8d0  gcc/testsuite/gcc.dg/guality/pr54519-5.c
! e23b3494be5e35860f18b19c7f5a9186  gcc/testsuite/gcc.dg/guality/pr54519-6.c
  3b698bcedbf976b8fb41e5ed0e6c24d4  gcc/testsuite/gcc.dg/guality/pr54551.c
! dc5f736cdb4818471c24e5e91dda425a  gcc/testsuite/gcc.dg/guality/pr54693-2.c
  a0f519834f82ace4b5906cd4aac0b98e  gcc/testsuite/gcc.dg/guality/pr54693.c
  f6545f32d210f8c908e8b567c811af9c  gcc/testsuite/gcc.dg/guality/pr54796.c
! 8daf210b82a9b3508a2b7525e13b3bec  gcc/testsuite/gcc.dg/guality/pr54970.c
! 7fb1f72a09e289ac4ac30ea059e55539  gcc/testsuite/gcc.dg/guality/pr56154-1.c
  f2e11607d04914713628932840c715c5  gcc/testsuite/gcc.dg/guality/pr56154-2.c
  93af310cf109bfc0389356d204c56ae4  gcc/testsuite/gcc.dg/guality/pr56154-3.c
  65ec6e80388a7d16c5fa3558ab822e2e  gcc/testsuite/gcc.dg/guality/pr56154-4.c
*************** e7dd4b85c878db0844a2af69bc853d37  gcc/te
*** 38083,38096 ****
  98fd462ab643d1f911532ca037efefd0  gcc/testsuite/gcc.dg/guality/pr58791-3.c
  488eeeba067b664dd360f9c8a77ed0f6  gcc/testsuite/gcc.dg/guality/pr58791-4.c
  5aecfb2723beadb92903d5b3b9926d2e  gcc/testsuite/gcc.dg/guality/pr58791-5.c
! c6549503dc81409438c556c795f6ad8a  gcc/testsuite/gcc.dg/guality/pr59776.c
  835fde6d6312ffd1b474991dd006c97b  gcc/testsuite/gcc.dg/guality/pr63300-const-volatile.c
  bd4a9885fb6107771b347577a3a69af9  gcc/testsuite/gcc.dg/guality/pr67192.c
  6f9f612c16ed980a7a97f6d09a05b6e1  gcc/testsuite/gcc.dg/guality/pr68037-1.c
  db1720caaff79a0684d94be88f9e0d69  gcc/testsuite/gcc.dg/guality/pr68037-2.c
  28ee863461f68a968dc0f6c489f4f0d0  gcc/testsuite/gcc.dg/guality/pr68037-3.c
! af85c125b695e522f507c77ef611d723  gcc/testsuite/gcc.dg/guality/pr68860-1.c
! e98324ecad40f111bfaa030b98a01931  gcc/testsuite/gcc.dg/guality/pr68860-2.c
  6ba30facaf57fd44c7a0dd23f5adda03  gcc/testsuite/gcc.dg/guality/pr69244.c
  d92b11494bb3457d1bb8ddfc99caec73  gcc/testsuite/gcc.dg/guality/pr69947.c
  a7fd762dc34522882305feff890fdc31  gcc/testsuite/gcc.dg/guality/pr78726.c
--- 39694,39707 ----
  98fd462ab643d1f911532ca037efefd0  gcc/testsuite/gcc.dg/guality/pr58791-3.c
  488eeeba067b664dd360f9c8a77ed0f6  gcc/testsuite/gcc.dg/guality/pr58791-4.c
  5aecfb2723beadb92903d5b3b9926d2e  gcc/testsuite/gcc.dg/guality/pr58791-5.c
! 46f3532b682b99aba09d65fa9eb470b5  gcc/testsuite/gcc.dg/guality/pr59776.c
  835fde6d6312ffd1b474991dd006c97b  gcc/testsuite/gcc.dg/guality/pr63300-const-volatile.c
  bd4a9885fb6107771b347577a3a69af9  gcc/testsuite/gcc.dg/guality/pr67192.c
  6f9f612c16ed980a7a97f6d09a05b6e1  gcc/testsuite/gcc.dg/guality/pr68037-1.c
  db1720caaff79a0684d94be88f9e0d69  gcc/testsuite/gcc.dg/guality/pr68037-2.c
  28ee863461f68a968dc0f6c489f4f0d0  gcc/testsuite/gcc.dg/guality/pr68037-3.c
! ee123f55fadeaf992f4ebf05e7e57381  gcc/testsuite/gcc.dg/guality/pr68860-1.c
! 3918f941799e00b43e4a2f83f2cc6b8c  gcc/testsuite/gcc.dg/guality/pr68860-2.c
  6ba30facaf57fd44c7a0dd23f5adda03  gcc/testsuite/gcc.dg/guality/pr69244.c
  d92b11494bb3457d1bb8ddfc99caec73  gcc/testsuite/gcc.dg/guality/pr69947.c
  a7fd762dc34522882305feff890fdc31  gcc/testsuite/gcc.dg/guality/pr78726.c
*************** a7fd762dc34522882305feff890fdc31  gcc/te
*** 38098,38113 ****
  2ff17be517e2e99373d1d8c99a037988  gcc/testsuite/gcc.dg/guality/pr89528.c
  3982323a5890288ffe96205b000ddfdc  gcc/testsuite/gcc.dg/guality/pr89892.c
  7702e4658c4631a9750ff038b36d4957  gcc/testsuite/gcc.dg/guality/pr89905.c
! 1ab517a08a8a5eb9faa7119d86053555  gcc/testsuite/gcc.dg/guality/pr90074.c
  a6784dd514ea635dd749972057296862  gcc/testsuite/gcc.dg/guality/pr90131.c
! 0b685ef87ae28820211d55fb7f51b104  gcc/testsuite/gcc.dg/guality/pr90716.c
  c9c3c711c2fb8ac1a0051b259a2d0a19  gcc/testsuite/gcc.dg/guality/pr95343.c
  347dd976fda7a8d33374697df5c9ab7b  gcc/testsuite/gcc.dg/guality/pr98219-1.c
  1879e4eac130703154f9f4c54d4eb843  gcc/testsuite/gcc.dg/guality/pr98219-2.c
  9102efe5e2518fc06add3b4152dbbf46  gcc/testsuite/gcc.dg/guality/prevent-optimization.h
  c0d9571f415055f61c0ecd1bd0b82a7f  gcc/testsuite/gcc.dg/guality/restrict.c
  ed974f3f5302f2126afc51c7c8a44af0  gcc/testsuite/gcc.dg/guality/rotatetest.c
! f136e12a2ce5ed2d418733291bca619a  gcc/testsuite/gcc.dg/guality/sra-1.c
  d355cdc2d7159885b7e76d2bfa1524ae  gcc/testsuite/gcc.dg/guality/vla-1.c
  dbf324da02b522e018f28aa8802538b7  gcc/testsuite/gcc.dg/guality/vla-2.c
  159f05fd30f2600345ae500afd392114  gcc/testsuite/gcc.dg/guality/zero-length-array.c
--- 39709,39724 ----
  2ff17be517e2e99373d1d8c99a037988  gcc/testsuite/gcc.dg/guality/pr89528.c
  3982323a5890288ffe96205b000ddfdc  gcc/testsuite/gcc.dg/guality/pr89892.c
  7702e4658c4631a9750ff038b36d4957  gcc/testsuite/gcc.dg/guality/pr89905.c
! d5dae42aca637f48ee5182e0d986948a  gcc/testsuite/gcc.dg/guality/pr90074.c
  a6784dd514ea635dd749972057296862  gcc/testsuite/gcc.dg/guality/pr90131.c
! 1d5b03c8ef39191d87de82d1c0fbfd69  gcc/testsuite/gcc.dg/guality/pr90716.c
  c9c3c711c2fb8ac1a0051b259a2d0a19  gcc/testsuite/gcc.dg/guality/pr95343.c
  347dd976fda7a8d33374697df5c9ab7b  gcc/testsuite/gcc.dg/guality/pr98219-1.c
  1879e4eac130703154f9f4c54d4eb843  gcc/testsuite/gcc.dg/guality/pr98219-2.c
  9102efe5e2518fc06add3b4152dbbf46  gcc/testsuite/gcc.dg/guality/prevent-optimization.h
  c0d9571f415055f61c0ecd1bd0b82a7f  gcc/testsuite/gcc.dg/guality/restrict.c
  ed974f3f5302f2126afc51c7c8a44af0  gcc/testsuite/gcc.dg/guality/rotatetest.c
! 65d4a3a66af0611bd48a85e90bba1df7  gcc/testsuite/gcc.dg/guality/sra-1.c
  d355cdc2d7159885b7e76d2bfa1524ae  gcc/testsuite/gcc.dg/guality/vla-1.c
  dbf324da02b522e018f28aa8802538b7  gcc/testsuite/gcc.dg/guality/vla-2.c
  159f05fd30f2600345ae500afd392114  gcc/testsuite/gcc.dg/guality/zero-length-array.c
*************** beabf14243b2b65800f0733144ef725e  gcc/te
*** 38123,38129 ****
  dc12526b2575b25bbb0263164484aeb3  gcc/testsuite/gcc.dg/hoist-register-pressure-1.c
  0df11bb9dd20d8cf406324e2baa18d83  gcc/testsuite/gcc.dg/hoist-register-pressure-2.c
  dd0c3d86be7753351dad89d50055a01e  gcc/testsuite/gcc.dg/hoist-register-pressure-3.c
! 69b33ffde92e3a08b238cf0389cbae8f  gcc/testsuite/gcc.dg/hwasan/hwasan.exp
  f20946bfbddc67e74cf619bd02e31549  gcc/testsuite/gcc.dg/hwasan/nested-functions-0.c
  36c11146134a4d86c84c359d41e52a7c  gcc/testsuite/gcc.dg/hwasan/nested-functions-1.c
  a5a7f8d29428537e3a2276c6511f420c  gcc/testsuite/gcc.dg/hwasan/nested-functions-2.c
--- 39734,39740 ----
  dc12526b2575b25bbb0263164484aeb3  gcc/testsuite/gcc.dg/hoist-register-pressure-1.c
  0df11bb9dd20d8cf406324e2baa18d83  gcc/testsuite/gcc.dg/hoist-register-pressure-2.c
  dd0c3d86be7753351dad89d50055a01e  gcc/testsuite/gcc.dg/hoist-register-pressure-3.c
! a7a1804852ebba092188ebeca22e45e0  gcc/testsuite/gcc.dg/hwasan/hwasan.exp
  f20946bfbddc67e74cf619bd02e31549  gcc/testsuite/gcc.dg/hwasan/nested-functions-0.c
  36c11146134a4d86c84c359d41e52a7c  gcc/testsuite/gcc.dg/hwasan/nested-functions-1.c
  a5a7f8d29428537e3a2276c6511f420c  gcc/testsuite/gcc.dg/hwasan/nested-functions-2.c
*************** f46dce055fca6bcb88a60d11a0bb710b  gcc/te
*** 38145,38151 ****
  3fcd24000493dccbffcab8d7f571db16  gcc/testsuite/gcc.dg/ifcvt-1.c
  788cdc139607df186471194c57393d9b  gcc/testsuite/gcc.dg/ifcvt-2.c
  1406d8ef80fc3e9a51abb05637775214  gcc/testsuite/gcc.dg/ifcvt-3.c
! 2cf8d8adc52e9522b8029ae17e5a1dd6  gcc/testsuite/gcc.dg/ifcvt-4.c
  851af7bdf70bdcebc1bbfe12c989a445  gcc/testsuite/gcc.dg/ifcvt-5.c
  18c54e879b05c8aed2d3ad8ec198fe6d  gcc/testsuite/gcc.dg/ifcvt-fabs-1.c
  9a6101d4463140bd764616fe8d813f87  gcc/testsuite/gcc.dg/ifelse-1.c
--- 39756,39762 ----
  3fcd24000493dccbffcab8d7f571db16  gcc/testsuite/gcc.dg/ifcvt-1.c
  788cdc139607df186471194c57393d9b  gcc/testsuite/gcc.dg/ifcvt-2.c
  1406d8ef80fc3e9a51abb05637775214  gcc/testsuite/gcc.dg/ifcvt-3.c
! db4dd0756dd28b01407e57f26fae236c  gcc/testsuite/gcc.dg/ifcvt-4.c
  851af7bdf70bdcebc1bbfe12c989a445  gcc/testsuite/gcc.dg/ifcvt-5.c
  18c54e879b05c8aed2d3ad8ec198fe6d  gcc/testsuite/gcc.dg/ifcvt-fabs-1.c
  9a6101d4463140bd764616fe8d813f87  gcc/testsuite/gcc.dg/ifelse-1.c
*************** a71e92846bd82c2874c9f530426a281d  gcc/te
*** 38164,38169 ****
--- 39775,39781 ----
  5d47eda03517b91276c1eeb0c4ee983d  gcc/testsuite/gcc.dg/init-bad-7.c
  39442208547e17b3f7d07ea577e8469d  gcc/testsuite/gcc.dg/init-bad-8.c
  1441a104797d89a001ddeeb4e7ac0396  gcc/testsuite/gcc.dg/init-bad-9.c
+ e16a497e999b061225ac918e4db3dccf  gcc/testsuite/gcc.dg/init-compare-1.c
  68e3a2449e9e301b5cc216c65cec9c8e  gcc/testsuite/gcc.dg/init-desig-obs-1.c
  efed4766878640e3953cf4a8272fe4bf  gcc/testsuite/gcc.dg/init-desig-obs-2.c
  1f853186f0068c8e9eebf3080a53da44  gcc/testsuite/gcc.dg/init-desig-obs-3.c
*************** efed4766878640e3953cf4a8272fe4bf  gcc/te
*** 38172,38177 ****
--- 39784,39790 ----
  90817e9557235af860d367897aafa042  gcc/testsuite/gcc.dg/init-empty-3.c
  22b16e07a96d1fc14440515466c26af1  gcc/testsuite/gcc.dg/init-excess-1.c
  e469f076692f924b2e1d46714a1056b3  gcc/testsuite/gcc.dg/init-excess-2.c
+ 4fd4e28b1e297058e77acc0f0a8225fb  gcc/testsuite/gcc.dg/init-rounding-math-1.c
  4e1a8c3a4cee0ecd12863946cb8e2c1b  gcc/testsuite/gcc.dg/init-string-1.c
  8207f30a525d46a59c52261291258117  gcc/testsuite/gcc.dg/init-string-2.c
  43af544ffb40a8fa3ed64d9059b409dc  gcc/testsuite/gcc.dg/init-string-3.c
*************** dbb9508e584dea250f29a4f07a0c7ada  gcc/te
*** 38259,38266 ****
  9bb0a2b102b0a468a762e09f797097d2  gcc/testsuite/gcc.dg/ipa/inline-5.c
  77b0b740de49bbf357d4e1d97ac0d440  gcc/testsuite/gcc.dg/ipa/inline-6.c
  49ad75a8f9454fd0d593fc64789c5490  gcc/testsuite/gcc.dg/ipa/inline-7.c
! c10e8064c3519b7dca77bba3be47527d  gcc/testsuite/gcc.dg/ipa/inline-8.c
! 162f5821923c14494c794133a8ba48ef  gcc/testsuite/gcc.dg/ipa/inline-9.c
  ecd8ef7af1e453fe86acc39a6f46ed5e  gcc/testsuite/gcc.dg/ipa/inlinehint-1.c
  c67f7d13d068efa64db24e8e8dc7a1f8  gcc/testsuite/gcc.dg/ipa/inlinehint-2.c
  986d05677bd9d6899662c3d7abcc4d90  gcc/testsuite/gcc.dg/ipa/inlinehint-3.c
--- 39872,39880 ----
  9bb0a2b102b0a468a762e09f797097d2  gcc/testsuite/gcc.dg/ipa/inline-5.c
  77b0b740de49bbf357d4e1d97ac0d440  gcc/testsuite/gcc.dg/ipa/inline-6.c
  49ad75a8f9454fd0d593fc64789c5490  gcc/testsuite/gcc.dg/ipa/inline-7.c
! be1aaa4f1e7c9f717b85701f5fd66480  gcc/testsuite/gcc.dg/ipa/inline-8.c
! 7710c6b333cea0338713aa8b0dfd967f  gcc/testsuite/gcc.dg/ipa/inline-9.c
! fd39075546dfee71e54b5b24b2627dde  gcc/testsuite/gcc.dg/ipa/inline10.c
  ecd8ef7af1e453fe86acc39a6f46ed5e  gcc/testsuite/gcc.dg/ipa/inlinehint-1.c
  c67f7d13d068efa64db24e8e8dc7a1f8  gcc/testsuite/gcc.dg/ipa/inlinehint-2.c
  986d05677bd9d6899662c3d7abcc4d90  gcc/testsuite/gcc.dg/ipa/inlinehint-3.c
*************** f18e2b83422d97d0681e4e9f878b894f  gcc/te
*** 38340,38346 ****
  441ffb1f07bb7afe89ac90ca116d65fd  gcc/testsuite/gcc.dg/ipa/ipa-pta-7.c
  a174f70c19f257c6429f70c5c49a0481  gcc/testsuite/gcc.dg/ipa/ipa-pta-8.c
  62f8de7dbeb66432037449dc1714dace  gcc/testsuite/gcc.dg/ipa/ipa-pta-9.c
! 6f32cb258d9051003957aa96907dc1f0  gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c
  3f2ea636db674fe969911731f3d03b4f  gcc/testsuite/gcc.dg/ipa/ipa-sra-10.c
  9408719454e13143f40c88f342a71f5b  gcc/testsuite/gcc.dg/ipa/ipa-sra-11.c
  a890fd9a6913b8021b0045ab0551aa06  gcc/testsuite/gcc.dg/ipa/ipa-sra-12.c
--- 39954,39960 ----
  441ffb1f07bb7afe89ac90ca116d65fd  gcc/testsuite/gcc.dg/ipa/ipa-pta-7.c
  a174f70c19f257c6429f70c5c49a0481  gcc/testsuite/gcc.dg/ipa/ipa-pta-8.c
  62f8de7dbeb66432037449dc1714dace  gcc/testsuite/gcc.dg/ipa/ipa-pta-9.c
! c7d1bd33095eeb19344100843b166016  gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c
  3f2ea636db674fe969911731f3d03b4f  gcc/testsuite/gcc.dg/ipa/ipa-sra-10.c
  9408719454e13143f40c88f342a71f5b  gcc/testsuite/gcc.dg/ipa/ipa-sra-11.c
  a890fd9a6913b8021b0045ab0551aa06  gcc/testsuite/gcc.dg/ipa/ipa-sra-12.c
*************** edc48cb808c71524ba9130fa7b884036  gcc/te
*** 38354,38366 ****
  aecb4d443c0e36e7aeae05f1c05bb7e7  gcc/testsuite/gcc.dg/ipa/ipa-sra-20.c
  9d91845c13739c984e3a0bf0f033475e  gcc/testsuite/gcc.dg/ipa/ipa-sra-21.c
  c4dcb24e809d2cb67d92a9c144ae1d96  gcc/testsuite/gcc.dg/ipa/ipa-sra-22.c
  97395f127f5222283afef7a146b9bb7c  gcc/testsuite/gcc.dg/ipa/ipa-sra-3.c
! dd4145a73e33eefafd461f1db2b72973  gcc/testsuite/gcc.dg/ipa/ipa-sra-4.c
  6ef7d3bb5d644ec45ca8db604c29cbb0  gcc/testsuite/gcc.dg/ipa/ipa-sra-5.c
  f389ed7606a4bab674d66dc4dcbd5533  gcc/testsuite/gcc.dg/ipa/ipa-sra-7.c
  a150c8ee6054d4be6013ea5d81d3f7d8  gcc/testsuite/gcc.dg/ipa/ipa-sra-8.c
  bb00c0c2b31f210548ae62b1328be368  gcc/testsuite/gcc.dg/ipa/ipa-sra-9.c
! 559b374a5ec9e47efe037196a06fd246  gcc/testsuite/gcc.dg/ipa/ipa.exp
  be5489532ad8117e567e1ea5c8ad4b6a  gcc/testsuite/gcc.dg/ipa/ipacost-1.c
  a1e98f91fdb742af3e542b201d095fcd  gcc/testsuite/gcc.dg/ipa/ipacost-2.c
  cec9083b7567e1f82d50440e7631e86f  gcc/testsuite/gcc.dg/ipa/ipcp-1.c
--- 39968,39983 ----
  aecb4d443c0e36e7aeae05f1c05bb7e7  gcc/testsuite/gcc.dg/ipa/ipa-sra-20.c
  9d91845c13739c984e3a0bf0f033475e  gcc/testsuite/gcc.dg/ipa/ipa-sra-21.c
  c4dcb24e809d2cb67d92a9c144ae1d96  gcc/testsuite/gcc.dg/ipa/ipa-sra-22.c
+ b1d7fcbd12e91e9264c24f15d1e11b27  gcc/testsuite/gcc.dg/ipa/ipa-sra-23.c
+ 793244d49a25620244973c2b526e0833  gcc/testsuite/gcc.dg/ipa/ipa-sra-24.c
  97395f127f5222283afef7a146b9bb7c  gcc/testsuite/gcc.dg/ipa/ipa-sra-3.c
! 8f778cd0ed59258e5860e55940de2881  gcc/testsuite/gcc.dg/ipa/ipa-sra-4.c
  6ef7d3bb5d644ec45ca8db604c29cbb0  gcc/testsuite/gcc.dg/ipa/ipa-sra-5.c
  f389ed7606a4bab674d66dc4dcbd5533  gcc/testsuite/gcc.dg/ipa/ipa-sra-7.c
  a150c8ee6054d4be6013ea5d81d3f7d8  gcc/testsuite/gcc.dg/ipa/ipa-sra-8.c
  bb00c0c2b31f210548ae62b1328be368  gcc/testsuite/gcc.dg/ipa/ipa-sra-9.c
! fb762aeae2f1c2476ca0c285f1bf9a37  gcc/testsuite/gcc.dg/ipa/ipa-sra-ret-nonull.c
! 3c5d76aa98d76baf5396765a738c59bf  gcc/testsuite/gcc.dg/ipa/ipa.exp
  be5489532ad8117e567e1ea5c8ad4b6a  gcc/testsuite/gcc.dg/ipa/ipacost-1.c
  a1e98f91fdb742af3e542b201d095fcd  gcc/testsuite/gcc.dg/ipa/ipacost-2.c
  cec9083b7567e1f82d50440e7631e86f  gcc/testsuite/gcc.dg/ipa/ipcp-1.c
*************** b0e6976d3728dfc604f80cfaf17a5150  gcc/te
*** 38391,38404 ****
  bbdc28908094ef1ce181532afaf1b2dc  gcc/testsuite/gcc.dg/ipa/ipcp-ii-1.c
  7e51de4c9b7b88e115e6f81d3b98eab5  gcc/testsuite/gcc.dg/ipa/ipcp-loophint-1.c
  69364376b4034b0e22099f8f23273a79  gcc/testsuite/gcc.dg/ipa/ipcp-self-recursion-1.c
! 08e3fcc3d014c7113388adead626f718  gcc/testsuite/gcc.dg/ipa/modref-1.c
  d183c6f1cbbc46bd9c8e5df2bbcd8795  gcc/testsuite/gcc.dg/ipa/modref-2.c
  80f4453150e9ddcd8976703b7c6ee1f6  gcc/testsuite/gcc.dg/ipa/noclone-1.c
  2f6a0c132f87682f7a7a3d21a8e51243  gcc/testsuite/gcc.dg/ipa/pr100600.c
  5c69058d29f4a7ea7e25487222d82209  gcc/testsuite/gcc.dg/ipa/pr101066.c
  303b00685d04afefddddce7106c02b2d  gcc/testsuite/gcc.dg/ipa/pr102714.c
  07a283c50d826e50a31e66247a684841  gcc/testsuite/gcc.dg/ipa/pr103083-1.c
  e738f44ee66719b5f944fb952895f40e  gcc/testsuite/gcc.dg/ipa/pr103083-2.c
  40bd41302666d56c4edf7330db97920e  gcc/testsuite/gcc.dg/ipa/pr42706.c
  e4887053c792f4f78b03804c148839ce  gcc/testsuite/gcc.dg/ipa/pr45644.c
  6e1b4f2c5d0c0d768778da8e3b7df828  gcc/testsuite/gcc.dg/ipa/pr48195.c
--- 40008,40031 ----
  bbdc28908094ef1ce181532afaf1b2dc  gcc/testsuite/gcc.dg/ipa/ipcp-ii-1.c
  7e51de4c9b7b88e115e6f81d3b98eab5  gcc/testsuite/gcc.dg/ipa/ipcp-loophint-1.c
  69364376b4034b0e22099f8f23273a79  gcc/testsuite/gcc.dg/ipa/ipcp-self-recursion-1.c
! a6cddd3e3979aa3c54f4319f60df295b  gcc/testsuite/gcc.dg/ipa/modref-1.c
  d183c6f1cbbc46bd9c8e5df2bbcd8795  gcc/testsuite/gcc.dg/ipa/modref-2.c
+ e3225f0884da3b36b6309c89ccd143b7  gcc/testsuite/gcc.dg/ipa/modref-3.c
  80f4453150e9ddcd8976703b7c6ee1f6  gcc/testsuite/gcc.dg/ipa/noclone-1.c
  2f6a0c132f87682f7a7a3d21a8e51243  gcc/testsuite/gcc.dg/ipa/pr100600.c
  5c69058d29f4a7ea7e25487222d82209  gcc/testsuite/gcc.dg/ipa/pr101066.c
+ c998e742629d928b1525c8a15a0d2073  gcc/testsuite/gcc.dg/ipa/pr102513.c
  303b00685d04afefddddce7106c02b2d  gcc/testsuite/gcc.dg/ipa/pr102714.c
  07a283c50d826e50a31e66247a684841  gcc/testsuite/gcc.dg/ipa/pr103083-1.c
  e738f44ee66719b5f944fb952895f40e  gcc/testsuite/gcc.dg/ipa/pr103083-2.c
+ 8ceaf6a6cf2a2ddfb58b64925fd8b061  gcc/testsuite/gcc.dg/ipa/pr103107.c
+ 0fec0d44163485df995fde55f2f08fd7  gcc/testsuite/gcc.dg/ipa/pr103132.c
+ 8bcbcc11b8661989381b538171b0fa8f  gcc/testsuite/gcc.dg/ipa/pr103227-1.c
+ e9a270cc0fe29965bd5d3f98375ad921  gcc/testsuite/gcc.dg/ipa/pr103227-2.c
+ 6f529fc4669a417a43a300ac14ccd317  gcc/testsuite/gcc.dg/ipa/pr103227-3.c
+ 3d61a501d84f658a0c31179e41f0686a  gcc/testsuite/gcc.dg/ipa/pr103601.c
+ 0b336f1d0f57e04aaa45b68e72e0bfec  gcc/testsuite/gcc.dg/ipa/pr104813.c
+ 99587579302ee66a706ecb63eca8d73f  gcc/testsuite/gcc.dg/ipa/pr105160.c
  40bd41302666d56c4edf7330db97920e  gcc/testsuite/gcc.dg/ipa/pr42706.c
  e4887053c792f4f78b03804c148839ce  gcc/testsuite/gcc.dg/ipa/pr45644.c
  6e1b4f2c5d0c0d768778da8e3b7df828  gcc/testsuite/gcc.dg/ipa/pr48195.c
*************** da3f79eb7db9e09d21b9102b8078d83c  gcc/te
*** 38451,38456 ****
--- 40078,40084 ----
  ba23b80ec5972171f5efaac4c636f710  gcc/testsuite/gcc.dg/ipa/pr92529.c
  08e6903d460435a7c6e7ac4d919a7d09  gcc/testsuite/gcc.dg/ipa/pr92794.c
  34ee4483371757cbb8f65ffc2b094df4  gcc/testsuite/gcc.dg/ipa/pr92883.c
+ 7a59cfd04921f4cc50c9c2ceb397f75a  gcc/testsuite/gcc.dg/ipa/pr93385.c
  772d702e6cd73999ec8ed7e6d0d777c7  gcc/testsuite/gcc.dg/ipa/pr93583.c
  dea785e90614c77a5c6b7c8662a00a12  gcc/testsuite/gcc.dg/ipa/pr93707.c
  7fff2b8ee43871a32b405561db26ae3c  gcc/testsuite/gcc.dg/ipa/pr93763.c
*************** e402d8a4110cdc5175efd8b02599244a  gcc/te
*** 38479,38484 ****
--- 40107,40117 ----
  df7efbca91e6daf7ca0015336c194c9e  gcc/testsuite/gcc.dg/ipa/remref-1b.c
  201a0180936bb9bd03922bc02d69174d  gcc/testsuite/gcc.dg/ipa/remref-2a.c
  fcc7dce8774036ba93e1fe9211b4421d  gcc/testsuite/gcc.dg/ipa/remref-2b.c
+ 7297c2405607580636f5b008014d471d  gcc/testsuite/gcc.dg/ipa/remref-3.c
+ 89497478092a2754276281e01173b10a  gcc/testsuite/gcc.dg/ipa/remref-4.c
+ 4adb6e96b3bcb4dd3ecb1702ca5258d2  gcc/testsuite/gcc.dg/ipa/remref-5.c
+ 2f98d70b4613eb7789fd16ce01458a0a  gcc/testsuite/gcc.dg/ipa/remref-6.c
+ a4676419cc3a331d3b9012027515cd35  gcc/testsuite/gcc.dg/ipa/remref-7.c
  a3830a9933b209d3afe2e2abf3c4f86c  gcc/testsuite/gcc.dg/ipa/symver1.c
  dc629ef9342acd1db93ed124df2cb8ca  gcc/testsuite/gcc.dg/ipa/vrp1.c
  7528bdadffdc3cc715527935504b1e45  gcc/testsuite/gcc.dg/ipa/vrp2.c
*************** e413f0f7240a3d4dd2c99035203b33f4  gcc/te
*** 38511,38517 ****
  b96df03c34f20761b8a66808dfc63a63  gcc/testsuite/gcc.dg/live-patching-2.c
  5832d6d09db6f71495d0171b2f941e50  gcc/testsuite/gcc.dg/live-patching-3.c
  619b58721598a979e2fb6ffb5a4b8a4a  gcc/testsuite/gcc.dg/live-patching-4.c
! a2385eedd735afde625296ec7c33f79d  gcc/testsuite/gcc.dg/local1.c
  8c594498180fabb74acf611568d4f67e  gcc/testsuite/gcc.dg/localalias-2.c
  ee0c3ba150290bda1153f3076c3303b4  gcc/testsuite/gcc.dg/localalias.c
  0719df2af362b74f64d07659e78dbc9d  gcc/testsuite/gcc.dg/long-long-compare-1.c
--- 40144,40150 ----
  b96df03c34f20761b8a66808dfc63a63  gcc/testsuite/gcc.dg/live-patching-2.c
  5832d6d09db6f71495d0171b2f941e50  gcc/testsuite/gcc.dg/live-patching-3.c
  619b58721598a979e2fb6ffb5a4b8a4a  gcc/testsuite/gcc.dg/live-patching-4.c
! 209fdf5744b573204a2de0155546afc5  gcc/testsuite/gcc.dg/local1.c
  8c594498180fabb74acf611568d4f67e  gcc/testsuite/gcc.dg/localalias-2.c
  ee0c3ba150290bda1153f3076c3303b4  gcc/testsuite/gcc.dg/localalias.c
  0719df2af362b74f64d07659e78dbc9d  gcc/testsuite/gcc.dg/long-long-compare-1.c
*************** bdd0de0807674c3312a2a9e4ff914e19  gcc/te
*** 38525,38539 ****
  a73ede53a12274bacc5436575ebb14b9  gcc/testsuite/gcc.dg/loop-5.c
  46248b6e3d3fc518ebd99c80a4e3053d  gcc/testsuite/gcc.dg/loop-6.c
  81181e904e3cc9185df8b97ccf49c4fe  gcc/testsuite/gcc.dg/loop-7.c
! 54b70d4a1a7fe07a4e211289374ee108  gcc/testsuite/gcc.dg/loop-8.c
  b9d2d63f3863f74c5f1ce87d23debfe4  gcc/testsuite/gcc.dg/loop-9.c
  efe590d29d570b6d17bba7b2c21339db  gcc/testsuite/gcc.dg/loop-invariant.c
  77d01b87345e303fc40f590c4f7e7785  gcc/testsuite/gcc.dg/loop-split.c
! f0e629d24084335d828673588da8f712  gcc/testsuite/gcc.dg/loop-unswitch-1.c
! 5ed66fb5194e25fa3840d4db52f10b02  gcc/testsuite/gcc.dg/loop-unswitch-2.c
! 5611e658293cef38c2f36b45c0ca3c60  gcc/testsuite/gcc.dg/loop-unswitch-3.c
! d8214078fcdabfbd9a9a03bbb8d148b6  gcc/testsuite/gcc.dg/loop-unswitch-4.c
! 2d39752c79b0c0ea7239fce439c7994a  gcc/testsuite/gcc.dg/loop-unswitch-5.c
  feb7653457a5455ad23c2e8cbfda5890  gcc/testsuite/gcc.dg/loop-versioning-1.c
  bd95b8dcfe2066017e9ab3bf65e6e8ab  gcc/testsuite/gcc.dg/loop-versioning-10.c
  698864ba149cf54cee29fc9f1a7b4a41  gcc/testsuite/gcc.dg/loop-versioning-11.c
--- 40158,40174 ----
  a73ede53a12274bacc5436575ebb14b9  gcc/testsuite/gcc.dg/loop-5.c
  46248b6e3d3fc518ebd99c80a4e3053d  gcc/testsuite/gcc.dg/loop-6.c
  81181e904e3cc9185df8b97ccf49c4fe  gcc/testsuite/gcc.dg/loop-7.c
! 606993d35c5a762765339f6971288706  gcc/testsuite/gcc.dg/loop-8.c
  b9d2d63f3863f74c5f1ce87d23debfe4  gcc/testsuite/gcc.dg/loop-9.c
+ 632fe44b5eb079c1c706c76c1ac9a54b  gcc/testsuite/gcc.dg/loop-invariant-2.c
  efe590d29d570b6d17bba7b2c21339db  gcc/testsuite/gcc.dg/loop-invariant.c
  77d01b87345e303fc40f590c4f7e7785  gcc/testsuite/gcc.dg/loop-split.c
! 5737e9e5fee11e0032e40b36d99dcd09  gcc/testsuite/gcc.dg/loop-unswitch-1.c
! 44b490988cc0f0544b4081ca49ca2822  gcc/testsuite/gcc.dg/loop-unswitch-2.c
! ff181fa6e4548d47aa84367f90ad303f  gcc/testsuite/gcc.dg/loop-unswitch-3.c
! f819e34fb5a7f733d4b5bc72ef4a1cf9  gcc/testsuite/gcc.dg/loop-unswitch-4.c
! 29a5cfbdfcc557e25e137def28bc6d7a  gcc/testsuite/gcc.dg/loop-unswitch-5.c
! 62fc4b433647b95aa69e72baa0688815  gcc/testsuite/gcc.dg/loop-unswitch-6.c
  feb7653457a5455ad23c2e8cbfda5890  gcc/testsuite/gcc.dg/loop-versioning-1.c
  bd95b8dcfe2066017e9ab3bf65e6e8ab  gcc/testsuite/gcc.dg/loop-versioning-10.c
  698864ba149cf54cee29fc9f1a7b4a41  gcc/testsuite/gcc.dg/loop-versioning-11.c
*************** e81d04faee8838d4f176f04b73de78ae  gcc/te
*** 38548,38554 ****
  77ef31b80f911042dfae8b5bbf1a69ae  gcc/testsuite/gcc.dg/loop-versioning-7.c
  25e4f6b758f23925ea1c00248f0b155f  gcc/testsuite/gcc.dg/loop-versioning-8.c
  715823161848b36ee4015e09f60c5eaf  gcc/testsuite/gcc.dg/loop-versioning-9.c
! 5b14d6189e3c3f05868153bd1cb5363b  gcc/testsuite/gcc.dg/lower-subreg-1.c
  67693155148765dffe43b30f027cea68  gcc/testsuite/gcc.dg/lsr-div1.c
  678fb66feed3ab9d6e765b1d6810b843  gcc/testsuite/gcc.dg/lto/20080908_0.c
  c94f785256f1b68d319dcd3c9cff6a07  gcc/testsuite/gcc.dg/lto/20080917_0.c
--- 40183,40189 ----
  77ef31b80f911042dfae8b5bbf1a69ae  gcc/testsuite/gcc.dg/loop-versioning-7.c
  25e4f6b758f23925ea1c00248f0b155f  gcc/testsuite/gcc.dg/loop-versioning-8.c
  715823161848b36ee4015e09f60c5eaf  gcc/testsuite/gcc.dg/loop-versioning-9.c
! 8106ec4cb93954a65ab1ade89c954f91  gcc/testsuite/gcc.dg/lower-subreg-1.c
  67693155148765dffe43b30f027cea68  gcc/testsuite/gcc.dg/lsr-div1.c
  678fb66feed3ab9d6e765b1d6810b843  gcc/testsuite/gcc.dg/lto/20080908_0.c
  c94f785256f1b68d319dcd3c9cff6a07  gcc/testsuite/gcc.dg/lto/20080917_0.c
*************** b15b7b723d94f1645bb6c6addebb638d  gcc/te
*** 38616,38622 ****
  9789bbd44bab2afd029ee0d9f66c3dd4  gcc/testsuite/gcc.dg/lto/20090313_0.c
  cce94457b548515e70bc69826b9eed66  gcc/testsuite/gcc.dg/lto/20090706-1_0.c
  b23460fadf1d6a3aa61b293f3daff469  gcc/testsuite/gcc.dg/lto/20090706-2_0.c
! 5151ff740dadd148051bef2cef69faeb  gcc/testsuite/gcc.dg/lto/20090717_0.c
  cdb9783efad3e0294e06dca875547d79  gcc/testsuite/gcc.dg/lto/20090717_1.c
  926e9e8864aa200dcc0ce61675f1008f  gcc/testsuite/gcc.dg/lto/20090729_0.c
  c5df0cb2c2204cfe14a4025ee26ecfb8  gcc/testsuite/gcc.dg/lto/20090729_1.c
--- 40251,40257 ----
  9789bbd44bab2afd029ee0d9f66c3dd4  gcc/testsuite/gcc.dg/lto/20090313_0.c
  cce94457b548515e70bc69826b9eed66  gcc/testsuite/gcc.dg/lto/20090706-1_0.c
  b23460fadf1d6a3aa61b293f3daff469  gcc/testsuite/gcc.dg/lto/20090706-2_0.c
! 0e70ca9c73f204af6a8d769b24013ab8  gcc/testsuite/gcc.dg/lto/20090717_0.c
  cdb9783efad3e0294e06dca875547d79  gcc/testsuite/gcc.dg/lto/20090717_1.c
  926e9e8864aa200dcc0ce61675f1008f  gcc/testsuite/gcc.dg/lto/20090729_0.c
  c5df0cb2c2204cfe14a4025ee26ecfb8  gcc/testsuite/gcc.dg/lto/20090729_1.c
*************** e22501e605edeaceeca043b437e49ba9  gcc/te
*** 38719,38733 ****
  5afe5712f0eec3e1317099cf354d0a38  gcc/testsuite/gcc.dg/lto/ipareference2_1.c
  744ef838cd191f7a2544697bf8f124dd  gcc/testsuite/gcc.dg/lto/ipareference_0.c
  798f96b8b3130da03f51bfae27df4189  gcc/testsuite/gcc.dg/lto/ipareference_1.c
! 9e284bd0509b1d06473326a217f20431  gcc/testsuite/gcc.dg/lto/lto.exp
  b9cc7cb6d7d65f984ee0a8985b8e0e6e  gcc/testsuite/gcc.dg/lto/materialize-1_0.c
  4c9f4a6440d7bd9fa3f564ee6b91b50c  gcc/testsuite/gcc.dg/lto/materialize-1_1.c
  ae3d0968e71a8445a5ea662452d0f5ce  gcc/testsuite/gcc.dg/lto/modref-1_0.c
  99c5a2a8670ef4b0b82cb919884648f5  gcc/testsuite/gcc.dg/lto/modref-1_1.c
  f98a566b3b2ff6733ed676024f2fb9f5  gcc/testsuite/gcc.dg/lto/modref-2_0.c
! 145df956c13695b4a6660704689918a4  gcc/testsuite/gcc.dg/lto/modref-3_0.c
  1eb5a5a9618f46e44dc9d6ee2a4c8bc4  gcc/testsuite/gcc.dg/lto/modref-3_1.c
! 60ed48f5681cb57ecd7f0534237beae1  gcc/testsuite/gcc.dg/lto/modref-4_0.c
  1eb5a5a9618f46e44dc9d6ee2a4c8bc4  gcc/testsuite/gcc.dg/lto/modref-4_1.c
  e1bd2be5006d2bb7a3b670af0868ffeb  gcc/testsuite/gcc.dg/lto/noreturn-1_0.c
  2472b5bc8466fe62188232d9fbcd9de6  gcc/testsuite/gcc.dg/lto/noreturn-1_1.c
--- 40354,40368 ----
  5afe5712f0eec3e1317099cf354d0a38  gcc/testsuite/gcc.dg/lto/ipareference2_1.c
  744ef838cd191f7a2544697bf8f124dd  gcc/testsuite/gcc.dg/lto/ipareference_0.c
  798f96b8b3130da03f51bfae27df4189  gcc/testsuite/gcc.dg/lto/ipareference_1.c
! 06f1a1d81b735ad053967fbe5c82ea4a  gcc/testsuite/gcc.dg/lto/lto.exp
  b9cc7cb6d7d65f984ee0a8985b8e0e6e  gcc/testsuite/gcc.dg/lto/materialize-1_0.c
  4c9f4a6440d7bd9fa3f564ee6b91b50c  gcc/testsuite/gcc.dg/lto/materialize-1_1.c
  ae3d0968e71a8445a5ea662452d0f5ce  gcc/testsuite/gcc.dg/lto/modref-1_0.c
  99c5a2a8670ef4b0b82cb919884648f5  gcc/testsuite/gcc.dg/lto/modref-1_1.c
  f98a566b3b2ff6733ed676024f2fb9f5  gcc/testsuite/gcc.dg/lto/modref-2_0.c
! a6de94e75077173343457ffe489d2c5e  gcc/testsuite/gcc.dg/lto/modref-3_0.c
  1eb5a5a9618f46e44dc9d6ee2a4c8bc4  gcc/testsuite/gcc.dg/lto/modref-3_1.c
! 2d9264f8917c432df21550864fbdc984  gcc/testsuite/gcc.dg/lto/modref-4_0.c
  1eb5a5a9618f46e44dc9d6ee2a4c8bc4  gcc/testsuite/gcc.dg/lto/modref-4_1.c
  e1bd2be5006d2bb7a3b670af0868ffeb  gcc/testsuite/gcc.dg/lto/noreturn-1_0.c
  2472b5bc8466fe62188232d9fbcd9de6  gcc/testsuite/gcc.dg/lto/noreturn-1_1.c
*************** e4aec3391bc7aed1a5d886edeb277407  gcc/te
*** 38737,38742 ****
--- 40372,40385 ----
  02d829cec4d5ff9723124841f79edca9  gcc/testsuite/gcc.dg/lto/pr101868_3.c
  54599eb36fac6d6bc3b48bfa2a679738  gcc/testsuite/gcc.dg/lto/pr101949_0.c
  eb5d2fc7242b611f019d43c7d00a7531  gcc/testsuite/gcc.dg/lto/pr101949_1.c
+ c5083fa5db41bd4c7c11961b730b9472  gcc/testsuite/gcc.dg/lto/pr102059-1_0.c
+ e254ea4dd511fb264193330088e171de  gcc/testsuite/gcc.dg/lto/pr102059-1_1.c
+ a52a041cc04e1c24d526aa70f0cc7105  gcc/testsuite/gcc.dg/lto/pr102059-1_2.c
+ b81512aa407aff2f251e1bedfee71bbc  gcc/testsuite/gcc.dg/lto/pr102059-2_0.c
+ 0d5d6497b63e9f6fb35d071f5d4af0b7  gcc/testsuite/gcc.dg/lto/pr102059-2_1.c
+ 6680011ab8774d457e562c95c7edbdde  gcc/testsuite/gcc.dg/lto/pr102059-2_2.c
+ fe0705b8881cddd35d729ad7e893213e  gcc/testsuite/gcc.dg/lto/pr103171_0.c
+ 2aa0e1e2d80203f72d32aa9f9b4cc175  gcc/testsuite/gcc.dg/lto/pr103171_1.c
  5192817b2492ca93ffadce3b4a5e4794  gcc/testsuite/gcc.dg/lto/pr27898_0.c
  c5f48897247dfaec60df4e32beffcd8e  gcc/testsuite/gcc.dg/lto/pr27898_1.c
  2ad724786bc4b555a7f31e8b3bf164b6  gcc/testsuite/gcc.dg/lto/pr28706_0.c
*************** f0cc31467a1c670b2da39f6277514bab  gcc/te
*** 38757,38762 ****
--- 40400,40406 ----
  957e327f63b137847986d2f4b832588e  gcc/testsuite/gcc.dg/lto/pr47259_1.c
  54e551daabafef19dff2d27e471c5a39  gcc/testsuite/gcc.dg/lto/pr47924_0.c
  783b00cf61b59ac61283d1315751dc5c  gcc/testsuite/gcc.dg/lto/pr48622_0.c
+ ca133eb45ca5807ac1ebf3a198de9306  gcc/testsuite/gcc.dg/lto/pr48622_1.c
  2fa784dc45cba9ef34bcc21e141f0a25  gcc/testsuite/gcc.dg/lto/pr50199_0.c
  626442299a26bfdc323c3151d4aa1295  gcc/testsuite/gcc.dg/lto/pr51572-1_0.c
  17ec4e902d17c5db06dbf5148d4d79c3  gcc/testsuite/gcc.dg/lto/pr52097_0.c
*************** a03a5109c087726181cf7cc2241d1a9e  gcc/te
*** 38854,38859 ****
--- 40498,40505 ----
  b993f9b2f252c1617164dd903ffe1c62  gcc/testsuite/gcc.dg/lto/pr99849_0.c
  260506c568e35bc49112021166edf8f2  gcc/testsuite/gcc.dg/lto/resolutions_0.c
  1084184a9b11a84eee39ef130211f70b  gcc/testsuite/gcc.dg/lto/save-temps_0.c
+ 09277fb3fb9fd7dd7a54fcf828e8db1c  gcc/testsuite/gcc.dg/lto/semantic-interposition-1_0.c
+ 4663728afa00dba163d6f19cda334606  gcc/testsuite/gcc.dg/lto/semantic-interposition-1_1.c
  46d188c0319bf02d664cc2c49c9df2ef  gcc/testsuite/gcc.dg/lto/simd-function_0.c
  831c2bc533633bee1df2a4c28ba2fbe9  gcc/testsuite/gcc.dg/lto/tag-1_0.c
  7144322c904b1f64c63a75626623d2f9  gcc/testsuite/gcc.dg/lto/tag-1_1.c
*************** ef60e5ad992554e817a42639054472bc  gcc/te
*** 38897,38903 ****
  d2e1206d26231777e76c9f21d67f4425  gcc/testsuite/gcc.dg/memcpy-3.c
  5499ece0538a867efb7141bf70324361  gcc/testsuite/gcc.dg/memcpy-4.c
  a41ae21b628c0476195ce6dac94a92e9  gcc/testsuite/gcc.dg/memcpy-5.c
! a8df618208e3feee442af78f7aba9a02  gcc/testsuite/gcc.dg/memcpy-6.c
  2e6979f3473f103c4c6ce0c0c0f8fd2d  gcc/testsuite/gcc.dg/memmove-1.c
  5224fb409821b04de2514e6f18e31023  gcc/testsuite/gcc.dg/memmove-2.c
  e8c4bdf333f001f5a197e7a3ad522e1d  gcc/testsuite/gcc.dg/memmove-3.c
--- 40543,40549 ----
  d2e1206d26231777e76c9f21d67f4425  gcc/testsuite/gcc.dg/memcpy-3.c
  5499ece0538a867efb7141bf70324361  gcc/testsuite/gcc.dg/memcpy-4.c
  a41ae21b628c0476195ce6dac94a92e9  gcc/testsuite/gcc.dg/memcpy-5.c
! 83ee9b3ae88b49791ab853275953d636  gcc/testsuite/gcc.dg/memcpy-6.c
  2e6979f3473f103c4c6ce0c0c0f8fd2d  gcc/testsuite/gcc.dg/memmove-1.c
  5224fb409821b04de2514e6f18e31023  gcc/testsuite/gcc.dg/memmove-2.c
  e8c4bdf333f001f5a197e7a3ad522e1d  gcc/testsuite/gcc.dg/memmove-3.c
*************** d984705518dd90d524e68a1fb5faf7e8  gcc/te
*** 38958,38963 ****
--- 40604,40611 ----
  d31a2c7221882133a103227d59fa42d3  gcc/testsuite/gcc.dg/no-math-errno-2.c
  7afdcb5cd845be3f23bb30669b9ed172  gcc/testsuite/gcc.dg/no-math-errno-3.c
  d47cf367b72e67703ed942516a4d7567  gcc/testsuite/gcc.dg/no-math-errno-4.c
+ d43628ede65db6ba898468f9e3e2646d  gcc/testsuite/gcc.dg/no-signed-zeros-1.c
+ dae26a01698972ae18025b898d5a20d7  gcc/testsuite/gcc.dg/no-signed-zeros-2.c
  ce4c34de4dfa5a13c4781f9411d56243  gcc/testsuite/gcc.dg/no-strict-overflow-1.c
  94daa25494d68754da018661791bec28  gcc/testsuite/gcc.dg/no-strict-overflow-2.c
  350f9cd3a4dfdb64fea6016fbf8ab901  gcc/testsuite/gcc.dg/no-strict-overflow-3.c
*************** a147f3e7709103de771c96fda2d5b9f5  gcc/te
*** 38966,38972 ****
--- 40614,40623 ----
  f6f749bfbd33a9e9e95102c823d14bb8  gcc/testsuite/gcc.dg/no-strict-overflow-6.c
  38efcc6f4ba9295a5561e449519b5c21  gcc/testsuite/gcc.dg/no-strict-overflow-7.c
  5a420286281e2790c2a3c0f4f6987137  gcc/testsuite/gcc.dg/no-strict-overflow-8.c
+ 2fadc668aca399402ad767f2527b6c3b  gcc/testsuite/gcc.dg/no-trapping-math-1.c
+ 43f035a28108bbf26ee8a8b10cc21d4c  gcc/testsuite/gcc.dg/no-trapping-math-2.c
  3f209578f6c6e9b7f7b3d81ccb8df4a7  gcc/testsuite/gcc.dg/no_profile_instrument_function-attr-1.c
+ 843fb1e258e755599bbf31e17f1c17cc  gcc/testsuite/gcc.dg/no_profile_instrument_function-attr-2.c
  4142b2322a75b23f47a3f63e7bf6f75f  gcc/testsuite/gcc.dg/nodfp-1.c
  7193a17ae405f52ff74ec32ff455a959  gcc/testsuite/gcc.dg/nofixed-point-1.c
  ec19a8b1730f75c32f41e4a1b24c99f8  gcc/testsuite/gcc.dg/nofixed-point-2.c
*************** b054d23fd7d868a509aeb363dc7e8ffc  gcc/te
*** 39021,39027 ****
  816b6759ae933f803099070549d0e06e  gcc/testsuite/gcc.dg/noncompile/invalid_asm.c
  67db74b19085ff950f0aaafaec250ef4  gcc/testsuite/gcc.dg/noncompile/label-1.c
  158d88cfb97dd38de0cb17ccc39f3d5e  gcc/testsuite/gcc.dg/noncompile/label-lineno-1.c
! 6c5909e27e6785c015eb6c3e68dde2c5  gcc/testsuite/gcc.dg/noncompile/noncompile.exp
  415c039abdab8437275df71102cc5113  gcc/testsuite/gcc.dg/noncompile/old-style-parm-1.c
  6ccdd7958d053743fbd68691650b1b61  gcc/testsuite/gcc.dg/noncompile/old-style-parm-2.c
  dc03b56a3d101a6001179c75ccbd6723  gcc/testsuite/gcc.dg/noncompile/old-style-parm-3.c
--- 40672,40678 ----
  816b6759ae933f803099070549d0e06e  gcc/testsuite/gcc.dg/noncompile/invalid_asm.c
  67db74b19085ff950f0aaafaec250ef4  gcc/testsuite/gcc.dg/noncompile/label-1.c
  158d88cfb97dd38de0cb17ccc39f3d5e  gcc/testsuite/gcc.dg/noncompile/label-lineno-1.c
! 055f5c49ff4ab6da01aa4d21e1971998  gcc/testsuite/gcc.dg/noncompile/noncompile.exp
  415c039abdab8437275df71102cc5113  gcc/testsuite/gcc.dg/noncompile/old-style-parm-1.c
  6ccdd7958d053743fbd68691650b1b61  gcc/testsuite/gcc.dg/noncompile/old-style-parm-2.c
  dc03b56a3d101a6001179c75ccbd6723  gcc/testsuite/gcc.dg/noncompile/old-style-parm-3.c
*************** e69d82c33002bde0bd49c51d4c9f759d  gcc/te
*** 39077,39097 ****
  0eea359c982a9d95bd326933d03fd9b3  gcc/testsuite/gcc.dg/nrv4.c
  dd2a56aa13124f0f1f70039b34eec9a0  gcc/testsuite/gcc.dg/nrv5.c
  fb2a64e28af210271512e32c8451c2f2  gcc/testsuite/gcc.dg/null-pointer-1.c
! 2d54756b4470458067e459ba80b73a10  gcc/testsuite/gcc.dg/old-style-asm-1.c
  918effa0793233e7089914d9eeb0c4e9  gcc/testsuite/gcc.dg/old-style-param-1.c
  10be65139df5ded9ef15f510eb2931c3  gcc/testsuite/gcc.dg/old-style-prom-1.c
  9d188d619e18f73aeccc6718f2c7b5f0  gcc/testsuite/gcc.dg/old-style-prom-2.c
  a4430e8a6755e6674402bd05861a1795  gcc/testsuite/gcc.dg/old-style-prom-3.c
  a0182c7350fe1a90fff285e2b2b1c85b  gcc/testsuite/gcc.dg/old-style-then-proto-1.c
! 9229783a7729cb3f6f4f0b077a88d856  gcc/testsuite/gcc.dg/optimize-bswapdi-1.c
! 55af7e911ccccfb767841b02434c6aad  gcc/testsuite/gcc.dg/optimize-bswapdi-2.c
  2411cd50c6b3a2f2c92ef4ec97287013  gcc/testsuite/gcc.dg/optimize-bswapdi-3.c
  9c8da7720e5bd21617b6c738c4cb4c1e  gcc/testsuite/gcc.dg/optimize-bswaphi-1.c
! 038457d7e3469ff3fd101b359915f68d  gcc/testsuite/gcc.dg/optimize-bswapsi-1.c
  d1c5f8043ad0d459a3903165dca712b5  gcc/testsuite/gcc.dg/optimize-bswapsi-2.c
! 6e2a2b7d058b4a5c08261e405918da3b  gcc/testsuite/gcc.dg/optimize-bswapsi-3.c
  bd8139d78717b2c59fb034414884e732  gcc/testsuite/gcc.dg/optimize-bswapsi-4.c
! 687cf12bcb23ab00b0bdb39c8293a196  gcc/testsuite/gcc.dg/optimize-bswapsi-5.c
  a8c315968907b6e4af7ba7ac664c3d4d  gcc/testsuite/gcc.dg/opts-1.c
  4d9c904a82fe597f0cd8af7c5de6e850  gcc/testsuite/gcc.dg/opts-2.c
  38a8c929ac7b34d42957355372ae18f5  gcc/testsuite/gcc.dg/opts-3.c
--- 40728,40750 ----
  0eea359c982a9d95bd326933d03fd9b3  gcc/testsuite/gcc.dg/nrv4.c
  dd2a56aa13124f0f1f70039b34eec9a0  gcc/testsuite/gcc.dg/nrv5.c
  fb2a64e28af210271512e32c8451c2f2  gcc/testsuite/gcc.dg/null-pointer-1.c
! 9702a3463e4d96dbc51a86c6caf18f2e  gcc/testsuite/gcc.dg/old-style-asm-1.c
  918effa0793233e7089914d9eeb0c4e9  gcc/testsuite/gcc.dg/old-style-param-1.c
  10be65139df5ded9ef15f510eb2931c3  gcc/testsuite/gcc.dg/old-style-prom-1.c
  9d188d619e18f73aeccc6718f2c7b5f0  gcc/testsuite/gcc.dg/old-style-prom-2.c
  a4430e8a6755e6674402bd05861a1795  gcc/testsuite/gcc.dg/old-style-prom-3.c
  a0182c7350fe1a90fff285e2b2b1c85b  gcc/testsuite/gcc.dg/old-style-then-proto-1.c
! 1dadc95df2cfcfe39615669d181980e7  gcc/testsuite/gcc.dg/optimize-bswapdi-1.c
! 404ca003e7761822ce477a10495ab916  gcc/testsuite/gcc.dg/optimize-bswapdi-2.c
  2411cd50c6b3a2f2c92ef4ec97287013  gcc/testsuite/gcc.dg/optimize-bswapdi-3.c
  9c8da7720e5bd21617b6c738c4cb4c1e  gcc/testsuite/gcc.dg/optimize-bswaphi-1.c
! 6d24510e55a8e45939dcdefb58abed12  gcc/testsuite/gcc.dg/optimize-bswapsi-1.c
  d1c5f8043ad0d459a3903165dca712b5  gcc/testsuite/gcc.dg/optimize-bswapsi-2.c
! 3e2af2f78fbd024fa7ef3cadf042e4a5  gcc/testsuite/gcc.dg/optimize-bswapsi-3.c
  bd8139d78717b2c59fb034414884e732  gcc/testsuite/gcc.dg/optimize-bswapsi-4.c
! 31c22741d2efc49130ed805245ca2eef  gcc/testsuite/gcc.dg/optimize-bswapsi-5.c
! 264d209c57cc45ef9e3d126da7533b59  gcc/testsuite/gcc.dg/optimize-bswapsi-6.c
! 83a0ff009417660c84e29c7126de74fa  gcc/testsuite/gcc.dg/optimize-bswapsi-7.c
  a8c315968907b6e4af7ba7ac664c3d4d  gcc/testsuite/gcc.dg/opts-1.c
  4d9c904a82fe597f0cd8af7c5de6e850  gcc/testsuite/gcc.dg/opts-2.c
  38a8c929ac7b34d42957355372ae18f5  gcc/testsuite/gcc.dg/opts-3.c
*************** e5457066a3fb8a7d2cfd77aab02a105d  gcc/te
*** 39104,39110 ****
  f0a8868858febe634c08ed10db8df14f  gcc/testsuite/gcc.dg/ordered-comparison-2.c
  e2c51fe1d974ad05661fe94550d25433  gcc/testsuite/gcc.dg/ordered-comparison-3.c
  3ac30f714e0d39708a9837c78d7c6a12  gcc/testsuite/gcc.dg/ordered-comparison-4.c
! 57a1048b19e9d400f34367dc590103fe  gcc/testsuite/gcc.dg/out-of-bounds-1.c
  d524cbf9b3805a6b9bbfc037661424cc  gcc/testsuite/gcc.dg/overflow-1.c
  1bef7f403044d1646079b0bf7ffe725c  gcc/testsuite/gcc.dg/overflow-2.c
  6ab1c2ca708f065fbe0f869aa0ec1224  gcc/testsuite/gcc.dg/overflow-warn-1.c
--- 40757,40763 ----
  f0a8868858febe634c08ed10db8df14f  gcc/testsuite/gcc.dg/ordered-comparison-2.c
  e2c51fe1d974ad05661fe94550d25433  gcc/testsuite/gcc.dg/ordered-comparison-3.c
  3ac30f714e0d39708a9837c78d7c6a12  gcc/testsuite/gcc.dg/ordered-comparison-4.c
! 15d3a8299e6cae5a8d42a26e2c2975ca  gcc/testsuite/gcc.dg/out-of-bounds-1.c
  d524cbf9b3805a6b9bbfc037661424cc  gcc/testsuite/gcc.dg/overflow-1.c
  1bef7f403044d1646079b0bf7ffe725c  gcc/testsuite/gcc.dg/overflow-2.c
  6ab1c2ca708f065fbe0f869aa0ec1224  gcc/testsuite/gcc.dg/overflow-warn-1.c
*************** b817ca627688575b94c9dba877cb008f  gcc/te
*** 39128,39134 ****
  ddeb76cd34e791893c0f539fdab879bb  gcc/testsuite/gcc.dg/params/LICENSE
  dbe49534045bebcd393d3d0d5ccec28a  gcc/testsuite/gcc.dg/params/README
  86dede4ba9e425e8357eeabd89e5a7a9  gcc/testsuite/gcc.dg/params/blocksort-part.c
! 5ab219074e38892ef3d64071bce6d29c  gcc/testsuite/gcc.dg/params/params.exp
  2bfe07faa645e00622fecd5d6eb93e5d  gcc/testsuite/gcc.dg/parm-forwdecl-1.c
  64cab05bc7533e03a76ec901dec2853f  gcc/testsuite/gcc.dg/parm-forwdecl-2.c
  acdeeb693086bdb4ca6cdde57d9eb91d  gcc/testsuite/gcc.dg/parm-forwdecl-3.c
--- 40781,40787 ----
  ddeb76cd34e791893c0f539fdab879bb  gcc/testsuite/gcc.dg/params/LICENSE
  dbe49534045bebcd393d3d0d5ccec28a  gcc/testsuite/gcc.dg/params/README
  86dede4ba9e425e8357eeabd89e5a7a9  gcc/testsuite/gcc.dg/params/blocksort-part.c
! e274eddf7a4590ecb2363b02e939023e  gcc/testsuite/gcc.dg/params/params.exp
  2bfe07faa645e00622fecd5d6eb93e5d  gcc/testsuite/gcc.dg/parm-forwdecl-1.c
  64cab05bc7533e03a76ec901dec2853f  gcc/testsuite/gcc.dg/parm-forwdecl-2.c
  acdeeb693086bdb4ca6cdde57d9eb91d  gcc/testsuite/gcc.dg/parm-forwdecl-3.c
*************** b19f78cc8cfdc1d6a96b2f1f9d2b1da6  gcc/te
*** 39208,39214 ****
  b01e42858e0423266a42ce48f5963765  gcc/testsuite/gcc.dg/pch/macro-3.hs
  98eb40fd35afc99b8d7a0d9037913d4a  gcc/testsuite/gcc.dg/pch/macro-4.c
  9dfd3f4bded8093e1bd9fe58412b43c6  gcc/testsuite/gcc.dg/pch/macro-4.hs
! 5446b48fed5381780172440ed64c9b97  gcc/testsuite/gcc.dg/pch/pch.exp
  d4141b7ac70c28b7c83f42cea80032d1  gcc/testsuite/gcc.dg/pch/pr66343-1.c
  fecd32092f1271edbd03eb98de866244  gcc/testsuite/gcc.dg/pch/pr66343-1.hs
  140e74992c61983f49deebe0a5a98c95  gcc/testsuite/gcc.dg/pch/pr66343-2.c
--- 40861,40867 ----
  b01e42858e0423266a42ce48f5963765  gcc/testsuite/gcc.dg/pch/macro-3.hs
  98eb40fd35afc99b8d7a0d9037913d4a  gcc/testsuite/gcc.dg/pch/macro-4.c
  9dfd3f4bded8093e1bd9fe58412b43c6  gcc/testsuite/gcc.dg/pch/macro-4.hs
! 3b43c2414bbc5c12f49db60e793de493  gcc/testsuite/gcc.dg/pch/pch.exp
  d4141b7ac70c28b7c83f42cea80032d1  gcc/testsuite/gcc.dg/pch/pr66343-1.c
  fecd32092f1271edbd03eb98de866244  gcc/testsuite/gcc.dg/pch/pr66343-1.hs
  140e74992c61983f49deebe0a5a98c95  gcc/testsuite/gcc.dg/pch/pr66343-2.c
*************** fe461e61798a0b67d33eee3c428b8a1c  gcc/te
*** 39229,39235 ****
  d596db764e44964f1913b62908368dd5  gcc/testsuite/gcc.dg/pch/struct-1.hs
  e14f432a1fcbe132dba427a035e8309a  gcc/testsuite/gcc.dg/pch/system-1.c
  00c470b0510973ef43dacfaf4b849a74  gcc/testsuite/gcc.dg/pch/system-1.hs
! 3c7414ff72374be159d517b8d7f8b02d  gcc/testsuite/gcc.dg/pch/valid-1.c
  5d442738a691e03a1889fa0d9f94329e  gcc/testsuite/gcc.dg/pch/valid-1.hs
  08d2f31336df747768d4ad608b42606f  gcc/testsuite/gcc.dg/pch/valid-1b.c
  0c4739c81e44dd26b6eef0b501357e41  gcc/testsuite/gcc.dg/pch/valid-1b.hs
--- 40882,40888 ----
  d596db764e44964f1913b62908368dd5  gcc/testsuite/gcc.dg/pch/struct-1.hs
  e14f432a1fcbe132dba427a035e8309a  gcc/testsuite/gcc.dg/pch/system-1.c
  00c470b0510973ef43dacfaf4b849a74  gcc/testsuite/gcc.dg/pch/system-1.hs
! ddd836f40cbe15cbe8fbf6819c9c5db6  gcc/testsuite/gcc.dg/pch/valid-1.c
  5d442738a691e03a1889fa0d9f94329e  gcc/testsuite/gcc.dg/pch/valid-1.hs
  08d2f31336df747768d4ad608b42606f  gcc/testsuite/gcc.dg/pch/valid-1b.c
  0c4739c81e44dd26b6eef0b501357e41  gcc/testsuite/gcc.dg/pch/valid-1b.hs
*************** df1fb04645820cce9159c1b05e520fc7  gcc/te
*** 39261,39267 ****
  72712f41dcc921ba1827000fc0809a9c  gcc/testsuite/gcc.dg/pie-link.c
  000d3a6c8dca7e54f5be771190d10f29  gcc/testsuite/gcc.dg/pie-static-1.c
  be052bceddbf752586b645bc9e048e9c  gcc/testsuite/gcc.dg/pie-static-2.c
! 0d3cedc0a9840b9bec90af447ef59289  gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.c
  146ffa25d8a6444346ca2a51bfa748ec  gcc/testsuite/gcc.dg/plugin/diagnostic-group-test-1.c
  901114feb3fc4bc44a06034fc6abcbff  gcc/testsuite/gcc.dg/plugin/diagnostic-path-format-inline-events-1.c
  a0bce3f622c2549614e45f5a9afe9c88  gcc/testsuite/gcc.dg/plugin/diagnostic-path-format-inline-events-2.c
--- 40914,40920 ----
  72712f41dcc921ba1827000fc0809a9c  gcc/testsuite/gcc.dg/pie-link.c
  000d3a6c8dca7e54f5be771190d10f29  gcc/testsuite/gcc.dg/pie-static-1.c
  be052bceddbf752586b645bc9e048e9c  gcc/testsuite/gcc.dg/pie-static-2.c
! 1d315d2bc8c93df955c121387a2e94b5  gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.c
  146ffa25d8a6444346ca2a51bfa748ec  gcc/testsuite/gcc.dg/plugin/diagnostic-group-test-1.c
  901114feb3fc4bc44a06034fc6abcbff  gcc/testsuite/gcc.dg/plugin/diagnostic-path-format-inline-events-1.c
  a0bce3f622c2549614e45f5a9afe9c88  gcc/testsuite/gcc.dg/plugin/diagnostic-path-format-inline-events-2.c
*************** a59c3c55e77b2ab336a32f5ffc9ed6ba  gcc/te
*** 39290,39302 ****
  c1874b847baa5d41d58aa2db643143da  gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-no-labels.c
  2c7e32cd8f076c6b6406aef7209045e7  gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-parseable-fixits.c
  39f1ab78432ac25892fad284e179d8ac  gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-trees-1.c
! 2dcacbd80a73417a42f8433a286f0163  gcc/testsuite/gcc.dg/plugin/diagnostic-test-string-literals-1.c
  1a45355cf06403e775b5d7ab5b2a59f7  gcc/testsuite/gcc.dg/plugin/diagnostic-test-string-literals-2.c
  9724706865aec183bf418db2220222c0  gcc/testsuite/gcc.dg/plugin/diagnostic-test-string-literals-3.c
  9130ee71c624765ab112b75378ac96c0  gcc/testsuite/gcc.dg/plugin/diagnostic-test-string-literals-4.c
  64a62a33969a68dabd414a649151bbf0  gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.c
  ec592bfd273d806ead078d85f814e82c  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c
! 21a610a854c93330d4eb7c10281e5683  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_inlining.c
  6166699181d0af7113e8d77486e75ef4  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_metadata.c
  78302f36d90c98364f12c9362b61e53d  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.c
  064f04486c7a7bf4560482d2b4333df5  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
--- 40943,40955 ----
  c1874b847baa5d41d58aa2db643143da  gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-no-labels.c
  2c7e32cd8f076c6b6406aef7209045e7  gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-parseable-fixits.c
  39f1ab78432ac25892fad284e179d8ac  gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-trees-1.c
! bb20191ab0ad6e0d6ba368003d857339  gcc/testsuite/gcc.dg/plugin/diagnostic-test-string-literals-1.c
  1a45355cf06403e775b5d7ab5b2a59f7  gcc/testsuite/gcc.dg/plugin/diagnostic-test-string-literals-2.c
  9724706865aec183bf418db2220222c0  gcc/testsuite/gcc.dg/plugin/diagnostic-test-string-literals-3.c
  9130ee71c624765ab112b75378ac96c0  gcc/testsuite/gcc.dg/plugin/diagnostic-test-string-literals-4.c
  64a62a33969a68dabd414a649151bbf0  gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.c
  ec592bfd273d806ead078d85f814e82c  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c
! ee63c958a3cb48c8a89453979a3e3b31  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_inlining.c
  6166699181d0af7113e8d77486e75ef4  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_metadata.c
  78302f36d90c98364f12c9362b61e53d  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_paths.c
  064f04486c7a7bf4560482d2b4333df5  gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
*************** b0b2fc226001595620383855c8eacf11  gcc/te
*** 39311,39317 ****
  1c6a9973a6ef6f459b0990d8f17fe192  gcc/testsuite/gcc.dg/plugin/finish_unit_plugin.c
  232d54c69029a45c46660ba009ebdf28  gcc/testsuite/gcc.dg/plugin/ggcplug-test-1.c
  946d91607bc14508e8394c33f82cd987  gcc/testsuite/gcc.dg/plugin/ggcplug.c
! 46e3f5104408630a7bd97560305fbb85  gcc/testsuite/gcc.dg/plugin/gil-1.c
  c1994b3e108cc9c7befbc1b7c93a70ff  gcc/testsuite/gcc.dg/plugin/gil.h
  d3e84ae842f69911a3ac0ceb96542627  gcc/testsuite/gcc.dg/plugin/location-overflow-test-1.c
  b584a46252319e63ce8a18cd3d89f07c  gcc/testsuite/gcc.dg/plugin/location-overflow-test-2.c
--- 40964,40970 ----
  1c6a9973a6ef6f459b0990d8f17fe192  gcc/testsuite/gcc.dg/plugin/finish_unit_plugin.c
  232d54c69029a45c46660ba009ebdf28  gcc/testsuite/gcc.dg/plugin/ggcplug-test-1.c
  946d91607bc14508e8394c33f82cd987  gcc/testsuite/gcc.dg/plugin/ggcplug.c
! 22cbcbb280a3987fb49a74754543f9f1  gcc/testsuite/gcc.dg/plugin/gil-1.c
  c1994b3e108cc9c7befbc1b7c93a70ff  gcc/testsuite/gcc.dg/plugin/gil.h
  d3e84ae842f69911a3ac0ceb96542627  gcc/testsuite/gcc.dg/plugin/location-overflow-test-1.c
  b584a46252319e63ce8a18cd3d89f07c  gcc/testsuite/gcc.dg/plugin/location-overflow-test-2.c
*************** b1a9c2af16dec0d49e4f96f176a99493  gcc/te
*** 39325,39331 ****
  4f9162b0bea5be7a65cfd95710142650  gcc/testsuite/gcc.dg/plugin/must_tail_call_plugin.c
  adbc6d60d6e1474ca93af3b50208e741  gcc/testsuite/gcc.dg/plugin/one_time-test-1.c
  140175a2d33b8c31f25c3427b04baa1b  gcc/testsuite/gcc.dg/plugin/one_time_plugin.c
! babc4e1805daa77b02eb7a31d8486291  gcc/testsuite/gcc.dg/plugin/plugin.exp
  10b87cc378ff8b6e30ae77af8c669e4b  gcc/testsuite/gcc.dg/plugin/plugindir1.c
  770fbe5bf2a65884c6120dab4b13a1d4  gcc/testsuite/gcc.dg/plugin/plugindir2.c
  5be673fb13573d3689c3cc3dff9f5a2e  gcc/testsuite/gcc.dg/plugin/plugindir3.c
--- 40978,40984 ----
  4f9162b0bea5be7a65cfd95710142650  gcc/testsuite/gcc.dg/plugin/must_tail_call_plugin.c
  adbc6d60d6e1474ca93af3b50208e741  gcc/testsuite/gcc.dg/plugin/one_time-test-1.c
  140175a2d33b8c31f25c3427b04baa1b  gcc/testsuite/gcc.dg/plugin/one_time_plugin.c
! ba90e3e51c359d1e1afc8f499b48abb8  gcc/testsuite/gcc.dg/plugin/plugin.exp
  10b87cc378ff8b6e30ae77af8c669e4b  gcc/testsuite/gcc.dg/plugin/plugindir1.c
  770fbe5bf2a65884c6120dab4b13a1d4  gcc/testsuite/gcc.dg/plugin/plugindir2.c
  5be673fb13573d3689c3cc3dff9f5a2e  gcc/testsuite/gcc.dg/plugin/plugindir3.c
*************** ce11f2489f1fcb28d7e75b367bd7e130  gcc/te
*** 39359,39366 ****
  c55115022c217aa6026425a6847a9846  gcc/testsuite/gcc.dg/pointer-arith-8.c
  cec4c2edab704d04ba9649b787ed5274  gcc/testsuite/gcc.dg/pointer-arith-9.c
  42290d08dbf6f913b532061d99a25d7b  gcc/testsuite/gcc.dg/pointer-array-atomic.c
! 36d129decd983b180727f51567ff7782  gcc/testsuite/gcc.dg/pointer-array-quals-1.c
! c74da1375203a3b1f93c21f689e6e5b5  gcc/testsuite/gcc.dg/pointer-array-quals-2.c
  098a9eb0b304a107d7e16d34e57694dd  gcc/testsuite/gcc.dg/pointer-range-check-1.c
  f5883b8a2323e7318237e3750e037d52  gcc/testsuite/gcc.dg/pointer-range-check-2.c
  560e02ab06396c9dce71b047a8a96f79  gcc/testsuite/gcc.dg/postincr-1.c
--- 41012,41019 ----
  c55115022c217aa6026425a6847a9846  gcc/testsuite/gcc.dg/pointer-arith-8.c
  cec4c2edab704d04ba9649b787ed5274  gcc/testsuite/gcc.dg/pointer-arith-9.c
  42290d08dbf6f913b532061d99a25d7b  gcc/testsuite/gcc.dg/pointer-array-atomic.c
! f899fb155519fb6812ec325a0c6f9618  gcc/testsuite/gcc.dg/pointer-array-quals-1.c
! d7d0ec9427f5c578b1a1539d6c4107cf  gcc/testsuite/gcc.dg/pointer-array-quals-2.c
  098a9eb0b304a107d7e16d34e57694dd  gcc/testsuite/gcc.dg/pointer-range-check-1.c
  f5883b8a2323e7318237e3750e037d52  gcc/testsuite/gcc.dg/pointer-range-check-2.c
  560e02ab06396c9dce71b047a8a96f79  gcc/testsuite/gcc.dg/postincr-1.c
*************** fd3265437095da6aff9d665f55b837b2  gcc/te
*** 39370,39420 ****
  b9bdf8358b02d555adf76b44050cc156  gcc/testsuite/gcc.dg/pow-sqrt-synth-1.c
  e037582257371f62a3a039df4321225d  gcc/testsuite/gcc.dg/pow-sqrt.x
  ecd4e45106744489e5a78254ca44d88a  gcc/testsuite/gcc.dg/pr100142.c
! 2ed4c7917cf2d830a0bb5f0d9d65e592  gcc/testsuite/gcc.dg/pr100225.c
  1297b760f49fded84008e039bc67829a  gcc/testsuite/gcc.dg/pr100239.c
  5ca809ef622425c422640fc82af912d6  gcc/testsuite/gcc.dg/pr100414.c
  0427d40b4e082cce256dba416ad5965d  gcc/testsuite/gcc.dg/pr100464.c
! eefdc14893bfe7e4dd2a89202733fa86  gcc/testsuite/gcc.dg/pr100509.c
  11146764fafb29a1319cb0b5d9f09044  gcc/testsuite/gcc.dg/pr100520.c
  395736a8e0816a51c506968c1ca01f5d  gcc/testsuite/gcc.dg/pr100563.c
  0d16c3f79029d0b1d58367952a9cdfa3  gcc/testsuite/gcc.dg/pr100590.c
  b6d7f7ed4dde3865c140de6c031f2bda  gcc/testsuite/gcc.dg/pr100619.c
  3a4aa573e35026433b0c5710fc8ceed0  gcc/testsuite/gcc.dg/pr100680.c
! f44c2488d00a079c87fd11d26d428796  gcc/testsuite/gcc.dg/pr100788.c
  5e25293a3107689203988f78c03ea859  gcc/testsuite/gcc.dg/pr100791.c
  62ea3571a0a58e5eef07826715647995  gcc/testsuite/gcc.dg/pr100834.c
  b20e922d857d70fc849642b04d8aef50  gcc/testsuite/gcc.dg/pr101062.c
  f18acedefe9e23843bfc481cdeb419ad  gcc/testsuite/gcc.dg/pr101156.c
  f7653fb72f02585ca98c4cb008a53e32  gcc/testsuite/gcc.dg/pr101171.c
  ce4c9d39348d671d75f2c9b6009262fb  gcc/testsuite/gcc.dg/pr101172.c
  36e682a40ce779df8943180980917338  gcc/testsuite/gcc.dg/pr101223.c
  2eebdeb5aef44432de1498de14cbf4e6  gcc/testsuite/gcc.dg/pr101266.c
  70303171ed7f5b2cba05e6b98daad2ab  gcc/testsuite/gcc.dg/pr101384.c
  9437d2977418eec9749f3a9d06040a59  gcc/testsuite/gcc.dg/pr102140.c
  afb36cfd0415d59db229d4058c30853f  gcc/testsuite/gcc.dg/pr102224.c
  0bb85c23ffa7496538a767244947fdb2  gcc/testsuite/gcc.dg/pr102356.c
  91844853e35a7b41b30a3460cc946f81  gcc/testsuite/gcc.dg/pr102478.c
  d2b6c61457f02b40823ad6f31b29f47c  gcc/testsuite/gcc.dg/pr102798.c
  403235552bc51decc6aaf0f2f60e8721  gcc/testsuite/gcc.dg/pr103248.c
  5cf580820aedc778e4de76262078142d  gcc/testsuite/gcc.dg/pr103587.c
  220dde695d4a28e6fb719f38a397ed0e  gcc/testsuite/gcc.dg/pr103837.c
  8eab078f5fe12fd259103c4e2fa30713  gcc/testsuite/gcc.dg/pr103838.c
  a4874d44c0ba05d6340ed06bc5958e53  gcc/testsuite/gcc.dg/pr103860.c
  8226e377d45ef0ffeb7badfb04740ab9  gcc/testsuite/gcc.dg/pr10392-1.c
  274592903ac1b8bb26cb04aaeb7bceb4  gcc/testsuite/gcc.dg/pr104263.c
  6cdf5f889cfeab1185ff2396685e6d88  gcc/testsuite/gcc.dg/pr104288.c
  c055fb27d1a723e98ef6bd9290551487  gcc/testsuite/gcc.dg/pr104511.c
  1198a55fbf04ab73754710d047131b2b  gcc/testsuite/gcc.dg/pr104544.c
  c04efe12f2d4a15f1ea2cae1889ba4cf  gcc/testsuite/gcc.dg/pr104675-1.c
  c5ab940cf751b86591b1f61af3cfdade  gcc/testsuite/gcc.dg/pr104675-2.c
  3134bf3d7e786de762b2b02ad55f4dcd  gcc/testsuite/gcc.dg/pr104675-3.c
  d8ac6e8cccf7bcb1070140ae44ef117a  gcc/testsuite/gcc.dg/pr10474.c
  2968ba86ec9be073192c7975ec531fb3  gcc/testsuite/gcc.dg/pr104786.c
  8c0ed1baab74c7b05d89e60fb2786609  gcc/testsuite/gcc.dg/pr104910.c
  f8d1a8342ac7db3ad1336ab098edd372  gcc/testsuite/gcc.dg/pr105094.c
  299f6a400b7fb5db65f2901e5285cc2c  gcc/testsuite/gcc.dg/pr105165.c
  b01f707de15442a63cdb3e32148021fd  gcc/testsuite/gcc.dg/pr105211.c
  62b3efd9b859c1e2a74f5d3cfa969d33  gcc/testsuite/gcc.dg/pr105226.c
  860f163dcd0b252ea3f85323bc959a7d  gcc/testsuite/gcc.dg/pr11459-1.c
  e164a736918661d669864e3645da290c  gcc/testsuite/gcc.dg/pr11492.c
  3b83403729a3686d25552352bf0c4577  gcc/testsuite/gcc.dg/pr11864-1.c
--- 41023,41182 ----
  b9bdf8358b02d555adf76b44050cc156  gcc/testsuite/gcc.dg/pow-sqrt-synth-1.c
  e037582257371f62a3a039df4321225d  gcc/testsuite/gcc.dg/pow-sqrt.x
  ecd4e45106744489e5a78254ca44d88a  gcc/testsuite/gcc.dg/pr100142.c
! 0869c29788d11616cd48af5ae7173721  gcc/testsuite/gcc.dg/pr100225.c
  1297b760f49fded84008e039bc67829a  gcc/testsuite/gcc.dg/pr100239.c
+ a7ccf39acb8caab020a0ba6554bb69f7  gcc/testsuite/gcc.dg/pr100292.c
+ db661ade03c7d38cab8e4ca47f631e4c  gcc/testsuite/gcc.dg/pr100349.c
+ 633c569152621a26f5adb2fd40949b36  gcc/testsuite/gcc.dg/pr100373.c
  5ca809ef622425c422640fc82af912d6  gcc/testsuite/gcc.dg/pr100414.c
  0427d40b4e082cce256dba416ad5965d  gcc/testsuite/gcc.dg/pr100464.c
! 920a8638d9df8cce219be521aa35bf72  gcc/testsuite/gcc.dg/pr100509.c
! 1a84b827f9521de18b59f87f40ef6d18  gcc/testsuite/gcc.dg/pr100512.c
  11146764fafb29a1319cb0b5d9f09044  gcc/testsuite/gcc.dg/pr100520.c
+ 380f5ed401661497e77142772a24054a  gcc/testsuite/gcc.dg/pr100521.c
+ 580ac919e1954ba779b2269203b11211  gcc/testsuite/gcc.dg/pr100547.c
  395736a8e0816a51c506968c1ca01f5d  gcc/testsuite/gcc.dg/pr100563.c
  0d16c3f79029d0b1d58367952a9cdfa3  gcc/testsuite/gcc.dg/pr100590.c
  b6d7f7ed4dde3865c140de6c031f2bda  gcc/testsuite/gcc.dg/pr100619.c
  3a4aa573e35026433b0c5710fc8ceed0  gcc/testsuite/gcc.dg/pr100680.c
! 7ac80b11ee6122eab32803ef7c45befe  gcc/testsuite/gcc.dg/pr100781.c
! a79b25dcfa2c7136ecdca2ad37927dff  gcc/testsuite/gcc.dg/pr100788.c
! 807e819f46c5553946b5fd3987e81c9f  gcc/testsuite/gcc.dg/pr100790.c
  5e25293a3107689203988f78c03ea859  gcc/testsuite/gcc.dg/pr100791.c
  62ea3571a0a58e5eef07826715647995  gcc/testsuite/gcc.dg/pr100834.c
+ a022ade94980f9c4caf7f7f509f932d4  gcc/testsuite/gcc.dg/pr100843.c
+ 474ed168e6f6888faee6cd5ce80997dc  gcc/testsuite/gcc.dg/pr100887.c
+ e280e3138d3f866451e5f7c69bf2af22  gcc/testsuite/gcc.dg/pr101008.c
+ 0d03fd02d95149f8c7d54f57fbe17c9a  gcc/testsuite/gcc.dg/pr101028.c
  b20e922d857d70fc849642b04d8aef50  gcc/testsuite/gcc.dg/pr101062.c
+ 2acf2b8e09ad9bce35eeea4f93f5ebde  gcc/testsuite/gcc.dg/pr101145-1.c
+ 920fe93e08111a63fe4013475dee7163  gcc/testsuite/gcc.dg/pr101145-2.c
  f18acedefe9e23843bfc481cdeb419ad  gcc/testsuite/gcc.dg/pr101156.c
+ 7952b8b6d14ea9a6e15744297329db7c  gcc/testsuite/gcc.dg/pr101170.c
  f7653fb72f02585ca98c4cb008a53e32  gcc/testsuite/gcc.dg/pr101171.c
  ce4c9d39348d671d75f2c9b6009262fb  gcc/testsuite/gcc.dg/pr101172.c
  36e682a40ce779df8943180980917338  gcc/testsuite/gcc.dg/pr101223.c
+ d98596956367fc29b9341da6c0f03f55  gcc/testsuite/gcc.dg/pr101254.c
  2eebdeb5aef44432de1498de14cbf4e6  gcc/testsuite/gcc.dg/pr101266.c
+ cbe7e390158f186ae3fd0f808bea7563  gcc/testsuite/gcc.dg/pr101294.c
  70303171ed7f5b2cba05e6b98daad2ab  gcc/testsuite/gcc.dg/pr101384.c
+ 566100ed369cb8ddbb77ca59ac7f4416  gcc/testsuite/gcc.dg/pr101403.c
+ cf17d565e22770879e54b6d0b5f98c72  gcc/testsuite/gcc.dg/pr101419.c
+ 51fa849c28379b9795b20cbcf5bd8067  gcc/testsuite/gcc.dg/pr101496.c
+ 82ba8f6dfa7a7a8e6eb6d73d5c8df572  gcc/testsuite/gcc.dg/pr101497.c
+ fea990856f92887377e1bb43b4bd09e3  gcc/testsuite/gcc.dg/pr101741.c
+ b4b433110fcae56d605360d13c82f748  gcc/testsuite/gcc.dg/pr101858.c
+ dc76b4ca81299363e06ffe39774d173b  gcc/testsuite/gcc.dg/pr101885.c
+ f116a7bdcdcc6c4004a71ae0ab006702  gcc/testsuite/gcc.dg/pr101938.c
+ 4640a42a8aab285b13749e2a10e874c2  gcc/testsuite/gcc.dg/pr102009.c
+ 6f23cea214b7364e2f86ece7e773f066  gcc/testsuite/gcc.dg/pr102087.c
+ be9ddb035cc83ea1227c7930f1a36f1b  gcc/testsuite/gcc.dg/pr102087_1.c
  9437d2977418eec9749f3a9d06040a59  gcc/testsuite/gcc.dg/pr102140.c
+ c26b978b685e1bfcc17c466b966d4919  gcc/testsuite/gcc.dg/pr102141.c
+ 5cf412326dc16b1707feb9f8a8d1aa05  gcc/testsuite/gcc.dg/pr102152.c
+ 81b5db555bf4e99998ce86d5d737b15e  gcc/testsuite/gcc.dg/pr102207.c
  afb36cfd0415d59db229d4058c30853f  gcc/testsuite/gcc.dg/pr102224.c
+ 19014f75a82495dc3a06436ef24a4424  gcc/testsuite/gcc.dg/pr102269.c
+ a8b0cac4c5b824611e6fc2a6a978218a  gcc/testsuite/gcc.dg/pr102273.c
  0bb85c23ffa7496538a767244947fdb2  gcc/testsuite/gcc.dg/pr102356.c
+ 3bd1b7702c370684690afe5b0a42cc7a  gcc/testsuite/gcc.dg/pr102385.c
+ 18cfd35dbe31380111f765852cb9f992  gcc/testsuite/gcc.dg/pr102463.c
  91844853e35a7b41b30a3460cc946f81  gcc/testsuite/gcc.dg/pr102478.c
+ 3eb7714752e61f1a5b88bd014f660753  gcc/testsuite/gcc.dg/pr102511.c
+ df2f72644b9e7b16a9e33105c82facca  gcc/testsuite/gcc.dg/pr102585.c
+ b3e2a2ba14426fc2ba1209ef4ff954ad  gcc/testsuite/gcc.dg/pr102648.c
+ 5bcdca82a70510b0c530045042c5c6ae  gcc/testsuite/gcc.dg/pr102738.c
+ 5c4103f875aaa65db72170f1b652beb8  gcc/testsuite/gcc.dg/pr102764.c
  d2b6c61457f02b40823ad6f31b29f47c  gcc/testsuite/gcc.dg/pr102798.c
+ 1c554752a4a7e252e75eab3295cf4334  gcc/testsuite/gcc.dg/pr102827.c
+ 0ca26b5e69bf256e6d2b10ce1a9adda2  gcc/testsuite/gcc.dg/pr102892-1.c
+ 3cc3131778a8709d2331de3fa630fd84  gcc/testsuite/gcc.dg/pr102892-2.c
+ c045562529677f5cb7d484f9a1528485  gcc/testsuite/gcc.dg/pr102897.c
+ 5f55b331fa4581e733b6451f9aa47cdd  gcc/testsuite/gcc.dg/pr102983.c
+ 29252f4cd0235dafa4a0aa5783ea4e2a  gcc/testsuite/gcc.dg/pr103003.c
+ 11b2d6d5fe2e6b7e01f567ce3bb16ad4  gcc/testsuite/gcc.dg/pr103028.c
+ 7ee0c5d807884f2fbee926b391d31764  gcc/testsuite/gcc.dg/pr103062.c
+ 38ac28313fdaa17d5b23a808fee208fa  gcc/testsuite/gcc.dg/pr103075.c
+ 0ffb8c2a4389f13a8ac32b504c74e0af  gcc/testsuite/gcc.dg/pr103079.c
+ c19ee3365ada1f12fda3434fa13c9e18  gcc/testsuite/gcc.dg/pr103093.c
+ 30a42998bf1b9ceacc63df2e0d3579ee  gcc/testsuite/gcc.dg/pr103120.c
+ 1c1761666d4d7bf6b7ae8bf9eb6803e9  gcc/testsuite/gcc.dg/pr103184-1.c
+ a267d764dfe830b81c1bd01e3f9e9e3d  gcc/testsuite/gcc.dg/pr103184-2.c
+ 12bee52c4f95b7f01f53835ae5a2bd1c  gcc/testsuite/gcc.dg/pr103207.c
+ 07cb3100d5ce6854d6cbd6fdbf4119ad  gcc/testsuite/gcc.dg/pr103222.c
  403235552bc51decc6aaf0f2f60e8721  gcc/testsuite/gcc.dg/pr103248.c
+ d8eb2a227e52aa5ee92bca485c5024a1  gcc/testsuite/gcc.dg/pr103254.c
+ 46504ab9f4b03c6adb909435ac0582ac  gcc/testsuite/gcc.dg/pr103268-1.c
+ f47fc011aefa5a0cde8039c05a34cfc0  gcc/testsuite/gcc.dg/pr103268-2.c
+ b624a6f5be33cbb4c028eaa960562cf7  gcc/testsuite/gcc.dg/pr103270.c
+ 13acd10ba9ce006fd5d74e8b7a3767a1  gcc/testsuite/gcc.dg/pr103277.c
+ 254f4a829c77c6e9465eeac8bf6acbac  gcc/testsuite/gcc.dg/pr103359.c
+ 250254752bed666b5d72300a0db5cab9  gcc/testsuite/gcc.dg/pr103406.c
+ 2cdc02ab045994a9364118673417319d  gcc/testsuite/gcc.dg/pr103431.c
+ 8f046257827d0744ed22e0e47b099fd3  gcc/testsuite/gcc.dg/pr103440.c
+ f339e15d0bfc50d3400a3fcd67b1e48f  gcc/testsuite/gcc.dg/pr103451.c
+ 215f4c416db7a94099775c055a43c1f4  gcc/testsuite/gcc.dg/pr103485.c
  5cf580820aedc778e4de76262078142d  gcc/testsuite/gcc.dg/pr103587.c
+ 935af8248001b82d641b2af34c047572  gcc/testsuite/gcc.dg/pr103594.c
+ 18e73d7fe225bed88611a5c17d298a3f  gcc/testsuite/gcc.dg/pr103721-2.c
+ 8d33e065fb7ed80e1325731c58eaa0a2  gcc/testsuite/gcc.dg/pr103721.c
+ 22d5541869a19caa77db2bab79e6fe3b  gcc/testsuite/gcc.dg/pr103775.c
+ 060dc7a8eaffd96f9d9b05272e455d2b  gcc/testsuite/gcc.dg/pr103793.c
+ dc3443d0ab55ff4dd9d3ef69fb42bfaa  gcc/testsuite/gcc.dg/pr103808.c
  220dde695d4a28e6fb719f38a397ed0e  gcc/testsuite/gcc.dg/pr103837.c
  8eab078f5fe12fd259103c4e2fa30713  gcc/testsuite/gcc.dg/pr103838.c
+ c491227c29f1ea6f72ca84ad07d1b0bd  gcc/testsuite/gcc.dg/pr103845.c
  a4874d44c0ba05d6340ed06bc5958e53  gcc/testsuite/gcc.dg/pr103860.c
  8226e377d45ef0ffeb7badfb04740ab9  gcc/testsuite/gcc.dg/pr10392-1.c
+ 63c1519148bdbf875d5e04e0ba238c3d  gcc/testsuite/gcc.dg/pr103961.c
+ c44c16ebd6ce7796016eb65295c4740d  gcc/testsuite/gcc.dg/pr104198.c
  274592903ac1b8bb26cb04aaeb7bceb4  gcc/testsuite/gcc.dg/pr104263.c
  6cdf5f889cfeab1185ff2396685e6d88  gcc/testsuite/gcc.dg/pr104288.c
+ d4b1991f3f45c9ebd1cf3709240914be  gcc/testsuite/gcc.dg/pr104380.c
+ 2a44b19d74479f8a2dbd4bbdad3787d6  gcc/testsuite/gcc.dg/pr104381.c
+ 40fd26aebd8a75285f3b1ece8ac2e02f  gcc/testsuite/gcc.dg/pr104389.c
+ 3f1eccedf51f8a9edf2185c5d8a12093  gcc/testsuite/gcc.dg/pr104420-1.c
+ 5e02b8eaece0e468c147bf77d354505f  gcc/testsuite/gcc.dg/pr104420-2.c
+ af41be766b7c7339308e509fc8d2cb53  gcc/testsuite/gcc.dg/pr104420-3.c
+ 16d97403010e8d86071ea77ab4fe6422  gcc/testsuite/gcc.dg/pr104420-4.c
+ 23c67db89513923bf73a932b11f90927  gcc/testsuite/gcc.dg/pr104427.c
+ 5b838c151f5d2d826af2c42f7dcf66cb  gcc/testsuite/gcc.dg/pr104459.c
+ 160540a96840a88fee73e5380198b7d0  gcc/testsuite/gcc.dg/pr104464.c
+ 3688a84b1aadef3f232ccfaeba375afb  gcc/testsuite/gcc.dg/pr104506-1.c
+ 5119493fa63ae8a1b1cd0a6fcfea689a  gcc/testsuite/gcc.dg/pr104506-2.c
+ fee51c1affab287931d11eb36868a20a  gcc/testsuite/gcc.dg/pr104506-3.c
  c055fb27d1a723e98ef6bd9290551487  gcc/testsuite/gcc.dg/pr104511.c
+ fa765845c0ef9f86423a7decf5b4abe1  gcc/testsuite/gcc.dg/pr104522.c
+ 338f3ba74719d172ad1ca16b71b9f893  gcc/testsuite/gcc.dg/pr104526.c
  1198a55fbf04ab73754710d047131b2b  gcc/testsuite/gcc.dg/pr104544.c
+ 6167afae4871b9c4c8baaf5903d51c46  gcc/testsuite/gcc.dg/pr104558.c
+ b81e7399fabf9263127ce516a240a32c  gcc/testsuite/gcc.dg/pr104612.c
+ 0411c772fc76ce05409539cc08a2b281  gcc/testsuite/gcc.dg/pr104644.c
  c04efe12f2d4a15f1ea2cae1889ba4cf  gcc/testsuite/gcc.dg/pr104675-1.c
  c5ab940cf751b86591b1f61af3cfdade  gcc/testsuite/gcc.dg/pr104675-2.c
  3134bf3d7e786de762b2b02ad55f4dcd  gcc/testsuite/gcc.dg/pr104675-3.c
+ a5833b8dc2703b241e6699df2222f98c  gcc/testsuite/gcc.dg/pr104700-2.c
  d8ac6e8cccf7bcb1070140ae44ef117a  gcc/testsuite/gcc.dg/pr10474.c
  2968ba86ec9be073192c7975ec531fb3  gcc/testsuite/gcc.dg/pr104786.c
  8c0ed1baab74c7b05d89e60fb2786609  gcc/testsuite/gcc.dg/pr104910.c
+ 624cf1d4b1b58ba0e2c492d29bba7754  gcc/testsuite/gcc.dg/pr104975.c
+ b86dfb95591cedd4e8f9612c0d76e923  gcc/testsuite/gcc.dg/pr105049.c
+ d08f59d459c7f9fa390c668c1f6b2b4f  gcc/testsuite/gcc.dg/pr105080.c
  f8d1a8342ac7db3ad1336ab098edd372  gcc/testsuite/gcc.dg/pr105094.c
+ 194a2dad6f902fdbaa5355dc3fa0ebe6  gcc/testsuite/gcc.dg/pr105140.c
+ 6ee7b97cec7b16eb8ec9815bf5468fdc  gcc/testsuite/gcc.dg/pr105149.c
+ 4fcf5458586095c916f824d7fa09fad0  gcc/testsuite/gcc.dg/pr105150.c
  299f6a400b7fb5db65f2901e5285cc2c  gcc/testsuite/gcc.dg/pr105165.c
+ 25a6db2efb48684f6cb2974051effc2a  gcc/testsuite/gcc.dg/pr105173.c
+ 74167edcd68be0592644dd215ac07fbf  gcc/testsuite/gcc.dg/pr105175.c
  b01f707de15442a63cdb3e32148021fd  gcc/testsuite/gcc.dg/pr105211.c
+ 674eaeafaa8d6299c130d40d3f974939  gcc/testsuite/gcc.dg/pr105218.c
  62b3efd9b859c1e2a74f5d3cfa969d33  gcc/testsuite/gcc.dg/pr105226.c
+ 7a57a46938f6612f3203e9d1d32bf2a2  gcc/testsuite/gcc.dg/pr105250.c
+ cc6ac8d68c79338a580a123141221e8b  gcc/testsuite/gcc.dg/pr105257.c
+ 01d945e452f69cb1fee8b12a879e51c6  gcc/testsuite/gcc.dg/pr105263.c
+ c3d8ae3e46240608f001dd6a702ebf0b  gcc/testsuite/gcc.dg/pr105331.c
+ df5c854ae6b61ad7980dc609c12732b5  gcc/testsuite/gcc.dg/pr105333.c
  860f163dcd0b252ea3f85323bc959a7d  gcc/testsuite/gcc.dg/pr11459-1.c
  e164a736918661d669864e3645da290c  gcc/testsuite/gcc.dg/pr11492.c
  3b83403729a3686d25552352bf0c4577  gcc/testsuite/gcc.dg/pr11864-1.c
*************** e9cd21e596ab4762c4f830282401af42  gcc/te
*** 39505,39511 ****
  51edfa5e427018ef4fff45a8ad8913b8  gcc/testsuite/gcc.dg/pr20100.c
  a3dca5151d7735f9dc3184d972129178  gcc/testsuite/gcc.dg/pr20115-1.c
  fda269538ec6cb5fa7f058ae0ca2954d  gcc/testsuite/gcc.dg/pr20115.c
! eaac03a990c4657b7e44f2f7a43e75ff  gcc/testsuite/gcc.dg/pr20126.c
  62757cb3c0e720fb1560a8224b08debd  gcc/testsuite/gcc.dg/pr20130-1.c
  2bca92aea2b5219d9409f9b42e816ce9  gcc/testsuite/gcc.dg/pr20216.c
  1283a0704dcc87875b6a0f69dfaf02dd  gcc/testsuite/gcc.dg/pr20245-1.c
--- 41267,41273 ----
  51edfa5e427018ef4fff45a8ad8913b8  gcc/testsuite/gcc.dg/pr20100.c
  a3dca5151d7735f9dc3184d972129178  gcc/testsuite/gcc.dg/pr20115-1.c
  fda269538ec6cb5fa7f058ae0ca2954d  gcc/testsuite/gcc.dg/pr20115.c
! 9ffc2ccb838c47b7df166327597a1f08  gcc/testsuite/gcc.dg/pr20126.c
  62757cb3c0e720fb1560a8224b08debd  gcc/testsuite/gcc.dg/pr20130-1.c
  2bca92aea2b5219d9409f9b42e816ce9  gcc/testsuite/gcc.dg/pr20216.c
  1283a0704dcc87875b6a0f69dfaf02dd  gcc/testsuite/gcc.dg/pr20245-1.c
*************** d475727c04d7b0890bdc8df05799bebc  gcc/te
*** 39566,39572 ****
  fec5da03a0c2deda5e2e23320eb104f9  gcc/testsuite/gcc.dg/pr25023.c
  08cad12653e74b3a4fc2b4e71f0e8ae7  gcc/testsuite/gcc.dg/pr25376.c
  8ba65ccc2fce8c161f1b603190ebfe45  gcc/testsuite/gcc.dg/pr25529.c
! de415527b9fd0e4032c3eebf5c2a3bbd  gcc/testsuite/gcc.dg/pr25530.c
  0e19591f58f2ec1d28818d979a7176c5  gcc/testsuite/gcc.dg/pr25559.c
  9389764f7b4ef0900c390df3b5cd1dc1  gcc/testsuite/gcc.dg/pr25682.c
  791852dc0c5508eb25d124c355b685c2  gcc/testsuite/gcc.dg/pr25795-1.c
--- 41328,41334 ----
  fec5da03a0c2deda5e2e23320eb104f9  gcc/testsuite/gcc.dg/pr25023.c
  08cad12653e74b3a4fc2b4e71f0e8ae7  gcc/testsuite/gcc.dg/pr25376.c
  8ba65ccc2fce8c161f1b603190ebfe45  gcc/testsuite/gcc.dg/pr25529.c
! e809d3f90dc75b0418bcf7babfae796c  gcc/testsuite/gcc.dg/pr25530.c
  0e19591f58f2ec1d28818d979a7176c5  gcc/testsuite/gcc.dg/pr25559.c
  9389764f7b4ef0900c390df3b5cd1dc1  gcc/testsuite/gcc.dg/pr25682.c
  791852dc0c5508eb25d124c355b685c2  gcc/testsuite/gcc.dg/pr25795-1.c
*************** d041a0d2eb83f24136dc258b720ecabe  gcc/te
*** 39800,39806 ****
  fbbeb08274f944fdf084a23f06a97a9e  gcc/testsuite/gcc.dg/pr36901-4.c
  3abaecbd23b125aa36860d265e8a06ab  gcc/testsuite/gcc.dg/pr36901-system.h
  f2beb9903d08cc6b5c64396328f276b6  gcc/testsuite/gcc.dg/pr36901.h
! 5a0c9ff4858eb4c6dc501a733348e4a4  gcc/testsuite/gcc.dg/pr36902.c
  41b78959b7b4fbc7b49e985dd96b0396  gcc/testsuite/gcc.dg/pr36991.c
  4fc0b3ef216c87b1b974c486a6d3820e  gcc/testsuite/gcc.dg/pr36997.c
  91727767fceb24336ed09f32c57d101a  gcc/testsuite/gcc.dg/pr36998.c
--- 41562,41568 ----
  fbbeb08274f944fdf084a23f06a97a9e  gcc/testsuite/gcc.dg/pr36901-4.c
  3abaecbd23b125aa36860d265e8a06ab  gcc/testsuite/gcc.dg/pr36901-system.h
  f2beb9903d08cc6b5c64396328f276b6  gcc/testsuite/gcc.dg/pr36901.h
! adf1d10a8e3ab0479ca6c89eff190d3e  gcc/testsuite/gcc.dg/pr36902.c
  41b78959b7b4fbc7b49e985dd96b0396  gcc/testsuite/gcc.dg/pr36991.c
  4fc0b3ef216c87b1b974c486a6d3820e  gcc/testsuite/gcc.dg/pr36997.c
  91727767fceb24336ed09f32c57d101a  gcc/testsuite/gcc.dg/pr36998.c
*************** c0057c21378b571cccb57351b9ef9acd  gcc/te
*** 39957,39963 ****
  e7531c0be062d752d1ed493e5d39c393  gcc/testsuite/gcc.dg/pr43783.c
  24513a60f9d4450589b46353e396e399  gcc/testsuite/gcc.dg/pr43864-2.c
  5fd7dfa795890eb46d57b824f015d779  gcc/testsuite/gcc.dg/pr43864-3.c
! 468e68d9b40b5fe4d91d9b8933fef228  gcc/testsuite/gcc.dg/pr43864-4.c
  edeb8035df2844baaefa0393b87eb3a5  gcc/testsuite/gcc.dg/pr43864.c
  eca3d1dd5335a9db1ea0c2a98084a274  gcc/testsuite/gcc.dg/pr43971.c
  45fb81d3e797c178603b7671145854be  gcc/testsuite/gcc.dg/pr44012.c
--- 41719,41725 ----
  e7531c0be062d752d1ed493e5d39c393  gcc/testsuite/gcc.dg/pr43783.c
  24513a60f9d4450589b46353e396e399  gcc/testsuite/gcc.dg/pr43864-2.c
  5fd7dfa795890eb46d57b824f015d779  gcc/testsuite/gcc.dg/pr43864-3.c
! e06bc8e528fd4a13dc8d2650b1bc01af  gcc/testsuite/gcc.dg/pr43864-4.c
  edeb8035df2844baaefa0393b87eb3a5  gcc/testsuite/gcc.dg/pr43864.c
  eca3d1dd5335a9db1ea0c2a98084a274  gcc/testsuite/gcc.dg/pr43971.c
  45fb81d3e797c178603b7671145854be  gcc/testsuite/gcc.dg/pr44012.c
*************** ec73976cbaacaf3afa062d5a5bdbad06  gcc/te
*** 40114,40121 ****
  f9fb6f3088c6d05f16fed58d2960e18e  gcc/testsuite/gcc.dg/pr48442.c
  73c8be725f2a97f4a369422d6729cbe7  gcc/testsuite/gcc.dg/pr48524.c
  b5b33b7d5486b16bd73a76cb5ca45b7b  gcc/testsuite/gcc.dg/pr48524.spec
! 09b7281909439c46c6f573468d7d1b1a  gcc/testsuite/gcc.dg/pr48552-1.c
! c1aa88181f30c21a81edd266e23ddf1c  gcc/testsuite/gcc.dg/pr48552-2.c
  56ae090e67722500754fdd954f4178cd  gcc/testsuite/gcc.dg/pr48616.c
  c9cc6bab59a53095524a6f34b6d0ded7  gcc/testsuite/gcc.dg/pr48685.c
  52c454f48b61b8f7fd4498c7764bc28f  gcc/testsuite/gcc.dg/pr48739-1.c
--- 41876,41883 ----
  f9fb6f3088c6d05f16fed58d2960e18e  gcc/testsuite/gcc.dg/pr48442.c
  73c8be725f2a97f4a369422d6729cbe7  gcc/testsuite/gcc.dg/pr48524.c
  b5b33b7d5486b16bd73a76cb5ca45b7b  gcc/testsuite/gcc.dg/pr48524.spec
! bbcdce273f646ba401b1f87914c16782  gcc/testsuite/gcc.dg/pr48552-1.c
! f046adc6a4ad48b81addeb7d73a42166  gcc/testsuite/gcc.dg/pr48552-2.c
  56ae090e67722500754fdd954f4178cd  gcc/testsuite/gcc.dg/pr48616.c
  c9cc6bab59a53095524a6f34b6d0ded7  gcc/testsuite/gcc.dg/pr48685.c
  52c454f48b61b8f7fd4498c7764bc28f  gcc/testsuite/gcc.dg/pr48739-1.c
*************** e4a2d97c5aa27b96f13bb39a2628cf46  gcc/te
*** 40331,40337 ****
  94613aef8331dce3090f3d0f2b06f4fc  gcc/testsuite/gcc.dg/pr56724-2.c
  fe7ed549d28272f92eefa456f8f14385  gcc/testsuite/gcc.dg/pr56724-3.c
  bb5fccf7a55d79a7791b33fabe4c113e  gcc/testsuite/gcc.dg/pr56727-1.c
! 8d521bcc9438026012a5f2794bcd6a27  gcc/testsuite/gcc.dg/pr56727-2.c
  b93ca323776283280bb9a60242ee3b5c  gcc/testsuite/gcc.dg/pr56809.c
  c190644fa957e1a9b70d4a1173fb83f8  gcc/testsuite/gcc.dg/pr56824.c
  4f0e0f47263f76400e1e9e51ba922fc5  gcc/testsuite/gcc.dg/pr56837.c
--- 42093,42099 ----
  94613aef8331dce3090f3d0f2b06f4fc  gcc/testsuite/gcc.dg/pr56724-2.c
  fe7ed549d28272f92eefa456f8f14385  gcc/testsuite/gcc.dg/pr56724-3.c
  bb5fccf7a55d79a7791b33fabe4c113e  gcc/testsuite/gcc.dg/pr56727-1.c
! f06d51365d517484132cde7cdec349d9  gcc/testsuite/gcc.dg/pr56727-2.c
  b93ca323776283280bb9a60242ee3b5c  gcc/testsuite/gcc.dg/pr56809.c
  c190644fa957e1a9b70d4a1173fb83f8  gcc/testsuite/gcc.dg/pr56824.c
  4f0e0f47263f76400e1e9e51ba922fc5  gcc/testsuite/gcc.dg/pr56837.c
*************** c23841d48ac4fbe59ef7a2cd176fd750  gcc/te
*** 40579,40585 ****
  c3e69244e462c1b74b2404f49f8cce1e  gcc/testsuite/gcc.dg/pr67089-3.c
  ad0dbe344de4fe75aefcad510408d5e2  gcc/testsuite/gcc.dg/pr67089-4.c
  e9b533c93c9cdb9613b27705829e1b3b  gcc/testsuite/gcc.dg/pr67089-5.c
! 28f13c4113cd8f6b8b0aa64fe87a92a5  gcc/testsuite/gcc.dg/pr67089-6.c
  42f78cc147d6f10c78ec57832b63e866  gcc/testsuite/gcc.dg/pr67089-7.c
  ad39a3c3a67bb2fdac1569eb047957a4  gcc/testsuite/gcc.dg/pr67107.c
  ce8be8eb7b1121e35cd0039846df4de3  gcc/testsuite/gcc.dg/pr67271.c
--- 42341,42347 ----
  c3e69244e462c1b74b2404f49f8cce1e  gcc/testsuite/gcc.dg/pr67089-3.c
  ad0dbe344de4fe75aefcad510408d5e2  gcc/testsuite/gcc.dg/pr67089-4.c
  e9b533c93c9cdb9613b27705829e1b3b  gcc/testsuite/gcc.dg/pr67089-5.c
! 10f9cdfabf7eb42fc86f59e68961a5a8  gcc/testsuite/gcc.dg/pr67089-6.c
  42f78cc147d6f10c78ec57832b63e866  gcc/testsuite/gcc.dg/pr67089-7.c
  ad39a3c3a67bb2fdac1569eb047957a4  gcc/testsuite/gcc.dg/pr67107.c
  ce8be8eb7b1121e35cd0039846df4de3  gcc/testsuite/gcc.dg/pr67271.c
*************** bafa800c13b3f396448834609a245b9f  gcc/te
*** 40612,40623 ****
  fe7ef582e37d9691649dc50a2e0357f2  gcc/testsuite/gcc.dg/pr68129_1.c
  18d42254aaeedf3ee06abcca146f8308  gcc/testsuite/gcc.dg/pr68134.c
  4f48371433fff03f9edb551983ceaf91  gcc/testsuite/gcc.dg/pr68162-1.c
! 4468c51840117e22e34333f9e504cc01  gcc/testsuite/gcc.dg/pr68217.c
  676afbe2455b670ba0309593d30aeb84  gcc/testsuite/gcc.dg/pr68286.c
  244993ecc8cf3673159d65b46a85e488  gcc/testsuite/gcc.dg/pr68306-2.c
  821e8f1eb04499179f7605c25960f8f3  gcc/testsuite/gcc.dg/pr68306-3.c
  55e36468fb3a1a867386a779d86b0d1e  gcc/testsuite/gcc.dg/pr68306.c
! 0016c177ad55c6a267f34f70eedb9861  gcc/testsuite/gcc.dg/pr68317.c
  a6babb5906e3c7d406659baa4eed07d9  gcc/testsuite/gcc.dg/pr68320.c
  612ebbeb3a70817569e18294f309b0a2  gcc/testsuite/gcc.dg/pr68327.c
  0da4236c106cfafd8cfab8e41f71b442  gcc/testsuite/gcc.dg/pr68375.c
--- 42374,42385 ----
  fe7ef582e37d9691649dc50a2e0357f2  gcc/testsuite/gcc.dg/pr68129_1.c
  18d42254aaeedf3ee06abcca146f8308  gcc/testsuite/gcc.dg/pr68134.c
  4f48371433fff03f9edb551983ceaf91  gcc/testsuite/gcc.dg/pr68162-1.c
! 9e24825fee32e5bdf1093efc3ecf6fff  gcc/testsuite/gcc.dg/pr68217.c
  676afbe2455b670ba0309593d30aeb84  gcc/testsuite/gcc.dg/pr68286.c
  244993ecc8cf3673159d65b46a85e488  gcc/testsuite/gcc.dg/pr68306-2.c
  821e8f1eb04499179f7605c25960f8f3  gcc/testsuite/gcc.dg/pr68306-3.c
  55e36468fb3a1a867386a779d86b0d1e  gcc/testsuite/gcc.dg/pr68306.c
! 8ae8f7633c4411f5a9d099567688c09e  gcc/testsuite/gcc.dg/pr68317.c
  a6babb5906e3c7d406659baa4eed07d9  gcc/testsuite/gcc.dg/pr68320.c
  612ebbeb3a70817569e18294f309b0a2  gcc/testsuite/gcc.dg/pr68327.c
  0da4236c106cfafd8cfab8e41f71b442  gcc/testsuite/gcc.dg/pr68375.c
*************** aecacbb64d3497c484426d338ffae43d  gcc/te
*** 40779,40785 ****
  aa86169902d2471ece373c0dddd5232b  gcc/testsuite/gcc.dg/pr78241.c
  7bfaca350ee545dbe10363c435dfa736  gcc/testsuite/gcc.dg/pr78333.c
  21d56f799d53b50dacd02048a1b73756  gcc/testsuite/gcc.dg/pr78384.c
! ed199837252420dfc81cd6b7990ad969  gcc/testsuite/gcc.dg/pr78408-1.c
  07834f595669948f323b820ebe44b1e2  gcc/testsuite/gcc.dg/pr78408-2.c
  6f2d058063e1aeba0dd1950b50cd76e6  gcc/testsuite/gcc.dg/pr78445.c
  443cf93af753f08628b6b57283dbbfed  gcc/testsuite/gcc.dg/pr78468.c
--- 42541,42547 ----
  aa86169902d2471ece373c0dddd5232b  gcc/testsuite/gcc.dg/pr78241.c
  7bfaca350ee545dbe10363c435dfa736  gcc/testsuite/gcc.dg/pr78333.c
  21d56f799d53b50dacd02048a1b73756  gcc/testsuite/gcc.dg/pr78384.c
! d1c0c35f81b189cc2e7a585f0fba596c  gcc/testsuite/gcc.dg/pr78408-1.c
  07834f595669948f323b820ebe44b1e2  gcc/testsuite/gcc.dg/pr78408-2.c
  6f2d058063e1aeba0dd1950b50cd76e6  gcc/testsuite/gcc.dg/pr78445.c
  443cf93af753f08628b6b57283dbbfed  gcc/testsuite/gcc.dg/pr78468.c
*************** b4a62cbbba0365642b3f9855baa89f4e  gcc/te
*** 40795,40813 ****
  5c098c8c60a3312c5cda64e55778f17a  gcc/testsuite/gcc.dg/pr78725.c
  c39c9c2cec1ded6fe71f7200c63c5bb9  gcc/testsuite/gcc.dg/pr78768.c
  fc3c051c8f6f62fff4e6ec32193c6410  gcc/testsuite/gcc.dg/pr78775.c
  e7bb380d7beeeff7a5a58c2dd994fde9  gcc/testsuite/gcc.dg/pr78902.c
  c45bdb26d88856006e8d87dbae3a8dc1  gcc/testsuite/gcc.dg/pr78957.c
  5d472619627fb0fe87a1ab11a2d43030  gcc/testsuite/gcc.dg/pr78965.c
  1e4ac73f62970b2d036dba88947ba85c  gcc/testsuite/gcc.dg/pr78973-2.c
  28a9726b32b8fa1c19bbcafa329a46eb  gcc/testsuite/gcc.dg/pr78973.c
  3eb967f814b608670a2c9630d4d2a1e0  gcc/testsuite/gcc.dg/pr79080.c
! a6178c12cd722231217defd0a55954f1  gcc/testsuite/gcc.dg/pr79214.c
  4d852cee874d982752a5141b529c6205  gcc/testsuite/gcc.dg/pr79214.h
  8607f4379de80cb787541b036e208610  gcc/testsuite/gcc.dg/pr79222.c
  6f2fc038047bf02fb18e391f4aa4f5c0  gcc/testsuite/gcc.dg/pr79223.c
  24527a55d1c990ac1c42a74f0aae5949  gcc/testsuite/gcc.dg/pr79255.c
  f06508b7bee3369e1dc3a81328ad4c4f  gcc/testsuite/gcc.dg/pr79342.c
  11a65c3a6b9765baba92154a864e5985  gcc/testsuite/gcc.dg/pr79405.c
  9c25129a5f3400435bb046e327b76463  gcc/testsuite/gcc.dg/pr79494.c
  9ec3e8f462eef4a5f6494d9a88865b8c  gcc/testsuite/gcc.dg/pr79499.c
  b0bb2f56a5f149e9206e0c54da377a58  gcc/testsuite/gcc.dg/pr79538.c
--- 42557,42577 ----
  5c098c8c60a3312c5cda64e55778f17a  gcc/testsuite/gcc.dg/pr78725.c
  c39c9c2cec1ded6fe71f7200c63c5bb9  gcc/testsuite/gcc.dg/pr78768.c
  fc3c051c8f6f62fff4e6ec32193c6410  gcc/testsuite/gcc.dg/pr78775.c
+ fa07a2ef973078cf07d4111cc5563e7b  gcc/testsuite/gcc.dg/pr78888.c
  e7bb380d7beeeff7a5a58c2dd994fde9  gcc/testsuite/gcc.dg/pr78902.c
  c45bdb26d88856006e8d87dbae3a8dc1  gcc/testsuite/gcc.dg/pr78957.c
  5d472619627fb0fe87a1ab11a2d43030  gcc/testsuite/gcc.dg/pr78965.c
  1e4ac73f62970b2d036dba88947ba85c  gcc/testsuite/gcc.dg/pr78973-2.c
  28a9726b32b8fa1c19bbcafa329a46eb  gcc/testsuite/gcc.dg/pr78973.c
  3eb967f814b608670a2c9630d4d2a1e0  gcc/testsuite/gcc.dg/pr79080.c
! c470bf799b26c9b8909b6f26f5f5435b  gcc/testsuite/gcc.dg/pr79214.c
  4d852cee874d982752a5141b529c6205  gcc/testsuite/gcc.dg/pr79214.h
  8607f4379de80cb787541b036e208610  gcc/testsuite/gcc.dg/pr79222.c
  6f2fc038047bf02fb18e391f4aa4f5c0  gcc/testsuite/gcc.dg/pr79223.c
  24527a55d1c990ac1c42a74f0aae5949  gcc/testsuite/gcc.dg/pr79255.c
  f06508b7bee3369e1dc3a81328ad4c4f  gcc/testsuite/gcc.dg/pr79342.c
  11a65c3a6b9765baba92154a864e5985  gcc/testsuite/gcc.dg/pr79405.c
+ 622ad8cea5a856157f3a631ead9e4287  gcc/testsuite/gcc.dg/pr79412.c
  9c25129a5f3400435bb046e327b76463  gcc/testsuite/gcc.dg/pr79494.c
  9ec3e8f462eef4a5f6494d9a88865b8c  gcc/testsuite/gcc.dg/pr79499.c
  b0bb2f56a5f149e9206e0c54da377a58  gcc/testsuite/gcc.dg/pr79538.c
*************** e82d485d82c990fc42f2e211d3c7319a  gcc/te
*** 40819,40825 ****
  3d225837de2f14990c8b6e794456bde5  gcc/testsuite/gcc.dg/pr79730.c
  b5356ea1b8c5f902a36c8d4dad23008c  gcc/testsuite/gcc.dg/pr79788-1.c
  227b00aa17a4c68044692a91fdc12280  gcc/testsuite/gcc.dg/pr79788-2.c
! 251f5362f29f61929f50a75dc90c07a8  gcc/testsuite/gcc.dg/pr79972.c
  14223e7e4ea1f6a75f58149769319a07  gcc/testsuite/gcc.dg/pr79983.c
  cb869ebc2ecdd8df754ac18110cd5c9e  gcc/testsuite/gcc.dg/pr79985.c
  965303c67250b6dbe25a9353d53d437d  gcc/testsuite/gcc.dg/pr80020.c
--- 42583,42589 ----
  3d225837de2f14990c8b6e794456bde5  gcc/testsuite/gcc.dg/pr79730.c
  b5356ea1b8c5f902a36c8d4dad23008c  gcc/testsuite/gcc.dg/pr79788-1.c
  227b00aa17a4c68044692a91fdc12280  gcc/testsuite/gcc.dg/pr79788-2.c
! d6564e67eb3edd07793ad86c985bfcb0  gcc/testsuite/gcc.dg/pr79972.c
  14223e7e4ea1f6a75f58149769319a07  gcc/testsuite/gcc.dg/pr79983.c
  cb869ebc2ecdd8df754ac18110cd5c9e  gcc/testsuite/gcc.dg/pr79985.c
  965303c67250b6dbe25a9353d53d437d  gcc/testsuite/gcc.dg/pr80020.c
*************** c18713c02dd6db585d0b717323e42243  gcc/te
*** 40838,40844 ****
  c381704f7fd8c500ffba6296632beb8a  gcc/testsuite/gcc.dg/pr80693.c
  a4a55216ee4c819695559e579c91916e  gcc/testsuite/gcc.dg/pr80747.c
  e6e71c9080dea97e0bc4c3f479600ac6  gcc/testsuite/gcc.dg/pr80775.c
! 47c7107757486dd89a39aca50218ad10  gcc/testsuite/gcc.dg/pr80776-1.c
  a1a56e30eeac791e16b04c6ea615d1c5  gcc/testsuite/gcc.dg/pr80776-2.c
  3addab71e2436c1b66f925d92eedf42d  gcc/testsuite/gcc.dg/pr80788.c
  3d4371ab487849eb5d5e8fde5732b5f4  gcc/testsuite/gcc.dg/pr80823.c
--- 42602,42608 ----
  c381704f7fd8c500ffba6296632beb8a  gcc/testsuite/gcc.dg/pr80693.c
  a4a55216ee4c819695559e579c91916e  gcc/testsuite/gcc.dg/pr80747.c
  e6e71c9080dea97e0bc4c3f479600ac6  gcc/testsuite/gcc.dg/pr80775.c
! 6c331d26fa88af1c700bceb4d16b4e83  gcc/testsuite/gcc.dg/pr80776-1.c
  a1a56e30eeac791e16b04c6ea615d1c5  gcc/testsuite/gcc.dg/pr80776-2.c
  3addab71e2436c1b66f925d92eedf42d  gcc/testsuite/gcc.dg/pr80788.c
  3d4371ab487849eb5d5e8fde5732b5f4  gcc/testsuite/gcc.dg/pr80823.c
*************** c5719c018c12b0a0dfafc5cce8663b35  gcc/te
*** 40848,40854 ****
  423e68203f69b77d89938e7e12632466  gcc/testsuite/gcc.dg/pr81020.c
  0e9fa6d863f3301949fcec2f6c5d73ec  gcc/testsuite/gcc.dg/pr81030.c
  66ddd134037471a6a0f9653a3d3cee47  gcc/testsuite/gcc.dg/pr81165.c
! 2de0224788ece38079c8970a0ba6621c  gcc/testsuite/gcc.dg/pr81192.c
  597afe973f83e86d9b7fde6d5683f0a2  gcc/testsuite/gcc.dg/pr81227.c
  f8b9e7e40bbdc976061399c74f48e7e0  gcc/testsuite/gcc.dg/pr81228.c
  db7151f89bb35a308fb76b916ed6af28  gcc/testsuite/gcc.dg/pr81281-1.c
--- 42612,42618 ----
  423e68203f69b77d89938e7e12632466  gcc/testsuite/gcc.dg/pr81020.c
  0e9fa6d863f3301949fcec2f6c5d73ec  gcc/testsuite/gcc.dg/pr81030.c
  66ddd134037471a6a0f9653a3d3cee47  gcc/testsuite/gcc.dg/pr81165.c
! b491d1bc57ee8efd2d0cb606d3ba98d4  gcc/testsuite/gcc.dg/pr81192.c
  597afe973f83e86d9b7fde6d5683f0a2  gcc/testsuite/gcc.dg/pr81227.c
  f8b9e7e40bbdc976061399c74f48e7e0  gcc/testsuite/gcc.dg/pr81228.c
  db7151f89bb35a308fb76b916ed6af28  gcc/testsuite/gcc.dg/pr81281-1.c
*************** f033acbc387fbfc3cc80c2bb7eb16554  gcc/te
*** 40893,40905 ****
  926bb5d76c1c3805f39aff025afdf392  gcc/testsuite/gcc.dg/pr82863.c
  64e40fa689444553acd5c162baae6e19  gcc/testsuite/gcc.dg/pr82875.c
  965e1c13fa7c703c3703c4519732dc8d  gcc/testsuite/gcc.dg/pr82916.c
! 18a82028cfde6d1a31425d957f2650e8  gcc/testsuite/gcc.dg/pr82929-2.c
! e60ee8beac136989d527e9559206833c  gcc/testsuite/gcc.dg/pr82929.c
  3b6383789fec91d0e0c3792510760ca9  gcc/testsuite/gcc.dg/pr82975.c
  c5d86e710565da10cc02dd413d24789e  gcc/testsuite/gcc.dg/pr83034.c
  fd3c9dad463ae33d02b4e94dbd632234  gcc/testsuite/gcc.dg/pr83044.c
  9afadc7286f5f425c917815b09088199  gcc/testsuite/gcc.dg/pr83047.c
  532ab37475e69baa2e1cfaaa30b1b9b3  gcc/testsuite/gcc.dg/pr83072.c
  f07888e58b74d33a6e69cb7e1bff68f5  gcc/testsuite/gcc.dg/pr83089.c
  f15d9e8b068a360ba0c22ea156c8aa69  gcc/testsuite/gcc.dg/pr83100-1.c
  ac3acd9e7ede2310f45dd30cb994a455  gcc/testsuite/gcc.dg/pr83100-2.c
--- 42657,42671 ----
  926bb5d76c1c3805f39aff025afdf392  gcc/testsuite/gcc.dg/pr82863.c
  64e40fa689444553acd5c162baae6e19  gcc/testsuite/gcc.dg/pr82875.c
  965e1c13fa7c703c3703c4519732dc8d  gcc/testsuite/gcc.dg/pr82916.c
! ada93469f2803f51331d0c7247497718  gcc/testsuite/gcc.dg/pr82929-2.c
! 18e8280f133ffa195930c7fb0a6dddf3  gcc/testsuite/gcc.dg/pr82929.c
  3b6383789fec91d0e0c3792510760ca9  gcc/testsuite/gcc.dg/pr82975.c
  c5d86e710565da10cc02dd413d24789e  gcc/testsuite/gcc.dg/pr83034.c
  fd3c9dad463ae33d02b4e94dbd632234  gcc/testsuite/gcc.dg/pr83044.c
  9afadc7286f5f425c917815b09088199  gcc/testsuite/gcc.dg/pr83047.c
+ 3e5041473efe3b22e02270b61876ffeb  gcc/testsuite/gcc.dg/pr83072-2.c
  532ab37475e69baa2e1cfaaa30b1b9b3  gcc/testsuite/gcc.dg/pr83072.c
+ c1804299d67bf5c8bb4cdc800844ef3f  gcc/testsuite/gcc.dg/pr83073.c
  f07888e58b74d33a6e69cb7e1bff68f5  gcc/testsuite/gcc.dg/pr83089.c
  f15d9e8b068a360ba0c22ea156c8aa69  gcc/testsuite/gcc.dg/pr83100-1.c
  ac3acd9e7ede2310f45dd30cb994a455  gcc/testsuite/gcc.dg/pr83100-2.c
*************** c63e7806c3d2d9248a99f9d2bbc5619b  gcc/te
*** 40986,40992 ****
  350ecde2080adce3b16ae868d60d4aa7  gcc/testsuite/gcc.dg/pr84841.c
  0b86071d460e95cfac961b6b9e5ddc6d  gcc/testsuite/gcc.dg/pr84853.c
  13a2c6ed4e8585ccd298c2bbe58a83f9  gcc/testsuite/gcc.dg/pr84875.c
! 156b60629072526d3d0bf2457bd6ed5f  gcc/testsuite/gcc.dg/pr84877.c
  4294a6745f3296677b46dd5bfd884901  gcc/testsuite/gcc.dg/pr84899.c
  dbf69b3874174be30af9ef57a4dddf35  gcc/testsuite/gcc.dg/pr84941.c
  10853acb471ecaea1557d0f0b8f741e4  gcc/testsuite/gcc.dg/pr84953.c
--- 42752,42758 ----
  350ecde2080adce3b16ae868d60d4aa7  gcc/testsuite/gcc.dg/pr84841.c
  0b86071d460e95cfac961b6b9e5ddc6d  gcc/testsuite/gcc.dg/pr84853.c
  13a2c6ed4e8585ccd298c2bbe58a83f9  gcc/testsuite/gcc.dg/pr84875.c
! 8c3453d518aaf3430072a5c8b5d6c8db  gcc/testsuite/gcc.dg/pr84877.c
  4294a6745f3296677b46dd5bfd884901  gcc/testsuite/gcc.dg/pr84899.c
  dbf69b3874174be30af9ef57a4dddf35  gcc/testsuite/gcc.dg/pr84941.c
  10853acb471ecaea1557d0f0b8f741e4  gcc/testsuite/gcc.dg/pr84953.c
*************** cb695ce4fc7b5c82485f5253b71e1b94  gcc/te
*** 41021,41026 ****
--- 42787,42794 ----
  d906368ab5f3481fc6dc6dc09f603cb0  gcc/testsuite/gcc.dg/pr85876.c
  601f5b2a64200d54ab02283def0d999d  gcc/testsuite/gcc.dg/pr85899.c
  1c2466ed3580140df949296a1b06cdb8  gcc/testsuite/gcc.dg/pr85955.c
+ 55262bac3fbfbab74602a90f5b27a9ee  gcc/testsuite/gcc.dg/pr86010-2.c
+ e8ffb3480fa440b95d57b5b27ecfa108  gcc/testsuite/gcc.dg/pr86010.c
  4fa81d8b8cee41548372697495c19c43  gcc/testsuite/gcc.dg/pr86038.c
  5b5b4719957d0eedc94603e6199e0bef  gcc/testsuite/gcc.dg/pr86046.c
  e503844b23d99490f4e4ca524c88adf5  gcc/testsuite/gcc.dg/pr86047.c
*************** a8359c428353397ec48b0315ab73faba  gcc/te
*** 41037,41042 ****
--- 42805,42811 ----
  8c8c33b6f45d3f9252fc8c51ddeb30b8  gcc/testsuite/gcc.dg/pr86489.c
  8c5160d7f06fff9c0e8b59f623f4d91c  gcc/testsuite/gcc.dg/pr86572.c
  d2851550c4c046324732068307e768eb  gcc/testsuite/gcc.dg/pr86617.c
+ c045d6a7155d87f33a8a58e18fc8fae0  gcc/testsuite/gcc.dg/pr86723.c
  509e988b3e613c61b734eb2102089a16  gcc/testsuite/gcc.dg/pr86835.c
  7b7fb8ce154bde5bd83bdc72e81a3d98  gcc/testsuite/gcc.dg/pr86928.c
  79448a46523d1165571265ca2c3c651c  gcc/testsuite/gcc.dg/pr86979.c
*************** d2851550c4c046324732068307e768eb  gcc/te
*** 41045,41051 ****
  1eccee440762e525a97556576c144d1f  gcc/testsuite/gcc.dg/pr87024.c
  92af82d0ed0498d359b9b41731157a6f  gcc/testsuite/gcc.dg/pr87025.c
  75b21a531d585a6452f6c1ff03fdf713  gcc/testsuite/gcc.dg/pr87047.c
! 5ddd10338c3ecd2993a70054fcfdae32  gcc/testsuite/gcc.dg/pr87052.c
  7409a4639ad449497636ab1ffd396ab9  gcc/testsuite/gcc.dg/pr87054.c
  573bff30fabe1d954bb7773456e8752b  gcc/testsuite/gcc.dg/pr87074.c
  5b7ec2719e61162c44f1431fa4b8f9d3  gcc/testsuite/gcc.dg/pr87092.c
--- 42814,42820 ----
  1eccee440762e525a97556576c144d1f  gcc/testsuite/gcc.dg/pr87024.c
  92af82d0ed0498d359b9b41731157a6f  gcc/testsuite/gcc.dg/pr87025.c
  75b21a531d585a6452f6c1ff03fdf713  gcc/testsuite/gcc.dg/pr87047.c
! cef0999714582aad49bf69310dcb38b4  gcc/testsuite/gcc.dg/pr87052.c
  7409a4639ad449497636ab1ffd396ab9  gcc/testsuite/gcc.dg/pr87054.c
  573bff30fabe1d954bb7773456e8752b  gcc/testsuite/gcc.dg/pr87074.c
  5b7ec2719e61162c44f1431fa4b8f9d3  gcc/testsuite/gcc.dg/pr87092.c
*************** c94491c9101acbf5f3f978e24437879b  gcc/te
*** 41155,41160 ****
--- 42924,42930 ----
  e6faf0945d1f5f965c65759fe557a7d4  gcc/testsuite/gcc.dg/pr89734.c
  85a523bf44ade39913dc381d9bef54fe  gcc/testsuite/gcc.dg/pr89737.c
  6b4a47585c7d60c9cfe3d8323359f4e4  gcc/testsuite/gcc.dg/pr89795.c
+ 6ef8056a7d60ac6e86aa28b8cd5e3b41  gcc/testsuite/gcc.dg/pr89984.c
  a24193887db72f1e75b2698c04b4ef32  gcc/testsuite/gcc.dg/pr90010.c
  6c043904623c4fbb3870bdf4cf56d084  gcc/testsuite/gcc.dg/pr90037.c
  a930fd978777f4a12a11a2e5ae864cd0  gcc/testsuite/gcc.dg/pr90082.c
*************** b973a838787d1cdd121e558494416509  gcc/te
*** 41256,41261 ****
--- 43026,43035 ----
  40138e8aeca128ff9734d1724ce60836  gcc/testsuite/gcc.dg/pr94436.c
  fd36e17ce5abb4e77212836c4aa61205  gcc/testsuite/gcc.dg/pr94526.c
  d2666025ae58c20e36d06243ec17b107  gcc/testsuite/gcc.dg/pr94574.c
+ ea3f6e969ab9dbd27c6e364f6cd1e41c  gcc/testsuite/gcc.dg/pr94589-1.c
+ 19a2ac85758ac4bfc1b057ee521a0e94  gcc/testsuite/gcc.dg/pr94589-2.c
+ 27b4c51b7060236f318a98e7dfe635d6  gcc/testsuite/gcc.dg/pr94589-3.c
+ 5b6c16adf775aa0ef335b96ef72b0a82  gcc/testsuite/gcc.dg/pr94589-4.c
  f244fa220718f337609f30faac73a8e4  gcc/testsuite/gcc.dg/pr94600-1.c
  515ded7ae44445fdd45ad77c875a9139  gcc/testsuite/gcc.dg/pr94600-2.c
  eaf63adfe02395ba887103318bf0daac  gcc/testsuite/gcc.dg/pr94600-3.c
*************** eaf63adfe02395ba887103318bf0daac  gcc/te
*** 41265,41270 ****
--- 43039,43045 ----
  6f29cad24532ba3f1e3e94e8c890e24a  gcc/testsuite/gcc.dg/pr94600-7.c
  545a7b1899e6db6c3e77c28facf87dca  gcc/testsuite/gcc.dg/pr94600-8.c
  c72df927b15d18de0d1c05eef46be3ba  gcc/testsuite/gcc.dg/pr94705.c
+ 36c0ef124b1789b1569ec56cfa017bd6  gcc/testsuite/gcc.dg/pr94726.c
  3b3ec7fa99929281677300b4678c9928  gcc/testsuite/gcc.dg/pr94780.c
  2a8fd6be342ac636e177ee04b63e5a07  gcc/testsuite/gcc.dg/pr94784.c
  4a231f2fae7b7510cf7b3374a29735db  gcc/testsuite/gcc.dg/pr94842.c
*************** e4dde89601272f1b99612f3aef7cb7e5  gcc/te
*** 41277,41283 ****
  374fe6896d7f734385c9df06306a39f3  gcc/testsuite/gcc.dg/pr95133.c
  130d9acc88fc75c668740cf769b79052  gcc/testsuite/gcc.dg/pr95141.c
  1875568db88d1845f820b932cbc3f859  gcc/testsuite/gcc.dg/pr95171.c
! 79837f1ec92b7f5577d7a9f37e4bf533  gcc/testsuite/gcc.dg/pr95580.c
  5f40dd6be0e7fc5458a04a5165d1690d  gcc/testsuite/gcc.dg/pr95582.c
  aeb304797b8e2c6d1005832c4cef054a  gcc/testsuite/gcc.dg/pr95694.c
  563c3da44149a53b80a4845909b6be8a  gcc/testsuite/gcc.dg/pr95713.c
--- 43052,43058 ----
  374fe6896d7f734385c9df06306a39f3  gcc/testsuite/gcc.dg/pr95133.c
  130d9acc88fc75c668740cf769b79052  gcc/testsuite/gcc.dg/pr95141.c
  1875568db88d1845f820b932cbc3f859  gcc/testsuite/gcc.dg/pr95171.c
! 4ee983c985bfd81b908943d9cadfa2bd  gcc/testsuite/gcc.dg/pr95580.c
  5f40dd6be0e7fc5458a04a5165d1690d  gcc/testsuite/gcc.dg/pr95582.c
  aeb304797b8e2c6d1005832c4cef054a  gcc/testsuite/gcc.dg/pr95694.c
  563c3da44149a53b80a4845909b6be8a  gcc/testsuite/gcc.dg/pr95713.c
*************** c85ad54f7a32606675e871f53ed5eb60  gcc/te
*** 41297,41305 ****
--- 43072,43082 ----
  e81595a04ac86a2f9b83fb199a7245c9  gcc/testsuite/gcc.dg/pr96377-4.c
  20d13f1ecae35ce49fe1ec066b3e7d64  gcc/testsuite/gcc.dg/pr96377-5.c
  96133f3391c2edd8772f7e297726d80c  gcc/testsuite/gcc.dg/pr96377-6.c
+ 5458df4bb939ec2382176f02910669f6  gcc/testsuite/gcc.dg/pr96392.c
  327090f1ff0488bf70d342d108613ef0  gcc/testsuite/gcc.dg/pr96453.c
  6f3a630e04585e6954c3af6c3da4cd68  gcc/testsuite/gcc.dg/pr96466.c
  f6dbe508409f3fdef69bb18356571537  gcc/testsuite/gcc.dg/pr96514.c
+ 0430e37607f9ac0b8eaff3c88ecd3247  gcc/testsuite/gcc.dg/pr96542.c
  12772272fb5504a0b84c4743fde95b04  gcc/testsuite/gcc.dg/pr96558.c
  3ee9fc3b7d139b2e57d06a5c240864a3  gcc/testsuite/gcc.dg/pr96573.c
  06ae27dde8da22331e1e8dcd059d4d03  gcc/testsuite/gcc.dg/pr96579.c
*************** b5fa0cd5917ab8447128f90c9aa66d86  gcc/te
*** 41343,41349 ****
  30f53d499facb7677def27401106f489  gcc/testsuite/gcc.dg/pr97534.c
  8de28fbb1fc8308939d75b5aa08ac83a  gcc/testsuite/gcc.dg/pr97539.c
  5d0af6aab5fe5b236b6b147eaae46687  gcc/testsuite/gcc.dg/pr97555.c
! d475f5693217d1089a8f364e12186d86  gcc/testsuite/gcc.dg/pr97567-2.c
  bb0f91c384e2b0c10f6a2b569f227ce2  gcc/testsuite/gcc.dg/pr97567.c
  9109b1f7500a802befa961d356457496  gcc/testsuite/gcc.dg/pr97579.c
  691c363da5b53e768141125051f86be1  gcc/testsuite/gcc.dg/pr97596.c
--- 43120,43126 ----
  30f53d499facb7677def27401106f489  gcc/testsuite/gcc.dg/pr97534.c
  8de28fbb1fc8308939d75b5aa08ac83a  gcc/testsuite/gcc.dg/pr97539.c
  5d0af6aab5fe5b236b6b147eaae46687  gcc/testsuite/gcc.dg/pr97555.c
! 9880fafb7b08dedd5b0d2ad9a74defe4  gcc/testsuite/gcc.dg/pr97567-2.c
  bb0f91c384e2b0c10f6a2b569f227ce2  gcc/testsuite/gcc.dg/pr97567.c
  9109b1f7500a802befa961d356457496  gcc/testsuite/gcc.dg/pr97579.c
  691c363da5b53e768141125051f86be1  gcc/testsuite/gcc.dg/pr97596.c
*************** dd83a8b867ef8c886adacb097f55bc6b  gcc/te
*** 41368,41373 ****
--- 43145,43151 ----
  ec1830becced622760bda688ca2bb126  gcc/testsuite/gcc.dg/pr9814-1.c
  58a90f953d863b4da3602876f58c3dad  gcc/testsuite/gcc.dg/pr98147.c
  ab67ce545d0c71a9f5f15c381f3e0c67  gcc/testsuite/gcc.dg/pr98190.c
+ 06873fe076c24bd9c80510ca25414ed4  gcc/testsuite/gcc.dg/pr98198.c
  46ac3184f9690034210e99d5d2ca729e  gcc/testsuite/gcc.dg/pr98211.c
  0ffdbfe76fd130e510ec19ac27307b9d  gcc/testsuite/gcc.dg/pr98255.c
  885b5b8dbec3343d2d1f7815afe1fba4  gcc/testsuite/gcc.dg/pr98271.c
*************** bab0f33f3dc1129eb8dcb00974efb2ba  gcc/te
*** 41375,41388 ****
  358377419a8fc398557c8e69170ddbc9  gcc/testsuite/gcc.dg/pr98287.c
  7970814b2b083dc51dccbb47c9b622d3  gcc/testsuite/gcc.dg/pr98330.c
  2232cd10c89412a750db8fa0a772b747  gcc/testsuite/gcc.dg/pr98331.c
! 4f0e63f00efd7d973808399703ca48a9  gcc/testsuite/gcc.dg/pr98721-1.c
  b21ece181cd66a1e64aa9dde33e8d1d0  gcc/testsuite/gcc.dg/pr98721-2.c
  6f1182e067a6b12f97acf69996773c2e  gcc/testsuite/gcc.dg/pr98766.c
  adabb0bef50f4d7481373e03730d7eca  gcc/testsuite/gcc.dg/pr98793.c
  740d7fb36e41a4cae562cdea26998ff2  gcc/testsuite/gcc.dg/pr98807.c
  310114e6ce04de1373727da3fff452a3  gcc/testsuite/gcc.dg/pr99104.c
  c8ed2bc909c8f2213b8af5e0e34bb1fc  gcc/testsuite/gcc.dg/pr99122-1.c
! d309a0c8c644885e7798b22c4789bc63  gcc/testsuite/gcc.dg/pr99122-2.c
  18aad8f5bd43bff2ff6c9709072d550c  gcc/testsuite/gcc.dg/pr99122-3.c
  2eea8fc255e64207bc4e80b2eb33a6f0  gcc/testsuite/gcc.dg/pr99136.c
  915d115cd30c8f24c98345c9a7a5593c  gcc/testsuite/gcc.dg/pr99224.c
--- 43153,43167 ----
  358377419a8fc398557c8e69170ddbc9  gcc/testsuite/gcc.dg/pr98287.c
  7970814b2b083dc51dccbb47c9b622d3  gcc/testsuite/gcc.dg/pr98330.c
  2232cd10c89412a750db8fa0a772b747  gcc/testsuite/gcc.dg/pr98331.c
! fe3fce151ef7e045021498cdad0f3ecf  gcc/testsuite/gcc.dg/pr98420.c
! cb517fef5185a3c728c4f6a074659af6  gcc/testsuite/gcc.dg/pr98721-1.c
  b21ece181cd66a1e64aa9dde33e8d1d0  gcc/testsuite/gcc.dg/pr98721-2.c
  6f1182e067a6b12f97acf69996773c2e  gcc/testsuite/gcc.dg/pr98766.c
  adabb0bef50f4d7481373e03730d7eca  gcc/testsuite/gcc.dg/pr98793.c
  740d7fb36e41a4cae562cdea26998ff2  gcc/testsuite/gcc.dg/pr98807.c
  310114e6ce04de1373727da3fff452a3  gcc/testsuite/gcc.dg/pr99104.c
  c8ed2bc909c8f2213b8af5e0e34bb1fc  gcc/testsuite/gcc.dg/pr99122-1.c
! 3efab6f8b5fe7930094ba4b39f130934  gcc/testsuite/gcc.dg/pr99122-2.c
  18aad8f5bd43bff2ff6c9709072d550c  gcc/testsuite/gcc.dg/pr99122-3.c
  2eea8fc255e64207bc4e80b2eb33a6f0  gcc/testsuite/gcc.dg/pr99136.c
  915d115cd30c8f24c98345c9a7a5593c  gcc/testsuite/gcc.dg/pr99224.c
*************** cf29b4ab0f03a85493ce03864c0d7d66  gcc/te
*** 41393,41398 ****
--- 43172,43178 ----
  da013fc0611d4266aee473477103102e  gcc/testsuite/gcc.dg/pr99578-1.c
  fcdb7388a496127166d135b7cc9b48d5  gcc/testsuite/gcc.dg/pr99578-2.c
  5ae348872cbdd648ed6f940aaa17b0a7  gcc/testsuite/gcc.dg/pr99578-3.c
+ 34103b3b1bf68d7eab44e5d9a5acc5e3  gcc/testsuite/gcc.dg/pr99708.c
  110164c4d9d3f245273a057dc1b1b2e8  gcc/testsuite/gcc.dg/pr99830.c
  3b590df752b036d072955c45dcde9fda  gcc/testsuite/gcc.dg/pr99882.c
  bd1dd69944d498943ec98b799196b332  gcc/testsuite/gcc.dg/pr99990.c
*************** bd1dd69944d498943ec98b799196b332  gcc/te
*** 41401,41406 ****
--- 43181,43187 ----
  afcceb4d1454686aec15563b318f6f87  gcc/testsuite/gcc.dg/pragma-darwin-2.c
  cd69ccaaeda9135ad00087594e6184dc  gcc/testsuite/gcc.dg/pragma-darwin.c
  5f2a2de0d5914faa1ba7ad8f5b1996d0  gcc/testsuite/gcc.dg/pragma-diag-1.c
+ 4d38693f433bacf50dd2fbcc072129a1  gcc/testsuite/gcc.dg/pragma-diag-10.c
  3927755743a61af316a63adaa0bfa70b  gcc/testsuite/gcc.dg/pragma-diag-2.c
  b0f8c4136fa3fadda0bb7286049aebb9  gcc/testsuite/gcc.dg/pragma-diag-3.c
  7b506a3b87be9653f7adc0616c85ddaf  gcc/testsuite/gcc.dg/pragma-diag-4.c
*************** d6168f0bfa501820da2947f6acdd96ef  gcc/te
*** 41408,41413 ****
--- 43189,43195 ----
  723d12527ff2fe04be31723543977c45  gcc/testsuite/gcc.dg/pragma-diag-6.c
  ff83f1142d27828d619d4abf6063f64d  gcc/testsuite/gcc.dg/pragma-diag-7.c
  d96f1f1b79bd3d34227f08f817f8c40a  gcc/testsuite/gcc.dg/pragma-diag-8.c
+ 20bd3032dd6845e04711518dc791d12e  gcc/testsuite/gcc.dg/pragma-diag-9.c
  24a9270f9a6635bb396c6d700a9d9d2c  gcc/testsuite/gcc.dg/pragma-init-fini-2.c
  8ea7784f3024c6da48a3ea846fb015cf  gcc/testsuite/gcc.dg/pragma-init-fini.c
  811b358bae37344e12a6159506ad1c6e  gcc/testsuite/gcc.dg/pragma-message.c
*************** e5fa04b57a4c6ee2a8578c05f2e54789  gcc/te
*** 41423,41429 ****
  7123af8ec1f3b12791e84b28ccbb0953  gcc/testsuite/gcc.dg/pragma-re-3.c
  334a71ce68396a366d840cccfec441ea  gcc/testsuite/gcc.dg/pragma-re-4.c
  efa6034cc39517afbb457a507e9ce345  gcc/testsuite/gcc.dg/precedence-1.c
! 3ff4dc414d63c2f4e50f2927eea0226d  gcc/testsuite/gcc.dg/predict-1.c
  26354537bffc13b99bf0e1d5cb7ba10d  gcc/testsuite/gcc.dg/predict-10.c
  9b19aba5c4c546aafc87068f0bbb734f  gcc/testsuite/gcc.dg/predict-11.c
  4da8f82073c0bc61430ea433749f19b6  gcc/testsuite/gcc.dg/predict-12.c
--- 43205,43211 ----
  7123af8ec1f3b12791e84b28ccbb0953  gcc/testsuite/gcc.dg/pragma-re-3.c
  334a71ce68396a366d840cccfec441ea  gcc/testsuite/gcc.dg/pragma-re-4.c
  efa6034cc39517afbb457a507e9ce345  gcc/testsuite/gcc.dg/precedence-1.c
! ea82d4023b231a2f4540f76435c3b6d2  gcc/testsuite/gcc.dg/predict-1.c
  26354537bffc13b99bf0e1d5cb7ba10d  gcc/testsuite/gcc.dg/predict-10.c
  9b19aba5c4c546aafc87068f0bbb734f  gcc/testsuite/gcc.dg/predict-11.c
  4da8f82073c0bc61430ea433749f19b6  gcc/testsuite/gcc.dg/predict-12.c
*************** db02424a4c19e49ec9d7f6697aa99832  gcc/te
*** 41445,41451 ****
  171cce78a4228ac8b270027f6340a2ac  gcc/testsuite/gcc.dg/predict-6.c
  a47ead81e5beea1cb75f310d7e10c52d  gcc/testsuite/gcc.dg/predict-7.c
  2cadf3d000e2f3c9788bc10ee392612f  gcc/testsuite/gcc.dg/predict-8.c
! cfce46e9bf0051dc331ec32dff6f49d6  gcc/testsuite/gcc.dg/predict-9.c
  2b2b0e85d6cc15db42ed6106a0ef0e93  gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c
  43a304205deaf4dc00d6bca3f9c85de7  gcc/testsuite/gcc.dg/profile-dir-1.c
  bae376025f56a65c5687491587f56cf8  gcc/testsuite/gcc.dg/profile-dir-2.c
--- 43227,43233 ----
  171cce78a4228ac8b270027f6340a2ac  gcc/testsuite/gcc.dg/predict-6.c
  a47ead81e5beea1cb75f310d7e10c52d  gcc/testsuite/gcc.dg/predict-7.c
  2cadf3d000e2f3c9788bc10ee392612f  gcc/testsuite/gcc.dg/predict-8.c
! 79e185d42c0bfdcdbd6f1db4255eb902  gcc/testsuite/gcc.dg/predict-9.c
  2b2b0e85d6cc15db42ed6106a0ef0e93  gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c
  43a304205deaf4dc00d6bca3f9c85de7  gcc/testsuite/gcc.dg/profile-dir-1.c
  bae376025f56a65c5687491587f56cf8  gcc/testsuite/gcc.dg/profile-dir-2.c
*************** ce5d2100f84d4a4e7bfd36cbbcf3718c  gcc/te
*** 41487,41492 ****
--- 43269,43276 ----
  ba04fcd2f44edfc1f06dc7aa9579cae1  gcc/testsuite/gcc.dg/recip_sqrt_mult_3.c
  b2955f4c2477c488c30841a9272e52ed  gcc/testsuite/gcc.dg/recip_sqrt_mult_4.c
  1c7f0ddcd855c23f1c0e454fb91e872c  gcc/testsuite/gcc.dg/recip_sqrt_mult_5.c
+ fcaf24026fb4ed57632ba343eba73823  gcc/testsuite/gcc.dg/reciprocal-math-1.c
+ 9970eb26e0394c1aa3faa9fd6e475fc4  gcc/testsuite/gcc.dg/reciprocal-math-2.c
  c5e624b24e249b82a630c8f35e35a5f7  gcc/testsuite/gcc.dg/redecl-1.c
  ac1ad3812f33cd1c2cd61fcddfe2161c  gcc/testsuite/gcc.dg/redecl-10.c
  d0c8e4d6461d4f4c33d3ef57d28c2ca6  gcc/testsuite/gcc.dg/redecl-11.c
*************** a4b7e92b399e9a3ccddd209524470054  gcc/te
*** 41512,41518 ****
--- 43296,43305 ----
  772fbff52dc64a8724e84f0bc8ac12d3  gcc/testsuite/gcc.dg/return-type-1.c
  0d720e1c8f5d6d95b677821c7bae93bb  gcc/testsuite/gcc.dg/return-type-2.c
  650297d80f8b5534796a1a513af1479b  gcc/testsuite/gcc.dg/return-type-3.c
+ 30502501f2c4c1812696fb413bf2ccc2  gcc/testsuite/gcc.dg/rounding-math-1.c
+ 0f96c97b0c55a0d71edeffafb7627b32  gcc/testsuite/gcc.dg/rounding-math-2.c
  e7055b12b2da73125c471ef6e21aec3d  gcc/testsuite/gcc.dg/rtl/aarch64/asr_div1.c
+ b401e32d0fdcef56538c60685124c8d6  gcc/testsuite/gcc.dg/rtl/aarch64/big-endian-cse-1.c
  a1925ccc0f69537c243f239b703bd7e1  gcc/testsuite/gcc.dg/rtl/aarch64/missed-pass-error.c
  c101dc190e024f7cd8e13d412510c399  gcc/testsuite/gcc.dg/rtl/aarch64/multi-subreg-1.c
  82921214d686f1804813b91947084109  gcc/testsuite/gcc.dg/rtl/aarch64/pr71779.c
*************** c101dc190e024f7cd8e13d412510c399  gcc/te
*** 41521,41528 ****
  4a0f9ca943ba4d51c36cafc0f05585af  gcc/testsuite/gcc.dg/rtl/aarch64/test-epilogue-set.c
  a107a9eae4cd59d68f55abfc11da7cec  gcc/testsuite/gcc.dg/rtl/aarch64/unspecified-pass-error.c
  a9069345cbc40d488766c1fbf34c5555  gcc/testsuite/gcc.dg/rtl/arm/ldrd-peepholes.c
  1a862d5804e1cd16507ae8049cf93f0d  gcc/testsuite/gcc.dg/rtl/arm/stl-cond.c
! b437b49380edf6c179f173b6da58be53  gcc/testsuite/gcc.dg/rtl/rtl.exp
  75dd0c3d9daa8abdd58a0d0eaf55bd9e  gcc/testsuite/gcc.dg/rtl/test.c
  555898d2432906a81b3aa66cb112a450  gcc/testsuite/gcc.dg/rtl/truncated-rtl-file.c
  3a9704d0df301152dace95218afa80c6  gcc/testsuite/gcc.dg/rtl/unknown-rtx-code.c
--- 43308,43316 ----
  4a0f9ca943ba4d51c36cafc0f05585af  gcc/testsuite/gcc.dg/rtl/aarch64/test-epilogue-set.c
  a107a9eae4cd59d68f55abfc11da7cec  gcc/testsuite/gcc.dg/rtl/aarch64/unspecified-pass-error.c
  a9069345cbc40d488766c1fbf34c5555  gcc/testsuite/gcc.dg/rtl/arm/ldrd-peepholes.c
+ 85baf2f4880c1f6892aac66e29e93d7a  gcc/testsuite/gcc.dg/rtl/arm/mve-vxbi.c
  1a862d5804e1cd16507ae8049cf93f0d  gcc/testsuite/gcc.dg/rtl/arm/stl-cond.c
! 37b17f2b70583467c4e93a47c239d64c  gcc/testsuite/gcc.dg/rtl/rtl.exp
  75dd0c3d9daa8abdd58a0d0eaf55bd9e  gcc/testsuite/gcc.dg/rtl/test.c
  555898d2432906a81b3aa66cb112a450  gcc/testsuite/gcc.dg/rtl/truncated-rtl-file.c
  3a9704d0df301152dace95218afa80c6  gcc/testsuite/gcc.dg/rtl/unknown-rtx-code.c
*************** f8ab1139f3bd02009859925ec6b4f1ec  gcc/te
*** 41543,41554 ****
  338384785b41985ba946546e69a264d7  gcc/testsuite/gcc.dg/rtl/x86_64/times-two.h
  454cb76cf4a06abba08354e6a236e7a8  gcc/testsuite/gcc.dg/rtl/x86_64/vregs.c
  b1af2df249a0e6a4c994bd1ed21dca0d  gcc/testsuite/gcc.dg/sabd_1.c
  0c3b41d31bc8c5766ef00b41563b6f67  gcc/testsuite/gcc.dg/sancov/basic0.c
  7bc3b2dd6c2595fc002c58318ba0ad0e  gcc/testsuite/gcc.dg/sancov/basic1.c
  c3a18562322c5cc05e7fb2d95a929a8a  gcc/testsuite/gcc.dg/sancov/basic2.c
  6907e496a1c757bd5121a3d41c546181  gcc/testsuite/gcc.dg/sancov/cmp0.c
  10a9db85b046a8ccc1ebb5e953dedb6d  gcc/testsuite/gcc.dg/sancov/pr80444.c
! 2f869698f8a248430a1e9ecd3b3931b5  gcc/testsuite/gcc.dg/sancov/sancov.exp
  d5126a2bd42a9c1593aedafecf29da00  gcc/testsuite/gcc.dg/section1.c
  8ecbb4fd22f228acc936096f5fed21fb  gcc/testsuite/gcc.dg/self-right-shift.c
  00d91fe4b16ca2aeae1cccad86d4c9f2  gcc/testsuite/gcc.dg/semicolon-fixits.c
--- 43331,43350 ----
  338384785b41985ba946546e69a264d7  gcc/testsuite/gcc.dg/rtl/x86_64/times-two.h
  454cb76cf4a06abba08354e6a236e7a8  gcc/testsuite/gcc.dg/rtl/x86_64/vregs.c
  b1af2df249a0e6a4c994bd1ed21dca0d  gcc/testsuite/gcc.dg/sabd_1.c
+ 1e9910f4cb4ae5d35806411d5a76d2eb  gcc/testsuite/gcc.dg/sancov/attribute.c
  0c3b41d31bc8c5766ef00b41563b6f67  gcc/testsuite/gcc.dg/sancov/basic0.c
  7bc3b2dd6c2595fc002c58318ba0ad0e  gcc/testsuite/gcc.dg/sancov/basic1.c
  c3a18562322c5cc05e7fb2d95a929a8a  gcc/testsuite/gcc.dg/sancov/basic2.c
  6907e496a1c757bd5121a3d41c546181  gcc/testsuite/gcc.dg/sancov/cmp0.c
+ 927c5e9b37d200b6cfe636bfd8be7405  gcc/testsuite/gcc.dg/sancov/pr104158-1.c
+ ccb6546b7e60cd1f83eb1e5ac4beafb2  gcc/testsuite/gcc.dg/sancov/pr104158-2.c
+ 858aba4141ef5229621e371c3fd82e05  gcc/testsuite/gcc.dg/sancov/pr104158-3.c
+ 703e86bdfd3666ce9ba5d61b8bd041a9  gcc/testsuite/gcc.dg/sancov/pr104158-4.c
+ eb7e84bf599d4eff95e62177de9c772a  gcc/testsuite/gcc.dg/sancov/pr104158-5.c
+ 7a3f147eba9c1aeac1de411abd4f64cf  gcc/testsuite/gcc.dg/sancov/pr104158-6.c
+ fdf6d2f3e4906aec199d43bc561b5a5d  gcc/testsuite/gcc.dg/sancov/pr104158-7.c
  10a9db85b046a8ccc1ebb5e953dedb6d  gcc/testsuite/gcc.dg/sancov/pr80444.c
! 0efeb1b1dd78a48f33c97ac0594da4de  gcc/testsuite/gcc.dg/sancov/sancov.exp
  d5126a2bd42a9c1593aedafecf29da00  gcc/testsuite/gcc.dg/section1.c
  8ecbb4fd22f228acc936096f5fed21fb  gcc/testsuite/gcc.dg/self-right-shift.c
  00d91fe4b16ca2aeae1cccad86d4c9f2  gcc/testsuite/gcc.dg/semicolon-fixits.c
*************** aaf2153b841fae71456b1ba41211400b  gcc/te
*** 41565,41583 ****
  6f4ffedec35f0de53e9ae24b36462712  gcc/testsuite/gcc.dg/short-compare-1.c
  e95ac1ec5f25aac9c9389159d09b366c  gcc/testsuite/gcc.dg/short-compare-2.c
  d97ba82ddd6d2eff00283bf678a89e32  gcc/testsuite/gcc.dg/shrink-wrap-alloca.c
! fd3dd3581f56d0ad88bba67e6d0421cb  gcc/testsuite/gcc.dg/shrink-wrap-loop.c
  2896386eccf07aa6a0a3b69790bcf72d  gcc/testsuite/gcc.dg/shrink-wrap-pretend.c
  e177bd4a7f3cb433b33b2c59e4e0af3d  gcc/testsuite/gcc.dg/shrink-wrap-sibcall.c
! 109a5b109668bc6e64cf33dd9f157daa  gcc/testsuite/gcc.dg/sibcall-1.c
! 6de1b2d2d4115d205a3f0cae017e19be  gcc/testsuite/gcc.dg/sibcall-10.c
  56436caf606f4a70d8e0249cbe98b609  gcc/testsuite/gcc.dg/sibcall-11.c
! 3c122db62b43b814023fad5c2a91cd3a  gcc/testsuite/gcc.dg/sibcall-2.c
! bc2cfb7088c7f2fe14a1064ffea97325  gcc/testsuite/gcc.dg/sibcall-3.c
! 177336c8844a1e1f0fdd37989ffa799f  gcc/testsuite/gcc.dg/sibcall-4.c
  a4a9d32810747a683dfd61a19a195556  gcc/testsuite/gcc.dg/sibcall-6.c
  62808c704ae0941d6882eb2639725b7e  gcc/testsuite/gcc.dg/sibcall-7.c
  ffee6308d78dda55af86280534155756  gcc/testsuite/gcc.dg/sibcall-8.c
! f1909c553c9bb410a04ebfa73fc4c2b2  gcc/testsuite/gcc.dg/sibcall-9.c
  5b629cb801eca62320ea49a242d8d182  gcc/testsuite/gcc.dg/signbit-sa.c
  333e0feef5b858bcbce745edf0d287f9  gcc/testsuite/gcc.dg/simd-1.c
  ab02b1889f7a1a4dc5afd40bb4ecd23e  gcc/testsuite/gcc.dg/simd-1b.c
--- 43361,43384 ----
  6f4ffedec35f0de53e9ae24b36462712  gcc/testsuite/gcc.dg/short-compare-1.c
  e95ac1ec5f25aac9c9389159d09b366c  gcc/testsuite/gcc.dg/short-compare-2.c
  d97ba82ddd6d2eff00283bf678a89e32  gcc/testsuite/gcc.dg/shrink-wrap-alloca.c
! dcbe36a784d46169abe8a9a404b0c6e0  gcc/testsuite/gcc.dg/shrink-wrap-loop.c
  2896386eccf07aa6a0a3b69790bcf72d  gcc/testsuite/gcc.dg/shrink-wrap-pretend.c
  e177bd4a7f3cb433b33b2c59e4e0af3d  gcc/testsuite/gcc.dg/shrink-wrap-sibcall.c
! 3294e4a5b74b99e369aaf413c51c9d9a  gcc/testsuite/gcc.dg/sibcall-1.c
! 85669fc6c7689b5f5969e64fcf9cfade  gcc/testsuite/gcc.dg/sibcall-10.c
  56436caf606f4a70d8e0249cbe98b609  gcc/testsuite/gcc.dg/sibcall-11.c
! 4475ace1c55af8932ec4fb580e690e52  gcc/testsuite/gcc.dg/sibcall-2.c
! 9271d47e06ad7cb2c71a2e4edebb514c  gcc/testsuite/gcc.dg/sibcall-3.c
! 19ab1b11d16d0636c8e134bc34b747b7  gcc/testsuite/gcc.dg/sibcall-4.c
  a4a9d32810747a683dfd61a19a195556  gcc/testsuite/gcc.dg/sibcall-6.c
  62808c704ae0941d6882eb2639725b7e  gcc/testsuite/gcc.dg/sibcall-7.c
  ffee6308d78dda55af86280534155756  gcc/testsuite/gcc.dg/sibcall-8.c
! a9d1837d9fddf7d1517a251715a86a60  gcc/testsuite/gcc.dg/sibcall-9.c
! 7a3e9302dc9be71c9f7e9b647b813f23  gcc/testsuite/gcc.dg/signbit-2.c
! 66aaf0d9868e1fb506cfc16fea64b403  gcc/testsuite/gcc.dg/signbit-3.c
! 82d412bd422617ac165bdfeefeb96891  gcc/testsuite/gcc.dg/signbit-4.c
! e68c532ae4bed110446fac5be9239c32  gcc/testsuite/gcc.dg/signbit-5.c
! 336150c4fa4cf498d062bcda71db9baf  gcc/testsuite/gcc.dg/signbit-6.c
  5b629cb801eca62320ea49a242d8d182  gcc/testsuite/gcc.dg/signbit-sa.c
  333e0feef5b858bcbce745edf0d287f9  gcc/testsuite/gcc.dg/simd-1.c
  ab02b1889f7a1a4dc5afd40bb4ecd23e  gcc/testsuite/gcc.dg/simd-1b.c
*************** cdcbfe4963d2fb08c5ca3beee8988a3a  gcc/te
*** 41597,41603 ****
  2cef976581d9a7b739ab4028601cccef  gcc/testsuite/gcc.dg/simulate-thread/atomic-other-int128.c
  dd9deecd35e329ea7c8b1a24c3721dfb  gcc/testsuite/gcc.dg/simulate-thread/atomic-other-longlong.c
  bc0a90e6775aacab35294b814a4dc066  gcc/testsuite/gcc.dg/simulate-thread/atomic-other-short.c
! 09fb93f95012eb00700fcf1d5f4e9548  gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.exp
  a551d568c4b3e2e586a288740ed87bc7  gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.gdb
  e01edd8c252c9b0041b4625fb9403160  gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.h
  1206815dd7536f73ea767fa3901ecc15  gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c
--- 43398,43404 ----
  2cef976581d9a7b739ab4028601cccef  gcc/testsuite/gcc.dg/simulate-thread/atomic-other-int128.c
  dd9deecd35e329ea7c8b1a24c3721dfb  gcc/testsuite/gcc.dg/simulate-thread/atomic-other-longlong.c
  bc0a90e6775aacab35294b814a4dc066  gcc/testsuite/gcc.dg/simulate-thread/atomic-other-short.c
! d118407969a5a16a0611900e63db7604  gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.exp
  a551d568c4b3e2e586a288740ed87bc7  gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.gdb
  e01edd8c252c9b0041b4625fb9403160  gcc/testsuite/gcc.dg/simulate-thread/simulate-thread.h
  1206815dd7536f73ea767fa3901ecc15  gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c
*************** d699e78c8f0e5f106aca671faa82b0db  gcc/te
*** 41640,41648 ****
  58b6b7734c2d9522f6acba13d91a557a  gcc/testsuite/gcc.dg/special/alias-1.c
  4b29f93ef3bc27cb9d83fdbc6aaa5b4a  gcc/testsuite/gcc.dg/special/alias-2.c
  d7d4289254a30a2d7a36599f413b3f00  gcc/testsuite/gcc.dg/special/gcsec-1.c
! 62d7166001e7f068286b89f2437a549a  gcc/testsuite/gcc.dg/special/mips-abi.exp
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gcc.dg/special/mips-abi.s
! af05f9c9309efd1178b3edc6aa38567b  gcc/testsuite/gcc.dg/special/special.exp
  401a0d7d075a4091d05bc341cd97d3bf  gcc/testsuite/gcc.dg/special/weak-1.c
  f92cc2fa14e5fe946fde0490c2b6321b  gcc/testsuite/gcc.dg/special/weak-1a.c
  679f99ed535d87ef210f2c69a6777b7e  gcc/testsuite/gcc.dg/special/weak-2.c
--- 43441,43449 ----
  58b6b7734c2d9522f6acba13d91a557a  gcc/testsuite/gcc.dg/special/alias-1.c
  4b29f93ef3bc27cb9d83fdbc6aaa5b4a  gcc/testsuite/gcc.dg/special/alias-2.c
  d7d4289254a30a2d7a36599f413b3f00  gcc/testsuite/gcc.dg/special/gcsec-1.c
! 04740a57266598f38c886d701eb4fd29  gcc/testsuite/gcc.dg/special/mips-abi.exp
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gcc.dg/special/mips-abi.s
! 475eb554781f45c3b7fdc1e19ee727af  gcc/testsuite/gcc.dg/special/special.exp
  401a0d7d075a4091d05bc341cd97d3bf  gcc/testsuite/gcc.dg/special/weak-1.c
  f92cc2fa14e5fe946fde0490c2b6321b  gcc/testsuite/gcc.dg/special/weak-1a.c
  679f99ed535d87ef210f2c69a6777b7e  gcc/testsuite/gcc.dg/special/weak-2.c
*************** e03be8b5734d3729d60b0d2bd31f5e73  gcc/te
*** 41675,41680 ****
--- 43476,43483 ----
  ab1e709f047a05a46aff7f09f2d2450c  gcc/testsuite/gcc.dg/spellcheck-options-20.c
  613c97b6e08a7770bd27a435cc39fe53  gcc/testsuite/gcc.dg/spellcheck-options-21.c
  0e2025204dfb9256031077f17a797409  gcc/testsuite/gcc.dg/spellcheck-options-22.c
+ b69226b2b2d7619f1bdb57acef907160  gcc/testsuite/gcc.dg/spellcheck-options-23.c
+ 314b6880be72551916a0b7fa566baf38  gcc/testsuite/gcc.dg/spellcheck-options-24.c
  49cd9bfd13b6c5defbc7b19ed2b015fb  gcc/testsuite/gcc.dg/spellcheck-options-3.c
  a8d5017ed9919e2f970cfbd34690cfd0  gcc/testsuite/gcc.dg/spellcheck-options-4.c
  2ca2abc2651f3437f77a4661b6e1fcef  gcc/testsuite/gcc.dg/spellcheck-options-5.c
*************** c280fdf8b30c02f59215201f8dacde94  gcc/te
*** 41687,41693 ****
  4b027606d627457f537d4da5f7fac762  gcc/testsuite/gcc.dg/spellcheck-pr83056.c
  8155283fb3fe8f13e7b742eca13c9bae  gcc/testsuite/gcc.dg/spellcheck-stdbool.c
  9a8c6f9098603f0acd1c42a10fec415b  gcc/testsuite/gcc.dg/spellcheck-stdint.c
! 603ea7f8232f23feaf7ab73587b48f17  gcc/testsuite/gcc.dg/spellcheck-stdlib.c
  8246cd5a7d8a2e4d0ea11bf9def939cd  gcc/testsuite/gcc.dg/spellcheck-transposition.c
  e3188822fe2eb498f64ea0ad687f6232  gcc/testsuite/gcc.dg/spellcheck-typenames.c
  d5b447904c327f5cfa57b69050822e4f  gcc/testsuite/gcc.dg/spill-1.c
--- 43490,43496 ----
  4b027606d627457f537d4da5f7fac762  gcc/testsuite/gcc.dg/spellcheck-pr83056.c
  8155283fb3fe8f13e7b742eca13c9bae  gcc/testsuite/gcc.dg/spellcheck-stdbool.c
  9a8c6f9098603f0acd1c42a10fec415b  gcc/testsuite/gcc.dg/spellcheck-stdint.c
! 44384157e4aa4da56203a3ed509127c6  gcc/testsuite/gcc.dg/spellcheck-stdlib.c
  8246cd5a7d8a2e4d0ea11bf9def939cd  gcc/testsuite/gcc.dg/spellcheck-transposition.c
  e3188822fe2eb498f64ea0ad687f6232  gcc/testsuite/gcc.dg/spellcheck-typenames.c
  d5b447904c327f5cfa57b69050822e4f  gcc/testsuite/gcc.dg/spill-1.c
*************** a22c0db258dd69508b2ceb6070cac172  gcc/te
*** 41702,41717 ****
  70c0f8d6fc8dfd96b3356185306477b4  gcc/testsuite/gcc.dg/sso-1.c
  9821ad4cb043e8bea1647783db517677  gcc/testsuite/gcc.dg/sso-10.c
  69fbd818614a3c1f7529e6e1957b7a16  gcc/testsuite/gcc.dg/sso-11.c
! e5a2d2cf2501ec1e111692875eb21b34  gcc/testsuite/gcc.dg/sso-14.c
  ae63ef59d4955da47b8b32d066fbadb0  gcc/testsuite/gcc.dg/sso-16.c
  1596e67c3fd5ccc4a9264cba4aa398c4  gcc/testsuite/gcc.dg/sso-2.c
  4a6f7bb1645423ba5d23a61f98233d1d  gcc/testsuite/gcc.dg/sso-3.c
  edaa32662275ea6100c4a0657754194a  gcc/testsuite/gcc.dg/sso-4.c
  59162427b88b2734a1718acc697b4048  gcc/testsuite/gcc.dg/sso-5.c
! 8671a45b945acb0f7fc404150e754a04  gcc/testsuite/gcc.dg/sso-6.c
  c16439c6779a536d905a874ebe75089b  gcc/testsuite/gcc.dg/sso-7.c
  463f108109596d2759735004c4a38105  gcc/testsuite/gcc.dg/sso-8.c
- ea0c702192e45a5e4d77ad799b1b12b8  gcc/testsuite/gcc.dg/sso-9.c
  23a0312d5314bd8921b89e08c802b7be  gcc/testsuite/gcc.dg/sso/dump.h
  718a9c8b5dfa53c6e124d90b68d01799  gcc/testsuite/gcc.dg/sso/init1.h
  7bfaad8f0363f97343dba9bfc0dee549  gcc/testsuite/gcc.dg/sso/init13.h
--- 43505,43522 ----
  70c0f8d6fc8dfd96b3356185306477b4  gcc/testsuite/gcc.dg/sso-1.c
  9821ad4cb043e8bea1647783db517677  gcc/testsuite/gcc.dg/sso-10.c
  69fbd818614a3c1f7529e6e1957b7a16  gcc/testsuite/gcc.dg/sso-11.c
! 83908aa059f275701c73b0c94be43975  gcc/testsuite/gcc.dg/sso-12.c
! 3d32481dd0b8a08ae2623c52701ef30a  gcc/testsuite/gcc.dg/sso-13.c
! 29f6b01322fd3f283d659295b7a42257  gcc/testsuite/gcc.dg/sso-14.c
! c248e635d1ac4e803a2fd1f8e029c98b  gcc/testsuite/gcc.dg/sso-15.c
  ae63ef59d4955da47b8b32d066fbadb0  gcc/testsuite/gcc.dg/sso-16.c
  1596e67c3fd5ccc4a9264cba4aa398c4  gcc/testsuite/gcc.dg/sso-2.c
  4a6f7bb1645423ba5d23a61f98233d1d  gcc/testsuite/gcc.dg/sso-3.c
  edaa32662275ea6100c4a0657754194a  gcc/testsuite/gcc.dg/sso-4.c
  59162427b88b2734a1718acc697b4048  gcc/testsuite/gcc.dg/sso-5.c
! d14bc25096937b718d671c0c7cd3ddb3  gcc/testsuite/gcc.dg/sso-6.c
  c16439c6779a536d905a874ebe75089b  gcc/testsuite/gcc.dg/sso-7.c
  463f108109596d2759735004c4a38105  gcc/testsuite/gcc.dg/sso-8.c
  23a0312d5314bd8921b89e08c802b7be  gcc/testsuite/gcc.dg/sso/dump.h
  718a9c8b5dfa53c6e124d90b68d01799  gcc/testsuite/gcc.dg/sso/init1.h
  7bfaad8f0363f97343dba9bfc0dee549  gcc/testsuite/gcc.dg/sso/init13.h
*************** dfb751744ae63c43f989ee13f0e517d6  gcc/te
*** 41755,41761 ****
  5acf2012225c2563f5111699dc108d4e  gcc/testsuite/gcc.dg/sso/s6.c
  2881d668843202ec4c4e53caf7d29b7c  gcc/testsuite/gcc.dg/sso/s7.c
  dc1e222143fcffd35ee8b32c36dfe5e9  gcc/testsuite/gcc.dg/sso/s8.c
! 0fe0f7d1a669f7c878a1c7339aeb7284  gcc/testsuite/gcc.dg/sso/sso.exp
  72a4bbb7159286bb235d6cc0329af835  gcc/testsuite/gcc.dg/sso/t1.c
  093ed74aa99ca9c9bc8760b6167c6c6f  gcc/testsuite/gcc.dg/sso/t13.c
  7b8e3ada92eb2f2a4e4aea8f81dd9b16  gcc/testsuite/gcc.dg/sso/t2.c
--- 43560,43566 ----
  5acf2012225c2563f5111699dc108d4e  gcc/testsuite/gcc.dg/sso/s6.c
  2881d668843202ec4c4e53caf7d29b7c  gcc/testsuite/gcc.dg/sso/s7.c
  dc1e222143fcffd35ee8b32c36dfe5e9  gcc/testsuite/gcc.dg/sso/s8.c
! bc2abab71776516b96584c5060b68a6f  gcc/testsuite/gcc.dg/sso/sso.exp
  72a4bbb7159286bb235d6cc0329af835  gcc/testsuite/gcc.dg/sso/t1.c
  093ed74aa99ca9c9bc8760b6167c6c6f  gcc/testsuite/gcc.dg/sso/t13.c
  7b8e3ada92eb2f2a4e4aea8f81dd9b16  gcc/testsuite/gcc.dg/sso/t2.c
*************** b626c83312eea994d97f8f460e6cc56e  gcc/te
*** 41786,41792 ****
  3eb20a070e129b9f71ad84ec481fe8df  gcc/testsuite/gcc.dg/stack-layout-1.c
  d5355400a72402c33417096b04dc2a5d  gcc/testsuite/gcc.dg/stack-layout-2.c
  07e6a63f5ceb593a5ec396e028fd341c  gcc/testsuite/gcc.dg/stack-layout-dynamic-1.c
! 87b5eb4f9298b1723128a8928584e213  gcc/testsuite/gcc.dg/stack-usage-1.c
  198c846924d490e8eba17829d0caf626  gcc/testsuite/gcc.dg/stack-usage-2.c
  abeae7e4a2120581a50d5eb7cbe3929d  gcc/testsuite/gcc.dg/stackprotectexplicit1.c
  f4760013e77ec339cce4491012f46d96  gcc/testsuite/gcc.dg/stdint-width-1.c
--- 43591,43597 ----
  3eb20a070e129b9f71ad84ec481fe8df  gcc/testsuite/gcc.dg/stack-layout-1.c
  d5355400a72402c33417096b04dc2a5d  gcc/testsuite/gcc.dg/stack-layout-2.c
  07e6a63f5ceb593a5ec396e028fd341c  gcc/testsuite/gcc.dg/stack-layout-dynamic-1.c
! 33845ee1e7047b8e21181d9479f62d90  gcc/testsuite/gcc.dg/stack-usage-1.c
  198c846924d490e8eba17829d0caf626  gcc/testsuite/gcc.dg/stack-usage-2.c
  abeae7e4a2120581a50d5eb7cbe3929d  gcc/testsuite/gcc.dg/stackprotectexplicit1.c
  f4760013e77ec339cce4491012f46d96  gcc/testsuite/gcc.dg/stdint-width-1.c
*************** cc4c4b4f3d828c816c22793a90c03eb1  gcc/te
*** 41799,41835 ****
  e8b154bfa9661e586ca67b12e324ad02  gcc/testsuite/gcc.dg/stmt-expr-label-2.c
  6450ef5d1439a329c199247e49aee90e  gcc/testsuite/gcc.dg/stmt-expr-label-3.c
  9fc4eee34dd19fc2d18bd2a3eae50294  gcc/testsuite/gcc.dg/store-motion-fgcse-sm.c
! e0d90170fec34d2e9843635c847ee9a2  gcc/testsuite/gcc.dg/store_merging_1.c
  9d8209995fca2df12571920f8e326a3e  gcc/testsuite/gcc.dg/store_merging_10.c
! a109e2ac210b757b156e08e080200bc4  gcc/testsuite/gcc.dg/store_merging_11.c
  eeab30da05177d869377ee4a3d62970a  gcc/testsuite/gcc.dg/store_merging_12.c
! 3a76616f9306535231cce493f3262d49  gcc/testsuite/gcc.dg/store_merging_13.c
  8e343943576353835b40657c45d51428  gcc/testsuite/gcc.dg/store_merging_14.c
! 8c178c1dd3975bbcf9ba458de3decd0c  gcc/testsuite/gcc.dg/store_merging_15.c
! 4c32665eb4e752ce7055edceb22c4b6e  gcc/testsuite/gcc.dg/store_merging_16.c
  26403e8ae1d70e44af1f5f33343f4a2a  gcc/testsuite/gcc.dg/store_merging_17.c
! d8bf4e6b4bf0702b7e4c2c4100d8cb3e  gcc/testsuite/gcc.dg/store_merging_18.c
! fb85d33578c0e123ddab968b01d4dfd8  gcc/testsuite/gcc.dg/store_merging_19.c
  516117f10841e46c17e880197dde01b3  gcc/testsuite/gcc.dg/store_merging_2.c
  974e9bde77a5300698b30ff61c50d1e9  gcc/testsuite/gcc.dg/store_merging_20.c
  ff5638c9cb6bd567e0a1a1acee287fe2  gcc/testsuite/gcc.dg/store_merging_21.c
  666c23b91a9d4963e2974241c1260914  gcc/testsuite/gcc.dg/store_merging_22.c
  8a2529cece8341002912b186b74e8c31  gcc/testsuite/gcc.dg/store_merging_23.c
! cf8a742517267152194585f2d3f6655a  gcc/testsuite/gcc.dg/store_merging_24.c
! b8d753a689797b688f39fae9849e693a  gcc/testsuite/gcc.dg/store_merging_25.c
  af0343f50f92a499fc770a17af678259  gcc/testsuite/gcc.dg/store_merging_26.c
  7e9f03ad798188d5d5b8e44bbae6541a  gcc/testsuite/gcc.dg/store_merging_27.c
! c18686f45327d3a1c56c7f19879baedd  gcc/testsuite/gcc.dg/store_merging_28.c
! 7a3c7adc06d77f9becf19d04c3293a76  gcc/testsuite/gcc.dg/store_merging_29.c
  56080724c1ff1c4c6a172904b8f5c98f  gcc/testsuite/gcc.dg/store_merging_3.c
! 7f59f2a6fb2eb079c8c429172bb5d695  gcc/testsuite/gcc.dg/store_merging_30.c
  3ac20d27eb6c70b175f98876315965ec  gcc/testsuite/gcc.dg/store_merging_31.c
  73a2472c7fe6b42a2e5202831d7f9d44  gcc/testsuite/gcc.dg/store_merging_32.c
  4a298139bf054dd3d0953770ef9b1b00  gcc/testsuite/gcc.dg/store_merging_4.c
! deedb906ed368bac0601209a2c2261f3  gcc/testsuite/gcc.dg/store_merging_5.c
  ea21a24c07aa6b8a3457a96d70a092eb  gcc/testsuite/gcc.dg/store_merging_6.c
! a69a4075eb92fc05a60f69e088db8d27  gcc/testsuite/gcc.dg/store_merging_7.c
! eb758dcebb0bb362b30a465d9466f0b7  gcc/testsuite/gcc.dg/store_merging_8.c
  db02e6f1e64dbc4b601778792b8681a1  gcc/testsuite/gcc.dg/store_merging_9.c
  9128d1ed469e0ac6af082ba93bf0e146  gcc/testsuite/gcc.dg/strcmp-1.c
  e14c1b011d487de14301ef04690181db  gcc/testsuite/gcc.dg/strcmpopt_1.c
--- 43604,43640 ----
  e8b154bfa9661e586ca67b12e324ad02  gcc/testsuite/gcc.dg/stmt-expr-label-2.c
  6450ef5d1439a329c199247e49aee90e  gcc/testsuite/gcc.dg/stmt-expr-label-3.c
  9fc4eee34dd19fc2d18bd2a3eae50294  gcc/testsuite/gcc.dg/store-motion-fgcse-sm.c
! 25175d58e581025c96313c78fb7fef7c  gcc/testsuite/gcc.dg/store_merging_1.c
  9d8209995fca2df12571920f8e326a3e  gcc/testsuite/gcc.dg/store_merging_10.c
! ba8b96c7352a2a3f667167533e75a1d0  gcc/testsuite/gcc.dg/store_merging_11.c
  eeab30da05177d869377ee4a3d62970a  gcc/testsuite/gcc.dg/store_merging_12.c
! bb26c0da7df248d044cf5f83428206bf  gcc/testsuite/gcc.dg/store_merging_13.c
  8e343943576353835b40657c45d51428  gcc/testsuite/gcc.dg/store_merging_14.c
! 6dfbd7669b05fa32377f1d387f6b10fd  gcc/testsuite/gcc.dg/store_merging_15.c
! a9371402086b38138c9017bde847bf83  gcc/testsuite/gcc.dg/store_merging_16.c
  26403e8ae1d70e44af1f5f33343f4a2a  gcc/testsuite/gcc.dg/store_merging_17.c
! 7a99330458cafca53d5652eb17cf7a70  gcc/testsuite/gcc.dg/store_merging_18.c
! 13cc1dd3f3c86243edc35d95deff2795  gcc/testsuite/gcc.dg/store_merging_19.c
  516117f10841e46c17e880197dde01b3  gcc/testsuite/gcc.dg/store_merging_2.c
  974e9bde77a5300698b30ff61c50d1e9  gcc/testsuite/gcc.dg/store_merging_20.c
  ff5638c9cb6bd567e0a1a1acee287fe2  gcc/testsuite/gcc.dg/store_merging_21.c
  666c23b91a9d4963e2974241c1260914  gcc/testsuite/gcc.dg/store_merging_22.c
  8a2529cece8341002912b186b74e8c31  gcc/testsuite/gcc.dg/store_merging_23.c
! d17cc827f586c7f1b12b9b8693881c1d  gcc/testsuite/gcc.dg/store_merging_24.c
! 8a071692eacda0d6396ca28d5188b63e  gcc/testsuite/gcc.dg/store_merging_25.c
  af0343f50f92a499fc770a17af678259  gcc/testsuite/gcc.dg/store_merging_26.c
  7e9f03ad798188d5d5b8e44bbae6541a  gcc/testsuite/gcc.dg/store_merging_27.c
! 6814957a12fe69692e83e04338d7571f  gcc/testsuite/gcc.dg/store_merging_28.c
! 4316f61b01fdd5b4574277d1dc04519b  gcc/testsuite/gcc.dg/store_merging_29.c
  56080724c1ff1c4c6a172904b8f5c98f  gcc/testsuite/gcc.dg/store_merging_3.c
! afed5705a09f3b50d7d8d6e149c5e6b3  gcc/testsuite/gcc.dg/store_merging_30.c
  3ac20d27eb6c70b175f98876315965ec  gcc/testsuite/gcc.dg/store_merging_31.c
  73a2472c7fe6b42a2e5202831d7f9d44  gcc/testsuite/gcc.dg/store_merging_32.c
  4a298139bf054dd3d0953770ef9b1b00  gcc/testsuite/gcc.dg/store_merging_4.c
! 98159ab04b18f429d80ddfc3a361b1a7  gcc/testsuite/gcc.dg/store_merging_5.c
  ea21a24c07aa6b8a3457a96d70a092eb  gcc/testsuite/gcc.dg/store_merging_6.c
! 45835787361da206585a99012a6d809c  gcc/testsuite/gcc.dg/store_merging_7.c
! ab27a95c8f9f82a4a201aa5854535491  gcc/testsuite/gcc.dg/store_merging_8.c
  db02e6f1e64dbc4b601778792b8681a1  gcc/testsuite/gcc.dg/store_merging_9.c
  9128d1ed469e0ac6af082ba93bf0e146  gcc/testsuite/gcc.dg/strcmp-1.c
  e14c1b011d487de14301ef04690181db  gcc/testsuite/gcc.dg/strcmpopt_1.c
*************** eed30eb38892be69f829404e38e53a1a  gcc/te
*** 41930,41936 ****
  fb0fe2a37a887d660525ebc5050b378a  gcc/testsuite/gcc.dg/strlenopt-70.c
  4390481737985ad39389758e25141193  gcc/testsuite/gcc.dg/strlenopt-71.c
  f517625fb4dfc197b865ffbcbc1920d0  gcc/testsuite/gcc.dg/strlenopt-72.c
! 0d0a852db24783320cbea5423a1255ab  gcc/testsuite/gcc.dg/strlenopt-73.c
  f943d414ca77ac18161c54e8056e257b  gcc/testsuite/gcc.dg/strlenopt-74.c
  ea069dd84c600a6fd0eeff7f077e15d3  gcc/testsuite/gcc.dg/strlenopt-75.c
  b6afda10a5c27a727b0d08f21d516d4e  gcc/testsuite/gcc.dg/strlenopt-76.c
--- 43735,43741 ----
  fb0fe2a37a887d660525ebc5050b378a  gcc/testsuite/gcc.dg/strlenopt-70.c
  4390481737985ad39389758e25141193  gcc/testsuite/gcc.dg/strlenopt-71.c
  f517625fb4dfc197b865ffbcbc1920d0  gcc/testsuite/gcc.dg/strlenopt-72.c
! 7b064b4e1861ad0cfd32613c4da3ea17  gcc/testsuite/gcc.dg/strlenopt-73.c
  f943d414ca77ac18161c54e8056e257b  gcc/testsuite/gcc.dg/strlenopt-74.c
  ea069dd84c600a6fd0eeff7f077e15d3  gcc/testsuite/gcc.dg/strlenopt-75.c
  b6afda10a5c27a727b0d08f21d516d4e  gcc/testsuite/gcc.dg/strlenopt-76.c
*************** b6afda10a5c27a727b0d08f21d516d4e  gcc/te
*** 41938,41949 ****
  266cb582a2b22ec485ff4459934b2dff  gcc/testsuite/gcc.dg/strlenopt-78.c
  19ad1d7297ba36f34f9d6cafb32b03df  gcc/testsuite/gcc.dg/strlenopt-79.c
  3483f22866ff8ad2f086a39d551abaeb  gcc/testsuite/gcc.dg/strlenopt-8.c
! 320c6ce596178e65f15744cdcf5b7290  gcc/testsuite/gcc.dg/strlenopt-80.c
  8acdf4a4e0ea9ee3bbe36483c1d0dd90  gcc/testsuite/gcc.dg/strlenopt-81.c
  702c5265fb58aca854e1e7d0a5c48af0  gcc/testsuite/gcc.dg/strlenopt-82.c
  ccdd91fe71fd1e140e311902b699e7f9  gcc/testsuite/gcc.dg/strlenopt-83.c
  83447c2c15df74628ecc8934b1e0e03e  gcc/testsuite/gcc.dg/strlenopt-84.c
! 0948a71458b0fb3214094a22bfdde7ad  gcc/testsuite/gcc.dg/strlenopt-85.c
  c08e64ecfe54fa64822bfeaeda6d1b03  gcc/testsuite/gcc.dg/strlenopt-86.c
  cd320e2676e84d929a39a375a452396b  gcc/testsuite/gcc.dg/strlenopt-87.c
  744d04a9e09981af34af5d0d4c88aca9  gcc/testsuite/gcc.dg/strlenopt-88.c
--- 43743,43754 ----
  266cb582a2b22ec485ff4459934b2dff  gcc/testsuite/gcc.dg/strlenopt-78.c
  19ad1d7297ba36f34f9d6cafb32b03df  gcc/testsuite/gcc.dg/strlenopt-79.c
  3483f22866ff8ad2f086a39d551abaeb  gcc/testsuite/gcc.dg/strlenopt-8.c
! 5a8cb450bfc771d9bf79d689f9f0033c  gcc/testsuite/gcc.dg/strlenopt-80.c
  8acdf4a4e0ea9ee3bbe36483c1d0dd90  gcc/testsuite/gcc.dg/strlenopt-81.c
  702c5265fb58aca854e1e7d0a5c48af0  gcc/testsuite/gcc.dg/strlenopt-82.c
  ccdd91fe71fd1e140e311902b699e7f9  gcc/testsuite/gcc.dg/strlenopt-83.c
  83447c2c15df74628ecc8934b1e0e03e  gcc/testsuite/gcc.dg/strlenopt-84.c
! 620db13fa46ce9e9e74cf97a423b96f9  gcc/testsuite/gcc.dg/strlenopt-85.c
  c08e64ecfe54fa64822bfeaeda6d1b03  gcc/testsuite/gcc.dg/strlenopt-86.c
  cd320e2676e84d929a39a375a452396b  gcc/testsuite/gcc.dg/strlenopt-87.c
  744d04a9e09981af34af5d0d4c88aca9  gcc/testsuite/gcc.dg/strlenopt-88.c
*************** b36a66c501ef03ad7cedb1c40484affd  gcc/te
*** 41954,41966 ****
  7a9eb74d7cdfdbff4aaf7724a1c599f7  gcc/testsuite/gcc.dg/strlenopt-92.c
  359473db5cdd37f1bf6095e84675f821  gcc/testsuite/gcc.dg/strlenopt-93.c
  088575aea180cd1ef854fcc43bef2769  gcc/testsuite/gcc.dg/strlenopt-94.c
  b5f70e58553a0938c1120805bb7995ab  gcc/testsuite/gcc.dg/strlenopt.h
  984ef97553c0d059b2563ed51439cb62  gcc/testsuite/gcc.dg/strncmp-1.c
  f58f592113e43197dadf58bbb685b20d  gcc/testsuite/gcc.dg/strncmp-2.c
  9e121cd0851f3306c9ca051ddcd04530  gcc/testsuite/gcc.dg/strncmp-3.c
  5778a0fbb76227bc62f3513b3543aed6  gcc/testsuite/gcc.dg/strncpy-fix-1.c
  e1737f9100fe39030ff4b356bc6ff29e  gcc/testsuite/gcc.dg/struct-alias-1.c
! 756d07d22a151e89582543f5a88bda9f  gcc/testsuite/gcc.dg/struct-by-value-1.c
  fff906a27910e082e50f16054f4642c4  gcc/testsuite/gcc.dg/struct-by-value-2.c
  690c0c9a2bb5e991b2ad555aa009a37c  gcc/testsuite/gcc.dg/struct-empty-1.c
  34c06efaf6253e43912bfa295951eaa6  gcc/testsuite/gcc.dg/struct-empty-2.c
--- 43759,43772 ----
  7a9eb74d7cdfdbff4aaf7724a1c599f7  gcc/testsuite/gcc.dg/strlenopt-92.c
  359473db5cdd37f1bf6095e84675f821  gcc/testsuite/gcc.dg/strlenopt-93.c
  088575aea180cd1ef854fcc43bef2769  gcc/testsuite/gcc.dg/strlenopt-94.c
+ 92d0e4eba5d71d4f20fc6e1a8575d10f  gcc/testsuite/gcc.dg/strlenopt-95.c
  b5f70e58553a0938c1120805bb7995ab  gcc/testsuite/gcc.dg/strlenopt.h
  984ef97553c0d059b2563ed51439cb62  gcc/testsuite/gcc.dg/strncmp-1.c
  f58f592113e43197dadf58bbb685b20d  gcc/testsuite/gcc.dg/strncmp-2.c
  9e121cd0851f3306c9ca051ddcd04530  gcc/testsuite/gcc.dg/strncmp-3.c
  5778a0fbb76227bc62f3513b3543aed6  gcc/testsuite/gcc.dg/strncpy-fix-1.c
  e1737f9100fe39030ff4b356bc6ff29e  gcc/testsuite/gcc.dg/struct-alias-1.c
! eab81e074a250403be7bbbc61131ba0e  gcc/testsuite/gcc.dg/struct-by-value-1.c
  fff906a27910e082e50f16054f4642c4  gcc/testsuite/gcc.dg/struct-by-value-2.c
  690c0c9a2bb5e991b2ad555aa009a37c  gcc/testsuite/gcc.dg/struct-empty-1.c
  34c06efaf6253e43912bfa295951eaa6  gcc/testsuite/gcc.dg/struct-empty-2.c
*************** d964e9c3d529c43e9ae498a35fdf5775  gcc/te
*** 41977,41983 ****
  fb287bcce152203dc79c5d39fd9cc40f  gcc/testsuite/gcc.dg/struct-semi-2.c
  cb7bc7b759208322b507c9776b24d8df  gcc/testsuite/gcc.dg/struct-semi-3.c
  66baf19ad852a2e36df065445f46962f  gcc/testsuite/gcc.dg/struct-semi-4.c
! 7d03e302578f90d797834544865c3974  gcc/testsuite/gcc.dg/superblock.c
  1ed7413760549398593dc058c3c6bcde  gcc/testsuite/gcc.dg/switch-1.c
  46aae448f4d41836f5a09d93795945ef  gcc/testsuite/gcc.dg/switch-10.c
  ac72d210dcc5205efc0a772acb97390c  gcc/testsuite/gcc.dg/switch-2.c
--- 43783,43789 ----
  fb287bcce152203dc79c5d39fd9cc40f  gcc/testsuite/gcc.dg/struct-semi-2.c
  cb7bc7b759208322b507c9776b24d8df  gcc/testsuite/gcc.dg/struct-semi-3.c
  66baf19ad852a2e36df065445f46962f  gcc/testsuite/gcc.dg/struct-semi-4.c
! 8ad58b0da863d71abd38c59499c37ce3  gcc/testsuite/gcc.dg/superblock.c
  1ed7413760549398593dc058c3c6bcde  gcc/testsuite/gcc.dg/switch-1.c
  46aae448f4d41836f5a09d93795945ef  gcc/testsuite/gcc.dg/switch-10.c
  ac72d210dcc5205efc0a772acb97390c  gcc/testsuite/gcc.dg/switch-2.c
*************** bd750cfcc2981be8695d1ba87cf4e02d  gcc/te
*** 42057,42063 ****
  3ab1a16951cdbfaf172055375ee208b1  gcc/testsuite/gcc.dg/tls/thr-cse-1.c
  f9dca9ba3163a454b601045eb9567803  gcc/testsuite/gcc.dg/tls/thr-init-1.c
  622c1bed70cf0fe0a74c0a5ed3602602  gcc/testsuite/gcc.dg/tls/thr-init-2.c
! 83db2d419cd26d1c003d2759ceaaf3f3  gcc/testsuite/gcc.dg/tls/tls.exp
  972a92c27c38895cc90d496745d8e669  gcc/testsuite/gcc.dg/tls/trivial.c
  25214598e340e56bf7487e493e42c739  gcc/testsuite/gcc.dg/tm/20091013.c
  f9f47372393116a3e58a8470e17cae92  gcc/testsuite/gcc.dg/tm/20091221.c
--- 43863,43869 ----
  3ab1a16951cdbfaf172055375ee208b1  gcc/testsuite/gcc.dg/tls/thr-cse-1.c
  f9dca9ba3163a454b601045eb9567803  gcc/testsuite/gcc.dg/tls/thr-init-1.c
  622c1bed70cf0fe0a74c0a5ed3602602  gcc/testsuite/gcc.dg/tls/thr-init-2.c
! 1906941862e0d2413d2fe4c1c0788405  gcc/testsuite/gcc.dg/tls/tls.exp
  972a92c27c38895cc90d496745d8e669  gcc/testsuite/gcc.dg/tls/trivial.c
  25214598e340e56bf7487e493e42c739  gcc/testsuite/gcc.dg/tm/20091013.c
  f9f47372393116a3e58a8470e17cae92  gcc/testsuite/gcc.dg/tm/20091221.c
*************** fe3f545b4342e4629b8e3f50ec72aa75  gcc/te
*** 42140,42146 ****
  69106475c2239e1185e01df0c747e5d0  gcc/testsuite/gcc.dg/tm/props-5.c
  c6a48dab441b531c2ea8105678947e48  gcc/testsuite/gcc.dg/tm/pub-safety-1.c
  04141c931c3cf5684e6da6b0f18cc32b  gcc/testsuite/gcc.dg/tm/reg-promotion.c
! 8e308717ee283b509f7ae23781b7662f  gcc/testsuite/gcc.dg/tm/tm.exp
  00343bf5eb219ac16f5bb8c4bd59994b  gcc/testsuite/gcc.dg/tm/unsafe.c
  c5937eee848b88c1df5be63f77274eb5  gcc/testsuite/gcc.dg/tm/unused.c
  73db2a051a0e581c5f21d54dac46af4f  gcc/testsuite/gcc.dg/tm/vector-1.c
--- 43946,43952 ----
  69106475c2239e1185e01df0c747e5d0  gcc/testsuite/gcc.dg/tm/props-5.c
  c6a48dab441b531c2ea8105678947e48  gcc/testsuite/gcc.dg/tm/pub-safety-1.c
  04141c931c3cf5684e6da6b0f18cc32b  gcc/testsuite/gcc.dg/tm/reg-promotion.c
! 0f7e358fa43150007ed27ecef9a41a13  gcc/testsuite/gcc.dg/tm/tm.exp
  00343bf5eb219ac16f5bb8c4bd59994b  gcc/testsuite/gcc.dg/tm/unsafe.c
  c5937eee848b88c1df5be63f77274eb5  gcc/testsuite/gcc.dg/tm/unused.c
  73db2a051a0e581c5f21d54dac46af4f  gcc/testsuite/gcc.dg/tm/vector-1.c
*************** e5e7352de17daef20df813c70e9b7a10  gcc/te
*** 42168,42173 ****
--- 43974,43981 ----
  c1a3ac64264ecff096abb31f7a1c60e1  gcc/testsuite/gcc.dg/torture/20191011-1.c
  a268f7e7fe5d358fe2f76cd8fc4ecac3  gcc/testsuite/gcc.dg/torture/20200311-1.c
  682902102f565ed7c61ed171053e8f83  gcc/testsuite/gcc.dg/torture/20200727-0.c
+ 1541425a8d99c32b4a72c395ce05cf51  gcc/testsuite/gcc.dg/torture/20210916.c
+ d31400fbd06cbdeec1327317131c1eef  gcc/testsuite/gcc.dg/torture/20211118-1.c
  6b765185ec201860e2594b08bb18461a  gcc/testsuite/gcc.dg/torture/Wsizeof-pointer-memaccess1.c
  d23f5563695ea2b9898397f0244ca90d  gcc/testsuite/gcc.dg/torture/alias-1.c
  2063dc05a74374000dcf03fc407536e5  gcc/testsuite/gcc.dg/torture/alias-2.c
*************** e09f593e2cab835f9fb2f42fef184aaf  gcc/te
*** 42319,42324 ****
--- 44127,44133 ----
  ee74520c41d30f86fc2e503c64a2c642  gcc/testsuite/gcc.dg/torture/floatn-tg-3.h
  e9f715c66fe1cd22e199951430100c47  gcc/testsuite/gcc.dg/torture/floatn-tg.h
  7734647dadb81caf0ae1f96df53c47f9  gcc/testsuite/gcc.dg/torture/fp-compare.c
+ a68e82ce57a913affc955229b8931ab0  gcc/testsuite/gcc.dg/torture/fp-double-convert-float-1.c
  4a1efbe908d1984e5c7866446e422e72  gcc/testsuite/gcc.dg/torture/fp-int-convert-2.c
  a0c11f3d8611b2fea52d09cbf0b71da3  gcc/testsuite/gcc.dg/torture/fp-int-convert-double.c
  ebde1fd0494ae1b65f239981255691c9  gcc/testsuite/gcc.dg/torture/fp-int-convert-float.c
*************** f8e2abd75769f3a4ef8ad7b9914390be  gcc/te
*** 42349,42354 ****
--- 44158,44165 ----
  4c8473474ab81348950cc8917d5cfdba  gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-4.c
  b433f576987f7d246553ea453e377ab9  gcc/testsuite/gcc.dg/torture/fp-int-convert-timode.c
  ee42b6d1749f9706fac80052d9404d0a  gcc/testsuite/gcc.dg/torture/fp-int-convert.h
+ fa522bb9cccbbb36790dbe8f3372db72  gcc/testsuite/gcc.dg/torture/fp-uint64-convert-double-1.c
+ cdc895418b61034850ab1f2d8c794b24  gcc/testsuite/gcc.dg/torture/fp-uint64-convert-double-2.c
  ff646b4bbd5d24fb83db416b6482d625  gcc/testsuite/gcc.dg/torture/ftrapv-1.c
  9479cb5c7a5a2913427912c1cb622377  gcc/testsuite/gcc.dg/torture/ftrapv-2.c
  4d5a201d0e6acb5cc52023eed6db29dd  gcc/testsuite/gcc.dg/torture/inf-compare-1.c
*************** f509ceab15e52f50f8b11d7cacc6447f  gcc/te
*** 42380,42414 ****
  ba222bffc08c28a180298a0d4c6d6aea  gcc/testsuite/gcc.dg/torture/nested-fn-1.c
  4ac07881b7842f59c3aeffe74b35a881  gcc/testsuite/gcc.dg/torture/parm-coalesce.c
  9d76608a6d99fb21a235151928a24b22  gcc/testsuite/gcc.dg/torture/pr100053.c
! 0d8362cea5953ee4c3b6a1927351150f  gcc/testsuite/gcc.dg/torture/pr100329.c
  9d2f1adc508f8626c3bd56448501eb00  gcc/testsuite/gcc.dg/torture/pr100492.c
! d0754d716d5a46b59b9bef2c75e48953  gcc/testsuite/gcc.dg/torture/pr100519.c
  6335c9430427e1e94a7a58bb8b0b5255  gcc/testsuite/gcc.dg/torture/pr100566.c
  5f5809ecbd695f122244007bc7702241  gcc/testsuite/gcc.dg/torture/pr100672.c
  42ebfa98a65c58d2b4d8a096dc9a472a  gcc/testsuite/gcc.dg/torture/pr100778.c
! 4b5d071569dd623054d8ee1f648c1cfe  gcc/testsuite/gcc.dg/torture/pr100786.c
  8b17a9d424e890ccb3124ad5ef70f837  gcc/testsuite/gcc.dg/torture/pr100923.c
  de1ad14692100748f699bc7db768a51d  gcc/testsuite/gcc.dg/torture/pr100934.c
  cbce37eea923f47befb962cd2af5ac3a  gcc/testsuite/gcc.dg/torture/pr101009.c
  98cc9d39c144197951468109eeb46d9b  gcc/testsuite/gcc.dg/torture/pr101025.c
  76029e5954616d8c3901c12ba9268882  gcc/testsuite/gcc.dg/torture/pr101088.c
  26df74aa3790822d5269438121e02a5d  gcc/testsuite/gcc.dg/torture/pr101105.c
  57148e6e2fc50bb76bc0b325160624ad  gcc/testsuite/gcc.dg/torture/pr101151.c
  ad6242e66d3dccabe71dd1502730f6d6  gcc/testsuite/gcc.dg/torture/pr101173.c
  0014d80eb6a0afc3d44ff252f0d03cc7  gcc/testsuite/gcc.dg/torture/pr101229.c
  556a928be1d2de2f0390088de1d6e46f  gcc/testsuite/gcc.dg/torture/pr101394.c
  a30561c35b626bdca950462ffda37c6f  gcc/testsuite/gcc.dg/torture/pr101512.c
  0fa28c6d57d93a345fb1f4847e5bbded  gcc/testsuite/gcc.dg/torture/pr102124.c
  64f75e9bd3fe7ad8c0a8ce6cdc1a6537  gcc/testsuite/gcc.dg/torture/pr102139.c
  c7fa8c61aab4091ae9cc7d1dac0e5731  gcc/testsuite/gcc.dg/torture/pr102518.c
  9f1dcdf5769944ea067a3a74f74fa4f9  gcc/testsuite/gcc.dg/torture/pr102762.c
  98aa192f1dd77816cc201b3a0ee72edb  gcc/testsuite/gcc.dg/torture/pr103181.c
  547891798420dac575d359e03954b283  gcc/testsuite/gcc.dg/torture/pr103204.c
  190d413f3b81d5e1b395090ae83703be  gcc/testsuite/gcc.dg/torture/pr103237.c
  733762e1d02b2686fe659b417b8dcfb8  gcc/testsuite/gcc.dg/torture/pr103489.c
  66fcee07a56c19209cb4aaa0d4aaaded  gcc/testsuite/gcc.dg/torture/pr103596.c
  187b7ab38abc20e5b403f44030455c53  gcc/testsuite/gcc.dg/torture/pr104402.c
  a88279579fa471a64faeb41da64a9eb4  gcc/testsuite/gcc.dg/torture/pr105198.c
  ded4330fd1cd52783bd9b1761db038ef  gcc/testsuite/gcc.dg/torture/pr16104-1.c
  fc265ee05da2f29f0e92804661cd1f28  gcc/testsuite/gcc.dg/torture/pr17526.c
  01c583edb41b632b835aa892b9c1cb14  gcc/testsuite/gcc.dg/torture/pr17933-1.c
--- 44191,44266 ----
  ba222bffc08c28a180298a0d4c6d6aea  gcc/testsuite/gcc.dg/torture/nested-fn-1.c
  4ac07881b7842f59c3aeffe74b35a881  gcc/testsuite/gcc.dg/torture/parm-coalesce.c
  9d76608a6d99fb21a235151928a24b22  gcc/testsuite/gcc.dg/torture/pr100053.c
! 73b4b3e59f81e5abe002d826d7be5575  gcc/testsuite/gcc.dg/torture/pr100329.c
! da526597c6d1f576574d8aceeee9060d  gcc/testsuite/gcc.dg/torture/pr100398.c
  9d2f1adc508f8626c3bd56448501eb00  gcc/testsuite/gcc.dg/torture/pr100492.c
! 232932e20fd0511dfa266de78f409bb5  gcc/testsuite/gcc.dg/torture/pr100499-1.c
! 81a324c7b609a973d1a7d59affcdcf93  gcc/testsuite/gcc.dg/torture/pr100499-2.c
! 3de8c8a5d80ed7f0d771bb60687b2a10  gcc/testsuite/gcc.dg/torture/pr100499-3.c
! cd3623a9a5449cb82511430f6740d167  gcc/testsuite/gcc.dg/torture/pr100519.c
  6335c9430427e1e94a7a58bb8b0b5255  gcc/testsuite/gcc.dg/torture/pr100566.c
  5f5809ecbd695f122244007bc7702241  gcc/testsuite/gcc.dg/torture/pr100672.c
+ 388a8dff9de0f1e0bbc729715448e744  gcc/testsuite/gcc.dg/torture/pr100740.c
  42ebfa98a65c58d2b4d8a096dc9a472a  gcc/testsuite/gcc.dg/torture/pr100778.c
! ddd13a0e9f6c82227fa9db9ba858a6ea  gcc/testsuite/gcc.dg/torture/pr100786.c
! db4a92573fb7b4975d545fa4f15ac119  gcc/testsuite/gcc.dg/torture/pr100810.c
  8b17a9d424e890ccb3124ad5ef70f837  gcc/testsuite/gcc.dg/torture/pr100923.c
  de1ad14692100748f699bc7db768a51d  gcc/testsuite/gcc.dg/torture/pr100934.c
  cbce37eea923f47befb962cd2af5ac3a  gcc/testsuite/gcc.dg/torture/pr101009.c
  98cc9d39c144197951468109eeb46d9b  gcc/testsuite/gcc.dg/torture/pr101025.c
+ 2b55011d276308c1be94bf690af19257  gcc/testsuite/gcc.dg/torture/pr101031.c
  76029e5954616d8c3901c12ba9268882  gcc/testsuite/gcc.dg/torture/pr101088.c
  26df74aa3790822d5269438121e02a5d  gcc/testsuite/gcc.dg/torture/pr101105.c
  57148e6e2fc50bb76bc0b325160624ad  gcc/testsuite/gcc.dg/torture/pr101151.c
  ad6242e66d3dccabe71dd1502730f6d6  gcc/testsuite/gcc.dg/torture/pr101173.c
+ dfecb28380346e9f2dbd8d4549a8c120  gcc/testsuite/gcc.dg/torture/pr101202.c
  0014d80eb6a0afc3d44ff252f0d03cc7  gcc/testsuite/gcc.dg/torture/pr101229.c
+ f124a75fa8d431e9a4cb51ae745013e2  gcc/testsuite/gcc.dg/torture/pr101230-1.c
+ 8c97ef7037c2c5ab7d516d0de621f000  gcc/testsuite/gcc.dg/torture/pr101278.c
  556a928be1d2de2f0390088de1d6e46f  gcc/testsuite/gcc.dg/torture/pr101394.c
+ 2062200e69fde49ce31e4745b93b98e8  gcc/testsuite/gcc.dg/torture/pr101508.c
  a30561c35b626bdca950462ffda37c6f  gcc/testsuite/gcc.dg/torture/pr101512.c
+ 1d68442a4b4b07a8569fa9937818cdd2  gcc/testsuite/gcc.dg/torture/pr101972.c
  0fa28c6d57d93a345fb1f4847e5bbded  gcc/testsuite/gcc.dg/torture/pr102124.c
+ 5e34dcacf0030cde6601e9b874bb22a3  gcc/testsuite/gcc.dg/torture/pr102131-1.c
+ e4dc9cb21883714723fa42035128ded3  gcc/testsuite/gcc.dg/torture/pr102131-2.c
+ f318abe7af713e8b679c510e8595714f  gcc/testsuite/gcc.dg/torture/pr102131-3.c
+ 9af8b76dc217b162e5bdaaa02eb12716  gcc/testsuite/gcc.dg/torture/pr102131-4.c
  64f75e9bd3fe7ad8c0a8ce6cdc1a6537  gcc/testsuite/gcc.dg/torture/pr102139.c
+ d5163c6f156932f5de0836fe8fa0b277  gcc/testsuite/gcc.dg/torture/pr102149.c
  c7fa8c61aab4091ae9cc7d1dac0e5731  gcc/testsuite/gcc.dg/torture/pr102518.c
  9f1dcdf5769944ea067a3a74f74fa4f9  gcc/testsuite/gcc.dg/torture/pr102762.c
+ a3c41f87aae08d4e9cba88bc348ed344  gcc/testsuite/gcc.dg/torture/pr102920.c
+ 48d348126bbc075e3b79fc3618a5294c  gcc/testsuite/gcc.dg/torture/pr103037.c
  98aa192f1dd77816cc201b3a0ee72edb  gcc/testsuite/gcc.dg/torture/pr103181.c
+ e75d901feda790194edd1915c36638dd  gcc/testsuite/gcc.dg/torture/pr103188.c
  547891798420dac575d359e03954b283  gcc/testsuite/gcc.dg/torture/pr103204.c
+ ad4e212f3feef09fd9d764ba5d8d2e26  gcc/testsuite/gcc.dg/torture/pr103219.c
  190d413f3b81d5e1b395090ae83703be  gcc/testsuite/gcc.dg/torture/pr103237.c
+ aca27cefb4917ea2670cad3f5c135922  gcc/testsuite/gcc.dg/torture/pr103458.c
  733762e1d02b2686fe659b417b8dcfb8  gcc/testsuite/gcc.dg/torture/pr103489.c
  66fcee07a56c19209cb4aaa0d4aaaded  gcc/testsuite/gcc.dg/torture/pr103596.c
+ 0f7b7317cdc4f6ad1b2aa1eabfd47caa  gcc/testsuite/gcc.dg/torture/pr103615.c
+ d2979674496cd04d05965989c8944076  gcc/testsuite/gcc.dg/torture/pr103816.c
+ 4303029e3f8b889e824013e6663b8ee2  gcc/testsuite/gcc.dg/torture/pr103987.c
+ aac1451adc501fbc9dea7a65911d83bc  gcc/testsuite/gcc.dg/torture/pr104279.c
+ 4a9e7313197abb7655c2c5af7e233dc0  gcc/testsuite/gcc.dg/torture/pr104280.c
+ 838939a2e50d7d46a855ffe0eb49f439  gcc/testsuite/gcc.dg/torture/pr104281.c
  187b7ab38abc20e5b403f44030455c53  gcc/testsuite/gcc.dg/torture/pr104402.c
+ aaae688ed537118ecbf8d228f6e3aefb  gcc/testsuite/gcc.dg/torture/pr104467.c
+ 1103b8293ef493bf642f7cc03b53ccb8  gcc/testsuite/gcc.dg/torture/pr104519.c
+ 3561ed178e9fcb2975a9ed3ed15031d2  gcc/testsuite/gcc.dg/torture/pr104543.c
+ 81290c6ff0bfab148b2719643baedcc3  gcc/testsuite/gcc.dg/torture/pr104676.c
+ 2dcd10ebfd5a047c94a2ae5db911090a  gcc/testsuite/gcc.dg/torture/pr104700-1.c
+ e1a314db26d2ed15ee356b265b4fa4f2  gcc/testsuite/gcc.dg/torture/pr104825.c
+ c8496374fcf5671cb66a6bacf8883299  gcc/testsuite/gcc.dg/torture/pr105132.c
+ 122d618652aeac29059cdbb22234c7b4  gcc/testsuite/gcc.dg/torture/pr105148.c
+ ca1b8736d16b2cdaabaec84f87fa4d15  gcc/testsuite/gcc.dg/torture/pr105163.c
+ 4bb8290bc8deebdec4e84b857eeb427d  gcc/testsuite/gcc.dg/torture/pr105166.c
+ 509e1192da177175a7316ce5cdae8534  gcc/testsuite/gcc.dg/torture/pr105185.c
  a88279579fa471a64faeb41da64a9eb4  gcc/testsuite/gcc.dg/torture/pr105198.c
+ 9834733e88257ca7972443d03eaebe1f  gcc/testsuite/gcc.dg/torture/pr105231.c
+ 00902d3e455a0ede903ae5b08e76a48e  gcc/testsuite/gcc.dg/torture/pr105337.c
  ded4330fd1cd52783bd9b1761db038ef  gcc/testsuite/gcc.dg/torture/pr16104-1.c
  fc265ee05da2f29f0e92804661cd1f28  gcc/testsuite/gcc.dg/torture/pr17526.c
  01c583edb41b632b835aa892b9c1cb14  gcc/testsuite/gcc.dg/torture/pr17933-1.c
*************** e663051a4aa64f47325af53cb2960b18  gcc/te
*** 42728,42734 ****
  a8c79c7197781dd887346a246c4ce956  gcc/testsuite/gcc.dg/torture/pr54920.c
  b93cb457fd1a5170cfbaf5df1ef1813c  gcc/testsuite/gcc.dg/torture/pr55011.c
  1b16acab87d7b3b35e53bd7bbcbd8686  gcc/testsuite/gcc.dg/torture/pr55018.c
! dee1dee375b09bb866dc60c0ad613d78  gcc/testsuite/gcc.dg/torture/pr55107.c
  6ef8de2ef8c9eb8479d889281fe63087  gcc/testsuite/gcc.dg/torture/pr55111.c
  41bc0a4d585760a274d33afd2bb5a205  gcc/testsuite/gcc.dg/torture/pr55124.c
  ab9dfacd572dc305339a309d6821c5b4  gcc/testsuite/gcc.dg/torture/pr55238.c
--- 44580,44586 ----
  a8c79c7197781dd887346a246c4ce956  gcc/testsuite/gcc.dg/torture/pr54920.c
  b93cb457fd1a5170cfbaf5df1ef1813c  gcc/testsuite/gcc.dg/torture/pr55011.c
  1b16acab87d7b3b35e53bd7bbcbd8686  gcc/testsuite/gcc.dg/torture/pr55018.c
! 88b4e74b9686cfb79afedf2c1d884a7e  gcc/testsuite/gcc.dg/torture/pr55107.c
  6ef8de2ef8c9eb8479d889281fe63087  gcc/testsuite/gcc.dg/torture/pr55111.c
  41bc0a4d585760a274d33afd2bb5a205  gcc/testsuite/gcc.dg/torture/pr55124.c
  ab9dfacd572dc305339a309d6821c5b4  gcc/testsuite/gcc.dg/torture/pr55238.c
*************** db2531cabf549bacbd10a5d8f0f5bd29  gcc/te
*** 42779,42785 ****
  b60f93b2d8cdc704e6aa2c778095348d  gcc/testsuite/gcc.dg/torture/pr57083.c
  746deffcadc23fb008a837ef894fb75e  gcc/testsuite/gcc.dg/torture/pr57122.c
  ae54d8f7f62dcd343a7673819f36d684  gcc/testsuite/gcc.dg/torture/pr57147-1.c
! 20bb02ad9caa1bddb461ed87fb712836  gcc/testsuite/gcc.dg/torture/pr57147-2.c
  62056e815ba97d36a82876f6c552d149  gcc/testsuite/gcc.dg/torture/pr57147-3.c
  2c294cc3635276068fdee76fd7b1eb82  gcc/testsuite/gcc.dg/torture/pr57214.c
  4901f0628848bf18a655fb924ce0edf6  gcc/testsuite/gcc.dg/torture/pr57251.c
--- 44631,44637 ----
  b60f93b2d8cdc704e6aa2c778095348d  gcc/testsuite/gcc.dg/torture/pr57083.c
  746deffcadc23fb008a837ef894fb75e  gcc/testsuite/gcc.dg/torture/pr57122.c
  ae54d8f7f62dcd343a7673819f36d684  gcc/testsuite/gcc.dg/torture/pr57147-1.c
! 0d36f982f2ee5a202ac0141d7917c00b  gcc/testsuite/gcc.dg/torture/pr57147-2.c
  62056e815ba97d36a82876f6c552d149  gcc/testsuite/gcc.dg/torture/pr57147-3.c
  2c294cc3635276068fdee76fd7b1eb82  gcc/testsuite/gcc.dg/torture/pr57214.c
  4901f0628848bf18a655fb924ce0edf6  gcc/testsuite/gcc.dg/torture/pr57251.c
*************** f2dddb213748ccb1b2e30ff1ff7f59e4  gcc/te
*** 42811,42817 ****
  76796ab921180653905caef9c792720e  gcc/testsuite/gcc.dg/torture/pr57748-3.c
  85d58426bedaf1d6a74d38d55833e66d  gcc/testsuite/gcc.dg/torture/pr57748-4.c
  c337610744bb004f9773ce2fe4c9ba9f  gcc/testsuite/gcc.dg/torture/pr57864.c
- ce771eb842b6e0da53383b285c4fd760  gcc/testsuite/gcc.dg/torture/pr57993-2.cpp
  8f27084dca98134d7f524112d900a2d1  gcc/testsuite/gcc.dg/torture/pr57993.c
  95154523d1488e9fe16d67474343c8d5  gcc/testsuite/gcc.dg/torture/pr58018.c
  d89477ea0d429b92206325d86a42808d  gcc/testsuite/gcc.dg/torture/pr58041.c
--- 44663,44668 ----
*************** ad23b1fa45b5ff634f87ef6bd3dde4d8  gcc/te
*** 42997,43003 ****
  cee506acabe763229bd2612fb207a662  gcc/testsuite/gcc.dg/torture/pr69157.c
  db3d3805458cfdb25272fcb7029fcbeb  gcc/testsuite/gcc.dg/torture/pr69166.c
  1db00f3ee82ce4c0e020e12f7d08b8d4  gcc/testsuite/gcc.dg/torture/pr69168.c
! a50ae15370d573b3ec8381c9b1591e4a  gcc/testsuite/gcc.dg/torture/pr69170.c
  59008f3290f88d2eaf978efda9749327  gcc/testsuite/gcc.dg/torture/pr69173.c
  83def19cd01f55fd106f3504d221dc8f  gcc/testsuite/gcc.dg/torture/pr69174.c
  4259ba4331e6505efd09001c089e0fe5  gcc/testsuite/gcc.dg/torture/pr69186.c
--- 44848,44854 ----
  cee506acabe763229bd2612fb207a662  gcc/testsuite/gcc.dg/torture/pr69157.c
  db3d3805458cfdb25272fcb7029fcbeb  gcc/testsuite/gcc.dg/torture/pr69166.c
  1db00f3ee82ce4c0e020e12f7d08b8d4  gcc/testsuite/gcc.dg/torture/pr69168.c
! ca37554fa099644b27f18b1747259071  gcc/testsuite/gcc.dg/torture/pr69170.c
  59008f3290f88d2eaf978efda9749327  gcc/testsuite/gcc.dg/torture/pr69173.c
  83def19cd01f55fd106f3504d221dc8f  gcc/testsuite/gcc.dg/torture/pr69174.c
  4259ba4331e6505efd09001c089e0fe5  gcc/testsuite/gcc.dg/torture/pr69186.c
*************** bec958adc64669aae7713bc7b9e9f391  gcc/te
*** 43017,43023 ****
  e69112d72fa60845f1c12beacf648690  gcc/testsuite/gcc.dg/torture/pr69714.c
  541fba5401e25e613e65e6fcd18f973b  gcc/testsuite/gcc.dg/torture/pr69715.c
  d169de0fe4288703ab64e28d15a43078  gcc/testsuite/gcc.dg/torture/pr69719.c
! 6d093e4d76aad879f8fe59229565f26e  gcc/testsuite/gcc.dg/torture/pr69760.c
  fd12f1932877e2c50edee67d5a3b8745  gcc/testsuite/gcc.dg/torture/pr69771.c
  1d5d5a9290f39ff5eafabee7a2d7c71a  gcc/testsuite/gcc.dg/torture/pr69776-2.c
  5fd86b2e2473fbd069fcd98405a7f974  gcc/testsuite/gcc.dg/torture/pr69776.c
--- 44868,44874 ----
  e69112d72fa60845f1c12beacf648690  gcc/testsuite/gcc.dg/torture/pr69714.c
  541fba5401e25e613e65e6fcd18f973b  gcc/testsuite/gcc.dg/torture/pr69715.c
  d169de0fe4288703ab64e28d15a43078  gcc/testsuite/gcc.dg/torture/pr69719.c
! ed5cb514224c22dbb0af80a228f713de  gcc/testsuite/gcc.dg/torture/pr69760.c
  fd12f1932877e2c50edee67d5a3b8745  gcc/testsuite/gcc.dg/torture/pr69771.c
  1d5d5a9290f39ff5eafabee7a2d7c71a  gcc/testsuite/gcc.dg/torture/pr69776-2.c
  5fd86b2e2473fbd069fcd98405a7f974  gcc/testsuite/gcc.dg/torture/pr69776.c
*************** e8031a0ecab3b16e41cbf463f7f511c6  gcc/te
*** 43029,43035 ****
  56b3cac8f895aa4fd48df3c703efbc4d  gcc/testsuite/gcc.dg/torture/pr69941.c
  139b6b3e48e8d5f1a6f570ffc6c93e4e  gcc/testsuite/gcc.dg/torture/pr69951.c
  683611f9b3bb236985493165b0dcbe06  gcc/testsuite/gcc.dg/torture/pr69989.c
! d02e7079cdd6c79dd2590f80b8a8c64c  gcc/testsuite/gcc.dg/torture/pr70025.c
  cfc2da49c5357c3516d7c94443160ff2  gcc/testsuite/gcc.dg/torture/pr70083.c
  2edd8b0edee52011797c5e44672e43fb  gcc/testsuite/gcc.dg/torture/pr70115.c
  5bed1f0541a98ada50ffaa36beba50e2  gcc/testsuite/gcc.dg/torture/pr70123.c
--- 44880,44886 ----
  56b3cac8f895aa4fd48df3c703efbc4d  gcc/testsuite/gcc.dg/torture/pr69941.c
  139b6b3e48e8d5f1a6f570ffc6c93e4e  gcc/testsuite/gcc.dg/torture/pr69951.c
  683611f9b3bb236985493165b0dcbe06  gcc/testsuite/gcc.dg/torture/pr69989.c
! 155b274eb96f337e4a0688f7a4171026  gcc/testsuite/gcc.dg/torture/pr70025.c
  cfc2da49c5357c3516d7c94443160ff2  gcc/testsuite/gcc.dg/torture/pr70083.c
  2edd8b0edee52011797c5e44672e43fb  gcc/testsuite/gcc.dg/torture/pr70115.c
  5bed1f0541a98ada50ffaa36beba50e2  gcc/testsuite/gcc.dg/torture/pr70123.c
*************** de7dbbd134e802d02b8e9f377abab351  gcc/te
*** 43149,43154 ****
--- 45000,45007 ----
  1f77c0aef3f955d849d1a8c1768668af  gcc/testsuite/gcc.dg/torture/pr79194.c
  f035d14564ace5e14a2e47394b4a0b29  gcc/testsuite/gcc.dg/torture/pr79244.c
  670a4718bb54e94df3b6d9e06d148fc5  gcc/testsuite/gcc.dg/torture/pr79276.c
+ a31787884c9d80956aa487b271d2050d  gcc/testsuite/gcc.dg/torture/pr79334-0.c
+ c4c694fe91957951930482bcaf41336a  gcc/testsuite/gcc.dg/torture/pr79334-1.c
  8b310c32aa82ebe44b2aba959a8213ae  gcc/testsuite/gcc.dg/torture/pr79351.c
  ecad54cff466f02e3fa89fa5ba6a198e  gcc/testsuite/gcc.dg/torture/pr79432.c
  0df5ceb12f76a6dc1bf36e2c5183b1b7  gcc/testsuite/gcc.dg/torture/pr79536.c
*************** d6ca926b2bd7476454d1d2aef6165159  gcc/te
*** 43302,43308 ****
  6e9fc245efc4c9fc3b6ac670e231ccc2  gcc/testsuite/gcc.dg/torture/pr89008.c
  deaf9ef54f621df69db3af8cdd9248d8  gcc/testsuite/gcc.dg/torture/pr89091.c
  1e44851dd653f8c0363f362618b61bde  gcc/testsuite/gcc.dg/torture/pr89111.c
! a7a8227fb7312ecb3e13fbd0ae9a51c6  gcc/testsuite/gcc.dg/torture/pr89135.c
  bc5bedb53a5031564816c911cd9f7bd1  gcc/testsuite/gcc.dg/torture/pr89223.c
  62cac649b94529d0e690ee09df6e06ba  gcc/testsuite/gcc.dg/torture/pr89247.c
  5027d01e012944eed6e57508cf5efccf  gcc/testsuite/gcc.dg/torture/pr89505.c
--- 45155,45161 ----
  6e9fc245efc4c9fc3b6ac670e231ccc2  gcc/testsuite/gcc.dg/torture/pr89008.c
  deaf9ef54f621df69db3af8cdd9248d8  gcc/testsuite/gcc.dg/torture/pr89091.c
  1e44851dd653f8c0363f362618b61bde  gcc/testsuite/gcc.dg/torture/pr89111.c
! 197ff41ac6181c010b6770d27b89fd6b  gcc/testsuite/gcc.dg/torture/pr89135.c
  bc5bedb53a5031564816c911cd9f7bd1  gcc/testsuite/gcc.dg/torture/pr89223.c
  62cac649b94529d0e690ee09df6e06ba  gcc/testsuite/gcc.dg/torture/pr89247.c
  5027d01e012944eed6e57508cf5efccf  gcc/testsuite/gcc.dg/torture/pr89505.c
*************** a56be250f5d8a4a3f63fad5c8624d2bb  gcc/te
*** 43314,43320 ****
  8007fcafda3e8f036b3e842a9a180e2c  gcc/testsuite/gcc.dg/torture/pr89789.c
  998a987615152e0ebad640146ff97b16  gcc/testsuite/gcc.dg/torture/pr89794.c
  324796b00c00dce814303e653cfacb62  gcc/testsuite/gcc.dg/torture/pr90020.c
! 40285cd205552633b2676b566ec60b78  gcc/testsuite/gcc.dg/torture/pr90071.c
  00e6f1395499e5956a1821ce97b809c7  gcc/testsuite/gcc.dg/torture/pr90278.c
  1c6a61da912dfe2711fb64a23a660471  gcc/testsuite/gcc.dg/torture/pr90328.c
  038f0ca2bdeb933eeebb905e69152a43  gcc/testsuite/gcc.dg/torture/pr90395.c
--- 45167,45173 ----
  8007fcafda3e8f036b3e842a9a180e2c  gcc/testsuite/gcc.dg/torture/pr89789.c
  998a987615152e0ebad640146ff97b16  gcc/testsuite/gcc.dg/torture/pr89794.c
  324796b00c00dce814303e653cfacb62  gcc/testsuite/gcc.dg/torture/pr90020.c
! 00ba0b2b03892ecc75ac7c17c2f0d02e  gcc/testsuite/gcc.dg/torture/pr90071.c
  00e6f1395499e5956a1821ce97b809c7  gcc/testsuite/gcc.dg/torture/pr90278.c
  1c6a61da912dfe2711fb64a23a660471  gcc/testsuite/gcc.dg/torture/pr90328.c
  038f0ca2bdeb933eeebb905e69152a43  gcc/testsuite/gcc.dg/torture/pr90395.c
*************** dd21c75d6eac9f019a72bb94132f182d  gcc/te
*** 43370,43375 ****
--- 45223,45229 ----
  c3582ca835373c2cd0065fc3f8a36154  gcc/testsuite/gcc.dg/torture/pr93381.c
  b98ab6f15b15806769f84936f2c31593  gcc/testsuite/gcc.dg/torture/pr93397.c
  8a88648499f60617d66107d036755e15  gcc/testsuite/gcc.dg/torture/pr93428.c
+ 8c8ca34d96fa9995f35add7590e15cb5  gcc/testsuite/gcc.dg/torture/pr93491.c
  8b5e9206c199af829d4b9046defccd70  gcc/testsuite/gcc.dg/torture/pr93586.c
  244618c3faaea850d3075d3698e1e220  gcc/testsuite/gcc.dg/torture/pr93868.c
  bae425547d7c364d4781b56048755e11  gcc/testsuite/gcc.dg/torture/pr93946-1.c
*************** d5053eab2105e6cdf547694ad59b90fa  gcc/te
*** 43380,43386 ****
  71f844d3e7de4c89905c25aee1bf4a63  gcc/testsuite/gcc.dg/torture/pr94479.c
  79631314e3a293ef93ce4202a5146f06  gcc/testsuite/gcc.dg/torture/pr94482.c
  e0ac106a863f9ebde2e73b57ac977143  gcc/testsuite/gcc.dg/torture/pr94516.c
! c01fa386702975a48153d49c7102f94e  gcc/testsuite/gcc.dg/torture/pr94947-1.c
  ae0f145265dd4960c43e14aeb325fd0e  gcc/testsuite/gcc.dg/torture/pr94947-2.c
  109236a10e952dce1ab0ec0c59a45a28  gcc/testsuite/gcc.dg/torture/pr94949.c
  e40acfa5897068d8cc14032225d0cfe7  gcc/testsuite/gcc.dg/torture/pr94988.c
--- 45234,45240 ----
  71f844d3e7de4c89905c25aee1bf4a63  gcc/testsuite/gcc.dg/torture/pr94479.c
  79631314e3a293ef93ce4202a5146f06  gcc/testsuite/gcc.dg/torture/pr94482.c
  e0ac106a863f9ebde2e73b57ac977143  gcc/testsuite/gcc.dg/torture/pr94516.c
! d6a8eaeb23cf8364c52302f30197c470  gcc/testsuite/gcc.dg/torture/pr94947-1.c
  ae0f145265dd4960c43e14aeb325fd0e  gcc/testsuite/gcc.dg/torture/pr94947-2.c
  109236a10e952dce1ab0ec0c59a45a28  gcc/testsuite/gcc.dg/torture/pr94949.c
  e40acfa5897068d8cc14032225d0cfe7  gcc/testsuite/gcc.dg/torture/pr94988.c
*************** ef26911618617d51e6ffc39ca7a78dc2  gcc/te
*** 43449,43455 ****
  21e1c7ca64fde86602f4b6e1f1fc190d  gcc/testsuite/gcc.dg/torture/ssa-fre-5.c
  e210efee65ce4c71ee51c42800c7d958  gcc/testsuite/gcc.dg/torture/ssa-fre-6.c
  2ca52347d5fbc94204426029afb30f25  gcc/testsuite/gcc.dg/torture/ssa-fre-7.c
! e106463919fa5c1cd06fb15385fc207a  gcc/testsuite/gcc.dg/torture/ssa-pta-fn-1.c
  53a2ab81fc05f5ba0724c2020a12a151  gcc/testsuite/gcc.dg/torture/stackalign/alloca-1.c
  2d416072232dd69f1b2a756bbb4d1dfd  gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c
  9173dbcdd930c05fbaaa3328f1c8aa19  gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c
--- 45303,45309 ----
  21e1c7ca64fde86602f4b6e1f1fc190d  gcc/testsuite/gcc.dg/torture/ssa-fre-5.c
  e210efee65ce4c71ee51c42800c7d958  gcc/testsuite/gcc.dg/torture/ssa-fre-6.c
  2ca52347d5fbc94204426029afb30f25  gcc/testsuite/gcc.dg/torture/ssa-fre-7.c
! 2781dc6d2fef5f3f895a7736312f66e5  gcc/testsuite/gcc.dg/torture/ssa-pta-fn-1.c
  53a2ab81fc05f5ba0724c2020a12a151  gcc/testsuite/gcc.dg/torture/stackalign/alloca-1.c
  2d416072232dd69f1b2a756bbb4d1dfd  gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c
  9173dbcdd930c05fbaaa3328f1c8aa19  gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c
*************** dc476fb6c6fcd7370e5d269c50d72e4f  gcc/te
*** 43457,43463 ****
  edd2b87cbd92db8aadd0dffe6eebb23d  gcc/testsuite/gcc.dg/torture/stackalign/alloca-5.c
  ac89150f1589849bc2c9db379c422d8a  gcc/testsuite/gcc.dg/torture/stackalign/alloca-6.c
  fef5a8d7a1f7cdc1db96edce26047f61  gcc/testsuite/gcc.dg/torture/stackalign/builtin-apply-1.c
! 5fc7b3fa3e8d8077371ee130032a9b89  gcc/testsuite/gcc.dg/torture/stackalign/builtin-apply-2.c
  4844379205910806b383dbde4bb6bb59  gcc/testsuite/gcc.dg/torture/stackalign/builtin-apply-3.c
  4b4b59cd55751e5743bc4195c9571b78  gcc/testsuite/gcc.dg/torture/stackalign/builtin-apply-4.c
  d902ae1540aab0be308e7ba8052278bf  gcc/testsuite/gcc.dg/torture/stackalign/builtin-return-1.c
--- 45311,45317 ----
  edd2b87cbd92db8aadd0dffe6eebb23d  gcc/testsuite/gcc.dg/torture/stackalign/alloca-5.c
  ac89150f1589849bc2c9db379c422d8a  gcc/testsuite/gcc.dg/torture/stackalign/alloca-6.c
  fef5a8d7a1f7cdc1db96edce26047f61  gcc/testsuite/gcc.dg/torture/stackalign/builtin-apply-1.c
! 7e4dce4a710a8ea40f0dcd057f150b1f  gcc/testsuite/gcc.dg/torture/stackalign/builtin-apply-2.c
  4844379205910806b383dbde4bb6bb59  gcc/testsuite/gcc.dg/torture/stackalign/builtin-apply-3.c
  4b4b59cd55751e5743bc4195c9571b78  gcc/testsuite/gcc.dg/torture/stackalign/builtin-apply-4.c
  d902ae1540aab0be308e7ba8052278bf  gcc/testsuite/gcc.dg/torture/stackalign/builtin-return-1.c
*************** eeb7cdfccbec69227ac2915527d61fa3  gcc/te
*** 43490,43496 ****
  0c1806b37db5e92a3ab1c3c51fb22d93  gcc/testsuite/gcc.dg/torture/stackalign/setjmp-3.c
  ffc8d6d378e80da23cc2300fd9f2d529  gcc/testsuite/gcc.dg/torture/stackalign/setjmp-4.c
  2a60ec21d6968b6101b16fa5b7c6ddb5  gcc/testsuite/gcc.dg/torture/stackalign/sibcall-1.c
! d7e0ddd1f6e09838ee75c461b357993b  gcc/testsuite/gcc.dg/torture/stackalign/stackalign.exp
  1adc6e1acc06069cf12168f39ef7f916  gcc/testsuite/gcc.dg/torture/stackalign/struct-1.c
  30d5a92d8a2ed3890586ed1c2d6602c9  gcc/testsuite/gcc.dg/torture/stackalign/thiscall-1.c
  d5967747961c3c0e43380a4aee91e5dd  gcc/testsuite/gcc.dg/torture/stackalign/vararg-1.c
--- 45344,45350 ----
  0c1806b37db5e92a3ab1c3c51fb22d93  gcc/testsuite/gcc.dg/torture/stackalign/setjmp-3.c
  ffc8d6d378e80da23cc2300fd9f2d529  gcc/testsuite/gcc.dg/torture/stackalign/setjmp-4.c
  2a60ec21d6968b6101b16fa5b7c6ddb5  gcc/testsuite/gcc.dg/torture/stackalign/sibcall-1.c
! 3f344071303e75a8a97c528351975523  gcc/testsuite/gcc.dg/torture/stackalign/stackalign.exp
  1adc6e1acc06069cf12168f39ef7f916  gcc/testsuite/gcc.dg/torture/stackalign/struct-1.c
  30d5a92d8a2ed3890586ed1c2d6602c9  gcc/testsuite/gcc.dg/torture/stackalign/thiscall-1.c
  d5967747961c3c0e43380a4aee91e5dd  gcc/testsuite/gcc.dg/torture/stackalign/vararg-1.c
*************** a7dd8959cd95d178e51f986a468a0a72  gcc/te
*** 43505,43511 ****
  0cca0b22c665af78b56436b3e71b756f  gcc/testsuite/gcc.dg/torture/tls/thr-init-2.c
  32042e365dfe5925f2393ec1d5c692d1  gcc/testsuite/gcc.dg/torture/tls/tls-reload-1.c
  a759d083aeeb716f90190112ebdae9ca  gcc/testsuite/gcc.dg/torture/tls/tls-test.c
! d5c52b9bb96b425017ed02551090763d  gcc/testsuite/gcc.dg/torture/tls/tls.exp
  943be2937b2b327811185a47734cf258  gcc/testsuite/gcc.dg/torture/transpose-1.c
  1449d9d29dea8de5fba10079ff2581ac  gcc/testsuite/gcc.dg/torture/transpose-2.c
  5061844ac50db8a5cc4a6626c641b34c  gcc/testsuite/gcc.dg/torture/transpose-3.c
--- 45359,45365 ----
  0cca0b22c665af78b56436b3e71b756f  gcc/testsuite/gcc.dg/torture/tls/thr-init-2.c
  32042e365dfe5925f2393ec1d5c692d1  gcc/testsuite/gcc.dg/torture/tls/tls-reload-1.c
  a759d083aeeb716f90190112ebdae9ca  gcc/testsuite/gcc.dg/torture/tls/tls-test.c
! cc21f6da851c739a2e61ff0e3131238b  gcc/testsuite/gcc.dg/torture/tls/tls.exp
  943be2937b2b327811185a47734cf258  gcc/testsuite/gcc.dg/torture/transpose-1.c
  1449d9d29dea8de5fba10079ff2581ac  gcc/testsuite/gcc.dg/torture/transpose-2.c
  5061844ac50db8a5cc4a6626c641b34c  gcc/testsuite/gcc.dg/torture/transpose-3.c
*************** deba47b8439d01c869eba7f288c1e8d7  gcc/te
*** 43524,43532 ****
  8e9cc7d7e6527b03b2cbb96f2f145759  gcc/testsuite/gcc.dg/torture/vshuf-16.inc
  5ab07529f77e7784c4d54ed9d7e2f405  gcc/testsuite/gcc.dg/torture/vshuf-2.inc
  23a0ee290cf28ad9321039d21181d468  gcc/testsuite/gcc.dg/torture/vshuf-32.inc
! 805c023ba0e8c20c12172309976f6f9b  gcc/testsuite/gcc.dg/torture/vshuf-4.inc
  caddb9eb780528f6bce89182f7313b52  gcc/testsuite/gcc.dg/torture/vshuf-64.inc
! cbd361e878cc830ce3e27593625d09d2  gcc/testsuite/gcc.dg/torture/vshuf-8.inc
  d5def8930f77cb823cf2dd9f515d1eca  gcc/testsuite/gcc.dg/torture/vshuf-main.inc
  4a913750aa50d35b4ce54797848f643b  gcc/testsuite/gcc.dg/torture/vshuf-v16hi.c
  146a9121f0935fa5716a7e9709888e93  gcc/testsuite/gcc.dg/torture/vshuf-v16qi.c
--- 45378,45386 ----
  8e9cc7d7e6527b03b2cbb96f2f145759  gcc/testsuite/gcc.dg/torture/vshuf-16.inc
  5ab07529f77e7784c4d54ed9d7e2f405  gcc/testsuite/gcc.dg/torture/vshuf-2.inc
  23a0ee290cf28ad9321039d21181d468  gcc/testsuite/gcc.dg/torture/vshuf-32.inc
! 78016ccab8770fcfb7b57701bac80d9b  gcc/testsuite/gcc.dg/torture/vshuf-4.inc
  caddb9eb780528f6bce89182f7313b52  gcc/testsuite/gcc.dg/torture/vshuf-64.inc
! 58ac1854bb1536357da1d957fdae48dd  gcc/testsuite/gcc.dg/torture/vshuf-8.inc
  d5def8930f77cb823cf2dd9f515d1eca  gcc/testsuite/gcc.dg/torture/vshuf-main.inc
  4a913750aa50d35b4ce54797848f643b  gcc/testsuite/gcc.dg/torture/vshuf-v16hi.c
  146a9121f0935fa5716a7e9709888e93  gcc/testsuite/gcc.dg/torture/vshuf-v16qi.c
*************** cf7f678829144365c7c6e3436f2fe6c9  gcc/te
*** 43570,43581 ****
  8a7ed79d9687fd79c9c1f831e7e7995b  gcc/testsuite/gcc.dg/tree-prof/crossmodule-indircall-1a.c
  26029d99148f25b6e5936d8536719f05  gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c
  af6029c2bad38cfb5326e5a120549d06  gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1a.c
! 8315d75fc76e83f849bf54a0be9b8d41  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-2.c
  1a6a44bdec75a8550a766d6afea7e532  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-malloc.c
  85d5018bec782bddcb3e3782c0be5143  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-topn.c
! adcde91c9628e17b51f6dbaa657e6c01  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c
  5db2d8c69929de2cc39824b4fc51389a  gcc/testsuite/gcc.dg/tree-prof/inliner-1.c
! 65775a552552ee4184ac107034468f54  gcc/testsuite/gcc.dg/tree-prof/merge_block.c
  d47ca7cd7557792c189886a518a1a5dd  gcc/testsuite/gcc.dg/tree-prof/peel-1.c
  fa7217b4e402db46b1d64ca38eb6f212  gcc/testsuite/gcc.dg/tree-prof/pr34999.c
  108cb119dfbe8eeaec0b0f384384d090  gcc/testsuite/gcc.dg/tree-prof/pr44777.c
--- 45424,45436 ----
  8a7ed79d9687fd79c9c1f831e7e7995b  gcc/testsuite/gcc.dg/tree-prof/crossmodule-indircall-1a.c
  26029d99148f25b6e5936d8536719f05  gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c
  af6029c2bad38cfb5326e5a120549d06  gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1a.c
! 921f3397cb2f39ad1520b84a158fc597  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-2.c
  1a6a44bdec75a8550a766d6afea7e532  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-malloc.c
  85d5018bec782bddcb3e3782c0be5143  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof-topn.c
! 2f63ba3e6af0482cfbe8138e11455f6f  gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c
! 954750bebc2263af14be18c3b9de4c11  gcc/testsuite/gcc.dg/tree-prof/init-array.c
  5db2d8c69929de2cc39824b4fc51389a  gcc/testsuite/gcc.dg/tree-prof/inliner-1.c
! 2b174a32f54b644b6e346838426c6612  gcc/testsuite/gcc.dg/tree-prof/merge_block.c
  d47ca7cd7557792c189886a518a1a5dd  gcc/testsuite/gcc.dg/tree-prof/peel-1.c
  fa7217b4e402db46b1d64ca38eb6f212  gcc/testsuite/gcc.dg/tree-prof/pr34999.c
  108cb119dfbe8eeaec0b0f384384d090  gcc/testsuite/gcc.dg/tree-prof/pr44777.c
*************** d772d253a3efe703a6f81d851febfdcc  gcc/te
*** 43606,43612 ****
  a3bc2a0ab5b9121134c0c8183bdd363d  gcc/testsuite/gcc.dg/tree-prof/time-profiler-2.c
  d4bb2fbb3f0ff1c2682f30c9bd6f533d  gcc/testsuite/gcc.dg/tree-prof/time-profiler-3.c
  00abf1ef402b6663d2eca17cddf11f1b  gcc/testsuite/gcc.dg/tree-prof/tracer-1.c
! 49c568ed0530f5dfd906c2745e60fac9  gcc/testsuite/gcc.dg/tree-prof/tree-prof.exp
  7475ec338be2dc0236a9208d95977141  gcc/testsuite/gcc.dg/tree-prof/unroll-1.c
  14a5277ebc22dc06798be4e7a79ee909  gcc/testsuite/gcc.dg/tree-prof/update-cunroll-2.c
  2c485d6763546bfa5c14ee8da0cfe215  gcc/testsuite/gcc.dg/tree-prof/update-loopch.c
--- 45461,45467 ----
  a3bc2a0ab5b9121134c0c8183bdd363d  gcc/testsuite/gcc.dg/tree-prof/time-profiler-2.c
  d4bb2fbb3f0ff1c2682f30c9bd6f533d  gcc/testsuite/gcc.dg/tree-prof/time-profiler-3.c
  00abf1ef402b6663d2eca17cddf11f1b  gcc/testsuite/gcc.dg/tree-prof/tracer-1.c
! 479a91aeeb4744899ba2ab28f94717fe  gcc/testsuite/gcc.dg/tree-prof/tree-prof.exp
  7475ec338be2dc0236a9208d95977141  gcc/testsuite/gcc.dg/tree-prof/unroll-1.c
  14a5277ebc22dc06798be4e7a79ee909  gcc/testsuite/gcc.dg/tree-prof/update-cunroll-2.c
  2c485d6763546bfa5c14ee8da0cfe215  gcc/testsuite/gcc.dg/tree-prof/update-loopch.c
*************** a02a02f44d9d7fe4b73ae24eefc06032  gcc/te
*** 43637,43643 ****
  6932f05c8afb68b772e7d185450e970c  gcc/testsuite/gcc.dg/tree-ssa/20030711-2.c
  a81c785245009788956c9428ad294309  gcc/testsuite/gcc.dg/tree-ssa/20030711-3.c
  ff31d58e4b279286097b52dbf32dd11e  gcc/testsuite/gcc.dg/tree-ssa/20030714-1.c
! 6f37bd62836e3e20b57830387ad76137  gcc/testsuite/gcc.dg/tree-ssa/20030714-2.c
  1cc58bfa3a257c9dfdd91c8a954d58d5  gcc/testsuite/gcc.dg/tree-ssa/20030728-1.c
  6e7b8170b8407ba4d19c6acc6407d2c2  gcc/testsuite/gcc.dg/tree-ssa/20030729-1.c
  e03f7ed40dc1bb98915d7e6c9308daeb  gcc/testsuite/gcc.dg/tree-ssa/20030730-1.c
--- 45492,45498 ----
  6932f05c8afb68b772e7d185450e970c  gcc/testsuite/gcc.dg/tree-ssa/20030711-2.c
  a81c785245009788956c9428ad294309  gcc/testsuite/gcc.dg/tree-ssa/20030711-3.c
  ff31d58e4b279286097b52dbf32dd11e  gcc/testsuite/gcc.dg/tree-ssa/20030714-1.c
! 4e8f66aeb9941caaa9816aa81d20bede  gcc/testsuite/gcc.dg/tree-ssa/20030714-2.c
  1cc58bfa3a257c9dfdd91c8a954d58d5  gcc/testsuite/gcc.dg/tree-ssa/20030728-1.c
  6e7b8170b8407ba4d19c6acc6407d2c2  gcc/testsuite/gcc.dg/tree-ssa/20030729-1.c
  e03f7ed40dc1bb98915d7e6c9308daeb  gcc/testsuite/gcc.dg/tree-ssa/20030730-1.c
*************** ac00cf20aa901dad53cb68baa97cc1f8  gcc/te
*** 43808,43813 ****
--- 45663,45669 ----
  1c348dd9e53251b100358e06daaa0e82  gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c
  ad829088c2d182fe6e84645dc44f07e6  gcc/testsuite/gcc.dg/tree-ssa/bit-assoc.c
  7ad8d748f571e7a17cc0495c3da36812  gcc/testsuite/gcc.dg/tree-ssa/bitops-1.c
+ bc51e4802e1c8004fa81811aa33d2f94  gcc/testsuite/gcc.dg/tree-ssa/bittest.c
  44bd2d4a00e9c35b630f563007d3d516  gcc/testsuite/gcc.dg/tree-ssa/bitwise-sink.c
  2ecf267e7c02e16be8be3c79c3e74dab  gcc/testsuite/gcc.dg/tree-ssa/bool-1.c
  2fbcc9d1e1290309e1f23fa115b1f65d  gcc/testsuite/gcc.dg/tree-ssa/bool-10.c
*************** cc227fc1cc6d10a58e03dcd84a92a069  gcc/te
*** 43839,43844 ****
--- 45695,45701 ----
  92d032f8f6f1b33999930d2669261a9a  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-10.c
  0113de14c1d5f88d1670fa2c3d1369dd  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-11.c
  453ddd0b6ab8e98f8a9d1ff1479b996a  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-12.c
+ 6060e388100ca6981d4a257a9ebb8cfb  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-13.c
  7772c5047d21eb7a33742124a6299efb  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-2.c
  e44bb4ad4c3e2d34436a971260bd2bf8  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-3.c
  f72d1952df8e119a58ac250b8bad77eb  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-4.c
*************** c7f299180823ac8da15c25fbfd67c90d  gcc/te
*** 43852,43863 ****
  d557e6758a1428d1d4877d13ca658288  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-3.c
  e67a31aa2e0193c2835ef0f1f4184420  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-4.c
  a3dc3772de28d6654b24548d0ad18473  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-5.c
  901a6f4d42cccdc25240825ba1fa4346  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-10.c
  d1dbc661f00ed58c1743eecaaf46b55c  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-11.c
  7cd4d10132da2de70795da26ec44e6a2  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c
  0fb1214ede6b7effc8fb25cb3004355e  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-28.c
  53d3d6582bee69a2ea95cbd99afa392f  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-29.c
! fc214128225f2148d7874b404d4c127b  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-3.c
  df45688bd80db8170c6145ac667856b2  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-4.c
  761414c30f0c96c9ad06d84337daeb0d  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-5.c
  fc343ac4dddc2387803c4581508bd355  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-6.c
--- 45709,45721 ----
  d557e6758a1428d1d4877d13ca658288  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-3.c
  e67a31aa2e0193c2835ef0f1f4184420  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-4.c
  a3dc3772de28d6654b24548d0ad18473  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-5.c
+ 8ff10ac945d7169e6fdc523bc28d3534  gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-6.c
  901a6f4d42cccdc25240825ba1fa4346  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-10.c
  d1dbc661f00ed58c1743eecaaf46b55c  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-11.c
  7cd4d10132da2de70795da26ec44e6a2  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-2.c
  0fb1214ede6b7effc8fb25cb3004355e  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-28.c
  53d3d6582bee69a2ea95cbd99afa392f  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-29.c
! 4b6e22a2474da2a1885901d4695e11cb  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-3.c
  df45688bd80db8170c6145ac667856b2  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-4.c
  761414c30f0c96c9ad06d84337daeb0d  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-5.c
  fc343ac4dddc2387803c4581508bd355  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-6.c
*************** c7f97a6e2a77945ebe161e237b31e840  gcc/te
*** 43871,43888 ****
  69b4968b119665eae87dd9df63172bdf  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-13.c
  608826ad8d221f4cfda370543aa5db82  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-14.c
  ccc2197f9dd8a281205c120e262e567d  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-15.c
! dcbfb0ac8b9b251d20b7196b05527c1a  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-16.c
  6c42388eaa7f77966a40520aa80dc9cc  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-17.c
  e19c538f8e7a0c10da0db728b9418c4a  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-18.c
  4fa590c4c00bd46746427d26550420cd  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-19.c
  1d56c485be27dd70832489d589e9cb8f  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-2.c
  d508ee9b0fcccb2985b9c7ecfbc9db19  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-20.c
  599e3a4a1f5a9b0f3fba72a0604d0f1e  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-21.c
! 85ea122fb18784ad8794e65ae4820651  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-22.c
! b4d026b9f0280af8a50023b910b49215  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-23.c
  6109206cde3c1702a9d3f8da1898b8f2  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-24.c
! 65778db8f5c18f0b852b70b4fe8c1da7  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-25.c
! ca5ec8c757fc0b963e851dab3ed1c04e  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-26.c
  91d7952394a03943a4561d7881d03e2d  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-3.c
  b3be1085d438fe322d879ca9939a97cc  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-4.c
  1021b0c3252fc7ef97a7fe99cfcc5ac6  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-5.c
--- 45729,45749 ----
  69b4968b119665eae87dd9df63172bdf  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-13.c
  608826ad8d221f4cfda370543aa5db82  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-14.c
  ccc2197f9dd8a281205c120e262e567d  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-15.c
! f216ab416ff86f581e536d9a74973e81  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-16.c
  6c42388eaa7f77966a40520aa80dc9cc  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-17.c
  e19c538f8e7a0c10da0db728b9418c4a  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-18.c
  4fa590c4c00bd46746427d26550420cd  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-19.c
  1d56c485be27dd70832489d589e9cb8f  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-2.c
  d508ee9b0fcccb2985b9c7ecfbc9db19  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-20.c
  599e3a4a1f5a9b0f3fba72a0604d0f1e  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-21.c
! bb3ad62473fb1b352f0d8d043f94e5df  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-22.c
! c39c6873978a0525187b3d9137343d88  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-23.c
  6109206cde3c1702a9d3f8da1898b8f2  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-24.c
! 1da7d23b74877b067eb9bfca2f50004e  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-25.c
! fe8f765f332dbaff704a41e1bd8dc369  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-26.c
! 60bd096820e4be4653b071daf1729ca2  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-27.c
! 285c4ebc9741797ed308010c90d408e2  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-28.c
! 6e2214ff517ebd174cfc45bbebd9c7b7  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-29.c
  91d7952394a03943a4561d7881d03e2d  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-3.c
  b3be1085d438fe322d879ca9939a97cc  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-4.c
  1021b0c3252fc7ef97a7fe99cfcc5ac6  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-5.c
*************** c28ce339deffeb750f2c7f2cb8c8aa31  gcc/te
*** 43890,43896 ****
  8f1af8ef1d7acd760085af6f95729333  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-7.c
  c96169d5c29c6dc315a817531e40c48b  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-8.c
  872985c14c0a1024ddaf7e02e728827a  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-9.c
! a1aaba77552f9c1ab8f7fb131dd05f8d  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf.c
  f22d4bb060b76be93303eb733dde236d  gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c
  9df35f57df940eb42a44144ca85a6c3e  gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c
  bd0e09f37c905aa13bbb2d522a84d767  gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c
--- 45751,45757 ----
  8f1af8ef1d7acd760085af6f95729333  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-7.c
  c96169d5c29c6dc315a817531e40c48b  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-8.c
  872985c14c0a1024ddaf7e02e728827a  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-9.c
! 3f3120466fd06983562ec970505aaf86  gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf.c
  f22d4bb060b76be93303eb733dde236d  gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c
  9df35f57df940eb42a44144ca85a6c3e  gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c
  bd0e09f37c905aa13bbb2d522a84d767  gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c
*************** d832596804520e5ce86f97bd7120c822  gcc/te
*** 43959,43985 ****
  c153f32fa106a459a7fa71c9649155c3  gcc/testsuite/gcc.dg/tree-ssa/divide-3.c
  d9df64c73cfb44c982ea8777bc83598c  gcc/testsuite/gcc.dg/tree-ssa/divide-4.c
  a2e7a9267052ac4ae19d933a4fe39c12  gcc/testsuite/gcc.dg/tree-ssa/divide-5.c
  5ff4e3bb013af087df7774637a5a7f32  gcc/testsuite/gcc.dg/tree-ssa/dse-points-to.c
  0a7ff4f8ff2cbc2ad6ac233489b11964  gcc/testsuite/gcc.dg/tree-ssa/dump-1.c
  5d82d65865d66cefacac9df984f79919  gcc/testsuite/gcc.dg/tree-ssa/dump-2.c
  7370c151b033cdeebbda544f1dc37e74  gcc/testsuite/gcc.dg/tree-ssa/dump-3.c
  f4597d2c70ad59ab81400cddd726d275  gcc/testsuite/gcc.dg/tree-ssa/dump-4.c
  3ff94f9450f7842e2e2ae65a53df11c8  gcc/testsuite/gcc.dg/tree-ssa/dump-5.c
! 030086d78e9da1cbb6afe43e479c5299  gcc/testsuite/gcc.dg/tree-ssa/dump-6.c
! 6d8e0fe5d4a6a949bac728d01d0cc15c  gcc/testsuite/gcc.dg/tree-ssa/evrp1.c
  27ac2ccca1316b69757f2c9d71f85f56  gcc/testsuite/gcc.dg/tree-ssa/evrp11.c
  3a97a9e35e227264546d100a03b93ca6  gcc/testsuite/gcc.dg/tree-ssa/evrp12.c
  7a804e5df582c42d9dc57ca0ad528f5a  gcc/testsuite/gcc.dg/tree-ssa/evrp13.c
! 66fc8039877c2eaae747c7a2afd5b81a  gcc/testsuite/gcc.dg/tree-ssa/evrp2.c
  bbbc05d95acb070f3fca4bd701091c08  gcc/testsuite/gcc.dg/tree-ssa/evrp20.c
  defaf318e06f609663fceb3a057d74cb  gcc/testsuite/gcc.dg/tree-ssa/evrp21.c
  477348534a1016813cc59733f6348e95  gcc/testsuite/gcc.dg/tree-ssa/evrp22.c
! b6c28d0ad5cffe5c9999fda917bb1c14  gcc/testsuite/gcc.dg/tree-ssa/evrp3.c
! 7e5008435f58736676123011023e2635  gcc/testsuite/gcc.dg/tree-ssa/evrp4.c
! 096e47ae0108919a91376d881679eacf  gcc/testsuite/gcc.dg/tree-ssa/evrp6.c
  220974a462638cc10a01465b1d592ac9  gcc/testsuite/gcc.dg/tree-ssa/evrp7.c
  b96ec27bf62c7cc9ec3e981db0fe5ba1  gcc/testsuite/gcc.dg/tree-ssa/evrp8.c
! 7214e1693ae498274c231fb69f1c6c70  gcc/testsuite/gcc.dg/tree-ssa/evrp9.c
  33a3fcae747cee654667314a41d7dae6  gcc/testsuite/gcc.dg/tree-ssa/flatten-1.c
  5aa642235531b56fe71d129b3128e653  gcc/testsuite/gcc.dg/tree-ssa/flatten-2.c
  7013e9405bbea7d794f84d52c038fb91  gcc/testsuite/gcc.dg/tree-ssa/flatten-3.c
--- 45820,45852 ----
  c153f32fa106a459a7fa71c9649155c3  gcc/testsuite/gcc.dg/tree-ssa/divide-3.c
  d9df64c73cfb44c982ea8777bc83598c  gcc/testsuite/gcc.dg/tree-ssa/divide-4.c
  a2e7a9267052ac4ae19d933a4fe39c12  gcc/testsuite/gcc.dg/tree-ssa/divide-5.c
+ 5c71f313af73633da474793408a37470  gcc/testsuite/gcc.dg/tree-ssa/divide-6.c
+ 01e4cf277c4038b1d496dbff7343ceaf  gcc/testsuite/gcc.dg/tree-ssa/divide-7.c
  5ff4e3bb013af087df7774637a5a7f32  gcc/testsuite/gcc.dg/tree-ssa/dse-points-to.c
  0a7ff4f8ff2cbc2ad6ac233489b11964  gcc/testsuite/gcc.dg/tree-ssa/dump-1.c
  5d82d65865d66cefacac9df984f79919  gcc/testsuite/gcc.dg/tree-ssa/dump-2.c
  7370c151b033cdeebbda544f1dc37e74  gcc/testsuite/gcc.dg/tree-ssa/dump-3.c
  f4597d2c70ad59ab81400cddd726d275  gcc/testsuite/gcc.dg/tree-ssa/dump-4.c
  3ff94f9450f7842e2e2ae65a53df11c8  gcc/testsuite/gcc.dg/tree-ssa/dump-5.c
! b41ca1665ed6388e916086ad17eef717  gcc/testsuite/gcc.dg/tree-ssa/dump-6.c
! b6661366cb8569822f6ffb346d8c9c7f  gcc/testsuite/gcc.dg/tree-ssa/evrp-ignore.c
! 6dc99348cdd056f4be8776745f0eba7a  gcc/testsuite/gcc.dg/tree-ssa/evrp-trans.c
! 941457da855f0081ed2295b1a14dbcc4  gcc/testsuite/gcc.dg/tree-ssa/evrp-trans2.c
! 329281a919b365ab71ed91ef28202305  gcc/testsuite/gcc.dg/tree-ssa/evrp1.c
  27ac2ccca1316b69757f2c9d71f85f56  gcc/testsuite/gcc.dg/tree-ssa/evrp11.c
  3a97a9e35e227264546d100a03b93ca6  gcc/testsuite/gcc.dg/tree-ssa/evrp12.c
  7a804e5df582c42d9dc57ca0ad528f5a  gcc/testsuite/gcc.dg/tree-ssa/evrp13.c
! ba8847f2e0da1d265091d23e8313750e  gcc/testsuite/gcc.dg/tree-ssa/evrp2.c
  bbbc05d95acb070f3fca4bd701091c08  gcc/testsuite/gcc.dg/tree-ssa/evrp20.c
  defaf318e06f609663fceb3a057d74cb  gcc/testsuite/gcc.dg/tree-ssa/evrp21.c
  477348534a1016813cc59733f6348e95  gcc/testsuite/gcc.dg/tree-ssa/evrp22.c
! 84ac955a816090865d6a53c9fd6a9d18  gcc/testsuite/gcc.dg/tree-ssa/evrp3.c
! 5328bbb800f5f302e3e3d17f3f8c256f  gcc/testsuite/gcc.dg/tree-ssa/evrp30.c
! 77b8f936793dfbfd94a2af89ece64029  gcc/testsuite/gcc.dg/tree-ssa/evrp4.c
! d31aba1cffe264ab5c504eb3c2466555  gcc/testsuite/gcc.dg/tree-ssa/evrp6.c
  220974a462638cc10a01465b1d592ac9  gcc/testsuite/gcc.dg/tree-ssa/evrp7.c
  b96ec27bf62c7cc9ec3e981db0fe5ba1  gcc/testsuite/gcc.dg/tree-ssa/evrp8.c
! df98e1f10e9362d780ceaf678d234d36  gcc/testsuite/gcc.dg/tree-ssa/evrp9.c
  33a3fcae747cee654667314a41d7dae6  gcc/testsuite/gcc.dg/tree-ssa/flatten-1.c
  5aa642235531b56fe71d129b3128e653  gcc/testsuite/gcc.dg/tree-ssa/flatten-2.c
  7013e9405bbea7d794f84d52c038fb91  gcc/testsuite/gcc.dg/tree-ssa/flatten-3.c
*************** c700544c3e68a401546cefbdad359728  gcc/te
*** 44045,44053 ****
  88394f5bf5b05af6dcff8c92c3277984  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-1.c
  bbf280cd31c7741b8c59afad86a4b316  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-10.c
  55213dbff5b0135f3e9d2e4a1f57ef2f  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-2.c
! fb06e94916e3e523571e23392c8fbce6  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-3.c
  fbc46d731b28682d463972d7b59d20e7  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-4.c
! d8d658fdb804ed772eb0c0f2751b5be6  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-5.c
  8a7ce6e7cef9b25005e2c6b8e1c3b8ff  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-6.c
  2c97bcb8b034b3b3666fa303045a35e1  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-7.c
  43711b33f763213e9c99555f055e2a90  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-8.c
--- 45912,45920 ----
  88394f5bf5b05af6dcff8c92c3277984  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-1.c
  bbf280cd31c7741b8c59afad86a4b316  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-10.c
  55213dbff5b0135f3e9d2e4a1f57ef2f  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-2.c
! 52e12d7fff0dbdfb62c8588a9c8b302a  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-3.c
  fbc46d731b28682d463972d7b59d20e7  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-4.c
! e9b4d4c4f8743a9a1dd703c822d8b75f  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-5.c
  8a7ce6e7cef9b25005e2c6b8e1c3b8ff  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-6.c
  2c97bcb8b034b3b3666fa303045a35e1  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-7.c
  43711b33f763213e9c99555f055e2a90  gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-8.c
*************** d8d658fdb804ed772eb0c0f2751b5be6  gcc/te
*** 44055,44061 ****
  b2e6051605666541fc80985492b002a4  gcc/testsuite/gcc.dg/tree-ssa/ifc-10.c
  45abed04f141d506c77bb20d255d1d0c  gcc/testsuite/gcc.dg/tree-ssa/ifc-11.c
  d44b6872baa4beaa748572b6e08714e4  gcc/testsuite/gcc.dg/tree-ssa/ifc-12.c
! 536d9dd34ec278bfbe9c189f38850454  gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-1.c
  b2ff4c71a123464796ac48e111522544  gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-2.c
  ee0564e9d214fe5d7c14a3fcf3790afe  gcc/testsuite/gcc.dg/tree-ssa/ifc-3.c
  2d051374dcbdc8f06faa1a30f4336ac9  gcc/testsuite/gcc.dg/tree-ssa/ifc-4.c
--- 45922,45928 ----
  b2e6051605666541fc80985492b002a4  gcc/testsuite/gcc.dg/tree-ssa/ifc-10.c
  45abed04f141d506c77bb20d255d1d0c  gcc/testsuite/gcc.dg/tree-ssa/ifc-11.c
  d44b6872baa4beaa748572b6e08714e4  gcc/testsuite/gcc.dg/tree-ssa/ifc-12.c
! 36057bb80c99be90edb4fb4eac751fb2  gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-1.c
  b2ff4c71a123464796ac48e111522544  gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-2.c
  ee0564e9d214fe5d7c14a3fcf3790afe  gcc/testsuite/gcc.dg/tree-ssa/ifc-3.c
  2d051374dcbdc8f06faa1a30f4336ac9  gcc/testsuite/gcc.dg/tree-ssa/ifc-4.c
*************** f13f933c98b03cde87730a731e3f3ec1  gcc/te
*** 44077,44082 ****
--- 45944,45950 ----
  140b6a02c1d8bf595fc72633853e48f4  gcc/testsuite/gcc.dg/tree-ssa/inline-10.c
  5f4ae2376e18749c34804d61bb1d74f7  gcc/testsuite/gcc.dg/tree-ssa/inline-11.c
  ec3e747aa79256c5fc91a3c46f88dd18  gcc/testsuite/gcc.dg/tree-ssa/inline-12.c
+ a5ae0e3772a1d85a32c4377ee71b5284  gcc/testsuite/gcc.dg/tree-ssa/inline-13.c
  d48399fe421811e1ba9c520ad83abc34  gcc/testsuite/gcc.dg/tree-ssa/inline-2.c
  2a94b5556af8e3ae1e08264e39dae60c  gcc/testsuite/gcc.dg/tree-ssa/inline-3.c
  f36615df20e02ab31418994441d3c87a  gcc/testsuite/gcc.dg/tree-ssa/inline-4.c
*************** e26de2213471196c5e2fd7f1708093d7  gcc/te
*** 44121,44126 ****
--- 45989,45999 ----
  312238955a5c96ed7be45fe8b9c67da6  gcc/testsuite/gcc.dg/tree-ssa/ivopts-2.c
  ee80356a0b132c2c2ee55d93f4ec1655  gcc/testsuite/gcc.dg/tree-ssa/ivopts-3.c
  4ad9364b0c09a0471b394cf3347e334a  gcc/testsuite/gcc.dg/tree-ssa/ivopts-4.c
+ 74fd38dbc0f1a5b28a045b104876b086  gcc/testsuite/gcc.dg/tree-ssa/ivopts-5.c
+ d5fdafd765d67368ca2bff383b4409a4  gcc/testsuite/gcc.dg/tree-ssa/ivopts-6.c
+ 261c0fbe740d32f8938b079cd2627c63  gcc/testsuite/gcc.dg/tree-ssa/ivopts-7.c
+ 6118558b01eeb8c2ad16c389146b0e69  gcc/testsuite/gcc.dg/tree-ssa/ivopts-8.c
+ f11293262238ec672bd29d9f3a6c686a  gcc/testsuite/gcc.dg/tree-ssa/ivopts-9.c
  9e9bec4c515075b6d8265930a3cd28c5  gcc/testsuite/gcc.dg/tree-ssa/ivopts-lower_base.c
  7f31f27cd658be41d1d6f25f702d25ff  gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt-2.c
  bbd6052172bb24b229d3c59541fac980  gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt.c
*************** f45bc27886bcc1aa8adf97eed2655490  gcc/te
*** 44151,44157 ****
  2a158885d698d07dd959851d7f6c5ad1  gcc/testsuite/gcc.dg/tree-ssa/ldist-30.c
  e3f1a326d63f28f3be9a8544a60505aa  gcc/testsuite/gcc.dg/tree-ssa/ldist-31.c
  7a2f94f5b3baa9f0361ba050afffc320  gcc/testsuite/gcc.dg/tree-ssa/ldist-32.c
! 13bd575a27f795c834b2e19a626f87b5  gcc/testsuite/gcc.dg/tree-ssa/ldist-33.c
  d5c8c7bee8816f98aede8ab1448f6689  gcc/testsuite/gcc.dg/tree-ssa/ldist-34.c
  ffd9d902fd127eef04e8bc7818f04da7  gcc/testsuite/gcc.dg/tree-ssa/ldist-35.c
  e5c7ff63681748294f115b0cd63bfb05  gcc/testsuite/gcc.dg/tree-ssa/ldist-36.c
--- 46024,46030 ----
  2a158885d698d07dd959851d7f6c5ad1  gcc/testsuite/gcc.dg/tree-ssa/ldist-30.c
  e3f1a326d63f28f3be9a8544a60505aa  gcc/testsuite/gcc.dg/tree-ssa/ldist-31.c
  7a2f94f5b3baa9f0361ba050afffc320  gcc/testsuite/gcc.dg/tree-ssa/ldist-32.c
! 9c82573f2711f01761f4bb230b3191e5  gcc/testsuite/gcc.dg/tree-ssa/ldist-33.c
  d5c8c7bee8816f98aede8ab1448f6689  gcc/testsuite/gcc.dg/tree-ssa/ldist-34.c
  ffd9d902fd127eef04e8bc7818f04da7  gcc/testsuite/gcc.dg/tree-ssa/ldist-35.c
  e5c7ff63681748294f115b0cd63bfb05  gcc/testsuite/gcc.dg/tree-ssa/ldist-36.c
*************** cb3f41761a6ebc49e3f09eea34e14823  gcc/te
*** 44165,44170 ****
--- 46038,46049 ----
  954cf334b3e76720f290bf8bd4eb603b  gcc/testsuite/gcc.dg/tree-ssa/ldist-9.c
  327e2f57b705fe0a234c5b99b74dc2de  gcc/testsuite/gcc.dg/tree-ssa/ldist-pr45948-2.c
  016eb8bd8214ac939a7331fddd0a81e0  gcc/testsuite/gcc.dg/tree-ssa/ldist-pr45948.c
+ 0fc6b696bfa7ddbc347d1a1394bf3f87  gcc/testsuite/gcc.dg/tree-ssa/ldist-rawmemchr-1.c
+ a829539342e1cf17c795358e1aac2326  gcc/testsuite/gcc.dg/tree-ssa/ldist-rawmemchr-2.c
+ fa7bbf7fd8a6beee8cfe0ebcc47c9ae2  gcc/testsuite/gcc.dg/tree-ssa/ldist-strlen-1.c
+ a1ef47e899db53462f91f7039cdd1234  gcc/testsuite/gcc.dg/tree-ssa/ldist-strlen-2.c
+ 8f00264fe7f9da886dc2bf4c4ebc6e92  gcc/testsuite/gcc.dg/tree-ssa/ldist-strlen-3.c
+ bc020964a561e5e6d8fbacae44589f86  gcc/testsuite/gcc.dg/tree-ssa/ldist-strlen-4.c
  7f7b870f3bea981b97962da0c2ac993f  gcc/testsuite/gcc.dg/tree-ssa/leaf.c
  fd0231fe67a4701b77a791b5dae02c7c  gcc/testsuite/gcc.dg/tree-ssa/loadpre1.c
  476fae9706651a37548148d4469bceff  gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c
*************** fa665ccc5c37f6639ff420a922266cc1  gcc/te
*** 44263,44272 ****
  eab9b8fbca526d3026277ce8a7c3179f  gcc/testsuite/gcc.dg/tree-ssa/minmax-loopend.c
  dd531f5928d5579a42c6d936314756c1  gcc/testsuite/gcc.dg/tree-ssa/minus-ovf.c
  f4dea9fb4e5bd2155b8ba67624432e3e  gcc/testsuite/gcc.dg/tree-ssa/modref-1.c
  dc87b329ac5e1041aec95aab3a72fe53  gcc/testsuite/gcc.dg/tree-ssa/modref-2.c
  334e0ec1f029b77bf1561db75278d646  gcc/testsuite/gcc.dg/tree-ssa/modref-3.c
! f6de6823f77331b8ef4448fbe62f4f13  gcc/testsuite/gcc.dg/tree-ssa/modref-4.c
! 13f9f17370779ebeb4bbacfaa9ca1f1c  gcc/testsuite/gcc.dg/tree-ssa/modref-5.c
  86b3b545b7d95e5a9edad0a6ab56705b  gcc/testsuite/gcc.dg/tree-ssa/mulcmp-1.c
  9d609bd79769ece6157bc34fbbb0371f  gcc/testsuite/gcc.dg/tree-ssa/muldiv-1.c
  9a861088652f3a7c7b3117c9a108131a  gcc/testsuite/gcc.dg/tree-ssa/muldiv-2.c
--- 46142,46167 ----
  eab9b8fbca526d3026277ce8a7c3179f  gcc/testsuite/gcc.dg/tree-ssa/minmax-loopend.c
  dd531f5928d5579a42c6d936314756c1  gcc/testsuite/gcc.dg/tree-ssa/minus-ovf.c
  f4dea9fb4e5bd2155b8ba67624432e3e  gcc/testsuite/gcc.dg/tree-ssa/modref-1.c
+ 63c10aef303a55c6703f6c6f9d1197ef  gcc/testsuite/gcc.dg/tree-ssa/modref-10.c
+ 46d5735166d9701e31359bfd1a91cd22  gcc/testsuite/gcc.dg/tree-ssa/modref-11.c
+ 3da898456e5c3038d872125d4a6fa1e5  gcc/testsuite/gcc.dg/tree-ssa/modref-12.c
+ 1fd0bfbb1e9d733d394528cd4f119e5c  gcc/testsuite/gcc.dg/tree-ssa/modref-13.c
+ d66179287d27394dda7975f551cf20a0  gcc/testsuite/gcc.dg/tree-ssa/modref-14.c
+ 2af0adeacc33cceb26434232e47fa07f  gcc/testsuite/gcc.dg/tree-ssa/modref-15.c
  dc87b329ac5e1041aec95aab3a72fe53  gcc/testsuite/gcc.dg/tree-ssa/modref-2.c
  334e0ec1f029b77bf1561db75278d646  gcc/testsuite/gcc.dg/tree-ssa/modref-3.c
! a633f9c340bd2617e76901560b730d85  gcc/testsuite/gcc.dg/tree-ssa/modref-4.c
! e96754c86c30f43720087d086e3c7872  gcc/testsuite/gcc.dg/tree-ssa/modref-5.c
! a16213560fee595e00528f932a75842e  gcc/testsuite/gcc.dg/tree-ssa/modref-6.c
! 8a8d9b8e22b86c701cfa95cfd819ab5b  gcc/testsuite/gcc.dg/tree-ssa/modref-7.c
! 02ef4d185fbab110ddca67e9461987d0  gcc/testsuite/gcc.dg/tree-ssa/modref-8.c
! a661e47d9c7cde7fb3bbbcdaaed1569d  gcc/testsuite/gcc.dg/tree-ssa/modref-9.c
! db7307a8890262a35cc483458c2b461a  gcc/testsuite/gcc.dg/tree-ssa/modref-dse-1.c
! fd326f4e5a35e41b78cb70f85b0fff1d  gcc/testsuite/gcc.dg/tree-ssa/modref-dse-2.c
! 2c79d00def16677b7141b47de6a8ddcf  gcc/testsuite/gcc.dg/tree-ssa/modref-dse-3.c
! 6b82bd78f57bf0a626ba00a1871e56d6  gcc/testsuite/gcc.dg/tree-ssa/modref-dse-4.c
! 3c0de53016b809ca5a6648715861af8c  gcc/testsuite/gcc.dg/tree-ssa/modref-dse-5.c
! 2f41932c23afcb14f9d5b5feeeb14e2b  gcc/testsuite/gcc.dg/tree-ssa/modref-dse-6.c
  86b3b545b7d95e5a9edad0a6ab56705b  gcc/testsuite/gcc.dg/tree-ssa/mulcmp-1.c
  9d609bd79769ece6157bc34fbbb0371f  gcc/testsuite/gcc.dg/tree-ssa/muldiv-1.c
  9a861088652f3a7c7b3117c9a108131a  gcc/testsuite/gcc.dg/tree-ssa/muldiv-2.c
*************** f6de6823f77331b8ef4448fbe62f4f13  gcc/te
*** 44277,44283 ****
  e548a94664ac02f15cfda14370455269  gcc/testsuite/gcc.dg/tree-ssa/negneg-2.c
  fd3e17bbeabb9e9147c31ce59d7f4c05  gcc/testsuite/gcc.dg/tree-ssa/negneg-3.c
  3819fd1873721abc800e327bb75f2977  gcc/testsuite/gcc.dg/tree-ssa/negneg-4.c
! a5e72da60a89c4ec057ab78f4a8cd8ea  gcc/testsuite/gcc.dg/tree-ssa/nonzero-1.c
  9408e54e117e3760c360e811a1decee4  gcc/testsuite/gcc.dg/tree-ssa/noreturn-1.c
  6ba638f6fba141cf2cfcb69f3310cec3  gcc/testsuite/gcc.dg/tree-ssa/operand-equal-1.c
  92e3c8666216cd6c40ba9fcb1eaa2a54  gcc/testsuite/gcc.dg/tree-ssa/operand-equal-2.c
--- 46172,46179 ----
  e548a94664ac02f15cfda14370455269  gcc/testsuite/gcc.dg/tree-ssa/negneg-2.c
  fd3e17bbeabb9e9147c31ce59d7f4c05  gcc/testsuite/gcc.dg/tree-ssa/negneg-3.c
  3819fd1873721abc800e327bb75f2977  gcc/testsuite/gcc.dg/tree-ssa/negneg-4.c
! fa56920695d7960f275efc9fdfa0cbea  gcc/testsuite/gcc.dg/tree-ssa/nonzero-1.c
! e0419e6272f3f7d06ab87ebdcac6b06f  gcc/testsuite/gcc.dg/tree-ssa/nonzero-1a.c
  9408e54e117e3760c360e811a1decee4  gcc/testsuite/gcc.dg/tree-ssa/noreturn-1.c
  6ba638f6fba141cf2cfcb69f3310cec3  gcc/testsuite/gcc.dg/tree-ssa/operand-equal-1.c
  92e3c8666216cd6c40ba9fcb1eaa2a54  gcc/testsuite/gcc.dg/tree-ssa/operand-equal-2.c
*************** ce587f71a4758452bb7bdd847c66e619  gcc/te
*** 44285,44296 ****
  20ab75cc87eeb1a4398c8dd8140e58c6  gcc/testsuite/gcc.dg/tree-ssa/overflow-2.c
  5a98b1998ff6213f7c4d03f86ad6f651  gcc/testsuite/gcc.dg/tree-ssa/peel1.c
  ca3185e60127c7a83151ffd5cf76d1d2  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-1.c
! 4cf4f2f682010f090330cd658d262c58  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-10.c
  e40f317a34d22fbf09f2b1db491def14  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-11.c
  011ea18f978c3701197e309155a7c66e  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-12.c
  2315edbc8be9e00abb8b2120e7385e60  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-13.c
  a04c669a3f306e10deecdc4abacd9740  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-14.c
! 6c15ad950af0df71c11396193a437eb3  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-15.c
  743fed2e3b69fed64c0a64c9ad3d30d0  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-16.c
  c6bab30ae3a1787d5ea4950933c06c28  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-17.c
  9a9c396e92e733d8de653209b1837b47  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-18.c
--- 46181,46192 ----
  20ab75cc87eeb1a4398c8dd8140e58c6  gcc/testsuite/gcc.dg/tree-ssa/overflow-2.c
  5a98b1998ff6213f7c4d03f86ad6f651  gcc/testsuite/gcc.dg/tree-ssa/peel1.c
  ca3185e60127c7a83151ffd5cf76d1d2  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-1.c
! 1669094b5b199dda6f7632cac7062c80  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-10.c
  e40f317a34d22fbf09f2b1db491def14  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-11.c
  011ea18f978c3701197e309155a7c66e  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-12.c
  2315edbc8be9e00abb8b2120e7385e60  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-13.c
  a04c669a3f306e10deecdc4abacd9740  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-14.c
! f9a4deff22999b8c987de60c9aa84e72  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-15.c
  743fed2e3b69fed64c0a64c9ad3d30d0  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-16.c
  c6bab30ae3a1787d5ea4950933c06c28  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-17.c
  9a9c396e92e733d8de653209b1837b47  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-18.c
*************** c6bab30ae3a1787d5ea4950933c06c28  gcc/te
*** 44299,44326 ****
  527210fcbd1816aa28cc65d7c33068fa  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-20.c
  b84a8bc940945b8cdca0c6ff5ccff1af  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-21.c
  da93f33fbcf120eb1e7aa848bb5b3ed8  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-22.c
  9c5b91e9723f7d587ab6723f6d888f0c  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-3.c
  abf36d925f7053c105cfd3f71d64a6a7  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-4.c
  355dc8df4a0d47b33dae9c0577572ea2  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-5.c
  033ff5a0b13956ee34bb2647a8515399  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-6.c
! ceb07c8e0ee907b848811de45fa18461  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-7.c
  dec7e9a594d55bb6427abfb7ee0ae7b3  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-8.c
  1e3a245190acf2fd12bb7c7a73b26fce  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-9.c
! d3fd2d4b1bfd78cb7b871d924394f42e  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-1.c
! 383967ca67fe7b8404617e3c8edf0f28  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-2.c
! a206e6b30ae9381ad98f764980c793f5  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-3.c
! 47c8158ac9cffd0feea9b129a2831667  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-4.c
  db4f86a4f8ff0fc9653954f4e21c1f3f  gcc/testsuite/gcc.dg/tree-ssa/popcount.c
  1e2db2ea55f8eb96805a4dc045b119c5  gcc/testsuite/gcc.dg/tree-ssa/popcount2.c
  39af726ca8012f85160b6180dd60017f  gcc/testsuite/gcc.dg/tree-ssa/popcount3.c
  2fb4e6c2bc49e5d7ef90a8c649a0e14d  gcc/testsuite/gcc.dg/tree-ssa/popcount4.c
! a894721a77fea7c94bacb921fa950e92  gcc/testsuite/gcc.dg/tree-ssa/popcount4l.c
! 92913082e4a596891541f5a15c6b7870  gcc/testsuite/gcc.dg/tree-ssa/popcount4ll.c
  4c5f6856cd0cacec06d4f42d7dc705a3  gcc/testsuite/gcc.dg/tree-ssa/popcount5.c
  37c95d5ee8501532edd39636e62b1144  gcc/testsuite/gcc.dg/tree-ssa/popcount5l.c
! 5865561cafce8352e1b97ad299ec6398  gcc/testsuite/gcc.dg/tree-ssa/popcount5ll.c
! 54f39b48fa6b3cbd7593e9bc52d33a21  gcc/testsuite/gcc.dg/tree-ssa/pr100278.c
  d5dace55f72aa8ccb51636dff79f5ccc  gcc/testsuite/gcc.dg/tree-ssa/pr101824.c
  78e6c5fe63f7305009c8a79840fe20dc  gcc/testsuite/gcc.dg/tree-ssa/pr13146.c
  eab19e0c04884cd782c9879cbe292109  gcc/testsuite/gcc.dg/tree-ssa/pr14341.c
  9945ed7002a5f7d4918e8ff5eb4cb647  gcc/testsuite/gcc.dg/tree-ssa/pr14490-1.c
--- 46195,46246 ----
  527210fcbd1816aa28cc65d7c33068fa  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-20.c
  b84a8bc940945b8cdca0c6ff5ccff1af  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-21.c
  da93f33fbcf120eb1e7aa848bb5b3ed8  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-22.c
+ 0ae1e2bf0f244e9fefe7b6415d62420c  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-23.c
+ a8fbbb3d3180114ac0b2febbc18b2de7  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-24.c
+ c77e1e558a98210ffc3ec93562f1bb78  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-25.c
+ ddfeb5736d45279be3efa9397b59d63c  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-26.c
  9c5b91e9723f7d587ab6723f6d888f0c  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-3.c
  abf36d925f7053c105cfd3f71d64a6a7  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-4.c
  355dc8df4a0d47b33dae9c0577572ea2  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-5.c
  033ff5a0b13956ee34bb2647a8515399  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-6.c
! 514de6e24d86533ce1f0d4152530aef0  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-7.c
  dec7e9a594d55bb6427abfb7ee0ae7b3  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-8.c
  1e3a245190acf2fd12bb7c7a73b26fce  gcc/testsuite/gcc.dg/tree-ssa/phi-opt-9.c
! 9f5959d9081cec34b53244a5c485281a  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-1.c
! 44b84455e4e32ef45ab0091bcb29e029  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-2.c
! f26d2e01babf45dbaeac6dc0140557e7  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-3.c
! e6b4d4e12abe0ec0eba00659cb2c72b1  gcc/testsuite/gcc.dg/tree-ssa/phi_on_compare-4.c
  db4f86a4f8ff0fc9653954f4e21c1f3f  gcc/testsuite/gcc.dg/tree-ssa/popcount.c
  1e2db2ea55f8eb96805a4dc045b119c5  gcc/testsuite/gcc.dg/tree-ssa/popcount2.c
  39af726ca8012f85160b6180dd60017f  gcc/testsuite/gcc.dg/tree-ssa/popcount3.c
  2fb4e6c2bc49e5d7ef90a8c649a0e14d  gcc/testsuite/gcc.dg/tree-ssa/popcount4.c
! f62ac8c6a6ff1517485b4579f8a00f33  gcc/testsuite/gcc.dg/tree-ssa/popcount4l.c
! 4937840294c08122588eed29b4080e7e  gcc/testsuite/gcc.dg/tree-ssa/popcount4ll.c
  4c5f6856cd0cacec06d4f42d7dc705a3  gcc/testsuite/gcc.dg/tree-ssa/popcount5.c
  37c95d5ee8501532edd39636e62b1144  gcc/testsuite/gcc.dg/tree-ssa/popcount5l.c
! ecd327087ec5129f4762a83c6c58bb42  gcc/testsuite/gcc.dg/tree-ssa/popcount5ll.c
! 644a9ec23e3054a4b9900bbd8c6a2ce5  gcc/testsuite/gcc.dg/tree-ssa/pr100359.c
! 6804f4f388ad8b533f34eb3de20dac4d  gcc/testsuite/gcc.dg/tree-ssa/pr100794.c
  d5dace55f72aa8ccb51636dff79f5ccc  gcc/testsuite/gcc.dg/tree-ssa/pr101824.c
+ c3925f4a4c97c2d1ae9800c4011550d8  gcc/testsuite/gcc.dg/tree-ssa/pr101941-1.c
+ f8aa58d775821ac68e9eb39aea49d62d  gcc/testsuite/gcc.dg/tree-ssa/pr102232.c
+ 015eeaafe9c8e7b743c67fed8fc93670  gcc/testsuite/gcc.dg/tree-ssa/pr102546.c
+ a83cf6ce07b5beafc03b84bd91b5dbcb  gcc/testsuite/gcc.dg/tree-ssa/pr102563.c
+ 07cbfe319374507b0bd58c75bf83d9e2  gcc/testsuite/gcc.dg/tree-ssa/pr102736.c
+ 335850968e8422bffc030a8ed0663409  gcc/testsuite/gcc.dg/tree-ssa/pr102880.c
+ dfb016d569355b28ba6779d09c046dc0  gcc/testsuite/gcc.dg/tree-ssa/pr102906.c
+ 66d04412379b88da47a1d7719a486521  gcc/testsuite/gcc.dg/tree-ssa/pr102951.c
+ 3d9ce0b9ef3ec6fd5d7af58be5981acf  gcc/testsuite/gcc.dg/tree-ssa/pr103218-1.c
+ 5b6a1931ccb7ed77520cf6a46fa9c206  gcc/testsuite/gcc.dg/tree-ssa/pr103220-1.c
+ 1b6aab39cb00aab8caa94da6a0cdeb71  gcc/testsuite/gcc.dg/tree-ssa/pr103220-2.c
+ cfd7d842f63da4db48b1d992a8c985eb  gcc/testsuite/gcc.dg/tree-ssa/pr103228-1.c
+ 4e381cb067a220525cf16869cb8387e2  gcc/testsuite/gcc.dg/tree-ssa/pr103245-1.c
+ fa56633d7111e0bde475691ce592224c  gcc/testsuite/gcc.dg/tree-ssa/pr103257-1.c
+ 5fe9aa8fe861dcc2248a00967f9079d7  gcc/testsuite/gcc.dg/tree-ssa/pr103345.c
+ ba5fbae8412c94dcffa215cb6cff04c0  gcc/testsuite/gcc.dg/tree-ssa/pr103514.c
+ b09ca12340e534366a044672763446bf  gcc/testsuite/gcc.dg/tree-ssa/pr104639-1.c
+ c502141393b8f053f7454ee254898a9a  gcc/testsuite/gcc.dg/tree-ssa/pr104639-2.c
+ 83ed534d9becd608f3b5229e52d305d0  gcc/testsuite/gcc.dg/tree-ssa/pr104645.c
  78e6c5fe63f7305009c8a79840fe20dc  gcc/testsuite/gcc.dg/tree-ssa/pr13146.c
  eab19e0c04884cd782c9879cbe292109  gcc/testsuite/gcc.dg/tree-ssa/pr14341.c
  9945ed7002a5f7d4918e8ff5eb4cb647  gcc/testsuite/gcc.dg/tree-ssa/pr14490-1.c
*************** eaefeae1c44e13e51e51153845b4df7c  gcc/te
*** 44356,44362 ****
  13d5419b87b638aa5366d59fe3ca4b4e  gcc/testsuite/gcc.dg/tree-ssa/pr18908.c
  b7c0f0ae0f78f7f701a691c6c65be4f0  gcc/testsuite/gcc.dg/tree-ssa/pr19055-2.c
  81ec4769e91b67cba8adf301e13ceee6  gcc/testsuite/gcc.dg/tree-ssa/pr19055.c
! fb57a50de1386a7378d80550a783348b  gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c
  84acfbdbef946eed1b842ea5c6a0f449  gcc/testsuite/gcc.dg/tree-ssa/pr19431.c
  36099f397d1202fbac72f47de17570cd  gcc/testsuite/gcc.dg/tree-ssa/pr19590.c
  fa134b7b09128388df0cf5dfe1f05256  gcc/testsuite/gcc.dg/tree-ssa/pr19633.c
--- 46276,46282 ----
  13d5419b87b638aa5366d59fe3ca4b4e  gcc/testsuite/gcc.dg/tree-ssa/pr18908.c
  b7c0f0ae0f78f7f701a691c6c65be4f0  gcc/testsuite/gcc.dg/tree-ssa/pr19055-2.c
  81ec4769e91b67cba8adf301e13ceee6  gcc/testsuite/gcc.dg/tree-ssa/pr19055.c
! 1ed921b39ad6fd7dc70ec46f2562c3e6  gcc/testsuite/gcc.dg/tree-ssa/pr19210-1.c
  84acfbdbef946eed1b842ea5c6a0f449  gcc/testsuite/gcc.dg/tree-ssa/pr19431.c
  36099f397d1202fbac72f47de17570cd  gcc/testsuite/gcc.dg/tree-ssa/pr19590.c
  fa134b7b09128388df0cf5dfe1f05256  gcc/testsuite/gcc.dg/tree-ssa/pr19633.c
*************** e8abc7d5f3d4fef21d06eec48f3389e8  gcc/te
*** 44368,44393 ****
  1ec162aa74dccae78e824ec108c86c61  gcc/testsuite/gcc.dg/tree-ssa/pr20470.c
  50fa95184525227ec9edcf572adafb03  gcc/testsuite/gcc.dg/tree-ssa/pr20490.c
  eb9cdb731a638b47ce0c22ca470edb30  gcc/testsuite/gcc.dg/tree-ssa/pr20657.c
! 22cdec96a884f0d8b0d31d25aa3691b9  gcc/testsuite/gcc.dg/tree-ssa/pr20701.c
! 5d3cc9ecca31bef13a5ee94a0668f226  gcc/testsuite/gcc.dg/tree-ssa/pr20702.c
! 738c7cc83dcdd6356d2c052f533c2329  gcc/testsuite/gcc.dg/tree-ssa/pr20739.c
  3e7b00190ef12800b35acc9eed263b78  gcc/testsuite/gcc.dg/tree-ssa/pr20742.c
  ea6a7baaceb80ef4cf5f5c5cf3e7788b  gcc/testsuite/gcc.dg/tree-ssa/pr20913.c
  21ca149e1a153a2e4912b783ba87a9cd  gcc/testsuite/gcc.dg/tree-ssa/pr20933.c
! 691ea964b825e34fa9f73edcab74de31  gcc/testsuite/gcc.dg/tree-ssa/pr21001.c
  3df7eb8e85d5e3fbf792b99dc93158cb  gcc/testsuite/gcc.dg/tree-ssa/pr21029.c
  80ab089d53ed0ce00131e55e52e52cc9  gcc/testsuite/gcc.dg/tree-ssa/pr21031.c
! 762987dc536f621098e8ce67d052af81  gcc/testsuite/gcc.dg/tree-ssa/pr21086.c
! 62def4456e8ee202759cf4f51ecabbc1  gcc/testsuite/gcc.dg/tree-ssa/pr21090.c
  384d3992a260f2e50d316f50da5bf19f  gcc/testsuite/gcc.dg/tree-ssa/pr21171.c
! eb2334e27b8fe3489aaf012e4817cd9b  gcc/testsuite/gcc.dg/tree-ssa/pr21294.c
  9f9eaaeec583d0deb4e33fb5c3bd15dc  gcc/testsuite/gcc.dg/tree-ssa/pr21332.c
! a1f8da9733598b60cf26250ac606dd86  gcc/testsuite/gcc.dg/tree-ssa/pr21417.c
! f4391317f722eacd6767d7f12b939e6f  gcc/testsuite/gcc.dg/tree-ssa/pr21458-2.c
  c048bfe35c82ce2ba96ac7bbf0e4d40d  gcc/testsuite/gcc.dg/tree-ssa/pr21458.c
  1bd3a1ab25743cbb8d3d657555246fd1  gcc/testsuite/gcc.dg/tree-ssa/pr21463.c
! 4a708de3cb064176a8a1940bf31bfb6c  gcc/testsuite/gcc.dg/tree-ssa/pr21559.c
! 7f040d8d1ddfd89ea6cc597b6808d988  gcc/testsuite/gcc.dg/tree-ssa/pr21563.c
  e64bddc662b76275a7129f612d2b6085  gcc/testsuite/gcc.dg/tree-ssa/pr21574.c
  c9c35449cae85d6c00c6086d9c5134ff  gcc/testsuite/gcc.dg/tree-ssa/pr21582.c
  c470c9ecd6998655ea7f5800cd64dfbc  gcc/testsuite/gcc.dg/tree-ssa/pr21658.c
--- 46288,46313 ----
  1ec162aa74dccae78e824ec108c86c61  gcc/testsuite/gcc.dg/tree-ssa/pr20470.c
  50fa95184525227ec9edcf572adafb03  gcc/testsuite/gcc.dg/tree-ssa/pr20490.c
  eb9cdb731a638b47ce0c22ca470edb30  gcc/testsuite/gcc.dg/tree-ssa/pr20657.c
! 627144ebe0d710f9394bc3aea67469ee  gcc/testsuite/gcc.dg/tree-ssa/pr20701.c
! e7b18ff3cf3359b9824faf6e90e24697  gcc/testsuite/gcc.dg/tree-ssa/pr20702.c
! ae08c16dd8b5ab7f07e32230d2d40f11  gcc/testsuite/gcc.dg/tree-ssa/pr20739.c
  3e7b00190ef12800b35acc9eed263b78  gcc/testsuite/gcc.dg/tree-ssa/pr20742.c
  ea6a7baaceb80ef4cf5f5c5cf3e7788b  gcc/testsuite/gcc.dg/tree-ssa/pr20913.c
  21ca149e1a153a2e4912b783ba87a9cd  gcc/testsuite/gcc.dg/tree-ssa/pr20933.c
! 49056d5d44fbe446a93fd20fc4137556  gcc/testsuite/gcc.dg/tree-ssa/pr21001.c
  3df7eb8e85d5e3fbf792b99dc93158cb  gcc/testsuite/gcc.dg/tree-ssa/pr21029.c
  80ab089d53ed0ce00131e55e52e52cc9  gcc/testsuite/gcc.dg/tree-ssa/pr21031.c
! 51e9543f2bce8b6726bfd06a3c8b61b3  gcc/testsuite/gcc.dg/tree-ssa/pr21086.c
! 08cbe1cfd69886f7e222a1ade2741847  gcc/testsuite/gcc.dg/tree-ssa/pr21090.c
  384d3992a260f2e50d316f50da5bf19f  gcc/testsuite/gcc.dg/tree-ssa/pr21171.c
! 9813a4e974f1f01e422b0d0a1ae30662  gcc/testsuite/gcc.dg/tree-ssa/pr21294.c
  9f9eaaeec583d0deb4e33fb5c3bd15dc  gcc/testsuite/gcc.dg/tree-ssa/pr21332.c
! d811d69b45b08696ad81b5f26e4a94ce  gcc/testsuite/gcc.dg/tree-ssa/pr21417.c
! 88444e3a0001ba06553cd234bcac03c5  gcc/testsuite/gcc.dg/tree-ssa/pr21458-2.c
  c048bfe35c82ce2ba96ac7bbf0e4d40d  gcc/testsuite/gcc.dg/tree-ssa/pr21458.c
  1bd3a1ab25743cbb8d3d657555246fd1  gcc/testsuite/gcc.dg/tree-ssa/pr21463.c
! 0669fd06935b54081677076b9ba7c6ab  gcc/testsuite/gcc.dg/tree-ssa/pr21559.c
! 1ad997bb33b318b3f1899968964c6be9  gcc/testsuite/gcc.dg/tree-ssa/pr21563.c
  e64bddc662b76275a7129f612d2b6085  gcc/testsuite/gcc.dg/tree-ssa/pr21574.c
  c9c35449cae85d6c00c6086d9c5134ff  gcc/testsuite/gcc.dg/tree-ssa/pr21582.c
  c470c9ecd6998655ea7f5800cd64dfbc  gcc/testsuite/gcc.dg/tree-ssa/pr21658.c
*************** e3417501272a4cb85765f1121b62d8a2  gcc/te
*** 44418,44424 ****
  0b915301cb092e08a955172bdfaee416  gcc/testsuite/gcc.dg/tree-ssa/pr23434.c
  3e0691ad05d535404af06ed20b38a6c9  gcc/testsuite/gcc.dg/tree-ssa/pr23455.c
  a6f655f4f2c501df04e063c61d2edb55  gcc/testsuite/gcc.dg/tree-ssa/pr23546.c
! f90cbb2268636ec0d6ea9029f70b2a02  gcc/testsuite/gcc.dg/tree-ssa/pr23744.c
  c8df40c2eab2c5754c4ebae4e7206ace  gcc/testsuite/gcc.dg/tree-ssa/pr23777.c
  2a51c69b66bee82b653f9d1ff2402531  gcc/testsuite/gcc.dg/tree-ssa/pr23848-1.c
  ec07b3c342a98fe6eea2420e1ad6f6e0  gcc/testsuite/gcc.dg/tree-ssa/pr23848-2.c
--- 46338,46344 ----
  0b915301cb092e08a955172bdfaee416  gcc/testsuite/gcc.dg/tree-ssa/pr23434.c
  3e0691ad05d535404af06ed20b38a6c9  gcc/testsuite/gcc.dg/tree-ssa/pr23455.c
  a6f655f4f2c501df04e063c61d2edb55  gcc/testsuite/gcc.dg/tree-ssa/pr23546.c
! 660412619853e2009ec3ef845ba5ee8c  gcc/testsuite/gcc.dg/tree-ssa/pr23744.c
  c8df40c2eab2c5754c4ebae4e7206ace  gcc/testsuite/gcc.dg/tree-ssa/pr23777.c
  2a51c69b66bee82b653f9d1ff2402531  gcc/testsuite/gcc.dg/tree-ssa/pr23848-1.c
  ec07b3c342a98fe6eea2420e1ad6f6e0  gcc/testsuite/gcc.dg/tree-ssa/pr23848-2.c
*************** ab49010858f8b691f088f8db3be45087  gcc/te
*** 44432,44438 ****
  c0a1f2659814aea6c50094421a4edf06  gcc/testsuite/gcc.dg/tree-ssa/pr2480.c
  942a30814110619b9b15a8c9c46ade9a  gcc/testsuite/gcc.dg/tree-ssa/pr24840.c
  782b0cce67a18c853602e0ee8ed2362a  gcc/testsuite/gcc.dg/tree-ssa/pr24990-1.c
! 1826e38311c355994f12a6d6a47ff740  gcc/testsuite/gcc.dg/tree-ssa/pr25382.c
  82a01e3fe1365999bbddfa65057fe78d  gcc/testsuite/gcc.dg/tree-ssa/pr25485.c
  e6f2dc95e9a1432ea587f9928972c3cc  gcc/testsuite/gcc.dg/tree-ssa/pr25501.c
  0703a224b24d09801e5615fb861b9dac  gcc/testsuite/gcc.dg/tree-ssa/pr25734.c
--- 46352,46358 ----
  c0a1f2659814aea6c50094421a4edf06  gcc/testsuite/gcc.dg/tree-ssa/pr2480.c
  942a30814110619b9b15a8c9c46ade9a  gcc/testsuite/gcc.dg/tree-ssa/pr24840.c
  782b0cce67a18c853602e0ee8ed2362a  gcc/testsuite/gcc.dg/tree-ssa/pr24990-1.c
! 750e50a42c46cceaac818b609672fd5a  gcc/testsuite/gcc.dg/tree-ssa/pr25382.c
  82a01e3fe1365999bbddfa65057fe78d  gcc/testsuite/gcc.dg/tree-ssa/pr25485.c
  e6f2dc95e9a1432ea587f9928972c3cc  gcc/testsuite/gcc.dg/tree-ssa/pr25501.c
  0703a224b24d09801e5615fb861b9dac  gcc/testsuite/gcc.dg/tree-ssa/pr25734.c
*************** a2fced1270cbdc50e78585c0f2078558  gcc/te
*** 44505,44515 ****
  e229772ee53d3e2888b309d217fc8ce6  gcc/testsuite/gcc.dg/tree-ssa/pr45397.c
  592ff825eb1ae28f2cc9fc5efa4063f8  gcc/testsuite/gcc.dg/tree-ssa/pr45427.c
  ef6ec480a985cb16007d515286369fd3  gcc/testsuite/gcc.dg/tree-ssa/pr46076.c
! a3bbde34e3a7870215b1302d7a513d1a  gcc/testsuite/gcc.dg/tree-ssa/pr47059.c
  e79e571a7bf87c1c43e941c3999280f2  gcc/testsuite/gcc.dg/tree-ssa/pr47286.c
  97fe9c848e0059a42c793036887ac8ec  gcc/testsuite/gcc.dg/tree-ssa/pr47392.c
  651299c6ba5061b1a8252251903e3396  gcc/testsuite/gcc.dg/tree-ssa/pr47477.c
! de8a7f5b3e73ebbe163eec7fb3f3ee70  gcc/testsuite/gcc.dg/tree-ssa/pr49039.c
  663b7106174eb118a93acae4227f5d0a  gcc/testsuite/gcc.dg/tree-ssa/pr49094.c
  7fd10ae4734437d73c4b61351e8748fc  gcc/testsuite/gcc.dg/tree-ssa/pr49642-1.c
  b5bb5cbf469f3f6b7ad4d515cf335dc1  gcc/testsuite/gcc.dg/tree-ssa/pr49642-2.c
--- 46425,46435 ----
  e229772ee53d3e2888b309d217fc8ce6  gcc/testsuite/gcc.dg/tree-ssa/pr45397.c
  592ff825eb1ae28f2cc9fc5efa4063f8  gcc/testsuite/gcc.dg/tree-ssa/pr45427.c
  ef6ec480a985cb16007d515286369fd3  gcc/testsuite/gcc.dg/tree-ssa/pr46076.c
! 2dee61dac00605930a2ca04d021577af  gcc/testsuite/gcc.dg/tree-ssa/pr47059.c
  e79e571a7bf87c1c43e941c3999280f2  gcc/testsuite/gcc.dg/tree-ssa/pr47286.c
  97fe9c848e0059a42c793036887ac8ec  gcc/testsuite/gcc.dg/tree-ssa/pr47392.c
  651299c6ba5061b1a8252251903e3396  gcc/testsuite/gcc.dg/tree-ssa/pr47477.c
! 8f4a3957cad45086e4ee6353f7fdb1f4  gcc/testsuite/gcc.dg/tree-ssa/pr49039.c
  663b7106174eb118a93acae4227f5d0a  gcc/testsuite/gcc.dg/tree-ssa/pr49094.c
  7fd10ae4734437d73c4b61351e8748fc  gcc/testsuite/gcc.dg/tree-ssa/pr49642-1.c
  b5bb5cbf469f3f6b7ad4d515cf335dc1  gcc/testsuite/gcc.dg/tree-ssa/pr49642-2.c
*************** eb3c860d5f9311432576d2c60ba8e833  gcc/te
*** 44521,44534 ****
  6eae7d338bd35ee75c95745a31735731  gcc/testsuite/gcc.dg/tree-ssa/pr54211.c
  5cfe577df2571b1475d5db616c40bf37  gcc/testsuite/gcc.dg/tree-ssa/pr54915.c
  87ba347e6d0c933e0a6a8cdb3c2f1bac  gcc/testsuite/gcc.dg/tree-ssa/pr55008.c
  c7ad6f1bea15d0129d2d4114715d38ab  gcc/testsuite/gcc.dg/tree-ssa/pr55579.c
  337de2f03bc182ae1e01fb18807fa344  gcc/testsuite/gcc.dg/tree-ssa/pr56719.c
  db0896d26b0b514a5ee7c242f2caf3fb  gcc/testsuite/gcc.dg/tree-ssa/pr56727.c
  a1b69b395bc1073391af5c497fbcaa6f  gcc/testsuite/gcc.dg/tree-ssa/pr57361.c
  3add5403cc3aefec17c98fd16ca42721  gcc/testsuite/gcc.dg/tree-ssa/pr57385.c
! 4a0444381b53948b4880a2fd06b543eb  gcc/testsuite/gcc.dg/tree-ssa/pr58480.c
  c4bed0849dd869035230ef14c12f5167  gcc/testsuite/gcc.dg/tree-ssa/pr58958.c
! 7f845c9be828acd81b17482eea1f54c0  gcc/testsuite/gcc.dg/tree-ssa/pr59597.c
  57d2eb9aedc84f2534151f02031e4f6f  gcc/testsuite/gcc.dg/tree-ssa/pr60770-1.c
  c1a1214c4f6f4e4d71a1466aa45fbc98  gcc/testsuite/gcc.dg/tree-ssa/pr61090.c
  45898ae21ed46306d601cd4c7d93f545  gcc/testsuite/gcc.dg/tree-ssa/pr61140.c
--- 46441,46455 ----
  6eae7d338bd35ee75c95745a31735731  gcc/testsuite/gcc.dg/tree-ssa/pr54211.c
  5cfe577df2571b1475d5db616c40bf37  gcc/testsuite/gcc.dg/tree-ssa/pr54915.c
  87ba347e6d0c933e0a6a8cdb3c2f1bac  gcc/testsuite/gcc.dg/tree-ssa/pr55008.c
+ d64d66e96b2a81e7097abe36ef4bafbd  gcc/testsuite/gcc.dg/tree-ssa/pr55177-1.c
  c7ad6f1bea15d0129d2d4114715d38ab  gcc/testsuite/gcc.dg/tree-ssa/pr55579.c
  337de2f03bc182ae1e01fb18807fa344  gcc/testsuite/gcc.dg/tree-ssa/pr56719.c
  db0896d26b0b514a5ee7c242f2caf3fb  gcc/testsuite/gcc.dg/tree-ssa/pr56727.c
  a1b69b395bc1073391af5c497fbcaa6f  gcc/testsuite/gcc.dg/tree-ssa/pr57361.c
  3add5403cc3aefec17c98fd16ca42721  gcc/testsuite/gcc.dg/tree-ssa/pr57385.c
! 6e5c334c8814768ab3b4bf81240e5d61  gcc/testsuite/gcc.dg/tree-ssa/pr58480.c
  c4bed0849dd869035230ef14c12f5167  gcc/testsuite/gcc.dg/tree-ssa/pr58958.c
! 5b6fd58d9cdc48456cdf2ff0d44fd256  gcc/testsuite/gcc.dg/tree-ssa/pr59597.c
  57d2eb9aedc84f2534151f02031e4f6f  gcc/testsuite/gcc.dg/tree-ssa/pr60770-1.c
  c1a1214c4f6f4e4d71a1466aa45fbc98  gcc/testsuite/gcc.dg/tree-ssa/pr61090.c
  45898ae21ed46306d601cd4c7d93f545  gcc/testsuite/gcc.dg/tree-ssa/pr61140.c
*************** c1a1214c4f6f4e4d71a1466aa45fbc98  gcc/te
*** 44539,44553 ****
  7d548dcaea296768cf61e084e5c869fa  gcc/testsuite/gcc.dg/tree-ssa/pr61607.c
  6385de463934a70dde788fe6ba5fc47f  gcc/testsuite/gcc.dg/tree-ssa/pr61743-1.c
  feb9a853a0548af696e7d13eeb3a435d  gcc/testsuite/gcc.dg/tree-ssa/pr61743-2.c
! 1e30fdf4aaf5084af4c25766063618b0  gcc/testsuite/gcc.dg/tree-ssa/pr61839_1.c
! a2b8cdb809ce4c1f4937fe65bb542179  gcc/testsuite/gcc.dg/tree-ssa/pr61839_2.c
! 0c97984d60acec4acdbb0b38ee88be63  gcc/testsuite/gcc.dg/tree-ssa/pr61839_3.c
  fdf71b131cfffb1acfa1864e8be83ea3  gcc/testsuite/gcc.dg/tree-ssa/pr61839_4.c
  2a97f529e786df2ff135adfdcea70961  gcc/testsuite/gcc.dg/tree-ssa/pr62112-1.c
  28fc1a0b84d44cad29c7e6681e432132  gcc/testsuite/gcc.dg/tree-ssa/pr62112-2.c
  e6986386d8ec85afd7b821cc2f311d1c  gcc/testsuite/gcc.dg/tree-ssa/pr63586-2.c
  7cb0ed762682bb1350e760c82051ad0c  gcc/testsuite/gcc.dg/tree-ssa/pr63586.c
! 7dafd2742c71997084f2d7fbb14c2e57  gcc/testsuite/gcc.dg/tree-ssa/pr64130.c
  7f34c9c0ef0ca4e4b8f8e09ebbb76c98  gcc/testsuite/gcc.dg/tree-ssa/pr64183.c
  5dc285c0d3c4c8e53576556df36ac611  gcc/testsuite/gcc.dg/tree-ssa/pr64705.c
  90f529734a2276aada8ec622a1073c62  gcc/testsuite/gcc.dg/tree-ssa/pr64801.c
--- 46460,46474 ----
  7d548dcaea296768cf61e084e5c869fa  gcc/testsuite/gcc.dg/tree-ssa/pr61607.c
  6385de463934a70dde788fe6ba5fc47f  gcc/testsuite/gcc.dg/tree-ssa/pr61743-1.c
  feb9a853a0548af696e7d13eeb3a435d  gcc/testsuite/gcc.dg/tree-ssa/pr61743-2.c
! 174dd9ccabd7870a921d0b57e13fee9a  gcc/testsuite/gcc.dg/tree-ssa/pr61839_1.c
! b6bdc9b73d81393380cf8bb76886499a  gcc/testsuite/gcc.dg/tree-ssa/pr61839_2.c
! 22b5f250c401521ade0a1cdcbe141c75  gcc/testsuite/gcc.dg/tree-ssa/pr61839_3.c
  fdf71b131cfffb1acfa1864e8be83ea3  gcc/testsuite/gcc.dg/tree-ssa/pr61839_4.c
  2a97f529e786df2ff135adfdcea70961  gcc/testsuite/gcc.dg/tree-ssa/pr62112-1.c
  28fc1a0b84d44cad29c7e6681e432132  gcc/testsuite/gcc.dg/tree-ssa/pr62112-2.c
  e6986386d8ec85afd7b821cc2f311d1c  gcc/testsuite/gcc.dg/tree-ssa/pr63586-2.c
  7cb0ed762682bb1350e760c82051ad0c  gcc/testsuite/gcc.dg/tree-ssa/pr63586.c
! 83f806144c4d28ee655a0a4ed7c67b69  gcc/testsuite/gcc.dg/tree-ssa/pr64130.c
  7f34c9c0ef0ca4e4b8f8e09ebbb76c98  gcc/testsuite/gcc.dg/tree-ssa/pr64183.c
  5dc285c0d3c4c8e53576556df36ac611  gcc/testsuite/gcc.dg/tree-ssa/pr64705.c
  90f529734a2276aada8ec622a1073c62  gcc/testsuite/gcc.dg/tree-ssa/pr64801.c
*************** e3a8c430fd6ca31515a7e1bbea95b6dd  gcc/te
*** 44559,44569 ****
  6f286535adafcaa2bd2c8411c48b6c57  gcc/testsuite/gcc.dg/tree-ssa/pr66726-3.c
  b8c92b95a7a3a403ae8106229e562ab9  gcc/testsuite/gcc.dg/tree-ssa/pr66726-4.c
  b482edbf0104ac1d5032061561d34261  gcc/testsuite/gcc.dg/tree-ssa/pr66726.c
! 30039cbfd909c5c85f5747092a05c1c6  gcc/testsuite/gcc.dg/tree-ssa/pr66752-3.c
  bb8857e07a5b85d146bcc9aec96d0c1b  gcc/testsuite/gcc.dg/tree-ssa/pr67755.c
  acced9e3897b38598bca4bdfa2354b48  gcc/testsuite/gcc.dg/tree-ssa/pr67891.c
  9d94b8736a8137db631f83d5452e4332  gcc/testsuite/gcc.dg/tree-ssa/pr68021.c
! 0916bc22d47e8ffc6acf02f27c86fd34  gcc/testsuite/gcc.dg/tree-ssa/pr68198.c
  7bf0fe2fd8aa211be65e9ab33640c6e1  gcc/testsuite/gcc.dg/tree-ssa/pr68234.c
  cc336a7b72706a5f447ef6f6f2fa30d0  gcc/testsuite/gcc.dg/tree-ssa/pr68431.c
  077371c3709230f8854901c2ab4a933e  gcc/testsuite/gcc.dg/tree-ssa/pr68455.c
--- 46480,46490 ----
  6f286535adafcaa2bd2c8411c48b6c57  gcc/testsuite/gcc.dg/tree-ssa/pr66726-3.c
  b8c92b95a7a3a403ae8106229e562ab9  gcc/testsuite/gcc.dg/tree-ssa/pr66726-4.c
  b482edbf0104ac1d5032061561d34261  gcc/testsuite/gcc.dg/tree-ssa/pr66726.c
! a5d9293bea1c9447a8db52636544596a  gcc/testsuite/gcc.dg/tree-ssa/pr66752-3.c
  bb8857e07a5b85d146bcc9aec96d0c1b  gcc/testsuite/gcc.dg/tree-ssa/pr67755.c
  acced9e3897b38598bca4bdfa2354b48  gcc/testsuite/gcc.dg/tree-ssa/pr67891.c
  9d94b8736a8137db631f83d5452e4332  gcc/testsuite/gcc.dg/tree-ssa/pr68021.c
! b95875e0dc59ff9efbd8e9464ca6ceec  gcc/testsuite/gcc.dg/tree-ssa/pr68198.c
  7bf0fe2fd8aa211be65e9ab33640c6e1  gcc/testsuite/gcc.dg/tree-ssa/pr68234.c
  cc336a7b72706a5f447ef6f6f2fa30d0  gcc/testsuite/gcc.dg/tree-ssa/pr68431.c
  077371c3709230f8854901c2ab4a933e  gcc/testsuite/gcc.dg/tree-ssa/pr68455.c
*************** e8527fc0af4d4530b771535a495cee62  gcc/te
*** 44576,44591 ****
  535c7fa074506d9de36818bd96137ddb  gcc/testsuite/gcc.dg/tree-ssa/pr68619-4.c
  29f2a28e01ed0d201c2ca9327f579b1b  gcc/testsuite/gcc.dg/tree-ssa/pr68619-5.c
  444b256d35c7ed527841c6ca712d587e  gcc/testsuite/gcc.dg/tree-ssa/pr68714.c
! 16e271b48c41bd4213302cd85262fd88  gcc/testsuite/gcc.dg/tree-ssa/pr69196-1.c
  6a1b4ff94b03f62a4921f625f1b11e8d  gcc/testsuite/gcc.dg/tree-ssa/pr69270-2.c
! 77debcd2413c4d805c1b13869b4258c6  gcc/testsuite/gcc.dg/tree-ssa/pr69270-3.c
  920bbfed79f72b4a90eddd3306648c9b  gcc/testsuite/gcc.dg/tree-ssa/pr69270.c
  4c8881edc71005a1d85370d1a8358a54  gcc/testsuite/gcc.dg/tree-ssa/pr69355.c
  5b019fa45c335f7fb5befbed76021ee5  gcc/testsuite/gcc.dg/tree-ssa/pr69615.c
  da374335b5ce20d724b67b01ce0e71d3  gcc/testsuite/gcc.dg/tree-ssa/pr69666.c
  f7a3fabc9425270a4d8e40f8a991ca09  gcc/testsuite/gcc.dg/tree-ssa/pr69845-1.c
  885c1be5e32bb9fbd61002b21649165d  gcc/testsuite/gcc.dg/tree-ssa/pr69845-2.c
! 6e6845a9fd535b1e4161176393d5993c  gcc/testsuite/gcc.dg/tree-ssa/pr70232.c
  f1ac7f1c1aea72571d0586fcaa61bef4  gcc/testsuite/gcc.dg/tree-ssa/pr70372.c
  273685df2d6b0f16d53f2bcaaf31baf9  gcc/testsuite/gcc.dg/tree-ssa/pr70919.c
  b054aa571287b77ca429ba1ea5101d37  gcc/testsuite/gcc.dg/tree-ssa/pr71077.c
--- 46497,46512 ----
  535c7fa074506d9de36818bd96137ddb  gcc/testsuite/gcc.dg/tree-ssa/pr68619-4.c
  29f2a28e01ed0d201c2ca9327f579b1b  gcc/testsuite/gcc.dg/tree-ssa/pr68619-5.c
  444b256d35c7ed527841c6ca712d587e  gcc/testsuite/gcc.dg/tree-ssa/pr68714.c
! 0c78d91dfdb52bc5a13e535cc2b4ec36  gcc/testsuite/gcc.dg/tree-ssa/pr69196-1.c
  6a1b4ff94b03f62a4921f625f1b11e8d  gcc/testsuite/gcc.dg/tree-ssa/pr69270-2.c
! bc7e1d2ffb2f67bf2188f3d7cf829bb8  gcc/testsuite/gcc.dg/tree-ssa/pr69270-3.c
  920bbfed79f72b4a90eddd3306648c9b  gcc/testsuite/gcc.dg/tree-ssa/pr69270.c
  4c8881edc71005a1d85370d1a8358a54  gcc/testsuite/gcc.dg/tree-ssa/pr69355.c
  5b019fa45c335f7fb5befbed76021ee5  gcc/testsuite/gcc.dg/tree-ssa/pr69615.c
  da374335b5ce20d724b67b01ce0e71d3  gcc/testsuite/gcc.dg/tree-ssa/pr69666.c
  f7a3fabc9425270a4d8e40f8a991ca09  gcc/testsuite/gcc.dg/tree-ssa/pr69845-1.c
  885c1be5e32bb9fbd61002b21649165d  gcc/testsuite/gcc.dg/tree-ssa/pr69845-2.c
! 5a00a4912d86c86e3a085895a5985d5e  gcc/testsuite/gcc.dg/tree-ssa/pr70232.c
  f1ac7f1c1aea72571d0586fcaa61bef4  gcc/testsuite/gcc.dg/tree-ssa/pr70372.c
  273685df2d6b0f16d53f2bcaaf31baf9  gcc/testsuite/gcc.dg/tree-ssa/pr70919.c
  b054aa571287b77ca429ba1ea5101d37  gcc/testsuite/gcc.dg/tree-ssa/pr71077.c
*************** ec4b7d94932033d28ff6121721262531  gcc/te
*** 44603,44609 ****
  ddb7d1acbeecee399e40b50eb321ed6c  gcc/testsuite/gcc.dg/tree-ssa/pr71292.c
  af0e89efbbadc9da191dd9afe76725eb  gcc/testsuite/gcc.dg/tree-ssa/pr71347.c
  68ef5e22a9ea28a583ba444825dd1d95  gcc/testsuite/gcc.dg/tree-ssa/pr71408.c
! c4d7d823968dd588f29cd8bf4bb70294  gcc/testsuite/gcc.dg/tree-ssa/pr71437.c
  ae3d7a6c9e454aaf391e28ae99cabd11  gcc/testsuite/gcc.dg/tree-ssa/pr71520.c
  fc985b9774144c2828a0e626bd2fb632  gcc/testsuite/gcc.dg/tree-ssa/pr71563.c
  bb6227620f2569d9cb9cc9f421ad886d  gcc/testsuite/gcc.dg/tree-ssa/pr71661.c
--- 46524,46530 ----
  ddb7d1acbeecee399e40b50eb321ed6c  gcc/testsuite/gcc.dg/tree-ssa/pr71292.c
  af0e89efbbadc9da191dd9afe76725eb  gcc/testsuite/gcc.dg/tree-ssa/pr71347.c
  68ef5e22a9ea28a583ba444825dd1d95  gcc/testsuite/gcc.dg/tree-ssa/pr71408.c
! c6e53b962216c3d4107e0e9b9e7ba40e  gcc/testsuite/gcc.dg/tree-ssa/pr71437.c
  ae3d7a6c9e454aaf391e28ae99cabd11  gcc/testsuite/gcc.dg/tree-ssa/pr71520.c
  fc985b9774144c2828a0e626bd2fb632  gcc/testsuite/gcc.dg/tree-ssa/pr71563.c
  bb6227620f2569d9cb9cc9f421ad886d  gcc/testsuite/gcc.dg/tree-ssa/pr71661.c
*************** f9172c76ed973a0ef6eaf1fd3bdcaeda  gcc/te
*** 44621,44628 ****
  2a17ba6c252a87cc5295627f73e0bc7b  gcc/testsuite/gcc.dg/tree-ssa/pr72835.c
  dbe783b1444b6fe0f6050f81fb8e9be7  gcc/testsuite/gcc.dg/tree-ssa/pr73450.c
  9c09016657342d175ed211778556533a  gcc/testsuite/gcc.dg/tree-ssa/pr73714.c
! 99cdb3bd48299fd0dbfd59d2a34f3817  gcc/testsuite/gcc.dg/tree-ssa/pr77445-2.c
! d4c2ee6879df0cb21ab0c1cbf04ce6e8  gcc/testsuite/gcc.dg/tree-ssa/pr77445.c
  fe7d78a623debbe119b6b21716e26916  gcc/testsuite/gcc.dg/tree-ssa/pr77644.c
  bc785bd4625086bc4105460c4bac2646  gcc/testsuite/gcc.dg/tree-ssa/pr77664.c
  9ed3e61cfd24c874ed7327706b7c1525  gcc/testsuite/gcc.dg/tree-ssa/pr77808.c
--- 46542,46550 ----
  2a17ba6c252a87cc5295627f73e0bc7b  gcc/testsuite/gcc.dg/tree-ssa/pr72835.c
  dbe783b1444b6fe0f6050f81fb8e9be7  gcc/testsuite/gcc.dg/tree-ssa/pr73450.c
  9c09016657342d175ed211778556533a  gcc/testsuite/gcc.dg/tree-ssa/pr73714.c
! 4818d3e57161fc980cb8b919e9f538c8  gcc/testsuite/gcc.dg/tree-ssa/pr76174.c
! 5f547d777c7228698ea605bd7f602cf5  gcc/testsuite/gcc.dg/tree-ssa/pr77445-2.c
! 07047bfe1f25f9af3660a03b70ddb1aa  gcc/testsuite/gcc.dg/tree-ssa/pr77445.c
  fe7d78a623debbe119b6b21716e26916  gcc/testsuite/gcc.dg/tree-ssa/pr77644.c
  bc785bd4625086bc4105460c4bac2646  gcc/testsuite/gcc.dg/tree-ssa/pr77664.c
  9ed3e61cfd24c874ed7327706b7c1525  gcc/testsuite/gcc.dg/tree-ssa/pr77808.c
*************** fd9a5a83653b17b732084ec857d8b5e2  gcc/te
*** 44709,44715 ****
  68895ab1853c555ac17880a95d1a1608  gcc/testsuite/gcc.dg/tree-ssa/pr85726-2.c
  1f537ab13a756e65ab1eb0a769e7225e  gcc/testsuite/gcc.dg/tree-ssa/pr85726-3.c
  adf19a5c209e87c5c010abc148d4ac13  gcc/testsuite/gcc.dg/tree-ssa/pr85726-4.c
! ddb5ee3bd8812afba500f188676b01e6  gcc/testsuite/gcc.dg/tree-ssa/pr86017.c
  32b6db9ee9fd3d1c3a418840f7d7b941  gcc/testsuite/gcc.dg/tree-ssa/pr86061.c
  30155de058a9c0cbab30f9158615beb7  gcc/testsuite/gcc.dg/tree-ssa/pr86089.c
  0ecc71308b9eb8bad3bba22c3b06d19c  gcc/testsuite/gcc.dg/tree-ssa/pr86263.c
--- 46631,46637 ----
  68895ab1853c555ac17880a95d1a1608  gcc/testsuite/gcc.dg/tree-ssa/pr85726-2.c
  1f537ab13a756e65ab1eb0a769e7225e  gcc/testsuite/gcc.dg/tree-ssa/pr85726-3.c
  adf19a5c209e87c5c010abc148d4ac13  gcc/testsuite/gcc.dg/tree-ssa/pr85726-4.c
! 3387b557cd204635e5232fd4a9e03fd3  gcc/testsuite/gcc.dg/tree-ssa/pr86017.c
  32b6db9ee9fd3d1c3a418840f7d7b941  gcc/testsuite/gcc.dg/tree-ssa/pr86061.c
  30155de058a9c0cbab30f9158615beb7  gcc/testsuite/gcc.dg/tree-ssa/pr86089.c
  0ecc71308b9eb8bad3bba22c3b06d19c  gcc/testsuite/gcc.dg/tree-ssa/pr86263.c
*************** d70be7326192f6275dbf4aeaa98323e4  gcc/te
*** 44722,44728 ****
  5b3decd66562cb9326e6bbf3807cfc6e  gcc/testsuite/gcc.dg/tree-ssa/pr87287.c
  05c2182e1df00beabe0afdde30e1a7fe  gcc/testsuite/gcc.dg/tree-ssa/pr87917.c
  6f663cd84049811d9c00b4c7df7dd427  gcc/testsuite/gcc.dg/tree-ssa/pr88029.c
! 25e65dc245562e744264782d86425910  gcc/testsuite/gcc.dg/tree-ssa/pr88087.c
  353295aa9c114bd9239631c19c6ee75e  gcc/testsuite/gcc.dg/tree-ssa/pr88367.c
  7572e4ef6d27c444552d702f2e890c76  gcc/testsuite/gcc.dg/tree-ssa/pr88444.c
  76f4a6892f16b4d137e19af8c158cd30  gcc/testsuite/gcc.dg/tree-ssa/pr88676-2.c
--- 46644,46650 ----
  5b3decd66562cb9326e6bbf3807cfc6e  gcc/testsuite/gcc.dg/tree-ssa/pr87287.c
  05c2182e1df00beabe0afdde30e1a7fe  gcc/testsuite/gcc.dg/tree-ssa/pr87917.c
  6f663cd84049811d9c00b4c7df7dd427  gcc/testsuite/gcc.dg/tree-ssa/pr88029.c
! eed5b2cff52227d9a8fc56848f84c475  gcc/testsuite/gcc.dg/tree-ssa/pr88087.c
  353295aa9c114bd9239631c19c6ee75e  gcc/testsuite/gcc.dg/tree-ssa/pr88367.c
  7572e4ef6d27c444552d702f2e890c76  gcc/testsuite/gcc.dg/tree-ssa/pr88444.c
  76f4a6892f16b4d137e19af8c158cd30  gcc/testsuite/gcc.dg/tree-ssa/pr88676-2.c
*************** b0f2c1e77fc0cf943a631ac09484533b  gcc/te
*** 44731,44736 ****
--- 46653,46659 ----
  803805b14d72e2d3f4ed782e074f7424  gcc/testsuite/gcc.dg/tree-ssa/pr88775-1.c
  19fbd9df2abfe718608c05a3b0894fea  gcc/testsuite/gcc.dg/tree-ssa/pr88775-2.c
  e89f8e784c43baa5c307166a1b734b4b  gcc/testsuite/gcc.dg/tree-ssa/pr89060.c
+ d16b47ca881eb8e90be58ab33ff756b3  gcc/testsuite/gcc.dg/tree-ssa/pr89074.c
  024ba71c905d05d7a9881facfa2c7774  gcc/testsuite/gcc.dg/tree-ssa/pr89209.c
  e8d812d9f4cc1e5589250829f2d5788a  gcc/testsuite/gcc.dg/tree-ssa/pr89430-1.c
  48c96459dd271a728f17eda9f142d41f  gcc/testsuite/gcc.dg/tree-ssa/pr89430-2.c
*************** f1dcd7501f11cde86730fe9682f5800f  gcc/te
*** 44756,44762 ****
  3fb69a8e142b66d801784ef59cd6ac5a  gcc/testsuite/gcc.dg/tree-ssa/pr91029-2.c
  103840d2937e040bab69f9d58086e0b9  gcc/testsuite/gcc.dg/tree-ssa/pr91091-1.c
  97dbd55e973c0aeb3073bb7074ecbb87  gcc/testsuite/gcc.dg/tree-ssa/pr91091-2.c
! 6801c464c2c92911919baf75e4fa1123  gcc/testsuite/gcc.dg/tree-ssa/pr91482.c
  c56985aba27fe45fdf438551dcc4ab69  gcc/testsuite/gcc.dg/tree-ssa/pr91504.c
  2743452cb12bee6de4a0d759e6f1733a  gcc/testsuite/gcc.dg/tree-ssa/pr91579.c
  1eb325ec61e5d0650119ea5ceb8ef547  gcc/testsuite/gcc.dg/tree-ssa/pr91680.c
--- 46679,46685 ----
  3fb69a8e142b66d801784ef59cd6ac5a  gcc/testsuite/gcc.dg/tree-ssa/pr91029-2.c
  103840d2937e040bab69f9d58086e0b9  gcc/testsuite/gcc.dg/tree-ssa/pr91091-1.c
  97dbd55e973c0aeb3073bb7074ecbb87  gcc/testsuite/gcc.dg/tree-ssa/pr91091-2.c
! 6ded25a6acd595d2f2bbb609da0d9fb7  gcc/testsuite/gcc.dg/tree-ssa/pr91482.c
  c56985aba27fe45fdf438551dcc4ab69  gcc/testsuite/gcc.dg/tree-ssa/pr91504.c
  2743452cb12bee6de4a0d759e6f1733a  gcc/testsuite/gcc.dg/tree-ssa/pr91579.c
  1eb325ec61e5d0650119ea5ceb8ef547  gcc/testsuite/gcc.dg/tree-ssa/pr91680.c
*************** c25bc66e518faa330ec0e19ebd46e5b9  gcc/te
*** 44791,44801 ****
  6346b3e6adf9192925c0f0ead513d239  gcc/testsuite/gcc.dg/tree-ssa/pr93582-8.c
  45bf953087ec1f900da8458b7d5a998d  gcc/testsuite/gcc.dg/tree-ssa/pr93582-9.c
  8aa62492210b4d7d0f838a9c9389e359  gcc/testsuite/gcc.dg/tree-ssa/pr93776.c
! 1a405b78b602cc674ae92752feda1156  gcc/testsuite/gcc.dg/tree-ssa/pr93781-1.c
  e27849e4f028f9f63442449af6738404  gcc/testsuite/gcc.dg/tree-ssa/pr93781-2.c
  b422f5eb310c1b5a1626a8eabb17795e  gcc/testsuite/gcc.dg/tree-ssa/pr93781-3.c
  33ab3e37b42c43100380b00f9d1cb455  gcc/testsuite/gcc.dg/tree-ssa/pr94125.c
  bbbf863dee2a824829c30c4d90e56d15  gcc/testsuite/gcc.dg/tree-ssa/pr94482-2.c
  6759e8446575d37973251ebb39554ebf  gcc/testsuite/gcc.dg/tree-ssa/pr94598.c
  929805525efcbc94bb7e8e32ef629500  gcc/testsuite/gcc.dg/tree-ssa/pr94703.c
  7f05cf9d5762f54e0c1fe95789130e71  gcc/testsuite/gcc.dg/tree-ssa/pr94718-1.c
--- 46714,46725 ----
  6346b3e6adf9192925c0f0ead513d239  gcc/testsuite/gcc.dg/tree-ssa/pr93582-8.c
  45bf953087ec1f900da8458b7d5a998d  gcc/testsuite/gcc.dg/tree-ssa/pr93582-9.c
  8aa62492210b4d7d0f838a9c9389e359  gcc/testsuite/gcc.dg/tree-ssa/pr93776.c
! b1d064a3026e8b57269706b2db747e94  gcc/testsuite/gcc.dg/tree-ssa/pr93781-1.c
  e27849e4f028f9f63442449af6738404  gcc/testsuite/gcc.dg/tree-ssa/pr93781-2.c
  b422f5eb310c1b5a1626a8eabb17795e  gcc/testsuite/gcc.dg/tree-ssa/pr93781-3.c
  33ab3e37b42c43100380b00f9d1cb455  gcc/testsuite/gcc.dg/tree-ssa/pr94125.c
  bbbf863dee2a824829c30c4d90e56d15  gcc/testsuite/gcc.dg/tree-ssa/pr94482-2.c
+ 5641cc2d33b4b5aac36a179895dc88c9  gcc/testsuite/gcc.dg/tree-ssa/pr94589-1.c
  6759e8446575d37973251ebb39554ebf  gcc/testsuite/gcc.dg/tree-ssa/pr94598.c
  929805525efcbc94bb7e8e32ef629500  gcc/testsuite/gcc.dg/tree-ssa/pr94703.c
  7f05cf9d5762f54e0c1fe95789130e71  gcc/testsuite/gcc.dg/tree-ssa/pr94718-1.c
*************** f9ceb9a625b63e81fc2331eb81c935f7  gcc/te
*** 44819,44824 ****
--- 46743,46749 ----
  53e20037498a94809dbeff091a2e7fb5  gcc/testsuite/gcc.dg/tree-ssa/pr94969.c
  e438df2d333e51a54de1eaf993fc89f3  gcc/testsuite/gcc.dg/tree-ssa/pr95433-2.c
  25a5625263cb550c4c6310e3e2d365ad  gcc/testsuite/gcc.dg/tree-ssa/pr95433.c
+ 30f618089d9315c2f6a42b81b12a4653  gcc/testsuite/gcc.dg/tree-ssa/pr95527-2.c
  2fa4eb757c6960b5f94dfd8098e99c90  gcc/testsuite/gcc.dg/tree-ssa/pr95527.c
  8e1587090a7715a9871b035c0d8441b8  gcc/testsuite/gcc.dg/tree-ssa/pr95649.c
  c6af84a8aff126c3fa99b857da4a410d  gcc/testsuite/gcc.dg/tree-ssa/pr95699.c
*************** a0647084804b90be3e8bdad82c7777a9  gcc/te
*** 44843,44852 ****
  a73a95372785101c5f4de5e36a62d6a1  gcc/testsuite/gcc.dg/tree-ssa/pr96688.c
  70188bafba9d185995a25fd8835ab428  gcc/testsuite/gcc.dg/tree-ssa/pr96691.c
  79c2af3b956e595ff8675e6c9039ee00  gcc/testsuite/gcc.dg/tree-ssa/pr96730.c
  83c579881e1867fc68ce84f7d2d6c782  gcc/testsuite/gcc.dg/tree-ssa/pr96782.c
! 9f88bf70e6b3c0e0770b41f19e7e76ba  gcc/testsuite/gcc.dg/tree-ssa/pr96789.c
  7ce01d5539f42257afefbfc03dd79f4c  gcc/testsuite/gcc.dg/tree-ssa/pr96820.c
! fad1ff9b6c8425319a4c295488a4b38a  gcc/testsuite/gcc.dg/tree-ssa/pr96928.c
  cd30455cf81a7c851de09ae7ccd32f53  gcc/testsuite/gcc.dg/tree-ssa/pr96929.c
  ec73e83690c5ccb0dd96a87783cd4764  gcc/testsuite/gcc.dg/tree-ssa/pr96967.c
  6b92322818b0a3b87de6cd676b752a9d  gcc/testsuite/gcc.dg/tree-ssa/pr97009.c
--- 46768,46780 ----
  a73a95372785101c5f4de5e36a62d6a1  gcc/testsuite/gcc.dg/tree-ssa/pr96688.c
  70188bafba9d185995a25fd8835ab428  gcc/testsuite/gcc.dg/tree-ssa/pr96691.c
  79c2af3b956e595ff8675e6c9039ee00  gcc/testsuite/gcc.dg/tree-ssa/pr96730.c
+ 8c549fc58576f7fea896a3ca99d51eae  gcc/testsuite/gcc.dg/tree-ssa/pr96779-disabled.c
+ 1fa5fe03c2b3fe01e5ba5ecd2cba3da6  gcc/testsuite/gcc.dg/tree-ssa/pr96779.c
  83c579881e1867fc68ce84f7d2d6c782  gcc/testsuite/gcc.dg/tree-ssa/pr96782.c
! f1814d9f48268164f5abca2ef9ff90f6  gcc/testsuite/gcc.dg/tree-ssa/pr96789.c
  7ce01d5539f42257afefbfc03dd79f4c  gcc/testsuite/gcc.dg/tree-ssa/pr96820.c
! fa980ad551c7adb7b584cd182402985c  gcc/testsuite/gcc.dg/tree-ssa/pr96928-1.c
! 9b97a1400fb0604467a206299e821cac  gcc/testsuite/gcc.dg/tree-ssa/pr96928.c
  cd30455cf81a7c851de09ae7ccd32f53  gcc/testsuite/gcc.dg/tree-ssa/pr96929.c
  ec73e83690c5ccb0dd96a87783cd4764  gcc/testsuite/gcc.dg/tree-ssa/pr96967.c
  6b92322818b0a3b87de6cd676b752a9d  gcc/testsuite/gcc.dg/tree-ssa/pr97009.c
*************** baea640f2f5ede46363c43f03abd38cb  gcc/te
*** 44863,44874 ****
  4f67b77cce4d4a67193b302faa4ed10b  gcc/testsuite/gcc.dg/tree-ssa/pr98265.C
  2802e4a2ba6a403181f297d6a0a30fe5  gcc/testsuite/gcc.dg/tree-ssa/pr98455.c
  3725366f65490df73d15cafa94bca1d5  gcc/testsuite/gcc.dg/tree-ssa/pr98513.c
  566f2cf5c36f26ba96a5827e3ad9322f  gcc/testsuite/gcc.dg/tree-ssa/pr99142.c
  ade2a31f339a2cef5d9ebcd9b1f2cb67  gcc/testsuite/gcc.dg/tree-ssa/pr99578-1.c
  e6c9f2dd9d7405dee4bfd5d6d0fc455f  gcc/testsuite/gcc.dg/tree-ssa/pred-1.c
! 90c3c1a872e4566cc043c50e818ef036  gcc/testsuite/gcc.dg/tree-ssa/predcom-1.c
  ec45787b9b781da6181e7960a8cb76f0  gcc/testsuite/gcc.dg/tree-ssa/predcom-2.c
! 415a8b4fbc22ca5f932bd508feff442d  gcc/testsuite/gcc.dg/tree-ssa/predcom-3.c
  a01af62b0a92d61ae163e5294ef53944  gcc/testsuite/gcc.dg/tree-ssa/predcom-4.c
  22e897ef51f75d6342498f7c026af634  gcc/testsuite/gcc.dg/tree-ssa/predcom-5.c
  c16e2519f7131c283e7aee755fb3f7de  gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c
--- 46791,46807 ----
  4f67b77cce4d4a67193b302faa4ed10b  gcc/testsuite/gcc.dg/tree-ssa/pr98265.C
  2802e4a2ba6a403181f297d6a0a30fe5  gcc/testsuite/gcc.dg/tree-ssa/pr98455.c
  3725366f65490df73d15cafa94bca1d5  gcc/testsuite/gcc.dg/tree-ssa/pr98513.c
+ 93dba0e34b479058be098d254f289a3b  gcc/testsuite/gcc.dg/tree-ssa/pr98737-1.c
+ b72700d1405dc73ecb0cb4aae1b592f5  gcc/testsuite/gcc.dg/tree-ssa/pr98737-2.c
+ 8cf2154b162cdab518ec9a15e4f0f4ce  gcc/testsuite/gcc.dg/tree-ssa/pr98953.c
  566f2cf5c36f26ba96a5827e3ad9322f  gcc/testsuite/gcc.dg/tree-ssa/pr99142.c
+ 2f52ef9c058ed05fc6ab41c1d284a3a7  gcc/testsuite/gcc.dg/tree-ssa/pr99473-1.c
  ade2a31f339a2cef5d9ebcd9b1f2cb67  gcc/testsuite/gcc.dg/tree-ssa/pr99578-1.c
+ 25bc0c9f6fb706db98fb7274413f0086  gcc/testsuite/gcc.dg/tree-ssa/pr99793.c
  e6c9f2dd9d7405dee4bfd5d6d0fc455f  gcc/testsuite/gcc.dg/tree-ssa/pred-1.c
! 073bed4b8270e0ae3beaf5098f0630da  gcc/testsuite/gcc.dg/tree-ssa/predcom-1.c
  ec45787b9b781da6181e7960a8cb76f0  gcc/testsuite/gcc.dg/tree-ssa/predcom-2.c
! dc84bc461e507299eafa5a6975e4eded  gcc/testsuite/gcc.dg/tree-ssa/predcom-3.c
  a01af62b0a92d61ae163e5294ef53944  gcc/testsuite/gcc.dg/tree-ssa/predcom-4.c
  22e897ef51f75d6342498f7c026af634  gcc/testsuite/gcc.dg/tree-ssa/predcom-5.c
  c16e2519f7131c283e7aee755fb3f7de  gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c
*************** d4f7d4324a529b1938fb625888d2024d  gcc/te
*** 44879,44905 ****
  1206a8ad1fe06868f7b06f02d71cfa32  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-11.c
  7cabc27bc668f088021b366c1fb896e1  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-12.c
  145622925ffd732406b1b910be63998c  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-2.c
! d51ae7f7ba5d0cd1daa117714fb6b3e4  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-3.c
  6088369105f4efe7eb45ad7a363fb3ab  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-4.c
  d61d9e0865c3291b2a168f2caad031b5  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-5.c
  b907972571b881cc3feaf8a5cfaaad81  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-6.c
  053987c325ac49de1828cb89f01ecede  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-7.c
  1d80600c80442239544ab549170f2796  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-8.c
  93fcde4e41195522bad7807a40f99e79  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-9.c
! f67cefdd25b2088c2124e39bc00cf373  gcc/testsuite/gcc.dg/tree-ssa/prefetch-3.c
  7079d4a5b32b0fb90f75d41681a18ef5  gcc/testsuite/gcc.dg/tree-ssa/prefetch-4.c
  702b5dc387dece55e17d16332ba0c040  gcc/testsuite/gcc.dg/tree-ssa/prefetch-5.c
! dd1ae62d75455b67fc7746f4ea35508b  gcc/testsuite/gcc.dg/tree-ssa/prefetch-6.c
  aef854f254d834ddb7e56d1cfbc87d8c  gcc/testsuite/gcc.dg/tree-ssa/prefetch-7.c
! fbb19449bdf64a4716138fbe7fa86735  gcc/testsuite/gcc.dg/tree-ssa/prefetch-8.c
! 1e966414d40122370dd26107ba1ef8ee  gcc/testsuite/gcc.dg/tree-ssa/prefetch-9.c
! bf1677596880a6d0b10aae9445595cab  gcc/testsuite/gcc.dg/tree-ssa/pta-callused.c
  2889a37e4abece89645116192598e9c1  gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c
  0eab172a88acb62457c2ca2e4e478e99  gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c
  b3183a8068ff42b9045e5c2c03670e85  gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c
  fe1c318ea96ffe144e3739139fe328d5  gcc/testsuite/gcc.dg/tree-ssa/pta-fp.c
  91c0798da36e2a645f1be9f771afe271  gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-1.c
  dbd0bf7a5c79e66ce528e77a937779b7  gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-2.c
  45e9351a897d53e0e62a4f45bfdcb931  gcc/testsuite/gcc.dg/tree-ssa/reassoc-1.c
  2871dbb9f178364c514c54860eff37b1  gcc/testsuite/gcc.dg/tree-ssa/reassoc-10.c
  6d7e130191af5b0e41cbbb091bae44fd  gcc/testsuite/gcc.dg/tree-ssa/reassoc-11.c
--- 46812,46843 ----
  1206a8ad1fe06868f7b06f02d71cfa32  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-11.c
  7cabc27bc668f088021b366c1fb896e1  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-12.c
  145622925ffd732406b1b910be63998c  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-2.c
! 59d9653b1601b7829155f2638ba30498  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-3.c
  6088369105f4efe7eb45ad7a363fb3ab  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-4.c
  d61d9e0865c3291b2a168f2caad031b5  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-5.c
  b907972571b881cc3feaf8a5cfaaad81  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-6.c
  053987c325ac49de1828cb89f01ecede  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-7.c
  1d80600c80442239544ab549170f2796  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-8.c
  93fcde4e41195522bad7807a40f99e79  gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-9.c
! 69de4b2d3d49a610200ec75f43a8fcc2  gcc/testsuite/gcc.dg/tree-ssa/prefetch-3.c
  7079d4a5b32b0fb90f75d41681a18ef5  gcc/testsuite/gcc.dg/tree-ssa/prefetch-4.c
  702b5dc387dece55e17d16332ba0c040  gcc/testsuite/gcc.dg/tree-ssa/prefetch-5.c
! fc62a023d1086f7d7f3b273491f38574  gcc/testsuite/gcc.dg/tree-ssa/prefetch-6.c
  aef854f254d834ddb7e56d1cfbc87d8c  gcc/testsuite/gcc.dg/tree-ssa/prefetch-7.c
! 241191df5ff81b05eaeae07437bc5a50  gcc/testsuite/gcc.dg/tree-ssa/prefetch-8.c
! ebfee5909ffbe595960867349f1a0d2e  gcc/testsuite/gcc.dg/tree-ssa/prefetch-9.c
! b03938ad443132b24cbf1ec45e7fc6df  gcc/testsuite/gcc.dg/tree-ssa/pta-callused.c
  2889a37e4abece89645116192598e9c1  gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c
  0eab172a88acb62457c2ca2e4e478e99  gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c
  b3183a8068ff42b9045e5c2c03670e85  gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c
  fe1c318ea96ffe144e3739139fe328d5  gcc/testsuite/gcc.dg/tree-ssa/pta-fp.c
  91c0798da36e2a645f1be9f771afe271  gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-1.c
  dbd0bf7a5c79e66ce528e77a937779b7  gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-2.c
+ 2f310b89b6ab546f5e70431ba049c923  gcc/testsuite/gcc.dg/tree-ssa/ranger-threader-1.c
+ 9975b9ee1e191120cc40a3a199df785f  gcc/testsuite/gcc.dg/tree-ssa/ranger-threader-2.c
+ bcf9704e688257d7a8088a9c5b489b91  gcc/testsuite/gcc.dg/tree-ssa/ranger-threader-3.c
+ 62bc304e06dd9fcd02e6fed5c2caa3fd  gcc/testsuite/gcc.dg/tree-ssa/ranger-threader-4.c
+ 45c828cd1080992aefbeab607fd6ec49  gcc/testsuite/gcc.dg/tree-ssa/ranger-threader-5.c
  45e9351a897d53e0e62a4f45bfdcb931  gcc/testsuite/gcc.dg/tree-ssa/reassoc-1.c
  2871dbb9f178364c514c54860eff37b1  gcc/testsuite/gcc.dg/tree-ssa/reassoc-10.c
  6d7e130191af5b0e41cbbb091bae44fd  gcc/testsuite/gcc.dg/tree-ssa/reassoc-11.c
*************** fb8e1542fc1472c62c777c39fb27803a  gcc/te
*** 44940,44953 ****
  bc54a55ac78e555806e7b448f49728b0  gcc/testsuite/gcc.dg/tree-ssa/reassoc-43.c
  40306bba57979317f1b6ac5abc1c61aa  gcc/testsuite/gcc.dg/tree-ssa/reassoc-44.c
  43cedee8ba1282cf6b6558cafbaf9c24  gcc/testsuite/gcc.dg/tree-ssa/reassoc-45.c
  c75bffd403ebb6298962402a14677298  gcc/testsuite/gcc.dg/tree-ssa/reassoc-5.c
  94cde16fc63702fd4d0c7b45714d1eff  gcc/testsuite/gcc.dg/tree-ssa/reassoc-6.c
  af7283dee474093606fed455637b88f3  gcc/testsuite/gcc.dg/tree-ssa/reassoc-7.c
  399c20042466eb88f5c4c8b4ed15d6cb  gcc/testsuite/gcc.dg/tree-ssa/reassoc-8.c
  898bf73ccd91832671c8da00617439c7  gcc/testsuite/gcc.dg/tree-ssa/reassoc-9.c
  09a0ef1d8ae3fff11dd67dca71fd8ba0  gcc/testsuite/gcc.dg/tree-ssa/recip-1.c
  f4bcbafb829540ea32f44a5eb5d1b215  gcc/testsuite/gcc.dg/tree-ssa/recip-2.c
! 26ec93cd01fbe9e8dd93339a69f7ea50  gcc/testsuite/gcc.dg/tree-ssa/recip-3.c
  5b2e65e338a30863d4a32a9c0fa2ae41  gcc/testsuite/gcc.dg/tree-ssa/recip-4.c
  78cd4cb521cece5f9778a6c47bac5ffe  gcc/testsuite/gcc.dg/tree-ssa/recip-5.c
  6487b68e6cadf4f3a540ff4e3ee978c8  gcc/testsuite/gcc.dg/tree-ssa/recip-6.c
--- 46878,46898 ----
  bc54a55ac78e555806e7b448f49728b0  gcc/testsuite/gcc.dg/tree-ssa/reassoc-43.c
  40306bba57979317f1b6ac5abc1c61aa  gcc/testsuite/gcc.dg/tree-ssa/reassoc-44.c
  43cedee8ba1282cf6b6558cafbaf9c24  gcc/testsuite/gcc.dg/tree-ssa/reassoc-45.c
+ 31c8f83c1a544753f4baf31acc63a283  gcc/testsuite/gcc.dg/tree-ssa/reassoc-46.c
+ 5072abc088fac51ef4fb9d38cfab1016  gcc/testsuite/gcc.dg/tree-ssa/reassoc-46.h
+ b067bcec98d4aaa828d0ef7abaf12cc9  gcc/testsuite/gcc.dg/tree-ssa/reassoc-47.c
+ ec30166019f16808535b6a01076d2659  gcc/testsuite/gcc.dg/tree-ssa/reassoc-48.c
+ c978501cc36987a39be2fe7b6f3fef22  gcc/testsuite/gcc.dg/tree-ssa/reassoc-49.c
  c75bffd403ebb6298962402a14677298  gcc/testsuite/gcc.dg/tree-ssa/reassoc-5.c
+ a755ebec01dcafbcef5b6208ad50f78e  gcc/testsuite/gcc.dg/tree-ssa/reassoc-50.c
+ 6b1e1493c5f807c1a6bfe42ae76e8128  gcc/testsuite/gcc.dg/tree-ssa/reassoc-51.c
  94cde16fc63702fd4d0c7b45714d1eff  gcc/testsuite/gcc.dg/tree-ssa/reassoc-6.c
  af7283dee474093606fed455637b88f3  gcc/testsuite/gcc.dg/tree-ssa/reassoc-7.c
  399c20042466eb88f5c4c8b4ed15d6cb  gcc/testsuite/gcc.dg/tree-ssa/reassoc-8.c
  898bf73ccd91832671c8da00617439c7  gcc/testsuite/gcc.dg/tree-ssa/reassoc-9.c
  09a0ef1d8ae3fff11dd67dca71fd8ba0  gcc/testsuite/gcc.dg/tree-ssa/recip-1.c
  f4bcbafb829540ea32f44a5eb5d1b215  gcc/testsuite/gcc.dg/tree-ssa/recip-2.c
! ec8c07714d481b3272e96db3abfe1b42  gcc/testsuite/gcc.dg/tree-ssa/recip-3.c
  5b2e65e338a30863d4a32a9c0fa2ae41  gcc/testsuite/gcc.dg/tree-ssa/recip-4.c
  78cd4cb521cece5f9778a6c47bac5ffe  gcc/testsuite/gcc.dg/tree-ssa/recip-5.c
  6487b68e6cadf4f3a540ff4e3ee978c8  gcc/testsuite/gcc.dg/tree-ssa/recip-6.c
*************** a033da229d97e775dc989a1095ff34b8  gcc/te
*** 45029,45035 ****
  7f70f1f8957026ce7c76f2d7f8173762  gcc/testsuite/gcc.dg/tree-ssa/split-path-12.c
  90e953eef4724c1c9123f8b3133d04ea  gcc/testsuite/gcc.dg/tree-ssa/split-path-2.c
  18bf42127373d760055aeed15ce02990  gcc/testsuite/gcc.dg/tree-ssa/split-path-3.c
! 6604a0ee7102df60c56bdf9a5abb2a9d  gcc/testsuite/gcc.dg/tree-ssa/split-path-4.c
  82281eb4072e89865db7b58f503ee3d3  gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c
  5a45c0480607e4a3dcb00e6e103b66bc  gcc/testsuite/gcc.dg/tree-ssa/split-path-6.c
  5fbb9ae8c2667915da5de25c4368db74  gcc/testsuite/gcc.dg/tree-ssa/split-path-7.c
--- 46974,46980 ----
  7f70f1f8957026ce7c76f2d7f8173762  gcc/testsuite/gcc.dg/tree-ssa/split-path-12.c
  90e953eef4724c1c9123f8b3133d04ea  gcc/testsuite/gcc.dg/tree-ssa/split-path-2.c
  18bf42127373d760055aeed15ce02990  gcc/testsuite/gcc.dg/tree-ssa/split-path-3.c
! bb6b540e48f8be7df8c55c27a5182535  gcc/testsuite/gcc.dg/tree-ssa/split-path-4.c
  82281eb4072e89865db7b58f503ee3d3  gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c
  5a45c0480607e4a3dcb00e6e103b66bc  gcc/testsuite/gcc.dg/tree-ssa/split-path-6.c
  5fbb9ae8c2667915da5de25c4368db74  gcc/testsuite/gcc.dg/tree-ssa/split-path-7.c
*************** c214783a99e99da953ee6e7458513477  gcc/te
*** 45085,45090 ****
--- 47030,47037 ----
  d518651c3d7549162b3704956a798ca6  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-37.c
  d205ff4a7ea20fa74fa2ce48df212443  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-38.c
  22eb5bf1dae656cba392dcf7143de995  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-39.c
+ a89cc51f8eed91ff9f67a03136fadfc2  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-40.c
+ 9f43a2b46c3c7518c4325720e6dfe2a1  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-41.c
  f7cce43d31e9f12959af7cf644592290  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-7.c
  51be37cfd24e328fafdfd467109bfff4  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-9.c
  a4485085185fcdf9689ad1ba99aa8d60  gcc/testsuite/gcc.dg/tree-ssa/ssa-copyprop-1.c
*************** b0d6e32883a96f27b3101f46f96e7cc9  gcc/te
*** 45110,45137 ****
  c5656fdca6aa193bc08fd9469a34c84b  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-8.c
  8baf2a886e775dd5affd20e88b8cf3c9  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-dse-1.c
  44513b6f07ef60d870f1b8f7b24b654b  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-simplify-1.c
! 46bb6893e5241058267284efbb252027  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-1.c
  64e7c8e4ccc4b1ec9f49e584741aeb7e  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-10.c
! a3f825ccbd7a0c9c6dd80f0818cceff0  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-11.c
! 8223761b9af7d41bd02b081c80419c01  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-12.c
  e8b76a04bfe9ee86c58f5bc8c293fbba  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-13.c
! c210be9ce1a7d724e85acbec6d83ccd0  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-14.c
  922d1f9f1f6ab599216e118d568912cf  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-15.c
! 1f76aae67ee9675da29c70c9bdf936f3  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-16.c
  6a062095cfc49b033ae64a9b8f6bb271  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-17.c
! 60d3d36992dd43d988ebeff219c3442a  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-18.c
! f078b76f116813afe8f33b153c897086  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2a.c
! bc1ab9f7c64963b902256b8a4333636f  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2b.c
  610faba67aec3e1a40afea8c0d5a3485  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2c.c
  8ce41dc10d1cd8d9827ec9e825fad43e  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2d.c
  0afbccae1235dccde9be30eb702f33c7  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2e.c
  0ff9b68a9683b76d59ce929f46916dd7  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2f.c
  05aea1a4d7030c5cf55b50b84dc9f78f  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2g.c
  15738f38675ee569391bc24effefc64b  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2h.c
- bf87381898a8e2c3a126acca621f2a14  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-4.c
  881f6db6cb1a3e63bf8dd2e0f203cc95  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-5.c
! 8983e3c4324c05a0a818ad89ee5df8d7  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-6.c
! 03ade5b8a566520aedeb6d04284715ad  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c
  de890ed0b8a4a8f0e19572bf759856a3  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-8.c
  1e01eee87c695d67cde163a4530069b0  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-9.c
  9131f70d5244737552818651f478cdc5  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-1.c
--- 47057,47080 ----
  c5656fdca6aa193bc08fd9469a34c84b  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-8.c
  8baf2a886e775dd5affd20e88b8cf3c9  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-dse-1.c
  44513b6f07ef60d870f1b8f7b24b654b  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-simplify-1.c
! 984549568f3a12694d9542f445b224cd  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-1.c
  64e7c8e4ccc4b1ec9f49e584741aeb7e  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-10.c
! faf8cc903da4c81e5fd131b67777d586  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-11.c
! cd25a9c6e41e0218fcc1bff90155e715  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-12.c
  e8b76a04bfe9ee86c58f5bc8c293fbba  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-13.c
! cb116123611aabec34a5f7821fa63a02  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-14.c
  922d1f9f1f6ab599216e118d568912cf  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-15.c
! 8e3146c2955212f79fee09247532b9a8  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-16.c
  6a062095cfc49b033ae64a9b8f6bb271  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-17.c
! 0b5603138ce50a545e780a5b9a561765  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2b.c
  610faba67aec3e1a40afea8c0d5a3485  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2c.c
  8ce41dc10d1cd8d9827ec9e825fad43e  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2d.c
  0afbccae1235dccde9be30eb702f33c7  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2e.c
  0ff9b68a9683b76d59ce929f46916dd7  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2f.c
  05aea1a4d7030c5cf55b50b84dc9f78f  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2g.c
  15738f38675ee569391bc24effefc64b  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-2h.c
  881f6db6cb1a3e63bf8dd2e0f203cc95  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-5.c
! a708cb5989cc841e128ccc6302e201de  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c
  de890ed0b8a4a8f0e19572bf759856a3  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-8.c
  1e01eee87c695d67cde163a4530069b0  gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-9.c
  9131f70d5244737552818651f478cdc5  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-1.c
*************** b8fee56a4606a716ce8313c427a77a24  gcc/te
*** 45143,45158 ****
  068ea816391b5766ca19741321eccbf5  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-15.c
  776bd0758a148e533fed78f34e65bdef  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-16.c
  d889f1cc3cc0339a3097fb5ea6337d8a  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-17.c
! 5ad06f83221dabed646fb738453375f7  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-18.c
! 0f7fe66cb1f0c548f131da089d3c7d08  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-19.c
  6d73d1717e00524691b57361af07cc12  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-2.c
  f3c1018cd7257cd934c6df52bc0e7440  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-20.c
  33ae9727bb74ef8f4880c77b0c67c256  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-21.c
  f7e20155bdbd371f097bd98615d07829  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-24.c
  9b065a37e7fbc662c999af80c73b937c  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-25.c
! 41d9ac50535b7c035060d72b54f1e8c9  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-26.c
! 86813d9ab3d939085f56baf655b5e6c2  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-28.c
! da20176e0015ee1cea4785b0f13e8bee  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-29.c
  58f01e588bb6eda6cadea1242d43f6a2  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-3.c
  1e78e0c30fd41f2a1ccb36477cffc2b6  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-30.c
  31d04112caa131a268b2fb5cea16f72c  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-31.c
--- 47086,47101 ----
  068ea816391b5766ca19741321eccbf5  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-15.c
  776bd0758a148e533fed78f34e65bdef  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-16.c
  d889f1cc3cc0339a3097fb5ea6337d8a  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-17.c
! db6bfd13a988ffed3a946eef20540147  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-18.c
! effa2b4f13ad5537618bfe52bbce3ac7  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-19.c
  6d73d1717e00524691b57361af07cc12  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-2.c
  f3c1018cd7257cd934c6df52bc0e7440  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-20.c
  33ae9727bb74ef8f4880c77b0c67c256  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-21.c
  f7e20155bdbd371f097bd98615d07829  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-24.c
  9b065a37e7fbc662c999af80c73b937c  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-25.c
! ccb017814c7da66053731e3b0d543053  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-26.c
! afe8feb8b27c744a88b97d9ea3a344a1  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-28.c
! 3f557126af3b8bbf78f827a857103325  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-29.c
  58f01e588bb6eda6cadea1242d43f6a2  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-3.c
  1e78e0c30fd41f2a1ccb36477cffc2b6  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-30.c
  31d04112caa131a268b2fb5cea16f72c  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-31.c
*************** e3865a2b416262373c06843a4d42f112  gcc/te
*** 45166,45171 ****
--- 47109,47117 ----
  853f7bd70d609cfc3f9157308dd0f334  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-39.c
  ec8e29fa1c7b5009e277591545096959  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-4.c
  e1f6e529145ed0b2f0232c14f76bd2d4  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-40.c
+ dbb4751df5b581df2bf59314c3a16ebf  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-41.c
+ 65c320550e259474b51344faf99d7649  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-42.c
+ 05a1f242e7d278dcb147a1bb54cc9efd  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-43.c
  8464edd661b6724b6cc8a6c0591e9ada  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-5.c
  d67df09df0e5c754eb61edc5766cd64b  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-6.c
  e61169ee1fb9fc84f1d8b0d413a8a21b  gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-7.c
*************** d8e76aa1a22aab10e268cd387ef24fae  gcc/te
*** 45191,45197 ****
  24c4df9086aa14575861479a9d443298  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-25.c
  ae4edcabb9f0a3c23740e5f9828ec494  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-26.c
  cce8a83046345e131845178240c0e959  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-27.c
! 8be7a8cc8bd0c3b0c75b8824395cb795  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-3.c
  96adbef81122499033534b9cf98fc698  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-30.c
  be3cd07dd10711ebedecae14fb11eb44  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-31.c
  188886a969fc804c96236ec8ceae85d7  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-32.c
--- 47137,47143 ----
  24c4df9086aa14575861479a9d443298  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-25.c
  ae4edcabb9f0a3c23740e5f9828ec494  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-26.c
  cce8a83046345e131845178240c0e959  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-27.c
! 2ce44e33346073a4b09ca9c28e2f9d67  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-3.c
  96adbef81122499033534b9cf98fc698  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-30.c
  be3cd07dd10711ebedecae14fb11eb44  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-31.c
  188886a969fc804c96236ec8ceae85d7  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-32.c
*************** dbd85b6b872ef34dddb29cd0c2e75845  gcc/te
*** 45211,45217 ****
  3bc9bb1f8c87b1d7662a18aa13b483ef  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-45.c
  77b656f3ebf3f411436f2788bd97d381  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-46.c
  d6123baa866d3ba6023dd2209e1a791e  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-47.c
! d6af4b5dd27d570700c1148c330eb141  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-48.c
  d99e0642724c7259ed5e12bbd70cf3fc  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-49.c
  5f5c2458ca4b2837b3119e3cbd6b4fb8  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-5.c
  99f73056e2b0a66ecf780fcbb650b45d  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-50.c
--- 47157,47163 ----
  3bc9bb1f8c87b1d7662a18aa13b483ef  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-45.c
  77b656f3ebf3f411436f2788bd97d381  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-46.c
  d6123baa866d3ba6023dd2209e1a791e  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-47.c
! 3e52b3f9a6f1a65463b392b4be2c8e5e  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-48.c
  d99e0642724c7259ed5e12bbd70cf3fc  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-49.c
  5f5c2458ca4b2837b3119e3cbd6b4fb8  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-5.c
  99f73056e2b0a66ecf780fcbb650b45d  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-50.c
*************** c75fd65ee6a8f250fc885fc554c2b9d6  gcc/te
*** 45254,45260 ****
--- 47200,47213 ----
  bab030e723ebb78dbecdf8eb91fd51f8  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-87.c
  3f720612f74a60fa98d1b5a82ed0ad5f  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-88.c
  6c8e375b119ce1b63e19eed89459c12f  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-9.c
+ 1ba36a49058b3bf6aacf9f328fc0217e  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-91.c
+ 8a1d46c89f4f9de265aa4932accc22e0  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-92.c
  7d8325c97088076c87f983ac248e7700  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-93.c
+ 072e1020d2c1bb7ed3c9bae7e091a3bd  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-94.c
+ 8850f0672c729d0dac2b20635d75d34f  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-95.c
+ 21c1db010295ebf23af359cdfb637e17  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-96.c
+ 185978ab1560ac88d364c0be2fc59857  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-97.c
+ 24d28507f3390e02b4857810af2b1792  gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-98.c
  2957dc80c49929e08096f70c96f5df81  gcc/testsuite/gcc.dg/tree-ssa/ssa-hoist-1.c
  2d6dabe93b06b03f622762226dbb6c34  gcc/testsuite/gcc.dg/tree-ssa/ssa-hoist-2.c
  70be68799a646b8992aed1aafb5151ab  gcc/testsuite/gcc.dg/tree-ssa/ssa-hoist-3.c
*************** c456ebf49f3666d48ef00a6ef3c341c7  gcc/te
*** 45286,45292 ****
--- 47239,47254 ----
  9aae14b32a26cb59ea2b62b4c541abd6  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-12.c
  6e2983c6ef63d3ea5a3fe01596a9b0c0  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-13.c
  7d0707c4a3f43204bc5bb9f08a490d52  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-14.c
+ bf1786a48b894314bf5d86f6d8bd0560  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-15.c
+ 6603cac73fcf5c00b8d7afd5ac0ab857  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-16.c
+ b4e4c407419f9356fb5ba85b87fb95fb  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-17.c
+ 93898cda6270fe9c941f1e23d85ae3ba  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-18.c
+ acc518693a637a0c3bd381d2765ae53e  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-19.c
  e8ad1077cbbf867b677d6dbe00524406  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-2.c
+ 5bb9959f9214d2ff65130e028127a68d  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-20.c
+ 9b925fe8cb28803df00219a6c81a1638  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-21.c
+ 3fada5964c97d348ed7e7e1eb62f0512  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-22.c
+ 6a109e21502e5353e985b8e9180f3c79  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-23.c
  c0ab69fe1a4b916817bbafe5e5048c34  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-3.c
  d00d2a078458d4fc876af7d2a29c241a  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-5.c
  769aa5eb478537be389d55c410c46887  gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-6.c
*************** a06281be684fbc9936ebf659c6e5fa95  gcc/te
*** 45319,45324 ****
--- 47281,47287 ----
  aa1777c45c7d6736cca46a69392522b9  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-30.c
  7e73c668c31b6f73c95b69cbdc80eac5  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-31.c
  d7800e6a28e5b70e0293c932b14894f8  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-32.c
+ 17d5e649f4ebd09ca062e6a51b4bb263  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-33.c
  39d8ac143c15d11301c705a380a6769b  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-4.c
  bd3ae093f96e1ef4c6e63e83f1c59945  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-5.c
  38403894c988bb66d103ea06dcfd401d  gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-6.c
*************** ca855609bb608ce2b8cc0450d0bae3d5  gcc/te
*** 45329,45361 ****
  23af90b604c6b27c04e1b8df85c468e8  gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-2.c
  c1c886b77a9aae16c0297c9b61312de4  gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-3.c
  3629557537a9a826caeefb9ae34e9c32  gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-4.c
! 242885279b268573e0988b44418c981a  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-1.c
! eb6720628ef9a3d0e465f645012cfb11  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-10.c
  b40ae88699747b0b89167ecdd1146400  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-11.c
  be3ea69b52e071fd375d56784f1b9d68  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-12.c
! 039aea7d92e79e515a303dfcb36e3fd6  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-13.c
! 1743d9521b951f28a189d06f423d82b8  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-14.c
  f237fb84d8c929de79482cd9290e2e8a  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-15.c
! 9e4571c11c00c3659ac6fa7b355ad2a1  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-16.c
! 3c6a12559e34ac818f0f924443d7e92d  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-17.c
! 4bbb26d9f9200b0547c48796adb2e91a  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-2.c
! 9e954e0c4211f2af3854b3c3f34d48df  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-3.c
! 1b3e5b9953e3b8856581281f20abc008  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-4.c
! d015940779f97792ead1cb1db248fe70  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-5.c
! e6c0bf350a3e9256f9ef31af65a77e7f  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-6.c
! dfdca5deb48ba686aba992a2c98b3bda  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-7.c
! 5c3036dd77db508f6fb7367242c58776  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-8.c
! b57ccc1526e445e5203c93469ac934d4  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-9.c
  22a09ccc40efc92a2c94b0f90b7cfb10  gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-1.c
  f32d0ce05b3a89e686f494466ba0bfe0  gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-2.c
  7c3e106e78bd4c671668a508fa7162f9  gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-3.c
  f8d79acf16a7b0f25c65f787eb80a4f0  gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-4.c
! 4144afa8f838233d4d8d7efeb30b225b  gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-11.c
! e235e0bba5b17a88a64c70ddc08db284  gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-12.c
! 59b1bfef623b1632b1678783978cf69d  gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-13.c
! 92cc62e293f53cec58e45750d3ba5fdd  gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-14.c
  d27e19cbc74977f6d1e4eb7b508acbd2  gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-15.c
! 3034b4000b60b5b753b2459adcdb4f6b  gcc/testsuite/gcc.dg/tree-ssa/ssa-vrp-thread-1.c
  cf076a408f888239f000a5c607cf215c  gcc/testsuite/gcc.dg/tree-ssa/stdarg-1.c
  1ce84b38a201a33f440248457c9b9bc7  gcc/testsuite/gcc.dg/tree-ssa/stdarg-2.c
  ef54f7c0b0aaacab1bba5efadd045b5d  gcc/testsuite/gcc.dg/tree-ssa/stdarg-3.c
--- 47292,47326 ----
  23af90b604c6b27c04e1b8df85c468e8  gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-2.c
  c1c886b77a9aae16c0297c9b61312de4  gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-3.c
  3629557537a9a826caeefb9ae34e9c32  gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-4.c
! fc97ee263c2c758e4874bdefc160a943  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-1.c
! bcc65fc71d46911a477e877dcb2c1805  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-10.c
  b40ae88699747b0b89167ecdd1146400  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-11.c
  be3ea69b52e071fd375d56784f1b9d68  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-12.c
! efe5489ad9d254a993f08552a0b11702  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-13.c
! c0e501146babecae5e2250a96dc56a99  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-14.c
  f237fb84d8c929de79482cd9290e2e8a  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-15.c
! 05f9dbfe971934dca1a91733dd7cc3ef  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-16.c
! 161829b6c7430353195336356feb1e31  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-17.c
! 31262b98534bc1e5cd3dd2fc1538c3de  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-18.c
! 75f1fbb86f90eb2820845f3b864c8649  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-2.c
! 9825bb51561846515088fa3daf93eb2c  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-3.c
! 3c498a479ee03a4591c4e96f4a6bf880  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-4.c
! 5cbdfbf1e670807b4bbad98ff1c27449  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-5.c
! f74158d3d8fc71a9ab0c1f93d09fd3c4  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-6.c
! b6620393a89b735f25324d8d5ea72493  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-7.c
! 37dd2b09d66854f835c9ed1ccfb108e4  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-8.c
! ed235c0fb92241441a07975f217206a6  gcc/testsuite/gcc.dg/tree-ssa/ssa-sink-9.c
  22a09ccc40efc92a2c94b0f90b7cfb10  gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-1.c
  f32d0ce05b3a89e686f494466ba0bfe0  gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-2.c
  7c3e106e78bd4c671668a508fa7162f9  gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-3.c
  f8d79acf16a7b0f25c65f787eb80a4f0  gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-4.c
! 639917ac728fb50216b5d641326a2d4e  gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-13.c
! 2d2a4c5d9176f15e6d84e8b7ebd76656  gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-14.c
  d27e19cbc74977f6d1e4eb7b508acbd2  gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-15.c
! f9ec9861cfad29ae5e65f5801dec8b35  gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-backedge.c
! 345c2de66411a0afb210e968afaa62c0  gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-invalid.c
! 31af1b6bef4a6bfebd6ec195519366b8  gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-valid.c
! de60bf2043187cb745e726c1b86f923e  gcc/testsuite/gcc.dg/tree-ssa/ssa-vrp-thread-1.c
  cf076a408f888239f000a5c607cf215c  gcc/testsuite/gcc.dg/tree-ssa/stdarg-1.c
  1ce84b38a201a33f440248457c9b9bc7  gcc/testsuite/gcc.dg/tree-ssa/stdarg-2.c
  ef54f7c0b0aaacab1bba5efadd045b5d  gcc/testsuite/gcc.dg/tree-ssa/stdarg-3.c
*************** bb7e1bd5cca1d575ddd8aece7fd041b1  gcc/te
*** 45378,45383 ****
--- 47343,47352 ----
  9acb472d8d05e4e907f8cc86d1fe9c17  gcc/testsuite/gcc.dg/tree-ssa/switch-3.c
  71a2830a8fb169fa4d1fb166da7cf5db  gcc/testsuite/gcc.dg/tree-ssa/switch-4.c
  f473c024639a7ff168ec7c53dc1da31a  gcc/testsuite/gcc.dg/tree-ssa/tailcall-1.c
+ 78386a5036873043fef5cd0124f39173  gcc/testsuite/gcc.dg/tree-ssa/tailcall-10.c
+ 1d91ee165b31f273c4f21be7f05b1911  gcc/testsuite/gcc.dg/tree-ssa/tailcall-11.c
+ 8a544e5690fb27086b81965883fa318e  gcc/testsuite/gcc.dg/tree-ssa/tailcall-12.c
+ ea3136823e2eb9df1704b248b314ee97  gcc/testsuite/gcc.dg/tree-ssa/tailcall-13.c
  167e398c4c929130a179ddf178b8e255  gcc/testsuite/gcc.dg/tree-ssa/tailcall-2.c
  f509f9b6a4b914aa615c3e434856ead1  gcc/testsuite/gcc.dg/tree-ssa/tailcall-3.c
  246dd31c465e8c85e8e733aab5ac0877  gcc/testsuite/gcc.dg/tree-ssa/tailcall-4.c
*************** ac68e635052c49f6b773cb66ed20a1e8  gcc/te
*** 45395,45401 ****
  58a143ccb257ae48a15b6d6f25b43ef8  gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c
  e84424985e065b3a1999b1ea596c8e5c  gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-6.c
  6400d5651fcf9e68caeb41223c2fced7  gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-7.c
! f6c7193c0c79b2e9d8991b5a9c40803b  gcc/testsuite/gcc.dg/tree-ssa/tree-ssa.exp
  b529a183f5c763b842cd8fad5900b40f  gcc/testsuite/gcc.dg/tree-ssa/unord.c
  1c4bf657e9d9fe122d42a9f94704b7e2  gcc/testsuite/gcc.dg/tree-ssa/unreachable.c
  1e3d2be7b65bc67d143ce4e436bfcdb1  gcc/testsuite/gcc.dg/tree-ssa/upcast-1.c
--- 47364,47371 ----
  58a143ccb257ae48a15b6d6f25b43ef8  gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-5.c
  e84424985e065b3a1999b1ea596c8e5c  gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-6.c
  6400d5651fcf9e68caeb41223c2fced7  gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-7.c
! fe06bda8f8339334f5d8b9e5b475bfc5  gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-8.c
! 68a8640e8d20170a68bb7fc5cc51b59b  gcc/testsuite/gcc.dg/tree-ssa/tree-ssa.exp
  b529a183f5c763b842cd8fad5900b40f  gcc/testsuite/gcc.dg/tree-ssa/unord.c
  1c4bf657e9d9fe122d42a9f94704b7e2  gcc/testsuite/gcc.dg/tree-ssa/unreachable.c
  1e3d2be7b65bc67d143ce4e436bfcdb1  gcc/testsuite/gcc.dg/tree-ssa/upcast-1.c
*************** a12895e160ece0f553a23b23be8acc70  gcc/te
*** 45415,45435 ****
  ae4c45e8e11a3fe4fc4c58ed7fba53fa  gcc/testsuite/gcc.dg/tree-ssa/vector-7.c
  42f4f044421eebfa376074d65304f8c1  gcc/testsuite/gcc.dg/tree-ssa/vrp.h
  98949ddf030166af1c48e9d8178080a7  gcc/testsuite/gcc.dg/tree-ssa/vrp01.c
! 6c0a90a62582352125934f590b946019  gcc/testsuite/gcc.dg/tree-ssa/vrp02.c
! 422aa78a26d6965e2dc5ce7d5b306df5  gcc/testsuite/gcc.dg/tree-ssa/vrp03.c
  55cd62e5dbba2b7f42ec1d98b2da126c  gcc/testsuite/gcc.dg/tree-ssa/vrp04.c
! 92cd52a8dc1cbd00ed24cdfed712c7dd  gcc/testsuite/gcc.dg/tree-ssa/vrp05.c
! 3c7346390c58eec7e23cc0aaf747ca4d  gcc/testsuite/gcc.dg/tree-ssa/vrp06.c
! ed0f46987790d34b29cc6365a0a72461  gcc/testsuite/gcc.dg/tree-ssa/vrp07.c
! e80d3469a219d372d47b4b4a1382ca90  gcc/testsuite/gcc.dg/tree-ssa/vrp08.c
! 7a33ee6225f67e7509159d4dc9ffeebb  gcc/testsuite/gcc.dg/tree-ssa/vrp09.c
  8c9b46ae3e96ee0bd4ea529a368c310d  gcc/testsuite/gcc.dg/tree-ssa/vrp10.c
  35a86d5c3d5d6dfdbf910fd80c544328  gcc/testsuite/gcc.dg/tree-ssa/vrp100.c
  769a550cb3d0826e1a3d8c29801c97e8  gcc/testsuite/gcc.dg/tree-ssa/vrp101.c
  864442ccd0b5ca78ebeec5f53bc8b8cd  gcc/testsuite/gcc.dg/tree-ssa/vrp102.c
  196065feb5b1e79954db1d95b2f30486  gcc/testsuite/gcc.dg/tree-ssa/vrp103.c
  49b9f67e92ecbcb36a8369e917436114  gcc/testsuite/gcc.dg/tree-ssa/vrp104.c
! b609b0dd9f97581b4daa1b8798fb6f46  gcc/testsuite/gcc.dg/tree-ssa/vrp106.c
  dc9d0a3bcdb954cc7481eed9cc4d0598  gcc/testsuite/gcc.dg/tree-ssa/vrp107.c
  baa34115197bb73ae1fe2e3cd0ee48f1  gcc/testsuite/gcc.dg/tree-ssa/vrp108.c
  c67cf0466fac268885ab9cb1e32a9c9c  gcc/testsuite/gcc.dg/tree-ssa/vrp109.c
--- 47385,47405 ----
  ae4c45e8e11a3fe4fc4c58ed7fba53fa  gcc/testsuite/gcc.dg/tree-ssa/vector-7.c
  42f4f044421eebfa376074d65304f8c1  gcc/testsuite/gcc.dg/tree-ssa/vrp.h
  98949ddf030166af1c48e9d8178080a7  gcc/testsuite/gcc.dg/tree-ssa/vrp01.c
! 5d06bb2c1a50be57fc580e1055ed9f6a  gcc/testsuite/gcc.dg/tree-ssa/vrp02.c
! 996219a5d7fe3925b7d8246148bfa5a8  gcc/testsuite/gcc.dg/tree-ssa/vrp03.c
  55cd62e5dbba2b7f42ec1d98b2da126c  gcc/testsuite/gcc.dg/tree-ssa/vrp04.c
! a6a58345d8323b1844a96f9b45df6e20  gcc/testsuite/gcc.dg/tree-ssa/vrp05.c
! 44d1493f2b4dc8d8d86ec0599040b34f  gcc/testsuite/gcc.dg/tree-ssa/vrp06.c
! eff08b3fde2380a2ac814a1e396be412  gcc/testsuite/gcc.dg/tree-ssa/vrp07.c
! be5af6115952e8a4bdcb3c935f76e3bf  gcc/testsuite/gcc.dg/tree-ssa/vrp08.c
! 0b0c8c15f7ac16476b694c8a8f91ce37  gcc/testsuite/gcc.dg/tree-ssa/vrp09.c
  8c9b46ae3e96ee0bd4ea529a368c310d  gcc/testsuite/gcc.dg/tree-ssa/vrp10.c
  35a86d5c3d5d6dfdbf910fd80c544328  gcc/testsuite/gcc.dg/tree-ssa/vrp100.c
  769a550cb3d0826e1a3d8c29801c97e8  gcc/testsuite/gcc.dg/tree-ssa/vrp101.c
  864442ccd0b5ca78ebeec5f53bc8b8cd  gcc/testsuite/gcc.dg/tree-ssa/vrp102.c
  196065feb5b1e79954db1d95b2f30486  gcc/testsuite/gcc.dg/tree-ssa/vrp103.c
  49b9f67e92ecbcb36a8369e917436114  gcc/testsuite/gcc.dg/tree-ssa/vrp104.c
! 5b17b17d018bc2c18884cb5550cb7dc7  gcc/testsuite/gcc.dg/tree-ssa/vrp106.c
  dc9d0a3bcdb954cc7481eed9cc4d0598  gcc/testsuite/gcc.dg/tree-ssa/vrp107.c
  baa34115197bb73ae1fe2e3cd0ee48f1  gcc/testsuite/gcc.dg/tree-ssa/vrp108.c
  c67cf0466fac268885ab9cb1e32a9c9c  gcc/testsuite/gcc.dg/tree-ssa/vrp109.c
*************** c67cf0466fac268885ab9cb1e32a9c9c  gcc/te
*** 45437,45446 ****
  32b55fee9ad1ebad5d4674969e5762f4  gcc/testsuite/gcc.dg/tree-ssa/vrp110.c
  1d6face2d22b3987067cf678e2c1f8c0  gcc/testsuite/gcc.dg/tree-ssa/vrp111.c
  9cb326fc9cc53ef1d75fc5716fb3d044  gcc/testsuite/gcc.dg/tree-ssa/vrp112.c
! 67c220308163c5d52f332c377d7c7d5a  gcc/testsuite/gcc.dg/tree-ssa/vrp113.c
  031731b8c2f1236761448079769d9a6c  gcc/testsuite/gcc.dg/tree-ssa/vrp114.c
  de65979960b8a729f3467423d341cd4b  gcc/testsuite/gcc.dg/tree-ssa/vrp115.c
! 5ea0709883036b7d4fd90c7acb279a20  gcc/testsuite/gcc.dg/tree-ssa/vrp116.c
  509af9981c6d45aceb7b4b13cc9f53d3  gcc/testsuite/gcc.dg/tree-ssa/vrp117.c
  a2d068c8b5d5ecb7aeb9d6f60f75690b  gcc/testsuite/gcc.dg/tree-ssa/vrp118.c
  5f71fab228e137fc38027e7906bc45cd  gcc/testsuite/gcc.dg/tree-ssa/vrp119.c
--- 47407,47416 ----
  32b55fee9ad1ebad5d4674969e5762f4  gcc/testsuite/gcc.dg/tree-ssa/vrp110.c
  1d6face2d22b3987067cf678e2c1f8c0  gcc/testsuite/gcc.dg/tree-ssa/vrp111.c
  9cb326fc9cc53ef1d75fc5716fb3d044  gcc/testsuite/gcc.dg/tree-ssa/vrp112.c
! 35a3683843ab0ba3522463fa0c65a73b  gcc/testsuite/gcc.dg/tree-ssa/vrp113.c
  031731b8c2f1236761448079769d9a6c  gcc/testsuite/gcc.dg/tree-ssa/vrp114.c
  de65979960b8a729f3467423d341cd4b  gcc/testsuite/gcc.dg/tree-ssa/vrp115.c
! d9d0cd7b64981796a683751071a63a7a  gcc/testsuite/gcc.dg/tree-ssa/vrp116.c
  509af9981c6d45aceb7b4b13cc9f53d3  gcc/testsuite/gcc.dg/tree-ssa/vrp117.c
  a2d068c8b5d5ecb7aeb9d6f60f75690b  gcc/testsuite/gcc.dg/tree-ssa/vrp118.c
  5f71fab228e137fc38027e7906bc45cd  gcc/testsuite/gcc.dg/tree-ssa/vrp119.c
*************** a62799429f8c8c8beabf64b3b102d402  gcc/te
*** 45453,45464 ****
  0189fc083f329be83bcf5788aec3bf27  gcc/testsuite/gcc.dg/tree-ssa/vrp16.c
  7d6d142c021439acae06871960bd32df  gcc/testsuite/gcc.dg/tree-ssa/vrp17.c
  eb4df925254cbe0cd14db1479d44b0aa  gcc/testsuite/gcc.dg/tree-ssa/vrp18.c
! 1833fbb8910215ff43a8f2ea37508099  gcc/testsuite/gcc.dg/tree-ssa/vrp19.c
! cef26177933bc95eaed79f5ee504ba2b  gcc/testsuite/gcc.dg/tree-ssa/vrp20.c
  f2e4fe4214ef074f2445f096ddd49c9c  gcc/testsuite/gcc.dg/tree-ssa/vrp21.c
  9f53fc578b207368ed4f3e8c297f9b27  gcc/testsuite/gcc.dg/tree-ssa/vrp22.c
  3c3eade9f8e979c77418a9c0acb3a446  gcc/testsuite/gcc.dg/tree-ssa/vrp23.c
! 6bb8a7c382d059ca9c9165c277b748d5  gcc/testsuite/gcc.dg/tree-ssa/vrp24.c
  91f86680779766aaa869c1d9c0787dfb  gcc/testsuite/gcc.dg/tree-ssa/vrp25.c
  6cbc4705e68ce3d1d9350c8491f8e399  gcc/testsuite/gcc.dg/tree-ssa/vrp26.c
  f853acbf0702a19593f9da2e8c7a0f9e  gcc/testsuite/gcc.dg/tree-ssa/vrp27.c
--- 47423,47434 ----
  0189fc083f329be83bcf5788aec3bf27  gcc/testsuite/gcc.dg/tree-ssa/vrp16.c
  7d6d142c021439acae06871960bd32df  gcc/testsuite/gcc.dg/tree-ssa/vrp17.c
  eb4df925254cbe0cd14db1479d44b0aa  gcc/testsuite/gcc.dg/tree-ssa/vrp18.c
! 9bdc7cd5159b877381453bfb8686618a  gcc/testsuite/gcc.dg/tree-ssa/vrp19.c
! ea9c9fae9c2a305a0331890426a783a3  gcc/testsuite/gcc.dg/tree-ssa/vrp20.c
  f2e4fe4214ef074f2445f096ddd49c9c  gcc/testsuite/gcc.dg/tree-ssa/vrp21.c
  9f53fc578b207368ed4f3e8c297f9b27  gcc/testsuite/gcc.dg/tree-ssa/vrp22.c
  3c3eade9f8e979c77418a9c0acb3a446  gcc/testsuite/gcc.dg/tree-ssa/vrp23.c
! d72dc7fb7dc5520e64eeeefdf69c40da  gcc/testsuite/gcc.dg/tree-ssa/vrp24.c
  91f86680779766aaa869c1d9c0787dfb  gcc/testsuite/gcc.dg/tree-ssa/vrp25.c
  6cbc4705e68ce3d1d9350c8491f8e399  gcc/testsuite/gcc.dg/tree-ssa/vrp26.c
  f853acbf0702a19593f9da2e8c7a0f9e  gcc/testsuite/gcc.dg/tree-ssa/vrp27.c
*************** f853acbf0702a19593f9da2e8c7a0f9e  gcc/te
*** 45467,45473 ****
  d0598ba2d5f45d6ef63021b0be3f6106  gcc/testsuite/gcc.dg/tree-ssa/vrp30.c
  8851d4bb733f022f8f1cc01199ea47fd  gcc/testsuite/gcc.dg/tree-ssa/vrp31.c
  9307f7054a7feb4804716224e260ee0a  gcc/testsuite/gcc.dg/tree-ssa/vrp32.c
! b0de009baf91b29e7e6cd4c4aa621a41  gcc/testsuite/gcc.dg/tree-ssa/vrp33.c
  99d603c2a4486a008a06e53fafb9344b  gcc/testsuite/gcc.dg/tree-ssa/vrp34.c
  cc9dc707c3eee82a1ab7bd80848580f2  gcc/testsuite/gcc.dg/tree-ssa/vrp35.c
  e9bcf1ad006c50e0fa341de3b0e3c7be  gcc/testsuite/gcc.dg/tree-ssa/vrp36.c
--- 47437,47443 ----
  d0598ba2d5f45d6ef63021b0be3f6106  gcc/testsuite/gcc.dg/tree-ssa/vrp30.c
  8851d4bb733f022f8f1cc01199ea47fd  gcc/testsuite/gcc.dg/tree-ssa/vrp31.c
  9307f7054a7feb4804716224e260ee0a  gcc/testsuite/gcc.dg/tree-ssa/vrp32.c
! 4a0ceeee1a5037ddf111511ec4514cf9  gcc/testsuite/gcc.dg/tree-ssa/vrp33.c
  99d603c2a4486a008a06e53fafb9344b  gcc/testsuite/gcc.dg/tree-ssa/vrp34.c
  cc9dc707c3eee82a1ab7bd80848580f2  gcc/testsuite/gcc.dg/tree-ssa/vrp35.c
  e9bcf1ad006c50e0fa341de3b0e3c7be  gcc/testsuite/gcc.dg/tree-ssa/vrp36.c
*************** e6de071c00096491257e03d5eaf88561  gcc/te
*** 45489,45495 ****
  25937235478aafaf28b939cd93c646dd  gcc/testsuite/gcc.dg/tree-ssa/vrp52.c
  1d8919074811f80458114373ebddc32b  gcc/testsuite/gcc.dg/tree-ssa/vrp53.c
  d06b4abf8f3c14c1eb7956459cd8ba0d  gcc/testsuite/gcc.dg/tree-ssa/vrp54.c
! 58d24443729f9c8687de021b404c1db0  gcc/testsuite/gcc.dg/tree-ssa/vrp55.c
  e03f5f6d9b7864a3eaf336ae8910bffe  gcc/testsuite/gcc.dg/tree-ssa/vrp56.c
  05dac2689aa5835d6ec2ec709c3b433a  gcc/testsuite/gcc.dg/tree-ssa/vrp57.c
  07c848bc764435bc823be268f4fff5e7  gcc/testsuite/gcc.dg/tree-ssa/vrp58.c
--- 47459,47465 ----
  25937235478aafaf28b939cd93c646dd  gcc/testsuite/gcc.dg/tree-ssa/vrp52.c
  1d8919074811f80458114373ebddc32b  gcc/testsuite/gcc.dg/tree-ssa/vrp53.c
  d06b4abf8f3c14c1eb7956459cd8ba0d  gcc/testsuite/gcc.dg/tree-ssa/vrp54.c
! df2c59cdc34803e3207d99cca78e5d13  gcc/testsuite/gcc.dg/tree-ssa/vrp55.c
  e03f5f6d9b7864a3eaf336ae8910bffe  gcc/testsuite/gcc.dg/tree-ssa/vrp56.c
  05dac2689aa5835d6ec2ec709c3b433a  gcc/testsuite/gcc.dg/tree-ssa/vrp57.c
  07c848bc764435bc823be268f4fff5e7  gcc/testsuite/gcc.dg/tree-ssa/vrp58.c
*************** dfcece68f703d848f79218a12ec5c691  gcc/te
*** 45527,45539 ****
  1ff6141a5ae674968dabc6969088a270  gcc/testsuite/gcc.dg/tree-ssa/vrp89.c
  7010e1dc7b978066588383791c6ca943  gcc/testsuite/gcc.dg/tree-ssa/vrp90.c
  64c978bbd5da8615eb6b82cec7f5a057  gcc/testsuite/gcc.dg/tree-ssa/vrp91.c
! a1ac0a9ff3980c312e430a602efb609b  gcc/testsuite/gcc.dg/tree-ssa/vrp92.c
  2fa6a91db81758713b40c34ffbe04fd2  gcc/testsuite/gcc.dg/tree-ssa/vrp93.c
  18aa41ef3274e595ff5c2c5cce56e4e4  gcc/testsuite/gcc.dg/tree-ssa/vrp94.c
  c2ca91e03e4a4c1f28750c8b1c047a60  gcc/testsuite/gcc.dg/tree-ssa/vrp95.c
  c65bb38d621cd1fe2b1533770dfec13c  gcc/testsuite/gcc.dg/tree-ssa/vrp96.c
  09c180f580447bfea8ff91ad81781be3  gcc/testsuite/gcc.dg/tree-ssa/vrp97.c
! dbcccd12dda553ecb5a906b8fe24ab00  gcc/testsuite/gcc.dg/tree-ssa/vrp98.c
  9bebb10790801ab5fff1fc3c72bfbc17  gcc/testsuite/gcc.dg/tree-ssa/vrp99.c
  6a9b24ebec6820a8ec39fb106a33a0db  gcc/testsuite/gcc.dg/tree-ssa/wholeprogram-1.c
  1674280740676ac853a0c40326c7a3bd  gcc/testsuite/gcc.dg/tree-ssa/wholeprogram-2.c
--- 47497,47510 ----
  1ff6141a5ae674968dabc6969088a270  gcc/testsuite/gcc.dg/tree-ssa/vrp89.c
  7010e1dc7b978066588383791c6ca943  gcc/testsuite/gcc.dg/tree-ssa/vrp90.c
  64c978bbd5da8615eb6b82cec7f5a057  gcc/testsuite/gcc.dg/tree-ssa/vrp91.c
! 9ec8abb97727b4a80d24320d49b29101  gcc/testsuite/gcc.dg/tree-ssa/vrp92.c
  2fa6a91db81758713b40c34ffbe04fd2  gcc/testsuite/gcc.dg/tree-ssa/vrp93.c
  18aa41ef3274e595ff5c2c5cce56e4e4  gcc/testsuite/gcc.dg/tree-ssa/vrp94.c
  c2ca91e03e4a4c1f28750c8b1c047a60  gcc/testsuite/gcc.dg/tree-ssa/vrp95.c
  c65bb38d621cd1fe2b1533770dfec13c  gcc/testsuite/gcc.dg/tree-ssa/vrp96.c
  09c180f580447bfea8ff91ad81781be3  gcc/testsuite/gcc.dg/tree-ssa/vrp97.c
! a2633c9b66a328f6153f6fe74603b46f  gcc/testsuite/gcc.dg/tree-ssa/vrp98-1.c
! f7edf6151c35b222fd66fe727f22a15a  gcc/testsuite/gcc.dg/tree-ssa/vrp98.c
  9bebb10790801ab5fff1fc3c72bfbc17  gcc/testsuite/gcc.dg/tree-ssa/vrp99.c
  6a9b24ebec6820a8ec39fb106a33a0db  gcc/testsuite/gcc.dg/tree-ssa/wholeprogram-1.c
  1674280740676ac853a0c40326c7a3bd  gcc/testsuite/gcc.dg/tree-ssa/wholeprogram-2.c
*************** bb62f82a973334db1c0ebf75b17bcdf8  gcc/te
*** 45547,45553 ****
  dcc8ff133faffd3fe561dfe431569a07  gcc/testsuite/gcc.dg/tsan/pr88030.c
  de40a1e950c75128048b75517e728603  gcc/testsuite/gcc.dg/tsan/pr90208-1.c
  65ac9eca3bcd49137d096a4f2573e2e2  gcc/testsuite/gcc.dg/tsan/pr90208-2.c
! f25f5ea1c635be16b29cc0a094237534  gcc/testsuite/gcc.dg/tsan/tsan.exp
  01ec42502b146041504a5ab811e7f3b1  gcc/testsuite/gcc.dg/two-types-1.c
  95ad9b7c791f67ee2f4be1bd942e6718  gcc/testsuite/gcc.dg/two-types-10.c
  ca1b8417ca9c37159dd4270d3263cc19  gcc/testsuite/gcc.dg/two-types-2.c
--- 47518,47524 ----
  dcc8ff133faffd3fe561dfe431569a07  gcc/testsuite/gcc.dg/tsan/pr88030.c
  de40a1e950c75128048b75517e728603  gcc/testsuite/gcc.dg/tsan/pr90208-1.c
  65ac9eca3bcd49137d096a4f2573e2e2  gcc/testsuite/gcc.dg/tsan/pr90208-2.c
! f46ed58b497c8dc9f5f2a207b547394e  gcc/testsuite/gcc.dg/tsan/tsan.exp
  01ec42502b146041504a5ab811e7f3b1  gcc/testsuite/gcc.dg/two-types-1.c
  95ad9b7c791f67ee2f4be1bd942e6718  gcc/testsuite/gcc.dg/two-types-10.c
  ca1b8417ca9c37159dd4270d3263cc19  gcc/testsuite/gcc.dg/two-types-2.c
*************** c3e1ec66a1ba63c23068279c0986a103  gcc/te
*** 45564,45570 ****
  7b938b0cb614b822c40b1d1cd3386863  gcc/testsuite/gcc.dg/typedef-redecl.h
  72fdab30436f0359eba0e25ccef2a975  gcc/testsuite/gcc.dg/typedef-redecl2.c
  7bf977fdddd58f9186f5cc099280b5eb  gcc/testsuite/gcc.dg/typedef-var-1.c
! dc0315662dbe746214f4f1687a58f5e5  gcc/testsuite/gcc.dg/typedef-var-2.c
  44e859486a96c5bde24ac67ae73472fe  gcc/testsuite/gcc.dg/typename-vla-1.c
  0347a7dc32b8dfb279bdfe3b50e84008  gcc/testsuite/gcc.dg/typeof-1.c
  2f68d2aabae53b45ecb33173c3613128  gcc/testsuite/gcc.dg/typeof-2.c
--- 47535,47541 ----
  7b938b0cb614b822c40b1d1cd3386863  gcc/testsuite/gcc.dg/typedef-redecl.h
  72fdab30436f0359eba0e25ccef2a975  gcc/testsuite/gcc.dg/typedef-redecl2.c
  7bf977fdddd58f9186f5cc099280b5eb  gcc/testsuite/gcc.dg/typedef-var-1.c
! 68f588a635357a5cb520c7708e945ba6  gcc/testsuite/gcc.dg/typedef-var-2.c
  44e859486a96c5bde24ac67ae73472fe  gcc/testsuite/gcc.dg/typename-vla-1.c
  0347a7dc32b8dfb279bdfe3b50e84008  gcc/testsuite/gcc.dg/typeof-1.c
  2f68d2aabae53b45ecb33173c3613128  gcc/testsuite/gcc.dg/typeof-2.c
*************** e2c0ae3b7ed6cf4f7eed5c4ed76ee410  gcc/te
*** 45582,45591 ****
--- 47553,47564 ----
  68c57276ec7b8c270319cdeb1f991f3d  gcc/testsuite/gcc.dg/ubsan/c99-shift-6.c
  acf0af3723cb1d2f1a5fe0dbbb7d9fa9  gcc/testsuite/gcc.dg/ubsan/c99-wrapv-shift-1.c
  24e57c18350248c3a31ee78f8f40e95b  gcc/testsuite/gcc.dg/ubsan/c99-wrapv-shift-2.c
+ e4441e7485c1c8e740509a37f0c0bb14  gcc/testsuite/gcc.dg/ubsan/commutative-1.c
  7255cefa0dd234815e49556ae85bf1f6  gcc/testsuite/gcc.dg/ubsan/float-cast-overflow-atomic.c
  b6636fcf606d4b2a9b3c129b082bc808  gcc/testsuite/gcc.dg/ubsan/float-cast-overflow-bf.c
  3325507ff87bcf4f63df3972ec6895c4  gcc/testsuite/gcc.dg/ubsan/ipa-icf-1.c
  20138e45bcf86067b02f18ee36d2a451  gcc/testsuite/gcc.dg/ubsan/object-size-9.c
+ bd23f40ca964648dca24107dcc929765  gcc/testsuite/gcc.dg/ubsan/pr103456.c
  8b53119c2975ba4eb7e0a8a3f21049bc  gcc/testsuite/gcc.dg/ubsan/pr63690.c
  7a3b89a11b570c0d6817707c745a9fba  gcc/testsuite/gcc.dg/ubsan/pr67279.c
  c9a455b03d901e306e1836d50e9e37d6  gcc/testsuite/gcc.dg/ubsan/pr67662.c
*************** bea7f326889c0a8fbd1c274d297acf07  gcc/te
*** 45602,45615 ****
  6dd5a7b8f1dd237a95a0f42766ee64d9  gcc/testsuite/gcc.dg/ubsan/pr81162.c
  2fb0588afada15c7de7ba10279ac119b  gcc/testsuite/gcc.dg/ubsan/pr81223.c
  bb206afd27601853bf04c68fdf6d7763  gcc/testsuite/gcc.dg/ubsan/pr81505.c
! d51a95178377558ec5a8c1ee1a2d20bb  gcc/testsuite/gcc.dg/ubsan/pr81981.c
  a03c3f43eab7504cac64b70f59c4026c  gcc/testsuite/gcc.dg/ubsan/pr82498.c
  e95ed112f0ea45770ff240c4770cd2c7  gcc/testsuite/gcc.dg/ubsan/pr83014.c
  57be3b86af6986d32a0c953f61260905  gcc/testsuite/gcc.dg/ubsan/pr88234.c
  a6de1d906f46c35c2202d196fcbdba1a  gcc/testsuite/gcc.dg/ubsan/pr89284.c
  51557943b6a5571078dca811d526d7d8  gcc/testsuite/gcc.dg/ubsan/pr94423.c
  0f09425e087253b3e4d9360b845cfa01  gcc/testsuite/gcc.dg/ubsan/pr95810.c
! 375130149a7728807995800a209290a8  gcc/testsuite/gcc.dg/ubsan/ubsan.exp
  ff1993364d91d08b560ce3b84092e86d  gcc/testsuite/gcc.dg/ucnid-1-utf8.c
  b749062a1214fdf6ba947d30bdf90f30  gcc/testsuite/gcc.dg/ucnid-1.c
  d1ef7efe2db207bd7f1420dda8d447eb  gcc/testsuite/gcc.dg/ucnid-10-utf8.c
--- 47575,47588 ----
  6dd5a7b8f1dd237a95a0f42766ee64d9  gcc/testsuite/gcc.dg/ubsan/pr81162.c
  2fb0588afada15c7de7ba10279ac119b  gcc/testsuite/gcc.dg/ubsan/pr81223.c
  bb206afd27601853bf04c68fdf6d7763  gcc/testsuite/gcc.dg/ubsan/pr81505.c
! 313140a74f330a5c68bf78802afa5cab  gcc/testsuite/gcc.dg/ubsan/pr81981.c
  a03c3f43eab7504cac64b70f59c4026c  gcc/testsuite/gcc.dg/ubsan/pr82498.c
  e95ed112f0ea45770ff240c4770cd2c7  gcc/testsuite/gcc.dg/ubsan/pr83014.c
  57be3b86af6986d32a0c953f61260905  gcc/testsuite/gcc.dg/ubsan/pr88234.c
  a6de1d906f46c35c2202d196fcbdba1a  gcc/testsuite/gcc.dg/ubsan/pr89284.c
  51557943b6a5571078dca811d526d7d8  gcc/testsuite/gcc.dg/ubsan/pr94423.c
  0f09425e087253b3e4d9360b845cfa01  gcc/testsuite/gcc.dg/ubsan/pr95810.c
! c31e1ce9db014fe53eb121823a3e0887  gcc/testsuite/gcc.dg/ubsan/ubsan.exp
  ff1993364d91d08b560ce3b84092e86d  gcc/testsuite/gcc.dg/ucnid-1-utf8.c
  b749062a1214fdf6ba947d30bdf90f30  gcc/testsuite/gcc.dg/ucnid-1.c
  d1ef7efe2db207bd7f1420dda8d447eb  gcc/testsuite/gcc.dg/ucnid-10-utf8.c
*************** a79f0d17d61a758298da881720540e8d  gcc/te
*** 45630,45637 ****
  9bc0a90ce3d74b78f0f740d66497bb75  gcc/testsuite/gcc.dg/ucnid-3.c
  e25797a1db822aa1cb3425cf91286426  gcc/testsuite/gcc.dg/ucnid-4-utf8.c
  93d462b5914f892ba1585709c09801af  gcc/testsuite/gcc.dg/ucnid-4.c
! b53722e42cf4b7b868e0c6fdab5fe6ff  gcc/testsuite/gcc.dg/ucnid-5-utf8.c
! cec7254717e77879c0ccf65e327d11c1  gcc/testsuite/gcc.dg/ucnid-5.c
  3399696269bdf92963fe90a351ffbee2  gcc/testsuite/gcc.dg/ucnid-6-utf8.c
  b8893551b0899bfd7f2d695ea0479c43  gcc/testsuite/gcc.dg/ucnid-6.c
  e1704a3464b0e62815ab66f190fbc41c  gcc/testsuite/gcc.dg/ucnid-7-utf8.c
--- 47603,47610 ----
  9bc0a90ce3d74b78f0f740d66497bb75  gcc/testsuite/gcc.dg/ucnid-3.c
  e25797a1db822aa1cb3425cf91286426  gcc/testsuite/gcc.dg/ucnid-4-utf8.c
  93d462b5914f892ba1585709c09801af  gcc/testsuite/gcc.dg/ucnid-4.c
! 3885b5317be0cf10a7b3283b22451cd9  gcc/testsuite/gcc.dg/ucnid-5-utf8.c
! 1aeff287f4b4150447168695e71c83bf  gcc/testsuite/gcc.dg/ucnid-5.c
  3399696269bdf92963fe90a351ffbee2  gcc/testsuite/gcc.dg/ucnid-6-utf8.c
  b8893551b0899bfd7f2d695ea0479c43  gcc/testsuite/gcc.dg/ucnid-6.c
  e1704a3464b0e62815ab66f190fbc41c  gcc/testsuite/gcc.dg/ucnid-7-utf8.c
*************** fce582880f3f69bc08ac08c1282958d5  gcc/te
*** 45654,45661 ****
  c611b4ad3ec4bad367027a6ab1ef6505  gcc/testsuite/gcc.dg/uninit-13.c
  0708d0de6c003704695f4b75ba9ffc23  gcc/testsuite/gcc.dg/uninit-14-O0.c
  7eea6f3931a5572af13879f31560102e  gcc/testsuite/gcc.dg/uninit-14.c
! 96bb2f99c0c1970915dc5fe8b30157e8  gcc/testsuite/gcc.dg/uninit-15-O0.c
! bf435dd28dce06b56fc5d3c469516013  gcc/testsuite/gcc.dg/uninit-15.c
  92cf714efeaed3ffe0cd867508cfe505  gcc/testsuite/gcc.dg/uninit-16.c
  c47999a5663fbe110a3d4134c92050c2  gcc/testsuite/gcc.dg/uninit-17-O0.c
  728401b250e40769899aeaa5eb3c4f2e  gcc/testsuite/gcc.dg/uninit-17.c
--- 47627,47634 ----
  c611b4ad3ec4bad367027a6ab1ef6505  gcc/testsuite/gcc.dg/uninit-13.c
  0708d0de6c003704695f4b75ba9ffc23  gcc/testsuite/gcc.dg/uninit-14-O0.c
  7eea6f3931a5572af13879f31560102e  gcc/testsuite/gcc.dg/uninit-14.c
! 8ee3704425feb1fa371f6fb3a10ae7e6  gcc/testsuite/gcc.dg/uninit-15-O0.c
! 8c17d6053629a76d697c5750e0ab6be0  gcc/testsuite/gcc.dg/uninit-15.c
  92cf714efeaed3ffe0cd867508cfe505  gcc/testsuite/gcc.dg/uninit-16.c
  c47999a5663fbe110a3d4134c92050c2  gcc/testsuite/gcc.dg/uninit-17-O0.c
  728401b250e40769899aeaa5eb3c4f2e  gcc/testsuite/gcc.dg/uninit-17.c
*************** e7bbbf0090661e8a065ace2511f8f195  gcc/te
*** 45666,45672 ****
  ddfc3a41edab799f26758dadfa5a4d09  gcc/testsuite/gcc.dg/uninit-20.c
  cd35c38615935c72aed40e51df2da8e2  gcc/testsuite/gcc.dg/uninit-21.c
  686b917b4eea226d20e90927f010f6bb  gcc/testsuite/gcc.dg/uninit-22.c
! 56957c4cf54ed73c19f8d6c94222d1d7  gcc/testsuite/gcc.dg/uninit-23.c
  a2f4fe6ec6702c8b1f5cac20b016ba80  gcc/testsuite/gcc.dg/uninit-24.c
  5edf85c049e0e6832ea5834af9db36a7  gcc/testsuite/gcc.dg/uninit-25-gimple.c
  466720ef0058c3cc56f1d80838387364  gcc/testsuite/gcc.dg/uninit-25.c
--- 47639,47645 ----
  ddfc3a41edab799f26758dadfa5a4d09  gcc/testsuite/gcc.dg/uninit-20.c
  cd35c38615935c72aed40e51df2da8e2  gcc/testsuite/gcc.dg/uninit-21.c
  686b917b4eea226d20e90927f010f6bb  gcc/testsuite/gcc.dg/uninit-22.c
! 086a58863841a5ee6f41bcc82fd7d146  gcc/testsuite/gcc.dg/uninit-23.c
  a2f4fe6ec6702c8b1f5cac20b016ba80  gcc/testsuite/gcc.dg/uninit-24.c
  5edf85c049e0e6832ea5834af9db36a7  gcc/testsuite/gcc.dg/uninit-25-gimple.c
  466720ef0058c3cc56f1d80838387364  gcc/testsuite/gcc.dg/uninit-25.c
*************** d75b083976771cb9c38cd60cc5154ac9  gcc/te
*** 45683,45693 ****
  fccc7811a06d6d5da7f7ed04f7c32a7a  gcc/testsuite/gcc.dg/uninit-34.c
  81559462e484e756d6f876ab8caa7c8c  gcc/testsuite/gcc.dg/uninit-36.c
  5113c8378ecdf90b9b572d1e46700af1  gcc/testsuite/gcc.dg/uninit-37.c
! eace99174fd4ba1d51709b4a633a8f6c  gcc/testsuite/gcc.dg/uninit-38.c
! df2b8c972e35e028a6dc7455d0470b93  gcc/testsuite/gcc.dg/uninit-39.c
  d402693501768659493eedf82719cfb1  gcc/testsuite/gcc.dg/uninit-4-O0.c
  e36b0a4b14063baf6381118a03371e4a  gcc/testsuite/gcc.dg/uninit-4.c
! 74069c6468457eff8abecfa971b54de2  gcc/testsuite/gcc.dg/uninit-40.c
  d65c9c40149db2e0b97a0f8764da0100  gcc/testsuite/gcc.dg/uninit-5-O0.c
  22b2aa0a5ee17dd1d15ad96e2b2e69ff  gcc/testsuite/gcc.dg/uninit-5.c
  a3d5c35b0bb42b2acb6a9b728cd4de1a  gcc/testsuite/gcc.dg/uninit-6-O0.c
--- 47656,47668 ----
  fccc7811a06d6d5da7f7ed04f7c32a7a  gcc/testsuite/gcc.dg/uninit-34.c
  81559462e484e756d6f876ab8caa7c8c  gcc/testsuite/gcc.dg/uninit-36.c
  5113c8378ecdf90b9b572d1e46700af1  gcc/testsuite/gcc.dg/uninit-37.c
! 975218493cd6b7ba6babd6de6307e208  gcc/testsuite/gcc.dg/uninit-38.c
! 2d0a12332c9eba4f2ccc1a3574a5b349  gcc/testsuite/gcc.dg/uninit-39.c
  d402693501768659493eedf82719cfb1  gcc/testsuite/gcc.dg/uninit-4-O0.c
  e36b0a4b14063baf6381118a03371e4a  gcc/testsuite/gcc.dg/uninit-4.c
! b05d71d08d674a7aa23d6c3602de81c4  gcc/testsuite/gcc.dg/uninit-40.c
! 9d75047cc7e79fd424790a58060efdc0  gcc/testsuite/gcc.dg/uninit-41.c
! fc7c324f83c457c76da426c4f7be0ef1  gcc/testsuite/gcc.dg/uninit-42.c
  d65c9c40149db2e0b97a0f8764da0100  gcc/testsuite/gcc.dg/uninit-5-O0.c
  22b2aa0a5ee17dd1d15ad96e2b2e69ff  gcc/testsuite/gcc.dg/uninit-5.c
  a3d5c35b0bb42b2acb6a9b728cd4de1a  gcc/testsuite/gcc.dg/uninit-6-O0.c
*************** c9e10adb185a3bbf40bb8e18c0127132  gcc/te
*** 45708,45729 ****
  eb3da821b8325355aae91cb8e079d6a4  gcc/testsuite/gcc.dg/uninit-H.c
  9d1bceafd31eb10b545bfa6239206c15  gcc/testsuite/gcc.dg/uninit-I-O0.c
  988c2fc57e3d496a9d761ee0eb2841e4  gcc/testsuite/gcc.dg/uninit-I.c
! 992406b7b2ed43033cb4281b050f9a49  gcc/testsuite/gcc.dg/uninit-pr100250.c
  b7c6bfc3bd2cba3afab2030ac56dd67e  gcc/testsuite/gcc.dg/uninit-pr100732.c
  58c1fce493b489aff04e0b2f66635e90  gcc/testsuite/gcc.dg/uninit-pr19430-2.c
  79f653fd913dfd35f07e5b3890168e74  gcc/testsuite/gcc.dg/uninit-pr19430-O0.c
  0ba39e72d317abfcfd3703541b7f8a41  gcc/testsuite/gcc.dg/uninit-pr19430.c
! c7de5c9f2e0182e483bc9b11fc2d1f3d  gcc/testsuite/gcc.dg/uninit-pr20644-O0.c
  bd8e8e7214f9f23684fcce6542ba21a2  gcc/testsuite/gcc.dg/uninit-pr20644.c
  fb7fb911814f67c58846323d51173f98  gcc/testsuite/gcc.dg/uninit-pr40943.c
  cc87ba9b6c639bd8ff150bf229696aaf  gcc/testsuite/gcc.dg/uninit-pr44547.c
! 4eb2433be8945ebfe44eb7432a504a5d  gcc/testsuite/gcc.dg/uninit-pr50476.c
  f3d0c9f5e1f93ea3a3c13cc79f4d5def  gcc/testsuite/gcc.dg/uninit-pr55060.c
  45d1b6aca484aefb1c4325023b2ecc5b  gcc/testsuite/gcc.dg/uninit-pr59970.c
! 9f5dec745b54d5bbec8d0bb7bea4010d  gcc/testsuite/gcc.dg/uninit-pr61112.c
  1734c6a57c50120395340cb541c58c88  gcc/testsuite/gcc.dg/uninit-pr61409.c
  785af39d8c329bcc7df0ae094695f47b  gcc/testsuite/gcc.dg/uninit-pr61677.c
  1f4acfdc63b9f419aa5b8754b0a641e1  gcc/testsuite/gcc.dg/uninit-pr61869.c
  6ba1683e472556b17b3c225408b3fc21  gcc/testsuite/gcc.dg/uninit-pr65182.c
  1c8d27f96b4cf1013a7cd0fae3e7368a  gcc/testsuite/gcc.dg/uninit-pr65686.c
  e821794f64a67239864ede698d50f620  gcc/testsuite/gcc.dg/uninit-pr78295.c
--- 47683,47711 ----
  eb3da821b8325355aae91cb8e079d6a4  gcc/testsuite/gcc.dg/uninit-H.c
  9d1bceafd31eb10b545bfa6239206c15  gcc/testsuite/gcc.dg/uninit-I-O0.c
  988c2fc57e3d496a9d761ee0eb2841e4  gcc/testsuite/gcc.dg/uninit-I.c
! b99f357470c6415b9844a4fe33db0606  gcc/testsuite/gcc.dg/uninit-pr100250.c
  b7c6bfc3bd2cba3afab2030ac56dd67e  gcc/testsuite/gcc.dg/uninit-pr100732.c
+ 2519fc3bdcb9029abb613eae7d15ae75  gcc/testsuite/gcc.dg/uninit-pr101300.c
+ bf768406434195e48962c188b55bf5c2  gcc/testsuite/gcc.dg/uninit-pr101494.c
+ 8200f01a2009070dab21c75f90bc9dbf  gcc/testsuite/gcc.dg/uninit-pr101573.c
+ 351fe7aa637f2e54aad00a82bf867c15  gcc/testsuite/gcc.dg/uninit-pr102403-c2.c
+ e2b774abf8d7e4cc810bee5ab597c4cc  gcc/testsuite/gcc.dg/uninit-pr102403.c
+ 5ff4f56884cf578c7f982952c079b4f6  gcc/testsuite/gcc.dg/uninit-pr105109.c
  58c1fce493b489aff04e0b2f66635e90  gcc/testsuite/gcc.dg/uninit-pr19430-2.c
  79f653fd913dfd35f07e5b3890168e74  gcc/testsuite/gcc.dg/uninit-pr19430-O0.c
  0ba39e72d317abfcfd3703541b7f8a41  gcc/testsuite/gcc.dg/uninit-pr19430.c
! 91c544bce46e7d686c64631ec6c9422e  gcc/testsuite/gcc.dg/uninit-pr20644-O0.c
  bd8e8e7214f9f23684fcce6542ba21a2  gcc/testsuite/gcc.dg/uninit-pr20644.c
  fb7fb911814f67c58846323d51173f98  gcc/testsuite/gcc.dg/uninit-pr40943.c
  cc87ba9b6c639bd8ff150bf229696aaf  gcc/testsuite/gcc.dg/uninit-pr44547.c
! 0d268bf46ec35f0bd1c568a5916d76e1  gcc/testsuite/gcc.dg/uninit-pr50476.c
  f3d0c9f5e1f93ea3a3c13cc79f4d5def  gcc/testsuite/gcc.dg/uninit-pr55060.c
  45d1b6aca484aefb1c4325023b2ecc5b  gcc/testsuite/gcc.dg/uninit-pr59970.c
! 456ca0f551ab404dbbabf377798c2291  gcc/testsuite/gcc.dg/uninit-pr61112.c
  1734c6a57c50120395340cb541c58c88  gcc/testsuite/gcc.dg/uninit-pr61409.c
  785af39d8c329bcc7df0ae094695f47b  gcc/testsuite/gcc.dg/uninit-pr61677.c
  1f4acfdc63b9f419aa5b8754b0a641e1  gcc/testsuite/gcc.dg/uninit-pr61869.c
+ 5881e1c79acfe63238ea242998577105  gcc/testsuite/gcc.dg/uninit-pr65178.c
  6ba1683e472556b17b3c225408b3fc21  gcc/testsuite/gcc.dg/uninit-pr65182.c
  1c8d27f96b4cf1013a7cd0fae3e7368a  gcc/testsuite/gcc.dg/uninit-pr65686.c
  e821794f64a67239864ede698d50f620  gcc/testsuite/gcc.dg/uninit-pr78295.c
*************** e5914ec194abe834db8656483a92fcdc  gcc/te
*** 45731,45743 ****
  e37d87bcbc2425be943ff59a8baa223d  gcc/testsuite/gcc.dg/uninit-pr81782.c
  277c9911e147065687afe2d561f10430  gcc/testsuite/gcc.dg/uninit-pr81897-2.c
  2cff9b0e356693e6320ee7ba4d4f02c2  gcc/testsuite/gcc.dg/uninit-pr81897.c
! 91f18e367a2661e91825b0437abc81c3  gcc/testsuite/gcc.dg/uninit-pr89230-1.c
  494ab47ab3b233786bbb3b4974773419  gcc/testsuite/gcc.dg/uninit-pr89230-2.c
  bc12979aeecbec0cc9fe92fcb51c30b9  gcc/testsuite/gcc.dg/uninit-pr89296.c
  0e268375e3687661f7e4d83a6700861a  gcc/testsuite/gcc.dg/uninit-pr90394-1-gimple.c
  ec22e39e2b160e6444e03b5dcacc93f3  gcc/testsuite/gcc.dg/uninit-pr90394.c
  2e37ae395e46a8e8e62921557b5db451  gcc/testsuite/gcc.dg/uninit-pr95136.c
! a6f46cba23241901d7e809f123ba1374  gcc/testsuite/gcc.dg/uninit-pr98578.c
  2e2b2ca64d1c3db87c75755a21b4bc06  gcc/testsuite/gcc.dg/uninit-pred-2_a.c
  7d67cd7432d67994c6642a61e0020d9e  gcc/testsuite/gcc.dg/uninit-pred-2_b.c
  dc20b95e0c82e7593d7e562b3b1e5aaf  gcc/testsuite/gcc.dg/uninit-pred-2_c.c
--- 47713,47727 ----
  e37d87bcbc2425be943ff59a8baa223d  gcc/testsuite/gcc.dg/uninit-pr81782.c
  277c9911e147065687afe2d561f10430  gcc/testsuite/gcc.dg/uninit-pr81897-2.c
  2cff9b0e356693e6320ee7ba4d4f02c2  gcc/testsuite/gcc.dg/uninit-pr81897.c
! 8a658a7a9ad0a2c83d62b931ced6c05e  gcc/testsuite/gcc.dg/uninit-pr89230-1.c
  494ab47ab3b233786bbb3b4974773419  gcc/testsuite/gcc.dg/uninit-pr89230-2.c
  bc12979aeecbec0cc9fe92fcb51c30b9  gcc/testsuite/gcc.dg/uninit-pr89296.c
  0e268375e3687661f7e4d83a6700861a  gcc/testsuite/gcc.dg/uninit-pr90394-1-gimple.c
  ec22e39e2b160e6444e03b5dcacc93f3  gcc/testsuite/gcc.dg/uninit-pr90394.c
+ 0ac3bcf2d2904961cbe72908ca5ed67a  gcc/testsuite/gcc.dg/uninit-pr93100.c
  2e37ae395e46a8e8e62921557b5db451  gcc/testsuite/gcc.dg/uninit-pr95136.c
! cb4477c93eddb2c98e8db3799ef9a8d3  gcc/testsuite/gcc.dg/uninit-pr98578.c
! d33bce997dea4f74cbb227675f6ec7b7  gcc/testsuite/gcc.dg/uninit-pr98583.c
  2e2b2ca64d1c3db87c75755a21b4bc06  gcc/testsuite/gcc.dg/uninit-pred-2_a.c
  7d67cd7432d67994c6642a61e0020d9e  gcc/testsuite/gcc.dg/uninit-pred-2_b.c
  dc20b95e0c82e7593d7e562b3b1e5aaf  gcc/testsuite/gcc.dg/uninit-pred-2_c.c
*************** c17f9d40557afd23540fbdc6dee10e2d  gcc/te
*** 45755,45761 ****
  05f38c38c613725dd896471fbc94ef85  gcc/testsuite/gcc.dg/uninit-pred-6_c.c
  840114fbb15ec153ec3965fd3d60423e  gcc/testsuite/gcc.dg/uninit-pred-6_d.c
  ddb0d9d02246d260424316fc51c4b34f  gcc/testsuite/gcc.dg/uninit-pred-6_e.c
! 7fc529e05e88623e8a1680b679c615b4  gcc/testsuite/gcc.dg/uninit-pred-7_a.c
  19e220a29cccab9dbda4e645d69c30b2  gcc/testsuite/gcc.dg/uninit-pred-7_b.c
  ae9f63955208be4c16b0ba30bd16f5b4  gcc/testsuite/gcc.dg/uninit-pred-7_c.c
  7a3eae1faebb33a9f5f883ebc298164a  gcc/testsuite/gcc.dg/uninit-pred-7_d.c
--- 47739,47745 ----
  05f38c38c613725dd896471fbc94ef85  gcc/testsuite/gcc.dg/uninit-pred-6_c.c
  840114fbb15ec153ec3965fd3d60423e  gcc/testsuite/gcc.dg/uninit-pred-6_d.c
  ddb0d9d02246d260424316fc51c4b34f  gcc/testsuite/gcc.dg/uninit-pred-6_e.c
! c86e3e3c28fad2fc003cc8a64b5a56a4  gcc/testsuite/gcc.dg/uninit-pred-7_a.c
  19e220a29cccab9dbda4e645d69c30b2  gcc/testsuite/gcc.dg/uninit-pred-7_b.c
  ae9f63955208be4c16b0ba30bd16f5b4  gcc/testsuite/gcc.dg/uninit-pred-7_c.c
  7a3eae1faebb33a9f5f883ebc298164a  gcc/testsuite/gcc.dg/uninit-pred-7_d.c
*************** ae9f63955208be4c16b0ba30bd16f5b4  gcc/te
*** 45764,45772 ****
  48dec70277ff9a8f83aba472bc7a6ea6  gcc/testsuite/gcc.dg/uninit-pred-8_c.c
  096e58c93515dd3678c391930e20efb7  gcc/testsuite/gcc.dg/uninit-pred-8_d.c
  f8c4f61a7dcf75600a176b4dab26db57  gcc/testsuite/gcc.dg/uninit-pred-9_a.c
! 24f7b7ce08b62bfb7599c7a47f0276d8  gcc/testsuite/gcc.dg/uninit-pred-9_b.c
  bc7ca58b23b9c0a381b714ac4dc2ca9f  gcc/testsuite/gcc.dg/uninit-suppress.c
  5e843957c9ab050cc934b752246d8cf9  gcc/testsuite/gcc.dg/uninit-suppress_2.c
  78c7acd37bc5c230e62db954ee385285  gcc/testsuite/gcc.dg/union-1.c
  19582a249859766163d52754d6531172  gcc/testsuite/gcc.dg/union-2.c
  c637ae15c59019e613281e579d717a84  gcc/testsuite/gcc.dg/union-3.c
--- 47748,47757 ----
  48dec70277ff9a8f83aba472bc7a6ea6  gcc/testsuite/gcc.dg/uninit-pred-8_c.c
  096e58c93515dd3678c391930e20efb7  gcc/testsuite/gcc.dg/uninit-pred-8_d.c
  f8c4f61a7dcf75600a176b4dab26db57  gcc/testsuite/gcc.dg/uninit-pred-9_a.c
! ab39d11a7afb84e861c39110f0ace2d4  gcc/testsuite/gcc.dg/uninit-pred-9_b.c
  bc7ca58b23b9c0a381b714ac4dc2ca9f  gcc/testsuite/gcc.dg/uninit-suppress.c
  5e843957c9ab050cc934b752246d8cf9  gcc/testsuite/gcc.dg/uninit-suppress_2.c
+ b0e2e79211806d4afcda9cf5d4d4dcb6  gcc/testsuite/gcc.dg/uninit-suppress_3.c
  78c7acd37bc5c230e62db954ee385285  gcc/testsuite/gcc.dg/union-1.c
  19582a249859766163d52754d6531172  gcc/testsuite/gcc.dg/union-2.c
  c637ae15c59019e613281e579d717a84  gcc/testsuite/gcc.dg/union-3.c
*************** a7ac2b6782378edf99026215c26ce37f  gcc/te
*** 45781,45793 ****
  fced4847e686e50fcf2f9178fed8ec41  gcc/testsuite/gcc.dg/unordered-2.c
  3e159974de24470fb7ecc60669d62183  gcc/testsuite/gcc.dg/unordered-3.c
  a5c7a9cbd547b9d922f89fd38295d579  gcc/testsuite/gcc.dg/unroll-1.c
  225da14b33f643c6fc0fd75bf00f550a  gcc/testsuite/gcc.dg/unroll-2.c
  2fc59ac0f60d8c5500adb56cf66c1ed6  gcc/testsuite/gcc.dg/unroll-3.c
  b1b811ab7ccd6cb7c2bb14df1bde12f8  gcc/testsuite/gcc.dg/unroll-4.c
  c6ae2df6a353c5ac288fcafb37edc450  gcc/testsuite/gcc.dg/unroll-5.c
  77dbefe7ee6b1de71f451796787f1532  gcc/testsuite/gcc.dg/unroll-6.c
! a034cbd359de956aef07a36500a255ea  gcc/testsuite/gcc.dg/unroll-7.c
  204b9be344d219dfaab5a48887ad9516  gcc/testsuite/gcc.dg/unroll-8.c
  47ae2c5d29560d4618b97c02b8cb064d  gcc/testsuite/gcc.dg/unroll-and-jam.c
  99b212e0df5c61c48b3f2593a23414cc  gcc/testsuite/gcc.dg/unsigned-long-compare.c
  aa7c265797a6b0a2b548e25a531baf92  gcc/testsuite/gcc.dg/unused-1.c
--- 47766,47780 ----
  fced4847e686e50fcf2f9178fed8ec41  gcc/testsuite/gcc.dg/unordered-2.c
  3e159974de24470fb7ecc60669d62183  gcc/testsuite/gcc.dg/unordered-3.c
  a5c7a9cbd547b9d922f89fd38295d579  gcc/testsuite/gcc.dg/unroll-1.c
+ b1481603f0fc03920239ad401f62f53f  gcc/testsuite/gcc.dg/unroll-10.c
  225da14b33f643c6fc0fd75bf00f550a  gcc/testsuite/gcc.dg/unroll-2.c
  2fc59ac0f60d8c5500adb56cf66c1ed6  gcc/testsuite/gcc.dg/unroll-3.c
  b1b811ab7ccd6cb7c2bb14df1bde12f8  gcc/testsuite/gcc.dg/unroll-4.c
  c6ae2df6a353c5ac288fcafb37edc450  gcc/testsuite/gcc.dg/unroll-5.c
  77dbefe7ee6b1de71f451796787f1532  gcc/testsuite/gcc.dg/unroll-6.c
! 06b8019a5e45bc39db1cb57d850fdbb7  gcc/testsuite/gcc.dg/unroll-7.c
  204b9be344d219dfaab5a48887ad9516  gcc/testsuite/gcc.dg/unroll-8.c
+ a0a496a7280c881b5951e833f694ac32  gcc/testsuite/gcc.dg/unroll-9.c
  47ae2c5d29560d4618b97c02b8cb064d  gcc/testsuite/gcc.dg/unroll-and-jam.c
  99b212e0df5c61c48b3f2593a23414cc  gcc/testsuite/gcc.dg/unsigned-long-compare.c
  aa7c265797a6b0a2b548e25a531baf92  gcc/testsuite/gcc.dg/unused-1.c
*************** fc3f9485da33ab149e612932c91c2cb1  gcc/te
*** 45866,45873 ****
  ce36b8e49455e65805b6c7b39eb20a08  gcc/testsuite/gcc.dg/vect/bb-slp-13.c
  997e8e409fc9d65e61eedd915ed06a08  gcc/testsuite/gcc.dg/vect/bb-slp-14.c
  22e04ce02d2e83a37186472a1dbb5fcb  gcc/testsuite/gcc.dg/vect/bb-slp-15.c
! 0bfa3ac09a6edbdd4c1fbdf1d9f04e47  gcc/testsuite/gcc.dg/vect/bb-slp-16.c
! 6e916a98c0344319fe84659eee14b3b2  gcc/testsuite/gcc.dg/vect/bb-slp-17.c
  f0567941b77c37b1f0e116a41dd7787c  gcc/testsuite/gcc.dg/vect/bb-slp-18.c
  e9f7d5047f2fefff8b3351ac80d10f30  gcc/testsuite/gcc.dg/vect/bb-slp-19.c
  95a4e09df73280a5074daf44e1cddf5b  gcc/testsuite/gcc.dg/vect/bb-slp-2.c
--- 47853,47860 ----
  ce36b8e49455e65805b6c7b39eb20a08  gcc/testsuite/gcc.dg/vect/bb-slp-13.c
  997e8e409fc9d65e61eedd915ed06a08  gcc/testsuite/gcc.dg/vect/bb-slp-14.c
  22e04ce02d2e83a37186472a1dbb5fcb  gcc/testsuite/gcc.dg/vect/bb-slp-15.c
! abc245615aaeaa94c37236d69b5bac76  gcc/testsuite/gcc.dg/vect/bb-slp-16.c
! 07dfa4e9468fe605994cdc0801e9aa3b  gcc/testsuite/gcc.dg/vect/bb-slp-17.c
  f0567941b77c37b1f0e116a41dd7787c  gcc/testsuite/gcc.dg/vect/bb-slp-18.c
  e9f7d5047f2fefff8b3351ac80d10f30  gcc/testsuite/gcc.dg/vect/bb-slp-19.c
  95a4e09df73280a5074daf44e1cddf5b  gcc/testsuite/gcc.dg/vect/bb-slp-2.c
*************** e227798a6ceabae26034233f900b8049  gcc/te
*** 45891,45897 ****
  167edde777120c9bbb2baa8d8b1962a6  gcc/testsuite/gcc.dg/vect/bb-slp-36.c
  d9b82f24ec441bd4ed9946db9792733c  gcc/testsuite/gcc.dg/vect/bb-slp-37.c
  7bcff90b9863e84eae294cff0b865427  gcc/testsuite/gcc.dg/vect/bb-slp-38.c
! 190410e1fef8da664b76927524f2d9c4  gcc/testsuite/gcc.dg/vect/bb-slp-39.c
  2d3a915ced26b6be766341dc7de50ad8  gcc/testsuite/gcc.dg/vect/bb-slp-4.c
  094d2618b84be18ada044275f13cbf29  gcc/testsuite/gcc.dg/vect/bb-slp-40.c
  e32567a5dc4b945280cd4527bf1666a5  gcc/testsuite/gcc.dg/vect/bb-slp-41.c
--- 47878,47884 ----
  167edde777120c9bbb2baa8d8b1962a6  gcc/testsuite/gcc.dg/vect/bb-slp-36.c
  d9b82f24ec441bd4ed9946db9792733c  gcc/testsuite/gcc.dg/vect/bb-slp-37.c
  7bcff90b9863e84eae294cff0b865427  gcc/testsuite/gcc.dg/vect/bb-slp-38.c
! 174d2ec8a3db7f65c3cdc324acdfe55d  gcc/testsuite/gcc.dg/vect/bb-slp-39.c
  2d3a915ced26b6be766341dc7de50ad8  gcc/testsuite/gcc.dg/vect/bb-slp-4.c
  094d2618b84be18ada044275f13cbf29  gcc/testsuite/gcc.dg/vect/bb-slp-40.c
  e32567a5dc4b945280cd4527bf1666a5  gcc/testsuite/gcc.dg/vect/bb-slp-41.c
*************** a69c2c27919262d61df10eca968ae56c  gcc/te
*** 45927,45932 ****
--- 47914,47923 ----
  15ebcb1640864f38fb35c69c5a64c16d  gcc/testsuite/gcc.dg/vect/bb-slp-69.c
  e07b4d2c5c7b96559385582969530695  gcc/testsuite/gcc.dg/vect/bb-slp-7.c
  385cc9557f6c95e0dd210863bce477a0  gcc/testsuite/gcc.dg/vect/bb-slp-70.c
+ 6e6b896be12848b57e91c549bb26aae7  gcc/testsuite/gcc.dg/vect/bb-slp-71.c
+ 4a63b7e8fcecda2972c9cff4802d1ef0  gcc/testsuite/gcc.dg/vect/bb-slp-72.c
+ 66b8bd516d317bd54b91735803958bf9  gcc/testsuite/gcc.dg/vect/bb-slp-73.c
+ 3afc57c93ad8c3a8c753f0a7af01fb4e  gcc/testsuite/gcc.dg/vect/bb-slp-74.c
  e25a8f3320f641e5055cfc1e0a955c40  gcc/testsuite/gcc.dg/vect/bb-slp-8.c
  9f7711e0c82ad69b17839e734862f539  gcc/testsuite/gcc.dg/vect/bb-slp-8a.c
  74399495ff8f4034fefd09f665413168  gcc/testsuite/gcc.dg/vect/bb-slp-8b.c
*************** c311453bfa9e07fb29dd6981eaaf350d  gcc/te
*** 45942,45950 ****
  5face17b7bca252af575af588f27be32  gcc/testsuite/gcc.dg/vect/bb-slp-phis-1.c
  f46db941b9a35f0bfa38b50d084a730c  gcc/testsuite/gcc.dg/vect/bb-slp-pow-1.c
  f606c48752c134307bcd2f9c1b4911ce  gcc/testsuite/gcc.dg/vect/bb-slp-pr100778-1.c
  bdedf0ea0dbf21fbeaa20a6ae82af692  gcc/testsuite/gcc.dg/vect/bb-slp-pr101615-2.c
  5472e7bf338627077f4e6ce8cce9944e  gcc/testsuite/gcc.dg/vect/bb-slp-pr58135.c
! 36304c1d67fc912f27ddc07a124d90e1  gcc/testsuite/gcc.dg/vect/bb-slp-pr65935.c
  a3000cd864ecf8f7a3037fec3f0ac388  gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c
  1d3aaf7003b6ad6834ed135c4c749cac  gcc/testsuite/gcc.dg/vect/bb-slp-pr78205.c
  7bde18f16db8ba76291d8ca502888f3e  gcc/testsuite/gcc.dg/vect/bb-slp-pr80705.c
--- 47933,47947 ----
  5face17b7bca252af575af588f27be32  gcc/testsuite/gcc.dg/vect/bb-slp-phis-1.c
  f46db941b9a35f0bfa38b50d084a730c  gcc/testsuite/gcc.dg/vect/bb-slp-pow-1.c
  f606c48752c134307bcd2f9c1b4911ce  gcc/testsuite/gcc.dg/vect/bb-slp-pr100778-1.c
+ d073ebbe7b155eb721f58facf72de8c5  gcc/testsuite/gcc.dg/vect/bb-slp-pr101207.c
+ 937488d605d0957aa4f93e7419efeefb  gcc/testsuite/gcc.dg/vect/bb-slp-pr101242.c
+ a393de493a44969dd08e807805513df0  gcc/testsuite/gcc.dg/vect/bb-slp-pr101615-1.c
  bdedf0ea0dbf21fbeaa20a6ae82af692  gcc/testsuite/gcc.dg/vect/bb-slp-pr101615-2.c
+ cf1f520661c5242475d0a36f640664dd  gcc/testsuite/gcc.dg/vect/bb-slp-pr101756.c
+ 5295b6a2a7e93bc6dfe10ebdd01406b8  gcc/testsuite/gcc.dg/vect/bb-slp-pr103800.c
+ d099da16826a37fbc0c63adf0bc3ca88  gcc/testsuite/gcc.dg/vect/bb-slp-pr54400.c
  5472e7bf338627077f4e6ce8cce9944e  gcc/testsuite/gcc.dg/vect/bb-slp-pr58135.c
! 416b7cfbbbbca3664b53c4942dfd6f6d  gcc/testsuite/gcc.dg/vect/bb-slp-pr65935.c
  a3000cd864ecf8f7a3037fec3f0ac388  gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c
  1d3aaf7003b6ad6834ed135c4c749cac  gcc/testsuite/gcc.dg/vect/bb-slp-pr78205.c
  7bde18f16db8ba76291d8ca502888f3e  gcc/testsuite/gcc.dg/vect/bb-slp-pr80705.c
*************** ab2962fd8f373b0a0c8d0860a206f028  gcc/te
*** 45966,45972 ****
  b11be106da086e84c384da3d62609fc6  gcc/testsuite/gcc.dg/vect/bb-slp-pr97633.c
  b13772a83ca2a950ecc3e55db4aa95f8  gcc/testsuite/gcc.dg/vect/bb-slp-pr97650.c
  a390ab58e13441907492a6139c101ee1  gcc/testsuite/gcc.dg/vect/bb-slp-pr97706.c
! 2e6814a1dc772191ab299c06289af371  gcc/testsuite/gcc.dg/vect/bb-slp-pr97709.c
  9257b26931e51ae5eba37c850fb84046  gcc/testsuite/gcc.dg/vect/bb-slp-pr97732.c
  88064d22a3df086ef138637cd76b9322  gcc/testsuite/gcc.dg/vect/bb-slp-pr97746.c
  0484d6c983b701e29c113b1019b353fc  gcc/testsuite/gcc.dg/vect/bb-slp-pr98137.c
--- 47963,47969 ----
  b11be106da086e84c384da3d62609fc6  gcc/testsuite/gcc.dg/vect/bb-slp-pr97633.c
  b13772a83ca2a950ecc3e55db4aa95f8  gcc/testsuite/gcc.dg/vect/bb-slp-pr97650.c
  a390ab58e13441907492a6139c101ee1  gcc/testsuite/gcc.dg/vect/bb-slp-pr97706.c
! e49ed0be3bc897c4046ed5bef93a1b9d  gcc/testsuite/gcc.dg/vect/bb-slp-pr97709.c
  9257b26931e51ae5eba37c850fb84046  gcc/testsuite/gcc.dg/vect/bb-slp-pr97732.c
  88064d22a3df086ef138637cd76b9322  gcc/testsuite/gcc.dg/vect/bb-slp-pr97746.c
  0484d6c983b701e29c113b1019b353fc  gcc/testsuite/gcc.dg/vect/bb-slp-pr98137.c
*************** f458c4bd5bf3886b45d0ca62da2ba1ff  gcc/te
*** 45978,45988 ****
  76ca89dbf04b0da54f93449816c40139  gcc/testsuite/gcc.dg/vect/bb-slp-subgroups-1.c
  6f206346ceb24c5ac1795b0003f74f55  gcc/testsuite/gcc.dg/vect/bb-slp-subgroups-2.c
  f511c5e3bf05877e92e7c9fb18acc107  gcc/testsuite/gcc.dg/vect/bb-slp-subgroups-3.c
- d89050f03b37a25cc5ba09396bd2e9b0  gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-byte.c
  303f98baa99ca71b360bb5b490edf989  gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-int.c
  4de1e012f6eb5ea19ca369f6fcf4e1c5  gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-long.c
  211bc477e9c121e47269e80a88557f74  gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-short.c
- c4f08815e53af41573a08e3ab4cea90e  gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-byte.c
  429950609915964e7a3cd614c65e710e  gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-int.c
  335b50f9d0620fef3b559405e2765383  gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-long.c
  68b0f033eb8e82ab065c3397e55b80d8  gcc/testsuite/gcc.dg/vect/complex/bb-slp-complex-add-pattern-unsigned-short.c
--- 47975,47983 ----
*************** e7e998e227aa0d1f54e5abb40415b355  gcc/te
*** 45999,46005 ****
  315119e00b97000fb6f371f5ae9b2515  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c
  1348c7c393221492d645b88dd87e4c90  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c
  37c05e5942cf108df1659e4ccfbe29c4  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c
! 511f2255c03b2993d7e76739c0890a7d  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c
  092651583077a4d3f14105ecd53b0042  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c
  0532e123a1e9bee598bcc9fe42fb8b7f  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c
  071e3059211d80112c0ec46775e51fb0  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c
--- 47994,48000 ----
  315119e00b97000fb6f371f5ae9b2515  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-half-float.c
  1348c7c393221492d645b88dd87e4c90  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-double.c
  37c05e5942cf108df1659e4ccfbe29c4  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-float.c
! ba621e253c3a6a4dd667ac55ec84a2e0  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-pattern-half-float.c
  092651583077a4d3f14105ecd53b0042  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-double.c
  0532e123a1e9bee598bcc9fe42fb8b7f  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-float.c
  071e3059211d80112c0ec46775e51fb0  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mla-half-float.c
*************** e7e998e227aa0d1f54e5abb40415b355  gcc/te
*** 46007,46029 ****
  b125fd3af935d5cc8ec4d8330aefa9d8  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c
  f625432e6319d231e8b25325f3b636c2  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c
  04c2b7329d6c8e7bf861f74e0c5255b4  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c
! 5c35a2bc9c358285f18287843b89c582  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c
  c8c88ecb3145b5ae379a4eaf565e7867  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c
! efd6bea5941d7cfcb94db14adf7ae6bb  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-double.c
! 1e91a7d1fce917497566671d76c7cbe0  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-float.c
! ddbb4ecae39d3ca6c8aac4a137b1703b  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-half-float.c
! 70ea9a5f6beb0a0593de856e5c5fca71  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c
! 2631aacfc2a544fb0b74a09a2593afd9  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c
! d8462c356de5e1452d1517be6b6f7f4e  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c
  7c5f3f1180d421a5ac299c84526ea6d2  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-double.c
  323cabdbf2c12f8d5d69a4250f10d17e  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-float.c
! 083b6f004442a2284ec75fb6f17ebda3  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-half-float.c
! 9c918cf0b4d739de71c8dea14ea0025c  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-double.c
! 0c910864a9648681bf5c27a5a5043d0f  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-float.c
! 8e9cc748b0590d6e56b7dc7fd05aa8d5  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-half-float.c
! 7c668ea9d5a3187193b0519e54ae32e9  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-double.c
! ae013061562cfc8fe6a899a1496e7a72  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-float.c
! e004eb218c0be56a2e2702d215c4211f  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-half-float.c
  4e1876202a0dc92b35499bdd138583d4  gcc/testsuite/gcc.dg/vect/complex/pr102819-1.c
  ccf39ed31245c0fb65f9c01c6e5d3b84  gcc/testsuite/gcc.dg/vect/complex/pr102819-2.c
  225c29797a1db0d4d58b8bd12cfee997  gcc/testsuite/gcc.dg/vect/complex/pr102819-3.c
--- 48002,48024 ----
  b125fd3af935d5cc8ec4d8330aefa9d8  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-float.c
  f625432e6319d231e8b25325f3b636c2  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mls-half-float.c
  04c2b7329d6c8e7bf861f74e0c5255b4  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-double.c
! f364b6fd72c7c2b91e119829fcc3d492  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-float.c
  c8c88ecb3145b5ae379a4eaf565e7867  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-mul-half-float.c
! 6701638eb7c412a219993a3e49351040  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-double.c
! dc9ce49dcc6631e2eda8610ab7dcb050  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-float.c
! b3853ba38a4c7bbd8e1e0644d0004316  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-half-float.c
! 17681470257f21a1741d290027ee6320  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-double.c
! 02549823c408c283a8ff6eeb91e102ae  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-float.c
! 13f53490d24bc0b038b9cdc4de9616b5  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-add-pattern-half-float.c
  7c5f3f1180d421a5ac299c84526ea6d2  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-double.c
  323cabdbf2c12f8d5d69a4250f10d17e  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-float.c
! 9c372bfd4e5a508d067815909d5f9d55  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mla-half-float.c
! 25abb662796a29992142f21fc0d3d9f3  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-double.c
! d3819ea23183eca5ea9920fd474335c8  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-float.c
! a38981c4525e7d12ba2b0d45a3236eb0  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mls-half-float.c
! 203e39f86592c0300fdd78e06d9dee68  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-double.c
! f00ea04f68192109f0a5aaa6a35ce073  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-float.c
! 0943cd3b1d1f46db937e77679a2b9a76  gcc/testsuite/gcc.dg/vect/complex/fast-math-complex-mul-half-float.c
  4e1876202a0dc92b35499bdd138583d4  gcc/testsuite/gcc.dg/vect/complex/pr102819-1.c
  ccf39ed31245c0fb65f9c01c6e5d3b84  gcc/testsuite/gcc.dg/vect/complex/pr102819-2.c
  225c29797a1db0d4d58b8bd12cfee997  gcc/testsuite/gcc.dg/vect/complex/pr102819-3.c
*************** de7dd1e584604b7bdea2dc13b43ddc14  gcc/te
*** 46047,46061 ****
  f460536507001609ab3aa91df1c958aa  gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-33.c
  e8ac43ab8cf8cbf7bfd8167cf04e3b0e  gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-68.c
  460815bb26ae1f6c220e23de56a2d3fd  gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-reduc-1char.c
! 7e3d1adc4368e66d61961b0c7499d5b3  gcc/testsuite/gcc.dg/vect/costmodel/i386/i386-costmodel-vect.exp
! a9cb28b1e884170acbaee9d79bf34ff8  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a-pr63175.c
  ffaf8702a4fc3b142c8b1a931c153dae  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a.c
  d25dc6b156dd43d1cf5e1224a3abb151  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-fast-math-vect-pr29925.c
  bd8562e8bd66700ee1114f70cbcff47e  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-pr37194.c
  2926d53e5e3391b93ff4c3fdf9b102c4  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c
  a9e7ff0eac965a3c7cbff3f3be3fdf77  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-33.c
  50493cebd3df3a5e504c890169d57496  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-34.c
! 22ccbb5f325080c594838c3093ae8c53  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31a.c
  ce405318474685a1fe34d771dea2f82e  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31b.c
  a3fbdcd8880d2b38ef90333ee846cfb0  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31c.c
  f5d642efddbd554383cbaa9e19b68090  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-33.c
--- 48042,48056 ----
  f460536507001609ab3aa91df1c958aa  gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-33.c
  e8ac43ab8cf8cbf7bfd8167cf04e3b0e  gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-68.c
  460815bb26ae1f6c220e23de56a2d3fd  gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-reduc-1char.c
! aa82d81537516146583eb0052b18cbc4  gcc/testsuite/gcc.dg/vect/costmodel/i386/i386-costmodel-vect.exp
! f8de521e4a7696891de446aa77201098  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a-pr63175.c
  ffaf8702a4fc3b142c8b1a931c153dae  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a.c
  d25dc6b156dd43d1cf5e1224a3abb151  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-fast-math-vect-pr29925.c
  bd8562e8bd66700ee1114f70cbcff47e  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-pr37194.c
  2926d53e5e3391b93ff4c3fdf9b102c4  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-12.c
  a9e7ff0eac965a3c7cbff3f3be3fdf77  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-33.c
  50493cebd3df3a5e504c890169d57496  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-slp-34.c
! 08e1fba7264d20e5d5a68eb9e3d96238  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31a.c
  ce405318474685a1fe34d771dea2f82e  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31b.c
  a3fbdcd8880d2b38ef90333ee846cfb0  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31c.c
  f5d642efddbd554383cbaa9e19b68090  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-33.c
*************** d7e4207d0458ef7d643b113a4d3b67be  gcc/te
*** 46067,46075 ****
  8f22ac8bc29002f40901ab1712356e3f  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76c.c
  9ac66f90cde8ee4865e6773bc02157e1  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-outer-fir.c
  a0cfa86bcfadab7dd7bfdc45d44a30ee  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-reduc-1char.c
! d423408117e9f1b0db01a595c8a2bd78  gcc/testsuite/gcc.dg/vect/costmodel/ppc/ppc-costmodel-vect.exp
  782f0b41429f222276333f508cb8f6be  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-alignpeel.c
  05fc220f1ddbdb4d47d859b5d07869e2  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-fast-math-vect-pr29925.c
  adf307e0a12bcc8d31b97d83adb3e848  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr30843.c
  ec5c6a4d5052e20e84aa5eb95742d36f  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr64909.c
  e094ee1a12f158fa8be372b1974af637  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr69297.c
--- 48062,48074 ----
  8f22ac8bc29002f40901ab1712356e3f  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76c.c
  9ac66f90cde8ee4865e6773bc02157e1  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-outer-fir.c
  a0cfa86bcfadab7dd7bfdc45d44a30ee  gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-reduc-1char.c
! 2884e9d98d5e183e6323e475a90a0869  gcc/testsuite/gcc.dg/vect/costmodel/ppc/ppc-costmodel-vect.exp
  782f0b41429f222276333f508cb8f6be  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-alignpeel.c
  05fc220f1ddbdb4d47d859b5d07869e2  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-fast-math-vect-pr29925.c
+ 1cdf0d7e4e3b665e1cc3792b6ab6e912  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr104582-1.c
+ 78ebcf1d0afabda95c3f6f95505977dc  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr104582-2.c
+ 45453c03b2d83b8c253a510f6a157bdd  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr104582-3.c
+ 220ca37927f70593ad75a493a099ae58  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr104582-4.c
  adf307e0a12bcc8d31b97d83adb3e848  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr30843.c
  ec5c6a4d5052e20e84aa5eb95742d36f  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr64909.c
  e094ee1a12f158fa8be372b1974af637  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-pr69297.c
*************** e8ac43ab8cf8cbf7bfd8167cf04e3b0e  gcc/te
*** 46081,46087 ****
  460815bb26ae1f6c220e23de56a2d3fd  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-reduc-1char.c
  f6fdadd0ea9395aed541bf9b57b73780  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-slp-2.c
  8fa1df6d327c2eef9e16ea686cbebd42  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-slp.c
! 973ee18b0bee2440e33387ed01d346fc  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/x86_64-costmodel-vect.exp
  82db66d96715b83f7de0d05c532b64ac  gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-1.c
  c7b2ca703aba051b9a31eb848cd6195e  gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-2.c
  dba914eb2c6896f87a7a3bb3e0c40c08  gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-3.c
--- 48080,48086 ----
  460815bb26ae1f6c220e23de56a2d3fd  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-reduc-1char.c
  f6fdadd0ea9395aed541bf9b57b73780  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-slp-2.c
  8fa1df6d327c2eef9e16ea686cbebd42  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-slp.c
! 0c98744d7d2ff3859ec2cc7bf6df156d  gcc/testsuite/gcc.dg/vect/costmodel/x86_64/x86_64-costmodel-vect.exp
  82db66d96715b83f7de0d05c532b64ac  gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-1.c
  c7b2ca703aba051b9a31eb848cd6195e  gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-2.c
  dba914eb2c6896f87a7a3bb3e0c40c08  gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-3.c
*************** f098c26c1e0188d733a3992b19505255  gcc/te
*** 46200,46212 ****
  d122ac18b4a3ae4813e46562ff41d564  gcc/testsuite/gcc.dg/vect/nodump-forwprop-22.c
  ac90ad8f4383592387ff86cb8dbd78ce  gcc/testsuite/gcc.dg/vect/nodump-pr23073.c
  8bb8b8c5a5dd310d79c2ef7142ad2432  gcc/testsuite/gcc.dg/vect/nodump-vect-opt-info-1.c
! 4576ca6b9e8f8de6acab6df0d8dc72ea  gcc/testsuite/gcc.dg/vect/nodump-vect-opt-info-2.c
  bd6686ddac4dec394f0f0af136fe8012  gcc/testsuite/gcc.dg/vect/pr101445.c
  ae8b9fa809bc0868516d373dbc070b85  gcc/testsuite/gcc.dg/vect/pr101505.c
  6893aed7299a121a69eb5b9deac04ae4  gcc/testsuite/gcc.dg/vect/pr102046.c
  b02b62e31de9fe3f178db0e94281db9e  gcc/testsuite/gcc.dg/vect/pr103544.c
  5b80820316db69308b9fa48a7a5d642b  gcc/testsuite/gcc.dg/vect/pr103864.c
  1e8e221275bfa8e8dc66a37d14f07f32  gcc/testsuite/gcc.dg/vect/pr104782.c
  42d48d2ecd5682545b12ac42f879a831  gcc/testsuite/gcc.dg/vect/pr16105.c
  231c99dba9475fe09525bbf6f4374124  gcc/testsuite/gcc.dg/vect/pr18308.c
  3aed50f38aa86c4915d6e4b3cef91287  gcc/testsuite/gcc.dg/vect/pr18400.c
--- 48199,48233 ----
  d122ac18b4a3ae4813e46562ff41d564  gcc/testsuite/gcc.dg/vect/nodump-forwprop-22.c
  ac90ad8f4383592387ff86cb8dbd78ce  gcc/testsuite/gcc.dg/vect/nodump-pr23073.c
  8bb8b8c5a5dd310d79c2ef7142ad2432  gcc/testsuite/gcc.dg/vect/nodump-vect-opt-info-1.c
! 3ecab99ec0e71cbd846419df9b53e360  gcc/testsuite/gcc.dg/vect/nodump-vect-opt-info-2.c
! eef9d53f7fc64f5bf484207cbabd7414  gcc/testsuite/gcc.dg/vect/pr101145.c
! 3b10b998010f5d41be4ff11dca903549  gcc/testsuite/gcc.dg/vect/pr101145.inc
! 25482ceb1124b6cb3b0b4a429c5903c3  gcc/testsuite/gcc.dg/vect/pr101145_1.c
! 934d5ab38d163ec43088d96a3e867322  gcc/testsuite/gcc.dg/vect/pr101145_2.c
! e31e77a43384ba3824812ab7b9248617  gcc/testsuite/gcc.dg/vect/pr101145_3.c
! 7d3c5e393206dac2719dc826713d3f7e  gcc/testsuite/gcc.dg/vect/pr101145inf.c
! d5f2105742a211cdf1e93edf3df752b5  gcc/testsuite/gcc.dg/vect/pr101145inf.inc
! 6f75b244aeadf47d581f9c4a8ed3b7ef  gcc/testsuite/gcc.dg/vect/pr101145inf_1.c
  bd6686ddac4dec394f0f0af136fe8012  gcc/testsuite/gcc.dg/vect/pr101445.c
  ae8b9fa809bc0868516d373dbc070b85  gcc/testsuite/gcc.dg/vect/pr101505.c
  6893aed7299a121a69eb5b9deac04ae4  gcc/testsuite/gcc.dg/vect/pr102046.c
+ 859bb5bf4a83258b4c99d26be93ed965  gcc/testsuite/gcc.dg/vect/pr102318.c
+ ade348e4de25df9c33207531cf5e1270  gcc/testsuite/gcc.dg/vect/pr102832.c
+ dcd21bad9a0ccaa6b61cc26ae10498ab  gcc/testsuite/gcc.dg/vect/pr103253.c
+ 3027554c675b698964371551d4c242aa  gcc/testsuite/gcc.dg/vect/pr103494.c
+ 167997ae7fe74f3c29652d5e227a608e  gcc/testsuite/gcc.dg/vect/pr103517.c
  b02b62e31de9fe3f178db0e94281db9e  gcc/testsuite/gcc.dg/vect/pr103544.c
+ f358711d4f8108113a44ec088145255a  gcc/testsuite/gcc.dg/vect/pr103581.c
+ 2b06fc8e5822751c29cc7d2a9370c317  gcc/testsuite/gcc.dg/vect/pr103744-1.c
+ 8a77c6f0f3b5e4794037b85c74246d47  gcc/testsuite/gcc.dg/vect/pr103744-2.c
+ fd7e1b94d8c4315a2364eebdd0c788df  gcc/testsuite/gcc.dg/vect/pr103761.c
  5b80820316db69308b9fa48a7a5d642b  gcc/testsuite/gcc.dg/vect/pr103864.c
+ 0b8307de60b9a1e2b8798ec8a7ad4ad5  gcc/testsuite/gcc.dg/vect/pr104112-1.c
+ 860f8bb39577a05db59d8465da979c26  gcc/testsuite/gcc.dg/vect/pr104112-2.c
+ b53f19c5cce29955511b5d817d2f0418  gcc/testsuite/gcc.dg/vect/pr104152.c
+ 793fae35b1a1e920435aac3954c23d69  gcc/testsuite/gcc.dg/vect/pr104445.c
  1e8e221275bfa8e8dc66a37d14f07f32  gcc/testsuite/gcc.dg/vect/pr104782.c
+ a8f46ae0bf8ccd4ca742a85a90e2d052  gcc/testsuite/gcc.dg/vect/pr105219.c
  42d48d2ecd5682545b12ac42f879a831  gcc/testsuite/gcc.dg/vect/pr16105.c
  231c99dba9475fe09525bbf6f4374124  gcc/testsuite/gcc.dg/vect/pr18308.c
  3aed50f38aa86c4915d6e4b3cef91287  gcc/testsuite/gcc.dg/vect/pr18400.c
*************** f2e384b79e71e99d03856813309aa20e  gcc/te
*** 46254,46259 ****
--- 48275,48281 ----
  2fddacf1bdf2f2af653ce8577f6b0c31  gcc/testsuite/gcc.dg/vect/pr33866.c
  826738aee8939e20001cedc33a066356  gcc/testsuite/gcc.dg/vect/pr33953.c
  5f35540decc25ee08577e713fc035432  gcc/testsuite/gcc.dg/vect/pr34005.c
+ a46ff63fc3b27434f0db611d79725ce2  gcc/testsuite/gcc.dg/vect/pr34195.c
  532c718a12954eae2d0db8ddd9a342b0  gcc/testsuite/gcc.dg/vect/pr34407.c
  55a2c3ec8d5317497f7ec49872d77f53  gcc/testsuite/gcc.dg/vect/pr34591.c
  076894cab1127f499c660888eba6f8d6  gcc/testsuite/gcc.dg/vect/pr36228.c
*************** cb2f1722ae6064430b5f67fd9b5fd2d3  gcc/te
*** 46330,46336 ****
  4ee27a4d1d278002b4f2e9f141749960  gcc/testsuite/gcc.dg/vect/pr53773.c
  ba9c7edb5329e6eb06c04e2546f66c01  gcc/testsuite/gcc.dg/vect/pr55857-1.c
  1713687ed4d808a579a447a3b0ef56c2  gcc/testsuite/gcc.dg/vect/pr55857-2.c
! 4ad6b1cae3ea267a23783263222dbb1a  gcc/testsuite/gcc.dg/vect/pr56541.c
  7004dde3ec81faec36b02335a90a79d6  gcc/testsuite/gcc.dg/vect/pr56625.c
  63e4af31dd039b5aeb9c3d6467a27adc  gcc/testsuite/gcc.dg/vect/pr56695.c
  61af94d2d4187dd8541079986f51397f  gcc/testsuite/gcc.dg/vect/pr56787.c
--- 48352,48358 ----
  4ee27a4d1d278002b4f2e9f141749960  gcc/testsuite/gcc.dg/vect/pr53773.c
  ba9c7edb5329e6eb06c04e2546f66c01  gcc/testsuite/gcc.dg/vect/pr55857-1.c
  1713687ed4d808a579a447a3b0ef56c2  gcc/testsuite/gcc.dg/vect/pr55857-2.c
! d9240778c89dcaa2d4955586182f7c91  gcc/testsuite/gcc.dg/vect/pr56541.c
  7004dde3ec81faec36b02335a90a79d6  gcc/testsuite/gcc.dg/vect/pr56625.c
  63e4af31dd039b5aeb9c3d6467a27adc  gcc/testsuite/gcc.dg/vect/pr56695.c
  61af94d2d4187dd8541079986f51397f  gcc/testsuite/gcc.dg/vect/pr56787.c
*************** ec3365bba00d1cc2cd3969c55351e80c  gcc/te
*** 46386,46391 ****
--- 48408,48414 ----
  c98bdb23f463d98ed1f37c2088b11798  gcc/testsuite/gcc.dg/vect/pr64495.c
  36b8af4238d302a0ce43f1cb75dfda35  gcc/testsuite/gcc.dg/vect/pr64829.c
  02665d8d0016645ae7a66642793cd124  gcc/testsuite/gcc.dg/vect/pr64844.c
+ 98e32e0f67ea33564a8131db10fcc2d1  gcc/testsuite/gcc.dg/vect/pr65206.c
  6dc746c14c5e0a5a989ccf84fcdfda0d  gcc/testsuite/gcc.dg/vect/pr65310.c
  9956a4c3d2d612eab06cfc8981da6967  gcc/testsuite/gcc.dg/vect/pr65494.c
  227e8aad63905e3d6d110cef1da40ead  gcc/testsuite/gcc.dg/vect/pr65518.c
*************** c767283ec3596bb0dba0d999784e7fff  gcc/te
*** 46433,46439 ****
  7a332ec10658dfabe1c3011749239c5c  gcc/testsuite/gcc.dg/vect/pr70354-1.c
  6effacda352151dd8ad3c1f3ebedb311  gcc/testsuite/gcc.dg/vect/pr70354-2.c
  52afaa46e6365b9bca043823dd5c153c  gcc/testsuite/gcc.dg/vect/pr71259.c
! 385f09f819cea008ca9ba276640666fa  gcc/testsuite/gcc.dg/vect/pr71264.c
  4d7bde9d01cc446108e79c91758c884d  gcc/testsuite/gcc.dg/vect/pr71407.c
  ccf58a30dd929d85895b8d85741a71ea  gcc/testsuite/gcc.dg/vect/pr71416-1.c
  cc35147435b2efa4e7d217223b42d740  gcc/testsuite/gcc.dg/vect/pr71416-2.c
--- 48456,48462 ----
  7a332ec10658dfabe1c3011749239c5c  gcc/testsuite/gcc.dg/vect/pr70354-1.c
  6effacda352151dd8ad3c1f3ebedb311  gcc/testsuite/gcc.dg/vect/pr70354-2.c
  52afaa46e6365b9bca043823dd5c153c  gcc/testsuite/gcc.dg/vect/pr71259.c
! aa306d1d6cdfc3b73368aa52a566db5c  gcc/testsuite/gcc.dg/vect/pr71264.c
  4d7bde9d01cc446108e79c91758c884d  gcc/testsuite/gcc.dg/vect/pr71407.c
  ccf58a30dd929d85895b8d85741a71ea  gcc/testsuite/gcc.dg/vect/pr71416-1.c
  cc35147435b2efa4e7d217223b42d740  gcc/testsuite/gcc.dg/vect/pr71416-2.c
*************** c4f04d47e0c0be544b6ac473f0645e04  gcc/te
*** 46462,46467 ****
--- 48485,48491 ----
  654137c7b0d9e65431583093a90f0b8e  gcc/testsuite/gcc.dg/vect/pr80928.c
  0ddb632fe10f4e7596ddf6a2ee402259  gcc/testsuite/gcc.dg/vect/pr81082.c
  4620e86ca949db6bb330effa6a9eb9a2  gcc/testsuite/gcc.dg/vect/pr81136.c
+ a60d20408d305ea4b4f537d848682d4d  gcc/testsuite/gcc.dg/vect/pr81196-2.c
  3f00aa8bd4647b819ebad8742aae55ff  gcc/testsuite/gcc.dg/vect/pr81196.c
  9f6e75e9dbf6ab44b15e511f1ec5060c  gcc/testsuite/gcc.dg/vect/pr81410.c
  5d2ab81a9406e2000bbd06f6aba15b52  gcc/testsuite/gcc.dg/vect/pr81633.c
*************** e14263baf37160b7fe78dcea65251c62  gcc/te
*** 46478,46483 ****
--- 48502,48508 ----
  4dfe55aaa6446927bd5a58f3bea0047a  gcc/testsuite/gcc.dg/vect/pr83914.c
  09dd6ecaae68256415a0ac27b7b744d6  gcc/testsuite/gcc.dg/vect/pr83965-2.c
  ee4412d8b1a114aaf818617f4b0e4ef6  gcc/testsuite/gcc.dg/vect/pr83965.c
+ bb394015eb47365049979112f1fef4e1  gcc/testsuite/gcc.dg/vect/pr84201.c
  b83c7628f6a3196a7493cd61645c2322  gcc/testsuite/gcc.dg/vect/pr84265.c
  3ccfddb01fb0c35f130b75cb184351cb  gcc/testsuite/gcc.dg/vect/pr84357.c
  757457cc7b786e3635e3b333e13494f4  gcc/testsuite/gcc.dg/vect/pr84419.c
*************** a0e548875f044f3b51270f1185a1fee3  gcc/te
*** 46571,46577 ****
  5547564420f3d37eea60b06c9de2674f  gcc/testsuite/gcc.dg/vect/pr97730.c
  80b007c45c37817c71dfe4f531486d33  gcc/testsuite/gcc.dg/vect/pr97753.c
  de446341563e3d64852efdd708c73af4  gcc/testsuite/gcc.dg/vect/pr97760.c
! e1a8084f1252d460768629201b048a30  gcc/testsuite/gcc.dg/vect/pr97769.c
  9fe2fbd0b1b3ca85c2b7f3108913ca1f  gcc/testsuite/gcc.dg/vect/pr97835.c
  5b0928674dd82fb6b5b0394b33cbc1a1  gcc/testsuite/gcc.dg/vect/pr97838.c
  ed8e1d716e602e779351272808949150  gcc/testsuite/gcc.dg/vect/pr97929.c
--- 48596,48606 ----
  5547564420f3d37eea60b06c9de2674f  gcc/testsuite/gcc.dg/vect/pr97730.c
  80b007c45c37817c71dfe4f531486d33  gcc/testsuite/gcc.dg/vect/pr97753.c
  de446341563e3d64852efdd708c73af4  gcc/testsuite/gcc.dg/vect/pr97760.c
! dfdc43a72483e576cda9ee907710de6d  gcc/testsuite/gcc.dg/vect/pr97769.c
! bb0da8ca0d65ffa68b7178e78ca62cb5  gcc/testsuite/gcc.dg/vect/pr97832-1.c
! 40454d3875750a88cad24bc292a71ebf  gcc/testsuite/gcc.dg/vect/pr97832-2.c
! bb12e628a0ce52cb4c7a107277f6afe6  gcc/testsuite/gcc.dg/vect/pr97832-3.c
! ad723172eccf766bd8e191661e67befb  gcc/testsuite/gcc.dg/vect/pr97832-4.c
  9fe2fbd0b1b3ca85c2b7f3108913ca1f  gcc/testsuite/gcc.dg/vect/pr97835.c
  5b0928674dd82fb6b5b0394b33cbc1a1  gcc/testsuite/gcc.dg/vect/pr97838.c
  ed8e1d716e602e779351272808949150  gcc/testsuite/gcc.dg/vect/pr97929.c
*************** dc519b432ee67d22f382f436de6b049d  gcc/te
*** 46583,46589 ****
  4afc8efba1f31b432e831f101ed6f173  gcc/testsuite/gcc.dg/vect/pr98560-2.c
  c5cc63b339d4d79237ce6ae9795568aa  gcc/testsuite/gcc.dg/vect/pr98674.c
  ecf30a3d5633aea4fdce036a11b8e64f  gcc/testsuite/gcc.dg/vect/pr98848.c
! 6873a0794350ba72a70cd79260534937  gcc/testsuite/gcc.dg/vect/pr99102.c
  1906ecaca4ed41844bbfad6d9289b6e2  gcc/testsuite/gcc.dg/vect/pr99253.c
  24dbffd92c63e8683ef23b5143e0d607  gcc/testsuite/gcc.dg/vect/pr99540.c
  aefd4bda7e5d3e855da2011fb58b8c47  gcc/testsuite/gcc.dg/vect/pr99856.c
--- 48612,48618 ----
  4afc8efba1f31b432e831f101ed6f173  gcc/testsuite/gcc.dg/vect/pr98560-2.c
  c5cc63b339d4d79237ce6ae9795568aa  gcc/testsuite/gcc.dg/vect/pr98674.c
  ecf30a3d5633aea4fdce036a11b8e64f  gcc/testsuite/gcc.dg/vect/pr98848.c
! 32439212bff1056b7d07e9de23c2f3df  gcc/testsuite/gcc.dg/vect/pr99102.c
  1906ecaca4ed41844bbfad6d9289b6e2  gcc/testsuite/gcc.dg/vect/pr99253.c
  24dbffd92c63e8683ef23b5143e0d607  gcc/testsuite/gcc.dg/vect/pr99540.c
  aefd4bda7e5d3e855da2011fb58b8c47  gcc/testsuite/gcc.dg/vect/pr99856.c
*************** feeec17385c2095429ad132bd085a67b  gcc/te
*** 46609,46624 ****
  107b703b7e1442d67b0d3d6345c9655e  gcc/testsuite/gcc.dg/vect/slp-19c.c
  d7fccaa610ea11b1a5f271dc2f429653  gcc/testsuite/gcc.dg/vect/slp-2.c
  8ebb5ddb99a2da9a195e7369c7f9b513  gcc/testsuite/gcc.dg/vect/slp-20.c
! bb554f4a3c5b2dc9bbd7fd8420fdbfd5  gcc/testsuite/gcc.dg/vect/slp-21.c
  36a51711f52dc82c7546d284e2f6904a  gcc/testsuite/gcc.dg/vect/slp-22.c
  986d9befacef0ad372eba8123772baa8  gcc/testsuite/gcc.dg/vect/slp-23.c
  c9166044854a8e3d87de33160660cfbd  gcc/testsuite/gcc.dg/vect/slp-24-big-array.c
  e5e1221b0f3db24e3f3bf9735cf578a4  gcc/testsuite/gcc.dg/vect/slp-24.c
  66c9a375cd69cdb8d5da80a2527b8641  gcc/testsuite/gcc.dg/vect/slp-25.c
  140aa4e68ff44957bad070a78e984763  gcc/testsuite/gcc.dg/vect/slp-26.c
! 30f67a86cc78aee3647b6369c43623a2  gcc/testsuite/gcc.dg/vect/slp-28.c
  620f25efe383cf052fc165488dc172ac  gcc/testsuite/gcc.dg/vect/slp-3-big-array.c
! 9705de3407a6a4397a70e55197b417b3  gcc/testsuite/gcc.dg/vect/slp-3.c
  f1371cb78bd8406146bf5d3be6ca8a13  gcc/testsuite/gcc.dg/vect/slp-33.c
  a8ca70fc391abd3a49dd54f752958fa2  gcc/testsuite/gcc.dg/vect/slp-34-big-array.c
  a5429ab06c5986c2e0271c3a6f4c6cf0  gcc/testsuite/gcc.dg/vect/slp-34.c
--- 48638,48653 ----
  107b703b7e1442d67b0d3d6345c9655e  gcc/testsuite/gcc.dg/vect/slp-19c.c
  d7fccaa610ea11b1a5f271dc2f429653  gcc/testsuite/gcc.dg/vect/slp-2.c
  8ebb5ddb99a2da9a195e7369c7f9b513  gcc/testsuite/gcc.dg/vect/slp-20.c
! 9487bec6ff5dce01695f9c50f3fffc2e  gcc/testsuite/gcc.dg/vect/slp-21.c
  36a51711f52dc82c7546d284e2f6904a  gcc/testsuite/gcc.dg/vect/slp-22.c
  986d9befacef0ad372eba8123772baa8  gcc/testsuite/gcc.dg/vect/slp-23.c
  c9166044854a8e3d87de33160660cfbd  gcc/testsuite/gcc.dg/vect/slp-24-big-array.c
  e5e1221b0f3db24e3f3bf9735cf578a4  gcc/testsuite/gcc.dg/vect/slp-24.c
  66c9a375cd69cdb8d5da80a2527b8641  gcc/testsuite/gcc.dg/vect/slp-25.c
  140aa4e68ff44957bad070a78e984763  gcc/testsuite/gcc.dg/vect/slp-26.c
! 40b78b95123cd9af1a6de9646a0e2d0e  gcc/testsuite/gcc.dg/vect/slp-28.c
  620f25efe383cf052fc165488dc172ac  gcc/testsuite/gcc.dg/vect/slp-3-big-array.c
! 4ba28475c657da51f041add82c2f4b91  gcc/testsuite/gcc.dg/vect/slp-3.c
  f1371cb78bd8406146bf5d3be6ca8a13  gcc/testsuite/gcc.dg/vect/slp-33.c
  a8ca70fc391abd3a49dd54f752958fa2  gcc/testsuite/gcc.dg/vect/slp-34-big-array.c
  a5429ab06c5986c2e0271c3a6f4c6cf0  gcc/testsuite/gcc.dg/vect/slp-34.c
*************** ca8d8277a6f49e408bef068a9c40deb4  gcc/te
*** 46639,46644 ****
--- 48668,48674 ----
  a5b5fe21d953b3cf402506aa57c3d065  gcc/testsuite/gcc.dg/vect/slp-48.c
  d411c01b4877554576a690ad75642c9c  gcc/testsuite/gcc.dg/vect/slp-49.c
  94cab958cbf9ae8fce13bdd8c3b74a6d  gcc/testsuite/gcc.dg/vect/slp-5.c
+ 9bcd40afd8d4d59a592c847a0e18238c  gcc/testsuite/gcc.dg/vect/slp-50.c
  af23113d71fb18e642c9a7a2b9f9c0fd  gcc/testsuite/gcc.dg/vect/slp-6.c
  b3d2fff99fdc9c33e68f2ba4a3b8955b  gcc/testsuite/gcc.dg/vect/slp-7.c
  095b15e60c3303038cf50c94ca50d6dd  gcc/testsuite/gcc.dg/vect/slp-8.c
*************** e9bb13be425e14161749170fa87ec0f6  gcc/te
*** 46674,46680 ****
  ed9aee5045ea1db454e98a0a75bb0595  gcc/testsuite/gcc.dg/vect/slp-perm-6.c
  46764cca553d4fe0718067fb18004da4  gcc/testsuite/gcc.dg/vect/slp-perm-7.c
  12acbe40978aea85a359e0398284e3c2  gcc/testsuite/gcc.dg/vect/slp-perm-8.c
! 2c06db9e17637e0960463ba616b91c6a  gcc/testsuite/gcc.dg/vect/slp-perm-9.c
  15dec799e753a2ad77b96874b96dc1c8  gcc/testsuite/gcc.dg/vect/slp-reduc-1.c
  e33d9305ff87bf0b76410ea5729955bf  gcc/testsuite/gcc.dg/vect/slp-reduc-10a.c
  c4e2f923d33c5b7b33949455e9f92e65  gcc/testsuite/gcc.dg/vect/slp-reduc-10b.c
--- 48704,48710 ----
  ed9aee5045ea1db454e98a0a75bb0595  gcc/testsuite/gcc.dg/vect/slp-perm-6.c
  46764cca553d4fe0718067fb18004da4  gcc/testsuite/gcc.dg/vect/slp-perm-7.c
  12acbe40978aea85a359e0398284e3c2  gcc/testsuite/gcc.dg/vect/slp-perm-8.c
! bc336869608effbadcb614ac30fd0f2c  gcc/testsuite/gcc.dg/vect/slp-perm-9.c
  15dec799e753a2ad77b96874b96dc1c8  gcc/testsuite/gcc.dg/vect/slp-reduc-1.c
  e33d9305ff87bf0b76410ea5729955bf  gcc/testsuite/gcc.dg/vect/slp-reduc-10a.c
  c4e2f923d33c5b7b33949455e9f92e65  gcc/testsuite/gcc.dg/vect/slp-reduc-10b.c
*************** b959bf9c495c51757df862405bcd0437  gcc/te
*** 46697,46702 ****
--- 48727,48885 ----
  d1b21b9400153596e0d058bf048e9911  gcc/testsuite/gcc.dg/vect/slp-widen-mult-u8.c
  2bd2abe5cf6ada1b3333906ec59ad0d1  gcc/testsuite/gcc.dg/vect/trapv-vect-reduc-4.c
  c98bf5e8cdb13d002ce5b474539328d2  gcc/testsuite/gcc.dg/vect/tree-vect.h
+ e89cc050a04f95cc194e9469aa72808f  gcc/testsuite/gcc.dg/vect/tsvc/license.txt
+ a7d3e97da65f4dfe42449b901cf9215b  gcc/testsuite/gcc.dg/vect/tsvc/tsvc.h
+ 9f6419b4c50931a4103f67c8213f8a60  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s000.c
+ f17c1a09c018fb8c535cbda72ebac53e  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s111.c
+ 2173284143ca43e8bbe2dce3ebb0db1a  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1111.c
+ 62faa1933c89383fd2efc5372fd647c8  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1112.c
+ f6febd963b483d944c8ee4be5b62cdbe  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1113.c
+ e17d68464dfda80bfc59ec90a1c47a36  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1115.c
+ f98c1dacd12f364b7ee1fd15c01f81bb  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1119.c
+ efaa17f7e9e73adc6190a31446bd7b3c  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s112.c
+ 1f99778feb8660cd3a163abf9247f420  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s113.c
+ 7352fd7df6191de49dcd1861c87e48b5  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s114.c
+ 68708d9f2685bd5fae6ab720ca83852f  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s115.c
+ 60d1671aced0a23a9671e1ddc1c9f5de  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s116.c
+ 4dc3c697abe75e0fe11ab6a416691218  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1161.c
+ d58dfcd344355c4c2590cf4b04c4a19d  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s118.c
+ 0e5e95e7cf3bef9b2265f4accdfa7203  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s119.c
+ 59ccaef4b77350ae26e0cba8d763db60  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s121.c
+ e9cd016b9ff2801305d1e0ad988644b9  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1213.c
+ b35c2e9856d8c47fe15c1afbe3df715a  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s122.c
+ 32a572e42f783699e05d80fa568e71e8  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1221.c
+ d964fdd5bad3468a8e455bfbee9320f3  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s123.c
+ 1b485cbb623b845072245660d95fb9a3  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1232.c
+ 6ee91573792aa030782c8dc731c5bc60  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s124.c
+ 642c46feeade837a191b39791c9ee4d8  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1244.c
+ adae3096335071cf3e8254d1f7904485  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s125.c
+ 46026f923782ba797469188e75c2eec4  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1251.c
+ 0d1a85b433572bbc136855de9237264a  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s126.c
+ 395e127cfc68ba064c7a372968e52f02  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s127.c
+ 77d05532034ce33e71366bb8964e0c72  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1279.c
+ 94a4ff4ac7ebaed7587848bd371a8265  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s128.c
+ e6b49f4f04d3717d26650650306cb6cf  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1281.c
+ 906ea5d96a9f8ff26ffacdbc50c68fb8  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s131.c
+ e6aba3ea69500d13a666c2cc21358274  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s13110.c
+ 18e7847d81e005027eb927f18917d261  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s132.c
+ 58f80dc4e6c1454441b0accd670c2abc  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1351.c
+ 7406958ebd0435e4054d1e9b9940b717  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s141.c
+ 8cbb98fc74be38ad1c9ed6fb7bb4afa3  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1421.c
+ 56b3ad1b3cce6bfc16d2f17a7667537c  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s151.c
+ 0dd05f74e950ad74111e845a9a90c6ba  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s152.c
+ 0c1a8d6a731765257eb9346c160d3449  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s161.c
+ eeba78ab47e7fa23964b6d6fb81b79f9  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s162.c
+ e887776f7cc57c048d38867fab488115  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s171.c
+ eb16b823c80f13ff0bcd018c1aa76df9  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s172.c
+ 2a3d1083c7ce395f480a0b8155ea2748  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s173.c
+ 3e244002926fbfb4cd8da2821ad02d48  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s174.c
+ a28f0042581f0989759c860f5c0e57f1  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s175.c
+ 0ebb176ad300fbff95668528a9c3d5fb  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s176.c
+ fe75dd190bca68b94872eb6dd6b58c82  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2101.c
+ b25051863266eda556c3632eb211ebeb  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2102.c
+ 767f361a57ec7fc39e42fada1468ad83  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s211.c
+ 170e3fec392b2b2e66f4ddebcbb412f1  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2111.c
+ d2c04f154fe19d1bbe3122411e1a40a3  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s212.c
+ b71770bd4d06a2b7f9fde9712a65c3f5  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s221.c
+ b84daf94d5420dacd3c16dcbfacc6a6f  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s222.c
+ 23d061fda420ae7818435a18bcf89e2e  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2233.c
+ af9046baf5e43f4ff13449c949f1bce7  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2244.c
+ 82cb8aac70d8509850b10cc461029b2a  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2251.c
+ 0c75f9a6f0f322c9a7a1b3371ce54a1b  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2275.c
+ 132c48d471f3cbaceb5f738561767f88  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s231.c
+ 0e07ada68b935ff470dd5909852dd62a  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s232.c
+ a7f2dbf580114b2f153604e7581e2acf  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s233.c
+ 4c435fc1c8fd55c7fae05909b4a826b4  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s235.c
+ dcaf196bf79d059b531baf20e4bd7de3  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s241.c
+ 96c0667d45798115c6fb862dd5c94f25  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s242.c
+ 1ea79033eb147ac32da8b9ea00915f1f  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s243.c
+ 131b19be810a8bfb767545aa578b7ef8  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s244.c
+ fbe1a08af29413012b695d33f50acd1c  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s251.c
+ e646e348ba51cf1586471ec4ff79c177  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s252.c
+ 6c4318e97128d7ceac21358ef7a0ac08  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s253.c
+ 1f267b0b78dfcb308ecec153e602af0f  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s254.c
+ 2c381e103fb4bc210b8893a0e3694b5d  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s255.c
+ 607d0e9c1c3547b8e384fcc149ea0adc  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s256.c
+ c34e9a7ae92c1e585ce20ab7d630e069  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s257.c
+ 338620bfc661e6a5a7e9e1761bf55f3e  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s258.c
+ 7a86fb91e2f6da576040de609ff2c4b6  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s261.c
+ ffc55e07ae1faf07cf0752399740e4a4  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s271.c
+ 5903d75da8531c131180982d7be371e4  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2710.c
+ 5beb5ec15b7340f76dbac096093d0668  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2711.c
+ 8a925dae6ac60b969163d2516af5b4d0  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2712.c
+ bac95b08817d9b936beab0d8d3e3a837  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s272.c
+ 627fb078d98679f2cd42f277a71ae6c9  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s273.c
+ 2806dedca39b77d6d2e14fac2c2846bd  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s274.c
+ aff4ccd2e23e41d8895aca42006ac7b9  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s275.c
+ 65addeee1005ef918cb9782229b00b9b  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s276.c
+ b4e1a61bab611e31beed78edb6d07e2f  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s277.c
+ 7981ad0f8f86f890e7ead1c0e91a467d  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s278.c
+ f3cf46b7cb75f0d802320c0f8da0e16b  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s279.c
+ edde27caeb90674dfc63f9c173c1b91f  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s281.c
+ 17b8931fe59e36e56c8a1f57283effad  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s291.c
+ 487436a657a10164bf9f61b4a31677bf  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s292.c
+ bb61c333ca489dc9c9ff444266758423  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s293.c
+ 190e37171bed3c92de9d86fa1e13fa24  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s311.c
+ 68fbc3db2225942315dd9388c277f3b1  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s3110.c
+ 0e6c6d41c82ea7677a114b3c54906b2e  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s3111.c
+ 95287d087840175189959333ae52a2e8  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s31111.c
+ 07ba7e0bb209092900969c9940d17b36  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s3112.c
+ c317cb696a26bea6d51beb4b38e72094  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s3113.c
+ 702095bfb692cebc061f2026a0033c30  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s312.c
+ 186abf941c62d761b117f4148ea78555  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s313.c
+ 1c0dfbea44d541180b2ed34a321ea2ae  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s314.c
+ 138ebca076effd2227d9aa8e44b82dbb  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s315.c
+ 4793358b3dde70f73430bdf90451153c  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s316.c
+ 1194d7bc2ae9d3fc7fb6cc03e1a9218c  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s317.c
+ 4451c9dedc064a1135339d25b2ba30ac  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s318.c
+ 9866c51b3116359b2223d80dcaf2d772  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s319.c
+ 704229299c72eab84a8102e8407b1925  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s321.c
+ 9aaaba5005479803bee7bf9c02e55dc9  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s322.c
+ 226f54e6f293495fd6c000a73ed8b7a3  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s323.c
+ 61d0197203c46e31e39c8c4f8ad9e853  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s3251.c
+ 5c71ac7653e5a2836d2465a9f13c6ede  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s331.c
+ b44b732e0119ea523080710710440db6  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s332.c
+ 1fa698b706ad7a329bb8f12d8c9de007  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s341.c
+ a574c6728b7b30ed7cb79cad1aca2a5b  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s342.c
+ e54027ff8457ca286ef1dc9996df732c  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s343.c
+ 9e79b48d1a903193baad80a323499cf9  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s351.c
+ 99e8f1fe9486403faae8402ba0ed0ca1  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s352.c
+ 303ba185f44756da9fc77bdcd0536887  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s353.c
+ 5c2ad6273861241745ea9d3770ad3665  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s4112.c
+ b01d2c04e1c86617cb4f789998804412  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s4113.c
+ 24bad4f966afe882059b7dde1299d0d8  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s4114.c
+ 282680c9bf1f2bfeac371268b87266a8  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s4115.c
+ 687f1d54063b48a54964186cb0fb499a  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s4116.c
+ 1bc78452159b91e724a42d7ebb859970  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s4117.c
+ 82f65f0fa70527f454978de1cb00e752  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s4121.c
+ bd1844fcf4e4bb107cf8289e22c02701  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s421.c
+ 2bfc14a2ae3e439d061ecd7d1a191c52  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s422.c
+ bca328bde6f3c66427970d2da2bb0f49  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s423.c
+ 0c66d42f590beb5fbb9407bf15ef49ff  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s424.c
+ ba3a373eedf2c03477e20c9da74ec971  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s431.c
+ bc21252a8c6f8db65075ed6f8cf1b007  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s441.c
+ ad0f4047d7360ebac10c29b453fd5b29  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s442.c
+ d0e8b52666c63dec883d596bae828531  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s443.c
+ 7c8bbd04cb24f6425ab99fd5c68470b4  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s451.c
+ 71c7e2710eb0d787abf80641134c8464  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s452.c
+ 0a53ab45e8069125854b0ad478690528  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s453.c
+ 8840c708a7f2798298113799bfaaea0b  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s471.c
+ a5e978c739ab3c4fcea558303df553a5  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s481.c
+ 7af64fc80a6fc647167e1552335980c8  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s482.c
+ a2e242e90c2044fcb838325c3440c7c7  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s491.c
+ 69786ca5ac25ed37637f1c1fc9a0ea8f  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-va.c
+ e66f09a7a57dbc6fd0a0e6f0ae175ceb  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vag.c
+ df47fc897425d382a1cdad2f9a5ed8e2  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vas.c
+ de3c285ab455b25dffc4584ad979fbcd  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vbor.c
+ d1d22ecd3beb949e67fea5c9b52c325b  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vdotr.c
+ d7b648d74f7555ede1110c75c06fa56a  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vif.c
+ 3385d8f3883293b1c32e42ac209ddc56  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vpv.c
+ 9c0e5e5c81d167fe2e20534e1308871c  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vpvpv.c
+ f02b315be9d149a11b9a642dddfc1360  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vpvts.c
+ ba59522d2af9dbc0b642d30b265fdf9a  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vpvtv.c
+ 42c1ba5434e11e120f6521a99a4038b4  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vsumr.c
+ 7702b6822f030833bc4a403f92677c1b  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vtv.c
+ 545119600337faa91e46af0c7bce64ba  gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-vtvtv.c
  908fa625b55d7d283163e9dfb4e3cb97  gcc/testsuite/gcc.dg/vect/unswitch-loops-pr26969.c
  6520c3dd9e657028a89c31328634d22a  gcc/testsuite/gcc.dg/vect/vec-scal-opt.c
  9b5d0a9d2e1a81f9454f0082b9f240b7  gcc/testsuite/gcc.dg/vect/vec-scal-opt1.c
*************** d775142a6a932653608822369c64b74c  gcc/te
*** 46878,46886 ****
  c98cb887213a527e1e60e0259f21719c  gcc/testsuite/gcc.dg/vect/vect-avg-7.c
  ba86350cac418159fe43da834182caac  gcc/testsuite/gcc.dg/vect/vect-avg-8.c
  7c4ca4d68d7e84bceb06dd4dd4d2f0fd  gcc/testsuite/gcc.dg/vect/vect-avg-9.c
  154c42706e014b10ba6740d5b2ec9fb1  gcc/testsuite/gcc.dg/vect/vect-bool-1.c
  88ece9587087a3d3d1b4461a490bb1e1  gcc/testsuite/gcc.dg/vect/vect-bool-cmp-2.c
! 301393ef2e36efda6ce2bbd1678b702f  gcc/testsuite/gcc.dg/vect/vect-bool-cmp.c
  e3c5cf4065fd5d1d91d202884b11f0f3  gcc/testsuite/gcc.dg/vect/vect-bswap16.c
  9e66be7556b2d11cacfd42f03990f256  gcc/testsuite/gcc.dg/vect/vect-bswap16a.c
  3acbbdac3cc638db4960646b1840991e  gcc/testsuite/gcc.dg/vect/vect-bswap32.c
--- 49061,49080 ----
  c98cb887213a527e1e60e0259f21719c  gcc/testsuite/gcc.dg/vect/vect-avg-7.c
  ba86350cac418159fe43da834182caac  gcc/testsuite/gcc.dg/vect/vect-avg-8.c
  7c4ca4d68d7e84bceb06dd4dd4d2f0fd  gcc/testsuite/gcc.dg/vect/vect-avg-9.c
+ c63fe452f6bfd47afcefc320dd3c0599  gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-10.c
+ fb803f7287d6ad3338c2b8e8bc4c4546  gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-11.c
+ eacea0f3e9efe0205a0c275fd0c4605f  gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-12.c
+ d391b35e2c4e70375306a57ece5a354f  gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-2.c
+ 5a62e288eee9c160b93d71bf596f62e1  gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-23.c
+ d391b35e2c4e70375306a57ece5a354f  gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-3.c
+ e52a8fc930a06c6459ec662b4524dea9  gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-4.c
+ acd17fa620a3c8c7714b13203c43d954  gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-5.c
+ eee8284de2c89fe1e0116b94f0f75118  gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-6.c
+ 2f55dc2b07040c1444953a4f6b6fe16a  gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-8.c
+ d6eaa948601aaabef30d80face368007  gcc/testsuite/gcc.dg/vect/vect-bic-bitmask-9.c
  154c42706e014b10ba6740d5b2ec9fb1  gcc/testsuite/gcc.dg/vect/vect-bool-1.c
  88ece9587087a3d3d1b4461a490bb1e1  gcc/testsuite/gcc.dg/vect/vect-bool-cmp-2.c
! 2c73184f24942ac0b976ac2249081168  gcc/testsuite/gcc.dg/vect/vect-bool-cmp.c
  e3c5cf4065fd5d1d91d202884b11f0f3  gcc/testsuite/gcc.dg/vect/vect-bswap16.c
  9e66be7556b2d11cacfd42f03990f256  gcc/testsuite/gcc.dg/vect/vect-bswap16a.c
  3acbbdac3cc638db4960646b1840991e  gcc/testsuite/gcc.dg/vect/vect-bswap32.c
*************** cf4a4d6e6cc4b23522c19982266ca248  gcc/te
*** 46944,46950 ****
--- 49138,49154 ----
  aa46a01c430ca6bcb60fb6bc2edfbb1d  gcc/testsuite/gcc.dg/vect/vect-fma-1.c
  b10686cc9cc745d9a4e579ee285eae2d  gcc/testsuite/gcc.dg/vect/vect-fma-2.c
  f26bda59075ce8ddcb0291dc86a118b3  gcc/testsuite/gcc.dg/vect/vect-fma-3.c
+ 7718ea0dbd3e5cf90d36785e5e6856b1  gcc/testsuite/gcc.dg/vect/vect-fmax-1.c
+ 402a6dee687c77191aee362a5ec11457  gcc/testsuite/gcc.dg/vect/vect-fmax-2.c
+ 9e40cae6b53777322184655af56a6d7e  gcc/testsuite/gcc.dg/vect/vect-fmax-3.c
+ b6a49b6453366544e5792fadbbd70e02  gcc/testsuite/gcc.dg/vect/vect-fmin-1.c
+ 514748e37dabc7d4ccc0e8bd4a34956f  gcc/testsuite/gcc.dg/vect/vect-fmin-2.c
+ 9036ec8d298021e41c83c69812542f07  gcc/testsuite/gcc.dg/vect/vect-fmin-3.c
  f7e0d01143aad0f81b1d1f66c5737e3a  gcc/testsuite/gcc.dg/vect/vect-fold-1.c
+ 35c3ee4b34fc72c77cfca5c91b2ab36c  gcc/testsuite/gcc.dg/vect/vect-gather-1.c
+ 42b00c38af065e33048d2a1d390a7232  gcc/testsuite/gcc.dg/vect/vect-gather-2.c
+ 1dba52381c6aba539d0efa40e551a155  gcc/testsuite/gcc.dg/vect/vect-gather-3.c
+ e180f90bcddffb95d143a607814ea50a  gcc/testsuite/gcc.dg/vect/vect-gather-4.c
  b57bff07bf75c647567f17c15d11e41a  gcc/testsuite/gcc.dg/vect/vect-ifcvt-10.c
  a0b812b43a2a49d603a582c192074c86  gcc/testsuite/gcc.dg/vect/vect-ifcvt-11.c
  9dbd0e84949b41bb8d3ca7406736f54d  gcc/testsuite/gcc.dg/vect/vect-ifcvt-16.c
*************** ee152373b3cb6439fc8f5b449b865292  gcc/te
*** 47018,47024 ****
  e22c5292855d04ebec8fcca164b3f63e  gcc/testsuite/gcc.dg/vect/vect-multitypes-9.c
  8d6c1b8d6a26c0f488ec9cfcdb717ac9  gcc/testsuite/gcc.dg/vect/vect-nb-iter-ub-1.c
  f183b835e04e4f4df76b8b11d27c58d7  gcc/testsuite/gcc.dg/vect/vect-nb-iter-ub-2.c
! 88b165eba33f2f9e9ef536108374e6b0  gcc/testsuite/gcc.dg/vect/vect-nb-iter-ub-3.c
  028844c7681fb2695f5b0915b7920e58  gcc/testsuite/gcc.dg/vect/vect-neg-store-1.c
  ca50208d018fefe0221f31fc0c7c54f3  gcc/testsuite/gcc.dg/vect/vect-neg-store-2.c
  7d2000a243e1f215be6b9717ebe11d76  gcc/testsuite/gcc.dg/vect/vect-nest-cycle-1.c
--- 49222,49228 ----
  e22c5292855d04ebec8fcca164b3f63e  gcc/testsuite/gcc.dg/vect/vect-multitypes-9.c
  8d6c1b8d6a26c0f488ec9cfcdb717ac9  gcc/testsuite/gcc.dg/vect/vect-nb-iter-ub-1.c
  f183b835e04e4f4df76b8b11d27c58d7  gcc/testsuite/gcc.dg/vect/vect-nb-iter-ub-2.c
! 0ea90f94654371f797d54e984f8eedf9  gcc/testsuite/gcc.dg/vect/vect-nb-iter-ub-3.c
  028844c7681fb2695f5b0915b7920e58  gcc/testsuite/gcc.dg/vect/vect-neg-store-1.c
  ca50208d018fefe0221f31fc0c7c54f3  gcc/testsuite/gcc.dg/vect/vect-neg-store-2.c
  7d2000a243e1f215be6b9717ebe11d76  gcc/testsuite/gcc.dg/vect/vect-nest-cycle-1.c
*************** afaa45daeb6740febad38b149bba00f4  gcc/te
*** 47137,47149 ****
--- 49341,49367 ----
  c0dc4d999a9dd3a90639e4eb6b307722  gcc/testsuite/gcc.dg/vect/vect-reduc-8.c
  deb8ecbd7cdb913c066f7d366640b30b  gcc/testsuite/gcc.dg/vect/vect-reduc-9.c
  78bdeb760d9d97cdc35bbb827cdcf29d  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-1.c
+ 6eb4a209f855067454aac5eef4786ff9  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-10.c
+ 6764f91bfb67b8ce62598ef142abdb91  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-11.c
+ a07f328b0dde0503fe0d373480a981d6  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-12.c
+ ace9a58bc028ff24310a98d79c596a57  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-13.c
+ 592066a48ade6ddfe4ec0d99a0c9c4c2  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-14.c
+ e1bad883a971d429b34a662aae650982  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-15.c
+ 5dee893b650f05471ca30e60a55409e3  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-16.c
+ 1188a8083bec6275cf6953e04ff17181  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-17.c
+ 71671b1ef1a696578e881921d137ce7a  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-18.c
+ e8371608a604536ad488c49233b1a76b  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-19.c
  8bb99383a3d30f2e7a971c28dfdb6bbc  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-2.c
+ 63fec49496c065b83f4bef329dd6e86d  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-20.c
+ 0179f9a69aa59bfaeb551be4c74bfafd  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-21.c
+ b9f807d50c1cb90b63819750c1a7f023  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-22.c
  7617a5d0a2af193507333c64d80b9f85  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-3.c
  9a4e92377d3c8499cad2dbc27098ed3f  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-4.c
  2fe52e43abbe10e0d3a2c5bd783c86f5  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-5.c
  a79cc962357cf4f42a44efad158b03e6  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-6.c
  8593f0a78707f2d870196d3db8601bb9  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-7.c
  b6aeb022dde69e8ffe448352fd61d3bd  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-8.c
+ e01013fbcd15b7580b145038cf17b812  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-9.c
  f567043538b37b8f96a7639f420ebf5a  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s16a.c
  4ac381c0ce01711ae42fa052dd047242  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s16b.c
  3f79364b1434591b07c839635489cfd3  gcc/testsuite/gcc.dg/vect/vect-reduc-dot-s16c.c
*************** be23045c05cc8bc221e254d4264d3330  gcc/te
*** 47211,47220 ****
  d97bb14eaa463c7f3e2a94150ca6c42a  gcc/testsuite/gcc.dg/vect/vect-simd-15.c
  c2dd0980ae08fc1379d9d11238f808a7  gcc/testsuite/gcc.dg/vect/vect-simd-16.c
  bad60085e2f9deac920b28ca450bd47c  gcc/testsuite/gcc.dg/vect/vect-simd-17.c
! 74f49f5086c1dd1f5d5fdb21ef7f0600  gcc/testsuite/gcc.dg/vect/vect-simd-18.c
! a648c2d5f07b51c11df163da0b0bd2d8  gcc/testsuite/gcc.dg/vect/vect-simd-19.c
  5cd096983154275509f757eca11421cc  gcc/testsuite/gcc.dg/vect/vect-simd-2.c
! e20fa606277db4d6a83a0c85b306bcfa  gcc/testsuite/gcc.dg/vect/vect-simd-20.c
  038a733926c218424972ecbb363de886  gcc/testsuite/gcc.dg/vect/vect-simd-3.c
  3985e66f5c318e1f67337946ef35d269  gcc/testsuite/gcc.dg/vect/vect-simd-4.c
  b706dc8a8f0465d5f4517099eb8a07c4  gcc/testsuite/gcc.dg/vect/vect-simd-5.c
--- 49429,49438 ----
  d97bb14eaa463c7f3e2a94150ca6c42a  gcc/testsuite/gcc.dg/vect/vect-simd-15.c
  c2dd0980ae08fc1379d9d11238f808a7  gcc/testsuite/gcc.dg/vect/vect-simd-16.c
  bad60085e2f9deac920b28ca450bd47c  gcc/testsuite/gcc.dg/vect/vect-simd-17.c
! 8736d67e541bae5eaaa063e6925eb053  gcc/testsuite/gcc.dg/vect/vect-simd-18.c
! 22628e24c555b634f9e0fb675e2c9387  gcc/testsuite/gcc.dg/vect/vect-simd-19.c
  5cd096983154275509f757eca11421cc  gcc/testsuite/gcc.dg/vect/vect-simd-2.c
! 8f11e4ff7260b93c380ec79215dc6905  gcc/testsuite/gcc.dg/vect/vect-simd-20.c
  038a733926c218424972ecbb363de886  gcc/testsuite/gcc.dg/vect/vect-simd-3.c
  3985e66f5c318e1f67337946ef35d269  gcc/testsuite/gcc.dg/vect/vect-simd-4.c
  b706dc8a8f0465d5f4517099eb8a07c4  gcc/testsuite/gcc.dg/vect/vect-simd-5.c
*************** ab5379404640e60b68283cea3a87ea22  gcc/te
*** 47305,47311 ****
  fbf164f2875819f557043a2d78017764  gcc/testsuite/gcc.dg/vect/vect-widen-shift-s8.c
  abe3c6bc74fd9730499cd8e54e143935  gcc/testsuite/gcc.dg/vect/vect-widen-shift-u16.c
  8146ba6466499582165bf09d96598f47  gcc/testsuite/gcc.dg/vect/vect-widen-shift-u8.c
! 7d2c6eaf321cb302aa2a3c256dd11514  gcc/testsuite/gcc.dg/vect/vect.exp
  9dfff9b6a28d5e65dca4073934514d5e  gcc/testsuite/gcc.dg/vect/wrapv-vect-7.c
  3613af6098a597772fd1b7e4dd37a0f3  gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2char.c
  431e29e277cc621ccb31b18bba96d195  gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2short.c
--- 49523,49529 ----
  fbf164f2875819f557043a2d78017764  gcc/testsuite/gcc.dg/vect/vect-widen-shift-s8.c
  abe3c6bc74fd9730499cd8e54e143935  gcc/testsuite/gcc.dg/vect/vect-widen-shift-u16.c
  8146ba6466499582165bf09d96598f47  gcc/testsuite/gcc.dg/vect/vect-widen-shift-u8.c
! 0e99fe21b3321e4cfa59a84d006c977e  gcc/testsuite/gcc.dg/vect/vect.exp
  9dfff9b6a28d5e65dca4073934514d5e  gcc/testsuite/gcc.dg/vect/wrapv-vect-7.c
  3613af6098a597772fd1b7e4dd37a0f3  gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2char.c
  431e29e277cc621ccb31b18bba96d195  gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2short.c
*************** e24d0f20e739156ac3cf1c83cb940873  gcc/te
*** 47373,47378 ****
--- 49591,49605 ----
  72a2e50013bca55ed934c9db00f852af  gcc/testsuite/gcc.dg/vla-init-3.c
  943b40322a964bc97313e85b4eb158b6  gcc/testsuite/gcc.dg/vla-init-4.c
  17d2fd5480a0274dbb802302e84e1945  gcc/testsuite/gcc.dg/vla-init-5.c
+ 1b4202fd8dd28d797fa2a26ecca28fa7  gcc/testsuite/gcc.dg/vla-stexp-1.c
+ b714635b49d4d0a1198216693503c2ef  gcc/testsuite/gcc.dg/vla-stexp-2.c
+ 42e032d18ea40563e277a533aed62bf7  gcc/testsuite/gcc.dg/vla-stexp-3.c
+ 6d0667bbca3ef93689856905292cabf8  gcc/testsuite/gcc.dg/vla-stexp-4.c
+ 0ce2fb5af61b0102983cdb7cc23f72b5  gcc/testsuite/gcc.dg/vla-stexp-5.c
+ 50eb0720aa989d38f8708d1766f1d605  gcc/testsuite/gcc.dg/vla-stexp-6.c
+ 748ee2e2a4c0cc944dd2c73fdb89639c  gcc/testsuite/gcc.dg/vla-stexp-7.c
+ 4fdda7517bab551abdccdbb2c0bfa91e  gcc/testsuite/gcc.dg/vla-stexp-8.c
+ 63edc5c02ff6dbde1e6ad24652084b7e  gcc/testsuite/gcc.dg/vla-stexp-9.c
  b6e4ad0c2b06bc17958fb57b495b011f  gcc/testsuite/gcc.dg/vmx/1b-01.c
  192ca75d85cf89c0dbaa4e9b66bf8ce1  gcc/testsuite/gcc.dg/vmx/1b-02.c
  26ad98ef01158cbabae0393a498f540a  gcc/testsuite/gcc.dg/vmx/1b-03.c
*************** b74b4229263d70abbf112c2c622f29ba  gcc/te
*** 47503,47509 ****
  5cc01078c1f3f451644a44dfdc807444  gcc/testsuite/gcc.dg/vmx/varargs-6.c
  441584a435c20e33e9ba2840da79de7b  gcc/testsuite/gcc.dg/vmx/varargs-7.c
  88d7e6b1c915da50092f2f05e8403f00  gcc/testsuite/gcc.dg/vmx/vec-set.c
! d9094a103d6634453e2b4bbf5f82ff5d  gcc/testsuite/gcc.dg/vmx/vmx.exp
  7b36f93de20205be4944182fe8222120  gcc/testsuite/gcc.dg/vmx/vsums.c
  0e39fb03e625fd0928ac3568284946cb  gcc/testsuite/gcc.dg/vmx/x-01.c
  780491d8a6964b34313eb871098c1ec6  gcc/testsuite/gcc.dg/vmx/x-02.c
--- 49730,49736 ----
  5cc01078c1f3f451644a44dfdc807444  gcc/testsuite/gcc.dg/vmx/varargs-6.c
  441584a435c20e33e9ba2840da79de7b  gcc/testsuite/gcc.dg/vmx/varargs-7.c
  88d7e6b1c915da50092f2f05e8403f00  gcc/testsuite/gcc.dg/vmx/vec-set.c
! c5abb3e84c1496f325a25262ffb67883  gcc/testsuite/gcc.dg/vmx/vmx.exp
  7b36f93de20205be4944182fe8222120  gcc/testsuite/gcc.dg/vmx/vsums.c
  0e39fb03e625fd0928ac3568284946cb  gcc/testsuite/gcc.dg/vmx/x-01.c
  780491d8a6964b34313eb871098c1ec6  gcc/testsuite/gcc.dg/vmx/x-02.c
*************** c2a72555b847a160fe0e6ed226d4d97d  gcc/te
*** 47533,47539 ****
  f5b5cb2b526a46cc84be22a60b28910d  gcc/testsuite/gcc.dg/vshift-7.c
  e24f2248b6dfe2458324a1f859ecb3c3  gcc/testsuite/gcc.dg/vxworks/initpri1.c
  082cdb5ff1a15b2384040533828cac32  gcc/testsuite/gcc.dg/vxworks/initpri2.c
! 3e991a757a106e4ccccab16ecca81e6b  gcc/testsuite/gcc.dg/vxworks/vxworks.exp
  807831bd928d8bca1ad6f704a5f898aa  gcc/testsuite/gcc.dg/warn-1.c
  707e0da2129d4bb332c0bf10ea621989  gcc/testsuite/gcc.dg/warn-abs-1.c
  be8f7b50176d3cc112e9b45dfbff569c  gcc/testsuite/gcc.dg/warn-addr-cmp.c
--- 49760,49766 ----
  f5b5cb2b526a46cc84be22a60b28910d  gcc/testsuite/gcc.dg/vshift-7.c
  e24f2248b6dfe2458324a1f859ecb3c3  gcc/testsuite/gcc.dg/vxworks/initpri1.c
  082cdb5ff1a15b2384040533828cac32  gcc/testsuite/gcc.dg/vxworks/initpri2.c
! a4acbba01acbb5926319487749396e1f  gcc/testsuite/gcc.dg/vxworks/vxworks.exp
  807831bd928d8bca1ad6f704a5f898aa  gcc/testsuite/gcc.dg/warn-1.c
  707e0da2129d4bb332c0bf10ea621989  gcc/testsuite/gcc.dg/warn-abs-1.c
  be8f7b50176d3cc112e9b45dfbff569c  gcc/testsuite/gcc.dg/warn-addr-cmp.c
*************** c4c05e988d611839b778bc5b1e7f94a2  gcc/te
*** 47545,47555 ****
  b2257f5f913dd4b4b9eb7a2ea834a710  gcc/testsuite/gcc.dg/warn-strcpy-no-nul.c
  337cc4c80ee4dae26f1a907d04b933ea  gcc/testsuite/gcc.dg/warn-strlen-no-nul.c
  035c4f9516300f1af2c15ee669e80903  gcc/testsuite/gcc.dg/warn-strnlen-no-nul-2.c
! 20f4803557cd9bc4884aee485966175c  gcc/testsuite/gcc.dg/warn-strnlen-no-nul.c
  06467199d10c768530ff05eb6bc16fb8  gcc/testsuite/gcc.dg/wcaselabel-1.c
  8c4274546261eadb1410524bcdc26c4d  gcc/testsuite/gcc.dg/wchar_t-1.c
  f2cc2a4270e9964959b2a5f3df5cdaae  gcc/testsuite/gcc.dg/wchar_t-2.c
! 26cb00298290dae2d3e19fb9fa50fc15  gcc/testsuite/gcc.dg/weak/typeof-2.c
  cd6fc4b503907cb791718355b2e8b13e  gcc/testsuite/gcc.dg/weak/weak-1.c
  5b030d8bcb22dedd984e8d8dae17cfb6  gcc/testsuite/gcc.dg/weak/weak-10.c
  121bd4b7463864effe08a934bc490b0d  gcc/testsuite/gcc.dg/weak/weak-11.c
--- 49772,49782 ----
  b2257f5f913dd4b4b9eb7a2ea834a710  gcc/testsuite/gcc.dg/warn-strcpy-no-nul.c
  337cc4c80ee4dae26f1a907d04b933ea  gcc/testsuite/gcc.dg/warn-strlen-no-nul.c
  035c4f9516300f1af2c15ee669e80903  gcc/testsuite/gcc.dg/warn-strnlen-no-nul-2.c
! 0f10f64a4f49e4cbdf929d1f7cb54fef  gcc/testsuite/gcc.dg/warn-strnlen-no-nul.c
  06467199d10c768530ff05eb6bc16fb8  gcc/testsuite/gcc.dg/wcaselabel-1.c
  8c4274546261eadb1410524bcdc26c4d  gcc/testsuite/gcc.dg/wchar_t-1.c
  f2cc2a4270e9964959b2a5f3df5cdaae  gcc/testsuite/gcc.dg/wchar_t-2.c
! 7368eeb85c3d8e771c824db72e256309  gcc/testsuite/gcc.dg/weak/typeof-2.c
  cd6fc4b503907cb791718355b2e8b13e  gcc/testsuite/gcc.dg/weak/weak-1.c
  5b030d8bcb22dedd984e8d8dae17cfb6  gcc/testsuite/gcc.dg/weak/weak-10.c
  121bd4b7463864effe08a934bc490b0d  gcc/testsuite/gcc.dg/weak/weak-11.c
*************** e0a91183b53de4db07731d70464e0514  gcc/te
*** 47562,47575 ****
  b1053beb6c83d0b7ad775bdb6d738748  gcc/testsuite/gcc.dg/weak/weak-18.c
  82d71518bc5f1e36716ed624e8b5b71d  gcc/testsuite/gcc.dg/weak/weak-19.c
  c32e0266898e6811b8bbf0141c1fa093  gcc/testsuite/gcc.dg/weak/weak-2.c
! 066ca7b525a2f599c76092cab2208a79  gcc/testsuite/gcc.dg/weak/weak-3.c
  227fc9b36c4ef2834f15e27c78fcc8e6  gcc/testsuite/gcc.dg/weak/weak-4.c
  534e6df4374a0c278ccdb1d809e6da8f  gcc/testsuite/gcc.dg/weak/weak-5.c
  b7dc9ca29b0c2fb0c11b45350fbe20ac  gcc/testsuite/gcc.dg/weak/weak-6.c
  bbde9e22b1b903e5ff4a277a65a1cb04  gcc/testsuite/gcc.dg/weak/weak-7.c
  ef4ea7d4216e9123244c1d14e75ca376  gcc/testsuite/gcc.dg/weak/weak-8.c
  df7f481c6f796831760bd5209df6243d  gcc/testsuite/gcc.dg/weak/weak-9.c
! 4cf41dd2065016fd884899baf74b4102  gcc/testsuite/gcc.dg/weak/weak.exp
  4f8d055b663cb38e2bbb352f1cb7a53c  gcc/testsuite/gcc.dg/webizer.c
  b73fb0ba5d6e226781f1b052bc3742c5  gcc/testsuite/gcc.dg/wide-shift-128.c
  81a04bf47a86380caff11ddcb8294ecc  gcc/testsuite/gcc.dg/wide-shift-64.c
--- 49789,49802 ----
  b1053beb6c83d0b7ad775bdb6d738748  gcc/testsuite/gcc.dg/weak/weak-18.c
  82d71518bc5f1e36716ed624e8b5b71d  gcc/testsuite/gcc.dg/weak/weak-19.c
  c32e0266898e6811b8bbf0141c1fa093  gcc/testsuite/gcc.dg/weak/weak-2.c
! 88c5f50c41fa3ec4cc1c09ec154bf31d  gcc/testsuite/gcc.dg/weak/weak-3.c
  227fc9b36c4ef2834f15e27c78fcc8e6  gcc/testsuite/gcc.dg/weak/weak-4.c
  534e6df4374a0c278ccdb1d809e6da8f  gcc/testsuite/gcc.dg/weak/weak-5.c
  b7dc9ca29b0c2fb0c11b45350fbe20ac  gcc/testsuite/gcc.dg/weak/weak-6.c
  bbde9e22b1b903e5ff4a277a65a1cb04  gcc/testsuite/gcc.dg/weak/weak-7.c
  ef4ea7d4216e9123244c1d14e75ca376  gcc/testsuite/gcc.dg/weak/weak-8.c
  df7f481c6f796831760bd5209df6243d  gcc/testsuite/gcc.dg/weak/weak-9.c
! bb557bab9ca6712772c6dabdedde207e  gcc/testsuite/gcc.dg/weak/weak.exp
  4f8d055b663cb38e2bbb352f1cb7a53c  gcc/testsuite/gcc.dg/webizer.c
  b73fb0ba5d6e226781f1b052bc3742c5  gcc/testsuite/gcc.dg/wide-shift-128.c
  81a04bf47a86380caff11ddcb8294ecc  gcc/testsuite/gcc.dg/wide-shift-64.c
*************** fd04e1baf5da18c4be47f595e60e491c  gcc/te
*** 47584,47590 ****
  59f7a248eb2e13835a3ecc5302c389a2  gcc/testsuite/gcc.dg/wint_t-1.c
  cc0d6bce4f8aa2ee952b215a124a101a  gcc/testsuite/gcc.dg/wmain.c
  6a9b477321a41d850c75a5d52f5c1dd2  gcc/testsuite/gcc.dg/wmul-1.c
! a1cf84e73fe8fc39e7322a3d02f2db33  gcc/testsuite/gcc.dg/wrapped-binop-simplify.c
  0608c380e23cc21f1a8c8141d8def366  gcc/testsuite/gcc.dg/wtr-aggr-init-1.c
  91e38689e9326ab46b941ed442e61c61  gcc/testsuite/gcc.dg/wtr-conversion-1.c
  81ce4be5f048dad36a72f1239e0b064c  gcc/testsuite/gcc.dg/wtr-escape-1.c
--- 49811,49817 ----
  59f7a248eb2e13835a3ecc5302c389a2  gcc/testsuite/gcc.dg/wint_t-1.c
  cc0d6bce4f8aa2ee952b215a124a101a  gcc/testsuite/gcc.dg/wmain.c
  6a9b477321a41d850c75a5d52f5c1dd2  gcc/testsuite/gcc.dg/wmul-1.c
! f1d3a85709a8eeb06d8e8aa760f9884e  gcc/testsuite/gcc.dg/wrapped-binop-simplify.c
  0608c380e23cc21f1a8c8141d8def366  gcc/testsuite/gcc.dg/wtr-aggr-init-1.c
  91e38689e9326ab46b941ed442e61c61  gcc/testsuite/gcc.dg/wtr-conversion-1.c
  81ce4be5f048dad36a72f1239e0b064c  gcc/testsuite/gcc.dg/wtr-escape-1.c
*************** c34b827a7f28759ebf3d5ebc26e975b8  gcc/te
*** 47604,47618 ****
  ce7181a37e4abd0831a2d47b7a9a11f2  gcc/testsuite/gcc.dg/zero_bits_compound-2.c
  3818016c4a025396f38ca3c9bd0c1f47  gcc/testsuite/gcc.dg/zero_sign_ext_test.c
  4e040b1868690b5543136a52a2f030b3  gcc/testsuite/gcc.misc-tests/acker1.c
! b7acbab2518d81723fc0c47d3fbcf290  gcc/testsuite/gcc.misc-tests/acker1.exp
  77cec6e0fd95e9ae200e495071d1ae9a  gcc/testsuite/gcc.misc-tests/arm-isr.c
! 494b0660650dfd557229e7c3952b6680  gcc/testsuite/gcc.misc-tests/arm-isr.exp
  69ee82e02b642cb6edfac2cec4b99756  gcc/testsuite/gcc.misc-tests/bprob-1.c
  769b91c7738037eb489394524ae54796  gcc/testsuite/gcc.misc-tests/bprob-2.c
! 5e27f87401abb46c0505278321b9c21f  gcc/testsuite/gcc.misc-tests/bprob.exp
! fc0067522021665a9e9ec6ee0728a880  gcc/testsuite/gcc.misc-tests/dectest.exp
  a11bded9860644075434da1f07b7f1bf  gcc/testsuite/gcc.misc-tests/dhry.c
! 409942f84fcf373d28bba5bb13c04c36  gcc/testsuite/gcc.misc-tests/dhry.exp
  850c45b3c3b492adf09b115c0d2d2286  gcc/testsuite/gcc.misc-tests/dhry.h
  02aa6ab9e158e9fa6e94768d75bd86cb  gcc/testsuite/gcc.misc-tests/gcov-1.c
  44d73a2d21081bbe1b4c64084331ec77  gcc/testsuite/gcc.misc-tests/gcov-10.c
--- 49831,49845 ----
  ce7181a37e4abd0831a2d47b7a9a11f2  gcc/testsuite/gcc.dg/zero_bits_compound-2.c
  3818016c4a025396f38ca3c9bd0c1f47  gcc/testsuite/gcc.dg/zero_sign_ext_test.c
  4e040b1868690b5543136a52a2f030b3  gcc/testsuite/gcc.misc-tests/acker1.c
! 9282c0b191fb17272c16593fe9bd9996  gcc/testsuite/gcc.misc-tests/acker1.exp
  77cec6e0fd95e9ae200e495071d1ae9a  gcc/testsuite/gcc.misc-tests/arm-isr.c
! 159945893ce383f23fe15b6e610adbac  gcc/testsuite/gcc.misc-tests/arm-isr.exp
  69ee82e02b642cb6edfac2cec4b99756  gcc/testsuite/gcc.misc-tests/bprob-1.c
  769b91c7738037eb489394524ae54796  gcc/testsuite/gcc.misc-tests/bprob-2.c
! 82fbfe0bd0ed2de1140647ed43b5516b  gcc/testsuite/gcc.misc-tests/bprob.exp
! 343bb77b9f3de94df98c5b34231c4f5c  gcc/testsuite/gcc.misc-tests/dectest.exp
  a11bded9860644075434da1f07b7f1bf  gcc/testsuite/gcc.misc-tests/dhry.c
! 076b9e619e52c68becfda4966bd877cb  gcc/testsuite/gcc.misc-tests/dhry.exp
  850c45b3c3b492adf09b115c0d2d2286  gcc/testsuite/gcc.misc-tests/dhry.h
  02aa6ab9e158e9fa6e94768d75bd86cb  gcc/testsuite/gcc.misc-tests/gcov-1.c
  44d73a2d21081bbe1b4c64084331ec77  gcc/testsuite/gcc.misc-tests/gcov-10.c
*************** cd738df03ae207debc1ad168ab05d024  gcc/te
*** 47646,47686 ****
  ce15b46ef3abd924c340b60b46880630  gcc/testsuite/gcc.misc-tests/gcov-pr90574-1.c
  b4c981ce038b4aba05421ca069c8e20f  gcc/testsuite/gcc.misc-tests/gcov-pr90574-2.c
  64595fd213798d37265f5eb087bb77f2  gcc/testsuite/gcc.misc-tests/gcov-pr94029.c
! bd9242e47c77c3e62554cc0d59a4d8c0  gcc/testsuite/gcc.misc-tests/gcov.exp
  d0c60992e0ef331502b84f8ee13cb818  gcc/testsuite/gcc.misc-tests/gcovpart-13b.c
! 2fe28a0fc0e2f5bf24c17847702d6d82  gcc/testsuite/gcc.misc-tests/godump-1.c
! b2f1808ef0f8aed27f29e43066dd73bf  gcc/testsuite/gcc.misc-tests/godump.exp
! cd834b8ffce6a0459f800bce2e2b3f70  gcc/testsuite/gcc.misc-tests/help.exp
  6d43a784cf19762437a5b9baec4d4095  gcc/testsuite/gcc.misc-tests/i386-pf-3dnow-1.c
  4a06f6c2d9b50ef414030d175fbe9d5c  gcc/testsuite/gcc.misc-tests/i386-pf-athlon-1.c
  bfd2eae1e2b6b0aa804a7e33580dc190  gcc/testsuite/gcc.misc-tests/i386-pf-none-1.c
  81ac61201db56efd77fdfd14cf2e4266  gcc/testsuite/gcc.misc-tests/i386-pf-sse-1.c
! 22892ab9896295ee169024cf9ca0627c  gcc/testsuite/gcc.misc-tests/i386-prefetch.exp
  51bca646196e93b1c8a68319441e0595  gcc/testsuite/gcc.misc-tests/linkage-x.c
  4020995d3b08e117c48c529d5bc0b3ec  gcc/testsuite/gcc.misc-tests/linkage-y.c
! 1d8f33042240b49d5fd66fb289dc1e87  gcc/testsuite/gcc.misc-tests/linkage.exp
  1d8fa0a1210ed4c4bf0ff4dfa959f060  gcc/testsuite/gcc.misc-tests/matrix1.c
! c18bf8f17d7c9789ff2e19fbd8fa69ae  gcc/testsuite/gcc.misc-tests/matrix1.exp
  b45579fdac6008721502ddecb5df29d8  gcc/testsuite/gcc.misc-tests/mg-2.c
! 210b5b46c77856ac24db57f4023e945b  gcc/testsuite/gcc.misc-tests/mg-2.exp
  fb7a4e029ce05eea8ba0f03f9033caa2  gcc/testsuite/gcc.misc-tests/mg.c
! c9146771ea9de17a6e68cc8b034b990d  gcc/testsuite/gcc.misc-tests/mg.exp
! 82343f4baa9a2a8198424647ed3dd3af  gcc/testsuite/gcc.misc-tests/options.exp
! 3236047a789308044d9661d6e7f0e9ea  gcc/testsuite/gcc.misc-tests/output.exp
  69d9b561b303bd96e74ea417f73e1ac5  gcc/testsuite/gcc.misc-tests/outputs-0.c
  773736389c2fb248099dd6dcee0ddb6b  gcc/testsuite/gcc.misc-tests/outputs-1.c
  4bffb1320eb13262d3eb5336a6683a84  gcc/testsuite/gcc.misc-tests/outputs-2.c
! 6cde3536a289df6ff9cef5457fdcf0bd  gcc/testsuite/gcc.misc-tests/outputs.exp
  37d75aade49dd3329803e520456ae8a6  gcc/testsuite/gcc.misc-tests/sieve.c
! ffd09bab574e45f7bbf17151c17f851f  gcc/testsuite/gcc.misc-tests/sieve.exp
  f0e0d52dbb689249f8d057f00e4c65e9  gcc/testsuite/gcc.misc-tests/sort2.c
! 37cd76fb7d5dfd6e99aed21a31c13b58  gcc/testsuite/gcc.misc-tests/sort2.exp
! cc2ce2ed4623b870c4f443f9bdafaa1d  gcc/testsuite/gcc.src/maintainers.exp
  8031dd3c171877e36f7163b73fe68210  gcc/testsuite/gcc.target/aarch64/121127.c
  512f8592397ac26799ee85d9c29339ec  gcc/testsuite/gcc.target/aarch64/_Float16_1.c
  6bead3d18e15a037cfb743e33e7712a5  gcc/testsuite/gcc.target/aarch64/_Float16_2.c
  d365d8bf0f5478b04e6451262cf0b804  gcc/testsuite/gcc.target/aarch64/_Float16_3.c
! 5bf9524473f603459a89dbbad52c5f42  gcc/testsuite/gcc.target/aarch64/aapcs64/aapcs64.exp
  fbb13bb7b4d389c258ef20d9aae07cf6  gcc/testsuite/gcc.target/aarch64/aapcs64/abitest-2.h
  c708255687954aa3e3174b83b89e4e66  gcc/testsuite/gcc.target/aarch64/aapcs64/abitest-common.h
  ab893b67ef591ba6b84bda6885255075  gcc/testsuite/gcc.target/aarch64/aapcs64/abitest.S
--- 49873,49913 ----
  ce15b46ef3abd924c340b60b46880630  gcc/testsuite/gcc.misc-tests/gcov-pr90574-1.c
  b4c981ce038b4aba05421ca069c8e20f  gcc/testsuite/gcc.misc-tests/gcov-pr90574-2.c
  64595fd213798d37265f5eb087bb77f2  gcc/testsuite/gcc.misc-tests/gcov-pr94029.c
! 8f90a6ea316080d4a00c636209c7509a  gcc/testsuite/gcc.misc-tests/gcov.exp
  d0c60992e0ef331502b84f8ee13cb818  gcc/testsuite/gcc.misc-tests/gcovpart-13b.c
! 85548e872dac07684e3abdce20cb40dc  gcc/testsuite/gcc.misc-tests/godump-1.c
! 737c236b113f3a0b5c06efada9b038b8  gcc/testsuite/gcc.misc-tests/godump.exp
! 3172af7a22328e332eea5a3876964788  gcc/testsuite/gcc.misc-tests/help.exp
  6d43a784cf19762437a5b9baec4d4095  gcc/testsuite/gcc.misc-tests/i386-pf-3dnow-1.c
  4a06f6c2d9b50ef414030d175fbe9d5c  gcc/testsuite/gcc.misc-tests/i386-pf-athlon-1.c
  bfd2eae1e2b6b0aa804a7e33580dc190  gcc/testsuite/gcc.misc-tests/i386-pf-none-1.c
  81ac61201db56efd77fdfd14cf2e4266  gcc/testsuite/gcc.misc-tests/i386-pf-sse-1.c
! 5526c1afa602cf198a17ad204c66174f  gcc/testsuite/gcc.misc-tests/i386-prefetch.exp
  51bca646196e93b1c8a68319441e0595  gcc/testsuite/gcc.misc-tests/linkage-x.c
  4020995d3b08e117c48c529d5bc0b3ec  gcc/testsuite/gcc.misc-tests/linkage-y.c
! f40ea22d38e34e0fb809a846c64c571e  gcc/testsuite/gcc.misc-tests/linkage.exp
  1d8fa0a1210ed4c4bf0ff4dfa959f060  gcc/testsuite/gcc.misc-tests/matrix1.c
! 50a2e909e6bcc139950be10ed14142a1  gcc/testsuite/gcc.misc-tests/matrix1.exp
  b45579fdac6008721502ddecb5df29d8  gcc/testsuite/gcc.misc-tests/mg-2.c
! d6f17a7dccabf873e3ee33beb66319b0  gcc/testsuite/gcc.misc-tests/mg-2.exp
  fb7a4e029ce05eea8ba0f03f9033caa2  gcc/testsuite/gcc.misc-tests/mg.c
! c09b96de7058f87d468ae78e360f9b44  gcc/testsuite/gcc.misc-tests/mg.exp
! 4b7f41b5fb8569690f3567d0930286d3  gcc/testsuite/gcc.misc-tests/options.exp
! e83cd0e67adb5c439f09429a543be8aa  gcc/testsuite/gcc.misc-tests/output.exp
  69d9b561b303bd96e74ea417f73e1ac5  gcc/testsuite/gcc.misc-tests/outputs-0.c
  773736389c2fb248099dd6dcee0ddb6b  gcc/testsuite/gcc.misc-tests/outputs-1.c
  4bffb1320eb13262d3eb5336a6683a84  gcc/testsuite/gcc.misc-tests/outputs-2.c
! c80eeb9fec68252608ca5667d103aa42  gcc/testsuite/gcc.misc-tests/outputs.exp
  37d75aade49dd3329803e520456ae8a6  gcc/testsuite/gcc.misc-tests/sieve.c
! 1c5c6f85f31e05af0171069f9a2e119f  gcc/testsuite/gcc.misc-tests/sieve.exp
  f0e0d52dbb689249f8d057f00e4c65e9  gcc/testsuite/gcc.misc-tests/sort2.c
! 880a2403dfade4f5ced83505a0a43a1d  gcc/testsuite/gcc.misc-tests/sort2.exp
! db99ea9df53af2aa9156fb039f1d5e57  gcc/testsuite/gcc.src/maintainers.exp
  8031dd3c171877e36f7163b73fe68210  gcc/testsuite/gcc.target/aarch64/121127.c
  512f8592397ac26799ee85d9c29339ec  gcc/testsuite/gcc.target/aarch64/_Float16_1.c
  6bead3d18e15a037cfb743e33e7712a5  gcc/testsuite/gcc.target/aarch64/_Float16_2.c
  d365d8bf0f5478b04e6451262cf0b804  gcc/testsuite/gcc.target/aarch64/_Float16_3.c
! 8947768a6a02f91b8b1431a92aa7f811  gcc/testsuite/gcc.target/aarch64/aapcs64/aapcs64.exp
  fbb13bb7b4d389c258ef20d9aae07cf6  gcc/testsuite/gcc.target/aarch64/aapcs64/abitest-2.h
  c708255687954aa3e3174b83b89e4e66  gcc/testsuite/gcc.target/aarch64/aapcs64/abitest-common.h
  ab893b67ef591ba6b84bda6885255075  gcc/testsuite/gcc.target/aarch64/aapcs64/abitest.S
*************** a6c7d5ab48076a030ed52077beafbecf  gcc/te
*** 47695,47701 ****
  6f60c7c22501fc5c0d017c297a34ddba  gcc/testsuite/gcc.target/aarch64/aapcs64/ice_3.c
  ba077977324443167e28ec8443883dfd  gcc/testsuite/gcc.target/aarch64/aapcs64/ice_4.c
  842b856575c5bd4f4f172d24595e04de  gcc/testsuite/gcc.target/aarch64/aapcs64/ice_5.c
! ef2c68bae661bb6361b0c6a2900cc71b  gcc/testsuite/gcc.target/aarch64/aapcs64/macro-def.h
  239b737e4ae0ac4ef0a4a6c8606c979e  gcc/testsuite/gcc.target/aarch64/aapcs64/rec_align-5.c
  b91fa15b75e9d354f8b92ea86f3726ae  gcc/testsuite/gcc.target/aarch64/aapcs64/rec_align-6.c
  72a59e6b43ba1691c7fe8c2359c4b827  gcc/testsuite/gcc.target/aarch64/aapcs64/rec_align-7.c
--- 49922,49928 ----
  6f60c7c22501fc5c0d017c297a34ddba  gcc/testsuite/gcc.target/aarch64/aapcs64/ice_3.c
  ba077977324443167e28ec8443883dfd  gcc/testsuite/gcc.target/aarch64/aapcs64/ice_4.c
  842b856575c5bd4f4f172d24595e04de  gcc/testsuite/gcc.target/aarch64/aapcs64/ice_5.c
! 55668d6919389c1f507cd65ecc82a46a  gcc/testsuite/gcc.target/aarch64/aapcs64/macro-def.h
  239b737e4ae0ac4ef0a4a6c8606c979e  gcc/testsuite/gcc.target/aarch64/aapcs64/rec_align-5.c
  b91fa15b75e9d354f8b92ea86f3726ae  gcc/testsuite/gcc.target/aarch64/aapcs64/rec_align-6.c
  72a59e6b43ba1691c7fe8c2359c4b827  gcc/testsuite/gcc.target/aarch64/aapcs64/rec_align-7.c
*************** c172a2bb63aafb6a04fa5eeb2164181d  gcc/te
*** 47723,47728 ****
--- 49950,49956 ----
  f909c69af62e7273498ed6f14d6f762d  gcc/testsuite/gcc.target/aarch64/aapcs64/test_25.c
  a2380f9aef93cd91e833b09aef83418b  gcc/testsuite/gcc.target/aarch64/aapcs64/test_26.c
  caefec5d2514b4e71a401919c31ed303  gcc/testsuite/gcc.target/aarch64/aapcs64/test_27.c
+ 8771b6801b03ffcef5671eb83fa75442  gcc/testsuite/gcc.target/aarch64/aapcs64/test_28.c
  888bcd05b6d74c119bdf759f81139756  gcc/testsuite/gcc.target/aarch64/aapcs64/test_3.c
  76633f1505e8f1b7af78ed1a3d382d92  gcc/testsuite/gcc.target/aarch64/aapcs64/test_4.c
  fba1e60e4c1b1d483a419a9dcd3f7608  gcc/testsuite/gcc.target/aarch64/aapcs64/test_5.c
*************** d63d966901b8e8b51837691645468a2c  gcc/te
*** 47764,47774 ****
  9ae942d81ddb29e68f70db9e55725a4b  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-8.c
  dd14302fbe1a7e8e74bc61b31eb30b59  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-9.c
  3f40e5d196a05153206e4941fc3b1d10  gcc/testsuite/gcc.target/aarch64/aapcs64/validate_memory.h
! fb39c3b5d44ea5d29e9ec7a9597b523a  gcc/testsuite/gcc.target/aarch64/aarch64.exp
  5edfd2c8b369aabd5c367fb78ad782bd  gcc/testsuite/gcc.target/aarch64/abd_1.c
  ae513bfb2896c38de994944b104fb7c8  gcc/testsuite/gcc.target/aarch64/abs_1.c
  8a6aed21d2622bf72389f22f09d8bd4b  gcc/testsuite/gcc.target/aarch64/abs_2.c
! 5f82175ed939dca012b0982ed87e3fc0  gcc/testsuite/gcc.target/aarch64/acle/acle.exp
  a545b8f7fc60af12576f85397e1733cb  gcc/testsuite/gcc.target/aarch64/acle/armv8-r.c
  339f7215861041bbe928186d86e2c7b7  gcc/testsuite/gcc.target/aarch64/acle/crc32b.c
  b3b451a8f938e2c0a24c2751eab2c62d  gcc/testsuite/gcc.target/aarch64/acle/crc32cb.c
--- 49992,50002 ----
  9ae942d81ddb29e68f70db9e55725a4b  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-8.c
  dd14302fbe1a7e8e74bc61b31eb30b59  gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-9.c
  3f40e5d196a05153206e4941fc3b1d10  gcc/testsuite/gcc.target/aarch64/aapcs64/validate_memory.h
! f309e0144c9ee8b729ab921507fa4b58  gcc/testsuite/gcc.target/aarch64/aarch64.exp
  5edfd2c8b369aabd5c367fb78ad782bd  gcc/testsuite/gcc.target/aarch64/abd_1.c
  ae513bfb2896c38de994944b104fb7c8  gcc/testsuite/gcc.target/aarch64/abs_1.c
  8a6aed21d2622bf72389f22f09d8bd4b  gcc/testsuite/gcc.target/aarch64/abs_2.c
! 1a7ccb40e3e56d330628a0d87661662b  gcc/testsuite/gcc.target/aarch64/acle/acle.exp
  a545b8f7fc60af12576f85397e1733cb  gcc/testsuite/gcc.target/aarch64/acle/armv8-r.c
  339f7215861041bbe928186d86e2c7b7  gcc/testsuite/gcc.target/aarch64/acle/crc32b.c
  b3b451a8f938e2c0a24c2751eab2c62d  gcc/testsuite/gcc.target/aarch64/acle/crc32cb.c
*************** acaaa7b0871f73bf93a15b8ccdd87575  gcc/te
*** 47780,47785 ****
--- 50008,50026 ----
  fa7ed3baf58293efac2270a829b36fbf  gcc/testsuite/gcc.target/aarch64/acle/crc32w.c
  56cadf41ea040c38f913b6c3e6475be3  gcc/testsuite/gcc.target/aarch64/acle/jcvt_1.c
  a7c4014d53740d897076d06edcac5aaa  gcc/testsuite/gcc.target/aarch64/acle/jcvt_2.c
+ ccf5175907998c0c871634fd51ca889f  gcc/testsuite/gcc.target/aarch64/acle/ls64_asm.c
+ 5d5290a990ac45d048d05d14caca4874  gcc/testsuite/gcc.target/aarch64/acle/ls64_ld64b-2.c
+ 1c5b2165b1d114daea4683d247a75998  gcc/testsuite/gcc.target/aarch64/acle/ls64_ld64b-3.c
+ fa1ccdd20a958a2e7bc98028d2b2a9f0  gcc/testsuite/gcc.target/aarch64/acle/ls64_ld64b.c
+ 1ffa16c70b659d0b3a7b52c3c3f51adb  gcc/testsuite/gcc.target/aarch64/acle/ls64_ld_st_o0.c
+ 16fffb65ffb6236dc8280f6dbd45b120  gcc/testsuite/gcc.target/aarch64/acle/ls64_st64b-2.c
+ 97d4553a6c2fe6ee3d781f1d446bcd13  gcc/testsuite/gcc.target/aarch64/acle/ls64_st64b.c
+ 75d2799589f92d6d9e81a786b103d9b9  gcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv-2.c
+ dec1a3233a6a096941d8aabe6ac2598d  gcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv-3.c
+ b78a4169933a9354d9c9f02a41a28212  gcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv.c
+ 4af384ab8a48684efd94c0ed76595201  gcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv0-2.c
+ c2eae4877980c06eaa23ea8db426a5c1  gcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv0-3.c
+ a9efd5e0ebc228f128308006c2db9c2b  gcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv0.c
  ff3a09d9afde293ac1598cb7530ead9d  gcc/testsuite/gcc.target/aarch64/acle/memtag_1.c
  722af47b92a99bf8f052eb56ae7c0c5e  gcc/testsuite/gcc.target/aarch64/acle/memtag_2.c
  e2be4748443bb6caa176b86d28972388  gcc/testsuite/gcc.target/aarch64/acle/memtag_3.c
*************** e2b1388fba47b95c8b27a3e1a29953ff  gcc/te
*** 47794,47800 ****
  caf80fb3defd2872fa7d7dc3fa721878  gcc/testsuite/gcc.target/aarch64/adds2.c
  480e16f2c7cfb659fed5b0f7a3c1547a  gcc/testsuite/gcc.target/aarch64/adds3.c
  55ff9765cb94d7817c4c42421ab1deaa  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/README
! 58ffcc255b38c9fcfe871433bfafbbea  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/advsimd-intrinsics.exp
  6be72d4411b42d96dbefbc2a2b05d2be  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h
  012249ec105164442e4c8e2f09841d19  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c
  13fdac8c1ccc57731f09af48efde5d69  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_get-be.c
--- 50035,50041 ----
  caf80fb3defd2872fa7d7dc3fa721878  gcc/testsuite/gcc.target/aarch64/adds2.c
  480e16f2c7cfb659fed5b0f7a3c1547a  gcc/testsuite/gcc.target/aarch64/adds3.c
  55ff9765cb94d7817c4c42421ab1deaa  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/README
! cd0020f40fd7a6556989f0ac25317fcd  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/advsimd-intrinsics.exp
  6be72d4411b42d96dbefbc2a2b05d2be  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h
  012249ec105164442e4c8e2f09841d19  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c
  13fdac8c1ccc57731f09af48efde5d69  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_get-be.c
*************** caf80fb3defd2872fa7d7dc3fa721878  gcc/te
*** 47802,47808 ****
  ebd46f74a2c7a6abc8e49dc80272e3d1  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_reinterpret.c
  d4ef0512d140a7e30154fc8ff31d8334  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vect_copy_lane_1.c
  c4567c23b44351a0b99fbcb9fb0d9d49  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vldN_lane_1.c
! 93109efb21b15183d46639be07f2592d  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vldN_lane_2.c
  749c0ab50a2fd6d1e95369ac1890546d  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vldn.c
  4e3369de9a37b3834a0ff4488c6ad97f  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vstN_lane_1.c
  37f70f839a6f3496cd1bec9d4bb139e2  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vstN_lane_2.c
--- 50043,50049 ----
  ebd46f74a2c7a6abc8e49dc80272e3d1  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_reinterpret.c
  d4ef0512d140a7e30154fc8ff31d8334  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vect_copy_lane_1.c
  c4567c23b44351a0b99fbcb9fb0d9d49  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vldN_lane_1.c
! ceb2766a27eeeb5d6674fb8cba3e85d1  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vldN_lane_2.c
  749c0ab50a2fd6d1e95369ac1890546d  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vldn.c
  4e3369de9a37b3834a0ff4488c6ad97f  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vstN_lane_1.c
  37f70f839a6f3496cd1bec9d4bb139e2  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bf16_vstN_lane_2.c
*************** ec22fbdd8271e68304a64fd92533fcc2  gcc/te
*** 47828,47833 ****
--- 50069,50078 ----
  e9dbf1dca3c765be5169575cd8169e1c  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/compute-ref-data.h
  0244d27c155f8b9253241c5715fda41f  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/p64_p128.c
  dd4fa55b661e81d32222124388be6ee7  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/pr98852.c
+ 96a535921f3e2c472376fe13d48fbc68  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/shrn-1.c
+ 37a2a220e3b7a55f420646c39ad216a0  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/shrn-2.c
+ 78604e719b0cb979bfac858aec3b5573  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/shrn-3.c
+ feb9de3829400ba7f5188884c30ffa9a  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/shrn-4.c
  4023d80c766d189e8bfe840c76d9c25c  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/smlal-smlsl-mull-optimized.c
  9afa5895d2eaec5abc2b2a529150bc8a  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/ternary_scalar_op.inc
  b79029ba762b876694e98d70ae540bc1  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/unary_op.inc
*************** a4b26fe16af77e951b6926c472e2bf1e  gcc/te
*** 48095,48100 ****
--- 50340,50346 ----
  2397e63fdfaa77f324171b5a1d85ac58  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmlXl_lane.inc
  df3b1a9e15422a9a34b6051cc01f9016  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmlXl_n.inc
  2bc9a208fbe6ee9b42f28b1b62597b84  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmla.c
+ d69b6e2734314a638809db203f1b671b  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmla_float_not_fused.c
  2d38b6e83edc1c11ee6b633494717d4f  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmla_lane.c
  96185b13f3b28f7e8859198561fb130b  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmla_n.c
  fc8c4e485836f08b69e49a321add9309  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmlal.c
*************** a5a343c91e4cec3969d5f0adf45acce5  gcc/te
*** 48105,48110 ****
--- 50351,50357 ----
  2ed34a5a29e9841eba0d9f8b24adc3b8  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmlal_lane.c
  671a0917fdb129328fcb24ef41e62067  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmlal_n.c
  382fe4be206eda2ada7254e17ab813a8  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmls.c
+ 6d727e624860a05c1fec8d44e06ea89b  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmls_float_not_fused.c
  aa21c1305430685521be8df09f88e84e  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmls_lane.c
  4632ab8adb7934b5c15eddc49e459667  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmls_n.c
  b0f42fb7ce16b63bb85f5825918657d7  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vmlsl.c
*************** cb86e8ee204d5b4ebe57f52a0952bb06  gcc/te
*** 48246,48251 ****
--- 50493,50506 ----
  2c8d104723a60c270b5fd21bcd214108  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vrsubhn_high.c
  1343bedec9ea6fb2b0ff73345e0ca329  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vsXi_n.inc
  c4b8d2884f5c8a131e9042d674edd379  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vset_lane.c
+ 6c7b8805ef9e7a98007bb4d1eb7fdd5b  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshl-opt-1.c
+ 9bbd4c0e5a1d0a9bed5c4f052f74d85f  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshl-opt-2.c
+ 6ec8275a10f554c5c4615afc04fd4149  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshl-opt-3.c
+ 80534931772dc2c83ea0c3edb6bc1ed5  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshl-opt-4.c
+ 78d8a614002fb0b6e0398898ff4e1238  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshl-opt-5.c
+ 2831aa5e41fd7b4dad442ba71dc9ae01  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshl-opt-6.c
+ 6de2876bec073f844e0e2ca24fdf21eb  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshl-opt-7.c
+ 907cb28ddd3631f5becb477e3ff66cee  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshl-opt-8.c
  6a857b077efa8b7f609ef8921a2e8212  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshl.c
  208eb0616ca6262b996be2746859d1ea  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshl_n.c
  4a86ff5d1f8de86dab9961e7ffbc4bcc  gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vshll_n.c
*************** a5475847de61efdab06cd4fa43cf0e12  gcc/te
*** 48384,48395 ****
  dec6fa45fd2a29df2bb34f29716542bd  gcc/testsuite/gcc.target/aarch64/asm-flag-3.c
  84cc9bafe1857dc2a9bd4ae96b8c27e3  gcc/testsuite/gcc.target/aarch64/asm-flag-5.c
  81557d2f721a4a556b0a0651b5d87cbd  gcc/testsuite/gcc.target/aarch64/asm-flag-6.c
  a0366d18b82e7b349de74147a8ed728e  gcc/testsuite/gcc.target/aarch64/asm-x-constraint-1.c
  9ddf4430e4abf2352e0ad119aab27915  gcc/testsuite/gcc.target/aarch64/asm-y-constraint-1.c
  4243a23aa0a384578b2d05d3f99be487  gcc/testsuite/gcc.target/aarch64/assembler_arch_1.c
  d711069757aeb0145e840cff37701747  gcc/testsuite/gcc.target/aarch64/atomic-comp-swap-release-acquire.c
  200f8abf16f58811681c3384210a92a2  gcc/testsuite/gcc.target/aarch64/atomic-comp-swap-release-acquire.x
! bf99e1ab70a2d513a29aa4a8790b4802  gcc/testsuite/gcc.target/aarch64/atomic-inst-cas.c
  9a5bcedfd94d4a7e11d3c1b9d6753ea1  gcc/testsuite/gcc.target/aarch64/atomic-inst-ldadd.c
  7b7f7af9f2d38faeed01a623e71fa306  gcc/testsuite/gcc.target/aarch64/atomic-inst-ldlogic.c
  754794845fdc42e1225bcbf0a32aede0  gcc/testsuite/gcc.target/aarch64/atomic-inst-ops.inc
--- 50639,50651 ----
  dec6fa45fd2a29df2bb34f29716542bd  gcc/testsuite/gcc.target/aarch64/asm-flag-3.c
  84cc9bafe1857dc2a9bd4ae96b8c27e3  gcc/testsuite/gcc.target/aarch64/asm-flag-5.c
  81557d2f721a4a556b0a0651b5d87cbd  gcc/testsuite/gcc.target/aarch64/asm-flag-6.c
+ 58ce71dec34e038ef9935b9ddf669c0b  gcc/testsuite/gcc.target/aarch64/asm-flag-7.c
  a0366d18b82e7b349de74147a8ed728e  gcc/testsuite/gcc.target/aarch64/asm-x-constraint-1.c
  9ddf4430e4abf2352e0ad119aab27915  gcc/testsuite/gcc.target/aarch64/asm-y-constraint-1.c
  4243a23aa0a384578b2d05d3f99be487  gcc/testsuite/gcc.target/aarch64/assembler_arch_1.c
  d711069757aeb0145e840cff37701747  gcc/testsuite/gcc.target/aarch64/atomic-comp-swap-release-acquire.c
  200f8abf16f58811681c3384210a92a2  gcc/testsuite/gcc.target/aarch64/atomic-comp-swap-release-acquire.x
! 6786b04cabd25c840ac23b1627d4df95  gcc/testsuite/gcc.target/aarch64/atomic-inst-cas.c
  9a5bcedfd94d4a7e11d3c1b9d6753ea1  gcc/testsuite/gcc.target/aarch64/atomic-inst-ldadd.c
  7b7f7af9f2d38faeed01a623e71fa306  gcc/testsuite/gcc.target/aarch64/atomic-inst-ldlogic.c
  754794845fdc42e1225bcbf0a32aede0  gcc/testsuite/gcc.target/aarch64/atomic-inst-ops.inc
*************** e7b8ba1ea741c7a9f79ac8356c698d78  gcc/te
*** 48418,48423 ****
--- 50674,50699 ----
  54ef40f0c37a67de10bb882fb6956099  gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c
  51e5228d8a5c0d375800a8ddb69247ca  gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c
  07437ce12511a14a25ac0b125b050902  gcc/testsuite/gcc.target/aarch64/attr-aligned.c
+ b02b567952b3733bfbd6ebc2d1065fa0  gcc/testsuite/gcc.target/aarch64/auto-init-1.c
+ f5b1276588c9d9ba2f92070dd86994a1  gcc/testsuite/gcc.target/aarch64/auto-init-2.c
+ e3003ad7bf9014830c6f9c58e85b082a  gcc/testsuite/gcc.target/aarch64/auto-init-3.c
+ e2630d4e02d27500ef42c075fea9596a  gcc/testsuite/gcc.target/aarch64/auto-init-4.c
+ 957708ea83978ca85b51a492c2777540  gcc/testsuite/gcc.target/aarch64/auto-init-5.c
+ 46b2038d6a8de54fe8ef127b8d150cc2  gcc/testsuite/gcc.target/aarch64/auto-init-6.c
+ 28a7211f85135d0e2e4ec718a410924a  gcc/testsuite/gcc.target/aarch64/auto-init-7.c
+ 82a86967361fb139ed59816cd69721e4  gcc/testsuite/gcc.target/aarch64/auto-init-8.c
+ 630c742bc2781439914d777f777f39fb  gcc/testsuite/gcc.target/aarch64/auto-init-padding-1.c
+ 6152eb7bd8e8fb962404c859fd655d9d  gcc/testsuite/gcc.target/aarch64/auto-init-padding-10.c
+ ba3b80a743046593df9ed388ceb66f03  gcc/testsuite/gcc.target/aarch64/auto-init-padding-11.c
+ cfcd3e6d235151d91afb31b338a749e2  gcc/testsuite/gcc.target/aarch64/auto-init-padding-12.c
+ 2b71c6e5d5d4f957dc77774a3bdf765d  gcc/testsuite/gcc.target/aarch64/auto-init-padding-2.c
+ 4bc5cabdb6a9aac6ba4d401181c48ed7  gcc/testsuite/gcc.target/aarch64/auto-init-padding-3.c
+ 9f02bb828eefe3a33fb0ac132019fe2c  gcc/testsuite/gcc.target/aarch64/auto-init-padding-4.c
+ 418b10ba7b8091584dc3bcc8c4ccefc7  gcc/testsuite/gcc.target/aarch64/auto-init-padding-5.c
+ a8a16d0937642cc260a09db6d3387b40  gcc/testsuite/gcc.target/aarch64/auto-init-padding-6.c
+ de76859b307e32b03a98f03a94e54fe0  gcc/testsuite/gcc.target/aarch64/auto-init-padding-7.c
+ 585eda662bdd7f06f3d17aafcefa8670  gcc/testsuite/gcc.target/aarch64/auto-init-padding-8.c
+ d98a95bb6eca18059fc08f9f2ea22d0c  gcc/testsuite/gcc.target/aarch64/auto-init-padding-9.c
  b46f641f0dcc38f3e3de3f9a90702753  gcc/testsuite/gcc.target/aarch64/bfloat16_scalar_1.c
  855cfd1a9802da7ce78ef8175531090b  gcc/testsuite/gcc.target/aarch64/bfloat16_scalar_2.c
  d6a50d584b2477098572c1a78a597d52  gcc/testsuite/gcc.target/aarch64/bfloat16_scalar_3.c
*************** b13075188317e306c6968ca79a2b3829  gcc/te
*** 48430,48435 ****
--- 50706,50712 ----
  49eb2d9705fe019a5255cd64f3381ec1  gcc/testsuite/gcc.target/aarch64/bfloat16_vector_typecheck_2.c
  61dac314ba6a1629bed37f7dc73024de  gcc/testsuite/gcc.target/aarch64/bfxil_1.c
  6378518f0a698c129d49f6f5eb229d63  gcc/testsuite/gcc.target/aarch64/bfxil_2.c
+ 6dc62170423fa4b690cc016a9b80d5a7  gcc/testsuite/gcc.target/aarch64/bic-bitmask-1.c
  e83c37f9be2990a7cda9a4dded6d46e3  gcc/testsuite/gcc.target/aarch64/bic_imm_1.c
  fdee6dc65f1aea1fb6a62ac64d03d92d  gcc/testsuite/gcc.target/aarch64/bics_1.c
  4c64364ab565ca51532520ed434bbf58  gcc/testsuite/gcc.target/aarch64/bics_2.c
*************** fdee6dc65f1aea1fb6a62ac64d03d92d  gcc/te
*** 48437,48443 ****
  7b6b35a52fbd180696cad88dbba07bee  gcc/testsuite/gcc.target/aarch64/bics_4.c
  dbf9d0b9347271827283e2f005a43518  gcc/testsuite/gcc.target/aarch64/bics_5.c
  11f6f9054981704db09136d921c586d4  gcc/testsuite/gcc.target/aarch64/branch-protection-attr-2.c
! d7e52c3c883fc5ffda3d68cfbc199f9c  gcc/testsuite/gcc.target/aarch64/branch-protection-attr.c
  c45ad55864031fa75ffa4f831160438a  gcc/testsuite/gcc.target/aarch64/branch-protection-option-2.c
  43fb9dc4a9b688a1d2b0ab684d2f58d0  gcc/testsuite/gcc.target/aarch64/branch-protection-option.c
  cb2d59ab293179fb8d00b44de02f2556  gcc/testsuite/gcc.target/aarch64/bsl-idiom.c
--- 50714,50720 ----
  7b6b35a52fbd180696cad88dbba07bee  gcc/testsuite/gcc.target/aarch64/bics_4.c
  dbf9d0b9347271827283e2f005a43518  gcc/testsuite/gcc.target/aarch64/bics_5.c
  11f6f9054981704db09136d921c586d4  gcc/testsuite/gcc.target/aarch64/branch-protection-attr-2.c
! b6fc023f262312a065344653a280322f  gcc/testsuite/gcc.target/aarch64/branch-protection-attr.c
  c45ad55864031fa75ffa4f831160438a  gcc/testsuite/gcc.target/aarch64/branch-protection-option-2.c
  43fb9dc4a9b688a1d2b0ab684d2f58d0  gcc/testsuite/gcc.target/aarch64/branch-protection-option.c
  cb2d59ab293179fb8d00b44de02f2556  gcc/testsuite/gcc.target/aarch64/bsl-idiom.c
*************** f0d278d66f3c6d099e299ada3c0f2f5a  gcc/te
*** 48491,48497 ****
  e8f539acbee96c6f26c7eb82b2275f73  gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-2.c
  bacc2bf13ff0d50de57c856b6cfe89f2  gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-3.c
  204fe994da11aab4c0f8f0a889d976ad  gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-4.c
! 5f82175ed939dca012b0982ed87e3fc0  gcc/testsuite/gcc.target/aarch64/cpunative/aarch64-cpunative.exp
  f88dcec7a52a0d115da213f16170f154  gcc/testsuite/gcc.target/aarch64/cpunative/info_0
  8d55917f3f8bda7a065c7a0f0fb75c4b  gcc/testsuite/gcc.target/aarch64/cpunative/info_1
  ee8eca9c8007ef2044353709e26a2510  gcc/testsuite/gcc.target/aarch64/cpunative/info_10
--- 50768,50774 ----
  e8f539acbee96c6f26c7eb82b2275f73  gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-2.c
  bacc2bf13ff0d50de57c856b6cfe89f2  gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-3.c
  204fe994da11aab4c0f8f0a889d976ad  gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-4.c
! 1a7ccb40e3e56d330628a0d87661662b  gcc/testsuite/gcc.target/aarch64/cpunative/aarch64-cpunative.exp
  f88dcec7a52a0d115da213f16170f154  gcc/testsuite/gcc.target/aarch64/cpunative/info_0
  8d55917f3f8bda7a065c7a0f0fb75c4b  gcc/testsuite/gcc.target/aarch64/cpunative/info_1
  ee8eca9c8007ef2044353709e26a2510  gcc/testsuite/gcc.target/aarch64/cpunative/info_10
*************** c84ec68e16463ed98fee3cd8cb4e230f  gcc/te
*** 48500,48505 ****
--- 50777,50784 ----
  f88dcec7a52a0d115da213f16170f154  gcc/testsuite/gcc.target/aarch64/cpunative/info_13
  0e1794c5980d78e11a9aff64bd2dc530  gcc/testsuite/gcc.target/aarch64/cpunative/info_14
  a83f195cec2faf2fbf29ad0e4f2fa03e  gcc/testsuite/gcc.target/aarch64/cpunative/info_15
+ 6b4accde7a3f09a7ad6afd867b6b510e  gcc/testsuite/gcc.target/aarch64/cpunative/info_16
+ 6b4accde7a3f09a7ad6afd867b6b510e  gcc/testsuite/gcc.target/aarch64/cpunative/info_17
  4b5005c4193fa80868408bf4492b4e3b  gcc/testsuite/gcc.target/aarch64/cpunative/info_2
  4c4387d4071cf10c793b4efe11f43439  gcc/testsuite/gcc.target/aarch64/cpunative/info_3
  d8a7caffcc99feff5312001aed51cd38  gcc/testsuite/gcc.target/aarch64/cpunative/info_4
*************** d381cd3e88e2680adaf2d96ab40c7f36  gcc/te
*** 48516,48521 ****
--- 50795,50802 ----
  c033638d0946e9ee53dca3d93087a1e9  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_13.c
  6053245b4b2e80b7e957f46340ac4844  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_14.c
  1edb30a14c92c1f3d8768f2fe63085ab  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_15.c
+ 8e02152777262240d455bd509c70d382  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_16.c
+ 4fcc3084ec949e5f38385c554799a1f1  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_17.c
  ae5358d52499de77a7a1beac3683c709  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_2.c
  5932d955ed9dc11faefb9f331763ff2c  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_3.c
  cfd988497c936bc048f9b952dc82ebac  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_4.c
*************** c90274917a74a6e06b5774cd05a57c90  gcc/te
*** 48524,48535 ****
  8d0c9405c9362c5b0d9d432d05e1a3d0  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_7.c
  464a3107496c61df0ccb63ddc46e787f  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_8.c
  3a30be9f048052ce41672d65dd8f9fed  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_9.c
! e7f2c8bc85b290199241316dcf513df5  gcc/testsuite/gcc.target/aarch64/cpymem-q-reg_1.c
  e127674777b8d02e7ad1d0d85afb8eda  gcc/testsuite/gcc.target/aarch64/csel_bfx_1.c
  0f38f1bf69aced631eb538fe6f944aad  gcc/testsuite/gcc.target/aarch64/csel_imms_inc_1.c
  84a090e1555a75d7d6e3d23e245a0d46  gcc/testsuite/gcc.target/aarch64/csinc-1.c
  af3d0bc9d40b3fb7c6426688a1d29602  gcc/testsuite/gcc.target/aarch64/csinc-2.c
  eebd6ca7c2a0fe9846bf88388a00d172  gcc/testsuite/gcc.target/aarch64/csinv-1.c
  dee20761ab09d0689a56f667594a30a7  gcc/testsuite/gcc.target/aarch64/csinv-neg.c
  daa118ed7835c32ea71c32e65d22689f  gcc/testsuite/gcc.target/aarch64/csneg-1.c
  f15d1ff83066971ce9a42593ae9e147c  gcc/testsuite/gcc.target/aarch64/ctz.c
--- 50805,50818 ----
  8d0c9405c9362c5b0d9d432d05e1a3d0  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_7.c
  464a3107496c61df0ccb63ddc46e787f  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_8.c
  3a30be9f048052ce41672d65dd8f9fed  gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_9.c
! e8ccec6b2fb8a30023cf88dcf2548dba  gcc/testsuite/gcc.target/aarch64/cpymem-q-reg_1.c
! 8d232ec62529aafba12431c49d0e03d4  gcc/testsuite/gcc.target/aarch64/cpymem-size.c
  e127674777b8d02e7ad1d0d85afb8eda  gcc/testsuite/gcc.target/aarch64/csel_bfx_1.c
  0f38f1bf69aced631eb538fe6f944aad  gcc/testsuite/gcc.target/aarch64/csel_imms_inc_1.c
  84a090e1555a75d7d6e3d23e245a0d46  gcc/testsuite/gcc.target/aarch64/csinc-1.c
  af3d0bc9d40b3fb7c6426688a1d29602  gcc/testsuite/gcc.target/aarch64/csinc-2.c
  eebd6ca7c2a0fe9846bf88388a00d172  gcc/testsuite/gcc.target/aarch64/csinv-1.c
+ 6410b551a20f2f0c610819e3d5145b76  gcc/testsuite/gcc.target/aarch64/csinv-neg-1.c
  dee20761ab09d0689a56f667594a30a7  gcc/testsuite/gcc.target/aarch64/csinv-neg.c
  daa118ed7835c32ea71c32e65d22689f  gcc/testsuite/gcc.target/aarch64/csneg-1.c
  f15d1ff83066971ce9a42593ae9e147c  gcc/testsuite/gcc.target/aarch64/ctz.c
*************** aae1cd7b85cfa4ed915a5b8a0b263fda  gcc/te
*** 48542,48548 ****
  8dac5a05d1eca8860b3df16bc7b03f2a  gcc/testsuite/gcc.target/aarch64/extend-syntax.c
  4703bff993ef8bad5cc876cd178c66da  gcc/testsuite/gcc.target/aarch64/extend.c
  0b2712c817ff082c0b56ddf2137cd33f  gcc/testsuite/gcc.target/aarch64/extr.c
! 1713cbec599916e83b02ac76cec4249c  gcc/testsuite/gcc.target/aarch64/extract_zero_extend.c
  091dae5bfc496fe17317b21ad9dec16d  gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_1.c
  7590a72d053c270aa13c47a4d1c93977  gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_2.c
  0b34d01deb7ba10b2680ec6c1f87743b  gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_3.c
--- 50825,50831 ----
  8dac5a05d1eca8860b3df16bc7b03f2a  gcc/testsuite/gcc.target/aarch64/extend-syntax.c
  4703bff993ef8bad5cc876cd178c66da  gcc/testsuite/gcc.target/aarch64/extend.c
  0b2712c817ff082c0b56ddf2137cd33f  gcc/testsuite/gcc.target/aarch64/extr.c
! 0742f6feeaef7434aa429feab4d5e613  gcc/testsuite/gcc.target/aarch64/extract_zero_extend.c
  091dae5bfc496fe17317b21ad9dec16d  gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_1.c
  7590a72d053c270aa13c47a4d1c93977  gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_2.c
  0b34d01deb7ba10b2680ec6c1f87743b  gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_3.c
*************** bd03ecf6b19690f6dc1bbbd227d20b37  gcc/te
*** 48574,48582 ****
  e72513b4caa62260940a267106d0a423  gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c
  d1278d287cb5cdd487a5dc5eb1a39f07  gcc/testsuite/gcc.target/aarch64/fmadd.c
  09f48eba4ef72a066deca3509e7bedca  gcc/testsuite/gcc.target/aarch64/fmaxmin.c
! a99112b5b4f5a904692256acd1e3f940  gcc/testsuite/gcc.target/aarch64/fmla_intrinsic_1.c
  a1c65ee205fc9435b83f0955d7d41618  gcc/testsuite/gcc.target/aarch64/fmls.c
! 8991767ce216e5912eb6891d3918fb71  gcc/testsuite/gcc.target/aarch64/fmls_intrinsic_1.c
  c4fd6df43c9e9e5b7239b8df0bebf345  gcc/testsuite/gcc.target/aarch64/fmovd-zero-mem.c
  92f126169f4b80f84e3a069a088c9866  gcc/testsuite/gcc.target/aarch64/fmovd-zero-reg.c
  4909e9d6cca81f22114a60c988473146  gcc/testsuite/gcc.target/aarch64/fmovd.c
--- 50857,50869 ----
  e72513b4caa62260940a267106d0a423  gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c
  d1278d287cb5cdd487a5dc5eb1a39f07  gcc/testsuite/gcc.target/aarch64/fmadd.c
  09f48eba4ef72a066deca3509e7bedca  gcc/testsuite/gcc.target/aarch64/fmaxmin.c
! 591fdb9779be4d849e1234f176b71721  gcc/testsuite/gcc.target/aarch64/fmaxnm_1.c
! fd8eaccaf40008c602225ab8f19de8a8  gcc/testsuite/gcc.target/aarch64/fmaxnm_2.c
! 0e805451f2f708d5efd57db9d7fec27c  gcc/testsuite/gcc.target/aarch64/fminnm_1.c
! 696d0289bcc0e02f3503469c7a7adb7b  gcc/testsuite/gcc.target/aarch64/fminnm_2.c
! 30e3c44bc534f7de8a54f95076511219  gcc/testsuite/gcc.target/aarch64/fmla_intrinsic_1.c
  a1c65ee205fc9435b83f0955d7d41618  gcc/testsuite/gcc.target/aarch64/fmls.c
! 50b074aca322c6ef27dff4382b239263  gcc/testsuite/gcc.target/aarch64/fmls_intrinsic_1.c
  c4fd6df43c9e9e5b7239b8df0bebf345  gcc/testsuite/gcc.target/aarch64/fmovd-zero-mem.c
  92f126169f4b80f84e3a069a088c9866  gcc/testsuite/gcc.target/aarch64/fmovd-zero-reg.c
  4909e9d6cca81f22114a60c988473146  gcc/testsuite/gcc.target/aarch64/fmovd.c
*************** c3c69a71f2670cdbe2550868228987d2  gcc/te
*** 48587,48593 ****
  601316c07515259ff9862a3619b4369d  gcc/testsuite/gcc.target/aarch64/fmovld-zero-reg.c
  1b65f09f40144de16a3ef9f82ee84e8e  gcc/testsuite/gcc.target/aarch64/fmul_fcvt_1.c
  9c8230d12decbc2037ad11b8e6be1ce2  gcc/testsuite/gcc.target/aarch64/fmul_fcvt_2.c
! bb0946f86cfba46571a291b6570efa74  gcc/testsuite/gcc.target/aarch64/fmul_intrinsic_1.c
  280080ede1b5fe22866a6d647c295c88  gcc/testsuite/gcc.target/aarch64/fmul_scvtf_1.c
  b41dba1046447c932cc183fe90f50467  gcc/testsuite/gcc.target/aarch64/fnmadd-fastmath.c
  b22aa9cc27c6d5f12963d16ea8b99803  gcc/testsuite/gcc.target/aarch64/fnmul-1.c
--- 50874,50881 ----
  601316c07515259ff9862a3619b4369d  gcc/testsuite/gcc.target/aarch64/fmovld-zero-reg.c
  1b65f09f40144de16a3ef9f82ee84e8e  gcc/testsuite/gcc.target/aarch64/fmul_fcvt_1.c
  9c8230d12decbc2037ad11b8e6be1ce2  gcc/testsuite/gcc.target/aarch64/fmul_fcvt_2.c
! 7b71af44f426c02a57a50cd617031d72  gcc/testsuite/gcc.target/aarch64/fmul_intrinsic_1.c
! 465c5e93e0d87400182fa5e10e3467e7  gcc/testsuite/gcc.target/aarch64/fmul_lane_1.c
  280080ede1b5fe22866a6d647c295c88  gcc/testsuite/gcc.target/aarch64/fmul_scvtf_1.c
  b41dba1046447c932cc183fe90f50467  gcc/testsuite/gcc.target/aarch64/fnmadd-fastmath.c
  b22aa9cc27c6d5f12963d16ea8b99803  gcc/testsuite/gcc.target/aarch64/fnmul-1.c
*************** a1212235242dd12baac6ac6d3f0f04ad  gcc/te
*** 48596,48602 ****
  37fb660ad953888e296980c0d2b85a7c  gcc/testsuite/gcc.target/aarch64/fnmul-4.c
  a9470d48ec15369aea11218770e41e89  gcc/testsuite/gcc.target/aarch64/fp16/f16_convs_1.c
  1a65d9a8643a40367284cf31d1d3b963  gcc/testsuite/gcc.target/aarch64/fp16/f16_convs_2.c
! 95796f3c983ea6e2e09db7213513e5ef  gcc/testsuite/gcc.target/aarch64/fp16/fp16.exp
  c789e3d353f9e2287a4c9ef36dffcb2f  gcc/testsuite/gcc.target/aarch64/fp16/set_zero_1.c
  33e7feca82b3b0b54d58bbcd49d61f40  gcc/testsuite/gcc.target/aarch64/fp16_fmul_high.h
  7aa945158b0a4b5f86014c0b7d857a22  gcc/testsuite/gcc.target/aarch64/fp16_fmul_high_1.c
--- 50884,50890 ----
  37fb660ad953888e296980c0d2b85a7c  gcc/testsuite/gcc.target/aarch64/fnmul-4.c
  a9470d48ec15369aea11218770e41e89  gcc/testsuite/gcc.target/aarch64/fp16/f16_convs_1.c
  1a65d9a8643a40367284cf31d1d3b963  gcc/testsuite/gcc.target/aarch64/fp16/f16_convs_2.c
! 16bbf83d0ec6ab08b76e56a77e144f6b  gcc/testsuite/gcc.target/aarch64/fp16/fp16.exp
  c789e3d353f9e2287a4c9ef36dffcb2f  gcc/testsuite/gcc.target/aarch64/fp16/set_zero_1.c
  33e7feca82b3b0b54d58bbcd49d61f40  gcc/testsuite/gcc.target/aarch64/fp16_fmul_high.h
  7aa945158b0a4b5f86014c0b7d857a22  gcc/testsuite/gcc.target/aarch64/fp16_fmul_high_1.c
*************** e2e19406d7c29a6c598ee660aaff3ca2  gcc/te
*** 48617,48625 ****
  2e2572d6fadd7421a17d8a41cca49d30  gcc/testsuite/gcc.target/aarch64/fpcr_fpsr_1.c
  31bd199bf5169831bc552ffd67ecd3f5  gcc/testsuite/gcc.target/aarch64/frecpe_1.c
  c4aa8a1f0ad2e74a9d73da81126c1f7e  gcc/testsuite/gcc.target/aarch64/frecpe_2.c
! 81d3b6315279d49bd6ff13f1b22d348d  gcc/testsuite/gcc.target/aarch64/frint.x
! 9c2fa782435fadcb543f6b3244f77262  gcc/testsuite/gcc.target/aarch64/frint_double.c
! ed2b38705092e36a5984e33769be3d5a  gcc/testsuite/gcc.target/aarch64/frint_float.c
  7f8140bc0d65dde3896572f2fe084146  gcc/testsuite/gcc.target/aarch64/fuse-caller-save.c
  6ed33457f293332f03ce167c620b35b0  gcc/testsuite/gcc.target/aarch64/fuse_adrp_add_1.c
  814f2a8701d47a79b645e43e6fe31b57  gcc/testsuite/gcc.target/aarch64/get_fpcr64_1.c
--- 50905,50913 ----
  2e2572d6fadd7421a17d8a41cca49d30  gcc/testsuite/gcc.target/aarch64/fpcr_fpsr_1.c
  31bd199bf5169831bc552ffd67ecd3f5  gcc/testsuite/gcc.target/aarch64/frecpe_1.c
  c4aa8a1f0ad2e74a9d73da81126c1f7e  gcc/testsuite/gcc.target/aarch64/frecpe_2.c
! 88cae34e11d9f2c547f396460813b774  gcc/testsuite/gcc.target/aarch64/frint.x
! 22ce675229a62ee836f1fbec03e0a9f1  gcc/testsuite/gcc.target/aarch64/frint_double.c
! e415b924a99a0696f070ee6cf8357d54  gcc/testsuite/gcc.target/aarch64/frint_float.c
  7f8140bc0d65dde3896572f2fe084146  gcc/testsuite/gcc.target/aarch64/fuse-caller-save.c
  6ed33457f293332f03ce167c620b35b0  gcc/testsuite/gcc.target/aarch64/fuse_adrp_add_1.c
  814f2a8701d47a79b645e43e6fe31b57  gcc/testsuite/gcc.target/aarch64/get_fpcr64_1.c
*************** caaafb769b844ad26e03a5f739c93732  gcc/te
*** 48638,48643 ****
--- 50926,50933 ----
  b37a5781e82510dfa7ecdf3ce4922a58  gcc/testsuite/gcc.target/aarch64/insv_1.c
  a897ae01d807185bd4ca7f1587e181d9  gcc/testsuite/gcc.target/aarch64/insv_2.c
  18f0bd2efa738426efce6208b83e0cbd  gcc/testsuite/gcc.target/aarch64/int_mov_immediate_1.c
+ 2feabf7a23a544e445cd6f1d402811d0  gcc/testsuite/gcc.target/aarch64/lane-bound-1.c
+ 49907aab7182a2a85495455c2d574117  gcc/testsuite/gcc.target/aarch64/lane-bound-2.c
  81256a6fac965eea861536637ff35013  gcc/testsuite/gcc.target/aarch64/large_struct_copy.c
  508532c90ef5da7602402b5f0076c554  gcc/testsuite/gcc.target/aarch64/large_struct_copy_2.c
  c4d33c58db6c2e77df14b83ac56be1ec  gcc/testsuite/gcc.target/aarch64/ldp_stp_1.c
*************** d60171b608bda1a5cf0258e031bb3520  gcc/te
*** 48645,48654 ****
  1786c5d34b0f7cceace3327361040bde  gcc/testsuite/gcc.target/aarch64/ldp_stp_11.c
  bad5203b70baf772382e68b6c79a2da2  gcc/testsuite/gcc.target/aarch64/ldp_stp_12.c
  1882bb9dfda0ec38a31b79584154ea37  gcc/testsuite/gcc.target/aarch64/ldp_stp_13.c
  a942ef178dbff47e07909da75486489e  gcc/testsuite/gcc.target/aarch64/ldp_stp_2.c
  a8da8b18aa0d7e9598ba65e8e634ad45  gcc/testsuite/gcc.target/aarch64/ldp_stp_3.c
  cf3224c75efba2a7cdab28293aa78058  gcc/testsuite/gcc.target/aarch64/ldp_stp_4.c
! 3e9da679293bb72b52679467aee0f2c9  gcc/testsuite/gcc.target/aarch64/ldp_stp_5.c
  61c09ae0091786f892f4de5b3a9a3458  gcc/testsuite/gcc.target/aarch64/ldp_stp_6.c
  59350b5fc92367fbd7dc7ea69d786e04  gcc/testsuite/gcc.target/aarch64/ldp_stp_7.c
  97be2de5bff27731354e53fef8677db9  gcc/testsuite/gcc.target/aarch64/ldp_stp_8.c
--- 50935,50951 ----
  1786c5d34b0f7cceace3327361040bde  gcc/testsuite/gcc.target/aarch64/ldp_stp_11.c
  bad5203b70baf772382e68b6c79a2da2  gcc/testsuite/gcc.target/aarch64/ldp_stp_12.c
  1882bb9dfda0ec38a31b79584154ea37  gcc/testsuite/gcc.target/aarch64/ldp_stp_13.c
+ f63af0e2c637d2d9ca8823625488dcda  gcc/testsuite/gcc.target/aarch64/ldp_stp_14.c
+ 5163e8d4cea70416f782eaff9affa0df  gcc/testsuite/gcc.target/aarch64/ldp_stp_14.h
+ 1f6c2cb1d0138cf6fab877c2e97f2ee1  gcc/testsuite/gcc.target/aarch64/ldp_stp_15.c
+ c41a0c229f9176163d13cb44c65d01cc  gcc/testsuite/gcc.target/aarch64/ldp_stp_16.c
+ cbdc754fdeb0adb91fae9b724bc37683  gcc/testsuite/gcc.target/aarch64/ldp_stp_17.c
+ cb8abbb0950e72e68d86ee3959b22eee  gcc/testsuite/gcc.target/aarch64/ldp_stp_18.c
+ c5975ec22e631fd84b727d806f60c43b  gcc/testsuite/gcc.target/aarch64/ldp_stp_19.c
  a942ef178dbff47e07909da75486489e  gcc/testsuite/gcc.target/aarch64/ldp_stp_2.c
  a8da8b18aa0d7e9598ba65e8e634ad45  gcc/testsuite/gcc.target/aarch64/ldp_stp_3.c
  cf3224c75efba2a7cdab28293aa78058  gcc/testsuite/gcc.target/aarch64/ldp_stp_4.c
! c61389721149fafe5b576ac5eac3e81d  gcc/testsuite/gcc.target/aarch64/ldp_stp_5.c
  61c09ae0091786f892f4de5b3a9a3458  gcc/testsuite/gcc.target/aarch64/ldp_stp_6.c
  59350b5fc92367fbd7dc7ea69d786e04  gcc/testsuite/gcc.target/aarch64/ldp_stp_7.c
  97be2de5bff27731354e53fef8677db9  gcc/testsuite/gcc.target/aarch64/ldp_stp_8.c
*************** a5cfe0849b43ef498cda6a872be26cb6  gcc/te
*** 48668,48677 ****
  9ca4f25b97ec89a6e60a1484f11dc946  gcc/testsuite/gcc.target/aarch64/lrint-matherr.h
  7339c0aa8e8c4ee7e29c285881181276  gcc/testsuite/gcc.target/aarch64/lsl_asr_sbfiz.c
  7693bd5e719d20476ed31986d797a71e  gcc/testsuite/gcc.target/aarch64/madd_after_asm_1.c
  33eab0e3b5245e5b101b281c59cd1cae  gcc/testsuite/gcc.target/aarch64/mem-shift-canonical.c
  374405f39b31b6bc7351dbd0fd02dfdb  gcc/testsuite/gcc.target/aarch64/memset-corner-cases.c
  870a86498f49d152dd144acaf79cf544  gcc/testsuite/gcc.target/aarch64/memset-q-reg.c
! f1b49fc757ca83eb4924c09365c6cf7f  gcc/testsuite/gcc.target/aarch64/memset-strict-align-1.c
  4eed4dd5aa94cdbafdb452fb4f2fa939  gcc/testsuite/gcc.target/aarch64/mgeneral-regs_1.c
  b89c285bf72a3b1d134d2ed30e7955a8  gcc/testsuite/gcc.target/aarch64/mgeneral-regs_2.c
  1c6436442e97352feb4470e7662eb7ae  gcc/testsuite/gcc.target/aarch64/mgeneral-regs_3.c
--- 50965,50984 ----
  9ca4f25b97ec89a6e60a1484f11dc946  gcc/testsuite/gcc.target/aarch64/lrint-matherr.h
  7339c0aa8e8c4ee7e29c285881181276  gcc/testsuite/gcc.target/aarch64/lsl_asr_sbfiz.c
  7693bd5e719d20476ed31986d797a71e  gcc/testsuite/gcc.target/aarch64/madd_after_asm_1.c
+ bb3da2a325af25b65f245763a182c784  gcc/testsuite/gcc.target/aarch64/masked_epilogue.c
+ 3abe0b26e0583473ec6b60328cc458aa  gcc/testsuite/gcc.target/aarch64/max_plus_1.c
+ 6e167e8b310c5208a33ecbdba251dc63  gcc/testsuite/gcc.target/aarch64/max_plus_2.c
+ 61099089c8390c9347fe7dc60affef6e  gcc/testsuite/gcc.target/aarch64/max_plus_3.c
+ 950bff9dcd918b53ae10c483129ca032  gcc/testsuite/gcc.target/aarch64/max_plus_4.c
+ 8a2f8589b42f315becab23c920dc1e88  gcc/testsuite/gcc.target/aarch64/max_plus_5.c
+ cb18e653bc36a91d64d93edcc2632490  gcc/testsuite/gcc.target/aarch64/max_plus_6.c
+ 2475a4a20497e217c9d9f603eef918cd  gcc/testsuite/gcc.target/aarch64/max_plus_7.c
  33eab0e3b5245e5b101b281c59cd1cae  gcc/testsuite/gcc.target/aarch64/mem-shift-canonical.c
+ 913e2469a12f166a024ccedfe08051db  gcc/testsuite/gcc.target/aarch64/memset-corner-cases-2.c
  374405f39b31b6bc7351dbd0fd02dfdb  gcc/testsuite/gcc.target/aarch64/memset-corner-cases.c
  870a86498f49d152dd144acaf79cf544  gcc/testsuite/gcc.target/aarch64/memset-q-reg.c
! 99f047cbf8399ea75f540f743fbcd4cb  gcc/testsuite/gcc.target/aarch64/memset-strict-align-1.c
! 424a2b5eafd789db7d0b5caa9628ff62  gcc/testsuite/gcc.target/aarch64/merge_trunc1.c
  4eed4dd5aa94cdbafdb452fb4f2fa939  gcc/testsuite/gcc.target/aarch64/mgeneral-regs_1.c
  b89c285bf72a3b1d134d2ed30e7955a8  gcc/testsuite/gcc.target/aarch64/mgeneral-regs_2.c
  1c6436442e97352feb4470e7662eb7ae  gcc/testsuite/gcc.target/aarch64/mgeneral-regs_3.c
*************** c9a7887e4088a8e959845ccde4eb948a  gcc/te
*** 48679,48686 ****
  fa90b8a378a809b67f8356f285f867cb  gcc/testsuite/gcc.target/aarch64/mgeneral-regs_5.c
  c70316e68cbf96797221358b1bdb80cc  gcc/testsuite/gcc.target/aarch64/mgeneral-regs_6.c
  ab6c97c8295b5f167eeeb0d2668a3bce  gcc/testsuite/gcc.target/aarch64/mgeneral-regs_7.c
! abd9be6cb4337984cacf408e3646d219  gcc/testsuite/gcc.target/aarch64/mla_intrinsic_1.c
! db90f1e013762805f61adc51c244daab  gcc/testsuite/gcc.target/aarch64/mls_intrinsic_1.c
  8ae8760a71399434214ac816531278b6  gcc/testsuite/gcc.target/aarch64/mneg-1.c
  3778a1f12c19323f6aaab513539bbb9a  gcc/testsuite/gcc.target/aarch64/mneg-2.c
  dbd18e9fd482dd3dd6a2d0d49f0198ec  gcc/testsuite/gcc.target/aarch64/mneg-3.c
--- 50986,51000 ----
  fa90b8a378a809b67f8356f285f867cb  gcc/testsuite/gcc.target/aarch64/mgeneral-regs_5.c
  c70316e68cbf96797221358b1bdb80cc  gcc/testsuite/gcc.target/aarch64/mgeneral-regs_6.c
  ab6c97c8295b5f167eeeb0d2668a3bce  gcc/testsuite/gcc.target/aarch64/mgeneral-regs_7.c
! d707dc6b66f349d634b07fdaddce1cde  gcc/testsuite/gcc.target/aarch64/min_plus_1.c
! d342f1640f9b259e69d0f6b3ae69d216  gcc/testsuite/gcc.target/aarch64/min_plus_2.c
! ec17587eb946389b46a3469b4ec76732  gcc/testsuite/gcc.target/aarch64/min_plus_3.c
! 103006cd57078302b0ada9b7980c587c  gcc/testsuite/gcc.target/aarch64/min_plus_4.c
! d2975f7c701c2a4ea6b0a9d184d948aa  gcc/testsuite/gcc.target/aarch64/min_plus_5.c
! 6a36a3923a86bb78a9b80e79c524c20f  gcc/testsuite/gcc.target/aarch64/min_plus_6.c
! dca9505b42b2f6c7239de3ce44690e1e  gcc/testsuite/gcc.target/aarch64/min_plus_7.c
! 1d85598730d5bd30a9357549e14379f6  gcc/testsuite/gcc.target/aarch64/mla_intrinsic_1.c
! 9117b783d4f390342f3a6e2e9f2b230e  gcc/testsuite/gcc.target/aarch64/mls_intrinsic_1.c
  8ae8760a71399434214ac816531278b6  gcc/testsuite/gcc.target/aarch64/mneg-1.c
  3778a1f12c19323f6aaab513539bbb9a  gcc/testsuite/gcc.target/aarch64/mneg-2.c
  dbd18e9fd482dd3dd6a2d0d49f0198ec  gcc/testsuite/gcc.target/aarch64/mneg-3.c
*************** d748f5e863b9d4ccef203f85f7cde94b  gcc/te
*** 48690,48695 ****
--- 51004,51013 ----
  cb35ae597b395ee5d00d96a082dfbd6a  gcc/testsuite/gcc.target/aarch64/mod_2.x
  481a94d7f7a8fdba3c53a9430caeada3  gcc/testsuite/gcc.target/aarch64/mod_256.c
  6714e4053de7fc3d6c40dec08a0ca1d1  gcc/testsuite/gcc.target/aarch64/mod_256.x
+ 838782f1efd4baefc000469e9fa89394  gcc/testsuite/gcc.target/aarch64/mops_1.c
+ 1a56fe0cba4f9ce878a71c556244fa39  gcc/testsuite/gcc.target/aarch64/mops_2.c
+ 9e207cc04909dc52e63cc6c37858b5e4  gcc/testsuite/gcc.target/aarch64/mops_3.c
+ 50151365e68fe7717c740c37be863cc2  gcc/testsuite/gcc.target/aarch64/mops_4.c
  4eaf2d9267fe13f12a85ce4cf0fa7ce3  gcc/testsuite/gcc.target/aarch64/movdi_1.c
  f6ab612d7f8f0a3e569b67ec3d18908f  gcc/testsuite/gcc.target/aarch64/movi_1.c
  85fbc78b9315391c60d6d963528f56b8  gcc/testsuite/gcc.target/aarch64/movi_hf.c
*************** f3845a0299f51ecef1ccd2bcae060294  gcc/te
*** 48697,48714 ****
  ae82e1a65f9bde05cbb20490441434f5  gcc/testsuite/gcc.target/aarch64/movk_2.c
  5260008b5bf426c473c9db5529ca9d42  gcc/testsuite/gcc.target/aarch64/movtf_1.c
  823357b095860206610462e9b4d49d8f  gcc/testsuite/gcc.target/aarch64/movti_1.c
! f8350260fcb74634d2769a0902d1bac1  gcc/testsuite/gcc.target/aarch64/mul_intrinsic_1.c
  b9c785119e80b786b5898ebaa7db0700  gcc/testsuite/gcc.target/aarch64/mult-synth_1.c
  5e37be111c4688833b9693bc6302f1ed  gcc/testsuite/gcc.target/aarch64/mult-synth_2.c
  b8aed2f1d41cb75f276523cd82c36bbb  gcc/testsuite/gcc.target/aarch64/mult-synth_3.c
  475e77af16debcf9fbdd8ee444d9a7a5  gcc/testsuite/gcc.target/aarch64/mult-synth_4.c
  75729350e479bd19e771b32da82d2301  gcc/testsuite/gcc.target/aarch64/mult-synth_5.c
  7109c6ca9fae844ddbfcec4c93ed1ba6  gcc/testsuite/gcc.target/aarch64/mult-synth_6.c
  0da02c92f522f70dac5f559b786a6a5b  gcc/testsuite/gcc.target/aarch64/mvn_zero_ext.c
  18b4be822d23c74967c07303bd28f766  gcc/testsuite/gcc.target/aarch64/narrow_high-intrinsics.c
  939496f630a07f95a47a84cc4f5f7267  gcc/testsuite/gcc.target/aarch64/neg_1.c
  98aa8533c6a9248fe295572b2512fac7  gcc/testsuite/gcc.target/aarch64/neg_abs_1.c
  c8c679e672173f52fbc0d86757b5c05a  gcc/testsuite/gcc.target/aarch64/negs.c
  face3a8c6631236fedad3dce5526b762  gcc/testsuite/gcc.target/aarch64/ngc.c
  fb19dd57034e67da13f2a5b22815fcc5  gcc/testsuite/gcc.target/aarch64/no-inline-lrint_1.c
  56f1cae94d74d605f3127ff54df58e5e  gcc/testsuite/gcc.target/aarch64/no-inline-lrint_2.c
--- 51015,51036 ----
  ae82e1a65f9bde05cbb20490441434f5  gcc/testsuite/gcc.target/aarch64/movk_2.c
  5260008b5bf426c473c9db5529ca9d42  gcc/testsuite/gcc.target/aarch64/movtf_1.c
  823357b095860206610462e9b4d49d8f  gcc/testsuite/gcc.target/aarch64/movti_1.c
! db03f22087ec85856b46abc08df18a7c  gcc/testsuite/gcc.target/aarch64/mul_intrinsic_1.c
  b9c785119e80b786b5898ebaa7db0700  gcc/testsuite/gcc.target/aarch64/mult-synth_1.c
  5e37be111c4688833b9693bc6302f1ed  gcc/testsuite/gcc.target/aarch64/mult-synth_2.c
  b8aed2f1d41cb75f276523cd82c36bbb  gcc/testsuite/gcc.target/aarch64/mult-synth_3.c
  475e77af16debcf9fbdd8ee444d9a7a5  gcc/testsuite/gcc.target/aarch64/mult-synth_4.c
  75729350e479bd19e771b32da82d2301  gcc/testsuite/gcc.target/aarch64/mult-synth_5.c
  7109c6ca9fae844ddbfcec4c93ed1ba6  gcc/testsuite/gcc.target/aarch64/mult-synth_6.c
+ 3151dfcfde3b7d6684635da1ef1cd34b  gcc/testsuite/gcc.target/aarch64/mvn-cmeq0-1.c
  0da02c92f522f70dac5f559b786a6a5b  gcc/testsuite/gcc.target/aarch64/mvn_zero_ext.c
  18b4be822d23c74967c07303bd28f766  gcc/testsuite/gcc.target/aarch64/narrow_high-intrinsics.c
+ c62a8a637de4eb00aef16c6f2aa34f7e  gcc/testsuite/gcc.target/aarch64/narrow_high_combine.c
+ 3e63ffed4a3fdf8f59d1d0a5a648365c  gcc/testsuite/gcc.target/aarch64/narrow_zero_high_half.c
  939496f630a07f95a47a84cc4f5f7267  gcc/testsuite/gcc.target/aarch64/neg_1.c
  98aa8533c6a9248fe295572b2512fac7  gcc/testsuite/gcc.target/aarch64/neg_abs_1.c
  c8c679e672173f52fbc0d86757b5c05a  gcc/testsuite/gcc.target/aarch64/negs.c
+ c73625ed2ccdb03a534164bcd8dc3145  gcc/testsuite/gcc.target/aarch64/neoverse_v1_1.c
  face3a8c6631236fedad3dce5526b762  gcc/testsuite/gcc.target/aarch64/ngc.c
  fb19dd57034e67da13f2a5b22815fcc5  gcc/testsuite/gcc.target/aarch64/no-inline-lrint_1.c
  56f1cae94d74d605f3127ff54df58e5e  gcc/testsuite/gcc.target/aarch64/no-inline-lrint_2.c
*************** c634a3e3729a1cf014159113aaaa5923  gcc/te
*** 48757,48765 ****
  1444bbe1566e1e44cb5d667947f37296  gcc/testsuite/gcc.target/aarch64/popcnt2.c
  86842168437685ec7a5c743fbea8576c  gcc/testsuite/gcc.target/aarch64/popcount4.c
  27e2c5c9a0bcdfebf2133e263738b146  gcc/testsuite/gcc.target/aarch64/pr100028.c
! 1c78040ee8384426d5334c9b28ab2f6e  gcc/testsuite/gcc.target/aarch64/pr100056.c
  c3d44b74cbd361a863813180478ad6c8  gcc/testsuite/gcc.target/aarch64/pr100075.c
  d476917b01e1a6ee9c389abac401fcf6  gcc/testsuite/gcc.target/aarch64/pr103523.c
  9adb42733d9f5e2b1f2dbb364b62100d  gcc/testsuite/gcc.target/aarch64/pr37780_1.c
  e668fb9e0d32efadd671247467dc90db  gcc/testsuite/gcc.target/aarch64/pr58460.c
  9023f817c07ddec673c5b546525fc184  gcc/testsuite/gcc.target/aarch64/pr60034.c
--- 51079,51108 ----
  1444bbe1566e1e44cb5d667947f37296  gcc/testsuite/gcc.target/aarch64/popcnt2.c
  86842168437685ec7a5c743fbea8576c  gcc/testsuite/gcc.target/aarch64/popcount4.c
  27e2c5c9a0bcdfebf2133e263738b146  gcc/testsuite/gcc.target/aarch64/pr100028.c
! 54fb26388022e156768595e3d8b46954  gcc/testsuite/gcc.target/aarch64/pr100056.c
  c3d44b74cbd361a863813180478ad6c8  gcc/testsuite/gcc.target/aarch64/pr100075.c
+ e2136e7e4121b5b98591560242d1826f  gcc/testsuite/gcc.target/aarch64/pr100518.c
+ 90ff787e2854382a010cb41d41d74b65  gcc/testsuite/gcc.target/aarch64/pr102008.c
+ 2b4e17d3d8fabfd5192210873467463b  gcc/testsuite/gcc.target/aarch64/pr102376.c
+ 60149cce51c7ce96f2f40008aac502a2  gcc/testsuite/gcc.target/aarch64/pr103085.c
+ 46d6ff3fd00506e5bdc9c04d3d444c4e  gcc/testsuite/gcc.target/aarch64/pr103094.c
+ 6ab646c64e54d73bfe7fecdb44f824c3  gcc/testsuite/gcc.target/aarch64/pr103147-1.c
+ 36448e4422f5aa59373ea811ae6684e4  gcc/testsuite/gcc.target/aarch64/pr103147-10.c
+ b4780965b308ea64a30faae3dd03ff0b  gcc/testsuite/gcc.target/aarch64/pr103147-2.c
+ 331a1f2804cb2d624b662808784a18cf  gcc/testsuite/gcc.target/aarch64/pr103147-3.c
+ 1863cdd074e5a1878fd0fa3625c0bec4  gcc/testsuite/gcc.target/aarch64/pr103147-4.c
+ ab51972a329f04042b40b8df694203cc  gcc/testsuite/gcc.target/aarch64/pr103147-5.c
+ e41794101e1163933e295ca13a5ea408  gcc/testsuite/gcc.target/aarch64/pr103147-6.c
+ 02bff38b96b8706f58c3b373fea990f2  gcc/testsuite/gcc.target/aarch64/pr103147-7.c
+ 8931dca56e54462bd94ce184b0a14e21  gcc/testsuite/gcc.target/aarch64/pr103147-8.c
+ 18f8443138a6fbfd030458bc4aee321e  gcc/testsuite/gcc.target/aarch64/pr103147-9.c
+ 8afc18c73eec856148e4d2a08bec6bdf  gcc/testsuite/gcc.target/aarch64/pr103149.c
+ e047cf533ea7d668ad1746232b7c35f6  gcc/testsuite/gcc.target/aarch64/pr103311.c
+ 1e8b4ccb70306d702dfeeec91e11e74b  gcc/testsuite/gcc.target/aarch64/pr103350-1.c
+ 7ac80b7a4c25415aa8f17143e3348308  gcc/testsuite/gcc.target/aarch64/pr103350-2.c
  d476917b01e1a6ee9c389abac401fcf6  gcc/testsuite/gcc.target/aarch64/pr103523.c
+ 60105fd77c472b6a7d016a05f7c5918f  gcc/testsuite/gcc.target/aarch64/pr103741.c
+ 78b36e30c5827cd7feaca767b2bfe584  gcc/testsuite/gcc.target/aarch64/pr104005.c
  9adb42733d9f5e2b1f2dbb364b62100d  gcc/testsuite/gcc.target/aarch64/pr37780_1.c
  e668fb9e0d32efadd671247467dc90db  gcc/testsuite/gcc.target/aarch64/pr58460.c
  9023f817c07ddec673c5b546525fc184  gcc/testsuite/gcc.target/aarch64/pr60034.c
*************** c45bc47433163208f0aec414ada73705  gcc/te
*** 48859,48865 ****
  18c52a2faa4e83538abeef107e3b4d8a  gcc/testsuite/gcc.target/aarch64/pr99873_3.c
  5e9a238ae88bfc957497e635ed104144  gcc/testsuite/gcc.target/aarch64/pr99988.c
  d3e6defa85b5cd4bb506306377e59a53  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_1.c
! 42c7828cb4d5253e1a3df46c971f945a  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_2.c
  1802b716a6dff570eaf8df2688efe1dd  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_3.c
  1f95766b4ed5bfb5f2cf1f168a607a8d  gcc/testsuite/gcc.target/aarch64/predefine_large.c
  d38e476730748c653068e7cb2d8d6ca6  gcc/testsuite/gcc.target/aarch64/predefine_small.c
--- 51202,51208 ----
  18c52a2faa4e83538abeef107e3b4d8a  gcc/testsuite/gcc.target/aarch64/pr99873_3.c
  5e9a238ae88bfc957497e635ed104144  gcc/testsuite/gcc.target/aarch64/pr99988.c
  d3e6defa85b5cd4bb506306377e59a53  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_1.c
! dc70336a2a022f10ec27787e628c5113  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_2.c
  1802b716a6dff570eaf8df2688efe1dd  gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_3.c
  1f95766b4ed5bfb5f2cf1f168a607a8d  gcc/testsuite/gcc.target/aarch64/predefine_large.c
  d38e476730748c653068e7cb2d8d6ca6  gcc/testsuite/gcc.target/aarch64/predefine_small.c
*************** d38e476730748c653068e7cb2d8d6ca6  gcc/te
*** 48867,48872 ****
--- 51210,51218 ----
  d0bcbc3d9ff4ecc6817a33d0d9f3aed3  gcc/testsuite/gcc.target/aarch64/prfm_imm_offset_1.c
  86a8787839e88d2267f016ea88262ae8  gcc/testsuite/gcc.target/aarch64/profile.c
  48d743cb731002c6490f875730d154df  gcc/testsuite/gcc.target/aarch64/reg-alloc-1.c
+ 74688db113854841ef6e7ea639b44f4c  gcc/testsuite/gcc.target/aarch64/reg-alloc-2.c
+ d6af8901d4df3dbbd85fb4a872ad6e99  gcc/testsuite/gcc.target/aarch64/reg-alloc-3.c
+ ae41f7b64717901920ce9a6a8098b825  gcc/testsuite/gcc.target/aarch64/reg-alloc-4.c
  19e3d2fe2f3d2da546f57e32e1f53f39  gcc/testsuite/gcc.target/aarch64/reload-valid-spoff.c
  bed515c59d85f8fa531ff7c57e701c41  gcc/testsuite/gcc.target/aarch64/return_address_sign_1.c
  4b0e7c8dc1ccf80140eee97a9b37aeef  gcc/testsuite/gcc.target/aarch64/return_address_sign_2.c
*************** b6aa615b85ae40b63a22dbc7071fd902  gcc/te
*** 48897,48905 ****
--- 51243,51275 ----
  32f4f51563b0d7be120e5d5009ab1e3e  gcc/testsuite/gcc.target/aarch64/sha3_1.c
  b452d4c86751bd11bf03b8ca21d25bf4  gcc/testsuite/gcc.target/aarch64/sha3_2.c
  7bbc7a27b67681b713096a7ab9ed18a3  gcc/testsuite/gcc.target/aarch64/sha3_3.c
+ 720a26afca0daa0c0583c3cbf5f2c7d0  gcc/testsuite/gcc.target/aarch64/shadow_call_stack_1.c
+ e35638303a0cd435f199e6e2d3d6e7c6  gcc/testsuite/gcc.target/aarch64/shadow_call_stack_2.c
+ 426a463bcea5af95b04b1d22b1bbacc9  gcc/testsuite/gcc.target/aarch64/shadow_call_stack_3.c
+ a363537d70052012f4777fd050c01616  gcc/testsuite/gcc.target/aarch64/shadow_call_stack_4.c
+ f98a0bd31791e270aac8fc6102a9e140  gcc/testsuite/gcc.target/aarch64/shadow_call_stack_5.c
+ a0d0870973f0fcaae1c5cec0042ef105  gcc/testsuite/gcc.target/aarch64/shadow_call_stack_6.c
+ a02965d358c103b08e6c3e285f93010b  gcc/testsuite/gcc.target/aarch64/shadow_call_stack_7.c
+ 529e67315e902787ce0d0009ef247545  gcc/testsuite/gcc.target/aarch64/shadow_call_stack_8.c
  8944288dbff8e1e27c9948e6640f93d5  gcc/testsuite/gcc.target/aarch64/shift_wide_invalid_1.c
+ 82788cbb043cb268dfa4db7129b0952a  gcc/testsuite/gcc.target/aarch64/shl-combine-2.c
+ e7df497b1060ec35ed3d6baa86e0f202  gcc/testsuite/gcc.target/aarch64/shl-combine-3.c
+ fa3bb689f3a7d8d27c8e462d58be9685  gcc/testsuite/gcc.target/aarch64/shl-combine-4.c
+ 0e556388c6b9dad6fb3e0dd799249152  gcc/testsuite/gcc.target/aarch64/shl-combine-5.c
  0d48e6d77924a54eb077969bf5f8aafb  gcc/testsuite/gcc.target/aarch64/shrink_wrap_1.c
  1581fca9833dd741d7b8f91b93455158  gcc/testsuite/gcc.target/aarch64/shrink_wrap_symbol_ref_1.c
+ ad2d0fc3dcc2c60a25cb46fbf29750a9  gcc/testsuite/gcc.target/aarch64/shrn-combine-1.c
+ 20b0b487166b045e09d95e98512cb56f  gcc/testsuite/gcc.target/aarch64/shrn-combine-10.c
+ bcde3dc167d51e52d37327f02ebab07e  gcc/testsuite/gcc.target/aarch64/shrn-combine-2.c
+ e40f53c9e8254000496995c567db7055  gcc/testsuite/gcc.target/aarch64/shrn-combine-3.c
+ 16d55d4f938afe27ba507d5301c9eb64  gcc/testsuite/gcc.target/aarch64/shrn-combine-4.c
+ df616b441a15b0fdbf888d04c5fe95fb  gcc/testsuite/gcc.target/aarch64/shrn-combine-5.c
+ 090f8779c8b1c6d39d4793b55936e18e  gcc/testsuite/gcc.target/aarch64/shrn-combine-6.c
+ 1cbadd1a6f7e624933b0665b3d0de8d1  gcc/testsuite/gcc.target/aarch64/shrn-combine-7.c
+ 2e6834fd83ff3aa4a92706a671b8d864  gcc/testsuite/gcc.target/aarch64/shrn-combine-8.c
+ 9e585f963d3e92c62da9f74870533f70  gcc/testsuite/gcc.target/aarch64/shrn-combine-9.c
+ 61520e36e20fbdca6fded10ce66f096c  gcc/testsuite/gcc.target/aarch64/signbit-1.c
+ d6d84820bf58577dda59d8f5e7e556f1  gcc/testsuite/gcc.target/aarch64/signbit-2.c
  7378ad57a7e281bf3f87ce9a0d494e69  gcc/testsuite/gcc.target/aarch64/signbitv2sf.c
  d2757938fad3b14f583150a49e03367e  gcc/testsuite/gcc.target/aarch64/signbitv4sf.c
  6aef5c8c46a252fab1f15291c3545ce4  gcc/testsuite/gcc.target/aarch64/simd/ext_f32.x
*************** fed45a34e01f1c902eebbb4525b2026f  gcc/te
*** 48949,48961 ****
  504f31916b3f274eea930e1fc7da2e3c  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons.x
  22d82645ad53737e5bfbe2ba9b98cc05  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons_1.c
  f1c9e2aa3c435c9efdc1ea83da4e1eeb  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons_2.c
  f2791d55a2c9ed7182a54a406810cf47  gcc/testsuite/gcc.target/aarch64/simd/pr67896.c
  c4b08114012e09e0f47a84f5e5311441  gcc/testsuite/gcc.target/aarch64/simd/pr97349.c
  98ad17eba6ed6a47a93dddc98dcba951  gcc/testsuite/gcc.target/aarch64/simd/pr99437.c
! d0305fc0cd334a9d12270e9a2433ad74  gcc/testsuite/gcc.target/aarch64/simd/simd.exp
! f3c991b46eba7858b8e495f9c61c82a7  gcc/testsuite/gcc.target/aarch64/simd/ssra.c
  6cc70e998362cc09840837fba67910d8  gcc/testsuite/gcc.target/aarch64/simd/trn_zip_p64_1.c
! 1ca6803dbcd5c5a367a0f7a13137ab22  gcc/testsuite/gcc.target/aarch64/simd/usra.c
  433cb4ec4520c807f8d4a73e400502ae  gcc/testsuite/gcc.target/aarch64/simd/vadd_poly_1.c
  4e444ccd3e50f6329670ce1dbd3f466c  gcc/testsuite/gcc.target/aarch64/simd/vaddlv_1.c
  644c7b6ceda9f8b60fb839e127602e3c  gcc/testsuite/gcc.target/aarch64/simd/vbsl_f64_1.c
--- 51319,51332 ----
  504f31916b3f274eea930e1fc7da2e3c  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons.x
  22d82645ad53737e5bfbe2ba9b98cc05  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons_1.c
  f1c9e2aa3c435c9efdc1ea83da4e1eeb  gcc/testsuite/gcc.target/aarch64/simd/int_comparisons_2.c
+ 99a09108bd01d3ee4865fd98b8b302bb  gcc/testsuite/gcc.target/aarch64/simd/lowering_tbaa.c
  f2791d55a2c9ed7182a54a406810cf47  gcc/testsuite/gcc.target/aarch64/simd/pr67896.c
  c4b08114012e09e0f47a84f5e5311441  gcc/testsuite/gcc.target/aarch64/simd/pr97349.c
  98ad17eba6ed6a47a93dddc98dcba951  gcc/testsuite/gcc.target/aarch64/simd/pr99437.c
! 71118fdf100747eea56ede2da83bf735  gcc/testsuite/gcc.target/aarch64/simd/simd.exp
! 3bdc28b0037a305b18bdc0489c55e433  gcc/testsuite/gcc.target/aarch64/simd/ssra.c
  6cc70e998362cc09840837fba67910d8  gcc/testsuite/gcc.target/aarch64/simd/trn_zip_p64_1.c
! 5de7a6e0814e5fb97ee3b61393d07d26  gcc/testsuite/gcc.target/aarch64/simd/usra.c
  433cb4ec4520c807f8d4a73e400502ae  gcc/testsuite/gcc.target/aarch64/simd/vadd_poly_1.c
  4e444ccd3e50f6329670ce1dbd3f466c  gcc/testsuite/gcc.target/aarch64/simd/vaddlv_1.c
  644c7b6ceda9f8b60fb839e127602e3c  gcc/testsuite/gcc.target/aarch64/simd/vbsl_f64_1.c
*************** d3471e819805085e851c6ef99b412fc9  gcc/te
*** 49016,49022 ****
  76bd294b136cfc9375488944eb7f3ba0  gcc/testsuite/gcc.target/aarch64/simd/vmls_f64.c
  7b488ba6c1f84e266799b037eedc797b  gcc/testsuite/gcc.target/aarch64/simd/vmmla.c
  94345e699abe993e3294cab2d9423634  gcc/testsuite/gcc.target/aarch64/simd/vmovl_high_1.c
! 4390f49e359ac2d7ee2baec3f4b6967c  gcc/testsuite/gcc.target/aarch64/simd/vmul_elem_1.c
  f4f3b7ca3433b577e0c8b5a94bd6c11a  gcc/testsuite/gcc.target/aarch64/simd/vmul_f64_1.c
  7fd8f1130afba68a9c1f1cdf8b7c4c5d  gcc/testsuite/gcc.target/aarch64/simd/vmul_lane_const_lane_1.c
  3cdb699ca84ff1ea6ae1795064cddfee  gcc/testsuite/gcc.target/aarch64/simd/vmul_n_f64_1.c
--- 51387,51393 ----
  76bd294b136cfc9375488944eb7f3ba0  gcc/testsuite/gcc.target/aarch64/simd/vmls_f64.c
  7b488ba6c1f84e266799b037eedc797b  gcc/testsuite/gcc.target/aarch64/simd/vmmla.c
  94345e699abe993e3294cab2d9423634  gcc/testsuite/gcc.target/aarch64/simd/vmovl_high_1.c
! 22cac23569a49d0ec6c6bc3ebf72db5a  gcc/testsuite/gcc.target/aarch64/simd/vmul_elem_1.c
  f4f3b7ca3433b577e0c8b5a94bd6c11a  gcc/testsuite/gcc.target/aarch64/simd/vmul_f64_1.c
  7fd8f1130afba68a9c1f1cdf8b7c4c5d  gcc/testsuite/gcc.target/aarch64/simd/vmul_lane_const_lane_1.c
  3cdb699ca84ff1ea6ae1795064cddfee  gcc/testsuite/gcc.target/aarch64/simd/vmul_n_f64_1.c
*************** ffffc5a122506b8ac5d984951d9720dc  gcc/te
*** 49031,49041 ****
  3c67ca8727f300088aea640906d76c1c  gcc/testsuite/gcc.target/aarch64/simd/vmulx_lane_f32_1.c
  94d6d2ab3743a7ff7cf6440be3c1f04b  gcc/testsuite/gcc.target/aarch64/simd/vmulx_lane_f64_1.c
  8ebb7be79a675fcece2975004f906df9  gcc/testsuite/gcc.target/aarch64/simd/vmulx_laneq_f32_1.c
! 3403b082a3a24dd88cb6bc1fcff6fc05  gcc/testsuite/gcc.target/aarch64/simd/vmulx_laneq_f64_1.c
  738e3c87346ce4c90ef5016708b4c063  gcc/testsuite/gcc.target/aarch64/simd/vmulxd_f64_1.c
  8c1f2b0cd4fe1294bf42847bd2d2004a  gcc/testsuite/gcc.target/aarch64/simd/vmulxd_f64_2.c
  9e7ca9141ebb064b9e7d55a4045a6d36  gcc/testsuite/gcc.target/aarch64/simd/vmulxd_lane_f64_1.c
! 986ba6ed76faeceb8136715d1da37a88  gcc/testsuite/gcc.target/aarch64/simd/vmulxd_laneq_f64_1.c
  5987a5a0cfa016034cdddefa1fce4b46  gcc/testsuite/gcc.target/aarch64/simd/vmulxq_f32_1.c
  7cf2fa2fc8a470bb05876dc7ff02419b  gcc/testsuite/gcc.target/aarch64/simd/vmulxq_f64_1.c
  f181006ef30d3778b6bccc8cc815c8fb  gcc/testsuite/gcc.target/aarch64/simd/vmulxq_lane_f32_1.c
--- 51402,51412 ----
  3c67ca8727f300088aea640906d76c1c  gcc/testsuite/gcc.target/aarch64/simd/vmulx_lane_f32_1.c
  94d6d2ab3743a7ff7cf6440be3c1f04b  gcc/testsuite/gcc.target/aarch64/simd/vmulx_lane_f64_1.c
  8ebb7be79a675fcece2975004f906df9  gcc/testsuite/gcc.target/aarch64/simd/vmulx_laneq_f32_1.c
! bda70708b320bc33f63375fef79122c6  gcc/testsuite/gcc.target/aarch64/simd/vmulx_laneq_f64_1.c
  738e3c87346ce4c90ef5016708b4c063  gcc/testsuite/gcc.target/aarch64/simd/vmulxd_f64_1.c
  8c1f2b0cd4fe1294bf42847bd2d2004a  gcc/testsuite/gcc.target/aarch64/simd/vmulxd_f64_2.c
  9e7ca9141ebb064b9e7d55a4045a6d36  gcc/testsuite/gcc.target/aarch64/simd/vmulxd_lane_f64_1.c
! 622159e6a5632596a6206fd896b5382d  gcc/testsuite/gcc.target/aarch64/simd/vmulxd_laneq_f64_1.c
  5987a5a0cfa016034cdddefa1fce4b46  gcc/testsuite/gcc.target/aarch64/simd/vmulxq_f32_1.c
  7cf2fa2fc8a470bb05876dc7ff02419b  gcc/testsuite/gcc.target/aarch64/simd/vmulxq_f64_1.c
  f181006ef30d3778b6bccc8cc815c8fb  gcc/testsuite/gcc.target/aarch64/simd/vmulxq_lane_f32_1.c
*************** fef5f8e61971571bceacb1db5e936b20  gcc/te
*** 49044,49051 ****
  fb6eb3bfd5b64cb60ed3a4e857b8acce  gcc/testsuite/gcc.target/aarch64/simd/vmulxq_laneq_f64_1.c
  0ab46b26188c631f5b64b07616d8a3b5  gcc/testsuite/gcc.target/aarch64/simd/vmulxs_f32_1.c
  9ca47e4d1ce6233fae456368ba09a2a1  gcc/testsuite/gcc.target/aarch64/simd/vmulxs_f32_2.c
! f0bfc1f1b35552b85f709168dfcb6e3f  gcc/testsuite/gcc.target/aarch64/simd/vmulxs_lane_f32_1.c
! 7cadf34d83e8bd3c4b760ed01b9cbc20  gcc/testsuite/gcc.target/aarch64/simd/vmulxs_laneq_f32_1.c
  b05f9dafc47b22752e4be4934a51c0fd  gcc/testsuite/gcc.target/aarch64/simd/vpaddd_f64.c
  5c6d7402ebc2bc64b18638f9eeb6e567  gcc/testsuite/gcc.target/aarch64/simd/vpaddd_s64.c
  2758e9b2c5de64639a0342e28ec37aa8  gcc/testsuite/gcc.target/aarch64/simd/vpaddd_u64.c
--- 51415,51422 ----
  fb6eb3bfd5b64cb60ed3a4e857b8acce  gcc/testsuite/gcc.target/aarch64/simd/vmulxq_laneq_f64_1.c
  0ab46b26188c631f5b64b07616d8a3b5  gcc/testsuite/gcc.target/aarch64/simd/vmulxs_f32_1.c
  9ca47e4d1ce6233fae456368ba09a2a1  gcc/testsuite/gcc.target/aarch64/simd/vmulxs_f32_2.c
! 26c3647344fc15c12d7e940edf491c93  gcc/testsuite/gcc.target/aarch64/simd/vmulxs_lane_f32_1.c
! 2a6ef5fcb219115676a6d2caa86f6598  gcc/testsuite/gcc.target/aarch64/simd/vmulxs_laneq_f32_1.c
  b05f9dafc47b22752e4be4934a51c0fd  gcc/testsuite/gcc.target/aarch64/simd/vpaddd_f64.c
  5c6d7402ebc2bc64b18638f9eeb6e567  gcc/testsuite/gcc.target/aarch64/simd/vpaddd_s64.c
  2758e9b2c5de64639a0342e28ec37aa8  gcc/testsuite/gcc.target/aarch64/simd/vpaddd_u64.c
*************** e43da77091a964f70ebc3cb5dc286cec  gcc/te
*** 49065,49074 ****
  6302d8740cfaf057b87f66c30282ca76  gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_laneq_s16_indices_1.c
  74dcffb2c8044f92e08f733872eff824  gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_laneq_s32.c
  3b730ce502ddc6c2c9f8c1fd72eba373  gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_laneq_s32_indices_1.c
! 320a07f01488910e4aef58cffa05b255  gcc/testsuite/gcc.target/aarch64/simd/vqdmlalh_lane_s16.c
  bf37d07db933dfc964a7f19ada96ee11  gcc/testsuite/gcc.target/aarch64/simd/vqdmlalh_lane_s16_indices_1.c
  0ffa2e0c665b2320976cf1317b6725c9  gcc/testsuite/gcc.target/aarch64/simd/vqdmlalh_laneq_s16_1.c
! c3849c151a8a397387c31418e88984dd  gcc/testsuite/gcc.target/aarch64/simd/vqdmlals_lane_s32.c
  a15d630e8025125c2691e5a9a0b357e1  gcc/testsuite/gcc.target/aarch64/simd/vqdmlals_lane_s32_indices_1.c
  14ce25f677f71bdf7a8021b656f380b5  gcc/testsuite/gcc.target/aarch64/simd/vqdmlals_laneq_s32_1.c
  5734c06c34539d116c499b7b3e8cccc0  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_high_lane_s16.c
--- 51436,51445 ----
  6302d8740cfaf057b87f66c30282ca76  gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_laneq_s16_indices_1.c
  74dcffb2c8044f92e08f733872eff824  gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_laneq_s32.c
  3b730ce502ddc6c2c9f8c1fd72eba373  gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_laneq_s32_indices_1.c
! 0eae3740382de7312b4e1799b0430782  gcc/testsuite/gcc.target/aarch64/simd/vqdmlalh_lane_s16.c
  bf37d07db933dfc964a7f19ada96ee11  gcc/testsuite/gcc.target/aarch64/simd/vqdmlalh_lane_s16_indices_1.c
  0ffa2e0c665b2320976cf1317b6725c9  gcc/testsuite/gcc.target/aarch64/simd/vqdmlalh_laneq_s16_1.c
! d21d9039bbc3e4a3d3fcfb5e4bd68b3b  gcc/testsuite/gcc.target/aarch64/simd/vqdmlals_lane_s32.c
  a15d630e8025125c2691e5a9a0b357e1  gcc/testsuite/gcc.target/aarch64/simd/vqdmlals_lane_s32_indices_1.c
  14ce25f677f71bdf7a8021b656f380b5  gcc/testsuite/gcc.target/aarch64/simd/vqdmlals_laneq_s32_1.c
  5734c06c34539d116c499b7b3e8cccc0  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_high_lane_s16.c
*************** d1b27cbcc796ecb76f691a8aa2c85841  gcc/te
*** 49086,49095 ****
  60f29aef2a9acdcdfe7e08bdbe31d77d  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_laneq_s16_indices_1.c
  d41b9cd22f5711d034b3b7a75736b1bb  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_laneq_s32.c
  ebacf17cf7221af7441c0256d10ae108  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_laneq_s32_indices_1.c
! b4475de65437795877dee4414b42347c  gcc/testsuite/gcc.target/aarch64/simd/vqdmlslh_lane_s16.c
  c11f27da2a77f588f589f5d6c22cd7ca  gcc/testsuite/gcc.target/aarch64/simd/vqdmlslh_lane_s16_indices_1.c
  f5a7f082ecde524823fe18a9a6047acf  gcc/testsuite/gcc.target/aarch64/simd/vqdmlslh_laneq_s16_1.c
! 03206d265234e498363cc90146897a7a  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsls_lane_s32.c
  2c3b183fe4b052035e426edd6bce93cc  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsls_lane_s32_indices_1.c
  d41cb1706ede263cf47c64596088bbfc  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsls_laneq_s32_1.c
  9f4d079936b24ec69fca750ab4386488  gcc/testsuite/gcc.target/aarch64/simd/vqdmulh_lane_s16_indices_1.c
--- 51457,51466 ----
  60f29aef2a9acdcdfe7e08bdbe31d77d  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_laneq_s16_indices_1.c
  d41b9cd22f5711d034b3b7a75736b1bb  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_laneq_s32.c
  ebacf17cf7221af7441c0256d10ae108  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_laneq_s32_indices_1.c
! a0bd9f0007e2b1c1251b1d9a1b8e9650  gcc/testsuite/gcc.target/aarch64/simd/vqdmlslh_lane_s16.c
  c11f27da2a77f588f589f5d6c22cd7ca  gcc/testsuite/gcc.target/aarch64/simd/vqdmlslh_lane_s16_indices_1.c
  f5a7f082ecde524823fe18a9a6047acf  gcc/testsuite/gcc.target/aarch64/simd/vqdmlslh_laneq_s16_1.c
! 6e6994cf722f1f8e71dd9e57cc029cc2  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsls_lane_s32.c
  2c3b183fe4b052035e426edd6bce93cc  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsls_lane_s32_indices_1.c
  d41cb1706ede263cf47c64596088bbfc  gcc/testsuite/gcc.target/aarch64/simd/vqdmlsls_laneq_s32_1.c
  9f4d079936b24ec69fca750ab4386488  gcc/testsuite/gcc.target/aarch64/simd/vqdmulh_lane_s16_indices_1.c
*************** deecf9e57e6e678ed1fded86818ed4d7  gcc/te
*** 49126,49137 ****
  82934cf4581335082cfd6ee8cfe9cb27  gcc/testsuite/gcc.target/aarch64/simd/vqdmull_laneq_s16_indices_1.c
  c4edb6fd5d5f51d3a26e9747e27c6f5b  gcc/testsuite/gcc.target/aarch64/simd/vqdmull_laneq_s32.c
  f78e88e86175a4edbb3154ea596fe2e3  gcc/testsuite/gcc.target/aarch64/simd/vqdmull_laneq_s32_indices_1.c
! e989eea01cf845ae3c8fc37f38125909  gcc/testsuite/gcc.target/aarch64/simd/vqdmullh_lane_s16.c
  e3c6e3c277458c306149665394fcc30a  gcc/testsuite/gcc.target/aarch64/simd/vqdmullh_lane_s16_indices_1.c
! f9c186fdf093b160ed1275d2bd6abf6c  gcc/testsuite/gcc.target/aarch64/simd/vqdmullh_laneq_s16.c
! 99f5cbd26bd2115d52ac43042810f1b9  gcc/testsuite/gcc.target/aarch64/simd/vqdmulls_lane_s32.c
  82de178c8239d56f8ab1d7f1ae7b2b21  gcc/testsuite/gcc.target/aarch64/simd/vqdmulls_lane_s32_indices_1.c
! ad9ade71483fd8a0e965dd190bb0d7e5  gcc/testsuite/gcc.target/aarch64/simd/vqdmulls_laneq_s32.c
  3a2937a7a610223bdbd21aa4e6dab518  gcc/testsuite/gcc.target/aarch64/simd/vqrdmulh_lane_s16_indices_1.c
  f3a9af11d96fcaa0a4a0ab01eddcd2ac  gcc/testsuite/gcc.target/aarch64/simd/vqrdmulh_lane_s32_indices_1.c
  fd2a8f68611e84fda5e48c3afaf3bcf2  gcc/testsuite/gcc.target/aarch64/simd/vqrdmulh_laneq_s16.c
--- 51497,51508 ----
  82934cf4581335082cfd6ee8cfe9cb27  gcc/testsuite/gcc.target/aarch64/simd/vqdmull_laneq_s16_indices_1.c
  c4edb6fd5d5f51d3a26e9747e27c6f5b  gcc/testsuite/gcc.target/aarch64/simd/vqdmull_laneq_s32.c
  f78e88e86175a4edbb3154ea596fe2e3  gcc/testsuite/gcc.target/aarch64/simd/vqdmull_laneq_s32_indices_1.c
! f724c9e6d35cb2a2c4f83a09c693fe8d  gcc/testsuite/gcc.target/aarch64/simd/vqdmullh_lane_s16.c
  e3c6e3c277458c306149665394fcc30a  gcc/testsuite/gcc.target/aarch64/simd/vqdmullh_lane_s16_indices_1.c
! 1ec53715d28e60cbd56deb78bd30a079  gcc/testsuite/gcc.target/aarch64/simd/vqdmullh_laneq_s16.c
! 71cc2dbe000549a9febecf45bee28ff8  gcc/testsuite/gcc.target/aarch64/simd/vqdmulls_lane_s32.c
  82de178c8239d56f8ab1d7f1ae7b2b21  gcc/testsuite/gcc.target/aarch64/simd/vqdmulls_lane_s32_indices_1.c
! d70db47ac9544defe90e1844aeae6c20  gcc/testsuite/gcc.target/aarch64/simd/vqdmulls_laneq_s32.c
  3a2937a7a610223bdbd21aa4e6dab518  gcc/testsuite/gcc.target/aarch64/simd/vqrdmulh_lane_s16_indices_1.c
  f3a9af11d96fcaa0a4a0ab01eddcd2ac  gcc/testsuite/gcc.target/aarch64/simd/vqrdmulh_lane_s32_indices_1.c
  fd2a8f68611e84fda5e48c3afaf3bcf2  gcc/testsuite/gcc.target/aarch64/simd/vqrdmulh_laneq_s16.c
*************** a93805fa323c0f60812aa62b9a4839b5  gcc/te
*** 49265,49270 ****
--- 51636,51642 ----
  a375a2f44a4592038730c2f2daab7004  gcc/testsuite/gcc.target/aarch64/simd/vtrnu32_1.c
  7ea68041bde5be27be9278dc629ff6c2  gcc/testsuite/gcc.target/aarch64/simd/vtrnu8.x
  8f142e2d45c0f1d4bc4ed484d5779cf2  gcc/testsuite/gcc.target/aarch64/simd/vtrnu8_1.c
+ c48446a88841ade0d15c642c70dd078f  gcc/testsuite/gcc.target/aarch64/simd/vusdot-autovec.c
  be8c091f9743eda61de511305010747a  gcc/testsuite/gcc.target/aarch64/simd/vuzpf32.x
  cce289d23b0e1ab4172a1577b44db88f  gcc/testsuite/gcc.target/aarch64/simd/vuzpf32_1.c
  7a7381e96e0919e12eddda6a9c155f3a  gcc/testsuite/gcc.target/aarch64/simd/vuzpp16.x
*************** e24e752cdfaae08d96c7ec56c0ef75fd  gcc/te
*** 49346,49360 ****
  ea10ab0509dcbe5d25695d4b7db37790  gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-blr.c
  411e73a8b509fa4da979e06198cebf3f  gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-retbr-pacret.c
  191883f75825c4b0b253a140dcf374ff  gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-retbr.c
! 38cb81e8c00a56926043f3148d016ff8  gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-mitigation.exp
  95e880a9b2777120f2cedeadb9eff8ee  gcc/testsuite/gcc.target/aarch64/sm3_sm4.c
! 027ea69913c2c5a06d8e58409b958082  gcc/testsuite/gcc.target/aarch64/spellcheck_1.c
! e95d67535eb0a800294c8b3a03995066  gcc/testsuite/gcc.target/aarch64/spellcheck_2.c
! 51ba0cb8337718db1f3267ae0cbb2376  gcc/testsuite/gcc.target/aarch64/spellcheck_3.c
  7a99444b0c4b744562c85becf03023c1  gcc/testsuite/gcc.target/aarch64/spellcheck_4.c
  bb32fb86360f228a59590582b1c89d7f  gcc/testsuite/gcc.target/aarch64/spellcheck_5.c
  c68ee619bc3c37e942d8eace0a031777  gcc/testsuite/gcc.target/aarch64/spellcheck_6.c
! c54f879c066e04b82029f41822144815  gcc/testsuite/gcc.target/aarch64/spellcheck_7.c
  70b2ae1264b0f7a4453295c7fe4c8267  gcc/testsuite/gcc.target/aarch64/spellcheck_8.c
  a46814c3bbb80f28f41416dd8d256e04  gcc/testsuite/gcc.target/aarch64/spellcheck_9.c
  ab9816f0fa89b01232ba9f7ffc945eb7  gcc/testsuite/gcc.target/aarch64/spill_1.c
--- 51718,51733 ----
  ea10ab0509dcbe5d25695d4b7db37790  gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-blr.c
  411e73a8b509fa4da979e06198cebf3f  gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-retbr-pacret.c
  191883f75825c4b0b253a140dcf374ff  gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-miti-retbr.c
! 123ec9662951341951c6777c8776984f  gcc/testsuite/gcc.target/aarch64/sls-mitigation/sls-mitigation.exp
  95e880a9b2777120f2cedeadb9eff8ee  gcc/testsuite/gcc.target/aarch64/sm3_sm4.c
! 75e6f162f69d023ed491e527240992ca  gcc/testsuite/gcc.target/aarch64/smov_1.c
! e414dc04465c5addb25b43a59cc281ec  gcc/testsuite/gcc.target/aarch64/spellcheck_1.c
! 1c287219907e110889f1c6702b055fdc  gcc/testsuite/gcc.target/aarch64/spellcheck_2.c
! 0994b950f62dafc38693405ca796983d  gcc/testsuite/gcc.target/aarch64/spellcheck_3.c
  7a99444b0c4b744562c85becf03023c1  gcc/testsuite/gcc.target/aarch64/spellcheck_4.c
  bb32fb86360f228a59590582b1c89d7f  gcc/testsuite/gcc.target/aarch64/spellcheck_5.c
  c68ee619bc3c37e942d8eace0a031777  gcc/testsuite/gcc.target/aarch64/spellcheck_6.c
! 5458f69cee77bb162e86f68bbcd7fc81  gcc/testsuite/gcc.target/aarch64/spellcheck_7.c
  70b2ae1264b0f7a4453295c7fe4c8267  gcc/testsuite/gcc.target/aarch64/spellcheck_8.c
  a46814c3bbb80f28f41416dd8d256e04  gcc/testsuite/gcc.target/aarch64/spellcheck_9.c
  ab9816f0fa89b01232ba9f7ffc945eb7  gcc/testsuite/gcc.target/aarch64/spill_1.c
*************** fc9240608ee0f16e1f1c3b227052460b  gcc/te
*** 49409,49415 ****
  187e9a28ba40c7239e3291680f4edd90  gcc/testsuite/gcc.target/aarch64/store_lane_spill_1.c
  b8c2c1180004b93a6595ce5210822124  gcc/testsuite/gcc.target/aarch64/store_repeating_constant_1.c
  fa57c8801f6408a8a60441b14264d643  gcc/testsuite/gcc.target/aarch64/store_repeating_constant_2.c
! 62a302003cd980c5545eb86486204993  gcc/testsuite/gcc.target/aarch64/store_v2vec_lanes.c
  20a94ac6074e4b9fc9ae888885d787ca  gcc/testsuite/gcc.target/aarch64/stp_vec_128_1.c
  2b3b2d71a1eeaa42d801c6f3133c4919  gcc/testsuite/gcc.target/aarch64/stp_vec_64_1.c
  f19ede0e4b05ef8dfb622bbb931da820  gcc/testsuite/gcc.target/aarch64/stp_vec_v2df.c
--- 51782,51789 ----
  187e9a28ba40c7239e3291680f4edd90  gcc/testsuite/gcc.target/aarch64/store_lane_spill_1.c
  b8c2c1180004b93a6595ce5210822124  gcc/testsuite/gcc.target/aarch64/store_repeating_constant_1.c
  fa57c8801f6408a8a60441b14264d643  gcc/testsuite/gcc.target/aarch64/store_repeating_constant_2.c
! c53782180ecc2da4ebe7c8ea28905f89  gcc/testsuite/gcc.target/aarch64/store_v2vec_lanes.c
! 0a4a90933116614f46d21e3af250af94  gcc/testsuite/gcc.target/aarch64/stp_1.c
  20a94ac6074e4b9fc9ae888885d787ca  gcc/testsuite/gcc.target/aarch64/stp_vec_128_1.c
  2b3b2d71a1eeaa42d801c6f3133c4919  gcc/testsuite/gcc.target/aarch64/stp_vec_64_1.c
  f19ede0e4b05ef8dfb622bbb931da820  gcc/testsuite/gcc.target/aarch64/stp_vec_v2df.c
*************** a4531a773ebb1ba221309f7860dbafa3  gcc/te
*** 49426,49435 ****
  da0f05a59f07947e5516436d11add9e4  gcc/testsuite/gcc.target/aarch64/subs_compare_1.c
  244d438c9b47564a8579d9ea1b0639e2  gcc/testsuite/gcc.target/aarch64/subs_compare_2.c
  b80ee08d736c3560f1d085793990beb9  gcc/testsuite/gcc.target/aarch64/subsp.c
! e2f0082700ce93b7daed920e521d8699  gcc/testsuite/gcc.target/aarch64/sve/aarch64-sve.exp
  18ebbc8e9de1d2ee5d54133da671b995  gcc/testsuite/gcc.target/aarch64/sve/abs_1.c
! 856c92b3ae8965bb459d9ac69b0bce59  gcc/testsuite/gcc.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp
! cb41033217c8de4950e9c9e82db36d48  gcc/testsuite/gcc.target/aarch64/sve/acle/aarch64-sve-acle.exp
  7f5733dc43b70ddb95a2391ed989189b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/abd_f16.c
  50880d9abd4092a46bc1d7b23eb352a4  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/abd_f32.c
  94959a93fdfe967c8d71932f6b318833  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/abd_f64.c
--- 51800,51809 ----
  da0f05a59f07947e5516436d11add9e4  gcc/testsuite/gcc.target/aarch64/subs_compare_1.c
  244d438c9b47564a8579d9ea1b0639e2  gcc/testsuite/gcc.target/aarch64/subs_compare_2.c
  b80ee08d736c3560f1d085793990beb9  gcc/testsuite/gcc.target/aarch64/subsp.c
! 3a9dc1e92859b2d64dcd3933805075f0  gcc/testsuite/gcc.target/aarch64/sve/aarch64-sve.exp
  18ebbc8e9de1d2ee5d54133da671b995  gcc/testsuite/gcc.target/aarch64/sve/abs_1.c
! ef08758527e2f9f0f98d6633dda30648  gcc/testsuite/gcc.target/aarch64/sve/acle/aarch64-sve-acle-asm.exp
! b3c544e15b6a716301bf7b40cddc7e51  gcc/testsuite/gcc.target/aarch64/sve/acle/aarch64-sve-acle.exp
  7f5733dc43b70ddb95a2391ed989189b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/abd_f16.c
  50880d9abd4092a46bc1d7b23eb352a4  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/abd_f32.c
  94959a93fdfe967c8d71932f6b318833  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/abd_f64.c
*************** a05c72bb5a2bad9a8167ab5e35e011d7  gcc/te
*** 49736,49751 ****
  77ad2a3e88d8541d8f2973f0c6647a73  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/cvt_u32.c
  60a7c2e5009bb3576c198bc8124d5748  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/cvt_u64.c
  6af806895c5563ed60b5942ebcbd967d  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/cvtnt_bf16.c
! e731b8baca95b08bd170d3e63b66ffdd  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_f16.c
! ebc6c44cabe0f1003d83cfea278b7534  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_f32.c
! eae7a23510a44c61763ff61755858387  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_f64.c
  dbfe688e80245eac4b98a2b812080143  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_s32.c
  2a26c10912810a720fd46b59d9c2eae9  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_s64.c
  7e9f758e5ac2be0d4396ab6faaa3522d  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_u32.c
  478710ed33c0d4210b2cc45828e50136  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_u64.c
! 6c82c1e3b08361e9668c8bedc8118adb  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/divr_f16.c
! 9fc09b43102b27949cd3c0b607640fe6  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/divr_f32.c
! b34e7f7fff2a2d738a5728f2d007259b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/divr_f64.c
  297d68a3c4649c25e4fcee878f0ec2d5  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/divr_s32.c
  14a6d19eebc9d16f3b5f07b6e8340bb4  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/divr_s64.c
  e9354f54c6640a93b9a64b06c71610c5  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/divr_u32.c
--- 52110,52125 ----
  77ad2a3e88d8541d8f2973f0c6647a73  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/cvt_u32.c
  60a7c2e5009bb3576c198bc8124d5748  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/cvt_u64.c
  6af806895c5563ed60b5942ebcbd967d  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/cvtnt_bf16.c
! 19b94a8b62fa7638c251fea92b7296a4  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_f16.c
! 4ae38725c44ad8ae9b602806068651d9  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_f32.c
! c009a8a7c7795d385c820591b50a9988  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_f64.c
  dbfe688e80245eac4b98a2b812080143  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_s32.c
  2a26c10912810a720fd46b59d9c2eae9  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_s64.c
  7e9f758e5ac2be0d4396ab6faaa3522d  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_u32.c
  478710ed33c0d4210b2cc45828e50136  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/div_u64.c
! a0b0f3747892879e45d8411218bbdb92  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/divr_f16.c
! efc6dfdee37e3ac889fed35af5bca778  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/divr_f32.c
! 17e2ec499570fdda4bd8df585568c5dc  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/divr_f64.c
  297d68a3c4649c25e4fcee878f0ec2d5  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/divr_s32.c
  14a6d19eebc9d16f3b5f07b6e8340bb4  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/divr_s64.c
  e9354f54c6640a93b9a64b06c71610c5  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/divr_u32.c
*************** e3f441de4ec2d48e012201d2d06efcff  gcc/te
*** 50202,50210 ****
  b00d7b39c0af931306befa4b3ccf12a2  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsr_wide_u16.c
  a6fbd35390a3afe991472dbe5aa6ed31  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsr_wide_u32.c
  cbe3782b28c5adb5d83b8568a0c0ee26  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsr_wide_u8.c
! 742f96485eacbdf7df68e1cda4ed981b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mad_f16.c
! 56414421753c949d1230b7aed9b5c834  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mad_f32.c
! e1d5c77b15b9912854831363a4225b21  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mad_f64.c
  c6aca09c003f225a026e216015810e55  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mad_s16.c
  06e2deda969896b5199d2c6fccb1de97  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mad_s32.c
  1892d7ec5432f33a43cf555ee517b4d6  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mad_s64.c
--- 52576,52584 ----
  b00d7b39c0af931306befa4b3ccf12a2  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsr_wide_u16.c
  a6fbd35390a3afe991472dbe5aa6ed31  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsr_wide_u32.c
  cbe3782b28c5adb5d83b8568a0c0ee26  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/lsr_wide_u8.c
! 73383d372490bf18a5e6696202a7ad73  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mad_f16.c
! ed9a7db3d9fe7765e7378d9cac5faaaa  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mad_f32.c
! f96e0c8b43a7eee6a0ed968b11ac99e5  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mad_f64.c
  c6aca09c003f225a026e216015810e55  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mad_s16.c
  06e2deda969896b5199d2c6fccb1de97  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mad_s32.c
  1892d7ec5432f33a43cf555ee517b4d6  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mad_s64.c
*************** c285efd84d31c41164f13f193da9270b  gcc/te
*** 50269,50277 ****
  6d836695ff8994e4d12eee1a29866c5c  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/minv_u32.c
  80c7726cc8db2036bfe24de5c7bdf114  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/minv_u64.c
  b4ace8e1ff7beb4f0d8907f942824439  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/minv_u8.c
! 7099ea54b96f9cc7fec7c20fa0a25f39  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_f16.c
! 8e2d8488102d2a9d6c158e2e8b1ab4e9  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_f32.c
! df4a9042fe6c9013665c3fc53b8d9407  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_f64.c
  f77bbab52c1b600fedbeaa69bc6aae51  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_lane_f16.c
  33c98200887f8f0b272a65811c7a54fa  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_lane_f32.c
  5d013d1e2ba65615b4eae7148d7c305e  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_lane_f64.c
--- 52643,52651 ----
  6d836695ff8994e4d12eee1a29866c5c  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/minv_u32.c
  80c7726cc8db2036bfe24de5c7bdf114  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/minv_u64.c
  b4ace8e1ff7beb4f0d8907f942824439  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/minv_u8.c
! 354b54a2bb09441060b95a0ea89bde7a  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_f16.c
! ffeb6686ee2feaa79fd30e7c41073106  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_f32.c
! 1928598ad6f7bb20e8082d92dcd49bf7  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_f64.c
  f77bbab52c1b600fedbeaa69bc6aae51  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_lane_f16.c
  33c98200887f8f0b272a65811c7a54fa  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_lane_f32.c
  5d013d1e2ba65615b4eae7148d7c305e  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_lane_f64.c
*************** fb927dd962060c7cc10455902c4bac73  gcc/te
*** 50283,50291 ****
  527cfabe088859fd652bd921940e0014  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_u32.c
  02224b6f8b3ab26d74df7a1f1d1a2239  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_u64.c
  5ab1aef8f820a17c06ea02c25f379802  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_u8.c
! 849aac793734a01cfcbc00ee96458d63  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mls_f16.c
! 384cf0e1dee889bc56ea8fb3a58c209d  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mls_f32.c
! 224f890b230a49812c6d11b15ff2132b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mls_f64.c
  fe9f55318014b4bff7dcd8dc8fca2710  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mls_lane_f16.c
  11da6d78ca409183c955ed21d237115f  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mls_lane_f32.c
  4c78e9c3171e9c6f490145ad107e72b0  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mls_lane_f64.c
--- 52657,52665 ----
  527cfabe088859fd652bd921940e0014  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_u32.c
  02224b6f8b3ab26d74df7a1f1d1a2239  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_u64.c
  5ab1aef8f820a17c06ea02c25f379802  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mla_u8.c
! 5e9257a122d5f845e2a8bf6ce1a44d67  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mls_f16.c
! 3826bee10d85b2895d967832b191a77b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mls_f32.c
! 5f97fd7ff834d1d30b7b8189b6a6fc9b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mls_f64.c
  fe9f55318014b4bff7dcd8dc8fca2710  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mls_lane_f16.c
  11da6d78ca409183c955ed21d237115f  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mls_lane_f32.c
  4c78e9c3171e9c6f490145ad107e72b0  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mls_lane_f64.c
*************** ebe6060371c3a47d9e7edc74f8921c96  gcc/te
*** 50302,50310 ****
  3cbc99d5972c93be1a8e3684ecec100b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mmla_s32.c
  de7722b2ecd1f01d5ed9eed0077102c7  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mmla_u32.c
  bcdf69edb914fda42b80c7047b998fc2  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mov_b.c
! 67201fee4593865fd5461062688dba35  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/msb_f16.c
! d0bf9597f6dfb34c2b40c7fb47685586  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/msb_f32.c
! 18a04726cc5f8717a4b2db3da4bfe9e8  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/msb_f64.c
  ea63b7586fb06a24855c2ac2c905de89  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/msb_s16.c
  06230290846298a8dd8563eae3724dc6  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/msb_s32.c
  0543f481778992cdf907dfda1f1f6301  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/msb_s64.c
--- 52676,52684 ----
  3cbc99d5972c93be1a8e3684ecec100b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mmla_s32.c
  de7722b2ecd1f01d5ed9eed0077102c7  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mmla_u32.c
  bcdf69edb914fda42b80c7047b998fc2  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mov_b.c
! bfc7d2fdc0d4e7a7da3c4883e2572499  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/msb_f16.c
! 86b09545c3f39c95502ec160ad13ef91  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/msb_f32.c
! 06d119a7f2c57f6187563d1090a4e3d1  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/msb_f64.c
  ea63b7586fb06a24855c2ac2c905de89  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/msb_s16.c
  06230290846298a8dd8563eae3724dc6  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/msb_s32.c
  0543f481778992cdf907dfda1f1f6301  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/msb_s64.c
*************** ed603dc9ecf9a8e67ab6d0d27662363b  gcc/te
*** 50338,50346 ****
  a2a2de738de5496dc39523187bfe5382  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mulh_u32.c
  cd9937bee46add0ef650a283e9de73d1  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mulh_u64.c
  3400dfc26e339d42761c8f63e1ff2ef2  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mulh_u8.c
! a2a8674bb67273edac939d0f4ac90720  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mulx_f16.c
! 8baaf203b24a7edf4a603f205d8c7a57  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mulx_f32.c
! cc21cfb609ed49cd141646f8637d35cb  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mulx_f64.c
  9aa31bccf29d77ee8fdad995cff34a24  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nand_b.c
  955b9777cd7b1aea9a20345abdb93c2c  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/neg_f16.c
  443b93c2ed216da3115b74d2dbe8c0f7  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/neg_f32.c
--- 52712,52720 ----
  a2a2de738de5496dc39523187bfe5382  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mulh_u32.c
  cd9937bee46add0ef650a283e9de73d1  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mulh_u64.c
  3400dfc26e339d42761c8f63e1ff2ef2  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mulh_u8.c
! cfbd40f52b0f4c12570bc1b0abe3d27f  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mulx_f16.c
! 378c91f6bade3eb1db0374be0a20e6e9  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mulx_f32.c
! 74732775ef6717aa93bbcdfb643c2f8a  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mulx_f64.c
  9aa31bccf29d77ee8fdad995cff34a24  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nand_b.c
  955b9777cd7b1aea9a20345abdb93c2c  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/neg_f16.c
  443b93c2ed216da3115b74d2dbe8c0f7  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/neg_f32.c
*************** f236a628a9028679460cc26eed56bf5e  gcc/te
*** 50349,50366 ****
  0a251dc7b7eaa05b173be1b6c6b48439  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/neg_s32.c
  e0d1fad60c82a86d9ac93bf1996a5588  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/neg_s64.c
  23141a1608a2ec93f136eada057d8c95  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/neg_s8.c
! b7f8e19601f542e4fc1bcc5337516fc1  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmad_f16.c
! ff0292bc52114c8d5abfab209fc21d2e  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmad_f32.c
! b52cfa9e16ea1377f13d1621991e3fa4  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmad_f64.c
! 69f94fddadfeb3b7fd6c574c69e33217  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmla_f16.c
! 2e4fe34270939fcdb8c8b829b935a92c  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmla_f32.c
! ea4338eda5b03af8d70c2ab637c6dfc5  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmla_f64.c
! 61a736cadf5186c111fbd70ea60b6937  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmls_f16.c
! 6fb3a9968168bd8f1e0e846d3c10d1e1  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmls_f32.c
! e62c64088e5a555f5a59fd8b63799c52  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmls_f64.c
! b80769a93609c539894dcfb0f83830c7  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmsb_f16.c
! 44e030b6e43eea1a99381d78d0d6580e  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmsb_f32.c
! 6449c8662a78a4a8804862f567c0ff46  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmsb_f64.c
  cdeb942bc0a4b348ba435fcf8ef6c93f  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nor_b.c
  069d904486bbd21b78f1f2b264dceb87  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/not_b.c
  13b460adf9c9f49abbc7cd6b7507d5ac  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/not_s16.c
--- 52723,52740 ----
  0a251dc7b7eaa05b173be1b6c6b48439  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/neg_s32.c
  e0d1fad60c82a86d9ac93bf1996a5588  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/neg_s64.c
  23141a1608a2ec93f136eada057d8c95  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/neg_s8.c
! 438a0475273e12dc778c3838d82db8a8  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmad_f16.c
! a4a06f5ea6b0b35d93bd2dae8a400598  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmad_f32.c
! 3c2395569e7628a3f33f03da99e2f8be  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmad_f64.c
! bc7c1d56491f056533596459c423aa7e  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmla_f16.c
! 8950ffe394801cb2154f1bb64a112606  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmla_f32.c
! f38be3fbe2583110ae1c19a648986478  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmla_f64.c
! 86de91ad86338183e5d763c6b7f73541  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmls_f16.c
! bbcdf6a50cca08e95a02c4d01a295fad  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmls_f32.c
! 49f4f289a488266c88b722e3c3cb2998  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmls_f64.c
! 215a7cd8ab1a9508124eba90d700666f  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmsb_f16.c
! a0b77e66f7297e8cf14ebd57b396f7b0  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmsb_f32.c
! f14adee759694c0c07baa55a96a078db  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nmsb_f64.c
  cdeb942bc0a4b348ba435fcf8ef6c93f  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/nor_b.c
  069d904486bbd21b78f1f2b264dceb87  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/not_b.c
  13b460adf9c9f49abbc7cd6b7507d5ac  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/not_s16.c
*************** b86e9ea351a81915317b3874287c5ad8  gcc/te
*** 50751,50761 ****
  3354556a4f91774e7081ea67ab15b18a  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/stnt1_u32.c
  c213f80ded7935786fcd3d64e5a94a7a  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/stnt1_u64.c
  c4ae1b67d4d130d2d4683e96950e7ce7  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/stnt1_u8.c
! 1fa17dee38bf0dfaa7c4341f077d3794  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_f16.c
  04f733247bb6377ae509b588ae346e0b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_f16_notrap.c
! 9e6ca1347a06ae57eb44df434b561d91  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_f32.c
  69da11cd2a75771e5eff8b7b507ec556  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_f32_notrap.c
! c128b9a986d3db6c2087b4a16869cb1c  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_f64.c
  964891a99d0e6e252c95a3c0b6910b5f  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_f64_notrap.c
  e0189f46ff6c918782c09c3106821849  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_s16.c
  d94e975feec0108a94a08bc1731ea448  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_s32.c
--- 53125,53135 ----
  3354556a4f91774e7081ea67ab15b18a  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/stnt1_u32.c
  c213f80ded7935786fcd3d64e5a94a7a  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/stnt1_u64.c
  c4ae1b67d4d130d2d4683e96950e7ce7  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/stnt1_u8.c
! a474c01426e646f86a5f5c0427b0cea2  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_f16.c
  04f733247bb6377ae509b588ae346e0b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_f16_notrap.c
! 13a65873d2ea3cb51a238b226f7444c6  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_f32.c
  69da11cd2a75771e5eff8b7b507ec556  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_f32_notrap.c
! 90c74d2eecd649f61bed8f49078ceffb  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_f64.c
  964891a99d0e6e252c95a3c0b6910b5f  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_f64_notrap.c
  e0189f46ff6c918782c09c3106821849  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_s16.c
  d94e975feec0108a94a08bc1731ea448  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_s32.c
*************** ba2bc44e599d90742d9a486148eb173a  gcc/te
*** 50765,50775 ****
  365ee5f7f86575eeb6e8f02dbffbe14b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_u32.c
  b2f934656dbad5b08cef2d2bfbf3cb34  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_u64.c
  14e8c636012cbc2ee0e827b03e744010  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_u8.c
! e10a40b078464c7586f83b228ed3b16d  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_f16.c
  7a301a1a8bc311c5becdf5abde4f9267  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_f16_notrap.c
! fd7dcc707839a72e79f6932cd83be922  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_f32.c
  f70b01578ea99ddfc22ef58b5a471fbc  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_f32_notrap.c
! 6b2b0b35d4288691445859349f70847f  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_f64.c
  e3b6992b60724be69b16032b425a5672  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_f64_notrap.c
  25a762a76fe521ee8a704513a4ecc9e3  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_s16.c
  a64e138e8875c920e4d1039ba33014eb  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_s32.c
--- 53139,53149 ----
  365ee5f7f86575eeb6e8f02dbffbe14b  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_u32.c
  b2f934656dbad5b08cef2d2bfbf3cb34  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_u64.c
  14e8c636012cbc2ee0e827b03e744010  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sub_u8.c
! be3c9994d75d246d40ded9ec50e11ab1  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_f16.c
  7a301a1a8bc311c5becdf5abde4f9267  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_f16_notrap.c
! 1471b9a453cb5986e84dfe75b37b083a  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_f32.c
  f70b01578ea99ddfc22ef58b5a471fbc  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_f32_notrap.c
! 36397c2fa1970b6dd85638a71b389745  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_f64.c
  e3b6992b60724be69b16032b425a5672  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_f64_notrap.c
  25a762a76fe521ee8a704513a4ecc9e3  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_s16.c
  a64e138e8875c920e4d1039ba33014eb  gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_s32.c
*************** e566a5e929cb642a78066bf00691e1bc  gcc/te
*** 51213,51218 ****
--- 53587,53593 ----
  4e7a3ff45a72f35e2476f4e660886eb0  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_1.c
  60577eb222495e42c0d4e2d7e2ce19a3  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_2.c
  890d0907288d2b72f9ec70456e205a4c  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_3.c
+ 8670785b5e7c8b75fb219f0ddae33190  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cntb_1.c
  9e41721b4dcb606909b3efa814293f4e  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cntb_pat_1.c
  60a6cb5f3583610557e9b4dde6cd5453  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cntd_pat_1.c
  2279605ca76a398874fa5ee6664d3d52  gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnth_pat_1.c
*************** c43619dc0345cb75df63193d4ecf32a5  gcc/te
*** 51270,51275 ****
--- 53645,53651 ----
  bb3a7f2587d8584d185738649f93a6f6  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pfirst_1.c
  4a5457bf98a3061b6c949b777ceca410  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pnext_1.c
  6d3b0cbb6b0b88e0030fbf0003faa4c9  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pnext_2.c
+ 9ff121474de72b7f1e7df15e02d1fcbf  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr104092.c
  cd84e485b3fa7a0d50f2ee5113eca33d  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr94683.c
  111a35b5bdbe877086a99d29b13dc65b  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr94700.c
  dd9873ff910539b000561a51ccc3a52f  gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr96146.c
*************** ed3635965a9c2d555c09947186243865  gcc/te
*** 51327,51333 ****
  8a0fc19c5772296d44131a604516c649  gcc/testsuite/gcc.target/aarch64/sve/clastb_2_run.c
  29447b9e3a1a1674df28aaa238eb3cef  gcc/testsuite/gcc.target/aarch64/sve/clastb_3.c
  d9c7ea7a56ecee738997c662deeaa438  gcc/testsuite/gcc.target/aarch64/sve/clastb_3_run.c
! a6fcc5a1236a7fe2ec380468261b6fbf  gcc/testsuite/gcc.target/aarch64/sve/clastb_4.c
  6100f2c7218984c6184bc7fdb259d677  gcc/testsuite/gcc.target/aarch64/sve/clastb_4_run.c
  88c1dc2b49215315581a575913a95d1b  gcc/testsuite/gcc.target/aarch64/sve/clastb_5.c
  459c9a65b9f22d651fe6ffe768ae3361  gcc/testsuite/gcc.target/aarch64/sve/clastb_5_run.c
--- 53703,53709 ----
  8a0fc19c5772296d44131a604516c649  gcc/testsuite/gcc.target/aarch64/sve/clastb_2_run.c
  29447b9e3a1a1674df28aaa238eb3cef  gcc/testsuite/gcc.target/aarch64/sve/clastb_3.c
  d9c7ea7a56ecee738997c662deeaa438  gcc/testsuite/gcc.target/aarch64/sve/clastb_3_run.c
! 4c7baabef127e3141de1f12b77c3c33a  gcc/testsuite/gcc.target/aarch64/sve/clastb_4.c
  6100f2c7218984c6184bc7fdb259d677  gcc/testsuite/gcc.target/aarch64/sve/clastb_4_run.c
  88c1dc2b49215315581a575913a95d1b  gcc/testsuite/gcc.target/aarch64/sve/clastb_5.c
  459c9a65b9f22d651fe6ffe768ae3361  gcc/testsuite/gcc.target/aarch64/sve/clastb_5_run.c
*************** be45d391b5dad6bfa889a516c4cad152  gcc/te
*** 51345,51350 ****
--- 53721,53727 ----
  472e17e8421d808081d7c6b8421a6b42  gcc/testsuite/gcc.target/aarch64/sve/cmp_2.c
  ee3868d2e83312b60146a9ae902b7cc6  gcc/testsuite/gcc.target/aarch64/sve/cnot_1.c
  01898aea349e7e1f63361dacb4b0b0d5  gcc/testsuite/gcc.target/aarch64/sve/cnot_2.c
+ 9ec5c505626330ecc930b8513f69feb9  gcc/testsuite/gcc.target/aarch64/sve/complex_mul_1.c
  e34e1b9a30e1bf7be8e61dcf581ac027  gcc/testsuite/gcc.target/aarch64/sve/cond_abd_1.c
  3aabd6216d4bf01e1b009fe1dd930328  gcc/testsuite/gcc.target/aarch64/sve/cond_abd_1_run.c
  25466388135a3651ca5061f92e6604bb  gcc/testsuite/gcc.target/aarch64/sve/cond_abd_2.c
*************** d4b0fcf49dbdac56043aee98347c8ccf  gcc/te
*** 51365,51370 ****
--- 53742,53748 ----
  ae054ca80eef5370f60b398f80ca624e  gcc/testsuite/gcc.target/aarch64/sve/cond_arith_4_run.c
  de20c023bfdec615e3bef202481b8941  gcc/testsuite/gcc.target/aarch64/sve/cond_arith_5.c
  f76243fd74d976c03e9e9c6e2d0e09af  gcc/testsuite/gcc.target/aarch64/sve/cond_arith_5_run.c
+ 057607b93c8072bb59862f61a65f16f7  gcc/testsuite/gcc.target/aarch64/sve/cond_arith_6.c
  b4c45622c244462e8e96da2776491fe6  gcc/testsuite/gcc.target/aarch64/sve/cond_asrd_1.c
  66f89090e06d8be84d0ece9730aee086  gcc/testsuite/gcc.target/aarch64/sve/cond_asrd_1_run.c
  e8b19672e185ac775fab17be20819eed  gcc/testsuite/gcc.target/aarch64/sve/cond_asrd_2.c
*************** a9011591514f41bfbf412e1d14722ccd  gcc/te
*** 51421,51426 ****
--- 53799,53812 ----
  ddd887045f18a8bdbd5ea03c2be74ead  gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_3_run.c
  ed0725bcf9e92ab9ac36431f961b9cc4  gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_4.c
  5d0164ab19fb2d3a475e4c49404e6d37  gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_4_run.c
+ 255724ac8f1fd5046f2a61e3ffe96ff6  gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_5.c
+ 4143d896ad644326abf04f2b78eb5657  gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_5_run.c
+ 7c79e4a6bddad22f81765621d082f8f7  gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_6.c
+ 6b9d997f46ff754be60685b03f7f9f9b  gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_6_run.c
+ 50a9691073a09c419c2eb6f74d1163d9  gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_7.c
+ bcbe3911107a0e5f6ec93ba07374f7cf  gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_7_run.c
+ 2582af230415294ef0fdbbce5eaf98b7  gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_8.c
+ 536b8c04dedf9aea2a6d0bffbcbed9db  gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_8_run.c
  122f43160b9c9681ce52d47414f6a442  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_1.c
  985c02baa1eb3b8662cea45d283cdd8d  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_1_run.c
  4126dfd7f4389791ba015171cd50d14a  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_2.c
*************** c36a4e3f148f7cb41bef2e12e3c78894  gcc/te
*** 51429,51434 ****
--- 53815,53828 ----
  43b9e59595cc7b2077539f3a4c3ed6ab  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_3_run.c
  52416dc564668b88d5f9fadb4eef79a2  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_4.c
  5a317dfa59b3956cff5f1499b918bd91  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_4_run.c
+ 2ff6bcc714c4f4bfe23cad232b6323dc  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_5.c
+ 85cfccab508119dd4190588ea187006d  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_5_run.c
+ 4868f87f122beefa61bfa0b0bb178c95  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_6.c
+ 3a0da1ce19d97db921f6f2eee2a79cdb  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_6_run.c
+ f83306845da84bdf6848aae05c5a2e09  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_7.c
+ 072ae2d9a5e9d32d48faa5e62b996609  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_7_run.c
+ 64db42388579ec976e07f51afc168086  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_8.c
+ cb1bf1ff48a5e6bb1ba79530c0b05adb  gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_8_run.c
  e0705706a25a622a4b620338485c3a81  gcc/testsuite/gcc.target/aarch64/sve/cond_fmul_1.c
  780caf8bf7717806fd0f84c048ee97eb  gcc/testsuite/gcc.target/aarch64/sve/cond_fmul_1_run.c
  b52b14b2138a13194cbcff7473ba55c2  gcc/testsuite/gcc.target/aarch64/sve/cond_fmul_2.c
*************** c646dd2e0fac8da4972c667888c025dc  gcc/te
*** 51496,51502 ****
  35ad16f08eb3dedd45580f0df9287658  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_2_run.c
  5ecd1408e662633172465e5afb78bb7d  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_3.c
  48c8b8da28cd7561f3eebc9897a10408  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_3_run.c
! 190a9b71006008d76e5b589fb5ec43bf  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_4.c
  14deb8e873fa9fed70a00adc999bf312  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_4_run.c
  bd1261d11edb1213d28b6113b1dc7c75  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_5.c
  435ac44927974eb89426cad7e0d39cce  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_5_run.c
--- 53890,53896 ----
  35ad16f08eb3dedd45580f0df9287658  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_2_run.c
  5ecd1408e662633172465e5afb78bb7d  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_3.c
  48c8b8da28cd7561f3eebc9897a10408  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_3_run.c
! 203714ae863c84f9652c911b42a25da5  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_4.c
  14deb8e873fa9fed70a00adc999bf312  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_4_run.c
  bd1261d11edb1213d28b6113b1dc7c75  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_5.c
  435ac44927974eb89426cad7e0d39cce  gcc/testsuite/gcc.target/aarch64/sve/cond_unary_5_run.c
*************** a04b176d1f4debec96b6eb4ccec14017  gcc/te
*** 51530,51535 ****
--- 53924,53931 ----
  0504506a6311cc93887e1a557a45e7f9  gcc/testsuite/gcc.target/aarch64/sve/cost_model_1.c
  2c9436684fcf7cf966351ac4e3e09eac  gcc/testsuite/gcc.target/aarch64/sve/cost_model_10.c
  71c5caab96e622a30a87c1e7d8fe0048  gcc/testsuite/gcc.target/aarch64/sve/cost_model_11.c
+ 246db2ce2d061b4faf830feefc2d4165  gcc/testsuite/gcc.target/aarch64/sve/cost_model_12.c
+ f5f51f0ce22434617d58b4330621ef23  gcc/testsuite/gcc.target/aarch64/sve/cost_model_13.c
  e918451f74d084e54a9a7ceb98f0bf8e  gcc/testsuite/gcc.target/aarch64/sve/cost_model_2.c
  8814c7380f5de0a24225ed6e4ac88c89  gcc/testsuite/gcc.target/aarch64/sve/cost_model_3.c
  bd604bfadfafeee51abf031d456ada7f  gcc/testsuite/gcc.target/aarch64/sve/cost_model_4.c
*************** d40889fae1768a14cef6690dad5cc3e8  gcc/te
*** 51548,51554 ****
  b756b55bf45e469c93050878d9bef905  gcc/testsuite/gcc.target/aarch64/sve/dot_1.c
  32a3d39a18b234ed117bf340ef8f99ae  gcc/testsuite/gcc.target/aarch64/sve/dup_imm_1.c
  657769d7a7292850421bf9c9f489ce6b  gcc/testsuite/gcc.target/aarch64/sve/dup_imm_1_run.c
! e93e255fa904758bbf3655fd0a263628  gcc/testsuite/gcc.target/aarch64/sve/dup_lane_1.c
  7b29bcc5f4568a218b087ab7a6207177  gcc/testsuite/gcc.target/aarch64/sve/dup_lane_2.c
  f75cd152d1ea63349f09ef48040ff809  gcc/testsuite/gcc.target/aarch64/sve/dup_lane_3.c
  f8aebeb8f0a738c291cd7acbf0c1cd2e  gcc/testsuite/gcc.target/aarch64/sve/ext_1.c
--- 53944,53950 ----
  b756b55bf45e469c93050878d9bef905  gcc/testsuite/gcc.target/aarch64/sve/dot_1.c
  32a3d39a18b234ed117bf340ef8f99ae  gcc/testsuite/gcc.target/aarch64/sve/dup_imm_1.c
  657769d7a7292850421bf9c9f489ce6b  gcc/testsuite/gcc.target/aarch64/sve/dup_imm_1_run.c
! 79f15d195cc9087e1d6665345a3f5123  gcc/testsuite/gcc.target/aarch64/sve/dup_lane_1.c
  7b29bcc5f4568a218b087ab7a6207177  gcc/testsuite/gcc.target/aarch64/sve/dup_lane_2.c
  f75cd152d1ea63349f09ef48040ff809  gcc/testsuite/gcc.target/aarch64/sve/dup_lane_3.c
  f8aebeb8f0a738c291cd7acbf0c1cd2e  gcc/testsuite/gcc.target/aarch64/sve/ext_1.c
*************** d0e1d8fee3d430dd78f1f6b60a9c0f79  gcc/te
*** 51559,51568 ****
  c586ed3d32d5df8a6105efcebd07dd98  gcc/testsuite/gcc.target/aarch64/sve/extend_2.c
  4063928cf46e04fc803834e77ff45a36  gcc/testsuite/gcc.target/aarch64/sve/extend_3.c
  216fd1111249112979d7d82a869c8495  gcc/testsuite/gcc.target/aarch64/sve/extend_4.c
! 9fe11116a55ab75edb4e3a00b44adac4  gcc/testsuite/gcc.target/aarch64/sve/extract_1.c
! 2e9f1bd3b8ff279bf1f4a9abcd43ef82  gcc/testsuite/gcc.target/aarch64/sve/extract_2.c
! f1efff10daf01f5a165079c189d320ac  gcc/testsuite/gcc.target/aarch64/sve/extract_3.c
! 34ccb25085683186441bf41a29bcaf31  gcc/testsuite/gcc.target/aarch64/sve/extract_4.c
  78032a462f8d255b37f9ae88a948b638  gcc/testsuite/gcc.target/aarch64/sve/extract_5.c
  9a75f7f21b17e6d75ba9243a784a9a81  gcc/testsuite/gcc.target/aarch64/sve/fabd_1.c
  e09d60c9368e764045edec1b162362fb  gcc/testsuite/gcc.target/aarch64/sve/fabs_1.c
--- 53955,53964 ----
  c586ed3d32d5df8a6105efcebd07dd98  gcc/testsuite/gcc.target/aarch64/sve/extend_2.c
  4063928cf46e04fc803834e77ff45a36  gcc/testsuite/gcc.target/aarch64/sve/extend_3.c
  216fd1111249112979d7d82a869c8495  gcc/testsuite/gcc.target/aarch64/sve/extend_4.c
! 9d1208be5a5ddbcb536530253fc08c59  gcc/testsuite/gcc.target/aarch64/sve/extract_1.c
! 38050c69412a8327882afb28104af3c3  gcc/testsuite/gcc.target/aarch64/sve/extract_2.c
! d68047438620c41fa63ab865908964c6  gcc/testsuite/gcc.target/aarch64/sve/extract_3.c
! 8fcc627e22d38ab106a67d22164e34b1  gcc/testsuite/gcc.target/aarch64/sve/extract_4.c
  78032a462f8d255b37f9ae88a948b638  gcc/testsuite/gcc.target/aarch64/sve/extract_5.c
  9a75f7f21b17e6d75ba9243a784a9a81  gcc/testsuite/gcc.target/aarch64/sve/fabd_1.c
  e09d60c9368e764045edec1b162362fb  gcc/testsuite/gcc.target/aarch64/sve/fabs_1.c
*************** d9630005a29966b1efe72ee2c1789486  gcc/te
*** 51576,51582 ****
--- 53972,53982 ----
  cb455cf51322d0073b1b6910b82692d2  gcc/testsuite/gcc.target/aarch64/sve/fdup_1_run.c
  557d688c596d68432472a825c9640ecc  gcc/testsuite/gcc.target/aarch64/sve/fmad_1.c
  f65f677beb46c111d2f2672d44167dbd  gcc/testsuite/gcc.target/aarch64/sve/fmaxnm_1.c
+ c1c0564cf1d2b284d32af1016385082c  gcc/testsuite/gcc.target/aarch64/sve/fmaxnm_2.c
+ 586a5689dd9464f6b9793b8cbad7f66c  gcc/testsuite/gcc.target/aarch64/sve/fmaxnm_3.c
  095096ff3c12238667c767c9527b4c74  gcc/testsuite/gcc.target/aarch64/sve/fminnm_1.c
+ edcb97412d4f0f12062d1a27e0e57563  gcc/testsuite/gcc.target/aarch64/sve/fminnm_2.c
+ e227c462687c0ad2e0eaf20bcb9eb35a  gcc/testsuite/gcc.target/aarch64/sve/fminnm_3.c
  e1ebbc13eea26781f1254af1d30baefc  gcc/testsuite/gcc.target/aarch64/sve/fmla_1.c
  1b0dd67d6d3edb8d81ed2900a765e4d5  gcc/testsuite/gcc.target/aarch64/sve/fmla_2.c
  95b5b4f4d37b2eb26a3e6bb60f4621fb  gcc/testsuite/gcc.target/aarch64/sve/fmla_2_run.c
*************** f18be1e7abbda4855f72a61ca0933ab7  gcc/te
*** 51598,51603 ****
--- 53998,54005 ----
  607014dc05862a9ad4f7f4418f259f4c  gcc/testsuite/gcc.target/aarch64/sve/fsqrt_1.c
  d68da16c2a0199fc893e113ce4495812  gcc/testsuite/gcc.target/aarch64/sve/fsubr_1.c
  f07bba8d8481e5ecf52b8e2cb7e34fc4  gcc/testsuite/gcc.target/aarch64/sve/gather_load_1.c
+ d624e2893eea113ceac2f384f150224e  gcc/testsuite/gcc.target/aarch64/sve/gather_load_10.c
+ 85f4fd77f528414afa59cb2cf0575f23  gcc/testsuite/gcc.target/aarch64/sve/gather_load_11.c
  af2c0679cfb2c0a03b5088b5ce334bb4  gcc/testsuite/gcc.target/aarch64/sve/gather_load_2.c
  9e0640b59b7117e989a549c055e8e25a  gcc/testsuite/gcc.target/aarch64/sve/gather_load_3.c
  edf71ec22aa704caeb6c73794bfb3278  gcc/testsuite/gcc.target/aarch64/sve/gather_load_4.c
*************** a6c109769ec65c10a33bd1ab07d1c3e4  gcc/te
*** 51647,51656 ****
  132b3207e2f71dd95b15912e500e9d26  gcc/testsuite/gcc.target/aarch64/sve/init_8_run.c
  c69291105134fe45143a7d5b1bfce2a4  gcc/testsuite/gcc.target/aarch64/sve/init_9.c
  d098f88d65a88babb305124cb2cb7666  gcc/testsuite/gcc.target/aarch64/sve/init_9_run.c
  cb93afa281da4a2d3cf91e28d3cc69bf  gcc/testsuite/gcc.target/aarch64/sve/ld1r_1.c
  aad68f8e924a8c091e990343009eb711  gcc/testsuite/gcc.target/aarch64/sve/ld1r_2.c
  8c6fc9ab810188210a988ce10c21452b  gcc/testsuite/gcc.target/aarch64/sve/ld1r_2_run.c
! cd8d136680cc29d796e42c8155af0c87  gcc/testsuite/gcc.target/aarch64/sve/live_1.c
  923bb31c870842be1bdc0760f07e09fa  gcc/testsuite/gcc.target/aarch64/sve/live_1_run.c
  39ed1486d973a97f97b58e0b6c511eab  gcc/testsuite/gcc.target/aarch64/sve/load_const_offset_1.c
  b57cf1e950e677b2e53ac70e77c99d05  gcc/testsuite/gcc.target/aarch64/sve/load_const_offset_2.c
--- 54049,54059 ----
  132b3207e2f71dd95b15912e500e9d26  gcc/testsuite/gcc.target/aarch64/sve/init_8_run.c
  c69291105134fe45143a7d5b1bfce2a4  gcc/testsuite/gcc.target/aarch64/sve/init_9.c
  d098f88d65a88babb305124cb2cb7666  gcc/testsuite/gcc.target/aarch64/sve/init_9_run.c
+ 1e96ce2cd939f4f28b006b5b5220c084  gcc/testsuite/gcc.target/aarch64/sve/ld1_extend.c
  cb93afa281da4a2d3cf91e28d3cc69bf  gcc/testsuite/gcc.target/aarch64/sve/ld1r_1.c
  aad68f8e924a8c091e990343009eb711  gcc/testsuite/gcc.target/aarch64/sve/ld1r_2.c
  8c6fc9ab810188210a988ce10c21452b  gcc/testsuite/gcc.target/aarch64/sve/ld1r_2_run.c
! 1ea09f2a19c46ad516d0eb5b6d131af4  gcc/testsuite/gcc.target/aarch64/sve/live_1.c
  923bb31c870842be1bdc0760f07e09fa  gcc/testsuite/gcc.target/aarch64/sve/live_1_run.c
  39ed1486d973a97f97b58e0b6c511eab  gcc/testsuite/gcc.target/aarch64/sve/load_const_offset_1.c
  b57cf1e950e677b2e53ac70e77c99d05  gcc/testsuite/gcc.target/aarch64/sve/load_const_offset_2.c
*************** e22444f26c2b1ba7461b38efa2a5e5de  gcc/te
*** 51669,51700 ****
  1a8e35632d0239051c261823b239718a  gcc/testsuite/gcc.target/aarch64/sve/logical_1.c
  2e27c74ebbef71811a06bc0d203a45ba  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_abs.c
  ddf8a628cff7228b393f3993668b9a0a  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_1.c
! cd3021b639f8b21f6545353f5fd46794  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_2.c
! e0c7d33a7b2ce1b6a50639ce194f5817  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_3.c
! b302b157c6b669711b77b8ddcb9e75de  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_4.c
  ddf8a628cff7228b393f3993668b9a0a  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_5.c
! dcd0cc8f888c2b995f6696d30bfa8a5d  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_6.c
! 6c28cf386b436927f1b2a7679c6386e0  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_7.c
  2ae660f2c98943ab494315e47701a74f  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_bic_1.c
  405f5369bb51f464d85d6742ca020ab2  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_bic_2.c
  495b140628785f11bd77fde1fc83decc  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_bic_3.c
  b21a55b390b04ee1ad8c22e34aee78a9  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_bic_4.c
  e5f5100c06b847cbdff95d152faa2108  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_1.c
! cbd6566ed80675528b42079adaa6158b  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_2.c
! 9e9015e345f0cf54026c177c5ba9923a  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_3.c
! 6d859b15414ec4ef83142accc7c306b7  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_4.c
  e5f5100c06b847cbdff95d152faa2108  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_5.c
! d869fa46335fe1f1277d8dc774e9a8ff  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_6.c
! cf6a2e7dabc9aa02c9dbaf2a972aed53  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_7.c
  9b71d1249e024596b81aee2908ac01e0  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_neg.c
  19db489deda98c4cd7b868365d6359a4  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_not.c
  db85e0e4ec369cc5ab12e1d5e5555459  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_1.c
! b8fd3eb78954345230a3c1114791c629  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_2.c
! 86fa35126d3685fc7fff0bcd0c11cb5a  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_3.c
! 0e71f157b9d5286e72f34e5e11048ab4  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_4.c
  db85e0e4ec369cc5ab12e1d5e5555459  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_5.c
! 19c6468fa387e27323edf575f8972d26  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_6.c
! 3a20bcbfcc6ce643ff6ad25563c6b526  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_7.c
  5b889e0b42c621d16b8b95b4b0419fd9  gcc/testsuite/gcc.target/aarch64/sve/loop_add_1.c
  98c8b2db756d72e10d401d537d30a630  gcc/testsuite/gcc.target/aarch64/sve/loop_add_1_run.c
  a7755b98be930532d1c450534277247d  gcc/testsuite/gcc.target/aarch64/sve/loop_add_2.c
--- 54072,54103 ----
  1a8e35632d0239051c261823b239718a  gcc/testsuite/gcc.target/aarch64/sve/logical_1.c
  2e27c74ebbef71811a06bc0d203a45ba  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_abs.c
  ddf8a628cff7228b393f3993668b9a0a  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_1.c
! 61c7deba0adc8bb302cff79eaa6bfb90  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_2.c
! 7a052209fa6dfea32c67dc8696f9d83d  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_3.c
! 57887630f88a578c699accb9a5833a1a  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_4.c
  ddf8a628cff7228b393f3993668b9a0a  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_5.c
! 775ddfb8ff96b46229385273dcd103fc  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_6.c
! 7fb7f50011eb97369b1b9801df49fab1  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_and_7.c
  2ae660f2c98943ab494315e47701a74f  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_bic_1.c
  405f5369bb51f464d85d6742ca020ab2  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_bic_2.c
  495b140628785f11bd77fde1fc83decc  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_bic_3.c
  b21a55b390b04ee1ad8c22e34aee78a9  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_bic_4.c
  e5f5100c06b847cbdff95d152faa2108  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_1.c
! ef085b6017d964f7de1e06bd595ee768  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_2.c
! 75b8d8cc08c82361b0bc2aadaf9a9fad  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_3.c
! c7c58d9abc1b2973899110b6d98e58c2  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_4.c
  e5f5100c06b847cbdff95d152faa2108  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_5.c
! 0ea2bcdac92a4778b042a28ae4b8eaa1  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_6.c
! 464cfd317e6e051d2ad476c412ec5341  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_eor_7.c
  9b71d1249e024596b81aee2908ac01e0  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_neg.c
  19db489deda98c4cd7b868365d6359a4  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_not.c
  db85e0e4ec369cc5ab12e1d5e5555459  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_1.c
! 8b8ddfe260b6c4a1e30db399571c0bd6  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_2.c
! 2cdb807e733d0164c910a01f3a1d3e22  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_3.c
! 8f46b213ec939ab20a911f53e595b2a1  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_4.c
  db85e0e4ec369cc5ab12e1d5e5555459  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_5.c
! 67d61f5b6c0a6afa53d807f40a5fc63b  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_6.c
! caa2d84db90f8717a1ddcee18b4dde83  gcc/testsuite/gcc.target/aarch64/sve/logical_unpacked_orr_7.c
  5b889e0b42c621d16b8b95b4b0419fd9  gcc/testsuite/gcc.target/aarch64/sve/loop_add_1.c
  98c8b2db756d72e10d401d537d30a630  gcc/testsuite/gcc.target/aarch64/sve/loop_add_1_run.c
  a7755b98be930532d1c450534277247d  gcc/testsuite/gcc.target/aarch64/sve/loop_add_2.c
*************** ab2c2f8b2b4f63ff5400dfcc4b0cff0a  gcc/te
*** 51712,51739 ****
  b7284adec21d80573a852744d3773966  gcc/testsuite/gcc.target/aarch64/sve/mask_gather_load_5.c
  7e03eb9f8bca7ec64e92833f07e72bc1  gcc/testsuite/gcc.target/aarch64/sve/mask_gather_load_6.c
  180c63f647144505c4458c4fe8862b6b  gcc/testsuite/gcc.target/aarch64/sve/mask_gather_load_7.c
  649716e3727c061dd3cee9567b1ab97b  gcc/testsuite/gcc.target/aarch64/sve/mask_load_1.c
  a41a0265e55f04ac23145029381456f9  gcc/testsuite/gcc.target/aarch64/sve/mask_load_slp_1.c
  33047a915e1581d35186161bbca699ee  gcc/testsuite/gcc.target/aarch64/sve/mask_scatter_store_1.c
  606025785cdd6d1660f408e9fe34b4b3  gcc/testsuite/gcc.target/aarch64/sve/mask_scatter_store_2.c
! ca0adc6635e7a34553bba7a3f383074e  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_1.c
  c90ec5ef7fda5b046b14353bb213caf1  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_1_run.c
! c34f024e8010979b2b59d8aca237ef1f  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_2.c
  d9a0da227f33c19f4ede7586e9cdd9f4  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_2_run.c
! 21e88ca7d69806ad81f80d49d6271374  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_3.c
  c6f6e7729d8243981389542d9dbef36d  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_3_run.c
! adc5ee556dc908091d28d30dea0f778b  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_4.c
! 9335e4abb16b25f4ce05bbc02f9db82d  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_5.c
! ea65208928f7006e9d983e2f1a0057a7  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_6.c
! 0864a3571828f18f06bf9eaa0f8b5cbf  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_7.c
! ca62bb1a126eebc742a65ed4551e251a  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_8.c
! e42edfd9dc677e1e513954337830aa51  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_1.c
  f05ebe7f80a4e8416ad8fdf008aa8d5c  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_1_run.c
! 80aae14e3d4e0d94741125756710c568  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_2.c
  41b353144c8bf8e037a62c34baf98347  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_2_run.c
! a3cad4f099c5fc7912db7d6241e5c4a2  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_3.c
  ddd9ddbde49a4027f36a7f9bf707ac98  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_3_run.c
! c3c73f67d4a871e058128bdf98c37ce8  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_4.c
  4adb304f41746ccafd50f9ffb47f07b9  gcc/testsuite/gcc.target/aarch64/sve/maxmin_1.c
  13bbdacc3f4f9cd16b9d754faee7d2ab  gcc/testsuite/gcc.target/aarch64/sve/maxmin_1_run.c
  134ef449bd11349ce054e8286fbff2c1  gcc/testsuite/gcc.target/aarch64/sve/maxmin_strict_1.c
--- 54115,54143 ----
  b7284adec21d80573a852744d3773966  gcc/testsuite/gcc.target/aarch64/sve/mask_gather_load_5.c
  7e03eb9f8bca7ec64e92833f07e72bc1  gcc/testsuite/gcc.target/aarch64/sve/mask_gather_load_6.c
  180c63f647144505c4458c4fe8862b6b  gcc/testsuite/gcc.target/aarch64/sve/mask_gather_load_7.c
+ 52379e5a1fc8215095293f9e8d860994  gcc/testsuite/gcc.target/aarch64/sve/mask_gather_load_8.c
  649716e3727c061dd3cee9567b1ab97b  gcc/testsuite/gcc.target/aarch64/sve/mask_load_1.c
  a41a0265e55f04ac23145029381456f9  gcc/testsuite/gcc.target/aarch64/sve/mask_load_slp_1.c
  33047a915e1581d35186161bbca699ee  gcc/testsuite/gcc.target/aarch64/sve/mask_scatter_store_1.c
  606025785cdd6d1660f408e9fe34b4b3  gcc/testsuite/gcc.target/aarch64/sve/mask_scatter_store_2.c
! 314a84ea751a1268ad11fc39fa153774  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_1.c
  c90ec5ef7fda5b046b14353bb213caf1  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_1_run.c
! e961b19c15e5777e926046630acb4022  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_2.c
  d9a0da227f33c19f4ede7586e9cdd9f4  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_2_run.c
! 25f3f9591c3f9809f02707aceb315fd9  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_3.c
  c6f6e7729d8243981389542d9dbef36d  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_3_run.c
! 09e077e3570c7ad2c062051b26262984  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_4.c
! 580ec4c6c7aecbe229368cee756a20c2  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_5.c
! d473d3c091bf5718e5468fecc695a99b  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_6.c
! acba09771e8ee6468a08fba21bd1baa4  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_7.c
! f6afd81cff61022210d0e6714c551848  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_load_8.c
! 67c54d6196051f8e71b28d8ef76a7ad6  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_1.c
  f05ebe7f80a4e8416ad8fdf008aa8d5c  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_1_run.c
! 3290bb92c66a4c73225425e2c4d8bf3f  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_2.c
  41b353144c8bf8e037a62c34baf98347  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_2_run.c
! 7b85a06dc5ecf7482ada42a97c2239c3  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_3.c
  ddd9ddbde49a4027f36a7f9bf707ac98  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_3_run.c
! 392c70570ddc56c575336e2e89fe5a01  gcc/testsuite/gcc.target/aarch64/sve/mask_struct_store_4.c
  4adb304f41746ccafd50f9ffb47f07b9  gcc/testsuite/gcc.target/aarch64/sve/maxmin_1.c
  13bbdacc3f4f9cd16b9d754faee7d2ab  gcc/testsuite/gcc.target/aarch64/sve/maxmin_1_run.c
  134ef449bd11349ce054e8286fbff2c1  gcc/testsuite/gcc.target/aarch64/sve/maxmin_strict_1.c
*************** bd0ea7412913a5ce083ddea4613bd169  gcc/te
*** 51777,51783 ****
  38e3035a77b1dca0127d31c369ecc94a  gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_unsigned_1_run.c
  fa06e7238dbd52dd10fcbc8218d6f455  gcc/testsuite/gcc.target/aarch64/sve/pack_float_1.c
  f73856c9978f65aed41f7a5c062f010a  gcc/testsuite/gcc.target/aarch64/sve/pack_float_1_run.c
! 96c0717997c8b8e97db358f952b4f39d  gcc/testsuite/gcc.target/aarch64/sve/pcs/aarch64-sve-pcs.exp
  32297ab4eebb8c660c35d34c167b3298  gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_1.c
  248fda9300aa4a9871796c24beae3e58  gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_2.c
  eb3818ec16fadffb1ecf19d7a7d01030  gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_3.c
--- 54181,54188 ----
  38e3035a77b1dca0127d31c369ecc94a  gcc/testsuite/gcc.target/aarch64/sve/pack_fcvt_unsigned_1_run.c
  fa06e7238dbd52dd10fcbc8218d6f455  gcc/testsuite/gcc.target/aarch64/sve/pack_float_1.c
  f73856c9978f65aed41f7a5c062f010a  gcc/testsuite/gcc.target/aarch64/sve/pack_float_1_run.c
! 3767d9f5b48765e1ea663d93605a0b14  gcc/testsuite/gcc.target/aarch64/sve/part_vect_single_iter_epilog.c
! 81af0068658edca0dc2303ec5848ce9a  gcc/testsuite/gcc.target/aarch64/sve/pcs/aarch64-sve-pcs.exp
  32297ab4eebb8c660c35d34c167b3298  gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_1.c
  248fda9300aa4a9871796c24beae3e58  gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_2.c
  eb3818ec16fadffb1ecf19d7a7d01030  gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_3.c
*************** d3252738fa0db5bfceb3e80d9754a54f  gcc/te
*** 51925,51931 ****
  4f44041e2c506ee8f11eda5ef8e6d82a  gcc/testsuite/gcc.target/aarch64/sve/pcs/struct_2_256.c
  10f8dc4eefc15929b133ffd9eb7d8dcc  gcc/testsuite/gcc.target/aarch64/sve/pcs/struct_2_512.c
  986a34e7b68a2172352aa179ca3ae208  gcc/testsuite/gcc.target/aarch64/sve/pcs/struct_3_128.c
! 3171a094269c207c9743f462637775d3  gcc/testsuite/gcc.target/aarch64/sve/pcs/struct_3_256.c
  ff2ac4b70a46e17015348c2091d8ca97  gcc/testsuite/gcc.target/aarch64/sve/pcs/struct_3_512.c
  4d884f04b08f8626de41656c2dc89c2b  gcc/testsuite/gcc.target/aarch64/sve/pcs/unprototyped_1.c
  99b7f4143e0a6b547ec750423bb0c293  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_1.c
--- 54330,54336 ----
  4f44041e2c506ee8f11eda5ef8e6d82a  gcc/testsuite/gcc.target/aarch64/sve/pcs/struct_2_256.c
  10f8dc4eefc15929b133ffd9eb7d8dcc  gcc/testsuite/gcc.target/aarch64/sve/pcs/struct_2_512.c
  986a34e7b68a2172352aa179ca3ae208  gcc/testsuite/gcc.target/aarch64/sve/pcs/struct_3_128.c
! dbe89864fb99377871dd0d209abfd059  gcc/testsuite/gcc.target/aarch64/sve/pcs/struct_3_256.c
  ff2ac4b70a46e17015348c2091d8ca97  gcc/testsuite/gcc.target/aarch64/sve/pcs/struct_3_512.c
  4d884f04b08f8626de41656c2dc89c2b  gcc/testsuite/gcc.target/aarch64/sve/pcs/unprototyped_1.c
  99b7f4143e0a6b547ec750423bb0c293  gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_1.c
*************** f247489d5a83c25a52bba3f69ccf6256  gcc/te
*** 51955,51963 ****
--- 54360,54374 ----
  43e7bc10a42a3debf5d1ccecc4464720  gcc/testsuite/gcc.target/aarch64/sve/popcount_1_run.c
  12ecad870dc3cdd512c314f6e0ba3c08  gcc/testsuite/gcc.target/aarch64/sve/pr100048.c
  63ee86524c009d4e719a2a4650fe413f  gcc/testsuite/gcc.target/aarch64/sve/pr100302.c
+ f89a876e03833c78b85db4f1f0bfa279  gcc/testsuite/gcc.target/aarch64/sve/pr102587-1.c
+ f98509259548998e092ee54552d5eb1c  gcc/testsuite/gcc.target/aarch64/sve/pr102587-2.c
+ c2c643428e22f26ef60f0ac7fe72cab9  gcc/testsuite/gcc.target/aarch64/sve/pr103761.c
  ab7e96ffad0e120db206c2fe1d3866a9  gcc/testsuite/gcc.target/aarch64/sve/pr104474-1.c
  7730534c4e1ec8c38e74c96c2505af9f  gcc/testsuite/gcc.target/aarch64/sve/pr104474-2.c
  e30fd5dcda5a72ba3b2d66a5485b282a  gcc/testsuite/gcc.target/aarch64/sve/pr104474-3.c
+ a1eb5ddb5902496d5253fa3260ba71e1  gcc/testsuite/gcc.target/aarch64/sve/pr105197-1.c
+ 03657387d2c9ee82c783fb8d0980449a  gcc/testsuite/gcc.target/aarch64/sve/pr105197-2.c
+ 7e2aaf0806edd37415079b5c2e48b66c  gcc/testsuite/gcc.target/aarch64/sve/pr81003.c
  00b752a6e175de8b1a300df08f275461  gcc/testsuite/gcc.target/aarch64/sve/pr87563.c
  c56eeba71ad463673a1bdb30e7a94863  gcc/testsuite/gcc.target/aarch64/sve/pr87815.c
  f0e2b5504e3b6dcd97ff8a6d8549d00e  gcc/testsuite/gcc.target/aarch64/sve/pr88834.c
*************** f489c5abc2ffc3a8cc03ca0a831513a0  gcc/te
*** 51966,51971 ****
--- 54377,54383 ----
  cade04c34d59dcc18fe0606f0bd12dda  gcc/testsuite/gcc.target/aarch64/sve/pr89007-1.c
  58206037487584b9069bf315874db761  gcc/testsuite/gcc.target/aarch64/sve/pr89007-2.c
  524dba2cfc8aa02f6ecbcd599762ae62  gcc/testsuite/gcc.target/aarch64/sve/pr91166.c
+ b8cc1762bc5a2f3599b4ca89f90fec1d  gcc/testsuite/gcc.target/aarch64/sve/pr93183.c
  69268dbafdd67918766f6fc2d133be88  gcc/testsuite/gcc.target/aarch64/sve/pr94605.c
  7a04cbd4fe6d9ffe0c440e333719e020  gcc/testsuite/gcc.target/aarch64/sve/pr94668.c
  522561ce94b0c1609f8ab3c1d3d2db75  gcc/testsuite/gcc.target/aarch64/sve/pr95199.c
*************** d1c128e3b98b85fbd2989c58c4ec796d  gcc/te
*** 51994,51999 ****
--- 54406,54417 ----
  2c1a652b1133f045edf5ad7b399104ea  gcc/testsuite/gcc.target/aarch64/sve/pr99873_3.c
  a866cb5b08078d8fe7c2f8ead2f55150  gcc/testsuite/gcc.target/aarch64/sve/pr99929_1.c
  26d14a9990e480e5b2370a215688cb95  gcc/testsuite/gcc.target/aarch64/sve/pr99929_2.c
+ 331555427c952e0fafa4d28627ba2203  gcc/testsuite/gcc.target/aarch64/sve/pred-combine-and.c
+ 8827ce78fac454b1055c71e630a32f2f  gcc/testsuite/gcc.target/aarch64/sve/pred-cond-reduc.c
+ 08acdc830c2cfab2d6049cb71c8781cd  gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-1.c
+ e96a492f889ca21f0d94c0f7863bccd3  gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-2.c
+ 1c82ca31e6643e7150d5be264a0b3f0b  gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-3.c
+ 079632525d7b76525b81e9a6e9583134  gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-4.c
  e9e92c2ec92da9f29261bd9d1a3cace4  gcc/testsuite/gcc.target/aarch64/sve/pred_elim_1.c
  bc00a0e0dea7500ecba0544bd58c0277  gcc/testsuite/gcc.target/aarch64/sve/pred_elim_2.c
  5db11794c73b7fe99d963e6944cfc839  gcc/testsuite/gcc.target/aarch64/sve/ptest_1.c
*************** be3bc45b321c4b84deacc9d04819a288  gcc/te
*** 52002,52007 ****
--- 54420,54437 ----
  3add3c4eeb186f7df0ea71734e4f8388  gcc/testsuite/gcc.target/aarch64/sve/recip_2.c
  1084723133d34a91ce87f86d443c8f61  gcc/testsuite/gcc.target/aarch64/sve/recip_2_run.c
  b4f3ba875c95bc8df3dbda6ac50c0d90  gcc/testsuite/gcc.target/aarch64/sve/reduc_1.c
+ f5634915884bf1aac97667083a6b1017  gcc/testsuite/gcc.target/aarch64/sve/reduc_10.c
+ 4a6449c5498abcb81776cd618048ed45  gcc/testsuite/gcc.target/aarch64/sve/reduc_10_run.c
+ 9fe086ecdd8dfbc9210252a357504931  gcc/testsuite/gcc.target/aarch64/sve/reduc_11.c
+ 9ca9559efda1916fb3e19d042c196cac  gcc/testsuite/gcc.target/aarch64/sve/reduc_11_run.c
+ 1f5bb443cf78362bf8f4c7d71da7f814  gcc/testsuite/gcc.target/aarch64/sve/reduc_12.c
+ cdc6e01e2de5719fb7694ccc39a999b8  gcc/testsuite/gcc.target/aarch64/sve/reduc_12_run.c
+ 2396693e7a2308b31777f247d8fa5190  gcc/testsuite/gcc.target/aarch64/sve/reduc_13.c
+ 3da6c4b370554fe5c58dd637509b1e66  gcc/testsuite/gcc.target/aarch64/sve/reduc_13_run.c
+ 4a707b24775466595cdd5c88ed30a449  gcc/testsuite/gcc.target/aarch64/sve/reduc_14.c
+ 65dfd79d64327217de98fc1d305409ef  gcc/testsuite/gcc.target/aarch64/sve/reduc_14_run.c
+ df161907dbf49702db6aa30e61b5ef86  gcc/testsuite/gcc.target/aarch64/sve/reduc_15.c
+ daab375362483e8014756ab186ebd27a  gcc/testsuite/gcc.target/aarch64/sve/reduc_15_run.c
  e5af8d5ddc19297c37575ca92211e116  gcc/testsuite/gcc.target/aarch64/sve/reduc_1_run.c
  3aef5423a085cfc20a6b9611c8731143  gcc/testsuite/gcc.target/aarch64/sve/reduc_2.c
  ff9d5e617831a577f203db2924357e2e  gcc/testsuite/gcc.target/aarch64/sve/reduc_2_run.c
*************** ff9d5e617831a577f203db2924357e2e  gcc/te
*** 52012,52017 ****
--- 54442,54449 ----
  3095445690a40e55afa7db24a400e0c5  gcc/testsuite/gcc.target/aarch64/sve/reduc_6.c
  6cbd4fabf5b87a93d965dbd192f3cbcb  gcc/testsuite/gcc.target/aarch64/sve/reduc_7.c
  fcf8084da81011cba1c5b9d50d917a10  gcc/testsuite/gcc.target/aarch64/sve/reduc_8.c
+ 732b7f9b288917dec41ae6edb93a0c64  gcc/testsuite/gcc.target/aarch64/sve/reduc_9.c
+ e9412748f42464e73956ed0b43b916ec  gcc/testsuite/gcc.target/aarch64/sve/reduc_9_run.c
  4f12a25fddc3492c7dea607a34326ce2  gcc/testsuite/gcc.target/aarch64/sve/reduc_strict_1.c
  29325badacb452a69d016572fc2c2aef  gcc/testsuite/gcc.target/aarch64/sve/reduc_strict_1_run.c
  be23f2835abad04ca7c96e9f41d100dd  gcc/testsuite/gcc.target/aarch64/sve/reduc_strict_2.c
*************** ea96e0c3148179cba37c3aa8410afe8f  gcc/te
*** 52057,52063 ****
  aff4971b5f3193b9e2a927dfa176b6d6  gcc/testsuite/gcc.target/aarch64/sve/single_2.c
  dc2e19332dc2abe19e6f3ebbfdb15163  gcc/testsuite/gcc.target/aarch64/sve/single_3.c
  f7ebb6b139ec5de7aac9309c7c1525fb  gcc/testsuite/gcc.target/aarch64/sve/single_4.c
! bf79046a3aad0fcf1f8a4f5794b74c44  gcc/testsuite/gcc.target/aarch64/sve/single_5.c
  2b5533c811869448f2c015cec02da768  gcc/testsuite/gcc.target/aarch64/sve/slp_1.c
  2d92793326712b8d9999095da4e74955  gcc/testsuite/gcc.target/aarch64/sve/slp_10.c
  df29a45b5ee2033132b0a6f7d96ebfe3  gcc/testsuite/gcc.target/aarch64/sve/slp_10_run.c
--- 54489,54495 ----
  aff4971b5f3193b9e2a927dfa176b6d6  gcc/testsuite/gcc.target/aarch64/sve/single_2.c
  dc2e19332dc2abe19e6f3ebbfdb15163  gcc/testsuite/gcc.target/aarch64/sve/single_3.c
  f7ebb6b139ec5de7aac9309c7c1525fb  gcc/testsuite/gcc.target/aarch64/sve/single_4.c
! 846452acd80024e0dbdf7c35b1765b65  gcc/testsuite/gcc.target/aarch64/sve/single_5.c
  2b5533c811869448f2c015cec02da768  gcc/testsuite/gcc.target/aarch64/sve/slp_1.c
  2d92793326712b8d9999095da4e74955  gcc/testsuite/gcc.target/aarch64/sve/slp_10.c
  df29a45b5ee2033132b0a6f7d96ebfe3  gcc/testsuite/gcc.target/aarch64/sve/slp_10_run.c
*************** a85a20601345f1048cc1b6fe0c73f504  gcc/te
*** 52159,52165 ****
  23a9863cd6eacac9f7376a55c013460c  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_23_run.c
  02e008c0ae3619e8c52012ed54eebbb1  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c
  8fc0784710a38cd83d666e4753cf4cec  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24_run.c
! fa1efebb3448a51087f75dad039f117c  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_25.c
  8585a6e5cc9377355b604e2185a211c2  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_26.c
  5973edc53e3d95a5c06d7cc5a2f17582  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_2_run.c
  e73177f3815fd6df9d8dbb470ff3a8fc  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_3.c
--- 54591,54597 ----
  23a9863cd6eacac9f7376a55c013460c  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_23_run.c
  02e008c0ae3619e8c52012ed54eebbb1  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c
  8fc0784710a38cd83d666e4753cf4cec  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24_run.c
! 065471df9040c5f345e64b575e067e38  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_25.c
  8585a6e5cc9377355b604e2185a211c2  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_26.c
  5973edc53e3d95a5c06d7cc5a2f17582  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_2_run.c
  e73177f3815fd6df9d8dbb470ff3a8fc  gcc/testsuite/gcc.target/aarch64/sve/struct_vect_3.c
*************** ed24813645562316311675bf8409cfc5  gcc/te
*** 52279,52284 ****
--- 54711,54717 ----
  cbb22a935d1768837f5969eca674b5f8  gcc/testsuite/gcc.target/aarch64/sve/vec_perm_const_single_1_run.c
  661c355d657c0e853dce72437a032ef3  gcc/testsuite/gcc.target/aarch64/sve/vec_perm_single_1.c
  1fdea20be121da7789c290195705e989  gcc/testsuite/gcc.target/aarch64/sve/vec_perm_single_1_run.c
+ f0756c53ff3a98bc41d556c52afe94e6  gcc/testsuite/gcc.target/aarch64/sve/vusdot-autovec.c
  8f996475a52aff431b850bf794a5aeb4  gcc/testsuite/gcc.target/aarch64/sve/while_1.c
  bf66f155c3e51c7d9f592a9699731758  gcc/testsuite/gcc.target/aarch64/sve/while_10.c
  89a82ac96aefbb422ee7fcff6332dce4  gcc/testsuite/gcc.target/aarch64/sve/while_2.c
*************** e13b38f2990120fb563c7e3296667346  gcc/te
*** 52294,52302 ****
  1a84a5937709246fd93ca5b48868e104  gcc/testsuite/gcc.target/aarch64/sve/zip1_2.c
  c5724f6767410c7983d266d6febb0f89  gcc/testsuite/gcc.target/aarch64/sve/zip2_1.c
  2eed99c891a5aeae7979afd71257ceaa  gcc/testsuite/gcc.target/aarch64/sve/zip2_2.c
! 3087dda86a96ff0ff0c2aa33ece27389  gcc/testsuite/gcc.target/aarch64/sve2/aarch64-sve2.exp
! db83f089cac6dbcee3c62875a142c1b7  gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp
! b8800c3d8b857737398ddfa295617015  gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle.exp
  f70a8121d1df4875294cca368f9923a7  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s16.c
  c218a2086e6a44bef255447d1da29b8b  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s32.c
  e66b0c7936f0923b4b4c2d6f4e417206  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s64.c
--- 54727,54735 ----
  1a84a5937709246fd93ca5b48868e104  gcc/testsuite/gcc.target/aarch64/sve/zip1_2.c
  c5724f6767410c7983d266d6febb0f89  gcc/testsuite/gcc.target/aarch64/sve/zip2_1.c
  2eed99c891a5aeae7979afd71257ceaa  gcc/testsuite/gcc.target/aarch64/sve/zip2_2.c
! 42b66826f4f6e8ad57f3d62c896beda1  gcc/testsuite/gcc.target/aarch64/sve2/aarch64-sve2.exp
! 9a98bf4dc7c3488ab663213675280146  gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp
! 098a5609ee21fd0ef6d4bb1ed63449cb  gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle.exp
  f70a8121d1df4875294cca368f9923a7  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s16.c
  c218a2086e6a44bef255447d1da29b8b  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s32.c
  e66b0c7936f0923b4b4c2d6f4e417206  gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s64.c
*************** a2ccf9bfd1d0bb840b23c25e1bdec31c  gcc/te
*** 53238,53244 ****
  4d1251d696b9339c130cb783420a3ecc  gcc/testsuite/gcc.target/aarch64/tlsle32_1.c
  d7ac99c012df73ffbde36998316bf1ef  gcc/testsuite/gcc.target/aarch64/tlsle_sizeadj_small_1.c
  fc2eb8ac52faed5fba0a017b858d4ae4  gcc/testsuite/gcc.target/aarch64/tlsle_sizeadj_tiny_1.c
! cb0bc42e0cec0ac886c33323d1a33381  gcc/testsuite/gcc.target/aarch64/torture/aarch64-torture.exp
  5266ac107a73e3ee1d1f44e1cda7d9f2  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-1.c
  9c3416db2fc04c3f91b03ecae15e943e  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-10.c
  df55bfe2c1ce46074b19b4566cedeef4  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-11.c
--- 55671,55677 ----
  4d1251d696b9339c130cb783420a3ecc  gcc/testsuite/gcc.target/aarch64/tlsle32_1.c
  d7ac99c012df73ffbde36998316bf1ef  gcc/testsuite/gcc.target/aarch64/tlsle_sizeadj_small_1.c
  fc2eb8ac52faed5fba0a017b858d4ae4  gcc/testsuite/gcc.target/aarch64/tlsle_sizeadj_tiny_1.c
! 22ac2528ed143d2373bc7e340f2a5215  gcc/testsuite/gcc.target/aarch64/torture/aarch64-torture.exp
  5266ac107a73e3ee1d1f44e1cda7d9f2  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-1.c
  9c3416db2fc04c3f91b03ecae15e943e  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-10.c
  df55bfe2c1ce46074b19b4566cedeef4  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-11.c
*************** f3d243dcf39853698a3cfd781d75b3d2  gcc/te
*** 53276,53282 ****
--- 55709,55718 ----
  024d1f585de70b82f167196c61a54ae0  gcc/testsuite/gcc.target/aarch64/vabs_intrinsic_2.c
  728f749c4cba9ae3b23ce748898dbbfc  gcc/testsuite/gcc.target/aarch64/vabs_intrinsic_3.c
  04bd6d209138b6065aa56466964c5d38  gcc/testsuite/gcc.target/aarch64/vabsd_s64.c
+ 0137e26104febeefb127214806921f5d  gcc/testsuite/gcc.target/aarch64/vaddX_high_cost.c
  dc94f6cc36939ec840efaf38cd2c5f0b  gcc/testsuite/gcc.target/aarch64/vadd_f64.c
+ 248ce42670f7d6619e34e9f0e620ab1e  gcc/testsuite/gcc.target/aarch64/vadd_reduc-1.c
+ 3fa674f98f53170c2ca93869bf9d2c8c  gcc/testsuite/gcc.target/aarch64/vadd_reduc-2.c
  fec967eda33c049f56db1d868caa498e  gcc/testsuite/gcc.target/aarch64/vaddv-intrinsic-compile.c
  233cac300eab2e10bb368145246a76f0  gcc/testsuite/gcc.target/aarch64/vaddv-intrinsic.c
  2c5f051a343e8c52e858f08ad4f1812c  gcc/testsuite/gcc.target/aarch64/vaddv-intrinsic.x
*************** a82a34a90c1885b8543809c27d268007  gcc/te
*** 53286,53298 ****
  1bf029a98dfd40a160366b47ba152da5  gcc/testsuite/gcc.target/aarch64/vbslq_f64_2.c
  0e006a0f05ff11e653d327f2555f6515  gcc/testsuite/gcc.target/aarch64/vbslq_u64_1.c
  19d75325650155f269c201a05287efb5  gcc/testsuite/gcc.target/aarch64/vbslq_u64_2.c
! df79bf891875d63c1d1cee6ea11010ff  gcc/testsuite/gcc.target/aarch64/vclz.c
  bf8d75c7373fd9960d5991b8c49f6925  gcc/testsuite/gcc.target/aarch64/vdiv_f.c
  bfe5a6a3a53aebcbe2f24517d1b04256  gcc/testsuite/gcc.target/aarch64/vdup_lane_1.c
  f7f2344a72602b25102a0f740e8d9987  gcc/testsuite/gcc.target/aarch64/vdup_lane_2.c
  9ac0a5a454f83f3513fc68f070422119  gcc/testsuite/gcc.target/aarch64/vdup_n_1.c
  1c93884e2e0d923d37c8896f3e314217  gcc/testsuite/gcc.target/aarch64/vdup_n_2.c
  a37827c58e9b235ef8fb68b9d0397a33  gcc/testsuite/gcc.target/aarch64/vdup_n_3.c
  b1c97e59631c205f913afab4e1ffde4a  gcc/testsuite/gcc.target/aarch64/vec_init_1.c
  96b0c4ebb4ed6713b9f9e7fbb787a46c  gcc/testsuite/gcc.target/aarch64/vec_zeroextend.c
  a8bd653ddae99985293ee04dc707de34  gcc/testsuite/gcc.target/aarch64/vect-abs-compile.c
--- 55722,55746 ----
  1bf029a98dfd40a160366b47ba152da5  gcc/testsuite/gcc.target/aarch64/vbslq_f64_2.c
  0e006a0f05ff11e653d327f2555f6515  gcc/testsuite/gcc.target/aarch64/vbslq_u64_1.c
  19d75325650155f269c201a05287efb5  gcc/testsuite/gcc.target/aarch64/vbslq_u64_2.c
! b6f854a708ce32ba728caa3296ffbdb0  gcc/testsuite/gcc.target/aarch64/vclz.c
  bf8d75c7373fd9960d5991b8c49f6925  gcc/testsuite/gcc.target/aarch64/vdiv_f.c
  bfe5a6a3a53aebcbe2f24517d1b04256  gcc/testsuite/gcc.target/aarch64/vdup_lane_1.c
  f7f2344a72602b25102a0f740e8d9987  gcc/testsuite/gcc.target/aarch64/vdup_lane_2.c
  9ac0a5a454f83f3513fc68f070422119  gcc/testsuite/gcc.target/aarch64/vdup_n_1.c
  1c93884e2e0d923d37c8896f3e314217  gcc/testsuite/gcc.target/aarch64/vdup_n_2.c
  a37827c58e9b235ef8fb68b9d0397a33  gcc/testsuite/gcc.target/aarch64/vdup_n_3.c
+ 6373941c7a38d57c6e9f57889eeb10ed  gcc/testsuite/gcc.target/aarch64/vec-init-10.c
+ 8a1633a7f054df8919c5747b9e556c8f  gcc/testsuite/gcc.target/aarch64/vec-init-11.c
+ ec1f4e31dbc32ad8c510ee0d47b63019  gcc/testsuite/gcc.target/aarch64/vec-init-12.c
+ 5bd375529fd8638029099f584e579898  gcc/testsuite/gcc.target/aarch64/vec-init-13.c
+ 60b064e1457c5d85a4f2c92d2d601d44  gcc/testsuite/gcc.target/aarch64/vec-init-14.c
+ 5a02fc8d0841b45c544a81856934d565  gcc/testsuite/gcc.target/aarch64/vec-init-15.c
+ fe39e0171addd79f69407e9a5dd97957  gcc/testsuite/gcc.target/aarch64/vec-init-16.c
+ 716927e27c337fb94328f360dbc20d8d  gcc/testsuite/gcc.target/aarch64/vec-init-17.c
+ 3e4c042c59f7ebd0de553ce71974d7f0  gcc/testsuite/gcc.target/aarch64/vec-init-6.c
+ 23056a98bd836157022df74aba0ea38d  gcc/testsuite/gcc.target/aarch64/vec-init-7.c
+ a0d7ee23594a897783efec837fcc9a89  gcc/testsuite/gcc.target/aarch64/vec-init-8.c
+ e7da83991e6ca968f7a645695ab5ebd7  gcc/testsuite/gcc.target/aarch64/vec-init-9.c
  b1c97e59631c205f913afab4e1ffde4a  gcc/testsuite/gcc.target/aarch64/vec_init_1.c
  96b0c4ebb4ed6713b9f9e7fbb787a46c  gcc/testsuite/gcc.target/aarch64/vec_zeroextend.c
  a8bd653ddae99985293ee04dc707de34  gcc/testsuite/gcc.target/aarch64/vect-abs-compile.c
*************** a8bd653ddae99985293ee04dc707de34  gcc/te
*** 53301,53306 ****
--- 55749,55755 ----
  f5c728d57ec7b4ccd629be9ae3daa4e9  gcc/testsuite/gcc.target/aarch64/vect-add-sub-cond.c
  459f637ca04566f864e27fecd8292d26  gcc/testsuite/gcc.target/aarch64/vect-clz.c
  e17c8c4e15c789037c218893bf9161b8  gcc/testsuite/gcc.target/aarch64/vect-compile.c
+ 986d69eb9a7dc04ea29856c73f985853  gcc/testsuite/gcc.target/aarch64/vect-cse-codegen.c
  d7d37bd9558713b30e8774cf2b0adc67  gcc/testsuite/gcc.target/aarch64/vect-faddv-compile.c
  561fb26098c56226b672e381ee1cfb4f  gcc/testsuite/gcc.target/aarch64/vect-faddv.c
  82a1b7c6de9e1d98e38135298f34c932  gcc/testsuite/gcc.target/aarch64/vect-faddv.x
*************** dcbcf59e709ae15068ba6ef929f341e4  gcc/te
*** 53315,53321 ****
  ee90316f15da27e84e8dc325bd4f951f  gcc/testsuite/gcc.target/aarch64/vect-fmax-fmin.c
  d9a0bab052e5c4a3749879bd86ede0c8  gcc/testsuite/gcc.target/aarch64/vect-fmax-fmin.x
  b82cd9f1530af5340f35103ab9b4a93e  gcc/testsuite/gcc.target/aarch64/vect-fmaxv-fminv-compile.c
! f82f908e8104329c91761b0c757a6a92  gcc/testsuite/gcc.target/aarch64/vect-fmaxv-fminv.x
  1044b54f067a2d59582e412a6a6ffb51  gcc/testsuite/gcc.target/aarch64/vect-fmovd-zero.c
  2c13a863507880cfa47082cddd445f7c  gcc/testsuite/gcc.target/aarch64/vect-fmovd.c
  3116662b28a7e564c5cb28249e6ec7c8  gcc/testsuite/gcc.target/aarch64/vect-fmovf-zero.c
--- 55764,55770 ----
  ee90316f15da27e84e8dc325bd4f951f  gcc/testsuite/gcc.target/aarch64/vect-fmax-fmin.c
  d9a0bab052e5c4a3749879bd86ede0c8  gcc/testsuite/gcc.target/aarch64/vect-fmax-fmin.x
  b82cd9f1530af5340f35103ab9b4a93e  gcc/testsuite/gcc.target/aarch64/vect-fmaxv-fminv-compile.c
! 7c01b2ab381c8fd0144c7fc213c50d11  gcc/testsuite/gcc.target/aarch64/vect-fmaxv-fminv.x
  1044b54f067a2d59582e412a6a6ffb51  gcc/testsuite/gcc.target/aarch64/vect-fmovd-zero.c
  2c13a863507880cfa47082cddd445f7c  gcc/testsuite/gcc.target/aarch64/vect-fmovd.c
  3116662b28a7e564c5cb28249e6ec7c8  gcc/testsuite/gcc.target/aarch64/vect-fmovf-zero.c
*************** c1dc1c8c4bf53ce9009691cb397b17fb  gcc/te
*** 53339,53350 ****
  4c23211610928caca9d9dbde2a7898ce  gcc/testsuite/gcc.target/aarch64/vect-mull.c
  41ca9099e8b15c49acbe7f753f163047  gcc/testsuite/gcc.target/aarch64/vect-mull.x
  ded4af2ae02936eb4be45e9e08f45373  gcc/testsuite/gcc.target/aarch64/vect-reduc-or_1.c
  9beae85b914c12abd4365f24d1b9d2e0  gcc/testsuite/gcc.target/aarch64/vect-slp-dup.c
! b36da87acc826a3d5a4996c3d93d74b4  gcc/testsuite/gcc.target/aarch64/vect-vaddv.c
  ab6883e822bb3f1fc8d811e7e3f12d7a  gcc/testsuite/gcc.target/aarch64/vect-vca.c
  00f6ce34304d67309d3c34f69cbf32c0  gcc/testsuite/gcc.target/aarch64/vect-vcvt.c
  f4f649fed2885c785319cab7327c85be  gcc/testsuite/gcc.target/aarch64/vect-vfmaxv.c
! a02875626b1b0f35faabdf9a94a81379  gcc/testsuite/gcc.target/aarch64/vect-vmaxv.c
  8e92dda024e7991c23b32a3f9256b71c  gcc/testsuite/gcc.target/aarch64/vect-vrnd.c
  6e2c7398c236cc99969146f2c4cfe20a  gcc/testsuite/gcc.target/aarch64/vect-widen-add.c
  97a0d1424e83df1c9f02fdc0ca3f2eaa  gcc/testsuite/gcc.target/aarch64/vect-widen-lshift.c
--- 55788,55801 ----
  4c23211610928caca9d9dbde2a7898ce  gcc/testsuite/gcc.target/aarch64/vect-mull.c
  41ca9099e8b15c49acbe7f753f163047  gcc/testsuite/gcc.target/aarch64/vect-mull.x
  ded4af2ae02936eb4be45e9e08f45373  gcc/testsuite/gcc.target/aarch64/vect-reduc-or_1.c
+ cbb6981a9f5fba990ee2d0f5e5e38a50  gcc/testsuite/gcc.target/aarch64/vect-shr-reg-run.c
+ f0d2e1dd6eaa2c17de51dc5c456d92a1  gcc/testsuite/gcc.target/aarch64/vect-shr-reg.c
  9beae85b914c12abd4365f24d1b9d2e0  gcc/testsuite/gcc.target/aarch64/vect-slp-dup.c
! 909f6319658fdb0f9bdf4418a97e4bed  gcc/testsuite/gcc.target/aarch64/vect-vaddv.c
  ab6883e822bb3f1fc8d811e7e3f12d7a  gcc/testsuite/gcc.target/aarch64/vect-vca.c
  00f6ce34304d67309d3c34f69cbf32c0  gcc/testsuite/gcc.target/aarch64/vect-vcvt.c
  f4f649fed2885c785319cab7327c85be  gcc/testsuite/gcc.target/aarch64/vect-vfmaxv.c
! 775eebe5ddc5745391badfaf19b8f030  gcc/testsuite/gcc.target/aarch64/vect-vmaxv.c
  8e92dda024e7991c23b32a3f9256b71c  gcc/testsuite/gcc.target/aarch64/vect-vrnd.c
  6e2c7398c236cc99969146f2c4cfe20a  gcc/testsuite/gcc.target/aarch64/vect-widen-add.c
  97a0d1424e83df1c9f02fdc0ca3f2eaa  gcc/testsuite/gcc.target/aarch64/vect-widen-lshift.c
*************** b492ca2077d7ff66c6b66f4ab082437f  gcc/te
*** 53380,53385 ****
--- 55831,55837 ----
  d8b7bf172e8cfd96979b54e10c4e2570  gcc/testsuite/gcc.target/aarch64/vect_urhadd_1.c
  739575d641b47c254cda6c8d642702f9  gcc/testsuite/gcc.target/aarch64/vector_initialization_nostack.c
  91822962d5a71129a8f94a0f50f2c42b  gcc/testsuite/gcc.target/aarch64/vector_intrinsics.c
+ dc26c976e2b4512c622399bbaac9f150  gcc/testsuite/gcc.target/aarch64/vector_structure_intrinsics.c
  3e4dc9db466ce6ecea8d0ef182864814  gcc/testsuite/gcc.target/aarch64/vfp-1.c
  a7efe0794d7e3b0752ef79d9b193f732  gcc/testsuite/gcc.target/aarch64/vget_high_1.c
  ba86e661dd1013208b7601f68c9e82c6  gcc/testsuite/gcc.target/aarch64/vget_low_1.c
*************** ae3dcb9a10323462d2895ea14f4c6684  gcc/te
*** 53396,53404 ****
  62035331b5c5eb4d0fe9a0334d3e3e5e  gcc/testsuite/gcc.target/aarch64/vminmaxnm.c
  bdf9d08039684c459d9bd2f4906dba34  gcc/testsuite/gcc.target/aarch64/vmlsq_laneq.c
  409b07ca9d40dc8382417b1603d0ef73  gcc/testsuite/gcc.target/aarch64/vmov_n_1.c
  d2f71c9a8f824772ab107bdaf0839870  gcc/testsuite/gcc.target/aarch64/vmull_high.c
  9f424dd56aa71f8e58ceb86afbda1222  gcc/testsuite/gcc.target/aarch64/vneg_f.c
! c88e74d91be23051ffbee8f6823d31f2  gcc/testsuite/gcc.target/aarch64/vneg_s.c
  c27cd11cb4353e9072489de48a39f33f  gcc/testsuite/gcc.target/aarch64/vnegd_s64.c
  2655ac4297efd263942058c5d2f07f09  gcc/testsuite/gcc.target/aarch64/volatile-bitfields-1.c
  8c5d2f2ef90312aaf1f0ada7c6b329b2  gcc/testsuite/gcc.target/aarch64/volatile-bitfields-2.c
--- 55848,55858 ----
  62035331b5c5eb4d0fe9a0334d3e3e5e  gcc/testsuite/gcc.target/aarch64/vminmaxnm.c
  bdf9d08039684c459d9bd2f4906dba34  gcc/testsuite/gcc.target/aarch64/vmlsq_laneq.c
  409b07ca9d40dc8382417b1603d0ef73  gcc/testsuite/gcc.target/aarch64/vmov_n_1.c
+ f396728d36bed45894998d7b009efac3  gcc/testsuite/gcc.target/aarch64/vmul_element_cost.c
+ be7b9112dd5058346e2ee26757774711  gcc/testsuite/gcc.target/aarch64/vmul_high_cost.c
  d2f71c9a8f824772ab107bdaf0839870  gcc/testsuite/gcc.target/aarch64/vmull_high.c
  9f424dd56aa71f8e58ceb86afbda1222  gcc/testsuite/gcc.target/aarch64/vneg_f.c
! a86bab52ed8f1c7e99a1079912560746  gcc/testsuite/gcc.target/aarch64/vneg_s.c
  c27cd11cb4353e9072489de48a39f33f  gcc/testsuite/gcc.target/aarch64/vnegd_s64.c
  2655ac4297efd263942058c5d2f07f09  gcc/testsuite/gcc.target/aarch64/volatile-bitfields-1.c
  8c5d2f2ef90312aaf1f0ada7c6b329b2  gcc/testsuite/gcc.target/aarch64/volatile-bitfields-2.c
*************** fff68cd290eb86ce8f06ea13ed5faa22  gcc/te
*** 53413,53421 ****
--- 55867,55878 ----
  5327c54e472803bc937f2e541178a4cc  gcc/testsuite/gcc.target/aarch64/vreinterpret_f64_1.c
  c0803769acd381cc7aafe349d89af3d8  gcc/testsuite/gcc.target/aarch64/vrnd_f64_1.c
  fdf65cde1ab9b0d61f25e804e84db5ad  gcc/testsuite/gcc.target/aarch64/vset_lane_1.c
+ 10f542d64fd18c97422ac929f85b3825  gcc/testsuite/gcc.target/aarch64/vsqrt-1.c
+ e4f85dffe096aff3481a9a524e569449  gcc/testsuite/gcc.target/aarch64/vsqrt-2.c
  93fc6cd2c39a0e44d5a8f0087756fdd1  gcc/testsuite/gcc.target/aarch64/vsqrt.c
  b5ecf30fba93e99a54d4a7207e8b7e89  gcc/testsuite/gcc.target/aarch64/vstN_1.c
  bdc07c3b7e37cb1f5eca49bd24a3eebb  gcc/testsuite/gcc.target/aarch64/vstN_lane_1.c
+ 569bf2769d1bd9517795da4a265390c7  gcc/testsuite/gcc.target/aarch64/vsubX_high_cost.c
  7a4d12517c5382175058d5696e5dd6dd  gcc/testsuite/gcc.target/aarch64/vsub_f64.c
  1bdd33d50b1c7924437425df4a5a57fa  gcc/testsuite/gcc.target/aarch64/vzip_1.c
  1ef0402656b46734e00d7687ac6cc01a  gcc/testsuite/gcc.target/aarch64/vzip_2.c
*************** e916fcf0c3130fc5102d03f2d729ff64  gcc/te
*** 53427,53436 ****
  73648276a5cd96f9c11169ae4e70ef9c  gcc/testsuite/gcc.target/aarch64/with-tune-mtune.c
  1a1d5b3eed51d3d70093486855498c52  gcc/testsuite/gcc.target/aarch64/xorsign.c
  69c2e660fb11d6895b17cde723e07c66  gcc/testsuite/gcc.target/aarch64/xorsign_exec.c
  17f6fb1c3dca9d7ede25b02cf419efc7  gcc/testsuite/gcc.target/alpha/20000715-1.c
  11ab80b2f79c054dcb32865854c6ea77  gcc/testsuite/gcc.target/alpha/20011018-1.c
  2d8c29ac23704a70a80831327c5e0754  gcc/testsuite/gcc.target/alpha/980217-1.c
! 1ed1fc28999c21c7b11b3051559326de  gcc/testsuite/gcc.target/alpha/alpha.exp
  a9f54382c872d8300abd0751aaf2baa7  gcc/testsuite/gcc.target/alpha/asm-1.c
  72088d2975371a0383b6fa19c63a6ee4  gcc/testsuite/gcc.target/alpha/base-1.c
  2cf5d8a00cade8200304281bbeb38cff  gcc/testsuite/gcc.target/alpha/base-2.c
--- 55884,55899 ----
  73648276a5cd96f9c11169ae4e70ef9c  gcc/testsuite/gcc.target/aarch64/with-tune-mtune.c
  1a1d5b3eed51d3d70093486855498c52  gcc/testsuite/gcc.target/aarch64/xorsign.c
  69c2e660fb11d6895b17cde723e07c66  gcc/testsuite/gcc.target/aarch64/xorsign_exec.c
+ ea71ffff06bc29290526b871fc5578de  gcc/testsuite/gcc.target/aarch64/xtn-combine-1.c
+ cfcc9465aff8635171e854029f1c3211  gcc/testsuite/gcc.target/aarch64/xtn-combine-2.c
+ af390eecb595c38839ef22a261c6b84b  gcc/testsuite/gcc.target/aarch64/xtn-combine-3.c
+ adfefe2b91e8a8e97bf4cf01135da714  gcc/testsuite/gcc.target/aarch64/xtn-combine-4.c
+ c22c4c4adab28d6e3f60fb3aea74e7e9  gcc/testsuite/gcc.target/aarch64/xtn-combine-5.c
+ f439076be9a48a135c5fa2921d660d58  gcc/testsuite/gcc.target/aarch64/xtn-combine-6.c
  17f6fb1c3dca9d7ede25b02cf419efc7  gcc/testsuite/gcc.target/alpha/20000715-1.c
  11ab80b2f79c054dcb32865854c6ea77  gcc/testsuite/gcc.target/alpha/20011018-1.c
  2d8c29ac23704a70a80831327c5e0754  gcc/testsuite/gcc.target/alpha/980217-1.c
! 63bd32e5398ea33032be4e6f33159d8b  gcc/testsuite/gcc.target/alpha/alpha.exp
  a9f54382c872d8300abd0751aaf2baa7  gcc/testsuite/gcc.target/alpha/asm-1.c
  72088d2975371a0383b6fa19c63a6ee4  gcc/testsuite/gcc.target/alpha/base-1.c
  2cf5d8a00cade8200304281bbeb38cff  gcc/testsuite/gcc.target/alpha/base-2.c
*************** a28c8b957006268fb63ac90eaea21d90  gcc/te
*** 53456,53464 ****
  5821aa7e8ef51d9e9f03077c43721bd0  gcc/testsuite/gcc.target/alpha/sqrt.c
  96315e3201d2fa31fb4cbdf30fb2ba4d  gcc/testsuite/gcc.target/arc/abitest.S
  a125f0012bfc0fdad155c9b9bcc0f009  gcc/testsuite/gcc.target/arc/abitest.h
! 068ff4430e26afc40bca9d2a0942f6d6  gcc/testsuite/gcc.target/arc/add_n-combine.c
  e6be20952086b2b05a1879e41e70daac  gcc/testsuite/gcc.target/arc/and-cnst-size.c
! 8615ad145c596adfc3c6ec4f43720302  gcc/testsuite/gcc.target/arc/arc.exp
  3e772a00d37dc9ac78faa763e2dd058d  gcc/testsuite/gcc.target/arc/arc700-stld-hazard.c
  d0cebb0a2330505d8dd990632e8fccbf  gcc/testsuite/gcc.target/arc/barrel-shifter-1.c
  b39c0e6513279f1844d9242a3025b258  gcc/testsuite/gcc.target/arc/barrel-shifter-2.c
--- 55919,55927 ----
  5821aa7e8ef51d9e9f03077c43721bd0  gcc/testsuite/gcc.target/alpha/sqrt.c
  96315e3201d2fa31fb4cbdf30fb2ba4d  gcc/testsuite/gcc.target/arc/abitest.S
  a125f0012bfc0fdad155c9b9bcc0f009  gcc/testsuite/gcc.target/arc/abitest.h
! 317e054822141a390845a27fd6a9d594  gcc/testsuite/gcc.target/arc/add_n-combine.c
  e6be20952086b2b05a1879e41e70daac  gcc/testsuite/gcc.target/arc/and-cnst-size.c
! 07dfdaf09871486efea4e14ceffcf759  gcc/testsuite/gcc.target/arc/arc.exp
  3e772a00d37dc9ac78faa763e2dd058d  gcc/testsuite/gcc.target/arc/arc700-stld-hazard.c
  d0cebb0a2330505d8dd990632e8fccbf  gcc/testsuite/gcc.target/arc/barrel-shifter-1.c
  b39c0e6513279f1844d9242a3025b258  gcc/testsuite/gcc.target/arc/barrel-shifter-2.c
*************** b39c0e6513279f1844d9242a3025b258  gcc/te
*** 53466,53476 ****
  2c0ec65aa7462c8b9eb3b471edc331af  gcc/testsuite/gcc.target/arc/builtin_arc_aligned-1.c
  8eefae5f99500e9e022dd899051be8c9  gcc/testsuite/gcc.target/arc/builtin_arc_aligned-2.c
  c63670e596c246f3002a0f44ce341617  gcc/testsuite/gcc.target/arc/builtin_arc_aligned-3.c
! f3d5bb074433ff2d4f9c3f90f9567173  gcc/testsuite/gcc.target/arc/builtin_eh.c
  f6f24cca348367d018fd26540705d2d6  gcc/testsuite/gcc.target/arc/builtin_general.c
  7ee3fdeaab109aced6f9915fec7bdcce  gcc/testsuite/gcc.target/arc/builtin_simd.c
  0a7113251c58caffacf1eb7f90795d95  gcc/testsuite/gcc.target/arc/builtin_simdarc.c
  65ca7be5ea8689cbdcf92614c6de946b  gcc/testsuite/gcc.target/arc/builtin_special.c
  bb7a791bb8f7d701826fe6c83b5f1134  gcc/testsuite/gcc.target/arc/cmem-1.c
  2ecd7dba64a9e26909f498d810795595  gcc/testsuite/gcc.target/arc/cmem-2.c
  bd39d7ea4bbdf756f00c64418819d0ae  gcc/testsuite/gcc.target/arc/cmem-3.c
--- 55929,55940 ----
  2c0ec65aa7462c8b9eb3b471edc331af  gcc/testsuite/gcc.target/arc/builtin_arc_aligned-1.c
  8eefae5f99500e9e022dd899051be8c9  gcc/testsuite/gcc.target/arc/builtin_arc_aligned-2.c
  c63670e596c246f3002a0f44ce341617  gcc/testsuite/gcc.target/arc/builtin_arc_aligned-3.c
! dff840d406fa0b5fbf3926a7ff2acda2  gcc/testsuite/gcc.target/arc/builtin_eh.c
  f6f24cca348367d018fd26540705d2d6  gcc/testsuite/gcc.target/arc/builtin_general.c
  7ee3fdeaab109aced6f9915fec7bdcce  gcc/testsuite/gcc.target/arc/builtin_simd.c
  0a7113251c58caffacf1eb7f90795d95  gcc/testsuite/gcc.target/arc/builtin_simdarc.c
  65ca7be5ea8689cbdcf92614c6de946b  gcc/testsuite/gcc.target/arc/builtin_special.c
+ aecc0b52522dc665695ef01f2d3f9e3d  gcc/testsuite/gcc.target/arc/cancel-1.c
  bb7a791bb8f7d701826fe6c83b5f1134  gcc/testsuite/gcc.target/arc/cmem-1.c
  2ecd7dba64a9e26909f498d810795595  gcc/testsuite/gcc.target/arc/cmem-2.c
  bd39d7ea4bbdf756f00c64418819d0ae  gcc/testsuite/gcc.target/arc/cmem-3.c
*************** b443447704f4a7b7a2a5c8b97db22640  gcc/te
*** 53555,53561 ****
  34220358acee31a93fc8c97863057d7f  gcc/testsuite/gcc.target/arc/mtune-ARC700.c
  baea275c33a1e24b5ae1193f7059ac40  gcc/testsuite/gcc.target/arc/mtune-ARC725D.c
  68a3b828cb2a7e43b370207bcc2f073e  gcc/testsuite/gcc.target/arc/mtune-ARC750D.c
! 23065e44e3c6b998b6722f67db72de7d  gcc/testsuite/gcc.target/arc/mul64-1.c
  51a65655bfba373cbacabf27deec612c  gcc/testsuite/gcc.target/arc/mul64.c
  46c5b1c885d49d863f7518670ae85e9c  gcc/testsuite/gcc.target/arc/mulsi3_highpart-1.c
  793d7938e24de8127c5230bc8a1799e9  gcc/testsuite/gcc.target/arc/mulsi3_highpart-2.c
--- 56019,56025 ----
  34220358acee31a93fc8c97863057d7f  gcc/testsuite/gcc.target/arc/mtune-ARC700.c
  baea275c33a1e24b5ae1193f7059ac40  gcc/testsuite/gcc.target/arc/mtune-ARC725D.c
  68a3b828cb2a7e43b370207bcc2f073e  gcc/testsuite/gcc.target/arc/mtune-ARC750D.c
! 4ee070d89a7b3e774eaf40214625cf03  gcc/testsuite/gcc.target/arc/mul64-1.c
  51a65655bfba373cbacabf27deec612c  gcc/testsuite/gcc.target/arc/mul64.c
  46c5b1c885d49d863f7518670ae85e9c  gcc/testsuite/gcc.target/arc/mulsi3_highpart-1.c
  793d7938e24de8127c5230bc8a1799e9  gcc/testsuite/gcc.target/arc/mulsi3_highpart-2.c
*************** efb2abd7da552d195e873185bd47bf27  gcc/te
*** 53592,53604 ****
  f948016cf876549e5e3dcd87acd07370  gcc/testsuite/gcc.target/arc/tls-1.c
  00d9178b93e13992725f2ea6ff733176  gcc/testsuite/gcc.target/arc/tls-2.c
  44a2859768c0bcbc2a0bcbb297d64e50  gcc/testsuite/gcc.target/arc/tls-3.c
! 0b251821e8edf2905c449bd1b90e870b  gcc/testsuite/gcc.target/arc/tls-gd.c
! 0132211f61d93c2298ed30bc70d7f411  gcc/testsuite/gcc.target/arc/tls-ie.c
! 74a9278a293e715bc2a0a7defc167d43  gcc/testsuite/gcc.target/arc/tls-ld.c
  078ba8c63e3f35e7c682fa712064ebb1  gcc/testsuite/gcc.target/arc/tls-le.c
  c3e938f937a51f7649df681938f6cd9b  gcc/testsuite/gcc.target/arc/tmac-1.c
  9d4d9e6267b9dd0779e0cf628b156ee6  gcc/testsuite/gcc.target/arc/tmac-2.c
  34b33b974d6dbb0431042aa5831e4bf8  gcc/testsuite/gcc.target/arc/tmac-3.c
  fc60d81a81f1025434b2711d3bc9cade  gcc/testsuite/gcc.target/arc/tmac.h
  fccdef9407b3440038be29073e47cf26  gcc/testsuite/gcc.target/arc/tph_addx.c
  9574a7681cc11c0c98c0c6e7b039f125  gcc/testsuite/gcc.target/arc/trsub.c
--- 56056,56069 ----
  f948016cf876549e5e3dcd87acd07370  gcc/testsuite/gcc.target/arc/tls-1.c
  00d9178b93e13992725f2ea6ff733176  gcc/testsuite/gcc.target/arc/tls-2.c
  44a2859768c0bcbc2a0bcbb297d64e50  gcc/testsuite/gcc.target/arc/tls-3.c
! c77e8405d55c2fe6d24ad0097b7ab009  gcc/testsuite/gcc.target/arc/tls-gd.c
! ba04f0952f2c38c9d10a1af7f5d56f9a  gcc/testsuite/gcc.target/arc/tls-ie.c
! f6ab9742a5f36de1928fda9c37febb86  gcc/testsuite/gcc.target/arc/tls-ld.c
  078ba8c63e3f35e7c682fa712064ebb1  gcc/testsuite/gcc.target/arc/tls-le.c
  c3e938f937a51f7649df681938f6cd9b  gcc/testsuite/gcc.target/arc/tmac-1.c
  9d4d9e6267b9dd0779e0cf628b156ee6  gcc/testsuite/gcc.target/arc/tmac-2.c
  34b33b974d6dbb0431042aa5831e4bf8  gcc/testsuite/gcc.target/arc/tmac-3.c
+ 0c045503d08f603cf24d7b47172fdd78  gcc/testsuite/gcc.target/arc/tmac-4.c
  fc60d81a81f1025434b2711d3bc9cade  gcc/testsuite/gcc.target/arc/tmac.h
  fccdef9407b3440038be29073e47cf26  gcc/testsuite/gcc.target/arc/tph_addx.c
  9574a7681cc11c0c98c0c6e7b039f125  gcc/testsuite/gcc.target/arc/trsub.c
*************** b7447dd455d522b01d8038bf537a3014  gcc/te
*** 53611,53617 ****
  53d9a20434f9d68e85f4d197e8c8b532  gcc/testsuite/gcc.target/arc/uncached-5.c
  4aa4bea5182116d7d0462ac78d6f669e  gcc/testsuite/gcc.target/arc/uncached-6.c
  332845dfd09bbcad8877874819a30ba1  gcc/testsuite/gcc.target/arc/uncached-7.c
! ee21dc84aff8637681c7dfef7d191199  gcc/testsuite/gcc.target/arc/uncached-8.c
  26955d5e0a1d1a3d8966390c4e5565f5  gcc/testsuite/gcc.target/arc/uncached-9.c
  721ddfeb1e6af8110e1f5975daed686d  gcc/testsuite/gcc.target/arc/uncached.c
  6e97aa13b3bef6e111a877f2a6d7a543  gcc/testsuite/gcc.target/arc/v-cache.c
--- 56076,56082 ----
  53d9a20434f9d68e85f4d197e8c8b532  gcc/testsuite/gcc.target/arc/uncached-5.c
  4aa4bea5182116d7d0462ac78d6f669e  gcc/testsuite/gcc.target/arc/uncached-6.c
  332845dfd09bbcad8877874819a30ba1  gcc/testsuite/gcc.target/arc/uncached-7.c
! a73e42e3a4b9da241314f90464930931  gcc/testsuite/gcc.target/arc/uncached-8.c
  26955d5e0a1d1a3d8966390c4e5565f5  gcc/testsuite/gcc.target/arc/uncached-9.c
  721ddfeb1e6af8110e1f5975daed686d  gcc/testsuite/gcc.target/arc/uncached.c
  6e97aa13b3bef6e111a877f2a6d7a543  gcc/testsuite/gcc.target/arc/v-cache.c
*************** d059b2e33fe3944d4609bef74df38413  gcc/te
*** 53624,53630 ****
  678e95fcf9ea10b2ad5f97a249136cdb  gcc/testsuite/gcc.target/arm/20090811-1.c
  3246666ab1db4fd6160f12106dd2fea4  gcc/testsuite/gcc.target/arm/20131120.c
  99d362e2051f9f2bf0e7ff2ec49b0df7  gcc/testsuite/gcc.target/arm/README.advsimd-intrinsics
! dac1a8cad6e64d6a32fcf67b18a2f27e  gcc/testsuite/gcc.target/arm/aapcs/aapcs.exp
  dce658d805b258027bde980a1d76a50d  gcc/testsuite/gcc.target/arm/aapcs/abitest.h
  96bc5ca2eaed6da1d7e22b1c0e28317d  gcc/testsuite/gcc.target/arm/aapcs/align1.c
  1ad40fcc9ea2067b6fa8508030c2f1d4  gcc/testsuite/gcc.target/arm/aapcs/align2.c
--- 56089,56095 ----
  678e95fcf9ea10b2ad5f97a249136cdb  gcc/testsuite/gcc.target/arm/20090811-1.c
  3246666ab1db4fd6160f12106dd2fea4  gcc/testsuite/gcc.target/arm/20131120.c
  99d362e2051f9f2bf0e7ff2ec49b0df7  gcc/testsuite/gcc.target/arm/README.advsimd-intrinsics
! 0186bd5ea974e05a80bb5b99fa9d7e9f  gcc/testsuite/gcc.target/arm/aapcs/aapcs.exp
  dce658d805b258027bde980a1d76a50d  gcc/testsuite/gcc.target/arm/aapcs/abitest.h
  96bc5ca2eaed6da1d7e22b1c0e28317d  gcc/testsuite/gcc.target/arm/aapcs/align1.c
  1ad40fcc9ea2067b6fa8508030c2f1d4  gcc/testsuite/gcc.target/arm/aapcs/align2.c
*************** fa81da8eb4ae62c03ad2ea29180bbc73  gcc/te
*** 53671,53676 ****
--- 56136,56142 ----
  ec0ca75c452020b501add9a6083fd0bb  gcc/testsuite/gcc.target/arm/aapcs/vfp23.c
  f8dce68ada9662fad2236e2d05c3c17d  gcc/testsuite/gcc.target/arm/aapcs/vfp24.c
  b00fb0e5516a8015b8058e991b52c3f7  gcc/testsuite/gcc.target/arm/aapcs/vfp25.c
+ 363d09ad838ed9b7cffc6382a4b72ae3  gcc/testsuite/gcc.target/arm/aapcs/vfp26.c
  b06309b72403cdd75a8f3ee6ffbef378  gcc/testsuite/gcc.target/arm/aapcs/vfp3.c
  7207730e232368477cb8dd66c2f22ba3  gcc/testsuite/gcc.target/arm/aapcs/vfp4.c
  57b8f8a0b230358caeba85b7f4689619  gcc/testsuite/gcc.target/arm/aapcs/vfp5.c
*************** b03843d0bfb6128e2d6e634be21c3021  gcc/te
*** 53678,53684 ****
  e5b7374e291244b801b4c292504d3f80  gcc/testsuite/gcc.target/arm/aapcs/vfp7.c
  3aa1f9e592cb3a6a4181176724ae2fa8  gcc/testsuite/gcc.target/arm/aapcs/vfp8.c
  37ac30daf2fa61e7f2d97c17c39fddfe  gcc/testsuite/gcc.target/arm/aapcs/vfp9.c
! b7434dcb52535b58bb79a83c7a2a4113  gcc/testsuite/gcc.target/arm/acle/acle.exp
  14b0c63ff2ea5258d212ec979aa36c8c  gcc/testsuite/gcc.target/arm/acle/cde-errors.c
  5ae0b75d3edc7d5441f595fec368443c  gcc/testsuite/gcc.target/arm/acle/cde-mve-error-1.c
  3ef89af25e41c2840ae4eb47d8fe80fe  gcc/testsuite/gcc.target/arm/acle/cde-mve-error-2.c
--- 56144,56150 ----
  e5b7374e291244b801b4c292504d3f80  gcc/testsuite/gcc.target/arm/aapcs/vfp7.c
  3aa1f9e592cb3a6a4181176724ae2fa8  gcc/testsuite/gcc.target/arm/aapcs/vfp8.c
  37ac30daf2fa61e7f2d97c17c39fddfe  gcc/testsuite/gcc.target/arm/aapcs/vfp9.c
! 8378eb471e8a85a4eda3f609f551d614  gcc/testsuite/gcc.target/arm/acle/acle.exp
  14b0c63ff2ea5258d212ec979aa36c8c  gcc/testsuite/gcc.target/arm/acle/cde-errors.c
  5ae0b75d3edc7d5441f595fec368443c  gcc/testsuite/gcc.target/arm/acle/cde-mve-error-1.c
  3ef89af25e41c2840ae4eb47d8fe80fe  gcc/testsuite/gcc.target/arm/acle/cde-mve-error-2.c
*************** eee783c37d90eef12bf5d89dd9e9f34c  gcc/te
*** 53713,53721 ****
  1089abf6533526d82e14c2c80d726483  gcc/testsuite/gcc.target/arm/acle/mrc2.c
  e66b3819f1cc1c13b66c38b83972f3a2  gcc/testsuite/gcc.target/arm/acle/mrrc.c
  5280b32decaf5622a9f85f834e828bdf  gcc/testsuite/gcc.target/arm/acle/mrrc2.c
! 86c499d24586512163846019c7506633  gcc/testsuite/gcc.target/arm/acle/pr100856.c
  c351089daa0fb41b19888a703d2c10c8  gcc/testsuite/gcc.target/arm/acle/sat_no_smlatb.c
! 8654b6f7bf64a1d8f8ffa2f9bcf1431a  gcc/testsuite/gcc.target/arm/acle/saturation.c
  aba97f9977e18f8c2b8fd7ce559b513f  gcc/testsuite/gcc.target/arm/acle/simd32.c
  ad7292efdc490279906e7c95bdda09d7  gcc/testsuite/gcc.target/arm/acle/simd32_sel.c
  142b21041a309b18a6c1b2d726793af0  gcc/testsuite/gcc.target/arm/acle/stc.c
--- 56179,56187 ----
  1089abf6533526d82e14c2c80d726483  gcc/testsuite/gcc.target/arm/acle/mrc2.c
  e66b3819f1cc1c13b66c38b83972f3a2  gcc/testsuite/gcc.target/arm/acle/mrrc.c
  5280b32decaf5622a9f85f834e828bdf  gcc/testsuite/gcc.target/arm/acle/mrrc2.c
! ee12e8ca5824715b40bd53e5bd847687  gcc/testsuite/gcc.target/arm/acle/pr100856.c
  c351089daa0fb41b19888a703d2c10c8  gcc/testsuite/gcc.target/arm/acle/sat_no_smlatb.c
! 52edc26e05c5a7011e01e793b188666a  gcc/testsuite/gcc.target/arm/acle/saturation.c
  aba97f9977e18f8c2b8fd7ce559b513f  gcc/testsuite/gcc.target/arm/acle/simd32.c
  ad7292efdc490279906e7c95bdda09d7  gcc/testsuite/gcc.target/arm/acle/simd32_sel.c
  142b21041a309b18a6c1b2d726793af0  gcc/testsuite/gcc.target/arm/acle/stc.c
*************** beeedfa6811e6847c3cf97dc8034edc6  gcc/te
*** 53732,53738 ****
  dfc4bf650d099d2aff3f9e5f3d4b62ac  gcc/testsuite/gcc.target/arm/anddi3-opt2.c
  8acda08d68bcc11cfdd01eb0a1ed850d  gcc/testsuite/gcc.target/arm/anddi_notdi-1.c
  2de4b776a367481e41c80f0bf35fc6e4  gcc/testsuite/gcc.target/arm/arm-soft-strd-even.c
! 36f6dac69e351d17bd2a86af520ec2c4  gcc/testsuite/gcc.target/arm/arm.exp
  5810c65774cd6173ff73a4ca6f3b0562  gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c
  e0b358414d3e86102d32b626de2fbc40  gcc/testsuite/gcc.target/arm/armv8-sync-comp-swap.c
  0434c51f353f1957fce79533a348ee29  gcc/testsuite/gcc.target/arm/armv8-sync-op-acquire.c
--- 56198,56204 ----
  dfc4bf650d099d2aff3f9e5f3d4b62ac  gcc/testsuite/gcc.target/arm/anddi3-opt2.c
  8acda08d68bcc11cfdd01eb0a1ed850d  gcc/testsuite/gcc.target/arm/anddi_notdi-1.c
  2de4b776a367481e41c80f0bf35fc6e4  gcc/testsuite/gcc.target/arm/arm-soft-strd-even.c
! 7ee87d6a0b34605eadcc8b6f82965621  gcc/testsuite/gcc.target/arm/arm.exp
  5810c65774cd6173ff73a4ca6f3b0562  gcc/testsuite/gcc.target/arm/armv6-unaligned-load-ice.c
  e0b358414d3e86102d32b626de2fbc40  gcc/testsuite/gcc.target/arm/armv8-sync-comp-swap.c
  0434c51f353f1957fce79533a348ee29  gcc/testsuite/gcc.target/arm/armv8-sync-op-acquire.c
*************** e0b358414d3e86102d32b626de2fbc40  gcc/te
*** 53743,53755 ****
  ae9c194b5b2bab609b607ca64a11d1c4  gcc/testsuite/gcc.target/arm/armv8_1m-fp64-move-1.c
  6d693ceeceae55f1fff94a935992216e  gcc/testsuite/gcc.target/arm/armv8_1m-shift-imm-1.c
  c6c1c759a610556eca59987a77084f45  gcc/testsuite/gcc.target/arm/armv8_1m-shift-reg-1.c
! 89f9f477194c40b77ee3c7bb74c37468  gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c
  5790d3efd74c1ddf5aeb2e8743385c60  gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-2.c
  e760d8a00f0e4b4ceedce756dc61f6c1  gcc/testsuite/gcc.target/arm/armv8_2-fp16-conv-1.c
  5861a72a2b15085324305371dbea13fc  gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c
  771620b8522f47f0902c876afa9eeb03  gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c
  43365e7220d0c89c221983b0088e64ec  gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-1.c
! c5f374e65349cde6053f285d90ab96c5  gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-2.c
  992185bff8a637178d6613bb76a8369c  gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-3.c
  8f88cdcfdc86a7068680b15dfe795b54  gcc/testsuite/gcc.target/arm/armv8_2-fp16-scalar-1.c
  4bad0a804fdff0fae8f92991ef639b11  gcc/testsuite/gcc.target/arm/armv8_2-fp16-scalar-2.c
--- 56209,56221 ----
  ae9c194b5b2bab609b607ca64a11d1c4  gcc/testsuite/gcc.target/arm/armv8_1m-fp64-move-1.c
  6d693ceeceae55f1fff94a935992216e  gcc/testsuite/gcc.target/arm/armv8_1m-shift-imm-1.c
  c6c1c759a610556eca59987a77084f45  gcc/testsuite/gcc.target/arm/armv8_1m-shift-reg-1.c
! 53e11cdab71cca17d6fdaf4ed9224a30  gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-1.c
  5790d3efd74c1ddf5aeb2e8743385c60  gcc/testsuite/gcc.target/arm/armv8_2-fp16-arith-2.c
  e760d8a00f0e4b4ceedce756dc61f6c1  gcc/testsuite/gcc.target/arm/armv8_2-fp16-conv-1.c
  5861a72a2b15085324305371dbea13fc  gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-1.c
  771620b8522f47f0902c876afa9eeb03  gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c
  43365e7220d0c89c221983b0088e64ec  gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-1.c
! dc2445fc2ce3b9779058431b1cfb377b  gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-2.c
  992185bff8a637178d6613bb76a8369c  gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-3.c
  8f88cdcfdc86a7068680b15dfe795b54  gcc/testsuite/gcc.target/arm/armv8_2-fp16-scalar-1.c
  4bad0a804fdff0fae8f92991ef639b11  gcc/testsuite/gcc.target/arm/armv8_2-fp16-scalar-2.c
*************** f3fa0198457b98710b26072dfa716655  gcc/te
*** 53758,53763 ****
--- 56224,56230 ----
  fc85f6b00063aadac4fe642aea1d37a0  gcc/testsuite/gcc.target/arm/asm-flag-4.c
  d594ca95d990ca9c3f2561ed11ac28ca  gcc/testsuite/gcc.target/arm/asm-flag-5.c
  9d3dff5d35894339289b1625ab2c86ce  gcc/testsuite/gcc.target/arm/asm-flag-6.c
+ 03573355651ad4a9aa5e1e5fa8f0b7d6  gcc/testsuite/gcc.target/arm/asm-flag-7.c
  3c2cfbc0cc70901d1869bf605a1c1bad  gcc/testsuite/gcc.target/arm/asm.c
  9f27df615aafbb6ae626db5978ae5ca8  gcc/testsuite/gcc.target/arm/atomic-comp-swap-release-acquire-1.c
  d23baa2697ab465085db8108613320d2  gcc/testsuite/gcc.target/arm/atomic-comp-swap-release-acquire-2.c
*************** a4114cf2b3bd0ac0af3dffbbe0b40004  gcc/te
*** 53877,53885 ****
  b3421fbdc1418b61214986622eb978f2  gcc/testsuite/gcc.target/arm/cmse/baseline/softfp.c
  dfde9b7816ac82223f119b2bfaa13341  gcc/testsuite/gcc.target/arm/cmse/baseline/union-1.c
  a3d5632079324bffb4dfe7cfa572dbe5  gcc/testsuite/gcc.target/arm/cmse/baseline/union-2.c
! a6147463dff11429ac0c76ff6811bfd2  gcc/testsuite/gcc.target/arm/cmse/bitfield-1.c
! 1f39a756e6f7cd47a7f6ea71daace6b1  gcc/testsuite/gcc.target/arm/cmse/bitfield-2.c
! 778bb2a6c391382e612f4b263f3faa11  gcc/testsuite/gcc.target/arm/cmse/bitfield-3.c
  fc541d9ca530164540b9c0bb80ff85ca  gcc/testsuite/gcc.target/arm/cmse/bitfield-4.x
  52bda0f55dad71b45f9928cf777c2a1f  gcc/testsuite/gcc.target/arm/cmse/bitfield-5.x
  0aa800ae33265f609b6deafe6e06f856  gcc/testsuite/gcc.target/arm/cmse/bitfield-6.x
--- 56344,56352 ----
  b3421fbdc1418b61214986622eb978f2  gcc/testsuite/gcc.target/arm/cmse/baseline/softfp.c
  dfde9b7816ac82223f119b2bfaa13341  gcc/testsuite/gcc.target/arm/cmse/baseline/union-1.c
  a3d5632079324bffb4dfe7cfa572dbe5  gcc/testsuite/gcc.target/arm/cmse/baseline/union-2.c
! 8c14e9379a543fffbff58c4a0f8133f1  gcc/testsuite/gcc.target/arm/cmse/bitfield-1.c
! 8e90c93e8df0712b2b8514ac951dd65e  gcc/testsuite/gcc.target/arm/cmse/bitfield-2.c
! 289a5065efa5757ec8891e86a75c5b71  gcc/testsuite/gcc.target/arm/cmse/bitfield-3.c
  fc541d9ca530164540b9c0bb80ff85ca  gcc/testsuite/gcc.target/arm/cmse/bitfield-4.x
  52bda0f55dad71b45f9928cf777c2a1f  gcc/testsuite/gcc.target/arm/cmse/bitfield-5.x
  0aa800ae33265f609b6deafe6e06f856  gcc/testsuite/gcc.target/arm/cmse/bitfield-6.x
*************** ebdb15be89bef0e9c175a92e85f05897  gcc/te
*** 53893,53899 ****
  345628b6955bb78f99657e95ad7a6b53  gcc/testsuite/gcc.target/arm/cmse/cmse-13.x
  4e543347c53c9c12e6cbcaad2b4c1199  gcc/testsuite/gcc.target/arm/cmse/cmse-14.c
  ef7ca529c8bfa7604b48cdb713711215  gcc/testsuite/gcc.target/arm/cmse/cmse-15.c
! f76ced2a530d80991ba85c2e39dd5dd4  gcc/testsuite/gcc.target/arm/cmse/cmse-16.c
  da139a3f1e88bf3b7034931f46a04110  gcc/testsuite/gcc.target/arm/cmse/cmse-17.c
  a0cc973b6770567d9ae9d0d7e19290d3  gcc/testsuite/gcc.target/arm/cmse/cmse-18.c
  d307e00dde7714d2f353a08b08451b57  gcc/testsuite/gcc.target/arm/cmse/cmse-1c99.c
--- 56360,56366 ----
  345628b6955bb78f99657e95ad7a6b53  gcc/testsuite/gcc.target/arm/cmse/cmse-13.x
  4e543347c53c9c12e6cbcaad2b4c1199  gcc/testsuite/gcc.target/arm/cmse/cmse-14.c
  ef7ca529c8bfa7604b48cdb713711215  gcc/testsuite/gcc.target/arm/cmse/cmse-15.c
! 5ff0a15a5a399d7d0fafcad196691899  gcc/testsuite/gcc.target/arm/cmse/cmse-16.c
  da139a3f1e88bf3b7034931f46a04110  gcc/testsuite/gcc.target/arm/cmse/cmse-17.c
  a0cc973b6770567d9ae9d0d7e19290d3  gcc/testsuite/gcc.target/arm/cmse/cmse-18.c
  d307e00dde7714d2f353a08b08451b57  gcc/testsuite/gcc.target/arm/cmse/cmse-1c99.c
*************** ce1fe2059d8e263b0f3d889cb1392892  gcc/te
*** 53904,53910 ****
  679443fc734534194407169158890899  gcc/testsuite/gcc.target/arm/cmse/cmse-7.x
  a29c7dfe0255ba24ca52aa9293640971  gcc/testsuite/gcc.target/arm/cmse/cmse-8.x
  ce946170746cf737bca71ec699014fef  gcc/testsuite/gcc.target/arm/cmse/cmse-9.c
! be8035e562d337b07c0ddf2c6f1723d6  gcc/testsuite/gcc.target/arm/cmse/cmse.exp
  6e9c9a777c4a333e2bdba95bdaf23364  gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/bitfield-4.c
  c540adef0c0a8fc3e8e03fee5f712683  gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/bitfield-5.c
  727ae9b55594654191b60afa67ad5094  gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/bitfield-6.c
--- 56371,56377 ----
  679443fc734534194407169158890899  gcc/testsuite/gcc.target/arm/cmse/cmse-7.x
  a29c7dfe0255ba24ca52aa9293640971  gcc/testsuite/gcc.target/arm/cmse/cmse-8.x
  ce946170746cf737bca71ec699014fef  gcc/testsuite/gcc.target/arm/cmse/cmse-9.c
! 4cff09e964949ce40d8295aef9e8721c  gcc/testsuite/gcc.target/arm/cmse/cmse.exp
  6e9c9a777c4a333e2bdba95bdaf23364  gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/bitfield-4.c
  c540adef0c0a8fc3e8e03fee5f712683  gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/bitfield-5.c
  727ae9b55594654191b60afa67ad5094  gcc/testsuite/gcc.target/arm/cmse/mainline/8_1m/bitfield-6.c
*************** cb60008d5e98eeaf45a18dec48047164  gcc/te
*** 53971,53977 ****
  bfdbc743afa8415599bab6c48cb26d64  gcc/testsuite/gcc.target/arm/cmse/mainline/8m/union-2.c
  8cd1e54844f2fab111ede15dfc983556  gcc/testsuite/gcc.target/arm/cmse/pr100333.c
  c7feddd41b8ab7d0bcc61e9ba67a259a  gcc/testsuite/gcc.target/arm/cmse/pr99725.c
! 29329b40a9bee292da1ddd2d9e8381b7  gcc/testsuite/gcc.target/arm/cmse/struct-1.c
  018f6e1e401b9f8f53cb13da1c5fcef7  gcc/testsuite/gcc.target/arm/cmse/union-1.x
  4b49e4c79c02f37ae492dd2e76ef29e7  gcc/testsuite/gcc.target/arm/cmse/union-2.x
  2dc71ce174b431509377d1ffd99a8551  gcc/testsuite/gcc.target/arm/cold-lc.c
--- 56438,56444 ----
  bfdbc743afa8415599bab6c48cb26d64  gcc/testsuite/gcc.target/arm/cmse/mainline/8m/union-2.c
  8cd1e54844f2fab111ede15dfc983556  gcc/testsuite/gcc.target/arm/cmse/pr100333.c
  c7feddd41b8ab7d0bcc61e9ba67a259a  gcc/testsuite/gcc.target/arm/cmse/pr99725.c
! ee7923c47e203d92d730bdfda69d6a8f  gcc/testsuite/gcc.target/arm/cmse/struct-1.c
  018f6e1e401b9f8f53cb13da1c5fcef7  gcc/testsuite/gcc.target/arm/cmse/union-1.x
  4b49e4c79c02f37ae492dd2e76ef29e7  gcc/testsuite/gcc.target/arm/cmse/union-2.x
  2dc71ce174b431509377d1ffd99a8551  gcc/testsuite/gcc.target/arm/cold-lc.c
*************** b3f3ff81dd0095a51c242338491d533e  gcc/te
*** 53993,54008 ****
  f6255ec99cf78afc00b3ce7f7e9a1c96  gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c
  1483de9b7f52248fc9df51779ace9568  gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c
  1c89ba825c88653c01849f8986e1542b  gcc/testsuite/gcc.target/arm/crypto-vaesdq_u8.c
  2ed72824fb0f88ddb43549410040a784  gcc/testsuite/gcc.target/arm/crypto-vaeseq_u8.c
  abba2731624485a0118e2059f5e1c67a  gcc/testsuite/gcc.target/arm/crypto-vaesimcq_u8.c
  121624e7f60c90c71d77906bc89c8192  gcc/testsuite/gcc.target/arm/crypto-vaesmcq_u8.c
  529ee033072e89caff1af64c606c76f1  gcc/testsuite/gcc.target/arm/crypto-vldrq_p128.c
  bb083e005abbb16dbe033e2482207d43  gcc/testsuite/gcc.target/arm/crypto-vmull_high_p64.c
  37e2ee21032f90da762fb5f45f40f238  gcc/testsuite/gcc.target/arm/crypto-vmullp64.c
! 24a7e878dbcb5e1fc9cdd8cc44ce0c36  gcc/testsuite/gcc.target/arm/crypto-vsha1cq_u32.c
! e5aa5cc01d0e36c390bf2c34503671f3  gcc/testsuite/gcc.target/arm/crypto-vsha1h_u32.c
! 6b5c92cabe719cc8cf4d6485e586c149  gcc/testsuite/gcc.target/arm/crypto-vsha1mq_u32.c
! 38f93b8eb7dff5fc2013aac4544bab26  gcc/testsuite/gcc.target/arm/crypto-vsha1pq_u32.c
  6c1bc826969319ba979de980b58983ea  gcc/testsuite/gcc.target/arm/crypto-vsha1su0q_u32.c
  9e6b3d146a41dd65032d0bb51b482b3a  gcc/testsuite/gcc.target/arm/crypto-vsha1su1q_u32.c
  c0785176ffe81b127778365b94d2f068  gcc/testsuite/gcc.target/arm/crypto-vsha256h2q_u32.c
--- 56460,56476 ----
  f6255ec99cf78afc00b3ce7f7e9a1c96  gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c
  1483de9b7f52248fc9df51779ace9568  gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c
  1c89ba825c88653c01849f8986e1542b  gcc/testsuite/gcc.target/arm/crypto-vaesdq_u8.c
+ 12073189e84dddc4f3b2c4940538c6d4  gcc/testsuite/gcc.target/arm/crypto-vaese-erratum1.c
  2ed72824fb0f88ddb43549410040a784  gcc/testsuite/gcc.target/arm/crypto-vaeseq_u8.c
  abba2731624485a0118e2059f5e1c67a  gcc/testsuite/gcc.target/arm/crypto-vaesimcq_u8.c
  121624e7f60c90c71d77906bc89c8192  gcc/testsuite/gcc.target/arm/crypto-vaesmcq_u8.c
  529ee033072e89caff1af64c606c76f1  gcc/testsuite/gcc.target/arm/crypto-vldrq_p128.c
  bb083e005abbb16dbe033e2482207d43  gcc/testsuite/gcc.target/arm/crypto-vmull_high_p64.c
  37e2ee21032f90da762fb5f45f40f238  gcc/testsuite/gcc.target/arm/crypto-vmullp64.c
! 29b9196639857b0146df64c3ba42355e  gcc/testsuite/gcc.target/arm/crypto-vsha1cq_u32.c
! a9b3df72353269bd050c7b85d3ed348a  gcc/testsuite/gcc.target/arm/crypto-vsha1h_u32.c
! 92a25df2b230221aed44f25c1a57ca78  gcc/testsuite/gcc.target/arm/crypto-vsha1mq_u32.c
! b89aeea2c461c8f8163664d31e5b8962  gcc/testsuite/gcc.target/arm/crypto-vsha1pq_u32.c
  6c1bc826969319ba979de980b58983ea  gcc/testsuite/gcc.target/arm/crypto-vsha1su0q_u32.c
  9e6b3d146a41dd65032d0bb51b482b3a  gcc/testsuite/gcc.target/arm/crypto-vsha1su1q_u32.c
  c0785176ffe81b127778365b94d2f068  gcc/testsuite/gcc.target/arm/crypto-vsha256h2q_u32.c
*************** bf821309d2cd93b8c0d6b0704742bc45  gcc/te
*** 54141,54147 ****
  bda0b982c40bee2fd28b1750fa6bc2bf  gcc/testsuite/gcc.target/arm/lp1189445.c
  c0ebea9052f8cd9253ee6ff358df5e52  gcc/testsuite/gcc.target/arm/lp1243022.c
  b4f8ad85c07f7be61a90747a85bd0be4  gcc/testsuite/gcc.target/arm/lround-vcvt_1.c
! 88ac1d859c35e2636b2b08619f2db732  gcc/testsuite/gcc.target/arm/lto/lto.exp
  90bf73bda834641a0bea89584effe1a7  gcc/testsuite/gcc.target/arm/lto/pr61123-enum-size_0.c
  636cbd6b191957f3f94b3734e71688a5  gcc/testsuite/gcc.target/arm/lto/pr61123-enum-size_1.c
  0fe8e2ad477327f013e80d0961d711a8  gcc/testsuite/gcc.target/arm/lto/pr65837-attr_0.c
--- 56609,56615 ----
  bda0b982c40bee2fd28b1750fa6bc2bf  gcc/testsuite/gcc.target/arm/lp1189445.c
  c0ebea9052f8cd9253ee6ff358df5e52  gcc/testsuite/gcc.target/arm/lp1243022.c
  b4f8ad85c07f7be61a90747a85bd0be4  gcc/testsuite/gcc.target/arm/lround-vcvt_1.c
! f21109d312daca04ae5962ed68df3786  gcc/testsuite/gcc.target/arm/lto/lto.exp
  90bf73bda834641a0bea89584effe1a7  gcc/testsuite/gcc.target/arm/lto/pr61123-enum-size_0.c
  636cbd6b191957f3f94b3734e71688a5  gcc/testsuite/gcc.target/arm/lto/pr61123-enum-size_1.c
  0fe8e2ad477327f013e80d0961d711a8  gcc/testsuite/gcc.target/arm/lto/pr65837-attr_0.c
*************** c6b1f31177a60b170040e0eddc1787ba  gcc/te
*** 54177,54183 ****
  7b0294d6197317c05cb3accfdbee95d9  gcc/testsuite/gcc.target/arm/movhi_movw.c
  484b6553c962caa2f0746fa65de739e8  gcc/testsuite/gcc.target/arm/movsi_movt.c
  190ffba53357096715f051384c38965b  gcc/testsuite/gcc.target/arm/movsi_movw.c
! 1dfa5797899e6af2bef8bffdcacc774e  gcc/testsuite/gcc.target/arm/multilib.exp
  0cb82b3c13272daae33b86a0b70c3ab4  gcc/testsuite/gcc.target/arm/mve/intrinsics/asrl.c
  f6c2f6c35390e01c453145baae48aa6b  gcc/testsuite/gcc.target/arm/mve/intrinsics/lsll.c
  8742cb74c36fe44acebeaf852842a44d  gcc/testsuite/gcc.target/arm/mve/intrinsics/mve-vldstr16-no-writeback.c
--- 56645,56654 ----
  7b0294d6197317c05cb3accfdbee95d9  gcc/testsuite/gcc.target/arm/movhi_movw.c
  484b6553c962caa2f0746fa65de739e8  gcc/testsuite/gcc.target/arm/movsi_movt.c
  190ffba53357096715f051384c38965b  gcc/testsuite/gcc.target/arm/movsi_movw.c
! 318e966952d36350b93da5f0ffaa2b49  gcc/testsuite/gcc.target/arm/multilib.exp
! 56a0fbce4d79d10043dc3f64ce0aa364  gcc/testsuite/gcc.target/arm/mve/general-c/type_redef_1.c
! f7aa4c937541029a5bd3fe618bef6974  gcc/testsuite/gcc.target/arm/mve/general/double_pragmas_1.c
! e787e32385a63c5e015b59725e3d0250  gcc/testsuite/gcc.target/arm/mve/general/nomve_1.c
  0cb82b3c13272daae33b86a0b70c3ab4  gcc/testsuite/gcc.target/arm/mve/intrinsics/asrl.c
  f6c2f6c35390e01c453145baae48aa6b  gcc/testsuite/gcc.target/arm/mve/intrinsics/lsll.c
  8742cb74c36fe44acebeaf852842a44d  gcc/testsuite/gcc.target/arm/mve/intrinsics/mve-vldstr16-no-writeback.c
*************** ce70a937593f2667cb28f01c0e5435ea  gcc/te
*** 55061,55076 ****
  8886b3c5d54ac7850b443ce5b6377cc9  gcc/testsuite/gcc.target/arm/mve/intrinsics/vfmsq_f32.c
  1d691d53c313b2f9f7604fc9f88b96ca  gcc/testsuite/gcc.target/arm/mve/intrinsics/vfmsq_m_f16.c
  a3ea29dedcd39d4818bb10833b122c5f  gcc/testsuite/gcc.target/arm/mve/intrinsics/vfmsq_m_f32.c
! 8860fea093dae5724af3df13fedae9b8  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c
! 67c0f0f12ed1841d0535a02197d572ce  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c
! 9471c13e90437ca90cf4f4f5bce88e51  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c
! d325656870753b35dec56b9f0cf7bda1  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c
  118164a375f651a3817e6fa89c2b9482  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s64.c
! 75eb3b284cddf86a4809bf27d3b57cba  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c
! 3b5917f146f443b6f2837c1a338280e0  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c
! 4a21845f965b27642d683f02225dc9a3  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c
  a3b7d26a1d14371254a3c36462110c35  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u64.c
! 8c91d50c42f686ed094e5ea5f267bd22  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u8.c
  d87efbead358ad1516f1f5c100835423  gcc/testsuite/gcc.target/arm/mve/intrinsics/vhaddq_m_n_s16.c
  871c875f259858673bbbc355f3d35ba4  gcc/testsuite/gcc.target/arm/mve/intrinsics/vhaddq_m_n_s32.c
  9e444f673f0946492598b20ef850ea5c  gcc/testsuite/gcc.target/arm/mve/intrinsics/vhaddq_m_n_s8.c
--- 57532,57547 ----
  8886b3c5d54ac7850b443ce5b6377cc9  gcc/testsuite/gcc.target/arm/mve/intrinsics/vfmsq_f32.c
  1d691d53c313b2f9f7604fc9f88b96ca  gcc/testsuite/gcc.target/arm/mve/intrinsics/vfmsq_m_f16.c
  a3ea29dedcd39d4818bb10833b122c5f  gcc/testsuite/gcc.target/arm/mve/intrinsics/vfmsq_m_f32.c
! a7885a4fa2e376a4d4dfb0fc044917d3  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c
! fb1a495fd4d60ccc8dd701b99908f8ff  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c
! 53b72f9961c6673f642721664ef92661  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c
! bea9e8fdf93c00a8cc8388ed6bee43d4  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c
  118164a375f651a3817e6fa89c2b9482  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s64.c
! 81fe049808f30df435aae27084ffd7f5  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c
! ca8fc175292b81b70decf89029745e9b  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c
! ead51aa932f54ce080e763a9d560716f  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c
  a3b7d26a1d14371254a3c36462110c35  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u64.c
! 555de40671413a541c288777ba86e237  gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u8.c
  d87efbead358ad1516f1f5c100835423  gcc/testsuite/gcc.target/arm/mve/intrinsics/vhaddq_m_n_s16.c
  871c875f259858673bbbc355f3d35ba4  gcc/testsuite/gcc.target/arm/mve/intrinsics/vhaddq_m_n_s32.c
  9e444f673f0946492598b20ef850ea5c  gcc/testsuite/gcc.target/arm/mve/intrinsics/vhaddq_m_n_s8.c
*************** bc23d7c97ce5cd4d925d2584ba26e8d9  gcc/te
*** 56733,56739 ****
  1b1caac6115bffedba10607ae46ecb1a  gcc/testsuite/gcc.target/arm/mve/intrinsics/vuninitializedq_float1.c
  dd8187345c556677b24a6d6363dd2cf5  gcc/testsuite/gcc.target/arm/mve/intrinsics/vuninitializedq_int.c
  140114add4d912efe3ae58837e07a2e9  gcc/testsuite/gcc.target/arm/mve/intrinsics/vuninitializedq_int1.c
! df99f4f46d7a12c1234780d031e1a922  gcc/testsuite/gcc.target/arm/mve/mve.exp
  a27c7480ff5cba860dda5da683bb3b87  gcc/testsuite/gcc.target/arm/naked-1.c
  292c423c2aa66b03398c922259527367  gcc/testsuite/gcc.target/arm/naked-2.c
  2d75e6bd9379b6e090e6104b97434376  gcc/testsuite/gcc.target/arm/negdi-1.c
--- 59204,59212 ----
  1b1caac6115bffedba10607ae46ecb1a  gcc/testsuite/gcc.target/arm/mve/intrinsics/vuninitializedq_float1.c
  dd8187345c556677b24a6d6363dd2cf5  gcc/testsuite/gcc.target/arm/mve/intrinsics/vuninitializedq_int.c
  140114add4d912efe3ae58837e07a2e9  gcc/testsuite/gcc.target/arm/mve/intrinsics/vuninitializedq_int1.c
! f85ec28e0fec0a26395ea93637d74f62  gcc/testsuite/gcc.target/arm/mve/mve.exp
! c182f14c0ce0f393486f83ecb5d4dc84  gcc/testsuite/gcc.target/arm/mve/mve_load_memory_modes.c
! 93fa7d6fd560d991c8d38fc6f4c828b9  gcc/testsuite/gcc.target/arm/mve/mve_store_memory_modes.c
  a27c7480ff5cba860dda5da683bb3b87  gcc/testsuite/gcc.target/arm/naked-1.c
  292c423c2aa66b03398c922259527367  gcc/testsuite/gcc.target/arm/naked-2.c
  2d75e6bd9379b6e090e6104b97434376  gcc/testsuite/gcc.target/arm/negdi-1.c
*************** ce2ea998f70f030c1e5c5cf0f3536bd7  gcc/te
*** 56843,56848 ****
--- 59316,59322 ----
  7a1f853ca353ec3249c7750b5684b3e6  gcc/testsuite/gcc.target/arm/peep-strd-2.c
  ca03d4215dfd4e98fc1d17e6890fcc4a  gcc/testsuite/gcc.target/arm/polytypes.c
  2f719adc3f3e3724629a17daf9bb2e71  gcc/testsuite/gcc.target/arm/pr100775.c
+ b78ed4b32814a22ad0cf1f46aee89cc8  gcc/testsuite/gcc.target/arm/pr105312.c
  03b84ccc5b909e6ece59f619e9298211  gcc/testsuite/gcc.target/arm/pr19599.c
  3425143e88f989a8f52f345e6237106a  gcc/testsuite/gcc.target/arm/pr26702.c
  fc0dd660f56108005b4f0b142e94d10d  gcc/testsuite/gcc.target/arm/pr37780_1.c
*************** ec5b96b8283a62c791f40ad2c7334d85  gcc/te
*** 56894,56900 ****
  1b0c11d109e5c1c7dd206ab3c72d6e20  gcc/testsuite/gcc.target/arm/pr50099.c
  d457a4577fb934ac2b4fc272aa7a0ab9  gcc/testsuite/gcc.target/arm/pr50305.c
  979c3871e985af269e6e0679b4805f64  gcc/testsuite/gcc.target/arm/pr50318-1.c
! 1de4a5d312b8c0fe1e0a7be7d27d7296  gcc/testsuite/gcc.target/arm/pr51534.c
  e24904ecd70180168ee75db6eb7b3461  gcc/testsuite/gcc.target/arm/pr51835.c
  3f2081d2849855a22f0db1f6ba620f00  gcc/testsuite/gcc.target/arm/pr51915.c
  8ea3e4ba594d4b6bdc19056d44672bca  gcc/testsuite/gcc.target/arm/pr51968.c
--- 59368,59374 ----
  1b0c11d109e5c1c7dd206ab3c72d6e20  gcc/testsuite/gcc.target/arm/pr50099.c
  d457a4577fb934ac2b4fc272aa7a0ab9  gcc/testsuite/gcc.target/arm/pr50305.c
  979c3871e985af269e6e0679b4805f64  gcc/testsuite/gcc.target/arm/pr50318-1.c
! 9bae94116bfadabbcd02cb062071b588  gcc/testsuite/gcc.target/arm/pr51534.c
  e24904ecd70180168ee75db6eb7b3461  gcc/testsuite/gcc.target/arm/pr51835.c
  3f2081d2849855a22f0db1f6ba620f00  gcc/testsuite/gcc.target/arm/pr51915.c
  8ea3e4ba594d4b6bdc19056d44672bca  gcc/testsuite/gcc.target/arm/pr51968.c
*************** be0f627c9760e72ac531303722e2aa4a  gcc/te
*** 57043,57050 ****
  fae12b2484aa501254f0f6f18c223eb7  gcc/testsuite/gcc.target/arm/pure-code/pr96769.c
  97baedb199afd57478166d225f8cdc6d  gcc/testsuite/gcc.target/arm/pure-code/pr96770.c
  23b438a7445931d6c586530cff90a5e9  gcc/testsuite/gcc.target/arm/pure-code/pr98998.c
! 404935d32825fc8ce74ea604acbaf904  gcc/testsuite/gcc.target/arm/pure-code/pure-code.exp
! 639f9aee9e13df807ade02e6ee96c2d3  gcc/testsuite/gcc.target/arm/reg_equal_test.c
  3143560976572191d8bba6ba78a45aa6  gcc/testsuite/gcc.target/arm/register-variables.c
  7e00efeaf92d1f9068732d041c1566d2  gcc/testsuite/gcc.target/arm/require-pic-register-loc.c
  7488cdc20f835bda2359993c0ec74d15  gcc/testsuite/gcc.target/arm/rev16.c
--- 59517,59524 ----
  fae12b2484aa501254f0f6f18c223eb7  gcc/testsuite/gcc.target/arm/pure-code/pr96769.c
  97baedb199afd57478166d225f8cdc6d  gcc/testsuite/gcc.target/arm/pure-code/pr96770.c
  23b438a7445931d6c586530cff90a5e9  gcc/testsuite/gcc.target/arm/pure-code/pr98998.c
! e0b77f00d4bc21ed75896d0dc498c49a  gcc/testsuite/gcc.target/arm/pure-code/pure-code.exp
! f95b339eab714ded2d8494556dd13630  gcc/testsuite/gcc.target/arm/reg_equal_test.c
  3143560976572191d8bba6ba78a45aa6  gcc/testsuite/gcc.target/arm/register-variables.c
  7e00efeaf92d1f9068732d041c1566d2  gcc/testsuite/gcc.target/arm/require-pic-register-loc.c
  7488cdc20f835bda2359993c0ec74d15  gcc/testsuite/gcc.target/arm/rev16.c
*************** c85c6e997259bc6ea785859ca3cd0503  gcc/te
*** 57072,57092 ****
  86a910fbea8e786089563912a699727e  gcc/testsuite/gcc.target/arm/simd/fp16fml_lane_high.c
  ce6bfdecafebf5d96e30584ac5bde11f  gcc/testsuite/gcc.target/arm/simd/fp16fml_lane_low.c
  c7ef3b93e6ead3d17a958c3c299e8b73  gcc/testsuite/gcc.target/arm/simd/fp16fml_low.c
  7370991ffab828bb67ea9207e79d17ed  gcc/testsuite/gcc.target/arm/simd/mve-vand.c
  57337e605c24d6ca7890908234fe55fd  gcc/testsuite/gcc.target/arm/simd/mve-vbic.c
  ad91e84e4e236e53bf616bfe551f7eda  gcc/testsuite/gcc.target/arm/simd/mve-veor.c
  8eeb12838119b1d8b000f3722e1b16e7  gcc/testsuite/gcc.target/arm/simd/mve-vminmax_1.c
  36779691f42ae231092570148a42b261  gcc/testsuite/gcc.target/arm/simd/mve-vmul_1.c
  8a858f14e2f8788bc8e6d834c44cb944  gcc/testsuite/gcc.target/arm/simd/mve-vmvn.c
  eec4a2942df9514516f09adb538ca6c1  gcc/testsuite/gcc.target/arm/simd/mve-vneg.c
  454ea9c4b205cc5970ef1f679c56ad7a  gcc/testsuite/gcc.target/arm/simd/mve-vorn.c
  fcce8db5ec7e8bdb594b192422634626  gcc/testsuite/gcc.target/arm/simd/mve-vorr.c
  8c135e895bc223508b6735896b11e21f  gcc/testsuite/gcc.target/arm/simd/mve-vshl.c
! 2769bd6300e3a229bb351b3eeca279be  gcc/testsuite/gcc.target/arm/simd/mve-vshr.c
! c8deb0a803321b5792517c2ab68fbc77  gcc/testsuite/gcc.target/arm/simd/mve-vsub_1.c
  68c87b57e05a6645373dc8d51e390d27  gcc/testsuite/gcc.target/arm/simd/neon-vrndx_f32_1.c
  20510447d248969276dc517dca7c29d2  gcc/testsuite/gcc.target/arm/simd/neon-vrndxq_f32_1.c
! 9af7a7284428e6c37ed2db924763a994  gcc/testsuite/gcc.target/arm/simd/simd.exp
  be37d1c2f068a408d0dcf51da9bb2153  gcc/testsuite/gcc.target/arm/simd/vceqz_p64.c
  bfc8c84b4d25f4a7889d9453580915a0  gcc/testsuite/gcc.target/arm/simd/vceqzq_p64.c
  32ad7b41034573f84cb8764de3e4cd94  gcc/testsuite/gcc.target/arm/simd/vdot-2-1.c
--- 59546,59606 ----
  86a910fbea8e786089563912a699727e  gcc/testsuite/gcc.target/arm/simd/fp16fml_lane_high.c
  ce6bfdecafebf5d96e30584ac5bde11f  gcc/testsuite/gcc.target/arm/simd/fp16fml_lane_low.c
  c7ef3b93e6ead3d17a958c3c299e8b73  gcc/testsuite/gcc.target/arm/simd/fp16fml_low.c
+ 6c7c4c225924663f715da299cee5e6a5  gcc/testsuite/gcc.target/arm/simd/mve-compare-1.c
+ 5dcf4e932871aeba4c1b9a49be403bf6  gcc/testsuite/gcc.target/arm/simd/mve-compare-2.c
+ 79ad4702846317f8676e19282166aa0d  gcc/testsuite/gcc.target/arm/simd/mve-compare-3.c
+ 62d1f0ad9e655a68d6ecbfc7124a6aa1  gcc/testsuite/gcc.target/arm/simd/mve-compare-scalar-1.c
+ b65f0b51ef899b937b63abf1e3405106  gcc/testsuite/gcc.target/arm/simd/mve-vabs.c
+ e5b4125a24ef0a7243f3e53f42b055dd  gcc/testsuite/gcc.target/arm/simd/mve-vadd-1.c
+ 7deef803acc8b6bc6851bf5caf65c977  gcc/testsuite/gcc.target/arm/simd/mve-vadd-scalar-1.c
+ 817e504d8a4f3a8fe3668c375dbb1998  gcc/testsuite/gcc.target/arm/simd/mve-vaddv-1.c
  7370991ffab828bb67ea9207e79d17ed  gcc/testsuite/gcc.target/arm/simd/mve-vand.c
  57337e605c24d6ca7890908234fe55fd  gcc/testsuite/gcc.target/arm/simd/mve-vbic.c
+ a89ba01a34119210a98694c961ce138e  gcc/testsuite/gcc.target/arm/simd/mve-vclz.c
+ d34579bb65d7395a1f822d658596726e  gcc/testsuite/gcc.target/arm/simd/mve-vcmp-f16.c
+ ae407b3b95f556a909330ca46587c746  gcc/testsuite/gcc.target/arm/simd/mve-vcmp-f32-2.c
+ 38d5e1e8de59fae0897546aafa88daf5  gcc/testsuite/gcc.target/arm/simd/mve-vcmp-f32.c
+ 1a1b1c8b681587a1e716fe5f81336aea  gcc/testsuite/gcc.target/arm/simd/mve-vcmp.c
  ad91e84e4e236e53bf616bfe551f7eda  gcc/testsuite/gcc.target/arm/simd/mve-veor.c
+ 0e5d51f0dfb4e6e8bcb85222b141383c  gcc/testsuite/gcc.target/arm/simd/mve-vhadd-1.c
+ 5d3409e0bc1b329a973218097ef5a063  gcc/testsuite/gcc.target/arm/simd/mve-vhadd-2.c
+ c2eea7db2d4567249d33b386cdaf476b  gcc/testsuite/gcc.target/arm/simd/mve-vld2.c
+ 23e1c62e6d2eb859af77c2289c7c84db  gcc/testsuite/gcc.target/arm/simd/mve-vld4.c
  8eeb12838119b1d8b000f3722e1b16e7  gcc/testsuite/gcc.target/arm/simd/mve-vminmax_1.c
+ 6db903ede2b03c4e104d446de2d997d9  gcc/testsuite/gcc.target/arm/simd/mve-vmul-scalar-1.c
  36779691f42ae231092570148a42b261  gcc/testsuite/gcc.target/arm/simd/mve-vmul_1.c
  8a858f14e2f8788bc8e6d834c44cb944  gcc/testsuite/gcc.target/arm/simd/mve-vmvn.c
  eec4a2942df9514516f09adb538ca6c1  gcc/testsuite/gcc.target/arm/simd/mve-vneg.c
  454ea9c4b205cc5970ef1f679c56ad7a  gcc/testsuite/gcc.target/arm/simd/mve-vorn.c
  fcce8db5ec7e8bdb594b192422634626  gcc/testsuite/gcc.target/arm/simd/mve-vorr.c
  8c135e895bc223508b6735896b11e21f  gcc/testsuite/gcc.target/arm/simd/mve-vshl.c
! 44d9633172a744d57748b78cd9459397  gcc/testsuite/gcc.target/arm/simd/mve-vshr.c
! 93474bc90e5156ad689799d6fb6a4511  gcc/testsuite/gcc.target/arm/simd/mve-vsub-scalar-1.c
! 6c75eaaec68dfb8c4f79555ce03a5fc5  gcc/testsuite/gcc.target/arm/simd/mve-vsub_1.c
! 1b47bf72d463778fb593a6c8e88de7bf  gcc/testsuite/gcc.target/arm/simd/neon-compare-1.c
! d79dd81265e55908a753c6880eefea38  gcc/testsuite/gcc.target/arm/simd/neon-compare-2.c
! 7debf39e677c0c2712df3f9f0a455d03  gcc/testsuite/gcc.target/arm/simd/neon-compare-3.c
! 19c2ae10185ec4410a13f53465658384  gcc/testsuite/gcc.target/arm/simd/neon-compare-scalar-1.c
! 72d2a82dd943423383caebf11784db7b  gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f16.c
! 3f84b51b90a6337553059fe286010fed  gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f32-2.c
! 36f4321756fdfdbd4813dd2bf5bb991b  gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f32-3.c
! b0c788863641ceb9eafa40c7a7674f0b  gcc/testsuite/gcc.target/arm/simd/neon-vcmp-f32.c
! 526cb43c152896e6cd73c7a73142408e  gcc/testsuite/gcc.target/arm/simd/neon-vcmp.c
! 946bffefbb1e718e9459da6af0be590e  gcc/testsuite/gcc.target/arm/simd/neon-vhadd-1.c
! 457467054ee307e0e0321d9172a8051b  gcc/testsuite/gcc.target/arm/simd/neon-vhadd-2.c
  68c87b57e05a6645373dc8d51e390d27  gcc/testsuite/gcc.target/arm/simd/neon-vrndx_f32_1.c
  20510447d248969276dc517dca7c29d2  gcc/testsuite/gcc.target/arm/simd/neon-vrndxq_f32_1.c
! ffd0817dddebee5f98e6672151768b28  gcc/testsuite/gcc.target/arm/simd/pr100757-2.c
! c128da719ddaa71fe006886c68ef9e8b  gcc/testsuite/gcc.target/arm/simd/pr100757-3.c
! ed5726c14960e6946d6059ad2eafda39  gcc/testsuite/gcc.target/arm/simd/pr100757-4.c
! 9d1a89861df9439f2260142a68ce64d5  gcc/testsuite/gcc.target/arm/simd/pr100757.c
! 697c6e1839ba0f86de4a02316e9dbdfa  gcc/testsuite/gcc.target/arm/simd/pr101325-2.c
! b12640f73eff96966ca77078dd5fb9e4  gcc/testsuite/gcc.target/arm/simd/pr101325.c
! e1603cc96f76b89440e17fe221245eed  gcc/testsuite/gcc.target/arm/simd/pr104882.c
! be3a6e865cff5e83a7ddc3fdeff09efc  gcc/testsuite/gcc.target/arm/simd/pr105374.C
! 046001a34adf828e1dc1680bb6554761  gcc/testsuite/gcc.target/arm/simd/pr97906.c
! be013ac628d53196d301f2fb67205a61  gcc/testsuite/gcc.target/arm/simd/pr98435.c
! c4c9cd643691ce299be90948f0058461  gcc/testsuite/gcc.target/arm/simd/simd.exp
  be37d1c2f068a408d0dcf51da9bb2153  gcc/testsuite/gcc.target/arm/simd/vceqz_p64.c
  bfc8c84b4d25f4a7889d9453580915a0  gcc/testsuite/gcc.target/arm/simd/vceqzq_p64.c
  32ad7b41034573f84cb8764de3e4cd94  gcc/testsuite/gcc.target/arm/simd/vdot-2-1.c
*************** b02d4397c7594210c38f2c0ba99f79bc  gcc/te
*** 57191,57196 ****
--- 59705,59711 ----
  ed8f7d5e02932e879adc37646448242f  gcc/testsuite/gcc.target/arm/simd/vtrnu16_1.c
  eacf2d806002245e02fc2e0098dcffae  gcc/testsuite/gcc.target/arm/simd/vtrnu32_1.c
  229d5d2e506149d993ca359842614794  gcc/testsuite/gcc.target/arm/simd/vtrnu8_1.c
+ fbdc0e1a2a64b29a9f7b98043788cea3  gcc/testsuite/gcc.target/arm/simd/vusdot-autovec.c
  d27fc2547f8ea32e288c95f44e272a68  gcc/testsuite/gcc.target/arm/simd/vuzpf32_1.c
  a33527bea779df3a83a1aba8e8b57146  gcc/testsuite/gcc.target/arm/simd/vuzpp16_1.c
  f4da1c16dd367f393590c465a2ce9d2d  gcc/testsuite/gcc.target/arm/simd/vuzpp8_1.c
*************** ea1d36d91d52b1f78d13df618c053569  gcc/te
*** 57227,57235 ****
  7e42fe5d271b60f6c70c7e42fe3329eb  gcc/testsuite/gcc.target/arm/simd/vzipu16_1.c
  f9efb6f0371ceb3aab1df141f4f2846c  gcc/testsuite/gcc.target/arm/simd/vzipu32_1.c
  efebf6cfc9ccd6377784be42b49e0c14  gcc/testsuite/gcc.target/arm/simd/vzipu8_1.c
! fdb883d065ef2a82f161e53e08a035df  gcc/testsuite/gcc.target/arm/size-optimization-ieee-1.c
! 329454876c2b75e47a40abb1918d5297  gcc/testsuite/gcc.target/arm/size-optimization-ieee-2.c
! 19147f75e5e897b755425db163dd7b1a  gcc/testsuite/gcc.target/arm/size-optimization-ieee-3.c
  03a0ecf5ea3e80c3c11e40b7ed7964ab  gcc/testsuite/gcc.target/arm/small-multiply-m0-1.c
  0f362b693e6376d1a243b78deb39ef29  gcc/testsuite/gcc.target/arm/small-multiply-m0-2.c
  536af5c3e7686f814f057e2af387f7b4  gcc/testsuite/gcc.target/arm/small-multiply-m0-3.c
--- 59742,59750 ----
  7e42fe5d271b60f6c70c7e42fe3329eb  gcc/testsuite/gcc.target/arm/simd/vzipu16_1.c
  f9efb6f0371ceb3aab1df141f4f2846c  gcc/testsuite/gcc.target/arm/simd/vzipu32_1.c
  efebf6cfc9ccd6377784be42b49e0c14  gcc/testsuite/gcc.target/arm/simd/vzipu8_1.c
! 439090a74f82c03693a4e639e4d0779d  gcc/testsuite/gcc.target/arm/size-optimization-ieee-1.c
! c1ba2367fe074ca876f6c3d12acfe93a  gcc/testsuite/gcc.target/arm/size-optimization-ieee-2.c
! 56ef2fb23e6bb9e5362a8d9d86c0d217  gcc/testsuite/gcc.target/arm/size-optimization-ieee-3.c
  03a0ecf5ea3e80c3c11e40b7ed7964ab  gcc/testsuite/gcc.target/arm/small-multiply-m0-1.c
  0f362b693e6376d1a243b78deb39ef29  gcc/testsuite/gcc.target/arm/small-multiply-m0-2.c
  536af5c3e7686f814f057e2af387f7b4  gcc/testsuite/gcc.target/arm/small-multiply-m0-3.c
*************** ba6c6b402205fa474f7093d07d3d3129  gcc/te
*** 57253,57258 ****
--- 59768,59775 ----
  e13154393d19a49196906480b6d2d4bc  gcc/testsuite/gcc.target/arm/stack-protector-4.c
  70342bcaa3f6107c83106c2d684152ed  gcc/testsuite/gcc.target/arm/stack-protector-5.c
  fe2f9ebabcf72015dcbdb73c0c9e2338  gcc/testsuite/gcc.target/arm/stack-protector-6.c
+ c2b378e2248f5ce191878a76febe7bc6  gcc/testsuite/gcc.target/arm/stack-protector-7.c
+ c7ae5f9100cc26f397aea0d78db50598  gcc/testsuite/gcc.target/arm/stack-protector-8.c
  011b467632d678d04108bd1dc27d26b7  gcc/testsuite/gcc.target/arm/stack-red-zone.c
  152321b1bfa07e69c572a0ca8573c015  gcc/testsuite/gcc.target/arm/symbian1.c
  a2a9b9135252a63f30ae15393ececf8f  gcc/testsuite/gcc.target/arm/symbian2.c
*************** e14b9a30fa811436ecb6aa988c9a5305  gcc/te
*** 57315,57321 ****
  792dc2802acd07e46a1a21cf396e6868  gcc/testsuite/gcc.target/arm/unaligned-memcpy-4.c
  d51794c8e800a1494a43aad0663fc8ec  gcc/testsuite/gcc.target/arm/unsigned-extend-1.c
  ead94d850a836710bef3cff899906668  gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
! b00b4662ffae7d58b94d4e89e964e8c3  gcc/testsuite/gcc.target/arm/unsigned-float.c
  dafe3f438a1a1630e53458e22dbec6bc  gcc/testsuite/gcc.target/arm/usadv16qi.c
  dd7bfde900d68546e1d3dd468f37370b  gcc/testsuite/gcc.target/arm/va_list.c
  cc0bc7a437b1048adcd2bbb500c8613f  gcc/testsuite/gcc.target/arm/vect-copysignf.c
--- 59832,59838 ----
  792dc2802acd07e46a1a21cf396e6868  gcc/testsuite/gcc.target/arm/unaligned-memcpy-4.c
  d51794c8e800a1494a43aad0663fc8ec  gcc/testsuite/gcc.target/arm/unsigned-extend-1.c
  ead94d850a836710bef3cff899906668  gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
! 6f28a91c6866a9c554b9e75346fc82ef  gcc/testsuite/gcc.target/arm/unsigned-float.c
  dafe3f438a1a1630e53458e22dbec6bc  gcc/testsuite/gcc.target/arm/usadv16qi.c
  dd7bfde900d68546e1d3dd468f37370b  gcc/testsuite/gcc.target/arm/va_list.c
  cc0bc7a437b1048adcd2bbb500c8613f  gcc/testsuite/gcc.target/arm/vect-copysignf.c
*************** c75ed40c88ef10849c23f953624d1ae2  gcc/te
*** 57401,57411 ****
  5c6680598a83083cd8ee0c39ad5821bf  gcc/testsuite/gcc.target/arm/wmul-bitfield-2.c
  a1131491d67160098e775860b91e3021  gcc/testsuite/gcc.target/arm/xor-and.c
  79a594a642e89de4c3a753867b50cf54  gcc/testsuite/gcc.target/arm/xordi3-opt.c
! aefcb2f0bce88f118b95d3286577fb8f  gcc/testsuite/gcc.target/avr/avr.exp
  a6701935d18c8ed062555c8a48454bc9  gcc/testsuite/gcc.target/avr/dev-specific-rmw.c
  2028ceccf9f97e5e84e9adf6beb7597e  gcc/testsuite/gcc.target/avr/exit-abort.h
  01c5f01bf5db7494c293de76bfa7ad3f  gcc/testsuite/gcc.target/avr/isr-test.h
! d2a9ff4a67b9cdc84b7715e61d38dea1  gcc/testsuite/gcc.target/avr/mmcu/avr-mmcu.exp
  421d2b9b36fa2496dce05d129d2c352b  gcc/testsuite/gcc.target/avr/mmcu/pr58545.c
  8172209b564aa8049ce5758eac60cc46  gcc/testsuite/gcc.target/avr/mmcu/tiny-caller-save.c
  80cabd0a89ca2c48055ae61bc82b633e  gcc/testsuite/gcc.target/avr/mmcu/tiny-memx.c
--- 59918,59928 ----
  5c6680598a83083cd8ee0c39ad5821bf  gcc/testsuite/gcc.target/arm/wmul-bitfield-2.c
  a1131491d67160098e775860b91e3021  gcc/testsuite/gcc.target/arm/xor-and.c
  79a594a642e89de4c3a753867b50cf54  gcc/testsuite/gcc.target/arm/xordi3-opt.c
! 853f53a6e0cf31af3573c0ab91f70f27  gcc/testsuite/gcc.target/avr/avr.exp
  a6701935d18c8ed062555c8a48454bc9  gcc/testsuite/gcc.target/avr/dev-specific-rmw.c
  2028ceccf9f97e5e84e9adf6beb7597e  gcc/testsuite/gcc.target/avr/exit-abort.h
  01c5f01bf5db7494c293de76bfa7ad3f  gcc/testsuite/gcc.target/avr/isr-test.h
! 879c51ec49cf59758894de101ade42ff  gcc/testsuite/gcc.target/avr/mmcu/avr-mmcu.exp
  421d2b9b36fa2496dce05d129d2c352b  gcc/testsuite/gcc.target/avr/mmcu/pr58545.c
  8172209b564aa8049ce5758eac60cc46  gcc/testsuite/gcc.target/avr/mmcu/tiny-caller-save.c
  80cabd0a89ca2c48055ae61bc82b633e  gcc/testsuite/gcc.target/avr/mmcu/tiny-memx.c
*************** e2ddf19981b44595d911d7d384c3824f  gcc/te
*** 57450,57456 ****
  53dfc94573110c2220b0a51c076fda55  gcc/testsuite/gcc.target/avr/torture/addr-space-2-g.c
  6fb32c1fcefb2d5260347dc067759686  gcc/testsuite/gcc.target/avr/torture/addr-space-2-x.c
  a0d24b6b729b3316832b85d84ee2f113  gcc/testsuite/gcc.target/avr/torture/addr-space-2.h
! 6a809e3e0889b1cd5ae0451e91500f43  gcc/testsuite/gcc.target/avr/torture/avr-torture.exp
  8fb103e22590dcf8f557336ecf8d0b5d  gcc/testsuite/gcc.target/avr/torture/builtin_insert_bits-1.c
  43852eb8aa736eadca5b3c517bf0d743  gcc/testsuite/gcc.target/avr/torture/builtin_insert_bits-2.c
  6f7a316d69505eb726fcfadde1df3047  gcc/testsuite/gcc.target/avr/torture/builtins-1.c
--- 59967,59973 ----
  53dfc94573110c2220b0a51c076fda55  gcc/testsuite/gcc.target/avr/torture/addr-space-2-g.c
  6fb32c1fcefb2d5260347dc067759686  gcc/testsuite/gcc.target/avr/torture/addr-space-2-x.c
  a0d24b6b729b3316832b85d84ee2f113  gcc/testsuite/gcc.target/avr/torture/addr-space-2.h
! ebaffb03b01764f15a9e4a258c115e51  gcc/testsuite/gcc.target/avr/torture/avr-torture.exp
  8fb103e22590dcf8f557336ecf8d0b5d  gcc/testsuite/gcc.target/avr/torture/builtin_insert_bits-1.c
  43852eb8aa736eadca5b3c517bf0d743  gcc/testsuite/gcc.target/avr/torture/builtin_insert_bits-2.c
  6f7a316d69505eb726fcfadde1df3047  gcc/testsuite/gcc.target/avr/torture/builtins-1.c
*************** ae6a82add6ca7317217a8a75a19e6f64  gcc/te
*** 57508,57516 ****
  797a276a3d69db7addd48a0538341dfb  gcc/testsuite/gcc.target/bfin/20090411-1.c
  b132d1738c80be39010cd2b0314aba73  gcc/testsuite/gcc.target/bfin/20090914-1.c
  e8596cb430561d81a166efee3830ab78  gcc/testsuite/gcc.target/bfin/20090914-2.c
! 59131c95108c3e68948b937d2cbd9453  gcc/testsuite/gcc.target/bfin/20090914-3.c
  bf1c248fa1b1520ecdeed5e768375da7  gcc/testsuite/gcc.target/bfin/arith.c
! 0df26c43ab47c24f92e9e531bef7f063  gcc/testsuite/gcc.target/bfin/bfin.exp
  e666a8a0054e7cac9ce2a121c6d1ccbf  gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-1.c
  9b9ec1d751f1617d55d1098c8c77391b  gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-2.c
  6b81ebc6aa2acb74b2481ebe48c3dc2c  gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-1.c
--- 60025,60033 ----
  797a276a3d69db7addd48a0538341dfb  gcc/testsuite/gcc.target/bfin/20090411-1.c
  b132d1738c80be39010cd2b0314aba73  gcc/testsuite/gcc.target/bfin/20090914-1.c
  e8596cb430561d81a166efee3830ab78  gcc/testsuite/gcc.target/bfin/20090914-2.c
! 49ce985a23784e4dedbfc6c211266187  gcc/testsuite/gcc.target/bfin/20090914-3.c
  bf1c248fa1b1520ecdeed5e768375da7  gcc/testsuite/gcc.target/bfin/arith.c
! 22e74f19555d522e0123ade79a7166cd  gcc/testsuite/gcc.target/bfin/bfin.exp
  e666a8a0054e7cac9ce2a121c6d1ccbf  gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-1.c
  9b9ec1d751f1617d55d1098c8c77391b  gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x16-2.c
  6b81ebc6aa2acb74b2481ebe48c3dc2c  gcc/testsuite/gcc.target/bfin/builtins/abs_fr1x32-1.c
*************** fe4d87c005f4281c70950e298d2332d6  gcc/te
*** 57523,57529 ****
  68777a9f94150662d944e2fa189c4dd7  gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-2.c
  d0c87dc45464d8073220a36a5b5f9150  gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-1.c
  9d8cdd9e02d1a76707491953ffcab689  gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-2.c
! 522719f2e51c4ef2ed8708623079dbb0  gcc/testsuite/gcc.target/bfin/builtins/bfin-builtins.exp
  f7e7cbc65ce8949842a0128a24bd2338  gcc/testsuite/gcc.target/bfin/builtins/circptr.c
  6c9969a981de179714ed81df51335aa9  gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-1.c
  136597c96eab5947bf5b9d9ac2e01f54  gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-2.c
--- 60040,60046 ----
  68777a9f94150662d944e2fa189c4dd7  gcc/testsuite/gcc.target/bfin/builtins/add_fr1x32-2.c
  d0c87dc45464d8073220a36a5b5f9150  gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-1.c
  9d8cdd9e02d1a76707491953ffcab689  gcc/testsuite/gcc.target/bfin/builtins/add_fr2x16-2.c
! 6dadda74d6bacfce0c5aa410c176157f  gcc/testsuite/gcc.target/bfin/builtins/bfin-builtins.exp
  f7e7cbc65ce8949842a0128a24bd2338  gcc/testsuite/gcc.target/bfin/builtins/circptr.c
  6c9969a981de179714ed81df51335aa9  gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-1.c
  136597c96eab5947bf5b9d9ac2e01f54  gcc/testsuite/gcc.target/bfin/builtins/cpmlx_mac_fr2x16-2.c
*************** ea5de66ef026e56b55cb29998323f4f6  gcc/te
*** 57707,57714 ****
--- 60224,60237 ----
  ded86ec386a9378ee8d47f8b65c509e9  gcc/testsuite/gcc.target/bfin/mcpu-bf592.c
  7181515ddaf67755c472c7eaad75663d  gcc/testsuite/gcc.target/bfin/mcpu-default.c
  3c5f0753120d9a0c8b40399f2972ccb2  gcc/testsuite/gcc.target/bfin/mul-combine.c
+ eb3c34447ebe59019891d3fcfcb7e47b  gcc/testsuite/gcc.target/bfin/ones.c
+ 1a4d63a5c7e8d1639bd1f8df81d31486  gcc/testsuite/gcc.target/bfin/parity.c
+ 0d6771485c2bcb31efa5708fcf43f3d4  gcc/testsuite/gcc.target/bfin/popcount.c
  b73d42c6ef7fae18bd6991bb9fbe2b73  gcc/testsuite/gcc.target/bfin/saveall.c
  d753e383697984b453f5269efc0caf25  gcc/testsuite/gcc.target/bfin/shift.c
+ 7e892f01a8b77a90dfd77f615baf634b  gcc/testsuite/gcc.target/bfin/ssabs.c
+ 7176cfa6f9b5e15bc4d9bc49d4c02929  gcc/testsuite/gcc.target/bfin/ssashift-1.c
+ f96d19e7a10f90af032e80882bd82577  gcc/testsuite/gcc.target/bfin/ssneg.c
  78cb5c1bb7179e65259dadd5890b7bad  gcc/testsuite/gcc.target/bfin/wmul-1.c
  00d85f2e42b08ac22fed98bac26b108d  gcc/testsuite/gcc.target/bfin/wmul-2.c
  ea0b74eaf7f2031f9bdde3e76d4ae656  gcc/testsuite/gcc.target/bfin/workarounds-1.c
*************** b7e44f629992ef6eb090866310307190  gcc/te
*** 57717,57725 ****
  998eede0c55f8146863da4eee6db210b  gcc/testsuite/gcc.target/bfin/workarounds-4.c
  998eede0c55f8146863da4eee6db210b  gcc/testsuite/gcc.target/bfin/workarounds-any.c
  b7e44f629992ef6eb090866310307190  gcc/testsuite/gcc.target/bfin/workarounds-none.c
! f5e9c26c53eff2ee852214a804688d42  gcc/testsuite/gcc.target/bpf/bpf.exp
  e18e9906424d8f6d6559626d05b228a1  gcc/testsuite/gcc.target/bpf/builtin-load.c
  de0225c20b6d4e27e5b67ccb3354f120  gcc/testsuite/gcc.target/bpf/constant-calls.c
  7c5767ad8853516ee52b4fccd6f2ad45  gcc/testsuite/gcc.target/bpf/diag-funargs-2.c
  0f171b6874c7ce98e825ae0d0725fee0  gcc/testsuite/gcc.target/bpf/diag-funargs-3.c
  879173f0084082f7f1ff2a8afbb56f1a  gcc/testsuite/gcc.target/bpf/diag-funargs.c
--- 60240,60258 ----
  998eede0c55f8146863da4eee6db210b  gcc/testsuite/gcc.target/bfin/workarounds-4.c
  998eede0c55f8146863da4eee6db210b  gcc/testsuite/gcc.target/bfin/workarounds-any.c
  b7e44f629992ef6eb090866310307190  gcc/testsuite/gcc.target/bfin/workarounds-none.c
! d574c9cd6d9f06e4304767f46fc8eb38  gcc/testsuite/gcc.target/bpf/alu-1.c
! a8cfb241067237a76c50fd9f3b511dcf  gcc/testsuite/gcc.target/bpf/bpf.exp
  e18e9906424d8f6d6559626d05b228a1  gcc/testsuite/gcc.target/bpf/builtin-load.c
  de0225c20b6d4e27e5b67ccb3354f120  gcc/testsuite/gcc.target/bpf/constant-calls.c
+ b8b314b84b551ed2be2f010a24abe9f9  gcc/testsuite/gcc.target/bpf/core-attr-1.c
+ b9cc467364bead27ec20679665483049  gcc/testsuite/gcc.target/bpf/core-attr-2.c
+ 3b2e17aff6a101dd53a2e432ea78e841  gcc/testsuite/gcc.target/bpf/core-attr-3.c
+ d91a5053beb3967e034e51883dc25dd1  gcc/testsuite/gcc.target/bpf/core-attr-4.c
+ 8daa38602d4832500fa5d1fa654882ae  gcc/testsuite/gcc.target/bpf/core-builtin-1.c
+ d29fde5f049c90eb3638f347d15f46a2  gcc/testsuite/gcc.target/bpf/core-builtin-2.c
+ 89ded91824d23ad06903739576a871a1  gcc/testsuite/gcc.target/bpf/core-builtin-3.c
+ 382784a9ab064815e8d03f16cad75b39  gcc/testsuite/gcc.target/bpf/core-lto-1.c
+ 44d568fcfefc5d8da7a27f51746e08ed  gcc/testsuite/gcc.target/bpf/core-section-1.c
  7c5767ad8853516ee52b4fccd6f2ad45  gcc/testsuite/gcc.target/bpf/diag-funargs-2.c
  0f171b6874c7ce98e825ae0d0725fee0  gcc/testsuite/gcc.target/bpf/diag-funargs-3.c
  879173f0084082f7f1ff2a8afbb56f1a  gcc/testsuite/gcc.target/bpf/diag-funargs.c
*************** c0c04a0ed12ec95a86e428b6a03ec112  gcc/te
*** 57833,57838 ****
--- 60366,60372 ----
  97e0d4b47960bb0f508506da28056e87  gcc/testsuite/gcc.target/bpf/helper-xdp-adjust-head.c
  34f49e9a3bad17dcba3af6133ecdac39  gcc/testsuite/gcc.target/bpf/helper-xdp-adjust-meta.c
  73b0d4e42dc2de2a236b6bc0a889e58a  gcc/testsuite/gcc.target/bpf/helper-xdp-adjust-tail.c
+ aecb36e66a00bc767e57e19c60cac9b3  gcc/testsuite/gcc.target/bpf/jmp-1.c
  ea119219c2d407c1b7b8da1f3946fa74  gcc/testsuite/gcc.target/bpf/nop-1.c
  cd41d37c2f24e4c5454955bd38989508  gcc/testsuite/gcc.target/bpf/skb-ancestor-cgroup-id.c
  5660ceee20ea01caded4e675ebcc0487  gcc/testsuite/gcc.target/bpf/sync-fetch-and-add.c
*************** da811515083d9ddf056500903ebb758b  gcc/te
*** 57855,57861 ****
  825d51bc2455ddb81464d0a078c11bda  gcc/testsuite/gcc.target/cris/builtin_clz_v3.c
  619e346f21294a1edba1fa0d4fb11951  gcc/testsuite/gcc.target/cris/builtin_ctz_v3.c
  37dd2f4312701e553c1c5e8a89d8fcdd  gcc/testsuite/gcc.target/cris/builtin_ctz_v8.c
! 963720e17a285c3a2046687c0fa6f91d  gcc/testsuite/gcc.target/cris/cris.exp
  f267ed4a3d93f57ca2fd47fb88787845  gcc/testsuite/gcc.target/cris/dbr-1.c
  09fbcf24d1de7a8eae1a6d8d6243d8de  gcc/testsuite/gcc.target/cris/inasm-other.c
  22e3cf12d66bc0fca53215d6e8dbe6ff  gcc/testsuite/gcc.target/cris/inasm-v10.c
--- 60389,60395 ----
  825d51bc2455ddb81464d0a078c11bda  gcc/testsuite/gcc.target/cris/builtin_clz_v3.c
  619e346f21294a1edba1fa0d4fb11951  gcc/testsuite/gcc.target/cris/builtin_ctz_v3.c
  37dd2f4312701e553c1c5e8a89d8fcdd  gcc/testsuite/gcc.target/cris/builtin_ctz_v8.c
! b56dbff66c3cabfcfc0ee86fc16960ae  gcc/testsuite/gcc.target/cris/cris.exp
  f267ed4a3d93f57ca2fd47fb88787845  gcc/testsuite/gcc.target/cris/dbr-1.c
  09fbcf24d1de7a8eae1a6d8d6243d8de  gcc/testsuite/gcc.target/cris/inasm-other.c
  22e3cf12d66bc0fca53215d6e8dbe6ff  gcc/testsuite/gcc.target/cris/inasm-v10.c
*************** b08e4db62a9fb0f97ea3211c38828a92  gcc/te
*** 57921,57927 ****
  a8632f4c714d9a1bc78849b980440a8c  gcc/testsuite/gcc.target/cris/sync-4i.c
  690e9023ecafeef7a7be46436ca9854c  gcc/testsuite/gcc.target/cris/sync-4s.c
  0b1b7109726eb4d3415da0cc65329694  gcc/testsuite/gcc.target/cris/sync-xchg-1.c
! 06af4bb51ad1244e0b8fa8ce6a8d73ba  gcc/testsuite/gcc.target/cris/torture/cris-torture.exp
  46bb07141c5993a8c5154d62b285f8c7  gcc/testsuite/gcc.target/cris/torture/no-pro-epi-1.c
  4181eccc65a7ef0c720e1f62eafc01fa  gcc/testsuite/gcc.target/cris/torture/pr24750-2.c
  3578773c3349eca3bbd054dfb8ebac62  gcc/testsuite/gcc.target/cris/torture/pr34773.c
--- 60455,60461 ----
  a8632f4c714d9a1bc78849b980440a8c  gcc/testsuite/gcc.target/cris/sync-4i.c
  690e9023ecafeef7a7be46436ca9854c  gcc/testsuite/gcc.target/cris/sync-4s.c
  0b1b7109726eb4d3415da0cc65329694  gcc/testsuite/gcc.target/cris/sync-xchg-1.c
! 61df1639861c1df8c0dc8f0519cc5cdd  gcc/testsuite/gcc.target/cris/torture/cris-torture.exp
  46bb07141c5993a8c5154d62b285f8c7  gcc/testsuite/gcc.target/cris/torture/no-pro-epi-1.c
  4181eccc65a7ef0c720e1f62eafc01fa  gcc/testsuite/gcc.target/cris/torture/pr24750-2.c
  3578773c3349eca3bbd054dfb8ebac62  gcc/testsuite/gcc.target/cris/torture/pr34773.c
*************** b7155a676b316d828ff12c2c503fd59c  gcc/te
*** 57949,57955 ****
  aaad88eae49192421bd38c2c837d5ffc  gcc/testsuite/gcc.target/csky/constpool-2.c
  7e4e72e722403eab3bdd2874c8512498  gcc/testsuite/gcc.target/csky/constpool-3.c
  c64550af69ac6a4dfb37edcc3e6de899  gcc/testsuite/gcc.target/csky/cse-cc.c
! 7e823e97cfa3ad7a6dd1966c27123c56  gcc/testsuite/gcc.target/csky/csky.exp
  0f17acdd834091c69016d7a2af242e1f  gcc/testsuite/gcc.target/csky/fnargs-1.c
  71a0a8fdef92000347984095b42f84f2  gcc/testsuite/gcc.target/csky/fnargs-2.c
  ac08a3c5539d8fe4b68818cce90d0271  gcc/testsuite/gcc.target/csky/fnargs-3.c
--- 60483,60490 ----
  aaad88eae49192421bd38c2c837d5ffc  gcc/testsuite/gcc.target/csky/constpool-2.c
  7e4e72e722403eab3bdd2874c8512498  gcc/testsuite/gcc.target/csky/constpool-3.c
  c64550af69ac6a4dfb37edcc3e6de899  gcc/testsuite/gcc.target/csky/cse-cc.c
! e0ad139d80279985dfac69dd3c030d01  gcc/testsuite/gcc.target/csky/csky.exp
! 3ff18cb12dcb4fb55c1616d207f0f2e9  gcc/testsuite/gcc.target/csky/fldrd_fstrd.c
  0f17acdd834091c69016d7a2af242e1f  gcc/testsuite/gcc.target/csky/fnargs-1.c
  71a0a8fdef92000347984095b42f84f2  gcc/testsuite/gcc.target/csky/fnargs-2.c
  ac08a3c5539d8fe4b68818cce90d0271  gcc/testsuite/gcc.target/csky/fnargs-3.c
*************** ac08a3c5539d8fe4b68818cce90d0271  gcc/te
*** 57957,57968 ****
  68908ce1ca8c3e314a4bf574d27ed8aa  gcc/testsuite/gcc.target/csky/fnmul-2.c
  fcd38c704b19d2241fdea4d4564d7218  gcc/testsuite/gcc.target/csky/fnmul-3.c
  8e4a61b89a91d87d007558c91da270fc  gcc/testsuite/gcc.target/csky/fnmul-4.c
  d314e10078acacca0634c35cf325bf1f  gcc/testsuite/gcc.target/csky/land1.c
  61b8717c421fc4f1d764429691b8bc3e  gcc/testsuite/gcc.target/csky/land2.c
  f8325974b60d2e8397f34c8f0e8d8bbf  gcc/testsuite/gcc.target/csky/naked.c
  b7b0230f4b534b91ce701e0cfaf699fc  gcc/testsuite/gcc.target/csky/or1.c
  3396d7f14e4963592892b06ccec1dbed  gcc/testsuite/gcc.target/epiphany/btst-1.c
! 631734b884b8874c99f683968b6ad97c  gcc/testsuite/gcc.target/epiphany/epiphany.exp
  f477a84910092e956697c8b091ff4aba  gcc/testsuite/gcc.target/epiphany/fcmp-1.c
  c8ff5d5cf55484cd9bab33958ca94c36  gcc/testsuite/gcc.target/epiphany/fmadd-1.c
  a2ce030a9439b19e934208c89cb93ba6  gcc/testsuite/gcc.target/epiphany/fmsub-1.c
--- 60492,60542 ----
  68908ce1ca8c3e314a4bf574d27ed8aa  gcc/testsuite/gcc.target/csky/fnmul-2.c
  fcd38c704b19d2241fdea4d4564d7218  gcc/testsuite/gcc.target/csky/fnmul-3.c
  8e4a61b89a91d87d007558c91da270fc  gcc/testsuite/gcc.target/csky/fnmul-4.c
+ 32b43a0f434aa490598892cf1cbe6618  gcc/testsuite/gcc.target/csky/fpuv3/fldr64_fstr64.c
+ 2b1995193714ffda88b2f3aaa4cd0fae  gcc/testsuite/gcc.target/csky/fpuv3/fpuv3.exp
+ f0e0df3f7b547f0f568889d82be4d61b  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_div.c
+ 94bf44b18840c2e29caf1d82fd7284a4  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fadd.c
+ 3367772e87bcfd8ebc7f55ac55c2da13  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fdtos.c
+ e90a6f18410d2081b35243f8b1fddbb4  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fftoi_rm.c
+ 62465cd0aa7465d4921384dbf2f27c24  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fftoi_rz.c
+ c1faaaa43c53a0aac245482086f2007d  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fhtos.c
+ 3d88fb1ef90d1612f0e0129eb3df8f54  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fitof.c
+ 10cf237cc633a5e7cc19de7ff2ed2803  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmov.c
+ 0f53af00627b495b6affccbb09bf145f  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmovi.c
+ 51629480770880861af82f76afaaed1c  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmula.c
+ e3aef49f1084541b617172430383fc41  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fmuls.c
+ c8c5ed91e61b85a4dcab50a5d8a47b36  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fneg.c
+ d2e6cf8392f8ae98decaee722168f5e0  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmula.c
+ e08be591d7508e9da285fc21e5c46443  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fnmuls.c
+ 3483100fa77b1fac4808d57207ba9c2f  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstod.c
+ 833ffb96ce1c24c2e4149dfca85438ad  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fstoh.c
+ 68d0f5c7127cccfb50d4462c3e0f9903  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fsub.c
+ 3155aa03751af9c5150d65574a8a634e  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_fxtof.c
+ a776fe27f296f2f9ba039426b7238c1f  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_h.c
+ dc7a7ed5f8f99971415a143aa38a69a7  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hs.c
+ 2de673cccd5f457b8f7b8979b56f3296  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hsz.c
+ 1bb4a85b19bd956d150dc34127917a3e  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_hz.c
+ ce0c6ce8eabd9a17cff8f39080e072c4  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ls.c
+ ea19e7c3d09826f8299edbe994e3dd35  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lsz.c
+ a25786ced6b77df822e52271b1b84866  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_lt.c
+ 30d0aa7cc1657ae5f314806d1764f35e  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ltz.c
+ e339813c3a8c91e6682cac24c9f3bd6a  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_max.c
+ 5e77c6b2043f5776105d81093a41710d  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_min.c
+ c6917c62e9a9d05a42371f558ba5da6c  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mul.c
+ 98541c2eacf0f54792b2140efe0ff943  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_mula.c
+ b4b051b2fc8b9575f5946b0601a7bb25  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_muls.c
+ f4bf4cc184f42600f350559e0a56fa67  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_ne.c
+ f3f5b6c20691d995177bf47789446748  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_nez.c
+ 431ec8816f59ef2218b9daa3abbf756e  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_recip.c
+ d2620ca1df46ba15daac1595403d171a  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_sqrt.c
+ 937ea4807ddabd55579faa9c4c2163a4  gcc/testsuite/gcc.target/csky/fpuv3/fpv3_unordered.c
  d314e10078acacca0634c35cf325bf1f  gcc/testsuite/gcc.target/csky/land1.c
  61b8717c421fc4f1d764429691b8bc3e  gcc/testsuite/gcc.target/csky/land2.c
+ a88ea058d0687111d933cfc597fd576f  gcc/testsuite/gcc.target/csky/ldbs.c
  f8325974b60d2e8397f34c8f0e8d8bbf  gcc/testsuite/gcc.target/csky/naked.c
  b7b0230f4b534b91ce701e0cfaf699fc  gcc/testsuite/gcc.target/csky/or1.c
  3396d7f14e4963592892b06ccec1dbed  gcc/testsuite/gcc.target/epiphany/btst-1.c
! cddef70c66aad4f955bbc55e9a33cbff  gcc/testsuite/gcc.target/epiphany/epiphany.exp
  f477a84910092e956697c8b091ff4aba  gcc/testsuite/gcc.target/epiphany/fcmp-1.c
  c8ff5d5cf55484cd9bab33958ca94c36  gcc/testsuite/gcc.target/epiphany/fmadd-1.c
  a2ce030a9439b19e934208c89cb93ba6  gcc/testsuite/gcc.target/epiphany/fmsub-1.c
*************** d7f2f60c2c464ec7133704d0b8deb86d  gcc/te
*** 58003,58011 ****
  0bbd4283a697514ba60e495e007fbbaa  gcc/testsuite/gcc.target/frv/fr550-builtins-3.c
  d8fff2cc6bc3321095b7345915e98ec1  gcc/testsuite/gcc.target/frv/fr550-builtins-4.c
  4f94aea2a37f6adad09abfdbb47bb87e  gcc/testsuite/gcc.target/frv/fr550-builtins-5.c
! 1e3618428f44d2aab0bc8626f96aa2c5  gcc/testsuite/gcc.target/frv/frv.exp
  7b7fc5fe9c67544f0b261293730d590b  gcc/testsuite/gcc.target/gcn/fpdiv.c
! 593ff8b862d5f30b2d336faadef6af8b  gcc/testsuite/gcc.target/gcn/gcn.exp
  0ea62a0ac401e376be4dd2643553b422  gcc/testsuite/gcc.target/gcn/sram-ecc-1.c
  294892f7304e51ed7447fc2643e45348  gcc/testsuite/gcc.target/gcn/sram-ecc-2.c
  3f10465d2867369105692e397e098a18  gcc/testsuite/gcc.target/gcn/sram-ecc-3.c
--- 60577,60585 ----
  0bbd4283a697514ba60e495e007fbbaa  gcc/testsuite/gcc.target/frv/fr550-builtins-3.c
  d8fff2cc6bc3321095b7345915e98ec1  gcc/testsuite/gcc.target/frv/fr550-builtins-4.c
  4f94aea2a37f6adad09abfdbb47bb87e  gcc/testsuite/gcc.target/frv/fr550-builtins-5.c
! 44a9c4f5b25458998a4b163e58ffa718  gcc/testsuite/gcc.target/frv/frv.exp
  7b7fc5fe9c67544f0b261293730d590b  gcc/testsuite/gcc.target/gcn/fpdiv.c
! 7c4db94b11bd144705999f21f121b3f6  gcc/testsuite/gcc.target/gcn/gcn.exp
  0ea62a0ac401e376be4dd2643553b422  gcc/testsuite/gcc.target/gcn/sram-ecc-1.c
  294892f7304e51ed7447fc2643e45348  gcc/testsuite/gcc.target/gcn/sram-ecc-2.c
  3f10465d2867369105692e397e098a18  gcc/testsuite/gcc.target/gcn/sram-ecc-3.c
*************** d8a69d1e0f8e59ede6337a9f9af06146  gcc/te
*** 58019,58025 ****
  216037d0da5ff83a3c5aee08d451cc6a  gcc/testsuite/gcc.target/h8300/add-3.c
  60aaa20daa95a2c6a46f951ed2210274  gcc/testsuite/gcc.target/h8300/add.c
  6618feb3136b4db14cb25d0ac22056c4  gcc/testsuite/gcc.target/h8300/andsi3_ashift_n_lower.c
! 47d80e6ae376a65a4f315f623467d345  gcc/testsuite/gcc.target/h8300/h8300.exp
  945675e6af6576f674dcc30697a6f78b  gcc/testsuite/gcc.target/h8300/pr13721.c
  5788c901799e460b8e5c429a23b94ebe  gcc/testsuite/gcc.target/h8300/pr17306-1.c
  4a76a6a9bd3c90b87865db2ad9c10434  gcc/testsuite/gcc.target/h8300/pr17306-2.c
--- 60593,60599 ----
  216037d0da5ff83a3c5aee08d451cc6a  gcc/testsuite/gcc.target/h8300/add-3.c
  60aaa20daa95a2c6a46f951ed2210274  gcc/testsuite/gcc.target/h8300/add.c
  6618feb3136b4db14cb25d0ac22056c4  gcc/testsuite/gcc.target/h8300/andsi3_ashift_n_lower.c
! 4cd4129d556f920169aee79fb3c438eb  gcc/testsuite/gcc.target/h8300/h8300.exp
  945675e6af6576f674dcc30697a6f78b  gcc/testsuite/gcc.target/h8300/pr13721.c
  5788c901799e460b8e5c429a23b94ebe  gcc/testsuite/gcc.target/h8300/pr17306-1.c
  4a76a6a9bd3c90b87865db2ad9c10434  gcc/testsuite/gcc.target/h8300/pr17306-2.c
*************** aaaadf978237931983f712ab447eeff0  gcc/te
*** 58029,58038 ****
  520d992d481a80dfc60ea32b9335b583  gcc/testsuite/gcc.target/h8300/sub-2.c
  04357d0cac796ebc8355f137f2041585  gcc/testsuite/gcc.target/h8300/sub-3.c
  4e0e54c95521e668ac88da0666ea4642  gcc/testsuite/gcc.target/h8300/sub.c
! ab471212df6b291132157fa18522f5eb  gcc/testsuite/gcc.target/hppa/hppa.exp
  b3208ea4097d665215fd20e76146b954  gcc/testsuite/gcc.target/hppa/shadd-1.c
! 58bd6a3fd73be5559699b62200334b42  gcc/testsuite/gcc.target/hppa/shadd-2.c
! bec45e424269c61868beb11e175edb5f  gcc/testsuite/gcc.target/hppa/shadd-3.c
  3d70153939fed76a4a6d9ce8e10a5bd1  gcc/testsuite/gcc.target/hppa/shadd-4.c
  48202f0a384db36b0b22c39d56b89641  gcc/testsuite/gcc.target/i386/20000609-1.c
  1eb3eb3df6c7fab586557cb5fafe4764  gcc/testsuite/gcc.target/i386/20000614-1.c
--- 60603,60612 ----
  520d992d481a80dfc60ea32b9335b583  gcc/testsuite/gcc.target/h8300/sub-2.c
  04357d0cac796ebc8355f137f2041585  gcc/testsuite/gcc.target/h8300/sub-3.c
  4e0e54c95521e668ac88da0666ea4642  gcc/testsuite/gcc.target/h8300/sub.c
! 3b9286437181d168fcfd9614e882e7ce  gcc/testsuite/gcc.target/hppa/hppa.exp
  b3208ea4097d665215fd20e76146b954  gcc/testsuite/gcc.target/hppa/shadd-1.c
! 793a9a24f14f046eed5297e9926e198f  gcc/testsuite/gcc.target/hppa/shadd-2.c
! 062013a0e3e7eddd556932d95da5027e  gcc/testsuite/gcc.target/hppa/shadd-3.c
  3d70153939fed76a4a6d9ce8e10a5bd1  gcc/testsuite/gcc.target/hppa/shadd-4.c
  48202f0a384db36b0b22c39d56b89641  gcc/testsuite/gcc.target/i386/20000609-1.c
  1eb3eb3df6c7fab586557cb5fafe4764  gcc/testsuite/gcc.target/i386/20000614-1.c
*************** d7eaa92960303dbce8fb31590427bb11  gcc/te
*** 58073,58079 ****
  7ba00d30780cd25eef1d7a85535e31fd  gcc/testsuite/gcc.target/i386/387-1.c
  e0138c4fca2602199c21c9a7858c1484  gcc/testsuite/gcc.target/i386/387-10.c
  4c018b4dafa1fb6b27826f8efc06d216  gcc/testsuite/gcc.target/i386/387-11.c
! a42599870e094e724854207b0978a6e2  gcc/testsuite/gcc.target/i386/387-12.c
  a4841f1cdef224e6bab5e84cab7b5407  gcc/testsuite/gcc.target/i386/387-2.c
  4deb2cb516d5c7d88a74ad7aa3a00136  gcc/testsuite/gcc.target/i386/387-3.c
  ba2b0a148c01cb904bce54c8c192a35b  gcc/testsuite/gcc.target/i386/387-4.c
--- 60647,60653 ----
  7ba00d30780cd25eef1d7a85535e31fd  gcc/testsuite/gcc.target/i386/387-1.c
  e0138c4fca2602199c21c9a7858c1484  gcc/testsuite/gcc.target/i386/387-10.c
  4c018b4dafa1fb6b27826f8efc06d216  gcc/testsuite/gcc.target/i386/387-11.c
! af7fa82adf16be50aa131d2565903b71  gcc/testsuite/gcc.target/i386/387-12.c
  a4841f1cdef224e6bab5e84cab7b5407  gcc/testsuite/gcc.target/i386/387-2.c
  4deb2cb516d5c7d88a74ad7aa3a00136  gcc/testsuite/gcc.target/i386/387-3.c
  ba2b0a148c01cb904bce54c8c192a35b  gcc/testsuite/gcc.target/i386/387-4.c
*************** f735456052a700dd38243bb3e18ed960  gcc/te
*** 58114,58120 ****
  d1f50582e0aff656e8d04fa44820aada  gcc/testsuite/gcc.target/i386/abi-2.c
  fc0f5bb1d300de76b812a0ae5b8bd01c  gcc/testsuite/gcc.target/i386/addr-sel-1.c
  0ccc8826707bc198cf7118d0079e2880  gcc/testsuite/gcc.target/i386/addr-space-1.c
! f518fc3212e92c29762b4e3ed19db331  gcc/testsuite/gcc.target/i386/addr-space-2.c
  8271f07e21d6eeebacf960a2de716a17  gcc/testsuite/gcc.target/i386/addr-space-4.c
  152e32331ada53cf77054183ff2428ef  gcc/testsuite/gcc.target/i386/addr-space-5.c
  dd05e8a4c4da9897a764303a258ce47e  gcc/testsuite/gcc.target/i386/adx-addcarryx32-1.c
--- 60688,60695 ----
  d1f50582e0aff656e8d04fa44820aada  gcc/testsuite/gcc.target/i386/abi-2.c
  fc0f5bb1d300de76b812a0ae5b8bd01c  gcc/testsuite/gcc.target/i386/addr-sel-1.c
  0ccc8826707bc198cf7118d0079e2880  gcc/testsuite/gcc.target/i386/addr-space-1.c
! f3b1566c7c98d2f59922637c82963457  gcc/testsuite/gcc.target/i386/addr-space-2.c
! 3db02232be23b8323e256e34853b5a45  gcc/testsuite/gcc.target/i386/addr-space-3.c
  8271f07e21d6eeebacf960a2de716a17  gcc/testsuite/gcc.target/i386/addr-space-4.c
  152e32331ada53cf77054183ff2428ef  gcc/testsuite/gcc.target/i386/addr-space-5.c
  dd05e8a4c4da9897a764303a258ce47e  gcc/testsuite/gcc.target/i386/adx-addcarryx32-1.c
*************** ae8b5a5d686fedd54544f4210ebf0d66  gcc/te
*** 58152,58161 ****
  d3f15f077bac4fdd98e262ff70319e29  gcc/testsuite/gcc.target/i386/amd64-abi-7.c
  41e281a8a41c48fe7dbd02b555d86032  gcc/testsuite/gcc.target/i386/amd64-abi-8.c
  29b2c8175a8aeb1de6d8e6148a11d79d  gcc/testsuite/gcc.target/i386/amd64-abi-9.c
! a9708e6031cab77e167d74e76fec85a7  gcc/testsuite/gcc.target/i386/amx-check.h
  3e5ed8f51d1403b179db592f12cb019c  gcc/testsuite/gcc.target/i386/amxbf16-asmatt-1.c
  215b9569abd57352c2d13ba5129e07cd  gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c
! f9606b856df6ab061a41088814292c28  gcc/testsuite/gcc.target/i386/amxbf16-dpbf16ps-2.c
  9c0241aa040bd07b656b878c62a423b9  gcc/testsuite/gcc.target/i386/amxint8-asmatt-1.c
  2622cfbb5e38bb55e4751132b8d85ea3  gcc/testsuite/gcc.target/i386/amxint8-asmintel-1.c
  c5330aafe258890f8c38cb1aab66e148  gcc/testsuite/gcc.target/i386/amxint8-dpbssd-2.c
--- 60727,60736 ----
  d3f15f077bac4fdd98e262ff70319e29  gcc/testsuite/gcc.target/i386/amd64-abi-7.c
  41e281a8a41c48fe7dbd02b555d86032  gcc/testsuite/gcc.target/i386/amd64-abi-8.c
  29b2c8175a8aeb1de6d8e6148a11d79d  gcc/testsuite/gcc.target/i386/amd64-abi-9.c
! 3186d9938a0a2ff6b31c795cb0902992  gcc/testsuite/gcc.target/i386/amx-check.h
  3e5ed8f51d1403b179db592f12cb019c  gcc/testsuite/gcc.target/i386/amxbf16-asmatt-1.c
  215b9569abd57352c2d13ba5129e07cd  gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c
! da96302cc56e3a5f8e0b027d5612c4e5  gcc/testsuite/gcc.target/i386/amxbf16-dpbf16ps-2.c
  9c0241aa040bd07b656b878c62a423b9  gcc/testsuite/gcc.target/i386/amxint8-asmatt-1.c
  2622cfbb5e38bb55e4751132b8d85ea3  gcc/testsuite/gcc.target/i386/amxint8-asmintel-1.c
  c5330aafe258890f8c38cb1aab66e148  gcc/testsuite/gcc.target/i386/amxint8-dpbssd-2.c
*************** ddb64605d0e2af6e58489acd2ebba490  gcc/te
*** 58190,58199 ****
  c34fe5a5178e9716c0f68ffb47564686  gcc/testsuite/gcc.target/i386/attr-aligned.c
  9d11ea77a94e6833f3991c7909c56335  gcc/testsuite/gcc.target/i386/attr-nocf-check-1a.c
  2632af969dd8680f097556a40ba2c147  gcc/testsuite/gcc.target/i386/attr-nocf-check-3a.c
  9702921db90d8706268aafc9574e606d  gcc/testsuite/gcc.target/i386/attr-returns_twice-1.c
  b417781449436dad69aae8b9300baa1a  gcc/testsuite/gcc.target/i386/attributes-error.c
! f0a8adac6709a3cdd1776b080b96b910  gcc/testsuite/gcc.target/i386/avx-1.c
! a78738f3c17b2bcf3bd51fb01d0eaeba  gcc/testsuite/gcc.target/i386/avx-2.c
  b8752c209e6f3770321077d53e28d157  gcc/testsuite/gcc.target/i386/avx-3.c
  604a63c576a08022e714a4940dc0e904  gcc/testsuite/gcc.target/i386/avx-additional-reg-names.c
  3fe75cc1036245ab8152a9b44f58097b  gcc/testsuite/gcc.target/i386/avx-ceil-sfix-2-vec.c
--- 60765,60799 ----
  c34fe5a5178e9716c0f68ffb47564686  gcc/testsuite/gcc.target/i386/attr-aligned.c
  9d11ea77a94e6833f3991c7909c56335  gcc/testsuite/gcc.target/i386/attr-nocf-check-1a.c
  2632af969dd8680f097556a40ba2c147  gcc/testsuite/gcc.target/i386/attr-nocf-check-3a.c
+ 29ff688e49690bf34e23911fb0d6a871  gcc/testsuite/gcc.target/i386/attr-optimize.c
  9702921db90d8706268aafc9574e606d  gcc/testsuite/gcc.target/i386/attr-returns_twice-1.c
  b417781449436dad69aae8b9300baa1a  gcc/testsuite/gcc.target/i386/attributes-error.c
! c5769e4bf1f7b51f13a03c7ff48d082a  gcc/testsuite/gcc.target/i386/auto-init-1.c
! a3b2a7fcd16487cd88b6531a2abdb3e8  gcc/testsuite/gcc.target/i386/auto-init-2.c
! c46f439f53ca80682916bbfc2b5411ce  gcc/testsuite/gcc.target/i386/auto-init-21.c
! e87dd16c26a5e74dd3b1d5db54711e7c  gcc/testsuite/gcc.target/i386/auto-init-22.c
! f65b08f90b0d063dfe0900c48ae44e31  gcc/testsuite/gcc.target/i386/auto-init-23.c
! bcf4bec8ae3fb406f477539e4ce5e3ae  gcc/testsuite/gcc.target/i386/auto-init-24.c
! 71a4675584bf20a65fc303e77c312593  gcc/testsuite/gcc.target/i386/auto-init-3.c
! 2cd406ebdf250994ac20b2d5970e0bed  gcc/testsuite/gcc.target/i386/auto-init-4.c
! 1c3aad106f065f8f59eefa5ef2e696f7  gcc/testsuite/gcc.target/i386/auto-init-5.c
! b75e9b4b68c37a6bbe89fb4653e9c56f  gcc/testsuite/gcc.target/i386/auto-init-6.c
! 839577d5139fbc687a0280c2c0655a0d  gcc/testsuite/gcc.target/i386/auto-init-7.c
! ebe893055f7ccbf4240d02e9cba39f2d  gcc/testsuite/gcc.target/i386/auto-init-8.c
! c3a3f56e12ef5746581ec762d6d67d1d  gcc/testsuite/gcc.target/i386/auto-init-padding-1.c
! a34b4fb61dcd1e5a3c0daf5d7d6fae65  gcc/testsuite/gcc.target/i386/auto-init-padding-10.c
! da9a874cc43d515ca40fe91f469c7339  gcc/testsuite/gcc.target/i386/auto-init-padding-11.c
! 473ceb78530da54ed3602515d3b9132d  gcc/testsuite/gcc.target/i386/auto-init-padding-12.c
! 4f2518506ddb10348964cfef12cf036f  gcc/testsuite/gcc.target/i386/auto-init-padding-2.c
! 5955fe5e2e6b460774295b57f682aa37  gcc/testsuite/gcc.target/i386/auto-init-padding-3.c
! 5808936c24c459a0e1287fdfc80ea90f  gcc/testsuite/gcc.target/i386/auto-init-padding-4.c
! 1085d3449618e196dd587e70afc232f0  gcc/testsuite/gcc.target/i386/auto-init-padding-5.c
! 32c7c92b291fd1e003108bba56cddeda  gcc/testsuite/gcc.target/i386/auto-init-padding-6.c
! 64889694d1cb3280b3aa71fa1424dec5  gcc/testsuite/gcc.target/i386/auto-init-padding-7.c
! 6833c0fc00c0e05839ef7fc0ebe6662f  gcc/testsuite/gcc.target/i386/auto-init-padding-8.c
! 549987a73da82c221222811981e79dc3  gcc/testsuite/gcc.target/i386/auto-init-padding-9.c
! d2d0a2fe52fd164d43ff7fe24fd6d62d  gcc/testsuite/gcc.target/i386/avx-1.c
! 5d79949d0342d2be91b231a563b48794  gcc/testsuite/gcc.target/i386/avx-2.c
  b8752c209e6f3770321077d53e28d157  gcc/testsuite/gcc.target/i386/avx-3.c
  604a63c576a08022e714a4940dc0e904  gcc/testsuite/gcc.target/i386/avx-additional-reg-names.c
  3fe75cc1036245ab8152a9b44f58097b  gcc/testsuite/gcc.target/i386/avx-ceil-sfix-2-vec.c
*************** ae728a63491324c9279e2facbffccbb7  gcc/te
*** 58209,58214 ****
--- 60809,60815 ----
  5ebb8570cdbc53e1cfa2baccd13e2d63  gcc/testsuite/gcc.target/i386/avx-cond-1.c
  a6c0e3a8fdbc24444b4fffe7d6f29cbe  gcc/testsuite/gcc.target/i386/avx-copysign-vec.c
  1c0fce612c402d17118f7a55102fb809  gcc/testsuite/gcc.target/i386/avx-copysignf-vec.c
+ 966e8aafee805340d9732e8c51cb804a  gcc/testsuite/gcc.target/i386/avx-covert-1.c
  ee07562fb23d0d286e1011a1efe947ae  gcc/testsuite/gcc.target/i386/avx-cvt-1.c
  5604d7c5bbb57207c23f61507b820cb4  gcc/testsuite/gcc.target/i386/avx-cvt-2-vec.c
  48f52ea3e4c96cb4dca4da68d8f7e6ba  gcc/testsuite/gcc.target/i386/avx-cvt-2.c
*************** e08ea1ad65a1356c216e10a127fa5372  gcc/te
*** 58222,58228 ****
--- 60823,60831 ----
  0079fa59e4d7531a3882751c24215941  gcc/testsuite/gcc.target/i386/avx-floor-vec.c
  a9399ea6a589a3471b681317fdaae2ce  gcc/testsuite/gcc.target/i386/avx-floorf-sfix-vec.c
  be71b5c8fcb01dcf0584d73126144087  gcc/testsuite/gcc.target/i386/avx-floorf-vec.c
+ c28b8cd90127111369b3a3f9e566a7b4  gcc/testsuite/gcc.target/i386/avx-fp-covert-1.c
  00da02db70f133be74dae17241af27eb  gcc/testsuite/gcc.target/i386/avx-inline.c
+ 6ce5bb66230471952f8d93ba742e9287  gcc/testsuite/gcc.target/i386/avx-int-covert-1.c
  bb988640d708e14bbba7f036d1d900dc  gcc/testsuite/gcc.target/i386/avx-loadu2-m128-1.c
  9b015dd71e4cc5b0c3ce5f45923f1124  gcc/testsuite/gcc.target/i386/avx-loadu2-m128-2.c
  5ab72f17054521df29b8e40e0c3f91b0  gcc/testsuite/gcc.target/i386/avx-loadu2-m128d-1.c
*************** f5710388bf6592fabf21f6aa05044790  gcc/te
*** 58233,58239 ****
  3391c9dd1dd0dbbac597a660fd5fb010  gcc/testsuite/gcc.target/i386/avx-lrintf-vec.c
  b4097136b326678c552cf24792f79fe8  gcc/testsuite/gcc.target/i386/avx-mul-1.c
  46322bf9b32fe645dd973a6bc8e8b128  gcc/testsuite/gcc.target/i386/avx-os-support.h
! 649073dcb552cc5ef8392806cbe23d1c  gcc/testsuite/gcc.target/i386/avx-pr102224.c
  62aa13560c827f799be1941a2e6da500  gcc/testsuite/gcc.target/i386/avx-pr51581-1.c
  c437ae63e2540199d8c765547fc407d6  gcc/testsuite/gcc.target/i386/avx-pr51581-2.c
  b6e744a5c521873cc8be2dbb5f25790d  gcc/testsuite/gcc.target/i386/avx-pr57233.c
--- 60836,60842 ----
  3391c9dd1dd0dbbac597a660fd5fb010  gcc/testsuite/gcc.target/i386/avx-lrintf-vec.c
  b4097136b326678c552cf24792f79fe8  gcc/testsuite/gcc.target/i386/avx-mul-1.c
  46322bf9b32fe645dd973a6bc8e8b128  gcc/testsuite/gcc.target/i386/avx-os-support.h
! 4282e5e62a637968b77c731037a2875b  gcc/testsuite/gcc.target/i386/avx-pr102224.c
  62aa13560c827f799be1941a2e6da500  gcc/testsuite/gcc.target/i386/avx-pr51581-1.c
  c437ae63e2540199d8c765547fc407d6  gcc/testsuite/gcc.target/i386/avx-pr51581-2.c
  b6e744a5c521873cc8be2dbb5f25790d  gcc/testsuite/gcc.target/i386/avx-pr57233.c
*************** ab15d222e706bd85c87c037d1e9b6f51  gcc/te
*** 58242,58253 ****
  52efc199588007563ddb240d620c0f01  gcc/testsuite/gcc.target/i386/avx-pr71559.c
  15722fba52fd43dd64c47b080c1c307c  gcc/testsuite/gcc.target/i386/avx-pr80286.c
  0c470227f4a8ce9ace3b799a8ebecbc0  gcc/testsuite/gcc.target/i386/avx-pr80846.c
! cb21d2e64c04a9daab66338cc0a66e65  gcc/testsuite/gcc.target/i386/avx-pr82370.c
  fbcf5aac4ed190f64069f1418687d5f1  gcc/testsuite/gcc.target/i386/avx-pr88189-1.c
  811083ceed1ed00408a07db7a4aa3156  gcc/testsuite/gcc.target/i386/avx-pr88189-2.c
  33cf4cb35f83f41bef6cbda92c6d1856  gcc/testsuite/gcc.target/i386/avx-pr93078.c
  9b926829d7de933c61b0300157acbfc5  gcc/testsuite/gcc.target/i386/avx-pr93637.c
  542e7d75a9987542b5e477a240592ae7  gcc/testsuite/gcc.target/i386/avx-pr99563.c
  4e3d37bb04b99394790fa9e8caddf790  gcc/testsuite/gcc.target/i386/avx-recip-vec.c
  02ae18a66bd7b76f7a651b896f066b70  gcc/testsuite/gcc.target/i386/avx-reduc-1.c
  3e91f40208c50966229ca6dead80479d  gcc/testsuite/gcc.target/i386/avx-rint-sfix-2-vec.c
--- 60845,60859 ----
  52efc199588007563ddb240d620c0f01  gcc/testsuite/gcc.target/i386/avx-pr71559.c
  15722fba52fd43dd64c47b080c1c307c  gcc/testsuite/gcc.target/i386/avx-pr80286.c
  0c470227f4a8ce9ace3b799a8ebecbc0  gcc/testsuite/gcc.target/i386/avx-pr80846.c
! a949df5855de5e28ac03e14aab0dc89c  gcc/testsuite/gcc.target/i386/avx-pr82370.c
  fbcf5aac4ed190f64069f1418687d5f1  gcc/testsuite/gcc.target/i386/avx-pr88189-1.c
  811083ceed1ed00408a07db7a4aa3156  gcc/testsuite/gcc.target/i386/avx-pr88189-2.c
+ 1c9185cead3a2c1e4e9fab1c12b3fcb0  gcc/testsuite/gcc.target/i386/avx-pr89984.c
  33cf4cb35f83f41bef6cbda92c6d1856  gcc/testsuite/gcc.target/i386/avx-pr93078.c
  9b926829d7de933c61b0300157acbfc5  gcc/testsuite/gcc.target/i386/avx-pr93637.c
+ 46ee48008ccc6f38ce2c3d2ee84252a9  gcc/testsuite/gcc.target/i386/avx-pr94680.c
  542e7d75a9987542b5e477a240592ae7  gcc/testsuite/gcc.target/i386/avx-pr99563.c
+ ef7651aa8193d57e3373af52d0f0b863  gcc/testsuite/gcc.target/i386/avx-psraq-1.c
  4e3d37bb04b99394790fa9e8caddf790  gcc/testsuite/gcc.target/i386/avx-recip-vec.c
  02ae18a66bd7b76f7a651b896f066b70  gcc/testsuite/gcc.target/i386/avx-reduc-1.c
  3e91f40208c50966229ca6dead80479d  gcc/testsuite/gcc.target/i386/avx-rint-sfix-2-vec.c
*************** c7eb87b3adb4d1f009938acb24e45805  gcc/te
*** 58740,58749 ****
  4d1ac7f558077b3999165f5dc25784c6  gcc/testsuite/gcc.target/i386/avx-vzeroupper-11.c
  e574c1cd5d253ccd4178534da6c08128  gcc/testsuite/gcc.target/i386/avx-vzeroupper-12.c
  8f4945cde0bafb95376035acb8001955  gcc/testsuite/gcc.target/i386/avx-vzeroupper-13.c
! cd5932f7a525e4a13b1b235ef16ce52b  gcc/testsuite/gcc.target/i386/avx-vzeroupper-14.c
! 888bb5644f6dcfbfced23d392f7bb7c2  gcc/testsuite/gcc.target/i386/avx-vzeroupper-15.c
  00a1b1b2312aac0ae805ae0dcf7a9b89  gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c
! f5d9730780d7fefbcb834b2afe7b6d48  gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c
  ec233537392259d5b47999bc68ec0b07  gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c
  4afeb8752978bb672389b499a28d6cbc  gcc/testsuite/gcc.target/i386/avx-vzeroupper-19.c
  b2f6965ef1085f96f81ddfe840fc62a0  gcc/testsuite/gcc.target/i386/avx-vzeroupper-2.c
--- 61346,61355 ----
  4d1ac7f558077b3999165f5dc25784c6  gcc/testsuite/gcc.target/i386/avx-vzeroupper-11.c
  e574c1cd5d253ccd4178534da6c08128  gcc/testsuite/gcc.target/i386/avx-vzeroupper-12.c
  8f4945cde0bafb95376035acb8001955  gcc/testsuite/gcc.target/i386/avx-vzeroupper-13.c
! b842dd5b565fe11176de207b00b4109f  gcc/testsuite/gcc.target/i386/avx-vzeroupper-14.c
! 135eb49b0c89f064146bbbaa422289af  gcc/testsuite/gcc.target/i386/avx-vzeroupper-15.c
  00a1b1b2312aac0ae805ae0dcf7a9b89  gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c
! 5b338d7b01612ca56170918f767a5886  gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c
  ec233537392259d5b47999bc68ec0b07  gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c
  4afeb8752978bb672389b499a28d6cbc  gcc/testsuite/gcc.target/i386/avx-vzeroupper-19.c
  b2f6965ef1085f96f81ddfe840fc62a0  gcc/testsuite/gcc.target/i386/avx-vzeroupper-2.c
*************** b47b757f8315eacb46b04546750c92a3  gcc/te
*** 58755,58760 ****
--- 61361,61367 ----
  99d95f5ed8219dbd6f25d0d43af3e99e  gcc/testsuite/gcc.target/i386/avx-vzeroupper-25.c
  c9c1cc09c516bf54bf50fb514a8f862c  gcc/testsuite/gcc.target/i386/avx-vzeroupper-26.c
  373ca5703182fb7bac2076f26891bd55  gcc/testsuite/gcc.target/i386/avx-vzeroupper-27.c
+ c196063785925f2f19d102abe1488774  gcc/testsuite/gcc.target/i386/avx-vzeroupper-28.c
  2676f686c636ba65ddf77da8485ee324  gcc/testsuite/gcc.target/i386/avx-vzeroupper-3.c
  762b6911a6dc394fae9ee24213fb6114  gcc/testsuite/gcc.target/i386/avx-vzeroupper-4.c
  27e3a091b9bfccddb7c44014ae46ed71  gcc/testsuite/gcc.target/i386/avx-vzeroupper-5.c
*************** a5901d33285892facee8dbfe287ce0d1  gcc/te
*** 58766,58773 ****
  958690bb20e5ef6d9a38def7eb976f13  gcc/testsuite/gcc.target/i386/avx2-check.h
  7dc98d98981fa7b82c0ae95d09c8128c  gcc/testsuite/gcc.target/i386/avx2-cvt-1.c
  ea08c4d81609e53332974756983fe0c2  gcc/testsuite/gcc.target/i386/avx2-cvt-2.c
  aaabb27f441033ad22d615277a666b93  gcc/testsuite/gcc.target/i386/avx2-gather-1.c
! 9369fee730921275e0fcab78d0a99ce8  gcc/testsuite/gcc.target/i386/avx2-gather-2.c
  e6fb48367ac48aab006ff09ee7205b7f  gcc/testsuite/gcc.target/i386/avx2-gather-3.c
  74c386970583ffac555d2320df839c1b  gcc/testsuite/gcc.target/i386/avx2-gather-4.c
  b10dfe874c7de4330090cb5b58ccddda  gcc/testsuite/gcc.target/i386/avx2-gather-5.c
--- 61373,61381 ----
  958690bb20e5ef6d9a38def7eb976f13  gcc/testsuite/gcc.target/i386/avx2-check.h
  7dc98d98981fa7b82c0ae95d09c8128c  gcc/testsuite/gcc.target/i386/avx2-cvt-1.c
  ea08c4d81609e53332974756983fe0c2  gcc/testsuite/gcc.target/i386/avx2-cvt-2.c
+ 0598c67dc7d57cb536fed4dfd284c353  gcc/testsuite/gcc.target/i386/avx2-dest-false-dep-for-glc.c
  aaabb27f441033ad22d615277a666b93  gcc/testsuite/gcc.target/i386/avx2-gather-1.c
! 193500dbe679e3b0106077cb94dcd659  gcc/testsuite/gcc.target/i386/avx2-gather-2.c
  e6fb48367ac48aab006ff09ee7205b7f  gcc/testsuite/gcc.target/i386/avx2-gather-3.c
  74c386970583ffac555d2320df839c1b  gcc/testsuite/gcc.target/i386/avx2-gather-4.c
  b10dfe874c7de4330090cb5b58ccddda  gcc/testsuite/gcc.target/i386/avx2-gather-5.c
*************** edcc6ae3ef8b4a9a28b21a55e4312f05  gcc/te
*** 58787,58793 ****
  5c82a88ebf9aa1d554e82f5ff1a8c350  gcc/testsuite/gcc.target/i386/avx2-i32gatherpd256-1.c
  eb1ebddc147469232bd91efa8a997e68  gcc/testsuite/gcc.target/i386/avx2-i32gatherpd256-2.c
  5dbb9c1e2207f5ff36d4fc6a5fdc0abf  gcc/testsuite/gcc.target/i386/avx2-i32gatherpd256-3.c
! 1b63b6190d12179adcbef052149ca5d8  gcc/testsuite/gcc.target/i386/avx2-i32gatherpd256-4.c
  75971c58502ac7e5f2b01343ccfa114b  gcc/testsuite/gcc.target/i386/avx2-i32gatherps-1.c
  3bdab042086a78b4659c42aab3be812b  gcc/testsuite/gcc.target/i386/avx2-i32gatherps-2.c
  2e71882ec4cbb2ab75c633c823644363  gcc/testsuite/gcc.target/i386/avx2-i32gatherps-3.c
--- 61395,61401 ----
  5c82a88ebf9aa1d554e82f5ff1a8c350  gcc/testsuite/gcc.target/i386/avx2-i32gatherpd256-1.c
  eb1ebddc147469232bd91efa8a997e68  gcc/testsuite/gcc.target/i386/avx2-i32gatherpd256-2.c
  5dbb9c1e2207f5ff36d4fc6a5fdc0abf  gcc/testsuite/gcc.target/i386/avx2-i32gatherpd256-3.c
! e569733abeba31bbd23c2cfc9b4eaa6c  gcc/testsuite/gcc.target/i386/avx2-i32gatherpd256-4.c
  75971c58502ac7e5f2b01343ccfa114b  gcc/testsuite/gcc.target/i386/avx2-i32gatherps-1.c
  3bdab042086a78b4659c42aab3be812b  gcc/testsuite/gcc.target/i386/avx2-i32gatherps-2.c
  2e71882ec4cbb2ab75c633c823644363  gcc/testsuite/gcc.target/i386/avx2-i32gatherps-3.c
*************** b7253806e8326ba13b2565efd6dca957  gcc/te
*** 58803,58809 ****
  d7188bc090232de15663969ae754abeb  gcc/testsuite/gcc.target/i386/avx2-i32gatherq256-1.c
  a6c8e9642f248577125397fc7dd95b17  gcc/testsuite/gcc.target/i386/avx2-i32gatherq256-2.c
  da9440e1c1a1c2f9d81159bb741971e1  gcc/testsuite/gcc.target/i386/avx2-i32gatherq256-3.c
! 6ffd651adde083f84fdb9911e873d9bf  gcc/testsuite/gcc.target/i386/avx2-i32gatherq256-4.c
  4a42d96ae6d609b7872d06a4e044f3fe  gcc/testsuite/gcc.target/i386/avx2-i64gatherd-1.c
  e2d9c1c0a0c791178714880966ff7c15  gcc/testsuite/gcc.target/i386/avx2-i64gatherd-2.c
  9d359bb7249b32732db3f492570589b4  gcc/testsuite/gcc.target/i386/avx2-i64gatherd-3.c
--- 61411,61417 ----
  d7188bc090232de15663969ae754abeb  gcc/testsuite/gcc.target/i386/avx2-i32gatherq256-1.c
  a6c8e9642f248577125397fc7dd95b17  gcc/testsuite/gcc.target/i386/avx2-i32gatherq256-2.c
  da9440e1c1a1c2f9d81159bb741971e1  gcc/testsuite/gcc.target/i386/avx2-i32gatherq256-3.c
! 9c9c771743e9feeb8823bbb9db93494c  gcc/testsuite/gcc.target/i386/avx2-i32gatherq256-4.c
  4a42d96ae6d609b7872d06a4e044f3fe  gcc/testsuite/gcc.target/i386/avx2-i64gatherd-1.c
  e2d9c1c0a0c791178714880966ff7c15  gcc/testsuite/gcc.target/i386/avx2-i64gatherd-2.c
  9d359bb7249b32732db3f492570589b4  gcc/testsuite/gcc.target/i386/avx2-i64gatherd-3.c
*************** e2d9c1c0a0c791178714880966ff7c15  gcc/te
*** 58819,58825 ****
  102ab4b16050448faa47b7e006987b11  gcc/testsuite/gcc.target/i386/avx2-i64gatherpd256-1.c
  6b8884ffa3b8317165ee970674e1a73e  gcc/testsuite/gcc.target/i386/avx2-i64gatherpd256-2.c
  9cf8fd9d224e292ce42b92b11bafd094  gcc/testsuite/gcc.target/i386/avx2-i64gatherpd256-3.c
! 72bf3e5c60a9a9f62f2c57db23754030  gcc/testsuite/gcc.target/i386/avx2-i64gatherpd256-4.c
  fbba38a7fe768b290c048be37fc24532  gcc/testsuite/gcc.target/i386/avx2-i64gatherps-1.c
  18e41a80df190541481aba0ed1831294  gcc/testsuite/gcc.target/i386/avx2-i64gatherps-2.c
  a47804b62cb00361a4f4212ed50a6ade  gcc/testsuite/gcc.target/i386/avx2-i64gatherps-3.c
--- 61427,61433 ----
  102ab4b16050448faa47b7e006987b11  gcc/testsuite/gcc.target/i386/avx2-i64gatherpd256-1.c
  6b8884ffa3b8317165ee970674e1a73e  gcc/testsuite/gcc.target/i386/avx2-i64gatherpd256-2.c
  9cf8fd9d224e292ce42b92b11bafd094  gcc/testsuite/gcc.target/i386/avx2-i64gatherpd256-3.c
! 84ce970144950d8ccc094ce2a200d0c2  gcc/testsuite/gcc.target/i386/avx2-i64gatherpd256-4.c
  fbba38a7fe768b290c048be37fc24532  gcc/testsuite/gcc.target/i386/avx2-i64gatherps-1.c
  18e41a80df190541481aba0ed1831294  gcc/testsuite/gcc.target/i386/avx2-i64gatherps-2.c
  a47804b62cb00361a4f4212ed50a6ade  gcc/testsuite/gcc.target/i386/avx2-i64gatherps-3.c
*************** bdb1dbd34e41a723a3f7e19c6659fddd  gcc/te
*** 58835,58844 ****
  52851e3470e6940786cb428025b25d73  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-1.c
  a1d47036a9ce365a559716be2cf89ec1  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-2.c
  84e6e6a5c3c2b77b0d28a411f41a0a26  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-3.c
! e082c71a709eff3367dacdb623737c6e  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-4.c
  9d7021f10aab16079c5f9602e594cd42  gcc/testsuite/gcc.target/i386/avx2-mpsadbw-1.c
  6fc4ada896c32f2d08cf540bde78c355  gcc/testsuite/gcc.target/i386/avx2-mpsadbw-2.c
  fe43a9deff46d9922603adbeeafc1bca  gcc/testsuite/gcc.target/i386/avx2-mul-1.c
  a544282846ec57648b2f38abf14119f0  gcc/testsuite/gcc.target/i386/avx2-pr51581-1.c
  46ffedd4e5e66cd46ad561ee8562eb7b  gcc/testsuite/gcc.target/i386/avx2-pr51581-2.c
  adf63582badc02467af57f768108628f  gcc/testsuite/gcc.target/i386/avx2-pr57233.c
--- 61443,61455 ----
  52851e3470e6940786cb428025b25d73  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-1.c
  a1d47036a9ce365a559716be2cf89ec1  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-2.c
  84e6e6a5c3c2b77b0d28a411f41a0a26  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-3.c
! 132568e07b06a6440e09bc976ef49452  gcc/testsuite/gcc.target/i386/avx2-i64gatherq256-4.c
  9d7021f10aab16079c5f9602e594cd42  gcc/testsuite/gcc.target/i386/avx2-mpsadbw-1.c
  6fc4ada896c32f2d08cf540bde78c355  gcc/testsuite/gcc.target/i386/avx2-mpsadbw-2.c
  fe43a9deff46d9922603adbeeafc1bca  gcc/testsuite/gcc.target/i386/avx2-mul-1.c
+ 19c711e3f9248722e8b79f75080e72d9  gcc/testsuite/gcc.target/i386/avx2-pr101286.c
+ d88c63775cca32821a256ed084eb0bc4  gcc/testsuite/gcc.target/i386/avx2-pr101611-1.c
+ f9c098fee9a454404b6c994c1b481bc0  gcc/testsuite/gcc.target/i386/avx2-pr101611-2.c
  a544282846ec57648b2f38abf14119f0  gcc/testsuite/gcc.target/i386/avx2-pr51581-1.c
  46ffedd4e5e66cd46ad561ee8562eb7b  gcc/testsuite/gcc.target/i386/avx2-pr51581-2.c
  adf63582badc02467af57f768108628f  gcc/testsuite/gcc.target/i386/avx2-pr57233.c
*************** d74ce7ca4af70d590cb84aa587a5328a  gcc/te
*** 58852,58858 ****
  757f2803cb524594784445d322b67fa5  gcc/testsuite/gcc.target/i386/avx2-pr70574.c
  eff00a81e6cb0010baf6a32b833b0772  gcc/testsuite/gcc.target/i386/avx2-pr80631.c
  3be785004d56418439a56d1929cfaf99  gcc/testsuite/gcc.target/i386/avx2-pr80846.c
! e633d2cdd6e46d0e3462ac7fb113c2d2  gcc/testsuite/gcc.target/i386/avx2-pr82370.c
  5367c6754763ae7586d8b37d96ef906f  gcc/testsuite/gcc.target/i386/avx2-pr88547-1.c
  c7941de7c7db82290d85b72fa950c1e8  gcc/testsuite/gcc.target/i386/avx2-pr88547-2.c
  a87322f8b41576277cea28762f1f1164  gcc/testsuite/gcc.target/i386/avx2-pr90991-1.c
--- 61463,61469 ----
  757f2803cb524594784445d322b67fa5  gcc/testsuite/gcc.target/i386/avx2-pr70574.c
  eff00a81e6cb0010baf6a32b833b0772  gcc/testsuite/gcc.target/i386/avx2-pr80631.c
  3be785004d56418439a56d1929cfaf99  gcc/testsuite/gcc.target/i386/avx2-pr80846.c
! f27c85b1c3c427ec73d64ab17691b1c2  gcc/testsuite/gcc.target/i386/avx2-pr82370.c
  5367c6754763ae7586d8b37d96ef906f  gcc/testsuite/gcc.target/i386/avx2-pr88547-1.c
  c7941de7c7db82290d85b72fa950c1e8  gcc/testsuite/gcc.target/i386/avx2-pr88547-2.c
  a87322f8b41576277cea28762f1f1164  gcc/testsuite/gcc.target/i386/avx2-pr90991-1.c
*************** fe1e9952f545a4585608336ac4da4efc  gcc/te
*** 58864,58870 ****
  e3a487b442acf86bbfc79eba4594f8bd  gcc/testsuite/gcc.target/i386/avx2-pr98461.c
  4796bd3878280cf20a2d843b24cb6576  gcc/testsuite/gcc.target/i386/avx2-pr99517-1.c
  eb660431400dfd8f30b0e0eac2d5c055  gcc/testsuite/gcc.target/i386/avx2-pr99517-2.c
! 76659f18345789670cd4d9be1e6d885e  gcc/testsuite/gcc.target/i386/avx2-shiftqihi-constant-1.c
  fedde1c2812219bd1650a5838e226124  gcc/testsuite/gcc.target/i386/avx2-shiftqihi-constant-2.c
  2b83554762241a146df7ccc1617e1bfa  gcc/testsuite/gcc.target/i386/avx2-vbroadcastsd_pd-1.c
  193f0a7d029b84ce4e3b2e58eac8240a  gcc/testsuite/gcc.target/i386/avx2-vbroadcastsd_pd-2.c
--- 61475,61483 ----
  e3a487b442acf86bbfc79eba4594f8bd  gcc/testsuite/gcc.target/i386/avx2-pr98461.c
  4796bd3878280cf20a2d843b24cb6576  gcc/testsuite/gcc.target/i386/avx2-pr99517-1.c
  eb660431400dfd8f30b0e0eac2d5c055  gcc/testsuite/gcc.target/i386/avx2-pr99517-2.c
! 043383b25f13e0c9b9089a42c73d0865  gcc/testsuite/gcc.target/i386/avx2-pr99908.c
! 62a66a977f36c3fad279922d1cc45fac  gcc/testsuite/gcc.target/i386/avx2-psraq-1.c
! 8afaf3881ae64dfbeb61a2c63ec21e01  gcc/testsuite/gcc.target/i386/avx2-shiftqihi-constant-1.c
  fedde1c2812219bd1650a5838e226124  gcc/testsuite/gcc.target/i386/avx2-shiftqihi-constant-2.c
  2b83554762241a146df7ccc1617e1bfa  gcc/testsuite/gcc.target/i386/avx2-vbroadcastsd_pd-1.c
  193f0a7d029b84ce4e3b2e58eac8240a  gcc/testsuite/gcc.target/i386/avx2-vbroadcastsd_pd-2.c
*************** e1d1b9e055d09a1e78f8bfc020b865df  gcc/te
*** 58878,58885 ****
  990742bce89a71ddcd0d9565f96bfe57  gcc/testsuite/gcc.target/i386/avx2-vec-set-1.c
  4e5aa3a19d8c19848e116c07be676e2e  gcc/testsuite/gcc.target/i386/avx2-vec-set-2.c
  f5ff5b2d2c7f5ab0f0ed01ea89033342  gcc/testsuite/gcc.target/i386/avx2-vect-aggressive-1.c
! 0bf4afaaaa8289dd88f23d84fd1850f4  gcc/testsuite/gcc.target/i386/avx2-vect-aggressive.c
! e54a28e4d5ee3112ed858f60d384c4d8  gcc/testsuite/gcc.target/i386/avx2-vect-mask-store-move1.c
  63e46dd5c3cd39f62e0c9adfec2118d5  gcc/testsuite/gcc.target/i386/avx2-vect-shift.c
  3ceda49499c5d8d2c2e2c36fad3ce111  gcc/testsuite/gcc.target/i386/avx2-vect-simd-10.c
  a03f489c86482c58f6c4295a62f0bd7f  gcc/testsuite/gcc.target/i386/avx2-vect-simd-11.c
--- 61491,61498 ----
  990742bce89a71ddcd0d9565f96bfe57  gcc/testsuite/gcc.target/i386/avx2-vec-set-1.c
  4e5aa3a19d8c19848e116c07be676e2e  gcc/testsuite/gcc.target/i386/avx2-vec-set-2.c
  f5ff5b2d2c7f5ab0f0ed01ea89033342  gcc/testsuite/gcc.target/i386/avx2-vect-aggressive-1.c
! 72d53023764a6f03c328a10d9759fadd  gcc/testsuite/gcc.target/i386/avx2-vect-aggressive.c
! 5e8c9e53598c37c0fbf65642f16af194  gcc/testsuite/gcc.target/i386/avx2-vect-mask-store-move1.c
  63e46dd5c3cd39f62e0c9adfec2118d5  gcc/testsuite/gcc.target/i386/avx2-vect-shift.c
  3ceda49499c5d8d2c2e2c36fad3ce111  gcc/testsuite/gcc.target/i386/avx2-vect-simd-10.c
  a03f489c86482c58f6c4295a62f0bd7f  gcc/testsuite/gcc.target/i386/avx2-vect-simd-11.c
*************** ddb6e876843d279a863966ee3d2fbc48  gcc/te
*** 58896,58906 ****
  9745a93a0fe2535a4f108bb419893796  gcc/testsuite/gcc.target/i386/avx2-vmovntdqa-1.c
  7cc5249d9d443ecf9551057fd7c7b1e7  gcc/testsuite/gcc.target/i386/avx2-vmovntdqa-2.c
  fa4e077aac29de79fe85fb93f66cf59d  gcc/testsuite/gcc.target/i386/avx2-vpabsb256-1.c
! 9b097b04f989a699ec72d2e2571478b3  gcc/testsuite/gcc.target/i386/avx2-vpabsb256-2.c
  f012077db4ba291f46996de91b83f234  gcc/testsuite/gcc.target/i386/avx2-vpabsd256-1.c
! ec7e5261c9d52e2c4d79b072fe1da43c  gcc/testsuite/gcc.target/i386/avx2-vpabsd256-2.c
  3600127c6da34d703d9d9c7d5008c8f8  gcc/testsuite/gcc.target/i386/avx2-vpabsw256-1.c
! 0b8a1cdd1d23ab47f7d11806a5206ac7  gcc/testsuite/gcc.target/i386/avx2-vpabsw256-2.c
  66b5ff629d0da87437722be65fe19dc0  gcc/testsuite/gcc.target/i386/avx2-vpackssdw-1.c
  4c3363eb11c4d6508b74abaed6608b14  gcc/testsuite/gcc.target/i386/avx2-vpackssdw-2.c
  8142511ec381f4002ebe0ff2dd186c8f  gcc/testsuite/gcc.target/i386/avx2-vpacksswb-1.c
--- 61509,61519 ----
  9745a93a0fe2535a4f108bb419893796  gcc/testsuite/gcc.target/i386/avx2-vmovntdqa-1.c
  7cc5249d9d443ecf9551057fd7c7b1e7  gcc/testsuite/gcc.target/i386/avx2-vmovntdqa-2.c
  fa4e077aac29de79fe85fb93f66cf59d  gcc/testsuite/gcc.target/i386/avx2-vpabsb256-1.c
! f6d422ad173899dd2eb8c611f5b34ac5  gcc/testsuite/gcc.target/i386/avx2-vpabsb256-2.c
  f012077db4ba291f46996de91b83f234  gcc/testsuite/gcc.target/i386/avx2-vpabsd256-1.c
! dfc22265efb8f6a675de55b5ecec52ca  gcc/testsuite/gcc.target/i386/avx2-vpabsd256-2.c
  3600127c6da34d703d9d9c7d5008c8f8  gcc/testsuite/gcc.target/i386/avx2-vpabsw256-1.c
! bdf87c862a53718ff7a0019dff11dec1  gcc/testsuite/gcc.target/i386/avx2-vpabsw256-2.c
  66b5ff629d0da87437722be65fe19dc0  gcc/testsuite/gcc.target/i386/avx2-vpackssdw-1.c
  4c3363eb11c4d6508b74abaed6608b14  gcc/testsuite/gcc.target/i386/avx2-vpackssdw-2.c
  8142511ec381f4002ebe0ff2dd186c8f  gcc/testsuite/gcc.target/i386/avx2-vpacksswb-1.c
*************** d313bab77287b21e3f72292a35842992  gcc/te
*** 59209,59229 ****
  1ed00f85c56ba2eb621086a7b39e4529  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-4.c
  ac1c6f23df451df8715f98348ab41e7b  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-5.c
  010f15340b233494003927d058cdde0e  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-6.c
! c6a00882192678106c5797cbff600dcc  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-7.c
  d27ae3d359b741c698de8eae30ec7af2  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-1.c
  874da2766b15d9f04db3d4882c42e355  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-2.c
  cce52fe4d17cb0b3062d0d31526c517f  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-3.c
  aaef10fa24c4bc67258e89962335eaed  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-4.c
  851dac1c7dd73efe6b05026da917342d  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-5.c
  3f5fa6be90bc7c0bb2fc93906c9940b3  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-6.c
! 53389771ff64cb14721257f467364464  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-7.c
  0feb94f9968a5b27ad2447774a124af9  gcc/testsuite/gcc.target/i386/avx512-binop-1.h
  73f17c6e6c3de9b56b6c24f2ca95e8dc  gcc/testsuite/gcc.target/i386/avx512-binop-2.h
  7e80c283345b21a08008c43b6ba91fa4  gcc/testsuite/gcc.target/i386/avx512-binop-3.h
  94a7348b69336db67bf71197f22793b5  gcc/testsuite/gcc.target/i386/avx512-binop-4.h
  a18d070763a97447058fa5b584a5b9c6  gcc/testsuite/gcc.target/i386/avx512-binop-5.h
  0d28ea104e88f32dc070c3e46e4aa0d6  gcc/testsuite/gcc.target/i386/avx512-binop-6.h
! 694d290031feaa4ac8a09c7d4057fd6e  gcc/testsuite/gcc.target/i386/avx512-check.h
  7cbcb9acf470bd0a7216d3b1ecdc7782  gcc/testsuite/gcc.target/i386/avx512-fma-1.h
  c89b3bb38d9093b77d878d003a4d9b43  gcc/testsuite/gcc.target/i386/avx512-fma-2.h
  6d3aa2a78416766a98e9f88514cb03fc  gcc/testsuite/gcc.target/i386/avx512-fma-3.h
--- 61822,61842 ----
  1ed00f85c56ba2eb621086a7b39e4529  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-4.c
  ac1c6f23df451df8715f98348ab41e7b  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-5.c
  010f15340b233494003927d058cdde0e  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-6.c
! 30a72b65677ffe96e520e986be6eb49b  gcc/testsuite/gcc.target/i386/avx256-unaligned-load-7.c
  d27ae3d359b741c698de8eae30ec7af2  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-1.c
  874da2766b15d9f04db3d4882c42e355  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-2.c
  cce52fe4d17cb0b3062d0d31526c517f  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-3.c
  aaef10fa24c4bc67258e89962335eaed  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-4.c
  851dac1c7dd73efe6b05026da917342d  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-5.c
  3f5fa6be90bc7c0bb2fc93906c9940b3  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-6.c
! 57127db2a957cc3b9075d912d2186d74  gcc/testsuite/gcc.target/i386/avx256-unaligned-store-7.c
  0feb94f9968a5b27ad2447774a124af9  gcc/testsuite/gcc.target/i386/avx512-binop-1.h
  73f17c6e6c3de9b56b6c24f2ca95e8dc  gcc/testsuite/gcc.target/i386/avx512-binop-2.h
  7e80c283345b21a08008c43b6ba91fa4  gcc/testsuite/gcc.target/i386/avx512-binop-3.h
  94a7348b69336db67bf71197f22793b5  gcc/testsuite/gcc.target/i386/avx512-binop-4.h
  a18d070763a97447058fa5b584a5b9c6  gcc/testsuite/gcc.target/i386/avx512-binop-5.h
  0d28ea104e88f32dc070c3e46e4aa0d6  gcc/testsuite/gcc.target/i386/avx512-binop-6.h
! fbdba68ba420ccce8fa8455faaab1f7e  gcc/testsuite/gcc.target/i386/avx512-check.h
  7cbcb9acf470bd0a7216d3b1ecdc7782  gcc/testsuite/gcc.target/i386/avx512-fma-1.h
  c89b3bb38d9093b77d878d003a4d9b43  gcc/testsuite/gcc.target/i386/avx512-fma-2.h
  6d3aa2a78416766a98e9f88514cb03fc  gcc/testsuite/gcc.target/i386/avx512-fma-3.h
*************** f55df70acaaa1a05030d45495848eb2b  gcc/te
*** 59242,59255 ****
  1db2c2106138cc396b1ae8c512625b33  gcc/testsuite/gcc.target/i386/avx5124vnniw-vp4dpwssd-2.c
  5052cdd63fbafc27cd3d7534458acaec  gcc/testsuite/gcc.target/i386/avx5124vnniw-vp4dpwssds-1.c
  925a068450d57f20740e5ce6e8fe217e  gcc/testsuite/gcc.target/i386/avx5124vnniw-vp4dpwssds-2.c
  964a5f2a2c89b83533b2be720732ccd6  gcc/testsuite/gcc.target/i386/avx512bf16-vcvtne2ps2bf16-1.c
  80660c3a1129515840c1c9e263211f06  gcc/testsuite/gcc.target/i386/avx512bf16-vcvtneps2bf16-1.c
  63e7956c8ca198ce2181d80ed229bbbb  gcc/testsuite/gcc.target/i386/avx512bf16-vdpbf16ps-1.c
  df6e4022dfad9e000020611638b05fdd  gcc/testsuite/gcc.target/i386/avx512bf16-vdpbf16ps-2.c
  f877c7aff68980a873311e9e3029ab4e  gcc/testsuite/gcc.target/i386/avx512bf16vl-vcvtne2ps2bf16-1.c
  334659570f347a4b03cf37336321aa2c  gcc/testsuite/gcc.target/i386/avx512bf16vl-vcvtneps2bf16-1.c
  4d0bcbe3e5ed908d180434ef26bd4a3a  gcc/testsuite/gcc.target/i386/avx512bf16vl-vdpbf16ps-1.c
! 0a1f022cd3e406ca9b23018d3f8d6281  gcc/testsuite/gcc.target/i386/avx512bitalg-pr97770-1.c
  84a11e540e8533df61152a30c873a575  gcc/testsuite/gcc.target/i386/avx512bitalg-vpopcntb-1.c
  d728d0693656bb9b505f505356762d3c  gcc/testsuite/gcc.target/i386/avx512bitalg-vpopcntb.c
  7f84f82c7512e69110cd9ace71cf5f78  gcc/testsuite/gcc.target/i386/avx512bitalg-vpopcntbvl.c
--- 61855,61872 ----
  1db2c2106138cc396b1ae8c512625b33  gcc/testsuite/gcc.target/i386/avx5124vnniw-vp4dpwssd-2.c
  5052cdd63fbafc27cd3d7534458acaec  gcc/testsuite/gcc.target/i386/avx5124vnniw-vp4dpwssds-1.c
  925a068450d57f20740e5ce6e8fe217e  gcc/testsuite/gcc.target/i386/avx5124vnniw-vp4dpwssds-2.c
+ c1f9073502666ca9099f0b4f0e5e680a  gcc/testsuite/gcc.target/i386/avx512bf16-cvtsbh2ss-1.c
  964a5f2a2c89b83533b2be720732ccd6  gcc/testsuite/gcc.target/i386/avx512bf16-vcvtne2ps2bf16-1.c
  80660c3a1129515840c1c9e263211f06  gcc/testsuite/gcc.target/i386/avx512bf16-vcvtneps2bf16-1.c
+ 85f9fe6854d98f374a63df40394fb8cd  gcc/testsuite/gcc.target/i386/avx512bf16-vcvtpbh2ps-1.c
  63e7956c8ca198ce2181d80ed229bbbb  gcc/testsuite/gcc.target/i386/avx512bf16-vdpbf16ps-1.c
  df6e4022dfad9e000020611638b05fdd  gcc/testsuite/gcc.target/i386/avx512bf16-vdpbf16ps-2.c
+ da8171416799b80449528405a6388d08  gcc/testsuite/gcc.target/i386/avx512bf16vl-cvtness2sbh-1.c
  f877c7aff68980a873311e9e3029ab4e  gcc/testsuite/gcc.target/i386/avx512bf16vl-vcvtne2ps2bf16-1.c
  334659570f347a4b03cf37336321aa2c  gcc/testsuite/gcc.target/i386/avx512bf16vl-vcvtneps2bf16-1.c
+ 3df523677ab1d5b0815a28ada548ad0f  gcc/testsuite/gcc.target/i386/avx512bf16vl-vcvtpbh2ps-1.c
  4d0bcbe3e5ed908d180434ef26bd4a3a  gcc/testsuite/gcc.target/i386/avx512bf16vl-vdpbf16ps-1.c
! 1c17eded698566bf1d33a8808168935d  gcc/testsuite/gcc.target/i386/avx512bitalg-pr97770-1.c
  84a11e540e8533df61152a30c873a575  gcc/testsuite/gcc.target/i386/avx512bitalg-vpopcntb-1.c
  d728d0693656bb9b505f505356762d3c  gcc/testsuite/gcc.target/i386/avx512bitalg-vpopcntb.c
  7f84f82c7512e69110cd9ace71cf5f78  gcc/testsuite/gcc.target/i386/avx512bitalg-vpopcntbvl.c
*************** c72add6d291b707951ee1d66088d7cc2  gcc/te
*** 59307,59318 ****
  de9ce5efe88acd77018d22a7dcdb9493  gcc/testsuite/gcc.target/i386/avx512bw-kxord-1.c
  6c302267f8ed92e29f0d59629f0eec4f  gcc/testsuite/gcc.target/i386/avx512bw-kxorq-1.c
  bce67b236520c561f93006d5bd66eea1  gcc/testsuite/gcc.target/i386/avx512bw-pack-2.c
  2d319ef27177a5dd5161f6c501d73c11  gcc/testsuite/gcc.target/i386/avx512bw-pr70329-1.c
  2578aaea4945a191c1767c5b6ebde5b2  gcc/testsuite/gcc.target/i386/avx512bw-pr70329-2.c
  923b4b67baacfc2aedf431c5989f2d6e  gcc/testsuite/gcc.target/i386/avx512bw-pr70509.c
  acddcdfbf1c37bd8a7c7778c2c6eeea1  gcc/testsuite/gcc.target/i386/avx512bw-pr77476.c
  ffec4a64d5bec8eab2e840379041cd7c  gcc/testsuite/gcc.target/i386/avx512bw-pr81532.c
! 4401d93befa4f9d4a40e4098a598ea7d  gcc/testsuite/gcc.target/i386/avx512bw-pr82370.c
  a27fb111df1b083f6396bafe5a66337b  gcc/testsuite/gcc.target/i386/avx512bw-pr84524.c
  64fd03d0f45cae1320ecd289072fafc7  gcc/testsuite/gcc.target/i386/avx512bw-pr85090-2.c
  e35d933dd19222a47493fe48e2676f39  gcc/testsuite/gcc.target/i386/avx512bw-pr85090-3.c
--- 61924,61942 ----
  de9ce5efe88acd77018d22a7dcdb9493  gcc/testsuite/gcc.target/i386/avx512bw-kxord-1.c
  6c302267f8ed92e29f0d59629f0eec4f  gcc/testsuite/gcc.target/i386/avx512bw-kxorq-1.c
  bce67b236520c561f93006d5bd66eea1  gcc/testsuite/gcc.target/i386/avx512bw-pack-2.c
+ 3f89e05f12e6b21ca97cf02184351639  gcc/testsuite/gcc.target/i386/avx512bw-pr100267-1.c
+ 0bc7bf24e360d39661eccfc27dd3bdf8  gcc/testsuite/gcc.target/i386/avx512bw-pr100267-b-2.c
+ f647d36b7701e4997d1256eb0c4cb741  gcc/testsuite/gcc.target/i386/avx512bw-pr100267-d-2.c
+ 6fdcf602650b181e914aaa03a2e18c3a  gcc/testsuite/gcc.target/i386/avx512bw-pr100267-q-2.c
+ 7f067774026be7c71e746d719f34e7be  gcc/testsuite/gcc.target/i386/avx512bw-pr100267-w-2.c
+ 71ac6a04534042bfa057ebce7bc266b4  gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c
+ 2589b43ccc82e972823c4c4f159c2244  gcc/testsuite/gcc.target/i386/avx512bw-pr103750-2.c
  2d319ef27177a5dd5161f6c501d73c11  gcc/testsuite/gcc.target/i386/avx512bw-pr70329-1.c
  2578aaea4945a191c1767c5b6ebde5b2  gcc/testsuite/gcc.target/i386/avx512bw-pr70329-2.c
  923b4b67baacfc2aedf431c5989f2d6e  gcc/testsuite/gcc.target/i386/avx512bw-pr70509.c
  acddcdfbf1c37bd8a7c7778c2c6eeea1  gcc/testsuite/gcc.target/i386/avx512bw-pr77476.c
  ffec4a64d5bec8eab2e840379041cd7c  gcc/testsuite/gcc.target/i386/avx512bw-pr81532.c
! f58659a2eb58922be83ab9a6ae940869  gcc/testsuite/gcc.target/i386/avx512bw-pr82370.c
  a27fb111df1b083f6396bafe5a66337b  gcc/testsuite/gcc.target/i386/avx512bw-pr84524.c
  64fd03d0f45cae1320ecd289072fafc7  gcc/testsuite/gcc.target/i386/avx512bw-pr85090-2.c
  e35d933dd19222a47493fe48e2676f39  gcc/testsuite/gcc.target/i386/avx512bw-pr85090-3.c
*************** e4698cb8823977a5894910b921a979aa  gcc/te
*** 59339,59345 ****
  2f578e3dd41abd30d73bf9e0b3b1e474  gcc/testsuite/gcc.target/i386/avx512bw-pr95488-2.c
  6e566b675df9dfd7f6f79b8615cc780b  gcc/testsuite/gcc.target/i386/avx512bw-pr96891-1.c
  de70add72880f23cd146fbcc12d0c044  gcc/testsuite/gcc.target/i386/avx512bw-pr96906-1.c
! 6511b98e20232b21f118998e100e6429  gcc/testsuite/gcc.target/i386/avx512bw-shiftqihi-constant-1.c
  86d1e2efcab8b345a067e94b7ba2d579  gcc/testsuite/gcc.target/i386/avx512bw-shiftqihi-constant-2.c
  186b4d26f65c47b5b328795efe473c71  gcc/testsuite/gcc.target/i386/avx512bw-vdbpsadbw-1.c
  aa76e419ea439da7ae72280b04d232b8  gcc/testsuite/gcc.target/i386/avx512bw-vdbpsadbw-2.c
--- 61963,61969 ----
  2f578e3dd41abd30d73bf9e0b3b1e474  gcc/testsuite/gcc.target/i386/avx512bw-pr95488-2.c
  6e566b675df9dfd7f6f79b8615cc780b  gcc/testsuite/gcc.target/i386/avx512bw-pr96891-1.c
  de70add72880f23cd146fbcc12d0c044  gcc/testsuite/gcc.target/i386/avx512bw-pr96906-1.c
! 03e6288ecabc420b8cf1f581aa246623  gcc/testsuite/gcc.target/i386/avx512bw-shiftqihi-constant-1.c
  86d1e2efcab8b345a067e94b7ba2d579  gcc/testsuite/gcc.target/i386/avx512bw-shiftqihi-constant-2.c
  186b4d26f65c47b5b328795efe473c71  gcc/testsuite/gcc.target/i386/avx512bw-vdbpsadbw-1.c
  aa76e419ea439da7ae72280b04d232b8  gcc/testsuite/gcc.target/i386/avx512bw-vdbpsadbw-2.c
*************** cd50d653b82c72218798d269f8b09ed6  gcc/te
*** 59398,59406 ****
  ff58674ac01e02619e7fbb42218197ed  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpb-2.c
  526de46f6f9d6a57e8e51767b22ca73e  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpeqb-1.c
  e4564a6c91e83263596c29a118ae7926  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpeqb-2.c
! fe04b841e165c497fa1add10e40d93fc  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpequb-1.c
  f853eacd6fe074b010b1801018250a8f  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpequb-2.c
! 09fd5c97209cceb05c17b2b183ef5a42  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpequw-1.c
  88dc1d6c8ed0352288da53e0827c70d6  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpequw-2.c
  c76a3a98049ddbad93f81bce1cc34eb5  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpeqw-1.c
  7c737ac83456e4e67434edc27247375f  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpeqw-2.c
--- 62022,62030 ----
  ff58674ac01e02619e7fbb42218197ed  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpb-2.c
  526de46f6f9d6a57e8e51767b22ca73e  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpeqb-1.c
  e4564a6c91e83263596c29a118ae7926  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpeqb-2.c
! c723f4f85c6032698d16dda4a289a4c7  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpequb-1.c
  f853eacd6fe074b010b1801018250a8f  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpequb-2.c
! 9e29ec22f88a261d876a694cdab5ffea  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpequw-1.c
  88dc1d6c8ed0352288da53e0827c70d6  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpequw-2.c
  c76a3a98049ddbad93f81bce1cc34eb5  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpeqw-1.c
  7c737ac83456e4e67434edc27247375f  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpeqw-2.c
*************** eb2d9a728125165e33668488f8537623  gcc/te
*** 59444,59452 ****
  306b00a58b1f3f358da2fc093ce27ae1  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpnequw-2.c
  a88b44ed8b499572661bf13c5e83a0b1  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpneqw-1.c
  5f7a1b19066291003f40cb3cebffe750  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpneqw-2.c
! 123d1eb8b1089a56cc4d956d6dd64fb0  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpub-1.c
  8c151290624d1563aad645f057a554f1  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpub-2.c
! 93c98560274c7ef4b7b1faed1ccf3ec0  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpuw-1.c
  954b0a84c42b39482b89b0506867efe1  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpuw-2.c
  8ddb3c88b8d23236798db3082e44d4a8  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpw-1.c
  8932439ef47d9fd6ccc11187519b5396  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpw-2.c
--- 62068,62076 ----
  306b00a58b1f3f358da2fc093ce27ae1  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpnequw-2.c
  a88b44ed8b499572661bf13c5e83a0b1  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpneqw-1.c
  5f7a1b19066291003f40cb3cebffe750  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpneqw-2.c
! 0c5d436c36b160e96940a0ed5156068a  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpub-1.c
  8c151290624d1563aad645f057a554f1  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpub-2.c
! c153e1069c3dada49b7f9da180f67758  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpuw-1.c
  954b0a84c42b39482b89b0506867efe1  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpuw-2.c
  8ddb3c88b8d23236798db3082e44d4a8  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpw-1.c
  8932439ef47d9fd6ccc11187519b5396  gcc/testsuite/gcc.target/i386/avx512bw-vpcmpw-2.c
*************** caa78c95a89c818b1aea4afba2946f09  gcc/te
*** 59575,59584 ****
  521175030ea7840f7a72e1f43808a311  gcc/testsuite/gcc.target/i386/avx512cd-vplzcntd-2.c
  c557e65b3da6daa7ab3922c783352372  gcc/testsuite/gcc.target/i386/avx512cd-vplzcntq-1.c
  942e643c141906aa62c90809e9e0e279  gcc/testsuite/gcc.target/i386/avx512cd-vplzcntq-2.c
! 01c2454d423ce63b5c4473dd0a8a8231  gcc/testsuite/gcc.target/i386/avx512dq-abs-copysign-1.c
  d71061bda865f7d6e210825e8be8c9b2  gcc/testsuite/gcc.target/i386/avx512dq-check.h
  b24af0ec73e5059fe5c5a4e5e72245fe  gcc/testsuite/gcc.target/i386/avx512dq-concatv2di-1.c
  2ea23cac0240a4e6291d19e092e97085  gcc/testsuite/gcc.target/i386/avx512dq-concatv2si-1.c
  81d19af2e47db979a4a09153c9d11b15  gcc/testsuite/gcc.target/i386/avx512dq-kaddb-1.c
  f9309a4f0009270a5be2ed3e55841186  gcc/testsuite/gcc.target/i386/avx512dq-kaddw-1.c
  da21fba9f364fff466ac9aa0b1c9af36  gcc/testsuite/gcc.target/i386/avx512dq-kandb-1.c
--- 62199,62209 ----
  521175030ea7840f7a72e1f43808a311  gcc/testsuite/gcc.target/i386/avx512cd-vplzcntd-2.c
  c557e65b3da6daa7ab3922c783352372  gcc/testsuite/gcc.target/i386/avx512cd-vplzcntq-1.c
  942e643c141906aa62c90809e9e0e279  gcc/testsuite/gcc.target/i386/avx512cd-vplzcntq-2.c
! b0adfb9446386fabce01e1d52f6ac753  gcc/testsuite/gcc.target/i386/avx512dq-abs-copysign-1.c
  d71061bda865f7d6e210825e8be8c9b2  gcc/testsuite/gcc.target/i386/avx512dq-check.h
  b24af0ec73e5059fe5c5a4e5e72245fe  gcc/testsuite/gcc.target/i386/avx512dq-concatv2di-1.c
  2ea23cac0240a4e6291d19e092e97085  gcc/testsuite/gcc.target/i386/avx512dq-concatv2si-1.c
+ 75caabd80371bee809874c605a23ef96  gcc/testsuite/gcc.target/i386/avx512dq-dest-false-dep-for-glc.c
  81d19af2e47db979a4a09153c9d11b15  gcc/testsuite/gcc.target/i386/avx512dq-kaddb-1.c
  f9309a4f0009270a5be2ed3e55841186  gcc/testsuite/gcc.target/i386/avx512dq-kaddw-1.c
  da21fba9f364fff466ac9aa0b1c9af36  gcc/testsuite/gcc.target/i386/avx512dq-kandb-1.c
*************** f5ad8999490aefec59caba35c52c8ca8  gcc/te
*** 59740,59748 ****
  576f3eb877125320c138b2fa28755f75  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28pd-2.c
  abb56706ab0726d30e28300ef79aa60d  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28ps-1.c
  ed3d90dbe58b8809b57c676f74ba1f79  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28ps-2.c
! 3198e6b410fe9304239d1d60cadc03d4  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28ps-3.c
  159cfafc29392f77a8739fe68a0b09ab  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28ps-4.c
! 4f3f83e497985e70c2773d86ad15f940  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28ps-5.c
  4e3e9759fa00ea5280852a728e03dfbe  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28ps-6.c
  d75a6f1ef70ad3aacf0b532d1fa862fc  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28sd-1.c
  9770ef153809418a1c49ecf0b82ecd58  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28sd-2.c
--- 62365,62373 ----
  576f3eb877125320c138b2fa28755f75  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28pd-2.c
  abb56706ab0726d30e28300ef79aa60d  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28ps-1.c
  ed3d90dbe58b8809b57c676f74ba1f79  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28ps-2.c
! 1a5ee4fd35367a786cd3075c169817c7  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28ps-3.c
  159cfafc29392f77a8739fe68a0b09ab  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28ps-4.c
! 5b61bffa07458921675f2da31d85cd98  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28ps-5.c
  4e3e9759fa00ea5280852a728e03dfbe  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28ps-6.c
  d75a6f1ef70ad3aacf0b532d1fa862fc  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28sd-1.c
  9770ef153809418a1c49ecf0b82ecd58  gcc/testsuite/gcc.target/i386/avx512er-vrsqrt28sd-2.c
*************** e6a2d08517354a6475d26db37dba85e2  gcc/te
*** 59784,59794 ****
  d63ad896d9c758712bf90d6dc9341750  gcc/testsuite/gcc.target/i386/avx512f-andn-si-zmm-5.c
  ac444822bf41eda8ff9b0517ed627613  gcc/testsuite/gcc.target/i386/avx512f-broadcast-gpr-1.c
  c88d598d6edb7c0c743c1dc16a2cc16d  gcc/testsuite/gcc.target/i386/avx512f-broadcast-gpr-2.c
! 23be9e8133860048ade159bc933237fa  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-1.c
  08373bd09639bc64a0bddd2ddc47768f  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-2.c
  420e8ef015f38e0bec7301c54807220e  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-3.c
  a9d7eae800fa77dbac9b5164b17093c5  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-4.c
! 030724c6b5e0989fd535694537b3a82b  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-5.c
  0e1564775717bbc2a1b1b34d11aa25e2  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-6.c
  eccc7d9eecbe7f20dcc6e4a7e5c5c15a  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-7.c
  d6d82e1f94a08c07c77189274e3051de  gcc/testsuite/gcc.target/i386/avx512f-ceil-sfix-vec-1.c
--- 62409,62419 ----
  d63ad896d9c758712bf90d6dc9341750  gcc/testsuite/gcc.target/i386/avx512f-andn-si-zmm-5.c
  ac444822bf41eda8ff9b0517ed627613  gcc/testsuite/gcc.target/i386/avx512f-broadcast-gpr-1.c
  c88d598d6edb7c0c743c1dc16a2cc16d  gcc/testsuite/gcc.target/i386/avx512f-broadcast-gpr-2.c
! 66c451d88ce9132977227c7ba2971b27  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-1.c
  08373bd09639bc64a0bddd2ddc47768f  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-2.c
  420e8ef015f38e0bec7301c54807220e  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-3.c
  a9d7eae800fa77dbac9b5164b17093c5  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-4.c
! 145d385c34547cbbb412be00d98c8227  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-5.c
  0e1564775717bbc2a1b1b34d11aa25e2  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-6.c
  eccc7d9eecbe7f20dcc6e4a7e5c5c15a  gcc/testsuite/gcc.target/i386/avx512f-broadcast-pr87767-7.c
  d6d82e1f94a08c07c77189274e3051de  gcc/testsuite/gcc.target/i386/avx512f-ceil-sfix-vec-1.c
*************** cdb325d7797efd888176d6a35fedf7fe  gcc/te
*** 59805,59810 ****
--- 62430,62436 ----
  f87a131592c4947fafb6dc93f2da20e6  gcc/testsuite/gcc.target/i386/avx512f-cvt-1.c
  64f178993bcb5b745f68c3b782f8605e  gcc/testsuite/gcc.target/i386/avx512f-cvtsd-1.c
  1a0c742ccf81b9a3980e6819cc48fb69  gcc/testsuite/gcc.target/i386/avx512f-cvtss-1.c
+ c5c4b532f8e9dabc2ae5d555cbc88b4b  gcc/testsuite/gcc.target/i386/avx512f-dest-false-dep-for-glc.c
  27a29e27b8e4594212c0df685a312f07  gcc/testsuite/gcc.target/i386/avx512f-div-df-zmm-1.c
  6ea84a48bc98f16e4e183e13edf2aaf0  gcc/testsuite/gcc.target/i386/avx512f-div-sf-zmm-1.c
  67ca9e9ba1bb1279dbf0ec1d370411f0  gcc/testsuite/gcc.target/i386/avx512f-div-sf-zmm-2.c
*************** c0dd86eaa0095c2b38908928d5034cf3  gcc/te
*** 59937,59944 ****
--- 62563,62577 ----
  d787a0a2840b56339d3621983623b18d  gcc/testsuite/gcc.target/i386/avx512f-or-si-zmm-5.c
  d35963959d5b010c3b26b967f48d3608  gcc/testsuite/gcc.target/i386/avx512f-or-si-zmm-6.c
  17acbefd47a510ed96d83a23e3e4b8c3  gcc/testsuite/gcc.target/i386/avx512f-os-support.h
+ 3914b6d25111ca6ae59285960acf2a38  gcc/testsuite/gcc.target/i386/avx512f-pr100267-1.c
+ 96968590e0e38d8ab07a46aa232aaa22  gcc/testsuite/gcc.target/i386/avx512f-pr100267-pd-2.c
+ f52100c2d13572e0728cca2f85b0fcde  gcc/testsuite/gcc.target/i386/avx512f-pr100267-ps-2.c
  7371abf8df649ac78965cd397d5f5a42  gcc/testsuite/gcc.target/i386/avx512f-pr101471.c
  9bceffe4e050aeec5dfd5c8013709ffe  gcc/testsuite/gcc.target/i386/avx512f-pr101472.c
+ dc7877a60c094039a172aa23afb1e37c  gcc/testsuite/gcc.target/i386/avx512f-pr101860.c
+ 45a98ac2d84ae154c61e3e1ce84c17eb  gcc/testsuite/gcc.target/i386/avx512f-pr101896.c
+ ce0cad9f4c5da96b0d07d2029604250c  gcc/testsuite/gcc.target/i386/avx512f-pr103750-1.c
+ 1d9114b974ef8241068b2ece25e00b2e  gcc/testsuite/gcc.target/i386/avx512f-pr103750-2.c
  88877c518076ecdec1dba128743ad627  gcc/testsuite/gcc.target/i386/avx512f-pr57233.c
  0272e0fc54cb34ee03db4b0027dbec3d  gcc/testsuite/gcc.target/i386/avx512f-pr63594-1.c
  381f53de01f1e9893e6903d9fac40b87  gcc/testsuite/gcc.target/i386/avx512f-pr63594-2.c
*************** e97c0c19cafc88b7e3701f64c4ee5e2f  gcc/te
*** 59946,59953 ****
  d3690c9abdc1f96ff5183a85ab642fc8  gcc/testsuite/gcc.target/i386/avx512f-pr70421.c
  6e6bc8c575f27f1c5ce1f9d096b7fa0f  gcc/testsuite/gcc.target/i386/avx512f-pr71559.c
  f536b3eaf7c592092d8cabbb3c2d0021  gcc/testsuite/gcc.target/i386/avx512f-pr77476.c
  b33ad4c59a3cd208bc4836cc2b65670f  gcc/testsuite/gcc.target/i386/avx512f-pr80846.c
! a389c34992756249345d609dbb6fce3a  gcc/testsuite/gcc.target/i386/avx512f-pr82370.c
  c69b4f4162e99276afbc48fc71fa5e0e  gcc/testsuite/gcc.target/i386/avx512f-pr84786-1.c
  87e3c7e4634e5b7f65c2077102f502cb  gcc/testsuite/gcc.target/i386/avx512f-pr84786-2.c
  94a22888479288823ac9d596b6c017ab  gcc/testsuite/gcc.target/i386/avx512f-pr84786-3.c
--- 62579,62588 ----
  d3690c9abdc1f96ff5183a85ab642fc8  gcc/testsuite/gcc.target/i386/avx512f-pr70421.c
  6e6bc8c575f27f1c5ce1f9d096b7fa0f  gcc/testsuite/gcc.target/i386/avx512f-pr71559.c
  f536b3eaf7c592092d8cabbb3c2d0021  gcc/testsuite/gcc.target/i386/avx512f-pr77476.c
+ c59519ba8d76cb2dc64ca97fffec32fa  gcc/testsuite/gcc.target/i386/avx512f-pr80355-1.c
+ e1fc809f4488e3b07fed620d14020719  gcc/testsuite/gcc.target/i386/avx512f-pr80355-2.c
  b33ad4c59a3cd208bc4836cc2b65670f  gcc/testsuite/gcc.target/i386/avx512f-pr80846.c
! 0bb25ec775ae556a3e0e4a9d2c89d924  gcc/testsuite/gcc.target/i386/avx512f-pr82370.c
  c69b4f4162e99276afbc48fc71fa5e0e  gcc/testsuite/gcc.target/i386/avx512f-pr84786-1.c
  87e3c7e4634e5b7f65c2077102f502cb  gcc/testsuite/gcc.target/i386/avx512f-pr84786-2.c
  94a22888479288823ac9d596b6c017ab  gcc/testsuite/gcc.target/i386/avx512f-pr84786-3.c
*************** cf8d8483e8f8c207b3c3ece46a4e37a0  gcc/te
*** 59976,59987 ****
  d02e54fef14f48afcc720ef0004da5fa  gcc/testsuite/gcc.target/i386/avx512f-pr93673.c
  f5e4ec9ac91161d240ce6224588d20f2  gcc/testsuite/gcc.target/i386/avx512f-pr94300.c
  0ec29bad25960f18650afa1c9967c8eb  gcc/testsuite/gcc.target/i386/avx512f-pr94343.c
  e8f35ad1e1d70a5ae1b7c2ef55189246  gcc/testsuite/gcc.target/i386/avx512f-pr95060.c
  c64f8e63f9233fd8382fefc82e756df8  gcc/testsuite/gcc.target/i386/avx512f-pr96551-1.c
  16bf42a7e25dd411c2d2ddf3f97a9355  gcc/testsuite/gcc.target/i386/avx512f-pr96551-2.c
  101567d8311eb033b484672276e3605e  gcc/testsuite/gcc.target/i386/avx512f-pr96891-1.c
  04ed0383683cf0e2698125d407090ab7  gcc/testsuite/gcc.target/i386/avx512f-pr96891-2.c
! f279a380570a112a4e4bbf112ae48747  gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c
  23ad5d665df88571c33627be5c844324  gcc/testsuite/gcc.target/i386/avx512f-pr97028.c
  c03d8cf4fa3fd17be806ad4e6adc4bca  gcc/testsuite/gcc.target/i386/avx512f-prefer.c
  fa779c05cab9a2378601e3ad5ae642ef  gcc/testsuite/gcc.target/i386/avx512f-reduce-op-1.c
--- 62611,62623 ----
  d02e54fef14f48afcc720ef0004da5fa  gcc/testsuite/gcc.target/i386/avx512f-pr93673.c
  f5e4ec9ac91161d240ce6224588d20f2  gcc/testsuite/gcc.target/i386/avx512f-pr94300.c
  0ec29bad25960f18650afa1c9967c8eb  gcc/testsuite/gcc.target/i386/avx512f-pr94343.c
+ 7c7b0022aa2447b93594f11187229ce8  gcc/testsuite/gcc.target/i386/avx512f-pr94680.c
  e8f35ad1e1d70a5ae1b7c2ef55189246  gcc/testsuite/gcc.target/i386/avx512f-pr95060.c
  c64f8e63f9233fd8382fefc82e756df8  gcc/testsuite/gcc.target/i386/avx512f-pr96551-1.c
  16bf42a7e25dd411c2d2ddf3f97a9355  gcc/testsuite/gcc.target/i386/avx512f-pr96551-2.c
  101567d8311eb033b484672276e3605e  gcc/testsuite/gcc.target/i386/avx512f-pr96891-1.c
  04ed0383683cf0e2698125d407090ab7  gcc/testsuite/gcc.target/i386/avx512f-pr96891-2.c
! d78e3457ea49412fb5342c9d2fc4b516  gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c
  23ad5d665df88571c33627be5c844324  gcc/testsuite/gcc.target/i386/avx512f-pr97028.c
  c03d8cf4fa3fd17be806ad4e6adc4bca  gcc/testsuite/gcc.target/i386/avx512f-prefer.c
  fa779c05cab9a2378601e3ad5ae642ef  gcc/testsuite/gcc.target/i386/avx512f-reduce-op-1.c
*************** b5e4cd18a2247fe8c73f3ec6f8f9beb7  gcc/te
*** 60187,60194 ****
--- 62823,62835 ----
  708c12de1370a83a2980fb98a399a5d1  gcc/testsuite/gcc.target/i386/avx512f-vec-init.c
  53ee450644f8170f381cf40eb5ef85fe  gcc/testsuite/gcc.target/i386/avx512f-vec-set-2.c
  0cac8e1e01a7b0e7c1e81c1fa3676acb  gcc/testsuite/gcc.target/i386/avx512f-vec-unpack.c
+ 44f99bcaccd5e7e590676abb96268078  gcc/testsuite/gcc.target/i386/avx512f-vect-fmaddsubXXXpd.c
+ 9ec671949531bc4d3d3c8417ef38f144  gcc/testsuite/gcc.target/i386/avx512f-vect-fmaddsubXXXps.c
+ f3e471e75f3dce472af5e45973930eb4  gcc/testsuite/gcc.target/i386/avx512f-vect-fmsubaddXXXpd.c
+ f2328b4b9bec3539fe7a8edf1c41f6fb  gcc/testsuite/gcc.target/i386/avx512f-vect-fmsubaddXXXps.c
  aad59cde1da67f91dcaf200225242b6a  gcc/testsuite/gcc.target/i386/avx512f-vect-perm-1.c
  b69783ae8c604afd50edd08d70d106e0  gcc/testsuite/gcc.target/i386/avx512f-vect-perm-2.c
+ 03b9480b3206c24de8802dd795e0c58e  gcc/testsuite/gcc.target/i386/avx512f-vect-rebuild.c
  5f38cf2f2a3f2868982bacd044e07bfb  gcc/testsuite/gcc.target/i386/avx512f-vect-simd-10.c
  e4184b0ed7137d40b72195be4213604f  gcc/testsuite/gcc.target/i386/avx512f-vect-simd-12.c
  f5d94c3c29a4b64ea841b6119770f740  gcc/testsuite/gcc.target/i386/avx512f-vect-simd-13.c
*************** ca3cbe4bf0bd33e5b9a8b91834012346  gcc/te
*** 60388,60396 ****
  d6853934ff8391c6aea8eb369fbb6d41  gcc/testsuite/gcc.target/i386/avx512f-vpcmpeqd-2.c
  5004fd492cca60d7446526871b902c7b  gcc/testsuite/gcc.target/i386/avx512f-vpcmpeqq-1.c
  ffb2026db54e7bf1c7db73db940cfe40  gcc/testsuite/gcc.target/i386/avx512f-vpcmpeqq-2.c
! cfad7eacf0edede4161756346343678f  gcc/testsuite/gcc.target/i386/avx512f-vpcmpequd-1.c
  a7ed0687d14f918e7b2a28126dd1564e  gcc/testsuite/gcc.target/i386/avx512f-vpcmpequd-2.c
! c2aeaedadce55f291ea5153d4e33a1af  gcc/testsuite/gcc.target/i386/avx512f-vpcmpequq-1.c
  0c6de1bdf6c1b0f7e67855ffa54f7d45  gcc/testsuite/gcc.target/i386/avx512f-vpcmpequq-2.c
  c70fba917004f7aa3e3da8968495d597  gcc/testsuite/gcc.target/i386/avx512f-vpcmpged-1.c
  02968ca0040ede699f9da757f4b3aa12  gcc/testsuite/gcc.target/i386/avx512f-vpcmpged-2.c
--- 63029,63037 ----
  d6853934ff8391c6aea8eb369fbb6d41  gcc/testsuite/gcc.target/i386/avx512f-vpcmpeqd-2.c
  5004fd492cca60d7446526871b902c7b  gcc/testsuite/gcc.target/i386/avx512f-vpcmpeqq-1.c
  ffb2026db54e7bf1c7db73db940cfe40  gcc/testsuite/gcc.target/i386/avx512f-vpcmpeqq-2.c
! 868d105f114147b76ec8a490642e1e5e  gcc/testsuite/gcc.target/i386/avx512f-vpcmpequd-1.c
  a7ed0687d14f918e7b2a28126dd1564e  gcc/testsuite/gcc.target/i386/avx512f-vpcmpequd-2.c
! 8200d3dd2772196ad8cf4e498de2a419  gcc/testsuite/gcc.target/i386/avx512f-vpcmpequq-1.c
  0c6de1bdf6c1b0f7e67855ffa54f7d45  gcc/testsuite/gcc.target/i386/avx512f-vpcmpequq-2.c
  c70fba917004f7aa3e3da8968495d597  gcc/testsuite/gcc.target/i386/avx512f-vpcmpged-1.c
  02968ca0040ede699f9da757f4b3aa12  gcc/testsuite/gcc.target/i386/avx512f-vpcmpged-2.c
*************** db64ecaf7ddaaef749bc26f50af7e3bc  gcc/te
*** 60434,60440 ****
  1b0d562e1bdce1d648a306f10df08d5a  gcc/testsuite/gcc.target/i386/avx512f-vpcmpnequq-2.c
  944d48d463ecd817610cf5b0b76d9dfa  gcc/testsuite/gcc.target/i386/avx512f-vpcmpq-1.c
  9e3d3a9f66d739098528a6e45d8c9b3e  gcc/testsuite/gcc.target/i386/avx512f-vpcmpq-2.c
! 98a9de39acc42bb62dec9879ad7888d9  gcc/testsuite/gcc.target/i386/avx512f-vpcmpud-1.c
  168050657750b10d1ebfeaae01fe19da  gcc/testsuite/gcc.target/i386/avx512f-vpcmpud-2.c
  9818d935e35295611c375d42862183bb  gcc/testsuite/gcc.target/i386/avx512f-vpcmpuq-1.c
  c7a149a80b76351d66c8c6d26298bece  gcc/testsuite/gcc.target/i386/avx512f-vpcmpuq-2.c
--- 63075,63081 ----
  1b0d562e1bdce1d648a306f10df08d5a  gcc/testsuite/gcc.target/i386/avx512f-vpcmpnequq-2.c
  944d48d463ecd817610cf5b0b76d9dfa  gcc/testsuite/gcc.target/i386/avx512f-vpcmpq-1.c
  9e3d3a9f66d739098528a6e45d8c9b3e  gcc/testsuite/gcc.target/i386/avx512f-vpcmpq-2.c
! a6451c4914c5e548ed0b6b1e89bc6f14  gcc/testsuite/gcc.target/i386/avx512f-vpcmpud-1.c
  168050657750b10d1ebfeaae01fe19da  gcc/testsuite/gcc.target/i386/avx512f-vpcmpud-2.c
  9818d935e35295611c375d42862183bb  gcc/testsuite/gcc.target/i386/avx512f-vpcmpuq-1.c
  c7a149a80b76351d66c8c6d26298bece  gcc/testsuite/gcc.target/i386/avx512f-vpcmpuq-2.c
*************** dff3bcbdc5c72bff2297edf69e367b9b  gcc/te
*** 60651,60659 ****
  0e3db0c2e3543f0ab5e9fd64851c5184  gcc/testsuite/gcc.target/i386/avx512f-vpsubd-2.c
  81a084d0db763dfe4ad1c79c5d8ea71e  gcc/testsuite/gcc.target/i386/avx512f-vpsubq-1.c
  892a78a2f463c2ae63c197a54d890edd  gcc/testsuite/gcc.target/i386/avx512f-vpsubq-2.c
! cf484e10c9b482b9d3764e9f43d3df79  gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-1.c
  f70753b812e1ff98107528aed14bde25  gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-2.c
! dbc1aed34cef5c546edfbe93a68d68db  gcc/testsuite/gcc.target/i386/avx512f-vpternlogq-1.c
  cca6985677715d67c7087a72745dfe41  gcc/testsuite/gcc.target/i386/avx512f-vpternlogq-2.c
  9108d53dbbe9829997fdb1b42c0e814e  gcc/testsuite/gcc.target/i386/avx512f-vptestmd-1.c
  3abaed9f3f815175a2e983a5f05c9111  gcc/testsuite/gcc.target/i386/avx512f-vptestmd-2.c
--- 63292,63300 ----
  0e3db0c2e3543f0ab5e9fd64851c5184  gcc/testsuite/gcc.target/i386/avx512f-vpsubd-2.c
  81a084d0db763dfe4ad1c79c5d8ea71e  gcc/testsuite/gcc.target/i386/avx512f-vpsubq-1.c
  892a78a2f463c2ae63c197a54d890edd  gcc/testsuite/gcc.target/i386/avx512f-vpsubq-2.c
! f8a285d83696c3e9e55962974cebead5  gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-1.c
  f70753b812e1ff98107528aed14bde25  gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-2.c
! d130f0f046cc5d4bf221ef52c44e4cb4  gcc/testsuite/gcc.target/i386/avx512f-vpternlogq-1.c
  cca6985677715d67c7087a72745dfe41  gcc/testsuite/gcc.target/i386/avx512f-vpternlogq-2.c
  9108d53dbbe9829997fdb1b42c0e814e  gcc/testsuite/gcc.target/i386/avx512f-vptestmd-1.c
  3abaed9f3f815175a2e983a5f05c9111  gcc/testsuite/gcc.target/i386/avx512f-vptestmd-2.c
*************** e69fd8a857aa88aae6eb67b874be41ae  gcc/te
*** 60715,60723 ****
  5fdeec3fa561d9754541e035a67a2c11  gcc/testsuite/gcc.target/i386/avx512f-vshufi32x4-2.c
  29129b1349784c4f59fb70c3cd531e6d  gcc/testsuite/gcc.target/i386/avx512f-vshufi64x2-1.c
  f73e390b2a29655c47f41cfd239ba3da  gcc/testsuite/gcc.target/i386/avx512f-vshufi64x2-2.c
! acfd8c8fcf5c4817216a6fb3aadebc33  gcc/testsuite/gcc.target/i386/avx512f-vshufpd-1.c
  c1f6d7e2cd67c3bba5824b91bc6d0c22  gcc/testsuite/gcc.target/i386/avx512f-vshufpd-2.c
! 48ec93ac9c409dddb145fa9835027b2a  gcc/testsuite/gcc.target/i386/avx512f-vshufps-1.c
  efcdf057857efc07df3410f94af10a1b  gcc/testsuite/gcc.target/i386/avx512f-vshufps-2.c
  528170c717d4d779b0a7d2a11eba0b2a  gcc/testsuite/gcc.target/i386/avx512f-vsqrtpd-1.c
  a30a6389dea3f18bf4b9db15afb47dbf  gcc/testsuite/gcc.target/i386/avx512f-vsqrtpd-2.c
--- 63356,63364 ----
  5fdeec3fa561d9754541e035a67a2c11  gcc/testsuite/gcc.target/i386/avx512f-vshufi32x4-2.c
  29129b1349784c4f59fb70c3cd531e6d  gcc/testsuite/gcc.target/i386/avx512f-vshufi64x2-1.c
  f73e390b2a29655c47f41cfd239ba3da  gcc/testsuite/gcc.target/i386/avx512f-vshufi64x2-2.c
! 93cd9452bf4601aee0b7ed58ae0aaf8b  gcc/testsuite/gcc.target/i386/avx512f-vshufpd-1.c
  c1f6d7e2cd67c3bba5824b91bc6d0c22  gcc/testsuite/gcc.target/i386/avx512f-vshufpd-2.c
! 7f15666597b9ed0ef6825d804cb3129f  gcc/testsuite/gcc.target/i386/avx512f-vshufps-1.c
  efcdf057857efc07df3410f94af10a1b  gcc/testsuite/gcc.target/i386/avx512f-vshufps-2.c
  528170c717d4d779b0a7d2a11eba0b2a  gcc/testsuite/gcc.target/i386/avx512f-vsqrtpd-1.c
  a30a6389dea3f18bf4b9db15afb47dbf  gcc/testsuite/gcc.target/i386/avx512f-vsqrtpd-2.c
*************** f84251aa8768cd6b81ffe219261cdac3  gcc/te
*** 60754,60762 ****
  17e155d0a57e6e3caedfe8c7e0de6350  gcc/testsuite/gcc.target/i386/avx512f-xor-si-zmm-4.c
  e465f9e23eed3f47ce4738de3a499630  gcc/testsuite/gcc.target/i386/avx512f-xor-si-zmm-5.c
  bd345afb9ab5c80981d21fb74ec70404  gcc/testsuite/gcc.target/i386/avx512f-xor-si-zmm-6.c
! 536ed0a77fad8e6d689dd691c9f66eea  gcc/testsuite/gcc.target/i386/avx512f_cond_move.c
  5df18e05d0e78145ad28948df7f01c93  gcc/testsuite/gcc.target/i386/avx512f_evex_reg_asm-1.c
  57924217470838a4212303a01c9f8b5d  gcc/testsuite/gcc.target/i386/avx512f_evex_reg_asm-2.c
  bec6be257618e9cc911be966efb2ab8a  gcc/testsuite/gcc.target/i386/avx512fvl-vaes-1.c
  7ca8f53ddb06d28b1ffcae13894efb3e  gcc/testsuite/gcc.target/i386/avx512ifma-vpmaddhuq-1.c
  ae1ccb7e2041f3482999d81701ee97ed  gcc/testsuite/gcc.target/i386/avx512ifma-vpmaddhuq-2.c
--- 63395,63777 ----
  17e155d0a57e6e3caedfe8c7e0de6350  gcc/testsuite/gcc.target/i386/avx512f-xor-si-zmm-4.c
  e465f9e23eed3f47ce4738de3a499630  gcc/testsuite/gcc.target/i386/avx512f-xor-si-zmm-5.c
  bd345afb9ab5c80981d21fb74ec70404  gcc/testsuite/gcc.target/i386/avx512f-xor-si-zmm-6.c
! 8c6b0df2a8a160fc3660350f386f1036  gcc/testsuite/gcc.target/i386/avx512f_cond_move.c
  5df18e05d0e78145ad28948df7f01c93  gcc/testsuite/gcc.target/i386/avx512f_evex_reg_asm-1.c
  57924217470838a4212303a01c9f8b5d  gcc/testsuite/gcc.target/i386/avx512f_evex_reg_asm-2.c
+ 94bcc753fbe9ed0156fa438d9f5b3347  gcc/testsuite/gcc.target/i386/avx512fp16-10a.c
+ 43abcf27567a0f3189ad9cbd242c1ddc  gcc/testsuite/gcc.target/i386/avx512fp16-10b.c
+ 0ff89b0929add3804f7d6ff2e96ceee0  gcc/testsuite/gcc.target/i386/avx512fp16-11a.c
+ c8546919944aa8e519a6d7c6609e35a2  gcc/testsuite/gcc.target/i386/avx512fp16-11b.c
+ 45998199c9d05373b91b703c489b1dab  gcc/testsuite/gcc.target/i386/avx512fp16-12a.c
+ 14758831e35f6207f1d8a401d5965ad7  gcc/testsuite/gcc.target/i386/avx512fp16-12b.c
+ 862073cfcfba18207943a6a08c3ff107  gcc/testsuite/gcc.target/i386/avx512fp16-13.c
+ 0548680cb90baddc2f4289b1daddf2d7  gcc/testsuite/gcc.target/i386/avx512fp16-14.c
+ 5105733c3744e643e48e7e479046d119  gcc/testsuite/gcc.target/i386/avx512fp16-1a.c
+ e5318fffe1e2b5367902db745c03823d  gcc/testsuite/gcc.target/i386/avx512fp16-1b.c
+ d001e45e400153dbb11a32a6d08d03fa  gcc/testsuite/gcc.target/i386/avx512fp16-1c.c
+ 7a48086cb9ae03680c7537859958c600  gcc/testsuite/gcc.target/i386/avx512fp16-1d.c
+ 169c6efebbac3720f2036d807280f40d  gcc/testsuite/gcc.target/i386/avx512fp16-1e.c
+ 41fd12d2f8faa6b6de87b65dc54fd419  gcc/testsuite/gcc.target/i386/avx512fp16-2a.c
+ 76fa6e2377d57298e2d796301d026da3  gcc/testsuite/gcc.target/i386/avx512fp16-2b.c
+ 1cfe23ac8d5532e53b7a64f8131ac512  gcc/testsuite/gcc.target/i386/avx512fp16-2c.c
+ 2648c1a470e699016fccad29cc3dcbaa  gcc/testsuite/gcc.target/i386/avx512fp16-3a.c
+ 889af049bd9010f2399e3f8bdd551e38  gcc/testsuite/gcc.target/i386/avx512fp16-3b.c
+ 6bd8fb8d3f8334508053e8759e2586d0  gcc/testsuite/gcc.target/i386/avx512fp16-3c.c
+ 6312c51a90aaed80d3886c7f43b7f1b8  gcc/testsuite/gcc.target/i386/avx512fp16-4.c
+ 101c08a4d969227fdb206ab705f485aa  gcc/testsuite/gcc.target/i386/avx512fp16-5.c
+ 9a702f9e241fa493d1108fc603bc1d8e  gcc/testsuite/gcc.target/i386/avx512fp16-6.c
+ ca0f018c6d6395c19ee0d3be7e8879f8  gcc/testsuite/gcc.target/i386/avx512fp16-64-32-vecop-1.c
+ 13ee89c502731ad99e7d5dff6a882390  gcc/testsuite/gcc.target/i386/avx512fp16-64-32-vecop-2.c
+ 37c9515f817c225a3f852c3f47d8264b  gcc/testsuite/gcc.target/i386/avx512fp16-7.c
+ a44636473e98bc4b55c8bd51133893da  gcc/testsuite/gcc.target/i386/avx512fp16-8.c
+ 447b45c01969decbbee566bfdd9fc852  gcc/testsuite/gcc.target/i386/avx512fp16-9a.c
+ 9bcd70e54382f27d62bb6c31949ee01e  gcc/testsuite/gcc.target/i386/avx512fp16-9b.c
+ aee65ea5eafc2805dbfb5fe359814328  gcc/testsuite/gcc.target/i386/avx512fp16-broadcast-1.c
+ b00d04590dae0dee872d01e3439174ee  gcc/testsuite/gcc.target/i386/avx512fp16-broadcast-2.c
+ e79f5471eaed0e7487f965113398d268  gcc/testsuite/gcc.target/i386/avx512fp16-builtin-fpcompare-1.c
+ 22cab6bb0d2c641607fcf909a8cca39b  gcc/testsuite/gcc.target/i386/avx512fp16-builtin-fpcompare-2.c
+ 5565d0dfffe92a159a502ee8fc96ef08  gcc/testsuite/gcc.target/i386/avx512fp16-builtin-minmax-1.c
+ 183194a3d17535033097e0461258bfdd  gcc/testsuite/gcc.target/i386/avx512fp16-builtin-round-1.c
+ 7d142a72bda1319294e9d63cc7c29ac2  gcc/testsuite/gcc.target/i386/avx512fp16-builtin-sqrt-1.c
+ b9ed1e48c2076ab8bd9adfc96519f6d4  gcc/testsuite/gcc.target/i386/avx512fp16-builtin_shuffle-1.c
+ 262fe61d867c3bf99c20653180a2b0e0  gcc/testsuite/gcc.target/i386/avx512fp16-complex-constraints.c
+ b087aa309dcb182d79cfcb79c9dd7901  gcc/testsuite/gcc.target/i386/avx512fp16-complex-fma.c
+ 5803090f97de94af7dd3164c50bd1adc  gcc/testsuite/gcc.target/i386/avx512fp16-conjugation-1.c
+ eae7a5773425eb384999034d4e03918d  gcc/testsuite/gcc.target/i386/avx512fp16-dest-false-dep-for-glc.c
+ 970bc47c225c13b0c28a2f329533ddb7  gcc/testsuite/gcc.target/i386/avx512fp16-floatvnhf.c
+ ac477f1c32fad10fc7a0406189e98ac6  gcc/testsuite/gcc.target/i386/avx512fp16-fma-1.c
+ 834dadc5dea756bfe689d52ed2ec58a6  gcc/testsuite/gcc.target/i386/avx512fp16-helper.h
+ b27abeb08b864284971b1aba8ced6b22  gcc/testsuite/gcc.target/i386/avx512fp16-neg-1a.c
+ 7a47cd88a25f16e65dda4800001d8f07  gcc/testsuite/gcc.target/i386/avx512fp16-neg-1b.c
+ 1fb5a7d458011e625304c59dd1baf934  gcc/testsuite/gcc.target/i386/avx512fp16-pr101846.c
+ 2e40da5c6cc066c5c3fc6534287c3bb1  gcc/testsuite/gcc.target/i386/avx512fp16-pr103750-1.c
+ ddf42476c9bd487716414f58d3c10527  gcc/testsuite/gcc.target/i386/avx512fp16-pr103750-2.c
+ b5d5082a6d865b8b24dbefc908fafb2d  gcc/testsuite/gcc.target/i386/avx512fp16-pr94680.c
+ 0be682c7ab6c675fa46f84d592d76785  gcc/testsuite/gcc.target/i386/avx512fp16-recip-1.c
+ 38a807ac8fade227ea34604df002fb5f  gcc/testsuite/gcc.target/i386/avx512fp16-recip-2.c
+ 4312226ac8ecfd68a6cf8f867262789a  gcc/testsuite/gcc.target/i386/avx512fp16-reduce-op-1.c
+ 2d2ca93697ff6e4db6819c28c1a24ced  gcc/testsuite/gcc.target/i386/avx512fp16-reduce-op-2.c
+ fa7a7d92ce80bfb7f5faf7e81addb4ce  gcc/testsuite/gcc.target/i386/avx512fp16-reduce-op-3.c
+ 53ae782dbc5f04df9f8a5b4a2e2fb00e  gcc/testsuite/gcc.target/i386/avx512fp16-scalar-bitwise-1a.c
+ aa19ef379fcd517ef558b68d6edcf2bc  gcc/testsuite/gcc.target/i386/avx512fp16-scalar-bitwise-1b.c
+ aed11c0ceee2770d533472f500f494b5  gcc/testsuite/gcc.target/i386/avx512fp16-set1-pch-1a.c
+ 074645257829b2e38f8024239f50acc1  gcc/testsuite/gcc.target/i386/avx512fp16-set1-pch-1b.c
+ 618be9926cc98978aa8cc17b38ab10a7  gcc/testsuite/gcc.target/i386/avx512fp16-trunc-extendvnhf.c
+ d8fdbf8479f340e4dada9fd9d4d4649a  gcc/testsuite/gcc.target/i386/avx512fp16-trunchf.c
+ 696fc655e27c5eb878d00340cefc0304  gcc/testsuite/gcc.target/i386/avx512fp16-truncvnhf.c
+ bb19b6456e461ee55adaea68e25306be  gcc/testsuite/gcc.target/i386/avx512fp16-typecast-1.c
+ 075feb1c6dfc181a118be15ca0b8279a  gcc/testsuite/gcc.target/i386/avx512fp16-typecast-2.c
+ f3aa626e8982c538133c093073e01998  gcc/testsuite/gcc.target/i386/avx512fp16-v4hf-concat.c
+ 8cae00e836f4c29d226b376aa355088e  gcc/testsuite/gcc.target/i386/avx512fp16-vaddph-1a.c
+ e51ccead2e5f0e0e02cdfe0d131376fc  gcc/testsuite/gcc.target/i386/avx512fp16-vaddph-1b.c
+ 3c404aa6e8ee2ac8e2ce86b07ca2d11b  gcc/testsuite/gcc.target/i386/avx512fp16-vaddsh-1a.c
+ c48b75bd903c6fab4a51b670640f8def  gcc/testsuite/gcc.target/i386/avx512fp16-vaddsh-1b.c
+ f3f125b316514b97ffa6abdd6095603e  gcc/testsuite/gcc.target/i386/avx512fp16-vararg-1.c
+ 6f41b6300f877cd3ef81d1fb1e5aeb7f  gcc/testsuite/gcc.target/i386/avx512fp16-vararg-2.c
+ dd2822905a7a40a8fe8c7c81dff532ec  gcc/testsuite/gcc.target/i386/avx512fp16-vararg-3.c
+ d2af119366a1f2d2b7b0e508762b3703  gcc/testsuite/gcc.target/i386/avx512fp16-vararg-4.c
+ 14b44a12b790f3e06503ff87add4734c  gcc/testsuite/gcc.target/i386/avx512fp16-vcmpph-1a.c
+ 4524d2a04e728216cd38b48fddf0f25c  gcc/testsuite/gcc.target/i386/avx512fp16-vcmpph-1b.c
+ 47119451de71644b3efb49c280538258  gcc/testsuite/gcc.target/i386/avx512fp16-vcmpsh-1a.c
+ bc98ce6ac6195aab77f73a6fa7416df2  gcc/testsuite/gcc.target/i386/avx512fp16-vcmpsh-1b.c
+ 4a2e959441ddf1c5f8b2d52f38ef5a26  gcc/testsuite/gcc.target/i386/avx512fp16-vcomish-1a.c
+ 18f7673b9f286267ccb36d1e8d90b954  gcc/testsuite/gcc.target/i386/avx512fp16-vcomish-1b.c
+ b675d8871bce5f4b27eeaaed97147690  gcc/testsuite/gcc.target/i386/avx512fp16-vcomish-1c.c
+ d6de4b27839b50aa7f7235e70ba88db1  gcc/testsuite/gcc.target/i386/avx512fp16-vcondmn-loop-1.c
+ d3897e3a0500cc75be7d131ecb48cec4  gcc/testsuite/gcc.target/i386/avx512fp16-vcondmn-loop-2.c
+ 516af3c915e00103f083826fd646a8f0  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtdq2ph-1a.c
+ 858a696a1e43aa6e419c664d59d904d5  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtdq2ph-1b.c
+ 044b5228a853d72a5a6943bde8f6d375  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtpd2ph-1a.c
+ d738d302b8d2099a4c50ff9b3a0897db  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtpd2ph-1b.c
+ 17b9246bb3bfc5ac74fc1e235804d15e  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2dq-1a.c
+ 63710fbad7391208aa8853c726a6f54e  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2dq-1b.c
+ 1e653fc43be65a92c0695ee281033911  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2pd-1a.c
+ 17fae81c13b871ac02e8305fd7173880  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2pd-1b.c
+ ba049bb7e2b62f35c17e3f271884b047  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2psx-1a.c
+ 96fc57ece0b649f952e93ec2ae44aba5  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2psx-1b.c
+ c853c89d65cc419305064f8494e9dbb4  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2qq-1a.c
+ cdf1e363360abd70acc5adba8973b158  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2qq-1b.c
+ e0f302a3d2cd93ec8dc0594641c9c8da  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2udq-1a.c
+ 294b90a63ef0ba58104e53065d64d054  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2udq-1b.c
+ b0056fe75d855a568120044f78077863  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2uqq-1a.c
+ 76c02b4daea3ce9a9a465d9518f2a85e  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2uqq-1b.c
+ 80ce4f1ec1e8b272482e75c58f518d33  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2uw-1a.c
+ 1baa4ebd136e93322f10ce6968f5a15c  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2uw-1b.c
+ 51c29c6bd997ba6ee25a84403ba07b29  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2w-1a.c
+ 1e461e4939d4312cec5981ce6e372995  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtph2w-1b.c
+ b7c23a85cbec24b08e6ce959951b7d70  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtps2ph-1a.c
+ 6a23e173d2e508a1767c09c8f5661ab9  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtps2ph-1b.c
+ 6c3c5cd60ff068bdf621d6a4d90cda0e  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtqq2ph-1a.c
+ 926a053321b9bf1f0cdc4ce390639eb8  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtqq2ph-1b.c
+ 777e752120c89cf94d80970a53f6b8a4  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsd2sh-1a.c
+ 3036678309bc4a21dbcf666f9758f105  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsd2sh-1b.c
+ 53d46435fe1e2e0084ced0f7a5413b68  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsh2sd-1a.c
+ d15cd8a7aba026c95369ed92e0047555  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsh2sd-1b.c
+ 7e4bb8abe41bbbb241f2b0ac4c066b49  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsh2si-1a.c
+ 089c7c5600b7b38c781698aa9b18c5c7  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsh2si-1b.c
+ a5111e025d95e6fcbd4fb965d79c746c  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsh2si64-1a.c
+ 06d2080506df0f1204110886d85e3dfb  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsh2si64-1b.c
+ a704e2eb19e77459ba233c2fa0ea4f3a  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsh2ss-1a.c
+ 5d15dcf0159566e477b62163ba0953d9  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsh2ss-1b.c
+ 08fa46de9db1a088f5abe0ef3ce6f3a1  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsh2usi-1a.c
+ 0f7bfe1c69caab051706b55a380c543c  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsh2usi-1b.c
+ bdfaa245b1fe6089b7e15d4763833076  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsh2usi64-1a.c
+ 62708a3ae9f11db72cb30ef27e09d1a4  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsh2usi64-1b.c
+ 2bedae21c81fa54c4a5e9baacf9fe65d  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsi2sh-1a.c
+ 08c14c43cb3897216b08e7c4bbc9f891  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsi2sh-1b.c
+ d3461534523d4723896427a11a5b792c  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsi2sh64-1a.c
+ 7c5c465dd7cb0d65f9dfd55b09a52fe1  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtsi2sh64-1b.c
+ 1b92c9e72dffaf2d33ee368621f082c8  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtss2sh-1a.c
+ 7d3f5161f70cfd2e6c411de91c7d61c8  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtss2sh-1b.c
+ ff9d7456240b818006d3a8065121464f  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttph2dq-1a.c
+ 5b07e9e15b4605bc2dcaeb4bef0a58f1  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttph2dq-1b.c
+ 6db746c5a1ece3a098cf0887c45682fd  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttph2qq-1a.c
+ 6705cf69f80712a02ee984a5ce1af4d0  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttph2qq-1b.c
+ 8abf170ae79e1e56b9d2c381bc407ca3  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttph2udq-1a.c
+ ec0246b141250bee48adf61342347212  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttph2udq-1b.c
+ 981b1eec7ff1c7d10c3c5f6a97b31b73  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttph2uqq-1a.c
+ f1c28b001d9d1a6143bc8ef91f0e4ab8  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttph2uqq-1b.c
+ 2dfb9cb31e1cf69b1e004f0680558514  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttph2uw-1a.c
+ a0b9d8aefb40699d0fcbc6bad023e571  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttph2uw-1b.c
+ e2f21352e0bdb253ab43600b1791832c  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttph2w-1a.c
+ 0900c8d29804a5b9a7f025c9a3b5f34b  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttph2w-1b.c
+ 7d66208ba1d5b7b674ca55ca363bcdd8  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttsh2si-1a.c
+ a8ecbf52ad049c2898815b51904ee653  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttsh2si-1b.c
+ f7cc8f9979f71534cd0f98a716377f01  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttsh2si64-1a.c
+ 99b2df9dc2f5cd6647916f94fb2fa3f8  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttsh2si64-1b.c
+ bf07c447eb7e9c81d58242a425d42f3f  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttsh2usi-1a.c
+ 382d27ddc349b11d76e1ebb344811341  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttsh2usi-1b.c
+ 2bd5443742ddc58c66dd21fab1a25bf0  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttsh2usi64-1a.c
+ 67a22d0e46956df441b87d2050b136ad  gcc/testsuite/gcc.target/i386/avx512fp16-vcvttsh2usi64-1b.c
+ f300e5690eee8a70e26b63133e67e631  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtudq2ph-1a.c
+ bf77c0756dc9d7614cd8149c27e5dd46  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtudq2ph-1b.c
+ f6a95650dbd625f91ba528ec678afa2d  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtuqq2ph-1a.c
+ de66d7dafe3a5094bc177b3d6d11fcfc  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtuqq2ph-1b.c
+ 15cf68b71d78ad4df2914caa1d5f946c  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtusi2sh-1a.c
+ 59b3693777bf7617cc3327be1954eedf  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtusi2sh-1b.c
+ 68347d92bbff13cfc883273adb4e407b  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtusi2sh64-1a.c
+ efc557cc5e0b0e212099f42168fd303d  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtusi2sh64-1b.c
+ 6dcc4d92397c81f135f0d37c656975ea  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtuw2ph-1a.c
+ 41c33100e5ec7dab3cac1ea29db6bf64  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtuw2ph-1b.c
+ 29e7c1094c25e8a3ac11b1423ddf4f85  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtw2ph-1a.c
+ 8eed1da4ee49b745ca47a0012577acdd  gcc/testsuite/gcc.target/i386/avx512fp16-vcvtw2ph-1b.c
+ 15ff1064755a8acb57b64ae620bef95c  gcc/testsuite/gcc.target/i386/avx512fp16-vdivph-1a.c
+ c3507e7a01fc409dbe2fde57c89e8f44  gcc/testsuite/gcc.target/i386/avx512fp16-vdivph-1b.c
+ 8bf446bdbea9964a2224b7ab645adffc  gcc/testsuite/gcc.target/i386/avx512fp16-vdivsh-1a.c
+ f87b369c0dd614076bcde06bb18bf3ee  gcc/testsuite/gcc.target/i386/avx512fp16-vdivsh-1b.c
+ dfb6ca5d914d1eea44e47f0da8492abc  gcc/testsuite/gcc.target/i386/avx512fp16-vec_cmpmn.c
+ 9429272ba8321515f7e9b9ffffbfde1a  gcc/testsuite/gcc.target/i386/avx512fp16-vec_set_var.c
+ 93d4037e4b1bcfbff5ef4f6e0c19029f  gcc/testsuite/gcc.target/i386/avx512fp16-vector-bitwise-1a.c
+ d4b57d9f3aa7074a24bc9928558d3db1  gcc/testsuite/gcc.target/i386/avx512fp16-vector-bitwise-1b.c
+ 3050a280871a042d43e4c6a93073186f  gcc/testsuite/gcc.target/i386/avx512fp16-vector-complex-float.c
+ 0b7fa0baa231faeec79d6b7fca8f5054  gcc/testsuite/gcc.target/i386/avx512fp16-vfcmaddcph-1a.c
+ 7176e6cd788bb9afe553a220482b8400  gcc/testsuite/gcc.target/i386/avx512fp16-vfcmaddcph-1b.c
+ ab0c29d856546f3202673bc6ab6e9d2c  gcc/testsuite/gcc.target/i386/avx512fp16-vfcmaddcsh-1a.c
+ 769f5f5a3f1b35b120c8630f8bd298cc  gcc/testsuite/gcc.target/i386/avx512fp16-vfcmaddcsh-1b.c
+ 3e22f3e83f5b2776374025d7e3c746ee  gcc/testsuite/gcc.target/i386/avx512fp16-vfcmulcph-1a.c
+ fbfe0f5b055de1170d676187d8245ee7  gcc/testsuite/gcc.target/i386/avx512fp16-vfcmulcph-1b.c
+ 17643cc337dbcdb21bd8d63eab0e8272  gcc/testsuite/gcc.target/i386/avx512fp16-vfcmulcsh-1a.c
+ 183ff51271c98036b62042cac8a8bd2f  gcc/testsuite/gcc.target/i386/avx512fp16-vfcmulcsh-1b.c
+ 0998a2671a04ea686175ac6894590723  gcc/testsuite/gcc.target/i386/avx512fp16-vfmaddXXXph-1a.c
+ 8598de8426ac28bdbf5f9799905b7486  gcc/testsuite/gcc.target/i386/avx512fp16-vfmaddXXXph-1b.c
+ 52f6994430c8d8366f9cda5ef1845a96  gcc/testsuite/gcc.target/i386/avx512fp16-vfmaddXXXsh-1a.c
+ 4a748e0516d2bfc96da9397da14a2a64  gcc/testsuite/gcc.target/i386/avx512fp16-vfmaddXXXsh-1b.c
+ 3b6225af15bd320a6dab51a119123543  gcc/testsuite/gcc.target/i386/avx512fp16-vfmaddcph-1a.c
+ 1a306272d4fc868d7ecd669e50631f9e  gcc/testsuite/gcc.target/i386/avx512fp16-vfmaddcph-1b.c
+ 2d673752cca80967628712ee109fc09d  gcc/testsuite/gcc.target/i386/avx512fp16-vfmaddcsh-1a.c
+ d1e79d7908611df9a92ac7d57407f5ec  gcc/testsuite/gcc.target/i386/avx512fp16-vfmaddcsh-1b.c
+ fa163ececdbb52eea5b2e118384c697e  gcc/testsuite/gcc.target/i386/avx512fp16-vfmaddsubXXXph-1a.c
+ 70a01a7f0b82f88674e4216c8ad456fd  gcc/testsuite/gcc.target/i386/avx512fp16-vfmaddsubXXXph-1b.c
+ b70b4d4480af0e5a935d621120e75822  gcc/testsuite/gcc.target/i386/avx512fp16-vfmsubXXXph-1a.c
+ 56dc05805fb81f4dae87378953f89a74  gcc/testsuite/gcc.target/i386/avx512fp16-vfmsubXXXph-1b.c
+ e830542eb55b6ac3322fd6497f785b45  gcc/testsuite/gcc.target/i386/avx512fp16-vfmsubXXXsh-1a.c
+ 3ce94584461f3832e956ef0d70837f39  gcc/testsuite/gcc.target/i386/avx512fp16-vfmsubXXXsh-1b.c
+ 078fafa833e4c25be7266c6cd513ad50  gcc/testsuite/gcc.target/i386/avx512fp16-vfmsubaddXXXph-1a.c
+ 6785a076589fe99a58b0e58468c2e00c  gcc/testsuite/gcc.target/i386/avx512fp16-vfmsubaddXXXph-1b.c
+ d0a1f720b0c79273e78db5f773f3047e  gcc/testsuite/gcc.target/i386/avx512fp16-vfmulcph-1a.c
+ 6755ac53da586e48ab8f02029d94ca42  gcc/testsuite/gcc.target/i386/avx512fp16-vfmulcph-1b.c
+ c088bd1be6269b59dc9cc3bda7c0a302  gcc/testsuite/gcc.target/i386/avx512fp16-vfmulcsh-1a.c
+ aa72ade853de6ca4954622f0c35d0396  gcc/testsuite/gcc.target/i386/avx512fp16-vfmulcsh-1b.c
+ f7167f779750f2ad71aa2492338c0b44  gcc/testsuite/gcc.target/i386/avx512fp16-vfnmaddXXXph-1a.c
+ b1a16f5b5c04b03adb87b9a570373375  gcc/testsuite/gcc.target/i386/avx512fp16-vfnmaddXXXph-1b.c
+ 8dd9cfefcb0d1a8e67babd345e2e9eb1  gcc/testsuite/gcc.target/i386/avx512fp16-vfnmaddXXXsh-1a.c
+ ae488f24ccf88ad5cb80c6d3a8bb2cda  gcc/testsuite/gcc.target/i386/avx512fp16-vfnmaddXXXsh-1b.c
+ ea860d9a8011d5b1556db183aaf57b93  gcc/testsuite/gcc.target/i386/avx512fp16-vfnmsubXXXph-1a.c
+ baf31fdbb66bd1db60ed18831c7eb2a8  gcc/testsuite/gcc.target/i386/avx512fp16-vfnmsubXXXph-1b.c
+ 9b38556b6dac137c53ce931f1f296cca  gcc/testsuite/gcc.target/i386/avx512fp16-vfnmsubXXXsh-1a.c
+ c871215766439133615180b4861bbc02  gcc/testsuite/gcc.target/i386/avx512fp16-vfnmsubXXXsh-1b.c
+ e5f342115c72c6f189324bbb8ba8498a  gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1a.c
+ 02d365e89418c102e31b90036e117273  gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1b.c
+ 43f3189c0a0cc0109dba0b81ab99fb0a  gcc/testsuite/gcc.target/i386/avx512fp16-vfpclasssh-1a.c
+ 3e23e295b389d5fc7973bfc73cd8d235  gcc/testsuite/gcc.target/i386/avx512fp16-vfpclasssh-1b.c
+ a3f1acec8cc23029e37e44877fc68d8f  gcc/testsuite/gcc.target/i386/avx512fp16-vgetexpph-1a.c
+ 0417db62f6b2ee90248403220b8a9b50  gcc/testsuite/gcc.target/i386/avx512fp16-vgetexpph-1b.c
+ 788307c45b4da391657d499142e92c41  gcc/testsuite/gcc.target/i386/avx512fp16-vgetexpsh-1a.c
+ 5c3beeb274b75975c0c8f870536206ab  gcc/testsuite/gcc.target/i386/avx512fp16-vgetexpsh-1b.c
+ 461f17468859fb0cae65f213af042dec  gcc/testsuite/gcc.target/i386/avx512fp16-vgetmantph-1a.c
+ 17fdfc028fb16f6991fe206ca79b393a  gcc/testsuite/gcc.target/i386/avx512fp16-vgetmantph-1b.c
+ 78cc122b4b6ba27d2335561783225255  gcc/testsuite/gcc.target/i386/avx512fp16-vgetmantsh-1a.c
+ b5b61b2249d1a9e2a15b2bb2dccf064b  gcc/testsuite/gcc.target/i386/avx512fp16-vgetmantsh-1b.c
+ ffb9d8f0bbca8da07b144757af8d03cc  gcc/testsuite/gcc.target/i386/avx512fp16-vmaxph-1a.c
+ 3379c12252777c83ae6a0f8499cd45be  gcc/testsuite/gcc.target/i386/avx512fp16-vmaxph-1b.c
+ 14547ed4ee2a9ed13a8f270713eab77e  gcc/testsuite/gcc.target/i386/avx512fp16-vmaxsh-1.c
+ 2a9f2cdd92e71e0fe333e78c57002a8a  gcc/testsuite/gcc.target/i386/avx512fp16-vmaxsh-1b.c
+ 79fd715e18e2f6060da5d2aa8555f709  gcc/testsuite/gcc.target/i386/avx512fp16-vminph-1a.c
+ c1206484ddb91b764b0aeac219423583  gcc/testsuite/gcc.target/i386/avx512fp16-vminph-1b.c
+ 5c67e15a45b1ede6346c8c57c2d55911  gcc/testsuite/gcc.target/i386/avx512fp16-vminsh-1.c
+ f9617e7125bd55d1d523a1913c295286  gcc/testsuite/gcc.target/i386/avx512fp16-vminsh-1b.c
+ f98df9ca075292635475b285e648ebc1  gcc/testsuite/gcc.target/i386/avx512fp16-vmovsh-1a.c
+ 5814340d176783a15ae31a06c5697ea1  gcc/testsuite/gcc.target/i386/avx512fp16-vmovsh-1b.c
+ 5bc7907d63b59c7fc0efd2bb1011327a  gcc/testsuite/gcc.target/i386/avx512fp16-vmovw-1a.c
+ 3b034becae983ec519fa6fae9c2dbdf9  gcc/testsuite/gcc.target/i386/avx512fp16-vmovw-1b.c
+ 380d63a8b2bd8cba3072e1daa4f006f9  gcc/testsuite/gcc.target/i386/avx512fp16-vmovw-2a.c
+ eb32b33f0df92008c6d15d9cd102ad07  gcc/testsuite/gcc.target/i386/avx512fp16-vmovw-2b.c
+ c2b8ad6e5aa2d5ac597249334de18936  gcc/testsuite/gcc.target/i386/avx512fp16-vmovw-3a.c
+ dae692b0e1d837991138ec852d90c1d2  gcc/testsuite/gcc.target/i386/avx512fp16-vmovw-3b.c
+ 7043b6a71bec66be11e4af66b87eda03  gcc/testsuite/gcc.target/i386/avx512fp16-vmovw-4a.c
+ 6b1429b77a9f481ebb4c012fbb708e5c  gcc/testsuite/gcc.target/i386/avx512fp16-vmovw-4b.c
+ caf040594bdc6bb64044942cbca91779  gcc/testsuite/gcc.target/i386/avx512fp16-vmulph-1a.c
+ 241884b1dda90fbbc81872442f78ff2b  gcc/testsuite/gcc.target/i386/avx512fp16-vmulph-1b.c
+ 3ee24fc0537f9163f446b55411da155f  gcc/testsuite/gcc.target/i386/avx512fp16-vmulsh-1a.c
+ d8361c88b678e85dbea8d9c132aef948  gcc/testsuite/gcc.target/i386/avx512fp16-vmulsh-1b.c
+ e1c09a8a3f89395dc1e995f33c144c76  gcc/testsuite/gcc.target/i386/avx512fp16-vrcpph-1a.c
+ 4a1e2b67404e756caf4595c860220d46  gcc/testsuite/gcc.target/i386/avx512fp16-vrcpph-1b.c
+ 43d1a14153aa8b4af6a1c68f594fb363  gcc/testsuite/gcc.target/i386/avx512fp16-vrcpsh-1a.c
+ bf03643c5dd4168e27f57d9caa97e40c  gcc/testsuite/gcc.target/i386/avx512fp16-vrcpsh-1b.c
+ 83823e1dac1b2c5e36c4354a33e78853  gcc/testsuite/gcc.target/i386/avx512fp16-vreduceph-1a.c
+ 539f4c0d27fb95643e3ddd56b932b241  gcc/testsuite/gcc.target/i386/avx512fp16-vreduceph-1b.c
+ 207b330462459c6eb8ce26b35e898a12  gcc/testsuite/gcc.target/i386/avx512fp16-vreducesh-1a.c
+ 8db658cf0b24625a13ca981fc1521c00  gcc/testsuite/gcc.target/i386/avx512fp16-vreducesh-1b.c
+ 1b3e2dfdb0a44e384db7a7048e2fb709  gcc/testsuite/gcc.target/i386/avx512fp16-vrndscaleph-1a.c
+ 6970f755e6a68b27cc588df81723848f  gcc/testsuite/gcc.target/i386/avx512fp16-vrndscaleph-1b.c
+ 1dea081e32e89a263e3782d92308d42f  gcc/testsuite/gcc.target/i386/avx512fp16-vrndscalesh-1a.c
+ df4228e144329f00444801f62d705964  gcc/testsuite/gcc.target/i386/avx512fp16-vrndscalesh-1b.c
+ db5f22cc6451291ec9f1b52a992a40b8  gcc/testsuite/gcc.target/i386/avx512fp16-vrsqrtph-1a.c
+ c03a6fd4dae639987f2f4fd9293201c1  gcc/testsuite/gcc.target/i386/avx512fp16-vrsqrtph-1b.c
+ 6bbcebe17b0358483254a9deef8746b9  gcc/testsuite/gcc.target/i386/avx512fp16-vrsqrtsh-1a.c
+ e22965ad7f8ae66186f596cb545534c5  gcc/testsuite/gcc.target/i386/avx512fp16-vrsqrtsh-1b.c
+ 5a4d455d11bcb915c5225b5e0ab45ce6  gcc/testsuite/gcc.target/i386/avx512fp16-vscalefph-1a.c
+ 4c9d451f855a68baae773b5a616589b1  gcc/testsuite/gcc.target/i386/avx512fp16-vscalefph-1b.c
+ 245119bf0a8838235d99ccded98653b8  gcc/testsuite/gcc.target/i386/avx512fp16-vscalefsh-1a.c
+ 893f3813fb89f59b802c9104f2599e8c  gcc/testsuite/gcc.target/i386/avx512fp16-vscalefsh-1b.c
+ abec174f2ad4aeb106fa898023f0c25d  gcc/testsuite/gcc.target/i386/avx512fp16-vsqrtph-1a.c
+ 286c719055a41b2de9a89a1e50237a73  gcc/testsuite/gcc.target/i386/avx512fp16-vsqrtph-1b.c
+ 7f0e430fe76b4b9471d4b08faf16cd46  gcc/testsuite/gcc.target/i386/avx512fp16-vsqrtsh-1a.c
+ eea70f7ec894dc0734720f1168d66a60  gcc/testsuite/gcc.target/i386/avx512fp16-vsqrtsh-1b.c
+ a2e2af8ff03c5796d335ffb9b6d5cc1c  gcc/testsuite/gcc.target/i386/avx512fp16-vsubph-1a.c
+ d3064bc8e32fbd4b222b12baf22ca2f0  gcc/testsuite/gcc.target/i386/avx512fp16-vsubph-1b.c
+ 3ceefff146ab36e49f465a71bb91897a  gcc/testsuite/gcc.target/i386/avx512fp16-vsubsh-1a.c
+ a1f4b75339c19727d3758c22b23b84a4  gcc/testsuite/gcc.target/i386/avx512fp16-vsubsh-1b.c
+ 138cb068fbcd58bbcd96b9dfb34da3af  gcc/testsuite/gcc.target/i386/avx512fp16-xorsign-1.c
+ 9124b923004bf790ed4da1d0c675d320  gcc/testsuite/gcc.target/i386/avx512fp16vl-builtin-sqrt-1.c
+ 5e4929aedf1814bce1f01dc3cbc59c66  gcc/testsuite/gcc.target/i386/avx512fp16vl-complex-broadcast-1.c
+ 9cdcf3ee0e93903fd6873cc07ff469e9  gcc/testsuite/gcc.target/i386/avx512fp16vl-conjugation-1.c
+ a64a7d13af53410d9026bedcc7a9d6fb  gcc/testsuite/gcc.target/i386/avx512fp16vl-dest-false-dep-for-glc.c
+ 0115aca004331ab70002aa4d49e6f20d  gcc/testsuite/gcc.target/i386/avx512fp16vl-fma-1.c
+ d22f16d05588a4dd223b55a41aab4cbd  gcc/testsuite/gcc.target/i386/avx512fp16vl-fma-vectorize-1.c
+ a027436e0f79d5e96a77d59f11494989  gcc/testsuite/gcc.target/i386/avx512fp16vl-neg-1a.c
+ 80a65d839ffdd73607455f0af1525ebf  gcc/testsuite/gcc.target/i386/avx512fp16vl-neg-1b.c
+ 606286d14be2f47b8b4856695b10c4a0  gcc/testsuite/gcc.target/i386/avx512fp16vl-reduce-op-1.c
+ bd3b529925e98454f166219923e494f2  gcc/testsuite/gcc.target/i386/avx512fp16vl-set1-pch-1a.c
+ 1fc34d1a52a45b56f8dd136cdf04f415  gcc/testsuite/gcc.target/i386/avx512fp16vl-set1-pch-1b.c
+ 4c8fe2c0f31819229e27d8797cd2496b  gcc/testsuite/gcc.target/i386/avx512fp16vl-typecast-1.c
+ b46a427bb17a20b520a7db7ce4250c1b  gcc/testsuite/gcc.target/i386/avx512fp16vl-typecast-2.c
+ 668e017a3e6b9bff2a578d15fedc9030  gcc/testsuite/gcc.target/i386/avx512fp16vl-vaddph-1a.c
+ f6ce795f99286ee69df3063791fbe9b4  gcc/testsuite/gcc.target/i386/avx512fp16vl-vaddph-1b.c
+ 47c7f79bcaeb11267d2a809293d9ae93  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcmpph-1a.c
+ e548611fce880193d09e02357b7a71d9  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcmpph-1b.c
+ 78ad59fb4291984c765815bac8d15b10  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtdq2ph-1a.c
+ 7eda7b75b02475ecbb3bf828b4513c00  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtdq2ph-1b.c
+ fd67ae5beec610a3518bdd0c9a4212d1  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtpd2ph-1a.c
+ c51fc319163db9850e50b2ff767b1449  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtpd2ph-1b.c
+ 384dc5d09ca0b0a5e0ffa26660f0731c  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2dq-1a.c
+ 4bc563fd9fd760397f3b6cb9403c7d94  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2dq-1b.c
+ 89a1295ec1248ce7907c7cd349363ea6  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2pd-1a.c
+ 54b82109d1b758809669c9c001109738  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2pd-1b.c
+ 75e6fa7d77f0dcbbbade9245e6f55603  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2psx-1a.c
+ 9cd301a4712fb86b9f581e94b4e71769  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2psx-1b.c
+ b0cdc454ecd13953d35fb609837e5cd7  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2qq-1a.c
+ 66015b922981ef8f2b16a4a41c533d9f  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2qq-1b.c
+ 8188707b3e279fbd54dceda89548a016  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2udq-1a.c
+ db7598788dae76f78020c785009721c3  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2udq-1b.c
+ caee8c232f489232793fdd47973dc69f  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2uqq-1a.c
+ d0087d75beb636dc4ec7112b39ba21b5  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2uqq-1b.c
+ 8b86e2aa730e06d2d86d76b97f32971f  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2uw-1a.c
+ b7f54d63aa3eda2a3826307367d8ab78  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2uw-1b.c
+ a84fd08e7947e929005dfa30d7e6717e  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2w-1a.c
+ 4818a70d8bce5721d79026659532d901  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtph2w-1b.c
+ 6ddb98e826509d0cdb9f9b9e14e97343  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtps2ph-1a.c
+ 51326d2ae9d80f0e96dfe27a549d0a53  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtps2ph-1b.c
+ c5e861c073b31db31447a512e34a8026  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtqq2ph-1a.c
+ 0e22e2def8bf797a1f8ea124a117ab29  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtqq2ph-1b.c
+ 74e018dcc2ab8593f1d3e979fc862f8d  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvttph2dq-1a.c
+ f61a3cb3ecc48e639fa2d08a1bac4171  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvttph2dq-1b.c
+ 524f0c14e50098060aa74b78f6f2e6bd  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvttph2qq-1a.c
+ 101c2c792d6f8135697f455d6bc440ea  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvttph2qq-1b.c
+ acb6a3fda5187e8c8a55df89ca4cccc6  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvttph2udq-1a.c
+ 918d141cd128e05bd5cbcd4fd86875e5  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvttph2udq-1b.c
+ 18867b5683bb205fdbfd85cad94f343c  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvttph2uqq-1a.c
+ 6258ab08947763f721c03de622dd0350  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvttph2uqq-1b.c
+ 92a79c6248f15e5f308c8a527bff54df  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvttph2uw-1a.c
+ 0b10bb8dd7ba8c0c09ee68befdfc846d  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvttph2uw-1b.c
+ 17de217c1d369e872a49099e5cf05bca  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvttph2w-1a.c
+ 5b59071f5475bd6fab2593a27e43382b  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvttph2w-1b.c
+ dbd04e3756dfea50a6f561e08e7b3f4a  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtudq2ph-1a.c
+ dffc6dba60c0fae2dc5ffef7d6730bbc  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtudq2ph-1b.c
+ 76e0cfcc126a26f8071fa9c7bc593864  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtuqq2ph-1a.c
+ 996e891bfa25db9be49bd068bf43c87e  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtuqq2ph-1b.c
+ 1afc681e8b1e961b1d39eb12a28d505a  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtuw2ph-1a.c
+ ce915f9aa41b8c0ad0d5bfd50d48dce2  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtuw2ph-1b.c
+ eefc96e7b40bd13cadc405b15f10ad07  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtw2ph-1a.c
+ 9ef10cbc9797265ae13dbae561ad1676  gcc/testsuite/gcc.target/i386/avx512fp16vl-vcvtw2ph-1b.c
+ fff2a9cfd16fc5853b1107b9fbb4527c  gcc/testsuite/gcc.target/i386/avx512fp16vl-vdivph-1a.c
+ e4eae2e0c2c2641bc4a15e9b95341a64  gcc/testsuite/gcc.target/i386/avx512fp16vl-vdivph-1b.c
+ 0746bbc58449a87d9711475b0ef6a0ae  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfcmaddcph-1a.c
+ 3a1da4c9373179778309ff3b777580a3  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfcmaddcph-1b.c
+ 1b2109245a774f87cb04912a57232f71  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfcmulcph-1a.c
+ 71064dd7fa29fe1871e7b3f57e0bb9df  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfcmulcph-1b.c
+ 0cfd72100648de4a848e438643d518d7  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfmaddXXXph-1a.c
+ 7c9286eebe289ec3ec465759be5f1200  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfmaddXXXph-1b.c
+ 3a8f9ea4e5dd1084a63e35b1a5702220  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfmaddcph-1a.c
+ 13bc91b70f04f0183bb4009774c46679  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfmaddcph-1b.c
+ b55c044547754292b9c4604f3b8be15c  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfmaddsubXXXph-1a.c
+ b22adf2c3a3abab18f4e9e1724077d69  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfmaddsubXXXph-1b.c
+ f744d8527e03baa047d4955ab72ebdcf  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfmsubXXXph-1a.c
+ 46eee71ea9496d64338eef0411fd23c1  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfmsubXXXph-1b.c
+ 65f17a4591f6c611466c4c39b45186b9  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfmsubaddXXXph-1a.c
+ efbed2b76f297f283a4e744a943eb080  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfmsubaddXXXph-1b.c
+ 32cd690a50f6de2fdda27dfa10f617a6  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfmulcph-1a.c
+ 6b4f528f59b6634179db1191164c630c  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfmulcph-1b.c
+ 12ab6867a0b80213d0f7006370d96dce  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfnmaddXXXph-1a.c
+ 8a2fd5dd39eba6562561d91702b6147a  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfnmaddXXXph-1b.c
+ 814bc54a52a34da228a1b13605fc56f0  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfnmsubXXXph-1a.c
+ 595b5846335c3c0a86b8db17e0f60f78  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfnmsubXXXph-1b.c
+ 1749cfb3b31eedd0e0f4abe9aff2cb6f  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfpclassph-1a.c
+ d2046fd45902cdaa7ca23e49ddc0285b  gcc/testsuite/gcc.target/i386/avx512fp16vl-vfpclassph-1b.c
+ ef47275bb5b5e9cd3b674c4c46801a5f  gcc/testsuite/gcc.target/i386/avx512fp16vl-vgetexpph-1a.c
+ 82d2e6647d865c844ee18a1553dbb052  gcc/testsuite/gcc.target/i386/avx512fp16vl-vgetexpph-1b.c
+ 8bd67070a38740029cc6798571c0b6ec  gcc/testsuite/gcc.target/i386/avx512fp16vl-vgetmantph-1a.c
+ dc7ff2e5992c3aefdd5040eac2493935  gcc/testsuite/gcc.target/i386/avx512fp16vl-vgetmantph-1b.c
+ 41b5c5a693e5246ffcaefcbb61347c03  gcc/testsuite/gcc.target/i386/avx512fp16vl-vmaxph-1a.c
+ 3046fbc25c463ae9a0f1b43d4fb12220  gcc/testsuite/gcc.target/i386/avx512fp16vl-vmaxph-1b.c
+ c508fa63b82d7e8485231005e838faab  gcc/testsuite/gcc.target/i386/avx512fp16vl-vminph-1a.c
+ 29bcca23e13350cf45d2964f5b4e380c  gcc/testsuite/gcc.target/i386/avx512fp16vl-vminph-1b.c
+ 553e723ff2415a9cdbc699fa31c7538e  gcc/testsuite/gcc.target/i386/avx512fp16vl-vmulph-1a.c
+ e8bbbce134f15fb5531328b94c3449af  gcc/testsuite/gcc.target/i386/avx512fp16vl-vmulph-1b.c
+ ff4516d71292cd5af79c95c27649973b  gcc/testsuite/gcc.target/i386/avx512fp16vl-vrcpph-1a.c
+ a54e25a70fa265b1397011ea192faa27  gcc/testsuite/gcc.target/i386/avx512fp16vl-vrcpph-1b.c
+ a19dadf2648d4aba0db44a3a6bc14483  gcc/testsuite/gcc.target/i386/avx512fp16vl-vreduceph-1a.c
+ dae6573f8035eeb3a93b2872a35b7e8e  gcc/testsuite/gcc.target/i386/avx512fp16vl-vreduceph-1b.c
+ 8bc4593197ca60bcd96f53f036241ec9  gcc/testsuite/gcc.target/i386/avx512fp16vl-vrndscaleph-1a.c
+ 951d1bdf3c262e4be3957c97a63c47c4  gcc/testsuite/gcc.target/i386/avx512fp16vl-vrndscaleph-1b.c
+ d9a2c270bf8fe66405b8f9c8501ad830  gcc/testsuite/gcc.target/i386/avx512fp16vl-vrsqrtph-1a.c
+ 175ef28a607e9ce5c9c08bf6df00839c  gcc/testsuite/gcc.target/i386/avx512fp16vl-vrsqrtph-1b.c
+ 6d023fb1acf67f582c34ee1446e9fb84  gcc/testsuite/gcc.target/i386/avx512fp16vl-vscalefph-1a.c
+ 9d4f7ac253518d01d5e29d6c50041dea  gcc/testsuite/gcc.target/i386/avx512fp16vl-vscalefph-1b.c
+ 7e73fe2e2df29207a028d2954f7ea930  gcc/testsuite/gcc.target/i386/avx512fp16vl-vsqrtph-1a.c
+ a31020a143f331b9ec34d4180148bd9e  gcc/testsuite/gcc.target/i386/avx512fp16vl-vsqrtph-1b.c
+ 09bb88db303e43f561ea2094ee199daa  gcc/testsuite/gcc.target/i386/avx512fp16vl-vsubph-1a.c
+ 45cc050ea550fe0bc7b9a0b73a4ad3e4  gcc/testsuite/gcc.target/i386/avx512fp16vl-vsubph-1b.c
  bec6be257618e9cc911be966efb2ab8a  gcc/testsuite/gcc.target/i386/avx512fvl-vaes-1.c
  7ca8f53ddb06d28b1ffcae13894efb3e  gcc/testsuite/gcc.target/i386/avx512ifma-vpmaddhuq-1.c
  ae1ccb7e2041f3482999d81701ee97ed  gcc/testsuite/gcc.target/i386/avx512ifma-vpmaddhuq-2.c
*************** da943fec8529ab4219ae92fa7701f4f3  gcc/te
*** 60788,60794 ****
  b3bb92860a7a7725c03afa6bd022047f  gcc/testsuite/gcc.target/i386/avx512vbmi-vpmultishiftqb-2.c
  894c1afa27bde11c6d50e1f6fae905b8  gcc/testsuite/gcc.target/i386/avx512vbmi2-vpshld-1.c
  1a47d56ff1d6271c07878c0fee5ba0e6  gcc/testsuite/gcc.target/i386/avx512vbmi2-vpshrd-1.c
! 00c640a9ee145099cd26543b8b9bfcff  gcc/testsuite/gcc.target/i386/avx512vl-abs-copysign-1.c
  d2d79308516c8d8c17653303db1b5237  gcc/testsuite/gcc.target/i386/avx512vl-abs-copysign-2.c
  d54abcf534a735a2ad01ccab68350c63  gcc/testsuite/gcc.target/i386/avx512vl-add-sf-xmm-1.c
  97bd371477966cdb73d6634b3cb8ce4b  gcc/testsuite/gcc.target/i386/avx512vl-add-sf-ymm-1.c
--- 63803,63809 ----
  b3bb92860a7a7725c03afa6bd022047f  gcc/testsuite/gcc.target/i386/avx512vbmi-vpmultishiftqb-2.c
  894c1afa27bde11c6d50e1f6fae905b8  gcc/testsuite/gcc.target/i386/avx512vbmi2-vpshld-1.c
  1a47d56ff1d6271c07878c0fee5ba0e6  gcc/testsuite/gcc.target/i386/avx512vbmi2-vpshrd-1.c
! 43535ad47619b634b3da66d4a6a4c11c  gcc/testsuite/gcc.target/i386/avx512vl-abs-copysign-1.c
  d2d79308516c8d8c17653303db1b5237  gcc/testsuite/gcc.target/i386/avx512vl-abs-copysign-2.c
  d54abcf534a735a2ad01ccab68350c63  gcc/testsuite/gcc.target/i386/avx512vl-add-sf-xmm-1.c
  97bd371477966cdb73d6634b3cb8ce4b  gcc/testsuite/gcc.target/i386/avx512vl-add-sf-ymm-1.c
*************** c4bc57ffbca84a4901db479da843cf3c  gcc/te
*** 60802,60817 ****
  537bb550e9d66a02efe2296573212931  gcc/testsuite/gcc.target/i386/avx512vl-and-si-ymm-1.c
  d1bdd43046d2a862a62096e884f2a148  gcc/testsuite/gcc.target/i386/avx512vl-andn-si-xmm-1.c
  c6cc01bcba78b07acbc0c97f8ecffc30  gcc/testsuite/gcc.target/i386/avx512vl-andn-si-ymm-1.c
! 6e465965d4cb114a1be7fe51e2465dea  gcc/testsuite/gcc.target/i386/avx512vl-broadcast-pr87767-1.c
  bcc0041bf4882e8ffc439974df32bf6a  gcc/testsuite/gcc.target/i386/avx512vl-broadcast-pr87767-2.c
  0d8bc260ab66b4b4d146eb76e3d04402  gcc/testsuite/gcc.target/i386/avx512vl-broadcast-pr87767-3.c
  7ca815481d1a25c18f3e474b0ace8bca  gcc/testsuite/gcc.target/i386/avx512vl-broadcast-pr87767-4.c
! 5dabb6b1ac4a8e36bb6b4dc0ab7fdb4b  gcc/testsuite/gcc.target/i386/avx512vl-broadcast-pr87767-5.c
  205513778704d9cadedab6e62b5b5621  gcc/testsuite/gcc.target/i386/avx512vl-broadcast-pr87767-6.c
  99ab8f6b1890ccfcd14f1ea1cc6ca1c8  gcc/testsuite/gcc.target/i386/avx512vl-check.h
  0617dd4b8fef3764392d3723a75e2c8b  gcc/testsuite/gcc.target/i386/avx512vl-concatv2di-1.c
  aa1c65ae5d415bc961f9a1df5e0e7664  gcc/testsuite/gcc.target/i386/avx512vl-concatv2si-1.c
  cfe2aa1be3273634b71c46e44025ff10  gcc/testsuite/gcc.target/i386/avx512vl-concatv4si-1.c
  9c18b5a50845fa97a3fa72f280bdd73e  gcc/testsuite/gcc.target/i386/avx512vl-div-sf-xmm-1.c
  5a5bb900735bbe0f16a8a6c42b1fbdf4  gcc/testsuite/gcc.target/i386/avx512vl-div-sf-ymm-1.c
  3c980f1dc6e4e31f3657b9f4b21e12bf  gcc/testsuite/gcc.target/i386/avx512vl-fmadd-sf-xmm-1.c
--- 63817,63835 ----
  537bb550e9d66a02efe2296573212931  gcc/testsuite/gcc.target/i386/avx512vl-and-si-ymm-1.c
  d1bdd43046d2a862a62096e884f2a148  gcc/testsuite/gcc.target/i386/avx512vl-andn-si-xmm-1.c
  c6cc01bcba78b07acbc0c97f8ecffc30  gcc/testsuite/gcc.target/i386/avx512vl-andn-si-ymm-1.c
! 660e32b26a158d938edc524a1d9fead4  gcc/testsuite/gcc.target/i386/avx512vl-blendv-1.c
! 177293e898edfd6fd1acc72f09e22811  gcc/testsuite/gcc.target/i386/avx512vl-blendv-2.c
! 395adc06c14d72c8e8ecb458cd180088  gcc/testsuite/gcc.target/i386/avx512vl-broadcast-pr87767-1.c
  bcc0041bf4882e8ffc439974df32bf6a  gcc/testsuite/gcc.target/i386/avx512vl-broadcast-pr87767-2.c
  0d8bc260ab66b4b4d146eb76e3d04402  gcc/testsuite/gcc.target/i386/avx512vl-broadcast-pr87767-3.c
  7ca815481d1a25c18f3e474b0ace8bca  gcc/testsuite/gcc.target/i386/avx512vl-broadcast-pr87767-4.c
! f95e0ba727ff25d35ad316c2f5bbee6c  gcc/testsuite/gcc.target/i386/avx512vl-broadcast-pr87767-5.c
  205513778704d9cadedab6e62b5b5621  gcc/testsuite/gcc.target/i386/avx512vl-broadcast-pr87767-6.c
  99ab8f6b1890ccfcd14f1ea1cc6ca1c8  gcc/testsuite/gcc.target/i386/avx512vl-check.h
  0617dd4b8fef3764392d3723a75e2c8b  gcc/testsuite/gcc.target/i386/avx512vl-concatv2di-1.c
  aa1c65ae5d415bc961f9a1df5e0e7664  gcc/testsuite/gcc.target/i386/avx512vl-concatv2si-1.c
  cfe2aa1be3273634b71c46e44025ff10  gcc/testsuite/gcc.target/i386/avx512vl-concatv4si-1.c
+ b078a1deb26e6acb3ae6aaf31f6e3da1  gcc/testsuite/gcc.target/i386/avx512vl-dest-false-dep-for-glc.c
  9c18b5a50845fa97a3fa72f280bdd73e  gcc/testsuite/gcc.target/i386/avx512vl-div-sf-xmm-1.c
  5a5bb900735bbe0f16a8a6c42b1fbdf4  gcc/testsuite/gcc.target/i386/avx512vl-div-sf-ymm-1.c
  3c980f1dc6e4e31f3657b9f4b21e12bf  gcc/testsuite/gcc.target/i386/avx512vl-fmadd-sf-xmm-1.c
*************** de16d3536da23cd8a5f1fd84c3f22c4c  gcc/te
*** 60844,60849 ****
--- 63862,63868 ----
  cd96f3da4c2192b767b58d01e5f08cd4  gcc/testsuite/gcc.target/i386/avx512vl-i64scatterq-1.c
  45bbb91ea6f62986057afc4426fd06da  gcc/testsuite/gcc.target/i386/avx512vl-logic-1.c
  6b1fbd422db0115eef17bf3d36005958  gcc/testsuite/gcc.target/i386/avx512vl-logic-2.c
+ 8559abbcaffcdb5c5a3e557ae8c5f848  gcc/testsuite/gcc.target/i386/avx512vl-logicsuffix-1.c
  c093b97820e519e4548e458f7e501c85  gcc/testsuite/gcc.target/i386/avx512vl-mul-sf-xmm-1.c
  27926224549965e179665d36a9f0a6bf  gcc/testsuite/gcc.target/i386/avx512vl-mul-sf-ymm-1.c
  eb02bee85b6d8e384aafc73621985f26  gcc/testsuite/gcc.target/i386/avx512vl-no-vmovdqu16.c
*************** c0ef55ca688d812ce21255d44fb1a7d9  gcc/te
*** 60852,60857 ****
--- 63871,63880 ----
  c1fc8c403bea321e9edbec8f46fe2fd8  gcc/testsuite/gcc.target/i386/avx512vl-or-si-ymm-1.c
  5eaf41121795442d2f0736d687d1f1e5  gcc/testsuite/gcc.target/i386/avx512vl-pack-1.c
  994c768ea6f011cb5852de30a104bd2e  gcc/testsuite/gcc.target/i386/avx512vl-pack-2.c
+ 6d27b8ca57a36d88c859330ff725fb7e  gcc/testsuite/gcc.target/i386/avx512vl-pr100267-1.c
+ 26d1511d7f94a147fff46e5c7b585b00  gcc/testsuite/gcc.target/i386/avx512vl-pr100267-pd-2.c
+ 677f7e556dddad5fe5ca2d37be1cdfa4  gcc/testsuite/gcc.target/i386/avx512vl-pr100267-ps-2.c
+ 283b4877d58ced6f0c220db178d854a5  gcc/testsuite/gcc.target/i386/avx512vl-pr100648.c
  94073157c7c18d465b0898342cfaf127  gcc/testsuite/gcc.target/i386/avx512vl-pr101472.c
  1ce70da2226efd6f3d5d92c101fb79d9  gcc/testsuite/gcc.target/i386/avx512vl-pr79299-1.c
  e3cc31b3308cdb56423451f2cd8c2a00  gcc/testsuite/gcc.target/i386/avx512vl-pr79299-2.c
*************** c995442b79a88d7bd02b85882baf395d  gcc/te
*** 60891,60897 ****
  3bcc57ce6b7cadc47f5679998fca6db9  gcc/testsuite/gcc.target/i386/avx512vl-pr93069.c
  e83e4ca7bfde31c45ab7a663d2cbb1ee  gcc/testsuite/gcc.target/i386/avx512vl-pr93670.c
  a1130e7f1125407b6b6d30d7c4b95365  gcc/testsuite/gcc.target/i386/avx512vl-pr94343.c
! 03c8034dbaf2500e6d8d1fe941905849  gcc/testsuite/gcc.target/i386/avx512vl-pr95488-1.c
  653440f772c0c591ba73e65901da0239  gcc/testsuite/gcc.target/i386/avx512vl-pr95488-2.c
  616f945fddaa33d994cc18fe1ba4a02d  gcc/testsuite/gcc.target/i386/avx512vl-pr99321-1.c
  740d195d90879ded887268e753fa3b62  gcc/testsuite/gcc.target/i386/avx512vl-pr99321-2.c
--- 63914,63921 ----
  3bcc57ce6b7cadc47f5679998fca6db9  gcc/testsuite/gcc.target/i386/avx512vl-pr93069.c
  e83e4ca7bfde31c45ab7a663d2cbb1ee  gcc/testsuite/gcc.target/i386/avx512vl-pr93670.c
  a1130e7f1125407b6b6d30d7c4b95365  gcc/testsuite/gcc.target/i386/avx512vl-pr94343.c
! 5ae95fe6d2833a79811d9c479abf0cb4  gcc/testsuite/gcc.target/i386/avx512vl-pr95046.c
! 5823e709c47340d86360a78ddb553c6e  gcc/testsuite/gcc.target/i386/avx512vl-pr95488-1.c
  653440f772c0c591ba73e65901da0239  gcc/testsuite/gcc.target/i386/avx512vl-pr95488-2.c
  616f945fddaa33d994cc18fe1ba4a02d  gcc/testsuite/gcc.target/i386/avx512vl-pr99321-1.c
  740d195d90879ded887268e753fa3b62  gcc/testsuite/gcc.target/i386/avx512vl-pr99321-2.c
*************** ccb846b28442adff8cddf40e762fc170  gcc/te
*** 61153,61161 ****
  7336e9978d33721a01aa6636a28803be  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c
  8e5dc0632852f73edd4b7c87c3ec1ffe  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-2.c
  34b199460d019bcceb635c7293b2d409  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequb-2.c
! a7017e6a015a7a922088dbe07205b9df  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequd-1.c
  f0a2df8cddbc2f20daee55cb96297234  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequd-2.c
! 6abca6647dac3c4767e883c73c8f59d5  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-1.c
  03e7c4974a7878b178447c16ccb6dd76  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-2.c
  7f137851a2723e3b5c577cac2fc00b60  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequw-2.c
  e0f1c020e31ed8abd688678278d910d7  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqw-2.c
--- 64177,64185 ----
  7336e9978d33721a01aa6636a28803be  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c
  8e5dc0632852f73edd4b7c87c3ec1ffe  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-2.c
  34b199460d019bcceb635c7293b2d409  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequb-2.c
! 1a6954454700b04bc8aeca6a560a5304  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequd-1.c
  f0a2df8cddbc2f20daee55cb96297234  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequd-2.c
! 7569fe5ed67a0b3a87cbf6bd8d8f20d8  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-1.c
  03e7c4974a7878b178447c16ccb6dd76  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-2.c
  7f137851a2723e3b5c577cac2fc00b60  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequw-2.c
  e0f1c020e31ed8abd688678278d910d7  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqw-2.c
*************** e6ee29155464ba4f854e36436c73e16b  gcc/te
*** 61224,61230 ****
  8ec8c403a7c77e812001c0126229d798  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpub-2.c
  b6ba8fad3a289081683cd42175ce01e3  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpud-1.c
  4f81ae5592b50f76ae301abaab860a72  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpud-2.c
! 39b73996d59513efad3b8deb139d10ee  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpuq-1.c
  0421f91a556804cea02c315ea567ddc6  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpuq-2.c
  f58201ac16ad74264db1d9335b90a003  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpuw-2.c
  3b93b5708b6a5857882fe8d951d1ac11  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpw-2.c
--- 64248,64254 ----
  8ec8c403a7c77e812001c0126229d798  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpub-2.c
  b6ba8fad3a289081683cd42175ce01e3  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpud-1.c
  4f81ae5592b50f76ae301abaab860a72  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpud-2.c
! a2c316e85cf1db765e9ee9a53ced388f  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpuq-1.c
  0421f91a556804cea02c315ea567ddc6  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpuq-2.c
  f58201ac16ad74264db1d9335b90a003  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpuw-2.c
  3b93b5708b6a5857882fe8d951d1ac11  gcc/testsuite/gcc.target/i386/avx512vl-vpcmpw-2.c
*************** dc7a6d4cbaa7836887ed3c7b6cbc50f2  gcc/te
*** 61497,61505 ****
  75d9ce991cfb8a9e6db2246de0128673  gcc/testsuite/gcc.target/i386/avx512vl-vpsubusb-2.c
  4774263d3a4d45862687d6028e9c5880  gcc/testsuite/gcc.target/i386/avx512vl-vpsubusw-2.c
  c321c52eb17786846f7aaaf65f51c13a  gcc/testsuite/gcc.target/i386/avx512vl-vpsubw-2.c
! f3c3b97edd774ea7d7b7003f94bebf71  gcc/testsuite/gcc.target/i386/avx512vl-vpternlogd-1.c
  ac6c7bc2ee7675dc70020738c525bf7d  gcc/testsuite/gcc.target/i386/avx512vl-vpternlogd-2.c
! c261417070e0446d11799ad51fb9666a  gcc/testsuite/gcc.target/i386/avx512vl-vpternlogq-1.c
  059629a7d865f0a7c9ee0875d5d00f0c  gcc/testsuite/gcc.target/i386/avx512vl-vpternlogq-2.c
  ade7f003c13ecf8ff0246939215f0e67  gcc/testsuite/gcc.target/i386/avx512vl-vptestmb-2.c
  677d94288d058fd718c84cc202029a07  gcc/testsuite/gcc.target/i386/avx512vl-vptestmd-1.c
--- 64521,64529 ----
  75d9ce991cfb8a9e6db2246de0128673  gcc/testsuite/gcc.target/i386/avx512vl-vpsubusb-2.c
  4774263d3a4d45862687d6028e9c5880  gcc/testsuite/gcc.target/i386/avx512vl-vpsubusw-2.c
  c321c52eb17786846f7aaaf65f51c13a  gcc/testsuite/gcc.target/i386/avx512vl-vpsubw-2.c
! feb04d21d63773c5ecef386b799243af  gcc/testsuite/gcc.target/i386/avx512vl-vpternlogd-1.c
  ac6c7bc2ee7675dc70020738c525bf7d  gcc/testsuite/gcc.target/i386/avx512vl-vpternlogd-2.c
! ab8c4eaba4ab18eaad12510c5062ff9d  gcc/testsuite/gcc.target/i386/avx512vl-vpternlogq-1.c
  059629a7d865f0a7c9ee0875d5d00f0c  gcc/testsuite/gcc.target/i386/avx512vl-vpternlogq-2.c
  ade7f003c13ecf8ff0246939215f0e67  gcc/testsuite/gcc.target/i386/avx512vl-vptestmb-2.c
  677d94288d058fd718c84cc202029a07  gcc/testsuite/gcc.target/i386/avx512vl-vptestmd-1.c
*************** c292ba048c97e84fe04aa26984af35f1  gcc/te
*** 61583,61604 ****
  91c9b414d4e752a1bdfcd70fc683eb70  gcc/testsuite/gcc.target/i386/avx512vl-vxorps-2.c
  5efa324ccb9a0b17dddba57ef3d4832a  gcc/testsuite/gcc.target/i386/avx512vl-xor-si-xmm-1.c
  5dd65f3a93c30a9885fc551a4cad76a4  gcc/testsuite/gcc.target/i386/avx512vl-xor-si-ymm-1.c
  e8b40df1b29caa7e7a5ad3533f175e18  gcc/testsuite/gcc.target/i386/avx512vlbw-pr82370.c
  3b56096e93a13615a8ca272bc3ed8e6c  gcc/testsuite/gcc.target/i386/avx512vlbw-pr85832.c
  b67b9c14f28f9a4e5c234829ea1ba329  gcc/testsuite/gcc.target/i386/avx512vlbw-pr94438.c
  d54fd157e5b9989a9c4a4011c92a6b85  gcc/testsuite/gcc.target/i386/avx512vnnivl-builtin.c
  3884f1876df0401f793a60b000e61533  gcc/testsuite/gcc.target/i386/avx512vp2intersect-2intersect-1a.c
  878146e3f3cbf3dfbffab0099a8ffcc8  gcc/testsuite/gcc.target/i386/avx512vp2intersect-2intersect-1b.c
  40c7b12c580899a9de2b14cc26dde852  gcc/testsuite/gcc.target/i386/avx512vp2intersect-2intersectvl-1a.c
  3b6707ddd210e2563e90997be09f362a  gcc/testsuite/gcc.target/i386/avx512vp2intersect-2intersectvl-1b.c
! 056609189c1c7f7f6e5abd483efe80db  gcc/testsuite/gcc.target/i386/avx512vpopcntdq-pr97770-1.c
  21e576e3034e9bebfd0582a15acd4af4  gcc/testsuite/gcc.target/i386/avx512vpopcntdq-pr97770-2.c
  4ee014789b932f3aea1da6e759de7e75  gcc/testsuite/gcc.target/i386/avx512vpopcntdq-vpopcntd-1.c
  848d7f2507183d53d35a08030c471c3e  gcc/testsuite/gcc.target/i386/avx512vpopcntdq-vpopcntd.c
  d8084141e791dfdf62ee3dc66173d458  gcc/testsuite/gcc.target/i386/avx512vpopcntdq-vpopcntq-1.c
  776a22660c657e8df374084201fce5f6  gcc/testsuite/gcc.target/i386/avx512vpopcntdq-vpopcntq.c
  625af58a48cf30c77cdd2892f64c3d9c  gcc/testsuite/gcc.target/i386/avx512vpopcntdqvl-pr97770-1.c
! fa2414b7f0b02ba46bfc1187b11b0120  gcc/testsuite/gcc.target/i386/avx512vpopcntdqvl-vpopcntd-1.c
  17d28bf7cef176269dc5873687b13c9f  gcc/testsuite/gcc.target/i386/avx512vpopcntdqvl-vpopcntq-1.c
  5da8354c1b0f081b6c64be550d4b604e  gcc/testsuite/gcc.target/i386/avxfp-1.c
  96da42bfb9b55e417c89693514ae20a6  gcc/testsuite/gcc.target/i386/avxfp-2.c
--- 64607,64635 ----
  91c9b414d4e752a1bdfcd70fc683eb70  gcc/testsuite/gcc.target/i386/avx512vl-vxorps-2.c
  5efa324ccb9a0b17dddba57ef3d4832a  gcc/testsuite/gcc.target/i386/avx512vl-xor-si-xmm-1.c
  5dd65f3a93c30a9885fc551a4cad76a4  gcc/testsuite/gcc.target/i386/avx512vl-xor-si-ymm-1.c
+ f0b797770a695bf8df1c84f9d1788052  gcc/testsuite/gcc.target/i386/avx512vlbw-pr100267-1.c
+ 6b99d925cfb1c3a73102340d54fa046f  gcc/testsuite/gcc.target/i386/avx512vlbw-pr100267-b-2.c
+ 12caadcc614ce695a59fb81977248f92  gcc/testsuite/gcc.target/i386/avx512vlbw-pr100267-d-2.c
+ 16de2ede7b14609816bb549d10fff2a3  gcc/testsuite/gcc.target/i386/avx512vlbw-pr100267-q-2.c
+ 2c71ba27ebf3918150b879849bdb162a  gcc/testsuite/gcc.target/i386/avx512vlbw-pr100267-w-2.c
  e8b40df1b29caa7e7a5ad3533f175e18  gcc/testsuite/gcc.target/i386/avx512vlbw-pr82370.c
  3b56096e93a13615a8ca272bc3ed8e6c  gcc/testsuite/gcc.target/i386/avx512vlbw-pr85832.c
  b67b9c14f28f9a4e5c234829ea1ba329  gcc/testsuite/gcc.target/i386/avx512vlbw-pr94438.c
+ a5154c35da99e437d07d50f9d09efde2  gcc/testsuite/gcc.target/i386/avx512vlfp16-11a.c
+ 9c6b6e093a081af180fd337112cf2708  gcc/testsuite/gcc.target/i386/avx512vlfp16-11b.c
  d54fd157e5b9989a9c4a4011c92a6b85  gcc/testsuite/gcc.target/i386/avx512vnnivl-builtin.c
  3884f1876df0401f793a60b000e61533  gcc/testsuite/gcc.target/i386/avx512vp2intersect-2intersect-1a.c
  878146e3f3cbf3dfbffab0099a8ffcc8  gcc/testsuite/gcc.target/i386/avx512vp2intersect-2intersect-1b.c
  40c7b12c580899a9de2b14cc26dde852  gcc/testsuite/gcc.target/i386/avx512vp2intersect-2intersectvl-1a.c
  3b6707ddd210e2563e90997be09f362a  gcc/testsuite/gcc.target/i386/avx512vp2intersect-2intersectvl-1b.c
! 1fd321b2abab51ce6e3b2ad72c5546ba  gcc/testsuite/gcc.target/i386/avx512vpopcntdq-pr97770-1.c
  21e576e3034e9bebfd0582a15acd4af4  gcc/testsuite/gcc.target/i386/avx512vpopcntdq-pr97770-2.c
  4ee014789b932f3aea1da6e759de7e75  gcc/testsuite/gcc.target/i386/avx512vpopcntdq-vpopcntd-1.c
  848d7f2507183d53d35a08030c471c3e  gcc/testsuite/gcc.target/i386/avx512vpopcntdq-vpopcntd.c
  d8084141e791dfdf62ee3dc66173d458  gcc/testsuite/gcc.target/i386/avx512vpopcntdq-vpopcntq-1.c
  776a22660c657e8df374084201fce5f6  gcc/testsuite/gcc.target/i386/avx512vpopcntdq-vpopcntq.c
  625af58a48cf30c77cdd2892f64c3d9c  gcc/testsuite/gcc.target/i386/avx512vpopcntdqvl-pr97770-1.c
! bd110cc98a6c83e36f31c6c68e28123c  gcc/testsuite/gcc.target/i386/avx512vpopcntdqvl-vpopcntd-1.c
  17d28bf7cef176269dc5873687b13c9f  gcc/testsuite/gcc.target/i386/avx512vpopcntdqvl-vpopcntq-1.c
  5da8354c1b0f081b6c64be550d4b604e  gcc/testsuite/gcc.target/i386/avxfp-1.c
  96da42bfb9b55e417c89693514ae20a6  gcc/testsuite/gcc.target/i386/avxfp-2.c
*************** f453ea0129a9fcdd06a9ec24524c1cb9  gcc/te
*** 61610,61618 ****
  1efa0c8157f05bec88ec14bf171c17de  gcc/testsuite/gcc.target/i386/bitwise_mask_op-1.c
  6f59afd7fbef39ba5e5377903ca13bdf  gcc/testsuite/gcc.target/i386/bitwise_mask_op-2.c
  e1228efcdb6bf353fa7c28bd12b9b98c  gcc/testsuite/gcc.target/i386/bitwise_mask_op-3.c
! ea47ac6447cb9ac4b28b5aaad9274158  gcc/testsuite/gcc.target/i386/bmi-1.c
! 26c6bd935da0376256720f101f3a197c  gcc/testsuite/gcc.target/i386/bmi-2.c
! fc48ef0f1e33b7021253ebb6122ab809  gcc/testsuite/gcc.target/i386/bmi-3.c
  5c41f4a1da9d179a1e082c5737b33e73  gcc/testsuite/gcc.target/i386/bmi-4.c
  e1078e35a7a7497108df50ca083222a3  gcc/testsuite/gcc.target/i386/bmi-5.c
  8894894c1ba9f24b192d80dff021404b  gcc/testsuite/gcc.target/i386/bmi-6.c
--- 64641,64651 ----
  1efa0c8157f05bec88ec14bf171c17de  gcc/testsuite/gcc.target/i386/bitwise_mask_op-1.c
  6f59afd7fbef39ba5e5377903ca13bdf  gcc/testsuite/gcc.target/i386/bitwise_mask_op-2.c
  e1228efcdb6bf353fa7c28bd12b9b98c  gcc/testsuite/gcc.target/i386/bitwise_mask_op-3.c
! be2f67968aaa0963cbb0968b7acbd1d6  gcc/testsuite/gcc.target/i386/blendv-1.c
! b12d3a3a3f5688f6e3fbce7f50575ff0  gcc/testsuite/gcc.target/i386/blendv-2.c
! d48291e93124a5754c399a0d42b8b4b2  gcc/testsuite/gcc.target/i386/bmi-1.c
! 61ff83566b9a04f15ec25ca39e4f2165  gcc/testsuite/gcc.target/i386/bmi-2.c
! ce48de8f7f303fa84891bd7841005fb1  gcc/testsuite/gcc.target/i386/bmi-3.c
  5c41f4a1da9d179a1e082c5737b33e73  gcc/testsuite/gcc.target/i386/bmi-4.c
  e1078e35a7a7497108df50ca083222a3  gcc/testsuite/gcc.target/i386/bmi-5.c
  8894894c1ba9f24b192d80dff021404b  gcc/testsuite/gcc.target/i386/bmi-6.c
*************** abfc3bf44b2c043835549280d718ed49  gcc/te
*** 61694,61699 ****
--- 64727,64735 ----
  d1b973f36a4fb5310a2535b0d664c5ad  gcc/testsuite/gcc.target/i386/bt-2.c
  1d50d712bf0ac39ac6b03ebef622b6d8  gcc/testsuite/gcc.target/i386/bt-3.c
  3aa4daf6799857b411ea2a0eef4d3517  gcc/testsuite/gcc.target/i386/bt-4.c
+ 67e7006a5471035f63fc1bc16b1ae584  gcc/testsuite/gcc.target/i386/bt-5.c
+ fcafca94a6ddec579b9fd4578f65246a  gcc/testsuite/gcc.target/i386/bt-6.c
+ 25e6ed4bc66962060462ab2c17189e9e  gcc/testsuite/gcc.target/i386/bt-7.c
  6dbb5dc871f1dd7658d1de2c1afb6157  gcc/testsuite/gcc.target/i386/bt-mask-1.c
  5c87482ed718acb45d6e0aa4764f8338  gcc/testsuite/gcc.target/i386/bt-mask-2.c
  1f88fce9add6e2963074b61473d3d63b  gcc/testsuite/gcc.target/i386/builtin-apply-mmx.c
*************** aa862ceda0d7a76c1857d703604c7cf7  gcc/te
*** 61707,61713 ****
  83540904d3592a74a85860a8850ad325  gcc/testsuite/gcc.target/i386/builtin-has-attribute.c
  07c7b1b786ccb4b67484b353aa40d9c7  gcc/testsuite/gcc.target/i386/builtin-ucmp.c
  c8f91a97e3f4734a3595572bab26a3e7  gcc/testsuite/gcc.target/i386/builtin-unreachable.c
! 49a06f8112b363fe26551f10adb98278  gcc/testsuite/gcc.target/i386/builtin_target.c
  5502489cd371c4d2b333eee65153eec7  gcc/testsuite/gcc.target/i386/builtin_thread_pointer.c
  4278b9cf349a82b327a03ec6fb2f2b43  gcc/testsuite/gcc.target/i386/cadd.c
  bcb496f917fb6dad4ebb0207c1334471  gcc/testsuite/gcc.target/i386/call-1.c
--- 64743,64749 ----
  83540904d3592a74a85860a8850ad325  gcc/testsuite/gcc.target/i386/builtin-has-attribute.c
  07c7b1b786ccb4b67484b353aa40d9c7  gcc/testsuite/gcc.target/i386/builtin-ucmp.c
  c8f91a97e3f4734a3595572bab26a3e7  gcc/testsuite/gcc.target/i386/builtin-unreachable.c
! a5b9a8d233b8f077360b763ca08d0a61  gcc/testsuite/gcc.target/i386/builtin_target.c
  5502489cd371c4d2b333eee65153eec7  gcc/testsuite/gcc.target/i386/builtin_thread_pointer.c
  4278b9cf349a82b327a03ec6fb2f2b43  gcc/testsuite/gcc.target/i386/cadd.c
  bcb496f917fb6dad4ebb0207c1334471  gcc/testsuite/gcc.target/i386/call-1.c
*************** b20d49e3df7ecba263d6a023f199461f  gcc/te
*** 61760,61767 ****
  5c3b7040795451a42f588086b955b02d  gcc/testsuite/gcc.target/i386/cf_check-4.c
  365b20e670ddcffaf52fe6a4f718095f  gcc/testsuite/gcc.target/i386/cf_check-5.c
  d236bc684017e128d2809e943a21a577  gcc/testsuite/gcc.target/i386/cldemote-1.c
! a8e9ce8b6a22abc5b5acbb36567e4c94  gcc/testsuite/gcc.target/i386/cleanup-1.c
! 19801ffa8ca9c434d1836b6ee2a66306  gcc/testsuite/gcc.target/i386/cleanup-2.c
  435604e493f239f0f49f36e71d4ae35d  gcc/testsuite/gcc.target/i386/clflushopt-1.c
  d4153e1bcf8bc5c311eaf09c93c16d08  gcc/testsuite/gcc.target/i386/clobbers.c
  3d40f7699a7e2394a57ca6dce12de1c2  gcc/testsuite/gcc.target/i386/clwb-1.c
--- 64796,64803 ----
  5c3b7040795451a42f588086b955b02d  gcc/testsuite/gcc.target/i386/cf_check-4.c
  365b20e670ddcffaf52fe6a4f718095f  gcc/testsuite/gcc.target/i386/cf_check-5.c
  d236bc684017e128d2809e943a21a577  gcc/testsuite/gcc.target/i386/cldemote-1.c
! 993cba0e31e78353b3247fbc2d6ab5e5  gcc/testsuite/gcc.target/i386/cleanup-1.c
! 661baae059c4a949fc8987d711d9be61  gcc/testsuite/gcc.target/i386/cleanup-2.c
  435604e493f239f0f49f36e71d4ae35d  gcc/testsuite/gcc.target/i386/clflushopt-1.c
  d4153e1bcf8bc5c311eaf09c93c16d08  gcc/testsuite/gcc.target/i386/clobbers.c
  3d40f7699a7e2394a57ca6dce12de1c2  gcc/testsuite/gcc.target/i386/clwb-1.c
*************** bcb4166cdef6b56e89b654dc4cb83a03  gcc/te
*** 61776,61782 ****
  f20d8e2e048a66edc93c5638ce3cd2d9  gcc/testsuite/gcc.target/i386/cmov8.c
  000f630353ad4e662a8123ff07c183c0  gcc/testsuite/gcc.target/i386/cmov9.c
  5e2242226bd3af93cef201caa25d8d86  gcc/testsuite/gcc.target/i386/cmpxchg16b-1.c
! d5160da87996f50ff94b4089d69af5b4  gcc/testsuite/gcc.target/i386/cold-attribute-1.c
  0167fa6749ad93cf0251a4b9260fbccd  gcc/testsuite/gcc.target/i386/cold-attribute-2.c
  c1eab7ffc4e6134b9c680fe0c2920314  gcc/testsuite/gcc.target/i386/cold-attribute-3.c
  dcc5b76590328fd9f7c421fcb66d52d6  gcc/testsuite/gcc.target/i386/cold-attribute-4.c
--- 64812,64818 ----
  f20d8e2e048a66edc93c5638ce3cd2d9  gcc/testsuite/gcc.target/i386/cmov8.c
  000f630353ad4e662a8123ff07c183c0  gcc/testsuite/gcc.target/i386/cmov9.c
  5e2242226bd3af93cef201caa25d8d86  gcc/testsuite/gcc.target/i386/cmpxchg16b-1.c
! b72099cd966e9c576a224799821d5d28  gcc/testsuite/gcc.target/i386/cold-attribute-1.c
  0167fa6749ad93cf0251a4b9260fbccd  gcc/testsuite/gcc.target/i386/cold-attribute-2.c
  c1eab7ffc4e6134b9c680fe0c2920314  gcc/testsuite/gcc.target/i386/cold-attribute-3.c
  dcc5b76590328fd9f7c421fcb66d52d6  gcc/testsuite/gcc.target/i386/cold-attribute-4.c
*************** dcc5b76590328fd9f7c421fcb66d52d6  gcc/te
*** 61785,61790 ****
--- 64821,64882 ----
  f5b6283707f17b1db37120fd03d9ecf7  gcc/testsuite/gcc.target/i386/compress-float-387.c
  cbcaefb9dbd680dfef9e1236e2a43de1  gcc/testsuite/gcc.target/i386/compress-float-sse-pic.c
  5c5437c61e3cff49ed9ee564589092af  gcc/testsuite/gcc.target/i386/compress-float-sse.c
+ 774af83131213db39d9e42e12d599674  gcc/testsuite/gcc.target/i386/cond_op_addsubmul_d-1.c
+ 045f395ba329d2cabca8b4804de2d5ab  gcc/testsuite/gcc.target/i386/cond_op_addsubmul_d-2.c
+ c23a7078a9045469a3a582ea8b664860  gcc/testsuite/gcc.target/i386/cond_op_addsubmul_q-1.c
+ 29cd185a9d0e7434c4fd8c82c1eefa1c  gcc/testsuite/gcc.target/i386/cond_op_addsubmul_q-2.c
+ f5f5c66924209e685c82a46994f3d310  gcc/testsuite/gcc.target/i386/cond_op_addsubmul_w-1.c
+ 42ce22a28396be64bc7b0773981691c5  gcc/testsuite/gcc.target/i386/cond_op_addsubmul_w-2.c
+ 383720ff15d3293cba71c123a04ab169  gcc/testsuite/gcc.target/i386/cond_op_addsubmuldiv__Float16-1.c
+ b40c7c605347df87c87a61bf826ce439  gcc/testsuite/gcc.target/i386/cond_op_addsubmuldiv__Float16-2.c
+ dce823f966d8d47c9b89e23d2e7214b6  gcc/testsuite/gcc.target/i386/cond_op_addsubmuldiv_double-1.c
+ 89f96d43e434f4e2bc3d3725e4f82379  gcc/testsuite/gcc.target/i386/cond_op_addsubmuldiv_double-2.c
+ ee306f3a52f44a8afad5e3560acbd5e6  gcc/testsuite/gcc.target/i386/cond_op_addsubmuldiv_float-1.c
+ e4b62a045600d64e58d92bc8c46c2907  gcc/testsuite/gcc.target/i386/cond_op_addsubmuldiv_float-2.c
+ ba687d5f0969a1762f2f418a183ccb65  gcc/testsuite/gcc.target/i386/cond_op_anylogic_d-1.c
+ 6de23ab119ee99a14c11f70c668d11ea  gcc/testsuite/gcc.target/i386/cond_op_anylogic_d-2.c
+ c37cf2a1f5a27530794222b17debde35  gcc/testsuite/gcc.target/i386/cond_op_anylogic_q-1.c
+ c682ab05b90ad3f160ff79df5082f353  gcc/testsuite/gcc.target/i386/cond_op_anylogic_q-2.c
+ 440c0601878ac889e7fc10e6cb22c1c6  gcc/testsuite/gcc.target/i386/cond_op_fma__Float16-1.c
+ e3ab2d9af81b59c0faacc977fd5a34f6  gcc/testsuite/gcc.target/i386/cond_op_fma__Float16-2.c
+ 06dce99ada8dda4c03bb4448d8aa1004  gcc/testsuite/gcc.target/i386/cond_op_fma_double-1.c
+ 75453693470fefab9a62bd0131b4185c  gcc/testsuite/gcc.target/i386/cond_op_fma_double-2.c
+ 4cba6edc254efa3c439796c8000225b6  gcc/testsuite/gcc.target/i386/cond_op_fma_float-1.c
+ 165e6fd20ee962e2971d137594f50f89  gcc/testsuite/gcc.target/i386/cond_op_fma_float-2.c
+ c2e535d214bdbde3825e8f6b85a605bc  gcc/testsuite/gcc.target/i386/cond_op_maxmin__Float16-1.c
+ 676e42d2f97c8351428536d8c46503f5  gcc/testsuite/gcc.target/i386/cond_op_maxmin__Float16-2.c
+ ca9fda6834661fb7d4dd6158bcbb3c86  gcc/testsuite/gcc.target/i386/cond_op_maxmin_b-1.c
+ 209ac14d217cd8dc780a46c747229785  gcc/testsuite/gcc.target/i386/cond_op_maxmin_b-2.c
+ bf74f1382c2adbcdc432165d3bb22310  gcc/testsuite/gcc.target/i386/cond_op_maxmin_d-1.c
+ 8821cc3a7ab513b015322ea268c944de  gcc/testsuite/gcc.target/i386/cond_op_maxmin_d-2.c
+ 62c3219b42a5047cba69a7ad82ffa75c  gcc/testsuite/gcc.target/i386/cond_op_maxmin_double-1.c
+ 0165adb65898c9a6d538d4fb847fce2e  gcc/testsuite/gcc.target/i386/cond_op_maxmin_double-2.c
+ 81a67337d6290c99e8820d64c6ca2ef2  gcc/testsuite/gcc.target/i386/cond_op_maxmin_float-1.c
+ 406c3491f256250378192610dc949468  gcc/testsuite/gcc.target/i386/cond_op_maxmin_float-2.c
+ 4d9c6224c6189ea0a3823ad11db358fd  gcc/testsuite/gcc.target/i386/cond_op_maxmin_q-1.c
+ 1626a4b00d49c8d182030f6de1c9359e  gcc/testsuite/gcc.target/i386/cond_op_maxmin_q-2.c
+ f09655a710e7d8f743a52460590fb7e9  gcc/testsuite/gcc.target/i386/cond_op_maxmin_ub-1.c
+ 841b77d017bef060794c902f12c4662d  gcc/testsuite/gcc.target/i386/cond_op_maxmin_ub-2.c
+ 3abdcd0e73facbc0d44c41d9c66ec092  gcc/testsuite/gcc.target/i386/cond_op_maxmin_ud-1.c
+ a624ecc6ad55c00744cc7479a41b013e  gcc/testsuite/gcc.target/i386/cond_op_maxmin_ud-2.c
+ 370cbf63ef6e11f8caa539f7333521ec  gcc/testsuite/gcc.target/i386/cond_op_maxmin_uq-1.c
+ 1cd4a0640d9c009b7bd9036acd28fca2  gcc/testsuite/gcc.target/i386/cond_op_maxmin_uq-2.c
+ 9b321096ddc1dd571550ecea59af43ff  gcc/testsuite/gcc.target/i386/cond_op_maxmin_uw-1.c
+ 607a156c5fbb5f7fbc1fc62504d8313c  gcc/testsuite/gcc.target/i386/cond_op_maxmin_uw-2.c
+ 1d98ff6ddb9a519a313942e1285f3f39  gcc/testsuite/gcc.target/i386/cond_op_maxmin_w-1.c
+ a041a47c0d060a13626e87e95e95dec3  gcc/testsuite/gcc.target/i386/cond_op_maxmin_w-2.c
+ 06f71debb8664e614ef07b38e8636e88  gcc/testsuite/gcc.target/i386/cond_op_shift_d-1.c
+ 7f1ceb4b292c3084e0d069f4b668a15e  gcc/testsuite/gcc.target/i386/cond_op_shift_d-2.c
+ 6e7a73c89aeeeb44357cf86928793ef9  gcc/testsuite/gcc.target/i386/cond_op_shift_q-1.c
+ 4cd1930b02e6784fccbe626cb06c210a  gcc/testsuite/gcc.target/i386/cond_op_shift_q-2.c
+ bfc87b8dbf2807918e6513dc6f484f57  gcc/testsuite/gcc.target/i386/cond_op_shift_ud-1.c
+ 5bb4dded7a8347833adbe0dfe971c29d  gcc/testsuite/gcc.target/i386/cond_op_shift_ud-2.c
+ cd9ef7962ff5bf0b678c169a4ae85ea8  gcc/testsuite/gcc.target/i386/cond_op_shift_uq-1.c
+ dab356ea11d5fa31aa2ad62b03eaba0e  gcc/testsuite/gcc.target/i386/cond_op_shift_uq-2.c
+ 4d9dea8d178b3ac2ddadb8211e6e9270  gcc/testsuite/gcc.target/i386/cond_op_shift_uw-1.c
+ 91bf73c2fd62790b28f15e1a555e949e  gcc/testsuite/gcc.target/i386/cond_op_shift_uw-2.c
+ d0c34e512b83cbc46667be5492815364  gcc/testsuite/gcc.target/i386/cond_op_shift_w-1.c
+ afdc9039171e569adb39b65867a89df3  gcc/testsuite/gcc.target/i386/cond_op_shift_w-2.c
  e1be9a615bd653f1910c323be509006e  gcc/testsuite/gcc.target/i386/const-in-bss.c
  09e05c9be2759d0d28e2c1d573b5b5c0  gcc/testsuite/gcc.target/i386/conversion.c
  46758c775ccdb73df90a9e3cde676f5e  gcc/testsuite/gcc.target/i386/crc32-1.c
*************** d54f2d3757317775b86d2e38b987ecec  gcc/te
*** 61792,61803 ****
  de30da9f8215170a20bb4d88e630e8ff  gcc/testsuite/gcc.target/i386/crc32-3.c
  ce70c4a119d14c06b2fe42a33e116033  gcc/testsuite/gcc.target/i386/crc32-4.c
  1ec829505141734f1abf4d2eb0a16629  gcc/testsuite/gcc.target/i386/crc32-5.c
! b5d1dd7060bf60ad394bcb85138c848c  gcc/testsuite/gcc.target/i386/crc32-6.c
  c8a0091af04c84c4c994bf5df34e424b  gcc/testsuite/gcc.target/i386/cvt-1.c
  5db7d4cef9479b58ccb87b9116809892  gcc/testsuite/gcc.target/i386/cvt-2.c
  9328f3eb46f550a80d11cc22163e9e4e  gcc/testsuite/gcc.target/i386/cvt-3.c
  e9a2f216f7d45cfefdc3ef6a604d2ff7  gcc/testsuite/gcc.target/i386/cvtpd2pi.c
  d2d0187aa51d4d382735be7c0cd27367  gcc/testsuite/gcc.target/i386/darwin-fpmath.c
  bfbac75bbc2903bc9ce6d39c53d89c68  gcc/testsuite/gcc.target/i386/defines-1.c
  73d516febd7b11c39305fc45aeb62e82  gcc/testsuite/gcc.target/i386/defines-2.c
  2eecfa056ddb99114b8e80c41ffda735  gcc/testsuite/gcc.target/i386/divmod-1.c
--- 64884,64898 ----
  de30da9f8215170a20bb4d88e630e8ff  gcc/testsuite/gcc.target/i386/crc32-3.c
  ce70c4a119d14c06b2fe42a33e116033  gcc/testsuite/gcc.target/i386/crc32-4.c
  1ec829505141734f1abf4d2eb0a16629  gcc/testsuite/gcc.target/i386/crc32-5.c
! 39663510ffe6121924493586558913c9  gcc/testsuite/gcc.target/i386/crc32-6.c
! e69b1c1cbd30b748e8f1a4ca9aebf536  gcc/testsuite/gcc.target/i386/crc32-7.c
  c8a0091af04c84c4c994bf5df34e424b  gcc/testsuite/gcc.target/i386/cvt-1.c
  5db7d4cef9479b58ccb87b9116809892  gcc/testsuite/gcc.target/i386/cvt-2.c
  9328f3eb46f550a80d11cc22163e9e4e  gcc/testsuite/gcc.target/i386/cvt-3.c
  e9a2f216f7d45cfefdc3ef6a604d2ff7  gcc/testsuite/gcc.target/i386/cvtpd2pi.c
  d2d0187aa51d4d382735be7c0cd27367  gcc/testsuite/gcc.target/i386/darwin-fpmath.c
+ 4e680f191d6ffc0c2e2a5e9d57645eff  gcc/testsuite/gcc.target/i386/dec-cmov-1.c
+ 2767f8d882f7c7f8cbbb3eb4d9ab00d2  gcc/testsuite/gcc.target/i386/dec-cmov-2.c
  bfbac75bbc2903bc9ce6d39c53d89c68  gcc/testsuite/gcc.target/i386/defines-1.c
  73d516febd7b11c39305fc45aeb62e82  gcc/testsuite/gcc.target/i386/defines-2.c
  2eecfa056ddb99114b8e80c41ffda735  gcc/testsuite/gcc.target/i386/divmod-1.c
*************** b70c3474dab5c950386d01ff0714762f  gcc/te
*** 61809,61815 ****
--- 64904,64913 ----
  59f98f44a737ace509fc5360cad59a9e  gcc/testsuite/gcc.target/i386/divmod-6.c
  3b3bc498b746dac2582ffb6c471e536a  gcc/testsuite/gcc.target/i386/divmod-7.c
  c17dcb330b42bada168342242008b99c  gcc/testsuite/gcc.target/i386/divmod-8.c
+ 50214a84695751ca534a2a2a8c755e17  gcc/testsuite/gcc.target/i386/divmod-9.c
  47d2b4328c009460a9b77a0a273daff7  gcc/testsuite/gcc.target/i386/double_mask_reg-1.c
+ 93f6822b252db75fcb99f54512f56fad  gcc/testsuite/gcc.target/i386/eh_return-1.c
+ b7607fa5a42dea41bcc58aa8fbc1b696  gcc/testsuite/gcc.target/i386/eh_return-2.c
  e0d22ed73421320d7f3bb70305094f77  gcc/testsuite/gcc.target/i386/endbr_immediate.c
  5d5c47e004c3ebf97d2da3489e7c9992  gcc/testsuite/gcc.target/i386/enqcmd.c
  f71b6a7495b0645d1ecb8db1b2f1958b  gcc/testsuite/gcc.target/i386/enqcmds.c
*************** dbf3cc9b53b5e2d78a16330cbb9137e5  gcc/te
*** 61845,61850 ****
--- 64943,64955 ----
  bd55fbb60894cd429f7fc93df2f43fee  gcc/testsuite/gcc.target/i386/float128-1.c
  706567a3c78ce7fec9f91ce88f6100bd  gcc/testsuite/gcc.target/i386/float128-2.c
  02d798a42a24e851bb36577bb0e02d26  gcc/testsuite/gcc.target/i386/float128-3.c
+ 6c05b41ed5269f384b57a1b73b6dccb8  gcc/testsuite/gcc.target/i386/float16-3a.c
+ 23e1c0c48f18a3b53ec28058cf1a4ffa  gcc/testsuite/gcc.target/i386/float16-3b.c
+ b52e5916ef9d3f89d0d8f84bc0d0e6b7  gcc/testsuite/gcc.target/i386/float16-4a.c
+ 153020147bfa9790bffcd9ddd2a47652  gcc/testsuite/gcc.target/i386/float16-4b.c
+ 865ba344a8422f876b53f19b67af2432  gcc/testsuite/gcc.target/i386/float16-5.c
+ d26033b8132dee10b43656238b9181fa  gcc/testsuite/gcc.target/i386/float16-6.c
+ 19e328f2a9fa3b07a854e35aff90c7ce  gcc/testsuite/gcc.target/i386/float16-7.c
  0a1a3539e0c385c56d2e79530e32ab69  gcc/testsuite/gcc.target/i386/fma-256-fmaddXX.c
  29a04ab3729933ba7af8c96d60044336  gcc/testsuite/gcc.target/i386/fma-256-fmaddsubXX.c
  0b0438d9da61899f597dfca4882dbb72  gcc/testsuite/gcc.target/i386/fma-256-fmsubXX.c
*************** c1320fd604803bc04257c984f1e3ba77  gcc/te
*** 61937,61950 ****
  3dd864a351a6115db6a5b2ea1ee16ece  gcc/testsuite/gcc.target/i386/funcspec-3.c
  5af0527c599bf95f77628d48b1beb0ec  gcc/testsuite/gcc.target/i386/funcspec-4.c
  7568c1249431aafb7f8e2610a1e4a35e  gcc/testsuite/gcc.target/i386/funcspec-5.c
! 664d8097f586c76b0f4c2f3767aa85dd  gcc/testsuite/gcc.target/i386/funcspec-56.inc
  6886186deb869f2b04be36492c05b8aa  gcc/testsuite/gcc.target/i386/funcspec-6.c
  35655de5c9348f2a36254312a8d17908  gcc/testsuite/gcc.target/i386/funcspec-7.c
! c5cbddeb1b01f35a7fa7f281fb2acdb4  gcc/testsuite/gcc.target/i386/funcspec-8.c
  98162f894173cc3f53a1739d65f4341d  gcc/testsuite/gcc.target/i386/funcspec-9.c
  3a08303eb38d70d9bd8e13a2c173ac97  gcc/testsuite/gcc.target/i386/fuse-caller-save-rec.c
  b24def76cda5e6910ee6d0acbaa240e6  gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm-run.c
! bf2ba8b379ebd6007b1d051966393d53  gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c
  2b0fb9cbf57f10cb2e97ffa7daa9ca55  gcc/testsuite/gcc.target/i386/fuse-caller-save.c
  374b8a1c71832c58fa214de004488fce  gcc/testsuite/gcc.target/i386/fxrstor-1.c
  4ba171e5929e217bf7404c8b2936f4dd  gcc/testsuite/gcc.target/i386/fxrstor64-1.c
--- 65042,65055 ----
  3dd864a351a6115db6a5b2ea1ee16ece  gcc/testsuite/gcc.target/i386/funcspec-3.c
  5af0527c599bf95f77628d48b1beb0ec  gcc/testsuite/gcc.target/i386/funcspec-4.c
  7568c1249431aafb7f8e2610a1e4a35e  gcc/testsuite/gcc.target/i386/funcspec-5.c
! f4a606946f43ef5c9080581bacc9cb73  gcc/testsuite/gcc.target/i386/funcspec-56.inc
  6886186deb869f2b04be36492c05b8aa  gcc/testsuite/gcc.target/i386/funcspec-6.c
  35655de5c9348f2a36254312a8d17908  gcc/testsuite/gcc.target/i386/funcspec-7.c
! 0ba9f1b7368ea580cabab541b451aea8  gcc/testsuite/gcc.target/i386/funcspec-8.c
  98162f894173cc3f53a1739d65f4341d  gcc/testsuite/gcc.target/i386/funcspec-9.c
  3a08303eb38d70d9bd8e13a2c173ac97  gcc/testsuite/gcc.target/i386/fuse-caller-save-rec.c
  b24def76cda5e6910ee6d0acbaa240e6  gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm-run.c
! 8dc27ba8c75a1a5d359626de491eecb5  gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c
  2b0fb9cbf57f10cb2e97ffa7daa9ca55  gcc/testsuite/gcc.target/i386/fuse-caller-save.c
  374b8a1c71832c58fa214de004488fce  gcc/testsuite/gcc.target/i386/fxrstor-1.c
  4ba171e5929e217bf7404c8b2936f4dd  gcc/testsuite/gcc.target/i386/fxrstor64-1.c
*************** d95f56a3f95ba78c3fdb5f418f8d953a  gcc/te
*** 61987,61994 ****
  c937938a0a49e70d699ee5ef70d33cb0  gcc/testsuite/gcc.target/i386/hle-xor-acq-1.c
  7aef940035776cbf7ecabc540f63e33e  gcc/testsuite/gcc.target/i386/hle-xor-rel-1.c
  6bb730f0122ef83efe1593372db950e5  gcc/testsuite/gcc.target/i386/hreset-1.c
! a6020162b1207dec1f78ff7901093fbd  gcc/testsuite/gcc.target/i386/i386.exp
! 2d69eb6ddebbb701ee0dbfa08d2eb6b8  gcc/testsuite/gcc.target/i386/iamcu/abi-iamcu.exp
  824179ec90e1e4fdb872aed133f8d523  gcc/testsuite/gcc.target/i386/iamcu/args.h
  75e691882a781a986cbf2b848eacc017  gcc/testsuite/gcc.target/i386/iamcu/asm-support.S
  a77c8e89ec538edb98eb4ac96da0db61  gcc/testsuite/gcc.target/i386/iamcu/defines.h
--- 65092,65099 ----
  c937938a0a49e70d699ee5ef70d33cb0  gcc/testsuite/gcc.target/i386/hle-xor-acq-1.c
  7aef940035776cbf7ecabc540f63e33e  gcc/testsuite/gcc.target/i386/hle-xor-rel-1.c
  6bb730f0122ef83efe1593372db950e5  gcc/testsuite/gcc.target/i386/hreset-1.c
! 377bf150fc4c2839d2f765b6cf328326  gcc/testsuite/gcc.target/i386/i386.exp
! e17d351aa14028c1f4015fc4bc97b4f1  gcc/testsuite/gcc.target/i386/iamcu/abi-iamcu.exp
  824179ec90e1e4fdb872aed133f8d523  gcc/testsuite/gcc.target/i386/iamcu/args.h
  75e691882a781a986cbf2b848eacc017  gcc/testsuite/gcc.target/i386/iamcu/asm-support.S
  a77c8e89ec538edb98eb4ac96da0db61  gcc/testsuite/gcc.target/i386/iamcu/defines.h
*************** b9fe9d47303c04eb3addd78ed747270a  gcc/te
*** 62012,62021 ****
  f508e2c1d144c2c5c11dc60aaf9d08cc  gcc/testsuite/gcc.target/i386/iamcu/test_struct_returning.c
  b6c1af324fa0e840c1c6dc306c27271e  gcc/testsuite/gcc.target/i386/iamcu/test_varargs.c
  ca32887018712b14ffe3bead48a9d143  gcc/testsuite/gcc.target/i386/ifcvt-onecmpl-abs-1.c
  af0e32f53ec629289269248abb106c2e  gcc/testsuite/gcc.target/i386/iinline-attr-2.c
  05bb360a025eed6dd019b28ad5032c23  gcc/testsuite/gcc.target/i386/incoming-1.c
  4770d945ceafa0ce8aaebccfb7094734  gcc/testsuite/gcc.target/i386/incoming-10.c
! 7f0568315636d0a94832eee0b10ca3d9  gcc/testsuite/gcc.target/i386/incoming-11.c
  4b4580d60e358abb74062e94f0e712e1  gcc/testsuite/gcc.target/i386/incoming-12.c
  72ac2af7b6235bafbd46f9699618c0f9  gcc/testsuite/gcc.target/i386/incoming-13.c
  633986fa44e25f526d5e6d52a2c0ddd7  gcc/testsuite/gcc.target/i386/incoming-14.c
--- 65117,65127 ----
  f508e2c1d144c2c5c11dc60aaf9d08cc  gcc/testsuite/gcc.target/i386/iamcu/test_struct_returning.c
  b6c1af324fa0e840c1c6dc306c27271e  gcc/testsuite/gcc.target/i386/iamcu/test_varargs.c
  ca32887018712b14ffe3bead48a9d143  gcc/testsuite/gcc.target/i386/ifcvt-onecmpl-abs-1.c
+ e200d48b18e79edb3fcc2d27d28a1494  gcc/testsuite/gcc.target/i386/ifcvt-reduction-logic-op.c
  af0e32f53ec629289269248abb106c2e  gcc/testsuite/gcc.target/i386/iinline-attr-2.c
  05bb360a025eed6dd019b28ad5032c23  gcc/testsuite/gcc.target/i386/incoming-1.c
  4770d945ceafa0ce8aaebccfb7094734  gcc/testsuite/gcc.target/i386/incoming-10.c
! d5a7eb692967aacaf96e66aec630cd95  gcc/testsuite/gcc.target/i386/incoming-11.c
  4b4580d60e358abb74062e94f0e712e1  gcc/testsuite/gcc.target/i386/incoming-12.c
  72ac2af7b6235bafbd46f9699618c0f9  gcc/testsuite/gcc.target/i386/incoming-13.c
  633986fa44e25f526d5e6d52a2c0ddd7  gcc/testsuite/gcc.target/i386/incoming-14.c
*************** b717775fdf3fe009b8d77efe1fb114b4  gcc/te
*** 62111,62118 ****
  acfd195237a4ce2a0cc03304f4873e80  gcc/testsuite/gcc.target/i386/interrupt-iamcu.c
  bb763a0c4d76af07026d968cf1d02bea  gcc/testsuite/gcc.target/i386/interrupt-mmx-err-1.c
  ff06f4afb4db5b2d04ccdae366509044  gcc/testsuite/gcc.target/i386/interrupt-mmx-err-2.c
! 0778faf992f94f476eefe9a2e011ef4f  gcc/testsuite/gcc.target/i386/interrupt-redzone-1.c
! feba796d65294c45050a01bfed78f695  gcc/testsuite/gcc.target/i386/interrupt-redzone-2.c
  ed2527142bbeaa4b7935d11f68f20123  gcc/testsuite/gcc.target/i386/interrupt-sibcall-1.c
  c30422ca4b564f98ddf9f8b1c05235c1  gcc/testsuite/gcc.target/i386/interrupt-sibcall-2.c
  fe1a7c3c2cc52526aacb705e0a57abe5  gcc/testsuite/gcc.target/i386/interrupt-switch-abi.c
--- 65217,65224 ----
  acfd195237a4ce2a0cc03304f4873e80  gcc/testsuite/gcc.target/i386/interrupt-iamcu.c
  bb763a0c4d76af07026d968cf1d02bea  gcc/testsuite/gcc.target/i386/interrupt-mmx-err-1.c
  ff06f4afb4db5b2d04ccdae366509044  gcc/testsuite/gcc.target/i386/interrupt-mmx-err-2.c
! aa03cf3373b1757706a05c88953d73dd  gcc/testsuite/gcc.target/i386/interrupt-redzone-1.c
! e723a55ce132023ea9d856b7be9868eb  gcc/testsuite/gcc.target/i386/interrupt-redzone-2.c
  ed2527142bbeaa4b7935d11f68f20123  gcc/testsuite/gcc.target/i386/interrupt-sibcall-1.c
  c30422ca4b564f98ddf9f8b1c05235c1  gcc/testsuite/gcc.target/i386/interrupt-sibcall-2.c
  fe1a7c3c2cc52526aacb705e0a57abe5  gcc/testsuite/gcc.target/i386/interrupt-switch-abi.c
*************** d8f5233e50dda438e50d5284e6d51493  gcc/te
*** 62147,62160 ****
  aba6d2eff079b06e7cd71c9e907153e1  gcc/testsuite/gcc.target/i386/isa-8.c
  4f5df60f63e0d796793892096ab64858  gcc/testsuite/gcc.target/i386/isa-9.c
  e1e7267fec37636815e8272359b19e18  gcc/testsuite/gcc.target/i386/isa-check.h
! e664643895393c6a8529d34ccab59937  gcc/testsuite/gcc.target/i386/keylocker-aesdec128kl.c
! 9beb199a2e38b400b4452951b9257de0  gcc/testsuite/gcc.target/i386/keylocker-aesdec256kl.c
! 744fbff1452e35f3cd8f6e4742957f88  gcc/testsuite/gcc.target/i386/keylocker-aesdecwide128kl.c
! edae4790e572f5f384f3fd53bc16f930  gcc/testsuite/gcc.target/i386/keylocker-aesdecwide256kl.c
! c89ecd0f9931568f536dc071eea76350  gcc/testsuite/gcc.target/i386/keylocker-aesenc128kl.c
! 380986fccfc94de2053cb58bda652e65  gcc/testsuite/gcc.target/i386/keylocker-aesenc256kl.c
! 82f0c1688e98d57bb5b380c9b834d5f5  gcc/testsuite/gcc.target/i386/keylocker-aesencwide128kl.c
! bce5027ed86913143560e79cc6a745fe  gcc/testsuite/gcc.target/i386/keylocker-aesencwide256kl.c
  4c4a88b13cbf3c58c70ad98c32a8879d  gcc/testsuite/gcc.target/i386/keylocker-encodekey128.c
  5d4d1e811f69626e9becd2b2c2a1c6d6  gcc/testsuite/gcc.target/i386/keylocker-encodekey256.c
  78393ec91600382e98db57e560deaea9  gcc/testsuite/gcc.target/i386/keylocker-loadiwkey.c
--- 65253,65266 ----
  aba6d2eff079b06e7cd71c9e907153e1  gcc/testsuite/gcc.target/i386/isa-8.c
  4f5df60f63e0d796793892096ab64858  gcc/testsuite/gcc.target/i386/isa-9.c
  e1e7267fec37636815e8272359b19e18  gcc/testsuite/gcc.target/i386/isa-check.h
! 65d088e6c80d576745db2b97808153d0  gcc/testsuite/gcc.target/i386/keylocker-aesdec128kl.c
! 3f797e1e0510f8b7a3d1cb266bd34b05  gcc/testsuite/gcc.target/i386/keylocker-aesdec256kl.c
! c1df16373f27617a0c52dc119835a641  gcc/testsuite/gcc.target/i386/keylocker-aesdecwide128kl.c
! f1728b5e83b3ce3c8eaebf907d52fe30  gcc/testsuite/gcc.target/i386/keylocker-aesdecwide256kl.c
! 20cc66c33612b34dc60f7990ce4a8778  gcc/testsuite/gcc.target/i386/keylocker-aesenc128kl.c
! 7d6318be1e679ff633411e06bdf9bc8b  gcc/testsuite/gcc.target/i386/keylocker-aesenc256kl.c
! 365be795bdc65acb8232f4fc0f710d08  gcc/testsuite/gcc.target/i386/keylocker-aesencwide128kl.c
! 599484c2f5122d14ad244cba89c2c0e0  gcc/testsuite/gcc.target/i386/keylocker-aesencwide256kl.c
  4c4a88b13cbf3c58c70ad98c32a8879d  gcc/testsuite/gcc.target/i386/keylocker-encodekey128.c
  5d4d1e811f69626e9becd2b2c2a1c6d6  gcc/testsuite/gcc.target/i386/keylocker-encodekey256.c
  78393ec91600382e98db57e560deaea9  gcc/testsuite/gcc.target/i386/keylocker-loadiwkey.c
*************** e5ecd53e0c76cc760ad01be1a9813369  gcc/te
*** 62234,62245 ****
  0278e689423a85f079aa4efe29d3f7df  gcc/testsuite/gcc.target/i386/lzcnt-6.c
  274f13534767ce3526a2ede5545e1f4e  gcc/testsuite/gcc.target/i386/lzcnt-6a.c
  8f3404abf42d3a0727735c75aab263db  gcc/testsuite/gcc.target/i386/lzcnt-check.h
! a86d743787dffa40bb906efb191264a2  gcc/testsuite/gcc.target/i386/m128-check.h
  4bf99318eb20a83c624941a47bfe86ad  gcc/testsuite/gcc.target/i386/m256-1.c
  e259d35e40662e2b47b740df3c6dba01  gcc/testsuite/gcc.target/i386/m256-2.c
  591de584cad41e9b66a3be285edd0937  gcc/testsuite/gcc.target/i386/m256-check.h
! 03b6da5da7ef82a20d86792f00e25003  gcc/testsuite/gcc.target/i386/m512-check.h
  05d056ee8da06b7cd789ad1baf16efb0  gcc/testsuite/gcc.target/i386/mask-pack.c
  51e6a5e239bab889631495c5d9329866  gcc/testsuite/gcc.target/i386/mask-unpack.c
  b16e49c611dcfbad5115fdfc182bbab9  gcc/testsuite/gcc.target/i386/math-torture/ceil.c
  a697ff9e2f8fc0bffc90007a1118893e  gcc/testsuite/gcc.target/i386/math-torture/floor.c
--- 65340,65354 ----
  0278e689423a85f079aa4efe29d3f7df  gcc/testsuite/gcc.target/i386/lzcnt-6.c
  274f13534767ce3526a2ede5545e1f4e  gcc/testsuite/gcc.target/i386/lzcnt-6a.c
  8f3404abf42d3a0727735c75aab263db  gcc/testsuite/gcc.target/i386/lzcnt-check.h
! 02a5f6d87ca840f7a3a7d2a8a9a188e5  gcc/testsuite/gcc.target/i386/m128-check.h
  4bf99318eb20a83c624941a47bfe86ad  gcc/testsuite/gcc.target/i386/m256-1.c
  e259d35e40662e2b47b740df3c6dba01  gcc/testsuite/gcc.target/i386/m256-2.c
  591de584cad41e9b66a3be285edd0937  gcc/testsuite/gcc.target/i386/m256-check.h
! 81bc8ed761041d9cd69c45d5aa497e15  gcc/testsuite/gcc.target/i386/m512-check.h
! f9f0011b6a2c53b25066b478d243973a  gcc/testsuite/gcc.target/i386/mask-pack-prefer128.c
! a03621f2e3833a1c8b997cdfa1434bd2  gcc/testsuite/gcc.target/i386/mask-pack-prefer256.c
  05d056ee8da06b7cd789ad1baf16efb0  gcc/testsuite/gcc.target/i386/mask-pack.c
+ 96d1d1776c6050470c825cfe36cb4d10  gcc/testsuite/gcc.target/i386/mask-shift.c
  51e6a5e239bab889631495c5d9329866  gcc/testsuite/gcc.target/i386/mask-unpack.c
  b16e49c611dcfbad5115fdfc182bbab9  gcc/testsuite/gcc.target/i386/math-torture/ceil.c
  a697ff9e2f8fc0bffc90007a1118893e  gcc/testsuite/gcc.target/i386/math-torture/floor.c
*************** a697ff9e2f8fc0bffc90007a1118893e  gcc/te
*** 62247,62253 ****
  2b719a429ba467512cb34ad73352ab1f  gcc/testsuite/gcc.target/i386/math-torture/lfloor.c
  90c0fcbde458b9688e1e20332b2f1308  gcc/testsuite/gcc.target/i386/math-torture/lrint.c
  75c95d53b12109ed3e501ca632f0035d  gcc/testsuite/gcc.target/i386/math-torture/lround.c
! b1b791f838aad5a5a033e47c8330d958  gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp
  b8987de7098b84e004093b3d86b59425  gcc/testsuite/gcc.target/i386/math-torture/nearbyint.c
  9b512770257f2687cde1774f56f4d64d  gcc/testsuite/gcc.target/i386/math-torture/rint.c
  29b89b8d60fbc8ee9eb2fb986ae17c23  gcc/testsuite/gcc.target/i386/math-torture/round.c
--- 65356,65362 ----
  2b719a429ba467512cb34ad73352ab1f  gcc/testsuite/gcc.target/i386/math-torture/lfloor.c
  90c0fcbde458b9688e1e20332b2f1308  gcc/testsuite/gcc.target/i386/math-torture/lrint.c
  75c95d53b12109ed3e501ca632f0035d  gcc/testsuite/gcc.target/i386/math-torture/lround.c
! 8e5c9281f2075464336be38f9e573823  gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp
  b8987de7098b84e004093b3d86b59425  gcc/testsuite/gcc.target/i386/math-torture/nearbyint.c
  9b512770257f2687cde1774f56f4d64d  gcc/testsuite/gcc.target/i386/math-torture/rint.c
  29b89b8d60fbc8ee9eb2fb986ae17c23  gcc/testsuite/gcc.target/i386/math-torture/round.c
*************** cda0d89452347311cc45a79be2d8f0fc  gcc/te
*** 62260,62271 ****
  536862ceddae932e3d7da830f0866d31  gcc/testsuite/gcc.target/i386/memcpy-3.c
  27b4fc4c0b0ecbd4614a4e9af86a6a18  gcc/testsuite/gcc.target/i386/memcpy-pr95886.c
  b5176a7f12717b0fd4c9162a139871e9  gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c
! 003de97b3734d5ede529657973ce1244  gcc/testsuite/gcc.target/i386/memcpy-strategy-10.c
  619cbc26dc85de4ded3f5a985d0a23a2  gcc/testsuite/gcc.target/i386/memcpy-strategy-11.c
  b001554c0c381f992911b1e7a465a6b8  gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c
  18088286a0546a409434dcbafef0a896  gcc/testsuite/gcc.target/i386/memcpy-strategy-3.c
  6e857b4eb94b8707c380e73efcbc5a51  gcc/testsuite/gcc.target/i386/memcpy-strategy-4.c
! 43417cd5f782058c791740ffeb9e17bf  gcc/testsuite/gcc.target/i386/memcpy-strategy-5.c
  06d71d8673062b30f1a1db1bdfb0f639  gcc/testsuite/gcc.target/i386/memcpy-strategy-6.c
  ee6163f62ab711d692467ababe19d6e8  gcc/testsuite/gcc.target/i386/memcpy-strategy-7.c
  340d39f8d8ef39d53004ab646169990b  gcc/testsuite/gcc.target/i386/memcpy-strategy-8.c
--- 65369,65380 ----
  536862ceddae932e3d7da830f0866d31  gcc/testsuite/gcc.target/i386/memcpy-3.c
  27b4fc4c0b0ecbd4614a4e9af86a6a18  gcc/testsuite/gcc.target/i386/memcpy-pr95886.c
  b5176a7f12717b0fd4c9162a139871e9  gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c
! b82d9188c52a269893b5ac6b25f9e515  gcc/testsuite/gcc.target/i386/memcpy-strategy-10.c
  619cbc26dc85de4ded3f5a985d0a23a2  gcc/testsuite/gcc.target/i386/memcpy-strategy-11.c
  b001554c0c381f992911b1e7a465a6b8  gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c
  18088286a0546a409434dcbafef0a896  gcc/testsuite/gcc.target/i386/memcpy-strategy-3.c
  6e857b4eb94b8707c380e73efcbc5a51  gcc/testsuite/gcc.target/i386/memcpy-strategy-4.c
! 1d25fe95e37e523bbb1237cd2cfdcc7a  gcc/testsuite/gcc.target/i386/memcpy-strategy-5.c
  06d71d8673062b30f1a1db1bdfb0f639  gcc/testsuite/gcc.target/i386/memcpy-strategy-6.c
  ee6163f62ab711d692467ababe19d6e8  gcc/testsuite/gcc.target/i386/memcpy-strategy-7.c
  340d39f8d8ef39d53004ab646169990b  gcc/testsuite/gcc.target/i386/memcpy-strategy-8.c
*************** c84ec8a2cd4608e33d447c561108ce97  gcc/te
*** 62277,62285 ****
  e34fc4954adf255e63dd959604f68e95  gcc/testsuite/gcc.target/i386/memset-strategy-2.c
  ab2b88f0bcce4626b92af0e20a2b1f62  gcc/testsuite/gcc.target/i386/memset-strategy-3.c
  20e5e2cabbded0b26bce978e68dfb2f0  gcc/testsuite/gcc.target/i386/memset-strategy-4.c
! 208260a991f7d1fc158f74981156e4ae  gcc/testsuite/gcc.target/i386/memset-strategy-5.c
  260e12efd7f892d89efa62914317673f  gcc/testsuite/gcc.target/i386/memset-strategy-6.c
! 71b4b158f262383324df8c888d6c9e70  gcc/testsuite/gcc.target/i386/memset-strategy-7.c
  1af29c0ee5e0fa8803b6dd0354a23dee  gcc/testsuite/gcc.target/i386/memset-strategy-8.c
  ff0a702aa0efe0f21e105da81c274eb6  gcc/testsuite/gcc.target/i386/memset-strategy-9.c
  abacd2e1491b7c40915d4be18c0229b4  gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c
--- 65386,65394 ----
  e34fc4954adf255e63dd959604f68e95  gcc/testsuite/gcc.target/i386/memset-strategy-2.c
  ab2b88f0bcce4626b92af0e20a2b1f62  gcc/testsuite/gcc.target/i386/memset-strategy-3.c
  20e5e2cabbded0b26bce978e68dfb2f0  gcc/testsuite/gcc.target/i386/memset-strategy-4.c
! fad1f723fea113cd6e9ed9c154a8ac50  gcc/testsuite/gcc.target/i386/memset-strategy-5.c
  260e12efd7f892d89efa62914317673f  gcc/testsuite/gcc.target/i386/memset-strategy-6.c
! 1dd9248dd03293c1a1b721052bea480b  gcc/testsuite/gcc.target/i386/memset-strategy-7.c
  1af29c0ee5e0fa8803b6dd0354a23dee  gcc/testsuite/gcc.target/i386/memset-strategy-8.c
  ff0a702aa0efe0f21e105da81c274eb6  gcc/testsuite/gcc.target/i386/memset-strategy-9.c
  abacd2e1491b7c40915d4be18c0229b4  gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c
*************** de3950b0d3ffe8898e7b6973a7658470  gcc/te
*** 62307,62312 ****
--- 65416,65423 ----
  59e9f34a0c53e0ef7cf40e71d6716b9e  gcc/testsuite/gcc.target/i386/mmx-7.c
  00fbe344393baecd920fc297da210b6b  gcc/testsuite/gcc.target/i386/mmx-8.c
  acfecf30891fca26ef446ceccb8bdac6  gcc/testsuite/gcc.target/i386/mmx-check.h
+ 47a1dc84b0c05efd499d520eac9baa9a  gcc/testsuite/gcc.target/i386/mmx-reduce-op-1.c
+ 8901dff11a413c6b54f140239baed91a  gcc/testsuite/gcc.target/i386/mmx-reduce-op-2.c
  0a65792c72af263292faea7e50a21898  gcc/testsuite/gcc.target/i386/mmx-vals.h
  3469a132e934293324b61b6f23458c92  gcc/testsuite/gcc.target/i386/mod-1.c
  d62bb9cf4ad6df8368739ed5447f4acb  gcc/testsuite/gcc.target/i386/monitor-2.c
*************** c6304e928bcf1393de99639a142057ad  gcc/te
*** 62331,62336 ****
--- 65442,65448 ----
  2376b08fdef000cf037280264f5437fb  gcc/testsuite/gcc.target/i386/mpx.c
  05b06b2c30d6910a0afec51d588f2c21  gcc/testsuite/gcc.target/i386/ms_hook_prologue.c
  0e6e9e397831921b702df0167f01b9d2  gcc/testsuite/gcc.target/i386/mul.c
+ 3f03c366747891821238a2834cb47c5d  gcc/testsuite/gcc.target/i386/mult-highpart.c
  6214909c5cebe3099403b30910bbf1f6  gcc/testsuite/gcc.target/i386/mvc1.c
  98fd97ce23f7773af3c39c137882bd08  gcc/testsuite/gcc.target/i386/mvc10.c
  6d3409829bf86a77e769e767e92d4f44  gcc/testsuite/gcc.target/i386/mvc11.c
*************** c6304e928bcf1393de99639a142057ad  gcc/te
*** 62338,62349 ****
  b37f306ab147d6fbfd89376226165e2f  gcc/testsuite/gcc.target/i386/mvc13.c
  2b02ee46ed233dc14d5b15819cfff28b  gcc/testsuite/gcc.target/i386/mvc14.c
  0dbd1cf7be9a494f5666af53dffb29c8  gcc/testsuite/gcc.target/i386/mvc15.c
  564e05556bd7de96a3147d7330c78901  gcc/testsuite/gcc.target/i386/mvc2.c
  81972b6ec7b16a2464f2f27fb8863604  gcc/testsuite/gcc.target/i386/mvc3.c
  b1d4c5cfd15d435b380b98085cd82466  gcc/testsuite/gcc.target/i386/mvc4.c
! f1c5e85f0666bfee3b907279ee87147f  gcc/testsuite/gcc.target/i386/mvc5.c
  3c42a6c268da49c39ff71a06b88da4d9  gcc/testsuite/gcc.target/i386/mvc6.c
! 426cbce4bef92ab8e069549db2ebb33b  gcc/testsuite/gcc.target/i386/mvc7.c
  e4d2dd951186c493cd025e4b5e976fa1  gcc/testsuite/gcc.target/i386/mvc8.c
  7ae0694e7bb3605c7b05ed3e6ee19600  gcc/testsuite/gcc.target/i386/mvc9.c
  be0d97ad0e48f00567936ea3449b3b79  gcc/testsuite/gcc.target/i386/naked-1.c
--- 65450,65462 ----
  b37f306ab147d6fbfd89376226165e2f  gcc/testsuite/gcc.target/i386/mvc13.c
  2b02ee46ed233dc14d5b15819cfff28b  gcc/testsuite/gcc.target/i386/mvc14.c
  0dbd1cf7be9a494f5666af53dffb29c8  gcc/testsuite/gcc.target/i386/mvc15.c
+ e302a983fa569ca9c52105401b06e054  gcc/testsuite/gcc.target/i386/mvc16.c
  564e05556bd7de96a3147d7330c78901  gcc/testsuite/gcc.target/i386/mvc2.c
  81972b6ec7b16a2464f2f27fb8863604  gcc/testsuite/gcc.target/i386/mvc3.c
  b1d4c5cfd15d435b380b98085cd82466  gcc/testsuite/gcc.target/i386/mvc4.c
! e9719dc09a8623c4469196f154f1eb0b  gcc/testsuite/gcc.target/i386/mvc5.c
  3c42a6c268da49c39ff71a06b88da4d9  gcc/testsuite/gcc.target/i386/mvc6.c
! 386d89b41c4e5d5ccfc2ef9ca1c33f46  gcc/testsuite/gcc.target/i386/mvc7.c
  e4d2dd951186c493cd025e4b5e976fa1  gcc/testsuite/gcc.target/i386/mvc8.c
  7ae0694e7bb3605c7b05ed3e6ee19600  gcc/testsuite/gcc.target/i386/mvc9.c
  be0d97ad0e48f00567936ea3449b3b79  gcc/testsuite/gcc.target/i386/naked-1.c
*************** ec64d74d91ed819f110fdc6f8f90197e  gcc/te
*** 62402,62453 ****
  9f8568a66133d16283b57d8a97c3dc49  gcc/testsuite/gcc.target/i386/pie-copyrelocs-4.c
  f91cf99532e69c383485f6be3f62eb99  gcc/testsuite/gcc.target/i386/pie.c
  5d062b099437fb64de565760ffa381a8  gcc/testsuite/gcc.target/i386/pieces-memcpy-1.c
  279c04d20615905ca5bf2f44eb5a231d  gcc/testsuite/gcc.target/i386/pieces-memcpy-2.c
  2820c9b91ec98c38843764eea07d4b75  gcc/testsuite/gcc.target/i386/pieces-memcpy-3.c
  698986063dd5ba005476ca849de14359  gcc/testsuite/gcc.target/i386/pieces-memcpy-4.c
  5e90eca9009d511850fb8fc840c7e236  gcc/testsuite/gcc.target/i386/pieces-memcpy-5.c
  592f55f6e3184576f7ecadf1df7171df  gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c
  b1d366c21cfdcfacf9854ed6cbfd7bc3  gcc/testsuite/gcc.target/i386/pieces-strcpy-1.c
  52e52549556117888f85f13d26ced39b  gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c
  13d06bee88f2ccd2a16effe0c243e61e  gcc/testsuite/gcc.target/i386/pow-1.c
  08e64611506eb827fa5c5f614b29322b  gcc/testsuite/gcc.target/i386/pr100066.c
  f6d11dafd312969f2c744769fa5060e7  gcc/testsuite/gcc.target/i386/pr100182.c
  551896bd44fd8f6d014f841aef67c558  gcc/testsuite/gcc.target/i386/pr100310.c
  3c07d29535c0112e7c384c8908011917  gcc/testsuite/gcc.target/i386/pr100342.c
  f8c6587e64861b8f769159de826acd76  gcc/testsuite/gcc.target/i386/pr101175.c
  02f2ef63ed2a0eb2d5d9b96519faa0d1  gcc/testsuite/gcc.target/i386/pr101261.c
  288aa84588c0af5a00643021d4506391  gcc/testsuite/gcc.target/i386/pr101395-1.c
  e464a56984a9759820818b1e51f316d7  gcc/testsuite/gcc.target/i386/pr101395-2.c
  e0bc688540cd8ed83ce6df81886303a5  gcc/testsuite/gcc.target/i386/pr101395-3.c
  4fde066e03dfe2d7fb8ae82e5a8f6f43  gcc/testsuite/gcc.target/i386/pr101492-1.c
  3e32ab2ceda5c1f6364c7e258951092c  gcc/testsuite/gcc.target/i386/pr101492-2.c
  6a033f94694c14382da16121484a5059  gcc/testsuite/gcc.target/i386/pr101492-3.c
  2a7216d43f3ffddb5fc3d62af8e5a895  gcc/testsuite/gcc.target/i386/pr101492-4.c
  4f610ba3f94dc4f52aa642107694f970  gcc/testsuite/gcc.target/i386/pr102498.c
  53e87cba1a4282f640d05ef1fee359c4  gcc/testsuite/gcc.target/i386/pr102627.c
  34eb3ca8ee784a5cb3c2145b1609e105  gcc/testsuite/gcc.target/i386/pr102761.c
  bcf207e15c0d5b9e3168e3c570bc4999  gcc/testsuite/gcc.target/i386/pr103205.c
! 68f90c5e301011c092f2f9057e8416f1  gcc/testsuite/gcc.target/i386/pr103275.c
  5fbee8826b1f4da8d9dd6a2f09f18e0e  gcc/testsuite/gcc.target/i386/pr103908.c
  53c36359ec9f2e689c1bd9882aaa6e38  gcc/testsuite/gcc.target/i386/pr104188.c
  a4a622986785e6f70969c2a502ed82b5  gcc/testsuite/gcc.target/i386/pr104307.c
  63ce798253abf6c855847d44c00a0999  gcc/testsuite/gcc.target/i386/pr104362.c
  9db2b13a34fc86475d27728a925461c5  gcc/testsuite/gcc.target/i386/pr104446.c
  02696130cc1ac504d964566b605a5294  gcc/testsuite/gcc.target/i386/pr104448.c
  9afbd8cbff177a7e555fe32de7558c2e  gcc/testsuite/gcc.target/i386/pr104451.c
  f34a56063b53daa2722dd66e280f5aab  gcc/testsuite/gcc.target/i386/pr104453.c
  30d7b1638a5f604ac4353737e0db1816  gcc/testsuite/gcc.target/i386/pr104458.c
  a92681d4c2c5095462e23684946fe9fd  gcc/testsuite/gcc.target/i386/pr104469.c
  6f32caf69432ac867dd42051bcfa22a8  gcc/testsuite/gcc.target/i386/pr104502.c
  c0361c1e4d91a839c96bfc8c71f15139  gcc/testsuite/gcc.target/i386/pr104674.c
  69c507a5894d6d6b62f48b087adf9652  gcc/testsuite/gcc.target/i386/pr104890.c
  8aea430f8fa49eb985ac268facb6294c  gcc/testsuite/gcc.target/i386/pr104963.c
  a64b8516e04de39ddebcd66dc046d450  gcc/testsuite/gcc.target/i386/pr104971.c
  8f5761aaf460d5a45e0118668b9ab299  gcc/testsuite/gcc.target/i386/pr105000-1.c
  a892cf5449c572594d9ac500ec2178bc  gcc/testsuite/gcc.target/i386/pr105000-2.c
  6c6335b2ca1f773cd45cd27ad0d7a133  gcc/testsuite/gcc.target/i386/pr105000-3.c
! 6835f42a37c0159616cc082bd3c33721  gcc/testsuite/gcc.target/i386/pr105032.c
  3de9ba59994fd09bad053a28eecbc68d  gcc/testsuite/gcc.target/i386/pr105123.c
  304b7d185da41754f69656f5bfa7d508  gcc/testsuite/gcc.target/i386/pr11001-memcpy-1.c
  7dbe55f1460795545dd744807466a430  gcc/testsuite/gcc.target/i386/pr11001-memcpy-2.c
  cbe58ae1efc3b97c1019a430e1fedfcb  gcc/testsuite/gcc.target/i386/pr11001-memcpy-3.c
--- 65515,65858 ----
  9f8568a66133d16283b57d8a97c3dc49  gcc/testsuite/gcc.target/i386/pie-copyrelocs-4.c
  f91cf99532e69c383485f6be3f62eb99  gcc/testsuite/gcc.target/i386/pie.c
  5d062b099437fb64de565760ffa381a8  gcc/testsuite/gcc.target/i386/pieces-memcpy-1.c
+ 159890d45cc96b5006c69f188375af79  gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c
+ c8299c32a2fde2871d46799e54ca9c20  gcc/testsuite/gcc.target/i386/pieces-memcpy-11.c
+ 07e2e682ac676281588afe54520b14b5  gcc/testsuite/gcc.target/i386/pieces-memcpy-12.c
+ cbaafd43310e10a7ba4ce687bafe06da  gcc/testsuite/gcc.target/i386/pieces-memcpy-13.c
+ 7147c9bca7f4df1d172c284d70aa181b  gcc/testsuite/gcc.target/i386/pieces-memcpy-14.c
+ 89d909d7d758041e829631ac800bf196  gcc/testsuite/gcc.target/i386/pieces-memcpy-15.c
+ 437a6c001b5f504cb8a978424f9f229c  gcc/testsuite/gcc.target/i386/pieces-memcpy-16.c
+ a0fc0b89838032f850b17823a354b986  gcc/testsuite/gcc.target/i386/pieces-memcpy-17.c
+ ce99ca62859e3b5ee0e5695b59309237  gcc/testsuite/gcc.target/i386/pieces-memcpy-18.c
+ b5f6fb3aaac27e15ae52d9111e60d98d  gcc/testsuite/gcc.target/i386/pieces-memcpy-19.c
  279c04d20615905ca5bf2f44eb5a231d  gcc/testsuite/gcc.target/i386/pieces-memcpy-2.c
+ 7e2d486487e1f536c226d8bc290fd8ad  gcc/testsuite/gcc.target/i386/pieces-memcpy-20.c
+ 2f4b551b9d6addea576cff08a8831f3f  gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c
  2820c9b91ec98c38843764eea07d4b75  gcc/testsuite/gcc.target/i386/pieces-memcpy-3.c
  698986063dd5ba005476ca849de14359  gcc/testsuite/gcc.target/i386/pieces-memcpy-4.c
  5e90eca9009d511850fb8fc840c7e236  gcc/testsuite/gcc.target/i386/pieces-memcpy-5.c
  592f55f6e3184576f7ecadf1df7171df  gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c
+ e4e4d6519861d83a595eadd0756e3cf2  gcc/testsuite/gcc.target/i386/pieces-memcpy-7.c
+ bb3f405fb2a00f93ade9f112f66a2ae2  gcc/testsuite/gcc.target/i386/pieces-memcpy-8.c
+ 224b0424797e8741da92fc8c1b86afb3  gcc/testsuite/gcc.target/i386/pieces-memcpy-9.c
+ c98547d08a943793d837a760610bc52a  gcc/testsuite/gcc.target/i386/pieces-memset-1.c
+ c41f980df778f8d15a4483383b7d8511  gcc/testsuite/gcc.target/i386/pieces-memset-10.c
+ 36699977c9823831dcdc918a5f0e56e6  gcc/testsuite/gcc.target/i386/pieces-memset-11.c
+ bee0e3ab99ebaaa281b982a8bb48cf7c  gcc/testsuite/gcc.target/i386/pieces-memset-12.c
+ 45f3a78ec4b0fcf169b2aa73d9282e11  gcc/testsuite/gcc.target/i386/pieces-memset-13.c
+ f638273a9ead84bb946dc71dd7abee3a  gcc/testsuite/gcc.target/i386/pieces-memset-14.c
+ d058923567ffc9376b1bfb6ba2c93340  gcc/testsuite/gcc.target/i386/pieces-memset-15.c
+ b4a884cb8469cb35d8158bcb48c6e6a5  gcc/testsuite/gcc.target/i386/pieces-memset-16.c
+ d6f6e6aa1a4cbbc851db78c34979ab20  gcc/testsuite/gcc.target/i386/pieces-memset-17.c
+ b3f4ffe2d016b082155af80884489ade  gcc/testsuite/gcc.target/i386/pieces-memset-18.c
+ c97e68fa59c5f886baf83a2e12c998f6  gcc/testsuite/gcc.target/i386/pieces-memset-19.c
+ 5b2eac126ff01faf8648524199b8f0a2  gcc/testsuite/gcc.target/i386/pieces-memset-2.c
+ 686f24b785543586a710fc3267072466  gcc/testsuite/gcc.target/i386/pieces-memset-20.c
+ 840c89477629ff575f8f87882dd486db  gcc/testsuite/gcc.target/i386/pieces-memset-21.c
+ c5387195c56efb1dc4ee3aea30c3e6cc  gcc/testsuite/gcc.target/i386/pieces-memset-22.c
+ 48e21ce9e2f53676f915a11496d611cf  gcc/testsuite/gcc.target/i386/pieces-memset-23.c
+ 27817c160b2383c67e9c259b1b249d1d  gcc/testsuite/gcc.target/i386/pieces-memset-24.c
+ 345c60f8fb0fd9595e972159cb0346d5  gcc/testsuite/gcc.target/i386/pieces-memset-25.c
+ 4f087c0b5fb21c6da53d8bd6bacd505b  gcc/testsuite/gcc.target/i386/pieces-memset-26.c
+ e0bb92a526955a1789440ebafb809f58  gcc/testsuite/gcc.target/i386/pieces-memset-27.c
+ 1c439878817e3fad97e118a4daddf77e  gcc/testsuite/gcc.target/i386/pieces-memset-28.c
+ 7018e77ee0514f6fe0ee280b75f6ab0f  gcc/testsuite/gcc.target/i386/pieces-memset-29.c
+ f76c4014207b7260a0d6d0e1d833da13  gcc/testsuite/gcc.target/i386/pieces-memset-3.c
+ dfdb563e4ff7bbe491b12bbbe647b9dc  gcc/testsuite/gcc.target/i386/pieces-memset-30.c
+ 4920af6ef8af7487a957349a29dbab5a  gcc/testsuite/gcc.target/i386/pieces-memset-31.c
+ 5a1d68c281d8c3d69242275385fca73b  gcc/testsuite/gcc.target/i386/pieces-memset-32.c
+ 924e5e7e92512605ec9367e612f23eb7  gcc/testsuite/gcc.target/i386/pieces-memset-33.c
+ 16f63d88d853af6b12c879750e183960  gcc/testsuite/gcc.target/i386/pieces-memset-34.c
+ 181b017254dd31eb2223399402d99647  gcc/testsuite/gcc.target/i386/pieces-memset-35.c
+ 1459df6a5e5bf8ce8f966ba8966bfddd  gcc/testsuite/gcc.target/i386/pieces-memset-36.c
+ 98520236020ae438a633156e10f18109  gcc/testsuite/gcc.target/i386/pieces-memset-37.c
+ 71d7cb14af52878612fec7d2cc2dcdff  gcc/testsuite/gcc.target/i386/pieces-memset-38.c
+ 3c40d1cea3026e11bb928e9427e769ab  gcc/testsuite/gcc.target/i386/pieces-memset-39.c
+ b9528f9fe022aa90d7c7d9764f67ece4  gcc/testsuite/gcc.target/i386/pieces-memset-4.c
+ e97806715f1d074e19f850beb7a46cf7  gcc/testsuite/gcc.target/i386/pieces-memset-40.c
+ fa508fb4ea1f8f8b18cde0a830cf3953  gcc/testsuite/gcc.target/i386/pieces-memset-41.c
+ ef978a20afb9412dabbe15a9b8dfb5b0  gcc/testsuite/gcc.target/i386/pieces-memset-42.c
+ 36d97d09e24700e91c20a52767b17774  gcc/testsuite/gcc.target/i386/pieces-memset-43.c
+ 2b47b7f82aeabc7a238642520819b3f0  gcc/testsuite/gcc.target/i386/pieces-memset-44.c
+ f2f0e85f12be6d8c85584ef9e34e08ca  gcc/testsuite/gcc.target/i386/pieces-memset-45.c
+ f29f6d2af05e1f08f148f0eed162d860  gcc/testsuite/gcc.target/i386/pieces-memset-46.c
+ 8f0614f1d8cbc09d9e6e515b9c85586c  gcc/testsuite/gcc.target/i386/pieces-memset-47.c
+ fab4224ceed336ed6902793909c0c6c2  gcc/testsuite/gcc.target/i386/pieces-memset-48.c
+ b6a5763cac2b72e43f0900c7fbca0740  gcc/testsuite/gcc.target/i386/pieces-memset-49.c
+ e59e962761850423b307c01f720c8e84  gcc/testsuite/gcc.target/i386/pieces-memset-5.c
+ 9a26520df010055f642c2ece0b8228da  gcc/testsuite/gcc.target/i386/pieces-memset-6.c
+ 965472deb34cf62f613f73701201f9b4  gcc/testsuite/gcc.target/i386/pieces-memset-7.c
+ 7c2aa9a23dfc3f65dc77c8d3af0a6a3f  gcc/testsuite/gcc.target/i386/pieces-memset-8.c
+ 5a05b363e010e9b9a4fc05f362d42dae  gcc/testsuite/gcc.target/i386/pieces-memset-9.c
  b1d366c21cfdcfacf9854ed6cbfd7bc3  gcc/testsuite/gcc.target/i386/pieces-strcpy-1.c
  52e52549556117888f85f13d26ced39b  gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c
  13d06bee88f2ccd2a16effe0c243e61e  gcc/testsuite/gcc.target/i386/pow-1.c
  08e64611506eb827fa5c5f614b29322b  gcc/testsuite/gcc.target/i386/pr100066.c
+ 59cbc0324755fe5398f1eeb23440ed0c  gcc/testsuite/gcc.target/i386/pr100093.c
+ 386e6710e25fd0c30c25c245d0eded87  gcc/testsuite/gcc.target/i386/pr100119.c
  f6d11dafd312969f2c744769fa5060e7  gcc/testsuite/gcc.target/i386/pr100182.c
  551896bd44fd8f6d014f841aef67c558  gcc/testsuite/gcc.target/i386/pr100310.c
  3c07d29535c0112e7c384c8908011917  gcc/testsuite/gcc.target/i386/pr100342.c
+ 78685e7edd4e0979aa43c884b39799a9  gcc/testsuite/gcc.target/i386/pr100445-1.c
+ a60a4e9d9eabe39575166ed237be1254  gcc/testsuite/gcc.target/i386/pr100445.c
+ 5d2c905d0c5c3481ad3792a3acd56582  gcc/testsuite/gcc.target/i386/pr100504.c
+ 712a5b0dc00e43026ee65f26c2b8e49d  gcc/testsuite/gcc.target/i386/pr100549.c
+ cedc1333702a728fc893f5cd3f5cca1e  gcc/testsuite/gcc.target/i386/pr100582.c
+ 993d78934ac49ecf9c43f5aabf99184e  gcc/testsuite/gcc.target/i386/pr100637-1b.c
+ 5a69505eab2f7e004c0aa4e8723726f4  gcc/testsuite/gcc.target/i386/pr100637-1w.c
+ 28aa73c32cfbc1a5f62512977debdb0d  gcc/testsuite/gcc.target/i386/pr100637-2b.c
+ 75566ab966d900cecd237f7c39ce454b  gcc/testsuite/gcc.target/i386/pr100637-2w.c
+ e2e7e3662c6ce0d762469cc687b0d8c2  gcc/testsuite/gcc.target/i386/pr100637-3b.c
+ d664632dd27aad244198ce563feeef18  gcc/testsuite/gcc.target/i386/pr100637-3w.c
+ d5334fd482dcb61b3f03962607a752f8  gcc/testsuite/gcc.target/i386/pr100637-4b.c
+ 5b4f6729444871e26f6f0da532564783  gcc/testsuite/gcc.target/i386/pr100637-4w.c
+ b46801b92c8985313d7fa04daf99dd6c  gcc/testsuite/gcc.target/i386/pr100637-5b.c
+ a4604cdc0bd245eabfdda1b8994d0444  gcc/testsuite/gcc.target/i386/pr100637-5w.c
+ 66b5c873568645142767ccecffa3fb2e  gcc/testsuite/gcc.target/i386/pr100660.c
+ 4dd4204ea1719e49b9513943dfa81aee  gcc/testsuite/gcc.target/i386/pr100701.c
+ d6be9416b5a692dcf10f49538e62c72a  gcc/testsuite/gcc.target/i386/pr100704-1.c
+ 79bcfaca817f59f84be4d439452f5686  gcc/testsuite/gcc.target/i386/pr100704-2.c
+ 8f0140f382ce775a24be94b4120ddafc  gcc/testsuite/gcc.target/i386/pr100704-3.c
+ 3867710318c1f66b0baefc39f250ac61  gcc/testsuite/gcc.target/i386/pr100711-1.c
+ d67bab80045236216b478b5dc7a6b6c7  gcc/testsuite/gcc.target/i386/pr100711-2.c
+ 21342a2d589a99d18c416c9c8cb14e73  gcc/testsuite/gcc.target/i386/pr100722.c
+ d19e79e7b50e1255609c0bb606935482  gcc/testsuite/gcc.target/i386/pr100865-1.c
+ 2669fce2b79e0f456b3e2cbbe2b3ba5f  gcc/testsuite/gcc.target/i386/pr100865-10a.c
+ 661e4041ace7ed04282c71aa07552cff  gcc/testsuite/gcc.target/i386/pr100865-10b.c
+ f5bc9b077ed43bdc9a703fbae0412df9  gcc/testsuite/gcc.target/i386/pr100865-11a.c
+ 0386e3fab23fe7e48eee2cfa3b04d7ff  gcc/testsuite/gcc.target/i386/pr100865-11b.c
+ e292a240560fbabcde2b3e6709148e38  gcc/testsuite/gcc.target/i386/pr100865-11c.c
+ bfc29b0613a8b50ad05723222e02fca0  gcc/testsuite/gcc.target/i386/pr100865-12a.c
+ 05ff62d2aea9db819682757c26e4d599  gcc/testsuite/gcc.target/i386/pr100865-12b.c
+ 609a6efc8f26048c66413a6b2cd5337e  gcc/testsuite/gcc.target/i386/pr100865-12c.c
+ fbcc026e435fd5ecf1fc89cd42808ce7  gcc/testsuite/gcc.target/i386/pr100865-2.c
+ 0fa97d6f191c6fb49bd88fc0873030c4  gcc/testsuite/gcc.target/i386/pr100865-3.c
+ 288f9005ede0b3e5399ac5de232334a0  gcc/testsuite/gcc.target/i386/pr100865-4a.c
+ 6ecde3746459af9c538bdb7053ea0f2c  gcc/testsuite/gcc.target/i386/pr100865-4b.c
+ 269822614a23a2759b992718120775b7  gcc/testsuite/gcc.target/i386/pr100865-5a.c
+ a6abe6c67c13c8075c732a6f475e9666  gcc/testsuite/gcc.target/i386/pr100865-5b.c
+ 141211da7bb82a627cb91a481ae7e717  gcc/testsuite/gcc.target/i386/pr100865-6a.c
+ 77a33bda5286a6a0302feba88bb9ff50  gcc/testsuite/gcc.target/i386/pr100865-6b.c
+ 3c8fc8cf77fc678567411228bb412d79  gcc/testsuite/gcc.target/i386/pr100865-6c.c
+ 1c42679e51355c023fcf9ced51148e88  gcc/testsuite/gcc.target/i386/pr100865-7a.c
+ d5ed6554ef2f8e0b3488d3e0552a1ddb  gcc/testsuite/gcc.target/i386/pr100865-7b.c
+ 24b690b0da869c1f902989f4c75dfd60  gcc/testsuite/gcc.target/i386/pr100865-7c.c
+ 2e6c0885d5ed036832dae0f07276269a  gcc/testsuite/gcc.target/i386/pr100865-8a.c
+ 38883a5389fa795fd84a1023776608ea  gcc/testsuite/gcc.target/i386/pr100865-8b.c
+ b1b7cd191466fe5bf9c8de405078e268  gcc/testsuite/gcc.target/i386/pr100865-8c.c
+ a2db1599502ab18d8be9008240a5479f  gcc/testsuite/gcc.target/i386/pr100865-9a.c
+ b4bca83d8c5eb66cc3b76c908b3d3d01  gcc/testsuite/gcc.target/i386/pr100865-9b.c
+ 0e777948f43f406fb25b7236272ef276  gcc/testsuite/gcc.target/i386/pr100865-9c.c
+ 92347818baf371677943e85e6acf1cb2  gcc/testsuite/gcc.target/i386/pr100887.c
+ 1bc38c498cc637c99a48d91d8c5545b8  gcc/testsuite/gcc.target/i386/pr100936.c
+ 988b04066631a4c959820d4ced9f5e39  gcc/testsuite/gcc.target/i386/pr100951.c
+ 0f1a3e79d17305cf67121bb850f8bbee  gcc/testsuite/gcc.target/i386/pr101021-1.c
+ d1dc5c84e88280386be51fbb5bbe9542  gcc/testsuite/gcc.target/i386/pr101021-2.c
+ 5fe42961f3c5a51deb3e7eea542acb16  gcc/testsuite/gcc.target/i386/pr101044.c
+ 743b8594ba9c5c4ec7ef0a1e586e5ead  gcc/testsuite/gcc.target/i386/pr101046.c
+ 9d8b1a5c0bfa2c25a7e81b248c1b0003  gcc/testsuite/gcc.target/i386/pr101058.c
  f8c6587e64861b8f769159de826acd76  gcc/testsuite/gcc.target/i386/pr101175.c
+ 76bf6829d1aeec18c29590275674f60c  gcc/testsuite/gcc.target/i386/pr101180.c
+ 6f2bb73ad2144417adacae802f5fb68e  gcc/testsuite/gcc.target/i386/pr101248.c
  02f2ef63ed2a0eb2d5d9b96519faa0d1  gcc/testsuite/gcc.target/i386/pr101261.c
+ 63c643a29e2c692600a6931949d3a3f1  gcc/testsuite/gcc.target/i386/pr101282.c
+ ac2b9fc16457daac598779de6c9466eb  gcc/testsuite/gcc.target/i386/pr101346.c
  288aa84588c0af5a00643021d4506391  gcc/testsuite/gcc.target/i386/pr101395-1.c
  e464a56984a9759820818b1e51f316d7  gcc/testsuite/gcc.target/i386/pr101395-2.c
  e0bc688540cd8ed83ce6df81886303a5  gcc/testsuite/gcc.target/i386/pr101395-3.c
+ 61441583db071c0fe263eb699034a36a  gcc/testsuite/gcc.target/i386/pr101424.c
+ 84bde9465994290484aa6ecd9fbdfa22  gcc/testsuite/gcc.target/i386/pr101456-1.c
+ 15ff2ab4afc5d744ebe4021768b31d7c  gcc/testsuite/gcc.target/i386/pr101456-2.c
  4fde066e03dfe2d7fb8ae82e5a8f6f43  gcc/testsuite/gcc.target/i386/pr101492-1.c
  3e32ab2ceda5c1f6364c7e258951092c  gcc/testsuite/gcc.target/i386/pr101492-2.c
  6a033f94694c14382da16121484a5059  gcc/testsuite/gcc.target/i386/pr101492-3.c
  2a7216d43f3ffddb5fc3d62af8e5a895  gcc/testsuite/gcc.target/i386/pr101492-4.c
+ d4e20b825c09cf6794e6e5b597c7335f  gcc/testsuite/gcc.target/i386/pr101504.c
+ 5d41fc380eccae6344c39847965d0da0  gcc/testsuite/gcc.target/i386/pr101636.c
+ b974d1c1eb2c64f7c28acd2f356d3503  gcc/testsuite/gcc.target/i386/pr101685.c
+ b7917a5931ee0a85f9f8604fa1a42161  gcc/testsuite/gcc.target/i386/pr101716.c
+ 18982a20a869451cc3518d5947d3a7b2  gcc/testsuite/gcc.target/i386/pr101742a.c
+ 758e66b76326e2664ea96ea9261ec8e4  gcc/testsuite/gcc.target/i386/pr101742b.c
+ 586e3adb518406a5737ac9edd4b73d53  gcc/testsuite/gcc.target/i386/pr101796-1.c
+ 557643d55294de049431c337a4d582d7  gcc/testsuite/gcc.target/i386/pr101797.c
+ 8799e0da44fea4280d7718fd3e9b8245  gcc/testsuite/gcc.target/i386/pr101812.c
+ 84b0729af4c999d30a48152a6966d6ce  gcc/testsuite/gcc.target/i386/pr101846-1.c
+ 913f80ab968aea57b0f907bcef034044  gcc/testsuite/gcc.target/i386/pr101846-2.c
+ 882b6859e76edaebed96853f73063bea  gcc/testsuite/gcc.target/i386/pr101846-3.c
+ eb1fb93011a15999f5bb8b17bb03b659  gcc/testsuite/gcc.target/i386/pr101846-4.c
+ f2863b3a527bf374fc23d2b8bd7a65b8  gcc/testsuite/gcc.target/i386/pr101895.c
+ 83fca0c05158c493a342c58b1875b428  gcc/testsuite/gcc.target/i386/pr101900-1.c
+ 84a73eedc92bf9317850ce791291a7c7  gcc/testsuite/gcc.target/i386/pr101900-2.c
+ 484743187e01b85916516191a6b60f9f  gcc/testsuite/gcc.target/i386/pr101900-3.c
+ 3cee72c312a44ed617160d7c4340b634  gcc/testsuite/gcc.target/i386/pr101908-1.c
+ bcc3dd03282b79cdaad1e813e2c98669  gcc/testsuite/gcc.target/i386/pr101908-2.c
+ 4aa967b8dfe223915f396f78c22485db  gcc/testsuite/gcc.target/i386/pr101908-3.c
+ 71190ec9491eab6b2bbc796eab15af33  gcc/testsuite/gcc.target/i386/pr101930.c
+ b4d06268d42bf5db1da463eaab008024  gcc/testsuite/gcc.target/i386/pr101950-1.c
+ 001d5be7fe2c5a8f87638f25f2ccc72f  gcc/testsuite/gcc.target/i386/pr101950-2.c
+ 0457f3d16b7a3fe95e09e531dd63da5f  gcc/testsuite/gcc.target/i386/pr101989-1.c
+ c0989692a0f2603de7cdb8cf6bbc470d  gcc/testsuite/gcc.target/i386/pr101989-2.c
+ ce94fb3876b696419b146fe6dbfba74b  gcc/testsuite/gcc.target/i386/pr101989-3.c
+ bda82f017fecb1d7b2edb529aea0280c  gcc/testsuite/gcc.target/i386/pr101989-broadcast-1.c
+ 87b3d1a468a63279ca3c521ffeeeb440  gcc/testsuite/gcc.target/i386/pr102016.c
+ 051978a110cebdfa100ba2a54bcb6bb1  gcc/testsuite/gcc.target/i386/pr102021.c
+ ae9e982908f39694cfa63cde47ecd4ef  gcc/testsuite/gcc.target/i386/pr102024.c
+ 7b643f9feaacdf61e235197b76917d23  gcc/testsuite/gcc.target/i386/pr102080.c
+ 906d02e2e76bbe7aab1739a3b7260688  gcc/testsuite/gcc.target/i386/pr102230.c
+ c2e2542ba19e2e812b738e7f9f1ad1ee  gcc/testsuite/gcc.target/i386/pr102327-1.c
+ 4987841b15eaa01d352aa88053d06695  gcc/testsuite/gcc.target/i386/pr102327-2.c
+ 94fa8d96af9c0edf5a0841788c01edc1  gcc/testsuite/gcc.target/i386/pr102464-copysign-1.c
+ adab621363055b7bc30252a80c085f85  gcc/testsuite/gcc.target/i386/pr102464-fma.c
+ 058016787582ba3a23d433d2a4c64f82  gcc/testsuite/gcc.target/i386/pr102464-maxmin.c
+ ca28070685eaa668b2046f539587b1e3  gcc/testsuite/gcc.target/i386/pr102464-sqrtph.c
+ 25c492dccb70c57bd8931c5b65b8658d  gcc/testsuite/gcc.target/i386/pr102464-sqrtsh.c
+ 8ae4a802e4b0fa72410e7122dda4e492  gcc/testsuite/gcc.target/i386/pr102464-vrndscaleph.c
+ a7f5edde3517a7bc81e42ef35bc8ccf2  gcc/testsuite/gcc.target/i386/pr102464.c
+ f68b5c1b664b6adb3ffe77d9fbd68734  gcc/testsuite/gcc.target/i386/pr102483-2.c
+ 794cdec505b1e2f54ab552a0251c4029  gcc/testsuite/gcc.target/i386/pr102483.c
  4f610ba3f94dc4f52aa642107694f970  gcc/testsuite/gcc.target/i386/pr102498.c
+ f760e6f47c5171cdce17befb831faea2  gcc/testsuite/gcc.target/i386/pr102543.c
+ 56ebfe90cf5898efb74da3c8da0c2d08  gcc/testsuite/gcc.target/i386/pr102566-10a.c
+ a02f70ae110e530e1d009e44558081ba  gcc/testsuite/gcc.target/i386/pr102566-10b.c
+ 7ef64527fe4533b617a6a44f5e8a3f30  gcc/testsuite/gcc.target/i386/pr102566-11.c
+ 4f94cb52389b91dfdc1c64aefd232b40  gcc/testsuite/gcc.target/i386/pr102566-12.c
+ 3325536ee42b1d6d22e1118fc757419a  gcc/testsuite/gcc.target/i386/pr102566-13.c
+ e617329025c894ef028cd1b94b3f648c  gcc/testsuite/gcc.target/i386/pr102566-14.c
+ 33210860043d516247f64b799bef098d  gcc/testsuite/gcc.target/i386/pr102566-1a.c
+ 7a4eab89905d3e6bddb68774138c908b  gcc/testsuite/gcc.target/i386/pr102566-1b.c
+ 430e984c1a4a7b1eab8db39b712bdb9b  gcc/testsuite/gcc.target/i386/pr102566-2.c
+ ed0cddf242c215429a89505edcb5cda5  gcc/testsuite/gcc.target/i386/pr102566-3a.c
+ e0b63cb6c9d576f08daba5c164fa4358  gcc/testsuite/gcc.target/i386/pr102566-3b.c
+ a8ea3c0e8d3717b12de855e364cea6bb  gcc/testsuite/gcc.target/i386/pr102566-4.c
+ ed0cddf242c215429a89505edcb5cda5  gcc/testsuite/gcc.target/i386/pr102566-5.c
+ 63ef4a5ca41ae3d767b62c6a6c2f5761  gcc/testsuite/gcc.target/i386/pr102566-6.c
+ 83d8499f4cac049c9318028299f9fe6f  gcc/testsuite/gcc.target/i386/pr102566-7.c
+ 17f416790d7e0c62b073fa632569e9db  gcc/testsuite/gcc.target/i386/pr102566-8a.c
+ 397d2b0f63331be87ef1afb32fd6b7f9  gcc/testsuite/gcc.target/i386/pr102566-8b.c
+ 3481740b854e0ac8d553ec30a8e1e2f0  gcc/testsuite/gcc.target/i386/pr102566-9a.c
+ c9acab92ab83b6832f10d5744bbbb9fc  gcc/testsuite/gcc.target/i386/pr102566-9b.c
  53e87cba1a4282f640d05ef1fee359c4  gcc/testsuite/gcc.target/i386/pr102627.c
  34eb3ca8ee784a5cb3c2145b1609e105  gcc/testsuite/gcc.target/i386/pr102761.c
+ 94fbca2c3bfe03a7170b3a5271be0057  gcc/testsuite/gcc.target/i386/pr102811-1.c
+ 3b03e912aeb66bfa303f95c387045e1c  gcc/testsuite/gcc.target/i386/pr102811-2.c
+ 8274133dd8e6f3e3392afaa9ab5d8fec  gcc/testsuite/gcc.target/i386/pr102811.c
+ d6f8918336e876cc84a4ac33805567e9  gcc/testsuite/gcc.target/i386/pr102812.c
+ 01ff823177fa6cd6578b9f62dd921ad6  gcc/testsuite/gcc.target/i386/pr103020.c
+ 18a0e306d383efc150edac27511f710c  gcc/testsuite/gcc.target/i386/pr103069-1.c
+ b1c903e2b37cfb9b2f060a009b3b4219  gcc/testsuite/gcc.target/i386/pr103069-2.c
+ 530caabfe97509f0aaaab47d9021ca22  gcc/testsuite/gcc.target/i386/pr103069-3.c
+ a44a12bfc869662533e31a5506badb47  gcc/testsuite/gcc.target/i386/pr103069-4.c
+ 45c8bf67cae0f4d4cd78e718c7e3f2eb  gcc/testsuite/gcc.target/i386/pr103074.c
+ 3c046813d3772127c2fb4a817b636b16  gcc/testsuite/gcc.target/i386/pr103097.c
+ bbb49f0f7f2923e3bc0b023ec5585ef4  gcc/testsuite/gcc.target/i386/pr103151.c
+ c7f53ed0d2b5ff62f54c98df873c7c68  gcc/testsuite/gcc.target/i386/pr103194-2.c
+ aed17b3136a26972a669479a00fd2b6e  gcc/testsuite/gcc.target/i386/pr103194-3.c
+ f831f6f28cdeeb9c91e205a3726aa277  gcc/testsuite/gcc.target/i386/pr103194-4.c
+ 92acc39ae1df61984d74915ff6f13b0d  gcc/testsuite/gcc.target/i386/pr103194-5.c
+ ee849ea0c1d98eae6fa7149655fda76a  gcc/testsuite/gcc.target/i386/pr103194.c
+ c0e2167ef56d8630d304b52813dd2572  gcc/testsuite/gcc.target/i386/pr103205-2.c
  bcf207e15c0d5b9e3168e3c570bc4999  gcc/testsuite/gcc.target/i386/pr103205.c
! 212321a633ef72354f108b8d3918603c  gcc/testsuite/gcc.target/i386/pr103275.c
! 3ad820d9f385b5084912eee35d9461fb  gcc/testsuite/gcc.target/i386/pr103404.c
! 11a2f1dceefd55efad1ceccf784fda57  gcc/testsuite/gcc.target/i386/pr103463-2.c
! eb497ce0de16af435c79a706e2627a74  gcc/testsuite/gcc.target/i386/pr103463.c
! 766f504289bda21d3b887858becc90bc  gcc/testsuite/gcc.target/i386/pr103611-1.c
! f168547213dde204cd3dabfe1658ada2  gcc/testsuite/gcc.target/i386/pr103611-2.c
! 2e18e3c6a972bff9a887cc8c3d7c6dfc  gcc/testsuite/gcc.target/i386/pr103753.c
! 8617139572e784b5c0861936cb2b248e  gcc/testsuite/gcc.target/i386/pr103762-1a.c
! bafa333a176943cfc5ba57dcd53348db  gcc/testsuite/gcc.target/i386/pr103762-1b.c
! a631b59a82e0094f919cb4604edc35d2  gcc/testsuite/gcc.target/i386/pr103762-1c.c
! f7b20e275fb7245fb9757294a2d72c1f  gcc/testsuite/gcc.target/i386/pr103771-2.c
! 94dae865f304453dfde03d14b8ace0cf  gcc/testsuite/gcc.target/i386/pr103771-3.c
! 905c8c3d05e777381083e5dc308f6bbd  gcc/testsuite/gcc.target/i386/pr103771.c
! 99c899ad45a3b907e5fe8f05e32242c4  gcc/testsuite/gcc.target/i386/pr103773-2.c
! 339445d43abea93de6668ce9bec736ac  gcc/testsuite/gcc.target/i386/pr103773.c
! 707ace5cc27a449d2433235218896e8a  gcc/testsuite/gcc.target/i386/pr103774.c
! 53abd38eebfefc9c7e39e5cfe0275fda  gcc/testsuite/gcc.target/i386/pr103785.c
! 08e318251579ee56031bc5c6adb37a01  gcc/testsuite/gcc.target/i386/pr103861-2.c
! 61ad63bb78255545f127846f3e287145  gcc/testsuite/gcc.target/i386/pr103861-3.c
! e9083d915db0485d104f15a6afbe9dfd  gcc/testsuite/gcc.target/i386/pr103861-4.c
! 2f26a89866678bac8089f002583b7c79  gcc/testsuite/gcc.target/i386/pr103861.c
! b039add75b08a015b600376758d11758  gcc/testsuite/gcc.target/i386/pr103894.c
! 8c207c3b1c14242f528f04da3dd81bf5  gcc/testsuite/gcc.target/i386/pr103895.c
! 530ab105efdbe722268b91786b4daac9  gcc/testsuite/gcc.target/i386/pr103900.c
! 4cd4f3169b3e65b0a1820072775d2e76  gcc/testsuite/gcc.target/i386/pr103905.c
  5fbee8826b1f4da8d9dd6a2f09f18e0e  gcc/testsuite/gcc.target/i386/pr103908.c
+ 785504e26cd6f9f93c9ab2af552d08bc  gcc/testsuite/gcc.target/i386/pr103915.c
+ 41721335d42fe28084347fa33894303a  gcc/testsuite/gcc.target/i386/pr103941-1.c
+ 8dad7093e1bb132644d34205f1d38611  gcc/testsuite/gcc.target/i386/pr103941-2.c
+ 20da6bc2776057de07258ef854f1f994  gcc/testsuite/gcc.target/i386/pr103973-1.c
+ 77409de4e19648dd9000994809f4905f  gcc/testsuite/gcc.target/i386/pr103973-10.c
+ 59285de0d089a8877e48a366e1f91fc7  gcc/testsuite/gcc.target/i386/pr103973-11.c
+ ab1300f9ea273fa5cdf295a3809cedbd  gcc/testsuite/gcc.target/i386/pr103973-12.c
+ 8c4df3e850c1e5644d20dc14f8b45800  gcc/testsuite/gcc.target/i386/pr103973-13.c
+ 02f2d25e849003bd8656bff1acfa2291  gcc/testsuite/gcc.target/i386/pr103973-14.c
+ b2bd1549b0a101bd9a82892fcf398705  gcc/testsuite/gcc.target/i386/pr103973-15.c
+ d75fbe32c280098c03093675528133be  gcc/testsuite/gcc.target/i386/pr103973-16.c
+ 99bc92002386038ab5abf97f1b3296b3  gcc/testsuite/gcc.target/i386/pr103973-17.c
+ d14926a3cf287dd45a2c8affa969cc69  gcc/testsuite/gcc.target/i386/pr103973-18.c
+ 791be2a49651b7b1211e363c6990cecb  gcc/testsuite/gcc.target/i386/pr103973-19.c
+ c302ec512667b6917dfffdf9a62e05af  gcc/testsuite/gcc.target/i386/pr103973-2.c
+ 2ee9b51d070ee065dc3f906c48ab9e34  gcc/testsuite/gcc.target/i386/pr103973-20.c
+ 09f7238b640a8227d4df3559aa74a0df  gcc/testsuite/gcc.target/i386/pr103973-3.c
+ 1056731dd83dd6736077e8fe5fa513e6  gcc/testsuite/gcc.target/i386/pr103973-4.c
+ 9bac740c318e4c4bf75c6a3316c1342a  gcc/testsuite/gcc.target/i386/pr103973-5.c
+ 39773fc5de58539bfce90cbc734e3259  gcc/testsuite/gcc.target/i386/pr103973-6.c
+ 93b06a210867e83269a128182d1fa2d2  gcc/testsuite/gcc.target/i386/pr103973-7.c
+ b6796037549a59cf0c8a7607fc3bc0e8  gcc/testsuite/gcc.target/i386/pr103973-8.c
+ a727e95a5917ec9b6d31e46d06c1bf9a  gcc/testsuite/gcc.target/i386/pr103973-9.c
+ ed90f3e968303266ede9f06c4aa6e7fa  gcc/testsuite/gcc.target/i386/pr104001.c
+ 2ddeee9438736d4d1a5c08142873186c  gcc/testsuite/gcc.target/i386/pr104059.c
+ cfdce4960f4e6412cc8da9af0d33f51c  gcc/testsuite/gcc.target/i386/pr104104.c
  53c36359ec9f2e689c1bd9882aaa6e38  gcc/testsuite/gcc.target/i386/pr104188.c
  a4a622986785e6f70969c2a502ed82b5  gcc/testsuite/gcc.target/i386/pr104307.c
  63ce798253abf6c855847d44c00a0999  gcc/testsuite/gcc.target/i386/pr104362.c
+ 578892a7046af90b3951860a49b0a583  gcc/testsuite/gcc.target/i386/pr104441-1a.c
+ 7847083e5431fa0d0f90a6966b944b11  gcc/testsuite/gcc.target/i386/pr104441-1b.c
  9db2b13a34fc86475d27728a925461c5  gcc/testsuite/gcc.target/i386/pr104446.c
+ bf404f867e3472759c232458b7e6fb09  gcc/testsuite/gcc.target/i386/pr104447.c
  02696130cc1ac504d964566b605a5294  gcc/testsuite/gcc.target/i386/pr104448.c
  9afbd8cbff177a7e555fe32de7558c2e  gcc/testsuite/gcc.target/i386/pr104451.c
  f34a56063b53daa2722dd66e280f5aab  gcc/testsuite/gcc.target/i386/pr104453.c
  30d7b1638a5f604ac4353737e0db1816  gcc/testsuite/gcc.target/i386/pr104458.c
+ dc74d5dd23b6c649968d71d7717c25b1  gcc/testsuite/gcc.target/i386/pr104462.c
  a92681d4c2c5095462e23684946fe9fd  gcc/testsuite/gcc.target/i386/pr104469.c
+ 14ef9019c2ac7f4d7f394cebf52fd645  gcc/testsuite/gcc.target/i386/pr104479.c
+ 8d0bd7059c7beeb35df811f84735212e  gcc/testsuite/gcc.target/i386/pr104496.c
  6f32caf69432ac867dd42051bcfa22a8  gcc/testsuite/gcc.target/i386/pr104502.c
+ 2bb2b636832da9741d92fab7c29a5ffc  gcc/testsuite/gcc.target/i386/pr104551.c
+ 21083ed0382a1c184689d3a9ee1bc7ee  gcc/testsuite/gcc.target/i386/pr104637.c
+ c10378a2d73ee5141b52663c27dd9ab3  gcc/testsuite/gcc.target/i386/pr104664.c
+ 4d27fd1176df4ee229e9b963da7d3774  gcc/testsuite/gcc.target/i386/pr104666.c
  c0361c1e4d91a839c96bfc8c71f15139  gcc/testsuite/gcc.target/i386/pr104674.c
+ bce925bcc4824ac269c7eff429880bdc  gcc/testsuite/gcc.target/i386/pr104704-1.c
+ 32cc7bd4b350b1c1a1e2fa7f55fa3678  gcc/testsuite/gcc.target/i386/pr104704-2.c
+ 2188149aef08ab69a7fc91dea45bb902  gcc/testsuite/gcc.target/i386/pr104704-3.c
+ 958bafe3ee4e146ce118fa1c0800c61b  gcc/testsuite/gcc.target/i386/pr104704-4.c
+ ec017ce1f8cdd75815b576c125ee5925  gcc/testsuite/gcc.target/i386/pr104704-5.c
+ ad94da4af150d37dc4fa0f7e9ab83483  gcc/testsuite/gcc.target/i386/pr104704-6.c
+ d840c9df3e338f4787efa05c14216739  gcc/testsuite/gcc.target/i386/pr104732.c
+ 858d73b3a6b729d83724be36c5329db8  gcc/testsuite/gcc.target/i386/pr104779.c
  69c507a5894d6d6b62f48b087adf9652  gcc/testsuite/gcc.target/i386/pr104890.c
+ 037a3d7a3f3b35e995ffa489f29e6e01  gcc/testsuite/gcc.target/i386/pr104961.c
  8aea430f8fa49eb985ac268facb6294c  gcc/testsuite/gcc.target/i386/pr104963.c
  a64b8516e04de39ddebcd66dc046d450  gcc/testsuite/gcc.target/i386/pr104971.c
+ 6c2cfb57808f8702fd17233afe6fb623  gcc/testsuite/gcc.target/i386/pr104974.c
+ 13b7a1a2ba42d2cff2b01aac3e5745c8  gcc/testsuite/gcc.target/i386/pr104976.c
+ d397ad2737d73d869e11d2b504e795cd  gcc/testsuite/gcc.target/i386/pr104977.c
+ 2f544d8d1dc94808dde47b6564e727c4  gcc/testsuite/gcc.target/i386/pr104978.c
  8f5761aaf460d5a45e0118668b9ab299  gcc/testsuite/gcc.target/i386/pr105000-1.c
  a892cf5449c572594d9ac500ec2178bc  gcc/testsuite/gcc.target/i386/pr105000-2.c
  6c6335b2ca1f773cd45cd27ad0d7a133  gcc/testsuite/gcc.target/i386/pr105000-3.c
! 898f47e6fdcddbb3b8671b76b32b4b68  gcc/testsuite/gcc.target/i386/pr105000-4.c
! e3cf12a5755f26431dc36e4c7edc3345  gcc/testsuite/gcc.target/i386/pr105032.c
! 21eae05c7058c12d267eef32d269e06d  gcc/testsuite/gcc.target/i386/pr105066.c
! 4e4bf1a2c07ae507bdb50bda9764c54c  gcc/testsuite/gcc.target/i386/pr105068.c
  3de9ba59994fd09bad053a28eecbc68d  gcc/testsuite/gcc.target/i386/pr105123.c
+ 55393e491b95779e32dd8bc6d909a4fc  gcc/testsuite/gcc.target/i386/pr105139.c
+ 4ae7c694596b4d8b84d1d2e01c54c21c  gcc/testsuite/gcc.target/i386/pr105253.c
+ dfc3f83604e6883a02d821c48a3ad632  gcc/testsuite/gcc.target/i386/pr105338.c
+ 2a5473f87bb2410849bfe5418a5abeb6  gcc/testsuite/gcc.target/i386/pr105367.c
  304b7d185da41754f69656f5bfa7d508  gcc/testsuite/gcc.target/i386/pr11001-memcpy-1.c
  7dbe55f1460795545dd744807466a430  gcc/testsuite/gcc.target/i386/pr11001-memcpy-2.c
  cbe58ae1efc3b97c1019a430e1fedfcb  gcc/testsuite/gcc.target/i386/pr11001-memcpy-3.c
*************** cbe58ae1efc3b97c1019a430e1fedfcb  gcc/te
*** 62457,62462 ****
--- 65862,65869 ----
  e00380cd123a9ea3429ab36047aa6624  gcc/testsuite/gcc.target/i386/pr11001-strlen-1.c
  f2961b113a187971d8c265513b16a3a5  gcc/testsuite/gcc.target/i386/pr11001-strlen-2.c
  27f57729aea057bdb268886140eaba10  gcc/testsuite/gcc.target/i386/pr11001-strlen-3.c
+ 991b7f7f44e28179f98bb458fdb69ea6  gcc/testsuite/gcc.target/i386/pr11877-2.c
+ e7f6a568e551d3786797d6f56294b949  gcc/testsuite/gcc.target/i386/pr11877.c
  b03b1d817538a863277c823b5e4cdf75  gcc/testsuite/gcc.target/i386/pr12092-1.c
  f99f88a6e994ad6e55e065e41bc58f8f  gcc/testsuite/gcc.target/i386/pr12329.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
*************** a644b45bbd84c706db471958d241d23c  gcc/te
*** 62479,62485 ****
  fdacb6b61a5d36e161500b14166654ae  gcc/testsuite/gcc.target/i386/pr21101.c
  6043d0b4998dd913e2d9e533a24f6a55  gcc/testsuite/gcc.target/i386/pr21291.c
  95f61d1360614e076d6888229ba0588f  gcc/testsuite/gcc.target/i386/pr21518.c
! 486433461cd9a624886848368977cc4b  gcc/testsuite/gcc.target/i386/pr22076.c
  7c75138083b8282a0a6352ac179a89b4  gcc/testsuite/gcc.target/i386/pr22141.c
  8f2b174cc8f2156d82ca023e56a0b480  gcc/testsuite/gcc.target/i386/pr22152.c
  8ba2071af1172c3cd6d8259c589bc794  gcc/testsuite/gcc.target/i386/pr22362.c
--- 65886,65892 ----
  fdacb6b61a5d36e161500b14166654ae  gcc/testsuite/gcc.target/i386/pr21101.c
  6043d0b4998dd913e2d9e533a24f6a55  gcc/testsuite/gcc.target/i386/pr21291.c
  95f61d1360614e076d6888229ba0588f  gcc/testsuite/gcc.target/i386/pr21518.c
! 2c105a55409ab0dcb2ef9a0aa5f9f2d2  gcc/testsuite/gcc.target/i386/pr22076.c
  7c75138083b8282a0a6352ac179a89b4  gcc/testsuite/gcc.target/i386/pr22141.c
  8f2b174cc8f2156d82ca023e56a0b480  gcc/testsuite/gcc.target/i386/pr22152.c
  8ba2071af1172c3cd6d8259c589bc794  gcc/testsuite/gcc.target/i386/pr22362.c
*************** d165bed09148366aaa31f611e7089751  gcc/te
*** 62550,62562 ****
  02e79699ad467b9119ab95ea95ce85de  gcc/testsuite/gcc.target/i386/pr32708-1.c
  1457182604136ad18ad40e4bef334417  gcc/testsuite/gcc.target/i386/pr32708-2.c
  d5028e8e553339a683dbfee344302b99  gcc/testsuite/gcc.target/i386/pr32708-3.c
  10dc3d7f8f6698d02fa13e80847ac4a7  gcc/testsuite/gcc.target/i386/pr32961.c
  be0daa5b8fa10de50855aa2820b347ec  gcc/testsuite/gcc.target/i386/pr33329.c
  e9cdc80fa02a4b7ad68dd49b31747716  gcc/testsuite/gcc.target/i386/pr33483.c
  d8be6de338f5e76966d751a49d985341  gcc/testsuite/gcc.target/i386/pr33552.c
  b2020da80f37d8ab54f7b04a02277c4d  gcc/testsuite/gcc.target/i386/pr33555.c
  14289bcedd11a23e95175ce6dee47425  gcc/testsuite/gcc.target/i386/pr33600.c
! b21e79a5ccbb41a4005a772ca1454753  gcc/testsuite/gcc.target/i386/pr34012.c
  bbc28a05fd5c770ec3c7b6b4d9a6adef  gcc/testsuite/gcc.target/i386/pr34077.c
  34c5dc46a3bf54cbf23d641750615a60  gcc/testsuite/gcc.target/i386/pr34215.c
  0780476e96d7355e4ad4f35eac58f8b8  gcc/testsuite/gcc.target/i386/pr34256.c
--- 65957,65970 ----
  02e79699ad467b9119ab95ea95ce85de  gcc/testsuite/gcc.target/i386/pr32708-1.c
  1457182604136ad18ad40e4bef334417  gcc/testsuite/gcc.target/i386/pr32708-2.c
  d5028e8e553339a683dbfee344302b99  gcc/testsuite/gcc.target/i386/pr32708-3.c
+ 6dd4900360a5441e9509bb1c857b412e  gcc/testsuite/gcc.target/i386/pr32803.c
  10dc3d7f8f6698d02fa13e80847ac4a7  gcc/testsuite/gcc.target/i386/pr32961.c
  be0daa5b8fa10de50855aa2820b347ec  gcc/testsuite/gcc.target/i386/pr33329.c
  e9cdc80fa02a4b7ad68dd49b31747716  gcc/testsuite/gcc.target/i386/pr33483.c
  d8be6de338f5e76966d751a49d985341  gcc/testsuite/gcc.target/i386/pr33552.c
  b2020da80f37d8ab54f7b04a02277c4d  gcc/testsuite/gcc.target/i386/pr33555.c
  14289bcedd11a23e95175ce6dee47425  gcc/testsuite/gcc.target/i386/pr33600.c
! 104d9c24b470eb6056d09cfeede93201  gcc/testsuite/gcc.target/i386/pr34012.c
  bbc28a05fd5c770ec3c7b6b4d9a6adef  gcc/testsuite/gcc.target/i386/pr34077.c
  34c5dc46a3bf54cbf23d641750615a60  gcc/testsuite/gcc.target/i386/pr34215.c
  0780476e96d7355e4ad4f35eac58f8b8  gcc/testsuite/gcc.target/i386/pr34256.c
*************** ed716ad3de8dcdc57aabf5eea563a1ca  gcc/te
*** 62566,62571 ****
--- 65974,66002 ----
  18aea80a89f31c08dbe8d10041fe613c  gcc/testsuite/gcc.target/i386/pr35083.c
  b6e8605ca0d5664b88b872788cf1854c  gcc/testsuite/gcc.target/i386/pr35160.c
  bf27e716f503a0117fa8830cfc219b6b  gcc/testsuite/gcc.target/i386/pr35281.c
+ 45ae770d669d87ae8bccfa525c40f465  gcc/testsuite/gcc.target/i386/pr35513-10a.c
+ d2461a1097f5e1a140caa97d68994f8c  gcc/testsuite/gcc.target/i386/pr35513-10b.c
+ 457b428a13f0b13d0368e81acb807e4f  gcc/testsuite/gcc.target/i386/pr35513-11a.c
+ 1ac91658ebf50d676e77709bc2025ca2  gcc/testsuite/gcc.target/i386/pr35513-11b.c
+ 96bdde789f4541ee95c97cfd4dc53db9  gcc/testsuite/gcc.target/i386/pr35513-12a.c
+ 48d24b77af67448233421e28645c9a49  gcc/testsuite/gcc.target/i386/pr35513-12b.c
+ 94724fe16b173ee1d3df64f995ad8dc5  gcc/testsuite/gcc.target/i386/pr35513-1a.c
+ e494b6deda276d23b644697bbd54c314  gcc/testsuite/gcc.target/i386/pr35513-1b.c
+ cb08079b888ef8cc2d9fc6a13142d8ce  gcc/testsuite/gcc.target/i386/pr35513-2a.c
+ 77e2367e81ee414cdef329b412776a28  gcc/testsuite/gcc.target/i386/pr35513-2b.c
+ dd89797f8b3050ccfdea62b48a4b3e80  gcc/testsuite/gcc.target/i386/pr35513-3a.c
+ 9bca1bc177b4b25ece751b42ea5836d7  gcc/testsuite/gcc.target/i386/pr35513-3b.c
+ 5edcea0da864b7bb89842a3649d13a98  gcc/testsuite/gcc.target/i386/pr35513-4a.c
+ e5b79510297a8e38d20c02a9b4766e5b  gcc/testsuite/gcc.target/i386/pr35513-4b.c
+ 43324945ccb491934c2050d5b6c19380  gcc/testsuite/gcc.target/i386/pr35513-5a.c
+ d7d28d7a492fa92b25367c01b1da13ba  gcc/testsuite/gcc.target/i386/pr35513-5b.c
+ 898a5df94e0e6d4519a4ec7a287d1c03  gcc/testsuite/gcc.target/i386/pr35513-6a.c
+ ae3ad37004bcf490c839f987fc5c3e85  gcc/testsuite/gcc.target/i386/pr35513-6b.c
+ 508cc0908130aed47fd2dbcc287988d8  gcc/testsuite/gcc.target/i386/pr35513-7a.c
+ 7967d03f140337b43180307c31e4a1c2  gcc/testsuite/gcc.target/i386/pr35513-7b.c
+ 9ed4fe253a7c5854a866bca60559f45c  gcc/testsuite/gcc.target/i386/pr35513-8.c
+ 7eba39ee1c0831f729a93bfc443c182b  gcc/testsuite/gcc.target/i386/pr35513-9a.c
+ dc1b363ca6a696d85812d8bb68e4b18c  gcc/testsuite/gcc.target/i386/pr35513-9b.c
  efaec1d47687ebdae33b8db7c666c96b  gcc/testsuite/gcc.target/i386/pr35540.c
  78ed428e27d35c9aa34632150aefbedb  gcc/testsuite/gcc.target/i386/pr35714.c
  37e33c0dbefca253118b40d73b61058f  gcc/testsuite/gcc.target/i386/pr35767-1.c
*************** bbf1d6823b089cf961e02e65c1f23d3d  gcc/te
*** 62667,62672 ****
--- 66098,66104 ----
  c91c6015a1130478e24fe506bc452e64  gcc/testsuite/gcc.target/i386/pr42891.c
  9ea087973a0a1096298df4e84f05448e  gcc/testsuite/gcc.target/i386/pr43067.c
  4c2109921be5d78814d378b4018cfca2  gcc/testsuite/gcc.target/i386/pr43107.c
+ 5dfabbc39575e3afa296c7e9cd39e457  gcc/testsuite/gcc.target/i386/pr43147.c
  aa073f4162ffad443bb245d594813932  gcc/testsuite/gcc.target/i386/pr43508.c
  f959f9b7f68ec9300176ea5f3b5b723a  gcc/testsuite/gcc.target/i386/pr43524.c
  1066419aa0129e03db1a00505876de93  gcc/testsuite/gcc.target/i386/pr43528.c
*************** e96e89bee2b35c95b790aab0af5d4c57  gcc/te
*** 62785,62791 ****
  848587f75336b253219a56277622893a  gcc/testsuite/gcc.target/i386/pr49567.c
  d6e516d1e403892d4cc4985025b0655a  gcc/testsuite/gcc.target/i386/pr49715-1.c
  f2fc960bed4e328a5f9df7a309ea139d  gcc/testsuite/gcc.target/i386/pr49715-2.c
! f7ab73a2fd4f6a3dd974d04abb4a16b0  gcc/testsuite/gcc.target/i386/pr49781-1.c
  60f4b57b6b6a4d210042d2f56e1d33cf  gcc/testsuite/gcc.target/i386/pr49866.c
  f6f60a959460e8b78dd6402b43af4809  gcc/testsuite/gcc.target/i386/pr49920.c
  4e2731d8a8d0fba23d5859b02be21702  gcc/testsuite/gcc.target/i386/pr49927.c
--- 66217,66223 ----
  848587f75336b253219a56277622893a  gcc/testsuite/gcc.target/i386/pr49567.c
  d6e516d1e403892d4cc4985025b0655a  gcc/testsuite/gcc.target/i386/pr49715-1.c
  f2fc960bed4e328a5f9df7a309ea139d  gcc/testsuite/gcc.target/i386/pr49715-2.c
! e154f51bc90067fb4ffad0527665cfb5  gcc/testsuite/gcc.target/i386/pr49781-1.c
  60f4b57b6b6a4d210042d2f56e1d33cf  gcc/testsuite/gcc.target/i386/pr49866.c
  f6f60a959460e8b78dd6402b43af4809  gcc/testsuite/gcc.target/i386/pr49920.c
  4e2731d8a8d0fba23d5859b02be21702  gcc/testsuite/gcc.target/i386/pr49927.c
*************** fd40b61a82fba3ab0c6bb50cfedfb117  gcc/te
*** 62829,62841 ****
  438890bd8588325bfdd31602ae74f65c  gcc/testsuite/gcc.target/i386/pr53425-1.c
  384ba022d2854e096a4ab0f145961c51  gcc/testsuite/gcc.target/i386/pr53425-2.c
  b39743561f1aade37b33835b241fb062  gcc/testsuite/gcc.target/i386/pr53623.c
  179de2cb7520586109384b9edf5a9b30  gcc/testsuite/gcc.target/i386/pr53698.c
  7a5c747070caa41b5e773ef449165641  gcc/testsuite/gcc.target/i386/pr53712.c
  238ec098fd99cdffc357d25a9ea9d019  gcc/testsuite/gcc.target/i386/pr53759-2.c
  6ce6174380124dbd13cb4c159ee9daf9  gcc/testsuite/gcc.target/i386/pr53759.c
  b845585001d3aa1599603bf8f8438393  gcc/testsuite/gcc.target/i386/pr53907.c
  c6b9296a558aaf5187a02addf73c05d0  gcc/testsuite/gcc.target/i386/pr54157.c
! dba42c939904ce7e33213ea822d41659  gcc/testsuite/gcc.target/i386/pr54400.c
  414b8adf659b6e0fae2493215e4c8e43  gcc/testsuite/gcc.target/i386/pr54445-1.c
  f69bb6692a438b6c4c3ae59e8151f9e5  gcc/testsuite/gcc.target/i386/pr54445-2.c
  44119610eb32887f2d86d9e5b6ad2610  gcc/testsuite/gcc.target/i386/pr54457.c
--- 66261,66274 ----
  438890bd8588325bfdd31602ae74f65c  gcc/testsuite/gcc.target/i386/pr53425-1.c
  384ba022d2854e096a4ab0f145961c51  gcc/testsuite/gcc.target/i386/pr53425-2.c
  b39743561f1aade37b33835b241fb062  gcc/testsuite/gcc.target/i386/pr53623.c
+ 6c796e63203758ca42629846494a63cc  gcc/testsuite/gcc.target/i386/pr53652-1.c
  179de2cb7520586109384b9edf5a9b30  gcc/testsuite/gcc.target/i386/pr53698.c
  7a5c747070caa41b5e773ef449165641  gcc/testsuite/gcc.target/i386/pr53712.c
  238ec098fd99cdffc357d25a9ea9d019  gcc/testsuite/gcc.target/i386/pr53759-2.c
  6ce6174380124dbd13cb4c159ee9daf9  gcc/testsuite/gcc.target/i386/pr53759.c
  b845585001d3aa1599603bf8f8438393  gcc/testsuite/gcc.target/i386/pr53907.c
  c6b9296a558aaf5187a02addf73c05d0  gcc/testsuite/gcc.target/i386/pr54157.c
! c8e7054dc6f3a98a7c0df3f9b79853fa  gcc/testsuite/gcc.target/i386/pr54400.c
  414b8adf659b6e0fae2493215e4c8e43  gcc/testsuite/gcc.target/i386/pr54445-1.c
  f69bb6692a438b6c4c3ae59e8151f9e5  gcc/testsuite/gcc.target/i386/pr54445-2.c
  44119610eb32887f2d86d9e5b6ad2610  gcc/testsuite/gcc.target/i386/pr54457.c
*************** b853e1ca0f109e9670d15ca18915f967  gcc/te
*** 62845,62850 ****
--- 66278,66286 ----
  c502c143bfe08e286784446e3a530233  gcc/testsuite/gcc.target/i386/pr54703.c
  8c18d416dc1825c06a3a9dcbd8c0d384  gcc/testsuite/gcc.target/i386/pr54855-1.c
  099011458f2d14598fb51abb03498f98  gcc/testsuite/gcc.target/i386/pr54855-10.c
+ 7ea9105d4d66f0c9724cbec7a7c70dd8  gcc/testsuite/gcc.target/i386/pr54855-11.c
+ 915f45d04c9dfc17ee40450f653a11f7  gcc/testsuite/gcc.target/i386/pr54855-12.c
+ 306948b0d5b1130b66d0cea7fca028f5  gcc/testsuite/gcc.target/i386/pr54855-13.c
  e1f8fefaf23ab23b68f6b9e333156fbd  gcc/testsuite/gcc.target/i386/pr54855-2.c
  e13bc68c6f17bd4eaa19cccef521eb76  gcc/testsuite/gcc.target/i386/pr54855-3.c
  6c8a61e66aa69d7b21476fdde3fc61e9  gcc/testsuite/gcc.target/i386/pr54855-4.c
*************** ac964f4b563acffae35942f124a29c33  gcc/te
*** 63048,63054 ****
  1b750ef58ac019853f6b938d46949f6f  gcc/testsuite/gcc.target/i386/pr64061.c
  2c5760f15af5650d70f6f00a2d1a1b27  gcc/testsuite/gcc.target/i386/pr64110.c
  516133a673f4f174a446f2fc7a80e412  gcc/testsuite/gcc.target/i386/pr64114.c
! 06cb0e7a72d6bb5683ff9652a80c6ae9  gcc/testsuite/gcc.target/i386/pr64291-1.c
  2b7674a20e784b4cf390cb695a576dfe  gcc/testsuite/gcc.target/i386/pr64291-2.c
  e05ae6facbbbf26826893a785e206bc4  gcc/testsuite/gcc.target/i386/pr64317.c
  062641897c1f576f8e34f6685a28feab  gcc/testsuite/gcc.target/i386/pr64386.c
--- 66484,66490 ----
  1b750ef58ac019853f6b938d46949f6f  gcc/testsuite/gcc.target/i386/pr64061.c
  2c5760f15af5650d70f6f00a2d1a1b27  gcc/testsuite/gcc.target/i386/pr64110.c
  516133a673f4f174a446f2fc7a80e412  gcc/testsuite/gcc.target/i386/pr64114.c
! 94d8e5dfaec499764e8cbb0fff1583fb  gcc/testsuite/gcc.target/i386/pr64291-1.c
  2b7674a20e784b4cf390cb695a576dfe  gcc/testsuite/gcc.target/i386/pr64291-2.c
  e05ae6facbbbf26826893a785e206bc4  gcc/testsuite/gcc.target/i386/pr64317.c
  062641897c1f576f8e34f6685a28feab  gcc/testsuite/gcc.target/i386/pr64386.c
*************** fda2b65d0061958f9eae1a3d285dd267  gcc/te
*** 63345,63351 ****
  13ec50d91509c66a3917320da745ceec  gcc/testsuite/gcc.target/i386/pr71958.c
  79537cb8d94fad09b7881f2d40292035  gcc/testsuite/gcc.target/i386/pr71991.c
  904e9080ea8f3c82ccce73a3970937a8  gcc/testsuite/gcc.target/i386/pr72748.c
! 851459b82a69c2689a36f9c25c21af9d  gcc/testsuite/gcc.target/i386/pr72839.c
  b0d4c3b8fe476c0eb8a512a6ef1cb447  gcc/testsuite/gcc.target/i386/pr72867.c
  6e37cc5401acdbaef1eb08e6c91d201e  gcc/testsuite/gcc.target/i386/pr73350-2.c
  edb6fc6db756a58cb464e045d0c89eea  gcc/testsuite/gcc.target/i386/pr73350.c
--- 66781,66787 ----
  13ec50d91509c66a3917320da745ceec  gcc/testsuite/gcc.target/i386/pr71958.c
  79537cb8d94fad09b7881f2d40292035  gcc/testsuite/gcc.target/i386/pr71991.c
  904e9080ea8f3c82ccce73a3970937a8  gcc/testsuite/gcc.target/i386/pr72748.c
! 8444e978db2e5e4e46831f4d26433cd2  gcc/testsuite/gcc.target/i386/pr72839.c
  b0d4c3b8fe476c0eb8a512a6ef1cb447  gcc/testsuite/gcc.target/i386/pr72867.c
  6e37cc5401acdbaef1eb08e6c91d201e  gcc/testsuite/gcc.target/i386/pr73350-2.c
  edb6fc6db756a58cb464e045d0c89eea  gcc/testsuite/gcc.target/i386/pr73350.c
*************** e92468cd3d6db284b41cbd24c3b82524  gcc/te
*** 63367,63372 ****
--- 66803,66811 ----
  a0f1a716d3aa44f2dbe260d265da5118  gcc/testsuite/gcc.target/i386/pr78037.c
  01e4a31e89c869cea640914ee549516e  gcc/testsuite/gcc.target/i386/pr78057.c
  cb796275f121f6fc5bb34a1f5ecd6404  gcc/testsuite/gcc.target/i386/pr78102.c
+ d2671f8de951e862a05a3b058c0e531b  gcc/testsuite/gcc.target/i386/pr78103-1.c
+ 50efd3865abcadb7db28e7cfa5658fd7  gcc/testsuite/gcc.target/i386/pr78103-2.c
+ d143377745242bb93324de6ab740c8fa  gcc/testsuite/gcc.target/i386/pr78103-3.c
  3414b03e159800ce2cea7361afdc1832  gcc/testsuite/gcc.target/i386/pr78120.c
  57fc37420cc22c6af539706f8bd31ff9  gcc/testsuite/gcc.target/i386/pr78132.c
  49ae150fd045d15f422427bbe3805a0d  gcc/testsuite/gcc.target/i386/pr78227-1.c
*************** b5a1195fb0000fa62d98484dc9e5e87b  gcc/te
*** 63419,63425 ****
  34f00940b8e59e2ea4e70930a99d085c  gcc/testsuite/gcc.target/i386/pr79390.c
  ca3856428f6efee273c964dd181478b9  gcc/testsuite/gcc.target/i386/pr79495.c
  54f6598f08ee40c3b595937431a9760d  gcc/testsuite/gcc.target/i386/pr79498.c
! bc00dfd68405a008b750f094120fac4f  gcc/testsuite/gcc.target/i386/pr79514.c
  e24bb155bc16036a1f39902f9cda1133  gcc/testsuite/gcc.target/i386/pr79559.c
  a899c2c752f43e7b6b3632e8e72b7058  gcc/testsuite/gcc.target/i386/pr79568-1.c
  a11495811689152262f1a40e2f796ce9  gcc/testsuite/gcc.target/i386/pr79568-2.c
--- 66858,66864 ----
  34f00940b8e59e2ea4e70930a99d085c  gcc/testsuite/gcc.target/i386/pr79390.c
  ca3856428f6efee273c964dd181478b9  gcc/testsuite/gcc.target/i386/pr79495.c
  54f6598f08ee40c3b595937431a9760d  gcc/testsuite/gcc.target/i386/pr79498.c
! 119d6816b834706d2d15c9baa219cedc  gcc/testsuite/gcc.target/i386/pr79514.c
  e24bb155bc16036a1f39902f9cda1133  gcc/testsuite/gcc.target/i386/pr79559.c
  a899c2c752f43e7b6b3632e8e72b7058  gcc/testsuite/gcc.target/i386/pr79568-1.c
  a11495811689152262f1a40e2f796ce9  gcc/testsuite/gcc.target/i386/pr79568-2.c
*************** c4cb305cf2f30dad2b94791d7bb26ef4  gcc/te
*** 63434,63441 ****
  775e7fe3e5625b784949e1922efab9ea  gcc/testsuite/gcc.target/i386/pr79729.c
  b3b6f5c8ba17ba3296bdffadca2efac2  gcc/testsuite/gcc.target/i386/pr79733.c
  18645b863b875fac9109935b3bca4836  gcc/testsuite/gcc.target/i386/pr79754.c
! 8c0bf4e4cdbbf182daf5193ce4e2e52f  gcc/testsuite/gcc.target/i386/pr79793-1.c
! 1b3ba63668a454c57cb9841c509f0b88  gcc/testsuite/gcc.target/i386/pr79793-2.c
  49dfbd2a1cbed764e73c7612cb73e841  gcc/testsuite/gcc.target/i386/pr79804.c
  d6a597f0fbd3fbabaff69609d7a1c3b9  gcc/testsuite/gcc.target/i386/pr79807.c
  79f33466eabfc2e257a8fa0ed96c57ab  gcc/testsuite/gcc.target/i386/pr79901.c
--- 66873,66880 ----
  775e7fe3e5625b784949e1922efab9ea  gcc/testsuite/gcc.target/i386/pr79729.c
  b3b6f5c8ba17ba3296bdffadca2efac2  gcc/testsuite/gcc.target/i386/pr79733.c
  18645b863b875fac9109935b3bca4836  gcc/testsuite/gcc.target/i386/pr79754.c
! d1c55370a0700c4b0ce7991b8b3ebbb3  gcc/testsuite/gcc.target/i386/pr79793-1.c
! c1fb7f5c12e4a506659f551a10d7aa98  gcc/testsuite/gcc.target/i386/pr79793-2.c
  49dfbd2a1cbed764e73c7612cb73e841  gcc/testsuite/gcc.target/i386/pr79804.c
  d6a597f0fbd3fbabaff69609d7a1c3b9  gcc/testsuite/gcc.target/i386/pr79807.c
  79f33466eabfc2e257a8fa0ed96c57ab  gcc/testsuite/gcc.target/i386/pr79901.c
*************** a672dfcc5440c821c380d4cb19f42b3d  gcc/te
*** 63447,63452 ****
--- 66886,66892 ----
  a95e6aa1d6e8f4d1de9a5d656d6c8b06  gcc/testsuite/gcc.target/i386/pr80193.c
  93bc1e0038707c352eb4ab097774aacf  gcc/testsuite/gcc.target/i386/pr80206.c
  c2d275d4a046f13e9c05914f94fce964  gcc/testsuite/gcc.target/i386/pr80262.c
+ 221a06cedc6ab2b5d0186ca30a060b92  gcc/testsuite/gcc.target/i386/pr80270.c
  e9694b4ac41a634860c750f43e4ff35c  gcc/testsuite/gcc.target/i386/pr80298-1.c
  1741f4327b4263e09090e49b0a9ff7e1  gcc/testsuite/gcc.target/i386/pr80298-2.c
  a68ae3ab97b6d21670085a72bc4277db  gcc/testsuite/gcc.target/i386/pr80381.c
*************** d802d8f78f77ff9ea7bf9ebd1788b899  gcc/te
*** 63527,63533 ****
  88f29b73a00afbc08d01096e3ddef25f  gcc/testsuite/gcc.target/i386/pr82418.c
  c10399d1ca461d449d887689665c60f5  gcc/testsuite/gcc.target/i386/pr82444.c
  5d56e39f9ac26bdd7aa4ea0b8c63e11a  gcc/testsuite/gcc.target/i386/pr82460-1.c
! 8110f4b47f73bad4e95427d82c039c48  gcc/testsuite/gcc.target/i386/pr82460-2.c
  1e2f9a3364c5b9e9e8a774b844664ff0  gcc/testsuite/gcc.target/i386/pr82483-1.c
  3622804ce721ba0d53e3039972c643c9  gcc/testsuite/gcc.target/i386/pr82483-2.c
  40f88dc05bb96ef333cb47ff56d40630  gcc/testsuite/gcc.target/i386/pr82498-1.c
--- 66967,66973 ----
  88f29b73a00afbc08d01096e3ddef25f  gcc/testsuite/gcc.target/i386/pr82418.c
  c10399d1ca461d449d887689665c60f5  gcc/testsuite/gcc.target/i386/pr82444.c
  5d56e39f9ac26bdd7aa4ea0b8c63e11a  gcc/testsuite/gcc.target/i386/pr82460-1.c
! 8988f6898a31af4b0e1a8b453dbcd5ec  gcc/testsuite/gcc.target/i386/pr82460-2.c
  1e2f9a3364c5b9e9e8a774b844664ff0  gcc/testsuite/gcc.target/i386/pr82483-1.c
  3622804ce721ba0d53e3039972c643c9  gcc/testsuite/gcc.target/i386/pr82483-2.c
  40f88dc05bb96ef333cb47ff56d40630  gcc/testsuite/gcc.target/i386/pr82498-1.c
*************** fcb18a6ebf93b2667c4106b03dea5945  gcc/te
*** 63554,63559 ****
--- 66994,67004 ----
  d6af6bf73fbd63476737f60047117cce  gcc/testsuite/gcc.target/i386/pr82699-5.c
  7c0d220bfc6658971cce4f182fb6fd68  gcc/testsuite/gcc.target/i386/pr82699-6.c
  aa1a31dcd2bb10e7497c47e00629d6e0  gcc/testsuite/gcc.target/i386/pr82713.c
+ 52183528cf4fa20b4b61eecd3d642c02  gcc/testsuite/gcc.target/i386/pr82735-1.c
+ 6d9dd77f60c501de21a26b280e2b4827  gcc/testsuite/gcc.target/i386/pr82735-2.c
+ 7b8419024d524e987cdaef2026fde5d9  gcc/testsuite/gcc.target/i386/pr82735-3.c
+ ca055e8a8c2ebec94fd6cab961f77936  gcc/testsuite/gcc.target/i386/pr82735-4.c
+ d6397acbf3b8735efd438c2b082addd6  gcc/testsuite/gcc.target/i386/pr82735-5.c
  fee48546949cab9b7dea834adf9c10c3  gcc/testsuite/gcc.target/i386/pr82795.c
  7312e4c0a341ddbb1d280ed6869fc821  gcc/testsuite/gcc.target/i386/pr82853-1.c
  c3301cc2465c8460c504da97e005dc50  gcc/testsuite/gcc.target/i386/pr82853-2.c
*************** be4886fc2cd0dbd18a9cbd38f8d6690d  gcc/te
*** 63585,63593 ****
  3592e3b6e0dee866a764af464d0ee7af  gcc/testsuite/gcc.target/i386/pr83620.c
  1cbb11f638276c7d3789f6d1a6aee18f  gcc/testsuite/gcc.target/i386/pr83682.c
  038b9c92a928a2196a93e23a317b09ba  gcc/testsuite/gcc.target/i386/pr83735.c
  c78c9ff18e67e4fc991f85ce7a1d2f1a  gcc/testsuite/gcc.target/i386/pr83994.c
  898a487bfe8ece1ba9283d78e23c3064  gcc/testsuite/gcc.target/i386/pr84064.c
! f4ffa2661226f5140dfbcd2df15ef606  gcc/testsuite/gcc.target/i386/pr84101.c
  3fdc33c4435f1417dc7afcbcb3181466  gcc/testsuite/gcc.target/i386/pr84128.c
  87f029e1cd2ac55ab752af611c64ccda  gcc/testsuite/gcc.target/i386/pr84146.c
  58f60dba0169ddbf0a54b9452ef3fd1f  gcc/testsuite/gcc.target/i386/pr84278.c
--- 67030,67040 ----
  3592e3b6e0dee866a764af464d0ee7af  gcc/testsuite/gcc.target/i386/pr83620.c
  1cbb11f638276c7d3789f6d1a6aee18f  gcc/testsuite/gcc.target/i386/pr83682.c
  038b9c92a928a2196a93e23a317b09ba  gcc/testsuite/gcc.target/i386/pr83735.c
+ db90c8006566386e587dac261c42475d  gcc/testsuite/gcc.target/i386/pr83782-1.c
+ fd4df670d1f2432334ac5dea69ad2449  gcc/testsuite/gcc.target/i386/pr83782-2.c
  c78c9ff18e67e4fc991f85ce7a1d2f1a  gcc/testsuite/gcc.target/i386/pr83994.c
  898a487bfe8ece1ba9283d78e23c3064  gcc/testsuite/gcc.target/i386/pr84064.c
! 73c196df16e556f3d978eb775397d53e  gcc/testsuite/gcc.target/i386/pr84101.c
  3fdc33c4435f1417dc7afcbcb3181466  gcc/testsuite/gcc.target/i386/pr84128.c
  87f029e1cd2ac55ab752af611c64ccda  gcc/testsuite/gcc.target/i386/pr84146.c
  58f60dba0169ddbf0a54b9452ef3fd1f  gcc/testsuite/gcc.target/i386/pr84278.c
*************** e978d99e64900c57a4fb4fc02c3e26ff  gcc/te
*** 63664,63670 ****
--- 67111,67124 ----
  a74a3acccd7246931f9df31f6c8b78cf  gcc/testsuite/gcc.target/i386/pr85693-1.c
  109a65828273e2f5d6e46a100d0fabd9  gcc/testsuite/gcc.target/i386/pr85693.c
  aeec20794b5881e9807e9a0bab51cf84  gcc/testsuite/gcc.target/i386/pr85694.c
+ 912596b4794fa84362c27b35d9f9dd4d  gcc/testsuite/gcc.target/i386/pr85730.c
  85cfec46fa5bfd795501f05e21399d0b  gcc/testsuite/gcc.target/i386/pr85770.c
+ 42eb0ff8104b337544d9f786dd9baec9  gcc/testsuite/gcc.target/i386/pr85819-1a.c
+ bf2393d8cff61fcca6102e240816f68e  gcc/testsuite/gcc.target/i386/pr85819-1b.c
+ 857d0601cc348063aed75f7d26f022ed  gcc/testsuite/gcc.target/i386/pr85819-2a.c
+ 44186a497b123f869812d7a2ad1ad4c9  gcc/testsuite/gcc.target/i386/pr85819-2b.c
+ 5b155c92366f20e5e27bdf9bc93d4222  gcc/testsuite/gcc.target/i386/pr85819-2c.c
+ 266dc94dd0950d634bdb7aa431fb3cda  gcc/testsuite/gcc.target/i386/pr85819-3.c
  29b584fc0a33d2cf3a562f1486993c1c  gcc/testsuite/gcc.target/i386/pr85860.c
  dd2eb8b8e0da9871c78cecc6af291003  gcc/testsuite/gcc.target/i386/pr85934.c
  c19a9d9e41959574f6c21d72429137da  gcc/testsuite/gcc.target/i386/pr85950.c
*************** cd325df07a34c25d7fa808319419b8c1  gcc/te
*** 63682,63693 ****
  6fd58f2c457ea2c64ce5ebed9a3cd26c  gcc/testsuite/gcc.target/i386/pr86560-4.c
  440320438230bf106faabd242449aa10  gcc/testsuite/gcc.target/i386/pr86560-5.c
  4302cd96928c315422f2c1fd5d5e767e  gcc/testsuite/gcc.target/i386/pr86627.c
  703671f3f42a4c499c9d07306bbba0d0  gcc/testsuite/gcc.target/i386/pr86952.c
  713c32cd165cd428c96f881442855928  gcc/testsuite/gcc.target/i386/pr87007-1.c
  e500c9305de0564e4618ad5878201a8c  gcc/testsuite/gcc.target/i386/pr87007-2.c
  b29279fea41f09c3d829643c01710547  gcc/testsuite/gcc.target/i386/pr87007-3.c
! d5d0aeca0a6ee6cc0281e006cec2ec38  gcc/testsuite/gcc.target/i386/pr87007-4.c
! c2f36621a048ba4abdb10fa5c8b284c9  gcc/testsuite/gcc.target/i386/pr87007-5.c
  646c4c149f87e924fd338e46a8d900f1  gcc/testsuite/gcc.target/i386/pr87065.c
  c2ca631fa7bb41bff427b4c2a6a6aaa1  gcc/testsuite/gcc.target/i386/pr87198.c
  2dc347f1c11144765ea46729857f25f9  gcc/testsuite/gcc.target/i386/pr87246.c
--- 67136,67149 ----
  6fd58f2c457ea2c64ce5ebed9a3cd26c  gcc/testsuite/gcc.target/i386/pr86560-4.c
  440320438230bf106faabd242449aa10  gcc/testsuite/gcc.target/i386/pr86560-5.c
  4302cd96928c315422f2c1fd5d5e767e  gcc/testsuite/gcc.target/i386/pr86627.c
+ 4e6db35c71a53386640b35f94e3369e7  gcc/testsuite/gcc.target/i386/pr86722.c
+ 2215948ef28ef58e1d2e760e685eeefe  gcc/testsuite/gcc.target/i386/pr86723.c
  703671f3f42a4c499c9d07306bbba0d0  gcc/testsuite/gcc.target/i386/pr86952.c
  713c32cd165cd428c96f881442855928  gcc/testsuite/gcc.target/i386/pr87007-1.c
  e500c9305de0564e4618ad5878201a8c  gcc/testsuite/gcc.target/i386/pr87007-2.c
  b29279fea41f09c3d829643c01710547  gcc/testsuite/gcc.target/i386/pr87007-3.c
! 3c51a92f86d87e64167d756b38777f31  gcc/testsuite/gcc.target/i386/pr87007-4.c
! 705853765437dc1ce73b961aeed8fb39  gcc/testsuite/gcc.target/i386/pr87007-5.c
  646c4c149f87e924fd338e46a8d900f1  gcc/testsuite/gcc.target/i386/pr87065.c
  c2ca631fa7bb41bff427b4c2a6a6aaa1  gcc/testsuite/gcc.target/i386/pr87198.c
  2dc347f1c11144765ea46729857f25f9  gcc/testsuite/gcc.target/i386/pr87246.c
*************** d913cda86837f237b8859b590688e3a9  gcc/te
*** 63739,63744 ****
--- 67195,67206 ----
  e3721c52844753536ca549f71e61f954  gcc/testsuite/gcc.target/i386/pr88461.c
  40a7ef6fb3bcabb2e6a14793769e9983  gcc/testsuite/gcc.target/i386/pr88470.c
  d09b03236b7aad3cf25c32ccea767d74  gcc/testsuite/gcc.target/i386/pr88521.c
+ 5dbead610a1dd7e77af25c77972ddac1  gcc/testsuite/gcc.target/i386/pr88531-1a.c
+ 555df29348deb23102cde1e8c8e7388a  gcc/testsuite/gcc.target/i386/pr88531-1b.c
+ 32a862e24930734825f74ccb5cd04fdc  gcc/testsuite/gcc.target/i386/pr88531-1c.c
+ 019c39c7d098cf7f5069489447de5cf8  gcc/testsuite/gcc.target/i386/pr88531-2a.c
+ e86f2defc250de76fe2280f190250a40  gcc/testsuite/gcc.target/i386/pr88531-2b.c
+ 197ea43338868f67bcf03c0a230ffe75  gcc/testsuite/gcc.target/i386/pr88531-2c.c
  d759143ff7be3c83a7d63b6b1da335f4  gcc/testsuite/gcc.target/i386/pr88547-1.c
  bce12f30738edf2774ad07623978e78c  gcc/testsuite/gcc.target/i386/pr88713-1.c
  11cd1934753fe7004db294de3fb77a13  gcc/testsuite/gcc.target/i386/pr88713-2.c
*************** d82c437b681e812dd9c8b48af5ec1850  gcc/te
*** 63791,63797 ****
  a6b13b01e1a41a2d0dec3e0debcdf80b  gcc/testsuite/gcc.target/i386/pr89229-7a.c
  aead7f35b166baa85ab2aed11aa3c2d4  gcc/testsuite/gcc.target/i386/pr89229-7b.c
  d9b72f271f61a1292d8be12ea7a23b54  gcc/testsuite/gcc.target/i386/pr89229-7c.c
! 8101acdea56668e935e1e380034afee9  gcc/testsuite/gcc.target/i386/pr89261.c
  956a0e340ae4dfe5721ba6a3ab98969f  gcc/testsuite/gcc.target/i386/pr89290.c
  9b171107d18eb3849a61bea08c583e1a  gcc/testsuite/gcc.target/i386/pr89346.c
  3672969c19203520cc6589315eed1976  gcc/testsuite/gcc.target/i386/pr89386-1.c
--- 67253,67259 ----
  a6b13b01e1a41a2d0dec3e0debcdf80b  gcc/testsuite/gcc.target/i386/pr89229-7a.c
  aead7f35b166baa85ab2aed11aa3c2d4  gcc/testsuite/gcc.target/i386/pr89229-7b.c
  d9b72f271f61a1292d8be12ea7a23b54  gcc/testsuite/gcc.target/i386/pr89229-7c.c
! 4e53037c62f9dce84f092674db01aec5  gcc/testsuite/gcc.target/i386/pr89261.c
  956a0e340ae4dfe5721ba6a3ab98969f  gcc/testsuite/gcc.target/i386/pr89290.c
  9b171107d18eb3849a61bea08c583e1a  gcc/testsuite/gcc.target/i386/pr89346.c
  3672969c19203520cc6589315eed1976  gcc/testsuite/gcc.target/i386/pr89386-1.c
*************** b9dc216c8935f73126bb07b75ef58c82  gcc/te
*** 63808,63825 ****
  fa633632e627d7c0fcb34ba2673e196b  gcc/testsuite/gcc.target/i386/pr89523-8.c
  aab7cb035d0456e2d0bf25f7f53cfd30  gcc/testsuite/gcc.target/i386/pr89523-9.c
  8d11eaa1821254c815377b2af471ed8f  gcc/testsuite/gcc.target/i386/pr89618.c
! 412d8fea3064bd44adcced9638b749cf  gcc/testsuite/gcc.target/i386/pr89676.c
  8c3d1b44db7a8ab2be0a823e6604c679  gcc/testsuite/gcc.target/i386/pr89684.c
  673b7f390c915c1784df3e6226b2ea65  gcc/testsuite/gcc.target/i386/pr89827.c
  246798e6fdd75c72604b74965a056935  gcc/testsuite/gcc.target/i386/pr89848.c
  17b51e3fde50f413030ac13d4da5f92d  gcc/testsuite/gcc.target/i386/pr89902.c
  e225d6b5ab365db1e6c8d7a75e04345d  gcc/testsuite/gcc.target/i386/pr89903.c
  f529a8c1dee59aa4275d01977b57a0f2  gcc/testsuite/gcc.target/i386/pr89945.c
  2b740660f12ab9c7636b35db2ec19c55  gcc/testsuite/gcc.target/i386/pr89965.c
  4fd743cb437900275562031e9da68537  gcc/testsuite/gcc.target/i386/pr90007.c
  a7e4330876ef271143c6421ba5f2cf85  gcc/testsuite/gcc.target/i386/pr90096.c
  a9287216d129eff30597718cb0900160  gcc/testsuite/gcc.target/i386/pr90178.c
  c04294701860868605e6d4177d1f5a28  gcc/testsuite/gcc.target/i386/pr90193.c
  858d458d8346caaedca9450697386549  gcc/testsuite/gcc.target/i386/pr90358.c
  1cb329f5a76e5acaf17548543400d61a  gcc/testsuite/gcc.target/i386/pr90497-1.c
  8a1a8d5559148ece6ba2d8cbd525c841  gcc/testsuite/gcc.target/i386/pr90497-2.c
--- 67270,67291 ----
  fa633632e627d7c0fcb34ba2673e196b  gcc/testsuite/gcc.target/i386/pr89523-8.c
  aab7cb035d0456e2d0bf25f7f53cfd30  gcc/testsuite/gcc.target/i386/pr89523-9.c
  8d11eaa1821254c815377b2af471ed8f  gcc/testsuite/gcc.target/i386/pr89618.c
! 7a4a0653050f553879a39852089ab9b9  gcc/testsuite/gcc.target/i386/pr89676.c
  8c3d1b44db7a8ab2be0a823e6604c679  gcc/testsuite/gcc.target/i386/pr89684.c
  673b7f390c915c1784df3e6226b2ea65  gcc/testsuite/gcc.target/i386/pr89827.c
  246798e6fdd75c72604b74965a056935  gcc/testsuite/gcc.target/i386/pr89848.c
  17b51e3fde50f413030ac13d4da5f92d  gcc/testsuite/gcc.target/i386/pr89902.c
  e225d6b5ab365db1e6c8d7a75e04345d  gcc/testsuite/gcc.target/i386/pr89903.c
  f529a8c1dee59aa4275d01977b57a0f2  gcc/testsuite/gcc.target/i386/pr89945.c
+ adae3156ab4e2f317ef6a23cbd52a09e  gcc/testsuite/gcc.target/i386/pr89954.c
  2b740660f12ab9c7636b35db2ec19c55  gcc/testsuite/gcc.target/i386/pr89965.c
+ 61421458c0cd694e7f45d147f09c71dd  gcc/testsuite/gcc.target/i386/pr89984-1.c
+ 4675458af6efdc7039a76f2ca0824f6a  gcc/testsuite/gcc.target/i386/pr89984-2.c
  4fd743cb437900275562031e9da68537  gcc/testsuite/gcc.target/i386/pr90007.c
  a7e4330876ef271143c6421ba5f2cf85  gcc/testsuite/gcc.target/i386/pr90096.c
  a9287216d129eff30597718cb0900160  gcc/testsuite/gcc.target/i386/pr90178.c
  c04294701860868605e6d4177d1f5a28  gcc/testsuite/gcc.target/i386/pr90193.c
+ 7201d75d66d22da420434866d606904c  gcc/testsuite/gcc.target/i386/pr90356.c
  858d458d8346caaedca9450697386549  gcc/testsuite/gcc.target/i386/pr90358.c
  1cb329f5a76e5acaf17548543400d61a  gcc/testsuite/gcc.target/i386/pr90497-1.c
  8a1a8d5559148ece6ba2d8cbd525c841  gcc/testsuite/gcc.target/i386/pr90497-2.c
*************** e848ec23a6a21441ce72a346a0736a69  gcc/te
*** 63830,63835 ****
--- 67296,67327 ----
  cd32b51927f32216f74b09c3940931d8  gcc/testsuite/gcc.target/i386/pr90552.c
  bedac99974c4a13a1a78b62b24233122  gcc/testsuite/gcc.target/i386/pr90765-1.c
  78277186e5e9fff510631438a31733a5  gcc/testsuite/gcc.target/i386/pr90765-2.c
+ 5535723054d423f76999bb4ced0c98cb  gcc/testsuite/gcc.target/i386/pr90773-1.c
+ 01261e09045c9aa78b6cc444b7c0316d  gcc/testsuite/gcc.target/i386/pr90773-10.c
+ 2de1d3475377a0a05f37c71232077770  gcc/testsuite/gcc.target/i386/pr90773-11.c
+ 6c3a811981bba7062182e9c01219471b  gcc/testsuite/gcc.target/i386/pr90773-12.c
+ 593c73526bae9b94c84a95ce2bbc7e30  gcc/testsuite/gcc.target/i386/pr90773-13.c
+ f7e21a56566f8559fcba70f3cda721fe  gcc/testsuite/gcc.target/i386/pr90773-14.c
+ bc6806d14eb4d9fac9f78751c494bb2b  gcc/testsuite/gcc.target/i386/pr90773-15.c
+ 06df718acc299d530a1ea5b6fa3f889d  gcc/testsuite/gcc.target/i386/pr90773-16.c
+ 2bc65423916016d38cdf35a4de5ccbd3  gcc/testsuite/gcc.target/i386/pr90773-17.c
+ 91b619d01a947fbd9e263614f1000278  gcc/testsuite/gcc.target/i386/pr90773-18.c
+ 700d4a7ed37c9f9247b66f3967dc24c1  gcc/testsuite/gcc.target/i386/pr90773-19.c
+ ce71d2d204e70fc104bb0bde9fa1abc7  gcc/testsuite/gcc.target/i386/pr90773-2.c
+ 5fa9c561dde23d97ac790aff8cb8e83d  gcc/testsuite/gcc.target/i386/pr90773-20.c
+ 2b433e52b2c381c1508a26267c24ea60  gcc/testsuite/gcc.target/i386/pr90773-21.c
+ 9705238b58cde2fb78fac84b31c2572c  gcc/testsuite/gcc.target/i386/pr90773-22.c
+ 8ef00f74aefd7db4b0e39743ffa5bc4c  gcc/testsuite/gcc.target/i386/pr90773-23.c
+ 02a80269a71a00c4d622823fa50ec6dd  gcc/testsuite/gcc.target/i386/pr90773-24.c
+ b9441c7790b11e31803b469f75453364  gcc/testsuite/gcc.target/i386/pr90773-25.c
+ 7a537e43b7169ce5c42b66a28332fa9a  gcc/testsuite/gcc.target/i386/pr90773-26.c
+ 9dbe61f3785c1f68f516febd9aeaec1e  gcc/testsuite/gcc.target/i386/pr90773-3.c
+ 97422587df7aa58c60dc6e0f1914878b  gcc/testsuite/gcc.target/i386/pr90773-4.c
+ 8efe9d8a87db42e6fa61dd083da1b287  gcc/testsuite/gcc.target/i386/pr90773-5.c
+ a4837008d1df9276ede99b659bce983a  gcc/testsuite/gcc.target/i386/pr90773-6.c
+ 593c73526bae9b94c84a95ce2bbc7e30  gcc/testsuite/gcc.target/i386/pr90773-7.c
+ a9e88f5099994914e858c127b79c4442  gcc/testsuite/gcc.target/i386/pr90773-8.c
+ cef1d7eea62819f6e063e7efe1b02721  gcc/testsuite/gcc.target/i386/pr90773-9.c
  37575f355d5ce4345369fc3dbd739ad1  gcc/testsuite/gcc.target/i386/pr90856.c
  82fd34c6f4f79a15f4144b67a4507d26  gcc/testsuite/gcc.target/i386/pr90867.c
  2b7c97f65c528334affd7746c55254ad  gcc/testsuite/gcc.target/i386/pr90878.c
*************** f7f20cd21d9a7c4a60073a194c493b9e  gcc/te
*** 63838,63843 ****
--- 67330,67337 ----
  e95a39ca6615e1505ad093c0aee36b67  gcc/testsuite/gcc.target/i386/pr90980-2.c
  901dc48d360343e1ea7e6419484c143a  gcc/testsuite/gcc.target/i386/pr90980-3.c
  d4d3cbfe391f8d5fa9c6de8aa15ab683  gcc/testsuite/gcc.target/i386/pr91033.c
+ e0933c52118bda34d334db98cda88cf5  gcc/testsuite/gcc.target/i386/pr91103-1.c
+ 3c82ceb8f8dce6c69a814ac312cb47e4  gcc/testsuite/gcc.target/i386/pr91103-2.c
  214e297c0a7eb9cbfdb0fe5aaefdfaa2  gcc/testsuite/gcc.target/i386/pr91131.c
  ba608b5492e3833c5da0c6ef293edb31  gcc/testsuite/gcc.target/i386/pr91154.c
  e6d85fea86990839654cf2c48129ed77  gcc/testsuite/gcc.target/i386/pr91188-1a.c
*************** b2fcdfda276151a68e045de262ee33af  gcc/te
*** 63850,63858 ****
  0cedb8815ec474ea3a6454ae7fdff46f  gcc/testsuite/gcc.target/i386/pr91298-1.c
  f0fcd639c26dec3b350ac6bf649264db  gcc/testsuite/gcc.target/i386/pr91298-2.c
  64cc0c185459dccf818a2e26073b682d  gcc/testsuite/gcc.target/i386/pr91333.c
  2470ef4544f4a84841952f618da1b96d  gcc/testsuite/gcc.target/i386/pr91385.c
  3b4e2b2c32d8bdc5a1a5b4ef145bdefc  gcc/testsuite/gcc.target/i386/pr91408.c
! 8e35abbc0ce56046f309d1636afea7a5  gcc/testsuite/gcc.target/i386/pr91446.c
  ab6ee2072fb61291268093129ba13ec6  gcc/testsuite/gcc.target/i386/pr91461-1.c
  de1bf3bf26a0088e97654cd462f8a1f6  gcc/testsuite/gcc.target/i386/pr91461-2.c
  811082e592579f750af07ca87c986f2c  gcc/testsuite/gcc.target/i386/pr91461-3.c
--- 67344,67355 ----
  0cedb8815ec474ea3a6454ae7fdff46f  gcc/testsuite/gcc.target/i386/pr91298-1.c
  f0fcd639c26dec3b350ac6bf649264db  gcc/testsuite/gcc.target/i386/pr91298-2.c
  64cc0c185459dccf818a2e26073b682d  gcc/testsuite/gcc.target/i386/pr91333.c
+ 2c506f7ed02f01933d3eb1f68153db80  gcc/testsuite/gcc.target/i386/pr91384.c
  2470ef4544f4a84841952f618da1b96d  gcc/testsuite/gcc.target/i386/pr91385.c
+ 9111066ea918636e0d208d6c622d3dfa  gcc/testsuite/gcc.target/i386/pr91400-1.c
+ e489f4efe87c467d7fa60d59b9c6fb70  gcc/testsuite/gcc.target/i386/pr91400-2.c
  3b4e2b2c32d8bdc5a1a5b4ef145bdefc  gcc/testsuite/gcc.target/i386/pr91408.c
! 265abc59281cb582e3bcfc36fe5f2a90  gcc/testsuite/gcc.target/i386/pr91446.c
  ab6ee2072fb61291268093129ba13ec6  gcc/testsuite/gcc.target/i386/pr91461-1.c
  de1bf3bf26a0088e97654cd462f8a1f6  gcc/testsuite/gcc.target/i386/pr91461-2.c
  811082e592579f750af07ca87c986f2c  gcc/testsuite/gcc.target/i386/pr91461-3.c
*************** fd5403ac26bbe83c4c9a50fff34fd61f  gcc/te
*** 63886,63900 ****
  c689d7bd208a6bbb908ec089abdd00ef  gcc/testsuite/gcc.target/i386/pr92645-7.c
  3982c7bc8cfe7849b34d333c7e3b2b20  gcc/testsuite/gcc.target/i386/pr92645.c
  6c6abd7fc9af36fe781df4cf2ef54a16  gcc/testsuite/gcc.target/i386/pr92651.c
! 2f5e3b259859baf81b976e49856244f7  gcc/testsuite/gcc.target/i386/pr92658-avx2-2.c
! 4856eea9785553729327cf18e683e5f8  gcc/testsuite/gcc.target/i386/pr92658-avx2.c
! 180c3a69a2562ff8bf0fe46cc6da2fde  gcc/testsuite/gcc.target/i386/pr92658-avx512bw-2.c
! 94113005ca6b84a1864ea7b57deb4609  gcc/testsuite/gcc.target/i386/pr92658-avx512bw-trunc.c
  51599d0f567f1121d4f98c5828e35d5d  gcc/testsuite/gcc.target/i386/pr92658-avx512bw.c
! ace1d0be4f0264e55b3e5b9eba7f22af  gcc/testsuite/gcc.target/i386/pr92658-avx512f.c
! a888b133b231d423e952de240af952d9  gcc/testsuite/gcc.target/i386/pr92658-avx512vl.c
! 0f1eb877f971e245dd0012fa9ccef4b4  gcc/testsuite/gcc.target/i386/pr92658-sse4-2.c
! 1dea179b82db3ab7a4eb640a688316f2  gcc/testsuite/gcc.target/i386/pr92658-sse4.c
  3f30af17306d3c4ccb2eda2412f652a6  gcc/testsuite/gcc.target/i386/pr92686.inc
  925625e5b22e0fe4e1688a9751714623  gcc/testsuite/gcc.target/i386/pr92803.c
  0025ad5a1bc08d8189cedc91bd2d9b19  gcc/testsuite/gcc.target/i386/pr92807-1.c
--- 67383,67397 ----
  c689d7bd208a6bbb908ec089abdd00ef  gcc/testsuite/gcc.target/i386/pr92645-7.c
  3982c7bc8cfe7849b34d333c7e3b2b20  gcc/testsuite/gcc.target/i386/pr92645.c
  6c6abd7fc9af36fe781df4cf2ef54a16  gcc/testsuite/gcc.target/i386/pr92651.c
! 6b30805bc47b76314701de39182024c7  gcc/testsuite/gcc.target/i386/pr92658-avx2-2.c
! 2d1dbf18bcc052068a31667f01a26b12  gcc/testsuite/gcc.target/i386/pr92658-avx2.c
! a6d944350614d95163bf09072cee89ea  gcc/testsuite/gcc.target/i386/pr92658-avx512bw-2.c
! 6b0191050c1457729dd379bd3a918548  gcc/testsuite/gcc.target/i386/pr92658-avx512bw-trunc.c
  51599d0f567f1121d4f98c5828e35d5d  gcc/testsuite/gcc.target/i386/pr92658-avx512bw.c
! 76128622fa1f72cf7ae14382561830e9  gcc/testsuite/gcc.target/i386/pr92658-avx512f.c
! 15423b073f0aa92eeb8683d4f96ce6b0  gcc/testsuite/gcc.target/i386/pr92658-avx512vl.c
! f7ec7712f5bdc6ba6548210cb66b2681  gcc/testsuite/gcc.target/i386/pr92658-sse4-2.c
! d99054d3a6717f6febc8ba0f9175eb4d  gcc/testsuite/gcc.target/i386/pr92658-sse4.c
  3f30af17306d3c4ccb2eda2412f652a6  gcc/testsuite/gcc.target/i386/pr92686.inc
  925625e5b22e0fe4e1688a9751714623  gcc/testsuite/gcc.target/i386/pr92803.c
  0025ad5a1bc08d8189cedc91bd2d9b19  gcc/testsuite/gcc.target/i386/pr92807-1.c
*************** a830133e19b8979f8f171a4d277b5086  gcc/te
*** 63934,63939 ****
--- 67431,67437 ----
  7644c1be476e6209891a685451fc7a8e  gcc/testsuite/gcc.target/i386/pr93997.c
  8c165251cb999c0428e4d75a69c73e1a  gcc/testsuite/gcc.target/i386/pr94088.c
  837f98d15160f7414982d8da3f079086  gcc/testsuite/gcc.target/i386/pr94103.c
+ 3a1ed0ddff5711cfd6eb5b321069f844  gcc/testsuite/gcc.target/i386/pr94147.c
  0b532f311647a180289b6a1ec3659974  gcc/testsuite/gcc.target/i386/pr94283.c
  d3b243dc63832cc4fd60f5339a04faa7  gcc/testsuite/gcc.target/i386/pr94308.c
  eac191f45716935f4a58ab52765ec381  gcc/testsuite/gcc.target/i386/pr94417-1.c
*************** b2cbf35d26b6c14bf91ddc351c1728b9  gcc/te
*** 63949,63954 ****
--- 67447,67454 ----
  975929fc9881516edb25370a2a0a5a8c  gcc/testsuite/gcc.target/i386/pr94561.c
  c93af1b8273ac94a94f8677f1b5cd79e  gcc/testsuite/gcc.target/i386/pr94603.c
  2a4ee61ffc4ff89b03d5b4db97003ff9  gcc/testsuite/gcc.target/i386/pr94650.c
+ 0f3249fd11f2a4f7ed103608da29c5f0  gcc/testsuite/gcc.target/i386/pr94790-1.c
+ 923e20c0ba30977053fdb2ca0d119e30  gcc/testsuite/gcc.target/i386/pr94790-2.c
  0659b57eaeed9babf597320b99d31792  gcc/testsuite/gcc.target/i386/pr94795-1.c
  50f032a8bd40c7787a10cb203b657362  gcc/testsuite/gcc.target/i386/pr94795-2.c
  74bc9b105e1d3b09ffb1089b0029ed6c  gcc/testsuite/gcc.target/i386/pr94802.c
*************** d4ef4f6b47a4fdedb7ba07f47e0eb158  gcc/te
*** 63964,63970 ****
  6707378f8e71d1047cbc2cd8253f6994  gcc/testsuite/gcc.target/i386/pr95021-3.c
  ce30a5c6fd58a883a91e9aa716541205  gcc/testsuite/gcc.target/i386/pr95021-4.c
  c581a2fc7d7556f11fa93c550095796b  gcc/testsuite/gcc.target/i386/pr95021-5.c
! e34960fb1a973a8c00d27fe9fec3dbdc  gcc/testsuite/gcc.target/i386/pr95046-1.c
  599b2f9bb05c4a6eb6702ee079047ceb  gcc/testsuite/gcc.target/i386/pr95046-2.c
  44e6fd66f57ba38d015c6227fb682018  gcc/testsuite/gcc.target/i386/pr95046-3.c
  fca88bfebb6c3b1722edbd60d86f5102  gcc/testsuite/gcc.target/i386/pr95046-4.c
--- 67464,67470 ----
  6707378f8e71d1047cbc2cd8253f6994  gcc/testsuite/gcc.target/i386/pr95021-3.c
  ce30a5c6fd58a883a91e9aa716541205  gcc/testsuite/gcc.target/i386/pr95021-4.c
  c581a2fc7d7556f11fa93c550095796b  gcc/testsuite/gcc.target/i386/pr95021-5.c
! f959ecc3fe5eedc15d650234bce97cc2  gcc/testsuite/gcc.target/i386/pr95046-1.c
  599b2f9bb05c4a6eb6702ee079047ceb  gcc/testsuite/gcc.target/i386/pr95046-2.c
  44e6fd66f57ba38d015c6227fb682018  gcc/testsuite/gcc.target/i386/pr95046-3.c
  fca88bfebb6c3b1722edbd60d86f5102  gcc/testsuite/gcc.target/i386/pr95046-4.c
*************** fca88bfebb6c3b1722edbd60d86f5102  gcc/te
*** 63972,63977 ****
--- 67472,67478 ----
  f99565eff4cffffe4c1e7040edfe3baa  gcc/testsuite/gcc.target/i386/pr95046-6.c
  3bf56966fbf957c62ab3f04fcea6feb9  gcc/testsuite/gcc.target/i386/pr95046-7.c
  e3c8ba81048775e01a220f4434f6f73b  gcc/testsuite/gcc.target/i386/pr95046-8.c
+ 76229e5501762ee02e90da14cd21e663  gcc/testsuite/gcc.target/i386/pr95046-9.c
  775e022412b9eb8788a2f89e73af6377  gcc/testsuite/gcc.target/i386/pr95052.c
  119d16d55811f9aa62a3d51063b0d9a7  gcc/testsuite/gcc.target/i386/pr95125-avx.c
  dee92b3246f112fd920d87f83464ad78  gcc/testsuite/gcc.target/i386/pr95125-avx512f.c
*************** ba3da982ef27c8bafb0f0fcdf517161f  gcc/te
*** 63998,64010 ****
  f072219a90178a8fc4afbacca65f147c  gcc/testsuite/gcc.target/i386/pr95483-7.c
  932a73ed81bfc47dbffb9c18480f2f1e  gcc/testsuite/gcc.target/i386/pr95535-1.c
  72c79186961f94732883bd658e38ad62  gcc/testsuite/gcc.target/i386/pr95535-2.c
  20068d0d93e713ef0051850c981b52e7  gcc/testsuite/gcc.target/i386/pr95750.c
  25fe85ddb7ee9cab612ea5eda9d44dbe  gcc/testsuite/gcc.target/i386/pr95771.c
! 13443f75df7d8401a4fd2112e7864e2e  gcc/testsuite/gcc.target/i386/pr95778-1.c
! 2e6e4fd245045c839161184b36fa037d  gcc/testsuite/gcc.target/i386/pr95778-2.c
  e8bf37fd9069fb47dd6ee3999065d19f  gcc/testsuite/gcc.target/i386/pr95791.c
! 4c1603ed1fb70b2991fadfc20dcb8b93  gcc/testsuite/gcc.target/i386/pr95798-1.c
! e835a3c0a53acb50000505332389571a  gcc/testsuite/gcc.target/i386/pr95798-2.c
  79acb80e6322af9fc4ebc6e7e63ab3e8  gcc/testsuite/gcc.target/i386/pr95852-1.c
  ae270707b27ab3cfb4847c3ff6fcd7b5  gcc/testsuite/gcc.target/i386/pr95852-2.c
  cb144ecc27b4a46d3bb712e33de3bfc3  gcc/testsuite/gcc.target/i386/pr95852-3.c
--- 67499,67512 ----
  f072219a90178a8fc4afbacca65f147c  gcc/testsuite/gcc.target/i386/pr95483-7.c
  932a73ed81bfc47dbffb9c18480f2f1e  gcc/testsuite/gcc.target/i386/pr95535-1.c
  72c79186961f94732883bd658e38ad62  gcc/testsuite/gcc.target/i386/pr95535-2.c
+ c7485821b3a31d9cfaeed2b36d378c96  gcc/testsuite/gcc.target/i386/pr95740.c
  20068d0d93e713ef0051850c981b52e7  gcc/testsuite/gcc.target/i386/pr95750.c
  25fe85ddb7ee9cab612ea5eda9d44dbe  gcc/testsuite/gcc.target/i386/pr95771.c
! 1da034b64ad8be123f1b3fb0e22739a8  gcc/testsuite/gcc.target/i386/pr95778-1.c
! 30808786af3c66cc8bb63577fcb21b13  gcc/testsuite/gcc.target/i386/pr95778-2.c
  e8bf37fd9069fb47dd6ee3999065d19f  gcc/testsuite/gcc.target/i386/pr95791.c
! fd4a3f74fb119b3f9778cf26e12d7195  gcc/testsuite/gcc.target/i386/pr95798-1.c
! a22384fcda5fe9c2f3b2dff0fc36e60c  gcc/testsuite/gcc.target/i386/pr95798-2.c
  79acb80e6322af9fc4ebc6e7e63ab3e8  gcc/testsuite/gcc.target/i386/pr95852-1.c
  ae270707b27ab3cfb4847c3ff6fcd7b5  gcc/testsuite/gcc.target/i386/pr95852-2.c
  cb144ecc27b4a46d3bb712e33de3bfc3  gcc/testsuite/gcc.target/i386/pr95852-3.c
*************** a58801ab95d6c36f56d320212bc09df3  gcc/te
*** 64029,64034 ****
--- 67531,67537 ----
  45643988cf15c9ae848c59ace0b86744  gcc/testsuite/gcc.target/i386/pr96298.c
  307deb6b4038e80b218bab133b0e0e60  gcc/testsuite/gcc.target/i386/pr96539.c
  7452cc0f5db1672bf14a67b2874c0d0e  gcc/testsuite/gcc.target/i386/pr96562-1.c
+ 6d9da6efe469401a64586c5cd12edddf  gcc/testsuite/gcc.target/i386/pr96696.c
  f48be0c67737fdfd86cf3b33ed03b238  gcc/testsuite/gcc.target/i386/pr96744-1.c
  dd7f4a2c5c803e97fee5047ba7436ad6  gcc/testsuite/gcc.target/i386/pr96744-2.c
  bc419f44c00e9b54d4549483dce53d7a  gcc/testsuite/gcc.target/i386/pr96744-3a.c
*************** f302932ae1e573ae584a1035ec149c69  gcc/te
*** 64053,64066 ****
  ec709b6f5fc1a240f7309e7b5ccf2af2  gcc/testsuite/gcc.target/i386/pr96938.c
  e860da5c4163b56a77c4cb6a6238f5ea  gcc/testsuite/gcc.target/i386/pr97032.c
  54796d80a148a93895941284c072af19  gcc/testsuite/gcc.target/i386/pr97140.c
! 0e11331ddd16f80766688a4e8388652e  gcc/testsuite/gcc.target/i386/pr97249-1.c
  74aff39747c5e4248dbc36eceea5ace6  gcc/testsuite/gcc.target/i386/pr97282.c
  5e1f5e8518b908dda4d66e083ec90ed3  gcc/testsuite/gcc.target/i386/pr97313.c
  14c9de1158d2b6c5aa725f4ce14715d6  gcc/testsuite/gcc.target/i386/pr97387-1.c
  d8be69267a82470717a5b153648b522f  gcc/testsuite/gcc.target/i386/pr97387-2.c
  d1bbffbd6f7347b6b51d890b46131e04  gcc/testsuite/gcc.target/i386/pr97506.c
  a6f6652b9018de3bb9e4cc843f0166a1  gcc/testsuite/gcc.target/i386/pr97510.c
! 1cf9dffceeb14c05341053b6fc14bb7a  gcc/testsuite/gcc.target/i386/pr97521.c
  852e9c3686a4f639e7a7b478e70760ee  gcc/testsuite/gcc.target/i386/pr97540.c
  c0a367db40ed035125a08383892eefc3  gcc/testsuite/gcc.target/i386/pr97642-1.c
  7a57c062ea1e3fbcc3c093fcf6e4b984  gcc/testsuite/gcc.target/i386/pr97642-2.c
--- 67556,67569 ----
  ec709b6f5fc1a240f7309e7b5ccf2af2  gcc/testsuite/gcc.target/i386/pr96938.c
  e860da5c4163b56a77c4cb6a6238f5ea  gcc/testsuite/gcc.target/i386/pr97032.c
  54796d80a148a93895941284c072af19  gcc/testsuite/gcc.target/i386/pr97140.c
! 0b221a37192b920a027e86b90fd7d409  gcc/testsuite/gcc.target/i386/pr97249-1.c
  74aff39747c5e4248dbc36eceea5ace6  gcc/testsuite/gcc.target/i386/pr97282.c
  5e1f5e8518b908dda4d66e083ec90ed3  gcc/testsuite/gcc.target/i386/pr97313.c
  14c9de1158d2b6c5aa725f4ce14715d6  gcc/testsuite/gcc.target/i386/pr97387-1.c
  d8be69267a82470717a5b153648b522f  gcc/testsuite/gcc.target/i386/pr97387-2.c
  d1bbffbd6f7347b6b51d890b46131e04  gcc/testsuite/gcc.target/i386/pr97506.c
  a6f6652b9018de3bb9e4cc843f0166a1  gcc/testsuite/gcc.target/i386/pr97510.c
! ec544f4391143504fa111cda40292347  gcc/testsuite/gcc.target/i386/pr97521.c
  852e9c3686a4f639e7a7b478e70760ee  gcc/testsuite/gcc.target/i386/pr97540.c
  c0a367db40ed035125a08383892eefc3  gcc/testsuite/gcc.target/i386/pr97642-1.c
  7a57c062ea1e3fbcc3c093fcf6e4b984  gcc/testsuite/gcc.target/i386/pr97642-2.c
*************** a78551d1c651f72de249ac89d40a6bb4  gcc/te
*** 64072,64080 ****
  c3a73fa75e58f547374ee4cb24ac482d  gcc/testsuite/gcc.target/i386/pr97873-3.c
  40bb69c69b8b4e18f072695ea5cee94b  gcc/testsuite/gcc.target/i386/pr97873.c
  d50d43b015ccca4bdcef40a3a09478ce  gcc/testsuite/gcc.target/i386/pr97887.c
! 62c847e07f5efdfb652b5e431cca508e  gcc/testsuite/gcc.target/i386/pr97950.c
  f8ecf4adafb31200f6cb5f02f878203e  gcc/testsuite/gcc.target/i386/pr97971.c
  e3d35c4b9c35829e096fbb3d11b860df  gcc/testsuite/gcc.target/i386/pr97978.c
  6afe67531438d8115c46cbbd340d8f73  gcc/testsuite/gcc.target/i386/pr98063.c
  b7ddfcf2edaca40780663862d490b44f  gcc/testsuite/gcc.target/i386/pr98079.c
  3e550210eceaa9555180fcdc5434cf50  gcc/testsuite/gcc.target/i386/pr98086.c
--- 67575,67584 ----
  c3a73fa75e58f547374ee4cb24ac482d  gcc/testsuite/gcc.target/i386/pr97873-3.c
  40bb69c69b8b4e18f072695ea5cee94b  gcc/testsuite/gcc.target/i386/pr97873.c
  d50d43b015ccca4bdcef40a3a09478ce  gcc/testsuite/gcc.target/i386/pr97887.c
! da7936c976f9e834f5cbd253109ebc0e  gcc/testsuite/gcc.target/i386/pr97950.c
  f8ecf4adafb31200f6cb5f02f878203e  gcc/testsuite/gcc.target/i386/pr97971.c
  e3d35c4b9c35829e096fbb3d11b860df  gcc/testsuite/gcc.target/i386/pr97978.c
+ 670c12a0948ada55645036481c5bd816  gcc/testsuite/gcc.target/i386/pr98060.c
  6afe67531438d8115c46cbbd340d8f73  gcc/testsuite/gcc.target/i386/pr98063.c
  b7ddfcf2edaca40780663862d490b44f  gcc/testsuite/gcc.target/i386/pr98079.c
  3e550210eceaa9555180fcdc5434cf50  gcc/testsuite/gcc.target/i386/pr98086.c
*************** f05a11a90b720489273566f54bf45421  gcc/te
*** 64082,64092 ****
--- 67586,67610 ----
  70971c1416774bc2945ea932f03a5c73  gcc/testsuite/gcc.target/i386/pr98161.c
  91547df733560031fecb190e05b697bb  gcc/testsuite/gcc.target/i386/pr98169.c
  489d73ba45e60b5e7c2ae506c5f44042  gcc/testsuite/gcc.target/i386/pr98212.c
+ e1cacce592c991893bbfb6d3b8ede106  gcc/testsuite/gcc.target/i386/pr98218-1.c
+ 04778ec8ed663291417f4de01b1d41fa  gcc/testsuite/gcc.target/i386/pr98218-1a.c
+ d5d4dd432f372c9391a32de38cfe2808  gcc/testsuite/gcc.target/i386/pr98218-2.c
+ 6f1b2463880c0601baf7bc60f199ce17  gcc/testsuite/gcc.target/i386/pr98218-2a.c
+ 62026f660530c4aa6d07cc910759214e  gcc/testsuite/gcc.target/i386/pr98218-3.c
+ 1542dc55fe763b6a8a8d28610c04e3a7  gcc/testsuite/gcc.target/i386/pr98218-3a.c
+ 10b6850510b2b9e76207a891afebc663  gcc/testsuite/gcc.target/i386/pr98218-4.c
  af4ae6a242ab3c94b8f1dda3b1653748  gcc/testsuite/gcc.target/i386/pr98264.c
  87d9893bdab3e25d3f7a51079c532904  gcc/testsuite/gcc.target/i386/pr98274.c
  e8e9a07a00044157056897157e421357  gcc/testsuite/gcc.target/i386/pr98289.c
+ 24454a3ba44bfc2c0fa9112a63410f13  gcc/testsuite/gcc.target/i386/pr98309-1.c
+ a977980034168dfb1e33abbeffc596ca  gcc/testsuite/gcc.target/i386/pr98309-2.c
  33aa45999f74141793d01c1f82a7613a  gcc/testsuite/gcc.target/i386/pr98334.c
+ e3f86350bfa7f007cdf97239e3c6132d  gcc/testsuite/gcc.target/i386/pr98335.c
+ e73203bdab86f1437f72992c8108e5f2  gcc/testsuite/gcc.target/i386/pr98365.c
+ 80b302c13aafc8b987101ce62766c17f  gcc/testsuite/gcc.target/i386/pr98434-1.c
+ 218c0ce39bcca31eb5d5bf91fc82c2fc  gcc/testsuite/gcc.target/i386/pr98434-2.c
  88f43a2d69db7f2777c6c19a5b6f2594  gcc/testsuite/gcc.target/i386/pr98439.c
+ 3f276b7bd6149fbec0dd83a41acb41cd  gcc/testsuite/gcc.target/i386/pr98468.c
  9b88de17937851cbfbce595d92cc2020  gcc/testsuite/gcc.target/i386/pr98482-1.c
  2430d914288f17ecc7fd2bc12b5de212  gcc/testsuite/gcc.target/i386/pr98482-2.c
  5b69e4f37f3a4dc1c806fab46f753f91  gcc/testsuite/gcc.target/i386/pr98495-1.c
*************** bfd05178bd335d42c157b9999dd6bf94  gcc/te
*** 64104,64116 ****
--- 67622,67643 ----
  a3df42ac3d3783eb4c34bdcc03aff861  gcc/testsuite/gcc.target/i386/pr98667-3.c
  ac0f6bf2b6bb33371b49c11840423d57  gcc/testsuite/gcc.target/i386/pr98670.c
  83f00d9b70c99bee3a1b1df878dac4cd  gcc/testsuite/gcc.target/i386/pr98694.c
+ 3b6b56a7546b7322e4383cbd4cbd6f8c  gcc/testsuite/gcc.target/i386/pr98737-1.c
+ 4eaf8891409314a5e4171228fb9fae44  gcc/testsuite/gcc.target/i386/pr98737-2.c
+ 6149899421fb0893f844893bf4688edd  gcc/testsuite/gcc.target/i386/pr98737-3.c
+ 3a293776bfa69b40acaf4df4a69b9ddb  gcc/testsuite/gcc.target/i386/pr98737-4.c
+ bd02ca4144772eaf8136dbd10c3fd09c  gcc/testsuite/gcc.target/i386/pr98737-5.c
+ a7f00e32a1ff209c9cadf082f30822ca  gcc/testsuite/gcc.target/i386/pr98737-6.c
+ 14c022ec4f3089265b3ee5764e4b4b2b  gcc/testsuite/gcc.target/i386/pr98737-7.c
  e674bc0a3568e20f2cff8d319251d559  gcc/testsuite/gcc.target/i386/pr98833.c
+ 13f2ed187bf7a12c46fe6f9bead4c78b  gcc/testsuite/gcc.target/i386/pr98911.c
  a2799012296658b7581bee7cb15827db  gcc/testsuite/gcc.target/i386/pr98928.c
  3b707ff0fa9510c15e327859af5c46b6  gcc/testsuite/gcc.target/i386/pr99025.c
  5f587a7e1e74db15e6a2b6cd2f76b455  gcc/testsuite/gcc.target/i386/pr99100.c
  729db151a4384cf4e127b5d9a69da057  gcc/testsuite/gcc.target/i386/pr99123-2.c
  49a5c59adcc80f5baad6214266e1e0eb  gcc/testsuite/gcc.target/i386/pr99123.c
  0b19a340038d11d42d65c8bb289ec153  gcc/testsuite/gcc.target/i386/pr99321.c
+ a9d8b452ef25921e567309d0cc5e4daf  gcc/testsuite/gcc.target/i386/pr99405.c
  c58d1c95f1a45ece2f51ade32dc55823  gcc/testsuite/gcc.target/i386/pr99454.c
  f961c1d8f947043bf2b762f5fc35531a  gcc/testsuite/gcc.target/i386/pr99463-2.c
  0d4aa0e3c5217bd61c80adc456e50b25  gcc/testsuite/gcc.target/i386/pr99463.c
*************** e819fc760d8e721b1c4caa3edc9e7e49  gcc/te
*** 64121,64126 ****
--- 67648,67655 ----
  ac8b252af4fba05cccbbb422257f61d5  gcc/testsuite/gcc.target/i386/pr99530-4.c
  86388f8d6ad435e00cc67e6f48c81d78  gcc/testsuite/gcc.target/i386/pr99530-5.c
  9f5d7919054aa393f75903c1f4cb342a  gcc/testsuite/gcc.target/i386/pr99530-6.c
+ fec76088d24d8a97da60b73469c5ccd9  gcc/testsuite/gcc.target/i386/pr99531.c
+ 5486d1afdbf1b54f2a6bb18f55e8463d  gcc/testsuite/gcc.target/i386/pr99591.c
  50d8d196bff1de9d48e4220d453251f2  gcc/testsuite/gcc.target/i386/pr99600.c
  5c90090d1d1e1b7415543965fbde2289  gcc/testsuite/gcc.target/i386/pr99726.c
  5e4366668d71168c760c357dda3525bb  gcc/testsuite/gcc.target/i386/pr99744-1.c
*************** c39efc4096726785a0d8fb50d2037679  gcc/te
*** 64131,64140 ****
  2b686392753086234e196d009c01de7b  gcc/testsuite/gcc.target/i386/pr99744-6.c
  1184f2fb7f7bb564229b203997b52859  gcc/testsuite/gcc.target/i386/pr99744-7.c
  4d9c7be1b278961172c90ef75258d56c  gcc/testsuite/gcc.target/i386/pr99744-8.c
! 006bf45011c8adaaea151e1e9bd71662  gcc/testsuite/gcc.target/i386/pr99753.c
  a3e5a8589b650ac289a1ebcf789619f6  gcc/testsuite/gcc.target/i386/pr99754-1.c
  4b02ca6501588dc1490c310e786ee13e  gcc/testsuite/gcc.target/i386/pr99754-2.c
  5f031f82b484c0f439288d4926362365  gcc/testsuite/gcc.target/i386/pr99863.c
  939447bef72a36fa24dc61bac7010b1b  gcc/testsuite/gcc.target/i386/pr99905.c
  bb74fe2f09b19928e6c4047fee136b0b  gcc/testsuite/gcc.target/i386/prefer-vector-width-attr.c
  24ceb6d5f3f5cde4b9d852839bdb98ae  gcc/testsuite/gcc.target/i386/prefetchw-1.c
--- 67660,67670 ----
  2b686392753086234e196d009c01de7b  gcc/testsuite/gcc.target/i386/pr99744-6.c
  1184f2fb7f7bb564229b203997b52859  gcc/testsuite/gcc.target/i386/pr99744-7.c
  4d9c7be1b278961172c90ef75258d56c  gcc/testsuite/gcc.target/i386/pr99744-8.c
! a71198813fff29be79900d9ec3e782da  gcc/testsuite/gcc.target/i386/pr99753.c
  a3e5a8589b650ac289a1ebcf789619f6  gcc/testsuite/gcc.target/i386/pr99754-1.c
  4b02ca6501588dc1490c310e786ee13e  gcc/testsuite/gcc.target/i386/pr99754-2.c
  5f031f82b484c0f439288d4926362365  gcc/testsuite/gcc.target/i386/pr99863.c
+ e2033457a6fda578099d3b1c2092a4fa  gcc/testsuite/gcc.target/i386/pr99881.c
  939447bef72a36fa24dc61bac7010b1b  gcc/testsuite/gcc.target/i386/pr99905.c
  bb74fe2f09b19928e6c4047fee136b0b  gcc/testsuite/gcc.target/i386/prefer-vector-width-attr.c
  24ceb6d5f3f5cde4b9d852839bdb98ae  gcc/testsuite/gcc.target/i386/prefetchw-1.c
*************** f2e570dc674eafa85f840615dd2948fb  gcc/te
*** 64231,64237 ****
  8f111b41fd31fe6cff00368285dfe3ae  gcc/testsuite/gcc.target/i386/sha256rnds2-1.c
  2c2126d5e0ee71d49c43210cdc139c79  gcc/testsuite/gcc.target/i386/sha256rnds2-2.c
  11a4bd4138e7963e0cd81b6e0197cfe6  gcc/testsuite/gcc.target/i386/shift_mask.c
! dc3c5b9dd6446e0388fae0f049ea96ce  gcc/testsuite/gcc.target/i386/shrink_wrap_1.c
  db687b7347e27fd960300505daa014ee  gcc/testsuite/gcc.target/i386/shuf-concat.c
  2a6e1d7c1d6cc43b2c0c5bc706ded8a7  gcc/testsuite/gcc.target/i386/sibcall-1.c
  19523776640101268df1d976cbbc2f7e  gcc/testsuite/gcc.target/i386/sibcall-2.c
--- 67761,67767 ----
  8f111b41fd31fe6cff00368285dfe3ae  gcc/testsuite/gcc.target/i386/sha256rnds2-1.c
  2c2126d5e0ee71d49c43210cdc139c79  gcc/testsuite/gcc.target/i386/sha256rnds2-2.c
  11a4bd4138e7963e0cd81b6e0197cfe6  gcc/testsuite/gcc.target/i386/shift_mask.c
! b575f46102e75c61317492fad36873d8  gcc/testsuite/gcc.target/i386/shrink_wrap_1.c
  db687b7347e27fd960300505daa014ee  gcc/testsuite/gcc.target/i386/shuf-concat.c
  2a6e1d7c1d6cc43b2c0c5bc706ded8a7  gcc/testsuite/gcc.target/i386/sibcall-1.c
  19523776640101268df1d976cbbc2f7e  gcc/testsuite/gcc.target/i386/sibcall-2.c
*************** c243f1e5e2ec3b5d5c6b3cce7b8a72e4  gcc/te
*** 64244,64253 ****
  3001d63a83bb1d685960823efc333364  gcc/testsuite/gcc.target/i386/signbit-1.c
  2f0289ffcedbdb4af3f936dc5e9bdeb4  gcc/testsuite/gcc.target/i386/signbit-2.c
  b5540c2e6c4aa6f5730ae17876c12e1f  gcc/testsuite/gcc.target/i386/signbit-3.c
! 1ed2fd87384167b3084abd2351dae26d  gcc/testsuite/gcc.target/i386/spellcheck-options-1.c
! 749a597a39e11ff74cc5469fa580f32f  gcc/testsuite/gcc.target/i386/spellcheck-options-2.c
  76fe9bc79bc28950109f6611fb70870f  gcc/testsuite/gcc.target/i386/spellcheck-options-3.c
! 7bee17ed5d5f2906f658fcceaed200dd  gcc/testsuite/gcc.target/i386/spellcheck-options-4.c
  88e1317c51ed7bb5ed3c1716fc086edb  gcc/testsuite/gcc.target/i386/spellcheck-options-5.c
  5bfaae8e6f8201c0caf8e537601fae24  gcc/testsuite/gcc.target/i386/spill_to_mask-1.c
  bc6b7244a28a5688b5a5c75593461393  gcc/testsuite/gcc.target/i386/spill_to_mask-2.c
--- 67774,67784 ----
  3001d63a83bb1d685960823efc333364  gcc/testsuite/gcc.target/i386/signbit-1.c
  2f0289ffcedbdb4af3f936dc5e9bdeb4  gcc/testsuite/gcc.target/i386/signbit-2.c
  b5540c2e6c4aa6f5730ae17876c12e1f  gcc/testsuite/gcc.target/i386/signbit-3.c
! 577e5b7c826e6a9e098a6607865c5e41  gcc/testsuite/gcc.target/i386/smuldi3_highpart.c
! ced55c097c7540a16ac1207e0104aafd  gcc/testsuite/gcc.target/i386/spellcheck-options-1.c
! 2e1cd127d43849d529e1e8543aaaba2b  gcc/testsuite/gcc.target/i386/spellcheck-options-2.c
  76fe9bc79bc28950109f6611fb70870f  gcc/testsuite/gcc.target/i386/spellcheck-options-3.c
! 262a2bdbd21e9f24d1d5ec309b4ea792  gcc/testsuite/gcc.target/i386/spellcheck-options-4.c
  88e1317c51ed7bb5ed3c1716fc086edb  gcc/testsuite/gcc.target/i386/spellcheck-options-5.c
  5bfaae8e6f8201c0caf8e537601fae24  gcc/testsuite/gcc.target/i386/spill_to_mask-1.c
  bc6b7244a28a5688b5a5c75593461393  gcc/testsuite/gcc.target/i386/spill_to_mask-2.c
*************** cc8a162617784a2e883a5e726d28ebde  gcc/te
*** 64257,64264 ****
  31f7ce4356be3b5523e49df7d4ad0951  gcc/testsuite/gcc.target/i386/sse-10.c
  49bde97b271274cb2bc26697ce2b19be  gcc/testsuite/gcc.target/i386/sse-11.c
  1bb2f373c5a5eb9db6b65e377d0dac63  gcc/testsuite/gcc.target/i386/sse-12.c
! 5cb56c1bb70d3d793b9deec82cee096a  gcc/testsuite/gcc.target/i386/sse-13.c
! ffb6ed9866dd66aafe68051249fa57a5  gcc/testsuite/gcc.target/i386/sse-14.c
  92ad37b5ad7426d489b1b6f1ba0f41ea  gcc/testsuite/gcc.target/i386/sse-15.c
  2e7b115c4bd7984925f1a8d17a5faf67  gcc/testsuite/gcc.target/i386/sse-16.c
  f660e67b22cb44e6a6b38a247b1d78c3  gcc/testsuite/gcc.target/i386/sse-17.c
--- 67788,67795 ----
  31f7ce4356be3b5523e49df7d4ad0951  gcc/testsuite/gcc.target/i386/sse-10.c
  49bde97b271274cb2bc26697ce2b19be  gcc/testsuite/gcc.target/i386/sse-11.c
  1bb2f373c5a5eb9db6b65e377d0dac63  gcc/testsuite/gcc.target/i386/sse-12.c
! 8db7dedcd3e98eefaeb4be82f3471d6c  gcc/testsuite/gcc.target/i386/sse-13.c
! f5d7ffd0af514d091d844db8a40b5764  gcc/testsuite/gcc.target/i386/sse-14.c
  92ad37b5ad7426d489b1b6f1ba0f41ea  gcc/testsuite/gcc.target/i386/sse-15.c
  2e7b115c4bd7984925f1a8d17a5faf67  gcc/testsuite/gcc.target/i386/sse-16.c
  f660e67b22cb44e6a6b38a247b1d78c3  gcc/testsuite/gcc.target/i386/sse-17.c
*************** f660e67b22cb44e6a6b38a247b1d78c3  gcc/te
*** 64267,64275 ****
  bb148b6e9dd40de90aed723794e38216  gcc/testsuite/gcc.target/i386/sse-2.c
  c23a0ea446a060d55e49e48429513f7d  gcc/testsuite/gcc.target/i386/sse-20.c
  d5e7e4c7d488a953399d853e48aa484e  gcc/testsuite/gcc.target/i386/sse-21.c
! ff7a722e7d2524d4fe9c93a01bc083a1  gcc/testsuite/gcc.target/i386/sse-22.c
  1c2df57cb3d7d6a3daf4084135ba9b1b  gcc/testsuite/gcc.target/i386/sse-22a.c
! 1316ad2ddc46302e67d5aa50468fcd07  gcc/testsuite/gcc.target/i386/sse-23.c
  3fe1d48ff9d52631da56f04cc922a9cb  gcc/testsuite/gcc.target/i386/sse-24.c
  f839ec28fa786a06dabe541954c1b1ae  gcc/testsuite/gcc.target/i386/sse-25.c
  74d7245c448c34b5d69a304bcd162956  gcc/testsuite/gcc.target/i386/sse-26.c
--- 67798,67806 ----
  bb148b6e9dd40de90aed723794e38216  gcc/testsuite/gcc.target/i386/sse-2.c
  c23a0ea446a060d55e49e48429513f7d  gcc/testsuite/gcc.target/i386/sse-20.c
  d5e7e4c7d488a953399d853e48aa484e  gcc/testsuite/gcc.target/i386/sse-21.c
! 56e7249d1496bcb9d2310773569c2635  gcc/testsuite/gcc.target/i386/sse-22.c
  1c2df57cb3d7d6a3daf4084135ba9b1b  gcc/testsuite/gcc.target/i386/sse-22a.c
! e0a379d5c5f2bf69e6d7a535f6c875d1  gcc/testsuite/gcc.target/i386/sse-23.c
  3fe1d48ff9d52631da56f04cc922a9cb  gcc/testsuite/gcc.target/i386/sse-24.c
  f839ec28fa786a06dabe541954c1b1ae  gcc/testsuite/gcc.target/i386/sse-25.c
  74d7245c448c34b5d69a304bcd162956  gcc/testsuite/gcc.target/i386/sse-26.c
*************** ed911466c07c0736e02e66d90b095100  gcc/te
*** 64293,64298 ****
--- 67824,67830 ----
  d9fb3b3486eefe8b11ff61c445a11e02  gcc/testsuite/gcc.target/i386/sse-comiss-5.c
  3ca8e7c267b407960cc458e7275698b7  gcc/testsuite/gcc.target/i386/sse-comiss-6.c
  adfe74cb36ffba9acf9b22f79f8187a1  gcc/testsuite/gcc.target/i386/sse-copysignf-vec.c
+ 6f95113603c56abe57a1d7b4816deb8e  gcc/testsuite/gcc.target/i386/sse-covert-1.c
  899fec05563e846a830eeed834029d2f  gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-1.c
  ca577820ada891fd74e30f99d80ccaad  gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-2.c
  a17640d6e8c3fb4015b3e46eedfec394  gcc/testsuite/gcc.target/i386/sse-cvtss2si-1.c
*************** a17640d6e8c3fb4015b3e46eedfec394  gcc/te
*** 64301,64309 ****
--- 67833,67843 ----
  4fb3a5313226fd444c42faa81d4bc109  gcc/testsuite/gcc.target/i386/sse-cvttss2si-2.c
  3505e52bbc59fc59f60921d6cd5bee99  gcc/testsuite/gcc.target/i386/sse-divps-1.c
  0c0f489b28655dbafacbf31bb309f555  gcc/testsuite/gcc.target/i386/sse-divss-1.c
+ dc1af79bcd7ae2cec043c419d41673ca  gcc/testsuite/gcc.target/i386/sse-fp-covert-1.c
  631a6c000197451ea43058b342a6f855  gcc/testsuite/gcc.target/i386/sse-globalreg.c
  e41b0032514bd98819d07cc4bbcd2e12  gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c
  bb408838f48f3bff5e57b21b3ec99129  gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c
+ be63d01c33082ac86b6798bbcdf39f53  gcc/testsuite/gcc.target/i386/sse-int-covert-1.c
  e705960bdfcc3fab219a9646e69f574e  gcc/testsuite/gcc.target/i386/sse-maxps-1.c
  3586f28051dca7de135795e687bde3d2  gcc/testsuite/gcc.target/i386/sse-maxss-1.c
  fc357b7da15d21bced5dda082a5316e4  gcc/testsuite/gcc.target/i386/sse-minps-1.c
*************** bcf0d6d51d39f674c2672181211f8783  gcc/te
*** 64325,64330 ****
--- 67859,67865 ----
  51890d9a987841a9d50bcb4978419235  gcc/testsuite/gcc.target/i386/sse-mulss-1.c
  011989a32280bb1aa821f00e7f492898  gcc/testsuite/gcc.target/i386/sse-orps-1.c
  9ac73bc009f43ea60db7fc10dec3ab01  gcc/testsuite/gcc.target/i386/sse-os-support.h
+ dc6831587ee7762436a7ac070e187a5d  gcc/testsuite/gcc.target/i386/sse-pr101007.c
  642da3797fdc5a430e7dffdf36d5a54d  gcc/testsuite/gcc.target/i386/sse-rcpps-1.c
  717722e6af4d66ee3202cb215f622945  gcc/testsuite/gcc.target/i386/sse-recip-vec.c
  3f9ef1b15bd7ed1556ef4a6fc75b7a66  gcc/testsuite/gcc.target/i386/sse-recip.c
*************** b9ce5798c339f3d6a78c41c0059bb5e2  gcc/te
*** 64379,64384 ****
--- 67914,67922 ----
  fc535f253868df6d104fe59110255bbe  gcc/testsuite/gcc.target/i386/sse2-divpd-1.c
  c61ecb520f8d8d7266675b405d7b2aa7  gcc/testsuite/gcc.target/i386/sse2-divsd-1.c
  a4889872f8bd70b679c9e9fc5ee3617f  gcc/testsuite/gcc.target/i386/sse2-extract-1.c
+ c6b2603aad0a6b24415ac190a2809108  gcc/testsuite/gcc.target/i386/sse2-float16-1.c
+ f8306e38605e0cbae5c9cbfe5ac4c94c  gcc/testsuite/gcc.target/i386/sse2-float16-2.c
+ 230115582d6aa23705616d8b7bfcdaca  gcc/testsuite/gcc.target/i386/sse2-float16-3.c
  bce0423c5fcea8a8b29f29c4fb6680c2  gcc/testsuite/gcc.target/i386/sse2-init-v16qi-1.c
  8e1f68af9dae754623af8653e461ece1  gcc/testsuite/gcc.target/i386/sse2-init-v2di-1.c
  a483238e8a216ddeb00c43d4921dd054  gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c
*************** b9e6b582fd5bc8c137d2bb46eae6f3bb  gcc/te
*** 64424,64431 ****
--- 67962,67971 ----
  43ab076c8ff0f80e0a7fd6f6e166a4f2  gcc/testsuite/gcc.target/i386/sse2-mmx-paddb.c
  4f250349d74db796de11009fd08a318b  gcc/testsuite/gcc.target/i386/sse2-mmx-paddd.c
  ec56f145922e2b6d310a4b1bef60ed62  gcc/testsuite/gcc.target/i386/sse2-mmx-paddq.c
+ fc99c4073bb360b2e5bcf31b3e9a1e59  gcc/testsuite/gcc.target/i386/sse2-mmx-paddsb-2.c
  37be90c9d4483ebaa4fbdeffd53ae5ed  gcc/testsuite/gcc.target/i386/sse2-mmx-paddsb.c
  43add6b54f46f33bc684aebe7200e81d  gcc/testsuite/gcc.target/i386/sse2-mmx-paddsw.c
+ 2d49f441b9984e854a9e5eda46929d56  gcc/testsuite/gcc.target/i386/sse2-mmx-paddusb-2.c
  72015e16022b45c65e814496aef319ae  gcc/testsuite/gcc.target/i386/sse2-mmx-paddusb.c
  2d561d8e5e0c1a87897f59beeaac0c11  gcc/testsuite/gcc.target/i386/sse2-mmx-paddusw.c
  6414d266da0e00c58837a9ea18282e73  gcc/testsuite/gcc.target/i386/sse2-mmx-paddw.c
*************** dec7b4a4213306d2ac5c54e5ee1b1bc4  gcc/te
*** 64473,64478 ****
--- 68013,68020 ----
  e11693320430a61aa29fab6ca0176980  gcc/testsuite/gcc.target/i386/sse2-mmx-psubb.c
  95b6522186b81821a0d73047ea29cab0  gcc/testsuite/gcc.target/i386/sse2-mmx-psubd.c
  9a0a89088db07e6293781ebc6af349fc  gcc/testsuite/gcc.target/i386/sse2-mmx-psubq.c
+ a2d86ebdc5f6657b2141962e9c0d3f7d  gcc/testsuite/gcc.target/i386/sse2-mmx-psubsb-2.c
+ cfe728f154b7513580a0de3dca595186  gcc/testsuite/gcc.target/i386/sse2-mmx-psubusb-2.c
  4203bb7e12f3f930300aa7ac9aaff04b  gcc/testsuite/gcc.target/i386/sse2-mmx-psubusb.c
  2dfcbc24b186bbc70818382a3ea4f04e  gcc/testsuite/gcc.target/i386/sse2-mmx-psubusw.c
  6fb7dbf677d66106b402acf40a57679b  gcc/testsuite/gcc.target/i386/sse2-mmx-psubw.c
*************** b4038cdeb4eee7cf1074de1cead1d1b5  gcc/te
*** 64544,64549 ****
--- 68086,68092 ----
  d1e0ff73b10eb61ca8fa06128a453ef9  gcc/testsuite/gcc.target/i386/sse2-pmullw-1.c
  308fe64b1fe9bf78b6b4ed03b89a6c2f  gcc/testsuite/gcc.target/i386/sse2-pmuludq-1.c
  5a4b1b55ad120b0697aa2b141f831dcc  gcc/testsuite/gcc.target/i386/sse2-por-1.c
+ 749703f860d7a5cb18e2328329fb1c71  gcc/testsuite/gcc.target/i386/sse2-pr39821.c
  bdbcd892d3f88fe1d7a07a2122cb928d  gcc/testsuite/gcc.target/i386/sse2-pr57233.c
  ab93046758268c8e3106f1bed7d4e8a5  gcc/testsuite/gcc.target/i386/sse2-pr63594-1.c
  ae0d76797c5135e83ce818bce0003cfa  gcc/testsuite/gcc.target/i386/sse2-pr63594-2.c
*************** f6722ff543fe2d22c61bee55cae7b3b0  gcc/te
*** 64556,64561 ****
--- 68099,68106 ----
  40328c91b45d36f00842ea53383bdf39  gcc/testsuite/gcc.target/i386/sse2-pr91201-5.c
  50d756e8bb57ee5fcdcd4f2d78676a29  gcc/testsuite/gcc.target/i386/sse2-pr91201-6.c
  f4257a5e208e16a0a30cb7b050fdce96  gcc/testsuite/gcc.target/i386/sse2-pr91201.c
+ 37a0408ca14b3ed1d78bd5e1cff5b549  gcc/testsuite/gcc.target/i386/sse2-pr94680-2.c
+ 34c1f3d1465bbbb4df9450cb1c8dd20b  gcc/testsuite/gcc.target/i386/sse2-pr94680.c
  a61c548dc02cbe1848cd1f3c304b2310  gcc/testsuite/gcc.target/i386/sse2-pr98461-2.c
  1837447d436a786a3fc885a11bc08718  gcc/testsuite/gcc.target/i386/sse2-pr98461.c
  306e316bf36fd1022168fa5560198f41  gcc/testsuite/gcc.target/i386/sse2-psadbw-1.c
*************** f6c973b6f8c0838b106b2401d6071d02  gcc/te
*** 64571,64576 ****
--- 68116,68122 ----
  d73f31d8e47f50f11339411115430bdf  gcc/testsuite/gcc.target/i386/sse2-psllw-2.c
  2b188e95090c12512620f1a04451b564  gcc/testsuite/gcc.target/i386/sse2-psrad-1.c
  0a0730290bd38b2c389aa3744dae77bc  gcc/testsuite/gcc.target/i386/sse2-psrad-2.c
+ c30bec5c1d11c73d6b700268502c2f80  gcc/testsuite/gcc.target/i386/sse2-psraq-1.c
  5caad595517ae384ce66d97312b54483  gcc/testsuite/gcc.target/i386/sse2-psraw-1.c
  d5fc16fd182f4d66aba527f552508a3c  gcc/testsuite/gcc.target/i386/sse2-psraw-2.c
  bde3696085b13de5ccb15a084b3845ec  gcc/testsuite/gcc.target/i386/sse2-psrld-1.c
*************** cf5ce63ad160152c8cf0c9c3d01c5b79  gcc/te
*** 64606,64612 ****
  d83d0f8b342ff8ef187b5267acdf1b9a  gcc/testsuite/gcc.target/i386/sse2-set-v8hi-1a.c
  001bec980378e25765c927def02c9eae  gcc/testsuite/gcc.target/i386/sse2-set-v8hi-2.c
  c86c2814d0ff9e3e7807177c93e54cdf  gcc/testsuite/gcc.target/i386/sse2-set-v8hi-2a.c
! c74df210cb00a44183f0550ec46473b6  gcc/testsuite/gcc.target/i386/sse2-shiftqihi-constant-1.c
  1de74963e620964fc49c729ef9de0a73  gcc/testsuite/gcc.target/i386/sse2-shiftqihi-constant-2.c
  747d389fb10946466ce7106bf9861c05  gcc/testsuite/gcc.target/i386/sse2-shufpd-1.c
  229da27deb07940e47896f28568a9ad6  gcc/testsuite/gcc.target/i386/sse2-shufps-1.c
--- 68152,68158 ----
  d83d0f8b342ff8ef187b5267acdf1b9a  gcc/testsuite/gcc.target/i386/sse2-set-v8hi-1a.c
  001bec980378e25765c927def02c9eae  gcc/testsuite/gcc.target/i386/sse2-set-v8hi-2.c
  c86c2814d0ff9e3e7807177c93e54cdf  gcc/testsuite/gcc.target/i386/sse2-set-v8hi-2a.c
! e906f5a58f29936534956c33249771a4  gcc/testsuite/gcc.target/i386/sse2-shiftqihi-constant-1.c
  1de74963e620964fc49c729ef9de0a73  gcc/testsuite/gcc.target/i386/sse2-shiftqihi-constant-2.c
  747d389fb10946466ce7106bf9861c05  gcc/testsuite/gcc.target/i386/sse2-shufpd-1.c
  229da27deb07940e47896f28568a9ad6  gcc/testsuite/gcc.target/i386/sse2-shufps-1.c
*************** bab76acbc7e8c59491b8644934eb6ecb  gcc/te
*** 64623,64628 ****
--- 68169,68186 ----
  1b06ca6a8e7b298579d4f8b082218114  gcc/testsuite/gcc.target/i386/sse2-unpack-1.c
  43e8ca0937f6b7cbab38830389bf3387  gcc/testsuite/gcc.target/i386/sse2-unpckhpd-1.c
  85905c2a21413d27a8372674c172763a  gcc/testsuite/gcc.target/i386/sse2-unpcklpd-1.c
+ 4fd67d27d0351deb5fe4649755e14553  gcc/testsuite/gcc.target/i386/sse2-v1ti-andnot.c
+ 04c7f1d587293a9a31152e40da4c0e82  gcc/testsuite/gcc.target/i386/sse2-v1ti-ashiftrt-1.c
+ 6cb5dc8ee93873f6daf9348cfc7e5905  gcc/testsuite/gcc.target/i386/sse2-v1ti-ashiftrt-2.c
+ 2f5b5390fcecc53735672f68927f9cdb  gcc/testsuite/gcc.target/i386/sse2-v1ti-ashiftrt-3.c
+ 44b5efea3dad2df6243820aea41c77e6  gcc/testsuite/gcc.target/i386/sse2-v1ti-logic-2.c
+ 7c08c8089d2cd264085f8f1f27aaaa4c  gcc/testsuite/gcc.target/i386/sse2-v1ti-logic.c
+ 9903085d39d7b4b8be1b9dc73e11aab9  gcc/testsuite/gcc.target/i386/sse2-v1ti-mov-1.c
+ 438a96821f374f7584ee4fcdf0179706  gcc/testsuite/gcc.target/i386/sse2-v1ti-rotate.c
+ cf99e4d1cf8d2c89fd3dbdda184cc0ea  gcc/testsuite/gcc.target/i386/sse2-v1ti-shift-2.c
+ 4eba81e6b3506e6c73a8b1b2aeac0f41  gcc/testsuite/gcc.target/i386/sse2-v1ti-shift-3.c
+ 9a8d5b480c8112c2e4351b9e0c1fcf18  gcc/testsuite/gcc.target/i386/sse2-v1ti-shift.c
+ f84fad3c04a7990bc664cb9368714469  gcc/testsuite/gcc.target/i386/sse2-v1ti-zext.c
  dc9066a5a4e2651d9a9a03c5eef62f20  gcc/testsuite/gcc.target/i386/sse2-vec-1.c
  5ef6907bdb04ea9524e19fcbc3e33d50  gcc/testsuite/gcc.target/i386/sse2-vec-2.c
  41324342729b5725800e447599f3fc38  gcc/testsuite/gcc.target/i386/sse2-vec-2a.c
*************** b0b2094f1f81694e655c06af411b909e  gcc/te
*** 64650,64658 ****
--- 68208,68218 ----
  e74162d2e3d68b7ced7d0745c7adc4f2  gcc/testsuite/gcc.target/i386/sse3-movddup.c
  d82d917b914b989a4f437aca582f09a3  gcc/testsuite/gcc.target/i386/sse3-movshdup.c
  61cb0bb6708a19006f1679b146c2f6e1  gcc/testsuite/gcc.target/i386/sse3-movsldup.c
+ 9624ab9319b8bca095f72845310aa4eb  gcc/testsuite/gcc.target/i386/sse4-pr39821.c
  e18bbd1a575dbb964c9953896983e6c4  gcc/testsuite/gcc.target/i386/sse4_1-blendpd.c
  a736f67981b7b1bab60f7f837650f79f  gcc/testsuite/gcc.target/i386/sse4_1-blendps-2.c
  e0246b5d22c9c146ad2d9426ae92228a  gcc/testsuite/gcc.target/i386/sse4_1-blendps.c
+ b71d552e21496e8960dcb29af4b8aa73  gcc/testsuite/gcc.target/i386/sse4_1-blendvpd-1.c
  c8f77182ca7b638d5f7f35990da2e267  gcc/testsuite/gcc.target/i386/sse4_1-blendvpd.c
  fe57d22375ffb7148d4dc74eb9c59bb2  gcc/testsuite/gcc.target/i386/sse4_1-blendvps.c
  713bc87666161d0117835b0277afbb34  gcc/testsuite/gcc.target/i386/sse4_1-builtin-fp-int-inexact.c
*************** a779fdc3b7fb036bce855eb905fb882f  gcc/te
*** 64728,64733 ****
--- 68288,68294 ----
  bb5484db46d5db1bc08e3be71a124faf  gcc/testsuite/gcc.target/i386/sse4_1-pr88547-2.c
  5f3a09d47913ad0aa2ca0bde478960c3  gcc/testsuite/gcc.target/i386/sse4_1-pr91201.c
  97a6e83e4626279743abeab609c851a4  gcc/testsuite/gcc.target/i386/sse4_1-pr93078.c
+ 3bf7011d3907e777823d1c38f702aeeb  gcc/testsuite/gcc.target/i386/sse4_1-pr99908.c
  74446c253cb11a77fdd1592a740b22da  gcc/testsuite/gcc.target/i386/sse4_1-ptest-1.c
  caaaf541c6f7eb87214c11b5dc2b35f0  gcc/testsuite/gcc.target/i386/sse4_1-ptest-2.c
  839d2ec94fbd1d01290fff5be102952c  gcc/testsuite/gcc.target/i386/sse4_1-ptest-3.c
*************** e74f5b8f16d9e3c28227ea31186f816a  gcc/te
*** 64768,64774 ****
  a2f5b0c7365f7c93751ba3a6aa3eee83  gcc/testsuite/gcc.target/i386/sse4_1-set-v16qi-3a.c
  6ce5f7a9e3c9fffe77b1a62fe72e8122  gcc/testsuite/gcc.target/i386/sse4_1-trunc-vec.c
  73a07de2b59200c14c97da9c1f6888c8  gcc/testsuite/gcc.target/i386/sse4_1-truncf-vec.c
! 230f39e76bb95b9a1d8bb7d9bb28cd63  gcc/testsuite/gcc.target/i386/sse4_2-check.h
  78e9bfaad4304fbf531902e93985b629  gcc/testsuite/gcc.target/i386/sse4_2-crc32.h
  24e0c81587a981203de0c814fe1c7ed4  gcc/testsuite/gcc.target/i386/sse4_2-crc32b.c
  4fc3db053d0be974cfccf3060a965165  gcc/testsuite/gcc.target/i386/sse4_2-crc32l.c
--- 68329,68339 ----
  a2f5b0c7365f7c93751ba3a6aa3eee83  gcc/testsuite/gcc.target/i386/sse4_1-set-v16qi-3a.c
  6ce5f7a9e3c9fffe77b1a62fe72e8122  gcc/testsuite/gcc.target/i386/sse4_1-trunc-vec.c
  73a07de2b59200c14c97da9c1f6888c8  gcc/testsuite/gcc.target/i386/sse4_1-truncf-vec.c
! ebc8d116f761865e717970e537ac9fc2  gcc/testsuite/gcc.target/i386/sse4_1-vec-set-1.c
! 7b43124c88318d8cded95cd06b126a24  gcc/testsuite/gcc.target/i386/sse4_1-vec-set-1a.c
! d2d0cb2f2928b5df4aab47d5ad70c880  gcc/testsuite/gcc.target/i386/sse4_1-vec-set-2.c
! 39df097b1799efb745436c45330cf0ab  gcc/testsuite/gcc.target/i386/sse4_1-vec-set-2a.c
! 4206cdd8f732ba99684aa5a60039cff6  gcc/testsuite/gcc.target/i386/sse4_2-check.h
  78e9bfaad4304fbf531902e93985b629  gcc/testsuite/gcc.target/i386/sse4_2-crc32.h
  24e0c81587a981203de0c814fe1c7ed4  gcc/testsuite/gcc.target/i386/sse4_2-crc32b.c
  4fc3db053d0be974cfccf3060a965165  gcc/testsuite/gcc.target/i386/sse4_2-crc32l.c
*************** c2d7b7f01afef3cfaa4fbe9733419aa6  gcc/te
*** 64787,64792 ****
--- 68352,68358 ----
  4d6979079f3f5914201fd4c6d4656ed7  gcc/testsuite/gcc.target/i386/sse4_2-popcnt.h
  f00b1987dcfef9079710b0082c78297c  gcc/testsuite/gcc.target/i386/sse4_2-popcntl.c
  6ebfda8042e5e40215e02e197d9fe2ea  gcc/testsuite/gcc.target/i386/sse4_2-popcntq.c
+ b778feb8a5e70544c46456e33a4deffc  gcc/testsuite/gcc.target/i386/sse4_2-psraq-1.c
  6d2b7d7b017c0dff9318998e969ab407  gcc/testsuite/gcc.target/i386/sse4a-check.h
  effe4dc13814c957854a50cd5fad661e  gcc/testsuite/gcc.target/i386/sse4a-extract.c
  b0951967bfa853ba12e42c1c743667dc  gcc/testsuite/gcc.target/i386/sse4a-insert.c
*************** b3082251265483716a53827b31517936  gcc/te
*** 64831,64841 ****
  5c58d5d7c2e35b22f6a4c28d124bde6f  gcc/testsuite/gcc.target/i386/ssse3-psignd.c
  a9f88e9f5dc3a65651e4aac1c477bd99  gcc/testsuite/gcc.target/i386/ssse3-psignw.c
  350a25c3aea2becac5c56cff7b4bf401  gcc/testsuite/gcc.target/i386/ssse3-vals.h
! bdf3b6e3cb2688badbddfca7483e0a9f  gcc/testsuite/gcc.target/i386/stack-check-11.c
  6a99e9b76b37149be8cd25e15ff99650  gcc/testsuite/gcc.target/i386/stack-check-12.c
  22483b80d7ac0874da87507768c048f1  gcc/testsuite/gcc.target/i386/stack-check-17.c
! d6fca7d0a14d69c06eab7b10a94824aa  gcc/testsuite/gcc.target/i386/stack-check-18.c
! 7f01eb1d223c56a0d719d6be43a7369b  gcc/testsuite/gcc.target/i386/stack-check-19.c
  ca5571ee490db85826dd15cbfd5c6555  gcc/testsuite/gcc.target/i386/stack-prot-guard.c
  79da87a540843a0e1db2e7c3a4c97b4a  gcc/testsuite/gcc.target/i386/stack-prot-kernel.c
  d4a0de32b5fc72f0848beec394a4cb3e  gcc/testsuite/gcc.target/i386/stack-prot-sym.c
--- 68397,68407 ----
  5c58d5d7c2e35b22f6a4c28d124bde6f  gcc/testsuite/gcc.target/i386/ssse3-psignd.c
  a9f88e9f5dc3a65651e4aac1c477bd99  gcc/testsuite/gcc.target/i386/ssse3-psignw.c
  350a25c3aea2becac5c56cff7b4bf401  gcc/testsuite/gcc.target/i386/ssse3-vals.h
! 477939a29a89fa9e24f140cf485795a0  gcc/testsuite/gcc.target/i386/stack-check-11.c
  6a99e9b76b37149be8cd25e15ff99650  gcc/testsuite/gcc.target/i386/stack-check-12.c
  22483b80d7ac0874da87507768c048f1  gcc/testsuite/gcc.target/i386/stack-check-17.c
! f4f31f4c82164ce7b9fec1c877d2f06a  gcc/testsuite/gcc.target/i386/stack-check-18.c
! 85ba669397fb051dbc3e76f146553033  gcc/testsuite/gcc.target/i386/stack-check-19.c
  ca5571ee490db85826dd15cbfd5c6555  gcc/testsuite/gcc.target/i386/stack-prot-guard.c
  79da87a540843a0e1db2e7c3a4c97b4a  gcc/testsuite/gcc.target/i386/stack-prot-kernel.c
  d4a0de32b5fc72f0848beec394a4cb3e  gcc/testsuite/gcc.target/i386/stack-prot-sym.c
*************** f2432fa4e94240719fb29b95541fb57b  gcc/te
*** 64846,64871 ****
  1feabd730a99874265b945ee66a92de8  gcc/testsuite/gcc.target/i386/stackalign/longlong-1.c
  6831dc4f5fea82d8bf5e9ddc994f2ee6  gcc/testsuite/gcc.target/i386/stackalign/longlong-2.c
  692c477be80a6067954dcbc7313102db  gcc/testsuite/gcc.target/i386/stackalign/pr39146.c
! df9016f08834acf28d643b79851b4ffd  gcc/testsuite/gcc.target/i386/stackalign/pr88483-1.c
! 2a6324bb44b7a2cee7282bded1a2505b  gcc/testsuite/gcc.target/i386/stackalign/pr88483-2.c
  e797e3acc17ea660fd93c0911e210be1  gcc/testsuite/gcc.target/i386/stackalign/return-1.c
  6b20a3a861b6c86557247cd210cc9c63  gcc/testsuite/gcc.target/i386/stackalign/return-2.c
  5a8844cbc62a677bfa8d2d8536696a2a  gcc/testsuite/gcc.target/i386/stackalign/return-3.c
  22fcf3b6f05e35417473446a6401735c  gcc/testsuite/gcc.target/i386/stackalign/return-4.c
  8276f2c9f0467299ccc2c3bc989ca9cb  gcc/testsuite/gcc.target/i386/stackalign/return-5.c
  67a3c24d3712370ddefd38dcbb853a48  gcc/testsuite/gcc.target/i386/stackalign/return-6.c
! 1f052b2265fe1b807a650086f2e1a9f4  gcc/testsuite/gcc.target/i386/stackalign/stackalign.exp
  2778b9ab1729f5a65d10668b47f03340  gcc/testsuite/gcc.target/i386/strcmpopt_6.c
  caa0a36ffb354dbc6cd84a8137f4aef9  gcc/testsuite/gcc.target/i386/strinline.c
  aa69c6504471efa5d76824859d0bc6cb  gcc/testsuite/gcc.target/i386/strncmp-1.c
  fc3a18821c52e48c29f54252053988ba  gcc/testsuite/gcc.target/i386/struct-size.c
! a1fb21b895e9d76b3434490c178977d2  gcc/testsuite/gcc.target/i386/sw-1.c
  48aa8d8f4c116ed47aba3b4b60fae8f3  gcc/testsuite/gcc.target/i386/tailcall-1.c
  84b12afcb316a8ec7dce5bea1db67912  gcc/testsuite/gcc.target/i386/tbm-1.c
  b292dd3bc21c285ba5f3f1bcac0a5139  gcc/testsuite/gcc.target/i386/tbm-2.c
  052ea02011f5031dc3a4171aed715a52  gcc/testsuite/gcc.target/i386/tbm-bextri-1.c
  4edd7df3f7e7eae5b3e0d3be8a5068e4  gcc/testsuite/gcc.target/i386/testimm-1.c
! 1f445ad6e044718e464488074190f451  gcc/testsuite/gcc.target/i386/testimm-10.c
  ac027496b6114a9f7eb014a0c4cf998a  gcc/testsuite/gcc.target/i386/testimm-2.c
  0dac1c4518045bb84206c73d4b976ea4  gcc/testsuite/gcc.target/i386/testimm-3.c
  a276fee7a7cbbc4286d4e2deb772ed2f  gcc/testsuite/gcc.target/i386/testimm-4.c
--- 68412,68437 ----
  1feabd730a99874265b945ee66a92de8  gcc/testsuite/gcc.target/i386/stackalign/longlong-1.c
  6831dc4f5fea82d8bf5e9ddc994f2ee6  gcc/testsuite/gcc.target/i386/stackalign/longlong-2.c
  692c477be80a6067954dcbc7313102db  gcc/testsuite/gcc.target/i386/stackalign/pr39146.c
! 1ccd8825ce59206f8df02fd0751d5e5b  gcc/testsuite/gcc.target/i386/stackalign/pr88483-1.c
! 8db0a755de959155f787251ff92b5cdb  gcc/testsuite/gcc.target/i386/stackalign/pr88483-2.c
  e797e3acc17ea660fd93c0911e210be1  gcc/testsuite/gcc.target/i386/stackalign/return-1.c
  6b20a3a861b6c86557247cd210cc9c63  gcc/testsuite/gcc.target/i386/stackalign/return-2.c
  5a8844cbc62a677bfa8d2d8536696a2a  gcc/testsuite/gcc.target/i386/stackalign/return-3.c
  22fcf3b6f05e35417473446a6401735c  gcc/testsuite/gcc.target/i386/stackalign/return-4.c
  8276f2c9f0467299ccc2c3bc989ca9cb  gcc/testsuite/gcc.target/i386/stackalign/return-5.c
  67a3c24d3712370ddefd38dcbb853a48  gcc/testsuite/gcc.target/i386/stackalign/return-6.c
! 6dfd2679bc6ae381a7a56d29a374ef2b  gcc/testsuite/gcc.target/i386/stackalign/stackalign.exp
  2778b9ab1729f5a65d10668b47f03340  gcc/testsuite/gcc.target/i386/strcmpopt_6.c
  caa0a36ffb354dbc6cd84a8137f4aef9  gcc/testsuite/gcc.target/i386/strinline.c
  aa69c6504471efa5d76824859d0bc6cb  gcc/testsuite/gcc.target/i386/strncmp-1.c
  fc3a18821c52e48c29f54252053988ba  gcc/testsuite/gcc.target/i386/struct-size.c
! 082538977a4692c9eb5cd2472933d4ca  gcc/testsuite/gcc.target/i386/sw-1.c
  48aa8d8f4c116ed47aba3b4b60fae8f3  gcc/testsuite/gcc.target/i386/tailcall-1.c
  84b12afcb316a8ec7dce5bea1db67912  gcc/testsuite/gcc.target/i386/tbm-1.c
  b292dd3bc21c285ba5f3f1bcac0a5139  gcc/testsuite/gcc.target/i386/tbm-2.c
  052ea02011f5031dc3a4171aed715a52  gcc/testsuite/gcc.target/i386/tbm-bextri-1.c
  4edd7df3f7e7eae5b3e0d3be8a5068e4  gcc/testsuite/gcc.target/i386/testimm-1.c
! 7188c4d254bb0c4fb66e39b2c8e51711  gcc/testsuite/gcc.target/i386/testimm-10.c
  ac027496b6114a9f7eb014a0c4cf998a  gcc/testsuite/gcc.target/i386/testimm-2.c
  0dac1c4518045bb84206c73d4b976ea4  gcc/testsuite/gcc.target/i386/testimm-3.c
  a276fee7a7cbbc4286d4e2deb772ed2f  gcc/testsuite/gcc.target/i386/testimm-4.c
*************** b98b8dce15aadb6ca106aa3d557111ba  gcc/te
*** 64926,64932 ****
--- 68492,68506 ----
  0cfff4e34a4fa5a7aeadab5a257bb17f  gcc/testsuite/gcc.target/i386/vect-abs-s16.c
  5206e20312fe5e0e5b6a891b62778589  gcc/testsuite/gcc.target/i386/vect-abs-s32.c
  974b57856d4268bcd3d2d60d46fd6442  gcc/testsuite/gcc.target/i386/vect-abs-s8.c
+ 0042dae90ec162d5dc324e1f937754ca  gcc/testsuite/gcc.target/i386/vect-addsub-2.c
+ 865abc4392aef857420d31088ef825fc  gcc/testsuite/gcc.target/i386/vect-addsub-3.c
  d8a06b42b5d0e429d4de46913e331fbf  gcc/testsuite/gcc.target/i386/vect-addsub.c
+ 37861d746d315ee50b9f8157a77e5029  gcc/testsuite/gcc.target/i386/vect-addsubv2df.c
+ 5580f2a6928e2da29a5b366a63baa25f  gcc/testsuite/gcc.target/i386/vect-addsubv4df.c
+ c24fae5adc0ce5fb40efb0c3fd4c5150  gcc/testsuite/gcc.target/i386/vect-addsubv4sf.c
+ e8b765803fadda8eefcf01741317c8de  gcc/testsuite/gcc.target/i386/vect-addsubv8sf.c
+ 5e421c94bedfd65495d5368891bb3990  gcc/testsuite/gcc.target/i386/vect-alignment-peeling-1.c
+ 0518e4e31721ecfae2923daa6806692e  gcc/testsuite/gcc.target/i386/vect-alignment-peeling-2.c
  dcf09c8d7eb01e0e8a5e8cefaf164498  gcc/testsuite/gcc.target/i386/vect-args.c
  f34aa81937bfa895146815db467bcc3d  gcc/testsuite/gcc.target/i386/vect-cond-1.c
  5c0044496c9a7d83c47a821d73ab8ddf  gcc/testsuite/gcc.target/i386/vect-div-1.c
*************** f34aa81937bfa895146815db467bcc3d  gcc/te
*** 64934,64952 ****
  f2246fb526840289cc94bd7e8b0c994a  gcc/testsuite/gcc.target/i386/vect-double-1a.c
  620268a8c72e7873c7d5dee21a554a93  gcc/testsuite/gcc.target/i386/vect-double-2.c
  4c9ce05e33ac7d3784a3f13d53e110ed  gcc/testsuite/gcc.target/i386/vect-double-2a.c
  339b25c1c15e2ab8d1fcf9cb530f1171  gcc/testsuite/gcc.target/i386/vect-insert-1.c
  1be56ef9ea27431ea78de1b1f37ba260  gcc/testsuite/gcc.target/i386/vect-pack-trunc-1.c
  20a0928d3e53e6a1f55cc1cdd9b7dd3e  gcc/testsuite/gcc.target/i386/vect-pack-trunc-2.c
  3ae8894d32adfa76a3d2a79477527531  gcc/testsuite/gcc.target/i386/vect-perm-even-1.c
  01c1d7e7805e8138e514493ab9238621  gcc/testsuite/gcc.target/i386/vect-perm-odd-1.c
  515f451843087285cae4273f2866f93b  gcc/testsuite/gcc.target/i386/vect-pr67800.c
! 1194b8571ffb184ffacd80e2515ce001  gcc/testsuite/gcc.target/i386/vect-rebuild.c
  de36035a6b74d9e9cabfaa8cfb15f288  gcc/testsuite/gcc.target/i386/vect-signbitf.c
  7f2bb0dd2fdc6e3a083e43645ee26275  gcc/testsuite/gcc.target/i386/vect-sizes-1.c
  ee92f709acd8e62a7c9dee331c01f3b5  gcc/testsuite/gcc.target/i386/vect-unpack-1.c
  6e2ac104cc5f021d36fbcdf67129f17d  gcc/testsuite/gcc.target/i386/vect-unpack-2.c
  e050839388ed939e6ea93e65d85f8264  gcc/testsuite/gcc.target/i386/vect-unpack-3.c
! 62442b8b1755dc7d751184c72856e2d5  gcc/testsuite/gcc.target/i386/vect8-ret.c
  17262b0be0bb91aa8e2425773da183a3  gcc/testsuite/gcc.target/i386/vectorize1.c
  a681ca062ac072c3cb40b105a2ea0266  gcc/testsuite/gcc.target/i386/vectorize10.c
  2b02856d49c831f0cc8cd5bce35766d7  gcc/testsuite/gcc.target/i386/vectorize2.c
--- 68508,68546 ----
  f2246fb526840289cc94bd7e8b0c994a  gcc/testsuite/gcc.target/i386/vect-double-1a.c
  620268a8c72e7873c7d5dee21a554a93  gcc/testsuite/gcc.target/i386/vect-double-2.c
  4c9ce05e33ac7d3784a3f13d53e110ed  gcc/testsuite/gcc.target/i386/vect-double-2a.c
+ 44589af45370ba4865592d1e9e717b40  gcc/testsuite/gcc.target/i386/vect-float16-1.c
+ 22c6e6a37c837040af7566c0ebd70233  gcc/testsuite/gcc.target/i386/vect-float16-10.c
+ 412a2e12fa51e461ac9fc29d0bcadfae  gcc/testsuite/gcc.target/i386/vect-float16-11.c
+ d56c6663dbc774c25d3251ed74884632  gcc/testsuite/gcc.target/i386/vect-float16-12.c
+ 09964257aa3f7152643e1e9dd1afebe7  gcc/testsuite/gcc.target/i386/vect-float16-2.c
+ afb70287c28baac939b347488d94bab9  gcc/testsuite/gcc.target/i386/vect-float16-3.c
+ 7a6fd62ca5d79092ac18ca8ddc3c58fb  gcc/testsuite/gcc.target/i386/vect-float16-4.c
+ d0138fc0a0e6fef1d56f703214a5b485  gcc/testsuite/gcc.target/i386/vect-float16-5.c
+ 57dd89b4ebbd5da2b1c96eff7949718c  gcc/testsuite/gcc.target/i386/vect-float16-6.c
+ a1430d39bff71330ab0e127cddf32a8e  gcc/testsuite/gcc.target/i386/vect-float16-7.c
+ f9b3af027a9b6ed15ac79a3d3003a815  gcc/testsuite/gcc.target/i386/vect-float16-8.c
+ 083f0348ca515ab99586d1103492e3c9  gcc/testsuite/gcc.target/i386/vect-float16-9.c
+ 5f8bb609145489f1d76c3f8fa03f6ff0  gcc/testsuite/gcc.target/i386/vect-fmaddsubXXXpd.c
+ 070474c3a3a25e530493dbf835b98f93  gcc/testsuite/gcc.target/i386/vect-fmaddsubXXXps.c
+ 9a1b5ce8d83f885f1704ce12d862cbb9  gcc/testsuite/gcc.target/i386/vect-fmsubaddXXXpd.c
+ df8fe973095a25b0038e0371af9053d4  gcc/testsuite/gcc.target/i386/vect-fmsubaddXXXps.c
+ 82dc60fe528d41ccd86fd9e442fb288f  gcc/testsuite/gcc.target/i386/vect-gather-1.c
  339b25c1c15e2ab8d1fcf9cb530f1171  gcc/testsuite/gcc.target/i386/vect-insert-1.c
  1be56ef9ea27431ea78de1b1f37ba260  gcc/testsuite/gcc.target/i386/vect-pack-trunc-1.c
  20a0928d3e53e6a1f55cc1cdd9b7dd3e  gcc/testsuite/gcc.target/i386/vect-pack-trunc-2.c
  3ae8894d32adfa76a3d2a79477527531  gcc/testsuite/gcc.target/i386/vect-perm-even-1.c
  01c1d7e7805e8138e514493ab9238621  gcc/testsuite/gcc.target/i386/vect-perm-odd-1.c
  515f451843087285cae4273f2866f93b  gcc/testsuite/gcc.target/i386/vect-pr67800.c
! 3c9e12b95afbbd42b2d335da98dfca9b  gcc/testsuite/gcc.target/i386/vect-pr82426.c
! c94d34a8add7450a1085d0dbbfca7403  gcc/testsuite/gcc.target/i386/vect-pr97352.c
! 721bbf9cfd81a48f5915680f4a425bad  gcc/testsuite/gcc.target/i386/vect-rebuild.c
! 75207fad1f58c73a9ea0045ffa247e39  gcc/testsuite/gcc.target/i386/vect-reduc-1.c
  de36035a6b74d9e9cabfaa8cfb15f288  gcc/testsuite/gcc.target/i386/vect-signbitf.c
  7f2bb0dd2fdc6e3a083e43645ee26275  gcc/testsuite/gcc.target/i386/vect-sizes-1.c
  ee92f709acd8e62a7c9dee331c01f3b5  gcc/testsuite/gcc.target/i386/vect-unpack-1.c
  6e2ac104cc5f021d36fbcdf67129f17d  gcc/testsuite/gcc.target/i386/vect-unpack-2.c
  e050839388ed939e6ea93e65d85f8264  gcc/testsuite/gcc.target/i386/vect-unpack-3.c
! 14f97b9dcbd389e10dc5aa32f63f91f2  gcc/testsuite/gcc.target/i386/vect8-ret.c
  17262b0be0bb91aa8e2425773da183a3  gcc/testsuite/gcc.target/i386/vectorize1.c
  a681ca062ac072c3cb40b105a2ea0266  gcc/testsuite/gcc.target/i386/vectorize10.c
  2b02856d49c831f0cc8cd5bce35766d7  gcc/testsuite/gcc.target/i386/vectorize2.c
*************** f5394c038a3031cca8da6381b321aedb  gcc/te
*** 64958,64963 ****
--- 68552,68559 ----
  146491bc3c3d5fec1957a2ca55dbd0d5  gcc/testsuite/gcc.target/i386/vectorize7.c
  cf807a1a0c9ea4bc99f4a22859d9b829  gcc/testsuite/gcc.target/i386/vectorize8.c
  51bb807723c574207213354a4efa70d9  gcc/testsuite/gcc.target/i386/vectorize9.c
+ 6e75842fa095abfc68c803037e8bf3aa  gcc/testsuite/gcc.target/i386/vnni-auto-vectorize-1.c
+ 40595281c51d64d5637a42a7958158a3  gcc/testsuite/gcc.target/i386/vnni-auto-vectorize-2.c
  6517a2c66873ffa0e86469852e46a556  gcc/testsuite/gcc.target/i386/vnni_inline_error.c
  784c987777c87b20adb70aefdd43c1ea  gcc/testsuite/gcc.target/i386/volatile-1.c
  df392be222a4275b2813dd6198b59951  gcc/testsuite/gcc.target/i386/volatile-2.c
*************** ba2b1e708b3eafbf4da944250a3d4f95  gcc/te
*** 64969,64977 ****
--- 68565,68575 ----
  a29164d700162446291a30e80f9fdf44  gcc/testsuite/gcc.target/i386/vperm-4-2.inc
  a781860aa4299cab238021b0c815d826  gcc/testsuite/gcc.target/i386/vperm-v2df.c
  090d01116cec60d72a1446f0ebc9f9ef  gcc/testsuite/gcc.target/i386/vperm-v2di.c
+ 6612b6796bfe697aa2ad0429c66aed37  gcc/testsuite/gcc.target/i386/vperm-v2hi.c
  5a9d2ca061420b0975c2316c43570737  gcc/testsuite/gcc.target/i386/vperm-v2sf.c
  cbcb3a51114df75d5fc346195be3bd8b  gcc/testsuite/gcc.target/i386/vperm-v2si.c
  f0d5e9353fe4d75539c109b81f53b70f  gcc/testsuite/gcc.target/i386/vperm-v4hi.c
+ 7b442824f0ed49c588322ea1457ff6c1  gcc/testsuite/gcc.target/i386/vperm-v4qi.c
  82ed376ff5668a0e249e3bd95aa55829  gcc/testsuite/gcc.target/i386/vperm-v4sf-1.c
  76b76c363a368ed345acc428fa7cd7ff  gcc/testsuite/gcc.target/i386/vperm-v4sf-2.c
  57d05bf2e7a02a243498dbeed968f0ff  gcc/testsuite/gcc.target/i386/vperm-v4si-1.c
*************** f32d0d602b6f58b940bf95892b0db34a  gcc/te
*** 64982,64988 ****
  1e09b86899aa54e1a73554c08bd179cc  gcc/testsuite/gcc.target/i386/vzeroupper-dump-flags.c
  3a4f0f6120e1da5bed1481efe4fc37b6  gcc/testsuite/gcc.target/i386/warn-abs-3.c
  44fec3573c80bd08c5d402045b97645b  gcc/testsuite/gcc.target/i386/warn-vect-op-1.c
! 374df7a1c2f21fcd160b142454a349e7  gcc/testsuite/gcc.target/i386/warn-vect-op-2.c
  66d1d77278077916978319dc1f32ebb7  gcc/testsuite/gcc.target/i386/warn-vect-op-3.c
  732431c1122c6fec401dab5065f048c2  gcc/testsuite/gcc.target/i386/wbinvd-1.c
  efca2d14ddeeb4b9d4b258a40c5017ef  gcc/testsuite/gcc.target/i386/wbnoinvd-1.c
--- 68580,68586 ----
  1e09b86899aa54e1a73554c08bd179cc  gcc/testsuite/gcc.target/i386/vzeroupper-dump-flags.c
  3a4f0f6120e1da5bed1481efe4fc37b6  gcc/testsuite/gcc.target/i386/warn-abs-3.c
  44fec3573c80bd08c5d402045b97645b  gcc/testsuite/gcc.target/i386/warn-vect-op-1.c
! 9a4839801fc099b9839200bb0fbdd3c5  gcc/testsuite/gcc.target/i386/warn-vect-op-2.c
  66d1d77278077916978319dc1f32ebb7  gcc/testsuite/gcc.target/i386/warn-vect-op-3.c
  732431c1122c6fec401dab5065f048c2  gcc/testsuite/gcc.target/i386/wbinvd-1.c
  efca2d14ddeeb4b9d4b258a40c5017ef  gcc/testsuite/gcc.target/i386/wbnoinvd-1.c
*************** b81eec3020bfc4b0c6d961dd7dfc73b5  gcc/te
*** 65049,65054 ****
--- 68647,68653 ----
  9d85993ff88724a6ede2b74bc9d3044a  gcc/testsuite/gcc.target/i386/xorps-sse.c
  5e35df83dc304085add881ffa9591299  gcc/testsuite/gcc.target/i386/xorps-sse2.c
  823144da31d940721b1596844506366d  gcc/testsuite/gcc.target/i386/xorps.c
+ f7e982f19bf360c6735d5fbd85f29e0c  gcc/testsuite/gcc.target/i386/xorsign-avx.c
  d439a77d5e6c43d22b0e43a8932a186a  gcc/testsuite/gcc.target/i386/xorsign.c
  5d6799d058b6088fec71f80bc037cc66  gcc/testsuite/gcc.target/i386/xrstor-1.c
  cc5fa98498d02d917ff12651bbecacbc  gcc/testsuite/gcc.target/i386/xrstor64-1.c
*************** e50239a34975c5fbc852ce8f339c44ea  gcc/te
*** 65120,65126 ****
  de4e305b115a22fef774b1524552bf20  gcc/testsuite/gcc.target/ia64/fpreg-2.c
  25922243d19af1f913e65dbd4e5ffb31  gcc/testsuite/gcc.target/ia64/fptr-1.c
  08fa38ef5026e6de3937383461ad92f2  gcc/testsuite/gcc.target/ia64/got-1.c
! 2cef6fd7390472473b0ddc38677cfa6e  gcc/testsuite/gcc.target/ia64/ia64.exp
  37ef53f75bdf314832e2e6e7f81c6c93  gcc/testsuite/gcc.target/ia64/mfused-madd-vect.c
  e8a414d98f9dcd1d545f9c542dda6671  gcc/testsuite/gcc.target/ia64/mfused-madd.c
  282dda375f4c7025c7ff2dee87894838  gcc/testsuite/gcc.target/ia64/mno-fused-madd-vect.c
--- 68719,68725 ----
  de4e305b115a22fef774b1524552bf20  gcc/testsuite/gcc.target/ia64/fpreg-2.c
  25922243d19af1f913e65dbd4e5ffb31  gcc/testsuite/gcc.target/ia64/fptr-1.c
  08fa38ef5026e6de3937383461ad92f2  gcc/testsuite/gcc.target/ia64/got-1.c
! ba2bda216402f550140f02917fca9908  gcc/testsuite/gcc.target/ia64/ia64.exp
  37ef53f75bdf314832e2e6e7f81c6c93  gcc/testsuite/gcc.target/ia64/mfused-madd-vect.c
  e8a414d98f9dcd1d545f9c542dda6671  gcc/testsuite/gcc.target/ia64/mfused-madd.c
  282dda375f4c7025c7ff2dee87894838  gcc/testsuite/gcc.target/ia64/mno-fused-madd-vect.c
*************** e7cfcf35d3576cc348fad814806318e1  gcc/te
*** 65151,65156 ****
--- 68750,68760 ----
  2191695e83896188ccba1a223f3a204c  gcc/testsuite/gcc.target/ia64/versionid-2.c
  5976d0923571b4543887e7a4b23c0414  gcc/testsuite/gcc.target/ia64/visibility-1.c
  ab4a753420c7cc112326b8711285358c  gcc/testsuite/gcc.target/ia64/visibility-2.c
+ 6a73e078ae4dd205f6bf24d6d465a6ae  gcc/testsuite/gcc.target/loongarch/larch-builtin.c
+ fad9a071f9e73c3ff1cb70eb4fbaaf9d  gcc/testsuite/gcc.target/loongarch/loongarch.exp
+ e0bad7f039a28a10cea2a3ae6b4187a3  gcc/testsuite/gcc.target/loongarch/tst-asm-const.c
+ daa985dfac90c17791ed0549fd2b0181  gcc/testsuite/gcc.target/loongarch/zero-size-field-pass.c
+ c5a3a773bb277e1c1071f9d892d1ed48  gcc/testsuite/gcc.target/loongarch/zero-size-field-ret.c
  ce7c3a66fa22a36825ef82d61a779479  gcc/testsuite/gcc.target/m68k/20090709-1.c
  0118c41214ee57c9ebce401655922219  gcc/testsuite/gcc.target/m68k/20100512-1.c
  4c8b67e3a760343416cf4ec37519ff93  gcc/testsuite/gcc.target/m68k/crash1.c
*************** aa59fb938dc80d0bfebfc946cdbfbabf  gcc/te
*** 65159,65165 ****
  363ff108550fa02c923cccb0da681ab5  gcc/testsuite/gcc.target/m68k/interrupt_thread-1.c
  3c540acf2434a3c410d35013267ca79a  gcc/testsuite/gcc.target/m68k/interrupt_thread-2.c
  4183579970ae4f3d5815533efb1b3269  gcc/testsuite/gcc.target/m68k/interrupt_thread-3.c
! a73201309150303ab0e90c2f13bb4386  gcc/testsuite/gcc.target/m68k/m68k.exp
  22fc64de9c71e0dd6fc2ede8b6a4b336  gcc/testsuite/gcc.target/m68k/mulsi_highpart.c
  024e8f5fdf9b8d6bb2395e4e383e4712  gcc/testsuite/gcc.target/m68k/pic-1.c
  16f39f8e31f0f10521879907e696470d  gcc/testsuite/gcc.target/m68k/pr19201.c
--- 68763,68769 ----
  363ff108550fa02c923cccb0da681ab5  gcc/testsuite/gcc.target/m68k/interrupt_thread-1.c
  3c540acf2434a3c410d35013267ca79a  gcc/testsuite/gcc.target/m68k/interrupt_thread-2.c
  4183579970ae4f3d5815533efb1b3269  gcc/testsuite/gcc.target/m68k/interrupt_thread-3.c
! 3b6bc6f8532bcc9c44310e0382483eac  gcc/testsuite/gcc.target/m68k/m68k.exp
  22fc64de9c71e0dd6fc2ede8b6a4b336  gcc/testsuite/gcc.target/m68k/mulsi_highpart.c
  024e8f5fdf9b8d6bb2395e4e383e4712  gcc/testsuite/gcc.target/m68k/pic-1.c
  16f39f8e31f0f10521879907e696470d  gcc/testsuite/gcc.target/m68k/pr19201.c
*************** e143618b2c8e9f74a89e408849d5ea9e  gcc/te
*** 65216,65222 ****
  2086e2e1ebf0b6ad99cc2808f906bdaf  gcc/testsuite/gcc.target/microblaze/isa/nofloat.c
  7d11470d188b8ddbdb82b31ba91f41ff  gcc/testsuite/gcc.target/microblaze/isa/pcmp.c
  950feeef0cf00d66d2c89478821978e0  gcc/testsuite/gcc.target/microblaze/isa/vanilla.c
! bc2e729e8001ce3b57f5ac7ee14415be  gcc/testsuite/gcc.target/microblaze/microblaze.exp
  9a329728496d062effbbdf4b7bde3f00  gcc/testsuite/gcc.target/microblaze/others/break_handler.c
  a498a396b1e4969560394c7d56f05fa5  gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c
  821cbcd6a2563ff2997adb005fdd91af  gcc/testsuite/gcc.target/microblaze/others/data_var1.c
--- 68820,68826 ----
  2086e2e1ebf0b6ad99cc2808f906bdaf  gcc/testsuite/gcc.target/microblaze/isa/nofloat.c
  7d11470d188b8ddbdb82b31ba91f41ff  gcc/testsuite/gcc.target/microblaze/isa/pcmp.c
  950feeef0cf00d66d2c89478821978e0  gcc/testsuite/gcc.target/microblaze/isa/vanilla.c
! 812e869f96c7094b0b4d89abef4dcb54  gcc/testsuite/gcc.target/microblaze/microblaze.exp
  9a329728496d062effbbdf4b7bde3f00  gcc/testsuite/gcc.target/microblaze/others/break_handler.c
  a498a396b1e4969560394c7d56f05fa5  gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c
  821cbcd6a2563ff2997adb005fdd91af  gcc/testsuite/gcc.target/microblaze/others/data_var1.c
*************** d70897fb103953773b6a45dd5328c664  gcc/te
*** 65346,65352 ****
  05ea0ada393e7ec2c1c35a6485113a2b  gcc/testsuite/gcc.target/mips/const-anchor-4.c
  766902dab6d6d5cd9d7197254a7332e5  gcc/testsuite/gcc.target/mips/constant-spill.c
  43c7b13372ab127f62a02908b0d109ea  gcc/testsuite/gcc.target/mips/data-sym-jump.c
! c52f5c6142dd8cc6eb4e016b8bb531ce  gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c
  fbb4f223bbd5e08d3cc054682c367405  gcc/testsuite/gcc.target/mips/data-sym-pool.c
  17c9c459b5bd9c2c1f5322a9cebe7c52  gcc/testsuite/gcc.target/mips/div-1.c
  258f4051ab8422e0fc6f3fecf2520d64  gcc/testsuite/gcc.target/mips/div-13.c
--- 68950,68956 ----
  05ea0ada393e7ec2c1c35a6485113a2b  gcc/testsuite/gcc.target/mips/const-anchor-4.c
  766902dab6d6d5cd9d7197254a7332e5  gcc/testsuite/gcc.target/mips/constant-spill.c
  43c7b13372ab127f62a02908b0d109ea  gcc/testsuite/gcc.target/mips/data-sym-jump.c
! e2187b87e72dd566fdcd706c7d799faf  gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c
  fbb4f223bbd5e08d3cc054682c367405  gcc/testsuite/gcc.target/mips/data-sym-pool.c
  17c9c459b5bd9c2c1f5322a9cebe7c52  gcc/testsuite/gcc.target/mips/div-1.c
  258f4051ab8422e0fc6f3fecf2520d64  gcc/testsuite/gcc.target/mips/div-13.c
*************** a9917658cc10a8fcbfd90dbd08a76369  gcc/te
*** 65408,65420 ****
  0fbebec86f8b42733c39339e6815acbc  gcc/testsuite/gcc.target/mips/fix-r4000-10.c
  7742ed337b0bf9d017c2d4fd9277f5da  gcc/testsuite/gcc.target/mips/fix-r4000-11.c
  b5b562146c00f34366ed97f8143578e4  gcc/testsuite/gcc.target/mips/fix-r4000-12.c
! 18f0bafe9c3e2fb8885c9813edb3df70  gcc/testsuite/gcc.target/mips/fix-r4000-2.c
! dcc02ebf3b2b595cee055bdabd8ffd08  gcc/testsuite/gcc.target/mips/fix-r4000-3.c
  a9e9e18b60ae812b52a6b4ceca017a78  gcc/testsuite/gcc.target/mips/fix-r4000-4.c
  86876c1b3596723965db586d5b6c6da8  gcc/testsuite/gcc.target/mips/fix-r4000-5.c
  d8dfc512d235f7cfa07fbd47078c3ec8  gcc/testsuite/gcc.target/mips/fix-r4000-6.c
! abe1463b75db34c0d2ef7b9f0aef226c  gcc/testsuite/gcc.target/mips/fix-r4000-7.c
! 40266778fc50300d152fe500fb654928  gcc/testsuite/gcc.target/mips/fix-r4000-8.c
  709a7067d9b90b518c4b9cb4cf41643c  gcc/testsuite/gcc.target/mips/fix-r4000-9.c
  26d59e32f84979f8a23fe1a8ec47ec1e  gcc/testsuite/gcc.target/mips/fix-vr4130-1.c
  b12ab1afd5f3be35ef489f0323dcea80  gcc/testsuite/gcc.target/mips/fix-vr4130-2.c
--- 69012,69024 ----
  0fbebec86f8b42733c39339e6815acbc  gcc/testsuite/gcc.target/mips/fix-r4000-10.c
  7742ed337b0bf9d017c2d4fd9277f5da  gcc/testsuite/gcc.target/mips/fix-r4000-11.c
  b5b562146c00f34366ed97f8143578e4  gcc/testsuite/gcc.target/mips/fix-r4000-12.c
! ca6a99b86964a7a20cef161e09157e87  gcc/testsuite/gcc.target/mips/fix-r4000-2.c
! ac8e5162d921f36aa66f88270350e944  gcc/testsuite/gcc.target/mips/fix-r4000-3.c
  a9e9e18b60ae812b52a6b4ceca017a78  gcc/testsuite/gcc.target/mips/fix-r4000-4.c
  86876c1b3596723965db586d5b6c6da8  gcc/testsuite/gcc.target/mips/fix-r4000-5.c
  d8dfc512d235f7cfa07fbd47078c3ec8  gcc/testsuite/gcc.target/mips/fix-r4000-6.c
! 2c8596028c68fff8dad65540c2e53c8c  gcc/testsuite/gcc.target/mips/fix-r4000-7.c
! 0ae1707977edeb7c5e07c0faf8b5bd97  gcc/testsuite/gcc.target/mips/fix-r4000-8.c
  709a7067d9b90b518c4b9cb4cf41643c  gcc/testsuite/gcc.target/mips/fix-r4000-9.c
  26d59e32f84979f8a23fe1a8ec47ec1e  gcc/testsuite/gcc.target/mips/fix-vr4130-1.c
  b12ab1afd5f3be35ef489f0323dcea80  gcc/testsuite/gcc.target/mips/fix-vr4130-2.c
*************** c59029e95de7d13850ad5e89322746aa  gcc/te
*** 65436,65443 ****
  7080332df14afa04ea934660dc2f0494  gcc/testsuite/gcc.target/mips/fpr-moves-6.c
  1ab987eb6bc2b1af6a0d05f9fa55cebb  gcc/testsuite/gcc.target/mips/fpr-moves-7.c
  f51e56f8225c7d3b3d5bde1b0519aedf  gcc/testsuite/gcc.target/mips/fpr-moves-8.c
! e47baab2d9953ff56375b7018a454e38  gcc/testsuite/gcc.target/mips/frame-header-1.c
! 7d125980b7c1c0937a8de36d58668e60  gcc/testsuite/gcc.target/mips/frame-header-2.c
  2403fb1ed2a82ca1e79ee7a1ee345343  gcc/testsuite/gcc.target/mips/frame-header-3.c
  e5c1eb600ba48590222aab225256bf79  gcc/testsuite/gcc.target/mips/frame-header-4.c
  b2873f7da7280d016e0265a486d06044  gcc/testsuite/gcc.target/mips/fuse-caller-save-micromips.c
--- 69040,69047 ----
  7080332df14afa04ea934660dc2f0494  gcc/testsuite/gcc.target/mips/fpr-moves-6.c
  1ab987eb6bc2b1af6a0d05f9fa55cebb  gcc/testsuite/gcc.target/mips/fpr-moves-7.c
  f51e56f8225c7d3b3d5bde1b0519aedf  gcc/testsuite/gcc.target/mips/fpr-moves-8.c
! 1275077666fdb159553a97d17608037d  gcc/testsuite/gcc.target/mips/frame-header-1.c
! 6c512878face79ea73752c618369e9a2  gcc/testsuite/gcc.target/mips/frame-header-2.c
  2403fb1ed2a82ca1e79ee7a1ee345343  gcc/testsuite/gcc.target/mips/frame-header-3.c
  e5c1eb600ba48590222aab225256bf79  gcc/testsuite/gcc.target/mips/frame-header-4.c
  b2873f7da7280d016e0265a486d06044  gcc/testsuite/gcc.target/mips/fuse-caller-save-micromips.c
*************** e7490a676f50b43dff9fbe84ff3bd95e  gcc/te
*** 65466,65472 ****
  c81aee9c49e6f97c3c8859ac412e9a1a  gcc/testsuite/gcc.target/mips/insn-tablejump.c
  89a4ef1858913bac4051ca04ba4ebdea  gcc/testsuite/gcc.target/mips/int-moves-1.c
  1c97317ecf082e15cdf77755e9fcebbb  gcc/testsuite/gcc.target/mips/int-moves-2.c
! 91ccfe7e4b7d9e51426ff478f87b5709  gcc/testsuite/gcc.target/mips/inter/mips16-inter.exp
  41a97b2d305c2755e145a924168d4527  gcc/testsuite/gcc.target/mips/inter/mips16_stubs_1_main.c
  d231e6bcd981687f765ebf5b64bfe33d  gcc/testsuite/gcc.target/mips/inter/mips16_stubs_1_x.c
  1b5e8db99dca8d400407b92203490cd8  gcc/testsuite/gcc.target/mips/inter/mips16_stubs_1_y.c
--- 69070,69076 ----
  c81aee9c49e6f97c3c8859ac412e9a1a  gcc/testsuite/gcc.target/mips/insn-tablejump.c
  89a4ef1858913bac4051ca04ba4ebdea  gcc/testsuite/gcc.target/mips/int-moves-1.c
  1c97317ecf082e15cdf77755e9fcebbb  gcc/testsuite/gcc.target/mips/int-moves-2.c
! ab62441689c7016677aa528f9108c9b3  gcc/testsuite/gcc.target/mips/inter/mips16-inter.exp
  41a97b2d305c2755e145a924168d4527  gcc/testsuite/gcc.target/mips/inter/mips16_stubs_1_main.c
  d231e6bcd981687f765ebf5b64bfe33d  gcc/testsuite/gcc.target/mips/inter/mips16_stubs_1_x.c
  1b5e8db99dca8d400407b92203490cd8  gcc/testsuite/gcc.target/mips/inter/mips16_stubs_1_y.c
*************** e29cf040ff47381ec220169736b7446a  gcc/te
*** 65515,65521 ****
  0c68f22b9635571f990298a5dd303133  gcc/testsuite/gcc.target/mips/mips-3d-8.c
  3f1d2771ce47e4d32f5b8afd4beb82d3  gcc/testsuite/gcc.target/mips/mips-3d-9.c
  375a28f0b3d06b2fad9a483c26ea4000  gcc/testsuite/gcc.target/mips/mips-builtins-pure.c
! 07e8de6514775dec6e2257c7ea0d5d4f  gcc/testsuite/gcc.target/mips/mips-nonpic/README
  0e86fc6b72b862d940296b6decd5d983  gcc/testsuite/gcc.target/mips/mips-nonpic/main-1.c
  84eb9316a2c541350e627b08dd891336  gcc/testsuite/gcc.target/mips/mips-nonpic/main-10.c
  b1a835baf5477fd4c7927dfd57b3c53b  gcc/testsuite/gcc.target/mips/mips-nonpic/main-11.c
--- 69119,69125 ----
  0c68f22b9635571f990298a5dd303133  gcc/testsuite/gcc.target/mips/mips-3d-8.c
  3f1d2771ce47e4d32f5b8afd4beb82d3  gcc/testsuite/gcc.target/mips/mips-3d-9.c
  375a28f0b3d06b2fad9a483c26ea4000  gcc/testsuite/gcc.target/mips/mips-builtins-pure.c
! 1091b30e163995a47e7938e1c3190e1e  gcc/testsuite/gcc.target/mips/mips-nonpic/README
  0e86fc6b72b862d940296b6decd5d983  gcc/testsuite/gcc.target/mips/mips-nonpic/main-1.c
  84eb9316a2c541350e627b08dd891336  gcc/testsuite/gcc.target/mips/mips-nonpic/main-10.c
  b1a835baf5477fd4c7927dfd57b3c53b  gcc/testsuite/gcc.target/mips/mips-nonpic/main-11.c
*************** f7db832be6c1f33d30392dc4571ec31a  gcc/te
*** 65532,65538 ****
  f3d83fe630c8754c36f040556d8ac908  gcc/testsuite/gcc.target/mips/mips-nonpic/main-7.c
  6df45c093b1debb44ab59e19680afe1a  gcc/testsuite/gcc.target/mips/mips-nonpic/main-8.c
  1c8aaab2d02d475708358405e698cef3  gcc/testsuite/gcc.target/mips/mips-nonpic/main-9.c
! 7be76ffa5458cf895e945ee32bc006f4  gcc/testsuite/gcc.target/mips/mips-nonpic/mips-nonpic.exp
  019e2bb848027bcd4216983c967f3950  gcc/testsuite/gcc.target/mips/mips-nonpic/mips-nonpic.h
  1e01424d10b7a1e8927d5a1f53724f45  gcc/testsuite/gcc.target/mips/mips-nonpic/nonpic-addr-call.c
  8dd8657a8c441d55f4fa03d7b3eb5ea8  gcc/testsuite/gcc.target/mips/mips-nonpic/nonpic-addr.c
--- 69136,69142 ----
  f3d83fe630c8754c36f040556d8ac908  gcc/testsuite/gcc.target/mips/mips-nonpic/main-7.c
  6df45c093b1debb44ab59e19680afe1a  gcc/testsuite/gcc.target/mips/mips-nonpic/main-8.c
  1c8aaab2d02d475708358405e698cef3  gcc/testsuite/gcc.target/mips/mips-nonpic/main-9.c
! 4896f6dddcf79ac29b1f6549bbb0d9bc  gcc/testsuite/gcc.target/mips/mips-nonpic/mips-nonpic.exp
  019e2bb848027bcd4216983c967f3950  gcc/testsuite/gcc.target/mips/mips-nonpic/mips-nonpic.h
  1e01424d10b7a1e8927d5a1f53724f45  gcc/testsuite/gcc.target/mips/mips-nonpic/nonpic-addr-call.c
  8dd8657a8c441d55f4fa03d7b3eb5ea8  gcc/testsuite/gcc.target/mips/mips-nonpic/nonpic-addr.c
*************** a85a02c19fa964f6a465de8a4f8929ee  gcc/te
*** 65555,65561 ****
  9a29c67ce03ecfddfabb4df18f2ea5d0  gcc/testsuite/gcc.target/mips/mips-ps-type-2.c
  e166ce4f43ccc2c62b14cf1987cc44c9  gcc/testsuite/gcc.target/mips/mips-ps-type.c
  1da4a0d69d85dcc79c371471a1e1519e  gcc/testsuite/gcc.target/mips/mips-sched-madd.c
! 98f6a9b62063d9604e894efe3f35a646  gcc/testsuite/gcc.target/mips/mips.exp
  b48e1f7713d9377ade65ca3353e3aadd  gcc/testsuite/gcc.target/mips/mips16-attributes-2.c
  ec0fc4cda7ea3307bf321757f0f6ab8b  gcc/testsuite/gcc.target/mips/mips16-attributes-3.c
  6de1fc03c068d128a6bcc28a79510784  gcc/testsuite/gcc.target/mips/mips16-attributes-4.c
--- 69159,69165 ----
  9a29c67ce03ecfddfabb4df18f2ea5d0  gcc/testsuite/gcc.target/mips/mips-ps-type-2.c
  e166ce4f43ccc2c62b14cf1987cc44c9  gcc/testsuite/gcc.target/mips/mips-ps-type.c
  1da4a0d69d85dcc79c371471a1e1519e  gcc/testsuite/gcc.target/mips/mips-sched-madd.c
! 625c820489b238ff60fe7094c7e855a1  gcc/testsuite/gcc.target/mips/mips.exp
  b48e1f7713d9377ade65ca3353e3aadd  gcc/testsuite/gcc.target/mips/mips16-attributes-2.c
  ec0fc4cda7ea3307bf321757f0f6ab8b  gcc/testsuite/gcc.target/mips/mips16-attributes-3.c
  6de1fc03c068d128a6bcc28a79510784  gcc/testsuite/gcc.target/mips/mips16-attributes-4.c
*************** ee4d5e0c7e7dda84b8625b02b91f79b1  gcc/te
*** 65593,65599 ****
  27a766579a6d69bf5da7215900f5c157  gcc/testsuite/gcc.target/mips/msa-fmadd-n64.c
  6ca28b1dbd353df15b9215ec8b8ac903  gcc/testsuite/gcc.target/mips/msa-fmadd-o32.c
  4aeaa4b74503d004f53a0c826972e294  gcc/testsuite/gcc.target/mips/msa-fp-cc.c
! d69531450baac3a8815a88bb1439a5e6  gcc/testsuite/gcc.target/mips/msa-insert-split.c
  742c80a0278cc84958d4742348970683  gcc/testsuite/gcc.target/mips/msa-minmax.c
  c191c84f397e09414133d234999270dd  gcc/testsuite/gcc.target/mips/msa.c
  adbe080c8559b5f5720e98bedc973083  gcc/testsuite/gcc.target/mips/msub-1.c
--- 69197,69203 ----
  27a766579a6d69bf5da7215900f5c157  gcc/testsuite/gcc.target/mips/msa-fmadd-n64.c
  6ca28b1dbd353df15b9215ec8b8ac903  gcc/testsuite/gcc.target/mips/msa-fmadd-o32.c
  4aeaa4b74503d004f53a0c826972e294  gcc/testsuite/gcc.target/mips/msa-fp-cc.c
! cb9bccd55db7c565623b074f64225c87  gcc/testsuite/gcc.target/mips/msa-insert-split.c
  742c80a0278cc84958d4742348970683  gcc/testsuite/gcc.target/mips/msa-minmax.c
  c191c84f397e09414133d234999270dd  gcc/testsuite/gcc.target/mips/msa.c
  adbe080c8559b5f5720e98bedc973083  gcc/testsuite/gcc.target/mips/msub-1.c
*************** a29b791eba1acee9f3fe915945db7f59  gcc/te
*** 65655,65661 ****
  b065faf19a4634555abdd33f461efb92  gcc/testsuite/gcc.target/mips/no-smartmips-ror-1.c
  f5ee27e15af3deb36973e10c2a40bc80  gcc/testsuite/gcc.target/mips/nor.c
  c4a3ad5c479a290a45d3452a012ca5c4  gcc/testsuite/gcc.target/mips/octeon-baddu-1.c
! 1b4c8154f17e5953d9dc49e37527c374  gcc/testsuite/gcc.target/mips/octeon-bbit-1.c
  41ff502c8369e795c24012cc6e83d2e2  gcc/testsuite/gcc.target/mips/octeon-bbit-2.c
  8a9a81e3f9aa9bce4ea81e38a8d40d4d  gcc/testsuite/gcc.target/mips/octeon-bbit-3.c
  31ce5ed49aeee967adb458a07c6875c8  gcc/testsuite/gcc.target/mips/octeon-cins-1.c
--- 69259,69265 ----
  b065faf19a4634555abdd33f461efb92  gcc/testsuite/gcc.target/mips/no-smartmips-ror-1.c
  f5ee27e15af3deb36973e10c2a40bc80  gcc/testsuite/gcc.target/mips/nor.c
  c4a3ad5c479a290a45d3452a012ca5c4  gcc/testsuite/gcc.target/mips/octeon-baddu-1.c
! 2aebf1c03e2666856485d41f0effe00d  gcc/testsuite/gcc.target/mips/octeon-bbit-1.c
  41ff502c8369e795c24012cc6e83d2e2  gcc/testsuite/gcc.target/mips/octeon-bbit-2.c
  8a9a81e3f9aa9bce4ea81e38a8d40d4d  gcc/testsuite/gcc.target/mips/octeon-bbit-3.c
  31ce5ed49aeee967adb458a07c6875c8  gcc/testsuite/gcc.target/mips/octeon-cins-1.c
*************** c9e6833f088e4d429d2fa8c06898b07a  gcc/te
*** 65689,65695 ****
--- 69293,69307 ----
  f5336c49398aed485e255dcb989f928a  gcc/testsuite/gcc.target/mips/oddspreg-5.c
  a5f1baacef31c6cc834cdb0292e3c22f  gcc/testsuite/gcc.target/mips/oddspreg-6.c
  47ff7729e9d1da80f59e7b9d122bfcb5  gcc/testsuite/gcc.target/mips/p5600-bonding.c
+ 83287ed96a260fb44080cfe4f8fd5165  gcc/testsuite/gcc.target/mips/pr100760.c
+ 244a2eb6a6206390d7982d9b3127950f  gcc/testsuite/gcc.target/mips/pr100761.c
+ 523e5c8744597fa62772cfdfcccf5f7e  gcc/testsuite/gcc.target/mips/pr100762.c
  1a8522667c45f8d602457c5370c63e00  gcc/testsuite/gcc.target/mips/pr101132.c
+ aed6bfb02a4a96aebb33898c065b118a  gcc/testsuite/gcc.target/mips/pr101922.c
+ caada899adaa25d988c300185e4be613  gcc/testsuite/gcc.target/mips/pr102024-1.c
+ f42f0801a44d06285cee316810947fb7  gcc/testsuite/gcc.target/mips/pr102024-2.c
+ 98311d9530bd225a74247a96e75fd525  gcc/testsuite/gcc.target/mips/pr102024-3.c
+ 4722bc5e1a9d0de7597bc138894a36d3  gcc/testsuite/gcc.target/mips/pr102024-4.c
  def76d72ccc4011afcc36f6a1668e0a5  gcc/testsuite/gcc.target/mips/pr26765.c
  a353694197fdff37f4981c3e510c5565  gcc/testsuite/gcc.target/mips/pr33256.c
  10ea730da40444dc72c89d6cde02220c  gcc/testsuite/gcc.target/mips/pr33635-1.c
*************** dad4d404aea0c78820d07b70cdb4a798  gcc/te
*** 65815,65820 ****
--- 69427,69434 ----
  4319fa17073adf2232d14816bdaed5e7  gcc/testsuite/gcc.target/mips/umips-swp-6.c
  3b1c9fc4c85fd0230ae29b589c67c5f8  gcc/testsuite/gcc.target/mips/umips-swp-7.c
  3ef81e2fdc408fca681222a7916f61a8  gcc/testsuite/gcc.target/mips/unaligned-1.c
+ 1e8fd5633e42fffb55aa6db0c1970ad2  gcc/testsuite/gcc.target/mips/unaligned-2.c
+ 0145f04e66a4240e0326621cfd7c7d90  gcc/testsuite/gcc.target/mips/unaligned-3.c
  02c4c8d0119ce2bc51f551d7c42c6af6  gcc/testsuite/gcc.target/mips/va-arg-1.c
  48f200c43fab7d67a5ee8d4fd8af91a5  gcc/testsuite/gcc.target/mips/vr-mult-1.c
  bdbe1b2e833e8da48eee27859726180e  gcc/testsuite/gcc.target/mips/vr-mult-2.c
*************** e8ccb7e6be9b4a5a6ee6f2e94fc961da  gcc/te
*** 65890,65896 ****
  27128b7463fae2c76e78b92abb781315  gcc/testsuite/gcc.target/msp430/mcpu-is-430xv2.c
  e7e107ec835c73626fadb6558d4cd699  gcc/testsuite/gcc.target/msp430/mlarge-pedwarns.c
  68a7d21ba011cdccee863c1757c35ab8  gcc/testsuite/gcc.target/msp430/mlarge-use-430-insn.c
! 72d3500e39500329f9bdc9cea24a6ca2  gcc/testsuite/gcc.target/msp430/msp430.exp
  9a9833f7a9115cf97f061eb7c068bbb7  gcc/testsuite/gcc.target/msp430/msp430.h
  e96192907f9fd6f32abdb4b2f8c43e7a  gcc/testsuite/gcc.target/msp430/msp430f-device-symbol.c
  4ff245af8aceb3c9dc91c199e31b7af0  gcc/testsuite/gcc.target/msp430/msp430i-device-symbol.c
--- 69504,69510 ----
  27128b7463fae2c76e78b92abb781315  gcc/testsuite/gcc.target/msp430/mcpu-is-430xv2.c
  e7e107ec835c73626fadb6558d4cd699  gcc/testsuite/gcc.target/msp430/mlarge-pedwarns.c
  68a7d21ba011cdccee863c1757c35ab8  gcc/testsuite/gcc.target/msp430/mlarge-use-430-insn.c
! 2e13d314f915d9571e73eaca30650ffa  gcc/testsuite/gcc.target/msp430/msp430.exp
  9a9833f7a9115cf97f061eb7c068bbb7  gcc/testsuite/gcc.target/msp430/msp430.h
  e96192907f9fd6f32abdb4b2f8c43e7a  gcc/testsuite/gcc.target/msp430/msp430f-device-symbol.c
  4ff245af8aceb3c9dc91c199e31b7af0  gcc/testsuite/gcc.target/msp430/msp430i-device-symbol.c
*************** a76e9bdd8dd768b474700a1307ac151c  gcc/te
*** 65939,65945 ****
  15f6a34c31bfccfa2f37f50fbedaa686  gcc/testsuite/gcc.target/nds32/builtin-mfusr-mtusr.c
  2a347ba3731aa3fa17024e865968c3b8  gcc/testsuite/gcc.target/nds32/builtin-setgie-dis.c
  ddaca84e0c321fa88f3cedb3bac1bae5  gcc/testsuite/gcc.target/nds32/builtin-setgie-en.c
! 8b054e998618281575d86d9a66f4ff3c  gcc/testsuite/gcc.target/nds32/nds32.exp
  267d1f508341cb93b318d1a249e34c19  gcc/testsuite/gcc.target/nios2/andci.c
  b6812a3a7ba3a86a41e0fdc982390c97  gcc/testsuite/gcc.target/nios2/biggot-1.c
  cdbcb03e5a340d5566b6e43e17797f5e  gcc/testsuite/gcc.target/nios2/biggot-2.c
--- 69553,69559 ----
  15f6a34c31bfccfa2f37f50fbedaa686  gcc/testsuite/gcc.target/nds32/builtin-mfusr-mtusr.c
  2a347ba3731aa3fa17024e865968c3b8  gcc/testsuite/gcc.target/nds32/builtin-setgie-dis.c
  ddaca84e0c321fa88f3cedb3bac1bae5  gcc/testsuite/gcc.target/nds32/builtin-setgie-en.c
! 70bb84e1a96ad719386e994b3d746c25  gcc/testsuite/gcc.target/nds32/nds32.exp
  267d1f508341cb93b318d1a249e34c19  gcc/testsuite/gcc.target/nios2/andci.c
  b6812a3a7ba3a86a41e0fdc982390c97  gcc/testsuite/gcc.target/nios2/biggot-1.c
  cdbcb03e5a340d5566b6e43e17797f5e  gcc/testsuite/gcc.target/nios2/biggot-2.c
*************** fb2b6777dea9143d94bb6c71c1aeb260  gcc/te
*** 65969,65974 ****
--- 69583,69592 ----
  89f19a98991c171e371af9cbd22b4dec  gcc/testsuite/gcc.target/nios2/custom-fp-conversion.c
  a0dd10ab578cdf25d05a635ff1708343  gcc/testsuite/gcc.target/nios2/custom-fp-double.c
  dfcc53a4dd661033342a737c5680e915  gcc/testsuite/gcc.target/nios2/custom-fp-float.c
+ 2b1dadf11cb96887df4695edd98a8e2b  gcc/testsuite/gcc.target/nios2/custom-fp-inline-1.c
+ 483b9611fcf05ab0ef23414dc7cc1133  gcc/testsuite/gcc.target/nios2/custom-fp-inline-2.c
+ ea492cc03568ea7ae8a87406e6d80b55  gcc/testsuite/gcc.target/nios2/custom-fp-inline-3.c
+ 8fde2156c0dc87518cc1be8fa9307b1c  gcc/testsuite/gcc.target/nios2/custom-fp-inline-4.c
  c2ce811326bbab4af9098e02382aa2bb  gcc/testsuite/gcc.target/nios2/custom-fp-lto.c
  59bdb66167a0e1ca7031f0ecf855ae40  gcc/testsuite/gcc.target/nios2/gpopt-all.c
  0d6822be5711b91f37264ec5fedfe4e6  gcc/testsuite/gcc.target/nios2/gpopt-data.c
*************** a87061df79ea1df98b37173a67798115  gcc/te
*** 66013,66019 ****
  6dbe531363c65af94c9d1cf19e943696  gcc/testsuite/gcc.target/nios2/nios2-wrctl-not-zero.c
  758d14c9a54781c627955ab573f81558  gcc/testsuite/gcc.target/nios2/nios2-wrctl-zero.c
  84c9378417e6cb2069a618430a13661c  gcc/testsuite/gcc.target/nios2/nios2-wrctl.c
! f22ee9e7bfcfb0b28b402a17874abcc0  gcc/testsuite/gcc.target/nios2/nios2.exp
  5738a626d052d93dbea37d4d0144d7b8  gcc/testsuite/gcc.target/nios2/pr87079-1.c
  efa2a47188c46b5407f22a2a066118c8  gcc/testsuite/gcc.target/nios2/pr87079-2.c
  b267f28fe7ecd61569a0c578100b7bea  gcc/testsuite/gcc.target/nios2/pr92499-1.c
--- 69631,69637 ----
  6dbe531363c65af94c9d1cf19e943696  gcc/testsuite/gcc.target/nios2/nios2-wrctl-not-zero.c
  758d14c9a54781c627955ab573f81558  gcc/testsuite/gcc.target/nios2/nios2-wrctl-zero.c
  84c9378417e6cb2069a618430a13661c  gcc/testsuite/gcc.target/nios2/nios2-wrctl.c
! 1aaa67675add62df0d1a4a1953f79eeb  gcc/testsuite/gcc.target/nios2/nios2.exp
  5738a626d052d93dbea37d4d0144d7b8  gcc/testsuite/gcc.target/nios2/pr87079-1.c
  efa2a47188c46b5407f22a2a066118c8  gcc/testsuite/gcc.target/nios2/pr87079-2.c
  b267f28fe7ecd61569a0c578100b7bea  gcc/testsuite/gcc.target/nios2/pr92499-1.c
*************** a130181e569520d8ec50ce126d257deb  gcc/te
*** 66041,66054 ****
  554eaa0ba4dd8f51e8e4848c41d73e9e  gcc/testsuite/gcc.target/nvptx/abi-vect-arg.c
  da5463224c767fe4525ff97ea55cf59b  gcc/testsuite/gcc.target/nvptx/abi-vect-ret.c
  1c2ca7f6a110510e1940171c4ef1b012  gcc/testsuite/gcc.target/nvptx/abort.c
  9a34d9a28d10c98b31d63c9cf7a875c9  gcc/testsuite/gcc.target/nvptx/ary-init.c
! 0b642c5c4d6e3d304e2646774c484f47  gcc/testsuite/gcc.target/nvptx/atomic_fetch-1.c
! 18315b3555b3e28a1fd97f4d21e6c15d  gcc/testsuite/gcc.target/nvptx/atomic_fetch-2.c
  246cf8f97d24ca211fbf44806e414291  gcc/testsuite/gcc.target/nvptx/cvt.c
  cf91ca14cafbda331f4d85cb59c361c2  gcc/testsuite/gcc.target/nvptx/decl-init.c
  ce8d3cdf413d2ecd740f727aa605f41d  gcc/testsuite/gcc.target/nvptx/decl-shared-init.c
  ee7a219079a9befc9911075c0ddf6ec4  gcc/testsuite/gcc.target/nvptx/decl-shared.c
  b5bc7203f9caebe44d835739cd6150f6  gcc/testsuite/gcc.target/nvptx/decl.c
  0da16581eda6b5b973a42a8e4f0906da  gcc/testsuite/gcc.target/nvptx/ia64-sync-1.c
  0913e46988488b317c1fbe1c2e8c388e  gcc/testsuite/gcc.target/nvptx/ia64-sync-2.c
  4081396374a4cc18e8e00fecf4129b00  gcc/testsuite/gcc.target/nvptx/ia64-sync-3.c
--- 69659,69701 ----
  554eaa0ba4dd8f51e8e4848c41d73e9e  gcc/testsuite/gcc.target/nvptx/abi-vect-arg.c
  da5463224c767fe4525ff97ea55cf59b  gcc/testsuite/gcc.target/nvptx/abi-vect-ret.c
  1c2ca7f6a110510e1940171c4ef1b012  gcc/testsuite/gcc.target/nvptx/abort.c
+ d53d41dd57e5dd1af02004737e6e8340  gcc/testsuite/gcc.target/nvptx/alias-1.c
+ e824d5ced8c9c8381803fd74bb215f4b  gcc/testsuite/gcc.target/nvptx/alias-2.c
+ 242e9f2d5741ae9a1fb82b89dedf18a0  gcc/testsuite/gcc.target/nvptx/alias-3.c
+ e6575a5187ea5b487b70c390b175ed81  gcc/testsuite/gcc.target/nvptx/alias-4.c
  9a34d9a28d10c98b31d63c9cf7a875c9  gcc/testsuite/gcc.target/nvptx/ary-init.c
! c238554b3e741519dc76534c85905a5c  gcc/testsuite/gcc.target/nvptx/atomic-bit-bucket-dest.c
! 580b43dff8a62c1e469128dbaa6306d8  gcc/testsuite/gcc.target/nvptx/atomic-exchange-1.c
! 704a791998378587dd9ab94a378c0bf2  gcc/testsuite/gcc.target/nvptx/atomic-exchange-2.c
! f5ac557131d6b54f4566e9bf86edd6d9  gcc/testsuite/gcc.target/nvptx/atomic-exchange-3.c
! e1d08496fe3c92d09d8fee920dd9c3e7  gcc/testsuite/gcc.target/nvptx/atomic-exchange-4.c
! 29d109d2b7f71f5bcd93fcd0ded5e475  gcc/testsuite/gcc.target/nvptx/atomic-store-1.c
! c07aecbeb557aa951a4043489efa49ec  gcc/testsuite/gcc.target/nvptx/atomic-store-2.c
! b4d6cbbe47ae14421b89a3988fd7dce5  gcc/testsuite/gcc.target/nvptx/atomic-store-3.c
! 63b9d478460b3e4862dad782a418a1dc  gcc/testsuite/gcc.target/nvptx/atomic_fetch-1.c
! 166b1efca58b7ebef1cbee502409936f  gcc/testsuite/gcc.target/nvptx/atomic_fetch-2.c
! f554ef897d4cddb8f5cfcb8c1cf7a6dc  gcc/testsuite/gcc.target/nvptx/bool-1.c
! aa5afc822c9af22a9c54b48b6b4a92c9  gcc/testsuite/gcc.target/nvptx/bool-2.c
! 67ca8f2b077a70a24e00acde350bc86e  gcc/testsuite/gcc.target/nvptx/bool-3.c
! 58c516f8f71a6d125ca885364f4c28b5  gcc/testsuite/gcc.target/nvptx/bool-4.c
! 7256fb37dbe73de95bd0a735ced7ae4d  gcc/testsuite/gcc.target/nvptx/cnot-1.c
  246cf8f97d24ca211fbf44806e414291  gcc/testsuite/gcc.target/nvptx/cvt.c
  cf91ca14cafbda331f4d85cb59c361c2  gcc/testsuite/gcc.target/nvptx/decl-init.c
  ce8d3cdf413d2ecd740f727aa605f41d  gcc/testsuite/gcc.target/nvptx/decl-shared-init.c
  ee7a219079a9befc9911075c0ddf6ec4  gcc/testsuite/gcc.target/nvptx/decl-shared.c
  b5bc7203f9caebe44d835739cd6150f6  gcc/testsuite/gcc.target/nvptx/decl.c
+ 9d19b323002165b68063574fca5ea81a  gcc/testsuite/gcc.target/nvptx/exttrunc-1.c
+ 29a8ec74dc5f5b526b9e99fbae0bf344  gcc/testsuite/gcc.target/nvptx/exttrunc-2.c
+ a09dabbf9cb73480a5eff957ccdda3b4  gcc/testsuite/gcc.target/nvptx/exttrunc-3.c
+ be48aecf8f59bb8608c1ece6533b5e02  gcc/testsuite/gcc.target/nvptx/exttrunc-4.c
+ bb01b86a26eb6e2f2134c2b3d41d5c63  gcc/testsuite/gcc.target/nvptx/exttrunc-5.c
+ 8bbaa9f9cd262445dfbbb695539b1381  gcc/testsuite/gcc.target/nvptx/exttrunc-6.c
+ 17036875b43d1777f53137ca42cd8e1a  gcc/testsuite/gcc.target/nvptx/float16-1.c
+ 71cc478d4f40fcdd410332aa8f4a8425  gcc/testsuite/gcc.target/nvptx/float16-2.c
+ 13722fa6afcb5c7949b13a2199690030  gcc/testsuite/gcc.target/nvptx/float16-3.c
+ 6556d174ab9cf09ef8123634bff02a27  gcc/testsuite/gcc.target/nvptx/float16-4.c
+ 0b9376930e3f72bdf1003a8b89bdd889  gcc/testsuite/gcc.target/nvptx/float16-5.c
+ c353c08b9b8131bdc2824ec9f00738a6  gcc/testsuite/gcc.target/nvptx/float16-6.c
  0da16581eda6b5b973a42a8e4f0906da  gcc/testsuite/gcc.target/nvptx/ia64-sync-1.c
  0913e46988488b317c1fbe1c2e8c388e  gcc/testsuite/gcc.target/nvptx/ia64-sync-2.c
  4081396374a4cc18e8e00fecf4129b00  gcc/testsuite/gcc.target/nvptx/ia64-sync-3.c
*************** d02501ebe3bca7d0c11fa4d5d253ee7f  gcc/te
*** 66056,66065 ****
  2603f535e125be3ab18c3e06e7969e0b  gcc/testsuite/gcc.target/nvptx/ia64-sync-5.c
  dd4edeaa5bae2549fa0790bb949f2a76  gcc/testsuite/gcc.target/nvptx/indirect_call.c
  3d0ce3ed482e5d4711c9c7d3499efa2a  gcc/testsuite/gcc.target/nvptx/int128.c
  11c15ebae0aa72ac866acc469a870111  gcc/testsuite/gcc.target/nvptx/label-values.c
  35a1b298a71dc900deb20b7aee0269e8  gcc/testsuite/gcc.target/nvptx/mul-hi.c
  46842942450b2228182a8a02cdfd0bad  gcc/testsuite/gcc.target/nvptx/mul-wide.c
! f3708e6dc9d403322f68a780306b6112  gcc/testsuite/gcc.target/nvptx/nvptx.exp
  97135e11860bc0316757d03f9f9eab37  gcc/testsuite/gcc.target/nvptx/patchable_function_entry-default.c
  a935421e20c83d40eb47ae736d5b5859  gcc/testsuite/gcc.target/nvptx/popc-1.c
  c8bd1e5a7d975c41c97fb76577695e6e  gcc/testsuite/gcc.target/nvptx/popc-2.c
--- 69703,69719 ----
  2603f535e125be3ab18c3e06e7969e0b  gcc/testsuite/gcc.target/nvptx/ia64-sync-5.c
  dd4edeaa5bae2549fa0790bb949f2a76  gcc/testsuite/gcc.target/nvptx/indirect_call.c
  3d0ce3ed482e5d4711c9c7d3499efa2a  gcc/testsuite/gcc.target/nvptx/int128.c
+ 20d11a09643f7f9363cb6b947031318a  gcc/testsuite/gcc.target/nvptx/isinf.c
  11c15ebae0aa72ac866acc469a870111  gcc/testsuite/gcc.target/nvptx/label-values.c
+ 64f58c700c56137ff941121fa6d74674  gcc/testsuite/gcc.target/nvptx/main.c
+ 78d835756305b2d6b6d710b6a5eaf496  gcc/testsuite/gcc.target/nvptx/march-map.c
+ 448d8f6ecbad44a789a6041a2b8db204  gcc/testsuite/gcc.target/nvptx/march.c
  35a1b298a71dc900deb20b7aee0269e8  gcc/testsuite/gcc.target/nvptx/mul-hi.c
+ fb0e44378720162460683cbfd0dbdc52  gcc/testsuite/gcc.target/nvptx/mul-hi64.c
  46842942450b2228182a8a02cdfd0bad  gcc/testsuite/gcc.target/nvptx/mul-wide.c
! 26682b7c6e1dc875ec8e2effc028a378  gcc/testsuite/gcc.target/nvptx/mul-wide64.c
! 17c39d8f0e043cf2fa692089cf8498c7  gcc/testsuite/gcc.target/nvptx/neg-selp.c
! c223160afe61ca0bac348c1d25a7264a  gcc/testsuite/gcc.target/nvptx/nvptx.exp
  97135e11860bc0316757d03f9f9eab37  gcc/testsuite/gcc.target/nvptx/patchable_function_entry-default.c
  a935421e20c83d40eb47ae736d5b5859  gcc/testsuite/gcc.target/nvptx/popc-1.c
  c8bd1e5a7d975c41c97fb76577695e6e  gcc/testsuite/gcc.target/nvptx/popc-2.c
*************** f00794180613c46aff512b5d000d751e  gcc/te
*** 66067,66083 ****
--- 69721,69758 ----
  ee10a595a6c816802a83d13637d1f4ce  gcc/testsuite/gcc.target/nvptx/pr85056.c
  85d991e87550d6e0750de2b4f0ef4e8d  gcc/testsuite/gcc.target/nvptx/pr85056a.c
  0851aa76429cdec3f332dcfc7d32f6f4  gcc/testsuite/gcc.target/nvptx/proto-1.c
+ b2a3c52ebd060d53cf12db9f9d0b2863  gcc/testsuite/gcc.target/nvptx/ptx31.c
+ 08b442b6399905bbecd5e6f0821d0cd1  gcc/testsuite/gcc.target/nvptx/ptx60.c
+ 8e82854ea4255a4063bbb7eec6c29620  gcc/testsuite/gcc.target/nvptx/ptx63.c
+ 354d2bc7afd3ed7274951bb04061b7b8  gcc/testsuite/gcc.target/nvptx/ptx70.c
  825b4ce2e5e98545b5117326450c5661  gcc/testsuite/gcc.target/nvptx/recip-1.c
+ e3f16d82baedd323e96a06b6d386670d  gcc/testsuite/gcc.target/nvptx/rotate-run.c
+ abab2617eaa9eab633d53f74b7bf714c  gcc/testsuite/gcc.target/nvptx/rotate.c
  540b209721087ca62d31666d0977f821  gcc/testsuite/gcc.target/nvptx/shift16.c
  b6dd5ea026f06ffb6e299fe2a4b5b9a0  gcc/testsuite/gcc.target/nvptx/sincos.c
  a8dae85200a181f350c733049b638786  gcc/testsuite/gcc.target/nvptx/slp-2-run.c
  6c880ba8892ad33b326cb50bbafd9956  gcc/testsuite/gcc.target/nvptx/slp-2.c
  39b8229b6c09b6bcb85331a3fbc2c37b  gcc/testsuite/gcc.target/nvptx/slp-run.c
  44ad908a69e43269647b72a114715eda  gcc/testsuite/gcc.target/nvptx/slp.c
+ 8d132719a5e0d3256cdc773c92512799  gcc/testsuite/gcc.target/nvptx/sm30.c
+ e935cc2e1a689880eee7025ebab06303  gcc/testsuite/gcc.target/nvptx/sm35.c
+ df061396f032e1f451fd4dfc7a6404a0  gcc/testsuite/gcc.target/nvptx/sm53.c
+ 8725f7abff77211ad05c91c5c17a3969  gcc/testsuite/gcc.target/nvptx/sm70.c
+ ff78de249538bff916f56e529c1893ee  gcc/testsuite/gcc.target/nvptx/sm75.c
+ eba0f626a0823d4e61c74de2ec8e557e  gcc/testsuite/gcc.target/nvptx/sm80.c
+ b1e0abb4d1e3c9e581f362604fbc686a  gcc/testsuite/gcc.target/nvptx/softstack-2.c
  741e8b3981b97dba04d2d0ab288e2aca  gcc/testsuite/gcc.target/nvptx/softstack.c
+ b2acbb90d6317f1e8bf4dc3fc987babf  gcc/testsuite/gcc.target/nvptx/stack-atomics-run.c
+ c6f21e2cf733fdeab9306fc60a660eda  gcc/testsuite/gcc.target/nvptx/tanh-1.c
  b229365c916139aa5854fd2d40028c0a  gcc/testsuite/gcc.target/nvptx/trailing-init.c
  4eabd19b0b24f9cd0fd1e9c5a17f78db  gcc/testsuite/gcc.target/nvptx/umul-hi.c
+ 8a089cdf7ca382f02b0f569bb674dede  gcc/testsuite/gcc.target/nvptx/umul-hi64.c
  9fc92de803cb585cf0c64307747e0620  gcc/testsuite/gcc.target/nvptx/umul-wide.c
+ 55021891bc9f1530f0b9c8b383e37642  gcc/testsuite/gcc.target/nvptx/umul-wide64.c
+ ce6ca7927907f0717ab7b6174a3271bf  gcc/testsuite/gcc.target/nvptx/uniform-simt-1.c
+ c7c8349f4a17d1af0937418e4a2688cb  gcc/testsuite/gcc.target/nvptx/uniform-simt-2.c
+ 19f922defbecb458559adde8f0607613  gcc/testsuite/gcc.target/nvptx/uniform-simt-3.c
+ 4d745b5ec3f9df410382dd18e3ea1977  gcc/testsuite/gcc.target/nvptx/uniform-simt-4.c
  c65e9b178b981b800a00ac82aa9741cf  gcc/testsuite/gcc.target/nvptx/uninit-decl.c
  0c3dd4b3664aa3f42dca7bc49ab4dc53  gcc/testsuite/gcc.target/nvptx/unsigned-cmp.c
  b7ab80fc6f20db555ea318163f54bb1c  gcc/testsuite/gcc.target/nvptx/v2di.c
*************** d59f1ded63c010f7c70d8914ff035369  gcc/te
*** 66095,66101 ****
  9e49229cfb3a4570a9259ea659772866  gcc/testsuite/gcc.target/or1k/cmov-2.c
  6bd14b0136c11119eb7b862a377f7a1d  gcc/testsuite/gcc.target/or1k/div-mul-1.c
  7fd1bcd610e82d1586aecf6b07e5cabb  gcc/testsuite/gcc.target/or1k/div-mul-2.c
! 2a1f55913e086ff2696ca56afe918fa9  gcc/testsuite/gcc.target/or1k/or1k.exp
  26536fcae441d001c2a53c21abf56757  gcc/testsuite/gcc.target/or1k/return-1.c
  cbc20b748446a09b12e149a14d1dc326  gcc/testsuite/gcc.target/or1k/return-2.c
  30571d600ad8e2c620b4c88dd60b22ab  gcc/testsuite/gcc.target/or1k/return-3.c
--- 69770,69776 ----
  9e49229cfb3a4570a9259ea659772866  gcc/testsuite/gcc.target/or1k/cmov-2.c
  6bd14b0136c11119eb7b862a377f7a1d  gcc/testsuite/gcc.target/or1k/div-mul-1.c
  7fd1bcd610e82d1586aecf6b07e5cabb  gcc/testsuite/gcc.target/or1k/div-mul-2.c
! baff6ed7dab25fda19ba92368a28221c  gcc/testsuite/gcc.target/or1k/or1k.exp
  26536fcae441d001c2a53c21abf56757  gcc/testsuite/gcc.target/or1k/return-1.c
  cbc20b748446a09b12e149a14d1dc326  gcc/testsuite/gcc.target/or1k/return-2.c
  30571d600ad8e2c620b4c88dd60b22ab  gcc/testsuite/gcc.target/or1k/return-3.c
*************** d5a3520388a5d684298f2ecede66ab11  gcc/te
*** 66256,66262 ****
  3a64fbfa795ceb21229f28888aa88ca4  gcc/testsuite/gcc.target/powerpc/bcd-2.c
  17645a2fd8d5ba2d2bc6c718c249ccf2  gcc/testsuite/gcc.target/powerpc/bcd-3.c
  fc549969b0a6cd788bf8da347fdb8b8a  gcc/testsuite/gcc.target/powerpc/bcd-4.c
! 248bd5d438a930c88b2f62e084d9f41e  gcc/testsuite/gcc.target/powerpc/bfp/bfp.exp
  a9acf66df4a99620b48a370fbf90f1e9  gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-eq-0.c
  6b805ac8ccc140528c05fe8211e24791  gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-eq-1.c
  9edcc760a84627d628e437142f98fe00  gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-eq-2.c
--- 69931,69937 ----
  3a64fbfa795ceb21229f28888aa88ca4  gcc/testsuite/gcc.target/powerpc/bcd-2.c
  17645a2fd8d5ba2d2bc6c718c249ccf2  gcc/testsuite/gcc.target/powerpc/bcd-3.c
  fc549969b0a6cd788bf8da347fdb8b8a  gcc/testsuite/gcc.target/powerpc/bcd-4.c
! 3a4c1fe0533769c68de86c58f2d8cda4  gcc/testsuite/gcc.target/powerpc/bfp/bfp.exp
  a9acf66df4a99620b48a370fbf90f1e9  gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-eq-0.c
  6b805ac8ccc140528c05fe8211e24791  gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-eq-1.c
  9edcc760a84627d628e437142f98fe00  gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-eq-2.c
*************** a21a413c4573e7293cec10e8570e81dc  gcc/te
*** 66279,66336 ****
  a395db7849f7521757d13b7076de3bf4  gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-unordered-4.c
  88c6d01600050991b6c9470a87d97a42  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-0.c
  b19c643f79afa7045f1c13c06f8bf79b  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-1.c
! b748aa512a91c82d4770769a58371dad  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c
  dffafa22f1df544d5e027908706588fa  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-3.c
  3746290a78c6f678cb2f7d730d0d55eb  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-4.c
! 920f018d79814fde1dba2262fabfc93e  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-5.c
  f01634038355cb537ceea155776e32cc  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-6.c
  47d9d99579f3f793b40d85f161d1b909  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-7.c
  d04a82a77cbaac2a88d99b239ec8b19f  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-0.c
  b7e741409f5404bb12984bcd938dd8c5  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-1.c
! 917431183cbf9798e4249ce267d139cd  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-2.c
  7c096e51f3cca308670cd81f18e363df  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-3.c
  170b5bd2187b5b2617cfcc8b9386c2c4  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-4.c
! 662b59207e281451d1fefd42c453a04a  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-5.c
  fcc0581c65d5d89ec74b7586f206397e  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-6.c
  02ba0234cb987da71cba3c0fa7d5e281  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-7.c
  74ec5cc425112c2d08138803668face6  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-0.c
  8a27ff48cf2c5dbeaa2772876b5ffe93  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-1.c
  daa4ee7cbab5fbc1e59a3199b03078d1  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-10.c
! 5c1d8c216e74fe8015423cc24313ee88  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-11.c
  dbb13c6d061239680d968a118f3136ea  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-12.c
  0fa8670e32f9248c271e7ae4c38f973b  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-13.c
  0e752a1b501c034b208c1e3d49f06616  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-14.c
  08349a2992fbc7e6aad40d5b73773654  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-15.c
! ccd7c748134c13348ca46712668c1eed  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-2.c
  ea53c38e71bb50f3ce00b3349fec4bce  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-3.c
  c3789ea6ee8a22a62a6099095c7d5652  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-4.c
! 97a355378718dffce8ccd7031899ae1c  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-5.c
  3b063d1b88ef22302ebeb4f096689af3  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-6.c
  4f2725559c58fd41224b2ec41e032304  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-7.c
! f6ff00f2194dcad471beb948df28c663  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-8.c
  17ae124803b9ac32cc90dd5773954bc8  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-9.c
  e6064234e1ff945f70aea710267ad0fd  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-0.c
  3aafb56b77b9d6a86fe4f40e1a8aa4d5  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-1.c
! 2ae634089999d6c920ed971de4bb4387  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-10.c
  c1ae2fed6493b53ca839ee1492f670df  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-11.c
  7e8619805bfaa018672ad9d3740be480  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-12.c
  8b151022a0fe9b76fc734fa235c42dd5  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-13.c
  b778133ecfccc947d6107fe65169e686  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-14.c
  22ac5c058882b03b252aed43414023c6  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-15.c
! ebbcc3ef7fd001fee8db11cdbd47d0f5  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-2.c
! 5d183f35bc572ba086e80e0173f0027d  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-3.c
! a33688ab0f5aa7ef16151691c547f7af  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-4.c
! 62dc9ee0b069c933450dfc70b09db34c  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-5.c
  6188d4e90f6138c80c8752c022c22001  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-6.c
  00507faf2ee80a293d6895b158e063f1  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-7.c
  af308b2dda9f4a44a9114ae3fd629f46  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-8.c
! e00c94bab91d307f7a3c42704ae266e7  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-9.c
  92e395c65ac9d07c36da30c12a277405  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-0.c
  e166645e764091f36de5e380ed9f8bed  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-1.c
! 555f1a89fd984b526e46fc6a34e3d18c  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
! bd767b817fdf5086a46910dc878683c4  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
  f89867d63a217f084e9502e63d906695  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-4.c
! a3b905a50bd9a3f0964954bd2cfc5e96  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
  a17c0089fe2acabf4baa27c99b4c3f90  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-6.c
  5af1cb0aa09a5184a2286fbdabe56fcd  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-7.c
  2ac7a6e60efeadda0bbe3edf87af53fa  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-8.c
--- 69954,70011 ----
  a395db7849f7521757d13b7076de3bf4  gcc/testsuite/gcc.target/powerpc/bfp/scalar-cmp-exp-unordered-4.c
  88c6d01600050991b6c9470a87d97a42  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-0.c
  b19c643f79afa7045f1c13c06f8bf79b  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-1.c
! 227fb773d7e9ab4b64b8d13a6c67e4c2  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c
  dffafa22f1df544d5e027908706588fa  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-3.c
  3746290a78c6f678cb2f7d730d0d55eb  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-4.c
! 9b2c130c9f05f587fb0b619f2dbae246  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-5.c
  f01634038355cb537ceea155776e32cc  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-6.c
  47d9d99579f3f793b40d85f161d1b909  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-7.c
  d04a82a77cbaac2a88d99b239ec8b19f  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-0.c
  b7e741409f5404bb12984bcd938dd8c5  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-1.c
! b7ff2c7b8e9d1aa5b9d377547c13ba6a  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-2.c
  7c096e51f3cca308670cd81f18e363df  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-3.c
  170b5bd2187b5b2617cfcc8b9386c2c4  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-4.c
! 5c7201adda42fa1fe1592257f3156b38  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-5.c
  fcc0581c65d5d89ec74b7586f206397e  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-6.c
  02ba0234cb987da71cba3c0fa7d5e281  gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-7.c
  74ec5cc425112c2d08138803668face6  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-0.c
  8a27ff48cf2c5dbeaa2772876b5ffe93  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-1.c
  daa4ee7cbab5fbc1e59a3199b03078d1  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-10.c
! d1692a1d94ace4d4bc0c8fe447f186f7  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-11.c
  dbb13c6d061239680d968a118f3136ea  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-12.c
  0fa8670e32f9248c271e7ae4c38f973b  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-13.c
  0e752a1b501c034b208c1e3d49f06616  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-14.c
  08349a2992fbc7e6aad40d5b73773654  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-15.c
! faf6a0b6248e2e9fdaa9cf468ee23738  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-2.c
  ea53c38e71bb50f3ce00b3349fec4bce  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-3.c
  c3789ea6ee8a22a62a6099095c7d5652  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-4.c
! 01f406bdf147a0ff994171a5ed93c653  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-5.c
  3b063d1b88ef22302ebeb4f096689af3  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-6.c
  4f2725559c58fd41224b2ec41e032304  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-7.c
! 2200e993321e0def8816b93756f38527  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-8.c
  17ae124803b9ac32cc90dd5773954bc8  gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-9.c
  e6064234e1ff945f70aea710267ad0fd  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-0.c
  3aafb56b77b9d6a86fe4f40e1a8aa4d5  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-1.c
! d28ee61836b7ad032f0ca8aac9877f6b  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-10.c
  c1ae2fed6493b53ca839ee1492f670df  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-11.c
  7e8619805bfaa018672ad9d3740be480  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-12.c
  8b151022a0fe9b76fc734fa235c42dd5  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-13.c
  b778133ecfccc947d6107fe65169e686  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-14.c
  22ac5c058882b03b252aed43414023c6  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-15.c
! f05f903cb210020b46710f6d136404c1  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-2.c
! 6a54ac165bd51ab56c830f2132c8aa52  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-3.c
! f4c31ce75c2db5935d3bd54b3b434540  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-4.c
! e8fbde64dd69e7b47ded23c559aba5c2  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-5.c
  6188d4e90f6138c80c8752c022c22001  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-6.c
  00507faf2ee80a293d6895b158e063f1  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-7.c
  af308b2dda9f4a44a9114ae3fd629f46  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-8.c
! b1bc252405b7f4917852753f4bdc4b13  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-data-class-9.c
  92e395c65ac9d07c36da30c12a277405  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-0.c
  e166645e764091f36de5e380ed9f8bed  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-1.c
! 6972b1387c027b8d834a562241ba336e  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-2.c
! 0c7adc27c252bf3b7461611a48f35e5e  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-3.c
  f89867d63a217f084e9502e63d906695  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-4.c
! f56af8c646c37c09819af6d713463c1b  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-5.c
  a17c0089fe2acabf4baa27c99b4c3f90  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-6.c
  5af1cb0aa09a5184a2286fbdabe56fcd  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-7.c
  2ac7a6e60efeadda0bbe3edf87af53fa  gcc/testsuite/gcc.target/powerpc/bfp/scalar-test-neg-8.c
*************** a3a73209a708292ebdf7b4371af6c388  gcc/te
*** 66362,66371 ****
  21e14b3148fda76d1097bda544c98439  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-1.c
  323312a08a765b1e6e91b9f465ac1f90  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-2.c
  ac48998d4de3e7355105041a85fb9ff4  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-3.c
! 38b60ecc153fb338e79fcea5235f3792  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-4.c
! daf7d3e5a496bd96ea1e37a1027861ab  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-5.c
! a4b4e6485ce3fd2c6f29b83e4d22cef3  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-6.c
! e12b75f2d84f3b0580860f2f7e9a19da  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-7.c
  f6ef2287686b07dd4ad99d21b7aabe54  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-8.c
  3f6c1f233d0fb89255dabcc4d15475c7  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-9.c
  d71e4fffd67fe9a02068065c31f40a8c  gcc/testsuite/gcc.target/powerpc/block-move-1.c
--- 70037,70046 ----
  21e14b3148fda76d1097bda544c98439  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-1.c
  323312a08a765b1e6e91b9f465ac1f90  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-2.c
  ac48998d4de3e7355105041a85fb9ff4  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-3.c
! bb4b7ac98b67eb69dfafdba7d0001209  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-4.c
! 88a56a3ea876072be820f4330d504f9a  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-5.c
! d2e524b382b2181ac5438a1200c31c09  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-6.c
! 8a575518d085a37695caa4f3694a712e  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-7.c
  f6ef2287686b07dd4ad99d21b7aabe54  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-8.c
  3f6c1f233d0fb89255dabcc4d15475c7  gcc/testsuite/gcc.target/powerpc/bfp/vec-test-data-class-9.c
  d71e4fffd67fe9a02068065c31f40a8c  gcc/testsuite/gcc.target/powerpc/block-move-1.c
*************** d98190bc7003de5846e7f794a9f2b8ab  gcc/te
*** 66410,66416 ****
  438f4e658462567e81a685ced3c5a415  gcc/testsuite/gcc.target/powerpc/bool3.h
  3493bdc771b9bce44627e8e680b7ec82  gcc/testsuite/gcc.target/powerpc/bswap-brd.c
  13eb8866848667a4deb9edc6aa321b7a  gcc/testsuite/gcc.target/powerpc/bswap-brh.c
! 5699e52d1e8829cb7c7861195d1cc017  gcc/testsuite/gcc.target/powerpc/bswap-brw.c
  5f5298f748bcfaf7c81d750d7b190615  gcc/testsuite/gcc.target/powerpc/bswap-run.c
  8c821490f5d0cf5f71e7cdc07e3c700f  gcc/testsuite/gcc.target/powerpc/bswap16.c
  3fcf5bd2b192fb87864426edc98d3d3c  gcc/testsuite/gcc.target/powerpc/bswap32.c
--- 70085,70091 ----
  438f4e658462567e81a685ced3c5a415  gcc/testsuite/gcc.target/powerpc/bool3.h
  3493bdc771b9bce44627e8e680b7ec82  gcc/testsuite/gcc.target/powerpc/bswap-brd.c
  13eb8866848667a4deb9edc6aa321b7a  gcc/testsuite/gcc.target/powerpc/bswap-brh.c
! ebdd5d41e115bd9fb63175dee376d2eb  gcc/testsuite/gcc.target/powerpc/bswap-brw.c
  5f5298f748bcfaf7c81d750d7b190615  gcc/testsuite/gcc.target/powerpc/bswap-run.c
  8c821490f5d0cf5f71e7cdc07e3c700f  gcc/testsuite/gcc.target/powerpc/bswap16.c
  3fcf5bd2b192fb87864426edc98d3d3c  gcc/testsuite/gcc.target/powerpc/bswap32.c
*************** c5b0f341a380052e089b6ab1ff9d3dd6  gcc/te
*** 66418,66429 ****
  28a093e56a3b3b438802b7510941c3d7  gcc/testsuite/gcc.target/powerpc/bswap64-2.c
  c5679080166f48cc9f2b7e07db1146c3  gcc/testsuite/gcc.target/powerpc/bswap64-3.c
  c2bf41ae8ff38b2785378ecfa7daa3fd  gcc/testsuite/gcc.target/powerpc/bswap64-4.c
  660ec5b28bd11c4d01e9d4d45e4670fa  gcc/testsuite/gcc.target/powerpc/builtin-vec-sums-be-int.c
! 2185aeb234f1817a5540c86fb962da8a  gcc/testsuite/gcc.target/powerpc/builtins-1-be-folded.c
! 01e2e658b164ab1133e268dea77a673b  gcc/testsuite/gcc.target/powerpc/builtins-1-le-folded.c
  3630b13056a134afac9072861304e1b7  gcc/testsuite/gcc.target/powerpc/builtins-1-p10-runnable.c
  f2df3bae9f5a0120e073ffd853edc95d  gcc/testsuite/gcc.target/powerpc/builtins-1-p9-runnable.c
! 868393d0380f405efd529f1e2fe367c3  gcc/testsuite/gcc.target/powerpc/builtins-1.c
  ec989a2f75efdf3d6a18fdd8ae6ce35b  gcc/testsuite/gcc.target/powerpc/builtins-1.fold.h
  8e9c179d065241f1abc6396d9fe644c2  gcc/testsuite/gcc.target/powerpc/builtins-2-p9-runnable.c
  bf30b9cab89c9a31f84d84c53b7aa123  gcc/testsuite/gcc.target/powerpc/builtins-2.c
--- 70093,70107 ----
  28a093e56a3b3b438802b7510941c3d7  gcc/testsuite/gcc.target/powerpc/bswap64-2.c
  c5679080166f48cc9f2b7e07db1146c3  gcc/testsuite/gcc.target/powerpc/bswap64-3.c
  c2bf41ae8ff38b2785378ecfa7daa3fd  gcc/testsuite/gcc.target/powerpc/bswap64-4.c
+ f1ea877f35ca466bb967858a715d4f6c  gcc/testsuite/gcc.target/powerpc/builtin-feclearexcept-feraiseexcept-1.c
+ c02928696f09c7fc9c99174083ecb49c  gcc/testsuite/gcc.target/powerpc/builtin-feclearexcept-feraiseexcept-2.c
+ 04b3fc34bfccb1856530015004e53b0f  gcc/testsuite/gcc.target/powerpc/builtin-fegetround.c
  660ec5b28bd11c4d01e9d4d45e4670fa  gcc/testsuite/gcc.target/powerpc/builtin-vec-sums-be-int.c
! a8f9adaf01b9c4605ccf3a2b91395d9a  gcc/testsuite/gcc.target/powerpc/builtins-1-be-folded.c
! d7a191d70b9b9996b4b19f79964cf6c2  gcc/testsuite/gcc.target/powerpc/builtins-1-le-folded.c
  3630b13056a134afac9072861304e1b7  gcc/testsuite/gcc.target/powerpc/builtins-1-p10-runnable.c
  f2df3bae9f5a0120e073ffd853edc95d  gcc/testsuite/gcc.target/powerpc/builtins-1-p9-runnable.c
! b2a3592bc01a8390ab0bcd360e5bfb80  gcc/testsuite/gcc.target/powerpc/builtins-1.c
  ec989a2f75efdf3d6a18fdd8ae6ce35b  gcc/testsuite/gcc.target/powerpc/builtins-1.fold.h
  8e9c179d065241f1abc6396d9fe644c2  gcc/testsuite/gcc.target/powerpc/builtins-2-p9-runnable.c
  bf30b9cab89c9a31f84d84c53b7aa123  gcc/testsuite/gcc.target/powerpc/builtins-2.c
*************** dc2d3d2859a886302c3ee70084f25059  gcc/te
*** 66437,66445 ****
  8a1bb8ec52829a6ea7f9ee07a431c165  gcc/testsuite/gcc.target/powerpc/builtins-4-int128-runnable.c
  50bb9ae2f77e2ee92fa420b15a5d1d93  gcc/testsuite/gcc.target/powerpc/builtins-4-p9-runnable.c
  229b92af5d708ec95906efd39c078624  gcc/testsuite/gcc.target/powerpc/builtins-4-runnable.c
! fab34e8e6c94c195aa4fec4b849c85e8  gcc/testsuite/gcc.target/powerpc/builtins-4.c
  13e0b4808cc07b46cac8e9d91447da3c  gcc/testsuite/gcc.target/powerpc/builtins-5-p9-runnable.c
! 80cfec7becc0c5c95f7b0cab5583061e  gcc/testsuite/gcc.target/powerpc/builtins-5.c
  d6c50bef137b8bc795dc8da8475e7d72  gcc/testsuite/gcc.target/powerpc/builtins-6-p9-runnable.c
  54e75f8afa24099030187760b9579828  gcc/testsuite/gcc.target/powerpc/builtins-6-runnable.c
  ad36609570d36fac7a261cbe1422b2b9  gcc/testsuite/gcc.target/powerpc/builtins-7-p9-runnable.c
--- 70115,70123 ----
  8a1bb8ec52829a6ea7f9ee07a431c165  gcc/testsuite/gcc.target/powerpc/builtins-4-int128-runnable.c
  50bb9ae2f77e2ee92fa420b15a5d1d93  gcc/testsuite/gcc.target/powerpc/builtins-4-p9-runnable.c
  229b92af5d708ec95906efd39c078624  gcc/testsuite/gcc.target/powerpc/builtins-4-runnable.c
! a434ec9b73b5bda40b0236364298edbc  gcc/testsuite/gcc.target/powerpc/builtins-4.c
  13e0b4808cc07b46cac8e9d91447da3c  gcc/testsuite/gcc.target/powerpc/builtins-5-p9-runnable.c
! 46cecca879d095c0c788ca55bc6241ef  gcc/testsuite/gcc.target/powerpc/builtins-5.c
  d6c50bef137b8bc795dc8da8475e7d72  gcc/testsuite/gcc.target/powerpc/builtins-6-p9-runnable.c
  54e75f8afa24099030187760b9579828  gcc/testsuite/gcc.target/powerpc/builtins-6-runnable.c
  ad36609570d36fac7a261cbe1422b2b9  gcc/testsuite/gcc.target/powerpc/builtins-7-p9-runnable.c
*************** c557254ecf58aa4d6f3d4bdb298275db  gcc/te
*** 66456,66462 ****
  7ac736aea6ce95600f3a9f361777f41f  gcc/testsuite/gcc.target/powerpc/byte-in-range-1.c
  58649744a331577784ece84c2d89a6b3  gcc/testsuite/gcc.target/powerpc/byte-in-set-0.c
  595315abe517e7640f312c098a95a84e  gcc/testsuite/gcc.target/powerpc/byte-in-set-1.c
! 60240c50adc5848544c17a344962374e  gcc/testsuite/gcc.target/powerpc/byte-in-set-2.c
  2967ae37e85e61aa7e2d5198922374ad  gcc/testsuite/gcc.target/powerpc/cell_builtin-1.c
  222e0812e626f0e1abf688d71c5afc58  gcc/testsuite/gcc.target/powerpc/cell_builtin-2.c
  e25f2a228d796f1db494d4bd8e5d34f5  gcc/testsuite/gcc.target/powerpc/cell_builtin-3.c
--- 70134,70140 ----
  7ac736aea6ce95600f3a9f361777f41f  gcc/testsuite/gcc.target/powerpc/byte-in-range-1.c
  58649744a331577784ece84c2d89a6b3  gcc/testsuite/gcc.target/powerpc/byte-in-set-0.c
  595315abe517e7640f312c098a95a84e  gcc/testsuite/gcc.target/powerpc/byte-in-set-1.c
! ccab226ed6b1c2e5cad1abda23c992c7  gcc/testsuite/gcc.target/powerpc/byte-in-set-2.c
  2967ae37e85e61aa7e2d5198922374ad  gcc/testsuite/gcc.target/powerpc/cell_builtin-1.c
  222e0812e626f0e1abf688d71c5afc58  gcc/testsuite/gcc.target/powerpc/cell_builtin-2.c
  e25f2a228d796f1db494d4bd8e5d34f5  gcc/testsuite/gcc.target/powerpc/cell_builtin-3.c
*************** bceca9004faa6729357ac4757f81b563  gcc/te
*** 66472,66481 ****
  b8e6c9f8968f2606ab8c45e4bae3d807  gcc/testsuite/gcc.target/powerpc/clone2.c
  3f03cede40acb0331345348ac7486253  gcc/testsuite/gcc.target/powerpc/clone3.c
  df3bb7789b2e14f68bc9eb0b7af53cea  gcc/testsuite/gcc.target/powerpc/cmpb-1.c
! ba0b1956af1db794975f1aee3d6e6273  gcc/testsuite/gcc.target/powerpc/cmpb-2.c
! 82227502f9d3718b87af61166d6cbcd4  gcc/testsuite/gcc.target/powerpc/cmpb-3.c
  096405fe72bd70e54254ba59396a8793  gcc/testsuite/gcc.target/powerpc/cmpb32-1.c
! 9b3076c3c75dcc8d936512c558e7349f  gcc/testsuite/gcc.target/powerpc/cmpb32-2.c
  547670942735b7730f2499d29a2c415b  gcc/testsuite/gcc.target/powerpc/cntlzdm-0.c
  01720385b4f7f4200060bf1dcaa69c89  gcc/testsuite/gcc.target/powerpc/cntlzdm-1.c
  189b7cbf2d81a9c115f3c258072b8606  gcc/testsuite/gcc.target/powerpc/cnttzdm-0.c
--- 70150,70159 ----
  b8e6c9f8968f2606ab8c45e4bae3d807  gcc/testsuite/gcc.target/powerpc/clone2.c
  3f03cede40acb0331345348ac7486253  gcc/testsuite/gcc.target/powerpc/clone3.c
  df3bb7789b2e14f68bc9eb0b7af53cea  gcc/testsuite/gcc.target/powerpc/cmpb-1.c
! a31afc98fa8da142eae0a79235d01462  gcc/testsuite/gcc.target/powerpc/cmpb-2.c
! 46f5ec685c2730e6e034d52190e348d3  gcc/testsuite/gcc.target/powerpc/cmpb-3.c
  096405fe72bd70e54254ba59396a8793  gcc/testsuite/gcc.target/powerpc/cmpb32-1.c
! 7e851aa9b50005523ed727d8f9a37f4e  gcc/testsuite/gcc.target/powerpc/cmpb32-2.c
  547670942735b7730f2499d29a2c415b  gcc/testsuite/gcc.target/powerpc/cntlzdm-0.c
  01720385b4f7f4200060bf1dcaa69c89  gcc/testsuite/gcc.target/powerpc/cntlzdm-1.c
  189b7cbf2d81a9c115f3c258072b8606  gcc/testsuite/gcc.target/powerpc/cnttzdm-0.c
*************** cc20d8ebb0dff3b95b56685f2cf4ba50  gcc/te
*** 66487,66493 ****
  6419d1aaea22c0476688f484ac4f0f43  gcc/testsuite/gcc.target/powerpc/const-compare.c
  ea2791615781e50d93e59e8389958d7d  gcc/testsuite/gcc.target/powerpc/conv-vectorize-1.c
  d6eb67727149d6d42efabf2f7d82dfd1  gcc/testsuite/gcc.target/powerpc/conv-vectorize-2.c
! 4860519afa74c9127755e2a68b2ed7e8  gcc/testsuite/gcc.target/powerpc/convert-fp-128.c
  8bdf61637d7206a86bdd53011a38df98  gcc/testsuite/gcc.target/powerpc/convert-fp-64.c
  1f7277471f008809ee3572d95097e11a  gcc/testsuite/gcc.target/powerpc/copysign128-1.c
  174f03afd85dbb1fb2b818ae9dc7fb8f  gcc/testsuite/gcc.target/powerpc/cprophard.c
--- 70165,70171 ----
  6419d1aaea22c0476688f484ac4f0f43  gcc/testsuite/gcc.target/powerpc/const-compare.c
  ea2791615781e50d93e59e8389958d7d  gcc/testsuite/gcc.target/powerpc/conv-vectorize-1.c
  d6eb67727149d6d42efabf2f7d82dfd1  gcc/testsuite/gcc.target/powerpc/conv-vectorize-2.c
! 4e36c5466e14328dd78f0c7711495fb1  gcc/testsuite/gcc.target/powerpc/convert-fp-128.c
  8bdf61637d7206a86bdd53011a38df98  gcc/testsuite/gcc.target/powerpc/convert-fp-64.c
  1f7277471f008809ee3572d95097e11a  gcc/testsuite/gcc.target/powerpc/copysign128-1.c
  174f03afd85dbb1fb2b818ae9dc7fb8f  gcc/testsuite/gcc.target/powerpc/cprophard.c
*************** d6eb67727149d6d42efabf2f7d82dfd1  gcc/te
*** 66495,66509 ****
  1f6e5c800809283a311bbea2c2e28f46  gcc/testsuite/gcc.target/powerpc/cpu-future.c
  81b6f286dd2f5fda45d87e46682a7d3a  gcc/testsuite/gcc.target/powerpc/cr_shrink-wrap.c
  9ec5a71503700f842b2d68337529fc06  gcc/testsuite/gcc.target/powerpc/crypto-builtin-1.c
! 3eb98ea68ad5c689faea4d0223474f5f  gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c
  a3b487e53959665b5ecb0d7ba6138585  gcc/testsuite/gcc.target/powerpc/ctz-1.c
  71b4f483951bb34e21b95b1e7b4a3801  gcc/testsuite/gcc.target/powerpc/ctz-2.c
  12afc733a9f58f420e3066fa01c0c969  gcc/testsuite/gcc.target/powerpc/ctz-3.c
  044d4d9143ef24136f34cfd9b9ca8536  gcc/testsuite/gcc.target/powerpc/ctz-4.c
! 98101aa2892dd0277597181bcdf59916  gcc/testsuite/gcc.target/powerpc/darn-0.c
! 9c8b26ff1cc977f0df82bc86998c247b  gcc/testsuite/gcc.target/powerpc/darn-1.c
! 962f878c3237706ffe60710e123880ff  gcc/testsuite/gcc.target/powerpc/darn-2.c
! 2d3888fb18aac2e8b4172608e0bad7da  gcc/testsuite/gcc.target/powerpc/darn-3.c
  965986b227062a2b8c664c916a71ad45  gcc/testsuite/gcc.target/powerpc/darwin-abi-1.c
  9a0e4836781f28669ddca26eb214c2b2  gcc/testsuite/gcc.target/powerpc/darwin-abi-10.c
  66e5cfd1b7491e37c0ef258d09b6634d  gcc/testsuite/gcc.target/powerpc/darwin-abi-11.c
--- 70173,70187 ----
  1f6e5c800809283a311bbea2c2e28f46  gcc/testsuite/gcc.target/powerpc/cpu-future.c
  81b6f286dd2f5fda45d87e46682a7d3a  gcc/testsuite/gcc.target/powerpc/cr_shrink-wrap.c
  9ec5a71503700f842b2d68337529fc06  gcc/testsuite/gcc.target/powerpc/crypto-builtin-1.c
! a0bda8ba97dfdcb84a014df7f85f7194  gcc/testsuite/gcc.target/powerpc/crypto-builtin-2.c
  a3b487e53959665b5ecb0d7ba6138585  gcc/testsuite/gcc.target/powerpc/ctz-1.c
  71b4f483951bb34e21b95b1e7b4a3801  gcc/testsuite/gcc.target/powerpc/ctz-2.c
  12afc733a9f58f420e3066fa01c0c969  gcc/testsuite/gcc.target/powerpc/ctz-3.c
  044d4d9143ef24136f34cfd9b9ca8536  gcc/testsuite/gcc.target/powerpc/ctz-4.c
! 0d8949d9e877f10f059ea10f3089b6f8  gcc/testsuite/gcc.target/powerpc/darn-0.c
! fe23137ae052519c7048642ea9fcef97  gcc/testsuite/gcc.target/powerpc/darn-1.c
! 19d98529530fd6519134a06754fbc348  gcc/testsuite/gcc.target/powerpc/darn-2.c
! 49f7be188d4e8d81852e8a7ff4bd6422  gcc/testsuite/gcc.target/powerpc/darn-3.c
  965986b227062a2b8c664c916a71ad45  gcc/testsuite/gcc.target/powerpc/darwin-abi-1.c
  9a0e4836781f28669ddca26eb214c2b2  gcc/testsuite/gcc.target/powerpc/darwin-abi-10.c
  66e5cfd1b7491e37c0ef258d09b6634d  gcc/testsuite/gcc.target/powerpc/darwin-abi-11.c
*************** ebf08f4056fe4c31c90dc291d1dfcaae  gcc/te
*** 66526,66533 ****
  a034d7a8bf265623a75800f01113e836  gcc/testsuite/gcc.target/powerpc/darwin-split-ld-stret.c
  548fc585bcbf766f23bef7319f0b0a18  gcc/testsuite/gcc.target/powerpc/darwin64-abi.c
  5df8870892f8ad5f8ea3060c6c5b82b1  gcc/testsuite/gcc.target/powerpc/dfmode_off.c
! 39a60b8b75cc0dfba0799a7a9c2be1b7  gcc/testsuite/gcc.target/powerpc/dform-1.c
! 5092b07943c48246adcbfe8c79007b81  gcc/testsuite/gcc.target/powerpc/dform-2.c
  4dd3f71a457a50fc5e9225fc5b49f066  gcc/testsuite/gcc.target/powerpc/dform-3.c
  1b0ed9e1fb7627938798531b5360281f  gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c
  ce1f3ad7eb43ff7d5709418e9886c843  gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c
--- 70204,70211 ----
  a034d7a8bf265623a75800f01113e836  gcc/testsuite/gcc.target/powerpc/darwin-split-ld-stret.c
  548fc585bcbf766f23bef7319f0b0a18  gcc/testsuite/gcc.target/powerpc/darwin64-abi.c
  5df8870892f8ad5f8ea3060c6c5b82b1  gcc/testsuite/gcc.target/powerpc/dfmode_off.c
! 030fee52bc4732793404bc93dfb61c48  gcc/testsuite/gcc.target/powerpc/dform-1.c
! 5896373222b7dff5f22997f2456a5ff8  gcc/testsuite/gcc.target/powerpc/dform-2.c
  4dd3f71a457a50fc5e9225fc5b49f066  gcc/testsuite/gcc.target/powerpc/dform-3.c
  1b0ed9e1fb7627938798531b5360281f  gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c
  ce1f3ad7eb43ff7d5709418e9886c843  gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c
*************** ce1f3ad7eb43ff7d5709418e9886c843  gcc/te
*** 66536,66622 ****
  70d51abf2988870d80cb9cc5e753c87b  gcc/testsuite/gcc.target/powerpc/dfp-td-2.c
  28bb384f8efa10801efa64c838eab4e2  gcc/testsuite/gcc.target/powerpc/dfp-td-3.c
  20555599c7a199625c2d8d95f50de5e9  gcc/testsuite/gcc.target/powerpc/dfp-td.c
! 1ea35f6833596b600198c7e74eca2baa  gcc/testsuite/gcc.target/powerpc/dfp/dfp.exp
  87e54b934c02cfbc3b6fb142c76e4e04  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-0.c
  eeaa0257c75044dd988a2b10bddeea7c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-1.c
  cf4bee8bc84345204e6621398ea24cc3  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c
  b09fef29f4fe2deacf330ed66879db00  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
! 99778ad651b2d4ba709b0fdb2622f84f  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c
  06d89f4b19dcc4eb8b2a45693f874b96  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c
! 893c1f3332ba7980c3ec26afbc8d4c1e  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c
  896249f62148197fb02e3253b95f5b6c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c
  a0eaf14e0589c416534d568bbf1ac099  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
! 39bd410c4548bdc7e9f9814497db5489  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c
  561342c40824e36b5066026827e45db6  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c
! 1b444d65b2eec90d49602fba7d9d1976  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c
! 3cd7be5b28de0338f7c2bfb0d4b2cee3  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-2.c
  287cc6102c97a9d3550943dcd5724153  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-20.c
  e1e59e6925bfe358e24609d95fb6aafc  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-21.c
! 5fb72c393a011c4414513d1081c8ffed  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-22.c
  543ac3a17017fb6b4c9d44c1e6ba0199  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-23.c
! 51a89aa6dbef16544beac197564dc199  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-24.c
  12e50f6c2ae0829b62fc7915e9f77ec1  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-25.c
  ab98eaab47ce164c13261296c3ad6e8e  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-26.c
! 8e0b9127c49757864c014f7a4250d4ca  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-27.c
  4c58c46e43ebd348b6e4afc535b23431  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-28.c
! 4e77dd505df15270b413a4af79d5ffe6  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-29.c
  3f125ea2873a274255bc2b41c87cb11b  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-3.c
  0ad4f4871f5cf42a4e73bb468a4c63cc  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c
  460616e76916d24a330b70509ed34ca8  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
! 1415a17e2c6377986ebba46bef6eb79c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c
  226d8891e460ee5fd95d2d5539993f31  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c
! c3157617591ee9f3f3f94b170881f385  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c
  7ba91132f163db518dcc89322d0c38f5  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c
  aa45195b1a03f52ee423415111bed952  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
! b3ffc59c92b4d1fbe0d1c21582a2bc4d  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c
  76e04d888aef02cc3c35730b7eef30e9  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c
! 415a4a4c30f13c1e03a1ba4d2d5879f1  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c
! 4088a1c614e694605d103dfa2e60e957  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-4.c
  836325a1b8c3ec44998679797869fe5a  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-40.c
  7518cd1338c99de5ac1d55e4b71791ad  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-41.c
! 58483dbb8aba271ddaa8a76484016970  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-42.c
  6ecb7fe3d314a14e25cc069ada20dd4c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-43.c
! 31b7f9e1b314ec83ba18d29cf7db2f5b  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-44.c
  7b3705f6e5a7938e75c08a861298e183  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-45.c
  b43e26c9d59ff3881ebeebc1c74d456e  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-46.c
! 22c0c8a23f0a8836059c25f33888920a  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-47.c
  d1f1694fcefd74f7f91ec9e7cceaadd0  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-48.c
! 59528ee5375ac225fc4ab557621b416f  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-49.c
  b7c52892d38ca15a0284fd87216dab21  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-5.c
  6cc5102f213c8e65cf4e09a3f97083a4  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c
  7ae4a7e2e9708fc884cc3f68d1d533ab  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
! e4b6f37573bacedabf1994257070a78c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c
  6987cccabe1d1f073c3c8e3d2ce6fe47  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c
! 7035f8b68c57bbca7b3b504eb59c3240  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c
  a26c3e6ae9e7911ab3b2eaf9ccf49ae5  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c
  ba6a7e52c8f516f2d48825cb656718f4  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
! c1da78383782027acfc8d9b77792beca  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c
  f96a994586f2bc793a6b2b1cbb39ae77  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c
! cf918942adf4fd3f1ef2aaeb2fb1d54a  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c
  a60d3c93d025c0342f8cb8f0b01e2364  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-6.c
  e056bd94e69b1fc79f46e89d058be27f  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-60.c
  ae85a05bf34b057975818e41edea7d9d  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-61.c
! 18c1733fac5cc6e93c65697bdab4c464  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-62.c
  74ef3d73f6fc7ca9abd0cdea44194c17  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-63.c
! 971eb9ea7d10db2712d7354c06c322d0  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-64.c
  e6d252c07b5fea308f180b1b00bf6114  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-65.c
  6a1a8ba658d9f847d5be9ceba090864c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-66.c
! e9792483319bf95dc2e77474d5a4bfd0  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-67.c
  313dcc7e0fb439977e8f3776b87bbc26  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-68.c
! 5fd1356ad9072797f11f2e8a68c51c6c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-69.c
! e88e080a42e85f9a862cd65047a46b77  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-7.c
  f67a00c818340b63ab2e557d45a48428  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c
  b22002a8fff02ac99f0b4bc3575b7e6d  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
! b0ef1e88172f93c225c72ec074b4d5a8  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c
  99f9de6fb003390156a6bb7194e35d2c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c
! becdc4f23cbcd892d674b51212492eb9  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c
  4fa253c45b0bfa6066a7f3f67131f71c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c
  eb7be457c6183733c031f3aeff01290a  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
! 75cde8d5ffa1c614fc6a6892df34e5bc  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c
  27cf8889ee7edf21c600f96a93fdd168  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c
! a69f285b2d84bac4624c6a3d8d5af256  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c
  6102e2b4214f7870a0abc64f0d119806  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-8.c
! 742beafe6fc1c64ddcdb91fe1a79e235  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-9.c
  15797f7c1b9cc9547384233a7abdd49f  gcc/testsuite/gcc.target/powerpc/dg-future-0.c
  c4c7537d0bdc6e02c64ae690f9feac1f  gcc/testsuite/gcc.target/powerpc/dg-future-1.c
  0f4816e68e75ee735727c70ca742fb95  gcc/testsuite/gcc.target/powerpc/dimode_off.c
--- 70214,70300 ----
  70d51abf2988870d80cb9cc5e753c87b  gcc/testsuite/gcc.target/powerpc/dfp-td-2.c
  28bb384f8efa10801efa64c838eab4e2  gcc/testsuite/gcc.target/powerpc/dfp-td-3.c
  20555599c7a199625c2d8d95f50de5e9  gcc/testsuite/gcc.target/powerpc/dfp-td.c
! 32a16fdc7d3694b41b0a83c9cc150446  gcc/testsuite/gcc.target/powerpc/dfp/dfp.exp
  87e54b934c02cfbc3b6fb142c76e4e04  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-0.c
  eeaa0257c75044dd988a2b10bddeea7c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-1.c
  cf4bee8bc84345204e6621398ea24cc3  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-10.c
  b09fef29f4fe2deacf330ed66879db00  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-11.c
! 60366bdd1fabaa18efb9eca44182857c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-12.c
  06d89f4b19dcc4eb8b2a45693f874b96  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-13.c
! 8742a29b8b148ca4549f602d841ff711  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-14.c
  896249f62148197fb02e3253b95f5b6c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-15.c
  a0eaf14e0589c416534d568bbf1ac099  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-16.c
! 995d6ad817f8b8dc4aea80efb9a0fdb2  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-17.c
  561342c40824e36b5066026827e45db6  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-18.c
! e9456ac4ece3396d8d4cdca84ad77eff  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-19.c
! df2ea7bc3018bdccdb121fe9a2baf10b  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-2.c
  287cc6102c97a9d3550943dcd5724153  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-20.c
  e1e59e6925bfe358e24609d95fb6aafc  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-21.c
! fde0651ee76ae6d6b167ed3f02aed640  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-22.c
  543ac3a17017fb6b4c9d44c1e6ba0199  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-23.c
! 1338c2c7bc056e7064e564642d4e6247  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-24.c
  12e50f6c2ae0829b62fc7915e9f77ec1  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-25.c
  ab98eaab47ce164c13261296c3ad6e8e  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-26.c
! 4dbbabe6902992ddf0ff6fb8d70117df  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-27.c
  4c58c46e43ebd348b6e4afc535b23431  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-28.c
! eb6b1d744c06facca90c3467692cd913  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-29.c
  3f125ea2873a274255bc2b41c87cb11b  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-3.c
  0ad4f4871f5cf42a4e73bb468a4c63cc  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-30.c
  460616e76916d24a330b70509ed34ca8  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-31.c
! 7dcf6cb97dbc6968827b7f45824553fe  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-32.c
  226d8891e460ee5fd95d2d5539993f31  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-33.c
! b017c0583de98686d05f7add1f90e751  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-34.c
  7ba91132f163db518dcc89322d0c38f5  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-35.c
  aa45195b1a03f52ee423415111bed952  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-36.c
! 9522a0d68ed1d99f6ae2ee3f1d91c72c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-37.c
  76e04d888aef02cc3c35730b7eef30e9  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-38.c
! 624efa7360658827d58830122d71d8d7  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-39.c
! 756662c727974d0e662cdd2ae725dba4  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-4.c
  836325a1b8c3ec44998679797869fe5a  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-40.c
  7518cd1338c99de5ac1d55e4b71791ad  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-41.c
! d23150a22fb5653e4e50eac564de51ff  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-42.c
  6ecb7fe3d314a14e25cc069ada20dd4c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-43.c
! 8880298736117201e04c8fe59b003acd  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-44.c
  7b3705f6e5a7938e75c08a861298e183  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-45.c
  b43e26c9d59ff3881ebeebc1c74d456e  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-46.c
! da3afec2d7d08a1d7fb1d5aad5ddfb2f  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-47.c
  d1f1694fcefd74f7f91ec9e7cceaadd0  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-48.c
! cbcbad3bc8dbb16d69bedabcbab3dd07  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-49.c
  b7c52892d38ca15a0284fd87216dab21  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-5.c
  6cc5102f213c8e65cf4e09a3f97083a4  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-50.c
  7ae4a7e2e9708fc884cc3f68d1d533ab  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-51.c
! 7b2bc6c7358dab180d551798a668b2b9  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-52.c
  6987cccabe1d1f073c3c8e3d2ce6fe47  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-53.c
! ccd7025d9fdaa4d1e37d123b9eb38efe  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-54.c
  a26c3e6ae9e7911ab3b2eaf9ccf49ae5  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-55.c
  ba6a7e52c8f516f2d48825cb656718f4  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-56.c
! 24bee1202edf9c89675618a939ee6d81  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-57.c
  f96a994586f2bc793a6b2b1cbb39ae77  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-58.c
! 98f5b5dcb4e168bb8cfbdcd110d32212  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-59.c
  a60d3c93d025c0342f8cb8f0b01e2364  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-6.c
  e056bd94e69b1fc79f46e89d058be27f  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-60.c
  ae85a05bf34b057975818e41edea7d9d  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-61.c
! 49a93f5f509a7689e3bab89a3c8372ca  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-62.c
  74ef3d73f6fc7ca9abd0cdea44194c17  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-63.c
! a548ec9c8a9c2a243a018391ed201d0d  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-64.c
  e6d252c07b5fea308f180b1b00bf6114  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-65.c
  6a1a8ba658d9f847d5be9ceba090864c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-66.c
! 15a070e1f3ee88c4f9ae9f856fef46e2  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-67.c
  313dcc7e0fb439977e8f3776b87bbc26  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-68.c
! 661eebf79b3943f4a17abf8980c652a2  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-69.c
! a054d8a857732a7eb0bb1ab6eeb5738a  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-7.c
  f67a00c818340b63ab2e557d45a48428  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-70.c
  b22002a8fff02ac99f0b4bc3575b7e6d  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-71.c
! fa2b4ad3c28271ef78d665ab06805373  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-72.c
  99f9de6fb003390156a6bb7194e35d2c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-73.c
! 019a739c72ea211d3b233c8370ee66e5  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-74.c
  4fa253c45b0bfa6066a7f3f67131f71c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-75.c
  eb7be457c6183733c031f3aeff01290a  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-76.c
! fd27e765658f781c9a6fc170edb1a17c  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-77.c
  27cf8889ee7edf21c600f96a93fdd168  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-78.c
! 719dd2c8af948f8013a1117fdac5a66a  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-79.c
  6102e2b4214f7870a0abc64f0d119806  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-8.c
! 7e5b0736d39ca878f461cc7fce6a5f0b  gcc/testsuite/gcc.target/powerpc/dfp/dtstsfi-9.c
  15797f7c1b9cc9547384233a7abdd49f  gcc/testsuite/gcc.target/powerpc/dg-future-0.c
  c4c7537d0bdc6e02c64ae690f9feac1f  gcc/testsuite/gcc.target/powerpc/dg-future-1.c
  0f4816e68e75ee735727c70ca742fb95  gcc/testsuite/gcc.target/powerpc/dimode_off.c
*************** d4ce6459348a97119b44b465bb11034f  gcc/te
*** 66631,66636 ****
--- 70309,70321 ----
  818a2d9329056fb35fbe2858ed53b4e3  gcc/testsuite/gcc.target/powerpc/direct-move-vint1.c
  500da673182d1ca48d430f3e8f4e6736  gcc/testsuite/gcc.target/powerpc/direct-move-vint2.c
  3bb9355169d26ef4a2e610a4cc121c5b  gcc/testsuite/gcc.target/powerpc/direct-move.h
+ 627e7592bae7233fb11325ff51156a61  gcc/testsuite/gcc.target/powerpc/div-vectorize-1.c
+ 354fa7b470e36716008a44d7f46711ea  gcc/testsuite/gcc.target/powerpc/dive-vectorize-1.c
+ 7da46b7b7e2042573c9b8f74eb907b9b  gcc/testsuite/gcc.target/powerpc/dive-vectorize-1.h
+ bbd67209d5072324b6c172166dfdc420  gcc/testsuite/gcc.target/powerpc/dive-vectorize-2.c
+ 09495604f3a8758d402fe4f21d86c61c  gcc/testsuite/gcc.target/powerpc/dive-vectorize-2.h
+ 0532ce60fbb266a7997c5b039f019605  gcc/testsuite/gcc.target/powerpc/dive-vectorize-run-1.c
+ c5a9d08c3b838f5a1fea3a4a1a8fd74c  gcc/testsuite/gcc.target/powerpc/dive-vectorize-run-2.c
  437116f4ece2fc838159319958a00e92  gcc/testsuite/gcc.target/powerpc/divkc3-1.c
  499cd7621c221e968d7b038cf3e898d9  gcc/testsuite/gcc.target/powerpc/divkc3-2.c
  acd01b4a84dada449fb4247ebc8529e0  gcc/testsuite/gcc.target/powerpc/divkc3-3.c
*************** f92fd7820b0c5610b80d80849330a5b5  gcc/te
*** 66652,66663 ****
  23470b0b15ae268a0d29143204e3df41  gcc/testsuite/gcc.target/powerpc/float128-3.c
  87db0533dd0b96c3e0982f0eb5d1d216  gcc/testsuite/gcc.target/powerpc/float128-4.c
  6768d5d711515ed5b6da41a056b388ab  gcc/testsuite/gcc.target/powerpc/float128-5.c
! d7cdcfd586315d965f78adeae2689b77  gcc/testsuite/gcc.target/powerpc/float128-call.c
  5dc8dae5e463cb191053a5df48a57e79  gcc/testsuite/gcc.target/powerpc/float128-cmove.c
  d2e66a0adae820881b99ec45ffe24c78  gcc/testsuite/gcc.target/powerpc/float128-cmp.c
  5a85c91ce9fcc3b73b638295db4d02b2  gcc/testsuite/gcc.target/powerpc/float128-cmp2-runnable.c
  c30565a907667e990dd7f92247003742  gcc/testsuite/gcc.target/powerpc/float128-complex-1.c
  eb3c3874b4477c7a84697fb0ec856be8  gcc/testsuite/gcc.target/powerpc/float128-complex-2.c
  947cc2d0979c0deb0e29543fd5844482  gcc/testsuite/gcc.target/powerpc/float128-fma1.c
  f160590fc0253f43510e8bb41d6c5b4d  gcc/testsuite/gcc.target/powerpc/float128-hw.c
  1290d54b6f45970d0eb251c8fcdeb870  gcc/testsuite/gcc.target/powerpc/float128-hw10.c
--- 70337,70349 ----
  23470b0b15ae268a0d29143204e3df41  gcc/testsuite/gcc.target/powerpc/float128-3.c
  87db0533dd0b96c3e0982f0eb5d1d216  gcc/testsuite/gcc.target/powerpc/float128-4.c
  6768d5d711515ed5b6da41a056b388ab  gcc/testsuite/gcc.target/powerpc/float128-5.c
! 0b6c17e72390bfb9052600f21ba0c89a  gcc/testsuite/gcc.target/powerpc/float128-call.c
  5dc8dae5e463cb191053a5df48a57e79  gcc/testsuite/gcc.target/powerpc/float128-cmove.c
  d2e66a0adae820881b99ec45ffe24c78  gcc/testsuite/gcc.target/powerpc/float128-cmp.c
  5a85c91ce9fcc3b73b638295db4d02b2  gcc/testsuite/gcc.target/powerpc/float128-cmp2-runnable.c
  c30565a907667e990dd7f92247003742  gcc/testsuite/gcc.target/powerpc/float128-complex-1.c
  eb3c3874b4477c7a84697fb0ec856be8  gcc/testsuite/gcc.target/powerpc/float128-complex-2.c
+ fd25bebf75e74cfe87389db792a9d7e6  gcc/testsuite/gcc.target/powerpc/float128-constant.c
  947cc2d0979c0deb0e29543fd5844482  gcc/testsuite/gcc.target/powerpc/float128-fma1.c
  f160590fc0253f43510e8bb41d6c5b4d  gcc/testsuite/gcc.target/powerpc/float128-hw.c
  1290d54b6f45970d0eb251c8fcdeb870  gcc/testsuite/gcc.target/powerpc/float128-hw10.c
*************** a74141cbbf5be937c226ffee13bee031  gcc/te
*** 66728,66734 ****
  9c144374ed5b648079ac35c154cec420  gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-short.c
  34c909a89e104fa83e45b28020ea4537  gcc/testsuite/gcc.target/powerpc/fold-vec-div-float.c
  bc4ffe5b102cbda3b8132211813a5f60  gcc/testsuite/gcc.target/powerpc/fold-vec-div-floatdouble.c
! b23087b3776828b011e37164ee251121  gcc/testsuite/gcc.target/powerpc/fold-vec-div-longlong.c
  281b80b6f83e9dd0d46cb2a376157b20  gcc/testsuite/gcc.target/powerpc/fold-vec-extract-char.p7.c
  c0d91fe2e7dbdb7d7aedb914d67fcedb  gcc/testsuite/gcc.target/powerpc/fold-vec-extract-char.p8.c
  e878b1f5b97280c654030ad18132a088  gcc/testsuite/gcc.target/powerpc/fold-vec-extract-char.p9.c
--- 70414,70420 ----
  9c144374ed5b648079ac35c154cec420  gcc/testsuite/gcc.target/powerpc/fold-vec-cntlz-short.c
  34c909a89e104fa83e45b28020ea4537  gcc/testsuite/gcc.target/powerpc/fold-vec-div-float.c
  bc4ffe5b102cbda3b8132211813a5f60  gcc/testsuite/gcc.target/powerpc/fold-vec-div-floatdouble.c
! e5d4f3b0afd81706b6cc6b5850f9eefe  gcc/testsuite/gcc.target/powerpc/fold-vec-div-longlong.c
  281b80b6f83e9dd0d46cb2a376157b20  gcc/testsuite/gcc.target/powerpc/fold-vec-extract-char.p7.c
  c0d91fe2e7dbdb7d7aedb914d67fcedb  gcc/testsuite/gcc.target/powerpc/fold-vec-extract-char.p8.c
  e878b1f5b97280c654030ad18132a088  gcc/testsuite/gcc.target/powerpc/fold-vec-extract-char.p9.c
*************** fad3ccaaf13d39b936807d9415e4165c  gcc/te
*** 66764,66787 ****
  98217697644416990b57d0a01fa4840e  gcc/testsuite/gcc.target/powerpc/fold-vec-ld-longlong.c
  5cf0c2402b7fea385dac074b3865e37a  gcc/testsuite/gcc.target/powerpc/fold-vec-ld-misc.c
  11f5c822fb66163c2b4ff6823d8bba9e  gcc/testsuite/gcc.target/powerpc/fold-vec-ld-short.c
! ef179c9aa402e085cc786d0ac38cff16  gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-char.c
! d1f6fc7cb10b34ef5baeefe6391dec6a  gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-double.c
! 845fe0a4d5037cd80da5da32ef85c6de  gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-float.c
! 52a039e440e2311761fb02857f1dfb14  gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-int.c
! 3e135ed90c3d841b0df3329084dfc608  gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-longlong.c
! 3f8d6f71dac91a8799d617bf9cd15110  gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-short.c
! 162aa75cfc3934414ae240806abd5478  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_vsx_ld-char.c
! 33f2cdf0e2f22a11244cdd3a912283f7  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_vsx_ld-double.c
! fdb3a444551249bb158fcd19b7ec8437  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_vsx_ld-float.c
! d58bb2461b74f8eaff9094975e6641c3  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_vsx_ld-int.c
! 773eb083a11162122c301cb25ae65d5e  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_vsx_ld-longlong.c
! efcb941f8afd2c021a1e6829b68fa0fa  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_vsx_ld-short.c
! 77dd3a47de5ae62f384b921508e19af6  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_xl-char.c
! 4d354ad3107e3e87addb48ca931e1223  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_xl-double.c
! 104f7457dabed3b47733cc367ab3dab7  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_xl-float.c
! b45908ddcebfa8e3a8301bdb71615f92  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_xl-int.c
! a1477a029821cdea190fe6d94e30ff69  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_xl-longlong.c
! 8ad0c73a46b40256213d1ca9aa3826fe  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_xl-short.c
  a6bf49f1508c4751594982b3ba9c1402  gcc/testsuite/gcc.target/powerpc/fold-vec-logical-ands-char.c
  65f0aacb6d00b5110c863e5cb9304409  gcc/testsuite/gcc.target/powerpc/fold-vec-logical-ands-int.c
  786bb59f48d5eb9fb4612efaf2950505  gcc/testsuite/gcc.target/powerpc/fold-vec-logical-ands-longlong.c
--- 70450,70473 ----
  98217697644416990b57d0a01fa4840e  gcc/testsuite/gcc.target/powerpc/fold-vec-ld-longlong.c
  5cf0c2402b7fea385dac074b3865e37a  gcc/testsuite/gcc.target/powerpc/fold-vec-ld-misc.c
  11f5c822fb66163c2b4ff6823d8bba9e  gcc/testsuite/gcc.target/powerpc/fold-vec-ld-short.c
! b8569310d4209fa463dc6fa6ff13a513  gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-char.c
! 83c9a4627f23e7070a4003ac0f6860ba  gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-double.c
! c021ed43746d793131a90123c67a57f1  gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-float.c
! c3d8c5fb05597cb57d8bfbaf9cfc2259  gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-int.c
! 84cca625c9334282cb0106dcc9e0aef9  gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-longlong.c
! e0b5ea66ad9fc12d543d217d4b75bbe8  gcc/testsuite/gcc.target/powerpc/fold-vec-load-builtin_vec_xl-short.c
! ba5b86cb7c1d757e8edf0b77934c3c61  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_vsx_ld-char.c
! 00476c11b96d4a7cb287f30d19b541f8  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_vsx_ld-double.c
! c31b0eb53026a430ff5d8f10a92ad755  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_vsx_ld-float.c
! 358b32903c812ec7a48e0f266a91735b  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_vsx_ld-int.c
! bba68aa438034cdaba6c5e632a306dc1  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_vsx_ld-longlong.c
! 8261d72a874fd63edb2e54ed00f33d2e  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_vsx_ld-short.c
! b666051b2e7e34615cfb3445d3afffee  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_xl-char.c
! 01603b5f8fc31c0457a7e887417e7169  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_xl-double.c
! 028783c74b314312e757e4127850f650  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_xl-float.c
! 6f52a1b07603e99f00cff2329b26441d  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_xl-int.c
! 8034f3c8ade4c73303157c45b671c658  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_xl-longlong.c
! 80380189e21af9127890031396ad99a9  gcc/testsuite/gcc.target/powerpc/fold-vec-load-vec_xl-short.c
  a6bf49f1508c4751594982b3ba9c1402  gcc/testsuite/gcc.target/powerpc/fold-vec-logical-ands-char.c
  65f0aacb6d00b5110c863e5cb9304409  gcc/testsuite/gcc.target/powerpc/fold-vec-logical-ands-int.c
  786bb59f48d5eb9fb4612efaf2950505  gcc/testsuite/gcc.target/powerpc/fold-vec-logical-ands-longlong.c
*************** d75d344612568a4f86f9acdb280128fa  gcc/te
*** 66830,66836 ****
  e4f3b55cba815be73871563930d38863  gcc/testsuite/gcc.target/powerpc/fold-vec-mult-int.c
  b6513310181ec27043ef75e55698b5e5  gcc/testsuite/gcc.target/powerpc/fold-vec-mult-int128-p8.c
  6dd8ae095ddbedca6e6ad524d89b01f4  gcc/testsuite/gcc.target/powerpc/fold-vec-mult-int128-p9.c
! 38fa9f7eba074a468077daeb1f8851cf  gcc/testsuite/gcc.target/powerpc/fold-vec-mult-longlong.c
  49b251a50e1bf1e51c1a49aa6fd075f0  gcc/testsuite/gcc.target/powerpc/fold-vec-mult-short.c
  bce7329fd22f2f2b624bf5ad15cb2605  gcc/testsuite/gcc.target/powerpc/fold-vec-neg-char.c
  cd5e71433eabf8fac39499ce3ea7f945  gcc/testsuite/gcc.target/powerpc/fold-vec-neg-floatdouble.c
--- 70516,70522 ----
  e4f3b55cba815be73871563930d38863  gcc/testsuite/gcc.target/powerpc/fold-vec-mult-int.c
  b6513310181ec27043ef75e55698b5e5  gcc/testsuite/gcc.target/powerpc/fold-vec-mult-int128-p8.c
  6dd8ae095ddbedca6e6ad524d89b01f4  gcc/testsuite/gcc.target/powerpc/fold-vec-mult-int128-p9.c
! 8ce0631fe60c93865f448e94c4a340db  gcc/testsuite/gcc.target/powerpc/fold-vec-mult-longlong.c
  49b251a50e1bf1e51c1a49aa6fd075f0  gcc/testsuite/gcc.target/powerpc/fold-vec-mult-short.c
  bce7329fd22f2f2b624bf5ad15cb2605  gcc/testsuite/gcc.target/powerpc/fold-vec-neg-char.c
  cd5e71433eabf8fac39499ce3ea7f945  gcc/testsuite/gcc.target/powerpc/fold-vec-neg-floatdouble.c
*************** dbc411e4c00c190a163bc911484099f8  gcc/te
*** 66870,66879 ****
  2d9452e937f198bbc849c148dc936929  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-32.c
  17d8a102bf765b820e4022ff22287e7a  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-8.c
  764fab21a22bc2ef07ba24928f43bec8  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-char.c
! 3e38a92c539fcb209f1228b8d02d50f7  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-floatdouble.c
  57a1dd4020c66039d3ea29b26c6248a8  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-int.c
! 7b0fa5d1ad4ad1fddfce679758fa2e8d  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-longlong.c
! 9e9e9e1f616846cd5a94a8ae5a51251c  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c
  c30d8748ce25dc33d712b08fb07301c2  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-pixel.c
  0bd12473bbe86815229a5660d3d7ce3c  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-short.c
  7e72d88480949b66c5c1e5b2c18e5d77  gcc/testsuite/gcc.target/powerpc/fold-vec-splats-char.c
--- 70556,70565 ----
  2d9452e937f198bbc849c148dc936929  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-32.c
  17d8a102bf765b820e4022ff22287e7a  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-8.c
  764fab21a22bc2ef07ba24928f43bec8  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-char.c
! 544c26f57562f2a74d0d47108a8c3e02  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-floatdouble.c
  57a1dd4020c66039d3ea29b26c6248a8  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-int.c
! 5af585cd7d7242537befab8df7de3eab  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-longlong.c
! d2d4a4688d2263b8b8350a212fdf363d  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-misc-invalid.c
  c30d8748ce25dc33d712b08fb07301c2  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-pixel.c
  0bd12473bbe86815229a5660d3d7ce3c  gcc/testsuite/gcc.target/powerpc/fold-vec-splat-short.c
  7e72d88480949b66c5c1e5b2c18e5d77  gcc/testsuite/gcc.target/powerpc/fold-vec-splats-char.c
*************** c884f4242bd424ff4337f85e2a9563f6  gcc/te
*** 66888,66911 ****
  86541d5efbd5d046fdc20c7f8cf38020  gcc/testsuite/gcc.target/powerpc/fold-vec-st-longlong.c
  4e0a13aac50c1c19a6931feb0ffb2d1c  gcc/testsuite/gcc.target/powerpc/fold-vec-st-pixel.c
  d21c8ed0be51451aebb44a84e728f25d  gcc/testsuite/gcc.target/powerpc/fold-vec-st-short.c
! a7d73e23794f3f43a4015ff59072679e  gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-char.c
! e2f1f580a93fe3875c81f81303f9637b  gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-double.c
! 2414dd2f70a05c64fb9b888e065d5e5c  gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-float.c
! efaf30bc3ae493a301cfdab7b327ce43  gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-int.c
! 44a6dcf9f4bedfd0121eafc0ffc86eb5  gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-longlong.c
! b318baff965bba3f6133f655373fb356  gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-short.c
! 8454eaa6fc1d57520f5a942b0ba1b51c  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_vsx_st-char.c
! 1275b7270cdfee6833f3221704d85431  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_vsx_st-double.c
! 5204c02cfe39591b8f27e725f295aabb  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_vsx_st-float.c
! 474530284d75723b1c1769d9bee1e13b  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_vsx_st-int.c
! bdcaa3792e38357d467008bc3bfcf216  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_vsx_st-longlong.c
! f65ffc5411026c687e62b5aa74eb9225  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_vsx_st-short.c
! 50fc09cf0367a03119a35dd83d7d9763  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_xst-char.c
! 2f74e96adcb517b0e1e04da291c067f1  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_xst-double.c
! 49cc279e9c2bf04d4383846965ca339b  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_xst-float.c
! 00b4e7e77ac5a4e4c52b77a9efdf3471  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_xst-int.c
! c35c06e752837b4903f52826a4b71bbf  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_xst-longlong.c
! dbd733a8d305cee325a82611ed97873b  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_xst-short.c
  ad2b4572d2db6cc1979e2268ca64ca93  gcc/testsuite/gcc.target/powerpc/fold-vec-sub-char.c
  f1b1c0fb1f99284d5a7de09a14694612  gcc/testsuite/gcc.target/powerpc/fold-vec-sub-float.c
  6c338f4ac8c6539eeb08f4db9c02dc2a  gcc/testsuite/gcc.target/powerpc/fold-vec-sub-floatdouble.c
--- 70574,70597 ----
  86541d5efbd5d046fdc20c7f8cf38020  gcc/testsuite/gcc.target/powerpc/fold-vec-st-longlong.c
  4e0a13aac50c1c19a6931feb0ffb2d1c  gcc/testsuite/gcc.target/powerpc/fold-vec-st-pixel.c
  d21c8ed0be51451aebb44a84e728f25d  gcc/testsuite/gcc.target/powerpc/fold-vec-st-short.c
! 02efabc53e9b8ee5c74a293ddd4e1202  gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-char.c
! f0484fe45046c4ec74342b1cb5913b34  gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-double.c
! e5b9216f97f29e1a1d4c75ef13f8f467  gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-float.c
! 2f6bfc35e9a15aeab8f9d268c964daaa  gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-int.c
! 5e837278fad3ab6f96d361732b531b15  gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-longlong.c
! 8ec98c8d3393166996141eb720a8180c  gcc/testsuite/gcc.target/powerpc/fold-vec-store-builtin_vec_xst-short.c
! 93d4697e1ff119fa63a935a5f03232ad  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_vsx_st-char.c
! 8589454364daadb6a2531178384c59a9  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_vsx_st-double.c
! a0582ea896a9ccaac653a9079b4f84e7  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_vsx_st-float.c
! 475f043b2c4302cb42ee7eba02bc1a0b  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_vsx_st-int.c
! a1c78bbf9ad1aa599988d66f48ed6073  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_vsx_st-longlong.c
! c88795a95185aecaeb65ac57d64d508d  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_vsx_st-short.c
! c8e8a1929302a21d21a8fa658dbf9af7  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_xst-char.c
! c75619cfb1d6fa73f565503274147c94  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_xst-double.c
! 629e2f1900a2d3762dcb09be41e955c6  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_xst-float.c
! 04cc8ef6b59700e8a36bff2a87082daa  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_xst-int.c
! ff02b1a6e44d91e7917f35d05f8cd32f  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_xst-longlong.c
! e07838fd28b6f32dfb77f5cec8e486f1  gcc/testsuite/gcc.target/powerpc/fold-vec-store-vec_xst-short.c
  ad2b4572d2db6cc1979e2268ca64ca93  gcc/testsuite/gcc.target/powerpc/fold-vec-sub-char.c
  f1b1c0fb1f99284d5a7de09a14694612  gcc/testsuite/gcc.target/powerpc/fold-vec-sub-float.c
  6c338f4ac8c6539eeb08f4db9c02dc2a  gcc/testsuite/gcc.target/powerpc/fold-vec-sub-floatdouble.c
*************** f158c23481154ab06c25cbdd745dec8d  gcc/te
*** 66926,66945 ****
  dcbebe071d63c21a542a5715031d4d82  gcc/testsuite/gcc.target/powerpc/fusion-p10-logadd.c
  4bdf54c34acc51427043fafe760993e1  gcc/testsuite/gcc.target/powerpc/fusion-p10-stst.c
  2016e7aba1138d1b75643f27f6d362c9  gcc/testsuite/gcc.target/powerpc/fusion-p10-stst2.c
! 8b2d1bd52f7c861f8d72b5a44d92ef4c  gcc/testsuite/gcc.target/powerpc/fusion.c
! 36aa1f73a4f5f1d0803aa750e5b13826  gcc/testsuite/gcc.target/powerpc/fusion2.c
  d339d3fe4c50dd4c2727de10dcf3374e  gcc/testsuite/gcc.target/powerpc/gcse-1.c
  bbca57fae9dea88267eaea26d8c43380  gcc/testsuite/gcc.target/powerpc/gnuattr1.c
  df3448b5306ef9e06b44d7414e6a12ff  gcc/testsuite/gcc.target/powerpc/gnuattr2.c
  b0289eef57a41f5bdbb7823fee56214b  gcc/testsuite/gcc.target/powerpc/gnuattr3.c
! d4c680a0477ecbe2fd90e52278838082  gcc/testsuite/gcc.target/powerpc/htm-1.c
  95e15b8f67722f785f9cc961f2fc1f4c  gcc/testsuite/gcc.target/powerpc/htm-builtin-1.c
  5aacca7a653e58dd2b7d92bf9eaf7c33  gcc/testsuite/gcc.target/powerpc/htm-tabort-no-r0.c
  8d5e823f5228a4c59dc5e2f2aebe106f  gcc/testsuite/gcc.target/powerpc/htm-ttest.c
  b777ef2a10f6f5ff643ab886bf487233  gcc/testsuite/gcc.target/powerpc/htm-xl-intrin-1.c
  8d634b2a7d443f1e5b4b69716e57ac00  gcc/testsuite/gcc.target/powerpc/indexed-addr.c
  1cc843325d44861ca12b01f8232baced  gcc/testsuite/gcc.target/powerpc/inf128-1.c
! 30e34ab9a7759046ef94138494f0bb86  gcc/testsuite/gcc.target/powerpc/int_128bit-runnable.c
  2cfd2ecd43230367d6d063b77664e314  gcc/testsuite/gcc.target/powerpc/le-altivec-consts.c
  7893fdf7b4681a84cb4d049bea9ffc10  gcc/testsuite/gcc.target/powerpc/leaf.c
  9d79c9715a5734121e7d5c8fa078a7df  gcc/testsuite/gcc.target/powerpc/lhs-1.c
--- 70612,70631 ----
  dcbebe071d63c21a542a5715031d4d82  gcc/testsuite/gcc.target/powerpc/fusion-p10-logadd.c
  4bdf54c34acc51427043fafe760993e1  gcc/testsuite/gcc.target/powerpc/fusion-p10-stst.c
  2016e7aba1138d1b75643f27f6d362c9  gcc/testsuite/gcc.target/powerpc/fusion-p10-stst2.c
! c21eafe688d7ccbc9bdcb0aaf81bfd30  gcc/testsuite/gcc.target/powerpc/fusion.c
! 4adade68cb00ba61c6843394fdadd638  gcc/testsuite/gcc.target/powerpc/fusion2.c
  d339d3fe4c50dd4c2727de10dcf3374e  gcc/testsuite/gcc.target/powerpc/gcse-1.c
  bbca57fae9dea88267eaea26d8c43380  gcc/testsuite/gcc.target/powerpc/gnuattr1.c
  df3448b5306ef9e06b44d7414e6a12ff  gcc/testsuite/gcc.target/powerpc/gnuattr2.c
  b0289eef57a41f5bdbb7823fee56214b  gcc/testsuite/gcc.target/powerpc/gnuattr3.c
! 9af14d5dfa11a1cc8018bd66b0978df8  gcc/testsuite/gcc.target/powerpc/htm-1.c
  95e15b8f67722f785f9cc961f2fc1f4c  gcc/testsuite/gcc.target/powerpc/htm-builtin-1.c
  5aacca7a653e58dd2b7d92bf9eaf7c33  gcc/testsuite/gcc.target/powerpc/htm-tabort-no-r0.c
  8d5e823f5228a4c59dc5e2f2aebe106f  gcc/testsuite/gcc.target/powerpc/htm-ttest.c
  b777ef2a10f6f5ff643ab886bf487233  gcc/testsuite/gcc.target/powerpc/htm-xl-intrin-1.c
  8d634b2a7d443f1e5b4b69716e57ac00  gcc/testsuite/gcc.target/powerpc/indexed-addr.c
  1cc843325d44861ca12b01f8232baced  gcc/testsuite/gcc.target/powerpc/inf128-1.c
! 6ffc88ec7c7f4d33f739e8767efbd023  gcc/testsuite/gcc.target/powerpc/int_128bit-runnable.c
  2cfd2ecd43230367d6d063b77664e314  gcc/testsuite/gcc.target/powerpc/le-altivec-consts.c
  7893fdf7b4681a84cb4d049bea9ffc10  gcc/testsuite/gcc.target/powerpc/leaf.c
  9d79c9715a5734121e7d5c8fa078a7df  gcc/testsuite/gcc.target/powerpc/lhs-1.c
*************** edd0512cd703018bda99c607e742ce2c  gcc/te
*** 66952,66965 ****
  be1c76ec79fb3c50cde115977877bc10  gcc/testsuite/gcc.target/powerpc/loop_align.c
  997888f97d97b2d6b3f8334578cdef8e  gcc/testsuite/gcc.target/powerpc/lsbb-runnable.c
  5f4e4a164e3c5d09cd44b230ee696aec  gcc/testsuite/gcc.target/powerpc/lsbb.c
! c69349fd2d4121ceb9ea7f49ba88582a  gcc/testsuite/gcc.target/powerpc/lvsl-lvsr.c
  6d76189401236bc0e8bdfcc728160312  gcc/testsuite/gcc.target/powerpc/m128-check.h
  95f0a3ed470b480e62e5510f13cd33b8  gcc/testsuite/gcc.target/powerpc/macho-lo-sum.c
  baa1c96a04108c49c5c268ec5064328b  gcc/testsuite/gcc.target/powerpc/maddld-1.c
  e0e14ff5cc47e2735efaf83f4740e789  gcc/testsuite/gcc.target/powerpc/maddld.c
  9db67e8f35964a8ae2afb7840142608c  gcc/testsuite/gcc.target/powerpc/medium_offset.c
  c54f25d14eb461caec02d191c2115a57  gcc/testsuite/gcc.target/powerpc/mma-alignment.c
  1256ac93816d8a1e4a1b5590e2a84582  gcc/testsuite/gcc.target/powerpc/mma-builtin-1.c
  3d37afc338716bb9ee2ca06fed6f0f05  gcc/testsuite/gcc.target/powerpc/mma-builtin-2.c
  9dd372b54a73f5146abf4b2c46c340e4  gcc/testsuite/gcc.target/powerpc/mma-builtin-3.c
  f4cbe6fbc7caba42b9286ef3ca8f8454  gcc/testsuite/gcc.target/powerpc/mma-builtin-4.c
--- 70638,70654 ----
  be1c76ec79fb3c50cde115977877bc10  gcc/testsuite/gcc.target/powerpc/loop_align.c
  997888f97d97b2d6b3f8334578cdef8e  gcc/testsuite/gcc.target/powerpc/lsbb-runnable.c
  5f4e4a164e3c5d09cd44b230ee696aec  gcc/testsuite/gcc.target/powerpc/lsbb.c
! d979def6d9086fac6816dc4cefcbe6c8  gcc/testsuite/gcc.target/powerpc/lvsl-lvsr.c
  6d76189401236bc0e8bdfcc728160312  gcc/testsuite/gcc.target/powerpc/m128-check.h
  95f0a3ed470b480e62e5510f13cd33b8  gcc/testsuite/gcc.target/powerpc/macho-lo-sum.c
  baa1c96a04108c49c5c268ec5064328b  gcc/testsuite/gcc.target/powerpc/maddld-1.c
  e0e14ff5cc47e2735efaf83f4740e789  gcc/testsuite/gcc.target/powerpc/maddld.c
  9db67e8f35964a8ae2afb7840142608c  gcc/testsuite/gcc.target/powerpc/medium_offset.c
+ d51da733b009628967519db76163894b  gcc/testsuite/gcc.target/powerpc/mffscrni_p9.c
  c54f25d14eb461caec02d191c2115a57  gcc/testsuite/gcc.target/powerpc/mma-alignment.c
  1256ac93816d8a1e4a1b5590e2a84582  gcc/testsuite/gcc.target/powerpc/mma-builtin-1.c
+ 241a50106f7cfc691800dc485f126b78  gcc/testsuite/gcc.target/powerpc/mma-builtin-10-pair.c
+ 6397c3deca8e8fd5510deec4125dd601  gcc/testsuite/gcc.target/powerpc/mma-builtin-10-quad.c
  3d37afc338716bb9ee2ca06fed6f0f05  gcc/testsuite/gcc.target/powerpc/mma-builtin-2.c
  9dd372b54a73f5146abf4b2c46c340e4  gcc/testsuite/gcc.target/powerpc/mma-builtin-3.c
  f4cbe6fbc7caba42b9286ef3ca8f8454  gcc/testsuite/gcc.target/powerpc/mma-builtin-4.c
*************** bc09ccd31ca386dda15202c6adf9371a  gcc/te
*** 67013,67018 ****
--- 70702,70712 ----
  44ea7227a4af1aed1643b840469d076d  gcc/testsuite/gcc.target/powerpc/mmx-punpcklwd-1.c
  180bf46e92dd9c837dbbc9cb04dd70c9  gcc/testsuite/gcc.target/powerpc/mod-1.c
  f86f87dd7c82f05785a8e530a4718235  gcc/testsuite/gcc.target/powerpc/mod-2.c
+ b3bf87376bd60d32d00ef203e1cf7d6e  gcc/testsuite/gcc.target/powerpc/mod-vectorize.c
+ 2a62a820771528492abcb2b5b082d93d  gcc/testsuite/gcc.target/powerpc/mul-vectorize-1.c
+ 0756792d071f22b4d0d92c56ab912d25  gcc/testsuite/gcc.target/powerpc/mul-vectorize-2.c
+ 64af73bfe790036cc6a9cae813ae5517  gcc/testsuite/gcc.target/powerpc/mul-vectorize-3.c
+ fb4a75732e13475e8348aaa599f24ca9  gcc/testsuite/gcc.target/powerpc/mul-vectorize-4.c
  4eaddf22e0f22b514f7215226f16b76c  gcc/testsuite/gcc.target/powerpc/mulkc3-1.c
  1549b9373bc2fd4008625c3dfbefb007  gcc/testsuite/gcc.target/powerpc/mulkc3-2.c
  18aac6a2b165d96b59c08a6941c593dd  gcc/testsuite/gcc.target/powerpc/mulkc3-3.c
*************** b96c1a1a69bfb6f4e16a5153a31d50f7  gcc/te
*** 67028,67037 ****
  292aefe9bc5de9087844ad9ea6142eba  gcc/testsuite/gcc.target/powerpc/optimize-bswapsi-2.c
  582d7bb7e4106b5cb9134d552025a68e  gcc/testsuite/gcc.target/powerpc/outofline_rnreg.c
  6a702c02bd87ec8a44c18c117a4a5a09  gcc/testsuite/gcc.target/powerpc/p10-arch31.c
  9c56caddea7ae0680f831cbc5cf18478  gcc/testsuite/gcc.target/powerpc/p10-identify.c
  01797cdaaa29a1c3b7afa60542008236  gcc/testsuite/gcc.target/powerpc/p10-vdivq-vmodq.c
  6b3fcb3de6af2c0b3ca86ded91487247  gcc/testsuite/gcc.target/powerpc/p8-vec-xl-xst-v2.c
! b75815fd7a895d145154b5cf0c68e549  gcc/testsuite/gcc.target/powerpc/p8-vec-xl-xst.c
  8bea7369d1f259b76c9b70c7f551336b  gcc/testsuite/gcc.target/powerpc/p8vector-builtin-1.c
  238ee777bf6e13883524d20baf33d114  gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
  e9f047a5ded9754c5264e90f2eda9634  gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
--- 70722,70735 ----
  292aefe9bc5de9087844ad9ea6142eba  gcc/testsuite/gcc.target/powerpc/optimize-bswapsi-2.c
  582d7bb7e4106b5cb9134d552025a68e  gcc/testsuite/gcc.target/powerpc/outofline_rnreg.c
  6a702c02bd87ec8a44c18c117a4a5a09  gcc/testsuite/gcc.target/powerpc/p10-arch31.c
+ 5bd451d60d35b10fdc53c34a20b06de4  gcc/testsuite/gcc.target/powerpc/p10-bifs-vectorize-1.c
+ 8146fa4167bbb25230a315064dba5646  gcc/testsuite/gcc.target/powerpc/p10-bifs-vectorize-1.h
+ 0eb8d7ac53ad9776863e302b1988e792  gcc/testsuite/gcc.target/powerpc/p10-bifs-vectorize-run-1.c
  9c56caddea7ae0680f831cbc5cf18478  gcc/testsuite/gcc.target/powerpc/p10-identify.c
  01797cdaaa29a1c3b7afa60542008236  gcc/testsuite/gcc.target/powerpc/p10-vdivq-vmodq.c
+ 7780b667e143b7a27c0d0e2bd81ed8e4  gcc/testsuite/gcc.target/powerpc/p10_vec_xl_sext.c
  6b3fcb3de6af2c0b3ca86ded91487247  gcc/testsuite/gcc.target/powerpc/p8-vec-xl-xst-v2.c
! 54ba74546331eea6e76dd0101295232f  gcc/testsuite/gcc.target/powerpc/p8-vec-xl-xst.c
  8bea7369d1f259b76c9b70c7f551336b  gcc/testsuite/gcc.target/powerpc/p8vector-builtin-1.c
  238ee777bf6e13883524d20baf33d114  gcc/testsuite/gcc.target/powerpc/p8vector-builtin-2.c
  e9f047a5ded9754c5264e90f2eda9634  gcc/testsuite/gcc.target/powerpc/p8vector-builtin-3.c
*************** b98e9e294f5e7e979ffc1acb72861484  gcc/te
*** 67058,67063 ****
--- 70756,70762 ----
  cf1b99547521c33d8d864faace781136  gcc/testsuite/gcc.target/powerpc/p9-extract-4.c
  6678d47ce9b81883fb0b45e6c5d6c333  gcc/testsuite/gcc.target/powerpc/p9-fpcvt-1.c
  18cbd19f91352b7a14be01bcbd86d924  gcc/testsuite/gcc.target/powerpc/p9-fpcvt-2.c
+ 5b4bf2e56d3df300c0400a9aadc7e1fc  gcc/testsuite/gcc.target/powerpc/p9-fpcvt-3.c
  4d8c4ecfe3669d8687af38cc0c4f3a7a  gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-1.c
  3fb5bcfc98e67635f5ecdd53a0fc1a4d  gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-2.c
  414edff1c1c6bb5fdc10af42b236acf0  gcc/testsuite/gcc.target/powerpc/p9-lxvx-stxvx-3.c
*************** eba9fb2ef8829b4f12eb280c7bdf546b  gcc/te
*** 67088,67094 ****
  61e552d417782e245d4e82c437d23974  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-4.c
  3fa98625eb1aca5e5de550a027af26ab  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-5.c
  e3d0df1fe70a1a16f61af01a0541b590  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-6.c
! 2ed902e6a35be029c1294e839ad3a0f6  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-7.c
  140e9ccca6e080ac87e45aa4eca7f44f  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-8.c
  661823bc37a352c7a0284caefaf94ad3  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-run-1.c
  c93356c7aed0735689569396e6f3134e  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-run-2.c
--- 70787,70793 ----
  61e552d417782e245d4e82c437d23974  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-4.c
  3fa98625eb1aca5e5de550a027af26ab  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-5.c
  e3d0df1fe70a1a16f61af01a0541b590  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-6.c
! 3b95eb0e16f740c59fed518b1061aafd  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-7.c
  140e9ccca6e080ac87e45aa4eca7f44f  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-8.c
  661823bc37a352c7a0284caefaf94ad3  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-run-1.c
  c93356c7aed0735689569396e6f3134e  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-run-2.c
*************** b2622014ac647ae93ca6a19d4a0f6e63  gcc/te
*** 67104,67110 ****
  e3a4c5a3f53fd1f78bbff95301a9a0f3  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-4.c
  a619bdf3d50595136050c6201d6a33d5  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-5.c
  dd4a9f2f07298325bccd0457959de0aa  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-6.c
! e91a9930ace643bb1e055207643380c2  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-7.c
  3ddfe6216b76faa377fb67e65f91b4dd  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-8.c
  347f7ced5af84328cec5b76767c2dfd0  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-run-1.c
  6011bbefd012a5722b03bf23fc01c8b7  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-run-2.c
--- 70803,70809 ----
  e3a4c5a3f53fd1f78bbff95301a9a0f3  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-4.c
  a619bdf3d50595136050c6201d6a33d5  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-5.c
  dd4a9f2f07298325bccd0457959de0aa  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-6.c
! abd5542b140772430f89fdc57f0f9b17  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-7.c
  3ddfe6216b76faa377fb67e65f91b4dd  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-8.c
  347f7ced5af84328cec5b76767c2dfd0  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-run-1.c
  6011bbefd012a5722b03bf23fc01c8b7  gcc/testsuite/gcc.target/powerpc/p9-vec-length-full-run-2.c
*************** f3bcfcd71339225d3b3fc35393553b55  gcc/te
*** 67166,67177 ****
  b818a05f9892ef086f53347beb95c5ab  gcc/testsuite/gcc.target/powerpc/popcount-1.c
  a1ca0398bda92fa2d58fffbdae74b412  gcc/testsuite/gcc.target/powerpc/popcount-2.c
  765612a7627c33c6b923cafa4b6f8492  gcc/testsuite/gcc.target/powerpc/popcount-3.c
! 4cd22361ae086706493b2b15c0f30535  gcc/testsuite/gcc.target/powerpc/powerpc.exp
  7b955220897e3c489f9cc6a3dfbb95eb  gcc/testsuite/gcc.target/powerpc/ppc-and-1.c
  d6e0d31ab4778feea50f0fdf0f3bcd89  gcc/testsuite/gcc.target/powerpc/ppc-bitfield1.c
  1ea7507881ba72f6b3c6548f30014d46  gcc/testsuite/gcc.target/powerpc/ppc-compare-1.c
  eb292fb2a4549af4ab49b7d224995874  gcc/testsuite/gcc.target/powerpc/ppc-eabi.c
! 0701f9c78ba972a8b3eafece3a3366ae  gcc/testsuite/gcc.target/powerpc/ppc-eq0-1.c
  174619a54d2d2cad26b5d4344c198caf  gcc/testsuite/gcc.target/powerpc/ppc-fma-1.c
  161ddb30bd440e60cf51f1a8898084be  gcc/testsuite/gcc.target/powerpc/ppc-fma-2.c
  80e507a2bc6a5fbc6c66489da482fd61  gcc/testsuite/gcc.target/powerpc/ppc-fma-3.c
--- 70865,70876 ----
  b818a05f9892ef086f53347beb95c5ab  gcc/testsuite/gcc.target/powerpc/popcount-1.c
  a1ca0398bda92fa2d58fffbdae74b412  gcc/testsuite/gcc.target/powerpc/popcount-2.c
  765612a7627c33c6b923cafa4b6f8492  gcc/testsuite/gcc.target/powerpc/popcount-3.c
! cd89f68d37fa789646b1c1e491565ff3  gcc/testsuite/gcc.target/powerpc/powerpc.exp
  7b955220897e3c489f9cc6a3dfbb95eb  gcc/testsuite/gcc.target/powerpc/ppc-and-1.c
  d6e0d31ab4778feea50f0fdf0f3bcd89  gcc/testsuite/gcc.target/powerpc/ppc-bitfield1.c
  1ea7507881ba72f6b3c6548f30014d46  gcc/testsuite/gcc.target/powerpc/ppc-compare-1.c
  eb292fb2a4549af4ab49b7d224995874  gcc/testsuite/gcc.target/powerpc/ppc-eabi.c
! b97e549025a26b86ea8a65a3806e6b3c  gcc/testsuite/gcc.target/powerpc/ppc-eq0-1.c
  174619a54d2d2cad26b5d4344c198caf  gcc/testsuite/gcc.target/powerpc/ppc-fma-1.c
  161ddb30bd440e60cf51f1a8898084be  gcc/testsuite/gcc.target/powerpc/ppc-fma-2.c
  80e507a2bc6a5fbc6c66489da482fd61  gcc/testsuite/gcc.target/powerpc/ppc-fma-3.c
*************** dbe8b7a61a7368d65f67bfc4131425cf  gcc/te
*** 67183,67189 ****
  b49bfc8892e32ccd4715b924f41106d6  gcc/testsuite/gcc.target/powerpc/ppc-fmadd-2.c
  90d042fffee10d77e01ab7cf9fcbb7c1  gcc/testsuite/gcc.target/powerpc/ppc-fmadd-3.c
  546f8b1533e6aef90ce72768fe282cb0  gcc/testsuite/gcc.target/powerpc/ppc-fortran/ieee128-math.f90
! 8a82f6ad39191bff0cbbf0171bdf7062  gcc/testsuite/gcc.target/powerpc/ppc-fortran/ppc-fortran.exp
  d8dee8628be2277beaeffe1850a700cd  gcc/testsuite/gcc.target/powerpc/ppc-fortran/pr80108-1.f90
  164d50a721edad82a9cd9f4b63b1b8f9  gcc/testsuite/gcc.target/powerpc/ppc-fpconv-1.c
  98f6990b548a4e10341ee0039997e942  gcc/testsuite/gcc.target/powerpc/ppc-fpconv-10.c
--- 70882,70889 ----
  b49bfc8892e32ccd4715b924f41106d6  gcc/testsuite/gcc.target/powerpc/ppc-fmadd-2.c
  90d042fffee10d77e01ab7cf9fcbb7c1  gcc/testsuite/gcc.target/powerpc/ppc-fmadd-3.c
  546f8b1533e6aef90ce72768fe282cb0  gcc/testsuite/gcc.target/powerpc/ppc-fortran/ieee128-math.f90
! 7fdb5eba51fa57cb7495f8f9cd302009  gcc/testsuite/gcc.target/powerpc/ppc-fortran/ppc-fortran.exp
! 52ce6ab70ec07f3c0a8847b56ee3e297  gcc/testsuite/gcc.target/powerpc/ppc-fortran/pr102767.f90
  d8dee8628be2277beaeffe1850a700cd  gcc/testsuite/gcc.target/powerpc/ppc-fortran/pr80108-1.f90
  164d50a721edad82a9cd9f4b63b1b8f9  gcc/testsuite/gcc.target/powerpc/ppc-fpconv-1.c
  98f6990b548a4e10341ee0039997e942  gcc/testsuite/gcc.target/powerpc/ppc-fpconv-10.c
*************** dbe9c3e7d16bae3701df27a7f9304d99  gcc/te
*** 67203,67209 ****
  8f84393344fab9c8c91db0c532f8f539  gcc/testsuite/gcc.target/powerpc/ppc-ldstruct.c
  efe59fde7a8f03c918b86cf42c38e8b8  gcc/testsuite/gcc.target/powerpc/ppc-mftb.c
  a4dee1048349abab9fe2b7deb322f7e9  gcc/testsuite/gcc.target/powerpc/ppc-mov-1.c
! 7809b5c86da3b3f2ffe2c51fd4d229ba  gcc/testsuite/gcc.target/powerpc/ppc-ne0-1.c
  8296a3d02aa27f1b6b67df7b3cf793d6  gcc/testsuite/gcc.target/powerpc/ppc-negeq0-1.c
  6b09e7266618e801c185fac6b9279725  gcc/testsuite/gcc.target/powerpc/ppc-paired.c
  e6fc3dbdad2c38eeb480490d619f3681  gcc/testsuite/gcc.target/powerpc/ppc-pow.c
--- 70903,70910 ----
  8f84393344fab9c8c91db0c532f8f539  gcc/testsuite/gcc.target/powerpc/ppc-ldstruct.c
  efe59fde7a8f03c918b86cf42c38e8b8  gcc/testsuite/gcc.target/powerpc/ppc-mftb.c
  a4dee1048349abab9fe2b7deb322f7e9  gcc/testsuite/gcc.target/powerpc/ppc-mov-1.c
! 3d3e37d1bfddb596aed4d9d7cc7c1403  gcc/testsuite/gcc.target/powerpc/ppc-ne0-1.c
! b7322913d151f09caa41a4c0c0b086ea  gcc/testsuite/gcc.target/powerpc/ppc-ne0-2.c
  8296a3d02aa27f1b6b67df7b3cf793d6  gcc/testsuite/gcc.target/powerpc/ppc-negeq0-1.c
  6b09e7266618e801c185fac6b9279725  gcc/testsuite/gcc.target/powerpc/ppc-paired.c
  e6fc3dbdad2c38eeb480490d619f3681  gcc/testsuite/gcc.target/powerpc/ppc-pow.c
*************** a6e21370123ecb1a98797a75ca96e737  gcc/te
*** 67227,67255 ****
  7636aebceecd743b7345e76beaab07e5  gcc/testsuite/gcc.target/powerpc/ppc64-abi-2.c
  561207b57149870f661ea7f3995e39a1  gcc/testsuite/gcc.target/powerpc/ppc64-abi-3.c
  b6bd72515ca594257e5ab11b307231e8  gcc/testsuite/gcc.target/powerpc/ppc64-abi-dfp-1.c
- 5e3b335999dc29936adcee2aa5ca09a9  gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-1.c
- b95306db26317001da627a5976237502  gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-2.c
- e644ef57e549ba6b46da5cb2d302203f  gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-3.c
  8d1bb8d348bbbd1468a4518fcfc930da  gcc/testsuite/gcc.target/powerpc/ppc64-double-1.c
  322275a6e18c464401bb8e7d050b7539  gcc/testsuite/gcc.target/powerpc/ppc64-toc.c
  a64bd4e47397af3253bc9e8dc2c56780  gcc/testsuite/gcc.target/powerpc/ppu-intrinsics.c
  5ccf50d6af741aec776b2d54411331d5  gcc/testsuite/gcc.target/powerpc/pr100777.c
  93530f0352e114499a2243d7a2a63830  gcc/testsuite/gcc.target/powerpc/pr101129.c
  98ac1105d04b59ee48240bf0f7de65df  gcc/testsuite/gcc.target/powerpc/pr101324.c
  c5b190f8976eee8b644b3fa33d5ebbb2  gcc/testsuite/gcc.target/powerpc/pr101849.c
  fef209ac364aa52b3c1bab51422d611c  gcc/testsuite/gcc.target/powerpc/pr101985-1.c
! bbe41009113780dbcd6527cbec5f943c  gcc/testsuite/gcc.target/powerpc/pr101985-2.c
  a192830e09e3a3d8478a89f2b2add0ff  gcc/testsuite/gcc.target/powerpc/pr102347.c
  0726fc47d5d46d095efa95b874637be7  gcc/testsuite/gcc.target/powerpc/pr102976.c
  20a7942f4601125d17110951f0d9d799  gcc/testsuite/gcc.target/powerpc/pr103627-1.c
  75bf709f259ebd7bb4ea3bb9e4c7a6e3  gcc/testsuite/gcc.target/powerpc/pr103627-2.c
  173204ae2ee9c78ee24b407929800cd8  gcc/testsuite/gcc.target/powerpc/pr103627-3.c
  b7339ab4137e4c5175deca053bb790c8  gcc/testsuite/gcc.target/powerpc/pr104208-1.c
  7dff0a95f65947b541c04da0c7b307a5  gcc/testsuite/gcc.target/powerpc/pr104208-2.c
  76860a5a20e1c892c05c24cdc70fe3c2  gcc/testsuite/gcc.target/powerpc/pr104253.c
  db72de734e5e70d9f1ed20b5a54e7a2a  gcc/testsuite/gcc.target/powerpc/pr104894-2.c
  bc8ea782345dbe874b74f42d43945922  gcc/testsuite/gcc.target/powerpc/pr104894.c
  3c6d84405eb197341e1b506784b6c749  gcc/testsuite/gcc.target/powerpc/pr104923.c
  c2f6d6cf82ef4931619d09e10a0a72aa  gcc/testsuite/gcc.target/powerpc/pr16155.c
  396ae287e72ecdda51bb3157818030a9  gcc/testsuite/gcc.target/powerpc/pr16286.c
  198d8a69d2887e8fadcb050d90e21aa6  gcc/testsuite/gcc.target/powerpc/pr16458-1.c
--- 70928,70978 ----
  7636aebceecd743b7345e76beaab07e5  gcc/testsuite/gcc.target/powerpc/ppc64-abi-2.c
  561207b57149870f661ea7f3995e39a1  gcc/testsuite/gcc.target/powerpc/ppc64-abi-3.c
  b6bd72515ca594257e5ab11b307231e8  gcc/testsuite/gcc.target/powerpc/ppc64-abi-dfp-1.c
  8d1bb8d348bbbd1468a4518fcfc930da  gcc/testsuite/gcc.target/powerpc/ppc64-double-1.c
  322275a6e18c464401bb8e7d050b7539  gcc/testsuite/gcc.target/powerpc/ppc64-toc.c
  a64bd4e47397af3253bc9e8dc2c56780  gcc/testsuite/gcc.target/powerpc/ppu-intrinsics.c
+ ef3b097387678432aef397a313268021  gcc/testsuite/gcc.target/powerpc/pr100085.c
  5ccf50d6af741aec776b2d54411331d5  gcc/testsuite/gcc.target/powerpc/pr100777.c
  93530f0352e114499a2243d7a2a63830  gcc/testsuite/gcc.target/powerpc/pr101129.c
  98ac1105d04b59ee48240bf0f7de65df  gcc/testsuite/gcc.target/powerpc/pr101324.c
+ 49e2861f8bafbfa8fb4beaf059a21224  gcc/testsuite/gcc.target/powerpc/pr101384-1.c
+ 703ab858eeafc240a8f44fad795671a0  gcc/testsuite/gcc.target/powerpc/pr101384-2.c
+ 2defd7a4f1a3a146b7a4bb52e394d4af  gcc/testsuite/gcc.target/powerpc/pr101596-1.c
+ dcc4eac3d42ed0904a410de41ce14d66  gcc/testsuite/gcc.target/powerpc/pr101596-2.c
+ e43ef13018c5e5bb2d9e1b0dbfd705a3  gcc/testsuite/gcc.target/powerpc/pr101596-3.c
  c5b190f8976eee8b644b3fa33d5ebbb2  gcc/testsuite/gcc.target/powerpc/pr101849.c
  fef209ac364aa52b3c1bab51422d611c  gcc/testsuite/gcc.target/powerpc/pr101985-1.c
! 42c1b07a9ed8169c4832f989cb8068eb  gcc/testsuite/gcc.target/powerpc/pr101985-2.c
! a71d80353dd79a03e464836b916549b6  gcc/testsuite/gcc.target/powerpc/pr102059-1.c
! 94c2af3bf8a9ce35c82decfd95b058d8  gcc/testsuite/gcc.target/powerpc/pr102059-2.c
! 4e556a24574c4780119e8606d9a9efc5  gcc/testsuite/gcc.target/powerpc/pr102059-3.c
! 44902c9cb97c670e5464767472368e1f  gcc/testsuite/gcc.target/powerpc/pr102239.c
  a192830e09e3a3d8478a89f2b2add0ff  gcc/testsuite/gcc.target/powerpc/pr102347.c
+ 5ac11cd9704215864ed137e674a41285  gcc/testsuite/gcc.target/powerpc/pr102868.c
  0726fc47d5d46d095efa95b874637be7  gcc/testsuite/gcc.target/powerpc/pr102976.c
+ 848df019550d5cc820772a40ac5a43de  gcc/testsuite/gcc.target/powerpc/pr103124.c
+ 0a52159bfa51b1365996904b04ac429e  gcc/testsuite/gcc.target/powerpc/pr103127.c
+ 4a0d8fa948f1e42c9d8e4482f83147b5  gcc/testsuite/gcc.target/powerpc/pr103515.c
  20a7942f4601125d17110951f0d9d799  gcc/testsuite/gcc.target/powerpc/pr103627-1.c
  75bf709f259ebd7bb4ea3bb9e4c7a6e3  gcc/testsuite/gcc.target/powerpc/pr103627-2.c
  173204ae2ee9c78ee24b407929800cd8  gcc/testsuite/gcc.target/powerpc/pr103627-3.c
+ cb6e7330d4dd26c88108858950fb503f  gcc/testsuite/gcc.target/powerpc/pr103702.c
+ 4c5fec3c22510255ca3a019ae8a8db95  gcc/testsuite/gcc.target/powerpc/pr104015-1.c
+ b8b074d85922e675276b730f8e4cee82  gcc/testsuite/gcc.target/powerpc/pr104015-2.c
  b7339ab4137e4c5175deca053bb790c8  gcc/testsuite/gcc.target/powerpc/pr104208-1.c
  7dff0a95f65947b541c04da0c7b307a5  gcc/testsuite/gcc.target/powerpc/pr104208-2.c
+ f6ac3c27283c48efaf0d82dfeb54c5bd  gcc/testsuite/gcc.target/powerpc/pr104239-1.c
+ 97f7181aacfdfde9e170de93028d3af8  gcc/testsuite/gcc.target/powerpc/pr104239-2.c
+ df3d484780813f669a79bf679fb169af  gcc/testsuite/gcc.target/powerpc/pr104239-3.c
  76860a5a20e1c892c05c24cdc70fe3c2  gcc/testsuite/gcc.target/powerpc/pr104253.c
+ 2b6918b6554ea8bb4c4efc7647cb4607  gcc/testsuite/gcc.target/powerpc/pr104698-1.c
+ 1e6dbb90d53667be975092bccd5b339f  gcc/testsuite/gcc.target/powerpc/pr104698-2.c
+ 9a808339fd965b70f658340d20c28253  gcc/testsuite/gcc.target/powerpc/pr104778.c
  db72de734e5e70d9f1ed20b5a54e7a2a  gcc/testsuite/gcc.target/powerpc/pr104894-2.c
  bc8ea782345dbe874b74f42d43945922  gcc/testsuite/gcc.target/powerpc/pr104894.c
  3c6d84405eb197341e1b506784b6c749  gcc/testsuite/gcc.target/powerpc/pr104923.c
+ 85d4f791b2093e7fd29ce51247a7fbbb  gcc/testsuite/gcc.target/powerpc/pr105271.c
+ 2d8d540a24bba783fff809d640c23d00  gcc/testsuite/gcc.target/powerpc/pr105334.c
  c2f6d6cf82ef4931619d09e10a0a72aa  gcc/testsuite/gcc.target/powerpc/pr16155.c
  396ae287e72ecdda51bb3157818030a9  gcc/testsuite/gcc.target/powerpc/pr16286.c
  198d8a69d2887e8fadcb050d90e21aa6  gcc/testsuite/gcc.target/powerpc/pr16458-1.c
*************** de09210d456b5ec489b5febb07484cd5  gcc/te
*** 67307,67313 ****
  d40a51962a039d2508b9b3e8ce82ac22  gcc/testsuite/gcc.target/powerpc/pr54240.c
  853064cbe6e6b358b4e72923e94ee354  gcc/testsuite/gcc.target/powerpc/pr55033.c
  e4531bd522b146b22bdbf991fc3d207e  gcc/testsuite/gcc.target/powerpc/pr56256.c
! 06b97cdf9d860658e7a50666e9b1d545  gcc/testsuite/gcc.target/powerpc/pr56605.c
  be37d527321d015059e346e469f7e0e4  gcc/testsuite/gcc.target/powerpc/pr57150.c
  7a49a99d1d678fcb8065029344b893d5  gcc/testsuite/gcc.target/powerpc/pr57363.c
  84af6f269cb613d7abad750c2b136798  gcc/testsuite/gcc.target/powerpc/pr57744.c
--- 71030,71036 ----
  d40a51962a039d2508b9b3e8ce82ac22  gcc/testsuite/gcc.target/powerpc/pr54240.c
  853064cbe6e6b358b4e72923e94ee354  gcc/testsuite/gcc.target/powerpc/pr55033.c
  e4531bd522b146b22bdbf991fc3d207e  gcc/testsuite/gcc.target/powerpc/pr56256.c
! 2e9e477f44f5b935e874f48d7ed9bf1b  gcc/testsuite/gcc.target/powerpc/pr56605.c
  be37d527321d015059e346e469f7e0e4  gcc/testsuite/gcc.target/powerpc/pr57150.c
  7a49a99d1d678fcb8065029344b893d5  gcc/testsuite/gcc.target/powerpc/pr57363.c
  84af6f269cb613d7abad750c2b136798  gcc/testsuite/gcc.target/powerpc/pr57744.c
*************** ea28759e6ccde5366d95808602337571  gcc/te
*** 67319,67326 ****
  71efa814e2df5fb65075309616e87141  gcc/testsuite/gcc.target/powerpc/pr59054.c
  e2be005a17035d4d4c6269830259fd72  gcc/testsuite/gcc.target/powerpc/pr60032.c
  f7e744d22854f13c66364fe3a722086f  gcc/testsuite/gcc.target/powerpc/pr60137.c
! 31056464243f248a7ecb83a996982e9e  gcc/testsuite/gcc.target/powerpc/pr60203.c
  5364c7cd89460e7ab273bea540e3a8ac  gcc/testsuite/gcc.target/powerpc/pr60676.c
  20ff46b0608216382ea6e9abd325e184  gcc/testsuite/gcc.target/powerpc/pr61977-1.c
  a8716538a35e149e6421a6a569b0d882  gcc/testsuite/gcc.target/powerpc/pr61977-2.c
  ec239ff2532cd3a33358fe0d15483672  gcc/testsuite/gcc.target/powerpc/pr62147.c
--- 71042,71050 ----
  71efa814e2df5fb65075309616e87141  gcc/testsuite/gcc.target/powerpc/pr59054.c
  e2be005a17035d4d4c6269830259fd72  gcc/testsuite/gcc.target/powerpc/pr60032.c
  f7e744d22854f13c66364fe3a722086f  gcc/testsuite/gcc.target/powerpc/pr60137.c
! 25cd2e4aec8072cfa79bf5aba7c64182  gcc/testsuite/gcc.target/powerpc/pr60203.c
  5364c7cd89460e7ab273bea540e3a8ac  gcc/testsuite/gcc.target/powerpc/pr60676.c
+ 8d3043f8e784226d4ad699f3ddca5838  gcc/testsuite/gcc.target/powerpc/pr61837.c
  20ff46b0608216382ea6e9abd325e184  gcc/testsuite/gcc.target/powerpc/pr61977-1.c
  a8716538a35e149e6421a6a569b0d882  gcc/testsuite/gcc.target/powerpc/pr61977-2.c
  ec239ff2532cd3a33358fe0d15483672  gcc/testsuite/gcc.target/powerpc/pr62147.c
*************** a12535071d8f2b5ef1cd956e93153047  gcc/te
*** 67390,67395 ****
--- 71114,71120 ----
  6c92ebd0815729233bf7f336cbc77669  gcc/testsuite/gcc.target/powerpc/pr78056-5.c
  c8e4d5ccb2226fba0ad28aadabb79509  gcc/testsuite/gcc.target/powerpc/pr78056-6.c
  7269e93e0c9a9d55e127430a45880a33  gcc/testsuite/gcc.target/powerpc/pr78056-7.c
+ 8147b78599f11589ae3053b11931b862  gcc/testsuite/gcc.target/powerpc/pr78102.c
  19e74ae8a63b24ab76c67fac9391c56f  gcc/testsuite/gcc.target/powerpc/pr78543.c
  0de8a5a6a228e4e540faf3f17739b976  gcc/testsuite/gcc.target/powerpc/pr78604.c
  1234f158984bdca5449a39cefc26a2dd  gcc/testsuite/gcc.target/powerpc/pr78658.c
*************** d898a03a0134d7a17ff89a9859557dc9  gcc/te
*** 67431,67442 ****
  0c08f4c83d90538f2c1ff74965ce6a2b  gcc/testsuite/gcc.target/powerpc/pr80210-2.c
  32dc6ec7c4a1a3cefe2efbb3b602ef2c  gcc/testsuite/gcc.target/powerpc/pr80210.c
  c74100b0e24e645cbd51ff8d93f11730  gcc/testsuite/gcc.target/powerpc/pr80246.c
! bf252b3f3ac1c5e65c691cdf4966081f  gcc/testsuite/gcc.target/powerpc/pr80315-1.c
! 543f42cc5f33cb0db0ee5350dadbfac0  gcc/testsuite/gcc.target/powerpc/pr80315-2.c
! 183a3f95b41ff9517a574f5232f2ccc9  gcc/testsuite/gcc.target/powerpc/pr80315-3.c
! 9021b53332884d46bc7a45f2732c9cfd  gcc/testsuite/gcc.target/powerpc/pr80315-4.c
  8af068f1ab09bfab1dc3d577a5323267  gcc/testsuite/gcc.target/powerpc/pr80510-1.c
! baa21bdea8db67ccd8932516a045495a  gcc/testsuite/gcc.target/powerpc/pr80510-2.c
  40f60f56a44835bd8e62164e2ee5bae4  gcc/testsuite/gcc.target/powerpc/pr80695-p8.c
  94d63c15e6f0356b816561223154e670  gcc/testsuite/gcc.target/powerpc/pr80695-p9.c
  108087220b9696e57538163c0611f2d8  gcc/testsuite/gcc.target/powerpc/pr80718.c
--- 71156,71167 ----
  0c08f4c83d90538f2c1ff74965ce6a2b  gcc/testsuite/gcc.target/powerpc/pr80210-2.c
  32dc6ec7c4a1a3cefe2efbb3b602ef2c  gcc/testsuite/gcc.target/powerpc/pr80210.c
  c74100b0e24e645cbd51ff8d93f11730  gcc/testsuite/gcc.target/powerpc/pr80246.c
! b771808822184e96a1bfb5dd4b9982af  gcc/testsuite/gcc.target/powerpc/pr80315-1.c
! 45508630494f6952aac592225e4407a7  gcc/testsuite/gcc.target/powerpc/pr80315-2.c
! 68ef3456baf2ca91e7c82e55c2979a7e  gcc/testsuite/gcc.target/powerpc/pr80315-3.c
! 7cb95357fd758bb98f3da5781874ec5d  gcc/testsuite/gcc.target/powerpc/pr80315-4.c
  8af068f1ab09bfab1dc3d577a5323267  gcc/testsuite/gcc.target/powerpc/pr80510-1.c
! c76b6bf234b284bf433764fb13f37abf  gcc/testsuite/gcc.target/powerpc/pr80510-2.c
  40f60f56a44835bd8e62164e2ee5bae4  gcc/testsuite/gcc.target/powerpc/pr80695-p8.c
  94d63c15e6f0356b816561223154e670  gcc/testsuite/gcc.target/powerpc/pr80695-p9.c
  108087220b9696e57538163c0611f2d8  gcc/testsuite/gcc.target/powerpc/pr80718.c
*************** e44c3a66383281e8a9de6b32aa8b5e0f  gcc/te
*** 67446,67452 ****
  601307dac2aee8083d3f97edae2588d1  gcc/testsuite/gcc.target/powerpc/pr81833-1.c
  9288b1f38b6b8a17630ca31fada51991  gcc/testsuite/gcc.target/powerpc/pr81833-2.c
  8594eb52b8a7ff0cff5ca6a853090510  gcc/testsuite/gcc.target/powerpc/pr81959.c
! c44334ad53e7fd3fe5f49d0cc881d3d8  gcc/testsuite/gcc.target/powerpc/pr82015.c
  118dd26456facc5560611716506ec4a3  gcc/testsuite/gcc.target/powerpc/pr82112.c
  9d01972355938afb2a4de9ba1d316dc0  gcc/testsuite/gcc.target/powerpc/pr82333.c
  ea50ad0d71f532e863446139cc360b18  gcc/testsuite/gcc.target/powerpc/pr82748-1.c
--- 71171,71177 ----
  601307dac2aee8083d3f97edae2588d1  gcc/testsuite/gcc.target/powerpc/pr81833-1.c
  9288b1f38b6b8a17630ca31fada51991  gcc/testsuite/gcc.target/powerpc/pr81833-2.c
  8594eb52b8a7ff0cff5ca6a853090510  gcc/testsuite/gcc.target/powerpc/pr81959.c
! dd8032eeec85ca5024c17f5972f4e567  gcc/testsuite/gcc.target/powerpc/pr82015.c
  118dd26456facc5560611716506ec4a3  gcc/testsuite/gcc.target/powerpc/pr82112.c
  9d01972355938afb2a4de9ba1d316dc0  gcc/testsuite/gcc.target/powerpc/pr82333.c
  ea50ad0d71f532e863446139cc360b18  gcc/testsuite/gcc.target/powerpc/pr82748-1.c
*************** ea551d3ae1683b94dcf15935e3841a31  gcc/te
*** 67457,67463 ****
  454b0f87867ea7aa84d83652eeff7620  gcc/testsuite/gcc.target/powerpc/pr83660.C
  0e10d8c65b18afcf4138404e469c5288  gcc/testsuite/gcc.target/powerpc/pr83677.c
  649c25d197e82583d1f58ca7dc0e0b9b  gcc/testsuite/gcc.target/powerpc/pr83862.c
! 9ba71e6e5860c1d11c429ed5fc3374d3  gcc/testsuite/gcc.target/powerpc/pr83926.c
  88f706eef23e0ac23ef58bea3e3cf28a  gcc/testsuite/gcc.target/powerpc/pr83969.c
  864d120dc10ef939e30dca2faf8c357f  gcc/testsuite/gcc.target/powerpc/pr84014.c
  30a1a896107d295e2f08283d07a0ede8  gcc/testsuite/gcc.target/powerpc/pr84112.c
--- 71182,71188 ----
  454b0f87867ea7aa84d83652eeff7620  gcc/testsuite/gcc.target/powerpc/pr83660.C
  0e10d8c65b18afcf4138404e469c5288  gcc/testsuite/gcc.target/powerpc/pr83677.c
  649c25d197e82583d1f58ca7dc0e0b9b  gcc/testsuite/gcc.target/powerpc/pr83862.c
! 73347c1481c6d9c50f16f425d409c708  gcc/testsuite/gcc.target/powerpc/pr83926.c
  88f706eef23e0ac23ef58bea3e3cf28a  gcc/testsuite/gcc.target/powerpc/pr83969.c
  864d120dc10ef939e30dca2faf8c357f  gcc/testsuite/gcc.target/powerpc/pr84014.c
  30a1a896107d295e2f08283d07a0ede8  gcc/testsuite/gcc.target/powerpc/pr84112.c
*************** a366faf9f4600279f7a65c67c3d0fbae  gcc/te
*** 67480,67490 ****
  a350423ed93def71f8b093f25456d889  gcc/testsuite/gcc.target/powerpc/pr85755.c
  df4e314e536a2cc293edaee73e90fc21  gcc/testsuite/gcc.target/powerpc/pr86324-1.c
  b393d3f2f044e6fd8f631b7ab2551943  gcc/testsuite/gcc.target/powerpc/pr86324-2.c
! 7b4e655851dd78a5e9e6858816ee691f  gcc/testsuite/gcc.target/powerpc/pr86731-fwrapv-longlong.c
  363dc03cd34e833cf82185607e641246  gcc/testsuite/gcc.target/powerpc/pr86731-fwrapv.c
  68ee1d2248cb68728290b40312abd26d  gcc/testsuite/gcc.target/powerpc/pr86731-longlong.c
- 6e97774ab6d09738e5d8dd06e3c4dcd9  gcc/testsuite/gcc.target/powerpc/pr86731-nogimplefold-longlong.c
- 55a16982ec6aff0c8fed8cf1b7ecddd6  gcc/testsuite/gcc.target/powerpc/pr86731-nogimplefold.c
  8a2b25fb431e8663e2eac4a3ef707bc5  gcc/testsuite/gcc.target/powerpc/pr86731.c
  2e4d98e3c1f5582512e2e93c6f08edc4  gcc/testsuite/gcc.target/powerpc/pr86939.c
  d86d5375cd27e7c265ce5093d761b62e  gcc/testsuite/gcc.target/powerpc/pr87033.c
--- 71205,71213 ----
  a350423ed93def71f8b093f25456d889  gcc/testsuite/gcc.target/powerpc/pr85755.c
  df4e314e536a2cc293edaee73e90fc21  gcc/testsuite/gcc.target/powerpc/pr86324-1.c
  b393d3f2f044e6fd8f631b7ab2551943  gcc/testsuite/gcc.target/powerpc/pr86324-2.c
! 2f2590ee6bc7b97ecd4dfafb992693b1  gcc/testsuite/gcc.target/powerpc/pr86731-fwrapv-longlong.c
  363dc03cd34e833cf82185607e641246  gcc/testsuite/gcc.target/powerpc/pr86731-fwrapv.c
  68ee1d2248cb68728290b40312abd26d  gcc/testsuite/gcc.target/powerpc/pr86731-longlong.c
  8a2b25fb431e8663e2eac4a3ef707bc5  gcc/testsuite/gcc.target/powerpc/pr86731.c
  2e4d98e3c1f5582512e2e93c6f08edc4  gcc/testsuite/gcc.target/powerpc/pr86939.c
  d86d5375cd27e7c265ce5093d761b62e  gcc/testsuite/gcc.target/powerpc/pr87033.c
*************** f18720cbdd0b8efcbfe7252a88d19901  gcc/te
*** 67496,67502 ****
  a3fcebbcc49f4e8e80184966262e4f7c  gcc/testsuite/gcc.target/powerpc/pr87532-mc.c
  5fd4bcc0443a583aade647593b461bf0  gcc/testsuite/gcc.target/powerpc/pr87532.c
  53d85850aa1d585cffdde9ca76f1c992  gcc/testsuite/gcc.target/powerpc/pr87870.c
! cb0a8c588bb900030e2258e13d748a25  gcc/testsuite/gcc.target/powerpc/pr88100.c
  96eb5b3fd3f2812a018f01fd63b67f9b  gcc/testsuite/gcc.target/powerpc/pr88188-2.c
  9489612e4380ce85494a409bef20f69a  gcc/testsuite/gcc.target/powerpc/pr88188.c
  c75be0752698828e9a2843ce4464f296  gcc/testsuite/gcc.target/powerpc/pr88233.c
--- 71219,71225 ----
  a3fcebbcc49f4e8e80184966262e4f7c  gcc/testsuite/gcc.target/powerpc/pr87532-mc.c
  5fd4bcc0443a583aade647593b461bf0  gcc/testsuite/gcc.target/powerpc/pr87532.c
  53d85850aa1d585cffdde9ca76f1c992  gcc/testsuite/gcc.target/powerpc/pr87870.c
! 75a4fd06f807cbd3cddc0eea478e90f9  gcc/testsuite/gcc.target/powerpc/pr88100.c
  96eb5b3fd3f2812a018f01fd63b67f9b  gcc/testsuite/gcc.target/powerpc/pr88188-2.c
  9489612e4380ce85494a409bef20f69a  gcc/testsuite/gcc.target/powerpc/pr88188.c
  c75be0752698828e9a2843ce4464f296  gcc/testsuite/gcc.target/powerpc/pr88233.c
*************** c37f43ea14b9c2771195287a84b61d7f  gcc/te
*** 67509,67515 ****
  641d52f8caa1635a7b47a9370f9b19ed  gcc/testsuite/gcc.target/powerpc/pr89765-mc.c
  039b3daec7a36e9b0099349f1b5d95a6  gcc/testsuite/gcc.target/powerpc/pr90763.c
  1b66fd7b65ff295e707f90152d028d43  gcc/testsuite/gcc.target/powerpc/pr91275.c
! 2072d52286c6da2f18f4aee8fba55945  gcc/testsuite/gcc.target/powerpc/pr91903.c
  146b79d794c5eb5a94bc0cd961b416b6  gcc/testsuite/gcc.target/powerpc/pr92090-2.c
  b3e3f8dd7576caaad7cff1f382fd583d  gcc/testsuite/gcc.target/powerpc/pr92090.c
  abf60b23a4b3272b1199e405e7527ff8  gcc/testsuite/gcc.target/powerpc/pr92132-fp-1.c
--- 71232,71238 ----
  641d52f8caa1635a7b47a9370f9b19ed  gcc/testsuite/gcc.target/powerpc/pr89765-mc.c
  039b3daec7a36e9b0099349f1b5d95a6  gcc/testsuite/gcc.target/powerpc/pr90763.c
  1b66fd7b65ff295e707f90152d028d43  gcc/testsuite/gcc.target/powerpc/pr91275.c
! 2502ecccde580c13fb2950c76a613327  gcc/testsuite/gcc.target/powerpc/pr91903.c
  146b79d794c5eb5a94bc0cd961b416b6  gcc/testsuite/gcc.target/powerpc/pr92090-2.c
  b3e3f8dd7576caaad7cff1f382fd583d  gcc/testsuite/gcc.target/powerpc/pr92090.c
  abf60b23a4b3272b1199e405e7527ff8  gcc/testsuite/gcc.target/powerpc/pr92132-fp-1.c
*************** c187e0f1af6407257235b1bb9a2fb7ac  gcc/te
*** 67528,67535 ****
  bf5eef64bd13d358ccd4ecc20fc71dea  gcc/testsuite/gcc.target/powerpc/pr93012.c
  6ed2bd11c87cb97b53a02a6da437dd68  gcc/testsuite/gcc.target/powerpc/pr93073.c
  ffc3e49b879237e4c50decbfa7827c62  gcc/testsuite/gcc.target/powerpc/pr93122.c
! 5ef6b537342dd5bc130ca42c035010f7  gcc/testsuite/gcc.target/powerpc/pr93658.c
  7ec2211c1708cebde5e1bb5e3087dd76  gcc/testsuite/gcc.target/powerpc/pr93800.c
  ca39e661d5c8829e74d8a523cedd9a16  gcc/testsuite/gcc.target/powerpc/pr94740.c
  baf149d64053b2f0f606c42999ad64b8  gcc/testsuite/gcc.target/powerpc/pr95450.c
  e7cf1c47ea2ac68fa8b2f1bc1dc06872  gcc/testsuite/gcc.target/powerpc/pr95907.c
--- 71251,71259 ----
  bf5eef64bd13d358ccd4ecc20fc71dea  gcc/testsuite/gcc.target/powerpc/pr93012.c
  6ed2bd11c87cb97b53a02a6da437dd68  gcc/testsuite/gcc.target/powerpc/pr93073.c
  ffc3e49b879237e4c50decbfa7827c62  gcc/testsuite/gcc.target/powerpc/pr93122.c
! 38f0ad1fa74b57574f2b77b7354f16fe  gcc/testsuite/gcc.target/powerpc/pr93658.c
  7ec2211c1708cebde5e1bb5e3087dd76  gcc/testsuite/gcc.target/powerpc/pr93800.c
+ b8d9c0d34bd25c6c852036ab8e5aee8a  gcc/testsuite/gcc.target/powerpc/pr94613.c
  ca39e661d5c8829e74d8a523cedd9a16  gcc/testsuite/gcc.target/powerpc/pr94740.c
  baf149d64053b2f0f606c42999ad64b8  gcc/testsuite/gcc.target/powerpc/pr95450.c
  e7cf1c47ea2ac68fa8b2f1bc1dc06872  gcc/testsuite/gcc.target/powerpc/pr95907.c
*************** a585de66ac1500bfd616065fa8b38782  gcc/te
*** 67553,67559 ****
  a4b65c03b235e179c2c54ae705ca1314  gcc/testsuite/gcc.target/powerpc/pr96933-run.h
  3e3d83500b4f3407ec706aed288837c0  gcc/testsuite/gcc.target/powerpc/pr96933.h
  c8159472599bdbc1920f30b21821761f  gcc/testsuite/gcc.target/powerpc/pr97019.c
! 167d500d972820e3c619cedabfbf86da  gcc/testsuite/gcc.target/powerpc/pr97142.c
  18aa6c13663fc57c77c9258b01d06c8b  gcc/testsuite/gcc.target/powerpc/pr97267.c
  213beaa984952c5e9c8741ff42bef29f  gcc/testsuite/gcc.target/powerpc/pr97360.c
  be1d7456a640bf70727b92bfa00019b7  gcc/testsuite/gcc.target/powerpc/pr98092.c
--- 71277,71283 ----
  a4b65c03b235e179c2c54ae705ca1314  gcc/testsuite/gcc.target/powerpc/pr96933-run.h
  3e3d83500b4f3407ec706aed288837c0  gcc/testsuite/gcc.target/powerpc/pr96933.h
  c8159472599bdbc1920f30b21821761f  gcc/testsuite/gcc.target/powerpc/pr97019.c
! 3cbcbf709dba0c7d2f3ee1bb86a4c1ab  gcc/testsuite/gcc.target/powerpc/pr97142.c
  18aa6c13663fc57c77c9258b01d06c8b  gcc/testsuite/gcc.target/powerpc/pr97267.c
  213beaa984952c5e9c8741ff42bef29f  gcc/testsuite/gcc.target/powerpc/pr97360.c
  be1d7456a640bf70727b92bfa00019b7  gcc/testsuite/gcc.target/powerpc/pr98092.c
*************** f900d3f1e79811e92ae2e91267891d4a  gcc/te
*** 67564,67574 ****
  4fdfbed97b91165f1a9bb87f1e8aa815  gcc/testsuite/gcc.target/powerpc/pr99492.c
  cbb1371df0e1adf74c71a77d5895b17c  gcc/testsuite/gcc.target/powerpc/pr99557.c
  de511ffaecad04c9cbb12cacdec00373  gcc/testsuite/gcc.target/powerpc/pr99581.c
! 64482d2c5f46fd2fe948c15ae7162cfd  gcc/testsuite/gcc.target/powerpc/pragma_misc9.c
  98c02b2c2946f882d2b5e41da4b7d78b  gcc/testsuite/gcc.target/powerpc/pragma_power6.c
  9fc46dc795793c68c68bcda62ba3bb06  gcc/testsuite/gcc.target/powerpc/pragma_power7.c
! 86de0bfe94420f8830e56254afa4feaf  gcc/testsuite/gcc.target/powerpc/pragma_power8.c
! 25c6031256d212b5648eda0ff8d68094  gcc/testsuite/gcc.target/powerpc/pragma_power9.c
  3d5b95888852df8700894887dd8bfb69  gcc/testsuite/gcc.target/powerpc/prefix-add.c
  22fb944e0690c3907fb29d60c970351a  gcc/testsuite/gcc.target/powerpc/prefix-di-constant.c
  8db875e0cffec64424eec6fa93ff403b  gcc/testsuite/gcc.target/powerpc/prefix-ds-dq.c
--- 71288,71301 ----
  4fdfbed97b91165f1a9bb87f1e8aa815  gcc/testsuite/gcc.target/powerpc/pr99492.c
  cbb1371df0e1adf74c71a77d5895b17c  gcc/testsuite/gcc.target/powerpc/pr99557.c
  de511ffaecad04c9cbb12cacdec00373  gcc/testsuite/gcc.target/powerpc/pr99581.c
! 0f5a5bdff1232df3c7799da88e6e8eb9  gcc/testsuite/gcc.target/powerpc/pr99708-2.c
! d32fc3bf3e7a14bc8f9ad8955ffb16a4  gcc/testsuite/gcc.target/powerpc/pr99708.c
! 74f4f475f7fbab34a0ec83f7fd8e551b  gcc/testsuite/gcc.target/powerpc/pragma-optimize.c
! e02c101f5cebe3d8dfa298413197b1a7  gcc/testsuite/gcc.target/powerpc/pragma_misc9.c
  98c02b2c2946f882d2b5e41da4b7d78b  gcc/testsuite/gcc.target/powerpc/pragma_power6.c
  9fc46dc795793c68c68bcda62ba3bb06  gcc/testsuite/gcc.target/powerpc/pragma_power7.c
! 45affca437d2aa50cc215daff62e39c1  gcc/testsuite/gcc.target/powerpc/pragma_power8.c
! 62a405efa072f55c32f9a0806d8b7864  gcc/testsuite/gcc.target/powerpc/pragma_power9.c
  3d5b95888852df8700894887dd8bfb69  gcc/testsuite/gcc.target/powerpc/prefix-add.c
  22fb944e0690c3907fb29d60c970351a  gcc/testsuite/gcc.target/powerpc/prefix-di-constant.c
  8db875e0cffec64424eec6fa93ff403b  gcc/testsuite/gcc.target/powerpc/prefix-ds-dq.c
*************** c742917812fbfbc904c5958044e88ac1  gcc/te
*** 67689,67694 ****
--- 71416,71422 ----
  64a3284223a7202270812d08acee7054  gcc/testsuite/gcc.target/powerpc/signbit-1.c
  f00bcdb3de69aeb5753c3b28732dfcd8  gcc/testsuite/gcc.target/powerpc/signbit-2.c
  78b111d5c85fb4c63a40bf4f61fd37ee  gcc/testsuite/gcc.target/powerpc/signbit-3.c
+ a1178b69259e8f197b55b01f225b59f7  gcc/testsuite/gcc.target/powerpc/sldoi_to_mov.c
  b53c831b7a989947bc45e26ce4a15c9b  gcc/testsuite/gcc.target/powerpc/small-loop-unroll.c
  c0e75f8fc195cc2cbbf74bc89b5ca78f  gcc/testsuite/gcc.target/powerpc/spec-barr-1.c
  3ba3683c2c50a036a86876ffe40938d1  gcc/testsuite/gcc.target/powerpc/sse-addps-1.c
*************** bc5583d382f38e7c793f7f8613a24bd6  gcc/te
*** 67904,67916 ****
  10504e118ffc13c9ad572e30d5ec6fe2  gcc/testsuite/gcc.target/powerpc/sse3-movddup.c
  f35dc4317411be0a425d926d2e6b2ee2  gcc/testsuite/gcc.target/powerpc/sse3-movshdup.c
  99b9774ed3323e9ed4feec3cf2b4ccea  gcc/testsuite/gcc.target/powerpc/sse3-movsldup.c
! 17dc38c7da8969219eeb26645255d421  gcc/testsuite/gcc.target/powerpc/sse4_1-check.h
  60866f75a3d5489501b63ea643fe17f7  gcc/testsuite/gcc.target/powerpc/sse4_1-pblendvb.c
  631da19ee34cd145c0c24ad6bead9d9f  gcc/testsuite/gcc.target/powerpc/sse4_1-pblendw-2.c
  a8878b7112ae27592ce52739d0a0c122  gcc/testsuite/gcc.target/powerpc/sse4_1-pblendw.c
  996f5a62ba850e3561ab1ed3524584c1  gcc/testsuite/gcc.target/powerpc/sse4_1-pinsrb.c
  d7b463494c064b5a6aec28aff08d842c  gcc/testsuite/gcc.target/powerpc/sse4_1-pinsrd.c
  99f9b3599d8588d4e26725d9ff28c823  gcc/testsuite/gcc.target/powerpc/sse4_1-pinsrq.c
  c4da621e2f792bd21112c40ff73a206d  gcc/testsuite/gcc.target/powerpc/ssp-1.c
  28df2b90767c1ab9ffd06127b47b30f9  gcc/testsuite/gcc.target/powerpc/ssp-2.c
  16888841126e94e3ccf56cbb553f5490  gcc/testsuite/gcc.target/powerpc/ssse3-check.h
--- 71632,71695 ----
  10504e118ffc13c9ad572e30d5ec6fe2  gcc/testsuite/gcc.target/powerpc/sse3-movddup.c
  f35dc4317411be0a425d926d2e6b2ee2  gcc/testsuite/gcc.target/powerpc/sse3-movshdup.c
  99b9774ed3323e9ed4feec3cf2b4ccea  gcc/testsuite/gcc.target/powerpc/sse3-movsldup.c
! 42ab46ca2f116812ef1cda82d781cd0f  gcc/testsuite/gcc.target/powerpc/sse4_1-blendpd.c
! b3cd9f14f3470222751609d754be1afb  gcc/testsuite/gcc.target/powerpc/sse4_1-blendps-2.c
! 7f97da2433cd2a6eca4f0c57e27b3880  gcc/testsuite/gcc.target/powerpc/sse4_1-blendps.c
! ba5fde85e3d99466d633c618abe08694  gcc/testsuite/gcc.target/powerpc/sse4_1-blendvpd.c
! 9b9a8e4ee39f5d4b8fdf5df41350ed9a  gcc/testsuite/gcc.target/powerpc/sse4_1-blendvps.c
! d319b92f51dcc4a1396165ab57dfff2b  gcc/testsuite/gcc.target/powerpc/sse4_1-ceilpd.c
! b07b71ca680ff5cb710a10384c1819e7  gcc/testsuite/gcc.target/powerpc/sse4_1-ceilps.c
! 9b152a57f1296798d552abaf6d98d9d5  gcc/testsuite/gcc.target/powerpc/sse4_1-ceilsd.c
! 0fa10111cf940f2191c14225332c0c2b  gcc/testsuite/gcc.target/powerpc/sse4_1-ceilss.c
! 2f1780930dd01df89e0353878572f66e  gcc/testsuite/gcc.target/powerpc/sse4_1-check.h
! 0ee1524487a537dd6f42a4fdb096a3b4  gcc/testsuite/gcc.target/powerpc/sse4_1-floorpd.c
! 54ede12c9fe853a5daa48c1dd0f8de06  gcc/testsuite/gcc.target/powerpc/sse4_1-floorps.c
! 75913a58d70bacaa9094e4a4ed055def  gcc/testsuite/gcc.target/powerpc/sse4_1-floorsd.c
! 76aa24d26c046629db7e6889a1886a73  gcc/testsuite/gcc.target/powerpc/sse4_1-floorss.c
! a09d6a572b90c5e03c7b0e9dbd96107f  gcc/testsuite/gcc.target/powerpc/sse4_1-packusdw.c
  60866f75a3d5489501b63ea643fe17f7  gcc/testsuite/gcc.target/powerpc/sse4_1-pblendvb.c
  631da19ee34cd145c0c24ad6bead9d9f  gcc/testsuite/gcc.target/powerpc/sse4_1-pblendw-2.c
  a8878b7112ae27592ce52739d0a0c122  gcc/testsuite/gcc.target/powerpc/sse4_1-pblendw.c
+ e43f1270096fe4f21794f3530c3b58a1  gcc/testsuite/gcc.target/powerpc/sse4_1-pcmpeqq.c
+ 45ebf481bbef406bb85e0d9dba51f78b  gcc/testsuite/gcc.target/powerpc/sse4_1-phminposuw.c
  996f5a62ba850e3561ab1ed3524584c1  gcc/testsuite/gcc.target/powerpc/sse4_1-pinsrb.c
  d7b463494c064b5a6aec28aff08d842c  gcc/testsuite/gcc.target/powerpc/sse4_1-pinsrd.c
  99f9b3599d8588d4e26725d9ff28c823  gcc/testsuite/gcc.target/powerpc/sse4_1-pinsrq.c
+ bcd3ad7eefe37f598682acc80987e72b  gcc/testsuite/gcc.target/powerpc/sse4_1-pmaxsb.c
+ 184e3c38cda0ead8fe705a57ae28e5dd  gcc/testsuite/gcc.target/powerpc/sse4_1-pmaxsd.c
+ 4f16786fa1eac449376578c721b01e6a  gcc/testsuite/gcc.target/powerpc/sse4_1-pmaxud.c
+ 43cd6cffdc2c1a963eeae9b4d980fa90  gcc/testsuite/gcc.target/powerpc/sse4_1-pmaxuw.c
+ 360d86c0a6fd5493b318e4717912053a  gcc/testsuite/gcc.target/powerpc/sse4_1-pminsb.c
+ 35b19ce0e502356ca7d569a6caaea29d  gcc/testsuite/gcc.target/powerpc/sse4_1-pminsd.c
+ 3ac1c1a737b257f70954a45655741107  gcc/testsuite/gcc.target/powerpc/sse4_1-pminud.c
+ d260dc8d84fe6b98d7dc8c3cc451dc7d  gcc/testsuite/gcc.target/powerpc/sse4_1-pminuw.c
+ d1c101b05a662de8d4d993862dac1a7f  gcc/testsuite/gcc.target/powerpc/sse4_1-pmovsxbd.c
+ 6f3c56c980214d88b89dd0b50ab9c249  gcc/testsuite/gcc.target/powerpc/sse4_1-pmovsxbq.c
+ 6ae5dffb215852a6152376348750af66  gcc/testsuite/gcc.target/powerpc/sse4_1-pmovsxbw.c
+ ba598d837d240166b34516c5937c7cee  gcc/testsuite/gcc.target/powerpc/sse4_1-pmovsxdq.c
+ f54b9c13cbc168410fe625f56d1b765d  gcc/testsuite/gcc.target/powerpc/sse4_1-pmovsxwd.c
+ 7a6366563d08e2f9dfa9118e93a8face  gcc/testsuite/gcc.target/powerpc/sse4_1-pmovsxwq.c
+ 65255eeeaa58220ae9c30dd5274a338f  gcc/testsuite/gcc.target/powerpc/sse4_1-pmovzxbd.c
+ 1da14c122956756cdb352cf44f60a863  gcc/testsuite/gcc.target/powerpc/sse4_1-pmovzxbq.c
+ cc43b447a57ba66e3191c421ceae5839  gcc/testsuite/gcc.target/powerpc/sse4_1-pmovzxbw.c
+ 1afebd08d31a3676711bd5da64687030  gcc/testsuite/gcc.target/powerpc/sse4_1-pmovzxdq.c
+ 495323d061b312b83c96defb1d9e6f44  gcc/testsuite/gcc.target/powerpc/sse4_1-pmovzxwd.c
+ 5ca69efe7e63fe6d35deb342e1bd262a  gcc/testsuite/gcc.target/powerpc/sse4_1-pmovzxwq.c
+ 4d77bdf0cbdf80f49a43fb06b4dad6a3  gcc/testsuite/gcc.target/powerpc/sse4_1-pmuldq.c
+ 43edf8357b30130c467867e020286aaa  gcc/testsuite/gcc.target/powerpc/sse4_1-pmulld.c
+ 9a6a1ef26810b96d7896c95fd6563eb2  gcc/testsuite/gcc.target/powerpc/sse4_1-ptest-1.c
+ 93ef87e0af1caf032f386af40d6fde5b  gcc/testsuite/gcc.target/powerpc/sse4_1-round-data.h
+ 1334c48972d1de2311e4aee1e16a52ca  gcc/testsuite/gcc.target/powerpc/sse4_1-round.h
+ 925f4bca28e62f12fcb2dabe086d529e  gcc/testsuite/gcc.target/powerpc/sse4_1-round2.h
+ dc1193b2ebb05005605b991959e228b4  gcc/testsuite/gcc.target/powerpc/sse4_1-round3.h
+ 3d4cd49ba4a6eb0f194cdaa5552d452c  gcc/testsuite/gcc.target/powerpc/sse4_1-roundpd-2.c
+ f5d26088a5c347cf337f86d8ea24a928  gcc/testsuite/gcc.target/powerpc/sse4_1-roundpd-3.c
+ 12ac3d1e138fd707b4cbabee6dbbf877  gcc/testsuite/gcc.target/powerpc/sse4_1-roundpd.c
+ 74445d296243bc2ae2e48e69fea89439  gcc/testsuite/gcc.target/powerpc/sse4_1-roundps.c
+ 7cf1cfac2e7f5cb6f79340e7e338ab7c  gcc/testsuite/gcc.target/powerpc/sse4_1-roundsd.c
+ 459ec4521ad99dbcac6a628e023aa250  gcc/testsuite/gcc.target/powerpc/sse4_1-roundss.c
+ 6fa2cb5c80587673b8fe7689a8f8d089  gcc/testsuite/gcc.target/powerpc/sse4_2-check.h
+ 3939f983b5258bde666d76b9935d7ea6  gcc/testsuite/gcc.target/powerpc/sse4_2-pcmpgtq.c
  c4da621e2f792bd21112c40ff73a206d  gcc/testsuite/gcc.target/powerpc/ssp-1.c
  28df2b90767c1ab9ffd06127b47b30f9  gcc/testsuite/gcc.target/powerpc/ssp-2.c
  16888841126e94e3ccf56cbb553f5490  gcc/testsuite/gcc.target/powerpc/ssse3-check.h
*************** ba8561d330e1ff11cde165a34f6b95e9  gcc/te
*** 67941,67947 ****
  2c34c6cf4b62c47a455f584cbb842f7d  gcc/testsuite/gcc.target/powerpc/swaps-p8-14.c
  d06946b35c28e81c1e5de341efa2152c  gcc/testsuite/gcc.target/powerpc/swaps-p8-15.c
  9026eaa348023976fa25f8ea5f1f71a5  gcc/testsuite/gcc.target/powerpc/swaps-p8-16.c
! 08a4a34f869f46ff60173a413ce544d8  gcc/testsuite/gcc.target/powerpc/swaps-p8-17.c
  be804356a86d670131ac56a46ce91868  gcc/testsuite/gcc.target/powerpc/swaps-p8-18.c
  e87ef9c03a6e7f41774565bd37308592  gcc/testsuite/gcc.target/powerpc/swaps-p8-19.c
  6ffe617fbfc820fbd2ebe1edb2400c85  gcc/testsuite/gcc.target/powerpc/swaps-p8-2.c
--- 71720,71726 ----
  2c34c6cf4b62c47a455f584cbb842f7d  gcc/testsuite/gcc.target/powerpc/swaps-p8-14.c
  d06946b35c28e81c1e5de341efa2152c  gcc/testsuite/gcc.target/powerpc/swaps-p8-15.c
  9026eaa348023976fa25f8ea5f1f71a5  gcc/testsuite/gcc.target/powerpc/swaps-p8-16.c
! fe63d0859afd56c7502d74e139abe335  gcc/testsuite/gcc.target/powerpc/swaps-p8-17.c
  be804356a86d670131ac56a46ce91868  gcc/testsuite/gcc.target/powerpc/swaps-p8-18.c
  e87ef9c03a6e7f41774565bd37308592  gcc/testsuite/gcc.target/powerpc/swaps-p8-19.c
  6ffe617fbfc820fbd2ebe1edb2400c85  gcc/testsuite/gcc.target/powerpc/swaps-p8-2.c
*************** b3ee99ff13dd64c0a7e4d3727bd516f8  gcc/te
*** 67981,67995 ****
  09302ecea2b2338f19aafefdbf164614  gcc/testsuite/gcc.target/powerpc/swaps-p8-9.c
  f138cfa6e387e1bc85747da2fc38e305  gcc/testsuite/gcc.target/powerpc/swaps-stack-protector.c
  2a52ad9e020f4876e1759e2137dd146c  gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin.c
! 1e5fee04b7943239f19f0ce10776f9d1  gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c
! e2ea17dd5726f5123cfd41828cad3a67  gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin.c
! b08d7736f6c15cd2e7a7cbbf0732a171  gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c
! fffb5388e3f0454f2afd0eade4181a0c  gcc/testsuite/gcc.target/powerpc/test_mffsl.c
  e28cc14ddafc82b0f212f1b4ebbcf50a  gcc/testsuite/gcc.target/powerpc/tfmode_off.c
  c2edbb1afba546ea3ac8a5efcaca9c38  gcc/testsuite/gcc.target/powerpc/ti_math1.c
  c3d0d51284479d220a6166a0f362536c  gcc/testsuite/gcc.target/powerpc/ti_math2.c
  b66bd2797d99df9316755addd3664809  gcc/testsuite/gcc.target/powerpc/timode_off.c
  242e558eb05c36c662d06489c5746038  gcc/testsuite/gcc.target/powerpc/undef-bool-2.c
  f7b335e2ebdedcf6b3ad355f4564a8db  gcc/testsuite/gcc.target/powerpc/upper-regs-df.c
  7c0fa4851021413c8d75f57a04adabe1  gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c
  7fcc63e7c64945b04fc127d640b7b1a2  gcc/testsuite/gcc.target/powerpc/vadsdu-0.c
--- 71760,71785 ----
  09302ecea2b2338f19aafefdbf164614  gcc/testsuite/gcc.target/powerpc/swaps-p8-9.c
  f138cfa6e387e1bc85747da2fc38e305  gcc/testsuite/gcc.target/powerpc/swaps-stack-protector.c
  2a52ad9e020f4876e1759e2137dd146c  gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin.c
! 2852dd6476acf51799a5be9f79d9a721  gcc/testsuite/gcc.target/powerpc/test_fpscr_drn_builtin_error.c
! 90cde76e00eb6bd925434f9fb8de59f7  gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin.c
! 2b302f540128e4bac16f357999890018  gcc/testsuite/gcc.target/powerpc/test_fpscr_rn_builtin_error.c
! 8160640f23530f3c0b53296707f0cf0e  gcc/testsuite/gcc.target/powerpc/test_mffsl.c
  e28cc14ddafc82b0f212f1b4ebbcf50a  gcc/testsuite/gcc.target/powerpc/tfmode_off.c
  c2edbb1afba546ea3ac8a5efcaca9c38  gcc/testsuite/gcc.target/powerpc/ti_math1.c
  c3d0d51284479d220a6166a0f362536c  gcc/testsuite/gcc.target/powerpc/ti_math2.c
  b66bd2797d99df9316755addd3664809  gcc/testsuite/gcc.target/powerpc/timode_off.c
  242e558eb05c36c662d06489c5746038  gcc/testsuite/gcc.target/powerpc/undef-bool-2.c
+ b3e201f4f90c212bf9516e4643c7982c  gcc/testsuite/gcc.target/powerpc/unpack-vectorize-1.c
+ e4003dd438f5fd9c07f4b70a77174f74  gcc/testsuite/gcc.target/powerpc/unpack-vectorize-1.h
+ 754d73f8ad30fcd82001c939a95b0690  gcc/testsuite/gcc.target/powerpc/unpack-vectorize-2.c
+ f524af96c3e4ca661c5ae6f83ba1a0f2  gcc/testsuite/gcc.target/powerpc/unpack-vectorize-2.h
+ cd9dc335a7a6fb4d72916ee4ffebf48f  gcc/testsuite/gcc.target/powerpc/unpack-vectorize-3.c
+ 16a4f4819c46251cf7d40d2cbdd2f73f  gcc/testsuite/gcc.target/powerpc/unpack-vectorize-3.h
+ ce613ac6616063280f72d2b83eac70c4  gcc/testsuite/gcc.target/powerpc/unpack-vectorize-run-1.c
+ afa67f434007352fa186b3cd5ceaa933  gcc/testsuite/gcc.target/powerpc/unpack-vectorize-run-2.c
+ 6452133e9e9b9749331127b628cb82f2  gcc/testsuite/gcc.target/powerpc/unpack-vectorize-run-3.c
+ 49a9b7083933f071e406a6002545a2b1  gcc/testsuite/gcc.target/powerpc/unpack-vectorize.h
+ 8299025d4b58de8ad2587e97256df932  gcc/testsuite/gcc.target/powerpc/unwind-backchain.c
  f7b335e2ebdedcf6b3ad355f4564a8db  gcc/testsuite/gcc.target/powerpc/upper-regs-df.c
  7c0fa4851021413c8d75f57a04adabe1  gcc/testsuite/gcc.target/powerpc/upper-regs-sf.c
  7fcc63e7c64945b04fc127d640b7b1a2  gcc/testsuite/gcc.target/powerpc/vadsdu-0.c
*************** cf6daa0d113189191cc577954428500d  gcc/te
*** 68093,68099 ****
  2c0f51cc74abbcbede27efacd2b64559  gcc/testsuite/gcc.target/powerpc/vec-extractl-be-3.c
  433f93fe198906c758011a9716d3fdc0  gcc/testsuite/gcc.target/powerpc/vec-gnb-0.c
  019b2f91f62e2141785040a81fc8f7b6  gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c
! ec35cff4bb22cf664043483b8c0b3879  gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
  1c064f63a5e242fb0e35f918fa7a9385  gcc/testsuite/gcc.target/powerpc/vec-init-1.c
  8865f952c76be05490cdb5a3dff0a4d1  gcc/testsuite/gcc.target/powerpc/vec-init-10.c
  726fca01c06667a59e517b04466b670f  gcc/testsuite/gcc.target/powerpc/vec-init-2.c
--- 71883,71889 ----
  2c0f51cc74abbcbede27efacd2b64559  gcc/testsuite/gcc.target/powerpc/vec-extractl-be-3.c
  433f93fe198906c758011a9716d3fdc0  gcc/testsuite/gcc.target/powerpc/vec-gnb-0.c
  019b2f91f62e2141785040a81fc8f7b6  gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c
! 6e764d729687fcea81352b14641f365a  gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c
  1c064f63a5e242fb0e35f918fa7a9385  gcc/testsuite/gcc.target/powerpc/vec-init-1.c
  8865f952c76be05490cdb5a3dff0a4d1  gcc/testsuite/gcc.target/powerpc/vec-init-10.c
  726fca01c06667a59e517b04466b670f  gcc/testsuite/gcc.target/powerpc/vec-init-2.c
*************** bbbdccba096f666b19ffccd518339311  gcc/te
*** 68106,68121 ****
  1c25ca7359ac947620882234381d0e4f  gcc/testsuite/gcc.target/powerpc/vec-init-9.c
  bb9f6d3ab6165cbd94638731b6fc4d79  gcc/testsuite/gcc.target/powerpc/vec-insert-word-runnable.c
  e95008bad5edfab2ab0eb99d3fba6505  gcc/testsuite/gcc.target/powerpc/vec-ldl-1.c
  d23be9cbb5a316007e6c09a2cb15f73f  gcc/testsuite/gcc.target/powerpc/vec-mul.c
  8a3d5e23a1722a45edbaa43f5b3a54b5  gcc/testsuite/gcc.target/powerpc/vec-mult-char-1.c
  7554510a59ccac21c14591cee248180e  gcc/testsuite/gcc.target/powerpc/vec-mult-char-2.c
  0b768a446e72f0d8107335b1b8529fa0  gcc/testsuite/gcc.target/powerpc/vec-pdep-0.c
  db83e62dff46acd786fd214ba328a149  gcc/testsuite/gcc.target/powerpc/vec-pdep-1.c
  098e99c9220bf1bbda47aa99d3ec7356  gcc/testsuite/gcc.target/powerpc/vec-permute-ext-runnable.c
  b5892a28bbaf2d60143417a2daef76de  gcc/testsuite/gcc.target/powerpc/vec-pext-0.c
  d24a8e6f3ef84d24e9f70f0c4936462d  gcc/testsuite/gcc.target/powerpc/vec-pext-1.c
! 4627f548f81e13bf647e594cb1a8e22d  gcc/testsuite/gcc.target/powerpc/vec-replace-word-runnable.c
! ef85c6b9cda77e3215b0e4165754a328  gcc/testsuite/gcc.target/powerpc/vec-rlmi-rlnm.c
  f9f609a740dac9270f63ed47cf131e3e  gcc/testsuite/gcc.target/powerpc/vec-rotate-1.c
  137d89e04c5e0edc9f6d5402c1414d37  gcc/testsuite/gcc.target/powerpc/vec-rotate-2.c
  96441926bf999692270027b1092cac57  gcc/testsuite/gcc.target/powerpc/vec-rotate-3.c
--- 71896,71917 ----
  1c25ca7359ac947620882234381d0e4f  gcc/testsuite/gcc.target/powerpc/vec-init-9.c
  bb9f6d3ab6165cbd94638731b6fc4d79  gcc/testsuite/gcc.target/powerpc/vec-insert-word-runnable.c
  e95008bad5edfab2ab0eb99d3fba6505  gcc/testsuite/gcc.target/powerpc/vec-ldl-1.c
+ 76416d75baf059f3c4da9ab796655820  gcc/testsuite/gcc.target/powerpc/vec-minmax-1.c
+ c5e8f49d6ebd6bb2d22dd881ca921fad  gcc/testsuite/gcc.target/powerpc/vec-minmax-2.c
+ 173de9f14de1f3984b7ea34aa63e1e32  gcc/testsuite/gcc.target/powerpc/vec-msumc.c
  d23be9cbb5a316007e6c09a2cb15f73f  gcc/testsuite/gcc.target/powerpc/vec-mul.c
  8a3d5e23a1722a45edbaa43f5b3a54b5  gcc/testsuite/gcc.target/powerpc/vec-mult-char-1.c
  7554510a59ccac21c14591cee248180e  gcc/testsuite/gcc.target/powerpc/vec-mult-char-2.c
  0b768a446e72f0d8107335b1b8529fa0  gcc/testsuite/gcc.target/powerpc/vec-pdep-0.c
  db83e62dff46acd786fd214ba328a149  gcc/testsuite/gcc.target/powerpc/vec-pdep-1.c
+ d68082fddb71eb4b0e5e3e144cf79397  gcc/testsuite/gcc.target/powerpc/vec-perm-ctor-run.c
+ 02cb4100e1591064090809ea10d44f62  gcc/testsuite/gcc.target/powerpc/vec-perm-ctor.c
+ e42d7308eff347a7f9302ce99c54ea47  gcc/testsuite/gcc.target/powerpc/vec-perm-ctor.h
  098e99c9220bf1bbda47aa99d3ec7356  gcc/testsuite/gcc.target/powerpc/vec-permute-ext-runnable.c
  b5892a28bbaf2d60143417a2daef76de  gcc/testsuite/gcc.target/powerpc/vec-pext-0.c
  d24a8e6f3ef84d24e9f70f0c4936462d  gcc/testsuite/gcc.target/powerpc/vec-pext-1.c
! 22ce4f0f88ee61cb9b5651bd25977544  gcc/testsuite/gcc.target/powerpc/vec-replace-word-runnable.c
! de78dd24e2bc664997a08817596f7ac2  gcc/testsuite/gcc.target/powerpc/vec-rlmi-rlnm.c
  f9f609a740dac9270f63ed47cf131e3e  gcc/testsuite/gcc.target/powerpc/vec-rotate-1.c
  137d89e04c5e0edc9f6d5402c1414d37  gcc/testsuite/gcc.target/powerpc/vec-rotate-2.c
  96441926bf999692270027b1092cac57  gcc/testsuite/gcc.target/powerpc/vec-rotate-3.c
*************** a187918b30c9c8030bc9bbaf9599bb34  gcc/te
*** 68130,68136 ****
  b558fe15786948ecde81acc46fdba7e6  gcc/testsuite/gcc.target/powerpc/vec-shift.c
  8ee50015e788404267646adf1ac95972  gcc/testsuite/gcc.target/powerpc/vec-shr.c
  127d2d7f255399904a77777bca197fec  gcc/testsuite/gcc.target/powerpc/vec-sld-modulo.c
! ea06c6c33dc2b32c19fca150e42f09b8  gcc/testsuite/gcc.target/powerpc/vec-splati-runnable.c
  6dac3c4c0900e12a20b36757d815f46d  gcc/testsuite/gcc.target/powerpc/vec-srad-modulo.c
  2a0707e5093ef9facb6ce5e359ee4720  gcc/testsuite/gcc.target/powerpc/vec-srd-modulo.c
  fc49ae9181fd7d2ce969687524825c19  gcc/testsuite/gcc.target/powerpc/vec-stril-0.c
--- 71926,71940 ----
  b558fe15786948ecde81acc46fdba7e6  gcc/testsuite/gcc.target/powerpc/vec-shift.c
  8ee50015e788404267646adf1ac95972  gcc/testsuite/gcc.target/powerpc/vec-shr.c
  127d2d7f255399904a77777bca197fec  gcc/testsuite/gcc.target/powerpc/vec-sld-modulo.c
! 458c7d2af4bd8293e8a58a447dcbde05  gcc/testsuite/gcc.target/powerpc/vec-splat-constant-df.c
! b1b790c7e46680d89f8eed177c4f2eff  gcc/testsuite/gcc.target/powerpc/vec-splat-constant-sf.c
! 8cb6662af85c7556e8272a952ff7a549  gcc/testsuite/gcc.target/powerpc/vec-splat-constant-v16qi.c
! cf567b3f278a8a7746e73827809a9fd5  gcc/testsuite/gcc.target/powerpc/vec-splat-constant-v2df.c
! 5e53faf7fece75d4f9da1e2c151e1ee6  gcc/testsuite/gcc.target/powerpc/vec-splat-constant-v2di.c
! a847d035e19f6b86bf079969c4e43785  gcc/testsuite/gcc.target/powerpc/vec-splat-constant-v4sf.c
! 91f5711b1b62b0eb9ccf204f9101d939  gcc/testsuite/gcc.target/powerpc/vec-splat-constant-v4si.c
! 32f8cfeee01235747608f4f764400d56  gcc/testsuite/gcc.target/powerpc/vec-splat-constant-v8hi.c
! ce9e228e25d01ece05d8ae4ba822ce91  gcc/testsuite/gcc.target/powerpc/vec-splati-runnable.c
  6dac3c4c0900e12a20b36757d815f46d  gcc/testsuite/gcc.target/powerpc/vec-srad-modulo.c
  2a0707e5093ef9facb6ce5e359ee4720  gcc/testsuite/gcc.target/powerpc/vec-srd-modulo.c
  fc49ae9181fd7d2ce969687524825c19  gcc/testsuite/gcc.target/powerpc/vec-stril-0.c
*************** e3c43b6691eae1790d76349576b17f25  gcc/te
*** 68207,68213 ****
  6cc64fba06f521de4b9f68cf2168c822  gcc/testsuite/gcc.target/powerpc/vec-strir_p-9.c
  b3ae45bb815549b9cb0788402d76d01d  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-0.c
  0d5bb52c857a696a6b953cf486e49a99  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-1.c
! 8758339d8a62eacf1ecba60b5d5f8c16  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-10.c
  ff220ad11326bc4e4ddc8b5115e9b04f  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-2.c
  626d93b3738ca84a5224023392a51123  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-3.c
  ea57c6cb3b3a40e54841a77cfe7d28c4  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-4.c
--- 72011,72017 ----
  6cc64fba06f521de4b9f68cf2168c822  gcc/testsuite/gcc.target/powerpc/vec-strir_p-9.c
  b3ae45bb815549b9cb0788402d76d01d  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-0.c
  0d5bb52c857a696a6b953cf486e49a99  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-1.c
! b11b00729ecc2168bdb773fe2889d0e8  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-10.c
  ff220ad11326bc4e4ddc8b5115e9b04f  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-2.c
  626d93b3738ca84a5224023392a51123  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-3.c
  ea57c6cb3b3a40e54841a77cfe7d28c4  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-4.c
*************** ea57c6cb3b3a40e54841a77cfe7d28c4  gcc/te
*** 68217,68222 ****
--- 72021,72029 ----
  0b71e37ab264f807faebdf4dc7dadbec  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-8.c
  545806e3e432c4a4932c83192c3050a6  gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-9.c
  ad5fc586c0421d4792f2c22570c2eb18  gcc/testsuite/gcc.target/powerpc/vec-xxpermdi.c
+ 2a53c3abc347b940a6be95414b5ec5a9  gcc/testsuite/gcc.target/powerpc/vec_reve_1.c
+ 60ee05f0bf29bba199a78c878e0bd92d  gcc/testsuite/gcc.target/powerpc/vec_reve_2.c
+ 88f80d7687637bc7046a2526353a55aa  gcc/testsuite/gcc.target/powerpc/vect-gather-1.c
  a459e155035fcdf829cd3a8c89cd9b77  gcc/testsuite/gcc.target/powerpc/vector_float.c
  cfe95399d48da5db32fbce7f0c697a3c  gcc/testsuite/gcc.target/powerpc/versioned-copy-loop.c
  d0f4244d0c95771117041974544ba517  gcc/testsuite/gcc.target/powerpc/volatile-mem.c
*************** d4ac3c389df5e307dc92138f7740f465  gcc/te
*** 68245,68251 ****
  b24604137e8856e26b206a773d7b69b5  gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-4.c
  43947d5da45c128928c237ccd8f1901a  gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-5.c
  cc531d59c2d5ece2b3bfec962a419087  gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-6.c
! e80d6b609c1326dc9dd8f51f4307962c  gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c
  55ffbc05dc0d6afeb4d0b2cd7f532ad8  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eq-0.c
  08e69f9b78aece07c8e72d911097294e  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eq-1.c
  7b71a58bb53586822027aef188989a92  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eq-10.c
--- 72052,72058 ----
  b24604137e8856e26b206a773d7b69b5  gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-4.c
  43947d5da45c128928c237ccd8f1901a  gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-5.c
  cc531d59c2d5ece2b3bfec962a419087  gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-6.c
! 663ac4fb9e55d112d6d2a951d7449c84  gcc/testsuite/gcc.target/powerpc/vsu/vec-all-nez-7.c
  55ffbc05dc0d6afeb4d0b2cd7f532ad8  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eq-0.c
  08e69f9b78aece07c8e72d911097294e  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eq-1.c
  7b71a58bb53586822027aef188989a92  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eq-10.c
*************** ba4a8aabd92b7a2570f92e9d2778fc26  gcc/te
*** 68267,68273 ****
  40531b8124885a862863c9ed5100a0a3  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-4.c
  6c0b7e091933dfb88ffe4d637b3b4426  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-5.c
  899fd46e4ec4bf99b3100b4632f83fd2  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-6.c
! a04911bd926b41ac66d8fcbf2519a0fb  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c
  0f8236ffded3681c9b2b74f081e679f9  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpne-0.c
  4871dff7410e32654c27bb3451928100  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpne-1.c
  838fa113d098c69195b431b5eab0e620  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpne-2.c
--- 72074,72080 ----
  40531b8124885a862863c9ed5100a0a3  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-4.c
  6c0b7e091933dfb88ffe4d637b3b4426  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-5.c
  899fd46e4ec4bf99b3100b4632f83fd2  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-6.c
! e393459cd8b50a4910615320416dcec9  gcc/testsuite/gcc.target/powerpc/vsu/vec-any-eqz-7.c
  0f8236ffded3681c9b2b74f081e679f9  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpne-0.c
  4871dff7410e32654c27bb3451928100  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpne-1.c
  838fa113d098c69195b431b5eab0e620  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpne-2.c
*************** be7b9ce170ac6f6012073f6c2fee2bb9  gcc/te
*** 68283,68301 ****
  7ed1182fd451c9ecc54430b69812d861  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-4.c
  e34c1830fa0a1ca44da6a0b78600066a  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-5.c
  cce2f64df349ef8bb54aa205d313a1ba  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-6.c
! c69be4eae41ace5fa37eaa6afce80b2c  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c
! 5e781b3a1c9fe9de43f839b705048bde  gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-0.c
! fd5862571ff90f966ef47d93b9968e06  gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-1.c
! 47659488f7dcc184993bdd96b5775034  gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
! 60a5a62e166ae324375814b94e891d8a  gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-0.c
! 1466fd28f06c7615800515ab51e0f02a  gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-1.c
! 8f6d8103f1d353bfada8f6212f1d736d  gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c
  75dfe5f86694d1036b557587b88673f1  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-0.c
  b17fd98b31ca58c51530fbafbe560707  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-1.c
  1138a8ec54eee8975e2026cde9a19c04  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-10.c
  109ed573811b4dca4241e3a7f1d7c406  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-11.c
  5eaebdc70cac2cd4c4e824994a76c04b  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-12.c
! c4e3d3936d19f9dc3f3710f26c1ad64c  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-13.c
  ac275faec7356fae47e3466a4d5b2b6e  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-2.c
  8cae182ce068933d26bb0c484991c528  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-3.c
  c41e3f281b6a46d1a15541031617c550  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-4.c
--- 72090,72112 ----
  7ed1182fd451c9ecc54430b69812d861  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-4.c
  e34c1830fa0a1ca44da6a0b78600066a  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-5.c
  cce2f64df349ef8bb54aa205d313a1ba  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-6.c
! f564c75bcfc1dc9cc95d3c0678b055b0  gcc/testsuite/gcc.target/powerpc/vsu/vec-cmpnez-7.c
! afa607bbe48effd31adecab1c01b3806  gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-0.c
! de5b3c378e25f2f50e8086b57d1c127e  gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-1.c
! de2cf915fd18ad2019febd99749e2381  gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
! 20001116d48323344a97968f5e38a99a  gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-3.c
! a70e1b582d81c6fa14c17190fa825a56  gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-4.c
! 001307b3e9317a748c3896e600db58cd  gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-0.c
! 05d61c76b35aefa6204c4970468b3606  gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-1.c
! f7531fbd363ff8c81c71d1be8b50bd67  gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c
! 9ba72560c11b3a3dc6a6670e5030e022  gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-3.c
! 9176aa0c4df611b8fc45aee2eb8beeaa  gcc/testsuite/gcc.target/powerpc/vsu/vec-cnttz-lsbb-4.c
  75dfe5f86694d1036b557587b88673f1  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-0.c
  b17fd98b31ca58c51530fbafbe560707  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-1.c
  1138a8ec54eee8975e2026cde9a19c04  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-10.c
  109ed573811b4dca4241e3a7f1d7c406  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-11.c
  5eaebdc70cac2cd4c4e824994a76c04b  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-12.c
! a42ff6bc84e5b1fec49eaad61fc25b07  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-13.c
  ac275faec7356fae47e3466a4d5b2b6e  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-2.c
  8cae182ce068933d26bb0c484991c528  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-3.c
  c41e3f281b6a46d1a15541031617c550  gcc/testsuite/gcc.target/powerpc/vsu/vec-xl-len-4.c
*************** c45c9210b08143ef04c1c483c2a39ddf  gcc/te
*** 68324,68330 ****
  3020f53b7ccbf682a2fe07d89bbf56d9  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-1.c
  ab0ac7bcf93fba758129b7007d4686fb  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-10.c
  61db237171190360cd974931ae60b9c1  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-11.c
! 7d3391abab3e1d3c22709bd739cf82ab  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c
  48b75687f616632f223a4303a9ee6497  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-13.c
  16d2126b5dcb8ea732d896d9520714bb  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-2.c
  48cc4626bb81f421adb5de3c19c74ee9  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-3.c
--- 72135,72141 ----
  3020f53b7ccbf682a2fe07d89bbf56d9  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-1.c
  ab0ac7bcf93fba758129b7007d4686fb  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-10.c
  61db237171190360cd974931ae60b9c1  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-11.c
! a5ef227f55b49de0d8f68579b86cd8f9  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-12.c
  48b75687f616632f223a4303a9ee6497  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-13.c
  16d2126b5dcb8ea732d896d9520714bb  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-2.c
  48cc4626bb81f421adb5de3c19c74ee9  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-3.c
*************** b88613b767bb0807b1762e8eb526a343  gcc/te
*** 68334,68340 ****
  47a01322cf4b1487712207de43d7799d  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-7.c
  b0a697b054abbb240f1d84da6b8b6e3d  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-8.c
  4c31abd6b29ad29d6e3781f73129efd7  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-9.c
! c32bbd9a8f3aa69bc0f2c8caf9c251e0  gcc/testsuite/gcc.target/powerpc/vsu/vsu.exp
  aaeb960a2e271bc474363e9917aecb51  gcc/testsuite/gcc.target/powerpc/vsx-13.c
  2d2324d8274dfc9b008525e52c7c7bd6  gcc/testsuite/gcc.target/powerpc/vsx-7.c
  52f42f9be22f511e882b624f99d63a7d  gcc/testsuite/gcc.target/powerpc/vsx-builtin-1.c
--- 72145,72151 ----
  47a01322cf4b1487712207de43d7799d  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-7.c
  b0a697b054abbb240f1d84da6b8b6e3d  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-8.c
  4c31abd6b29ad29d6e3781f73129efd7  gcc/testsuite/gcc.target/powerpc/vsu/vec-xst-len-9.c
! 897792c10a0ba45640d0afa97722f403  gcc/testsuite/gcc.target/powerpc/vsu/vsu.exp
  aaeb960a2e271bc474363e9917aecb51  gcc/testsuite/gcc.target/powerpc/vsx-13.c
  2d2324d8274dfc9b008525e52c7c7bd6  gcc/testsuite/gcc.target/powerpc/vsx-7.c
  52f42f9be22f511e882b624f99d63a7d  gcc/testsuite/gcc.target/powerpc/vsx-builtin-1.c
*************** a71f924d37c55643c417681737768eee  gcc/te
*** 68481,68492 ****
  a5d8400fbc1e042d4b59d52b3b6e800b  gcc/testsuite/gcc.target/pru/mabi-ti-7.c
  d754f6db5a9f4cb648931c1a300fe5e6  gcc/testsuite/gcc.target/pru/pr64366.c
  aa63cbae8ab220e484f3dfce0053edb2  gcc/testsuite/gcc.target/pru/pragma-ctable_entry.c
! 9fa7771be32ec40e9d5c93e8de0a25c5  gcc/testsuite/gcc.target/pru/pru.exp
  7b1dfd818b26fc3abda3150a2a5dccb4  gcc/testsuite/gcc.target/pru/qbbc-1.c
  d022a63c4f1bad92f86058d5cc8188d1  gcc/testsuite/gcc.target/pru/qbbc-2.c
  fdb4e33b3d3de2cac49ab1b15be0e268  gcc/testsuite/gcc.target/pru/qbbc-3.c
  6c14130160ad81fe8d22056ef0b38971  gcc/testsuite/gcc.target/pru/qbbs-1.c
  041a329cb64f9209354915b4a653b7bd  gcc/testsuite/gcc.target/pru/qbbs-2.c
  1d79eec541c06253e1fdbcb6c40a51d9  gcc/testsuite/gcc.target/pru/setbit.c
  9b0eaea8eef2cef4829077b25cf651c8  gcc/testsuite/gcc.target/pru/zero_extend-and-hisi.c
  44d7b6cb38db4a3d2a89775ff4afc9e5  gcc/testsuite/gcc.target/pru/zero_extend-and-qihi.c
--- 72292,72315 ----
  a5d8400fbc1e042d4b59d52b3b6e800b  gcc/testsuite/gcc.target/pru/mabi-ti-7.c
  d754f6db5a9f4cb648931c1a300fe5e6  gcc/testsuite/gcc.target/pru/pr64366.c
  aa63cbae8ab220e484f3dfce0053edb2  gcc/testsuite/gcc.target/pru/pragma-ctable_entry.c
! 14f976ff434d52b87549f51e59ecea6b  gcc/testsuite/gcc.target/pru/pru.exp
! 7a1298d80f26753aedd3f2268299e382  gcc/testsuite/gcc.target/pru/pru_irq_map.c
  7b1dfd818b26fc3abda3150a2a5dccb4  gcc/testsuite/gcc.target/pru/qbbc-1.c
  d022a63c4f1bad92f86058d5cc8188d1  gcc/testsuite/gcc.target/pru/qbbc-2.c
  fdb4e33b3d3de2cac49ab1b15be0e268  gcc/testsuite/gcc.target/pru/qbbc-3.c
  6c14130160ad81fe8d22056ef0b38971  gcc/testsuite/gcc.target/pru/qbbs-1.c
  041a329cb64f9209354915b4a653b7bd  gcc/testsuite/gcc.target/pru/qbbs-2.c
+ 010ce1de4683d816a27a4e5a927e701c  gcc/testsuite/gcc.target/pru/regio-as-pointer-2.c
+ babc41e1fb159baf65639dcd4743b170  gcc/testsuite/gcc.target/pru/regio-as-pointer.c
+ 6c8a905249e7f8cff5b2f99dfbf83402  gcc/testsuite/gcc.target/pru/regio-decl-2.c
+ 3c1f0d3c23f74bc5bfa2ae14e05387cf  gcc/testsuite/gcc.target/pru/regio-decl-3.c
+ fe3e2d372edcace6ec2dae459d505510  gcc/testsuite/gcc.target/pru/regio-decl-4.c
+ f2f0bb984b551a86fc98ff760129bc8c  gcc/testsuite/gcc.target/pru/regio-decl.c
+ ee9ea9c0720331a48787d3ce2768f7e9  gcc/testsuite/gcc.target/pru/regio-di.c
+ 650e711b2427af4263e88c6a7b3a5435  gcc/testsuite/gcc.target/pru/regio-hi.c
+ 5c9e6f37d63b8cb8c615932ac81973a6  gcc/testsuite/gcc.target/pru/regio-qi.c
+ dea082ffe588248c03ec3202db0ad6b4  gcc/testsuite/gcc.target/pru/regio.c
+ e4648ec15f2bbd0d4d9b5bb8d05ba657  gcc/testsuite/gcc.target/pru/regio.h
  1d79eec541c06253e1fdbcb6c40a51d9  gcc/testsuite/gcc.target/pru/setbit.c
  9b0eaea8eef2cef4829077b25cf651c8  gcc/testsuite/gcc.target/pru/zero_extend-and-hisi.c
  44d7b6cb38db4a3d2a89775ff4afc9e5  gcc/testsuite/gcc.target/pru/zero_extend-and-qihi.c
*************** fdb4e33b3d3de2cac49ab1b15be0e268  gcc/te
*** 68494,68606 ****
  2225a6f7684a41fdc3c9fedebe226c82  gcc/testsuite/gcc.target/pru/zero_extend-hisi.c
  57debb1068324d1b650c42700abacf74  gcc/testsuite/gcc.target/pru/zero_extend-qihi.c
  09a429ba90db19830e7f9b51abc8f22f  gcc/testsuite/gcc.target/pru/zero_extend-qisi.c
! 3af307e98b4d19cff95200a9122cceec  gcc/testsuite/gcc.target/riscv/arch-1.c
! a3f8756871697a9f730c8333769b058e  gcc/testsuite/gcc.target/riscv/arch-10.c
! 7022cae4afe89d3aa07e219e7be7c906  gcc/testsuite/gcc.target/riscv/arch-11.c
! 537cb7309d9505cf81f2ecf98518d08d  gcc/testsuite/gcc.target/riscv/arch-2.c
! 6ec433a4f2d7a8f155669be8aa26a27c  gcc/testsuite/gcc.target/riscv/arch-3.c
! 3c838cd0cfbd0418af6a53c5670f3331  gcc/testsuite/gcc.target/riscv/arch-4.c
! 392fca1ed0afb922f4fd91fcba9b333a  gcc/testsuite/gcc.target/riscv/arch-5.c
! 62c9695aa7838cf0b7341e2614062d69  gcc/testsuite/gcc.target/riscv/arch-6.c
! cf984397790566b55ef2dc82606fb385  gcc/testsuite/gcc.target/riscv/arch-7.c
! 47a10e4054f5420cfb5fd5fcd0a88eaf  gcc/testsuite/gcc.target/riscv/arch-8.c
! 610c8fea204038e15e9089d87b9b809c  gcc/testsuite/gcc.target/riscv/arch-9.c
! d73866915b1256dfde3248e9c0f07999  gcc/testsuite/gcc.target/riscv/attribute-1.c
! 642de0ea1380b117540b654779a18307  gcc/testsuite/gcc.target/riscv/attribute-10.c
! 449f1e9c90e27b80dc847305f221f64c  gcc/testsuite/gcc.target/riscv/attribute-11.c
! e77b06c0e97f7248ecd0dd110e74cdd5  gcc/testsuite/gcc.target/riscv/attribute-12.c
! e64a015db5f1c3784863193b26ecf66f  gcc/testsuite/gcc.target/riscv/attribute-13.c
! e43e1e2d278d2bdeac88581f6c6fbd04  gcc/testsuite/gcc.target/riscv/attribute-14.c
! 5556b38a6ce551cef74a3396ff23cda4  gcc/testsuite/gcc.target/riscv/attribute-15.c
! 80d10b55b112de681b7911dce37aa8ba  gcc/testsuite/gcc.target/riscv/attribute-16.c
! 20275d76e432203f5affe2f1ebfd9c5f  gcc/testsuite/gcc.target/riscv/attribute-17.c
  6d8ec8aa684c81e0984dcf68696e7f9c  gcc/testsuite/gcc.target/riscv/attribute-18.c
! 8b1c29f8e14afdb92a7c1bfb359664dc  gcc/testsuite/gcc.target/riscv/attribute-2.c
! 2d64bd54d43c95d99bb2c4cc3b341f5f  gcc/testsuite/gcc.target/riscv/attribute-3.c
! c6eb2a8166cec5d0ea9a5c6255c07257  gcc/testsuite/gcc.target/riscv/attribute-4.c
! 46bce839aefd04dcab306deddfeacae4  gcc/testsuite/gcc.target/riscv/attribute-5.c
! a98475419210c55a2bc7bb8b4aced65a  gcc/testsuite/gcc.target/riscv/attribute-7.c
! bbffc9daa7dc8e82cb2b671568b84141  gcc/testsuite/gcc.target/riscv/attribute-8.c
! 77731aa4f0bfb04d536ca1c298aff49d  gcc/testsuite/gcc.target/riscv/attribute-9.c
  ac22a668a6627141957bbd3d791e4b02  gcc/testsuite/gcc.target/riscv/flattened-struct-abi-1.c
  62823213389acb5bfc34bf2e10ae7aa7  gcc/testsuite/gcc.target/riscv/flattened-struct-abi-2.c
! 4b9c52bac0e4420fe66fd5ccc343689b  gcc/testsuite/gcc.target/riscv/interrupt-1.c
! 27109745601df825c5c92c2e4f0167d4  gcc/testsuite/gcc.target/riscv/interrupt-2.c
! d34f826178817dba362f95df51b4accd  gcc/testsuite/gcc.target/riscv/interrupt-3.c
! 890cf8defe81c4b2af8aafe1b5ca9c23  gcc/testsuite/gcc.target/riscv/interrupt-4.c
  9123fc821c454516a841bd5d016f9f25  gcc/testsuite/gcc.target/riscv/interrupt-5.c
! f69ed9814aa0739480a17cf1070d4373  gcc/testsuite/gcc.target/riscv/interrupt-conflict-mode.c
! 67a7e2d6d59a29d207583801c3cd4578  gcc/testsuite/gcc.target/riscv/interrupt-debug.c
! 9bdc171ee3189c34ddca37e7256aea93  gcc/testsuite/gcc.target/riscv/interrupt-mmode.c
! 2ce443591ef190d688d333d87a085267  gcc/testsuite/gcc.target/riscv/interrupt-smode.c
! 31c0ee6a8ca083c03de82b32a5cc0210  gcc/testsuite/gcc.target/riscv/interrupt-umode.c
! 05f31801bad335b2de518bea4230b946  gcc/testsuite/gcc.target/riscv/li.c
! 92b992d04fde94aee5b251f2605fb03b  gcc/testsuite/gcc.target/riscv/load-immediate.c
! 4aef0f89ffb494d0a744e3b040b6c9c7  gcc/testsuite/gcc.target/riscv/losum-overflow.c
  921c846f9d343bd139a635f83e6db437  gcc/testsuite/gcc.target/riscv/mcpu-1.c
  84a4693e36dd49686414997cb37fc127  gcc/testsuite/gcc.target/riscv/mcpu-2.c
  269992894322ca9fb2bc9217752bd689  gcc/testsuite/gcc.target/riscv/mcpu-3.c
  297b97dda64e94096f17b8881a96ba7c  gcc/testsuite/gcc.target/riscv/mcpu-4.c
  efcb2d5344bde460bcbee76b9e33c09d  gcc/testsuite/gcc.target/riscv/mcpu-5.c
! f10dd9a709d22cee958fd785672d36fe  gcc/testsuite/gcc.target/riscv/mcpu-6.c
! 5dd548bcc6e4a75ff60a9063af21468e  gcc/testsuite/gcc.target/riscv/mcpu-7.c
! bbc038d526e035bc943cafd8be527309  gcc/testsuite/gcc.target/riscv/pr102957.c
! 14c90f84d8058b60faff46b00c097a9c  gcc/testsuite/gcc.target/riscv/pr84660.c
! 1a434ff3440a676fb4f4c586bf3152e5  gcc/testsuite/gcc.target/riscv/pr93202.c
! 6a4efdae4822baf9f3df7454d4e40a5b  gcc/testsuite/gcc.target/riscv/pr93304.c
! b5552dc4ebe2e10cb2cd9798ba0a1ef5  gcc/testsuite/gcc.target/riscv/pr95252.c
! d554990de6257eaed21c873a91b78998  gcc/testsuite/gcc.target/riscv/pr95683.c
  4a09604ef4cdb81da6aaf6179b4347d1  gcc/testsuite/gcc.target/riscv/pr96759.c
! 6f8b3515450502b2f9fe3e7f7f9a02a2  gcc/testsuite/gcc.target/riscv/pr98777.c
! f14c5181c4869646f5e8c36361c92f46  gcc/testsuite/gcc.target/riscv/pr99702.c
! f0f91a28596e2dcf0af2dee634ce81cd  gcc/testsuite/gcc.target/riscv/predef-1.c
! 59a9f0893abd5996f21d36f0058cfe24  gcc/testsuite/gcc.target/riscv/predef-10.c
! 096149631537bdf4dd88e802b462a530  gcc/testsuite/gcc.target/riscv/predef-11.c
! f46ee91bdd6764124754e30c5a7ebaae  gcc/testsuite/gcc.target/riscv/predef-12.c
! e47448da6c2d8048a0a92395071dcdb3  gcc/testsuite/gcc.target/riscv/predef-13.c
! a800b0b2c0a7c1b33ad7379a050995d6  gcc/testsuite/gcc.target/riscv/predef-2.c
! 5c8502ab810707cc250bad5ead954f4d  gcc/testsuite/gcc.target/riscv/predef-3.c
! eda1d9bd1ce79d8ed80f502e428d2855  gcc/testsuite/gcc.target/riscv/predef-4.c
! d12111264ce68b92da7294ffed1c4dcc  gcc/testsuite/gcc.target/riscv/predef-5.c
! 746c7a1465e1195eff43aa4dc0c5f55b  gcc/testsuite/gcc.target/riscv/predef-6.c
! 6fcfed4dbaf9d6628a54e12a265b94fc  gcc/testsuite/gcc.target/riscv/predef-7.c
! 5100854f35b1aa15ea4604d6a5d4478e  gcc/testsuite/gcc.target/riscv/predef-8.c
! b78c980bec602c6a91ac1bc85320f39f  gcc/testsuite/gcc.target/riscv/promote-type-for-libcall.c
  65ce2c3872664bd9ee6b621cf3ea090d  gcc/testsuite/gcc.target/riscv/read-thread-pointer.c
! 35ed43aa2745975daa3bed2dbfbcf2f1  gcc/testsuite/gcc.target/riscv/riscv.exp
! 6bd569a0881471228538a06acf78338a  gcc/testsuite/gcc.target/riscv/save-restore-1.c
! 77bed88da7126dd689a1ab20a2139f05  gcc/testsuite/gcc.target/riscv/save-restore-2.c
! c8b1672dbe936755570d9695ec9f371f  gcc/testsuite/gcc.target/riscv/save-restore-3.c
! 89d57422b47a1b1dd41df09ef6a0f6af  gcc/testsuite/gcc.target/riscv/save-restore-4.c
  a353c71e9bc85212fdb19558b2ceca1c  gcc/testsuite/gcc.target/riscv/save-restore-5.c
! 223a88e1659997e57bba5dcb286f9e8b  gcc/testsuite/gcc.target/riscv/save-restore-6.c
! 26a5614cc19809cc9b2bf059e8b0bdd0  gcc/testsuite/gcc.target/riscv/save-restore-7.c
! eb3e02261ae46eb9518822032d7fe89d  gcc/testsuite/gcc.target/riscv/save-restore-8.c
! 734bfbd4b05b64b9c035fd7c5eba05a0  gcc/testsuite/gcc.target/riscv/save-restore-9.c
! 150aa4eb381ea8572b1fe3f201704777  gcc/testsuite/gcc.target/riscv/shift-and-1.c
! 9b847cd0a308530a3fd894de275aab48  gcc/testsuite/gcc.target/riscv/shift-and-2.c
! 0b46a17ee46024f3154dbf8bdd5cbb02  gcc/testsuite/gcc.target/riscv/shift-shift-1.c
! 04f78f5b27020ebb5749248ba9ac40f0  gcc/testsuite/gcc.target/riscv/shift-shift-2.c
! 1dfed59e9e4db3db2d143a2eba583e14  gcc/testsuite/gcc.target/riscv/shift-shift-3.c
! abf54bfa9c926f5b5adf9ebd76030325  gcc/testsuite/gcc.target/riscv/shift-shift-4.c
! b32392b4018e3f861a366d7eb51bd3fa  gcc/testsuite/gcc.target/riscv/shift-shift-5.c
! 62eec78b40a444b14c9753b06f65a2d8  gcc/testsuite/gcc.target/riscv/shorten-memrefs-1.c
! 77b0ca02677452944d897c6f1f064bc4  gcc/testsuite/gcc.target/riscv/shorten-memrefs-2.c
! 77039217c6c166b118ffe78f398fa588  gcc/testsuite/gcc.target/riscv/shorten-memrefs-3.c
! 226db015baafbc4b55a9c57b043faa1b  gcc/testsuite/gcc.target/riscv/shorten-memrefs-4.c
! 43f91c2ab9c1460cb9f1c0d80de3c4e9  gcc/testsuite/gcc.target/riscv/shorten-memrefs-5.c
! 9fe7532544f05136d055974fea8ffb79  gcc/testsuite/gcc.target/riscv/shorten-memrefs-6.c
! 56e5df5c0ca48528c8070336e03273ff  gcc/testsuite/gcc.target/riscv/shorten-memrefs-7.c
! 1916a9b7496aeb9122302a0fe725728d  gcc/testsuite/gcc.target/riscv/shorten-memrefs-8.c
! 6dfb9790e241f950ea2aa3291b159220  gcc/testsuite/gcc.target/riscv/switch-qi.c
! 8fb57c19db131e7052dd356fcaf31c36  gcc/testsuite/gcc.target/riscv/switch-si.c
! 49941bd45fc4de8389bf599961feafd6  gcc/testsuite/gcc.target/riscv/weak-1.c
! c8d42675ec79f56ceeed3c3797669b7c  gcc/testsuite/gcc.target/riscv/zero-extend-1.c
! c3ce6b52f1909da2cedd31c51bf02d6f  gcc/testsuite/gcc.target/riscv/zero-extend-2.c
! c3eed8a5cded8ce0f4df5f4136bc5a2e  gcc/testsuite/gcc.target/riscv/zero-extend-3.c
! a3b8d54effeae9107d81958755eb9ef6  gcc/testsuite/gcc.target/riscv/zero-extend-4.c
! 35bd80733e17ab657a6acfd9c805d1dc  gcc/testsuite/gcc.target/riscv/zero-extend-5.c
! 8d9db29987ee35b244956389812bb6d7  gcc/testsuite/gcc.target/rl78/rl78.exp
  08a6a665d3a592b70dd51e3b59945801  gcc/testsuite/gcc.target/rl78/test_addm3.c
  f0737b5115c4a94dc1b2f670de5d83a4  gcc/testsuite/gcc.target/rl78/test_addsi3_internal.c
  77b20d827a48683a5d34b36224891ead  gcc/testsuite/gcc.target/rl78/test_auto_vector.c
--- 72317,72462 ----
  2225a6f7684a41fdc3c9fedebe226c82  gcc/testsuite/gcc.target/pru/zero_extend-hisi.c
  57debb1068324d1b650c42700abacf74  gcc/testsuite/gcc.target/pru/zero_extend-qihi.c
  09a429ba90db19830e7f9b51abc8f22f  gcc/testsuite/gcc.target/pru/zero_extend-qisi.c
! d0db5e2267389a1185e58b9406371ee4  gcc/testsuite/gcc.target/riscv/arch-1.c
! 3b7707b06c4df57de1fbf8812c8df071  gcc/testsuite/gcc.target/riscv/arch-10.c
! ec7f5ab1f99ea69345d1e5ac8e166932  gcc/testsuite/gcc.target/riscv/arch-11.c
! 9b7c1f01701052a7090ca3d1d4b0be54  gcc/testsuite/gcc.target/riscv/arch-12.c
! b353e25bf8c050c9bb23e150b537ad4a  gcc/testsuite/gcc.target/riscv/arch-13.c
! 8b8697567c751496fc4ac7b320f52e7a  gcc/testsuite/gcc.target/riscv/arch-14.c
! 91157ce4b1f35354afc7bed46671c63c  gcc/testsuite/gcc.target/riscv/arch-15.c
! 07c54de88d120fb9d5f2cb208bd8ebcf  gcc/testsuite/gcc.target/riscv/arch-2.c
! acb7dcb6bf251bf541bd328345825a0f  gcc/testsuite/gcc.target/riscv/arch-3.c
! a7fd98a8530a5994fa6594c79ed33fc5  gcc/testsuite/gcc.target/riscv/arch-4.c
! 7e2bcd391e8a5dd85f2b8d1463a8df3d  gcc/testsuite/gcc.target/riscv/arch-5.c
! 2cd6ade559b1ab254703146aa7008e18  gcc/testsuite/gcc.target/riscv/arch-6.c
! 81519955d6644acb55c78120405494a5  gcc/testsuite/gcc.target/riscv/arch-7.c
! ec0990d4345bd503d7a090432b5eb8c0  gcc/testsuite/gcc.target/riscv/arch-8.c
! 618e0be396e7e79ffa293a23f42b305d  gcc/testsuite/gcc.target/riscv/arch-9.c
! 021cf69585e7f17c1b8b4d4324845510  gcc/testsuite/gcc.target/riscv/attribute-1.c
! 54c5f52de6a202ed77a056980953dfba  gcc/testsuite/gcc.target/riscv/attribute-10.c
! f0d20f8a7e02207b95f7a8b4f3066027  gcc/testsuite/gcc.target/riscv/attribute-11.c
! 2be23f1c0480d289b430a7da2bee15a7  gcc/testsuite/gcc.target/riscv/attribute-12.c
! 57fe31e4d8f18b4d72e65e6cc02ab7ee  gcc/testsuite/gcc.target/riscv/attribute-13.c
! 0ee1583436ec6d6afb46b7f5bc4d46da  gcc/testsuite/gcc.target/riscv/attribute-14.c
! 39e4f92d19a2c273893cddd2c316ee29  gcc/testsuite/gcc.target/riscv/attribute-15.c
! 8e7af04c08686a53777ea22cd76ab589  gcc/testsuite/gcc.target/riscv/attribute-16.c
! d013ee2ea07d94e3a094d8f29220ed89  gcc/testsuite/gcc.target/riscv/attribute-17.c
  6d8ec8aa684c81e0984dcf68696e7f9c  gcc/testsuite/gcc.target/riscv/attribute-18.c
! 0fc4c1497c70fd6543e830c02559ab3a  gcc/testsuite/gcc.target/riscv/attribute-19.c
! 4a321b1fc86bbe78c3f53248aba72a2b  gcc/testsuite/gcc.target/riscv/attribute-2.c
! 85d31390103bd01472a22653b86f9bbc  gcc/testsuite/gcc.target/riscv/attribute-3.c
! dad325a459f19676dfee86731f315a34  gcc/testsuite/gcc.target/riscv/attribute-4.c
! 77eef0bbefcd27f3e5ecf9e0e4a809da  gcc/testsuite/gcc.target/riscv/attribute-5.c
! e21ab49d7189048e7846cf34bb083a0c  gcc/testsuite/gcc.target/riscv/attribute-7.c
! 3a94bc06ffd8655006bf4f73ce32c6d0  gcc/testsuite/gcc.target/riscv/attribute-8.c
! c168d11fce6257194b04ca108933932b  gcc/testsuite/gcc.target/riscv/attribute-9.c
  ac22a668a6627141957bbd3d791e4b02  gcc/testsuite/gcc.target/riscv/flattened-struct-abi-1.c
  62823213389acb5bfc34bf2e10ae7aa7  gcc/testsuite/gcc.target/riscv/flattened-struct-abi-2.c
! ebafbcb889d217f529a4a6f6ca558444  gcc/testsuite/gcc.target/riscv/interrupt-1.c
! 9403cf8e7b3af27ece005e85c732a485  gcc/testsuite/gcc.target/riscv/interrupt-2.c
! 2c4e63df0ea453e7839094f9d7beb67b  gcc/testsuite/gcc.target/riscv/interrupt-3.c
! 8f051d0b3bea4d4fffe124ffc69cc499  gcc/testsuite/gcc.target/riscv/interrupt-4.c
  9123fc821c454516a841bd5d016f9f25  gcc/testsuite/gcc.target/riscv/interrupt-5.c
! 9505a89fb61ad2da955a88ba280be95d  gcc/testsuite/gcc.target/riscv/interrupt-conflict-mode.c
! adbaeb88f854d032ccb024f677c39231  gcc/testsuite/gcc.target/riscv/interrupt-debug.c
! 2bf5aaa11450917f6c66b813b88df056  gcc/testsuite/gcc.target/riscv/interrupt-mmode.c
! e7e93d441684b5aaccb4b78191215f6d  gcc/testsuite/gcc.target/riscv/interrupt-smode.c
! 6a8b7e20145cdf60f298a2c4078d2a20  gcc/testsuite/gcc.target/riscv/interrupt-umode.c
! 9ae56141fab814505fcf7366ef12db85  gcc/testsuite/gcc.target/riscv/li.c
! 6308e09d3e5133433b97e26dcb02daba  gcc/testsuite/gcc.target/riscv/load-immediate.c
! 7530069d23aa7990ff78ecce4ac40cae  gcc/testsuite/gcc.target/riscv/losum-overflow.c
  921c846f9d343bd139a635f83e6db437  gcc/testsuite/gcc.target/riscv/mcpu-1.c
  84a4693e36dd49686414997cb37fc127  gcc/testsuite/gcc.target/riscv/mcpu-2.c
  269992894322ca9fb2bc9217752bd689  gcc/testsuite/gcc.target/riscv/mcpu-3.c
  297b97dda64e94096f17b8881a96ba7c  gcc/testsuite/gcc.target/riscv/mcpu-4.c
  efcb2d5344bde460bcbee76b9e33c09d  gcc/testsuite/gcc.target/riscv/mcpu-5.c
! e20585893ea69038755bd9bf2baa0622  gcc/testsuite/gcc.target/riscv/mcpu-6.c
! 5a433cb606f15a057de6b4d95a40169d  gcc/testsuite/gcc.target/riscv/mcpu-7.c
! 9188465f5f69f5d38067c08a962f52f2  gcc/testsuite/gcc.target/riscv/pr102957.c
! c70df77dca2d9d059e9b22e279613d45  gcc/testsuite/gcc.target/riscv/pr103302.c
! 78659ffafd452ac6a43859083b99d8ae  gcc/testsuite/gcc.target/riscv/pr104140.c
! 62fc13de2a3248454aa1c822e4421155  gcc/testsuite/gcc.target/riscv/pr105314.c
! 10400130cc47973d43925669f3c795ed  gcc/testsuite/gcc.target/riscv/pr84660.c
! 287e116d84e5eca39a410aca336f89b1  gcc/testsuite/gcc.target/riscv/pr93202.c
! 4ec5e1eb12b4c6fb12d89619f49ef627  gcc/testsuite/gcc.target/riscv/pr93304.c
! f95453a04d25316c015010a3d66699b8  gcc/testsuite/gcc.target/riscv/pr95252.c
! 2a0b4380ee3a1ae8c2f449020e1caa54  gcc/testsuite/gcc.target/riscv/pr95683.c
  4a09604ef4cdb81da6aaf6179b4347d1  gcc/testsuite/gcc.target/riscv/pr96759.c
! 06f027ca6a8c58be75a7b860dc39bf86  gcc/testsuite/gcc.target/riscv/pr98777.c
! 576ffdec066d69c35af0753463b174ae  gcc/testsuite/gcc.target/riscv/pr99702.c
! 78237d8616afb1aa47a7542da5468b4a  gcc/testsuite/gcc.target/riscv/predef-1.c
! 631c168c77a9af0c773050bef4b8943f  gcc/testsuite/gcc.target/riscv/predef-10.c
! 318dab274ae6db996cba3a94694e749d  gcc/testsuite/gcc.target/riscv/predef-11.c
! a2c9fa03a9dd9f49ac1497ec91ae9cca  gcc/testsuite/gcc.target/riscv/predef-12.c
! 4310ac93b7a0393d447e4efec713c181  gcc/testsuite/gcc.target/riscv/predef-13.c
! 67f7abc735dbed9d29b85072fde9a24f  gcc/testsuite/gcc.target/riscv/predef-14.c
! 9088f8403241134b8270db2df6d9b679  gcc/testsuite/gcc.target/riscv/predef-15.c
! 57227b90a217d586094bff4595f9815d  gcc/testsuite/gcc.target/riscv/predef-16.c
! 981b22f8d0822eb392cc684aea295a02  gcc/testsuite/gcc.target/riscv/predef-17.c
! a335b5e1909d390294a0a65a294b3327  gcc/testsuite/gcc.target/riscv/predef-18.c
! 7467c900a7a5a13d2990492333310a6c  gcc/testsuite/gcc.target/riscv/predef-19.c
! 24080ddab0c7254e9c3e5b6e684b71c2  gcc/testsuite/gcc.target/riscv/predef-2.c
! 1dae05fb7ee217e838eabf1f45e7114e  gcc/testsuite/gcc.target/riscv/predef-20.c
! 70eb42646f5429619515c25c72770c17  gcc/testsuite/gcc.target/riscv/predef-3.c
! 77ef663f023b4dd7d133f5b64ddc4979  gcc/testsuite/gcc.target/riscv/predef-4.c
! af35b7665e704672648c454914aed786  gcc/testsuite/gcc.target/riscv/predef-5.c
! 4988ec3213a71adbc67f3707483f636b  gcc/testsuite/gcc.target/riscv/predef-6.c
! abae81877589b27444cd46022e7b31fb  gcc/testsuite/gcc.target/riscv/predef-7.c
! 2ddc569aca38f5ab07ad727d4d771543  gcc/testsuite/gcc.target/riscv/predef-8.c
! 9ac2b9b8f51654fa48e8cb3aa6343a32  gcc/testsuite/gcc.target/riscv/promote-type-for-libcall.c
  65ce2c3872664bd9ee6b621cf3ea090d  gcc/testsuite/gcc.target/riscv/read-thread-pointer.c
! a9f1fb669971ce312160aa92ecd608bb  gcc/testsuite/gcc.target/riscv/riscv.exp
! e21250cdea6ea09da525f0119c38ea38  gcc/testsuite/gcc.target/riscv/save-restore-1.c
! d9f3969fcf83beaed59186cbaaa465bf  gcc/testsuite/gcc.target/riscv/save-restore-2.c
! f77ea662d9f85837dacf2e485dc91143  gcc/testsuite/gcc.target/riscv/save-restore-3.c
! 9bde6bb60fe068ba38eb7f00929b2b63  gcc/testsuite/gcc.target/riscv/save-restore-4.c
  a353c71e9bc85212fdb19558b2ceca1c  gcc/testsuite/gcc.target/riscv/save-restore-5.c
! c08993fb3b1eec219ac8ae53cc03597e  gcc/testsuite/gcc.target/riscv/save-restore-6.c
! e235c279f7ce15f9087254bf97918762  gcc/testsuite/gcc.target/riscv/save-restore-7.c
! 88dbe500ee71e24bf3a5827524daa6a6  gcc/testsuite/gcc.target/riscv/save-restore-8.c
! ca1e563124a7035c98d86fadbdd1371d  gcc/testsuite/gcc.target/riscv/save-restore-9.c
! 763d05548f04a56e951795e6503a810c  gcc/testsuite/gcc.target/riscv/shift-and-1.c
! 84c8ae748549dd620b75bf4c20c8571a  gcc/testsuite/gcc.target/riscv/shift-and-2.c
! 53aed487d057c50e553501f96767a8e7  gcc/testsuite/gcc.target/riscv/shift-shift-1.c
! adeab39fcb6c1ec904288ee86a3fe990  gcc/testsuite/gcc.target/riscv/shift-shift-2.c
! c362166b82cfd15aece996eccbc64f3b  gcc/testsuite/gcc.target/riscv/shift-shift-3.c
! 3fea76f17e317b5f62c76206c3db714b  gcc/testsuite/gcc.target/riscv/shift-shift-4.c
! 26ae4f6d79a8e8f5c115859a5a225a5d  gcc/testsuite/gcc.target/riscv/shift-shift-5.c
! 247ec0f1826f2457f2b71b9507d54bd4  gcc/testsuite/gcc.target/riscv/shorten-memrefs-1.c
! 6b93f1ca4993d204a98b0faf05e1b631  gcc/testsuite/gcc.target/riscv/shorten-memrefs-2.c
! ed9df552f948fb7d24fbf78d7c396da3  gcc/testsuite/gcc.target/riscv/shorten-memrefs-3.c
! 91f20599356624f2450c7021221822a6  gcc/testsuite/gcc.target/riscv/shorten-memrefs-4.c
! 5c46af70be0369c6c73358621c699956  gcc/testsuite/gcc.target/riscv/shorten-memrefs-5.c
! 448f79300173857aa9caefb09ddd795e  gcc/testsuite/gcc.target/riscv/shorten-memrefs-6.c
! 0f1d841ce46c53b8978fe44320b0b635  gcc/testsuite/gcc.target/riscv/shorten-memrefs-7.c
! 76580e1637275435e3a9a424e9c3789f  gcc/testsuite/gcc.target/riscv/shorten-memrefs-8.c
! 3972750143cd7dd650cdab45b716366c  gcc/testsuite/gcc.target/riscv/switch-qi.c
! 55b7a5fbbc21abad8b24fc94d7adf9c6  gcc/testsuite/gcc.target/riscv/switch-si.c
! 76005de0a7c1ca66b1b06de3c53ad1c2  gcc/testsuite/gcc.target/riscv/weak-1.c
! 19ac4192707a6577469d125431cdefc9  gcc/testsuite/gcc.target/riscv/zba-adduw.c
! 439000b8b977f80aaf4001f0df2a2708  gcc/testsuite/gcc.target/riscv/zba-shNadd-01.c
! 91eb944f291436f0dbc28f8582caf85f  gcc/testsuite/gcc.target/riscv/zba-shNadd-02.c
! 80c06090d5b9372e4d3b24414a3ac481  gcc/testsuite/gcc.target/riscv/zba-shNadd-03.c
! 1b8636944ff925cb64365451c0156358  gcc/testsuite/gcc.target/riscv/zba-slliuw.c
! fc7c6281b4cedac153ced742d0cc8c5b  gcc/testsuite/gcc.target/riscv/zba-zextw.c
! 0ee4c750d9a61f375588a40c48b04e98  gcc/testsuite/gcc.target/riscv/zbb-andn-orn-xnor-01.c
! d5b3992f3e13d5bd291fe4479a1fadb6  gcc/testsuite/gcc.target/riscv/zbb-andn-orn-xnor-02.c
! 35227b696f49eef2ddac0862665d9ab2  gcc/testsuite/gcc.target/riscv/zbb-li-rotr.c
! 3471a95bcdebb938d770978eb8d08add  gcc/testsuite/gcc.target/riscv/zbb-min-max.c
! dbd02e997494852a8425da306f93f58d  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-01.c
! c0698d5adec3f1300d17232a8da78e04  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-02.c
! e90eca75db4a4b2cfc5144938f3e1327  gcc/testsuite/gcc.target/riscv/zbb-rol-ror-03.c
! 7d738998e5e4d1a51d6b8f5227d896ef  gcc/testsuite/gcc.target/riscv/zbbw.c
! c271e5b072a3646600a1899a96adda89  gcc/testsuite/gcc.target/riscv/zbs-bclr.c
! 1bea53e355bb7cbbf1ab855fa6e83c7d  gcc/testsuite/gcc.target/riscv/zbs-bext.c
! f0758d2a3ccffebc00b0ad5385022ac8  gcc/testsuite/gcc.target/riscv/zbs-binv.c
! e09110fde228f69b253ac5e753d43601  gcc/testsuite/gcc.target/riscv/zbs-bset.c
! cedf31a83e340f11dc6b347811079ad3  gcc/testsuite/gcc.target/riscv/zero-extend-1.c
! 3ae98dfd4e99f1110956db75e0a6b5b2  gcc/testsuite/gcc.target/riscv/zero-extend-2.c
! f6a8c03b002394bdd304c26e43d03f83  gcc/testsuite/gcc.target/riscv/zero-extend-3.c
! a160364612bb7f4e7091db81877266a6  gcc/testsuite/gcc.target/riscv/zero-extend-4.c
! 1c7cc4d79a825451f95eba8f7d7c7979  gcc/testsuite/gcc.target/riscv/zero-extend-5.c
! 7488cf4440e70fec6e229ebdc3964bfa  gcc/testsuite/gcc.target/rl78/rl78.exp
  08a6a665d3a592b70dd51e3b59945801  gcc/testsuite/gcc.target/rl78/test_addm3.c
  f0737b5115c4a94dc1b2f670de5d83a4  gcc/testsuite/gcc.target/rl78/test_addsi3_internal.c
  77b20d827a48683a5d34b36224891ead  gcc/testsuite/gcc.target/rl78/test_auto_vector.c
*************** f0737b5115c4a94dc1b2f670de5d83a4  gcc/te
*** 68613,68619 ****
  1854cae6bc69cd8d1d547a850a4e43f0  gcc/testsuite/gcc.target/rx/packed-struct.c
  c141239c428d6f6e368356cbbd1dcdb7  gcc/testsuite/gcc.target/rx/pr83831.c
  853c27a897cefbe98ebdbb934bbedef0  gcc/testsuite/gcc.target/rx/rx-abi-function-tests.c
! b1c68a4772404746fbe7b3929743db0c  gcc/testsuite/gcc.target/rx/rx.exp
  e718c4f5bac79651adb4d0396b231953  gcc/testsuite/gcc.target/rx/zero-width-bitfield.c
  2326486bbdc13fa6e49aadd508a1be61  gcc/testsuite/gcc.target/s390/20020926-1.c
  5f66a42e5c40df26aab6aad04c3794e3  gcc/testsuite/gcc.target/s390/20030123-1.c
--- 72469,72475 ----
  1854cae6bc69cd8d1d547a850a4e43f0  gcc/testsuite/gcc.target/rx/packed-struct.c
  c141239c428d6f6e368356cbbd1dcdb7  gcc/testsuite/gcc.target/rx/pr83831.c
  853c27a897cefbe98ebdbb934bbedef0  gcc/testsuite/gcc.target/rx/rx-abi-function-tests.c
! 5fa4c98dc47af8168f16cfecba29173c  gcc/testsuite/gcc.target/rx/rx.exp
  e718c4f5bac79651adb4d0396b231953  gcc/testsuite/gcc.target/rx/zero-width-bitfield.c
  2326486bbdc13fa6e49aadd508a1be61  gcc/testsuite/gcc.target/s390/20020926-1.c
  5f66a42e5c40df26aab6aad04c3794e3  gcc/testsuite/gcc.target/s390/20030123-1.c
*************** c975117f4dad5f7d006165a64d22ff94  gcc/te
*** 68627,68633 ****
  943c3f5138314c478e34a5e9e2849353  gcc/testsuite/gcc.target/s390/20071212-1.c
  f657a587777cadd240d90267c42183a8  gcc/testsuite/gcc.target/s390/20090223-1.c
  b496b43e01188107d0277ab22fe7faa6  gcc/testsuite/gcc.target/s390/20140327-1.c
! f9efcac72c7632def29469b0cbef14cb  gcc/testsuite/gcc.target/s390/20150826-1.c
  4a96580e145f1c61cef78ba991ab4066  gcc/testsuite/gcc.target/s390/20181024-1.c
  f27f299747d9862a0ca9a3ab3770f1c4  gcc/testsuite/gcc.target/s390/20200617.c
  1dabce41016ae8d4d1de9989a3307a73  gcc/testsuite/gcc.target/s390/20211119.c
--- 72483,72489 ----
  943c3f5138314c478e34a5e9e2849353  gcc/testsuite/gcc.target/s390/20071212-1.c
  f657a587777cadd240d90267c42183a8  gcc/testsuite/gcc.target/s390/20090223-1.c
  b496b43e01188107d0277ab22fe7faa6  gcc/testsuite/gcc.target/s390/20140327-1.c
! 0a834a7ade0902d6124c6925bdeba9fc  gcc/testsuite/gcc.target/s390/20150826-1.c
  4a96580e145f1c61cef78ba991ab4066  gcc/testsuite/gcc.target/s390/20181024-1.c
  f27f299747d9862a0ca9a3ab3770f1c4  gcc/testsuite/gcc.target/s390/20200617.c
  1dabce41016ae8d4d1de9989a3307a73  gcc/testsuite/gcc.target/s390/20211119.c
*************** e07e6660958c696654a27d7001ddf95d  gcc/te
*** 68644,68650 ****
  6e6c92da667e4c33f8b6a86564530943  gcc/testsuite/gcc.target/s390/arch13/fp-signedint-convert-1.c
  032989f1c763b5166788568d73acb86f  gcc/testsuite/gcc.target/s390/arch13/fp-unsignedint-convert-1.c
  364f6940fabfcd0b02c28af93b437b1c  gcc/testsuite/gcc.target/s390/arch13/popcount-1.c
! 1deeab69d91a9d83c44dd8082234428a  gcc/testsuite/gcc.target/s390/arch13/sel-1.c
  bf08d8ae3952e5a9f6d75de6c60a3a5f  gcc/testsuite/gcc.target/s390/asm-machine-1.c
  062c9cbdb4b33e5a9c45bd579c02df3b  gcc/testsuite/gcc.target/s390/asm-machine-2.c
  46b0c503c4e6198758f37694ae9566d1  gcc/testsuite/gcc.target/s390/asm-machine-3.c
--- 72500,72507 ----
  6e6c92da667e4c33f8b6a86564530943  gcc/testsuite/gcc.target/s390/arch13/fp-signedint-convert-1.c
  032989f1c763b5166788568d73acb86f  gcc/testsuite/gcc.target/s390/arch13/fp-unsignedint-convert-1.c
  364f6940fabfcd0b02c28af93b437b1c  gcc/testsuite/gcc.target/s390/arch13/popcount-1.c
! 3c016ed407b9af1863b6adcef0bb891a  gcc/testsuite/gcc.target/s390/arch13/sel-1.c
! 4ce603e2d83e4fcf4fa5babc96818e9b  gcc/testsuite/gcc.target/s390/ashr.c
  bf08d8ae3952e5a9f6d75de6c60a3a5f  gcc/testsuite/gcc.target/s390/asm-machine-1.c
  062c9cbdb4b33e5a9c45bd579c02df3b  gcc/testsuite/gcc.target/s390/asm-machine-2.c
  46b0c503c4e6198758f37694ae9566d1  gcc/testsuite/gcc.target/s390/asm-machine-3.c
*************** e69b1b91153a3bf733d7b911d27f92d1  gcc/te
*** 68679,68685 ****
  46ecba66446e0ff75c58b8c476d318d9  gcc/testsuite/gcc.target/s390/global-array-almost-huge-element.c
  339b5d2f3d9288a416be37bf773e7fd8  gcc/testsuite/gcc.target/s390/global-array-almost-negative-huge-element.c
  927ba8856c8a059ea35b7a5aa000a4c7  gcc/testsuite/gcc.target/s390/global-array-element-pic.c
! 4f19702071b04a45e600b052fccf6672  gcc/testsuite/gcc.target/s390/global-array-element-pic2.c
  4f9fe6f9b7ce15b1bfc7f4d2953c8ab3  gcc/testsuite/gcc.target/s390/global-array-even-element.c
  6006bf10a65a3d925ad0fa13c5bc4f2f  gcc/testsuite/gcc.target/s390/global-array-huge-element.c
  82ea28ab074cb45eafa2132c9fd8bd07  gcc/testsuite/gcc.target/s390/global-array-negative-huge-element.c
--- 72536,72542 ----
  46ecba66446e0ff75c58b8c476d318d9  gcc/testsuite/gcc.target/s390/global-array-almost-huge-element.c
  339b5d2f3d9288a416be37bf773e7fd8  gcc/testsuite/gcc.target/s390/global-array-almost-negative-huge-element.c
  927ba8856c8a059ea35b7a5aa000a4c7  gcc/testsuite/gcc.target/s390/global-array-element-pic.c
! 939d0d8cfb1b36d6a99e9d550456b7ac  gcc/testsuite/gcc.target/s390/global-array-element-pic2.c
  4f9fe6f9b7ce15b1bfc7f4d2953c8ab3  gcc/testsuite/gcc.target/s390/global-array-even-element.c
  6006bf10a65a3d925ad0fa13c5bc4f2f  gcc/testsuite/gcc.target/s390/global-array-huge-element.c
  82ea28ab074cb45eafa2132c9fd8bd07  gcc/testsuite/gcc.target/s390/global-array-negative-huge-element.c
*************** b3dd05db76a00a764bd5968152b2ef72  gcc/te
*** 68738,68743 ****
--- 72595,72603 ----
  81eabdfd43ce0edc626c27f72b8cbfed  gcc/testsuite/gcc.target/s390/htm-nofloat-compile-1.c
  cee6dc33f1adf8eae8308b4a853a7686  gcc/testsuite/gcc.target/s390/ifcvt-one-insn-bool.c
  ea304d4ba7ef6c195eb09c6993c50064  gcc/testsuite/gcc.target/s390/ifcvt-one-insn-char.c
+ 851c22c4fd4ac9fa8f3330da80acfb9c  gcc/testsuite/gcc.target/s390/ifcvt-two-insns-bool.c
+ 05c9da37698402929c07c483123e9e91  gcc/testsuite/gcc.target/s390/ifcvt-two-insns-int.c
+ ff50c413e44f37b768bf41c7f7d0b616  gcc/testsuite/gcc.target/s390/ifcvt-two-insns-long.c
  404116fb6b10d4fe3544c0e8e39a1204  gcc/testsuite/gcc.target/s390/insv-1.c
  7361c2c610e646df57c6d91b57e4689e  gcc/testsuite/gcc.target/s390/insv-2.c
  baa6d1c3d77baf7c1324df7bb6f4f40c  gcc/testsuite/gcc.target/s390/insv-3.c
*************** f13fa958f52666320ebd966fc9530e05  gcc/te
*** 68749,68756 ****
  a588f46b95abbab88ae5d34ca6ecdd74  gcc/testsuite/gcc.target/s390/load-and-test-fp-1.c
  29bb396d81160d4cfff6eea515a4540d  gcc/testsuite/gcc.target/s390/load-and-test-fp-2.c
  d473dda0acb68834c59c17300e9ce72a  gcc/testsuite/gcc.target/s390/load-and-test-fp.h
! 152456ddcd3af7995b7d613bdbcd10f5  gcc/testsuite/gcc.target/s390/load-imm64-1.c
! 4c57c6524dd8e7200aaa50124a0b1865  gcc/testsuite/gcc.target/s390/load-imm64-2.c
  39a3f1ac65f6b0dc5d9fe19ba5ed5f96  gcc/testsuite/gcc.target/s390/load-relative-check.c
  19669d4c8129516729256af32eaf6e79  gcc/testsuite/gcc.target/s390/load-thread-pointer-once-2.c
  b8618898336397f0399d4c97701db7b8  gcc/testsuite/gcc.target/s390/load-thread-pointer-once.c
--- 72609,72616 ----
  a588f46b95abbab88ae5d34ca6ecdd74  gcc/testsuite/gcc.target/s390/load-and-test-fp-1.c
  29bb396d81160d4cfff6eea515a4540d  gcc/testsuite/gcc.target/s390/load-and-test-fp-2.c
  d473dda0acb68834c59c17300e9ce72a  gcc/testsuite/gcc.target/s390/load-and-test-fp.h
! a036b9c25181b348fabb813340965fd8  gcc/testsuite/gcc.target/s390/load-imm64-1.c
! 67bc799c51190b143fcacd467d5604ab  gcc/testsuite/gcc.target/s390/load-imm64-2.c
  39a3f1ac65f6b0dc5d9fe19ba5ed5f96  gcc/testsuite/gcc.target/s390/load-relative-check.c
  19669d4c8129516729256af32eaf6e79  gcc/testsuite/gcc.target/s390/load-thread-pointer-once-2.c
  b8618898336397f0399d4c97701db7b8  gcc/testsuite/gcc.target/s390/load-thread-pointer-once.c
*************** c754a4515598fececb1e5306e99940eb  gcc/te
*** 68776,68781 ****
--- 72636,72642 ----
  e487655bbd959e42358a2a891b8712b8  gcc/testsuite/gcc.target/s390/mrecord-mcount.c
  89187d4ded3bce370dc2fc5e2b6166b6  gcc/testsuite/gcc.target/s390/mul-signed-overflow-1.c
  7848d2e49973e98fd02e545a79bb6b05  gcc/testsuite/gcc.target/s390/mul-signed-overflow-2.c
+ 4ebab6f204bac7a0c329a474cfea88ba  gcc/testsuite/gcc.target/s390/mul-wide.c
  ee3f00537b1c391d545c37c6ea4a145c  gcc/testsuite/gcc.target/s390/nearestint-1.c
  062259b85f76e8eaa4f342bcb50de319  gcc/testsuite/gcc.target/s390/nobp-function-pointer-attr.c
  fea682ccb6ddf5d48ba2e5b9a2ef8ae6  gcc/testsuite/gcc.target/s390/nobp-function-pointer-nothunk.c
*************** dfee7fa2ec55ccfb935c28226ca15fe3  gcc/te
*** 68808,68815 ****
  562f1ca03435b8b1feb13adcaaa3be2c  gcc/testsuite/gcc.target/s390/nodatarel-1.c
  7ea6fcf7afbdc4bcd57407e5299e712a  gcc/testsuite/gcc.target/s390/nolrl-1.c
  d5b2bba665576dc0538f9d0bd2142e62  gcc/testsuite/gcc.target/s390/nomemloopunroll-1.c
! eb96a92710915622b3f65dba4a30955d  gcc/testsuite/gcc.target/s390/oscbreak-1.c
  25c3bd00fd3d097e42ac8cfc215fd0c4  gcc/testsuite/gcc.target/s390/pfpo.c
  bdf3ebe1c6a408e4efe2845222b3d54d  gcc/testsuite/gcc.target/s390/pr102222.c
  182ebf3677a29bf9b1dbb033505f78dd  gcc/testsuite/gcc.target/s390/pr104775.c
  765307a040de72f2f4376b7068d68018  gcc/testsuite/gcc.target/s390/pr20927.c
--- 72669,72677 ----
  562f1ca03435b8b1feb13adcaaa3be2c  gcc/testsuite/gcc.target/s390/nodatarel-1.c
  7ea6fcf7afbdc4bcd57407e5299e712a  gcc/testsuite/gcc.target/s390/nolrl-1.c
  d5b2bba665576dc0538f9d0bd2142e62  gcc/testsuite/gcc.target/s390/nomemloopunroll-1.c
! 40f68b40c79861c5702abc1940423c1b  gcc/testsuite/gcc.target/s390/oscbreak-1.c
  25c3bd00fd3d097e42ac8cfc215fd0c4  gcc/testsuite/gcc.target/s390/pfpo.c
+ bc7456fc6c1a06bf4e0babad37deb6b4  gcc/testsuite/gcc.target/s390/pr101260.c
  bdf3ebe1c6a408e4efe2845222b3d54d  gcc/testsuite/gcc.target/s390/pr102222.c
  182ebf3677a29bf9b1dbb033505f78dd  gcc/testsuite/gcc.target/s390/pr104775.c
  765307a040de72f2f4376b7068d68018  gcc/testsuite/gcc.target/s390/pr20927.c
*************** acda2f0eed359b6c50d33952658d4fad  gcc/te
*** 68836,68842 ****
  d127ee93571cc359b60fa89c63392525  gcc/testsuite/gcc.target/s390/pr79895.c
  344b2b8df65958d56e0bd6673f2e1fb5  gcc/testsuite/gcc.target/s390/pr80080-3.c
  245b633cd4b4c7e1ea3414c0612767e1  gcc/testsuite/gcc.target/s390/pr80080-4.c
! 8b4969fbf314851ec142b17e9a328088  gcc/testsuite/gcc.target/s390/pr80725.c
  735bf8da0d759e7de791e71467439655  gcc/testsuite/gcc.target/s390/pr81534.c
  d8d4be7f8d46a289e2ef8e7db7fd3f21  gcc/testsuite/gcc.target/s390/pr84295.c
  6b6ee9c52243ad20a75e264181126466  gcc/testsuite/gcc.target/s390/pr84332.c
--- 72698,72704 ----
  d127ee93571cc359b60fa89c63392525  gcc/testsuite/gcc.target/s390/pr79895.c
  344b2b8df65958d56e0bd6673f2e1fb5  gcc/testsuite/gcc.target/s390/pr80080-3.c
  245b633cd4b4c7e1ea3414c0612767e1  gcc/testsuite/gcc.target/s390/pr80080-4.c
! cfb3704f261cfcb28439aeb9870231d3  gcc/testsuite/gcc.target/s390/pr80725.c
  735bf8da0d759e7de791e71467439655  gcc/testsuite/gcc.target/s390/pr81534.c
  d8d4be7f8d46a289e2ef8e7db7fd3f21  gcc/testsuite/gcc.target/s390/pr84295.c
  6b6ee9c52243ad20a75e264181126466  gcc/testsuite/gcc.target/s390/pr84332.c
*************** f4792ece0a0aff8add8968cae67374ad  gcc/te
*** 68853,68865 ****
  f1116dd01874e965a113345275e6310a  gcc/testsuite/gcc.target/s390/pr96456.c
  26a9015200103b2f0617d5672b91a902  gcc/testsuite/gcc.target/s390/pr97497.c
  45d0019f5b3d0e18a69edbc1595f0798  gcc/testsuite/gcc.target/s390/pr99663.c
  f9de3c4e9d9e8c3a707e1f51e48901b6  gcc/testsuite/gcc.target/s390/return-addr1.c
  5368e8759352b798ae1db6bc79919aa2  gcc/testsuite/gcc.target/s390/return-addr2.c
  c638a86bd5bf24acab1490492cbfb557  gcc/testsuite/gcc.target/s390/risbg-ll-1.c
  532ff931ad8bf62f60b08b1f9261827a  gcc/testsuite/gcc.target/s390/risbg-ll-2.c
  abd82e72aa14d30ef649fb88b2856d0d  gcc/testsuite/gcc.target/s390/risbg-ll-3.c
  6c330cfc80a0f60d042947448413d011  gcc/testsuite/gcc.target/s390/rotate-truncation-mask.c
! b54de45289464bdfb05ccc24f76d8156  gcc/testsuite/gcc.target/s390/s390.exp
  970ac972bfd816dae5f8b5705abd8ab6  gcc/testsuite/gcc.target/s390/section-anchors.c
  2e57c7c23cac49a65eb61077317a2f1b  gcc/testsuite/gcc.target/s390/section-anchors2.c
  78c4d933475e58d55d22ab5b46b27884  gcc/testsuite/gcc.target/s390/section-anchors3.c
--- 72715,72728 ----
  f1116dd01874e965a113345275e6310a  gcc/testsuite/gcc.target/s390/pr96456.c
  26a9015200103b2f0617d5672b91a902  gcc/testsuite/gcc.target/s390/pr97497.c
  45d0019f5b3d0e18a69edbc1595f0798  gcc/testsuite/gcc.target/s390/pr99663.c
+ 67a78b5542696a9589ecec30f861139d  gcc/testsuite/gcc.target/s390/rawmemchr-1.c
  f9de3c4e9d9e8c3a707e1f51e48901b6  gcc/testsuite/gcc.target/s390/return-addr1.c
  5368e8759352b798ae1db6bc79919aa2  gcc/testsuite/gcc.target/s390/return-addr2.c
  c638a86bd5bf24acab1490492cbfb557  gcc/testsuite/gcc.target/s390/risbg-ll-1.c
  532ff931ad8bf62f60b08b1f9261827a  gcc/testsuite/gcc.target/s390/risbg-ll-2.c
  abd82e72aa14d30ef649fb88b2856d0d  gcc/testsuite/gcc.target/s390/risbg-ll-3.c
  6c330cfc80a0f60d042947448413d011  gcc/testsuite/gcc.target/s390/rotate-truncation-mask.c
! 9c284f058917bc5e1d7e290cc09bf700  gcc/testsuite/gcc.target/s390/s390.exp
  970ac972bfd816dae5f8b5705abd8ab6  gcc/testsuite/gcc.target/s390/section-anchors.c
  2e57c7c23cac49a65eb61077317a2f1b  gcc/testsuite/gcc.target/s390/section-anchors2.c
  78c4d933475e58d55d22ab5b46b27884  gcc/testsuite/gcc.target/s390/section-anchors3.c
*************** ff7d9419a3b2402f3410b0aae024febc  gcc/te
*** 68962,68967 ****
--- 72825,72831 ----
  b5c026b313e7e579c58d749f8ff8ab28  gcc/testsuite/gcc.target/s390/tls-pic.c
  69c2f8e3f1d02b9f005713af50f678a4  gcc/testsuite/gcc.target/s390/tls.c
  d0f7e6beee3ecb181246a2372324af7e  gcc/testsuite/gcc.target/s390/tls.h
+ e018d4fe07e1701b88d0469006781862  gcc/testsuite/gcc.target/s390/umul-wide.c
  daf32d359b4f5080aef58859b29870b9  gcc/testsuite/gcc.target/s390/vector/align-1.c
  6bf626314f1db50adc71184824f22bba  gcc/testsuite/gcc.target/s390/vector/align-2.c
  37d2afe5f257fe6c269b2baa787ffe41  gcc/testsuite/gcc.target/s390/vector/combine-shift-vec.c
*************** cfd1d2dc2bb2e6e67cead63e9e5b6e04  gcc/te
*** 68972,68980 ****
  7b57f62cb279490843705e46351b77dd  gcc/testsuite/gcc.target/s390/vector/long-double-asm-commutative.c
  d9717b93ea1bc6140ba0284c50adb76b  gcc/testsuite/gcc.target/s390/vector/long-double-asm-earlyclobber.c
  e3dbf48af3006ce478179091e800da73  gcc/testsuite/gcc.target/s390/vector/long-double-asm-fprvrmem.c
! ce93124a41cc0c971d9c866726476155  gcc/testsuite/gcc.target/s390/vector/long-double-asm-in-out-hard-fp-reg.c
  5fe6c8414b0d419f8a7429ef081f5595  gcc/testsuite/gcc.target/s390/vector/long-double-asm-in-out.c
! 1d772c9cee5ae8731dc3255ce11e2655  gcc/testsuite/gcc.target/s390/vector/long-double-asm-inout-hard-fp-reg.c
  451e24d186ef7f61a93d4f8e358b11e7  gcc/testsuite/gcc.target/s390/vector/long-double-asm-inout.c
  70548c28559bcf04b665c30fb5c4076a  gcc/testsuite/gcc.target/s390/vector/long-double-asm-matching.c
  6c88eb31cb87ced4d8dd76567e195b37  gcc/testsuite/gcc.target/s390/vector/long-double-asm-regmem.c
--- 72836,72844 ----
  7b57f62cb279490843705e46351b77dd  gcc/testsuite/gcc.target/s390/vector/long-double-asm-commutative.c
  d9717b93ea1bc6140ba0284c50adb76b  gcc/testsuite/gcc.target/s390/vector/long-double-asm-earlyclobber.c
  e3dbf48af3006ce478179091e800da73  gcc/testsuite/gcc.target/s390/vector/long-double-asm-fprvrmem.c
! d0d95078d3b832f6d257c69367d3ce97  gcc/testsuite/gcc.target/s390/vector/long-double-asm-in-out-hard-fp-reg.c
  5fe6c8414b0d419f8a7429ef081f5595  gcc/testsuite/gcc.target/s390/vector/long-double-asm-in-out.c
! 42ee36d44b3c317b8a31cdfbcc282cf8  gcc/testsuite/gcc.target/s390/vector/long-double-asm-inout-hard-fp-reg.c
  451e24d186ef7f61a93d4f8e358b11e7  gcc/testsuite/gcc.target/s390/vector/long-double-asm-inout.c
  70548c28559bcf04b665c30fb5c4076a  gcc/testsuite/gcc.target/s390/vector/long-double-asm-matching.c
  6c88eb31cb87ced4d8dd76567e195b37  gcc/testsuite/gcc.target/s390/vector/long-double-asm-regmem.c
*************** c2be2c1316a4a96cdd7687813bff0db1  gcc/te
*** 69011,69018 ****
  80f66a1b67c5efefaf91eef9e4cbbb0c  gcc/testsuite/gcc.target/s390/vector/long-double-to-u8.c
  dfd72cc556aed036482efce1a2810dd1  gcc/testsuite/gcc.target/s390/vector/long-double-vec-duplicate.c
  4299fe2584cb6341af1aaed87017028f  gcc/testsuite/gcc.target/s390/vector/long-double-volatile-from-i64.c
! 76a8aef08aec1f7ccbaed24acdf801e6  gcc/testsuite/gcc.target/s390/vector/long-double-vx-macro-off-on.c
! 5e80286b464eabff0ae18a94cff23014  gcc/testsuite/gcc.target/s390/vector/long-double-vx-macro-on-off.c
  1994fe4f2db11646ac083da1f43f3408  gcc/testsuite/gcc.target/s390/vector/long-double-wf.h
  968f375a214ad65978920aed4fa79ef0  gcc/testsuite/gcc.target/s390/vector/long-double-wfaxb.c
  0d5d550de520df91685b6f37ad8335a7  gcc/testsuite/gcc.target/s390/vector/long-double-wfcxb-0001.c
--- 72875,72882 ----
  80f66a1b67c5efefaf91eef9e4cbbb0c  gcc/testsuite/gcc.target/s390/vector/long-double-to-u8.c
  dfd72cc556aed036482efce1a2810dd1  gcc/testsuite/gcc.target/s390/vector/long-double-vec-duplicate.c
  4299fe2584cb6341af1aaed87017028f  gcc/testsuite/gcc.target/s390/vector/long-double-volatile-from-i64.c
! 596967e66f2df6ac430aee7c03a958a8  gcc/testsuite/gcc.target/s390/vector/long-double-vx-macro-off-on.c
! 0973c627c1bc68e19a5bb3b7b5d9a18f  gcc/testsuite/gcc.target/s390/vector/long-double-vx-macro-on-off.c
  1994fe4f2db11646ac083da1f43f3408  gcc/testsuite/gcc.target/s390/vector/long-double-wf.h
  968f375a214ad65978920aed4fa79ef0  gcc/testsuite/gcc.target/s390/vector/long-double-wfaxb.c
  0d5d550de520df91685b6f37ad8335a7  gcc/testsuite/gcc.target/s390/vector/long-double-wfcxb-0001.c
*************** d2fd14017e00d1f811d5387a32f38a98  gcc/te
*** 69042,69050 ****
--- 72906,72918 ----
  4d61dcf9d7172719d7f77c7dc59e50ce  gcc/testsuite/gcc.target/s390/vector/long-double-wfsxb.c
  3ccf7ba1964b2bb29e8b687b6b638ceb  gcc/testsuite/gcc.target/s390/vector/long-double-wftcixb-1.c
  87e5127945063988138f68369e07418f  gcc/testsuite/gcc.target/s390/vector/long-double-wftcixb.c
+ 4e3622409ea1c0cfdb63f541b7d010ff  gcc/testsuite/gcc.target/s390/vector/perm-merge.c
+ e75326d3bdf5a961413690c8fac7722a  gcc/testsuite/gcc.target/s390/vector/perm-vpdi.c
  c9919c66d15a72dcfc7be8b1d30e4de1  gcc/testsuite/gcc.target/s390/vector/pr92950.c
  f37bb3697d3b5ebfcad463b8e97a87bb  gcc/testsuite/gcc.target/s390/vector/pr96128.c
  f8ddf98d23fed8fdb81fc0b6b8a34fa4  gcc/testsuite/gcc.target/s390/vector/stpcpy-1.c
+ 79d159920f787c25a63fedb37633653d  gcc/testsuite/gcc.target/s390/vector/vcond-mixed-double.c
+ b2c713823b2df17078c09edbeb492644  gcc/testsuite/gcc.target/s390/vector/vcond-mixed-float.c
  c6799efe253acc955e2b9dcf44075d99  gcc/testsuite/gcc.target/s390/vector/vcond-shift.c
  8fa9b68cf0196b4198ce00a304191744  gcc/testsuite/gcc.target/s390/vector/vec-abi-1.c
  3a8a70f0c80bb59f0c702d13290890cd  gcc/testsuite/gcc.target/s390/vector/vec-abi-2.c
*************** f6942a3fba9c800bffade3bb79196479  gcc/te
*** 69081,69086 ****
--- 72949,72955 ----
  8de36944e18edbbcc735c9baad533f52  gcc/testsuite/gcc.target/s390/vector/vec-shift-1.c
  0f81f716920700cba16fc05e47df6d56  gcc/testsuite/gcc.target/s390/vector/vec-shift-2.c
  cea49877a5895e80cb13491b6cdfa2a2  gcc/testsuite/gcc.target/s390/vector/vec-sub-1.c
+ 09fe971e1ee2ac0d9627fec05f679430  gcc/testsuite/gcc.target/s390/vector/vec-types.h
  db4e2b1f6b0441e2f2f64b6e141245cd  gcc/testsuite/gcc.target/s390/vector/vec-vcond-1.c
  3820ec0689c3262f947212e6f357e08c  gcc/testsuite/gcc.target/s390/vector/vec-vrepi-1.c
  9fc90b732df663117f1ed481b91525c3  gcc/testsuite/gcc.target/s390/vxe/bitops-1.c
*************** c388e8e709c00e2cb14b83a7bcb1db96  gcc/te
*** 69144,69150 ****
  9dbb4e07981789355739a715866136b9  gcc/testsuite/gcc.target/s390/zvector/get-element-bswap-2.c
  35e87e60957f9b00691107426abfa992  gcc/testsuite/gcc.target/s390/zvector/get-element-bswap-3.c
  4abdf0afcb959d37baa8b81d5308c265  gcc/testsuite/gcc.target/s390/zvector/get-element-bswap-4.c
! ec409da5dcc07f680e8916e118e2a327  gcc/testsuite/gcc.target/s390/zvector/imm-range-error-1.c
  7d0eb00954092ab19d710323c872dd2a  gcc/testsuite/gcc.target/s390/zvector/pr79893.c
  8bc7e55288af53eddbd5437d08f5f9a1  gcc/testsuite/gcc.target/s390/zvector/pr82317.c
  c5f2f4df3f7c11977663ad182d69c2a7  gcc/testsuite/gcc.target/s390/zvector/pr82322.c
--- 73013,73019 ----
  9dbb4e07981789355739a715866136b9  gcc/testsuite/gcc.target/s390/zvector/get-element-bswap-2.c
  35e87e60957f9b00691107426abfa992  gcc/testsuite/gcc.target/s390/zvector/get-element-bswap-3.c
  4abdf0afcb959d37baa8b81d5308c265  gcc/testsuite/gcc.target/s390/zvector/get-element-bswap-4.c
! 13199189797f1cfdb8952aba604e6159  gcc/testsuite/gcc.target/s390/zvector/imm-range-error-1.c
  7d0eb00954092ab19d710323c872dd2a  gcc/testsuite/gcc.target/s390/zvector/pr79893.c
  8bc7e55288af53eddbd5437d08f5f9a1  gcc/testsuite/gcc.target/s390/zvector/pr82317.c
  c5f2f4df3f7c11977663ad182d69c2a7  gcc/testsuite/gcc.target/s390/zvector/pr82322.c
*************** c421014e2cc4b73264d790284ab5572b  gcc/te
*** 69156,69171 ****
  3eb9c4b49ad25478f71795710ba588fc  gcc/testsuite/gcc.target/s390/zvector/set-element-bswap-1.c
  c510e08487f29d55308ff7e6e92099e1  gcc/testsuite/gcc.target/s390/zvector/set-element-bswap-2.c
  039076901eabcee22c3632af316fd5d8  gcc/testsuite/gcc.target/s390/zvector/set-element-bswap-3.c
  52639af19eb9820f01b9c5381a9fc995  gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c
  8ff1ed12c88c0f19d703adc7a5a4a566  gcc/testsuite/gcc.target/s390/zvector/vec-cmp-1.c
  efc5b917bbc1187b0d840255aad6cb6f  gcc/testsuite/gcc.target/s390/zvector/vec-cmp-2.c
  ccdf3c2d3031ce42906139030ba856e1  gcc/testsuite/gcc.target/s390/zvector/vec-dbl-math-compile-1.c
  99a4d9d376b39be880dd323c2ff0e424  gcc/testsuite/gcc.target/s390/zvector/vec-double-1.c
  49a1b950a9fdcff9d3d01ebb3d53e342  gcc/testsuite/gcc.target/s390/zvector/vec-double-2.c
! 8ec8fee8f79464117da52611914dbb61  gcc/testsuite/gcc.target/s390/zvector/vec-double-compile.c
  fbc381e8ed86d4db157db42d38646150  gcc/testsuite/gcc.target/s390/zvector/vec-doublee.c
  f42e228f92a8dfb9e1ded9cb20bc6622  gcc/testsuite/gcc.target/s390/zvector/vec-elem-1.c
! c43850d3a0789cb2354617bb02d1ad00  gcc/testsuite/gcc.target/s390/zvector/vec-float-compile.c
  a7c50aed157254144c641530b0c9fb79  gcc/testsuite/gcc.target/s390/zvector/vec-floate.c
  a7f2bd9fee8c03add8265ce21e47cb8f  gcc/testsuite/gcc.target/s390/zvector/vec-genbytemask-1.c
  f0adb63cec7e7cc8928e697e9eb9fc6c  gcc/testsuite/gcc.target/s390/zvector/vec-genmask-1.c
--- 73025,73041 ----
  3eb9c4b49ad25478f71795710ba588fc  gcc/testsuite/gcc.target/s390/zvector/set-element-bswap-1.c
  c510e08487f29d55308ff7e6e92099e1  gcc/testsuite/gcc.target/s390/zvector/set-element-bswap-2.c
  039076901eabcee22c3632af316fd5d8  gcc/testsuite/gcc.target/s390/zvector/set-element-bswap-3.c
+ 37bcaad0074056fd492f7d54c312c3a0  gcc/testsuite/gcc.target/s390/zvector/vec-_Bool.c
  52639af19eb9820f01b9c5381a9fc995  gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c
  8ff1ed12c88c0f19d703adc7a5a4a566  gcc/testsuite/gcc.target/s390/zvector/vec-cmp-1.c
  efc5b917bbc1187b0d840255aad6cb6f  gcc/testsuite/gcc.target/s390/zvector/vec-cmp-2.c
  ccdf3c2d3031ce42906139030ba856e1  gcc/testsuite/gcc.target/s390/zvector/vec-dbl-math-compile-1.c
  99a4d9d376b39be880dd323c2ff0e424  gcc/testsuite/gcc.target/s390/zvector/vec-double-1.c
  49a1b950a9fdcff9d3d01ebb3d53e342  gcc/testsuite/gcc.target/s390/zvector/vec-double-2.c
! e347e307dd89914f71d6a9b99f4d778e  gcc/testsuite/gcc.target/s390/zvector/vec-double-compile.c
  fbc381e8ed86d4db157db42d38646150  gcc/testsuite/gcc.target/s390/zvector/vec-doublee.c
  f42e228f92a8dfb9e1ded9cb20bc6622  gcc/testsuite/gcc.target/s390/zvector/vec-elem-1.c
! 10f7d5a3497b5a370733e6befba37671  gcc/testsuite/gcc.target/s390/zvector/vec-float-compile.c
  a7c50aed157254144c641530b0c9fb79  gcc/testsuite/gcc.target/s390/zvector/vec-floate.c
  a7f2bd9fee8c03add8265ce21e47cb8f  gcc/testsuite/gcc.target/s390/zvector/vec-genbytemask-1.c
  f0adb63cec7e7cc8928e697e9eb9fc6c  gcc/testsuite/gcc.target/s390/zvector/vec-genmask-1.c
*************** e2f2ea830e74b4c8c94ca5bab8f72248  gcc/te
*** 69177,69183 ****
  cf17f23d62e2e5c79ef622e98e08a8f2  gcc/testsuite/gcc.target/s390/zvector/vec-overloading-2.c
  3301b86cb9834aa02c533b9ea8925330  gcc/testsuite/gcc.target/s390/zvector/vec-overloading-3.c
  bb6fff430ecdcaea1d62ba4c832fde59  gcc/testsuite/gcc.target/s390/zvector/vec-overloading-4.c
- 3078c73be1f543ecdbfb0b3d225c8a53  gcc/testsuite/gcc.target/s390/zvector/vec-permi.c
  6f443897f1e03e0d8c2ba4ccc7900c69  gcc/testsuite/gcc.target/s390/zvector/vec-revb-load-double-z14.c
  e5b6f6b47da7c1724c74cbc511588e69  gcc/testsuite/gcc.target/s390/zvector/vec-revb-load-double.c
  354011cd201e9e82b04ea14fcfcbe975  gcc/testsuite/gcc.target/s390/zvector/vec-revb-store-double-z14.c
--- 73047,73052 ----
*************** ca3a119c232d2f9c4175fb19938beae4  gcc/te
*** 69194,69211 ****
  81ceae6a6ede4e4a4eab88c199e75f8a  gcc/testsuite/gcc.target/s390/zvector/vec-search-string-until-zero-cc-compile.c
  142969c90f1b96c1116a383764b289ac  gcc/testsuite/gcc.target/s390/zvector/vec-shift-left-double-by-bit-1.c
  7bd67a1b15dd481819c32248a1c58eb4  gcc/testsuite/gcc.target/s390/zvector/vec-shift-right-double-by-bit-1.c
! 7c93c8bd45bd64c269407d1f2b4bdb96  gcc/testsuite/gcc.target/s390/zvector/vec-signed-compile.c
  47ea13b4c871af94c48987fd51cab748  gcc/testsuite/gcc.target/s390/zvector/vec-sldw.c
  bf9a16bf1a11dc3b1eaf16828c088c55  gcc/testsuite/gcc.target/s390/zvector/vec-splat-1.c
  fca18383b3db4c77fba6885b30964e40  gcc/testsuite/gcc.target/s390/zvector/vec-splat-2.c
  f9fc274321010fadf7fa7d7821f483f8  gcc/testsuite/gcc.target/s390/zvector/vec-test-mask-1.c
! 25a6c634a4630ac00c6db571f0175483  gcc/testsuite/gcc.target/s390/zvector/vec-unsigned-compile.c
  b9c6bcee82fb4ed0a2118354fedcd0c6  gcc/testsuite/gcc.target/s390/zvector/vec_convert_from_fp16.c
  ebd35d756a4e23707b277693c56c4a19  gcc/testsuite/gcc.target/s390/zvector/vec_convert_to_fp16.c
  2d31aa34eca68bbda85823c8736053af  gcc/testsuite/gcc.target/s390/zvector/vec_extend_to_fp32_hi.c
  f1c2e8dded3f10ca36b5f0c5430e9653  gcc/testsuite/gcc.target/s390/zvector/vec_extend_to_fp32_lo.c
  2d9e9f903e81aed0180760d894c8745d  gcc/testsuite/gcc.target/s390/zvector/vec_load_len_r.c
  69eb84e54221a1d1fc9845617f6a3dec  gcc/testsuite/gcc.target/s390/zvector/vec_msum_u128-1.c
  389b010c6f698ce8502e96a6651816cd  gcc/testsuite/gcc.target/s390/zvector/vec_round_from_fp32.c
  102cee60e67c5b5fab8868fd4d4ac10e  gcc/testsuite/gcc.target/s390/zvector/vec_sel-1.c
  01f95199a25e26b73f9c541731732079  gcc/testsuite/gcc.target/s390/zvector/vec_store_len_r.c
--- 73063,73083 ----
  81ceae6a6ede4e4a4eab88c199e75f8a  gcc/testsuite/gcc.target/s390/zvector/vec-search-string-until-zero-cc-compile.c
  142969c90f1b96c1116a383764b289ac  gcc/testsuite/gcc.target/s390/zvector/vec-shift-left-double-by-bit-1.c
  7bd67a1b15dd481819c32248a1c58eb4  gcc/testsuite/gcc.target/s390/zvector/vec-shift-right-double-by-bit-1.c
! 19d7537a44d0e7780a283ce6c06de160  gcc/testsuite/gcc.target/s390/zvector/vec-signed-compile.c
  47ea13b4c871af94c48987fd51cab748  gcc/testsuite/gcc.target/s390/zvector/vec-sldw.c
  bf9a16bf1a11dc3b1eaf16828c088c55  gcc/testsuite/gcc.target/s390/zvector/vec-splat-1.c
  fca18383b3db4c77fba6885b30964e40  gcc/testsuite/gcc.target/s390/zvector/vec-splat-2.c
  f9fc274321010fadf7fa7d7821f483f8  gcc/testsuite/gcc.target/s390/zvector/vec-test-mask-1.c
! e0da366fde5ff03e522992859eec8edf  gcc/testsuite/gcc.target/s390/zvector/vec-types.h
! e06b075af962a2fe7d1a02398d455fc2  gcc/testsuite/gcc.target/s390/zvector/vec-unsigned-compile.c
  b9c6bcee82fb4ed0a2118354fedcd0c6  gcc/testsuite/gcc.target/s390/zvector/vec_convert_from_fp16.c
  ebd35d756a4e23707b277693c56c4a19  gcc/testsuite/gcc.target/s390/zvector/vec_convert_to_fp16.c
  2d31aa34eca68bbda85823c8736053af  gcc/testsuite/gcc.target/s390/zvector/vec_extend_to_fp32_hi.c
  f1c2e8dded3f10ca36b5f0c5430e9653  gcc/testsuite/gcc.target/s390/zvector/vec_extend_to_fp32_lo.c
  2d9e9f903e81aed0180760d894c8745d  gcc/testsuite/gcc.target/s390/zvector/vec_load_len_r.c
+ 74fb02612e4d4afb1f16866f9eb48296  gcc/testsuite/gcc.target/s390/zvector/vec_merge.c
  69eb84e54221a1d1fc9845617f6a3dec  gcc/testsuite/gcc.target/s390/zvector/vec_msum_u128-1.c
+ 2dfb832caec16354a7b46808b92c4ea4  gcc/testsuite/gcc.target/s390/zvector/vec_permi.c
  389b010c6f698ce8502e96a6651816cd  gcc/testsuite/gcc.target/s390/zvector/vec_round_from_fp32.c
  102cee60e67c5b5fab8868fd4d4ac10e  gcc/testsuite/gcc.target/s390/zvector/vec_sel-1.c
  01f95199a25e26b73f9c541731732079  gcc/testsuite/gcc.target/s390/zvector/vec_store_len_r.c
*************** db7a02bef0ea1d74a99297c9ee53c525  gcc/te
*** 69387,69393 ****
  b5f624677b85b090003118209ef93244  gcc/testsuite/gcc.target/sh/rte-delay-slot.c
  dadf2783f39a6e7573222cafcc2dee03  gcc/testsuite/gcc.target/sh/sh-relax-vxworks.c
  e21f6ad0f71c5acbd58d0b5dc9016512  gcc/testsuite/gcc.target/sh/sh-relax.c
! b68f12f4853f779174ee478411742aea  gcc/testsuite/gcc.target/sh/sh.exp
  76c4b37de6ed467c955dc2c4e605bd74  gcc/testsuite/gcc.target/sh/sh2a-band.c
  6ca867fd045b678140e16f1d2034e672  gcc/testsuite/gcc.target/sh/sh2a-bclr.c
  65b6c86dd5734b5e9047d04326b96065  gcc/testsuite/gcc.target/sh/sh2a-bclrmem.c
--- 73259,73265 ----
  b5f624677b85b090003118209ef93244  gcc/testsuite/gcc.target/sh/rte-delay-slot.c
  dadf2783f39a6e7573222cafcc2dee03  gcc/testsuite/gcc.target/sh/sh-relax-vxworks.c
  e21f6ad0f71c5acbd58d0b5dc9016512  gcc/testsuite/gcc.target/sh/sh-relax.c
! c9234a6d84bb35e845485df6a887f83f  gcc/testsuite/gcc.target/sh/sh.exp
  76c4b37de6ed467c955dc2c4e605bd74  gcc/testsuite/gcc.target/sh/sh2a-band.c
  6ca867fd045b678140e16f1d2034e672  gcc/testsuite/gcc.target/sh/sh2a-bclr.c
  65b6c86dd5734b5e9047d04326b96065  gcc/testsuite/gcc.target/sh/sh2a-bclrmem.c
*************** a2644837d5da1aa36c1bcfeab14bd34b  gcc/te
*** 69426,69432 ****
  b238f0c893c816effc7e00714687e793  gcc/testsuite/gcc.target/sh/torture/pr70416.c
  f2da248599c9251df57c4afab66c5b3d  gcc/testsuite/gcc.target/sh/torture/pragma-isr.c
  e59de62c79e4620b848baee27d159b9c  gcc/testsuite/gcc.target/sh/torture/pragma-isr2.c
! 7f4f72db21b5ea151133ea8a0f0dde8c  gcc/testsuite/gcc.target/sh/torture/sh-torture.exp
  7fafc38036a01faa4f72f34d7eaaad89  gcc/testsuite/gcc.target/sh/torture/strncmp.c
  d8726234ff72b0fa25ab40cc3fe6d24b  gcc/testsuite/gcc.target/sparc/20001013-1.c
  d0d646cfe216eb6e3c43fb56cb548ea0  gcc/testsuite/gcc.target/sparc/20001101-1.c
--- 73298,73304 ----
  b238f0c893c816effc7e00714687e793  gcc/testsuite/gcc.target/sh/torture/pr70416.c
  f2da248599c9251df57c4afab66c5b3d  gcc/testsuite/gcc.target/sh/torture/pragma-isr.c
  e59de62c79e4620b848baee27d159b9c  gcc/testsuite/gcc.target/sh/torture/pragma-isr2.c
! df433dfeeca8de2667ab5cbfd08da297  gcc/testsuite/gcc.target/sh/torture/sh-torture.exp
  7fafc38036a01faa4f72f34d7eaaad89  gcc/testsuite/gcc.target/sh/torture/strncmp.c
  d8726234ff72b0fa25ab40cc3fe6d24b  gcc/testsuite/gcc.target/sparc/20001013-1.c
  d0d646cfe216eb6e3c43fb56cb548ea0  gcc/testsuite/gcc.target/sparc/20001101-1.c
*************** eb9fea9eb3ccdd5fb4d85ac011c10dc5  gcc/te
*** 69549,69555 ****
  111c6ff31ffc23f4b402354941b88338  gcc/testsuite/gcc.target/sparc/sparc-ret-2.c
  eab3dd9c7afd97e9615ef7573877aeeb  gcc/testsuite/gcc.target/sparc/sparc-ret-3.c
  1943f3e1f1253e644f6fe445637c2dec  gcc/testsuite/gcc.target/sparc/sparc-trap-1.c
! f2785a361dfbcef8987753e934c998fa  gcc/testsuite/gcc.target/sparc/sparc.exp
  36ce6bf50327f9b2f6c9980aea9830d2  gcc/testsuite/gcc.target/sparc/struct-ret-check-1.c
  8e13d07524eb18b1e933aa690c21a993  gcc/testsuite/gcc.target/sparc/struct-ret-check-2.c
  29c9104d23f7983b691da600e79c9cf0  gcc/testsuite/gcc.target/sparc/tls-ld-int16.c
--- 73421,73427 ----
  111c6ff31ffc23f4b402354941b88338  gcc/testsuite/gcc.target/sparc/sparc-ret-2.c
  eab3dd9c7afd97e9615ef7573877aeeb  gcc/testsuite/gcc.target/sparc/sparc-ret-3.c
  1943f3e1f1253e644f6fe445637c2dec  gcc/testsuite/gcc.target/sparc/sparc-trap-1.c
! 9ee26ffc003d96571e5cb6fa3f88c1b5  gcc/testsuite/gcc.target/sparc/sparc.exp
  36ce6bf50327f9b2f6c9980aea9830d2  gcc/testsuite/gcc.target/sparc/struct-ret-check-1.c
  8e13d07524eb18b1e933aa690c21a993  gcc/testsuite/gcc.target/sparc/struct-ret-check-2.c
  29c9104d23f7983b691da600e79c9cf0  gcc/testsuite/gcc.target/sparc/tls-ld-int16.c
*************** c6e8cea536062af6f23168b438e096e3  gcc/te
*** 69595,69601 ****
  cb59fa93f6ec7ffdc7c45b9ffe016270  gcc/testsuite/gcc.target/tic6x/bswapl.c
  880ba4c7bbafa50a3cc6634a50dc02b5  gcc/testsuite/gcc.target/tic6x/builtin-math-7.c
  6189f555f502d05c8cf8f4c22546bdee  gcc/testsuite/gcc.target/tic6x/builtins/arith24.c
! f913d948c44f678774ad2200763b3e4e  gcc/testsuite/gcc.target/tic6x/builtins/c6x-builtins.exp
  d44d40be94d3b2c409ccde008c52fd47  gcc/testsuite/gcc.target/tic6x/builtins/extclr.c
  199fddda4489c9408a194900b3af00cc  gcc/testsuite/gcc.target/tic6x/builtins/sarith1.c
  2a93c542861f1f7e0f2350f76094d837  gcc/testsuite/gcc.target/tic6x/builtins/smpy.c
--- 73467,73473 ----
  cb59fa93f6ec7ffdc7c45b9ffe016270  gcc/testsuite/gcc.target/tic6x/bswapl.c
  880ba4c7bbafa50a3cc6634a50dc02b5  gcc/testsuite/gcc.target/tic6x/builtin-math-7.c
  6189f555f502d05c8cf8f4c22546bdee  gcc/testsuite/gcc.target/tic6x/builtins/arith24.c
! a43ba2540af9cbc052866a4d13668f62  gcc/testsuite/gcc.target/tic6x/builtins/c6x-builtins.exp
  d44d40be94d3b2c409ccde008c52fd47  gcc/testsuite/gcc.target/tic6x/builtins/extclr.c
  199fddda4489c9408a194900b3af00cc  gcc/testsuite/gcc.target/tic6x/builtins/sarith1.c
  2a93c542861f1f7e0f2350f76094d837  gcc/testsuite/gcc.target/tic6x/builtins/smpy.c
*************** f914e8e604fad0a96e99fb396ea883ad  gcc/te
*** 69609,69618 ****
  998ea1750e22744fc87c0b4f56b50eaa  gcc/testsuite/gcc.target/tic6x/fpdiv-lib.c
  6bf83ac412de874a69fb5622552989c5  gcc/testsuite/gcc.target/tic6x/fpdiv.c
  baa04394e3ff6b7cba6819b89fb4e822  gcc/testsuite/gcc.target/tic6x/longcalls.c
! f84309613c0a7282e626909d82e4ad41  gcc/testsuite/gcc.target/tic6x/rotdi16-scan.c
  9373dfa296a424e3396f81925fbd59bc  gcc/testsuite/gcc.target/tic6x/rotdi16.c
! 375e9872a8a2035f5e20af30fae29e51  gcc/testsuite/gcc.target/tic6x/tic6x.exp
  670857f86bef69c76dcf7d725b01b954  gcc/testsuite/gcc.target/tic6x/weak-call.c
  f266f148c43d4b9593895e66efc3fa97  gcc/testsuite/gcc.target/vax/bbcci.c
  c64b50c02089a9c71ddbf71d118c42b8  gcc/testsuite/gcc.target/vax/bbssi.c
  44ba73b98dea9a0454806dbe98941328  gcc/testsuite/gcc.target/vax/bswapdi-1.c
--- 73481,73492 ----
  998ea1750e22744fc87c0b4f56b50eaa  gcc/testsuite/gcc.target/tic6x/fpdiv-lib.c
  6bf83ac412de874a69fb5622552989c5  gcc/testsuite/gcc.target/tic6x/fpdiv.c
  baa04394e3ff6b7cba6819b89fb4e822  gcc/testsuite/gcc.target/tic6x/longcalls.c
! a25cc2d7288ac685c9d35e9c43f1cf21  gcc/testsuite/gcc.target/tic6x/rotdi16-scan.c
  9373dfa296a424e3396f81925fbd59bc  gcc/testsuite/gcc.target/tic6x/rotdi16.c
! 707dd8707c4a467e6b1e3fec0cf715cc  gcc/testsuite/gcc.target/tic6x/tic6x.exp
  670857f86bef69c76dcf7d725b01b954  gcc/testsuite/gcc.target/tic6x/weak-call.c
+ 1842497af5066e493839b7a75e67e2a7  gcc/testsuite/gcc.target/v850/pr104400.c
+ 70227343e866ab46a280480f61da28d1  gcc/testsuite/gcc.target/v850/v850.exp
  f266f148c43d4b9593895e66efc3fa97  gcc/testsuite/gcc.target/vax/bbcci.c
  c64b50c02089a9c71ddbf71d118c42b8  gcc/testsuite/gcc.target/vax/bbssi.c
  44ba73b98dea9a0454806dbe98941328  gcc/testsuite/gcc.target/vax/bswapdi-1.c
*************** a692e2ee084a1b277a3cbee75d9940fd  gcc/te
*** 69831,69837 ****
  ce472e70039700885bcf173911ef24dc  gcc/testsuite/gcc.target/vax/peephole2-ltu-cmpzvsi.c
  86b2c92ff217edc7b11b2d6f5cba77c6  gcc/testsuite/gcc.target/vax/pr56875.c
  22629a1b386f420f06d6c23ff8e35b7f  gcc/testsuite/gcc.target/vax/push.c
! b0741fd1ebd58e68761c8a17540531d6  gcc/testsuite/gcc.target/vax/vax.exp
  80427f37ed9a9b5949e9525f9049ac5d  gcc/testsuite/gcc.target/visium/bit_shift.c
  8b6e9241f591f13a4ae6f06419b206b4  gcc/testsuite/gcc.target/visium/bit_test.c
  38dfc40b21838f07e0e01202beadfa5c  gcc/testsuite/gcc.target/visium/block_move.c
--- 73705,73712 ----
  ce472e70039700885bcf173911ef24dc  gcc/testsuite/gcc.target/vax/peephole2-ltu-cmpzvsi.c
  86b2c92ff217edc7b11b2d6f5cba77c6  gcc/testsuite/gcc.target/vax/pr56875.c
  22629a1b386f420f06d6c23ff8e35b7f  gcc/testsuite/gcc.target/vax/push.c
! aa49cef95004b6430e3fd36b1edc76bc  gcc/testsuite/gcc.target/vax/setmem.c
! ab426c6a53d49be4e9da4814b2fb704a  gcc/testsuite/gcc.target/vax/vax.exp
  80427f37ed9a9b5949e9525f9049ac5d  gcc/testsuite/gcc.target/visium/bit_shift.c
  8b6e9241f591f13a4ae6f06419b206b4  gcc/testsuite/gcc.target/visium/bit_test.c
  38dfc40b21838f07e0e01202beadfa5c  gcc/testsuite/gcc.target/visium/block_move.c
*************** da335bd5b7d24260be92152ec43c9c69  gcc/te
*** 69843,69855 ****
  22e4f821af1c93516061d0c9e939e1d1  gcc/testsuite/gcc.target/visium/overflow16.c
  ed48eae7631e0c3fec552abc3abf6370  gcc/testsuite/gcc.target/visium/overflow32.c
  9038dededd39b0c0f41798e290669394  gcc/testsuite/gcc.target/visium/overflow8.c
! d5b39965a2815d8cdcaf9e4867510a0c  gcc/testsuite/gcc.target/visium/visium.exp
! 01bb48a85849d2cb0f0e2170f3bb7220  gcc/testsuite/gcc.target/x86_64/abi/README.gcc
! 6f2569a915010fe1765ab3c82b2d6910  gcc/testsuite/gcc.target/x86_64/abi/abi-x86_64.exp
  4599244d74ba4aabbd69240d86d2fe79  gcc/testsuite/gcc.target/x86_64/abi/args.h
  2a169afd0fa371ba877780d1e8074c08  gcc/testsuite/gcc.target/x86_64/abi/asm-support-darwin.s
  892eb2ee284fd96557fd507fa0642156  gcc/testsuite/gcc.target/x86_64/abi/asm-support.S
! d9a3cf5cce632b5561f35999a595447f  gcc/testsuite/gcc.target/x86_64/abi/avx/abi-avx.exp
  f559d61e72669fec3c7c3bb1345a001f  gcc/testsuite/gcc.target/x86_64/abi/avx/args.h
  6e43bc6b3d6feb70612d399a677d1c7d  gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support-darwin.s
  0df09e54902b0a238caad6de9dc92c5d  gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support.S
--- 73718,73730 ----
  22e4f821af1c93516061d0c9e939e1d1  gcc/testsuite/gcc.target/visium/overflow16.c
  ed48eae7631e0c3fec552abc3abf6370  gcc/testsuite/gcc.target/visium/overflow32.c
  9038dededd39b0c0f41798e290669394  gcc/testsuite/gcc.target/visium/overflow8.c
! 089c0c17caf17b9718465fb1b521c150  gcc/testsuite/gcc.target/visium/visium.exp
! d2419633bd63c2960fcebad0d4ff0f61  gcc/testsuite/gcc.target/x86_64/abi/README.gcc
! e47192199afb2bcde51a4fd6274d8faa  gcc/testsuite/gcc.target/x86_64/abi/abi-x86_64.exp
  4599244d74ba4aabbd69240d86d2fe79  gcc/testsuite/gcc.target/x86_64/abi/args.h
  2a169afd0fa371ba877780d1e8074c08  gcc/testsuite/gcc.target/x86_64/abi/asm-support-darwin.s
  892eb2ee284fd96557fd507fa0642156  gcc/testsuite/gcc.target/x86_64/abi/asm-support.S
! 7e1742da7c080d7b998e2f85437139ba  gcc/testsuite/gcc.target/x86_64/abi/avx/abi-avx.exp
  f559d61e72669fec3c7c3bb1345a001f  gcc/testsuite/gcc.target/x86_64/abi/avx/args.h
  6e43bc6b3d6feb70612d399a677d1c7d  gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support-darwin.s
  0df09e54902b0a238caad6de9dc92c5d  gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support.S
*************** b43e5e8d171dcdbec5cac42b0b9a298c  gcc/te
*** 69859,69865 ****
  ff732b27c9bb0c5b99ccccb31d12d3ea  gcc/testsuite/gcc.target/x86_64/abi/avx/test_passing_structs.c
  d02989c16f0d1cd0951fe435483c550e  gcc/testsuite/gcc.target/x86_64/abi/avx/test_passing_unions.c
  2712f2843274c5262e020aca5e18fc41  gcc/testsuite/gcc.target/x86_64/abi/avx/test_varargs-m256.c
! 9e27e7507adfbc177435248fa82da5ef  gcc/testsuite/gcc.target/x86_64/abi/avx512f/abi-avx512f.exp
  2cf03d73572ce81dab43dcceeeacf5c4  gcc/testsuite/gcc.target/x86_64/abi/avx512f/args.h
  c79ac297933c3dae25e3f797420d1814  gcc/testsuite/gcc.target/x86_64/abi/avx512f/asm-support-darwin.s
  018d5507f0c4c2e50d7895e924a53c1b  gcc/testsuite/gcc.target/x86_64/abi/avx512f/asm-support.S
--- 73734,73740 ----
  ff732b27c9bb0c5b99ccccb31d12d3ea  gcc/testsuite/gcc.target/x86_64/abi/avx/test_passing_structs.c
  d02989c16f0d1cd0951fe435483c550e  gcc/testsuite/gcc.target/x86_64/abi/avx/test_passing_unions.c
  2712f2843274c5262e020aca5e18fc41  gcc/testsuite/gcc.target/x86_64/abi/avx/test_varargs-m256.c
! c728eafc2b1946c08997f778d64f2c99  gcc/testsuite/gcc.target/x86_64/abi/avx512f/abi-avx512f.exp
  2cf03d73572ce81dab43dcceeeacf5c4  gcc/testsuite/gcc.target/x86_64/abi/avx512f/args.h
  c79ac297933c3dae25e3f797420d1814  gcc/testsuite/gcc.target/x86_64/abi/avx512f/asm-support-darwin.s
  018d5507f0c4c2e50d7895e924a53c1b  gcc/testsuite/gcc.target/x86_64/abi/avx512f/asm-support.S
*************** c79ac297933c3dae25e3f797420d1814  gcc/te
*** 69869,69875 ****
  24464384d6d7542bbd2ae638f390e7a6  gcc/testsuite/gcc.target/x86_64/abi/avx512f/test_passing_structs.c
  fe0e9b140dbc68ca140fc7100c1ade24  gcc/testsuite/gcc.target/x86_64/abi/avx512f/test_passing_unions.c
  ea57c03627834ae6586c0f2b69bf32bc  gcc/testsuite/gcc.target/x86_64/abi/avx512f/test_varargs-m512.c
! 4343daef1e3bbdc379e5445b5cdc23fe  gcc/testsuite/gcc.target/x86_64/abi/callabi/callabi.exp
  b52212e25b4fe43a1bda56b50d2cc914  gcc/testsuite/gcc.target/x86_64/abi/callabi/callabi.h
  bd08629b87a61bb1d8bfca958f60b18f  gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c
  17951c08530e05273568b3b636fb8a4e  gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c
--- 73744,73790 ----
  24464384d6d7542bbd2ae638f390e7a6  gcc/testsuite/gcc.target/x86_64/abi/avx512f/test_passing_structs.c
  fe0e9b140dbc68ca140fc7100c1ade24  gcc/testsuite/gcc.target/x86_64/abi/avx512f/test_passing_unions.c
  ea57c03627834ae6586c0f2b69bf32bc  gcc/testsuite/gcc.target/x86_64/abi/avx512f/test_varargs-m512.c
! 9458e043fa1436e2c38f4edf4caa5ae3  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/abi-avx512fp16-xmm.exp
! 2b129c5d89f4fa1b005adf23508c4fec  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/args.h
! a2aced5af6d51b8a8700ca71634803e3  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/asm-support.S
! bcfa5ef4f1f22fe71409ef362478b98a  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/avx512fp16-check.h
! a5cb603e3325d1483156a1bafca70853  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/avx512fp16-xmm-check.h
! 59a59553dc3e012851df850ebc07de5e  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/defines.h
! 8674bc1d76d044f3e9a61e92b9227ee1  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/abi-avx512fp16-ymm.exp
! d09bd80049e83e4efed5897afee5c4ff  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/args.h
! 0df09e54902b0a238caad6de9dc92c5d  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/asm-support.S
! 88d9834938333121b41948df32c869b2  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/avx512fp16-ymm-check.h
! 52af4c3287d54080390845de96e709f5  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/test_m256_returning.c
! a437b16e934be9ca096a7c1741e8085f  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/test_passing_m256.c
! 992138c3f98a569ecd2ffa2b73fad6a7  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/test_passing_structs.c
! 17d74e6230fbbecaf9cc223807c58341  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/test_passing_unions.c
! b9e013481b466db18703e47f37a22408  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m256h/test_varargs-m256.c
! 9458e043fa1436e2c38f4edf4caa5ae3  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/abi-avx512fp16-zmm.exp
! 176cf0e188d1f0e52307d89b8d784fdd  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/args.h
! 018d5507f0c4c2e50d7895e924a53c1b  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/asm-support.S
! ba52323e4ee4308b6b4e8989ddb5f3f4  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/avx512fp16-zmm-check.h
! 5178a56841749491d04bd67bf6b14c8c  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/test_m512_returning.c
! 362613f1a8c51415cad5ce49e63c764a  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/test_passing_m512.c
! 7c0bc408af458a57f7e59bc1fd00b141  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/test_passing_structs.c
! ce71d86e8aaf11dd274a771057dc66bc  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/test_passing_unions.c
! f4f6e7da9799b70f0cfeb38a966c7f2d  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/m512h/test_varargs-m512.c
! ced3e7fc25757fe027f4eacc904e6881  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/macros.h
! 0838ade8c6e405aab3ad513f37bcc4f2  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_3_element_struct_and_unions.c
! 24950899403bc99b52797b406202379c  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_basic_alignment.c
! 22bb0b59d7b81fc481c7a342e90658c8  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_basic_array_size_and_align.c
! 0fd8cafd599bf97dcaa0b737d5e61c02  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_basic_returning.c
! 0ee0c048f5b8b499f51334141de2b612  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_basic_sizes.c
! b27739d09dae63513f24d78e1085077f  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_basic_struct_size_and_align.c
! 0b501f0e807725b179786b5073e0dcd9  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_basic_union_size_and_align.c
! b8139da69555c956f9da006916bb9713  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_complex_returning.c
! 85bec7515bb11109ef483b7b4af4c71e  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_m64m128_returning.c
! 267e4cb4b7b4db473ea1440174aca6f2  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_passing_floats.c
! e22c619a2f431de8e65d3afabf108e1c  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_passing_m64m128.c
! 87a48bef9c1c6350b01516608038d2ce  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_passing_structs.c
! b42af2b2d27084488f2cbff57c084c7e  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_passing_unions.c
! 7708c68d41b7c3c416bc62d837c31b4d  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_struct_returning.c
! 4e635600e6c770510213147a02f03d44  gcc/testsuite/gcc.target/x86_64/abi/avx512fp16/test_varargs-m128.c
! dcdf5165eaafaedce981f203c3322568  gcc/testsuite/gcc.target/x86_64/abi/callabi/callabi.exp
  b52212e25b4fe43a1bda56b50d2cc914  gcc/testsuite/gcc.target/x86_64/abi/callabi/callabi.h
  bd08629b87a61bb1d8bfca958f60b18f  gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c
  17951c08530e05273568b3b636fb8a4e  gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c
*************** d02a2912e872fd8b7b39b69b74482091  gcc/te
*** 69890,69899 ****
  dfc167e3c82be6261ef045c50a409cf9  gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-6.c
  002286d968abb2e5012ebb83dd44784d  gcc/testsuite/gcc.target/x86_64/abi/defines.h
  ced3e7fc25757fe027f4eacc904e6881  gcc/testsuite/gcc.target/x86_64/abi/macros.h
! d162a29793ce69ce8e4f6ebb6f65cbe3  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S
  cf207cd32f48bf81f1c2ea9397f53856  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/gen.cc
  b14bf90b9e86d7c81b95cad9c4d55dae  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c
! 4745141569ff606b1093ca95943384f4  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp
  df350cc8fc42fcbfb44edc088765d60a  gcc/testsuite/gcc.target/x86_64/abi/test_3_element_struct_and_unions.c
  54a02258e782aaa35101b4f6cddbe300  gcc/testsuite/gcc.target/x86_64/abi/test_basic_alignment.c
  21f9b335d755c74bdef8998aeac98585  gcc/testsuite/gcc.target/x86_64/abi/test_basic_array_size_and_align.c
--- 73805,73814 ----
  dfc167e3c82be6261ef045c50a409cf9  gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-6.c
  002286d968abb2e5012ebb83dd44784d  gcc/testsuite/gcc.target/x86_64/abi/defines.h
  ced3e7fc25757fe027f4eacc904e6881  gcc/testsuite/gcc.target/x86_64/abi/macros.h
! 11eb1cf1d13cde25e67d0ad89c8600b5  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/do-test.S
  cf207cd32f48bf81f1c2ea9397f53856  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/gen.cc
  b14bf90b9e86d7c81b95cad9c4d55dae  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.c
! ebf3cf3bcb74a6aba311d9006ee9c06b  gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp
  df350cc8fc42fcbfb44edc088765d60a  gcc/testsuite/gcc.target/x86_64/abi/test_3_element_struct_and_unions.c
  54a02258e782aaa35101b4f6cddbe300  gcc/testsuite/gcc.target/x86_64/abi/test_basic_alignment.c
  21f9b335d755c74bdef8998aeac98585  gcc/testsuite/gcc.target/x86_64/abi/test_basic_array_size_and_align.c
*************** de974d8f497b1ad76694e8f9333fcd26  gcc/te
*** 70119,70125 ****
  92244b620516764d25382b815309419b  gcc/testsuite/gcc.target/xstormy16/sfr/27_if0_sfrw_bitfield_8.c
  292d09294f8beccfa611eb5d5ace3e5d  gcc/testsuite/gcc.target/xstormy16/sfr/27_if0_sfrw_bitfield_b.c
  399545481a5e90f464e00d2cdb3b624f  gcc/testsuite/gcc.target/xstormy16/sfr/27_if0_sfrw_bitfield_f.c
! cc1265cfe6b2c679157812a921b4f8a2  gcc/testsuite/gcc.target/xstormy16/xstormy16.exp
  160617ce3e92166c524b3c1d584958a1  gcc/testsuite/gcc.target/xtensa/bswap.c
  5dd88a67050813a2722e394515530667  gcc/testsuite/gcc.target/xtensa/mabi-call0.c
  55cb36db164b6243fa3041628937695c  gcc/testsuite/gcc.target/xtensa/mabi-windowed.c
--- 74034,74040 ----
  92244b620516764d25382b815309419b  gcc/testsuite/gcc.target/xstormy16/sfr/27_if0_sfrw_bitfield_8.c
  292d09294f8beccfa611eb5d5ace3e5d  gcc/testsuite/gcc.target/xstormy16/sfr/27_if0_sfrw_bitfield_b.c
  399545481a5e90f464e00d2cdb3b624f  gcc/testsuite/gcc.target/xstormy16/sfr/27_if0_sfrw_bitfield_f.c
! 41bf13a1fa5ab1ab131001e65b4df019  gcc/testsuite/gcc.target/xstormy16/xstormy16.exp
  160617ce3e92166c524b3c1d584958a1  gcc/testsuite/gcc.target/xtensa/bswap.c
  5dd88a67050813a2722e394515530667  gcc/testsuite/gcc.target/xtensa/mabi-call0.c
  55cb36db164b6243fa3041628937695c  gcc/testsuite/gcc.target/xtensa/mabi-windowed.c
*************** fc75a0f9bf2050602dba2ff080a220b4  gcc/te
*** 70127,70134 ****
  acfb44b971ca766549ce4e3d2974f084  gcc/testsuite/gcc.target/xtensa/pr94584.c
  ef29d88bcc9a62033efa0a6e41a3e7d8  gcc/testsuite/gcc.target/xtensa/pr98285.c
  a948656f4ea504ef065dc8d743d6ae01  gcc/testsuite/gcc.target/xtensa/shifts.c
! c77a9cfd9ed4d4fdbf6839e60aad5681  gcc/testsuite/gcc.target/xtensa/xtensa.exp
! c8ed0aea7df0f1e298e55203ac332fb5  gcc/testsuite/gcc.test-framework/README
  096a37c4b1e488bdb060872ca7b99862  gcc/testsuite/gcc.test-framework/dg-bogus-exp-P.c
  9f91f73374d446d6b0085730a8104942  gcc/testsuite/gcc.test-framework/dg-bogus-exp-XF.c
  570821aa898995690ac6f67de0840c1a  gcc/testsuite/gcc.test-framework/dg-do-assemble-exp-P.c
--- 74042,74049 ----
  acfb44b971ca766549ce4e3d2974f084  gcc/testsuite/gcc.target/xtensa/pr94584.c
  ef29d88bcc9a62033efa0a6e41a3e7d8  gcc/testsuite/gcc.target/xtensa/pr98285.c
  a948656f4ea504ef065dc8d743d6ae01  gcc/testsuite/gcc.target/xtensa/shifts.c
! 26589e93b43e27bb6d65e9bbdc3b630c  gcc/testsuite/gcc.target/xtensa/xtensa.exp
! c4ef295a290a9fbc874fb729f4f83b32  gcc/testsuite/gcc.test-framework/README
  096a37c4b1e488bdb060872ca7b99862  gcc/testsuite/gcc.test-framework/dg-bogus-exp-P.c
  9f91f73374d446d6b0085730a8104942  gcc/testsuite/gcc.test-framework/dg-bogus-exp-XF.c
  570821aa898995690ac6f67de0840c1a  gcc/testsuite/gcc.test-framework/dg-do-assemble-exp-P.c
*************** d76821513655f47d266e00386180369f  gcc/te
*** 70184,70201 ****
  7741b86259484f4bb14a28d48d2a3723  gcc/testsuite/gcc.test-framework/dg-warning-exp-F.c
  a5fed7916fa20d3c35ba9b6ca7d18593  gcc/testsuite/gcc.test-framework/dg-warning-exp-P.c
  b09307dc50aad69d9ba101705dce41f4  gcc/testsuite/gcc.test-framework/dg-warning-nocache-exp-P.c
! 2ad445001bbc1827c43ae8f4831f0796  gcc/testsuite/gcc.test-framework/gen_directive_tests
! f2f8f7b176a8096b7448247592723377  gcc/testsuite/gcc.test-framework/test-framework.awk
! b2f1a9a045a9e57b6091049452751096  gcc/testsuite/gcc.test-framework/test-framework.exp
  502192866584cff5028f4aa00858d119  gcc/testsuite/gdc.dg/Waddress.d
  94208575e1a523900cf5bbbacff458ff  gcc/testsuite/gdc.dg/Wcastresult1.d
! 48a00a7acec933f1e03b4d13199e7e63  gcc/testsuite/gdc.dg/Wcastresult2.d
  684da8abc6d44a02e6b361d163e350c1  gcc/testsuite/gdc.dg/array1.d
! 06295fc1f9b1f0161cf0de7d4310451e  gcc/testsuite/gdc.dg/asan/asan.exp
  10180752a9d53fac31ca576e678cdd06  gcc/testsuite/gdc.dg/asan/gdc272.d
! b4e45cde8944eb65be733fa1817fd03c  gcc/testsuite/gdc.dg/asm1.d
! 98772cac30ec108e3034308434d03d25  gcc/testsuite/gdc.dg/asm2.d
! bc8a77c59a0cb7aa3d9a59ea65a92a40  gcc/testsuite/gdc.dg/asm3.d
  744340225f4ee9da7bfe66ad4a54b2c8  gcc/testsuite/gdc.dg/asm4.d
  81924dd147fbe2024048ac4b5b397435  gcc/testsuite/gdc.dg/asm5.d
  31a8b77972532af3d4c1e4b565ffd968  gcc/testsuite/gdc.dg/attr_allocsize1.d
--- 74099,74116 ----
  7741b86259484f4bb14a28d48d2a3723  gcc/testsuite/gcc.test-framework/dg-warning-exp-F.c
  a5fed7916fa20d3c35ba9b6ca7d18593  gcc/testsuite/gcc.test-framework/dg-warning-exp-P.c
  b09307dc50aad69d9ba101705dce41f4  gcc/testsuite/gcc.test-framework/dg-warning-nocache-exp-P.c
! e194a3901952483fedf42ffc5554904e  gcc/testsuite/gcc.test-framework/gen_directive_tests
! 610902682c8b23c187d07f3098f52a46  gcc/testsuite/gcc.test-framework/test-framework.awk
! e39ca362f298ecd885080e2e18e0300d  gcc/testsuite/gcc.test-framework/test-framework.exp
  502192866584cff5028f4aa00858d119  gcc/testsuite/gdc.dg/Waddress.d
  94208575e1a523900cf5bbbacff458ff  gcc/testsuite/gdc.dg/Wcastresult1.d
! 44e39786a0fd5bf9bfdb4d4356edd009  gcc/testsuite/gdc.dg/Wcastresult2.d
  684da8abc6d44a02e6b361d163e350c1  gcc/testsuite/gdc.dg/array1.d
! e3229cdbb49fa4eddc8e95415670f5e6  gcc/testsuite/gdc.dg/asan/asan.exp
  10180752a9d53fac31ca576e678cdd06  gcc/testsuite/gdc.dg/asan/gdc272.d
! de1309b7ef02b8dd0a89139091b615b3  gcc/testsuite/gdc.dg/asm1.d
! fe26b7411075062b4f74f94131f6ff12  gcc/testsuite/gdc.dg/asm2.d
! 926ed4a40911d18017b4da46ddf2753b  gcc/testsuite/gdc.dg/asm3.d
  744340225f4ee9da7bfe66ad4a54b2c8  gcc/testsuite/gdc.dg/asm4.d
  81924dd147fbe2024048ac4b5b397435  gcc/testsuite/gdc.dg/asm5.d
  31a8b77972532af3d4c1e4b565ffd968  gcc/testsuite/gdc.dg/attr_allocsize1.d
*************** a7aa471b806a0dc9aa5c6bb1b37b42ad  gcc/te
*** 70224,70238 ****
  84521024efb763093c6953cf9c5af938  gcc/testsuite/gdc.dg/attr_used2.d
  9572ed86d7a73e283f1add9802b99b1a  gcc/testsuite/gdc.dg/attr_weak1.d
  0aaff757c8c0406ea7a86643ad642fb3  gcc/testsuite/gdc.dg/cast1.d
! e44d06ba1fa35fa83216b86e44b316fc  gcc/testsuite/gdc.dg/debug/debug.exp
! 4801d3c3cd0447454214b735d1b0f302  gcc/testsuite/gdc.dg/debug/dwarf2/dwarf2.exp
  f57bfa4edc494fecd4284a542f695d0f  gcc/testsuite/gdc.dg/debug/dwarf2/imports/pr98067.d
  37e2ca0f4e06cb14e92a710579518a60  gcc/testsuite/gdc.dg/debug/dwarf2/langdw2.d
  db93819c7b52f4f6ea4f42fed3e0a48a  gcc/testsuite/gdc.dg/debug/dwarf2/langdw3.d
  8527933fbf2d9fb7c82fd63435063168  gcc/testsuite/gdc.dg/debug/dwarf2/pr98067.d
  0121ae6408f107a6bf6f915c24102bd3  gcc/testsuite/gdc.dg/debug/trivial.d
! 056a77865fa4a8c3178b44ed6a0b1dc7  gcc/testsuite/gdc.dg/dg.exp
! 9b1a478e67e4cf0b4384f63a7005e8fc  gcc/testsuite/gdc.dg/extern-c++/extern-c++.exp
  61180002f0f17ca7ed75def599d123f0  gcc/testsuite/gdc.dg/extern-c++/pr101664.d
  68936fbe708c1d13dcaca6e4a4a06f77  gcc/testsuite/gdc.dg/extern-c++/pr101664_1.cc
  a1a48cc59d8f09de15d5d5519e240770  gcc/testsuite/gdc.dg/fileimports/pr93038.txt
--- 74139,74153 ----
  84521024efb763093c6953cf9c5af938  gcc/testsuite/gdc.dg/attr_used2.d
  9572ed86d7a73e283f1add9802b99b1a  gcc/testsuite/gdc.dg/attr_weak1.d
  0aaff757c8c0406ea7a86643ad642fb3  gcc/testsuite/gdc.dg/cast1.d
! 1aa737abc3f6f98c201e3d6d98b5e4cf  gcc/testsuite/gdc.dg/debug/debug.exp
! 30df248a2c4b4a996fa34a6d46c9c16c  gcc/testsuite/gdc.dg/debug/dwarf2/dwarf2.exp
  f57bfa4edc494fecd4284a542f695d0f  gcc/testsuite/gdc.dg/debug/dwarf2/imports/pr98067.d
  37e2ca0f4e06cb14e92a710579518a60  gcc/testsuite/gdc.dg/debug/dwarf2/langdw2.d
  db93819c7b52f4f6ea4f42fed3e0a48a  gcc/testsuite/gdc.dg/debug/dwarf2/langdw3.d
  8527933fbf2d9fb7c82fd63435063168  gcc/testsuite/gdc.dg/debug/dwarf2/pr98067.d
  0121ae6408f107a6bf6f915c24102bd3  gcc/testsuite/gdc.dg/debug/trivial.d
! 513a9ff1eab2fe60e403ca1f13490d25  gcc/testsuite/gdc.dg/dg.exp
! 143caa33650ff48f316c9f2da298fce3  gcc/testsuite/gdc.dg/extern-c++/extern-c++.exp
  61180002f0f17ca7ed75def599d123f0  gcc/testsuite/gdc.dg/extern-c++/pr101664.d
  68936fbe708c1d13dcaca6e4a4a06f77  gcc/testsuite/gdc.dg/extern-c++/pr101664_1.cc
  a1a48cc59d8f09de15d5d5519e240770  gcc/testsuite/gdc.dg/fileimports/pr93038.txt
*************** bd9cda582a383e02474fc3702c94985e  gcc/te
*** 70268,70274 ****
  5308266c1954385c73cdd863443ccec6  gcc/testsuite/gdc.dg/gdc261.d
  1a449b6581b6852ea8de6bd1fc7fe690  gcc/testsuite/gdc.dg/gdc27.d
  92fb33b5a707cefb4b1290e8bcda64b7  gcc/testsuite/gdc.dg/gdc280.d
! 593f75fcca3418f51fcc2f3835173079  gcc/testsuite/gdc.dg/gdc282.d
  c39a96a9b2911da3d3f2a129a0239901  gcc/testsuite/gdc.dg/gdc284.d
  a8b9718e9319b63f7beb92ac4b2b0818  gcc/testsuite/gdc.dg/gdc300.d
  83ab9f02227b50d98466272ffe6f14fe  gcc/testsuite/gdc.dg/gdc31.d
--- 74183,74189 ----
  5308266c1954385c73cdd863443ccec6  gcc/testsuite/gdc.dg/gdc261.d
  1a449b6581b6852ea8de6bd1fc7fe690  gcc/testsuite/gdc.dg/gdc27.d
  92fb33b5a707cefb4b1290e8bcda64b7  gcc/testsuite/gdc.dg/gdc280.d
! aef35588a1902a6c62b53f9707490672  gcc/testsuite/gdc.dg/gdc282.d
  c39a96a9b2911da3d3f2a129a0239901  gcc/testsuite/gdc.dg/gdc284.d
  a8b9718e9319b63f7beb92ac4b2b0818  gcc/testsuite/gdc.dg/gdc300.d
  83ab9f02227b50d98466272ffe6f14fe  gcc/testsuite/gdc.dg/gdc31.d
*************** eb8f845d76d9f6d311238210d295fa21  gcc/te
*** 70280,70286 ****
  4944b9a0b1f22fb68fabb167f1506524  gcc/testsuite/gdc.dg/gdc71.d
  4ea93bb5e289cd13e04ae74dc11fcf09  gcc/testsuite/gdc.dg/gdc77.d
  67104d4c9e5da1f77ef3a93189f99e15  gcc/testsuite/gdc.dg/imports/attributes.d
! c68b116c16fdbf7519775c457db49b19  gcc/testsuite/gdc.dg/imports/gdc170.d
  b7311c0dccb9d8f3e521531c1175245c  gcc/testsuite/gdc.dg/imports/gdc231.d
  86c404264c2609e8e1db21b5d1829974  gcc/testsuite/gdc.dg/imports/gdc239.d
  3d89bde921251b85d0e9ea0a24d3bb05  gcc/testsuite/gdc.dg/imports/gdc241a.d
--- 74195,74201 ----
  4944b9a0b1f22fb68fabb167f1506524  gcc/testsuite/gdc.dg/gdc71.d
  4ea93bb5e289cd13e04ae74dc11fcf09  gcc/testsuite/gdc.dg/gdc77.d
  67104d4c9e5da1f77ef3a93189f99e15  gcc/testsuite/gdc.dg/imports/attributes.d
! 2942a45590f07f39370d8741a7a99795  gcc/testsuite/gdc.dg/imports/gdc170.d
  b7311c0dccb9d8f3e521531c1175245c  gcc/testsuite/gdc.dg/imports/gdc231.d
  86c404264c2609e8e1db21b5d1829974  gcc/testsuite/gdc.dg/imports/gdc239.d
  3d89bde921251b85d0e9ea0a24d3bb05  gcc/testsuite/gdc.dg/imports/gdc241a.d
*************** b60175beb28e5f269667d25260e08c71  gcc/te
*** 70294,70312 ****
  22f231195c5f7726c704d3f9d99b0d85  gcc/testsuite/gdc.dg/imports/gdc27.d
  aeec8ff75316a52def72f86d4bc1708c  gcc/testsuite/gdc.dg/imports/gdcpkg256/package.d
  7ae8eee97923fab094ae5ca5a1eca902  gcc/testsuite/gdc.dg/imports/pr92216.d
! b9989889ba43c533b1edad45c8a4bca1  gcc/testsuite/gdc.dg/intrinsics.d
! 2049e750a9b0b91100888e640127b311  gcc/testsuite/gdc.dg/lto/lto.exp
  73f4e0e4c2d7cacc12e6ae72ff1a988e  gcc/testsuite/gdc.dg/lto/ltotests_0.d
  bcf14abbb66e47644086ee0018354420  gcc/testsuite/gdc.dg/lto/ltotests_1.d
  7d27bb4ae013be8b6cb21a42a730353d  gcc/testsuite/gdc.dg/pr100882a.d
  167004b1d3ea4a1c36668f029fbe4290  gcc/testsuite/gdc.dg/pr100882b.d
  c0f2db1fcb83cbb41fda8295889368ff  gcc/testsuite/gdc.dg/pr100882c.d
! 16bbee694aa77823539b7b517bad4c50  gcc/testsuite/gdc.dg/pr100967.d
  740e20f8b4aa9d31c7412fbd3b58d4fb  gcc/testsuite/gdc.dg/pr101127a.d
  1913e638608dc57b978438a45ade3c4f  gcc/testsuite/gdc.dg/pr101127b.d
  874906b0c6afe60dafbbc739053ac4eb  gcc/testsuite/gdc.dg/pr101490.d
  13e2f7b1a821d0fa1089525b3df15479  gcc/testsuite/gdc.dg/pr101640.d
  00da6db0d966d43d573f86b9fe032508  gcc/testsuite/gdc.dg/pr102185.d
  616697349b5740e41fd04c0ae6074cd2  gcc/testsuite/gdc.dg/pr105004.d
  d32aa8ed5ea10931be4ddb5bb9e863d8  gcc/testsuite/gdc.dg/pr89017.d
  53fa8db94d4ca3fc9ba83769733dc0e7  gcc/testsuite/gdc.dg/pr89041.d
--- 74209,74232 ----
  22f231195c5f7726c704d3f9d99b0d85  gcc/testsuite/gdc.dg/imports/gdc27.d
  aeec8ff75316a52def72f86d4bc1708c  gcc/testsuite/gdc.dg/imports/gdcpkg256/package.d
  7ae8eee97923fab094ae5ca5a1eca902  gcc/testsuite/gdc.dg/imports/pr92216.d
! 8120e5c267785a8c8b8eb099660e9a14  gcc/testsuite/gdc.dg/intrinsics.d
! 2319a395f830492fe9ec7d713b9983a3  gcc/testsuite/gdc.dg/lto/lto.exp
  73f4e0e4c2d7cacc12e6ae72ff1a988e  gcc/testsuite/gdc.dg/lto/ltotests_0.d
  bcf14abbb66e47644086ee0018354420  gcc/testsuite/gdc.dg/lto/ltotests_1.d
+ 67f3da95e0d4f9e0695facaa788ce93f  gcc/testsuite/gdc.dg/lto/pr102094_0.d
+ 72df2b7de363980279c39b35784dcf57  gcc/testsuite/gdc.dg/nrvo1.d
  7d27bb4ae013be8b6cb21a42a730353d  gcc/testsuite/gdc.dg/pr100882a.d
  167004b1d3ea4a1c36668f029fbe4290  gcc/testsuite/gdc.dg/pr100882b.d
  c0f2db1fcb83cbb41fda8295889368ff  gcc/testsuite/gdc.dg/pr100882c.d
! f3963fb6f27af4ec242f11719c6f4138  gcc/testsuite/gdc.dg/pr100967.d
  740e20f8b4aa9d31c7412fbd3b58d4fb  gcc/testsuite/gdc.dg/pr101127a.d
  1913e638608dc57b978438a45ade3c4f  gcc/testsuite/gdc.dg/pr101127b.d
  874906b0c6afe60dafbbc739053ac4eb  gcc/testsuite/gdc.dg/pr101490.d
  13e2f7b1a821d0fa1089525b3df15479  gcc/testsuite/gdc.dg/pr101640.d
+ e8c6a4e8da8fda01c1b06d6b68bfece9  gcc/testsuite/gdc.dg/pr101657.d
+ 2c13c8027517ce3e2b17c5601531fc9d  gcc/testsuite/gdc.dg/pr101672.d
  00da6db0d966d43d573f86b9fe032508  gcc/testsuite/gdc.dg/pr102185.d
+ 365e0870e60a71f9195b44127b8b246f  gcc/testsuite/gdc.dg/pr102476.d
  616697349b5740e41fd04c0ae6074cd2  gcc/testsuite/gdc.dg/pr105004.d
  d32aa8ed5ea10931be4ddb5bb9e863d8  gcc/testsuite/gdc.dg/pr89017.d
  53fa8db94d4ca3fc9ba83769733dc0e7  gcc/testsuite/gdc.dg/pr89041.d
*************** aa2d8c1877494580482a3ecd53273c14  gcc/te
*** 70316,70349 ****
  8da24faca8bd7e53b1b35f77886e3c00  gcc/testsuite/gdc.dg/pr90136b.d
  2268967ca63a17d4ce6711255dbfe36e  gcc/testsuite/gdc.dg/pr90136c.d
  8a30d0c28f872107d7f7e74674a11567  gcc/testsuite/gdc.dg/pr90601.d
! 309a004f4b83db629f4f6193ba0808eb  gcc/testsuite/gdc.dg/pr90650a.d
! 435dae630589579d72f4713b7535ee3e  gcc/testsuite/gdc.dg/pr90650b.d
  1b70c40a24017e49d5474d3553acac65  gcc/testsuite/gdc.dg/pr91238.d
  1d653292b5f0c3b4d17c902e4bbba9dd  gcc/testsuite/gdc.dg/pr92216.d
  3cbba828af95fce42d44bc061af274b8  gcc/testsuite/gdc.dg/pr93038.d
  ff84d707937682f90e05f089db0bd9e8  gcc/testsuite/gdc.dg/pr93038b.d
! 48d876a6686fa02cab422bfc721bf94f  gcc/testsuite/gdc.dg/pr94777a.d
  cf624d769a9b5200926d4c132fe75e3c  gcc/testsuite/gdc.dg/pr94970.d
  f547248028dde32c303a59ddcb1e9cc2  gcc/testsuite/gdc.dg/pr95173.d
! be038d26745b623aa5734e73550773e6  gcc/testsuite/gdc.dg/pr95250.d
  53343eb0d4463417361dc00a68627e98  gcc/testsuite/gdc.dg/pr96140.d
  2287e5948ce2959839e3f9456d8c2adb  gcc/testsuite/gdc.dg/pr96154a.d
  e3400c6549561561e3b061d72a4045ce  gcc/testsuite/gdc.dg/pr96154b.d
  f8904c371a1f3062fde571c25b998c54  gcc/testsuite/gdc.dg/pr96157b.d
  f23ace9a6ba289791306e13d8fd5ce0f  gcc/testsuite/gdc.dg/pr96254a.d
  b62ff9f99e07b6dbb56f221a56f0b7ab  gcc/testsuite/gdc.dg/pr96254b.d
  eb911ca49c3c33021dd97064b0459923  gcc/testsuite/gdc.dg/pr96301a.d
  6f5ae39580efa1de2679c8912e82e1b8  gcc/testsuite/gdc.dg/pr96301b.d
  7880bdba7c166bb0d5af9d5a4530b438  gcc/testsuite/gdc.dg/pr96301c.d
  71687cb94e2099d3d815f51913a75e16  gcc/testsuite/gdc.dg/pr96429.d
! c5a77c2a508b4b45e9a6b936d77d9f80  gcc/testsuite/gdc.dg/pr96869.d
  dc97b4112b134cae3d15aab92424d97a  gcc/testsuite/gdc.dg/pr96924.d
  9c4c7df565451e246ae0d226391657f5  gcc/testsuite/gdc.dg/pr97002.d
! 474f1f2b9c5476fcfd2ee0ed2db833f0  gcc/testsuite/gdc.dg/pr98277.d
  a55903f9c72658c02ea18841f80bff0c  gcc/testsuite/gdc.dg/pr98427.d
! cbe01bd2f79e7ab3310ed946deebeec0  gcc/testsuite/gdc.dg/pr98457.d
  3b746393a80b865ba51671750bc32bb9  gcc/testsuite/gdc.dg/pr99914.d
! f1adbeffab0551ea1626f3d9c0025d35  gcc/testsuite/gdc.dg/simd1.d
  a182c1f547b3b5d1ac97048fc88292b8  gcc/testsuite/gdc.dg/simd10447.d
  391b914cb5a7ad86f4f5b923fd3ef898  gcc/testsuite/gdc.dg/simd12776.d
  6d2b8ba219afe65762f6bd47e5b87a90  gcc/testsuite/gdc.dg/simd13841.d
--- 74236,74272 ----
  8da24faca8bd7e53b1b35f77886e3c00  gcc/testsuite/gdc.dg/pr90136b.d
  2268967ca63a17d4ce6711255dbfe36e  gcc/testsuite/gdc.dg/pr90136c.d
  8a30d0c28f872107d7f7e74674a11567  gcc/testsuite/gdc.dg/pr90601.d
! 8a837e0b3fba99cf4023482b96f88084  gcc/testsuite/gdc.dg/pr90650a.d
! f638c5e447bcee1678d424bc788ce5d9  gcc/testsuite/gdc.dg/pr90650b.d
  1b70c40a24017e49d5474d3553acac65  gcc/testsuite/gdc.dg/pr91238.d
  1d653292b5f0c3b4d17c902e4bbba9dd  gcc/testsuite/gdc.dg/pr92216.d
  3cbba828af95fce42d44bc061af274b8  gcc/testsuite/gdc.dg/pr93038.d
  ff84d707937682f90e05f089db0bd9e8  gcc/testsuite/gdc.dg/pr93038b.d
! 83cbfb4a61b1f43a4a47612966be3237  gcc/testsuite/gdc.dg/pr94777a.d
! e06ee0ceb84744f0d0e6a3fbac1c923c  gcc/testsuite/gdc.dg/pr94777c.d
  cf624d769a9b5200926d4c132fe75e3c  gcc/testsuite/gdc.dg/pr94970.d
  f547248028dde32c303a59ddcb1e9cc2  gcc/testsuite/gdc.dg/pr95173.d
! 9d95ba2d046eb842a54684f48dadbbd8  gcc/testsuite/gdc.dg/pr95250.d
  53343eb0d4463417361dc00a68627e98  gcc/testsuite/gdc.dg/pr96140.d
  2287e5948ce2959839e3f9456d8c2adb  gcc/testsuite/gdc.dg/pr96154a.d
  e3400c6549561561e3b061d72a4045ce  gcc/testsuite/gdc.dg/pr96154b.d
+ 2a49209dc038fefd8f081d337fcc1364  gcc/testsuite/gdc.dg/pr96156b.d
  f8904c371a1f3062fde571c25b998c54  gcc/testsuite/gdc.dg/pr96157b.d
+ 75f02df4030220423eb9c2630504d4d9  gcc/testsuite/gdc.dg/pr96157c.d
  f23ace9a6ba289791306e13d8fd5ce0f  gcc/testsuite/gdc.dg/pr96254a.d
  b62ff9f99e07b6dbb56f221a56f0b7ab  gcc/testsuite/gdc.dg/pr96254b.d
  eb911ca49c3c33021dd97064b0459923  gcc/testsuite/gdc.dg/pr96301a.d
  6f5ae39580efa1de2679c8912e82e1b8  gcc/testsuite/gdc.dg/pr96301b.d
  7880bdba7c166bb0d5af9d5a4530b438  gcc/testsuite/gdc.dg/pr96301c.d
  71687cb94e2099d3d815f51913a75e16  gcc/testsuite/gdc.dg/pr96429.d
! 5de3a811c709b67f83b605db00752f97  gcc/testsuite/gdc.dg/pr96869.d
  dc97b4112b134cae3d15aab92424d97a  gcc/testsuite/gdc.dg/pr96924.d
  9c4c7df565451e246ae0d226391657f5  gcc/testsuite/gdc.dg/pr97002.d
! 17590cd4f39c6a9b405c2a9fc1d8a2c7  gcc/testsuite/gdc.dg/pr98277.d
  a55903f9c72658c02ea18841f80bff0c  gcc/testsuite/gdc.dg/pr98427.d
! 2ff2dd55acd20dffe2b5e58febe66c8b  gcc/testsuite/gdc.dg/pr98457.d
  3b746393a80b865ba51671750bc32bb9  gcc/testsuite/gdc.dg/pr99914.d
! 2586587f34ed7ef788014cd87436908f  gcc/testsuite/gdc.dg/simd1.d
  a182c1f547b3b5d1ac97048fc88292b8  gcc/testsuite/gdc.dg/simd10447.d
  391b914cb5a7ad86f4f5b923fd3ef898  gcc/testsuite/gdc.dg/simd12776.d
  6d2b8ba219afe65762f6bd47e5b87a90  gcc/testsuite/gdc.dg/simd13841.d
*************** c315ba401242513acfc2cdc70141e5c7  gcc/te
*** 70356,70377 ****
  003666fb9a56ec290f290af7c24d8913  gcc/testsuite/gdc.dg/simd17695.d
  513fcf8d3ca12f72fdece27dd6670d31  gcc/testsuite/gdc.dg/simd17720a.d
  cc88f045df5f6f78caef226ba1080c83  gcc/testsuite/gdc.dg/simd17720b.d
  38c22d06146ca22bb0e7de6ff9d7d8d8  gcc/testsuite/gdc.dg/simd19224.d
  32eefa3de18cb277221ac224e95c2c9b  gcc/testsuite/gdc.dg/simd19627.d
  9785aaf465e6302e316fdc58f453d5b2  gcc/testsuite/gdc.dg/simd19628.d
  a404b46e0cb800e49ef56609790c6bae  gcc/testsuite/gdc.dg/simd19629.d
  79e921aaf034c657a1cba5c0e0f99503  gcc/testsuite/gdc.dg/simd19630.d
! 24d62a0a1e71936215d5f25c8531cb04  gcc/testsuite/gdc.dg/simd2a.d
! b7410a0a56a1d1c99c521fed514c7025  gcc/testsuite/gdc.dg/simd2b.d
! bc85cf2157ce920635253cb7660d3614  gcc/testsuite/gdc.dg/simd2c.d
! d4517ca66a2709db71d0be50cce9fe58  gcc/testsuite/gdc.dg/simd2d.d
! 3336852acca6768ae9df434cfc6ee687  gcc/testsuite/gdc.dg/simd2e.d
! 89a71c3ecb2b51b1afcb49957ac75dcb  gcc/testsuite/gdc.dg/simd2f.d
! 559825e677020389a77d7b6dc2ef941c  gcc/testsuite/gdc.dg/simd2g.d
! 7c3bccc7adce30add7dd6be2cd3ead28  gcc/testsuite/gdc.dg/simd2h.d
! f11463b4471489492db19b43c02ddf40  gcc/testsuite/gdc.dg/simd2i.d
! 4a207898846ed85d94c944c039679a94  gcc/testsuite/gdc.dg/simd2j.d
! ebf10f947788d525f0f46b76f8e11271  gcc/testsuite/gdc.dg/simd7951.d
  a7c34dd8ee918654448f7d7b879eb96f  gcc/testsuite/gdc.dg/torture/array2.d
  38be24cf4164de4216f6f5628482be07  gcc/testsuite/gdc.dg/torture/array3.d
  f7b8cedb229b6216459b475252b2ad1e  gcc/testsuite/gdc.dg/torture/gdc115.d
--- 74279,74303 ----
  003666fb9a56ec290f290af7c24d8913  gcc/testsuite/gdc.dg/simd17695.d
  513fcf8d3ca12f72fdece27dd6670d31  gcc/testsuite/gdc.dg/simd17720a.d
  cc88f045df5f6f78caef226ba1080c83  gcc/testsuite/gdc.dg/simd17720b.d
+ a212ab6fd6d4655cf609ad552047ca98  gcc/testsuite/gdc.dg/simd18489.d
  38c22d06146ca22bb0e7de6ff9d7d8d8  gcc/testsuite/gdc.dg/simd19224.d
  32eefa3de18cb277221ac224e95c2c9b  gcc/testsuite/gdc.dg/simd19627.d
  9785aaf465e6302e316fdc58f453d5b2  gcc/testsuite/gdc.dg/simd19628.d
  a404b46e0cb800e49ef56609790c6bae  gcc/testsuite/gdc.dg/simd19629.d
  79e921aaf034c657a1cba5c0e0f99503  gcc/testsuite/gdc.dg/simd19630.d
! d9af962457cc347185a26f435d66e8f3  gcc/testsuite/gdc.dg/simd2a.d
! ec9183d920fc80bf84a90ac7d1bf49d9  gcc/testsuite/gdc.dg/simd2b.d
! 4ea83792041a561a7018bf7573aded49  gcc/testsuite/gdc.dg/simd2c.d
! b60e904c823429ae3ea86b4b9d31b307  gcc/testsuite/gdc.dg/simd2d.d
! 62b82eecb7e6e04806421d55ba286467  gcc/testsuite/gdc.dg/simd2e.d
! 99f5383f5aff3bdb8da709efa864fab8  gcc/testsuite/gdc.dg/simd2f.d
! 7b7594541d1d0c5fe694d6baa9fe79c9  gcc/testsuite/gdc.dg/simd2g.d
! fdd690a879a94f9a120c3d50b357807c  gcc/testsuite/gdc.dg/simd2h.d
! 01cc22b6b6bb5d6c3cc7e21c6449d81e  gcc/testsuite/gdc.dg/simd2i.d
! 4029c02331c764334d52a4d047275fe8  gcc/testsuite/gdc.dg/simd2j.d
! ae514e1e0dc35f480c8a12eb626e8e37  gcc/testsuite/gdc.dg/simd7951.d
! 806a5507b26a84986cef5feefc32276a  gcc/testsuite/gdc.dg/simd_ctfe.d
! e6da23dd8d6593b3e693bba3c6655d0e  gcc/testsuite/gdc.dg/special1.d
  a7c34dd8ee918654448f7d7b879eb96f  gcc/testsuite/gdc.dg/torture/array2.d
  38be24cf4164de4216f6f5628482be07  gcc/testsuite/gdc.dg/torture/array3.d
  f7b8cedb229b6216459b475252b2ad1e  gcc/testsuite/gdc.dg/torture/gdc115.d
*************** d2482934bc7c18e65266a5fd7e510b61  gcc/te
*** 70394,70400 ****
  a2be848a00bb76684ea59452f9869144  gcc/testsuite/gdc.dg/torture/gdc283.d
  77c9cdd5c466c7942d3553c9b2208aa2  gcc/testsuite/gdc.dg/torture/gdc285.d
  731f201c9dbd8222ec3c199c501ae005  gcc/testsuite/gdc.dg/torture/gdc286.d
! 9c34cba66d97233815d9dd292d390872  gcc/testsuite/gdc.dg/torture/gdc309.d
  44c43257fe015450ebd838d1099f7163  gcc/testsuite/gdc.dg/torture/gdc35.d
  fda0cf305776db386c768d3546d5e0b9  gcc/testsuite/gdc.dg/torture/gdc36.d
  98cb77415ed1ae4bb8041c46a3ddfe77  gcc/testsuite/gdc.dg/torture/gdc51.d
--- 74320,74326 ----
  a2be848a00bb76684ea59452f9869144  gcc/testsuite/gdc.dg/torture/gdc283.d
  77c9cdd5c466c7942d3553c9b2208aa2  gcc/testsuite/gdc.dg/torture/gdc285.d
  731f201c9dbd8222ec3c199c501ae005  gcc/testsuite/gdc.dg/torture/gdc286.d
! 1714ec87ce9b7c921a553114ea21dbdc  gcc/testsuite/gdc.dg/torture/gdc309.d
  44c43257fe015450ebd838d1099f7163  gcc/testsuite/gdc.dg/torture/gdc35.d
  fda0cf305776db386c768d3546d5e0b9  gcc/testsuite/gdc.dg/torture/gdc36.d
  98cb77415ed1ae4bb8041c46a3ddfe77  gcc/testsuite/gdc.dg/torture/gdc51.d
*************** d3cb0d42e94f3b4127de8609610ded70  gcc/te
*** 70406,70561 ****
  cede80748e43884ad3613a2a7e4b6ff3  gcc/testsuite/gdc.dg/torture/pr101273.d
  a24df8e498053d7ab8325fc58ede1835  gcc/testsuite/gdc.dg/torture/pr101282.d
  580aadb24b666799e25f1f02ef3b7bbb  gcc/testsuite/gdc.dg/torture/pr92309.d
! 1b111ae77202133585fd76e6867c2615  gcc/testsuite/gdc.dg/torture/pr94424.d
! 658ecf9f1faf93eb8bdf8896b94d1b62  gcc/testsuite/gdc.dg/torture/pr94777b.d
  7a8bc04b14715c7ab9945a69447ed050  gcc/testsuite/gdc.dg/torture/pr96152.d
  4bb3a08c1392ffe1ab686818ad5ec86c  gcc/testsuite/gdc.dg/torture/pr96153.d
  bb606d2e0103a4417ebc0bbc3d8cfd49  gcc/testsuite/gdc.dg/torture/pr96156.d
  4133528b9c8c3396b240273ea9ecf550  gcc/testsuite/gdc.dg/torture/pr96157a.d
! 91aeadb49207b8ef8bedd4c016c1b443  gcc/testsuite/gdc.dg/torture/pr96435.d
  cc28afe3396e956160b04c6ab8871499  gcc/testsuite/gdc.dg/torture/pr97843.d
  69b6b7adcb2ad72055a4fca88afe3f41  gcc/testsuite/gdc.dg/torture/pr97889.d
  b82b2d96f26d876bca525fdf413dab79  gcc/testsuite/gdc.dg/torture/simd16488a.d
  50a9ddea05e690a12d8ee20b15d2e8f0  gcc/testsuite/gdc.dg/torture/simd16488b.d
  6f3e818cf845c58c59b1d51c2d61553a  gcc/testsuite/gdc.dg/torture/simd16703.d
  7f1ca4d8fd576ca1b1e6b65fa3493fdc  gcc/testsuite/gdc.dg/torture/simd19223.d
  422cd16a34555382631f0db8b649ea53  gcc/testsuite/gdc.dg/torture/simd19607.d
  b927eb63d97cd85ed9a074da8ccff420  gcc/testsuite/gdc.dg/torture/simd3.d
  4988c4cb18b3c8c4ddca61b36792d24e  gcc/testsuite/gdc.dg/torture/simd4.d
  c8fea1c3e1d9839dc5db775a30ef5b81  gcc/testsuite/gdc.dg/torture/simd7411.d
! f686e7f9bd51b6a4664cf108ab3db20b  gcc/testsuite/gdc.dg/torture/simd7413a.d
  550f3d6bc1c80bf8083e9594f6d0a23f  gcc/testsuite/gdc.dg/torture/simd7413b.d
  be211d00217b412a281626e091521ca8  gcc/testsuite/gdc.dg/torture/simd7414.d
  7bf8e380f88dbe38fd93751e7ff880f9  gcc/testsuite/gdc.dg/torture/simd9200.d
  db32bdd5bf5efb008a8d0769d3d86934  gcc/testsuite/gdc.dg/torture/simd9304.d
  c8641c4ecb508bce56fb288cf0e0f8e3  gcc/testsuite/gdc.dg/torture/simd9449.d
  f74a24d5b20a5e26cd6f9d895a213ec6  gcc/testsuite/gdc.dg/torture/simd9910.d
! 4a51e6554d37213263e08170594ef9d0  gcc/testsuite/gdc.dg/torture/torture.exp
! 967f582cf2771c2254957b0968fef157  gcc/testsuite/gdc.dg/ubsan/pr88957.d
! 23e164f0b6f05198e3bc517f109acb2e  gcc/testsuite/gdc.dg/ubsan/ubsan.exp
  310f79be9999b0b9e22f7cfbfe79f71d  gcc/testsuite/gdc.test/README.gcc
! 8c07514651f5c119efe0d73a5be7eac6  gcc/testsuite/gdc.test/compilable/99bottles.d
! 8723ae9962864a6f3d51a5aafb1d23cd  gcc/testsuite/gdc.test/compilable/Test16206.d
! 7e650360bd1bc425bba2aa151bb9ee13  gcc/testsuite/gdc.test/compilable/a3682.d
  fe92e980839f07bf95701e96735f857b  gcc/testsuite/gdc.test/compilable/aggr_alignment.d
! beddbf81ccc1e52ee7fa201b22781d91  gcc/testsuite/gdc.test/compilable/aliasdecl.d
  c830eb21b0dd96c9b8d314d8bbdf13b3  gcc/testsuite/gdc.test/compilable/alignment.d
! 013ddc04571e4401d097e303967ae442  gcc/testsuite/gdc.test/compilable/art4769.d
  42ddfcff51dacb470df4e5adfdbfd451  gcc/testsuite/gdc.test/compilable/b11118.d
  abab396c9a34d7ffac07eefc356bf0dd  gcc/testsuite/gdc.test/compilable/b12001.d
! 6e0cce2f806731d29ff7a71b12270995  gcc/testsuite/gdc.test/compilable/b1215.d
  c6f64fcc66716ad719d6a22796d0fbec  gcc/testsuite/gdc.test/compilable/b15428.d
  506432c79f059a09154bcc8193d57812  gcc/testsuite/gdc.test/compilable/b16244.d
  167ffcae45e7ea8e9abfd504753d7c72  gcc/testsuite/gdc.test/compilable/b16346.d
  c5c7e97bc1737359df54f060aaec7469  gcc/testsuite/gdc.test/compilable/b16355.d
  020127a91629a559be2c4425c776ffb5  gcc/testsuite/gdc.test/compilable/b16382.d
  37abce4177ae3408ada0f4f86ea35a7b  gcc/testsuite/gdc.test/compilable/b16483.d
  503fa1bd80a250813e17e46cda25c2fa  gcc/testsuite/gdc.test/compilable/b16598.d
! ef649aba680526d48bc3e69760b621f2  gcc/testsuite/gdc.test/compilable/b16697.d
! 1a88a6c51e44c3714508bdee2b346151  gcc/testsuite/gdc.test/compilable/b16967.d
  8982f69fd14c58a5dba7832efe5675f8  gcc/testsuite/gdc.test/compilable/b16976.d
! 7fd8995951aacc68c9ef6500f3bb1b17  gcc/testsuite/gdc.test/compilable/b17111.d
  985cbf872a2f9249c9e9c78338b0f501  gcc/testsuite/gdc.test/compilable/b19002.d
! 1def44638ab23277ee8a3cbef121f28b  gcc/testsuite/gdc.test/compilable/b33.d
! 286e654567f89de0a3605032db35f623  gcc/testsuite/gdc.test/compilable/b6227.d
! 6a76da8b7b49ec37b8f02315a9b5bdd9  gcc/testsuite/gdc.test/compilable/b6395.d
! 91312b385ab5eae660ff874edde30f1b  gcc/testsuite/gdc.test/compilable/b6400.d
! 225f324f4744b9f862b07708e1d60547  gcc/testsuite/gdc.test/compilable/b9490.d
! 05bd563df07dd7a5cae7c595d94d80de  gcc/testsuite/gdc.test/compilable/betterCarray.d
! 7021d1651fabe6e446f09a6e5c53962f  gcc/testsuite/gdc.test/compilable/betterCswitch.d
  0aa7e577ae4c165086acff2ed3c6759e  gcc/testsuite/gdc.test/compilable/bug11735.d
  aa026edeb0f2cbe8ba150f88aafdb855  gcc/testsuite/gdc.test/compilable/bug20796.d
  fbecccee350c9b5a8815a306c8c7a540  gcc/testsuite/gdc.test/compilable/bug6963.d
! ae9f44e54c2ec8d1f511343f28d52647  gcc/testsuite/gdc.test/compilable/callconv.d
  2195ce4127b8a9f492fa85a2796e69c1  gcc/testsuite/gdc.test/compilable/checkimports3.d
! 8cf14ce2b496d3188a711dcc53a12450  gcc/testsuite/gdc.test/compilable/compilable.exp
! 4fb3cc7a0f5fce0e8d63c50b07f9178d  gcc/testsuite/gdc.test/compilable/compile1.d
! 813d2d5a881b444cee90d1463d11f554  gcc/testsuite/gdc.test/compilable/const.d
! fdbc2afab5ee336e9d31b33a0f4e3608  gcc/testsuite/gdc.test/compilable/cppmangle.d
! b4fb7056eae9b23a25601088340fd2bd  gcc/testsuite/gdc.test/compilable/cppmangle3.d
! 59da721200ffd17dacb51282c83bd23e  gcc/testsuite/gdc.test/compilable/ctfe_math.d
! 53015988ae5d173decdfd3292b66ade4  gcc/testsuite/gdc.test/compilable/ddoc1.d
! 10f5945b26e6a09607fb92dfc79e14b5  gcc/testsuite/gdc.test/compilable/ddoc10.d
! eb16d2ec7f64a30da431705bc6ee3d5d  gcc/testsuite/gdc.test/compilable/ddoc10236.d
! 3e0838d6f1198d929e423dad8ec74e9d  gcc/testsuite/gdc.test/compilable/ddoc10236b.d
! 160e74013fc96c3754dc4583ebebe9b8  gcc/testsuite/gdc.test/compilable/ddoc10325.d
! 16c421d85171b11a938910ddbad5e1b3  gcc/testsuite/gdc.test/compilable/ddoc10334.d
! c200f0125f3ace766dd642181f710baa  gcc/testsuite/gdc.test/compilable/ddoc10366.d
! a0b5e593df28bd1901905e2bc040dd8d  gcc/testsuite/gdc.test/compilable/ddoc10367.d
! 53a5d8aafb38290a807c372bb9fba403  gcc/testsuite/gdc.test/compilable/ddoc10869.d
! 04bf8e2676dc2d0c7cb879a188a0a15b  gcc/testsuite/gdc.test/compilable/ddoc10870.d
! e6f5caf7d151f83b4ca652b0bd370020  gcc/testsuite/gdc.test/compilable/ddoc11.d
! d19d5a7ce15d2566e7f8eb8889912835  gcc/testsuite/gdc.test/compilable/ddoc11479.d
! 38fc33bf4ad971022417dc261167608d  gcc/testsuite/gdc.test/compilable/ddoc11511.d
! 3e357a106c8740251b5c0a88ffb6555f  gcc/testsuite/gdc.test/compilable/ddoc11823.d
! bd0083158ec004cf925824a205a7a9bf  gcc/testsuite/gdc.test/compilable/ddoc12.d
! 5f87a9955bf43ebd1375e1dab8878e3e  gcc/testsuite/gdc.test/compilable/ddoc12706.d
! 72b2dc2a6173da176829bd682aadb910  gcc/testsuite/gdc.test/compilable/ddoc12745.d
! ac4a15bd8e36da946f5f28762c5683b2  gcc/testsuite/gdc.test/compilable/ddoc13.d
! 611895e8319c72691564fc9333a01389  gcc/testsuite/gdc.test/compilable/ddoc13270.d
  02983a7d8af1b29e150941073dfeba52  gcc/testsuite/gdc.test/compilable/ddoc13502.d
! 09b35be71810790307292cd2d9ff5adb  gcc/testsuite/gdc.test/compilable/ddoc13645.d
! 0ae82fb5c54f54c8c929ab03004c2d87  gcc/testsuite/gdc.test/compilable/ddoc14.d
! f673b2ed92770c7955e3a69e0403e64d  gcc/testsuite/gdc.test/compilable/ddoc14383.d
! 83637dc275cb6d8e99c6b679774175e8  gcc/testsuite/gdc.test/compilable/ddoc14413.d
  e88aa75d851c720fec73c7ea7065b8a0  gcc/testsuite/gdc.test/compilable/ddoc14633.d
! a1e78487df9856b603e9e1e681c10c14  gcc/testsuite/gdc.test/compilable/ddoc14778.d
! 16ac8b0d9cf4df797c614cb8bbcf0a5f  gcc/testsuite/gdc.test/compilable/ddoc15475.d
! f66e05a54edd41e9fefdc37306958153  gcc/testsuite/gdc.test/compilable/ddoc17697.d
! f3f48f05a46b507bc082e5a4fe60dc90  gcc/testsuite/gdc.test/compilable/ddoc198.d
! 59a8fd1326a8f5d9bd4127e44656b19e  gcc/testsuite/gdc.test/compilable/ddoc2.d
! aae6ca78e938169cec2fee92c08ae3ef  gcc/testsuite/gdc.test/compilable/ddoc2273.d
! b4a15ebf3277872309966dddbf8e72ce  gcc/testsuite/gdc.test/compilable/ddoc3.d
! 8bd804a208c7b528dfe762092682e7d9  gcc/testsuite/gdc.test/compilable/ddoc4.d
! ddf7e3311a514195e0386016b7bf4d65  gcc/testsuite/gdc.test/compilable/ddoc4162.d
  d74ed8ce2acdd0978f0bf5c924d667f9  gcc/testsuite/gdc.test/compilable/ddoc4899.d
! a5645a85ad114e299d5c8801956c731a  gcc/testsuite/gdc.test/compilable/ddoc5.d
! b77b4f1c94047fb4ad678b8bd5b6a6cb  gcc/testsuite/gdc.test/compilable/ddoc5446.d
  b2fd39ab2f11010247824c55463852ac  gcc/testsuite/gdc.test/compilable/ddoc5446a.d
  1b40f20bffe68e4bff81197aff890255  gcc/testsuite/gdc.test/compilable/ddoc5446b.d
! cfd5191cde0f99ce3f72f8a4892cef15  gcc/testsuite/gdc.test/compilable/ddoc6.d
! c208e102ce5581db95bd46db8f9e04c9  gcc/testsuite/gdc.test/compilable/ddoc648.d
! f437303e113d514914ed47e4327b628c  gcc/testsuite/gdc.test/compilable/ddoc6491.d
! 25f7986e29bbc962ccffc11d9c4959f5  gcc/testsuite/gdc.test/compilable/ddoc7.d
! 8316ca2291ffab8ad8e3ba8a6528c334  gcc/testsuite/gdc.test/compilable/ddoc7555.d
! fd66c00cbb9446f1cd1f60c71d3ab198  gcc/testsuite/gdc.test/compilable/ddoc7656.d
! d678e1d0610383a0ee6cf828ab0a5a59  gcc/testsuite/gdc.test/compilable/ddoc7715.d
! f436d45ec22fb89b1be21095220e0f87  gcc/testsuite/gdc.test/compilable/ddoc7795.d
! a07d82277ae36eeb05237ec0f38dcef6  gcc/testsuite/gdc.test/compilable/ddoc8.d
! 660d88846b145a1b2fcd2ae3bb0dbfdc  gcc/testsuite/gdc.test/compilable/ddoc8271.d
! 68ba0a559386ae68da2e7e0b2bf14af7  gcc/testsuite/gdc.test/compilable/ddoc8739.d
! e7b9f242146b229e881d8b56a7dcd5cb  gcc/testsuite/gdc.test/compilable/ddoc9.d
! 36e46a4e69a3bce62ce3f59113df4c17  gcc/testsuite/gdc.test/compilable/ddoc9037.d
! aaa92e6e26d95132c958a46df58f9b36  gcc/testsuite/gdc.test/compilable/ddoc9155.d
! 872bfc1d615e8e5623a94013e76d01ab  gcc/testsuite/gdc.test/compilable/ddoc9305.d
! 3683f84f6017ece7ced68120d46068da  gcc/testsuite/gdc.test/compilable/ddoc9369.d
! bc3dccd0d35e02c78d2ecfcd54ec6b47  gcc/testsuite/gdc.test/compilable/ddoc9475.d
! 1a6628f45d23c92cf4aa4c27d22d696f  gcc/testsuite/gdc.test/compilable/ddoc9497a.d
! e4ac8563e9f0069b8651228ce2f94ac5  gcc/testsuite/gdc.test/compilable/ddoc9497b.d
! d3886df0c0645f11b24c9ea9aabc72a5  gcc/testsuite/gdc.test/compilable/ddoc9497c.d
! f181a450091481e1fe05a0706c98625e  gcc/testsuite/gdc.test/compilable/ddoc9497d.d
! 780bfdd71aca953558d5d845c942f1a5  gcc/testsuite/gdc.test/compilable/ddoc9676a.d
! 04f6a697c304af33aa1932775d20b0e9  gcc/testsuite/gdc.test/compilable/ddoc9676b.d
! ff8b72c8d32ff11a411560e45a94cab9  gcc/testsuite/gdc.test/compilable/ddoc9727.d
! 2f9848d570fc05e8953c03590200ac6a  gcc/testsuite/gdc.test/compilable/ddoc9789.d
! 8e423b32665ea4c4ee7b0dfff595c8e9  gcc/testsuite/gdc.test/compilable/ddoc9903.d
  7e94f06d537f408b81e58b54144950de  gcc/testsuite/gdc.test/compilable/ddocYear.d
! c5e52e4977be612aaa8c4900bb96cf73  gcc/testsuite/gdc.test/compilable/ddocbackticks.d
! efc629d0220fa17ff84b93e7f7ce4a04  gcc/testsuite/gdc.test/compilable/ddocunittest.d
  5fb42fddd5e4bf43c346eb684e1ddbb2  gcc/testsuite/gdc.test/compilable/debuginfo.d
! 053c9f478e1b796f12437eebeb76cb91  gcc/testsuite/gdc.test/compilable/defa.d
! 7beb4327856215274c9be527ad4b3e2a  gcc/testsuite/gdc.test/compilable/depmsg.d
  91d811dc652f420e22d87ecf1e4d5b9c  gcc/testsuite/gdc.test/compilable/deprecate14283.d
! b491d6ab8f8a3813bd93fed6f411a9cd  gcc/testsuite/gdc.test/compilable/depsOutput9948.d
  0ba83ee3d8f2bf7360485b7ca6d1aa12  gcc/testsuite/gdc.test/compilable/derivedarray.d
  ece3fcebff1c5a8167a5e21587d73d44  gcc/testsuite/gdc.test/compilable/diag11066.d
  4824c4195a3262539f96a518fba8461b  gcc/testsuite/gdc.test/compilable/diag12598.d
  3d6162e3c3db730ccaa118a759d35fa7  gcc/testsuite/gdc.test/compilable/diag3243.d
! 70d03ceec7b16f53c1a91d0e914b8b56  gcc/testsuite/gdc.test/compilable/dip22.d
! 474e3ffb24e0f5f7fd61155a113a710f  gcc/testsuite/gdc.test/compilable/dip22d.d
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/compilable/empty_file.d
  7f97d3263822f7811155ec0ef0ba7d2b  gcc/testsuite/gdc.test/compilable/exception.d
! 7d8a38351d77894e87920968353b0859  gcc/testsuite/gdc.test/compilable/extra-files/c6395.d
  b439564acc50c00a17aa583a0eea6a79  gcc/testsuite/gdc.test/compilable/extra-files/ddoc10367.ddoc
  f8d48831eff10cb23399c59486930574  gcc/testsuite/gdc.test/compilable/extra-files/ddoc198.ddoc
  45935b1052e81b64aef64799b51ea3d9  gcc/testsuite/gdc.test/compilable/extra-files/ddoc3.ddoc
--- 74332,74574 ----
  cede80748e43884ad3613a2a7e4b6ff3  gcc/testsuite/gdc.dg/torture/pr101273.d
  a24df8e498053d7ab8325fc58ede1835  gcc/testsuite/gdc.dg/torture/pr101282.d
  580aadb24b666799e25f1f02ef3b7bbb  gcc/testsuite/gdc.dg/torture/pr92309.d
! d5626e21f8cdc22799175cb6adfddfd6  gcc/testsuite/gdc.dg/torture/pr94424.d
! ae5b279461655f243d767b80a6d0bc1b  gcc/testsuite/gdc.dg/torture/pr94777b.d
  7a8bc04b14715c7ab9945a69447ed050  gcc/testsuite/gdc.dg/torture/pr96152.d
  4bb3a08c1392ffe1ab686818ad5ec86c  gcc/testsuite/gdc.dg/torture/pr96153.d
  bb606d2e0103a4417ebc0bbc3d8cfd49  gcc/testsuite/gdc.dg/torture/pr96156.d
  4133528b9c8c3396b240273ea9ecf550  gcc/testsuite/gdc.dg/torture/pr96157a.d
! a08989e369aebbee239bdbe61057d59e  gcc/testsuite/gdc.dg/torture/pr96435.d
  cc28afe3396e956160b04c6ab8871499  gcc/testsuite/gdc.dg/torture/pr97843.d
  69b6b7adcb2ad72055a4fca88afe3f41  gcc/testsuite/gdc.dg/torture/pr97889.d
  b82b2d96f26d876bca525fdf413dab79  gcc/testsuite/gdc.dg/torture/simd16488a.d
  50a9ddea05e690a12d8ee20b15d2e8f0  gcc/testsuite/gdc.dg/torture/simd16488b.d
  6f3e818cf845c58c59b1d51c2d61553a  gcc/testsuite/gdc.dg/torture/simd16703.d
+ 44e1187137f18767ca90fd436d5296d7  gcc/testsuite/gdc.dg/torture/simd17344.d
  7f1ca4d8fd576ca1b1e6b65fa3493fdc  gcc/testsuite/gdc.dg/torture/simd19223.d
  422cd16a34555382631f0db8b649ea53  gcc/testsuite/gdc.dg/torture/simd19607.d
+ 728ce04e32b5660cb36d183de72feb42  gcc/testsuite/gdc.dg/torture/simd20052.d
+ 681abd01df82493116a34bbdf36b32ea  gcc/testsuite/gdc.dg/torture/simd21727.d
  b927eb63d97cd85ed9a074da8ccff420  gcc/testsuite/gdc.dg/torture/simd3.d
  4988c4cb18b3c8c4ddca61b36792d24e  gcc/testsuite/gdc.dg/torture/simd4.d
+ 20f83bf87a01f535221b6a83983a5d6f  gcc/testsuite/gdc.dg/torture/simd6.d
+ 350d75d9768006f12bf6594accea46c0  gcc/testsuite/gdc.dg/torture/simd7.d
  c8fea1c3e1d9839dc5db775a30ef5b81  gcc/testsuite/gdc.dg/torture/simd7411.d
! 8f743e86b5b9e6719013a739438430fd  gcc/testsuite/gdc.dg/torture/simd7413a.d
  550f3d6bc1c80bf8083e9594f6d0a23f  gcc/testsuite/gdc.dg/torture/simd7413b.d
  be211d00217b412a281626e091521ca8  gcc/testsuite/gdc.dg/torture/simd7414.d
  7bf8e380f88dbe38fd93751e7ff880f9  gcc/testsuite/gdc.dg/torture/simd9200.d
  db32bdd5bf5efb008a8d0769d3d86934  gcc/testsuite/gdc.dg/torture/simd9304.d
  c8641c4ecb508bce56fb288cf0e0f8e3  gcc/testsuite/gdc.dg/torture/simd9449.d
  f74a24d5b20a5e26cd6f9d895a213ec6  gcc/testsuite/gdc.dg/torture/simd9910.d
! 41e48670142b207c9edb675f4b4ed41f  gcc/testsuite/gdc.dg/torture/torture.exp
! c7ab3cec87c4498faece019276ff666c  gcc/testsuite/gdc.dg/ubsan/pr88957.d
! 64ab537cbf0eb45bc01fbad307ba613c  gcc/testsuite/gdc.dg/ubsan/ubsan.exp
  310f79be9999b0b9e22f7cfbfe79f71d  gcc/testsuite/gdc.test/README.gcc
! 39d4bcd12f778b37cbfbe3b82aa1da94  gcc/testsuite/gdc.test/compilable/99bottles.d
! 93a145e4de3beb6c8a655fcdc4d097ee  gcc/testsuite/gdc.test/compilable/Test16206.d
! d0da0bd439ac994effa1536916a8cb97  gcc/testsuite/gdc.test/compilable/a3682.d
  fe92e980839f07bf95701e96735f857b  gcc/testsuite/gdc.test/compilable/aggr_alignment.d
! 19b56d2887fbdc4bf4acf986ff96de65  gcc/testsuite/gdc.test/compilable/aliasassign.d
! e94dbc21b72d0458fe61f1f27467da09  gcc/testsuite/gdc.test/compilable/aliasdecl.d
  c830eb21b0dd96c9b8d314d8bbdf13b3  gcc/testsuite/gdc.test/compilable/alignment.d
! 07983dc221a81489d42ae7308d4bb3b1  gcc/testsuite/gdc.test/compilable/art4769.d
  42ddfcff51dacb470df4e5adfdbfd451  gcc/testsuite/gdc.test/compilable/b11118.d
  abab396c9a34d7ffac07eefc356bf0dd  gcc/testsuite/gdc.test/compilable/b12001.d
! 306b045142ce891e1de322f68319170a  gcc/testsuite/gdc.test/compilable/b1215.d
! ab71c99c2e31e96bdb735e5c870e7ed3  gcc/testsuite/gdc.test/compilable/b12504.d
! 24947d925dcac5d1e172b8d8425fee4e  gcc/testsuite/gdc.test/compilable/b15206.d
  c6f64fcc66716ad719d6a22796d0fbec  gcc/testsuite/gdc.test/compilable/b15428.d
  506432c79f059a09154bcc8193d57812  gcc/testsuite/gdc.test/compilable/b16244.d
  167ffcae45e7ea8e9abfd504753d7c72  gcc/testsuite/gdc.test/compilable/b16346.d
  c5c7e97bc1737359df54f060aaec7469  gcc/testsuite/gdc.test/compilable/b16355.d
+ e36aed02d75a8dbd4d6223aa24f4b55c  gcc/testsuite/gdc.test/compilable/b16360.d
  020127a91629a559be2c4425c776ffb5  gcc/testsuite/gdc.test/compilable/b16382.d
  37abce4177ae3408ada0f4f86ea35a7b  gcc/testsuite/gdc.test/compilable/b16483.d
  503fa1bd80a250813e17e46cda25c2fa  gcc/testsuite/gdc.test/compilable/b16598.d
! cb34f88e2d54dcbd9dee1e5b8dc5cc19  gcc/testsuite/gdc.test/compilable/b16697.d
  8982f69fd14c58a5dba7832efe5675f8  gcc/testsuite/gdc.test/compilable/b16976.d
! 43982378a0cd130db0fb9fa325c9e389  gcc/testsuite/gdc.test/compilable/b17111.d
! 4e5226e13d233c83482f3a1c2b3c3511  gcc/testsuite/gdc.test/compilable/b17651.d
! f8c4f4c155900ffad759b3e9eac0e7cb  gcc/testsuite/gdc.test/compilable/b18197.d
! 6631d7340757fc80a204f4fa9b8cf8d5  gcc/testsuite/gdc.test/compilable/b18242.d
  985cbf872a2f9249c9e9c78338b0f501  gcc/testsuite/gdc.test/compilable/b19002.d
! 64b55e148ca1fedc377a4d2f62206e24  gcc/testsuite/gdc.test/compilable/b19294.d
! cfe2c11af9d436d0e5614fb622d36cb9  gcc/testsuite/gdc.test/compilable/b19432.d
! 4328ec47f6cf3dcca3753f324a00034c  gcc/testsuite/gdc.test/compilable/b19442.d
! e57de5f0f531f18dbe2f59020f729328  gcc/testsuite/gdc.test/compilable/b19775.d
! 8e18d0076c84dedbc0dd2e4556015ede  gcc/testsuite/gdc.test/compilable/b19829.d
! b3ad87aeda84eecb8d251cc9087366b9  gcc/testsuite/gdc.test/compilable/b20045.d
! 0c69c8d4d7cf11ad0008d953889ec2d9  gcc/testsuite/gdc.test/compilable/b20067.d
! 4bd39bd146dca181336a78886d20fda2  gcc/testsuite/gdc.test/compilable/b20758.d
! 75ad796573cbc828f8ed133dd322a6c7  gcc/testsuite/gdc.test/compilable/b20780.d
! aa31ae3115526255bd9b4fcc578a6909  gcc/testsuite/gdc.test/compilable/b20833.d
! f6cf3a07bcc035e041f5145a73b0acab  gcc/testsuite/gdc.test/compilable/b20885.d
! 6f806c291d4b0243cc9a3506f96d901f  gcc/testsuite/gdc.test/compilable/b20938.d
! 37f3586142dde8e3fee6cab474108bd5  gcc/testsuite/gdc.test/compilable/b21285.d
! dd6b060571b0749203963259463139ec  gcc/testsuite/gdc.test/compilable/b33.d
! a2225822551ba3ef0ca3817276a127c1  gcc/testsuite/gdc.test/compilable/b6227.d
! d7585558f60cab3c210a6f2bbbce4357  gcc/testsuite/gdc.test/compilable/b6395.d
! 8f1895576e4416be4860966127937c07  gcc/testsuite/gdc.test/compilable/b9490.d
! 36afb7a75512b93d43fc38edc0b85737  gcc/testsuite/gdc.test/compilable/betterCarray.d
! a6ce767361085ca65b496c504352bf7e  gcc/testsuite/gdc.test/compilable/betterCswitch.d
! 5738365e9393e0fbc9eefb8406d07fcf  gcc/testsuite/gdc.test/compilable/betterc.d
  0aa7e577ae4c165086acff2ed3c6759e  gcc/testsuite/gdc.test/compilable/bug11735.d
  aa026edeb0f2cbe8ba150f88aafdb855  gcc/testsuite/gdc.test/compilable/bug20796.d
+ 998eb9a50baed94a9e606d7d8e5f1735  gcc/testsuite/gdc.test/compilable/bug21196.d
  fbecccee350c9b5a8815a306c8c7a540  gcc/testsuite/gdc.test/compilable/bug6963.d
! 3363c5d962731388ddd2be858af1f9cc  gcc/testsuite/gdc.test/compilable/callconv.d
! 0e36f750b64889cd6faa25256c48ebe8  gcc/testsuite/gdc.test/compilable/casttuple.d
! 912439c2b6495e16ada18e8d781325f0  gcc/testsuite/gdc.test/compilable/ccompile.d
! 62abc6e3ed34bf34772d48be91cd85ca  gcc/testsuite/gdc.test/compilable/cdcmp.d
  2195ce4127b8a9f492fa85a2796e69c1  gcc/testsuite/gdc.test/compilable/checkimports3.d
! 2dc395b33298bfa04c55987e2421b833  gcc/testsuite/gdc.test/compilable/chkformat.d
! 3c7d6ba4d9dcc1c4028f235cede53e71  gcc/testsuite/gdc.test/compilable/commontype.d
! a8eaa9dfba647b99f70e04773203a5e4  gcc/testsuite/gdc.test/compilable/compilable.exp
! 5ed31c5c58089ef75275777198d91a32  gcc/testsuite/gdc.test/compilable/compile1.d
! f99c18d556cf5938ebbb7d3b40c97dd7  gcc/testsuite/gdc.test/compilable/const.d
! cb099446f4c201cc98f8b7b70599433f  gcc/testsuite/gdc.test/compilable/covariant_override.d
! 147666b156671e03a85243ba4426d716  gcc/testsuite/gdc.test/compilable/cpp_abi_tag_unused.d
! 521dc786fe75292c6bb1459bb582c00f  gcc/testsuite/gdc.test/compilable/cppmangle.d
! b69be4810e3ae0bc0ca5518561733f11  gcc/testsuite/gdc.test/compilable/cppmangle2.d
! cef0dfcb3e38b8dfc3f52c1df4c72f42  gcc/testsuite/gdc.test/compilable/cppmangle3.d
! dcb6459009e7567342912938e6f5aabf  gcc/testsuite/gdc.test/compilable/cppmangle_abitag.d
! f14da5eed6d94462ca44fdb445eeae9f  gcc/testsuite/gdc.test/compilable/ctfe_math.d
! 857dd7cb6020badfa814837f2ed143e0  gcc/testsuite/gdc.test/compilable/ddoc1.d
! a9609bf56f52db363bdf76f9156a2456  gcc/testsuite/gdc.test/compilable/ddoc10.d
! 74990bf8bc55d39b1555ac59d55801bf  gcc/testsuite/gdc.test/compilable/ddoc10236.d
! df5f6cd7190907835202a2186683816e  gcc/testsuite/gdc.test/compilable/ddoc10236b.d
! 2e7b558e33f3d5cff94dd2108c00fa77  gcc/testsuite/gdc.test/compilable/ddoc10325.d
! a50ce357df054c12c6f942c6af8d9ff7  gcc/testsuite/gdc.test/compilable/ddoc10334.d
! fe07035a44e422e0afd6f518d835fdb5  gcc/testsuite/gdc.test/compilable/ddoc10366.d
! 3148699713fd171aeae51631ac6fcfac  gcc/testsuite/gdc.test/compilable/ddoc10367.d
! 9c68a0782bb2036fd7de6d9cd55e4bec  gcc/testsuite/gdc.test/compilable/ddoc10869.d
! 3d033cfaa8ab357728e625a24e237fcf  gcc/testsuite/gdc.test/compilable/ddoc10870.d
! ff0234cdc2b702188c8e7cbb0a918dee  gcc/testsuite/gdc.test/compilable/ddoc11.d
! 2e5534001a63872d1e43fd07b839a33d  gcc/testsuite/gdc.test/compilable/ddoc11479.d
! d6194ace0943acfde033b35b6c62b7d8  gcc/testsuite/gdc.test/compilable/ddoc11511.d
! 05e290a08d605e03d6378946f108c05a  gcc/testsuite/gdc.test/compilable/ddoc11823.d
! 0adff778024e4af5dce8b2a204beb120  gcc/testsuite/gdc.test/compilable/ddoc12.d
! 62381e0d58c40474e6c694aaf1eb1fe3  gcc/testsuite/gdc.test/compilable/ddoc12706.d
! 94c2acc5fc0f3b5d659728dfa5b3facc  gcc/testsuite/gdc.test/compilable/ddoc12745.d
! 96b97e70616af0ff79a07235d90228eb  gcc/testsuite/gdc.test/compilable/ddoc13.d
! 1539a25d497a116f5610ce6af798727e  gcc/testsuite/gdc.test/compilable/ddoc13270.d
  02983a7d8af1b29e150941073dfeba52  gcc/testsuite/gdc.test/compilable/ddoc13502.d
! 558d0b2f6ddb806b6e0144186b6ea5fb  gcc/testsuite/gdc.test/compilable/ddoc13645.d
! 14b29f750abc10c1bbf8e7fcaa0b6365  gcc/testsuite/gdc.test/compilable/ddoc14.d
! dc256f51e95e3a7e5a044c77d3152c56  gcc/testsuite/gdc.test/compilable/ddoc14383.d
! cef59849103cb8bb046bf2dd70fd30a8  gcc/testsuite/gdc.test/compilable/ddoc14413.d
  e88aa75d851c720fec73c7ea7065b8a0  gcc/testsuite/gdc.test/compilable/ddoc14633.d
! 7ef73b868d2d8789bca55818401dc55f  gcc/testsuite/gdc.test/compilable/ddoc14778.d
! 3f9de9c8c267429f080f187d5305d176  gcc/testsuite/gdc.test/compilable/ddoc15475.d
! df1fb7745929070aaca39d801ca1acf9  gcc/testsuite/gdc.test/compilable/ddoc17697.d
! 4b5d98f1cb9f2a900d73f46a6658ef23  gcc/testsuite/gdc.test/compilable/ddoc18361.d
! 9d61d72f5ede0819efedd06bdd7b6e82  gcc/testsuite/gdc.test/compilable/ddoc198.d
! 0f5068cc26181ba90a77dd752140dd40  gcc/testsuite/gdc.test/compilable/ddoc19814.d
! 71f7c5e6c1fdb75ca8ea7989a800038b  gcc/testsuite/gdc.test/compilable/ddoc2.d
! 9ebc86b1fec1f51ad58590953f0f190b  gcc/testsuite/gdc.test/compilable/ddoc2273.d
! 3f53126b5730baeab280edc60558726f  gcc/testsuite/gdc.test/compilable/ddoc3.d
! 9de7e1102d1842224315b0a46ad28527  gcc/testsuite/gdc.test/compilable/ddoc4.d
! 0d402660d10b60ed7b5449f0db4e7b3c  gcc/testsuite/gdc.test/compilable/ddoc4162.d
  d74ed8ce2acdd0978f0bf5c924d667f9  gcc/testsuite/gdc.test/compilable/ddoc4899.d
! 65268cff98793958d2f68941412e493e  gcc/testsuite/gdc.test/compilable/ddoc5.d
! 4d4a10ba50e283c5bec1c9032b205816  gcc/testsuite/gdc.test/compilable/ddoc5446.d
  b2fd39ab2f11010247824c55463852ac  gcc/testsuite/gdc.test/compilable/ddoc5446a.d
  1b40f20bffe68e4bff81197aff890255  gcc/testsuite/gdc.test/compilable/ddoc5446b.d
! eac4ebf1c1021a0904f3a1fd38b5a82e  gcc/testsuite/gdc.test/compilable/ddoc6.d
! 3cc5a14fcbbb3e42877883e410dd12bd  gcc/testsuite/gdc.test/compilable/ddoc648.d
! 01d01a15a87d06e0862cc92c5db7a3d2  gcc/testsuite/gdc.test/compilable/ddoc6491.d
! c3bf3a6f0e05596fa2dab95000455a6a  gcc/testsuite/gdc.test/compilable/ddoc7.d
! 79490ec27e58c2c151173c9deb3ebc62  gcc/testsuite/gdc.test/compilable/ddoc7555.d
! 1029cbb05efde2dc48a73d30e3b5924e  gcc/testsuite/gdc.test/compilable/ddoc7656.d
! 0506ce86a30a88d8346bbef805ad0e83  gcc/testsuite/gdc.test/compilable/ddoc7715.d
! 0749c8f6a0b7a66a9dc2c440e9de4004  gcc/testsuite/gdc.test/compilable/ddoc7795.d
! c247222ca4edaba935393b877193a8fa  gcc/testsuite/gdc.test/compilable/ddoc8.d
! a5ab479043947418bb4cccfe65b9fdb6  gcc/testsuite/gdc.test/compilable/ddoc8271.d
! f80e0976785cbed66e4f34b97f1d25c0  gcc/testsuite/gdc.test/compilable/ddoc8739.d
! 2c6f5b41ae33c6be4d79adff5a4e52d0  gcc/testsuite/gdc.test/compilable/ddoc9.d
! 6f32334416cac9317a3acaa5a08fb90c  gcc/testsuite/gdc.test/compilable/ddoc9037.d
! f64ff454fe91b38d907fca0cafc19da5  gcc/testsuite/gdc.test/compilable/ddoc9155.d
! c6785f2eb3b3f22876ffcd5adb44f540  gcc/testsuite/gdc.test/compilable/ddoc9305.d
! 5c9c502acb249aa7758d1f0c76cced87  gcc/testsuite/gdc.test/compilable/ddoc9369.d
! 7310f710872f8c2584a3aa24e5af954a  gcc/testsuite/gdc.test/compilable/ddoc9475.d
! 18fd67a9fe48092ce6bf557211cdbf80  gcc/testsuite/gdc.test/compilable/ddoc9497a.d
! 70769419beeca66766af8669fbc9b641  gcc/testsuite/gdc.test/compilable/ddoc9497b.d
! 99b0898cf668b80570b15a8a0796240e  gcc/testsuite/gdc.test/compilable/ddoc9497c.d
! 5908d414deb0e36e5b91bfb316393087  gcc/testsuite/gdc.test/compilable/ddoc9497d.d
! 2fdfb7e503ee0ae8ca9eb29e7f60e8fc  gcc/testsuite/gdc.test/compilable/ddoc9676a.d
! 1b1e7b6cd8b5f42fb85642dfe0489a6d  gcc/testsuite/gdc.test/compilable/ddoc9676b.d
! 2c5e84795303186b7d810c427cea01b3  gcc/testsuite/gdc.test/compilable/ddoc9727.d
! e3a824c13d575010feaa8a04a40f8185  gcc/testsuite/gdc.test/compilable/ddoc9789.d
! 9d089db222c5dfdc412960134dbdd5d5  gcc/testsuite/gdc.test/compilable/ddoc9903.d
  7e94f06d537f408b81e58b54144950de  gcc/testsuite/gdc.test/compilable/ddocYear.d
! 95bc433ac69cd87aba7a438c4e0c89ab  gcc/testsuite/gdc.test/compilable/ddoc_markdown_breaks.d
! 5e7686dac42b4faeb0b449ccde6ac501  gcc/testsuite/gdc.test/compilable/ddoc_markdown_breaks_verbose.d
! 7cdb906708020dc86b5dae3c36d69bfa  gcc/testsuite/gdc.test/compilable/ddoc_markdown_code.d
! 24a80dc85e3f7caf7080f8703c458059  gcc/testsuite/gdc.test/compilable/ddoc_markdown_code_verbose.d
! d5212bf8222d1c6c407aaefc446ad536  gcc/testsuite/gdc.test/compilable/ddoc_markdown_emphasis.d
! e7929a3abb4880d4d1f37a9e82951d64  gcc/testsuite/gdc.test/compilable/ddoc_markdown_emphasis_verbose.d
! ffad3bda5e99a2d99f87457887608830  gcc/testsuite/gdc.test/compilable/ddoc_markdown_escapes.d
! 8de8edc58b124d5e8a5ce5e8196a3d27  gcc/testsuite/gdc.test/compilable/ddoc_markdown_headings.d
! c37ea65511d331ad9ac32c90374e47f8  gcc/testsuite/gdc.test/compilable/ddoc_markdown_headings_verbose.d
! 54d4f89fce0abfd0a6eefe4560406218  gcc/testsuite/gdc.test/compilable/ddoc_markdown_links.d
! 6abb48774d5b5e1308163b7b8134383a  gcc/testsuite/gdc.test/compilable/ddoc_markdown_links_verbose.d
! b6a29e9c9691d62dff07a7a7031675b8  gcc/testsuite/gdc.test/compilable/ddoc_markdown_lists.d
! d3adc706344f56f08798c71ff0f59191  gcc/testsuite/gdc.test/compilable/ddoc_markdown_lists_verbose.d
! 1533aeda9456a4a2e27bc7573191c0e6  gcc/testsuite/gdc.test/compilable/ddoc_markdown_quote.d
! f27b2d15c80f5b4a48323b1760364967  gcc/testsuite/gdc.test/compilable/ddoc_markdown_quote_verbose.d
! 126bab45d0e222c8f6e69a210f8969fd  gcc/testsuite/gdc.test/compilable/ddoc_markdown_tables.d
! 3b7772823323c7c2d72048b87e2e3e97  gcc/testsuite/gdc.test/compilable/ddoc_markdown_tables_22285.d
! a947db7dfa97ef8f22c053d5827f790a  gcc/testsuite/gdc.test/compilable/ddoc_markdown_tables_verbose.d
! 91a1d5e8954ba2200ecf5c1fa8a0b1b5  gcc/testsuite/gdc.test/compilable/ddocbackticks.d
! b4b3da555766eb0b4b5db38e61553d4f  gcc/testsuite/gdc.test/compilable/ddocunittest.d
! e84e0d42d3044dbde3d74652eb93e92d  gcc/testsuite/gdc.test/compilable/debugInference.d
  5fb42fddd5e4bf43c346eb684e1ddbb2  gcc/testsuite/gdc.test/compilable/debuginfo.d
! 377e08c5bfca6bccec8079835ce5172d  gcc/testsuite/gdc.test/compilable/defa.d
! ebb50ecdebe327b799c10cbf5e78a529  gcc/testsuite/gdc.test/compilable/depmsg.d
  91d811dc652f420e22d87ecf1e4d5b9c  gcc/testsuite/gdc.test/compilable/deprecate14283.d
! 5192bbef7fe5a182233e93c42b1af918  gcc/testsuite/gdc.test/compilable/deprecated_override.d
  0ba83ee3d8f2bf7360485b7ca6d1aa12  gcc/testsuite/gdc.test/compilable/derivedarray.d
  ece3fcebff1c5a8167a5e21587d73d44  gcc/testsuite/gdc.test/compilable/diag11066.d
  4824c4195a3262539f96a518fba8461b  gcc/testsuite/gdc.test/compilable/diag12598.d
  3d6162e3c3db730ccaa118a759d35fa7  gcc/testsuite/gdc.test/compilable/diag3243.d
! 08a6091d350abf130fa4da0f7a69b863  gcc/testsuite/gdc.test/compilable/dip22.d
! 5178e0b9eb9d63604be2885745879bea  gcc/testsuite/gdc.test/compilable/dip22d.d
! 27b5feb8c08101bf8d4b6f035f03db6f  gcc/testsuite/gdc.test/compilable/disable_new.d
! 19a835fa32d4bda3ea4981962af102e7  gcc/testsuite/gdc.test/compilable/dlangui_crash.d
! a4ed0235dc4676b602b839f683e6ac9e  gcc/testsuite/gdc.test/compilable/dtoh_21217.d
! bf6b53c214b542e7c76d905ec0097abc  gcc/testsuite/gdc.test/compilable/dtoh_AliasDeclaration.d
! 9d42fe9106b687b0445354ee4eecfa34  gcc/testsuite/gdc.test/compilable/dtoh_AliasDeclaration_98.d
! 2b4643ab14f560ef3979ae8dfd05dd3e  gcc/testsuite/gdc.test/compilable/dtoh_AnonDeclaration.d
! 963a0be62feb7267a21c738f757013a1  gcc/testsuite/gdc.test/compilable/dtoh_CPPNamespaceDeclaration.d
! fa4319ec6cd173338ac86893e7645e0f  gcc/testsuite/gdc.test/compilable/dtoh_ClassDeclaration.d
! 24c83be4f5996dfdbdf33fc940a9ad2a  gcc/testsuite/gdc.test/compilable/dtoh_StructDeclaration.d
! 3e7eb4e148a53168e10c5d0152bc35a4  gcc/testsuite/gdc.test/compilable/dtoh_TemplateDeclaration.d
! be05cdfdba1d3ded6ca4120b5da10229  gcc/testsuite/gdc.test/compilable/dtoh_UnionDeclaration.d
! a904811cb0834bf34be060b4c1f81d01  gcc/testsuite/gdc.test/compilable/dtoh_VarDeclaration.d
! 2aad8ffa861efc49f96e947c5bd60c4d  gcc/testsuite/gdc.test/compilable/dtoh_cpp98_compat.d
! cf97660b76aed19af01f9865598cce0a  gcc/testsuite/gdc.test/compilable/dtoh_enum.d
! 8c00ec7fa1821b041faca7acb653ad0b  gcc/testsuite/gdc.test/compilable/dtoh_enum_cpp98.d
! 9aba1e881c217bb0ef7e9df88e50707a  gcc/testsuite/gdc.test/compilable/dtoh_expressions.d
! 6cd1b9aa1e5105a497f414bc577134f8  gcc/testsuite/gdc.test/compilable/dtoh_extern_type.d
! 1ff04e49dc0cbb03890e5a887d12adb3  gcc/testsuite/gdc.test/compilable/dtoh_forwarding.d
! 3cd99cbb569fe2d3805b5fe7c4a5eb38  gcc/testsuite/gdc.test/compilable/dtoh_functions.d
! abc4ff1c3c0f43608659c49594f8f3dd  gcc/testsuite/gdc.test/compilable/dtoh_ignored.d
! 9b74c941356cc57ad9bc98e02ea00ee0  gcc/testsuite/gdc.test/compilable/dtoh_invalid_identifiers.d
! 421fd75ed5872bd0f03f4593037cef55  gcc/testsuite/gdc.test/compilable/dtoh_mangling.d
! 7a99cf271b26b7d736694553621af148  gcc/testsuite/gdc.test/compilable/dtoh_names.d
! b850286913eadf79ae12311c953f6ee1  gcc/testsuite/gdc.test/compilable/dtoh_protection.d
! 94cef5d31a337d0efef4add95cabb8c3  gcc/testsuite/gdc.test/compilable/dtoh_required_symbols.d
! 92812ca9d9753b4c4e9d0d73693ac393  gcc/testsuite/gdc.test/compilable/dtoh_special_enum.d
! 39cb1233814ee463242b6a732af5324d  gcc/testsuite/gdc.test/compilable/dtoh_unittest_block.d
! e8acf8131b2108cb77f98dfb57bdb88c  gcc/testsuite/gdc.test/compilable/dtoh_verbose.d
! 8fe1999b7dc753be465ad414e5ced86b  gcc/testsuite/gdc.test/compilable/dtorfields.d
! 9f24034cca71b2232520662f552a99ab  gcc/testsuite/gdc.test/compilable/dtorfields_deprecation.d
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/compilable/empty_file.d
+ 7013b630e9767ffb53b9375f518abaee  gcc/testsuite/gdc.test/compilable/emptygenmain.d
+ 90f6d815cae8c116f4d22a25f5cc61b4  gcc/testsuite/gdc.test/compilable/enumbasearithmetic.d
  7f97d3263822f7811155ec0ef0ba7d2b  gcc/testsuite/gdc.test/compilable/exception.d
! 6e4898300968cb02708e13dc4c48b7e3  gcc/testsuite/gdc.test/compilable/extra-files/c6395.d
  b439564acc50c00a17aa583a0eea6a79  gcc/testsuite/gdc.test/compilable/extra-files/ddoc10367.ddoc
  f8d48831eff10cb23399c59486930574  gcc/testsuite/gdc.test/compilable/extra-files/ddoc198.ddoc
  45935b1052e81b64aef64799b51ea3d9  gcc/testsuite/gdc.test/compilable/extra-files/ddoc3.ddoc
*************** e226d7393f97d85c86ca1a2568590bd6  gcc/te
*** 70565,70576 ****
  1a370960e8333b2d790802b6b1072223  gcc/testsuite/gdc.test/compilable/extra-files/ddoc9497c.ddoc
  308790081d126938204f619511067412  gcc/testsuite/gdc.test/compilable/extra-files/ddoc9497d.ddoc
  ae1f4203bf550794e707ed5be806367b  gcc/testsuite/gdc.test/compilable/extra-files/ddoc9676a.ddoc
! c4a067a73e971ee045278cd5df42a619  gcc/testsuite/gdc.test/compilable/extra-files/depsOutput9948a.d
  39f6e328e37e7981f8597bdae714c428  gcc/testsuite/gdc.test/compilable/extra-files/e6815.d
  30cc1bf240439d09b47fb6549193de3d  gcc/testsuite/gdc.test/compilable/extra-files/example7190/controllers/HomeController.d
  cf2cb48cde6a5cacaab45cf9daa47dd1  gcc/testsuite/gdc.test/compilable/extra-files/example7190/models/HomeModel.d
! a5dbffbaabb2414858f3ed4c93f9c3ed  gcc/testsuite/gdc.test/compilable/extra-files/header1.d
! d87e2fb93ac59886a657e88db5750510  gcc/testsuite/gdc.test/compilable/extra-files/header2.d
  afe402733aa720a2cd8e8cc8e693949d  gcc/testsuite/gdc.test/compilable/extra-files/header3.d
  96b3d751c92c490a3213da0030540e86  gcc/testsuite/gdc.test/compilable/extra-files/imp12624.d
  038135fba76af92f75037b2c58ae885d  gcc/testsuite/gdc.test/compilable/extra-files/imp9057.d
--- 74578,74593 ----
  1a370960e8333b2d790802b6b1072223  gcc/testsuite/gdc.test/compilable/extra-files/ddoc9497c.ddoc
  308790081d126938204f619511067412  gcc/testsuite/gdc.test/compilable/extra-files/ddoc9497d.ddoc
  ae1f4203bf550794e707ed5be806367b  gcc/testsuite/gdc.test/compilable/extra-files/ddoc9676a.ddoc
! 294c84f8752727be8820aaa4c16a80e8  gcc/testsuite/gdc.test/compilable/extra-files/dtoh_imports.d
! 66011ed36eeb4342ad1c057e566d50b2  gcc/testsuite/gdc.test/compilable/extra-files/dtoh_imports2.d
  39f6e328e37e7981f8597bdae714c428  gcc/testsuite/gdc.test/compilable/extra-files/e6815.d
+ 4d51435416bc87fac50176e2b6f228d5  gcc/testsuite/gdc.test/compilable/extra-files/emptymain.d
  30cc1bf240439d09b47fb6549193de3d  gcc/testsuite/gdc.test/compilable/extra-files/example7190/controllers/HomeController.d
  cf2cb48cde6a5cacaab45cf9daa47dd1  gcc/testsuite/gdc.test/compilable/extra-files/example7190/models/HomeModel.d
! 24df1b88c3f5551299f701fd14ff4a76  gcc/testsuite/gdc.test/compilable/extra-files/header1.d
! ad8d83a34b5a26e396d29ee59edb35d8  gcc/testsuite/gdc.test/compilable/extra-files/header17125.d
! cb70742d66b63eaa9dac86ec51b22368  gcc/testsuite/gdc.test/compilable/extra-files/header18365.d
! b9e2b79f5b3baca6745ad5fe1b8c5841  gcc/testsuite/gdc.test/compilable/extra-files/header2.d
  afe402733aa720a2cd8e8cc8e693949d  gcc/testsuite/gdc.test/compilable/extra-files/header3.d
  96b3d751c92c490a3213da0030540e86  gcc/testsuite/gdc.test/compilable/extra-files/imp12624.d
  038135fba76af92f75037b2c58ae885d  gcc/testsuite/gdc.test/compilable/extra-files/imp9057.d
*************** cb6818365b29b41ad47f5424c409e99c  gcc/te
*** 70593,70620 ****
  ef173d2cdbc0bc5a02f0c5d0cbd51949  gcc/testsuite/gdc.test/compilable/extra-files/serenity7190/core/Model.d
  9f668d225fea83eafca80d0c1f8e96b8  gcc/testsuite/gdc.test/compilable/extra-files/test16080b.d
  1eb726ec1e3b3c09d563bfeba4931136  gcc/testsuite/gdc.test/compilable/extra-files/test20280a.d
  513a2b1874c3c5a798b1586ac310cc31  gcc/testsuite/gdc.test/compilable/fail260.d
  804340d8435da218a93bac2004552499  gcc/testsuite/gdc.test/compilable/fix17123.d
  9d9fc7d796673c0a6b49fed0e130e37d  gcc/testsuite/gdc.test/compilable/fix17335.d
! 2dc23ca3779c369ecd10f2049bc329d6  gcc/testsuite/gdc.test/compilable/fix17349.d
! 26b3530ba3b84ea431156543296fac22  gcc/testsuite/gdc.test/compilable/fix17686.d
  1646038aa524792b66b4e87f78390e1e  gcc/testsuite/gdc.test/compilable/fix21585.d
! b30f061b03fb7cc59c0ba6a0ca6525ec  gcc/testsuite/gdc.test/compilable/fix21647.d
! 9cbcecdeaffeb76673809746c693035d  gcc/testsuite/gdc.test/compilable/forward1.d
! 5a1b205da1e7b2ca9f6c777a2855e6d1  gcc/testsuite/gdc.test/compilable/future.d
! f78fb025ecbedeb5e52e32027efb13ea  gcc/testsuite/gdc.test/compilable/futurexf.d
  4963ce9702927a4da05ba914bb21d049  gcc/testsuite/gdc.test/compilable/ice10040.d
  2c33f842121803c40cf0bac71fba2c47  gcc/testsuite/gdc.test/compilable/ice10431a.d
  aa3f4a30c984c68273088f85dc1e5f09  gcc/testsuite/gdc.test/compilable/ice10431b.d
  8dc88fb8c5ea3970a37f9d71f06e23b7  gcc/testsuite/gdc.test/compilable/ice10486.d
  cc1530cf99cecb23aa98bc035a1ba59c  gcc/testsuite/gdc.test/compilable/ice10770.d
! 7866960023755e96979fe3131c0998e6  gcc/testsuite/gdc.test/compilable/ice11054.d
! fb82f64210588227ae57c214b1070d1a  gcc/testsuite/gdc.test/compilable/ice11300.d
  3e702de5a2a2d564b877152a06ee6879  gcc/testsuite/gdc.test/compilable/ice11596.d
  06290d84b45ee6768544dde9ebdae28d  gcc/testsuite/gdc.test/compilable/ice11610.d
  083a72b5359be45f5e79e1dec97a8874  gcc/testsuite/gdc.test/compilable/ice11777.d
  422e2176528ad102ea6e205301ba616d  gcc/testsuite/gdc.test/compilable/ice11906.d
- 16df5580e70683840c6430bf3f295796  gcc/testsuite/gdc.test/compilable/ice11925.d
  26ba0f2bbebb522aaa61acd38b849735  gcc/testsuite/gdc.test/compilable/ice12002.d
  507edcc04ee2ee0fe1f1362024f3aa2d  gcc/testsuite/gdc.test/compilable/ice12554.d
  cc0bef5fb3649d465cff84cd496bbe62  gcc/testsuite/gdc.test/compilable/ice12956.d
--- 74610,74648 ----
  ef173d2cdbc0bc5a02f0c5d0cbd51949  gcc/testsuite/gdc.test/compilable/extra-files/serenity7190/core/Model.d
  9f668d225fea83eafca80d0c1f8e96b8  gcc/testsuite/gdc.test/compilable/extra-files/test16080b.d
  1eb726ec1e3b3c09d563bfeba4931136  gcc/testsuite/gdc.test/compilable/extra-files/test20280a.d
+ 52dedd0bc0265044807934e4f228636d  gcc/testsuite/gdc.test/compilable/fail137.d
  513a2b1874c3c5a798b1586ac310cc31  gcc/testsuite/gdc.test/compilable/fail260.d
+ b552f44c7ef16a065db8c305bc20c029  gcc/testsuite/gdc.test/compilable/fieldwise.d
+ 3a5d669276d5332911a65a85488db528  gcc/testsuite/gdc.test/compilable/filefullpath_18911.d
+ 7c494b7c112235d0e26cb3373c7dd5e7  gcc/testsuite/gdc.test/compilable/fix13165.d
  804340d8435da218a93bac2004552499  gcc/testsuite/gdc.test/compilable/fix17123.d
+ ebde8f5d048a9f61949a309b4a37c9fa  gcc/testsuite/gdc.test/compilable/fix17145.d
  9d9fc7d796673c0a6b49fed0e130e37d  gcc/testsuite/gdc.test/compilable/fix17335.d
! bdc5603a01b589a3ad148a565edf3bce  gcc/testsuite/gdc.test/compilable/fix17635.d
! 10c25499cae9f262028c847c6445ba68  gcc/testsuite/gdc.test/compilable/fix17686.d
! 0055b5bee29125640edf8df5147e2cc2  gcc/testsuite/gdc.test/compilable/fix20416.d
  1646038aa524792b66b4e87f78390e1e  gcc/testsuite/gdc.test/compilable/fix21585.d
! 856cfe13aa8bb90d5bc353192c47acb3  gcc/testsuite/gdc.test/compilable/fix21647.d
! ee268250692a50def2153c685c32d7ec  gcc/testsuite/gdc.test/compilable/fix21684.d
! 9f30e0d0feb7d3b7c285ce54964333ab  gcc/testsuite/gdc.test/compilable/fix22180.d
! 59a3e3196f5ccc5471f94f7cbb5473d2  gcc/testsuite/gdc.test/compilable/fix22291.d
! fed924adf0e40197daeca9f6c66b00c0  gcc/testsuite/gdc.test/compilable/forward1.d
! eb806b37a5a8307466d0a81a3b7946e3  gcc/testsuite/gdc.test/compilable/future.d
! 40eba37e79ec1d15342134ef29a4569a  gcc/testsuite/gdc.test/compilable/futurexf.d
! 11f043b3017f6db8f3997272ba117c58  gcc/testsuite/gdc.test/compilable/fwdref21063.d
! cc56a52f270963ef0a22d7a15ef07bcb  gcc/testsuite/gdc.test/compilable/header18364.d
! cd9a8ef6afedd0bf05f83f41769159e5  gcc/testsuite/gdc.test/compilable/header18365.d
  4963ce9702927a4da05ba914bb21d049  gcc/testsuite/gdc.test/compilable/ice10040.d
  2c33f842121803c40cf0bac71fba2c47  gcc/testsuite/gdc.test/compilable/ice10431a.d
  aa3f4a30c984c68273088f85dc1e5f09  gcc/testsuite/gdc.test/compilable/ice10431b.d
  8dc88fb8c5ea3970a37f9d71f06e23b7  gcc/testsuite/gdc.test/compilable/ice10486.d
  cc1530cf99cecb23aa98bc035a1ba59c  gcc/testsuite/gdc.test/compilable/ice10770.d
! bd750878ddbe393f37864b7d43a23c8d  gcc/testsuite/gdc.test/compilable/ice11054.d
! 98ce71b59d2f4671ff2d52a0d8e813de  gcc/testsuite/gdc.test/compilable/ice11300.d
  3e702de5a2a2d564b877152a06ee6879  gcc/testsuite/gdc.test/compilable/ice11596.d
  06290d84b45ee6768544dde9ebdae28d  gcc/testsuite/gdc.test/compilable/ice11610.d
  083a72b5359be45f5e79e1dec97a8874  gcc/testsuite/gdc.test/compilable/ice11777.d
  422e2176528ad102ea6e205301ba616d  gcc/testsuite/gdc.test/compilable/ice11906.d
  26ba0f2bbebb522aaa61acd38b849735  gcc/testsuite/gdc.test/compilable/ice12002.d
  507edcc04ee2ee0fe1f1362024f3aa2d  gcc/testsuite/gdc.test/compilable/ice12554.d
  cc0bef5fb3649d465cff84cd496bbe62  gcc/testsuite/gdc.test/compilable/ice12956.d
*************** bfb7bfa08a5e77a93348f1b3093d8179  gcc/te
*** 70622,70669 ****
  df670c8a9800dddce793550db2eabb67  gcc/testsuite/gdc.test/compilable/ice13088.d
  7d9774875ca3d2eb5a777731922d5de0  gcc/testsuite/gdc.test/compilable/ice13245.d
  b6044a78045280ec5bb29256e581fd75  gcc/testsuite/gdc.test/compilable/ice13323.d
! 9910bfe13130aa104153101513998018  gcc/testsuite/gdc.test/compilable/ice13403.d
  7442fac4987afd2d4ed50bd15e0a6fb0  gcc/testsuite/gdc.test/compilable/ice13792.d
  2297e44da705944456f3d87b9fb0db95  gcc/testsuite/gdc.test/compilable/ice13874.d
  23ab39f3c47038f5b9963eb369ef9aa8  gcc/testsuite/gdc.test/compilable/ice13886.d
  2e2f650fe5da6573ba343703f7e9f196  gcc/testsuite/gdc.test/compilable/ice13920.d
  7c9984409abfae9271756cf23f4fd4db  gcc/testsuite/gdc.test/compilable/ice13968.d
  57cda19fc10b3e3937afdfa9759da010  gcc/testsuite/gdc.test/compilable/ice14075.d
  947e7307b3b3e83bde0d771fd17cecef  gcc/testsuite/gdc.test/compilable/ice14739.d
! 542a4f862c0646be14cc11f8a98ef376  gcc/testsuite/gdc.test/compilable/ice1524.d
  e2542287017f55a216673951cdeb4957  gcc/testsuite/gdc.test/compilable/ice15333.d
  6e861bbf8e2c2207268c138f66e524b7  gcc/testsuite/gdc.test/compilable/ice15760.d
  5b4e5d6b51255f8d913f41d595c09864  gcc/testsuite/gdc.test/compilable/ice15789.d
  6b0300a49e26fb43af48b4a7370db4e8  gcc/testsuite/gdc.test/compilable/ice15992.d
! fc6aae2b0988460716a7da593f29dc09  gcc/testsuite/gdc.test/compilable/ice20092.d
! 8bf800f3dcaca881ffdbede05ad1eabc  gcc/testsuite/gdc.test/compilable/ice6538.d
  62c12fe66505cdafa0b2160448afa693  gcc/testsuite/gdc.test/compilable/ice8392.d
! 3c544576a89bdf199d8000e4c49608f6  gcc/testsuite/gdc.test/compilable/ice854.d
  f46a99a8050abfb274e126c3d6a5de0e  gcc/testsuite/gdc.test/compilable/ice9663.d
  d23f3e321505dadcadbf1a1b3a721d9f  gcc/testsuite/gdc.test/compilable/imports/a12506.d
  6b700952296d0a882e595796a14c9f23  gcc/testsuite/gdc.test/compilable/imports/a12567.d
  6dd35032a7f229176168d7f77ea20910  gcc/testsuite/gdc.test/compilable/imports/a13226.d
  f30ffa1e9be1ac4684319474a7bd7f9a  gcc/testsuite/gdc.test/compilable/imports/a14528.d
  49fe1632e26d279c4a1bb369a93f848d  gcc/testsuite/gdc.test/compilable/imports/a15333.d
  eb462f7d27e0d59710cd5275bcd0e956  gcc/testsuite/gdc.test/compilable/imports/a15760.d
  a975dc39a9ffcfc28843c6256ff00719  gcc/testsuite/gdc.test/compilable/imports/a15856.d
  25f06628d5fa032878c36e1a6ac20804  gcc/testsuite/gdc.test/compilable/imports/a313.d
  9168068939f17dfd1fe8311083b1b8ae  gcc/testsuite/gdc.test/compilable/imports/a313templatemixin1.d
  9168068939f17dfd1fe8311083b1b8ae  gcc/testsuite/gdc.test/compilable/imports/a313templatemixin2.d
  2dfeb38472aa9e521b6080240c38146e  gcc/testsuite/gdc.test/compilable/imports/a314.d
  2cbc190910fd85de2d4e527a8b2c1f37  gcc/testsuite/gdc.test/compilable/imports/a8392.d
! 2c25ef246d7c96bd8e90aaf45b482ce0  gcc/testsuite/gdc.test/compilable/imports/art4769a.d
! 163a5fef071f182602fe3f606af70eba  gcc/testsuite/gdc.test/compilable/imports/art4769b.d
  ea681c6688dc33dd7d69823e2ae6b7d4  gcc/testsuite/gdc.test/compilable/imports/b313.d
! a7f81d85616a4a6e4fcc8a203217e8f1  gcc/testsuite/gdc.test/compilable/imports/b33a.d
! 5cac2efdb862136268b7b07d8cab0657  gcc/testsuite/gdc.test/compilable/imports/b3682.d
  fb74ec9731e081481c9cb9f98f6dcdc8  gcc/testsuite/gdc.test/compilable/imports/bug8922.d
  9948a034269cc602a8027767cdfd2ad7  gcc/testsuite/gdc.test/compilable/imports/c314.d
  e549fb3fb27aef58c9fb0e637020f69b  gcc/testsuite/gdc.test/compilable/imports/checkimports3a.d
  f6dc0b6e038af5071ee1975e134b72f2  gcc/testsuite/gdc.test/compilable/imports/checkimports3b.d
  f42b040cc735f147de9e381788dcc63b  gcc/testsuite/gdc.test/compilable/imports/checkimports3c.d
! 2283cb4b63477f95d505c9606ea8fa74  gcc/testsuite/gdc.test/compilable/imports/defaa.d
! a5b82ffa05ad0e90edc2b22c6054fbbb  gcc/testsuite/gdc.test/compilable/imports/defab.d
  51c4cc09ad07993ac2f4044028515968  gcc/testsuite/gdc.test/compilable/imports/defac.d
  57669e79302b6a7341ca254736da39ed  gcc/testsuite/gdc.test/compilable/imports/defad.d
  ad665c5d6e56c4f3b4f2ebee84c46319  gcc/testsuite/gdc.test/compilable/imports/diag12598a.d
--- 74650,74704 ----
  df670c8a9800dddce793550db2eabb67  gcc/testsuite/gdc.test/compilable/ice13088.d
  7d9774875ca3d2eb5a777731922d5de0  gcc/testsuite/gdc.test/compilable/ice13245.d
  b6044a78045280ec5bb29256e581fd75  gcc/testsuite/gdc.test/compilable/ice13323.d
! e35a9ad65780f43e25b76de0308cbde9  gcc/testsuite/gdc.test/compilable/ice13403.d
  7442fac4987afd2d4ed50bd15e0a6fb0  gcc/testsuite/gdc.test/compilable/ice13792.d
+ a6497ef98e6b9c1e991d98f5af5b9f0f  gcc/testsuite/gdc.test/compilable/ice13819.d
  2297e44da705944456f3d87b9fb0db95  gcc/testsuite/gdc.test/compilable/ice13874.d
  23ab39f3c47038f5b9963eb369ef9aa8  gcc/testsuite/gdc.test/compilable/ice13886.d
  2e2f650fe5da6573ba343703f7e9f196  gcc/testsuite/gdc.test/compilable/ice13920.d
  7c9984409abfae9271756cf23f4fd4db  gcc/testsuite/gdc.test/compilable/ice13968.d
  57cda19fc10b3e3937afdfa9759da010  gcc/testsuite/gdc.test/compilable/ice14075.d
  947e7307b3b3e83bde0d771fd17cecef  gcc/testsuite/gdc.test/compilable/ice14739.d
! a3f3c82cd6ba3ee6ea94d354cf7ffa21  gcc/testsuite/gdc.test/compilable/ice1524.d
  e2542287017f55a216673951cdeb4957  gcc/testsuite/gdc.test/compilable/ice15333.d
  6e861bbf8e2c2207268c138f66e524b7  gcc/testsuite/gdc.test/compilable/ice15760.d
  5b4e5d6b51255f8d913f41d595c09864  gcc/testsuite/gdc.test/compilable/ice15789.d
  6b0300a49e26fb43af48b4a7370db4e8  gcc/testsuite/gdc.test/compilable/ice15992.d
! 07f9af9b9185a75a40e376050b1fc3d0  gcc/testsuite/gdc.test/compilable/ice20044.d
! 4116e65e52035411024dfab212b14b1e  gcc/testsuite/gdc.test/compilable/ice20092.d
! eba10a37202276103170d0bc5457c139  gcc/testsuite/gdc.test/compilable/ice20415.d
! b996d6997badae1dca6cb4c6f9c2e24b  gcc/testsuite/gdc.test/compilable/ice6538.d
  62c12fe66505cdafa0b2160448afa693  gcc/testsuite/gdc.test/compilable/ice8392.d
! 396a23818b4d53f055617683a4c8ce37  gcc/testsuite/gdc.test/compilable/ice854.d
  f46a99a8050abfb274e126c3d6a5de0e  gcc/testsuite/gdc.test/compilable/ice9663.d
+ a75014507353bbcacb0a841f4a753f97  gcc/testsuite/gdc.test/compilable/implicitconv.d
  d23f3e321505dadcadbf1a1b3a721d9f  gcc/testsuite/gdc.test/compilable/imports/a12506.d
+ 4f793eca154a5988feb206d6f54a31fe  gcc/testsuite/gdc.test/compilable/imports/a12511.d
  6b700952296d0a882e595796a14c9f23  gcc/testsuite/gdc.test/compilable/imports/a12567.d
  6dd35032a7f229176168d7f77ea20910  gcc/testsuite/gdc.test/compilable/imports/a13226.d
  f30ffa1e9be1ac4684319474a7bd7f9a  gcc/testsuite/gdc.test/compilable/imports/a14528.d
  49fe1632e26d279c4a1bb369a93f848d  gcc/testsuite/gdc.test/compilable/imports/a15333.d
  eb462f7d27e0d59710cd5275bcd0e956  gcc/testsuite/gdc.test/compilable/imports/a15760.d
  a975dc39a9ffcfc28843c6256ff00719  gcc/testsuite/gdc.test/compilable/imports/a15856.d
+ 9e122f7b107057c7a6a0db4d705ea5ba  gcc/testsuite/gdc.test/compilable/imports/a18911.d
  25f06628d5fa032878c36e1a6ac20804  gcc/testsuite/gdc.test/compilable/imports/a313.d
  9168068939f17dfd1fe8311083b1b8ae  gcc/testsuite/gdc.test/compilable/imports/a313templatemixin1.d
  9168068939f17dfd1fe8311083b1b8ae  gcc/testsuite/gdc.test/compilable/imports/a313templatemixin2.d
  2dfeb38472aa9e521b6080240c38146e  gcc/testsuite/gdc.test/compilable/imports/a314.d
  2cbc190910fd85de2d4e527a8b2c1f37  gcc/testsuite/gdc.test/compilable/imports/a8392.d
! b9da4e7690e7e8ce02b42031e434e099  gcc/testsuite/gdc.test/compilable/imports/art4769a.d
! c4de9a3f67f802b381c1efd7a3aac0fb  gcc/testsuite/gdc.test/compilable/imports/art4769b.d
  ea681c6688dc33dd7d69823e2ae6b7d4  gcc/testsuite/gdc.test/compilable/imports/b313.d
! 39f83af43050289964fb863bb5514c99  gcc/testsuite/gdc.test/compilable/imports/b33a.d
! f4c5d55f8da0c997fd0729835ad08f7e  gcc/testsuite/gdc.test/compilable/imports/b3682.d
  fb74ec9731e081481c9cb9f98f6dcdc8  gcc/testsuite/gdc.test/compilable/imports/bug8922.d
  9948a034269cc602a8027767cdfd2ad7  gcc/testsuite/gdc.test/compilable/imports/c314.d
  e549fb3fb27aef58c9fb0e637020f69b  gcc/testsuite/gdc.test/compilable/imports/checkimports3a.d
  f6dc0b6e038af5071ee1975e134b72f2  gcc/testsuite/gdc.test/compilable/imports/checkimports3b.d
  f42b040cc735f147de9e381788dcc63b  gcc/testsuite/gdc.test/compilable/imports/checkimports3c.d
! 181e788a386ac8cb359ed9cd7b9eeffd  gcc/testsuite/gdc.test/compilable/imports/cstuff3.c
! 957c95be0044c62b0a6c57145ffd62c8  gcc/testsuite/gdc.test/compilable/imports/defaa.d
! d6c15f746a2feba66db905f13d4368c5  gcc/testsuite/gdc.test/compilable/imports/defab.d
  51c4cc09ad07993ac2f4044028515968  gcc/testsuite/gdc.test/compilable/imports/defac.d
  57669e79302b6a7341ca254736da39ed  gcc/testsuite/gdc.test/compilable/imports/defad.d
  ad665c5d6e56c4f3b4f2ebee84c46319  gcc/testsuite/gdc.test/compilable/imports/diag12598a.d
*************** abe63f7624cf794cd7b3698661f93ee6  gcc/te
*** 70674,70680 ****
  257c7bfcfd7f8aa0d73ba9e683464feb  gcc/testsuite/gdc.test/compilable/imports/fwdref12201a.d
  eae7f13df60ea789889474fd66b8825e  gcc/testsuite/gdc.test/compilable/imports/fwdref2_test17548.d
  a3ec949c029ba8d789fb2062d3d42b03  gcc/testsuite/gdc.test/compilable/imports/fwdref9514.d
! 48b8a3b6d8aa68eda00712694e9b89d6  gcc/testsuite/gdc.test/compilable/imports/g313.d
  9168068939f17dfd1fe8311083b1b8ae  gcc/testsuite/gdc.test/compilable/imports/g313public.d
  9168068939f17dfd1fe8311083b1b8ae  gcc/testsuite/gdc.test/compilable/imports/g313staticif.d
  9168068939f17dfd1fe8311083b1b8ae  gcc/testsuite/gdc.test/compilable/imports/g313stringmixin.d
--- 74709,74715 ----
  257c7bfcfd7f8aa0d73ba9e683464feb  gcc/testsuite/gdc.test/compilable/imports/fwdref12201a.d
  eae7f13df60ea789889474fd66b8825e  gcc/testsuite/gdc.test/compilable/imports/fwdref2_test17548.d
  a3ec949c029ba8d789fb2062d3d42b03  gcc/testsuite/gdc.test/compilable/imports/fwdref9514.d
! 88b977a62c6a3ff3c99d7e4fd149ad95  gcc/testsuite/gdc.test/compilable/imports/g313.d
  9168068939f17dfd1fe8311083b1b8ae  gcc/testsuite/gdc.test/compilable/imports/g313public.d
  9168068939f17dfd1fe8311083b1b8ae  gcc/testsuite/gdc.test/compilable/imports/g313staticif.d
  9168068939f17dfd1fe8311083b1b8ae  gcc/testsuite/gdc.test/compilable/imports/g313stringmixin.d
*************** caa252586dc80ca4f5a5ccbb569aac85  gcc/te
*** 70691,70706 ****
  e16ec4b37f7eb15357e42f205086eae3  gcc/testsuite/gdc.test/compilable/imports/imp15490a.d
  cd260b8c97e2437f6252ca629613ee62  gcc/testsuite/gdc.test/compilable/imports/imp15490b.d
  a255d24242e60200571b19f159dbbed4  gcc/testsuite/gdc.test/compilable/imports/imp15907.d
! a0b3b3afbbd6542de8cda155760e1c6b  gcc/testsuite/gdc.test/compilable/imports/imp16080.d
  c2a53211d7370f7da0d508d30c736f20  gcc/testsuite/gdc.test/compilable/imports/imp16085.d
  94ecdbf1d0d5a50a7116613e191df2d8  gcc/testsuite/gdc.test/compilable/imports/imp16085b.d
  981c62d2d09ebb0c99e8df108cdd13a4  gcc/testsuite/gdc.test/compilable/imports/imp16460.d
  d827eb3984b4481ec333627e31ee09fa  gcc/testsuite/gdc.test/compilable/imports/imp16798.d
  3d9aac3b6cd1bdc497ccaa9fbed2a264  gcc/testsuite/gdc.test/compilable/imports/issue21614a.d
  80335f846a510030cde94b5996d091ba  gcc/testsuite/gdc.test/compilable/imports/jsonimport1.d
  51b97508db426b4d26e878c441fa32e5  gcc/testsuite/gdc.test/compilable/imports/jsonimport2.d
  7eaf88579e1e5647bd4359a7cd817d97  gcc/testsuite/gdc.test/compilable/imports/jsonimport3.d
  f3a1a3ccef2dfb9805ab0a3f9233b0a1  gcc/testsuite/gdc.test/compilable/imports/jsonimport4.d
  b56c3e652d5f4ccf730dd3dd9bc3afa8  gcc/testsuite/gdc.test/compilable/imports/pkg16044/package.d
  a6bf37840e2367e81572f030740a8b42  gcc/testsuite/gdc.test/compilable/imports/pkg16044/sub/package.d
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/compilable/imports/pkg20537/package.d
--- 74726,74752 ----
  e16ec4b37f7eb15357e42f205086eae3  gcc/testsuite/gdc.test/compilable/imports/imp15490a.d
  cd260b8c97e2437f6252ca629613ee62  gcc/testsuite/gdc.test/compilable/imports/imp15490b.d
  a255d24242e60200571b19f159dbbed4  gcc/testsuite/gdc.test/compilable/imports/imp15907.d
! 448cdb0ca502d9b0b7f8715e8bcb6490  gcc/testsuite/gdc.test/compilable/imports/imp16080.d
  c2a53211d7370f7da0d508d30c736f20  gcc/testsuite/gdc.test/compilable/imports/imp16085.d
  94ecdbf1d0d5a50a7116613e191df2d8  gcc/testsuite/gdc.test/compilable/imports/imp16085b.d
+ 858f093ec9c6fe450a9acd29e67411b1  gcc/testsuite/gdc.test/compilable/imports/imp16088.d
  981c62d2d09ebb0c99e8df108cdd13a4  gcc/testsuite/gdc.test/compilable/imports/imp16460.d
  d827eb3984b4481ec333627e31ee09fa  gcc/testsuite/gdc.test/compilable/imports/imp16798.d
+ b30b6080ecb6542eb56edd90c23c9b30  gcc/testsuite/gdc.test/compilable/imports/imp17434a.d
+ ea65566139853a79da85531efc2f6d87  gcc/testsuite/gdc.test/compilable/imports/imp17434b.d
+ c1d1d74046f5a2e29b3546ad753f2ff9  gcc/testsuite/gdc.test/compilable/imports/imp21832.d
+ 1c35e431433b3fb94161638f9c282174  gcc/testsuite/gdc.test/compilable/imports/imp22122.d
+ a667727c02ccc971d7c05c508de4ada9  gcc/testsuite/gdc.test/compilable/imports/imp22625.c
+ 9883398346a2178c5e7cbe0f1bd31a0c  gcc/testsuite/gdc.test/compilable/imports/imp22665.c
+ 91bc6c76a8e99bc3e0bcdb80a716c03d  gcc/testsuite/gdc.test/compilable/imports/imp22734.c
+ ffb02a7ce616b7c2fdd649a67dc4b02d  gcc/testsuite/gdc.test/compilable/imports/impfieldwise.d
  3d9aac3b6cd1bdc497ccaa9fbed2a264  gcc/testsuite/gdc.test/compilable/imports/issue21614a.d
  80335f846a510030cde94b5996d091ba  gcc/testsuite/gdc.test/compilable/imports/jsonimport1.d
  51b97508db426b4d26e878c441fa32e5  gcc/testsuite/gdc.test/compilable/imports/jsonimport2.d
  7eaf88579e1e5647bd4359a7cd817d97  gcc/testsuite/gdc.test/compilable/imports/jsonimport3.d
  f3a1a3ccef2dfb9805ab0a3f9233b0a1  gcc/testsuite/gdc.test/compilable/imports/jsonimport4.d
+ e66844cdd008e5c3984e6b678fe37371  gcc/testsuite/gdc.test/compilable/imports/pkg11847/mod11847.d
+ 52bc9c2edbeea564280b3f6f3547285b  gcc/testsuite/gdc.test/compilable/imports/pkg11847/package.d
  b56c3e652d5f4ccf730dd3dd9bc3afa8  gcc/testsuite/gdc.test/compilable/imports/pkg16044/package.d
  a6bf37840e2367e81572f030740a8b42  gcc/testsuite/gdc.test/compilable/imports/pkg16044/sub/package.d
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/compilable/imports/pkg20537/package.d
*************** cf35fae634540a741b269f55e769278f  gcc/te
*** 70709,70720 ****
  e5b55ced4559d6a06ce7db266e5c9631  gcc/testsuite/gdc.test/compilable/imports/pkgmod313/package.d
  a2a19c9a5687cb82b8c92b6c813b992f  gcc/testsuite/gdc.test/compilable/imports/pkgmodule/package.d
  dcb71c2de63f3106f8685448e678bd28  gcc/testsuite/gdc.test/compilable/imports/pkgmodule/plainmodule.d
! e25da44e5f50ef100b2c819cbd67c815  gcc/testsuite/gdc.test/compilable/imports/plainpackage/plainmodule.d
  787125c1c7e63f391055064fff3c1f7e  gcc/testsuite/gdc.test/compilable/imports/pr9471a.d
  aaaeba07a11a8a333a5453d1af0cec09  gcc/testsuite/gdc.test/compilable/imports/pr9471b.d
  09c9dd188b3260a902d3ad448f346528  gcc/testsuite/gdc.test/compilable/imports/pr9471c.d
  689faee6ec91f14b9b69017aa913378a  gcc/testsuite/gdc.test/compilable/imports/pr9471d.d
! d8caf2153e7fed2aa547fdfca7eeb15a  gcc/testsuite/gdc.test/compilable/imports/protectionimp.d
  ec3c94e80793a6c25fe47e60d834925a  gcc/testsuite/gdc.test/compilable/imports/stdio4003.d
  1194b97c46b16af4074ddf7de0875615  gcc/testsuite/gdc.test/compilable/imports/test10375a.d
  8e8b49de136c44a42872ab44f75bdb8d  gcc/testsuite/gdc.test/compilable/imports/test10752.d
--- 74755,74766 ----
  e5b55ced4559d6a06ce7db266e5c9631  gcc/testsuite/gdc.test/compilable/imports/pkgmod313/package.d
  a2a19c9a5687cb82b8c92b6c813b992f  gcc/testsuite/gdc.test/compilable/imports/pkgmodule/package.d
  dcb71c2de63f3106f8685448e678bd28  gcc/testsuite/gdc.test/compilable/imports/pkgmodule/plainmodule.d
! 7c247e34e13d4cd838f9a2af19ccac8a  gcc/testsuite/gdc.test/compilable/imports/plainpackage/plainmodule.d
  787125c1c7e63f391055064fff3c1f7e  gcc/testsuite/gdc.test/compilable/imports/pr9471a.d
  aaaeba07a11a8a333a5453d1af0cec09  gcc/testsuite/gdc.test/compilable/imports/pr9471b.d
  09c9dd188b3260a902d3ad448f346528  gcc/testsuite/gdc.test/compilable/imports/pr9471c.d
  689faee6ec91f14b9b69017aa913378a  gcc/testsuite/gdc.test/compilable/imports/pr9471d.d
! 327a44e4988d4e5ebe01c0be43d0bf52  gcc/testsuite/gdc.test/compilable/imports/protectionimp.d
  ec3c94e80793a6c25fe47e60d834925a  gcc/testsuite/gdc.test/compilable/imports/stdio4003.d
  1194b97c46b16af4074ddf7de0875615  gcc/testsuite/gdc.test/compilable/imports/test10375a.d
  8e8b49de136c44a42872ab44f75bdb8d  gcc/testsuite/gdc.test/compilable/imports/test10752.d
*************** c1f484900c1ca5b0ed159baed712a591  gcc/te
*** 70723,70733 ****
  141f047d9ab6c55a75ef682b30da2418  gcc/testsuite/gdc.test/compilable/imports/test11563core_bitop.d
  d50b2a2c5e8e6277fb0bec357db87a87  gcc/testsuite/gdc.test/compilable/imports/test11563std_array.d
  49a2ef737f5d66a70a5e4e986b9cfa22  gcc/testsuite/gdc.test/compilable/imports/test11563std_range.d
! 6727b95cd3d0e61a3f6c62d8b482a038  gcc/testsuite/gdc.test/compilable/imports/test11563std_traits.d
  6c1517c76a52807de6c3cc616198544e  gcc/testsuite/gdc.test/compilable/imports/test1238a.d
  ccf9d9e561b4a66bec346fec85b166cc  gcc/testsuite/gdc.test/compilable/imports/test1238b.d
  0f5ac42fa9bcba093b3a88cdbd49600d  gcc/testsuite/gdc.test/compilable/imports/test13242a.d
  17c5090aece0b18024d0b24371840387  gcc/testsuite/gdc.test/compilable/imports/test13242b.d
  6b62b094c18f435420c1cb0fe407dcf1  gcc/testsuite/gdc.test/compilable/imports/test14666a.d
  57315e4584c5b1ab0e0a4292b8fa967d  gcc/testsuite/gdc.test/compilable/imports/test14666b.d
  f7eb4505340130cdb2527ff9989b20f3  gcc/testsuite/gdc.test/compilable/imports/test15150a.d
--- 74769,74780 ----
  141f047d9ab6c55a75ef682b30da2418  gcc/testsuite/gdc.test/compilable/imports/test11563core_bitop.d
  d50b2a2c5e8e6277fb0bec357db87a87  gcc/testsuite/gdc.test/compilable/imports/test11563std_array.d
  49a2ef737f5d66a70a5e4e986b9cfa22  gcc/testsuite/gdc.test/compilable/imports/test11563std_range.d
! 2c5b4535759c258f54d82204e2d0084b  gcc/testsuite/gdc.test/compilable/imports/test11563std_traits.d
  6c1517c76a52807de6c3cc616198544e  gcc/testsuite/gdc.test/compilable/imports/test1238a.d
  ccf9d9e561b4a66bec346fec85b166cc  gcc/testsuite/gdc.test/compilable/imports/test1238b.d
  0f5ac42fa9bcba093b3a88cdbd49600d  gcc/testsuite/gdc.test/compilable/imports/test13242a.d
  17c5090aece0b18024d0b24371840387  gcc/testsuite/gdc.test/compilable/imports/test13242b.d
+ a4ec575fe1e437716a9197c602cd4ec7  gcc/testsuite/gdc.test/compilable/imports/test13582.d
  6b62b094c18f435420c1cb0fe407dcf1  gcc/testsuite/gdc.test/compilable/imports/test14666a.d
  57315e4584c5b1ab0e0a4292b8fa967d  gcc/testsuite/gdc.test/compilable/imports/test14666b.d
  f7eb4505340130cdb2527ff9989b20f3  gcc/testsuite/gdc.test/compilable/imports/test15150a.d
*************** edec2233b23c66fc49dd5079f1fd48f8  gcc/te
*** 70739,70774 ****
  85554f90b38fe6f47db8048a4f9d806a  gcc/testsuite/gdc.test/compilable/imports/test15857c.d
  67a67e9e469957279f016b8ac880a7ca  gcc/testsuite/gdc.test/compilable/imports/test16214b.d
  2367f4c6a52dde8157f11f2d069d1de7  gcc/testsuite/gdc.test/compilable/imports/test16348.d
  2559669a912b485e962b9a7de425cffc  gcc/testsuite/gdc.test/compilable/imports/test1754a.d
  f1cd8fee062b759eb381ad6f0be9fd69  gcc/testsuite/gdc.test/compilable/imports/test1754b.d
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/compilable/imports/test17991a/a.d
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/compilable/imports/test17991a/package.d
  eea69b24dab5f6a3a3bc66e1783a9bdd  gcc/testsuite/gdc.test/compilable/imports/test19609a.d
  3aae6246838f53dede9a22c3cf97baac  gcc/testsuite/gdc.test/compilable/imports/test19609b.d
  4ba163636180cbb37f67c5128cd77536  gcc/testsuite/gdc.test/compilable/imports/test19609c.d
  4af26579445d4f23b4ad000fa00a7fc4  gcc/testsuite/gdc.test/compilable/imports/test1imp.d
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/compilable/imports/test20151a/b/c/c.d
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/compilable/imports/test20530a.d
  754f26c40ff56dabdfc6b66af299bb99  gcc/testsuite/gdc.test/compilable/imports/test21299/func.d
  49c149a624a15b7c88491e52fb5e72ad  gcc/testsuite/gdc.test/compilable/imports/test21299/mtype.d
  ed6b446a1bba02028807741f49a0b12c  gcc/testsuite/gdc.test/compilable/imports/test21299/rootstringtable.d
  e00a356527fd9de68672afcd288ed7d8  gcc/testsuite/gdc.test/compilable/imports/test21501b.d
  1bab730cb011f8e9b10ea5b2125d66b5  gcc/testsuite/gdc.test/compilable/imports/test21501c.d
  e6b06846e47d7e657b4b6da3e34a6954  gcc/testsuite/gdc.test/compilable/imports/test25a.d
  dcecd311a16774881975a1c3b62d5e02  gcc/testsuite/gdc.test/compilable/imports/test25b.d
  dd423bc6d69cba269b09946e729dbf08  gcc/testsuite/gdc.test/compilable/imports/test2991.d
! 0551a63bd6c613523064dc6d8ffe280c  gcc/testsuite/gdc.test/compilable/imports/test4003a.d
! b3925564a410ea8dbd1cc1438e70fb25  gcc/testsuite/gdc.test/compilable/imports/test50a.d
! 2479076dbbbd7069eb6c3810b2154f56  gcc/testsuite/gdc.test/compilable/imports/test55a.d
  ddef86a23bbe5710514b9c23783eaeb3  gcc/testsuite/gdc.test/compilable/imports/test59a.d
  5dab41255011fc64808aef56e8d8ff16  gcc/testsuite/gdc.test/compilable/imports/test59b.d
  0dc99b49db53ec94a4e480ac96962fda  gcc/testsuite/gdc.test/compilable/imports/test6013.d
  ae6ea0f9d1a1c51ddeaf21819828a8a8  gcc/testsuite/gdc.test/compilable/imports/test61a.d
! 47d3c50cd565dfba3cb4582737a7f72b  gcc/testsuite/gdc.test/compilable/imports/test62a.d
! de38b4e66e54634f6f91a4123864063b  gcc/testsuite/gdc.test/compilable/imports/test63a.d
  562e879fa1764164041056d934bf5591  gcc/testsuite/gdc.test/compilable/imports/test66a.d
! 5a3cefd7d5d287d85a1c1d2bd48f05f5  gcc/testsuite/gdc.test/compilable/imports/test67a.d
! c54d254df828cd407bdffbe3b9d43b03  gcc/testsuite/gdc.test/compilable/imports/test68a.d
  4b1ec8747ab1f2b55852d49a09aed961  gcc/testsuite/gdc.test/compilable/imports/test70.d
  d87122a7da0a029a876e893bace422a7  gcc/testsuite/gdc.test/compilable/imports/test71.d
  7bea1b50c5320ea79f08f965627d2547  gcc/testsuite/gdc.test/compilable/imports/test72a.d
--- 74786,74864 ----
  85554f90b38fe6f47db8048a4f9d806a  gcc/testsuite/gdc.test/compilable/imports/test15857c.d
  67a67e9e469957279f016b8ac880a7ca  gcc/testsuite/gdc.test/compilable/imports/test16214b.d
  2367f4c6a52dde8157f11f2d069d1de7  gcc/testsuite/gdc.test/compilable/imports/test16348.d
+ 694414aac2c0f1068ff00ec7b8af353d  gcc/testsuite/gdc.test/compilable/imports/test16709a.d
+ be297d36173da2aa059c99d27bc3cd20  gcc/testsuite/gdc.test/compilable/imports/test16709b.d
+ f4a8ee1e1d9759efea6cf549bea58aa6  gcc/testsuite/gdc.test/compilable/imports/test16709c.d
+ 0ffdfcba68af88f3f72a0286af2b9fd4  gcc/testsuite/gdc.test/compilable/imports/test16709d.d
+ 708a3f2cc75081eb552542431268c664  gcc/testsuite/gdc.test/compilable/imports/test17441foo/bar.d
+ d62d329225bac43ae43b1168462576bf  gcc/testsuite/gdc.test/compilable/imports/test17441foo/package.d
+ 226d7d4fbbbc9972c6181a4a134c5086  gcc/testsuite/gdc.test/compilable/imports/test17541_2.d
+ 5b12cb283ad3c776ec2aeaa9e33acaf3  gcc/testsuite/gdc.test/compilable/imports/test17541_3.d
  2559669a912b485e962b9a7de425cffc  gcc/testsuite/gdc.test/compilable/imports/test1754a.d
  f1cd8fee062b759eb381ad6f0be9fd69  gcc/testsuite/gdc.test/compilable/imports/test1754b.d
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/compilable/imports/test17991a/a.d
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/compilable/imports/test17991a/package.d
+ fcc0079c8f2496eb8ca91555d0f06cd5  gcc/testsuite/gdc.test/compilable/imports/test18651/algorithm.d
+ 73fc88dcb6e8155cd7443ea1cd21c519  gcc/testsuite/gdc.test/compilable/imports/test18651/b.d
+ f32d3478a9d1cb3f3fbbd8d488c1730f  gcc/testsuite/gdc.test/compilable/imports/test18651/c.d
+ cafe06b0ac84f275ad9d97525ed78ed9  gcc/testsuite/gdc.test/compilable/imports/test18651/datetime.d
+ 0c3d1735ae7cbcf6af970e55da513bba  gcc/testsuite/gdc.test/compilable/imports/test18771a.d
+ f3eaa331fd0d5031c6fb3c99ad1a570b  gcc/testsuite/gdc.test/compilable/imports/test18771b.d
+ a5147370a375ee4a5cfbc8e1957171aa  gcc/testsuite/gdc.test/compilable/imports/test18771c.d
+ 3d0cf2a2a06c32c10498ab7d47814590  gcc/testsuite/gdc.test/compilable/imports/test18771d.d
+ 3a07ea657fa6bb3017bbc42fea701fef  gcc/testsuite/gdc.test/compilable/imports/test19187.d
+ c5fae778a376d730e022d0200b44c672  gcc/testsuite/gdc.test/compilable/imports/test19344.d
  eea69b24dab5f6a3a3bc66e1783a9bdd  gcc/testsuite/gdc.test/compilable/imports/test19609a.d
  3aae6246838f53dede9a22c3cf97baac  gcc/testsuite/gdc.test/compilable/imports/test19609b.d
  4ba163636180cbb37f67c5128cd77536  gcc/testsuite/gdc.test/compilable/imports/test19609c.d
+ b5bcf027bf7ddf5647427a5345f7ad7f  gcc/testsuite/gdc.test/compilable/imports/test19656a.d
+ 08c77baf42714b40f92e4ba9c754494c  gcc/testsuite/gdc.test/compilable/imports/test19656b.d
+ 870fbdeb94b3555650fbcc2b60094164  gcc/testsuite/gdc.test/compilable/imports/test19656c.d
+ a2bcad7e2b25e3e0605191977ccfc786  gcc/testsuite/gdc.test/compilable/imports/test19657b.d
+ 7e7fc2bce242a4dee21fa99c8bf4a698  gcc/testsuite/gdc.test/compilable/imports/test19657c.d
+ 4064cb0b330189af6a3ff169a4842e55  gcc/testsuite/gdc.test/compilable/imports/test19657d.d
+ 644e81ccf4df16211153a8ce999ff67b  gcc/testsuite/gdc.test/compilable/imports/test19657e.d
+ 3d7f74fc79ea898270121ccf2ad9cd3e  gcc/testsuite/gdc.test/compilable/imports/test19657f.d
+ 446a0857deec2dae87d0e6c2d6418eb9  gcc/testsuite/gdc.test/compilable/imports/test19657g.d
+ c6fb9b03799906f7a07f445e972220a8  gcc/testsuite/gdc.test/compilable/imports/test19746a.d
+ d9ddeae15818f521d1d958ee87b13e2c  gcc/testsuite/gdc.test/compilable/imports/test19746b.d
+ 3f0b30581007ffa239fb7939333ebbb4  gcc/testsuite/gdc.test/compilable/imports/test19746c.d
+ 47984f77ccaf89e2cb74b28f85dd34b3  gcc/testsuite/gdc.test/compilable/imports/test19746d.d
+ 0b028a6e4a72a88d4f62fa2aa87b6a2c  gcc/testsuite/gdc.test/compilable/imports/test19750a.d
+ 10c4e4d813a21cb169c318e99765c0bd  gcc/testsuite/gdc.test/compilable/imports/test19750b.d
+ 1b0d8ab264b0f641cf7abffdd1f81118  gcc/testsuite/gdc.test/compilable/imports/test19750c.d
+ b02327dbb0beb468e895e2b7a6b7cad8  gcc/testsuite/gdc.test/compilable/imports/test19750d.d
  4af26579445d4f23b4ad000fa00a7fc4  gcc/testsuite/gdc.test/compilable/imports/test1imp.d
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/compilable/imports/test20151a/b/c/c.d
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/compilable/imports/test20530a.d
+ b1946ac92492d2347c6235b4d2611184  gcc/testsuite/gdc.test/compilable/imports/test21227/..foo/a.txt
+ b1946ac92492d2347c6235b4d2611184  gcc/testsuite/gdc.test/compilable/imports/test21227/a..b.txt
+ b1946ac92492d2347c6235b4d2611184  gcc/testsuite/gdc.test/compilable/imports/test21227/a.txt
  754f26c40ff56dabdfc6b66af299bb99  gcc/testsuite/gdc.test/compilable/imports/test21299/func.d
  49c149a624a15b7c88491e52fb5e72ad  gcc/testsuite/gdc.test/compilable/imports/test21299/mtype.d
  ed6b446a1bba02028807741f49a0b12c  gcc/testsuite/gdc.test/compilable/imports/test21299/rootstringtable.d
+ d654e41d3edb7b700db7d883613c57c9  gcc/testsuite/gdc.test/compilable/imports/test21464a.d
  e00a356527fd9de68672afcd288ed7d8  gcc/testsuite/gdc.test/compilable/imports/test21501b.d
  1bab730cb011f8e9b10ea5b2125d66b5  gcc/testsuite/gdc.test/compilable/imports/test21501c.d
+ 51ca7edb1da87ea549ea40ae10a57096  gcc/testsuite/gdc.test/compilable/imports/test22685b.d
+ 9ab422df3123c1496f5dc9fe36ad6df5  gcc/testsuite/gdc.test/compilable/imports/test22685c.d
+ 02a2590e246aa059b8b0a4cb52842f7d  gcc/testsuite/gdc.test/compilable/imports/test22714a.d
+ 1e8691fc12b29c4990c9b465638bcc0c  gcc/testsuite/gdc.test/compilable/imports/test22714b.d
  e6b06846e47d7e657b4b6da3e34a6954  gcc/testsuite/gdc.test/compilable/imports/test25a.d
  dcecd311a16774881975a1c3b62d5e02  gcc/testsuite/gdc.test/compilable/imports/test25b.d
  dd423bc6d69cba269b09946e729dbf08  gcc/testsuite/gdc.test/compilable/imports/test2991.d
! a49b2eae9472692a4ef283ce9d8ee591  gcc/testsuite/gdc.test/compilable/imports/test4003a.d
! 15a424db72185911471d955067a8a2d3  gcc/testsuite/gdc.test/compilable/imports/test50a.d
! 261f7420fbfc7b27bebd5ab844f4894d  gcc/testsuite/gdc.test/compilable/imports/test55a.d
  ddef86a23bbe5710514b9c23783eaeb3  gcc/testsuite/gdc.test/compilable/imports/test59a.d
  5dab41255011fc64808aef56e8d8ff16  gcc/testsuite/gdc.test/compilable/imports/test59b.d
  0dc99b49db53ec94a4e480ac96962fda  gcc/testsuite/gdc.test/compilable/imports/test6013.d
  ae6ea0f9d1a1c51ddeaf21819828a8a8  gcc/testsuite/gdc.test/compilable/imports/test61a.d
! 1b475761d6c4c1d2ad62a504a5ad7d66  gcc/testsuite/gdc.test/compilable/imports/test62a.d
! 2105b703324d766c64d766f65bb7e3fa  gcc/testsuite/gdc.test/compilable/imports/test63a.d
  562e879fa1764164041056d934bf5591  gcc/testsuite/gdc.test/compilable/imports/test66a.d
! 341dace890c42c388ebd66e4de39e504  gcc/testsuite/gdc.test/compilable/imports/test67a.d
! e98b4d9995ec2ad9f9de9bed6048c06a  gcc/testsuite/gdc.test/compilable/imports/test68a.d
  4b1ec8747ab1f2b55852d49a09aed961  gcc/testsuite/gdc.test/compilable/imports/test70.d
  d87122a7da0a029a876e893bace422a7  gcc/testsuite/gdc.test/compilable/imports/test71.d
  7bea1b50c5320ea79f08f965627d2547  gcc/testsuite/gdc.test/compilable/imports/test72a.d
*************** d87122a7da0a029a876e893bace422a7  gcc/te
*** 70776,70789 ****
  e2777680ac6acc1b57f1b8987efc4b32  gcc/testsuite/gdc.test/compilable/imports/test72c.d
  b2631a8e5c9e4ddd58b06222e6615f74  gcc/testsuite/gdc.test/compilable/imports/test7491a.d
  a1b2a9cbfc5bbc6f03b9cd445a263d7f  gcc/testsuite/gdc.test/compilable/imports/test7491b.d
! bbf04a451774349f30f5a4b7153d78a1  gcc/testsuite/gdc.test/compilable/imports/test9276decl.d
! cca36bc1bff864fa9b3350d1c1b6e229  gcc/testsuite/gdc.test/compilable/imports/test9276expr.d
  ec3713c0fae1315d50759681e506bedb  gcc/testsuite/gdc.test/compilable/imports/test9276hash.d
! c8319681a5e33bead15c38526120c8f2  gcc/testsuite/gdc.test/compilable/imports/test9276parser.d
! d596d86cc83a1950699e4365d6d527f3  gcc/testsuite/gdc.test/compilable/imports/test9276sem.d
! a723748926e86171606b7547d16c806d  gcc/testsuite/gdc.test/compilable/imports/test9276type.d
! abccdd468b97ba6d6868f68178320eaa  gcc/testsuite/gdc.test/compilable/imports/test9276util.d
! 5190d1ab370fffa4987fceb65f4739a4  gcc/testsuite/gdc.test/compilable/imports/test9276visitors.d
  53820fe5b8240122dd31a2e31ad3bd26  gcc/testsuite/gdc.test/compilable/imports/test9399a.d
  3bbcc7c0d36bee6e2d53bfad29fc2210  gcc/testsuite/gdc.test/compilable/imports/test9436aggr.d
  96ffdc762f0accc4f668fa8037155013  gcc/testsuite/gdc.test/compilable/imports/test9436interp.d
--- 74866,74879 ----
  e2777680ac6acc1b57f1b8987efc4b32  gcc/testsuite/gdc.test/compilable/imports/test72c.d
  b2631a8e5c9e4ddd58b06222e6615f74  gcc/testsuite/gdc.test/compilable/imports/test7491a.d
  a1b2a9cbfc5bbc6f03b9cd445a263d7f  gcc/testsuite/gdc.test/compilable/imports/test7491b.d
! f8699a18add263e0f9272754407ff041  gcc/testsuite/gdc.test/compilable/imports/test9276decl.d
! 0a141759fa0e32d8f714b0401151fee9  gcc/testsuite/gdc.test/compilable/imports/test9276expr.d
  ec3713c0fae1315d50759681e506bedb  gcc/testsuite/gdc.test/compilable/imports/test9276hash.d
! bf298730b03adc1b53d7c7cacded44c5  gcc/testsuite/gdc.test/compilable/imports/test9276parser.d
! de429cda009b658be3b156897cbbd454  gcc/testsuite/gdc.test/compilable/imports/test9276sem.d
! 56f12ddbdd06014bb7d6620f2e220edc  gcc/testsuite/gdc.test/compilable/imports/test9276type.d
! bb9bc0a4a6f522d47766de2f33d211d1  gcc/testsuite/gdc.test/compilable/imports/test9276util.d
! fe75a5bf23b1eb33765d011977079b0b  gcc/testsuite/gdc.test/compilable/imports/test9276visitors.d
  53820fe5b8240122dd31a2e31ad3bd26  gcc/testsuite/gdc.test/compilable/imports/test9399a.d
  3bbcc7c0d36bee6e2d53bfad29fc2210  gcc/testsuite/gdc.test/compilable/imports/test9436aggr.d
  96ffdc762f0accc4f668fa8037155013  gcc/testsuite/gdc.test/compilable/imports/test9436interp.d
*************** cadd014d7255e7f6db535c7471a483ff  gcc/te
*** 70794,70827 ****
  c07829f5ac3a3d882b91ac9c6782749b  gcc/testsuite/gdc.test/compilable/imports/test9919a.d
  32a52e0bd54401a1eeeb23fb0bf1bd50  gcc/testsuite/gdc.test/compilable/imports/test9919b.d
  1f52a2cd7c5856d40960ac1929041ec8  gcc/testsuite/gdc.test/compilable/imports/test9919c.d
! 38609ddb5a034fb5952a88c1d96b3e83  gcc/testsuite/gdc.test/compilable/imports/testcontracts.d
  71f4506f306242d5d30ccab37e4c9eb8  gcc/testsuite/gdc.test/compilable/imports/typecons4003.d
  e1b2201bb7bef13edd5b1dd62a016069  gcc/testsuite/gdc.test/compilable/imports/udamodule1.d
  1d8fc89265fe679561568985cc3facff  gcc/testsuite/gdc.test/compilable/imports/udamodule2.d
  2f1dca8de92811ccae257ea9c1e85b24  gcc/testsuite/gdc.test/compilable/imports/udamodule2a.d
! d9ebf67fd237bed148f1afc04cc9917e  gcc/testsuite/gdc.test/compilable/imports/wax16798.d
! a78a216eb2cdbd38395c7016969b121a  gcc/testsuite/gdc.test/compilable/interpret3.d
  06030303622e394ed8c4697f73259c9e  gcc/testsuite/gdc.test/compilable/interpret5.d
! 6e068695167c49b9b52e90713727a4b2  gcc/testsuite/gdc.test/compilable/isZeroInit.d
! e49c5f270dc2dffc4d87884435af12a8  gcc/testsuite/gdc.test/compilable/isreturnonstack.d
  bd06f86cfa7b2ed9fb29a58c57efdcfc  gcc/testsuite/gdc.test/compilable/issue16020.d
  c0f06c2e74f038183aab3cc3cf221b3e  gcc/testsuite/gdc.test/compilable/issue16044.d
  04daeea9c5ccfa61f11dd3e1dbb1285a  gcc/testsuite/gdc.test/compilable/issue20915.d
  824521433520512f9e1e945e072c8fa7  gcc/testsuite/gdc.test/compilable/issue21614.d
! 2b921474dbafdc4c189e8fa7d19a3c8f  gcc/testsuite/gdc.test/compilable/issue21726.d
  d44936b3c2d3be5638fdb042d88ff414  gcc/testsuite/gdc.test/compilable/issue21813a.d
! 7de586b40f181e8f04752192dc7ecd63  gcc/testsuite/gdc.test/compilable/issue21813b.d
! c6aab91c4e15d19895112c1cb7a06bdf  gcc/testsuite/gdc.test/compilable/json.d
! 94339cd8edf453f83498c971fb3e35f1  gcc/testsuite/gdc.test/compilable/line.d
  0b7708bb7ff6eae9428be2b56c06e0fd  gcc/testsuite/gdc.test/compilable/minimal3.d
! fd6c0ea82f862c2addd56e1a1ce05c4c  gcc/testsuite/gdc.test/compilable/mixintype.d
! f17f2e0a4d197f3794245015f6465b40  gcc/testsuite/gdc.test/compilable/mixintype2.d
  a3c24afe0733ea3b2f5afb6b064e3a71  gcc/testsuite/gdc.test/compilable/noderef.d
! 7ed5841c3784701ea3f0a4934090ba05  gcc/testsuite/gdc.test/compilable/nogc.d
! a7df306b420c138f94dd4eec2d2be022  gcc/testsuite/gdc.test/compilable/noreturn1.d
  c87c15c1a87df8b9292800c22fb9d727  gcc/testsuite/gdc.test/compilable/pr9471.d
! 4748d13783a7ef11c04ffef94e96bd31  gcc/testsuite/gdc.test/compilable/protattr.d
! 7c8b39e0a49ee794e97dc3002d04cc7f  gcc/testsuite/gdc.test/compilable/protection.d
  cb143d7698f10438d8c8cf1f61f40f48  gcc/testsuite/gdc.test/compilable/protection/aggregate/mod14275.d
  1e4827e4157819eca3d347654343a8cc  gcc/testsuite/gdc.test/compilable/protection/basic/mod1.d
  b2e98384f6bdc34ec35b5054523496a6  gcc/testsuite/gdc.test/compilable/protection/basic/tests.d
--- 74884,74962 ----
  c07829f5ac3a3d882b91ac9c6782749b  gcc/testsuite/gdc.test/compilable/imports/test9919a.d
  32a52e0bd54401a1eeeb23fb0bf1bd50  gcc/testsuite/gdc.test/compilable/imports/test9919b.d
  1f52a2cd7c5856d40960ac1929041ec8  gcc/testsuite/gdc.test/compilable/imports/test9919c.d
! dadc26dbb8b89a8d4a498fd0f46ad122  gcc/testsuite/gdc.test/compilable/imports/testcontracts.d
! 358d64706fabeb1b7595fb295afdf752  gcc/testsuite/gdc.test/compilable/imports/testlambda1.d
! adab1f44012d7afa19dfd61b7b326691  gcc/testsuite/gdc.test/compilable/imports/testlambda2.d
  71f4506f306242d5d30ccab37e4c9eb8  gcc/testsuite/gdc.test/compilable/imports/typecons4003.d
+ 5ad78ca4b79edf72fd746309025fbc04  gcc/testsuite/gdc.test/compilable/imports/u20958.d
  e1b2201bb7bef13edd5b1dd62a016069  gcc/testsuite/gdc.test/compilable/imports/udamodule1.d
  1d8fc89265fe679561568985cc3facff  gcc/testsuite/gdc.test/compilable/imports/udamodule2.d
  2f1dca8de92811ccae257ea9c1e85b24  gcc/testsuite/gdc.test/compilable/imports/udamodule2a.d
! 28954be8a40dfe6c1d475542cc4a4950  gcc/testsuite/gdc.test/compilable/imports/wax16798.d
! ef6621356266511f2cc350934f6c915d  gcc/testsuite/gdc.test/compilable/interpret3.d
! 4e6e008425b8e270dc3a1df0495d9ce3  gcc/testsuite/gdc.test/compilable/interpret4.d
  06030303622e394ed8c4697f73259c9e  gcc/testsuite/gdc.test/compilable/interpret5.d
! 450fffaacdb4952032aa47dc230ed71d  gcc/testsuite/gdc.test/compilable/isZeroInit.d
! 38f9e58c2715314b37d8bdbc7914a3ae  gcc/testsuite/gdc.test/compilable/isreturnonstack.d
! 376cb54eec7916337251b9d0785afab8  gcc/testsuite/gdc.test/compilable/issue12520.d
! cb0a083c308a114ae069864cdecbf5db  gcc/testsuite/gdc.test/compilable/issue15478.d
! 81c69273877811b825825151ec9fb164  gcc/testsuite/gdc.test/compilable/issue15795.d
! 91ea4801e9a6d5f152b6fde693143ab3  gcc/testsuite/gdc.test/compilable/issue15818.d
  bd06f86cfa7b2ed9fb29a58c57efdcfc  gcc/testsuite/gdc.test/compilable/issue16020.d
  c0f06c2e74f038183aab3cc3cf221b3e  gcc/testsuite/gdc.test/compilable/issue16044.d
+ b910b30d7854e09339dcc3d2fb33a7f1  gcc/testsuite/gdc.test/compilable/issue16472.d
+ 7bcbdbaec218cd3d09ad98dd4abbe588  gcc/testsuite/gdc.test/compilable/issue18097.d
+ 9233bd62bb2a9f406c9aca87b21e05fc  gcc/testsuite/gdc.test/compilable/issue19925.d
+ daa2c8dffcb01b4cb7fedae1b33794fa  gcc/testsuite/gdc.test/compilable/issue20362.d
+ 922d1f80ce8888fbd0679ee853c38414  gcc/testsuite/gdc.test/compilable/issue20599.d
+ edc2285459e4656968c13c6d1996b338  gcc/testsuite/gdc.test/compilable/issue20704.d
+ 8d3582f0fd9eaca372ff61350332a11b  gcc/testsuite/gdc.test/compilable/issue20705.d
  04daeea9c5ccfa61f11dd3e1dbb1285a  gcc/testsuite/gdc.test/compilable/issue20915.d
+ ec6a68d1404062509cb6f8e5908dd5c9  gcc/testsuite/gdc.test/compilable/issue20995.d
+ bc7bf256799d6e24350f7dc2f6a56ae4  gcc/testsuite/gdc.test/compilable/issue21203.d
+ 8388992c32cb543450b9d81028000444  gcc/testsuite/gdc.test/compilable/issue21328.d
+ acaf99b9f4b93345a3e27db3d096913f  gcc/testsuite/gdc.test/compilable/issue21340.d
+ d0fe8dfd769337feba3fa1aec179666a  gcc/testsuite/gdc.test/compilable/issue21378.d
+ 0c8fa97fc9ebdd9c0e1ae9f2b51598bb  gcc/testsuite/gdc.test/compilable/issue21390.d
  824521433520512f9e1e945e072c8fa7  gcc/testsuite/gdc.test/compilable/issue21614.d
! 6186889e117916a42db41c518fff0312  gcc/testsuite/gdc.test/compilable/issue21662.d
! bf28bf9695c4fe4bc708217d6e45b8fa  gcc/testsuite/gdc.test/compilable/issue21726.d
  d44936b3c2d3be5638fdb042d88ff414  gcc/testsuite/gdc.test/compilable/issue21813a.d
! 67b77aa64e14734024caba244560235c  gcc/testsuite/gdc.test/compilable/issue21813b.d
! 2d1583b71f98db376391828cdebcd86e  gcc/testsuite/gdc.test/compilable/issue21880.d
! 5d3024e94e16444e74e762a86e97ac5a  gcc/testsuite/gdc.test/compilable/issue21882.d
! 24aa1bef43803bf7945269f6dbb963db  gcc/testsuite/gdc.test/compilable/issue21905.d
! 4803db4022ac5a18c1ba3362a8d75239  gcc/testsuite/gdc.test/compilable/issue22130.d
! 2fc93ec0ef318092df8f037cadf05a7f  gcc/testsuite/gdc.test/compilable/issue9884.d
! e91a92c9c06d7b2d9d69ab65e6d5d8b4  gcc/testsuite/gdc.test/compilable/json.d
! 0dbed47c0a9e6379e5441611de2fdd43  gcc/testsuite/gdc.test/compilable/json20742.d
! b250222652a93e5b4bdcc759db2b45ce  gcc/testsuite/gdc.test/compilable/line.d
! ef508e45d854adfd4d46622db5b51b8a  gcc/testsuite/gdc.test/compilable/minimal.d
! 4990d90debeabfbce3e25456ea3e80cd  gcc/testsuite/gdc.test/compilable/minimal2.d
  0b7708bb7ff6eae9428be2b56c06e0fd  gcc/testsuite/gdc.test/compilable/minimal3.d
! 81b29659c83d32c1150fdcbfb8ebc393  gcc/testsuite/gdc.test/compilable/mixin.d
! c0a34931ae605eeb3d2920a2ea74eb71  gcc/testsuite/gdc.test/compilable/mixinTemplateMangling.d
! 4d64b8d079b2551742ff35ba2d23cb22  gcc/testsuite/gdc.test/compilable/mixintempl.d
! b6a5dd6f5f5e40ec69f5d95cff610577  gcc/testsuite/gdc.test/compilable/mixintype.d
! 7f66ba09b458afa472d31fc5f9015147  gcc/testsuite/gdc.test/compilable/mixintype2.d
! 12cc7909584b66e9017a50fdd8e9ca50  gcc/testsuite/gdc.test/compilable/must_use_assign.d
! 2cdfbad9a4fe22ff52644e1ee84b57dc  gcc/testsuite/gdc.test/compilable/must_use_not_reserved.d
! 018484fedaaf413c3cd5082f3b76ba5e  gcc/testsuite/gdc.test/compilable/must_use_opassign.d
! 12e804d755bb05565da7e4afddbc305d  gcc/testsuite/gdc.test/compilable/must_use_opopassign.d
! 5893fd27bc8dcbbf4b557999d7e6fcc4  gcc/testsuite/gdc.test/compilable/must_use_opunary.d
! 5c3027247e211bc17095d2a5331d6415  gcc/testsuite/gdc.test/compilable/must_use_suppress.d
! 234250ba55c9db35a7a38bbdebebc0ac  gcc/testsuite/gdc.test/compilable/nestedtempl0.d
! 0692185f429a12ae9a98b28baf6bc8e1  gcc/testsuite/gdc.test/compilable/nestedtempl1.d
  a3c24afe0733ea3b2f5afb6b064e3a71  gcc/testsuite/gdc.test/compilable/noderef.d
! 8d8a694f2c83500f3c60c6644b19ff35  gcc/testsuite/gdc.test/compilable/nogc.d
! 50338ec6e3a5b703d086c2e11ca536d3  gcc/testsuite/gdc.test/compilable/noreturn1.d
! 5fbaecaa28f6007b4b1d3347e88d130d  gcc/testsuite/gdc.test/compilable/ob1.d
! 97cf4856aa8990a0fe28a6aabadd9a23  gcc/testsuite/gdc.test/compilable/pr9374.d
! 7d64317f6d15dac75cff6ccb494e7ef9  gcc/testsuite/gdc.test/compilable/pr9383.d
  c87c15c1a87df8b9292800c22fb9d727  gcc/testsuite/gdc.test/compilable/pr9471.d
! 94597a8ad6d65c7f6a4f6e4b87c1e96d  gcc/testsuite/gdc.test/compilable/previewin.d
! 600189166a802a0fdc956497de7efadd  gcc/testsuite/gdc.test/compilable/protattr.d
! 20b93d64c0f1a131967d443511e7bb0c  gcc/testsuite/gdc.test/compilable/protection.d
  cb143d7698f10438d8c8cf1f61f40f48  gcc/testsuite/gdc.test/compilable/protection/aggregate/mod14275.d
  1e4827e4157819eca3d347654343a8cc  gcc/testsuite/gdc.test/compilable/protection/basic/mod1.d
  b2e98384f6bdc34ec35b5054523496a6  gcc/testsuite/gdc.test/compilable/protection/basic/tests.d
*************** f543bf93bdfe13ab40e844d0a15e8c59  gcc/te
*** 70834,72090 ****
  90b1f63820ca5118356cb851be4f040e  gcc/testsuite/gdc.test/compilable/protection/subpkg/tests.d
  bb9e006cebe601f91fae1b967d929f57  gcc/testsuite/gdc.test/compilable/protection/subpkg2/tests.d
  55b78b463069cf9c07d1b499af13d02e  gcc/testsuite/gdc.test/compilable/pull6815.d
! acaf18bcac4ac998c5f58d4184525590  gcc/testsuite/gdc.test/compilable/riia_ctor.d
! 36a6e36ee88f5104ea461e25c99691b8  gcc/testsuite/gdc.test/compilable/scope.d
  fd1eeff8f6c846eeb29e20921f5da298  gcc/testsuite/gdc.test/compilable/shared_destructor.d
! 8a056a04be09d165b07030591bd120ef  gcc/testsuite/gdc.test/compilable/staticforeach.d
! 96eaa13ac0afae6fd923558368cfb953  gcc/testsuite/gdc.test/compilable/sw_transition_complex.d
! 7d0b68e315fb44e6b9b125818d03e7fc  gcc/testsuite/gdc.test/compilable/sw_transition_field.d
! 420fee37216b517612bf9e0d3862dea6  gcc/testsuite/gdc.test/compilable/sw_transition_tls.d
! 5bd8fd28899adcdd5ebbe91686b84534  gcc/testsuite/gdc.test/compilable/test1.d
  f52c467cdb64825a114c76cb4d42270c  gcc/testsuite/gdc.test/compilable/test10056.d
  723170658610a254681bd9ccb073f2db  gcc/testsuite/gdc.test/compilable/test10066.d
! d48a4ba34de67ad12a16889333551482  gcc/testsuite/gdc.test/compilable/test10073.d
  f7053e67651c479beeb889f6c6d63333  gcc/testsuite/gdc.test/compilable/test10186.d
! d884b39ab8c005df276b2185c637963f  gcc/testsuite/gdc.test/compilable/test10312.d
! 398f8b7c871a3a1170d921e57839a4f5  gcc/testsuite/gdc.test/compilable/test10375.d
! 586b29c26e2bcccc74e76e20bfbbd34f  gcc/testsuite/gdc.test/compilable/test10520.d
  c195e7094e70746673bc24f452926027  gcc/testsuite/gdc.test/compilable/test10695.d
  b32ac2de7289a218e373f46522a7eee5  gcc/testsuite/gdc.test/compilable/test10726.d
! 310b5d2006b4825f9afb5cc87fdbd0e5  gcc/testsuite/gdc.test/compilable/test10752.d
! 52251960e91636d4be5a9e163fc96e16  gcc/testsuite/gdc.test/compilable/test10981.d
  24a59def26cb96f65546832afec063d2  gcc/testsuite/gdc.test/compilable/test10992.d
  08cf2264e6dc717220c8c17fefc064e7  gcc/testsuite/gdc.test/compilable/test10992b.d
! de29b7c738bf82d44c7aac315a14db40  gcc/testsuite/gdc.test/compilable/test10993.d
! c7ca07977380bd3d0f9eed74e3db5bf0  gcc/testsuite/gdc.test/compilable/test11169.d
! 9ac23ef295419c00efe648b312f9f38a  gcc/testsuite/gdc.test/compilable/test11225a.d
! 2ae48a1d24987402171d21f8e5e5da75  gcc/testsuite/gdc.test/compilable/test11237.d
! 36b27b0115ddbd3e18e1eb70533f220e  gcc/testsuite/gdc.test/compilable/test11371.d
  4b0f923b35d971aaf4e5b9c473d83492  gcc/testsuite/gdc.test/compilable/test11559upgradeoptlink.d
! b86bba367b9b2eb3904aa6fe9e43d560  gcc/testsuite/gdc.test/compilable/test11563.d
! ee3a3fd1ee1c8595b4ce6f1619c421ec  gcc/testsuite/gdc.test/compilable/test11656.d
  6f29e1c2c94e9aa39045848ad7a4e0bf  gcc/testsuite/gdc.test/compilable/test11824.d
  8bf0ff47ef3b2433a9fa48e24c536bc7  gcc/testsuite/gdc.test/compilable/test11914.d
  5f5597bf8979e57f84581b7dc54f0803  gcc/testsuite/gdc.test/compilable/test11980.d
  aa89b8203af70d96610b1ce5edf18959  gcc/testsuite/gdc.test/compilable/test12009.d
! 2263840551514df4600103bdd00bceb6  gcc/testsuite/gdc.test/compilable/test1238.d
  d3b477ff39dc5987d927a70762107cc0  gcc/testsuite/gdc.test/compilable/test12523.d
! db1e313c00a3b1e5993e14854ad3e54b  gcc/testsuite/gdc.test/compilable/test12527.d
! e067a0ebb6b4f96385af7fbe579abb10  gcc/testsuite/gdc.test/compilable/test12558.d
  fe8050ee6ba1d00b1162bdbe9a91a793  gcc/testsuite/gdc.test/compilable/test12567a.d
  7ee0b8197bef137c3c9c71bee19b4dd8  gcc/testsuite/gdc.test/compilable/test12567b.d
! ae162b35772a38fd66ccd19b1740216d  gcc/testsuite/gdc.test/compilable/test12567c.d
! acc76500ba6cdb4b4a43d134c4ba9368  gcc/testsuite/gdc.test/compilable/test12567d.d
  ce76c760f83b35d99d7529bd025649c5  gcc/testsuite/gdc.test/compilable/test12567e.d
  5e9c46706cb87ea4f43c2004d6edc97e  gcc/testsuite/gdc.test/compilable/test12593.d
  d8c4af0849e8c816c0d29a332900db29  gcc/testsuite/gdc.test/compilable/test12624.d
  f77e1a7bbd7be92c09cd140d5df25033  gcc/testsuite/gdc.test/compilable/test12967.d
! e44f27d1d95c5d1478777b04a067a78a  gcc/testsuite/gdc.test/compilable/test13008.d
  d8a24ba15faf351dc5548d5c73aa838f  gcc/testsuite/gdc.test/compilable/test13053.d
! a8da728233622f4542eebe10ee1a205b  gcc/testsuite/gdc.test/compilable/test13193.d
! 4cef32cd92e1c911f17e136d7d1d24c6  gcc/testsuite/gdc.test/compilable/test13194.d
! 5b6ed7ef20dab898b53e5fd4c21cc572  gcc/testsuite/gdc.test/compilable/test13226.d
! f94bc65c5882081a741962719c67bf4b  gcc/testsuite/gdc.test/compilable/test13242.d
  118adf7a3992e0e4f6484c0a68c002f8  gcc/testsuite/gdc.test/compilable/test13281.d
! 044dcc9f7c785d4eb6d138a9263c4867  gcc/testsuite/gdc.test/compilable/test13512.d
  4f167980b011587dd72df5d574e9adfd  gcc/testsuite/gdc.test/compilable/test1353.d
! f2017b8b0562f2c175e960e0aef79108  gcc/testsuite/gdc.test/compilable/test13600.d
  415c125f68e40729baadc65dd6a58d0e  gcc/testsuite/gdc.test/compilable/test13668.d
! 1f269fec81512def7193fc80939bc975  gcc/testsuite/gdc.test/compilable/test13858.d
  1be21fd49f3ca4b5339bb36a5ac8ad36  gcc/testsuite/gdc.test/compilable/test13902.d
! cc3e0ffea35045c1ac47ca938e2bc10a  gcc/testsuite/gdc.test/compilable/test14275.d
  7939b994deccb3a91fcf0075636da4d7  gcc/testsuite/gdc.test/compilable/test14317.d
  32d2057282c7b25c5d89cd7d3a63e87f  gcc/testsuite/gdc.test/compilable/test14375.d
! b085aa7f3a662c58fc0f17a0d42225e4  gcc/testsuite/gdc.test/compilable/test14528.d
! 76058ac25d88f09249c821aebd764cd2  gcc/testsuite/gdc.test/compilable/test14666.d
  d08eb915c0915356c5a6a6cfb65fc12c  gcc/testsuite/gdc.test/compilable/test14747.d
  2715a539d70e535ba7ff6e6c97ef43da  gcc/testsuite/gdc.test/compilable/test14781.d
  ce3583d666a02f9aeb875d1e3214809a  gcc/testsuite/gdc.test/compilable/test14838.d
  fd79d2256c9f3b641f6858510f031dec  gcc/testsuite/gdc.test/compilable/test14962.d
  1413a891a6e34f5017ae82469f21b4d5  gcc/testsuite/gdc.test/compilable/test14973.d
! c50d386fcda82ef5845c0707d83ec2b4  gcc/testsuite/gdc.test/compilable/test15019.d
  5dca66e0d47bbc28c2c8f9f77fb0facd  gcc/testsuite/gdc.test/compilable/test15056.d
! eab40ae950bf17c4552cebb7803a815a  gcc/testsuite/gdc.test/compilable/test15150.d
  d787dea08d42bcb0bf75bdf7f07b8678  gcc/testsuite/gdc.test/compilable/test15326.d
! 097e328e3672bc765b560bf503e4469a  gcc/testsuite/gdc.test/compilable/test1537.d
  77cb2da5ba8893d94564c72f5ea0746b  gcc/testsuite/gdc.test/compilable/test15371.d
! 858fa3bf805f382b33daa95ed35cb945  gcc/testsuite/gdc.test/compilable/test15389_x.d
! 4a115c1a2460c7f635d2c47571f9d91d  gcc/testsuite/gdc.test/compilable/test15389_y.d
  4dc72f84f8d23f54ba99ff64df68e011  gcc/testsuite/gdc.test/compilable/test15402.d
! 6d04e3b1b893cce152890b00d95a8e45  gcc/testsuite/gdc.test/compilable/test15464.d
! 00a619be051b847f07cf3fb993b26056  gcc/testsuite/gdc.test/compilable/test15490.d
! 40c98c1e7c2c8be7f37174b53e8f531c  gcc/testsuite/gdc.test/compilable/test15519_x.d
! 86883d7fc83afd7a90f8a4975edad5e4  gcc/testsuite/gdc.test/compilable/test15519_y.d
  c170e59878e4554ca268a8f43ab696b7  gcc/testsuite/gdc.test/compilable/test15550.d
! 4f7ed927522af2a2fe09d28ae297a878  gcc/testsuite/gdc.test/compilable/test15565.d
! 09f7465fa52e48fbf9f744d009c1c72f  gcc/testsuite/gdc.test/compilable/test15578.d
  b2450b3d68fb07bbb35fed7e9a7d4049  gcc/testsuite/gdc.test/compilable/test15618.d
  8dcaa8a54506b89615d613d5c7bf3877  gcc/testsuite/gdc.test/compilable/test15668.d
! 9c2d89471d66a86597229b8cd11f7adc  gcc/testsuite/gdc.test/compilable/test15762.d
! e5debefd5153459f5c83f1766a1dd786  gcc/testsuite/gdc.test/compilable/test15780.d
  f53698308a86147743b2f30c9ed83654  gcc/testsuite/gdc.test/compilable/test15784.d
! 0c129b718ba136b2dcf9c0c1afde9909  gcc/testsuite/gdc.test/compilable/test15785.d
  8c1e0b03168047bcefc3c5d3fc226cc2  gcc/testsuite/gdc.test/compilable/test15802.d
! 184590519d9f3a140cfcb9c4171e0c37  gcc/testsuite/gdc.test/compilable/test15856.d
! 048ffd1aa4f48b114ef74fb21468114c  gcc/testsuite/gdc.test/compilable/test15898.d
! 02c1a0f9016db23dd530e09cb42e25d6  gcc/testsuite/gdc.test/compilable/test15907.d
! 1749dade162de62938f9212495a69a6e  gcc/testsuite/gdc.test/compilable/test16002.d
  a73af7de316f24698871d03a878726ab  gcc/testsuite/gdc.test/compilable/test16031.d
! f5715ae1f1a591f0b8ca66abc7759df8  gcc/testsuite/gdc.test/compilable/test16080.d
  c66d78d3bf4e71c925116093469fe79d  gcc/testsuite/gdc.test/compilable/test16083.d
! 4855e45b39d36d76493b47a661c82e65  gcc/testsuite/gdc.test/compilable/test16085.d
! e254c4e8d38cac05922c8039e3081563  gcc/testsuite/gdc.test/compilable/test16214a.d
! cf5c02c32c9bcc6043814526f81abadd  gcc/testsuite/gdc.test/compilable/test16225.d
  dbb21fcb4c8117b8e86e342839b6ea86  gcc/testsuite/gdc.test/compilable/test16292.d
  299f492c76cc407a4551f5f622f5a7d4  gcc/testsuite/gdc.test/compilable/test16303.d
  4141477ca72a5096c3206adef57a58ea  gcc/testsuite/gdc.test/compilable/test16340.d
  7cdc1bdcfc88b0bff153fa73281ccc37  gcc/testsuite/gdc.test/compilable/test16348.d
! cfe3d2caeea5168de9cdeefcc9b037d7  gcc/testsuite/gdc.test/compilable/test16460.d
  043a88f40b9c47c01f0a06d0baca0491  gcc/testsuite/gdc.test/compilable/test16525.d
  e014faa15d07ab8af6f94fadcc30894c  gcc/testsuite/gdc.test/compilable/test16540.d
  a4f9e5e07caf5b52d346ebffe86d8357  gcc/testsuite/gdc.test/compilable/test16563.d
! 69cf269206c6452ea5094330e2a04c25  gcc/testsuite/gdc.test/compilable/test16570.d
  9229591edd6cd1079b7ed96933684144  gcc/testsuite/gdc.test/compilable/test16572.d
  85595ae117a1402d17a219272e1e6c82  gcc/testsuite/gdc.test/compilable/test16574.d
  4001e30ad421ab92b3c1ce65037be22e  gcc/testsuite/gdc.test/compilable/test16607.d
  4befd6db467dc07436d4eb3d601e748c  gcc/testsuite/gdc.test/compilable/test16627.d
  cfa6c5a55671befb5292bf5b134401f3  gcc/testsuite/gdc.test/compilable/test1673.d
  7327e9e4ef0547e3bb17b63ce4198760  gcc/testsuite/gdc.test/compilable/test16747.d
! 073600464bbb6218c13e0056bb0f6f26  gcc/testsuite/gdc.test/compilable/test16798.d
! 76a8c2ff809f67add7c78a04a0f62acb  gcc/testsuite/gdc.test/compilable/test17057.d
  b7bee84af0ad6009095814d5a080d445  gcc/testsuite/gdc.test/compilable/test17059.d
  e87f48da66ddb31559c11628da10640e  gcc/testsuite/gdc.test/compilable/test17130.d
! 99bc9dc60e006b1ed64fc02b6caa801d  gcc/testsuite/gdc.test/compilable/test17143.d
  603435cff972cf545cbfd4cbaf7675c6  gcc/testsuite/gdc.test/compilable/test17168.d
  9f322d85f59db5aacfceee570828f699  gcc/testsuite/gdc.test/compilable/test17215.d
  34a4f761ce44732e8d98f2154d655148  gcc/testsuite/gdc.test/compilable/test17339.d
  21c9a8cfce4024f66cda8de89ebf5fcf  gcc/testsuite/gdc.test/compilable/test17349.d
  68e1dbe483cf3a2ae1a41c5106689102  gcc/testsuite/gdc.test/compilable/test17352.d
  2c4fd5be03468f47c86571d4effcafb0  gcc/testsuite/gdc.test/compilable/test17399.d
! 3ec49b05c05f638b43f2e2ca476dff49  gcc/testsuite/gdc.test/compilable/test17419.d
! 16510946709a4629fee80180edb72d19  gcc/testsuite/gdc.test/compilable/test17421.d
! 0b1f78a2d59d7b5e477c643a79e82bb0  gcc/testsuite/gdc.test/compilable/test17468.d
! db825134716aeb13919d0b436e6742eb  gcc/testsuite/gdc.test/compilable/test1754.d
! 82f3a0c34cec550e628b5b506e885d83  gcc/testsuite/gdc.test/compilable/test17545.d
! e5eeea561efd582d3bac3624383bcdc8  gcc/testsuite/gdc.test/compilable/test17548.d
  8ae0157007a2b73f8e3724118fcdff99  gcc/testsuite/gdc.test/compilable/test17590.d
  7de2b38dc4a5590a892e1780e09185d5  gcc/testsuite/gdc.test/compilable/test17791.d
  f9645959365eb348f2c096cd81f2e5d5  gcc/testsuite/gdc.test/compilable/test17819.d
  8f88e1e045f2404c92df36f8f97af09d  gcc/testsuite/gdc.test/compilable/test17908.d
  e2fe66eab97a7b69aa09a30ec570ce09  gcc/testsuite/gdc.test/compilable/test17991.d
  cf778b67822c952f319386105c4a8e93  gcc/testsuite/gdc.test/compilable/test1878a.d
  bb6d980d18f268c4653a4b3f6ef90dc0  gcc/testsuite/gdc.test/compilable/test18871.d
  f1fb0fc76744ec9a244711207ad19617  gcc/testsuite/gdc.test/compilable/test19145.d
  fc41777a1b9816ebf55ae1456219acef  gcc/testsuite/gdc.test/compilable/test19292.d
  09d8521f98b3e68044c9a3bb9b194ba2  gcc/testsuite/gdc.test/compilable/test19574.d
! 65cd18feb048be6925b156e0fb84c586  gcc/testsuite/gdc.test/compilable/test19609.d
  6fbdb3bc8df45dce6f1cca2e1c65403f  gcc/testsuite/gdc.test/compilable/test19778.d
  6959520dbe36e098ae727a4a9cdfdfe3  gcc/testsuite/gdc.test/compilable/test19912.d
  bd3b792f2e9fae4293f32a0195335936  gcc/testsuite/gdc.test/compilable/test19941.d
  acf65fea78fda931df435e170b4ff10e  gcc/testsuite/gdc.test/compilable/test20151a.d
  9c9235445cfb7a0250eb9c627c45a97d  gcc/testsuite/gdc.test/compilable/test20280.d
  5d7a8d265f4f29667ecde34793879f65  gcc/testsuite/gdc.test/compilable/test20530.d
  06b732fa6a39c017318cbc16939f52fa  gcc/testsuite/gdc.test/compilable/test20537.d
  d319ff042032f8a9da6b7cb00b09b7cb  gcc/testsuite/gdc.test/compilable/test20692.d
  14169fbc0bdff72551f90f07070fb611  gcc/testsuite/gdc.test/compilable/test20894.d
! 04232045b228e791a39bfb15136a8ba9  gcc/testsuite/gdc.test/compilable/test21299a.d
! 486de3c5e0f7578f63bb5307aa28bab2  gcc/testsuite/gdc.test/compilable/test21299b.d
  f7ebbab88f0a4f86e71b06e130f593ee  gcc/testsuite/gdc.test/compilable/test21299c.d
  effd503ab143f07a377f69a6abd2e2ab  gcc/testsuite/gdc.test/compilable/test21299d.d
  6aae9ab24e30cc1449c46abe03e9439e  gcc/testsuite/gdc.test/compilable/test21501a.d
  0f65bb2b07e0bc8dcb7e5d89eaf5b3f7  gcc/testsuite/gdc.test/compilable/test21742.d
  e5b88d27b36ae497e0682fa1afcc06be  gcc/testsuite/gdc.test/compilable/test21812.d
  7bf71d49bd9d761471be55f9c50f5c92  gcc/testsuite/gdc.test/compilable/test21898.d
  f8ec0845cd2590e50d27071453701fb7  gcc/testsuite/gdc.test/compilable/test22006.d
  01b0e8acc140f229c41fe59a55df5574  gcc/testsuite/gdc.test/compilable/test22133.d
! 8bbe6fdb201585c810b1ed76e34ddba3  gcc/testsuite/gdc.test/compilable/test25.d
! 089e65013864f2a6266955ee32c413a9  gcc/testsuite/gdc.test/compilable/test2991.d
! e1042e9f6638c3d67840ae4db9908d15  gcc/testsuite/gdc.test/compilable/test313a.d
  8b0a688ad726eb9d76224ef39e11e0f3  gcc/testsuite/gdc.test/compilable/test313b.d
! 87b5f65220ab1134cc6a90315d533d4f  gcc/testsuite/gdc.test/compilable/test313c.d
! 4e4e42682cd46af31db16027480d33ed  gcc/testsuite/gdc.test/compilable/test313d.d
! b5827b6a074f32626e7dd3db0aaf34b5  gcc/testsuite/gdc.test/compilable/test313e.d
! c5c8cc9e86bedc0c3af7324053b9e9c0  gcc/testsuite/gdc.test/compilable/test313f.d
! 52772a4b39d35ee21408b4efc8c57349  gcc/testsuite/gdc.test/compilable/test313g.d
! f3a6c73f6bda610e5f968c68ee9496bc  gcc/testsuite/gdc.test/compilable/test314.d
  03cb2305c43115a0052540b366172beb  gcc/testsuite/gdc.test/compilable/test3673.d
! 3d5d37522a7b280c59d667c30fd629e2  gcc/testsuite/gdc.test/compilable/test3775.d
! 8da540465ac1f934c3b971e5d58c379f  gcc/testsuite/gdc.test/compilable/test4003.d
! 568833341b34a5aa42b5b939d5c4e104  gcc/testsuite/gdc.test/compilable/test4090.d
  984272f47ab93b847449ea196fd097fc  gcc/testsuite/gdc.test/compilable/test4364.d
! 041360e8a56e07bda3f92c3176936d5c  gcc/testsuite/gdc.test/compilable/test4375.d
! 54b04b10fec023fc22686706cac2e5a2  gcc/testsuite/gdc.test/compilable/test50.d
! 8c44bf6f40ec7b851884484d60926fda  gcc/testsuite/gdc.test/compilable/test5227.d
! 85ae54e903df64c1961531efc5e0bcdd  gcc/testsuite/gdc.test/compilable/test55.d
! dd4d0f38676ab3122d55bb63c0d87d0f  gcc/testsuite/gdc.test/compilable/test59.d
! d6c85f17d82bd7c6a65d91facff43c9d  gcc/testsuite/gdc.test/compilable/test6013.d
! c0ee75091dc9df2a27ecf815492878bd  gcc/testsuite/gdc.test/compilable/test602.d
  f203cdad472a1ac06cee89c4e3557d42  gcc/testsuite/gdc.test/compilable/test6056a.d
  ac9f607c5bf6b6821ab1e25ec1590f22  gcc/testsuite/gdc.test/compilable/test6056b.d
  4be264f78a1f5c46b3fc77047a9b6b9b  gcc/testsuite/gdc.test/compilable/test6056c.d
! 5f525e95b4e0f1acad58963c4db281f4  gcc/testsuite/gdc.test/compilable/test6089.d
! e6b5e59ac2d31fa9ad975777c763bd59  gcc/testsuite/gdc.test/compilable/test61.d
! e7a2ea1bc6f789265d3e6fec5c1ea8fd  gcc/testsuite/gdc.test/compilable/test62.d
! f3b33d2c4b8f4b8995c551c51fdd97c3  gcc/testsuite/gdc.test/compilable/test63.d
  16f2db11e13b840c6d42f1ebd30a6e90  gcc/testsuite/gdc.test/compilable/test6319.d
! 459d16858dc5a3c79c168a199040e480  gcc/testsuite/gdc.test/compilable/test6395.d
  db533e40440813c61fa46fb37a6f18b6  gcc/testsuite/gdc.test/compilable/test6534.d
  783342e2cfeb88610e0a04d00450ea41  gcc/testsuite/gdc.test/compilable/test6552.d
! 0afcb0608d0ea089e00e7d39af8ad1a1  gcc/testsuite/gdc.test/compilable/test66.d
! f08bd3ea502423931b95083af9e2e58e  gcc/testsuite/gdc.test/compilable/test67.d
! ae25bad68b001fbe4fc4a1d74f734416  gcc/testsuite/gdc.test/compilable/test68.d
! cc8e385bdd94926f661b4b94ca586b54  gcc/testsuite/gdc.test/compilable/test69.d
! 849c9860f3813b3fe075f0371bc7ec45  gcc/testsuite/gdc.test/compilable/test6999.d
! e180d0e9b7b430a1d7a3556910de429d  gcc/testsuite/gdc.test/compilable/test70.d
  57edff88840a591f06f485aa844e495d  gcc/testsuite/gdc.test/compilable/test7065.d
! 6e9659f7a0b6dc73e68bdfc60e99e5ae  gcc/testsuite/gdc.test/compilable/test71.d
! 6e6828cc2149d233694f492782587881  gcc/testsuite/gdc.test/compilable/test7172.d
  dda273a2ef110ab5809c44c288a41727  gcc/testsuite/gdc.test/compilable/test7190.d
! 37dffd4b3bf4f6569c0940dd982f133a  gcc/testsuite/gdc.test/compilable/test72.d
  06de3dbdb86544d9b0b277d86d3ad57f  gcc/testsuite/gdc.test/compilable/test7252.d
! d4b999b0fd4324b835cb486894bd78cb  gcc/testsuite/gdc.test/compilable/test7399.d
! 38aa927b747e39880aa699dd681ce46e  gcc/testsuite/gdc.test/compilable/test7491.d
! ca4ce2d0b5528a4c55763a50fbd9a7f4  gcc/testsuite/gdc.test/compilable/test7524.d
  7e58e715e6c8944700015dd56c2deb1e  gcc/testsuite/gdc.test/compilable/test7569.d
! 33daf6783d4ac244f6ddea135ab6b8e0  gcc/testsuite/gdc.test/compilable/test7754.d
  c0cf3b5f60f2de636e3867e3f0a694e2  gcc/testsuite/gdc.test/compilable/test7815.d
  96010ac8f5d0782cfcfabcebef14b0e5  gcc/testsuite/gdc.test/compilable/test7886.d
  a8435199449791320394887b9c443137  gcc/testsuite/gdc.test/compilable/test8038.d
  cee9201c7a4bd69b19f522144045058c  gcc/testsuite/gdc.test/compilable/test8041.d
! e62f94495fd3cb1b74145f4d9cca9af0  gcc/testsuite/gdc.test/compilable/test8296.d
! 6d7678f7f1a9c8c248e8d7200e2a9a4f  gcc/testsuite/gdc.test/compilable/test8509.d
! 9ab389e30e926582a7b1e7c7639af610  gcc/testsuite/gdc.test/compilable/test8513.d
! 451bbfb0ad7b5b409753893f3569b1ef  gcc/testsuite/gdc.test/compilable/test8543.d
  eaba2f9e0498b9ed178c566dafb0fdb6  gcc/testsuite/gdc.test/compilable/test8631.d
  08bb23688c8e4ed3cfff98aaf0746861  gcc/testsuite/gdc.test/compilable/test8675.d
! fc15a8437172c19ff8712cf084126533  gcc/testsuite/gdc.test/compilable/test8696.d
  9ec77bfd4d36feaf576dfdad323c5edd  gcc/testsuite/gdc.test/compilable/test8717.d
  c798616b54ddda7a7bf8ea476c6eb3b1  gcc/testsuite/gdc.test/compilable/test8802.d
  e532a2b8c5e6c299df90ad9c90a77d72  gcc/testsuite/gdc.test/compilable/test8898.d
! c169f5247ee671037aa07010a9886b39  gcc/testsuite/gdc.test/compilable/test8922a.d
! bbb1e999cb423b0ce7964af914568002  gcc/testsuite/gdc.test/compilable/test8922b.d
! b39b2d708bed4350ea78a973dba7a843  gcc/testsuite/gdc.test/compilable/test8922c.d
! c60dbee199adecc4f3c54e89b0b2f3d8  gcc/testsuite/gdc.test/compilable/test8922d.d
! a597ba18736e2d8277647febde053c99  gcc/testsuite/gdc.test/compilable/test8922e.d
! 2aef5cc8d7f40103c3125d438bf7950c  gcc/testsuite/gdc.test/compilable/test8922f.d
  93d6229b1e59d52a5fc3cdf7e80a5277  gcc/testsuite/gdc.test/compilable/test8937.d
  0627b61f8b84ef5c510ab2706dc90afc  gcc/testsuite/gdc.test/compilable/test8959.d
  64de522104a033c6c0f428550b71f1e3  gcc/testsuite/gdc.test/compilable/test9029.d
! 71b4e4a5b87ea97025e3cb3fb9935ba6  gcc/testsuite/gdc.test/compilable/test9057.d
! fce3c05e52ba370bb71301f701455a3e  gcc/testsuite/gdc.test/compilable/test9209.d
! 853735f8f0165f4efc9f2d4c482a496d  gcc/testsuite/gdc.test/compilable/test9276.d
! ec1c56ecd65559c6ca8790fadaf1fbf9  gcc/testsuite/gdc.test/compilable/test9278a.d
! 5d938700375ec8c3ba44a68a922d104f  gcc/testsuite/gdc.test/compilable/test9278b.d
  7dc6b695093f373d43cc3dd261d1bec4  gcc/testsuite/gdc.test/compilable/test9399.d
! 1afdf0594afd0f8475460303218845ed  gcc/testsuite/gdc.test/compilable/test9434.d
! ef6c76bd84f8e2989edef580992909dc  gcc/testsuite/gdc.test/compilable/test9435.d
! 21cbcd4786d18662021904a235fdecc0  gcc/testsuite/gdc.test/compilable/test9436.d
  32887f6006186e5c1563e74ecca07c3c  gcc/testsuite/gdc.test/compilable/test9526.d
  14eba8cb0439fb4587fd4aa667c307e1  gcc/testsuite/gdc.test/compilable/test9554.d
  3527ab00198f9edaaf12cd056769e7f1  gcc/testsuite/gdc.test/compilable/test9565.d
  0485e20adfd94e487f38d7332b48507d  gcc/testsuite/gdc.test/compilable/test9570.d
! 0d8b8d7facaccc7ab15f0d6456f53d31  gcc/testsuite/gdc.test/compilable/test9613.d
  3ff4d56cc46fe9c375e27a925753cb21  gcc/testsuite/gdc.test/compilable/test9639.d
! 514daa8f1e789fd699950ff774394fad  gcc/testsuite/gdc.test/compilable/test9672.d
! 6d9250e1027b43b62079b6fe6ffabbba  gcc/testsuite/gdc.test/compilable/test9692.d
  4e8c514f4c47e8cc668194d301fadc34  gcc/testsuite/gdc.test/compilable/test9692a.d
! 1cd312217e19fd4607b8b9bcd3638aef  gcc/testsuite/gdc.test/compilable/test9701.d
! 7cb4176d59e5ac4d838f86e21113ca02  gcc/testsuite/gdc.test/compilable/test9766.d
! 3fbf8788ccc5004755c02600d5cfe84d  gcc/testsuite/gdc.test/compilable/test9818.d
! 2bca302b34bae8ac0eb7ebc7c8ffa443  gcc/testsuite/gdc.test/compilable/test9919.d
  1d7f3d565a0c12a7ff5e38e9de9d6e9b  gcc/testsuite/gdc.test/compilable/testDIP37.d
  b5045ee9241fe56808a442eda502f850  gcc/testsuite/gdc.test/compilable/testDIP37_10302.d
  cd9664381d4f2ad5fbc9a66fe9181ece  gcc/testsuite/gdc.test/compilable/testDIP37_10354.d
  e420705f48ae28346e1d049a442dc609  gcc/testsuite/gdc.test/compilable/testDIP37_10421.d
! 480977e14b349d66a15b5dd3df48a007  gcc/testsuite/gdc.test/compilable/testDIP37a.d
  0ad27aebcba2369d32c2ab7918cf7ee0  gcc/testsuite/gdc.test/compilable/testDIP42.d
! b039ed34d78c76577d4ea989edeb72e0  gcc/testsuite/gdc.test/compilable/testInference.d
! 0a45f87b5748895168a16265ae526c06  gcc/testsuite/gdc.test/compilable/testVRP.d
  4f38613138feda91b158dbc10e9dcaf8  gcc/testsuite/gdc.test/compilable/testcheckimports.d
! 884fae2d3a2e79db6286f95ee76e24a1  gcc/testsuite/gdc.test/compilable/testcontracts.d
! 90ae881afba9b91b8b4855da3ef811d4  gcc/testsuite/gdc.test/compilable/testexpression.d
  165adaaca3d4cb680db8e8f7bef830af  gcc/testsuite/gdc.test/compilable/testfptr.d
! b1f00986c318bad4926fd341d2cddeaf  gcc/testsuite/gdc.test/compilable/testfwdref.d
! be4b0575ef72178d5220ca3ab9c10fd1  gcc/testsuite/gdc.test/compilable/testheader1.d
! c02ffc0ac9a2929e687a5fa20f6baf7b  gcc/testsuite/gdc.test/compilable/testheader12567a.d
! 39dce732f6bc37776f5b165a305546b3  gcc/testsuite/gdc.test/compilable/testheader12567b.d
! 5bb26e9177be0f9d361403d11f62dcc8  gcc/testsuite/gdc.test/compilable/testheader1i.d
! eaea9e80d91cc01ef5a2c338e225ff2b  gcc/testsuite/gdc.test/compilable/testheader2.d
! f85296b1f140375c5d3355992943aea6  gcc/testsuite/gdc.test/compilable/testheader2i.d
! 69ab374cfa1f79747c6989ce7595abb9  gcc/testsuite/gdc.test/compilable/testheader3.d
! 00df08f9c653e9173d6f89d015ec3de9  gcc/testsuite/gdc.test/compilable/testheaderudamodule.d
! 4b16b0ed610cddaa5b3401be80c1ff09  gcc/testsuite/gdc.test/compilable/testimport12242.d
! 9043c333eeb6c581f7a20b1d3f1ec095  gcc/testsuite/gdc.test/compilable/testparse.d
! 46ad3f53efb478e3376d36fff355d92a  gcc/testsuite/gdc.test/compilable/testpostblit.d
! 592a4f2a9e7be0ac1471129c052102f0  gcc/testsuite/gdc.test/compilable/testprofile.d
! cd43d03de3e15e318db4c71d6e402784  gcc/testsuite/gdc.test/compilable/traits.d
! bd29edbff2b2d0dcd61f096594c27945  gcc/testsuite/gdc.test/compilable/uda.d
! 7b0e202f2e54c802141cc3314ac85995  gcc/testsuite/gdc.test/compilable/udamodule1.d
! 556081df6d43b7b6d9d8c44cb3eaf053  gcc/testsuite/gdc.test/compilable/udamodule2.d
! ac993c7821afdba5c3660dcade468b06  gcc/testsuite/gdc.test/compilable/vcg-ast.d
  e39d851e2d6df0fb0a228237d9973bdc  gcc/testsuite/gdc.test/compilable/verrors_spec.d
! 8501fa186f37976f8888700c3d696473  gcc/testsuite/gdc.test/compilable/vgc1.d
! 542cbbb9d759e67dee5c8f6c8a54264f  gcc/testsuite/gdc.test/compilable/vgc2.d
! 85fb914b754fd85993fe5ce8255c6ba3  gcc/testsuite/gdc.test/compilable/vgc3.d
! 864e8c030bf971afa8a907d9e654b7ed  gcc/testsuite/gdc.test/compilable/warn3882.d
! 165b5fdab9bfa182ce553a03584f5525  gcc/testsuite/gdc.test/fail_compilation/aacmp10381.d
  e309e5ed61e9e05b734a04331138794f  gcc/testsuite/gdc.test/fail_compilation/b12504.d
! cadd7253a279f5f74bd2c2088d510cde  gcc/testsuite/gdc.test/fail_compilation/b15875.d
  7ea1134efd7ddebf95db3eff5f8333d7  gcc/testsuite/gdc.test/fail_compilation/b17285.d
! 51a73ecc50fe699c938601ae63a650f0  gcc/testsuite/gdc.test/fail_compilation/b19691.d
! 7eaa48ecc27d9b5a7a868298478cd439  gcc/testsuite/gdc.test/fail_compilation/b19691e.d
  b53cb85b8cc301a3c81e4d559b329709  gcc/testsuite/gdc.test/fail_compilation/b19717.d
! 7054708c6f3abd7556490910fdefb8dd  gcc/testsuite/gdc.test/fail_compilation/b19717a.d
! 7364127e88c423b986480406feabefb1  gcc/testsuite/gdc.test/fail_compilation/b3841.d
! d1db25cf163ece2931f42ad49d0f807d  gcc/testsuite/gdc.test/fail_compilation/bug15613.d
! 181ad5754284edd966371d536b78a9d3  gcc/testsuite/gdc.test/fail_compilation/bug16165.d
  39ffa560217f81dec6d2733547b17845  gcc/testsuite/gdc.test/fail_compilation/bug4283.d
! d4325d85a0c155bd17755c5f500c4f3f  gcc/testsuite/gdc.test/fail_compilation/bug5.d
! b2649fdb47e46ab936f48bc5e4c40ebf  gcc/testsuite/gdc.test/fail_compilation/bug5b.d
! 7c8f70d1c1a7f21bc86a696e3baa5fbb  gcc/testsuite/gdc.test/fail_compilation/bug8150a.d
! ba5d1dc33a86fad78224b10af10e8845  gcc/testsuite/gdc.test/fail_compilation/bug8150b.d
! a01edcbcb98605c3a277d6b0878877c6  gcc/testsuite/gdc.test/fail_compilation/bug8891.d
! 637f674b209b15267168f701b31413ff  gcc/testsuite/gdc.test/fail_compilation/bug9631.d
  1942044f0f053eea8fc8572c50ee4fe1  gcc/testsuite/gdc.test/fail_compilation/cerrors.d
! 3929976df9435672ca8cad46466d7cb6  gcc/testsuite/gdc.test/fail_compilation/checkimports2a.d
! 523e257c894dc949d7620a563551b9a2  gcc/testsuite/gdc.test/fail_compilation/checkimports2b.d
! 623eb3428893616ed5edb78badd0a103  gcc/testsuite/gdc.test/fail_compilation/checkimports2c.d
  251a02d3dfb01ccd8bb885928ff25722  gcc/testsuite/gdc.test/fail_compilation/chkformat.d
! 751f2fba95db8acf8ccd0b4c8111d7d4  gcc/testsuite/gdc.test/fail_compilation/circ10280.d
! 783eaa9058efd0648a15fb96912011f2  gcc/testsuite/gdc.test/fail_compilation/class1.d
! a05cfe065e90eab65304e944c301021e  gcc/testsuite/gdc.test/fail_compilation/class2.d
! 32aac86bd8c4d94a295343aa30605f39  gcc/testsuite/gdc.test/fail_compilation/commaexp.d
! 114172cc5992eea9dd53e01013f8efe0  gcc/testsuite/gdc.test/fail_compilation/cppeh1.d
  928d45bd54111a5e63e6cbd42dc55481  gcc/testsuite/gdc.test/fail_compilation/cppeh2.d
! 778f3466ba1a524e911c1f3c0df5cd7e  gcc/testsuite/gdc.test/fail_compilation/cppmangle.d
! 09fafa0fc724c1d36a8985045b670632  gcc/testsuite/gdc.test/fail_compilation/ctfe10989.d
! c6d86b9bae7d2bff366217de79367270  gcc/testsuite/gdc.test/fail_compilation/ctfe10995.d
! 357f62f9cbecbe56f3283e9667af2311  gcc/testsuite/gdc.test/fail_compilation/ctfe11467.d
! f5c606a42832d4aa84770ed17be7798f  gcc/testsuite/gdc.test/fail_compilation/ctfe13612.d
! 53a49c9bcadad35a379350cd27a130ec  gcc/testsuite/gdc.test/fail_compilation/ctfe14207.d
! 101b10397d2639b7166dc610af6cc201  gcc/testsuite/gdc.test/fail_compilation/ctfe14465.d
! 8afb15149a87b2b17985a37463d74ff4  gcc/testsuite/gdc.test/fail_compilation/ctfe14731.d
  b0b58282b0fe3f3fe68b280aefebbf28  gcc/testsuite/gdc.test/fail_compilation/ctypes.d
  2cf4b4d38bcfec6baeb522b946354879  gcc/testsuite/gdc.test/fail_compilation/cwords.d
! 3d5988e91acb9d78eebeb8e2cdf5f998  gcc/testsuite/gdc.test/fail_compilation/depmsg.d
! 9f788ab4607f4e1ee511c8d954cad5cc  gcc/testsuite/gdc.test/fail_compilation/depmsg15814.d
! 34e13247eb1b41c22be4bea0ae4bf50e  gcc/testsuite/gdc.test/fail_compilation/depmsg15815.d
! ac6c56f06af1d3e5d294f6ccb9fdce3a  gcc/testsuite/gdc.test/fail_compilation/deprecate1553.d
! 26a3c86d92fc4588f263f873e2160086  gcc/testsuite/gdc.test/fail_compilation/deprecated6760.d
! f0a124358880c8247491b591c08b7151  gcc/testsuite/gdc.test/fail_compilation/diag10089.d
! 3fcd1e3331ac05c834f6cd8f191a668c  gcc/testsuite/gdc.test/fail_compilation/diag10099.d
! be8886bb9b20d8ff1c03f99ab846cf8c  gcc/testsuite/gdc.test/fail_compilation/diag10141.d
! 5e256dc04a7a87e77f9021d17d447b3e  gcc/testsuite/gdc.test/fail_compilation/diag10169.d
  c8b81e8d799716ffe482b951a7a5784c  gcc/testsuite/gdc.test/fail_compilation/diag10221.d
  95a3eab7c2b730bb39cc59728912d49b  gcc/testsuite/gdc.test/fail_compilation/diag10221a.d
! 6c58693349876052c7c23d66b24c8366  gcc/testsuite/gdc.test/fail_compilation/diag10319.d
! 96b973d666f57e35a415efff263ac306  gcc/testsuite/gdc.test/fail_compilation/diag10327.d
  8c5aee5c8821623c5fa500cc7b794ab5  gcc/testsuite/gdc.test/fail_compilation/diag10359.d
! 7126236324d78eaaae0b3addc201bd48  gcc/testsuite/gdc.test/fail_compilation/diag10405.d
! e9c199ee3e86b7d4bfcafef42365c085  gcc/testsuite/gdc.test/fail_compilation/diag10415.d
! 386f280432797fab48aedea3ccaebbfb  gcc/testsuite/gdc.test/fail_compilation/diag10688.d
! ce38b49eaf43828c0aa2bcd1e0f8801c  gcc/testsuite/gdc.test/fail_compilation/diag10768.d
! e11f79482790466829ff036cf61cd455  gcc/testsuite/gdc.test/fail_compilation/diag10783.d
! 274394544f75382e6a86ccc77cfe9c71  gcc/testsuite/gdc.test/fail_compilation/diag10792.d
! 34fb6e4f80871c34dc86a021ff4c1392  gcc/testsuite/gdc.test/fail_compilation/diag10805.d
! c18a830b4355957350394d4c68c7af35  gcc/testsuite/gdc.test/fail_compilation/diag10862.d
! cbcbf060989a0fddd6264a54c8496037  gcc/testsuite/gdc.test/fail_compilation/diag10926.d
! 60f2379594ff503fe1cd5ea954597ea4  gcc/testsuite/gdc.test/fail_compilation/diag10984.d
! 23b4515f1fff2c9c2cdd0d1b4feca809  gcc/testsuite/gdc.test/fail_compilation/diag11078.d
! 3b4dc1eb6c8e2f6ec3b697ac59aeed0f  gcc/testsuite/gdc.test/fail_compilation/diag11132.d
! cf104d825ade5b99053449d979f19618  gcc/testsuite/gdc.test/fail_compilation/diag11198.d
  085c1cdc700e65be81dd4c7bf52294cb  gcc/testsuite/gdc.test/fail_compilation/diag11423.d
! 265f0be0c2646e8eb40f90d9207ffe36  gcc/testsuite/gdc.test/fail_compilation/diag11425.d
! 722e15bee82564c4cefbbaa3e7df24bf  gcc/testsuite/gdc.test/fail_compilation/diag11727.d
! c104a94bcb7e8272e34f738041148a9a  gcc/testsuite/gdc.test/fail_compilation/diag11756.d
  9b296e312459378057729151fc0b586b  gcc/testsuite/gdc.test/fail_compilation/diag11759.d
! 2ea870d94a06a87180eac8b88dfbe91f  gcc/testsuite/gdc.test/fail_compilation/diag11769.d
  cd21f58b757a4597aecb16109e045703  gcc/testsuite/gdc.test/fail_compilation/diag11819a.d
! 9445d74f8c370d3f7115d161973356cb  gcc/testsuite/gdc.test/fail_compilation/diag11819b.d
  252b37d75156f0fead6921ecc03b669c  gcc/testsuite/gdc.test/fail_compilation/diag11840.d
! 3f37b6ce41405fc8cb25ee21e577a97c  gcc/testsuite/gdc.test/fail_compilation/diag12063.d
! 065eb8f96938f2cac2e967f3a58205f5  gcc/testsuite/gdc.test/fail_compilation/diag12124.d
! e9c5b8599f55e5cea4ba4ada24203979  gcc/testsuite/gdc.test/fail_compilation/diag12280.d
! 9b69fb1b775c26bbb342b8bd77127a52  gcc/testsuite/gdc.test/fail_compilation/diag12312.d
! 1a47ad61a74811af4d7e192190512095  gcc/testsuite/gdc.test/fail_compilation/diag12380.d
  5f628747633cc61c61aae674fa0ce146  gcc/testsuite/gdc.test/fail_compilation/diag12432.d
! e8d57014f756c27074e1ebe8cbb265aa  gcc/testsuite/gdc.test/fail_compilation/diag12480.d
! a4de2bf9af47ed4d7fdd266203bfbafa  gcc/testsuite/gdc.test/fail_compilation/diag12487.d
! 989a4d6cd67c1647fc801a51498c6c6a  gcc/testsuite/gdc.test/fail_compilation/diag12640.d
! 398adf76598b87a8d92e6201cf6cd859  gcc/testsuite/gdc.test/fail_compilation/diag12678.d
! 66ca0a71d1aad362cd2a53e3041a9489  gcc/testsuite/gdc.test/fail_compilation/diag12777.d
! 376c3dfccc9be2bd2ed8ca8ea488b5d1  gcc/testsuite/gdc.test/fail_compilation/diag12829.d
! 1b9ea132d4807524a36e22ef5960d47b  gcc/testsuite/gdc.test/fail_compilation/diag13028.d
  26a273e7e974918905dcd941ce0a6b28  gcc/testsuite/gdc.test/fail_compilation/diag13082.d
  d4bdce5da010bdb608d7a34a8a7f5740  gcc/testsuite/gdc.test/fail_compilation/diag13142.d
! 01b5b2f4a8433c18833918645a2454f2  gcc/testsuite/gdc.test/fail_compilation/diag13281.d
! 9e06a2aa3eade1a21a1d4580863c048e  gcc/testsuite/gdc.test/fail_compilation/diag13320.d
! 5bfc2c5de1c50484b58bb65be91ae26c  gcc/testsuite/gdc.test/fail_compilation/diag13333.d
! 6b657674c7cffb2d8d840a5a36f48276  gcc/testsuite/gdc.test/fail_compilation/diag13528.d
  31eaec2f7799d785b3d295c2f8f8fdc7  gcc/testsuite/gdc.test/fail_compilation/diag13609a.d
! 35da4f3bcd25a20c9a4c04528cec0c3e  gcc/testsuite/gdc.test/fail_compilation/diag13609b.d
! 46347317ea8b0ac85a373a7fe8c58d77  gcc/testsuite/gdc.test/fail_compilation/diag13787.d
! d1109c50535decd926d844be57e7b712  gcc/testsuite/gdc.test/fail_compilation/diag13884.d
! c4cdaf06fffcfa586503da4d3099cb52  gcc/testsuite/gdc.test/fail_compilation/diag13942.d
! 697a19d292dd0587388de3dccb56897b  gcc/testsuite/gdc.test/fail_compilation/diag14102.d
! ce75690c075d6c67405d35cc916c7b49  gcc/testsuite/gdc.test/fail_compilation/diag14163.d
! a3e3360f0799e7d0aac67e26d025341d  gcc/testsuite/gdc.test/fail_compilation/diag14235.d
! 320d8294d25be95713eaa5ea085e0038  gcc/testsuite/gdc.test/fail_compilation/diag14818.d
! 1791cf597c2b3c1b2b4655ad53d73991  gcc/testsuite/gdc.test/fail_compilation/diag14875.d
! 712045c6a6914a6a0c2bdf2f55325134  gcc/testsuite/gdc.test/fail_compilation/diag14876.d
  5c4ad04d22fbe55f5b07497287ced691  gcc/testsuite/gdc.test/fail_compilation/diag15001.d
  953302c17eef47eba4fc4c5c3ee18f2b  gcc/testsuite/gdc.test/fail_compilation/diag15186.d
! 4dc3bdcfad28078748f76a9b048d3d28  gcc/testsuite/gdc.test/fail_compilation/diag15209.d
  00c5d18cc76c3f36c5504cb23eee10ce  gcc/testsuite/gdc.test/fail_compilation/diag15340.d
! 7f1c0016962fbb95926be79a32b5c1e6  gcc/testsuite/gdc.test/fail_compilation/diag15411.d
  f28f753c50d24ae45fd4aacf60d88ef4  gcc/testsuite/gdc.test/fail_compilation/diag1566.d
! 9443f7c9e81e70ca924642c2c1f64bfa  gcc/testsuite/gdc.test/fail_compilation/diag15669.d
! dc9e1a69be21c572b3468fb4fc2ae52e  gcc/testsuite/gdc.test/fail_compilation/diag15713.d
! 6da4348cf0dd0ce7e748c85e7d714a33  gcc/testsuite/gdc.test/fail_compilation/diag15974.d
! 5a15dca4b0f5081d8793d0fd654d5f74  gcc/testsuite/gdc.test/fail_compilation/diag16271.d
! ea865e595b6b6b9bc2d5067d26b4e2df  gcc/testsuite/gdc.test/fail_compilation/diag16499.d
  ca21748c3c8002f58049b5f03aa8eb8b  gcc/testsuite/gdc.test/fail_compilation/diag16976.d
! ae8ac2276991a9f8bb3af183489e1e1d  gcc/testsuite/gdc.test/fail_compilation/diag16977.d
! 0a1c82490406def349d39c7ddbe4d795  gcc/testsuite/gdc.test/fail_compilation/diag1730.d
  ef13cff5613132d38394dfcda321198a  gcc/testsuite/gdc.test/fail_compilation/diag19196.d
! 32e09f9ae076959b7f2b34cd846b0c73  gcc/testsuite/gdc.test/fail_compilation/diag2452.d
! 517d1e9e0940f602f5a563824fbc27f6  gcc/testsuite/gdc.test/fail_compilation/diag3013.d
! 9778aca4760877ea518792dd4c93967f  gcc/testsuite/gdc.test/fail_compilation/diag3438.d
  f53190991d6bad04d5f8507c6bcddfe8  gcc/testsuite/gdc.test/fail_compilation/diag3438b.d
! 3aa37ae135ea05b1cf30cfe8df0c9baa  gcc/testsuite/gdc.test/fail_compilation/diag3672.d
! d62ffa8ae29688d86f809e068c1fee00  gcc/testsuite/gdc.test/fail_compilation/diag3672a.d
  2f37bbfbcaf32e6965aa587cda1caa6f  gcc/testsuite/gdc.test/fail_compilation/diag3673.d
! 5d6a57cc8a30f5755e25911b6a0fe686  gcc/testsuite/gdc.test/fail_compilation/diag3869.d
! c6f88ac2b17f350c6afa8058079e1732  gcc/testsuite/gdc.test/fail_compilation/diag3913.d
! 6a32e4051d5f2b9bffb42c0bea58c597  gcc/testsuite/gdc.test/fail_compilation/diag4479.d
! 56c5ab76e14a09147a3314264f71b565  gcc/testsuite/gdc.test/fail_compilation/diag4528.d
  8f15df10bf4dd96d8df274ea196b7a8d  gcc/testsuite/gdc.test/fail_compilation/diag4540.d
! c20e04446c34936beb2b3294bc31d86a  gcc/testsuite/gdc.test/fail_compilation/diag4596.d
! c9675022498b5df08879273d86225f5c  gcc/testsuite/gdc.test/fail_compilation/diag5385.d
! b70ea9f35f18eadac688ba3849b96cf9  gcc/testsuite/gdc.test/fail_compilation/diag5450.d
! 58cf1fc39fb3294959bd75353ae3b1f5  gcc/testsuite/gdc.test/fail_compilation/diag6373.d
! 42440cf2be72343be2c600be4a709c4d  gcc/testsuite/gdc.test/fail_compilation/diag6539.d
! 878c5be4362c21a989a0850a1a6973e6  gcc/testsuite/gdc.test/fail_compilation/diag6677.d
! c086ea45405b6603b13eeca9af2d1140  gcc/testsuite/gdc.test/fail_compilation/diag6699.d
! 5e42a426ae144068e622bb1263507476  gcc/testsuite/gdc.test/fail_compilation/diag6707.d
  14fddc27a18ba83404ef2ca7bb6f804b  gcc/testsuite/gdc.test/fail_compilation/diag6796.d
! 7f39ad120aa3c0b9387c882e0180283f  gcc/testsuite/gdc.test/fail_compilation/diag7050a.d
! 55cc784b0a5c86b54fda0513b56c7498  gcc/testsuite/gdc.test/fail_compilation/diag7050b.d
! 811f42590c60fcde329eeda820618dd8  gcc/testsuite/gdc.test/fail_compilation/diag7050c.d
! 2a807385893352e3a70ee8d881c1d712  gcc/testsuite/gdc.test/fail_compilation/diag7420.d
! a7881c3dce5c714d52388f5d23b185b3  gcc/testsuite/gdc.test/fail_compilation/diag7477.d
! 54d178f044ad4843c820ed845d2f71a2  gcc/testsuite/gdc.test/fail_compilation/diag7747.d
! 5a5e46c889479c50135300d3dd98b59a  gcc/testsuite/gdc.test/fail_compilation/diag7998.d
! c7fcd05d2804c1dfa75c728d286c080e  gcc/testsuite/gdc.test/fail_compilation/diag8101.d
! b92258e3db380750a6bb932e580983e4  gcc/testsuite/gdc.test/fail_compilation/diag8101b.d
! 78c2f3b43e50bbb906e6a1aa08cf6d1b  gcc/testsuite/gdc.test/fail_compilation/diag8178.d
! e2135e452d09f1a92e479f9486ce30f2  gcc/testsuite/gdc.test/fail_compilation/diag8318.d
! 16a5614c9da2d0995552e19114ed9074  gcc/testsuite/gdc.test/fail_compilation/diag8425.d
! 85a583cdfd0e69fbd6628943f3bc1c09  gcc/testsuite/gdc.test/fail_compilation/diag8510.d
! a50164e71d7286b36d17cab9fe51bc84  gcc/testsuite/gdc.test/fail_compilation/diag8559.d
! 4d8b557c612d460c70433f5617e31f48  gcc/testsuite/gdc.test/fail_compilation/diag8648.d
! 964ea24cafeb9a5bd2fadaf4dc887668  gcc/testsuite/gdc.test/fail_compilation/diag8697.d
! f19d1bf173992410c5ab3d70af2c9af4  gcc/testsuite/gdc.test/fail_compilation/diag8714.d
! 079f5e2eaae6cee3f360e6f9712c672a  gcc/testsuite/gdc.test/fail_compilation/diag8777.d
! 427d9c068370aa8247ffe31430982af7  gcc/testsuite/gdc.test/fail_compilation/diag8787.d
  ff3b86a24c6b08b8abda906070e72c91  gcc/testsuite/gdc.test/fail_compilation/diag8825.d
  2f7ecdc871c982df25cc4452eb37393d  gcc/testsuite/gdc.test/fail_compilation/diag8892.d
! 3210c28d4b192e7332849a3459220210  gcc/testsuite/gdc.test/fail_compilation/diag8894.d
! d3cba920f52c3ccf38052978ff86fab6  gcc/testsuite/gdc.test/fail_compilation/diag8928.d
! ac3ec4d2ed51741b4b3ab4a9ef25af0a  gcc/testsuite/gdc.test/fail_compilation/diag9004.d
! 14362dd579412ff436b0d4dddbb0fe0b  gcc/testsuite/gdc.test/fail_compilation/diag9148.d
! 9190d4dff81af90e14026d6e2dae3f51  gcc/testsuite/gdc.test/fail_compilation/diag9191.d
! 0e11f0286489553bd55fb50cf14bd7a5  gcc/testsuite/gdc.test/fail_compilation/diag9210a.d
! e6bb7b4da5af34a01115f02c4e928a7a  gcc/testsuite/gdc.test/fail_compilation/diag9247.d
  87826ac2f6bbb76e4f3765ad1364c54d  gcc/testsuite/gdc.test/fail_compilation/diag9250.d
! 0c16368cc122b8ba4d4af723f99ec1a6  gcc/testsuite/gdc.test/fail_compilation/diag9312.d
! a785981afc0b85ecd283c035a3a44e33  gcc/testsuite/gdc.test/fail_compilation/diag9357.d
! 5105a5f713f245b89d70bb3933f2d66c  gcc/testsuite/gdc.test/fail_compilation/diag9358.d
! c6efdcf837dab4d22f642d63f0f5bebf  gcc/testsuite/gdc.test/fail_compilation/diag9398.d
! 0ac969e3b77dbf8b6f875ea4359af503  gcc/testsuite/gdc.test/fail_compilation/diag9420.d
! 942b6b76690d73fd8af0fc6859bdce23  gcc/testsuite/gdc.test/fail_compilation/diag9451.d
  c71eae763fc17f4bb9c9edc5c73097ab  gcc/testsuite/gdc.test/fail_compilation/diag9479.d
  54b1b2af358aa461b393edfb0bf136e8  gcc/testsuite/gdc.test/fail_compilation/diag9574.d
! 9ebf8a7aa39b35993b70b9a41795b04f  gcc/testsuite/gdc.test/fail_compilation/diag9620.d
! 3df6965086916c4ae4e6a8364cb3c192  gcc/testsuite/gdc.test/fail_compilation/diag9635.d
! 6f51778e60322a07eb2d12778154a291  gcc/testsuite/gdc.test/fail_compilation/diag9679.d
  e6846c6e7f24e0dbf859ddb4ee3797da  gcc/testsuite/gdc.test/fail_compilation/diag9765.d
! 5da62441b25b04df8526e213e81e9883  gcc/testsuite/gdc.test/fail_compilation/diag9831.d
! 118ea086b063a6e14d0eef1542027ed4  gcc/testsuite/gdc.test/fail_compilation/diag9861.d
! 46729addc061505e9534a00dd4293d8f  gcc/testsuite/gdc.test/fail_compilation/diag9880.d
! bff2e05f6ce70f412b4cdd42560d1f9e  gcc/testsuite/gdc.test/fail_compilation/diag9961.d
! 55444ed54e836a61a5af4cad4480f81e  gcc/testsuite/gdc.test/fail_compilation/diag_cstyle.d
! 27cc458e4846804778d0bef21a8dd644  gcc/testsuite/gdc.test/fail_compilation/diag_err1.d
! 25f57272e57e42e305a94887bb213791  gcc/testsuite/gdc.test/fail_compilation/dip22a.d
! 8e453290c538ca206e6e30cbe2ce44b3  gcc/testsuite/gdc.test/fail_compilation/dip22b.d
! d51b723eb670fcb04908fda81144e76e  gcc/testsuite/gdc.test/fail_compilation/dip22e.d
  342f6526dab7f6966b6f04965f84d2cc  gcc/testsuite/gdc.test/fail_compilation/disable.d
  103c14cc4470816407d25ef479870c5f  gcc/testsuite/gdc.test/fail_compilation/e7804_1.d
  ebd624415ce51467f6282d2f66d82e6b  gcc/testsuite/gdc.test/fail_compilation/e7804_2.d
! b9a2e48a61e57647b438f17a3416d327  gcc/testsuite/gdc.test/fail_compilation/enum9921.d
  1aa4aa08b66f74d0f0cdb5f71878c2f3  gcc/testsuite/gdc.test/fail_compilation/enum_init.d
- 91827475c22bb655e1204f7d9f6ec260  gcc/testsuite/gdc.test/fail_compilation/extra-files/a14446.d
  f76cf9db0833afa5687645d4c74a9897  gcc/testsuite/gdc.test/fail_compilation/extra-files/bar11453.d
  99acc5a7305edac00837d2641c2f1bb9  gcc/testsuite/gdc.test/fail_compilation/extra-files/foo11453.d
  84bebd871a01f556191f22e1fa9eace9  gcc/testsuite/gdc.test/fail_compilation/extra-files/minimal/object.d
! 989822bfa536330726e052ee3bf32a19  gcc/testsuite/gdc.test/fail_compilation/fail10.d
! 0eee2561c3e30f08c66c6e2609b66f76  gcc/testsuite/gdc.test/fail_compilation/fail100.d
! aed89b6b064d4ac8872e40f1af311262  gcc/testsuite/gdc.test/fail_compilation/fail10082.d
! fe93b47af0556f19430462ae5d9a09da  gcc/testsuite/gdc.test/fail_compilation/fail101.d
! 9b01f9a9519e51677acb44e140ec1f2f  gcc/testsuite/gdc.test/fail_compilation/fail10102.d
! bf35ef2030fdaa20c7a1bcaafb5f990c  gcc/testsuite/gdc.test/fail_compilation/fail10115.d
  a883dee9cdfef4dfaf5f5fb50b0e3916  gcc/testsuite/gdc.test/fail_compilation/fail10207.d
! f884ac59e56bad19a0b84c678f702a4b  gcc/testsuite/gdc.test/fail_compilation/fail10254.d
! 61844dda8a581fb611a94dd8fdc3e1ce  gcc/testsuite/gdc.test/fail_compilation/fail10277.d
  479830a391e47ca5d5fde21edae925e0  gcc/testsuite/gdc.test/fail_compilation/fail10285.d
! bdbb70051eb75a7dadb7dddec6b7d105  gcc/testsuite/gdc.test/fail_compilation/fail10299.d
  dd17a2837ac6f2f2d6b2c8561c63a3b6  gcc/testsuite/gdc.test/fail_compilation/fail10346.d
! 2d690cd24a1d4b001b51f7c95d4890c6  gcc/testsuite/gdc.test/fail_compilation/fail104.d
! e2fb76b7a5c3cc0a69d227c7265a746b  gcc/testsuite/gdc.test/fail_compilation/fail10481.d
! 907bda1bcbe9ef7a5b11900116f46e8f  gcc/testsuite/gdc.test/fail_compilation/fail105.d
! 83012aeed647d07800ec3d4a5d7217bf  gcc/testsuite/gdc.test/fail_compilation/fail10528.d
! 0287c63489050a2ce38f73178cd5cd5e  gcc/testsuite/gdc.test/fail_compilation/fail10534.d
! 3b9d07e512937acc4080d26f1d381d0e  gcc/testsuite/gdc.test/fail_compilation/fail106.d
! dbd4c4590b873ceea8eda4beb8150fac  gcc/testsuite/gdc.test/fail_compilation/fail10630.d
! b7e129895d0278c247ddbe13fc833544  gcc/testsuite/gdc.test/fail_compilation/fail10666.d
! af0f9a52ce56142f277d0a5702b8b807  gcc/testsuite/gdc.test/fail_compilation/fail109.d
! 23dc02abd6588e6f374160b7137a2800  gcc/testsuite/gdc.test/fail_compilation/fail10905.d
! 26dbb859f5696cf64eafd32add573569  gcc/testsuite/gdc.test/fail_compilation/fail10947.d
! a9f4e9edc20a9b4101ecb7b6089adda2  gcc/testsuite/gdc.test/fail_compilation/fail10964.d
! d3fa759c656ec8e814fb262a36250543  gcc/testsuite/gdc.test/fail_compilation/fail10968.d
! 9bf02ffb4644e509d508825a2f1b6825  gcc/testsuite/gdc.test/fail_compilation/fail10980.d
! 3b16ab5be8f8e75539f518a7a11a9ba9  gcc/testsuite/gdc.test/fail_compilation/fail11.d
! 2550286b54138049d3fcc57a03723ab2  gcc/testsuite/gdc.test/fail_compilation/fail110.d
! d057ea2c224ad28d9e386ad710506194  gcc/testsuite/gdc.test/fail_compilation/fail11038.d
  10f619ddec93bf8424836e0ce9b45879  gcc/testsuite/gdc.test/fail_compilation/fail11042.d
! faad6778b0c07ebf55e8f6f9ac7f5ebf  gcc/testsuite/gdc.test/fail_compilation/fail111.d
! 84b3e54ce1cb4631b86336fab1a69229  gcc/testsuite/gdc.test/fail_compilation/fail11125.d
! 9b903a746fc73eff4bafecb9748148fb  gcc/testsuite/gdc.test/fail_compilation/fail11151.d
! 68e580caef482eaeea4685a01b4712f7  gcc/testsuite/gdc.test/fail_compilation/fail11163.d
! f27702c0e4315598dcb6acff054cd743  gcc/testsuite/gdc.test/fail_compilation/fail113.d
! 360c722d2f09842c3cd312be5347d409  gcc/testsuite/gdc.test/fail_compilation/fail11355.d
! 0b86d5ed89a819877881ba8e4a7479be  gcc/testsuite/gdc.test/fail_compilation/fail11375.d
! d12e14c5df604e4f99f936af7b1163d3  gcc/testsuite/gdc.test/fail_compilation/fail114.d
  9e4a2ee34878d003dc19b1519c00de09  gcc/testsuite/gdc.test/fail_compilation/fail11426.d
! d2ab2338c87f132cca095b0e72b61e61  gcc/testsuite/gdc.test/fail_compilation/fail11445.d
! 50a8707489dc6115c13045edfc4c8a75  gcc/testsuite/gdc.test/fail_compilation/fail11453a.d
! f1f3661f08a410ac2a369feb71652610  gcc/testsuite/gdc.test/fail_compilation/fail11453b.d
  7d13b7056acf7ed36a57d82f32b30f31  gcc/testsuite/gdc.test/fail_compilation/fail115.d
  d6a0583cdebb2f5274a34d9f68574519  gcc/testsuite/gdc.test/fail_compilation/fail11503a.d
  03dcaff82193c60ec8aa4fbb68cd344b  gcc/testsuite/gdc.test/fail_compilation/fail11503b.d
! a76de98193667dd400f93e1ac81ee18c  gcc/testsuite/gdc.test/fail_compilation/fail11503c.d
! 7131a8d869852a64abcf46dd328cef32  gcc/testsuite/gdc.test/fail_compilation/fail11503d.d
! dac047c356ccd0e4e90de163db7738f9  gcc/testsuite/gdc.test/fail_compilation/fail11510.d
! 9717e3421b2fe1c6de3b04f978f0eeee  gcc/testsuite/gdc.test/fail_compilation/fail11532.d
! 3ba958c340acb67a20e3fdb20c032da7  gcc/testsuite/gdc.test/fail_compilation/fail11542.d
! 0db1e812fe769de2a7b12080dc110bdd  gcc/testsuite/gdc.test/fail_compilation/fail11545.d
! e434633765cd0c939e270836040c991a  gcc/testsuite/gdc.test/fail_compilation/fail11552.d
! 8d4b22ccacd6079d5888fb3c95ef42ce  gcc/testsuite/gdc.test/fail_compilation/fail11562.d
! 15faea3078336662daa9d318f2493869  gcc/testsuite/gdc.test/fail_compilation/fail11591b.d
! 418bcca9bf1e37cc8dbe037cdd4b3463  gcc/testsuite/gdc.test/fail_compilation/fail116.d
! acba3cd566c498acc0a4cc9dea839064  gcc/testsuite/gdc.test/fail_compilation/fail11653.d
! 579d106852d5aefc9ca94fb20e364bef  gcc/testsuite/gdc.test/fail_compilation/fail117.d
! 77e91dafc0efcec54d5a5c03d461963a  gcc/testsuite/gdc.test/fail_compilation/fail11717.d
! f4a6ef5aafe2a4002635a6e4959d92fc  gcc/testsuite/gdc.test/fail_compilation/fail11720.d
  a691b7855ffa66fe0d4d016977d36507  gcc/testsuite/gdc.test/fail_compilation/fail11746.d
! 92ecc334e4dcce81fa7eae90f799f4d9  gcc/testsuite/gdc.test/fail_compilation/fail11748.d
  c0c579cb086b8a2a634c0ab754c26a07  gcc/testsuite/gdc.test/fail_compilation/fail11751.d
! ac4d4b481c0ad8f2ec6dfc78c91ea777  gcc/testsuite/gdc.test/fail_compilation/fail118.d
! 5c42637b6e8b82263644c773f60c313d  gcc/testsuite/gdc.test/fail_compilation/fail12.d
! 3362cbf846ed59a299a4c6e4c7618d0b  gcc/testsuite/gdc.test/fail_compilation/fail120.d
  7bf72c637818e7f1de6be900e0fe70e8  gcc/testsuite/gdc.test/fail_compilation/fail12047.d
  bc29d8052e02438aec3b5f987d52ec37  gcc/testsuite/gdc.test/fail_compilation/fail121.d
! 83f0cd36f27a826b18ae6d4c70705ee9  gcc/testsuite/gdc.test/fail_compilation/fail122.d
! 5fb3a80358750cb6a9d61ac85a105f41  gcc/testsuite/gdc.test/fail_compilation/fail12236.d
! 53b7493bdd8ec81ad481850fa972df22  gcc/testsuite/gdc.test/fail_compilation/fail12255.d
! 2ce557912f65cbe8372d4218f6dc7f04  gcc/testsuite/gdc.test/fail_compilation/fail123.d
! cfa144d2148ba55b706d99f97b241b88  gcc/testsuite/gdc.test/fail_compilation/fail12378.d
! 9f3f3691096e6057c1846d928d0f7a5f  gcc/testsuite/gdc.test/fail_compilation/fail12390.d
! f18935b65bcc965bb77c5bb1f25dbade  gcc/testsuite/gdc.test/fail_compilation/fail124.d
! e4069e739af605d447565e9f685e5c77  gcc/testsuite/gdc.test/fail_compilation/fail12436.d
! 582173286a9114e5e32728cc3100aee0  gcc/testsuite/gdc.test/fail_compilation/fail125.d
! 5e798f418fba7c3cf4522b6764d2a5c7  gcc/testsuite/gdc.test/fail_compilation/fail126.d
  cdb3801b748621f73c5035160988a49f  gcc/testsuite/gdc.test/fail_compilation/fail12604.d
! 45d542c9d4ff4ff065279952ae109d8f  gcc/testsuite/gdc.test/fail_compilation/fail12622.d
! 85bdea69e898caa96aaa8c33d5ae587a  gcc/testsuite/gdc.test/fail_compilation/fail12636.d
! 52f836dc2441c51041a529fe6a418428  gcc/testsuite/gdc.test/fail_compilation/fail127.d
! 943cd70fd5ca14dc91389273d146b882  gcc/testsuite/gdc.test/fail_compilation/fail12744.d
! 048f9559d9e017c295a05d0f0f0d730b  gcc/testsuite/gdc.test/fail_compilation/fail12749.d
! 066a7d5057045d8694430451e3d99022  gcc/testsuite/gdc.test/fail_compilation/fail12809.d
! 5a2321cca0eaa3754f0002f94e0f3c17  gcc/testsuite/gdc.test/fail_compilation/fail129.d
! 485757c89bec4f43ed76ccd549242845  gcc/testsuite/gdc.test/fail_compilation/fail12901.d
! e4f560cd0fcbba8bc7b517cff3393bc1  gcc/testsuite/gdc.test/fail_compilation/fail12908.d
! 2f72c3485a7ff8719b68309536579e37  gcc/testsuite/gdc.test/fail_compilation/fail12932.d
! f5fe7ec35001df8f742393efdc1c7904  gcc/testsuite/gdc.test/fail_compilation/fail13064.d
! c46d169436ea44f4ab32bf20a00d5d8a  gcc/testsuite/gdc.test/fail_compilation/fail131.d
! 0ef703b98a9f9a83d8303ff6bb694a1a  gcc/testsuite/gdc.test/fail_compilation/fail13116.d
! 51cc4fe6233f45715a61d70d0f1e881b  gcc/testsuite/gdc.test/fail_compilation/fail13120.d
! ec0a25da2696db92b47e566fc7da7d81  gcc/testsuite/gdc.test/fail_compilation/fail13187.d
! 0c23ee83fdfbd183bb4185f4c63f1cde  gcc/testsuite/gdc.test/fail_compilation/fail132.d
! f606c099858fb58510fb6bcb212de4c3  gcc/testsuite/gdc.test/fail_compilation/fail13203.d
! b46fc2b781e8ed9bfc564b2acee00f91  gcc/testsuite/gdc.test/fail_compilation/fail133.d
! a503c5f30e2a175d47a663493be163da  gcc/testsuite/gdc.test/fail_compilation/fail13336a.d
! d5e63b38f46906bc4d73e108c41cbf4d  gcc/testsuite/gdc.test/fail_compilation/fail13336b.d
! 548005746bcbad9ce0b45ad0f9025401  gcc/testsuite/gdc.test/fail_compilation/fail134.d
! 4c69acb27222129d90e9ae21f116833b  gcc/testsuite/gdc.test/fail_compilation/fail13424.d
  6766e3fc0db269522156cb03e57090a4  gcc/testsuite/gdc.test/fail_compilation/fail13434_m32.d
  930d798796f39b693abdda8b1c7bae86  gcc/testsuite/gdc.test/fail_compilation/fail13434_m64.d
! d2bc4231f94c8fe8a5bbd778adc3ff1a  gcc/testsuite/gdc.test/fail_compilation/fail13498.d
! 8fa4b55d9451d0c0a3cc43f4e66c8282  gcc/testsuite/gdc.test/fail_compilation/fail13574.d
! 72714bbd1e73b949322aa5a6df469418  gcc/testsuite/gdc.test/fail_compilation/fail136.d
! eff70ae01aac046420e807cda59970e9  gcc/testsuite/gdc.test/fail_compilation/fail13601.d
! 12fdccc58d72285c8bbbde4110d0d331  gcc/testsuite/gdc.test/fail_compilation/fail13701.d
! dcc7cbf7a62aac156eb3a48ff03aa44e  gcc/testsuite/gdc.test/fail_compilation/fail13756.d
  7f637277f7409ea6e5315946be618ca9  gcc/testsuite/gdc.test/fail_compilation/fail13775.d
! ab41a67c547ee8795f5b9b0427ba73b4  gcc/testsuite/gdc.test/fail_compilation/fail139.d
! 914eb89db748f6ecc90cb9d21cbb052b  gcc/testsuite/gdc.test/fail_compilation/fail13902.d
  10554ee69c68fa02536edb00437cd248  gcc/testsuite/gdc.test/fail_compilation/fail14.d
! a832256c997e67cbe8d45f5bf24cf183  gcc/testsuite/gdc.test/fail_compilation/fail14089.d
! 1a009b231bf1f8f9b0ad7f25beb97cde  gcc/testsuite/gdc.test/fail_compilation/fail142.d
! 35d601003a228d3f331f8020100d9efa  gcc/testsuite/gdc.test/fail_compilation/fail14249.d
! f8f6333e13ac495c8765450862fd7664  gcc/testsuite/gdc.test/fail_compilation/fail143.d
! dec84ef379f80e8c27390f196330c2f4  gcc/testsuite/gdc.test/fail_compilation/fail14304.d
! 846277d0bf9b333418b7e3a3d7c6d8a8  gcc/testsuite/gdc.test/fail_compilation/fail144.d
! f97194d85d3d2809e6facc401c4a2440  gcc/testsuite/gdc.test/fail_compilation/fail14406.d
! debeaff0989635140919e8c44d128176  gcc/testsuite/gdc.test/fail_compilation/fail14407.d
! 3edbd1fcd9eb3cf3102720930f94a60b  gcc/testsuite/gdc.test/fail_compilation/fail14416.d
! 10c0a0eef40a058082323dbcb3bcd131  gcc/testsuite/gdc.test/fail_compilation/fail14486.d
! 09ebbf8c81859727c4e0a7e5157c0fd7  gcc/testsuite/gdc.test/fail_compilation/fail145.d
! 108ceeb926cf64971423895c0111ffeb  gcc/testsuite/gdc.test/fail_compilation/fail14554.d
! 37db39e3b52da5ed4f54b380b65f8855  gcc/testsuite/gdc.test/fail_compilation/fail14669.d
! 04e3bf315c63eadd6558c09830b3fb55  gcc/testsuite/gdc.test/fail_compilation/fail14965.d
! 6137d3caec53491d9b6e6339f866e97c  gcc/testsuite/gdc.test/fail_compilation/fail15.d
! 9501a26a2b18e8c31b773e2c9ae4c3d3  gcc/testsuite/gdc.test/fail_compilation/fail150.d
  1a2053870f325ede91510f97b2f7c640  gcc/testsuite/gdc.test/fail_compilation/fail15044.d
! e43fd15a1b559862ef0d489787f9252a  gcc/testsuite/gdc.test/fail_compilation/fail15089.d
! a4a67af09d85dfe9fc7f596b269e796a  gcc/testsuite/gdc.test/fail_compilation/fail15292.d
! ee555d183bee60d1164dc2bf7bdab95a  gcc/testsuite/gdc.test/fail_compilation/fail153.d
  8ffd2e63fb125b33d3573d667ed80e1f  gcc/testsuite/gdc.test/fail_compilation/fail15361.d
! b258f9a172f45991a836debcb211a6fc  gcc/testsuite/gdc.test/fail_compilation/fail154.d
! 92f1b2c170c4a6eb8614f570469b8d16  gcc/testsuite/gdc.test/fail_compilation/fail155.d
! b728f68cf59cb16478f76c8a24dec4f6  gcc/testsuite/gdc.test/fail_compilation/fail15535.d
! 42d649e99af9eb92977738b7d545fef8  gcc/testsuite/gdc.test/fail_compilation/fail15550.d
! 9e0a27136266b7b6bfe7ad99051ab0cf  gcc/testsuite/gdc.test/fail_compilation/fail156.d
! 351207afff6e4c511ff66681b91661cf  gcc/testsuite/gdc.test/fail_compilation/fail15616a.d
! 3bc41aa884c1c517a0678d26c71f832d  gcc/testsuite/gdc.test/fail_compilation/fail15616b.d
! b524201b8dc7b669f8fd808b1cbcb042  gcc/testsuite/gdc.test/fail_compilation/fail15626.d
! 869e666e1587f690b4c3d5acc48713b5  gcc/testsuite/gdc.test/fail_compilation/fail15667.d
! 16da30dd060606154f259767b6132314  gcc/testsuite/gdc.test/fail_compilation/fail158.d
  7dffcb12548594529e08c394a72f593e  gcc/testsuite/gdc.test/fail_compilation/fail15896.d
! ff522db8e3f7290807f99cbbff6d33aa  gcc/testsuite/gdc.test/fail_compilation/fail159.d
! c54825a9b1a9e678dfd4222e51254a65  gcc/testsuite/gdc.test/fail_compilation/fail16.d
! 074058daa32933a815e0a06141671545  gcc/testsuite/gdc.test/fail_compilation/fail160.d
! 9c304462328270fc11076c9c29252b8d  gcc/testsuite/gdc.test/fail_compilation/fail161.d
! 59eb5de49c64581f01c71b8004fa22b3  gcc/testsuite/gdc.test/fail_compilation/fail162.d
! 17eb2abab8ecd0c39b44bfbc69f1c845  gcc/testsuite/gdc.test/fail_compilation/fail16206a.d
! 002a14c899744cebda88b7635af38913  gcc/testsuite/gdc.test/fail_compilation/fail16206b.d
! b2a7fff9646a3d999af5916b3f12f5c9  gcc/testsuite/gdc.test/fail_compilation/fail163.d
! e5c4db922c80c6cd4ee60bd1b574a66a  gcc/testsuite/gdc.test/fail_compilation/fail16600.d
! 209af003830061eeaa9164e5eac9b4f8  gcc/testsuite/gdc.test/fail_compilation/fail169.d
! b7c2be3a05dea04eaf3363a2bb3ef505  gcc/testsuite/gdc.test/fail_compilation/fail17.d
! 68e522a24e39b37182b863a5b02e6d55  gcc/testsuite/gdc.test/fail_compilation/fail170.d
! 81f572c07c90f385c2fb8adf74d0861a  gcc/testsuite/gdc.test/fail_compilation/fail172.d
! 778cefb6b11b1f74046e18febbdb782b  gcc/testsuite/gdc.test/fail_compilation/fail17275.d
! 679a4be1cc349e05f27590202117b158  gcc/testsuite/gdc.test/fail_compilation/fail17354.d
! ec49ddad4c2d427e7fc82a61312b1a4a  gcc/testsuite/gdc.test/fail_compilation/fail17419.d
! 0a22d2204c7837efddcda3d6919a42d5  gcc/testsuite/gdc.test/fail_compilation/fail17421.d
! ab5f4dbae40b00e019c3eb7247e7a565  gcc/testsuite/gdc.test/fail_compilation/fail17491.d
! 94c0cc143d055c0e1c6c34c9ed64df24  gcc/testsuite/gdc.test/fail_compilation/fail17492.d
! 5ce6c1fa1a596779f604774bc6462caf  gcc/testsuite/gdc.test/fail_compilation/fail17502.d
! f063c3fe726aead146d8bc5f11317caa  gcc/testsuite/gdc.test/fail_compilation/fail176.d
! a9e9375c639f1bceb5a2c82ed2d814d2  gcc/testsuite/gdc.test/fail_compilation/fail17612.d
  2cabd5f43fb4c3f7eb2da73fc4b1164d  gcc/testsuite/gdc.test/fail_compilation/fail17630.d
! d9b57492a55df581bc7cb9cafb51823e  gcc/testsuite/gdc.test/fail_compilation/fail17646.d
  ab8c22cf2be47d14e82979e49ec3083e  gcc/testsuite/gdc.test/fail_compilation/fail17689.d
! cc0d534470513bf33065f906f685c282  gcc/testsuite/gdc.test/fail_compilation/fail177.d
! 5e31cf65fbe770a2c6c3a301a8cdf955  gcc/testsuite/gdc.test/fail_compilation/fail17722a.d
! bfab10ee1bb6de1c1847e1b73fe5ee21  gcc/testsuite/gdc.test/fail_compilation/fail17722b.d
! f31a93ddcc15e89c1d3c4b9708f425e6  gcc/testsuite/gdc.test/fail_compilation/fail179.d
! cd85edffa509e845e1c2fc1f2387e34e  gcc/testsuite/gdc.test/fail_compilation/fail18.d
! ea3555623f7a0f76ea024bdeafec92fe  gcc/testsuite/gdc.test/fail_compilation/fail180.d
! ee0bf9fd315e7acd7b8d88d3f0eedbc7  gcc/testsuite/gdc.test/fail_compilation/fail18057.d
  e3408518b8b4c811d02328352ef87de6  gcc/testsuite/gdc.test/fail_compilation/fail18057b.d
  f29a2cafb832f5d530d6602319bfce06  gcc/testsuite/gdc.test/fail_compilation/fail18143.d
  0c902b93c7433a24ef0a1f1b2c046c5c  gcc/testsuite/gdc.test/fail_compilation/fail18219.d
! 01272bb2cd242423fbfefbb141aeafff  gcc/testsuite/gdc.test/fail_compilation/fail183.d
  27112a91b6ec55109a11888ca317d7ae  gcc/testsuite/gdc.test/fail_compilation/fail184.d
! 15708ee65310d0e005531c2a4d3ea648  gcc/testsuite/gdc.test/fail_compilation/fail185.d
! 981e45bf2f24b479f4edb4dd0c3251f0  gcc/testsuite/gdc.test/fail_compilation/fail187.d
! 32a06b34daa30ac6173501851c0b80ab  gcc/testsuite/gdc.test/fail_compilation/fail18719.d
! 30517ca54fcaeb3dab234b5da5d696ef  gcc/testsuite/gdc.test/fail_compilation/fail188.d
  39344b97e72e7a51418d2304bfe71bac  gcc/testsuite/gdc.test/fail_compilation/fail189.d
! ae70e36b4bddfcc69dba494ed2b907ef  gcc/testsuite/gdc.test/fail_compilation/fail18970.d
! 1483b01b6caa6a61211fbbb7ca91bb0e  gcc/testsuite/gdc.test/fail_compilation/fail190.d
! ff0f76cd1d9f8e05b74ab205e6a227c9  gcc/testsuite/gdc.test/fail_compilation/fail1900.d
! 431177676ed4eb28a3aefabcf183445a  gcc/testsuite/gdc.test/fail_compilation/fail19107.d
  2658559b7e065a4d9a88423a76b0a1f8  gcc/testsuite/gdc.test/fail_compilation/fail19182.d
! 1503cabe22e011f8539d7c16e3b90e67  gcc/testsuite/gdc.test/fail_compilation/fail192.d
! 53e1a4422f496ec7495e50d0a2839f5b  gcc/testsuite/gdc.test/fail_compilation/fail193.d
  4d8b5bed5de0d4f5223fa819ed1eebe4  gcc/testsuite/gdc.test/fail_compilation/fail19336.d
! 3a87e73c857b83aafd1846af5a1f59eb  gcc/testsuite/gdc.test/fail_compilation/fail194.d
! 6d48813e52b586b298d9be7f4a37d603  gcc/testsuite/gdc.test/fail_compilation/fail195.d
  676dfacf37090247608e1eabe58d4327  gcc/testsuite/gdc.test/fail_compilation/fail19520.d
! 32bde00c421079505118183cc93e5b14  gcc/testsuite/gdc.test/fail_compilation/fail196.d
! 3ad99c4ff25fed0b9151dea855acebba  gcc/testsuite/gdc.test/fail_compilation/fail19609.d
! 0ef63361f290a9b73dc28f4feebb03d8  gcc/testsuite/gdc.test/fail_compilation/fail198.d
! 35e51c28817d6cc130c92af17f7d8216  gcc/testsuite/gdc.test/fail_compilation/fail19890a.d
! 69ac2e76fb412b5c819c37214a796b25  gcc/testsuite/gdc.test/fail_compilation/fail19890b.d
! 1b3c90cb1eac7cc77c0d288171529f2a  gcc/testsuite/gdc.test/fail_compilation/fail19897.d
! 7e3c85acd06c5b1a46bd4c550108ea93  gcc/testsuite/gdc.test/fail_compilation/fail19898a.d
! b222568e3989a82aea4c7ccf7ff42f95  gcc/testsuite/gdc.test/fail_compilation/fail19898b.d
  6dd5bad406278481b7d4badda46d5b83  gcc/testsuite/gdc.test/fail_compilation/fail199.d
  20732ebad089aa6fc8fd4b82c40d461a  gcc/testsuite/gdc.test/fail_compilation/fail19911a.d
! 7235fcff769c5fc74a7df55b3ee9a0ef  gcc/testsuite/gdc.test/fail_compilation/fail19911b.d
! 4a9f549603e62a9f74791f0e261c8603  gcc/testsuite/gdc.test/fail_compilation/fail19911c.d
! cb5a3221a8d11961d1d8fe350e180f77  gcc/testsuite/gdc.test/fail_compilation/fail19912a.d
! 195e8923ef3285b35ca114beae55c168  gcc/testsuite/gdc.test/fail_compilation/fail19912b.d
! 7bebcb0b8aa5ae7cfb97bd775414d8fa  gcc/testsuite/gdc.test/fail_compilation/fail19912c.d
! 9392f5c038a776f9339f87e066360f11  gcc/testsuite/gdc.test/fail_compilation/fail19912d.d
! b041bc86f502306a6a150ac3c004bc93  gcc/testsuite/gdc.test/fail_compilation/fail19912e.d
! 6574f077149b3001fa08f526bdc38b23  gcc/testsuite/gdc.test/fail_compilation/fail19913.d
! 03381b443e3cc254567d654cf72cbffa  gcc/testsuite/gdc.test/fail_compilation/fail19914.d
! 839a3fd9763dcc571153019b5ee82281  gcc/testsuite/gdc.test/fail_compilation/fail19915.d
! bcc364c7146bd5c9cab057ce77ed7026  gcc/testsuite/gdc.test/fail_compilation/fail19922.d
! 7ee50deff46db565fe3d4bd0c3470287  gcc/testsuite/gdc.test/fail_compilation/fail19923.d
  3efe7c451c4866665928b1d60a91285d  gcc/testsuite/gdc.test/fail_compilation/fail19941.d
! 18196dfdc67580f0c39dff25d3ad5111  gcc/testsuite/gdc.test/fail_compilation/fail19955.d
! eae23c0332e3168bbb03940c3f6c7dd7  gcc/testsuite/gdc.test/fail_compilation/fail20.d
  05592f24921890426a604ce836f029b0  gcc/testsuite/gdc.test/fail_compilation/fail200.d
! f8af45985d6836fffb915692fd3388bb  gcc/testsuite/gdc.test/fail_compilation/fail201.d
! e2097d18625a5db42f538c6dfd5cf90f  gcc/testsuite/gdc.test/fail_compilation/fail202.d
! 0d5f5f914a3c5c2a74b8470759892f7f  gcc/testsuite/gdc.test/fail_compilation/fail203.d
! acfe12e017962a94d59a0e78e454d32c  gcc/testsuite/gdc.test/fail_compilation/fail204.d
! 08695b79696718f8dbce59db9beaeb0f  gcc/testsuite/gdc.test/fail_compilation/fail205.d
! e0f322ca97414c864fe9663e12c2ac20  gcc/testsuite/gdc.test/fail_compilation/fail206.d
! 188539d90bcecc89bfb075c266e44662  gcc/testsuite/gdc.test/fail_compilation/fail207.d
! 8be923779af49504b57c7ed97bb83d55  gcc/testsuite/gdc.test/fail_compilation/fail208.d
! 692da97aacb73f0e5dd83773df388ad3  gcc/testsuite/gdc.test/fail_compilation/fail209.d
  a73d3317381cd1a7dad4b419b99a70c1  gcc/testsuite/gdc.test/fail_compilation/fail21001.d
! fb44509087d96cafd81f6b3914fa210d  gcc/testsuite/gdc.test/fail_compilation/fail212.d
! 51f7cc2b0cccf9aaa02064bf4b71122b  gcc/testsuite/gdc.test/fail_compilation/fail213.d
! 210123bd50e440d7a005818b767f6554  gcc/testsuite/gdc.test/fail_compilation/fail215.d
! 883136a1706c8871fa28d0215beacc4c  gcc/testsuite/gdc.test/fail_compilation/fail216.d
! af487ca57216bc854bc01579a8105785  gcc/testsuite/gdc.test/fail_compilation/fail217.d
! 9a8a6351acc528a188a180d80c1ef504  gcc/testsuite/gdc.test/fail_compilation/fail218.d
! 1c2214d02026045648eb72626934c793  gcc/testsuite/gdc.test/fail_compilation/fail2195.d
  25aa1006320654cdd4ef271b53a76a69  gcc/testsuite/gdc.test/fail_compilation/fail22.d
! ad4fca3b9dbdc7fd24b158a3d3af5ed9  gcc/testsuite/gdc.test/fail_compilation/fail220.d
  24f4c3c3fa945ca54c802bc7b4fc9976  gcc/testsuite/gdc.test/fail_compilation/fail22006.d
! cbf4cc7e1f96260b11e9acc29bd9dc12  gcc/testsuite/gdc.test/fail_compilation/fail221.d
! 0bb50b641805b9fc2f72587a6693c9dc  gcc/testsuite/gdc.test/fail_compilation/fail22133.d
! 905e47894d7c0d03a0db65423e4e8848  gcc/testsuite/gdc.test/fail_compilation/fail22144.d
! 7f7a0dac0afcfc920bdff662146ff101  gcc/testsuite/gdc.test/fail_compilation/fail222.d
! 0b9ee853ad7e4570d30a13257081f9bd  gcc/testsuite/gdc.test/fail_compilation/fail223.d
! 2dc7de709a4a362b91e462b2499243bc  gcc/testsuite/gdc.test/fail_compilation/fail224.d
! 77b7ffd5f4d0c1fadc5c93b13bd2b63d  gcc/testsuite/gdc.test/fail_compilation/fail225.d
  c24efc95b4a07d93082131c006e2dd80  gcc/testsuite/gdc.test/fail_compilation/fail228.d
! 9d018b2073e3b8113a51dd16bb805f1d  gcc/testsuite/gdc.test/fail_compilation/fail229.d
! 58670280bc537df17b2c832c8d1f34ff  gcc/testsuite/gdc.test/fail_compilation/fail23.d
! ce4157a4d917264bab5e68a08d5e37a4  gcc/testsuite/gdc.test/fail_compilation/fail231.d
  2549171f6c1309bbbd88a2c8d62fdd92  gcc/testsuite/gdc.test/fail_compilation/fail232.d
! 9896216c11fd8cc75cf4d8668e08ab78  gcc/testsuite/gdc.test/fail_compilation/fail233.d
! ca8c7594c80997a194fd7b1c7a8f83e4  gcc/testsuite/gdc.test/fail_compilation/fail235.d
! be2aed2168f2bd58171a55c63547ad22  gcc/testsuite/gdc.test/fail_compilation/fail236.d
! d08fd87f7e32a14ee102500b0f9531f1  gcc/testsuite/gdc.test/fail_compilation/fail2361.d
! 70717553d9d07c6f6efed75e909e1cbc  gcc/testsuite/gdc.test/fail_compilation/fail237.d
! 60acf6a84c5f6335c16c712c2781edf7  gcc/testsuite/gdc.test/fail_compilation/fail238_m32.d
! 79189a0d0858112c09a8435c5306fa31  gcc/testsuite/gdc.test/fail_compilation/fail238_m64.d
  115789041b2ab94dc286976883caa1a5  gcc/testsuite/gdc.test/fail_compilation/fail239.d
! 26d78e146ee928dc36095d4a447ba1e5  gcc/testsuite/gdc.test/fail_compilation/fail24.d
! 16ec290aa427898668de3f21de843191  gcc/testsuite/gdc.test/fail_compilation/fail240.d
! 0963ae4ece6c15a256bff495e0b6faf7  gcc/testsuite/gdc.test/fail_compilation/fail241.d
! ebf411f999436bf8af01dab4b71135fb  gcc/testsuite/gdc.test/fail_compilation/fail243.d
! c6cbb48c59736a68a3c7d4b98a910b59  gcc/testsuite/gdc.test/fail_compilation/fail244.d
! 1de147c0e4d9d486083c7f475dcf66a6  gcc/testsuite/gdc.test/fail_compilation/fail245.d
! 6c9a4624522ee71df69f0b74a589848a  gcc/testsuite/gdc.test/fail_compilation/fail2456.d
! 9c509ed7361a7adb2b214123c481f5ca  gcc/testsuite/gdc.test/fail_compilation/fail246.d
! 0ed1144e4f7f5ef0f1f3c42f4db50fb3  gcc/testsuite/gdc.test/fail_compilation/fail247.d
! 21bc298308f2c5019e4cdd686785fc29  gcc/testsuite/gdc.test/fail_compilation/fail248.d
! 24ff41c33feb016178c348e0854863d2  gcc/testsuite/gdc.test/fail_compilation/fail249.d
! 590ef2aa24b219cdecc025fbe83fba7d  gcc/testsuite/gdc.test/fail_compilation/fail25.d
! e158cccafae00fb3f49f4cf2c78a9320  gcc/testsuite/gdc.test/fail_compilation/fail250.d
! e320d0e34feeb6dd7ce433a9a66d9815  gcc/testsuite/gdc.test/fail_compilation/fail251.d
  c908fc323909d68ae82ac5769ced2b4e  gcc/testsuite/gdc.test/fail_compilation/fail252.d
! f6ccf14b5c7d80eb12d16e44cfc779d3  gcc/testsuite/gdc.test/fail_compilation/fail253.d
  5e6643c0dc6c2c1022307cf9f3f46d39  gcc/testsuite/gdc.test/fail_compilation/fail254.d
! 114dff0c18f386fe65aac70b5c4a4c92  gcc/testsuite/gdc.test/fail_compilation/fail256.d
  f1243a2544274acdb7b8aa344b404728  gcc/testsuite/gdc.test/fail_compilation/fail257.d
! 0d383bd3dcb545929e59299272bd9a27  gcc/testsuite/gdc.test/fail_compilation/fail258.d
! b90f91cf996fced87d717be0e174afde  gcc/testsuite/gdc.test/fail_compilation/fail259.d
! f9629ce6d4a7fc45133336a930fb7a5c  gcc/testsuite/gdc.test/fail_compilation/fail261.d
! 1082c4045553b3c8fd036c2daff5c29e  gcc/testsuite/gdc.test/fail_compilation/fail262.d
! 0cf1dc1fe227736eec59eeed2a4cf2da  gcc/testsuite/gdc.test/fail_compilation/fail263.d
  e3aaf70f1ee3ab9d4bdf647065681c97  gcc/testsuite/gdc.test/fail_compilation/fail264.d
! bcfa122f23523fa04605980ad8c03d05  gcc/testsuite/gdc.test/fail_compilation/fail265.d
! 9420b8235ce6d6680a20b5c7b70be414  gcc/testsuite/gdc.test/fail_compilation/fail2656.d
! 76e8d2592c3490dcabb996ca2589bdac  gcc/testsuite/gdc.test/fail_compilation/fail267.d
  b4f9f353ed280cf239cfd6c89845489d  gcc/testsuite/gdc.test/fail_compilation/fail27.d
! b5965be5dc9cd6528e23650b8734948f  gcc/testsuite/gdc.test/fail_compilation/fail270.d
! 3930072491a7aaa7a54e2a6e6a90aadf  gcc/testsuite/gdc.test/fail_compilation/fail272.d
! b444b634e88723d6ef7105409fd28107  gcc/testsuite/gdc.test/fail_compilation/fail273.d
  3a2bbcb89612d6ed5bfec9c436607c4e  gcc/testsuite/gdc.test/fail_compilation/fail2740.d
! d61abc48c429eeb5c07704509e7c3743  gcc/testsuite/gdc.test/fail_compilation/fail275.d
! 140e432c0a2d4497942fb37e83ff0acf  gcc/testsuite/gdc.test/fail_compilation/fail276.d
! 09dab98666ce2b82ba7be75d8f43dce5  gcc/testsuite/gdc.test/fail_compilation/fail278.d
  9a2085e9967a0198be547e1bf8a861c9  gcc/testsuite/gdc.test/fail_compilation/fail279.d
  8c71905ddb013310c3f99f67c1516e49  gcc/testsuite/gdc.test/fail_compilation/fail280.d
  05c686b7d945e42c55c0f68020beafbc  gcc/testsuite/gdc.test/fail_compilation/fail281.d
! 90f43eaf959be7758bd43eafa35e02f4  gcc/testsuite/gdc.test/fail_compilation/fail282.d
! 4f1b0faf61014e1c3069c9d49de21a2d  gcc/testsuite/gdc.test/fail_compilation/fail284.d
  c2e57c588dd2d4a893b419ec6ed8be4c  gcc/testsuite/gdc.test/fail_compilation/fail285.d
! 8b40e95183f1240cffdb25dcdb2e7908  gcc/testsuite/gdc.test/fail_compilation/fail287.d
! b569a3c09e2e067e6bec401f57987a33  gcc/testsuite/gdc.test/fail_compilation/fail288.d
  3bb1b85afcdf7ea4b10d0459a55c2126  gcc/testsuite/gdc.test/fail_compilation/fail289.d
  4ce4de1baf763370f69bedc1a8ebc2ce  gcc/testsuite/gdc.test/fail_compilation/fail290.d
! cad64174a93dd0da115eeaef66e11231  gcc/testsuite/gdc.test/fail_compilation/fail291.d
! 94ec57a248ed910e87ea9bb3cfb0aa15  gcc/testsuite/gdc.test/fail_compilation/fail296.d
! b52ccadb1329f046aef5d7cfcec124bb  gcc/testsuite/gdc.test/fail_compilation/fail2962.d
! 4433957e8897884efd1dbf7464f5255a  gcc/testsuite/gdc.test/fail_compilation/fail297.d
  39598ace8538fb86a4a31cd07f3b73e6  gcc/testsuite/gdc.test/fail_compilation/fail298.d
! 162473f65485f4213b205fa845021168  gcc/testsuite/gdc.test/fail_compilation/fail299.d
! f9d8bea764a5ad3ff63d43abd7ba2a8a  gcc/testsuite/gdc.test/fail_compilation/fail3.d
! ca96cc22c1aa1fd5e02efdf1183c9dbf  gcc/testsuite/gdc.test/fail_compilation/fail301.d
! 0c236ba6298b3fe9e57446095cd29a54  gcc/testsuite/gdc.test/fail_compilation/fail302.d
! d6f214995056ddacf9936b15e3ffdfd4  gcc/testsuite/gdc.test/fail_compilation/fail303.d
  55c689bdd0e95596a127ae06b8d223da  gcc/testsuite/gdc.test/fail_compilation/fail304.d
! b63d38efc3e4a705832be5786a1c90a3  gcc/testsuite/gdc.test/fail_compilation/fail305.d
  ef026933cf422af0367257bfe21bd10a  gcc/testsuite/gdc.test/fail_compilation/fail306.d
  c6bb6e98c1536367c7fff657247aeddc  gcc/testsuite/gdc.test/fail_compilation/fail307.d
  39a9872d09a199054f81fd82b83909be  gcc/testsuite/gdc.test/fail_compilation/fail308.d
! 4488f52e7f617871d86fc433e01729cb  gcc/testsuite/gdc.test/fail_compilation/fail309.d
! c27c16a4111f9da6c1d5504f2749718a  gcc/testsuite/gdc.test/fail_compilation/fail310.d
! 76d6ac6c63251fee24d0fc294e14b0f4  gcc/testsuite/gdc.test/fail_compilation/fail311.d
! 2b0571bb656dc3d2e6d762162fd98dba  gcc/testsuite/gdc.test/fail_compilation/fail312.d
! c42c7f56e72e1e5682c6effaf77ac723  gcc/testsuite/gdc.test/fail_compilation/fail313.d
! 73cc04fad90cc7c8b32ac8005e24cfbc  gcc/testsuite/gdc.test/fail_compilation/fail314.d
! c77f5eba6a8f8b88e49475523664beb9  gcc/testsuite/gdc.test/fail_compilation/fail3144.d
! 068f28b84affcc81bda963d182605391  gcc/testsuite/gdc.test/fail_compilation/fail315.d
  717b50b0fa7011cc5fcc517fd321a8db  gcc/testsuite/gdc.test/fail_compilation/fail3150.d
  c15e5757d1100c2530af5033ae938db6  gcc/testsuite/gdc.test/fail_compilation/fail316.d
! f97a15be650b193f5550164ea2bb3a38  gcc/testsuite/gdc.test/fail_compilation/fail317.d
! 4860b263c537097a32295e7964be5bb1  gcc/testsuite/gdc.test/fail_compilation/fail318.d
! 3513928936d38f73a09df0e7ee38e58a  gcc/testsuite/gdc.test/fail_compilation/fail319.d
! 81c2ead5c2f6d10937076f3dcba49e09  gcc/testsuite/gdc.test/fail_compilation/fail320.d
  268122abaab8e4180bc6e53ec75faf41  gcc/testsuite/gdc.test/fail_compilation/fail322.d
! 4ac129ec71b45319155ad95f8a8d5c8c  gcc/testsuite/gdc.test/fail_compilation/fail324.d
! b229fba989233af66a9e54e5daa85ecb  gcc/testsuite/gdc.test/fail_compilation/fail325.d
! 1e163ea95395d92e222b459e8546217e  gcc/testsuite/gdc.test/fail_compilation/fail328.d
! 57f04636090d33b61c25d253a794eca3  gcc/testsuite/gdc.test/fail_compilation/fail329.d
  c3ff91e9e22d93e3f725978a285cf148  gcc/testsuite/gdc.test/fail_compilation/fail3290.d
! 98e6890fb470f7a6823d1df377aa71ab  gcc/testsuite/gdc.test/fail_compilation/fail330.d
! 3bbd63f014e3031c2fd9acc3469bb9e0  gcc/testsuite/gdc.test/fail_compilation/fail331.d
  55a884c2cb0d85e25dfac7b325378fd8  gcc/testsuite/gdc.test/fail_compilation/fail332.d
! 204209620d69f584e8175ce151459722  gcc/testsuite/gdc.test/fail_compilation/fail333.d
  4404e9f66c6ddceb6eebdb6fedd1978a  gcc/testsuite/gdc.test/fail_compilation/fail334.d
  efff0f2ea1051cc3f03bca692e4cdd58  gcc/testsuite/gdc.test/fail_compilation/fail335.d
! b3eb2c0c0467df5cca0b7b17db3c9887  gcc/testsuite/gdc.test/fail_compilation/fail336.d
! af52f8f98151dc380b2916a779a1469e  gcc/testsuite/gdc.test/fail_compilation/fail337.d
! 9dab134035f73395f9667b3a9de04e29  gcc/testsuite/gdc.test/fail_compilation/fail34.d
! e475d3d4aae26195f09e289364dc3527  gcc/testsuite/gdc.test/fail_compilation/fail340.d
! a3a08c83d666abdf7b8fb001a75ca1c3  gcc/testsuite/gdc.test/fail_compilation/fail341.d
! 97e55f71e525cecd6f403633a9fbe152  gcc/testsuite/gdc.test/fail_compilation/fail343.d
  f332a94ead175c47a5de77a06e6410b4  gcc/testsuite/gdc.test/fail_compilation/fail344.d
! 019aa56664e551e889a6c10b923e78be  gcc/testsuite/gdc.test/fail_compilation/fail346.d
! a6510293798d1a01cb1d8dc91e04706c  gcc/testsuite/gdc.test/fail_compilation/fail347.d
! c01ec12b88b5f03a5f5307240f13200c  gcc/testsuite/gdc.test/fail_compilation/fail349.d
! 97203d16ca486b5808af902fbc251591  gcc/testsuite/gdc.test/fail_compilation/fail35.d
! 25522bf7b54e57b5e118978cc67beae1  gcc/testsuite/gdc.test/fail_compilation/fail351.d
  fd946b4fc9ac05e46c66850cb7ff4e37  gcc/testsuite/gdc.test/fail_compilation/fail352.d
! be63f96cbb150e0c0180257ec52bb5db  gcc/testsuite/gdc.test/fail_compilation/fail354.d
! cd75751efb770936e03544d26fa2b06c  gcc/testsuite/gdc.test/fail_compilation/fail355.d
  74f680f546f739dc29795ea5e8b13c39  gcc/testsuite/gdc.test/fail_compilation/fail356a.d
  5a66ecde16238bcf9cf7dc5f63013203  gcc/testsuite/gdc.test/fail_compilation/fail356b.d
  6b1b322bfc0f2cf4a699ef8b03e35af3  gcc/testsuite/gdc.test/fail_compilation/fail356c.d
  315e8ea8d2a4134e7e31c481a7002be9  gcc/testsuite/gdc.test/fail_compilation/fail3581a.d
  06b4f133b88fa879e44e455dfa384c83  gcc/testsuite/gdc.test/fail_compilation/fail3581b.d
! 21a12756e0c23cb8422db5246346afbf  gcc/testsuite/gdc.test/fail_compilation/fail359.d
! fc4c24c56590c9039821709405f82948  gcc/testsuite/gdc.test/fail_compilation/fail36.d
! 893d01b4f895cd9fb806b68bc07922bf  gcc/testsuite/gdc.test/fail_compilation/fail3672.d
  7247a47f45f036756a7c0b54274e273c  gcc/testsuite/gdc.test/fail_compilation/fail3673a.d
  1d2567efb51ee9926e9ffd28b507ca90  gcc/testsuite/gdc.test/fail_compilation/fail3673b.d
! b91f7d24571ac848e63283fd3fe3135b  gcc/testsuite/gdc.test/fail_compilation/fail3703.d
  11af7cdbfdfe0e1a51be20f239eee6e3  gcc/testsuite/gdc.test/fail_compilation/fail3731.d
! 55436e910668f7f4e60bdb9597c32d9e  gcc/testsuite/gdc.test/fail_compilation/fail3753.d
! 47267158c16951a1e472c52d56f7df72  gcc/testsuite/gdc.test/fail_compilation/fail37_m32.d
! fc12c619f8eecf9adc23fcb0ac79d743  gcc/testsuite/gdc.test/fail_compilation/fail37_m64.d
! 46524b414cac1aef8ed066ec861888a3  gcc/testsuite/gdc.test/fail_compilation/fail38.d
! 18b48e8ba7ab5f4a489ec8cd5606f300  gcc/testsuite/gdc.test/fail_compilation/fail3882.d
! fb2565d650672ded0c5a2efd0b6e2c4a  gcc/testsuite/gdc.test/fail_compilation/fail3895.d
! 385f637402117427e70546eee8514a66  gcc/testsuite/gdc.test/fail_compilation/fail39.d
! 004cddb06ba8bd0acbc599e25e0a692a  gcc/testsuite/gdc.test/fail_compilation/fail3990.d
! b08bd0cee75ec54f953959b1d982b23e  gcc/testsuite/gdc.test/fail_compilation/fail40.d
! d2b1be8a040e5590c052554cc7e36c7f  gcc/testsuite/gdc.test/fail_compilation/fail4082.d
! 99b2641a9e4d2377c554452d592fecaa  gcc/testsuite/gdc.test/fail_compilation/fail41.d
! ef7dedcc08bbe8b6346a557a366884f0  gcc/testsuite/gdc.test/fail_compilation/fail42.d
  6df76bbb49a6a24e29515a2adaf498cd  gcc/testsuite/gdc.test/fail_compilation/fail4206.d
! c8e37171fec753f276c1683ac925cbc0  gcc/testsuite/gdc.test/fail_compilation/fail4269a.d
! 610c5122507f862fea75255cd94c3f22  gcc/testsuite/gdc.test/fail_compilation/fail4269b.d
! da1dd80361f587563d8e21dbda2b9dc7  gcc/testsuite/gdc.test/fail_compilation/fail4269c.d
  562a7b498cea26253db494302d3e7be7  gcc/testsuite/gdc.test/fail_compilation/fail4269d.d
! 1ca0dc33849aaa013b7ce5b78f1f1b16  gcc/testsuite/gdc.test/fail_compilation/fail4269e.d
  7e320cba69b1ca1fa0179755e3337cbc  gcc/testsuite/gdc.test/fail_compilation/fail4269f.d
  e2a4b369785e7e5d117aa961f21d213a  gcc/testsuite/gdc.test/fail_compilation/fail4269g.d
  b36f34211c127f9d14b0221649b8a60c  gcc/testsuite/gdc.test/fail_compilation/fail4374.d
! 1bafba2286a44468d381d7ad808cd5ec  gcc/testsuite/gdc.test/fail_compilation/fail4375a.d
! 71c86f71dee0deb4795d667c1f5f14bd  gcc/testsuite/gdc.test/fail_compilation/fail4375b.d
! e965549d285fbc48a3242dbda08f345a  gcc/testsuite/gdc.test/fail_compilation/fail4375c.d
! 8a5cf9cd4540e253f8a82e8f28d5cb97  gcc/testsuite/gdc.test/fail_compilation/fail4375d.d
! e93114b9e9745eb4bbbc2bba58da9ef2  gcc/testsuite/gdc.test/fail_compilation/fail4375e.d
! 52c1e56e3ba120a7babf4fc8e6bfcf25  gcc/testsuite/gdc.test/fail_compilation/fail4375f.d
! 26416752473cb185111c056ae21afe2b  gcc/testsuite/gdc.test/fail_compilation/fail4375g.d
! 399a37b73bcb34147dc887161a6b1d30  gcc/testsuite/gdc.test/fail_compilation/fail4375h.d
! ebc7f0c82ace7d1382a667993be1b1aa  gcc/testsuite/gdc.test/fail_compilation/fail4375i.d
! 99d335b5736595e28067b2acd205089b  gcc/testsuite/gdc.test/fail_compilation/fail4375j.d
! 21a90bfc9827e979644770240b4bc0d7  gcc/testsuite/gdc.test/fail_compilation/fail4375k.d
! 5bfa8851536f824c96da6020b447b05d  gcc/testsuite/gdc.test/fail_compilation/fail4375l.d
! bd91b9681230cf058138f6f0c017e81f  gcc/testsuite/gdc.test/fail_compilation/fail4375m.d
! 07aca826ebfa47bf9a4d31a373273330  gcc/testsuite/gdc.test/fail_compilation/fail4375o.d
! de58a99349e0c27f7d2058583e37f749  gcc/testsuite/gdc.test/fail_compilation/fail4375p.d
! 01e82462812fcc7987f9258991778fee  gcc/testsuite/gdc.test/fail_compilation/fail4375q.d
! e36dd6d8f70ba04eebe7f600962fcbb9  gcc/testsuite/gdc.test/fail_compilation/fail4375r.d
! 9d23803d8ac32249756a2f4a6c5eeae7  gcc/testsuite/gdc.test/fail_compilation/fail4375s.d
! fadcfa5de84b11e1db153d75ef7f5cb1  gcc/testsuite/gdc.test/fail_compilation/fail4375t.d
! 828f24c1ea67535b6165c22f7adfb907  gcc/testsuite/gdc.test/fail_compilation/fail4375u.d
! 6c5af033d5ee34e2b0b67c78b82331e3  gcc/testsuite/gdc.test/fail_compilation/fail4375v.d
! 4394974b7c7147a3e468dbe6c94e281a  gcc/testsuite/gdc.test/fail_compilation/fail4375w.d
! 544c73628975630bce45702524c1654c  gcc/testsuite/gdc.test/fail_compilation/fail4375x.d
! 502b281f80f904f9f828246e61f6fe3e  gcc/testsuite/gdc.test/fail_compilation/fail4375y.d
! 92f644ce2a122a7800e1f3d80ff9ec22  gcc/testsuite/gdc.test/fail_compilation/fail44.d
! 85974437da906688a5c60724b7f1300f  gcc/testsuite/gdc.test/fail_compilation/fail4421.d
! f8c5e02f14c1a0fb9541c25514c927b4  gcc/testsuite/gdc.test/fail_compilation/fail4448.d
! 9487dba3b2347281b7dcbb1128058ecb  gcc/testsuite/gdc.test/fail_compilation/fail45.d
  372cc7df83288c26deec10920b7ff241  gcc/testsuite/gdc.test/fail_compilation/fail4510.d
  a1c72712e50cfccb9828a18700353ddb  gcc/testsuite/gdc.test/fail_compilation/fail4511.d
! 260f876bbb3c9d96a4f3fc33e62b131f  gcc/testsuite/gdc.test/fail_compilation/fail4517.d
  77aeaa5915f3b3f7e866d92b911046f2  gcc/testsuite/gdc.test/fail_compilation/fail4559.d
! 7dc6297222339ca1660fb063bc7e1839  gcc/testsuite/gdc.test/fail_compilation/fail46.d
! 62e1d98def06f38c091fed323056e4fa  gcc/testsuite/gdc.test/fail_compilation/fail4611.d
! 6892651029dab21677859d79b8bf8088  gcc/testsuite/gdc.test/fail_compilation/fail47.d
  56535cbb92d2cfd2a7cefcad0cb06450  gcc/testsuite/gdc.test/fail_compilation/fail4958.d
! 2347fafbed30c54a57d5db6691cc11b4  gcc/testsuite/gdc.test/fail_compilation/fail50.d
! 622dc7ed1884906e8019739fa0301173  gcc/testsuite/gdc.test/fail_compilation/fail51.d
! 8d25f7f491987760fd26da9f500e3054  gcc/testsuite/gdc.test/fail_compilation/fail52.d
  22e1ce68370a8ebbe3b4a289e2e902a0  gcc/testsuite/gdc.test/fail_compilation/fail53.d
! 90f4454981b76302da9f5b91db7ff7f9  gcc/testsuite/gdc.test/fail_compilation/fail54.d
  726fee55e204e2ae6f7096c796b293d4  gcc/testsuite/gdc.test/fail_compilation/fail5435.d
  ce0de773e6a50fd2386921c98d18d030  gcc/testsuite/gdc.test/fail_compilation/fail55.d
  6e81ace5c4651e1424f030312d47cffc  gcc/testsuite/gdc.test/fail_compilation/fail56.d
  cd3307a3394091a0065c50345d1d27c8  gcc/testsuite/gdc.test/fail_compilation/fail5634.d
  12f19bd2092f28fd800b72dfcccc6cd1  gcc/testsuite/gdc.test/fail_compilation/fail57.d
  240a3c909830bbc7f5edbb0a6ccb216c  gcc/testsuite/gdc.test/fail_compilation/fail5733.d
! d988349a4cf02d1f3522afb9c68eb148  gcc/testsuite/gdc.test/fail_compilation/fail58.d
  f93769c76850f0b989d3a439f9819ef8  gcc/testsuite/gdc.test/fail_compilation/fail5851.d
! 7c8a19c914d81360adccccd49119af56  gcc/testsuite/gdc.test/fail_compilation/fail59.d
  0fa8371b53286c121ee2f9322b175961  gcc/testsuite/gdc.test/fail_compilation/fail5953a1.d
  496d05e780a77d4ce554c8f3df532f36  gcc/testsuite/gdc.test/fail_compilation/fail5953a2.d
  f3669e435f1e14c84bb61ff5c428cb46  gcc/testsuite/gdc.test/fail_compilation/fail5953s1.d
  dc1ca007f2c683eced50df7662e43e67  gcc/testsuite/gdc.test/fail_compilation/fail5953s2.d
! ac5e82650cb9be01fd0c472a0f46ded2  gcc/testsuite/gdc.test/fail_compilation/fail60.d
  42a1255944d9bddb16e627a61865d1bc  gcc/testsuite/gdc.test/fail_compilation/fail6029.d
! 95ef1cdc65149baf41b2a7d02c30cc49  gcc/testsuite/gdc.test/fail_compilation/fail61.d
! 8f6999211cd4a06fbf0f909423b8407a  gcc/testsuite/gdc.test/fail_compilation/fail6107.d
! 83ec1189a51a4717d36f79f7c5b50ad6  gcc/testsuite/gdc.test/fail_compilation/fail62.d
! 6629308a328dba0f022ef7de019f4910  gcc/testsuite/gdc.test/fail_compilation/fail6242.d
! 9a2ec2f77d71e22b8aeef39fd5892fd9  gcc/testsuite/gdc.test/fail_compilation/fail63.d
! 8230d8255b56cbf30019bf6566785900  gcc/testsuite/gdc.test/fail_compilation/fail6334.d
! dd1afb63a95e4a4bf7c836b700aac6dd  gcc/testsuite/gdc.test/fail_compilation/fail6453.d
  f6ad81f6c854268ec6aa1653a1d0a713  gcc/testsuite/gdc.test/fail_compilation/fail6458.d
  939f57e656ee0ebf701e70ea08291c32  gcc/testsuite/gdc.test/fail_compilation/fail6497.d
  611d6b962d4185ffdab95c02bc8df4e4  gcc/testsuite/gdc.test/fail_compilation/fail6561.d
! 5321a4dc4260fa5cad9eecce638317cb  gcc/testsuite/gdc.test/fail_compilation/fail66.d
  9e7996a6ce93324b738d224ae2c4c197  gcc/testsuite/gdc.test/fail_compilation/fail6611.d
! aed4699504ea7827196b7c8949d4ba91  gcc/testsuite/gdc.test/fail_compilation/fail6652.d
  ccfea15dc14dfc824be1ec62b8a31852  gcc/testsuite/gdc.test/fail_compilation/fail6781.d
! b9dee4f496e9389688bb558ac4d09448  gcc/testsuite/gdc.test/fail_compilation/fail6795.d
! 63c5b0dc35857a583053fb5b8b7f6c4a  gcc/testsuite/gdc.test/fail_compilation/fail6889.d
! 3e6746e12b4931c67f7a244a47cdd0b7  gcc/testsuite/gdc.test/fail_compilation/fail6968.d
  4f5e9643c98ab73f981a090b5ede3c6b  gcc/testsuite/gdc.test/fail_compilation/fail7077.d
  96a6d4f7e3e63503f33c54577cfaeb50  gcc/testsuite/gdc.test/fail_compilation/fail7173.d
! 7a84bec5a00c640ac78e85396f3d0831  gcc/testsuite/gdc.test/fail_compilation/fail7178.d
! 59739a667600e72da33ad99594d09fc6  gcc/testsuite/gdc.test/fail_compilation/fail72.d
! e9340c11857fcf5fcbe8105ec1b0421f  gcc/testsuite/gdc.test/fail_compilation/fail7234.d
! b76922cd751e594db4984440f5dcd684  gcc/testsuite/gdc.test/fail_compilation/fail73.d
! 0b8eff5722d223dcb1959fd12c1ea791  gcc/testsuite/gdc.test/fail_compilation/fail7369.d
! 501f2b3778ebd6b2e5493a0fa9a7f20d  gcc/testsuite/gdc.test/fail_compilation/fail74.d
  a0982e24c691ef64752d4fc792f9a78b  gcc/testsuite/gdc.test/fail_compilation/fail7424b.d
! 5ba17d6b3c57ac3cded922340de60d98  gcc/testsuite/gdc.test/fail_compilation/fail7424c.d
! 659bad81c1b14cef227af0d1921a175b  gcc/testsuite/gdc.test/fail_compilation/fail7424d.d
! e0456fd32812ef7ee4a89c422fbb390a  gcc/testsuite/gdc.test/fail_compilation/fail7424e.d
! 87188b49fab83f6fd522d3ee3a123340  gcc/testsuite/gdc.test/fail_compilation/fail7424f.d
! 78659d17d48e11fb69ff7a9913460d16  gcc/testsuite/gdc.test/fail_compilation/fail7424g.d
! 71cf4df7a6b13271d3d6f342458eb722  gcc/testsuite/gdc.test/fail_compilation/fail7424h.d
! a3f58cf6956b9c3abc935a11b09ebf15  gcc/testsuite/gdc.test/fail_compilation/fail7424i.d
! 9bcf0d7f8dc25ee08d2b358feeecce5b  gcc/testsuite/gdc.test/fail_compilation/fail75.d
! ba8e80c17e23cb72c72082a27e1547c3  gcc/testsuite/gdc.test/fail_compilation/fail7524a.d
! c50f2cfb4d249da817ef0df6dae2f3ce  gcc/testsuite/gdc.test/fail_compilation/fail7524b.d
! c66877e43f14604e03d886630f87827e  gcc/testsuite/gdc.test/fail_compilation/fail76.d
  055cb020f686d2fa14c6db48814df79b  gcc/testsuite/gdc.test/fail_compilation/fail7603a.d
  a23fcafa535557168685c997e19265cf  gcc/testsuite/gdc.test/fail_compilation/fail7603b.d
  7426ea1df42c77958814d7f2d917edb5  gcc/testsuite/gdc.test/fail_compilation/fail7603c.d
! e3dddfe392bb9887fbcaa896fe3b83fb  gcc/testsuite/gdc.test/fail_compilation/fail77.d
  92aa8a8003bb898a5b6414473a0b488d  gcc/testsuite/gdc.test/fail_compilation/fail7702.d
  1ab023e309a57b9924db04ee18437f87  gcc/testsuite/gdc.test/fail_compilation/fail7751.d
! ef4d9a40e447e8e44aa3cf6219e708af  gcc/testsuite/gdc.test/fail_compilation/fail78.d
! a0b51dea5b29ec1ba188d673be8dc6f2  gcc/testsuite/gdc.test/fail_compilation/fail7848.d
! 8bd3b90ceed238130df042c9e45a4138  gcc/testsuite/gdc.test/fail_compilation/fail7851.d
! dc209e8e0bbf01c7f40e8868b1bc7d65  gcc/testsuite/gdc.test/fail_compilation/fail7859.d
! 4cab301b23014981a0ac753564ca0f6e  gcc/testsuite/gdc.test/fail_compilation/fail7861.d
! e17d91e03fd1129800f5ad6668fc255d  gcc/testsuite/gdc.test/fail_compilation/fail7862.d
! ceb7384052efb1a9c8cae393c7372340  gcc/testsuite/gdc.test/fail_compilation/fail79.d
! a0a827ac3a6216db01074409f04facc1  gcc/testsuite/gdc.test/fail_compilation/fail7903.d
! e79349a2b32f8b79557020a081fdb00e  gcc/testsuite/gdc.test/fail_compilation/fail8009.d
  fa695cea8079d9e1b1814862fc6d3bf5  gcc/testsuite/gdc.test/fail_compilation/fail8032.d
! 32e498c347ba242707b9d8161b4453be  gcc/testsuite/gdc.test/fail_compilation/fail80_m32.d
! 40c308f403f490c6ed78c97e659c1a74  gcc/testsuite/gdc.test/fail_compilation/fail80_m64.d
! a0fd0181461725c24920aba037162fcf  gcc/testsuite/gdc.test/fail_compilation/fail8179b.d
! 00494b365b95ccb93500cfcc6ebaaa99  gcc/testsuite/gdc.test/fail_compilation/fail8217.d
  fa8cbb814bdd1ecb615be4298b99baac  gcc/testsuite/gdc.test/fail_compilation/fail8313.d
! ea6e5ebd5d5bf362be413be7448fde8c  gcc/testsuite/gdc.test/fail_compilation/fail8373.d
! 73d40d3fee1d618e8980a4e860f22cd2  gcc/testsuite/gdc.test/fail_compilation/fail86.d
! cffd439d0a05081a17862f94a3576f36  gcc/testsuite/gdc.test/fail_compilation/fail8631.d
  45ecc1b0f407c1be0cd016bb6d98e64c  gcc/testsuite/gdc.test/fail_compilation/fail8691.d
! bab594490adeca400049585626aaccab  gcc/testsuite/gdc.test/fail_compilation/fail8724.d
! 1ac2d85770f61331561122c81ef4bf8b  gcc/testsuite/gdc.test/fail_compilation/fail9.d
! 23b35bda012b649a7723a38bbb52c805  gcc/testsuite/gdc.test/fail_compilation/fail9063.d
! 0215b7b56bd4a126077d20bf51703bb4  gcc/testsuite/gdc.test/fail_compilation/fail9081.d
! 771bd43f837fd1726849e60aee972a7c  gcc/testsuite/gdc.test/fail_compilation/fail91.d
! 7425a489fb3e1cf62fd1676063523669  gcc/testsuite/gdc.test/fail_compilation/fail9199.d
! 8118df5a5b3e520da0b6f0b1d12e3f66  gcc/testsuite/gdc.test/fail_compilation/fail92.d
  464df40ce91526b0d13136269cd06d56  gcc/testsuite/gdc.test/fail_compilation/fail9279.d
! be4679dbd8fe74faaf26804231b06205  gcc/testsuite/gdc.test/fail_compilation/fail93.d
  86e6c37236e5281ae6e85b20c93617ec  gcc/testsuite/gdc.test/fail_compilation/fail9301.d
! 4d688386b610dbfe6b55ada0e5abd83c  gcc/testsuite/gdc.test/fail_compilation/fail9346.d
! 0d8b95ea35896a3321b7803ee20504f8  gcc/testsuite/gdc.test/fail_compilation/fail9368.d
! 76f44d833438e607e811e4467e96db3a  gcc/testsuite/gdc.test/fail_compilation/fail94.d
! d716cf55441f89a7751ebf4c10b24978  gcc/testsuite/gdc.test/fail_compilation/fail9413.d
! 48f4029390238146e47743004ade13f3  gcc/testsuite/gdc.test/fail_compilation/fail9414a.d
! e68f08b234c23a721b30182ef978b89a  gcc/testsuite/gdc.test/fail_compilation/fail9414b.d
! 043572a8e7de9d8894df10197114a696  gcc/testsuite/gdc.test/fail_compilation/fail9414c.d
! 6e689aa5cd60c6d77412d6696270bdb2  gcc/testsuite/gdc.test/fail_compilation/fail9414d.d
! e60fc009c6fa0e6353822f7650fc524e  gcc/testsuite/gdc.test/fail_compilation/fail95.d
! 92c3532dfda703ad5e2b261f4c47da75  gcc/testsuite/gdc.test/fail_compilation/fail9537.d
! 82de58faa8d7e6f3c6916d98f669c3cc  gcc/testsuite/gdc.test/fail_compilation/fail9562.d
  9c2c95527f1091d7b4fb961d8dc5b771  gcc/testsuite/gdc.test/fail_compilation/fail9572.d
! 8da3435155956a5e407118bcb92ab30c  gcc/testsuite/gdc.test/fail_compilation/fail96.d
! b7ac24805f42a0d95c22ed419f2448eb  gcc/testsuite/gdc.test/fail_compilation/fail9613.d
! 2ab9444b03fc1256fa47253b954bc9d3  gcc/testsuite/gdc.test/fail_compilation/fail9665a.d
! 3a70588989e45113c9106f242a202597  gcc/testsuite/gdc.test/fail_compilation/fail9665b.d
! 54db7d18f58aba432d47f6a801da2392  gcc/testsuite/gdc.test/fail_compilation/fail97.d
! 77704d558eb48472bb54bce5a62c0796  gcc/testsuite/gdc.test/fail_compilation/fail9710.d
! 791ce9351af21b77b654e675cb845628  gcc/testsuite/gdc.test/fail_compilation/fail9735.d
! 76d276afce2d8fac06f34565a1958c89  gcc/testsuite/gdc.test/fail_compilation/fail9766.d
! 1eeed95072caeba8be3889c2b93439f1  gcc/testsuite/gdc.test/fail_compilation/fail9773.d
! abc82347eaa25458a588e16c9a1500af  gcc/testsuite/gdc.test/fail_compilation/fail9790.d
! ba9fce21801162f260b3ae82c57b2b2d  gcc/testsuite/gdc.test/fail_compilation/fail98.d
! 9cdb720f343793cb1b54fa713a64969c  gcc/testsuite/gdc.test/fail_compilation/fail9891.d
! 542c2a5aaf59034cb5ceffeab9a4b15b  gcc/testsuite/gdc.test/fail_compilation/fail9892.d
! ae3b5b70a90dc65576f44e632f3c65fe  gcc/testsuite/gdc.test/fail_compilation/fail99.d
! 0771a38962d028547a2211b3cdd0a9e0  gcc/testsuite/gdc.test/fail_compilation/fail9936.d
! 327bf6863a3a75032f29b32e35231ee7  gcc/testsuite/gdc.test/fail_compilation/fail_arrayop1.d
! f429d916c06376226de3104e01932afe  gcc/testsuite/gdc.test/fail_compilation/fail_arrayop2.d
! 603d3be6e928ca6506f4912cc9960873  gcc/testsuite/gdc.test/fail_compilation/fail_casting.d
  d1920a0ad9ef7df56e67e67aed392ab6  gcc/testsuite/gdc.test/fail_compilation/fail_casting1.d
! 2f2bd0c53ac2187eef854880438dcfc2  gcc/testsuite/gdc.test/fail_compilation/fail_casting2.d
! eb77825149c2bf10dbb360ce6e6afa3a  gcc/testsuite/gdc.test/fail_compilation/fail_circular.d
! cb5953eb620de79b54d1ca3fc4d57465  gcc/testsuite/gdc.test/fail_compilation/fail_circular2.d
! ef8b0c36b9bbfa6c8f8b47cf11d1470c  gcc/testsuite/gdc.test/fail_compilation/fail_compilation.exp
  39d9ce96eb95361623099463c49b4659  gcc/testsuite/gdc.test/fail_compilation/fail_contracts1.d
  f0f98a24874397d29f4f6e59def95d45  gcc/testsuite/gdc.test/fail_compilation/fail_contracts2.d
! ad91c6f3a03ac48199c480a9a24698cf  gcc/testsuite/gdc.test/fail_compilation/fail_contracts3.d
  2ba3f1515a3ee5a14f9c4466fc8caef3  gcc/testsuite/gdc.test/fail_compilation/fail_contracts4.d
  695faa3012289c1132b755b3a4e17c6b  gcc/testsuite/gdc.test/fail_compilation/fail_isZeroInit.d
! 8b038d81173c5d73d41f288d1c14cc5c  gcc/testsuite/gdc.test/fail_compilation/fail_opover.d
! 96423017003b5cafff9ecdd32ddfff36  gcc/testsuite/gdc.test/fail_compilation/fail_scope.d
! 271a08f1d7512276c99e008046f8605f  gcc/testsuite/gdc.test/fail_compilation/failattr.d
! ebd64d6983f8bc83ea32bd3853a25e2e  gcc/testsuite/gdc.test/fail_compilation/failcontracts.d
! 478ceccefbaf071e2bf9b9a38e473994  gcc/testsuite/gdc.test/fail_compilation/faildeleteaa.d
! cbefa89c496e61397c9145d05e4c70b4  gcc/testsuite/gdc.test/fail_compilation/faildottypeinfo.d
  acd4dc01e2f625f440ffb85c36b0bdd8  gcc/testsuite/gdc.test/fail_compilation/failescape.d
  572be48d5a0a5235990cd885758cfa21  gcc/testsuite/gdc.test/fail_compilation/failinout1.d
  c7f4961ddbeca8a36494b25667221785  gcc/testsuite/gdc.test/fail_compilation/failinout2.d
  2ee5553bf2ef7df7520e5f560f81713a  gcc/testsuite/gdc.test/fail_compilation/failinout3748a.d
  5bd66c2d163a5f011e1164fee8159067  gcc/testsuite/gdc.test/fail_compilation/failinout3748b.d
! d8f5ba73e3a4f9d0530c7647bea1cbcc  gcc/testsuite/gdc.test/fail_compilation/failmemalloc.d
! 37fdb0a7e173e876d99753fa5315d9c7  gcc/testsuite/gdc.test/fail_compilation/failoffset.d
  d5f5f9e3ec363ba8c6f1846ec95974e1  gcc/testsuite/gdc.test/fail_compilation/failsafea.d
  b103e7dea688095eeac13c4d83e09207  gcc/testsuite/gdc.test/fail_compilation/failsafeb.d
! 84fd81471c85436d19426405d0cfbda5  gcc/testsuite/gdc.test/fail_compilation/failsafec.d
! 0e9c903f2172a6205ba26b40c6d4df8b  gcc/testsuite/gdc.test/fail_compilation/fix21585.d
  93690a25ed6e19eb304f316a96d26179  gcc/testsuite/gdc.test/fail_compilation/fix350a.d
  d70aafa6b9062aa0a03de1dadb2afa0e  gcc/testsuite/gdc.test/fail_compilation/fix350b.d
! 63f06803b592e4668ad6ea92ab122db2  gcc/testsuite/gdc.test/fail_compilation/format.d
  3f0593f45a26cf2f750af2587d67a6ba  gcc/testsuite/gdc.test/fail_compilation/gag4269a.d
  f56ebc2eca71902974fca5bb8a136c4e  gcc/testsuite/gdc.test/fail_compilation/gag4269b.d
  f68d4c65c480dd21796992cb08232816  gcc/testsuite/gdc.test/fail_compilation/gag4269c.d
  749dbc75bce825328eabbeb85df3b8ca  gcc/testsuite/gdc.test/fail_compilation/gag4269d.d
  87a6211fb542430ff7af21389d799fda  gcc/testsuite/gdc.test/fail_compilation/gag4269e.d
! 1b0106bf9711b50da0edec8d701ffbff  gcc/testsuite/gdc.test/fail_compilation/gag4269f.d
  9cf3422f5ffafd5938cb92091c05e380  gcc/testsuite/gdc.test/fail_compilation/gag4269g.d
! 4924bb330aad9a3a221001d90b0f2cd6  gcc/testsuite/gdc.test/fail_compilation/ice10016.d
! 4321e56879e6d7a0189fc39fc2f74bc0  gcc/testsuite/gdc.test/fail_compilation/ice10076.d
! 8a4fd2be24286f2e96c8130b9ec5c516  gcc/testsuite/gdc.test/fail_compilation/ice10212.d
! 414bebf4380a93ab67ce4c1dde82b606  gcc/testsuite/gdc.test/fail_compilation/ice10259.d
  d5388b9b8af91183c0f15639c00276ad  gcc/testsuite/gdc.test/fail_compilation/ice10273.d
! 9a1aecc53ad76d6ee7d29dbe1b140fb3  gcc/testsuite/gdc.test/fail_compilation/ice10283.d
! 36282dca66cc13627d09ba69bcaf8abd  gcc/testsuite/gdc.test/fail_compilation/ice10341.d
  70bc10d3ccd01357e26413166df5bcc5  gcc/testsuite/gdc.test/fail_compilation/ice10382.d
! 840602a70340560c4228cad8b02029d9  gcc/testsuite/gdc.test/fail_compilation/ice10419.d
  c56acd6f4c74ed39f0536444293d098c  gcc/testsuite/gdc.test/fail_compilation/ice10598.d
  53e85d82f583a68093ca5af572f9c19c  gcc/testsuite/gdc.test/fail_compilation/ice10599.d
! 331c411319a4683601e4e1216997ec8c  gcc/testsuite/gdc.test/fail_compilation/ice10600.d
! 2b77b91ba63d47724117017f9b718746  gcc/testsuite/gdc.test/fail_compilation/ice10616.d
! 7c853f1c4d87728b2829b19242e6b4dc  gcc/testsuite/gdc.test/fail_compilation/ice10624.d
! 2288c784d75ba7a08e4ff44f0fb7ad2e  gcc/testsuite/gdc.test/fail_compilation/ice10651.d
! b6e298113f4032e1ecf845018509e3c9  gcc/testsuite/gdc.test/fail_compilation/ice10713.d
! d867e8f4cc6a3593665658a95d016379  gcc/testsuite/gdc.test/fail_compilation/ice10727a.d
! 9d704f2756c3f1b5d4e929ea90a56498  gcc/testsuite/gdc.test/fail_compilation/ice10727b.d
! 9725875f45dbc09551e82485b6cc816f  gcc/testsuite/gdc.test/fail_compilation/ice10922.d
! 2ad61f82f5ad71827a4b49fb2def2ed8  gcc/testsuite/gdc.test/fail_compilation/ice10938.d
! 4e29caf33d9e409af7f2dfbd103eb81b  gcc/testsuite/gdc.test/fail_compilation/ice10949.d
! 045f4189c353660ed515d34129690c75  gcc/testsuite/gdc.test/fail_compilation/ice11086.d
  648c23d8d77c00d2e35dccf65fe72418  gcc/testsuite/gdc.test/fail_compilation/ice11136.d
  51064f5105da0930ea716a6625403b6e  gcc/testsuite/gdc.test/fail_compilation/ice11153.d
! b51a4d91b761fcecca30c2deeb1b924c  gcc/testsuite/gdc.test/fail_compilation/ice11404.d
! 3beb210ffe6107f23d2822ed280a3f65  gcc/testsuite/gdc.test/fail_compilation/ice1144.d
! 09df347d17945bfe2dde33477998d840  gcc/testsuite/gdc.test/fail_compilation/ice11472.d
! c8d1963e3f86fbf4c823c114419d718a  gcc/testsuite/gdc.test/fail_compilation/ice11513a.d
! ba1a37a7a4bdc32be1ec2cdd336d6948  gcc/testsuite/gdc.test/fail_compilation/ice11513b.d
! f0f8a73bc03a73310db101bc8e7d5b91  gcc/testsuite/gdc.test/fail_compilation/ice11518.d
! f555c49f2289a7ccc0001ed648ddfca4  gcc/testsuite/gdc.test/fail_compilation/ice11552.d
! 309ef934e24961527521f3dfe3f54f84  gcc/testsuite/gdc.test/fail_compilation/ice11553.d
  74a4ba5f3fefa42fbbfd071076e14869  gcc/testsuite/gdc.test/fail_compilation/ice11626.d
  4da5ee3a1d67873962af14a594e3465e  gcc/testsuite/gdc.test/fail_compilation/ice11726.d
! ca11a06f1ca4d1d91005bcff962d790c  gcc/testsuite/gdc.test/fail_compilation/ice11755.d
! 4b74fd3348bd1d84314b6785d18cfb96  gcc/testsuite/gdc.test/fail_compilation/ice11790.d
! 10c1fdc16c69289be0b01ffd31a6c92a  gcc/testsuite/gdc.test/fail_compilation/ice11793.d
! 7756d64e48613e39400eb32b0f158e09  gcc/testsuite/gdc.test/fail_compilation/ice11822.d
! 81108bcc12e0377c77595ee4fa2ed637  gcc/testsuite/gdc.test/fail_compilation/ice11849b.d
! a52923b9a3fbaa838dbd0f4e75fe7458  gcc/testsuite/gdc.test/fail_compilation/ice11850.d
! 2813a1705d81c9893904bef53301173e  gcc/testsuite/gdc.test/fail_compilation/ice11919.d
! b8dfe32a09c1097265ff2ff7a62a55ae  gcc/testsuite/gdc.test/fail_compilation/ice11922.d
  b770417113d0cfab995e016c1a96463c  gcc/testsuite/gdc.test/fail_compilation/ice11926.d
! f32e370d4183505c261557d5a65c3cc9  gcc/testsuite/gdc.test/fail_compilation/ice11944.d
  3581ee928172d5e956124a025111f8e2  gcc/testsuite/gdc.test/fail_compilation/ice11963.d
  34eeab6b424aabc0833e5a87447b6f8e  gcc/testsuite/gdc.test/fail_compilation/ice11965.d
  7a3bc872fc720b7fe6b26109acfc6ba1  gcc/testsuite/gdc.test/fail_compilation/ice11967.d
! 5199864720454257fd2c61b37ec7594b  gcc/testsuite/gdc.test/fail_compilation/ice11968.d
  62edb8803f123fb16f5e40f647c48a0d  gcc/testsuite/gdc.test/fail_compilation/ice11969.d
  5c4e51a872cc510224e82db0a4d3bef5  gcc/testsuite/gdc.test/fail_compilation/ice11974.d
  52a2c69cb2543e948028d7a380bb12b3  gcc/testsuite/gdc.test/fail_compilation/ice11982.d
! a6636c8a4c71a265e6d21f202a76539f  gcc/testsuite/gdc.test/fail_compilation/ice12040.d
! aedf56d57f73319b449dc3bb7dfadfe4  gcc/testsuite/gdc.test/fail_compilation/ice12158.d
! dc526d72050e5ed483c62a6f1a07a9f2  gcc/testsuite/gdc.test/fail_compilation/ice12174.d
! c70e41227a0cd12ef0e63c0bca881481  gcc/testsuite/gdc.test/fail_compilation/ice12235.d
! eb6d04101c276736d1461310f459d1f9  gcc/testsuite/gdc.test/fail_compilation/ice12350.d
! 25764de52499e98ecc0f2e30b58a1731  gcc/testsuite/gdc.test/fail_compilation/ice12362.d
  3bc21becfe6e22cc50bb89839b877fc6  gcc/testsuite/gdc.test/fail_compilation/ice12397.d
  7cb92086b9ee1495589129f725e2a3c1  gcc/testsuite/gdc.test/fail_compilation/ice12501.d
! d4071766f38dabbb766714fe5f35e873  gcc/testsuite/gdc.test/fail_compilation/ice12534.d
! 3d23a3c027534d2055b1abd61f4f714f  gcc/testsuite/gdc.test/fail_compilation/ice12539.d
! 5ae1f1c6562e8fef4324c953c05abf95  gcc/testsuite/gdc.test/fail_compilation/ice12574.d
  c5d83c46b1283b0dd2faab15724477e0  gcc/testsuite/gdc.test/fail_compilation/ice12581.d
  94cfd39ff841db3c06aa46f974ec9920  gcc/testsuite/gdc.test/fail_compilation/ice12673.d
! 92f231ae4077e2e6dbb079f4cea388a9  gcc/testsuite/gdc.test/fail_compilation/ice12727.d
! b21ba1d5cf4bd9eabd54e3db330f115d  gcc/testsuite/gdc.test/fail_compilation/ice12827.d
  a7ad99af969fb1ecb4ad94aca9468df7  gcc/testsuite/gdc.test/fail_compilation/ice12836.d
  3338ec526a2d9e2ab88908856caff232  gcc/testsuite/gdc.test/fail_compilation/ice12838.d
! 2e07adc8418755dba08bc427c51ba084  gcc/testsuite/gdc.test/fail_compilation/ice12841.d
  a5897d2681c15118416b4f821cc74062  gcc/testsuite/gdc.test/fail_compilation/ice12850.d
! b5bbfca517a6309a75c5250b4aaddcea  gcc/testsuite/gdc.test/fail_compilation/ice12902.d
  9e9a8eac1a9f49f5c052a39cf734e59c  gcc/testsuite/gdc.test/fail_compilation/ice12907.d
! f9b889fd36c0e3eb8c203c3bf5f361dd  gcc/testsuite/gdc.test/fail_compilation/ice13024.d
! dbe48e64457e50f689308f7e5edef486  gcc/testsuite/gdc.test/fail_compilation/ice13027.d
! 4fd20c2a9e1c61fc43fa533c2db479b6  gcc/testsuite/gdc.test/fail_compilation/ice13081.d
! d5d527bd64b24391dcc3aa9112f3e35a  gcc/testsuite/gdc.test/fail_compilation/ice13131.d
! f5bfef709eeb80a71aa22da48544ec42  gcc/testsuite/gdc.test/fail_compilation/ice13220.d
! e959edd456d53ba0036295aa74eaf6ad  gcc/testsuite/gdc.test/fail_compilation/ice13221.d
! b4426dd600ea438cdf9b28f24885877d  gcc/testsuite/gdc.test/fail_compilation/ice13225.d
! 1e911bd4354158bb3b1f317f7f059cec  gcc/testsuite/gdc.test/fail_compilation/ice13311.d
! 6a0e93d41548b6c4e2c34e83b9bc174e  gcc/testsuite/gdc.test/fail_compilation/ice13356.d
! c48f547c69d4c96195326975107f0486  gcc/testsuite/gdc.test/fail_compilation/ice13382.d
! cf1b4549211d533c81af246706257e10  gcc/testsuite/gdc.test/fail_compilation/ice13385.d
! 6d7881c271e5972d59529b328f4d3d01  gcc/testsuite/gdc.test/fail_compilation/ice13459.d
! 4a1a4882afb99341904c3c54a9bcaaff  gcc/testsuite/gdc.test/fail_compilation/ice13465a.d
! 4f97e8b752b4a58e76266f13102c1506  gcc/testsuite/gdc.test/fail_compilation/ice13465b.d
  2758dd2a496a5538d3b0f220c968d7c2  gcc/testsuite/gdc.test/fail_compilation/ice13563.d
! 55e9ba24e8d3ac650a5cd5315aca8237  gcc/testsuite/gdc.test/fail_compilation/ice1358.d
  a2859dc4361a77e0eb5ace8ca45bc965  gcc/testsuite/gdc.test/fail_compilation/ice13644.d
! e7d2caa9dcca79e159dc9048b43dc8f1  gcc/testsuite/gdc.test/fail_compilation/ice13788.d
! 8ab1e0c8db7fcaaa6b3394df01a74ec3  gcc/testsuite/gdc.test/fail_compilation/ice13816.d
! 89ad1232a73715f41c304ddd15cfe446  gcc/testsuite/gdc.test/fail_compilation/ice13835.d
! 3cd15cfdc3c042bac27dfe9e4cc0e822  gcc/testsuite/gdc.test/fail_compilation/ice13921.d
! cd3fc5d064dfdb8e39ee9fbec265f0f5  gcc/testsuite/gdc.test/fail_compilation/ice13987.d
! ef9364abd953aaab7253838a0bf271a5  gcc/testsuite/gdc.test/fail_compilation/ice14055.d
! a0f7c2ac8051c5407320ce9173b03368  gcc/testsuite/gdc.test/fail_compilation/ice14096.d
! 9414e24ca155834fdc75f00837acf65b  gcc/testsuite/gdc.test/fail_compilation/ice14116.d
! b0968d49cc197cb5026945873c9bf117  gcc/testsuite/gdc.test/fail_compilation/ice14130.d
! 3813730462775d91da4595375701017d  gcc/testsuite/gdc.test/fail_compilation/ice14146.d
! 65ca6ba51ae78107f5b7842d1e1cde74  gcc/testsuite/gdc.test/fail_compilation/ice14177.d
  3ffe323bf5cac54cd8f129bd4d24b624  gcc/testsuite/gdc.test/fail_compilation/ice14185.d
! cef6e4ee05289a19f857f0fd91a403f9  gcc/testsuite/gdc.test/fail_compilation/ice14272.d
! bcb70200c1b898896326f1d823f032cc  gcc/testsuite/gdc.test/fail_compilation/ice14424.d
! 2f89e48b9355b8b13408b57bd8356fa7  gcc/testsuite/gdc.test/fail_compilation/ice14446.d
! 57bcd63f9dc7e2123e642a529933677b  gcc/testsuite/gdc.test/fail_compilation/ice14621.d
! f20926a6545eb7d7391528ed4c3f0831  gcc/testsuite/gdc.test/fail_compilation/ice14642.d
! 8ba2107bcc1119ab2a868c0ca081a039  gcc/testsuite/gdc.test/fail_compilation/ice14844.d
! 6d61a08385e753286f5b5e6d12f853b8  gcc/testsuite/gdc.test/fail_compilation/ice14907.d
  61206c0be6afd5ad30b658069fbd81b2  gcc/testsuite/gdc.test/fail_compilation/ice14923.d
- e00ad9c276609d40b5d49d459788072c  gcc/testsuite/gdc.test/fail_compilation/ice14929.d
  0144be1b1ccbd02aa3727042eb326ea2  gcc/testsuite/gdc.test/fail_compilation/ice15002.d
! 53f784e3dcd299d223cbaca6fbe301b8  gcc/testsuite/gdc.test/fail_compilation/ice15092.d
  116ac487061a001659e6c5349c18d655  gcc/testsuite/gdc.test/fail_compilation/ice15127.d
! b54a943f974eacd8acb1c8ddd23e78e0  gcc/testsuite/gdc.test/fail_compilation/ice15172.d
  f22d97a4996c80fd574970a5f939405d  gcc/testsuite/gdc.test/fail_compilation/ice15317.d
! 9b244fc14b93441fb656593efbfad04d  gcc/testsuite/gdc.test/fail_compilation/ice15332.d
! fb5eb542b7d929a51f5e0073a793c92f  gcc/testsuite/gdc.test/fail_compilation/ice15441.d
! 5786c26970a164449ce5bbc314336c35  gcc/testsuite/gdc.test/fail_compilation/ice15688.d
! 7bd44765fb09c754b5b61e1e23a34b16  gcc/testsuite/gdc.test/fail_compilation/ice15788.d
! 9bfd0b003bfc3575c4203457a88721bc  gcc/testsuite/gdc.test/fail_compilation/ice15816.d
  2c7865066426a00dd6119765793c2286  gcc/testsuite/gdc.test/fail_compilation/ice15855.d
! e31c57d6974d04e2c34bbe41ae8c9706  gcc/testsuite/gdc.test/fail_compilation/ice15922.d
! 2b00d279cc0ceeab6c0cabebc9ce12da  gcc/testsuite/gdc.test/fail_compilation/ice16035.d
! 02081a92305510de44e261c5fa5e3c34  gcc/testsuite/gdc.test/fail_compilation/ice17074.d
  7324203f77755460dfd2b206a19d914d  gcc/testsuite/gdc.test/fail_compilation/ice17690.d
! be6c358100e2ef5988a9d561cda1e90b  gcc/testsuite/gdc.test/fail_compilation/ice17831.d
  1ee2df9e731e72df6ec1774356fb21e5  gcc/testsuite/gdc.test/fail_compilation/ice21060.d
! 61d25d3d66bc23fc5137fdca361068bc  gcc/testsuite/gdc.test/fail_compilation/ice2843.d
! c73e0422319d9ada15828705fb8abcaa  gcc/testsuite/gdc.test/fail_compilation/ice4094.d
! 47f2860702bce61eed3f278786badf8a  gcc/testsuite/gdc.test/fail_compilation/ice4983.d
  ebfa02fece677d43edcbb1d96bb283d6  gcc/testsuite/gdc.test/fail_compilation/ice5996.d
! 4b1a5de56000851625283a114ef9c40a  gcc/testsuite/gdc.test/fail_compilation/ice6538.d
! 5e560d45b028909572a105941c9639e6  gcc/testsuite/gdc.test/fail_compilation/ice7645.d
! 8c0cfe6b615f7333cedbddab51724f08  gcc/testsuite/gdc.test/fail_compilation/ice7782.d
! d1a8fea11a89ce47cbd94d3d039b28d3  gcc/testsuite/gdc.test/fail_compilation/ice8100.d
! 2fffc2ba024805fba469ca5cb7ccb295  gcc/testsuite/gdc.test/fail_compilation/ice8255.d
! 52ed5e262a6320b9e5ecebbbb86f6c39  gcc/testsuite/gdc.test/fail_compilation/ice8309.d
  f1d18a3fe42974d8d7e5230df6193002  gcc/testsuite/gdc.test/fail_compilation/ice8499.d
  853540ed15c640e1f07a123857bdd5e3  gcc/testsuite/gdc.test/fail_compilation/ice8604.d
  a72d7818b33e56375506b6e64ac406c5  gcc/testsuite/gdc.test/fail_compilation/ice8630.d
! bce0f1298101161f7ff088a214017cce  gcc/testsuite/gdc.test/fail_compilation/ice8711.d
  f5ec039f130aa503ee1ebd140f2ceb58  gcc/testsuite/gdc.test/fail_compilation/ice8742.d
! f119c88e140897cd546fcc38df982e3d  gcc/testsuite/gdc.test/fail_compilation/ice8795.d
  8f5543f8be1f11d20a7f6886ffbfbf3e  gcc/testsuite/gdc.test/fail_compilation/ice8795b.d
  d4e8397015cc5d6f1e004c0dbd64cd2a  gcc/testsuite/gdc.test/fail_compilation/ice9013.d
! 50cf1880cea60685fd7e7f2066c7d107  gcc/testsuite/gdc.test/fail_compilation/ice9254a.d
! fa2b0afe1688358c9a4d1a6ca60deeb8  gcc/testsuite/gdc.test/fail_compilation/ice9254b.d
! 33c95e2fda7a909c7f840eeda66dd124  gcc/testsuite/gdc.test/fail_compilation/ice9254c.d
! 932bfc137cfce4ce4e105947e776e5df  gcc/testsuite/gdc.test/fail_compilation/ice9273a.d
! fe4c1de33e271d84bfbb7ed29d95614c  gcc/testsuite/gdc.test/fail_compilation/ice9273b.d
! 5a251eea5223535f2e71d45dc066aaa9  gcc/testsuite/gdc.test/fail_compilation/ice9284.d
  5c1b7a696de91f0fac6d8de5c8e96d1d  gcc/testsuite/gdc.test/fail_compilation/ice9291.d
! eb958bf96f73f43ebebbbf3f30975aec  gcc/testsuite/gdc.test/fail_compilation/ice9338.d
  af5221c169864139df80561cf6490347  gcc/testsuite/gdc.test/fail_compilation/ice9406.d
! dc5e90f888b5c961fe7d07cc48e93ef4  gcc/testsuite/gdc.test/fail_compilation/ice9439.d
! fc0358454e35b0c03980ee42d4b5615c  gcc/testsuite/gdc.test/fail_compilation/ice9494.d
! d6a5fbe36fe67b24606b6ba1902c8246  gcc/testsuite/gdc.test/fail_compilation/ice9540.d
! fdbcc50b96ac4c860e75ea30a75da423  gcc/testsuite/gdc.test/fail_compilation/ice9545.d
! 599ee2b16ceae532e7ec151072dbccc1  gcc/testsuite/gdc.test/fail_compilation/ice9759.d
! bee3c7f185f2aa7fa40b7d63e908cb1c  gcc/testsuite/gdc.test/fail_compilation/ice9806.d
! a3ffece02193437fe5bbd9775d21d910  gcc/testsuite/gdc.test/fail_compilation/ice9865.d
! db1e3a9f3fbcb357f39b30c959f9d85e  gcc/testsuite/gdc.test/fail_compilation/imphint.d
  e7ee3e2640892a91d6abcd48d4ca140c  gcc/testsuite/gdc.test/fail_compilation/imports/a10169.d
! b2182bea2cc23610badf93fbf15ac3b8  gcc/testsuite/gdc.test/fail_compilation/imports/a10528.d
! 4f894dcc4473c62d5179f7e7d7a17bab  gcc/testsuite/gdc.test/fail_compilation/imports/a11850.d
  85ac2a20db8e390122fdb91f247523c5  gcc/testsuite/gdc.test/fail_compilation/imports/a11919.d
  4cc04e8c6c4567018ac587e3c5bab8ba  gcc/testsuite/gdc.test/fail_compilation/imports/a13131checkpoint.d
  7c15265812fffa9b1d8d302b128c2d72  gcc/testsuite/gdc.test/fail_compilation/imports/a13131elec.d
--- 74969,76707 ----
  90b1f63820ca5118356cb851be4f040e  gcc/testsuite/gdc.test/compilable/protection/subpkg/tests.d
  bb9e006cebe601f91fae1b967d929f57  gcc/testsuite/gdc.test/compilable/protection/subpkg2/tests.d
  55b78b463069cf9c07d1b499af13d02e  gcc/testsuite/gdc.test/compilable/pull6815.d
! c83b370b77d383fd10e8e53e026450e9  gcc/testsuite/gdc.test/compilable/quadratic.d
! 7ab7051a32fc6e5eaac223b428e03233  gcc/testsuite/gdc.test/compilable/readmodify_structclass.d
! 4973f2f928324c2d91f8cd53c5f8ea08  gcc/testsuite/gdc.test/compilable/reinterpretctfe.d
! d8f9e17c4e0c2caed923d9e15a8fba76  gcc/testsuite/gdc.test/compilable/revert_dip1000.d
! cd042ba170234d1e39ed18bb4035f19e  gcc/testsuite/gdc.test/compilable/riia_ctor.d
! 9049661aee8ae9fbf955c442c514f3b7  gcc/testsuite/gdc.test/compilable/rvalueref.d
! d53987fd40a6651562bc46672b43b588  gcc/testsuite/gdc.test/compilable/scope.d
! 882b736d1262f755a317ddc6156a5b43  gcc/testsuite/gdc.test/compilable/scopeinfer.d
! 2142f5627117e0584fb63335d2552a52  gcc/testsuite/gdc.test/compilable/shared.d
  fd1eeff8f6c846eeb29e20921f5da298  gcc/testsuite/gdc.test/compilable/shared_destructor.d
! badf98b7c4bd98928b7900f50021dd58  gcc/testsuite/gdc.test/compilable/sharedopt.d
! a2b038b77641949ffb5019f66fd85a89  gcc/testsuite/gdc.test/compilable/shortened_methods.d
! 7c98dcd3fa3508059372d1492d038c01  gcc/testsuite/gdc.test/compilable/sroa.d
! 764dda5c691e23f6bb7b7df9165d7e14  gcc/testsuite/gdc.test/compilable/staticforeach.d
! fd05920d5061cba0cd9dc221a4b63e50  gcc/testsuite/gdc.test/compilable/stc_traits.d
! 668745ffa1278262e74c6cd37e4c954d  gcc/testsuite/gdc.test/compilable/sw_transition_complex.d
! 6d4d15a31cd7806cabe1af5f4e06bb12  gcc/testsuite/gdc.test/compilable/sw_transition_field.d
! c60091d42dbb1891b0147676ae3bc853  gcc/testsuite/gdc.test/compilable/sw_transition_tls.d
! 863b93ea1449d9bce83e96da5401d347  gcc/testsuite/gdc.test/compilable/test1.d
! afdb1173ebd6fc744e88d519cbbce438  gcc/testsuite/gdc.test/compilable/test10028.d
  f52c467cdb64825a114c76cb4d42270c  gcc/testsuite/gdc.test/compilable/test10056.d
  723170658610a254681bd9ccb073f2db  gcc/testsuite/gdc.test/compilable/test10066.d
! 59fe4984930fee6a5a5a2800b4322cb2  gcc/testsuite/gdc.test/compilable/test10073.d
  f7053e67651c479beeb889f6c6d63333  gcc/testsuite/gdc.test/compilable/test10186.d
! 2790a5368ce3d72e4ecd5c4a3220e2fa  gcc/testsuite/gdc.test/compilable/test10312.d
! 6fc2b0a4803135a2cd1320e52761173f  gcc/testsuite/gdc.test/compilable/test10375.d
! 927400524f78dfe8b706f250957e1225  gcc/testsuite/gdc.test/compilable/test10520.d
  c195e7094e70746673bc24f452926027  gcc/testsuite/gdc.test/compilable/test10695.d
  b32ac2de7289a218e373f46522a7eee5  gcc/testsuite/gdc.test/compilable/test10726.d
! e1db06f17330efa037e043489d644eee  gcc/testsuite/gdc.test/compilable/test10752.d
! ee66a00aab8ee3f5338587b5c9f6b541  gcc/testsuite/gdc.test/compilable/test10981.d
  24a59def26cb96f65546832afec063d2  gcc/testsuite/gdc.test/compilable/test10992.d
  08cf2264e6dc717220c8c17fefc064e7  gcc/testsuite/gdc.test/compilable/test10992b.d
! 8edff9c76ea414782193b63b911bb459  gcc/testsuite/gdc.test/compilable/test10993.d
! 366b4ba19ff5350814c4a6ef60357940  gcc/testsuite/gdc.test/compilable/test11169.d
! 1fa19761b95b813d93dde6a3110687eb  gcc/testsuite/gdc.test/compilable/test11225a.d
! 0f96270f5a52d68a7b42d7cdd7cf74c5  gcc/testsuite/gdc.test/compilable/test11259.d
! 71608ab5eed5a8a336aff502f56afdaf  gcc/testsuite/gdc.test/compilable/test11371.d
  4b0f923b35d971aaf4e5b9c473d83492  gcc/testsuite/gdc.test/compilable/test11559upgradeoptlink.d
! f0584c1b2c098c52e274ad8b664c4946  gcc/testsuite/gdc.test/compilable/test11563.d
! 1a72cdc04edb98f95460beb07b42aa06  gcc/testsuite/gdc.test/compilable/test11656.d
! 29dcee761ee66cd4df7f6580bc4cc656  gcc/testsuite/gdc.test/compilable/test1170.d
  6f29e1c2c94e9aa39045848ad7a4e0bf  gcc/testsuite/gdc.test/compilable/test11824.d
+ 0db92c92cecb1382ce4798c061531a12  gcc/testsuite/gdc.test/compilable/test11847.d
  8bf0ff47ef3b2433a9fa48e24c536bc7  gcc/testsuite/gdc.test/compilable/test11914.d
  5f5597bf8979e57f84581b7dc54f0803  gcc/testsuite/gdc.test/compilable/test11980.d
  aa89b8203af70d96610b1ce5edf18959  gcc/testsuite/gdc.test/compilable/test12009.d
! 6fbf78ead38aab7b50286f345072f838  gcc/testsuite/gdc.test/compilable/test1238.d
! d5c08dfc4e902bb2f108de725abd2339  gcc/testsuite/gdc.test/compilable/test12496.d
! 0aa93c80b18071773ec2b51cf5859172  gcc/testsuite/gdc.test/compilable/test12511.d
  d3b477ff39dc5987d927a70762107cc0  gcc/testsuite/gdc.test/compilable/test12523.d
! 515ca7537a67835ba667af28634ef8bf  gcc/testsuite/gdc.test/compilable/test12527.d
  fe8050ee6ba1d00b1162bdbe9a91a793  gcc/testsuite/gdc.test/compilable/test12567a.d
  7ee0b8197bef137c3c9c71bee19b4dd8  gcc/testsuite/gdc.test/compilable/test12567b.d
! 77a7e4a428b7ec09c00c4754b9c1078e  gcc/testsuite/gdc.test/compilable/test12567c.d
! 02802cbb9f5d9037285a0197c64a8da5  gcc/testsuite/gdc.test/compilable/test12567d.d
  ce76c760f83b35d99d7529bd025649c5  gcc/testsuite/gdc.test/compilable/test12567e.d
  5e9c46706cb87ea4f43c2004d6edc97e  gcc/testsuite/gdc.test/compilable/test12593.d
  d8c4af0849e8c816c0d29a332900db29  gcc/testsuite/gdc.test/compilable/test12624.d
+ 958f1baf18c919196bf7e25b617be9a9  gcc/testsuite/gdc.test/compilable/test12807.d
  f77e1a7bbd7be92c09cd140d5df25033  gcc/testsuite/gdc.test/compilable/test12967.d
! 07863d4967475fec3d567e028eefcb03  gcc/testsuite/gdc.test/compilable/test13008.d
  d8a24ba15faf351dc5548d5c73aa838f  gcc/testsuite/gdc.test/compilable/test13053.d
! 7605bed39c4e8e392901b9e40b7db3f1  gcc/testsuite/gdc.test/compilable/test13193.d
! 37e19582ba6f9dfed8393fa878569186  gcc/testsuite/gdc.test/compilable/test13194.d
! d99efc4fc656e4cfd02fce96060ab892  gcc/testsuite/gdc.test/compilable/test13226.d
! 30bec388370902ee7576c438aaea3180  gcc/testsuite/gdc.test/compilable/test13242.d
  118adf7a3992e0e4f6484c0a68c002f8  gcc/testsuite/gdc.test/compilable/test13281.d
! 073e23965e6e119780290260c78b1d1c  gcc/testsuite/gdc.test/compilable/test13512.d
  4f167980b011587dd72df5d574e9adfd  gcc/testsuite/gdc.test/compilable/test1353.d
! ca003b046c460c417bb69463a7752558  gcc/testsuite/gdc.test/compilable/test13582a.d
! 45900ad93d756b22b06abef3ca133104  gcc/testsuite/gdc.test/compilable/test13582b.d
! a073e3befbf9194c72fc2238e2264875  gcc/testsuite/gdc.test/compilable/test13600.d
  415c125f68e40729baadc65dd6a58d0e  gcc/testsuite/gdc.test/compilable/test13668.d
! b5884b337518e0a21911e7554a3cca60  gcc/testsuite/gdc.test/compilable/test13858.d
  1be21fd49f3ca4b5339bb36a5ac8ad36  gcc/testsuite/gdc.test/compilable/test13902.d
! 3d4cdd61ab4c855f782f29556d7acb3a  gcc/testsuite/gdc.test/compilable/test13953.d
! e3382cd7c832e750b975e8e15e8ec00b  gcc/testsuite/gdc.test/compilable/test14114.d
! bbcda40bdaf31c69195f2b752d783ab7  gcc/testsuite/gdc.test/compilable/test14275.d
  7939b994deccb3a91fcf0075636da4d7  gcc/testsuite/gdc.test/compilable/test14317.d
  32d2057282c7b25c5d89cd7d3a63e87f  gcc/testsuite/gdc.test/compilable/test14375.d
! 113133cb8f74d50d2bc4d8a9d34f0ac8  gcc/testsuite/gdc.test/compilable/test14528.d
! 7301b72ffdffeb17a34d41399f4bb482  gcc/testsuite/gdc.test/compilable/test14666.d
! 828c91d214892c4d8c0ef3fb2b07f578  gcc/testsuite/gdc.test/compilable/test14740.d
  d08eb915c0915356c5a6a6cfb65fc12c  gcc/testsuite/gdc.test/compilable/test14747.d
  2715a539d70e535ba7ff6e6c97ef43da  gcc/testsuite/gdc.test/compilable/test14781.d
+ afc327b884abbf80232d16e085c874da  gcc/testsuite/gdc.test/compilable/test14831.d
  ce3583d666a02f9aeb875d1e3214809a  gcc/testsuite/gdc.test/compilable/test14838.d
+ 9006649e9e8c8f1a23086a5ced20b516  gcc/testsuite/gdc.test/compilable/test14929.d
  fd79d2256c9f3b641f6858510f031dec  gcc/testsuite/gdc.test/compilable/test14962.d
  1413a891a6e34f5017ae82469f21b4d5  gcc/testsuite/gdc.test/compilable/test14973.d
! 952d434ea092b56d79271146cf288e7b  gcc/testsuite/gdc.test/compilable/test15019.d
  5dca66e0d47bbc28c2c8f9f77fb0facd  gcc/testsuite/gdc.test/compilable/test15056.d
! 32dbf0c2767587a3342271f2611dcd88  gcc/testsuite/gdc.test/compilable/test15150.d
! 11428550cdb9c5b64565fcd0d58c02dd  gcc/testsuite/gdc.test/compilable/test15225.d
! 1ffca87267e8eebfdb13750f558709f4  gcc/testsuite/gdc.test/compilable/test15292.d
  d787dea08d42bcb0bf75bdf7f07b8678  gcc/testsuite/gdc.test/compilable/test15326.d
! ab92624df64e4d44b762c06f9a33e3b3  gcc/testsuite/gdc.test/compilable/test1537.d
  77cb2da5ba8893d94564c72f5ea0746b  gcc/testsuite/gdc.test/compilable/test15371.d
! 4faad448b1f7ce88392c7d974688ba12  gcc/testsuite/gdc.test/compilable/test15389_x.d
! 9fd3e33c34c517b6dda5d884ac3f1f74  gcc/testsuite/gdc.test/compilable/test15389_y.d
  4dc72f84f8d23f54ba99ff64df68e011  gcc/testsuite/gdc.test/compilable/test15402.d
! 96d642a49dcebcdba0d5788a34e00d02  gcc/testsuite/gdc.test/compilable/test15464.d
! 1810ee1bda56d48594622f3953d23032  gcc/testsuite/gdc.test/compilable/test1547.d
! 401f89600e28289a9eb211778166d3a8  gcc/testsuite/gdc.test/compilable/test15490.d
! 34ba4d54db38ea966f300ea35daaa297  gcc/testsuite/gdc.test/compilable/test15519_x.d
! a1e7315e30fe538724c4a044acb4a084  gcc/testsuite/gdc.test/compilable/test15519_y.d
  c170e59878e4554ca268a8f43ab696b7  gcc/testsuite/gdc.test/compilable/test15550.d
! b27971febde409e8525eeaddce12cd73  gcc/testsuite/gdc.test/compilable/test15565.d
! 6cfee37b99e0d3472e8c66bff4030731  gcc/testsuite/gdc.test/compilable/test15578.d
  b2450b3d68fb07bbb35fed7e9a7d4049  gcc/testsuite/gdc.test/compilable/test15618.d
  8dcaa8a54506b89615d613d5c7bf3877  gcc/testsuite/gdc.test/compilable/test15668.d
! 1ee914509000eb8716be1b969ecc7d19  gcc/testsuite/gdc.test/compilable/test15711.d
! 15b87f1d82f0d05527c6ff45b1a3f9e9  gcc/testsuite/gdc.test/compilable/test15762.d
! b92dd768af5e4cef6539509b13dd06ac  gcc/testsuite/gdc.test/compilable/test15780.d
  f53698308a86147743b2f30c9ed83654  gcc/testsuite/gdc.test/compilable/test15784.d
! db8a66db0b4a2c6dd65224dacc605181  gcc/testsuite/gdc.test/compilable/test15785.d
  8c1e0b03168047bcefc3c5d3fc226cc2  gcc/testsuite/gdc.test/compilable/test15802.d
! 01761678791be8befdbe4784150ab920  gcc/testsuite/gdc.test/compilable/test15856.d
! a8cc9b8d349a260ad4e01af8e0d2fdce  gcc/testsuite/gdc.test/compilable/test15898.d
! 21d37d7da6bfe2e82dbe984eaebbea0c  gcc/testsuite/gdc.test/compilable/test15907.d
! 49fc63d2a835f1c4fb95bdcc011fde6f  gcc/testsuite/gdc.test/compilable/test16002.d
! 17397b9f7cbb10c84ed8513feb4eb3e2  gcc/testsuite/gdc.test/compilable/test16013a.d
! cb5d1f9daa0efe13c23bfd1d00c68875  gcc/testsuite/gdc.test/compilable/test16013b.d
  a73af7de316f24698871d03a878726ab  gcc/testsuite/gdc.test/compilable/test16031.d
! aeb2a2aefeace885d49b625d841c3b68  gcc/testsuite/gdc.test/compilable/test16037.d
! 75f755130faef450689ac2a47e0c482f  gcc/testsuite/gdc.test/compilable/test16080.d
  c66d78d3bf4e71c925116093469fe79d  gcc/testsuite/gdc.test/compilable/test16083.d
! 98e27421580b917857ac88c97ded87b8  gcc/testsuite/gdc.test/compilable/test16085.d
! 4fc0c8e93709482033d98eec271bda7c  gcc/testsuite/gdc.test/compilable/test16088.d
! 31219575114bc2b42585187acaca62ab  gcc/testsuite/gdc.test/compilable/test16107.d
! f5d646fc75920828d81e7205c65853a9  gcc/testsuite/gdc.test/compilable/test16183.d
! 6d4665413c39103240c73ee6a3e7231e  gcc/testsuite/gdc.test/compilable/test16214a.d
! 1993845af4c9e0117911b62c6ba51011  gcc/testsuite/gdc.test/compilable/test16225.d
! dc8508079e83d5a7707eaa39ff767f3a  gcc/testsuite/gdc.test/compilable/test16273.d
  dbb21fcb4c8117b8e86e342839b6ea86  gcc/testsuite/gdc.test/compilable/test16292.d
  299f492c76cc407a4551f5f622f5a7d4  gcc/testsuite/gdc.test/compilable/test16303.d
  4141477ca72a5096c3206adef57a58ea  gcc/testsuite/gdc.test/compilable/test16340.d
  7cdc1bdcfc88b0bff153fa73281ccc37  gcc/testsuite/gdc.test/compilable/test16348.d
! 3f32ab2141b07937c95902ad46075e32  gcc/testsuite/gdc.test/compilable/test16460.d
  043a88f40b9c47c01f0a06d0baca0491  gcc/testsuite/gdc.test/compilable/test16525.d
  e014faa15d07ab8af6f94fadcc30894c  gcc/testsuite/gdc.test/compilable/test16540.d
  a4f9e5e07caf5b52d346ebffe86d8357  gcc/testsuite/gdc.test/compilable/test16563.d
! 5f7f27408953edc7ed07166cfaed010d  gcc/testsuite/gdc.test/compilable/test16570.d
  9229591edd6cd1079b7ed96933684144  gcc/testsuite/gdc.test/compilable/test16572.d
  85595ae117a1402d17a219272e1e6c82  gcc/testsuite/gdc.test/compilable/test16574.d
+ 248ddac81d32f9922f5dc07416db21e7  gcc/testsuite/gdc.test/compilable/test16578a.d
+ 09bfd27a492980770cfafe7fc76bb096  gcc/testsuite/gdc.test/compilable/test16578b.d
  4001e30ad421ab92b3c1ce65037be22e  gcc/testsuite/gdc.test/compilable/test16607.d
+ 4828e461ad0c3514f8360db7c32fd848  gcc/testsuite/gdc.test/compilable/test16621.d
  4befd6db467dc07436d4eb3d601e748c  gcc/testsuite/gdc.test/compilable/test16627.d
+ 477e5d4be5ef603b86dc72d4947ec326  gcc/testsuite/gdc.test/compilable/test16635.d
+ b4c6001d01a89443d7733322b3c2bac0  gcc/testsuite/gdc.test/compilable/test16657.d
+ 1234167bd235ea06fc23efa44cbefc14  gcc/testsuite/gdc.test/compilable/test16685.d
+ 31d427942421f06a7a3446f070a88f8d  gcc/testsuite/gdc.test/compilable/test16709.d
  cfa6c5a55671befb5292bf5b134401f3  gcc/testsuite/gdc.test/compilable/test1673.d
  7327e9e4ef0547e3bb17b63ce4198760  gcc/testsuite/gdc.test/compilable/test16747.d
! f939195a756583414ca62eca1c507ae4  gcc/testsuite/gdc.test/compilable/test16798.d
! 7a7e039a42222aa3f01be22b0ff05128  gcc/testsuite/gdc.test/compilable/test17057.d
  b7bee84af0ad6009095814d5a080d445  gcc/testsuite/gdc.test/compilable/test17059.d
  e87f48da66ddb31559c11628da10640e  gcc/testsuite/gdc.test/compilable/test17130.d
! 8bbb31fae1b41935aa026de6c6e2fc0d  gcc/testsuite/gdc.test/compilable/test17143.d
! 463575820b4e2a41b812f728846774a7  gcc/testsuite/gdc.test/compilable/test17146.d
  603435cff972cf545cbfd4cbaf7675c6  gcc/testsuite/gdc.test/compilable/test17168.d
  9f322d85f59db5aacfceee570828f699  gcc/testsuite/gdc.test/compilable/test17215.d
  34a4f761ce44732e8d98f2154d655148  gcc/testsuite/gdc.test/compilable/test17339.d
  21c9a8cfce4024f66cda8de89ebf5fcf  gcc/testsuite/gdc.test/compilable/test17349.d
+ 525b0b6637c2125d112ab0ca775a6471  gcc/testsuite/gdc.test/compilable/test17351.d
  68e1dbe483cf3a2ae1a41c5106689102  gcc/testsuite/gdc.test/compilable/test17352.d
+ b5a0838019af7196a13c25a852653409  gcc/testsuite/gdc.test/compilable/test17373.d
  2c4fd5be03468f47c86571d4effcafb0  gcc/testsuite/gdc.test/compilable/test17399.d
! 98fb60ee1410735f9225e33d3e6d4c2f  gcc/testsuite/gdc.test/compilable/test17419.d
! 8242f1f53e48e7c2cf9d8dafbacf061e  gcc/testsuite/gdc.test/compilable/test17421.d
! 837ab14977712c13f8afdf37a942ca01  gcc/testsuite/gdc.test/compilable/test17434.d
! 83cdefcac9a949a50de1d7d24cb2e867  gcc/testsuite/gdc.test/compilable/test17434a.d
! 49bed88c54e20b5c3aa8ccbc81277b51  gcc/testsuite/gdc.test/compilable/test17441.d
! 4131272d15c9cea964d957bcc1a89431  gcc/testsuite/gdc.test/compilable/test17468.d
! 9a0274aeb8c60681dbf660e751fd4923  gcc/testsuite/gdc.test/compilable/test17512.d
! 6321e64875b2c744d4735a6bf1d820e9  gcc/testsuite/gdc.test/compilable/test1754.d
! a443d47e876b2d53af86e27079438afd  gcc/testsuite/gdc.test/compilable/test17541.d
! 899dd61785dc3d9b6aae33b45cac74bf  gcc/testsuite/gdc.test/compilable/test17545.d
! 137e383b156d559f4bbc5a572cc18bf7  gcc/testsuite/gdc.test/compilable/test17548.d
  8ae0157007a2b73f8e3724118fcdff99  gcc/testsuite/gdc.test/compilable/test17590.d
+ 8bd938e7e29a0097af2e364a3a27bc2b  gcc/testsuite/gdc.test/compilable/test17752.d
+ 003b5665af758297dc3f72ce51f5936c  gcc/testsuite/gdc.test/compilable/test17782.d
  7de2b38dc4a5590a892e1780e09185d5  gcc/testsuite/gdc.test/compilable/test17791.d
+ 630433d72fd5e94dcc14348d5f0cd3b3  gcc/testsuite/gdc.test/compilable/test17793.d
+ f84988e10336cbb1fa840a6e4fb1aec1  gcc/testsuite/gdc.test/compilable/test17807.d
  f9645959365eb348f2c096cd81f2e5d5  gcc/testsuite/gdc.test/compilable/test17819.d
+ 7c729645a60da4867a88b011ab48207a  gcc/testsuite/gdc.test/compilable/test17853.d
+ 006a9154f38e8279f8699e4a3b05ddef  gcc/testsuite/gdc.test/compilable/test17870.d
  8f88e1e045f2404c92df36f8f97af09d  gcc/testsuite/gdc.test/compilable/test17908.d
+ 659e003ad0020d24b71f2916f35a9112  gcc/testsuite/gdc.test/compilable/test17942.d
+ 420985ad17b63e9db71a443bea11b645  gcc/testsuite/gdc.test/compilable/test17970.d
  e2fe66eab97a7b69aa09a30ec570ce09  gcc/testsuite/gdc.test/compilable/test17991.d
+ fef3ccf128a702c92d1bb16b7150d66d  gcc/testsuite/gdc.test/compilable/test18000.d
+ 9566ecb27a10bda6584f9f539e11e08b  gcc/testsuite/gdc.test/compilable/test18020.d
+ d6dac6c332c8fa1b92e2550a20ceba4b  gcc/testsuite/gdc.test/compilable/test18030.d
+ 19884833b956eb2a61eb0e50846fbbe0  gcc/testsuite/gdc.test/compilable/test18099.d
+ 8c96dcf6167f002cfbba1551b126f451  gcc/testsuite/gdc.test/compilable/test18115.d
+ c983c55e7d4bad138553fa05aba16c85  gcc/testsuite/gdc.test/compilable/test18199.d
+ b4c81e9573b790a45cd69a6adbc14b5d  gcc/testsuite/gdc.test/compilable/test18216.d
+ ef2ed248a84e6cc602afeafacee55114  gcc/testsuite/gdc.test/compilable/test18251.d
+ 4ba35d1abf382cd13e268a6c99576a23  gcc/testsuite/gdc.test/compilable/test18385b.d
+ 39178fc3938ac061f4e913efa848a73e  gcc/testsuite/gdc.test/compilable/test18430.d
+ 851c07043bbbf61cfea8e59f57eb4e18  gcc/testsuite/gdc.test/compilable/test18468.d
+ 90e9e1f722ca0a9795f9ece163c8d601  gcc/testsuite/gdc.test/compilable/test18474.d
+ 7ceadb35f4d84cd82cfced6aad5d9e3b  gcc/testsuite/gdc.test/compilable/test18572.d
+ 5357a097ada9e24236a5df57012182d2  gcc/testsuite/gdc.test/compilable/test18578.d
+ d47061152b471a5cf32271626e2a43c1  gcc/testsuite/gdc.test/compilable/test18584.d
+ 24584da2350c078d583328c7a375f3af  gcc/testsuite/gdc.test/compilable/test18645.d
+ ec310c7091f176146c7835c51098639e  gcc/testsuite/gdc.test/compilable/test18651a.d
+ ca0dacd6aecaba129120b03611526bc1  gcc/testsuite/gdc.test/compilable/test18670.d
+ 1cb67adcdda9bb0c3182d484d4b60652  gcc/testsuite/gdc.test/compilable/test18694.d
+ ae269102609234149afd30537a31407e  gcc/testsuite/gdc.test/compilable/test18737.d
+ 4e8b77347df6494134841701625744e3  gcc/testsuite/gdc.test/compilable/test18771.d
+ fd880d6b833a65cf15315c41fb7ac4e8  gcc/testsuite/gdc.test/compilable/test18775.d
  cf778b67822c952f319386105c4a8e93  gcc/testsuite/gdc.test/compilable/test1878a.d
+ f1eb64abac889ce36fdfcaede2869042  gcc/testsuite/gdc.test/compilable/test18821.d
  bb6d980d18f268c4653a4b3f6ef90dc0  gcc/testsuite/gdc.test/compilable/test18871.d
+ 53ffe0f967b83a55d16145fb0a77c27e  gcc/testsuite/gdc.test/compilable/test18905.d
+ a24df5427c7f9335840196bab6ad4679  gcc/testsuite/gdc.test/compilable/test18936.d
+ d4fe84a9258026ac54e4e39da765f60f  gcc/testsuite/gdc.test/compilable/test18951a.d
+ 33bf834b065e73953ee7200ccfdf6da6  gcc/testsuite/gdc.test/compilable/test18951b.d
+ 9ef15ff39f1955bda6e2db15ac184016  gcc/testsuite/gdc.test/compilable/test18976.d
+ f210fafce56fae61617a6323603f6fda  gcc/testsuite/gdc.test/compilable/test19014.d
+ ffe10db4e79873d2672d7bc58c30074d  gcc/testsuite/gdc.test/compilable/test19066.d
+ f29d79bd1dafdadcf803632e7c93d396  gcc/testsuite/gdc.test/compilable/test19081.d
+ d5b0a5a7edb42b41500bfa118f0eb508  gcc/testsuite/gdc.test/compilable/test19097.d
+ e2c70da893db0bc820e7751fa0cb8338  gcc/testsuite/gdc.test/compilable/test19108.d
  f1fb0fc76744ec9a244711207ad19617  gcc/testsuite/gdc.test/compilable/test19145.d
+ 5efc46238934a04ed1cc31f8fcfcc992  gcc/testsuite/gdc.test/compilable/test19187.d
+ af3d1eacaf292262a44f9f9831a27c93  gcc/testsuite/gdc.test/compilable/test19203.d
+ c1e97c068a8180f6eba8d4e025f616e5  gcc/testsuite/gdc.test/compilable/test19224.d
+ 6456b8ecc296a982329fbbeb272fdff6  gcc/testsuite/gdc.test/compilable/test19227.d
  fc41777a1b9816ebf55ae1456219acef  gcc/testsuite/gdc.test/compilable/test19292.d
+ 44572e423ec460e685a6f14ce2713e8e  gcc/testsuite/gdc.test/compilable/test19315.d
+ 1d42cc2465474c8e5ee940979c99bef6  gcc/testsuite/gdc.test/compilable/test19409.d
+ c7560fb9fdd44bb33720d347b6dc00b7  gcc/testsuite/gdc.test/compilable/test19464.d
+ 893e351c6f9fba642a9d590210f2ec1d  gcc/testsuite/gdc.test/compilable/test19482.d
+ 138df75361561560cf95e47acddf1d08  gcc/testsuite/gdc.test/compilable/test19491.d
+ e73f5f004e7d8c211de26c52f8500884  gcc/testsuite/gdc.test/compilable/test19499.d
+ baa145adb23a15d036c01e709c9885c5  gcc/testsuite/gdc.test/compilable/test19519.d
+ 8f87157437b0364a223be7b928b9a127  gcc/testsuite/gdc.test/compilable/test19540.d
+ 1a900c27d6267aae4bf289d34d7d9e24  gcc/testsuite/gdc.test/compilable/test19557.d
  09d8521f98b3e68044c9a3bb9b194ba2  gcc/testsuite/gdc.test/compilable/test19574.d
! 671796df6f82be1c33c025e0854f72f9  gcc/testsuite/gdc.test/compilable/test19609.d
! 0886dd6b0ff11f03356d092250866653  gcc/testsuite/gdc.test/compilable/test19631.d
! 9442fde4cb34738935d24c3560a4c98d  gcc/testsuite/gdc.test/compilable/test19652.d
! 89ac62d651f368c69996bd0799fe3219  gcc/testsuite/gdc.test/compilable/test19656.d
! 8514da9ffaa0fe186ce0d01a286a0fd7  gcc/testsuite/gdc.test/compilable/test19657a.d
! de59a2cce71d726c19369183614329a0  gcc/testsuite/gdc.test/compilable/test19713.d
! 0f7c8f4f1012071d3d434ee2cb274529  gcc/testsuite/gdc.test/compilable/test19728.d
! b46dac1e08a7b4995f63aa38ccf170ca  gcc/testsuite/gdc.test/compilable/test19731.d
! 529b25789af193f11905362e14a58925  gcc/testsuite/gdc.test/compilable/test19746.d
! 2aed4ae2ef56d5de63064280b3f0b0a7  gcc/testsuite/gdc.test/compilable/test19750.d
! 47bd5b08b20220215f783e92fabf3097  gcc/testsuite/gdc.test/compilable/test19754.d
  6fbdb3bc8df45dce6f1cca2e1c65403f  gcc/testsuite/gdc.test/compilable/test19778.d
+ f32866f3582b10b8c0db36660a9f13d1  gcc/testsuite/gdc.test/compilable/test19804.d
+ d523541b4c08ac260322ace25b248689  gcc/testsuite/gdc.test/compilable/test19809.d
+ 83b040e41dd77f413196420bf28ee685  gcc/testsuite/gdc.test/compilable/test19833.d
+ 5ea370d44e37e2ab55164aed83d8ea5c  gcc/testsuite/gdc.test/compilable/test19840.d
+ 0452ceca89cb72fc05d62c952c5fa7ab  gcc/testsuite/gdc.test/compilable/test19873.d
+ 0f6d3efebaf509724fd1be0e609f4721  gcc/testsuite/gdc.test/compilable/test19895.d
  6959520dbe36e098ae727a4a9cdfdfe3  gcc/testsuite/gdc.test/compilable/test19912.d
+ d3a145e0b8eb81046cf531f549124b3f  gcc/testsuite/gdc.test/compilable/test19936.d
  bd3b792f2e9fae4293f32a0195335936  gcc/testsuite/gdc.test/compilable/test19941.d
+ a53e48f77426b6bcfc1b648b1749ad8f  gcc/testsuite/gdc.test/compilable/test19954.d
+ 135bd530993d6b24b533946f4a0cdf36  gcc/testsuite/gdc.test/compilable/test19970.d
+ 74bdbfe49e5b5868cea9cbf62decf527  gcc/testsuite/gdc.test/compilable/test20000.d
+ cf29d6236afe9b9f4de2703982b9cd04  gcc/testsuite/gdc.test/compilable/test20021.d
+ 58970205aa66e68c0dfd43d3989d8d59  gcc/testsuite/gdc.test/compilable/test20039.d
+ 6345092bc04eb33a1b3873e1b6c0b770  gcc/testsuite/gdc.test/compilable/test20051.d
+ b41606c2bc70ec2ddd69b8a97364d10e  gcc/testsuite/gdc.test/compilable/test20065.d
+ 195ec41a9aadb6a762eeffa3fa1af74c  gcc/testsuite/gdc.test/compilable/test20100.d
+ 9482701b9e381297b6f37a1d0ce10792  gcc/testsuite/gdc.test/compilable/test20136.d
+ 779521e06838c0618e724ed04abf939b  gcc/testsuite/gdc.test/compilable/test20138.d
  acf65fea78fda931df435e170b4ff10e  gcc/testsuite/gdc.test/compilable/test20151a.d
+ 38f8f7828f75ee6da7c68edadee72d84  gcc/testsuite/gdc.test/compilable/test20181.d
+ 7e7e889dc8289b4e1c60ca28fa97e657  gcc/testsuite/gdc.test/compilable/test20236.d
  9c9235445cfb7a0250eb9c627c45a97d  gcc/testsuite/gdc.test/compilable/test20280.d
+ f770c7a5fb39b162b577f96d2ed51ab6  gcc/testsuite/gdc.test/compilable/test20296.d
+ 70311f9c04e984a9ba6a30958f3f246f  gcc/testsuite/gdc.test/compilable/test20318.d
+ ec0561bd53dbd289f5e8f522895490cd  gcc/testsuite/gdc.test/compilable/test20326.d
+ ee95259c574b365a1a30e980b06cd328  gcc/testsuite/gdc.test/compilable/test20367.d
+ 539d6f16bf63038504e9260d0363dbab  gcc/testsuite/gdc.test/compilable/test20388.d
+ bfa3b260bba42f69ddab55c994c20dbc  gcc/testsuite/gdc.test/compilable/test20406.d
+ 9bc2862cc0a15805e1a3d54fb4facdc4  gcc/testsuite/gdc.test/compilable/test20410.d
+ 19fa0dc0bb0e14fce798654e012f8ce0  gcc/testsuite/gdc.test/compilable/test20417.d
+ 8d0f1a5a1e86cb9fd37c885bfe11dc84  gcc/testsuite/gdc.test/compilable/test20420.d
+ 56c36e1b133f904122f59921311ead7a  gcc/testsuite/gdc.test/compilable/test20488.d
  5d7a8d265f4f29667ecde34793879f65  gcc/testsuite/gdc.test/compilable/test20530.d
  06b732fa6a39c017318cbc16939f52fa  gcc/testsuite/gdc.test/compilable/test20537.d
+ ce9651e5787ae3d47ac7f573ab68bdfd  gcc/testsuite/gdc.test/compilable/test20596.d
+ a9f6cae470cf76b96f9bf7451b70f545  gcc/testsuite/gdc.test/compilable/test20653.d
+ 9094471bbe56e5363597e06c5e1b5c4e  gcc/testsuite/gdc.test/compilable/test20656.d
+ 8e6fac83d223452a9f4b34f3baa96f0f  gcc/testsuite/gdc.test/compilable/test20661.d
  d319ff042032f8a9da6b7cb00b09b7cb  gcc/testsuite/gdc.test/compilable/test20692.d
+ a7f0bb660a8c24f67cc96a182191462d  gcc/testsuite/gdc.test/compilable/test20695.d
+ 61071613b3cd0cb3c73761e0cf2ce7f8  gcc/testsuite/gdc.test/compilable/test20710.d
+ 4326631deb2cd01ac0dc81cbd99dfd33  gcc/testsuite/gdc.test/compilable/test20717.d
+ 3df308db3ce31eb74ee655a7312f22ae  gcc/testsuite/gdc.test/compilable/test20744.d
+ 6ac9eb4a70c61f211a4d526c80ba58e9  gcc/testsuite/gdc.test/compilable/test20789.d
+ 22b5aabc9e6268467ede3429f798cd3c  gcc/testsuite/gdc.test/compilable/test20795.d
+ d47922cfcdb5a31342cb4c065d01bab4  gcc/testsuite/gdc.test/compilable/test20821.d
+ 023aa07bce6d52c1c6a36f6d6d00cf25  gcc/testsuite/gdc.test/compilable/test20835.d
+ 95258b243a7fde4a836e4cde9df43966  gcc/testsuite/gdc.test/compilable/test20842.d
+ 112a4d74fbaa35955d2c4898421f0ac3  gcc/testsuite/gdc.test/compilable/test20860.d
+ f365ea24492d5a85d7a8825a2be7411b  gcc/testsuite/gdc.test/compilable/test20868.d
  14169fbc0bdff72551f90f07070fb611  gcc/testsuite/gdc.test/compilable/test20894.d
! 5379601999d6e8e6ef25d3eb2a736e6f  gcc/testsuite/gdc.test/compilable/test20906.d
! 68b315213e0254bc8f7a01627ac3d8e6  gcc/testsuite/gdc.test/compilable/test20909.d
! dbf2fba3b0e01ab05f8e2bdd9a3b8c81  gcc/testsuite/gdc.test/compilable/test20923.d
! 2a127ee7235b95f33861ac54bfc49053  gcc/testsuite/gdc.test/compilable/test20958.d
! e1c4ec84eedeb5a0cc94e1f9bc4e5cbe  gcc/testsuite/gdc.test/compilable/test20990.d
! e7496866f23a58a93b9b6db19e13e796  gcc/testsuite/gdc.test/compilable/test21050.d
! bec53864a2bc465c93fe4d228284bc43  gcc/testsuite/gdc.test/compilable/test21058.d
! 530ce434b634fe824b7a83f59c41f35f  gcc/testsuite/gdc.test/compilable/test21073.d
! 46e9b8dea246a3ac8622f83241a5b395  gcc/testsuite/gdc.test/compilable/test21177.d
! 1b54b7938f8b85c1a5afd3ed89fcafcf  gcc/testsuite/gdc.test/compilable/test21196.d
! 0077aff09fa55a7dc6893618897f6466  gcc/testsuite/gdc.test/compilable/test21227.d
! bbfea94fb62e11c065d4b01364310a6a  gcc/testsuite/gdc.test/compilable/test21255.d
! d971aaecc34ddbe6181a2ac08ab2b066  gcc/testsuite/gdc.test/compilable/test21282.d
! 0ba90edd374f89515b149c9045f12ad4  gcc/testsuite/gdc.test/compilable/test21299a.d
! 0ee42ed10154a17167c5ff263b2f4b76  gcc/testsuite/gdc.test/compilable/test21299b.d
  f7ebbab88f0a4f86e71b06e130f593ee  gcc/testsuite/gdc.test/compilable/test21299c.d
  effd503ab143f07a377f69a6abd2e2ab  gcc/testsuite/gdc.test/compilable/test21299d.d
+ 23473f0532b4fcf0539568286a7abb33  gcc/testsuite/gdc.test/compilable/test21330.d
+ 1798a08bb6bc5d4d9cfb0e43f52c0214  gcc/testsuite/gdc.test/compilable/test21372.d
+ 98a7dd18d329068251146d297fab72d7  gcc/testsuite/gdc.test/compilable/test21398.d
+ c6744c3207244c878cf6f0574302e3f2  gcc/testsuite/gdc.test/compilable/test21414.d
+ ba9fd4b88ca0267441472f1febace9ae  gcc/testsuite/gdc.test/compilable/test21438.d
+ 3f1b768c6d2a4190f6a0e7e142cea814  gcc/testsuite/gdc.test/compilable/test21464.d
  6aae9ab24e30cc1449c46abe03e9439e  gcc/testsuite/gdc.test/compilable/test21501a.d
+ 2f705ac2ed4d159ee7622474a6f61815  gcc/testsuite/gdc.test/compilable/test21514.d
+ 9959057e7dc37c0ead21531d77de783f  gcc/testsuite/gdc.test/compilable/test21543.d
+ 9c28314750a684e306e8009cc05f2c6d  gcc/testsuite/gdc.test/compilable/test21591.d
+ 4b14068114e43c728903370792cda6d8  gcc/testsuite/gdc.test/compilable/test21659.d
+ f308f3be6a8928891a3703e099815b37  gcc/testsuite/gdc.test/compilable/test21661.d
+ 87f44e1d5fff91756fb573a11f351e2b  gcc/testsuite/gdc.test/compilable/test21668.d
+ 4a9ef9534274a7261d8cf88a58baebab  gcc/testsuite/gdc.test/compilable/test21680.d
+ bfa238fa3d3abfcad805ef346ae86472  gcc/testsuite/gdc.test/compilable/test21719.d
  0f65bb2b07e0bc8dcb7e5d89eaf5b3f7  gcc/testsuite/gdc.test/compilable/test21742.d
+ f10bc099db72cc0c133046af052d7a78  gcc/testsuite/gdc.test/compilable/test21743.d
+ 989021a22228118f568dd11bb42ad265  gcc/testsuite/gdc.test/compilable/test21753.d
+ 08936419a9625265328cfea85871ada2  gcc/testsuite/gdc.test/compilable/test21794.d
+ f2576935cee96ace4160948e1730899a  gcc/testsuite/gdc.test/compilable/test21802.d
+ 9953d36f69791c3c3ad12ab781cbebd3  gcc/testsuite/gdc.test/compilable/test21806.d
  e5b88d27b36ae497e0682fa1afcc06be  gcc/testsuite/gdc.test/compilable/test21812.d
+ a9244fe6f2b8ede1fa5bec2486685adc  gcc/testsuite/gdc.test/compilable/test21828.d
+ 03e154b66e0ed0416386439812111279  gcc/testsuite/gdc.test/compilable/test21830.d
+ bc7975fb011749a023500cb1a40cae84  gcc/testsuite/gdc.test/compilable/test21831.d
+ 7523071ea2543e26e45e5bf23bdd52cc  gcc/testsuite/gdc.test/compilable/test21832.d
+ 6f5f3be0b3b35cb77d6cade261792f9d  gcc/testsuite/gdc.test/compilable/test21850.d
+ 031f91ebad1f7a90775adfbea13c93e7  gcc/testsuite/gdc.test/compilable/test21861.d
+ 9d6857891098eee0f95c918781d462a2  gcc/testsuite/gdc.test/compilable/test21876.d
  7bf71d49bd9d761471be55f9c50f5c92  gcc/testsuite/gdc.test/compilable/test21898.d
+ d3621808e61522c1aa8b496bb0e0f5e1  gcc/testsuite/gdc.test/compilable/test21975.d
  f8ec0845cd2590e50d27071453701fb7  gcc/testsuite/gdc.test/compilable/test22006.d
+ b6493dad6772677cf5ad85421f3d8b10  gcc/testsuite/gdc.test/compilable/test22122.d
  01b0e8acc140f229c41fe59a55df5574  gcc/testsuite/gdc.test/compilable/test22133.d
! 6510f651432b95f4c82a359a14962ff2  gcc/testsuite/gdc.test/compilable/test22214.d
! 85919d8d997233a588b01a4a904950db  gcc/testsuite/gdc.test/compilable/test22224.d
! f0737d79f6456280c78a209165f4d539  gcc/testsuite/gdc.test/compilable/test22226.d
! 0a2c768ea20b238aef210b779c6be802  gcc/testsuite/gdc.test/compilable/test22228.d
! 7f79a8ba6e17f04bc68a544afa1f4e7e  gcc/testsuite/gdc.test/compilable/test22254.d
! cd14028e6c63884cd62d8e8f5f122123  gcc/testsuite/gdc.test/compilable/test22292.d
! 00f62f1242fafcf68f4d6010324917b8  gcc/testsuite/gdc.test/compilable/test22388.d
! c3ad9ddce7a481ae3eceabc801dc2d60  gcc/testsuite/gdc.test/compilable/test22410.d
! 65f8254f25cb4c8306d198aa1a754dd6  gcc/testsuite/gdc.test/compilable/test22420.d
! 09e28d8639702c9abcd1422f5f548fea  gcc/testsuite/gdc.test/compilable/test22421.d
! 38955f5eab3c1b17fb05ce3bfc00450c  gcc/testsuite/gdc.test/compilable/test22510.d
! b4702b1d639684759b0136604f59cd6a  gcc/testsuite/gdc.test/compilable/test22593.d
! 510a0e27f32c7cc5e0dd1f202e12379e  gcc/testsuite/gdc.test/compilable/test22619.d
! 181497175eb047b56fdd4a9ec765f832  gcc/testsuite/gdc.test/compilable/test22625.d
! 901554ddde3ae8936462b745163fcba2  gcc/testsuite/gdc.test/compilable/test22632.d
! e6bb4f5c97bbba010f496af7cdf7dad5  gcc/testsuite/gdc.test/compilable/test22635.d
! a75e284a1343ab57a8bfbd77f823e12a  gcc/testsuite/gdc.test/compilable/test22639.d
! b5fdcb6907ce11c779472f845a763da6  gcc/testsuite/gdc.test/compilable/test22646.d
! b5688dff60640d71c5c1f5e9c51b5871  gcc/testsuite/gdc.test/compilable/test22665.d
! 500ebbbbc62656a7e24328bcf85bbefb  gcc/testsuite/gdc.test/compilable/test22676.d
! d2f5f11274cb1bc2aceb1062858500d5  gcc/testsuite/gdc.test/compilable/test22685.d
! 7591114e0810d21b5f28a3159a1703bf  gcc/testsuite/gdc.test/compilable/test22714.d
! f574ca50ea8bff40d0be73e922b0c00a  gcc/testsuite/gdc.test/compilable/test22734.d
! b6fa7fb8b6be39ac614122daf3b72230  gcc/testsuite/gdc.test/compilable/test22825.d
! 3ce6d345a8a1370ca8e0335c59ee3e11  gcc/testsuite/gdc.test/compilable/test22859.d
! 5045cc574731b81b8e89337c37a97779  gcc/testsuite/gdc.test/compilable/test22860.d
! 507222c7ae19a95bd88c720e54c83222  gcc/testsuite/gdc.test/compilable/test22919.d
! a92fa3d1edefb6370e848a80b53e97ed  gcc/testsuite/gdc.test/compilable/test22988.d
! 77ae147d30776a57d1b1e1f498f50d40  gcc/testsuite/gdc.test/compilable/test22997.d
! 39043d209bd26409a2bb6419b73549ed  gcc/testsuite/gdc.test/compilable/test23087.d
! ebf5b789d4a31be2e939321d6490d585  gcc/testsuite/gdc.test/compilable/test23089.d
! 330c2acf4539ef672ad9c8cf0faa0c5e  gcc/testsuite/gdc.test/compilable/test25.d
! 912661e1615a2dd8fe14dbd20528f7ba  gcc/testsuite/gdc.test/compilable/test2991.d
! b8623f405791e76ef4434794003e2abe  gcc/testsuite/gdc.test/compilable/test3004.d
! 65b2f8459513797e86e01bd50b1bb608  gcc/testsuite/gdc.test/compilable/test313a.d
  8b0a688ad726eb9d76224ef39e11e0f3  gcc/testsuite/gdc.test/compilable/test313b.d
! 84d3cbf662e0b76bf448874c485eedb3  gcc/testsuite/gdc.test/compilable/test313c.d
! 6a1ed226f6e78b47cc991e5ef5548838  gcc/testsuite/gdc.test/compilable/test313d.d
! ca75423ded28d744d26785135d5ceb2d  gcc/testsuite/gdc.test/compilable/test313e.d
! 47bc2a04448f805d82a0ebbc76426424  gcc/testsuite/gdc.test/compilable/test313f.d
! 18a639065dce553a6f7721bff7f2ea5f  gcc/testsuite/gdc.test/compilable/test313g.d
! cb8dc4a832a65fc7e4549b14a3dc02c4  gcc/testsuite/gdc.test/compilable/test314.d
! d2140d1c3d6e75f65b8b91c61c2fd9ae  gcc/testsuite/gdc.test/compilable/test318.d
  03cb2305c43115a0052540b366172beb  gcc/testsuite/gdc.test/compilable/test3673.d
! 6ccd39b1acf515b73d9496c9d6530e82  gcc/testsuite/gdc.test/compilable/test3775.d
! 113f708c9494acbd5e6b907d30855919  gcc/testsuite/gdc.test/compilable/test4003.d
! 8b5c10cf07a14040c6cff2fb546fb9ba  gcc/testsuite/gdc.test/compilable/test4090.d
  984272f47ab93b847449ea196fd097fc  gcc/testsuite/gdc.test/compilable/test4364.d
! de0e9a578f767c9879ebcd7ed8679ef4  gcc/testsuite/gdc.test/compilable/test4375.d
! ceec4bcd5a404c18ed0f108ec1f5bf5e  gcc/testsuite/gdc.test/compilable/test50.d
! 6d1e9687702234190693f0e531ac8839  gcc/testsuite/gdc.test/compilable/test5227.d
! 46edec42d5338d9ae35bd08f80fc52d1  gcc/testsuite/gdc.test/compilable/test55.d
! d1f87c40fa0c0b62b9db8f077f690237  gcc/testsuite/gdc.test/compilable/test59.d
! cd4cd770f9fc248d99ce5678ac34434b  gcc/testsuite/gdc.test/compilable/test5973.d
! 10e8d5e8b165758a31cd3921e3649fe5  gcc/testsuite/gdc.test/compilable/test6013.d
! ba4310ed7e27a9658657147c4a8aea8a  gcc/testsuite/gdc.test/compilable/test602.d
  f203cdad472a1ac06cee89c4e3557d42  gcc/testsuite/gdc.test/compilable/test6056a.d
  ac9f607c5bf6b6821ab1e25ec1590f22  gcc/testsuite/gdc.test/compilable/test6056b.d
  4be264f78a1f5c46b3fc77047a9b6b9b  gcc/testsuite/gdc.test/compilable/test6056c.d
! 8d0439323e0dfece4ca984de39ed5c1d  gcc/testsuite/gdc.test/compilable/test6089.d
! fcd24043c5cd2530e410a9c82fb0c939  gcc/testsuite/gdc.test/compilable/test61.d
! b07f7f5db1cf33421a4eadb0238405d4  gcc/testsuite/gdc.test/compilable/test62.d
! 01cdfc637b678f6b3b64fdd6cc743d6b  gcc/testsuite/gdc.test/compilable/test63.d
  16f2db11e13b840c6d42f1ebd30a6e90  gcc/testsuite/gdc.test/compilable/test6319.d
! 7744ef320f26648738df388b0aa14f33  gcc/testsuite/gdc.test/compilable/test6395.d
  db533e40440813c61fa46fb37a6f18b6  gcc/testsuite/gdc.test/compilable/test6534.d
+ 8e7162895a7cba30fed59c3345dbc87d  gcc/testsuite/gdc.test/compilable/test6541.d
  783342e2cfeb88610e0a04d00450ea41  gcc/testsuite/gdc.test/compilable/test6552.d
! 189fccabae6a301202fc7fad174d5203  gcc/testsuite/gdc.test/compilable/test66.d
! 5beb11822a09654b517cd74fe05fb47a  gcc/testsuite/gdc.test/compilable/test67.d
! 020d85eb88809fb9eff87180b65573b5  gcc/testsuite/gdc.test/compilable/test6777.d
! ae68fa3295e63c9b13e9139b6948f21f  gcc/testsuite/gdc.test/compilable/test68.d
! 1564b6ec3ad7bfb5d4f94c2dfa5ae2c7  gcc/testsuite/gdc.test/compilable/test69.d
! 326c080f81967572de05e4f09d015008  gcc/testsuite/gdc.test/compilable/test6999.d
! 32676746dd5fd895bba5cbbfab26ed71  gcc/testsuite/gdc.test/compilable/test70.d
  57edff88840a591f06f485aa844e495d  gcc/testsuite/gdc.test/compilable/test7065.d
! 34d929e7af3e09bd3bae5c33a072af2a  gcc/testsuite/gdc.test/compilable/test71.d
! c4f43c9f92845641f8f1891591a8b16d  gcc/testsuite/gdc.test/compilable/test7172.d
  dda273a2ef110ab5809c44c288a41727  gcc/testsuite/gdc.test/compilable/test7190.d
! 80b2961614a2f1f975941f6ecfa2f3a7  gcc/testsuite/gdc.test/compilable/test72.d
  06de3dbdb86544d9b0b277d86d3ad57f  gcc/testsuite/gdc.test/compilable/test7252.d
! b6f232cc5bc6b894bc73509990126d14  gcc/testsuite/gdc.test/compilable/test7399.d
! 47a166d8f490c51ab334fe8564896bad  gcc/testsuite/gdc.test/compilable/test7491.d
! e79067df611c1da27378cf89e3cadd25  gcc/testsuite/gdc.test/compilable/test7524.d
  7e58e715e6c8944700015dd56c2deb1e  gcc/testsuite/gdc.test/compilable/test7569.d
! 6d9b7f053d1c1c6842b1f5f890638045  gcc/testsuite/gdc.test/compilable/test7754.d
  c0cf3b5f60f2de636e3867e3f0a694e2  gcc/testsuite/gdc.test/compilable/test7815.d
  96010ac8f5d0782cfcfabcebef14b0e5  gcc/testsuite/gdc.test/compilable/test7886.d
  a8435199449791320394887b9c443137  gcc/testsuite/gdc.test/compilable/test8038.d
  cee9201c7a4bd69b19f522144045058c  gcc/testsuite/gdc.test/compilable/test8041.d
! 1fd5445f7916ee8f100d4aaaf5f7ec02  gcc/testsuite/gdc.test/compilable/test8296.d
! e305570dc9eead55a2900b24df9f89f6  gcc/testsuite/gdc.test/compilable/test8509.d
! a87be655c4091663d3c237215652472b  gcc/testsuite/gdc.test/compilable/test8513.d
! 5fafaf42070ca22ca3b68d5a42e192c2  gcc/testsuite/gdc.test/compilable/test8543.d
  eaba2f9e0498b9ed178c566dafb0fdb6  gcc/testsuite/gdc.test/compilable/test8631.d
  08bb23688c8e4ed3cfff98aaf0746861  gcc/testsuite/gdc.test/compilable/test8675.d
! d05922c2aef84723761f8fb16e36080c  gcc/testsuite/gdc.test/compilable/test8696.d
  9ec77bfd4d36feaf576dfdad323c5edd  gcc/testsuite/gdc.test/compilable/test8717.d
  c798616b54ddda7a7bf8ea476c6eb3b1  gcc/testsuite/gdc.test/compilable/test8802.d
  e532a2b8c5e6c299df90ad9c90a77d72  gcc/testsuite/gdc.test/compilable/test8898.d
! 29ce48087b649b50daa3ab302b6764a1  gcc/testsuite/gdc.test/compilable/test8922a.d
! d3a44570ea2e1a42e9e170f8811f5531  gcc/testsuite/gdc.test/compilable/test8922b.d
! b77248d109439d1d441a1324df2c5e33  gcc/testsuite/gdc.test/compilable/test8922c.d
! af039af81f5d4e641ae51b8bc45f8ac6  gcc/testsuite/gdc.test/compilable/test8922d.d
! 80cc055603ebd264a56055a80de669c2  gcc/testsuite/gdc.test/compilable/test8922e.d
! b73de4cb77b43ab0a205c4aad4f43b8f  gcc/testsuite/gdc.test/compilable/test8922f.d
  93d6229b1e59d52a5fc3cdf7e80a5277  gcc/testsuite/gdc.test/compilable/test8937.d
  0627b61f8b84ef5c510ab2706dc90afc  gcc/testsuite/gdc.test/compilable/test8959.d
  64de522104a033c6c0f428550b71f1e3  gcc/testsuite/gdc.test/compilable/test9029.d
! f2784ce08eda5f3393130054f5c58e71  gcc/testsuite/gdc.test/compilable/test9057.d
! 99cf44ec7d1fc5ba4fb10418116fe9ad  gcc/testsuite/gdc.test/compilable/test9209.d
! 75e479a9fa067ef99d2d1b8f44545017  gcc/testsuite/gdc.test/compilable/test9274.d
! 2fb4bbc817426dd5da90976dc709c692  gcc/testsuite/gdc.test/compilable/test9276.d
! 327d9bbee4fad7b38dc3a5cc8f9c6d00  gcc/testsuite/gdc.test/compilable/test9278a.d
! 9235d28d04c75bfbd49f4a47b7ed8938  gcc/testsuite/gdc.test/compilable/test9278b.d
! 2dd1850da011a0136c6f593859c88a82  gcc/testsuite/gdc.test/compilable/test930.d
  7dc6b695093f373d43cc3dd261d1bec4  gcc/testsuite/gdc.test/compilable/test9399.d
! 3a4d66222a7652e183c94f94d0b874ae  gcc/testsuite/gdc.test/compilable/test9434.d
! 7fe1cc3a7df54d84867964f4070f60b3  gcc/testsuite/gdc.test/compilable/test9435.d
! cb22ffc739f8c5974f6ea959deba7a91  gcc/testsuite/gdc.test/compilable/test9436.d
  32887f6006186e5c1563e74ecca07c3c  gcc/testsuite/gdc.test/compilable/test9526.d
  14eba8cb0439fb4587fd4aa667c307e1  gcc/testsuite/gdc.test/compilable/test9554.d
  3527ab00198f9edaaf12cd056769e7f1  gcc/testsuite/gdc.test/compilable/test9565.d
  0485e20adfd94e487f38d7332b48507d  gcc/testsuite/gdc.test/compilable/test9570.d
! 651fcadd1bd707987d6c4e0f43835bd5  gcc/testsuite/gdc.test/compilable/test9613.d
  3ff4d56cc46fe9c375e27a925753cb21  gcc/testsuite/gdc.test/compilable/test9639.d
! 04a1d813881cd51192cda468efbf0030  gcc/testsuite/gdc.test/compilable/test9672.d
! 17e599ed5bccb334afc626262f2d154d  gcc/testsuite/gdc.test/compilable/test9692.d
  4e8c514f4c47e8cc668194d301fadc34  gcc/testsuite/gdc.test/compilable/test9692a.d
! d5e43ab1e4c033bfee33c30947a66f67  gcc/testsuite/gdc.test/compilable/test9701.d
! b62c4783060c00406ce9b1b3c7bf4458  gcc/testsuite/gdc.test/compilable/test9766.d
! 010e4189c66339d7f70f9b588c485a23  gcc/testsuite/gdc.test/compilable/test9818.d
! c3399128d15e46a6701b8fa1f51ea1d8  gcc/testsuite/gdc.test/compilable/test9919.d
! 438fe1d9823725d27c8e8905d6b3b210  gcc/testsuite/gdc.test/compilable/testAliasLookup.d
! f7619f935f377818b22fbded54347773  gcc/testsuite/gdc.test/compilable/testCpCtor.d
  1d7f3d565a0c12a7ff5e38e9de9d6e9b  gcc/testsuite/gdc.test/compilable/testDIP37.d
  b5045ee9241fe56808a442eda502f850  gcc/testsuite/gdc.test/compilable/testDIP37_10302.d
  cd9664381d4f2ad5fbc9a66fe9181ece  gcc/testsuite/gdc.test/compilable/testDIP37_10354.d
  e420705f48ae28346e1d049a442dc609  gcc/testsuite/gdc.test/compilable/testDIP37_10421.d
! a8aff1c75bc0695071a90cb5aa15971e  gcc/testsuite/gdc.test/compilable/testDIP37a.d
  0ad27aebcba2369d32c2ab7918cf7ee0  gcc/testsuite/gdc.test/compilable/testDIP42.d
! 40c1a12165f6431180cc70b0eac25ccf  gcc/testsuite/gdc.test/compilable/testInference.d
! 85a5ba423ac12043f320f0ff47d0b161  gcc/testsuite/gdc.test/compilable/testVRP.d
  4f38613138feda91b158dbc10e9dcaf8  gcc/testsuite/gdc.test/compilable/testcheckimports.d
! dbddcfe494cc3c61d9b82e969af2c8ea  gcc/testsuite/gdc.test/compilable/testcontracts.d
! 939371c9d34a5af76ab78baebe16d363  gcc/testsuite/gdc.test/compilable/testcstuff3.d
! 552c4640682b445ef0760a89704dd105  gcc/testsuite/gdc.test/compilable/testdip1008.d
! a45fff07259b904bd2e0780eb2b4b920  gcc/testsuite/gdc.test/compilable/testexpression.d
  165adaaca3d4cb680db8e8f7bef830af  gcc/testsuite/gdc.test/compilable/testfptr.d
! f8d3fd67e69cbc3faa127c9ea1a7ee45  gcc/testsuite/gdc.test/compilable/testfwdref.d
! acdc78c2e0880e10d12d0ba711e9c3a2  gcc/testsuite/gdc.test/compilable/testheader1.d
! b6a425aea90992550c5b5f5b1b61165d  gcc/testsuite/gdc.test/compilable/testheader12567a.d
! 1e2747d468b376e4d3a04f38f0813ea8  gcc/testsuite/gdc.test/compilable/testheader12567b.d
! b24e70d11086a277d37e5526c6500f83  gcc/testsuite/gdc.test/compilable/testheader17125.d
! fc4ec6420a491fa084b7c1b92ef2a35c  gcc/testsuite/gdc.test/compilable/testheader1i.d
! 0eadecf0c4e8579df51810d04d4b8348  gcc/testsuite/gdc.test/compilable/testheader2.d
! 3fe4e1b67b0aa47dc2140972c96f62c0  gcc/testsuite/gdc.test/compilable/testheader2i.d
! bdc220aeb9fcfb4cec830844180df80f  gcc/testsuite/gdc.test/compilable/testheader3.d
! c1730dc788fc7e0b50d230868830e36b  gcc/testsuite/gdc.test/compilable/testheaderudamodule.d
! c50c4e3aa93d8e409dd93c6593cd3ee5  gcc/testsuite/gdc.test/compilable/testimport12242.d
! 85b71e742bf5bfe7cfcf1e2a20ffb5e9  gcc/testsuite/gdc.test/compilable/testlambdacomp.d
! c5edf683ca0bd30ac0d1d5b44a632f2d  gcc/testsuite/gdc.test/compilable/testos.d
! f552c5fbb298519149738d9281e65149  gcc/testsuite/gdc.test/compilable/testparse.d
! 04f186437495743a1bb1ca150d9b1c9c  gcc/testsuite/gdc.test/compilable/testpostblit.d
! b4b221ef317b956132f4d2d2b4addb1d  gcc/testsuite/gdc.test/compilable/testprofile.d
! 06d53bd527300beec01412a18aacbb8b  gcc/testsuite/gdc.test/compilable/testsctreturn.d
! 2b0d22bb4f0da744c1a7d324b1673eb7  gcc/testsuite/gdc.test/compilable/testtempl2.d
! e21ca3f9cac637625ae52b172d03bcfd  gcc/testsuite/gdc.test/compilable/traits.d
! 8e5ed37369ec09b09468ccf443c443fc  gcc/testsuite/gdc.test/compilable/traits_getFunctionAttributes.d
! 0da951db343407cecaa9f85317fb649d  gcc/testsuite/gdc.test/compilable/transition_in.d
! 2a5c3303f2fc00fbaf51ab7e1a392eee  gcc/testsuite/gdc.test/compilable/typeid_name.d
! 1d237198a559d6143c0e660c66cefa3b  gcc/testsuite/gdc.test/compilable/uda.d
! b215346ff6994a9f80fd4b4a3300e489  gcc/testsuite/gdc.test/compilable/udamodule1.d
! fddab229d4f220f7768aa32bff4eb235  gcc/testsuite/gdc.test/compilable/udamodule2.d
! 05d2b62ab46fd89af248af1c2e5be2c1  gcc/testsuite/gdc.test/compilable/union_initialization.d
! bed7ef880f72248e4e05cd76f1015180  gcc/testsuite/gdc.test/compilable/vcg-ast.d
  e39d851e2d6df0fb0a228237d9973bdc  gcc/testsuite/gdc.test/compilable/verrors_spec.d
! 7c3dc0b69abaf4feb7674c4ea5304c4d  gcc/testsuite/gdc.test/compilable/version.d
! 7ea9e82ff7eecd14d9b7809d9156aad5  gcc/testsuite/gdc.test/compilable/vgc1.d
! 874604d82319461005a1d66fa1c082fe  gcc/testsuite/gdc.test/compilable/vgc2.d
! 1f313881c51241b6e69f1c399d78ade7  gcc/testsuite/gdc.test/compilable/vgc3.d
! 1f7b74cc98b46eee4066e8614f446c78  gcc/testsuite/gdc.test/compilable/vtemplates.d
! fe3fe69f3ba0159a4ec76976ea3bf053  gcc/testsuite/gdc.test/compilable/vtemplates_list.d
! b5b14c87f99689b64af89383a7600110  gcc/testsuite/gdc.test/compilable/warn3882.d
! 8909f89f0f6816bf7c640ff8baa3280f  gcc/testsuite/gdc.test/compilable/zerosize.d
! 18907c6d791bf506f12bb09b49c6a960  gcc/testsuite/gdc.test/fail_compilation/aacmp10381.d
! e0066ba6846a84c27c5813f1eae1f740  gcc/testsuite/gdc.test/fail_compilation/aliasassign.d
! 724063393d084db2d74d55a0653dbf2f  gcc/testsuite/gdc.test/fail_compilation/aliasassign1.d
! 29ac4b31cfdfb34ac1753068addb9296  gcc/testsuite/gdc.test/fail_compilation/already_defined.d
  e309e5ed61e9e05b734a04331138794f  gcc/testsuite/gdc.test/fail_compilation/b12504.d
! 781af0061ee627ed6ea3f18dd0f84c5b  gcc/testsuite/gdc.test/fail_compilation/b15069.d
! 6830b0c11beb2de9c49b65c98e786c9b  gcc/testsuite/gdc.test/fail_compilation/b15875.d
! b6332dec945b97029df39816a3557bdb  gcc/testsuite/gdc.test/fail_compilation/b15909.d
! 8fed1f888ca3069bb93b8814d57f8781  gcc/testsuite/gdc.test/fail_compilation/b16967.d
  7ea1134efd7ddebf95db3eff5f8333d7  gcc/testsuite/gdc.test/fail_compilation/b17285.d
! b25a7e2f51b717b255276caf9def0edb  gcc/testsuite/gdc.test/fail_compilation/b17918.d
! 072214819fd374a1c1933bb9191ded37  gcc/testsuite/gdc.test/fail_compilation/b19523.d
! 70f44a69e3432b832cb6995838232f3a  gcc/testsuite/gdc.test/fail_compilation/b19685.d
! 18f820ae64f4314467fa918450b9ca03  gcc/testsuite/gdc.test/fail_compilation/b19691.d
! beac1dce62bb696484c206c8fd65a0b8  gcc/testsuite/gdc.test/fail_compilation/b19691e.d
  b53cb85b8cc301a3c81e4d559b329709  gcc/testsuite/gdc.test/fail_compilation/b19717.d
! 9b6b50ff4270a1559091032b53afdabe  gcc/testsuite/gdc.test/fail_compilation/b19717a.d
! b19c540895e68030d7f79aea6ba21213  gcc/testsuite/gdc.test/fail_compilation/b19730.d
! 41a30687e12c4ec4053c5aef9221aa2a  gcc/testsuite/gdc.test/fail_compilation/b20011.d
! 365ab715a73fe9c494170233e038c30b  gcc/testsuite/gdc.test/fail_compilation/b20780.d
! 82cdbb62978f6d1599220b6ee9f9a92b  gcc/testsuite/gdc.test/fail_compilation/b20875.d
! 47c41c40dd4bf706c7dd71dc9350a9c1  gcc/testsuite/gdc.test/fail_compilation/b3841.d
! 519990e6c61b8bdaf5b380851475d8ad  gcc/testsuite/gdc.test/fail_compilation/b6227.d
! ace267dee17fdf434350526c6c171cce  gcc/testsuite/gdc.test/fail_compilation/betterc.d
! 6c4e325d72a973cc17e40fd597c6ca8b  gcc/testsuite/gdc.test/fail_compilation/bug15613.d
! e4bc96ee8e6ef17e2d638e85e45c7913  gcc/testsuite/gdc.test/fail_compilation/bug16165.d
! 6fdc01527eb87db969507dc657c75baa  gcc/testsuite/gdc.test/fail_compilation/bug18743.d
! 6936db788778436ad32bd68aca166348  gcc/testsuite/gdc.test/fail_compilation/bug19569.d
  39ffa560217f81dec6d2733547b17845  gcc/testsuite/gdc.test/fail_compilation/bug4283.d
! e10319cae3a1fe5d89a6e7220f4d3617  gcc/testsuite/gdc.test/fail_compilation/bug5.d
! 68e9d113721c19252710aced1e3ddae2  gcc/testsuite/gdc.test/fail_compilation/bug5096.d
! dfcfc941a23106dfb4aa633010d25044  gcc/testsuite/gdc.test/fail_compilation/bug5b.d
! 6f8846856815fb29b1378e1e5f6d1130  gcc/testsuite/gdc.test/fail_compilation/bug8150a.d
! e40db6207cc66055571f5552ba4dd74e  gcc/testsuite/gdc.test/fail_compilation/bug8150b.d
! e483d431bf6e45ed82ce3539c2baab76  gcc/testsuite/gdc.test/fail_compilation/bug8891.d
! a2fa5b05cd2ac9c8269f5d03d1ef6a4e  gcc/testsuite/gdc.test/fail_compilation/bug9631.d
! ec3bf4a66065f2860f602b88e0da3655  gcc/testsuite/gdc.test/fail_compilation/casttuple.d
! ce21d4a4c779579022965a535cbcb1a6  gcc/testsuite/gdc.test/fail_compilation/ccast.d
  1942044f0f053eea8fc8572c50ee4fe1  gcc/testsuite/gdc.test/fail_compilation/cerrors.d
! 4e83f64920318dc56ac80f35d4b3915f  gcc/testsuite/gdc.test/fail_compilation/checkimports2.d
  251a02d3dfb01ccd8bb885928ff25722  gcc/testsuite/gdc.test/fail_compilation/chkformat.d
! 9797e02f098d52d0de89e8253f84b6c3  gcc/testsuite/gdc.test/fail_compilation/circ10280.d
! 6a293d0ed6519f3f6657000a879d53c2  gcc/testsuite/gdc.test/fail_compilation/class1.d
! ac55f5cfdfaa7cf8d01f1887d25ab07a  gcc/testsuite/gdc.test/fail_compilation/class2.d
! 82d5c58af40ca12b71a055c234f4810e  gcc/testsuite/gdc.test/fail_compilation/commaexp.d
! b4bfce7761bc12b212dab71a7e6279f7  gcc/testsuite/gdc.test/fail_compilation/constraints_aggr.d
! abef410d735fbbafd1e6c203893dd1b8  gcc/testsuite/gdc.test/fail_compilation/constraints_defs.d
! b5562043c169c9776456060c54e3ad09  gcc/testsuite/gdc.test/fail_compilation/constraints_func1.d
! ad9b89217737c77bd4ba839a74248ead  gcc/testsuite/gdc.test/fail_compilation/constraints_func2.d
! d0b3d1a13a6fd1e58c6bcc0d468dfc54  gcc/testsuite/gdc.test/fail_compilation/constraints_func3.d
! c2c35be95aa77c8db614a6785937b886  gcc/testsuite/gdc.test/fail_compilation/constraints_func4.d
! 76205a8a72dc711a48874ed6a3cb3c69  gcc/testsuite/gdc.test/fail_compilation/constraints_tmpl.d
! dfd223ee8e19d86aeb106dce298f3061  gcc/testsuite/gdc.test/fail_compilation/covariant_override.d
! 9dc9a69704d40f4f8a848aba9d5118b0  gcc/testsuite/gdc.test/fail_compilation/cpp_abi_tag.d
! 65d75f72a7879909e72b5a22c1949602  gcc/testsuite/gdc.test/fail_compilation/cpp_abi_tag2.d
! 595e629b0d62851c4d4bc6da123a5195  gcc/testsuite/gdc.test/fail_compilation/cppeh1.d
  928d45bd54111a5e63e6cbd42dc55481  gcc/testsuite/gdc.test/fail_compilation/cppeh2.d
! 1c6ea8e8eec8928220d748a1a5eda623  gcc/testsuite/gdc.test/fail_compilation/cppmangle.d
! 32bd77efb94a7a1a8369659d1697ac55  gcc/testsuite/gdc.test/fail_compilation/cppmangle2.d
! 1ba05446e4c373c3fdbe16b248b90c1c  gcc/testsuite/gdc.test/fail_compilation/ctfe10989.d
! 24ee417386f9acb8b0b48425b516c896  gcc/testsuite/gdc.test/fail_compilation/ctfe10995.d
! 489e4852a292b484e336ecf177ab97a0  gcc/testsuite/gdc.test/fail_compilation/ctfe11467.d
! 40871790b65150fb8b27d25e436457b2  gcc/testsuite/gdc.test/fail_compilation/ctfe13612.d
! 7af06ff2514f3b06289ab78993fbf62a  gcc/testsuite/gdc.test/fail_compilation/ctfe14207.d
! e875c4bc47d169566d81fc9e3cd91921  gcc/testsuite/gdc.test/fail_compilation/ctfe14465.d
! de17b2a15306feb4124dbd44c07f1477  gcc/testsuite/gdc.test/fail_compilation/ctfe14731.d
  b0b58282b0fe3f3fe68b280aefebbf28  gcc/testsuite/gdc.test/fail_compilation/ctypes.d
  2cf4b4d38bcfec6baeb522b946354879  gcc/testsuite/gdc.test/fail_compilation/cwords.d
! 648e4f1d8563d8a65d3947f9f5d0a995  gcc/testsuite/gdc.test/fail_compilation/dassert.d
! dcca7e17c023779b24f628b1c9e3d282  gcc/testsuite/gdc.test/fail_compilation/ddoc_18083.d
! 4d924d33cec417a66c755fe3d7769105  gcc/testsuite/gdc.test/fail_compilation/debugCaseDeclaration.d
! 048678d1d099844514ca11b5d5ab5cb2  gcc/testsuite/gdc.test/fail_compilation/dep_d1_ops.d
! 21429650d50a80aa3152c57cbfc13bb7  gcc/testsuite/gdc.test/fail_compilation/dephexstrings.d
! e41028796693073cf78596bf89f2fe18  gcc/testsuite/gdc.test/fail_compilation/depmsg.d
! ac11c760472b9b30ec93e1c3f589dd6a  gcc/testsuite/gdc.test/fail_compilation/depmsg15814.d
! 8e33583582257f8d70a4992ecd2674c7  gcc/testsuite/gdc.test/fail_compilation/depmsg15815.d
! cb5c9fb87f88ec5049b61a4ee9b09382  gcc/testsuite/gdc.test/fail_compilation/deprecate1553.d
! fb2d65527498b849c7a6166457aa4449  gcc/testsuite/gdc.test/fail_compilation/deprecated6760.d
! e3cb450a222f6e7769f2f80109b5669c  gcc/testsuite/gdc.test/fail_compilation/deprecatedImports.d
! f2c7e463732bac008be36eef40f1f794  gcc/testsuite/gdc.test/fail_compilation/deprecatedTemplates.d
! 58bd989a6c4cef0ef2f7111fcc8f2fa0  gcc/testsuite/gdc.test/fail_compilation/deprecateopdot.d
! f6f3553d7b2001f0c682efff6764aa19  gcc/testsuite/gdc.test/fail_compilation/deprecations.d
! 89725246f834be49561fa26ca1a81abe  gcc/testsuite/gdc.test/fail_compilation/diag10089.d
! 381407271899f4b10b9d6ad737780732  gcc/testsuite/gdc.test/fail_compilation/diag10099.d
! da8bedca9f07c5500e3fd0c0d624138f  gcc/testsuite/gdc.test/fail_compilation/diag10141.d
! 77a1f2d14863eb107f340720ebfb5bf3  gcc/testsuite/gdc.test/fail_compilation/diag10169.d
  c8b81e8d799716ffe482b951a7a5784c  gcc/testsuite/gdc.test/fail_compilation/diag10221.d
  95a3eab7c2b730bb39cc59728912d49b  gcc/testsuite/gdc.test/fail_compilation/diag10221a.d
! 91b6e5db072f2c2bd4cbb3c2b03c02f6  gcc/testsuite/gdc.test/fail_compilation/diag10319.d
! 3ac9c2c67c7cc5aacc8d31f1d8cad8de  gcc/testsuite/gdc.test/fail_compilation/diag10327.d
  8c5aee5c8821623c5fa500cc7b794ab5  gcc/testsuite/gdc.test/fail_compilation/diag10359.d
! 97f43a15ee0e3ae55ecb8ee2d5a4ef88  gcc/testsuite/gdc.test/fail_compilation/diag10405.d
! 11a17667a41ad9d2157464f474efd825  gcc/testsuite/gdc.test/fail_compilation/diag10415.d
! 1b5e8da546ae6c6b10920988d411edb2  gcc/testsuite/gdc.test/fail_compilation/diag10688.d
! 3325c9050495bdf5823b3250f244d278  gcc/testsuite/gdc.test/fail_compilation/diag10768.d
! c6f7f49c4c5bb698659469f4f996d058  gcc/testsuite/gdc.test/fail_compilation/diag10783.d
! 9435511e2251f51140243460475ba28b  gcc/testsuite/gdc.test/fail_compilation/diag10792.d
! 03989d7d12cf58ba65a56378f98f44a9  gcc/testsuite/gdc.test/fail_compilation/diag10805.d
! b2ecb5e8bdf7dcbdac60b656ef82ab91  gcc/testsuite/gdc.test/fail_compilation/diag10862.d
! 0f8fa1a117d96e72fecd6da544cc30de  gcc/testsuite/gdc.test/fail_compilation/diag10926.d
! 8f5344172ec0e3c06210b931eb8b2289  gcc/testsuite/gdc.test/fail_compilation/diag10984.d
! 29a03f85bb4ab7f29f1c7276976fe7c2  gcc/testsuite/gdc.test/fail_compilation/diag11078.d
! 0faca6f755cd34758eca5dde51012d34  gcc/testsuite/gdc.test/fail_compilation/diag11132.d
! 251337936687eddfab2149b8793c1114  gcc/testsuite/gdc.test/fail_compilation/diag11198.d
  085c1cdc700e65be81dd4c7bf52294cb  gcc/testsuite/gdc.test/fail_compilation/diag11423.d
! 1066a5949691f5ee2814964ad44866dc  gcc/testsuite/gdc.test/fail_compilation/diag11425.d
! 1595d3eede6d84963a630a22f6874c62  gcc/testsuite/gdc.test/fail_compilation/diag11727.d
! 813d95fb60066d2ba3e9ce43033f08a1  gcc/testsuite/gdc.test/fail_compilation/diag11756.d
  9b296e312459378057729151fc0b586b  gcc/testsuite/gdc.test/fail_compilation/diag11759.d
! 44e85d5c7a3f7df6f9aecb496d6f2cd4  gcc/testsuite/gdc.test/fail_compilation/diag11769.d
  cd21f58b757a4597aecb16109e045703  gcc/testsuite/gdc.test/fail_compilation/diag11819a.d
! 1690644d73076f8481fb08551620418d  gcc/testsuite/gdc.test/fail_compilation/diag11819b.d
  252b37d75156f0fead6921ecc03b669c  gcc/testsuite/gdc.test/fail_compilation/diag11840.d
! 052f50c16bbe7e7daa684e7d68044f6a  gcc/testsuite/gdc.test/fail_compilation/diag12063.d
! 36eaacf4aa9b526badb51a1b2a781cff  gcc/testsuite/gdc.test/fail_compilation/diag12124.d
! 42592ce737085699a7e4f2328a040c3d  gcc/testsuite/gdc.test/fail_compilation/diag12280.d
! 510d839a4af121ba503edd690d799bd6  gcc/testsuite/gdc.test/fail_compilation/diag12312.d
! 8767ce6ac75391d72d3bf72f7e98f2e5  gcc/testsuite/gdc.test/fail_compilation/diag12380.d
  5f628747633cc61c61aae674fa0ce146  gcc/testsuite/gdc.test/fail_compilation/diag12432.d
! ec941f3b9443e4300eb4f2b5c013b752  gcc/testsuite/gdc.test/fail_compilation/diag12480.d
! 9ce22502f6fec452010756708af7cf42  gcc/testsuite/gdc.test/fail_compilation/diag12487.d
! 4aa0e121f0b2bab5aa266044e6c5265b  gcc/testsuite/gdc.test/fail_compilation/diag12640.d
! 7e901d0a60622bbf5d21e068b85dae87  gcc/testsuite/gdc.test/fail_compilation/diag12678.d
! e5a44aa59f0a8c539df417253dfc757d  gcc/testsuite/gdc.test/fail_compilation/diag12777.d
! d02fe9df0ea9c61f551040c6db3d9f89  gcc/testsuite/gdc.test/fail_compilation/diag12829.d
! 12ad99f038ff9d4b130534d896ba7e3e  gcc/testsuite/gdc.test/fail_compilation/diag13028.d
  26a273e7e974918905dcd941ce0a6b28  gcc/testsuite/gdc.test/fail_compilation/diag13082.d
  d4bdce5da010bdb608d7a34a8a7f5740  gcc/testsuite/gdc.test/fail_compilation/diag13142.d
! 2e73e39ef5c6b079fc9213c4cbc6b7f7  gcc/testsuite/gdc.test/fail_compilation/diag13215.d
! 85dab21ff2de797ebee17a2ddc1fb394  gcc/testsuite/gdc.test/fail_compilation/diag13281.d
! 97d3e50e19ff8502b51f9204e824c38f  gcc/testsuite/gdc.test/fail_compilation/diag13320.d
! dd421ed0f9abe1a714c279007e2a5592  gcc/testsuite/gdc.test/fail_compilation/diag13333.d
! 4c049c00b9882da6f233bdc115b7569a  gcc/testsuite/gdc.test/fail_compilation/diag13528.d
  31eaec2f7799d785b3d295c2f8f8fdc7  gcc/testsuite/gdc.test/fail_compilation/diag13609a.d
! 9688de813cdbe563a300541d45c3bede  gcc/testsuite/gdc.test/fail_compilation/diag13609b.d
! 323639abc3ebdd34ce32293a912c31fc  gcc/testsuite/gdc.test/fail_compilation/diag13787.d
! 29a96c80e52a33d2abd697465057cdaf  gcc/testsuite/gdc.test/fail_compilation/diag13884.d
! faff105f32e9ad1bee6d733b11ef0440  gcc/testsuite/gdc.test/fail_compilation/diag13942.d
! b135de15f64cd4196a902ddf0bc6bca5  gcc/testsuite/gdc.test/fail_compilation/diag14102.d
! 0946fe4151d10e98d70dbe3929b04909  gcc/testsuite/gdc.test/fail_compilation/diag14145.d
! 470f9e960030641e13352fc666d6c8fe  gcc/testsuite/gdc.test/fail_compilation/diag14163.d
! 918fdf3ef80f8ad80218f03b8a241fa1  gcc/testsuite/gdc.test/fail_compilation/diag14235.d
! 8640199a4a4f638b7f555c0d037fe852  gcc/testsuite/gdc.test/fail_compilation/diag14818.d
! 3808501546013484e5ead4ac99b5e9ee  gcc/testsuite/gdc.test/fail_compilation/diag14875.d
! 3721c00c1cf5f5573935d4961c7f9f52  gcc/testsuite/gdc.test/fail_compilation/diag14876.d
  5c4ad04d22fbe55f5b07497287ced691  gcc/testsuite/gdc.test/fail_compilation/diag15001.d
  953302c17eef47eba4fc4c5c3ee18f2b  gcc/testsuite/gdc.test/fail_compilation/diag15186.d
! 3749151134e6b93d534f99b61203be0b  gcc/testsuite/gdc.test/fail_compilation/diag15209.d
  00c5d18cc76c3f36c5504cb23eee10ce  gcc/testsuite/gdc.test/fail_compilation/diag15340.d
! b2c274e49ec1f078f27e11c2c3c1480f  gcc/testsuite/gdc.test/fail_compilation/diag15411.d
  f28f753c50d24ae45fd4aacf60d88ef4  gcc/testsuite/gdc.test/fail_compilation/diag1566.d
! 079ea590e7e1ad4e2aa15133ada08c5a  gcc/testsuite/gdc.test/fail_compilation/diag15669.d
! f2cbcf5e5cffa4c4f2d17e6d1089c3c6  gcc/testsuite/gdc.test/fail_compilation/diag15713.d
! 88da152ad7463583e00c228e6531a782  gcc/testsuite/gdc.test/fail_compilation/diag15974.d
! 53f97b18fcd9150362cfa32203d1ce90  gcc/testsuite/gdc.test/fail_compilation/diag16271.d
! 79eeb3e32b34783ae3c4ccea6caf4721  gcc/testsuite/gdc.test/fail_compilation/diag16499.d
  ca21748c3c8002f58049b5f03aa8eb8b  gcc/testsuite/gdc.test/fail_compilation/diag16976.d
! 5f89cbc8576f379f075688c3298d74f7  gcc/testsuite/gdc.test/fail_compilation/diag16977.d
! 74b4ddb2d570b5b689c757647aca8d12  gcc/testsuite/gdc.test/fail_compilation/diag1730.d
! 2f18d41b0a3ab8f0ee83bcce80a39e84  gcc/testsuite/gdc.test/fail_compilation/diag18460.d
! e5adf342a518a65c134912a7b1fa7b4d  gcc/testsuite/gdc.test/fail_compilation/diag18574.d
! ec86243ec70481877d5034309610fe9b  gcc/testsuite/gdc.test/fail_compilation/diag19022.d
  ef13cff5613132d38394dfcda321198a  gcc/testsuite/gdc.test/fail_compilation/diag19196.d
! 41495e7d17eb1bd93beea0ff106e0f2e  gcc/testsuite/gdc.test/fail_compilation/diag19225.d
! e382e1fe742ff323d95980a7b3337beb  gcc/testsuite/gdc.test/fail_compilation/diag20059.d
! c3638a460a108e562e095fa04d0d60be  gcc/testsuite/gdc.test/fail_compilation/diag20518.d
! b233b20e604b69dca9939988d5ecf22f  gcc/testsuite/gdc.test/fail_compilation/diag21883.d
! 9b6cfcbc4b79fcd4610ac7bcb72ffb67  gcc/testsuite/gdc.test/fail_compilation/diag2452.d
! 6f951b34310a15382960e9f406c8484e  gcc/testsuite/gdc.test/fail_compilation/diag3013.d
! 5a878ff44a7acd11a67ba387edb73bfe  gcc/testsuite/gdc.test/fail_compilation/diag3438.d
  f53190991d6bad04d5f8507c6bcddfe8  gcc/testsuite/gdc.test/fail_compilation/diag3438b.d
! e771c3d0b572b4c3cad86d219b8ae6bc  gcc/testsuite/gdc.test/fail_compilation/diag3672.d
! 3310352e022602a5aade42284297bffb  gcc/testsuite/gdc.test/fail_compilation/diag3672a.d
  2f37bbfbcaf32e6965aa587cda1caa6f  gcc/testsuite/gdc.test/fail_compilation/diag3673.d
! 9d3481b76d9d58e6dd111e80187da624  gcc/testsuite/gdc.test/fail_compilation/diag3869.d
! 904484bad801cff707bd09bd49cbb79d  gcc/testsuite/gdc.test/fail_compilation/diag3913.d
! 62e1bc5dc53050d038c8d96370b9f681  gcc/testsuite/gdc.test/fail_compilation/diag4479.d
! ef52e7f7308cf261840cf0bd1dc91197  gcc/testsuite/gdc.test/fail_compilation/diag4528.d
  8f15df10bf4dd96d8df274ea196b7a8d  gcc/testsuite/gdc.test/fail_compilation/diag4540.d
! 46f6b5e86b2f12c877979dd09275872c  gcc/testsuite/gdc.test/fail_compilation/diag4596.d
! 55d4e791b220c766b15c5fc1793383d5  gcc/testsuite/gdc.test/fail_compilation/diag5385.d
! 2d17bc2bbec8066ae00bf5f6af5c0e0c  gcc/testsuite/gdc.test/fail_compilation/diag5450.d
! be04821c384c2151a5ad2c4eb62e3dcf  gcc/testsuite/gdc.test/fail_compilation/diag6373.d
! 62c07c401f7ed0f115c0756e8a1ee64f  gcc/testsuite/gdc.test/fail_compilation/diag6539.d
! 6ac4caacd50c743e3c8d41d9d39a5506  gcc/testsuite/gdc.test/fail_compilation/diag6677.d
! df337ef4561ea1d5044bc4478536d6e3  gcc/testsuite/gdc.test/fail_compilation/diag6699.d
! 5a92ddd664e4b8a246403a29f9de81de  gcc/testsuite/gdc.test/fail_compilation/diag6707.d
  14fddc27a18ba83404ef2ca7bb6f804b  gcc/testsuite/gdc.test/fail_compilation/diag6796.d
! 3bcb67ff32795e5bf90bde0f3b4d6ac3  gcc/testsuite/gdc.test/fail_compilation/diag7050a.d
! 07ff7f8f2a13bf0921970d7c3d1c2e01  gcc/testsuite/gdc.test/fail_compilation/diag7050b.d
! 3a23c3ed3923fa49618d35afdd940b4b  gcc/testsuite/gdc.test/fail_compilation/diag7050c.d
! 7c885eec1871684720d3024f0856053f  gcc/testsuite/gdc.test/fail_compilation/diag7420.d
! 930cbd5dd5fdb025f2ab6e5983203be6  gcc/testsuite/gdc.test/fail_compilation/diag7477.d
! b0bb0a7eed29aa54814135d9d2b2a25a  gcc/testsuite/gdc.test/fail_compilation/diag7747.d
! c054c437713978aaa4afae9d1d969336  gcc/testsuite/gdc.test/fail_compilation/diag7998.d
! c3f1286978539eb8fb344f622234e66f  gcc/testsuite/gdc.test/fail_compilation/diag8044.d
! 0bc5a6d5669f649bd952495c9e985fe6  gcc/testsuite/gdc.test/fail_compilation/diag8101.d
! 23e1ead2a04cd7bb7f19949550db3bd3  gcc/testsuite/gdc.test/fail_compilation/diag8101b.d
! 286c2b3cf8b5667b030e56dc6f4b2389  gcc/testsuite/gdc.test/fail_compilation/diag8178.d
! 03f28c9b644096a7e8a4b8ce284a059b  gcc/testsuite/gdc.test/fail_compilation/diag8318.d
! 2b1cc31cacec55cd31c6dbcb01ac9576  gcc/testsuite/gdc.test/fail_compilation/diag8425.d
! 20b5bb194fd7d3b0ebf42bf0151ad86a  gcc/testsuite/gdc.test/fail_compilation/diag8510.d
! b72d2b6c59107b1a90708d7ff0dfc4ca  gcc/testsuite/gdc.test/fail_compilation/diag8559.d
! aa1ccdd3e20ffd39ef59ab1c4e67b555  gcc/testsuite/gdc.test/fail_compilation/diag8648.d
! ec634dbbf8f3a96a5d79c7d8f3efccf8  gcc/testsuite/gdc.test/fail_compilation/diag8684.d
! 56e2ca9250c8faa561590bfd71d402b6  gcc/testsuite/gdc.test/fail_compilation/diag8697.d
! 6da190e26800e4b396e0346faf0552e3  gcc/testsuite/gdc.test/fail_compilation/diag8714.d
! 8be7e4f3ba174f8a92c2aecbfc9b5419  gcc/testsuite/gdc.test/fail_compilation/diag8777.d
! 42812d0c83ffaf8e781baa00443ebbac  gcc/testsuite/gdc.test/fail_compilation/diag8787.d
  ff3b86a24c6b08b8abda906070e72c91  gcc/testsuite/gdc.test/fail_compilation/diag8825.d
  2f7ecdc871c982df25cc4452eb37393d  gcc/testsuite/gdc.test/fail_compilation/diag8892.d
! 7ff0004a27d99a84392ea5fe3d9590d1  gcc/testsuite/gdc.test/fail_compilation/diag8894.d
! 883b3aa087c353de52e9d7ef2f1e11d3  gcc/testsuite/gdc.test/fail_compilation/diag8928.d
! 16bc7fb774cb7a9fb57bdfdc8899dc53  gcc/testsuite/gdc.test/fail_compilation/diag9004.d
! 1ca0cbaa5486bbb1fca649821e5fd454  gcc/testsuite/gdc.test/fail_compilation/diag9148.d
! bcf18ce030ed62b36660197352b4407b  gcc/testsuite/gdc.test/fail_compilation/diag9191.d
! e9a684b92a19f3209b93cfa703068084  gcc/testsuite/gdc.test/fail_compilation/diag9210a.d
! 8460a9ca71067e6480f1127357582fac  gcc/testsuite/gdc.test/fail_compilation/diag9247.d
  87826ac2f6bbb76e4f3765ad1364c54d  gcc/testsuite/gdc.test/fail_compilation/diag9250.d
! 32fc269de8dcfbab6b85ba14bdb63ee7  gcc/testsuite/gdc.test/fail_compilation/diag9312.d
! b28a3eecd7c36ded5aca587073cebd78  gcc/testsuite/gdc.test/fail_compilation/diag9357.d
! 1410c537ff08dad7fa865a7b77b6a3b2  gcc/testsuite/gdc.test/fail_compilation/diag9358.d
! b7b293d85267d1066cc299d96cd9f665  gcc/testsuite/gdc.test/fail_compilation/diag9398.d
! 6eb53adfe26eb5bbba0a5c917ad178cb  gcc/testsuite/gdc.test/fail_compilation/diag9420.d
! 31497bedce46e25b7ba95e54bc77fbbf  gcc/testsuite/gdc.test/fail_compilation/diag9451.d
  c71eae763fc17f4bb9c9edc5c73097ab  gcc/testsuite/gdc.test/fail_compilation/diag9479.d
  54b1b2af358aa461b393edfb0bf136e8  gcc/testsuite/gdc.test/fail_compilation/diag9574.d
! 76fe93a42e4458fcc121c868576a07e0  gcc/testsuite/gdc.test/fail_compilation/diag9620.d
! 40a26cdfdc76ded75627d866bd791a6e  gcc/testsuite/gdc.test/fail_compilation/diag9635.d
! 78c4ddd7886c173598bd3ab4034452d6  gcc/testsuite/gdc.test/fail_compilation/diag9679.d
  e6846c6e7f24e0dbf859ddb4ee3797da  gcc/testsuite/gdc.test/fail_compilation/diag9765.d
! bb487b4659793bcee21e209fc10b6dd2  gcc/testsuite/gdc.test/fail_compilation/diag9831.d
! 0a1ea1d064f1b004feea83c95bdd98d3  gcc/testsuite/gdc.test/fail_compilation/diag9861.d
! 31e92e3db25af5b2294a1f6fee342253  gcc/testsuite/gdc.test/fail_compilation/diag9880.d
! 18dc0edc9cf3c2e217b033ad72134100  gcc/testsuite/gdc.test/fail_compilation/diag9961.d
! 815d75b1b05468e56000f53066f40701  gcc/testsuite/gdc.test/fail_compilation/diag_class_alloc.d
! 019968fb4ac455c35c49d8374b556ec3  gcc/testsuite/gdc.test/fail_compilation/diag_cstyle.d
! ac1ecc983943befbdb99b4963b9bbd6a  gcc/testsuite/gdc.test/fail_compilation/diag_debug_conditional.d
! a80d9b7356faf786d0cfbbc683dd384b  gcc/testsuite/gdc.test/fail_compilation/diag_err1.d
! 268a1b00385f331dbe6458cb2490e162  gcc/testsuite/gdc.test/fail_compilation/diag_funclit.d
! c1261c2895e88b735569f4206cc6ac70  gcc/testsuite/gdc.test/fail_compilation/diag_template_alias.d
! 1248ebe003fb4c529ab1a5c34e8dc488  gcc/testsuite/gdc.test/fail_compilation/diag_template_this.d
! a441c7f2d8327af056a4f992cf61e94f  gcc/testsuite/gdc.test/fail_compilation/diagin.d
! bca78167ff7a3c97e08c33b9bba2a2eb  gcc/testsuite/gdc.test/fail_compilation/diaginref.d
! 05d55e507041b55cec55e82032a40f5f  gcc/testsuite/gdc.test/fail_compilation/dip22a.d
! 9f256dbd3ec217ad95c9e492a2137864  gcc/testsuite/gdc.test/fail_compilation/dip22b.d
! 0e99be6b01ea3e8a145b5f587ed83d23  gcc/testsuite/gdc.test/fail_compilation/dip22e.d
! a5ee70a4e57f3c35c71cedbec75202a5  gcc/testsuite/gdc.test/fail_compilation/dip25.d
  342f6526dab7f6966b6f04965f84d2cc  gcc/testsuite/gdc.test/fail_compilation/disable.d
+ 3c2f76ba05acd80893f8b5c379e55865  gcc/testsuite/gdc.test/fail_compilation/disable_new.d
+ ac5e3a7bfc065333ba94fab863cdfff3  gcc/testsuite/gdc.test/fail_compilation/dtor_attributes.d
+ c6868dc189d18c29ad586141986dc0aa  gcc/testsuite/gdc.test/fail_compilation/dtorfields_attributes.d
+ ffebbcb6ce1cde0cc6db7bd0a7f6a756  gcc/testsuite/gdc.test/fail_compilation/e15876_1.d
+ 2500d02c26d2ef0e7fc6ee2769ed9103  gcc/testsuite/gdc.test/fail_compilation/e15876_2.d
+ 1489ab41f744cebfd24dcc939238892d  gcc/testsuite/gdc.test/fail_compilation/e15876_3.d
+ 8d2bae8d20217ac0f91cfca4771a436d  gcc/testsuite/gdc.test/fail_compilation/e15876_4.d
+ 9e27a50d00297c82abe05490ae52fa94  gcc/testsuite/gdc.test/fail_compilation/e15876_5.d
+ 59a847b524ea2e40b5db154080acbb1c  gcc/testsuite/gdc.test/fail_compilation/e15876_6.d
  103c14cc4470816407d25ef479870c5f  gcc/testsuite/gdc.test/fail_compilation/e7804_1.d
  ebd624415ce51467f6282d2f66d82e6b  gcc/testsuite/gdc.test/fail_compilation/e7804_2.d
! aa4c4b7e2f3ac8b13ed863135d976500  gcc/testsuite/gdc.test/fail_compilation/enum9921.d
  1aa4aa08b66f74d0f0cdb5f71878c2f3  gcc/testsuite/gdc.test/fail_compilation/enum_init.d
  f76cf9db0833afa5687645d4c74a9897  gcc/testsuite/gdc.test/fail_compilation/extra-files/bar11453.d
  99acc5a7305edac00837d2641c2f1bb9  gcc/testsuite/gdc.test/fail_compilation/extra-files/foo11453.d
  84bebd871a01f556191f22e1fa9eace9  gcc/testsuite/gdc.test/fail_compilation/extra-files/minimal/object.d
! 3f5c069e644e3f1e6692c83e70049e05  gcc/testsuite/gdc.test/fail_compilation/fail10.d
! 34db3c1cc5f276345570566eb4e02af7  gcc/testsuite/gdc.test/fail_compilation/fail100.d
! 88b97a03f929852a192f6fe27a2e618b  gcc/testsuite/gdc.test/fail_compilation/fail10082.d
! 16047c5990c17931fbc6575cc3904378  gcc/testsuite/gdc.test/fail_compilation/fail101.d
! 21847bd8ebfb7d6ba10b80a0ec31569c  gcc/testsuite/gdc.test/fail_compilation/fail10102.d
! 8996744362ad412ec4c92c2c9593cd25  gcc/testsuite/gdc.test/fail_compilation/fail10115.d
  a883dee9cdfef4dfaf5f5fb50b0e3916  gcc/testsuite/gdc.test/fail_compilation/fail10207.d
! dc0b2c8b06a051c610f3f48d202814c8  gcc/testsuite/gdc.test/fail_compilation/fail10254.d
! 2bba564e38b0328fdce880e6be9cc3df  gcc/testsuite/gdc.test/fail_compilation/fail10277.d
  479830a391e47ca5d5fde21edae925e0  gcc/testsuite/gdc.test/fail_compilation/fail10285.d
! 858929cd54995def4a10401b5254130b  gcc/testsuite/gdc.test/fail_compilation/fail10299.d
  dd17a2837ac6f2f2d6b2c8561c63a3b6  gcc/testsuite/gdc.test/fail_compilation/fail10346.d
! 291fbc1ab7699e833918b8d8b769a6df  gcc/testsuite/gdc.test/fail_compilation/fail104.d
! b726e7e5862cef761fbffe4798462131  gcc/testsuite/gdc.test/fail_compilation/fail10481.d
! 72c8b8ebc6cf14d229679ffa91df4069  gcc/testsuite/gdc.test/fail_compilation/fail105.d
! 4baf68a70ac4dcded8157a06acfd6922  gcc/testsuite/gdc.test/fail_compilation/fail10528.d
! 662b3a10601db386a111d5b760db289b  gcc/testsuite/gdc.test/fail_compilation/fail10534.d
! 78a14815b99eb16bff945b3d3f5972aa  gcc/testsuite/gdc.test/fail_compilation/fail106.d
! 71288e2e511948061477a0747fecb40e  gcc/testsuite/gdc.test/fail_compilation/fail10630.d
! cb53acf48a2b67325d7f8241e9c9ab8b  gcc/testsuite/gdc.test/fail_compilation/fail10666.d
! 132cc39e1c28cccfc1029171f7c406d8  gcc/testsuite/gdc.test/fail_compilation/fail10806.d
! f40a224a929da6faa6b4a07a7d1ec8ec  gcc/testsuite/gdc.test/fail_compilation/fail109.d
! e633ca8200e6d5a0fe83b98b7e77c37e  gcc/testsuite/gdc.test/fail_compilation/fail10905.d
! 84cb1acfd9c573c41c1b83dac83a9c8f  gcc/testsuite/gdc.test/fail_compilation/fail10947.d
! 67f504c001f946a3a9205c3a5d585f49  gcc/testsuite/gdc.test/fail_compilation/fail10964.d
! ce241e9e28b4579d7647590c955f8876  gcc/testsuite/gdc.test/fail_compilation/fail10968.d
! fa66b0e920971c09a8f7f0ae71cc7e78  gcc/testsuite/gdc.test/fail_compilation/fail10980.d
! 7461aa4bd527e973ee745038e7e175a7  gcc/testsuite/gdc.test/fail_compilation/fail11.d
! 7249231e0229e12b12abb71155f5b603  gcc/testsuite/gdc.test/fail_compilation/fail110.d
! 3e6a7f8205ea96359effae2162844504  gcc/testsuite/gdc.test/fail_compilation/fail11038.d
  10f619ddec93bf8424836e0ce9b45879  gcc/testsuite/gdc.test/fail_compilation/fail11042.d
! 43e247410a0595e0e0a8237f56b77bbc  gcc/testsuite/gdc.test/fail_compilation/fail111.d
! 8ce341eb0d7bfdf60877f62d8e5b9c79  gcc/testsuite/gdc.test/fail_compilation/fail11125.d
! cacc0256e3d69d9b93d6cd19840fdfbc  gcc/testsuite/gdc.test/fail_compilation/fail11151.d
! c7d4d841662e23af430664ea89b8a6d4  gcc/testsuite/gdc.test/fail_compilation/fail11163.d
! 3233d140865314693e3f867337f604e7  gcc/testsuite/gdc.test/fail_compilation/fail113.d
! cfb5bd1649cb6dd3521e82fc2bcc4d8b  gcc/testsuite/gdc.test/fail_compilation/fail11355.d
! f859bdcc55e1ef70022e37f8196ff956  gcc/testsuite/gdc.test/fail_compilation/fail11375.d
! f3336ce6edbe3fe2abae60968f743564  gcc/testsuite/gdc.test/fail_compilation/fail114.d
  9e4a2ee34878d003dc19b1519c00de09  gcc/testsuite/gdc.test/fail_compilation/fail11426.d
! a338ac1c468d5ff67cb258c1994bac86  gcc/testsuite/gdc.test/fail_compilation/fail11445.d
! ffe08b11762009190cd09ae689e7226e  gcc/testsuite/gdc.test/fail_compilation/fail11453a.d
! f5a197bd95a056843e35b989347fcbe0  gcc/testsuite/gdc.test/fail_compilation/fail11453b.d
  7d13b7056acf7ed36a57d82f32b30f31  gcc/testsuite/gdc.test/fail_compilation/fail115.d
  d6a0583cdebb2f5274a34d9f68574519  gcc/testsuite/gdc.test/fail_compilation/fail11503a.d
  03dcaff82193c60ec8aa4fbb68cd344b  gcc/testsuite/gdc.test/fail_compilation/fail11503b.d
! 8863a06766a712e729ea0545b7ed75b9  gcc/testsuite/gdc.test/fail_compilation/fail11503c.d
! c1386db4542ab9f25b137aea8592fd47  gcc/testsuite/gdc.test/fail_compilation/fail11503d.d
! a995b66302a078b5444ec640a5ad59c7  gcc/testsuite/gdc.test/fail_compilation/fail11510.d
! 03acb9aa13a05674a2b716bec4395ad3  gcc/testsuite/gdc.test/fail_compilation/fail11532.d
! d799a1133926a241ccb8b73a42657c26  gcc/testsuite/gdc.test/fail_compilation/fail11542.d
! 7b15af95340c130f3f14cb053e53d084  gcc/testsuite/gdc.test/fail_compilation/fail11545.d
! 692e28aa53da608e9850e323b253629f  gcc/testsuite/gdc.test/fail_compilation/fail11552.d
! 9236795eb54a91a3a395618357f24dff  gcc/testsuite/gdc.test/fail_compilation/fail11562.d
! 252497168a7f32d033de55209895b869  gcc/testsuite/gdc.test/fail_compilation/fail11591b.d
! e61a25e9a145b638b51ee393ba8be266  gcc/testsuite/gdc.test/fail_compilation/fail116.d
! 5470e381d7d2d19227a5eadb16ca60d3  gcc/testsuite/gdc.test/fail_compilation/fail11653.d
! 4a6822087e49f0d5186125ac3f8a85a5  gcc/testsuite/gdc.test/fail_compilation/fail117.d
! fdaa763060909e97acdcb129ab83f2a7  gcc/testsuite/gdc.test/fail_compilation/fail11714.d
  a691b7855ffa66fe0d4d016977d36507  gcc/testsuite/gdc.test/fail_compilation/fail11746.d
! e40c97caf3db9f4880aff09011b1daf4  gcc/testsuite/gdc.test/fail_compilation/fail11748.d
  c0c579cb086b8a2a634c0ab754c26a07  gcc/testsuite/gdc.test/fail_compilation/fail11751.d
! 3377ccf850a3814957b6b51f45bc6fbe  gcc/testsuite/gdc.test/fail_compilation/fail118.d
! be95cb2b665636b2200b371cb1df87d0  gcc/testsuite/gdc.test/fail_compilation/fail12.d
! 8d49b3e03628cd7c6cd8a538148ad725  gcc/testsuite/gdc.test/fail_compilation/fail120.d
  7bf72c637818e7f1de6be900e0fe70e8  gcc/testsuite/gdc.test/fail_compilation/fail12047.d
  bc29d8052e02438aec3b5f987d52ec37  gcc/testsuite/gdc.test/fail_compilation/fail121.d
! 7e087119e9127154573ca4d0a46ced6a  gcc/testsuite/gdc.test/fail_compilation/fail122.d
! 2579250e407c32fa652443bf68e8fd70  gcc/testsuite/gdc.test/fail_compilation/fail12236.d
! 8dfe0e2c61aa226bf5b0ea82ca94398c  gcc/testsuite/gdc.test/fail_compilation/fail12255.d
! c6a9045d059f3176aa12fb81d590f0d2  gcc/testsuite/gdc.test/fail_compilation/fail123.d
! f8f10e131c15bd3239affaf48aebff8c  gcc/testsuite/gdc.test/fail_compilation/fail12378.d
! 0083fafbf1085293b752ef8e6ac1e876  gcc/testsuite/gdc.test/fail_compilation/fail12390.d
! bfb7ab7957a4356a4b9665e88b61f34f  gcc/testsuite/gdc.test/fail_compilation/fail124.d
! 93e33f45e68e44a918a98a2107552d3e  gcc/testsuite/gdc.test/fail_compilation/fail12436.d
! 42eb030c62dea6bce5bfa6734f12a9df  gcc/testsuite/gdc.test/fail_compilation/fail125.d
! 36f58d54ca0d499db6d8ccf5dab569e6  gcc/testsuite/gdc.test/fail_compilation/fail126.d
  cdb3801b748621f73c5035160988a49f  gcc/testsuite/gdc.test/fail_compilation/fail12604.d
! b08a2513fb698aee7f0d4ba3e6a99ef3  gcc/testsuite/gdc.test/fail_compilation/fail12622.d
! bb43812fff9cbc2f8b34e98a44d644c3  gcc/testsuite/gdc.test/fail_compilation/fail12636.d
! b9c52248a49bfdf7883e6e159b0449a9  gcc/testsuite/gdc.test/fail_compilation/fail127.d
! 076d94f40972de48269b14489c3ac180  gcc/testsuite/gdc.test/fail_compilation/fail12744.d
! 131cc788cd47ef93845283bf95ee4f97  gcc/testsuite/gdc.test/fail_compilation/fail12749.d
! b93dc74048b99ba0c82a6709839b2ef1  gcc/testsuite/gdc.test/fail_compilation/fail12764.d
! 6ff46a21ae637dd20e81ee2ce124ec81  gcc/testsuite/gdc.test/fail_compilation/fail12809.d
! c50f234d5c95d5c23129a75b1d91520e  gcc/testsuite/gdc.test/fail_compilation/fail129.d
! e62523305c859a4769949f7589072795  gcc/testsuite/gdc.test/fail_compilation/fail12901.d
! daeb45c533d077c1a72f2182996edc39  gcc/testsuite/gdc.test/fail_compilation/fail12908.d
! a106312f5d33fcc3d40697c5e8621fb9  gcc/testsuite/gdc.test/fail_compilation/fail12932.d
! a1674e1394b35a5df1b3c4aac66f998f  gcc/testsuite/gdc.test/fail_compilation/fail13064.d
! 2180f72e2e570d452ff43f600b437482  gcc/testsuite/gdc.test/fail_compilation/fail131.d
! 8642bc95c48767755ad4274b2b4cdb1a  gcc/testsuite/gdc.test/fail_compilation/fail13116.d
! 94a595c0a8513c40bbd51052c275c3dc  gcc/testsuite/gdc.test/fail_compilation/fail13120.d
! b03b5e0032abc66adcb709edbb941cc4  gcc/testsuite/gdc.test/fail_compilation/fail13187.d
! b11884cf1566b08a9902a268a0b5cbb5  gcc/testsuite/gdc.test/fail_compilation/fail132.d
! 8000033f214284cf259489cb70780afd  gcc/testsuite/gdc.test/fail_compilation/fail13203.d
! bb5c6126c9a6a59d7d101f5d4c86353b  gcc/testsuite/gdc.test/fail_compilation/fail133.d
! f208a8f35369a7465708c01248aa6faf  gcc/testsuite/gdc.test/fail_compilation/fail13336a.d
! a2a42c8a3663fb312456cbda557e9fcd  gcc/testsuite/gdc.test/fail_compilation/fail13336b.d
! 6d0ad61dad2187efcb0c1405ec282317  gcc/testsuite/gdc.test/fail_compilation/fail134.d
! 81520f830e60b59b078916269563a772  gcc/testsuite/gdc.test/fail_compilation/fail13424.d
  6766e3fc0db269522156cb03e57090a4  gcc/testsuite/gdc.test/fail_compilation/fail13434_m32.d
  930d798796f39b693abdda8b1c7bae86  gcc/testsuite/gdc.test/fail_compilation/fail13434_m64.d
! 50a341748c4c2d3597f3e50985a71f7e  gcc/testsuite/gdc.test/fail_compilation/fail13435.d
! f7c162250484aa2c830b621f48a4cbf7  gcc/testsuite/gdc.test/fail_compilation/fail13498.d
! 2a7a5b24d34d65d9a4c928e6d02d03f1  gcc/testsuite/gdc.test/fail_compilation/fail13574.d
! 76ebf2b6a9997c0abdc516f502299cb6  gcc/testsuite/gdc.test/fail_compilation/fail136.d
! 563c333787d513efd8f8c3af9c634b0d  gcc/testsuite/gdc.test/fail_compilation/fail13601.d
! 62bc66bcec853e01a1d64e03dbf1f731  gcc/testsuite/gdc.test/fail_compilation/fail13701.d
! ffcc92538fea18e1edc848b035d2da56  gcc/testsuite/gdc.test/fail_compilation/fail13756.d
  7f637277f7409ea6e5315946be618ca9  gcc/testsuite/gdc.test/fail_compilation/fail13775.d
! a580d1b37336e7005f2011c16123a2f8  gcc/testsuite/gdc.test/fail_compilation/fail139.d
! 06fab03b1da066d02640b3bacf39bc05  gcc/testsuite/gdc.test/fail_compilation/fail13902.d
  10554ee69c68fa02536edb00437cd248  gcc/testsuite/gdc.test/fail_compilation/fail14.d
! 88b0dedb5114a417e9a013dc320646cb  gcc/testsuite/gdc.test/fail_compilation/fail14089.d
! c452b6c39ca422156c80d164ccd00d3e  gcc/testsuite/gdc.test/fail_compilation/fail142.d
! c753f5a08f745f6326cda953e7a42e47  gcc/testsuite/gdc.test/fail_compilation/fail14249.d
! 65477946b0a7989dc9265b12658a59e2  gcc/testsuite/gdc.test/fail_compilation/fail14277.d
! b9b54d3d4e18a399b604955806258516  gcc/testsuite/gdc.test/fail_compilation/fail143.d
! 8dc5066aab0e47bc083a69e67f10066e  gcc/testsuite/gdc.test/fail_compilation/fail14304.d
! fe661808ca5ccd87b92c6817b80182d3  gcc/testsuite/gdc.test/fail_compilation/fail144.d
! bbc5223383ebab515d15768197865a53  gcc/testsuite/gdc.test/fail_compilation/fail14406.d
! 60ac8535b218629f6e302cf38a0e4d64  gcc/testsuite/gdc.test/fail_compilation/fail14416.d
! 6b7e660a67bdd0b25bbc892cd220f071  gcc/testsuite/gdc.test/fail_compilation/fail14486.d
! d6f267f324a0bb2be0329e69f05316d2  gcc/testsuite/gdc.test/fail_compilation/fail145.d
! 21b27f5810d8bbd5e53d1a85f251389f  gcc/testsuite/gdc.test/fail_compilation/fail14554.d
! 3bf31066a2c94e8b624051baddd81ee4  gcc/testsuite/gdc.test/fail_compilation/fail14669.d
! 2eb0f0a3a630d5305cedcfc6ba947caa  gcc/testsuite/gdc.test/fail_compilation/fail14965.d
! 351f0dc3289118d6f73f00d620e4cf37  gcc/testsuite/gdc.test/fail_compilation/fail14997.d
! a70e7b47122c2a876b23154fde937dc2  gcc/testsuite/gdc.test/fail_compilation/fail15.d
! e3e5a1338c4fb6fa1b922916d383f3ea  gcc/testsuite/gdc.test/fail_compilation/fail150.d
  1a2053870f325ede91510f97b2f7c640  gcc/testsuite/gdc.test/fail_compilation/fail15044.d
! 08062d15f112cde31d64eca7adc16b43  gcc/testsuite/gdc.test/fail_compilation/fail15068.d
! 89068db75229e01f201f1fd7999c5049  gcc/testsuite/gdc.test/fail_compilation/fail15089.d
! 855ab11f0bd62621b99dfea1cb130c26  gcc/testsuite/gdc.test/fail_compilation/fail153.d
  8ffd2e63fb125b33d3573d667ed80e1f  gcc/testsuite/gdc.test/fail_compilation/fail15361.d
! 9d037c59d1e7a468338f3f3f381d91c4  gcc/testsuite/gdc.test/fail_compilation/fail154.d
! ee6094104374e6990e160d3400d91e34  gcc/testsuite/gdc.test/fail_compilation/fail155.d
! b8e5e7c3a81b656da38456cb46d2e9b4  gcc/testsuite/gdc.test/fail_compilation/fail15535.d
! 8d6777061a04969663e28b186960951b  gcc/testsuite/gdc.test/fail_compilation/fail15550.d
! 7374029b69deef73dca4e77b90aaf90e  gcc/testsuite/gdc.test/fail_compilation/fail156.d
! 8d36d05a7afdfa99502f0cf457df3552  gcc/testsuite/gdc.test/fail_compilation/fail15616a.d
! d4aea9d7b2363fa241eb76f08f00cba1  gcc/testsuite/gdc.test/fail_compilation/fail15616b.d
! 3be4ce307a92d11b64cfa9d4f03f4445  gcc/testsuite/gdc.test/fail_compilation/fail15626.d
! d068b087cdb3131ab554be42180adbce  gcc/testsuite/gdc.test/fail_compilation/fail15667.d
! c684ab29bcabeefed5b53fffe9d3f70e  gcc/testsuite/gdc.test/fail_compilation/fail15691.d
! 8be5f3fd1abbb065f32f3eca5b858dee  gcc/testsuite/gdc.test/fail_compilation/fail15755.d
! 81ac9c4f415090bed18f5f7943fdf18b  gcc/testsuite/gdc.test/fail_compilation/fail158.d
  7dffcb12548594529e08c394a72f593e  gcc/testsuite/gdc.test/fail_compilation/fail15896.d
! 0e7efcd6e123a7faef05ce3ae6f59ce9  gcc/testsuite/gdc.test/fail_compilation/fail159.d
! d612a27ea5535404d84d598bae901e32  gcc/testsuite/gdc.test/fail_compilation/fail16.d
! b1a3c7961f99b91306dbd64d284c746a  gcc/testsuite/gdc.test/fail_compilation/fail160.d
! 1fa52b99dc65c45b1e1a5bbbfe116dee  gcc/testsuite/gdc.test/fail_compilation/fail16001.d
! 1c72cecc096b7d2d4e31dd6f47fb8895  gcc/testsuite/gdc.test/fail_compilation/fail161.d
! cf3a56d2bcb984e62fa150555c016513  gcc/testsuite/gdc.test/fail_compilation/fail162.d
! 99c094fe5a883a7d9a9adcbd82f194c1  gcc/testsuite/gdc.test/fail_compilation/fail16206a.d
! 7e34a6b4dd39ae5c562fa3e43ae5b267  gcc/testsuite/gdc.test/fail_compilation/fail16206b.d
! 65570fad8408c994cb62f7bb4e38bc7f  gcc/testsuite/gdc.test/fail_compilation/fail163.d
! 816639db88c51c1b5a596d40ade2c3ce  gcc/testsuite/gdc.test/fail_compilation/fail16600.d
! 8b4b096412e0264029af463d8d17a67b  gcc/testsuite/gdc.test/fail_compilation/fail16689.d
! 623bcd19ed4331349d750dd7e0ccec0f  gcc/testsuite/gdc.test/fail_compilation/fail169.d
! aa393179c2ca7bc3a60b6d8c4f96cbc7  gcc/testsuite/gdc.test/fail_compilation/fail16997.d
! 34a18b39e76e5dc61eed79b9f5f81866  gcc/testsuite/gdc.test/fail_compilation/fail17.d
! 53384e5f1676346467d188c67fdfef0b  gcc/testsuite/gdc.test/fail_compilation/fail170.d
! 922411e5a9689af6be69fbb76108df5c  gcc/testsuite/gdc.test/fail_compilation/fail172.d
! b0e6a5048904624e7e6b67312725b274  gcc/testsuite/gdc.test/fail_compilation/fail17275.d
! adfd0b4226bffd793f04ad6845f6f4a3  gcc/testsuite/gdc.test/fail_compilation/fail17354.d
! 03ccca8143902029943d28e1485d2172  gcc/testsuite/gdc.test/fail_compilation/fail17419.d
! 9fd8b3c48f9082bd2d3ae03821de9394  gcc/testsuite/gdc.test/fail_compilation/fail17421.d
! 465392dc3f7c8be68ed4b9ae0673c2ec  gcc/testsuite/gdc.test/fail_compilation/fail17491.d
! be4d28819745b832fc91295c6c8505c7  gcc/testsuite/gdc.test/fail_compilation/fail17492.d
! 47604c011e3dab7c5e67cbbfcc24607b  gcc/testsuite/gdc.test/fail_compilation/fail17502.d
! cd45f7a0bafa949ecce8b80876a72151  gcc/testsuite/gdc.test/fail_compilation/fail17518.d
! 60241a7e4962f3e9669273068046d564  gcc/testsuite/gdc.test/fail_compilation/fail17570.d
! ff11fd7d8d4fa1c4c8fbcd4a30a83de0  gcc/testsuite/gdc.test/fail_compilation/fail176.d
! ef2759042bec4471458a397b3895857f  gcc/testsuite/gdc.test/fail_compilation/fail17602.d
! 5293b18b7813b4fc05083160ebf03448  gcc/testsuite/gdc.test/fail_compilation/fail17612.d
! e96e978609d37c7c1a44f934612d39a1  gcc/testsuite/gdc.test/fail_compilation/fail17625.d
  2cabd5f43fb4c3f7eb2da73fc4b1164d  gcc/testsuite/gdc.test/fail_compilation/fail17630.d
! e0a10a3344243433bc0b8c0d496f8f45  gcc/testsuite/gdc.test/fail_compilation/fail17646.d
  ab8c22cf2be47d14e82979e49ec3083e  gcc/testsuite/gdc.test/fail_compilation/fail17689.d
! 3663f0a0ac789099ac33803ae479ca86  gcc/testsuite/gdc.test/fail_compilation/fail177.d
! 35cf531fa58e2680d573c8081c2cb759  gcc/testsuite/gdc.test/fail_compilation/fail17722a.d
! 3539e8d6d99e7668fa152f3d2998c2e7  gcc/testsuite/gdc.test/fail_compilation/fail17722b.d
! 3a5368bfa9e925466d90dfbe40b3e1ef  gcc/testsuite/gdc.test/fail_compilation/fail17842.d
! 6f7188c359b760528830357bc2727f64  gcc/testsuite/gdc.test/fail_compilation/fail179.d
! c72f18ab36254636b191d78e0549b0a3  gcc/testsuite/gdc.test/fail_compilation/fail17906.d
! 7787960467cb5fc6d3c00c32cb821990  gcc/testsuite/gdc.test/fail_compilation/fail17927.d
! 605a594630744314bb62389f24423e06  gcc/testsuite/gdc.test/fail_compilation/fail17955.d
! b99b1841325cc0c06e5d27ca0e8c99a4  gcc/testsuite/gdc.test/fail_compilation/fail17969.d
! b3fde2514586c4a3e2046b5c0a6ed176  gcc/testsuite/gdc.test/fail_compilation/fail17976.d
! f8d46bb7603384631c0a6f26126398b0  gcc/testsuite/gdc.test/fail_compilation/fail18.d
! 0454c9a1ef7ddc14630b0cf99dda8803  gcc/testsuite/gdc.test/fail_compilation/fail180.d
! 309673188eb627a9dd883f8854937fb2  gcc/testsuite/gdc.test/fail_compilation/fail18057.d
  e3408518b8b4c811d02328352ef87de6  gcc/testsuite/gdc.test/fail_compilation/fail18057b.d
+ 1bdea03690c85119a465149cfbe90431  gcc/testsuite/gdc.test/fail_compilation/fail18093.d
  f29a2cafb832f5d530d6602319bfce06  gcc/testsuite/gdc.test/fail_compilation/fail18143.d
  0c902b93c7433a24ef0a1f1b2c046c5c  gcc/testsuite/gdc.test/fail_compilation/fail18219.d
! b85a8861594c77116c2c1d80342d314b  gcc/testsuite/gdc.test/fail_compilation/fail18228.d
! b33052116ca6853320ab7e38f77facc9  gcc/testsuite/gdc.test/fail_compilation/fail18236.d
! 740e94e87c4d92de38eefa38ae3b334a  gcc/testsuite/gdc.test/fail_compilation/fail18243.d
! 67c9474833ad1e76b6417d75b72c21b6  gcc/testsuite/gdc.test/fail_compilation/fail183.d
  27112a91b6ec55109a11888ca317d7ae  gcc/testsuite/gdc.test/fail_compilation/fail184.d
! 0c415d88655bbb9aed34b112e29eaccc  gcc/testsuite/gdc.test/fail_compilation/fail18417.d
! 1cecbe9bc595e97e991efce6a79f31b3  gcc/testsuite/gdc.test/fail_compilation/fail185.d
! f1ffdb661067e628c5a18fa4aa3d425f  gcc/testsuite/gdc.test/fail_compilation/fail18620.d
! 3842518a33f76de89f147a54b5759486  gcc/testsuite/gdc.test/fail_compilation/fail187.d
! 76fd6b7643f779174c686a27d0de7ed2  gcc/testsuite/gdc.test/fail_compilation/fail18719.d
! 05c618d08631552b989a390b13365945  gcc/testsuite/gdc.test/fail_compilation/fail188.d
! 3844ed57f59733132087afefe484c12e  gcc/testsuite/gdc.test/fail_compilation/fail18892.d
  39344b97e72e7a51418d2304bfe71bac  gcc/testsuite/gdc.test/fail_compilation/fail189.d
! 1855d7a7607707b089d145fc3dbf9c4a  gcc/testsuite/gdc.test/fail_compilation/fail18938.d
! cc683eecfa464601e581c82ee9da8cff  gcc/testsuite/gdc.test/fail_compilation/fail18970.d
! 94d0161ab08e808b84a06a1d9c7145db  gcc/testsuite/gdc.test/fail_compilation/fail18979.d
! f205ca554aa3912ed64d43f95458cc81  gcc/testsuite/gdc.test/fail_compilation/fail18985.d
! c3e9bf6ab82266989bda68580c167325  gcc/testsuite/gdc.test/fail_compilation/fail18994.d
! b29394abf29591d84b9d8789bb4565cb  gcc/testsuite/gdc.test/fail_compilation/fail190.d
! a020ac533fbb222dd619467826263b55  gcc/testsuite/gdc.test/fail_compilation/fail1900.d
! 121d905fcabf558bac6f01c9c857d68d  gcc/testsuite/gdc.test/fail_compilation/fail19038.d
! fd6073f3cce2fefb9651dee36ae69966  gcc/testsuite/gdc.test/fail_compilation/fail19076.d
! 8265e9a9f4a973f41fa5ceaf867da9f3  gcc/testsuite/gdc.test/fail_compilation/fail19098.d
! 38e2cba6bcb50a692990ffe7b96fb049  gcc/testsuite/gdc.test/fail_compilation/fail19099.d
! c73f0abfc8a03be8ed77231499165d23  gcc/testsuite/gdc.test/fail_compilation/fail19103.d
! 90c7cdd15ee714303e1566bc4af7044c  gcc/testsuite/gdc.test/fail_compilation/fail19181.d
  2658559b7e065a4d9a88423a76b0a1f8  gcc/testsuite/gdc.test/fail_compilation/fail19182.d
! 8c7b72f8d54d7f8f256985e65bb7a17b  gcc/testsuite/gdc.test/fail_compilation/fail192.d
! cb45a8d0aca2fe6efbfa04a0cb5363f7  gcc/testsuite/gdc.test/fail_compilation/fail19202.d
! e1731a230aaee95c968d09e488c4f32b  gcc/testsuite/gdc.test/fail_compilation/fail19209.d
! 1a63c8e4c4907e65fbcabdddb90c28a6  gcc/testsuite/gdc.test/fail_compilation/fail193.d
! 49b0951b6bd9018b435dc2653ada2216  gcc/testsuite/gdc.test/fail_compilation/fail19319a.d
! 2517548e96ec73168aa58048b6ff5c08  gcc/testsuite/gdc.test/fail_compilation/fail19319b.d
  4d8b5bed5de0d4f5223fa819ed1eebe4  gcc/testsuite/gdc.test/fail_compilation/fail19336.d
! 159e04e20270f8ae0d362ed45f8a0787  gcc/testsuite/gdc.test/fail_compilation/fail194.d
! 5e7a26822731934df173090a92342f35  gcc/testsuite/gdc.test/fail_compilation/fail19441.d
! 255cbdd802a2bc528e235738c17ed595  gcc/testsuite/gdc.test/fail_compilation/fail19447.d
! 7594dbc07383fa13599d213acea6e03a  gcc/testsuite/gdc.test/fail_compilation/fail195.d
  676dfacf37090247608e1eabe58d4327  gcc/testsuite/gdc.test/fail_compilation/fail19520.d
! a50937a3dd1cde344eb3102e6b0c9d06  gcc/testsuite/gdc.test/fail_compilation/fail196.d
! a09e1208955504bd9a765b08ef650b11  gcc/testsuite/gdc.test/fail_compilation/fail19609.d
! ffae11bbcbdb75781c4d269d5a0b3dc2  gcc/testsuite/gdc.test/fail_compilation/fail19687.d
! 4748cb1d7ac90ff780c0f16b4a407af1  gcc/testsuite/gdc.test/fail_compilation/fail19729.d
! 5497eef106b03c1d1c5abca76532ef7f  gcc/testsuite/gdc.test/fail_compilation/fail19744.d
! ab33dd9a1412bc650d3341ca810280e1  gcc/testsuite/gdc.test/fail_compilation/fail19757_m32.d
! f48f0703c5e7d1124e8dafcfac05bf26  gcc/testsuite/gdc.test/fail_compilation/fail19757_m64.d
! b4fc56015b91bcdd15ed815be30ee12c  gcc/testsuite/gdc.test/fail_compilation/fail198.d
! 1331488e808fb89535bd56551e1b503c  gcc/testsuite/gdc.test/fail_compilation/fail19871.d
! 03052363d14d51a6c975f381771dd3b8  gcc/testsuite/gdc.test/fail_compilation/fail19881.d
! b3070a0c09fb126898447ec5bb74392b  gcc/testsuite/gdc.test/fail_compilation/fail19890a.d
! 0dd563f23672b90a723ba3a9db77eaf0  gcc/testsuite/gdc.test/fail_compilation/fail19890b.d
! 803923bf31c7fc9bfe54c9f63a09fd67  gcc/testsuite/gdc.test/fail_compilation/fail19897.d
! 190058ce2827a01f798cf5bfb3a55922  gcc/testsuite/gdc.test/fail_compilation/fail19898a.d
! 307185d56a183f49ba81aab1fc9322a1  gcc/testsuite/gdc.test/fail_compilation/fail19898b.d
  6dd5bad406278481b7d4badda46d5b83  gcc/testsuite/gdc.test/fail_compilation/fail199.d
  20732ebad089aa6fc8fd4b82c40d461a  gcc/testsuite/gdc.test/fail_compilation/fail19911a.d
! 170403a4dd923340bba9ba4156ebf981  gcc/testsuite/gdc.test/fail_compilation/fail19911b.d
! 101b104019651b69a88cfb47215cca16  gcc/testsuite/gdc.test/fail_compilation/fail19911c.d
! a69de6e1a6d36384bc5bf67a94a6c25f  gcc/testsuite/gdc.test/fail_compilation/fail19912a.d
! 4edbaf7c28b913427d29b7437785a145  gcc/testsuite/gdc.test/fail_compilation/fail19912b.d
! 3dfc5d9f9e5b23be6fa7be17c27df8f4  gcc/testsuite/gdc.test/fail_compilation/fail19912c.d
! 2d7bd518a3f896bc8c92743d30deb468  gcc/testsuite/gdc.test/fail_compilation/fail19912d.d
! 29995ce5e5af44e67e932cad0821ab66  gcc/testsuite/gdc.test/fail_compilation/fail19912e.d
! 24d89dbfd62e9559a62de4d2a276becf  gcc/testsuite/gdc.test/fail_compilation/fail19913.d
! df4fbc4bc25d0ca61982bfcb19c863a9  gcc/testsuite/gdc.test/fail_compilation/fail19914.d
! 4d2680d6855f6886fde4f2ab5117c00f  gcc/testsuite/gdc.test/fail_compilation/fail19915.d
! aa9c562b805cdde30e5a0afd83499523  gcc/testsuite/gdc.test/fail_compilation/fail19917.d
! 6cb4e2a1815d4857789e2bfdf5dd8e2e  gcc/testsuite/gdc.test/fail_compilation/fail19919.d
! 265fdf9076de2a83e23351a63329cbb4  gcc/testsuite/gdc.test/fail_compilation/fail19922.d
! becdd446e8d1be604695109a29f49407  gcc/testsuite/gdc.test/fail_compilation/fail19923.d
! 97451b74145eff6747dd33669889ff8b  gcc/testsuite/gdc.test/fail_compilation/fail19931.d
  3efe7c451c4866665928b1d60a91285d  gcc/testsuite/gdc.test/fail_compilation/fail19941.d
! 70b886961ebbe6c1de7674af718df345  gcc/testsuite/gdc.test/fail_compilation/fail19948.d
! 6be9d44d2f5896a92b58a34acd7af126  gcc/testsuite/gdc.test/fail_compilation/fail1995.d
! 851eb457213dfe384a320df00425f33c  gcc/testsuite/gdc.test/fail_compilation/fail19955.d
! b7eb9679682db5f67b048d93497fa4b1  gcc/testsuite/gdc.test/fail_compilation/fail19965.d
! 6eda710678ea8daa8e8d855e65163597  gcc/testsuite/gdc.test/fail_compilation/fail20.d
  05592f24921890426a604ce836f029b0  gcc/testsuite/gdc.test/fail_compilation/fail200.d
! 54660b3f8b3e687607bef4195461e9b0  gcc/testsuite/gdc.test/fail_compilation/fail20000.d
! 74f34457f42becca5502a94e489b18d5  gcc/testsuite/gdc.test/fail_compilation/fail20033.d
! ec4256f5b8f7ca86efdc68db68cd6633  gcc/testsuite/gdc.test/fail_compilation/fail20040.d
! c12128390dab2358113f818b2ee02203  gcc/testsuite/gdc.test/fail_compilation/fail20073.d
! f228d34ca53f073a5e0c086254b1bd68  gcc/testsuite/gdc.test/fail_compilation/fail20084.d
! 2cc3df5c37adb911728a27ec62bb9fe6  gcc/testsuite/gdc.test/fail_compilation/fail201.d
! 2cba474a6a9660bbcc78ed1c33318f6d  gcc/testsuite/gdc.test/fail_compilation/fail20108.d
! 04bd61e549b8047b02bf8f713226b5ce  gcc/testsuite/gdc.test/fail_compilation/fail20163.d
! 491d5c7988c3b5e24cd424510b5ca61b  gcc/testsuite/gdc.test/fail_compilation/fail20164.d
! 13b0863241487805492f27976c43584e  gcc/testsuite/gdc.test/fail_compilation/fail20183.d
! c5e98fdfa8a88945c29e0e5d6f31af2f  gcc/testsuite/gdc.test/fail_compilation/fail202.d
! d60ada634a46d2b65a2dacb147c221df  gcc/testsuite/gdc.test/fail_compilation/fail203.d
! fc7b8d7ee7a9ef28f4089d85def249f9  gcc/testsuite/gdc.test/fail_compilation/fail20376.d
! 13edbbb78345e2f4e1743050e6c058cb  gcc/testsuite/gdc.test/fail_compilation/fail204.d
! 030997d8da65b77e58c45f817936e5ef  gcc/testsuite/gdc.test/fail_compilation/fail20448.d
! d6a41113ab2e7b3eff417c5021e83c2b  gcc/testsuite/gdc.test/fail_compilation/fail20461.d
! b94aaa7ed8ca494a3810cf65f8b1018e  gcc/testsuite/gdc.test/fail_compilation/fail205.d
! 26395e360ca164a475e789a3b0cc920f  gcc/testsuite/gdc.test/fail_compilation/fail20538.d
! 7bafa59faaf33ccf3247f50affb1161e  gcc/testsuite/gdc.test/fail_compilation/fail20547.d
! edea67fe10d58bfa25d0000dfad5ade1  gcc/testsuite/gdc.test/fail_compilation/fail20551.d
! 9735bea81fe7d24038b3778d5eea4c99  gcc/testsuite/gdc.test/fail_compilation/fail206.d
! 5497ff6488537ddce762defd5395054f  gcc/testsuite/gdc.test/fail_compilation/fail20609.d
! 20926315a08d0112cb394e537432519b  gcc/testsuite/gdc.test/fail_compilation/fail20616.d
! 60e913bb2df78fbc29f18eed05b4a82a  gcc/testsuite/gdc.test/fail_compilation/fail20618.d
! a198818657a3dee89836f60de09f2cfe  gcc/testsuite/gdc.test/fail_compilation/fail20637.d
! b145b7208e64060148d44c7e840bbef3  gcc/testsuite/gdc.test/fail_compilation/fail20638.d
! bfba6f06e64694108fdda60cbbb3a965  gcc/testsuite/gdc.test/fail_compilation/fail20658.d
! cbebdd4a0b3885d2941ea5f24499f1bb  gcc/testsuite/gdc.test/fail_compilation/fail20691.d
! e11dbf32a7deac2ceef48948ddce0cbe  gcc/testsuite/gdc.test/fail_compilation/fail207.d
! d8cbbb687b97f541fa3366579b9eb603  gcc/testsuite/gdc.test/fail_compilation/fail20714.d
! f4b7a202b00d93825722c995891faef8  gcc/testsuite/gdc.test/fail_compilation/fail20730a.d
! ec67eaf49d22e04c4a712f964f086f6d  gcc/testsuite/gdc.test/fail_compilation/fail20730b.d
! e305b25b7c6407e8d98bc95e1cb38684  gcc/testsuite/gdc.test/fail_compilation/fail20771.d
! b3f6ded43de55958b285287639b44db2  gcc/testsuite/gdc.test/fail_compilation/fail20772.d
! 9c97feacbde5a60eb7e32173e35e7bd8  gcc/testsuite/gdc.test/fail_compilation/fail20775.d
! 2df401d99a377d325d0b1760271c0430  gcc/testsuite/gdc.test/fail_compilation/fail20779.d
! e25875742d38b2256849c5f96a657b4e  gcc/testsuite/gdc.test/fail_compilation/fail208.d
! a37565aeddb2a3a2039d2086fa11e8f7  gcc/testsuite/gdc.test/fail_compilation/fail20800.d
! 1d857f10e8666b47c8a9ce6c4fd44aaa  gcc/testsuite/gdc.test/fail_compilation/fail209.d
! e86a43746a06c328b7e7e0ba7df00372  gcc/testsuite/gdc.test/fail_compilation/fail20965.d
  a73d3317381cd1a7dad4b419b99a70c1  gcc/testsuite/gdc.test/fail_compilation/fail21001.d
! 15efbee5d7d12e140b24d2a045c8770e  gcc/testsuite/gdc.test/fail_compilation/fail21091a.d
! 94ce42e8c54b06d1ce0618c9091c5b20  gcc/testsuite/gdc.test/fail_compilation/fail21091b.d
! 8c036b8743d61d27c0160ff0f8cad1b4  gcc/testsuite/gdc.test/fail_compilation/fail21092.d
! 53a6efb64314ca922163fd4aacf0597e  gcc/testsuite/gdc.test/fail_compilation/fail212.d
! da515e0e3ccb6122748469e3748506cb  gcc/testsuite/gdc.test/fail_compilation/fail21275.d
! 2d9df3ff3291444912ae26c1928ab756  gcc/testsuite/gdc.test/fail_compilation/fail213.d
! 13ad9b137c1b6f7e351e545d9935bdd4  gcc/testsuite/gdc.test/fail_compilation/fail215.d
! 71a09b4bf6b48720fcf973edfe6c3e01  gcc/testsuite/gdc.test/fail_compilation/fail21508.d
! fa51ba78aed7e51b5bea920cbb76cf2c  gcc/testsuite/gdc.test/fail_compilation/fail21508_2.d
! b609044adbbd843d6cf44718cec2033d  gcc/testsuite/gdc.test/fail_compilation/fail21547.d
! a83d55be79bbfec18976ece3917ef4c3  gcc/testsuite/gdc.test/fail_compilation/fail216.d
! 3663a9e84116ccecff19dff8a343af8c  gcc/testsuite/gdc.test/fail_compilation/fail217.d
! 850fcf15e46bcdbe4eb0284e6f555af5  gcc/testsuite/gdc.test/fail_compilation/fail218.d
! 7025d32dc6c65dc11dae3b5ef7be57d5  gcc/testsuite/gdc.test/fail_compilation/fail21830.d
! f53cd799f73a88b39e37762ab5f0d895  gcc/testsuite/gdc.test/fail_compilation/fail21831.d
! cde47018767be52b59c3714b8b3b7c23  gcc/testsuite/gdc.test/fail_compilation/fail21832.d
! 924b73715b305ddb10cf8e8fcd7ac8ad  gcc/testsuite/gdc.test/fail_compilation/fail21849.d
! 89f599c580c3afe454b124c31ce98ab2  gcc/testsuite/gdc.test/fail_compilation/fail21868b.d
! d3e754f69fda705025724136d5ffd640  gcc/testsuite/gdc.test/fail_compilation/fail21885.d
! 3cc974f3f05c55db8eea1f915e9881e5  gcc/testsuite/gdc.test/fail_compilation/fail21928.d
! 01cfc5ae8f798a3a9b4cc8df405dd2cd  gcc/testsuite/gdc.test/fail_compilation/fail21928b.d
! 8f52d3b54abe14ad758f78cd88a93931  gcc/testsuite/gdc.test/fail_compilation/fail2195.d
  25aa1006320654cdd4ef271b53a76a69  gcc/testsuite/gdc.test/fail_compilation/fail22.d
! 6274ef7e8105ea803309557412cf83af  gcc/testsuite/gdc.test/fail_compilation/fail220.d
  24f4c3c3fa945ca54c802bc7b4fc9976  gcc/testsuite/gdc.test/fail_compilation/fail22006.d
! a4ee47c4449f07f5d351b6c05aeb5fc1  gcc/testsuite/gdc.test/fail_compilation/fail22035.d
! a7a360e9ac568b736b869e81fbb1eda7  gcc/testsuite/gdc.test/fail_compilation/fail22054.d
! 32e9a53915db9581977b4869f165b323  gcc/testsuite/gdc.test/fail_compilation/fail22075.d
! bdb29ac495380b23d0398faa494dcb3b  gcc/testsuite/gdc.test/fail_compilation/fail22084.d
! 36b4706d6d321e5e4dad94aafbae1237  gcc/testsuite/gdc.test/fail_compilation/fail221.d
! b70b339a1dbd5b5807d24c2f37fb9ac3  gcc/testsuite/gdc.test/fail_compilation/fail22118.d
! 2427f1a5ad2c6874855722f6afa85464  gcc/testsuite/gdc.test/fail_compilation/fail22121.d
! 2eb3076801c4b34338e991f409be8590  gcc/testsuite/gdc.test/fail_compilation/fail22121/imports/test22121/package.d
! 673fad350f62c8a44c501f8c402d7a21  gcc/testsuite/gdc.test/fail_compilation/fail22127.d
! 2b4fb39fd7fc4e72ebcaa1ce62956043  gcc/testsuite/gdc.test/fail_compilation/fail22133.d
! 0fec8d242cc8653c987a5380a0e71966  gcc/testsuite/gdc.test/fail_compilation/fail22138.d
! 9b88e4363da5c8d1e01b4b215b2046e0  gcc/testsuite/gdc.test/fail_compilation/fail22144.d
! 8e495eb6f782921db4fc6fc559c36d67  gcc/testsuite/gdc.test/fail_compilation/fail22151.d
! 4a6f2d70ec3a911633808b3b75c9b41e  gcc/testsuite/gdc.test/fail_compilation/fail22157.d
! 1dfa55bc17ffdec8baf3883cb1a4752e  gcc/testsuite/gdc.test/fail_compilation/fail222.d
! 93bd8250bf0139126e20c0b0e7e5ac81  gcc/testsuite/gdc.test/fail_compilation/fail22202.d
! 928492c14b5c84fee4c14ddcc7dd2654  gcc/testsuite/gdc.test/fail_compilation/fail223.d
! 71cbaf2fc34e8b0f572e74712a8e7481  gcc/testsuite/gdc.test/fail_compilation/fail22366.d
! 3f3c3c715b9b751e293418c6f11a698d  gcc/testsuite/gdc.test/fail_compilation/fail224.d
! 8f21001702995c4e796c601f972acd8d  gcc/testsuite/gdc.test/fail_compilation/fail22529.d
! 10631e3b3f599849c50e0219aa2724af  gcc/testsuite/gdc.test/fail_compilation/fail22570.d
! 31fb74dd9708f5d3461a97b5c69b8b7b  gcc/testsuite/gdc.test/fail_compilation/fail22634.d
! 524d3aa06d43f7dc07b54abd5885156c  gcc/testsuite/gdc.test/fail_compilation/fail22749.d
! 509e6c0eaf43ea955a41140f2c8d1eee  gcc/testsuite/gdc.test/fail_compilation/fail22780.d
  c24efc95b4a07d93082131c006e2dd80  gcc/testsuite/gdc.test/fail_compilation/fail228.d
! a3b880eeeee3718d39ad9eea41a126bd  gcc/testsuite/gdc.test/fail_compilation/fail22825a.d
! 78579f7cd4dda0a3ca8137aa1b3fe7a5  gcc/testsuite/gdc.test/fail_compilation/fail22825b.d
! 1c48035a2fb9985c076056265c5e761f  gcc/testsuite/gdc.test/fail_compilation/fail22827.d
! d66caeff2039e96ff6d7fabe194052e5  gcc/testsuite/gdc.test/fail_compilation/fail22881.d
! 3ae4abd2e5f005a36efb80d18fa58cc6  gcc/testsuite/gdc.test/fail_compilation/fail229.d
! b870fb01a2c3232f3cff62cc0b90ac88  gcc/testsuite/gdc.test/fail_compilation/fail23.d
! 1537808a7acec1954230b6c3f80ec5f5  gcc/testsuite/gdc.test/fail_compilation/fail23036.d
! 048e20a40216cbded5b201acc227180b  gcc/testsuite/gdc.test/fail_compilation/fail231.d
  2549171f6c1309bbbd88a2c8d62fdd92  gcc/testsuite/gdc.test/fail_compilation/fail232.d
! 9e8ce37e9e4473d8aba813cef9ed1dc4  gcc/testsuite/gdc.test/fail_compilation/fail233.d
! c4bd4d001cbafb82e00b9421cd9995f2  gcc/testsuite/gdc.test/fail_compilation/fail235.d
! a84e81839fc598f6bee18e8ba2811238  gcc/testsuite/gdc.test/fail_compilation/fail236.d
! f1eeba6eda398cae717fff38b79838b8  gcc/testsuite/gdc.test/fail_compilation/fail2361.d
! 4a24025117f87834cb3038ffa2a63642  gcc/testsuite/gdc.test/fail_compilation/fail237.d
! ae65504ee5368439f87cba230c2fbb6c  gcc/testsuite/gdc.test/fail_compilation/fail238_m32.d
! faf12ba22575387527878d9b8beb717a  gcc/testsuite/gdc.test/fail_compilation/fail238_m64.d
  115789041b2ab94dc286976883caa1a5  gcc/testsuite/gdc.test/fail_compilation/fail239.d
! 005abf61f1ff8fb547e29dbf781b21b2  gcc/testsuite/gdc.test/fail_compilation/fail24.d
! 9d576be84ed81b8a31b6a539bfd3cf7e  gcc/testsuite/gdc.test/fail_compilation/fail240.d
! 9415ecf21a39f177b782dad2e58b04bf  gcc/testsuite/gdc.test/fail_compilation/fail241.d
! 3380997ecc3199cdf4486442df9089b0  gcc/testsuite/gdc.test/fail_compilation/fail243.d
! bc473ab268cb5e0707cc9686d0c00c23  gcc/testsuite/gdc.test/fail_compilation/fail244.d
! 4545d906740581bb348ff03962ffdc9c  gcc/testsuite/gdc.test/fail_compilation/fail245.d
! f7cc635e5a343f0dbb5095847595c2be  gcc/testsuite/gdc.test/fail_compilation/fail2450.d
! d68332598e67d02d9c296a3e8ca7236b  gcc/testsuite/gdc.test/fail_compilation/fail2456.d
! ce3d4db7da44d83520245251d1c52b86  gcc/testsuite/gdc.test/fail_compilation/fail246.d
! 958904cb5cb1e8986e403a18801ebdc8  gcc/testsuite/gdc.test/fail_compilation/fail247.d
! 32fcbff00baf822bf2ce671f0392cd07  gcc/testsuite/gdc.test/fail_compilation/fail248.d
! 1432abd10178e496542c8711a387ca7e  gcc/testsuite/gdc.test/fail_compilation/fail249.d
! 7fed86f09c9b2c2aa586da418c06bfd0  gcc/testsuite/gdc.test/fail_compilation/fail25.d
! 2bf4699d3c946b16a0dc3115c28b16ec  gcc/testsuite/gdc.test/fail_compilation/fail250.d
! 7f7109317bf0325c418014276e13cfe2  gcc/testsuite/gdc.test/fail_compilation/fail251.d
  c908fc323909d68ae82ac5769ced2b4e  gcc/testsuite/gdc.test/fail_compilation/fail252.d
! 664a657b9a61ca0e648f6ecb79a6be16  gcc/testsuite/gdc.test/fail_compilation/fail253.d
  5e6643c0dc6c2c1022307cf9f3f46d39  gcc/testsuite/gdc.test/fail_compilation/fail254.d
! 89d8530932ddc62f1b5f756cc137cbd0  gcc/testsuite/gdc.test/fail_compilation/fail256.d
  f1243a2544274acdb7b8aa344b404728  gcc/testsuite/gdc.test/fail_compilation/fail257.d
! f53e57a9e89cd741a5c46961166a1f5a  gcc/testsuite/gdc.test/fail_compilation/fail258.d
! d138575c329ecfa57cf9cdef90d6a04a  gcc/testsuite/gdc.test/fail_compilation/fail259.d
! 46c85ec929df513240b935034ea0a78d  gcc/testsuite/gdc.test/fail_compilation/fail261.d
! ab516084e0ebe83389b0d25ed5ba9c2c  gcc/testsuite/gdc.test/fail_compilation/fail262.d
! 285eb27e068cf4f9a4d13c7dcf47d379  gcc/testsuite/gdc.test/fail_compilation/fail263.d
  e3aaf70f1ee3ab9d4bdf647065681c97  gcc/testsuite/gdc.test/fail_compilation/fail264.d
! 39db887c3d88309df3aa3250bad00373  gcc/testsuite/gdc.test/fail_compilation/fail265.d
! 66755deef86b85fc3267384c4ddaf5f5  gcc/testsuite/gdc.test/fail_compilation/fail2656.d
! 6a0bb865f1c8b263df951b6b5e37a617  gcc/testsuite/gdc.test/fail_compilation/fail267.d
  b4f9f353ed280cf239cfd6c89845489d  gcc/testsuite/gdc.test/fail_compilation/fail27.d
! 3a6b45aadb85604383a7893ee965be6f  gcc/testsuite/gdc.test/fail_compilation/fail270.d
! bb11ca5afe50a6ff0b811ffb67929868  gcc/testsuite/gdc.test/fail_compilation/fail272.d
! 175369db6b1814be2e25ea6cad3588ff  gcc/testsuite/gdc.test/fail_compilation/fail273.d
  3a2bbcb89612d6ed5bfec9c436607c4e  gcc/testsuite/gdc.test/fail_compilation/fail2740.d
! 527f5c312fbd6548ca45d45282759d4d  gcc/testsuite/gdc.test/fail_compilation/fail275.d
! 0426d0327787dbe721eca407b882af55  gcc/testsuite/gdc.test/fail_compilation/fail276.d
! c48ddb49b80ea5c2b4718f13412aad33  gcc/testsuite/gdc.test/fail_compilation/fail278.d
! f537f15c4a9881c1b11773a8a57c025b  gcc/testsuite/gdc.test/fail_compilation/fail2789.d
  9a2085e9967a0198be547e1bf8a861c9  gcc/testsuite/gdc.test/fail_compilation/fail279.d
  8c71905ddb013310c3f99f67c1516e49  gcc/testsuite/gdc.test/fail_compilation/fail280.d
  05c686b7d945e42c55c0f68020beafbc  gcc/testsuite/gdc.test/fail_compilation/fail281.d
! 0c6465808977079e3bd4fb51637258a9  gcc/testsuite/gdc.test/fail_compilation/fail282.d
! a2ed99f933ff38d6841bcf4b4dcd48a6  gcc/testsuite/gdc.test/fail_compilation/fail284.d
  c2e57c588dd2d4a893b419ec6ed8be4c  gcc/testsuite/gdc.test/fail_compilation/fail285.d
! d3ce620c359b68a82b10de23b943ffb3  gcc/testsuite/gdc.test/fail_compilation/fail287.d
! 9a344cbb39e82675c0c1e46d391b38ca  gcc/testsuite/gdc.test/fail_compilation/fail288.d
  3bb1b85afcdf7ea4b10d0459a55c2126  gcc/testsuite/gdc.test/fail_compilation/fail289.d
  4ce4de1baf763370f69bedc1a8ebc2ce  gcc/testsuite/gdc.test/fail_compilation/fail290.d
! c0167ff7cfda345c489ee36ed532f9a5  gcc/testsuite/gdc.test/fail_compilation/fail291.d
! 217c8f69c094ff2a702c229130a7d538  gcc/testsuite/gdc.test/fail_compilation/fail296.d
! 45ec37698b6441cbf5cd767bc9e6af4a  gcc/testsuite/gdc.test/fail_compilation/fail2962.d
! 6d60e1b2bdb96cb17f638be9d15be002  gcc/testsuite/gdc.test/fail_compilation/fail297.d
  39598ace8538fb86a4a31cd07f3b73e6  gcc/testsuite/gdc.test/fail_compilation/fail298.d
! d7bdba8e69cfaf252d89c8107f67f90e  gcc/testsuite/gdc.test/fail_compilation/fail299.d
! 0ed23be0c271e03f9f016cdd30ade45c  gcc/testsuite/gdc.test/fail_compilation/fail3.d
! 92801dfbbc854e405224e747388284e4  gcc/testsuite/gdc.test/fail_compilation/fail301.d
! ccf07a8d9da2e18e2df9789595f228b8  gcc/testsuite/gdc.test/fail_compilation/fail302.d
! 83cbeb4a4f4e877683998a5dc8350383  gcc/testsuite/gdc.test/fail_compilation/fail303.d
  55c689bdd0e95596a127ae06b8d223da  gcc/testsuite/gdc.test/fail_compilation/fail304.d
! a4476518c57fe9ca01a6fe8b42385325  gcc/testsuite/gdc.test/fail_compilation/fail305.d
  ef026933cf422af0367257bfe21bd10a  gcc/testsuite/gdc.test/fail_compilation/fail306.d
  c6bb6e98c1536367c7fff657247aeddc  gcc/testsuite/gdc.test/fail_compilation/fail307.d
  39a9872d09a199054f81fd82b83909be  gcc/testsuite/gdc.test/fail_compilation/fail308.d
! 2ae494ce7c1053d4b26ec4431836b93e  gcc/testsuite/gdc.test/fail_compilation/fail309.d
! 968a8370713580cc337985d7cb95a842  gcc/testsuite/gdc.test/fail_compilation/fail310.d
! 31b98637d06b5f1ae10bfeac4d9624f3  gcc/testsuite/gdc.test/fail_compilation/fail311.d
! a5658fc11010dc8dcb719ff7cb29fcc0  gcc/testsuite/gdc.test/fail_compilation/fail312.d
! cd2c8e6993f43772807b794218558825  gcc/testsuite/gdc.test/fail_compilation/fail313.d
! cb0237e698db7dc3c18b1e250c33add1  gcc/testsuite/gdc.test/fail_compilation/fail3144.d
! 8b6a664003fd12e831f4b9bbe7a956c7  gcc/testsuite/gdc.test/fail_compilation/fail315.d
  717b50b0fa7011cc5fcc517fd321a8db  gcc/testsuite/gdc.test/fail_compilation/fail3150.d
  c15e5757d1100c2530af5033ae938db6  gcc/testsuite/gdc.test/fail_compilation/fail316.d
! fa456fd33d0fb0d3aaa1cc87dd39be56  gcc/testsuite/gdc.test/fail_compilation/fail317.d
! 27d4f79b4e38c969c16da4d302e16b4f  gcc/testsuite/gdc.test/fail_compilation/fail318_b.d
! 7c31afe36ce80937dd4227f3230c1703  gcc/testsuite/gdc.test/fail_compilation/fail319.d
! 0630a32de5ce194553521eaf29f3df52  gcc/testsuite/gdc.test/fail_compilation/fail320.d
  268122abaab8e4180bc6e53ec75faf41  gcc/testsuite/gdc.test/fail_compilation/fail322.d
! 79aa76311e496353aac9cd418beef1b0  gcc/testsuite/gdc.test/fail_compilation/fail325.d
! 8a7c5b78049815ea1cfd798976afe397  gcc/testsuite/gdc.test/fail_compilation/fail328.d
! c308f75b6759c912d37cf98cd774e1e2  gcc/testsuite/gdc.test/fail_compilation/fail329.d
  c3ff91e9e22d93e3f725978a285cf148  gcc/testsuite/gdc.test/fail_compilation/fail3290.d
! db25d22f16a253b8379657cc5e4d9fc8  gcc/testsuite/gdc.test/fail_compilation/fail330.d
! 0c96a3cd4bda0fa42d0822a73e39e9d1  gcc/testsuite/gdc.test/fail_compilation/fail331.d
  55a884c2cb0d85e25dfac7b325378fd8  gcc/testsuite/gdc.test/fail_compilation/fail332.d
! 78b83d0a6dd2d5ee5974ca3a4f7224d4  gcc/testsuite/gdc.test/fail_compilation/fail333.d
  4404e9f66c6ddceb6eebdb6fedd1978a  gcc/testsuite/gdc.test/fail_compilation/fail334.d
  efff0f2ea1051cc3f03bca692e4cdd58  gcc/testsuite/gdc.test/fail_compilation/fail335.d
! 4c3dd0c6267aacd55f117739256d6166  gcc/testsuite/gdc.test/fail_compilation/fail336.d
! ca1565a5e3c6d530f6ac211c98dbb3c9  gcc/testsuite/gdc.test/fail_compilation/fail337.d
! 1cc9295ba07308631d8c59cdc8721d82  gcc/testsuite/gdc.test/fail_compilation/fail34.d
! 6582ef9395b3a7c9090f7a2f29d70e43  gcc/testsuite/gdc.test/fail_compilation/fail340.d
! 02a7f2063a30a848e9be70675ca30452  gcc/testsuite/gdc.test/fail_compilation/fail341.d
! d90da0a412ace4972eb22626cc976f94  gcc/testsuite/gdc.test/fail_compilation/fail343.d
  f332a94ead175c47a5de77a06e6410b4  gcc/testsuite/gdc.test/fail_compilation/fail344.d
! 31062280e32548b6537711787472a743  gcc/testsuite/gdc.test/fail_compilation/fail346.d
! f30dee3457a1832a9e743366a7621ba1  gcc/testsuite/gdc.test/fail_compilation/fail347.d
! ccd8ce4ed9822b5a21bb35bdb22746b4  gcc/testsuite/gdc.test/fail_compilation/fail349.d
! bede71f4316d3fc557a5414cd713fc15  gcc/testsuite/gdc.test/fail_compilation/fail35.d
! d8f935e976db90cddbe98d81b99278a0  gcc/testsuite/gdc.test/fail_compilation/fail351.d
  fd946b4fc9ac05e46c66850cb7ff4e37  gcc/testsuite/gdc.test/fail_compilation/fail352.d
! 35ca2c617e25aa8df854068def171502  gcc/testsuite/gdc.test/fail_compilation/fail354.d
! 6dff6636523dbd4e4dd9b49d8de346f2  gcc/testsuite/gdc.test/fail_compilation/fail355.d
  74f680f546f739dc29795ea5e8b13c39  gcc/testsuite/gdc.test/fail_compilation/fail356a.d
  5a66ecde16238bcf9cf7dc5f63013203  gcc/testsuite/gdc.test/fail_compilation/fail356b.d
  6b1b322bfc0f2cf4a699ef8b03e35af3  gcc/testsuite/gdc.test/fail_compilation/fail356c.d
  315e8ea8d2a4134e7e31c481a7002be9  gcc/testsuite/gdc.test/fail_compilation/fail3581a.d
  06b4f133b88fa879e44e455dfa384c83  gcc/testsuite/gdc.test/fail_compilation/fail3581b.d
! d9c122ac02ce112d92c65de536e7c1d7  gcc/testsuite/gdc.test/fail_compilation/fail359.d
! 746948d192ad9a901f2298f8ddb07a09  gcc/testsuite/gdc.test/fail_compilation/fail36.d
! 29a89a6454930e35a32191818a8992d2  gcc/testsuite/gdc.test/fail_compilation/fail3672.d
  7247a47f45f036756a7c0b54274e273c  gcc/testsuite/gdc.test/fail_compilation/fail3673a.d
  1d2567efb51ee9926e9ffd28b507ca90  gcc/testsuite/gdc.test/fail_compilation/fail3673b.d
! 2e5fdda3f8ef2d9dc24f44ade168d8c7  gcc/testsuite/gdc.test/fail_compilation/fail3703.d
  11af7cdbfdfe0e1a51be20f239eee6e3  gcc/testsuite/gdc.test/fail_compilation/fail3731.d
! 7a59c8a96800f36befec89a5a96dd3b4  gcc/testsuite/gdc.test/fail_compilation/fail37_m32.d
! 7d8ed81898983666aaed80acce32393c  gcc/testsuite/gdc.test/fail_compilation/fail37_m64.d
! 79b07ae2d52fa5bdbb5f923388c4f3ec  gcc/testsuite/gdc.test/fail_compilation/fail38.d
! 129835052a7a137ed460464d704cd3d2  gcc/testsuite/gdc.test/fail_compilation/fail3882.d
! 2215430973b1bd295b4a070c2e018978  gcc/testsuite/gdc.test/fail_compilation/fail3895.d
! dbab9ede0148d630ce5457fe3852652b  gcc/testsuite/gdc.test/fail_compilation/fail39.d
! a3c52c49abd68bb9774eff98e08689bb  gcc/testsuite/gdc.test/fail_compilation/fail3990.d
! 5072a326fa375a1588e84f415ae73a2a  gcc/testsuite/gdc.test/fail_compilation/fail40.d
! 6997b0f6d45a6ceccc225d28063629cb  gcc/testsuite/gdc.test/fail_compilation/fail4082.d
! 2dd6f8c6cb1ecf6625d1650733ce0145  gcc/testsuite/gdc.test/fail_compilation/fail41.d
! 9a5300a416e69f83924621c9653cffd1  gcc/testsuite/gdc.test/fail_compilation/fail42.d
  6df76bbb49a6a24e29515a2adaf498cd  gcc/testsuite/gdc.test/fail_compilation/fail4206.d
! 1c414f5ee36828f697c3fb53c8e9c780  gcc/testsuite/gdc.test/fail_compilation/fail4269a.d
! 9ba1cccc0e4d3d97b624134d3c515590  gcc/testsuite/gdc.test/fail_compilation/fail4269b.d
! c4ab43e7f9f9156f14bc34890fdae39c  gcc/testsuite/gdc.test/fail_compilation/fail4269c.d
  562a7b498cea26253db494302d3e7be7  gcc/testsuite/gdc.test/fail_compilation/fail4269d.d
! 09c03d72eb2fe6ed53f3105d1ddedcd4  gcc/testsuite/gdc.test/fail_compilation/fail4269e.d
  7e320cba69b1ca1fa0179755e3337cbc  gcc/testsuite/gdc.test/fail_compilation/fail4269f.d
  e2a4b369785e7e5d117aa961f21d213a  gcc/testsuite/gdc.test/fail_compilation/fail4269g.d
  b36f34211c127f9d14b0221649b8a60c  gcc/testsuite/gdc.test/fail_compilation/fail4374.d
! a6a77add0076b5e3ad154a22b0cfa6a4  gcc/testsuite/gdc.test/fail_compilation/fail4375a.d
! 5320abdda0b338c2df13d57990c94119  gcc/testsuite/gdc.test/fail_compilation/fail4375b.d
! 53c848c7a6607038edf0fb69e5964773  gcc/testsuite/gdc.test/fail_compilation/fail4375c.d
! b6dc946ef55f26e5f870c0bbd82c0e3e  gcc/testsuite/gdc.test/fail_compilation/fail4375d.d
! 85326c548f7ab1fc9317e4222c58dde6  gcc/testsuite/gdc.test/fail_compilation/fail4375e.d
! e7dc4809f7c94af0e5c7712ca2348ef1  gcc/testsuite/gdc.test/fail_compilation/fail4375f.d
! df830f99014a154b104125288e65efe1  gcc/testsuite/gdc.test/fail_compilation/fail4375g.d
! ecf5abd857257e5bdd8cb354c7476bc5  gcc/testsuite/gdc.test/fail_compilation/fail4375h.d
! 21ffd8a1dd8654236ebbc77a75c6f3ce  gcc/testsuite/gdc.test/fail_compilation/fail4375i.d
! bdabdda3133911bf92a2a98a2a63267f  gcc/testsuite/gdc.test/fail_compilation/fail4375j.d
! defcf63f8997b8f976d6fdd2e58e68e9  gcc/testsuite/gdc.test/fail_compilation/fail4375k.d
! 9ddfb01d759afbc910f2e88b0bd1478a  gcc/testsuite/gdc.test/fail_compilation/fail4375l.d
! 28cd530b45b084ce3af90d9840c7d9c2  gcc/testsuite/gdc.test/fail_compilation/fail4375m.d
! de747fd099a46f18978e2343e72c77ac  gcc/testsuite/gdc.test/fail_compilation/fail4375o.d
! b2f712af514c9d243b3b3395aca19ac6  gcc/testsuite/gdc.test/fail_compilation/fail4375p.d
! 251fe9d09686e03c8a6ea54381b70e60  gcc/testsuite/gdc.test/fail_compilation/fail4375q.d
! e7c20eb9a3f83f9b20154ea2c720d7e1  gcc/testsuite/gdc.test/fail_compilation/fail4375r.d
! 59a945b86d2b000d7ee7eabeb48a415d  gcc/testsuite/gdc.test/fail_compilation/fail4375s.d
! 82a7d1b9f2c635ca9f2e22846c670925  gcc/testsuite/gdc.test/fail_compilation/fail4375t.d
! ba33104491c78e8f9646e3b2adfb0b1c  gcc/testsuite/gdc.test/fail_compilation/fail4375u.d
! e5f5b8c585b71fcb450e00705b24c482  gcc/testsuite/gdc.test/fail_compilation/fail4375v.d
! dfb8698771b62c207148e09fcae46f45  gcc/testsuite/gdc.test/fail_compilation/fail4375w.d
! 3b51f2991c42913dbf9c0e992b55601f  gcc/testsuite/gdc.test/fail_compilation/fail4375x.d
! b215db95df7d2f0a6817d59cadeaf153  gcc/testsuite/gdc.test/fail_compilation/fail4375y.d
! 8b5986b1a1adfe08a1003f54c1595998  gcc/testsuite/gdc.test/fail_compilation/fail44.d
! b58f9fa269de2f910d3f7415e2e893f7  gcc/testsuite/gdc.test/fail_compilation/fail4421.d
! db35e21cac0714ec864d1a43da5f821e  gcc/testsuite/gdc.test/fail_compilation/fail4448.d
! df7ebe1c9154e532f0eb25a288826ccb  gcc/testsuite/gdc.test/fail_compilation/fail45.d
  372cc7df83288c26deec10920b7ff241  gcc/testsuite/gdc.test/fail_compilation/fail4510.d
  a1c72712e50cfccb9828a18700353ddb  gcc/testsuite/gdc.test/fail_compilation/fail4511.d
! 6a513bc554e388d7c06336c242687244  gcc/testsuite/gdc.test/fail_compilation/fail4544.d
  77aeaa5915f3b3f7e866d92b911046f2  gcc/testsuite/gdc.test/fail_compilation/fail4559.d
! c7c67300b79a9e785e6ce2664f7174dc  gcc/testsuite/gdc.test/fail_compilation/fail46.d
! 82e4414cc0e0cba8789a05f992839390  gcc/testsuite/gdc.test/fail_compilation/fail4611.d
! 02f3db206ee272f70f6c94b5621f1724  gcc/testsuite/gdc.test/fail_compilation/fail47.d
! 4314b816d06af2eacfaa6f4b18e060ed  gcc/testsuite/gdc.test/fail_compilation/fail4923.d
  56535cbb92d2cfd2a7cefcad0cb06450  gcc/testsuite/gdc.test/fail_compilation/fail4958.d
! cf42739e9846b83be93d1739561dcacd  gcc/testsuite/gdc.test/fail_compilation/fail50.d
! 533a1731cf53e4f1f14412b77b064ebe  gcc/testsuite/gdc.test/fail_compilation/fail51.d
! e886866695de1f510d706d9a43753164  gcc/testsuite/gdc.test/fail_compilation/fail5153.d
! 14fd3593221a20b67cff3c4048c0a10a  gcc/testsuite/gdc.test/fail_compilation/fail52.d
  22e1ce68370a8ebbe3b4a289e2e902a0  gcc/testsuite/gdc.test/fail_compilation/fail53.d
! 1db7614724075a3f9fb159d763dfb680  gcc/testsuite/gdc.test/fail_compilation/fail54.d
  726fee55e204e2ae6f7096c796b293d4  gcc/testsuite/gdc.test/fail_compilation/fail5435.d
  ce0de773e6a50fd2386921c98d18d030  gcc/testsuite/gdc.test/fail_compilation/fail55.d
  6e81ace5c4651e1424f030312d47cffc  gcc/testsuite/gdc.test/fail_compilation/fail56.d
  cd3307a3394091a0065c50345d1d27c8  gcc/testsuite/gdc.test/fail_compilation/fail5634.d
  12f19bd2092f28fd800b72dfcccc6cd1  gcc/testsuite/gdc.test/fail_compilation/fail57.d
  240a3c909830bbc7f5edbb0a6ccb216c  gcc/testsuite/gdc.test/fail_compilation/fail5733.d
! a32e8d37f4d3c94002f94da8e97575d7  gcc/testsuite/gdc.test/fail_compilation/fail58.d
  f93769c76850f0b989d3a439f9819ef8  gcc/testsuite/gdc.test/fail_compilation/fail5851.d
! 45b24679cc558f5c53c822e8b63c94db  gcc/testsuite/gdc.test/fail_compilation/fail59.d
  0fa8371b53286c121ee2f9322b175961  gcc/testsuite/gdc.test/fail_compilation/fail5953a1.d
  496d05e780a77d4ce554c8f3df532f36  gcc/testsuite/gdc.test/fail_compilation/fail5953a2.d
  f3669e435f1e14c84bb61ff5c428cb46  gcc/testsuite/gdc.test/fail_compilation/fail5953s1.d
  dc1ca007f2c683eced50df7662e43e67  gcc/testsuite/gdc.test/fail_compilation/fail5953s2.d
! 63963f11ac05d624f54576e265b04620  gcc/testsuite/gdc.test/fail_compilation/fail60.d
  42a1255944d9bddb16e627a61865d1bc  gcc/testsuite/gdc.test/fail_compilation/fail6029.d
! 355bea7c97460e5b60f518443fe0987c  gcc/testsuite/gdc.test/fail_compilation/fail61.d
! 41e84d5491b9cd6499320b1f3de36186  gcc/testsuite/gdc.test/fail_compilation/fail6107.d
! 0339b3d2f0c30e5e8b0165010f55c9da  gcc/testsuite/gdc.test/fail_compilation/fail62.d
! d49de1c497e66b2393f19e7ab4164fa3  gcc/testsuite/gdc.test/fail_compilation/fail6242.d
! c04bb3b9d9f2c77e67d846ea284d05c6  gcc/testsuite/gdc.test/fail_compilation/fail63.d
! 0f729e40e929d617f3bd3d50123fe43f  gcc/testsuite/gdc.test/fail_compilation/fail6334.d
! 0f27e8326540f5faa28936d621dc867b  gcc/testsuite/gdc.test/fail_compilation/fail6453.d
  f6ad81f6c854268ec6aa1653a1d0a713  gcc/testsuite/gdc.test/fail_compilation/fail6458.d
  939f57e656ee0ebf701e70ea08291c32  gcc/testsuite/gdc.test/fail_compilation/fail6497.d
  611d6b962d4185ffdab95c02bc8df4e4  gcc/testsuite/gdc.test/fail_compilation/fail6561.d
! db8e1deb916765b7f6a293a025a23427  gcc/testsuite/gdc.test/fail_compilation/fail66.d
  9e7996a6ce93324b738d224ae2c4c197  gcc/testsuite/gdc.test/fail_compilation/fail6611.d
! df0020fd18ec31bed68de41c63d76fe2  gcc/testsuite/gdc.test/fail_compilation/fail6652.d
  ccfea15dc14dfc824be1ec62b8a31852  gcc/testsuite/gdc.test/fail_compilation/fail6781.d
! b7d0aeef2b4def24a504b53b66cf8fb3  gcc/testsuite/gdc.test/fail_compilation/fail6795.d
! 220b689730eb9d710968a9970f08bf95  gcc/testsuite/gdc.test/fail_compilation/fail6889.d
! 5ec830d5c53fc5f8a83fb99cea8c3c5a  gcc/testsuite/gdc.test/fail_compilation/fail6968.d
  4f5e9643c98ab73f981a090b5ede3c6b  gcc/testsuite/gdc.test/fail_compilation/fail7077.d
  96a6d4f7e3e63503f33c54577cfaeb50  gcc/testsuite/gdc.test/fail_compilation/fail7173.d
! 96038179f7fdc83fbe0cbeaae07544a6  gcc/testsuite/gdc.test/fail_compilation/fail7178.d
! e410b8e25ef1e7165b073d41d98e072a  gcc/testsuite/gdc.test/fail_compilation/fail72.d
! 13fb541b34c9bd13a4c03727a264b0dc  gcc/testsuite/gdc.test/fail_compilation/fail7234.d
! 6fe67f7e8ce2a7fbd43f408b6f338c68  gcc/testsuite/gdc.test/fail_compilation/fail73.d
! 97078e5e2ec6fe52e9d6de59897f9a43  gcc/testsuite/gdc.test/fail_compilation/fail7352.d
! 640f95b8642e2bbd701e15e7e91e7ef2  gcc/testsuite/gdc.test/fail_compilation/fail7369.d
! 52f5ec52b1e7fed2889865f2f7f2e139  gcc/testsuite/gdc.test/fail_compilation/fail74.d
  a0982e24c691ef64752d4fc792f9a78b  gcc/testsuite/gdc.test/fail_compilation/fail7424b.d
! fe900fa07ca9a4a67e4995ba24a45f39  gcc/testsuite/gdc.test/fail_compilation/fail7424c.d
! eb3b3d957aecdd38f9554a693c145f0f  gcc/testsuite/gdc.test/fail_compilation/fail7424d.d
! d098372e3198374e54d19802e2f08962  gcc/testsuite/gdc.test/fail_compilation/fail7424e.d
! 05e7169a9aebfd0f45e309d44054d236  gcc/testsuite/gdc.test/fail_compilation/fail7424f.d
! ba54fcc4b582fdcb4385921979cf44bf  gcc/testsuite/gdc.test/fail_compilation/fail7424g.d
! debd08196efd6b5f28e627382b340b6e  gcc/testsuite/gdc.test/fail_compilation/fail7424h.d
! 5ac76c884d82512b653c6597a35c3ce0  gcc/testsuite/gdc.test/fail_compilation/fail7424i.d
! 5f0e99e2a7ce8c9c17a743398d9efb2f  gcc/testsuite/gdc.test/fail_compilation/fail7443.d
! e54523936108dbc7bed810761286a9a8  gcc/testsuite/gdc.test/fail_compilation/fail75.d
! a8e5dff574f1a2d717bd4f0e25f1dc35  gcc/testsuite/gdc.test/fail_compilation/fail7524a.d
! 2a506fe4d8dda5dd7ba04bda02aaab03  gcc/testsuite/gdc.test/fail_compilation/fail7524b.d
! 3e05a34bc8da442c20d1ae682baafbbc  gcc/testsuite/gdc.test/fail_compilation/fail76.d
  055cb020f686d2fa14c6db48814df79b  gcc/testsuite/gdc.test/fail_compilation/fail7603a.d
  a23fcafa535557168685c997e19265cf  gcc/testsuite/gdc.test/fail_compilation/fail7603b.d
  7426ea1df42c77958814d7f2d917edb5  gcc/testsuite/gdc.test/fail_compilation/fail7603c.d
! 0173bdcdaf43fc85db8978398d610fa1  gcc/testsuite/gdc.test/fail_compilation/fail77.d
  92aa8a8003bb898a5b6414473a0b488d  gcc/testsuite/gdc.test/fail_compilation/fail7702.d
  1ab023e309a57b9924db04ee18437f87  gcc/testsuite/gdc.test/fail_compilation/fail7751.d
! bc85c10bfd2a5ec0ee7c065a2d103ecd  gcc/testsuite/gdc.test/fail_compilation/fail78.d
! 27dc5926201b922ea7217bbc831f73ee  gcc/testsuite/gdc.test/fail_compilation/fail7848.d
! a118dd4539f67ddeb759d0e51e6d80e1  gcc/testsuite/gdc.test/fail_compilation/fail7851.d
! 401d56f13cc4bd550382136545d4e8a3  gcc/testsuite/gdc.test/fail_compilation/fail7859.d
! 68533c82be3414dafe652e423d7e6e66  gcc/testsuite/gdc.test/fail_compilation/fail7861.d
! b07f34ea7ce4ac46ed0a9a3f9c217823  gcc/testsuite/gdc.test/fail_compilation/fail7862.d
! a8a6cfab5308f0a25fe9bb1a47dcbe7c  gcc/testsuite/gdc.test/fail_compilation/fail79.d
! d22b1fe429694b237a5a2ad81c2d1000  gcc/testsuite/gdc.test/fail_compilation/fail7903.d
! 1accd87ae73f56ec54fc85ddf219623f  gcc/testsuite/gdc.test/fail_compilation/fail8009.d
  fa695cea8079d9e1b1814862fc6d3bf5  gcc/testsuite/gdc.test/fail_compilation/fail8032.d
! f7e1bc01ea39b39faf431443b7b05fdb  gcc/testsuite/gdc.test/fail_compilation/fail80_m32.d
! fed4ca464ca0ae6580a0b5b2a2ce9520  gcc/testsuite/gdc.test/fail_compilation/fail80_m64.d
! d23a686d3b61373f5fd2c443c37f8c69  gcc/testsuite/gdc.test/fail_compilation/fail8179b.d
! 9daa45699d661b992d2b8bb4113d3424  gcc/testsuite/gdc.test/fail_compilation/fail8217.d
! b6ffbcff6f4f3bfb51ce3457ad1530b4  gcc/testsuite/gdc.test/fail_compilation/fail8262.d
  fa8cbb814bdd1ecb615be4298b99baac  gcc/testsuite/gdc.test/fail_compilation/fail8313.d
! e77fabf5d84f9edceecdf3a4f7cfa430  gcc/testsuite/gdc.test/fail_compilation/fail8373.d
! ccbf7fe819cf48b189d76874040439fa  gcc/testsuite/gdc.test/fail_compilation/fail86.d
! 6d84ac30cad31ec993f23d912f973326  gcc/testsuite/gdc.test/fail_compilation/fail8631.d
  45ecc1b0f407c1be0cd016bb6d98e64c  gcc/testsuite/gdc.test/fail_compilation/fail8691.d
! 8ce73b67eb8c02689f6c74f0c6c4193a  gcc/testsuite/gdc.test/fail_compilation/fail8724.d
! 46287040eed55391cf540979b443b9d0  gcc/testsuite/gdc.test/fail_compilation/fail9.d
! de5e3db7840518024a9cc35ee16543aa  gcc/testsuite/gdc.test/fail_compilation/fail9063.d
! 92744484a0908c418aa484eb314f0c79  gcc/testsuite/gdc.test/fail_compilation/fail9081.d
! ac6bf8d1042e8231807ad80f7bcef2bb  gcc/testsuite/gdc.test/fail_compilation/fail91.d
! ffead9e59e51a3ad54f5965eb4b15388  gcc/testsuite/gdc.test/fail_compilation/fail9199.d
! 592a25b2fb45b91631d7e835040cfa29  gcc/testsuite/gdc.test/fail_compilation/fail92.d
  464df40ce91526b0d13136269cd06d56  gcc/testsuite/gdc.test/fail_compilation/fail9279.d
! 5c37289133b3a824aa5c0071cb484e21  gcc/testsuite/gdc.test/fail_compilation/fail9290.d
! c4f29956f75a2b6a260f92ffc641b208  gcc/testsuite/gdc.test/fail_compilation/fail93.d
  86e6c37236e5281ae6e85b20c93617ec  gcc/testsuite/gdc.test/fail_compilation/fail9301.d
! 6442c2abcb8b4d33688d3a179b86436f  gcc/testsuite/gdc.test/fail_compilation/fail9346.d
! d30fb0a2283550bd74e92558b8b4d4ad  gcc/testsuite/gdc.test/fail_compilation/fail94.d
! 47c8d166e219850847fd50d08441ad57  gcc/testsuite/gdc.test/fail_compilation/fail9413.d
! ee9da9cdc7bc8825f9b9f6f386521bb2  gcc/testsuite/gdc.test/fail_compilation/fail9414a.d
! 85516b47ad47cb2d0dc8a624cd01bac0  gcc/testsuite/gdc.test/fail_compilation/fail9414b.d
! b809b0d3e1e2c21fe5e8c345f65ad761  gcc/testsuite/gdc.test/fail_compilation/fail9414c.d
! 097c17067b3d1c20f26bce2bfe022770  gcc/testsuite/gdc.test/fail_compilation/fail9414d.d
! ef3d1b682bb51bf07553160bea316758  gcc/testsuite/gdc.test/fail_compilation/fail95.d
! 64f1abdc294689b7522d3d592bdcae40  gcc/testsuite/gdc.test/fail_compilation/fail9537.d
! e086d9909c9caadc06b38ba910881e91  gcc/testsuite/gdc.test/fail_compilation/fail9562.d
  9c2c95527f1091d7b4fb961d8dc5b771  gcc/testsuite/gdc.test/fail_compilation/fail9572.d
! 079c31b17a1ed35362c5e667b5eb2cd4  gcc/testsuite/gdc.test/fail_compilation/fail96.d
! 67dbc31b3c43a5e0b8ce4b1657923974  gcc/testsuite/gdc.test/fail_compilation/fail9613.d
! a421bcf258b8245ac99ef2c6cbee30ca  gcc/testsuite/gdc.test/fail_compilation/fail9665a.d
! 8d6b48da97b1a7a018bd24f843cf4fc4  gcc/testsuite/gdc.test/fail_compilation/fail9665b.d
! e0d56d8e254f195a48abf32e39cc51aa  gcc/testsuite/gdc.test/fail_compilation/fail97.d
! a8fe53493be780e3cc67f316ab517f81  gcc/testsuite/gdc.test/fail_compilation/fail9710.d
! 6ccce2d9342732663424e4687f541215  gcc/testsuite/gdc.test/fail_compilation/fail9735.d
! d7723e17b36d09ef6c3adb1b595d1521  gcc/testsuite/gdc.test/fail_compilation/fail9766.d
! 89a9905f428bf036206e8abd897f2ec1  gcc/testsuite/gdc.test/fail_compilation/fail9773.d
! 007549037b1dc58b235123d494310c31  gcc/testsuite/gdc.test/fail_compilation/fail9790.d
! 4cc716e7729c65300b3c37f4297755e9  gcc/testsuite/gdc.test/fail_compilation/fail98.d
! 18c814b6fb7b3ffc61e4f6b4977895c7  gcc/testsuite/gdc.test/fail_compilation/fail9891.d
! 5f89108928a4b83bf03ae31c848575f0  gcc/testsuite/gdc.test/fail_compilation/fail9892.d
! 982ee0df3a1a6ace82dc36a404b8b9fa  gcc/testsuite/gdc.test/fail_compilation/fail99.d
! 980a7ec30f9685063c0705dc226922a9  gcc/testsuite/gdc.test/fail_compilation/fail9936.d
! 378c1bcd54af66fa3474a8ed2d6104fa  gcc/testsuite/gdc.test/fail_compilation/failCopyCtor.d
! c031c67712e76b12a4c85d293bcf3ffe  gcc/testsuite/gdc.test/fail_compilation/failCopyCtor2.d
! f4d497ea71041ea968e6cfffda0c12bb  gcc/testsuite/gdc.test/fail_compilation/fail_arrayexp.d
! ac90f256ed942b9c651f7c098cb27bb5  gcc/testsuite/gdc.test/fail_compilation/fail_arrayop1.d
! b2bac4a42c2533c6f9a59c992805625f  gcc/testsuite/gdc.test/fail_compilation/fail_arrayop2.d
! 5392bd6d5086465088d720bec4e643b5  gcc/testsuite/gdc.test/fail_compilation/fail_arrayop3a.d
! 37929ba711bedc6a10601f65fc2ef9dc  gcc/testsuite/gdc.test/fail_compilation/fail_arrayop3b.d
! 76dc6e141fcacc42604f0bdf73497160  gcc/testsuite/gdc.test/fail_compilation/fail_arrayop3c.d
! e0ad39470e050f43b666f0b33e02af1c  gcc/testsuite/gdc.test/fail_compilation/fail_casting.d
  d1920a0ad9ef7df56e67e67aed392ab6  gcc/testsuite/gdc.test/fail_compilation/fail_casting1.d
! 5c15379ab3a21c0db67afc5a0536520a  gcc/testsuite/gdc.test/fail_compilation/fail_casting2.d
! a1a3513b72a19d20572d1dc4d7ac8cf1  gcc/testsuite/gdc.test/fail_compilation/fail_circular.d
! 91ebca05271a9228a53b7e9db4999337  gcc/testsuite/gdc.test/fail_compilation/fail_circular2.d
! dab25fcf0ad32ca592f8412820627395  gcc/testsuite/gdc.test/fail_compilation/fail_compilation.exp
  39d9ce96eb95361623099463c49b4659  gcc/testsuite/gdc.test/fail_compilation/fail_contracts1.d
  f0f98a24874397d29f4f6e59def95d45  gcc/testsuite/gdc.test/fail_compilation/fail_contracts2.d
! 2681d65bc25b4e9924747b1bcb620627  gcc/testsuite/gdc.test/fail_compilation/fail_contracts3.d
  2ba3f1515a3ee5a14f9c4466fc8caef3  gcc/testsuite/gdc.test/fail_compilation/fail_contracts4.d
  695faa3012289c1132b755b3a4e17c6b  gcc/testsuite/gdc.test/fail_compilation/fail_isZeroInit.d
! 5755182d428b39c519f6bab44078de81  gcc/testsuite/gdc.test/fail_compilation/fail_opover.d
! 9ce4881e9532c3e5653f8284a13e6d8d  gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d
! 9421f2d440be9be4d77453dd47100cfc  gcc/testsuite/gdc.test/fail_compilation/fail_scope.d
! 6ab7e192a48919708488d70f02e8f28d  gcc/testsuite/gdc.test/fail_compilation/fail_typeof.d
! fce53aa021cbe4afc79cbd0973298f35  gcc/testsuite/gdc.test/fail_compilation/failattr.d
! b61f6ad629dba45d1085c76d3217f055  gcc/testsuite/gdc.test/fail_compilation/failcontracts.d
! 350c72bc28ff713ca0e58d7af842d96d  gcc/testsuite/gdc.test/fail_compilation/faildeleteaa.d
! 2fd5ddfd7edbc76ff3142c0f4b33ddeb  gcc/testsuite/gdc.test/fail_compilation/faildottypeinfo.d
  acd4dc01e2f625f440ffb85c36b0bdd8  gcc/testsuite/gdc.test/fail_compilation/failescape.d
  572be48d5a0a5235990cd885758cfa21  gcc/testsuite/gdc.test/fail_compilation/failinout1.d
  c7f4961ddbeca8a36494b25667221785  gcc/testsuite/gdc.test/fail_compilation/failinout2.d
  2ee5553bf2ef7df7520e5f560f81713a  gcc/testsuite/gdc.test/fail_compilation/failinout3748a.d
  5bd66c2d163a5f011e1164fee8159067  gcc/testsuite/gdc.test/fail_compilation/failinout3748b.d
! 776e8b2bef99b80fb68e6a31efc99d77  gcc/testsuite/gdc.test/fail_compilation/failob1.d
! 7ab41036f289115bb8c919966bf7da8e  gcc/testsuite/gdc.test/fail_compilation/failob2.d
! d1a70868aec4a96f7a46d00fd7684d38  gcc/testsuite/gdc.test/fail_compilation/failoffset.d
  d5f5f9e3ec363ba8c6f1846ec95974e1  gcc/testsuite/gdc.test/fail_compilation/failsafea.d
  b103e7dea688095eeac13c4d83e09207  gcc/testsuite/gdc.test/fail_compilation/failsafeb.d
! c8c5548edad867bb7b10e6a3658657d1  gcc/testsuite/gdc.test/fail_compilation/failsafec.d
! b1fa83e7e767b866edc1118f9d0f686f  gcc/testsuite/gdc.test/fail_compilation/fix17349.d
! 6ee13248a66eac0a69cd1d5e1b701e92  gcc/testsuite/gdc.test/fail_compilation/fix18575.d
! 24f0a089eaaac69432f496cae56e5343  gcc/testsuite/gdc.test/fail_compilation/fix19018.d
! beb8c8bfc3f0f76ee64efc3806c61af0  gcc/testsuite/gdc.test/fail_compilation/fix19059.d
! 70b0c808cb74e8359925dbd5e0749db7  gcc/testsuite/gdc.test/fail_compilation/fix19246.d
! 0274ff4a725fd57aeec4d55356e37e66  gcc/testsuite/gdc.test/fail_compilation/fix21585.d
  93690a25ed6e19eb304f316a96d26179  gcc/testsuite/gdc.test/fail_compilation/fix350a.d
  d70aafa6b9062aa0a03de1dadb2afa0e  gcc/testsuite/gdc.test/fail_compilation/fix350b.d
! 61222240dcc7ff94aa66a70ee70a2267  gcc/testsuite/gdc.test/fail_compilation/fix5212.d
! dd8fd3121094b29fedc923268b438cc5  gcc/testsuite/gdc.test/fail_compilation/fob1.d
! ab32bca2f053e6f211191b5a705090cd  gcc/testsuite/gdc.test/fail_compilation/fob2.d
! 3b6b4690c46663771a12fac16287d948  gcc/testsuite/gdc.test/fail_compilation/foreach.d
! 0f17ffd1ebe50b304fd0960b12313bb2  gcc/testsuite/gdc.test/fail_compilation/foreach2.d
! 6564ec7f617e45a8fbc2200fe0aeda2f  gcc/testsuite/gdc.test/fail_compilation/format.d
  3f0593f45a26cf2f750af2587d67a6ba  gcc/testsuite/gdc.test/fail_compilation/gag4269a.d
  f56ebc2eca71902974fca5bb8a136c4e  gcc/testsuite/gdc.test/fail_compilation/gag4269b.d
  f68d4c65c480dd21796992cb08232816  gcc/testsuite/gdc.test/fail_compilation/gag4269c.d
  749dbc75bce825328eabbeb85df3b8ca  gcc/testsuite/gdc.test/fail_compilation/gag4269d.d
  87a6211fb542430ff7af21389d799fda  gcc/testsuite/gdc.test/fail_compilation/gag4269e.d
! 853b5d645664bbaa8463be3ef92de6b6  gcc/testsuite/gdc.test/fail_compilation/gag4269f.d
  9cf3422f5ffafd5938cb92091c05e380  gcc/testsuite/gdc.test/fail_compilation/gag4269g.d
! 9ce1ef30ce0032c5863af2b5db1a1096  gcc/testsuite/gdc.test/fail_compilation/goto1.d
! 77e722036429f4fc42ec0ff061e860b0  gcc/testsuite/gdc.test/fail_compilation/goto2.d
! cd533a563214ceee8ca1768f9838d59d  gcc/testsuite/gdc.test/fail_compilation/goto3.d
! 99c89b8c0a428df9da4c26b6f3529275  gcc/testsuite/gdc.test/fail_compilation/ice10016.d
! 025fc1e9a5dc79cd22aa2bf5b5dc7daf  gcc/testsuite/gdc.test/fail_compilation/ice10076.d
! b79d3bf3f306725e17ff9746eeef5b56  gcc/testsuite/gdc.test/fail_compilation/ice10212.d
! 4e960134b9fe70f9220516823d99a79b  gcc/testsuite/gdc.test/fail_compilation/ice10259.d
  d5388b9b8af91183c0f15639c00276ad  gcc/testsuite/gdc.test/fail_compilation/ice10273.d
! 6ea95042bce54d6ecc7671ba800aea08  gcc/testsuite/gdc.test/fail_compilation/ice10283.d
! d51e529940bc437f64bbaa0bd190205a  gcc/testsuite/gdc.test/fail_compilation/ice10341.d
  70bc10d3ccd01357e26413166df5bcc5  gcc/testsuite/gdc.test/fail_compilation/ice10382.d
! c5ac771d91f47e9650161cae0194dea0  gcc/testsuite/gdc.test/fail_compilation/ice10419.d
  c56acd6f4c74ed39f0536444293d098c  gcc/testsuite/gdc.test/fail_compilation/ice10598.d
  53e85d82f583a68093ca5af572f9c19c  gcc/testsuite/gdc.test/fail_compilation/ice10599.d
! eaa8d3fd53fa02a7d63c35073fc43afd  gcc/testsuite/gdc.test/fail_compilation/ice10600.d
! 9df2af66260b9fb0b61d20afe7c1185b  gcc/testsuite/gdc.test/fail_compilation/ice10616.d
! ec78599028c7b060201a8be7166419e0  gcc/testsuite/gdc.test/fail_compilation/ice10624.d
! 004f9ce0dea56bf66923d0989edb32a0  gcc/testsuite/gdc.test/fail_compilation/ice10651.d
! d6a1e1a4369bae1d4acb191b3cbf51ec  gcc/testsuite/gdc.test/fail_compilation/ice10713.d
! 18ba13b8377cd5cd39ea2a7487e0f1a1  gcc/testsuite/gdc.test/fail_compilation/ice10727a.d
! 0d0b86f60aaa3a19af66b2141f3af10f  gcc/testsuite/gdc.test/fail_compilation/ice10727b.d
! 10c6a422edc0ee74a716c895dd8147fe  gcc/testsuite/gdc.test/fail_compilation/ice10922.d
! 96a759c7713fde195d3f68e23b8d1bda  gcc/testsuite/gdc.test/fail_compilation/ice10938.d
! 348a7e605b5ee19f9a184eb5d63c537f  gcc/testsuite/gdc.test/fail_compilation/ice10949.d
! 34d3870c0caaf04c607e50cf1a928eec  gcc/testsuite/gdc.test/fail_compilation/ice11086.d
  648c23d8d77c00d2e35dccf65fe72418  gcc/testsuite/gdc.test/fail_compilation/ice11136.d
  51064f5105da0930ea716a6625403b6e  gcc/testsuite/gdc.test/fail_compilation/ice11153.d
! 1b37da2086604e2f8f8e86caa35f37ea  gcc/testsuite/gdc.test/fail_compilation/ice11404.d
! 9a31146748fd7dba9ac030ce8305bc75  gcc/testsuite/gdc.test/fail_compilation/ice1144.d
! 99dfb4f4adee9d67ecacda92dc77d8f9  gcc/testsuite/gdc.test/fail_compilation/ice11472.d
! b01f1e5097e328574434a03ef20c82a1  gcc/testsuite/gdc.test/fail_compilation/ice11513a.d
! 297f720e062086b8dc908429e0a610a3  gcc/testsuite/gdc.test/fail_compilation/ice11513b.d
! 368f097e80f9e3314f8ada824bc2bcb1  gcc/testsuite/gdc.test/fail_compilation/ice11518.d
! 00cdd8dd70555e44311ab986c9035d5e  gcc/testsuite/gdc.test/fail_compilation/ice11552.d
! 6c48d3d86d43c755947eb4bb6ecc570b  gcc/testsuite/gdc.test/fail_compilation/ice11553.d
  74a4ba5f3fefa42fbbfd071076e14869  gcc/testsuite/gdc.test/fail_compilation/ice11626.d
  4da5ee3a1d67873962af14a594e3465e  gcc/testsuite/gdc.test/fail_compilation/ice11726.d
! c3c4f85c56281537ca3ee9c4cf8b6a91  gcc/testsuite/gdc.test/fail_compilation/ice11793.d
! 7d2b1a059c8c93ae667a4f3a48567aa6  gcc/testsuite/gdc.test/fail_compilation/ice11822.d
! 7026d9811c4f8d0be77cedf33a89c5df  gcc/testsuite/gdc.test/fail_compilation/ice11849b.d
! 56c7c64caed7981c7f9103c734734e0a  gcc/testsuite/gdc.test/fail_compilation/ice11850.d
! 153e61db46622a2e4f240d23d23b7266  gcc/testsuite/gdc.test/fail_compilation/ice11856_0.d
! 1e3b8af1d67aec464acc322ab983310d  gcc/testsuite/gdc.test/fail_compilation/ice11856_1.d
! 72832de41c6779e3f783a305e081fe30  gcc/testsuite/gdc.test/fail_compilation/ice11919.d
! 861874f2b059070cff718bf324774753  gcc/testsuite/gdc.test/fail_compilation/ice11922.d
! c0767fee9a9a4f4f482ae2a5bc0348ab  gcc/testsuite/gdc.test/fail_compilation/ice11925.d
  b770417113d0cfab995e016c1a96463c  gcc/testsuite/gdc.test/fail_compilation/ice11926.d
! 37cd844480cad08328bd663f58b02961  gcc/testsuite/gdc.test/fail_compilation/ice11944.d
  3581ee928172d5e956124a025111f8e2  gcc/testsuite/gdc.test/fail_compilation/ice11963.d
  34eeab6b424aabc0833e5a87447b6f8e  gcc/testsuite/gdc.test/fail_compilation/ice11965.d
  7a3bc872fc720b7fe6b26109acfc6ba1  gcc/testsuite/gdc.test/fail_compilation/ice11967.d
! 9c15df3bc58c0633f4f0a555748df34d  gcc/testsuite/gdc.test/fail_compilation/ice11968.d
  62edb8803f123fb16f5e40f647c48a0d  gcc/testsuite/gdc.test/fail_compilation/ice11969.d
  5c4e51a872cc510224e82db0a4d3bef5  gcc/testsuite/gdc.test/fail_compilation/ice11974.d
  52a2c69cb2543e948028d7a380bb12b3  gcc/testsuite/gdc.test/fail_compilation/ice11982.d
! 739ae8c1e53ba0243c4cf2e783760a68  gcc/testsuite/gdc.test/fail_compilation/ice12040.d
! fdadb7e02cce30df2e604ba0c426de70  gcc/testsuite/gdc.test/fail_compilation/ice12158.d
! bdbdcdb4bf3772c89e4a0bf9c6af6eed  gcc/testsuite/gdc.test/fail_compilation/ice12174.d
! 276ba3933846ea9c284d42485aac58ad  gcc/testsuite/gdc.test/fail_compilation/ice12235.d
! cd150c87ac92e61e8b5e7090ae58da2f  gcc/testsuite/gdc.test/fail_compilation/ice12350.d
! f4ef2195ff7d779b59f1b6dee9571fbb  gcc/testsuite/gdc.test/fail_compilation/ice12362.d
  3bc21becfe6e22cc50bb89839b877fc6  gcc/testsuite/gdc.test/fail_compilation/ice12397.d
  7cb92086b9ee1495589129f725e2a3c1  gcc/testsuite/gdc.test/fail_compilation/ice12501.d
! b715ba0a6a8a0570d030ad23cf911c9b  gcc/testsuite/gdc.test/fail_compilation/ice12534.d
! 9faa539294380abc5984c23496c207b6  gcc/testsuite/gdc.test/fail_compilation/ice12539.d
! 3b64c5b56df13bd2c16827f4303a50b6  gcc/testsuite/gdc.test/fail_compilation/ice12574.d
  c5d83c46b1283b0dd2faab15724477e0  gcc/testsuite/gdc.test/fail_compilation/ice12581.d
  94cfd39ff841db3c06aa46f974ec9920  gcc/testsuite/gdc.test/fail_compilation/ice12673.d
! 6a52b2abb84921b63f5cff92834b5984  gcc/testsuite/gdc.test/fail_compilation/ice12727.d
! c36f3395f426470d991985d5dca3f939  gcc/testsuite/gdc.test/fail_compilation/ice12827.d
  a7ad99af969fb1ecb4ad94aca9468df7  gcc/testsuite/gdc.test/fail_compilation/ice12836.d
  3338ec526a2d9e2ab88908856caff232  gcc/testsuite/gdc.test/fail_compilation/ice12838.d
! 7848b00ddd3abd0a003fe99c46bd17a8  gcc/testsuite/gdc.test/fail_compilation/ice12841.d
  a5897d2681c15118416b4f821cc74062  gcc/testsuite/gdc.test/fail_compilation/ice12850.d
! 3aaa51368b9512b56094dda74f050f88  gcc/testsuite/gdc.test/fail_compilation/ice12902.d
  9e9a8eac1a9f49f5c052a39cf734e59c  gcc/testsuite/gdc.test/fail_compilation/ice12907.d
! 90856d9b40d500a6b3d38aaec0f8480c  gcc/testsuite/gdc.test/fail_compilation/ice13027.d
! 3b5508a3a69ba76a27ed41a25566be79  gcc/testsuite/gdc.test/fail_compilation/ice13081.d
! 7504c353f2132b60c68b7679aeda65b4  gcc/testsuite/gdc.test/fail_compilation/ice13131.d
! c1cd5c3fda15a812481eeb4a54119f47  gcc/testsuite/gdc.test/fail_compilation/ice13220.d
! 19a64f1c894e25fedf92ef98d00f890f  gcc/testsuite/gdc.test/fail_compilation/ice13221.d
! 40c5d35d23975bac370ddc6f0090e7f6  gcc/testsuite/gdc.test/fail_compilation/ice13225.d
! 200733a2f0152abe94c711e58f9d1520  gcc/testsuite/gdc.test/fail_compilation/ice13311.d
! 898cdb488015b425bb183d44306c64a6  gcc/testsuite/gdc.test/fail_compilation/ice13356.d
! 664f9a91f4eeca7d9e63d50ac7044f09  gcc/testsuite/gdc.test/fail_compilation/ice13382.d
! 1a4bbc169fd865e415f5735e2d02011f  gcc/testsuite/gdc.test/fail_compilation/ice13385.d
! 47de01e677f40cefb25ff8b3a4a36be8  gcc/testsuite/gdc.test/fail_compilation/ice13459.d
! 7eb7d91873c6e88ec6fdb603c21e6fd5  gcc/testsuite/gdc.test/fail_compilation/ice13465a.d
! f4410cf62c66bd36b26cfd923568793c  gcc/testsuite/gdc.test/fail_compilation/ice13465b.d
  2758dd2a496a5538d3b0f220c968d7c2  gcc/testsuite/gdc.test/fail_compilation/ice13563.d
! e119a3d6ce481c2065b18f9d8e145b75  gcc/testsuite/gdc.test/fail_compilation/ice1358.d
  a2859dc4361a77e0eb5ace8ca45bc965  gcc/testsuite/gdc.test/fail_compilation/ice13644.d
! 94361f19c7c5190fc633d234f94c4c86  gcc/testsuite/gdc.test/fail_compilation/ice13788.d
! 7297285b2454d56fe084e452050f79e8  gcc/testsuite/gdc.test/fail_compilation/ice13816.d
! 92a72287950ae5199eac2b586d1aab4a  gcc/testsuite/gdc.test/fail_compilation/ice13835.d
! 536656bafa8e999ecd89a1eb9af4e1c9  gcc/testsuite/gdc.test/fail_compilation/ice13921.d
! 5d31b3a96f1a0a36426b8a81115d82a7  gcc/testsuite/gdc.test/fail_compilation/ice13987.d
! 96f71bde638b7d5dc18e97f97371527d  gcc/testsuite/gdc.test/fail_compilation/ice14055.d
! 8ccac1809b79a556a5695da6538a2fdb  gcc/testsuite/gdc.test/fail_compilation/ice14096.d
! 128fd09fc874041619ce918a3a2a42cf  gcc/testsuite/gdc.test/fail_compilation/ice14116.d
! de954f2f81aeb3383b663ceab6e3e919  gcc/testsuite/gdc.test/fail_compilation/ice14130.d
! 1f92d0a5c92c9c27f3b8c62489742dd8  gcc/testsuite/gdc.test/fail_compilation/ice14146.d
! a3030493e844e6a48d6f641d6e35db75  gcc/testsuite/gdc.test/fail_compilation/ice14177.d
  3ffe323bf5cac54cd8f129bd4d24b624  gcc/testsuite/gdc.test/fail_compilation/ice14185.d
! bea2ed593bafd20204dbbceeef5c98c7  gcc/testsuite/gdc.test/fail_compilation/ice14272.d
! e9fc246503f24b01d7b54bf0e06fe251  gcc/testsuite/gdc.test/fail_compilation/ice14424.d
! a2a949ac7909f7551aaf96e706213eed  gcc/testsuite/gdc.test/fail_compilation/ice14621.d
! 2bc303c1fcbcde60c2862ed14d39f7ce  gcc/testsuite/gdc.test/fail_compilation/ice14642.d
! 8a58c754ab9f43fa5b841c52de3c80b5  gcc/testsuite/gdc.test/fail_compilation/ice14844.d
! 0b09db7aaa0a981639042be21669e8fc  gcc/testsuite/gdc.test/fail_compilation/ice14907.d
  61206c0be6afd5ad30b658069fbd81b2  gcc/testsuite/gdc.test/fail_compilation/ice14923.d
  0144be1b1ccbd02aa3727042eb326ea2  gcc/testsuite/gdc.test/fail_compilation/ice15002.d
! 1373784bc7d688cf332b9a2fe5eb0c49  gcc/testsuite/gdc.test/fail_compilation/ice15092.d
  116ac487061a001659e6c5349c18d655  gcc/testsuite/gdc.test/fail_compilation/ice15127.d
! 4c15c3f93c9fa16127576c410a26125b  gcc/testsuite/gdc.test/fail_compilation/ice15172.d
  f22d97a4996c80fd574970a5f939405d  gcc/testsuite/gdc.test/fail_compilation/ice15317.d
! 033d5e7c51fc824dd298edfb6d5fdb74  gcc/testsuite/gdc.test/fail_compilation/ice15332.d
! 22020a4a026c7933e054de2defcae4a8  gcc/testsuite/gdc.test/fail_compilation/ice15441.d
! c4808cceecd3aededb2f1143169919bd  gcc/testsuite/gdc.test/fail_compilation/ice15688.d
! 5df2b52f25277c7c025698c08ecaf1ae  gcc/testsuite/gdc.test/fail_compilation/ice15788.d
! 8a4b1bf6f02264c4208dec120d4ba224  gcc/testsuite/gdc.test/fail_compilation/ice15816.d
  2c7865066426a00dd6119765793c2286  gcc/testsuite/gdc.test/fail_compilation/ice15855.d
! befd3225b64946485fb6114607b43b58  gcc/testsuite/gdc.test/fail_compilation/ice15922.d
! ae44bcfb44569651c4d9376e3191212a  gcc/testsuite/gdc.test/fail_compilation/ice16035.d
! 0b4d444d80046b62ecd47f19968067a7  gcc/testsuite/gdc.test/fail_compilation/ice16657.d
! 9c348b961889ec283b968746616b4dd5  gcc/testsuite/gdc.test/fail_compilation/ice17074.d
  7324203f77755460dfd2b206a19d914d  gcc/testsuite/gdc.test/fail_compilation/ice17690.d
! 977e677c4e44b487c0fe7eb915e8215c  gcc/testsuite/gdc.test/fail_compilation/ice17831.d
! 5d56a3267e00a356cbafc5bcff1a83a2  gcc/testsuite/gdc.test/fail_compilation/ice18469.d
! 40f4b17523f8a8afb0858ffba3c80562  gcc/testsuite/gdc.test/fail_compilation/ice18753.d
! 175f446c561c5cfe4761f731f185264d  gcc/testsuite/gdc.test/fail_compilation/ice18803a.d
! 6a97098a32d555be1373c768d9a16d4d  gcc/testsuite/gdc.test/fail_compilation/ice18803b.d
! 0439c9cba9c8284f81b78e582643a1af  gcc/testsuite/gdc.test/fail_compilation/ice19295.d
! 5afb8639ebe47d4698369becc9aa681f  gcc/testsuite/gdc.test/fail_compilation/ice19755.d
! 4a1f725170cfdbaecfe3396d4266c7f7  gcc/testsuite/gdc.test/fail_compilation/ice19762.d
! 71aea9f843fbfe456c9a87e3a042ac0d  gcc/testsuite/gdc.test/fail_compilation/ice19887.d
! 6bf925a0b5b868454c89afbac8b00888  gcc/testsuite/gdc.test/fail_compilation/ice19950.d
! aa186ea08e0631c13ea1c253fea2a6a2  gcc/testsuite/gdc.test/fail_compilation/ice20042.d
! f760b9b1fddbd5ec8c882280251d89e1  gcc/testsuite/gdc.test/fail_compilation/ice20056.d
! 2ddde1a9a9bf8255b405b821c0568581  gcc/testsuite/gdc.test/fail_compilation/ice20057.d
! b976eedb61aadb4465ca084f17ddd25d  gcc/testsuite/gdc.test/fail_compilation/ice20264.d
! ebda3059f679d68e2bdd1d9fe3e11b64  gcc/testsuite/gdc.test/fail_compilation/ice20545.d
! dae5b57cc66ee7160f7c95b7b14c4e59  gcc/testsuite/gdc.test/fail_compilation/ice20709.d
  1ee2df9e731e72df6ec1774356fb21e5  gcc/testsuite/gdc.test/fail_compilation/ice21060.d
! 40cfc62ac063a12983ebf0b7179dc795  gcc/testsuite/gdc.test/fail_compilation/ice21095.d
! fdf3168c18cba16f456283570dabf8b2  gcc/testsuite/gdc.test/fail_compilation/ice22377.d
! 53849f1b76fa5b798b4ea5844160c304  gcc/testsuite/gdc.test/fail_compilation/ice22516.d
! 6d3a822b9364a2575ac0b8aaf63c1e2a  gcc/testsuite/gdc.test/fail_compilation/ice2843.d
! e18518a6aec5268830a299e55c6f25cf  gcc/testsuite/gdc.test/fail_compilation/ice4094.d
! b39d129bd0b8de50d086197b89a483fb  gcc/testsuite/gdc.test/fail_compilation/ice4983.d
  ebfa02fece677d43edcbb1d96bb283d6  gcc/testsuite/gdc.test/fail_compilation/ice5996.d
! b34095b40adae61dc1eb07b5bac9c444  gcc/testsuite/gdc.test/fail_compilation/ice6538.d
! ab285c0cd0c9fdaf0e2984831395c561  gcc/testsuite/gdc.test/fail_compilation/ice7645.d
! 8a8461284a6748b9cb2d36caae3e077b  gcc/testsuite/gdc.test/fail_compilation/ice7782.d
! e8ffb50f7fb876dd3a110f162a2fadb2  gcc/testsuite/gdc.test/fail_compilation/ice8100.d
! b40addef2fa6f0dc9179e06cc7dfc4c6  gcc/testsuite/gdc.test/fail_compilation/ice8309.d
  f1d18a3fe42974d8d7e5230df6193002  gcc/testsuite/gdc.test/fail_compilation/ice8499.d
  853540ed15c640e1f07a123857bdd5e3  gcc/testsuite/gdc.test/fail_compilation/ice8604.d
  a72d7818b33e56375506b6e64ac406c5  gcc/testsuite/gdc.test/fail_compilation/ice8630.d
! 1599cbd4b0e9add398e1d1051109e7c7  gcc/testsuite/gdc.test/fail_compilation/ice8711.d
  f5ec039f130aa503ee1ebd140f2ceb58  gcc/testsuite/gdc.test/fail_compilation/ice8742.d
! dc55dbf68e67185df002352d70125d34  gcc/testsuite/gdc.test/fail_compilation/ice8795.d
  8f5543f8be1f11d20a7f6886ffbfbf3e  gcc/testsuite/gdc.test/fail_compilation/ice8795b.d
  d4e8397015cc5d6f1e004c0dbd64cd2a  gcc/testsuite/gdc.test/fail_compilation/ice9013.d
! 368d4d3cd6361ad59bac984b3217ed27  gcc/testsuite/gdc.test/fail_compilation/ice9254a.d
! 89873c468c45408126f5cadc9059992d  gcc/testsuite/gdc.test/fail_compilation/ice9254b.d
! a68e325bd72d815d7138dbcd033fa4d0  gcc/testsuite/gdc.test/fail_compilation/ice9254c.d
! c0168cedd088e2e9a5a07f337acc63c3  gcc/testsuite/gdc.test/fail_compilation/ice9273a.d
! c0748d027ca80dcd3c1826ef09692f1e  gcc/testsuite/gdc.test/fail_compilation/ice9273b.d
! 4ab4207341136f2c66f91d255c047732  gcc/testsuite/gdc.test/fail_compilation/ice9284.d
  5c1b7a696de91f0fac6d8de5c8e96d1d  gcc/testsuite/gdc.test/fail_compilation/ice9291.d
! 8ee1a73207f2a559dc4eb4319ced5fd5  gcc/testsuite/gdc.test/fail_compilation/ice9338.d
  af5221c169864139df80561cf6490347  gcc/testsuite/gdc.test/fail_compilation/ice9406.d
! 46727c56ccf5d04c6731f5e10a41cc96  gcc/testsuite/gdc.test/fail_compilation/ice9439.d
! cdacde04da8f4e538ea5d87654ac8751  gcc/testsuite/gdc.test/fail_compilation/ice9494.d
! 2ae84a75391238221d95e8b1126b6e4e  gcc/testsuite/gdc.test/fail_compilation/ice9540.d
! e0d2808adb4bd406595bf16363d64560  gcc/testsuite/gdc.test/fail_compilation/ice9545.d
! a80826c048e9b023fb1e48c619781ee4  gcc/testsuite/gdc.test/fail_compilation/ice9759.d
! 73cecf4fc16cfdf696ea6d651d1b445b  gcc/testsuite/gdc.test/fail_compilation/ice9806.d
! f76870122b85e99de4bdd8e6c2b3965e  gcc/testsuite/gdc.test/fail_compilation/ice9865.d
! 6231a0ba3e664b8c25737f56d6da08ba  gcc/testsuite/gdc.test/fail_compilation/impconv.d
! 0f09c45f294269d31c1afbd83827baf9  gcc/testsuite/gdc.test/fail_compilation/imphint.d
  e7ee3e2640892a91d6abcd48d4ca140c  gcc/testsuite/gdc.test/fail_compilation/imports/a10169.d
! dabe84faadcc8b0bc8cedbae6177c041  gcc/testsuite/gdc.test/fail_compilation/imports/a10528.d
! 632e337615ab21c36a0b5acd89d0645d  gcc/testsuite/gdc.test/fail_compilation/imports/a11850.d
  85ac2a20db8e390122fdb91f247523c5  gcc/testsuite/gdc.test/fail_compilation/imports/a11919.d
  4cc04e8c6c4567018ac587e3c5bab8ba  gcc/testsuite/gdc.test/fail_compilation/imports/a13131checkpoint.d
  7c15265812fffa9b1d8d302b128c2d72  gcc/testsuite/gdc.test/fail_compilation/imports/a13131elec.d
*************** b2182bea2cc23610badf93fbf15ac3b8  gcc/te
*** 72092,72120 ****
  a343b360cb76c69d2d9dee39b48e16cd  gcc/testsuite/gdc.test/fail_compilation/imports/a13311.d
  9f106fe75dc9c998fb71f2506032af70  gcc/testsuite/gdc.test/fail_compilation/imports/a13465.d
  52e48afcf5620cf96e4beb830b4bb760  gcc/testsuite/gdc.test/fail_compilation/imports/a14116.d
! 1a3d9fcdbf455fd77e99e879e4e8e1a7  gcc/testsuite/gdc.test/fail_compilation/imports/a14235.d
! 5943659eba7af0915d9da7fd0969ca70  gcc/testsuite/gdc.test/fail_compilation/imports/a14407.d
  80b4cb87fe477edd1131172d1ed1f65c  gcc/testsuite/gdc.test/fail_compilation/imports/a14424.d
  18a9da16f26c6ac143dd690f3161940d  gcc/testsuite/gdc.test/fail_compilation/imports/a15667.d
  6de5c6a3efa11be90b8f14e1560f8e21  gcc/testsuite/gdc.test/fail_compilation/imports/a15816.d
  9471ab739aac743e2e2c8682caacfd9e  gcc/testsuite/gdc.test/fail_compilation/imports/a17630.d
  11ee73c0f72cbdda8b00101f8a07e256  gcc/testsuite/gdc.test/fail_compilation/imports/a18219.d
  8a0978890d46c1b648d7393ba41085c7  gcc/testsuite/gdc.test/fail_compilation/imports/a313.d
  3f619613651ef4aacb1cdbeab1e76c72  gcc/testsuite/gdc.test/fail_compilation/imports/a314.d
  8993c410fd288f8d93b237c8c9dd0de5  gcc/testsuite/gdc.test/fail_compilation/imports/b13465.d
  ddf0438cbac445061f8c61dde628a8aa  gcc/testsuite/gdc.test/fail_compilation/imports/b17630.d
  1772d9a41a5f34b75ff31f227d09f7a1  gcc/testsuite/gdc.test/fail_compilation/imports/b18219.d
  98bd5409b958fb5f3045875600c9dd05  gcc/testsuite/gdc.test/fail_compilation/imports/b313.d
  47be20d7683e2989b9f383cc0acf5dd7  gcc/testsuite/gdc.test/fail_compilation/imports/b314.d
  6c22a3b6151618b3c6ebf744e1ea10bb  gcc/testsuite/gdc.test/fail_compilation/imports/bar11136.d
  9948a034269cc602a8027767cdfd2ad7  gcc/testsuite/gdc.test/fail_compilation/imports/c314.d
  10489bfd2a41b2782729c602d9440361  gcc/testsuite/gdc.test/fail_compilation/imports/diag10089a.d
  64565529139263f476cf4e8222439f86  gcc/testsuite/gdc.test/fail_compilation/imports/diag10089b.d
  6e471f0a9309d2f38f05f1958207fd0c  gcc/testsuite/gdc.test/fail_compilation/imports/diag10141a.d
! d0a0515b0c18fad085f5c88f61408a31  gcc/testsuite/gdc.test/fail_compilation/imports/diag10141b.d
  5de8e96f60092e541c11e06991fb2b2d  gcc/testsuite/gdc.test/fail_compilation/imports/diag9210b.d
  283d6ea31faa6dfbc32f2f945637b212  gcc/testsuite/gdc.test/fail_compilation/imports/diag9210c.d
! bae2aeef80179f36ad348543c7d967c2  gcc/testsuite/gdc.test/fail_compilation/imports/diag9210stdcomplex.d
  182537e96b2acfa3fd33a3b322512a84  gcc/testsuite/gdc.test/fail_compilation/imports/diag9210stdtraits.d
  978a770f80aff4f829cd1ec3448508e5  gcc/testsuite/gdc.test/fail_compilation/imports/dip22a.d
  9b2b7e51eb513913df386b7c508ffdcc  gcc/testsuite/gdc.test/fail_compilation/imports/dip22b.d
--- 76709,76747 ----
  a343b360cb76c69d2d9dee39b48e16cd  gcc/testsuite/gdc.test/fail_compilation/imports/a13311.d
  9f106fe75dc9c998fb71f2506032af70  gcc/testsuite/gdc.test/fail_compilation/imports/a13465.d
  52e48afcf5620cf96e4beb830b4bb760  gcc/testsuite/gdc.test/fail_compilation/imports/a14116.d
! c2464fc897607fe1b3770db1c0a7ebb9  gcc/testsuite/gdc.test/fail_compilation/imports/a14235.d
  80b4cb87fe477edd1131172d1ed1f65c  gcc/testsuite/gdc.test/fail_compilation/imports/a14424.d
  18a9da16f26c6ac143dd690f3161940d  gcc/testsuite/gdc.test/fail_compilation/imports/a15667.d
  6de5c6a3efa11be90b8f14e1560f8e21  gcc/testsuite/gdc.test/fail_compilation/imports/a15816.d
+ 15b0f3d7100b5f9ade0a581eb62a7865  gcc/testsuite/gdc.test/fail_compilation/imports/a17625.d
  9471ab739aac743e2e2c8682caacfd9e  gcc/testsuite/gdc.test/fail_compilation/imports/a17630.d
  11ee73c0f72cbdda8b00101f8a07e256  gcc/testsuite/gdc.test/fail_compilation/imports/a18219.d
+ 580ca56975ea77bd8450ff22de4f3a65  gcc/testsuite/gdc.test/fail_compilation/imports/a18243.d
  8a0978890d46c1b648d7393ba41085c7  gcc/testsuite/gdc.test/fail_compilation/imports/a313.d
  3f619613651ef4aacb1cdbeab1e76c72  gcc/testsuite/gdc.test/fail_compilation/imports/a314.d
  8993c410fd288f8d93b237c8c9dd0de5  gcc/testsuite/gdc.test/fail_compilation/imports/b13465.d
+ 58142e34cf64d152f82c4912db5ff472  gcc/testsuite/gdc.test/fail_compilation/imports/b17625.d
  ddf0438cbac445061f8c61dde628a8aa  gcc/testsuite/gdc.test/fail_compilation/imports/b17630.d
+ 5665fc6d3a4cb5f022a145e207f81b41  gcc/testsuite/gdc.test/fail_compilation/imports/b17918a.d
  1772d9a41a5f34b75ff31f227d09f7a1  gcc/testsuite/gdc.test/fail_compilation/imports/b18219.d
+ bb6c790d65f20feaf54847ccca3df1d0  gcc/testsuite/gdc.test/fail_compilation/imports/b19762.d
  98bd5409b958fb5f3045875600c9dd05  gcc/testsuite/gdc.test/fail_compilation/imports/b313.d
  47be20d7683e2989b9f383cc0acf5dd7  gcc/testsuite/gdc.test/fail_compilation/imports/b314.d
  6c22a3b6151618b3c6ebf744e1ea10bb  gcc/testsuite/gdc.test/fail_compilation/imports/bar11136.d
+ ba9ca0fdf04c459d6325925d6161c7da  gcc/testsuite/gdc.test/fail_compilation/imports/c19762.d
  9948a034269cc602a8027767cdfd2ad7  gcc/testsuite/gdc.test/fail_compilation/imports/c314.d
+ e7f372a526a084ab251d22308787ab41  gcc/testsuite/gdc.test/fail_compilation/imports/constraints.d
+ 2d757e336b0f4d0bf44ef8a1866c3a31  gcc/testsuite/gdc.test/fail_compilation/imports/deprecatedImporta.d
+ e7b185577601b97efcd99065d38a66dc  gcc/testsuite/gdc.test/fail_compilation/imports/deprecatedImportb.d
  10489bfd2a41b2782729c602d9440361  gcc/testsuite/gdc.test/fail_compilation/imports/diag10089a.d
  64565529139263f476cf4e8222439f86  gcc/testsuite/gdc.test/fail_compilation/imports/diag10089b.d
  6e471f0a9309d2f38f05f1958207fd0c  gcc/testsuite/gdc.test/fail_compilation/imports/diag10141a.d
! fabcaf8a0a2c048f467f0b4939a188bb  gcc/testsuite/gdc.test/fail_compilation/imports/diag10141b.d
! d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/fail_compilation/imports/diag20518a.d
! d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/fail_compilation/imports/diag20518a/b.d
  5de8e96f60092e541c11e06991fb2b2d  gcc/testsuite/gdc.test/fail_compilation/imports/diag9210b.d
  283d6ea31faa6dfbc32f2f945637b212  gcc/testsuite/gdc.test/fail_compilation/imports/diag9210c.d
! 06b5c4db4d1e84201b959d5346956d61  gcc/testsuite/gdc.test/fail_compilation/imports/diag9210stdcomplex.d
  182537e96b2acfa3fd33a3b322512a84  gcc/testsuite/gdc.test/fail_compilation/imports/diag9210stdtraits.d
  978a770f80aff4f829cd1ec3448508e5  gcc/testsuite/gdc.test/fail_compilation/imports/dip22a.d
  9b2b7e51eb513913df386b7c508ffdcc  gcc/testsuite/gdc.test/fail_compilation/imports/dip22b.d
*************** c52b969635481976cc4c5d1de35c6fde  gcc/te
*** 72129,72135 ****
--- 76756,76766 ----
  6903f2283943cff6836803587d984ee2  gcc/testsuite/gdc.test/fail_compilation/imports/fail19609b.d
  4be1961ee12686bf14b786165de651d1  gcc/testsuite/gdc.test/fail_compilation/imports/fail19609c.d
  7ba75f1a51246b5e5d5da95075a0315e  gcc/testsuite/gdc.test/fail_compilation/imports/fail19609d.d
+ 63c31dbe8359c1e9e47099f7a6ec1d87  gcc/testsuite/gdc.test/fail_compilation/imports/fail20164.d
+ 8f5f50f60312667231330b9a6f1b9a44  gcc/testsuite/gdc.test/fail_compilation/imports/fail20637b.d
+ ec9b9fe7bca7c9541f241827fd8ad89f  gcc/testsuite/gdc.test/fail_compilation/imports/fail20638b.d
  a9e5573273539822af9f48e0ccfb14f3  gcc/testsuite/gdc.test/fail_compilation/imports/fail21001b.d
+ 419fedfe2335a76585a8af3dd9d428c5  gcc/testsuite/gdc.test/fail_compilation/imports/fail21275a.d
  499b2bf2eca48658e6fbe3445325b9e1  gcc/testsuite/gdc.test/fail_compilation/imports/fail2962a.d
  1dcba1afc06e2f95acb4da948dfc6f45  gcc/testsuite/gdc.test/fail_compilation/imports/fail320a.d
  aabcb329f3cf87535468cc2ead408136  gcc/testsuite/gdc.test/fail_compilation/imports/fail320b.d
*************** a5496d52f55546980cc281b7ea638859  gcc/te
*** 72140,72145 ****
--- 76771,76777 ----
  2b5b48518b494849e46abbdb4943f387  gcc/testsuite/gdc.test/fail_compilation/imports/fail5385.d
  32705ded4b1d98cefe1d05ba75ded723  gcc/testsuite/gdc.test/fail_compilation/imports/foo10727a.d
  a39b86e5f0b2e3c3a700dd9583af8dea  gcc/testsuite/gdc.test/fail_compilation/imports/foo10727b.d
+ 994b7aa58bf38db54b3985f62f422db7  gcc/testsuite/gdc.test/fail_compilation/imports/i20057.d
  5791316416122dff3127bc6d42a56837  gcc/testsuite/gdc.test/fail_compilation/imports/ice10598a.d
  373a817601afc9fc8c384d315851ad57  gcc/testsuite/gdc.test/fail_compilation/imports/ice10598b.d
  fb906c020ae3ec225daeaa722c82d807  gcc/testsuite/gdc.test/fail_compilation/imports/ice10600a.d
*************** c655742868f7c302fb02d9f969f29129  gcc/te
*** 72156,72167 ****
--- 76788,76808 ----
  26ed85484fc1c3d3f8e1328d9698f365  gcc/testsuite/gdc.test/fail_compilation/imports/imp1.d
  2a466412f1524eb0743d62122e94a64e  gcc/testsuite/gdc.test/fail_compilation/imports/imp15896.d
  d0e4233fc485fb20385bfdc07f1ec961  gcc/testsuite/gdc.test/fail_compilation/imports/imp15925.d
+ ac7b1cc16acca22cc2139c936ecd68b2  gcc/testsuite/gdc.test/fail_compilation/imports/imp17602.d
+ 2481ba7d85a43004094571ea9b36a7ea  gcc/testsuite/gdc.test/fail_compilation/imports/imp18979.d
+ 0a545f6bc6b90f0d5f3fc0ab10e15ee3  gcc/testsuite/gdc.test/fail_compilation/imports/imp19661.d
  bcb928821f462337afe2f7bcc3727525  gcc/testsuite/gdc.test/fail_compilation/imports/imp2.d
+ 388c5fcdfd02d4ee2adcd07d5b8558fe  gcc/testsuite/gdc.test/fail_compilation/imports/imp20709.d
  4759daa02b793f751ab2133709ce40bc  gcc/testsuite/gdc.test/fail_compilation/imports/imp21353.d
+ c1d1d74046f5a2e29b3546ad753f2ff9  gcc/testsuite/gdc.test/fail_compilation/imports/imp21832.d
+ 026d5907622ea30bbf7ac6d24005ea60  gcc/testsuite/gdc.test/fail_compilation/imports/imp22329.d
+ 18f00970401f9324b0b917e5986e2c2a  gcc/testsuite/gdc.test/fail_compilation/imports/imp22749.c
+ e088c9d3f927d47f3540962f20d13d70  gcc/testsuite/gdc.test/fail_compilation/imports/import21508.d
  6f7cfcaba1d8e75474105c4a6e6ef15f  gcc/testsuite/gdc.test/fail_compilation/imports/issue21295ast_node.d
  6c539ca4211f778c4ce881979c32423e  gcc/testsuite/gdc.test/fail_compilation/imports/issue21295astcodegen.d
  a8f0eca5771864b89f31585409956b5a  gcc/testsuite/gdc.test/fail_compilation/imports/issue21295dtemplate.d
  fc301f5f44c3206c0edd89703fd42567  gcc/testsuite/gdc.test/fail_compilation/imports/issue21295visitor.d
+ 0fce607bcf838415407dc51f8091ca16  gcc/testsuite/gdc.test/fail_compilation/imports/issue21685.d
  7050a922a432b70a40c214ea289bef81  gcc/testsuite/gdc.test/fail_compilation/imports/pkg313/package.d
  e6eed1d80ee42502c1ad48f433da3aab  gcc/testsuite/gdc.test/fail_compilation/imports/range15788.d
  26ce3a7e280029ded8d832234c97a02f  gcc/testsuite/gdc.test/fail_compilation/imports/spell9644a.d
*************** d1bf2852abe982e73b38530127e81352  gcc/te
*** 72198,72443 ****
  2495a7ec11f5a9676dc5f43d8be5b556  gcc/testsuite/gdc.test/fail_compilation/imports/test15117a.d
  3cbd76eb5690663ef2b8bd33894716fe  gcc/testsuite/gdc.test/fail_compilation/imports/test15785.d
  96d5b988300a2abf193f374615cbc419  gcc/testsuite/gdc.test/fail_compilation/imports/test15897.d
! 4d0bb7cfd689419a9bf50b4918b40a66  gcc/testsuite/gdc.test/fail_compilation/imports/test21164a.d
! bfa7fe932ed054b951c06fb50cf40453  gcc/testsuite/gdc.test/fail_compilation/imports/test21164b.d
! 53b49e7ff7a1e5543791b5e36e02c7bf  gcc/testsuite/gdc.test/fail_compilation/imports/test21164c.d
! 80768945ceec466a39fe783102919c1c  gcc/testsuite/gdc.test/fail_compilation/imports/test21164d.d
  00ea49154799c340063fb6c244a3f6b4  gcc/testsuite/gdc.test/fail_compilation/imports/test21651b.d
  f23cb0fd3d8eec3ebf2e0c1922bc5dca  gcc/testsuite/gdc.test/fail_compilation/imports/test5412a.d
  e204ad88ee968daaed8e8d39426a553d  gcc/testsuite/gdc.test/fail_compilation/imports/test5412b.d
! 7f9aae340a31e290af56f5a479ab4e02  gcc/testsuite/gdc.test/fail_compilation/imports/test64a.d
  6fa3d032ace51698c299d55e536e12df  gcc/testsuite/gdc.test/fail_compilation/isreturnonstack.d
  45280fe05b89003c24c2e4f21c6a83f7  gcc/testsuite/gdc.test/fail_compilation/issue16020.d
! f5d633922de64e7bec5caf92a57c0fae  gcc/testsuite/gdc.test/fail_compilation/issue21295.d
! edf62c7ba775c588a6e4d3da98d85327  gcc/testsuite/gdc.test/fail_compilation/issue3827.d
! 5deb7a7bd7c588630607ba076086ed0e  gcc/testsuite/gdc.test/fail_compilation/lexer1.d
! d3338d0c1072a719a8e9a4fc7487fde3  gcc/testsuite/gdc.test/fail_compilation/lexer2.d
! 1a92faf17ae313397284eaffa37e732c  gcc/testsuite/gdc.test/fail_compilation/lexer3.d
! 70b4ee6f3cc8fd139720eb52c486c793  gcc/testsuite/gdc.test/fail_compilation/lexer4.d
! 2cf5314ff8b2feca448c4f84a9eb21ed  gcc/testsuite/gdc.test/fail_compilation/lookup.d
! fa4bd5dfadd5df34f8e846285f1906f9  gcc/testsuite/gdc.test/fail_compilation/mangle1.d
! a9d59527dab1377274e2f6d594cd5a19  gcc/testsuite/gdc.test/fail_compilation/mangle2.d
  9a9e855b3c4e43d0edad873da941ffd5  gcc/testsuite/gdc.test/fail_compilation/mixintype2.d
  fe4d6368a23906f4ace80748ad73d9aa  gcc/testsuite/gdc.test/fail_compilation/moduleundefuda.d
! de21ddc704291e3d63102a9829aa2285  gcc/testsuite/gdc.test/fail_compilation/nogc1.d
! 381a6f934aa84eb491e09daf2df21a89  gcc/testsuite/gdc.test/fail_compilation/nogc2.d
! 7b8817c0a75a589136f1db86e69de06f  gcc/testsuite/gdc.test/fail_compilation/nogc3.d
  ac62ca9815f00728734800e1420ea208  gcc/testsuite/gdc.test/fail_compilation/parse12924.d
! f8670d784084e94517b09d89012ac467  gcc/testsuite/gdc.test/fail_compilation/parse12967a.d
! 5e662ed2566a3252b6d3723b0207254a  gcc/testsuite/gdc.test/fail_compilation/parse12967b.d
  933423563d0328de33f8115d9eaaf3fb  gcc/testsuite/gdc.test/fail_compilation/parse13361.d
  50aeae3453219bbff0252ad5b2d61c2d  gcc/testsuite/gdc.test/fail_compilation/parse14285.d
  7344b3e3e6a615822b07b1de18d81899  gcc/testsuite/gdc.test/fail_compilation/parse14745.d
! 2d0f1d0d4ab83b6b818441cb32ba29ba  gcc/testsuite/gdc.test/fail_compilation/parseStc.d
! 13389033d7bf50664649f58972892bd9  gcc/testsuite/gdc.test/fail_compilation/parseStc2.d
! 769d6a28ce24863f4401b764aeec084c  gcc/testsuite/gdc.test/fail_compilation/parseStc3.d
! 91e2dfc4c97fc25903feaf8634fdc4c7  gcc/testsuite/gdc.test/fail_compilation/parseStc4.d
! 430ca64960b94be7ddb417ccdf918312  gcc/testsuite/gdc.test/fail_compilation/parseStc5.d
! 638fe6040d1cbdf9b27ca7993888eb77  gcc/testsuite/gdc.test/fail_compilation/pragmainline.d
! 0b960144a9c3e9ec6f8f0f4fbcbda2bd  gcc/testsuite/gdc.test/fail_compilation/pragmas.d
! 03f7ad6013a2a680a9107c74f7a31e00  gcc/testsuite/gdc.test/fail_compilation/protattr1.d
! c4dd836c6539f83cbaa31c4f9db328ea  gcc/testsuite/gdc.test/fail_compilation/protattr2.d
! d87943644b4078ab306685c6da2a88c8  gcc/testsuite/gdc.test/fail_compilation/protattr3.d
  f94f5f9027598b10a0c7aa36cd12574d  gcc/testsuite/gdc.test/fail_compilation/protection/subpkg/test1.d
  0bf06d541fe7a39c966d076eb92cda03  gcc/testsuite/gdc.test/fail_compilation/protection/subpkg/test2.d
  9d01f4975a479fc715251f6173ce5c4c  gcc/testsuite/gdc.test/fail_compilation/protection/subpkg/test3.d
! e879a2b5c4eeef918675934677b61f94  gcc/testsuite/gdc.test/fail_compilation/reg6769.d
! 192ccc5654596026c79bccf4a7f06f58  gcc/testsuite/gdc.test/fail_compilation/reserved_version.d
! 246d1b3355fe6db16a62ad3470f637dc  gcc/testsuite/gdc.test/fail_compilation/reserved_version_switch.d
! aac183450c9c9d721b58877055faeff1  gcc/testsuite/gdc.test/fail_compilation/retref2.d
! 4518bfd4ce1302e38b6aa3d90e34d37b  gcc/testsuite/gdc.test/fail_compilation/retscope.d
! cad914261e51ab9d6660d8125f688407  gcc/testsuite/gdc.test/fail_compilation/retscope2.d
! 1c1df240526cbb052daf8f76ba31a55d  gcc/testsuite/gdc.test/fail_compilation/skip.d
! c88d54176ad058fb20ed4d515b542af5  gcc/testsuite/gdc.test/fail_compilation/spell9644.d
! c2ec88bc3a6caabd86a6136d3c0fcc04  gcc/testsuite/gdc.test/fail_compilation/staticarrayoverflow.d
  1fcc8aaa8f4d74a4f1abe57e47cfd353  gcc/testsuite/gdc.test/fail_compilation/staticforeach1.d
  69da8fec6e17cf06c0720278a97abb96  gcc/testsuite/gdc.test/fail_compilation/staticforeach2.d
  bb6598a0d52b49923b14222dee510692  gcc/testsuite/gdc.test/fail_compilation/staticforeach3.d
! 485f4bb356842e694e7ad2e7e77d452d  gcc/testsuite/gdc.test/fail_compilation/switches.d
  82097814cc50105a55a7ef8ecc8b9a03  gcc/testsuite/gdc.test/fail_compilation/test1.d
! 80fba42f4e0a27cc8ac5f1a7b3773f09  gcc/testsuite/gdc.test/fail_compilation/test11047.d
! f47eae3a33f2476b57fb4417b495c91b  gcc/testsuite/gdc.test/fail_compilation/test11176.d
! 51118abe845ab8f61660aeae6369524d  gcc/testsuite/gdc.test/fail_compilation/test12822.d
! c83408c9a110a1431ad463a3242eb0d5  gcc/testsuite/gdc.test/fail_compilation/test13152.d
! 418449eff45afb5c14a3bea658ed3520  gcc/testsuite/gdc.test/fail_compilation/test13536.d
! 78dfd2bb6eaeadf3027d2d6ed063e88d  gcc/testsuite/gdc.test/fail_compilation/test13537.d
! edd3be9a50cba03d40ee6c3f290cd796  gcc/testsuite/gdc.test/fail_compilation/test13786.d
! 5b43181f9e7954ae6dbd5f4204cab35c  gcc/testsuite/gdc.test/fail_compilation/test13867.d
! eae9659dbef67cc130d7967cb02a0f99  gcc/testsuite/gdc.test/fail_compilation/test14238.d
! 277fff1c27308d4df74c65c51129a141  gcc/testsuite/gdc.test/fail_compilation/test143.d
! 8147af0b95603b27dd40e50c99ea3176  gcc/testsuite/gdc.test/fail_compilation/test14496.d
! edb0fcbaff1144d8a8c2a8129d3acedb  gcc/testsuite/gdc.test/fail_compilation/test14538.d
! 6390685d0efdb802a5a03c5cafae13f3  gcc/testsuite/gdc.test/fail_compilation/test15117.d
! fa500404a52abde4e94b24412d14b14f  gcc/testsuite/gdc.test/fail_compilation/test15191.d
! 3e20a6e92877a0447b91def11656a634  gcc/testsuite/gdc.test/fail_compilation/test15306.d
! 1c74e5c62ad67d281fc3ea7f3e33ec02  gcc/testsuite/gdc.test/fail_compilation/test15399.d
! b297b2fd80da161409b483a0b04e986a  gcc/testsuite/gdc.test/fail_compilation/test15544.d
! 072bd1aee2ff47ce8a4a1b4cdeada96e  gcc/testsuite/gdc.test/fail_compilation/test15672.d
! f2585071cb3ac901f2a93e39c8837415  gcc/testsuite/gdc.test/fail_compilation/test15703.d
! fe65c3da98d1de7f0cf0f36d03118ee3  gcc/testsuite/gdc.test/fail_compilation/test15704.d
! e96e31833233681174522719083f225f  gcc/testsuite/gdc.test/fail_compilation/test15785.d
! 27e679be97c82c1add469728e30b5c62  gcc/testsuite/gdc.test/fail_compilation/test15785b.d
! c55090b22f08e93fc893feebe954f1e1  gcc/testsuite/gdc.test/fail_compilation/test15897.d
! 3728aceda46f7f32d4f0fed6d5e506d1  gcc/testsuite/gdc.test/fail_compilation/test15925.d
! 9c598ebbd0a97d7f14e7614f5a263dd3  gcc/testsuite/gdc.test/fail_compilation/test15989.d
! c78f97e55ff573d0611f54b4597a33c8  gcc/testsuite/gdc.test/fail_compilation/test16095.d
! 565d491026d0ec70f76bc2591121752b  gcc/testsuite/gdc.test/fail_compilation/test16116.d
! 30c840845a5e49810b36925ead2d1a5e  gcc/testsuite/gdc.test/fail_compilation/test16188.d
! a5f1a7b08026edaba53cf01160cae151  gcc/testsuite/gdc.test/fail_compilation/test16193.d
! 197802ad3ed68d01b6762af55cb9bdd0  gcc/testsuite/gdc.test/fail_compilation/test16195.d
! 0adcabc3b60bf6a97183052c7c05f209  gcc/testsuite/gdc.test/fail_compilation/test16228.d
! 187fb8c20327d6df2a9ca712fdf02619  gcc/testsuite/gdc.test/fail_compilation/test16365.d
! fa92589f371209970b5e1cd19981a8e5  gcc/testsuite/gdc.test/fail_compilation/test16381.d
! fba84fa4be8dd254f0cacc08aa5999f3  gcc/testsuite/gdc.test/fail_compilation/test16523.d
! b04d3086bfc8fd3a8aa2af8f6ba255b5  gcc/testsuite/gdc.test/fail_compilation/test16589.d
  8a1e1c8ebc97ba6532defbe55f9c4728  gcc/testsuite/gdc.test/fail_compilation/test17096.d
! fa5c084003ef4264fe2dcee3b1d31d9b  gcc/testsuite/gdc.test/fail_compilation/test17307.d
  3b214d273aa841f50cc8a1e86597be18  gcc/testsuite/gdc.test/fail_compilation/test17380.d
! acb6680b2a94bc2215e473ce3156efd2  gcc/testsuite/gdc.test/fail_compilation/test17422.d
! 10bf1a2720198f8a690fa4c52f95dc64  gcc/testsuite/gdc.test/fail_compilation/test17425.d
! 6b077e169d42228c2760bfca8d586d48  gcc/testsuite/gdc.test/fail_compilation/test17450.d
! 44bec9d5fdedac7d11747b1cd3d119e1  gcc/testsuite/gdc.test/fail_compilation/test17451.d
  47fc9c265bc4fd596a224fb51e63e09c  gcc/testsuite/gdc.test/fail_compilation/test17908a.d
  f79ff08f6a4f8c6756261d3e8abd2c0b  gcc/testsuite/gdc.test/fail_compilation/test17908b.d
  a7a660644aa3a898b18641bb0128e405  gcc/testsuite/gdc.test/fail_compilation/test18312.d
  67abd3b15509154f2ad168138e069892  gcc/testsuite/gdc.test/fail_compilation/test19608.d
  b63d81d149ced101cc0047fccfbfbff2  gcc/testsuite/gdc.test/fail_compilation/test20919.d
  a2dfda31aa6bb8862b349db8dd7c06f0  gcc/testsuite/gdc.test/fail_compilation/test21164.d
! 6dd671859ff08d6c5ae03d7466d149ee  gcc/testsuite/gdc.test/fail_compilation/test21353.d
  71e1aa25aaa777c4eef2e9d4c47f72c0  gcc/testsuite/gdc.test/fail_compilation/test21651.d
! 38df04b25892319b1dd1980583e5b621  gcc/testsuite/gdc.test/fail_compilation/test21927.d
! bcc6ccdea767e7f980449fdbbf3dd174  gcc/testsuite/gdc.test/fail_compilation/test21939.d
! c7379540d384d1b0a88e793609c2ec5f  gcc/testsuite/gdc.test/fail_compilation/test314.d
  465b130426028cac7c9bb32cf2f4fdee  gcc/testsuite/gdc.test/fail_compilation/test4682.d
  5e3c07e144e8f8d3dc6a9bd044054a82  gcc/testsuite/gdc.test/fail_compilation/test4682a.d
! 63f2b3461d09f82332a5cb2e30917f65  gcc/testsuite/gdc.test/fail_compilation/test4838.d
  68a376176c9ed6a78fe7a713342fe1be  gcc/testsuite/gdc.test/fail_compilation/test5412a.d
  e9808af6da103a5976d3382176178373  gcc/testsuite/gdc.test/fail_compilation/test5412b.d
  d2b87ee44dddab23a1c9886c5841ae8c  gcc/testsuite/gdc.test/fail_compilation/test5412c.d
  59e02e76cb49a9c1b9e122d71718c235  gcc/testsuite/gdc.test/fail_compilation/test5412c2.di
! fb9ae4384bc2107903cd2a2654f90763  gcc/testsuite/gdc.test/fail_compilation/test64.d
  41061beff9b304e814bb0fc6540a8cf3  gcc/testsuite/gdc.test/fail_compilation/test6883.d
  e5c1326640ea3425f6b79d83f241800c  gcc/testsuite/gdc.test/fail_compilation/test8509.d
! 41d2f3d125c3a98b2eb293dda27712e4  gcc/testsuite/gdc.test/fail_compilation/test8556.d
  ec4dab98798d55fe2c57ec7dd6dca969  gcc/testsuite/gdc.test/fail_compilation/test8751.d
! 64b7c36a77588495efb98abd3ff18309  gcc/testsuite/gdc.test/fail_compilation/test9150.d
! 26410607b22952aadbad4189433cd7ec  gcc/testsuite/gdc.test/fail_compilation/test9176.d
! 3e82cd1f5934af7ffd5f01dbd216d4d9  gcc/testsuite/gdc.test/fail_compilation/test9701.d
! 2d23ef629ce1976bf0fded17556c8aa5  gcc/testsuite/gdc.test/fail_compilation/test9701b.d
! f79b6d410e2678b3fd39b826e3d92208  gcc/testsuite/gdc.test/fail_compilation/testCols.d
! 28931a9744bb5688f5af5b9e65abd0c4  gcc/testsuite/gdc.test/fail_compilation/testInference.d
! e8414d320eb495cd2c6d89c72db35445  gcc/testsuite/gdc.test/fail_compilation/testpull1810.d
! eb741612728d2cbfb86e3a57b73f09b5  gcc/testsuite/gdc.test/fail_compilation/testscopestatic.d
! 0d80721741c60f909fe7b950a09d518c  gcc/testsuite/gdc.test/fail_compilation/trait_loc_err.d
  3cd67c281e7569394eb1c1c3ebd7f1f9  gcc/testsuite/gdc.test/fail_compilation/trait_loc_ov_err.d
! c1eb2ef6bee5a0c020b7182071aca9f2  gcc/testsuite/gdc.test/fail_compilation/traits.d
  4bc4006892d5f8f77213130f3a99de63  gcc/testsuite/gdc.test/fail_compilation/traits_alone.d
! 700ab19295edd0428550fd3166fa73eb  gcc/testsuite/gdc.test/fail_compilation/traits_child.d
! cc29f88b0b166edc828a3329d424bda3  gcc/testsuite/gdc.test/fail_compilation/typeerrors.d
  ec15e095250e64dfc7cf74020eebd50c  gcc/testsuite/gdc.test/fail_compilation/udaparams.d
  e9b76ed9d6ac70bc2a0374b247c4d24b  gcc/testsuite/gdc.test/fail_compilation/verrors0.d
  0f994645f171fee35d3e36e19e9214b2  gcc/testsuite/gdc.test/fail_compilation/verrors5.d
! 4147f35421f7022e4026a1c4d110ecba  gcc/testsuite/gdc.test/fail_compilation/warn12809.d
! e083d7d0a7066ca6838c793a6d9e7728  gcc/testsuite/gdc.test/fail_compilation/warn13679.d
! e389a36f61b61b068d8383956fcae978  gcc/testsuite/gdc.test/fail_compilation/warn7444.d
  ba48bb410e12885cc62cfe4376b90e24  gcc/testsuite/gdc.test/fail_compilation/widechars.d
! 61e5eb88a39d0fda7e862ee5435ceff9  gcc/testsuite/gdc.test/runnable/A16.d
! 12d1f47ec18be9c2ba9d73d329ddc72d  gcc/testsuite/gdc.test/runnable/Same.d
! 8f2781ba38479745c34b127e34b514f9  gcc/testsuite/gdc.test/runnable/a17.d
! c94753459d78c7629a37ddb7b9e7659e  gcc/testsuite/gdc.test/runnable/a18.d
! 728cef3c0774566effde4b4a45414d3c  gcc/testsuite/gdc.test/runnable/a19.d
! b250d089750392582527849c3add89ca  gcc/testsuite/gdc.test/runnable/a21.d
! a31d70df66c03461973f9ca8ace32c31  gcc/testsuite/gdc.test/runnable/aliasthis.d
! 3dc061aea78005c462247d997510875c  gcc/testsuite/gdc.test/runnable/arrayop.d
! dd125279c7b575bfb3880d7030cee35c  gcc/testsuite/gdc.test/runnable/auto1.d
  65c4da6831a7756860e462a8e30bc23e  gcc/testsuite/gdc.test/runnable/b16278.d
  a8689a639669b0a19dad584fd5012058  gcc/testsuite/gdc.test/runnable/b17073.d
! b348d157cee42c1bd1227bde732fc3cb  gcc/testsuite/gdc.test/runnable/b26.d
! 243e595aa6757741308dee157932bad3  gcc/testsuite/gdc.test/runnable/bench1.d
! ce25ded6de1d10df50cf50907c7eda7f  gcc/testsuite/gdc.test/runnable/bitops.d
! 5af59a5ca465301571b77493b0604cfc  gcc/testsuite/gdc.test/runnable/bug11155.d
  57c36c5c550ccf929d7ef16b40d40d52  gcc/testsuite/gdc.test/runnable/bug12928.d
  9ff4fc16d2151e151650b90656838c4b  gcc/testsuite/gdc.test/runnable/bug16146.d
  546af3fae34682e4fc189d2cda31ed4a  gcc/testsuite/gdc.test/runnable/bug5.d
! a426c8eee557191e474d462a54d9d76c  gcc/testsuite/gdc.test/runnable/bug7068.d
! 9482e4bcb4d8e4a93853188fdb25771d  gcc/testsuite/gdc.test/runnable/bug846.d
! 2e431c87ca658e81a753103ec4738d6b  gcc/testsuite/gdc.test/runnable/builtin.d
  af2f95c5ef65b51539eef86ea15fa531  gcc/testsuite/gdc.test/runnable/c22.d
! 86d2e5fb33ae6d8a4b9990c34e1d4c35  gcc/testsuite/gdc.test/runnable/cassert.d
! 522160a074fb8b5b968ebe153c2436b5  gcc/testsuite/gdc.test/runnable/casting.d
! af85e848ea130104ea5f4cb32d15d20c  gcc/testsuite/gdc.test/runnable/circular.d
! 3685129d0a895a1072addc7f7d9d175b  gcc/testsuite/gdc.test/runnable/closure.d
! cadad7e54f827a88d0e880b8479ee2ca  gcc/testsuite/gdc.test/runnable/complex.d
! b736533d783395a6f3e13cc668776e1b  gcc/testsuite/gdc.test/runnable/constfold.d
! f1780e3058b0449a828103764e732508  gcc/testsuite/gdc.test/runnable/ctorpowtests.d
! 029fb80a305a2903fba7a7802dbe58fe  gcc/testsuite/gdc.test/runnable/declaration.d
! fc82bacc0b2cb69adf96668e624b66d6  gcc/testsuite/gdc.test/runnable/delegate.d
  e16a173b033d44ac86490e5b91a9a2be  gcc/testsuite/gdc.test/runnable/e7804.d
! a13e36c647ba0bdefcee550b8b20b770  gcc/testsuite/gdc.test/runnable/eh.d
  5722a1733c880e8a632c938c12f40b9f  gcc/testsuite/gdc.test/runnable/eh2.d
! de7dc7f185ad0f129fff613cf5d368ae  gcc/testsuite/gdc.test/runnable/entity1.d
! ed994dab7819276313833838adec5503  gcc/testsuite/gdc.test/runnable/evalorder.d
  9ec0fa6475c0d6037fb02844653dfe3b  gcc/testsuite/gdc.test/runnable/extern1.d
  02ea8fe985b63cc406b916d3c6ba3484  gcc/testsuite/gdc.test/runnable/extra-files/alice30.txt
  6d37d9b9dbd0c7f4c9aac0ccf7a40ddf  gcc/testsuite/gdc.test/runnable/extra-files/foo37.txt
  2c076cf7e6b85703744bf5e46ebcaa8c  gcc/testsuite/gdc.test/runnable/extra-files/std14198/array.d
  d964a72afe8c1ec8814ea7b333fbc2f5  gcc/testsuite/gdc.test/runnable/extra-files/std14198/conv.d
  efe9afe1d7c82f88fcf975b64807b7c4  gcc/testsuite/gdc.test/runnable/extra-files/std14198/format.d
  98beb8db62d1031d4eaa5f8d60cfd128  gcc/testsuite/gdc.test/runnable/extra-files/std14198/uni.d
  4507b79a9ef31ed59c02d59700af4df6  gcc/testsuite/gdc.test/runnable/extra-files/test15.txt
- 6b952854c5e6a533ad55d2ecb608b526  gcc/testsuite/gdc.test/runnable/extra-files/teststdio.txt
  d1a345bbcd6c3027691c0839be38cd1c  gcc/testsuite/gdc.test/runnable/fix17429.d
! 138ad97bc12937e1c0fff55f0a9dfd31  gcc/testsuite/gdc.test/runnable/foreach.d
! c2b283d1e3e31cd510962c7938b6772e  gcc/testsuite/gdc.test/runnable/foreach2.d
! ffdf26707f658563246f6f2eb55a1ed9  gcc/testsuite/gdc.test/runnable/foreach3.d
! 54958f02697b235757871bf55160f48a  gcc/testsuite/gdc.test/runnable/foreach4.d
! 528464bc795d4b8cf2acc32bc7522e52  gcc/testsuite/gdc.test/runnable/foreach5.d
! 73d2e5cc0d43ca7077b4ba5d658e93de  gcc/testsuite/gdc.test/runnable/funclit.d
! 3ff1a9215f43376d58880f55d86aeff9  gcc/testsuite/gdc.test/runnable/functype.d
  976a8be8b48b1d50d5b38d829a14e5c5  gcc/testsuite/gdc.test/runnable/future.d
! 208419c3692ceb14bc534c2fca760959  gcc/testsuite/gdc.test/runnable/hello.d
! d84c027aa1650b72c56b62617867526a  gcc/testsuite/gdc.test/runnable/helloUTF8.d
  92368d5b6d3c89f59b0e43d8dd40c626  gcc/testsuite/gdc.test/runnable/ice10086a.d
  24beae18ca9f9cb8a07657669d33496b  gcc/testsuite/gdc.test/runnable/ice10086b.d
  e2c68cb85bc6e5c362db337fa60853dc  gcc/testsuite/gdc.test/runnable/ice10857.d
! 01a38a7ee053658c397688accd4044f2  gcc/testsuite/gdc.test/runnable/ice15030.d
! 101619a0d24c677d4170e8ebd183587c  gcc/testsuite/gdc.test/runnable/ice15138.d
! 00b5759217fda6ec8dd80ca1c32cd897  gcc/testsuite/gdc.test/runnable/ice15176.d
! f593c68c3b821d564a892b7dafea599d  gcc/testsuite/gdc.test/runnable/ice15200.d
  e5871ac8d80f4ab28dc0d9900e8c84d4  gcc/testsuite/gdc.test/runnable/ice4481.d
! c8024a61dd9b2e0aba48a825e6930552  gcc/testsuite/gdc.test/runnable/ifti.d
! 58a3ddd8d0f2508e713971b7b0eb3928  gcc/testsuite/gdc.test/runnable/implicit.d
! 22cdf0cfd984599e34d6fe3065794cb9  gcc/testsuite/gdc.test/runnable/imports/A16a.d
! eb8c99722b703fc7a7445bfdb91951ee  gcc/testsuite/gdc.test/runnable/imports/Other.d
  5549289e20c256bd7b6bab2b07484a85  gcc/testsuite/gdc.test/runnable/imports/a11447.d
  8d4c0595260b2e343ec3b0c955e015d1  gcc/testsuite/gdc.test/runnable/imports/a12010.d
! 776cd4b71b9a1ccc76062c3b974b6ad5  gcc/testsuite/gdc.test/runnable/imports/a12037.d
  bdf70cb80787a143707aac3fb009c5dc  gcc/testsuite/gdc.test/runnable/imports/a12874.d
  c0a596cba62cb0dec9eea21f70aa38c3  gcc/testsuite/gdc.test/runnable/imports/a14267.d
  db375212dd625de343ba4223733d8817  gcc/testsuite/gdc.test/runnable/imports/a14992.d
  837a05873eeab5f95fe60ec197cf7a1a  gcc/testsuite/gdc.test/runnable/imports/a15030.d
! 40c311b03139a09b476125af2f27ebe6  gcc/testsuite/gdc.test/runnable/imports/a15079.d
  dac5c65be8615fc894a766af0bcbc416  gcc/testsuite/gdc.test/runnable/imports/a17a.d
! 59426793f72030eafdb34df18ced76a0  gcc/testsuite/gdc.test/runnable/imports/a18a.d
! dab9e585e64463121cf82cb0e3b4b68c  gcc/testsuite/gdc.test/runnable/imports/a19a.d
  25c993390d40e050664ea51441776ba9  gcc/testsuite/gdc.test/runnable/imports/a20a.d
! 233ae48f410a6825bb2254b9634baeec  gcc/testsuite/gdc.test/runnable/imports/a21a.d
  82b8b77a4b5db3f8dda26142c4d4de00  gcc/testsuite/gdc.test/runnable/imports/a7595.d
  bb0504db0e2974e4a45ea1d9c30f6e06  gcc/testsuite/gdc.test/runnable/imports/a9546.d
  72c7d0c30f3a8a6462944e4b17e3a36b  gcc/testsuite/gdc.test/runnable/imports/a9741.d
  2c0a6bfda5079af6a913ab0814829475  gcc/testsuite/gdc.test/runnable/imports/b11447.d
  5037a44baf29fcf0c6b6bca265608b1c  gcc/testsuite/gdc.test/runnable/imports/b15030.d
  36df281082673182caaaaee813023694  gcc/testsuite/gdc.test/runnable/imports/b26a.d
  d0d720c2b6fe61c0c1643ab478853a6a  gcc/testsuite/gdc.test/runnable/imports/bar10378.d
  b52d69f335e16e4edd56afaa065cbeed  gcc/testsuite/gdc.test/runnable/imports/bug10425.d
! ec4bf52da4b4d8dfa2414b2080a9acd8  gcc/testsuite/gdc.test/runnable/imports/bug846.d
  954d8cb9972a1ed42ac4acc0598037ea  gcc/testsuite/gdc.test/runnable/imports/c11447.d
! ce0b1bf745fa5183b1cb4c381fb6ce8d  gcc/testsuite/gdc.test/runnable/imports/c22a.d
! bf348c0c8250486cebd71ce4464292d5  gcc/testsuite/gdc.test/runnable/imports/c22b.d
  e453ef25d3cb67e2414b4ad6550053ab  gcc/testsuite/gdc.test/runnable/imports/circularA.d
- 64cc1291470195c1c0e8c56172d6f681  gcc/testsuite/gdc.test/runnable/imports/depsprot_default.d
- 6d10e29b1064c8bd8b7544358ff80b92  gcc/testsuite/gdc.test/runnable/imports/depsprot_private.d
- 78b991d316d99590d1a07f1204fb6ef2  gcc/testsuite/gdc.test/runnable/imports/depsprot_public.d
  9338d91093c57ec6d10e65408ac7fa06  gcc/testsuite/gdc.test/runnable/imports/extern1a.d
  9c0befb5e86b864c8b026899443b7556  gcc/testsuite/gdc.test/runnable/imports/ice10086x.d
  111f044e495dcef07b1b835631a21e46  gcc/testsuite/gdc.test/runnable/imports/ice10086y.d
--- 76839,77256 ----
  2495a7ec11f5a9676dc5f43d8be5b556  gcc/testsuite/gdc.test/fail_compilation/imports/test15117a.d
  3cbd76eb5690663ef2b8bd33894716fe  gcc/testsuite/gdc.test/fail_compilation/imports/test15785.d
  96d5b988300a2abf193f374615cbc419  gcc/testsuite/gdc.test/fail_compilation/imports/test15897.d
! 418d6b6964add917d902543e21dfef36  gcc/testsuite/gdc.test/fail_compilation/imports/test18480a.d
! 696d2f2f5339b54220af5daaf070d886  gcc/testsuite/gdc.test/fail_compilation/imports/test18480b.d
! d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gdc.test/fail_compilation/imports/test18938a/cache.d
! 2830000cebabd66808f4778a6bce2943  gcc/testsuite/gdc.test/fail_compilation/imports/test18938a/file.d
! e5335e082dee5228c38cb76e03ceac92  gcc/testsuite/gdc.test/fail_compilation/imports/test18938b/file.d
! e5e22c43dcc2d3a1ef004e5f5e76f4bd  gcc/testsuite/gdc.test/fail_compilation/imports/test19107a.d
! dce0171d4a41453027ce5bfd767fbd9d  gcc/testsuite/gdc.test/fail_compilation/imports/test19107b.d
! d686a1411e6b3d60b882d4b00df74722  gcc/testsuite/gdc.test/fail_compilation/imports/test20023b.d
! 0da079755e194662a01beb2eeb753927  gcc/testsuite/gdc.test/fail_compilation/imports/test20267.d
! 458741b0b0c9f17de0833e6bb25e8c11  gcc/testsuite/gdc.test/fail_compilation/imports/test21164a.d
! 9bacf59c1fec9957b2660a304a5229c1  gcc/testsuite/gdc.test/fail_compilation/imports/test21164b.d
! 11ca22b85c5ca0c1b54199522827377c  gcc/testsuite/gdc.test/fail_compilation/imports/test21164c.d
! 86018b4a766b22937311ce1291b0f6e2  gcc/testsuite/gdc.test/fail_compilation/imports/test21164d.d
! 752c3f27831e643a283cd41eb35ec402  gcc/testsuite/gdc.test/fail_compilation/imports/test21246.d
  00ea49154799c340063fb6c244a3f6b4  gcc/testsuite/gdc.test/fail_compilation/imports/test21651b.d
  f23cb0fd3d8eec3ebf2e0c1922bc5dca  gcc/testsuite/gdc.test/fail_compilation/imports/test5412a.d
  e204ad88ee968daaed8e8d39426a553d  gcc/testsuite/gdc.test/fail_compilation/imports/test5412b.d
! 4723b74a84cbce02c7ab73c3649dde70  gcc/testsuite/gdc.test/fail_compilation/imports/test64a.d
  6fa3d032ace51698c299d55e536e12df  gcc/testsuite/gdc.test/fail_compilation/isreturnonstack.d
+ fce681bb0ca8dad5487bd5cf765fcdf5  gcc/testsuite/gdc.test/fail_compilation/issue15103.d
  45280fe05b89003c24c2e4f21c6a83f7  gcc/testsuite/gdc.test/fail_compilation/issue16020.d
! 2f9bc5d5c09e9359050941a93279ef33  gcc/testsuite/gdc.test/fail_compilation/issue20422.d
! c8588a8b31371e3131bc1cc2a02c19cd  gcc/testsuite/gdc.test/fail_compilation/issue20627.d
! a48495a89ed7124cc0f6e4236d722d04  gcc/testsuite/gdc.test/fail_compilation/issue20704.d
! 228c0e856fef257f01690c217369e065  gcc/testsuite/gdc.test/fail_compilation/issue21203.d
! e5a789aee346b0176c7893f97233f1f3  gcc/testsuite/gdc.test/fail_compilation/issue21295.d
! f0bb81c2a0813354da08269232f62b6c  gcc/testsuite/gdc.test/fail_compilation/issue21378.d
! 0acc4638d072c88a35d969c43eb7816a  gcc/testsuite/gdc.test/fail_compilation/issue21685_main.d
! 05250fe726a80770dd7390818c7b0e6d  gcc/testsuite/gdc.test/fail_compilation/issue22820.d
! 7361ba00652a7bb222f77b6d44a96921  gcc/testsuite/gdc.test/fail_compilation/issue22826.d
! 86ae9dad48ed8042c7af8aced8b378ca  gcc/testsuite/gdc.test/fail_compilation/issue3827.d
! e37a8c60187f92dfc590118ce4d6f292  gcc/testsuite/gdc.test/fail_compilation/lexer1.d
! 4d4c303b3d4d2ad597f6da1321158dcb  gcc/testsuite/gdc.test/fail_compilation/lexer2.d
! 1b0ba9e5ad50d6b299ef210908b26e3e  gcc/testsuite/gdc.test/fail_compilation/lexer3.d
! 2db3bcb168136bf3c248709150bf76f5  gcc/testsuite/gdc.test/fail_compilation/lexer4.d
! 33f5d6db48c660b840a5a69a56079500  gcc/testsuite/gdc.test/fail_compilation/lookup.d
! 338c9d9e082bb433d33a8ce50efb3e33  gcc/testsuite/gdc.test/fail_compilation/mangle1.d
! be5e933601ad80e3e77222d915fcb11b  gcc/testsuite/gdc.test/fail_compilation/mangle2.d
! 256544650b0e9e213678a91a1c30c6a8  gcc/testsuite/gdc.test/fail_compilation/misc1.d
! 0abe66c23e307b7b338a39481c8c1a1f  gcc/testsuite/gdc.test/fail_compilation/misc_parser_err_cov1.d
! ecd7a73e2fa554a62e68917642aafebd  gcc/testsuite/gdc.test/fail_compilation/mixin.d
! f96c464b4446946a260985b08542d13f  gcc/testsuite/gdc.test/fail_compilation/mixin_gc.d
  9a9e855b3c4e43d0edad873da941ffd5  gcc/testsuite/gdc.test/fail_compilation/mixintype2.d
  fe4d6368a23906f4ace80748ad73d9aa  gcc/testsuite/gdc.test/fail_compilation/moduleundefuda.d
! 4d0c974f54ebb51dd423d89afef1d40d  gcc/testsuite/gdc.test/fail_compilation/must_use.d
! 73a13c42127f4d58e29376b49e9d9699  gcc/testsuite/gdc.test/fail_compilation/must_use_comma.d
! 7788c08185016f3a9f21ac584c8a6462  gcc/testsuite/gdc.test/fail_compilation/must_use_opunary.d
! 15d90fcac6117dd6570d4a46b94403c8  gcc/testsuite/gdc.test/fail_compilation/must_use_reserved.d
! 3b5523de4749c7d852011ec85e276c84  gcc/testsuite/gdc.test/fail_compilation/must_use_template.d
! 58c5aee0e2a980b40b64d7c83f667cb6  gcc/testsuite/gdc.test/fail_compilation/must_use_union.d
! b47a909efceefac8899d962744b5b318  gcc/testsuite/gdc.test/fail_compilation/nestedtempl0.d
! 00d364e25fcaf6b250d8958d34c226a5  gcc/testsuite/gdc.test/fail_compilation/nestedtempl1.d
! 009ce5939a45dfaebc026fc5256f08fc  gcc/testsuite/gdc.test/fail_compilation/nestedtempl2.d
! e19e18fdbf14770d50e71cc08c1f3e79  gcc/testsuite/gdc.test/fail_compilation/nestedtempl3.d
! fdff8e41e2ca89123fe1f09faa34f99d  gcc/testsuite/gdc.test/fail_compilation/no_Throwable.d
! 03d3eb72cf3b9da1f6f78b59f1503820  gcc/testsuite/gdc.test/fail_compilation/no_TypeInfo.d
! 574b4fb906e7841e0b58f09b1448996b  gcc/testsuite/gdc.test/fail_compilation/nogc1.d
! d656975780f981c64bdaf92c40f83ab3  gcc/testsuite/gdc.test/fail_compilation/nogc2.d
! 8853f613c60846a9a57720a8eaa11595  gcc/testsuite/gdc.test/fail_compilation/nogc3.d
! 55f2896282e57e35608708cc85c30bbc  gcc/testsuite/gdc.test/fail_compilation/noreturn.d
! d8140f365a7b17fa364fd93df13595ea  gcc/testsuite/gdc.test/fail_compilation/noreturn2.d
! 5f0e133c486a33c48c252858bcdd4604  gcc/testsuite/gdc.test/fail_compilation/notype.d
! 066d50ff15946cfb273bb4728251cc04  gcc/testsuite/gdc.test/fail_compilation/objc_class2.d
! 0bef92b0916af83c7510416cb0b3ecfe  gcc/testsuite/gdc.test/fail_compilation/objc_class3.d
! 54c3e40c2f577452e4ffde1fb0db393b  gcc/testsuite/gdc.test/fail_compilation/objc_non_objc_base.d
! f29ce228ce319e1b2b02ce70cc28cb94  gcc/testsuite/gdc.test/fail_compilation/opapplyscope.d
  ac62ca9815f00728734800e1420ea208  gcc/testsuite/gdc.test/fail_compilation/parse12924.d
! 3451ecc3952a6be2ac17603d2886c549  gcc/testsuite/gdc.test/fail_compilation/parse12967a.d
! 1397d7f706fba402260d692924cfe9e2  gcc/testsuite/gdc.test/fail_compilation/parse12967b.d
  933423563d0328de33f8115d9eaaf3fb  gcc/testsuite/gdc.test/fail_compilation/parse13361.d
  50aeae3453219bbff0252ad5b2d61c2d  gcc/testsuite/gdc.test/fail_compilation/parse14285.d
  7344b3e3e6a615822b07b1de18d81899  gcc/testsuite/gdc.test/fail_compilation/parse14745.d
! 33ce7ca32a3112a12d1a515a5f9b1958  gcc/testsuite/gdc.test/fail_compilation/parse19277.d
! 94825597661a237c7a89e9ef87a07b21  gcc/testsuite/gdc.test/fail_compilation/parseStc.d
! b776e292ca10ada1f22be845f91295f1  gcc/testsuite/gdc.test/fail_compilation/parseStc2.d
! a24e5adcec9c683ee389ab4bc66da146  gcc/testsuite/gdc.test/fail_compilation/parseStc3.d
! 4585f217a5b7f8b8a09b84af0dbe2331  gcc/testsuite/gdc.test/fail_compilation/parseStc4.d
! d5b5218a5830b17dea35dac53b8ca8eb  gcc/testsuite/gdc.test/fail_compilation/parseStc5.d
! 8015ba3a9001818b52bd0ac3876401a7  gcc/testsuite/gdc.test/fail_compilation/pragmainline.d
! 6a300426bd41c403f16ef70ef4452bdd  gcc/testsuite/gdc.test/fail_compilation/pragmas.d
! 3b6c4b34df90d11af12eee73ffb3605a  gcc/testsuite/gdc.test/fail_compilation/previewin.d
! 93e29273b61b90ecaf1f9b852538f7ca  gcc/testsuite/gdc.test/fail_compilation/protattr1.d
! 39580b47e16e03fa696b3ed195381f0f  gcc/testsuite/gdc.test/fail_compilation/protattr2.d
! 4807590bdc410e8cbce87fc3a1702bf7  gcc/testsuite/gdc.test/fail_compilation/protattr3.d
  f94f5f9027598b10a0c7aa36cd12574d  gcc/testsuite/gdc.test/fail_compilation/protection/subpkg/test1.d
  0bf06d541fe7a39c966d076eb92cda03  gcc/testsuite/gdc.test/fail_compilation/protection/subpkg/test2.d
  9d01f4975a479fc715251f6173ce5c4c  gcc/testsuite/gdc.test/fail_compilation/protection/subpkg/test3.d
! aaf16b2b47d55960cd3ce0a1218b3ac3  gcc/testsuite/gdc.test/fail_compilation/pull12941.d
! 3fd870b41855f158c759eee9a2348829  gcc/testsuite/gdc.test/fail_compilation/reg6769.d
! a171d38a0c66c39452315b4d5cfa6d7c  gcc/testsuite/gdc.test/fail_compilation/reserved_version.d
! d55e508e1bdcf1023100731dcd2325b0  gcc/testsuite/gdc.test/fail_compilation/reserved_version_switch.d
! 79d64fe25139665f2fbbbde225eef007  gcc/testsuite/gdc.test/fail_compilation/retref2.d
! 317ccdf8cd1ee09f9a6aa3f2587c0e9a  gcc/testsuite/gdc.test/fail_compilation/retscope.d
! ebcb9b34559e1103c80f4a35e324e070  gcc/testsuite/gdc.test/fail_compilation/retscope2.d
! a2f171ad836e22fad2ea633dbe12b634  gcc/testsuite/gdc.test/fail_compilation/retscope3.d
! c6c07f896e1602e3555f770e5cb6de5e  gcc/testsuite/gdc.test/fail_compilation/retscope4.d
! e024cf081dccb576f3cc704719ad8a79  gcc/testsuite/gdc.test/fail_compilation/retscope5.d
! c6e349540dd9e84f2da6d7a52e5df12b  gcc/testsuite/gdc.test/fail_compilation/retscope6.d
! 04ebc00459c94492ff1769f6fa7b05f7  gcc/testsuite/gdc.test/fail_compilation/scope_class.d
! 7844f07f212a32fbdcd7af5fc71a02e9  gcc/testsuite/gdc.test/fail_compilation/scope_type.d
! 7512e9ce22afd564de5e40b0bfa82067  gcc/testsuite/gdc.test/fail_compilation/shared.d
! 1f8678bdbd19a9e3e714df9f783053ce  gcc/testsuite/gdc.test/fail_compilation/skip.d
! b0deda56d15b9fb7160c198b0d3ea6d3  gcc/testsuite/gdc.test/fail_compilation/spell9644.d
! 0ffae6cead9563b1a55aed6c6d6707cd  gcc/testsuite/gdc.test/fail_compilation/staticarrayoverflow.d
  1fcc8aaa8f4d74a4f1abe57e47cfd353  gcc/testsuite/gdc.test/fail_compilation/staticforeach1.d
  69da8fec6e17cf06c0720278a97abb96  gcc/testsuite/gdc.test/fail_compilation/staticforeach2.d
  bb6598a0d52b49923b14222dee510692  gcc/testsuite/gdc.test/fail_compilation/staticforeach3.d
! 5fc86afe292de65847c2d5b768bc361e  gcc/testsuite/gdc.test/fail_compilation/staticforeach4.d
! 7cfd30303d9dda9af3a3d9738a04688d  gcc/testsuite/gdc.test/fail_compilation/switches.d
  82097814cc50105a55a7ef8ecc8b9a03  gcc/testsuite/gdc.test/fail_compilation/test1.d
! 63f139f45a6e15e188c3b11fc538355b  gcc/testsuite/gdc.test/fail_compilation/test10.d
! 305adce56f0df00c5b7b911cd52ea3fb  gcc/testsuite/gdc.test/fail_compilation/test1021.d
! 29c1ebc101d5206922382dcc0a32676e  gcc/testsuite/gdc.test/fail_compilation/test11006.d
! 6fea622afbaede137af90ea3be9d92da  gcc/testsuite/gdc.test/fail_compilation/test11047.d
! 0c916e3262d1ea80afb9087dfb7836e9  gcc/testsuite/gdc.test/fail_compilation/test11176.d
! c4f92f7f1936ce720dc0b22cb66d46fd  gcc/testsuite/gdc.test/fail_compilation/test12228.d
! 85d57b27608d5d1c328cc850a806d070  gcc/testsuite/gdc.test/fail_compilation/test12385.d
! 01470bdf2abf34f431e989d0f125bcad  gcc/testsuite/gdc.test/fail_compilation/test12558.d
! d3a376056eec3d995dfadab9d07349eb  gcc/testsuite/gdc.test/fail_compilation/test12822.d
! 65bf6828b6933ad9338fde788fa23308  gcc/testsuite/gdc.test/fail_compilation/test13152.d
! 5373d9986883a27078f4619d36b771ef  gcc/testsuite/gdc.test/fail_compilation/test13536.d
! 6e5df77b9bbcf8f3f6aba086066048b2  gcc/testsuite/gdc.test/fail_compilation/test13537.d
! eb86a3dc5c2a6e231593c5b6568bbc49  gcc/testsuite/gdc.test/fail_compilation/test13667.d
! db592e9a6de841cf529b94507c878bfe  gcc/testsuite/gdc.test/fail_compilation/test13786.d
! dc5f6694b899c5b4017bfc9931164527  gcc/testsuite/gdc.test/fail_compilation/test13867.d
! 2be07367077526f2bb6da860b9b81128  gcc/testsuite/gdc.test/fail_compilation/test14064.d
! 0c5411d57eb834f6d271bc3a05061295  gcc/testsuite/gdc.test/fail_compilation/test14238.d
! 3fd9f21ffc0d2cd25d288f630210d963  gcc/testsuite/gdc.test/fail_compilation/test143.d
! efa4a736ea4b35b9e942d8f134f4f3d3  gcc/testsuite/gdc.test/fail_compilation/test14496.d
! 94cf39bd34fa549c98adb3304ccf81cd  gcc/testsuite/gdc.test/fail_compilation/test14538.d
! 0811c0a4dbd9bffec8230d6e2a5a6c01  gcc/testsuite/gdc.test/fail_compilation/test15177.d
! 057e53699344513de85f8bace19aa5d3  gcc/testsuite/gdc.test/fail_compilation/test15191.d
! 6a905045175c0f489c5b3aeb041eabb6  gcc/testsuite/gdc.test/fail_compilation/test15306.d
! 90a7247f40457f86ba8fad930ce3509b  gcc/testsuite/gdc.test/fail_compilation/test15373.d
! bac5787c7029498c07f5076c5807bf2d  gcc/testsuite/gdc.test/fail_compilation/test15399.d
! 729b6db37d0ce68b19199d351add21e2  gcc/testsuite/gdc.test/fail_compilation/test15544.d
! 0abfb2e299ff7ed2545bc70496d0c101  gcc/testsuite/gdc.test/fail_compilation/test15660.d
! 94b6b52023f65f4ac04f78a28068dd29  gcc/testsuite/gdc.test/fail_compilation/test15672.d
! f2e9c5245c8a38d42dd78e38f8a5e42f  gcc/testsuite/gdc.test/fail_compilation/test15703.d
! 977db354a89e574f7316667596a484dd  gcc/testsuite/gdc.test/fail_compilation/test15704.d
! a4b1ec106c1d62ef79687e151fcdf9b8  gcc/testsuite/gdc.test/fail_compilation/test15785.d
! d1333de570b9babff543dfaf034537b6  gcc/testsuite/gdc.test/fail_compilation/test15785b.d
! aab1c46fa1e6c2742d4f6074a0d483e7  gcc/testsuite/gdc.test/fail_compilation/test15897.d
! 9abfc5bd4dee2b4e29f7125683c4cc06  gcc/testsuite/gdc.test/fail_compilation/test15925.d
! 34f69908ea5a0909d9fb282d88f4e272  gcc/testsuite/gdc.test/fail_compilation/test15989.d
! d1adfc9174aa950f68215afdfe2e8b10  gcc/testsuite/gdc.test/fail_compilation/test16095.d
! 66fc24a8ca5e79401240720959999b8a  gcc/testsuite/gdc.test/fail_compilation/test16116.d
! 9af64f23b23c59c9dd9c829a96ab20e1  gcc/testsuite/gdc.test/fail_compilation/test16188.d
! 90da4daa549886a11d3a56efa72133f5  gcc/testsuite/gdc.test/fail_compilation/test16193.d
! 7e69c14bf5d6715448a1e70e55ff1e92  gcc/testsuite/gdc.test/fail_compilation/test16195.d
! e5b046140d8851a5d422294abc065485  gcc/testsuite/gdc.test/fail_compilation/test16228.d
! 03f0d7df123861dc23fb282e1a4a844f  gcc/testsuite/gdc.test/fail_compilation/test16284.d
! 20d725218db0aa6db8e2e5e32edd0e65  gcc/testsuite/gdc.test/fail_compilation/test16365.d
! 33933620d92be6e81861940d59ca3585  gcc/testsuite/gdc.test/fail_compilation/test16381.d
! e0a809992bf27ecb5271695352b3ac48  gcc/testsuite/gdc.test/fail_compilation/test16523.d
! 2377981f9d46da4831624a8caf1db7d8  gcc/testsuite/gdc.test/fail_compilation/test16589.d
! 86569ab8185a8567150068a8b7844fd6  gcc/testsuite/gdc.test/fail_compilation/test16694.d
  8a1e1c8ebc97ba6532defbe55f9c4728  gcc/testsuite/gdc.test/fail_compilation/test17096.d
! 841cb043d71b59bcb34c8b42bf8098d1  gcc/testsuite/gdc.test/fail_compilation/test17284.d
! 5a27a426fc0054795467c4c6257ec60a  gcc/testsuite/gdc.test/fail_compilation/test17307.d
  3b214d273aa841f50cc8a1e86597be18  gcc/testsuite/gdc.test/fail_compilation/test17380.d
! 88b8e301245a723dbb7d0aa24f6faedf  gcc/testsuite/gdc.test/fail_compilation/test17380spec.d
! f61bc9deb751473044d9409319fb74bb  gcc/testsuite/gdc.test/fail_compilation/test17422.d
! 8210959008933d901c312feabdc17f9f  gcc/testsuite/gdc.test/fail_compilation/test17423.d
! c0d67198dbf86e2d1c77c70a61959cda  gcc/testsuite/gdc.test/fail_compilation/test17425.d
! 5c7c062e852aaa7298e80d47c0383d78  gcc/testsuite/gdc.test/fail_compilation/test17450.d
! 393902c2443bef8d11f38f4f4b712490  gcc/testsuite/gdc.test/fail_compilation/test17451.d
! 007e8f7be0caa67ef13dbf76d94596f3  gcc/testsuite/gdc.test/fail_compilation/test17586.d
! 17574606dae13807ad0677b7e9eea048  gcc/testsuite/gdc.test/fail_compilation/test17868.d
! d6f82efc092fec926b48bc9ed90adf09  gcc/testsuite/gdc.test/fail_compilation/test17868b.d
! 4092ca8954505900e27e406d1e0d039c  gcc/testsuite/gdc.test/fail_compilation/test17892.d
  47fc9c265bc4fd596a224fb51e63e09c  gcc/testsuite/gdc.test/fail_compilation/test17908a.d
  f79ff08f6a4f8c6756261d3e8abd2c0b  gcc/testsuite/gdc.test/fail_compilation/test17908b.d
+ 0c27222ad4d0c3be9c21c7c7b0ea7f3c  gcc/testsuite/gdc.test/fail_compilation/test17959.d
+ 990f65972e725824cce49c4bcb2fcc6b  gcc/testsuite/gdc.test/fail_compilation/test17977.d
+ 680bf8a5e48eb1a37ba89976f91dd2b6  gcc/testsuite/gdc.test/fail_compilation/test18130.d
+ 95c9b855be54d021d170fd8940157382  gcc/testsuite/gdc.test/fail_compilation/test18282.d
  a7a660644aa3a898b18641bb0128e405  gcc/testsuite/gdc.test/fail_compilation/test18312.d
+ 4d26a540c7d1043abe4bb6052d32b221  gcc/testsuite/gdc.test/fail_compilation/test18385.d
+ b1e87e5ca0e90a2ae9b8cded872c77b0  gcc/testsuite/gdc.test/fail_compilation/test18385b.d
+ eb13c0e63193ee8c64f5e8544473c951  gcc/testsuite/gdc.test/fail_compilation/test18480.d
+ 305a3dc0101b29226096942f06ded414  gcc/testsuite/gdc.test/fail_compilation/test18484.d
+ 48c8c1dc147dd27ac280e47d2b545b6a  gcc/testsuite/gdc.test/fail_compilation/test18597.d
+ 37d894d9ec4b42c2dbf3166de0530bb3  gcc/testsuite/gdc.test/fail_compilation/test18607.d
+ 2e0bf259be5ba60d2c4f7362ea492122  gcc/testsuite/gdc.test/fail_compilation/test18644.d
+ b082b2bf9129db74cd10287209671a96  gcc/testsuite/gdc.test/fail_compilation/test18708.d
+ 984b16fc115a2ec34207e0d4e75e25df  gcc/testsuite/gdc.test/fail_compilation/test18736.d
+ 1240f333997e37011a3415bdbd937808  gcc/testsuite/gdc.test/fail_compilation/test19097.d
+ 70ca9d9c0e3946790cc48e57d110a810  gcc/testsuite/gdc.test/fail_compilation/test19107.d
+ 966a5125951332c08a39ca7ebbd05c02  gcc/testsuite/gdc.test/fail_compilation/test19112.d
+ 8fe10b91500fba0e91b654fe48dd3d51  gcc/testsuite/gdc.test/fail_compilation/test19176.d
+ f97e2d15a019a647e1e8ce539445f818  gcc/testsuite/gdc.test/fail_compilation/test19193.d
+ b10055535f91e5f4101a27318f808c5e  gcc/testsuite/gdc.test/fail_compilation/test19473.d
  67abd3b15509154f2ad168138e069892  gcc/testsuite/gdc.test/fail_compilation/test19608.d
+ bbc36165fa0ba58a16c0c253c473058c  gcc/testsuite/gdc.test/fail_compilation/test19646.d
+ 606379c092762843ab10257254f91d9b  gcc/testsuite/gdc.test/fail_compilation/test19661.d
+ 34e81e64d83e9bfdbbdf48642119d09a  gcc/testsuite/gdc.test/fail_compilation/test19971.d
+ 38ecb4a91c2ce2571d77866385a588c9  gcc/testsuite/gdc.test/fail_compilation/test20023.d
+ bdc93bd17024fd4d46de7909ff405a11  gcc/testsuite/gdc.test/fail_compilation/test20096.d
+ 989f382db1d361c966fe47d4b8205d23  gcc/testsuite/gdc.test/fail_compilation/test20149.d
+ 9ab9fc4282f7938397da1b789edcd6e6  gcc/testsuite/gdc.test/fail_compilation/test20245.d
+ 710c352c31a4baca536f7bfad2a41d05  gcc/testsuite/gdc.test/fail_compilation/test20267.d
+ d5c3623a103182544da82c93b4634f62  gcc/testsuite/gdc.test/fail_compilation/test20324.d
+ 67055ecd3df8ca389c004a12d2eb7d68  gcc/testsuite/gdc.test/fail_compilation/test20383.d
+ 384652f7c502f0235624ad7b7ea50a47  gcc/testsuite/gdc.test/fail_compilation/test20515.d
+ 954aa3786c680600aeab789341c03fa8  gcc/testsuite/gdc.test/fail_compilation/test20549.d
+ c20d2e44234601fb7a1e6695ac301613  gcc/testsuite/gdc.test/fail_compilation/test20565.d
+ 0fb9e694e313e809c9f7de17b744b562  gcc/testsuite/gdc.test/fail_compilation/test20569.d
+ 4eafc9affda83afce6c0cc4694dd75d6  gcc/testsuite/gdc.test/fail_compilation/test20610.d
+ 4b52d7823af93d96b42262173304ca1a  gcc/testsuite/gdc.test/fail_compilation/test20626.d
+ e39aff32106ef1915eaef833c26044c1  gcc/testsuite/gdc.test/fail_compilation/test20696.d
+ 2f6c506e76aed89ac4c69810f1b7e4c2  gcc/testsuite/gdc.test/fail_compilation/test20719.d
+ 8c40ecbab6983575b3c3b54433f279f0  gcc/testsuite/gdc.test/fail_compilation/test20881.d
  b63d81d149ced101cc0047fccfbfbff2  gcc/testsuite/gdc.test/fail_compilation/test20919.d
+ 9ec228c5fa202331b64ccb7c400d37c0  gcc/testsuite/gdc.test/fail_compilation/test20998.d
+ 939ec29c5a01d2c3cb2f90d09079cc05  gcc/testsuite/gdc.test/fail_compilation/test21008.d
+ 4aaee6ae450926eaa1c6fa5de9532424  gcc/testsuite/gdc.test/fail_compilation/test21093.d
+ 785607e59e845151be7648564e7b233c  gcc/testsuite/gdc.test/fail_compilation/test21096.d
  a2dfda31aa6bb8862b349db8dd7c06f0  gcc/testsuite/gdc.test/fail_compilation/test21164.d
! 123409d89261a588091fd6d8aa06f4cb  gcc/testsuite/gdc.test/fail_compilation/test21198.d
! e66dfe85bdb196d3cba7a443b5e9b540  gcc/testsuite/gdc.test/fail_compilation/test21204.d
! f0d66ee58e1deca85dd1a5c6be72e0fe  gcc/testsuite/gdc.test/fail_compilation/test21246.d
! 2fce247ddc6adc1e84f449d7761cc302  gcc/testsuite/gdc.test/fail_compilation/test21259.d
! 0eab8d2a17e3211f93dc6c87bf3f5d8c  gcc/testsuite/gdc.test/fail_compilation/test21319.d
! 51deaefc23e5419bce319caa9f692ca8  gcc/testsuite/gdc.test/fail_compilation/test21353.d
! a3522f54348a3c5f14028c34c44f5884  gcc/testsuite/gdc.test/fail_compilation/test21380.d
! d89c86b00de50c0eff1176ba2eac046a  gcc/testsuite/gdc.test/fail_compilation/test21518.d
! 32963db1864d8e88864b2bc3b4a00399  gcc/testsuite/gdc.test/fail_compilation/test21546.d
  71e1aa25aaa777c4eef2e9d4c47f72c0  gcc/testsuite/gdc.test/fail_compilation/test21651.d
! e3dfb0cf3bf664c0f95e52252e4f3973  gcc/testsuite/gdc.test/fail_compilation/test21665.d
! 135b6f0d46b59693d5057115b41c7d0b  gcc/testsuite/gdc.test/fail_compilation/test21807.d
! 39715dd42c347459f6efda8e8a58254e  gcc/testsuite/gdc.test/fail_compilation/test21912.d
! 3d30a4f2bab190433f516628a982fbf6  gcc/testsuite/gdc.test/fail_compilation/test21927.d
! 00c0a23be93838d8f2a86c097d340a13  gcc/testsuite/gdc.test/fail_compilation/test21930.d
! 9c01bfd7f813ce99b0db70312ff9f837  gcc/testsuite/gdc.test/fail_compilation/test21939.d
! 7737d71c94d6416d1a8f6f5b58d44304  gcc/testsuite/gdc.test/fail_compilation/test22023.d
! 7caa8b8c863029f2390235af67a58b67  gcc/testsuite/gdc.test/fail_compilation/test22048.d
! 957077322a5bbc117c991abac1d937fe  gcc/testsuite/gdc.test/fail_compilation/test22145.d
! b26bef555817a24ae4467d7dc0636c50  gcc/testsuite/gdc.test/fail_compilation/test22227.d
! 72542ae3b6eec0b354faccf5f89e9e9b  gcc/testsuite/gdc.test/fail_compilation/test22298.d
! 24d0c61c3bfc25b9e3354787b83bee35  gcc/testsuite/gdc.test/fail_compilation/test22329.d
! acdee90e75d19aa3146056d4a0ea124a  gcc/testsuite/gdc.test/fail_compilation/test22361.d
! 7171ffb25dfbfb58138adc21ba50dc84  gcc/testsuite/gdc.test/fail_compilation/test22541.d
! cf139945245bb017eb805da3ff7c09a1  gcc/testsuite/gdc.test/fail_compilation/test22574.d
! 6c15aaa3103d9ba894f43b66f6188b10  gcc/testsuite/gdc.test/fail_compilation/test22593.d
! 4ebd40967776126bdeadfab0dc0a7624  gcc/testsuite/gdc.test/fail_compilation/test22686.d
! 90ed8b49735b9275543c712461c3827c  gcc/testsuite/gdc.test/fail_compilation/test22709.d
! 1bffd331c1de7611b9612bc951295dc8  gcc/testsuite/gdc.test/fail_compilation/test22818.d
! 173ea5f46a0b9730ccb5a67253618146  gcc/testsuite/gdc.test/fail_compilation/test22840.d
! 7f1d305e5b6a16823b10905c8acabf9e  gcc/testsuite/gdc.test/fail_compilation/test22910.d
! ae0cd305d2c663e0e5f1c5a00774996d  gcc/testsuite/gdc.test/fail_compilation/test22999.d
! f913115e93868e9a78c9fa781674f313  gcc/testsuite/gdc.test/fail_compilation/test23017.d
! 2dddb119548b8d219ecb2aed67590d4b  gcc/testsuite/gdc.test/fail_compilation/test314.d
! 4917bf7731fa8cfa0e714e8761b5e241  gcc/testsuite/gdc.test/fail_compilation/test3818.d
  465b130426028cac7c9bb32cf2f4fdee  gcc/testsuite/gdc.test/fail_compilation/test4682.d
  5e3c07e144e8f8d3dc6a9bd044054a82  gcc/testsuite/gdc.test/fail_compilation/test4682a.d
! cc61d755345aca4d0ab681f1b48b26a1  gcc/testsuite/gdc.test/fail_compilation/test4838.d
! ed8969fea0e9bb906f749af7b0eda944  gcc/testsuite/gdc.test/fail_compilation/test4946.d
  68a376176c9ed6a78fe7a713342fe1be  gcc/testsuite/gdc.test/fail_compilation/test5412a.d
  e9808af6da103a5976d3382176178373  gcc/testsuite/gdc.test/fail_compilation/test5412b.d
  d2b87ee44dddab23a1c9886c5841ae8c  gcc/testsuite/gdc.test/fail_compilation/test5412c.d
  59e02e76cb49a9c1b9e122d71718c235  gcc/testsuite/gdc.test/fail_compilation/test5412c2.di
! c64d6105a3f8d4a01b5583058c8019c7  gcc/testsuite/gdc.test/fail_compilation/test64.d
  41061beff9b304e814bb0fc6540a8cf3  gcc/testsuite/gdc.test/fail_compilation/test6883.d
  e5c1326640ea3425f6b79d83f241800c  gcc/testsuite/gdc.test/fail_compilation/test8509.d
! 83923140d1196510fca82ee22be2c06e  gcc/testsuite/gdc.test/fail_compilation/test8556.d
  ec4dab98798d55fe2c57ec7dd6dca969  gcc/testsuite/gdc.test/fail_compilation/test8751.d
! 46f509a995ae6b79fdbc64c52d8a4f8f  gcc/testsuite/gdc.test/fail_compilation/test9150.d
! 34ae587b738bae66fe38677dce368618  gcc/testsuite/gdc.test/fail_compilation/test9176.d
! a09457a5389a6b79f583244a35add7aa  gcc/testsuite/gdc.test/fail_compilation/test9701.d
! 0c45d5260200ba8418599d073e757dc5  gcc/testsuite/gdc.test/fail_compilation/test9701b.d
! 72dfa3f018a5d4d774824c2ba1113dbc  gcc/testsuite/gdc.test/fail_compilation/testCols.d
! ffa6d1bb5e4d903cd4438a013f4d9c56  gcc/testsuite/gdc.test/fail_compilation/testInference.d
! fd0ecef833524850930d84c7d0e51cc1  gcc/testsuite/gdc.test/fail_compilation/testOpApply.d
! 06a2e5c0cb590706502127edcd1ef4c5  gcc/testsuite/gdc.test/fail_compilation/test_switch_error.d
! aa7f041aa8deebe034402316bdd46ac3  gcc/testsuite/gdc.test/fail_compilation/testpull1810.d
! 944dcaf308b2b3bd00d4ecb96954be5a  gcc/testsuite/gdc.test/fail_compilation/testscopestatic.d
! 57c72c41fa070966229a8558b833873a  gcc/testsuite/gdc.test/fail_compilation/trait_loc_err.d
  3cd67c281e7569394eb1c1c3ebd7f1f9  gcc/testsuite/gdc.test/fail_compilation/trait_loc_ov_err.d
! 29ec781ba741e6f2dec8143356c31deb  gcc/testsuite/gdc.test/fail_compilation/traits.d
  4bc4006892d5f8f77213130f3a99de63  gcc/testsuite/gdc.test/fail_compilation/traits_alone.d
! 48edd3c9ac39fcd89bdb6d21b1e2ae3a  gcc/testsuite/gdc.test/fail_compilation/traits_child.d
! f4314476b27b3e9b55a576b20be59974  gcc/testsuite/gdc.test/fail_compilation/traits_initSymbol.d
! 1c9eecd3fd98dda6bd34752b508a13f9  gcc/testsuite/gdc.test/fail_compilation/traits_parameters.d
! f6634ff06dea234ca95e31fb00a5f584  gcc/testsuite/gdc.test/fail_compilation/typeerrors.d
  ec15e095250e64dfc7cf74020eebd50c  gcc/testsuite/gdc.test/fail_compilation/udaparams.d
+ 67eb83542917456871c84000d16d3890  gcc/testsuite/gdc.test/fail_compilation/union_initialization.d
+ 5c3640f56239722f872b3e454d87b4a1  gcc/testsuite/gdc.test/fail_compilation/vararg2.d
+ a5e1eb3ac7aaf3012f9d0340e4173761  gcc/testsuite/gdc.test/fail_compilation/varargsstc.d
+ d073fa782699e4eb73e51cbd5828d23f  gcc/testsuite/gdc.test/fail_compilation/verifyhookexist.d
  e9b76ed9d6ac70bc2a0374b247c4d24b  gcc/testsuite/gdc.test/fail_compilation/verrors0.d
  0f994645f171fee35d3e36e19e9214b2  gcc/testsuite/gdc.test/fail_compilation/verrors5.d
! c01b8ab1ddcc5ec29c1654508ee12618  gcc/testsuite/gdc.test/fail_compilation/warn12809.d
! 2f5bd0e5051d939990f8abf297455f0a  gcc/testsuite/gdc.test/fail_compilation/warn13679.d
! a33a1bbd8f6bddfcc1f780250c789cc7  gcc/testsuite/gdc.test/fail_compilation/warn7444.d
  ba48bb410e12885cc62cfe4376b90e24  gcc/testsuite/gdc.test/fail_compilation/widechars.d
! 4d086680d04f151f12470ff2df818c7d  gcc/testsuite/gdc.test/runnable/A16.d
! b3ea02141179894a95880a5b77e08f0a  gcc/testsuite/gdc.test/runnable/Same.d
! 501e4a7b2936780b2296897940b47fb3  gcc/testsuite/gdc.test/runnable/a17.d
! f6631e1e1a3e934a040544d898e79e18  gcc/testsuite/gdc.test/runnable/a18.d
! 7ab5a8b174d6dfc11178bbe5b91fc453  gcc/testsuite/gdc.test/runnable/a19.d
! 134d96ee56c5082feabf729df7cd964e  gcc/testsuite/gdc.test/runnable/a21.d
! e615ecc1d7b37de2af54470f3338598c  gcc/testsuite/gdc.test/runnable/aliasassign.d
! bdd33dd9645eddf6b5b83f304fcff332  gcc/testsuite/gdc.test/runnable/aliasthis.d
! f3a2bbb7a464d93f63ab0326b83fa7ab  gcc/testsuite/gdc.test/runnable/arrayop.d
! 073672ac74fba180ae74d6c77ee0b665  gcc/testsuite/gdc.test/runnable/auto1.d
! 3de44536ba2ca82e220dcd6a0a086dce  gcc/testsuite/gdc.test/runnable/b10562.d
  65c4da6831a7756860e462a8e30bc23e  gcc/testsuite/gdc.test/runnable/b16278.d
+ de5dbaa120df255398848177bccef4ac  gcc/testsuite/gdc.test/runnable/b16360.d
  a8689a639669b0a19dad584fd5012058  gcc/testsuite/gdc.test/runnable/b17073.d
! f66cb050ec22cdec489dde1bf9619206  gcc/testsuite/gdc.test/runnable/b18034.d
! 0ebf93e3514646cfc0afd8a177c4d2f6  gcc/testsuite/gdc.test/runnable/b19294.d
! d4da66233ad02bb296e770148545f6cb  gcc/testsuite/gdc.test/runnable/b19584.d
! 95f780fe72413217fe87a30fa9f61edd  gcc/testsuite/gdc.test/runnable/b20470.d
! a420878da7fa335abc9583e4499d0666  gcc/testsuite/gdc.test/runnable/b20890.d
! 700974143aafca54065d707b348b8b12  gcc/testsuite/gdc.test/runnable/b26.d
! 58d10d4fb6d5a4cb665b54f848a3df89  gcc/testsuite/gdc.test/runnable/b6400.d
! 81eae29e5dcdce2710e97b024a39e9d5  gcc/testsuite/gdc.test/runnable/bench1.d
! fa1c08e7e7df11457ef289fb42989329  gcc/testsuite/gdc.test/runnable/betterc.d
! 3d3cfce1b32d3c3367406afbb4f3a671  gcc/testsuite/gdc.test/runnable/bettercUnittest.d
! 370e709a442934770ca5c055271aba94  gcc/testsuite/gdc.test/runnable/bitops.d
! 5e171d0543cb3d1795498b099bcc4509  gcc/testsuite/gdc.test/runnable/bug11155.d
  57c36c5c550ccf929d7ef16b40d40d52  gcc/testsuite/gdc.test/runnable/bug12928.d
  9ff4fc16d2151e151650b90656838c4b  gcc/testsuite/gdc.test/runnable/bug16146.d
+ 33630c57e32ef7ea1ea8c8b9e4cbdf7d  gcc/testsuite/gdc.test/runnable/bug19652.d
  546af3fae34682e4fc189d2cda31ed4a  gcc/testsuite/gdc.test/runnable/bug5.d
! d939e36fd09244321c35ddc5937a0203  gcc/testsuite/gdc.test/runnable/bug7068.d
! 50fea055820fc103d004302bc63f3c85  gcc/testsuite/gdc.test/runnable/bug846.d
! de570b5a920eaef8e0d57972f493e7ca  gcc/testsuite/gdc.test/runnable/builtin.d
  af2f95c5ef65b51539eef86ea15fa531  gcc/testsuite/gdc.test/runnable/c22.d
! 01d3a2d553dcbd78448c6408c8ceee96  gcc/testsuite/gdc.test/runnable/casting.d
! 1a404880fefc71429b66061fd57938df  gcc/testsuite/gdc.test/runnable/class_opCmp.d
! 5068a6a0f9625497fb9c8d675f89c437  gcc/testsuite/gdc.test/runnable/closure.d
! 9ea48cae757dd16042cd7434aff94459  gcc/testsuite/gdc.test/runnable/complex.d
! ce7051ac19199f716966b7818a002c9b  gcc/testsuite/gdc.test/runnable/constfold.d
! 22d4c0207094ce3a414b0d1ca8250a18  gcc/testsuite/gdc.test/runnable/cppdtor.d
! 2b92f65e8a84b3091a6b268e98f92815  gcc/testsuite/gdc.test/runnable/ctorpowtests.d
! 02fa83518542867ea2e7418da0b1937a  gcc/testsuite/gdc.test/runnable/declaration.d
! d0a93167ec0c4b07094d766e9e071292  gcc/testsuite/gdc.test/runnable/delegate.d
  e16a173b033d44ac86490e5b91a9a2be  gcc/testsuite/gdc.test/runnable/e7804.d
! 53f608a3800e7a114ef0c11e5c66686a  gcc/testsuite/gdc.test/runnable/eh.d
  5722a1733c880e8a632c938c12f40b9f  gcc/testsuite/gdc.test/runnable/eh2.d
! b26c0b2a01e9fdb64c30f43232af99e2  gcc/testsuite/gdc.test/runnable/entity1.d
! de327a41a46e97e01f8c39a238153fe5  gcc/testsuite/gdc.test/runnable/evalorder.d
  9ec0fa6475c0d6037fb02844653dfe3b  gcc/testsuite/gdc.test/runnable/extern1.d
  02ea8fe985b63cc406b916d3c6ba3484  gcc/testsuite/gdc.test/runnable/extra-files/alice30.txt
  6d37d9b9dbd0c7f4c9aac0ccf7a40ddf  gcc/testsuite/gdc.test/runnable/extra-files/foo37.txt
+ 4cf52109ea8114cd48060f469ef15ef6  gcc/testsuite/gdc.test/runnable/extra-files/lib13742a.d
+ 581c42b7603f87a68265acd7a83b3784  gcc/testsuite/gdc.test/runnable/extra-files/lib13742b.d
+ b84ed80fbde5df36ca03c501094f53ba  gcc/testsuite/gdc.test/runnable/extra-files/minimal/object.d
+ d873fde62be42dc6d7ebe69a8307e263  gcc/testsuite/gdc.test/runnable/extra-files/moreBettercUnittests.d
  2c076cf7e6b85703744bf5e46ebcaa8c  gcc/testsuite/gdc.test/runnable/extra-files/std14198/array.d
  d964a72afe8c1ec8814ea7b333fbc2f5  gcc/testsuite/gdc.test/runnable/extra-files/std14198/conv.d
  efe9afe1d7c82f88fcf975b64807b7c4  gcc/testsuite/gdc.test/runnable/extra-files/std14198/format.d
  98beb8db62d1031d4eaa5f8d60cfd128  gcc/testsuite/gdc.test/runnable/extra-files/std14198/uni.d
+ b641a96329906956e464851eb6e101c4  gcc/testsuite/gdc.test/runnable/extra-files/test13742.d
  4507b79a9ef31ed59c02d59700af4df6  gcc/testsuite/gdc.test/runnable/extra-files/test15.txt
  d1a345bbcd6c3027691c0839be38cd1c  gcc/testsuite/gdc.test/runnable/fix17429.d
! 7f1db1f6ef5b5e0953c76aa16bc17e9f  gcc/testsuite/gdc.test/runnable/fix20466.d
! b6132527f3a42a9d10983addf6a107db  gcc/testsuite/gdc.test/runnable/fix22115.d
! a85a96c958be3402e6f812d99f6ed0a6  gcc/testsuite/gdc.test/runnable/fix22372.d
! 228d27e5a63dfd41fe117487069fc2cc  gcc/testsuite/gdc.test/runnable/fix22624.d
! d8fb229e4130b79d115c02f142b30900  gcc/testsuite/gdc.test/runnable/foreach.d
! 9564304c11653927716e970854c4a462  gcc/testsuite/gdc.test/runnable/foreach2.d
! 040e4fa767a7fc2e188c99cbc64f3de7  gcc/testsuite/gdc.test/runnable/foreach3.d
! 2b8527464d5784704510e2c0b53be4e1  gcc/testsuite/gdc.test/runnable/foreach4.d
! 2eb363b5efaefe90b9b38cb9c89c7b03  gcc/testsuite/gdc.test/runnable/foreach5.d
! 1c477d55dafb5834a53ebb77dc0817cb  gcc/testsuite/gdc.test/runnable/funclit.d
! cc186d98b5221c7e2645debf5c0b95ec  gcc/testsuite/gdc.test/runnable/functype.d
  976a8be8b48b1d50d5b38d829a14e5c5  gcc/testsuite/gdc.test/runnable/future.d
! 8ba368ec10a84a41af028179c76c4879  gcc/testsuite/gdc.test/runnable/hello.d
! a83062fb959aeeb5cf87796be147fa84  gcc/testsuite/gdc.test/runnable/helloUTF8.d
  92368d5b6d3c89f59b0e43d8dd40c626  gcc/testsuite/gdc.test/runnable/ice10086a.d
  24beae18ca9f9cb8a07657669d33496b  gcc/testsuite/gdc.test/runnable/ice10086b.d
  e2c68cb85bc6e5c362db337fa60853dc  gcc/testsuite/gdc.test/runnable/ice10857.d
! 213dce80c5b05af9122e50fc8aa1d736  gcc/testsuite/gdc.test/runnable/ice15030.d
! 68dedff213dc0c26ebf12cf3d400db49  gcc/testsuite/gdc.test/runnable/ice15138.d
! 8e7fb295d4496318fbdae2cf5181e1a8  gcc/testsuite/gdc.test/runnable/ice15176.d
! 500b3b222fb16eca57daf344179cbdf9  gcc/testsuite/gdc.test/runnable/ice15200.d
! 5aadde39caf3871cecbaf4c8000371d8  gcc/testsuite/gdc.test/runnable/ice21696.d
  e5871ac8d80f4ab28dc0d9900e8c84d4  gcc/testsuite/gdc.test/runnable/ice4481.d
! 839b279d8972163cf8fbbe5984e843ed  gcc/testsuite/gdc.test/runnable/ifti.d
! b2a638fd59c70c6028ce9833be90e9de  gcc/testsuite/gdc.test/runnable/implicit.d
! 5aa04b8594a3a8247517ccd21012fa33  gcc/testsuite/gdc.test/runnable/imports/A16a.d
! 6777d174c4a53a93a3232b69f950410c  gcc/testsuite/gdc.test/runnable/imports/Other.d
  5549289e20c256bd7b6bab2b07484a85  gcc/testsuite/gdc.test/runnable/imports/a11447.d
  8d4c0595260b2e343ec3b0c955e015d1  gcc/testsuite/gdc.test/runnable/imports/a12010.d
! 687b4c6e8e86c7a4cf30990f8691962f  gcc/testsuite/gdc.test/runnable/imports/a12037.d
  bdf70cb80787a143707aac3fb009c5dc  gcc/testsuite/gdc.test/runnable/imports/a12874.d
  c0a596cba62cb0dec9eea21f70aa38c3  gcc/testsuite/gdc.test/runnable/imports/a14267.d
  db375212dd625de343ba4223733d8817  gcc/testsuite/gdc.test/runnable/imports/a14992.d
  837a05873eeab5f95fe60ec197cf7a1a  gcc/testsuite/gdc.test/runnable/imports/a15030.d
! f62fd0c47bc1b21fde531468c054e82d  gcc/testsuite/gdc.test/runnable/imports/a15079.d
  dac5c65be8615fc894a766af0bcbc416  gcc/testsuite/gdc.test/runnable/imports/a17a.d
! 4c92c96fdf17a0bf5c7960d458241966  gcc/testsuite/gdc.test/runnable/imports/a18a.d
! b6587d78fd26cb662b8918610d262d31  gcc/testsuite/gdc.test/runnable/imports/a19a.d
  25c993390d40e050664ea51441776ba9  gcc/testsuite/gdc.test/runnable/imports/a20a.d
! 942e3465cecb2061f3e0f50247447bde  gcc/testsuite/gdc.test/runnable/imports/a21a.d
  82b8b77a4b5db3f8dda26142c4d4de00  gcc/testsuite/gdc.test/runnable/imports/a7595.d
  bb0504db0e2974e4a45ea1d9c30f6e06  gcc/testsuite/gdc.test/runnable/imports/a9546.d
  72c7d0c30f3a8a6462944e4b17e3a36b  gcc/testsuite/gdc.test/runnable/imports/a9741.d
+ 4119866e4eb727cf4e5f53f912342d60  gcc/testsuite/gdc.test/runnable/imports/another_module_with_tests.d
  2c0a6bfda5079af6a913ab0814829475  gcc/testsuite/gdc.test/runnable/imports/b11447.d
  5037a44baf29fcf0c6b6bca265608b1c  gcc/testsuite/gdc.test/runnable/imports/b15030.d
  36df281082673182caaaaee813023694  gcc/testsuite/gdc.test/runnable/imports/b26a.d
  d0d720c2b6fe61c0c1643ab478853a6a  gcc/testsuite/gdc.test/runnable/imports/bar10378.d
  b52d69f335e16e4edd56afaa065cbeed  gcc/testsuite/gdc.test/runnable/imports/bug10425.d
! e2517bde830934f20af3c878e1ae2e2a  gcc/testsuite/gdc.test/runnable/imports/bug846.d
  954d8cb9972a1ed42ac4acc0598037ea  gcc/testsuite/gdc.test/runnable/imports/c11447.d
! 14858bc0d81fa2d6ba364909ce03b3e0  gcc/testsuite/gdc.test/runnable/imports/c22a.d
! 7d490863dda67cc3884e44fc5b69ac2e  gcc/testsuite/gdc.test/runnable/imports/c22b.d
  e453ef25d3cb67e2414b4ad6550053ab  gcc/testsuite/gdc.test/runnable/imports/circularA.d
  9338d91093c57ec6d10e65408ac7fa06  gcc/testsuite/gdc.test/runnable/imports/extern1a.d
  9c0befb5e86b864c8b026899443b7556  gcc/testsuite/gdc.test/runnable/imports/ice10086x.d
  111f044e495dcef07b1b835631a21e46  gcc/testsuite/gdc.test/runnable/imports/ice10086y.d
*************** cb9ab6fe21070a218335147478291027  gcc/te
*** 72450,72455 ****
--- 77263,77269 ----
  a688286886ef47916b6432c5bbf64c47  gcc/testsuite/gdc.test/runnable/imports/ice15200b.d
  5c31c0a687761ef551cb8bb9d4a965cd  gcc/testsuite/gdc.test/runnable/imports/ice4481a.d
  0bc885dd3769b66c2f64fd38a06959e0  gcc/testsuite/gdc.test/runnable/imports/ice4481b.d
+ 74242c5fe048c276a07b28120f26bbaa  gcc/testsuite/gdc.test/runnable/imports/imp22624.c
  35ebabf1e65977d51fc57b3029c82a54  gcc/testsuite/gdc.test/runnable/imports/inc11239.d
  55b146ef5f7d3816eddddae776ea1e88  gcc/testsuite/gdc.test/runnable/imports/link10920a.d
  f65fa81a7d44f704110fe3fb64b12464  gcc/testsuite/gdc.test/runnable/imports/link11069x.d
*************** f65fa81a7d44f704110fe3fb64b12464  gcc/te
*** 72457,72463 ****
  77ba31376d0ba97fb5dc607e3c148034  gcc/testsuite/gdc.test/runnable/imports/link11069z.d
  ca7ef620c436dc1d4c0b43d1883730c3  gcc/testsuite/gdc.test/runnable/imports/link11127a.d
  9cb132713733804c0bb1737722ec7853  gcc/testsuite/gdc.test/runnable/imports/link11395a.d
! a39e544e5494085f0db22431cfe09028  gcc/testsuite/gdc.test/runnable/imports/link12144a.d
  cc2ea3b155d5eb748182dedb676f4609  gcc/testsuite/gdc.test/runnable/imports/link13043a.d
  3e484b9d742ea151c6326908c7ac0ae2  gcc/testsuite/gdc.test/runnable/imports/link13394a.d
  90c1234bf580c1684645eadeb7faa9de  gcc/testsuite/gdc.test/runnable/imports/link13400a.d
--- 77271,77277 ----
  77ba31376d0ba97fb5dc607e3c148034  gcc/testsuite/gdc.test/runnable/imports/link11069z.d
  ca7ef620c436dc1d4c0b43d1883730c3  gcc/testsuite/gdc.test/runnable/imports/link11127a.d
  9cb132713733804c0bb1737722ec7853  gcc/testsuite/gdc.test/runnable/imports/link11395a.d
! 34f96390a422eb7ca3765572f53ae978  gcc/testsuite/gdc.test/runnable/imports/link12144a.d
  cc2ea3b155d5eb748182dedb676f4609  gcc/testsuite/gdc.test/runnable/imports/link13043a.d
  3e484b9d742ea151c6326908c7ac0ae2  gcc/testsuite/gdc.test/runnable/imports/link13394a.d
  90c1234bf580c1684645eadeb7faa9de  gcc/testsuite/gdc.test/runnable/imports/link13400a.d
*************** f94e55d34f600c8a37702f03224065e2  gcc/te
*** 72475,72492 ****
  29c06f2a2dbf54e3229ec7a04af26d09  gcc/testsuite/gdc.test/runnable/imports/link2644a.d
  dfdcb430373dc081cac683c5640e74db  gcc/testsuite/gdc.test/runnable/imports/link2644b.d
  1893b8935db7908e182434c25fc44555  gcc/testsuite/gdc.test/runnable/imports/link2644c.d
! b8d10627086fd5b43e1944a406e92ddb  gcc/testsuite/gdc.test/runnable/imports/link7745b.d
  667d6ab05625241ab9df98c4b8b1fdf6  gcc/testsuite/gdc.test/runnable/imports/link8023b.d
  96838fc382f31bb435fcf57bc09c2080  gcc/testsuite/gdc.test/runnable/imports/link9571a.d
  cf9a1c5735b37f484eb37964a646d6fd  gcc/testsuite/gdc.test/runnable/imports/linktypeinfo_file.d
! 13d4fcd9c3183a0420167eef164ecc14  gcc/testsuite/gdc.test/runnable/imports/m1a.d
  8708dbc2b62604591d2a6b42d0b44c51  gcc/testsuite/gdc.test/runnable/imports/m8668a.d
  8d88ddacf7255a87a42006fe3e430681  gcc/testsuite/gdc.test/runnable/imports/m8668b.d
  f9f5331f0cb4ef2237a257cc19972bce  gcc/testsuite/gdc.test/runnable/imports/m8668c.d
  01c0ae2d3d5a60cef03ad7ccb99b68d1  gcc/testsuite/gdc.test/runnable/imports/mangle10077.d
  cb452631c311ff185975ed99bde00241  gcc/testsuite/gdc.test/runnable/imports/mod2.d
  833bf7270986a5b44ab97cb3ff91e5a6  gcc/testsuite/gdc.test/runnable/imports/ovs1528a.d
  7e3d3940b6985eaf7173938ae0aa86ff  gcc/testsuite/gdc.test/runnable/imports/ovs1528b.d
  61da9b8c6eb2a3e3db927c8bb97c019f  gcc/testsuite/gdc.test/runnable/imports/std11069array.d
  53353eeae42ec307f3b4790b81e82922  gcc/testsuite/gdc.test/runnable/imports/std11069container.d
  68ef023d5d44861c83134b3c05db260a  gcc/testsuite/gdc.test/runnable/imports/std11069range.d
--- 77289,77308 ----
  29c06f2a2dbf54e3229ec7a04af26d09  gcc/testsuite/gdc.test/runnable/imports/link2644a.d
  dfdcb430373dc081cac683c5640e74db  gcc/testsuite/gdc.test/runnable/imports/link2644b.d
  1893b8935db7908e182434c25fc44555  gcc/testsuite/gdc.test/runnable/imports/link2644c.d
! d4f70af46e7fc2241a27db9cb071e143  gcc/testsuite/gdc.test/runnable/imports/link7745b.d
  667d6ab05625241ab9df98c4b8b1fdf6  gcc/testsuite/gdc.test/runnable/imports/link8023b.d
  96838fc382f31bb435fcf57bc09c2080  gcc/testsuite/gdc.test/runnable/imports/link9571a.d
  cf9a1c5735b37f484eb37964a646d6fd  gcc/testsuite/gdc.test/runnable/imports/linktypeinfo_file.d
! a9247d1c5ca1b8d76074cd64355b5804  gcc/testsuite/gdc.test/runnable/imports/m1a.d
  8708dbc2b62604591d2a6b42d0b44c51  gcc/testsuite/gdc.test/runnable/imports/m8668a.d
  8d88ddacf7255a87a42006fe3e430681  gcc/testsuite/gdc.test/runnable/imports/m8668b.d
  f9f5331f0cb4ef2237a257cc19972bce  gcc/testsuite/gdc.test/runnable/imports/m8668c.d
  01c0ae2d3d5a60cef03ad7ccb99b68d1  gcc/testsuite/gdc.test/runnable/imports/mangle10077.d
  cb452631c311ff185975ed99bde00241  gcc/testsuite/gdc.test/runnable/imports/mod2.d
+ 6448f2440740e1334549739876dd8af1  gcc/testsuite/gdc.test/runnable/imports/module_with_tests.d
  833bf7270986a5b44ab97cb3ff91e5a6  gcc/testsuite/gdc.test/runnable/imports/ovs1528a.d
  7e3d3940b6985eaf7173938ae0aa86ff  gcc/testsuite/gdc.test/runnable/imports/ovs1528b.d
+ 5c314ae1e95f9a1f188468e78aafb5c6  gcc/testsuite/gdc.test/runnable/imports/pubprivtmpla.d
  61da9b8c6eb2a3e3db927c8bb97c019f  gcc/testsuite/gdc.test/runnable/imports/std11069array.d
  53353eeae42ec307f3b4790b81e82922  gcc/testsuite/gdc.test/runnable/imports/std11069container.d
  68ef023d5d44861c83134b3c05db260a  gcc/testsuite/gdc.test/runnable/imports/std11069range.d
*************** d2a04fa327ce4a8e9c144d1434959324  gcc/te
*** 72494,72877 ****
  b25207a485c2e02b73d5a83cfb31bbd9  gcc/testsuite/gdc.test/runnable/imports/std11863bitmanip.d
  9ff762a4b8241ec2306741e5d87643f5  gcc/testsuite/gdc.test/runnable/imports/std11863conv.d
  d003d3880532714efc57d62374579d53  gcc/testsuite/gdc.test/runnable/imports/std11863format.d
  ef42d436cd580e9e8cfd56954ec096ac  gcc/testsuite/gdc.test/runnable/imports/std12010container.d
! b593348ba629d95f3e2140b1213d1224  gcc/testsuite/gdc.test/runnable/imports/std15017variant.d
  15d1e917fbc17c549e2b4723b359f7f3  gcc/testsuite/gdc.test/runnable/imports/std15021conv.d
  7067241491a24372aef9c52a9fc72fd3  gcc/testsuite/gdc.test/runnable/imports/std15021format.d
  0d40bf9565576a0caf96bd6f2c4a4bd4  gcc/testsuite/gdc.test/runnable/imports/std15030algo.d
  0a4bcc5ab0338be41359c662d96774a5  gcc/testsuite/gdc.test/runnable/imports/template13478a.d
  10bd984d633d36ab903c949cb584bec9  gcc/testsuite/gdc.test/runnable/imports/template13478b.d
! cf75510c3d300ca200d95b6ef649d21b  gcc/testsuite/gdc.test/runnable/imports/template2962a.d
! f0a88a4af2dd65871239e79286e3a4c3  gcc/testsuite/gdc.test/runnable/imports/template_ovs1.d
! dd258e51622e27044274268f905d9659  gcc/testsuite/gdc.test/runnable/imports/template_ovs2.d
! cf16e2c9ccc7d2f313574935d60c30c8  gcc/testsuite/gdc.test/runnable/imports/template_ovs3.d
! ed527a060986571b56b128fe62267725  gcc/testsuite/gdc.test/runnable/imports/test10441b.d
! 8dcf5be37f023b68d0c2776f4e47ffc5  gcc/testsuite/gdc.test/runnable/imports/test10441c.d
  c2936f1e2dfad4952ac027ffb029f917  gcc/testsuite/gdc.test/runnable/imports/test10573a.d
  b0b287b9c1345d279f14a509b9473fe6  gcc/testsuite/gdc.test/runnable/imports/test10736a.d
  16f7ae7a23cb4d90417952d73a918b12  gcc/testsuite/gdc.test/runnable/imports/test10736b.d
  be039b39e87f9f71053bc8eb7171dfce  gcc/testsuite/gdc.test/runnable/imports/test10736c.d
! 9cfa856ae836fa875509972a44e3cd21  gcc/testsuite/gdc.test/runnable/imports/test10a.d
! 48c2f2a1b654b2a3ac7616f165b72519  gcc/testsuite/gdc.test/runnable/imports/test11039b.d
! 44b8a2cf696c1518cdcff99f257fe6d9  gcc/testsuite/gdc.test/runnable/imports/test11745b.d
! 9914edaea0f01d1eec6fa9d0850c4989  gcc/testsuite/gdc.test/runnable/imports/test11931a.d
  934da8922eccd2c34e896d771bffa3ba  gcc/testsuite/gdc.test/runnable/imports/test11931b.d
  180bc1b50825604417cd1878c35df4d0  gcc/testsuite/gdc.test/runnable/imports/test11931c.d
! 3aec4e1b4922c5726d8b05fa2bd54026  gcc/testsuite/gdc.test/runnable/imports/test11931d.d
! 211e7101e6bf1139c3f2ebcd2cfe58f8  gcc/testsuite/gdc.test/runnable/imports/test13a.d
  d84a257c80c475fcc45467e5e08b86d2  gcc/testsuite/gdc.test/runnable/imports/test14901a.d
  076bc4058af8260454ea7f02075d7d10  gcc/testsuite/gdc.test/runnable/imports/test14901b.d
  b7f68b4c61d33b5c5d3cbdbf1c383d1f  gcc/testsuite/gdc.test/runnable/imports/test14901c.d
  dbeebef5b688e48a4d93de2bac55cb36  gcc/testsuite/gdc.test/runnable/imports/test14901d.d
  cb29f0c65040e0b005ddff6f5e73f135  gcc/testsuite/gdc.test/runnable/imports/test18322import.d
  38a5c5a8961efeb002ed2bd91995c376  gcc/testsuite/gdc.test/runnable/imports/test21a.d
! 586de6d2bde9ed603ef8d19f35438e4c  gcc/testsuite/gdc.test/runnable/imports/test24a.d
! a26de45a8e0548d9fafee9b263135bf3  gcc/testsuite/gdc.test/runnable/imports/test24b.d
! 7773dabdd174e3ddf2e003b2cf909987  gcc/testsuite/gdc.test/runnable/imports/test27a.d
! 86afd59fd041cb5efc840dc22a2e0bd3  gcc/testsuite/gdc.test/runnable/imports/test29a.d
  3d5983a43c91857119f23d4c27e299e5  gcc/testsuite/gdc.test/runnable/imports/test29b.d
! 7fa253421cf4763e8baf66ee2899f83e  gcc/testsuite/gdc.test/runnable/imports/test31a.d
! bc112bb9e87ab63f60940750af2ed3ad  gcc/testsuite/gdc.test/runnable/imports/test32a.d
! 76202d269852f92c6687bc4e760a7900  gcc/testsuite/gdc.test/runnable/imports/test35a.d
  55306335fdf9fc2c55020c5b68351534  gcc/testsuite/gdc.test/runnable/imports/test38a.d
! a825a29e21148479e16754ef5cf61732  gcc/testsuite/gdc.test/runnable/imports/test39a.d
  cc101b6e3ae0e2fb628be979d741b6de  gcc/testsuite/gdc.test/runnable/imports/test3a.d
  34074d1d581d43535407d03fd47c815b  gcc/testsuite/gdc.test/runnable/imports/test3b.d
! 11b3a14a8b62f90aa17238457f9b9009  gcc/testsuite/gdc.test/runnable/imports/test40a.d
! 2a0c703c8aa624132d3a1330ca27748c  gcc/testsuite/gdc.test/runnable/imports/test41a.d
  4023e507a15eba682d34c70c551b441d  gcc/testsuite/gdc.test/runnable/imports/test44a.d
! 12295a2f121b8284e1e2b4ed5fec0d2f  gcc/testsuite/gdc.test/runnable/imports/test45a.d
! 0f926e82becbad5846b93387b4169ca7  gcc/testsuite/gdc.test/runnable/imports/test45b.d
  8a11cdb486a6b04e1c486a2c4bd5d0eb  gcc/testsuite/gdc.test/runnable/imports/test46a.d
! 2ab5889629cb34ebb6f889ed86c0ab19  gcc/testsuite/gdc.test/runnable/imports/test46b.d
! d32aaa9d65f504de2947b1ab6ca8f089  gcc/testsuite/gdc.test/runnable/imports/test46c.d
  6a4c693336d18b9ca30060c0d231a202  gcc/testsuite/gdc.test/runnable/imports/test48a.d
! 7c9440537c88776f4e8270281a10b71f  gcc/testsuite/gdc.test/runnable/imports/test49a.d
! d4a6493fbf02e6e07ff530ac7ffae33f  gcc/testsuite/gdc.test/runnable/imports/test57a.d
! 1fd9ed2a3b1e6aae4c51648b98a7afb5  gcc/testsuite/gdc.test/runnable/imports/test57b.d
! bd34ddb120f91984f33353b23f726d88  gcc/testsuite/gdc.test/runnable/imports/test58a.d
  37148b7a0e82c2dc4d8d95d39f2548b3  gcc/testsuite/gdc.test/runnable/imports/test61a.d
  9c9d815089d93d3cb6661975236c4381  gcc/testsuite/gdc.test/runnable/imports/test7494a.d
  811673192b36404d79d2482e73a8c55e  gcc/testsuite/gdc.test/runnable/imports/test8997a.d
  dd08e2b659e358af596b660615512b14  gcc/testsuite/gdc.test/runnable/imports/test9271a.d
  98147d4c61fc6d5a0d245bca3f63c146  gcc/testsuite/gdc.test/runnable/imports/testkwd_file.d
  94b8568f2076787bc0af8d830c0b8410  gcc/testsuite/gdc.test/runnable/imports/testmangle.d
! 0f5e933be7ea67c562affaaa4f87664b  gcc/testsuite/gdc.test/runnable/imports/testminitAA.d
! b3e37cdc05a46ce22dd8f9b2cee8dc82  gcc/testsuite/gdc.test/runnable/imports/testminitBB.d
  ef5abef9e8e1f1cbe559761b2e65adef  gcc/testsuite/gdc.test/runnable/imports/testmod1a.d
! 003b72a62bf1226fdbc83606415b68b1  gcc/testsuite/gdc.test/runnable/imports/testmod1b.d
! e7fc8bf23a33b4991a03a2f995e19a6c  gcc/testsuite/gdc.test/runnable/imports/testmod2a.d
! 46888e22fae3f461273349f5c9b40e3a  gcc/testsuite/gdc.test/runnable/imports/tlsa.d
  a47415086a9bb252d0ea2845c8ef8ae8  gcc/testsuite/gdc.test/runnable/imports/traits_getUnitTests_import.d
  e4dbcfe0b1ee76ce49711195f5057409  gcc/testsuite/gdc.test/runnable/imports/ufcs5a.d
  c84519b4071a05841382b567953be0b4  gcc/testsuite/gdc.test/runnable/imports/ufcs5b.d
  1eb788b52d7a55d4c36cf1adab17983a  gcc/testsuite/gdc.test/runnable/imports/ufcs5c.d
  eca2528a4b2f620d2c38d1abb893652c  gcc/testsuite/gdc.test/runnable/imports/ufcs5d.d
  25e6928fcac8b8805188099fa463c745  gcc/testsuite/gdc.test/runnable/imports/ufcs5e.d
! f619bc44586b8f31c30aa2333984c037  gcc/testsuite/gdc.test/runnable/inline.d
  f7d709d852581fa8afa0dd0d20f5b2a3  gcc/testsuite/gdc.test/runnable/inline14560.d
! 1ce86e2b2367beba6d7f73d218400208  gcc/testsuite/gdc.test/runnable/inner.d
! 2135482c9c4e28e5ca5c0cd3f1fa5cf0  gcc/testsuite/gdc.test/runnable/interface.d
  ca24fa67843e9b5f04f6e36b4156cd09  gcc/testsuite/gdc.test/runnable/interface1.d
! a6d97260056023925c365ca946785f56  gcc/testsuite/gdc.test/runnable/interface2.d
! 2407b9b13a96d9a0d1a0ca6c9907aa53  gcc/testsuite/gdc.test/runnable/interface3.d
! 8072456884604f160945b0484fa1d219  gcc/testsuite/gdc.test/runnable/interpret.d
! 44d581e4ea1149f2833ca1c0e41af744  gcc/testsuite/gdc.test/runnable/interpret2.d
! ab921221e5ac9c8ade727a921a5c03b9  gcc/testsuite/gdc.test/runnable/issue8671.d
! cc962d1a406717106bcac2215837a0a7  gcc/testsuite/gdc.test/runnable/lazy.d
  39e7e24e679fa283298fb63c41528a27  gcc/testsuite/gdc.test/runnable/ldc_github_1677.d
! f0b8845ea92059153ccc8580ce0ebaa6  gcc/testsuite/gdc.test/runnable/lexer.d
! 256dcf104e7fc7dcd3ae1f3f5ec34eaa  gcc/testsuite/gdc.test/runnable/link10425.d
  6f384d861e8f7b136caa11a726124bb8  gcc/testsuite/gdc.test/runnable/link10920.d
! 26e709a1ae498695213bf407bcd72468  gcc/testsuite/gdc.test/runnable/link11069a.d
! f41e87e784eed3bee2f8a0f1ebc5d937  gcc/testsuite/gdc.test/runnable/link11069b.d
! 258c8de9c1dd9e6519ec5187a6271c23  gcc/testsuite/gdc.test/runnable/link11127.d
! c2ee2a1f605bdbc8329c9f4b8f733d52  gcc/testsuite/gdc.test/runnable/link11395.d
  df3b942fb4defa294277f6871f0180c9  gcc/testsuite/gdc.test/runnable/link11931.d
! 510ab145ed11cc5821b49af0bb9d688e  gcc/testsuite/gdc.test/runnable/link12010.d
! 46c15311da1c8170224c9979c07c2fdd  gcc/testsuite/gdc.test/runnable/link12037.d
  7a9afe90633dbb637762824308bcee98  gcc/testsuite/gdc.test/runnable/link12144.d
! cbaba0fad7e5f4b4e04ddf7a5f57dd60  gcc/testsuite/gdc.test/runnable/link13043.d
! d016d6a2f3df9ed60fd678e4dce5bc1b  gcc/testsuite/gdc.test/runnable/link13350.d
! c064944fd9ef0815f463db699d5c4234  gcc/testsuite/gdc.test/runnable/link13394.d
! b5bd4ad0a072414af091c3d46ad893bf  gcc/testsuite/gdc.test/runnable/link13400.d
! 907751e0f50c35e519b37f90caf34430  gcc/testsuite/gdc.test/runnable/link13415.d
  2e215cbb073af63f276929306ab29092  gcc/testsuite/gdc.test/runnable/link13843.d
! 4950e0bbac4b20f31eed51edf2c884b3  gcc/testsuite/gdc.test/runnable/link14074a.d
! 9d206ab831e2dc0239d29194e51743c0  gcc/testsuite/gdc.test/runnable/link14074b.d
  23d617df17e86a45d5dbf039108fa265  gcc/testsuite/gdc.test/runnable/link14425.d
! 13ca63dbf1456f23a4d78cd99e1ab0b8  gcc/testsuite/gdc.test/runnable/link14541.d
! 10e15b1a5ef8bd0ce7fc5f98f788e156  gcc/testsuite/gdc.test/runnable/link14588.d
! ac71d770f566f776338e85e9130ca5b8  gcc/testsuite/gdc.test/runnable/link14814.d
! febb38f88915dcad32b96c748ca372d5  gcc/testsuite/gdc.test/runnable/link14992.d
! 19786a7d601ee619f7cad8129ba2ead3  gcc/testsuite/gdc.test/runnable/link15017.d
  8a0529dcc27e277c63f3cc54efb7ba1f  gcc/testsuite/gdc.test/runnable/link15021.d
  c1ccbb77e86bce621b967e7caacfe287  gcc/testsuite/gdc.test/runnable/link15149.d
  3debfb842852beb2042204839cf34b6d  gcc/testsuite/gdc.test/runnable/link2500.d
  337a4a44ed2a8e23873930099d24e3f4  gcc/testsuite/gdc.test/runnable/link2644.d
! 141455fef78d305fe3e3820d692f4d34  gcc/testsuite/gdc.test/runnable/link6574.d
! 97d22e9edada311538bc1dbb0d577d88  gcc/testsuite/gdc.test/runnable/link7745.d
  470b1566da61f13c8e4ab9f269f97d7e  gcc/testsuite/gdc.test/runnable/link7966.d
! 05cc741dc6110c98a1b53b90bce3d3a0  gcc/testsuite/gdc.test/runnable/link8023.d
! 9aae69ef6d58c6ca39ccb355c0461972  gcc/testsuite/gdc.test/runnable/link9571.d
! ca7670be76017ad4ec8d59f894f62a6e  gcc/testsuite/gdc.test/runnable/linktypeinfo.d
! 7582b82f8e64127af756955e040242f1  gcc/testsuite/gdc.test/runnable/literal.d
! 5d210999b2a210be30c38cef8d00ce62  gcc/testsuite/gdc.test/runnable/loopunroll.d
! cadfe620c0b1c30a83813e79959c6c48  gcc/testsuite/gdc.test/runnable/m1.d
! 59cec3b67f84c8a8d21171f11b662bcc  gcc/testsuite/gdc.test/runnable/manboy.d
! 36c1189db2f94b41100cb212a6e176f6  gcc/testsuite/gdc.test/runnable/mangle.d
! 481f0519a109d00282aff011127ab089  gcc/testsuite/gdc.test/runnable/mars1.d
! a4bee21a020ea290806504d1b77743ea  gcc/testsuite/gdc.test/runnable/mixin1.d
! 9f3fce3f251075eed9ef3e7f272fefd2  gcc/testsuite/gdc.test/runnable/mixin2.d
! 909a47df894aefd20f77dfd8a9004146  gcc/testsuite/gdc.test/runnable/mod1.d
! 9b6637d64297931c356c7ab5b838b715  gcc/testsuite/gdc.test/runnable/nan.d
! d47b03df5d8080d7a16ee508627212ff  gcc/testsuite/gdc.test/runnable/nested.d
! 5f00a78fc594e96db08f0d82410bb208  gcc/testsuite/gdc.test/runnable/newdel.d
! 5cf0177db7cfdbec580294a2afdc7db3  gcc/testsuite/gdc.test/runnable/nogc.d
! e5afe569d31b9236df764ffbfd07d638  gcc/testsuite/gdc.test/runnable/noreturn1.d
! 0016f1e4e03d4375e62b6adfb2ddac72  gcc/testsuite/gdc.test/runnable/nulltype.d
! f2b9fc39212d0c8d7f948e7eefac7c42  gcc/testsuite/gdc.test/runnable/opdisp.d
! b1e4162b30476fb6c7fa9b493eff1dd2  gcc/testsuite/gdc.test/runnable/opover.d
! 0173e551bf3502f8d1054597ad244c50  gcc/testsuite/gdc.test/runnable/opover2.d
! 56c254e25b031f3d2fb6fde078bc6cdc  gcc/testsuite/gdc.test/runnable/opover3.d
! 7708852505354c5eed7ec2bac66ee629  gcc/testsuite/gdc.test/runnable/overload.d
! ce0513a8a733c1c29954074996a074f3  gcc/testsuite/gdc.test/runnable/pi.d
  671e921d7ba20a1141f56c07be62b586  gcc/testsuite/gdc.test/runnable/polysemous.d
! bab36bd9cac1cbb99b6818cfe099b72a  gcc/testsuite/gdc.test/runnable/printargs.d
! 2856f3883c343acb005f170b83f3edd7  gcc/testsuite/gdc.test/runnable/property.d
! 60c51d38e2d8ce15dc64dc91f05fd4b5  gcc/testsuite/gdc.test/runnable/property2.d
! 471bfd5da95d444a3c176965850e5ece  gcc/testsuite/gdc.test/runnable/runnable.exp
! 7e9747abdc0360b94770471057a83ddb  gcc/testsuite/gdc.test/runnable/s2ir.d
! 4e67668c8a7ee44b41da71d8a6e695b4  gcc/testsuite/gdc.test/runnable/sctor.d
! ab63ce79d07ef7f9970f059d416ae159  gcc/testsuite/gdc.test/runnable/sdtor.d
  171900d6ce544bb242e22a8416e306ad  gcc/testsuite/gdc.test/runnable/staticforeach.d
! 799a79924a4d25ed330a10b03d20ecf7  gcc/testsuite/gdc.test/runnable/statictor.d
! 3ca45b8a013175b6b95a530d5a6984bc  gcc/testsuite/gdc.test/runnable/stress.d
! 33f57d7831e017701defb0f48597960d  gcc/testsuite/gdc.test/runnable/structlit.d
! 2e28c5702fbc42f4f1cefe429897a555  gcc/testsuite/gdc.test/runnable/template1.d
! 8adf483aec3b24a9dd83558d8b9bdafb  gcc/testsuite/gdc.test/runnable/template13478.d
! e198ed86ba26a47d91d4b5e4db3e55fb  gcc/testsuite/gdc.test/runnable/template2.d
! ae3219fb0e59a1a22a8d0754b3b578f9  gcc/testsuite/gdc.test/runnable/template2962.d
  281244ea9f67146dc16caf6a24dd1e9e  gcc/testsuite/gdc.test/runnable/template3.d
! a6e52bdeb556a215dde911e834ffeab4  gcc/testsuite/gdc.test/runnable/template4.d
  a2b15bcca5ded36d826ccac559bfe9fc  gcc/testsuite/gdc.test/runnable/template8.d
! 6f1b30bdaa1acf2b1410df7980f9e04d  gcc/testsuite/gdc.test/runnable/template9.d
! fba2538fa071a27eea05ac9cf3eeed88  gcc/testsuite/gdc.test/runnable/test10.d
! 18be53836687e198aef907b6191adf6f  gcc/testsuite/gdc.test/runnable/test10378.d
! 9ddeb42d07cb78ac4998b33945ce20cd  gcc/testsuite/gdc.test/runnable/test10441.d
  e18bc12e62affabc6544f2dbb5151592  gcc/testsuite/gdc.test/runnable/test10573.d
! 10de3334a376fd00bc09a73870ac31ac  gcc/testsuite/gdc.test/runnable/test10736.d
! df13277f0fe7137ea320f3b104b04ba4  gcc/testsuite/gdc.test/runnable/test10942.d
! bf7bec35c09af7f408bfec2897dcaf31  gcc/testsuite/gdc.test/runnable/test11.d
! f91c4e0b39d4c74a499b09c062487b93  gcc/testsuite/gdc.test/runnable/test11039.d
! 535d5fb2beb88ac74204b94a49c20eed  gcc/testsuite/gdc.test/runnable/test11239.d
! e7a3ccb9b1283ddc01f7aceb5e05aaf0  gcc/testsuite/gdc.test/runnable/test11447a.d
! c950401e8254e2fef34aa7dad20b0ad4  gcc/testsuite/gdc.test/runnable/test11447b.d
! a3f97d6f58da6d6d6482c480b6fce083  gcc/testsuite/gdc.test/runnable/test11447c.d
  88295e6c0c689cfc4c66c329993aa3b8  gcc/testsuite/gdc.test/runnable/test11745.d
! f4314461b2fd43835fdeb1112c7a2717  gcc/testsuite/gdc.test/runnable/test11863.d
! 58b57a35572f47d361b66de234354c18  gcc/testsuite/gdc.test/runnable/test12.d
  24bffeb65b6c7e6a676474a93881e38b  gcc/testsuite/gdc.test/runnable/test12197.d
  16a07b686ac8b8e2491612e30ac0c4a3  gcc/testsuite/gdc.test/runnable/test12874.d
  6573ec68917e307cc116d1430c8f9f6f  gcc/testsuite/gdc.test/runnable/test13.d
  c127f917319e0c5b2681b84b2119629d  gcc/testsuite/gdc.test/runnable/test13504.d
  effc757efd459e4515ba09f1a28b7f80  gcc/testsuite/gdc.test/runnable/test13613.d
  6d56b76e8ad5c4e191b11e22fdb8a97d  gcc/testsuite/gdc.test/runnable/test13944.d
  d6bfcb0ab1afec471863af71a1556923  gcc/testsuite/gdc.test/runnable/test14613.d
! 662e37a7827d780ab5057f40ca0483bb  gcc/testsuite/gdc.test/runnable/test14874.d
! e65d3ce0470fe2725797f6e3ab60a438  gcc/testsuite/gdc.test/runnable/test14901.d
  5d698de30965398370cd581d6c718e53  gcc/testsuite/gdc.test/runnable/test14903.d
! 9e0bf69bf70725ddbeca3cc7d56a81ab  gcc/testsuite/gdc.test/runnable/test15.d
! d16be4e16f5272e31eab0b5e36b992eb  gcc/testsuite/gdc.test/runnable/test15079.d
  bfd8e27d98f571b2264d7f7760bbd5c7  gcc/testsuite/gdc.test/runnable/test15913.d
  f66ffcddad16ea2ae49fd701993a5eaa  gcc/testsuite/gdc.test/runnable/test16.d
! 20068d37c6265fc3508b28beda87f81c  gcc/testsuite/gdc.test/runnable/test16115.d
  ac6af826695eca519f3bfd140e0989f6  gcc/testsuite/gdc.test/runnable/test16640.d
  ddf97970f8dabddfe160a6638562ba7f  gcc/testsuite/gdc.test/runnable/test16980.d
! 174c6dda09e326ec634aae57b497f481  gcc/testsuite/gdc.test/runnable/test17.d
! 0b605dd07027cfa846950ae5d4e17ba7  gcc/testsuite/gdc.test/runnable/test17072.d
! a8689a639669b0a19dad584fd5012058  gcc/testsuite/gdc.test/runnable/test17073.d
! 30a4641c6555f000b75095ef91657500  gcc/testsuite/gdc.test/runnable/test17338.d
! afca543a5806d8a15207ef6bd9a97d4b  gcc/testsuite/gdc.test/runnable/test17373.d
! f377c873bd54a475fac4f2df6234cf6f  gcc/testsuite/gdc.test/runnable/test17684.d
  0e6077e1a2a30938d0b500ff8cc5b36b  gcc/testsuite/gdc.test/runnable/test17878.d
! da58a5c59d1bc68f36ecc7c97ccd905f  gcc/testsuite/gdc.test/runnable/test17899.d
  647c2508055709a027b3ba6c4c31e2c3  gcc/testsuite/gdc.test/runnable/test18322.d
! 5e47f3e221410affc20e1b2cd28ae38d  gcc/testsuite/gdc.test/runnable/test19.d
! d370be7de707dfc75ca94c0574846735  gcc/testsuite/gdc.test/runnable/test19734.d
! 2264a5862d45130f6cee309962f24427  gcc/testsuite/gdc.test/runnable/test19735.d
! f8eede5fbb2d68bfe59040289271da5b  gcc/testsuite/gdc.test/runnable/test20.d
! 47393c3b98be41daf4144638bb83bf80  gcc/testsuite/gdc.test/runnable/test21.d
! b216b8a139668e31ea727a6a009335e8  gcc/testsuite/gdc.test/runnable/test22.d
! 21786b4f90d081f679309d9f14fc649f  gcc/testsuite/gdc.test/runnable/test23.d
! fb4c3557e32a82809885e494b7b6a5db  gcc/testsuite/gdc.test/runnable/test24.d
! ccf03e68c851def34e3c94f39d78620a  gcc/testsuite/gdc.test/runnable/test27.d
! b12872740da418705add06eb5dbbe867  gcc/testsuite/gdc.test/runnable/test28.d
! 4926d2c3d922b4e8cd099c11f365175d  gcc/testsuite/gdc.test/runnable/test29.d
! a5e27485559aaaae7f3fc86ed457c8b0  gcc/testsuite/gdc.test/runnable/test3.d
! da30eb4de9648e3ad27e26679881aab7  gcc/testsuite/gdc.test/runnable/test30.d
! adbc9c8312e16e537aed8ead66d7e3fa  gcc/testsuite/gdc.test/runnable/test31.d
! c2153050f23f741f14244830b6b4a402  gcc/testsuite/gdc.test/runnable/test32.d
! 907f2450656025992b6999e9692b8545  gcc/testsuite/gdc.test/runnable/test34.d
! 605ede293d1872fdce76bbbc49650f22  gcc/testsuite/gdc.test/runnable/test3449.d
! 9868a3b8b5e7dc292d9768d23e34de0f  gcc/testsuite/gdc.test/runnable/test3574a.d
! 32c0c6c14d3ba20f51489b1b48008997  gcc/testsuite/gdc.test/runnable/test3574b.d
! 4aeb1bd572ff4c8cc77b2a26c70ed6e9  gcc/testsuite/gdc.test/runnable/test3574c.d
! e95e612fe543a6db7cc080a7df82f226  gcc/testsuite/gdc.test/runnable/test3574d.d
! 3d3011ad8e623fa60ee3d479be380b80  gcc/testsuite/gdc.test/runnable/test37.d
! 47c751276f72d4459c7015b8bf167086  gcc/testsuite/gdc.test/runnable/test38.d
! 6205184665b181012b78d497be4e6330  gcc/testsuite/gdc.test/runnable/test4.d
! 9b4c422f1c0a22c7567e1b58a44a7737  gcc/testsuite/gdc.test/runnable/test40.d
! cc56c3003e76162f2f92ee2b4bdf1500  gcc/testsuite/gdc.test/runnable/test41.d
! 22cac9cef35f10aaeba7795681d11213  gcc/testsuite/gdc.test/runnable/test42.d
! a8c277c83d726a2ffcda1046e08a6aa0  gcc/testsuite/gdc.test/runnable/test42a.d
! 884fc1fa85dc5727b996296d9e51ae85  gcc/testsuite/gdc.test/runnable/test435.d
! ae2da3539fea5a69c0c55eeb273a3d26  gcc/testsuite/gdc.test/runnable/test45.d
! c19dbddb2c0df06d24b6d1a578d1122e  gcc/testsuite/gdc.test/runnable/test46.d
! bd25915921a0a9b0607f30be6824601f  gcc/testsuite/gdc.test/runnable/test48.d
! d9bb703f9b3b199bbcc85b5af5868ec1  gcc/testsuite/gdc.test/runnable/test49.d
! 36cc404ecc53ab75b00af754193f27d9  gcc/testsuite/gdc.test/runnable/test5.d
! 6ce6cce2b1b29b6cdaceba04a05a15ac  gcc/testsuite/gdc.test/runnable/test52.d
! 24bb288451c94c54c0116185ee6fa321  gcc/testsuite/gdc.test/runnable/test5305.d
! d623284e85c31c4cac7ddd245668d3a6  gcc/testsuite/gdc.test/runnable/test57.d
  75dc25ea2dd1c4ed7aaa3dd5c4e8fcaf  gcc/testsuite/gdc.test/runnable/test58.d
  b10a12df0b791737d6f41f8c781c094d  gcc/testsuite/gdc.test/runnable/test5943.d
! 891899258b1c65a52489b67de23560a9  gcc/testsuite/gdc.test/runnable/test60.d
! 4ca472f4039c4e9c4afdc3441411891a  gcc/testsuite/gdc.test/runnable/test61.d
  ec399524116d3fca795f8ef4dfb67f8e  gcc/testsuite/gdc.test/runnable/test6423.d
  60308dfaed6acd1748f7cffabeac441c  gcc/testsuite/gdc.test/runnable/test7.d
! 85298b0d2644b2180d3a79b778a584f1  gcc/testsuite/gdc.test/runnable/test7452.d
  584b06527d44f54b99880474c51f46ea  gcc/testsuite/gdc.test/runnable/test7453.d
! 1e4737746ca8e97ef20866873d654621  gcc/testsuite/gdc.test/runnable/test7494.d
! 86bdc17f0a7f109771c5b9e4b08048a8  gcc/testsuite/gdc.test/runnable/test7511.d
  7d1dae27fdf2bd46107accfb96face7c  gcc/testsuite/gdc.test/runnable/test7595.d
  3158ce3db0d67c0b94f8024d259ce775  gcc/testsuite/gdc.test/runnable/test7603.d
  1eabae1cd558093128de20e6d675d96d  gcc/testsuite/gdc.test/runnable/test7618.d
! 19668332363e00dc94066f3f500a4c1b  gcc/testsuite/gdc.test/runnable/test7932.d
! 026eb64999a53a4180cb213b12b374bd  gcc/testsuite/gdc.test/runnable/test8.d
  15901f42e795f075bc95b5748ecce8c3  gcc/testsuite/gdc.test/runnable/test8182.d
! 7084ca60f65820716f6a5b36e3155839  gcc/testsuite/gdc.test/runnable/test8544.d
! e6610f573d73232d050bb6527b47eefd  gcc/testsuite/gdc.test/runnable/test8997.d
! 85050e13755e9664c69c257732c3ab8b  gcc/testsuite/gdc.test/runnable/test9259.d
! 443940c6cfa3a407225f7d631221cb91  gcc/testsuite/gdc.test/runnable/test9271.d
  398b50a1301f92dbbb124e011dc2789d  gcc/testsuite/gdc.test/runnable/test9309.d
! 674931feb85a5058c77ebd03534ce049  gcc/testsuite/gdc.test/runnable/test9495.d
! 4ca124597f934655581695c05a503951  gcc/testsuite/gdc.test/runnable/testaa.d
! 1ba2f8af2e6517adab325b41efc52af7  gcc/testsuite/gdc.test/runnable/testaa2.d
! 38c8c88bd455658bc2939f2c8cbba0a7  gcc/testsuite/gdc.test/runnable/testaa3.d
! 7ea0bc3c07cb1faf1e3b62f0e18ffd6c  gcc/testsuite/gdc.test/runnable/testabi.d
! 7996d12186b16ddf02b75ff718bb462a  gcc/testsuite/gdc.test/runnable/testappend.d
! 593c4835fca6f30ee392848f80f27fec  gcc/testsuite/gdc.test/runnable/testarray.d
! bb3a05958a8af35c4689c5277356a0e8  gcc/testsuite/gdc.test/runnable/testassign.d
! 75aaa1bb7f1c32a30961e18f1ceb9359  gcc/testsuite/gdc.test/runnable/testbitarray.d
! 18bb077ef77dc09ce3fcb140e9de1816  gcc/testsuite/gdc.test/runnable/testbounds.d
  29912bc8a59c79356e5423ea4b009c91  gcc/testsuite/gdc.test/runnable/testbounds_off.d
  b5d03efe728963696491f3c036bc8f5c  gcc/testsuite/gdc.test/runnable/testbounds_on.d
  153e4b8060c39ce7eb597b5c864d071e  gcc/testsuite/gdc.test/runnable/testbounds_safeonly.d
! 1f17b365aad964db23a1d4d797833a52  gcc/testsuite/gdc.test/runnable/testclass.d
! 3347ac261f95d02d621c0f4f4611f3f9  gcc/testsuite/gdc.test/runnable/testconst.d
  ca19a464a9598a2c7376e8812c2a1115  gcc/testsuite/gdc.test/runnable/testconstsection.d
! 68720e363ef43615ca9b21a249bfe80a  gcc/testsuite/gdc.test/runnable/testcontracts.d
! 448901a918d5f5a519f956ca2962d17a  gcc/testsuite/gdc.test/runnable/testdstress.d
! 10e68521e586d03743e162098111ac18  gcc/testsuite/gdc.test/runnable/testdt.d
! e04e226c2e3f81435290d84ee36c85ad  gcc/testsuite/gdc.test/runnable/testenum.d
! 260ccfc5cb927e5915c4365d02765f16  gcc/testsuite/gdc.test/runnable/testfile.d
! 21f18c3ee7a40a400743674057d6325d  gcc/testsuite/gdc.test/runnable/testformat.d
! b5a9b2d53608fccf09125d51361a842e  gcc/testsuite/gdc.test/runnable/testgc2.d
! 5e3fc1d7a0d1ddc4bf7daf420c91126a  gcc/testsuite/gdc.test/runnable/testgc3.d
! 8764a13c712b16b5af935568334099d0  gcc/testsuite/gdc.test/runnable/testinvariant.d
! 4d569d4aa13f03b12dbfff8891802569  gcc/testsuite/gdc.test/runnable/testkeyword.d
! 59e74b131d5deb2522d5eea185fd201a  gcc/testsuite/gdc.test/runnable/testline.d
! 8809ed70d3666ca9b5cd70298c03feec  gcc/testsuite/gdc.test/runnable/testmain.d
! 18f6dd507621ff7dd19985819a7b59c0  gcc/testsuite/gdc.test/runnable/testminit.d
! 55ef3f43bd9c6be831aa216561aa5aaf  gcc/testsuite/gdc.test/runnable/testmmfile.d
! 27a2e400067dcd91084e6d96abb8b03b  gcc/testsuite/gdc.test/runnable/testmod1.d
! d425a096fc356a8ea601a5efb3c1dd7a  gcc/testsuite/gdc.test/runnable/testmod2.d
  9bd4c3eb4e419acdb7db441b62880c4f  gcc/testsuite/gdc.test/runnable/testmodule.d
! 7d6242316689bdb36d668fb622e0048f  gcc/testsuite/gdc.test/runnable/testpic.d
! a92fb2b0fbd5c997a6e182a3a3747b83  gcc/testsuite/gdc.test/runnable/testptrref.d
! 835b2175eeffd9f30694ad1a3e71a184  gcc/testsuite/gdc.test/runnable/testreturn.d
! 3362945cc9450289f62c452795b2f661  gcc/testsuite/gdc.test/runnable/testrightthis.d
! 32a4b1a92e664e7ec3cad19489ca5a32  gcc/testsuite/gdc.test/runnable/testsafe.d
! 16cbfc971d8060b078b8def8357a7fb4  gcc/testsuite/gdc.test/runnable/testscope.d
! f918bef987bc48b4d629c4e7ae51ecf2  gcc/testsuite/gdc.test/runnable/testscope2.d
! 663dc874c75562cdbe74b591845d65b5  gcc/testsuite/gdc.test/runnable/testsignals.d
! ed95368c07a340bb9357ed8a3a00f35b  gcc/testsuite/gdc.test/runnable/testsocket.d
! 6a2a8106f1936048be5e6c79642d5f67  gcc/testsuite/gdc.test/runnable/teststdio.d
! b875a8aed712329c1a097c7f73985f24  gcc/testsuite/gdc.test/runnable/testswitch.d
! 74746d28d25c2a069dbc52081d6581f8  gcc/testsuite/gdc.test/runnable/testthread.d
! 410915f2a3aa121aab6d9be6c8044cf7  gcc/testsuite/gdc.test/runnable/testthread2.d
! 3a0d2832ebdcfa1c8f099b8694a7de04  gcc/testsuite/gdc.test/runnable/testtypeid.d
  421ddca899cb4e423532976bd0a645f3  gcc/testsuite/gdc.test/runnable/testv.d
! 361940a33980bcfbc52099d52dd9c5bc  gcc/testsuite/gdc.test/runnable/tls.d
! 112398416931dcd001e5ebb100696e2d  gcc/testsuite/gdc.test/runnable/tls_dup.d
! a83bf90c0fdf11c556b2b6665ecfb39f  gcc/testsuite/gdc.test/runnable/traits.d
! 022e20dfd1d1abf39d0863e06f9ad1ea  gcc/testsuite/gdc.test/runnable/traits_child.d
! b2c3ced1057b5c1d49ddbadd430eedd1  gcc/testsuite/gdc.test/runnable/traits_getPointerBitmap.d
! 8c9615a32a6010587f639d0afde64225  gcc/testsuite/gdc.test/runnable/traits_getUnitTests.d
  91642219e5787400e311db2dee1e8591  gcc/testsuite/gdc.test/runnable/traits_getVirtualIndex.d
! 72548e266b76c4ac126b986d2ac30667  gcc/testsuite/gdc.test/runnable/uda.d
! 5c0377ce1401378b63ce67b9d8db3f53  gcc/testsuite/gdc.test/runnable/ufcs.d
! 705db7e1ab1bc7de754ccf62d891ffc2  gcc/testsuite/gdc.test/runnable/uniformctor.d
! ab0cb34de8668cbab78e2dc9a0f9f807  gcc/testsuite/gdc.test/runnable/variadic.d
! df0e1426154e0fd1c302bc6bbbcffa85  gcc/testsuite/gdc.test/runnable/version.d
! 6c48ed85c55bcb146f501e2f3572ebfb  gcc/testsuite/gdc.test/runnable/warning1.d
! 20633327390598c1bfe434cfe9c8884a  gcc/testsuite/gdc.test/runnable/wc.d
! 53a8bb4ede17f8689dc625c7d45791a3  gcc/testsuite/gdc.test/runnable/wc2.d
  4d06d3860e7413e844746844806a9595  gcc/testsuite/gdc.test/runnable/wc3.d
! 0afce9c29832c0937446cff6156dc5c4  gcc/testsuite/gdc.test/runnable/xdtor.d
! 00851da922236ba66e2c36d0d080c323  gcc/testsuite/gdc.test/runnable/xpostblit.d
! bb7ebabe31ecf7cdae76597f1b0adf05  gcc/testsuite/gdc.test/runnable/xtest46.d
! 53985fccf4fd255293fd98422de6e98f  gcc/testsuite/gdc.test/runnable/xtest55.d
! 4e7f0de22b7ea65edfc19886e0194745  gcc/testsuite/gdc.test/runnable/xtestenum.d
  862550e1270f64e59387c6dca4c76318  gcc/testsuite/gdc.test/runnable_cxx/cabi1.d
! e6a93e4494b117795c1d32b54fa9f003  gcc/testsuite/gdc.test/runnable_cxx/cpp_abi_tests.d
! 92445b8b8847e5fc46bd6c9a7a692bd5  gcc/testsuite/gdc.test/runnable_cxx/cppa.d
! 1d10e85bd9e0ab0980b59ad7e307cb10  gcc/testsuite/gdc.test/runnable_cxx/externmangle.d
! 927b031b2335c6fcdfa3988969a4e8c2  gcc/testsuite/gdc.test/runnable_cxx/externmangle2.d
! 697a2233921e087bcba999ac6e3de112  gcc/testsuite/gdc.test/runnable_cxx/extra-files/cabi2.cpp
! 60960f74d8a7558c6ffebf02313fa926  gcc/testsuite/gdc.test/runnable_cxx/extra-files/cpp_abi_tests.cpp
! 578b4694391b3ef92c71aeb0b1bd408d  gcc/testsuite/gdc.test/runnable_cxx/extra-files/cppb.cpp
! 445bb573a9000f649111882b913e3bc9  gcc/testsuite/gdc.test/runnable_cxx/extra-files/externmangle.cpp
  2fc8bcf6bde9d9e7c0d26ec53c4b5a61  gcc/testsuite/gdc.test/runnable_cxx/extra-files/externmangle2.cpp
! b04f9df90fb9265a5b4d5973eacc1cc0  gcc/testsuite/gdc.test/runnable_cxx/extra-files/test21515.cpp
! 160d06764658258a0fae162185403db2  gcc/testsuite/gdc.test/runnable_cxx/runnable_cxx.exp
! 58f374f3a0ef4c1971c5bf8c17a27975  gcc/testsuite/gdc.test/runnable_cxx/test21515.d
  38343e39577a1d093c40818070ea1d7b  gcc/testsuite/gfortran.dg/20181025-1.f
! ce04570deb62ab215ae3e3f210fa3e05  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c
! 3eb61cc5bcca57c89d27b886454f741f  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.f90
! a5289f9ffa0b505ab37d95d4aab71cd8  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_10.c
  ab61897df959fe950516eff0731b9408  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_10.f90
! 306b1a997471f8b3e902c694cdc2135b  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_11.c
  0d4f32a7fb98c6f300d234ef07c868a6  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_11.f90
! f960ece33e6f461552cdfe23d308516d  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.c
  0f997ee918539916d184f0f26ede39dc  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.f90
  6b0904352bf83bab2f0b90ac1682aeb2  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.c
  1637107e7b04b625884037471be00510  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.f90
  0590c7c6708c81cca9c50dcfbc485021  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_14.f90
! cdc8f0250fca18bd95923fcf91399dd4  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_15.c
  7ff0bc7079843cd79faa0a575e859e18  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_15.f90
! cf420b74ecc135162d79eb2624af1a45  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_16.c
  deb2afc397aadbc83f8819a89dcb0863  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_16.f90
! 6e7b19b5700d90f1ea9027eee720ded2  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_17.c
! 60f4ff8debe9d3b98e4aa29b0961a7ae  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_17.f90
! 0d03318b621c75ba1106f4dfebea8c85  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_18.c
  7269f20d2d641bd0cfcb965e0c3f58c7  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_18.f90
! 9d0f92e87fb4f26f9b6c6ba44603d69c  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_3.c
  2b8b1f675c75cbcedd7b9e79adfde6f8  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_3.f90
! 26bb37cdd8c407bb13011329ec3723aa  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_4.f90
! 91ce09cf398c7c0973cdf54dbb3eefae  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_5.c
  af26f6cd242122e0f5a166e7c349964a  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_5.f90
! 87b7fc9e6f29a56796b2d4655ff9a288  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_6.c
  36733a8140eb50827055c6e5b4d532e1  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_6.f90
! f6e9ebd2b4631bb30d22ba9a1a584899  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_7.c
  c753ed3031052227197bd5885c91e728  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_7.f90
! d2f401f9391bf1d2889872bbdc34f16b  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_8.c
  f1950e4b4b23dc2b32ca290715b1dd9c  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_8.f90
! ad366711f9b7f7d71373eab3da4b4e4b  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_9.c
  131a58eb857fe3f727bc57d2b9f21e8f  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_9.f90
  b57006fa0a1329365a93526a47af1b48  gcc/testsuite/gfortran.dg/PR100094.f90
  e4d3c523324e00f5ab10bffefb1a7961  gcc/testsuite/gfortran.dg/PR10018.f90
  36cd9c1e3875c80db22097b9c2ad49b3  gcc/testsuite/gfortran.dg/PR19754_1.f90
  e8f29c2ce9f345e588516849caa9db8f  gcc/testsuite/gfortran.dg/PR19754_2.f90
  7ea18cc404b53eee2348e3e57683bb56  gcc/testsuite/gfortran.dg/PR19872.f
--- 77310,77844 ----
  b25207a485c2e02b73d5a83cfb31bbd9  gcc/testsuite/gdc.test/runnable/imports/std11863bitmanip.d
  9ff762a4b8241ec2306741e5d87643f5  gcc/testsuite/gdc.test/runnable/imports/std11863conv.d
  d003d3880532714efc57d62374579d53  gcc/testsuite/gdc.test/runnable/imports/std11863format.d
+ 0a0051088b6055da7e8516cd25cd0d6e  gcc/testsuite/gdc.test/runnable/imports/std11file.d
  ef42d436cd580e9e8cfd56954ec096ac  gcc/testsuite/gdc.test/runnable/imports/std12010container.d
! de7f8853efaf461105e0dca67f714f91  gcc/testsuite/gdc.test/runnable/imports/std15017variant.d
  15d1e917fbc17c549e2b4723b359f7f3  gcc/testsuite/gdc.test/runnable/imports/std15021conv.d
  7067241491a24372aef9c52a9fc72fd3  gcc/testsuite/gdc.test/runnable/imports/std15021format.d
  0d40bf9565576a0caf96bd6f2c4a4bd4  gcc/testsuite/gdc.test/runnable/imports/std15030algo.d
  0a4bcc5ab0338be41359c662d96774a5  gcc/testsuite/gdc.test/runnable/imports/template13478a.d
  10bd984d633d36ab903c949cb584bec9  gcc/testsuite/gdc.test/runnable/imports/template13478b.d
! df6c9c4f8f19d1c772eb8a5629ed102f  gcc/testsuite/gdc.test/runnable/imports/template2962a.d
! 1878ef7501920249f5a4031a48fc1b94  gcc/testsuite/gdc.test/runnable/imports/template_ovs1.d
! bba54e3d289eaaf3f6cd33759ce1ec8f  gcc/testsuite/gdc.test/runnable/imports/template_ovs2.d
! 20f5158c99342f104346877478f8037d  gcc/testsuite/gdc.test/runnable/imports/template_ovs3.d
! c47eff29f10b58aa41dde3712e983c77  gcc/testsuite/gdc.test/runnable/imports/test10441b.d
! 1b90787d82532ef6ecec7c27852069a0  gcc/testsuite/gdc.test/runnable/imports/test10441c.d
  c2936f1e2dfad4952ac027ffb029f917  gcc/testsuite/gdc.test/runnable/imports/test10573a.d
  b0b287b9c1345d279f14a509b9473fe6  gcc/testsuite/gdc.test/runnable/imports/test10736a.d
  16f7ae7a23cb4d90417952d73a918b12  gcc/testsuite/gdc.test/runnable/imports/test10736b.d
  be039b39e87f9f71053bc8eb7171dfce  gcc/testsuite/gdc.test/runnable/imports/test10736c.d
! 16109ec7a88b573933754be9d558c2ed  gcc/testsuite/gdc.test/runnable/imports/test10a.d
! 900b9f8ceb36a9f991003780f62dbade  gcc/testsuite/gdc.test/runnable/imports/test11039b.d
! 8ea91f2711803d1ce6a414c6b174392a  gcc/testsuite/gdc.test/runnable/imports/test11745b.d
! 2b356f15b59797373a998462dd08efdf  gcc/testsuite/gdc.test/runnable/imports/test11931a.d
  934da8922eccd2c34e896d771bffa3ba  gcc/testsuite/gdc.test/runnable/imports/test11931b.d
  180bc1b50825604417cd1878c35df4d0  gcc/testsuite/gdc.test/runnable/imports/test11931c.d
! 677f8fb10ea10d2562d97b3bd0a82eec  gcc/testsuite/gdc.test/runnable/imports/test11931d.d
! e633788199b32e1dabbdc639da2babd9  gcc/testsuite/gdc.test/runnable/imports/test13a.d
  d84a257c80c475fcc45467e5e08b86d2  gcc/testsuite/gdc.test/runnable/imports/test14901a.d
  076bc4058af8260454ea7f02075d7d10  gcc/testsuite/gdc.test/runnable/imports/test14901b.d
  b7f68b4c61d33b5c5d3cbdbf1c383d1f  gcc/testsuite/gdc.test/runnable/imports/test14901c.d
  dbeebef5b688e48a4d93de2bac55cb36  gcc/testsuite/gdc.test/runnable/imports/test14901d.d
+ ba620bf31f553ffe0bcb4d1c58367974  gcc/testsuite/gdc.test/runnable/imports/test15777a.d
+ ba620bf31f553ffe0bcb4d1c58367974  gcc/testsuite/gdc.test/runnable/imports/test15777b.d
+ 1c160905cb7b05fa691e40f1bdfcf640  gcc/testsuite/gdc.test/runnable/imports/test17181a.d
+ 1d9fd7d2e2e0a069edc55bfe84de6e7a  gcc/testsuite/gdc.test/runnable/imports/test17181b.d
+ f65a5f3d13ac226189cdd9961948eb93  gcc/testsuite/gdc.test/runnable/imports/test17181c.d
  cb29f0c65040e0b005ddff6f5e73f135  gcc/testsuite/gdc.test/runnable/imports/test18322import.d
+ c770d400f83c713ae61bbd92db31359b  gcc/testsuite/gdc.test/runnable/imports/test18868_a.d
+ 4169c98a4969ba1a5e9a6f4ebd2e56c6  gcc/testsuite/gdc.test/runnable/imports/test18868_fls.d
+ 70ebebe4476e9ec35a6f1658eeb89714  gcc/testsuite/gdc.test/runnable/imports/test19655b.d
+ 3d7ab902e857df6e929746a7dd9c3d47  gcc/testsuite/gdc.test/runnable/imports/test19655c.d
+ a305f38185c19e44854b21bca63aaf6b  gcc/testsuite/gdc.test/runnable/imports/test19655d.d
+ 21492c20665eb1a3e73a06385b1d79c0  gcc/testsuite/gdc.test/runnable/imports/test19655e.d
+ 78ef38f796e92d249f3705bc93edc5ef  gcc/testsuite/gdc.test/runnable/imports/test19655f.d
+ 693e91254494329e0864e62720f90e12  gcc/testsuite/gdc.test/runnable/imports/test19655g.d
  38a5c5a8961efeb002ed2bd91995c376  gcc/testsuite/gdc.test/runnable/imports/test21a.d
! f5ea70e73666f46c9116afcc29aa9aad  gcc/testsuite/gdc.test/runnable/imports/test24a.d
! a97055119d4d6743063b35f911ab509c  gcc/testsuite/gdc.test/runnable/imports/test24b.d
! 737801af540fe795c1752851a57d01d1  gcc/testsuite/gdc.test/runnable/imports/test24c.d
! 93763812c8a246dce28d9662eb00d940  gcc/testsuite/gdc.test/runnable/imports/test27a.d
! 5f9c969935277b0ba768ac30c3795e85  gcc/testsuite/gdc.test/runnable/imports/test29a.d
  3d5983a43c91857119f23d4c27e299e5  gcc/testsuite/gdc.test/runnable/imports/test29b.d
! c0b91d4dc1af42fb73e1148188e63745  gcc/testsuite/gdc.test/runnable/imports/test31a.d
! 1083ecb8203d5cd9c093ba578527badd  gcc/testsuite/gdc.test/runnable/imports/test32a.d
! c3d80d2668616db9730145c68eac7337  gcc/testsuite/gdc.test/runnable/imports/test35a.d
  55306335fdf9fc2c55020c5b68351534  gcc/testsuite/gdc.test/runnable/imports/test38a.d
! 1039e7b020afd6ce76c56665b0101e7b  gcc/testsuite/gdc.test/runnable/imports/test39a.d
  cc101b6e3ae0e2fb628be979d741b6de  gcc/testsuite/gdc.test/runnable/imports/test3a.d
  34074d1d581d43535407d03fd47c815b  gcc/testsuite/gdc.test/runnable/imports/test3b.d
! 02fe15a9de8c6d315e7e38e9b72d90e4  gcc/testsuite/gdc.test/runnable/imports/test40a.d
! 23bf1fc7c2612b2228d70deb3f29560a  gcc/testsuite/gdc.test/runnable/imports/test41a.d
  4023e507a15eba682d34c70c551b441d  gcc/testsuite/gdc.test/runnable/imports/test44a.d
! 68a1cfba99d1538489ccb9ba34100d54  gcc/testsuite/gdc.test/runnable/imports/test45a.d
! c15dafaae4b0cc9f8b019cf85834428c  gcc/testsuite/gdc.test/runnable/imports/test45b.d
  8a11cdb486a6b04e1c486a2c4bd5d0eb  gcc/testsuite/gdc.test/runnable/imports/test46a.d
! 3340b67f317ea4db8d9acd0a5f8c2d0a  gcc/testsuite/gdc.test/runnable/imports/test46b.d
! 50f89fa9c9d7b5067b7b8087149fcd3f  gcc/testsuite/gdc.test/runnable/imports/test46c.d
  6a4c693336d18b9ca30060c0d231a202  gcc/testsuite/gdc.test/runnable/imports/test48a.d
! 547e80a75250a3dcf85d24ee29521b54  gcc/testsuite/gdc.test/runnable/imports/test49a.d
! 529e0389b3c4bfeba5538a60159c21f8  gcc/testsuite/gdc.test/runnable/imports/test57a.d
! 1960cc1a802b878786976ecf5d740098  gcc/testsuite/gdc.test/runnable/imports/test57b.d
! 14503fe35ab9b3c685ae4f486f48cf65  gcc/testsuite/gdc.test/runnable/imports/test58a.d
  37148b7a0e82c2dc4d8d95d39f2548b3  gcc/testsuite/gdc.test/runnable/imports/test61a.d
  9c9d815089d93d3cb6661975236c4381  gcc/testsuite/gdc.test/runnable/imports/test7494a.d
  811673192b36404d79d2482e73a8c55e  gcc/testsuite/gdc.test/runnable/imports/test8997a.d
  dd08e2b659e358af596b660615512b14  gcc/testsuite/gdc.test/runnable/imports/test9271a.d
  98147d4c61fc6d5a0d245bca3f63c146  gcc/testsuite/gdc.test/runnable/imports/testkwd_file.d
  94b8568f2076787bc0af8d830c0b8410  gcc/testsuite/gdc.test/runnable/imports/testmangle.d
! 5b9d3eb5ad4fd43411c01d2e34783ae0  gcc/testsuite/gdc.test/runnable/imports/testminitAA.d
! e6bb762e1186a9577b4dc8659b74f928  gcc/testsuite/gdc.test/runnable/imports/testminitBB.d
  ef5abef9e8e1f1cbe559761b2e65adef  gcc/testsuite/gdc.test/runnable/imports/testmod1a.d
! 0102ad564e556cd75580055275b5bf44  gcc/testsuite/gdc.test/runnable/imports/testmod1b.d
! 5d25ed1514a32315da32aae93b5c7451  gcc/testsuite/gdc.test/runnable/imports/testmod2a.d
! 3b9a14ca11ad3439254ce21fe634b4d2  gcc/testsuite/gdc.test/runnable/imports/tlsa.d
  a47415086a9bb252d0ea2845c8ef8ae8  gcc/testsuite/gdc.test/runnable/imports/traits_getUnitTests_import.d
  e4dbcfe0b1ee76ce49711195f5057409  gcc/testsuite/gdc.test/runnable/imports/ufcs5a.d
  c84519b4071a05841382b567953be0b4  gcc/testsuite/gdc.test/runnable/imports/ufcs5b.d
  1eb788b52d7a55d4c36cf1adab17983a  gcc/testsuite/gdc.test/runnable/imports/ufcs5c.d
  eca2528a4b2f620d2c38d1abb893652c  gcc/testsuite/gdc.test/runnable/imports/ufcs5d.d
  25e6928fcac8b8805188099fa463c745  gcc/testsuite/gdc.test/runnable/imports/ufcs5e.d
! 6bc98429fb6b456e0a601db6162025c0  gcc/testsuite/gdc.test/runnable/inclusive_incontracts.d
! aaf6f341932e9b3a995159cd37bdc066  gcc/testsuite/gdc.test/runnable/inline.d
  f7d709d852581fa8afa0dd0d20f5b2a3  gcc/testsuite/gdc.test/runnable/inline14560.d
! d64b5e3f0b00940814668d067bf9aaea  gcc/testsuite/gdc.test/runnable/inline7625.d
! 983143edb6966dadb405abd8072847f2  gcc/testsuite/gdc.test/runnable/inner.d
! 48cfd849752443e6d9839e935e8143b7  gcc/testsuite/gdc.test/runnable/interface.d
  ca24fa67843e9b5f04f6e36b4156cd09  gcc/testsuite/gdc.test/runnable/interface1.d
! 6484a385c41eddbf0257b15c48e86258  gcc/testsuite/gdc.test/runnable/interface2.d
! 838e42ff2802438b38233da4a0551d36  gcc/testsuite/gdc.test/runnable/interface3.d
! 2ba2531c6082ea9370c31b3c4462c696  gcc/testsuite/gdc.test/runnable/interpret.d
! 30066aead22b067c75e067db19484762  gcc/testsuite/gdc.test/runnable/interpret2.d
! 34bbbe816cec89b7cf9ad1cf88a3c866  gcc/testsuite/gdc.test/runnable/issue16995.d
! e1eb800c5f1d023be3e43f4f5e34d2e2  gcc/testsuite/gdc.test/runnable/lazy.d
  39e7e24e679fa283298fb63c41528a27  gcc/testsuite/gdc.test/runnable/ldc_github_1677.d
! a247cbece5e65fc23960be4329b77e59  gcc/testsuite/gdc.test/runnable/lexer.d
! 6f5cb20cd7be0b4736b08048125893ca  gcc/testsuite/gdc.test/runnable/link10425.d
  6f384d861e8f7b136caa11a726124bb8  gcc/testsuite/gdc.test/runnable/link10920.d
! 94f5a6371aec5241226bf8b2eeb5748c  gcc/testsuite/gdc.test/runnable/link11069a.d
! ab4716e92b354e5a13e2b7bd51337467  gcc/testsuite/gdc.test/runnable/link11069b.d
! 5fa2e27a72c963dc3b7c0ab17eb6b6db  gcc/testsuite/gdc.test/runnable/link11127.d
! 0b062fb5a72b2492dd1d6bc6b2253b33  gcc/testsuite/gdc.test/runnable/link11395.d
  df3b942fb4defa294277f6871f0180c9  gcc/testsuite/gdc.test/runnable/link11931.d
! a1bde69ec10cc30f1636857c9da34bff  gcc/testsuite/gdc.test/runnable/link12010.d
! 2965ccedae2354345ee2d706b7af3d41  gcc/testsuite/gdc.test/runnable/link12037.d
  7a9afe90633dbb637762824308bcee98  gcc/testsuite/gdc.test/runnable/link12144.d
! 281dfa29545c7abb3a20f09f76ae000e  gcc/testsuite/gdc.test/runnable/link13043.d
! b2320243b33fa0e1cdbbf64d7e089bf7  gcc/testsuite/gdc.test/runnable/link13350.d
! 271fea4811190df7c444e70efa4deaf9  gcc/testsuite/gdc.test/runnable/link13394.d
! f2d5ed25e78ea9e554d80a4f2924003e  gcc/testsuite/gdc.test/runnable/link13400.d
! 7d10a947a67f2764857c897da5702eb8  gcc/testsuite/gdc.test/runnable/link13415.d
  2e215cbb073af63f276929306ab29092  gcc/testsuite/gdc.test/runnable/link13843.d
! 8d278b0107301702da1b1182b8d66c89  gcc/testsuite/gdc.test/runnable/link14074a.d
! 93250c2cad32ecb4c33a78c01b72d9a7  gcc/testsuite/gdc.test/runnable/link14074b.d
  23d617df17e86a45d5dbf039108fa265  gcc/testsuite/gdc.test/runnable/link14425.d
! c9c45c2cb9b491b777ee1bfa7f803666  gcc/testsuite/gdc.test/runnable/link14541.d
! 91d4de507eb33e72ef7fe260673e2656  gcc/testsuite/gdc.test/runnable/link14588.d
! d307944832bd5e9f0e904a82fcfc70ef  gcc/testsuite/gdc.test/runnable/link14814.d
! 588f278070e1d42d9accf982e69e1c24  gcc/testsuite/gdc.test/runnable/link14992.d
! d79ca5d68f5d2b1d4166ebf252ce577b  gcc/testsuite/gdc.test/runnable/link15017.d
  8a0529dcc27e277c63f3cc54efb7ba1f  gcc/testsuite/gdc.test/runnable/link15021.d
  c1ccbb77e86bce621b967e7caacfe287  gcc/testsuite/gdc.test/runnable/link15149.d
  3debfb842852beb2042204839cf34b6d  gcc/testsuite/gdc.test/runnable/link2500.d
  337a4a44ed2a8e23873930099d24e3f4  gcc/testsuite/gdc.test/runnable/link2644.d
! 00f3caf1032acaeb84ddf3f5c2c470ca  gcc/testsuite/gdc.test/runnable/link6574.d
! de49afc81619132c42da7397f97d9a60  gcc/testsuite/gdc.test/runnable/link7745.d
  470b1566da61f13c8e4ab9f269f97d7e  gcc/testsuite/gdc.test/runnable/link7966.d
! 0a37bc73952dd77becd57ac13c3f6ecc  gcc/testsuite/gdc.test/runnable/link8023.d
! 9839759f567581a590e6b00f9c3ad9f5  gcc/testsuite/gdc.test/runnable/link9571.d
! 036745f647d305676a64fb35f0c2b069  gcc/testsuite/gdc.test/runnable/linktypeinfo.d
! 61f00830183d4742b5dce22e7f00d798  gcc/testsuite/gdc.test/runnable/literal.d
! 2893d202561d15a06d968f2ccb049544  gcc/testsuite/gdc.test/runnable/loopunroll.d
! f937e0b38b1fcd4d891537f30945028b  gcc/testsuite/gdc.test/runnable/m1.d
! e9f9b0b614372eb03b080d1810c3f513  gcc/testsuite/gdc.test/runnable/manboy.d
! 9d919fd56825c1ec7a780e06065e58b4  gcc/testsuite/gdc.test/runnable/mangle.d
! 0a84a838e32402d29d1cdb0c818b39a5  gcc/testsuite/gdc.test/runnable/mars1.d
! f5a8b23b5d0c5c59024767c78dcf9071  gcc/testsuite/gdc.test/runnable/minimal.d
! c00ebdf5e3409a5e0d41bc91f1bc7c13  gcc/testsuite/gdc.test/runnable/minimal2.d
! b8644719888d00737d3b529d8b3ebe1c  gcc/testsuite/gdc.test/runnable/mixin1.d
! 121e456ed4f010462dd418367c6864e4  gcc/testsuite/gdc.test/runnable/mixin2.d
! 17668752a24808140dc9b4f2fe62174d  gcc/testsuite/gdc.test/runnable/mod1.d
! 93837ff6a8edd395fed58c76349926d3  gcc/testsuite/gdc.test/runnable/nan.d
! ff83e87b097613a3fe18f1fab4e9685e  gcc/testsuite/gdc.test/runnable/nested.d
! ec4aa7081910ad016b0d017d00cccb65  gcc/testsuite/gdc.test/runnable/newdel.d
! 569632f136656f3a207d3dad0dc53cfd  gcc/testsuite/gdc.test/runnable/nogc.d
! 25eabc6ba3b891e46a706d8102110bef  gcc/testsuite/gdc.test/runnable/noreturn1.d
! 6533db66957bc420210064a73aebaa14  gcc/testsuite/gdc.test/runnable/noreturn2.d
! 0c4f02fcbf74ce184c17d425ff374a00  gcc/testsuite/gdc.test/runnable/nrvo.d
! 03897e35749dc0677dab013ba59cd344  gcc/testsuite/gdc.test/runnable/nulltype.d
! ae6003d98ffb6553fca10defa56d61ca  gcc/testsuite/gdc.test/runnable/opdisp.d
! ba398cb335fae279b907d3b8a8b2dcb8  gcc/testsuite/gdc.test/runnable/opover.d
! 143fe97fc80962b419313f8a9a5ca8c6  gcc/testsuite/gdc.test/runnable/opover2.d
! 9cf6d58bb7e64c71cbc72374f1007933  gcc/testsuite/gdc.test/runnable/opover3.d
! 3f595d4c7a383a431b3773fec062cab9  gcc/testsuite/gdc.test/runnable/overload.d
! c4e996cd3850a6ed5cd0b4537df85ad3  gcc/testsuite/gdc.test/runnable/pi.d
  671e921d7ba20a1141f56c07be62b586  gcc/testsuite/gdc.test/runnable/polysemous.d
! b1c9da60b8d40e3561a14b696c662aaa  gcc/testsuite/gdc.test/runnable/previewin.d
! e43ef772308df8da7da44ca398d5ec99  gcc/testsuite/gdc.test/runnable/printargs.d
! 0b3b6c33585693f7d9ec1f1c160c5eee  gcc/testsuite/gdc.test/runnable/property.d
! 31fe12e44df9411731e4ef3d72fb4ba7  gcc/testsuite/gdc.test/runnable/property2.d
! 4ad36392d16823994c6a7ca8d3899c50  gcc/testsuite/gdc.test/runnable/pubprivtmpl.d
! f75147b8db89a9daabcedb55f028d45e  gcc/testsuite/gdc.test/runnable/runnable.exp
! 8323b83c1399a259f3d262fb199b2205  gcc/testsuite/gdc.test/runnable/s2ir.d
! 96d633524d2f75b8d82fcd0a5331a249  gcc/testsuite/gdc.test/runnable/sctor.d
! 05ce59877a082d3e22aff0132bfbe58a  gcc/testsuite/gdc.test/runnable/sctor2.d
! 236c43311185d3651a6d025013b2f040  gcc/testsuite/gdc.test/runnable/sdtor.d
  171900d6ce544bb242e22a8416e306ad  gcc/testsuite/gdc.test/runnable/staticforeach.d
! f73d5e95eed9a6db4b396ed99ff5b347  gcc/testsuite/gdc.test/runnable/statictor.d
! 3b4fa0c8027d36ae9ebdc2e436b4ff04  gcc/testsuite/gdc.test/runnable/stress.d
! 63d69507976c1d1d8944e81e01b7e5ed  gcc/testsuite/gdc.test/runnable/structlit.d
! 3e3face435bb217d55099a4d3b63ee8e  gcc/testsuite/gdc.test/runnable/template1.d
! 415d0f5479b379a2060b96d579202da6  gcc/testsuite/gdc.test/runnable/template13478.d
! 69d08426f0323e8fbc44d4d87fa314c4  gcc/testsuite/gdc.test/runnable/template2.d
! c67680cbb0418c1b03462bc82e84c512  gcc/testsuite/gdc.test/runnable/template2962.d
  281244ea9f67146dc16caf6a24dd1e9e  gcc/testsuite/gdc.test/runnable/template3.d
! b264e56ec823b77824223c7435498b7d  gcc/testsuite/gdc.test/runnable/template4.d
  a2b15bcca5ded36d826ccac559bfe9fc  gcc/testsuite/gdc.test/runnable/template8.d
! 14b644398bf16cd3d743ec30aa61b303  gcc/testsuite/gdc.test/runnable/template9.d
! 05cefcbd270114fadcde3e36e557c635  gcc/testsuite/gdc.test/runnable/test10.d
! 11b39f38ddea4db0c346c184ae043158  gcc/testsuite/gdc.test/runnable/test10378.d
! b3fd0ebdae332c633f7c121f913b9c27  gcc/testsuite/gdc.test/runnable/test10441.d
  e18bc12e62affabc6544f2dbb5151592  gcc/testsuite/gdc.test/runnable/test10573.d
! 8e7ea5d0ec3fc33fe73cce78bc3f67f8  gcc/testsuite/gdc.test/runnable/test10619.d
! e4718969afdb09b1a5d8a84122c280ed  gcc/testsuite/gdc.test/runnable/test10736.d
! 7ebc846e49389a0fb55bd1ff2363b35a  gcc/testsuite/gdc.test/runnable/test10942.d
! 52c4ca4a2e6fa2f436c8515d11fb981e  gcc/testsuite/gdc.test/runnable/test11.d
! 38b8b79d3b1581c140830dc6915dddae  gcc/testsuite/gdc.test/runnable/test11039.d
! 2ac400ca67fc13a82d014ad3fbe1d156  gcc/testsuite/gdc.test/runnable/test11239.d
! ac2a7417335f30bab8b3248c60cd52bc  gcc/testsuite/gdc.test/runnable/test11447a.d
! f2f6ef04a472f76b5d3650ac9cf07938  gcc/testsuite/gdc.test/runnable/test11447b.d
! a8b12dd81817832e6cf48b3b4dfc1b0d  gcc/testsuite/gdc.test/runnable/test11447c.d
  88295e6c0c689cfc4c66c329993aa3b8  gcc/testsuite/gdc.test/runnable/test11745.d
! 0bc064ff727a51f85c5184d979f4cb4a  gcc/testsuite/gdc.test/runnable/test11863.d
! b2c48d8d06dcc7e25ae9915f1429552a  gcc/testsuite/gdc.test/runnable/test11934.d
! 6545ca0348c90e86210402f09169b791  gcc/testsuite/gdc.test/runnable/test12.d
  24bffeb65b6c7e6a676474a93881e38b  gcc/testsuite/gdc.test/runnable/test12197.d
+ 202dae67070cf723e47a96e989d5f25e  gcc/testsuite/gdc.test/runnable/test12486.d
  16a07b686ac8b8e2491612e30ac0c4a3  gcc/testsuite/gdc.test/runnable/test12874.d
  6573ec68917e307cc116d1430c8f9f6f  gcc/testsuite/gdc.test/runnable/test13.d
  c127f917319e0c5b2681b84b2119629d  gcc/testsuite/gdc.test/runnable/test13504.d
  effc757efd459e4515ba09f1a28b7f80  gcc/testsuite/gdc.test/runnable/test13613.d
  6d56b76e8ad5c4e191b11e22fdb8a97d  gcc/testsuite/gdc.test/runnable/test13944.d
  d6bfcb0ab1afec471863af71a1556923  gcc/testsuite/gdc.test/runnable/test14613.d
! a1d14de2b2f577f8dc953dac9a6643d9  gcc/testsuite/gdc.test/runnable/test14874.d
! 1c4c5f1d8ea6b04c00cc12d708821002  gcc/testsuite/gdc.test/runnable/test14901.d
  5d698de30965398370cd581d6c718e53  gcc/testsuite/gdc.test/runnable/test14903.d
! 65fe6d77f227d0bfd4513553993375d0  gcc/testsuite/gdc.test/runnable/test15.d
! 4f7ea61ced656c7d2d03d50fc465b2a4  gcc/testsuite/gdc.test/runnable/test15079.d
! 4ae407721b81ee554a37d37b701781d9  gcc/testsuite/gdc.test/runnable/test15373.d
! ae3d3c58af7ef6c64cdc93414ba57022  gcc/testsuite/gdc.test/runnable/test15568.d
! 1bb951ff2eceb50018da2f36539a0729  gcc/testsuite/gdc.test/runnable/test15862.d
  bfd8e27d98f571b2264d7f7760bbd5c7  gcc/testsuite/gdc.test/runnable/test15913.d
  f66ffcddad16ea2ae49fd701993a5eaa  gcc/testsuite/gdc.test/runnable/test16.d
! 1b0165a7daa35bc6ff8d022b64d00e9c  gcc/testsuite/gdc.test/runnable/test16047.d
! 5e1308619144327f37f85bd340d6bf09  gcc/testsuite/gdc.test/runnable/test16115.d
! 7370664411558cc8793d4d2026b55e31  gcc/testsuite/gdc.test/runnable/test16140.d
! 6153cfb395c904a799c508b581931117  gcc/testsuite/gdc.test/runnable/test16555.d
! 6210f18daafeb5560293d10d58be8abe  gcc/testsuite/gdc.test/runnable/test16579.d
  ac6af826695eca519f3bfd140e0989f6  gcc/testsuite/gdc.test/runnable/test16640.d
  ddf97970f8dabddfe160a6638562ba7f  gcc/testsuite/gdc.test/runnable/test16980.d
! 70c9e9b7c2fe21b899b2acd16b9d7ff8  gcc/testsuite/gdc.test/runnable/test17.d
! 3e332a4307278753a2c192704fa433e2  gcc/testsuite/gdc.test/runnable/test17072.d
! 0805f4d9ed38b5447803387faa6f6439  gcc/testsuite/gdc.test/runnable/test17181.d
! d6e1e5269dea90ebb80516ea92c9e793  gcc/testsuite/gdc.test/runnable/test17181b.d
! 3ee5ebbd90042d764bad2934e406437a  gcc/testsuite/gdc.test/runnable/test17246.d
! 04a9fdc94ca9047b806f9859f89879b3  gcc/testsuite/gdc.test/runnable/test17258.d
! 72abd9516be307601fc1f3e37554bd23  gcc/testsuite/gdc.test/runnable/test17337.d
! 34fed78576a745da3357f20271550f18  gcc/testsuite/gdc.test/runnable/test17338.d
! e50e78709b67b0c2eaa1360860475c53  gcc/testsuite/gdc.test/runnable/test17559.d
! e5d2a1faae0312068b5e33dbb985b301  gcc/testsuite/gdc.test/runnable/test17684.d
! 9c25e2ca51aa326febdf0d4f36e1c245  gcc/testsuite/gdc.test/runnable/test17868.d
! f62671c3fb649565bebd98b09b0b0194  gcc/testsuite/gdc.test/runnable/test17868b.d
  0e6077e1a2a30938d0b500ff8cc5b36b  gcc/testsuite/gdc.test/runnable/test17878.d
! fc0c1132b9c4990ecf1ba02ce096208f  gcc/testsuite/gdc.test/runnable/test17885.d
! 7919f520330f5076e433490def0be384  gcc/testsuite/gdc.test/runnable/test17899.d
! 709ec1b398fd0e118391602724117031  gcc/testsuite/gdc.test/runnable/test17940.d
! 0fb9f16f90f62659133cdf3f248572e3  gcc/testsuite/gdc.test/runnable/test17943.d
! d456ef642a6b4a01ec45fc81265b1d2a  gcc/testsuite/gdc.test/runnable/test17965.d
! 12c36884d487b0ed95f898c1502ce4ee  gcc/testsuite/gdc.test/runnable/test18054.d
! 9cae3c0a6bfef1af04208c0b126502ac  gcc/testsuite/gdc.test/runnable/test18296.d
  647c2508055709a027b3ba6c4c31e2c3  gcc/testsuite/gdc.test/runnable/test18322.d
! cf6bb3e9f1c9c86ad42b1fcd4a9e6aa2  gcc/testsuite/gdc.test/runnable/test18534.d
! 45f6352af25755f47517354f2a57c25c  gcc/testsuite/gdc.test/runnable/test18545.d
! 78a7441dc87a16dce301e1a7efbaa0ad  gcc/testsuite/gdc.test/runnable/test18746.d
! 63df655503b14a1814845679fb4fd0cd  gcc/testsuite/gdc.test/runnable/test18868.d
! a767b6f5b2f11844ad3eefab8ef4ec75  gcc/testsuite/gdc.test/runnable/test18868_2.d
! 6b9fd9120b926078b877b6819fbe42b4  gcc/testsuite/gdc.test/runnable/test18868_3.d
! 777a71347d6977e510af62882ae5bf82  gcc/testsuite/gdc.test/runnable/test18880.d
! 7b4286c4769f36ee7f44bba2ce4cf8d6  gcc/testsuite/gdc.test/runnable/test18916.d
! 780860fd581632b0eb01344c482f810e  gcc/testsuite/gdc.test/runnable/test19.d
! 59dd98fa3a3a4e31603f6febee3ceca6  gcc/testsuite/gdc.test/runnable/test19086.d
! 1948916b829a4357d04c98b757488f64  gcc/testsuite/gdc.test/runnable/test19122.d
! a1acded813bb656c7a71a323b7c12609  gcc/testsuite/gdc.test/runnable/test19185.d
! 7076e5a2b942b063e6c531b3e076448e  gcc/testsuite/gdc.test/runnable/test19192.d
! 30ce1452852c03e4e88fd9f7e17a5f56  gcc/testsuite/gdc.test/runnable/test19223.d
! 5a54ea5a3f025f1962f778439e391f28  gcc/testsuite/gdc.test/runnable/test19251.d
! 56c2cd52c016a3d4af442dc3b76f327e  gcc/testsuite/gdc.test/runnable/test19317.d
! 9e5376868c73ff4d45b42925a70129e8  gcc/testsuite/gdc.test/runnable/test19386.d
! 1d19a54f4a9a02064dab424718e34d85  gcc/testsuite/gdc.test/runnable/test19393.d
! b1e1b8078a9fd80e243511f1b8c617eb  gcc/testsuite/gdc.test/runnable/test19441.d
! e9e487ed073d3e1735cfffbcdd67269c  gcc/testsuite/gdc.test/runnable/test19476.d
! debd41700e67c28aa7f45389c42fbce0  gcc/testsuite/gdc.test/runnable/test19639.d
! 9d51c1220da82889451c2310d952128b  gcc/testsuite/gdc.test/runnable/test19655a.d
! 3031524867197f0e1394a16410f2e97d  gcc/testsuite/gdc.test/runnable/test19672.d
! a1ec3faf3686520b0f3abe6f701f9607  gcc/testsuite/gdc.test/runnable/test19679.d
! a4795a316a2baa0e71798b469d5c6930  gcc/testsuite/gdc.test/runnable/test19688.d
! 540e7f8ebaef8fd9b8f04bbf29c98b2f  gcc/testsuite/gdc.test/runnable/test19729.d
! fcece22eca621fed0d8ba8a8f0a26b8c  gcc/testsuite/gdc.test/runnable/test19734.d
! d26b50fb85490a3cc4e2354e4f36ef67  gcc/testsuite/gdc.test/runnable/test19735.d
! 9a70f093e61871491ceafa021b105249  gcc/testsuite/gdc.test/runnable/test19774.d
! f3d292c79f2f80b8f4c3d3800f49eaa8  gcc/testsuite/gdc.test/runnable/test19782.d
! 183dd227c7d6d7b7bf544af3d6a5d802  gcc/testsuite/gdc.test/runnable/test19822.d
! a36968e264e2797808c37d2e955080ef  gcc/testsuite/gdc.test/runnable/test19825.d
! cff02d44bbc8c8bfe6c49cafa1a3e6d4  gcc/testsuite/gdc.test/runnable/test19891.d
! ba91a67739ef1d7c075257c209545bc2  gcc/testsuite/gdc.test/runnable/test20.d
! f8d0b21a1212e2dd2a2291217b19a6d4  gcc/testsuite/gdc.test/runnable/test20025.d
! afafe1c6791104a920ce60c8d9b7a1d7  gcc/testsuite/gdc.test/runnable/test20036.d
! 00bcf9ef4601142dccb9c6258ec13a68  gcc/testsuite/gdc.test/runnable/test20130.d
! 934611688c4128ebda7e15cb6381177e  gcc/testsuite/gdc.test/runnable/test20401.d
! c018162c45215d0fab46be18b8757454  gcc/testsuite/gdc.test/runnable/test20565.d
! c34a3bb33a8160038fa96df171e91f03  gcc/testsuite/gdc.test/runnable/test20603.d
! d4e305280749d6533574a6153288fa7c  gcc/testsuite/gdc.test/runnable/test20649.d
! 26791dc86f122eb249d2a259ac91e13b  gcc/testsuite/gdc.test/runnable/test20855.d
! df5295a7feb17c4c53da844e70aa21e3  gcc/testsuite/gdc.test/runnable/test20893.d
! 4b3d63ce3f716d2619996a6ed10a0346  gcc/testsuite/gdc.test/runnable/test21.d
! 7b3442f146687dcc372c3394881b4702  gcc/testsuite/gdc.test/runnable/test21039.d
! 93b706863e29cf772712909183dbfede  gcc/testsuite/gdc.test/runnable/test21040.d
! 64d7b02bd6dc7a0cd12b0af9e8070e9c  gcc/testsuite/gdc.test/runnable/test21120.d
! 1aacc352c636c82011d02d49ef884284  gcc/testsuite/gdc.test/runnable/test21357.d
! 272f45daed92ef08fd3514c087b2b69c  gcc/testsuite/gdc.test/runnable/test21367.d
! 43c17807177bc1eee7ed52b69cffa7e6  gcc/testsuite/gdc.test/runnable/test21403.d
! 684fb8bd8d224295c0126d6852e6b871  gcc/testsuite/gdc.test/runnable/test21424.d
! 39cc7f7ee06df8b588e510e65fc811d1  gcc/testsuite/gdc.test/runnable/test21479.d
! 3958eb12c59cc6063b2604b011a74128  gcc/testsuite/gdc.test/runnable/test21515.d
! d941ec5e142e2721e810526ac3a6e649  gcc/testsuite/gdc.test/runnable/test21586.d
! 0696ce7be75b98ed274e814bc15abdf9  gcc/testsuite/gdc.test/runnable/test21822.d
! 6bdac6d28c5dd31504f6e1444284463a  gcc/testsuite/gdc.test/runnable/test21833.d
! 8372dd352568da47d2662ffb3c04723c  gcc/testsuite/gdc.test/runnable/test22.d
! 23a666ea8d812fe58b4fabc22d2dff49  gcc/testsuite/gdc.test/runnable/test22163.d
! 513cf903348b953f1ce7a6d2a644197e  gcc/testsuite/gdc.test/runnable/test22175.d
! 8c18bfc2cbf345895aba30706c009647  gcc/testsuite/gdc.test/runnable/test22205.d
! 35da0e21d4e4c72d89890781d0d0b227  gcc/testsuite/gdc.test/runnable/test22209.d
! 3fd45665b8058347938dee89fa2b5db0  gcc/testsuite/gdc.test/runnable/test22227.d
! a4f94c1d976d5924615a341b59c02cff  gcc/testsuite/gdc.test/runnable/test22278.d
! 466e87133a4466011049e76fb568724a  gcc/testsuite/gdc.test/runnable/test22717.d
! 4e7e9eefc89ca412abd98b785f5b0e5a  gcc/testsuite/gdc.test/runnable/test22945.d
! 421e41360f8c6fc2814a061416876856  gcc/testsuite/gdc.test/runnable/test23.d
! b760c0e7d084ffeb0648627187c08bb7  gcc/testsuite/gdc.test/runnable/test23083.d
! 3d69f9a9a0381cb5e164fd3a019c94ae  gcc/testsuite/gdc.test/runnable/test24.d
! 19afe194dcce9c253540c7831e8f23a2  gcc/testsuite/gdc.test/runnable/test27.d
! 907370082d6caa9ac241999ae9143c37  gcc/testsuite/gdc.test/runnable/test28.d
! 29e2b1f92dca63b5a1e49cedf1c77026  gcc/testsuite/gdc.test/runnable/test29.d
! a3c22bc745459314253eee2870f757bf  gcc/testsuite/gdc.test/runnable/test3.d
! ffaf83ea8a632fb76a8460f34eb92204  gcc/testsuite/gdc.test/runnable/test30.d
! 00d20fc4e946bb7fa0f42c3ad4028c55  gcc/testsuite/gdc.test/runnable/test31.d
! 288de9e9a7405648b1c7c3d436028db9  gcc/testsuite/gdc.test/runnable/test32.d
! 04e84b73f78ee9e6229632edab5a2795  gcc/testsuite/gdc.test/runnable/test34.d
! e89c8cd03d6486c95b6cf6c64be0e9e6  gcc/testsuite/gdc.test/runnable/test3449.d
! a562b2b0fe364138042b10aa9fe7bc2e  gcc/testsuite/gdc.test/runnable/test3574a.d
! 29dbee4ad9eef2e8530d3b79a8a703df  gcc/testsuite/gdc.test/runnable/test3574b.d
! 653e07900f4a2ceb0d83477f25fe70bf  gcc/testsuite/gdc.test/runnable/test3574c.d
! fa0fb7940f5997754ddc62b33c7baebd  gcc/testsuite/gdc.test/runnable/test3574d.d
! 581a6444dc0b25c381caecb9b694faa0  gcc/testsuite/gdc.test/runnable/test37.d
! 40e9ca7a6d87754f5537930e59c5f85b  gcc/testsuite/gdc.test/runnable/test38.d
! dbb7cf02e89580245e392f454e17f2d8  gcc/testsuite/gdc.test/runnable/test4.d
! d445cf99d6bb9f33a8aaaf381e971853  gcc/testsuite/gdc.test/runnable/test40.d
! d506eb18768952fea6d63fd1d70743ce  gcc/testsuite/gdc.test/runnable/test41.d
! 700d55e944cf15a5962369f633e8e8c0  gcc/testsuite/gdc.test/runnable/test42.d
! 9b2bf264f7de133b083d60a2a96dc8e2  gcc/testsuite/gdc.test/runnable/test42a.d
! b67bb973e1e91f489cd97933211256b9  gcc/testsuite/gdc.test/runnable/test435.d
! 851d793586ab17a91e80426908e8a089  gcc/testsuite/gdc.test/runnable/test45.d
! f392a170ec9d1e5e14f66f87bb3bd288  gcc/testsuite/gdc.test/runnable/test46.d
! f90d982fb21b19ad849510908faef6db  gcc/testsuite/gdc.test/runnable/test48.d
! 82984bea98740d6426cd9adf4156db3b  gcc/testsuite/gdc.test/runnable/test49.d
! a4d53ad572b840aa3d250e1ecd5fd685  gcc/testsuite/gdc.test/runnable/test5.d
! 17b3f80f9e5ad5f9a12d813f2a1acb46  gcc/testsuite/gdc.test/runnable/test52.d
! 02af84ae86a66fa6df94d96c79835e70  gcc/testsuite/gdc.test/runnable/test57.d
  75dc25ea2dd1c4ed7aaa3dd5c4e8fcaf  gcc/testsuite/gdc.test/runnable/test58.d
  b10a12df0b791737d6f41f8c781c094d  gcc/testsuite/gdc.test/runnable/test5943.d
! 3ebea79aadebae2a3255a10ff6209a02  gcc/testsuite/gdc.test/runnable/test61.d
  ec399524116d3fca795f8ef4dfb67f8e  gcc/testsuite/gdc.test/runnable/test6423.d
+ f48dff1a8a03ddf1bdb693bbc7dde562  gcc/testsuite/gdc.test/runnable/test6795.d
  60308dfaed6acd1748f7cffabeac441c  gcc/testsuite/gdc.test/runnable/test7.d
! 3191ef9d658fe71520a3b5af414b7f26  gcc/testsuite/gdc.test/runnable/test711.d
! c3441d48e3dc4e3f8e905509faa515c4  gcc/testsuite/gdc.test/runnable/test7452.d
  584b06527d44f54b99880474c51f46ea  gcc/testsuite/gdc.test/runnable/test7453.d
! acf377237fec892f5c1159809ac7709c  gcc/testsuite/gdc.test/runnable/test7494.d
! 1c3b95be93db6cdd32fd9ec98e5b86f1  gcc/testsuite/gdc.test/runnable/test7511.d
  7d1dae27fdf2bd46107accfb96face7c  gcc/testsuite/gdc.test/runnable/test7595.d
  3158ce3db0d67c0b94f8024d259ce775  gcc/testsuite/gdc.test/runnable/test7603.d
  1eabae1cd558093128de20e6d675d96d  gcc/testsuite/gdc.test/runnable/test7618.d
! ce6cf8164fad9df68b3ccc79b5e863f2  gcc/testsuite/gdc.test/runnable/test7932.d
! 8896a17754a7f91fe93763070362c7cd  gcc/testsuite/gdc.test/runnable/test8.d
! e1716e5ff142d969d9b796e919518753  gcc/testsuite/gdc.test/runnable/test809.d
  15901f42e795f075bc95b5748ecce8c3  gcc/testsuite/gdc.test/runnable/test8182.d
! 19bfd17af52c21a9d8220c7098ad9015  gcc/testsuite/gdc.test/runnable/test8544.d
! 151963b9472ccd80c9c71b7ed055650a  gcc/testsuite/gdc.test/runnable/test8997.d
! d4d78ba35301079a3b97c25658d35fae  gcc/testsuite/gdc.test/runnable/test9259.d
! b2b82040db73be53e8f83f2298816647  gcc/testsuite/gdc.test/runnable/test9271.d
  398b50a1301f92dbbb124e011dc2789d  gcc/testsuite/gdc.test/runnable/test9309.d
! a36fae813a6f89e1190c485e88612051  gcc/testsuite/gdc.test/runnable/test9495.d
! 2abc5225f15f7f14b991388996254323  gcc/testsuite/gdc.test/runnable/testCopyCtor.d
! 04d6c9fc22712b82cdfb3e523ac200dd  gcc/testsuite/gdc.test/runnable/testOpApply.d
! 260a12227aa14fbfc0f873ac59b4b56e  gcc/testsuite/gdc.test/runnable/test_dip1006.d
! 485f2946d7bdaf0ea4b8db7b7d178772  gcc/testsuite/gdc.test/runnable/test_dip1006b.d
! 64823d97fc941d462f398d0b7bcbe896  gcc/testsuite/gdc.test/runnable/testaa.d
! 892b49ea5dd4f0e53e0faadc8b0577fb  gcc/testsuite/gdc.test/runnable/testaa2.d
! ee3edf61584e85f05e7e74c7c7c5a8b3  gcc/testsuite/gdc.test/runnable/testaa3.d
! 3f7c65678e5e6729e1c6bc9fe1965999  gcc/testsuite/gdc.test/runnable/testaliascast.d
! eeb45913ea76b2a0c6255a669d3edb7e  gcc/testsuite/gdc.test/runnable/testappend.d
! 8d2dd2e88a1daa40f5a0fe6f0bac44a7  gcc/testsuite/gdc.test/runnable/testarray.d
! 728bb57b12620d5afb89fc3a275536d7  gcc/testsuite/gdc.test/runnable/testassert.d
! 5c93e14bd7b6c858ef32800173172b43  gcc/testsuite/gdc.test/runnable/testassert_debug.d
! 09eb76e2cfb6138eeb8434cc263df70a  gcc/testsuite/gdc.test/runnable/testassign.d
! b68337b7fabe389fc57cd2fd733b78a9  gcc/testsuite/gdc.test/runnable/testbounds.d
  29912bc8a59c79356e5423ea4b009c91  gcc/testsuite/gdc.test/runnable/testbounds_off.d
  b5d03efe728963696491f3c036bc8f5c  gcc/testsuite/gdc.test/runnable/testbounds_on.d
  153e4b8060c39ce7eb597b5c864d071e  gcc/testsuite/gdc.test/runnable/testbounds_safeonly.d
! 0b41649fd2039059a2d124ed2090e407  gcc/testsuite/gdc.test/runnable/testbtst.d
! 5740d6d8a37f8c8de92b0ae5dea79b24  gcc/testsuite/gdc.test/runnable/testcgelem.d
! f3a5c8190fa5a3106b4d549439f19057  gcc/testsuite/gdc.test/runnable/testclass.d
! 74b8d7cc9e56ff982ab03a4c063c6602  gcc/testsuite/gdc.test/runnable/testconst.d
  ca19a464a9598a2c7376e8812c2a1115  gcc/testsuite/gdc.test/runnable/testconstsection.d
! 07be4c699b9d19be005e7f29de6b5533  gcc/testsuite/gdc.test/runnable/testcontracts.d
! 04177eb403d124b27e25923e062b4968  gcc/testsuite/gdc.test/runnable/testdefault_after_variadic.d
! 9d45d3a5147e6e845980b67f31f51e8b  gcc/testsuite/gdc.test/runnable/testdstress.d
! 188bce71e33ee82e4f8b06265b40fc29  gcc/testsuite/gdc.test/runnable/testdt.d
! dc17b590e0cb85107a4fde452455b4ec  gcc/testsuite/gdc.test/runnable/testenum.d
! d4b8fc507dc0ddd3ca7b3066a52e32e1  gcc/testsuite/gdc.test/runnable/testfloat.d
! 75351cd126af64a558dbdd6e40e6a87c  gcc/testsuite/gdc.test/runnable/testgc2.d
! 7427aee7adf5bff99ac3a7bcf0cf8b2c  gcc/testsuite/gdc.test/runnable/testgc3.d
! e0c73db6333f43d93f8db9bdf2f68aa4  gcc/testsuite/gdc.test/runnable/testinvariant.d
! be284d3034b6fdd09b68f8beefd54ee2  gcc/testsuite/gdc.test/runnable/testkeyword.d
! 8bb97c5ee53391cea0b3260d426b7dd8  gcc/testsuite/gdc.test/runnable/testline.d
! 2072a38b7b38372b3243042a8e7d943d  gcc/testsuite/gdc.test/runnable/testmain.d
! 86b91aad4ee5d3a934a4b06efd34a991  gcc/testsuite/gdc.test/runnable/testmainb.d
! 8346e0691106bf7ca52c0fb6c3296f7f  gcc/testsuite/gdc.test/runnable/testminit.d
! ed7a30b0ac0e1a59e6c85f35bca3d0e9  gcc/testsuite/gdc.test/runnable/testmod1.d
! 99a9561dc3d23ad5c730236196d128da  gcc/testsuite/gdc.test/runnable/testmod2.d
  9bd4c3eb4e419acdb7db441b62880c4f  gcc/testsuite/gdc.test/runnable/testmodule.d
! ea6b138a5a50c9283634631f6784ac67  gcc/testsuite/gdc.test/runnable/testpic.d
! daec94a9c09ac898c5fd6fe60eb8efb8  gcc/testsuite/gdc.test/runnable/testptrref.d
! 43d4f7910f480d509db53dcc92b74963  gcc/testsuite/gdc.test/runnable/testptrref_gc.d
! 00a451bc4c07b84a223df9f0665137e0  gcc/testsuite/gdc.test/runnable/testreturn.d
! ea09d28ca0f7a07d495d48a79486d5c2  gcc/testsuite/gdc.test/runnable/testrightthis.d
! bbcaf047e3d4dd255a5ce2c1ad881475  gcc/testsuite/gdc.test/runnable/testsafe.d
! d0dc7f6c1e3a712292d48eb9d40557d0  gcc/testsuite/gdc.test/runnable/testscope.d
! 75e6e340a8e62745d532ce3ebba47749  gcc/testsuite/gdc.test/runnable/testscope2.d
! ea65101462f5417751a3a6ac833a9453  gcc/testsuite/gdc.test/runnable/testswitch.d
! 549bee09a23ec1497b2a8bb0bef44010  gcc/testsuite/gdc.test/runnable/testthread.d
! 1f5dcd73e7af1833e3689de50ad7fec7  gcc/testsuite/gdc.test/runnable/testthread2.d
! 6c0892bc90adeacb0d627be71a900f36  gcc/testsuite/gdc.test/runnable/testtypeid.d
  421ddca899cb4e423532976bd0a645f3  gcc/testsuite/gdc.test/runnable/testv.d
! a057534673f57c614b996fe87140df21  gcc/testsuite/gdc.test/runnable/tls.d
! 49432260a0d57c2fe1811c568327d931  gcc/testsuite/gdc.test/runnable/tls_dup.d
! 0f0729eadb9240d0999a698ea5ab1b2e  gcc/testsuite/gdc.test/runnable/traits.d
! 1aa7c9fb4ab4ad34ebee88d73d835029  gcc/testsuite/gdc.test/runnable/traits_child.d
! 9be15b72b386165ca16cdf973c293d24  gcc/testsuite/gdc.test/runnable/traits_getPointerBitmap.d
! 7b5c0c588a5500319a2ccc41819e3b29  gcc/testsuite/gdc.test/runnable/traits_getUnitTests.d
  91642219e5787400e311db2dee1e8591  gcc/testsuite/gdc.test/runnable/traits_getVirtualIndex.d
! dea7fc25fd89a2df3918f62a896ba033  gcc/testsuite/gdc.test/runnable/traits_initSymbol.d
! f75e70758ecdcd92eb5f200d8337bb7e  gcc/testsuite/gdc.test/runnable/tuple_default_parameters.d
! 0f13d6c17147d9a319c5b4b76946c4be  gcc/testsuite/gdc.test/runnable/uda.d
! 0416b4f2e3686fd9379e0c2d320e3e1a  gcc/testsuite/gdc.test/runnable/ufcs.d
! fad5d6afc8ee199fc52c3d0115ff4dc9  gcc/testsuite/gdc.test/runnable/uniformctor.d
! 797041b16b4063f65751920488ee39ef  gcc/testsuite/gdc.test/runnable/unique_typeinfo_names.d
! 7ed2f43979b0523e33aedd424104f7e9  gcc/testsuite/gdc.test/runnable/variadic.d
! 6d2139c61aa705b2bfaac77f2cb89892  gcc/testsuite/gdc.test/runnable/version.d
! ebe72ce3c7eaa0a45c89ce6efed6e21f  gcc/testsuite/gdc.test/runnable/warning1.d
! c5d22add9745e52907bb2497b9bd620f  gcc/testsuite/gdc.test/runnable/wc.d
! c4ca938331c5dd4dfd6be89a399e767b  gcc/testsuite/gdc.test/runnable/wc2.d
  4d06d3860e7413e844746844806a9595  gcc/testsuite/gdc.test/runnable/wc3.d
! f384c3fcd7c6ad7e5f4cfe528d33e3b1  gcc/testsuite/gdc.test/runnable/whetstone.d
! ec1a2733358dba834de7787de5e3abbc  gcc/testsuite/gdc.test/runnable/xdtor.d
! ac4d0456bb66403e420d8d538a3c7de5  gcc/testsuite/gdc.test/runnable/xpostblit.d
! 1b56664c727ddafa58dc21c3fc60790d  gcc/testsuite/gdc.test/runnable/xtest46.d
! f9004058e430b2d585cdbca7864c862a  gcc/testsuite/gdc.test/runnable/xtest46_gc.d
! bbea6b323197c3de8b8cdf62fd30dce6  gcc/testsuite/gdc.test/runnable/xtest47.d
! 98579c4213cc9715e99b14cafe0236c5  gcc/testsuite/gdc.test/runnable/xtest55.d
! ec34b35e61134ea19d0acd6f4b952971  gcc/testsuite/gdc.test/runnable/xtestenum.d
! 2caaa83870980d1acf5e5b9d4feab819  gcc/testsuite/gdc.test/runnable_cxx/abi_tags.d
  862550e1270f64e59387c6dca4c76318  gcc/testsuite/gdc.test/runnable_cxx/cabi1.d
! 76cf7dafb9d89f93e706f474f20c8475  gcc/testsuite/gdc.test/runnable_cxx/cpp11.d
! c30d7b43c4b2e042e7463cccb16c0935  gcc/testsuite/gdc.test/runnable_cxx/cpp_abi_tests.d
! 406b0b9b16752a001433b6aa5d8c96d6  gcc/testsuite/gdc.test/runnable_cxx/cpp_stdlib.d
! 244c74dc88e251825a7de60135acad4b  gcc/testsuite/gdc.test/runnable_cxx/cppa.d
! 9dced816e07defbae5f35dfc7d48c5cb  gcc/testsuite/gdc.test/runnable_cxx/externmangle.d
! 1be6bce873a4ba092357cd1925dffd04  gcc/testsuite/gdc.test/runnable_cxx/externmangle2.d
! d92b4eb3d1a1e7026ab3d6fdf0fb0bee  gcc/testsuite/gdc.test/runnable_cxx/extra-files/abi_tags.cpp
! 0add8efa4458cdf744b538f0066f69e8  gcc/testsuite/gdc.test/runnable_cxx/extra-files/c14203.cpp
! 5f9cb56d7b05d7862e312452337595ab  gcc/testsuite/gdc.test/runnable_cxx/extra-files/cabi2.cpp
! 0798b7a9e57526b29bd373ab47264e0f  gcc/testsuite/gdc.test/runnable_cxx/extra-files/cpp11.cpp
! fa03ccbe3fa80bc6ccf3bf1aa8286b8e  gcc/testsuite/gdc.test/runnable_cxx/extra-files/cpp19179.cpp
! 4d5c8b47ea46a47e48ff90f9110bc640  gcc/testsuite/gdc.test/runnable_cxx/extra-files/cpp22287.cpp
! 0710790bc5c49e5e20e7c2527bd61def  gcc/testsuite/gdc.test/runnable_cxx/extra-files/cpp7925.cpp
! a9d6a6a8f4c8875e6b33c7ad568ab722  gcc/testsuite/gdc.test/runnable_cxx/extra-files/cpp_abi_tests.cpp
! be30c6bdcad8f20922e4267061ff1df8  gcc/testsuite/gdc.test/runnable_cxx/extra-files/cpp_stdlib.cpp
! 7e487fe53227897317c9ddcb0150ced8  gcc/testsuite/gdc.test/runnable_cxx/extra-files/cppb.cpp
! ec3097e9963784f4f941101db0814cca  gcc/testsuite/gdc.test/runnable_cxx/extra-files/cppb.h
! 4ba7406a72aad4c6da0a2bcdc9b572d7  gcc/testsuite/gdc.test/runnable_cxx/extra-files/externmangle.cpp
  2fc8bcf6bde9d9e7c0d26ec53c4b5a61  gcc/testsuite/gdc.test/runnable_cxx/extra-files/externmangle2.cpp
! c41aae5e245d02892d557de82a15ecbf  gcc/testsuite/gdc.test/runnable_cxx/extra-files/stdint.cpp
! c2435b8d682209f733e92b581466e05d  gcc/testsuite/gdc.test/runnable_cxx/extra-files/test20652.cpp
! a114fddcb4038e1cc68206b0fc3d227e  gcc/testsuite/gdc.test/runnable_cxx/extra-files/test21515.cpp
! 4c95c06408fd6606dc2cc8f9ffbc3da2  gcc/testsuite/gdc.test/runnable_cxx/extra-files/test22898.cpp
! 19446c81468536fde60f727169a9064b  gcc/testsuite/gdc.test/runnable_cxx/extra-files/test6716.cpp
! c024d2477d05e6a77f4738b1b470b185  gcc/testsuite/gdc.test/runnable_cxx/runnable_cxx.exp
! 831a07bc65fb593b01e13ba6917f1048  gcc/testsuite/gdc.test/runnable_cxx/stdint.d
! 5e106cb14f0975a6502a3684154bda9c  gcc/testsuite/gdc.test/runnable_cxx/test14203.d
! 6cff696d69683c392657211d903629c7  gcc/testsuite/gdc.test/runnable_cxx/test19179.d
! e3ed77e1de9813e110f4b46db5b15790  gcc/testsuite/gdc.test/runnable_cxx/test20652.d
! 729140d31be3d3e72c4e84b2c6a85bcb  gcc/testsuite/gdc.test/runnable_cxx/test21515.d
! 44ce0fdf5bb8a6023ffac138e4219a24  gcc/testsuite/gdc.test/runnable_cxx/test22287.d
! 3d5532e93ff5e00c68560376930c79ee  gcc/testsuite/gdc.test/runnable_cxx/test22898.d
! a8db2129ce64619adefe97016e2a537b  gcc/testsuite/gdc.test/runnable_cxx/test6716.d
! 52117134088f2520ffadd1a3d471741a  gcc/testsuite/gdc.test/runnable_cxx/test7925.d
  38343e39577a1d093c40818070ea1d7b  gcc/testsuite/gfortran.dg/20181025-1.f
! 747722c12afa6e089d9e33c3d05257f7  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c
! 57077f084b8ec81f4f537428d13a6588  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.f90
! a0882a6b88250e8258ab4511465c89da  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_10.c
  ab61897df959fe950516eff0731b9408  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_10.f90
! e6c3b86b3fa90a1a314b20a8a7f460c5  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_11.c
  0d4f32a7fb98c6f300d234ef07c868a6  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_11.f90
! 235e54f906f8599f19e6bf2e60fe5401  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.c
  0f997ee918539916d184f0f26ede39dc  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.f90
  6b0904352bf83bab2f0b90ac1682aeb2  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.c
  1637107e7b04b625884037471be00510  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.f90
  0590c7c6708c81cca9c50dcfbc485021  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_14.f90
! 0e720a4c9b1fa88f58ae3201bea12302  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_15.c
  7ff0bc7079843cd79faa0a575e859e18  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_15.f90
! 3fc3ab6be4a1d40fa912f79266310049  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_16.c
  deb2afc397aadbc83f8819a89dcb0863  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_16.f90
! 493f148b6a7dd90fd225dc872efcaafc  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_17.c
! 0933e947935a3f7a4cf6100a6ae19e58  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_17.f90
! 43e94ff57a77d249f5b5b157595602ca  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_18.c
  7269f20d2d641bd0cfcb965e0c3f58c7  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_18.f90
! 62f2a2fe705fbcf105b9fa5657feb4f4  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_19.f90
! 92328ab8badf0b146e83c9e6a17cf335  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_3.c
  2b8b1f675c75cbcedd7b9e79adfde6f8  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_3.f90
! 5213e298cfdbb980b80c1197eb505fe7  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_4.f90
! 5255a573348efb05f935540f2316337a  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_5.c
  af26f6cd242122e0f5a166e7c349964a  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_5.f90
! c511c98873f63e8300a70414ff177e8a  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_6.c
  36733a8140eb50827055c6e5b4d532e1  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_6.f90
! 9dd0504c63a23f5103d051a7f0f46190  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_7.c
  c753ed3031052227197bd5885c91e728  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_7.f90
! a1a08bbe61bc0e97db09c5713e17b815  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_8.c
  f1950e4b4b23dc2b32ca290715b1dd9c  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_8.f90
! 817943e7fa8a72aedac6524e31d4088f  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_9.c
  131a58eb857fe3f727bc57d2b9f21e8f  gcc/testsuite/gfortran.dg/ISO_Fortran_binding_9.f90
  b57006fa0a1329365a93526a47af1b48  gcc/testsuite/gfortran.dg/PR100094.f90
+ 68cb0ab662ad4fc4eb4df34854771922  gcc/testsuite/gfortran.dg/PR100120.f90
  e4d3c523324e00f5ab10bffefb1a7961  gcc/testsuite/gfortran.dg/PR10018.f90
+ 4d5838f10553515cce93c4e016158093  gcc/testsuite/gfortran.dg/PR100906.c
+ d6e75fc08ee52f13c0de6ce3da087f1f  gcc/testsuite/gfortran.dg/PR100906.f90
+ 371d3195ffed521d08ec283c2ee1c592  gcc/testsuite/gfortran.dg/PR100911.c
+ 75ed0cc3d18f054acada48afe21e0851  gcc/testsuite/gfortran.dg/PR100911.f90
+ dec037af65c7ffffad780f0faaa0445b  gcc/testsuite/gfortran.dg/PR100914.c
+ 368fc79060e80bf2d23ef3d0de9c0c8e  gcc/testsuite/gfortran.dg/PR100914.f90
+ 1f38ca1825a8f27a3875628f4e8e8a1a  gcc/testsuite/gfortran.dg/PR100915.c
+ 9b9e03c9455339de9f75dc20eb5d1277  gcc/testsuite/gfortran.dg/PR100915.f90
  36cd9c1e3875c80db22097b9c2ad49b3  gcc/testsuite/gfortran.dg/PR19754_1.f90
  e8f29c2ce9f345e588516849caa9db8f  gcc/testsuite/gfortran.dg/PR19754_2.f90
  7ea18cc404b53eee2348e3e57683bb56  gcc/testsuite/gfortran.dg/PR19872.f
*************** e610c44a50486d89cefb12161b0f892e  gcc/te
*** 72879,72896 ****
  329e9e80c60ab998e37a9ac1bd8c51d6  gcc/testsuite/gfortran.dg/PR37039.f90
  e81a681901aa58d870e549b414327a20  gcc/testsuite/gfortran.dg/PR40660.f90
  264e3819dac395c8ef1f19270db55463  gcc/testsuite/gfortran.dg/PR49268.f90
! cf9357967669d1b743e4aad7ef5ee3c1  gcc/testsuite/gfortran.dg/PR82376.f90
  c85675a1a0e2101ed951b0621bb65472  gcc/testsuite/gfortran.dg/PR85868A.f90
  1cacea4b6e8bea7931986f5d190b981e  gcc/testsuite/gfortran.dg/PR85868B.f90
  583d04568695255545c22fd212ce5940  gcc/testsuite/gfortran.dg/PR90350.f90
  c0a1896429d4819837949d22da25a4df  gcc/testsuite/gfortran.dg/PR94022.f90
! fab825f85909c977ccf4fcc7fc918286  gcc/testsuite/gfortran.dg/PR94110.f90
  305e1d1e4f61ec5310b18e7e89ab0af0  gcc/testsuite/gfortran.dg/PR95214.f90
  2e5825199102c5678c8a2e1cc1c02e86  gcc/testsuite/gfortran.dg/PR95331.f90
  7ec1da83d87aa9fa91259dd1e81a2f62  gcc/testsuite/gfortran.dg/PR95352.f90
  5baea4ab2155c58a8a6a14a1e12b5490  gcc/testsuite/gfortran.dg/PR96726.f90
  ba6e5dffd35527455a5a3238d70c5a58  gcc/testsuite/gfortran.dg/PR96727.f90
  de10d9e933be4e163b6ce3fcdc2428d1  gcc/testsuite/gfortran.dg/PR96728.f90
  5dc95d72848e7d5b3c56ed9e2b800fb3  gcc/testsuite/gfortran.dg/Wall.f90
  d4b81cf21855418328fc275b64177b54  gcc/testsuite/gfortran.dg/Wno-all.f90
  bccffb200355c36e33c86388445db26a  gcc/testsuite/gfortran.dg/abort_shouldfail.f90
--- 77846,77872 ----
  329e9e80c60ab998e37a9ac1bd8c51d6  gcc/testsuite/gfortran.dg/PR37039.f90
  e81a681901aa58d870e549b414327a20  gcc/testsuite/gfortran.dg/PR40660.f90
  264e3819dac395c8ef1f19270db55463  gcc/testsuite/gfortran.dg/PR49268.f90
! a0be7a8da4f1b9a7262a6a0c94119513  gcc/testsuite/gfortran.dg/PR82376.f90
  c85675a1a0e2101ed951b0621bb65472  gcc/testsuite/gfortran.dg/PR85868A.f90
  1cacea4b6e8bea7931986f5d190b981e  gcc/testsuite/gfortran.dg/PR85868B.f90
  583d04568695255545c22fd212ce5940  gcc/testsuite/gfortran.dg/PR90350.f90
+ 55740e7ff2c6e32e376766d3dddd8b4e  gcc/testsuite/gfortran.dg/PR93308.f90
+ 966a6f726c4b0b218a2932e2ca0c881e  gcc/testsuite/gfortran.dg/PR93963.f90
  c0a1896429d4819837949d22da25a4df  gcc/testsuite/gfortran.dg/PR94022.f90
! d26f25abad3640876a175e7d83b3913d  gcc/testsuite/gfortran.dg/PR94110.f90
! 0f9e38e102733af4116f60c9e27b2e43  gcc/testsuite/gfortran.dg/PR94289.f90
! ec6c2627e248e7cd023630ebd5c579e6  gcc/testsuite/gfortran.dg/PR94327.c
! 4a176ee795d68fc5126fd68994479911  gcc/testsuite/gfortran.dg/PR94327.f90
! 7baef74107a5c3bc3a5d8732ab421fd2  gcc/testsuite/gfortran.dg/PR94331.c
! 93993286066f0fcc83b190890f9dc0d3  gcc/testsuite/gfortran.dg/PR94331.f90
! e15d6e343d1c32112df704ea80f4828c  gcc/testsuite/gfortran.dg/PR95196.f90
  305e1d1e4f61ec5310b18e7e89ab0af0  gcc/testsuite/gfortran.dg/PR95214.f90
  2e5825199102c5678c8a2e1cc1c02e86  gcc/testsuite/gfortran.dg/PR95331.f90
  7ec1da83d87aa9fa91259dd1e81a2f62  gcc/testsuite/gfortran.dg/PR95352.f90
  5baea4ab2155c58a8a6a14a1e12b5490  gcc/testsuite/gfortran.dg/PR96726.f90
  ba6e5dffd35527455a5a3238d70c5a58  gcc/testsuite/gfortran.dg/PR96727.f90
  de10d9e933be4e163b6ce3fcdc2428d1  gcc/testsuite/gfortran.dg/PR96728.f90
+ d5f7aa990aad340603e6ef142cb2b1fd  gcc/testsuite/gfortran.dg/PR97046.f90
  5dc95d72848e7d5b3c56ed9e2b800fb3  gcc/testsuite/gfortran.dg/Wall.f90
  d4b81cf21855418328fc275b64177b54  gcc/testsuite/gfortran.dg/Wno-all.f90
  bccffb200355c36e33c86388445db26a  gcc/testsuite/gfortran.dg/abort_shouldfail.f90
*************** e7a1e79918397cacde44559287989c3e  gcc/te
*** 73083,73088 ****
--- 78059,78065 ----
  bff4f86cadc34cdb60ab04c217d46dbd  gcc/testsuite/gfortran.dg/allocate_with_mold_1.f90
  9f39ddc177a6f3ff474548de040842f7  gcc/testsuite/gfortran.dg/allocate_with_mold_2.f90
  f4cacbb7fc7a73c4dc452abb4169a708  gcc/testsuite/gfortran.dg/allocate_with_mold_3.f90
+ 7d6318515de269c6859cdb9dea3519ac  gcc/testsuite/gfortran.dg/allocate_with_mold_4.f90
  8525309ee0a25fc4ec16a87c02a27e9a  gcc/testsuite/gfortran.dg/allocate_with_source_1.f90
  31f46b6f8cf8a1610b258ea73d0033de  gcc/testsuite/gfortran.dg/allocate_with_source_10.f08
  3e69f8fb58e06a24fc9934b0040bc33c  gcc/testsuite/gfortran.dg/allocate_with_source_11.f08
*************** bd4118fd768f3467307efc9602103e4c  gcc/te
*** 73101,73107 ****
  38cc9fdec67f82f032977fc8ad612b4c  gcc/testsuite/gfortran.dg/allocate_with_source_23.f03
  b1a373e9e419d53e737be3282523545d  gcc/testsuite/gfortran.dg/allocate_with_source_24.f90
  f0618b11a21d03826df78d5c6b9cb863  gcc/testsuite/gfortran.dg/allocate_with_source_25.f90
! b7a8d3b268cbeb9ec711824b11df77cf  gcc/testsuite/gfortran.dg/allocate_with_source_26.f90
  8cd7bcf0efad3a6d0e1f5b5492a6cdf7  gcc/testsuite/gfortran.dg/allocate_with_source_3.f90
  6e6cc1fe5ed4f0f5c650bc8b6e0634b0  gcc/testsuite/gfortran.dg/allocate_with_source_4.f90
  6df025374b593e0339c7b746700d109e  gcc/testsuite/gfortran.dg/allocate_with_source_5.f90
--- 78078,78084 ----
  38cc9fdec67f82f032977fc8ad612b4c  gcc/testsuite/gfortran.dg/allocate_with_source_23.f03
  b1a373e9e419d53e737be3282523545d  gcc/testsuite/gfortran.dg/allocate_with_source_24.f90
  f0618b11a21d03826df78d5c6b9cb863  gcc/testsuite/gfortran.dg/allocate_with_source_25.f90
! f27e65cbaa74101ffeaa1c5d321f9f84  gcc/testsuite/gfortran.dg/allocate_with_source_26.f90
  8cd7bcf0efad3a6d0e1f5b5492a6cdf7  gcc/testsuite/gfortran.dg/allocate_with_source_3.f90
  6e6cc1fe5ed4f0f5c650bc8b6e0634b0  gcc/testsuite/gfortran.dg/allocate_with_source_4.f90
  6df025374b593e0339c7b746700d109e  gcc/testsuite/gfortran.dg/allocate_with_source_5.f90
*************** f6b88d144becd396845bef8ec9c702cf  gcc/te
*** 73124,73129 ****
--- 78101,78107 ----
  c48691ea63fd97e5aeaa840878e94e6f  gcc/testsuite/gfortran.dg/allocated_3.f90
  6a729cf1f6bf67aa0e2493345f68e5fc  gcc/testsuite/gfortran.dg/altreturn_1.f90
  7737f6be709e53725e0b337d535f3c27  gcc/testsuite/gfortran.dg/altreturn_10.f90
+ 1e118a52f3930c4325fb1d14c08da518  gcc/testsuite/gfortran.dg/altreturn_11.f90
  7cbc1f043d9ba68898b8a84dff22a6f7  gcc/testsuite/gfortran.dg/altreturn_2.f90
  ab15f72b5cb8d2d12ce756b7de1444a2  gcc/testsuite/gfortran.dg/altreturn_3.f90
  b852529cec3b92b7d12cc9eec0f3559f  gcc/testsuite/gfortran.dg/altreturn_4.f90
*************** eae1c01e9cd07e06f5b2053c9c8e8d0c  gcc/te
*** 73137,73143 ****
  407349fe5dc0dd80df43de2e773a4cab  gcc/testsuite/gfortran.dg/ambiguous_reference_2.f90
  4a2d243fa69596ed5111843ecb20b347  gcc/testsuite/gfortran.dg/ambiguous_specific_1.f90
  44a13c6b4d7ef49b6173c7e5be97aeba  gcc/testsuite/gfortran.dg/ambiguous_specific_2.f90
! dd0d1280f410c993f603545303048cc5  gcc/testsuite/gfortran.dg/analyzer/analyzer.exp
  2f368a8d04f58e4d6d300980282f68ea  gcc/testsuite/gfortran.dg/analyzer/deferred_character_25.f90
  d73a0bb9f41cc644e39e6ef9cb47095f  gcc/testsuite/gfortran.dg/analyzer/malloc-example.f90
  456395eb94ed204b99bab7e77b4c01de  gcc/testsuite/gfortran.dg/analyzer/malloc.f90
--- 78115,78121 ----
  407349fe5dc0dd80df43de2e773a4cab  gcc/testsuite/gfortran.dg/ambiguous_reference_2.f90
  4a2d243fa69596ed5111843ecb20b347  gcc/testsuite/gfortran.dg/ambiguous_specific_1.f90
  44a13c6b4d7ef49b6173c7e5be97aeba  gcc/testsuite/gfortran.dg/ambiguous_specific_2.f90
! ff4f7766adaeefb666883e2371774ac9  gcc/testsuite/gfortran.dg/analyzer/analyzer.exp
  2f368a8d04f58e4d6d300980282f68ea  gcc/testsuite/gfortran.dg/analyzer/deferred_character_25.f90
  d73a0bb9f41cc644e39e6ef9cb47095f  gcc/testsuite/gfortran.dg/analyzer/malloc-example.f90
  456395eb94ed204b99bab7e77b4c01de  gcc/testsuite/gfortran.dg/analyzer/malloc.f90
*************** e1cea00268c9eb57abc50ee584fd93aa  gcc/te
*** 73147,73153 ****
  74f8211dfa60c0f529f18fc738d94b0a  gcc/testsuite/gfortran.dg/analyzer/pr93778.f90
  c6556ebb6443566c88e0551ae2f19d60  gcc/testsuite/gfortran.dg/analyzer/pr93993.f90
  6569bd8079beec5c6b5b0f599d0af012  gcc/testsuite/gfortran.dg/analyzer/pr96949.f90
! 8d18d3057bd90f3e9cfe3aa756ff3228  gcc/testsuite/gfortran.dg/analyzer/pr97668.f
  b9a4dd9ce1dc5ec1be98f33811c4eba8  gcc/testsuite/gfortran.dg/and_or_xor.f90
  fb1c5569f69a4b48d53284a6e6fe1b9e  gcc/testsuite/gfortran.dg/anint_1.f90
  f19486a23086c5de84ef69f54a0e6794  gcc/testsuite/gfortran.dg/any_all_1.f90
--- 78125,78132 ----
  74f8211dfa60c0f529f18fc738d94b0a  gcc/testsuite/gfortran.dg/analyzer/pr93778.f90
  c6556ebb6443566c88e0551ae2f19d60  gcc/testsuite/gfortran.dg/analyzer/pr93993.f90
  6569bd8079beec5c6b5b0f599d0af012  gcc/testsuite/gfortran.dg/analyzer/pr96949.f90
! 38a12134549120c872485b2894677eec  gcc/testsuite/gfortran.dg/analyzer/pr97668.f
! 3c6755fb31e8694ecc7b0bdcbfed1016  gcc/testsuite/gfortran.dg/analyzer/uninit-pr63311.f90
  b9a4dd9ce1dc5ec1be98f33811c4eba8  gcc/testsuite/gfortran.dg/and_or_xor.f90
  fb1c5569f69a4b48d53284a6e6fe1b9e  gcc/testsuite/gfortran.dg/anint_1.f90
  f19486a23086c5de84ef69f54a0e6794  gcc/testsuite/gfortran.dg/any_all_1.f90
*************** e1c301e198e52e75cc41d51cb75f5d30  gcc/te
*** 73219,73225 ****
  5ca9cc7c393792c1c73cb103841df1e1  gcc/testsuite/gfortran.dg/array_constructor_27.f03
  21daf278376911ce8154964d3e92e438  gcc/testsuite/gfortran.dg/array_constructor_28.f03
  d75b0075c8c6384eac9f0e38dc4e226f  gcc/testsuite/gfortran.dg/array_constructor_29.f03
! 1f97b4f0dca764838294052acc156f85  gcc/testsuite/gfortran.dg/array_constructor_3.f90
  24de8e23530c98333db98bb0d182f552  gcc/testsuite/gfortran.dg/array_constructor_30.f03
  9556e61bd2895f28168a9c53a5a5f128  gcc/testsuite/gfortran.dg/array_constructor_31.f90
  1ad7bc630dbb18fbb8a19e7c5e831c52  gcc/testsuite/gfortran.dg/array_constructor_32.f90
--- 78198,78204 ----
  5ca9cc7c393792c1c73cb103841df1e1  gcc/testsuite/gfortran.dg/array_constructor_27.f03
  21daf278376911ce8154964d3e92e438  gcc/testsuite/gfortran.dg/array_constructor_28.f03
  d75b0075c8c6384eac9f0e38dc4e226f  gcc/testsuite/gfortran.dg/array_constructor_29.f03
! e0d66de1132cfe90e7ec1d3b7c3e03e1  gcc/testsuite/gfortran.dg/array_constructor_3.f90
  24de8e23530c98333db98bb0d182f552  gcc/testsuite/gfortran.dg/array_constructor_30.f03
  9556e61bd2895f28168a9c53a5a5f128  gcc/testsuite/gfortran.dg/array_constructor_31.f90
  1ad7bc630dbb18fbb8a19e7c5e831c52  gcc/testsuite/gfortran.dg/array_constructor_32.f90
*************** b6760654ceec06f2d9d8da1fb2905d41  gcc/te
*** 73293,73298 ****
--- 78272,78278 ----
  9cd9ba395957dcb0b99267b33e0e4f3a  gcc/testsuite/gfortran.dg/array_memset_2.f90
  0d5c79107b268381899526d4acc0698d  gcc/testsuite/gfortran.dg/array_reference_1.f90
  47ca991c28b5ae757c9c0781206a3f71  gcc/testsuite/gfortran.dg/array_reference_2.f90
+ 0b4de3a4e057a06e6461e16138a9c2da  gcc/testsuite/gfortran.dg/array_reference_3.f90
  ed7776896bbbdf2c7a28485ae192850f  gcc/testsuite/gfortran.dg/array_return_value_1.f90
  9e232ed353f6720a409956fdb813a957  gcc/testsuite/gfortran.dg/array_section_1.f90
  a815d3d0eea1fbd2ee087c99d9a5efd8  gcc/testsuite/gfortran.dg/array_section_2.f90
*************** ca5ed9b7a4b086d732df1a505d87813b  gcc/te
*** 73325,73331 ****
  d6fad859ae9f254219fe0b62c52472a0  gcc/testsuite/gfortran.dg/arrayio_9.f90
  a7a4d71734bf9559e09017fe4616e065  gcc/testsuite/gfortran.dg/arrayio_derived_1.f90
  2b2c726e08ba1c26507c7392e63e1029  gcc/testsuite/gfortran.dg/arrayio_derived_2.f90
! 91f37bbac26f82273837e648e97f8b98  gcc/testsuite/gfortran.dg/asan/asan.exp
  3b8425a2f59699b47aac6da29c11aba9  gcc/testsuite/gfortran.dg/asan/associate_58.f90
  e9f58df1de071d2b106b16b3af8f6764  gcc/testsuite/gfortran.dg/asan/associate_59.f90
  66de6cb3bf07d14487491fac7d1ee72f  gcc/testsuite/gfortran.dg/asan/pointer_assign_16.f90
--- 78305,78311 ----
  d6fad859ae9f254219fe0b62c52472a0  gcc/testsuite/gfortran.dg/arrayio_9.f90
  a7a4d71734bf9559e09017fe4616e065  gcc/testsuite/gfortran.dg/arrayio_derived_1.f90
  2b2c726e08ba1c26507c7392e63e1029  gcc/testsuite/gfortran.dg/arrayio_derived_2.f90
! 71fed75604e326d0453d0854d6389cae  gcc/testsuite/gfortran.dg/asan/asan.exp
  3b8425a2f59699b47aac6da29c11aba9  gcc/testsuite/gfortran.dg/asan/associate_58.f90
  e9f58df1de071d2b106b16b3af8f6764  gcc/testsuite/gfortran.dg/asan/associate_59.f90
  66de6cb3bf07d14487491fac7d1ee72f  gcc/testsuite/gfortran.dg/asan/pointer_assign_16.f90
*************** c0997c9e951767642f9b109c7f40a532  gcc/te
*** 73369,73375 ****
  aecd7da9302bacf7aeebde56d90a2445  gcc/testsuite/gfortran.dg/associate_27.f90
  366c019a469c1a5eac01c46514e12c86  gcc/testsuite/gfortran.dg/associate_28.f90
  9236179c94e8ef2f6258dcf917d9dee9  gcc/testsuite/gfortran.dg/associate_29.f90
! 6a1c3deb1556a2431e0efc9269d06445  gcc/testsuite/gfortran.dg/associate_3.f03
  6eab1bfbc8235d8fcf743d9f5635aea3  gcc/testsuite/gfortran.dg/associate_30.f90
  4c227011c3d554a292526dea236870bb  gcc/testsuite/gfortran.dg/associate_32.f03
  f023f2a531d000e8c23860928425ebf3  gcc/testsuite/gfortran.dg/associate_33.f03
--- 78349,78355 ----
  aecd7da9302bacf7aeebde56d90a2445  gcc/testsuite/gfortran.dg/associate_27.f90
  366c019a469c1a5eac01c46514e12c86  gcc/testsuite/gfortran.dg/associate_28.f90
  9236179c94e8ef2f6258dcf917d9dee9  gcc/testsuite/gfortran.dg/associate_29.f90
! 355e58c83c0d8aae2fc9b4ba4d520914  gcc/testsuite/gfortran.dg/associate_3.f03
  6eab1bfbc8235d8fcf743d9f5635aea3  gcc/testsuite/gfortran.dg/associate_30.f90
  4c227011c3d554a292526dea236870bb  gcc/testsuite/gfortran.dg/associate_32.f03
  f023f2a531d000e8c23860928425ebf3  gcc/testsuite/gfortran.dg/associate_33.f03
*************** e8c458194678efd669b67ee1555bd703  gcc/te
*** 73412,73417 ****
--- 78392,78398 ----
  16acf798060dc8edd4b9c73422f7ce2a  gcc/testsuite/gfortran.dg/associated_6.f90
  ed08ee0bcaabca9d5a128ae929308739  gcc/testsuite/gfortran.dg/associated_7.f90
  0a29611d59fedd86076983ccce682e0f  gcc/testsuite/gfortran.dg/associated_8.f90
+ d1c662f45dacbe1c052ae68a8d3ef07f  gcc/testsuite/gfortran.dg/associated_assumed_rank.f90
  32b4a71d6d649eeafd569b412f4ca3cf  gcc/testsuite/gfortran.dg/associated_target_1.f90
  14ea917bbb9224466ca398e5094e8874  gcc/testsuite/gfortran.dg/associated_target_2.f90
  7edaeef95006ed8758d6af207a504b5c  gcc/testsuite/gfortran.dg/associated_target_3.f90
*************** ed08ee0bcaabca9d5a128ae929308739  gcc/te
*** 73419,73424 ****
--- 78400,78406 ----
  c8dcd0248b062389c3ebfd88d9473a64  gcc/testsuite/gfortran.dg/associated_target_5.f03
  f7cfdbf4de38d945e0085b02ebb99e8d  gcc/testsuite/gfortran.dg/associated_target_6.f03
  3cceb452e20c2755392cd5294bebb9d0  gcc/testsuite/gfortran.dg/associated_target_7.f90
+ cf71c08bba011121c789ca925ca3d13b  gcc/testsuite/gfortran.dg/associated_target_8.f90
  6376d7ef6f137372a501dd7c8547864d  gcc/testsuite/gfortran.dg/associative_1.f90
  04280cc7719e51d18a6ad4510745c528  gcc/testsuite/gfortran.dg/assumed_charlen_arg_1.f90
  e41613f37c052bf20cb9d34a7bb40da1  gcc/testsuite/gfortran.dg/assumed_charlen_arg_2.f90
*************** db38a8bc3741440823daac3739cdf86a  gcc/te
*** 73448,73459 ****
  3c615b993303fefbc0f951f83cda320b  gcc/testsuite/gfortran.dg/assumed_rank_15.f90
  b42fff8b6ab02a5aeaee14347ab8e3cf  gcc/testsuite/gfortran.dg/assumed_rank_16.f90
  7d90d6169939010082d6153e021f5cc8  gcc/testsuite/gfortran.dg/assumed_rank_17.f90
! 781354060b7eb6908c0480cff15598ac  gcc/testsuite/gfortran.dg/assumed_rank_18.f90
  b8fe1ebae4d8f1c57690af8092459210  gcc/testsuite/gfortran.dg/assumed_rank_19.f90
  d6f30c8e29ab67ebb49be7bca4d7e8bf  gcc/testsuite/gfortran.dg/assumed_rank_1_c.c
  7619e0aa4aa95c5a3a1e9a940ad9e9b5  gcc/testsuite/gfortran.dg/assumed_rank_2.f90
  fa32a7cf9d91de999be17d014f99e39e  gcc/testsuite/gfortran.dg/assumed_rank_20.f90
  eae0182bf770a9c3238d3946a16c07b1  gcc/testsuite/gfortran.dg/assumed_rank_21.f90
  9478ccb330ec844df5877a48096c9976  gcc/testsuite/gfortran.dg/assumed_rank_3.f90
  a97591ca0f7ec68f4a27f9437d09cb92  gcc/testsuite/gfortran.dg/assumed_rank_4.f90
  d3b33ae7c97fb128d15b3a49e16aa06e  gcc/testsuite/gfortran.dg/assumed_rank_5.f90
--- 78430,78445 ----
  3c615b993303fefbc0f951f83cda320b  gcc/testsuite/gfortran.dg/assumed_rank_15.f90
  b42fff8b6ab02a5aeaee14347ab8e3cf  gcc/testsuite/gfortran.dg/assumed_rank_16.f90
  7d90d6169939010082d6153e021f5cc8  gcc/testsuite/gfortran.dg/assumed_rank_17.f90
! f41397c3f705e6785056bec0237142ba  gcc/testsuite/gfortran.dg/assumed_rank_18.f90
  b8fe1ebae4d8f1c57690af8092459210  gcc/testsuite/gfortran.dg/assumed_rank_19.f90
  d6f30c8e29ab67ebb49be7bca4d7e8bf  gcc/testsuite/gfortran.dg/assumed_rank_1_c.c
  7619e0aa4aa95c5a3a1e9a940ad9e9b5  gcc/testsuite/gfortran.dg/assumed_rank_2.f90
  fa32a7cf9d91de999be17d014f99e39e  gcc/testsuite/gfortran.dg/assumed_rank_20.f90
  eae0182bf770a9c3238d3946a16c07b1  gcc/testsuite/gfortran.dg/assumed_rank_21.f90
+ 70077dcf90f37c1fecbf97741d939984  gcc/testsuite/gfortran.dg/assumed_rank_22.f90
+ eaeb1ae6f613cb27239740bc9c7f6229  gcc/testsuite/gfortran.dg/assumed_rank_22_aux.c
+ 4975fe28873f65aed664a18b4e6d0b54  gcc/testsuite/gfortran.dg/assumed_rank_23.f90
+ 18bbeba60d3392b0b73d876be244ef92  gcc/testsuite/gfortran.dg/assumed_rank_24.f90
  9478ccb330ec844df5877a48096c9976  gcc/testsuite/gfortran.dg/assumed_rank_3.f90
  a97591ca0f7ec68f4a27f9437d09cb92  gcc/testsuite/gfortran.dg/assumed_rank_4.f90
  d3b33ae7c97fb128d15b3a49e16aa06e  gcc/testsuite/gfortran.dg/assumed_rank_5.f90
*************** cdbd174fba27a1cc2fe42d6e10b97afd  gcc/te
*** 73475,73482 ****
  8bf64bb3c49e7fe58c386a66c599504b  gcc/testsuite/gfortran.dg/assumed_size_refs_3.f90
  3e96e44672f88b56bd72f233716f03cd  gcc/testsuite/gfortran.dg/assumed_size_refs_4.f90
  6637ca606075a490a8af76882f9b6797  gcc/testsuite/gfortran.dg/assumed_type_1.f90
! d428b518ef4d688a931be0600cde09e1  gcc/testsuite/gfortran.dg/assumed_type_10.f90
! 084e41ac2b43b23f29258199c92a2362  gcc/testsuite/gfortran.dg/assumed_type_11.f90
  344877f098e4c4d5e54723572dcff5b8  gcc/testsuite/gfortran.dg/assumed_type_2.f90
  e7b3eba9964feebc5c27a78154c7b547  gcc/testsuite/gfortran.dg/assumed_type_2a.f90
  27b0b5ad82abb1d06990db9025f0c992  gcc/testsuite/gfortran.dg/assumed_type_3.f90
--- 78461,78472 ----
  8bf64bb3c49e7fe58c386a66c599504b  gcc/testsuite/gfortran.dg/assumed_size_refs_3.f90
  3e96e44672f88b56bd72f233716f03cd  gcc/testsuite/gfortran.dg/assumed_size_refs_4.f90
  6637ca606075a490a8af76882f9b6797  gcc/testsuite/gfortran.dg/assumed_type_1.f90
! 0eb346bbb6c1b4159d04a60a04c82b33  gcc/testsuite/gfortran.dg/assumed_type_10.f90
! 52e5fc6011778388e4a9e0a988c33d3d  gcc/testsuite/gfortran.dg/assumed_type_11.f90
! 2d2b33b18f35097174c5760e67adb04d  gcc/testsuite/gfortran.dg/assumed_type_12.f90
! 0095136d0d15572b5df206c55509eee2  gcc/testsuite/gfortran.dg/assumed_type_13.c
! aaa14d6b1495ceba3d81c88a0d4874c5  gcc/testsuite/gfortran.dg/assumed_type_13.f90
! 6196ee8a3a5f8e7bc5fb5032beb824b8  gcc/testsuite/gfortran.dg/assumed_type_14.f90
  344877f098e4c4d5e54723572dcff5b8  gcc/testsuite/gfortran.dg/assumed_type_2.f90
  e7b3eba9964feebc5c27a78154c7b547  gcc/testsuite/gfortran.dg/assumed_type_2a.f90
  27b0b5ad82abb1d06990db9025f0c992  gcc/testsuite/gfortran.dg/assumed_type_3.f90
*************** c7b4b66548f050511f0a3316a0f049c8  gcc/te
*** 73544,73569 ****
  d863afb920048efbca3bf6b678a61dec  gcc/testsuite/gfortran.dg/badline.f
  4bbbafb00ed3654d5f517026c6a6817e  gcc/testsuite/gfortran.dg/bessel_1.f90
  614970fa66f9e6f94bffab59cdcbea9e  gcc/testsuite/gfortran.dg/bessel_2.f90
! dce81ab851e36b32886e6f7c8c86afab  gcc/testsuite/gfortran.dg/bessel_3.f90
  f98c4c5663f30de86f0afb3d79ad29d9  gcc/testsuite/gfortran.dg/bessel_4.f90
  7c6a0363c8e5760a8743dd93665ea8ac  gcc/testsuite/gfortran.dg/bessel_5.f90
  feb49f28f0ec043a30b1c7ae6bbf396b  gcc/testsuite/gfortran.dg/bessel_5_redux.f90
  cd4aa7232c928332e81cd4789dde35b5  gcc/testsuite/gfortran.dg/bessel_6.f90
  71cc71770bb1326fb30cecdef3599e69  gcc/testsuite/gfortran.dg/bessel_7.f90
  9969185b5b657469b14a9f67f9a454ce  gcc/testsuite/gfortran.dg/besxy.f90
! 7863c890f7dc67b1115c273e64489c85  gcc/testsuite/gfortran.dg/bind-c-intent-out.f90
  1e97a2cc549ae76c480c160ef4a2470e  gcc/testsuite/gfortran.dg/bind_c_18.f90
  5057ed3328fade26b68ee446f3dbc8dc  gcc/testsuite/gfortran.dg/bind_c_array_params.f03
! 0494b0ca6d11d224f65f64f607a53e22  gcc/testsuite/gfortran.dg/bind_c_array_params_2.f90
  f6b29bf5e92ef393f02569bb463be585  gcc/testsuite/gfortran.dg/bind_c_array_params_3.f90
! 6b21b4bba3d10945860c6b99ccbc87b2  gcc/testsuite/gfortran.dg/bind_c_array_params_3_aux.c
  64b1da6deddc65df427e780f5980935a  gcc/testsuite/gfortran.dg/bind_c_bool_1.f90
  0c1425e45c5a6c571357744025962883  gcc/testsuite/gfortran.dg/bind_c_char_2.f90
  9b7f00463aa66920f8203fdb1cb630dc  gcc/testsuite/gfortran.dg/bind_c_char_3.f90
  fef803e0a62868ee68f738c5a7d05f74  gcc/testsuite/gfortran.dg/bind_c_char_4.f90
  5a262e979f05cf14970cfa43fce48fea  gcc/testsuite/gfortran.dg/bind_c_char_5.f90
  0be2d54dc75c98c5a88980df010d53b7  gcc/testsuite/gfortran.dg/bind_c_coms.f90
  4889c13f805870ea7ba977bf711c64c4  gcc/testsuite/gfortran.dg/bind_c_coms_driver.c
  f0d7ecd83d8615f2d87f3c44e97b3d23  gcc/testsuite/gfortran.dg/bind_c_dts.f90
  20e6e63baa86ba4c4c95005cd1019651  gcc/testsuite/gfortran.dg/bind_c_dts_2.f03
  b96b0917568c41c9e26061dd3ace7e7e  gcc/testsuite/gfortran.dg/bind_c_dts_2_driver.c
--- 78534,78575 ----
  d863afb920048efbca3bf6b678a61dec  gcc/testsuite/gfortran.dg/badline.f
  4bbbafb00ed3654d5f517026c6a6817e  gcc/testsuite/gfortran.dg/bessel_1.f90
  614970fa66f9e6f94bffab59cdcbea9e  gcc/testsuite/gfortran.dg/bessel_2.f90
! 338d31c4d8e43a7760e92363475efc45  gcc/testsuite/gfortran.dg/bessel_3.f90
  f98c4c5663f30de86f0afb3d79ad29d9  gcc/testsuite/gfortran.dg/bessel_4.f90
  7c6a0363c8e5760a8743dd93665ea8ac  gcc/testsuite/gfortran.dg/bessel_5.f90
  feb49f28f0ec043a30b1c7ae6bbf396b  gcc/testsuite/gfortran.dg/bessel_5_redux.f90
  cd4aa7232c928332e81cd4789dde35b5  gcc/testsuite/gfortran.dg/bessel_6.f90
  71cc71770bb1326fb30cecdef3599e69  gcc/testsuite/gfortran.dg/bessel_7.f90
  9969185b5b657469b14a9f67f9a454ce  gcc/testsuite/gfortran.dg/besxy.f90
! 93acf2e57d0045b0633aab0d87f61c61  gcc/testsuite/gfortran.dg/bind-c-char-descr.f90
! cd653804ae21bc8cf96d9dc3a7693eea  gcc/testsuite/gfortran.dg/bind-c-contiguous-1.c
! cb0f8ed7e8b8d5c059565cf119f18b02  gcc/testsuite/gfortran.dg/bind-c-contiguous-1.f90
! ca02676b41a4019beb27cc5105ed7d00  gcc/testsuite/gfortran.dg/bind-c-contiguous-2.f90
! ef79c4b04029319cd1bd66b624b9b837  gcc/testsuite/gfortran.dg/bind-c-contiguous-3.c
! 9533d3411e1d317fc76ffaede5696abc  gcc/testsuite/gfortran.dg/bind-c-contiguous-3.f90
! da9a408376c305a48f33743a14d13fae  gcc/testsuite/gfortran.dg/bind-c-contiguous-4.c
! 40c40be8764f158bc0a518b711ddab83  gcc/testsuite/gfortran.dg/bind-c-contiguous-4.f90
! e7bca71ec4d6bce1a6fc47c9a7d91eac  gcc/testsuite/gfortran.dg/bind-c-contiguous-5.c
! c4c32fa7db37b42da6f9265579d610b4  gcc/testsuite/gfortran.dg/bind-c-contiguous-5.f90
! 62e0dddc82e5528eb1851e887fcffbef  gcc/testsuite/gfortran.dg/bind-c-intent-out.f90
  1e97a2cc549ae76c480c160ef4a2470e  gcc/testsuite/gfortran.dg/bind_c_18.f90
  5057ed3328fade26b68ee446f3dbc8dc  gcc/testsuite/gfortran.dg/bind_c_array_params.f03
! a682c9a07b1430138223515c37de3c4c  gcc/testsuite/gfortran.dg/bind_c_array_params_2.f90
  f6b29bf5e92ef393f02569bb463be585  gcc/testsuite/gfortran.dg/bind_c_array_params_3.f90
! d41af4b478a07609969794a1185527aa  gcc/testsuite/gfortran.dg/bind_c_array_params_3_aux.c
  64b1da6deddc65df427e780f5980935a  gcc/testsuite/gfortran.dg/bind_c_bool_1.f90
+ 673efe19743232f2b0e19d45f7f001f8  gcc/testsuite/gfortran.dg/bind_c_char_10.f90
  0c1425e45c5a6c571357744025962883  gcc/testsuite/gfortran.dg/bind_c_char_2.f90
  9b7f00463aa66920f8203fdb1cb630dc  gcc/testsuite/gfortran.dg/bind_c_char_3.f90
  fef803e0a62868ee68f738c5a7d05f74  gcc/testsuite/gfortran.dg/bind_c_char_4.f90
  5a262e979f05cf14970cfa43fce48fea  gcc/testsuite/gfortran.dg/bind_c_char_5.f90
+ ff3fa4734633ba59df679a8cddaf383e  gcc/testsuite/gfortran.dg/bind_c_char_6.f90
+ 35e81ab598ef4857e8b943f797a45b86  gcc/testsuite/gfortran.dg/bind_c_char_7.f90
+ 7b574e4307059f3c15bfada86c579682  gcc/testsuite/gfortran.dg/bind_c_char_8.f90
+ c3feb53bbd04b3e8d22fc6ad60e200af  gcc/testsuite/gfortran.dg/bind_c_char_9.f90
  0be2d54dc75c98c5a88980df010d53b7  gcc/testsuite/gfortran.dg/bind_c_coms.f90
  4889c13f805870ea7ba977bf711c64c4  gcc/testsuite/gfortran.dg/bind_c_coms_driver.c
+ 0a1494edd75468c78d1a7384c1e5884c  gcc/testsuite/gfortran.dg/bind_c_contiguous.f90
  f0d7ecd83d8615f2d87f3c44e97b3d23  gcc/testsuite/gfortran.dg/bind_c_dts.f90
  20e6e63baa86ba4c4c95005cd1019651  gcc/testsuite/gfortran.dg/bind_c_dts_2.f03
  b96b0917568c41c9e26061dd3ace7e7e  gcc/testsuite/gfortran.dg/bind_c_dts_2_driver.c
*************** c0d788f5fa3898fea232e169e1b1fbd0  gcc/te
*** 73648,73654 ****
  d2102c94673affc257d3e7376d873240  gcc/testsuite/gfortran.dg/binding_label_tests_32.f90
  71cba30c6667a8dc0eed115b1e1f658d  gcc/testsuite/gfortran.dg/binding_label_tests_33.f90
  0ea77c375a124a9cf3c87ab488e29638  gcc/testsuite/gfortran.dg/binding_label_tests_34.f90
! de02e9cb692f0ce92b864a2b94104ab1  gcc/testsuite/gfortran.dg/binding_label_tests_4.f03
  27695dee78547e7050f28a42fe933cf4  gcc/testsuite/gfortran.dg/binding_label_tests_5.f03
  07f203142fb7f0e2e9ab4fdd1b57c16f  gcc/testsuite/gfortran.dg/binding_label_tests_6.f03
  92c3aa6793310e0fc0ef96627b7115b6  gcc/testsuite/gfortran.dg/binding_label_tests_7.f03
--- 78654,78660 ----
  d2102c94673affc257d3e7376d873240  gcc/testsuite/gfortran.dg/binding_label_tests_32.f90
  71cba30c6667a8dc0eed115b1e1f658d  gcc/testsuite/gfortran.dg/binding_label_tests_33.f90
  0ea77c375a124a9cf3c87ab488e29638  gcc/testsuite/gfortran.dg/binding_label_tests_34.f90
! 30bf7172a6348994b72ba6a37d0e1844  gcc/testsuite/gfortran.dg/binding_label_tests_4.f03
  27695dee78547e7050f28a42fe933cf4  gcc/testsuite/gfortran.dg/binding_label_tests_5.f03
  07f203142fb7f0e2e9ab4fdd1b57c16f  gcc/testsuite/gfortran.dg/binding_label_tests_6.f03
  92c3aa6793310e0fc0ef96627b7115b6  gcc/testsuite/gfortran.dg/binding_label_tests_7.f03
*************** c91185a3ccff03eaf3228522d82e998b  gcc/te
*** 73667,73673 ****
  32ce0fc033d0dabfb432fbabf6904563  gcc/testsuite/gfortran.dg/block_16.f08
  10f179cb673e09df610043e9f3876bb2  gcc/testsuite/gfortran.dg/block_2.f08
  c20765c7d7a394e2f5b7ef52556e7d8a  gcc/testsuite/gfortran.dg/block_3.f90
! 9aedc90117c617edc5005f1325a84322  gcc/testsuite/gfortran.dg/block_4.f08
  5826a28855d2689ca0b6a96e416b00a7  gcc/testsuite/gfortran.dg/block_5.f08
  4fb51a4755c21d64590119dbf88abe51  gcc/testsuite/gfortran.dg/block_6.f08
  8d3e16c367e706d4f2c75d63f786b01c  gcc/testsuite/gfortran.dg/block_7.f08
--- 78673,78679 ----
  32ce0fc033d0dabfb432fbabf6904563  gcc/testsuite/gfortran.dg/block_16.f08
  10f179cb673e09df610043e9f3876bb2  gcc/testsuite/gfortran.dg/block_2.f08
  c20765c7d7a394e2f5b7ef52556e7d8a  gcc/testsuite/gfortran.dg/block_3.f90
! e1627e8620425c4babefa34dcd289690  gcc/testsuite/gfortran.dg/block_4.f08
  5826a28855d2689ca0b6a96e416b00a7  gcc/testsuite/gfortran.dg/block_5.f08
  4fb51a4755c21d64590119dbf88abe51  gcc/testsuite/gfortran.dg/block_6.f08
  8d3e16c367e706d4f2c75d63f786b01c  gcc/testsuite/gfortran.dg/block_7.f08
*************** bb9eae20ba772505cb6ecd02fda83088  gcc/te
*** 73790,73795 ****
--- 78796,78992 ----
  8de8ecc2393f168ffb4dd12bfc65a498  gcc/testsuite/gfortran.dg/byte_2.f90
  a52fd98d7c45bd910c1ed53911315920  gcc/testsuite/gfortran.dg/byte_3.f
  eeb705b4f4aa28e01f56aacb185b94fc  gcc/testsuite/gfortran.dg/byte_4.f90
+ 3a776bedb32ad2b9573686d515d62149  gcc/testsuite/gfortran.dg/c-interop/allocatable-dummy-c.c
+ 870554cd81da0008c8ebd14ff9b81c7e  gcc/testsuite/gfortran.dg/c-interop/allocatable-dummy.f90
+ 51ba199a6f152ff1140a6c164b3c0a58  gcc/testsuite/gfortran.dg/c-interop/allocatable-optional-pointer.f90
+ 7efc95be5c5106a9bf6039c07064a0e9  gcc/testsuite/gfortran.dg/c-interop/allocate-c.c
+ 9e8db9a70f750726f64c33febc6a16f7  gcc/testsuite/gfortran.dg/c-interop/allocate-errors-c.c
+ 5bea52eb5a1ddcb30cd03891814af5be  gcc/testsuite/gfortran.dg/c-interop/allocate-errors.f90
+ 05f89be57bd3eb0d2ff1bd4941e2e60c  gcc/testsuite/gfortran.dg/c-interop/allocate.f90
+ e5f92ae76ded5019bcd5b9eb19704367  gcc/testsuite/gfortran.dg/c-interop/argument-association-assumed-rank-1.f90
+ 79616ca59904b274ec0e478fc09c195e  gcc/testsuite/gfortran.dg/c-interop/argument-association-assumed-rank-2.f90
+ c9eab47416cb89b1daef2df96c58b805  gcc/testsuite/gfortran.dg/c-interop/argument-association-assumed-rank-3.f90
+ fac1e0eef372f71d706c30f1311cf959  gcc/testsuite/gfortran.dg/c-interop/argument-association-assumed-rank-4.f90
+ 113805ce9019da70450b332dd60acb45  gcc/testsuite/gfortran.dg/c-interop/argument-association-assumed-rank-5.f90
+ 962af7bfcd8ec869db1d43638ff41388  gcc/testsuite/gfortran.dg/c-interop/argument-association-assumed-rank-6.f90
+ 47a7c8e0cbe96b57e059822a941e38ff  gcc/testsuite/gfortran.dg/c-interop/argument-association-assumed-rank-7.f90
+ 9a80266656ceb43a0a581916f7718edf  gcc/testsuite/gfortran.dg/c-interop/argument-association-assumed-rank-8.f90
+ a4c3a5f902ab2517633f83862a2d36db  gcc/testsuite/gfortran.dg/c-interop/assumed-type-dummy.f90
+ 98037624b2cec02ee1da9a3b07aa206c  gcc/testsuite/gfortran.dg/c-interop/c-interop.exp
+ 309302f256fed78b85c12bcd85ae1482  gcc/testsuite/gfortran.dg/c-interop/c1255-1.f90
+ cd5b73b03b44373ae724b6b48dcfe263  gcc/testsuite/gfortran.dg/c-interop/c1255-2.f90
+ b856ec2d6049479b49cfdb5d1ae43550  gcc/testsuite/gfortran.dg/c-interop/c1255a.f90
+ f4ef2a2a44e97c4aef6d95ade5a23f73  gcc/testsuite/gfortran.dg/c-interop/c407a-1.f90
+ a7d32d5fe5a2c8974b258035dfb1d7f6  gcc/testsuite/gfortran.dg/c-interop/c407a-2.f90
+ 01a106ddd19f10a512f03d97779424a0  gcc/testsuite/gfortran.dg/c-interop/c407b-1.f90
+ 27738d357ea7acdd79bc1f59e68c6c96  gcc/testsuite/gfortran.dg/c-interop/c407b-2.f90
+ 944154928e02eeb59188f73eae6ea8a3  gcc/testsuite/gfortran.dg/c-interop/c407c-1.f90
+ acc32b807a8cf30697ac24ce85728d0d  gcc/testsuite/gfortran.dg/c-interop/c516.f90
+ edaab2c750f1a2a6f3a06ed229a72e2a  gcc/testsuite/gfortran.dg/c-interop/c524a.f90
+ 3181db4347add0defee73cf12bed71fe  gcc/testsuite/gfortran.dg/c-interop/c535a-1.f90
+ 5433f37f55a5330af302aac13d738db9  gcc/testsuite/gfortran.dg/c-interop/c535a-2.f90
+ 6fcccef3ef322e74e6aa96ebccf81faf  gcc/testsuite/gfortran.dg/c-interop/c535b-1.f90
+ babeafa4c37a6503cfba2934a69f6859  gcc/testsuite/gfortran.dg/c-interop/c535b-2.f90
+ 210743c118c1b50d2c8779d9732c61f3  gcc/testsuite/gfortran.dg/c-interop/c535b-3.f90
+ 646b8eb956509b9b9d2bbc38a96b0c26  gcc/testsuite/gfortran.dg/c-interop/c535c-1.f90
+ c935e8d57d55abf6e69c6e38fcefed04  gcc/testsuite/gfortran.dg/c-interop/c535c-2.f90
+ 5f62a6689a58c84de17fc729577fe93f  gcc/testsuite/gfortran.dg/c-interop/c535c-3.f90
+ b06de48d85160686b8ad6ba5ce5fd067  gcc/testsuite/gfortran.dg/c-interop/c535c-4.f90
+ 715c32b5232595131980a6c920635fe5  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-1-c.c
+ 0c127e51b3e0a90f51dcf6ce73661ded  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-1.f90
+ 7e755ac133a28909beb3b9cd198f545b  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-2-c.c
+ f8e25c040f724248f91578e52b3b23ce  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-2.f90
+ 67009fa2f3658e0da95d132325617117  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-3-c.c
+ 705abe757d90e1fedac5206e5d1ff3af  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-3.f90
+ ca169011f6311b6dd370993e70293e8b  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-4-c.c
+ aae9a8c98df0fc96e8aa83892504315f  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-4.f90
+ 2560d9adceb5999b0665f20c3b432a7f  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-5-c.c
+ 4c860f63c4d043c47241bcb63ea46a86  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-5.f90
+ 9734d6ad5caea79f1b2a789273e16514  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-6-c.c
+ c007c5ed88a48a380dfa6a0e5996c0e9  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-6.f90
+ a2ab5f05a6eb455b3a94d628affa2bd5  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-7-c.c
+ 828924977a40c2fa1de9af66b3f064a9  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-7.f90
+ 890cfeb69df8a9429df01c89317f2819  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-8-c.c
+ 0a580f95424e1915d6a6a93581084a49  gcc/testsuite/gfortran.dg/c-interop/cf-descriptor-8.f90
+ ef17a6c578d067c43bb76ff90321d339  gcc/testsuite/gfortran.dg/c-interop/cf-out-descriptor-1-c.c
+ e73c0ea20dbc8c18d4680a67653f5032  gcc/testsuite/gfortran.dg/c-interop/cf-out-descriptor-1.f90
+ ef17a6c578d067c43bb76ff90321d339  gcc/testsuite/gfortran.dg/c-interop/cf-out-descriptor-2-c.c
+ 392a4d1298754058d86b118677ca6183  gcc/testsuite/gfortran.dg/c-interop/cf-out-descriptor-2.f90
+ a4c0b4df65d41a55920b27f4c06c5dda  gcc/testsuite/gfortran.dg/c-interop/cf-out-descriptor-3-c.c
+ 7f318c403be75beb7cdb743d2401270a  gcc/testsuite/gfortran.dg/c-interop/cf-out-descriptor-3.f90
+ 6179b1c05e5c5acb33512982369c91d7  gcc/testsuite/gfortran.dg/c-interop/cf-out-descriptor-4-c.c
+ f1d4971fac6abb7ee70355a087f3dd94  gcc/testsuite/gfortran.dg/c-interop/cf-out-descriptor-4.f90
+ 6dace353909dabd812c2b1c1ee3fe98d  gcc/testsuite/gfortran.dg/c-interop/cf-out-descriptor-5-c.c
+ dea38b421779bf80d2d835661eb2daed  gcc/testsuite/gfortran.dg/c-interop/cf-out-descriptor-5.f90
+ 6c34bc253082ffbd87a906f7e15ad306  gcc/testsuite/gfortran.dg/c-interop/cf-out-descriptor-6-c.c
+ f2a61e005862af07c4641b336ea73037  gcc/testsuite/gfortran.dg/c-interop/cf-out-descriptor-6.f90
+ 44600cde8447ed9bc4c0871911d0025e  gcc/testsuite/gfortran.dg/c-interop/contiguous-1-c.c
+ ac263808f7582a97fc41cf09b1b3217d  gcc/testsuite/gfortran.dg/c-interop/contiguous-1.f90
+ b7f1af97178bf5a82635203dc873a9de  gcc/testsuite/gfortran.dg/c-interop/contiguous-2-c.c
+ 3eba2a660b69782b7134a7868c404312  gcc/testsuite/gfortran.dg/c-interop/contiguous-2.f90
+ 34c23abd9d1282ac1bdf34408ea25b85  gcc/testsuite/gfortran.dg/c-interop/contiguous-3-c.c
+ e7845079fed9556e24e81cbef23553a5  gcc/testsuite/gfortran.dg/c-interop/contiguous-3.f90
+ ec4d2738a934eca22d1e8e2dd9a2cdbf  gcc/testsuite/gfortran.dg/c-interop/deferred-character-1.f90
+ abed1e13399fac5502c10d4110862f06  gcc/testsuite/gfortran.dg/c-interop/deferred-character-2.f90
+ 3af864783561e123ca5b39080203cb5a  gcc/testsuite/gfortran.dg/c-interop/dump-descriptors.c
+ 1f13fc559e846572e031858b1cf1b37b  gcc/testsuite/gfortran.dg/c-interop/dump-descriptors.h
+ 89d82b92bc4c2251ff33ce0597515857  gcc/testsuite/gfortran.dg/c-interop/establish-c.c
+ 4c0aab859957f43e833ebf072d19a909  gcc/testsuite/gfortran.dg/c-interop/establish-errors-c.c
+ 695d3501330320fd2fcaf7ceb0c3064e  gcc/testsuite/gfortran.dg/c-interop/establish-errors.f90
+ 52c864e4ff51fdd927a77b9b65d08bd6  gcc/testsuite/gfortran.dg/c-interop/establish.f90
+ 2bf373e6fe157a7d2e0e61a18c448c93  gcc/testsuite/gfortran.dg/c-interop/explicit-interface.f90
+ bac3970412e6e8c295c91c7badfc1ed0  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-1-c.c
+ 5fa9d2ba341a1a7f0c770cdfec5e3c50  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-1.f90
+ 7a3df7576c81f27ca8d840b37dc6b59b  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-2-c.c
+ 119c09be523051ec6317a10a6c3f67d5  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-2.f90
+ 61f174075d5f8497378389d13c2a47e1  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-3-c.c
+ 16e6c0c671692ee5cba06ed2cc4ba491  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-3.f90
+ 3f899fcf9cb13f18ac1a4a4bb53f9ac6  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-4-c.c
+ dd7a5f7010bb48ac993ef985a9165384  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-4.f90
+ 8137806e0f8ce9cc669109b22ba96b59  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-5-c.c
+ 0670a8123c2ef450d2ab12f0f11f670f  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-5.f90
+ 222536036c0450b0a9d5744805243c4b  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-6-c.c
+ 45151cf928c56588be2e5247719484fb  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-6.f90
+ b6e6eca13239ad74e39e7ae7364bdaf0  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-7-c.c
+ 7c054b3cfca72e130528e3a24d855aca  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-7.f90
+ 2f3e6675a705954c554e207d3be6d04a  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-8-c.c
+ a1f7a9bb337bc4b7ecda29eae2747766  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-8.f90
+ 31b399ee7d4333e2477fc8b53e61ba30  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-9-c.c
+ 437a8f020289de077d683f57f54c430a  gcc/testsuite/gfortran.dg/c-interop/fc-descriptor-9.f90
+ 86b609a9608684b0a78977110ecea0a2  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-1-c.c
+ d91eac03acc180dcbb46b3798f66d90b  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-1.f90
+ 86b609a9608684b0a78977110ecea0a2  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-2-c.c
+ e43a99e5bef77ba910f447ae85918ee7  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-2.f90
+ 78d09dfcff314031471c1ec3c7ccb30b  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-3-c.c
+ a2b29960b83e88897727b8dcd64e20a0  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-3.f90
+ 2267e5ba23e03cffa0a4438feefe4f58  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-4-c.c
+ f13117991c8d46a98ad355519d3c46ff  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-4.f90
+ 55099f8373e549bb6b4c06e430f93bdd  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-5-c.c
+ 200003460df09616133051a9a48c7a9e  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-5.f90
+ bff03b33ac780472497cc9e4e0494df9  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-6-c.c
+ 9a8b1246195986f8b9ab930f3250a948  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-6.f90
+ 7ca4f6b54d8e1ca4fa599b3f3ed38f8e  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-7-c.c
+ dd799b358e3074112d1f8ea7c795b339  gcc/testsuite/gfortran.dg/c-interop/fc-out-descriptor-7.f90
+ cd410678825eed35bcf84b71279bc9cf  gcc/testsuite/gfortran.dg/c-interop/ff-descriptor-1.f90
+ 1b6ebadbb6ce4da894f8922dbdfc2a51  gcc/testsuite/gfortran.dg/c-interop/ff-descriptor-2.f90
+ 2595f324fe814dcddba0e52988b0481d  gcc/testsuite/gfortran.dg/c-interop/ff-descriptor-3.f90
+ b24e0962591f6ab1b3fb36f4728f75b7  gcc/testsuite/gfortran.dg/c-interop/ff-descriptor-4.f90
+ 5f52757148e0ef47b55f6928c40cc1f6  gcc/testsuite/gfortran.dg/c-interop/ff-descriptor-5.f90
+ 491c3455b856c6715f97a879f89433c4  gcc/testsuite/gfortran.dg/c-interop/ff-descriptor-6.f90
+ bfce5ac59545f0f252b1c3783d93a778  gcc/testsuite/gfortran.dg/c-interop/ff-descriptor-7.f90
+ 0ed469767df9ad63ae8a37a6bdfe4014  gcc/testsuite/gfortran.dg/c-interop/note-5-3.f90
+ 8b919d411635d5c22eb80a96b9a83f0f  gcc/testsuite/gfortran.dg/c-interop/note-5-4-c.c
+ 2c86ac59142b2d961e44bc6c25fbb086  gcc/testsuite/gfortran.dg/c-interop/note-5-4.f90
+ 3293dbb813ae5e326d27e6592895790a  gcc/testsuite/gfortran.dg/c-interop/optional-c.c
+ 86dbbdc67fb565f9f4673a8c514c7a90  gcc/testsuite/gfortran.dg/c-interop/optional.f90
+ 840104f1b1412cecbc78d2af3498410a  gcc/testsuite/gfortran.dg/c-interop/pr103287-1.f90
+ 1694e54092d1337bbf702e5060eaf511  gcc/testsuite/gfortran.dg/c-interop/pr103287-2.f90
+ b107ce3e068d53526862e6bdc207c12c  gcc/testsuite/gfortran.dg/c-interop/pr103390-1.f90
+ 915c86aa4b57b78071e17f71bab3d761  gcc/testsuite/gfortran.dg/c-interop/pr103390-2.f90
+ a1577217fb1b9984ec077667c3195cbc  gcc/testsuite/gfortran.dg/c-interop/pr103390-3.f90
+ c7c85e8882c48444ec0351a2305fde75  gcc/testsuite/gfortran.dg/c-interop/pr103390-4.f90
+ fc500f0e1e015dc2b1ccf8395cd8f271  gcc/testsuite/gfortran.dg/c-interop/pr103390-5.f90
+ 9fa17933050635c6e47940ab98b9451e  gcc/testsuite/gfortran.dg/c-interop/pr103390-6.f90
+ 2b3338eacfff7cc2972bf1ab2bbbc35d  gcc/testsuite/gfortran.dg/c-interop/pr103390-7.f90
+ bd423adafd725c2228e295920c0db510  gcc/testsuite/gfortran.dg/c-interop/pr103390-8.f90
+ 7a18ab512bbfa99610eab9a334ac7e3c  gcc/testsuite/gfortran.dg/c-interop/pr103390-9.f90
+ 018d95c070c83cb9218fee64ae6c8a08  gcc/testsuite/gfortran.dg/c-interop/rank-class.f90
+ 5d109d67e9b883cd251cc70baa52140c  gcc/testsuite/gfortran.dg/c-interop/rank.f90
+ a2e3dba03abc75a290796e2afbf50a5d  gcc/testsuite/gfortran.dg/c-interop/removed-restrictions-1.f90
+ e10747846439f9b042678f9ddac6b408  gcc/testsuite/gfortran.dg/c-interop/removed-restrictions-2.f90
+ edfcf5aec211ccd87b0a306c622d1de1  gcc/testsuite/gfortran.dg/c-interop/removed-restrictions-3.f90
+ de41f79499bda039f9e05a4e6693acde  gcc/testsuite/gfortran.dg/c-interop/removed-restrictions-4.f90
+ 31f3d18125be651559c5d3ae8c230edb  gcc/testsuite/gfortran.dg/c-interop/section-1-c.c
+ bd6620f4b559bdbe921426016e5405ce  gcc/testsuite/gfortran.dg/c-interop/section-1.f90
+ cae64a06d7a387fa5396e3e42f5ba520  gcc/testsuite/gfortran.dg/c-interop/section-1p.f90
+ e4d6e0df019defe81c30d7c5d40de18f  gcc/testsuite/gfortran.dg/c-interop/section-2-c.c
+ 674fbce83aed098342ff1eb7bd9c0d25  gcc/testsuite/gfortran.dg/c-interop/section-2.f90
+ 2c6543d4867c08c405eb3b23b4f78924  gcc/testsuite/gfortran.dg/c-interop/section-2p.f90
+ e214c0f807bdd6062fce78aaf677ead2  gcc/testsuite/gfortran.dg/c-interop/section-3-c.c
+ dbe58bcdb66f90cfc9e3358597d71eea  gcc/testsuite/gfortran.dg/c-interop/section-3.f90
+ 7339fd4b5dbe90916791acedd84c43cf  gcc/testsuite/gfortran.dg/c-interop/section-3p.f90
+ e04ce607324dd117cb79909a3a55e52d  gcc/testsuite/gfortran.dg/c-interop/section-4-c.c
+ 43953b073cf2e3502ab02a01a0db803b  gcc/testsuite/gfortran.dg/c-interop/section-4.f90
+ 6299ca938c512577be5d346f58775549  gcc/testsuite/gfortran.dg/c-interop/section-errors-c.c
+ 6a61d474d1ba1dc1b9e56f4b6925dca0  gcc/testsuite/gfortran.dg/c-interop/section-errors.f90
+ 76b562ab2ca8b93fcbba75da4b5b6fbb  gcc/testsuite/gfortran.dg/c-interop/select-c.c
+ 161cf498294177a2ca4734acb4bb7620  gcc/testsuite/gfortran.dg/c-interop/select-errors-c.c
+ 1b95794132e18ea7f418635a1ebeb359  gcc/testsuite/gfortran.dg/c-interop/select-errors.f90
+ 63defbc1d580bc1619132930b999e4fa  gcc/testsuite/gfortran.dg/c-interop/select.f90
+ b938f031add6fdf905ba591f3d774d5f  gcc/testsuite/gfortran.dg/c-interop/setpointer-c.c
+ 7bdf3282cdd9f30d40bf7d3f590f1a6b  gcc/testsuite/gfortran.dg/c-interop/setpointer-errors-c.c
+ 6e5582f7ee0b714e41e4b21e170c6bf0  gcc/testsuite/gfortran.dg/c-interop/setpointer-errors.f90
+ 52ff1bd7b3517447505781a7322f7dce  gcc/testsuite/gfortran.dg/c-interop/setpointer.f90
+ f8bf2b092e452913039c546a00e42a70  gcc/testsuite/gfortran.dg/c-interop/shape-bindc.f90
+ 5ed6955a56207ea64ca8b13512f4ddcd  gcc/testsuite/gfortran.dg/c-interop/shape-poly.f90
+ a2145d17a7bb317f42be3ffbec146f11  gcc/testsuite/gfortran.dg/c-interop/shape.f90
+ d8c7022a40e820f9c12569e3a18082c8  gcc/testsuite/gfortran.dg/c-interop/size-bindc.f90
+ b118592d11ec7228ff5fdf9367fc2b68  gcc/testsuite/gfortran.dg/c-interop/size-poly.f90
+ dfc055b1cbaede099edb5e220bdadfd2  gcc/testsuite/gfortran.dg/c-interop/size.f90
+ 06422b4a5a28bfd7c69b133fede578d9  gcc/testsuite/gfortran.dg/c-interop/tkr.f90
+ 4c6d1d9a4c5aab8c6fa45ba4f89b0b8f  gcc/testsuite/gfortran.dg/c-interop/typecodes-array-basic-c.c
+ 528fec6076f11ac9cc155f2dae639713  gcc/testsuite/gfortran.dg/c-interop/typecodes-array-basic.f90
+ f9354d49184dbe6abf1fcf46887e3427  gcc/testsuite/gfortran.dg/c-interop/typecodes-array-char-c.c
+ 0541ef2f81f918d6e7870509273f402c  gcc/testsuite/gfortran.dg/c-interop/typecodes-array-char.f90
+ 7ab0f74d8a4109a74bb378d17adbf8ce  gcc/testsuite/gfortran.dg/c-interop/typecodes-array-float128-c.c
+ 7091c71357ffeb23915a34c6db168545  gcc/testsuite/gfortran.dg/c-interop/typecodes-array-float128.f90
+ 5c8d746b6bf0f793d665b7fdc5c495fe  gcc/testsuite/gfortran.dg/c-interop/typecodes-array-int128-c.c
+ 6f8fde2ae5c73362b7d094cb10cb2d1e  gcc/testsuite/gfortran.dg/c-interop/typecodes-array-int128.f90
+ fc6bd8e5274089c03d6ba55b6883887c  gcc/testsuite/gfortran.dg/c-interop/typecodes-array-longdouble-c.c
+ 65dc736ae2aff3ec9b8fd1f8a0b9cac6  gcc/testsuite/gfortran.dg/c-interop/typecodes-array-longdouble.f90
+ fb0cb0965c34128a53253c63a38fd1c3  gcc/testsuite/gfortran.dg/c-interop/typecodes-sanity-c.c
+ 217e1da0a68f596efeee44dd40b8b5e6  gcc/testsuite/gfortran.dg/c-interop/typecodes-sanity.f90
+ 5df2801e043da2270f2c218fd11be24a  gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-basic-c.c
+ aa75c3ee38f2255d8d4f30f5a117d3e7  gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-basic.f90
+ 9bb6b7eb8d970cc468823f7394a22b7b  gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-float128-c.c
+ c8c7780f37501d00af8e42439389a8a8  gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-float128.f90
+ e54aff2961030ebeab5d618ab4361344  gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-int128-c.c
+ 3264fe18d81566f32e2da79747a93b69  gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-int128.f90
+ ab1680fba79a3e8495b3b46064f1a59f  gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-longdouble-c.c
+ 72ab9d1ea8830f027bb12860a5e47fe6  gcc/testsuite/gfortran.dg/c-interop/typecodes-scalar-longdouble.f90
+ 8c7f6dde1eea44cf8af5e581897328fa  gcc/testsuite/gfortran.dg/c-interop/ubound-bindc.f90
+ 137d881d0a8857a78cdb9126e2217371  gcc/testsuite/gfortran.dg/c-interop/ubound-poly.f90
+ 37ab8568bd215c1d33b0c69042924b38  gcc/testsuite/gfortran.dg/c-interop/ubound.f90
  1b401bdae1b8b765397b10aa78d39feb  gcc/testsuite/gfortran.dg/c_assoc.f90
  836175653a8d0cef54e1b053f6226dfa  gcc/testsuite/gfortran.dg/c_assoc_2.f03
  0c01f4864b877d36b3d6e539f521f58b  gcc/testsuite/gfortran.dg/c_assoc_3.f90
*************** c5ff5c10906478ae973c32c49eafcc63  gcc/te
*** 73804,73809 ****
--- 79001,79010 ----
  e1bd0cbb4fd7e7d2bdf8b6e16bec09d4  gcc/testsuite/gfortran.dg/c_char_driver.c
  bacc3e482af5248b7f44b5ea0c8d320b  gcc/testsuite/gfortran.dg/c_char_tests.f03
  d8bc762babe74d57d0fb247c2e5852c6  gcc/testsuite/gfortran.dg/c_char_tests_2.f03
+ 3817f8a02101f8150abf9b047c24b5ec  gcc/testsuite/gfortran.dg/c_char_tests_3.f90
+ b1a15a10e459f09791423087320a2726  gcc/testsuite/gfortran.dg/c_char_tests_3_c.c
+ 8b9443962a5d756ad319eda818147b64  gcc/testsuite/gfortran.dg/c_char_tests_4.f90
+ 45d76f41f3bb92d2b9a6b0586128bfaa  gcc/testsuite/gfortran.dg/c_char_tests_5.f90
  9d232d8c034e13b77a9fae602ea40c00  gcc/testsuite/gfortran.dg/c_f_pointer_complex.f03
  f1171b22010cb5ffdc5f3d7a3370bdcf  gcc/testsuite/gfortran.dg/c_f_pointer_complex_driver.c
  29c532057814482ac15d86376b90909b  gcc/testsuite/gfortran.dg/c_f_pointer_logical.f03
*************** bb310597e71d8648c4c14b69f7d31131  gcc/te
*** 73851,73857 ****
  ffa5f5d7a334ba55226b8772a20e8323  gcc/testsuite/gfortran.dg/c_loc_test_19.f90
  6de843415c284c1e56a51ee768d59f6a  gcc/testsuite/gfortran.dg/c_loc_test_20.f90
  5fae9540f12ce154ae745a63dba06487  gcc/testsuite/gfortran.dg/c_loc_test_21.f90
! 4479c62961e0410a2b6d98346f2f3be5  gcc/testsuite/gfortran.dg/c_loc_test_22.f90
  e445fb633b48b36bea498fca43cce336  gcc/testsuite/gfortran.dg/c_loc_tests_10.f03
  1983fb67fbd1598f5a7a4f46d9ceca33  gcc/testsuite/gfortran.dg/c_loc_tests_11.f03
  1abc3a7523c7635588a7df80a53611c1  gcc/testsuite/gfortran.dg/c_loc_tests_12.f03
--- 79052,79058 ----
  ffa5f5d7a334ba55226b8772a20e8323  gcc/testsuite/gfortran.dg/c_loc_test_19.f90
  6de843415c284c1e56a51ee768d59f6a  gcc/testsuite/gfortran.dg/c_loc_test_20.f90
  5fae9540f12ce154ae745a63dba06487  gcc/testsuite/gfortran.dg/c_loc_test_21.f90
! 309cd429cf0d6485c2e30782d8f25ea6  gcc/testsuite/gfortran.dg/c_loc_test_22.f90
  e445fb633b48b36bea498fca43cce336  gcc/testsuite/gfortran.dg/c_loc_tests_10.f03
  1983fb67fbd1598f5a7a4f46d9ceca33  gcc/testsuite/gfortran.dg/c_loc_tests_11.f03
  1abc3a7523c7635588a7df80a53611c1  gcc/testsuite/gfortran.dg/c_loc_tests_12.f03
*************** aa59a3baf7de5feb8be06ee05faaa11a  gcc/te
*** 73896,73902 ****
  10969643d8dd76f6ab66a3a0f7f3ad9c  gcc/testsuite/gfortran.dg/c_sizeof_5.f90
  674fcb118703afdce719a2584839b8ed  gcc/testsuite/gfortran.dg/c_sizeof_6.f90
  ae61c2dcc3bff5189d5648a6564b3745  gcc/testsuite/gfortran.dg/change_symbol_attributes_1.f90
! e06e0a6e29196dab57327c42744340f7  gcc/testsuite/gfortran.dg/char4-subscript.f90
  9f1fda5b71467c689905000a78f63255  gcc/testsuite/gfortran.dg/char4_iunit_1.f03
  9f49208809309c20d0e319c95a978a21  gcc/testsuite/gfortran.dg/char4_iunit_2.f03
  70afd65d545cb796f1318f2fd9ad20a0  gcc/testsuite/gfortran.dg/char_allocation_1.f90
--- 79097,79103 ----
  10969643d8dd76f6ab66a3a0f7f3ad9c  gcc/testsuite/gfortran.dg/c_sizeof_5.f90
  674fcb118703afdce719a2584839b8ed  gcc/testsuite/gfortran.dg/c_sizeof_6.f90
  ae61c2dcc3bff5189d5648a6564b3745  gcc/testsuite/gfortran.dg/change_symbol_attributes_1.f90
! bb5cfe93aa3c0d2700259294558753b1  gcc/testsuite/gfortran.dg/char4-subscript.f90
  9f1fda5b71467c689905000a78f63255  gcc/testsuite/gfortran.dg/char4_iunit_1.f03
  9f49208809309c20d0e319c95a978a21  gcc/testsuite/gfortran.dg/char4_iunit_2.f03
  70afd65d545cb796f1318f2fd9ad20a0  gcc/testsuite/gfortran.dg/char_allocation_1.f90
*************** f644d887f39031b5af20b0a57a7894c4  gcc/te
*** 73962,73967 ****
--- 79163,79169 ----
  96b30f56a9de104b5d79a66d116b672a  gcc/testsuite/gfortran.dg/char_pointer_assign_4.f90
  37eb7ba9eb77543854f7607067c520c8  gcc/testsuite/gfortran.dg/char_pointer_assign_5.f90
  28d4409e03b02cb11c0c9a869cc23b95  gcc/testsuite/gfortran.dg/char_pointer_assign_6.f90
+ d72a8796c203201f3aae12552fdf19c6  gcc/testsuite/gfortran.dg/char_pointer_assign_7.f90
  dd8a633154df2c14213e24aa617b08a2  gcc/testsuite/gfortran.dg/char_pointer_assign_icb_1.f90
  ddf9f77e66c4a8135a264b7cc863b0b6  gcc/testsuite/gfortran.dg/char_pointer_comp_assign.f90
  064ebf7ad523c69997a5cd603b66eb56  gcc/testsuite/gfortran.dg/char_pointer_dependency.f90
*************** b63e59c90ea7e532d83d3417eab591c7  gcc/te
*** 73995,74000 ****
--- 79197,79203 ----
  d4d1fb340ca478a299745df75daaea7d  gcc/testsuite/gfortran.dg/char_unpack_1.f90
  20062ee27793a3ab6304771a89feeaac  gcc/testsuite/gfortran.dg/char_unpack_2.f90
  6bc2e3b27ca09507bcb5682f989dc26f  gcc/testsuite/gfortran.dg/character_array_constructor_1.f90
+ d981a9fd2e0529e4d1838bf916260a24  gcc/testsuite/gfortran.dg/character_array_dummy_1.f90
  5fbba08e564330b3afdb07324b333a7d  gcc/testsuite/gfortran.dg/character_assign_1.f90
  c8bc51d14c4f8a9d5774e81afeecbcc5  gcc/testsuite/gfortran.dg/character_comparison_1.f90
  bd0712a60eec446e744ad00df746504f  gcc/testsuite/gfortran.dg/character_comparison_2.f90
*************** c9785c9fd5f854a6bb32eb226663d4a6  gcc/te
*** 74006,74022 ****
  52155afcdc7f61593bf6506ef7ca2348  gcc/testsuite/gfortran.dg/character_comparison_8.f90
  e095a5844fa090e86a92405f5c0b0dba  gcc/testsuite/gfortran.dg/character_comparison_9.f90
  3c251099889c78e5e0c76fe96288838d  gcc/testsuite/gfortran.dg/character_mismatch.f90
  50a996cd9c41e5c61f567b57a9d68a2d  gcc/testsuite/gfortran.dg/charlen_01.f90
  df26b34bc7ab97ed1f739b2ee67c8985  gcc/testsuite/gfortran.dg/charlen_02.f90
! 8ed6eae1ec67baf9a6e17a1a8bf88aac  gcc/testsuite/gfortran.dg/charlen_04.f90
! 2c01e94b2cc1deaa724f78861744961b  gcc/testsuite/gfortran.dg/charlen_05.f90
! ad81d4410709fcb6ab2b28b24f4215db  gcc/testsuite/gfortran.dg/charlen_06.f90
  f52981b8124b4a688da253ca0f48aa2c  gcc/testsuite/gfortran.dg/charlen_07.f90
  9f11b7cb4e82f033b18a3d8a2cd9037b  gcc/testsuite/gfortran.dg/charlen_08.f90
  a4826d016680638b8424536cba76d16b  gcc/testsuite/gfortran.dg/charlen_09.f90
  f3d0c2f9dd3430fcde70c063f5f1f609  gcc/testsuite/gfortran.dg/charlen_11.f90
  443deceb6d3b1cead5b2c58d61178be8  gcc/testsuite/gfortran.dg/charlen_12.f90
! 6bad81f30a25556523514c32a8e6eeae  gcc/testsuite/gfortran.dg/charlen_13.f90
  a172ca937d7924e5b9285065ca6b21dd  gcc/testsuite/gfortran.dg/charlen_14.f90
  d4173ba9944470c8a1ee298c68c8c1d5  gcc/testsuite/gfortran.dg/charlen_15.f90
  b83b7e261a9a0e3827f879ddb426c6e0  gcc/testsuite/gfortran.dg/charlen_16.f90
--- 79209,79227 ----
  52155afcdc7f61593bf6506ef7ca2348  gcc/testsuite/gfortran.dg/character_comparison_8.f90
  e095a5844fa090e86a92405f5c0b0dba  gcc/testsuite/gfortran.dg/character_comparison_9.f90
  3c251099889c78e5e0c76fe96288838d  gcc/testsuite/gfortran.dg/character_mismatch.f90
+ 9a59817952ffe39d8f72423786ec1e4b  gcc/testsuite/gfortran.dg/character_workout_1.f90
+ 89ddbaa606b83db4b331a67d0037b847  gcc/testsuite/gfortran.dg/character_workout_4.f90
  50a996cd9c41e5c61f567b57a9d68a2d  gcc/testsuite/gfortran.dg/charlen_01.f90
  df26b34bc7ab97ed1f739b2ee67c8985  gcc/testsuite/gfortran.dg/charlen_02.f90
! 46d741cf566dd9670736e8f390a50957  gcc/testsuite/gfortran.dg/charlen_04.f90
! 6c7cfea732fe3666f2e81c2d8109331a  gcc/testsuite/gfortran.dg/charlen_05.f90
! 3b01a5cad367641cef6d8f3ee0baef7e  gcc/testsuite/gfortran.dg/charlen_06.f90
  f52981b8124b4a688da253ca0f48aa2c  gcc/testsuite/gfortran.dg/charlen_07.f90
  9f11b7cb4e82f033b18a3d8a2cd9037b  gcc/testsuite/gfortran.dg/charlen_08.f90
  a4826d016680638b8424536cba76d16b  gcc/testsuite/gfortran.dg/charlen_09.f90
  f3d0c2f9dd3430fcde70c063f5f1f609  gcc/testsuite/gfortran.dg/charlen_11.f90
  443deceb6d3b1cead5b2c58d61178be8  gcc/testsuite/gfortran.dg/charlen_12.f90
! 697089420b400e84a81a5625d6f13c34  gcc/testsuite/gfortran.dg/charlen_13.f90
  a172ca937d7924e5b9285065ca6b21dd  gcc/testsuite/gfortran.dg/charlen_14.f90
  d4173ba9944470c8a1ee298c68c8c1d5  gcc/testsuite/gfortran.dg/charlen_15.f90
  b83b7e261a9a0e3827f879ddb426c6e0  gcc/testsuite/gfortran.dg/charlen_16.f90
*************** dbc20d52e3c86639db916ad3c6392de8  gcc/te
*** 74163,74169 ****
  3c084c9f366d687c0a674b8d42c2ea01  gcc/testsuite/gfortran.dg/class_dummy_4.f03
  198585d6f5262127fa1756b228e70921  gcc/testsuite/gfortran.dg/class_dummy_5.f90
  89120e26e4ec5fd1d963a1d03f515cb6  gcc/testsuite/gfortran.dg/class_dummy_6.f90
! b0d798ee6d75aec23f3be5fd748a1cc6  gcc/testsuite/gfortran.dg/class_dummy_7.f90
  2f2b6b89c03eb0121abcd60df79d27ee  gcc/testsuite/gfortran.dg/class_is_1.f90
  84f9ccdf2ee8c8cfe397a0c82a7730af  gcc/testsuite/gfortran.dg/class_nameclash.f90
  9602d01ce3a47f3e2255aba5f234d1ae  gcc/testsuite/gfortran.dg/class_optional_1.f90
--- 79368,79376 ----
  3c084c9f366d687c0a674b8d42c2ea01  gcc/testsuite/gfortran.dg/class_dummy_4.f03
  198585d6f5262127fa1756b228e70921  gcc/testsuite/gfortran.dg/class_dummy_5.f90
  89120e26e4ec5fd1d963a1d03f515cb6  gcc/testsuite/gfortran.dg/class_dummy_6.f90
! 784981c65487b4a0183cad86f46120aa  gcc/testsuite/gfortran.dg/class_dummy_7.f90
! 0cc6ac2d4005a9c12c43562be1747080  gcc/testsuite/gfortran.dg/class_dummy_8.f90
! 2bfebae5013cc0462982590edf427c4f  gcc/testsuite/gfortran.dg/class_dummy_9.f90
  2f2b6b89c03eb0121abcd60df79d27ee  gcc/testsuite/gfortran.dg/class_is_1.f90
  84f9ccdf2ee8c8cfe397a0c82a7730af  gcc/testsuite/gfortran.dg/class_nameclash.f90
  9602d01ce3a47f3e2255aba5f234d1ae  gcc/testsuite/gfortran.dg/class_optional_1.f90
*************** b7e881e628c247d750478033fea18cb3  gcc/te
*** 74184,74189 ****
--- 79391,79397 ----
  363a8e7237fe405caaa21bb126f5a3a6  gcc/testsuite/gfortran.dg/class_to_type_4.f90
  b51c285d2aa337ba9d51a48947b0788a  gcc/testsuite/gfortran.dg/cmplx_intrinsic_1.f90
  05232ac9689380c9c4954d057d56c002  gcc/testsuite/gfortran.dg/co_reduce_1.f90
+ f8e5c7aff6b53cc113f569da6b580aab  gcc/testsuite/gfortran.dg/co_reduce_2.f90
  ceda0022b0324d13515320cbc5635d79  gcc/testsuite/gfortran.dg/coarray/alloc_comp_1.f90
  939e6c8975a11f2e646a768bac9293f9  gcc/testsuite/gfortran.dg/coarray/alloc_comp_2.f90
  72674e7da2e86dedff70420da3d45132  gcc/testsuite/gfortran.dg/coarray/alloc_comp_3.f90
*************** ceda0022b0324d13515320cbc5635d79  gcc/te
*** 74194,74200 ****
  360f9437516a1e9e5cdfcc0773038d80  gcc/testsuite/gfortran.dg/coarray/array_temporary.f90
  21f18575fa619cf0b7fba877cb8db97f  gcc/testsuite/gfortran.dg/coarray/atomic_1.f90
  0268d93e6cda40e43a982efb5b3db96a  gcc/testsuite/gfortran.dg/coarray/atomic_2.f90
! bf91e5385d99bcbe720366bbe10e1e04  gcc/testsuite/gfortran.dg/coarray/caf.exp
  a8535ad2a515ec0df0ef730df6f14831  gcc/testsuite/gfortran.dg/coarray/codimension.f90
  5458460c74c7764eb6fc6ca41f3520cb  gcc/testsuite/gfortran.dg/coarray/codimension_2.f90
  9604ece34279ee35811c44344503ca51  gcc/testsuite/gfortran.dg/coarray/codimension_2a.f90
--- 79402,79409 ----
  360f9437516a1e9e5cdfcc0773038d80  gcc/testsuite/gfortran.dg/coarray/array_temporary.f90
  21f18575fa619cf0b7fba877cb8db97f  gcc/testsuite/gfortran.dg/coarray/atomic_1.f90
  0268d93e6cda40e43a982efb5b3db96a  gcc/testsuite/gfortran.dg/coarray/atomic_2.f90
! a5906a392ddc33b86a5fb40bf238d925  gcc/testsuite/gfortran.dg/coarray/caf.exp
! 07112584e3674fe4fcd6065abdaec329  gcc/testsuite/gfortran.dg/coarray/coarray_allocated.f90
  a8535ad2a515ec0df0ef730df6f14831  gcc/testsuite/gfortran.dg/coarray/codimension.f90
  5458460c74c7764eb6fc6ca41f3520cb  gcc/testsuite/gfortran.dg/coarray/codimension_2.f90
  9604ece34279ee35811c44344503ca51  gcc/testsuite/gfortran.dg/coarray/codimension_2a.f90
*************** ad8ecfdba25ace790b9bfc8e94e0e05f  gcc/te
*** 74290,74305 ****
  cf7cfa2032f638ac67ce56b7d4e08a3d  gcc/testsuite/gfortran.dg/coarray_41.f90
  248d8d9892330b8d193515001f8f85ab  gcc/testsuite/gfortran.dg/coarray_42.f90
  b67430669a5503a2b6f70e534e303644  gcc/testsuite/gfortran.dg/coarray_43.f90
! 2986ad0025053cce67b288803cf4087f  gcc/testsuite/gfortran.dg/coarray_44.f90
  ae84ff8684b83df37cd04c93355bb779  gcc/testsuite/gfortran.dg/coarray_45.f90
  bdfb211ff859c6346ab45b3805256ba0  gcc/testsuite/gfortran.dg/coarray_46.f90
  0196f422e481e5ac5cb151f859805e29  gcc/testsuite/gfortran.dg/coarray_47.f90
  71dbc67a835765d79b82368a016a86e2  gcc/testsuite/gfortran.dg/coarray_48.f90
  ef172e1d19584d7e55648b555dbf8fa3  gcc/testsuite/gfortran.dg/coarray_5.f90
  337935b709715398df39ee0eeaaec67b  gcc/testsuite/gfortran.dg/coarray_6.f90
  8c9859e53f0764f4cc3872bb5b76dd41  gcc/testsuite/gfortran.dg/coarray_7.f90
  8ee88d8049750d443475d7289d4c08f2  gcc/testsuite/gfortran.dg/coarray_8.f90
! 8050aad4b4793d0de2c06e98903ca98b  gcc/testsuite/gfortran.dg/coarray_9.f90
  c6086bb2f74e754b43ef691cf1b6ea3e  gcc/testsuite/gfortran.dg/coarray_alloc_comp_1.f08
  3ea4f1bb6cd27632f86f990dd870771e  gcc/testsuite/gfortran.dg/coarray_alloc_comp_2.f08
  de6a038b8eedc74e26db5e5afe1cdba6  gcc/testsuite/gfortran.dg/coarray_alloc_comp_3.f08
--- 79499,79515 ----
  cf7cfa2032f638ac67ce56b7d4e08a3d  gcc/testsuite/gfortran.dg/coarray_41.f90
  248d8d9892330b8d193515001f8f85ab  gcc/testsuite/gfortran.dg/coarray_42.f90
  b67430669a5503a2b6f70e534e303644  gcc/testsuite/gfortran.dg/coarray_43.f90
! d760d2f81e5c1193f59f6e95776c5932  gcc/testsuite/gfortran.dg/coarray_44.f90
  ae84ff8684b83df37cd04c93355bb779  gcc/testsuite/gfortran.dg/coarray_45.f90
  bdfb211ff859c6346ab45b3805256ba0  gcc/testsuite/gfortran.dg/coarray_46.f90
  0196f422e481e5ac5cb151f859805e29  gcc/testsuite/gfortran.dg/coarray_47.f90
  71dbc67a835765d79b82368a016a86e2  gcc/testsuite/gfortran.dg/coarray_48.f90
+ c158873a9363ff1c59e6f85586024f23  gcc/testsuite/gfortran.dg/coarray_49.f90
  ef172e1d19584d7e55648b555dbf8fa3  gcc/testsuite/gfortran.dg/coarray_5.f90
  337935b709715398df39ee0eeaaec67b  gcc/testsuite/gfortran.dg/coarray_6.f90
  8c9859e53f0764f4cc3872bb5b76dd41  gcc/testsuite/gfortran.dg/coarray_7.f90
  8ee88d8049750d443475d7289d4c08f2  gcc/testsuite/gfortran.dg/coarray_8.f90
! fb13a77fe326ba654ca8be73c187d02a  gcc/testsuite/gfortran.dg/coarray_9.f90
  c6086bb2f74e754b43ef691cf1b6ea3e  gcc/testsuite/gfortran.dg/coarray_alloc_comp_1.f08
  3ea4f1bb6cd27632f86f990dd870771e  gcc/testsuite/gfortran.dg/coarray_alloc_comp_2.f08
  de6a038b8eedc74e26db5e5afe1cdba6  gcc/testsuite/gfortran.dg/coarray_alloc_comp_3.f08
*************** fd555c460e9a2fe3d73c2849790b7206  gcc/te
*** 74311,74317 ****
  eda6cad3c6c6f004e3137cf3e30aedf1  gcc/testsuite/gfortran.dg/coarray_alloc_with_implicit_sync_2.f90
  964249eae6cd40820f1f28256a0bf3aa  gcc/testsuite/gfortran.dg/coarray_allocate_1.f90
  0224c1e3add89d8da53743943781c0d8  gcc/testsuite/gfortran.dg/coarray_allocate_10.f08
! 89da7a5247ec226a9d595e4ee6bbbab8  gcc/testsuite/gfortran.dg/coarray_allocate_11.f90
  8c719d89a1e3531bbdb311dfa763167b  gcc/testsuite/gfortran.dg/coarray_allocate_2.f08
  c2616fae76af07a79e5d72322ffa2b9f  gcc/testsuite/gfortran.dg/coarray_allocate_3.f08
  e63a013eba2d6fe4cbef12573cb14e52  gcc/testsuite/gfortran.dg/coarray_allocate_4.f08
--- 79521,79528 ----
  eda6cad3c6c6f004e3137cf3e30aedf1  gcc/testsuite/gfortran.dg/coarray_alloc_with_implicit_sync_2.f90
  964249eae6cd40820f1f28256a0bf3aa  gcc/testsuite/gfortran.dg/coarray_allocate_1.f90
  0224c1e3add89d8da53743943781c0d8  gcc/testsuite/gfortran.dg/coarray_allocate_10.f08
! 94c4f4555d713a5abf7e795c395b2311  gcc/testsuite/gfortran.dg/coarray_allocate_11.f90
! a421de7e6309cb4d3d537875698f0ccb  gcc/testsuite/gfortran.dg/coarray_allocate_12.f90
  8c719d89a1e3531bbdb311dfa763167b  gcc/testsuite/gfortran.dg/coarray_allocate_2.f08
  c2616fae76af07a79e5d72322ffa2b9f  gcc/testsuite/gfortran.dg/coarray_allocate_3.f08
  e63a013eba2d6fe4cbef12573cb14e52  gcc/testsuite/gfortran.dg/coarray_allocate_4.f08
*************** f786196105e5eab366818d3158fe2542  gcc/te
*** 74335,74352 ****
  0d35dfac2bd81fdbdc59b60fb76857f2  gcc/testsuite/gfortran.dg/coarray_collectives_11.f90
  f875f58ef0e5f0068e265edfc2e22a74  gcc/testsuite/gfortran.dg/coarray_collectives_12.f90
  f786196105e5eab366818d3158fe2542  gcc/testsuite/gfortran.dg/coarray_collectives_13.f90
! 49c48bdb3f790beaf2d792b51fb1f88b  gcc/testsuite/gfortran.dg/coarray_collectives_14.f90
  65556528ee2d4495d0b0289380c93113  gcc/testsuite/gfortran.dg/coarray_collectives_15.f90
! 5f826f7c4e401cf605594485d7b3b2a8  gcc/testsuite/gfortran.dg/coarray_collectives_16.f90
  e17c609e4211d75cb1a9c28a7cba2d7d  gcc/testsuite/gfortran.dg/coarray_collectives_17.f90
! c2c5695dec9ed843d659ac6a14ae4b7a  gcc/testsuite/gfortran.dg/coarray_collectives_18.f90
  6a77158845ff40d594f51460f18a7035  gcc/testsuite/gfortran.dg/coarray_collectives_2.f90
! d016c048d2e88b36a99993fc32e91abd  gcc/testsuite/gfortran.dg/coarray_collectives_3.f90
  1c59a910233bed95c0b2e61b9fd5d5f6  gcc/testsuite/gfortran.dg/coarray_collectives_4.f90
  f6d626d28521c80db266c5d6181159ef  gcc/testsuite/gfortran.dg/coarray_collectives_5.f90
  d8b0925104e27edfd7554327aec7e656  gcc/testsuite/gfortran.dg/coarray_collectives_6.f90
  3868ecdad997c64216510129983de4eb  gcc/testsuite/gfortran.dg/coarray_collectives_8.f90
! e7f7c38c4530db86c8bf560b1800b017  gcc/testsuite/gfortran.dg/coarray_collectives_9.f90
  967c97a8edd55b3e24d9f53bacf51ab2  gcc/testsuite/gfortran.dg/coarray_critical_1.f90
  80a6683cc6d6fe77e4c0a0173c349d52  gcc/testsuite/gfortran.dg/coarray_data_1.f90
  9548b18ea57c3895468bd270375183d8  gcc/testsuite/gfortran.dg/coarray_dependency_1.f90
--- 79546,79563 ----
  0d35dfac2bd81fdbdc59b60fb76857f2  gcc/testsuite/gfortran.dg/coarray_collectives_11.f90
  f875f58ef0e5f0068e265edfc2e22a74  gcc/testsuite/gfortran.dg/coarray_collectives_12.f90
  f786196105e5eab366818d3158fe2542  gcc/testsuite/gfortran.dg/coarray_collectives_13.f90
! 40a35e69ccae42ac62c1930fea293795  gcc/testsuite/gfortran.dg/coarray_collectives_14.f90
  65556528ee2d4495d0b0289380c93113  gcc/testsuite/gfortran.dg/coarray_collectives_15.f90
! 92024a7873a758e1cdad6bfb5d88b469  gcc/testsuite/gfortran.dg/coarray_collectives_16.f90
  e17c609e4211d75cb1a9c28a7cba2d7d  gcc/testsuite/gfortran.dg/coarray_collectives_17.f90
! 4f5eb2d221195014dcc5ae60b433d454  gcc/testsuite/gfortran.dg/coarray_collectives_18.f90
  6a77158845ff40d594f51460f18a7035  gcc/testsuite/gfortran.dg/coarray_collectives_2.f90
! 536b994dcd893639fe28d02b5b4e32f3  gcc/testsuite/gfortran.dg/coarray_collectives_3.f90
  1c59a910233bed95c0b2e61b9fd5d5f6  gcc/testsuite/gfortran.dg/coarray_collectives_4.f90
  f6d626d28521c80db266c5d6181159ef  gcc/testsuite/gfortran.dg/coarray_collectives_5.f90
  d8b0925104e27edfd7554327aec7e656  gcc/testsuite/gfortran.dg/coarray_collectives_6.f90
  3868ecdad997c64216510129983de4eb  gcc/testsuite/gfortran.dg/coarray_collectives_8.f90
! c4be70fad6f83b1cee9a4a4829c74d53  gcc/testsuite/gfortran.dg/coarray_collectives_9.f90
  967c97a8edd55b3e24d9f53bacf51ab2  gcc/testsuite/gfortran.dg/coarray_critical_1.f90
  80a6683cc6d6fe77e4c0a0173c349d52  gcc/testsuite/gfortran.dg/coarray_data_1.f90
  9548b18ea57c3895468bd270375183d8  gcc/testsuite/gfortran.dg/coarray_dependency_1.f90
*************** b85f62a13d3cc36bdf0f22f1d532889f  gcc/te
*** 74564,74575 ****
  f7e6506db3e2a2cf1acda6f7ed5bb367  gcc/testsuite/gfortran.dg/data_initialized_2.f90
  7c629d12ce2ea9831030b62a2361a453  gcc/testsuite/gfortran.dg/data_initialized_3.f90
  f46c4682d75c7544431499a708875e0d  gcc/testsuite/gfortran.dg/data_inquiry_ref.f90
! 933976674d89973b726184d45668d1af  gcc/testsuite/gfortran.dg/data_invalid.f90
  75c2602db09095225b6558bf5ee7a00d  gcc/testsuite/gfortran.dg/data_namelist_conflict.f90
  bca7e4fe42af4bdc8c5dce540cb962e5  gcc/testsuite/gfortran.dg/data_pointer_1.f90
  20f92cb056c2de7e78393cf1bd92793a  gcc/testsuite/gfortran.dg/data_stmt_pointer.f90
  ea42e7a04380338a9946ffc999ea6767  gcc/testsuite/gfortran.dg/data_substring.f90
  503918b2128c29daa249b849ffe01756  gcc/testsuite/gfortran.dg/data_value_1.f90
  14af14ea46e3fb85fe303f1c5942b0fa  gcc/testsuite/gfortran.dg/deallocate_alloc_opt_1.f90
  079ebbd99b715d218c0619d77fffa7f4  gcc/testsuite/gfortran.dg/deallocate_alloc_opt_2.f90
  3ddb3f58e99f728c3c7b34b22ec9e56b  gcc/testsuite/gfortran.dg/deallocate_alloc_opt_3.f90
--- 79775,79788 ----
  f7e6506db3e2a2cf1acda6f7ed5bb367  gcc/testsuite/gfortran.dg/data_initialized_2.f90
  7c629d12ce2ea9831030b62a2361a453  gcc/testsuite/gfortran.dg/data_initialized_3.f90
  f46c4682d75c7544431499a708875e0d  gcc/testsuite/gfortran.dg/data_inquiry_ref.f90
! fec356f784a1836f74f3dfdcc2aef50a  gcc/testsuite/gfortran.dg/data_invalid.f90
  75c2602db09095225b6558bf5ee7a00d  gcc/testsuite/gfortran.dg/data_namelist_conflict.f90
  bca7e4fe42af4bdc8c5dce540cb962e5  gcc/testsuite/gfortran.dg/data_pointer_1.f90
+ 9d3ff2b5b9a7538d379089fe08ecb0b3  gcc/testsuite/gfortran.dg/data_pointer_2.f90
  20f92cb056c2de7e78393cf1bd92793a  gcc/testsuite/gfortran.dg/data_stmt_pointer.f90
  ea42e7a04380338a9946ffc999ea6767  gcc/testsuite/gfortran.dg/data_substring.f90
  503918b2128c29daa249b849ffe01756  gcc/testsuite/gfortran.dg/data_value_1.f90
+ 1c9c456997563767560c42bbc7a35f29  gcc/testsuite/gfortran.dg/date_and_time_1.f90
  14af14ea46e3fb85fe303f1c5942b0fa  gcc/testsuite/gfortran.dg/deallocate_alloc_opt_1.f90
  079ebbd99b715d218c0619d77fffa7f4  gcc/testsuite/gfortran.dg/deallocate_alloc_opt_2.f90
  3ddb3f58e99f728c3c7b34b22ec9e56b  gcc/testsuite/gfortran.dg/deallocate_alloc_opt_3.f90
*************** adf3e611b5d9dd41324a93faee4fe2c9  gcc/te
*** 74579,74585 ****
  88c4e7deca20be3e33e616092b99e017  gcc/testsuite/gfortran.dg/deallocate_error_4.f90
  70bd882ce015f7f82966397339ec0d16  gcc/testsuite/gfortran.dg/deallocate_stat.f90
  b2d4c30c54f17f05d0e6d3ae921a7be8  gcc/testsuite/gfortran.dg/deallocate_stat_2.f90
! 8b5d2aa2d0dfcb02422f151529bcbfcd  gcc/testsuite/gfortran.dg/debug/debug.exp
  c8fe955f02d446b949b45194c7d29caf  gcc/testsuite/gfortran.dg/debug/pr35154-dwarf2.f
  b39fe2f506d09f10d8bf08a208eeb72f  gcc/testsuite/gfortran.dg/debug/pr35154-stabs.f
  9afde2cd5a8b47b5c4a2b2438fcd4de6  gcc/testsuite/gfortran.dg/debug/pr37738.f
--- 79792,79798 ----
  88c4e7deca20be3e33e616092b99e017  gcc/testsuite/gfortran.dg/deallocate_error_4.f90
  70bd882ce015f7f82966397339ec0d16  gcc/testsuite/gfortran.dg/deallocate_stat.f90
  b2d4c30c54f17f05d0e6d3ae921a7be8  gcc/testsuite/gfortran.dg/deallocate_stat_2.f90
! bdc904a1bfcc31345e087bcfae616335  gcc/testsuite/gfortran.dg/debug/debug.exp
  c8fe955f02d446b949b45194c7d29caf  gcc/testsuite/gfortran.dg/debug/pr35154-dwarf2.f
  b39fe2f506d09f10d8bf08a208eeb72f  gcc/testsuite/gfortran.dg/debug/pr35154-stabs.f
  9afde2cd5a8b47b5c4a2b2438fcd4de6  gcc/testsuite/gfortran.dg/debug/pr37738.f
*************** ad86654ff26be55d6f8c03aa15c45da9  gcc/te
*** 74696,74701 ****
--- 79909,79915 ----
  f955c03c941b0c9e430dd0aa042c978f  gcc/testsuite/gfortran.dg/dec_union_1.f90
  54fa8897424354fe36b1147275b1b014  gcc/testsuite/gfortran.dg/dec_union_10.f90
  5211d9ae6a702f4330743f9f87e83568  gcc/testsuite/gfortran.dg/dec_union_11.f90
+ 436b819785ec03fd97943e5f6729ee25  gcc/testsuite/gfortran.dg/dec_union_12.f90
  6c8431ff3b4a3278ce13b373701985a8  gcc/testsuite/gfortran.dg/dec_union_2.f90
  85cd1980dadce1ec2db721b54e8725bf  gcc/testsuite/gfortran.dg/dec_union_3.f90
  a4db5df7b9375240006aa16fab80e2c0  gcc/testsuite/gfortran.dg/dec_union_4.f90
*************** de26e50850edde76a764d108782037a4  gcc/te
*** 74825,74831 ****
  18bd6a173b22bb353c669d8ab0cbe6df  gcc/testsuite/gfortran.dg/dependency_46.f90
  83ed09b1543e3059e9067be926a73b31  gcc/testsuite/gfortran.dg/dependency_47.f90
  0b500dcd3858e049021939919e789ac4  gcc/testsuite/gfortran.dg/dependency_48.f90
! b708a831578a6c876ea16b95695f6103  gcc/testsuite/gfortran.dg/dependency_49.f90
  590a99c4ec44cc37aa92b225e93d6e87  gcc/testsuite/gfortran.dg/dependency_5.f90
  05077d112c5b175bda81d3ed2d1d2318  gcc/testsuite/gfortran.dg/dependency_50.f90
  e3dcdcb7fb8e68b8ccf780af3eb56518  gcc/testsuite/gfortran.dg/dependency_51.f90
--- 80039,80045 ----
  18bd6a173b22bb353c669d8ab0cbe6df  gcc/testsuite/gfortran.dg/dependency_46.f90
  83ed09b1543e3059e9067be926a73b31  gcc/testsuite/gfortran.dg/dependency_47.f90
  0b500dcd3858e049021939919e789ac4  gcc/testsuite/gfortran.dg/dependency_48.f90
! 33d85f2dae912870758af83b6020a7a3  gcc/testsuite/gfortran.dg/dependency_49.f90
  590a99c4ec44cc37aa92b225e93d6e87  gcc/testsuite/gfortran.dg/dependency_5.f90
  05077d112c5b175bda81d3ed2d1d2318  gcc/testsuite/gfortran.dg/dependency_50.f90
  e3dcdcb7fb8e68b8ccf780af3eb56518  gcc/testsuite/gfortran.dg/dependency_51.f90
*************** cf5153f1f09bb80f5a964ce90c83a5dc  gcc/te
*** 74896,74905 ****
  b522fadd1464db48d2fe8165d2a66e70  gcc/testsuite/gfortran.dg/derived_sub.f90
  652fa12d630d17b29894c33b10c6b1b8  gcc/testsuite/gfortran.dg/dev_null.F90
  94ce3208dac145ea14fc3f821f662788  gcc/testsuite/gfortran.dg/dfloat_1.f90
! 8a82f6ad39191bff0cbbf0171bdf7062  gcc/testsuite/gfortran.dg/dg.exp
! 1880f21af54ba556d37c80bd079cbf78  gcc/testsuite/gfortran.dg/diagnostic-format-json-1.F90
! d234290d0714d33c2c804b2dedce8156  gcc/testsuite/gfortran.dg/diagnostic-format-json-2.F90
! 8d041242bc43092eb3c910cf679d1921  gcc/testsuite/gfortran.dg/diagnostic-format-json-3.F90
  cf9206e8c02e17079f63e1e6860bdb3b  gcc/testsuite/gfortran.dg/dim_range_1.f90
  9233bdc80c05466b893a5980013b72e8  gcc/testsuite/gfortran.dg/dim_sum_1.f90
  a0eae83f56a58410e0887f2da41f7c3b  gcc/testsuite/gfortran.dg/dim_sum_2.f90
--- 80110,80119 ----
  b522fadd1464db48d2fe8165d2a66e70  gcc/testsuite/gfortran.dg/derived_sub.f90
  652fa12d630d17b29894c33b10c6b1b8  gcc/testsuite/gfortran.dg/dev_null.F90
  94ce3208dac145ea14fc3f821f662788  gcc/testsuite/gfortran.dg/dfloat_1.f90
! 7fdb5eba51fa57cb7495f8f9cd302009  gcc/testsuite/gfortran.dg/dg.exp
! d68e25016cad5b1f022cffbaa43b3e17  gcc/testsuite/gfortran.dg/diagnostic-format-json-1.F90
! c653b2b6ebfb0bd4f9c9a3135d0e3a6f  gcc/testsuite/gfortran.dg/diagnostic-format-json-2.F90
! 35a875c0fd48160d34cd136be6468f7f  gcc/testsuite/gfortran.dg/diagnostic-format-json-3.F90
  cf9206e8c02e17079f63e1e6860bdb3b  gcc/testsuite/gfortran.dg/dim_range_1.f90
  9233bdc80c05466b893a5980013b72e8  gcc/testsuite/gfortran.dg/dim_sum_1.f90
  a0eae83f56a58410e0887f2da41f7c3b  gcc/testsuite/gfortran.dg/dim_sum_2.f90
*************** ac4ba6f5f598f2a50f552c87ef9cddca  gcc/te
*** 74924,74930 ****
  62804b9931608efbe7f6506d1b679e64  gcc/testsuite/gfortran.dg/do_1.f90
  b59a9e83027833130c5ee12a722d5ab6  gcc/testsuite/gfortran.dg/do_2.f90
  527f706ecad7d9a9178b8e5fb63caac9  gcc/testsuite/gfortran.dg/do_3.F90
! adae2090c78550da71bc0d69ad7f2410  gcc/testsuite/gfortran.dg/do_4.f
  cdbdebe9161bcc4a79df17d5f5732b28  gcc/testsuite/gfortran.dg/do_5.f90
  772ca6a2275433a18fdf36006544a355  gcc/testsuite/gfortran.dg/do_check_1.f90
  96e2135b923f812fcee419619693640d  gcc/testsuite/gfortran.dg/do_check_10.f90
--- 80138,80144 ----
  62804b9931608efbe7f6506d1b679e64  gcc/testsuite/gfortran.dg/do_1.f90
  b59a9e83027833130c5ee12a722d5ab6  gcc/testsuite/gfortran.dg/do_2.f90
  527f706ecad7d9a9178b8e5fb63caac9  gcc/testsuite/gfortran.dg/do_3.F90
! dc489268379bc022b1292085c385ff70  gcc/testsuite/gfortran.dg/do_4.f
  cdbdebe9161bcc4a79df17d5f5732b28  gcc/testsuite/gfortran.dg/do_5.f90
  772ca6a2275433a18fdf36006544a355  gcc/testsuite/gfortran.dg/do_check_1.f90
  96e2135b923f812fcee419619693640d  gcc/testsuite/gfortran.dg/do_check_10.f90
*************** cc944e9209313a0d97bd7bed7198665c  gcc/te
*** 74956,74962 ****
  7d8c65a65d2d7c5bd8b9ada9a3dd140b  gcc/testsuite/gfortran.dg/do_pointer_1.f90
  8458b67d26bd265665097f2319d6e2f1  gcc/testsuite/gfortran.dg/do_subscript_1.f90
  d37e7d4d6baf021e73df70552ca853bf  gcc/testsuite/gfortran.dg/do_subscript_2.f90
! 40946126fa175aeab63bea1a283b4b96  gcc/testsuite/gfortran.dg/do_subscript_3.f90
  f08c46fcdc9c46cedf2236a4d87d0465  gcc/testsuite/gfortran.dg/do_subscript_4.f90
  554ac42462f9f2205e5a0ddfebcdc939  gcc/testsuite/gfortran.dg/do_subscript_5.f90
  f4c22f8620f9cf0541b8ca7a3458969d  gcc/testsuite/gfortran.dg/do_subscript_6.f90
--- 80170,80176 ----
  7d8c65a65d2d7c5bd8b9ada9a3dd140b  gcc/testsuite/gfortran.dg/do_pointer_1.f90
  8458b67d26bd265665097f2319d6e2f1  gcc/testsuite/gfortran.dg/do_subscript_1.f90
  d37e7d4d6baf021e73df70552ca853bf  gcc/testsuite/gfortran.dg/do_subscript_2.f90
! 2fc34985c6a286fe5eed123aa859f177  gcc/testsuite/gfortran.dg/do_subscript_3.f90
  f08c46fcdc9c46cedf2236a4d87d0465  gcc/testsuite/gfortran.dg/do_subscript_4.f90
  554ac42462f9f2205e5a0ddfebcdc939  gcc/testsuite/gfortran.dg/do_subscript_5.f90
  f4c22f8620f9cf0541b8ca7a3458969d  gcc/testsuite/gfortran.dg/do_subscript_6.f90
*************** a7c723754d10ef5541785fffb91b0578  gcc/te
*** 74965,74973 ****
  eeb8d6e07dce7e2db9e441c445bdd3ac  gcc/testsuite/gfortran.dg/dollar_edit_descriptor_2.f
  e26c1f7f5f5bf58bc20b92b7f15df396  gcc/testsuite/gfortran.dg/dollar_edit_descriptor_3.f
  80e2a872632036dbc651e762eae31aaf  gcc/testsuite/gfortran.dg/dollar_edit_descriptor_4.f
! 05870f48404bf1cf7ee24b20b89766c9  gcc/testsuite/gfortran.dg/dollar_sym_1.f90
  bee33f45b2081d3f23f2f3b508893078  gcc/testsuite/gfortran.dg/dollar_sym_2.f90
! 29c20967118eb556752a80b78d61daa9  gcc/testsuite/gfortran.dg/dollar_sym_3.f
  effb75cdb31e3dbcd1a7b85592b84c1f  gcc/testsuite/gfortran.dg/dos_eol.f
  952c16a38ae15d1e36ed9b9562c250d5  gcc/testsuite/gfortran.dg/dot_product_1.f03
  026122ead1ea6dbb8a504ecdcd82b431  gcc/testsuite/gfortran.dg/dot_product_2.f90
--- 80179,80187 ----
  eeb8d6e07dce7e2db9e441c445bdd3ac  gcc/testsuite/gfortran.dg/dollar_edit_descriptor_2.f
  e26c1f7f5f5bf58bc20b92b7f15df396  gcc/testsuite/gfortran.dg/dollar_edit_descriptor_3.f
  80e2a872632036dbc651e762eae31aaf  gcc/testsuite/gfortran.dg/dollar_edit_descriptor_4.f
! eafc8a4287ee824bb15961aa9a1cc79e  gcc/testsuite/gfortran.dg/dollar_sym_1.f90
  bee33f45b2081d3f23f2f3b508893078  gcc/testsuite/gfortran.dg/dollar_sym_2.f90
! 960d1a8bbc1fc36717ec3d5cb003147e  gcc/testsuite/gfortran.dg/dollar_sym_3.f
  effb75cdb31e3dbcd1a7b85592b84c1f  gcc/testsuite/gfortran.dg/dos_eol.f
  952c16a38ae15d1e36ed9b9562c250d5  gcc/testsuite/gfortran.dg/dot_product_1.f03
  026122ead1ea6dbb8a504ecdcd82b431  gcc/testsuite/gfortran.dg/dot_product_2.f90
*************** d5c2becdf2a2a9b3476dac72cfc54877  gcc/te
*** 75246,75257 ****
  3485cc1f6803a287f97032484eec3440  gcc/testsuite/gfortran.dg/extends_type_of_3.f90
  df764dd66e24cfa5a1af1a03b983104b  gcc/testsuite/gfortran.dg/external_implicit_none.f90
  ce177780ee2e2bc535a2720b3ea4612c  gcc/testsuite/gfortran.dg/external_implicit_none_2.f90
  4eca303332980555d4132fbdc52d774a  gcc/testsuite/gfortran.dg/external_initializer.f90
  bd779906b016bd335bbb19a449289c47  gcc/testsuite/gfortran.dg/external_procedure_4.f90
  e858d42afb6c6feb41d75f84594d0e1f  gcc/testsuite/gfortran.dg/external_procedures_1.f90
  ecf30036a6f1dd697da6f19c378c5e40  gcc/testsuite/gfortran.dg/external_procedures_2.f90
  2625befedf617cfcf62cbf2931fb6f60  gcc/testsuite/gfortran.dg/external_procedures_3.f90
! 6c1ffa5a3f385ca7c11b01e8727a6d29  gcc/testsuite/gfortran.dg/extract_recip_1.f
  1a0985014a861cf2ebe5db90d794bc8f  gcc/testsuite/gfortran.dg/f2003_inquire_1.f03
  cfb14bc5bf59e51052c46e89fe7eb079  gcc/testsuite/gfortran.dg/f2003_io_1.f03
  6cf29d776ec43acb0920fdcf0409369e  gcc/testsuite/gfortran.dg/f2003_io_2.f03
--- 80460,80472 ----
  3485cc1f6803a287f97032484eec3440  gcc/testsuite/gfortran.dg/extends_type_of_3.f90
  df764dd66e24cfa5a1af1a03b983104b  gcc/testsuite/gfortran.dg/external_implicit_none.f90
  ce177780ee2e2bc535a2720b3ea4612c  gcc/testsuite/gfortran.dg/external_implicit_none_2.f90
+ 5382c0977a567fe66307105d5c00e24e  gcc/testsuite/gfortran.dg/external_implicit_none_3.f08
  4eca303332980555d4132fbdc52d774a  gcc/testsuite/gfortran.dg/external_initializer.f90
  bd779906b016bd335bbb19a449289c47  gcc/testsuite/gfortran.dg/external_procedure_4.f90
  e858d42afb6c6feb41d75f84594d0e1f  gcc/testsuite/gfortran.dg/external_procedures_1.f90
  ecf30036a6f1dd697da6f19c378c5e40  gcc/testsuite/gfortran.dg/external_procedures_2.f90
  2625befedf617cfcf62cbf2931fb6f60  gcc/testsuite/gfortran.dg/external_procedures_3.f90
! 3bfc75ac866e7a8d4f0c5461e72d3ef3  gcc/testsuite/gfortran.dg/extract_recip_1.f
  1a0985014a861cf2ebe5db90d794bc8f  gcc/testsuite/gfortran.dg/f2003_inquire_1.f03
  cfb14bc5bf59e51052c46e89fe7eb079  gcc/testsuite/gfortran.dg/f2003_io_1.f03
  6cf29d776ec43acb0920fdcf0409369e  gcc/testsuite/gfortran.dg/f2003_io_2.f03
*************** c868fab8002e99e9fefce05d9715bee5  gcc/te
*** 75282,75288 ****
  18131393256651d0bd551639eab3e10e  gcc/testsuite/gfortran.dg/fimplicit_none_1.f90
  c77a0a5fc1106230319c2398b807df5c  gcc/testsuite/gfortran.dg/fimplicit_none_2.f90
  c031807c998e0243776199536a506418  gcc/testsuite/gfortran.dg/finalize_1.f08
! 15ab8e9eee9458ca251042b82b7b69d5  gcc/testsuite/gfortran.dg/finalize_10.f90
  784234f297364a91d0841e02c618213b  gcc/testsuite/gfortran.dg/finalize_11.f90
  7515141e4dead46e71edb320290fc859  gcc/testsuite/gfortran.dg/finalize_12.f90
  aa76dde0c8f8c461af7f6702bc38655e  gcc/testsuite/gfortran.dg/finalize_13.f90
--- 80497,80503 ----
  18131393256651d0bd551639eab3e10e  gcc/testsuite/gfortran.dg/fimplicit_none_1.f90
  c77a0a5fc1106230319c2398b807df5c  gcc/testsuite/gfortran.dg/fimplicit_none_2.f90
  c031807c998e0243776199536a506418  gcc/testsuite/gfortran.dg/finalize_1.f08
! 9854886ab8d7d1d18c3d0b42f6d1d26d  gcc/testsuite/gfortran.dg/finalize_10.f90
  784234f297364a91d0841e02c618213b  gcc/testsuite/gfortran.dg/finalize_11.f90
  7515141e4dead46e71edb320290fc859  gcc/testsuite/gfortran.dg/finalize_12.f90
  aa76dde0c8f8c461af7f6702bc38655e  gcc/testsuite/gfortran.dg/finalize_13.f90
*************** f9b36e03268b8fbf3e158db0411d848e  gcc/te
*** 75402,75409 ****
  0ad7a8819f05de8b23b8283b0c8e029f  gcc/testsuite/gfortran.dg/fmt_t_7.f
  29caa60344c27f263a0dcb74df9f823f  gcc/testsuite/gfortran.dg/fmt_t_8.f90
  23e100c6e40d413c8810f6734f7fe220  gcc/testsuite/gfortran.dg/fmt_t_9.f
! f312b4d8b000961161786994ea516f6b  gcc/testsuite/gfortran.dg/fmt_tab_1.f90
! ddcbb4a37fd7ccd116523d6aabc1c31d  gcc/testsuite/gfortran.dg/fmt_tab_2.f90
  1b1373434d1b6713e6286ef214a7615c  gcc/testsuite/gfortran.dg/fmt_tl.f
  3b451ba30a155a5d9ad6d75d569e6569  gcc/testsuite/gfortran.dg/fmt_unlimited.f90
  afb11a602b566cba010f9624d3692084  gcc/testsuite/gfortran.dg/fmt_white.f
--- 80617,80624 ----
  0ad7a8819f05de8b23b8283b0c8e029f  gcc/testsuite/gfortran.dg/fmt_t_7.f
  29caa60344c27f263a0dcb74df9f823f  gcc/testsuite/gfortran.dg/fmt_t_8.f90
  23e100c6e40d413c8810f6734f7fe220  gcc/testsuite/gfortran.dg/fmt_t_9.f
! 21798e6e1b32c7c81262db5550ed0605  gcc/testsuite/gfortran.dg/fmt_tab_1.f90
! b77f7bc2538015701a27a0082f4a8ae9  gcc/testsuite/gfortran.dg/fmt_tab_2.f90
  1b1373434d1b6713e6286ef214a7615c  gcc/testsuite/gfortran.dg/fmt_tl.f
  3b451ba30a155a5d9ad6d75d569e6569  gcc/testsuite/gfortran.dg/fmt_unlimited.f90
  afb11a602b566cba010f9624d3692084  gcc/testsuite/gfortran.dg/fmt_white.f
*************** d4c2d7e500c2c0292260e400fd5b1b35  gcc/te
*** 75420,75426 ****
  3e047c1540fce783c3f266e6ee67ad44  gcc/testsuite/gfortran.dg/forall_13.f90
  88ba07228275e9f723d0ff27b19fb77c  gcc/testsuite/gfortran.dg/forall_14.f90
  d654548d92083da2f840d851c1da8d63  gcc/testsuite/gfortran.dg/forall_15.f90
! 674de0e9b0693fe66b62c929b5455f39  gcc/testsuite/gfortran.dg/forall_16.f90
  8e8eb52d04f70625b3d219d75404ef60  gcc/testsuite/gfortran.dg/forall_17.f90
  d0fbcfc827c29dc44f64559d48817278  gcc/testsuite/gfortran.dg/forall_18.f90
  d2879116840ad645734602117b12f640  gcc/testsuite/gfortran.dg/forall_19.f90
--- 80635,80641 ----
  3e047c1540fce783c3f266e6ee67ad44  gcc/testsuite/gfortran.dg/forall_13.f90
  88ba07228275e9f723d0ff27b19fb77c  gcc/testsuite/gfortran.dg/forall_14.f90
  d654548d92083da2f840d851c1da8d63  gcc/testsuite/gfortran.dg/forall_15.f90
! 0524f0bccc3c574fd3e4d9fd30befcf2  gcc/testsuite/gfortran.dg/forall_16.f90
  8e8eb52d04f70625b3d219d75404ef60  gcc/testsuite/gfortran.dg/forall_17.f90
  d0fbcfc827c29dc44f64559d48817278  gcc/testsuite/gfortran.dg/forall_18.f90
  d2879116840ad645734602117b12f640  gcc/testsuite/gfortran.dg/forall_19.f90
*************** f58c27c007929e2bc84bc9ea65174594  gcc/te
*** 75537,75543 ****
  fab68699c26ec79a8fcf803f8f0755d2  gcc/testsuite/gfortran.dg/g77/9263.f
  6fed915411031a4f3f34465bc2dda040  gcc/testsuite/gfortran.dg/g77/947.f
  69443fcbf91bf12a2c1dfbb8680ea12d  gcc/testsuite/gfortran.dg/g77/960317-1.f
! b53679d037558aff69ef730e1f31755f  gcc/testsuite/gfortran.dg/g77/970125-0.f
  b523ca57f59758b9ff343c76e6a18d19  gcc/testsuite/gfortran.dg/g77/970625-2.f
  e48a6adf7417be2e9e5c431aeaf89800  gcc/testsuite/gfortran.dg/g77/970816-3.f
  a2b1e430bb2cc8d70eba7fac7bd65222  gcc/testsuite/gfortran.dg/g77/970915-0.f
--- 80752,80758 ----
  fab68699c26ec79a8fcf803f8f0755d2  gcc/testsuite/gfortran.dg/g77/9263.f
  6fed915411031a4f3f34465bc2dda040  gcc/testsuite/gfortran.dg/g77/947.f
  69443fcbf91bf12a2c1dfbb8680ea12d  gcc/testsuite/gfortran.dg/g77/960317-1.f
! e63c85fb82f7ad5753fa8cbcffd00409  gcc/testsuite/gfortran.dg/g77/970125-0.f
  b523ca57f59758b9ff343c76e6a18d19  gcc/testsuite/gfortran.dg/g77/970625-2.f
  e48a6adf7417be2e9e5c431aeaf89800  gcc/testsuite/gfortran.dg/g77/970816-3.f
  a2b1e430bb2cc8d70eba7fac7bd65222  gcc/testsuite/gfortran.dg/g77/970915-0.f
*************** f87880c019d70b5c8e9649c7f81decb8  gcc/te
*** 75569,75575 ****
  5b8e4d3e937b6a6803378fc996daa1cc  gcc/testsuite/gfortran.dg/g77/980729-0.f
  2101f50ac159df80eeb505634cd4a578  gcc/testsuite/gfortran.dg/g77/981117-1.f
  6aa55ceeb1750d7c19158792b5f97400  gcc/testsuite/gfortran.dg/g77/990115-1.f
! 22784a881f439eca29530755c5254997  gcc/testsuite/gfortran.dg/g77/README
  4593fcff4c64feb2721eea31b88dfb95  gcc/testsuite/gfortran.dg/g77/alpha1.f
  76c5961f1cec6e4fad257f4d1f1fdf35  gcc/testsuite/gfortran.dg/g77/cabs.f
  bf9ae0c15a3a684d969e22501f10d69c  gcc/testsuite/gfortran.dg/g77/check0.f
--- 80784,80790 ----
  5b8e4d3e937b6a6803378fc996daa1cc  gcc/testsuite/gfortran.dg/g77/980729-0.f
  2101f50ac159df80eeb505634cd4a578  gcc/testsuite/gfortran.dg/g77/981117-1.f
  6aa55ceeb1750d7c19158792b5f97400  gcc/testsuite/gfortran.dg/g77/990115-1.f
! 343622eee3d6987a3facd6f19edfba48  gcc/testsuite/gfortran.dg/g77/README
  4593fcff4c64feb2721eea31b88dfb95  gcc/testsuite/gfortran.dg/g77/alpha1.f
  76c5961f1cec6e4fad257f4d1f1fdf35  gcc/testsuite/gfortran.dg/g77/cabs.f
  bf9ae0c15a3a684d969e22501f10d69c  gcc/testsuite/gfortran.dg/g77/check0.f
*************** ae88a47a36ff81768bbc94c2fccb750c  gcc/te
*** 75616,75621 ****
--- 80831,80837 ----
  b95bed0058de43a18f0b95b0a13babee  gcc/testsuite/gfortran.dg/g77/labug1.f
  5cd5db2f5585dc7595a6f6ad12e9e45d  gcc/testsuite/gfortran.dg/g77/large_vec.f
  7ebb2b647b7391d93f548e6b083eeb94  gcc/testsuite/gfortran.dg/g77/le.f
+ 38f3a98d6bdf1614d9d5429efbce8943  gcc/testsuite/gfortran.dg/g77/pr105203.f
  08b2d0aa4e5c504bd6c05415aec457fb  gcc/testsuite/gfortran.dg/g77/pr9258.f
  db8b6c06ec8fa683359365a4c0484581  gcc/testsuite/gfortran.dg/g77/short.f
  632f6b94f0110d72eedbee7641bd627f  gcc/testsuite/gfortran.dg/g77/strlen0.f
*************** b49db20880b8ab9cfe53b41838e49798  gcc/te
*** 75675,75710 ****
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gfortran.dg/gnu_logical_1.F
  a1927f72df8d7dff60593a75c817fd91  gcc/testsuite/gfortran.dg/gnu_logical_2.f90
  4c0ed83ff3a76cf4f276cba63199bc79  gcc/testsuite/gfortran.dg/goacc-gomp/atomic.f90
  cdbe16382c20ff02d5be2370ef235ffd  gcc/testsuite/gfortran.dg/goacc-gomp/fixed-1.f
  1a47a5d775b89e7ea35bb88b047004a6  gcc/testsuite/gfortran.dg/goacc-gomp/free-1.f90
! 77b7a1c7e52cacd955900f76517c1166  gcc/testsuite/gfortran.dg/goacc-gomp/goacc-gomp.exp
  623dd259c1089424ad39ce48ecf7872f  gcc/testsuite/gfortran.dg/goacc/acc_on_device-1.f95
  1bb13022cfc4df10f7b288df9b2ceaa7  gcc/testsuite/gfortran.dg/goacc/acc_on_device-2-off.f95
  a2598ab12e851a8e120b6b107500d27b  gcc/testsuite/gfortran.dg/goacc/acc_on_device-2.f95
  6efd4df3178f228cb542d2003c66b882  gcc/testsuite/gfortran.dg/goacc/array-reduction.f90
! c79027aaf399742636ffa3440fff08d8  gcc/testsuite/gfortran.dg/goacc/array-with-dt-1.f90
! f25bbf3fd235481f511c69a3adbd7bbd  gcc/testsuite/gfortran.dg/goacc/array-with-dt-2.f90
! 1a7e14d903155ce712667ff6ee2c16d2  gcc/testsuite/gfortran.dg/goacc/array-with-dt-3.f90
! 9bc6229906478ab32a5c84e21569e80e  gcc/testsuite/gfortran.dg/goacc/array-with-dt-4.f90
! e3e8718edc126df116f88405fc72f56d  gcc/testsuite/gfortran.dg/goacc/array-with-dt-5.f90
  3674d1489d77dfe034364bd07a8c7db0  gcc/testsuite/gfortran.dg/goacc/array-with-dt-6.f90
  c92cb05a4e19077108b80407be41b8f4  gcc/testsuite/gfortran.dg/goacc/assumed.f95
! f2e50e587c880dd5ab441246f8c42038  gcc/testsuite/gfortran.dg/goacc/asyncwait-1.f95
  8a63d2db2c462621293e094632680b17  gcc/testsuite/gfortran.dg/goacc/asyncwait-2.f95
  f04fe9e035242f264ba1bc7e66f7268c  gcc/testsuite/gfortran.dg/goacc/asyncwait-3.f95
  df94a75f4459698a7eb7a7a16b0f9fdd  gcc/testsuite/gfortran.dg/goacc/asyncwait-4.f95
  fe2df2ce6e9b837974ec76c54da56c62  gcc/testsuite/gfortran.dg/goacc/asyncwait-5.f
  0ff714bbb2fcd709c6b1bd4d6a4dad15  gcc/testsuite/gfortran.dg/goacc/atomic-1.f90
  73ace9355b48232c91ed5b3bc0d60050  gcc/testsuite/gfortran.dg/goacc/atomic.f90
! 0d74fb37c6e6d6468fefa7ac1dacbb6e  gcc/testsuite/gfortran.dg/goacc/attach-descriptor.f90
  b5ce38fdd599e1809965f838521def2e  gcc/testsuite/gfortran.dg/goacc/branch.f95
  109a3ecc87b1bc758772cc9eeee4d842  gcc/testsuite/gfortran.dg/goacc/cache-1.f95
  0770d02d65abc7014c30751880ebe628  gcc/testsuite/gfortran.dg/goacc/cache-2.f95
! b88e233343f746284e9639580513bc2e  gcc/testsuite/gfortran.dg/goacc/classify-kernels-unparallelized.f95
! 6da9354d376dd896a40f328f0fb0380a  gcc/testsuite/gfortran.dg/goacc/classify-kernels.f95
! c1e1b686e09ef58ef1d3a505e93141f8  gcc/testsuite/gfortran.dg/goacc/classify-parallel.f95
! 28117e76d472390694518fb476bb584a  gcc/testsuite/gfortran.dg/goacc/classify-routine.f95
! 56862dad0de474e2e02c32af32ea85ff  gcc/testsuite/gfortran.dg/goacc/classify-serial.f95
  83d4a89dbb466047d65da89db7eebee2  gcc/testsuite/gfortran.dg/goacc/coarray.f95
  802487ba26d5909068b6a8fd851b3b28  gcc/testsuite/gfortran.dg/goacc/coarray_2.f90
  fdee13d4adb6e84872f8e5e823a9e0eb  gcc/testsuite/gfortran.dg/goacc/coindexed-1.f90
--- 80891,80933 ----
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gfortran.dg/gnu_logical_1.F
  a1927f72df8d7dff60593a75c817fd91  gcc/testsuite/gfortran.dg/gnu_logical_2.f90
  4c0ed83ff3a76cf4f276cba63199bc79  gcc/testsuite/gfortran.dg/goacc-gomp/atomic.f90
+ 0cae422b963e880d73cfa54e885c1010  gcc/testsuite/gfortran.dg/goacc-gomp/depobj.f90
  cdbe16382c20ff02d5be2370ef235ffd  gcc/testsuite/gfortran.dg/goacc-gomp/fixed-1.f
  1a47a5d775b89e7ea35bb88b047004a6  gcc/testsuite/gfortran.dg/goacc-gomp/free-1.f90
! 91d656f9a6defa55fd0fd0a3596b4eb9  gcc/testsuite/gfortran.dg/goacc-gomp/goacc-gomp.exp
! 66b451ac1ef6dc37e41acf5ef7d3a7f8  gcc/testsuite/gfortran.dg/goacc-gomp/mixed-1.f
! 2f5688fd6d13ef335191539fb816b1e8  gcc/testsuite/gfortran.dg/goacc-gomp/pr102330-1.f90
  623dd259c1089424ad39ce48ecf7872f  gcc/testsuite/gfortran.dg/goacc/acc_on_device-1.f95
  1bb13022cfc4df10f7b288df9b2ceaa7  gcc/testsuite/gfortran.dg/goacc/acc_on_device-2-off.f95
  a2598ab12e851a8e120b6b107500d27b  gcc/testsuite/gfortran.dg/goacc/acc_on_device-2.f95
  6efd4df3178f228cb542d2003c66b882  gcc/testsuite/gfortran.dg/goacc/array-reduction.f90
! 08f00eb075a1b88f8ceb63d415a5b115  gcc/testsuite/gfortran.dg/goacc/array-with-dt-1.f90
! e979ced56b8199ac0afe2184287bbf2e  gcc/testsuite/gfortran.dg/goacc/array-with-dt-1a.f90
! fa8d6df3ad3d3534b6bd8cb112792922  gcc/testsuite/gfortran.dg/goacc/array-with-dt-2.f90
! 0ef491118ad1cac7263ad53127fb0764  gcc/testsuite/gfortran.dg/goacc/array-with-dt-3.f90
! aeacd6ece8629c48eab42fcb658c8796  gcc/testsuite/gfortran.dg/goacc/array-with-dt-4.f90
! f3111ad444da282a0a5b4915ee85f5bf  gcc/testsuite/gfortran.dg/goacc/array-with-dt-5.f90
  3674d1489d77dfe034364bd07a8c7db0  gcc/testsuite/gfortran.dg/goacc/array-with-dt-6.f90
  c92cb05a4e19077108b80407be41b8f4  gcc/testsuite/gfortran.dg/goacc/assumed.f95
! 7a3254f3b47d322b4df76672cf5fbde6  gcc/testsuite/gfortran.dg/goacc/asyncwait-1.f95
  8a63d2db2c462621293e094632680b17  gcc/testsuite/gfortran.dg/goacc/asyncwait-2.f95
  f04fe9e035242f264ba1bc7e66f7268c  gcc/testsuite/gfortran.dg/goacc/asyncwait-3.f95
  df94a75f4459698a7eb7a7a16b0f9fdd  gcc/testsuite/gfortran.dg/goacc/asyncwait-4.f95
  fe2df2ce6e9b837974ec76c54da56c62  gcc/testsuite/gfortran.dg/goacc/asyncwait-5.f
  0ff714bbb2fcd709c6b1bd4d6a4dad15  gcc/testsuite/gfortran.dg/goacc/atomic-1.f90
  73ace9355b48232c91ed5b3bc0d60050  gcc/testsuite/gfortran.dg/goacc/atomic.f90
! 7dd3055a5068dc373871a3a25715d791  gcc/testsuite/gfortran.dg/goacc/attach-descriptor.f90
  b5ce38fdd599e1809965f838521def2e  gcc/testsuite/gfortran.dg/goacc/branch.f95
  109a3ecc87b1bc758772cc9eeee4d842  gcc/testsuite/gfortran.dg/goacc/cache-1.f95
  0770d02d65abc7014c30751880ebe628  gcc/testsuite/gfortran.dg/goacc/cache-2.f95
! c3059ce555fefba8dd9675d424492d4a  gcc/testsuite/gfortran.dg/goacc/classify-kernels-parloops.f95
! 68fcb8d28444b8c966f14bc0756b722b  gcc/testsuite/gfortran.dg/goacc/classify-kernels-unparallelized-parloops.f95
! e26861ab09a1428a065b40102b60f8f6  gcc/testsuite/gfortran.dg/goacc/classify-kernels-unparallelized.f95
! a331a52131807a0a974ca90cde676520  gcc/testsuite/gfortran.dg/goacc/classify-kernels.f95
! 4956956726757b883a255b67aa149090  gcc/testsuite/gfortran.dg/goacc/classify-parallel.f95
! bb1d58f46b1e8af6fc5dabfddbe00b1e  gcc/testsuite/gfortran.dg/goacc/classify-routine-nohost.f95
! a51a9aa4ceca0d626c1c0773b5a8b28d  gcc/testsuite/gfortran.dg/goacc/classify-routine.f95
! 6f3909ad3a882b6575a68654b01acca1  gcc/testsuite/gfortran.dg/goacc/classify-serial.f95
  83d4a89dbb466047d65da89db7eebee2  gcc/testsuite/gfortran.dg/goacc/coarray.f95
  802487ba26d5909068b6a8fd851b3b28  gcc/testsuite/gfortran.dg/goacc/coarray_2.f90
  fdee13d4adb6e84872f8e5e823a9e0eb  gcc/testsuite/gfortran.dg/goacc/coindexed-1.f90
*************** fdee13d4adb6e84872f8e5e823a9e0eb  gcc/te
*** 75713,75719 ****
  d1e02d6d5cf7ba5e1a5efb88f2c97c94  gcc/testsuite/gfortran.dg/goacc/combined_loop.f90
  81e1bc89345d1f1005b3ffb1dedad16a  gcc/testsuite/gfortran.dg/goacc/common-block-1.f90
  5ffd878d77a15321f5c92e17ae781e51  gcc/testsuite/gfortran.dg/goacc/common-block-2.f90
! e813699bc639156c32efa99137a7c815  gcc/testsuite/gfortran.dg/goacc/common-block-3.f90
  5755b89b23db42c3b355e96f296cba71  gcc/testsuite/gfortran.dg/goacc/continuation-free-form.f95
  1d2b9f57ee07b286f80f6b187af2ff1b  gcc/testsuite/gfortran.dg/goacc/cray-2.f95
  decf3300196fa1217139ef97f2e0edda  gcc/testsuite/gfortran.dg/goacc/cray.f95
--- 80936,80942 ----
  d1e02d6d5cf7ba5e1a5efb88f2c97c94  gcc/testsuite/gfortran.dg/goacc/combined_loop.f90
  81e1bc89345d1f1005b3ffb1dedad16a  gcc/testsuite/gfortran.dg/goacc/common-block-1.f90
  5ffd878d77a15321f5c92e17ae781e51  gcc/testsuite/gfortran.dg/goacc/common-block-2.f90
! 43fa43859924fd9d68c176b555c2878b  gcc/testsuite/gfortran.dg/goacc/common-block-3.f90
  5755b89b23db42c3b355e96f296cba71  gcc/testsuite/gfortran.dg/goacc/continuation-free-form.f95
  1d2b9f57ee07b286f80f6b187af2ff1b  gcc/testsuite/gfortran.dg/goacc/cray-2.f95
  decf3300196fa1217139ef97f2e0edda  gcc/testsuite/gfortran.dg/goacc/cray.f95
*************** f0281cd31a8c4b3fce41c6545e97b15a  gcc/te
*** 75725,75745 ****
  45ad32aa3dc546b5f329cb9991f7735a  gcc/testsuite/gfortran.dg/goacc/declare-3.f95
  edae9111fe15e3f1b8c0607efbf0974a  gcc/testsuite/gfortran.dg/goacc/deep-copy-2.f90
  7afa26213bd0c94c0267d8a959f6f792  gcc/testsuite/gfortran.dg/goacc/default-1.f95
! 22a722a0827f8cc918365cdb58f25111  gcc/testsuite/gfortran.dg/goacc/default-2.f
  8a8869b692be6025b8d25893e126a5bd  gcc/testsuite/gfortran.dg/goacc/default-3.f95
  9ddcab0bb86a09c3ba91367ebb63902c  gcc/testsuite/gfortran.dg/goacc/default-4.f
  4c9397b6b905d9a862759562ff42d768  gcc/testsuite/gfortran.dg/goacc/default-5.f
  7a1a98a21be337079ded815d6a575f0d  gcc/testsuite/gfortran.dg/goacc/default_none.f95
! 78aa3d748f431b1feb7d0453ca50e827  gcc/testsuite/gfortran.dg/goacc/derived-chartypes-1.f90
! 7246f560fb5fd31ed6f38210b6b2de88  gcc/testsuite/gfortran.dg/goacc/derived-chartypes-2.f90
! 1e1d9fd47f26e6946028bde27e2b189a  gcc/testsuite/gfortran.dg/goacc/derived-chartypes-3.f90
! 52323cce88fa9ed14b7e4b78c3e7afa3  gcc/testsuite/gfortran.dg/goacc/derived-chartypes-4.f90
! 26758de4dda1efa9e571727ecb02a1f6  gcc/testsuite/gfortran.dg/goacc/derived-classtypes-1.f95
! 21e29a1992eb35c8b03952845936125a  gcc/testsuite/gfortran.dg/goacc/derived-types-2.f90
  c36dcd790a85c0e24d8ce6b806d09109  gcc/testsuite/gfortran.dg/goacc/derived-types-3.f90
  88646cb96ab13da1ad7ed62a79c20a32  gcc/testsuite/gfortran.dg/goacc/derived-types.f90
! 1c8b2de53f8aaf0bf183889584624b23  gcc/testsuite/gfortran.dg/goacc/enter-exit-data.f95
! 63120e17d3f52a9462e48c7affdb4e8a  gcc/testsuite/gfortran.dg/goacc/finalize-1.f
  5df16712bea807f97abc1370c1e9959a  gcc/testsuite/gfortran.dg/goacc/firstprivate-1.f95
  80979b6cc7e2aaefc5c01c5a5ec35f63  gcc/testsuite/gfortran.dg/goacc/fixed-1.f
  a2e2e82a9ba48ccb237461a95e525152  gcc/testsuite/gfortran.dg/goacc/fixed-2.f
--- 80948,80968 ----
  45ad32aa3dc546b5f329cb9991f7735a  gcc/testsuite/gfortran.dg/goacc/declare-3.f95
  edae9111fe15e3f1b8c0607efbf0974a  gcc/testsuite/gfortran.dg/goacc/deep-copy-2.f90
  7afa26213bd0c94c0267d8a959f6f792  gcc/testsuite/gfortran.dg/goacc/default-1.f95
! ab0cfcf0e3a4578e25ee97747700eab6  gcc/testsuite/gfortran.dg/goacc/default-2.f
  8a8869b692be6025b8d25893e126a5bd  gcc/testsuite/gfortran.dg/goacc/default-3.f95
  9ddcab0bb86a09c3ba91367ebb63902c  gcc/testsuite/gfortran.dg/goacc/default-4.f
  4c9397b6b905d9a862759562ff42d768  gcc/testsuite/gfortran.dg/goacc/default-5.f
  7a1a98a21be337079ded815d6a575f0d  gcc/testsuite/gfortran.dg/goacc/default_none.f95
! b618eb862f12de8a77d9c778c0fb676d  gcc/testsuite/gfortran.dg/goacc/derived-chartypes-1.f90
! 6377fb083eb2b0bc10f8c2b5f74b088f  gcc/testsuite/gfortran.dg/goacc/derived-chartypes-2.f90
! 452c7a8d2759befd796713794b7309b9  gcc/testsuite/gfortran.dg/goacc/derived-chartypes-3.f90
! 37468af92600a967cf5636f78e622194  gcc/testsuite/gfortran.dg/goacc/derived-chartypes-4.f90
! 17df6493471d6fc0378947aa3943d56b  gcc/testsuite/gfortran.dg/goacc/derived-classtypes-1.f95
! ced9c4194559d4398fc3d0a662c16fa1  gcc/testsuite/gfortran.dg/goacc/derived-types-2.f90
  c36dcd790a85c0e24d8ce6b806d09109  gcc/testsuite/gfortran.dg/goacc/derived-types-3.f90
  88646cb96ab13da1ad7ed62a79c20a32  gcc/testsuite/gfortran.dg/goacc/derived-types.f90
! 824ed8f018288696894ab29c8b69e8ca  gcc/testsuite/gfortran.dg/goacc/enter-exit-data.f95
! 606737d58346406f3785966859c2bcc4  gcc/testsuite/gfortran.dg/goacc/finalize-1.f
  5df16712bea807f97abc1370c1e9959a  gcc/testsuite/gfortran.dg/goacc/firstprivate-1.f95
  80979b6cc7e2aaefc5c01c5a5ec35f63  gcc/testsuite/gfortran.dg/goacc/fixed-1.f
  a2e2e82a9ba48ccb237461a95e525152  gcc/testsuite/gfortran.dg/goacc/fixed-2.f
*************** d4c2919d4f88b391fb32fcbe225f7214  gcc/te
*** 75747,75761 ****
  d6fc5ccccdf283b89871056a603002b0  gcc/testsuite/gfortran.dg/goacc/fixed-4.f
  848866b7618965ec43d4d0116c95112e  gcc/testsuite/gfortran.dg/goacc/fixed-5.f
  f47f079a6e8bea88ed65bfb0d0cdaa69  gcc/testsuite/gfortran.dg/goacc/gang-static.f95
! c357e60238ae192b8fd2df66dfd47a1a  gcc/testsuite/gfortran.dg/goacc/goacc.exp
! d9cdf06c1635189bfa8299ce80e5f917  gcc/testsuite/gfortran.dg/goacc/host_data-tree.f95
! d86c0c74ab936aa9908fe7969e7bc213  gcc/testsuite/gfortran.dg/goacc/if.f95
  601f00049a64dd37cde339f2f1f04f67  gcc/testsuite/gfortran.dg/goacc/kernels-alias-2.f95
  d5dc508fa5f0c7f41320b204b50e6bc2  gcc/testsuite/gfortran.dg/goacc/kernels-alias-3.f95
  32c29c5c89fa00146b3a2febdd2b0b26  gcc/testsuite/gfortran.dg/goacc/kernels-alias-4.f95
  8cd8dec04b1d03d31cfd54e3b68060d5  gcc/testsuite/gfortran.dg/goacc/kernels-alias.f95
! 5e0abca54c56f0c52862c963a272d3a5  gcc/testsuite/gfortran.dg/goacc/kernels-decompose-1.f95
! 6a4f83f5cc90513b6d63a5ea1715e489  gcc/testsuite/gfortran.dg/goacc/kernels-decompose-2.f95
  ed5910eefc8b90775d00506871c62da0  gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95
  c738d7665d4b818459d58edaec7add90  gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-2.f95
  03f40c0830316f28f502d3870e120ba7  gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95
--- 80970,80984 ----
  d6fc5ccccdf283b89871056a603002b0  gcc/testsuite/gfortran.dg/goacc/fixed-4.f
  848866b7618965ec43d4d0116c95112e  gcc/testsuite/gfortran.dg/goacc/fixed-5.f
  f47f079a6e8bea88ed65bfb0d0cdaa69  gcc/testsuite/gfortran.dg/goacc/gang-static.f95
! 325cc1231abf616ef468feb2de738bf2  gcc/testsuite/gfortran.dg/goacc/goacc.exp
! 3e7c2fad068860f11c7aa15ab3ac054f  gcc/testsuite/gfortran.dg/goacc/host_data-tree.f95
! 34983f0cd7cb82a92eb6540a1070a1c4  gcc/testsuite/gfortran.dg/goacc/if.f95
  601f00049a64dd37cde339f2f1f04f67  gcc/testsuite/gfortran.dg/goacc/kernels-alias-2.f95
  d5dc508fa5f0c7f41320b204b50e6bc2  gcc/testsuite/gfortran.dg/goacc/kernels-alias-3.f95
  32c29c5c89fa00146b3a2febdd2b0b26  gcc/testsuite/gfortran.dg/goacc/kernels-alias-4.f95
  8cd8dec04b1d03d31cfd54e3b68060d5  gcc/testsuite/gfortran.dg/goacc/kernels-alias.f95
! c6931affee0acf16926b327152c0c3fa  gcc/testsuite/gfortran.dg/goacc/kernels-decompose-1.f95
! f2eedd71f1b6ee777d453b8414e792b9  gcc/testsuite/gfortran.dg/goacc/kernels-decompose-2.f95
  ed5910eefc8b90775d00506871c62da0  gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95
  c738d7665d4b818459d58edaec7add90  gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-2.f95
  03f40c0830316f28f502d3870e120ba7  gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95
*************** b6b177ba5911d45f74f61515ed3f5040  gcc/te
*** 75767,75773 ****
  e623fc0a74695e7ea61e47184cda0228  gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95
  12fccbb98b6c2bfc3ac90b38fc6e14af  gcc/testsuite/gfortran.dg/goacc/kernels-loops-adjacent.f95
  19189ade05048abb4a25acd5d6b0ee85  gcc/testsuite/gfortran.dg/goacc/kernels-parallel-loop-data-enter-exit.f95
! 127e1511a9ae50ccf17deba3c26fa354  gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
  377578f4d9c4ca1cc67ca167393fbec3  gcc/testsuite/gfortran.dg/goacc/list.f95
  e107d4e382d98141b6dc6d451603f328  gcc/testsuite/gfortran.dg/goacc/literal.f95
  0a42f8c0072173fe974f96ab06f83512  gcc/testsuite/gfortran.dg/goacc/loop-1-2.f95
--- 80990,80996 ----
  e623fc0a74695e7ea61e47184cda0228  gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95
  12fccbb98b6c2bfc3ac90b38fc6e14af  gcc/testsuite/gfortran.dg/goacc/kernels-loops-adjacent.f95
  19189ade05048abb4a25acd5d6b0ee85  gcc/testsuite/gfortran.dg/goacc/kernels-parallel-loop-data-enter-exit.f95
! 1e83a45fe1d566dad6e23e336f8cab3c  gcc/testsuite/gfortran.dg/goacc/kernels-tree.f95
  377578f4d9c4ca1cc67ca167393fbec3  gcc/testsuite/gfortran.dg/goacc/list.f95
  e107d4e382d98141b6dc6d451603f328  gcc/testsuite/gfortran.dg/goacc/literal.f95
  0a42f8c0072173fe974f96ab06f83512  gcc/testsuite/gfortran.dg/goacc/loop-1-2.f95
*************** bd5d0215a2a83dbd4aca37cf558a1b08  gcc/te
*** 75786,75818 ****
  8acc04efc98db4b4029c51746d1568e7  gcc/testsuite/gfortran.dg/goacc/loop-tree-1.f90
  4f92207bd61b03b464844ae3360e7402  gcc/testsuite/gfortran.dg/goacc/mapping-tests-1.f90
  adfee0afb71772a6b0adbdf123e106fd  gcc/testsuite/gfortran.dg/goacc/mapping-tests-2.f90
! 31c169bb215da8c1f55f816504cbdfdd  gcc/testsuite/gfortran.dg/goacc/mapping-tests-3.f90
  c2fe35b0f03d0c0f369bb6ffb9c04af4  gcc/testsuite/gfortran.dg/goacc/mapping-tests-4.f90
! 6eef4f6a2c2a9cdd3e84855e5d4e4331  gcc/testsuite/gfortran.dg/goacc/modules.f95
  a7d01192484b5c937807678ca75537ad  gcc/testsuite/gfortran.dg/goacc/multi-clause.f90
! b63fdd4220109ab3e5c80c503d0d446b  gcc/testsuite/gfortran.dg/goacc/nested-function-1.f90
  857698fe86f455613529d9cb6241ed75  gcc/testsuite/gfortran.dg/goacc/nested-parallelism.f90
! 8c0859081efad2609ed876f3059ac516  gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-kernels.f90
! c8531324e9b63a837aba8b23919f14ed  gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-parallel.f90
! 5f7c01ffcf91c4069fa596d3fbc18617  gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90
! 170f8e9439f174a6903abe0dd4c3f659  gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-kernels.f90
! d23087daa01862699e6cbaee34f55860  gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-parallel.f90
! ae500241b1226b6c745a4dcfb9986e64  gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90
  f8fe06410fd4ca50e585e681d35f4482  gcc/testsuite/gfortran.dg/goacc/note-parallelism.f90
! 131cc54b265b6417c369ede28849c7ba  gcc/testsuite/gfortran.dg/goacc/omp-fixed.f
! 7ac95438e9a28b224841f382a0cd1c73  gcc/testsuite/gfortran.dg/goacc/omp.f95
  704a360494113e14e3e848a58a450103  gcc/testsuite/gfortran.dg/goacc/parallel-dims-2.f90
! 752bd0d9ae1bb98a79f53786f00b14e9  gcc/testsuite/gfortran.dg/goacc/parallel-kernels-clauses.f95
  1ba4b22dac74c58581a0548cc088e27d  gcc/testsuite/gfortran.dg/goacc/parallel-kernels-regions.f95
! c4f5a127431f9bed24223ac7f3b3fe59  gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95
  fd7a6f50862314c373f5800561f028a5  gcc/testsuite/gfortran.dg/goacc/parameter.f95
  b4f5bf838607d6206aae8d768d23c64e  gcc/testsuite/gfortran.dg/goacc/pr71704.f90
  2ff86b408ebb7a6e4fa041f1ea4a5204  gcc/testsuite/gfortran.dg/goacc/pr72715.f90
  dff0c4a3dcd2aac51063c6e05c6d4665  gcc/testsuite/gfortran.dg/goacc/pr72743.f90
  4f04968b558efbdc704552ba74ea807d  gcc/testsuite/gfortran.dg/goacc/pr77371-1.f90
  f47a5a2e9ff497a168c9c8d63a06897c  gcc/testsuite/gfortran.dg/goacc/pr77371-2.f90
  868181dc4df402dae3cb3e3a052089ea  gcc/testsuite/gfortran.dg/goacc/pr77765.f90
! 7f782966889c673ed347c3e0c4cb04ce  gcc/testsuite/gfortran.dg/goacc/pr78027.f90
  0cfb760983ed58211c0f565d545f9ff3  gcc/testsuite/gfortran.dg/goacc/pr78260-2.f90
  e87b3bf8d6a7c60741e53c45be2f3fd9  gcc/testsuite/gfortran.dg/goacc/pr78260.f90
  77b32efd84a7f238f0fa5166b3b2fde1  gcc/testsuite/gfortran.dg/goacc/pr84217.f90
--- 81009,81045 ----
  8acc04efc98db4b4029c51746d1568e7  gcc/testsuite/gfortran.dg/goacc/loop-tree-1.f90
  4f92207bd61b03b464844ae3360e7402  gcc/testsuite/gfortran.dg/goacc/mapping-tests-1.f90
  adfee0afb71772a6b0adbdf123e106fd  gcc/testsuite/gfortran.dg/goacc/mapping-tests-2.f90
! 75e8f0ee0422db95232a0547e9afa596  gcc/testsuite/gfortran.dg/goacc/mapping-tests-3.f90
  c2fe35b0f03d0c0f369bb6ffb9c04af4  gcc/testsuite/gfortran.dg/goacc/mapping-tests-4.f90
! 35a9adc6412ef83977b281007c09b010  gcc/testsuite/gfortran.dg/goacc/modules.f95
  a7d01192484b5c937807678ca75537ad  gcc/testsuite/gfortran.dg/goacc/multi-clause.f90
! b0ba9ce1b772ddb893b56e9a234fa899  gcc/testsuite/gfortran.dg/goacc/nested-function-1.f90
  857698fe86f455613529d9cb6241ed75  gcc/testsuite/gfortran.dg/goacc/nested-parallelism.f90
! c15977006fd6ccc480d037bb4c6af9ff  gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-kernels.f90
! b1b2ac6d88bb612b03a9948196714233  gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-parallel.f90
! 77171f4f33a97d9d0c0ed428ab3f3a1b  gcc/testsuite/gfortran.dg/goacc/nested-reductions-1-routine.f90
! c03d85028dd31582bfd3d1f8ca418aa3  gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-kernels.f90
! a003f13028702fcf73483db6234e657a  gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-parallel.f90
! dc0ed8100589e01d391b4954bad7b048  gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90
  f8fe06410fd4ca50e585e681d35f4482  gcc/testsuite/gfortran.dg/goacc/note-parallelism.f90
! 44c6212e07bf6b44bd6d26e3224f93d7  gcc/testsuite/gfortran.dg/goacc/omp-fixed.f
! 0d004a9c292993dcae37ce3958b7e212  gcc/testsuite/gfortran.dg/goacc/omp.f95
! 30617b4201e681ce9fc02f97597b907d  gcc/testsuite/gfortran.dg/goacc/orphan-reductions-1.f90
! c7ee12dc94b4a8a26a060f569b0b87af  gcc/testsuite/gfortran.dg/goacc/orphan-reductions-2.f90
! bb8ae92b32e3f26a7ac46460dcb0eaaa  gcc/testsuite/gfortran.dg/goacc/orphan-reductions-3.f90
  704a360494113e14e3e848a58a450103  gcc/testsuite/gfortran.dg/goacc/parallel-dims-2.f90
! 28cb75f1f081f4155173c6d470dac768  gcc/testsuite/gfortran.dg/goacc/parallel-kernels-clauses.f95
  1ba4b22dac74c58581a0548cc088e27d  gcc/testsuite/gfortran.dg/goacc/parallel-kernels-regions.f95
! 8f0adabcaed1c08a5a8c4b77ca8e9838  gcc/testsuite/gfortran.dg/goacc/parallel-tree.f95
  fd7a6f50862314c373f5800561f028a5  gcc/testsuite/gfortran.dg/goacc/parameter.f95
+ 09ea63acb5c4c7a47cc2d19532460132  gcc/testsuite/gfortran.dg/goacc/pr104717.f90
  b4f5bf838607d6206aae8d768d23c64e  gcc/testsuite/gfortran.dg/goacc/pr71704.f90
  2ff86b408ebb7a6e4fa041f1ea4a5204  gcc/testsuite/gfortran.dg/goacc/pr72715.f90
  dff0c4a3dcd2aac51063c6e05c6d4665  gcc/testsuite/gfortran.dg/goacc/pr72743.f90
  4f04968b558efbdc704552ba74ea807d  gcc/testsuite/gfortran.dg/goacc/pr77371-1.f90
  f47a5a2e9ff497a168c9c8d63a06897c  gcc/testsuite/gfortran.dg/goacc/pr77371-2.f90
  868181dc4df402dae3cb3e3a052089ea  gcc/testsuite/gfortran.dg/goacc/pr77765.f90
! e8961a1b43015e309526cdec381f79ab  gcc/testsuite/gfortran.dg/goacc/pr78027.f90
  0cfb760983ed58211c0f565d545f9ff3  gcc/testsuite/gfortran.dg/goacc/pr78260-2.f90
  e87b3bf8d6a7c60741e53c45be2f3fd9  gcc/testsuite/gfortran.dg/goacc/pr78260.f90
  77b32efd84a7f238f0fa5166b3b2fde1  gcc/testsuite/gfortran.dg/goacc/pr84217.f90
*************** fff3ef606b07a0c12c2323afa6fe446d  gcc/te
*** 75825,75842 ****
  453f49090cd45a5cde8324a8ed445646  gcc/testsuite/gfortran.dg/goacc/pr92793-1.f90
  1d35dffa84f295d1e3711b5a61d9779d  gcc/testsuite/gfortran.dg/goacc/pr93329.f90
  f456cdcfbddab6f8bef5a32a8ae942c7  gcc/testsuite/gfortran.dg/goacc/pr93463.f90
! ba395f40d19da3d39d07f5c922085893  gcc/testsuite/gfortran.dg/goacc/pr93464.f90
  d784778dca55a73519575e6568f22a77  gcc/testsuite/gfortran.dg/goacc/pr94120-1.f90
  c416573c1a8cc44ca5ba7d63ec2aba3c  gcc/testsuite/gfortran.dg/goacc/pr94120-2.f90
  1f098c4f8245d0dfda6b57ce268656f0  gcc/testsuite/gfortran.dg/goacc/pr94120-3.f90
! a70416eb409bcd3ad178b3d0127d84e8  gcc/testsuite/gfortran.dg/goacc/private-3.f95
  a63629c8c309d4d181aa7e4d163f30c1  gcc/testsuite/gfortran.dg/goacc/private-explicit-kernels-1.f95
  4130cb2ad71b7a29b80b0c75c85f4c11  gcc/testsuite/gfortran.dg/goacc/private-explicit-parallel-1.f95
  62bd7093034aa7bc2f8fdadfa99b26d0  gcc/testsuite/gfortran.dg/goacc/private-explicit-routine-1.f95
  24873e7e4fa106bd0e00268afabcef24  gcc/testsuite/gfortran.dg/goacc/private-predetermined-kernels-1.f95
  ec077ad6bdea7dd131d1d252e41327ce  gcc/testsuite/gfortran.dg/goacc/private-predetermined-parallel-1.f95
  d1424a6aff56f84b8594efe4797586c7  gcc/testsuite/gfortran.dg/goacc/private-predetermined-routine-1.f95
! a768662b89b03d92eaafd1b4dbeb5c1c  gcc/testsuite/gfortran.dg/goacc/pure-elemental-procedures-2.f90
  62b5f5b00b9662a8b75727b0922b367d  gcc/testsuite/gfortran.dg/goacc/pure-elemental-procedures.f95
  9b703807d8c979fc38c25732d2b58ed7  gcc/testsuite/gfortran.dg/goacc/reduction-2.f95
  d3ab76f25073383b9b4da99d0ae1d5da  gcc/testsuite/gfortran.dg/goacc/reduction-3.f95
--- 81052,81074 ----
  453f49090cd45a5cde8324a8ed445646  gcc/testsuite/gfortran.dg/goacc/pr92793-1.f90
  1d35dffa84f295d1e3711b5a61d9779d  gcc/testsuite/gfortran.dg/goacc/pr93329.f90
  f456cdcfbddab6f8bef5a32a8ae942c7  gcc/testsuite/gfortran.dg/goacc/pr93463.f90
! 53e5e05b763f714373036ee3c31c7f01  gcc/testsuite/gfortran.dg/goacc/pr93464-2.f90
! 75656a375a89cf61af800fc27b130ac1  gcc/testsuite/gfortran.dg/goacc/pr93464.f90
  d784778dca55a73519575e6568f22a77  gcc/testsuite/gfortran.dg/goacc/pr94120-1.f90
  c416573c1a8cc44ca5ba7d63ec2aba3c  gcc/testsuite/gfortran.dg/goacc/pr94120-2.f90
  1f098c4f8245d0dfda6b57ce268656f0  gcc/testsuite/gfortran.dg/goacc/pr94120-3.f90
! 95c8b61f34d7f56400800fbce26fcfa8  gcc/testsuite/gfortran.dg/goacc/private-3.f95
  a63629c8c309d4d181aa7e4d163f30c1  gcc/testsuite/gfortran.dg/goacc/private-explicit-kernels-1.f95
  4130cb2ad71b7a29b80b0c75c85f4c11  gcc/testsuite/gfortran.dg/goacc/private-explicit-parallel-1.f95
  62bd7093034aa7bc2f8fdadfa99b26d0  gcc/testsuite/gfortran.dg/goacc/private-explicit-routine-1.f95
  24873e7e4fa106bd0e00268afabcef24  gcc/testsuite/gfortran.dg/goacc/private-predetermined-kernels-1.f95
  ec077ad6bdea7dd131d1d252e41327ce  gcc/testsuite/gfortran.dg/goacc/private-predetermined-parallel-1.f95
  d1424a6aff56f84b8594efe4797586c7  gcc/testsuite/gfortran.dg/goacc/private-predetermined-routine-1.f95
! b949bc29146f9b5f6e2679ccc96b2aa1  gcc/testsuite/gfortran.dg/goacc/privatization-1-compute-loop.f90
! 8b4b1130919434a7c3fbccb70cc02590  gcc/testsuite/gfortran.dg/goacc/privatization-1-compute.f90
! ec8b3ba5d1efc904ccce059f464357a0  gcc/testsuite/gfortran.dg/goacc/privatization-1-routine_gang-loop.f90
! 0fdd4c53847a616925b1751ff204d898  gcc/testsuite/gfortran.dg/goacc/privatization-1-routine_gang.f90
! 066700d763e7142e03d2c09ba0f79bde  gcc/testsuite/gfortran.dg/goacc/pure-elemental-procedures-2.f90
  62b5f5b00b9662a8b75727b0922b367d  gcc/testsuite/gfortran.dg/goacc/pure-elemental-procedures.f95
  9b703807d8c979fc38c25732d2b58ed7  gcc/testsuite/gfortran.dg/goacc/reduction-2.f95
  d3ab76f25073383b9b4da99d0ae1d5da  gcc/testsuite/gfortran.dg/goacc/reduction-3.f95
*************** df208766c4856bbc03206680d88a78f7  gcc/te
*** 75846,75870 ****
  98a9635d961b647b2f7ee8a0788d11b0  gcc/testsuite/gfortran.dg/goacc/routine-1.f90
  02135bc0b797b99a2d2126798e1e461b  gcc/testsuite/gfortran.dg/goacc/routine-2.f90
  626c79e2d08f68f4ec1db30fd124ebd1  gcc/testsuite/gfortran.dg/goacc/routine-3.f90
! 9e49765a05b94d921dee5f80e5fcab54  gcc/testsuite/gfortran.dg/goacc/routine-4.f90
  d8bda8310290b20e70bf191a6dd5db15  gcc/testsuite/gfortran.dg/goacc/routine-5.f90
! 4872f301d4ef178f3655f7226cd86934  gcc/testsuite/gfortran.dg/goacc/routine-6.f90
  c324911677ac830a5696fde01efa279e  gcc/testsuite/gfortran.dg/goacc/routine-8.f90
  00ff95e20de8dba72ff8c9fc783f599c  gcc/testsuite/gfortran.dg/goacc/routine-external-level-of-parallelism-1.f
! 1fbfeed1416289936350d34ed13d14aa  gcc/testsuite/gfortran.dg/goacc/routine-external-level-of-parallelism-2.f
  eeb1714a171062365478923ac0347332  gcc/testsuite/gfortran.dg/goacc/routine-intrinsic-1.f
! df6d776ade80739e356b79c373ad7660  gcc/testsuite/gfortran.dg/goacc/routine-intrinsic-2.f
! 331b7b278599a4c1ca8e0773b3988f72  gcc/testsuite/gfortran.dg/goacc/routine-level-of-parallelism-1.f90
! 47c94c8792756ad53f332dc3d58c7d53  gcc/testsuite/gfortran.dg/goacc/routine-module-1.f90
! 710be8151566481f332074cea980c0cc  gcc/testsuite/gfortran.dg/goacc/routine-module-2.f90
! 99b1ca30a95245425faf2957d05489cb  gcc/testsuite/gfortran.dg/goacc/routine-module-3.f90
! f3f9a704a0a1a37891dcfb6e69c1df34  gcc/testsuite/gfortran.dg/goacc/routine-module-mod-1.f90
! ec44b9b0a39ac8255bb3015ffa1a0a70  gcc/testsuite/gfortran.dg/goacc/routine-multiple-directives-1.f90
! bf3565fc39b51d4eba189e3f3e4061ea  gcc/testsuite/gfortran.dg/goacc/routine-multiple-directives-2.f90
  2d941c126fb24bca06e3184011650a7a  gcc/testsuite/gfortran.dg/goacc/routine-multiple-lop-clauses-1.f90
  e3a293acbc8474a1b6769ba9ca054121  gcc/testsuite/gfortran.dg/goacc/sentinel-free-form.f95
  49f1ae5c72a4a5a35c9fdb8f76588e28  gcc/testsuite/gfortran.dg/goacc/several-directives.f95
! 19825bcf5e489ee836a9cf5eacf89321  gcc/testsuite/gfortran.dg/goacc/sie.f95
  60e37464235d4f49f4d84dda14b31375  gcc/testsuite/gfortran.dg/goacc/specification-part.f90
  5b41c13433f57952ca1aeb6e3fb87366  gcc/testsuite/gfortran.dg/goacc/strided-alloc-ptr.f90
  fc701ce0d0e66a16528808980da87172  gcc/testsuite/gfortran.dg/goacc/subarrays.f95
--- 81078,81102 ----
  98a9635d961b647b2f7ee8a0788d11b0  gcc/testsuite/gfortran.dg/goacc/routine-1.f90
  02135bc0b797b99a2d2126798e1e461b  gcc/testsuite/gfortran.dg/goacc/routine-2.f90
  626c79e2d08f68f4ec1db30fd124ebd1  gcc/testsuite/gfortran.dg/goacc/routine-3.f90
! c7f7f4bf3ae51a9ac3c0e717461758b5  gcc/testsuite/gfortran.dg/goacc/routine-4.f90
  d8bda8310290b20e70bf191a6dd5db15  gcc/testsuite/gfortran.dg/goacc/routine-5.f90
! d2c217dba632b4bc9855adf5389424b6  gcc/testsuite/gfortran.dg/goacc/routine-6.f90
  c324911677ac830a5696fde01efa279e  gcc/testsuite/gfortran.dg/goacc/routine-8.f90
  00ff95e20de8dba72ff8c9fc783f599c  gcc/testsuite/gfortran.dg/goacc/routine-external-level-of-parallelism-1.f
! 00b4dd2b0d66f910a79ed8aa3fe85364  gcc/testsuite/gfortran.dg/goacc/routine-external-level-of-parallelism-2.f
  eeb1714a171062365478923ac0347332  gcc/testsuite/gfortran.dg/goacc/routine-intrinsic-1.f
! 0ab6393fcc5e4b69e1c331156c7bb191  gcc/testsuite/gfortran.dg/goacc/routine-intrinsic-2.f
! 8aaf233ea87f2ebf8ae2dda1fa0daeb5  gcc/testsuite/gfortran.dg/goacc/routine-level-of-parallelism-1.f90
! 901797a14c9ca7c4351cab7daf33c593  gcc/testsuite/gfortran.dg/goacc/routine-module-1.f90
! c074a941345e7c99fc1f13a54ca3ddf7  gcc/testsuite/gfortran.dg/goacc/routine-module-2.f90
! c38bb5b07b493e3672d50656f571fad2  gcc/testsuite/gfortran.dg/goacc/routine-module-3.f90
! 0f168f7e7ceda468c529a56f8623dea5  gcc/testsuite/gfortran.dg/goacc/routine-module-mod-1.f90
! 4cf65f895549f70e4b0908e3894ec6c4  gcc/testsuite/gfortran.dg/goacc/routine-multiple-directives-1.f90
! 2cce5ac72927065c0bcdbbc236e285d8  gcc/testsuite/gfortran.dg/goacc/routine-multiple-directives-2.f90
  2d941c126fb24bca06e3184011650a7a  gcc/testsuite/gfortran.dg/goacc/routine-multiple-lop-clauses-1.f90
  e3a293acbc8474a1b6769ba9ca054121  gcc/testsuite/gfortran.dg/goacc/sentinel-free-form.f95
  49f1ae5c72a4a5a35c9fdb8f76588e28  gcc/testsuite/gfortran.dg/goacc/several-directives.f95
! 2b860269b97c88e607615cb0d476fb53  gcc/testsuite/gfortran.dg/goacc/sie.f95
  60e37464235d4f49f4d84dda14b31375  gcc/testsuite/gfortran.dg/goacc/specification-part.f90
  5b41c13433f57952ca1aeb6e3fb87366  gcc/testsuite/gfortran.dg/goacc/strided-alloc-ptr.f90
  fc701ce0d0e66a16528808980da87172  gcc/testsuite/gfortran.dg/goacc/subarrays.f95
*************** bf5941547570c89e5553dc31c4ccebbf  gcc/te
*** 75874,75892 ****
  197f020ff080f3f98f3bfe0bf2a11e09  gcc/testsuite/gfortran.dg/goacc/tile-3.f90
  b81b5f4ac39ebfc6de7e0cff8e11e6e7  gcc/testsuite/gfortran.dg/goacc/tile-4.f90
  19ae649d727cd1230ec6e28183ffa84d  gcc/testsuite/gfortran.dg/goacc/tile-lowering.f95
  2fcae0aca98e7612762a0d64de5d1b4d  gcc/testsuite/gfortran.dg/goacc/uninit-copy-clause.f95
! 9b3bca99ea8a6c6445008f925b6cad2c  gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95
! 64054f67ffff42b4fac330d738c6cc22  gcc/testsuite/gfortran.dg/goacc/uninit-firstprivate-clause.f95
! 62d1dbc920c03d91da337a13532cac48  gcc/testsuite/gfortran.dg/goacc/uninit-if-clause.f95
! 720e8ae3729943a78fd9e4bd1897aa92  gcc/testsuite/gfortran.dg/goacc/uninit-use-device-clause.f95
  e5de83f3c72df9c91e2516026a10fd5c  gcc/testsuite/gfortran.dg/goacc/update-if_present-1.f90
! a7b5ad1ca2e567fcb659aed37de115db  gcc/testsuite/gfortran.dg/goacc/update-if_present-2.f90
  5c6b557fbcefd15ad6ec6ef08ade9d19  gcc/testsuite/gfortran.dg/goacc/update.f95
  e9972505e1a87fdeda00b94d99cf711b  gcc/testsuite/gfortran.dg/goacc/vector_length.f90
! ca7b1430257c87857673c1facde6a8d8  gcc/testsuite/gfortran.dg/goacc/wait.f90
  e8a02da7f34b2a2a9f386eefa3b51bb0  gcc/testsuite/gfortran.dg/goacc/warn_truncated.f90
! fe34d9d42d37b9776459e695b904bc39  gcc/testsuite/gfortran.dg/gomp/affinity-1.f90
  5633756a662441452bd869456e985808  gcc/testsuite/gfortran.dg/gomp/allocatable_components_1.f90
  a2a78b9dfd24cc5b801a51ebf7713787  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.1.1.f90
  a939ad660a97fdd3a36058fbbed08e4e  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.11.1.f90
  be2dfd843076b56ef43acf3c66d28133  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.11.2.f90
--- 81106,81134 ----
  197f020ff080f3f98f3bfe0bf2a11e09  gcc/testsuite/gfortran.dg/goacc/tile-3.f90
  b81b5f4ac39ebfc6de7e0cff8e11e6e7  gcc/testsuite/gfortran.dg/goacc/tile-4.f90
  19ae649d727cd1230ec6e28183ffa84d  gcc/testsuite/gfortran.dg/goacc/tile-lowering.f95
+ 7ea654e0edd65cf1fe8103d5dd6b9711  gcc/testsuite/gfortran.dg/goacc/unexpected-end.f90
  2fcae0aca98e7612762a0d64de5d1b4d  gcc/testsuite/gfortran.dg/goacc/uninit-copy-clause.f95
! bebac4bfa98c897bd162574a4f45948c  gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95
! 88380bbdf624680e8db8f7d98c484e9c  gcc/testsuite/gfortran.dg/goacc/uninit-firstprivate-clause.f95
! 3234af1e2cfb18d39404aaf9ed2b4dc5  gcc/testsuite/gfortran.dg/goacc/uninit-if-clause.f95
! cc049d7a09437572cf0153480f72863e  gcc/testsuite/gfortran.dg/goacc/uninit-use-device-clause.f95
  e5de83f3c72df9c91e2516026a10fd5c  gcc/testsuite/gfortran.dg/goacc/update-if_present-1.f90
! 710a82a68ac5694636887f347246fc72  gcc/testsuite/gfortran.dg/goacc/update-if_present-2.f90
  5c6b557fbcefd15ad6ec6ef08ade9d19  gcc/testsuite/gfortran.dg/goacc/update.f95
  e9972505e1a87fdeda00b94d99cf711b  gcc/testsuite/gfortran.dg/goacc/vector_length.f90
! d09b6d0bd3c55d3b99ebe64fe2ee3d04  gcc/testsuite/gfortran.dg/goacc/wait.f90
  e8a02da7f34b2a2a9f386eefa3b51bb0  gcc/testsuite/gfortran.dg/goacc/warn_truncated.f90
! 911e262e498830097ca8c02694f76c13  gcc/testsuite/gfortran.dg/gomp/affinity-1.f90
! 4340040405330b6de1b9cbe51ac526b3  gcc/testsuite/gfortran.dg/gomp/affinity-clause-1.f90
! 3242eb8cd0e2489c3dcfa485f3b75d28  gcc/testsuite/gfortran.dg/gomp/affinity-clause-2.f90
! e417d854c53b75c2ba1bf99e780e44f9  gcc/testsuite/gfortran.dg/gomp/affinity-clause-3.f90
! b2a15eb44cc92a12d36531f8567b9335  gcc/testsuite/gfortran.dg/gomp/affinity-clause-4.f90
! 6aa253bfcd4cd89edea599b383253700  gcc/testsuite/gfortran.dg/gomp/affinity-clause-5.f90
! 584f6a934e529a7dfb8b7de87cfbf646  gcc/testsuite/gfortran.dg/gomp/affinity-clause-6.f90
  5633756a662441452bd869456e985808  gcc/testsuite/gfortran.dg/gomp/allocatable_components_1.f90
+ d8f891883879b40925714053d72765b2  gcc/testsuite/gfortran.dg/gomp/allocate-1.f90
+ b9fa7dddfdd19370c87587727ea3a52b  gcc/testsuite/gfortran.dg/gomp/allocate-2.f90
+ f70bcc8c1abe849febbd615a88a92d42  gcc/testsuite/gfortran.dg/gomp/allocate-3.f90
  a2a78b9dfd24cc5b801a51ebf7713787  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.1.1.f90
  a939ad660a97fdd3a36058fbbed08e4e  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.11.1.f90
  be2dfd843076b56ef43acf3c66d28133  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.11.2.f90
*************** e2405fcffa82b9acf1b1076f87c4061a  gcc/te
*** 75941,75953 ****
  953bdf3d3c109936d52b7448c0cf914f  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.7.2.f90
  990da4894eee5b8e82d214eabde8634d  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.8.1.f90
  fc76de5411a6ea3d2ef0e979cd24294f  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.9.1.f90
! 552f0c0302bb6592f6a2fb291b4586a6  gcc/testsuite/gfortran.dg/gomp/associate1.f90
! 1ee7be8269e3dcd8346d718addc606c0  gcc/testsuite/gfortran.dg/gomp/atomic-2.f90
! 182854045b382f7f1ffdae0d99b513f3  gcc/testsuite/gfortran.dg/gomp/atomic.f90
  bab96c8ce5beeb0e7d9e4dae2fd0ea5f  gcc/testsuite/gfortran.dg/gomp/block-1.f90
! acb12c798525045485e167ffc4dabf8c  gcc/testsuite/gfortran.dg/gomp/cancel-2.f90
  c2875e99b414fbced20c5c41d21b04c4  gcc/testsuite/gfortran.dg/gomp/cancel-3.f90
! afcba399af3e0f296b4e3c48a77f2569  gcc/testsuite/gfortran.dg/gomp/collapse1.f90
  0d28facbb96730c300fadf428745b605  gcc/testsuite/gfortran.dg/gomp/collapse2.f90
  36990c2a4b5e499e3cd93ef78508f038  gcc/testsuite/gfortran.dg/gomp/combined-if.f90
  5889f294d23bf018b629ca16a28a09c2  gcc/testsuite/gfortran.dg/gomp/crayptr1.f90
--- 81183,81218 ----
  953bdf3d3c109936d52b7448c0cf914f  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.7.2.f90
  990da4894eee5b8e82d214eabde8634d  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.8.1.f90
  fc76de5411a6ea3d2ef0e979cd24294f  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.9.1.f90
! 9a03fab1b305d530442f88512d22ac27  gcc/testsuite/gfortran.dg/gomp/associate1.f90
! e1b308679ecb209975b7e9df6d561839  gcc/testsuite/gfortran.dg/gomp/associate2.f90
! 35cd43e5e50dfb825738cd8d77ba5b24  gcc/testsuite/gfortran.dg/gomp/atomic-10.f90
! 66c185ce06ff0acbc15f2a764d987902  gcc/testsuite/gfortran.dg/gomp/atomic-12.f90
! dbe2f40d97bc2b89c8b1256683958181  gcc/testsuite/gfortran.dg/gomp/atomic-15.f90
! 31ca7830c65286200d3751d1deb442d6  gcc/testsuite/gfortran.dg/gomp/atomic-16.f90
! db982f8aaa5c93cb90d9bccb3251e49d  gcc/testsuite/gfortran.dg/gomp/atomic-17.f90
! 537416660ff376cc0dd28a10c3defe5a  gcc/testsuite/gfortran.dg/gomp/atomic-18.f90
! fd464227b1a97174f131a5d83bf06bbe  gcc/testsuite/gfortran.dg/gomp/atomic-19.f90
! f23f31e3aab2957fab88d7b7ca1212de  gcc/testsuite/gfortran.dg/gomp/atomic-2.f90
! 2411d6510005aaa3129dd37b5e2d7c90  gcc/testsuite/gfortran.dg/gomp/atomic-20.f90
! acdf49e6d1ffefedd4f1d64101915202  gcc/testsuite/gfortran.dg/gomp/atomic-21.f90
! 4c409ed25982a96302c97d0b3705f8c0  gcc/testsuite/gfortran.dg/gomp/atomic-22.f90
! 62db84bec1a075b6f84edb5ebf6f6cd4  gcc/testsuite/gfortran.dg/gomp/atomic-24.f90
! 1a2d9594af9568a06a1511c9d2d68865  gcc/testsuite/gfortran.dg/gomp/atomic-25.f90
! ae9ace60f94abfcbfbd2a36299abbf0d  gcc/testsuite/gfortran.dg/gomp/atomic-26.f90
! 81919ba83a95bbea4caaf87f2dd87da3  gcc/testsuite/gfortran.dg/gomp/atomic-27.f90
! 2c61c6d91bbeab8332c3c329ee9f8d12  gcc/testsuite/gfortran.dg/gomp/atomic-28.f90
! 2627f4c7f22f907c1019851b2ae1c79f  gcc/testsuite/gfortran.dg/gomp/atomic.f90
  bab96c8ce5beeb0e7d9e4dae2fd0ea5f  gcc/testsuite/gfortran.dg/gomp/block-1.f90
! 065c8d5b071a3096774849b90c0341dd  gcc/testsuite/gfortran.dg/gomp/cancel-1.f90
! 6240d21497a94815867abd53e7fcfe68  gcc/testsuite/gfortran.dg/gomp/cancel-2.f90
  c2875e99b414fbced20c5c41d21b04c4  gcc/testsuite/gfortran.dg/gomp/cancel-3.f90
! 08ea5c242fb3441982cd27d2f7c57be0  gcc/testsuite/gfortran.dg/gomp/cancel-4.f90
! 24d9a671708eb4318e409fce39a7f2da  gcc/testsuite/gfortran.dg/gomp/class-firstprivate-1.f90
! 00da5110c651c599834b4c04bf8015d5  gcc/testsuite/gfortran.dg/gomp/class-firstprivate-2.f90
! 8dbac5414be8ed46decf2134d6ea91fc  gcc/testsuite/gfortran.dg/gomp/class-firstprivate-3.f90
! a8f0294a171f1359d6f5abd04324e891  gcc/testsuite/gfortran.dg/gomp/class-firstprivate-4.f90
! b04d01c8918c4b0e4cfbbca2ac07c3a9  gcc/testsuite/gfortran.dg/gomp/clauses-1.f90
! 96e03fc83d8d2d97e5e314cc6237a70f  gcc/testsuite/gfortran.dg/gomp/collapse1.f90
  0d28facbb96730c300fadf428745b605  gcc/testsuite/gfortran.dg/gomp/collapse2.f90
  36990c2a4b5e499e3cd93ef78508f038  gcc/testsuite/gfortran.dg/gomp/combined-if.f90
  5889f294d23bf018b629ca16a28a09c2  gcc/testsuite/gfortran.dg/gomp/crayptr1.f90
*************** afcba399af3e0f296b4e3c48a77f2569  gcc/te
*** 75955,75976 ****
  fa862d5202e8a9940ce10e5de251b964  gcc/testsuite/gfortran.dg/gomp/crayptr3.f90
  1c6644a88dc4bee98beb52bb4342fee9  gcc/testsuite/gfortran.dg/gomp/crayptr4.f90
  4a434ccf995f8c325ad483ae77b66d9f  gcc/testsuite/gfortran.dg/gomp/crayptr5.f90
! 78f7d11dfff352871aaafacb9e8f55fd  gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90
  3db4bd90d0375549d4d03e0903825f7e  gcc/testsuite/gfortran.dg/gomp/declare-simd-2.f90
  ea4104a68bdd94cb4c7afb9454a3e105  gcc/testsuite/gfortran.dg/gomp/declare-simd-coarray-lib.f90
  3efc7a1651bd3761d7b6f4bbc264313a  gcc/testsuite/gfortran.dg/gomp/declare-target-1.f90
  212cd883d44a65487259e920b7082564  gcc/testsuite/gfortran.dg/gomp/declare-target-2.f90
  f2ade342ab737629096e1f8a8a9e6de0  gcc/testsuite/gfortran.dg/gomp/declare-target-4.f90
  cd36c1dc647fda3c47998959ae255f2e  gcc/testsuite/gfortran.dg/gomp/declare-target-5.f90
  fa41d6dd0ec4bc45beb3cbce04bf821d  gcc/testsuite/gfortran.dg/gomp/depend-1.f90
! fa9370ecf5b16a8549b68753f644e7c0  gcc/testsuite/gfortran.dg/gomp/distribute-order-concurrent.f90
  9757fd1aff0e97e5388764ec44be73fd  gcc/testsuite/gfortran.dg/gomp/do-1.f90
  a467591fa5a7397d62aff928d63eb0ad  gcc/testsuite/gfortran.dg/gomp/fixed-1.f
! 8badbaa44c917a572bb465d31c983492  gcc/testsuite/gfortran.dg/gomp/flush-1.f90
! eda31dab4c7069ae04265defaed94163  gcc/testsuite/gfortran.dg/gomp/flush-2.f90
  14ab6dfa2149c533128a3f201531e525  gcc/testsuite/gfortran.dg/gomp/free-1.f90
  b7bb651884d39c2e5dce7d57d46f40a5  gcc/testsuite/gfortran.dg/gomp/free-2.f90
! a0ea298c26d8866db9dfd3726180a6ee  gcc/testsuite/gfortran.dg/gomp/gomp.exp
  c81f6e5f96d44ff4d4332116923c4ba7  gcc/testsuite/gfortran.dg/gomp/if-1.f90
  c20118617178c3c6359815c5134a798a  gcc/testsuite/gfortran.dg/gomp/implicit-save.f90
  336652c36c7d7ce2f34ced505acc64c9  gcc/testsuite/gfortran.dg/gomp/include_1.f
--- 81220,81278 ----
  fa862d5202e8a9940ce10e5de251b964  gcc/testsuite/gfortran.dg/gomp/crayptr3.f90
  1c6644a88dc4bee98beb52bb4342fee9  gcc/testsuite/gfortran.dg/gomp/crayptr4.f90
  4a434ccf995f8c325ad483ae77b66d9f  gcc/testsuite/gfortran.dg/gomp/crayptr5.f90
! f771e918155eed02d90e026b9c163449  gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90
  3db4bd90d0375549d4d03e0903825f7e  gcc/testsuite/gfortran.dg/gomp/declare-simd-2.f90
  ea4104a68bdd94cb4c7afb9454a3e105  gcc/testsuite/gfortran.dg/gomp/declare-simd-coarray-lib.f90
  3efc7a1651bd3761d7b6f4bbc264313a  gcc/testsuite/gfortran.dg/gomp/declare-target-1.f90
  212cd883d44a65487259e920b7082564  gcc/testsuite/gfortran.dg/gomp/declare-target-2.f90
  f2ade342ab737629096e1f8a8a9e6de0  gcc/testsuite/gfortran.dg/gomp/declare-target-4.f90
  cd36c1dc647fda3c47998959ae255f2e  gcc/testsuite/gfortran.dg/gomp/declare-target-5.f90
+ ae9450408a560cd53a7d21f2f8cbad71  gcc/testsuite/gfortran.dg/gomp/declare-variant-1.f90
+ d1585d6e61e98e4837375d613ce049da  gcc/testsuite/gfortran.dg/gomp/declare-variant-10.f90
+ 44c17460b5e2ebc6cd8cc135d86b6537  gcc/testsuite/gfortran.dg/gomp/declare-variant-11.f90
+ 586b8a09abee41070ecb00d08266c23d  gcc/testsuite/gfortran.dg/gomp/declare-variant-12.f90
+ 251bb4a50465105ccdbe67e3d804c0ec  gcc/testsuite/gfortran.dg/gomp/declare-variant-13.f90
+ 922992fe63cdcd3599323fabb9f91496  gcc/testsuite/gfortran.dg/gomp/declare-variant-14.f90
+ bcff008fda796aaaa4aa0c808a1cf8da  gcc/testsuite/gfortran.dg/gomp/declare-variant-15.f90
+ 12d0afb12d65bdd24eb02d1437cf671f  gcc/testsuite/gfortran.dg/gomp/declare-variant-16.f90
+ 7f0e276222c8af41d530e09021a3eded  gcc/testsuite/gfortran.dg/gomp/declare-variant-17.f90
+ 21e881b2155c903e6c0fe82aa43cc421  gcc/testsuite/gfortran.dg/gomp/declare-variant-18.f90
+ 580901d43ef2a15dfd465a1a022ae115  gcc/testsuite/gfortran.dg/gomp/declare-variant-19.f90
+ 889f2ed1d636cde73b25530a8b9ea5db  gcc/testsuite/gfortran.dg/gomp/declare-variant-2.f90
+ d2aee6f27d475cdedd6249f21b780ab2  gcc/testsuite/gfortran.dg/gomp/declare-variant-2a.f90
+ 0b6f2d95929145b926b00eb276be1aff  gcc/testsuite/gfortran.dg/gomp/declare-variant-3.f90
+ 80008565a19f1735de6edcc12665d124  gcc/testsuite/gfortran.dg/gomp/declare-variant-4.f90
+ c8be345342a9412b0fcfce5b1ef75494  gcc/testsuite/gfortran.dg/gomp/declare-variant-5.f90
+ 2a0ee9ee17a6019c2d56605900cb17b4  gcc/testsuite/gfortran.dg/gomp/declare-variant-6.f90
+ 313233de6d1e14ff4f3adbc5a9887e75  gcc/testsuite/gfortran.dg/gomp/declare-variant-7.f90
+ 3fa71f93a9b748b52498969863069e5d  gcc/testsuite/gfortran.dg/gomp/declare-variant-8.f90
+ 82a82d0ef3a2b776a7b1db1d3592098a  gcc/testsuite/gfortran.dg/gomp/declare-variant-9.f90
+ 8b017b80a8823fe935e58eac73673b61  gcc/testsuite/gfortran.dg/gomp/defaultmap-1.f90
+ 318f72b3af7c8052b99ae5eaf03d5eb9  gcc/testsuite/gfortran.dg/gomp/defaultmap-2.f90
+ d638394ef6b5d3b81dd5d401e9384a8e  gcc/testsuite/gfortran.dg/gomp/defaultmap-3.f90
+ 400507a238abeb48518833a88628598c  gcc/testsuite/gfortran.dg/gomp/defaultmap-4.f90
+ 25ce25bddd9fc3d310ab402fa1f706e2  gcc/testsuite/gfortran.dg/gomp/defaultmap-5.f90
+ e6cc091be856f2eebb0cecc58fb81c3d  gcc/testsuite/gfortran.dg/gomp/defaultmap-6.f90
+ 470d844fb0d7cccca9d9f7020f4c38a9  gcc/testsuite/gfortran.dg/gomp/defaultmap-7.f90
  fa41d6dd0ec4bc45beb3cbce04bf821d  gcc/testsuite/gfortran.dg/gomp/depend-1.f90
! 98e87e73609fd39aeb74c538ed0cecbc  gcc/testsuite/gfortran.dg/gomp/depend-4.f90
! c8d298cef2970ce3ead77751bfa3b24b  gcc/testsuite/gfortran.dg/gomp/depend-5.f90
! e42d645f40278d03b1c8942e0aaf81f3  gcc/testsuite/gfortran.dg/gomp/depend-6.f90
! fcda5a12452ac185d1c306d0e8222556  gcc/testsuite/gfortran.dg/gomp/depend-iterator-1.f90
! 9d5fb0bbe4acb6d59a56c4c09cc9b5fc  gcc/testsuite/gfortran.dg/gomp/depend-iterator-2.f90
! 8559f178a456958c370535d4d838c9d7  gcc/testsuite/gfortran.dg/gomp/depend-iterator-3.f90
! 9ade98b653d57f5a7e391873c55aebb3  gcc/testsuite/gfortran.dg/gomp/depobj-1.f90
! 46f62c954f5ed0c548f97c8d9d30d8b7  gcc/testsuite/gfortran.dg/gomp/depobj-2.f90
  9757fd1aff0e97e5388764ec44be73fd  gcc/testsuite/gfortran.dg/gomp/do-1.f90
+ aa1be4316dee2804f538b30041f7be95  gcc/testsuite/gfortran.dg/gomp/error-1.f90
+ 0d3656be08c9011e56a522c5e7cddebd  gcc/testsuite/gfortran.dg/gomp/error-2.f90
+ 79e1726bb3cc84913d21c0af63e764a6  gcc/testsuite/gfortran.dg/gomp/error-3.f90
  a467591fa5a7397d62aff928d63eb0ad  gcc/testsuite/gfortran.dg/gomp/fixed-1.f
! d3b68a58adb3f5eb2533a30d870f100e  gcc/testsuite/gfortran.dg/gomp/flush-1.f90
! afc521c98a39e0e1821f895f702c9cd1  gcc/testsuite/gfortran.dg/gomp/flush-2.f90
  14ab6dfa2149c533128a3f201531e525  gcc/testsuite/gfortran.dg/gomp/free-1.f90
  b7bb651884d39c2e5dce7d57d46f40a5  gcc/testsuite/gfortran.dg/gomp/free-2.f90
! 515ed5264b0dee69a4f88bb8a0dbe04c  gcc/testsuite/gfortran.dg/gomp/gomp.exp
  c81f6e5f96d44ff4d4332116923c4ba7  gcc/testsuite/gfortran.dg/gomp/if-1.f90
  c20118617178c3c6359815c5134a798a  gcc/testsuite/gfortran.dg/gomp/implicit-save.f90
  336652c36c7d7ce2f34ced505acc64c9  gcc/testsuite/gfortran.dg/gomp/include_1.f
*************** c9c12b39090e7fc13f17ab5f3914978a  gcc/te
*** 75979,75998 ****
  c6b23e36c3423a3454fb19b0ec6f0e01  gcc/testsuite/gfortran.dg/gomp/intentin1.f90
  a0ddccf5319d7e26e8fdaf2827f3ea94  gcc/testsuite/gfortran.dg/gomp/is_device_ptr-1.f90
  e6d7aaeafebe3f95771812903728dd74  gcc/testsuite/gfortran.dg/gomp/is_device_ptr-2.f90
  4dd4181b247ac3f79a6523a11f774cdc  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-1.f90
  af04268cd1ba9085e47cbae173428261  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-2.f90
  8da702190ab885b30f172e950f2352c7  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-3.f90
  18ac4502ea33e5ec7eb9987e4f08464a  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-4.f90
  0324d1aeff2c9703006e512f071b9b0f  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-5.f90
  fcfec1b14709740892410ae1c647ba42  gcc/testsuite/gfortran.dg/gomp/linear-1.f90
  dec560a080ae2757b0acb2325c3aafab  gcc/testsuite/gfortran.dg/gomp/map-1.f90
  43569bbc57024a10628df3c4be381f2a  gcc/testsuite/gfortran.dg/gomp/map-2.f90
! 29092a38e0577978a062abd1c4a720f1  gcc/testsuite/gfortran.dg/gomp/map-3.f90
  cd9740173b89307e8f51dcf62b1f0874  gcc/testsuite/gfortran.dg/gomp/map-4.f90
  b76492fcf2fb1505fe0530d8302d7581  gcc/testsuite/gfortran.dg/gomp/map-5.f90
  dbafc5b94ae395cda5657628bc263b17  gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90
  5eb69ee32fb2e3a0ddb2b6d84e0e175c  gcc/testsuite/gfortran.dg/gomp/nontemporal-1.f90
  50c115c8124a5d89918f3466d7eab60a  gcc/testsuite/gfortran.dg/gomp/nontemporal-2.f90
  52223211c34f4dbace5e033f8243ae1f  gcc/testsuite/gfortran.dg/gomp/omp_atomic1.f90
  0e5454ac80bc199d6cf3e96e9750c33f  gcc/testsuite/gfortran.dg/gomp/omp_atomic2.f90
  5d43e477ab60e438b8824d612b24022d  gcc/testsuite/gfortran.dg/gomp/omp_clauses1.f90
--- 81281,81325 ----
  c6b23e36c3423a3454fb19b0ec6f0e01  gcc/testsuite/gfortran.dg/gomp/intentin1.f90
  a0ddccf5319d7e26e8fdaf2827f3ea94  gcc/testsuite/gfortran.dg/gomp/is_device_ptr-1.f90
  e6d7aaeafebe3f95771812903728dd74  gcc/testsuite/gfortran.dg/gomp/is_device_ptr-2.f90
+ d70909ea0d48c8aaab65788c80372c88  gcc/testsuite/gfortran.dg/gomp/is_device_ptr-3.f90
  4dd4181b247ac3f79a6523a11f774cdc  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-1.f90
  af04268cd1ba9085e47cbae173428261  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-2.f90
  8da702190ab885b30f172e950f2352c7  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-3.f90
  18ac4502ea33e5ec7eb9987e4f08464a  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-4.f90
  0324d1aeff2c9703006e512f071b9b0f  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-5.f90
  fcfec1b14709740892410ae1c647ba42  gcc/testsuite/gfortran.dg/gomp/linear-1.f90
+ 1bf1a25963d70f206f6b9615dd00b4a3  gcc/testsuite/gfortran.dg/gomp/loop-1.f90
+ e69fe1632f91b2b00b5cc08a12bba5df  gcc/testsuite/gfortran.dg/gomp/loop-2.f90
+ 9fc7632ae864eb649dcb18b7f8cab32c  gcc/testsuite/gfortran.dg/gomp/loop-3.f90
+ d9fb1de547303f6296a47031238a2a91  gcc/testsuite/gfortran.dg/gomp/loop-4.f90
+ 30f19939f66f9036dd94e47a44d71909  gcc/testsuite/gfortran.dg/gomp/loop-exit.f90
  dec560a080ae2757b0acb2325c3aafab  gcc/testsuite/gfortran.dg/gomp/map-1.f90
  43569bbc57024a10628df3c4be381f2a  gcc/testsuite/gfortran.dg/gomp/map-2.f90
! c2d8019d8ca18a09c79c939c0a1030f0  gcc/testsuite/gfortran.dg/gomp/map-3.f90
  cd9740173b89307e8f51dcf62b1f0874  gcc/testsuite/gfortran.dg/gomp/map-4.f90
  b76492fcf2fb1505fe0530d8302d7581  gcc/testsuite/gfortran.dg/gomp/map-5.f90
+ d9692272c0b81e1742bb5a587d004640  gcc/testsuite/gfortran.dg/gomp/map-6.f90
+ a15327fbebc52fb184d3971928dc264d  gcc/testsuite/gfortran.dg/gomp/map-7.f90
+ 7716dfe585f082cdb3180040c8094a78  gcc/testsuite/gfortran.dg/gomp/map-8.f90
  dbafc5b94ae395cda5657628bc263b17  gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90
+ 27a18505986bb3d15bf8fae66e56277d  gcc/testsuite/gfortran.dg/gomp/masked-1.f90
+ 3dcee7c8522ab62ae30bfb476d1ff838  gcc/testsuite/gfortran.dg/gomp/masked-2.f90
+ 030bb5759e59829f3b659878d4b71c83  gcc/testsuite/gfortran.dg/gomp/masked-3.f90
+ cb24525724c32b45315c964136a5f1b9  gcc/testsuite/gfortran.dg/gomp/masked-combined-1.f90
+ 363b0dfc01dfa5ff05f2e7f9e5cb91dd  gcc/testsuite/gfortran.dg/gomp/masked-combined-2.f90
+ 4fc7de6f5648a0220d734c2d546f8dfc  gcc/testsuite/gfortran.dg/gomp/masked-taskloop.f90
+ d8fab0c405f257ffcf3c0d31627f2355  gcc/testsuite/gfortran.dg/gomp/nesting-1.f90
+ 463e44e3afba838504efe978ec7491ce  gcc/testsuite/gfortran.dg/gomp/nesting-2.f90
+ d4bd33dd71cfc2687d89a40ce9aa0059  gcc/testsuite/gfortran.dg/gomp/nesting-3.f90
  5eb69ee32fb2e3a0ddb2b6d84e0e175c  gcc/testsuite/gfortran.dg/gomp/nontemporal-1.f90
  50c115c8124a5d89918f3466d7eab60a  gcc/testsuite/gfortran.dg/gomp/nontemporal-2.f90
+ f9188ccb0e23b81607240441c3714df2  gcc/testsuite/gfortran.dg/gomp/nothing-1.f90
+ 10acc2278da37244f753a40297cd1e3a  gcc/testsuite/gfortran.dg/gomp/nothing-2.f90
+ 3cc8ac1a4c71ccef2cd14409d43c0c2f  gcc/testsuite/gfortran.dg/gomp/nowait-1.f90
+ 3a9b654c9bb96ed19dbb03d68d640787  gcc/testsuite/gfortran.dg/gomp/nowait-2.f90
+ 490e293ad86c435fc0bcef164624d407  gcc/testsuite/gfortran.dg/gomp/nowait-3.f90
+ 6b3470b7485a2352af9dc1c1b94d0c10  gcc/testsuite/gfortran.dg/gomp/num-teams-1.f90
+ d63391da91e43519d530db761b208cc9  gcc/testsuite/gfortran.dg/gomp/num-teams-2.f90
  52223211c34f4dbace5e033f8243ae1f  gcc/testsuite/gfortran.dg/gomp/omp_atomic1.f90
  0e5454ac80bc199d6cf3e96e9750c33f  gcc/testsuite/gfortran.dg/gomp/omp_atomic2.f90
  5d43e477ab60e438b8824d612b24022d  gcc/testsuite/gfortran.dg/gomp/omp_clauses1.f90
*************** bdca03c79b16b5f9c19e5c92941f5888  gcc/te
*** 76006,76019 ****
  31f5c4996a25be6d38e18faf28b150b4  gcc/testsuite/gfortran.dg/gomp/openmp-simd-1.f90
  2b03c97061d19eddde270a6c9dd3fc38  gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90
  7b53af38ad214d98f0d0550bbb80b654  gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90
! f31e4c0a0f2527644c90e9922c5c677c  gcc/testsuite/gfortran.dg/gomp/openmp-simd-4.f90
  962b3bb368923a3267954c83793c7d97  gcc/testsuite/gfortran.dg/gomp/openmp-simd-5.f90
! c544621ba338c5f26ee393de2a252966  gcc/testsuite/gfortran.dg/gomp/openmp-simd-6.f90
  ab6d18741860d8f9094676890b96e068  gcc/testsuite/gfortran.dg/gomp/order-1.f90
  618c952f5bbb7326c70d6e7a786f679d  gcc/testsuite/gfortran.dg/gomp/order-2.f90
  f5feeab5c486d27ccc1c9005dc112eff  gcc/testsuite/gfortran.dg/gomp/order-3.f90
  f8e40f23828c760759b3893792acb659  gcc/testsuite/gfortran.dg/gomp/order-4.f90
  dd42ad4341c4916a5494d5d3c6a52b40  gcc/testsuite/gfortran.dg/gomp/pr100965.f90
  9a6817790a272cd8153d4303d324c00f  gcc/testsuite/gfortran.dg/gomp/pr26224.f
  d2c74a71f2bea0005d853821e6f0142c  gcc/testsuite/gfortran.dg/gomp/pr27573.f90
  a65c4577a606ba1bdab50e690b269b04  gcc/testsuite/gfortran.dg/gomp/pr29759.f90
--- 81333,81359 ----
  31f5c4996a25be6d38e18faf28b150b4  gcc/testsuite/gfortran.dg/gomp/openmp-simd-1.f90
  2b03c97061d19eddde270a6c9dd3fc38  gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90
  7b53af38ad214d98f0d0550bbb80b654  gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90
! c86578519526f3523481033c61923ccb  gcc/testsuite/gfortran.dg/gomp/openmp-simd-4.f90
  962b3bb368923a3267954c83793c7d97  gcc/testsuite/gfortran.dg/gomp/openmp-simd-5.f90
! 9ace4e530b40cdfe46ee82285a4c3007  gcc/testsuite/gfortran.dg/gomp/openmp-simd-6.f90
  ab6d18741860d8f9094676890b96e068  gcc/testsuite/gfortran.dg/gomp/order-1.f90
  618c952f5bbb7326c70d6e7a786f679d  gcc/testsuite/gfortran.dg/gomp/order-2.f90
  f5feeab5c486d27ccc1c9005dc112eff  gcc/testsuite/gfortran.dg/gomp/order-3.f90
  f8e40f23828c760759b3893792acb659  gcc/testsuite/gfortran.dg/gomp/order-4.f90
+ 35c099331d2ac9c6383bb03bcf2fab33  gcc/testsuite/gfortran.dg/gomp/order-5.f90
+ 901de0f48b4103e45783c545e17e9697  gcc/testsuite/gfortran.dg/gomp/order-6.f90
+ 5aee86e6d3f0327d9fcb22e4e1a7d079  gcc/testsuite/gfortran.dg/gomp/order-7.f90
+ eb835cbff61dc3a5d2c957d0e87c6ab0  gcc/testsuite/gfortran.dg/gomp/order-8.f90
+ 054c5c2350f2722c8a722ca2a63bed3f  gcc/testsuite/gfortran.dg/gomp/order-9.f90
+ 905750ad1d8a5ad625ad891d24861b35  gcc/testsuite/gfortran.dg/gomp/parallel-master-1.f90
+ 141c35f9d62b46a7e1b14aa4806260cb  gcc/testsuite/gfortran.dg/gomp/parallel-master-2.f90
  dd42ad4341c4916a5494d5d3c6a52b40  gcc/testsuite/gfortran.dg/gomp/pr100965.f90
+ 8c46c1ee06eca3c9ecb211ced2a97c89  gcc/testsuite/gfortran.dg/gomp/pr102431.f90
+ a1a9be8c9080ba2ba338bc6f63b406e3  gcc/testsuite/gfortran.dg/gomp/pr102621.f90
+ f523f11e31c8d7a378a90e54f4cc9a88  gcc/testsuite/gfortran.dg/gomp/pr103643.f90
+ 8d0eb4ba7d5d6e2c9ffeb53bd0b900ec  gcc/testsuite/gfortran.dg/gomp/pr103695.f90
+ b229abc8cb06bd3633deb0bb940ede08  gcc/testsuite/gfortran.dg/gomp/pr104131.f90
+ 39842b4010b4165bbe821ffc8a903991  gcc/testsuite/gfortran.dg/gomp/pr104757.f90
  9a6817790a272cd8153d4303d324c00f  gcc/testsuite/gfortran.dg/gomp/pr26224.f
  d2c74a71f2bea0005d853821e6f0142c  gcc/testsuite/gfortran.dg/gomp/pr27573.f90
  a65c4577a606ba1bdab50e690b269b04  gcc/testsuite/gfortran.dg/gomp/pr29759.f90
*************** b4570608c9f7bf1bf83b19629ce884db  gcc/te
*** 76027,76033 ****
  4359c79fda5533d97ee157c4b047f274  gcc/testsuite/gfortran.dg/gomp/pr40878-2.f90
  f3677d31dd1f67614d77de630d5f14c3  gcc/testsuite/gfortran.dg/gomp/pr41344.f
  64ec23cbb777b2296f56ac2b3b8024fa  gcc/testsuite/gfortran.dg/gomp/pr43337.f90
! 6b8306504e428441fa3316027925f53c  gcc/testsuite/gfortran.dg/gomp/pr43711.f90
  1d6f79f130df09d550010b1d0daa490c  gcc/testsuite/gfortran.dg/gomp/pr43836.f90
  da3301e1ddc8f1b69648ee217a656d63  gcc/testsuite/gfortran.dg/gomp/pr44036-1.f90
  d3025370cce4b18eae6eccec4241d4b4  gcc/testsuite/gfortran.dg/gomp/pr44036-2.f90
--- 81367,81373 ----
  4359c79fda5533d97ee157c4b047f274  gcc/testsuite/gfortran.dg/gomp/pr40878-2.f90
  f3677d31dd1f67614d77de630d5f14c3  gcc/testsuite/gfortran.dg/gomp/pr41344.f
  64ec23cbb777b2296f56ac2b3b8024fa  gcc/testsuite/gfortran.dg/gomp/pr43337.f90
! 09f75408b695006abedcc2a3f376b543  gcc/testsuite/gfortran.dg/gomp/pr43711.f90
  1d6f79f130df09d550010b1d0daa490c  gcc/testsuite/gfortran.dg/gomp/pr43836.f90
  da3301e1ddc8f1b69648ee217a656d63  gcc/testsuite/gfortran.dg/gomp/pr44036-1.f90
  d3025370cce4b18eae6eccec4241d4b4  gcc/testsuite/gfortran.dg/gomp/pr44036-2.f90
*************** bb35c5bd7245c0d5e4e5f3ed549e7fef  gcc/te
*** 76071,76078 ****
  e5f0ff2c94fb41e447563955917d04b7  gcc/testsuite/gfortran.dg/gomp/pr77666.f90
  8968b6642e6ba9ea7870f963ca23770a  gcc/testsuite/gfortran.dg/gomp/pr77973.f90
  3a11d068cb262058109de03c2147fc09  gcc/testsuite/gfortran.dg/gomp/pr78026.f03
! 1bf5ddb5c5829090f1ce2b554d758a44  gcc/testsuite/gfortran.dg/gomp/pr78260-2.f90
! 206b00731f3146249db158c408db4338  gcc/testsuite/gfortran.dg/gomp/pr78260-3.f90
  818814829feac80dc1d477b80fcec48f  gcc/testsuite/gfortran.dg/gomp/pr78260.f90
  597f76dd386ee781839ef6d3ac92cd38  gcc/testsuite/gfortran.dg/gomp/pr78298.f90
  7031f0539504d7051ea534bfda971893  gcc/testsuite/gfortran.dg/gomp/pr78299.f90
--- 81411,81418 ----
  e5f0ff2c94fb41e447563955917d04b7  gcc/testsuite/gfortran.dg/gomp/pr77666.f90
  8968b6642e6ba9ea7870f963ca23770a  gcc/testsuite/gfortran.dg/gomp/pr77973.f90
  3a11d068cb262058109de03c2147fc09  gcc/testsuite/gfortran.dg/gomp/pr78026.f03
! eb92b9390a9ddff80b32d74ddf94ee0c  gcc/testsuite/gfortran.dg/gomp/pr78260-2.f90
! 82944b2dcb4533aa8669aa80570f7ac9  gcc/testsuite/gfortran.dg/gomp/pr78260-3.f90
  818814829feac80dc1d477b80fcec48f  gcc/testsuite/gfortran.dg/gomp/pr78260.f90
  597f76dd386ee781839ef6d3ac92cd38  gcc/testsuite/gfortran.dg/gomp/pr78298.f90
  7031f0539504d7051ea534bfda971893  gcc/testsuite/gfortran.dg/gomp/pr78299.f90
*************** c2c9b1a1db79eedb25331d3565231b66  gcc/te
*** 76100,76114 ****
  a921eeb5697bd066712d41d66d374930  gcc/testsuite/gfortran.dg/gomp/pr94672.f90
  8a04653b9aa2543e13a3136934e00444  gcc/testsuite/gfortran.dg/gomp/pr95869.f90
  499f4d9c60bbb1a2be81d1888def444c  gcc/testsuite/gfortran.dg/gomp/pr99226.f90
  b4be3f9de7631846875a711ae9b67293  gcc/testsuite/gfortran.dg/gomp/proc_ptr_1.f90
  87885556568e657ef4c936c53e1c7305  gcc/testsuite/gfortran.dg/gomp/proc_ptr_2.f90
  59e444df8ec8f5ea9859b5aef4d75865  gcc/testsuite/gfortran.dg/gomp/reduction1.f90
  02484261b0434dbaf2709c34db58cd4d  gcc/testsuite/gfortran.dg/gomp/reduction2.f90
  a2addf1a691db784ba87841fe1cf8f23  gcc/testsuite/gfortran.dg/gomp/reduction3.f90
! 0dc08096fa00c01ab86b84dcce6c0585  gcc/testsuite/gfortran.dg/gomp/reduction4.f90
! 2c3f503f95bb1fcdc0cd2a3752da57c1  gcc/testsuite/gfortran.dg/gomp/reduction5.f90
  8f041e818ba5c0f262e7497ab62c4291  gcc/testsuite/gfortran.dg/gomp/reduction6.f90
! a7c90ad83020843f82e711a146185152  gcc/testsuite/gfortran.dg/gomp/reduction7.f90
  7fe01ba3e1a1dd148d342a8c66455920  gcc/testsuite/gfortran.dg/gomp/ref_inquiry.f90
  274262a532e8508d248c02dc12d359bc  gcc/testsuite/gfortran.dg/gomp/requires-1.f90
  140462f2e11c8432e775eb6957a8e7bb  gcc/testsuite/gfortran.dg/gomp/requires-2.f90
--- 81440,81466 ----
  a921eeb5697bd066712d41d66d374930  gcc/testsuite/gfortran.dg/gomp/pr94672.f90
  8a04653b9aa2543e13a3136934e00444  gcc/testsuite/gfortran.dg/gomp/pr95869.f90
  499f4d9c60bbb1a2be81d1888def444c  gcc/testsuite/gfortran.dg/gomp/pr99226.f90
+ bcd0369b2e799c3808032efd4c583295  gcc/testsuite/gfortran.dg/gomp/pr99928-1.f90
+ 5a122e0df6f86c9b8f25e3ef0a8de595  gcc/testsuite/gfortran.dg/gomp/pr99928-11.f90
+ 10754ed15a5d6410e61e98492ddcc1a6  gcc/testsuite/gfortran.dg/gomp/pr99928-2.f90
+ b564582f56873e1c1671ba8472cd4e7c  gcc/testsuite/gfortran.dg/gomp/pr99928-3.f90
+ 40b4f2ef3f3552b786fcb7c63c204257  gcc/testsuite/gfortran.dg/gomp/pr99928-4.f90
+ eccea57d37be5c510137e35d54db87b2  gcc/testsuite/gfortran.dg/gomp/pr99928-5.f90
+ 64fdae01dc0866fd9b34a72b18aa5d62  gcc/testsuite/gfortran.dg/gomp/pr99928-6.f90
+ 453d5604d4da08b7868c762f71d254fc  gcc/testsuite/gfortran.dg/gomp/pr99928-8.f90
  b4be3f9de7631846875a711ae9b67293  gcc/testsuite/gfortran.dg/gomp/proc_ptr_1.f90
  87885556568e657ef4c936c53e1c7305  gcc/testsuite/gfortran.dg/gomp/proc_ptr_2.f90
+ fb0554238513491cab61f8c72f0fb5d5  gcc/testsuite/gfortran.dg/gomp/reduction-task-1.f90
+ 14ea0275f3cac52c76c9b2a736035336  gcc/testsuite/gfortran.dg/gomp/reduction-task-2.f90
+ a68adcaed6526211be8ca88c99cd653f  gcc/testsuite/gfortran.dg/gomp/reduction-task-2a.f90
+ 20a03aafef1e43b54b78e701de6e7518  gcc/testsuite/gfortran.dg/gomp/reduction-task-3.f90
  59e444df8ec8f5ea9859b5aef4d75865  gcc/testsuite/gfortran.dg/gomp/reduction1.f90
  02484261b0434dbaf2709c34db58cd4d  gcc/testsuite/gfortran.dg/gomp/reduction2.f90
  a2addf1a691db784ba87841fe1cf8f23  gcc/testsuite/gfortran.dg/gomp/reduction3.f90
! 9c7956cb365de1302caa4e1e6ffdfdcc  gcc/testsuite/gfortran.dg/gomp/reduction4.f90
! 064bdb06408bc5a9f40c8c8d750ca08b  gcc/testsuite/gfortran.dg/gomp/reduction5.f90
  8f041e818ba5c0f262e7497ab62c4291  gcc/testsuite/gfortran.dg/gomp/reduction6.f90
! 0c741a076dd04066bfbaa57725ef02e9  gcc/testsuite/gfortran.dg/gomp/reduction7.f90
  7fe01ba3e1a1dd148d342a8c66455920  gcc/testsuite/gfortran.dg/gomp/ref_inquiry.f90
  274262a532e8508d248c02dc12d359bc  gcc/testsuite/gfortran.dg/gomp/requires-1.f90
  140462f2e11c8432e775eb6957a8e7bb  gcc/testsuite/gfortran.dg/gomp/requires-2.f90
*************** c91352c09b91870936925c3ece3a6771  gcc/te
*** 76117,76145 ****
  63a2fe63c34ac01ee2bad940a096ad3d  gcc/testsuite/gfortran.dg/gomp/requires-5.f90
  46f083bb08dfc0edfbdb3af4353d7197  gcc/testsuite/gfortran.dg/gomp/requires-6.f90
  d47fb4d0166842f717efe23cd8e6548c  gcc/testsuite/gfortran.dg/gomp/requires-7.f90
! 61987974a114a3410bd25e44ac39a4eb  gcc/testsuite/gfortran.dg/gomp/requires-8.f90
  db8328a4f748cc704f20335b7343890b  gcc/testsuite/gfortran.dg/gomp/requires-9.f90
! cab1d23bb8be96f5ee1f6a158200ac4d  gcc/testsuite/gfortran.dg/gomp/scan-1.f90
  e69757621834c84c21fc0470637b86af  gcc/testsuite/gfortran.dg/gomp/scan-2.f90
  d32b934bf6eb3a58ce0d40315170c604  gcc/testsuite/gfortran.dg/gomp/scan-3.f90
  2a477c93efd3a986af025bedc0ec0fee  gcc/testsuite/gfortran.dg/gomp/scan-4.f90
! a90d9abb0f4695d7261126d6be937377  gcc/testsuite/gfortran.dg/gomp/scan-5.f90
  35326d68b85545facab66432fae3e042  gcc/testsuite/gfortran.dg/gomp/scan-6.f90
  d56094ad174ac9dd36a007adf8c4fb31  gcc/testsuite/gfortran.dg/gomp/scan-7.f90
  96b7be608b1727fa1e3fc8a9c0185d70  gcc/testsuite/gfortran.dg/gomp/schedule-1.f90
  c525cee40cfdc1d7f1dda5cf299fdde9  gcc/testsuite/gfortran.dg/gomp/schedule-modifiers-1.f90
  97aefac9d65dc006ea6d5ce5ea111492  gcc/testsuite/gfortran.dg/gomp/schedule-modifiers-2.f90
  79dfa2e9e4441b4f7baa74120274ac19  gcc/testsuite/gfortran.dg/gomp/sharing-1.f90
  9dd19a9e9dfc0e4a98f98e8a7fc69049  gcc/testsuite/gfortran.dg/gomp/sharing-2.f90
  61ab8721e9576883e27967dd80ebb199  gcc/testsuite/gfortran.dg/gomp/sharing-3.f90
  b3d1280c39c6cae9dddab498b1e1eeb4  gcc/testsuite/gfortran.dg/gomp/sharing-4.f90
  8f8ce7f2adace9bd429d0fc54c872b4b  gcc/testsuite/gfortran.dg/gomp/substring.f90
  1270cfd451f11e2ba8a4b451bb9b51e3  gcc/testsuite/gfortran.dg/gomp/target-exit-data.f90
  3c3ee23796192e475b1597bfe4ae9d72  gcc/testsuite/gfortran.dg/gomp/target-parallel1.f90
  919bd1d4b3eea35828ead5f8cf204a98  gcc/testsuite/gfortran.dg/gomp/target1.f90
  b75e4a6eaec211becf176c75768a3f3d  gcc/testsuite/gfortran.dg/gomp/target2.f90
  4a93baff2b168f10d86571d18de637ba  gcc/testsuite/gfortran.dg/gomp/target3.f90
! b9b3b8b47b0772d7b7de04323ef150eb  gcc/testsuite/gfortran.dg/gomp/task-detach-1.f90
  93bf9ebfcd92172a6fc8ffa353dc697b  gcc/testsuite/gfortran.dg/gomp/teams1.f90
  ece14642b39d950304d0510a2090d613  gcc/testsuite/gfortran.dg/gomp/threadprivate-1.f90
  86f899863718848e682593290355e6c1  gcc/testsuite/gfortran.dg/gomp/udr1.f90
--- 81469,81515 ----
  63a2fe63c34ac01ee2bad940a096ad3d  gcc/testsuite/gfortran.dg/gomp/requires-5.f90
  46f083bb08dfc0edfbdb3af4353d7197  gcc/testsuite/gfortran.dg/gomp/requires-6.f90
  d47fb4d0166842f717efe23cd8e6548c  gcc/testsuite/gfortran.dg/gomp/requires-7.f90
! 46c9bc3a791f36e338365c7fe111e44f  gcc/testsuite/gfortran.dg/gomp/requires-8.f90
  db8328a4f748cc704f20335b7343890b  gcc/testsuite/gfortran.dg/gomp/requires-9.f90
! 070f19e3148aa90d8d032efcc1e9de46  gcc/testsuite/gfortran.dg/gomp/scan-1.f90
  e69757621834c84c21fc0470637b86af  gcc/testsuite/gfortran.dg/gomp/scan-2.f90
  d32b934bf6eb3a58ce0d40315170c604  gcc/testsuite/gfortran.dg/gomp/scan-3.f90
  2a477c93efd3a986af025bedc0ec0fee  gcc/testsuite/gfortran.dg/gomp/scan-4.f90
! 0841a9a30673302abe7c2567cc8e307c  gcc/testsuite/gfortran.dg/gomp/scan-5.f90
  35326d68b85545facab66432fae3e042  gcc/testsuite/gfortran.dg/gomp/scan-6.f90
  d56094ad174ac9dd36a007adf8c4fb31  gcc/testsuite/gfortran.dg/gomp/scan-7.f90
  96b7be608b1727fa1e3fc8a9c0185d70  gcc/testsuite/gfortran.dg/gomp/schedule-1.f90
  c525cee40cfdc1d7f1dda5cf299fdde9  gcc/testsuite/gfortran.dg/gomp/schedule-modifiers-1.f90
  97aefac9d65dc006ea6d5ce5ea111492  gcc/testsuite/gfortran.dg/gomp/schedule-modifiers-2.f90
+ c7709e0ef8d893a3fa9d2e893d1cb1a7  gcc/testsuite/gfortran.dg/gomp/scope-1.f90
+ 6d5ecca1c74a442d5b324bc5e3b1524a  gcc/testsuite/gfortran.dg/gomp/scope-2.f90
  79dfa2e9e4441b4f7baa74120274ac19  gcc/testsuite/gfortran.dg/gomp/sharing-1.f90
  9dd19a9e9dfc0e4a98f98e8a7fc69049  gcc/testsuite/gfortran.dg/gomp/sharing-2.f90
  61ab8721e9576883e27967dd80ebb199  gcc/testsuite/gfortran.dg/gomp/sharing-3.f90
  b3d1280c39c6cae9dddab498b1e1eeb4  gcc/testsuite/gfortran.dg/gomp/sharing-4.f90
+ 1be41e06c2542eaeda3f3dc714dd101a  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-1.f90
+ d492a0ba11cd7662d12ae10d05c32cae  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-2.f90
+ 2645b64d7f38b00ac8056bed5284cfb5  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-3.f90
  8f8ce7f2adace9bd429d0fc54c872b4b  gcc/testsuite/gfortran.dg/gomp/substring.f90
+ 51d1ad071cccf767857c7b593370c5d6  gcc/testsuite/gfortran.dg/gomp/target-device-1.f90
+ 03a4a1f0909b76dbab9d9f97b69cf3ba  gcc/testsuite/gfortran.dg/gomp/target-device-2.f90
+ 66eb37044b76d70fbcbd6f40fe0ee49e  gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-1.f90
+ 9212658f0470ba1304850f88cd51764c  gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-2.f90
+ d8ca6e0affc86b0360834109ca801128  gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-3.f90
+ 29b80ba1b44ce24883d3e941c7d6303a  gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-4.f90
  1270cfd451f11e2ba8a4b451bb9b51e3  gcc/testsuite/gfortran.dg/gomp/target-exit-data.f90
+ 255df1293a7e993064b5f2531dd1a039  gcc/testsuite/gfortran.dg/gomp/target-has-device-addr-1.f90
+ 533ad130fc9c9f6a430f9cdefc575831  gcc/testsuite/gfortran.dg/gomp/target-has-device-addr-2.f90
  3c3ee23796192e475b1597bfe4ae9d72  gcc/testsuite/gfortran.dg/gomp/target-parallel1.f90
  919bd1d4b3eea35828ead5f8cf204a98  gcc/testsuite/gfortran.dg/gomp/target1.f90
  b75e4a6eaec211becf176c75768a3f3d  gcc/testsuite/gfortran.dg/gomp/target2.f90
  4a93baff2b168f10d86571d18de637ba  gcc/testsuite/gfortran.dg/gomp/target3.f90
! 15b47b840694124950869755ba30ce6f  gcc/testsuite/gfortran.dg/gomp/task-detach-1.f90
! 6c1d12034e3ca377a04b7373ef678265  gcc/testsuite/gfortran.dg/gomp/taskloop-1.f90
! 1ad9501e99b64fda14fa1db2b4a11b19  gcc/testsuite/gfortran.dg/gomp/taskloop-2.f90
! 1b22afe90e22c058fc805c2720b68de8  gcc/testsuite/gfortran.dg/gomp/taskwait.f90
! c3cfb4ba20d0cf306196d4a7cfcbd04d  gcc/testsuite/gfortran.dg/gomp/teams-3.f90
! 0dd7189095b30c8c67757c8e75cf399e  gcc/testsuite/gfortran.dg/gomp/teams-4.f90
  93bf9ebfcd92172a6fc8ffa353dc697b  gcc/testsuite/gfortran.dg/gomp/teams1.f90
  ece14642b39d950304d0510a2090d613  gcc/testsuite/gfortran.dg/gomp/threadprivate-1.f90
  86f899863718848e682593290355e6c1  gcc/testsuite/gfortran.dg/gomp/udr1.f90
*************** ece14642b39d950304d0510a2090d613  gcc/te
*** 76150,76155 ****
--- 81520,81526 ----
  4be69272338362c6a969ab47082c5fcc  gcc/testsuite/gfortran.dg/gomp/udr6.f90
  186f9bb4f37e50c00e5be84dc3319bb0  gcc/testsuite/gfortran.dg/gomp/udr7.f90
  20bfe17efe2daa15a962d3237694089d  gcc/testsuite/gfortran.dg/gomp/udr8.f90
+ bdd3234f4f1bcbaa3e8d622739012887  gcc/testsuite/gfortran.dg/gomp/unexpected-end.f90
  191b4f3758e937a3380be8e7173714d3  gcc/testsuite/gfortran.dg/gomp/use_device_ptr-1.f90
  443b8f44ee67bd099885898c659e395f  gcc/testsuite/gfortran.dg/gomp/warn_truncated.f
  b3430eeb122295940c5fb0b7ba4438a3  gcc/testsuite/gfortran.dg/gomp/warn_truncated.f90
*************** b668767cebd1d81ba2d2ca1138456cbe  gcc/te
*** 76230,76236 ****
  7f6a0bf732d7a49a9bd1a4598c67549a  gcc/testsuite/gfortran.dg/graphite/block-2.f
  b432d9423fac5506e5220aa6b34be410  gcc/testsuite/gfortran.dg/graphite/block-3.f90
  466df24c793ce10011458d00ea210bc9  gcc/testsuite/gfortran.dg/graphite/block-4.f90
! 1612cd6f4b106721c6073eafbc6e7f45  gcc/testsuite/gfortran.dg/graphite/graphite.exp
  178815ec0b286d5b50214ae046b407fe  gcc/testsuite/gfortran.dg/graphite/id-1.f90
  df4c5d17c4fe35475b6ddff605a83c8f  gcc/testsuite/gfortran.dg/graphite/id-10.f90
  6fd035afd995bfd09cebafa89bb45211  gcc/testsuite/gfortran.dg/graphite/id-11.f
--- 81601,81607 ----
  7f6a0bf732d7a49a9bd1a4598c67549a  gcc/testsuite/gfortran.dg/graphite/block-2.f
  b432d9423fac5506e5220aa6b34be410  gcc/testsuite/gfortran.dg/graphite/block-3.f90
  466df24c793ce10011458d00ea210bc9  gcc/testsuite/gfortran.dg/graphite/block-4.f90
! 3ef2cde01a076cfb44f3da99b657a175  gcc/testsuite/gfortran.dg/graphite/graphite.exp
  178815ec0b286d5b50214ae046b407fe  gcc/testsuite/gfortran.dg/graphite/id-1.f90
  df4c5d17c4fe35475b6ddff605a83c8f  gcc/testsuite/gfortran.dg/graphite/id-10.f90
  6fd035afd995bfd09cebafa89bb45211  gcc/testsuite/gfortran.dg/graphite/id-11.f
*************** cc7201a9525a4793e8bf391d30c3653d  gcc/te
*** 76383,76391 ****
  8201f75f0deee5480134fc16f1113f0c  gcc/testsuite/gfortran.dg/ichar_2.f90
  b614ce421f97fb4ab6fa10f1f1c47ab0  gcc/testsuite/gfortran.dg/ichar_3.f90
  5b6adfdb788db3a061d01bdf727a5a52  gcc/testsuite/gfortran.dg/ieee/dec_math_1.f90
! 5390ada3e867a0ffc8d16ceeacbfd2c8  gcc/testsuite/gfortran.dg/ieee/ieee.exp
  0099e59ef340f8e2088656dfac86c17f  gcc/testsuite/gfortran.dg/ieee/ieee_1.F90
! 8573026694e7ac222b3bab9e44094b39  gcc/testsuite/gfortran.dg/ieee/ieee_10.f90
  6183b8dca51e7054ad280235aaba2999  gcc/testsuite/gfortran.dg/ieee/ieee_11.F90
  78e4b079399abadd8ec5465c9478df44  gcc/testsuite/gfortran.dg/ieee/ieee_12.f90
  629e2eea5e2091391dc3e08bcadcb8cd  gcc/testsuite/gfortran.dg/ieee/ieee_2.f90
--- 81754,81762 ----
  8201f75f0deee5480134fc16f1113f0c  gcc/testsuite/gfortran.dg/ichar_2.f90
  b614ce421f97fb4ab6fa10f1f1c47ab0  gcc/testsuite/gfortran.dg/ichar_3.f90
  5b6adfdb788db3a061d01bdf727a5a52  gcc/testsuite/gfortran.dg/ieee/dec_math_1.f90
! b46a7d204d3d38fcdf4d361e4a828f8e  gcc/testsuite/gfortran.dg/ieee/ieee.exp
  0099e59ef340f8e2088656dfac86c17f  gcc/testsuite/gfortran.dg/ieee/ieee_1.F90
! 3d9e86cdd52561209aae0f0fcaf3590f  gcc/testsuite/gfortran.dg/ieee/ieee_10.f90
  6183b8dca51e7054ad280235aaba2999  gcc/testsuite/gfortran.dg/ieee/ieee_11.F90
  78e4b079399abadd8ec5465c9478df44  gcc/testsuite/gfortran.dg/ieee/ieee_12.f90
  629e2eea5e2091391dc3e08bcadcb8cd  gcc/testsuite/gfortran.dg/ieee/ieee_2.f90
*************** d7dcbbbf51853a9d7416a34ec7d5e19b  gcc/te
*** 76395,76401 ****
  5cd431dfd0e283ccbf63950445cb9c10  gcc/testsuite/gfortran.dg/ieee/ieee_6.f90
  936dd9c26cd1c2d9a4711fd40b1f3d8c  gcc/testsuite/gfortran.dg/ieee/ieee_7.f90
  c0300fa958c7a5a9d045a2bc5b399370  gcc/testsuite/gfortran.dg/ieee/ieee_8.f90
! cb641ee4161b1d608af0011a8dacd2de  gcc/testsuite/gfortran.dg/ieee/ieee_9.f90
  3edf3db930f2307fe20f5876079afacb  gcc/testsuite/gfortran.dg/ieee/intrinsics_1.f90
  838403b2438b8f997d80b7cef8537bf0  gcc/testsuite/gfortran.dg/ieee/intrinsics_2.F90
  23021f89830f412805914d2b920c93c2  gcc/testsuite/gfortran.dg/ieee/large_1.f90
--- 81766,81772 ----
  5cd431dfd0e283ccbf63950445cb9c10  gcc/testsuite/gfortran.dg/ieee/ieee_6.f90
  936dd9c26cd1c2d9a4711fd40b1f3d8c  gcc/testsuite/gfortran.dg/ieee/ieee_7.f90
  c0300fa958c7a5a9d045a2bc5b399370  gcc/testsuite/gfortran.dg/ieee/ieee_8.f90
! 57398c82384591ff1cc252a836a0b811  gcc/testsuite/gfortran.dg/ieee/ieee_9.f90
  3edf3db930f2307fe20f5876079afacb  gcc/testsuite/gfortran.dg/ieee/intrinsics_1.f90
  838403b2438b8f997d80b7cef8537bf0  gcc/testsuite/gfortran.dg/ieee/intrinsics_2.F90
  23021f89830f412805914d2b920c93c2  gcc/testsuite/gfortran.dg/ieee/large_1.f90
*************** cb641ee4161b1d608af0011a8dacd2de  gcc/te
*** 76405,76410 ****
--- 81776,81786 ----
  5b088816bf399445be998bb7b0f307bd  gcc/testsuite/gfortran.dg/ieee/pr77372.f90
  d19c8b732b5cf70aa6edcc4165fe30b3  gcc/testsuite/gfortran.dg/ieee/pr77507.f90
  26f7d10e3401a2366b42da4a4f97bd15  gcc/testsuite/gfortran.dg/ieee/rounding_1.f90
+ 1353276aa715bc0205a75c72a213a1eb  gcc/testsuite/gfortran.dg/ieee/signaling_1.f90
+ c25db16b2a941d64c3eb8500eb24b632  gcc/testsuite/gfortran.dg/ieee/signaling_1_c.c
+ d965100517c103af6a1fba9f58286e1e  gcc/testsuite/gfortran.dg/ieee/signaling_2.f90
+ 3d50dd33d09a54da9ad7bbcf1243008f  gcc/testsuite/gfortran.dg/ieee/signaling_2_c.c
+ 566797f5458033022b688900d75cc5c1  gcc/testsuite/gfortran.dg/ieee/signaling_3.f90
  e8ea43c66fd6d11794019ae65955f295  gcc/testsuite/gfortran.dg/ieee/underflow_1.f90
  124ba3e9f6c8b5f20acc161515766cff  gcc/testsuite/gfortran.dg/illegal_boz_arg_1.f90
  4a93b827c3cbecf80132e133c9ffea76  gcc/testsuite/gfortran.dg/illegal_boz_arg_2.f90
*************** faa9258aa87c8731e1568fbef0fa3cef  gcc/te
*** 76417,76423 ****
  b4fab0ee56baf7b47483368784e3d428  gcc/testsuite/gfortran.dg/implicit_11.f90
  6184b3481c1f6509fc79d9c70a4292ca  gcc/testsuite/gfortran.dg/implicit_12.f90
  f436694f48f2c6fe96b03f6c430bb0bb  gcc/testsuite/gfortran.dg/implicit_13.f90
! 17443542eaaaf37a563791d33883766b  gcc/testsuite/gfortran.dg/implicit_14.f90
  bce73433010fe7cdd8b3917347c0f73b  gcc/testsuite/gfortran.dg/implicit_15.f90
  fc1ccf1c66e20c49b9657c71cf806970  gcc/testsuite/gfortran.dg/implicit_16.f90
  64f1f368548042ba6814a03f6bea8f36  gcc/testsuite/gfortran.dg/implicit_2.f90
--- 81793,81799 ----
  b4fab0ee56baf7b47483368784e3d428  gcc/testsuite/gfortran.dg/implicit_11.f90
  6184b3481c1f6509fc79d9c70a4292ca  gcc/testsuite/gfortran.dg/implicit_12.f90
  f436694f48f2c6fe96b03f6c430bb0bb  gcc/testsuite/gfortran.dg/implicit_13.f90
! 2531b620c14fdec6961056bfd76996ff  gcc/testsuite/gfortran.dg/implicit_14.f90
  bce73433010fe7cdd8b3917347c0f73b  gcc/testsuite/gfortran.dg/implicit_15.f90
  fc1ccf1c66e20c49b9657c71cf806970  gcc/testsuite/gfortran.dg/implicit_16.f90
  64f1f368548042ba6814a03f6bea8f36  gcc/testsuite/gfortran.dg/implicit_2.f90
*************** ceac540ded8c68e9cf401c3de48ce90f  gcc/te
*** 76480,76494 ****
  e48b98471759810824da93395bf71827  gcc/testsuite/gfortran.dg/include_11.f
  e955f2f14c6a0a962be810338d9c2892  gcc/testsuite/gfortran.dg/include_12.f
  2196ef350d1dc57c35c911e5c5f20743  gcc/testsuite/gfortran.dg/include_13.f90
  a230b604cc4b54f7497efc43361a7397  gcc/testsuite/gfortran.dg/include_2.f90
  c8912bcfbf5d65ccfb0134b045dd2159  gcc/testsuite/gfortran.dg/include_3.f95
  90ad5493e143bd7edafa31ff3839d03f  gcc/testsuite/gfortran.dg/include_4.f90
  c45672a19e66d4e6b11b094d697caeec  gcc/testsuite/gfortran.dg/include_4.inc
  7ef72fd60d1889b7d25386cbed6a4422  gcc/testsuite/gfortran.dg/include_5.f90
! 0f4b74657229b78e08d1b33f4bf2d336  gcc/testsuite/gfortran.dg/include_6.f90
  57badb82ce45709d956ef2be6050cefa  gcc/testsuite/gfortran.dg/include_7.f90
  d0fdfb1260988468dbfc57fc49c04ccf  gcc/testsuite/gfortran.dg/include_8.f90
! 13b818017e15db82a77afaf63a92492a  gcc/testsuite/gfortran.dg/include_9.f90
  9ea49858cb54b399bb49c3128d73aada  gcc/testsuite/gfortran.dg/index.f90
  72b9f769cd2283ce9b7b556b1c93f39d  gcc/testsuite/gfortran.dg/index_2.f90
  6c6d1484cc1b9a1f8096ff70ef06c025  gcc/testsuite/gfortran.dg/index_3.f90
--- 81856,81880 ----
  e48b98471759810824da93395bf71827  gcc/testsuite/gfortran.dg/include_11.f
  e955f2f14c6a0a962be810338d9c2892  gcc/testsuite/gfortran.dg/include_12.f
  2196ef350d1dc57c35c911e5c5f20743  gcc/testsuite/gfortran.dg/include_13.f90
+ c902f03f36c976e79f991911f5ced984  gcc/testsuite/gfortran.dg/include_14.f90
+ d6ed549bf022ca315de23cda43034363  gcc/testsuite/gfortran.dg/include_15.f90
+ 12b8e9a24ad7cbf80a40130020f9f750  gcc/testsuite/gfortran.dg/include_16.f90
+ 705cf6fd5a9f97fafdc7cb278ec50089  gcc/testsuite/gfortran.dg/include_17.f90
+ 23571fd80ea7e345e16e84ea7c529980  gcc/testsuite/gfortran.dg/include_18.f90
+ fa8699bfa9f0d1b83d56f9bd118678c6  gcc/testsuite/gfortran.dg/include_19.f90
  a230b604cc4b54f7497efc43361a7397  gcc/testsuite/gfortran.dg/include_2.f90
+ e9d206d814abd6f1727991efc5919f53  gcc/testsuite/gfortran.dg/include_20.f90
+ e6f0e1f5032fef8582ae0e3f6ef5aa7b  gcc/testsuite/gfortran.dg/include_21.f90
+ 891e2af18dddf3129728fb0a93c87aa3  gcc/testsuite/gfortran.dg/include_23.f90
+ e14910f09745c2afd8da91e67414a4b4  gcc/testsuite/gfortran.dg/include_24.f90
  c8912bcfbf5d65ccfb0134b045dd2159  gcc/testsuite/gfortran.dg/include_3.f95
  90ad5493e143bd7edafa31ff3839d03f  gcc/testsuite/gfortran.dg/include_4.f90
  c45672a19e66d4e6b11b094d697caeec  gcc/testsuite/gfortran.dg/include_4.inc
  7ef72fd60d1889b7d25386cbed6a4422  gcc/testsuite/gfortran.dg/include_5.f90
! 582381901f976b338fbff1aa8e93d714  gcc/testsuite/gfortran.dg/include_6.f90
  57badb82ce45709d956ef2be6050cefa  gcc/testsuite/gfortran.dg/include_7.f90
  d0fdfb1260988468dbfc57fc49c04ccf  gcc/testsuite/gfortran.dg/include_8.f90
! 7d1f2b792bf20d6da521af79e3092240  gcc/testsuite/gfortran.dg/include_9.f90
  9ea49858cb54b399bb49c3128d73aada  gcc/testsuite/gfortran.dg/index.f90
  72b9f769cd2283ce9b7b556b1c93f39d  gcc/testsuite/gfortran.dg/index_2.f90
  6c6d1484cc1b9a1f8096ff70ef06c025  gcc/testsuite/gfortran.dg/index_3.f90
*************** fbf80885f0b7ba963b15836edf5d44e2  gcc/te
*** 76553,76559 ****
  3f2f902262a56ac5434afbf85af50515  gcc/testsuite/gfortran.dg/inline_matmul_14.f90
  28d702d90ec2e4642ca7fe47281a7389  gcc/testsuite/gfortran.dg/inline_matmul_15.f90
  b7733e0b9862cb91e03cf6880071acc4  gcc/testsuite/gfortran.dg/inline_matmul_16.f90
! eca2f5c77b5469fc0b437c332e655511  gcc/testsuite/gfortran.dg/inline_matmul_17.f90
  dee6ff6cec856fe1f42312c1d4fd4807  gcc/testsuite/gfortran.dg/inline_matmul_18.f90
  2d0cc489aae9a8f125cf641cb1912f6c  gcc/testsuite/gfortran.dg/inline_matmul_19.f90
  785565c0646eaf528f4603fa81c0392a  gcc/testsuite/gfortran.dg/inline_matmul_2.f90
--- 81939,81945 ----
  3f2f902262a56ac5434afbf85af50515  gcc/testsuite/gfortran.dg/inline_matmul_14.f90
  28d702d90ec2e4642ca7fe47281a7389  gcc/testsuite/gfortran.dg/inline_matmul_15.f90
  b7733e0b9862cb91e03cf6880071acc4  gcc/testsuite/gfortran.dg/inline_matmul_16.f90
! 900a106ff5119b0b92900038676e75a2  gcc/testsuite/gfortran.dg/inline_matmul_17.f90
  dee6ff6cec856fe1f42312c1d4fd4807  gcc/testsuite/gfortran.dg/inline_matmul_18.f90
  2d0cc489aae9a8f125cf641cb1912f6c  gcc/testsuite/gfortran.dg/inline_matmul_19.f90
  785565c0646eaf528f4603fa81c0392a  gcc/testsuite/gfortran.dg/inline_matmul_2.f90
*************** bb1e6a032a10a9e1ff7d9a5d79c13aa6  gcc/te
*** 76701,76708 ****
  7dde05ec9b0ec81bc84b8410a2052454  gcc/testsuite/gfortran.dg/interface_assignment_6.f90
  601b7f0c453e2157b6b3dfdc1f75d66b  gcc/testsuite/gfortran.dg/interface_assignment_7.f90
  25ebea5c5adf2e49a40b9502c29592d6  gcc/testsuite/gfortran.dg/interface_derived_type_1.f90
! a08d9bbd98c5af88aaa1623767543abb  gcc/testsuite/gfortran.dg/interface_operator_1.f90
! 2a631c7e95f8fa6bcf4c05a5bbb5c8af  gcc/testsuite/gfortran.dg/interface_operator_2.f90
  c5721500972020048be7b305fb352507  gcc/testsuite/gfortran.dg/interface_proc_end.f90
  6a001e94aca863d35df3e7b08dd78a0b  gcc/testsuite/gfortran.dg/internal_dummy_1.f90
  39d7e2026e65a3d115728a0cdcde35ac  gcc/testsuite/gfortran.dg/internal_dummy_2.f08
--- 82087,82095 ----
  7dde05ec9b0ec81bc84b8410a2052454  gcc/testsuite/gfortran.dg/interface_assignment_6.f90
  601b7f0c453e2157b6b3dfdc1f75d66b  gcc/testsuite/gfortran.dg/interface_assignment_7.f90
  25ebea5c5adf2e49a40b9502c29592d6  gcc/testsuite/gfortran.dg/interface_derived_type_1.f90
! 57f9d75de61fa7fced21937cd8c996d4  gcc/testsuite/gfortran.dg/interface_operator_1.f90
! a5b8e7c4a30203ae2a8d0729dc8949f7  gcc/testsuite/gfortran.dg/interface_operator_2.f90
! 419f868dbbbb9f5ca872115f51e00c5e  gcc/testsuite/gfortran.dg/interface_operator_3.f90
  c5721500972020048be7b305fb352507  gcc/testsuite/gfortran.dg/interface_proc_end.f90
  6a001e94aca863d35df3e7b08dd78a0b  gcc/testsuite/gfortran.dg/internal_dummy_1.f90
  39d7e2026e65a3d115728a0cdcde35ac  gcc/testsuite/gfortran.dg/internal_dummy_2.f08
*************** f8c7e022d2cfc56df6b55d414dce657a  gcc/te
*** 76782,76793 ****
  3e9903b1c6a155e12c646ca9ffb971fc  gcc/testsuite/gfortran.dg/intrinsic_shadow_2.f03
  3b9e5ff0a852722c4c102e31fb0d0ae7  gcc/testsuite/gfortran.dg/intrinsic_shadow_3.f03
  ef044c6d243e3e94ef014e454b67b06e  gcc/testsuite/gfortran.dg/intrinsic_shadow_4.f90
  c7dca57276630bcb1006d3470e110234  gcc/testsuite/gfortran.dg/intrinsic_sign_1.f90
  965a150057329cab600a5364f16d0447  gcc/testsuite/gfortran.dg/intrinsic_sign_2.f90
  06b142ff77c28e5ad037aebd3cf8f0ea  gcc/testsuite/gfortran.dg/intrinsic_signal.f90
  ef88aa1dd533ebfe61a7c64077a41a2d  gcc/testsuite/gfortran.dg/intrinsic_size.f90
  88febfaea080d516b63b22735cd9e4cd  gcc/testsuite/gfortran.dg/intrinsic_size_2.f90
! 700f48bef21273b976892c41285a7789  gcc/testsuite/gfortran.dg/intrinsic_size_3.f90
  68194e1c6f466545a4a8a5e4585e2131  gcc/testsuite/gfortran.dg/intrinsic_size_4.f90
  add8e945b16afc5c09b91f1999f6081e  gcc/testsuite/gfortran.dg/intrinsic_spread_1.f90
  1a528bff50a52ed3e856afb741ac283a  gcc/testsuite/gfortran.dg/intrinsic_spread_2.f90
--- 82169,82181 ----
  3e9903b1c6a155e12c646ca9ffb971fc  gcc/testsuite/gfortran.dg/intrinsic_shadow_2.f03
  3b9e5ff0a852722c4c102e31fb0d0ae7  gcc/testsuite/gfortran.dg/intrinsic_shadow_3.f03
  ef044c6d243e3e94ef014e454b67b06e  gcc/testsuite/gfortran.dg/intrinsic_shadow_4.f90
+ b6378a931cc686aa073c33154bc1dd69  gcc/testsuite/gfortran.dg/intrinsic_short-long.f90
  c7dca57276630bcb1006d3470e110234  gcc/testsuite/gfortran.dg/intrinsic_sign_1.f90
  965a150057329cab600a5364f16d0447  gcc/testsuite/gfortran.dg/intrinsic_sign_2.f90
  06b142ff77c28e5ad037aebd3cf8f0ea  gcc/testsuite/gfortran.dg/intrinsic_signal.f90
  ef88aa1dd533ebfe61a7c64077a41a2d  gcc/testsuite/gfortran.dg/intrinsic_size.f90
  88febfaea080d516b63b22735cd9e4cd  gcc/testsuite/gfortran.dg/intrinsic_size_2.f90
! cefaa208773edf9c89571d7abea459f9  gcc/testsuite/gfortran.dg/intrinsic_size_3.f90
  68194e1c6f466545a4a8a5e4585e2131  gcc/testsuite/gfortran.dg/intrinsic_size_4.f90
  add8e945b16afc5c09b91f1999f6081e  gcc/testsuite/gfortran.dg/intrinsic_spread_1.f90
  1a528bff50a52ed3e856afb741ac283a  gcc/testsuite/gfortran.dg/intrinsic_spread_2.f90
*************** bb1617d8ae6e0d580747f7d615fded96  gcc/te
*** 76850,76855 ****
--- 82238,82244 ----
  40a3bf3d449424b5f78272828b07837e  gcc/testsuite/gfortran.dg/iostat_2.f90
  1ab416b16eeeaf5612e3c0656b73c4d5  gcc/testsuite/gfortran.dg/iostat_3.f90
  04a2d725b724b6a943b8e587f2d0d579  gcc/testsuite/gfortran.dg/iostat_4.f90
+ 1c2b96d304629f78345de8be9deaaed7  gcc/testsuite/gfortran.dg/iostat_5.f90
  ae3f6e29ad3108163b5c5c6a5f70ef7c  gcc/testsuite/gfortran.dg/ipcp-array-1.f90
  741a6cb683b51a7e531dcb1816ed25ec  gcc/testsuite/gfortran.dg/ipcp-array-2.f90
  65578194d2c2e1ef90aec0d448b2955a  gcc/testsuite/gfortran.dg/is_contiguous_1.f90
*************** a704846ad082c08266e269b9c6a39a3d  gcc/te
*** 76864,76870 ****
  62aecfdc07793ea93cdf8d9654582a14  gcc/testsuite/gfortran.dg/isnan_1.f90
  f39075a4eb79900707ebbe3cbae40d8b  gcc/testsuite/gfortran.dg/isnan_2.f90
  339b2ac7960a6a700c8bc790f867edbb  gcc/testsuite/gfortran.dg/iso_c_binding_c_loc_char_1.f03
! bfa3ec4e007f0e2de77ffc931fcb1799  gcc/testsuite/gfortran.dg/iso_c_binding_char_1.f90
  80c2bb0f7a0a00732842956aae4eff11  gcc/testsuite/gfortran.dg/iso_c_binding_class.f03
  38eedf41f59e06503006b15c21ef2e37  gcc/testsuite/gfortran.dg/iso_c_binding_compiler_1.f90
  627f9c15dd02bfce3002a169fedf835d  gcc/testsuite/gfortran.dg/iso_c_binding_compiler_2.f90
--- 82253,82259 ----
  62aecfdc07793ea93cdf8d9654582a14  gcc/testsuite/gfortran.dg/isnan_1.f90
  f39075a4eb79900707ebbe3cbae40d8b  gcc/testsuite/gfortran.dg/isnan_2.f90
  339b2ac7960a6a700c8bc790f867edbb  gcc/testsuite/gfortran.dg/iso_c_binding_c_loc_char_1.f03
! 5df5f20d1e3789b118c0628f9ccca2a1  gcc/testsuite/gfortran.dg/iso_c_binding_char_1.f90
  80c2bb0f7a0a00732842956aae4eff11  gcc/testsuite/gfortran.dg/iso_c_binding_class.f03
  38eedf41f59e06503006b15c21ef2e37  gcc/testsuite/gfortran.dg/iso_c_binding_compiler_1.f90
  627f9c15dd02bfce3002a169fedf835d  gcc/testsuite/gfortran.dg/iso_c_binding_compiler_2.f90
*************** e5dfa7c2f8ba90de7a4892a9bc45ed42  gcc/te
*** 76881,76887 ****
  67e1b276903384d7446a43925fe3647b  gcc/testsuite/gfortran.dg/iso_c_binding_rename_2_driver.c
  2b43cc5962b2c3f3545ac6cc53f78e0d  gcc/testsuite/gfortran.dg/iso_c_binding_rename_3.f90
  b389f1a32e81ff22d612b413b7fdb3ad  gcc/testsuite/gfortran.dg/iso_fortran_binding_uint8_array.f90
! ceb9e1245ddd8717f45bfbd859025ae1  gcc/testsuite/gfortran.dg/iso_fortran_binding_uint8_array_driver.c
  84a50740ea41615ea1822c929d822f56  gcc/testsuite/gfortran.dg/iso_fortran_env_1.f90
  97f70359a4ebf271cf65c225b7542c8a  gcc/testsuite/gfortran.dg/iso_fortran_env_2.f90
  dcf43aa63a8733ded28e4e330d5c91a5  gcc/testsuite/gfortran.dg/iso_fortran_env_3.f90
--- 82270,82276 ----
  67e1b276903384d7446a43925fe3647b  gcc/testsuite/gfortran.dg/iso_c_binding_rename_2_driver.c
  2b43cc5962b2c3f3545ac6cc53f78e0d  gcc/testsuite/gfortran.dg/iso_c_binding_rename_3.f90
  b389f1a32e81ff22d612b413b7fdb3ad  gcc/testsuite/gfortran.dg/iso_fortran_binding_uint8_array.f90
! 493057e4406e417cddbd004e96386bd4  gcc/testsuite/gfortran.dg/iso_fortran_binding_uint8_array_driver.c
  84a50740ea41615ea1822c929d822f56  gcc/testsuite/gfortran.dg/iso_fortran_env_1.f90
  97f70359a4ebf271cf65c225b7542c8a  gcc/testsuite/gfortran.dg/iso_fortran_env_2.f90
  dcf43aa63a8733ded28e4e330d5c91a5  gcc/testsuite/gfortran.dg/iso_fortran_env_3.f90
*************** e1a74d6b2c4042f286e1438d2a3b50bc  gcc/te
*** 76923,76934 ****
  b9215c113216ae2e0acfffc4a35eb451  gcc/testsuite/gfortran.dg/line_length_11.f90
  bb3b373c21b1beb428686382a9fe319e  gcc/testsuite/gfortran.dg/line_length_2.f90
  d57fac299b3332771a75171d9ddb0a97  gcc/testsuite/gfortran.dg/line_length_3.f
! 658c12ad7dcf8132e024b44254be34da  gcc/testsuite/gfortran.dg/line_length_4.f90
! 0192939a1892b591ff5462e0665e4491  gcc/testsuite/gfortran.dg/line_length_5.f90
! 5fcfac7e430a0d01570f24d441617d4c  gcc/testsuite/gfortran.dg/line_length_6.f90
  41a210a09e67ff93761b95bfeda63eab  gcc/testsuite/gfortran.dg/line_length_7.f90
! 19902917f56cfb4d365b86adc756ebf4  gcc/testsuite/gfortran.dg/line_length_8.f90
! a861d94317cc250d3d5ada1171fa6a73  gcc/testsuite/gfortran.dg/line_length_9.f90
  69e27c6d445f499c33052aaf2359d718  gcc/testsuite/gfortran.dg/linefile.f90
  fc437ac99c80ded40e13df8066e49a91  gcc/testsuite/gfortran.dg/linked_list_1.f90
  c65f89e05452bc2ca4c2f396e2d887d8  gcc/testsuite/gfortran.dg/list_directed_large.f90
--- 82312,82323 ----
  b9215c113216ae2e0acfffc4a35eb451  gcc/testsuite/gfortran.dg/line_length_11.f90
  bb3b373c21b1beb428686382a9fe319e  gcc/testsuite/gfortran.dg/line_length_2.f90
  d57fac299b3332771a75171d9ddb0a97  gcc/testsuite/gfortran.dg/line_length_3.f
! 2b53ed411ad60732e73ad4b2c536881f  gcc/testsuite/gfortran.dg/line_length_4.f90
! 935f6afa72d81f6d65810a113b6a124e  gcc/testsuite/gfortran.dg/line_length_5.f90
! 3c1e6f38354e2ba3e5f5bd19e2255725  gcc/testsuite/gfortran.dg/line_length_6.f90
  41a210a09e67ff93761b95bfeda63eab  gcc/testsuite/gfortran.dg/line_length_7.f90
! 6fee6895457626dd7b44f874f5fc6e7b  gcc/testsuite/gfortran.dg/line_length_8.f90
! 6bda4143860cef6b1a3b5abef47d24c9  gcc/testsuite/gfortran.dg/line_length_9.f90
  69e27c6d445f499c33052aaf2359d718  gcc/testsuite/gfortran.dg/linefile.f90
  fc437ac99c80ded40e13df8066e49a91  gcc/testsuite/gfortran.dg/linked_list_1.f90
  c65f89e05452bc2ca4c2f396e2d887d8  gcc/testsuite/gfortran.dg/list_directed_large.f90
*************** f2f764304a0360c3e21b2567c9e22bc5  gcc/te
*** 76993,76998 ****
--- 82382,82388 ----
  a712ac9ff8597986399f0e39238ae03d  gcc/testsuite/gfortran.dg/lto/20100110-1_0.f90
  a359cbb68407bfc3d0394abe1fbff589  gcc/testsuite/gfortran.dg/lto/20100222-1_0.f03
  4e9d85f4aad841105271457e917b0066  gcc/testsuite/gfortran.dg/lto/20100222-1_1.c
+ 70abb70770eed90cb2b6453f4879bb96  gcc/testsuite/gfortran.dg/lto/bind-c-char_0.f90
  8ecbdc4f53d5d3f8fddd7a50b8a8ddb8  gcc/testsuite/gfortran.dg/lto/bind_c-1_0.f90
  052e44c20d305f6f59a866edce1a8f0c  gcc/testsuite/gfortran.dg/lto/bind_c-1_1.c
  53765fb202b829ee5eff495453696dbf  gcc/testsuite/gfortran.dg/lto/bind_c-2_0.f90
*************** eee4e4b1f7234702e72fe778c0d2621b  gcc/te
*** 77007,77013 ****
  ed6e00c5dc57055959583aa16ab493b8  gcc/testsuite/gfortran.dg/lto/bind_c-5_1.c
  ccbe22a34dbac49b2d95cd730bb61d7e  gcc/testsuite/gfortran.dg/lto/bind_c-6_0.f90
  6d93908070e9d39392e45f8f55d2d583  gcc/testsuite/gfortran.dg/lto/bind_c-6_1.c
! 7628e39678d48fb8a003f27a6a2b7b4a  gcc/testsuite/gfortran.dg/lto/lto.exp
  2e2f1d0362a3798b5cc0cdb704ae7876  gcc/testsuite/gfortran.dg/lto/pr40724_0.f
  b924c46f8e9c528e66113310bd822e92  gcc/testsuite/gfortran.dg/lto/pr40724_1.f
  b310c10bba59712483944d83a656d6cb  gcc/testsuite/gfortran.dg/lto/pr40725_0.f03
--- 82397,82403 ----
  ed6e00c5dc57055959583aa16ab493b8  gcc/testsuite/gfortran.dg/lto/bind_c-5_1.c
  ccbe22a34dbac49b2d95cd730bb61d7e  gcc/testsuite/gfortran.dg/lto/bind_c-6_0.f90
  6d93908070e9d39392e45f8f55d2d583  gcc/testsuite/gfortran.dg/lto/bind_c-6_1.c
! 2199a04613291f0fb7b065e94ac55b3b  gcc/testsuite/gfortran.dg/lto/lto.exp
  2e2f1d0362a3798b5cc0cdb704ae7876  gcc/testsuite/gfortran.dg/lto/pr40724_0.f
  b924c46f8e9c528e66113310bd822e92  gcc/testsuite/gfortran.dg/lto/pr40724_1.f
  b310c10bba59712483944d83a656d6cb  gcc/testsuite/gfortran.dg/lto/pr40725_0.f03
*************** d46542e133d191ad62506039dcfec743  gcc/te
*** 77083,77089 ****
  722ca9762b6ff5219e24f7b7c4e617c0  gcc/testsuite/gfortran.dg/matmul_bounds_6.f90
  113fca60ed9cef03a1103a58567d9296  gcc/testsuite/gfortran.dg/matmul_bounds_7.f90
  c4ca97a1c41f44018a807ca6f76ebd5a  gcc/testsuite/gfortran.dg/matmul_bounds_8.f90
! c627becc9c040a6d6fc80de439e9653a  gcc/testsuite/gfortran.dg/matmul_bounds_9.f90
  4bc88bb287b378ad31f0fc9afd60f352  gcc/testsuite/gfortran.dg/matmul_const.f90
  a7713918ec13950e8efe9741aec82184  gcc/testsuite/gfortran.dg/matmul_rank_1.f90
  abbd49fd8cefa925609b82c8ff1b52d7  gcc/testsuite/gfortran.dg/max_expr.f90
--- 82473,82479 ----
  722ca9762b6ff5219e24f7b7c4e617c0  gcc/testsuite/gfortran.dg/matmul_bounds_6.f90
  113fca60ed9cef03a1103a58567d9296  gcc/testsuite/gfortran.dg/matmul_bounds_7.f90
  c4ca97a1c41f44018a807ca6f76ebd5a  gcc/testsuite/gfortran.dg/matmul_bounds_8.f90
! 1188f8e78076b43faf29ae6f8ed24a24  gcc/testsuite/gfortran.dg/matmul_bounds_9.f90
  4bc88bb287b378ad31f0fc9afd60f352  gcc/testsuite/gfortran.dg/matmul_const.f90
  a7713918ec13950e8efe9741aec82184  gcc/testsuite/gfortran.dg/matmul_rank_1.f90
  abbd49fd8cefa925609b82c8ff1b52d7  gcc/testsuite/gfortran.dg/max_expr.f90
*************** c18b2575d6a9b63674756f658ca93389  gcc/te
*** 77379,77384 ****
--- 82769,82775 ----
  e5f705447cfe3093ee85b04291d3f80c  gcc/testsuite/gfortran.dg/nearest_5.f90
  5d4401879d53df84adcf50a08316a8f8  gcc/testsuite/gfortran.dg/negative-z-descriptor.f90
  d2f9406b4dddc3388ec13c7a6343827c  gcc/testsuite/gfortran.dg/negative_automatic_size.f90
+ 0600517361eae86819b9a91e0477c467  gcc/testsuite/gfortran.dg/negative_stride_1.f90
  e1c6d38824a9f8693b5457db2f9968c6  gcc/testsuite/gfortran.dg/negative_unit.f
  ffd3c63a032ebdbd1bcf3a606aca77c4  gcc/testsuite/gfortran.dg/negative_unit2.f90
  a4b7246ded973dbc9fb05299ec1d5f04  gcc/testsuite/gfortran.dg/negative_unit_check.f90
*************** ccf25bc57c7fd0870f3fa7fea60340a6  gcc/te
*** 77410,77416 ****
  2c6f079dd50cdebef82b1b476222d282  gcc/testsuite/gfortran.dg/newunit_6.f90
  25543ea4ce258c615de028583580ae15  gcc/testsuite/gfortran.dg/nint_1.f90
  16d9cc312dc3603f84627c0edcbc49a2  gcc/testsuite/gfortran.dg/nint_2.f90
! f867bd2d1caf94b8344ac3386b825ea1  gcc/testsuite/gfortran.dg/nint_p7.f90
  9aae8ef0f1f255b8f35b6d5e6807059a  gcc/testsuite/gfortran.dg/no-automatic.f90
  03b84fc5eca43cc5d1a0b1a93937da73  gcc/testsuite/gfortran.dg/no_arg_check_1.f90
  c60b2c37f26b9fe5b1daba95b7c848d0  gcc/testsuite/gfortran.dg/no_arg_check_2.f90
--- 82801,82807 ----
  2c6f079dd50cdebef82b1b476222d282  gcc/testsuite/gfortran.dg/newunit_6.f90
  25543ea4ce258c615de028583580ae15  gcc/testsuite/gfortran.dg/nint_1.f90
  16d9cc312dc3603f84627c0edcbc49a2  gcc/testsuite/gfortran.dg/nint_2.f90
! 75f491150db9183d7c839b8231781c0a  gcc/testsuite/gfortran.dg/nint_p7.f90
  9aae8ef0f1f255b8f35b6d5e6807059a  gcc/testsuite/gfortran.dg/no-automatic.f90
  03b84fc5eca43cc5d1a0b1a93937da73  gcc/testsuite/gfortran.dg/no_arg_check_1.f90
  c60b2c37f26b9fe5b1daba95b7c848d0  gcc/testsuite/gfortran.dg/no_arg_check_2.f90
*************** e67abf33c2578358a5d5bab3e11f00e9  gcc/te
*** 77448,77453 ****
--- 82839,82845 ----
  a268bf435ff3e542009031168b6619a0  gcc/testsuite/gfortran.dg/null_8.f90
  f1e3cfba25a768bf7f9073932a36c7db  gcc/testsuite/gfortran.dg/null_9.f90
  fb9d6abbd9b9049c00ee6e992d1a8859  gcc/testsuite/gfortran.dg/null_actual.f90
+ c7884979306076731054566268cfb979  gcc/testsuite/gfortran.dg/null_actual_2.f90
  eb6af590881f3e995fc6b2c78089f277  gcc/testsuite/gfortran.dg/nullify_1.f
  f202e3843710f9492560538fa53c3847  gcc/testsuite/gfortran.dg/nullify_2.f90
  768d37ebff7930db8f8a99ac16b90d32  gcc/testsuite/gfortran.dg/nullify_3.f90
*************** f67cfd0ae4d38f1ca5dc8d7f6e954087  gcc/te
*** 77581,77586 ****
--- 82973,82979 ----
  467e7b0f7ffea3a05b9ac591c2ac05ee  gcc/testsuite/gfortran.dg/pdt_3.f03
  1f42496cb72089bef450a6df6a13c299  gcc/testsuite/gfortran.dg/pdt_30.f90
  d586eb557b29a67b9fa981d71d443c8b  gcc/testsuite/gfortran.dg/pdt_31.f03
+ e5bda49b00d9e9f9b204003142ebb089  gcc/testsuite/gfortran.dg/pdt_32.f03
  9779f8b6736c414d2620a7f8234f3e40  gcc/testsuite/gfortran.dg/pdt_4.f03
  65d2ad728417ad3174fc1ce2b51a458d  gcc/testsuite/gfortran.dg/pdt_6.f03
  d2c9dae0c6e2385c5712aba8e12a70ba  gcc/testsuite/gfortran.dg/pdt_7.f03
*************** e13b5dd50c332ea865cb6fabb5f79f29  gcc/te
*** 77686,77692 ****
--- 83079,83089 ----
  fc0ae38e4fdc2d7761aba57181c97b51  gcc/testsuite/gfortran.dg/pr100551.f90
  17f130e627232745d6279696b6984514  gcc/testsuite/gfortran.dg/pr100949.f90
  3838974931fe610997470a0a7f2e3a97  gcc/testsuite/gfortran.dg/pr100950.f90
+ 3d43a9a1b6205e1b7de2551cccb26868  gcc/testsuite/gfortran.dg/pr101026.f
+ 18df1dbd6fd284336b8f22ec7ec7ba5b  gcc/testsuite/gfortran.dg/pr101121.f
  00eaff2aeb07d3b9bbb1b67083921aaf  gcc/testsuite/gfortran.dg/pr101158.f90
+ 8e40caa9023b2b568477f8b0a6586cd9  gcc/testsuite/gfortran.dg/pr101264.f90
+ 9f2647b912cfcf8002d65aa022175300  gcc/testsuite/gfortran.dg/pr101267.f90
  515f43ee1c3a7f37818b2b4bd6abedd7  gcc/testsuite/gfortran.dg/pr101327.f90
  215e51d0e3da3316aa6f9d992ac2c7d7  gcc/testsuite/gfortran.dg/pr101329.f90
  afe21b866be9162c6b654dc6771e6ead  gcc/testsuite/gfortran.dg/pr101514.f90
*************** c081e1f510a2d68ec176356111dab188  gcc/te
*** 77701,77715 ****
  d99cea26823109c0bb853b42df152999  gcc/testsuite/gfortran.dg/pr102715.f90
  f28998ba16e7a78633a9de3d5eaf0667  gcc/testsuite/gfortran.dg/pr102816.f90
  cc6ac3aa934c104c85fad8e43ae6985d  gcc/testsuite/gfortran.dg/pr102817.f90
! 87fa8e20851e07d06d4d5991b6fc240d  gcc/testsuite/gfortran.dg/pr102860.f90
  a082b0c5fdbc266f00ae264494538e49  gcc/testsuite/gfortran.dg/pr103505.f90
  dc7a57f897711dfb7a3fba377198c10c  gcc/testsuite/gfortran.dg/pr103588.f90
  a27b232d198fc2463c04af17903b1b4c  gcc/testsuite/gfortran.dg/pr103606.f90
  ea7b00fcccc1df091b8087b16e502d92  gcc/testsuite/gfortran.dg/pr103607.f90
  e83cb447f532a018a571c0eb3b9813ac  gcc/testsuite/gfortran.dg/pr103609.f90
  448c7638e7741c015d95260e6491d8fa  gcc/testsuite/gfortran.dg/pr103692.f90
  9c2a780c1ca6904bb5164e252d9e5455  gcc/testsuite/gfortran.dg/pr104210.f90
  73191330286eb3bf2c13130685c97c95  gcc/testsuite/gfortran.dg/pr104211.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
  e9cbd51db4e16292fc5dd1fead2e5a49  gcc/testsuite/gfortran.dg/pr15140.f90
--- 83098,83122 ----
  d99cea26823109c0bb853b42df152999  gcc/testsuite/gfortran.dg/pr102715.f90
  f28998ba16e7a78633a9de3d5eaf0667  gcc/testsuite/gfortran.dg/pr102816.f90
  cc6ac3aa934c104c85fad8e43ae6985d  gcc/testsuite/gfortran.dg/pr102817.f90
! c35066e873add73fe333d803e2854739  gcc/testsuite/gfortran.dg/pr102860.f90
! 0ab268c803f92d68c3d8dc955e088212  gcc/testsuite/gfortran.dg/pr103258.f90
! 48782be659f3ec5c8d9cba03ca6cc43d  gcc/testsuite/gfortran.dg/pr103286.f90
! ab2e9f64b18aaf6df9600288ded6ce51  gcc/testsuite/gfortran.dg/pr103366.f90
  a082b0c5fdbc266f00ae264494538e49  gcc/testsuite/gfortran.dg/pr103505.f90
  dc7a57f897711dfb7a3fba377198c10c  gcc/testsuite/gfortran.dg/pr103588.f90
  a27b232d198fc2463c04af17903b1b4c  gcc/testsuite/gfortran.dg/pr103606.f90
  ea7b00fcccc1df091b8087b16e502d92  gcc/testsuite/gfortran.dg/pr103607.f90
  e83cb447f532a018a571c0eb3b9813ac  gcc/testsuite/gfortran.dg/pr103609.f90
+ 529d8c5aafc7e0dd0a65860ed5f85bcf  gcc/testsuite/gfortran.dg/pr103691.f90
  448c7638e7741c015d95260e6491d8fa  gcc/testsuite/gfortran.dg/pr103692.f90
+ 3a28632a1496231fb208ccbe80ac9bc8  gcc/testsuite/gfortran.dg/pr103898.f90
  9c2a780c1ca6904bb5164e252d9e5455  gcc/testsuite/gfortran.dg/pr104210.f90
  73191330286eb3bf2c13130685c97c95  gcc/testsuite/gfortran.dg/pr104211.f90
+ d54a9a735e74cc7d08959a7e744ae292  gcc/testsuite/gfortran.dg/pr104466.f90
+ 20b528a5635e11a2c7db46289cab958c  gcc/testsuite/gfortran.dg/pr104528.f
+ 5c1153d4a81aef8918afa2d0f27d3085  gcc/testsuite/gfortran.dg/pr104571.f90
+ 0d8084e6020a7001ebdb9b59d688556e  gcc/testsuite/gfortran.dg/pr104716.f
+ 7a5b7a18d621b5e1b9d04b73e259ddd4  gcc/testsuite/gfortran.dg/pr104849.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
  e9cbd51db4e16292fc5dd1fead2e5a49  gcc/testsuite/gfortran.dg/pr15140.f90
*************** febdb201af158f6c486ef5b23291d661  gcc/te
*** 77761,77767 ****
  85a0a14e8ba84e2ea3ffc40ea9bf815d  gcc/testsuite/gfortran.dg/pr21730.f
  675ac351a6cbfb5b6437cf4db2932442  gcc/testsuite/gfortran.dg/pr22491.f
  dbfc80ddde02e81da94749ff32a32bd6  gcc/testsuite/gfortran.dg/pr23095.f
! 6f6a189a06b8b916f716c9ba20fc61ae  gcc/testsuite/gfortran.dg/pr24823.f
  d6aa66ac0eb04a33f2c32b1111032266  gcc/testsuite/gfortran.dg/pr25603.f
  4f00dc3933336f591084f1b375009e07  gcc/testsuite/gfortran.dg/pr25923.f90
  66453cc49ba536feb5c18a7ac0ff04b7  gcc/testsuite/gfortran.dg/pr26246_1.f90
--- 83168,83174 ----
  85a0a14e8ba84e2ea3ffc40ea9bf815d  gcc/testsuite/gfortran.dg/pr21730.f
  675ac351a6cbfb5b6437cf4db2932442  gcc/testsuite/gfortran.dg/pr22491.f
  dbfc80ddde02e81da94749ff32a32bd6  gcc/testsuite/gfortran.dg/pr23095.f
! 62e3c3fbf20fba393e2606182fef5e41  gcc/testsuite/gfortran.dg/pr24823.f
  d6aa66ac0eb04a33f2c32b1111032266  gcc/testsuite/gfortran.dg/pr25603.f
  4f00dc3933336f591084f1b375009e07  gcc/testsuite/gfortran.dg/pr25923.f90
  66453cc49ba536feb5c18a7ac0ff04b7  gcc/testsuite/gfortran.dg/pr26246_1.f90
*************** dd0523e844b80015d2e266a4ad9f02ab  gcc/te
*** 77780,77786 ****
  fa042d8fa0ac7641005939a723075502  gcc/testsuite/gfortran.dg/pr32242.f90
  58421a5127a747195af89da21694d0d8  gcc/testsuite/gfortran.dg/pr32533.f90
  0321146421a51d31992fa691ff881090  gcc/testsuite/gfortran.dg/pr32535.f90
! e162dff4afa3bb15205dd06d523e8696  gcc/testsuite/gfortran.dg/pr32599.f03
  ce64fc302236001bcd3614a913db1ba3  gcc/testsuite/gfortran.dg/pr32601.f03
  2999ed2f63d26ad1e8660e5b78ac97ac  gcc/testsuite/gfortran.dg/pr32601_1.f03
  a8577e28b08e8ddf0b4c606fadfe46f7  gcc/testsuite/gfortran.dg/pr32627.f03
--- 83187,83193 ----
  fa042d8fa0ac7641005939a723075502  gcc/testsuite/gfortran.dg/pr32242.f90
  58421a5127a747195af89da21694d0d8  gcc/testsuite/gfortran.dg/pr32533.f90
  0321146421a51d31992fa691ff881090  gcc/testsuite/gfortran.dg/pr32535.f90
! 8936ff3253194bd818a99b3a731e4b3d  gcc/testsuite/gfortran.dg/pr32599.f03
  ce64fc302236001bcd3614a913db1ba3  gcc/testsuite/gfortran.dg/pr32601.f03
  2999ed2f63d26ad1e8660e5b78ac97ac  gcc/testsuite/gfortran.dg/pr32601_1.f03
  a8577e28b08e8ddf0b4c606fadfe46f7  gcc/testsuite/gfortran.dg/pr32627.f03
*************** a9b6bd0717cd606ed255a3cc5e3d4343  gcc/te
*** 77822,77832 ****
  e10e6ef05a05da32c098dc57b8872930  gcc/testsuite/gfortran.dg/pr39695_3.f90
  d5a07e4fb254ff561108269c0ecffae6  gcc/testsuite/gfortran.dg/pr39695_4.f90
  6538a1bf717a767c8b613e4a6e213685  gcc/testsuite/gfortran.dg/pr39865.f90
! 6d98ddbee368092b07f33b6c4f3132ce  gcc/testsuite/gfortran.dg/pr39937.f
  128d1f5873432fbeef9032aaaa925a0a  gcc/testsuite/gfortran.dg/pr40587.f
  dde08f832232073a8cfbe9c29db74aea  gcc/testsuite/gfortran.dg/pr40839.f90
  286d79105e3446494611fa9a0c712111  gcc/testsuite/gfortran.dg/pr40999.f
! 0bc0673d979ad575c0d09c87e33361a1  gcc/testsuite/gfortran.dg/pr41011.f
  87db7da7fa3903f49a2b7e9debf84bc7  gcc/testsuite/gfortran.dg/pr41043.f90
  ecfd0b4a9534a80a0116f800e59bfe69  gcc/testsuite/gfortran.dg/pr41126.f90
  a7d7af093c8bc9ae9ee2e1f6c7147a31  gcc/testsuite/gfortran.dg/pr41162.f
--- 83229,83239 ----
  e10e6ef05a05da32c098dc57b8872930  gcc/testsuite/gfortran.dg/pr39695_3.f90
  d5a07e4fb254ff561108269c0ecffae6  gcc/testsuite/gfortran.dg/pr39695_4.f90
  6538a1bf717a767c8b613e4a6e213685  gcc/testsuite/gfortran.dg/pr39865.f90
! 1d9880e525b619e5debaa188d26815a1  gcc/testsuite/gfortran.dg/pr39937.f
  128d1f5873432fbeef9032aaaa925a0a  gcc/testsuite/gfortran.dg/pr40587.f
  dde08f832232073a8cfbe9c29db74aea  gcc/testsuite/gfortran.dg/pr40839.f90
  286d79105e3446494611fa9a0c712111  gcc/testsuite/gfortran.dg/pr40999.f
! afda857ec6094e64314700e9fead3e36  gcc/testsuite/gfortran.dg/pr41011.f
  87db7da7fa3903f49a2b7e9debf84bc7  gcc/testsuite/gfortran.dg/pr41043.f90
  ecfd0b4a9534a80a0116f800e59bfe69  gcc/testsuite/gfortran.dg/pr41126.f90
  a7d7af093c8bc9ae9ee2e1f6c7147a31  gcc/testsuite/gfortran.dg/pr41162.f
*************** cca539dda55db1fe3d9ab628330a364e  gcc/te
*** 77879,77885 ****
  8dc00e13e8017aa32673c1673ad9bb9b  gcc/testsuite/gfortran.dg/pr47054_1.f90
  dbb1bf91a8856be53abe8cd67ff0f627  gcc/testsuite/gfortran.dg/pr47054_2.f90
  18cfa159030f8b4b160fe0d8e9420c68  gcc/testsuite/gfortran.dg/pr47574.f90
! 0280bd4bfb5b153f438a9cfd70e3cd82  gcc/testsuite/gfortran.dg/pr47614.f
  9ff6a3335f233c3bfe3926ceefc544b9  gcc/testsuite/gfortran.dg/pr47757-1.f90
  f3e2e80b3229e8fec07b3263f3453fed  gcc/testsuite/gfortran.dg/pr47757-2.f90
  9d5355ff4338853aec406e4f5edae9ea  gcc/testsuite/gfortran.dg/pr47757-3.f90
--- 83286,83292 ----
  8dc00e13e8017aa32673c1673ad9bb9b  gcc/testsuite/gfortran.dg/pr47054_1.f90
  dbb1bf91a8856be53abe8cd67ff0f627  gcc/testsuite/gfortran.dg/pr47054_2.f90
  18cfa159030f8b4b160fe0d8e9420c68  gcc/testsuite/gfortran.dg/pr47574.f90
! 5bac258cba16f4d9d341434b93beae68  gcc/testsuite/gfortran.dg/pr47614.f
  9ff6a3335f233c3bfe3926ceefc544b9  gcc/testsuite/gfortran.dg/pr47757-1.f90
  f3e2e80b3229e8fec07b3263f3453fed  gcc/testsuite/gfortran.dg/pr47757-2.f90
  9d5355ff4338853aec406e4f5edae9ea  gcc/testsuite/gfortran.dg/pr47757-3.f90
*************** cc1f32e49ccc36b48a493abb17c42e3a  gcc/te
*** 77914,77920 ****
  06c6d9ce5be8e2db5ad7c0ed6d662d81  gcc/testsuite/gfortran.dg/pr52835.f90
  64628ff1500cad617b98f760c944cfcb  gcc/testsuite/gfortran.dg/pr53217.f90
  7e0c066a4db021d7b9644d3c4c484441  gcc/testsuite/gfortran.dg/pr53298.f90
! 5c39c53d556b3246eead8e21315b7220  gcc/testsuite/gfortran.dg/pr53787.f90
  c8646ca00d10d23022de604a2af8bdf2  gcc/testsuite/gfortran.dg/pr54131.f
  523d7fa9f2338ac58bdf30c676b56938  gcc/testsuite/gfortran.dg/pr54889.f90
  9f0f693907d6b2758b64855de54f98f1  gcc/testsuite/gfortran.dg/pr54967.f90
--- 83321,83327 ----
  06c6d9ce5be8e2db5ad7c0ed6d662d81  gcc/testsuite/gfortran.dg/pr52835.f90
  64628ff1500cad617b98f760c944cfcb  gcc/testsuite/gfortran.dg/pr53217.f90
  7e0c066a4db021d7b9644d3c4c484441  gcc/testsuite/gfortran.dg/pr53298.f90
! d40d6fbd5b50fee593348d767742b800  gcc/testsuite/gfortran.dg/pr53787.f90
  c8646ca00d10d23022de604a2af8bdf2  gcc/testsuite/gfortran.dg/pr54131.f
  523d7fa9f2338ac58bdf30c676b56938  gcc/testsuite/gfortran.dg/pr54889.f90
  9f0f693907d6b2758b64855de54f98f1  gcc/testsuite/gfortran.dg/pr54967.f90
*************** a3fc06fbb8d6c53a22462ce8a5fade30  gcc/te
*** 77939,77945 ****
  fcdffb26a3d7f862eb7d9eaee5b49b49  gcc/testsuite/gfortran.dg/pr58027.f90
  1ca63f28ae284979c3b2b1c01dc88abf  gcc/testsuite/gfortran.dg/pr58290.f90
  bc63d6ff9d523e63fa42eb148fceb4c6  gcc/testsuite/gfortran.dg/pr58484.f
! 756af060f4f83f1c7fac64450555d67c  gcc/testsuite/gfortran.dg/pr58968.f
  38761fc6ca20bfa8a4d47530bb0173c3  gcc/testsuite/gfortran.dg/pr59107.f90
  54642dc29547df928c052d04531cae6f  gcc/testsuite/gfortran.dg/pr59440-1.f90
  29517347731146172a1733a27581daa9  gcc/testsuite/gfortran.dg/pr59440-2.f90
--- 83346,83352 ----
  fcdffb26a3d7f862eb7d9eaee5b49b49  gcc/testsuite/gfortran.dg/pr58027.f90
  1ca63f28ae284979c3b2b1c01dc88abf  gcc/testsuite/gfortran.dg/pr58290.f90
  bc63d6ff9d523e63fa42eb148fceb4c6  gcc/testsuite/gfortran.dg/pr58484.f
! 2892cc9f5f933b8f3110403ca2a7f315  gcc/testsuite/gfortran.dg/pr58968.f
  38761fc6ca20bfa8a4d47530bb0173c3  gcc/testsuite/gfortran.dg/pr59107.f90
  54642dc29547df928c052d04531cae6f  gcc/testsuite/gfortran.dg/pr59440-1.f90
  29517347731146172a1733a27581daa9  gcc/testsuite/gfortran.dg/pr59440-2.f90
*************** f5878abe544570f500d4148c17a74cc4  gcc/te
*** 77950,77956 ****
  649ea9d3e6b33e6ac70422c5becd7c00  gcc/testsuite/gfortran.dg/pr60126.f90
  3b29384424c4763316b15910ca957b93  gcc/testsuite/gfortran.dg/pr60144.f90
  d03f1dd77bd6dee9a89da7373579df73  gcc/testsuite/gfortran.dg/pr61209.f90
! 4b67b2370defe3383e0985c7ffe3c3bd  gcc/testsuite/gfortran.dg/pr61318.f90
  b4a7352be56f63fec4426a00db50fae5  gcc/testsuite/gfortran.dg/pr61335.f90
  6dedb63c784b5018b208a0535bbce9a1  gcc/testsuite/gfortran.dg/pr61454.f90
  2c95c461b017b811d75f842a5f254b83  gcc/testsuite/gfortran.dg/pr61669.f90
--- 83357,83363 ----
  649ea9d3e6b33e6ac70422c5becd7c00  gcc/testsuite/gfortran.dg/pr60126.f90
  3b29384424c4763316b15910ca957b93  gcc/testsuite/gfortran.dg/pr60144.f90
  d03f1dd77bd6dee9a89da7373579df73  gcc/testsuite/gfortran.dg/pr61209.f90
! 0a4cedf3603ebfbe3f5092a5c5b439c8  gcc/testsuite/gfortran.dg/pr61318.f90
  b4a7352be56f63fec4426a00db50fae5  gcc/testsuite/gfortran.dg/pr61335.f90
  6dedb63c784b5018b208a0535bbce9a1  gcc/testsuite/gfortran.dg/pr61454.f90
  2c95c461b017b811d75f842a5f254b83  gcc/testsuite/gfortran.dg/pr61669.f90
*************** bb7ae3d8cb227128a6b68021f141597c  gcc/te
*** 77975,77981 ****
  4047d07445fe08369ee1ce1c93021886  gcc/testsuite/gfortran.dg/pr64589.f90
  bcd64217acf1df6b8a291afee3064409  gcc/testsuite/gfortran.dg/pr64925.f90
  70268db03e46845d4b55fdf0d0f32e09  gcc/testsuite/gfortran.dg/pr64980.f03
! f9bd0f155bedcd3e724bcdab0799b3d2  gcc/testsuite/gfortran.dg/pr65045.f90
  c8cbd8a65f0511bc970384b9a2efd766  gcc/testsuite/gfortran.dg/pr65429.f90
  87b0fbb110ed8953705e9fdd33634a02  gcc/testsuite/gfortran.dg/pr65450.f90
  4d117775b5bf38ebe51cb5c2dfac2f33  gcc/testsuite/gfortran.dg/pr65453.f90
--- 83382,83388 ----
  4047d07445fe08369ee1ce1c93021886  gcc/testsuite/gfortran.dg/pr64589.f90
  bcd64217acf1df6b8a291afee3064409  gcc/testsuite/gfortran.dg/pr64925.f90
  70268db03e46845d4b55fdf0d0f32e09  gcc/testsuite/gfortran.dg/pr64980.f03
! feb473ccd85298145d4df37ed8c9c950  gcc/testsuite/gfortran.dg/pr65045.f90
  c8cbd8a65f0511bc970384b9a2efd766  gcc/testsuite/gfortran.dg/pr65429.f90
  87b0fbb110ed8953705e9fdd33634a02  gcc/testsuite/gfortran.dg/pr65450.f90
  4d117775b5bf38ebe51cb5c2dfac2f33  gcc/testsuite/gfortran.dg/pr65453.f90
*************** b9749045f7e8d01ce770bef143077398  gcc/te
*** 78040,78048 ****
  4dfe5b03dbae8d8845caac4e7f7c0a89  gcc/testsuite/gfortran.dg/pr69155.f90
  ed38cfd514aa0a70b18745aff4616ca3  gcc/testsuite/gfortran.dg/pr69395.f90
  1f55c100864bc4cf6e4a0f59988d3578  gcc/testsuite/gfortran.dg/pr69398.f90
  76138edfc2f50c95b9776fd1ddbf7633  gcc/testsuite/gfortran.dg/pr69455_1.f90
  4888552ee29a6b2e46e1b22d0f8a8483  gcc/testsuite/gfortran.dg/pr69455_2.f90
! 2e7b7707ba055b4f3368b3d860efa73f  gcc/testsuite/gfortran.dg/pr69497.f90
  b4bcabad8cbf6ed6353970399e848979  gcc/testsuite/gfortran.dg/pr69499.f90
  96518037a7c5060a69f1bee697816618  gcc/testsuite/gfortran.dg/pr69514_1.f90
  cdcc7573cb338d6147f60cd5f685cd75  gcc/testsuite/gfortran.dg/pr69514_2.f90
--- 83447,83456 ----
  4dfe5b03dbae8d8845caac4e7f7c0a89  gcc/testsuite/gfortran.dg/pr69155.f90
  ed38cfd514aa0a70b18745aff4616ca3  gcc/testsuite/gfortran.dg/pr69395.f90
  1f55c100864bc4cf6e4a0f59988d3578  gcc/testsuite/gfortran.dg/pr69398.f90
+ fac1c3e04d69797de0796f10f3a6c677  gcc/testsuite/gfortran.dg/pr69419.f90
  76138edfc2f50c95b9776fd1ddbf7633  gcc/testsuite/gfortran.dg/pr69455_1.f90
  4888552ee29a6b2e46e1b22d0f8a8483  gcc/testsuite/gfortran.dg/pr69455_2.f90
! 193d491803aefe559f5ea415600db632  gcc/testsuite/gfortran.dg/pr69497.f90
  b4bcabad8cbf6ed6353970399e848979  gcc/testsuite/gfortran.dg/pr69499.f90
  96518037a7c5060a69f1bee697816618  gcc/testsuite/gfortran.dg/pr69514_1.f90
  cdcc7573cb338d6147f60cd5f685cd75  gcc/testsuite/gfortran.dg/pr69514_2.f90
*************** e3df725d919fbea72dd53c26d3c3fc1b  gcc/te
*** 78059,78065 ****
  1e506f514edb56a9ce1cdd4ec26fb77e  gcc/testsuite/gfortran.dg/pr70070.f90
  9e9bc408643c6665aef0267621e54b9e  gcc/testsuite/gfortran.dg/pr70330.f90
  aa6073708fcde459f6b44a5e294fd6b0  gcc/testsuite/gfortran.dg/pr70409.f90
! 2761c4711c65ea8a97d2345710e8bf1e  gcc/testsuite/gfortran.dg/pr70673.f90
  858edd0f297501435fdd3e07e065201c  gcc/testsuite/gfortran.dg/pr70754.f90
  ba437378350349e006ee9be8afd0020e  gcc/testsuite/gfortran.dg/pr70853.f90
  386c85829c4e2571e0db7949c25f5113  gcc/testsuite/gfortran.dg/pr70870_1.f90
--- 83467,83474 ----
  1e506f514edb56a9ce1cdd4ec26fb77e  gcc/testsuite/gfortran.dg/pr70070.f90
  9e9bc408643c6665aef0267621e54b9e  gcc/testsuite/gfortran.dg/pr70330.f90
  aa6073708fcde459f6b44a5e294fd6b0  gcc/testsuite/gfortran.dg/pr70409.f90
! 67638da457ab0d71951cd7f5979f4c8c  gcc/testsuite/gfortran.dg/pr70673.f90
! cae68e674025d5310d328eebab14ba6c  gcc/testsuite/gfortran.dg/pr70673_2.f90
  858edd0f297501435fdd3e07e065201c  gcc/testsuite/gfortran.dg/pr70754.f90
  ba437378350349e006ee9be8afd0020e  gcc/testsuite/gfortran.dg/pr70853.f90
  386c85829c4e2571e0db7949c25f5113  gcc/testsuite/gfortran.dg/pr70870_1.f90
*************** fecc61bbfc16293b15103804392e0bd2  gcc/te
*** 78101,78107 ****
  d085febf0a75173f181533e5b551f555  gcc/testsuite/gfortran.dg/pr77420_4.f90
  79a74b829d4929d4e9c60d5d66d528d7  gcc/testsuite/gfortran.dg/pr77429.f90
  b41dce20e2213fb234886325f924905e  gcc/testsuite/gfortran.dg/pr77460.f90
! 6762f5900b24ec775d86ad379332cdf0  gcc/testsuite/gfortran.dg/pr77498.f
  7ac13d0d1a6ccb282debcd0ac4bf69fd  gcc/testsuite/gfortran.dg/pr77506.f90
  ad1a51ce4bd4b4e49f9cb40f0178b2ad  gcc/testsuite/gfortran.dg/pr77583.f90
  a99d6d5592ea6b962b6a45223a22a17f  gcc/testsuite/gfortran.dg/pr77612.f90
--- 83510,83516 ----
  d085febf0a75173f181533e5b551f555  gcc/testsuite/gfortran.dg/pr77420_4.f90
  79a74b829d4929d4e9c60d5d66d528d7  gcc/testsuite/gfortran.dg/pr77429.f90
  b41dce20e2213fb234886325f924905e  gcc/testsuite/gfortran.dg/pr77460.f90
! 6c454d18804070dca8b4d132f3635d98  gcc/testsuite/gfortran.dg/pr77498.f
  7ac13d0d1a6ccb282debcd0ac4bf69fd  gcc/testsuite/gfortran.dg/pr77506.f90
  ad1a51ce4bd4b4e49f9cb40f0178b2ad  gcc/testsuite/gfortran.dg/pr77583.f90
  a99d6d5592ea6b962b6a45223a22a17f  gcc/testsuite/gfortran.dg/pr77612.f90
*************** f55a4e8f8a1e79f11c9cd9ad6d9eca57  gcc/te
*** 78115,78121 ****
  4fd680a925c1f4e38d7234b314567aa4  gcc/testsuite/gfortran.dg/pr77978_1.f90
  6c1eb527a1773bb547e0372dd833482b  gcc/testsuite/gfortran.dg/pr77978_2.f90
  a997ec96c9e5b5703664c90f0b844fe1  gcc/testsuite/gfortran.dg/pr77978_3.f90
! 8a24e4a427745cf896bba391a3e4cc60  gcc/testsuite/gfortran.dg/pr78033.f90
  e54adfde54f7051d2c213313e32967ac  gcc/testsuite/gfortran.dg/pr78061.f
  b85a08682c81be65955c4ba92597115b  gcc/testsuite/gfortran.dg/pr78092.f90
  de9e390d5bfffcb1b19afeb73bf0cb56  gcc/testsuite/gfortran.dg/pr78240.f90
--- 83524,83530 ----
  4fd680a925c1f4e38d7234b314567aa4  gcc/testsuite/gfortran.dg/pr77978_1.f90
  6c1eb527a1773bb547e0372dd833482b  gcc/testsuite/gfortran.dg/pr77978_2.f90
  a997ec96c9e5b5703664c90f0b844fe1  gcc/testsuite/gfortran.dg/pr77978_3.f90
! cff824c69d7ad37892acf2925f1c1291  gcc/testsuite/gfortran.dg/pr78033.f90
  e54adfde54f7051d2c213313e32967ac  gcc/testsuite/gfortran.dg/pr78061.f
  b85a08682c81be65955c4ba92597115b  gcc/testsuite/gfortran.dg/pr78092.f90
  de9e390d5bfffcb1b19afeb73bf0cb56  gcc/testsuite/gfortran.dg/pr78240.f90
*************** c41bc69547a048a19ccb1adc57ce3bca  gcc/te
*** 78169,78174 ****
--- 83578,83584 ----
  12af81a97aa86950b63e458f115e45c9  gcc/testsuite/gfortran.dg/pr84523.f90
  6d593814cbde3b81eb21e9501a48bac2  gcc/testsuite/gfortran.dg/pr84565.f90
  7cb3611bc701529711c1f596921afaa3  gcc/testsuite/gfortran.dg/pr84734.f90
+ a4758a568b5ef9b888cb911bc4cdd259  gcc/testsuite/gfortran.dg/pr84784.f90
  cc82665e1d54c6a2d5a100788c474853  gcc/testsuite/gfortran.dg/pr84957.f90
  42d21294436ebefdc995a697f0266fd9  gcc/testsuite/gfortran.dg/pr85082.f90
  4355c9f07079d67c1134f6106f8fcb0b  gcc/testsuite/gfortran.dg/pr85138_1.f90
*************** a1e635c44207be5bef0583d4e95b9b59  gcc/te
*** 78200,78205 ****
--- 83610,83616 ----
  4ec9420f18b39ca50c103505951d029a  gcc/testsuite/gfortran.dg/pr86322_2.f90
  2de5528de5b20a3f9167bacd244b6af9  gcc/testsuite/gfortran.dg/pr86322_3.f90
  62e30bf2fcb7b9d3e2c07b040f22ad83  gcc/testsuite/gfortran.dg/pr86328.f90
+ f21a4b749b2420e974b9c588a556b913  gcc/testsuite/gfortran.dg/pr86551.f90
  f9ac359d21b98d48f1e4b1d3154d68c4  gcc/testsuite/gfortran.dg/pr86587.f90
  e63dcd38c33c95cab02e47d8cd3be75f  gcc/testsuite/gfortran.dg/pr86760.f90
  e45932f2002bdc1431a9d1f393d02f34  gcc/testsuite/gfortran.dg/pr87045.f90
*************** d666d38a87795c7fed48e1b9bc766cf8  gcc/te
*** 78281,78287 ****
  0773165cac6e0831c64c249518bf6e30  gcc/testsuite/gfortran.dg/pr91471.f90
  ad69ec1f0e04791258649d3ead95a16c  gcc/testsuite/gfortran.dg/pr91485.f90
  a06dfc186abc7953f44927364980bc00  gcc/testsuite/gfortran.dg/pr91496.f90
! 7fe190210306e38dd6c17ef0f7c325c4  gcc/testsuite/gfortran.dg/pr91497.f90
  2a61a5fbe2a82741dc8be0096e201d09  gcc/testsuite/gfortran.dg/pr91552.f90
  799c912a2c22ba463e19cf37460d25da  gcc/testsuite/gfortran.dg/pr91553.f90
  3fa58646b12fa9300bbdda1471d128d5  gcc/testsuite/gfortran.dg/pr91564.f90
--- 83692,83699 ----
  0773165cac6e0831c64c249518bf6e30  gcc/testsuite/gfortran.dg/pr91471.f90
  ad69ec1f0e04791258649d3ead95a16c  gcc/testsuite/gfortran.dg/pr91485.f90
  a06dfc186abc7953f44927364980bc00  gcc/testsuite/gfortran.dg/pr91496.f90
! 11c36b964c1494d37782185533ee04ee  gcc/testsuite/gfortran.dg/pr91497.f90
! 56d56df918c56683b3f5f70cafd9d639  gcc/testsuite/gfortran.dg/pr91497_2.f90
  2a61a5fbe2a82741dc8be0096e201d09  gcc/testsuite/gfortran.dg/pr91552.f90
  799c912a2c22ba463e19cf37460d25da  gcc/testsuite/gfortran.dg/pr91553.f90
  3fa58646b12fa9300bbdda1471d128d5  gcc/testsuite/gfortran.dg/pr91564.f90
*************** ad5d9eaa5f8d1c73673f959f766e825d  gcc/te
*** 78346,78352 ****
  321e671c6e1acf78d716c2076bdf3a00  gcc/testsuite/gfortran.dg/pr93498_1.f90
  fde8604ea120a8ce9b073bf211cdf432  gcc/testsuite/gfortran.dg/pr93498_2.f90
  21b8ac4794fea5aabe6be080143c94c1  gcc/testsuite/gfortran.dg/pr93499.f90
! bee8bc29b8ca49cd7a363195e6cdb6d0  gcc/testsuite/gfortran.dg/pr93524.c
  0599cd53dee4ce76500f304b1b305d9e  gcc/testsuite/gfortran.dg/pr93524.f90
  044a867e31d2488aef215034fa209478  gcc/testsuite/gfortran.dg/pr93580.f90
  68f7d2abe5ed9475d5e9114a25471a50  gcc/testsuite/gfortran.dg/pr93600_1.f90
--- 83758,83764 ----
  321e671c6e1acf78d716c2076bdf3a00  gcc/testsuite/gfortran.dg/pr93498_1.f90
  fde8604ea120a8ce9b073bf211cdf432  gcc/testsuite/gfortran.dg/pr93498_2.f90
  21b8ac4794fea5aabe6be080143c94c1  gcc/testsuite/gfortran.dg/pr93499.f90
! e5dc7b9c0011583d289357ca67906106  gcc/testsuite/gfortran.dg/pr93524.c
  0599cd53dee4ce76500f304b1b305d9e  gcc/testsuite/gfortran.dg/pr93524.f90
  044a867e31d2488aef215034fa209478  gcc/testsuite/gfortran.dg/pr93580.f90
  68f7d2abe5ed9475d5e9114a25471a50  gcc/testsuite/gfortran.dg/pr93600_1.f90
*************** f9cd7fe0c8cb7be5b0846aa6c3eb0b93  gcc/te
*** 78362,78368 ****
  9a2df63b77cda57168f292b09bde71b3  gcc/testsuite/gfortran.dg/pr93686_4.f90
  0636d4a049257c8e3f6c32b4b7309697  gcc/testsuite/gfortran.dg/pr93714_1.f90
  93b8b244bce4583a43c29d892e177744  gcc/testsuite/gfortran.dg/pr93714_2.f90
! 8564903a85485b55debd7fc2adab990d  gcc/testsuite/gfortran.dg/pr93792.f90
  a5b6ce00cd18edc5606fea2eada6c169  gcc/testsuite/gfortran.dg/pr93835.f08
  6736173bcc319bca35f5453a7bca947b  gcc/testsuite/gfortran.dg/pr94030_1.f90
  b0f8acfae3746c459e5af7bcca222814  gcc/testsuite/gfortran.dg/pr94030_2.f90
--- 83774,83780 ----
  9a2df63b77cda57168f292b09bde71b3  gcc/testsuite/gfortran.dg/pr93686_4.f90
  0636d4a049257c8e3f6c32b4b7309697  gcc/testsuite/gfortran.dg/pr93714_1.f90
  93b8b244bce4583a43c29d892e177744  gcc/testsuite/gfortran.dg/pr93714_2.f90
! 4d2e245917c39b1bcaeea6010bcb6284  gcc/testsuite/gfortran.dg/pr93792.f90
  a5b6ce00cd18edc5606fea2eada6c169  gcc/testsuite/gfortran.dg/pr93835.f08
  6736173bcc319bca35f5453a7bca947b  gcc/testsuite/gfortran.dg/pr94030_1.f90
  b0f8acfae3746c459e5af7bcca222814  gcc/testsuite/gfortran.dg/pr94030_2.f90
*************** e6acc3eb976952fc47981d6ab4ed7205  gcc/te
*** 78429,78435 ****
  43b9b0a65aabf3911bc6a2d49e46f640  gcc/testsuite/gfortran.dg/pr96102.f90
  62ba5dd0303d84c214429cc5293a10ed  gcc/testsuite/gfortran.dg/pr96312.f90
  7607f1a87517f55c7ef37367d96d802e  gcc/testsuite/gfortran.dg/pr96319.f90
! 095dc309204d3d18d412fa126cbd561f  gcc/testsuite/gfortran.dg/pr96325.f90
  2b437bc37acea90dc3acda804ecc8af2  gcc/testsuite/gfortran.dg/pr96436_1.f90
  2524ffbe2910a6b3473a3c31d7998a36  gcc/testsuite/gfortran.dg/pr96436_10.f90
  d5903f6b335e4ec014953d7d04a5333d  gcc/testsuite/gfortran.dg/pr96436_2.f90
--- 83841,83847 ----
  43b9b0a65aabf3911bc6a2d49e46f640  gcc/testsuite/gfortran.dg/pr96102.f90
  62ba5dd0303d84c214429cc5293a10ed  gcc/testsuite/gfortran.dg/pr96312.f90
  7607f1a87517f55c7ef37367d96d802e  gcc/testsuite/gfortran.dg/pr96319.f90
! d56be000adb4e5f4b724c408cb3ef497  gcc/testsuite/gfortran.dg/pr96325.f90
  2b437bc37acea90dc3acda804ecc8af2  gcc/testsuite/gfortran.dg/pr96436_1.f90
  2524ffbe2910a6b3473a3c31d7998a36  gcc/testsuite/gfortran.dg/pr96436_10.f90
  d5903f6b335e4ec014953d7d04a5333d  gcc/testsuite/gfortran.dg/pr96436_2.f90
*************** ab042e08fc9ce8ff8f4b87f1cbc12f17  gcc/te
*** 78455,78460 ****
--- 83867,83873 ----
  e9131ae038c1f4f18b0f72da1bf1423e  gcc/testsuite/gfortran.dg/pr97768_2.f90
  a78afb0368bddc411548d63311098918  gcc/testsuite/gfortran.dg/pr98016.f90
  0103f634279cccfe329c626d7b20e2fa  gcc/testsuite/gfortran.dg/pr98017.f90
+ 7c418d11e1a79fc471909c57b3caef42  gcc/testsuite/gfortran.dg/pr98076.f90
  30379f7e459be0df7dde3d8fe2ad8502  gcc/testsuite/gfortran.dg/pr98284.f90
  8a48e2264b578c77fe953f48d587af4e  gcc/testsuite/gfortran.dg/pr98411.f90
  661afc7f73f5e470bae7d7efa0a06cbd  gcc/testsuite/gfortran.dg/pr98661.f90
*************** d2a694e27e64b57361e7aee533fcd3c3  gcc/te
*** 78468,78477 ****
  c87315db9f86724d3e3b8f6f8a3e6e52  gcc/testsuite/gfortran.dg/pr99602b.f90
  0ee53271eb866a0185bed444745e15c1  gcc/testsuite/gfortran.dg/pr99602c.f90
  0ee53271eb866a0185bed444745e15c1  gcc/testsuite/gfortran.dg/pr99602d.f90
  891574fabddfbfea0c1fe4cf0cd69927  gcc/testsuite/gfortran.dg/predcom-1.f
  76cb03b4659cc6b4cd2f072860817262  gcc/testsuite/gfortran.dg/predcom-2.f
  d667c79ea0bad11d2e191cce083c4c1a  gcc/testsuite/gfortran.dg/predict-1.f90
! 14cc18b33d098716ab46d0b43283d1c1  gcc/testsuite/gfortran.dg/predict-2.f90
  5853e8db3c52e4485711bf2bd14ae4ab  gcc/testsuite/gfortran.dg/predict-3.f90
  80cf60710448ac2378aecda5fc4a57b6  gcc/testsuite/gfortran.dg/present_1.f90
  6938f4f4c0070f5e0b7910c9c0d93603  gcc/testsuite/gfortran.dg/print_1.f90
--- 83881,83892 ----
  c87315db9f86724d3e3b8f6f8a3e6e52  gcc/testsuite/gfortran.dg/pr99602b.f90
  0ee53271eb866a0185bed444745e15c1  gcc/testsuite/gfortran.dg/pr99602c.f90
  0ee53271eb866a0185bed444745e15c1  gcc/testsuite/gfortran.dg/pr99602d.f90
+ 1c6467dbf2735308c739bb1815cdd6d6  gcc/testsuite/gfortran.dg/pr99853.f90
+ dab419662e3570f4152f188c42daa579  gcc/testsuite/gfortran.dg/pr99956.f
  891574fabddfbfea0c1fe4cf0cd69927  gcc/testsuite/gfortran.dg/predcom-1.f
  76cb03b4659cc6b4cd2f072860817262  gcc/testsuite/gfortran.dg/predcom-2.f
  d667c79ea0bad11d2e191cce083c4c1a  gcc/testsuite/gfortran.dg/predict-1.f90
! 47582a8864b09ea761a3b8a3240cbaf9  gcc/testsuite/gfortran.dg/predict-2.f90
  5853e8db3c52e4485711bf2bd14ae4ab  gcc/testsuite/gfortran.dg/predict-3.f90
  80cf60710448ac2378aecda5fc4a57b6  gcc/testsuite/gfortran.dg/present_1.f90
  6938f4f4c0070f5e0b7910c9c0d93603  gcc/testsuite/gfortran.dg/print_1.f90
*************** c273afb240dd8ee8117b49f657c81476  gcc/te
*** 78656,78662 ****
  56206d45c5f13e14b3a1fb529ebdfba0  gcc/testsuite/gfortran.dg/product_init_expr.f03
  8cfd22f83c53cada6279a70564dbbee0  gcc/testsuite/gfortran.dg/product_sum_bounds_1.f90
  1df3bb37479b20de5e1cd736cdffade5  gcc/testsuite/gfortran.dg/prof/dynamic_dispatch_6.f03
! ef6aa54b8cb153774b81ac7f5ea03c10  gcc/testsuite/gfortran.dg/prof/prof.exp
  ddf26540873573967a534a14385f92dd  gcc/testsuite/gfortran.dg/program_name_1.f90
  451cb2bde6f52f6e44db85652688fbea  gcc/testsuite/gfortran.dg/promotion.f90
  08bbf4464a0ed5e6cd9955f827a92afa  gcc/testsuite/gfortran.dg/promotion_2.f90
--- 84071,84077 ----
  56206d45c5f13e14b3a1fb529ebdfba0  gcc/testsuite/gfortran.dg/product_init_expr.f03
  8cfd22f83c53cada6279a70564dbbee0  gcc/testsuite/gfortran.dg/product_sum_bounds_1.f90
  1df3bb37479b20de5e1cd736cdffade5  gcc/testsuite/gfortran.dg/prof/dynamic_dispatch_6.f03
! e2a943b577daadd0175161d0c30943d1  gcc/testsuite/gfortran.dg/prof/prof.exp
  ddf26540873573967a534a14385f92dd  gcc/testsuite/gfortran.dg/program_name_1.f90
  451cb2bde6f52f6e44db85652688fbea  gcc/testsuite/gfortran.dg/promotion.f90
  08bbf4464a0ed5e6cd9955f827a92afa  gcc/testsuite/gfortran.dg/promotion_2.f90
*************** cee66ec5b389cd7c4cb8c22f5584f9dd  gcc/te
*** 79080,79091 ****
  76b6a643d27059d9c8114652d1d2ae9f  gcc/testsuite/gfortran.dg/size_kind.f90
  5a93d89b88a4dab967e9247a9cce78ca  gcc/testsuite/gfortran.dg/size_kind_2.f90
  06fc303bb9c257b08d6c089dc0b90562  gcc/testsuite/gfortran.dg/size_kind_3.f90
! 51c5f01c056b65ab767dda0a765eb68a  gcc/testsuite/gfortran.dg/size_optional_dim_1.f90
  3b2c2a5206047f06585f5eaa51118fb1  gcc/testsuite/gfortran.dg/sizeof.f90
  365e93d8ad0f49947cb4a16064a8dfbc  gcc/testsuite/gfortran.dg/sizeof_2.f90
  ef6455481f972947ec2caf636b0b11f1  gcc/testsuite/gfortran.dg/sizeof_3.f90
  16ea464f9304ec12032fdb578b3edd09  gcc/testsuite/gfortran.dg/sizeof_4.f90
  aa889457a016aa03e609133a71bc8fac  gcc/testsuite/gfortran.dg/sizeof_5.f90
  92646d2f35fb17d0cd6d1d443b1fb05a  gcc/testsuite/gfortran.dg/sizeof_proc.f90
  98de29bd3d4515adf03faf99e1097da3  gcc/testsuite/gfortran.dg/slash_1.f90
  94331e49e12dbf9bc1f4bd6bb4316cb1  gcc/testsuite/gfortran.dg/sms-1.f90
--- 84495,84507 ----
  76b6a643d27059d9c8114652d1d2ae9f  gcc/testsuite/gfortran.dg/size_kind.f90
  5a93d89b88a4dab967e9247a9cce78ca  gcc/testsuite/gfortran.dg/size_kind_2.f90
  06fc303bb9c257b08d6c089dc0b90562  gcc/testsuite/gfortran.dg/size_kind_3.f90
! 1ebf3a5e28bec34f2f070ff509f033c8  gcc/testsuite/gfortran.dg/size_optional_dim_1.f90
  3b2c2a5206047f06585f5eaa51118fb1  gcc/testsuite/gfortran.dg/sizeof.f90
  365e93d8ad0f49947cb4a16064a8dfbc  gcc/testsuite/gfortran.dg/sizeof_2.f90
  ef6455481f972947ec2caf636b0b11f1  gcc/testsuite/gfortran.dg/sizeof_3.f90
  16ea464f9304ec12032fdb578b3edd09  gcc/testsuite/gfortran.dg/sizeof_4.f90
  aa889457a016aa03e609133a71bc8fac  gcc/testsuite/gfortran.dg/sizeof_5.f90
+ 32a434b597f36b496ff5b77b7e8f1e8b  gcc/testsuite/gfortran.dg/sizeof_6.f90
  92646d2f35fb17d0cd6d1d443b1fb05a  gcc/testsuite/gfortran.dg/sizeof_proc.f90
  98de29bd3d4515adf03faf99e1097da3  gcc/testsuite/gfortran.dg/slash_1.f90
  94331e49e12dbf9bc1f4bd6bb4316cb1  gcc/testsuite/gfortran.dg/sms-1.f90
*************** c1bde8e55849ef4868618f4cd69d2266  gcc/te
*** 79131,79136 ****
--- 84547,84556 ----
  399c49d893a75743e673ca8169a88756  gcc/testsuite/gfortran.dg/stfunc_7.f90
  8dc27d9a1fbd9003b65a2cd089962721  gcc/testsuite/gfortran.dg/stfunc_8.f90
  eda033d11dfa20d82831e890722e7b13  gcc/testsuite/gfortran.dg/stmt_func_1.f90
+ 3556fb0bfe05bc794d75f57e919b8ec9  gcc/testsuite/gfortran.dg/stop_1.f90
+ f17455bb508dcbb651b90b9ad85f6568  gcc/testsuite/gfortran.dg/stop_2.f
+ 14ed2a053c297aad56eb76ec48c1c0b5  gcc/testsuite/gfortran.dg/stop_3.f90
+ 3bf9babfd6f71221612abdea43e8413a  gcc/testsuite/gfortran.dg/stop_4.f90
  ccb214601d7acab9a7a82e97b469c0c1  gcc/testsuite/gfortran.dg/stop_shouldfail.f90
  34548104ff9657cfd8eb971e0dad58e7  gcc/testsuite/gfortran.dg/storage_size_1.f08
  d05a12266ad47ee1cc684d7801d940a9  gcc/testsuite/gfortran.dg/storage_size_2.f08
*************** f52d9c0fcdf271bd2e5abda2cc3b4855  gcc/te
*** 79211,79217 ****
  ea403df1c7238d712f2c9605ee89339a  gcc/testsuite/gfortran.dg/submodule_19.f08
  8e641bb094c9b5966a62745fdf14168c  gcc/testsuite/gfortran.dg/submodule_2.f08
  43bb9cc7a18987bdea7408e3ee156485  gcc/testsuite/gfortran.dg/submodule_20.f08
! 970aae252f9aced89cf731d6e1ee1a88  gcc/testsuite/gfortran.dg/submodule_21.f08
  95162bab0c6f177b1a252c74e5c0f9b4  gcc/testsuite/gfortran.dg/submodule_22.f08
  8a08078ace502007b4d1f11d6881bc37  gcc/testsuite/gfortran.dg/submodule_23.f90
  ccb4961f10894d6cecba430ba5429481  gcc/testsuite/gfortran.dg/submodule_24.f08
--- 84631,84637 ----
  ea403df1c7238d712f2c9605ee89339a  gcc/testsuite/gfortran.dg/submodule_19.f08
  8e641bb094c9b5966a62745fdf14168c  gcc/testsuite/gfortran.dg/submodule_2.f08
  43bb9cc7a18987bdea7408e3ee156485  gcc/testsuite/gfortran.dg/submodule_20.f08
! 6e3e38c5f6469d7f0841d1e3976b7af4  gcc/testsuite/gfortran.dg/submodule_21.f08
  95162bab0c6f177b1a252c74e5c0f9b4  gcc/testsuite/gfortran.dg/submodule_22.f08
  8a08078ace502007b4d1f11d6881bc37  gcc/testsuite/gfortran.dg/submodule_23.f90
  ccb4961f10894d6cecba430ba5429481  gcc/testsuite/gfortran.dg/submodule_24.f08
*************** a396a8f96432614ba5105975d1f15d38  gcc/te
*** 79258,79264 ****
  0224a5946d88b059a3e270f56ffa697b  gcc/testsuite/gfortran.dg/system_clock_2.f90
  97033a019176e90709df47b0f178a8ea  gcc/testsuite/gfortran.dg/system_clock_3.f08
  8e267cb653bd786b2d52174413cdf5c5  gcc/testsuite/gfortran.dg/t_editing.f
! c44df1b5d22bd3481e75627f7f0214f9  gcc/testsuite/gfortran.dg/tab_continuation.f
  f5ffda893867e5bb3e11896536b411b9  gcc/testsuite/gfortran.dg/team_change_1.f90
  9ad3f21542a6018c6af843e0389b2a4e  gcc/testsuite/gfortran.dg/team_end_1.f90
  a579a2ebae177c6c8937cb2a5faa8bb7  gcc/testsuite/gfortran.dg/team_form_1.f90
--- 84678,84684 ----
  0224a5946d88b059a3e270f56ffa697b  gcc/testsuite/gfortran.dg/system_clock_2.f90
  97033a019176e90709df47b0f178a8ea  gcc/testsuite/gfortran.dg/system_clock_3.f08
  8e267cb653bd786b2d52174413cdf5c5  gcc/testsuite/gfortran.dg/t_editing.f
! fc74a7b1dea5845099aae90ddbe0d2a9  gcc/testsuite/gfortran.dg/tab_continuation.f
  f5ffda893867e5bb3e11896536b411b9  gcc/testsuite/gfortran.dg/team_change_1.f90
  9ad3f21542a6018c6af843e0389b2a4e  gcc/testsuite/gfortran.dg/team_end_1.f90
  a579a2ebae177c6c8937cb2a5faa8bb7  gcc/testsuite/gfortran.dg/team_form_1.f90
*************** f0e0bb83d7a933084afe0235adc91044  gcc/te
*** 79312,79317 ****
--- 84732,84738 ----
  7dbbad160b2cec1a34861ec259ef8f69  gcc/testsuite/gfortran.dg/transfer_simplify_11.f90
  7a9020fc2f84bc7f31ff4cf8822de2ce  gcc/testsuite/gfortran.dg/transfer_simplify_12.f90
  46809d4ffd9fbb0d8d976bcf70c84e44  gcc/testsuite/gfortran.dg/transfer_simplify_13.f90
+ 61b2f883a4a88163ec3102480b6eef81  gcc/testsuite/gfortran.dg/transfer_simplify_14.f90
  033fcf43c73ba63f468dc3499e3bdfb2  gcc/testsuite/gfortran.dg/transfer_simplify_15.f90
  4e36501f895ecc45ab0347d5a28ef427  gcc/testsuite/gfortran.dg/transfer_simplify_2.f90
  dde58017dce31b9f86dea653194c266e  gcc/testsuite/gfortran.dg/transfer_simplify_3.f90
*************** b97c0286f254565a5f355602323616fe  gcc/te
*** 79329,79335 ****
  478c89f389bf3278481bc92533e8e66c  gcc/testsuite/gfortran.dg/transpose_conjg_1.f90
  3cf036b7034efaa23bd3d26ca8cf3283  gcc/testsuite/gfortran.dg/transpose_intrinsic_func_call_1.f90
  85db2a6cf6ca2d6c94792c2d028ff272  gcc/testsuite/gfortran.dg/transpose_optimization_1.f90
! 358cd12cdc753d32fd54c9213d9dedea  gcc/testsuite/gfortran.dg/transpose_optimization_2.f90
  32ed89d0a0d70ae9ee467c7ecd483ca3  gcc/testsuite/gfortran.dg/transpose_reshape_r10.f90
  250cd83d324826e163003cc65309e6c3  gcc/testsuite/gfortran.dg/trim_1.f90
  f7b65ba4a0bca5d191b122de209dc237  gcc/testsuite/gfortran.dg/trim_optimize_1.f90
--- 84750,84756 ----
  478c89f389bf3278481bc92533e8e66c  gcc/testsuite/gfortran.dg/transpose_conjg_1.f90
  3cf036b7034efaa23bd3d26ca8cf3283  gcc/testsuite/gfortran.dg/transpose_intrinsic_func_call_1.f90
  85db2a6cf6ca2d6c94792c2d028ff272  gcc/testsuite/gfortran.dg/transpose_optimization_1.f90
! b2f197e507dcc27d26c82d5585371568  gcc/testsuite/gfortran.dg/transpose_optimization_2.f90
  32ed89d0a0d70ae9ee467c7ecd483ca3  gcc/testsuite/gfortran.dg/transpose_reshape_r10.f90
  250cd83d324826e163003cc65309e6c3  gcc/testsuite/gfortran.dg/trim_1.f90
  f7b65ba4a0bca5d191b122de209dc237  gcc/testsuite/gfortran.dg/trim_optimize_1.f90
*************** a06d1fae378bbfce147f342a8741739c  gcc/te
*** 79448,79454 ****
  47d226546a2528a67a49361dbdd91fc4  gcc/testsuite/gfortran.dg/typebound_proc_17.f03
  ec0716581c0ecd4e4df475984e3671f9  gcc/testsuite/gfortran.dg/typebound_proc_18.f03
  1fd3b2490a756660dcb54ed4e8a3b12e  gcc/testsuite/gfortran.dg/typebound_proc_19.f90
! 56f39be8ad56181a7aae0ecedaca1d31  gcc/testsuite/gfortran.dg/typebound_proc_2.f90
  19a24acc63f328b731e2f45b3c7308fd  gcc/testsuite/gfortran.dg/typebound_proc_20.f90
  c9950f221879107913e1f1744490b1c4  gcc/testsuite/gfortran.dg/typebound_proc_21.f90
  3461eb271d7982b2da05179e492e1deb  gcc/testsuite/gfortran.dg/typebound_proc_22.f90
--- 84869,84875 ----
  47d226546a2528a67a49361dbdd91fc4  gcc/testsuite/gfortran.dg/typebound_proc_17.f03
  ec0716581c0ecd4e4df475984e3671f9  gcc/testsuite/gfortran.dg/typebound_proc_18.f03
  1fd3b2490a756660dcb54ed4e8a3b12e  gcc/testsuite/gfortran.dg/typebound_proc_19.f90
! 0a136789cd0a45e07b78f32ed4d6259c  gcc/testsuite/gfortran.dg/typebound_proc_2.f90
  19a24acc63f328b731e2f45b3c7308fd  gcc/testsuite/gfortran.dg/typebound_proc_20.f90
  c9950f221879107913e1f1744490b1c4  gcc/testsuite/gfortran.dg/typebound_proc_21.f90
  3461eb271d7982b2da05179e492e1deb  gcc/testsuite/gfortran.dg/typebound_proc_22.f90
*************** a7d68db5c429562164ea47edc8677d14  gcc/te
*** 79475,79482 ****
  b432d7fb6a6aa41a4117f93a3fb4acb3  gcc/testsuite/gfortran.dg/typebound_proc_9.f03
  a9c38f145300eee1aaca2ccee4d418fd  gcc/testsuite/gfortran.dg/typed_subroutine_1.f90
  5fcbccbbe6f25c7610a63673951af1d0  gcc/testsuite/gfortran.dg/ubound_1.f90
  ddea8e97d88b939147b22730616832d2  gcc/testsuite/gfortran.dg/ubsan/pr101624.f90
! ebbb3b8f806e83076bdf2e11cf9dc359  gcc/testsuite/gfortran.dg/ubsan/ubsan.exp
  1623cb39a42976237e7817a8a94f1a4a  gcc/testsuite/gfortran.dg/unary_operator.f90
  0e692a977ecc4ab86f2eddee444794b4  gcc/testsuite/gfortran.dg/uncommon_block_data_1.f90
  a3fe3d5aed286d45e58533ee6cd37dd9  gcc/testsuite/gfortran.dg/unconstrained_commons.f
--- 84896,84904 ----
  b432d7fb6a6aa41a4117f93a3fb4acb3  gcc/testsuite/gfortran.dg/typebound_proc_9.f03
  a9c38f145300eee1aaca2ccee4d418fd  gcc/testsuite/gfortran.dg/typed_subroutine_1.f90
  5fcbccbbe6f25c7610a63673951af1d0  gcc/testsuite/gfortran.dg/ubound_1.f90
+ 3487e8fcd11181a286e307cf481c7df0  gcc/testsuite/gfortran.dg/ubsan/bind-c-intent-out-2.f90
  ddea8e97d88b939147b22730616832d2  gcc/testsuite/gfortran.dg/ubsan/pr101624.f90
! f6c6c6bf490de0e2d77b0a4ab0ec5506  gcc/testsuite/gfortran.dg/ubsan/ubsan.exp
  1623cb39a42976237e7817a8a94f1a4a  gcc/testsuite/gfortran.dg/unary_operator.f90
  0e692a977ecc4ab86f2eddee444794b4  gcc/testsuite/gfortran.dg/uncommon_block_data_1.f90
  a3fe3d5aed286d45e58533ee6cd37dd9  gcc/testsuite/gfortran.dg/unconstrained_commons.f
*************** e0fd36da28b8de5efbdff70f3f200cfb  gcc/te
*** 79498,79504 ****
  d4d8bd848a80a271d5cec0d30aefe4a4  gcc/testsuite/gfortran.dg/unformatted_subrecord_1.f90
  b772f2057ff09d2637070d66e6ab4c96  gcc/testsuite/gfortran.dg/unit_1.f90
  007ddcd692dd0d667d69422852df3244  gcc/testsuite/gfortran.dg/unlimited_fmt_1.f08
! 68856f8332b8ea898f41c1913cf43f83  gcc/testsuite/gfortran.dg/unlimited_polymorphic_1.f03
  e336504744585626d433619998a53bf4  gcc/testsuite/gfortran.dg/unlimited_polymorphic_10.f90
  cd287a2b16479e41f754113092c08925  gcc/testsuite/gfortran.dg/unlimited_polymorphic_11.f90
  5c157a9399b1fafe51470e1cc5abd2a2  gcc/testsuite/gfortran.dg/unlimited_polymorphic_12.f90
--- 84920,84926 ----
  d4d8bd848a80a271d5cec0d30aefe4a4  gcc/testsuite/gfortran.dg/unformatted_subrecord_1.f90
  b772f2057ff09d2637070d66e6ab4c96  gcc/testsuite/gfortran.dg/unit_1.f90
  007ddcd692dd0d667d69422852df3244  gcc/testsuite/gfortran.dg/unlimited_fmt_1.f08
! 6d3a9c53698d5a8a41761b5161a4421a  gcc/testsuite/gfortran.dg/unlimited_polymorphic_1.f03
  e336504744585626d433619998a53bf4  gcc/testsuite/gfortran.dg/unlimited_polymorphic_10.f90
  cd287a2b16479e41f754113092c08925  gcc/testsuite/gfortran.dg/unlimited_polymorphic_11.f90
  5c157a9399b1fafe51470e1cc5abd2a2  gcc/testsuite/gfortran.dg/unlimited_polymorphic_12.f90
*************** c5c095a1207e8ebb9df3221cce7dd889  gcc/te
*** 79521,79530 ****
  1ed74102999daaa6c4980638954407ec  gcc/testsuite/gfortran.dg/unlimited_polymorphic_27.f90
  2b8ad4a091615fdca62fd02b47b05402  gcc/testsuite/gfortran.dg/unlimited_polymorphic_28.f90
  7e7a7ae9debf426cb9a72de5784be0f1  gcc/testsuite/gfortran.dg/unlimited_polymorphic_29.f90
! 9416e6463a32e0db92b1430a5ece704c  gcc/testsuite/gfortran.dg/unlimited_polymorphic_3.f03
  260aa02b581b990fd7887506c5bb6013  gcc/testsuite/gfortran.dg/unlimited_polymorphic_30.f03
  2ea3bb8b224120f1160eb2534f30fadc  gcc/testsuite/gfortran.dg/unlimited_polymorphic_31.f03
  b6a9d39af548692185921a711ee7653a  gcc/testsuite/gfortran.dg/unlimited_polymorphic_32.f03
  a4fe286ac5e85ed8eddf004026c98874  gcc/testsuite/gfortran.dg/unlimited_polymorphic_33.f90
  27f9d22da25fab9449a6d82ad7501184  gcc/testsuite/gfortran.dg/unlimited_polymorphic_4.f03
  f272bdc78ed6796b164ff55bff0c5aae  gcc/testsuite/gfortran.dg/unlimited_polymorphic_5.f90
--- 84943,84953 ----
  1ed74102999daaa6c4980638954407ec  gcc/testsuite/gfortran.dg/unlimited_polymorphic_27.f90
  2b8ad4a091615fdca62fd02b47b05402  gcc/testsuite/gfortran.dg/unlimited_polymorphic_28.f90
  7e7a7ae9debf426cb9a72de5784be0f1  gcc/testsuite/gfortran.dg/unlimited_polymorphic_29.f90
! dc1b08af016672cfb7910ca941e913b8  gcc/testsuite/gfortran.dg/unlimited_polymorphic_3.f03
  260aa02b581b990fd7887506c5bb6013  gcc/testsuite/gfortran.dg/unlimited_polymorphic_30.f03
  2ea3bb8b224120f1160eb2534f30fadc  gcc/testsuite/gfortran.dg/unlimited_polymorphic_31.f03
  b6a9d39af548692185921a711ee7653a  gcc/testsuite/gfortran.dg/unlimited_polymorphic_32.f03
+ 5f7b4ccf0f142f4a0bcddc541acd4258  gcc/testsuite/gfortran.dg/unlimited_polymorphic_32.f90
  a4fe286ac5e85ed8eddf004026c98874  gcc/testsuite/gfortran.dg/unlimited_polymorphic_33.f90
  27f9d22da25fab9449a6d82ad7501184  gcc/testsuite/gfortran.dg/unlimited_polymorphic_4.f03
  f272bdc78ed6796b164ff55bff0c5aae  gcc/testsuite/gfortran.dg/unlimited_polymorphic_5.f90
*************** f352be717d51cf3ddda8f5bdc93437f4  gcc/te
*** 79721,79732 ****
  85e276d35cb7a8b2c21db0e98b73186b  gcc/testsuite/gfortran.dg/vect/vect-6.f
  c92f16f306f4e92e783e01428ccd23b3  gcc/testsuite/gfortran.dg/vect/vect-7.f90
  46b49fba2ec5f26969cddc20dc871cb3  gcc/testsuite/gfortran.dg/vect/vect-8-epilogue.F90
! a4ef9741110cdce67ca1112b05a446ed  gcc/testsuite/gfortran.dg/vect/vect-8.f90
  9e3ba50dd73757cc5b6e9d6265e4ff1a  gcc/testsuite/gfortran.dg/vect/vect-9.f90
  3a21d8125c0cd02a232eac625ca5cbf0  gcc/testsuite/gfortran.dg/vect/vect-alias-check-1.F90
  943be5f26b034cab4a8d80ed72f35e29  gcc/testsuite/gfortran.dg/vect/vect-do-concurrent-1.f90
  51d61a0ffbe2e176d92badb55eaf6889  gcc/testsuite/gfortran.dg/vect/vect-gems.f90
! 4cb85d0a02206d170562a53b7f853e0e  gcc/testsuite/gfortran.dg/vect/vect.exp
  5020f9773f3c21b86ac1fe3e513943a0  gcc/testsuite/gfortran.dg/vector_subscript_1.f90
  0833fb55cdacc085a113140aa1d94458  gcc/testsuite/gfortran.dg/vector_subscript_2.f90
  08ce83b9015973faf30ecdfdba12cbd9  gcc/testsuite/gfortran.dg/vector_subscript_3.f90
--- 85144,85155 ----
  85e276d35cb7a8b2c21db0e98b73186b  gcc/testsuite/gfortran.dg/vect/vect-6.f
  c92f16f306f4e92e783e01428ccd23b3  gcc/testsuite/gfortran.dg/vect/vect-7.f90
  46b49fba2ec5f26969cddc20dc871cb3  gcc/testsuite/gfortran.dg/vect/vect-8-epilogue.F90
! f1cf2f0d910fe906e3f2830924f69531  gcc/testsuite/gfortran.dg/vect/vect-8.f90
  9e3ba50dd73757cc5b6e9d6265e4ff1a  gcc/testsuite/gfortran.dg/vect/vect-9.f90
  3a21d8125c0cd02a232eac625ca5cbf0  gcc/testsuite/gfortran.dg/vect/vect-alias-check-1.F90
  943be5f26b034cab4a8d80ed72f35e29  gcc/testsuite/gfortran.dg/vect/vect-do-concurrent-1.f90
  51d61a0ffbe2e176d92badb55eaf6889  gcc/testsuite/gfortran.dg/vect/vect-gems.f90
! d0daf49d33c6109ef81e2da9094db146  gcc/testsuite/gfortran.dg/vect/vect.exp
  5020f9773f3c21b86ac1fe3e513943a0  gcc/testsuite/gfortran.dg/vector_subscript_1.f90
  0833fb55cdacc085a113140aa1d94458  gcc/testsuite/gfortran.dg/vector_subscript_2.f90
  08ce83b9015973faf30ecdfdba12cbd9  gcc/testsuite/gfortran.dg/vector_subscript_3.f90
*************** a9914f639ee6c6e95daf38d8cd34e2d8  gcc/te
*** 79734,79739 ****
--- 85157,85164 ----
  3d9122574ac7b969a76692259e67a709  gcc/testsuite/gfortran.dg/vector_subscript_5.f90
  3a63b08dbdaf6914a5e5f93825edc589  gcc/testsuite/gfortran.dg/vector_subscript_6.f90
  f04149fa9287219afced4adec2ff3068  gcc/testsuite/gfortran.dg/vector_subscript_7.f90
+ 536dfa819dc61abaa4c81de004874a53  gcc/testsuite/gfortran.dg/vector_subscript_8.f90
+ 03de0c29c31b1f8539414af7b98e9501  gcc/testsuite/gfortran.dg/vector_subscript_9.f90
  924936955033d95bb05336b4c435341a  gcc/testsuite/gfortran.dg/vector_subscript_bound_1.f90
  81a2acf083f450e5ea888954fa1d6911  gcc/testsuite/gfortran.dg/verify_2.f90
  199ec76a3916374b75c6751433a28158  gcc/testsuite/gfortran.dg/verify_3.f90
*************** e2084c3e26e998b327b839228c68f0da  gcc/te
*** 79794,79800 ****
  a45735500c2235050a81488691bd9b83  gcc/testsuite/gfortran.dg/warning-directive-3.F90
  5db1f3c0b7b5ef26930ea7b952a41b80  gcc/testsuite/gfortran.dg/warning-directive-4.F90
  d7e90d5ac1ba80ab977e039c5c23bdf1  gcc/testsuite/gfortran.dg/warnings_are_errors_1.f
! d16986202af25e97a574c025915332a7  gcc/testsuite/gfortran.dg/warnings_are_errors_1.f90
  8f632367e477a017a8638d374f10d7fb  gcc/testsuite/gfortran.dg/wdate-time.F90
  2cc5aa8cdc10a24dfcac8454523cd16d  gcc/testsuite/gfortran.dg/wextra_1.f
  408e38c80c20c6b087de3cbea33a13a3  gcc/testsuite/gfortran.dg/where_1.f90
--- 85219,85225 ----
  a45735500c2235050a81488691bd9b83  gcc/testsuite/gfortran.dg/warning-directive-3.F90
  5db1f3c0b7b5ef26930ea7b952a41b80  gcc/testsuite/gfortran.dg/warning-directive-4.F90
  d7e90d5ac1ba80ab977e039c5c23bdf1  gcc/testsuite/gfortran.dg/warnings_are_errors_1.f
! 7f1aaef28181e10129020752d16d1cf4  gcc/testsuite/gfortran.dg/warnings_are_errors_1.f90
  8f632367e477a017a8638d374f10d7fb  gcc/testsuite/gfortran.dg/wdate-time.F90
  2cc5aa8cdc10a24dfcac8454523cd16d  gcc/testsuite/gfortran.dg/wextra_1.f
  408e38c80c20c6b087de3cbea33a13a3  gcc/testsuite/gfortran.dg/where_1.f90
*************** b60b1e83048adf872f1f5827680dc3ed  gcc/te
*** 79918,79924 ****
  82775aea043bb1c46d8cb089803279f4  gcc/testsuite/gfortran.fortran-torture/compile/ambig.f90
  1c29630fad991e385f1ac4b63afd3e59  gcc/testsuite/gfortran.fortran-torture/compile/arrayio.f90
  bb59bc612e4ff3905614ceeae7d89150  gcc/testsuite/gfortran.fortran-torture/compile/bergervoet2.f90
! b8c1a4a55f2ce36cda453c54cf2bf437  gcc/testsuite/gfortran.fortran-torture/compile/compile.exp
  fc5b8a207174c37582b953f18f8271a5  gcc/testsuite/gfortran.fortran-torture/compile/complex_1.f90
  d34063f5c0cc449ee1e78199c2bc37d9  gcc/testsuite/gfortran.fortran-torture/compile/contained_1.f90
  beef214f45f74ba36c7a5a4a3952c926  gcc/testsuite/gfortran.fortran-torture/compile/contained_2.f90
--- 85343,85349 ----
  82775aea043bb1c46d8cb089803279f4  gcc/testsuite/gfortran.fortran-torture/compile/ambig.f90
  1c29630fad991e385f1ac4b63afd3e59  gcc/testsuite/gfortran.fortran-torture/compile/arrayio.f90
  bb59bc612e4ff3905614ceeae7d89150  gcc/testsuite/gfortran.fortran-torture/compile/bergervoet2.f90
! 90c76c93df01cc585259da50c263ffc0  gcc/testsuite/gfortran.fortran-torture/compile/compile.exp
  fc5b8a207174c37582b953f18f8271a5  gcc/testsuite/gfortran.fortran-torture/compile/complex_1.f90
  d34063f5c0cc449ee1e78199c2bc37d9  gcc/testsuite/gfortran.fortran-torture/compile/contained_1.f90
  beef214f45f74ba36c7a5a4a3952c926  gcc/testsuite/gfortran.fortran-torture/compile/contained_2.f90
*************** b34b25b967cd77639e123317e2df451f  gcc/te
*** 80066,80072 ****
  746215f07864dfaf08683e1db2ac8960  gcc/testsuite/gfortran.fortran-torture/execute/equiv_4.f90
  39b975ad31741b72a1b9d129fa059ceb  gcc/testsuite/gfortran.fortran-torture/execute/equiv_5.f
  4cbdd3408a64145bd29410441a85f54c  gcc/testsuite/gfortran.fortran-torture/execute/equiv_init_1.f90
! 835b6e80584bd6f63206b512ef74d2b9  gcc/testsuite/gfortran.fortran-torture/execute/execute.exp
  afd19f923c3c5e466e7fe619afc1d851  gcc/testsuite/gfortran.fortran-torture/execute/f2_edit_1.f90
  f144f87ad152dd4ece29d0f8c7a9ca87  gcc/testsuite/gfortran.fortran-torture/execute/forall.f90
  b48fbbc2cab88879e5ac6c732a077df4  gcc/testsuite/gfortran.fortran-torture/execute/forall_1.f90
--- 85491,85497 ----
  746215f07864dfaf08683e1db2ac8960  gcc/testsuite/gfortran.fortran-torture/execute/equiv_4.f90
  39b975ad31741b72a1b9d129fa059ceb  gcc/testsuite/gfortran.fortran-torture/execute/equiv_5.f
  4cbdd3408a64145bd29410441a85f54c  gcc/testsuite/gfortran.fortran-torture/execute/equiv_init_1.f90
! 35ac15c8fb1bebd2480938d3dde38762  gcc/testsuite/gfortran.fortran-torture/execute/execute.exp
  afd19f923c3c5e466e7fe619afc1d851  gcc/testsuite/gfortran.fortran-torture/execute/f2_edit_1.f90
  f144f87ad152dd4ece29d0f8c7a9ca87  gcc/testsuite/gfortran.fortran-torture/execute/forall.f90
  b48fbbc2cab88879e5ac6c732a077df4  gcc/testsuite/gfortran.fortran-torture/execute/forall_1.f90
*************** d0b1bae52ad49484cf02a56de75f2bd3  gcc/te
*** 80336,80342 ****
  80faef71b12594e05c7ba1d0aac4a928  gcc/testsuite/gnat.dg/aggr24_pkg.ads
  dd98e3cd3e1ddc01752f347cf3fe1dbd  gcc/testsuite/gnat.dg/aggr25.adb
  f8344b081e967989f14352059795ecbd  gcc/testsuite/gnat.dg/aggr25.ads
! fe38ea50ed77b6e055f6ecabf97a5885  gcc/testsuite/gnat.dg/aggr26.adb
  1914703363c1120af4f64b039b3abcf6  gcc/testsuite/gnat.dg/aggr27.adb
  36665770e94aca5744c8ae4e47608bb7  gcc/testsuite/gnat.dg/aggr28.adb
  417149a605af3637b290ec16184346a2  gcc/testsuite/gnat.dg/aggr29.adb
--- 85761,85767 ----
  80faef71b12594e05c7ba1d0aac4a928  gcc/testsuite/gnat.dg/aggr24_pkg.ads
  dd98e3cd3e1ddc01752f347cf3fe1dbd  gcc/testsuite/gnat.dg/aggr25.adb
  f8344b081e967989f14352059795ecbd  gcc/testsuite/gnat.dg/aggr25.ads
! b3a316ada43c24ff36cbe71860fae91c  gcc/testsuite/gnat.dg/aggr26.adb
  1914703363c1120af4f64b039b3abcf6  gcc/testsuite/gnat.dg/aggr27.adb
  36665770e94aca5744c8ae4e47608bb7  gcc/testsuite/gnat.dg/aggr28.adb
  417149a605af3637b290ec16184346a2  gcc/testsuite/gnat.dg/aggr29.adb
*************** e98528b30f94b17e98951c75ff2f6251  gcc/te
*** 80600,80605 ****
--- 86025,86035 ----
  9df4e7b1e0bfcf70197b5eaf8a258a05  gcc/testsuite/gnat.dg/concat2.ads
  1f47fb3cb04a282d85c8cf1f4841db1b  gcc/testsuite/gnat.dg/concat3.adb
  39dd8eee371b4cc2282e363f171ded9b  gcc/testsuite/gnat.dg/concat4.adb
+ 9c4a1eaed469a996c803aa544829c7bf  gcc/testsuite/gnat.dg/concat5.adb
+ 95ab46fd6326bf75386fd23e73df560a  gcc/testsuite/gnat.dg/concat5_pkg1.adb
+ 35f7b9995956f30c7fecd77f8e603ada  gcc/testsuite/gnat.dg/concat5_pkg1.ads
+ c2a9c37d28c367751dc983961cdf3077  gcc/testsuite/gnat.dg/concat5_pkg2.adb
+ 0097b6fa94f0f4e09014ad30c6bcc195  gcc/testsuite/gnat.dg/concat5_pkg2.ads
  3e7f9a04f4a3706e783661ca30556322  gcc/testsuite/gnat.dg/concat_length.adb
  1e8fc5e809cc52079a69599d76a132e4  gcc/testsuite/gnat.dg/cond_expr1.adb
  6bf0919f37bc57eb62cf0adbb6d3aed5  gcc/testsuite/gnat.dg/cond_expr2.adb
*************** b22b52334e11c2d49e8dcbbe6accbdea  gcc/te
*** 80616,80621 ****
--- 86046,86052 ----
  130aefbfac0eaa3754a6869351629f97  gcc/testsuite/gnat.dg/constant4_pkg.ads
  107a994eea9e8762e7cd05d66c9c51b7  gcc/testsuite/gnat.dg/containers1.adb
  8ea6c98512dc539f2d2c5718da6eb224  gcc/testsuite/gnat.dg/containers1.ads
+ 3d8a01e9894d55629e538115ee32a45a  gcc/testsuite/gnat.dg/containers2.adb
  d744b38f3e64d5075ae1905562e6cfbb  gcc/testsuite/gnat.dg/contract1.adb
  f056e95f23cf6779db9f285ee4c0e92d  gcc/testsuite/gnat.dg/controlled1.ads
  6a6a12fa2702d86160acfed5f24c69a2  gcc/testsuite/gnat.dg/controlled2.adb
*************** e0b96329061e1701a1b3caf9f8f61553  gcc/te
*** 80647,80653 ****
  f7f0e097ef2b08042951719eb78231a0  gcc/testsuite/gnat.dg/debug1.ads
  bbbfd9f14b08a711a62fcfd5d9102acc  gcc/testsuite/gnat.dg/debug10.adb
  9581911974689dc418d8ea3c85fd8603  gcc/testsuite/gnat.dg/debug10_pkg.ads
! e39052896f853c33f892f3afd5c72859  gcc/testsuite/gnat.dg/debug11.adb
  b1f9b8597d7059fd58cbcc5c1174a13a  gcc/testsuite/gnat.dg/debug11_pkg.adb
  b524d049b26e6932280aebc3c3c189b1  gcc/testsuite/gnat.dg/debug11_pkg.ads
  eb1fa836a2d4ac00db3800fd50dfcad2  gcc/testsuite/gnat.dg/debug11_pkg2.ads
--- 86078,86084 ----
  f7f0e097ef2b08042951719eb78231a0  gcc/testsuite/gnat.dg/debug1.ads
  bbbfd9f14b08a711a62fcfd5d9102acc  gcc/testsuite/gnat.dg/debug10.adb
  9581911974689dc418d8ea3c85fd8603  gcc/testsuite/gnat.dg/debug10_pkg.ads
! 92b82253db6eb195dee67a07835fce89  gcc/testsuite/gnat.dg/debug11.adb
  b1f9b8597d7059fd58cbcc5c1174a13a  gcc/testsuite/gnat.dg/debug11_pkg.adb
  b524d049b26e6932280aebc3c3c189b1  gcc/testsuite/gnat.dg/debug11_pkg.ads
  eb1fa836a2d4ac00db3800fd50dfcad2  gcc/testsuite/gnat.dg/debug11_pkg2.ads
*************** bdbed4522cd1ea6afd66ca02217b3bc8  gcc/te
*** 80656,80662 ****
  f5445d4481e7be7a6aa89b05d4ba765e  gcc/testsuite/gnat.dg/debug13.adb
  bb7c02e58e40d63edfc3b849db48ec73  gcc/testsuite/gnat.dg/debug13.ads
  1732a264df55c5557e5416ff3d8ddb5b  gcc/testsuite/gnat.dg/debug14.adb
! e1ca248827437f98f76bd1ce1db43628  gcc/testsuite/gnat.dg/debug16.adb
  8c481e5a0e1ba1c11baee252a8f52edc  gcc/testsuite/gnat.dg/debug2.adb
  d5b17f0a1969c63659288225fe45fac0  gcc/testsuite/gnat.dg/debug2.ads
  fdb068baf7b1989ef7f7e9285dfd7ad6  gcc/testsuite/gnat.dg/debug2_pkg.ads
--- 86087,86095 ----
  f5445d4481e7be7a6aa89b05d4ba765e  gcc/testsuite/gnat.dg/debug13.adb
  bb7c02e58e40d63edfc3b849db48ec73  gcc/testsuite/gnat.dg/debug13.ads
  1732a264df55c5557e5416ff3d8ddb5b  gcc/testsuite/gnat.dg/debug14.adb
! e919dcc8feadf307ee9a51cd3dca0e62  gcc/testsuite/gnat.dg/debug16.adb
! 949d95eb7dc818ae3bc58ceee9d0a044  gcc/testsuite/gnat.dg/debug17.adb
! 9f6b560d94f6d355091f2c4599089b9c  gcc/testsuite/gnat.dg/debug18.adb
  8c481e5a0e1ba1c11baee252a8f52edc  gcc/testsuite/gnat.dg/debug2.adb
  d5b17f0a1969c63659288225fe45fac0  gcc/testsuite/gnat.dg/debug2.ads
  fdb068baf7b1989ef7f7e9285dfd7ad6  gcc/testsuite/gnat.dg/debug2_pkg.ads
*************** c1bc8b0ecc894424728b5b4911bf1cc6  gcc/te
*** 80670,80676 ****
  d4437a017f549cff71da36c10a005fb6  gcc/testsuite/gnat.dg/debug6_pkg.ads
  3de2a8e9791d79bd1522a44033bf9695  gcc/testsuite/gnat.dg/debug7.adb
  11e8a77e3f82205694f75161de14e347  gcc/testsuite/gnat.dg/debug7.ads
! 09f541c74ade4c594ef8526421d6239c  gcc/testsuite/gnat.dg/debug8.adb
  c4817633ff79ccb713b8638d01594f81  gcc/testsuite/gnat.dg/debug9.adb
  11735efa0b9cef4f67d8e3f4899d5dcb  gcc/testsuite/gnat.dg/decl_ctx_def.ads
  1e3eab2cf62e279c000f95051138781d  gcc/testsuite/gnat.dg/decl_ctx_use.adb
--- 86103,86109 ----
  d4437a017f549cff71da36c10a005fb6  gcc/testsuite/gnat.dg/debug6_pkg.ads
  3de2a8e9791d79bd1522a44033bf9695  gcc/testsuite/gnat.dg/debug7.adb
  11e8a77e3f82205694f75161de14e347  gcc/testsuite/gnat.dg/debug7.ads
! e4a8989a47ddc94eff89681e62f7bed9  gcc/testsuite/gnat.dg/debug8.adb
  c4817633ff79ccb713b8638d01594f81  gcc/testsuite/gnat.dg/debug9.adb
  11735efa0b9cef4f67d8e3f4899d5dcb  gcc/testsuite/gnat.dg/decl_ctx_def.ads
  1e3eab2cf62e279c000f95051138781d  gcc/testsuite/gnat.dg/decl_ctx_use.adb
*************** dc7b3ebaa7caa13b60d6eb8a552ad48d  gcc/te
*** 80711,80717 ****
  e0b9cf9f7a4c88212b3b340e33e89929  gcc/testsuite/gnat.dg/derived_type7.ads
  f5b545465e83981c80e3d7c01214b904  gcc/testsuite/gnat.dg/dflt_init_cond.adb
  2fbb62544d92c6af0d0b351a83112cd0  gcc/testsuite/gnat.dg/dflt_init_cond_pkg.ads
! e6edab46f21ddc83ce061780c642290b  gcc/testsuite/gnat.dg/dg.exp
  ca2670a9b24cc9d0cf8852e656a65373  gcc/testsuite/gnat.dg/dimensions.adb
  f28a5b105f7585427df0167f61bf7240  gcc/testsuite/gnat.dg/dimensions.ads
  40bad3acc354f2f19a9bb73c10fd1db8  gcc/testsuite/gnat.dg/dimensions2.adb
--- 86144,86150 ----
  e0b9cf9f7a4c88212b3b340e33e89929  gcc/testsuite/gnat.dg/derived_type7.ads
  f5b545465e83981c80e3d7c01214b904  gcc/testsuite/gnat.dg/dflt_init_cond.adb
  2fbb62544d92c6af0d0b351a83112cd0  gcc/testsuite/gnat.dg/dflt_init_cond_pkg.ads
! 63dcae8ea289378b7c072c45dfa22358  gcc/testsuite/gnat.dg/dg.exp
  ca2670a9b24cc9d0cf8852e656a65373  gcc/testsuite/gnat.dg/dimensions.adb
  f28a5b105f7585427df0167f61bf7240  gcc/testsuite/gnat.dg/dimensions.ads
  40bad3acc354f2f19a9bb73c10fd1db8  gcc/testsuite/gnat.dg/dimensions2.adb
*************** be12d3fb109247c1aaf6b19f5a65234e  gcc/te
*** 80843,80848 ****
--- 86276,86282 ----
  27e284ecfab36dff4aeb5b0e7a760992  gcc/testsuite/gnat.dg/disp2_pkg.adb
  aade8ed441d181cc943e854b4195d970  gcc/testsuite/gnat.dg/disp2_pkg.ads
  3ff72ebe3cf496e89941efc9df26c8cf  gcc/testsuite/gnat.dg/div_no_warning.adb
+ 051f7843091e24744b2ebdab76501566  gcc/testsuite/gnat.dg/div_zero.adb
  d65bcf76d480f439aab679b09d9c0371  gcc/testsuite/gnat.dg/dse_step.adb
  ad16edae9320a0014102921e32b92dab  gcc/testsuite/gnat.dg/dse_step.ads
  e00340d4362590ca4a58680aac404702  gcc/testsuite/gnat.dg/dynamic_bound.adb
*************** cef4cbf18f95208dd8c0b2e5062761c5  gcc/te
*** 80990,80996 ****
  d0689d7d2df99b8a9bdfa7461addbca6  gcc/testsuite/gnat.dg/g_tables.adb
  42a1a84a561d8513a3ddb03c1873df86  gcc/testsuite/gnat.dg/g_tables.ads
  e0d843a3b7f190ee400816b919cc276e  gcc/testsuite/gnat.dg/gcov/check.adb
! 8698c162af607b5e54c7625bd73cf985  gcc/testsuite/gnat.dg/gcov/gcov.exp
  98054bebce7ebc5df6d4a6a4178bf29c  gcc/testsuite/gnat.dg/gen_disp.adb
  8ce8ee3ebe319b0b6252b4307844d6c5  gcc/testsuite/gnat.dg/gen_disp.ads
  914ecd342404a7e78b567e0eeef3fbc8  gcc/testsuite/gnat.dg/gen_formal_pkg.adb
--- 86424,86430 ----
  d0689d7d2df99b8a9bdfa7461addbca6  gcc/testsuite/gnat.dg/g_tables.adb
  42a1a84a561d8513a3ddb03c1873df86  gcc/testsuite/gnat.dg/g_tables.ads
  e0d843a3b7f190ee400816b919cc276e  gcc/testsuite/gnat.dg/gcov/check.adb
! 3f43dbf3a77187b8a571862b49318200  gcc/testsuite/gnat.dg/gcov/gcov.exp
  98054bebce7ebc5df6d4a6a4178bf29c  gcc/testsuite/gnat.dg/gen_disp.adb
  8ce8ee3ebe319b0b6252b4307844d6c5  gcc/testsuite/gnat.dg/gen_disp.ads
  914ecd342404a7e78b567e0eeef3fbc8  gcc/testsuite/gnat.dg/gen_formal_pkg.adb
*************** c21d3201ad30618a95fd30e1fa0ea1af  gcc/te
*** 81270,81276 ****
  3f7dd91490b4c8158df07a35d7e818b1  gcc/testsuite/gnat.dg/limited3.adb
  d38fb86038eb1869672a075fcbcba8e1  gcc/testsuite/gnat.dg/limited3_pkg.adb
  a7ce433ab1be811129bd50af7b83cfb8  gcc/testsuite/gnat.dg/limited3_pkg.ads
! ea35bb1dace41c39859e5a04a3b17a50  gcc/testsuite/gnat.dg/limited4.adb
  6c213f35a6a0c5e1a2fabaa7acf32090  gcc/testsuite/gnat.dg/limited5.adb
  5e63015b0d3fffe77cb2a7ea20d72c17  gcc/testsuite/gnat.dg/limited_aggr.adb
  2e37f39c0f2a9b4779518414e2ca3618  gcc/testsuite/gnat.dg/limited_aggr.ads
--- 86704,86710 ----
  3f7dd91490b4c8158df07a35d7e818b1  gcc/testsuite/gnat.dg/limited3.adb
  d38fb86038eb1869672a075fcbcba8e1  gcc/testsuite/gnat.dg/limited3_pkg.adb
  a7ce433ab1be811129bd50af7b83cfb8  gcc/testsuite/gnat.dg/limited3_pkg.ads
! c5d7cc0fc602c3e19fa739fc934f9b5b  gcc/testsuite/gnat.dg/limited4.adb
  6c213f35a6a0c5e1a2fabaa7acf32090  gcc/testsuite/gnat.dg/limited5.adb
  5e63015b0d3fffe77cb2a7ea20d72c17  gcc/testsuite/gnat.dg/limited_aggr.adb
  2e37f39c0f2a9b4779518414e2ca3618  gcc/testsuite/gnat.dg/limited_aggr.ads
*************** eb14edc52ba7ab1584d13c38fb136ed8  gcc/te
*** 81400,81406 ****
  a9a575a51f3128c375a887f3cc2e3d17  gcc/testsuite/gnat.dg/lto20.adb
  66c1d94274e100871904c388583bfd29  gcc/testsuite/gnat.dg/lto20_pkg.adb
  39f0b1624959fa20b3c9e82bf29d50c0  gcc/testsuite/gnat.dg/lto20_pkg.ads
! e94a52734714dab69cf88da8861564f9  gcc/testsuite/gnat.dg/lto21.adb
  68bc8e3f54cb7d5e558c065ffe0a5f21  gcc/testsuite/gnat.dg/lto21_pkg1.ads
  d9ed5d8d94cefc81f6e8f1e096e44c85  gcc/testsuite/gnat.dg/lto21_pkg2.adb
  8f86927734b7d79c5fbbfec944551567  gcc/testsuite/gnat.dg/lto21_pkg2.ads
--- 86834,86840 ----
  a9a575a51f3128c375a887f3cc2e3d17  gcc/testsuite/gnat.dg/lto20.adb
  66c1d94274e100871904c388583bfd29  gcc/testsuite/gnat.dg/lto20_pkg.adb
  39f0b1624959fa20b3c9e82bf29d50c0  gcc/testsuite/gnat.dg/lto20_pkg.ads
! fc8c5fa5d1ca37f6878c98c07f20e00d  gcc/testsuite/gnat.dg/lto21.adb
  68bc8e3f54cb7d5e558c065ffe0a5f21  gcc/testsuite/gnat.dg/lto21_pkg1.ads
  d9ed5d8d94cefc81f6e8f1e096e44c85  gcc/testsuite/gnat.dg/lto21_pkg2.adb
  8f86927734b7d79c5fbbfec944551567  gcc/testsuite/gnat.dg/lto21_pkg2.ads
*************** be0183a31250d1a9cd930fe7ea1857b6  gcc/te
*** 81721,81729 ****
--- 87155,87170 ----
  2772233d10666bc3de7ad2c90d19b518  gcc/testsuite/gnat.dg/opt91_pkg.adb
  e610e24aa950be5f6c35dbb10447cb02  gcc/testsuite/gnat.dg/opt91_pkg.ads
  55332ccdfe2a512b2d23726156ad7fa9  gcc/testsuite/gnat.dg/opt92.adb
+ 38985ad284a58ba312344a277e56de9e  gcc/testsuite/gnat.dg/opt93.adb
+ be77c58e7578bdd9cd45b43a79d577fc  gcc/testsuite/gnat.dg/opt93.ads
+ 4438fbf735de607aee3428a5fa6f0588  gcc/testsuite/gnat.dg/opt94.adb
+ 95de79f2553bae97553fc8c0d02bfa4b  gcc/testsuite/gnat.dg/opt94_pkg.adb
+ f66f300a256c3908bfd5edd948e8f921  gcc/testsuite/gnat.dg/opt94_pkg.ads
+ c9af92a7eb311855626e9f38e1d2df6f  gcc/testsuite/gnat.dg/opt95.adb
  cebcd76e2479c79677bbc78316b57186  gcc/testsuite/gnat.dg/opt96.adb
  be4ae336c50882da5846142a7791cd3a  gcc/testsuite/gnat.dg/opt96_pkg.adb
  15c1a01fd2ed3d1a51b5d70bb800b81b  gcc/testsuite/gnat.dg/opt96_pkg.ads
+ 54d43e9be4aa549ec90480fc17f7a14e  gcc/testsuite/gnat.dg/opt97.adb
  feb376d91f5514b647b1ad61b025d828  gcc/testsuite/gnat.dg/opt9_pkg.ads
  0a9bf4dbd445ef99721501592f66cea2  gcc/testsuite/gnat.dg/others1.adb
  9f62042ad37161c5182cb92d70d0b24d  gcc/testsuite/gnat.dg/out_param.adb
*************** bc355828b1cdd85584d723d302e0dd02  gcc/te
*** 82082,82088 ****
  beaf6f5b2469866c75e235d2ce97dfe1  gcc/testsuite/gnat.dg/specs/corr_discr.ads
  e63c264218dd1c2dc831e7d0283b1f18  gcc/testsuite/gnat.dg/specs/cpp1.ads
  4f542145776f195cdf433f034952c0c4  gcc/testsuite/gnat.dg/specs/cpp_assignment.ads
! 78c8a33089fb1cd6db8dc8bdd77261b7  gcc/testsuite/gnat.dg/specs/debug1.ads
  94bcb9682bc5eeab5b3cc1deadc2abfe  gcc/testsuite/gnat.dg/specs/delta_small.ads
  2cf676811e56faed58034aafdeb341b3  gcc/testsuite/gnat.dg/specs/discr1.ads
  77c452564ee2e144d1a6d67bba2ab58d  gcc/testsuite/gnat.dg/specs/discr1_pkg.ads
--- 87523,87529 ----
  beaf6f5b2469866c75e235d2ce97dfe1  gcc/testsuite/gnat.dg/specs/corr_discr.ads
  e63c264218dd1c2dc831e7d0283b1f18  gcc/testsuite/gnat.dg/specs/cpp1.ads
  4f542145776f195cdf433f034952c0c4  gcc/testsuite/gnat.dg/specs/cpp_assignment.ads
! 5fb602bf45ccd969b56776971aeee02c  gcc/testsuite/gnat.dg/specs/debug1.ads
  94bcb9682bc5eeab5b3cc1deadc2abfe  gcc/testsuite/gnat.dg/specs/delta_small.ads
  2cf676811e56faed58034aafdeb341b3  gcc/testsuite/gnat.dg/specs/discr1.ads
  77c452564ee2e144d1a6d67bba2ab58d  gcc/testsuite/gnat.dg/specs/discr1_pkg.ads
*************** dd11fa8c12b9ae6c22d0229f9abfe2d2  gcc/te
*** 82204,82210 ****
  03db4e24fa57d6ec6411373454c770fe  gcc/testsuite/gnat.dg/specs/size_clause4.ads
  4af0c027bf11e98fb8317a33690de3b7  gcc/testsuite/gnat.dg/specs/size_clause5.ads
  f381006ab319a77a628dc42fb91642d1  gcc/testsuite/gnat.dg/specs/small_alignment.ads
! e9b1ac82f49d1451be266b3c11e03667  gcc/testsuite/gnat.dg/specs/specs.exp
  10d9cb2f95c3b869e5b5ba8979e4226d  gcc/testsuite/gnat.dg/specs/sso1.ads
  ee68f5075e2ac910d2768455326b877d  gcc/testsuite/gnat.dg/specs/sso2.ads
  a7458b24c06bfe4873fec60e537ee095  gcc/testsuite/gnat.dg/specs/static_initializer.ads
--- 87645,87651 ----
  03db4e24fa57d6ec6411373454c770fe  gcc/testsuite/gnat.dg/specs/size_clause4.ads
  4af0c027bf11e98fb8317a33690de3b7  gcc/testsuite/gnat.dg/specs/size_clause5.ads
  f381006ab319a77a628dc42fb91642d1  gcc/testsuite/gnat.dg/specs/small_alignment.ads
! 60a23a5c3234461fad37a66533711f9f  gcc/testsuite/gnat.dg/specs/specs.exp
  10d9cb2f95c3b869e5b5ba8979e4226d  gcc/testsuite/gnat.dg/specs/sso1.ads
  ee68f5075e2ac910d2768455326b877d  gcc/testsuite/gnat.dg/specs/sso2.ads
  a7458b24c06bfe4873fec60e537ee095  gcc/testsuite/gnat.dg/specs/static_initializer.ads
*************** ee874e3a5ed130d124c36bc00620ecf7  gcc/te
*** 82299,82305 ****
  f98695363c137c382d6de62ada73bc3c  gcc/testsuite/gnat.dg/sso/s6.adb
  932dcf06c9a657de839f1236ad1ce3a7  gcc/testsuite/gnat.dg/sso/s7.adb
  f876cc05ea75ed91c3f5cfb97ed0a9ae  gcc/testsuite/gnat.dg/sso/s8.adb
! 06261d7d2f92cb94a751e0f9bdbb18d0  gcc/testsuite/gnat.dg/sso/sso.exp
  4b8f6f3bf1259d1c79c730c0c243f725  gcc/testsuite/gnat.dg/sso/t1.adb
  d4a304e697934a32984599c6d5941f55  gcc/testsuite/gnat.dg/sso/t10.adb
  3cab6b52089b5bd99bb853fbdab1352c  gcc/testsuite/gnat.dg/sso/t11.adb
--- 87740,87746 ----
  f98695363c137c382d6de62ada73bc3c  gcc/testsuite/gnat.dg/sso/s6.adb
  932dcf06c9a657de839f1236ad1ce3a7  gcc/testsuite/gnat.dg/sso/s7.adb
  f876cc05ea75ed91c3f5cfb97ed0a9ae  gcc/testsuite/gnat.dg/sso/s8.adb
! 9ddfa934095b65ffea844f78866192f7  gcc/testsuite/gnat.dg/sso/sso.exp
  4b8f6f3bf1259d1c79c730c0c243f725  gcc/testsuite/gnat.dg/sso/t1.adb
  d4a304e697934a32984599c6d5941f55  gcc/testsuite/gnat.dg/sso/t10.adb
  3cab6b52089b5bd99bb853fbdab1352c  gcc/testsuite/gnat.dg/sso/t11.adb
*************** be51b72e76043adb990a3e95f4c40554  gcc/te
*** 82537,82543 ****
  eb307affba2801df64df853c5bef48a7  gcc/testsuite/gnat.dg/uninit_func.adb
  e75228bb639049d22943d0199ceed3a8  gcc/testsuite/gnat.dg/unreferenced.adb
  c0e15a89a8c5c39be376ba8dac916a62  gcc/testsuite/gnat.dg/unreferenced2.adb
! 9de43a0d5e23bff9b082896cf2ad5f0c  gcc/testsuite/gnat.dg/unroll1.adb
  289b6830cb051c5fb4345c439b2a8bfc  gcc/testsuite/gnat.dg/unroll1.ads
  4e71d6e7a5493f0bff28c6451946c378  gcc/testsuite/gnat.dg/unroll2.adb
  8e7308f7a249ff8075a6767a45dab8a0  gcc/testsuite/gnat.dg/unroll2.ads
--- 87978,87984 ----
  eb307affba2801df64df853c5bef48a7  gcc/testsuite/gnat.dg/uninit_func.adb
  e75228bb639049d22943d0199ceed3a8  gcc/testsuite/gnat.dg/unreferenced.adb
  c0e15a89a8c5c39be376ba8dac916a62  gcc/testsuite/gnat.dg/unreferenced2.adb
! abe309028800f1aac5813a883d60432d  gcc/testsuite/gnat.dg/unroll1.adb
  289b6830cb051c5fb4345c439b2a8bfc  gcc/testsuite/gnat.dg/unroll1.ads
  4e71d6e7a5493f0bff28c6451946c378  gcc/testsuite/gnat.dg/unroll2.adb
  8e7308f7a249ff8075a6767a45dab8a0  gcc/testsuite/gnat.dg/unroll2.ads
*************** dd1a1376bad078a4b0eda0ead4a2ea6a  gcc/te
*** 82697,82706 ****
  77aaeb8d16afbdd42fa33c22011ad66f  gcc/testsuite/gnat.dg/wide_pi.adb
  067dba883e26668ff9d0a937d7332052  gcc/testsuite/gnat.dg/wide_test.adb
  2eaf83730e5346f6d0d38fb74416b41b  gcc/testsuite/gnat.dg/wide_wide_value1.adb
  00f78e8b316dd9541a723b06890c4406  gcc/testsuite/go.dg/arrayclear.go
  ac8af654d131c62dc2127d399247a353  gcc/testsuite/go.dg/cmpstring.go
  47e6563411ed24d0afefc1878c094034  gcc/testsuite/go.dg/concatstring.go
! 5843196c5dc998eec63587aa3e1cc7e7  gcc/testsuite/go.dg/dg.exp
  df3ff5f9e0759960e0959e71a0d0583f  gcc/testsuite/go.dg/err-1.go
  ec0e3914d3f5df5bec3a4fd8dcf1c0af  gcc/testsuite/go.dg/goto-1.go
  f0f18b0d11f15d53150f63d507b4fe27  gcc/testsuite/go.dg/mapclear.go
--- 88138,88149 ----
  77aaeb8d16afbdd42fa33c22011ad66f  gcc/testsuite/gnat.dg/wide_pi.adb
  067dba883e26668ff9d0a937d7332052  gcc/testsuite/gnat.dg/wide_test.adb
  2eaf83730e5346f6d0d38fb74416b41b  gcc/testsuite/gnat.dg/wide_wide_value1.adb
+ 846353652aa29f95fbd9a8a70139ecd1  gcc/testsuite/gnat.dg/zcur_attr.adb
+ 68af7987a65fc6b7a4018d6304304d19  gcc/testsuite/gnat.dg/zcur_attr.ads
  00f78e8b316dd9541a723b06890c4406  gcc/testsuite/go.dg/arrayclear.go
  ac8af654d131c62dc2127d399247a353  gcc/testsuite/go.dg/cmpstring.go
  47e6563411ed24d0afefc1878c094034  gcc/testsuite/go.dg/concatstring.go
! be4d1822c5d72bf0fa32609ccecb8c31  gcc/testsuite/go.dg/dg.exp
  df3ff5f9e0759960e0959e71a0d0583f  gcc/testsuite/go.dg/err-1.go
  ec0e3914d3f5df5bec3a4fd8dcf1c0af  gcc/testsuite/go.dg/goto-1.go
  f0f18b0d11f15d53150f63d507b4fe27  gcc/testsuite/go.dg/mapclear.go
*************** a06ac97125a90b106e6e0dfd7a0cd8cb  gcc/te
*** 82711,82717 ****
  17039a57c84f9e6feac3ac4966736a0a  gcc/testsuite/go.go-torture/execute/chan-1.go
  94342e6c8cd3f59c55238778fb232b4a  gcc/testsuite/go.go-torture/execute/const-1.go
  dac6eeae922725468eebc84b9a7d4875  gcc/testsuite/go.go-torture/execute/const-2.go
! d4bed9176331209088128c09acbf8514  gcc/testsuite/go.go-torture/execute/execute.exp
  4a320c5186c74f3c69e7f51ba7a7ab90  gcc/testsuite/go.go-torture/execute/expr-1.go
  1a159bafbc3293455e900de2c4243d3c  gcc/testsuite/go.go-torture/execute/for-1.go
  c7464eac2b485f2580aee2f19f76477f  gcc/testsuite/go.go-torture/execute/for-2.go
--- 88154,88160 ----
  17039a57c84f9e6feac3ac4966736a0a  gcc/testsuite/go.go-torture/execute/chan-1.go
  94342e6c8cd3f59c55238778fb232b4a  gcc/testsuite/go.go-torture/execute/const-1.go
  dac6eeae922725468eebc84b9a7d4875  gcc/testsuite/go.go-torture/execute/const-2.go
! 60c10574ae8eb05cf30d260a4e99553e  gcc/testsuite/go.go-torture/execute/execute.exp
  4a320c5186c74f3c69e7f51ba7a7ab90  gcc/testsuite/go.go-torture/execute/expr-1.go
  1a159bafbc3293455e900de2c4243d3c  gcc/testsuite/go.go-torture/execute/for-1.go
  c7464eac2b485f2580aee2f19f76477f  gcc/testsuite/go.go-torture/execute/for-2.go
*************** f37d4791cfa22e9a20848922ea5de498  gcc/te
*** 82739,82745 ****
  b760f8c4f0593565426879b84ab6787b  gcc/testsuite/go.go-torture/execute/var-1.go
  55c3fdb5eab9130c79b8548c994aa8d9  gcc/testsuite/go.go-torture/execute/var-2.go
  ac0017eb534302ec5987291f615d13ca  gcc/testsuite/go.go-torture/execute/var-3.go
! b38dc095b27a780b6a20dabe3e445800  gcc/testsuite/go.test/go-test.exp
  88c59e0bc9f2a79ed3a3e8f1409ed1d8  gcc/testsuite/go.test/test/235.go
  1a94dd86d2262280f883261800a13104  gcc/testsuite/go.test/test/64bit.go
  43e15a8d565d16ab908b7cf6db8e0bf9  gcc/testsuite/go.test/test/README.gcc
--- 88182,88188 ----
  b760f8c4f0593565426879b84ab6787b  gcc/testsuite/go.go-torture/execute/var-1.go
  55c3fdb5eab9130c79b8548c994aa8d9  gcc/testsuite/go.go-torture/execute/var-2.go
  ac0017eb534302ec5987291f615d13ca  gcc/testsuite/go.go-torture/execute/var-3.go
! 8e325cb4fccf8d995226faec20c55fe7  gcc/testsuite/go.test/go-test.exp
  88c59e0bc9f2a79ed3a3e8f1409ed1d8  gcc/testsuite/go.test/test/235.go
  1a94dd86d2262280f883261800a13104  gcc/testsuite/go.test/test/64bit.go
  43e15a8d565d16ab908b7cf6db8e0bf9  gcc/testsuite/go.test/test/README.gcc
*************** d32cf9690b635dafcc34a517f3db7891  gcc/te
*** 82827,82832 ****
--- 88270,88276 ----
  051f338c64bd9089313f0bb424227c5c  gcc/testsuite/go.test/test/convert.go
  f423f2749a564379c6da9a2798ccf19f  gcc/testsuite/go.test/test/convert1.go
  db516f64034a05169ee8e879eadf58d3  gcc/testsuite/go.test/test/convert3.go
+ d414de8f1d8136ec0fcdee54b8d41d3d  gcc/testsuite/go.test/test/convert4.go
  5a38a961db40296248b35c9bd501de1c  gcc/testsuite/go.test/test/convlit.go
  5cdede09b72d692731054c77da252b4c  gcc/testsuite/go.test/test/convlit1.go
  f1a707ef65cc6f03c199d8f88cde4503  gcc/testsuite/go.test/test/copy.go
*************** df0f8819bb586af872145f99944dd29e  gcc/te
*** 83489,83495 ****
  bc08329bc3acced769c47dec84d6a479  gcc/testsuite/go.test/test/fixedbugs/issue10332.go
  77c425e431c8c50c24c92a307678ead6  gcc/testsuite/go.test/test/fixedbugs/issue10353.go
  bcfda648e772c0cfbaf98e70b46a8a47  gcc/testsuite/go.test/test/fixedbugs/issue10407.go
! faa60be749c83dacd9413ac4454153c5  gcc/testsuite/go.test/test/fixedbugs/issue10441.go
  ec209f2a7326cc512773176eee9a5a22  gcc/testsuite/go.test/test/fixedbugs/issue10486.go
  4f1132ea86fb1593bee1bc13fcaa4a97  gcc/testsuite/go.test/test/fixedbugs/issue10607.go
  96cfb6e503d97fc96c8eaad4353100dc  gcc/testsuite/go.test/test/fixedbugs/issue10607a.go
--- 88933,88939 ----
  bc08329bc3acced769c47dec84d6a479  gcc/testsuite/go.test/test/fixedbugs/issue10332.go
  77c425e431c8c50c24c92a307678ead6  gcc/testsuite/go.test/test/fixedbugs/issue10353.go
  bcfda648e772c0cfbaf98e70b46a8a47  gcc/testsuite/go.test/test/fixedbugs/issue10407.go
! d24b4f77da515b5f227e0dbc25fae0b5  gcc/testsuite/go.test/test/fixedbugs/issue10441.go
  ec209f2a7326cc512773176eee9a5a22  gcc/testsuite/go.test/test/fixedbugs/issue10486.go
  4f1132ea86fb1593bee1bc13fcaa4a97  gcc/testsuite/go.test/test/fixedbugs/issue10607.go
  96cfb6e503d97fc96c8eaad4353100dc  gcc/testsuite/go.test/test/fixedbugs/issue10607a.go
*************** fbdb02182a9f5dc75eb2229488bf25b8  gcc/te
*** 83583,83589 ****
  370aa8ff328f834c7ee7c61ae661aef7  gcc/testsuite/go.test/test/fixedbugs/issue14636.go
  41022b5ed2e7d5a48c0b949fefe2506a  gcc/testsuite/go.test/test/fixedbugs/issue14646.go
  bc9cd9837f84db3e6e2345fcf99ed1b0  gcc/testsuite/go.test/test/fixedbugs/issue14651.go
! 520b6cdec7b16ff7eb6a57a65a6102cc  gcc/testsuite/go.test/test/fixedbugs/issue14652.go
  52a2c6c26496a3e0987b4fcbe57cb9de  gcc/testsuite/go.test/test/fixedbugs/issue14725.go
  61be9b0bb76ddfc999d55d0e27d77e99  gcc/testsuite/go.test/test/fixedbugs/issue14729.go
  dc621f8f3777c4267bdb09f565877a26  gcc/testsuite/go.test/test/fixedbugs/issue14988.go
--- 89027,89033 ----
  370aa8ff328f834c7ee7c61ae661aef7  gcc/testsuite/go.test/test/fixedbugs/issue14636.go
  41022b5ed2e7d5a48c0b949fefe2506a  gcc/testsuite/go.test/test/fixedbugs/issue14646.go
  bc9cd9837f84db3e6e2345fcf99ed1b0  gcc/testsuite/go.test/test/fixedbugs/issue14651.go
! ec3f4653b7115bb99539a85d95030e40  gcc/testsuite/go.test/test/fixedbugs/issue14652.go
  52a2c6c26496a3e0987b4fcbe57cb9de  gcc/testsuite/go.test/test/fixedbugs/issue14725.go
  61be9b0bb76ddfc999d55d0e27d77e99  gcc/testsuite/go.test/test/fixedbugs/issue14729.go
  dc621f8f3777c4267bdb09f565877a26  gcc/testsuite/go.test/test/fixedbugs/issue14988.go
*************** a6328cc1d38a0d000f73c5403c5adc45  gcc/te
*** 84677,84691 ****
  d35e0d8b54812907317bd04cd459c908  gcc/testsuite/go.test/test/typeswitch2.go
  6c0bf7e89e38087813cca4161e12ef64  gcc/testsuite/go.test/test/typeswitch3.go
  2fb51af8028d860968dfd801190625d9  gcc/testsuite/go.test/test/undef.go
  2a8c4033327e84694018b3e767bce13b  gcc/testsuite/go.test/test/utf.go
  d19a0449bac1fb497429a88904f3d658  gcc/testsuite/go.test/test/varerr.go
  50c0f03762d429c13fd0302c79d90157  gcc/testsuite/go.test/test/varinit.go
  6447a99ae1e2eec266af1ceab6a7343c  gcc/testsuite/go.test/test/zerodivide.go
  340e08c9aef97a2da8f4cd4568d52675  gcc/testsuite/jit.dg/add-driver-options-testlib.c
! 810148d8e844d972db49a965da29d8b4  gcc/testsuite/jit.dg/all-non-failing-tests.h
  7bc42e89ae77872c8fc581b4babf1832  gcc/testsuite/jit.dg/create-code-for-hello-world-executable.h
! 950bf03903ed927f5a64a0047d5a11bf  gcc/testsuite/jit.dg/harness.h
! b60625057b0a0016acba69c117c0016a  gcc/testsuite/jit.dg/jit.exp
  3fd6900c9d1d0edd53191542d96ffcec  gcc/testsuite/jit.dg/test-accessing-bitfield.c
  790dcf4e4a5c3dce84639ef815265f21  gcc/testsuite/jit.dg/test-accessing-struct.c
  60caef14bfb482627a962469a4524fce  gcc/testsuite/jit.dg/test-accessing-union.c
--- 90121,90136 ----
  d35e0d8b54812907317bd04cd459c908  gcc/testsuite/go.test/test/typeswitch2.go
  6c0bf7e89e38087813cca4161e12ef64  gcc/testsuite/go.test/test/typeswitch3.go
  2fb51af8028d860968dfd801190625d9  gcc/testsuite/go.test/test/undef.go
+ 2be5e135e201bfcdd2e699e5a04e0414  gcc/testsuite/go.test/test/unsafebuiltins.go
  2a8c4033327e84694018b3e767bce13b  gcc/testsuite/go.test/test/utf.go
  d19a0449bac1fb497429a88904f3d658  gcc/testsuite/go.test/test/varerr.go
  50c0f03762d429c13fd0302c79d90157  gcc/testsuite/go.test/test/varinit.go
  6447a99ae1e2eec266af1ceab6a7343c  gcc/testsuite/go.test/test/zerodivide.go
  340e08c9aef97a2da8f4cd4568d52675  gcc/testsuite/jit.dg/add-driver-options-testlib.c
! 38e97f454caf88626c8bd5c84285fb07  gcc/testsuite/jit.dg/all-non-failing-tests.h
  7bc42e89ae77872c8fc581b4babf1832  gcc/testsuite/jit.dg/create-code-for-hello-world-executable.h
! 2b9047a87199ea43ffa67df9e0b7f6f2  gcc/testsuite/jit.dg/harness.h
! c3b5a87cb24b18d5a584f92e61d9cbab  gcc/testsuite/jit.dg/jit.exp
  3fd6900c9d1d0edd53191542d96ffcec  gcc/testsuite/jit.dg/test-accessing-bitfield.c
  790dcf4e4a5c3dce84639ef815265f21  gcc/testsuite/jit.dg/test-accessing-struct.c
  60caef14bfb482627a962469a4524fce  gcc/testsuite/jit.dg/test-accessing-union.c
*************** b6b657ddbcecefb50b21259cc5711010  gcc/te
*** 84699,84708 ****
--- 90144,90156 ----
  ce4038aa80902d89e3050a7f93a7d94e  gcc/testsuite/jit.dg/test-asm.cc
  cc1b167a1d5eaf426dbf6721a80c93e7  gcc/testsuite/jit.dg/test-autovectorize.c
  3f5b0ae02ffd9c801777cd40eeb400a9  gcc/testsuite/jit.dg/test-benchmark.c
+ 3e0111bf71ea4a09db4266d20c9c2ff0  gcc/testsuite/jit.dg/test-bitcast.c
  425e82d760b4b92b760e58daad16a725  gcc/testsuite/jit.dg/test-builtin-memcpy.c
+ c1c4ffe41bbf76d4a61fec8d9b42486c  gcc/testsuite/jit.dg/test-builtin-types.c
  8431129c23f5d17704db309e4c13bc1a  gcc/testsuite/jit.dg/test-builtin-unreachable.c
  af0a18ef8912906bb36ca88219c06667  gcc/testsuite/jit.dg/test-calling-external-function.c
  fcf20b943f3e9affe23adec9277064a7  gcc/testsuite/jit.dg/test-calling-function-ptr.c
+ e3bf5c17797aeaea60953345b0ec836b  gcc/testsuite/jit.dg/test-cast.c
  dc3f5924516f317d0e822022186a89d9  gcc/testsuite/jit.dg/test-combination.c
  2e035396a65d6176ba9798f667c5621a  gcc/testsuite/jit.dg/test-compile-to-assembler.c
  897c5ab27b1fd560e0e9f30525797a81  gcc/testsuite/jit.dg/test-compile-to-dynamic-library.c
*************** f34e7ef4d055ab7b719406f4af743422  gcc/te
*** 84711,84721 ****
  6c38f147d96d254624feb8015fdc5ef0  gcc/testsuite/jit.dg/test-compound-assignment.c
  da2633ae9e3039a064e79583ac2ed729  gcc/testsuite/jit.dg/test-constants.c
  fcf1117c170a5452646f6599908d4d34  gcc/testsuite/jit.dg/test-debug-strings.c
  20dd26ba5e2717d52d4e1067972e1d67  gcc/testsuite/jit.dg/test-dot-product.c
  ee645b37b25f2a3eddfb21e8be20336d  gcc/testsuite/jit.dg/test-empty.c
  7e92c7a2ed10887fff56fcf4d7ef3c64  gcc/testsuite/jit.dg/test-error-adding-to-terminated-block.c
  6eef66aeae471d259e994ed25ea486f5  gcc/testsuite/jit.dg/test-error-array-as-pointer.c
! 60dfde67c0d0c5f88ff8d81d94b4b22d  gcc/testsuite/jit.dg/test-error-array-bounds.c
  667a8f1d72273ce306bbb8b76f2ab2d2  gcc/testsuite/jit.dg/test-error-bad-cast.c
  5de6c111bd3ae983370113c7ae2dbbee  gcc/testsuite/jit.dg/test-error-block-in-wrong-function.c
  4ee80d56c3318e647c19bcd09cb20d00  gcc/testsuite/jit.dg/test-error-call-through-ptr-with-mismatching-args.c
--- 90159,90173 ----
  6c38f147d96d254624feb8015fdc5ef0  gcc/testsuite/jit.dg/test-compound-assignment.c
  da2633ae9e3039a064e79583ac2ed729  gcc/testsuite/jit.dg/test-constants.c
  fcf1117c170a5452646f6599908d4d34  gcc/testsuite/jit.dg/test-debug-strings.c
+ cb8f0e0a8bd20f09f54d4fc96e7a13f9  gcc/testsuite/jit.dg/test-debuginfo.c
  20dd26ba5e2717d52d4e1067972e1d67  gcc/testsuite/jit.dg/test-dot-product.c
  ee645b37b25f2a3eddfb21e8be20336d  gcc/testsuite/jit.dg/test-empty.c
  7e92c7a2ed10887fff56fcf4d7ef3c64  gcc/testsuite/jit.dg/test-error-adding-to-terminated-block.c
  6eef66aeae471d259e994ed25ea486f5  gcc/testsuite/jit.dg/test-error-array-as-pointer.c
! 479048b0021825ff0b37ee9d3990c216  gcc/testsuite/jit.dg/test-error-array-bounds.c
! d3cb545cb98c0633bfc443fcdebf1e86  gcc/testsuite/jit.dg/test-error-bad-assignment.c
! bc40f3b4e9fbd3cf736225c60f97b330  gcc/testsuite/jit.dg/test-error-bad-bitcast.c
! e06264f7598f9aad46edf170a0db2f4c  gcc/testsuite/jit.dg/test-error-bad-bitcast2.c
  667a8f1d72273ce306bbb8b76f2ab2d2  gcc/testsuite/jit.dg/test-error-bad-cast.c
  5de6c111bd3ae983370113c7ae2dbbee  gcc/testsuite/jit.dg/test-error-block-in-wrong-function.c
  4ee80d56c3318e647c19bcd09cb20d00  gcc/testsuite/jit.dg/test-error-call-through-ptr-with-mismatching-args.c
*************** ef1c34b59cdd71aea82365ddf7f509b6  gcc/te
*** 84726,84731 ****
--- 90178,90189 ----
  dcfe04bd5c54955be418e379dbb0f92f  gcc/testsuite/jit.dg/test-error-call-with-mismatching-args.c
  1a402819c27b101f7788051c14cfaf24  gcc/testsuite/jit.dg/test-error-call-with-not-enough-args.c
  722e7e3f775432b1deee8338b2f51fbc  gcc/testsuite/jit.dg/test-error-call-with-too-many-args.c
+ 3844798d48fd2fabfd2c3d60b02ae7e7  gcc/testsuite/jit.dg/test-error-ctor-array-wrong-obj.c
+ 1d7f0d9ab8adb6865551fcec43396625  gcc/testsuite/jit.dg/test-error-ctor-struct-too-big.c
+ 723ae6ae8901b1565c03b56eb2db3ea6  gcc/testsuite/jit.dg/test-error-ctor-struct-wrong-field-obj.c
+ cd30ae92c9c5ccb98a0e3ae1db046612  gcc/testsuite/jit.dg/test-error-ctor-struct-wrong-type.c
+ ed9cbbccdb6f07be8455e073c7b13dbf  gcc/testsuite/jit.dg/test-error-ctor-struct-wrong-type2.c
+ 111560f85208a54343c09f0430a34ca5  gcc/testsuite/jit.dg/test-error-ctor-union-wrong-field-name.c
  e3980a959605873a459591f8d21c7d24  gcc/testsuite/jit.dg/test-error-dereference-field-of-non-pointer.c
  6eb58dd7663a9c106e302d170d376879  gcc/testsuite/jit.dg/test-error-dereference-read-of-non-pointer.c
  bcd00aa9e006316640c3bf84704c9810  gcc/testsuite/jit.dg/test-error-dereferencing-void-ptr.c
*************** fe03880708c49230842f6063941c3a6d  gcc/te
*** 84756,84761 ****
--- 90214,90224 ----
  c22c503dc3bb157300ee4059c866d3d6  gcc/testsuite/jit.dg/test-error-gcc_jit_type_get_vector-bad-type.c
  dc27837daa9e72b19179ead218efbbbf  gcc/testsuite/jit.dg/test-error-gcc_jit_type_get_vector-non-power-of-two.c
  c598a1fe66543f17fd9c475fbbd32f15  gcc/testsuite/jit.dg/test-error-get-type-bad-enum.c
+ c30e992400ec4b86a3837aec895c3125  gcc/testsuite/jit.dg/test-error-global-already-init.c
+ 909b85de16b7c291e926a71c112efce3  gcc/testsuite/jit.dg/test-error-global-common-section.c
+ e59d4ca4b4a7162b5ac13cde3142adff  gcc/testsuite/jit.dg/test-error-global-init-too-small-array.c
+ ab7fbff2fa080ed6b5e45ec0af5b68fe  gcc/testsuite/jit.dg/test-error-global-lvalue-init.c
+ b21857c87ae190649a07a80d301aa419  gcc/testsuite/jit.dg/test-error-global-nonconst-init.c
  1c46030d316755aa57d2e4bc9ab71f72  gcc/testsuite/jit.dg/test-error-impossible-must-tail-call.c
  44f838482cec805a0b62f60dbb637074  gcc/testsuite/jit.dg/test-error-index-not-a-numeric-type.c
  458e3bddb454410827b163729a08ec20  gcc/testsuite/jit.dg/test-error-local-used-from-other-function.c
*************** c9c33e452e2adfd9c4e9baf94b297ac1  gcc/te
*** 84773,84778 ****
--- 90236,90243 ----
  82018736eb8bdc03755bf8e9c0aa7fb1  gcc/testsuite/jit.dg/test-error-param-used-from-other-function.c
  3690962ab5ea20a0bb1f832ec8e3185c  gcc/testsuite/jit.dg/test-error-param-used-without-a-function.c
  3137a0aa8e46b2a0a07efeb14f175e03  gcc/testsuite/jit.dg/test-error-pr63969-missing-driver.c
+ d54d9ac81ba5a3c223a7638ade50667e  gcc/testsuite/jit.dg/test-error-register-variable-bad-name.c
+ 54cd0e1ca917f0742690ba43edcc4c66  gcc/testsuite/jit.dg/test-error-register-variable-size-mismatch.c
  7dc6f6039918148eac178050da2616f9  gcc/testsuite/jit.dg/test-error-return-within-void-function.c
  6f36977fd7c2de6fbb1824c26f384642  gcc/testsuite/jit.dg/test-error-unreachable-block.c
  136909b4e2c9dd4206e002a48198e9da  gcc/testsuite/jit.dg/test-error-unrecognized-dump.c
*************** f8978b292e5e62e13f742d863657bb61  gcc/te
*** 84784,84793 ****
  b02011c7edbcfca8dfb3bd46815567fc  gcc/testsuite/jit.dg/test-factorial.c
  85f93e3dc56132711ed472999eddea1f  gcc/testsuite/jit.dg/test-fibonacci.c
  841c0fb8feb5dd18970c448dc2ccd811  gcc/testsuite/jit.dg/test-functions.c
! 85ea1059a175be15ef082e7a3d72fae3  gcc/testsuite/jit.dg/test-fuzzer.c
  1da38d55df3045d75370957a17d7cbc1  gcc/testsuite/jit.dg/test-global-set-initializer.c
  84606b0daf7effa1be60975ee90658d3  gcc/testsuite/jit.dg/test-hello-world.c
  282cb9f2d6f6d4287ac88a6e77bd3aa9  gcc/testsuite/jit.dg/test-linked-list.c
  98ebb9b31736f32dab268c122c5d8d2d  gcc/testsuite/jit.dg/test-long-names.c
  88a9c3f2214d7da6ca69402acd96b342  gcc/testsuite/jit.dg/test-long-string-literal.c
  c36d06171cf29aa67856b3136828352f  gcc/testsuite/jit.dg/test-nested-contexts.c
--- 90249,90261 ----
  b02011c7edbcfca8dfb3bd46815567fc  gcc/testsuite/jit.dg/test-factorial.c
  85f93e3dc56132711ed472999eddea1f  gcc/testsuite/jit.dg/test-fibonacci.c
  841c0fb8feb5dd18970c448dc2ccd811  gcc/testsuite/jit.dg/test-functions.c
! 64e1ef36746543de5884e1880c6e87dd  gcc/testsuite/jit.dg/test-fuzzer.c
! 6eaf152cbbd78ca034b5acc55db9a308  gcc/testsuite/jit.dg/test-global-init-rvalue.c
  1da38d55df3045d75370957a17d7cbc1  gcc/testsuite/jit.dg/test-global-set-initializer.c
  84606b0daf7effa1be60975ee90658d3  gcc/testsuite/jit.dg/test-hello-world.c
+ e240f78f9d25dd2fc5fe93f144d8a4ce  gcc/testsuite/jit.dg/test-link-section-assembler.c
  282cb9f2d6f6d4287ac88a6e77bd3aa9  gcc/testsuite/jit.dg/test-linked-list.c
+ 6fd5f4e5a344608608f62d434dfbad85  gcc/testsuite/jit.dg/test-local-init-rvalue.c
  98ebb9b31736f32dab268c122c5d8d2d  gcc/testsuite/jit.dg/test-long-names.c
  88a9c3f2214d7da6ca69402acd96b342  gcc/testsuite/jit.dg/test-long-string-literal.c
  c36d06171cf29aa67856b3136828352f  gcc/testsuite/jit.dg/test-nested-contexts.c
*************** e1de260f2ea5cb4cf607c76292f03edc  gcc/te
*** 84801,84814 ****
  1f18cb1e4926db574b25c58a26e71a53  gcc/testsuite/jit.dg/test-quadratic.c
  ce096ee573017f44e9c3cd0933f0d297  gcc/testsuite/jit.dg/test-quadratic.cc
  df424c268791473ace062ef873c388e2  gcc/testsuite/jit.dg/test-reading-struct.c
  2819f51a64e319d697134a1319b760b1  gcc/testsuite/jit.dg/test-returning-function-ptr.c
  c8398a3f73dd4b289b3b1e611cb3bf23  gcc/testsuite/jit.dg/test-string-literal.c
! ce76c5d2dda1a33aeced6c87054d0b41  gcc/testsuite/jit.dg/test-sum-of-squares.c
  bca3f58a8fb9ee1db76c5883c6d533f3  gcc/testsuite/jit.dg/test-switch.c
  060e97573747dc7dec3a27373a6f93aa  gcc/testsuite/jit.dg/test-switch.cc
  1dbd5675d95a6e7aa3ff419392d6dedd  gcc/testsuite/jit.dg/test-threads.c
  af7112223f23a060486e371aaa393e98  gcc/testsuite/jit.dg/test-trap.c
! 62cfd298f75d5b02e37418640347757d  gcc/testsuite/jit.dg/test-types.c
  e309c53b14c724939a1564046c6a5df2  gcc/testsuite/jit.dg/test-using-global.c
  87b9d64f8250158521cb3cae842ff2cb  gcc/testsuite/jit.dg/test-validly-unreachable-block.c
  66bd443798448a3863f71885dbc59b0f  gcc/testsuite/jit.dg/test-vector-rvalues.cc
--- 90269,90286 ----
  1f18cb1e4926db574b25c58a26e71a53  gcc/testsuite/jit.dg/test-quadratic.c
  ce096ee573017f44e9c3cd0933f0d297  gcc/testsuite/jit.dg/test-quadratic.cc
  df424c268791473ace062ef873c388e2  gcc/testsuite/jit.dg/test-reading-struct.c
+ 22ffc0e44111996fcb0ebd653190c983  gcc/testsuite/jit.dg/test-reflection.c
+ 38693c5e37ab7f738ee4f05bc4688ec0  gcc/testsuite/jit.dg/test-register-variable.c
  2819f51a64e319d697134a1319b760b1  gcc/testsuite/jit.dg/test-returning-function-ptr.c
+ 00b7c9c55c8b7e6d14d1ad75ad07e5a7  gcc/testsuite/jit.dg/test-setting-alignment.c
  c8398a3f73dd4b289b3b1e611cb3bf23  gcc/testsuite/jit.dg/test-string-literal.c
! 0ad799327d6cf83f94f71c26fc490f61  gcc/testsuite/jit.dg/test-sum-of-squares.c
  bca3f58a8fb9ee1db76c5883c6d533f3  gcc/testsuite/jit.dg/test-switch.c
  060e97573747dc7dec3a27373a6f93aa  gcc/testsuite/jit.dg/test-switch.cc
  1dbd5675d95a6e7aa3ff419392d6dedd  gcc/testsuite/jit.dg/test-threads.c
+ 23fe4e6ebca22d47798698e1a9eed222  gcc/testsuite/jit.dg/test-tls.c
  af7112223f23a060486e371aaa393e98  gcc/testsuite/jit.dg/test-trap.c
! f49f8d2400c6a598353628e3f13b5b57  gcc/testsuite/jit.dg/test-types.c
  e309c53b14c724939a1564046c6a5df2  gcc/testsuite/jit.dg/test-using-global.c
  87b9d64f8250158521cb3cae842ff2cb  gcc/testsuite/jit.dg/test-validly-unreachable-block.c
  66bd443798448a3863f71885dbc59b0f  gcc/testsuite/jit.dg/test-vector-rvalues.cc
*************** e309c53b14c724939a1564046c6a5df2  gcc/te
*** 84816,84892 ****
  5542ebc8aa1b198ad40aeeee64259afb  gcc/testsuite/jit.dg/test-version.c
  96ac85af1dde837e4f4e2444d083cf22  gcc/testsuite/jit.dg/test-volatile.c
  6477c66fcebff4d502d26e2d247251ce  gcc/testsuite/jit.dg/verify-dynamic-library.c
! cc999fc27872b581322563f70f42788f  gcc/testsuite/lib/asan-dg.exp
! 483d65b2fafe6f111f4efccfff01eddd  gcc/testsuite/lib/atomic-dg.exp
! 23f70cb48e57944a6d19e48539f62725  gcc/testsuite/lib/brig-dg.exp
! 940997b6e696d711dbf04ef0fbac07f5  gcc/testsuite/lib/brig.exp
! abdd673cc5da0c8214c734eb6ad9302f  gcc/testsuite/lib/c-compat.exp
! 147337a8e37cd07d5908f9517ceacd0c  gcc/testsuite/lib/c-torture.exp
! e18895c28270bcec3817a7bbeb3fdbf6  gcc/testsuite/lib/clearcap.exp
! 0d09631dc85902bbc64e7d4189092aea  gcc/testsuite/lib/compat.exp
! cf4a44031f74dab102437a174e225c3d  gcc/testsuite/lib/copy-file.exp
! 3304b1c74485a899a7eb59c81e0bab45  gcc/testsuite/lib/dejapatches.exp
! 1c2b16d971751bf29e39f386e5974f54  gcc/testsuite/lib/dg-pch.exp
! 4627cb8ddaa02232d4164b55bd13f62f  gcc/testsuite/lib/file-format.exp
! 2a64a21deb050948a88c246de33c0021  gcc/testsuite/lib/fortran-modules.exp
! 6fb22541f6658769416c6353f89113ed  gcc/testsuite/lib/fortran-torture.exp
! b849fdeeb8ec7cee782e2cd57ca685e0  gcc/testsuite/lib/g++-dg.exp
! 10a3c89e5f3965627e1805ade8679843  gcc/testsuite/lib/g++.exp
! 7aca6382ec2d451baf6bf4c67f6966f6  gcc/testsuite/lib/gcc-defs.exp
! 8b7f96485bb0e97962f1c78a08e01439  gcc/testsuite/lib/gcc-dg.exp
! 85196ac94ccd30343d2dcc8348f7d280  gcc/testsuite/lib/gcc-gdb-test.exp
! ae8112dd120018b90a6296084b87b69d  gcc/testsuite/lib/gcc-simulate-thread.exp
! 078a96701616eaf66381892b77a1413a  gcc/testsuite/lib/gcc.exp
! db2fb5558675e4e70d13a4b6edc246df  gcc/testsuite/lib/gcov.exp
! 53ec81cadc538545c9894be44cf0dc94  gcc/testsuite/lib/gdc-dg.exp
! a80823c1dc8bd167a332d44b23b47cb1  gcc/testsuite/lib/gdc-utils.exp
! 25e7742a9cc8a98d24b9a0bfd33c9654  gcc/testsuite/lib/gdc.exp
! 2dc3988fc2cc879c5b3cc8e7f51bdba5  gcc/testsuite/lib/gfortran-dg.exp
! 3398ed25a59faf94e3424c0141cf0088  gcc/testsuite/lib/gfortran.exp
! a5bcad3066c462ec416589c17cfaa3fe  gcc/testsuite/lib/gnat-dg.exp
! 170f4397310393ffcf32098613e76519  gcc/testsuite/lib/gnat.exp
! d56265e2a1a748cf215dbdfa2b2045c0  gcc/testsuite/lib/go-dg.exp
! 59c449d9856c1d9abb57c3c96fccf9eb  gcc/testsuite/lib/go-torture.exp
! 4b1e185024a94be744054157b9fa0d8e  gcc/testsuite/lib/go.exp
! d2c996c0f1e4f52698d0d195e6ac13b8  gcc/testsuite/lib/hwasan-dg.exp
! 642d0328ce602fa6ea3a213535de4da0  gcc/testsuite/lib/lto.exp
! 68f849efff01c1f0a1b6f6a334fd4cea  gcc/testsuite/lib/mike-g++.exp
! f4e309b118df6bc1f55a0b5ed4e7807d  gcc/testsuite/lib/mike-gcc.exp
! dfa03e4b5bdd1b947f7c23113f25ef34  gcc/testsuite/lib/multiline.exp
! 4ec25704b1ae42aa7da653cca66159df  gcc/testsuite/lib/obj-c++-dg.exp
! 6753fc1fd1013b0fd2781cb9bd198c77  gcc/testsuite/lib/obj-c++.exp
! 4aee1266d1408aa049a055d7bafb63d8  gcc/testsuite/lib/objc-dg.exp
! 54d731506c3dc7e2798644b773b64fed  gcc/testsuite/lib/objc-torture.exp
! 973c68427d189bf6bf20d69dfab94037  gcc/testsuite/lib/objc.exp
! cc525046146fcc22f0ed46eaef6d6c8b  gcc/testsuite/lib/options.exp
! 4356077d58e9164b4a0f859041ea57c9  gcc/testsuite/lib/plugin-support.exp
! d21b42e68cda8f47745d2babefc2107a  gcc/testsuite/lib/profopt.exp
! 3bf5d4eb2d9617844cabefebef3d2218  gcc/testsuite/lib/prune.exp
! 9b94dfbb5d5e167bb2e2390303de9665  gcc/testsuite/lib/scanasm.exp
! 77b098872b985d9089c10ba029c2355b  gcc/testsuite/lib/scandump.exp
! 608b5374b252be291023c223f9a33dc9  gcc/testsuite/lib/scanipa.exp
! a7260a8e693d78f83289dd2b98a495df  gcc/testsuite/lib/scanlang.exp
! a669eb0cf2144e6e71fcd4acf47fbc44  gcc/testsuite/lib/scanltranstree.exp
! 0d8587eb4126263ae340f9b4cc807c16  gcc/testsuite/lib/scanoffload.exp
! 841bb489c3bb049feab4bc28522ccfdd  gcc/testsuite/lib/scanoffloadrtl.exp
! 75ed16bdc2bb9e31f0356a2f6214f542  gcc/testsuite/lib/scanoffloadtree.exp
! bf57f760d7e706b8742823fbb639ae4c  gcc/testsuite/lib/scanrtl.exp
! 4ea97fbdb505ffbf385fcd2759f80b87  gcc/testsuite/lib/scantree.exp
! ee11afd0bed136fe5f9f4b0b9347fbc1  gcc/testsuite/lib/scanwpaipa.exp
! e85eac7191a9c0639c23f2d8cb32aa3d  gcc/testsuite/lib/target-libpath.exp
! 29911997572e845d73d87588342bbc60  gcc/testsuite/lib/target-supports-dg.exp
! bc21273636ce21248bc8c920a67c422c  gcc/testsuite/lib/target-supports.exp
! 3726aa6af2e0ec126a1f3165db93c458  gcc/testsuite/lib/target-utils.exp
! 7f2401885e3237bcc8a97ce8be301082  gcc/testsuite/lib/timeout-dg.exp
! 3159102522e362ff5b08ae959de2db09  gcc/testsuite/lib/timeout.exp
! f53d67b1187e2040417964e16e5485c6  gcc/testsuite/lib/torture-options.exp
! f90d899e0ba451a267601efe3d338638  gcc/testsuite/lib/tsan-dg.exp
! 7d5f022d7e12b855906049f8ce23899e  gcc/testsuite/lib/ubsan-dg.exp
! 7d97a343afed41369bc367dfcaee6b2e  gcc/testsuite/lib/wrapper.exp
  83447103f758c2c8ec2044c84069e212  gcc/testsuite/obj-c++.dg/SEL-typedef.mm
  55160ccf08a9b1444b32deb900dac569  gcc/testsuite/obj-c++.dg/Wimplicit-fallthrough-1.mm
  84caaa988ddff2a3ef9a3c9c9bfe6fbf  gcc/testsuite/obj-c++.dg/at-class-1.mm
! 8d817e8679a440e09ee5f0099d5228fa  gcc/testsuite/obj-c++.dg/attributes/attributes.exp
  3ae67bbd6c30272de285ecf52bbe29c4  gcc/testsuite/obj-c++.dg/attributes/categ-attribute-1.mm
  bb7c92f88fdb2a6c371fe4b187f0cebd  gcc/testsuite/obj-c++.dg/attributes/categ-attribute-2.mm
  ca1ca55dc3bc194afaeccb9c90623e9e  gcc/testsuite/obj-c++.dg/attributes/class-attribute-1.mm
--- 90288,90362 ----
  5542ebc8aa1b198ad40aeeee64259afb  gcc/testsuite/jit.dg/test-version.c
  96ac85af1dde837e4f4e2444d083cf22  gcc/testsuite/jit.dg/test-volatile.c
  6477c66fcebff4d502d26e2d247251ce  gcc/testsuite/jit.dg/verify-dynamic-library.c
! 0132cbdeead47d5ef02737caef9ea645  gcc/testsuite/lib/asan-dg.exp
! 7fbf7610c45d082d97b418d8a3c76e3e  gcc/testsuite/lib/atomic-dg.exp
! aaa60f5726d81a7eb785434e5a558e42  gcc/testsuite/lib/c-compat.exp
! 04f0113bfabbd07236d77a5c888a8c20  gcc/testsuite/lib/c-torture.exp
! d88f94169d1c83af95a7017aca73575b  gcc/testsuite/lib/clearcap.exp
! 2b9ddd27c59faf126583313856559528  gcc/testsuite/lib/compat.exp
! af8fe024eea4d2f1af8d146cf4701da2  gcc/testsuite/lib/copy-file.exp
! dce8ce4c27a02fa051707556a3a40cc2  gcc/testsuite/lib/dejapatches.exp
! f651546d4a46b62de5bcb950ffc3b391  gcc/testsuite/lib/dg-pch.exp
! 91240f6c8018233a224155c7a800bf1c  gcc/testsuite/lib/file-format.exp
! fad60d12c5131edf3a1d4c9c29661e58  gcc/testsuite/lib/fortran-modules.exp
! 5c8e6d9570869b491ba75c4bd0582bb5  gcc/testsuite/lib/fortran-torture.exp
! 44743565a5935ce47ebc4ff6c8d7718d  gcc/testsuite/lib/g++-dg.exp
! 7e78296a0e021c2815bc6610975d8e02  gcc/testsuite/lib/g++.exp
! 557e9c16a176b21b63c4467dc37601e3  gcc/testsuite/lib/gcc-defs.exp
! 2229f984a2fab374462c04d85e6dc5a6  gcc/testsuite/lib/gcc-dg.exp
! dbd745c65edf0459b6cad0d6c23e8e5c  gcc/testsuite/lib/gcc-gdb-test.exp
! 725242e8228e8126e624ad7e55885e1c  gcc/testsuite/lib/gcc-simulate-thread.exp
! 8e4b46f9667826dc23556dd13b33f05e  gcc/testsuite/lib/gcc.exp
! 6b85159acacab547b98308c4a872d3d3  gcc/testsuite/lib/gcov.exp
! 6bf97b2308d37a5add32985e5ab42f89  gcc/testsuite/lib/gdc-dg.exp
! 63075caeb20a05d1e467be2de6fc6cca  gcc/testsuite/lib/gdc-utils.exp
! 2d37b901961cda238520589f4befcd03  gcc/testsuite/lib/gdc.exp
! dd0b76a19373bb7f42910a1b7b22d2f9  gcc/testsuite/lib/gfortran-dg.exp
! 5e51cc72ea2e66e0fcb2b1cdcc64a84d  gcc/testsuite/lib/gfortran.exp
! b71a0638915a3f1020f3df9ff4dfa2a2  gcc/testsuite/lib/gnat-dg.exp
! fa0a8e7d667755dbd0a8ae05eec79841  gcc/testsuite/lib/gnat.exp
! 899cd13fe03f3fda96f39185832437c8  gcc/testsuite/lib/go-dg.exp
! 9e2856ff5c2de93b3037677196cc4b57  gcc/testsuite/lib/go-torture.exp
! 16fa58498e48a9de1a8b71d312b58ff2  gcc/testsuite/lib/go.exp
! 837530e56cf87fe813247bb072e77fdf  gcc/testsuite/lib/hwasan-dg.exp
! 07ff7e93d0a10c91b0f449fed7521aaf  gcc/testsuite/lib/lto.exp
! 5b37cafa792be03b2bdde91aabd15c7f  gcc/testsuite/lib/mike-g++.exp
! 2afae6628be89fdfc666b60fb624f15e  gcc/testsuite/lib/mike-gcc.exp
! 4343a2fd17fb9cc68537e79284d9f45c  gcc/testsuite/lib/multiline.exp
! f4e191ca453c5c638633d8c3dbabdbf3  gcc/testsuite/lib/obj-c++-dg.exp
! 5b378c4c32163f467dd70d1ea7f68a7a  gcc/testsuite/lib/obj-c++.exp
! 8991652d150942fa8973525f2a9ce45c  gcc/testsuite/lib/objc-dg.exp
! 33c7ae4ac944a895f89b1fd5551b1198  gcc/testsuite/lib/objc-torture.exp
! eabb3154a39a15b5df8e2547db2695f9  gcc/testsuite/lib/objc.exp
! cf33ce15c5dad2c527e5c879f973eead  gcc/testsuite/lib/options.exp
! eff75a6463d6f77c3720faccbc3b1e3e  gcc/testsuite/lib/plugin-support.exp
! 172b0043f23f6c3c5edc038b3fb6fb81  gcc/testsuite/lib/profopt.exp
! ba3d4948b3648a071c41abee4b96e93a  gcc/testsuite/lib/prune.exp
! db50c0bf125218d6f8efa531c064e569  gcc/testsuite/lib/scanasm.exp
! 412d406c6ea9adcd5ca63a8df15b26d4  gcc/testsuite/lib/scandump.exp
! d8069472e4cfbf55ba5d079447033370  gcc/testsuite/lib/scanipa.exp
! 20df45b8fad494ef7ec4e3863273f03b  gcc/testsuite/lib/scanlang.exp
! 258444f2aab43ad1d96379d11e375254  gcc/testsuite/lib/scanltranstree.exp
! a86c6da6b6cdae70445d820464d4dc35  gcc/testsuite/lib/scanoffload.exp
! d1bc4044e64d709ed2f0711d0510846c  gcc/testsuite/lib/scanoffloadrtl.exp
! 2bf78c040ec80bf145f70e1c4a4d69b9  gcc/testsuite/lib/scanoffloadtree.exp
! 59d5469623bfa92a2e80ada65a6d80a0  gcc/testsuite/lib/scanrtl.exp
! a3c51194521aeaec30746bcd09540ded  gcc/testsuite/lib/scantree.exp
! fe565ed92d0666a7a8344d516a0fc123  gcc/testsuite/lib/scanwpaipa.exp
! cbf733ca1a40fb4aabb15514b6bb6bd9  gcc/testsuite/lib/target-libpath.exp
! aa367b5d414f9485192ae52d35e25660  gcc/testsuite/lib/target-supports-dg.exp
! e104a85bafe8c0d67eb8a485f7235dfe  gcc/testsuite/lib/target-supports.exp
! 3b5645e1702774baa233a5e5076a70ad  gcc/testsuite/lib/target-utils.exp
! 4632a9469eaaac6463c128b7895d3813  gcc/testsuite/lib/timeout-dg.exp
! 01d2447cc2594c0de781959c09d306fa  gcc/testsuite/lib/timeout.exp
! 61e72d1d598c78bdc3c7836890efb65d  gcc/testsuite/lib/torture-options.exp
! 4cf5e5aee2e15da695b54e420386c632  gcc/testsuite/lib/tsan-dg.exp
! 8b8f6046ef5bf26213d983a65bdde026  gcc/testsuite/lib/ubsan-dg.exp
! fcd62b1ecaf606122b1f42ad6075dfbd  gcc/testsuite/lib/wrapper.exp
  83447103f758c2c8ec2044c84069e212  gcc/testsuite/obj-c++.dg/SEL-typedef.mm
  55160ccf08a9b1444b32deb900dac569  gcc/testsuite/obj-c++.dg/Wimplicit-fallthrough-1.mm
  84caaa988ddff2a3ef9a3c9c9bfe6fbf  gcc/testsuite/obj-c++.dg/at-class-1.mm
! bc1037e1069c84876024d91039383c7d  gcc/testsuite/obj-c++.dg/attributes/attributes.exp
  3ae67bbd6c30272de285ecf52bbe29c4  gcc/testsuite/obj-c++.dg/attributes/categ-attribute-1.mm
  bb7c92f88fdb2a6c371fe4b187f0cebd  gcc/testsuite/obj-c++.dg/attributes/categ-attribute-2.mm
  ca1ca55dc3bc194afaeccb9c90623e9e  gcc/testsuite/obj-c++.dg/attributes/class-attribute-1.mm
*************** e7f36ede3524b56b226f26f29dca005b  gcc/te
*** 84903,84908 ****
--- 90373,90381 ----
  d195b2aa0a847fabfad8da048b4364c2  gcc/testsuite/obj-c++.dg/attributes/method-nonnull-1.mm
  54c2f3900493c7db843ca3de8bbe726c  gcc/testsuite/obj-c++.dg/attributes/method-noreturn-1.mm
  9c977bad43e25e2f540ae39513012189  gcc/testsuite/obj-c++.dg/attributes/method-sentinel-1.mm
+ f84fcee58d7ea0db2460ba64979e6f6b  gcc/testsuite/obj-c++.dg/attributes/method-unavailable-1.mm
+ d4948be69b10d9cb7263cd3b9c0e0997  gcc/testsuite/obj-c++.dg/attributes/method-unavailable-2.mm
+ 6bc550355c14c89378477f66a0905538  gcc/testsuite/obj-c++.dg/attributes/method-unavailable-3.mm
  8182207247f88c396a0b19377866b6cf  gcc/testsuite/obj-c++.dg/attributes/nsobject-01.mm
  75f5c9b4943c39adeed5ad55524d0ec6  gcc/testsuite/obj-c++.dg/attributes/nullability-00.mm
  42ca169991e605598f22ca7a7714f5b7  gcc/testsuite/obj-c++.dg/attributes/parameter-attribute-1.mm
*************** a5a19934fc7c58ec8c046fe943bcc7b2  gcc/te
*** 84942,84955 ****
  f6a135d669303e10360f4a9e17664aa7  gcc/testsuite/obj-c++.dg/cxx-class-1.mm
  7a5a474af4c3ae26683ee29295314d7b  gcc/testsuite/obj-c++.dg/cxx-ivars-1.mm
  2dd2f7dd6f655732fc606d8c85af825b  gcc/testsuite/obj-c++.dg/cxx-ivars-2.mm
! 118f7827cc56ea7303e814e19ff4f7a5  gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm
  0f4f03268c6b5629c2c23fe7fbc06966  gcc/testsuite/obj-c++.dg/cxx-scope-1.mm
  74ea4974ad0f897a229d4bd99f47da95  gcc/testsuite/obj-c++.dg/cxx-scope-2.mm
  4d63d224c8c642188a58882a0609e394  gcc/testsuite/obj-c++.dg/defs.mm
  e40d4b7e1e14ee92eea55e290a15be06  gcc/testsuite/obj-c++.dg/demangle-1.mm
  2b7cf81f9fd7c2f9558b6570f0835806  gcc/testsuite/obj-c++.dg/demangle-2.mm
  1894a992a842473ea3446c689c55dd1d  gcc/testsuite/obj-c++.dg/demangle-3.mm
! 8b4cea160f3370193817025f4ab0c20e  gcc/testsuite/obj-c++.dg/dg.exp
  df8e1651432977636bf9ca64823f6609  gcc/testsuite/obj-c++.dg/duplicate-class-1.mm
  74965fa22cbb6849912eabcb1f43b6e8  gcc/testsuite/obj-c++.dg/dwarf-2.mm
  ff09985655f304be699aaf3b8ac7d0c6  gcc/testsuite/obj-c++.dg/empty-private-1.mm
--- 90415,90428 ----
  f6a135d669303e10360f4a9e17664aa7  gcc/testsuite/obj-c++.dg/cxx-class-1.mm
  7a5a474af4c3ae26683ee29295314d7b  gcc/testsuite/obj-c++.dg/cxx-ivars-1.mm
  2dd2f7dd6f655732fc606d8c85af825b  gcc/testsuite/obj-c++.dg/cxx-ivars-2.mm
! e91047651063a1662428088ff7456f48  gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm
  0f4f03268c6b5629c2c23fe7fbc06966  gcc/testsuite/obj-c++.dg/cxx-scope-1.mm
  74ea4974ad0f897a229d4bd99f47da95  gcc/testsuite/obj-c++.dg/cxx-scope-2.mm
  4d63d224c8c642188a58882a0609e394  gcc/testsuite/obj-c++.dg/defs.mm
  e40d4b7e1e14ee92eea55e290a15be06  gcc/testsuite/obj-c++.dg/demangle-1.mm
  2b7cf81f9fd7c2f9558b6570f0835806  gcc/testsuite/obj-c++.dg/demangle-2.mm
  1894a992a842473ea3446c689c55dd1d  gcc/testsuite/obj-c++.dg/demangle-3.mm
! 85248368c7fd93ae1a4b9a4e9c2b3f0e  gcc/testsuite/obj-c++.dg/dg.exp
  df8e1651432977636bf9ca64823f6609  gcc/testsuite/obj-c++.dg/duplicate-class-1.mm
  74965fa22cbb6849912eabcb1f43b6e8  gcc/testsuite/obj-c++.dg/dwarf-2.mm
  ff09985655f304be699aaf3b8ac7d0c6  gcc/testsuite/obj-c++.dg/empty-private-1.mm
*************** e2f09d3bd8c76cb2cc3877eabe1635a2  gcc/te
*** 85011,85017 ****
  e0ee2e0ef377f377a4b6c0f76eb28be4  gcc/testsuite/obj-c++.dg/local-decl-1.mm
  237edc221dc0cb73012b6f771c679099  gcc/testsuite/obj-c++.dg/lookup-1.mm
  a18e5d5b1c772fda466670d9a820b3af  gcc/testsuite/obj-c++.dg/lookup-2.mm
! 84b66e2af158bee069baf6fce3936cb2  gcc/testsuite/obj-c++.dg/lto/lto.exp
  ed2d21312e666f3bbed404bcac3dc94a  gcc/testsuite/obj-c++.dg/lto/trivial-1_0.mm
  50dff087071e306c9a5b45faaf24d2e9  gcc/testsuite/obj-c++.dg/method-1.mm
  19f8317903ba8bee4bf9fa945f98478d  gcc/testsuite/obj-c++.dg/method-10.mm
--- 90484,90490 ----
  e0ee2e0ef377f377a4b6c0f76eb28be4  gcc/testsuite/obj-c++.dg/local-decl-1.mm
  237edc221dc0cb73012b6f771c679099  gcc/testsuite/obj-c++.dg/lookup-1.mm
  a18e5d5b1c772fda466670d9a820b3af  gcc/testsuite/obj-c++.dg/lookup-2.mm
! 1f53b29efc467ec739bc1af3074d3ff6  gcc/testsuite/obj-c++.dg/lto/lto.exp
  ed2d21312e666f3bbed404bcac3dc94a  gcc/testsuite/obj-c++.dg/lto/trivial-1_0.mm
  50dff087071e306c9a5b45faaf24d2e9  gcc/testsuite/obj-c++.dg/method-1.mm
  19f8317903ba8bee4bf9fa945f98478d  gcc/testsuite/obj-c++.dg/method-10.mm
*************** b6a4bff612a08ec461838ac1b3bd23f1  gcc/te
*** 85049,85058 ****
  ae0cb1e1f2ed9485ab1abd0d8669c498  gcc/testsuite/obj-c++.dg/naming-3.mm
  dcb5ecceff49837d638a19ab2eabd0ad  gcc/testsuite/obj-c++.dg/naming-4.mm
  bb8ccf448c201adbf05356ac551899fb  gcc/testsuite/obj-c++.dg/no-extra-load.mm
! e5781d45f8249482300a6cabf2eefd87  gcc/testsuite/obj-c++.dg/objc-gc-3.mm
  bd3b42583db47ebcc7fac037f85f00ed  gcc/testsuite/obj-c++.dg/overload-1.mm
  e84cd2640f9e4f66e445c60cecc3bfd2  gcc/testsuite/obj-c++.dg/plugin/diagnostic-test-expressions-1.mm
! 5b12ec15a14b9b9f9987ee302a9137e0  gcc/testsuite/obj-c++.dg/plugin/plugin.exp
  83cce29e08aac8f1aa68b46e52208639  gcc/testsuite/obj-c++.dg/pr23709.mm
  8480d22a4388c485c49d1c703c34f7f7  gcc/testsuite/obj-c++.dg/pr24393.mm
  2e9567e68880e80a9fa203bba6e86d7f  gcc/testsuite/obj-c++.dg/pr28049.mm
--- 90522,90534 ----
  ae0cb1e1f2ed9485ab1abd0d8669c498  gcc/testsuite/obj-c++.dg/naming-3.mm
  dcb5ecceff49837d638a19ab2eabd0ad  gcc/testsuite/obj-c++.dg/naming-4.mm
  bb8ccf448c201adbf05356ac551899fb  gcc/testsuite/obj-c++.dg/no-extra-load.mm
! 1c39d0d9e54d7c124e4e36d7ac5c8033  gcc/testsuite/obj-c++.dg/objc-gc-3.mm
  bd3b42583db47ebcc7fac037f85f00ed  gcc/testsuite/obj-c++.dg/overload-1.mm
  e84cd2640f9e4f66e445c60cecc3bfd2  gcc/testsuite/obj-c++.dg/plugin/diagnostic-test-expressions-1.mm
! b71cba2eacee645b8195fef34871f056  gcc/testsuite/obj-c++.dg/plugin/plugin.exp
! a1ff757de40d44fb3868d406ed01c4eb  gcc/testsuite/obj-c++.dg/pr101666-0.mm
! 339a76362d0703671d6ddc07066f2d95  gcc/testsuite/obj-c++.dg/pr101666-1.mm
! 7b3270d7548d00c42ba59f5769932087  gcc/testsuite/obj-c++.dg/pr101666.inc
  83cce29e08aac8f1aa68b46e52208639  gcc/testsuite/obj-c++.dg/pr23709.mm
  8480d22a4388c485c49d1c703c34f7f7  gcc/testsuite/obj-c++.dg/pr24393.mm
  2e9567e68880e80a9fa203bba6e86d7f  gcc/testsuite/obj-c++.dg/pr28049.mm
*************** af51399ba36e7667f00f0b0addf875a4  gcc/te
*** 85094,85099 ****
--- 90570,90577 ----
  9368e6a634029a5e9ce7424299109150  gcc/testsuite/obj-c++.dg/property/at-property-9.mm
  04cdfbecf5b1dd0ef4201ccbfc7fd77a  gcc/testsuite/obj-c++.dg/property/at-property-deprecated-1.mm
  8fa9289b5f1c9ec31a2121903fd8b4ac  gcc/testsuite/obj-c++.dg/property/at-property-deprecated-2.mm
+ 0913d5a8c05a17a253c3855305a7a8c6  gcc/testsuite/obj-c++.dg/property/at-property-unavailable-1.mm
+ a1e78491be4e7326511c7243cfc2a70c  gcc/testsuite/obj-c++.dg/property/at-property-unavailable-2.mm
  23cb93792074630bdeac45fe502077f0  gcc/testsuite/obj-c++.dg/property/cxx-property-1.mm
  004bd5579f6f76d43305de61e8652a58  gcc/testsuite/obj-c++.dg/property/cxx-property-2.mm
  2c38fbf6feb1b70e767f01e3508ae18c  gcc/testsuite/obj-c++.dg/property/dotsyntax-1.mm
*************** e469331a9543b20d3db3dbb8cad3ea40  gcc/te
*** 85119,85124 ****
--- 90597,90603 ----
  33508823dc40b38eaa979c0c16d8779c  gcc/testsuite/obj-c++.dg/property/dotsyntax-8.mm
  7520702fc48e84ce809a08f676919358  gcc/testsuite/obj-c++.dg/property/dotsyntax-9.mm
  6f1aef0eaa693eade4382edab17f6c83  gcc/testsuite/obj-c++.dg/property/dotsyntax-deprecated-1.mm
+ b1b0b0f32e716ab83a9b5831362578aa  gcc/testsuite/obj-c++.dg/property/dotsyntax-unavailable-1.mm
  a1b5720ed96300ee5d6343e86dec31fd  gcc/testsuite/obj-c++.dg/property/dynamic-1.mm
  e103c5236bee355ba538bab7cc993036  gcc/testsuite/obj-c++.dg/property/dynamic-2.mm
  7fc8014203c4f5c658701b3aa2d81caa  gcc/testsuite/obj-c++.dg/property/dynamic-3.mm
*************** a8c4b8171533defe44e443926dc705ce  gcc/te
*** 85138,85144 ****
  46896a53d202d39ebcdefc0f78554362  gcc/testsuite/obj-c++.dg/property/property-neg-5.mm
  2aabf1a0c895ae7fab2963b19790d1d1  gcc/testsuite/obj-c++.dg/property/property-neg-6.mm
  b30232e7701d5769f0f353657f947392  gcc/testsuite/obj-c++.dg/property/property-neg-7.mm
! c2d81e929ce8fee5bf2353db539b714c  gcc/testsuite/obj-c++.dg/property/property.exp
  810709bcc80423d41b2bda976147cc80  gcc/testsuite/obj-c++.dg/property/synthesize-1.mm
  aecddf447ec5f56ba7c209cb10a65ad6  gcc/testsuite/obj-c++.dg/property/synthesize-10.mm
  6603b6e3c23698004b66a8469e6c3ff6  gcc/testsuite/obj-c++.dg/property/synthesize-11.mm
--- 90617,90623 ----
  46896a53d202d39ebcdefc0f78554362  gcc/testsuite/obj-c++.dg/property/property-neg-5.mm
  2aabf1a0c895ae7fab2963b19790d1d1  gcc/testsuite/obj-c++.dg/property/property-neg-6.mm
  b30232e7701d5769f0f353657f947392  gcc/testsuite/obj-c++.dg/property/property-neg-7.mm
! 5232c5c4ee73381d1cfd23628dd03a69  gcc/testsuite/obj-c++.dg/property/property.exp
  810709bcc80423d41b2bda976147cc80  gcc/testsuite/obj-c++.dg/property/synthesize-1.mm
  aecddf447ec5f56ba7c209cb10a65ad6  gcc/testsuite/obj-c++.dg/property/synthesize-10.mm
  6603b6e3c23698004b66a8469e6c3ff6  gcc/testsuite/obj-c++.dg/property/synthesize-11.mm
*************** c2f326ebd57afc69cfee9d8f6b441323  gcc/te
*** 85187,85193 ****
  a9aabe53382bdf1de0612f8bcf7ef0eb  gcc/testsuite/obj-c++.dg/strings/const-str-6.mm
  4a89061dc402adc311f94d3659a6eaa2  gcc/testsuite/obj-c++.dg/strings/strings-1.mm
  acda44b06216ac119f6bf3a2e4b8cb98  gcc/testsuite/obj-c++.dg/strings/strings-2.mm
! 6e5133e14dd23f665b53a6761725f116  gcc/testsuite/obj-c++.dg/strings/strings.exp
  bb80c284ddffba9dd33509364a06732a  gcc/testsuite/obj-c++.dg/stubify-1.mm
  76876177abcae99b177994a5bd643e22  gcc/testsuite/obj-c++.dg/stubify-2.mm
  0827dd859e38ad893f65d76bf7a5b5e1  gcc/testsuite/obj-c++.dg/super-class-1.mm
--- 90666,90672 ----
  a9aabe53382bdf1de0612f8bcf7ef0eb  gcc/testsuite/obj-c++.dg/strings/const-str-6.mm
  4a89061dc402adc311f94d3659a6eaa2  gcc/testsuite/obj-c++.dg/strings/strings-1.mm
  acda44b06216ac119f6bf3a2e4b8cb98  gcc/testsuite/obj-c++.dg/strings/strings-2.mm
! e9eda3228ba2a29e6af8a6adab32ed02  gcc/testsuite/obj-c++.dg/strings/strings.exp
  bb80c284ddffba9dd33509364a06732a  gcc/testsuite/obj-c++.dg/stubify-1.mm
  76876177abcae99b177994a5bd643e22  gcc/testsuite/obj-c++.dg/stubify-2.mm
  0827dd859e38ad893f65d76bf7a5b5e1  gcc/testsuite/obj-c++.dg/super-class-1.mm
*************** d2c0463e1e05d168d9d004c74cec0610  gcc/te
*** 85239,85245 ****
  69c47926ef31db0bb79c5cd3cea4fa0b  gcc/testsuite/obj-c++.dg/torture/strings/const-str-8.mm
  a826eb6d88698556688b1008a86574a6  gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm
  38bba22e495d1876db60c1ae29146fbe  gcc/testsuite/obj-c++.dg/torture/strings/string1.mm
! fd571e6ae690ce2b378b953dbfbfc632  gcc/testsuite/obj-c++.dg/torture/strings/strings.exp
  6f6356dbcb53d22602416e8919a2b428  gcc/testsuite/obj-c++.dg/torture/tls/diag-1.mm
  f1f7032c657f1d2102a3760375786139  gcc/testsuite/obj-c++.dg/torture/tls/thr-init-1.mm
  913caebef1028795e3b0bac01c9a87c0  gcc/testsuite/obj-c++.dg/torture/tls/thr-init-2.mm
--- 90718,90724 ----
  69c47926ef31db0bb79c5cd3cea4fa0b  gcc/testsuite/obj-c++.dg/torture/strings/const-str-8.mm
  a826eb6d88698556688b1008a86574a6  gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm
  38bba22e495d1876db60c1ae29146fbe  gcc/testsuite/obj-c++.dg/torture/strings/string1.mm
! b90b805a701c0de9d80ea43ca321a7ff  gcc/testsuite/obj-c++.dg/torture/strings/strings.exp
  6f6356dbcb53d22602416e8919a2b428  gcc/testsuite/obj-c++.dg/torture/tls/diag-1.mm
  f1f7032c657f1d2102a3760375786139  gcc/testsuite/obj-c++.dg/torture/tls/thr-init-1.mm
  913caebef1028795e3b0bac01c9a87c0  gcc/testsuite/obj-c++.dg/torture/tls/thr-init-2.mm
*************** dc8c5ec7b9abe64c54eabc2d60a81066  gcc/te
*** 85305,85311 ****
  a08e081524ab6799e394768da76968d3  gcc/testsuite/objc-obj-c++-shared/GNUStep/GNUstepBase/NSObject+GNUstepBase.h
  ce8c053d2554352e55b35ae330cd5126  gcc/testsuite/objc-obj-c++-shared/GNUStep/GNUstepBase/NSString+GNUstepBase.h
  79f58fc20c1f2dfd98bc097643134fed  gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.h
! e48052bf658bc6d71f10a28898734733  gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.m
  ac76ddcf9ed6ab3c92c31559244da096  gcc/testsuite/objc-obj-c++-shared/next-abi.h
  f3501304cb4e501ca831a9c4069efbe3  gcc/testsuite/objc-obj-c++-shared/nsconstantstring-class-impl.h
  885a572c6cebc62b2c85d81b1dfdb205  gcc/testsuite/objc-obj-c++-shared/nsconstantstring-class-impl.m
--- 90784,90790 ----
  a08e081524ab6799e394768da76968d3  gcc/testsuite/objc-obj-c++-shared/GNUStep/GNUstepBase/NSObject+GNUstepBase.h
  ce8c053d2554352e55b35ae330cd5126  gcc/testsuite/objc-obj-c++-shared/GNUStep/GNUstepBase/NSString+GNUstepBase.h
  79f58fc20c1f2dfd98bc097643134fed  gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.h
! 5b2070646be3389422576d36d0cc4dd3  gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.m
  ac76ddcf9ed6ab3c92c31559244da096  gcc/testsuite/objc-obj-c++-shared/next-abi.h
  f3501304cb4e501ca831a9c4069efbe3  gcc/testsuite/objc-obj-c++-shared/nsconstantstring-class-impl.h
  885a572c6cebc62b2c85d81b1dfdb205  gcc/testsuite/objc-obj-c++-shared/nsconstantstring-class-impl.m
*************** cb269bc755b2a67364f3313e8faf3f29  gcc/te
*** 85320,85326 ****
  3b8fd8c2ee22e0099d80e4fa89e2befc  gcc/testsuite/objc.dg/alias.m
  d1b6c3f1ea4ae2a41059c91bb5a2b852  gcc/testsuite/objc.dg/anon-1.m
  84caaa988ddff2a3ef9a3c9c9bfe6fbf  gcc/testsuite/objc.dg/at-class-1.m
! dfa3ba1964fc0f51d850ae3383002cf3  gcc/testsuite/objc.dg/attributes/attributes.exp
  fd95a72920339d2253044c54f9ac9ea5  gcc/testsuite/objc.dg/attributes/categ-attribute-1.m
  56f3aac5dbec91275669f63a33cfbf9b  gcc/testsuite/objc.dg/attributes/categ-attribute-2.m
  aec01e9422e920606a28dcc46f3f42c4  gcc/testsuite/objc.dg/attributes/class-attribute-1.m
--- 90799,90805 ----
  3b8fd8c2ee22e0099d80e4fa89e2befc  gcc/testsuite/objc.dg/alias.m
  d1b6c3f1ea4ae2a41059c91bb5a2b852  gcc/testsuite/objc.dg/anon-1.m
  84caaa988ddff2a3ef9a3c9c9bfe6fbf  gcc/testsuite/objc.dg/at-class-1.m
! d82766f0b37f53691dd2a91414677247  gcc/testsuite/objc.dg/attributes/attributes.exp
  fd95a72920339d2253044c54f9ac9ea5  gcc/testsuite/objc.dg/attributes/categ-attribute-1.m
  56f3aac5dbec91275669f63a33cfbf9b  gcc/testsuite/objc.dg/attributes/categ-attribute-2.m
  aec01e9422e920606a28dcc46f3f42c4  gcc/testsuite/objc.dg/attributes/class-attribute-1.m
*************** e7f36ede3524b56b226f26f29dca005b  gcc/te
*** 85338,85343 ****
--- 90817,90825 ----
  36540d6cd79d305f7755b80b2af5b104  gcc/testsuite/objc.dg/attributes/method-nonnull-1.m
  54c2f3900493c7db843ca3de8bbe726c  gcc/testsuite/objc.dg/attributes/method-noreturn-1.m
  53593a9d79d5001e15cf26d6ee71b6e8  gcc/testsuite/objc.dg/attributes/method-sentinel-1.m
+ d003d40deb339dbfa921002b6b547ca0  gcc/testsuite/objc.dg/attributes/method-unavailable-1.m
+ d4948be69b10d9cb7263cd3b9c0e0997  gcc/testsuite/objc.dg/attributes/method-unavailable-2.m
+ 6bc550355c14c89378477f66a0905538  gcc/testsuite/objc.dg/attributes/method-unavailable-3.m
  8a7dbe08151062f5fb8bed41638cfc48  gcc/testsuite/objc.dg/attributes/nsobject-01.m
  e270c7301b6089db4faf82ffa2312cd1  gcc/testsuite/objc.dg/attributes/nullability-00.m
  fb00192fab0f98f0fa41c0e37926c2d7  gcc/testsuite/objc.dg/attributes/objc-exception-1.m
*************** fcbd6d34fab967afc68044cbc6bebd90  gcc/te
*** 85384,85390 ****
  38a179920a287512b87250b596d328be  gcc/testsuite/objc.dg/demangle-1.m
  c0ab0e620febd282b5e9d035d15b3f89  gcc/testsuite/objc.dg/desig-init-1.m
  35496e95171f548a40cf930fea45d49f  gcc/testsuite/objc.dg/desig-init-2.m
! 1abcd037f8e40a055bb5440eb1262eed  gcc/testsuite/objc.dg/dg.exp
  142353bbb63675a2f47a3552a35e052f  gcc/testsuite/objc.dg/duplicate-class-1.m
  e93baeeda9bc4b65e5eea748a076d816  gcc/testsuite/objc.dg/dwarf-1.m
  0a836d2fda427c66107feaabe420bcf3  gcc/testsuite/objc.dg/dwarf-2.m
--- 90866,90872 ----
  38a179920a287512b87250b596d328be  gcc/testsuite/objc.dg/demangle-1.m
  c0ab0e620febd282b5e9d035d15b3f89  gcc/testsuite/objc.dg/desig-init-1.m
  35496e95171f548a40cf930fea45d49f  gcc/testsuite/objc.dg/desig-init-2.m
! f417c3f2c5c463b979924a0055486cf5  gcc/testsuite/objc.dg/dg.exp
  142353bbb63675a2f47a3552a35e052f  gcc/testsuite/objc.dg/duplicate-class-1.m
  e93baeeda9bc4b65e5eea748a076d816  gcc/testsuite/objc.dg/dwarf-1.m
  0a836d2fda427c66107feaabe420bcf3  gcc/testsuite/objc.dg/dwarf-2.m
*************** af1f88eec3b11606777ae67c0f56c07b  gcc/te
*** 85448,85454 ****
  db6ac9c4cab360de1e62ae24781a65aa  gcc/testsuite/objc.dg/gnu-encoding/generate-random.c
  a3ac98dcec269f59ea0f7ebc9b8c3297  gcc/testsuite/objc.dg/gnu-encoding/generate-random.h
  73fd2a43073b565b250e87dcce3fb9b1  gcc/testsuite/objc.dg/gnu-encoding/generate-random_r.c
! d35ee917ade3d23d7182f6b86c4c9740  gcc/testsuite/objc.dg/gnu-encoding/gnu-encoding.exp
  c41a6661b12b159d108661dd40bac309  gcc/testsuite/objc.dg/gnu-encoding/struct-layout-1.h
  b602f2a3cc56cd39c738d2241938856f  gcc/testsuite/objc.dg/gnu-encoding/struct-layout-1_test.h
  a66ec90d801aba24f196746609a41d7c  gcc/testsuite/objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c
--- 90930,90936 ----
  db6ac9c4cab360de1e62ae24781a65aa  gcc/testsuite/objc.dg/gnu-encoding/generate-random.c
  a3ac98dcec269f59ea0f7ebc9b8c3297  gcc/testsuite/objc.dg/gnu-encoding/generate-random.h
  73fd2a43073b565b250e87dcce3fb9b1  gcc/testsuite/objc.dg/gnu-encoding/generate-random_r.c
! 86fd9067ab41cdd251cba942e05f9944  gcc/testsuite/objc.dg/gnu-encoding/gnu-encoding.exp
  c41a6661b12b159d108661dd40bac309  gcc/testsuite/objc.dg/gnu-encoding/struct-layout-1.h
  b602f2a3cc56cd39c738d2241938856f  gcc/testsuite/objc.dg/gnu-encoding/struct-layout-1_test.h
  a66ec90d801aba24f196746609a41d7c  gcc/testsuite/objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c
*************** f95bd6372c4bf77d12d57a628fc5bb39  gcc/te
*** 85485,85491 ****
  d770885e56a7430b48fc3465970fbda1  gcc/testsuite/objc.dg/local-decl-1.m
  1d93e9b716a93515c5ab71dc3394158e  gcc/testsuite/objc.dg/local-decl-2.m
  5f8d8d488322be4a5c33e704a91212ff  gcc/testsuite/objc.dg/lookup-1.m
! 73dc21a6330de9858043aa03892b80a0  gcc/testsuite/objc.dg/lto/lto.exp
  a18c6d04d0759ee5d6c7e2b9e7fbe288  gcc/testsuite/objc.dg/lto/trivial-1_0.m
  b1a80cc8c0c5d5294699c5aeb20817a4  gcc/testsuite/objc.dg/member-1.m
  c1908e6ec96975ce2e11da3796fb69d6  gcc/testsuite/objc.dg/method-1.m
--- 90967,90973 ----
  d770885e56a7430b48fc3465970fbda1  gcc/testsuite/objc.dg/local-decl-1.m
  1d93e9b716a93515c5ab71dc3394158e  gcc/testsuite/objc.dg/local-decl-2.m
  5f8d8d488322be4a5c33e704a91212ff  gcc/testsuite/objc.dg/lookup-1.m
! 1693261773775ef2050b74a82cc7e103  gcc/testsuite/objc.dg/lto/lto.exp
  a18c6d04d0759ee5d6c7e2b9e7fbe288  gcc/testsuite/objc.dg/lto/trivial-1_0.m
  b1a80cc8c0c5d5294699c5aeb20817a4  gcc/testsuite/objc.dg/member-1.m
  c1908e6ec96975ce2e11da3796fb69d6  gcc/testsuite/objc.dg/method-1.m
*************** ab539e16480243bccd13cb0ab5c05a26  gcc/te
*** 85533,85546 ****
  81b21eb69c89e40578d3c8712e5193e2  gcc/testsuite/objc.dg/objc-foreach-3.m
  d6bb76e151385d5dcc0bccac5e79fa6e  gcc/testsuite/objc.dg/objc-foreach-4.m
  7aa5deeefbee0740247f45a83aea37f4  gcc/testsuite/objc.dg/objc-foreach-5.m
! cb9b5197bed9aef6cef86220a5ab2fd9  gcc/testsuite/objc.dg/objc-gc-4.m
  19ed68d9eed2befbaefc5dc8b866d0cf  gcc/testsuite/objc.dg/objc-nofilename-1.m
  35fb6a51ab2ee402a296c57fae46dd84  gcc/testsuite/objc.dg/param-1.m
  8c15bc469e56fdb17a7b24540bf21491  gcc/testsuite/objc.dg/pch/interface-1.hs
  71da4e106e38b3671b4f4ae8a237e55f  gcc/testsuite/objc.dg/pch/interface-1.m
! d2e3b487cfa9171717c408c78a4a11db  gcc/testsuite/objc.dg/pch/pch.exp
  9d6541dc0a9955231b38937f98c5b78a  gcc/testsuite/objc.dg/plugin/diagnostic-test-expressions-1.m
! 54d1c4ee2cf77bc8025bcea1b8d2942a  gcc/testsuite/objc.dg/plugin/plugin.exp
  7826ffa2cfc60d9014ec8fd1d1fc1cda  gcc/testsuite/objc.dg/pr103639.m
  4bde0ee2020d54cbaccb19eddeb1ff93  gcc/testsuite/objc.dg/pr18255.m
  31c55f97ea5b980eec7b074cf9577cb9  gcc/testsuite/objc.dg/pr23214.m
--- 91015,91031 ----
  81b21eb69c89e40578d3c8712e5193e2  gcc/testsuite/objc.dg/objc-foreach-3.m
  d6bb76e151385d5dcc0bccac5e79fa6e  gcc/testsuite/objc.dg/objc-foreach-4.m
  7aa5deeefbee0740247f45a83aea37f4  gcc/testsuite/objc.dg/objc-foreach-5.m
! 608ea2106bb549a54ca754a76a22fde2  gcc/testsuite/objc.dg/objc-gc-4.m
  19ed68d9eed2befbaefc5dc8b866d0cf  gcc/testsuite/objc.dg/objc-nofilename-1.m
  35fb6a51ab2ee402a296c57fae46dd84  gcc/testsuite/objc.dg/param-1.m
  8c15bc469e56fdb17a7b24540bf21491  gcc/testsuite/objc.dg/pch/interface-1.hs
  71da4e106e38b3671b4f4ae8a237e55f  gcc/testsuite/objc.dg/pch/interface-1.m
! 137b6f3e6885c513a1be42af62a8f4b7  gcc/testsuite/objc.dg/pch/pch.exp
  9d6541dc0a9955231b38937f98c5b78a  gcc/testsuite/objc.dg/plugin/diagnostic-test-expressions-1.m
! fda03ba30e5742e886b408502eaab89e  gcc/testsuite/objc.dg/plugin/plugin.exp
! a1ff757de40d44fb3868d406ed01c4eb  gcc/testsuite/objc.dg/pr101666-0.m
! 339a76362d0703671d6ddc07066f2d95  gcc/testsuite/objc.dg/pr101666-1.m
! c963db6673c4b0358e639bc17180a2a0  gcc/testsuite/objc.dg/pr101666.inc
  7826ffa2cfc60d9014ec8fd1d1fc1cda  gcc/testsuite/objc.dg/pr103639.m
  4bde0ee2020d54cbaccb19eddeb1ff93  gcc/testsuite/objc.dg/pr18255.m
  31c55f97ea5b980eec7b074cf9577cb9  gcc/testsuite/objc.dg/pr23214.m
*************** d3b40e4f3c66992ae3b8efe17e6ab426  gcc/te
*** 85589,85594 ****
--- 91074,91081 ----
  eae603041070833a53cc81f75f82c046  gcc/testsuite/objc.dg/property/at-property-9.m
  c56b04ab3f19d4f2af570d66f91262c1  gcc/testsuite/objc.dg/property/at-property-deprecated-1.m
  8fa9289b5f1c9ec31a2121903fd8b4ac  gcc/testsuite/objc.dg/property/at-property-deprecated-2.m
+ aab602729f9ca54e8b1c2a9b8f839075  gcc/testsuite/objc.dg/property/at-property-unavailable-1.m
+ a1e78491be4e7326511c7243cfc2a70c  gcc/testsuite/objc.dg/property/at-property-unavailable-2.m
  2c38fbf6feb1b70e767f01e3508ae18c  gcc/testsuite/objc.dg/property/dotsyntax-1.m
  ba959fb1d1da9a4e9c0d76c6fe9189f8  gcc/testsuite/objc.dg/property/dotsyntax-10.m
  5d9974b427b0b9da23da6fc44bc16574  gcc/testsuite/objc.dg/property/dotsyntax-11.m
*************** e469331a9543b20d3db3dbb8cad3ea40  gcc/te
*** 85612,85617 ****
--- 91099,91105 ----
  33508823dc40b38eaa979c0c16d8779c  gcc/testsuite/objc.dg/property/dotsyntax-8.m
  7520702fc48e84ce809a08f676919358  gcc/testsuite/objc.dg/property/dotsyntax-9.m
  6f1aef0eaa693eade4382edab17f6c83  gcc/testsuite/objc.dg/property/dotsyntax-deprecated-1.m
+ b1b0b0f32e716ab83a9b5831362578aa  gcc/testsuite/objc.dg/property/dotsyntax-unavailable-1.m
  f216d6696984e64e4a96ad364eeeeb0c  gcc/testsuite/objc.dg/property/dynamic-1.m
  051dc76fcc24d1cb8c055ed2bc6b1911  gcc/testsuite/objc.dg/property/dynamic-2.m
  7fc8014203c4f5c658701b3aa2d81caa  gcc/testsuite/objc.dg/property/dynamic-3.m
*************** baf9036868eba04aebdd06e708a665ec  gcc/te
*** 85631,85637 ****
  46896a53d202d39ebcdefc0f78554362  gcc/testsuite/objc.dg/property/property-neg-5.m
  ea4fb9865bd07122883de2bcf725a13f  gcc/testsuite/objc.dg/property/property-neg-6.m
  b30232e7701d5769f0f353657f947392  gcc/testsuite/objc.dg/property/property-neg-7.m
! c7751503f41f7889504df53f86df56a4  gcc/testsuite/objc.dg/property/property.exp
  366ec4311c5e9d93dcfbbd560da544a7  gcc/testsuite/objc.dg/property/synthesize-1.m
  aecddf447ec5f56ba7c209cb10a65ad6  gcc/testsuite/objc.dg/property/synthesize-10.m
  23e9117b246f1a4889c17099f6ccf5bf  gcc/testsuite/objc.dg/property/synthesize-11.m
--- 91119,91125 ----
  46896a53d202d39ebcdefc0f78554362  gcc/testsuite/objc.dg/property/property-neg-5.m
  ea4fb9865bd07122883de2bcf725a13f  gcc/testsuite/objc.dg/property/property-neg-6.m
  b30232e7701d5769f0f353657f947392  gcc/testsuite/objc.dg/property/property-neg-7.m
! 1b0ef8d9ff547c4b108317726f7e8785  gcc/testsuite/objc.dg/property/property.exp
  366ec4311c5e9d93dcfbbd560da544a7  gcc/testsuite/objc.dg/property/synthesize-1.m
  aecddf447ec5f56ba7c209cb10a65ad6  gcc/testsuite/objc.dg/property/synthesize-10.m
  23e9117b246f1a4889c17099f6ccf5bf  gcc/testsuite/objc.dg/property/synthesize-11.m
*************** c531fbd47d6cd6f34fd4a1161fe41d36  gcc/te
*** 85680,85686 ****
  b5566392b676a4381c9fba425af46d22  gcc/testsuite/objc.dg/special/load-category-3.h
  531fa8066e9e519b7cc77fe0e99f2692  gcc/testsuite/objc.dg/special/load-category-3.m
  84e0d0ac9e785e6c7a2c3961f9fef351  gcc/testsuite/objc.dg/special/load-category-3a.m
! d39d0a7d7b27731ffb45748363f4b319  gcc/testsuite/objc.dg/special/special.exp
  a771ad2e4109d3b6d673ea6ae3dfaa4f  gcc/testsuite/objc.dg/special/unclaimed-category-1.h
  a3f5ac774c5045ab1807af23f8bafeb5  gcc/testsuite/objc.dg/special/unclaimed-category-1.m
  fd73b19f16303df474ad98a05e01cd6a  gcc/testsuite/objc.dg/special/unclaimed-category-1a.m
--- 91168,91174 ----
  b5566392b676a4381c9fba425af46d22  gcc/testsuite/objc.dg/special/load-category-3.h
  531fa8066e9e519b7cc77fe0e99f2692  gcc/testsuite/objc.dg/special/load-category-3.m
  84e0d0ac9e785e6c7a2c3961f9fef351  gcc/testsuite/objc.dg/special/load-category-3a.m
! 9a48e40b83f17980362e1046413d7635  gcc/testsuite/objc.dg/special/special.exp
  a771ad2e4109d3b6d673ea6ae3dfaa4f  gcc/testsuite/objc.dg/special/unclaimed-category-1.h
  a3f5ac774c5045ab1807af23f8bafeb5  gcc/testsuite/objc.dg/special/unclaimed-category-1.m
  fd73b19f16303df474ad98a05e01cd6a  gcc/testsuite/objc.dg/special/unclaimed-category-1a.m
*************** d14e2bc0e149efd8ad9b13c9f1e48081  gcc/te
*** 85698,85704 ****
  1b52a4aa3cd0d5062e03b48964ddcb0b  gcc/testsuite/objc.dg/strings/const-str-6.m
  4a89061dc402adc311f94d3659a6eaa2  gcc/testsuite/objc.dg/strings/strings-1.m
  5406714e0710bd54d86b2186d1cb98fa  gcc/testsuite/objc.dg/strings/strings-2.m
! d3bf54dfaa39f5a0633aabf536e0e688  gcc/testsuite/objc.dg/strings/strings.exp
  08a5ae539a0108908d97abd54da7b150  gcc/testsuite/objc.dg/stubify-1.m
  e62d1c240e660f200afe1c83315d23c2  gcc/testsuite/objc.dg/stubify-2.m
  7e68d7fe39ddc6065769f26089764fd6  gcc/testsuite/objc.dg/super-class-1.m
--- 91186,91192 ----
  1b52a4aa3cd0d5062e03b48964ddcb0b  gcc/testsuite/objc.dg/strings/const-str-6.m
  4a89061dc402adc311f94d3659a6eaa2  gcc/testsuite/objc.dg/strings/strings-1.m
  5406714e0710bd54d86b2186d1cb98fa  gcc/testsuite/objc.dg/strings/strings-2.m
! e33b4514065877a086803f152a49bf94  gcc/testsuite/objc.dg/strings/strings.exp
  08a5ae539a0108908d97abd54da7b150  gcc/testsuite/objc.dg/stubify-1.m
  e62d1c240e660f200afe1c83315d23c2  gcc/testsuite/objc.dg/stubify-2.m
  7e68d7fe39ddc6065769f26089764fd6  gcc/testsuite/objc.dg/super-class-1.m
*************** a8a9f4264b042cb130bb43f35157c620  gcc/te
*** 85736,85742 ****
  f559fec747b34a07335a33efaef1d635  gcc/testsuite/objc.dg/torture/strings/string2.m
  8d3378c509e4ec126b88298049f5b787  gcc/testsuite/objc.dg/torture/strings/string3.m
  5b27fadf5e692e2a9972369e31bf0ba1  gcc/testsuite/objc.dg/torture/strings/string4.m
! fb8407c7342ee35e1774fc940eecb5a8  gcc/testsuite/objc.dg/torture/strings/strings.exp
  6f6356dbcb53d22602416e8919a2b428  gcc/testsuite/objc.dg/torture/tls/diag-1.m
  372cfaf699d0b2f15663aaae9b213546  gcc/testsuite/objc.dg/torture/tls/thr-init-2.m
  8affcfa2f40a88a07d936c0472352a61  gcc/testsuite/objc.dg/torture/tls/thr-init-3.m
--- 91224,91230 ----
  f559fec747b34a07335a33efaef1d635  gcc/testsuite/objc.dg/torture/strings/string2.m
  8d3378c509e4ec126b88298049f5b787  gcc/testsuite/objc.dg/torture/strings/string3.m
  5b27fadf5e692e2a9972369e31bf0ba1  gcc/testsuite/objc.dg/torture/strings/string4.m
! 94fa76ecb960a0ecf5700f3f35e7cee9  gcc/testsuite/objc.dg/torture/strings/strings.exp
  6f6356dbcb53d22602416e8919a2b428  gcc/testsuite/objc.dg/torture/tls/diag-1.m
  372cfaf699d0b2f15663aaae9b213546  gcc/testsuite/objc.dg/torture/tls/thr-init-2.m
  8affcfa2f40a88a07d936c0472352a61  gcc/testsuite/objc.dg/torture/tls/thr-init-3.m
*************** f0a85fb06bc40a59b3b67e37b68bf8a9  gcc/te
*** 85771,85777 ****
  af0fd8f33da4a0b997aa6096000deff3  gcc/testsuite/objc.dg/zero-link-3.m
  0d71c48c831bf5882b80c4cd6ca9d9d8  gcc/testsuite/objc/compile/20011211-1.m
  9b70591be7f91f15d0a53c89bdc94bf4  gcc/testsuite/objc/compile/20060406-1.m
! 2f3b08effc2955959a3a61132997039b  gcc/testsuite/objc/compile/compile.exp
  2144ecc4331915c2481c0a1f5701d0e2  gcc/testsuite/objc/compile/method-1.m
  41f9da1aa9876935f010f6e2b17679e6  gcc/testsuite/objc/compile/pr18406.m
  e206c4c7af6f1b10d643ca659d7ce5fb  gcc/testsuite/objc/compile/pr64668.m
--- 91259,91265 ----
  af0fd8f33da4a0b997aa6096000deff3  gcc/testsuite/objc.dg/zero-link-3.m
  0d71c48c831bf5882b80c4cd6ca9d9d8  gcc/testsuite/objc/compile/20011211-1.m
  9b70591be7f91f15d0a53c89bdc94bf4  gcc/testsuite/objc/compile/20060406-1.m
! 3f29c9cf0f0a2d60312a784fb0daca67  gcc/testsuite/objc/compile/compile.exp
  2144ecc4331915c2481c0a1f5701d0e2  gcc/testsuite/objc/compile/method-1.m
  41f9da1aa9876935f010f6e2b17679e6  gcc/testsuite/objc/compile/pr18406.m
  e206c4c7af6f1b10d643ca659d7ce5fb  gcc/testsuite/objc/compile/pr64668.m
*************** bee60356c32af863f8417a00f203538f  gcc/te
*** 85829,85835 ****
  0dfc21e690c7625bdcd6ecd58b521009  gcc/testsuite/objc/execute/enumeration-1.m
  906ad68029b532a36a68c47b781f6f77  gcc/testsuite/objc/execute/enumeration-2.m
  0add90ae8cf075ffca747fd33e604e11  gcc/testsuite/objc/execute/exceptions/catchall-1.m
! 93be1f64c7de8374467a1e291a299a1d  gcc/testsuite/objc/execute/exceptions/exceptions.exp
  9cd4ece00a81d13b805c9ad514ef2cf8  gcc/testsuite/objc/execute/exceptions/finally-1.m
  0f41feff3df5bd47c204ee5d8044ea2a  gcc/testsuite/objc/execute/exceptions/foward-1.m
  e9b8822effadb281ff59150cc70ef17f  gcc/testsuite/objc/execute/exceptions/foward-1.x
--- 91317,91323 ----
  0dfc21e690c7625bdcd6ecd58b521009  gcc/testsuite/objc/execute/enumeration-1.m
  906ad68029b532a36a68c47b781f6f77  gcc/testsuite/objc/execute/enumeration-2.m
  0add90ae8cf075ffca747fd33e604e11  gcc/testsuite/objc/execute/exceptions/catchall-1.m
! 219dbd6dbd3389e74727e9486da7e286  gcc/testsuite/objc/execute/exceptions/exceptions.exp
  9cd4ece00a81d13b805c9ad514ef2cf8  gcc/testsuite/objc/execute/exceptions/finally-1.m
  0f41feff3df5bd47c204ee5d8044ea2a  gcc/testsuite/objc/execute/exceptions/foward-1.m
  e9b8822effadb281ff59150cc70ef17f  gcc/testsuite/objc/execute/exceptions/foward-1.x
*************** bece99d6de6f0bd4152de59cd8f1d13c  gcc/te
*** 85839,85845 ****
  a70e5bfb678efb233f3a7e3aedf20e95  gcc/testsuite/objc/execute/exceptions/pr31281.m
  dfa856dff7b9f08e7146dc28cfca396d  gcc/testsuite/objc/execute/exceptions/throw-nil.m
  e2d7fb111f167f00bc00103220075df5  gcc/testsuite/objc/execute/exceptions/trivial.m
! cfe8a1c479a0bf844e58189c4e34fa4d  gcc/testsuite/objc/execute/execute.exp
  cad3b31ba4ec282f94aee3275ac9323e  gcc/testsuite/objc/execute/fdecl.m
  1a92e165604e454883c8a1a3e560c7a2  gcc/testsuite/objc/execute/formal_protocol-1.m
  fae68af182768d87f73efa38e36d5ba3  gcc/testsuite/objc/execute/formal_protocol-2.m
--- 91327,91333 ----
  a70e5bfb678efb233f3a7e3aedf20e95  gcc/testsuite/objc/execute/exceptions/pr31281.m
  dfa856dff7b9f08e7146dc28cfca396d  gcc/testsuite/objc/execute/exceptions/throw-nil.m
  e2d7fb111f167f00bc00103220075df5  gcc/testsuite/objc/execute/exceptions/trivial.m
! 1a386ed081f8d821ca5a8786d64b0f9c  gcc/testsuite/objc/execute/execute.exp
  cad3b31ba4ec282f94aee3275ac9323e  gcc/testsuite/objc/execute/fdecl.m
  1a92e165604e454883c8a1a3e560c7a2  gcc/testsuite/objc/execute/formal_protocol-1.m
  fae68af182768d87f73efa38e36d5ba3  gcc/testsuite/objc/execute/formal_protocol-2.m
*************** c0b991692c06f34bf7f8673802e7b155  gcc/te
*** 85901,86117 ****
  5fb2390505ce446a223d21f02b332874  gcc/testsuite/selftests/x86_64/copy-hard-reg-into-frame.rtl
  e42076aeff1c5ac155a88db5b1993d38  gcc/testsuite/selftests/x86_64/times-two.rtl
  195d431640249dac1928ced4d93ecb76  gcc/testsuite/selftests/x86_64/unspec.rtl
! cdebbc5212b58a0091c623930ca65668  gcc/timevar.c
! df20573e1c5ec77d3f66aa753a4a51b5  gcc/timevar.def
! d915bd32dca8233941ae50d85de69640  gcc/timevar.h
! 7ac315690f96be347fd9551830cdd614  gcc/toplev.c
! 08af385f2696c18abef9f3da39909547  gcc/toplev.h
! 24686f2ef8e47f51b54cbcd33699416f  gcc/tracer.c
! e1f610b9b14118b85ced503f2fa89eaf  gcc/tracer.h
! 9e736aaee63c72c54e823699180b6591  gcc/trans-mem.c
! aeff588ac829c30eae0d104543b440d3  gcc/trans-mem.h
! c32a7cd954e38c94fedb8a3ecc0dc53c  gcc/tree-affine.c
! 65985517c61ffc8bade76e7be469b25e  gcc/tree-affine.h
! 417f97627fff84a7a8d8884f3ed8b127  gcc/tree-call-cdce.c
! 2e94d2530b73d5e8d44332d1512b7107  gcc/tree-cfg.c
! 2943d99f84c3b4dd2870fa30543f96fa  gcc/tree-cfg.h
! c9c18a9cff4201a5c9bcb4827c4fb349  gcc/tree-cfgcleanup.c
! 30ea9c09db55c61adb489625c35cb15e  gcc/tree-cfgcleanup.h
! c02b2a89fa8369ab143d4f11a460651b  gcc/tree-chrec.c
! 31e492711713c34c1104d3e984030331  gcc/tree-chrec.h
! ab7078d2e2707e0bd00415132d4cf941  gcc/tree-complex.c
! 7e46ae01dd9031c283edb403da422537  gcc/tree-core.h
! bd84bb3946c620e0c42d4cdeee2045d6  gcc/tree-data-ref.c
! 0340dbf773106b9b31fa22861e7f9718  gcc/tree-data-ref.h
! 5ea9dc582b1d846f2c523de1059f14cb  gcc/tree-dfa.c
! 4711e398b753a63c9dfe58dd5c599663  gcc/tree-dfa.h
! 61cab07dbd907458fe0b084f9de3d326  gcc/tree-diagnostic-path.cc
! 57444e6cdf9ce36313eaaea8746d94ed  gcc/tree-diagnostic.c
! c1f2ff0df4d922bc92a7a89dd111e444  gcc/tree-diagnostic.h
! f75e637e91dac91b91c777479ef081fb  gcc/tree-dump.c
! 8c75ec9047fb090f17138d28aeb55e49  gcc/tree-dump.h
! 9a204a445c0e92f805c113dad42b5302  gcc/tree-eh.c
! 62326f7c91c8078cdc3c8f095034cd1d  gcc/tree-eh.h
! 5b3d82167a78e6c870c4b85721b98f7d  gcc/tree-emutls.c
! df51783bb1013af8d36a6926324b9944  gcc/tree-hash-traits.h
! 4e0ed6ef3bdd74441de24187193d838f  gcc/tree-hasher.h
! 511676ae9943534d43b199dfae5d4478  gcc/tree-if-conv.c
! a3ff52ffa889157518435812a966fe3d  gcc/tree-if-conv.h
! 57d82e2b2b776193ccc17a53320580fc  gcc/tree-inline.c
! b0a166f5b8df4431a3a01703e73ca5e0  gcc/tree-inline.h
! 7bbed0b509eec2f9ac682b47cd5237c2  gcc/tree-into-ssa.c
! 84e9d715b2250b3a6d8f326c5b90c1a8  gcc/tree-into-ssa.h
! 362bdb78a0bdfa101b91dba0c927dc5f  gcc/tree-iterator.c
! 36ab5451f3575ada26fffe25b559d254  gcc/tree-iterator.h
! bcd24e6df75dc13de98c2ea3bb72fd00  gcc/tree-loop-distribution.c
! 8569b405b180aa6eaf3c9650d5fbdaee  gcc/tree-nested.c
! 9b519af6b08c9d2fbe9dad37203b5196  gcc/tree-nested.h
! bf98a34c788757224ad19a297b7e6e98  gcc/tree-nrv.c
! 31323bc7fd67cf0285f538efc0a1ee45  gcc/tree-object-size.c
! 596d1b50badf0031eb091dd74e897ca5  gcc/tree-object-size.h
! cd0c0940dec08aeb3f89264baea4d7d7  gcc/tree-outof-ssa.c
! 16013cc6623ff7124fe9f1e05b401c85  gcc/tree-outof-ssa.h
! d8cc388e9c4f91e647d44d3a487416d8  gcc/tree-parloops.c
! d3b084ad7aba2560ef42b2f258f952f6  gcc/tree-parloops.h
! a51487616194a8071dfe4b9c3bd11c1d  gcc/tree-pass.h
! 5699380a625e6242da8eea993e58e918  gcc/tree-phinodes.c
! 853eb3b96a580d586e049ff23c1f1ca9  gcc/tree-phinodes.h
! 96a8529c97ec5c2d5f4bfc1414c403fd  gcc/tree-predcom.c
! 0e721a7ed54aae97900bc285a55f9060  gcc/tree-pretty-print.c
! a47959dbcad350d44f1fb6b79a580f48  gcc/tree-pretty-print.h
! 6e0dc1ffdcd6528a72da60eb226c8ec5  gcc/tree-profile.c
! 4d7fa46a3c3b714a513a8cc862595763  gcc/tree-scalar-evolution.c
! 3119791bf78200bcb022199390392521  gcc/tree-scalar-evolution.h
! d96860bf091765735df36806aaa21a7f  gcc/tree-sra.c
! 1ae9bb0b98165f1efe0c7c7a11bab6cc  gcc/tree-sra.h
! ee9c205c9ab2fa90fe88b3ae0c79920e  gcc/tree-ssa-address.c
! c54597ef98c1ca43588073766641d8d8  gcc/tree-ssa-address.h
! 1dc8bd000811175c3b54ac3d7057a41c  gcc/tree-ssa-alias-compare.h
! ae6b9755cd7d52e366ae8e3ff8a55b13  gcc/tree-ssa-alias.c
! c9427a5d21dd629e85e87b47aeb4fe74  gcc/tree-ssa-alias.h
! 97eeb8af4b63d82c62d38723598b98f3  gcc/tree-ssa-ccp.c
! c3a38b89c2fc91798eb9bcec7d1a921b  gcc/tree-ssa-ccp.h
! 14f20b171e9eeef632fb82641a87fd7d  gcc/tree-ssa-coalesce.c
! dbf97ae62841bae185383de08c1010af  gcc/tree-ssa-coalesce.h
! 7cda46f9d86f92ef2a6a9b13d9ea5458  gcc/tree-ssa-copy.c
! b47681fd6550b2337b9111c3b884c764  gcc/tree-ssa-dce.c
! f89d08a599ef7443309a0083d3eed3b5  gcc/tree-ssa-dce.h
! e6b364314b092283962e9b8fc40f2b2a  gcc/tree-ssa-dom.c
! 5d4ec6bd4c2537b8b3b9934eeb5ac5bd  gcc/tree-ssa-dom.h
! 1d91441633d5656eb9eb7aaffb6abfbf  gcc/tree-ssa-dse.c
! b0a51b2bfb537b29341db8e5e9d06c49  gcc/tree-ssa-dse.h
! 398fce9341d9ea8c16943ab286e36a81  gcc/tree-ssa-forwprop.c
! f87b8cba0a5eaf206c581f51abff7795  gcc/tree-ssa-ifcombine.c
! 5e21627768f782974d385f0b8591b7c3  gcc/tree-ssa-live.c
! 92bca15e046dc5f13eb16bedaf5bdf70  gcc/tree-ssa-live.h
! 98d45850103ddab74c7b6b7446089026  gcc/tree-ssa-loop-ch.c
! 440e59e128fa41f324523645d1c23303  gcc/tree-ssa-loop-im.c
! 15f1defc34f3db829c93c302e1b7fd48  gcc/tree-ssa-loop-ivcanon.c
! 120e8a77d75728ac826cd04b9e0addf5  gcc/tree-ssa-loop-ivopts.c
! cc3adcca25191b12b03af31ce868f9f5  gcc/tree-ssa-loop-ivopts.h
! ac370f5c6ed5c448ce93e995b5b90a23  gcc/tree-ssa-loop-manip.c
! 9101108741728365b900cefedbca0f1a  gcc/tree-ssa-loop-manip.h
! 7cb6e74fa4d4dade053f9fe6a2306265  gcc/tree-ssa-loop-niter.c
! 17b1022d28a19652c83fa6cb85066528  gcc/tree-ssa-loop-niter.h
! 6324ee4ae64ffdb68be445d3f141e1ec  gcc/tree-ssa-loop-prefetch.c
! 3734808fbeec8aefdcee447131e872d5  gcc/tree-ssa-loop-split.c
! 80c9261b9586acb7b3f4dd8057e45a00  gcc/tree-ssa-loop-unswitch.c
! 7c5fb48d5c26a7cc6cc1328519686513  gcc/tree-ssa-loop.c
! e7b45902d3db8fd8ee5db0a06d9ebd6a  gcc/tree-ssa-loop.h
! 0162473e371a1803cd6e2ab6854b1a90  gcc/tree-ssa-math-opts.c
! 21767eb2af5cf900357d0cdff9563462  gcc/tree-ssa-math-opts.h
! c4f4a7c3982de8a83d63700eeab025e2  gcc/tree-ssa-operands.c
! 89fb9150ca77cb47d3eb6e508c47a938  gcc/tree-ssa-operands.h
! 6831853f2b71ee068abf78d13aafa968  gcc/tree-ssa-phiopt.c
! aca824b1c600ea02a32079f9880c7dea  gcc/tree-ssa-phiprop.c
! 14975f2fbf60664af2dc43d15b308760  gcc/tree-ssa-pre.c
! 53216871795caf5a9e7fc4db4952b4cf  gcc/tree-ssa-propagate.c
! 2f608b017c74261fb20e2c50494fd211  gcc/tree-ssa-propagate.h
! eee92cf1f06ab8481d88af258f022f9d  gcc/tree-ssa-reassoc.c
! 4f7d545bd96bf81d7343beee53323b74  gcc/tree-ssa-reassoc.h
! 4950a1f43992a5da4cf68d70522c8fb9  gcc/tree-ssa-sccvn.c
! cbdcf02ee4848c736cf8a9fee3c78084  gcc/tree-ssa-sccvn.h
! 654628a1f0f77b863091072217fd81f1  gcc/tree-ssa-scopedtables.c
! 89f4a37820db62debf8e9c7547c734db  gcc/tree-ssa-scopedtables.h
! 88ea1b186fca75987e9c87011bdc67e1  gcc/tree-ssa-sink.c
! dd6a2364f5f12e2e98ceb10340828c81  gcc/tree-ssa-strlen.c
! 07cd4ed8db0b69a9df3f67a6c078ee8d  gcc/tree-ssa-strlen.h
! 9fb3a1e33afb337d2a7ba2fc50492ee3  gcc/tree-ssa-structalias.c
! 226048531a518fe848311ca013413b8d  gcc/tree-ssa-tail-merge.c
! bf108348124c2aac7c7af2dc30f64e06  gcc/tree-ssa-ter.c
! 3e90b0aab68f7d9ed5168674fd049e33  gcc/tree-ssa-ter.h
! 57f1c3e27b8887ac9fe030f1ae787a07  gcc/tree-ssa-threadbackward.c
! e84abc753936f66f2922f2fef9169ec2  gcc/tree-ssa-threadedge.c
! b252a171d500e0cab975d3ee869ac82d  gcc/tree-ssa-threadedge.h
! 289dbd01379dbac2fb32244c0816b67a  gcc/tree-ssa-threadupdate.c
! 7bc29409f7411f4024d12d0d0ac494ad  gcc/tree-ssa-threadupdate.h
! f8386c0188448d8e4805f34fc0e485b3  gcc/tree-ssa-uncprop.c
! ea574c34b2c417a9766c17108b7e8dbf  gcc/tree-ssa-uninit.c
! 29bb73fc2a8d417d652e5e3951bd183a  gcc/tree-ssa.c
! b1739bf5d288192714af8e0c8b1c1e7d  gcc/tree-ssa.h
! e61b4c021883038ea2d1201943d95548  gcc/tree-ssanames.c
! 5f0d001d3a6ba13a46a13e9ddf70fd64  gcc/tree-ssanames.h
! 6b89d4f071cbcee468bb484d1d4fe8ac  gcc/tree-stdarg.c
! 61a689559ae01932bcf93a8d8a034772  gcc/tree-stdarg.h
! 395d076604144e22887bf06b1dc8c38f  gcc/tree-streamer-in.c
! 954a7fd2068acdcda6621cd8004fa7e2  gcc/tree-streamer-out.c
! 6df984e471ab742ef3369ec4dffb3492  gcc/tree-streamer.c
! 679b5e41ad5113e15652a39245e6ceb3  gcc/tree-streamer.h
! 5ab0afa1547f8bc9bd4d95d53b6b1263  gcc/tree-switch-conversion.c
! 4af837819cb8ea23c7b76ee276d8c81c  gcc/tree-switch-conversion.h
! 749044dc570d709e923db8e1de207a10  gcc/tree-tailcall.c
! 9255abeccc3056f1b1dec591b5f7b8be  gcc/tree-vect-data-refs.c
! 1ebc96a1f1b17e2d4917ee7d5f298d55  gcc/tree-vect-generic.c
! faa5329b1f390b639f568c946e5a7777  gcc/tree-vect-loop-manip.c
! 242637c341c0caf2914dc3bcb4bd49d4  gcc/tree-vect-loop.c
! acca60fc389457619cfc622078ceff30  gcc/tree-vect-patterns.c
! d20a5aa2757fc39d3413e3c933b5a72c  gcc/tree-vect-slp-patterns.c
! 8ca7395eca12fec080251f1f107d9ed6  gcc/tree-vect-slp.c
! 009c29bf1d3888a29458c28ac5c11e99  gcc/tree-vect-stmts.c
! f6bd437c971fbfa030e5a50db314eb6d  gcc/tree-vector-builder.c
! ab254195b6cc59013f830527799845a1  gcc/tree-vector-builder.h
! a81602a0b8310bde0b9239772d873f96  gcc/tree-vectorizer.c
! 792136b23c7db03363719c735c0ee4d4  gcc/tree-vectorizer.h
! b54ce4bde08399c6f5c90b9f9a513261  gcc/tree-vrp.c
! 8b2b735df1dd01f7b24caa58f59891c7  gcc/tree-vrp.h
! 0adc6587548100af57ad30b73ca05895  gcc/tree.c
! 54bdda1062541e94a710f93dc39c2732  gcc/tree.def
! 979c1c60ea69e2a2957e90be2a76611e  gcc/tree.h
! f5d9f8fed65a9d8d94c3bc3a54d17175  gcc/treestruct.def
! 29d87aedf6eb8f5f9b858b6ce49f18ba  gcc/tristate.cc
! 0462624e1a963d1b936e36b375115848  gcc/tristate.h
! 1fde85c0d9774255237e001636efb6c8  gcc/tsan.c
! f3391bab0a8e76804139f10f89a6d8cf  gcc/tsan.h
! 9cb449181fe6b6cec0f12c65964eed4a  gcc/tsystem.h
! e955740dbe777821f2cccc2f1ffe5c2f  gcc/typeclass.h
! 56044162f187e7865585c71c3fa369e8  gcc/typed-splay-tree.c
! 9db154ca9a8f61137a5d8cde9f565ba0  gcc/typed-splay-tree.h
! f21a431f73f6d2a4b3440f68e998fefb  gcc/ubsan.c
! c71a123f0c3811bd59554fb1ad3c863e  gcc/ubsan.h
! 20c6e75500616d21c9936946caddc196  gcc/unique-ptr-tests.cc
! 9f40370f290cb66e11bbd1a3249892a7  gcc/valtrack.c
! e9a5a2bcf328bb2c2dbec4ecfd97885e  gcc/valtrack.h
! 0195b138ae357db0146d1d1c4542e946  gcc/value-prof.c
! 70a81436a47247d33da6b1e9538938e3  gcc/value-prof.h
! caeec7cd819a00f5cf83cd1c83a1913b  gcc/value-query.cc
! edd2102162203ffa195120a8bbef433c  gcc/value-query.h
! c90e2e4149ffd9b0966fa09a2bffc523  gcc/value-range-equiv.cc
! b570e943102175a39a612c7e13a38a2a  gcc/value-range-equiv.h
! e4d9d9cdb525e7d4d2d226084ad63a4a  gcc/value-range.cc
! 7b1ab74e3c70cb1e22679b101181c1ea  gcc/value-range.h
! b4a721a0d586edfb07a7dfe2a28a2e57  gcc/var-tracking.c
! 0ba7005a97ed487b4279e905a00e533d  gcc/varasm.c
! b8d6bbc9c059388ffa49a3df1eeeb2aa  gcc/varasm.h
! 454e8d39b138d6457d65bb6ea63fc17c  gcc/varpool.c
! 55d5e60e44e9f699246223cdcfc9fd2c  gcc/vec-perm-indices.c
! 6353984e1ca13286eff3cf43e8d520ff  gcc/vec-perm-indices.h
! 4ecc71e38c46b8c91027a7a44f9d75d5  gcc/vec.c
! 36ae8a4edda8f57e338bf870c4db7ccd  gcc/vec.h
! 0f9cdb6c305c797c9c55f99c56df71f9  gcc/vector-builder.h
! 9ca53b68e03ebab990265fe20e74cc5a  gcc/version.c
! 206ce76c6ce744048f99fdcc938dc713  gcc/version.h
! ec78e1611275c757f68d44bea88bc05d  gcc/vmsdbg.h
! 5cce9956627bdb5117e13ddaa8c6687c  gcc/vmsdbgout.c
! feb0f1090809a5824496be897d6524d2  gcc/vr-values.c
! 7313d73268b5a12a68f71d0b8448d789  gcc/vr-values.h
! a5ff571a86711f1889f6148b6f0a1a72  gcc/vtable-verify.c
! 96cbb704279567d3b85cd2fc89354218  gcc/vtable-verify.h
! 17a1eec99348d78186ba5c6f9b35bebb  gcc/web.c
! b35c7bd9acfca64983cd187331ce7fc6  gcc/wide-int-bitmask.h
! 8d3319eefa4768131dfef66304346db8  gcc/wide-int-print.cc
! 010cd322521c1ee0542f4081fab7aaf6  gcc/wide-int-print.h
! b7defe2c7e4731284f747aa156bda45a  gcc/wide-int.cc
! fe759b1aa00610d99f1520cfe196ce92  gcc/wide-int.h
! 3fbc3ce873dd1439e18734542a1cd26e  gcc/xcoff.h
! 5a99ef1e1f569bf6e04aebf72d4afad4  gcc/xcoffout.c
! b683ffab756b05a88907135f72dec974  gcc/xcoffout.h
! 2985e36c2600337bbde4afeba4e536a6  gnattools/ChangeLog
! aaa671ca98fa9f94bfedd0ab395c5505  gnattools/Makefile.in
  8385a4d775aa1b9949c1f88488491c86  gnattools/configure
  1e063bb0b806e41cc0ed23d1b7047746  gnattools/configure.ac
! c4f96c1af9fbd72d1893af0e8ee88f54  gotools/ChangeLog
! 6f7b730e8dfbdff92349c010bb18cf00  gotools/Makefile.am
! 040d059ae30c619fdd918cd30bfbfae4  gotools/Makefile.in
  7e23031e2e274aaa07b61c1e8f18dc99  gotools/README
  bd839a9d17f6121cfd663f099d0bf44d  gotools/aclocal.m4
  6f26693afa3dd1a6616f8bddb895d528  gotools/configure
--- 91389,91607 ----
  5fb2390505ce446a223d21f02b332874  gcc/testsuite/selftests/x86_64/copy-hard-reg-into-frame.rtl
  e42076aeff1c5ac155a88db5b1993d38  gcc/testsuite/selftests/x86_64/times-two.rtl
  195d431640249dac1928ced4d93ecb76  gcc/testsuite/selftests/x86_64/unspec.rtl
! 26ab8b9abeba30ee380b241d856cf154  gcc/timevar.cc
! 6582a8a5ab155d40382c5a4b9da48f83  gcc/timevar.def
! 35c3e35eee6c3dd96a01cee259df20cb  gcc/timevar.h
! 0ba24a2ed37edaaaf00b7e4b81506608  gcc/toplev.cc
! be4e48733451a10d0a26b631d65e05bf  gcc/toplev.h
! 246459c20938354e4cfe062884802c2c  gcc/tracer.cc
! 8ea65651a79372d2effa046b611dbde1  gcc/tracer.h
! a1093b7b82e90c0dd6456268aa31621d  gcc/trans-mem.cc
! cabad81a3b1ae37ee86359e588d98084  gcc/trans-mem.h
! b6cd8503e8e729887a888e71c4c83388  gcc/tree-affine.cc
! d706f275e815b64b84a5d17ace94dfe1  gcc/tree-affine.h
! e193da775481c3e0f0f53f8b068842f8  gcc/tree-call-cdce.cc
! ace1b134f184ac01d539ba647cb7a9fb  gcc/tree-cfg.cc
! 5e264bf7338d9355becf920736f480a0  gcc/tree-cfg.h
! 72f00c7f7591ce4a752bef21fe1956d3  gcc/tree-cfgcleanup.cc
! 807a86834fad748a2be8d13d39cde258  gcc/tree-cfgcleanup.h
! 45976a7b0f8b677cfc8aba8470270dc1  gcc/tree-chrec.cc
! a2daa87c3a6e418c66574ac39c4b15e0  gcc/tree-chrec.h
! 2be27b22e3169b45888e9b65dabe685b  gcc/tree-complex.cc
! df961ddd006ed4d7ac5a75e47f26773d  gcc/tree-core.h
! c626668ce1384f088e4e25a70aec8b9f  gcc/tree-data-ref.cc
! a949c26e25237c08b9ccd6fe9b8b9bc5  gcc/tree-data-ref.h
! 2b823bfa5d526de1e9c434480c0ec1a1  gcc/tree-dfa.cc
! 0b6bc9f4562b6d4d959636f818032072  gcc/tree-dfa.h
! 3ecf9627752c6e32c3696dd7553f1b9b  gcc/tree-diagnostic-path.cc
! 1c96d3d3bada289515c660e741856adf  gcc/tree-diagnostic.cc
! 2ff390cffec4ce4eef19e05125c9946f  gcc/tree-diagnostic.h
! 2e70e020a97c25728029c911e1919869  gcc/tree-dump.cc
! 25db3aa3376f8948cba551f5b4567cc1  gcc/tree-dump.h
! 8430fffa14b68eacf1bafde16d833508  gcc/tree-eh.cc
! e35c2d4712dafbb07acf21e1b9026b1f  gcc/tree-eh.h
! 34e742d0ff51ce5aad7049bb9eb7e26e  gcc/tree-emutls.cc
! 7c2944ef15a9a1f9fb4edc1838e43cd4  gcc/tree-hash-traits.h
! ebf44536d1655f7bc1689d20fee11feb  gcc/tree-hasher.h
! b1c3c943cbb8b32f2bb8f046e55e197f  gcc/tree-if-conv.cc
! 9e7278ba352bc75f64e06dbb302a4cbf  gcc/tree-if-conv.h
! 800e4a1e4ab280836827eed72c5bb25e  gcc/tree-inline.cc
! b51f97729f40e0ee84d73134f80560cc  gcc/tree-inline.h
! e67c34b3786af683b0dac4b3e0a1fb49  gcc/tree-into-ssa.cc
! 322b9d77ac824db5c790f3c3b67ace47  gcc/tree-into-ssa.h
! d9f8288dc44be70602329547ca0e049b  gcc/tree-iterator.cc
! 2b518733b893d8a6df3880d3907c179c  gcc/tree-iterator.h
! d957158edf2e94650a29c21caa8e459b  gcc/tree-loop-distribution.cc
! 2da373fa90649698c25f8538094cfef0  gcc/tree-nested.cc
! 69c73b03308d3ca47af9e15c750ba7e8  gcc/tree-nested.h
! 242fbbf3b18e8eecaca863253b01cb78  gcc/tree-nrv.cc
! cc7a95ae3a70533242a4c3545441244b  gcc/tree-object-size.cc
! 87e69dd59b2c11c0dff9af95c58965c8  gcc/tree-object-size.h
! 1189f8c61dd50f371b6663918a7727d6  gcc/tree-outof-ssa.cc
! d961b07cd44eaf9cafbcfabb4369fd5e  gcc/tree-outof-ssa.h
! 750f43a2d2b05ab7bd248e17d113f9f4  gcc/tree-parloops.cc
! 85c483704aecd26d6c9dfb12a9b462aa  gcc/tree-parloops.h
! 68aae769d84ff73c87c434bc20c42a22  gcc/tree-pass.h
! 2a8f9d7cca091eb8ee2e92471ecbbd1f  gcc/tree-phinodes.cc
! a9e072251c9cd071080f867b429c833b  gcc/tree-phinodes.h
! c6c6d852e458b24f69c6ecb6788acb13  gcc/tree-predcom.cc
! 685a2a1bc806bfb60256953c02c0ba71  gcc/tree-pretty-print.cc
! bee23ec1af17a7d796af14ca70f8dc46  gcc/tree-pretty-print.h
! 4e8db3ed286087efc4275d75a8345f10  gcc/tree-profile.cc
! 2267c8a08be256094faf58eab483bb2e  gcc/tree-scalar-evolution.cc
! f5e09b2dd6f2fef9f16a58b4cd348400  gcc/tree-scalar-evolution.h
! 0241499f5161add4d7e7690a1548a885  gcc/tree-sra.cc
! 22ad2a6946f74c4f2e7665952622d9d0  gcc/tree-sra.h
! a4f99ae3557e1161cd896d23217b56a4  gcc/tree-ssa-address.cc
! 4233bdbcb0d4183c9631eebafa6f4820  gcc/tree-ssa-address.h
! 5daf63c693503c3da59da196d885d1e6  gcc/tree-ssa-alias-compare.h
! 071330825150712edff881b0a6d38e31  gcc/tree-ssa-alias.cc
! 9693c083b57172a5de1c03311467b54f  gcc/tree-ssa-alias.h
! 768d7a71bdd7a85e99a734ec9a9a32ad  gcc/tree-ssa-ccp.cc
! 038e40c57d9c925b2f2ab27ce65aec68  gcc/tree-ssa-ccp.h
! d0589077e360719205f673fa28e27473  gcc/tree-ssa-coalesce.cc
! 7df6905ad76540fc0ba6958ce894a5a4  gcc/tree-ssa-coalesce.h
! b5611be2889ac60f8358352f44be0eac  gcc/tree-ssa-copy.cc
! 8e94a3976ea856be319da92012fc63a4  gcc/tree-ssa-dce.cc
! d9087990e3ccbe29be4cb2d6fbcd0d6b  gcc/tree-ssa-dce.h
! 934a150b7cf36679fb13fec66f74b87a  gcc/tree-ssa-dom.cc
! f163bc3e9903da9f8045d8369ae0a861  gcc/tree-ssa-dom.h
! 883f531ff80281910e2c838ee666a6f9  gcc/tree-ssa-dse.cc
! 195877f983e0a31af6302aed94fa678f  gcc/tree-ssa-dse.h
! d98671517e85014c48032b706855e40f  gcc/tree-ssa-forwprop.cc
! 01cb88691242bd822e285cee0991d29d  gcc/tree-ssa-ifcombine.cc
! 2583b0542c537376d7d4e52a3a3ce910  gcc/tree-ssa-live.cc
! 1d67651fbc8ab600f45126f148f4c12b  gcc/tree-ssa-live.h
! b584536fc99eb576420b3ef5e3780c49  gcc/tree-ssa-loop-ch.cc
! 0c5808e462de7a3be00a907b9f228e3f  gcc/tree-ssa-loop-im.cc
! 0e82db34e6245ef507793cd8894b447b  gcc/tree-ssa-loop-ivcanon.cc
! cd554bb4c7b4218010881138628d16dd  gcc/tree-ssa-loop-ivopts.cc
! 3f30c52cd6fd7f965316dafa58373681  gcc/tree-ssa-loop-ivopts.h
! ef807a1da16d0fd13015b7232cea5f9f  gcc/tree-ssa-loop-manip.cc
! d8ad877acd553ebd0bd25b5694a3faff  gcc/tree-ssa-loop-manip.h
! 72a7d42374665f52c37806d32faf1402  gcc/tree-ssa-loop-niter.cc
! 7846c6b4a5c247d1cbdae546020ad25f  gcc/tree-ssa-loop-niter.h
! 14595cbe718de0b8d598cc311c9b902f  gcc/tree-ssa-loop-prefetch.cc
! 198101719096331b28a4f1c06de3afff  gcc/tree-ssa-loop-split.cc
! f7436362de0b3fcd67ad43810db53479  gcc/tree-ssa-loop-unswitch.cc
! 5d9355772a32a02f9de8b8da727fe954  gcc/tree-ssa-loop.cc
! 16e3b759aa71fcd40fb9ac27f0b4552d  gcc/tree-ssa-loop.h
! a9d48aab2241787fa07be9158011f338  gcc/tree-ssa-math-opts.cc
! f0db024320e40ac1ac8d450e8be90f02  gcc/tree-ssa-math-opts.h
! 99fc0aa9825a52457c111c1df6c54358  gcc/tree-ssa-operands.cc
! 45c8305b030ec69139d01c326f9a1133  gcc/tree-ssa-operands.h
! 12a339da2cab99077e42c0ba8a0c0a1c  gcc/tree-ssa-phiopt.cc
! 35e3309df2c090d12494914f49fc1e1e  gcc/tree-ssa-phiprop.cc
! 7776557fcf614af82c2fb031c38a007f  gcc/tree-ssa-pre.cc
! 3a55ddfc911130111194d8f209761e03  gcc/tree-ssa-propagate.cc
! 7e14602488f8f1e7e754422dd9731b01  gcc/tree-ssa-propagate.h
! a3096ce8ef40d290c1f38cbf1490250b  gcc/tree-ssa-reassoc.cc
! a2d407f6fd4aa95d7eb7ad8a17b81af4  gcc/tree-ssa-reassoc.h
! 87b3470f4f8a25a670e062be749264df  gcc/tree-ssa-sccvn.cc
! 17197e70b367fc08062d3ec0fcb5b1fc  gcc/tree-ssa-sccvn.h
! 648524d5c619edb0acece29c53601b89  gcc/tree-ssa-scopedtables.cc
! 9da7a798aaf58ceb04c796be96a5bdc8  gcc/tree-ssa-scopedtables.h
! 567a7bd7766af04bcf0597a4d035df15  gcc/tree-ssa-sink.cc
! d57e2f3403bc72fc9d282e4436edb07b  gcc/tree-ssa-strlen.cc
! c3601488e1adeaebe82eec4348f3568d  gcc/tree-ssa-strlen.h
! 25d1c78b94974440c9fc85ab6aeec599  gcc/tree-ssa-structalias.cc
! 1331a83a0763d00ff819b24064392d12  gcc/tree-ssa-tail-merge.cc
! 7599bc99d54acc459659d85b787faee8  gcc/tree-ssa-ter.cc
! 08299e87c1517c92eb914373542d3cc8  gcc/tree-ssa-ter.h
! f74ec8bee7ed7504fbe5b21a035e2ec3  gcc/tree-ssa-threadbackward.cc
! 43375d61a193229718ba160c78763db6  gcc/tree-ssa-threadedge.cc
! 91efbe0596018132e9a44c2d111408e5  gcc/tree-ssa-threadedge.h
! 0b823bb64aa685e2fc041bab227798e5  gcc/tree-ssa-threadupdate.cc
! 5cbd06b4671b9d3a386ae0b3b1899ff0  gcc/tree-ssa-threadupdate.h
! 87d4c13c047088a0266b3ff765ee429e  gcc/tree-ssa-uncprop.cc
! 96e7f104f4710ea8ad62f1aad0f986ad  gcc/tree-ssa-uninit.cc
! f9481a229dc7350989d8bc914cd13efe  gcc/tree-ssa.cc
! 755b67c6f7a1821f6962ff15d72cc5dc  gcc/tree-ssa.h
! 1e5a5a5e038804c8ae08600e168b502d  gcc/tree-ssanames.cc
! 5f0afaa1eeaac0ca2f771408bdaf5c9d  gcc/tree-ssanames.h
! 2999f2f74e205dd3e3520e7ac6cc453b  gcc/tree-stdarg.cc
! 4d99f9b0e6fd197498afdb1cb077b61f  gcc/tree-stdarg.h
! f5d24542b57f5008c915eff9212b6d7c  gcc/tree-streamer-in.cc
! bf8925ce78dbd27dd95bd34765e1a0eb  gcc/tree-streamer-out.cc
! f727b27ed4e86d4316c9ccebf8ace408  gcc/tree-streamer.cc
! aafcaaf57b1b41ce694f51f37fe1dd93  gcc/tree-streamer.h
! 9fe812d705ac88f473d91d7ced8745df  gcc/tree-switch-conversion.cc
! f9949ff32a719d47d731381154dd534c  gcc/tree-switch-conversion.h
! 1a726f178c55eac3224071963ee9bb3a  gcc/tree-tailcall.cc
! 7d7706188840901f4314a0d687878959  gcc/tree-vect-data-refs.cc
! 9af6431e06d74f6c7b96515d847275e3  gcc/tree-vect-generic.cc
! ddf8456ca0c7792c77c82ac7706664b6  gcc/tree-vect-loop-manip.cc
! 128d11471ab29f7ef8e8ed6d4f58d779  gcc/tree-vect-loop.cc
! 96827aa9c45bb072a1f886eb1646e078  gcc/tree-vect-patterns.cc
! e63fe21f69147c7b92f914e60a8efcec  gcc/tree-vect-slp-patterns.cc
! 603db802547524e83eec8c2cb2ae26d2  gcc/tree-vect-slp.cc
! 24b7908070bf0a85f485bd17f86b86bd  gcc/tree-vect-stmts.cc
! 17da0c4ee2c405d67d63509bd85f801c  gcc/tree-vector-builder.cc
! 81e7b3c9a18c29b53f3f017109c91f6f  gcc/tree-vector-builder.h
! 541c768983210e5d6b69b9ceeaf40e4b  gcc/tree-vectorizer.cc
! 5a1d9b1a4fd93a1dc9773d46eaa80403  gcc/tree-vectorizer.h
! 89443f1b171fee24a2d36f7d1af2b315  gcc/tree-vrp.cc
! 9cb72e4782bdb3fb2fb9a04498598bf1  gcc/tree-vrp.h
! 360b7d8d99d76f429bd81e9ef9ef6c0f  gcc/tree.cc
! 45808a76997a44962fa135c3a7de1ff8  gcc/tree.def
! dc44650b44ba563a79420acb9350ef88  gcc/tree.h
! 789a781bb4a16a840a4d12b33e5e41aa  gcc/treestruct.def
! 7176ab9942843346cd7a7e47f7b62463  gcc/tristate.cc
! 9b9356511a9a18b1a38ed98eb7a8d3e0  gcc/tristate.h
! beaaf57de01c41199e3b6a9eb24fb143  gcc/tsan.cc
! 20c3068b317a87ad36e2e439f2505566  gcc/tsan.h
! 114597ac7dc093c760e9fc3ea6b82138  gcc/tsystem.h
! 23d3ef3b350b5c0785589547a581b715  gcc/typeclass.h
! d38c58f87ee7ee53eb825a0444aea09b  gcc/typed-splay-tree.cc
! c8f92fd70553d3478d74451987ed8835  gcc/typed-splay-tree.h
! 6a8d8db3cf6d0d7de35a9c5f42e5c353  gcc/ubsan.cc
! e6a6b3805ac7207859f56a703a4cf905  gcc/ubsan.h
! b5748b6b0f57f1d91ae8016e87f5d411  gcc/valtrack.cc
! ad9b356abb114134e0ce58bf604c4a85  gcc/valtrack.h
! 1408b32cfec7495635634b9899a7d78f  gcc/value-pointer-equiv.cc
! 44e6a1bb37556d70ba9d6002c3d7eed5  gcc/value-pointer-equiv.h
! 9879ebb12be248532bb871efb1262695  gcc/value-prof.cc
! 69105a04a0bb6a23277ead5089fcaf5b  gcc/value-prof.h
! d338ccdbfad0f64ecbdd1b67c8277705  gcc/value-query.cc
! 36a906b07ce327d75362368644961a60  gcc/value-query.h
! bc26a3485cb0a269944b49b2427ca012  gcc/value-range-equiv.cc
! b6d9efd1a637bb7e7bb66614921055be  gcc/value-range-equiv.h
! 9ec3280a012fbd643f8fbbee8f79eeca  gcc/value-range.cc
! 473bc142d8c84cc76764637c005b943a  gcc/value-range.h
! 0b97f8d0a473dfb251707696057b82ef  gcc/value-relation.cc
! 8e00a37814d00e977bd4878c88c6b9f0  gcc/value-relation.h
! 93e740653e6cec3f6c4610b2fdee225a  gcc/var-tracking.cc
! a43d930bf398c1d80f810c78c61d532b  gcc/varasm.cc
! 8d61ef065460d6dd2c76f09bed5abdfa  gcc/varasm.h
! fded5307f938c647643e0c2583d58779  gcc/varpool.cc
! b027979c03d820b6ac30b5ae30e840ff  gcc/vec-perm-indices.cc
! 281330db6c511f58f6edfeef4b80d4c7  gcc/vec-perm-indices.h
! 63ef6df7c629b34ab57e8b344d7e2fa0  gcc/vec.cc
! de055551b4e5311e2996a0809ffd488c  gcc/vec.h
! ae4bf7b2b66afe5a84e12e143519e1ae  gcc/vector-builder.h
! 2093e44561adbeb3f7d73766864fdea3  gcc/vmsdbg.h
! e82106b55a955245568b40bbaf0fe295  gcc/vmsdbgout.cc
! 3ea99674c9c17a549d9e11d8845482ae  gcc/vr-values.cc
! c569eea2f11765b9f2dd3470d3bbbf4b  gcc/vr-values.h
! 48a8d117b1ce29d21f823ffaa413daf6  gcc/vtable-verify.cc
! 5f6e9817c9f19114ebcadfe909fac18e  gcc/vtable-verify.h
! 7f09c23c7d4c7c50c1a4e90c16dc32a8  gcc/warning-control.cc
! 3b1ed3ef99aaa2674aeab0b110aa6965  gcc/web.cc
! 23d5a7e5548f4e13fc245d606c148f40  gcc/wide-int-bitmask.h
! 483f48114286da1c540e3b6a9ec3e6b6  gcc/wide-int-print.cc
! 09dba6185099df41595ab2939afa51a2  gcc/wide-int-print.h
! 9f29dfb483ff6acccca94a6ec34b5e25  gcc/wide-int.cc
! e0eec42a4c843f3c3ea448e9f8e895f8  gcc/wide-int.h
! e82d97504c16e7a9d61318fafd536cac  gcc/xcoff.h
! fc8f6cd70740468b3d092d0a12d9c1b8  gcc/xcoffout.cc
! d675816050a9ff3c1178b9cdf507b9c2  gcc/xcoffout.h
! b8f422f712104bd18465868009ba1e38  gnattools/ChangeLog
! 3e149f46f7f39c4f49e3e3449af997a3  gnattools/Makefile.in
  8385a4d775aa1b9949c1f88488491c86  gnattools/configure
  1e063bb0b806e41cc0ed23d1b7047746  gnattools/configure.ac
! a34575f911b7ebdd126785695c535d1b  gotools/ChangeLog
! 5d56cc28c41dee982565dd2bb6835d75  gotools/Makefile.am
! 1b3e301307fb3c8ef2e668e88e9da768  gotools/Makefile.in
  7e23031e2e274aaa07b61c1e8f18dc99  gotools/README
  bd839a9d17f6121cfd663f099d0bf44d  gotools/aclocal.m4
  6f26693afa3dd1a6616f8bddb895d528  gotools/configure
*************** c4e8176c1964a5ebe0a55900f2141299  gotool
*** 86120,86182 ****
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! d73a46aa8d4299508a777584456b6e44  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
! 550446a6d9ed6d7ecce30d964b346154  include/ansidecl.h
! b9f2abdb484349c4674123c7937348fb  include/demangle.h
! 36f9e6d0629d5abb921fe12d1ebd322c  include/dwarf2.def
! 84da15b7173bb85a0c5be931dbeb86ac  include/dwarf2.h
! cf63094bf22d9945789fb5eb99e16204  include/dyn-string.h
! 0208ddd695d30d8a519e9ac558ef5246  include/environ.h
! 3c830221d2fb463489389738f4021831  include/fibheap.h
! 3e84df8867070decab68eea63baf91cb  include/filenames.h
! 32a3d8341842d6c3cf879ed7578ac3aa  include/floatformat.h
! 7299e7b04ae3dd7ecb2357ce812baf2a  include/fnmatch.h
! bce12aa2a51b4162cd398a8c80d77c37  include/gcc-c-fe.def
! 748edd6c360ae3ab2aab761325a68ee0  include/gcc-c-interface.h
! aa72131014cb42cf9f06cd0622518db1  include/gcc-cp-fe.def
! b01d8568e468e579200cddb30a97684c  include/gcc-cp-interface.h
! 0b58a20ef4011a4ff58b6fddffe34223  include/gcc-interface.h
! 76f12a415e388a53a4f895188e8b67ea  include/gdb/gdb-index.h
! 673b00ab02254434eb28f32a15e70804  include/getopt.h
! dc0f6894d9dc96cb763d0121873c131e  include/gomp-constants.h
! 4b71989ca2016baaaf164cb1b9c33963  include/hashtab.h
  18d01da8845d11d2091cf3787c4ad79e  include/hsa.h
  f9fafee2474590659930fb2d0db7be2e  include/hsa_ext_amd.h
  9df4701c7f8f25d502bdadccbc97581c  include/hsa_ext_image.h
! 8ae8428dba08592e4b719f15fffff419  include/leb128.h
! 8837022eb1ac008f1a0b030a2b1635b7  include/libiberty.h
! 56e5abb81ce54ebe81061bc8b3fba7ab  include/longlong.h
! 6039e970a7b769f662d1dce0c63cc9f3  include/lto-symtab.h
! 29d5e8f081b181a467ebc37a1b63c762  include/md5.h
! 1351e66680f0928aaa3a118205ee615d  include/objalloc.h
! f6123ff1a70c222e453bb58cd3dbae1a  include/obstack.h
! f3685cdab53fd84f5b57474df3827884  include/partition.h
! b377ba16f7c57a8aec6edaae0ced0649  include/plugin-api.h
! c99cf30bc3e8c92049b2460719059e79  include/safe-ctype.h
! c47ae7aad04ce95b918313be400ccc98  include/sha1.h
! 86a5c2e89e33eeae4aa9353da892e2df  include/simple-object.h
! fa5cfe4ddef53228a8dd91a9a020c2a8  include/sort.h
! 4d91d2d5df45664e971b892a2d9cfcfd  include/splay-tree.h
! 2ea663683f7b0e823eea7eb22e5067bb  include/symcat.h
! f1ca1f76f904a2e350d2370001e07a67  include/timeval-utils.h
! e58c74ae29d8b45747b53a32b29ba5af  include/unique-ptr.h
! 9e5dc14fb3b04ccfe8861042d7b1a6f2  include/vtv-change-permission.h
  53bdfdb5cd3c0c7831611602041cda52  include/xregex.h
! a19eadb3ab028fbbb684ab26b212fe84  include/xregex2.h
! 05cc8ec924c7145a48d1d059c0b58df2  include/xtensa-config.h
  361482dd6b5b5eb7090fff3986fba68a  install-sh
! 0cc3dde214d3eb99cf3b9c54dbbcff27  intl/ChangeLog
! ad7ef2b19b44e4d5518287805d6ded02  intl/Makefile.in
  6ec998bb4716c744bf8185e607f69301  intl/README
  76ca170a525d5b84d90f0478fe788931  intl/VERSION
  03740a87284033311c5cb780e5c23315  intl/aclocal.m4
  d4abe82ea322701d2385778a2fcd0804  intl/bindtextdom.c
  f9a9ff3ee0a9b0465351b384e430bec5  intl/config.h.in
  8a751062d7db9b6e8163667e5626fcb5  intl/config.intl.in
! 4a98ca39ab304dee43eb01d10fd44b20  intl/configure
! 706cb9e3fe029c5e68f5744619801b92  intl/configure.ac
  ff5c358b1507e45a2106b23b7e6c70a3  intl/dcgettext.c
  81b58accbd88cd8159471d322723c42d  intl/dcigettext.c
  0cfc94e602bc20d958f014c77ebf357c  intl/dcngettext.c
--- 91610,91674 ----
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! 80a1f5562bd2ea9965e40996b46f4589  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
! 8afc0abb1ece39cc1f45718fa5c20ac0  include/ansidecl.h
! b19cbd95793ced15cf5fc91d16f60a3c  include/btf.h
! 6433fd2c808648016969a7959b32130f  include/ctf.h
! 14047cb3b9297e90e5f16b47e680a7db  include/cuda/cuda.h
! 0164d85908e3d62f0e5264af0cd128d0  include/demangle.h
! a437a43331f66d999b9c2a499f8dd9c7  include/dwarf2.def
! 322808794435176bb04013fc620bad49  include/dwarf2.h
! 1de9390f3a14515b90109f09d63bcf4f  include/dyn-string.h
! a5ac7a0b67870c998075996c0c746d94  include/environ.h
! 15d4de8e1dfd652f3495c2ee9c4d5bb2  include/fibheap.h
! f7149d4f9352e8c38701cf27956587c9  include/filenames.h
! 480dad9ce8ba7a444fd6a7d4c36ed359  include/floatformat.h
! 3fe6b6f7ff376a6aecf1e526329cd6cd  include/fnmatch.h
! a6d5a36cdb66fc11c570ec284a44fa5e  include/gcc-c-fe.def
! 9b93a14e4c04cff385fe6532270859b6  include/gcc-c-interface.h
! 7b09e9dafbe9af869abfdb7cc2b74bd7  include/gcc-cp-fe.def
! b9a30cb8fdb7e63e2f5a13d267bcee6d  include/gcc-cp-interface.h
! a75f73ea006809f65b2095bb24b95971  include/gcc-interface.h
! 1696c449e92ccdf82954175387660baf  include/gdb/gdb-index.h
! 38132f07bb81bdddd57ae53d72157992  include/getopt.h
! 2d8b24dbf3927afb847f621007c65fa9  include/gomp-constants.h
! bbcb6abc7c6c234117e78191779f56c4  include/hashtab.h
  18d01da8845d11d2091cf3787c4ad79e  include/hsa.h
  f9fafee2474590659930fb2d0db7be2e  include/hsa_ext_amd.h
  9df4701c7f8f25d502bdadccbc97581c  include/hsa_ext_image.h
! 00743e7abd2be563c2232a46d38cb089  include/leb128.h
! 04de0e35eada6531c445da0cc936921b  include/libiberty.h
! c510507eefce8394b6bd18ac9c9fdaef  include/longlong.h
! 5f7207402b6041b37472e4cdc5a84857  include/lto-symtab.h
! e0d9f29af623aa33c5962a8d963e91d6  include/md5.h
! 314e28ac2f5b1fb51d8144db2fba9cd5  include/objalloc.h
! dbbfd72ba9e93162d628f063fbc298c6  include/obstack.h
! 36e440d23b9263f0f80185724f1a2178  include/partition.h
! 1838afcb6b4ef161bb225cc95ea64227  include/plugin-api.h
! 2eb786103b6f9fb9649f4a86b1e30596  include/safe-ctype.h
! 8596df9bfb7e5930f652ec111b56870f  include/sha1.h
! c0900a9b89969fe7e0d12dde3059bd5a  include/simple-object.h
! 63774b34dce1d02e242e40173990773f  include/sort.h
! b296ae2d4eca11865727c8e197700476  include/splay-tree.h
! cd16ad55bbf01b3bb6996909eee91a31  include/symcat.h
! e5fc6abe4c74977e3d48a002393b8c83  include/timeval-utils.h
! 76fa1c1391a29fe28ab3daa0296a3141  include/vtv-change-permission.h
  53bdfdb5cd3c0c7831611602041cda52  include/xregex.h
! 2f974ad6ac4ec364faad976d15b7e291  include/xregex2.h
! 5a08b4d212a5560e6dad2d8fc20d7128  include/xtensa-config.h
  361482dd6b5b5eb7090fff3986fba68a  install-sh
! 962c543cd48f84f108f65a70a3f6e6f1  intl/ChangeLog
! a5f61a727ebbc9d02c42160796629b91  intl/Makefile.in
  6ec998bb4716c744bf8185e607f69301  intl/README
  76ca170a525d5b84d90f0478fe788931  intl/VERSION
  03740a87284033311c5cb780e5c23315  intl/aclocal.m4
  d4abe82ea322701d2385778a2fcd0804  intl/bindtextdom.c
  f9a9ff3ee0a9b0465351b384e430bec5  intl/config.h.in
  8a751062d7db9b6e8163667e5626fcb5  intl/config.intl.in
! 7ab568c03cf114dd83d1eaa20450c8e4  intl/configure
! c9c87f4eb11c35c58d88fb2a395cb0e4  intl/configure.ac
  ff5c358b1507e45a2106b23b7e6c70a3  intl/dcgettext.c
  81b58accbd88cd8159471d322723c42d  intl/dcigettext.c
  0cfc94e602bc20d958f014c77ebf357c  intl/dcngettext.c
*************** ec38b8a64a735196854a8f7d76b79a78  intl/p
*** 86210,86279 ****
  b4758a0194e3e41362b939911472ce62  intl/relocatable.c
  bedade7bcfc3bc5eb09a2c6844f637f3  intl/relocatable.h
  43f287d082528203fc85c1d2d81bf30d  intl/textdomain.c
! bd5afc89cd9c4aed2a3b07f7c35b3ebe  libada/ChangeLog
! 84bf37346561835ab6fb79f3753dbf61  libada/Makefile.in
  c851e0f50ad5e334f1cdf3b8c0bae3e2  libada/configure
! ad0c7ec998fb800e00bc645459274350  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! c5486c19736406439617d61bf5149484  libatomic/ChangeLog
! d910fab8524c7ab8918b567931a14133  libatomic/Makefile.am
  8f480fdd121c7e44c048fec76c598b1f  libatomic/Makefile.in
! 879263fa8d462b018b9a483d6ac68e45  libatomic/acinclude.m4
  d93a7644df6ecd2eda448dcb5b1baeb3  libatomic/aclocal.m4
  b741b38c451feebdcd9aedce6e37b702  libatomic/auto-config.h.in
! 0dfac83b06767f0706940fee0a1e29e5  libatomic/cas_n.c
! 9b15bf6c20b3a01290d8f5964cac5041  libatomic/config/arm/arm-config.h
! 920f6c9a9b64978191712667491d2e19  libatomic/config/arm/exch_n.c
  6b272347b6495b829ff036ddf4d65e93  libatomic/config/arm/host-config.h
  db43cf5a187a91251ef3198570679f95  libatomic/config/ia64/host-config.h
! cbf45d9ef0beca8189dca5a0677f51c8  libatomic/config/linux/aarch64/host-config.h
! 514bea4f5dfb07992e062389ac581bbe  libatomic/config/linux/arm/host-config.h
! 45f052212c23517fe09e2ab6025627f4  libatomic/config/linux/arm/init.c
! 98d162de0711194d4ffaafb4470d6e80  libatomic/config/linux/arm/load_n.c
! b2243dc22cf112c0b236469f403c0342  libatomic/config/linux/arm/store_n.c
! e2be60cf185c2bc86a3fb6efecd31da5  libatomic/config/mingw/host-config.h
! 686904df2ca95b9bbdba6673545f1ea8  libatomic/config/mingw/lock.c
! c37d3f91de16c482e100722f10f74959  libatomic/config/nvptx/host-config.h
! 2a25936bdb78024c2cb6d33895b1af6e  libatomic/config/nvptx/lock.c
! e5afe77110b6d4c991ded92ab19ff55f  libatomic/config/posix/host-config.h
! 09129bb16d2f1235b2b717839d7acfb3  libatomic/config/posix/lock.c
  d04f86e742ddfedb71fb4a3d0ceede39  libatomic/config/powerpc/host-config.h
! ff19d9adec40aace68f117295ca8e962  libatomic/config/rtems/host-config.h
! d162950eb155d3f7b71fa7fd06738e07  libatomic/config/rtems/lock.c
! dde9dd7b7e923b04f6925736c96905aa  libatomic/config/s390/exch_n.c
  ed3d69739cb2f35407547229f0393f92  libatomic/config/t-aix
! ad77cb9ee31bb899efbe3bbf69552fd8  libatomic/config/x86/fenv.c
! ae940a7b89ae9316379daa6d06c11015  libatomic/config/x86/host-config.h
! 516566ff2313eff082a068934d1ddd1c  libatomic/config/x86/init.c
! 1a3caf1a22e09fc89766313026e541e3  libatomic/configure
! 009993f4c4928e75d0ab6d3d73aab846  libatomic/configure.ac
! 87f2fe7e2bce59d09f679252f292d515  libatomic/configure.tgt
! db08dc16881fd6daa9ecf00a7c8295c6  libatomic/exch_n.c
! dd13a88b58fa0a020ba4360094fcb212  libatomic/fadd_n.c
  ee6f02fad9bd551a906477f16740578f  libatomic/fand_n.c
! 7b08a6e5f10aa5b235b042c333f150de  libatomic/fence.c
! 1a75b5940816c57b7c8f0edd86bde997  libatomic/fenv.c
  2939db87e049993b583497188f079e6d  libatomic/fior_n.c
! ae331390ab86125f1bc84bd9cf4a04f4  libatomic/flag.c
  b3ccae58518e27bb730ed84c99a2eb0c  libatomic/fnand_n.c
! a850a59372bbfe9fa394182b171f163c  libatomic/fop_n.c
  834a4e99e9b5231aaa54e4802aecb241  libatomic/fsub_n.c
  fb7579412eac2bf65459985ea4c7f320  libatomic/fxor_n.c
! 6f489ba5a865dec6646d91579b6029bc  libatomic/gcas.c
! 48116181d56d07d23893259d7f73fd8f  libatomic/gexch.c
! 878b8d1f170069c64294cf9a0b164af6  libatomic/glfree.c
! 691ded02e29433a55ad8f4a626f02505  libatomic/gload.c
! 6de800d761c081449ad4bd5c3596a727  libatomic/gstore.c
! 39014a8e7c17aac084e0dfc93f451a18  libatomic/host-config.h
  0e7ef9ed2b60ec1c9afc38701d815f6c  libatomic/init.c
  2fe463a1aa0855eab0961f927f300752  libatomic/libatomic.map
! 359aa84b5950b08632d9ce2e383b1aff  libatomic/libatomic_i.h
! 1d1b8d6de63d483c6a4ec28ee0c8f4bd  libatomic/load_n.c
! c4956ceab834f8f4a07f1a8b92cd97dd  libatomic/store_n.c
! a2695fe2e0d0eda34a4263ec79c6413c  libatomic/tas_n.c
  8772872393a7b4f226a2ff99cd0767b9  libatomic/testsuite/Makefile.am
  cf82f0c401eb889e2309404fa133f087  libatomic/testsuite/Makefile.in
! c09f570c398098186715184415926c1f  libatomic/testsuite/config/default.exp
  3e77a79fd1e00a1f4e5fbf507474e1e5  libatomic/testsuite/lib/libatomic-dg.exp
  930ac630fd95841528d4df333d275f9a  libatomic/testsuite/lib/libatomic.exp
  97fdc33cc25788d4b9dc1db6aefed760  libatomic/testsuite/libatomic-site-extra.exp.in
--- 91702,91771 ----
  b4758a0194e3e41362b939911472ce62  intl/relocatable.c
  bedade7bcfc3bc5eb09a2c6844f637f3  intl/relocatable.h
  43f287d082528203fc85c1d2d81bf30d  intl/textdomain.c
! 199f9a8eae8f079b09bc88bf29ec5d0b  libada/ChangeLog
! 4a09495968cafbde4305e247d508584d  libada/Makefile.in
  c851e0f50ad5e334f1cdf3b8c0bae3e2  libada/configure
! 7eed03bb14fc3b93e0ca88cd5bdac93d  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! c9597205bc9631a3a917cca79d2d8082  libatomic/ChangeLog
! 21f5e5567f586aa064e67dac9e843ed4  libatomic/Makefile.am
  8f480fdd121c7e44c048fec76c598b1f  libatomic/Makefile.in
! 04a8eb275561484cf0d6f8c459a38177  libatomic/acinclude.m4
  d93a7644df6ecd2eda448dcb5b1baeb3  libatomic/aclocal.m4
  b741b38c451feebdcd9aedce6e37b702  libatomic/auto-config.h.in
! cc43d3da3323ebb864e378192abf623b  libatomic/cas_n.c
! f2f0955b4b2e72c24386328305c9fd50  libatomic/config/arm/arm-config.h
! 6724325dcd24a0cc1eafb6f0da243043  libatomic/config/arm/exch_n.c
  6b272347b6495b829ff036ddf4d65e93  libatomic/config/arm/host-config.h
  db43cf5a187a91251ef3198570679f95  libatomic/config/ia64/host-config.h
! c5b190c52af75114686644e99c4b6506  libatomic/config/linux/aarch64/host-config.h
! d00903d83ee36612295da93aa67615f8  libatomic/config/linux/arm/host-config.h
! 4733746f5ab1d509a77b0eaeb6400e5c  libatomic/config/linux/arm/init.c
! ef4e81861bd67443d83d7191338a1ca9  libatomic/config/linux/arm/load_n.c
! d27e0c8119c16d2f8df89f1d92f8244c  libatomic/config/linux/arm/store_n.c
! cf49fce1f1deab0447bcc10681e0a5bf  libatomic/config/mingw/host-config.h
! f74a97c64676d9c70c8fa18bf098663a  libatomic/config/mingw/lock.c
! d625c1b7d1832a18fe30ffa767a439c6  libatomic/config/nvptx/host-config.h
! 14d98705c3c9646ace69bf0ece39df86  libatomic/config/nvptx/lock.c
! 872ed5850c2201837008ffaf58c8f5d6  libatomic/config/posix/host-config.h
! f55b04d5b2ae08487d085c85b72d8bf7  libatomic/config/posix/lock.c
  d04f86e742ddfedb71fb4a3d0ceede39  libatomic/config/powerpc/host-config.h
! 2685c416d9d43704346760a27582ebcc  libatomic/config/rtems/host-config.h
! ad2d20b998e3fcbbd3e3a20240b92690  libatomic/config/rtems/lock.c
! e37b2339ee0883954c051aa8a0c07e95  libatomic/config/s390/exch_n.c
  ed3d69739cb2f35407547229f0393f92  libatomic/config/t-aix
! 85d55cac5def9acaf8e0756bd88c8729  libatomic/config/x86/fenv.c
! 15896d8a75f9ebcabcdcae306a69b73c  libatomic/config/x86/host-config.h
! 05f622cf0d4c0835d0b1344823768127  libatomic/config/x86/init.c
! 2797d4d7172fb44898092068c981e7b8  libatomic/configure
! 1c45079ac9287898fbaa72bbcdd6aa88  libatomic/configure.ac
! daef96126cb6545af77cca015f70f444  libatomic/configure.tgt
! eb9949e6b55762d5ca8097d87a0ecde6  libatomic/exch_n.c
! aca506bce8170dc1a5611bba2713261c  libatomic/fadd_n.c
  ee6f02fad9bd551a906477f16740578f  libatomic/fand_n.c
! 281f1f39791d26a4b400e2248d8a38ae  libatomic/fence.c
! 900663bf922f0466524c7a0f0539ba70  libatomic/fenv.c
  2939db87e049993b583497188f079e6d  libatomic/fior_n.c
! 2b2007c79f24eaa19e04b256d28d3e3c  libatomic/flag.c
  b3ccae58518e27bb730ed84c99a2eb0c  libatomic/fnand_n.c
! 20d2f71ed22a322eea9e575a2ac2a6c5  libatomic/fop_n.c
  834a4e99e9b5231aaa54e4802aecb241  libatomic/fsub_n.c
  fb7579412eac2bf65459985ea4c7f320  libatomic/fxor_n.c
! 822e8b900dae38579b88b5b258dc757b  libatomic/gcas.c
! 0a615526a1375d5991e35f665b7d769b  libatomic/gexch.c
! 3104b550aa1ff9dbcf88ac0046664bf1  libatomic/glfree.c
! c508d202179577507775b3546137e9bc  libatomic/gload.c
! ff11e38e794f4b444608960e28408f54  libatomic/gstore.c
! e24ec62f319ac2ab4d59e16ae03bcbeb  libatomic/host-config.h
  0e7ef9ed2b60ec1c9afc38701d815f6c  libatomic/init.c
  2fe463a1aa0855eab0961f927f300752  libatomic/libatomic.map
! f35f615cdadd769aaffec129d390f446  libatomic/libatomic_i.h
! 88d230edd23c5d152f266722c2014aa3  libatomic/load_n.c
! 4e18ed22cf21e8d8fe69119064afaee6  libatomic/store_n.c
! 78bc48d9aebef28e1b428def172cf7c1  libatomic/tas_n.c
  8772872393a7b4f226a2ff99cd0767b9  libatomic/testsuite/Makefile.am
  cf82f0c401eb889e2309404fa133f087  libatomic/testsuite/Makefile.in
! 88850c9ff315083f74a05c36039af35c  libatomic/testsuite/config/default.exp
  3e77a79fd1e00a1f4e5fbf507474e1e5  libatomic/testsuite/lib/libatomic-dg.exp
  930ac630fd95841528d4df333d275f9a  libatomic/testsuite/lib/libatomic.exp
  97fdc33cc25788d4b9dc1db6aefed760  libatomic/testsuite/libatomic-site-extra.exp.in
*************** c03a072efac9b30f8f8429ac52fd246b  libato
*** 86305,86393 ****
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! af231953141eb286b0b8dd94a2bd4dae  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
! e2733ae499e3face714f963e5163ef66  libbacktrace/Makefile.am
! f5ab4b9f2111a21142693282701ca531  libbacktrace/Makefile.in
  1987c0495aeee1bc47709f399772173b  libbacktrace/README
  9535fdd392305d7ecfe0d5a189cbd85b  libbacktrace/aclocal.m4
! 56c517f9531243411b8204694d2cdb93  libbacktrace/alloc.c
! cec2a0742e0d0695ab075e3ce56c6033  libbacktrace/allocfail.c
! 9668d8b48e9a11bf52afc5c0ff036490  libbacktrace/allocfail.sh
! b2284fe811383cab42583ff1ed4d5f3c  libbacktrace/atomic.c
! a281c599f8943bea46ec54c1ac4f5b0d  libbacktrace/backtrace-supported.h.in
! f0cc46ae18f6da534e37ee98f28e087a  libbacktrace/backtrace.c
! 1b62940ba9568c49550af0f86854ae1e  libbacktrace/backtrace.h
! 835a434f8fcb1a60ddb9eebcd68408e3  libbacktrace/btest.c
  d80381bdd74336b121a4f087efc21dbb  libbacktrace/config.h.in
! d1418b611141fa519422bf7c3b23bd4f  libbacktrace/configure
! 2006d2c63ba78e88d0197518e9f1da39  libbacktrace/configure.ac
! 23e38004a377b1c44be693ecc4df9eab  libbacktrace/dwarf.c
! 76c5e0d3a0d54dcbcb68302b66436bd3  libbacktrace/edtest.c
! 95a5d42360102b1b5c0929af9f25b1c3  libbacktrace/edtest2.c
! aa01992f9b2d8f4b4de2d4d9a292de79  libbacktrace/elf.c
! 49a265e368aee7757657b72d6489a1a4  libbacktrace/fileline.c
  4fefdf2c043fdefb2736e03efee4b2c3  libbacktrace/filetype.awk
! bdfe9d52f159503041f09dbd8f9abc63  libbacktrace/install-debuginfo-for-buildid.sh.in
! 1012416ae0a0300da967a330487fa352  libbacktrace/instrumented_alloc.c
! 3eb7f72d336c2f54c770eca0fb1bd572  libbacktrace/internal.h
! 746411f9fc283ffcfe26ec9c90bbb5de  libbacktrace/macho.c
! 6931de79a2062859253c2736fb416d98  libbacktrace/mmap.c
! 305a4af3007aac6ce2d73ff628878557  libbacktrace/mmapio.c
! 0bd2093fa50bb79c51575c9f64c7c738  libbacktrace/mtest.c
! c3813d2480fe62a7927b5e5c9f69df0e  libbacktrace/nounwind.c
! 8c83b8bb433653b5dcb6997bf891fa80  libbacktrace/pecoff.c
! 77350140806506cb9d153a4e8ee2fc41  libbacktrace/posix.c
! f2ca14c6e8987e23e11d1635977b01d6  libbacktrace/print.c
! 753a78be14d2826ff76815808190f8dd  libbacktrace/read.c
! 0009b5571bfe02444c9b93c7b16ddeca  libbacktrace/simple.c
! dc819c0d255a1c979d7525947c5345bd  libbacktrace/sort.c
! 9aa300402550fda996eff1835bb924f9  libbacktrace/state.c
! 7d77a598133806ca3761aa7aadd104e7  libbacktrace/stest.c
! 56fa2775c3d1b5c26d8d1f95b41107e1  libbacktrace/test_format.c
! 23ac421e3a3e85ccb4f98d66d25ee8a4  libbacktrace/testlib.c
! 8d7509d08e22d36ae147545e1fb63f03  libbacktrace/testlib.h
! e1c655e8134d12f3dbd29ce427d37cea  libbacktrace/ttest.c
! a1a0a081f4a744549061bcb3714c3dad  libbacktrace/unittest.c
! 6fe372ba8f3db2f75f9a67efd6d5a0f6  libbacktrace/unknown.c
! 45e5c08b384a557511236842576c4857  libbacktrace/xcoff.c
! 16559a9b859947ea3f119724e6184a22  libbacktrace/xztest.c
! b4592ed6fe2affe39672dd913198f71a  libbacktrace/ztest.c
! 6075b1d96c0ee6c5bd58b9e0a33b6398  libcc1/ChangeLog
! 28f4a58e6f8e07b09cd25b0a1ad72059  libcc1/Makefile.am
! a02f5370fb2d8bff9e13e39745a680ca  libcc1/Makefile.in
  b39668f1b706dbfe7203b3cfa277b792  libcc1/aclocal.m4
! 172f476a3d4be4642f41572fcd6af466  libcc1/callbacks.cc
! dacbc72f845a0578ce36bfcb8cddb3ba  libcc1/callbacks.hh
  9d81ce1461f24e4af7c8639d94f06789  libcc1/cc1plugin-config.h.in
! 6ac121324d6bdb3b24f32498fb21206a  libcc1/compiler-name.hh
! 60c7d2db4e016df447e3b392da88eae6  libcc1/configure
! c3e858a4dfbf81a4b0dd9dd7319ec6b3  libcc1/configure.ac
! 14befdb07be57673efb6ecf1ae4e6d2c  libcc1/connection.cc
! 29823d322ca618896b7fe540ff3bd581  libcc1/connection.hh
! f72f20a90bbc3ff8d1128ff4d5858f29  libcc1/findcomp.cc
! 24b42286d357a040ee0f3f5c70a56510  libcc1/findcomp.hh
! 733552376e05d220031ad362a595f923  libcc1/libcc1.cc
  99b3a25ce17ed584d9f0aa42b4713938  libcc1/libcc1.sym
! 7f630591971dc62afbf40d26ddd77f43  libcc1/libcc1plugin.cc
  75503db6a0981a95d9c29d9607b29380  libcc1/libcc1plugin.sym
! af2fd951b0ff389a2208f571ff1fd18f  libcc1/libcp1.cc
! eb1415b58ee61832c9463ccb94f9516b  libcc1/libcp1plugin.cc
  75503db6a0981a95d9c29d9607b29380  libcc1/libcp1plugin.sym
! 08c5e104e357fd1be6a89f338ed23f19  libcc1/marshall-c.hh
! 47e2a7ce854718fa1727ef8f89ef6ad8  libcc1/marshall-cp.hh
! fb51c9a4140e34bd9dbace50be601932  libcc1/marshall.cc
! 583268beb191dea4c99d16ae67e1c006  libcc1/marshall.hh
! f90d0afb8181476bb21f4e8aa46c74dd  libcc1/names.cc
! 53a1b4709c3e05eedb8415fd12a89bc6  libcc1/names.hh
! f5e2a580518faca998674de55158241d  libcc1/rpc.hh
! d7011f3caeeeb336058853a2a6ae7759  libcc1/status.hh
  8e32b4f309146e8842db7a077d77be28  libcody/CMakeLists.txt
  c96a56ec7f0400e30e99a9aa445e0425  libcody/CODING.md
  b5243c8c76fc965a409394a30679e613  libcody/CONTRIB.md
! 73836cc08c51d197e88a2b6679e9a291  libcody/ChangeLog
  86d3f3a95c324c9479bd8986968f4327  libcody/LICENSE
! 3d4a4494284f7f6d717caade46832e87  libcody/Makefile.in
  ca1c6fe3df5427016005ce753c73d454  libcody/README.md
  99ad81d536fef63b80b7f776f0dec53c  libcody/buffer.cc
  69dd1db758b0ea369d20d7331d889ef5  libcody/client.cc
--- 91797,91890 ----
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! 0a35d276687b391dc2be8713e3ac6e34  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
! 77c51b931c509c106006d48ecb7e30a2  libbacktrace/Makefile.am
! d0c41a95e9b6adcd3647ee458f392892  libbacktrace/Makefile.in
  1987c0495aeee1bc47709f399772173b  libbacktrace/README
  9535fdd392305d7ecfe0d5a189cbd85b  libbacktrace/aclocal.m4
! d3f68b9f9fda74fd4795ad871ac611bf  libbacktrace/alloc.c
! 07f9781de4778201637c24be1ec093a9  libbacktrace/allocfail.c
! 8288951045fc90ec3b44fb6fffafc877  libbacktrace/allocfail.sh
! 5083206713c4e0a36c4bafd3d2f1b81e  libbacktrace/atomic.c
! 891056bfaefaf7f2c85d1ea58884c4e2  libbacktrace/backtrace-supported.h.in
! c3dd22be35f6839567ef314b2de6e0fe  libbacktrace/backtrace.c
! 885265981a77c08a412157716c6263ba  libbacktrace/backtrace.h
! bcb151ba9759753058f79a2ecdf8ae4e  libbacktrace/btest.c
  d80381bdd74336b121a4f087efc21dbb  libbacktrace/config.h.in
! 3ec75f7fc12e032e65203a5c07566450  libbacktrace/configure
! 13504e078ff0cc48b953f78869e13a5d  libbacktrace/configure.ac
! 181424f543177eb964cd269ae19d0a52  libbacktrace/dwarf.c
! 72f89437088c5bade5378ddf6b6a5aa8  libbacktrace/edtest.c
! 740c93fc7a3edd8993bc435d13fb819b  libbacktrace/edtest2.c
! fc2ff7336da303d175efdac0a6f46075  libbacktrace/elf.c
! d001c61d4c712f0175219876a79951cc  libbacktrace/fileline.c
  4fefdf2c043fdefb2736e03efee4b2c3  libbacktrace/filetype.awk
! 1b119c583c86f2bcd4fe07c0fde84a9a  libbacktrace/install-debuginfo-for-buildid.sh.in
! 64a8a7413867f8a0844248e523b9d3b2  libbacktrace/instrumented_alloc.c
! a68f98dfe4afb7b9a20502a6561286be  libbacktrace/internal.h
! 6cf29a76f9a05c90007e72579627989a  libbacktrace/macho.c
! d1e7d60fc7695adc7f56780e496f281c  libbacktrace/mmap.c
! 5cfa64b6c98605608a279c0605d47349  libbacktrace/mmapio.c
! 5fa19cde7c2b905cd1884f487ac1bd7c  libbacktrace/mtest.c
! e1373e20793eeaba39a2631aff7a1dd6  libbacktrace/nounwind.c
! 702034a7f92f10a9ca9ec100288f20de  libbacktrace/pecoff.c
! 4336bc8862faeff512309bb35980a799  libbacktrace/posix.c
! 247cdcbbcf5072634d3eeca4c0d6b58a  libbacktrace/print.c
! ffc9fc9884b1dec1a2b1d7b6e4d9eefd  libbacktrace/read.c
! cdf24c89f15d6e5b31a7c346ecc0d06e  libbacktrace/simple.c
! ab3b17364d1bc634c888b947a70e29fe  libbacktrace/sort.c
! 81e832e0838dcbe975a4e8cd36736387  libbacktrace/state.c
! 384ee0f93e9b83fe7a80fc5dd89f42c9  libbacktrace/stest.c
! 66624cb13bdcd12546026339d18f4068  libbacktrace/test_format.c
! 2701c15ce4cdb8fcb2082adbb2280a8f  libbacktrace/testlib.c
! 85bae130ed0b3ab515ded2cc9d98315e  libbacktrace/testlib.h
! fbe995bcdcf97bf120f47421e28797d7  libbacktrace/ttest.c
! ef82780a07b004c254451fc3a09250dd  libbacktrace/unittest.c
! 02d4e3daee0b1287ee78b1d122eb249f  libbacktrace/unknown.c
! 3c331b1a8a552d16255da8a5927b45a3  libbacktrace/xcoff.c
! cb6ac36c0dd658645079581b8ed02ab0  libbacktrace/xztest.c
! a8507bf3a9e7e68d9aa1a4154d7797ed  libbacktrace/ztest.c
! 16b370c3c614c6d8595586ae2e2a9ac6  libcc1/ChangeLog
! 745ddfe6eed3591d250a7d36011bcc81  libcc1/Makefile.am
! 4c0714d9e0254b52de979d8acb09c146  libcc1/Makefile.in
  b39668f1b706dbfe7203b3cfa277b792  libcc1/aclocal.m4
! 41ff53908c894e13c66cadd5e4dcfd0a  libcc1/callbacks.cc
! a805778639ec8a3d107e9cc2bce18394  libcc1/callbacks.hh
  9d81ce1461f24e4af7c8639d94f06789  libcc1/cc1plugin-config.h.in
! a29ed2716c7610b2acf1ad27949c803f  libcc1/compiler-name.hh
! 2c33f41d692f12bc5c9b6c616cf04ebb  libcc1/compiler.cc
! cdba566ca0809f7b369ef688205319cb  libcc1/compiler.hh
! 708cab96d5c060b108341f26412e7bd3  libcc1/configure
! 359a4143a87ad019fd32831deae070f6  libcc1/configure.ac
! c7708e3d0d226254d1d38736274344c5  libcc1/connection.cc
! dda0894e1865dfd5d96ddc585ad40b22  libcc1/connection.hh
! 8f0c3d783aee46b64bf8ccfbfa04e903  libcc1/context.cc
! 846b3d90b0136828e3ce0cc325a3d0ab  libcc1/context.hh
! 610dabfc22e0d40c6ed9de01fff9c616  libcc1/deleter.hh
! f09f79b0ab5a4bb38091f03d9e2eeb3e  libcc1/findcomp.cc
! dc912c004adc24445847b1ab9a5e3cfe  libcc1/findcomp.hh
! 3d6bd13fe6e7b16d5cdb484b69befcc0  libcc1/gdbctx.hh
! 15c340f9583b429a5f046a42a3459d80  libcc1/libcc1.cc
  99b3a25ce17ed584d9f0aa42b4713938  libcc1/libcc1.sym
! 3a83465910a643ac7697d8258a4984e7  libcc1/libcc1plugin.cc
  75503db6a0981a95d9c29d9607b29380  libcc1/libcc1plugin.sym
! b529745bee556d9b313b6d95b0b4a86b  libcc1/libcp1.cc
! 6760a1bfaf213f2d82cc7bf55b369a1f  libcc1/libcp1plugin.cc
  75503db6a0981a95d9c29d9607b29380  libcc1/libcp1plugin.sym
! e8e40807807aef0dfd3ba1f577779fc3  libcc1/marshall-cp.hh
! 66b3f0032468a289cdaf735dff4cd2b4  libcc1/marshall.cc
! aac6ed80ed928d1a88f39c38a5f63d3f  libcc1/marshall.hh
! 28623045d84c1d6b8e3d7829fb01e446  libcc1/names.cc
! 065c98255b3a9ee6ee9eada27e8dac15  libcc1/names.hh
! d4ee807c6a65de91a4e770fdbf7781b7  libcc1/rpc.hh
! b69641cecc09e16fc04d93dc2ad3be4d  libcc1/status.hh
  8e32b4f309146e8842db7a077d77be28  libcody/CMakeLists.txt
  c96a56ec7f0400e30e99a9aa445e0425  libcody/CODING.md
  b5243c8c76fc965a409394a30679e613  libcody/CONTRIB.md
! d8590885a72f4c57fe2a8b0724416818  libcody/ChangeLog
  86d3f3a95c324c9479bd8986968f4327  libcody/LICENSE
! 078d1fd2b3c40db6c184e4c3833bc8e4  libcody/Makefile.in
  ca1c6fe3df5427016005ce753c73d454  libcody/README.md
  99ad81d536fef63b80b7f776f0dec53c  libcody/buffer.cc
  69dd1db758b0ea369d20d7331d889ef5  libcody/client.cc
*************** a003d1057213ab79099f7bdbea631d9e  libcod
*** 86399,86668 ****
  a893e51c81e1227e5b61ea6118c64f66  libcody/configure.ac
  e34ecf203bf98854eaf6c3239f1f4bb6  libcody/fatal.cc
  da08ac0363d79421e125106469933625  libcody/internal.hh
! 5c2a957237b057cd59861013391e1ae1  libcody/netclient.cc
! a1b928d660ba86d7133b5ee270e45bcc  libcody/netserver.cc
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  b1f3850fc5ac62999d1e124aa6f76531  libcody/server.cc
! e9528382b04de8e8b2951f52942d2c51  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
! 93f0c1663de0a7f51de84bcf52cf415a  libcpp/Makefile.in
  9d15bb14e9ac1a74366e673ea260722e  libcpp/aclocal.m4
! aa753fa10493688739205dff0d332e7b  libcpp/charset.c
! a82e3eb1d8561484e9ba80fe49aaa3d2  libcpp/config.in
! d8b25b32c46363f3c8d928ff9659642f  libcpp/configure
! ba01f7813ce714bfa7427ced165ee873  libcpp/configure.ac
! daafcf78bfd2e318f5c757e3d61bd1ed  libcpp/directives.c
! a66a22409e4a783d7044f888621c8bc2  libcpp/errors.c
! 663c725deffa3329ae6a2554c1e7e64f  libcpp/expr.c
! 317ee9a4d4fd5e7d914307f5ba7151ff  libcpp/files.c
  d5218c1d5fc8cde726dc168fafef10a7  libcpp/generated_cpp_wcwidth.h
! 0b7cb9146c5ba48f860378f633064ffc  libcpp/identifiers.c
! 8c5e45738179c971cfcff84b10b932f9  libcpp/include/cpplib.h
! 7f7df25c19a9fe3179b73a064ed5a6d4  libcpp/include/line-map.h
! bb66fcb7788c801156bffbd2e7ef157b  libcpp/include/mkdeps.h
! 3be98d97c10d140ead8129799fb0204f  libcpp/include/symtab.h
! 7cc3b270970c81684bb50c91310d8b34  libcpp/init.c
! 6502fcc1e9f6fc8357698e9717588e3c  libcpp/internal.h
! 4ab22ed865a7d5de170fcae8485bdfe3  libcpp/lex.c
! 0de7096eac026f74c1bfe8a23f629369  libcpp/line-map.c
  46a07100f95f5e354c7e25cd19d26884  libcpp/location-example.txt
! bc0fe66954c989fdf43e0bbe096954b5  libcpp/macro.c
! a8704715c342e0c595438ec99b83299f  libcpp/makeucnid.c
! 016253cecf75a29fd5f5075b866cca1f  libcpp/mkdeps.c
! 944a753ccf1b023047aaed1f1f362bec  libcpp/pch.c
! 66d04d8bc89629cd6ca2820ce59032c3  libcpp/po/ChangeLog
! 236a7764238de3aa208e3a857c56f478  libcpp/po/be.gmo
! ede9d45d28b1c1cb82c92ff039a45d66  libcpp/po/be.po
! a64f63d1193f804860308855177c5f6a  libcpp/po/ca.gmo
! 661a2a866dc56c1a894788537435bea8  libcpp/po/ca.po
! f1dc3523755bc6f47ddfacab38441b1f  libcpp/po/cpplib.pot
! b162dd5957ef5d738de514a988a189d0  libcpp/po/da.gmo
! 1f79bdfe73ba821e9ac64b2aca257020  libcpp/po/da.po
! c5ea8e4046911f2f4e5ad4f41cac1a88  libcpp/po/de.gmo
! 8a777682366a5c424abca7a8636921c2  libcpp/po/de.po
! e0c8ada187620b9ddd9901f9f12e343a  libcpp/po/el.gmo
! b4048e7f9401f622802f1cd0a0657d9f  libcpp/po/el.po
! 170885e2a5084d5d82e7f9cf125c64a1  libcpp/po/eo.gmo
! 02dccd0724f0195daab312995aaf96ae  libcpp/po/eo.po
! bec1dcdabfb941f22745ee5db18ffa10  libcpp/po/es.gmo
! fe4e1329bff7a40c9ef6a6d766d38b8a  libcpp/po/es.po
! ef28d2d4022e01cb4c1c5db2c8bae98a  libcpp/po/fi.gmo
! a5e44962ffb640b55034fe54829cdd8b  libcpp/po/fi.po
! e978fc62eb49da7c4f54e95053c5168d  libcpp/po/fr.gmo
! b44b871232c05c547327e53625de659a  libcpp/po/fr.po
! 18bde1296a2ffa06989d7ea9d457cef8  libcpp/po/id.gmo
! 919be9b9be39b7fbbf52ac8e6f29e6a1  libcpp/po/id.po
! 7e86ebfd3138f73b03c11d5bd04b68fe  libcpp/po/ja.gmo
! f3c777c011af107528f4daf1d7370c90  libcpp/po/ja.po
! 7bee17aaf9ab003fd6c7bd8fc0cd9c46  libcpp/po/nl.gmo
! 83afe1f8f6162787398f4e9271be2b42  libcpp/po/nl.po
! b729260d109a70c4f5676a8ed1cd2f59  libcpp/po/pt_BR.gmo
! 7ac02fef46b12510f573a74afe9eff76  libcpp/po/pt_BR.po
! 9cbb5c69b9fad6b5a320eb4dd4e3654d  libcpp/po/ru.gmo
! a31e839860fab8f15054654bcc770330  libcpp/po/ru.po
! fa34f36a073e93adc873bb2cbb60793f  libcpp/po/sr.gmo
! e761139b516ef84d00aadc7648ae9385  libcpp/po/sr.po
! 2e8eff0c59867cae6215bb17aac9750f  libcpp/po/sv.gmo
! e330b65b8b8cc5503c10139a1e08288f  libcpp/po/sv.po
! 8cc505f4d4fbb25c03ae9fb39e617758  libcpp/po/tr.gmo
! 8e45120e673c487fe4ddeed781fe466a  libcpp/po/tr.po
! 0b79d054c55d8f6e1e01a49fa70c55e9  libcpp/po/uk.gmo
! b29d43815c4cd5e5f0b65347b10f2fd1  libcpp/po/uk.po
! 9c3dd6e01885621f132865f13af30518  libcpp/po/vi.gmo
! a399f0d8175c303ca191f225769c29d5  libcpp/po/vi.po
! 234f1b6d2ea5dc76144681f6fb33f98e  libcpp/po/zh_CN.gmo
! db8c7804a98ddb36d93416c2e7dbae28  libcpp/po/zh_CN.po
! 7caadacace180fe8dd77ee4933d095e1  libcpp/po/zh_TW.gmo
! b1d35920357f66d419921af6733f1958  libcpp/po/zh_TW.po
! bcbe0b107dacf31d1cf1ca1261d43f1b  libcpp/symtab.c
! 2de988f98c545db28acb758ca1a62489  libcpp/system.h
! 8d19e14186220b9cbb2f720d799b669e  libcpp/traditional.c
! 56610cf3fd7d260581ebd54124f17a78  libcpp/ucnid.h
! 89258efea2d9a909c625ed72b6acbd8c  libcpp/ucnid.tab
  a6c2b3de06c7424706b16f4c206396a1  libdecnumber/.gitignore
! 7c4a46981e1b31d34713e935baf4a96d  libdecnumber/ChangeLog
  2bd831b17997584e38305782cebe6948  libdecnumber/ChangeLog.jit
! 1eef4e8e73dcf150b06bd03f9621374a  libdecnumber/Makefile.in
  2a70099a79e40a57a666d5430a5e2529  libdecnumber/aclocal.m4
! 4db5627beddd7b7ec053a009b3c7d845  libdecnumber/bid/bid-dpd.h
! f4a2e99079120fa533611f5ba18c8536  libdecnumber/bid/bid2dpd_dpd2bid.c
! d6e172f53b2df3c630c919afa0ed689b  libdecnumber/bid/bid2dpd_dpd2bid.h
! db45c82bedee14f044ee23e03ca95dbb  libdecnumber/bid/decimal128.c
  47afd72790bc284aceb5a23597cc6146  libdecnumber/bid/decimal128.h
  f8df5b96d86c867ad233c6f0d3e2541f  libdecnumber/bid/decimal128Local.h
  eab7eeba10520ab4a805774d42b8f9dd  libdecnumber/bid/decimal128Symbols.h
! 2d9565332c9af014f014df9ee7248ce5  libdecnumber/bid/decimal32.c
  43b6b2bd872ad984104804b1b20fb10c  libdecnumber/bid/decimal32.h
  c5864ab84549ca0f34188ce5b057bbee  libdecnumber/bid/decimal32Symbols.h
! 721b890785e9423e3e1ab1a472f42aef  libdecnumber/bid/decimal64.c
  8c612aadae9886f1a72212f93d8651c0  libdecnumber/bid/decimal64.h
  9f903ba71afb574bfa3a0f3cd2f9fbc7  libdecnumber/bid/decimal64Symbols.h
! 2a770ed9ef2af6d2013d06093741b85f  libdecnumber/bid/host-ieee128.c
! d5b569f9be191d6d7cd00ffb694b0455  libdecnumber/bid/host-ieee32.c
! 38e8b3f82bae8c32135882e95d230304  libdecnumber/bid/host-ieee64.c
  76d4afd0dd1c0f5e776cbc40cf2e91b3  libdecnumber/config.in
! d796b3b0e43d0c4e7c5a37ea5e17ee5f  libdecnumber/configure
! bf6ad00b3fb01b6294b62624db26c1be  libdecnumber/configure.ac
! 01269a1c02bac3c8aeec719daf8a3ef2  libdecnumber/dconfig.h
! 8ee3373ceaf5ddb735e5e5a91582a71d  libdecnumber/decBasic.c
! ee58e03fd8c9d0d9b4b56397dfd9566d  libdecnumber/decCommon.c
  2f89d012c7a8a2912e7dce02bd4a08dc  libdecnumber/decCommonSymbols.h
! 0209477e40315931615fb8a3d562f513  libdecnumber/decContext.c
! 160d2455cdead7733d815eddb09a2c21  libdecnumber/decContext.h
  53b67627dab6d36fba960317d84c1487  libdecnumber/decContextSymbols.h
! dcebdce7c180a004e8e448357c841747  libdecnumber/decDPD.h
  8f3ac08d4cc421cc89035e90c890bb09  libdecnumber/decDPDSymbols.h
! 008b779c021dc0721913c9ede0279eba  libdecnumber/decDouble.c
! 3f002d7ca7f61698a21ca6a5b747f6a4  libdecnumber/decDouble.h
  22e16083bf3d0b76c4736f7f6382cfb6  libdecnumber/decDoubleSymbols.h
! f02b82b64d41c3a8f5dd609910bbd03f  libdecnumber/decExcept.c
! 1dadda031ce8b453eabc434380d0fd35  libdecnumber/decExcept.h
! 6490e50a7e32db3e276c0f4364e2056e  libdecnumber/decLibrary.c
! 0603096d96f24c1929c2c88f2f62d5db  libdecnumber/decNumber.c
! c410f115e706adcfbf406a8c18e74787  libdecnumber/decNumber.h
! a29081531ad5b7e301a3832c475c9d92  libdecnumber/decNumberLocal.h
  dd46d36cafe0d7dcb669ad059fbed9b6  libdecnumber/decNumberSymbols.h
! 9cae4885ec0e84cb6e789b2298763fa1  libdecnumber/decPacked.c
! d323f1e1a65ceb356b4bcdfca259e2cf  libdecnumber/decPacked.h
  287ad6ebf8b8179aa843368e9600a3fb  libdecnumber/decPackedSymbols.h
! 5558d5b73a1942b33e73b2f05cdd7920  libdecnumber/decQuad.c
! c8c9ab264ca340e6ee610220d3f8432b  libdecnumber/decQuad.h
  3851bae03416db42a85be1c5610f438b  libdecnumber/decQuadSymbols.h
! 6d7ff0f24861d9a543b36f6954a7f883  libdecnumber/decRound.c
! b4786ac0bd5fe784be755c7f73db3482  libdecnumber/decRound.h
! e6f5a6187e1869fa60427ce2c7a23e3d  libdecnumber/decSingle.c
! d3bb17d5cb80b1e097a3bf244b5f5edd  libdecnumber/decSingle.h
  8998c4f3e69ea3d218b574a2defb9a98  libdecnumber/decSingleSymbols.h
! 3418f9a3fce33a34ce71477de013e132  libdecnumber/dpd/decimal128.c
! 23a836002d280a705e5eb78fc0f11f59  libdecnumber/dpd/decimal128.h
! f8c8016eecc0b714da5930a18e42d496  libdecnumber/dpd/decimal128Local.h
  2f6da07ba897ca626a4f6d283feeef93  libdecnumber/dpd/decimal128Symbols.h
! 636a456bfdbd8aed66e7a9fb360abc6f  libdecnumber/dpd/decimal32.c
! b4c901c3fd1bc52995b89b69d2f8c33d  libdecnumber/dpd/decimal32.h
  a97c47969dfc92a7666dfe3c2e1e1448  libdecnumber/dpd/decimal32Symbols.h
! 7557e8f40c659cd1bb5f753e31c6a143  libdecnumber/dpd/decimal64.c
! 8bd3494633aae56ffed31440b3d78709  libdecnumber/dpd/decimal64.h
  0f6db29710e7075c2fd62bc4478b3b8d  libdecnumber/dpd/decimal64Symbols.h
! 3555496716856585bd114ba7a86be457  libffi/ChangeLog
! ba66fc19311348d373ec271be939a659  libffi/ChangeLog.libffi
  fbbc216bc25d759a72ea3e6d734af56b  libffi/ChangeLog.libgcj
  d946d2b97454ad50a1dbfbf48923c5be  libffi/ChangeLog.v1
! 3610bb17683a0089ed64055416b2ae1b  libffi/LICENSE
! 21df6fa4aa65bca3bd938f887e2d96ef  libffi/Makefile.am
! 4c67c71b8bf7e24345186314e658e94e  libffi/Makefile.in
! f0aff67c9a90cc128022ee5b0055b968  libffi/README
! 44b194a3359cf72192429e14ad99d8b2  libffi/acinclude.m4
! da6dae963cec36378657966c42474f1d  libffi/aclocal.m4
! 4b15315d366d6d03f4a26cc4c48b0029  libffi/configure
! adc753787c2f8c050ca7da9f24a823ec  libffi/configure.ac
! 3ad352dfae56d1ff666fda70a2cd2b3b  libffi/configure.host
! cfec4a5a1bb5d36550e15ac051c14148  libffi/doc/libffi.texi
! 2969ffc23f66d73392207633f25ab252  libffi/doc/version.texi
! 43093bc0411ea2d12f3b6f5915b47b23  libffi/fficonfig.h.in
! 1cdf2d6a38a245ca6d6637a4a12a4b72  libffi/generate-darwin-source-and-headers.py
! d9478612b27f76327ec6212138000165  libffi/include/Makefile.am
! 59765ee29f932e70c7d63d168f3e11d2  libffi/include/Makefile.in
! 7d46315e3c2ff94a4a7ac01e7301eec0  libffi/include/ffi.h.in
! 26308e024d2e5060aa77696e07e9d7e6  libffi/include/ffi_cfi.h
! a2d6074cb1e96b9044c649b8075ce2c3  libffi/include/ffi_common.h
! 32c629c070062753c44f859f7c6e45b4  libffi/libffi.map.in
! f0d559587528232d8d210d891f507c64  libffi/libffi.pc.in
! d3b0f0ce7e2d168c4a0b9d01ee026b7c  libffi/libffi.xcodeproj/project.pbxproj
! f0be1d8864c95b57e859f2b9a63e073b  libffi/libtool-version
  ade48c43a4229988450151e8d3fd4ea2  libffi/man/Makefile.am
! db7db13b3e42a12d401e41799007f784  libffi/man/Makefile.in
  375a858985ec2096671f484b1fe9b14b  libffi/man/ffi.3
  dd7b61f56e75a1d052dd10dc02ac4940  libffi/man/ffi_call.3
  634ea3ff80c805d513f31c111c5e6d36  libffi/man/ffi_prep_cif.3
  3fac156e21ef8e1746b25464de61e40b  libffi/man/ffi_prep_cif_var.3
! 6851a4f1b1cd61f5e92c552800df71ee  libffi/mdate-sh
! 0dd931f90b5ac8568d3cd820c0560d03  libffi/msvcc.sh
! 6bf7550b0e7877eeaedf0188fe41cf9c  libffi/src/aarch64/ffi.c
! f9503b67163b23847bb973c8bb09e24c  libffi/src/aarch64/ffitarget.h
! f6f12fec5373834ad78c26ba498bfa17  libffi/src/aarch64/internal.h
! ce0dbde711a0902fcdf0ac0989d43027  libffi/src/aarch64/sysv.S
! 4d078ab9b5fda47065293ca0563fa370  libffi/src/alpha/ffi.c
  d602d6b1b71200f27c9c202731a55218  libffi/src/alpha/ffitarget.h
  a9a4ef52f3883876d62820519ba4f3ab  libffi/src/alpha/internal.h
  6908f921057714d5356a458f7a2deba2  libffi/src/alpha/osf.S
  57aa2fdade3129c340916bc4bb26cfbb  libffi/src/arc/arcompact.S
! 22e1402cc8149a71adc31f604a55526e  libffi/src/arc/ffi.c
  2b86e1cded84eca7d5e99c892bd83b4a  libffi/src/arc/ffitarget.h
! 04ef14a83674b86d6c9a23cb866ddfe5  libffi/src/arm/ffi.c
! b9df0029cf24752a07eb0d7f3f4936ee  libffi/src/arm/ffitarget.h
! b3304a9a5173d6d9180a3ae59bd6d9cd  libffi/src/arm/internal.h
! 85b3c2f22cd267cc7dd5fe1ace2536b5  libffi/src/arm/sysv.S
  1e7f2be6a7bb2c081a285a402215a364  libffi/src/avr32/ffi.c
  cecc1618a6dcea06d53ddfdd6d11dd39  libffi/src/avr32/ffitarget.h
  808bd4aa64c30850292f3ffe35d19ea5  libffi/src/avr32/sysv.S
  1565efe598960193506628cafe73fbbb  libffi/src/bfin/ffi.c
  7513cc181bf36663d44182b9f1c95c51  libffi/src/bfin/ffitarget.h
  186967f96f819500e39f59a5251364e9  libffi/src/bfin/sysv.S
! 9e38eccaff8b8d09984a474bdea1a575  libffi/src/closures.c
! f28cfd919f6e5e324bcbe00c86288e9f  libffi/src/cris/ffi.c
  d56060242baa5dc429ba60ace6ebd724  libffi/src/cris/ffitarget.h
  b17e59bf6ba716c77cd9ca7a4e39e672  libffi/src/cris/sysv.S
  960420667f1d82b9fdedcf2cb739390d  libffi/src/debug.c
! fd58cddf5cf1beffe6844e75d075f136  libffi/src/dlmalloc.c
  b9ecce87980cf9448d35f168d0b12575  libffi/src/frv/eabi.S
! cd95ee2906582020737463464ea8806b  libffi/src/frv/ffi.c
  46d793348229f3fa5c098e65a913a2da  libffi/src/frv/ffitarget.h
! 4af3a2265e299dfd71905c8f81041da4  libffi/src/ia64/ffi.c
! 5b57a4318faf32e427d5d4ecec902f11  libffi/src/ia64/ffitarget.h
  6598837388b91973b3e6193968357fdb  libffi/src/ia64/ia64_flags.h
! 8e5389d0a78a91c44ad3532ef97779da  libffi/src/ia64/unix.S
! a7982947e2d52dbb842031bf52dcb8f2  libffi/src/java_raw_api.c
! 1b85561d6e15d52975a28e0729d7d120  libffi/src/m32r/ffi.c
  f231859daa12286973d5134b9afc8afe  libffi/src/m32r/ffitarget.h
  fde1f5cb81ab7ce114af861c94c368c0  libffi/src/m32r/sysv.S
! ba728498e42d2a3ed554efa535b5fd9e  libffi/src/m68k/ffi.c
  13c434b27325f5fbe0a8eb0d25d0ce69  libffi/src/m68k/ffitarget.h
! 8685e0286df213666da72645030aee7e  libffi/src/m68k/sysv.S
! 8f60035f67fc873c1124abbbf7e1c588  libffi/src/m88k/ffi.c
  af8f5ccf69592a72bd80e0d0f3955838  libffi/src/m88k/ffitarget.h
  709b72792ca32486a78de7ca0853bc70  libffi/src/m88k/obsd.S
! d768bc5e464f9f78dd6bb1457c9b3f64  libffi/src/metag/ffi.c
  67ad078b504329e9204f39c0e68c7ec3  libffi/src/metag/ffitarget.h
  527fbc9ba0b47d83d075d9419482db3d  libffi/src/metag/sysv.S
! 5e9bab4bda61a3c25877e986fa41427e  libffi/src/microblaze/ffi.c
  dea48c87bab2e6e9d92c69688cc49534  libffi/src/microblaze/ffitarget.h
  a3471fed3c5c66dede7037c2d82f1cd3  libffi/src/microblaze/sysv.S
! 4f922cfc9963445519e5b860fd1f26a2  libffi/src/mips/ffi.c
! 992f12ef35201c5708885590c5ad7bcd  libffi/src/mips/ffitarget.h
! f7cf9d69cf3499bb4e738150c2f5b388  libffi/src/mips/n32.S
! 46fc9e546cfb341f1ebf869bed97ebd4  libffi/src/mips/o32.S
! 13a8c1b3eb7d939e109ff080c116c165  libffi/src/moxie/eabi.S
! 7514020f4105da5d4adb1cd5248431b8  libffi/src/moxie/ffi.c
  1ce9696e486104a23914c589a1221309  libffi/src/moxie/ffitarget.h
! 890ab562b6c6ccf465ea0b5c7c991a6b  libffi/src/nios2/ffi.c
  af1ef1c834944abb57b8572c2df0a282  libffi/src/nios2/ffitarget.h
  cba9f8730593aa0a016a6c2b0c791591  libffi/src/nios2/sysv.S
  7c71ebd0062610b1037575137335fb1c  libffi/src/or1k/ffi.c
  cf11f05b0ece088d52d21699f3e7f6a4  libffi/src/or1k/ffitarget.h
  1d34d3abbc7d50e72537a84c14e06338  libffi/src/or1k/sysv.S
! 552bd61c0e70096c165f011101c60973  libffi/src/pa/ffi.c
! 2b43d8fbef25dbf6a65c6d6e6045c52c  libffi/src/pa/ffitarget.h
! 8c23f17c79eb2520dc8ec662cb259ace  libffi/src/pa/hpux32.S
! 3ebd6a515e65ee7136babf16939ecc71  libffi/src/pa/linux.S
  184c7714b9cf25fbbbe0bcc89a26dcfa  libffi/src/powerpc/aix.S
  551ede9bd56160e1c6cd39409bfec751  libffi/src/powerpc/aix_closure.S
! c1917bbd6c116317e71dbc2d92d7f163  libffi/src/powerpc/asm.h
  fcf4949764155e3174447f2ee55b0db7  libffi/src/powerpc/darwin.S
! ac5d077a8245b3e30d71eaa451737dba  libffi/src/powerpc/darwin_closure.S
! 1a058371d25e428564cbed129eb85763  libffi/src/powerpc/ffi.c
! 30fc0a0f14928f935fe7145a8ed73e98  libffi/src/powerpc/ffi_darwin.c
! 613d637ce3a14ef257683294be78e34d  libffi/src/powerpc/ffi_linux64.c
! 9c686cd2998b6360ec5ce8b1ba3c79dc  libffi/src/powerpc/ffi_powerpc.h
  b3dfde8013f5032762b6b7b21b089599  libffi/src/powerpc/ffi_sysv.c
! eff67b72c8facab9f308a18417acce6d  libffi/src/powerpc/ffitarget.h
! 2bb707c84d218999b4f1d9932961afe5  libffi/src/powerpc/linux64.S
! 19b8fdcb4f67f271c76cef61fe1c2a0b  libffi/src/powerpc/linux64_closure.S
  deba483bab067974966ec684fe6af5e2  libffi/src/powerpc/ppc_closure.S
! abbc89abea23fd5a16934350896a7d30  libffi/src/powerpc/sysv.S
! cb91c64e0fe9ecdfda2cf1ac68ecb1ce  libffi/src/prep_cif.c
! 49c70fd246192b342248b813fe8c53db  libffi/src/raw_api.c
! 4fbe0b8ee6f82978573c8e99fe2ec003  libffi/src/riscv/ffi.c
  a455990e50ebe413228c8095b32780a6  libffi/src/riscv/ffitarget.h
  c2701659c3363f2f239b73c60fe7c498  libffi/src/riscv/sysv.S
  ab8266659fdf9d027f4fcdaefe6f2882  libffi/src/s390/ffi.c
--- 91896,92183 ----
  a893e51c81e1227e5b61ea6118c64f66  libcody/configure.ac
  e34ecf203bf98854eaf6c3239f1f4bb6  libcody/fatal.cc
  da08ac0363d79421e125106469933625  libcody/internal.hh
! b7f8907c165e46ed56efaa23a2c2a570  libcody/netclient.cc
! cffdeae41b78da05839b193e90188f55  libcody/netserver.cc
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  b1f3850fc5ac62999d1e124aa6f76531  libcody/server.cc
! 4a7e4a62c790fc9b14810799be2efb31  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
! 286a774a854575468546d8fce202733f  libcpp/Makefile.in
  9d15bb14e9ac1a74366e673ea260722e  libcpp/aclocal.m4
! 3d0ccb13dd34e87b038c4cac85bf9cc9  libcpp/charset.cc
! ad1fc7d0f136e5ac8c708195413ee0ef  libcpp/config.in
! 1764a1db771b71a802dc82b9150cdb5e  libcpp/configure
! 16b4cfeae466a8b2a409bbc537a4729f  libcpp/configure.ac
! 3a3d504b81ee1d6bd6cd570100046dc5  libcpp/directives.cc
! 70a58341348ba9949c98cf4bb6125dbe  libcpp/errors.cc
! 7b7d19f8093db8bce2099a11cbedca53  libcpp/expr.cc
! 226d5bfee0c65994a834c831a5d82b80  libcpp/files.cc
  d5218c1d5fc8cde726dc168fafef10a7  libcpp/generated_cpp_wcwidth.h
! e0818fa4239f8ba3958c995630136377  libcpp/identifiers.cc
! c0e59e6492ae26a616e59ad8e1bcbc29  libcpp/include/cpplib.h
! e0ecf491e0d75d9fb4a83d9812c8704b  libcpp/include/line-map.h
! 232954149f32cc32e54bbef19c0a4b57  libcpp/include/mkdeps.h
! a1a78400707f80a1a54a7d9b16810e5b  libcpp/include/symtab.h
! 7b423055aee45272063c65dc7317f67a  libcpp/init.cc
! 12339c1e6f2d40079702f5fa3ff9a749  libcpp/internal.h
! 72cfbc4875a217832f21210eef1ea63b  libcpp/lex.cc
! 4af47955f81f498c006099ecab0c5942  libcpp/line-map.cc
  46a07100f95f5e354c7e25cd19d26884  libcpp/location-example.txt
! 4cd79d71d4084044415e110329fbef40  libcpp/macro.cc
! e6be2734d60fae9b46b4ed87f86d31b2  libcpp/makeucnid.cc
! af6c487ab06b1986efc158cb9976be08  libcpp/mkdeps.cc
! 7d48679b422952c0f759fec7d4706be1  libcpp/pch.cc
! 80ecd6b28b472f21f2927876e21f47a8  libcpp/po/ChangeLog
! 768453cca0d8c0e2666a269e0aff862b  libcpp/po/be.gmo
! bf20994ad02b0e524091092e6fe86885  libcpp/po/be.po
! 6d54c123e102174620d1738492df73d5  libcpp/po/ca.gmo
! 91d6c405d02690a1d0458b4620f655de  libcpp/po/ca.po
! 8dc4eb36d19d7a8f1e2e30867ac7606c  libcpp/po/cpplib.pot
! e5e81aa7ea0601dfcbd6a4d46269d803  libcpp/po/da.gmo
! 20f6947f5818e8b5c7dce467b3de01d5  libcpp/po/da.po
! c0c7bfef03d686878b845baa07cef45f  libcpp/po/de.gmo
! 33cf90be9f918ade12b05853e87dafd2  libcpp/po/de.po
! 9d8037a85a1603875c62ac38b52bfe1d  libcpp/po/el.gmo
! cf2cd4b899d7861809eeb3a1a2c9a96b  libcpp/po/el.po
! 97bb64ea4aff35b50573ede294f1e02f  libcpp/po/eo.gmo
! 86c5cc5440e87990b8710f48b9e263da  libcpp/po/eo.po
! dd58be1d9edc8c959c689afcd18e5e05  libcpp/po/es.gmo
! d90d33c26c2401a102b5c0c5f84d1176  libcpp/po/es.po
! dd372f52d2bf706aa6f9d5ad42e18fc0  libcpp/po/fi.gmo
! f0ffe8749b6e7a62ce066896f0e674d1  libcpp/po/fi.po
! 1c19c4937b0627b23ea91e34b7e9a4ef  libcpp/po/fr.gmo
! 0898f476660020d04ed9a307b5bd6fb8  libcpp/po/fr.po
! 1f25accfdceffa4f72251252a589b349  libcpp/po/id.gmo
! 276fa54a6992c84bcd60518a9e73242b  libcpp/po/id.po
! d16137a8e7e85bccf28abe5c4ad0a81f  libcpp/po/ja.gmo
! 97b9b50f1330eb7f7999622db5374aa7  libcpp/po/ja.po
! 97f7d8c43b9396b6583aa19c89c94f63  libcpp/po/nl.gmo
! f6dc4fc4e6adcfa756445376076f93d8  libcpp/po/nl.po
! e832c298fe4b672833e11250da447dea  libcpp/po/pt_BR.gmo
! a7084af6bf435b6ad7d25e8af854f81f  libcpp/po/pt_BR.po
! 464301757d509807dda637b49cd2c108  libcpp/po/ru.gmo
! 7619fbcbf52607c6cb1b5ad9c64095c8  libcpp/po/ru.po
! c9ae56c718fc9284230cc2ae3ede111b  libcpp/po/sr.gmo
! c5cde90bbf97b46dad9d9114fc33a01c  libcpp/po/sr.po
! a2762a01b70ae4780fc842e7a9d0b1a1  libcpp/po/sv.gmo
! f83530a3fff313d2abed76f57b681570  libcpp/po/sv.po
! f0d926b72cbbccfc7a082af283a14dc4  libcpp/po/tr.gmo
! cae0e78b7f59e67d2b80494ca795e312  libcpp/po/tr.po
! 756b66e9fb0a31a48497db2264fee931  libcpp/po/uk.gmo
! a995ea08db09ef86a6c6038b5de9b03f  libcpp/po/uk.po
! d7329d40de2565a890e0ad0f2376dc20  libcpp/po/vi.gmo
! 8f992998a9ec51ce5ccf0f3719d5cc8d  libcpp/po/vi.po
! 0bdf646da4277d7ba4dd64ab87e18b91  libcpp/po/zh_CN.gmo
! 795e13951e9e74e0f2ce83005e5d4a54  libcpp/po/zh_CN.po
! b375e96c670c3f0dd283014bbc260422  libcpp/po/zh_TW.gmo
! af9ddfabc1dbfa36a743fc63a103ba63  libcpp/po/zh_TW.po
! c31c897eac8d6ae49fc1d381f67dca3f  libcpp/symtab.cc
! 05e232046ab4c21878efc2b5678a0155  libcpp/system.h
! 61fb8513c1c8cb1ab4e2600a9249f42b  libcpp/traditional.cc
! 304e436610cf39f2edaa1e8746827272  libcpp/ucnid.h
! 32535698d6e28c93288fdd4db1a5d6b0  libcpp/ucnid.tab
  a6c2b3de06c7424706b16f4c206396a1  libdecnumber/.gitignore
! f61e4034bff5ac3440200aa24304ebb9  libdecnumber/ChangeLog
  2bd831b17997584e38305782cebe6948  libdecnumber/ChangeLog.jit
! 0fea971da3ddcbb3bd8d3bfb4c347302  libdecnumber/Makefile.in
  2a70099a79e40a57a666d5430a5e2529  libdecnumber/aclocal.m4
! fcd95e772441fd44d03b876599bac113  libdecnumber/bid/bid-dpd.h
! be283d009215bf515219b868e1d86bda  libdecnumber/bid/bid2dpd_dpd2bid.c
! ba4c5e2877d797a1bed3fa86c59fbd8d  libdecnumber/bid/bid2dpd_dpd2bid.h
! 83803ed7d3d1a06156fec9c6bec9991c  libdecnumber/bid/decimal128.c
  47afd72790bc284aceb5a23597cc6146  libdecnumber/bid/decimal128.h
  f8df5b96d86c867ad233c6f0d3e2541f  libdecnumber/bid/decimal128Local.h
  eab7eeba10520ab4a805774d42b8f9dd  libdecnumber/bid/decimal128Symbols.h
! 30a4eeae3709378fad33a3f892b66969  libdecnumber/bid/decimal32.c
  43b6b2bd872ad984104804b1b20fb10c  libdecnumber/bid/decimal32.h
  c5864ab84549ca0f34188ce5b057bbee  libdecnumber/bid/decimal32Symbols.h
! d2eba0209bea1b129deac600f962c775  libdecnumber/bid/decimal64.c
  8c612aadae9886f1a72212f93d8651c0  libdecnumber/bid/decimal64.h
  9f903ba71afb574bfa3a0f3cd2f9fbc7  libdecnumber/bid/decimal64Symbols.h
! 0dadaf771db36bc33a8f3473b24ef134  libdecnumber/bid/host-ieee128.c
! 47f8901fdd4193a4d7e4a4a7aab2831b  libdecnumber/bid/host-ieee32.c
! 9a0f83ff2eb0e7723f5754599f307cd6  libdecnumber/bid/host-ieee64.c
  76d4afd0dd1c0f5e776cbc40cf2e91b3  libdecnumber/config.in
! 09c7c1f96e7cfb070fc82ecf1b0a75d7  libdecnumber/configure
! ab25cf7a23d1c8ce86aca2500bc05352  libdecnumber/configure.ac
! 7d4e773c2af35c605948373ae955587b  libdecnumber/dconfig.h
! c538e47f367dc009c9046aa621b5f6de  libdecnumber/decBasic.c
! 3559ee594a3a5749a9fe711597b4cb47  libdecnumber/decCommon.c
  2f89d012c7a8a2912e7dce02bd4a08dc  libdecnumber/decCommonSymbols.h
! 2302457d648f4611ae95d425a8229539  libdecnumber/decContext.c
! 18bbd8adf701fb1b08703ea946725f8f  libdecnumber/decContext.h
  53b67627dab6d36fba960317d84c1487  libdecnumber/decContextSymbols.h
! 8ddbf94e84a4594525ef48163ff775cc  libdecnumber/decDPD.h
  8f3ac08d4cc421cc89035e90c890bb09  libdecnumber/decDPDSymbols.h
! afc7b595265f20830317528ed21effb3  libdecnumber/decDouble.c
! 213cf62b1729437164283c8d4e1484de  libdecnumber/decDouble.h
  22e16083bf3d0b76c4736f7f6382cfb6  libdecnumber/decDoubleSymbols.h
! 2d95faa26b1e93a0b72d2cff03cdef42  libdecnumber/decExcept.c
! 8406e2d38f3be5bde508eb1b708edd41  libdecnumber/decExcept.h
! 9f95a080701b03590f3f80e56ae61956  libdecnumber/decLibrary.c
! 537d179b413a56c91525904136b9e3f8  libdecnumber/decNumber.c
! 8c4d2c0b29fdb7b49d67ec9beda0cc2b  libdecnumber/decNumber.h
! 72c443a4a8403bbe19664bb8614eba22  libdecnumber/decNumberLocal.h
  dd46d36cafe0d7dcb669ad059fbed9b6  libdecnumber/decNumberSymbols.h
! 90e5a1aac06a33dbe9bfde2c274d143e  libdecnumber/decPacked.c
! 1cd2d1aacb4bc8508d6466353e2c7018  libdecnumber/decPacked.h
  287ad6ebf8b8179aa843368e9600a3fb  libdecnumber/decPackedSymbols.h
! 76d3c1b6bdcc8d3b0c56032e64afec1c  libdecnumber/decQuad.c
! 425ae2340edbcac21690eb045bd5ed0b  libdecnumber/decQuad.h
  3851bae03416db42a85be1c5610f438b  libdecnumber/decQuadSymbols.h
! d417760aae583fc16c37e11e72f51912  libdecnumber/decRound.c
! 606ac309f1bffe19caafd731c2c07016  libdecnumber/decRound.h
! 9fcd5a7df5ee0e42403611581ef1114d  libdecnumber/decSingle.c
! 1fadfd5ab1e2956f188346a456d01ee6  libdecnumber/decSingle.h
  8998c4f3e69ea3d218b574a2defb9a98  libdecnumber/decSingleSymbols.h
! 12ef60c7d1498fbfa39420df0c6fb562  libdecnumber/dpd/decimal128.c
! 97fb671442762e76477c3ed46b698181  libdecnumber/dpd/decimal128.h
! 4a13a3e4504eda1f106d64f0fa70f872  libdecnumber/dpd/decimal128Local.h
  2f6da07ba897ca626a4f6d283feeef93  libdecnumber/dpd/decimal128Symbols.h
! f7d70d30063211e70ce330b682d35f96  libdecnumber/dpd/decimal32.c
! 7f791ae665548875ed21f3ebcf17ee79  libdecnumber/dpd/decimal32.h
  a97c47969dfc92a7666dfe3c2e1e1448  libdecnumber/dpd/decimal32Symbols.h
! 951e809c064c5f829e88d0aef643a675  libdecnumber/dpd/decimal64.c
! 88e1e033d85211b860055f29fcaab357  libdecnumber/dpd/decimal64.h
  0f6db29710e7075c2fd62bc4478b3b8d  libdecnumber/dpd/decimal64Symbols.h
! 055606b47e85369c5d003f6e3a1b657e  libffi/.gitattributes
! b107cce9734ade3ee9479d3bb7dc3710  libffi/ChangeLog
! 0e38ead823643c45765e5fe55e7ab16b  libffi/ChangeLog.libffi
  fbbc216bc25d759a72ea3e6d734af56b  libffi/ChangeLog.libgcj
  d946d2b97454ad50a1dbfbf48923c5be  libffi/ChangeLog.v1
! cc4552d9286c17a905988bf55f96def7  libffi/HOWTO_MERGE
! 679b5c9bdc79a2b93ee574e193e7a7bc  libffi/LICENSE
! 631bc8750a749106cf625001c1d6efb0  libffi/LICENSE-BUILDTOOLS
! 72b91c10f5a27e7672d22ca123ac8f73  libffi/LOCAL_PATCHES
! c55286ffa9013e1bc9fe188894b39e1d  libffi/MERGE
! 69b70919246d2502e7fc4e745f088c77  libffi/Makefile.am
! d9aab5e2fbe2d4790d0327abe73e49e4  libffi/Makefile.in
! 0196871242a2420712bad4e2c16d5274  libffi/README.md
! c67252e8ff3150683a184a729911b219  libffi/acinclude.m4
! d591981dfeccb8df500213a4baa6bb7e  libffi/aclocal.m4
! aec59abbc470dda1bfe630dbb0bbd627  libffi/autogen.sh
! 1974c22f93c20d125431f3c042b01df9  libffi/configure
! dbd21d77c2acf20037c7e2e16de7a70c  libffi/configure.ac
! b2dbb88c38d08a37b89fc9ed08e79538  libffi/configure.host
! bad91ff01547ce79fe537211f4763ac0  libffi/doc/Makefile.am
! db28be3951c18d6db6e90f7e612bc67b  libffi/doc/libffi.texi
! 0c1453cd8505c0c665c9194ef9d7f529  libffi/doc/version.texi
! ea125d6ff0b3d20372a1556f82ca6a05  libffi/fficonfig.h.in
! 9a358eeaa41d3ceb5e732dbf61d3c931  libffi/generate-darwin-source-and-headers.py
! dd34002683e9900a6cd89c440f24a394  libffi/include/Makefile.am
! 3af5b052f6d3c920071496bbaf5c1322  libffi/include/Makefile.in
! 60e00bb8059867f47ba6b93e4b4fac00  libffi/include/ffi.h.in
! 354b3182b36c90da2e228ba864d7d4e0  libffi/include/ffi_cfi.h
! 3bafe1ab47d80c33e901b03a1e9c7732  libffi/include/ffi_common.h
! c19cb74ddd4e2244044a1da83a952afb  libffi/include/tramp.h
! 73375602600b485370ad4bd1ce1b6ab3  libffi/libffi.map.in
! ad82c93bb7f9710ee5d0f0e9af25e51d  libffi/libffi.pc.in
! 1f271e0501ca22905ebfa732c49143db  libffi/libffi.xcodeproj/project.pbxproj
! 5b9a262eb2adfad2e0e5a67c9732b9c5  libffi/libtool-version
  ade48c43a4229988450151e8d3fd4ea2  libffi/man/Makefile.am
! 2e75e4661aeefdeb808c8270b75c8881  libffi/man/Makefile.in
  375a858985ec2096671f484b1fe9b14b  libffi/man/ffi.3
  dd7b61f56e75a1d052dd10dc02ac4940  libffi/man/ffi_call.3
  634ea3ff80c805d513f31c111c5e6d36  libffi/man/ffi_prep_cif.3
  3fac156e21ef8e1746b25464de61e40b  libffi/man/ffi_prep_cif_var.3
! 00c15050127751bd8322e3a44f3a5e61  libffi/mdate-sh
! 3c3ee1f7953ffe94a2a8e80ef34f2c83  libffi/merge.sh
! 7487ea3d59873bb39dc4886eb3616d5c  libffi/msvcc.sh
! 61fb78015f96b02e435d90e99d1cb535  libffi/src/aarch64/ffi.c
! b42af3dfe2dfed31394770bd1bb0baa4  libffi/src/aarch64/ffitarget.h
! d259a7b185a1e3b9f9058899270fbbb1  libffi/src/aarch64/internal.h
! 409570d506a6d52f51cdb50df9de56f6  libffi/src/aarch64/sysv.S
! dc58ba07aeb41fd359b53bcaca803126  libffi/src/aarch64/win64_armasm.S
! 40e4bfc4ce20447e75683f85d1801954  libffi/src/alpha/ffi.c
  d602d6b1b71200f27c9c202731a55218  libffi/src/alpha/ffitarget.h
  a9a4ef52f3883876d62820519ba4f3ab  libffi/src/alpha/internal.h
  6908f921057714d5356a458f7a2deba2  libffi/src/alpha/osf.S
  57aa2fdade3129c340916bc4bb26cfbb  libffi/src/arc/arcompact.S
! 059c03eb967ea6bcd70d11136688a98d  libffi/src/arc/ffi.c
  2b86e1cded84eca7d5e99c892bd83b4a  libffi/src/arc/ffitarget.h
! 593e782d65fb85458911b3269277a731  libffi/src/arm/ffi.c
! fa10ab8dc9b3f606aed6ea3864e0c261  libffi/src/arm/ffitarget.h
! fc86defc055e16b8d111b4c103680bde  libffi/src/arm/internal.h
! 683e7de620fc2b2cbdec191d9ef46034  libffi/src/arm/sysv.S
! 0351a92c508a57029bff881867529d57  libffi/src/arm/sysv_msvc_arm32.S
  1e7f2be6a7bb2c081a285a402215a364  libffi/src/avr32/ffi.c
  cecc1618a6dcea06d53ddfdd6d11dd39  libffi/src/avr32/ffitarget.h
  808bd4aa64c30850292f3ffe35d19ea5  libffi/src/avr32/sysv.S
  1565efe598960193506628cafe73fbbb  libffi/src/bfin/ffi.c
  7513cc181bf36663d44182b9f1c95c51  libffi/src/bfin/ffitarget.h
  186967f96f819500e39f59a5251364e9  libffi/src/bfin/sysv.S
! 73895d422ff9f71f22ed5e3fc5ea7c65  libffi/src/closures.c
! 89604a232af8071de35df602e5a6c8db  libffi/src/cris/ffi.c
  d56060242baa5dc429ba60ace6ebd724  libffi/src/cris/ffitarget.h
  b17e59bf6ba716c77cd9ca7a4e39e672  libffi/src/cris/sysv.S
+ 7ed06af0df087c85b9530785b2d2803d  libffi/src/csky/ffi.c
+ 334e5efe5554e9684814d43ad528f6c7  libffi/src/csky/ffitarget.h
+ fd623ff1552771afe72e7d80971d9399  libffi/src/csky/sysv.S
  960420667f1d82b9fdedcf2cb739390d  libffi/src/debug.c
! 1a1c46976e063513efdd1691d8991a71  libffi/src/dlmalloc.c
  b9ecce87980cf9448d35f168d0b12575  libffi/src/frv/eabi.S
! 6d5f5603c261316978170edcae57685a  libffi/src/frv/ffi.c
  46d793348229f3fa5c098e65a913a2da  libffi/src/frv/ffitarget.h
! 42c9128059bd7e19c9952ccbcd2f2275  libffi/src/ia64/ffi.c
! 7a21116d53a02f2ce8b47909dc050259  libffi/src/ia64/ffitarget.h
  6598837388b91973b3e6193968357fdb  libffi/src/ia64/ia64_flags.h
! 239c4f9ce72d72023f8fbd6b2a1516ad  libffi/src/ia64/unix.S
! 5087a408b19fca412cf1b81262d0da0b  libffi/src/java_raw_api.c
! 4594a1a5f46397d21c30f9e974ff8384  libffi/src/kvx/asm.h
! 989104e297aeeae17122773939bd6830  libffi/src/kvx/ffi.c
! 3cb04b5ba3412b866d5e7449ca24b6f0  libffi/src/kvx/ffitarget.h
! 0c8c94d032ab11ae726e214dd6b91e7d  libffi/src/kvx/sysv.S
! a06a5272996a57cf9c1338b05f6b19c8  libffi/src/m32r/ffi.c
  f231859daa12286973d5134b9afc8afe  libffi/src/m32r/ffitarget.h
  fde1f5cb81ab7ce114af861c94c368c0  libffi/src/m32r/sysv.S
! e4a8b1db2017ccf89ed2d5cb543f9e04  libffi/src/m68k/ffi.c
  13c434b27325f5fbe0a8eb0d25d0ce69  libffi/src/m68k/ffitarget.h
! a9479041537e0d5908b642894df8879a  libffi/src/m68k/sysv.S
! 444738b5406b426b09279081bb5779bc  libffi/src/m88k/ffi.c
  af8f5ccf69592a72bd80e0d0f3955838  libffi/src/m88k/ffitarget.h
  709b72792ca32486a78de7ca0853bc70  libffi/src/m88k/obsd.S
! bd5c369d7cbe5b0672949e7b2140b722  libffi/src/metag/ffi.c
  67ad078b504329e9204f39c0e68c7ec3  libffi/src/metag/ffitarget.h
  527fbc9ba0b47d83d075d9419482db3d  libffi/src/metag/sysv.S
! e304356d36eb4ed4971634212e726904  libffi/src/microblaze/ffi.c
  dea48c87bab2e6e9d92c69688cc49534  libffi/src/microblaze/ffitarget.h
  a3471fed3c5c66dede7037c2d82f1cd3  libffi/src/microblaze/sysv.S
! 9e7c419dc4eb3308a1d9784e3cbea54d  libffi/src/mips/ffi.c
! 0cc2fe4a50257992f4f9465ab0d2ab10  libffi/src/mips/ffitarget.h
! 88b6d496075bba1f2b1cb9088de36291  libffi/src/mips/n32.S
! 419b750e0c790e6caa7ca84bf4013272  libffi/src/mips/o32.S
! bd63095b928c820cffdc50dcacb5377c  libffi/src/moxie/eabi.S
! 1bc2d64e6a2badd9a3062686dbc14534  libffi/src/moxie/ffi.c
  1ce9696e486104a23914c589a1221309  libffi/src/moxie/ffitarget.h
! 972354564207577d25b2de719d8a298b  libffi/src/nios2/ffi.c
  af1ef1c834944abb57b8572c2df0a282  libffi/src/nios2/ffitarget.h
  cba9f8730593aa0a016a6c2b0c791591  libffi/src/nios2/sysv.S
  7c71ebd0062610b1037575137335fb1c  libffi/src/or1k/ffi.c
  cf11f05b0ece088d52d21699f3e7f6a4  libffi/src/or1k/ffitarget.h
  1d34d3abbc7d50e72537a84c14e06338  libffi/src/or1k/sysv.S
! eca4ed5cd288871999d01adab3057ee3  libffi/src/pa/ffi.c
! f4e42d7aea7c15c3a0c6f9a541dab715  libffi/src/pa/ffitarget.h
! 8d59e0e683fd8bf5ec88ef8467ae11dd  libffi/src/pa/hpux32.S
! e2d9ed32ab4b84d4e225d20d84204f6f  libffi/src/pa/linux.S
  184c7714b9cf25fbbbe0bcc89a26dcfa  libffi/src/powerpc/aix.S
  551ede9bd56160e1c6cd39409bfec751  libffi/src/powerpc/aix_closure.S
! acdd4f1a6a4093df0feb0e71744898b4  libffi/src/powerpc/asm.h
  fcf4949764155e3174447f2ee55b0db7  libffi/src/powerpc/darwin.S
! 8c2fbc617e204f07672c5cae0e592102  libffi/src/powerpc/darwin_closure.S
! b18c5d79db8ec26f2a2a5f5720396e27  libffi/src/powerpc/ffi.c
! 84aacb1bbd19a1e9b325c0530554c2f4  libffi/src/powerpc/ffi_darwin.c
! 8c8d42a46c9e51a977c91e351a8fce6e  libffi/src/powerpc/ffi_linux64.c
! 88d699c59596d5fa950e20646df8c277  libffi/src/powerpc/ffi_powerpc.h
  b3dfde8013f5032762b6b7b21b089599  libffi/src/powerpc/ffi_sysv.c
! a355fd8f3b93f9f1cdabbcd382f689f1  libffi/src/powerpc/ffitarget.h
! a3bf5d91df6ac036576283afc9318660  libffi/src/powerpc/linux64.S
! 26da125425142997abbf7f385d0a568e  libffi/src/powerpc/linux64_closure.S
  deba483bab067974966ec684fe6af5e2  libffi/src/powerpc/ppc_closure.S
! 1127b58ac46f8e4c17e199257f6c652c  libffi/src/powerpc/sysv.S
! 356c18ddf4c594f08dabdc43f8b9f5fb  libffi/src/prep_cif.c
! 0f87fd960dd5ab7d9ad685435f358014  libffi/src/raw_api.c
! 8f14ca5a5d9994b06fa1e35ad62c9c98  libffi/src/riscv/ffi.c
  a455990e50ebe413228c8095b32780a6  libffi/src/riscv/ffitarget.h
  c2701659c3363f2f239b73c60fe7c498  libffi/src/riscv/sysv.S
  ab8266659fdf9d027f4fcdaefe6f2882  libffi/src/s390/ffi.c
*************** b3368476e8654a67a996fc3570993a59  libffi
*** 86675,86682 ****
  40145fc2a1019d93ad69d0410503916c  libffi/src/sh64/ffi.c
  bafcfb82eb59a68953d6ec8c4c56812b  libffi/src/sh64/ffitarget.h
  981772e8eedf7ba19049819909040d94  libffi/src/sh64/sysv.S
! 4dd2c1fdd64246d96eb2c2f143f70e86  libffi/src/sparc/ffi.c
! e8093f6b174c40505c1e8f04b13efb2b  libffi/src/sparc/ffi64.c
  ac0f8f25f159c2358b99625e7ce6904e  libffi/src/sparc/ffitarget.h
  3ec745fb9adabb2cad31b87dc3a175c7  libffi/src/sparc/internal.h
  991fd1c4e25a52e37e32d4a900e0152a  libffi/src/sparc/v8.S
--- 92190,92197 ----
  40145fc2a1019d93ad69d0410503916c  libffi/src/sh64/ffi.c
  bafcfb82eb59a68953d6ec8c4c56812b  libffi/src/sh64/ffitarget.h
  981772e8eedf7ba19049819909040d94  libffi/src/sh64/sysv.S
! 0e963b7cae88aa092fe7e2293fd3285c  libffi/src/sparc/ffi.c
! d91f1ec3fbd46caf1508582b9d90530b  libffi/src/sparc/ffi64.c
  ac0f8f25f159c2358b99625e7ce6904e  libffi/src/sparc/ffitarget.h
  3ec745fb9adabb2cad31b87dc3a175c7  libffi/src/sparc/internal.h
  991fd1c4e25a52e37e32d4a900e0152a  libffi/src/sparc/v8.S
*************** e8a7dc5891a2d4077a6736c3f99cfada  libffi
*** 86684,86820 ****
  74934128ac3facd5eb561545bdbc5532  libffi/src/tile/ffi.c
  cb2b6c2fe568c674b50f708613772da7  libffi/src/tile/ffitarget.h
  f56d8803c1d6045d76283e7fac454681  libffi/src/tile/tile.S
! da25931758be07a7a9d7d7a274c00150  libffi/src/types.c
  52e15866f080e8d9541f6b44a152ea51  libffi/src/vax/elfbsd.S
! 889af6c9b7816215ea201bc21d8edd2a  libffi/src/vax/ffi.c
  30aa04305b3eb941b4f1de70b251aca8  libffi/src/vax/ffitarget.h
! e988aa92b714d72199c40b30edcaff89  libffi/src/x86/darwin.S
! 241e0adeeeba9eb067412930a0229857  libffi/src/x86/darwin64.S
! 5624660cd94e07f27918e57a51a103ee  libffi/src/x86/darwin64_c.c
! b8ca26733e457413f07cde86b4172a99  libffi/src/x86/darwin_c.c
! 08f53dd5901f0176d44b7b9b46420e18  libffi/src/x86/ffi.c
! 0fcee3805caea018e96ee0acdc8d617a  libffi/src/x86/ffi64.c
! fbafaaf9d5bbdfa1191f07131de6572a  libffi/src/x86/ffitarget.h
! c6877cb33a938d1b0ca967d17089b339  libffi/src/x86/ffiw64.c
! b4b878c72f2f781fe41addd69ab2d619  libffi/src/x86/internal.h
! 2bec01e0d8a4177a30bff85df97c5d32  libffi/src/x86/internal64.h
! b667ce8793a1ebcc81c751b1e7b4105f  libffi/src/x86/sysv.S
! 994c7f94c5272cc97042f2d9638f90e3  libffi/src/x86/unix64.S
! beee2943f6cbe0f3bee5f7215deb46e0  libffi/src/x86/win64.S
! 369daa1b31c663db86f496ce503ce4a4  libffi/src/xtensa/ffi.c
  892c400315f5a127da4cd7a1eb7b65be  libffi/src/xtensa/ffitarget.h
! 16dae2b5dde9eb2a61334f2973068c9a  libffi/src/xtensa/sysv.S
  1ded054093de910d9786c62bc4fe8cc6  libffi/stamp-h.in
! cd93af42c18f9c0b55c7325a6df1c7f8  libffi/testsuite/Makefile.am
! 5985a31f5b748e1a04ea8387ea6de936  libffi/testsuite/Makefile.in
  dce80ba7e038ca18591aabc6d3d2582c  libffi/testsuite/config/default.exp
! cff6a796e12fcc98d74bd98cac4cdf67  libffi/testsuite/lib/libffi.exp
  88f888c66cee8d916e1ac91000ecc87a  libffi/testsuite/lib/target-libpath.exp
  68db067550882b3b091a82df87310fff  libffi/testsuite/lib/wrapper.exp
! e2b2182b50885f833527f9ccc86eeaa4  libffi/testsuite/libffi.call/call.exp
! 95a3d81256c777f68d1d74641cce6f15  libffi/testsuite/libffi.call/closure_fn0.c
! af1c73f8927fd6ff7f3d0169d6a16bfa  libffi/testsuite/libffi.call/closure_fn1.c
! 786c19f83b67c7b045c7603cc940dc6a  libffi/testsuite/libffi.call/closure_fn2.c
! 80762a3d4a50c6d41904442445de79d0  libffi/testsuite/libffi.call/closure_fn3.c
! 155711693ac5df848dc78899d92159db  libffi/testsuite/libffi.call/closure_fn4.c
! 2d9a7ca775efbe9b842562715af63078  libffi/testsuite/libffi.call/closure_fn5.c
! 2447e0637ff7f794fc4113878f8927bb  libffi/testsuite/libffi.call/closure_fn6.c
! 73cc1feb078fd71f497d6c1d5bc9e578  libffi/testsuite/libffi.call/closure_loc_fn0.c
! 0ece4fa9ced11b84ddbe5a5a8f96af07  libffi/testsuite/libffi.call/closure_simple.c
! c97f1f851010776179eeccf84093f453  libffi/testsuite/libffi.call/cls_12byte.c
! 9a889ecde9cac8d6cdcab4d46358566d  libffi/testsuite/libffi.call/cls_16byte.c
! 74a4d0cd76ef4a68b57524e52eb6e026  libffi/testsuite/libffi.call/cls_18byte.c
! 8745d4a18ea0c61bfc288bdcfe144733  libffi/testsuite/libffi.call/cls_19byte.c
! e1adb7cce72ca554059e8afe052e0d01  libffi/testsuite/libffi.call/cls_1_1byte.c
! 01d99d1d899e6ecf137b0bb5add003b2  libffi/testsuite/libffi.call/cls_20byte.c
! 74a478a4d23c568052c25d0828eb9c37  libffi/testsuite/libffi.call/cls_20byte1.c
! 9ad6559d93c4e5946e60d6d08551748c  libffi/testsuite/libffi.call/cls_24byte.c
! ca547730d5493630c5b4f813450f6dde  libffi/testsuite/libffi.call/cls_2byte.c
! b3233fb76ba0a1266f8d9cb15edc5740  libffi/testsuite/libffi.call/cls_3_1byte.c
! 981fa45d1742be35d08ebeca3a160fbb  libffi/testsuite/libffi.call/cls_3byte1.c
! d7ec90166bceb0193b2c691db6ea7181  libffi/testsuite/libffi.call/cls_3byte2.c
! c1a9fb2d6c003c4192cc65dcc5729b52  libffi/testsuite/libffi.call/cls_4_1byte.c
! fc9c27f090d515b83d42b3b99e620022  libffi/testsuite/libffi.call/cls_4byte.c
! 3e24a186f6c1dd180e40e4afafd2ff9b  libffi/testsuite/libffi.call/cls_5_1_byte.c
! 3969c9bb2081637ee1d0b32e2ad25160  libffi/testsuite/libffi.call/cls_5byte.c
! 22a1a0b8cdbd5807d180cbbc9fab0918  libffi/testsuite/libffi.call/cls_64byte.c
! 039b1de2fa6f45815f082de8d371cacb  libffi/testsuite/libffi.call/cls_6_1_byte.c
! 797a2dbb2f02d5c380fa202c3183f1cf  libffi/testsuite/libffi.call/cls_6byte.c
! 914f440e3c2c9cbd1896e936d435f68c  libffi/testsuite/libffi.call/cls_7_1_byte.c
! 3ce38c90499f82bf4a34aaecf1eb9886  libffi/testsuite/libffi.call/cls_7byte.c
! 9598abf0c23b0db23b36c4e9f85a7906  libffi/testsuite/libffi.call/cls_8byte.c
! da2ca7e70a5b79c673c5cb2bda9484dc  libffi/testsuite/libffi.call/cls_9byte1.c
! fca022a137f79c07b163374cfa8e9a75  libffi/testsuite/libffi.call/cls_9byte2.c
! 5e97ec66e6ee3b580620c4f6ad53609f  libffi/testsuite/libffi.call/cls_align_double.c
! 7aa4f52f0a53673eab4c64b4a26a9bf7  libffi/testsuite/libffi.call/cls_align_float.c
! 1b30687b91c78c5c1506391194b1722e  libffi/testsuite/libffi.call/cls_align_longdouble.c
! db2b1aa87e094cd000add3820b451376  libffi/testsuite/libffi.call/cls_align_longdouble_split.c
! d20c89872fbfab2d1dcf158cb919e1f6  libffi/testsuite/libffi.call/cls_align_longdouble_split2.c
! 381b0b7567605ad8d4920058e6d74819  libffi/testsuite/libffi.call/cls_align_pointer.c
! 210d31f59b1e24b6c82decbca5dcbfd8  libffi/testsuite/libffi.call/cls_align_sint16.c
! 86decf48593a5c5582887b2f3c939bc4  libffi/testsuite/libffi.call/cls_align_sint32.c
! 1b183c2b0828e4a39787408358c5a787  libffi/testsuite/libffi.call/cls_align_sint64.c
! 9e79207f194ae1064fae6c8f05652d92  libffi/testsuite/libffi.call/cls_align_uint16.c
! dddb70c98e06d942bf8d51abe791492c  libffi/testsuite/libffi.call/cls_align_uint32.c
! 2557fa6d36b4ef065afbf0b13d802431  libffi/testsuite/libffi.call/cls_align_uint64.c
! 1a8dc4a7a5c36e3f5522d0c93fcfe23f  libffi/testsuite/libffi.call/cls_dbls_struct.c
! 0bdb41c9d86c6676cf323baed9763580  libffi/testsuite/libffi.call/cls_double.c
! 85af19de6f9aa3bc98869658b34fd21c  libffi/testsuite/libffi.call/cls_double_va.c
! 6e1894c5c87c0ef2ea5672eedde623ae  libffi/testsuite/libffi.call/cls_float.c
! d02c5ec1a9f0f4f4aa8d070c4943f547  libffi/testsuite/libffi.call/cls_longdouble.c
! 5b0d8dfbd840efe0b844f40f2343f90c  libffi/testsuite/libffi.call/cls_longdouble_va.c
! 212585c54b08ba182add95682ff0ca38  libffi/testsuite/libffi.call/cls_many_mixed_args.c
! 57c679dce954358cd2289e3970e758df  libffi/testsuite/libffi.call/cls_many_mixed_float_double.c
! c710800140844efb82423cbf42ac7ae4  libffi/testsuite/libffi.call/cls_multi_schar.c
! f70fd12d1acd41d2f47f4294d48106fe  libffi/testsuite/libffi.call/cls_multi_sshort.c
! 3ee2f37ad319ffa1b8afb2298ab42c3e  libffi/testsuite/libffi.call/cls_multi_sshortchar.c
! 4c35f8554a3d72ec7338b8cc90bb1add  libffi/testsuite/libffi.call/cls_multi_uchar.c
! 96b8fcda1674019ba00aaa695d934ec4  libffi/testsuite/libffi.call/cls_multi_ushort.c
! c2c37a925573cf66740e0b56038e6c18  libffi/testsuite/libffi.call/cls_multi_ushortchar.c
! 8a24bf22ffb66d78ffb9d07097ac525c  libffi/testsuite/libffi.call/cls_pointer.c
! 1530e5ac044dec5f8d028d93f6387144  libffi/testsuite/libffi.call/cls_pointer_stack.c
! dca5e991396283227d918a173bae9eeb  libffi/testsuite/libffi.call/cls_schar.c
! 37b0cfcce376e70fa2bd116dfd672022  libffi/testsuite/libffi.call/cls_sint.c
! fa0415723a96a5c2da90b627c2ea7651  libffi/testsuite/libffi.call/cls_sshort.c
! a7e2b3d43c781dc2dd39f460eb169f4c  libffi/testsuite/libffi.call/cls_struct_va1.c
! f9f33179dfc8d6845df8f4ca2dc67394  libffi/testsuite/libffi.call/cls_uchar.c
! ad196a9a06e2d455c2692738e4d52745  libffi/testsuite/libffi.call/cls_uchar_va.c
! a8a303deb2e98e9fdd113f6b0ef0ef5f  libffi/testsuite/libffi.call/cls_uint.c
! c2ce8a7e1f3ebeaca2735d077daade77  libffi/testsuite/libffi.call/cls_uint_va.c
! 7b545991c51cd6c0fd3a62a1a4e85da3  libffi/testsuite/libffi.call/cls_ulong_va.c
! 0b927b47ba0e31aabfdef019c60dbeb7  libffi/testsuite/libffi.call/cls_ulonglong.c
! 00f799e8e128a3208bcdf82e1b3a0639  libffi/testsuite/libffi.call/cls_ushort.c
! 3c51eb8730b1358e16d3257a2ea744de  libffi/testsuite/libffi.call/cls_ushort_va.c
! 8d51134a9ef24d24a2984bdf13273405  libffi/testsuite/libffi.call/err_bad_abi.c
  2c95e2fe4d23faba409cf65589b1f338  libffi/testsuite/libffi.call/err_bad_typedef.c
! 0a260be4c165c9b09d20dc556d49c7ff  libffi/testsuite/libffi.call/ffitest.h
  ace1fa30cb916c3d27b791dba947a912  libffi/testsuite/libffi.call/float.c
  f4a5e4425ea89816b7c98ac823009954  libffi/testsuite/libffi.call/float1.c
! b0cb83110d4b75027a722bd944c5d882  libffi/testsuite/libffi.call/float2.c
  e5777875ff05674a898c2698863fcf92  libffi/testsuite/libffi.call/float3.c
  588214bfe0933dee146a7320c1e76301  libffi/testsuite/libffi.call/float4.c
  1a76d7191022d46cb781036cf7a317de  libffi/testsuite/libffi.call/float_va.c
- 72f06463295746fc0d68ecd36faf4d8c  libffi/testsuite/libffi.call/huge_struct.c
  139148efc8d1a90d3087ff74864b404b  libffi/testsuite/libffi.call/many.c
  3330439d04ab3e68626c1e7d942aba88  libffi/testsuite/libffi.call/many2.c
  d52283ebfc8b14e702571caa4b15faae  libffi/testsuite/libffi.call/many_double.c
  b1fc2a9b18683c39c78174fe71d41c9a  libffi/testsuite/libffi.call/many_mixed.c
  5436e9764590fcff1fb2843206b643d6  libffi/testsuite/libffi.call/negint.c
! 0e6b8e5ee60f87f6924f96d33a544d57  libffi/testsuite/libffi.call/nested_struct.c
! 603c0f6bd65593799acb32b8720ad959  libffi/testsuite/libffi.call/nested_struct1.c
! 5f2439a6b772e5a891deb1cc27a720bb  libffi/testsuite/libffi.call/nested_struct10.c
! 5cdea341282c185038f3701005139f72  libffi/testsuite/libffi.call/nested_struct11.c
! 45140def5a7fff8a434158cba3d44619  libffi/testsuite/libffi.call/nested_struct12.c
! 3214b270fba1963541695b072f8ce30c  libffi/testsuite/libffi.call/nested_struct2.c
! d90963b4f9d554c5db857a2d2000feb7  libffi/testsuite/libffi.call/nested_struct3.c
! 8dfe86c771d317f4ab02797610cc15dd  libffi/testsuite/libffi.call/nested_struct4.c
! c183d19b2e095ae415811b42c1fcfc28  libffi/testsuite/libffi.call/nested_struct5.c
! 2577b750521812e281b999d52d597688  libffi/testsuite/libffi.call/nested_struct6.c
! ae47bd537a9d97445b9489d0f5a9743d  libffi/testsuite/libffi.call/nested_struct7.c
! 0945337cb3187ecb858ca7a3b0a57525  libffi/testsuite/libffi.call/nested_struct8.c
! da000adc1649f379bf1430bb7a33ce8e  libffi/testsuite/libffi.call/nested_struct9.c
  7b55db543073180951abb334862ac6b7  libffi/testsuite/libffi.call/pr1172638.c
- 00c9e6412441f7bba3c5d8f863d11d2f  libffi/testsuite/libffi.call/problem1.c
  09a387482b7ce131ae73efe275816fdd  libffi/testsuite/libffi.call/promotion.c
  446779e31373e96f145df84b68b53d31  libffi/testsuite/libffi.call/pyobjc-tc.c
  f442e0fb84a1398a958e163728b6d96a  libffi/testsuite/libffi.call/return_dbl.c
--- 92199,92256 ----
  74934128ac3facd5eb561545bdbc5532  libffi/src/tile/ffi.c
  cb2b6c2fe568c674b50f708613772da7  libffi/src/tile/ffitarget.h
  f56d8803c1d6045d76283e7fac454681  libffi/src/tile/tile.S
! ed71bb67304551b763a02f7ddc8a869d  libffi/src/tramp.c
! 264d52e2f2ca4db989785cc57dfdef10  libffi/src/types.c
  52e15866f080e8d9541f6b44a152ea51  libffi/src/vax/elfbsd.S
! 83f1d9086dd20ba7da978b3421197af4  libffi/src/vax/ffi.c
  30aa04305b3eb941b4f1de70b251aca8  libffi/src/vax/ffitarget.h
! 0be1efbbd2f96f4797d30eb5eca8a423  libffi/src/x86/asmnames.h
! 83d2e3ba124520295147a0255aafb0c2  libffi/src/x86/ffi.c
! 7d93ba7d545bae76950dc57b5e553374  libffi/src/x86/ffi64.c
! 3efa9d73e3800b9869806832fa2bf84d  libffi/src/x86/ffitarget.h
! db048864cd587d20c5396ddefbceda75  libffi/src/x86/ffiw64.c
! 1037cfca8b55b81b29a72490869cb153  libffi/src/x86/internal.h
! e78cd40a51a894d54a7e2d2626613958  libffi/src/x86/internal64.h
! 071fc7b1d905344bdd6b871510a9c8aa  libffi/src/x86/sysv.S
! 1b5e5e04568642438a80263e3e74d880  libffi/src/x86/sysv_intel.S
! e6a372c1ab34c8f1f71396d597076973  libffi/src/x86/unix64.S
! 076f1dee01f3e0956ba88df96799b469  libffi/src/x86/win64.S
! 832fc35a1ff3510af32ef59fd2117b1a  libffi/src/x86/win64_intel.S
! 549bfba791a5bb2268f5e2b35332c48a  libffi/src/xtensa/ffi.c
  892c400315f5a127da4cd7a1eb7b65be  libffi/src/xtensa/ffitarget.h
! 30e1959beeb8d6392ff804e925efcc11  libffi/src/xtensa/sysv.S
  1ded054093de910d9786c62bc4fe8cc6  libffi/stamp-h.in
! 8e8befc990bd91505202466bad0815b2  libffi/testsuite/Makefile.am
! 6e37c57ddaeb9a0f1194107d485d0b8d  libffi/testsuite/Makefile.in
  dce80ba7e038ca18591aabc6d3d2582c  libffi/testsuite/config/default.exp
! 3915b0c5fcb484c89800a172f94bfca9  libffi/testsuite/lib/libffi.exp
  88f888c66cee8d916e1ac91000ecc87a  libffi/testsuite/lib/target-libpath.exp
  68db067550882b3b091a82df87310fff  libffi/testsuite/lib/wrapper.exp
! 38c126f0fb1a075c0bd7591eca1e0385  libffi/testsuite/libffi.bhaible/Makefile
! b3f6762a9cda7df26859e715049f5053  libffi/testsuite/libffi.bhaible/README
! 3b7ebd553f520825956e5610e90dbfcd  libffi/testsuite/libffi.bhaible/alignof.h
! d641d5187c4666dd31a3462c6ae71709  libffi/testsuite/libffi.bhaible/bhaible.exp
! 4e044f8e5f3bc10a55e031b60842d8f4  libffi/testsuite/libffi.bhaible/test-call.c
! 877bb6f05effdf4d5d6a9cc132c49919  libffi/testsuite/libffi.bhaible/test-callback.c
! e9712a10f30a5e2e91a5095f44f047f2  libffi/testsuite/libffi.bhaible/testcases.c
! 2c96425847acf8e7ff588c88273b45d4  libffi/testsuite/libffi.call/align_mixed.c
! ba5013eafd064227c2a9c9f498e6bdb6  libffi/testsuite/libffi.call/align_stdcall.c
! 4a73223f3b7419f5474e26ae23b604b0  libffi/testsuite/libffi.call/call.exp
  2c95e2fe4d23faba409cf65589b1f338  libffi/testsuite/libffi.call/err_bad_typedef.c
! 3987abf215c9a160539b5d60d8da40df  libffi/testsuite/libffi.call/ffitest.h
  ace1fa30cb916c3d27b791dba947a912  libffi/testsuite/libffi.call/float.c
  f4a5e4425ea89816b7c98ac823009954  libffi/testsuite/libffi.call/float1.c
! ee8cd1ab6a0bbb9732c4fe9eed094e2f  libffi/testsuite/libffi.call/float2.c
  e5777875ff05674a898c2698863fcf92  libffi/testsuite/libffi.call/float3.c
  588214bfe0933dee146a7320c1e76301  libffi/testsuite/libffi.call/float4.c
  1a76d7191022d46cb781036cf7a317de  libffi/testsuite/libffi.call/float_va.c
  139148efc8d1a90d3087ff74864b404b  libffi/testsuite/libffi.call/many.c
  3330439d04ab3e68626c1e7d942aba88  libffi/testsuite/libffi.call/many2.c
  d52283ebfc8b14e702571caa4b15faae  libffi/testsuite/libffi.call/many_double.c
  b1fc2a9b18683c39c78174fe71d41c9a  libffi/testsuite/libffi.call/many_mixed.c
  5436e9764590fcff1fb2843206b643d6  libffi/testsuite/libffi.call/negint.c
! 8aa7375a792a71efd2376257847225e8  libffi/testsuite/libffi.call/offsets.c
  7b55db543073180951abb334862ac6b7  libffi/testsuite/libffi.call/pr1172638.c
  09a387482b7ce131ae73efe275816fdd  libffi/testsuite/libffi.call/promotion.c
  446779e31373e96f145df84b68b53d31  libffi/testsuite/libffi.call/pyobjc-tc.c
  f442e0fb84a1398a958e163728b6d96a  libffi/testsuite/libffi.call/return_dbl.c
*************** b7915d69fd4da55413d80c64fe1a7f57  libffi
*** 86831,86845 ****
  866d838b632f6386651d20ce470fb97d  libffi/testsuite/libffi.call/return_sl.c
  29cfe9ac6e19ee1487ae861350762147  libffi/testsuite/libffi.call/return_uc.c
  3a6009ea065561440e779c52ceb86a9c  libffi/testsuite/libffi.call/return_ul.c
- 1d71de28e244ca7911e151d4d81099ba  libffi/testsuite/libffi.call/stret_large.c
- b6b4e24f5afbaf7409816b6afa5fc677  libffi/testsuite/libffi.call/stret_large2.c
- 890c6b3ef3b120573377b37dc90fe592  libffi/testsuite/libffi.call/stret_medium.c
- cb7f47822bec926e1faaa1722587049e  libffi/testsuite/libffi.call/stret_medium2.c
  2081d64816600ca4535343b980219cfe  libffi/testsuite/libffi.call/strlen.c
  74d8371e40c246748fa03ce15125455f  libffi/testsuite/libffi.call/strlen2.c
  d6ea10c1773b643019f24db9e2e52eb2  libffi/testsuite/libffi.call/strlen3.c
  04c83732b01d12a794e456448d2a2889  libffi/testsuite/libffi.call/strlen4.c
  29fbee97acbf46cc5a1447502298fdb2  libffi/testsuite/libffi.call/struct1.c
  72baefd1e61e8272dbb7c9e9c41c3fce  libffi/testsuite/libffi.call/struct2.c
  0e34f0ca12c3a9976525ee704ecb4b07  libffi/testsuite/libffi.call/struct3.c
  ef4a954bef98225aaf38adb49cd3fbe0  libffi/testsuite/libffi.call/struct4.c
--- 92267,92278 ----
  866d838b632f6386651d20ce470fb97d  libffi/testsuite/libffi.call/return_sl.c
  29cfe9ac6e19ee1487ae861350762147  libffi/testsuite/libffi.call/return_uc.c
  3a6009ea065561440e779c52ceb86a9c  libffi/testsuite/libffi.call/return_ul.c
  2081d64816600ca4535343b980219cfe  libffi/testsuite/libffi.call/strlen.c
  74d8371e40c246748fa03ce15125455f  libffi/testsuite/libffi.call/strlen2.c
  d6ea10c1773b643019f24db9e2e52eb2  libffi/testsuite/libffi.call/strlen3.c
  04c83732b01d12a794e456448d2a2889  libffi/testsuite/libffi.call/strlen4.c
  29fbee97acbf46cc5a1447502298fdb2  libffi/testsuite/libffi.call/struct1.c
+ 97a1394bfa466ad546cd43626f3ab115  libffi/testsuite/libffi.call/struct10.c
  72baefd1e61e8272dbb7c9e9c41c3fce  libffi/testsuite/libffi.call/struct2.c
  0e34f0ca12c3a9976525ee704ecb4b07  libffi/testsuite/libffi.call/struct3.c
  ef4a954bef98225aaf38adb49cd3fbe0  libffi/testsuite/libffi.call/struct4.c
*************** d2920b5f89901d939f43adf536e96e91  libffi
*** 86848,86859 ****
  811734d9479ea9497dce819e117eba3a  libffi/testsuite/libffi.call/struct7.c
  0d2479c06958a107a4f563a00d6ba7ea  libffi/testsuite/libffi.call/struct8.c
  5b5cf822c9d9cdd0aa08ba677b85f60a  libffi/testsuite/libffi.call/struct9.c
- 21e881d3e7941ac27718b1c92f315203  libffi/testsuite/libffi.call/testclosure.c
  27377455643e292197b2ed18e97dfd95  libffi/testsuite/libffi.call/uninitialized.c
! bfa4bb267aae9033b35aab41ced5a36d  libffi/testsuite/libffi.call/va_1.c
  97d207a19b1e8e9c38d2efe1c57100ef  libffi/testsuite/libffi.call/va_struct1.c
  4e5deba7c4e63c5cae3e4365733d77bd  libffi/testsuite/libffi.call/va_struct2.c
  c024dd3d2510521f8b7e29eef936b9db  libffi/testsuite/libffi.call/va_struct3.c
  56663dcbfcf718fa8ed640fe9fe6bd79  libffi/testsuite/libffi.complex/cls_align_complex.inc
  b63238fc419bed697485033ac08faa86  libffi/testsuite/libffi.complex/cls_align_complex_double.c
  cfcc4cae5ff02aa7b0ca6687c3ca3b22  libffi/testsuite/libffi.complex/cls_align_complex_float.c
--- 92281,92393 ----
  811734d9479ea9497dce819e117eba3a  libffi/testsuite/libffi.call/struct7.c
  0d2479c06958a107a4f563a00d6ba7ea  libffi/testsuite/libffi.call/struct8.c
  5b5cf822c9d9cdd0aa08ba677b85f60a  libffi/testsuite/libffi.call/struct9.c
  27377455643e292197b2ed18e97dfd95  libffi/testsuite/libffi.call/uninitialized.c
! 188d7481aa4319f47c47a0f25aa0637f  libffi/testsuite/libffi.call/va_1.c
! 553d1178b1b1222a99b3c8ca6716478f  libffi/testsuite/libffi.call/va_2.c
  97d207a19b1e8e9c38d2efe1c57100ef  libffi/testsuite/libffi.call/va_struct1.c
  4e5deba7c4e63c5cae3e4365733d77bd  libffi/testsuite/libffi.call/va_struct2.c
  c024dd3d2510521f8b7e29eef936b9db  libffi/testsuite/libffi.call/va_struct3.c
+ 654fa11cc3957125bf1586780e4ea457  libffi/testsuite/libffi.closures/closure.exp
+ 95a3d81256c777f68d1d74641cce6f15  libffi/testsuite/libffi.closures/closure_fn0.c
+ af1c73f8927fd6ff7f3d0169d6a16bfa  libffi/testsuite/libffi.closures/closure_fn1.c
+ 786c19f83b67c7b045c7603cc940dc6a  libffi/testsuite/libffi.closures/closure_fn2.c
+ 80762a3d4a50c6d41904442445de79d0  libffi/testsuite/libffi.closures/closure_fn3.c
+ 155711693ac5df848dc78899d92159db  libffi/testsuite/libffi.closures/closure_fn4.c
+ 2d9a7ca775efbe9b842562715af63078  libffi/testsuite/libffi.closures/closure_fn5.c
+ 2447e0637ff7f794fc4113878f8927bb  libffi/testsuite/libffi.closures/closure_fn6.c
+ 65f570164afa446f2f157df5210b7083  libffi/testsuite/libffi.closures/closure_loc_fn0.c
+ 0ece4fa9ced11b84ddbe5a5a8f96af07  libffi/testsuite/libffi.closures/closure_simple.c
+ c97f1f851010776179eeccf84093f453  libffi/testsuite/libffi.closures/cls_12byte.c
+ 9a889ecde9cac8d6cdcab4d46358566d  libffi/testsuite/libffi.closures/cls_16byte.c
+ 74a4d0cd76ef4a68b57524e52eb6e026  libffi/testsuite/libffi.closures/cls_18byte.c
+ 8745d4a18ea0c61bfc288bdcfe144733  libffi/testsuite/libffi.closures/cls_19byte.c
+ e1adb7cce72ca554059e8afe052e0d01  libffi/testsuite/libffi.closures/cls_1_1byte.c
+ b2eea781fefee43e222cc7cb4b838333  libffi/testsuite/libffi.closures/cls_20byte.c
+ 5c03a3dcd7459c7c1fa1169197cde8c3  libffi/testsuite/libffi.closures/cls_20byte1.c
+ 7751bc36701b81965e29e46c129e88ab  libffi/testsuite/libffi.closures/cls_24byte.c
+ ca547730d5493630c5b4f813450f6dde  libffi/testsuite/libffi.closures/cls_2byte.c
+ b3233fb76ba0a1266f8d9cb15edc5740  libffi/testsuite/libffi.closures/cls_3_1byte.c
+ 981fa45d1742be35d08ebeca3a160fbb  libffi/testsuite/libffi.closures/cls_3byte1.c
+ d7ec90166bceb0193b2c691db6ea7181  libffi/testsuite/libffi.closures/cls_3byte2.c
+ 12f6c6cc6bebd79091f086827da29c06  libffi/testsuite/libffi.closures/cls_3float.c
+ c1a9fb2d6c003c4192cc65dcc5729b52  libffi/testsuite/libffi.closures/cls_4_1byte.c
+ fc9c27f090d515b83d42b3b99e620022  libffi/testsuite/libffi.closures/cls_4byte.c
+ f745e72138a719631b458817a1295863  libffi/testsuite/libffi.closures/cls_5_1_byte.c
+ cab5a789f1e845f2a50a935019565269  libffi/testsuite/libffi.closures/cls_5byte.c
+ 22a1a0b8cdbd5807d180cbbc9fab0918  libffi/testsuite/libffi.closures/cls_64byte.c
+ 484a8834ac2fd7881c3cec99b25831cd  libffi/testsuite/libffi.closures/cls_6_1_byte.c
+ 9ffba46ce5a6380a571b53c7b5b55523  libffi/testsuite/libffi.closures/cls_6byte.c
+ 2be3cf6f4966b2e1561516e8095ff02d  libffi/testsuite/libffi.closures/cls_7_1_byte.c
+ 1d31be781ad2fd1bf34c1a03f9fb821b  libffi/testsuite/libffi.closures/cls_7byte.c
+ 9598abf0c23b0db23b36c4e9f85a7906  libffi/testsuite/libffi.closures/cls_8byte.c
+ 5e4ea1178f1db13547b77b5a71f57269  libffi/testsuite/libffi.closures/cls_9byte1.c
+ 4c5fea9bfe32daae8306b28fce47c54a  libffi/testsuite/libffi.closures/cls_9byte2.c
+ 155eb02ef8ba5cecc451ccee21d56d3c  libffi/testsuite/libffi.closures/cls_align_double.c
+ e261dc460c842d0812e86c24b1d78bb4  libffi/testsuite/libffi.closures/cls_align_float.c
+ 58d3a71d01f5ada00517cfbcdfaa05ac  libffi/testsuite/libffi.closures/cls_align_longdouble.c
+ 8a425ff10bdac02045090e015171fe37  libffi/testsuite/libffi.closures/cls_align_longdouble_split.c
+ fc103635d26dc98a4a52503077d3171e  libffi/testsuite/libffi.closures/cls_align_longdouble_split2.c
+ e0a0faf2923c59beb9308d2bbfd9a942  libffi/testsuite/libffi.closures/cls_align_pointer.c
+ be71ba558190aab491610f60aac2dd1b  libffi/testsuite/libffi.closures/cls_align_sint16.c
+ 9b698695672b30e7766da86dc2b65c07  libffi/testsuite/libffi.closures/cls_align_sint32.c
+ 20bfefedfc2df29636910fc83fa3ff0b  libffi/testsuite/libffi.closures/cls_align_sint64.c
+ f34901721d749fd570e05dc365bedfee  libffi/testsuite/libffi.closures/cls_align_uint16.c
+ 8de4664d157fc0d543d0e24cb17efaa6  libffi/testsuite/libffi.closures/cls_align_uint32.c
+ ab7742be2f3b25a65a442dbb2cd2b50c  libffi/testsuite/libffi.closures/cls_align_uint64.c
+ 2a5583f3f9f0e75e7e2c4b80c30e1db0  libffi/testsuite/libffi.closures/cls_dbls_struct.c
+ 0bdb41c9d86c6676cf323baed9763580  libffi/testsuite/libffi.closures/cls_double.c
+ 85af19de6f9aa3bc98869658b34fd21c  libffi/testsuite/libffi.closures/cls_double_va.c
+ 6e1894c5c87c0ef2ea5672eedde623ae  libffi/testsuite/libffi.closures/cls_float.c
+ d02c5ec1a9f0f4f4aa8d070c4943f547  libffi/testsuite/libffi.closures/cls_longdouble.c
+ 5b0d8dfbd840efe0b844f40f2343f90c  libffi/testsuite/libffi.closures/cls_longdouble_va.c
+ 212585c54b08ba182add95682ff0ca38  libffi/testsuite/libffi.closures/cls_many_mixed_args.c
+ 57c679dce954358cd2289e3970e758df  libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c
+ 3c03404c0190b953246e25c2cd0c52b3  libffi/testsuite/libffi.closures/cls_multi_schar.c
+ b3813529e43d421501c4100edac83712  libffi/testsuite/libffi.closures/cls_multi_sshort.c
+ 8b586fda4171625a7e6fe8fb0248e24f  libffi/testsuite/libffi.closures/cls_multi_sshortchar.c
+ 954a34ea79afbbc3e81358689a8ada79  libffi/testsuite/libffi.closures/cls_multi_uchar.c
+ 285759347d627be1f0c1a920e766508f  libffi/testsuite/libffi.closures/cls_multi_ushort.c
+ a4aecda5d16b6b4ff15951a58205ed88  libffi/testsuite/libffi.closures/cls_multi_ushortchar.c
+ 8a24bf22ffb66d78ffb9d07097ac525c  libffi/testsuite/libffi.closures/cls_pointer.c
+ 1530e5ac044dec5f8d028d93f6387144  libffi/testsuite/libffi.closures/cls_pointer_stack.c
+ dca5e991396283227d918a173bae9eeb  libffi/testsuite/libffi.closures/cls_schar.c
+ 37b0cfcce376e70fa2bd116dfd672022  libffi/testsuite/libffi.closures/cls_sint.c
+ fa0415723a96a5c2da90b627c2ea7651  libffi/testsuite/libffi.closures/cls_sshort.c
+ a7e2b3d43c781dc2dd39f460eb169f4c  libffi/testsuite/libffi.closures/cls_struct_va1.c
+ f9f33179dfc8d6845df8f4ca2dc67394  libffi/testsuite/libffi.closures/cls_uchar.c
+ a8a303deb2e98e9fdd113f6b0ef0ef5f  libffi/testsuite/libffi.closures/cls_uint.c
+ c2ce8a7e1f3ebeaca2735d077daade77  libffi/testsuite/libffi.closures/cls_uint_va.c
+ 7b545991c51cd6c0fd3a62a1a4e85da3  libffi/testsuite/libffi.closures/cls_ulong_va.c
+ 0b927b47ba0e31aabfdef019c60dbeb7  libffi/testsuite/libffi.closures/cls_ulonglong.c
+ 00f799e8e128a3208bcdf82e1b3a0639  libffi/testsuite/libffi.closures/cls_ushort.c
+ 8d51134a9ef24d24a2984bdf13273405  libffi/testsuite/libffi.closures/err_bad_abi.c
+ 3987abf215c9a160539b5d60d8da40df  libffi/testsuite/libffi.closures/ffitest.h
+ b00df4bb73e255dbdbef16779d5dc6c7  libffi/testsuite/libffi.closures/huge_struct.c
+ 1b4c8843984e3d6ae09032b02bfc64eb  libffi/testsuite/libffi.closures/nested_struct.c
+ 76549bc0e1457475625727c72131cfbc  libffi/testsuite/libffi.closures/nested_struct1.c
+ c208ae0468ee6688a753297d3ad0003d  libffi/testsuite/libffi.closures/nested_struct10.c
+ 5cdea341282c185038f3701005139f72  libffi/testsuite/libffi.closures/nested_struct11.c
+ d2295b89560dc59868be757419c2e0d6  libffi/testsuite/libffi.closures/nested_struct12.c
+ 371ae5b1747f876c6612b09ee0a3e66d  libffi/testsuite/libffi.closures/nested_struct13.c
+ b1ee2868d967641385c091a7157b2f27  libffi/testsuite/libffi.closures/nested_struct2.c
+ fd3296110ef2f80fed48705fdd9b1b9e  libffi/testsuite/libffi.closures/nested_struct3.c
+ 8dfe86c771d317f4ab02797610cc15dd  libffi/testsuite/libffi.closures/nested_struct4.c
+ c183d19b2e095ae415811b42c1fcfc28  libffi/testsuite/libffi.closures/nested_struct5.c
+ 2577b750521812e281b999d52d597688  libffi/testsuite/libffi.closures/nested_struct6.c
+ ae47bd537a9d97445b9489d0f5a9743d  libffi/testsuite/libffi.closures/nested_struct7.c
+ 0945337cb3187ecb858ca7a3b0a57525  libffi/testsuite/libffi.closures/nested_struct8.c
+ da000adc1649f379bf1430bb7a33ce8e  libffi/testsuite/libffi.closures/nested_struct9.c
+ 00c9e6412441f7bba3c5d8f863d11d2f  libffi/testsuite/libffi.closures/problem1.c
+ f0d7ac0f4c46fedd9236941fee3734fe  libffi/testsuite/libffi.closures/single_entry_structs1.c
+ b0f6b491966d196868db60ae77e8b802  libffi/testsuite/libffi.closures/single_entry_structs2.c
+ 61150213ae54242342d8e55ea434a7c8  libffi/testsuite/libffi.closures/single_entry_structs3.c
+ 1d71de28e244ca7911e151d4d81099ba  libffi/testsuite/libffi.closures/stret_large.c
+ b6b4e24f5afbaf7409816b6afa5fc677  libffi/testsuite/libffi.closures/stret_large2.c
+ af8120c9522daaf3aeca3284ab521494  libffi/testsuite/libffi.closures/stret_medium.c
+ 5f172be0cdacafffaa3978bf2df9a4bd  libffi/testsuite/libffi.closures/stret_medium2.c
+ 2ea2e2ba822811cd9fd336f41df6198b  libffi/testsuite/libffi.closures/testclosure.c
+ 0e06b1c4de82582129c72b43b797efe6  libffi/testsuite/libffi.closures/unwindtest.cc
+ 356db1b1b8ce3d7bc7c7373914bd21ad  libffi/testsuite/libffi.closures/unwindtest_ffi_call.cc
  56663dcbfcf718fa8ed640fe9fe6bd79  libffi/testsuite/libffi.complex/cls_align_complex.inc
  b63238fc419bed697485033ac08faa86  libffi/testsuite/libffi.complex/cls_align_complex_double.c
  cfcc4cae5ff02aa7b0ca6687c3ca3b22  libffi/testsuite/libffi.complex/cls_align_complex_float.c
*************** a3eb5dee2788fe0a6c42502ba658eddd  libffi
*** 86900,87016 ****
  2ce6f3cfc3e18a428e0cd7da8f1df6d5  libffi/testsuite/libffi.go/closure1.c
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
! 5a1e7995ce0d79554e23dda8716027c1  libffi/testsuite/libffi.go/static-chain.h
! d47c79b281339983862a8e52d8c73f0f  libffi/testsuite/libffi.special/ffitestcxx.h
! 291be426192f460f6a07dfe1c96ab094  libffi/testsuite/libffi.special/special.exp
! 93fc3ea311b79f64004992807ce75d1e  libffi/testsuite/libffi.special/unwindtest.cc
! 185d0795017fbbe253a13db8e34085f9  libffi/testsuite/libffi.special/unwindtest_ffi_call.cc
! 6eb0d5982b6db18571060241a0f5b0a9  libgcc/ChangeLog
! 90ca8ec10aa72a56ea751ad2cb5c131a  libgcc/Makefile.in
! baa9afece0e8bacf77a73da979ef7ffd  libgcc/config.host
  312fccd8251056a36e26bad71f9cfaa2  libgcc/config.in
! 5d16c02b68779d0e7fb45016d4ecb4ac  libgcc/config/aarch64/aarch64-unwind.h
! 646d68758bd6b30ca567cbceb14dfb6a  libgcc/config/aarch64/crtfastmath.c
! 2f14f27fe2e1ef947649181113437918  libgcc/config/aarch64/crti.S
! d6fe116472715bfb31867df3f8ab6a17  libgcc/config/aarch64/crtn.S
! cfe47d82e0550bbf47dc813dc9bbe0e0  libgcc/config/aarch64/freebsd-unwind.h
! d8a39f13120bd3c04e6a660de012539c  libgcc/config/aarch64/libgcc-softfp.ver
! 988f848a48f8b5e837cc00431d88c52f  libgcc/config/aarch64/linux-unwind.h
! 40132133c0c5920f1fbe0e2f68fe1a20  libgcc/config/aarch64/lse-init.c
! 3dbd9bbf24aab9a0ce5e58a017487e43  libgcc/config/aarch64/lse.S
! b4ebe34df7eb6f156fa0092446240683  libgcc/config/aarch64/sfp-exceptions.c
! 5686e75a58d21cab99056d441253793a  libgcc/config/aarch64/sfp-machine.h
! 0fed261daa40e6ac5e19e0418624df97  libgcc/config/aarch64/sync-cache.c
! 46ad32ea4432c33cc66b5c506f256f85  libgcc/config/aarch64/t-aarch64
! a21eb9a6807f6899bae0eba1b99913d8  libgcc/config/aarch64/t-lse
  2df62f8f58c3b33868deef587589dd2d  libgcc/config/aarch64/t-softfp
! cf8972e02bca2f3487befef7eb41b710  libgcc/config/aarch64/value-unwind.h
! 4298c844b474b4c6e1fd422499d78722  libgcc/config/alpha/crtfastmath.c
! b2a3a03f45b17b1a8b0ce1925942d5e3  libgcc/config/alpha/libgcc-alpha-ldbl.ver
! 06ec6f348d05ea7a0cf23072a710b067  libgcc/config/alpha/linux-unwind.h
! 1fd4fb65e3c1341d59df4a32aaafb98e  libgcc/config/alpha/qrnnd.S
  e06033e6f9902c9e703e237d511df6c4  libgcc/config/alpha/t-alpha
  95db551210150c5b18529c72cfdaeabf  libgcc/config/alpha/t-ieee
  0ae5eceefb3934014e67594e67f44a5c  libgcc/config/alpha/t-linux
  600b5cfe4987de3985ad1ff7316166cc  libgcc/config/alpha/t-vms
! 6bd64aab4ed066c217db4c4cb97df7d5  libgcc/config/alpha/vms-dwarf2.S
! 056b46860118a1bf8ce3ea0c702b8074  libgcc/config/alpha/vms-dwarf2eh.S
! 34f86482d6dd70017b3c3ea4dd8740e9  libgcc/config/alpha/vms-gcc_shell_handler.c
! e7726c55a5b56558d2ecda28c4e0084c  libgcc/config/alpha/vms-unwind.h
! 186ad5ff3156176d6dc570a69219ca18  libgcc/config/arc/asm.h
! 11fe6a73a30a1178081463ae7c6239cc  libgcc/config/arc/crti.S
! bd1610d8031616e536314f1afa0ac723  libgcc/config/arc/crtn.S
! dfe2f1f4c1783e32b453a5ca5542fef4  libgcc/config/arc/crttls.S
! e893f6b27d326b25b0842596cec2e032  libgcc/config/arc/divtab-arc700.c
! a8aeb4a8002417314833673ff9964191  libgcc/config/arc/dp-hack.h
! b44735c856fbe48d06aa11a5556590e7  libgcc/config/arc/fp-hack.h
! a7a24a436880a4479eca9496e201559c  libgcc/config/arc/ieee-754/adddf3.S
! 67151c7d0c1089d230b7e287d9deb7ba  libgcc/config/arc/ieee-754/addsf3.S
! b12e264ead5d4cd968b8a5008c2fe88e  libgcc/config/arc/ieee-754/arc-ieee-754.h
! b3d696704a0276649c7d18a3c7b5f848  libgcc/config/arc/ieee-754/arc600-dsp/divdf3.S
! 65a59a5a718c74fcad080719ba259215  libgcc/config/arc/ieee-754/arc600-dsp/divsf3.S
! 30b2a50b7fa87c13065a8e37cddd659e  libgcc/config/arc/ieee-754/arc600-dsp/muldf3.S
! 4dd55374b2d08125897d71514d8fac68  libgcc/config/arc/ieee-754/arc600-dsp/mulsf3.S
! b1f6b122bfc3fb996273d99fbbb5d84f  libgcc/config/arc/ieee-754/arc600-mul64/divdf3.S
! 33360c76be2eff94b7be6e51cfcf3307  libgcc/config/arc/ieee-754/arc600-mul64/divsf3.S
! ee7b540033b7f6f5e817029779d407b5  libgcc/config/arc/ieee-754/arc600-mul64/muldf3.S
! f297010bd4e5b5452cb6f19e91876443  libgcc/config/arc/ieee-754/arc600-mul64/mulsf3.S
! e83a433c347ab5bf5edacb1990eb26d1  libgcc/config/arc/ieee-754/arc600/divsf3.S
! 3b5c237a1e60f59d952948f94e6934c4  libgcc/config/arc/ieee-754/arc600/mulsf3.S
! 75fc68cd150a17a5e6387817d55ba625  libgcc/config/arc/ieee-754/divdf3.S
! 7d8a70c25a504270e6837edee980a561  libgcc/config/arc/ieee-754/divsf3-stdmul.S
! ceffcb868ff33301014290ddaa6a5418  libgcc/config/arc/ieee-754/divsf3.S
! 6d9279ad377c12044bf3c4690844568b  libgcc/config/arc/ieee-754/divtab-arc-df.c
! 13d2d7537d5bf0549edfe25812ae6d93  libgcc/config/arc/ieee-754/divtab-arc-sf.c
! 426c5f43d6378bb91c608d93c85f3560  libgcc/config/arc/ieee-754/eqdf2.S
! ed60e331c9a3d52bf183db94bb860eb0  libgcc/config/arc/ieee-754/eqsf2.S
! 4a4caca9a60d54c540865514da084ab5  libgcc/config/arc/ieee-754/extendsfdf2.S
! 1dc3c2a52d0b40fcf978ebf4ec99717f  libgcc/config/arc/ieee-754/fixdfsi.S
! aebf50984da07afa7a83d2442bafc38d  libgcc/config/arc/ieee-754/fixsfsi.S
! 41bedd4c1c2148f29a074c4c8f836b09  libgcc/config/arc/ieee-754/fixunsdfsi.S
! b1b1aeeed5a6e9d8ffb6c3f1299d0ad9  libgcc/config/arc/ieee-754/floatsidf.S
! 2a6468eeb0ba65b75f41ca5aab03fb12  libgcc/config/arc/ieee-754/floatsisf.S
! f10c51708fe3eda931f5265e91623dee  libgcc/config/arc/ieee-754/floatunsidf.S
! 970b53303d9e4c0369db7dc0b0b14f90  libgcc/config/arc/ieee-754/gedf2.S
! 2a31c769e832a7a9fc9de4cc1969ca62  libgcc/config/arc/ieee-754/gesf2.S
! e3d3c29b7eae3620207533b647b53b57  libgcc/config/arc/ieee-754/gtdf2.S
! a7ff8597853599a431d5150e30c9dd1c  libgcc/config/arc/ieee-754/gtsf2.S
! 15a5c5fe991f1c0eff976aba8aab02c6  libgcc/config/arc/ieee-754/muldf3.S
! eee859f5069a9d4655b9b18b59699edc  libgcc/config/arc/ieee-754/mulsf3.S
! b99c77702b2d82059a83cb684f6fbc7e  libgcc/config/arc/ieee-754/orddf2.S
! b5a16521630029351ab0c983d83eff2a  libgcc/config/arc/ieee-754/ordsf2.S
! f692cc03032b23204c0bd06aed3e1844  libgcc/config/arc/ieee-754/truncdfsf2.S
! d07a3c7670539d3f1e4795d51c66a9f5  libgcc/config/arc/ieee-754/uneqdf2.S
! 552d58bbcbd036d7742b0bd7d73e8400  libgcc/config/arc/ieee-754/uneqsf2.S
! 643a868e7ce818ea3b3e33d4db39cf6c  libgcc/config/arc/initfini.c
! 2eb3081a1665e01a2201682aeec426ae  libgcc/config/arc/lib1funcs.S
! fa3baf3941c17c8a426526dfa66b46b3  libgcc/config/arc/lib2funcs.c
! 0380cb6a8b1d458e5985d22b7dc5a4e5  libgcc/config/arc/libgcc-excl.ver
! d96e1dec75c44f4929c35b117823f8f1  libgcc/config/arc/linux-unwind-reg.def
! af04682aec71b972a250792207ece68b  libgcc/config/arc/linux-unwind.h
! 1b4f6fd5da8f8a72baa7f3629ac2314f  libgcc/config/arc/t-arc
! 45d37ea77271a574b5d617976cfb474c  libgcc/config/arc/t-arc-uClibc
! 05e99695d5c08ccc12142c450fbf04a6  libgcc/config/arm/bpabi-lib.h
! 948da53bf729f7f02ca639467301613f  libgcc/config/arm/bpabi-v6m.S
! d9bcbec2d14baa5135f2a36aef6016bd  libgcc/config/arm/bpabi.S
! 3620d984b369db7d3f3875a80e3b366e  libgcc/config/arm/bpabi.c
! 74837f3eb9bfe8eb95f850587ee60f1c  libgcc/config/arm/cmse.c
! 34776f3e177219a2c003d0d14c873da9  libgcc/config/arm/cmse_nonsecure_call.S
! f1301f028bc00b88c6525f9b250f22a1  libgcc/config/arm/crtfastmath.c
! 675c3bba5726e1249196dd110a9aa88c  libgcc/config/arm/crti.S
! 3c823dbff1b7f9aecbe3c7d2cbe147db  libgcc/config/arm/crtn.S
! 7a7b87e8afd92b2bacec49e41885fa3b  libgcc/config/arm/fp16.c
! 6aba6ad69832aa8a336244bec1928420  libgcc/config/arm/freebsd-atomic.c
! 88ddd1a2a6eb927f4e712e35854cd847  libgcc/config/arm/ieee754-df.S
! f5fc1898884c017b694f9f4bee5d8dd9  libgcc/config/arm/ieee754-sf.S
! 3928494ab3242378a451a24b482b2b56  libgcc/config/arm/lib1funcs.S
! 28912b08446402aa23eca489137b187e  libgcc/config/arm/libgcc-bpabi.ver
! 042f02484b2a67e32c811686719152f7  libgcc/config/arm/libunwind.S
! 4bf6aa80e6ee424d70bcbf1c2725f820  libgcc/config/arm/linux-atomic-64bit.c
! 60f88662b14b3cd9f4f38ba97a5cb97f  libgcc/config/arm/linux-atomic.c
! e6a4e996bea7da22db4220c01f1bf373  libgcc/config/arm/pr-support.c
  131990bf9b0a8ab71c7abf0c49d4fbfa  libgcc/config/arm/sfp-machine.h
! 1ecd2f9492d815763268cc9fa7796502  libgcc/config/arm/symbian-lib.h
  8bcfdd455e9a830ab6b5da1e39fab4d1  libgcc/config/arm/t-arm
  95ccb8d9807e7229274f546d4664a038  libgcc/config/arm/t-bpabi
  be2d9c3da6e3f9aa4be1b2856a70de22  libgcc/config/arm/t-elf
--- 92434,92546 ----
  2ce6f3cfc3e18a428e0cd7da8f1df6d5  libffi/testsuite/libffi.go/closure1.c
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
! 189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! 3245bf7bf495bf9b1a5acbfb864c3c09  libgcc/ChangeLog
! e4f6419fde8efa2cce0df95a75d7ff0f  libgcc/Makefile.in
! 9dbca7c5391de8ac8b623dc5278ae0d5  libgcc/config.host
  312fccd8251056a36e26bad71f9cfaa2  libgcc/config.in
! 72a922a69d4ebc17df642dac3bba79c7  libgcc/config/aarch64/aarch64-unwind.h
! 63ef63f968be856e19a3ac335fb7c645  libgcc/config/aarch64/crtfastmath.c
! 3fd7657da85b837fdc45b6c9c722f28f  libgcc/config/aarch64/crti.S
! 09155a530de72f22b7958b119f19eb6e  libgcc/config/aarch64/crtn.S
! 4aad22f0df59faf784799270fa54e91c  libgcc/config/aarch64/freebsd-unwind.h
! 404c3f0d922422ba0743bb42b6b57b20  libgcc/config/aarch64/libgcc-softfp.ver
! e8996753809b6d7247519cd9920ba2b6  libgcc/config/aarch64/linux-unwind.h
! 5042ced7a59efa915022941a70c58b72  libgcc/config/aarch64/lse-init.c
! d1a47d7f69b73a71df4e2ba9bda9d6fc  libgcc/config/aarch64/lse.S
! b1bb0cbcf929be5ac5976d205f9dd045  libgcc/config/aarch64/sfp-exceptions.c
! 037140247a490aba1a5d1cadb534a70e  libgcc/config/aarch64/sfp-machine.h
! 33b0c8e6863ba4b458cd20730c34d0fa  libgcc/config/aarch64/sync-cache.c
! 67337ad3c00f04230637265d946e827b  libgcc/config/aarch64/t-aarch64
! fb0dd0ca5f13bd3f5392ccb85ba4f1b2  libgcc/config/aarch64/t-lse
  2df62f8f58c3b33868deef587589dd2d  libgcc/config/aarch64/t-softfp
! d5beeb37c4319cd8dac2739af3372618  libgcc/config/aarch64/value-unwind.h
! f79c3bbf855715c0fb56bd6b7abe4baf  libgcc/config/alpha/crtfastmath.c
! 0a6f75cac7ca3d6b143924b53d6af7ab  libgcc/config/alpha/libgcc-alpha-ldbl.ver
! 6365fac50d08835677c3bd8416a67922  libgcc/config/alpha/linux-unwind.h
! 824b060747b11fc8f545ba34b8a273e3  libgcc/config/alpha/qrnnd.S
  e06033e6f9902c9e703e237d511df6c4  libgcc/config/alpha/t-alpha
  95db551210150c5b18529c72cfdaeabf  libgcc/config/alpha/t-ieee
  0ae5eceefb3934014e67594e67f44a5c  libgcc/config/alpha/t-linux
  600b5cfe4987de3985ad1ff7316166cc  libgcc/config/alpha/t-vms
! edef5422e1766f88fae7d57e25f1b73b  libgcc/config/alpha/vms-dwarf2.S
! d1d8d197941f0fe1f7331683fecfbd07  libgcc/config/alpha/vms-dwarf2eh.S
! fc4650c92d856c7e6def23e904dc9752  libgcc/config/alpha/vms-gcc_shell_handler.c
! 9b50d2990ac57d2474748bf54f0b4379  libgcc/config/alpha/vms-unwind.h
! cccc7a71c75cc52a5abb504d303e0077  libgcc/config/arc/asm.h
! d6b21ef7655274092853011eadabc2f7  libgcc/config/arc/crti.S
! b627ac4c4b7ad80a5a3fa1be52a1c003  libgcc/config/arc/crtn.S
! bcf307c73415dceed56e5384b01230f9  libgcc/config/arc/crttls.S
! 29b53e6560e1420c9f00334aa15ac945  libgcc/config/arc/divtab-arc700.c
! b245ad27475e3c19e414b41459a6a236  libgcc/config/arc/dp-hack.h
! 9a04954e0a70ac3542c3b5d8b6faf148  libgcc/config/arc/fp-hack.h
! bdf0d940b1842dd06cc87754d24ead5b  libgcc/config/arc/ieee-754/adddf3.S
! 426862030bedaa282bb9e652bec7f5b1  libgcc/config/arc/ieee-754/addsf3.S
! 78ee4e33745bd9191aff855c5ef9c385  libgcc/config/arc/ieee-754/arc-ieee-754.h
! c8302839bc0d6b07661a91bfe329bcfc  libgcc/config/arc/ieee-754/arc600-dsp/divdf3.S
! ca8bd30de68b44c9d346540f8b1fc62d  libgcc/config/arc/ieee-754/arc600-dsp/divsf3.S
! 28b8e684b36ec97b5a35c5c7ea57b4ee  libgcc/config/arc/ieee-754/arc600-dsp/muldf3.S
! ea5d2652b37320cdeae1a01332b26213  libgcc/config/arc/ieee-754/arc600-dsp/mulsf3.S
! 3ded465af5d4fa9f9f6241e0f734557a  libgcc/config/arc/ieee-754/arc600-mul64/divdf3.S
! 901111b34803efe822d8856571ae11b9  libgcc/config/arc/ieee-754/arc600-mul64/divsf3.S
! 37fcea4c318a5370f6fd9a018d1a893d  libgcc/config/arc/ieee-754/arc600-mul64/muldf3.S
! 898b5b4f632deb13d5f643ada3c0910a  libgcc/config/arc/ieee-754/arc600-mul64/mulsf3.S
! 2a5df7d45fb0ef79b30e81e59619b61d  libgcc/config/arc/ieee-754/arc600/divsf3.S
! 0b5e34d9f48d62000cab83c58b87d483  libgcc/config/arc/ieee-754/arc600/mulsf3.S
! dc060a4e7709322e48c39316e845cd0f  libgcc/config/arc/ieee-754/divdf3.S
! ba77e2878de72bdc57f48c361c3f2f46  libgcc/config/arc/ieee-754/divsf3-stdmul.S
! 274e999baebda8050e3a88fc1135b332  libgcc/config/arc/ieee-754/divsf3.S
! ce57b11eb9583ecebc13141a45c34b2c  libgcc/config/arc/ieee-754/divtab-arc-df.c
! 4bd9fc75a093b8d196d54511b408b669  libgcc/config/arc/ieee-754/divtab-arc-sf.c
! d2cc52b33ad8c3fab5861495c1aa4f1e  libgcc/config/arc/ieee-754/eqdf2.S
! 35a7d9836a265e4b80932e74e528c339  libgcc/config/arc/ieee-754/eqsf2.S
! 0bca4cf4357a77211d140977165c39a0  libgcc/config/arc/ieee-754/extendsfdf2.S
! 7c766cd2f8eae859a2b44b7ddf8dceb2  libgcc/config/arc/ieee-754/fixdfsi.S
! 46e9f5918a7328f3c3e63c7352ff907b  libgcc/config/arc/ieee-754/fixsfsi.S
! dabba279a0cd2f41a38716d4ff8c334d  libgcc/config/arc/ieee-754/fixunsdfsi.S
! 7aa2734e49796051911ac55061f65a34  libgcc/config/arc/ieee-754/floatsidf.S
! 3e272e629221e3ad14b9f69397939b62  libgcc/config/arc/ieee-754/floatsisf.S
! 48f41fb1ef44893bbfee3053e128bd08  libgcc/config/arc/ieee-754/floatunsidf.S
! a8a2ab86f110237e1e5244e1d13d122e  libgcc/config/arc/ieee-754/gedf2.S
! 30634ff5c18bfe0362a95064625a174a  libgcc/config/arc/ieee-754/gesf2.S
! c39f23b6f4b7c70f97bdcdc3c290018c  libgcc/config/arc/ieee-754/gtdf2.S
! ddf4e75deed44fc1daf8e99e1cc3c296  libgcc/config/arc/ieee-754/gtsf2.S
! 165c9aaeff1925dd273f00771ccbba9e  libgcc/config/arc/ieee-754/muldf3.S
! f1bf9d85a6942546b9d4643ffea6464f  libgcc/config/arc/ieee-754/mulsf3.S
! 2ad16c558b34569ae737e126d801bc90  libgcc/config/arc/ieee-754/orddf2.S
! 81739d225afe340364c36347acea6c06  libgcc/config/arc/ieee-754/ordsf2.S
! 8c2d262f3f7db35779111a58595682dc  libgcc/config/arc/ieee-754/truncdfsf2.S
! d1c8217982368d758cee5aa66a44dedf  libgcc/config/arc/ieee-754/uneqdf2.S
! 6536d05e13d6a476ba73238b144bf9f9  libgcc/config/arc/ieee-754/uneqsf2.S
! 8069fbcb9270c58ddc510fd0276cbbdc  libgcc/config/arc/initfini.c
! 95dc8e78f347fc0a0e251d216155c563  libgcc/config/arc/lib1funcs.S
! 4716ecdeae4a4808e143b581ff8d7e2b  libgcc/config/arc/lib2funcs.c
! b49e34cf7b8dce23c08801c5482c7ec2  libgcc/config/arc/libgcc-excl.ver
! 4b3f69ce95873958181b113426d232b0  libgcc/config/arc/linux-unwind-reg.def
! 04f5c99cbd4940064939224ec8fb85ac  libgcc/config/arc/linux-unwind.h
! 52a099da737efef67df0268356b72a0c  libgcc/config/arc/t-arc
! 4966ff4dbbc6a872b7d4ca22c8359fd0  libgcc/config/arc/t-arc-uClibc
! 57fcd76de2dfd0e6f1ad6b2a7ef5845d  libgcc/config/arm/bpabi-lib.h
! dd161f21a37a222399ef8b301518412a  libgcc/config/arm/bpabi-v6m.S
! 5c7332c4346d41f1ed4a9cbb2f7dd2d2  libgcc/config/arm/bpabi.S
! 7bedee93df51d719651d05a1a5fb9692  libgcc/config/arm/bpabi.c
! 86e6f8d59940d32bcdabd9a8d2721d50  libgcc/config/arm/cmse.c
! 286006bca8c96af68dfaa726140e86f6  libgcc/config/arm/cmse_nonsecure_call.S
! 559c90b8dc77f7ce5fe7f9202ffd2932  libgcc/config/arm/crtfastmath.c
! 146012a8864d1505564f83378601725c  libgcc/config/arm/crti.S
! c03f8d9271268dbfc352e80cdf2899f5  libgcc/config/arm/crtn.S
! 630921b284781c142f42f76cd46e8acc  libgcc/config/arm/fp16.c
! 9c82f88af0337c9f063a5ee69ff716ad  libgcc/config/arm/freebsd-atomic.c
! 484bd0876b40b8890f22ece65edde93f  libgcc/config/arm/ieee754-df.S
! 0e203035f4a1f814acf38d1c5b629030  libgcc/config/arm/ieee754-sf.S
! c09b494b41bd3e14d402003cf11ea415  libgcc/config/arm/lib1funcs.S
! eaab87342e962dc8ac20bf75e8910fa9  libgcc/config/arm/libgcc-bpabi.ver
! 841d71e1ff58ca48e7cad45c172a83f5  libgcc/config/arm/libunwind.S
! bb701e20f6b71f1ed5365b4a81c3c665  libgcc/config/arm/linux-atomic-64bit.c
! 25f427a74f87cccca049c742a2155416  libgcc/config/arm/linux-atomic.c
! 880c347234ac6052d91ad4c366ef3e03  libgcc/config/arm/pr-support.c
  131990bf9b0a8ab71c7abf0c49d4fbfa  libgcc/config/arm/sfp-machine.h
! 5608cc112bf81040cf9052b318db03a5  libgcc/config/arm/symbian-lib.h
  8bcfdd455e9a830ab6b5da1e39fab4d1  libgcc/config/arm/t-arm
  95ccb8d9807e7229274f546d4664a038  libgcc/config/arm/t-bpabi
  be2d9c3da6e3f9aa4be1b2856a70de22  libgcc/config/arm/t-elf
*************** dd1ccf1641e646fd2c36d154c45a78f3  libgcc
*** 87024,87065 ****
  fc87e45e073829d21e9427a38f435e3b  libgcc/config/arm/t-symbian
  49da02954caef0527c55b87af2bd1c4b  libgcc/config/arm/t-vxworks7
  0b61332cccc4af9b144b6db99e213dcb  libgcc/config/arm/t-wince-pe
! 1a378d5ba01aeceffdded3be5133f5fb  libgcc/config/arm/unaligned-funcs.c
! a4bad850b9e314f7f2b04161f2ca8365  libgcc/config/arm/unwind-arm-vxworks.c
! f86b268e128ae9507dd4c4ab33f481bd  libgcc/config/arm/unwind-arm.c
! 9c46de1505146bfa8b1ab5d44ffe3da5  libgcc/config/arm/unwind-arm.h
! 5c81c0e9c7191984f9dfcd0ef5148e22  libgcc/config/avr/avr-lib.h
! 083d6e7deb9351da4bbd0d0de7b0763a  libgcc/config/avr/lib1funcs-fixed.S
! 528c00778fc721cd65682dee59c24986  libgcc/config/avr/lib1funcs.S
  622f81485f02d0eac2caaafa7d3a2fd1  libgcc/config/avr/lib2-object.mk
! 8694b2f379782b84ed6357615cf633d2  libgcc/config/avr/lib2funcs.c
! 0463102ac73d8b70755095df6a10d30f  libgcc/config/avr/libf7/ChangeLog
! 01d9cd125602bd97e7101818005c93ea  libgcc/config/avr/libf7/asm-defs.h
  0b54a2cbfebb93a4e1bddfa3600d6f0b  libgcc/config/avr/libf7/f7-renames.h
! d2e81096820c9d7276656d444c139c73  libgcc/config/avr/libf7/f7-wraps.h
  c0d4a5a9b2844505ec941ff60cae008f  libgcc/config/avr/libf7/f7renames.sh
! bd55d461babc1d292e882d26b3147797  libgcc/config/avr/libf7/f7wraps.sh
! e967bbaef515b9bde9023a1a7a336849  libgcc/config/avr/libf7/libf7-array.def
  5d9def53110ec07e8f29e66d593d758f  libgcc/config/avr/libf7/libf7-asm-object.mk
! 987f580afc3d26e1d2f693c55f7d1572  libgcc/config/avr/libf7/libf7-asm.sx
  6b4886ae302fca1fa733831066c5c830  libgcc/config/avr/libf7/libf7-c-object.mk
  9e2660f882f79c124c85b8732a55464e  libgcc/config/avr/libf7/libf7-common.mk
! d911b844dc79ba84d1e0184f8f67ed31  libgcc/config/avr/libf7/libf7-const.def
! 1aa4dcdb50060d232a2e2f4cfbc19295  libgcc/config/avr/libf7/libf7-constdef.h
! 7eb032fd129b9b9a08fbb1699da64bbe  libgcc/config/avr/libf7/libf7.c
! 1b8ba89151b7e918367fe48afa44b3d1  libgcc/config/avr/libf7/libf7.h
  d8d51231243f1139dbb6a828e2340c67  libgcc/config/avr/libf7/t-libf7
  bf9360cfc14e0b0129af5560893f374e  libgcc/config/avr/libf7/t-libf7-math
  761826027ebb1cfbb089d23904494606  libgcc/config/avr/libf7/t-libf7-math-symbols
  70e4f62a264a98b6818c49fed71fa5bb  libgcc/config/avr/t-avr
  42e21fd8b00be58d09a62b8654a8ba20  libgcc/config/avr/t-avrlibc
  77d29be9a46b600293b32c93c09dacbf  libgcc/config/avr/t-copy-libgcc
! 61ac899ad7681867a1ec009fd72b8bf7  libgcc/config/bfin/crti.S
! ee3cbdc35ee9f6b61c72a4668cbb286d  libgcc/config/bfin/crtlibid.S
! dbaecc503985ac5ab62434bab7e9e329  libgcc/config/bfin/crtn.S
! 9ca51387333595191e417345df7901c4  libgcc/config/bfin/lib1funcs.S
! a7c7df56b554f34f30b8f29b903f0417  libgcc/config/bfin/libgcc-glibc.ver
! 86ee164dd9b7f4bc10f531087cf29852  libgcc/config/bfin/linux-unwind.h
  4e54ca63fc628fdd56df2687a2bf457e  libgcc/config/bfin/t-bfin
  a5e909e203a6fbf202b2eaad6bff3601  libgcc/config/bfin/t-crtlibid
  17298642a82c8a2809260d1eb08f7e4e  libgcc/config/bfin/t-crtstuff
--- 92554,92595 ----
  fc87e45e073829d21e9427a38f435e3b  libgcc/config/arm/t-symbian
  49da02954caef0527c55b87af2bd1c4b  libgcc/config/arm/t-vxworks7
  0b61332cccc4af9b144b6db99e213dcb  libgcc/config/arm/t-wince-pe
! 58c10693263de301d8775af563c4bb0a  libgcc/config/arm/unaligned-funcs.c
! 402035227e967b2b9c22212dc77db27b  libgcc/config/arm/unwind-arm-vxworks.c
! 1f00525acff65c10e2aa5e99db726ff4  libgcc/config/arm/unwind-arm.c
! 7b7f42f82eb2bbf50f8bab8dc8071aad  libgcc/config/arm/unwind-arm.h
! f7d079de49740a9b78907a3d673d7233  libgcc/config/avr/avr-lib.h
! 68cf7eaa50b13484c3bd2213aa3ca98c  libgcc/config/avr/lib1funcs-fixed.S
! 2e213af1dd13f68b1515d6340fcb540b  libgcc/config/avr/lib1funcs.S
  622f81485f02d0eac2caaafa7d3a2fd1  libgcc/config/avr/lib2-object.mk
! 8d7abef73a8c40e4840ea410d4b4ac9b  libgcc/config/avr/lib2funcs.c
! 5e634420dfd37a20614b8057eafbf142  libgcc/config/avr/libf7/ChangeLog
! a2d046f165da6bb14e927d322fc2d5f4  libgcc/config/avr/libf7/asm-defs.h
  0b54a2cbfebb93a4e1bddfa3600d6f0b  libgcc/config/avr/libf7/f7-renames.h
! 2effcc1c274d5f459695fb6d7d330053  libgcc/config/avr/libf7/f7-wraps.h
  c0d4a5a9b2844505ec941ff60cae008f  libgcc/config/avr/libf7/f7renames.sh
! 13df35ccde737868259a7ec9827d7327  libgcc/config/avr/libf7/f7wraps.sh
! 6632954a92737d796a4748e7e0dc6473  libgcc/config/avr/libf7/libf7-array.def
  5d9def53110ec07e8f29e66d593d758f  libgcc/config/avr/libf7/libf7-asm-object.mk
! 3c5f3181584d606272b30d20668de959  libgcc/config/avr/libf7/libf7-asm.sx
  6b4886ae302fca1fa733831066c5c830  libgcc/config/avr/libf7/libf7-c-object.mk
  9e2660f882f79c124c85b8732a55464e  libgcc/config/avr/libf7/libf7-common.mk
! 89bdf85b85b7719b781bd239bbf53606  libgcc/config/avr/libf7/libf7-const.def
! 3cc1eb81c98c5373281b90186181f4f3  libgcc/config/avr/libf7/libf7-constdef.h
! 984130f6f824dc1ad11221397250acf9  libgcc/config/avr/libf7/libf7.c
! d08db7b445998cee32eb93b1f367c543  libgcc/config/avr/libf7/libf7.h
  d8d51231243f1139dbb6a828e2340c67  libgcc/config/avr/libf7/t-libf7
  bf9360cfc14e0b0129af5560893f374e  libgcc/config/avr/libf7/t-libf7-math
  761826027ebb1cfbb089d23904494606  libgcc/config/avr/libf7/t-libf7-math-symbols
  70e4f62a264a98b6818c49fed71fa5bb  libgcc/config/avr/t-avr
  42e21fd8b00be58d09a62b8654a8ba20  libgcc/config/avr/t-avrlibc
  77d29be9a46b600293b32c93c09dacbf  libgcc/config/avr/t-copy-libgcc
! e904ded11a97474e1d85057ec4e51cf6  libgcc/config/bfin/crti.S
! e9022a54f5965df4e373a453b4391805  libgcc/config/bfin/crtlibid.S
! 8829a36a58a35e0c5683ecf52cff4149  libgcc/config/bfin/crtn.S
! 476374b7e31dfda9eb7ae4783f29a177  libgcc/config/bfin/lib1funcs.S
! 49d092034dca25a01ba7e65109b1bffa  libgcc/config/bfin/libgcc-glibc.ver
! 1b3a13ae38b33f4f5e339808712f97cd  libgcc/config/bfin/linux-unwind.h
  4e54ca63fc628fdd56df2687a2bf457e  libgcc/config/bfin/t-bfin
  a5e909e203a6fbf202b2eaad6bff3601  libgcc/config/bfin/t-crtlibid
  17298642a82c8a2809260d1eb08f7e4e  libgcc/config/bfin/t-crtstuff
*************** a5e909e203a6fbf202b2eaad6bff3601  libgcc
*** 87067,87162 ****
  d41d8cd98f00b204e9800998ecf8427e  libgcc/config/bpf/crti.S
  d41d8cd98f00b204e9800998ecf8427e  libgcc/config/bpf/crtn.S
  8d4717fef859f166f4ef387b932a72f1  libgcc/config/bpf/t-bpf
! e8a3ce579771e8912982c4a097c2888e  libgcc/config/c6x/c6x-abi.h
! 1119da0ffa35ea79dfabd402a562014c  libgcc/config/c6x/crti.S
! 312330d6a0049c11f9af5d4e43592cbb  libgcc/config/c6x/crtn.S
! 8c54636f3f9f01bb117db6dd22759c27  libgcc/config/c6x/eqd.c
! 16d79382da493889ef048b1401a9b696  libgcc/config/c6x/eqf.c
! 0d5fff4658b07cd270bcce5d5767637f  libgcc/config/c6x/ged.c
! 5cc5fab25fb3e7451e27100066ee6ebc  libgcc/config/c6x/gef.c
! 70f1b0f1c584ec8b0a21ddbf0c587650  libgcc/config/c6x/gtd.c
! 2c55f4ffd5464dad7268bcd9c2bf12bd  libgcc/config/c6x/gtf.c
! 74ea4a09c086f575021f960b0265ad41  libgcc/config/c6x/led.c
! d89a1050eb99ec66732791ab745a5836  libgcc/config/c6x/lef.c
! 937a8be2b0279c604b9ced77616121da  libgcc/config/c6x/lib1funcs.S
! c4ebab75071f2bc126c3da62f0fc973f  libgcc/config/c6x/libgcc-eabi.ver
  9068a836854af657b1b590da0c0659f1  libgcc/config/c6x/libunwind.S
! d513ffacd8181e0d536548184353c5ee  libgcc/config/c6x/ltd.c
! 9f3c9c19b946a82020c346a39a98d6de  libgcc/config/c6x/ltf.c
! 898f1d45883159634fa3fd2902e324be  libgcc/config/c6x/pr-support.c
! f03c75536fbabb401f45a12d09aeb49d  libgcc/config/c6x/sfp-machine.h
  e001c742f33c68e3a33a709c345e0c3f  libgcc/config/c6x/t-elf
  7be94443a1640eded81b166ae8fe575f  libgcc/config/c6x/t-uclinux
! 99c5e899f7ac097c5d3a1c08625cd670  libgcc/config/c6x/unwind-c6x.c
! 1ec3a5348aebe5c3ece93e9c19cc3c34  libgcc/config/c6x/unwind-c6x.h
! 8de9a9a253c186a8b37e502b9fd8c113  libgcc/config/cr16/crti.S
! 7b7eb56702499c99bc5de18cb0a7eb8a  libgcc/config/cr16/crtlibid.S
! 12259164434839c8ca81ee2949559765  libgcc/config/cr16/crtn.S
! 470fd3a52cffc4982969c621aa7faaab  libgcc/config/cr16/divmodhi3.c
! a38faff676bca843497da64d3f48e958  libgcc/config/cr16/lib1funcs.S
! 8feeda5a3181e0819e9aad36c008b82e  libgcc/config/cr16/t-cr16
! 4172bb9ceed7a7a89cc501841f0eca5b  libgcc/config/cr16/t-crtlibid
! 4b504401f91015a295bf95ac3a01247e  libgcc/config/cr16/unwind-cr16.c
! 4802552aedbf235ab0d2b86554c8ddf7  libgcc/config/cr16/unwind-dw2.h
! e3f11b13f984ce10b2c7f9db95902ad7  libgcc/config/cris/arit.c
! d258ac6085e158c039efe30360941fdb  libgcc/config/cris/mulsi3.S
! 5b7757e6f73065a9ecb3f440befab1b0  libgcc/config/cris/sfp-machine.h
  9a0bcef0779a9665ae5b963049e27ac8  libgcc/config/cris/t-cris
  b9dc89a49f32db0757703a40d18557af  libgcc/config/cris/t-elfmulti
! 1b2ff9eafa68f554c975c3e7f81d4fcd  libgcc/config/cris/umulsidi3.S
! 3fd988175de09dc11c6641b13417bba0  libgcc/config/csky/crti.S
! 02d7f149b37e9fc714df53d5b047db80  libgcc/config/csky/crtn.S
! c44ec2d162e9b011b2cb833fbdce7145  libgcc/config/csky/lib1funcs.S
! 615409820a29fd1bec2e7c2674d0751c  libgcc/config/csky/linux-atomic.c
! 5f71f829b726f7ff169266850e4523ed  libgcc/config/csky/linux-unwind.h
! 048ac86dbf9780b52e93ef9e02beb24e  libgcc/config/csky/t-csky
! 997dc49ec383f8f8b2ac362e0a9cddf0  libgcc/config/csky/t-linux-csky
! df9f2dd192dc7f0c2fa7379e97d7dd56  libgcc/config/darwin-64.c
! 6869661ee0baed578d47394ab32af913  libgcc/config/darwin-crt-tm.c
! 03e941235ffae6f01e89a827a6ce2281  libgcc/config/darwin-crt3.c
  3d9ace1569f13aadc86ee3608541f634  libgcc/config/darwin-unwind.ver
  0a39ed05e14b91757915624896a5823f  libgcc/config/darwin10-unwind-find-enc-func.c
! c71a778a00e36dfcea7f846c3f944d73  libgcc/config/epiphany/crti.S
! 81ae5aa8ec7128f805369eae26a9ca51  libgcc/config/epiphany/crtint.S
! 66f1c169dbd8ad3adee5b4141420edf6  libgcc/config/epiphany/crtm1reg-r43.S
! 5928c83b81920094a27a94f567ed643b  libgcc/config/epiphany/crtm1reg-r63.S
! 4113477f29170d2a2f6f942d2ee04bfa  libgcc/config/epiphany/crtn.S
! 10e5fdb0f3b5c1c5fa87fa85261b1a21  libgcc/config/epiphany/crtrunc.S
! 6b0b52dbd1bc485b7dbb6979d6463178  libgcc/config/epiphany/divsi3-float.S
! 62d314258e775f66f400bf025cdd8456  libgcc/config/epiphany/divsi3.S
! 2762af30d8c7ea99af2ca44b7b3ce851  libgcc/config/epiphany/divsi3.c
! a6a8c952b4f40db59351e7ac64e5e96e  libgcc/config/epiphany/epiphany-asm.h
! 7c1a39214137edb5e06ea46852f686bf  libgcc/config/epiphany/ieee-754/eqsf2.S
! fd8e5fc7d5e32849e63f8a15aad83eaa  libgcc/config/epiphany/ieee-754/fast_div.S
! fffad1e6992ffcd93396c5394cf307fb  libgcc/config/epiphany/ieee-754/gtesf2.S
! b6b09e231375b8eca3aea889f9bb14c3  libgcc/config/epiphany/ieee-754/ordsf2.S
! 58114c90350312177a9ebdf50fb7fa2e  libgcc/config/epiphany/ieee-754/uneqsf2.S
! 0feca185c84d5d55538761fa70fb34b1  libgcc/config/epiphany/modsi3-float.S
! a36ee69f0607ada205d4f048c53b915c  libgcc/config/epiphany/modsi3.S
! 045560464d5a9e1e52e49ee46ab2046e  libgcc/config/epiphany/modsi3.c
! 3fc6e0cde5e875e62a7413f65eb60d0f  libgcc/config/epiphany/mulsi3.c
  d76fc3e367e9f20ca1d6e4b8ef979bd9  libgcc/config/epiphany/t-custom-eqsf
! 6b36e9bdfb471ca6ca75a6cfac504301  libgcc/config/epiphany/t-epiphany
! d37f851a8fd8fbe26da8316fb650a830  libgcc/config/epiphany/udivsi3-float.S
! ec3a90a1d33072f467a09e36fe98b72c  libgcc/config/epiphany/udivsi3-float.c
! ccdf8f8d49d3bd656c7b318982e759b3  libgcc/config/epiphany/udivsi3.S
! afa5eee1a87577b3d2de8acf8c732ab3  libgcc/config/epiphany/udivsi3.c
! 6654d37a01eee4fbf3581bdc13eaacf8  libgcc/config/epiphany/umodsi3-float.S
! 691ed1701e30774994edad7ce0058921  libgcc/config/epiphany/umodsi3.S
! 5243704dffd312d4c6a1806135115ba8  libgcc/config/epiphany/umodsi3.c
! a754b5d8c754202abba159920b40d80d  libgcc/config/fr30/crti.S
! 7d280025982df330f6eec2a4cde2a926  libgcc/config/fr30/crtn.S
! 17f578172b79abead988b327388a664b  libgcc/config/fr30/lib1funcs.S
  ee1781f6076fe4696c4710d29bcaa9f2  libgcc/config/fr30/t-fr30
! 40618b808a79facd9cad84ee7e6ab79c  libgcc/config/frv/cmovd.c
! ef5e3171dd2d470a516d164d207d92ff  libgcc/config/frv/cmovh.c
! 03cc197c444f0f8870572a0117eef530  libgcc/config/frv/cmovw.c
! ab664bf9a5708e72515970ff0965b3b8  libgcc/config/frv/elf-lib.h
! fc1d34f10c46583f689ff177fb367752  libgcc/config/frv/frv-abi.h
! f872e5e19a81a0b6e46f857edad025c7  libgcc/config/frv/frvbegin.c
! 746ecf1f426a2c553d3844d25b655bc1  libgcc/config/frv/frvend.c
! 6625f9b264471fc539d5f944cfa57762  libgcc/config/frv/lib1funcs.S
! d736ee76b43acc286e97eed3a03b7737  libgcc/config/frv/libgcc-glibc.ver
  519042a46e82243706e07f0df8d12e35  libgcc/config/frv/modi.c
  f7d4923f0512faafd07369fa6bccd718  libgcc/config/frv/t-frv
  edf3d4afc7174e81e4b47c0bb0de7522  libgcc/config/frv/t-linux
--- 92597,92692 ----
  d41d8cd98f00b204e9800998ecf8427e  libgcc/config/bpf/crti.S
  d41d8cd98f00b204e9800998ecf8427e  libgcc/config/bpf/crtn.S
  8d4717fef859f166f4ef387b932a72f1  libgcc/config/bpf/t-bpf
! df41cbf48e2c585b7e2908c3952bc457  libgcc/config/c6x/c6x-abi.h
! e5f5b1b7e4fc3a72f253d21b4d1e8cc9  libgcc/config/c6x/crti.S
! ecd1a13c018e1a6fa10b30933505b687  libgcc/config/c6x/crtn.S
! 8fbc1d9438ac9d560556a628d9c8be58  libgcc/config/c6x/eqd.c
! 5198202865473c4036bbc691f3d924b2  libgcc/config/c6x/eqf.c
! 9a0a900aa034309d7b213992419d4236  libgcc/config/c6x/ged.c
! b0347e2ecfc8bcc3f12e6001c7206899  libgcc/config/c6x/gef.c
! aea556aa5c37965050bcca4a9326f27a  libgcc/config/c6x/gtd.c
! f1b33cedb87d7f09da7250a9449fa36a  libgcc/config/c6x/gtf.c
! 2d85bd8a37663af26281497bf8e1cd65  libgcc/config/c6x/led.c
! 35a83c79374ccbe5aea0876c1a808a43  libgcc/config/c6x/lef.c
! 6299d5cd50cf10cb3933901efcee10bf  libgcc/config/c6x/lib1funcs.S
! 6b38236a3e8587e745362a7a2d91c1e4  libgcc/config/c6x/libgcc-eabi.ver
  9068a836854af657b1b590da0c0659f1  libgcc/config/c6x/libunwind.S
! 61ef82173fc6c8150bbd81c7ad7aaf1c  libgcc/config/c6x/ltd.c
! afe21d2dbbe4f6798d69a24fe2f42f8a  libgcc/config/c6x/ltf.c
! 7b0c0860629f2a5e1303b038a980baff  libgcc/config/c6x/pr-support.c
! bcb8e803f1b070033509f0e0227883c7  libgcc/config/c6x/sfp-machine.h
  e001c742f33c68e3a33a709c345e0c3f  libgcc/config/c6x/t-elf
  7be94443a1640eded81b166ae8fe575f  libgcc/config/c6x/t-uclinux
! d8e16dd0dde463a7d196bdb80f8b0fce  libgcc/config/c6x/unwind-c6x.c
! cc9ed5886761c6fdd4ba6f8ec4e202f3  libgcc/config/c6x/unwind-c6x.h
! 2a9f558ceda3ef6453b8f3e83515a74d  libgcc/config/cr16/crti.S
! f4c82605a5a06e76ff6b214550aa7373  libgcc/config/cr16/crtlibid.S
! a7b18538619487ef001e8d9aac0db1a5  libgcc/config/cr16/crtn.S
! 7ee0616e910448fe4745500929bb6925  libgcc/config/cr16/divmodhi3.c
! 8a411abf6278f9ccbe552e6fcebd37a1  libgcc/config/cr16/lib1funcs.S
! b0acf9f22aa1201a5ecada0c84170f58  libgcc/config/cr16/t-cr16
! 15f588079c61b6795dac93a66392fef3  libgcc/config/cr16/t-crtlibid
! fb1ff1da2feef89237b976577ebe14a1  libgcc/config/cr16/unwind-cr16.c
! 697df1807167f7e5d79b14c5f2973df2  libgcc/config/cr16/unwind-dw2.h
! 7a42bddd71dcbc9ebf0d4122bd8ae96d  libgcc/config/cris/arit.c
! e9c86723f8e2a61a56d536580a00efd9  libgcc/config/cris/mulsi3.S
! 4a348dc7bc545bbea17fe04592a622cf  libgcc/config/cris/sfp-machine.h
  9a0bcef0779a9665ae5b963049e27ac8  libgcc/config/cris/t-cris
  b9dc89a49f32db0757703a40d18557af  libgcc/config/cris/t-elfmulti
! 912b3e08b1b4450d7b05e4a406dead01  libgcc/config/cris/umulsidi3.S
! 3cf215a9c0d94df0285b4efdfd992aed  libgcc/config/csky/crti.S
! 5309b14831a798b9cef743e89e637ae4  libgcc/config/csky/crtn.S
! e74c27cf4a4bc93f9666b54d3ab03d70  libgcc/config/csky/lib1funcs.S
! b0e00f64373801057a6d7b87c6957990  libgcc/config/csky/linux-atomic.c
! 16a3df9f64c46f25afaa1bbcf037c7c1  libgcc/config/csky/linux-unwind.h
! e668588cc851831006bc8c7ab7e09763  libgcc/config/csky/t-csky
! 43e76028ce3b1039d8a435a6c5335c0a  libgcc/config/csky/t-linux-csky
! fc27792f54d080ae69deec72044fe7c8  libgcc/config/darwin-64.c
! 05a6aa190fa5a29c3b31a8d2e646e8f2  libgcc/config/darwin-crt-tm.c
! cefdb2a6f42e6873331971739c0295c8  libgcc/config/darwin-crt3.c
  3d9ace1569f13aadc86ee3608541f634  libgcc/config/darwin-unwind.ver
  0a39ed05e14b91757915624896a5823f  libgcc/config/darwin10-unwind-find-enc-func.c
! 95057989325714d78a5d2e16a04d60d4  libgcc/config/epiphany/crti.S
! c4b57a67155b4224d979de1eb2184f34  libgcc/config/epiphany/crtint.S
! 406e2cfd54bb726f1f297592e6591d5c  libgcc/config/epiphany/crtm1reg-r43.S
! 6b6ce3e9b06e2d176fa8bce1c12ba913  libgcc/config/epiphany/crtm1reg-r63.S
! 566e37ecf34fa02f550af4eb23af49d1  libgcc/config/epiphany/crtn.S
! 44f880f21c61657079267083fe3dc332  libgcc/config/epiphany/crtrunc.S
! b00b85863b1ac5023cf65bfbca986676  libgcc/config/epiphany/divsi3-float.S
! d284617976623933db6dd9174160ecf2  libgcc/config/epiphany/divsi3.S
! 3d5b4841c338e6610dc409301097b4e4  libgcc/config/epiphany/divsi3.c
! 97eff3960788d4d51fd92fa444c9347b  libgcc/config/epiphany/epiphany-asm.h
! 4d9e74a41dd4ebdc8ae098fa7fabfc45  libgcc/config/epiphany/ieee-754/eqsf2.S
! b52bdab4965b5ab3b5dbc1919a328875  libgcc/config/epiphany/ieee-754/fast_div.S
! 3c7e723fd0ff443765daac85f1621c68  libgcc/config/epiphany/ieee-754/gtesf2.S
! 91bf147692f5993a144560fd2af54970  libgcc/config/epiphany/ieee-754/ordsf2.S
! 9cfc1a6ef52a4bf944c2973cd1a37aaa  libgcc/config/epiphany/ieee-754/uneqsf2.S
! 6937b43485304e158bfb176ba942be62  libgcc/config/epiphany/modsi3-float.S
! 7e8f67f0ef4fe45b7f0391353e9c0c2f  libgcc/config/epiphany/modsi3.S
! c9657d7b561b75444e0c6fbed9a2f6a9  libgcc/config/epiphany/modsi3.c
! 11cef774381a212413a995140b86bab9  libgcc/config/epiphany/mulsi3.c
  d76fc3e367e9f20ca1d6e4b8ef979bd9  libgcc/config/epiphany/t-custom-eqsf
! 7bca8ec9a3dedc2f028cb3476e6f9228  libgcc/config/epiphany/t-epiphany
! 0dec599d9776a4e013a38bf397416b43  libgcc/config/epiphany/udivsi3-float.S
! 3af934d09a7a10bc1bfb9fedb3640823  libgcc/config/epiphany/udivsi3-float.c
! 1f5d6cd6a94ea98e905a027f7cc6da59  libgcc/config/epiphany/udivsi3.S
! 5b045c94d8a3d671782a0140c1ab0716  libgcc/config/epiphany/udivsi3.c
! 8e45d6a294084862ddda6aeea1b22639  libgcc/config/epiphany/umodsi3-float.S
! 77e2e9a5d3f333edc6eb539283f5432a  libgcc/config/epiphany/umodsi3.S
! a8e95e37d3d47aa2ccd988c0bdf7fe15  libgcc/config/epiphany/umodsi3.c
! 94dce5349e7f89419650ca00b23690fb  libgcc/config/fr30/crti.S
! 34326bc78326dfc044c12b41a5ba72f9  libgcc/config/fr30/crtn.S
! 461c7d37cd4334ea8f77dc52c9aff3dc  libgcc/config/fr30/lib1funcs.S
  ee1781f6076fe4696c4710d29bcaa9f2  libgcc/config/fr30/t-fr30
! 43a142ec8416e55988cde59ecceb7cdc  libgcc/config/frv/cmovd.c
! 87413a23b76a6bdb77d3fee48b08f7ff  libgcc/config/frv/cmovh.c
! bfc771bd5f408aee216d85b3bc4d055e  libgcc/config/frv/cmovw.c
! 1d57d6f3df285d8bc32270c4f2af5b31  libgcc/config/frv/elf-lib.h
! c5537b9e2240af45a74f5d3184c694aa  libgcc/config/frv/frv-abi.h
! fcda09625b9b068e475c0a2f3b76aa08  libgcc/config/frv/frvbegin.c
! 41f6c743b19eab4feedac24ba02e7144  libgcc/config/frv/frvend.c
! a5daf99bb62e367bc0e3239c6840fba9  libgcc/config/frv/lib1funcs.S
! 558f1060299b36586825d40368547540  libgcc/config/frv/libgcc-glibc.ver
  519042a46e82243706e07f0df8d12e35  libgcc/config/frv/modi.c
  f7d4923f0512faafd07369fa6bccd718  libgcc/config/frv/t-frv
  edf3d4afc7174e81e4b47c0bb0de7522  libgcc/config/frv/t-linux
*************** c363a68408b30fe1ae97782cfb8a4ac1  libgcc
*** 87166,87260 ****
  8655cce7a18893493cc17391c6ce08d5  libgcc/config/frv/ulltof.c
  756aa4a0c6f33a0203e0ea6594c19e38  libgcc/config/frv/umodi.c
  63a86c0eba76d6ea5b13351162b69e89  libgcc/config/ft32/crti-hw.S
! e670f5e2d9e31b46dfcb32536e9b2db1  libgcc/config/ft32/crti.S
! 0fd1b02d746b5de82fd8047dbb33443b  libgcc/config/ft32/crtn.S
  4d440904c0919d8bade72af495ee932b  libgcc/config/ft32/epilog.S
! 0b91a7695482c035e76ecca9a508c3a1  libgcc/config/ft32/lib1funcs.S
  fd43d6ac7bf2546f0be1ff27b92cf494  libgcc/config/ft32/prolog.S
  7651ba55a7767a127d4d8d9e1798196d  libgcc/config/ft32/sfp-machine.h
  de53de7ae179ee6c1472a52a63fffec9  libgcc/config/ft32/t-ft32
! c0ece4fa7e9e13a07a7e5271cbbd0f60  libgcc/config/gcn/atomic.c
! f1f07ea84f5c542de7488766a0717a1d  libgcc/config/gcn/crt0.c
! 103f5b82bbbb3509652e57e8cbf488b3  libgcc/config/gcn/gthr-gcn.h
! d525b23c7e45e184421320851ccc55ea  libgcc/config/gcn/lib2-divmod-hi.c
! 2663155f0bf266598f8eea5722b116ca  libgcc/config/gcn/lib2-divmod.c
! a62324bf6652a792256777871ab9e6ee  libgcc/config/gcn/lib2-gcn.h
  c9b91505a24abd3bc6b11e0f094edee0  libgcc/config/gcn/sfp-machine.h
! fc7cd634d54aa911e0f67cfba0b76154  libgcc/config/gcn/t-amdgcn
! 405b10f9db604f8ed890fe9e1da030ec  libgcc/config/gcn/unwind-gcn.c
! e4419c210a942f32d263426030219d70  libgcc/config/gthr-lynx.h
! 5c2e6036dd1c421c065d7b2d9ed34b88  libgcc/config/gthr-rtems.h
! 676dcf9e1f60714eb6ec737b9429be82  libgcc/config/gthr-vxworks-cond.c
! 5b12d4691946176542e4fb0b7ef10028  libgcc/config/gthr-vxworks-thread.c
! 8ebde2144757a6bd2d2c16a4ea0a0ac7  libgcc/config/gthr-vxworks-tls.c
! 4ea93d105d642fe6c1018ae7697c7579  libgcc/config/gthr-vxworks.c
! e7e8a1ce910c903b11f1b03a3d75236b  libgcc/config/gthr-vxworks.h
! 312298360556fae02b0d4338191b6a52  libgcc/config/h8300/clzhi2.c
! c152d86ecfec2d2f69457d091a7a6293  libgcc/config/h8300/crti.S
! 401c98e870bd1b3f4d013d72072b0023  libgcc/config/h8300/crtn.S
! 4478fb8e58baaea31c49d68854396164  libgcc/config/h8300/ctzhi2.c
! a0e8b88172af7a66602c30230217a0bc  libgcc/config/h8300/fixunssfsi.c
  378e602ed89f497e602776d99b46d7ad  libgcc/config/h8300/h8300-lib.h
! 06516d83c0efa352e8906d50921dceea  libgcc/config/h8300/lib1funcs.S
! cf4492ea0439a8c14a8f356a97753ee3  libgcc/config/h8300/parityhi2.c
! b186e2162a290c9f0c67669c44f2a303  libgcc/config/h8300/popcounthi2.c
! ee801dcd3742b8390ad3fa923e6ece38  libgcc/config/h8300/sfp-machine.h
  e002eff640bc32723d0216927bc99406  libgcc/config/h8300/t-h8300
  5e306047059c21ece876039122734094  libgcc/config/h8300/t-linux
! ff4f63dfedc92499a8a6dc103a58458e  libgcc/config/hardfp.c
! a8754cebd217459a0e9d14503d180eab  libgcc/config/i386/32/sfp-machine.h
  33fdee54eed1c202a39234d129f2a7ae  libgcc/config/i386/32/t-iamcu
  8271562f1de2b3fa5b976454b83bfdc0  libgcc/config/i386/32/t-softfp
! 5191cd539445f6b36145b0ce61725e22  libgcc/config/i386/32/tf-signs.c
  c823b0cff478388588a9aabedaa93068  libgcc/config/i386/64/_divtc3.c
  8f7ff4449be9588e09da2929b14b1647  libgcc/config/i386/64/_multc3.c
  6268512927fae19eb0e34459520beb28  libgcc/config/i386/64/_powitf2.c
  7d5aec02242115dca9fe0000c4ca32f0  libgcc/config/i386/64/eqtf2.c
  b2bcf8b944f937cb4f3799c02670dcee  libgcc/config/i386/64/getf2.c
  a92aa384cf96b81c0dbb642826200dd7  libgcc/config/i386/64/letf2.c
! d1337b28acd8dbde9817492f9027dbc3  libgcc/config/i386/64/sfp-machine.h
  498bbaf506a5bbdaa793f66399ece491  libgcc/config/i386/64/t-softfp-compat
  81f82acfc38a3bfdce249066001d9818  libgcc/config/i386/avx_resms64.S
  d4cd30e890b5d772946c79359704fc0b  libgcc/config/i386/avx_resms64f.S
  793f1f3f3c09d77ed96b1a0d7399432c  libgcc/config/i386/avx_resms64fx.S
  0987e17186e8a33dbf7c39d7934d4861  libgcc/config/i386/avx_resms64x.S
  ef88ad808d3f1101d7e96fae5706660f  libgcc/config/i386/avx_savms64.S
  12b992c114b195cf886a7a218b0d1e54  libgcc/config/i386/avx_savms64f.S
! 54dfd7541ad6b170544ce36e3b747391  libgcc/config/i386/cpuinfo.c
! 5988cbb8691fed1301b143dfece20344  libgcc/config/i386/crtfastmath.c
! 1963588824c73316782329999acd8f7d  libgcc/config/i386/crti.S
! d94060d50637bba068dccebb10ebd276  libgcc/config/i386/crtn.S
! 2d66658066d0c902c6a3a20ff862dd67  libgcc/config/i386/crtprec.c
! 52507966e79820fcaf9d1d53882c0b0a  libgcc/config/i386/cygming-crtbegin.c
! 95f5fe9a887e60b538f2820903427936  libgcc/config/i386/cygming-crtend.c
! 03b40e9f17bfd6c1c355707b0cc58422  libgcc/config/i386/cygwin.S
! 0cf8525eb8819bc0319ad1e52f76e00f  libgcc/config/i386/darwin-lib.h
! c0d64826a289e53ebecbb0cb6c3016b8  libgcc/config/i386/dragonfly-unwind.h
! 013c38c70c479fff2350a5d3e33f2921  libgcc/config/i386/elf-lib.h
! 704091e0d895ea6fd720a5692cb233f4  libgcc/config/i386/enable-execute-stack-mingw32.c
! fd927f085df11ab034a7498835c23dd1  libgcc/config/i386/freebsd-unwind.h
! 2f707aa968cd68f60abbc372e05c6769  libgcc/config/i386/gnu-unwind.h
! 87dfce9affedeedbdee3594d4fa65ff2  libgcc/config/i386/gthr-win32.c
! c4fdf821208a66a41499c5c24c90937a  libgcc/config/i386/gthr-win32.h
! a6eb2958cdf081f46703f5d8ec4d2094  libgcc/config/i386/i386-asm.h
! a037bdc5fa419df930a70d43dc039b79  libgcc/config/i386/libgcc-bsd.ver
! 012a445dcbda6978db6335d4e9065689  libgcc/config/i386/libgcc-cygming.ver
! f4e6907efe8022d7d6833d82ba7e690a  libgcc/config/i386/libgcc-darwin.ver
! c72b4b801cd63e8e3782ea78ad82877a  libgcc/config/i386/libgcc-glibc.ver
! 2facc8938aca02b18bc1ac4ccc7559bf  libgcc/config/i386/libgcc-sol2.ver
! b8bba8192afb556529f1a6b084c4b95d  libgcc/config/i386/linux-unwind.h
! 3cfdf3fc659f68e9a565a26ae29e9e8e  libgcc/config/i386/morestack.S
! eb3437d6c4399724a15b2867f9fd63be  libgcc/config/i386/resms64.h
! e8fda78f9f1bac1c6147220a29fd51b4  libgcc/config/i386/resms64f.h
! cd8acee123720992b630b53d0e9dd613  libgcc/config/i386/resms64fx.h
! b889d0e6611c04010f9991a8c9e83f52  libgcc/config/i386/resms64x.h
! c6a59a6ff3b7a8f522f74f5bcfb3e841  libgcc/config/i386/savms64.h
! 6706a482a32249251b09e6de18763a94  libgcc/config/i386/savms64f.h
! 6636b868b3515dbc4430cd5a3ce9db68  libgcc/config/i386/sfp-exceptions.c
! 18cab3ac32aa667da0252cb41a976439  libgcc/config/i386/sfp-machine.h
! 0dde3148a4fb2bbe1a9da9ed2e65b7f6  libgcc/config/i386/shadow-stack-unwind.h
! 02f5e541017d5aa96608b28dd6704669  libgcc/config/i386/sol2-c1.S
! dee80682121e4932e4bee4f75eac13b0  libgcc/config/i386/sol2-unwind.h
  597d8ce804b1c2e917fdb1870e7ea0ac  libgcc/config/i386/sse_resms64.S
  bedbda9d38d546838a72b745204a631f  libgcc/config/i386/sse_resms64f.S
  34b800926e66c174903d05295a562acd  libgcc/config/i386/sse_resms64fx.S
--- 92696,92795 ----
  8655cce7a18893493cc17391c6ce08d5  libgcc/config/frv/ulltof.c
  756aa4a0c6f33a0203e0ea6594c19e38  libgcc/config/frv/umodi.c
  63a86c0eba76d6ea5b13351162b69e89  libgcc/config/ft32/crti-hw.S
! 3b45437efdc770d99f156a9735fe9d17  libgcc/config/ft32/crti.S
! ae118af382e62fb54901ca9596e9b41a  libgcc/config/ft32/crtn.S
  4d440904c0919d8bade72af495ee932b  libgcc/config/ft32/epilog.S
! c5732d72272e5ef64dd163b6d91c88c1  libgcc/config/ft32/lib1funcs.S
  fd43d6ac7bf2546f0be1ff27b92cf494  libgcc/config/ft32/prolog.S
  7651ba55a7767a127d4d8d9e1798196d  libgcc/config/ft32/sfp-machine.h
  de53de7ae179ee6c1472a52a63fffec9  libgcc/config/ft32/t-ft32
! b5ebdc4520e56b3168dfb51ef914b6a4  libgcc/config/gcn/atomic.c
! 6493c642963d145c85066f5b324dfb12  libgcc/config/gcn/crt0.c
! d695edc6703cb29a46bf5cb0d2b3ea25  libgcc/config/gcn/gthr-gcn.h
! e5a09729e6224172863923925ce48623  libgcc/config/gcn/lib2-bswapti2.c
! de757c421f3c316011c4f44c21769837  libgcc/config/gcn/lib2-divmod-di.c
! b254957a881c2f71b530f67b607c301b  libgcc/config/gcn/lib2-divmod-hi.c
! 08bdeaddbcc9a1f59b8fd026acce394f  libgcc/config/gcn/lib2-divmod.c
! fd2aba22cada05e2fef8aa82f15406c3  libgcc/config/gcn/lib2-gcn.h
  c9b91505a24abd3bc6b11e0f094edee0  libgcc/config/gcn/sfp-machine.h
! 07c8d881fd370075e4d269a82ef9238a  libgcc/config/gcn/t-amdgcn
! c9fca3b49f23edb27cff5c85b0ffad31  libgcc/config/gcn/unwind-gcn.c
! 645406d33084335d0321b1e7acdd38e5  libgcc/config/gthr-lynx.h
! bc1510a56045d2728232e13d1f8a7903  libgcc/config/gthr-rtems.h
! ccfe4121a8810427f6ad9dae38510e2b  libgcc/config/gthr-vxworks-cond.c
! 99d4f7243e383f4e07fb54a47a770acb  libgcc/config/gthr-vxworks-thread.c
! 6de24a75ad7e58708837c903576a346e  libgcc/config/gthr-vxworks-tls.c
! fd67dddd484ed185ac82ef9b987076f6  libgcc/config/gthr-vxworks.c
! 1604f8e2f360f6f55335afc37b51e299  libgcc/config/gthr-vxworks.h
! ca9cf547c3f83e233c88c43c9eaea98d  libgcc/config/h8300/clzhi2.c
! 52a27ee0de843384c7e2e36987034a86  libgcc/config/h8300/crti.S
! 3e2daa57698b8dbd175721b9a88bb85f  libgcc/config/h8300/crtn.S
! 66305937e145bc3ee4f3a1fd5a43da3f  libgcc/config/h8300/ctzhi2.c
! 93924cd4b917228d519bde738bebac90  libgcc/config/h8300/fixunssfsi.c
  378e602ed89f497e602776d99b46d7ad  libgcc/config/h8300/h8300-lib.h
! 2561f09d5e5379001ee7fdb7aee3dd5f  libgcc/config/h8300/lib1funcs.S
! 48bf013e96908d2a4dd66241adc15f62  libgcc/config/h8300/parityhi2.c
! 3961511deec4675d10c5bb114c88ea75  libgcc/config/h8300/popcounthi2.c
! d778d8f26219a6a4b717ed82a1dc5968  libgcc/config/h8300/sfp-machine.h
  e002eff640bc32723d0216927bc99406  libgcc/config/h8300/t-h8300
  5e306047059c21ece876039122734094  libgcc/config/h8300/t-linux
! adb7572fca4e5399e61cd959a1d18356  libgcc/config/hardfp.c
! 6f9badee8050b5680dd64b2589d157b1  libgcc/config/i386/32/sfp-machine.h
  33fdee54eed1c202a39234d129f2a7ae  libgcc/config/i386/32/t-iamcu
  8271562f1de2b3fa5b976454b83bfdc0  libgcc/config/i386/32/t-softfp
! c60603983e146cd13fa7c1e9a02d4468  libgcc/config/i386/32/tf-signs.c
  c823b0cff478388588a9aabedaa93068  libgcc/config/i386/64/_divtc3.c
  8f7ff4449be9588e09da2929b14b1647  libgcc/config/i386/64/_multc3.c
  6268512927fae19eb0e34459520beb28  libgcc/config/i386/64/_powitf2.c
  7d5aec02242115dca9fe0000c4ca32f0  libgcc/config/i386/64/eqtf2.c
  b2bcf8b944f937cb4f3799c02670dcee  libgcc/config/i386/64/getf2.c
  a92aa384cf96b81c0dbb642826200dd7  libgcc/config/i386/64/letf2.c
! f98524cd8d91de95097e75aab52a9f2a  libgcc/config/i386/64/sfp-machine.h
! aca2069799408883c3b5d9e5d52c64ed  libgcc/config/i386/64/t-softfp
  498bbaf506a5bbdaa793f66399ece491  libgcc/config/i386/64/t-softfp-compat
+ 878a76eff85376bb9a57f42484b5eadf  libgcc/config/i386/_divhc3.c
+ 17d5c1fb1d0c8e3f16a48b4d809ea213  libgcc/config/i386/_mulhc3.c
  81f82acfc38a3bfdce249066001d9818  libgcc/config/i386/avx_resms64.S
  d4cd30e890b5d772946c79359704fc0b  libgcc/config/i386/avx_resms64f.S
  793f1f3f3c09d77ed96b1a0d7399432c  libgcc/config/i386/avx_resms64fx.S
  0987e17186e8a33dbf7c39d7934d4861  libgcc/config/i386/avx_resms64x.S
  ef88ad808d3f1101d7e96fae5706660f  libgcc/config/i386/avx_savms64.S
  12b992c114b195cf886a7a218b0d1e54  libgcc/config/i386/avx_savms64f.S
! 7f089ca799619d5ba4738ce55cf7e0bf  libgcc/config/i386/cpuinfo.c
! 00ecea6fee1d3831c4c6f617bc29199a  libgcc/config/i386/crtfastmath.c
! 1739d1fdc0d771c0dba649d180c0b8b2  libgcc/config/i386/crti.S
! b28948d605803109f47f04dc3d45f615  libgcc/config/i386/crtn.S
! 3151dc2c7a53326f12cd4b556c0f561e  libgcc/config/i386/crtprec.c
! 99a17080e7fcaf954d05b8cf86f9b0de  libgcc/config/i386/cygming-crtbegin.c
! 983bbbff4f3334ee565140816ea39877  libgcc/config/i386/cygming-crtend.c
! e5cb53e50a42e400f384a3060d88c0e9  libgcc/config/i386/cygwin.S
! b33885d2cac10c5949c9e3df63a23c35  libgcc/config/i386/darwin-lib.h
! 17d913c65f1977716df0f0615a77ae68  libgcc/config/i386/dragonfly-unwind.h
! 37489451723bffaf04274fce81a6888c  libgcc/config/i386/elf-lib.h
! 3a372536ae5810e22d14b75b7f9454f2  libgcc/config/i386/enable-execute-stack-mingw32.c
! e29bbe443954432956056c4aae10b23d  libgcc/config/i386/freebsd-unwind.h
! 00e3544cfa3801707b50892a8b5fbd8d  libgcc/config/i386/gnu-unwind.h
! 3f4f1f071b12506eb1a04c573fa712e3  libgcc/config/i386/gthr-win32.c
! 7103af8c4e6dd376446ce2a08786f7b4  libgcc/config/i386/gthr-win32.h
! 7b351b269560a7638871b53799eaa3a9  libgcc/config/i386/i386-asm.h
! 13de1b79eb101102b36099ec6d254c8e  libgcc/config/i386/libgcc-bsd.ver
! 4b2513a93e65399118b742e3bbde1d6d  libgcc/config/i386/libgcc-cygming.ver
! 4c417359a9e666cd606e8382b37ea72a  libgcc/config/i386/libgcc-darwin.ver
! 0584f2c0bd394c7803d4b8b2f12a64cd  libgcc/config/i386/libgcc-glibc.ver
! d28be35107df27f44c6673e211d514ae  libgcc/config/i386/libgcc-sol2.ver
! c14da64e04aa53e35b23648ff740e0e1  libgcc/config/i386/linux-unwind.h
! 18d4d0825e1b029adcef4c2483da823d  libgcc/config/i386/morestack.S
! 8324a4938b9ace155729f49a4bac3875  libgcc/config/i386/resms64.h
! ea5b77aff0d14343a93fa840c05d95eb  libgcc/config/i386/resms64f.h
! 49380de826c5c87334f57d22abeb05e5  libgcc/config/i386/resms64fx.h
! bb57929d23101015ce7844af8fc08500  libgcc/config/i386/resms64x.h
! e63b86bc914b5eead7dc28161c51a663  libgcc/config/i386/savms64.h
! ce11f30ac352c6f9955f245bf73abf89  libgcc/config/i386/savms64f.h
! 6b81839910d1f9eeedec3853422cd82e  libgcc/config/i386/sfp-exceptions.c
! b72304f8140103cb7ef03b12699bf31c  libgcc/config/i386/sfp-machine.h
! 21033df15d9e692ae5fddb58b62a5dee  libgcc/config/i386/shadow-stack-unwind.h
! 2d8d28e6f2f5b3374fb194f61469cdfd  libgcc/config/i386/sol2-c1.S
! 4cfc2c83faaaa3cac88a89c691b81d2b  libgcc/config/i386/sol2-unwind.h
  597d8ce804b1c2e917fdb1870e7ea0ac  libgcc/config/i386/sse_resms64.S
  bedbda9d38d546838a72b745204a631f  libgcc/config/i386/sse_resms64f.S
  34b800926e66c174903d05295a562acd  libgcc/config/i386/sse_resms64fx.S
*************** e80484726d0a295b22e75d2a9f801304  libgcc
*** 87283,87311 ****
  12cdd13a4838418e9805277c7b2fcd92  libgcc/config/i386/t-seh-eh
  aae3ba90f7a9172b2dff6b8d61c25735  libgcc/config/i386/t-sjlj-eh
  e5387e909a3b29458cfdda0150e1f8f6  libgcc/config/i386/t-slibgcc-cygming
! 7f83cb5269303d6f2bc8693886cfecc2  libgcc/config/i386/t-softfp
  e3f37cf5fbd829324e763c71726907a2  libgcc/config/i386/t-sol2
  89444a8a78bd3aa7426e9525cdd7ce25  libgcc/config/i386/t-stack-i386
! c824cf913436d953856ef7ac55a84d81  libgcc/config/i386/value-unwind.h
! fd6ba0c47fa4da68fe8431f945ad2189  libgcc/config/i386/w32-unwind.h
  ffc8a68dc02aca1cf8703f6ff29109d3  libgcc/config/ia64/__divxf3.S
  c3b9941b44cdc74dfc42996f7d2d765b  libgcc/config/ia64/_fixtfdi.S
  e5d2feda0a6505570c0a64e52fcae703  libgcc/config/ia64/_fixunstfdi.S
  4a628b33bbcfbe6ace2c47d3e486ec14  libgcc/config/ia64/_floatditf.S
! 0a8afbf9e82bf19d19761467af269d78  libgcc/config/ia64/crtbegin.S
! df4f485b5a199b0cee1a104ec0c5aa4c  libgcc/config/ia64/crtend.S
! 146c0d64718477ceb5970dabda568964  libgcc/config/ia64/crtfastmath.c
! 0a521777b6e1bce1bac6de9c214f7e0c  libgcc/config/ia64/crti.S
! d8e7ed2feee78203c2a50230c6b3f1a5  libgcc/config/ia64/crtn.S
  09ae9898a8a15266c60b15a27f0b1ba4  libgcc/config/ia64/divtf3.c
! ae70dc80b284528c855e4df5d905e429  libgcc/config/ia64/fde-glibc.c
! a718c2a3de4ca2f3a58d4eeb874fb9f2  libgcc/config/ia64/fde-vms.c
! 722d38319f9bc75b956e67283accb618  libgcc/config/ia64/lib1funcs.S
! 6c98b50359afcab8ee396151b7518a5b  libgcc/config/ia64/libgcc-glibc.ver
! 337da55239e931e7c0b3e13eeb4c7f86  libgcc/config/ia64/libgcc-ia64.ver
! 774ec67fdaec811de84651ff49e71e15  libgcc/config/ia64/linux-unwind.h
! a0bec9d0e34f0677701580e7a7c60963  libgcc/config/ia64/quadlib.c
! 761c1e8dc86c810b5deb66bf65d1b7ad  libgcc/config/ia64/sfp-exceptions.c
  96123e16288e91bc9fcaeb243516c740  libgcc/config/ia64/sfp-machine.h
  0bb88f6d16035394a23c622ba320a824  libgcc/config/ia64/t-eh-ia64
  33399ed8e4f636769acf666b91d227c6  libgcc/config/ia64/t-hpux
--- 92818,92846 ----
  12cdd13a4838418e9805277c7b2fcd92  libgcc/config/i386/t-seh-eh
  aae3ba90f7a9172b2dff6b8d61c25735  libgcc/config/i386/t-sjlj-eh
  e5387e909a3b29458cfdda0150e1f8f6  libgcc/config/i386/t-slibgcc-cygming
! cf370725d0044354d6a71c93776f0618  libgcc/config/i386/t-softfp
  e3f37cf5fbd829324e763c71726907a2  libgcc/config/i386/t-sol2
  89444a8a78bd3aa7426e9525cdd7ce25  libgcc/config/i386/t-stack-i386
! b9ed1b1c616624e7418c3072a296f713  libgcc/config/i386/value-unwind.h
! 8aa0d450ae904b5dd179b2b1706d0516  libgcc/config/i386/w32-unwind.h
  ffc8a68dc02aca1cf8703f6ff29109d3  libgcc/config/ia64/__divxf3.S
  c3b9941b44cdc74dfc42996f7d2d765b  libgcc/config/ia64/_fixtfdi.S
  e5d2feda0a6505570c0a64e52fcae703  libgcc/config/ia64/_fixunstfdi.S
  4a628b33bbcfbe6ace2c47d3e486ec14  libgcc/config/ia64/_floatditf.S
! ee293f374c0f496cd6875a1ff1e8a547  libgcc/config/ia64/crtbegin.S
! 9a07f92e31998215c82958e1b92b5af2  libgcc/config/ia64/crtend.S
! 0db7c65611bc9c3f105d6deedbaf3a9a  libgcc/config/ia64/crtfastmath.c
! bf419847220e476a88e7114bb1d09de4  libgcc/config/ia64/crti.S
! 1a9477c4aba95423fa68632f600b2472  libgcc/config/ia64/crtn.S
  09ae9898a8a15266c60b15a27f0b1ba4  libgcc/config/ia64/divtf3.c
! cd88650db6dae6d4048c9b2c4142e4c9  libgcc/config/ia64/fde-glibc.c
! 7a0e3b9dad015a3e8e69ed4df4d5da5f  libgcc/config/ia64/fde-vms.c
! 21eabf4a9556e34962f4f57368ea98d3  libgcc/config/ia64/lib1funcs.S
! f2bbf8a9ed4657c2867a898c945715a8  libgcc/config/ia64/libgcc-glibc.ver
! 8cd1064615b5cad26e2529b7a49f7b32  libgcc/config/ia64/libgcc-ia64.ver
! 16f5679e836a7f1264573cda505ae3d6  libgcc/config/ia64/linux-unwind.h
! 06937c650c627a0dd306eb744a740b8a  libgcc/config/ia64/quadlib.c
! ece87b4b52a6aefb1d75653282193395  libgcc/config/ia64/sfp-exceptions.c
  96123e16288e91bc9fcaeb243516c740  libgcc/config/ia64/sfp-machine.h
  0bb88f6d16035394a23c622ba320a824  libgcc/config/ia64/t-eh-ia64
  33399ed8e4f636769acf666b91d227c6  libgcc/config/ia64/t-hpux
*************** bbd02bc575b39b813abb3651cde980d7  libgcc
*** 87317,87881 ****
  3cc3f3d4611f64c4d5fc225a72d8ccc4  libgcc/config/ia64/t-softfp
  7508d41329db54ddeccc7e86a6cafae5  libgcc/config/ia64/t-softfp-compat
  552ede49162d3a4fb9e1e113de11e8b5  libgcc/config/ia64/t-vms
! 6ff2b346f1e1eae0b560b55b54311b7d  libgcc/config/ia64/tf-signs.c
! 11bcb0d6ca51cad3bb0d3c1feb1f135f  libgcc/config/ia64/unwind-ia64.c
! a5336bdb818cef70b030985f1ecd71d2  libgcc/config/ia64/unwind-ia64.h
! 65ff942ef70afc61f48e02a6e4a21f24  libgcc/config/ia64/vms-crtinit.S
! 106eb3ec1043b9c1da426cc9d86d298d  libgcc/config/ia64/vms-unwind.h
! 3111db86980b8c9207be8642a36d5dd2  libgcc/config/iq2000/lib2funcs.c
  102f7dad8ad6b54434a1b8313d1e42c4  libgcc/config/iq2000/t-iq2000
! d45ed72194da04b134152c4f522c63ed  libgcc/config/libbid/ChangeLog
! 877df4b05d912fc2033823fa0eece3af  libgcc/config/libbid/_addsub_dd.c
! a3d813dc882ec4c07e412c32c9b380e1  libgcc/config/libbid/_addsub_sd.c
! 3cd22bfaff5638bc2cb990fbc4e906cd  libgcc/config/libbid/_addsub_td.c
! 976af532157fe08e5aecbf0df140695c  libgcc/config/libbid/_dd_to_df.c
! 4626e213d64df470b187c94004ba1f32  libgcc/config/libbid/_dd_to_di.c
! e6cfcbee400ebcf733d5a8e277610c4d  libgcc/config/libbid/_dd_to_sd.c
! ded818019d74cc19e86c2b5fefb170c9  libgcc/config/libbid/_dd_to_sf.c
! 8d5d1a71bd35a3f59dfa0679981967b2  libgcc/config/libbid/_dd_to_si.c
! f2792fe22f49f5bb9879b40ce89666d4  libgcc/config/libbid/_dd_to_td.c
! 5372dc835d83ed65e21a2d2416862002  libgcc/config/libbid/_dd_to_tf.c
! 4ac6366be8d4b360dd6946d7dc50d0dd  libgcc/config/libbid/_dd_to_udi.c
! d2dbe21f07beebb80af450eaeb9fe72f  libgcc/config/libbid/_dd_to_usi.c
! e07981cfb401b6166669ab88cba1854d  libgcc/config/libbid/_dd_to_xf.c
! a04bc596ee80aca864fa5c5fbb310b86  libgcc/config/libbid/_df_to_dd.c
! 2eef5c20da1c383da340906bf79975d9  libgcc/config/libbid/_df_to_sd.c
! 487667a0e1b5800229a4daba59e8f50f  libgcc/config/libbid/_df_to_td.c
! bc36f0a6249bf1bb0ba3e4790af5e0e7  libgcc/config/libbid/_di_to_dd.c
! 55aa9c1c8f36e21a493d86edc8885b12  libgcc/config/libbid/_di_to_sd.c
! 02714799e13dbd9bd768403f3d192a94  libgcc/config/libbid/_di_to_td.c
! 7cdebbf806e5f1431972d85c74f95ace  libgcc/config/libbid/_div_dd.c
! 40b6405fa19c41c9038d04a5d3dba998  libgcc/config/libbid/_div_sd.c
! 16ba10e612c6dfc445e83d94659f1d57  libgcc/config/libbid/_div_td.c
! 2ce2e45baacbfe7b7bc2be2afcf7132f  libgcc/config/libbid/_eq_dd.c
! 133f1d01c2d49fc0f4b8416bc6470c35  libgcc/config/libbid/_eq_sd.c
! 84a5c25d773d9ca18bb3f98d0aa139bd  libgcc/config/libbid/_eq_td.c
! bf85ecce2ec83e61d02837e96a1603ca  libgcc/config/libbid/_ge_dd.c
! 29781fb8e9603b33fc71ab3ef6b7c858  libgcc/config/libbid/_ge_sd.c
! 4bcf47057b427bbf0804be2824409d6a  libgcc/config/libbid/_ge_td.c
! 1683f4347b43b6155f5bd0c62597c8ca  libgcc/config/libbid/_gt_dd.c
! d0dee70c8f461ac05a5b57fd3e874d3b  libgcc/config/libbid/_gt_sd.c
! 864a696a950797c82600036153b00476  libgcc/config/libbid/_gt_td.c
! 253e1826fa693894b3c24536c6853c4b  libgcc/config/libbid/_isinfd128.c
! 1335bd415ea22c181672ce897f2f4fee  libgcc/config/libbid/_isinfd32.c
! 99938a346d3cd801877a07d6634315a8  libgcc/config/libbid/_isinfd64.c
! 25f46f9030311614e06de2d7f32b5e6d  libgcc/config/libbid/_le_dd.c
! 55252c2b7359ede3fa5c08499dbfe81f  libgcc/config/libbid/_le_sd.c
! 84ea1de332123a1931887e6270c1ff3d  libgcc/config/libbid/_le_td.c
! ee76a10addafd6283d34a74009cfe5c0  libgcc/config/libbid/_lt_dd.c
! 327d2672780812edc983d152acc7533c  libgcc/config/libbid/_lt_sd.c
! af476ca3108bb4d29b2781df6fde795b  libgcc/config/libbid/_lt_td.c
! d69a24fb40ef38622d8835fdb33b55f5  libgcc/config/libbid/_mul_dd.c
! 6e9ab809f8a94f909fa5ee5eb4113f18  libgcc/config/libbid/_mul_sd.c
! f1f936703a68daac5c69a661e525229a  libgcc/config/libbid/_mul_td.c
! eb17c505f52135db27c7164c2cc4669c  libgcc/config/libbid/_ne_dd.c
! f261c766e8e96c41c34957e8fccd9574  libgcc/config/libbid/_ne_sd.c
! ce40bda8d94bdb191564db9b62010ee7  libgcc/config/libbid/_ne_td.c
! 02dbc6c29a2fc4e9cbf27c0f2b64b046  libgcc/config/libbid/_sd_to_dd.c
! 6aa2317067e9aab75e7aafca1a75ef1f  libgcc/config/libbid/_sd_to_df.c
! 19cf8a77950c8bb625c95681a7897747  libgcc/config/libbid/_sd_to_di.c
! 199d2de551e946784c581ada83782402  libgcc/config/libbid/_sd_to_sf.c
! daf80d55d03aa109f3505203d071be5b  libgcc/config/libbid/_sd_to_si.c
! ef7a43ece449c01fe2f52262d18cdb49  libgcc/config/libbid/_sd_to_td.c
! aec03235144a7883b2449adf2f396415  libgcc/config/libbid/_sd_to_tf.c
! b95ce5f21bab1594a873d6157090483b  libgcc/config/libbid/_sd_to_udi.c
! 606dfb06289e1d8f37471eaf19157763  libgcc/config/libbid/_sd_to_usi.c
! 9407f9cb79d9bfb71abba1225e2fc7bc  libgcc/config/libbid/_sd_to_xf.c
! f89c6e76b747156a7a99d16ade6c614b  libgcc/config/libbid/_sf_to_dd.c
! c85926b1a479b1b01508c9584d3cec91  libgcc/config/libbid/_sf_to_sd.c
! e8e690af39cc692b19d179bf3d0cf544  libgcc/config/libbid/_sf_to_td.c
! aa6daad0a883cde8d9d6bbfdd3361774  libgcc/config/libbid/_si_to_dd.c
! ab27d16d9ede1ebdbed8fcf4022f95d7  libgcc/config/libbid/_si_to_sd.c
! 4e71730b284856083727851c7d9cf7b4  libgcc/config/libbid/_si_to_td.c
! 7f12e38c375e52783873a8adaf18b6a0  libgcc/config/libbid/_td_to_dd.c
! 30ac8d5bd9923bc0411f440d13d298a2  libgcc/config/libbid/_td_to_df.c
! 81fa8169c0cfa978802c3823d102cffa  libgcc/config/libbid/_td_to_di.c
! d791febefc480375aff6648aba9f3bef  libgcc/config/libbid/_td_to_sd.c
! 04e926893f46f56d90314e85581cc7d0  libgcc/config/libbid/_td_to_sf.c
! 55efd7e97b9e5cafe1395bf11e1234ee  libgcc/config/libbid/_td_to_si.c
! 54c3e9c24de83590efe8977fe2c0f635  libgcc/config/libbid/_td_to_tf.c
! b6c4bcf3e8b45b9413f705d6631354f0  libgcc/config/libbid/_td_to_udi.c
! b658a72730015674e0b0651b2c0f611a  libgcc/config/libbid/_td_to_usi.c
! 082a53bda4da339e0e12cb271f8edd19  libgcc/config/libbid/_td_to_xf.c
! 22336b5963e3e8d35f840a185360e49b  libgcc/config/libbid/_tf_to_dd.c
! 71f821629559b4471e9353b71d91d588  libgcc/config/libbid/_tf_to_sd.c
! e2e1e64177283ca09ce1542343e5a12b  libgcc/config/libbid/_tf_to_td.c
! 5f42254cc98ef07373d18f72a03fe96e  libgcc/config/libbid/_udi_to_dd.c
! 7f77b1f0b024667623347bbb06491534  libgcc/config/libbid/_udi_to_sd.c
! 86fa881686e3fef88b1b24f4a783d54b  libgcc/config/libbid/_udi_to_td.c
! 901b7d2402f781a4b0cef5c52c3dd108  libgcc/config/libbid/_unord_dd.c
! 5b99df6b8e312272fedf338f9d485a78  libgcc/config/libbid/_unord_sd.c
! 3d98fdd2156c061b90ed267ee21172d3  libgcc/config/libbid/_unord_td.c
! da12718af9de2a5a65aada568f64eb9e  libgcc/config/libbid/_usi_to_dd.c
! b87f2e910fd28f0eb69c94434269665c  libgcc/config/libbid/_usi_to_sd.c
! 6965114fe71422c0a8cba362a596a6f1  libgcc/config/libbid/_usi_to_td.c
! 92f20499687c2751219c4b0f741d9934  libgcc/config/libbid/_xf_to_dd.c
! 5fba1ade0821f7dcd0e8d28ad25f0bd5  libgcc/config/libbid/_xf_to_sd.c
! 72fe2d12de741202c53c8db7cd1826be  libgcc/config/libbid/_xf_to_td.c
! 4f4015c9d8854f9ca788b473cc64f252  libgcc/config/libbid/bid128.c
! ac87911d461426b7e169ee1f83724049  libgcc/config/libbid/bid128_2_str.h
! 8f7aa69fecf7f1884431a7ee332dcf24  libgcc/config/libbid/bid128_2_str_macros.h
! 18eac7dd6c1fb9afdabb4d82d1621bf2  libgcc/config/libbid/bid128_2_str_tables.c
! d661063cd395b839b2ebeeaba1961eed  libgcc/config/libbid/bid128_add.c
! e9f40c1b9764f2d136deab408bf16f46  libgcc/config/libbid/bid128_compare.c
! dac7fcaa715cf480b9d709d55c996a1c  libgcc/config/libbid/bid128_div.c
! 62f3939e5ca8144edf4670f7c7653f31  libgcc/config/libbid/bid128_fma.c
! 027812d0c4d748bff5e64e050c7265bd  libgcc/config/libbid/bid128_logb.c
! 3659fdb718bcd78f04723bead4c48d8e  libgcc/config/libbid/bid128_minmax.c
! cd81ce5e6254684b7650e73fc570a11c  libgcc/config/libbid/bid128_mul.c
! e8285e8f144d786867d92e7f4628349c  libgcc/config/libbid/bid128_next.c
! d5b2f8ea8c2995b579fdc59e7a410038  libgcc/config/libbid/bid128_noncomp.c
! 907a7035ef17655b27866589d7b98fd8  libgcc/config/libbid/bid128_quantize.c
! 353852333448d0f8c47264e952162a76  libgcc/config/libbid/bid128_rem.c
! 6041e204a3038825c016f21d279feefa  libgcc/config/libbid/bid128_round_integral.c
! b7637d9da15c6398f28eb95e8c9264fa  libgcc/config/libbid/bid128_scalb.c
! cfeb4b1ce79eb55f8c2d6ccc84fffd8e  libgcc/config/libbid/bid128_sqrt.c
! 8e000b75833761ad5751036e14265849  libgcc/config/libbid/bid128_string.c
! bbc1ae624d3eb959e8373354a314827f  libgcc/config/libbid/bid128_to_int16.c
! 3cb8fb90bda427b02ebeaf5240d1456c  libgcc/config/libbid/bid128_to_int32.c
! 8aa3b293703aa1343a62006b8ac60894  libgcc/config/libbid/bid128_to_int64.c
! 50ce9e4d9698aed7dc1150cfc70331c1  libgcc/config/libbid/bid128_to_int8.c
! f4d0969f1e991697e5bcbf04826dcfd3  libgcc/config/libbid/bid128_to_uint16.c
! 69ad9b4ee13cb05e7944262852622730  libgcc/config/libbid/bid128_to_uint32.c
! 283fc83b99c1151d4e071ab81fb1914c  libgcc/config/libbid/bid128_to_uint64.c
! 1edf310adc10a71af1a292c498d3eac2  libgcc/config/libbid/bid128_to_uint8.c
! 3d9cd670e09c3276b8866d1101514377  libgcc/config/libbid/bid32_to_bid128.c
! b6a31bc92993051ff019e8ef75c99d26  libgcc/config/libbid/bid32_to_bid64.c
! ba622836cd5171debcd125dbb35eb35c  libgcc/config/libbid/bid64_add.c
! 0c28837b38245c156ea3962231f925f7  libgcc/config/libbid/bid64_compare.c
! 5dcd95cf34990ca64f1e1c7542749738  libgcc/config/libbid/bid64_div.c
! 848514d8b68a4d3c7e5110b8a482e44c  libgcc/config/libbid/bid64_fma.c
! d2153e1dea480a6d33a50ac500e76235  libgcc/config/libbid/bid64_logb.c
! f3f89891dc1309062165186b1433cce6  libgcc/config/libbid/bid64_minmax.c
! 3317d5cdfaa5268c494a64cc68cd8a27  libgcc/config/libbid/bid64_mul.c
! 40ae22d781d63373fdf1309c6c99f6f7  libgcc/config/libbid/bid64_next.c
! 0d3656b17f3f3ebaf681053cd0959876  libgcc/config/libbid/bid64_noncomp.c
! 0ef0b0874484bf4f0832df08b6eca67a  libgcc/config/libbid/bid64_quantize.c
! 05cc7824eda13ab3466a4b0d38d7c6af  libgcc/config/libbid/bid64_rem.c
! 7651ef19d7ad418010b135eea81c510e  libgcc/config/libbid/bid64_round_integral.c
! 42bdb5aa9684aeac29d57e89aa63facb  libgcc/config/libbid/bid64_scalb.c
! f34e4712ddceeb39f8d00a5e68d78436  libgcc/config/libbid/bid64_sqrt.c
! 9ad8a953c5be04ecfeac4437dc07de85  libgcc/config/libbid/bid64_string.c
! 19d75cd365b40b289de3175898e03126  libgcc/config/libbid/bid64_to_bid128.c
! cf83b93a55d7be7300ec6ea52039dff4  libgcc/config/libbid/bid64_to_int16.c
! f74c55c8951035f1e5375d26897f916d  libgcc/config/libbid/bid64_to_int32.c
! 1f1ef9a55e3b33b803c76f4d3d5f6d75  libgcc/config/libbid/bid64_to_int64.c
! dd932e5ca204daa2f880ccf3e8550f04  libgcc/config/libbid/bid64_to_int8.c
! ca4be95609ceb6cb8b23e98cd8c55b01  libgcc/config/libbid/bid64_to_uint16.c
! c5de013cdef6b46391017e58f409a2f3  libgcc/config/libbid/bid64_to_uint32.c
! c38c20fb019d98ca5671d23e3ee9e2a1  libgcc/config/libbid/bid64_to_uint64.c
! 2ee5f1427b8de5cab8010d0f6f3baa5b  libgcc/config/libbid/bid64_to_uint8.c
! 10159cd06aca1dbfe84635e88a1fc0e4  libgcc/config/libbid/bid_b2d.h
! 084c29947e020efb1bc4756d9ca3d14f  libgcc/config/libbid/bid_binarydecimal.c
! 9bc19a3bc22c926e27cf0646fff10e69  libgcc/config/libbid/bid_conf.h
! 5d37acfc96af2930757af801a17c5df6  libgcc/config/libbid/bid_convert_data.c
! eb4098998d072b48930abfbf701df775  libgcc/config/libbid/bid_decimal_data.c
! e6ea60b6d50624f3358b8ebfb94eae4d  libgcc/config/libbid/bid_decimal_globals.c
! 82ea31376c6c89d17741297282bbe366  libgcc/config/libbid/bid_div_macros.h
! 83cdb699d4a4d930803d2bb6297dfa3c  libgcc/config/libbid/bid_dpd.c
! 81f7829794d000488cc46038682a3243  libgcc/config/libbid/bid_flag_operations.c
! 86e0be29d24a079316021d64e78b37a5  libgcc/config/libbid/bid_from_int.c
! b35b511f7343d9cdcf5d4a444c99b67d  libgcc/config/libbid/bid_functions.h
! b4742ad4fc3dac5008c9aaaeba747325  libgcc/config/libbid/bid_gcc_intrinsics.h
! 8acafcf5089bfaf753626a2b1508ce06  libgcc/config/libbid/bid_inline_add.h
! a321cafc57c9cadd53c9dfd802e8df86  libgcc/config/libbid/bid_internal.h
! bfb1b8d16adfa283f1f4cf15779599f4  libgcc/config/libbid/bid_round.c
! b416128a306bd065bd7c98f4ba77dea7  libgcc/config/libbid/bid_sqrt_macros.h
! 7e8cc23cc881607a78a248e3d9cb0d8b  libgcc/config/libgcc-glibc.ver
  a5b43383f528298ff2dc85061452e1e6  libgcc/config/libgcc-libsystem.ver
! dec7941c6b768594f9c6f7b5576c13bb  libgcc/config/lm32/_ashlsi3.S
! cbfdf4811475d0ce11aee7c97c934146  libgcc/config/lm32/_ashrsi3.S
! 1439b71efdb14c985a01b4de4f3c5073  libgcc/config/lm32/_divsi3.c
! 07d9980d3e30c112e1bf434e9ff8adb7  libgcc/config/lm32/_lshrsi3.S
! 8ed2a5f44d179c5b9b37fbc8332446fe  libgcc/config/lm32/_modsi3.c
! 38df3fd3f43f40c4097ad7586b046e2c  libgcc/config/lm32/_mulsi3.c
! 23a88bbaa7b8485f783cd765881185e6  libgcc/config/lm32/_udivmodsi4.c
! 87268a67ff42bbffff7897c6df0807fc  libgcc/config/lm32/_udivsi3.c
! f4bff22fd2ee4e970e52ba5c03b1404d  libgcc/config/lm32/_umodsi3.c
! f46980ecd0eb65d144905952dc9a2595  libgcc/config/lm32/crti.S
! 8e057969b0a4ed7b4d9523439eb4b72c  libgcc/config/lm32/crtn.S
! 74cd86249781016a488ed224f19f23b1  libgcc/config/lm32/libgcc_lm32.h
  813910d184e034c80a518f2ba3c4e1a5  libgcc/config/lm32/sfp-machine.h
  331dd855f33aa7a09d25fc757cedf2cf  libgcc/config/lm32/t-elf
  d6d4b530a7539331e6e553f26928de4e  libgcc/config/lm32/t-lm32
  df59d7c87fc0d2f761461ac4ba7ec440  libgcc/config/lm32/t-uclinux
! fba6cfcf3161a950dc8ae42a420c0da8  libgcc/config/m32c/lib1funcs.S
! 48cfeeff50a21ad693d8c64acd047cb6  libgcc/config/m32c/lib2funcs.c
  9f1fc3a0f039273ded002a6713908bd3  libgcc/config/m32c/t-m32c
! 9fee2557a5bdcc1c8b15aa9dd1c0e7e4  libgcc/config/m32c/trapv.c
! 0d2426e32146016afd31a776c5847fc3  libgcc/config/m32r/initfini.c
! 73450e7a6527df1afd33ef65b2a85287  libgcc/config/m32r/libgcc-glibc.ver
! a5b8b5a1404938f1f4b598db7eb1669e  libgcc/config/m32r/t-linux
  e252c161ec4eb09d3b5a62d902b3d00f  libgcc/config/m32r/t-m32r
! fed9e46b1d8f2c839b369dcccd0aeb6a  libgcc/config/m68k/crti.S
! 61406ccf2ba125746c2ed3969584ac91  libgcc/config/m68k/crtn.S
  c88d87907a20077db176016165428d4b  libgcc/config/m68k/fpgnulib.c
! c134c890c5f8c773c9986d833df37f89  libgcc/config/m68k/lb1sf68.S
! e321275fcc95e7f7774fbdfb7d3b9091  libgcc/config/m68k/linux-atomic.c
! ac5879cde201741f89007c6882276656  libgcc/config/m68k/linux-unwind.h
  2e4fd3e401c9159da9f32d5965b5afa1  libgcc/config/m68k/t-floatlib
  de217c41c217f4341d6d546afa9a79f2  libgcc/config/m68k/t-linux
  4e281c631e54b8912258f84196fec9e6  libgcc/config/m68k/t-slibgcc-elf-ver
! 7ae43ee41cc1f31bf23dea23697bac26  libgcc/config/mcore/crti.S
! 9265bfc247f7e3edfb912b713ce4100c  libgcc/config/mcore/crtn.S
! c44b7beab1d1e88edf920b3bed4ada63  libgcc/config/mcore/lib1funcs.S
  ef74fd63202d842bfe7120864186128c  libgcc/config/mcore/t-mcore
! 73915f9c53d8719920f92ba9f9cdfe1f  libgcc/config/microblaze/crti.S
! 200d4381200d414eb2e379c693a2f193  libgcc/config/microblaze/crtn.S
! c01539e6eb183eb788e29005bc961eb0  libgcc/config/microblaze/divsi3.S
! b66431db64b71b0ad9519b69a20f931c  libgcc/config/microblaze/divsi3_table.c
! b5be76d1e3aa5f6471a60278c9288d20  libgcc/config/microblaze/moddi3.S
! e911ac07e5a1d1f8c311ef2f5d5b2985  libgcc/config/microblaze/modsi3.S
! 566ec43d9449f7e89e4f333f767878fc  libgcc/config/microblaze/muldi3_hard.S
! 0c1e90375c3fa734d7c4d287c9c01ac6  libgcc/config/microblaze/mulsi3.S
! 0fa443df088c031b25b3f838f5e07de8  libgcc/config/microblaze/stack_overflow_exit.S
  702cd2045c2c31581ecd56232d96d5f5  libgcc/config/microblaze/t-microblaze
! 8789623658840010b63e4964fa76b9f1  libgcc/config/microblaze/udivsi3.S
! 4784e0bcdf31f4af1817becd1086fc4c  libgcc/config/microblaze/umodsi3.S
! 37453f5656511a8cdf4a66fa5f311c1f  libgcc/config/mips/crtfastmath.c
! 872fe057feac6bfad81116712cb7df17  libgcc/config/mips/crti.S
! c6a2353c00d43d63a1dee7134a222427  libgcc/config/mips/crtn.S
  f69b446f168701e4fad37a3fa7bf7a2a  libgcc/config/mips/gnustack.h
! ff476dc3a59c86b8a0fda7d99fae7837  libgcc/config/mips/gthr-mipssde.h
! 0aa482189714978221fa38ea69e544ce  libgcc/config/mips/lib2funcs.c
! 12165369362b8a3f6932f4becba6448f  libgcc/config/mips/libgcc-mips16.ver
! 407b889d8b8ecebf95f17abbed9de905  libgcc/config/mips/linux-unwind.h
! 4cc1a574059da9a1fddec0715666c471  libgcc/config/mips/mips16.S
! e5dad88375e70aa17a3c48b0294b6ce7  libgcc/config/mips/sfp-machine.h
  5b43c15f4e003338742d215bcfdf5029  libgcc/config/mips/t-crtstuff
  33f2c96b7ccbbb062839ec1e7329e6bb  libgcc/config/mips/t-elf
  501be8fccb18eca4dbd8b404d7b4c9fa  libgcc/config/mips/t-mips
! 48b418400b98e82ce22b338150d2a06f  libgcc/config/mips/t-mips16
  5e2260f13769a960c8e1f24b0c9847e4  libgcc/config/mips/t-mips64
  6403b3d85f0ed6751174f1088d074f62  libgcc/config/mips/t-sdemtk
  011afb1a0cc0aae0a4c465e6aefcafda  libgcc/config/mips/t-softfp-tf
  532a76f856d3755b780a19a91bdd1654  libgcc/config/mips/t-vr
! 902cbba87143ecf708264acf4d45993a  libgcc/config/mips/vr4120-div.S
! 3d6533dd2fb4767e268e71f3ca991f9f  libgcc/config/mmix/crti.S
! 7096ad0e75a242c14a4b70d020f2c8bc  libgcc/config/mmix/crtn.S
  41478efd1b19b3c7c9426d8e843f3b39  libgcc/config/mmix/t-mmix
! c8bf7ac971244c87f88de56e8453c475  libgcc/config/moxie/crti.S
! 77102a735c2de3cde69b9979167a4202  libgcc/config/moxie/crtn.S
  5d570ff5cd40fc6fba8876bdebd59a6b  libgcc/config/moxie/sfp-machine.h
  9b7000ea173c226d39e6a6dc116fdaf1  libgcc/config/msp430/cmpd.c
! 98946f470f0ebcab0bf9006f388f308a  libgcc/config/msp430/cmpsi2.S
! 449a53c3452fb851477f99c956e7b183  libgcc/config/msp430/epilogue.S
  072a56de362c5e857510ca8401f30aa8  libgcc/config/msp430/floathidf.c
  07461b1abb61437fbc73d74801f6300b  libgcc/config/msp430/floathisf.c
  88792e557553f37a296bd8127a0dfc88  libgcc/config/msp430/floatunhidf.c
  754bbc793bc0e81b0a2168df9f47e1f3  libgcc/config/msp430/floatunhisf.c
! ec217b96fa68ff1c03f6ea4b08c664e8  libgcc/config/msp430/lib2bitcountHI.c
! 42f69743697e96e870fa6e5ef791123a  libgcc/config/msp430/lib2divHI.c
! 37e9c23b65aa30096411aec64309eff9  libgcc/config/msp430/lib2divQI.c
! f32a9c2c01e37308ac0c2c23426b567a  libgcc/config/msp430/lib2divSI.c
! bb8816541221de2fea00ccbc9359a50b  libgcc/config/msp430/lib2hw_mul.S
! 9684cccb84ca9163426823f755a11605  libgcc/config/msp430/lib2mul.c
! 02e6dda2ec825c2b73d02d8b167baa13  libgcc/config/msp430/lib2shift.c
  585dda5cb05623da62e4f4aad3bdbbb6  libgcc/config/msp430/mpy.c
! 533351f32a7d77c7a1b574e1bb53be60  libgcc/config/msp430/msp430-divmod.h
! 0c6aad26da1bbc2e81aa3a90af67b440  libgcc/config/msp430/msp430-mul.h
! 43660cd57a30b05651d3b22b2a1614e5  libgcc/config/msp430/slli.S
! 7ae1f2e3a5ed42b0914412a0fb1232b1  libgcc/config/msp430/srai.S
! e090aff07df0ddba181663212994accc  libgcc/config/msp430/srli.S
! ac67477cd383e044b7d7b2e535605cd0  libgcc/config/msp430/t-msp430
! 2a67cae5c595d84ea4bfb744c27a9526  libgcc/config/nds32/crtzero.S
! fbcb85e184a8e123f7d0a7384b09114d  libgcc/config/nds32/initfini.c
! b37515212c12b97fd93bbdb4891bd689  libgcc/config/nds32/isr-library/adj_intr_lvl.inc
! ce87f2695d1790dce32f1bd9923235d4  libgcc/config/nds32/isr-library/excp_isr.S
! dad0061ab41f09604c83637896efabd8  libgcc/config/nds32/isr-library/excp_isr_4b.S
! d749ab6f85867f07cd8586b0c5260a72  libgcc/config/nds32/isr-library/intr_isr.S
! e859dc0e4baf65f1e46571636f66cbfa  libgcc/config/nds32/isr-library/intr_isr_4b.S
! e7dedc8dee56854f1f623df4553deed3  libgcc/config/nds32/isr-library/jmptbl_vid00.S
! 686f252564206953be755fb92e924547  libgcc/config/nds32/isr-library/jmptbl_vid01.S
! f9dc23f515d9882b10999c375f45b6f4  libgcc/config/nds32/isr-library/jmptbl_vid02.S
! a743e54f76d1fce376a2575ddc79285c  libgcc/config/nds32/isr-library/jmptbl_vid03.S
! 7b62b27135b4f7af18bfb57866fb92f5  libgcc/config/nds32/isr-library/jmptbl_vid04.S
! 5df7bf6cb1c6e86b420fb745dc5e5160  libgcc/config/nds32/isr-library/jmptbl_vid05.S
! b202e6e62b659100b93ffb8950838031  libgcc/config/nds32/isr-library/jmptbl_vid06.S
! a425ebcd94af7f9906818d8e9d9b17eb  libgcc/config/nds32/isr-library/jmptbl_vid07.S
! 1f14cdc4b35eb7907994ffe452bb6830  libgcc/config/nds32/isr-library/jmptbl_vid08.S
! 8167d4f651248a259c6136a65f43f45e  libgcc/config/nds32/isr-library/jmptbl_vid09.S
! ae773ba9bea427fe08b2cdcc1a4e06b2  libgcc/config/nds32/isr-library/jmptbl_vid10.S
! 3d12a14c695738fed1166ea4309186e5  libgcc/config/nds32/isr-library/jmptbl_vid11.S
! e64b37ca25bafcc3c7dbc8a2fb41c5fa  libgcc/config/nds32/isr-library/jmptbl_vid12.S
! bd56a48188f62e8c00a9dcc6dcd4ea6d  libgcc/config/nds32/isr-library/jmptbl_vid13.S
! 14d75203de1053b2f45e820cff328ef3  libgcc/config/nds32/isr-library/jmptbl_vid14.S
! f827fcdcf5c0dda3e28fae1234066d3f  libgcc/config/nds32/isr-library/jmptbl_vid15.S
! 86248637c479b3312c2e9ab02b7194e6  libgcc/config/nds32/isr-library/jmptbl_vid16.S
! bc5b4ed1ce9cb39e2d64d8ac0b43b5a6  libgcc/config/nds32/isr-library/jmptbl_vid17.S
! b5bc84f1883cc55e2946ab378670e5b6  libgcc/config/nds32/isr-library/jmptbl_vid18.S
! 41928ea7e589130ac7ecd000a018fe31  libgcc/config/nds32/isr-library/jmptbl_vid19.S
! 3d72ea4d7466b5120b68b2f716e8cc0b  libgcc/config/nds32/isr-library/jmptbl_vid20.S
! afe4cad20df13a9d5ed074c869727389  libgcc/config/nds32/isr-library/jmptbl_vid21.S
! 3dac7543d4dae0513097a89b2b7ec7fc  libgcc/config/nds32/isr-library/jmptbl_vid22.S
! 9e3a6fba0a6c3fa8971087ae38715366  libgcc/config/nds32/isr-library/jmptbl_vid23.S
! 6edb8aa8b7ceb7b92980c557992c63cb  libgcc/config/nds32/isr-library/jmptbl_vid24.S
! 458361c082eab1477b764ebfd948ba7f  libgcc/config/nds32/isr-library/jmptbl_vid25.S
! d30893509eb3a7a9b674c4b8a23348c0  libgcc/config/nds32/isr-library/jmptbl_vid26.S
! 8eaa200fc701e64475ec0c0e65625427  libgcc/config/nds32/isr-library/jmptbl_vid27.S
! f5ac567d098060bba8b6bb958ca29c14  libgcc/config/nds32/isr-library/jmptbl_vid28.S
! b5dbedb30c4149593d1785c1ba2867d5  libgcc/config/nds32/isr-library/jmptbl_vid29.S
! c5083f6a9a46e34e1eef82f3f6b9d54c  libgcc/config/nds32/isr-library/jmptbl_vid30.S
! 51baabb67e8d4eafab363c421ba36586  libgcc/config/nds32/isr-library/jmptbl_vid31.S
! 4a7d47aebd93c3c921463eed9866be44  libgcc/config/nds32/isr-library/jmptbl_vid32.S
! 709791ab3e67b04d68eb241c0eda5f9f  libgcc/config/nds32/isr-library/jmptbl_vid33.S
! 86c200c3cfca813995749baadf0408ec  libgcc/config/nds32/isr-library/jmptbl_vid34.S
! cfd08d51f16f2bfa299e0a53d69dd639  libgcc/config/nds32/isr-library/jmptbl_vid35.S
! 12c53d7deddfe109fd1bd772e2446910  libgcc/config/nds32/isr-library/jmptbl_vid36.S
! d938fc0a7b2e8c0e3b1177d0ec7afff9  libgcc/config/nds32/isr-library/jmptbl_vid37.S
! 58e2d12263931194d1cddef869bb7ecc  libgcc/config/nds32/isr-library/jmptbl_vid38.S
! caa2d7bc98f068a263a7da6fa32e7cfa  libgcc/config/nds32/isr-library/jmptbl_vid39.S
! 7383a72ffba4e7f4d7f572b2ba3ca518  libgcc/config/nds32/isr-library/jmptbl_vid40.S
! 7f5fe5995a43cd3602eea9fa4af164bc  libgcc/config/nds32/isr-library/jmptbl_vid41.S
! 301dd89dd54760e87088f235713a1e26  libgcc/config/nds32/isr-library/jmptbl_vid42.S
! 3259524428c37b4831677d9741db61ee  libgcc/config/nds32/isr-library/jmptbl_vid43.S
! 646cc4c61d2e10a78ea4bdcccf6eee75  libgcc/config/nds32/isr-library/jmptbl_vid44.S
! 950ffabcbec8e26184ec995e08f9c6e0  libgcc/config/nds32/isr-library/jmptbl_vid45.S
! 1e3bb99bc3cf0907e542a87ff2a9ef4c  libgcc/config/nds32/isr-library/jmptbl_vid46.S
! c06bd2324c73910ef0371fba0ad391ca  libgcc/config/nds32/isr-library/jmptbl_vid47.S
! d3b9cfd8cd8e39036726f92b0d3c2328  libgcc/config/nds32/isr-library/jmptbl_vid48.S
! 4ccbab095d9904ef188cd6e366ea627c  libgcc/config/nds32/isr-library/jmptbl_vid49.S
! 074c57bba48a634a9a5ff9000537596b  libgcc/config/nds32/isr-library/jmptbl_vid50.S
! 537db370d36c995b71abc9de98931e1f  libgcc/config/nds32/isr-library/jmptbl_vid51.S
! 4fbb16219bc7cc30ff462284fb5d309c  libgcc/config/nds32/isr-library/jmptbl_vid52.S
! 1c2350105f563c340460cb895ab8fcbb  libgcc/config/nds32/isr-library/jmptbl_vid53.S
! 6a0f370c9869c4dd7bfced1228701a27  libgcc/config/nds32/isr-library/jmptbl_vid54.S
! 4e1f6de668c8ab4baf00107c75fb6c9a  libgcc/config/nds32/isr-library/jmptbl_vid55.S
! 9b06b41720c952193c21aa0f8c411a74  libgcc/config/nds32/isr-library/jmptbl_vid56.S
! 7a8b7cff7c7f2e1dc0a57fa61a88f9f6  libgcc/config/nds32/isr-library/jmptbl_vid57.S
! 6d3e28be182f9d2984d40016bec3b6f5  libgcc/config/nds32/isr-library/jmptbl_vid58.S
! 00a692f93635b860ab351d55835c280e  libgcc/config/nds32/isr-library/jmptbl_vid59.S
! 60c9a7bc439f30f34cd018ced9a5e3cb  libgcc/config/nds32/isr-library/jmptbl_vid60.S
! 6c497a8558ec8139bacb10b8284222f0  libgcc/config/nds32/isr-library/jmptbl_vid61.S
! 860e319170c2d81740f81767af2dd58c  libgcc/config/nds32/isr-library/jmptbl_vid62.S
! b1d391e600f1cfe7a54d47897ee06d00  libgcc/config/nds32/isr-library/jmptbl_vid63.S
! ceb72c5ac1d9956e156ad9cd31427adf  libgcc/config/nds32/isr-library/jmptbl_vid64.S
! 5ba35c6621fd19ddfe7ba3a959a34047  libgcc/config/nds32/isr-library/jmptbl_vid65.S
! 412276743c11b29db8e2bc06d6b4ddb7  libgcc/config/nds32/isr-library/jmptbl_vid66.S
! c239bf4e9f4dc363dbb2440ec9759e4d  libgcc/config/nds32/isr-library/jmptbl_vid67.S
! a4bae2a9266b612965c3c58d2dfca066  libgcc/config/nds32/isr-library/jmptbl_vid68.S
! 3b13b38097e43d10a7c4719ebc98f9e1  libgcc/config/nds32/isr-library/jmptbl_vid69.S
! 076c1bc78eb6001742598a12de286e07  libgcc/config/nds32/isr-library/jmptbl_vid70.S
! 05fd12105a9c5edc3762500dff314804  libgcc/config/nds32/isr-library/jmptbl_vid71.S
! 7c7a4eb9afe6a73d9733b3454a133431  libgcc/config/nds32/isr-library/jmptbl_vid72.S
! a4f3147aa41b0a3a6d237444b92c13e6  libgcc/config/nds32/isr-library/nmih.S
! 34d571653c11200617f25f4fb2d3e312  libgcc/config/nds32/isr-library/reset.S
! b5a8cbc35ffdff177eae8a3fb4a26113  libgcc/config/nds32/isr-library/reset_4b.S
! 6f98286f98e6226e1321243e0a7bbd48  libgcc/config/nds32/isr-library/restore_all.inc
! d42fca0091dbc6f034ea2090e910df30  libgcc/config/nds32/isr-library/restore_fpu_regs.inc
! 54fa2e35ac7a0353fea745682d06d672  libgcc/config/nds32/isr-library/restore_fpu_regs_00.inc
! 82814ed759336b9ab8aa806b3b4663f3  libgcc/config/nds32/isr-library/restore_fpu_regs_01.inc
! 53bb54f1b1ccc9b5ddda2779949539a6  libgcc/config/nds32/isr-library/restore_fpu_regs_02.inc
! 8f383b11b870a3c98cc51a45bd7f6ace  libgcc/config/nds32/isr-library/restore_fpu_regs_03.inc
! fe965ecfde1612df5f7c87eb7a11219d  libgcc/config/nds32/isr-library/restore_mac_regs.inc
! d13b8043ede66c268e8f3c0511087e63  libgcc/config/nds32/isr-library/restore_partial.inc
! 5e58b8edb1d146faef622a8bebde3558  libgcc/config/nds32/isr-library/restore_usr_regs.inc
! e12e2a3f5bd10a2971b2fa62444cbc62  libgcc/config/nds32/isr-library/save_all.inc
! 8f7ecf5de7aa048be026dc5e26b541b1  libgcc/config/nds32/isr-library/save_fpu_regs.inc
! f776311acef75f7f7736bc72447457f8  libgcc/config/nds32/isr-library/save_fpu_regs_00.inc
! 03bc5c5bccd82a600147b2da5af4f45a  libgcc/config/nds32/isr-library/save_fpu_regs_01.inc
! 6b09ab4ff5504c0441479f17d5b9494e  libgcc/config/nds32/isr-library/save_fpu_regs_02.inc
! a350b12d9558f5c5fd0aeaa34a2ddfda  libgcc/config/nds32/isr-library/save_fpu_regs_03.inc
! 99f1665da472ae1381b40ab135663b31  libgcc/config/nds32/isr-library/save_mac_regs.inc
! c4d584dd107c565a226990c6f77f4943  libgcc/config/nds32/isr-library/save_partial.inc
! cf37e219f5434f071d8c1781ff010034  libgcc/config/nds32/isr-library/save_usr_regs.inc
! 8675063c0b8bd5abbad583a485d80ca5  libgcc/config/nds32/isr-library/vec_vid00.S
! 01ea3fb6cc58706d60ec4dd5ff6a1ddf  libgcc/config/nds32/isr-library/vec_vid00_4b.S
! eba4d9d5b2ccae89f5348cbf7b81263e  libgcc/config/nds32/isr-library/vec_vid01.S
! 04140748f0f7742e9e87cc05f473ffc6  libgcc/config/nds32/isr-library/vec_vid01_4b.S
! 16584891144efd94da8726ca165868b8  libgcc/config/nds32/isr-library/vec_vid02.S
! c8763d0c4e2d7f7ee65badc506639445  libgcc/config/nds32/isr-library/vec_vid02_4b.S
! 4a404b9ebee872902e95126f42261a87  libgcc/config/nds32/isr-library/vec_vid03.S
! 306ca7d45a76251819b64efbce2b82de  libgcc/config/nds32/isr-library/vec_vid03_4b.S
! ab802e22cb254f0c2fe1f5470228ee97  libgcc/config/nds32/isr-library/vec_vid04.S
! 970e55cd77d159043fe3bf9df671c5e5  libgcc/config/nds32/isr-library/vec_vid04_4b.S
! 4101207bfe3762d402da951a9ada493c  libgcc/config/nds32/isr-library/vec_vid05.S
! 438643164e676aaabbf8120153dae5d8  libgcc/config/nds32/isr-library/vec_vid05_4b.S
! 28682e900fe70e6a0b65a5c9bff4a904  libgcc/config/nds32/isr-library/vec_vid06.S
! 27ae62aaad6be33cd550b1f7678ca23e  libgcc/config/nds32/isr-library/vec_vid06_4b.S
! bfd7aa612fbf809b77b39b417fee5635  libgcc/config/nds32/isr-library/vec_vid07.S
! b59a48302a45f05196e080ac8ce8e9c7  libgcc/config/nds32/isr-library/vec_vid07_4b.S
! 204975acb2938db25b6c235da75a1c86  libgcc/config/nds32/isr-library/vec_vid08.S
! 2daa7ead1616741144ae824c7ee5d9e7  libgcc/config/nds32/isr-library/vec_vid08_4b.S
! 4258659da1014176038517e9599eb1ba  libgcc/config/nds32/isr-library/vec_vid09.S
! 44afb9a1e839c43d3c654829cf335f26  libgcc/config/nds32/isr-library/vec_vid09_4b.S
! e918a60f17b655a51560d708c320fb09  libgcc/config/nds32/isr-library/vec_vid10.S
! d5bb040141055cf5a7bb835f6d535b9c  libgcc/config/nds32/isr-library/vec_vid10_4b.S
! 38a41f161a64708ecd8c402eb9e79604  libgcc/config/nds32/isr-library/vec_vid11.S
! 5ea120294dad97fe1e77543eb4f46ed3  libgcc/config/nds32/isr-library/vec_vid11_4b.S
! 261df57d4938e238c53b5c6ba2251764  libgcc/config/nds32/isr-library/vec_vid12.S
! 4e63c449e26d71fe158179b96dbc4d5f  libgcc/config/nds32/isr-library/vec_vid12_4b.S
! 029e75bf992401b45f6b1ed81a883f4c  libgcc/config/nds32/isr-library/vec_vid13.S
! 77f3636f27ce6db2e49825dade0f6bd2  libgcc/config/nds32/isr-library/vec_vid13_4b.S
! c90072fa9070592e7189250f839d0c45  libgcc/config/nds32/isr-library/vec_vid14.S
! e2f061ea27abb3d5453b13f746bcbe5b  libgcc/config/nds32/isr-library/vec_vid14_4b.S
! 7f59a5bcb3f9ec00eac36429780c8295  libgcc/config/nds32/isr-library/vec_vid15.S
! bc8eea8344324eb9ace7ac269cd4ec62  libgcc/config/nds32/isr-library/vec_vid15_4b.S
! 1cd0203b91f7c1521c4bb1677ff44860  libgcc/config/nds32/isr-library/vec_vid16.S
! 6ad59738534d4f0c9f257bc53cf4dd10  libgcc/config/nds32/isr-library/vec_vid16_4b.S
! 5568cbab77227f380b322286f6b91baa  libgcc/config/nds32/isr-library/vec_vid17.S
! 907701875a7c53e7a4226ef69cf30874  libgcc/config/nds32/isr-library/vec_vid17_4b.S
! 41f8215321d374264699bf98d5cb4502  libgcc/config/nds32/isr-library/vec_vid18.S
! ff0220745f7d2e9f0416c789103828c0  libgcc/config/nds32/isr-library/vec_vid18_4b.S
! b1370ff9602dd2a65cdebffde8cd11dd  libgcc/config/nds32/isr-library/vec_vid19.S
! 37f550f7a9e24a1478648402deb835a8  libgcc/config/nds32/isr-library/vec_vid19_4b.S
! fdc6a2665eb897bf0ee3123a616c2439  libgcc/config/nds32/isr-library/vec_vid20.S
! 1f9f923c0c6da07d9a3db751d15d24b3  libgcc/config/nds32/isr-library/vec_vid20_4b.S
! b10c0e7a34e02447feb877fbdd3203ce  libgcc/config/nds32/isr-library/vec_vid21.S
! c0400eab26f82dbe8601831a858662e2  libgcc/config/nds32/isr-library/vec_vid21_4b.S
! 9819c7acc86df923f218f1988b7ebfa3  libgcc/config/nds32/isr-library/vec_vid22.S
! 7f54992c2c52ee94ea59318eb55b824a  libgcc/config/nds32/isr-library/vec_vid22_4b.S
! 2dd9e9794262379904cb05e61b81bd36  libgcc/config/nds32/isr-library/vec_vid23.S
! dba836dd1301ce92b35d6f6ee5c855cd  libgcc/config/nds32/isr-library/vec_vid23_4b.S
! 5546b36d4d96ae03a876b2bf01cc7047  libgcc/config/nds32/isr-library/vec_vid24.S
! a6f62fd4017e538b01121faf9a188d2d  libgcc/config/nds32/isr-library/vec_vid24_4b.S
! f763d98929261ce5ad0ca486fb0a0513  libgcc/config/nds32/isr-library/vec_vid25.S
! 2d5c105f2809476ecfb51849b476020d  libgcc/config/nds32/isr-library/vec_vid25_4b.S
! 78787e587161335620e44de4d1db4575  libgcc/config/nds32/isr-library/vec_vid26.S
! b63eddef11cea6264295d478f364b1f6  libgcc/config/nds32/isr-library/vec_vid26_4b.S
! 634ac76ba5b8e2ed56d106738c554278  libgcc/config/nds32/isr-library/vec_vid27.S
! e70c47700d7eec308acf24ba54e2fafd  libgcc/config/nds32/isr-library/vec_vid27_4b.S
! 80b20cf74d54deef90897b40c552e165  libgcc/config/nds32/isr-library/vec_vid28.S
! b5bd98bf2ab8825a9a533abf5415f383  libgcc/config/nds32/isr-library/vec_vid28_4b.S
! 3016834c3a34e176979667e6c441240b  libgcc/config/nds32/isr-library/vec_vid29.S
! e7b5514645c427fa806df8c621ef6934  libgcc/config/nds32/isr-library/vec_vid29_4b.S
! a22fa247d2d972fe4cfb117213049cc7  libgcc/config/nds32/isr-library/vec_vid30.S
! 815e4260ed92cd8712d936c32aec0604  libgcc/config/nds32/isr-library/vec_vid30_4b.S
! 91e65e1bb6cbda27a3908664f3793aa5  libgcc/config/nds32/isr-library/vec_vid31.S
! 84905d99390acadf351a6deb4de26d66  libgcc/config/nds32/isr-library/vec_vid31_4b.S
! b42090bd82adf8e3a011c405d933857e  libgcc/config/nds32/isr-library/vec_vid32.S
! f9fadc9f1e9bfcb8208f71ba3555cca3  libgcc/config/nds32/isr-library/vec_vid32_4b.S
! dc1c24a5f298f701207cdb6a47054e91  libgcc/config/nds32/isr-library/vec_vid33.S
! 91e20537ea40a68a8f5c21eb3cd43bf8  libgcc/config/nds32/isr-library/vec_vid33_4b.S
! 6de7f9f4d4c43f9db8f00d68c8a306a2  libgcc/config/nds32/isr-library/vec_vid34.S
! 35b84e2ac2e2ec58b9e991d8c4860ecd  libgcc/config/nds32/isr-library/vec_vid34_4b.S
! 4cbe4711857ab86a1e600254ac98e2e9  libgcc/config/nds32/isr-library/vec_vid35.S
! 79fd42f282250bb55aba9770767340d3  libgcc/config/nds32/isr-library/vec_vid35_4b.S
! 93fd88b11902c9d563cd0708d4dc5052  libgcc/config/nds32/isr-library/vec_vid36.S
! f359a34280f4d647b5478354d0d22283  libgcc/config/nds32/isr-library/vec_vid36_4b.S
! dc55432fad45943dcf834152605aa25a  libgcc/config/nds32/isr-library/vec_vid37.S
! caa42b5b4200432d60d0fb0958e19548  libgcc/config/nds32/isr-library/vec_vid37_4b.S
! 1ea04da13af7dac24a0c1b45e455902c  libgcc/config/nds32/isr-library/vec_vid38.S
! edbe866fa861b70da49d52cd817fb125  libgcc/config/nds32/isr-library/vec_vid38_4b.S
! 3d113d1f9612e9f5e487fde0fbfd2b47  libgcc/config/nds32/isr-library/vec_vid39.S
! ff95d1edebdb166aaada981986207116  libgcc/config/nds32/isr-library/vec_vid39_4b.S
! 94569764ab3a7a23590842491e5196e4  libgcc/config/nds32/isr-library/vec_vid40.S
! b718cd503b1d135c838b7f912779117e  libgcc/config/nds32/isr-library/vec_vid40_4b.S
! 86f7316aed231e9d1cfd4b6850025158  libgcc/config/nds32/isr-library/vec_vid41.S
! b79e1cc8e86e8ec951d872732e04f7af  libgcc/config/nds32/isr-library/vec_vid41_4b.S
! f3b6ce7e11e949d6b0be36466d70879b  libgcc/config/nds32/isr-library/vec_vid42.S
! 627d414483b1b1791399c529f6d8213e  libgcc/config/nds32/isr-library/vec_vid42_4b.S
! 1c03cdfef2ca7926c1d8106d0fc11efc  libgcc/config/nds32/isr-library/vec_vid43.S
! a454afd86a9d211f255fa59358bc12bf  libgcc/config/nds32/isr-library/vec_vid43_4b.S
! a593ed564bd6855f19f573faf4990b5a  libgcc/config/nds32/isr-library/vec_vid44.S
! f5932149281098710069cbdef9d9031a  libgcc/config/nds32/isr-library/vec_vid44_4b.S
! 19d62f8c2a8d6f0bb6e89980dedc4bae  libgcc/config/nds32/isr-library/vec_vid45.S
! 8b02ca806039848167f7f6d7500614a1  libgcc/config/nds32/isr-library/vec_vid45_4b.S
! 80ff14e26356a39ad0e438a78d4bf58e  libgcc/config/nds32/isr-library/vec_vid46.S
! cd450349de64c4c94646673af96b69b5  libgcc/config/nds32/isr-library/vec_vid46_4b.S
! 8501caa4a43fd5cbe9707369e71df8f3  libgcc/config/nds32/isr-library/vec_vid47.S
! f6f208328a8dac1b16cd3d31c9ab9f5f  libgcc/config/nds32/isr-library/vec_vid47_4b.S
! f5426c5eb15df7b73af6aeb39a2efcce  libgcc/config/nds32/isr-library/vec_vid48.S
! 24f01eb79c49319e4d7a8bb8c4ee36fa  libgcc/config/nds32/isr-library/vec_vid48_4b.S
! 9d9228fcf300b18d5344e8d5a4fb2098  libgcc/config/nds32/isr-library/vec_vid49.S
! 94df14d6a9b6c0da959cdde85a5de63b  libgcc/config/nds32/isr-library/vec_vid49_4b.S
! 386b3a4b9802f3d2a66b288c1d12aae0  libgcc/config/nds32/isr-library/vec_vid50.S
! 47e48d15b1b88ef26c7190c99809f2bf  libgcc/config/nds32/isr-library/vec_vid50_4b.S
! faae73ccb10182bdca56abbf6a47b5e9  libgcc/config/nds32/isr-library/vec_vid51.S
! 72eba4b26c268e48d948492abcb6033c  libgcc/config/nds32/isr-library/vec_vid51_4b.S
! 76ca9b41b4099265d494e6c9f15449ed  libgcc/config/nds32/isr-library/vec_vid52.S
! a50b026d18f55d14529d0e1ddef3db2a  libgcc/config/nds32/isr-library/vec_vid52_4b.S
! 2b10f07bdc0ee47f821fdd87cf356110  libgcc/config/nds32/isr-library/vec_vid53.S
! 4c89c7e368c7608597f990ec40a4bccf  libgcc/config/nds32/isr-library/vec_vid53_4b.S
! f1ebda94e75ad420088e16bf0592320b  libgcc/config/nds32/isr-library/vec_vid54.S
! 88057311adf62bcd0ecc42dc974880e1  libgcc/config/nds32/isr-library/vec_vid54_4b.S
! 32789507f191ccea5df164c81e3aeeed  libgcc/config/nds32/isr-library/vec_vid55.S
! 8ae4c12c2c526fc57b1453423cb2f9c6  libgcc/config/nds32/isr-library/vec_vid55_4b.S
! a84b0bd1a81d56aac263eacd09f19985  libgcc/config/nds32/isr-library/vec_vid56.S
! d5ad25fb6c6f00a9531594147a103fc2  libgcc/config/nds32/isr-library/vec_vid56_4b.S
! fa9846273ef0a389de5fcf99a531bd2b  libgcc/config/nds32/isr-library/vec_vid57.S
! d92d1bc9164ee58b77832608db22e929  libgcc/config/nds32/isr-library/vec_vid57_4b.S
! 937a18ce8ab8d1f54c98e12499b2862a  libgcc/config/nds32/isr-library/vec_vid58.S
! aefb23dd72a310ce35e251cdc6075e92  libgcc/config/nds32/isr-library/vec_vid58_4b.S
! 40a0fc7a790ff33b7405f089917067f0  libgcc/config/nds32/isr-library/vec_vid59.S
! 39bb70ade4a356e7baa02f9eaf870f51  libgcc/config/nds32/isr-library/vec_vid59_4b.S
! 5a0c4209bcd0ad5aa0cb00619da700a6  libgcc/config/nds32/isr-library/vec_vid60.S
! 3bbc39c9ce3ab5d0aceeea095f48bc01  libgcc/config/nds32/isr-library/vec_vid60_4b.S
! 636fb30ad18219b733f9a7204e2304ab  libgcc/config/nds32/isr-library/vec_vid61.S
! 647e12926f2d2e99a442189c158f8214  libgcc/config/nds32/isr-library/vec_vid61_4b.S
! 6f350c68882e9d0f291aa142e96d856b  libgcc/config/nds32/isr-library/vec_vid62.S
! 5841cbdc358af3ec337f584c7c7fef27  libgcc/config/nds32/isr-library/vec_vid62_4b.S
! e6f6f00a82b07cad2a31dc16b252a9c2  libgcc/config/nds32/isr-library/vec_vid63.S
! 587aae01b9c7a55219c9f5ef884db4af  libgcc/config/nds32/isr-library/vec_vid63_4b.S
! af46788383c38c5ef800024122fab570  libgcc/config/nds32/isr-library/vec_vid64.S
! c61f7ee824ddbbafd37da98af7a6b876  libgcc/config/nds32/isr-library/vec_vid64_4b.S
! 1750e0d8403668cf09a63ec27250d9f6  libgcc/config/nds32/isr-library/vec_vid65.S
! c5886f2f73030c379bd5b02a6375b734  libgcc/config/nds32/isr-library/vec_vid65_4b.S
! 90598af2ad27bf1ceb16b6f2cdf8f83b  libgcc/config/nds32/isr-library/vec_vid66.S
! 6314c08fc1bbbb1fb0f276d07ea396d1  libgcc/config/nds32/isr-library/vec_vid66_4b.S
! 3e22169326cee3f72bc202119b4746c6  libgcc/config/nds32/isr-library/vec_vid67.S
! 8d728ae816d5e2d6fb0339cbbc3e8013  libgcc/config/nds32/isr-library/vec_vid67_4b.S
! 7332f1aeec56057e8c142004de66d274  libgcc/config/nds32/isr-library/vec_vid68.S
! e6bbeee57eabb338cee28377264bab02  libgcc/config/nds32/isr-library/vec_vid68_4b.S
! e631c5614e75622026004e1a339e9b9f  libgcc/config/nds32/isr-library/vec_vid69.S
! db77a09f1215f420f027e6c8d417ecd9  libgcc/config/nds32/isr-library/vec_vid69_4b.S
! 4b366d9ededef6fe7a90df0f97bf6223  libgcc/config/nds32/isr-library/vec_vid70.S
! 179480ea264c892f59b2ebb0787bb205  libgcc/config/nds32/isr-library/vec_vid70_4b.S
! d2e9699d4019f63f9f7ca380ffffed25  libgcc/config/nds32/isr-library/vec_vid71.S
! 9d2d735474ba3495429127aefebe711d  libgcc/config/nds32/isr-library/vec_vid71_4b.S
! d602ebf2ffe3c7261e210bd39bfce55a  libgcc/config/nds32/isr-library/vec_vid72.S
! 1dfe4d64aa2a23a0c0b6b0a58ed1c49b  libgcc/config/nds32/isr-library/vec_vid72_4b.S
! deb4f4f6a8678ba2d495a2b6da39fe1a  libgcc/config/nds32/isr-library/wrh.S
! 7bdd4e1b5399d37b2c57e850b5462947  libgcc/config/nds32/lib1asmsrc-mculib.S
! 50618ad1adfabfed0ba9b0a7471f5567  libgcc/config/nds32/lib1asmsrc-newlib.S
! 446d7cd3e532f2beca8c643f65b1e693  libgcc/config/nds32/lib2csrc-mculib/_clzdi2.c
! 19fe5f420d90b607a39acd995263c2df  libgcc/config/nds32/lib2csrc-mculib/_clzsi2.c
! 33bb9bdbf55805575b20cb1f2ef7d3aa  libgcc/config/nds32/linux-atomic.c
! c166f906262a80203bc0d0c372d34798  libgcc/config/nds32/linux-unwind.h
! f49363d6b3244446cf2910e6d9cffef7  libgcc/config/nds32/sfp-machine.h
! e370705afd4e8cb4e00fea4aa7573421  libgcc/config/nds32/t-nds32
! 2f064de5e5ae8bcba676dc29ef71a8a3  libgcc/config/nds32/t-nds32-glibc
! 791cdb8e9d7b9d591dfbd733c9c0b12b  libgcc/config/nds32/t-nds32-isr
! a6777c67228f53aa41a13422777e9cd0  libgcc/config/nds32/t-nds32-mculib
! b590f14702debb3856dd90c8ada575ff  libgcc/config/nds32/t-nds32-newlib
! 04d5f87759ebec8ee540eed43becc6f0  libgcc/config/nios2/crti.S
! 98c501a486d43431f68ac82080bc72e8  libgcc/config/nios2/crtn.S
! 0ac4df8e72dd06da2deba23ca4c8991d  libgcc/config/nios2/elf-lib.h
! d85fec8721b3754008bc406a97169471  libgcc/config/nios2/lib2-divmod-hi.c
! 95b0601feaa7f2a85d43f0c91d270153  libgcc/config/nios2/lib2-divmod.c
! 8b5a7621dec351d6e74aab8b20e383e6  libgcc/config/nios2/lib2-divtable.c
! 229f58c93b8c241867ec49368bf99508  libgcc/config/nios2/lib2-mul.c
! 02968eec7855878d7061fb1e94969af3  libgcc/config/nios2/lib2-nios2.h
! e0f4ff84baf2122ee3b0a96d3206c364  libgcc/config/nios2/linux-atomic.c
! 9f29d434f02c81af566b2d41b6e145e9  libgcc/config/nios2/linux-unwind.h
! afe891a570aaed7318c30fe80d1a17a3  libgcc/config/nios2/sfp-machine.h
  598bde069aeebadde9b08f8703ab2c77  libgcc/config/nios2/t-linux
  058cf7bee1e8fb40a62590a2558c7f76  libgcc/config/nios2/t-nios2
! 8956e693a27ecd08ca03aae524747702  libgcc/config/nios2/tramp.c
  d554f3fc7ee3cecc697c448b8c5f61bb  libgcc/config/no-sfp-machine.h
  b70010a8e3a6734ae04ba484992563c5  libgcc/config/no-unwind.h
! 758d0fca031236bbc36683649351b56a  libgcc/config/nvptx/atomic.c
! d78f648f6e6acda8364b080677f50a8a  libgcc/config/nvptx/crt0.c
! d185b4884ac16dcc38f59de378e055ef  libgcc/config/nvptx/mgomp.c
! 834628f65ca04b1a1704420e1de00b57  libgcc/config/nvptx/nvptx-malloc.h
! a731daed6e567c406dcbce8f4004aded  libgcc/config/nvptx/reduction.c
  a2f0aaba262ea7568fe97072e2e4e19f  libgcc/config/nvptx/t-nvptx
! 7f1b12f2a052e2117fa03ce7626b2704  libgcc/config/or1k/lib1funcs.S
! 0588847124d3fe51c76ec4439a7afb14  libgcc/config/or1k/linux-unwind.h
! be0ca098d47ffed69cc52abd5263ba8e  libgcc/config/or1k/sfp-machine.h
! 7ee775207bbe4055b2381af0c6c69109  libgcc/config/or1k/t-or1k
! 550ce2a99b1f4c07fe763c29e6aa0748  libgcc/config/pa/fptr.c
! 04a992db7c0d56856fa5c774fc0f4038  libgcc/config/pa/gthr-dce.h
! d69fcc7917835f56522e34c8ce4392c0  libgcc/config/pa/hpux-unwind.h
! 836c302cadbc0d791e1369e55a27a66e  libgcc/config/pa/lib2funcs.S
! f93d3e65600b59f899eeb75a2ce4fbb0  libgcc/config/pa/linux-atomic.c
! 4b97431cb318dde7ac8de18aaa93b4ae  libgcc/config/pa/linux-unwind.h
! 6aa1c978826ac9573d2a2049f1c8861e  libgcc/config/pa/milli64.S
! c994a1be9265e25766ce6588632f5594  libgcc/config/pa/pa64-hpux-lib.h
! 7414dcde650ea3f4fafa8501ce1b4050  libgcc/config/pa/quadlib.c
! a79b414226404921b618d8e5f26953c8  libgcc/config/pa/sfp-exceptions.c
! 5754710ef584399b3f528f33ec9cbd94  libgcc/config/pa/sfp-machine.h
! 321129560bb803ddf655636bd9274090  libgcc/config/pa/stublib.c
  be1d29d3044d55ee3e60d3e74a9e98fe  libgcc/config/pa/t-dimode
  8a3964d4f1eddb14d9260a0a72a23493  libgcc/config/pa/t-hpux
  73420715a92f162a61d33bbfbe7c4dee  libgcc/config/pa/t-hpux10
--- 92852,93422 ----
  3cc3f3d4611f64c4d5fc225a72d8ccc4  libgcc/config/ia64/t-softfp
  7508d41329db54ddeccc7e86a6cafae5  libgcc/config/ia64/t-softfp-compat
  552ede49162d3a4fb9e1e113de11e8b5  libgcc/config/ia64/t-vms
! 4b07e08555b087072f585d4feea27f6c  libgcc/config/ia64/tf-signs.c
! fca32d4a18d608c9eb7344d9079d5ab7  libgcc/config/ia64/unwind-ia64.c
! f3d6a0816472fb3b2331400550b2fa0a  libgcc/config/ia64/unwind-ia64.h
! 9e16a68ea117652dba1dec3aecefb8a0  libgcc/config/ia64/vms-crtinit.S
! 96e319c5ee37de30bcf1bbc937780b96  libgcc/config/ia64/vms-unwind.h
! b35bb753a21134489709871dab9b0a6f  libgcc/config/iq2000/lib2funcs.c
  102f7dad8ad6b54434a1b8313d1e42c4  libgcc/config/iq2000/t-iq2000
! 673cd97413feeb19821036ad2113f3cb  libgcc/config/libbid/ChangeLog
! 5a241922dcbbaeba60cf8f739acb4e6f  libgcc/config/libbid/_addsub_dd.c
! f6d2abf11a64e2d5b6d879d2ae33ca1a  libgcc/config/libbid/_addsub_sd.c
! 19fa7c129865063148897a4a8ef4b9f7  libgcc/config/libbid/_addsub_td.c
! 9dd8491a5e038281ee608a5c787f7ac1  libgcc/config/libbid/_dd_to_df.c
! ec8563db46b81d742d76e2c9a3c52dc0  libgcc/config/libbid/_dd_to_di.c
! be8b7ebd9443ae3bf0d2f8ac01950557  libgcc/config/libbid/_dd_to_sd.c
! d10edd59b0a7842e20c0c0beb9fcf504  libgcc/config/libbid/_dd_to_sf.c
! 4ba5cc49cd3aedb4db5c76bbb81f7fe4  libgcc/config/libbid/_dd_to_si.c
! a5789b255eaf29e1365e4691fabfcfb8  libgcc/config/libbid/_dd_to_td.c
! 1afaa5ca86a408aa562618c3668b367c  libgcc/config/libbid/_dd_to_tf.c
! 3ebfe48cdcb50c216e6a5a59c914eb0f  libgcc/config/libbid/_dd_to_udi.c
! 6c3f16c23aeb257c13aa4ba8d43709f0  libgcc/config/libbid/_dd_to_usi.c
! c31d0333eda3e44f56268468937bf627  libgcc/config/libbid/_dd_to_xf.c
! d9e2424bd10045eaf3fa2e2a8a95966c  libgcc/config/libbid/_df_to_dd.c
! 11049b225bb5975651700b2c30d1ff80  libgcc/config/libbid/_df_to_sd.c
! 64ff3e8bf17066a81cadaab399c235ea  libgcc/config/libbid/_df_to_td.c
! 1e49aaa4bc63930a016ed986d687951a  libgcc/config/libbid/_di_to_dd.c
! 1ca7505667d4b679d428a08708b39a32  libgcc/config/libbid/_di_to_sd.c
! c0fbc700eb3ff2e5b5100eee5400b4ea  libgcc/config/libbid/_di_to_td.c
! d773b47d525be2161d107facc8e9bd30  libgcc/config/libbid/_div_dd.c
! 52f7b7291a89e6a77ca1ef7dfd6fb241  libgcc/config/libbid/_div_sd.c
! fee7256b10dc1fdc17590b22d81bc6b0  libgcc/config/libbid/_div_td.c
! 799ab582c77ab502ca47e2ad662a29c8  libgcc/config/libbid/_eq_dd.c
! d9c5bfaea68ab6aa2593ea96c86f069a  libgcc/config/libbid/_eq_sd.c
! 8ff31d3b9ff2354e376a7829caf15381  libgcc/config/libbid/_eq_td.c
! 0736ca6dedcdaecda3dffb613380d33a  libgcc/config/libbid/_ge_dd.c
! 327d1d364e0bf7215c3a1041e6b1b71c  libgcc/config/libbid/_ge_sd.c
! 42d9e20e71d49f96e7911cccea0048f9  libgcc/config/libbid/_ge_td.c
! e359d0877d240dbf444a18b2fd118563  libgcc/config/libbid/_gt_dd.c
! e9dae0652df6b347a2728cfb1d1be293  libgcc/config/libbid/_gt_sd.c
! b25cfc91e3ccaf6db859e564143f06c7  libgcc/config/libbid/_gt_td.c
! e67dea5a29a0a351b7939dfc47656590  libgcc/config/libbid/_isinfd128.c
! 255ea6ad3a82cf1e10b7ce30d4732e1e  libgcc/config/libbid/_isinfd32.c
! 41c03475dd2fe56a222d0da6039f5fdb  libgcc/config/libbid/_isinfd64.c
! 0ac05d528dd736470d92de7094aad44a  libgcc/config/libbid/_le_dd.c
! cd7753921933d0e09d6940591316b0c9  libgcc/config/libbid/_le_sd.c
! 41710966a2422dd2c4c6e7b8841c95e0  libgcc/config/libbid/_le_td.c
! 57ada2430de72b3d343e5df28d49fd18  libgcc/config/libbid/_lt_dd.c
! e26abfaf354c5c3a484b7f7d3b40f9fc  libgcc/config/libbid/_lt_sd.c
! d27b0ec76bfcafc4ed84064c5597ba23  libgcc/config/libbid/_lt_td.c
! 5590bcccdd050160465ec0592c34ba1b  libgcc/config/libbid/_mul_dd.c
! 3233859036ab44992ac3bb1c2f544da8  libgcc/config/libbid/_mul_sd.c
! 886d3f5a48e1fa06d344dd07896efd19  libgcc/config/libbid/_mul_td.c
! 0286854c91905a92f4a429131cf0a9c1  libgcc/config/libbid/_ne_dd.c
! 8e27447bf8dd62ce7f3e3cb370cd5cad  libgcc/config/libbid/_ne_sd.c
! d7d9919a8a2e52a60bb1dd28d4340785  libgcc/config/libbid/_ne_td.c
! 8c579a9f203749e732d60314995cb669  libgcc/config/libbid/_sd_to_dd.c
! bc74face30956e19b103b29c71ee3881  libgcc/config/libbid/_sd_to_df.c
! 93c464b4e0d5d9daa20445ffa6a3531f  libgcc/config/libbid/_sd_to_di.c
! 688d8472e7bc7a82e7708c22713648e2  libgcc/config/libbid/_sd_to_sf.c
! 1193b9837464e5d94272caf485316b5c  libgcc/config/libbid/_sd_to_si.c
! 31c31b616e884d952b5f9ed92bb8661c  libgcc/config/libbid/_sd_to_td.c
! 8b55827f73744236cfb822cc1051692e  libgcc/config/libbid/_sd_to_tf.c
! 4a287310704947f3f26cb420d2311fff  libgcc/config/libbid/_sd_to_udi.c
! 2b834d4969b2928c6f8d25e99652dabf  libgcc/config/libbid/_sd_to_usi.c
! 85b54f9f59a2f291b308888bed3ce232  libgcc/config/libbid/_sd_to_xf.c
! 004568ccb2497564ab97317cf3e3a8c1  libgcc/config/libbid/_sf_to_dd.c
! afb6320190242ac804b8f099b3d1ed21  libgcc/config/libbid/_sf_to_sd.c
! a1f1885bd521ef17ab07c401fb72c577  libgcc/config/libbid/_sf_to_td.c
! 00d79b508170b45713b1c43af9cbcf9c  libgcc/config/libbid/_si_to_dd.c
! b9de2f3da7d3bd8451d01878732c8146  libgcc/config/libbid/_si_to_sd.c
! 6b0bd22a56c9a4ff4862a26b33322c5b  libgcc/config/libbid/_si_to_td.c
! 612dc0b616c2a39c2e0c46083b8aa7bb  libgcc/config/libbid/_td_to_dd.c
! fab00f1d35f6880cac097a375dfdefc1  libgcc/config/libbid/_td_to_df.c
! 3013173f85af4ef565d1e18b23963881  libgcc/config/libbid/_td_to_di.c
! 63ae71118df090851bd6385378aec293  libgcc/config/libbid/_td_to_sd.c
! 1c7751109e25d3514f6afac501bccd22  libgcc/config/libbid/_td_to_sf.c
! ca0f01cb02576aceef108116260fc07c  libgcc/config/libbid/_td_to_si.c
! 5dc7b852bbd49330b1dd3e692f3f4a8c  libgcc/config/libbid/_td_to_tf.c
! bbf22a39413f5a7a47c079287a30fc7c  libgcc/config/libbid/_td_to_udi.c
! fc883fecdeaf97359287cd2bcf7dd274  libgcc/config/libbid/_td_to_usi.c
! aa6f74d931e6f917d633b3b5b9e5c8e5  libgcc/config/libbid/_td_to_xf.c
! 141ef9dc125db7c2732f6356647f6476  libgcc/config/libbid/_tf_to_dd.c
! 7f499056496a3a0ea9b5cc69ce8f14b5  libgcc/config/libbid/_tf_to_sd.c
! 27c549593feed9f40e0a7fdea3c4897f  libgcc/config/libbid/_tf_to_td.c
! bb6638db6185ef8e05ab57d86e9c35c1  libgcc/config/libbid/_udi_to_dd.c
! c66bae8d75546b66e65dc6159dde8285  libgcc/config/libbid/_udi_to_sd.c
! 534bb173fa2bb2a0593fc3cbfa5c69de  libgcc/config/libbid/_udi_to_td.c
! 95de82ee7f775776f56e86723997156b  libgcc/config/libbid/_unord_dd.c
! 7da4b8788fb19ea4b8f40e1084ca49a0  libgcc/config/libbid/_unord_sd.c
! e6596a66338a5137eaf67a4e30b78926  libgcc/config/libbid/_unord_td.c
! 9438ade7871fa1faa65b876b31bda358  libgcc/config/libbid/_usi_to_dd.c
! f3816511902805d19f016aeefe22e2e0  libgcc/config/libbid/_usi_to_sd.c
! e3a9116c9f50f0958eea3f4a1bd09ec2  libgcc/config/libbid/_usi_to_td.c
! 1e5b2c652578ad9278092ed9bd2a48fc  libgcc/config/libbid/_xf_to_dd.c
! 4170033f119ca89f9f84a541e80804c2  libgcc/config/libbid/_xf_to_sd.c
! 1bd8fd183576a4150e58e9d5aadbe25c  libgcc/config/libbid/_xf_to_td.c
! e1e3ca091a11216cd0d1a75b40a1844f  libgcc/config/libbid/bid128.c
! 7078d50fe3682f15367c3a8e039c0916  libgcc/config/libbid/bid128_2_str.h
! 397b4f5b5dd481384565fe82e6f1efbe  libgcc/config/libbid/bid128_2_str_macros.h
! d9de07a9b0554d6ccc4b981d01a90b6b  libgcc/config/libbid/bid128_2_str_tables.c
! 33ecabaf9e7eae7ccbc644650cde8343  libgcc/config/libbid/bid128_add.c
! 9975e91b80bb2f53b435bc7750c7ff5f  libgcc/config/libbid/bid128_compare.c
! e8b2ad8f0c03e25d0ffc5d22d44b82e1  libgcc/config/libbid/bid128_div.c
! 1a7de6dda0e79d56f8c31f251dc0d06a  libgcc/config/libbid/bid128_fma.c
! 0984bf2e15f4173243813c00148374f3  libgcc/config/libbid/bid128_logb.c
! 635cf2c103f8f6a979920f0115de2006  libgcc/config/libbid/bid128_minmax.c
! c05b5e6191ce2c7022bf19ae71fc82aa  libgcc/config/libbid/bid128_mul.c
! e47ad5fbad97dbeef96db07ed0bb65e0  libgcc/config/libbid/bid128_next.c
! 64352a272ff5add687691c5b61deabb2  libgcc/config/libbid/bid128_noncomp.c
! 1f9ff5ea5f87e6b18c7312314b3cc9c5  libgcc/config/libbid/bid128_quantize.c
! 5fe262ec08ba2a36e8947949861428db  libgcc/config/libbid/bid128_rem.c
! e318d59f93b8501e885c9bf893ee2c49  libgcc/config/libbid/bid128_round_integral.c
! 5fac3f4c06f1a01fb1a3e221c18a1485  libgcc/config/libbid/bid128_scalb.c
! fa618d261cf77a12097e1235861e7e6d  libgcc/config/libbid/bid128_sqrt.c
! 7b8f9ce3cabd06ef4faa813450788d82  libgcc/config/libbid/bid128_string.c
! 7dcd74f2cf9353dc04288342caace538  libgcc/config/libbid/bid128_to_int16.c
! f800ad382a97740822097b0847326b2f  libgcc/config/libbid/bid128_to_int32.c
! a43a54709aa786e8a23b4abaff91a6b7  libgcc/config/libbid/bid128_to_int64.c
! d64fefa6400631e2900d5a8156ab3317  libgcc/config/libbid/bid128_to_int8.c
! fb4d6908eea34b2ca4ec96ec6e2eaf5f  libgcc/config/libbid/bid128_to_uint16.c
! 2280e3bd2d70840fd6007975ea988ac0  libgcc/config/libbid/bid128_to_uint32.c
! 316cb984655f3726744b60908e3bb21a  libgcc/config/libbid/bid128_to_uint64.c
! 23ef78371ddb0dcf2719d2c2c2fff8ce  libgcc/config/libbid/bid128_to_uint8.c
! c4ea4068df9aa021848fc6cbe7a35943  libgcc/config/libbid/bid32_to_bid128.c
! 150e1341ffb6eca1b8d4b81a9a2c8b9c  libgcc/config/libbid/bid32_to_bid64.c
! d98c67b11161ef000c5fc45bcd0e9536  libgcc/config/libbid/bid64_add.c
! 3a4f3d482c8306610d1f352a0b920272  libgcc/config/libbid/bid64_compare.c
! ff412e2dba6364adc2fcb9bdaef00d9f  libgcc/config/libbid/bid64_div.c
! f7ef08619904ef0638fb2550a83841d5  libgcc/config/libbid/bid64_fma.c
! 16968ea535b67d5e37a03f917945e78e  libgcc/config/libbid/bid64_logb.c
! 271b3c6c46549612364755ed12dea3f3  libgcc/config/libbid/bid64_minmax.c
! 03a45dabf901760c578ff3c60b5f75b0  libgcc/config/libbid/bid64_mul.c
! ef795ff9dd13ff098f2e4bc3ca4ad477  libgcc/config/libbid/bid64_next.c
! 0cd7859862a42de7221127d72a963581  libgcc/config/libbid/bid64_noncomp.c
! b0d7b43936bd546ae57ec7f6a66c26d3  libgcc/config/libbid/bid64_quantize.c
! 332fe5f782f338de4db2c351accf8492  libgcc/config/libbid/bid64_rem.c
! a4dacaad4ca5c68c8ebf3e2428bd1968  libgcc/config/libbid/bid64_round_integral.c
! 41472692c8a1e5138a6ae8f6c4a7b671  libgcc/config/libbid/bid64_scalb.c
! daa41f7c863f937b9ec573eef015ccf6  libgcc/config/libbid/bid64_sqrt.c
! 12d57cf6d4b15e598b1fe192f5476e1e  libgcc/config/libbid/bid64_string.c
! 4c068f2ba99f455be9cbc7588c885290  libgcc/config/libbid/bid64_to_bid128.c
! 24559e9d2938c12cc125fc9078063239  libgcc/config/libbid/bid64_to_int16.c
! 4b6036bafd24f10d31aceb9b7017dde4  libgcc/config/libbid/bid64_to_int32.c
! 5249155ea4ddb04a0a01b85b9ca112d0  libgcc/config/libbid/bid64_to_int64.c
! 3d927c60ca0b5e1d838fec0b9aece3d4  libgcc/config/libbid/bid64_to_int8.c
! fd638fafc4e0e5998145f6b5929f89fb  libgcc/config/libbid/bid64_to_uint16.c
! 9230d247028e2f18c89604cef0f50f49  libgcc/config/libbid/bid64_to_uint32.c
! 66bd4e7243fa061f38cacce45cbf5368  libgcc/config/libbid/bid64_to_uint64.c
! 9f941774b8d21553a03a3d5094067867  libgcc/config/libbid/bid64_to_uint8.c
! 3edab879ceac5c49502cc826771dd307  libgcc/config/libbid/bid_b2d.h
! 6abc39a8652566b043915056395b9bfb  libgcc/config/libbid/bid_binarydecimal.c
! d5151472c0e901f43078cb055eac91cc  libgcc/config/libbid/bid_conf.h
! 00003078fcf7f67c335cd7820a262021  libgcc/config/libbid/bid_convert_data.c
! 027796754f286ddf8184ddda1b6b4e3b  libgcc/config/libbid/bid_decimal_data.c
! 06dd373bb0f286305ac714c5f1572dad  libgcc/config/libbid/bid_decimal_globals.c
! 17f411ef193656da6a56e2624e2a70be  libgcc/config/libbid/bid_div_macros.h
! d461b9b304da1e5d85247a4f3fbafe10  libgcc/config/libbid/bid_dpd.c
! 2366a04419c5559021a57afe0374c236  libgcc/config/libbid/bid_flag_operations.c
! e243ed0cdeb830f48aac118d4c3fb054  libgcc/config/libbid/bid_from_int.c
! a658e97dbedd530bde79d7da3ac93dda  libgcc/config/libbid/bid_functions.h
! 3f8cc8f19768b64932ff239da835cd9e  libgcc/config/libbid/bid_gcc_intrinsics.h
! de4200991f30ddeae8184263ff59287a  libgcc/config/libbid/bid_inline_add.h
! a5b861634785c5e38d9531831542b354  libgcc/config/libbid/bid_internal.h
! db8c2d5cd6af2c36d7adeeb1d9ca8803  libgcc/config/libbid/bid_round.c
! ae5f956a504522be04511254608e5c16  libgcc/config/libbid/bid_sqrt_macros.h
! 3c9dd308fa97d5ecf167032f0767d605  libgcc/config/libgcc-glibc.ver
  a5b43383f528298ff2dc85061452e1e6  libgcc/config/libgcc-libsystem.ver
! 817952136b57484e1747bd501b08b4e4  libgcc/config/lm32/_ashlsi3.S
! e24874f6f802ddf4e8562695a7b5da2d  libgcc/config/lm32/_ashrsi3.S
! 6f3f19b45861618fc174047afeae3908  libgcc/config/lm32/_divsi3.c
! 7766749f9a29499db9872ed209685b39  libgcc/config/lm32/_lshrsi3.S
! 535380e482514b0cae7527dce38d141c  libgcc/config/lm32/_modsi3.c
! d50bac3085a7ba88c26871a2794c7802  libgcc/config/lm32/_mulsi3.c
! b21129eab182e776b160a65d027e0863  libgcc/config/lm32/_udivmodsi4.c
! f43841dc04caa09d29b47f01c943a5a7  libgcc/config/lm32/_udivsi3.c
! e4fe275288e01dc974d5d0f216a26b1a  libgcc/config/lm32/_umodsi3.c
! 405956e9956dd96a234f6e56c09ed36e  libgcc/config/lm32/crti.S
! 492b0282b3f172d7d9fe42361ec9c6d4  libgcc/config/lm32/crtn.S
! fc5304f992ebf240b0222cc712b2d70f  libgcc/config/lm32/libgcc_lm32.h
  813910d184e034c80a518f2ba3c4e1a5  libgcc/config/lm32/sfp-machine.h
  331dd855f33aa7a09d25fc757cedf2cf  libgcc/config/lm32/t-elf
  d6d4b530a7539331e6e553f26928de4e  libgcc/config/lm32/t-lm32
  df59d7c87fc0d2f761461ac4ba7ec440  libgcc/config/lm32/t-uclinux
! 45cff0d7791087ca20cf0bfa0feea2d0  libgcc/config/loongarch/crtfastmath.c
! 1b806083f2e3bda87fbed38c7561206c  libgcc/config/loongarch/linux-unwind.h
! cbf1de8d8b1c1ef36d122b35b0e1ecc9  libgcc/config/loongarch/sfp-machine.h
! 6cd85196ae9a504ff938607f275f760e  libgcc/config/loongarch/t-crtstuff
! 5b9c4ae086bab2fa0eb006a6223eb270  libgcc/config/loongarch/t-loongarch
! 5e2260f13769a960c8e1f24b0c9847e4  libgcc/config/loongarch/t-loongarch64
! 011afb1a0cc0aae0a4c465e6aefcafda  libgcc/config/loongarch/t-softfp-tf
! db4b6d0353e7763cbd2e0c70067fdfee  libgcc/config/m32c/lib1funcs.S
! 546decb21d0478041a1bd0c32dea4b99  libgcc/config/m32c/lib2funcs.c
  9f1fc3a0f039273ded002a6713908bd3  libgcc/config/m32c/t-m32c
! 2daddd914f276eec13a1d49bc2212d76  libgcc/config/m32c/trapv.c
! 45300f7df1b3ae44bbcbf69019e7eda9  libgcc/config/m32r/initfini.c
  e252c161ec4eb09d3b5a62d902b3d00f  libgcc/config/m32r/t-m32r
! 603ddce85a633c1ea995ae97ef04c00c  libgcc/config/m68k/crti.S
! eaaa9bf10e2cf1db0b3462a173d8135f  libgcc/config/m68k/crtn.S
  c88d87907a20077db176016165428d4b  libgcc/config/m68k/fpgnulib.c
! d85560e8c84b12a34bba36b7299f6fc5  libgcc/config/m68k/lb1sf68.S
! faa1fde6c5de1f1e0072c644cb594761  libgcc/config/m68k/linux-atomic.c
! 6d1e44e15292b29170a093119998136b  libgcc/config/m68k/linux-unwind.h
  2e4fd3e401c9159da9f32d5965b5afa1  libgcc/config/m68k/t-floatlib
  de217c41c217f4341d6d546afa9a79f2  libgcc/config/m68k/t-linux
  4e281c631e54b8912258f84196fec9e6  libgcc/config/m68k/t-slibgcc-elf-ver
! 6ec44dd6c45e891cbf18cff20f8fc7af  libgcc/config/mcore/crti.S
! 8af3d8db98e71ecc83b23451db182b28  libgcc/config/mcore/crtn.S
! ba8fc62b95329bb4bedabe439ed72303  libgcc/config/mcore/lib1funcs.S
  ef74fd63202d842bfe7120864186128c  libgcc/config/mcore/t-mcore
! 69eab15e0d65fcee78782d16afc90938  libgcc/config/microblaze/crti.S
! e1290ff93e0b2d26b826091254a4446a  libgcc/config/microblaze/crtn.S
! 2e02189c460e5f74a75874b4bb111e71  libgcc/config/microblaze/divsi3.S
! 0eb45097ad1bbbf91a1d7316a5563775  libgcc/config/microblaze/divsi3_table.c
! e6adf5e459423713399e5ffdffa0b597  libgcc/config/microblaze/moddi3.S
! 2c2d84f97e279171d2a514564dd13070  libgcc/config/microblaze/modsi3.S
! cb172aa4883384cfacc43f75b251e1e3  libgcc/config/microblaze/muldi3_hard.S
! 163facc45008423a3e57bb08a4f13ec3  libgcc/config/microblaze/mulsi3.S
! 3f22b62eee8b186f2c745f932d4f547d  libgcc/config/microblaze/stack_overflow_exit.S
  702cd2045c2c31581ecd56232d96d5f5  libgcc/config/microblaze/t-microblaze
! a1bc526d302895859d32c478a5602cf7  libgcc/config/microblaze/udivsi3.S
! ca8c3894e38e10fc7738c78bcd03b694  libgcc/config/microblaze/umodsi3.S
! db80b09dd7fb12b38a731a2dedffd870  libgcc/config/mips/crtfastmath.c
! c5e7062db4d1338e464aebf0344ed4a4  libgcc/config/mips/crti.S
! f5620f68606f24b21ad842d42d311ece  libgcc/config/mips/crtn.S
  f69b446f168701e4fad37a3fa7bf7a2a  libgcc/config/mips/gnustack.h
! bbb150d31efb18007988341c9c9d3c61  libgcc/config/mips/gthr-mipssde.h
! 1ef28d805ec923da8d4dc7ebb7ee3307  libgcc/config/mips/lib2funcs.c
! 76a66b1d3c5a0b3c647546c8c5f12585  libgcc/config/mips/libgcc-mips16.ver
! c8be3e0993c3a7ff52727a87e73c65b5  libgcc/config/mips/linux-unwind.h
! 5095fe9cb1092b4d86220e696d952192  libgcc/config/mips/mips16.S
! b37ee16797a1ee1e41d88f2b949a903d  libgcc/config/mips/sfp-machine.h
  5b43c15f4e003338742d215bcfdf5029  libgcc/config/mips/t-crtstuff
  33f2c96b7ccbbb062839ec1e7329e6bb  libgcc/config/mips/t-elf
  501be8fccb18eca4dbd8b404d7b4c9fa  libgcc/config/mips/t-mips
! 0cfc6bdb624544dc0516bf55abbb8efc  libgcc/config/mips/t-mips16
  5e2260f13769a960c8e1f24b0c9847e4  libgcc/config/mips/t-mips64
  6403b3d85f0ed6751174f1088d074f62  libgcc/config/mips/t-sdemtk
  011afb1a0cc0aae0a4c465e6aefcafda  libgcc/config/mips/t-softfp-tf
  532a76f856d3755b780a19a91bdd1654  libgcc/config/mips/t-vr
! 7f3118bde5402efe4a1e9f8e91fcc1a1  libgcc/config/mips/vr4120-div.S
! c5504c3c42776261045e29ccc7e10de1  libgcc/config/mmix/crti.S
! fc2ecd25b4fcb9687edeaa23d7403e3a  libgcc/config/mmix/crtn.S
  41478efd1b19b3c7c9426d8e843f3b39  libgcc/config/mmix/t-mmix
! 3445ac23ba249799713563de33627ca4  libgcc/config/moxie/crti.S
! dad3bb83cff173fea639acd447c586e7  libgcc/config/moxie/crtn.S
  5d570ff5cd40fc6fba8876bdebd59a6b  libgcc/config/moxie/sfp-machine.h
  9b7000ea173c226d39e6a6dc116fdaf1  libgcc/config/msp430/cmpd.c
! c2725d345143541c0f9e3e859d124861  libgcc/config/msp430/cmpsi2.S
! ad4506d4c0d1530c8d2e1b485306d366  libgcc/config/msp430/epilogue.S
  072a56de362c5e857510ca8401f30aa8  libgcc/config/msp430/floathidf.c
  07461b1abb61437fbc73d74801f6300b  libgcc/config/msp430/floathisf.c
  88792e557553f37a296bd8127a0dfc88  libgcc/config/msp430/floatunhidf.c
  754bbc793bc0e81b0a2168df9f47e1f3  libgcc/config/msp430/floatunhisf.c
! 4e296513505390246ddae4177b7761fa  libgcc/config/msp430/lib2bitcountHI.c
! 0673e04660c6f277c26c96ba75a3a3e2  libgcc/config/msp430/lib2divHI.c
! 6d5b794d5e3c55a03e07c954a5a9dddf  libgcc/config/msp430/lib2divQI.c
! d3646eeba8d076dcbbc52cde60e28fa6  libgcc/config/msp430/lib2divSI.c
! 079eab40210183400db334ba223893a9  libgcc/config/msp430/lib2hw_mul.S
! c0190cc0bbdf921fd7ed88ce75abfeae  libgcc/config/msp430/lib2mul.c
! d66d95d0d48946c0944df00943ea7d3c  libgcc/config/msp430/lib2shift.c
  585dda5cb05623da62e4f4aad3bdbbb6  libgcc/config/msp430/mpy.c
! 6bddd7ee6169224d8778fd8a13fa18bf  libgcc/config/msp430/msp430-divmod.h
! 7691258dfa14a2a06aa84effc77a3b15  libgcc/config/msp430/msp430-mul.h
! 55092e2fdc7cbbcf329822160d04d7b4  libgcc/config/msp430/slli.S
! 81ef6816294b19d5714d38fb3665984e  libgcc/config/msp430/srai.S
! b22da23441571c3b160cd1143b78210e  libgcc/config/msp430/srli.S
! af0d76b35494f40e4a6be3f06cc261ae  libgcc/config/msp430/t-msp430
! 296520abce359c884c80b532e9ff25c7  libgcc/config/nds32/crtzero.S
! 4170d0ba360345435ea741ecc9ca6aad  libgcc/config/nds32/initfini.c
! 62d88fb9e03fadd1e3b5eb80d2a20d80  libgcc/config/nds32/isr-library/adj_intr_lvl.inc
! a9d30495ba3d81c0d0bc15ff9873732d  libgcc/config/nds32/isr-library/excp_isr.S
! 722af0af7e7445be05636d2e052b3ea2  libgcc/config/nds32/isr-library/excp_isr_4b.S
! 3724e878a97ed3c81f2f95758053d6aa  libgcc/config/nds32/isr-library/intr_isr.S
! 4251683c839594d9aaa81d4bf594a9c5  libgcc/config/nds32/isr-library/intr_isr_4b.S
! 40b7765bad6ab5dda37f791eebf72ab6  libgcc/config/nds32/isr-library/jmptbl_vid00.S
! e92a0053e6a3d8f773d03024ee7a8e06  libgcc/config/nds32/isr-library/jmptbl_vid01.S
! 767d1fb46b52366a6751fb970a403df3  libgcc/config/nds32/isr-library/jmptbl_vid02.S
! 59abd86886cdd7169c29811879bda815  libgcc/config/nds32/isr-library/jmptbl_vid03.S
! 916b7fd46286e9759fd3101d55015bfb  libgcc/config/nds32/isr-library/jmptbl_vid04.S
! 33a36071f857b1ff9c2d18c4a1807f03  libgcc/config/nds32/isr-library/jmptbl_vid05.S
! 996a0d7c7807640e273fe3317a792772  libgcc/config/nds32/isr-library/jmptbl_vid06.S
! ee5a7c82384dfa791135ef7292e252a3  libgcc/config/nds32/isr-library/jmptbl_vid07.S
! 79bca5272e37f1e8c3060470908d4bd9  libgcc/config/nds32/isr-library/jmptbl_vid08.S
! e4f2a132a5aa1bfb8e37b7f9c47496c5  libgcc/config/nds32/isr-library/jmptbl_vid09.S
! 7e95651f3a8e5a5f5d2084fb140390c2  libgcc/config/nds32/isr-library/jmptbl_vid10.S
! 8c02dcd10f6eb01822107994da7b08b8  libgcc/config/nds32/isr-library/jmptbl_vid11.S
! 7bd41028a589feb83add1900e07929d6  libgcc/config/nds32/isr-library/jmptbl_vid12.S
! d44bf3e26e244e4c61d4bd07f40b1bc4  libgcc/config/nds32/isr-library/jmptbl_vid13.S
! d6f5746d66c67ac390cc4e9db41ecae3  libgcc/config/nds32/isr-library/jmptbl_vid14.S
! 424fb59dbc389d1ac2d529eb8d9aa813  libgcc/config/nds32/isr-library/jmptbl_vid15.S
! 07b9bcb5b9c1d6622fdaae561c1aea15  libgcc/config/nds32/isr-library/jmptbl_vid16.S
! ad28f6f50ba1812db1c049864c189721  libgcc/config/nds32/isr-library/jmptbl_vid17.S
! 69a02770ce89cf4889cc8b1a84701ba1  libgcc/config/nds32/isr-library/jmptbl_vid18.S
! b22469e3451f84184377f28a69f4c0ab  libgcc/config/nds32/isr-library/jmptbl_vid19.S
! de430c4daa424909fa54aa81a4783d4e  libgcc/config/nds32/isr-library/jmptbl_vid20.S
! 4a9790f17b03a7fcd96b3a68c1ec951f  libgcc/config/nds32/isr-library/jmptbl_vid21.S
! b7313899bb353c33c3b7497b329bc35f  libgcc/config/nds32/isr-library/jmptbl_vid22.S
! 6306804b6ad9cacbaae78409bf4c7166  libgcc/config/nds32/isr-library/jmptbl_vid23.S
! dd75403df319452a200093fbb55697fb  libgcc/config/nds32/isr-library/jmptbl_vid24.S
! 446ee2b8b68f6bdedd416c95157474c4  libgcc/config/nds32/isr-library/jmptbl_vid25.S
! 74cb0e18e9ce6701e0fb8c2cb142d18b  libgcc/config/nds32/isr-library/jmptbl_vid26.S
! 34c12c2512465300e2779c1e926a67bf  libgcc/config/nds32/isr-library/jmptbl_vid27.S
! 4d1c667953bdd30065973381b662766d  libgcc/config/nds32/isr-library/jmptbl_vid28.S
! d0d788ab6de7ddef4ae0e8e1819e9dbd  libgcc/config/nds32/isr-library/jmptbl_vid29.S
! 7102471890872cf27d7a135cf32a0f04  libgcc/config/nds32/isr-library/jmptbl_vid30.S
! 37642eac195c0ba614c14ddc1adc5855  libgcc/config/nds32/isr-library/jmptbl_vid31.S
! 865f4901f32832bbe1a4bc471903fe12  libgcc/config/nds32/isr-library/jmptbl_vid32.S
! b61a88988940404da42d024261f32823  libgcc/config/nds32/isr-library/jmptbl_vid33.S
! 0531860510f26df8c2d92e3a6aedbb3e  libgcc/config/nds32/isr-library/jmptbl_vid34.S
! 295710fc4d91bf2aabf84785ddcd5f3c  libgcc/config/nds32/isr-library/jmptbl_vid35.S
! eb3bb66c6daf9649f15334a10b81ccf3  libgcc/config/nds32/isr-library/jmptbl_vid36.S
! 1f89132a51db37e9e79acf07ed4c964c  libgcc/config/nds32/isr-library/jmptbl_vid37.S
! 4101e5842fb07fa83b8997168a68b36b  libgcc/config/nds32/isr-library/jmptbl_vid38.S
! 55c985800205d9bcdd3a7d17b9966964  libgcc/config/nds32/isr-library/jmptbl_vid39.S
! 3f1a6e1968f826349d33824af91703d7  libgcc/config/nds32/isr-library/jmptbl_vid40.S
! 55399efbc426b2f577c42f812433bfb2  libgcc/config/nds32/isr-library/jmptbl_vid41.S
! e67cb7646c4dd178a41b854f0820b0fe  libgcc/config/nds32/isr-library/jmptbl_vid42.S
! 39b67054d8596736b84479ac08cfc7c3  libgcc/config/nds32/isr-library/jmptbl_vid43.S
! c55b8e55ff26896b069e5313f2a19211  libgcc/config/nds32/isr-library/jmptbl_vid44.S
! ca94cbf03b42a161a11aa215086a231b  libgcc/config/nds32/isr-library/jmptbl_vid45.S
! 6dd2dc22d800897a373b993d050c42ae  libgcc/config/nds32/isr-library/jmptbl_vid46.S
! 2c4e583dc092efb247827f5c555c5e39  libgcc/config/nds32/isr-library/jmptbl_vid47.S
! 03f07b2ce3f5cd4af863f35630997c59  libgcc/config/nds32/isr-library/jmptbl_vid48.S
! 632453320abf363cc7ca4f9dcf987e13  libgcc/config/nds32/isr-library/jmptbl_vid49.S
! 589399c0da362818951cb181176ad10e  libgcc/config/nds32/isr-library/jmptbl_vid50.S
! d84f324e8457b2ff038855ae64cfc4bb  libgcc/config/nds32/isr-library/jmptbl_vid51.S
! ba808f1a6c055c2acd4ac84bd3f8dacd  libgcc/config/nds32/isr-library/jmptbl_vid52.S
! 6c2657ddf6e2c1c65b4b93f1e0221a36  libgcc/config/nds32/isr-library/jmptbl_vid53.S
! 6a701ee17ef24775b809bedf7b354c1d  libgcc/config/nds32/isr-library/jmptbl_vid54.S
! 63cd1656f4084f41ec315ecd696eae78  libgcc/config/nds32/isr-library/jmptbl_vid55.S
! 019cee3bc772edc585bc80129981b93c  libgcc/config/nds32/isr-library/jmptbl_vid56.S
! ab2339c13f227d68f592f90c3006e77a  libgcc/config/nds32/isr-library/jmptbl_vid57.S
! 9d6cfc360c29a842eab1f91dde8334b2  libgcc/config/nds32/isr-library/jmptbl_vid58.S
! ce3521cb94bc6464c611aee1348f41b5  libgcc/config/nds32/isr-library/jmptbl_vid59.S
! 28f1711f1ccf970bf46b12b0291c2f38  libgcc/config/nds32/isr-library/jmptbl_vid60.S
! 17aa8f3d54b7b87cfb8616c5ccfc6e83  libgcc/config/nds32/isr-library/jmptbl_vid61.S
! 0529cfd2f38805af6a8ee9ac5f29d675  libgcc/config/nds32/isr-library/jmptbl_vid62.S
! b46253ef1632df477167589748264816  libgcc/config/nds32/isr-library/jmptbl_vid63.S
! c31fbcb7f0531b977d8e68696d8c7366  libgcc/config/nds32/isr-library/jmptbl_vid64.S
! 3512542eb01eaa249a48aecbf2e2bbe0  libgcc/config/nds32/isr-library/jmptbl_vid65.S
! 7633d74fffe079da269301aed315ebc3  libgcc/config/nds32/isr-library/jmptbl_vid66.S
! 1e5d2df7d8e9290ea6de3f8c0ec8920f  libgcc/config/nds32/isr-library/jmptbl_vid67.S
! 57a164383568ba32751cd9e870c0a927  libgcc/config/nds32/isr-library/jmptbl_vid68.S
! b942624ca790ae28cd6d36fe516da6b9  libgcc/config/nds32/isr-library/jmptbl_vid69.S
! 0b6a14869e4c086306888ce445bf19f3  libgcc/config/nds32/isr-library/jmptbl_vid70.S
! 990b6da9c2adf738a8ace29f400d7a06  libgcc/config/nds32/isr-library/jmptbl_vid71.S
! 34f4ab45178c087dda2090030c1ae09f  libgcc/config/nds32/isr-library/jmptbl_vid72.S
! 08fa60711e9af620a9d3e834cafd6e10  libgcc/config/nds32/isr-library/nmih.S
! 8bd2066f4f59eb81c536ab7f6871033e  libgcc/config/nds32/isr-library/reset.S
! f4117cd68836edab15f6f3e3e46fe6a0  libgcc/config/nds32/isr-library/reset_4b.S
! 3a1fe9fabd5a1cec76d5b2b9df7af4f1  libgcc/config/nds32/isr-library/restore_all.inc
! 0e303f240015c5a84c68f3cce958e1ca  libgcc/config/nds32/isr-library/restore_fpu_regs.inc
! 177eb98b945931e9e427305db7427d23  libgcc/config/nds32/isr-library/restore_fpu_regs_00.inc
! 099cbb9b9f563b480f456832cc53b719  libgcc/config/nds32/isr-library/restore_fpu_regs_01.inc
! 15135a36f6e81b59c0c24133cdd52c8e  libgcc/config/nds32/isr-library/restore_fpu_regs_02.inc
! 4e05d7214c25760e9e8551a5398f488b  libgcc/config/nds32/isr-library/restore_fpu_regs_03.inc
! 4be6ef8eacb1bacce901888635e4500a  libgcc/config/nds32/isr-library/restore_mac_regs.inc
! 4d6a9b6eb002551258a5c5a4cecadea6  libgcc/config/nds32/isr-library/restore_partial.inc
! 4425b9af9a05750e11e55766c3508c17  libgcc/config/nds32/isr-library/restore_usr_regs.inc
! 8fd8e18077fae58ff5e173f503cdc3e2  libgcc/config/nds32/isr-library/save_all.inc
! daef8143458537e2a88620f422227817  libgcc/config/nds32/isr-library/save_fpu_regs.inc
! 34b66b2dd2a678a8d7af1609c939da0d  libgcc/config/nds32/isr-library/save_fpu_regs_00.inc
! 7e395b76e12f6b284b710a9f0aa7b233  libgcc/config/nds32/isr-library/save_fpu_regs_01.inc
! 2758b5365b369b38903269d0bdb123da  libgcc/config/nds32/isr-library/save_fpu_regs_02.inc
! 682227024806100942e931e0a5625ca1  libgcc/config/nds32/isr-library/save_fpu_regs_03.inc
! 9f962076e38e2bc3c047e20d320ae30d  libgcc/config/nds32/isr-library/save_mac_regs.inc
! 884fd00208e6c1222d67b9d49c035934  libgcc/config/nds32/isr-library/save_partial.inc
! 9c1704c7b3c59c217a4629b9200e7893  libgcc/config/nds32/isr-library/save_usr_regs.inc
! 99bac74011d6e5b73fa6a1551009dd35  libgcc/config/nds32/isr-library/vec_vid00.S
! b800cf507ce6a7383323b3b5c7895831  libgcc/config/nds32/isr-library/vec_vid00_4b.S
! 7d8707468de7bc93bca4b0231abab7f5  libgcc/config/nds32/isr-library/vec_vid01.S
! f834721a6dc0494bc56f095429b27b53  libgcc/config/nds32/isr-library/vec_vid01_4b.S
! 9892d13385e8dc9306ed1f84e26e387b  libgcc/config/nds32/isr-library/vec_vid02.S
! 6b9a2531f5b1f1d8d6e7ac69717862f1  libgcc/config/nds32/isr-library/vec_vid02_4b.S
! 694be5a1ae21ff62f53bcd1b9e26c0f3  libgcc/config/nds32/isr-library/vec_vid03.S
! b7a7fc9854e9ac9dbea116b8f4facd0a  libgcc/config/nds32/isr-library/vec_vid03_4b.S
! 884c5601fa019787fef5dde512f25cad  libgcc/config/nds32/isr-library/vec_vid04.S
! a101da53b6f6962ad5306a5452b463ea  libgcc/config/nds32/isr-library/vec_vid04_4b.S
! b5ba8d7b9c4cd65ab0a8d4343442b1bd  libgcc/config/nds32/isr-library/vec_vid05.S
! 99b6ef04296739ad0de586c850a3db3a  libgcc/config/nds32/isr-library/vec_vid05_4b.S
! 1b055450c3a08083377ed69713bc259f  libgcc/config/nds32/isr-library/vec_vid06.S
! d9d1a02d84a05698e874d2f1eaa24ce6  libgcc/config/nds32/isr-library/vec_vid06_4b.S
! ccc495541159f37d4134ddcfd134ee80  libgcc/config/nds32/isr-library/vec_vid07.S
! 5482686a79a7d038b3c33e3b488ed45b  libgcc/config/nds32/isr-library/vec_vid07_4b.S
! 08f6518839b646f906886c31f13a7fc3  libgcc/config/nds32/isr-library/vec_vid08.S
! 4e6acdd1f3ded4bac4a89442a65c6dc4  libgcc/config/nds32/isr-library/vec_vid08_4b.S
! 1699b2e8721633cde53d6d2025d30726  libgcc/config/nds32/isr-library/vec_vid09.S
! d8fee436aa63052723620af181aed92a  libgcc/config/nds32/isr-library/vec_vid09_4b.S
! a85aaa2c10e59afa368ffc7f0f533a72  libgcc/config/nds32/isr-library/vec_vid10.S
! 55edf1f7b3b5cfa641d0a4334f6e4b5f  libgcc/config/nds32/isr-library/vec_vid10_4b.S
! 541dbf60c7b42c7c453a70afb2dbd7b5  libgcc/config/nds32/isr-library/vec_vid11.S
! 0c30cc7a5df232312fe0d059f9a7d631  libgcc/config/nds32/isr-library/vec_vid11_4b.S
! 99ae89aa6178d404786db98c0f1c7e99  libgcc/config/nds32/isr-library/vec_vid12.S
! 9584b21023323077494702f7d51cec36  libgcc/config/nds32/isr-library/vec_vid12_4b.S
! 1b65ad89744874b6bb9bbb679800bd89  libgcc/config/nds32/isr-library/vec_vid13.S
! 2669849d75fea5cbe28cb89cfa96ad10  libgcc/config/nds32/isr-library/vec_vid13_4b.S
! fb46206a233d4550afabd9cb74243e6b  libgcc/config/nds32/isr-library/vec_vid14.S
! 550e46de35c81c59812759a3abb5ddd1  libgcc/config/nds32/isr-library/vec_vid14_4b.S
! f5705dddca0f1e11c8941bdb81a53381  libgcc/config/nds32/isr-library/vec_vid15.S
! 882937bb5ef3de0541e38e31da066e52  libgcc/config/nds32/isr-library/vec_vid15_4b.S
! c9a79afa918284104ad0cfb89c413253  libgcc/config/nds32/isr-library/vec_vid16.S
! 1a08af0daa097614b4952ceb6b52cdf3  libgcc/config/nds32/isr-library/vec_vid16_4b.S
! 067cbe092b7e304a0f8882629c6ab251  libgcc/config/nds32/isr-library/vec_vid17.S
! dae2a98e930974fb3e2df8af10dc8e67  libgcc/config/nds32/isr-library/vec_vid17_4b.S
! cb9d710d76acffd69ba53118693df9a3  libgcc/config/nds32/isr-library/vec_vid18.S
! ce8a7d9a5906718fd809e98ed20ac734  libgcc/config/nds32/isr-library/vec_vid18_4b.S
! b2af67ec8699959093abdedeea5ab34e  libgcc/config/nds32/isr-library/vec_vid19.S
! 1701f4fdcc6ad4c3d1318c5c305321a8  libgcc/config/nds32/isr-library/vec_vid19_4b.S
! 28dcd82bfc3c3a38223de16973d0a6a5  libgcc/config/nds32/isr-library/vec_vid20.S
! afc30ddc13ad34a72f56103ad1759397  libgcc/config/nds32/isr-library/vec_vid20_4b.S
! c67069fef473702bdf9133837eb0c999  libgcc/config/nds32/isr-library/vec_vid21.S
! 3a24573896b6a37f4ad37167ef2ef2c5  libgcc/config/nds32/isr-library/vec_vid21_4b.S
! 38a5a71ad90a7257d399b2400bfc4409  libgcc/config/nds32/isr-library/vec_vid22.S
! c34e5052d7a877beef73321e6670ed53  libgcc/config/nds32/isr-library/vec_vid22_4b.S
! 4546d796b100ef91bedc14afe1a055c0  libgcc/config/nds32/isr-library/vec_vid23.S
! 62a130bda1d650b120df1c60532340c8  libgcc/config/nds32/isr-library/vec_vid23_4b.S
! 82c3eb687971f0c3e59c8f687ac2b23f  libgcc/config/nds32/isr-library/vec_vid24.S
! 1130cd5c6857eb4a98016cfc3decd420  libgcc/config/nds32/isr-library/vec_vid24_4b.S
! db2e4ae9f442f6bdc36eef6c8e651a1d  libgcc/config/nds32/isr-library/vec_vid25.S
! e3c71aabb10a4f3b5a2a8f4145066d8c  libgcc/config/nds32/isr-library/vec_vid25_4b.S
! 25adeb9eee6c7bacea5669f77e665860  libgcc/config/nds32/isr-library/vec_vid26.S
! 2adccc733b4c2bd0e36634737cd4729e  libgcc/config/nds32/isr-library/vec_vid26_4b.S
! dcf794e7f7d7544c31fae7d0004b75df  libgcc/config/nds32/isr-library/vec_vid27.S
! a03a56530dc58fb6eec66f20a74e1248  libgcc/config/nds32/isr-library/vec_vid27_4b.S
! b875b0cc2d114374221686d6591babb6  libgcc/config/nds32/isr-library/vec_vid28.S
! 477a94ad413eb454a3c0a0e87d2d2c72  libgcc/config/nds32/isr-library/vec_vid28_4b.S
! 8ab43c3bdd239593a46746cc9391b973  libgcc/config/nds32/isr-library/vec_vid29.S
! 400d13af4a0fc5ccdfdba59a6f2bc8d3  libgcc/config/nds32/isr-library/vec_vid29_4b.S
! 1b69431f5066d687f29af207901c2371  libgcc/config/nds32/isr-library/vec_vid30.S
! 2166dc321c7798b36d1741cb564a2590  libgcc/config/nds32/isr-library/vec_vid30_4b.S
! 0c4fc30a99c2e679f5978df11392eeaf  libgcc/config/nds32/isr-library/vec_vid31.S
! 6670dfadab03ab33ba33ae4f7c374c65  libgcc/config/nds32/isr-library/vec_vid31_4b.S
! 74663225912e85ce2303890c39052c6d  libgcc/config/nds32/isr-library/vec_vid32.S
! 66a485c553048b37c0e5717860cf76d6  libgcc/config/nds32/isr-library/vec_vid32_4b.S
! cb250621a36d1685a42aeef374ac655f  libgcc/config/nds32/isr-library/vec_vid33.S
! c3322f2a51a5605f0a37e28cc2d4f578  libgcc/config/nds32/isr-library/vec_vid33_4b.S
! 3f3a8ff7d0c41e2e37f2496b72d6448b  libgcc/config/nds32/isr-library/vec_vid34.S
! 6464e660e6108bf8d517e0c632acb33e  libgcc/config/nds32/isr-library/vec_vid34_4b.S
! c35eb9496330ede7ae14a1df5f7be824  libgcc/config/nds32/isr-library/vec_vid35.S
! 383f87da2b996d214b52630d8821bf28  libgcc/config/nds32/isr-library/vec_vid35_4b.S
! 8c113a0a71c559e56e3542457b6d63ee  libgcc/config/nds32/isr-library/vec_vid36.S
! e3cf4c5cf005138df1c8ec7baa0a93ae  libgcc/config/nds32/isr-library/vec_vid36_4b.S
! ae44851ea1e3335907472c4ffc36a200  libgcc/config/nds32/isr-library/vec_vid37.S
! d71f30d88433a2e5f8a210bc698ca7ba  libgcc/config/nds32/isr-library/vec_vid37_4b.S
! 1fa20103ca1772f29105fc7b6598f1a2  libgcc/config/nds32/isr-library/vec_vid38.S
! 388763b18fc2f3d210ba0ba729cd5666  libgcc/config/nds32/isr-library/vec_vid38_4b.S
! 1f17da99dac1b3ba43a4e872d075bde1  libgcc/config/nds32/isr-library/vec_vid39.S
! 67c2fb469e3d91bc3f1b998ed0d7b6d3  libgcc/config/nds32/isr-library/vec_vid39_4b.S
! dc974999a4125f6ddc1c200290e6e320  libgcc/config/nds32/isr-library/vec_vid40.S
! 54b3a849ddc1b91ddf8058c6c6ddaa69  libgcc/config/nds32/isr-library/vec_vid40_4b.S
! ca365981d13b18f385b082cf1e1b9ec4  libgcc/config/nds32/isr-library/vec_vid41.S
! e07819a1849e47b8c349d5c670ed81b0  libgcc/config/nds32/isr-library/vec_vid41_4b.S
! d94d4ceed51671617991eabae6d535bb  libgcc/config/nds32/isr-library/vec_vid42.S
! 38163878441dc225ee5d4223222dcd59  libgcc/config/nds32/isr-library/vec_vid42_4b.S
! 4f93ca372a26eb05ae1d94290be92f23  libgcc/config/nds32/isr-library/vec_vid43.S
! 6bba42a508c2441d8539c2ff00c36294  libgcc/config/nds32/isr-library/vec_vid43_4b.S
! 4c0211682566f9e5200348b98a2e6cff  libgcc/config/nds32/isr-library/vec_vid44.S
! dea4cae45dc98ca87076ddfa5cde4108  libgcc/config/nds32/isr-library/vec_vid44_4b.S
! 6bce06b99b44cb19e759f1656542f723  libgcc/config/nds32/isr-library/vec_vid45.S
! 413ed6b9ed403edf1751b4f04a3a72b7  libgcc/config/nds32/isr-library/vec_vid45_4b.S
! 193b4e476d4c02f99eb51d4a48ca67a2  libgcc/config/nds32/isr-library/vec_vid46.S
! d59ea7043b6271c3686739e590e06ea1  libgcc/config/nds32/isr-library/vec_vid46_4b.S
! 07ea1a6e8741b4e01b3d0160ed55a665  libgcc/config/nds32/isr-library/vec_vid47.S
! 9db9b416cbd727db17267b7746be5068  libgcc/config/nds32/isr-library/vec_vid47_4b.S
! 403ce63bd1ce3a6c4259f54f51c239e9  libgcc/config/nds32/isr-library/vec_vid48.S
! 7989556b1bfd46446643890953b919ad  libgcc/config/nds32/isr-library/vec_vid48_4b.S
! 53cc4cea4d7909d17349502ad49d4b07  libgcc/config/nds32/isr-library/vec_vid49.S
! 6a7265b1fd5538d62473f3851f45af5d  libgcc/config/nds32/isr-library/vec_vid49_4b.S
! 71cdf72f5f359bcdf6f1c5e490a3a914  libgcc/config/nds32/isr-library/vec_vid50.S
! cf382eb37fe71f78175d1df15af001d5  libgcc/config/nds32/isr-library/vec_vid50_4b.S
! 0197da907a0148e48a4c52caddb5c073  libgcc/config/nds32/isr-library/vec_vid51.S
! 9ca5d8a72cd3b3d6d0eb31daacbe9d91  libgcc/config/nds32/isr-library/vec_vid51_4b.S
! f055be0da7dfd42529e2955d53a14ae3  libgcc/config/nds32/isr-library/vec_vid52.S
! 4a2a7d783ad50ec35a0b29cfc2d5f734  libgcc/config/nds32/isr-library/vec_vid52_4b.S
! 2d3cf2f94166ef31d15de876a362d3ab  libgcc/config/nds32/isr-library/vec_vid53.S
! 6bb2a9fc3d1a573b9032466ebc5dc42b  libgcc/config/nds32/isr-library/vec_vid53_4b.S
! 39525f317ee1f4891a2396de8028bdec  libgcc/config/nds32/isr-library/vec_vid54.S
! fcdf8d82f5301bb33e7a7b311f0adef9  libgcc/config/nds32/isr-library/vec_vid54_4b.S
! 48596f5df5c7e10e94e251cdc2d90fea  libgcc/config/nds32/isr-library/vec_vid55.S
! bfd31a4e1459a097ec8307feac6d51b6  libgcc/config/nds32/isr-library/vec_vid55_4b.S
! e71460d591d45dbd465036479d035c0f  libgcc/config/nds32/isr-library/vec_vid56.S
! 931ac07139db3c5d02a9ca16c73381a5  libgcc/config/nds32/isr-library/vec_vid56_4b.S
! 2a9bd9af73e0818054e379d2c6b71ca9  libgcc/config/nds32/isr-library/vec_vid57.S
! 2a36a8508cbf7b4b120292dd5eb18ebe  libgcc/config/nds32/isr-library/vec_vid57_4b.S
! 24a2e78bc9ea173b94824b246934f80c  libgcc/config/nds32/isr-library/vec_vid58.S
! 654b7f58df2082eb55b5a78bf67aefdf  libgcc/config/nds32/isr-library/vec_vid58_4b.S
! ce1c2a7dd6fb5416422d2ba7f582a0d0  libgcc/config/nds32/isr-library/vec_vid59.S
! 3545c6fa7bb36774046592da501511eb  libgcc/config/nds32/isr-library/vec_vid59_4b.S
! c1a9b454197160e3d79adba35335caf8  libgcc/config/nds32/isr-library/vec_vid60.S
! d94186dea9391cd01fa222a5a0ed152a  libgcc/config/nds32/isr-library/vec_vid60_4b.S
! 42c96a087c1d3d5cd3542d9c408fa6d4  libgcc/config/nds32/isr-library/vec_vid61.S
! 2bd3ab15b97e06d5bd26aa9971d9f72a  libgcc/config/nds32/isr-library/vec_vid61_4b.S
! 667d7fc792391ddfad32c4de9e84237c  libgcc/config/nds32/isr-library/vec_vid62.S
! fb894d0b1dcb088769709af8c06905c3  libgcc/config/nds32/isr-library/vec_vid62_4b.S
! bda99061dd723dbafdf361aa66dda2bb  libgcc/config/nds32/isr-library/vec_vid63.S
! 86e979bd28ac7cf9e66a96d4a9ac9d4d  libgcc/config/nds32/isr-library/vec_vid63_4b.S
! 9e2550f1cee6299c52bba4b85aa2e3ba  libgcc/config/nds32/isr-library/vec_vid64.S
! 2f8ecee73e964c1e244f2d347c3547d5  libgcc/config/nds32/isr-library/vec_vid64_4b.S
! a7cee8f6c9eb6cd4d9997d8b9f87bbd4  libgcc/config/nds32/isr-library/vec_vid65.S
! 18cd50e774e2db4ae50b1c68dd77e6d3  libgcc/config/nds32/isr-library/vec_vid65_4b.S
! 42511fdc5cad629fef9579eb39a30598  libgcc/config/nds32/isr-library/vec_vid66.S
! c75bd6cf685a8ee587bc661707e704cc  libgcc/config/nds32/isr-library/vec_vid66_4b.S
! 9072ab4631ab9ac80fdbabb707d4b34f  libgcc/config/nds32/isr-library/vec_vid67.S
! 01bf1e1dbe0cb502754415958e82e1b4  libgcc/config/nds32/isr-library/vec_vid67_4b.S
! 38d57bed741272aabae2a0013a29f989  libgcc/config/nds32/isr-library/vec_vid68.S
! c406f8d89884ebf3b460d5f556f79303  libgcc/config/nds32/isr-library/vec_vid68_4b.S
! 8057a10b48734f6bb0dc384a26ad430c  libgcc/config/nds32/isr-library/vec_vid69.S
! 81bd0dbfbe46dbb20aea6783265ffd81  libgcc/config/nds32/isr-library/vec_vid69_4b.S
! 7a77132a509b73a46d01f5d509393865  libgcc/config/nds32/isr-library/vec_vid70.S
! 668fd881046176b47e775c64a7fa2c3b  libgcc/config/nds32/isr-library/vec_vid70_4b.S
! db25b51e03b1903f864c3b5d6624eaa3  libgcc/config/nds32/isr-library/vec_vid71.S
! 3a32af7055cef2da795247b985753c80  libgcc/config/nds32/isr-library/vec_vid71_4b.S
! 8d7e347665e1dc7f9c464a7e5f443662  libgcc/config/nds32/isr-library/vec_vid72.S
! 4f2ec6c89c3d792c0358c19adef0cea3  libgcc/config/nds32/isr-library/vec_vid72_4b.S
! 384a1fa5a0b402678c7cf9fa701add87  libgcc/config/nds32/isr-library/wrh.S
! 2d733f65d130b3a6dd6c6b0ee30e04ce  libgcc/config/nds32/lib1asmsrc-mculib.S
! 438ad4099fc96c4b309d1051916f0632  libgcc/config/nds32/lib1asmsrc-newlib.S
! 66ca8dcf30907c99c06a97437adde915  libgcc/config/nds32/lib2csrc-mculib/_clzdi2.c
! 84622d1518c726d6724fa00f0e68161a  libgcc/config/nds32/lib2csrc-mculib/_clzsi2.c
! 5f7ad529b8b246958412d37a044c1900  libgcc/config/nds32/linux-atomic.c
! 578e4b863eca6553719a6389cf26cc8b  libgcc/config/nds32/linux-unwind.h
! 505940e0a6c0ba59eb45627466ecc3cd  libgcc/config/nds32/sfp-machine.h
! 0962eba811da0b3dc6ae3397122b98e0  libgcc/config/nds32/t-nds32
! dc0f6634fdfc74b0879394ab2d63422c  libgcc/config/nds32/t-nds32-glibc
! 9e34c921ed164b893390ed025e1cfe01  libgcc/config/nds32/t-nds32-isr
! fd4c95595b9049b7ab95e518a1f61c3e  libgcc/config/nds32/t-nds32-mculib
! 4e1d5dd816b5abc0b99a3b11ed3c3793  libgcc/config/nds32/t-nds32-newlib
! 9e85924475333790571ad7a0cfec7432  libgcc/config/nios2/crti.S
! f892bc2595ff7c2bba0c9307c2770f96  libgcc/config/nios2/crtn.S
! 9e130c91728f5182f4876d4eac4533c5  libgcc/config/nios2/elf-lib.h
! b8757b31c7c7d41d05bebbf87a744aa6  libgcc/config/nios2/lib2-divmod-hi.c
! cf9b2be2d560c7c9787f6e925a6814a7  libgcc/config/nios2/lib2-divmod.c
! 1c32821455841c55d9688ef01c8a058e  libgcc/config/nios2/lib2-divtable.c
! c0c38a47d5dbe70191ec7df55bb99833  libgcc/config/nios2/lib2-mul.c
! 347e5841af8d46ddfef67fef0741e0f3  libgcc/config/nios2/lib2-nios2.h
! f85924ed156e8bac31fb014f2b9581ba  libgcc/config/nios2/linux-atomic.c
! 682c7b101c27d6ccf31a2dd47cac06b0  libgcc/config/nios2/linux-unwind.h
! 815c94e9e5a37d23ba032282c1dd83ab  libgcc/config/nios2/sfp-machine.h
  598bde069aeebadde9b08f8703ab2c77  libgcc/config/nios2/t-linux
  058cf7bee1e8fb40a62590a2558c7f76  libgcc/config/nios2/t-nios2
! a572dd65872e2bbaffac9f672732e90f  libgcc/config/nios2/tramp.c
  d554f3fc7ee3cecc697c448b8c5f61bb  libgcc/config/no-sfp-machine.h
  b70010a8e3a6734ae04ba484992563c5  libgcc/config/no-unwind.h
! 9aa78e1032299d25d9ae392490ea64e8  libgcc/config/nvptx/atomic.c
! 5ad92bfa8168068f288ca2d3ff1b6a3c  libgcc/config/nvptx/crt0.c
! 4966c0c59f2802351ee31435409eb28b  libgcc/config/nvptx/mgomp.c
! a750175c59166c61628803983455c86a  libgcc/config/nvptx/nvptx-malloc.h
! f4325c0af3770b874b5e81db6d21285e  libgcc/config/nvptx/reduction.c
  a2f0aaba262ea7568fe97072e2e4e19f  libgcc/config/nvptx/t-nvptx
! 2f03013f15f34d83b76f8a8d99ef6aab  libgcc/config/or1k/lib1funcs.S
! d3cf68ddf23f5c235f1f2d22e1b1db00  libgcc/config/or1k/linux-unwind.h
! ef77ed64db7b4b9f49ee2c897fe592a9  libgcc/config/or1k/sfp-machine.h
! dc51b5d6e7fd35fa1156670d20c6464d  libgcc/config/or1k/t-crtstuff
! 934e2227548b58f221acfa68bbbbb747  libgcc/config/or1k/t-or1k
! 3f6f4741c6729723f95a9c4e455a3eff  libgcc/config/pa/fptr.c
! 2022e7bb360e55d6e11203f66a3125b3  libgcc/config/pa/gthr-dce.h
! 098ecd3af287a571ff968a291d31e40f  libgcc/config/pa/hpux-unwind.h
! 17d503a63a8799df340c579f764318ce  libgcc/config/pa/lib2funcs.S
! 3e9d9825570372c6e12178b132839c15  libgcc/config/pa/linux-atomic.c
! 32332c3e0f7fd7ae8e5260d192d0713e  libgcc/config/pa/linux-unwind.h
! 21d330b345a11aef708cdaeb1dd9ad7a  libgcc/config/pa/milli64.S
! d9b594bffa97757e315b763704349bbf  libgcc/config/pa/pa64-hpux-lib.h
! d242841b0be7af80e89d024231e52792  libgcc/config/pa/quadlib.c
! d33015aa7c3d01a4093f5ee649d7e257  libgcc/config/pa/sfp-exceptions.c
! 1386c934940ea45aa6556d9b79b988aa  libgcc/config/pa/sfp-machine.h
! 3a5ad241a9349589e8ebe5e0ab4b0283  libgcc/config/pa/stublib.c
  be1d29d3044d55ee3e60d3e74a9e98fe  libgcc/config/pa/t-dimode
  8a3964d4f1eddb14d9260a0a72a23493  libgcc/config/pa/t-hpux
  73420715a92f162a61d33bbfbe7c4dee  libgcc/config/pa/t-hpux10
*************** be1d29d3044d55ee3e60d3e74a9e98fe  libgcc
*** 87885,88043 ****
  3a7526d23d38b3c358e838a89cf3ad94  libgcc/config/pa/t-openbsd
  4c55604fec5e632606f19c2f176f1a6c  libgcc/config/pa/t-pa64
  6b7616abedce76aaa866d73b08ea3a07  libgcc/config/pa/t-slibgcc-dwarf-ver
! bd9fe0848657120224cd1875ab81c2a3  libgcc/config/pa/t-slibgcc-hpux
  463a4121da251ad8e53013810a31914a  libgcc/config/pa/t-slibgcc-sjlj-ver
  ce4b287e3a507cf1707205fb5c6adfe3  libgcc/config/pa/t-softfp-sfdftf
  964be72d0cacc353ffda1509b63add90  libgcc/config/pa/t-stublib
  a2a61a2b6f3c9d3e3bd8cae0b0eb845b  libgcc/config/pdp11/t-pdp11
! 16bc2eb972c773a3c8d3ad6754359686  libgcc/config/pru/asri.c
! 02faa34c8a291d8082fb135d5fddc534  libgcc/config/pru/eqd.c
! 2f3d9f574572012e8a6f63127fe7a524  libgcc/config/pru/eqf.c
! c6b8dc1d4c9c6b6beb449bfc3684d801  libgcc/config/pru/ged.c
! 8af3a836c033ecded283ae4960313fd7  libgcc/config/pru/gef.c
! 55aee3307fdd11f24834cc9708af45ff  libgcc/config/pru/gtd.c
! 851f67cd2ceeb35f5feb20423ab8a8fe  libgcc/config/pru/gtf.c
! c60cc40c73da45f82b255bb231742e95  libgcc/config/pru/led.c
! 47ae1077ad419234eb5c744b37f00b7f  libgcc/config/pru/lef.c
! b0896b680af8871aa3f8055e976eb204  libgcc/config/pru/lib2bitcountHI.c
! 340ac3efa15fd44ed9c33de7ec2fecc7  libgcc/config/pru/lib2divHI.c
! 0573a2acc6953f98753c23aee3f29206  libgcc/config/pru/lib2divQI.c
! 0aecc2cc98bedd7f6d7767f0abe76a54  libgcc/config/pru/lib2divSI.c
! 42a4a8173cc9c3523305471d24830261  libgcc/config/pru/libgcc-eabi.ver
! ec35ce2bbda6827824ffc3c05009a4e8  libgcc/config/pru/ltd.c
! 0dd039e0004438db8b3afacdb2f9ad79  libgcc/config/pru/ltf.c
! 349b73cc9f9d84dedc96b1b43b4f39b6  libgcc/config/pru/mpyll.S
! 7aeabb0cb847ab15d8ffcc4511c6b624  libgcc/config/pru/pru-abi.h
! 308e0dde981c374f419bea7a2416dc33  libgcc/config/pru/pru-asm.h
! 80218936495d180ad5806af654ae69dd  libgcc/config/pru/pru-divmod.h
! 7c45f05f4c834b8709dc16b7756ae613  libgcc/config/pru/sfp-machine.h
! 7df37c758209eb36c234ae7080d60b69  libgcc/config/pru/t-pru
! 57eeca8e717772ac1d7810b93b905b24  libgcc/config/riscv/atomic.c
  d61879f5ed9372bd52bba7f21bb79dbc  libgcc/config/riscv/crti.S
  0485c6e233af87295472bb7a9f2767e0  libgcc/config/riscv/crtn.S
! 9e61d2c99d82eb62c3cd6f1ce53b1ca6  libgcc/config/riscv/div.S
! a40588694a84c949728cad9d80c882cc  libgcc/config/riscv/linux-unwind.h
! 55741074a83dcec597d24becf08808af  libgcc/config/riscv/muldi3.S
! 8bfa30c9ee049a0fd7f62d080f21f090  libgcc/config/riscv/multi3.c
! e130c43fe91a56eece3d7a0fe64afd9d  libgcc/config/riscv/riscv-asm.h
! fb435631050f85c4c37c35929ffe580e  libgcc/config/riscv/save-restore.S
! 1a3f0dc3144bd4d79e175d5e3c84c799  libgcc/config/riscv/sfp-machine.h
  c42f201dbf0dcdfa26d4e52583c32f53  libgcc/config/riscv/t-elf
  02fdd22ff5d39903f17ad235a8fe0f65  libgcc/config/riscv/t-elf32
  02fdd22ff5d39903f17ad235a8fe0f65  libgcc/config/riscv/t-elf64
  1f7860fd81aff60052a039b06a850a67  libgcc/config/riscv/t-softfp32
  e96d0afc94e59431832f4cff3a794bd8  libgcc/config/riscv/t-softfp64
! e4ea451be1a8f34096b64086b63c5f9f  libgcc/config/rl78/adddi3.S
! d885b0cd9a2b208ca9b87fac975c12bf  libgcc/config/rl78/anddi3.S
! bcded3fa4b8c3223ab57fbb7ff78341e  libgcc/config/rl78/bit-count.S
! 24fbb15811b6fcf36e251b0bee837dcf  libgcc/config/rl78/cmpsi2.S
! 12b3c68df3cec9b5bedfc304606eaa78  libgcc/config/rl78/divmodhi.S
! d345e0aeab6f547de70a0e0e525647aa  libgcc/config/rl78/divmodqi.S
! cc0e373f23d172213a5a8e8e04c954bf  libgcc/config/rl78/divmodsi.S
  63e9b57af30110b61c3221ba465e2c5b  libgcc/config/rl78/fpbit-sf.S
  9099dff71d89768f77ed3ef7908d4265  libgcc/config/rl78/fpmath-sf.S
! 362df0e3a8615ee0ccd830d37ba6ee64  libgcc/config/rl78/lib2div.c
! 22ac86771ad729a3fb9d8c1dd9f99f37  libgcc/config/rl78/lib2mul.c
! 6d72d92b81366bd466e0e4c67896201e  libgcc/config/rl78/lib2shift.c
! b1663407bd0465cc2c59903df8ec1b0f  libgcc/config/rl78/lshrsi3.S
! 344f40aa0f7a3248304f69c4b0546fb5  libgcc/config/rl78/mulsi3.S
! 40c2f682474da7dc0891bac92814b30a  libgcc/config/rl78/rl78-divmod.h
! 0c6aad26da1bbc2e81aa3a90af67b440  libgcc/config/rl78/rl78-mul.h
! e0e86681141eac28cde741aa997db111  libgcc/config/rl78/signbit.S
! bb3e5cbf06512776938a411dcbc69b07  libgcc/config/rl78/smaxdi3.S
! 9aa3583c4c5b13f0139fd0294b38d5bc  libgcc/config/rl78/smindi3.S
! b0c7843e9995325dddcbd2d8dc9d07c5  libgcc/config/rl78/subdi3.S
! fa87f5631665dfb19b22ce00cefa575b  libgcc/config/rl78/t-rl78
! ff438b218b166fecb413003761f2e5d7  libgcc/config/rl78/trampoline.S
! 6ced233b2fa8f5512137ff3b8d84c2fb  libgcc/config/rl78/umaxdi3.S
! dff551ddfd86e662bfc89e7000afac3c  libgcc/config/rl78/umindi3.S
  760912f22e59adbfe0317ee3df1b4849  libgcc/config/rl78/vregs.h
! ce86bc2998d12940d55472b396ad21b6  libgcc/config/rs6000/_dd_to_kf.c
! d24cf435c2555082ab6069e0ef958fc5  libgcc/config/rs6000/_divkc3.c
! f7082ba4dad8776742ae5740fc050d1d  libgcc/config/rs6000/_kf_to_dd.c
! e19f27032f2eda0ab0b748a5245f8ca9  libgcc/config/rs6000/_kf_to_sd.c
! 855da2e76ecb1cbff7cc2aa9725a8341  libgcc/config/rs6000/_kf_to_td.c
! 4bd3007ff561c51112e07e242156c5c6  libgcc/config/rs6000/_mulkc3.c
! a06a51d77575e5c2f566830b1e78182e  libgcc/config/rs6000/_powikf2.c
! 976302bb93b29cf49e6568390e17cd42  libgcc/config/rs6000/_sd_to_kf.c
! bd84223cf6456f43ca90c0f7ba48775f  libgcc/config/rs6000/_td_to_kf.c
! 06420ab7fae01b2a0f624c893525e75d  libgcc/config/rs6000/aix-unwind.h
  737841f917469789a5f925e6f08da1de  libgcc/config/rs6000/aixinitfini.c
! 574ad842b79f8d411c428fbf0f85b976  libgcc/config/rs6000/atexit.c
! 43f04a56823b828abb6ad9fb97dd5b47  libgcc/config/rs6000/crtcxa.c
! ab91f0ebe4e2ea7af49e57ddfc21a956  libgcc/config/rs6000/crtdbase.S
! cdec115c0b93a6e58b416b76153d6fd2  libgcc/config/rs6000/crtresfpr.S
! 7762338b27449bc6caeccc37d74f6284  libgcc/config/rs6000/crtresgpr.S
! 85d5acb6292050366d3978a0e1ebff3e  libgcc/config/rs6000/crtrestvr.S
! 96e931828af6738b0d512f4c85833a6c  libgcc/config/rs6000/crtresxfpr.S
! e71e94d1f7e88dd56bc0e0003d97e2db  libgcc/config/rs6000/crtresxgpr.S
! ed6e1f9a7bdce60ac6444316b2f9ed55  libgcc/config/rs6000/crtsavevr.S
! 06706719d55e75ecbd89186ffdfe0c2d  libgcc/config/rs6000/crtsavfpr.S
! 3d273aa109dd8b0cbc70dafc3447a988  libgcc/config/rs6000/crtsavgpr.S
! d188d7c4b7c90f52039bbe08a50cb06e  libgcc/config/rs6000/cxa_atexit.c
! 0dd909490ca2a1f12c7044dabd6dac2b  libgcc/config/rs6000/cxa_finalize.c
! 5fc9e83c6c114c23253e08ec83529dc6  libgcc/config/rs6000/darwin-asm.h
! d5b60bcd0b5d4c8a3349e4ff63184384  libgcc/config/rs6000/darwin-crt2.c
! d1496754c398699ae5642c621b70e3a8  libgcc/config/rs6000/darwin-fallback.c
! 360e6a357a8ba9fa22c6a646b9f1c92f  libgcc/config/rs6000/darwin-fpsave.S
! 89e0442bcc9488dd7519b41a33939ca2  libgcc/config/rs6000/darwin-gpsave.S
! 3d08c39761aa440d1f8e40aea0f551a6  libgcc/config/rs6000/darwin-tramp.S
! 043dee55b769ce7c9edd472bba05e727  libgcc/config/rs6000/darwin-unwind.h
! a1196477a71bf991d0281117a6271a26  libgcc/config/rs6000/darwin-vecsave.S
! 1546ae2396778ca2dfcf90348833df6b  libgcc/config/rs6000/darwin-world.S
! 32c1c0146c24d8c2139a3072c7bf4cda  libgcc/config/rs6000/e500crtres32gpr.S
! c213f0a29ca099361dbd05cefa36e41d  libgcc/config/rs6000/e500crtres64gpr.S
! 9d6947355fd502cc811c2d03b8134ea9  libgcc/config/rs6000/e500crtres64gprctr.S
! 3e1e46b41fcc98c0d704a0cd1f154c1b  libgcc/config/rs6000/e500crtrest32gpr.S
! 3adcdb4e98b1e525449ab4eaaddb3289  libgcc/config/rs6000/e500crtrest64gpr.S
! 0e27962b71045b826e26a63e9a77aeef  libgcc/config/rs6000/e500crtresx32gpr.S
! a6a46c82f5c6ebc430f4fca0a22f81ab  libgcc/config/rs6000/e500crtresx64gpr.S
! fddeef3a2fab788782651cde9e82f350  libgcc/config/rs6000/e500crtsav32gpr.S
! 5da4593c344861549ae679d1c9db2b3d  libgcc/config/rs6000/e500crtsav64gpr.S
! 3e7d338b0442bfd41889c826d250117f  libgcc/config/rs6000/e500crtsav64gprctr.S
! b16a90cf85f8a39271de9f4b946f5676  libgcc/config/rs6000/e500crtsavg32gpr.S
! a55595bde7fc7cd55902e06c54cb41be  libgcc/config/rs6000/e500crtsavg64gpr.S
! b450330899c6e24cd691150226c072f1  libgcc/config/rs6000/e500crtsavg64gprctr.S
! 1688196394ee035372ce84d059d823f0  libgcc/config/rs6000/eabi-ci.S
! 4a0765300df49a2b1ceea4f8c6856bd5  libgcc/config/rs6000/eabi-cn.S
! 82fd725508a6896eaa6ba33811fde19d  libgcc/config/rs6000/eabi.S
! 2908be3e778544e8886ecac6076391a2  libgcc/config/rs6000/exit.h
! f777a591d2910433fd27e9f637d106f0  libgcc/config/rs6000/extendkftf2-sw.c
! bd9372dd8e5536f4b15d2d830833ece0  libgcc/config/rs6000/fixkfti-sw.c
! fc37e18510d1b9a68e6ff1f908b58a23  libgcc/config/rs6000/fixunskfti-sw.c
! e5dc92868194419efbeccf574dd92a88  libgcc/config/rs6000/float128-hw.c
! ceec4453dfe7b3a779a2b1814cc33645  libgcc/config/rs6000/float128-ifunc.c
! 2fd9cb721c73f799d7cbcc1f76fa0f6f  libgcc/config/rs6000/float128-p10.c
  82156c171c8648f2863486505efc417a  libgcc/config/rs6000/float128-sed
  81d8bfdd9028f651e74357a59a1352c5  libgcc/config/rs6000/float128-sed-hw
! 4ec2f343ef51aa95b98ebc167340ee17  libgcc/config/rs6000/floattikf-sw.c
! ee7cdc9a0763b371273ef0dff36c2403  libgcc/config/rs6000/floatuntikf-sw.c
! da4834ebce5a6c26f26a7c213704493b  libgcc/config/rs6000/freebsd-unwind.h
! 62e0c75a7f98be33cf79050869b1d97a  libgcc/config/rs6000/gthr-aix.h
! c64f972d8d826ca87b2b4bfa0194b52c  libgcc/config/rs6000/ibm-ldouble-format
! 94ec58b1250e245aaa0d01eb1e72cb8a  libgcc/config/rs6000/ibm-ldouble.c
  13bc252ed5254cf124822256760c6df0  libgcc/config/rs6000/libgcc-aix-cxa.ver
! e6f581502a95454aac51fc58de92ba4b  libgcc/config/rs6000/libgcc-glibc.ver
  7aa6f4e782960be3e2b43998ef395330  libgcc/config/rs6000/libgcc-ibm-ldouble.ver
! bcdb179fc7c4ebd3795034bfcf3aa835  libgcc/config/rs6000/linux-unwind.h
! 1a3dc363e889a16f2dd7df47b06403ce  libgcc/config/rs6000/morestack.S
! b1097f91f0259f8e40df0d4c5048a342  libgcc/config/rs6000/on_exit.c
! de5d23d0a0f526e3be4c97b6b326d71a  libgcc/config/rs6000/quad-float128.h
! 351bded3f7805a270b302c24435d2417  libgcc/config/rs6000/sfp-exceptions.c
  41c3896f925900fa6b81c0215a60075f  libgcc/config/rs6000/sfp-machine.h
! f91deeea850ca47563c4cc44755a0671  libgcc/config/rs6000/sol-ci.S
! aaa842a435553d5edd10b55f97334012  libgcc/config/rs6000/sol-cn.S
  3fa6bf8673b3a7fa2278aeb2fe1824f4  libgcc/config/rs6000/t-aix-cxa
  0d6637a7e112c021e7ce371918c7659c  libgcc/config/rs6000/t-crtstuff
  b780b81d7bccdf7af090dbcd3e639dd1  libgcc/config/rs6000/t-darwin
  a8ea28c94f3264c3602a98b4728fed82  libgcc/config/rs6000/t-darwin-ehs
  a0014912b4b08cfbe887d9945460e370  libgcc/config/rs6000/t-darwin64
! a8d6ad9840390eea8e954fb4736e88ff  libgcc/config/rs6000/t-e500v1-fp
! 5679524aee4f23d17957328c5b4336bd  libgcc/config/rs6000/t-e500v2-fp
  d5fb4aa675487367c8320cc2a6b80485  libgcc/config/rs6000/t-float128
  ea267a427a7598d5070e338c8995363d  libgcc/config/rs6000/t-float128-hw
  0c3cb3b39ba2a4a769c8467eba008f64  libgcc/config/rs6000/t-float128-p10-hw
! 143db6bdc0885492dafd80b1c1b96795  libgcc/config/rs6000/t-freebsd
  4976aac1da0b181cf133fe8ef7243000  libgcc/config/rs6000/t-freebsd64
  565e9d6288ad496063af26b57e5fa264  libgcc/config/rs6000/t-ibm-ldouble
  ecf2c7e327e9df4e94343352b59b9fd2  libgcc/config/rs6000/t-linux
--- 93426,93584 ----
  3a7526d23d38b3c358e838a89cf3ad94  libgcc/config/pa/t-openbsd
  4c55604fec5e632606f19c2f176f1a6c  libgcc/config/pa/t-pa64
  6b7616abedce76aaa866d73b08ea3a07  libgcc/config/pa/t-slibgcc-dwarf-ver
! a68e867d82ee25c5391202ac89bae365  libgcc/config/pa/t-slibgcc-hpux
  463a4121da251ad8e53013810a31914a  libgcc/config/pa/t-slibgcc-sjlj-ver
  ce4b287e3a507cf1707205fb5c6adfe3  libgcc/config/pa/t-softfp-sfdftf
  964be72d0cacc353ffda1509b63add90  libgcc/config/pa/t-stublib
  a2a61a2b6f3c9d3e3bd8cae0b0eb845b  libgcc/config/pdp11/t-pdp11
! 6afbc568efe83b476f646e7bef5b92d2  libgcc/config/pru/asri.c
! 505d6299161789c780bb622df16a44af  libgcc/config/pru/eqd.c
! 13330cdfbb399b7740d297d4304b1339  libgcc/config/pru/eqf.c
! 764e7aa679b1a7aac975f16627fbd9df  libgcc/config/pru/ged.c
! b4a8646976d6c3a1e94eedb8c0ff89a4  libgcc/config/pru/gef.c
! d702eda746575681f3012367815dfe93  libgcc/config/pru/gtd.c
! 65ac40dead20dca4b5f2759e02e8bf1e  libgcc/config/pru/gtf.c
! d65b19868de05dfca0a8609ca0ecd4b4  libgcc/config/pru/led.c
! 1359e8ffbeb474e912d743d097ba93f6  libgcc/config/pru/lef.c
! eb585d1d2b6787cec12e4fc45ea0ebba  libgcc/config/pru/lib2bitcountHI.c
! 3816530fb9ce916d1bb28dc9db7f5890  libgcc/config/pru/lib2divHI.c
! cbc33a035d8fa84bff765c17167aa02f  libgcc/config/pru/lib2divQI.c
! 88b35ff67cf132aeaf2ad16b0c73e36b  libgcc/config/pru/lib2divSI.c
! aeb060ec3d4b04e7c435e5ccf99e3ce1  libgcc/config/pru/libgcc-eabi.ver
! 5f9f4b6025133c16fba338d8b3f9544f  libgcc/config/pru/ltd.c
! 7d5ace9f7ad3ebf038bde8e4d22e6f8f  libgcc/config/pru/ltf.c
! 19875b4795055ed0130b22d8dca9cc8f  libgcc/config/pru/mpyll.S
! 8d7639ffa8360cb3a5c4bb73320d7478  libgcc/config/pru/pru-abi.h
! 805b63a320e9ea780cef3ac75383d7bf  libgcc/config/pru/pru-asm.h
! 63b1f81c43109bb4c39fd934560c9a85  libgcc/config/pru/pru-divmod.h
! 7452d5d7346731fc1626ba84109e3876  libgcc/config/pru/sfp-machine.h
! eab1e83d49cc06a4057fdeca016d6342  libgcc/config/pru/t-pru
! 74d61776f036a9754887c79f2adbe51d  libgcc/config/riscv/atomic.c
  d61879f5ed9372bd52bba7f21bb79dbc  libgcc/config/riscv/crti.S
  0485c6e233af87295472bb7a9f2767e0  libgcc/config/riscv/crtn.S
! aabdfb47c5aaf2010a2df101b57785e8  libgcc/config/riscv/div.S
! 9a43ee8758841c387dfb928d6a61dd05  libgcc/config/riscv/linux-unwind.h
! 4fb1711a269e925a0f5403ed8ee46379  libgcc/config/riscv/muldi3.S
! 67df5a16ddcae6efc751c32f9718809d  libgcc/config/riscv/multi3.c
! b0c45c1aa3b0b1b655324caa5b391fe9  libgcc/config/riscv/riscv-asm.h
! 5573105f1b62079e5d9c0e3fce52e4e6  libgcc/config/riscv/save-restore.S
! 244a8148f2af30d9ce418b282fb627b0  libgcc/config/riscv/sfp-machine.h
  c42f201dbf0dcdfa26d4e52583c32f53  libgcc/config/riscv/t-elf
  02fdd22ff5d39903f17ad235a8fe0f65  libgcc/config/riscv/t-elf32
  02fdd22ff5d39903f17ad235a8fe0f65  libgcc/config/riscv/t-elf64
  1f7860fd81aff60052a039b06a850a67  libgcc/config/riscv/t-softfp32
  e96d0afc94e59431832f4cff3a794bd8  libgcc/config/riscv/t-softfp64
! a4d2bb4c38a5882304d8fe41b626a6fe  libgcc/config/rl78/adddi3.S
! d93546f0bbcc68e577a45bf4c1bd8deb  libgcc/config/rl78/anddi3.S
! 6fec750b254a2c08a12386274c4e67be  libgcc/config/rl78/bit-count.S
! f6696e942ddd57f4c80a482c2846d855  libgcc/config/rl78/cmpsi2.S
! 4dea5df09cbc13232feb379d6d1a28f6  libgcc/config/rl78/divmodhi.S
! 264e59c79265593fe53a096b919baa52  libgcc/config/rl78/divmodqi.S
! b530dc2e86a7deaf4541bf23dd9bc860  libgcc/config/rl78/divmodsi.S
  63e9b57af30110b61c3221ba465e2c5b  libgcc/config/rl78/fpbit-sf.S
  9099dff71d89768f77ed3ef7908d4265  libgcc/config/rl78/fpmath-sf.S
! 45d519bb03b87c3e0018d65b70b583c4  libgcc/config/rl78/lib2div.c
! dea1c308934fc0167e5b263d0dd84840  libgcc/config/rl78/lib2mul.c
! 6154cf4a0495824d405582ac662e0563  libgcc/config/rl78/lib2shift.c
! 4e52940630471aba92d817a4cb890030  libgcc/config/rl78/lshrsi3.S
! 18c767e27298455179a24d4479816ac9  libgcc/config/rl78/mulsi3.S
! 49667d0af4ad34835783c18e14b0c344  libgcc/config/rl78/rl78-divmod.h
! 7691258dfa14a2a06aa84effc77a3b15  libgcc/config/rl78/rl78-mul.h
! 805b310ad058cb303b25247a0278c401  libgcc/config/rl78/signbit.S
! a2cee0b961059afde2d3c49d5914b0e7  libgcc/config/rl78/smaxdi3.S
! 9748006459a4be0538ed40cfecf29084  libgcc/config/rl78/smindi3.S
! fc05e9040c8953033cbb3da864c61b8e  libgcc/config/rl78/subdi3.S
! e375fc3cbbc950fab1ce66ce4425e594  libgcc/config/rl78/t-rl78
! 6093aae18114af64b4a9cc3373045b7f  libgcc/config/rl78/trampoline.S
! c9ecf832f1c456790d5392a8ec008354  libgcc/config/rl78/umaxdi3.S
! bacf82e465e9a30fffe79c290f771269  libgcc/config/rl78/umindi3.S
  760912f22e59adbfe0317ee3df1b4849  libgcc/config/rl78/vregs.h
! 6081965dec7b4e8d1e4000a2a5ee4615  libgcc/config/rs6000/_dd_to_kf.c
! d85b7fcbe7a1f7f51e507b1818922f90  libgcc/config/rs6000/_divkc3.c
! d9a4a1164b94ef1eaedb4e4a4a189f89  libgcc/config/rs6000/_kf_to_dd.c
! 35240812d9d28fbeb29d323e3098bb36  libgcc/config/rs6000/_kf_to_sd.c
! 33150a9fb048d6ef6a812144fea11bba  libgcc/config/rs6000/_kf_to_td.c
! dfbd191f9cb249ebd0928b9e9f722fd6  libgcc/config/rs6000/_mulkc3.c
! fabbb3d714b91665156ad43bddc0ed19  libgcc/config/rs6000/_powikf2.c
! f2f16f9d9b3f04f36389a3e9ca428027  libgcc/config/rs6000/_sd_to_kf.c
! a57394ee35852aab2595eebc60ded9c1  libgcc/config/rs6000/_td_to_kf.c
! cd9d0d80c885d0a42bec78786547b05f  libgcc/config/rs6000/aix-unwind.h
  737841f917469789a5f925e6f08da1de  libgcc/config/rs6000/aixinitfini.c
! c5acc069fe69642abd5ed0fe9789b99e  libgcc/config/rs6000/atexit.c
! 75dd48c81c0cb4c7a97dad8116b3d4a8  libgcc/config/rs6000/crtcxa.c
! 68eebc9aa60a661c370ab520454c08da  libgcc/config/rs6000/crtdbase.S
! ca42109be008af6b858e9f6b901bb4c4  libgcc/config/rs6000/crtresfpr.S
! b348c6f15a996208246b02ba825f92e9  libgcc/config/rs6000/crtresgpr.S
! 50f72722327cad3781d3dfa3e2bf1c7c  libgcc/config/rs6000/crtrestvr.S
! 544dcb6c9efcd274052e2f38e583d14c  libgcc/config/rs6000/crtresxfpr.S
! 99c0ec086d7dbdf60831c7934da323d0  libgcc/config/rs6000/crtresxgpr.S
! 393db6af573ba615211e9e75bfce8d91  libgcc/config/rs6000/crtsavevr.S
! b9e068f03be2dbc7f9ccd33d7316f126  libgcc/config/rs6000/crtsavfpr.S
! 09e1ac483c8b6ff5e6b1beedb730d8b4  libgcc/config/rs6000/crtsavgpr.S
! 2a5f51b038758536e15d2ac8bbb73534  libgcc/config/rs6000/cxa_atexit.c
! 3ed20a1aeca01a03a3717da9ef7206b0  libgcc/config/rs6000/cxa_finalize.c
! 33a67c7013605c2c014a2912bfb7c864  libgcc/config/rs6000/darwin-asm.h
! 50f79d685421ca170486402028cccf9b  libgcc/config/rs6000/darwin-crt2.c
! 5d91a4f6f11e24e3ba5d4d09881c3089  libgcc/config/rs6000/darwin-fallback.c
! 32ba1f4a20ec57d3bdd01fe4dc25a4b5  libgcc/config/rs6000/darwin-fpsave.S
! 6ca0fe3df0f92b2fd66d74b894ea7443  libgcc/config/rs6000/darwin-gpsave.S
! e4784d8ceabc6adf2d8c33cacaab4a61  libgcc/config/rs6000/darwin-tramp.S
! 2941684b2faadeee97a6242b3cb6873f  libgcc/config/rs6000/darwin-unwind.h
! d0067727586ec50ac090b006e85c22ae  libgcc/config/rs6000/darwin-vecsave.S
! d57dc39d30a294924865990fed7e341c  libgcc/config/rs6000/darwin-world.S
! 2b9456c6cc7ff4ed587c2c273b44a0c3  libgcc/config/rs6000/e500crtres32gpr.S
! d2808b01c435359c9d247c7237bb2075  libgcc/config/rs6000/e500crtres64gpr.S
! 0991e1e95bad95f0825b98b8841efd9d  libgcc/config/rs6000/e500crtres64gprctr.S
! ea0ef09f18c0106bd4e249a4b748c560  libgcc/config/rs6000/e500crtrest32gpr.S
! ecddd20ac8f42df74191c3fa49dcdabe  libgcc/config/rs6000/e500crtrest64gpr.S
! fac274e84c46602b65a817e554141aa3  libgcc/config/rs6000/e500crtresx32gpr.S
! 94c1666cacf424498a44bdd59b6c668b  libgcc/config/rs6000/e500crtresx64gpr.S
! f0ba8ec652d01ed03cb20f66e18b5b46  libgcc/config/rs6000/e500crtsav32gpr.S
! 554faa9899f42031125484ae34ac0dab  libgcc/config/rs6000/e500crtsav64gpr.S
! db84a72852471ca78a97a94f5d68c4ba  libgcc/config/rs6000/e500crtsav64gprctr.S
! ed1b9550bc99affd2c4fe6f23a6e9fd9  libgcc/config/rs6000/e500crtsavg32gpr.S
! b8a34dc427ea433a03b8d43c266515f9  libgcc/config/rs6000/e500crtsavg64gpr.S
! 3d07244bff4150886b663e90412544df  libgcc/config/rs6000/e500crtsavg64gprctr.S
! 1efda17413c1424b74d7058e043c4c3d  libgcc/config/rs6000/eabi-ci.S
! bb239a155f84798e53dfbfc116d75d07  libgcc/config/rs6000/eabi-cn.S
! 279cd6b3c3282b466716a7e872cb398a  libgcc/config/rs6000/eabi.S
! c084326414591cbcb3d9c71af77ac7e0  libgcc/config/rs6000/exit.h
! e2140e6dffedac319aa1533785d1849f  libgcc/config/rs6000/extendkftf2-sw.c
! 788bf91bf61da130fb060fc79a687f84  libgcc/config/rs6000/fixkfti-sw.c
! 4d132ce456956b39dd8c488082b4547b  libgcc/config/rs6000/fixunskfti-sw.c
! 8e905cb054974c22ef2386a41aaebbed  libgcc/config/rs6000/float128-hw.c
! 562817f97650e041598d1a14286a8cd7  libgcc/config/rs6000/float128-ifunc.c
! 9e2efed535800a24dd8bba94ddebbd8f  libgcc/config/rs6000/float128-p10.c
  82156c171c8648f2863486505efc417a  libgcc/config/rs6000/float128-sed
  81d8bfdd9028f651e74357a59a1352c5  libgcc/config/rs6000/float128-sed-hw
! 4a0629f9d99d0ffc369702e52649795d  libgcc/config/rs6000/floattikf-sw.c
! 60a7fba690d1b51f3b153092503f285b  libgcc/config/rs6000/floatuntikf-sw.c
! 5f2bd1d083d6fe614c7ef1044564ad26  libgcc/config/rs6000/freebsd-unwind.h
! 0822c174de5f2495b53f1cadfd5236bf  libgcc/config/rs6000/gthr-aix.h
! 4a3f2ff8c67af07a1210b145a9fcc919  libgcc/config/rs6000/ibm-ldouble-format
! 309bf4aa8e9ba9d6c1a882d623388395  libgcc/config/rs6000/ibm-ldouble.c
  13bc252ed5254cf124822256760c6df0  libgcc/config/rs6000/libgcc-aix-cxa.ver
! 931f920e94caa6364804e8e9bbcc7dc3  libgcc/config/rs6000/libgcc-glibc.ver
  7aa6f4e782960be3e2b43998ef395330  libgcc/config/rs6000/libgcc-ibm-ldouble.ver
! c5392ee4ac15a16b8d344af72af9d398  libgcc/config/rs6000/linux-unwind.h
! bed5d13ffe7cbcacf13e112e0b97de39  libgcc/config/rs6000/morestack.S
! 1b5e6f8b646cdd42695e27bf47b8240c  libgcc/config/rs6000/on_exit.c
! ef5f555272a97762f8c82ca5ded1309b  libgcc/config/rs6000/quad-float128.h
! 9b49c454051308bc097b8e93d7d57a92  libgcc/config/rs6000/sfp-exceptions.c
  41c3896f925900fa6b81c0215a60075f  libgcc/config/rs6000/sfp-machine.h
! 6669eab9501dd234b183d2ae10916945  libgcc/config/rs6000/sol-ci.S
! 4ff53a9503f56f5d317b07553260d3a7  libgcc/config/rs6000/sol-cn.S
  3fa6bf8673b3a7fa2278aeb2fe1824f4  libgcc/config/rs6000/t-aix-cxa
  0d6637a7e112c021e7ce371918c7659c  libgcc/config/rs6000/t-crtstuff
  b780b81d7bccdf7af090dbcd3e639dd1  libgcc/config/rs6000/t-darwin
  a8ea28c94f3264c3602a98b4728fed82  libgcc/config/rs6000/t-darwin-ehs
  a0014912b4b08cfbe887d9945460e370  libgcc/config/rs6000/t-darwin64
! 0a9cfdafc9d4256f7917796fac8dd8a1  libgcc/config/rs6000/t-e500v1-fp
! e6e7a64e55d9d5f2efbd9cafd5bf111d  libgcc/config/rs6000/t-e500v2-fp
  d5fb4aa675487367c8320cc2a6b80485  libgcc/config/rs6000/t-float128
  ea267a427a7598d5070e338c8995363d  libgcc/config/rs6000/t-float128-hw
  0c3cb3b39ba2a4a769c8467eba008f64  libgcc/config/rs6000/t-float128-p10-hw
! 8e5c0e50d7a1bba1459ed238ee29a386  libgcc/config/rs6000/t-freebsd
  4976aac1da0b181cf133fe8ef7243000  libgcc/config/rs6000/t-freebsd64
  565e9d6288ad496063af26b57e5fa264  libgcc/config/rs6000/t-ibm-ldouble
  ecf2c7e327e9df4e94343352b59b9fd2  libgcc/config/rs6000/t-linux
*************** ad6ae6684d4dec9ddd78efad67d1af4b  libgcc
*** 88046,88106 ****
  a0014912b4b08cfbe887d9945460e370  libgcc/config/rs6000/t-ppc64-fp
  bd7ceb31787a37d9cb144c41d41acfb3  libgcc/config/rs6000/t-ppccomm
  89dc5367808582c503f03a34193e467b  libgcc/config/rs6000/t-savresfgpr
! c75c5effc5cd7a76699e9943b8091e5d  libgcc/config/rs6000/t-slibgcc-aix
  1d9dab8390b84ff0de504beefb72ce61  libgcc/config/rs6000/t-stack-rs6000
! d17db227309b0b939813a75a8b774537  libgcc/config/rs6000/tramp.S
! de65c85826f5a7784b045224e5bc84f5  libgcc/config/rs6000/trunctfkf2-sw.c
! 01c5eab8d812eeb06c203242480cc096  libgcc/config/rx/rx-abi-functions.c
! 2e8fe0faed7e6a917f13be140b6a0bba  libgcc/config/rx/rx-abi.h
  da7bc70013c60be91cf9f085fed52f1a  libgcc/config/rx/rx-lib.h
! 443eaaa66e0fd3f747bbc724143582e2  libgcc/config/rx/t-rx
! 11a32fe2e525e9bf335d5dff0052af57  libgcc/config/s390/32/_fixdfdi.c
! 508ac916a9af9fdcdd8658b8bc060edf  libgcc/config/s390/32/_fixsfdi.c
! eadd1e48f3ea5c382561c5a9f692e13e  libgcc/config/s390/32/_fixtfdi.c
! e7d0d1c7b967e52ea0635e26ccc13e2e  libgcc/config/s390/32/_fixunsdfdi.c
! bb39b6199dbd5d35299f2329e1e4baed  libgcc/config/s390/32/_fixunssfdi.c
! 928d2fe11de7cc1a7401ec87a737bf7f  libgcc/config/s390/32/_fixunstfdi.c
  6101649604e2b3fdd6179e1aa53066bf  libgcc/config/s390/32/t-floattodi
! d25717099be4e7eb156ab382cd3e02e8  libgcc/config/s390/gthr-tpf.h
! de25a44cfed734f64bbc10736a26c499  libgcc/config/s390/libgcc-glibc.ver
! 80bbea6f52983bfd78fcf2dcc1da108d  libgcc/config/s390/linux-unwind.h
! 522e6aa11521990091736c08d428437a  libgcc/config/s390/morestack.S
  c150e28c734710584eba8e77d2ff5105  libgcc/config/s390/t-crtstuff
  35a77f8c50ecf16802e00e647ad94026  libgcc/config/s390/t-linux
  26d353eea9229af01124cc46b2e0cebd  libgcc/config/s390/t-stack-s390
  a5218871642ae69c55b0e826c41f3798  libgcc/config/s390/t-tpf
! 2281740894a16919da6479d7154ece71  libgcc/config/s390/tpf-unwind.h
! c02fb109f0bbfc6ca905ddd0464d01ed  libgcc/config/score/crti.S
! d9ec990b74b11250bf09f6cc48d6b8c9  libgcc/config/score/crtn.S
  5d570ff5cd40fc6fba8876bdebd59a6b  libgcc/config/score/sfp-machine.h
! c1f8a0e89ee1f61afad7fbdf2a076b2d  libgcc/config/sh/crt.h
! 66254931a668431a15fb2641373c6a39  libgcc/config/sh/crt1.S
! c036eb8a868884dc335ea8118ab5b441  libgcc/config/sh/crti.S
! 3da4ef657bb384731d57f23b4483c5b1  libgcc/config/sh/crtn.S
! ad30323d4da708c5a2a88e3af4675e83  libgcc/config/sh/lib1funcs-4-300.S
! e149abb372f6039bc007bf6a3b8e6480  libgcc/config/sh/lib1funcs-Os-4-200.S
! 66ac293f478b9e0a220e14ef54386a6d  libgcc/config/sh/lib1funcs.S
! 6f65afc205edae910d6c40b5dc98b5ac  libgcc/config/sh/lib1funcs.h
  68ddef94ef228a2e500c6f84ca5c5f73  libgcc/config/sh/libgcc-excl.ver
! 0475134b29a371e3ac11de522c13adab  libgcc/config/sh/libgcc-glibc.ver
! e2de498591422d4989d428d6debac2cc  libgcc/config/sh/linux-atomic.c
! 31667c7cf602e7e06b34e82bf1e0cb3f  libgcc/config/sh/linux-unwind.h
  d915cb58faa1ad2108733b662853057e  libgcc/config/sh/t-linux
  be1b06de574a22c34d2cf93d2d68a4f1  libgcc/config/sh/t-netbsd
! 4a20b99ad5e135bf16706b13767b10cc  libgcc/config/sh/t-sh
  00d4a30e4ed4a68cd6ec53feb398914b  libgcc/config/sh/t-superh
! 4770161c4f95aaf93fd3ebf2642ed648  libgcc/config/sol2/crtp.c
! 331bc0fef7c869253446fbc04fc27f47  libgcc/config/sol2/crtpg.c
  5e87cfc189f02028b142950527a73c54  libgcc/config/sol2/gmon.c
! 291f01920dfb457c89fb3a4ed341d697  libgcc/config/sol2/t-sol2
! a07e427603bc6883dd9ea8f7d071c3e0  libgcc/config/sparc/crtfastmath.c
! 0136ada80bdc05cfb49b40633a747a26  libgcc/config/sparc/crti.S
! 09613b64e61bd366472d395c87461ee5  libgcc/config/sparc/crtn.S
  b2a26791cd6002e4af29a7fa32510b3b  libgcc/config/sparc/lb1spc.S
! eda5c7917f546e67b9eed33c6f70297c  libgcc/config/sparc/libgcc-glibc.ver
! 5c86ed7e3816d1e89031cd75dced226f  libgcc/config/sparc/linux-unwind.h
! 3ed2640cf1b19490cae76d298bccb311  libgcc/config/sparc/sol2-c1.S
! 702b3597b9b3bb159b4d1b8c4c24d1ab  libgcc/config/sparc/sol2-unwind.h
  ef153c3f92e3dee09716d833736683eb  libgcc/config/sparc/t-linux
  180e9bc0e471bafa1c561931dc073ebe  libgcc/config/sparc/t-linux64
  dccc96847305efc8c465f1dedc591c23  libgcc/config/sparc/t-softmul
--- 93587,93648 ----
  a0014912b4b08cfbe887d9945460e370  libgcc/config/rs6000/t-ppc64-fp
  bd7ceb31787a37d9cb144c41d41acfb3  libgcc/config/rs6000/t-ppccomm
  89dc5367808582c503f03a34193e467b  libgcc/config/rs6000/t-savresfgpr
! a27c085bf6440bb217f3b9dc5719e390  libgcc/config/rs6000/t-slibgcc-aix
  1d9dab8390b84ff0de504beefb72ce61  libgcc/config/rs6000/t-stack-rs6000
! 04581882e1764bcc2a4240b21f3eaa8a  libgcc/config/rs6000/t-vxworks
! 1fc924fd7abb499ef89cf1637ef18599  libgcc/config/rs6000/tramp.S
! 7d899fabef3bbcaab60044c158dcffab  libgcc/config/rs6000/trunctfkf2-sw.c
! 2d2e0dce48a7ae8394e5fb4a537ebb5c  libgcc/config/rx/rx-abi-functions.c
! 18a57c3fa0f02eeaa9bd042d3bbedea3  libgcc/config/rx/rx-abi.h
  da7bc70013c60be91cf9f085fed52f1a  libgcc/config/rx/rx-lib.h
! c3082721252219ad68555d3487077285  libgcc/config/rx/t-rx
! db1510b6d63dc86f8ae9b79f8294ad59  libgcc/config/s390/32/_fixdfdi.c
! 896db9ecc3aaf34d560e8eb1e2f39458  libgcc/config/s390/32/_fixsfdi.c
! e25e42627ebe9f2af8b70895565da1d0  libgcc/config/s390/32/_fixtfdi.c
! cfc6a66b898fd460164c53903c9ff5bf  libgcc/config/s390/32/_fixunsdfdi.c
! 7f3c82644ae7b623ebec152f50270642  libgcc/config/s390/32/_fixunssfdi.c
! 6d744a132a42a2d8b755141398708255  libgcc/config/s390/32/_fixunstfdi.c
  6101649604e2b3fdd6179e1aa53066bf  libgcc/config/s390/32/t-floattodi
! ca373e3e14b4e71435f767f70ff117b1  libgcc/config/s390/gthr-tpf.h
! 6257e2df30e680ac4e921a25074cfd02  libgcc/config/s390/libgcc-glibc.ver
! aca4617f36baeefe239cf99d461146ba  libgcc/config/s390/linux-unwind.h
! ae1eafc475702bae61d4f1472d436edc  libgcc/config/s390/morestack.S
  c150e28c734710584eba8e77d2ff5105  libgcc/config/s390/t-crtstuff
  35a77f8c50ecf16802e00e647ad94026  libgcc/config/s390/t-linux
  26d353eea9229af01124cc46b2e0cebd  libgcc/config/s390/t-stack-s390
  a5218871642ae69c55b0e826c41f3798  libgcc/config/s390/t-tpf
! 9dcad22ad12c29b5301535d7743af733  libgcc/config/s390/tpf-unwind.h
! fccc7561b4e5b1911b2dedeb5cf91620  libgcc/config/score/crti.S
! f020fd6cdb3d4a9b9e8eca070332d1ec  libgcc/config/score/crtn.S
  5d570ff5cd40fc6fba8876bdebd59a6b  libgcc/config/score/sfp-machine.h
! a5aa71e79e899e4577b49095961d87d8  libgcc/config/sh/crt.h
! 38dca787c096c370ddfe971e47e3c6d7  libgcc/config/sh/crt1.S
! 057a6c744b0dfb642979dbf847f1e125  libgcc/config/sh/crti.S
! 6c25e661303458f78a27868b29fd1044  libgcc/config/sh/crtn.S
! c776a8746ccb31fd453977f4480a88f5  libgcc/config/sh/lib1funcs-4-300.S
! e33cda07de7dff1b904930f906bd9eed  libgcc/config/sh/lib1funcs-Os-4-200.S
! 05677fd4d4713a33d023a70fda8cb5c9  libgcc/config/sh/lib1funcs.S
! 462419a5c7860fcf3a39e00053991b28  libgcc/config/sh/lib1funcs.h
  68ddef94ef228a2e500c6f84ca5c5f73  libgcc/config/sh/libgcc-excl.ver
! af599ee07841dd1a5e1b6f6c4706c51c  libgcc/config/sh/libgcc-glibc.ver
! 24a26eb132bd95142c3b2efef06b77d0  libgcc/config/sh/linux-atomic.c
! 674bf29fcc74b616375b71fc12ca50ce  libgcc/config/sh/linux-unwind.h
  d915cb58faa1ad2108733b662853057e  libgcc/config/sh/t-linux
  be1b06de574a22c34d2cf93d2d68a4f1  libgcc/config/sh/t-netbsd
! 5cb128ec4674fb9edfa7d50d30ab6f52  libgcc/config/sh/t-sh
  00d4a30e4ed4a68cd6ec53feb398914b  libgcc/config/sh/t-superh
! fde0487f850e7a9365a2103a426270d1  libgcc/config/sol2/crtp.c
! 08497f1b88e36297729091fdb1715d67  libgcc/config/sol2/crtpg.c
  5e87cfc189f02028b142950527a73c54  libgcc/config/sol2/gmon.c
! b461bdace3e6a8882a9efe076823f79d  libgcc/config/sol2/t-sol2
! a8a9da72d893f29eafc97716059f8c9c  libgcc/config/sparc/crtfastmath.c
! 3e59df61b6b2ea40c39bf3dc06fa2051  libgcc/config/sparc/crti.S
! dd350f4b63241811a1a6a5fd5349e4ed  libgcc/config/sparc/crtn.S
  b2a26791cd6002e4af29a7fa32510b3b  libgcc/config/sparc/lb1spc.S
! 835d8c7ee68e183a711d5a5d3bab224e  libgcc/config/sparc/libgcc-glibc.ver
! e368411c4dd1a99d91abd035e040d188  libgcc/config/sparc/linux-unwind.h
! 16c4cbee11e79d7fc709e852b7050d0c  libgcc/config/sparc/sol2-c1.S
! 2ef470112f5bce76581f22bd74a203bb  libgcc/config/sparc/sol2-unwind.h
  ef153c3f92e3dee09716d833736683eb  libgcc/config/sparc/t-linux
  180e9bc0e471bafa1c561931dc073ebe  libgcc/config/sparc/t-linux64
  dccc96847305efc8c465f1dedc591c23  libgcc/config/sparc/t-softmul
*************** efbaa48f2cdd756a3e953deca1bd19c9  libgcc
*** 88113,88124 ****
  6cb0675d48c7276d43aa201bcc2fd60c  libgcc/config/stormy16/ctzhi2.c
  5bc65cdd345cb629c202f3e96a0410dd  libgcc/config/stormy16/divsi3.c
  3e736ac64edb45dddbedbcc751674354  libgcc/config/stormy16/ffshi2.c
! f4b1c955dc0769c5a1d9dc9397ed21ff  libgcc/config/stormy16/lib2funcs.c
  5620256715f30f1eeeb4bdf614b346a6  libgcc/config/stormy16/lshrsi3.c
  27b26d13ffac636e5de0fccdcb2b4515  libgcc/config/stormy16/modsi3.c
  514e4e067379e1bef2b0baac58a21afc  libgcc/config/stormy16/parityhi2.c
  a071c36e5256dc1e154c400ef3055556  libgcc/config/stormy16/popcounthi2.c
! 2746422110dbd1f40bbe1fe745a932a1  libgcc/config/stormy16/t-stormy16
  ada9a39786da3b2e999f7440a17a1ed7  libgcc/config/stormy16/ucmpsi2.c
  0db895a315f3ea78e45253f9c2c8e7f8  libgcc/config/stormy16/udivmodsi4.c
  6dca6fc4737c716575c264f3934bb6d9  libgcc/config/stormy16/udivsi3.c
--- 93655,93666 ----
  6cb0675d48c7276d43aa201bcc2fd60c  libgcc/config/stormy16/ctzhi2.c
  5bc65cdd345cb629c202f3e96a0410dd  libgcc/config/stormy16/divsi3.c
  3e736ac64edb45dddbedbcc751674354  libgcc/config/stormy16/ffshi2.c
! 3a5156ffcad0203c2bc32439ce9a244d  libgcc/config/stormy16/lib2funcs.c
  5620256715f30f1eeeb4bdf614b346a6  libgcc/config/stormy16/lshrsi3.c
  27b26d13ffac636e5de0fccdcb2b4515  libgcc/config/stormy16/modsi3.c
  514e4e067379e1bef2b0baac58a21afc  libgcc/config/stormy16/parityhi2.c
  a071c36e5256dc1e154c400ef3055556  libgcc/config/stormy16/popcounthi2.c
! 9162ab6c0a9ae39a9677799d17f95879  libgcc/config/stormy16/t-stormy16
  ada9a39786da3b2e999f7440a17a1ed7  libgcc/config/stormy16/ucmpsi2.c
  0db895a315f3ea78e45253f9c2c8e7f8  libgcc/config/stormy16/udivmodsi4.c
  6dca6fc4737c716575c264f3934bb6d9  libgcc/config/stormy16/udivsi3.c
*************** e70c5d58ebf79fd5741ec98848df7f6f  libgcc
*** 88137,88162 ****
  a5670d0218ee8d5011882573b6bd224b  libgcc/config/t-gthr-noweak
  925527af5cc046b48ad621a96e896dd3  libgcc/config/t-gthr-vxworks
  37f29328813c5ec6c35276b87457f6b8  libgcc/config/t-gthr-vxworksae
! 59bdcd6dd8cb87ce5f94f6445e53fe8e  libgcc/config/t-hardfp
! d2f04dc4b7a8d7df8c1cbc551b037ded  libgcc/config/t-hardfp-sfdf
  5b1981686da4ef8b1b62a20f10b3e715  libgcc/config/t-libgcc-pic
  5c40347f0b1274c8b5759d0ed9d1ccf8  libgcc/config/t-libunwind
! 95dae48a590b4e37530b6ec564a6fbad  libgcc/config/t-libunwind-elf
  397d06701a9c354f5606477c578c9efb  libgcc/config/t-linux
  eb3161bf886026cdcf8a78cea885fdd2  libgcc/config/t-openbsd-thread
  474d97884b393e08b0ce416dd09493bc  libgcc/config/t-rtems
! bf9d89259ee614c5ffe517d943e09be5  libgcc/config/t-slibgcc
  3ecc4173a1b262e4770c789455b2cfc9  libgcc/config/t-slibgcc-darwin
  57f27c60e5d8c572d2645821ec5935e0  libgcc/config/t-slibgcc-elf-ver
! d6e035c76b062969d2034bfb0db3e68b  libgcc/config/t-slibgcc-fuchsia
  57e4154cb283fd7d9f323f5d85d534d9  libgcc/config/t-slibgcc-gld
  226b6f10bc32786901a79b070ed13468  libgcc/config/t-slibgcc-gld-nover
  429659ae1ff2531e3ba2fd0c676a320d  libgcc/config/t-slibgcc-hpux
! 09f9f47293dff0730dddb8127bd4f74d  libgcc/config/t-slibgcc-libgcc
  b5d3fe85dff400a82befa6b901b438ec  libgcc/config/t-slibgcc-nolc-override
  bb217aa78bbf6b6a7c7844f73152110d  libgcc/config/t-slibgcc-sld
! 39082f76e7ff28af867afdb6b93b1891  libgcc/config/t-slibgcc-vms
! f2589d061d7108bd21a021855c76e3e7  libgcc/config/t-softfp
  1ec9425eada0171d381f5f9b47b613a9  libgcc/config/t-softfp-compat
  72f41afb67b3c3c67809819763244452  libgcc/config/t-softfp-excl
  14ecf481060b3893ba43c6e09ff40eab  libgcc/config/t-softfp-sfdf
--- 93679,93704 ----
  a5670d0218ee8d5011882573b6bd224b  libgcc/config/t-gthr-noweak
  925527af5cc046b48ad621a96e896dd3  libgcc/config/t-gthr-vxworks
  37f29328813c5ec6c35276b87457f6b8  libgcc/config/t-gthr-vxworksae
! cb89221d47b4e6af3892aa5ae2110da8  libgcc/config/t-hardfp
! 0e606b523a21aba0a9cb9ff734790327  libgcc/config/t-hardfp-sfdf
  5b1981686da4ef8b1b62a20f10b3e715  libgcc/config/t-libgcc-pic
  5c40347f0b1274c8b5759d0ed9d1ccf8  libgcc/config/t-libunwind
! 07bcc98420956299d1938da6e7c0d6f3  libgcc/config/t-libunwind-elf
  397d06701a9c354f5606477c578c9efb  libgcc/config/t-linux
  eb3161bf886026cdcf8a78cea885fdd2  libgcc/config/t-openbsd-thread
  474d97884b393e08b0ce416dd09493bc  libgcc/config/t-rtems
! ce563372d6864335705c0f2a39d1a4c2  libgcc/config/t-slibgcc
  3ecc4173a1b262e4770c789455b2cfc9  libgcc/config/t-slibgcc-darwin
  57f27c60e5d8c572d2645821ec5935e0  libgcc/config/t-slibgcc-elf-ver
! 3b575248c67823cee4cb9617c6e13d38  libgcc/config/t-slibgcc-fuchsia
  57e4154cb283fd7d9f323f5d85d534d9  libgcc/config/t-slibgcc-gld
  226b6f10bc32786901a79b070ed13468  libgcc/config/t-slibgcc-gld-nover
  429659ae1ff2531e3ba2fd0c676a320d  libgcc/config/t-slibgcc-hpux
! 0af3d34fdca80b4b4c8c152e99e7a68d  libgcc/config/t-slibgcc-libgcc
  b5d3fe85dff400a82befa6b901b438ec  libgcc/config/t-slibgcc-nolc-override
  bb217aa78bbf6b6a7c7844f73152110d  libgcc/config/t-slibgcc-sld
! ff76526856565673089b174b185fab45  libgcc/config/t-slibgcc-vms
! 63336afbd8b8a4bf1ace7a5acbb2496c  libgcc/config/t-softfp
  1ec9425eada0171d381f5f9b47b613a9  libgcc/config/t-softfp-compat
  72f41afb67b3c3c67809819763244452  libgcc/config/t-softfp-excl
  14ecf481060b3893ba43c6e09ff40eab  libgcc/config/t-softfp-sfdf
*************** aa5fd95cba7a4d8329be007695e43d15  libgcc
*** 88165,88172 ****
  94681cc09c7ff0bb9a14356eff90be51  libgcc/config/t-stack
  685f35f0db36731a13637c087658e7a9  libgcc/config/t-tls
  65e3c91d5593e159fdbf46e423144f41  libgcc/config/t-vxcrtstuff
! 7d41ae75ebd8c7fad3c853141eff8642  libgcc/config/t-vxworks
! d650f97fd673cadc983472798c80383b  libgcc/config/t-vxworks7
  5e8b7b7f8448bc376425f6f16054d9ff  libgcc/config/t-vxworksae
  0e57ca5d22e3d1095f2c0cfebd41a073  libgcc/config/tilegx/sfp-machine.h
  77fba27019d1cad2a0737fada3162555  libgcc/config/tilegx/sfp-machine32.h
--- 93707,93714 ----
  94681cc09c7ff0bb9a14356eff90be51  libgcc/config/t-stack
  685f35f0db36731a13637c087658e7a9  libgcc/config/t-tls
  65e3c91d5593e159fdbf46e423144f41  libgcc/config/t-vxcrtstuff
! f630928b0fcf5102209d333a5d7acf85  libgcc/config/t-vxcrtstuffS
! 21fe8a733a3388b5cd715330c888f717  libgcc/config/t-vxworks
  5e8b7b7f8448bc376425f6f16054d9ff  libgcc/config/t-vxworksae
  0e57ca5d22e3d1095f2c0cfebd41a073  libgcc/config/tilegx/sfp-machine.h
  77fba27019d1cad2a0737fada3162555  libgcc/config/tilegx/sfp-machine32.h
*************** d650f97fd673cadc983472798c80383b  libgcc
*** 88174,88270 ****
  16c22b80e53f817334a19c0b48ad554d  libgcc/config/tilegx/t-crtstuff
  5e2260f13769a960c8e1f24b0c9847e4  libgcc/config/tilegx/t-softfp
  94fecaba2fa3fca31d038d5739e45e51  libgcc/config/tilegx/t-tilegx
! 80f3edfa44047571c3e70211386463ad  libgcc/config/tilepro/atomic.c
! 2e62520356f77903b2f2df0d53e854df  libgcc/config/tilepro/atomic.h
! 1dfed85cbd7156bdf3fbb36567eca474  libgcc/config/tilepro/linux-unwind.h
  c319c87cee2bc57b33cd850fb03731b5  libgcc/config/tilepro/sfp-machine.h
! e439a27d11b92f57cc4cb2937adccff2  libgcc/config/tilepro/softdivide.c
! f7881b0724df50e2ce434e6e54a841cd  libgcc/config/tilepro/softmpy.S
  4927dec2e58bebc9fec4d0405177eaea  libgcc/config/tilepro/t-crtstuff
  a6ca3e93e70a2a92d62823faefdc072f  libgcc/config/tilepro/t-tilepro
! a59292b8781a3d52120212b38c85858a  libgcc/config/unwind-dw2-fde-darwin.c
! c42d1214c0c8486e4e8d8ad698a928ba  libgcc/config/v850/lib1funcs.S
  015fdb6e6a2a23f553dc5105691f7a6a  libgcc/config/v850/t-v850
! d7ae65684d43e2996e15b738809c1e38  libgcc/config/vax/lib1funcs.S
  c668e63cf08f878538a0db39860696dc  libgcc/config/vax/t-linux
! 36b80041af919602646c027232080030  libgcc/config/visium/crti.S
! da845ee8ad9149833cf89d8dcd264bc8  libgcc/config/visium/crtn.S
! 319d52cca7c8b0b59dfd056e3aab27d4  libgcc/config/visium/divdi3.c
! 7d9f75f86c0db2d01a8afcf5c53fe9c1  libgcc/config/visium/lib2funcs.c
! 60c6a871830747648f5ecc58bfe084dc  libgcc/config/visium/memcpy.c
! 72206463ee156c76e1646e05a2eb1999  libgcc/config/visium/memcpy.h
! 0d8d20116b271c5df991b49cb4492865  libgcc/config/visium/memset.c
! 282836b86416a2f11d6b46df66902de4  libgcc/config/visium/memset.h
! 01c0d7cebf6d208abfbd62425a2ba0fd  libgcc/config/visium/moddi3.c
! 70522bf094233a5a807cc8af1a482f98  libgcc/config/visium/set_trampoline_parity.c
! 4b6f9ba35befc7df4d773f5739958dcf  libgcc/config/visium/t-visium
! 5f6a8e64ad59eb56f9d37b4bffa49314  libgcc/config/visium/udivdi3.c
! eec7bb7b29458f8175dff2f03c98d533  libgcc/config/visium/udivmoddi4.c
! e6fae15117012ac958a30003ca6a96ee  libgcc/config/visium/umoddi3.c
  9383115b20d4126cf07541b5d7bf6c2a  libgcc/config/vms/t-vms
! acfa842d75b370c682ab6ba6640e1dde  libgcc/config/vms/vms-ucrt0.c
! ce7c430805a241b92c4dc2eae74f6fc1  libgcc/config/vxcrtstuff.c
! e3ce303658b600ff1c65cd590b2ef9eb  libgcc/config/xtensa/crti.S
! 91e781ab271108dda6f1d35226a53e94  libgcc/config/xtensa/crtn.S
! f2f0192bcb7d312b69a8ac0af468d175  libgcc/config/xtensa/ieee754-df.S
! 3067a0ce6d2d74ee5d1270cec923cb90  libgcc/config/xtensa/ieee754-sf.S
! 3e43f7b838c45367ed106a3dadc92c85  libgcc/config/xtensa/lib1funcs.S
! 2e4a9e4f216d46f4cac4bcaed23831bc  libgcc/config/xtensa/lib2funcs.S
  8074695f5eea7b961c59ee9608973dac  libgcc/config/xtensa/libgcc-glibc.ver
! ebf28ba7c06911b1741fb0b4d962db6d  libgcc/config/xtensa/linux-unwind.h
  d437dc5394da39dbe1ece64723e90a76  libgcc/config/xtensa/t-elf
  4f2c91d0f57a675cc91b287ce2ad76aa  libgcc/config/xtensa/t-linux
  ce614fa17d52c2d7121d7e2d6f80b02d  libgcc/config/xtensa/t-windowed
  f44d679473da1cd24c9d82c368fc08b5  libgcc/config/xtensa/t-xtensa
! 4cdcecb81ce4b6ec520731740e0ce2f9  libgcc/config/xtensa/unwind-dw2-xtensa.c
! 7071ac2e5335c883bd7a8ec46ce3db00  libgcc/config/xtensa/unwind-dw2-xtensa.h
! f78581621e65bbf0249619b566f1b146  libgcc/configure
! 435a2485846b856f71429667c823dd3f  libgcc/configure.ac
! 9bba526395c2eabcac101c7be45e2411  libgcc/crtstuff.c
! e0f4322cac64d40982bfbfdc03906ccb  libgcc/dfp-bit.c
! a0a3642fe7c80d2f72e9bc40fe63b703  libgcc/dfp-bit.h
! 6f1be68119a2bbd0eade267043c7efcb  libgcc/divmod.c
! 0b29781b0d0c1d54641d84d6c719a992  libgcc/emutls.c
  aa52a8f7cb881c00c125ed5fd04ed4df  libgcc/enable-execute-stack-empty.c
! 4c5758e6cc866bd89d844e10e0363469  libgcc/enable-execute-stack-mprotect.c
! 1c12ba10dc00d7250b346f4ed43d41d4  libgcc/find-symver.awk
! a9df3c4bd5f2e97273db268dae99ae89  libgcc/fixed-bit.c
! dd2d7107a6325b4652788c437e588b9f  libgcc/fixed-bit.h
  064f7220d5fd5127bd136e8e2a9d62e7  libgcc/fixed-obj.mk
  651caf13863ec6f313b467d1d8531cd4  libgcc/floatunsidf.c
  6ca2d25d30233e6c7c94aa94c266cb72  libgcc/floatunsisf.c
  faedd2248586a9d50451e03d502eb147  libgcc/floatunsitf.c
  56fa552ac2ef58f6b1563d9c11fd3548  libgcc/floatunsixf.c
! dff40a87ffcefdfb5e4544f787bcf824  libgcc/fp-bit.c
! 044443eb014413a28393d0e53b71c115  libgcc/fp-bit.h
! 7a786189fd3e97c449cd9a14ebc36091  libgcc/gbl-ctors.h
! 23e99f5806ea9c4b4166579be8e04d99  libgcc/gcov.h
  c7b70dcc1f2024624fcba54a60ffcdda  libgcc/gen-fixed.sh
! 311034b6163911af2a0d931c1b55c46b  libgcc/generic-morestack-thread.c
! ef3737b64cc22211e5c99690ef89c9a5  libgcc/generic-morestack.c
! fe9e76a17b0d5b4405a8ed510ff98c3f  libgcc/generic-morestack.h
  971ff834e82a1a1964a019bfdac21c5c  libgcc/gstdint.h
! 89d599c8f04285895f338ffbc520ab78  libgcc/gthr-posix.h
! f891887eeda091b5e6836159037435f3  libgcc/gthr-single.h
! 5e109e3395abba865fd5696c06b508b4  libgcc/gthr.h
! 5c1d34004688b8b1ef6614ddc51521ed  libgcc/libgcc-std.ver.in
! 134846ce9a830cc0e69adf96db07517c  libgcc/libgcc2.c
! 6797b219abaffa4d570a45486fa5b96d  libgcc/libgcc2.h
! 7a8a48e39aef6a7d5bf233c01dedace6  libgcc/libgcov-driver-system.c
! 4cafa6cd061c7bc406dd3b87a306427e  libgcc/libgcov-driver.c
! ec897fa4a2d31af25e362acc23e36591  libgcc/libgcov-interface.c
! e11f5024f24207f4d4858509f44b5144  libgcc/libgcov-merge.c
! 87cdacfba09c3deb839f6a6bae6dfd9a  libgcc/libgcov-profiler.c
! 515ed8c4a0c0852e53a7074dbbbbc2d8  libgcc/libgcov-util.c
! e66c2d54568a3f83125c06bb6e4599ae  libgcc/libgcov.h
  06287f034722081687f831dcb61e986c  libgcc/memcmp.c
  dad9e98504e8f79e6e97aa29c6b49d96  libgcc/memcpy.c
  135a2882c25ab6f90748b020a6cc2f02  libgcc/memmove.c
  eb54d3066646204ecc21ba5ecb67d572  libgcc/memset.c
! 900261ac7eb1a1312075f0c70f338d00  libgcc/mkheader.sh
! 3fd5ddc3fd103cb9003167ec2c37f916  libgcc/mkmap-flat.awk
! cce5a4b194a88d80f2a140d156926aae  libgcc/mkmap-symver.awk
! 94545d8197f1eb75ad97e460f59c0fab  libgcc/offloadstuff.c
  0503a6ec2dc990ec5a02ea1d5ece9082  libgcc/shared-object.mk
  4320671e90e14eb5b9f91f106f923072  libgcc/siditi-object.mk
  5476b2a3295a19a0fb558d1db1aa17ae  libgcc/soft-fp/README
--- 93716,93812 ----
  16c22b80e53f817334a19c0b48ad554d  libgcc/config/tilegx/t-crtstuff
  5e2260f13769a960c8e1f24b0c9847e4  libgcc/config/tilegx/t-softfp
  94fecaba2fa3fca31d038d5739e45e51  libgcc/config/tilegx/t-tilegx
! 235ba33410709fb7a397ceabdefbf346  libgcc/config/tilepro/atomic.c
! 1d3080716c6256cd20a2f61d37b055f4  libgcc/config/tilepro/atomic.h
! 78d75d65a67ecc9252bf01616f48ac2a  libgcc/config/tilepro/linux-unwind.h
  c319c87cee2bc57b33cd850fb03731b5  libgcc/config/tilepro/sfp-machine.h
! eb18ee6c17014ec2e350afac4d54f888  libgcc/config/tilepro/softdivide.c
! dce24eff5008c67846c2e05b94c9f3d2  libgcc/config/tilepro/softmpy.S
  4927dec2e58bebc9fec4d0405177eaea  libgcc/config/tilepro/t-crtstuff
  a6ca3e93e70a2a92d62823faefdc072f  libgcc/config/tilepro/t-tilepro
! 1951b039b3091e2901940b1317ee4b5a  libgcc/config/unwind-dw2-fde-darwin.c
! 8f036c8c1e0156776572d45e8e9793a3  libgcc/config/v850/lib1funcs.S
  015fdb6e6a2a23f553dc5105691f7a6a  libgcc/config/v850/t-v850
! 5920e2d170d61a184ed7fa9b7aecd515  libgcc/config/vax/lib1funcs.S
  c668e63cf08f878538a0db39860696dc  libgcc/config/vax/t-linux
! efa460d2e74a5ee662a5f1739403a9c1  libgcc/config/visium/crti.S
! 96196bd6fc5108d01a23bf0f7ba3d7f0  libgcc/config/visium/crtn.S
! f86c1945a6b944ecf57097a4f741c3df  libgcc/config/visium/divdi3.c
! a1eac57f5108c2bcad8b3a1d9137b86b  libgcc/config/visium/lib2funcs.c
! f17294a89994fe5e1b6722431d74bd11  libgcc/config/visium/memcpy.c
! ab9cf4e191ac2c047f7e0fa7aadbcc9f  libgcc/config/visium/memcpy.h
! ca793993db80af5034101a8d70be0aef  libgcc/config/visium/memset.c
! a799a19c63029b693d120566340b2c20  libgcc/config/visium/memset.h
! f8dfcb12df06c32e583d2a7b1ddcc5a3  libgcc/config/visium/moddi3.c
! 080014b86249280783abd8f469127474  libgcc/config/visium/set_trampoline_parity.c
! fb7010079cc952e9ba76c5e17d1dc6b9  libgcc/config/visium/t-visium
! d77c2165afaa74e10aad7ec998372377  libgcc/config/visium/udivdi3.c
! 4f513291d5b3c8ec2574ce7292f2d078  libgcc/config/visium/udivmoddi4.c
! 297c2415235a0798ca3499c1effb23ea  libgcc/config/visium/umoddi3.c
  9383115b20d4126cf07541b5d7bf6c2a  libgcc/config/vms/t-vms
! 901aac1155f6b87311ab09ab38a63a60  libgcc/config/vms/vms-ucrt0.c
! 68bfc7d026f54dd353684b86578cc3df  libgcc/config/vxcrtstuff.c
! 77f2a3aefdb30c2d801f1d95a5782faf  libgcc/config/xtensa/crti.S
! b477103c7595ef519bda4023c00e3018  libgcc/config/xtensa/crtn.S
! 915ed928337434aee81b1afed831af0e  libgcc/config/xtensa/ieee754-df.S
! 2a541e359721526f5707c18367f9d1ea  libgcc/config/xtensa/ieee754-sf.S
! 6c14053e7ccb111009257816a74b849f  libgcc/config/xtensa/lib1funcs.S
! 7ba5f1ec65b79f974fb4bf0705e7d5f0  libgcc/config/xtensa/lib2funcs.S
  8074695f5eea7b961c59ee9608973dac  libgcc/config/xtensa/libgcc-glibc.ver
! 2bf06385d57acc865247defa034b9300  libgcc/config/xtensa/linux-unwind.h
  d437dc5394da39dbe1ece64723e90a76  libgcc/config/xtensa/t-elf
  4f2c91d0f57a675cc91b287ce2ad76aa  libgcc/config/xtensa/t-linux
  ce614fa17d52c2d7121d7e2d6f80b02d  libgcc/config/xtensa/t-windowed
  f44d679473da1cd24c9d82c368fc08b5  libgcc/config/xtensa/t-xtensa
! daee4113c01e3077b4faac7273b62eb6  libgcc/config/xtensa/unwind-dw2-xtensa.c
! a4dd22d7dff18395c3e250f8bbf40b6e  libgcc/config/xtensa/unwind-dw2-xtensa.h
! 662cdd1a425fde345c54351cdeedf139  libgcc/configure
! 3bae93cb63568d459e477ed3d722064c  libgcc/configure.ac
! 98fe1b4ad54f59d65ff8ffdf3be62d6b  libgcc/crtstuff.c
! 3fd873af7453650f7ef507a9429ff532  libgcc/dfp-bit.c
! c4b5cfc93156a10134d7c07a3573b1d7  libgcc/dfp-bit.h
! cfb5a0e858e3759359f348663b6bd4c8  libgcc/divmod.c
! d7d4f4b8fb5c131f6026a04654098ffb  libgcc/emutls.c
  aa52a8f7cb881c00c125ed5fd04ed4df  libgcc/enable-execute-stack-empty.c
! defe4c63f45826eb2b10baecb83fc80e  libgcc/enable-execute-stack-mprotect.c
! 17e03bb5413491e6ce67e6c813db626e  libgcc/find-symver.awk
! e38956768d4ed941e45c551d6830f32e  libgcc/fixed-bit.c
! 486c2b706fca07d007352145333bd26d  libgcc/fixed-bit.h
  064f7220d5fd5127bd136e8e2a9d62e7  libgcc/fixed-obj.mk
  651caf13863ec6f313b467d1d8531cd4  libgcc/floatunsidf.c
  6ca2d25d30233e6c7c94aa94c266cb72  libgcc/floatunsisf.c
  faedd2248586a9d50451e03d502eb147  libgcc/floatunsitf.c
  56fa552ac2ef58f6b1563d9c11fd3548  libgcc/floatunsixf.c
! 1d9efc801e8d908f5a797dab6d8d8346  libgcc/fp-bit.c
! d199f3d425a69f12a6cddcb8acda4906  libgcc/fp-bit.h
! 23df832ca58372bb8af27263d83108c5  libgcc/gbl-ctors.h
! 6f21dc371d8c219325a6c4f45f071d96  libgcc/gcov.h
  c7b70dcc1f2024624fcba54a60ffcdda  libgcc/gen-fixed.sh
! 08df34a3b8e19b6ca266b90c9a7bf045  libgcc/generic-morestack-thread.c
! b81b2ae15eb3c481604b300be1595348  libgcc/generic-morestack.c
! a8b1b9413bf70e85cf09a483b915b81b  libgcc/generic-morestack.h
  971ff834e82a1a1964a019bfdac21c5c  libgcc/gstdint.h
! c9861fdee53779c35e456402fbb9998f  libgcc/gthr-posix.h
! 3ad65363a0d80a0c62ce1da572b4cf9d  libgcc/gthr-single.h
! e440c8e51ae0c86428101fa1a886307d  libgcc/gthr.h
! 1cc75dea68f2a28c5a5c95eb3e95ab07  libgcc/libgcc-std.ver.in
! b23d2fee891e9d5aa667c7794af2d233  libgcc/libgcc2.c
! 57d9c8b98de0397e7f978d562bd47df0  libgcc/libgcc2.h
! e8c9e4de72e89c1648710ef715da1016  libgcc/libgcov-driver-system.c
! 879ef07f4d304b55301b1adef909ac99  libgcc/libgcov-driver.c
! 7eddbeb4ae87295429a186310a5f9ab0  libgcc/libgcov-interface.c
! cb929a351b13861d073881f931ebbcbf  libgcc/libgcov-merge.c
! a3fef9ce25462eb11337bd18339820c9  libgcc/libgcov-profiler.c
! 5de189e0cf2ba7cadaf7b96552008ea9  libgcc/libgcov-util.c
! 86353f73eea33df2eb2ad8b9cfb3018c  libgcc/libgcov.h
  06287f034722081687f831dcb61e986c  libgcc/memcmp.c
  dad9e98504e8f79e6e97aa29c6b49d96  libgcc/memcpy.c
  135a2882c25ab6f90748b020a6cc2f02  libgcc/memmove.c
  eb54d3066646204ecc21ba5ecb67d572  libgcc/memset.c
! 703080278b6e29c86efe920210d47a44  libgcc/mkheader.sh
! 0fb9ada41e6ede6214b3d4b5f8a042f3  libgcc/mkmap-flat.awk
! 48e5da1bce1d8a96cb29040a53fc5e4d  libgcc/mkmap-symver.awk
! 1a39efc1442b5e7bf519fd6866a3b551  libgcc/offloadstuff.c
  0503a6ec2dc990ec5a02ea1d5ece9082  libgcc/shared-object.mk
  4320671e90e14eb5b9f91f106f923072  libgcc/siditi-object.mk
  5476b2a3295a19a0fb558d1db1aa17ae  libgcc/soft-fp/README
*************** cce5a4b194a88d80f2a140d156926aae  libgcc
*** 88276,88286 ****
--- 93818,93832 ----
  3bdf685c9312248dd87d9bc4ae84edcc  libgcc/soft-fp/divtf3.c
  99b5880280c6bbae529d95e9a9082464  libgcc/soft-fp/double.h
  c89a59a33ea71d2dc03774504a13aaff  libgcc/soft-fp/eqdf2.c
+ 7fe515fcc84ad92db36a147d6dcc7b59  libgcc/soft-fp/eqhf2.c
  2e4af363c73da9184e60015211cd1c7b  libgcc/soft-fp/eqsf2.c
  2b3072ff6e13507af147a3cef6aa2b12  libgcc/soft-fp/eqtf2.c
  a81dee7cc59ebf10dcbef80f3e66508c  libgcc/soft-fp/extenddftf2.c
  3f6d8f9fa7244adcb4d8a441e110101e  libgcc/soft-fp/extended.h
+ b54c0923be0dd5d9420879166c93930d  libgcc/soft-fp/extendhfdf2.c
+ 196dd58340a698697e696abdd80322ff  libgcc/soft-fp/extendhfsf2.c
  a7d53ae8206852c1d906971d7147b342  libgcc/soft-fp/extendhftf2.c
+ dd688570d20d35f1598e0ba32440823e  libgcc/soft-fp/extendhfxf2.c
  cfb4ff09de7fa489ed37b0212b5b2df9  libgcc/soft-fp/extendsfdf2.c
  7ba7d9c5edaf0cd9ff762291ef1015a0  libgcc/soft-fp/extendsftf2.c
  133e513380ac191d62c8307921c7edc2  libgcc/soft-fp/extendxftf2.c
*************** fe61aa9e1a5e11745bb0cd4ff12702e0  libgcc
*** 88327,88333 ****
  6a280ff772a39d7102e84aa641a4b521  libgcc/soft-fp/gedf2.c
  a5f48e6a07058fb4dbdc3dd2861ccac7  libgcc/soft-fp/gesf2.c
  92d7633a15363b5320b918074e56f609  libgcc/soft-fp/getf2.c
! 0ce3e9ddb4c1be71d18c1dc2c20637f4  libgcc/soft-fp/half.h
  8ceccbb9dbbe3ee310142d51648844d7  libgcc/soft-fp/ledf2.c
  83a34b7384bc9c59f3e5071bda25c739  libgcc/soft-fp/lesf2.c
  dfea4e9ade55f19364dd09508b0bcd27  libgcc/soft-fp/letf2.c
--- 93873,93879 ----
  6a280ff772a39d7102e84aa641a4b521  libgcc/soft-fp/gedf2.c
  a5f48e6a07058fb4dbdc3dd2861ccac7  libgcc/soft-fp/gesf2.c
  92d7633a15363b5320b918074e56f609  libgcc/soft-fp/getf2.c
! fcf408739e31b8661faa88d088668fc8  libgcc/soft-fp/half.h
  8ceccbb9dbbe3ee310142d51648844d7  libgcc/soft-fp/ledf2.c
  83a34b7384bc9c59f3e5071bda25c739  libgcc/soft-fp/lesf2.c
  dfea4e9ade55f19364dd09508b0bcd27  libgcc/soft-fp/letf2.c
*************** eefc458bbc6eb87cb261595ce2becd57  libgcc
*** 88348,88387 ****
  2f0da444d49fd7ba41e94a3bbafa7750  libgcc/soft-fp/subdf3.c
  dbad13d261c3dd1a91ea9ef90490b47d  libgcc/soft-fp/subsf3.c
  051c74fb147e7e40022cfce5eca2315e  libgcc/soft-fp/subtf3.c
  ce0cf0abbaa81ebaaf7521aa85c5d648  libgcc/soft-fp/truncdfsf2.c
  73b0453141e14f3e7db8cfa75cf3679f  libgcc/soft-fp/trunctfdf2.c
  ea6dcd1b477b905faa40a629a520a1d9  libgcc/soft-fp/trunctfhf2.c
  6ffcd093e8da6dee1d35debf844361f5  libgcc/soft-fp/trunctfsf2.c
  29af39926cbff6a41b01c02d82653fdb  libgcc/soft-fp/trunctfxf2.c
  8a59a7e89d7a7d018966dc4fef57b87b  libgcc/soft-fp/unorddf2.c
  013277b0e2d3150d848b9b14347df5ac  libgcc/soft-fp/unordsf2.c
  4eb9235213d4c62a2fe0cf67c85ee242  libgcc/soft-fp/unordtf2.c
  8c64184cccab0ab994c69899c63f3260  libgcc/static-object.mk
! 3dcc64ed3bf96a0c8e478de448c26530  libgcc/sync.c
! e0ac60c8315971593cd5000a11b8503c  libgcc/udivhi3.c
! 59ff772dcaef783a3c41a1b6e3fd9e93  libgcc/udivmod.c
! 360fbdffccc2935aeb0d9c44cdf2886a  libgcc/udivmodhi4.c
! 60d1fa6aab55a24384fe96b8ba38a746  libgcc/udivmodsi4.c
! 6fe94cca4577f2aec96006fd7910d6e2  libgcc/unwind-arm-common.inc
! 87ec9abcad36b76b7398cf7fc40881f8  libgcc/unwind-c.c
! 09938390ac4e1621926541ce5e852ca0  libgcc/unwind-compat.c
! c4e640ee464c710df999e864d52e97c3  libgcc/unwind-compat.h
! 8f5fb883643c8ec9108d93ba1423f237  libgcc/unwind-dw2-fde-compat.c
! 6d530444e26f2ffdee78a91751a029b2  libgcc/unwind-dw2-fde-dip.c
! a4b3387112636676841eb17cc2798050  libgcc/unwind-dw2-fde.c
! e23262edf306d7ab0432621d81d45fd9  libgcc/unwind-dw2-fde.h
! 7b871a020ed7d0fcef854d41235d0d13  libgcc/unwind-dw2.c
! 4802552aedbf235ab0d2b86554c8ddf7  libgcc/unwind-dw2.h
! 7b9cfacc5c4dba7abda1dccc3cb7dea0  libgcc/unwind-generic.h
! b0568c77be3b22af357389e25b1a26bd  libgcc/unwind-pe.h
! d0449982cb052f4f17661625d8c905bd  libgcc/unwind-seh.c
! e67a974e1f8cb55dcc72068be10e9832  libgcc/unwind-sjlj.c
! 90461a11e8b170034ba19d91c376afe0  libgcc/unwind.inc
! 98cd6c16c00066d32ba849b16ceaf6ed  libgcc/vtv_end.c
! 8a8461c4f8e531d7252eacf261e3799b  libgcc/vtv_end_preinit.c
! d1bdf1e757a5a9eeb3bc447fc6938f48  libgcc/vtv_start.c
! f99c5f0b1f8f77dbbb1db940bb61ef02  libgcc/vtv_start_preinit.c
! 95e78facf3c971311d7c0a2b14be3033  libgfortran/ChangeLog
  9aca36338382e5b4b730e7779170b24d  libgfortran/ChangeLog-2002
  80d3edc880c2da0b7a2beec2e2c4f774  libgfortran/ChangeLog-2003
  9f0239429993a5e64ed793eb6c55a5c1  libgfortran/ChangeLog-2004
--- 93894,93936 ----
  2f0da444d49fd7ba41e94a3bbafa7750  libgcc/soft-fp/subdf3.c
  dbad13d261c3dd1a91ea9ef90490b47d  libgcc/soft-fp/subsf3.c
  051c74fb147e7e40022cfce5eca2315e  libgcc/soft-fp/subtf3.c
+ f026f7a9fcb54b5b1b65b83cddcd4987  libgcc/soft-fp/truncdfhf2.c
  ce0cf0abbaa81ebaaf7521aa85c5d648  libgcc/soft-fp/truncdfsf2.c
+ 3a19993346e5428e3be8be868563002b  libgcc/soft-fp/truncsfhf2.c
  73b0453141e14f3e7db8cfa75cf3679f  libgcc/soft-fp/trunctfdf2.c
  ea6dcd1b477b905faa40a629a520a1d9  libgcc/soft-fp/trunctfhf2.c
  6ffcd093e8da6dee1d35debf844361f5  libgcc/soft-fp/trunctfsf2.c
  29af39926cbff6a41b01c02d82653fdb  libgcc/soft-fp/trunctfxf2.c
+ 9200bbbf07a7c04976ec6dfe04e96a8a  libgcc/soft-fp/truncxfhf2.c
  8a59a7e89d7a7d018966dc4fef57b87b  libgcc/soft-fp/unorddf2.c
  013277b0e2d3150d848b9b14347df5ac  libgcc/soft-fp/unordsf2.c
  4eb9235213d4c62a2fe0cf67c85ee242  libgcc/soft-fp/unordtf2.c
  8c64184cccab0ab994c69899c63f3260  libgcc/static-object.mk
! 99790f33f263e2570c50fd96e9b3e390  libgcc/sync.c
! 7be141a3e63f191c188cac7c8c5ba2df  libgcc/udivhi3.c
! ad0e5b6dc4da0e2a75058348063be38f  libgcc/udivmod.c
! 6257669222979992884ee10cdef945bc  libgcc/udivmodhi4.c
! dbad32184dec6995045433b08b379946  libgcc/udivmodsi4.c
! 13983b95fb20f42d632265336e81d413  libgcc/unwind-arm-common.inc
! af1786fe053390d764bd79e2c261822c  libgcc/unwind-c.c
! 3dd3bcd264e7c8c79212741acb2d09d2  libgcc/unwind-compat.c
! 507a92f167b02850f1358d2fdc39f764  libgcc/unwind-compat.h
! db6cd6c24e7e86e47264ca84422d02ef  libgcc/unwind-dw2-fde-compat.c
! 3b55297a45bdbbfd4cfcde725037bafc  libgcc/unwind-dw2-fde-dip.c
! 1b26d11b3ed1309ef9b8df4403b6de06  libgcc/unwind-dw2-fde.c
! 6669cec12a47ada53529ee9efa55ca01  libgcc/unwind-dw2-fde.h
! 7e6c41fa4bb6abdb62f1df9985cba7a9  libgcc/unwind-dw2.c
! 697df1807167f7e5d79b14c5f2973df2  libgcc/unwind-dw2.h
! 897af7f4696f2436715266bb22867766  libgcc/unwind-generic.h
! 53eef25a9165187fad7ba70504b64a46  libgcc/unwind-pe.h
! 76015bfd96a1a1d40809dc383044efc8  libgcc/unwind-seh.c
! b7b81f19c0545f1b28689a7689f60c6a  libgcc/unwind-sjlj.c
! e0219457dfae5e317f3870c978cf2334  libgcc/unwind.inc
! f25d8ab44bd78e25e4101be2782fdc8a  libgcc/vtv_end.c
! 86516254f518009cebca3f82cd990254  libgcc/vtv_end_preinit.c
! 351c41e966ff8e80444fb57c161e7957  libgcc/vtv_start.c
! 0ae6a250e17c98a856aae28baba71d88  libgcc/vtv_start_preinit.c
! c868ad85e878a7ceb1ed7c7bf0b56c86  libgfortran/ChangeLog
  9aca36338382e5b4b730e7779170b24d  libgfortran/ChangeLog-2002
  80d3edc880c2da0b7a2beec2e2c4f774  libgfortran/ChangeLog-2003
  9f0239429993a5e64ed793eb6c55a5c1  libgfortran/ChangeLog-2004
*************** e9051611daf30b5672939006d2ab936c  libgfo
*** 88401,89229 ****
  5bffa5826936db152a31f60524b34f0c  libgfortran/ChangeLog-2018
  a25a190e02c8ba2caa2c3dee224eba51  libgfortran/ChangeLog-2019
  561d7b7050b65ea8eac91bc825d5a816  libgfortran/ChangeLog-2020
! 87a3d9b747581ac87d882fd727300d4e  libgfortran/ISO_Fortran_binding.h
! ca99647151eebf48fc46d438de880b08  libgfortran/Makefile.am
! 6ca08b6a6247ccbda130de39586cfe8c  libgfortran/Makefile.in
! 163a6e0b260d40c9b49c5bcdcf86e898  libgfortran/acinclude.m4
  77dad7b87b2adfbfda676696055ef90f  libgfortran/aclocal.m4
! 51eb22a9f5e0b5927b22af64e3d4adaa  libgfortran/c99_protos.h
! 0436a58eb3d063ba6fd3d45b14a151c3  libgfortran/caf/libcaf.h
! d37a60a3e3b0eaef18aabe9aabc8b7be  libgfortran/caf/mpi.c
! d06682d55d12b6a0f52c3d5a6ee51078  libgfortran/caf/single.c
! 639e67b84ee7eff64d336c81958c98a1  libgfortran/config.h.in
! 8e14e6a474f85c8318328a6829856f6e  libgfortran/config/fpu-387.h
! 1903c688a28a4ba1062ffbf22a1a8b06  libgfortran/config/fpu-aix.h
! d2346ad86c73cabb4a02836729668659  libgfortran/config/fpu-generic.h
! 69b7d92fde9359159609a05854cf75da  libgfortran/config/fpu-glibc.h
! bdd66a0d8b5ebc324a7bf285ab31eee8  libgfortran/config/fpu-sysv.h
  93375010faf12b59ff1618874a0beacd  libgfortran/config/t-aix
! 4965c94efd31f71ebb16c32bded77a5a  libgfortran/configure
! 28702d889e65c6f8c525098a34aefc63  libgfortran/configure.ac
! f839528fdec323134d27a3fe9a9f5c6e  libgfortran/configure.host
! a864b5e651585626f4ea060472af62ad  libgfortran/generated/_abs_c10.F90
! 4add714531640470bded5904ac7aaefc  libgfortran/generated/_abs_c16.F90
! ef634be93f64cf32c924204cb9b4aa27  libgfortran/generated/_abs_c4.F90
! f4407329eb1cf1b35f9ffc66bfbd503d  libgfortran/generated/_abs_c8.F90
! 6208ff3503f48a4d1ff3c27f78d98e19  libgfortran/generated/_abs_i16.F90
! ed4df3ab1d51338e1835295a7914c367  libgfortran/generated/_abs_i4.F90
! c52def9f0744341dd58aa12dbb06c20e  libgfortran/generated/_abs_i8.F90
! 5465bf92eab59939ea4162d930c5da7e  libgfortran/generated/_abs_r10.F90
! df30cd55a015f01becdfca3ea7c59438  libgfortran/generated/_abs_r16.F90
! 043d2b20325fe305b7f0ece6d2e0800d  libgfortran/generated/_abs_r4.F90
! ed64006a00a8e4d4c9babad57e82d7c1  libgfortran/generated/_abs_r8.F90
! d3b87b33f580bb1f88f9518e0badf041  libgfortran/generated/_acos_r10.F90
! a5ce82301b0c36a5246cbc0e9c881e07  libgfortran/generated/_acos_r16.F90
! 0dc68f65b2aed739d92d903e6be663c7  libgfortran/generated/_acos_r4.F90
! fa887152861fccdc4adb5b54e5132907  libgfortran/generated/_acos_r8.F90
! 509d09049bec2087b55abe25d2c40507  libgfortran/generated/_acosh_r10.F90
! 92e484f854b1d51f20f82121ddc18b65  libgfortran/generated/_acosh_r16.F90
! 99eaab5563b2db40a5e83284a26feffd  libgfortran/generated/_acosh_r4.F90
! 20542794929afb0ea776096d67f3551a  libgfortran/generated/_acosh_r8.F90
! ca7b904601e248a1485a9285f922edc7  libgfortran/generated/_aimag_c10.F90
! 1450f8933ef4344765a9b68e1a892b21  libgfortran/generated/_aimag_c16.F90
! cc93bc6b9237a5fe530c762e33a59a3e  libgfortran/generated/_aimag_c4.F90
! 26eff194f9186e6545908344c8dea831  libgfortran/generated/_aimag_c8.F90
! 2e188259766655e66c0ffd5577647567  libgfortran/generated/_aint_r10.F90
! 901201af6aaab4a311b9baa8a3b0fcef  libgfortran/generated/_aint_r16.F90
! 80e5aa8296206920bfb53e928a9d2c85  libgfortran/generated/_aint_r4.F90
! 5e3dd8e9bcb6d3b36757096fa1bc423f  libgfortran/generated/_aint_r8.F90
! 79904736b7b5f04cb766f932f29cdc9f  libgfortran/generated/_anint_r10.F90
! 6f7d77582c99f3fef117db4f83d4f22b  libgfortran/generated/_anint_r16.F90
! 2f89a677eb139c89e9809a5de6c56493  libgfortran/generated/_anint_r4.F90
! de8fcb68b7906025bc9be0a37bf8138d  libgfortran/generated/_anint_r8.F90
! 1122db5705c8c68645eb082de314e08b  libgfortran/generated/_asin_r10.F90
! 0fdded3c0c7c030bad81b06495db4137  libgfortran/generated/_asin_r16.F90
! cbe2ea263e8fed5b81505dbbb53f5a39  libgfortran/generated/_asin_r4.F90
! 804e3583b206cefdc06b17805c485181  libgfortran/generated/_asin_r8.F90
! 1333c45544bc45f24ef6e38a9f5d270d  libgfortran/generated/_asinh_r10.F90
! 14c7c8ad7343d72439edce20f2c4e13e  libgfortran/generated/_asinh_r16.F90
! 016807c20efc6512483e56a14c2f37b1  libgfortran/generated/_asinh_r4.F90
! 1b8d60fd9302399106634a10f89f2310  libgfortran/generated/_asinh_r8.F90
! d85370eb13dda7bc1c0a8c1d46d0b498  libgfortran/generated/_atan2_r10.F90
! 99d5afb905ee2c8cfda6b0d46855f298  libgfortran/generated/_atan2_r16.F90
! 24a4b1608eb7ec9cd4322ef5aed791a4  libgfortran/generated/_atan2_r4.F90
! 715d2d0b3726bd1b14dd4a1e5e1ab944  libgfortran/generated/_atan2_r8.F90
! 35f7eb2e1befbc37cfcb8c25595f379a  libgfortran/generated/_atan_r10.F90
! f5b18a69b90bb7d2c9cdee7681f1e954  libgfortran/generated/_atan_r16.F90
! 709622c5e7f506cf86323cb1a130bcc0  libgfortran/generated/_atan_r4.F90
! d7d8f16c011519afcc4db69d5353587b  libgfortran/generated/_atan_r8.F90
! 2dd831e5309f7131d8c77e3393081ce4  libgfortran/generated/_atanh_r10.F90
! d3d42ef826a1a7940da1eae53d812e0f  libgfortran/generated/_atanh_r16.F90
! ed5e36c5c4527cb120f32f67f3475462  libgfortran/generated/_atanh_r4.F90
! 9fda6c3dbcf38c300bff8cf8ab6e0b68  libgfortran/generated/_atanh_r8.F90
! ca236c7ae1893c10d9c0e8f83fb21b49  libgfortran/generated/_conjg_c10.F90
! a8ac0461825a3dc1185c7135a773e3c6  libgfortran/generated/_conjg_c16.F90
! 989aebd17211be4c10e5f8b9ffe24acc  libgfortran/generated/_conjg_c4.F90
! 2356b5212db4d040f35a273199909b74  libgfortran/generated/_conjg_c8.F90
! a4e4374f804fa1af11f2c550b5a22f25  libgfortran/generated/_cos_c10.F90
! 009e6f74f2efd1289c063169a618520a  libgfortran/generated/_cos_c16.F90
! 10d00317389b87cc8bd0ada37eea71fa  libgfortran/generated/_cos_c4.F90
! b761724e01c8083a56faca6cfef779dd  libgfortran/generated/_cos_c8.F90
! a59ea15a4765e636d364f20731942552  libgfortran/generated/_cos_r10.F90
! 30c5009267b962062b74337fa2b524a9  libgfortran/generated/_cos_r16.F90
! 0c7fc1a9cd0d70053f0916331223d4fa  libgfortran/generated/_cos_r4.F90
! 82dad2d30d8f0725fe1e743fd8b7a138  libgfortran/generated/_cos_r8.F90
! e4ab4c4909cf6ebbbb34cd234f3eb700  libgfortran/generated/_cosh_r10.F90
! 2e105b21f718005e43dd4a961d24fccc  libgfortran/generated/_cosh_r16.F90
! f5369fc3626609b9b0249cc9cd327235  libgfortran/generated/_cosh_r4.F90
! c3043490f83ad52309d72b31dfd33c51  libgfortran/generated/_cosh_r8.F90
! c69c93552ef5882e515ccf388e227535  libgfortran/generated/_dim_i16.F90
! 60c59732beeb1c2c9f00d3ff5c119680  libgfortran/generated/_dim_i4.F90
! cc51e10b5a7cb6e71e3906ae435c62a4  libgfortran/generated/_dim_i8.F90
! 08a703b183678d822c31fd594139f62d  libgfortran/generated/_dim_r10.F90
! 833febc4b06b8bb9e39c34f53593b773  libgfortran/generated/_dim_r16.F90
! dc1901d95376f6c34c2ed491273d6a0d  libgfortran/generated/_dim_r4.F90
! a2185afd669349b45440addb4ea3c29d  libgfortran/generated/_dim_r8.F90
! 69561181f0e5715c89d8cf1a3708f4bf  libgfortran/generated/_exp_c10.F90
! 9b95536df341cfd20d97db567be1a133  libgfortran/generated/_exp_c16.F90
! 3a11efca456568f89db461c78eecc8ab  libgfortran/generated/_exp_c4.F90
! 3bd09a65d4661f17d9e91aafbcf68ec2  libgfortran/generated/_exp_c8.F90
! 4dfd246fd68c0ab658c69f6ccf620330  libgfortran/generated/_exp_r10.F90
! ac90388f1036141c05bd0ff64ae98f1c  libgfortran/generated/_exp_r16.F90
! 6076e3261d03fd43bc9f00015a8c2db9  libgfortran/generated/_exp_r4.F90
! 2eb457722a50589f0449521478a3d3b2  libgfortran/generated/_exp_r8.F90
! fdd91144e62ee35c3a8027d7510f122b  libgfortran/generated/_log10_r10.F90
! 5ca71db4e5f6db9a743f74110a312b86  libgfortran/generated/_log10_r16.F90
! 6c833c1a734a7cfbe887551fa214658e  libgfortran/generated/_log10_r4.F90
! bb75143d168d076a0a4d08145322934f  libgfortran/generated/_log10_r8.F90
! 36efc5df1e38f5671d056e7391613bdc  libgfortran/generated/_log_c10.F90
! ba82d3ab2611b9ab84b4b15b5c568561  libgfortran/generated/_log_c16.F90
! bdfb5e275012db399561e9ac110a7ee4  libgfortran/generated/_log_c4.F90
! 168f06a350df9272e2967c9087cf581a  libgfortran/generated/_log_c8.F90
! 7bcca7bf3c0733e0071abc1b42893592  libgfortran/generated/_log_r10.F90
! 0e50320d3a45e67630e74292196f66c3  libgfortran/generated/_log_r16.F90
! f023b8ebedb9ed0716401a36a5266d51  libgfortran/generated/_log_r4.F90
! b96efaa2277fc18cfd5a3e2f677d6354  libgfortran/generated/_log_r8.F90
! 4be1fbc2ba1f9da7ea99ed2ca4e3894b  libgfortran/generated/_mod_i16.F90
! 9bc68815510521d9023bd3294b35c3fa  libgfortran/generated/_mod_i4.F90
! 03aed02f26be18e2881bfa0410f3b6ae  libgfortran/generated/_mod_i8.F90
! bad8aca1688240deb25d992c04a09d55  libgfortran/generated/_mod_r10.F90
! ea36e347d0fb9ed69ef679d39fa3b373  libgfortran/generated/_mod_r16.F90
! 62de73324150f4ef274a33e83ba19f94  libgfortran/generated/_mod_r4.F90
! 8333b9e605bc0d344dc408851f4ea358  libgfortran/generated/_mod_r8.F90
! d9d3ad2063af2e92a5257fb1cc4e8d1b  libgfortran/generated/_sign_i16.F90
! d7f5c1b26090636baaaa37ebf4c7da9b  libgfortran/generated/_sign_i4.F90
! ee3eb569b869077a3de5377131bc1ab8  libgfortran/generated/_sign_i8.F90
! 3a28110cbbfa54a808d614125f25f18a  libgfortran/generated/_sign_r10.F90
! b1861fb6f6ea638de1b9c1d20f040026  libgfortran/generated/_sign_r16.F90
! 995d7ef561eb454aadde5b7c1bbaf166  libgfortran/generated/_sign_r4.F90
! 4e1fbdeef5af0ae3dac004ad9021f1d7  libgfortran/generated/_sign_r8.F90
! 72d2003ca1fa8335447edbe87dd1d042  libgfortran/generated/_sin_c10.F90
! e71c6e36856e8a8272cb02a18fd17e52  libgfortran/generated/_sin_c16.F90
! 394bb99be870238a2d8ffd916909d579  libgfortran/generated/_sin_c4.F90
! f279fd9540d79043688d3c72b50eff61  libgfortran/generated/_sin_c8.F90
! fbb9d511e33a34f2b15aad5bc1b97324  libgfortran/generated/_sin_r10.F90
! 5b4aee82b02493efce193a636b253a84  libgfortran/generated/_sin_r16.F90
! 1801ed1233b9e80c8a0e5ecc57084a49  libgfortran/generated/_sin_r4.F90
! 0956038d7474f906495dc8686e7a88f1  libgfortran/generated/_sin_r8.F90
! 24877b238d18ad28909dc7f51aa00a25  libgfortran/generated/_sinh_r10.F90
! 7e39c8d0c291a2a94075a0a021d61ca8  libgfortran/generated/_sinh_r16.F90
! 98cbb239d60d1eeb4937471d305b1ff6  libgfortran/generated/_sinh_r4.F90
! 42e68011addb1e773d5eea283cca4a94  libgfortran/generated/_sinh_r8.F90
! 921d13d780f1e65f2f984cab0fb025af  libgfortran/generated/_sqrt_c10.F90
! eea856b301421491ef9cb6a5ec9655de  libgfortran/generated/_sqrt_c16.F90
! e70eb4cd5d506c0e1e7c6574f45b1b59  libgfortran/generated/_sqrt_c4.F90
! 9b34d5150b0e590cb97dea0e330310c3  libgfortran/generated/_sqrt_c8.F90
! 6fdd87db0dc454cc33d13083ca86d985  libgfortran/generated/_sqrt_r10.F90
! 5586d9dda5194695eb6c21b7b9e1cfd7  libgfortran/generated/_sqrt_r16.F90
! f4c12c42bdb0fc2bb398706cab883580  libgfortran/generated/_sqrt_r4.F90
! 0a19abb5a1c35688447325afd61d14b4  libgfortran/generated/_sqrt_r8.F90
! 6058756a3cca426370a72e05d8e759bd  libgfortran/generated/_tan_r10.F90
! a2358203d3071f328f0dbe8e632ff472  libgfortran/generated/_tan_r16.F90
! d475e671b989dbb4199390226f5f4bd8  libgfortran/generated/_tan_r4.F90
! bc5ed507371839742af3a55189e4cfcd  libgfortran/generated/_tan_r8.F90
! 97302d707b3ee3d2b650f60325ea6830  libgfortran/generated/_tanh_r10.F90
! 5c22d35ceab2bb4a000d1af149893605  libgfortran/generated/_tanh_r16.F90
! 5126d10aa3786f3f570f0c23a5d8254e  libgfortran/generated/_tanh_r4.F90
! b3ec65d6ef7db527e9d3bc0ef5711e6f  libgfortran/generated/_tanh_r8.F90
! 72e60bab930fbf35b7208df01a8f9918  libgfortran/generated/all_l1.c
! b4dc5efeb93626a8cbe29045bd39d87e  libgfortran/generated/all_l16.c
! 4bdbbaeacad22b06038f1470ab2a654f  libgfortran/generated/all_l2.c
! 199b06b92be3461cdfe66c5371c0086e  libgfortran/generated/all_l4.c
! 0a678a657b0208c9b98cea0236744089  libgfortran/generated/all_l8.c
! 898d69acdb65138582e11b93efb9aa05  libgfortran/generated/any_l1.c
! 02e9576caa048db3fb1a2a563e019b85  libgfortran/generated/any_l16.c
! 7f73b428f719c5cdb2a09de33b181665  libgfortran/generated/any_l2.c
! 932cdcddfc81cbf8753cf5fad6303609  libgfortran/generated/any_l4.c
! d49ed40cffa54a0d16400df1868f0c94  libgfortran/generated/any_l8.c
! b7f8ed782010b1577aa0ed19adc4389f  libgfortran/generated/bessel_r10.c
! a483e3d2ed2cfec67401df7682b5aaa0  libgfortran/generated/bessel_r16.c
! 21e5f2cdce1bd6c9c9fce54ea7e277e6  libgfortran/generated/bessel_r4.c
! 1767782bae80a962b9e202dd9872a505  libgfortran/generated/bessel_r8.c
! 92504ce725b3a55b318627769c0a25a1  libgfortran/generated/count_16_l.c
! e4c30f5e2669809815ca8f3702f0037c  libgfortran/generated/count_1_l.c
! c58952a696bdd2c6b479f5ee73b5cf61  libgfortran/generated/count_2_l.c
! e61130f2a58631883a8c400d3ceec0b4  libgfortran/generated/count_4_l.c
! 22eb92e36730c7fec159b7666e1633f5  libgfortran/generated/count_8_l.c
! 153421ec550a8c31c9f1f39a07d89ff5  libgfortran/generated/cshift0_c10.c
! e0dd7fa015ff7bde2ed96c077226ab29  libgfortran/generated/cshift0_c16.c
! 64cdb81f32929623c4039389211436cc  libgfortran/generated/cshift0_c4.c
! 60995dc9cdb95c88e0411c368acc3f1c  libgfortran/generated/cshift0_c8.c
! b223e8687aeb2d167b80e0b4ac241578  libgfortran/generated/cshift0_i1.c
! 0f16c60479dd8128765f3b1e4175c97c  libgfortran/generated/cshift0_i16.c
! e5190584d3f64f7f645906d40e74b44b  libgfortran/generated/cshift0_i2.c
! 85c2a9c8a2a8908765f271a115e32453  libgfortran/generated/cshift0_i4.c
! 80d06987378bfc88b308c59a1b9f4ae0  libgfortran/generated/cshift0_i8.c
! c8abf258f5ef0e329e73529b70084a6d  libgfortran/generated/cshift0_r10.c
! 33361504bc3bd75140eac1017ede93a7  libgfortran/generated/cshift0_r16.c
! 1229661ded74e0d12a722f57b42f34f4  libgfortran/generated/cshift0_r4.c
! a2fcd111efb382016ab4ccab0283cf03  libgfortran/generated/cshift0_r8.c
! b21476d839342aff1ba2b93cdeca9b01  libgfortran/generated/cshift1_16.c
! b2a9c1fdc354f32782b7b9c4ec106444  libgfortran/generated/cshift1_16_c10.c
! 069b5257f6605998eaad787b4d62d7bf  libgfortran/generated/cshift1_16_c16.c
! e1b70410133e3163c64aa96454282dcf  libgfortran/generated/cshift1_16_c4.c
! a04ac153905b8002b4841ba33f6c101d  libgfortran/generated/cshift1_16_c8.c
! 5a00637cfeb4b1f39ad3369c0eeae86b  libgfortran/generated/cshift1_16_i1.c
! cfb8e193c1ae9dec80ed28ea9fed649d  libgfortran/generated/cshift1_16_i16.c
! 963c1c65f94d0b67f781da1128c633e7  libgfortran/generated/cshift1_16_i2.c
! c374545837cedfdf3338c70522577b10  libgfortran/generated/cshift1_16_i4.c
! b328c2685a7de48d680bbba81d6465a3  libgfortran/generated/cshift1_16_i8.c
! 57586bfb78437972d1d80a35c7560fad  libgfortran/generated/cshift1_16_r10.c
! d46d35ae0bafbd39d8ac3ac368ee7958  libgfortran/generated/cshift1_16_r16.c
! acca9c0f22684561ec5732f4564f047d  libgfortran/generated/cshift1_16_r4.c
! 7a6cf84b5c636905a5d83a751dad59b6  libgfortran/generated/cshift1_16_r8.c
! 67cedd4e9ac429c6fbd8d22aceae40fb  libgfortran/generated/cshift1_4.c
! 6c521f2a6010597bef1b54db61e328ac  libgfortran/generated/cshift1_4_c10.c
! 074ddf1d5120f0f1d3aea51557a7741b  libgfortran/generated/cshift1_4_c16.c
! 3d76d5bdb6d409c6fcddb86f3e28b7ba  libgfortran/generated/cshift1_4_c4.c
! 50bde08b4662088cf995357ea91e3848  libgfortran/generated/cshift1_4_c8.c
! 10be2803a0c644c7f284557643cb383f  libgfortran/generated/cshift1_4_i1.c
! 21041ea9df6f2a292ff89101efc30a99  libgfortran/generated/cshift1_4_i16.c
! 3d6f673e27ba7405d23a2dabc32d29d2  libgfortran/generated/cshift1_4_i2.c
! ea7131b15ca55b4e16da020ee5236c98  libgfortran/generated/cshift1_4_i4.c
! 7e2e59ebeefd26d2317d8ed30b1a35fc  libgfortran/generated/cshift1_4_i8.c
! 086955d78b8825d39c9825f0f3a45d60  libgfortran/generated/cshift1_4_r10.c
! 4fc5aa2fe25e4bf701cd26abbb8ce47b  libgfortran/generated/cshift1_4_r16.c
! 367c3f0ab539cfbb4a981c33970877b4  libgfortran/generated/cshift1_4_r4.c
! d272c7bb597e2de4dced8771d5223835  libgfortran/generated/cshift1_4_r8.c
! 4809f55dc646251e9032b5719cbf01df  libgfortran/generated/cshift1_8.c
! 7ee74379b842df59d1e9ec4ebf2110dd  libgfortran/generated/cshift1_8_c10.c
! d53e9a408ee78415c5f54a76ef8d87dc  libgfortran/generated/cshift1_8_c16.c
! 4dae9e2e173336da7ae3ec8f403bceeb  libgfortran/generated/cshift1_8_c4.c
! 58ad996f54b1266528ea409b06e8eb25  libgfortran/generated/cshift1_8_c8.c
! dcf4795ea071dae456dfa2345350b967  libgfortran/generated/cshift1_8_i1.c
! 14c23bbc18e092eaaf2eea342fc8daa2  libgfortran/generated/cshift1_8_i16.c
! 655301c2fdcf25193d0687845904b389  libgfortran/generated/cshift1_8_i2.c
! 9316a0d528ec6d7cfcbd6f653a9cdf76  libgfortran/generated/cshift1_8_i4.c
! 05edeb9f08a0ac9b2babcc2aaa52320d  libgfortran/generated/cshift1_8_i8.c
! f1ecbf0f00d864ea359569549bf330da  libgfortran/generated/cshift1_8_r10.c
! d4890df251ed016124f03694b60e87f9  libgfortran/generated/cshift1_8_r16.c
! fb1803975262c0f1affe2e42cb0c896a  libgfortran/generated/cshift1_8_r4.c
! 5aef1a18ef1edd18d6112f64dafba719  libgfortran/generated/cshift1_8_r8.c
! 64aff0d0cff3f552887113f0746a4bd1  libgfortran/generated/eoshift1_16.c
! 3bda8acee8e7fb3c754cc6d94a471e8c  libgfortran/generated/eoshift1_4.c
! ad6aa69770d940288672c7222142b42f  libgfortran/generated/eoshift1_8.c
! af049e243cbca64b50747408f0349bb0  libgfortran/generated/eoshift3_16.c
! ab47cd519086798ffe2efcac08fe3df4  libgfortran/generated/eoshift3_4.c
! 200fdbd2245be0ac1a4779d5a2d4ffd8  libgfortran/generated/eoshift3_8.c
! 76d63cb43aa71b70c0cfcbcb74051733  libgfortran/generated/findloc0_c10.c
! 676469082208e3dc16bd1214379394bd  libgfortran/generated/findloc0_c16.c
! ed47f471c830717eb61e0013ca5a94e7  libgfortran/generated/findloc0_c4.c
! f930a324a4e698cb647d315234935cfa  libgfortran/generated/findloc0_c8.c
! 6a4c9803ea72969432e9d98fe3d09144  libgfortran/generated/findloc0_i1.c
! 0edaff49c17e8412e2382f1b1466ff75  libgfortran/generated/findloc0_i16.c
! a59882d71a699fe41f597afddb9f185a  libgfortran/generated/findloc0_i2.c
! bf2d61aa49ea201449c0d50770086be5  libgfortran/generated/findloc0_i4.c
! d59aaad4f13128fe3864c91f06e0e8d9  libgfortran/generated/findloc0_i8.c
! 2cd334d0253356951a3b32a6e015f055  libgfortran/generated/findloc0_r10.c
! 72f53732c4e1627c6c489a78c66af850  libgfortran/generated/findloc0_r16.c
! 907cbd3b19b4414a6090643d1f152ce2  libgfortran/generated/findloc0_r4.c
! 7d81fff2a5b9bb37d40860adece07f30  libgfortran/generated/findloc0_r8.c
! edc28bcf7c0a95c49628dc045a4c9942  libgfortran/generated/findloc0_s1.c
! ec3f836d79f191bb8113965e4b45db51  libgfortran/generated/findloc0_s4.c
! 2533a8530a570784fb7ff0f381adbebc  libgfortran/generated/findloc1_c10.c
! 6a7941a411ec8df45613bbb5dc90573a  libgfortran/generated/findloc1_c16.c
! b4395ab4a060d7065a99c17ca1faf388  libgfortran/generated/findloc1_c4.c
! 0842d7226b0c44aa845d149a0181a811  libgfortran/generated/findloc1_c8.c
! 74a666dd168b7abd64b8500ac7e02410  libgfortran/generated/findloc1_i1.c
! 9bd1966f54622cf783dce357dec14df5  libgfortran/generated/findloc1_i16.c
! e6af5db54f14c2f70871b8b3a50780f6  libgfortran/generated/findloc1_i2.c
! f3f3e67dc0232422ee54a3f143b6f1fc  libgfortran/generated/findloc1_i4.c
! 240c398c9a8a87fe8c0e0ef5f4b4ad76  libgfortran/generated/findloc1_i8.c
! c983c21d2a17fcbd8b01b7301e325b28  libgfortran/generated/findloc1_r10.c
! d25a8bd183afc98d832adad4aeccef09  libgfortran/generated/findloc1_r16.c
! e0b584374906ab02407369ac57d9a379  libgfortran/generated/findloc1_r4.c
! 6925f69ac494bc84188590b8f944c6c9  libgfortran/generated/findloc1_r8.c
! 5907c104223bac362f6f71d38b662f63  libgfortran/generated/findloc1_s1.c
! bfb03ef28ec998b4c8f0a72928468b6a  libgfortran/generated/findloc1_s4.c
! 156099b661f8660072cd565c3d16d354  libgfortran/generated/findloc2_s1.c
! 99d9c95bf4d1d19a408b233a6ea1fb3e  libgfortran/generated/findloc2_s4.c
! 46f729bc06cc5d12d471f71d9890e888  libgfortran/generated/iall_i1.c
! fab09daaadc9dd7ebb49b99a49cd61b8  libgfortran/generated/iall_i16.c
! 915eff49c56931b718221672484be17c  libgfortran/generated/iall_i2.c
! c4df9412107b3a75d2df8d3521925132  libgfortran/generated/iall_i4.c
! f30bed00e0e8d6c0801baa7beb6180de  libgfortran/generated/iall_i8.c
! 9af02360355e9e67faf39c97ce87c97f  libgfortran/generated/iany_i1.c
! d2f58f57e4643b09cea1062214c54316  libgfortran/generated/iany_i16.c
! 45d97f24086edc0c1541e311aac21157  libgfortran/generated/iany_i2.c
! 78208b50d47fbbb7463953f9da24e997  libgfortran/generated/iany_i4.c
! 16891125e1d5d85fc55953bfcb2a9ddd  libgfortran/generated/iany_i8.c
! 688e51bed59229df317775dde8cae84f  libgfortran/generated/in_pack_c10.c
! 0542bf18520509ebabcd2fdc955d63cc  libgfortran/generated/in_pack_c16.c
! 09cb0b374f009bafe3ba5107bc5c8f8b  libgfortran/generated/in_pack_c4.c
! 0aadf674cf35e0e1d9f244f5ae080ccd  libgfortran/generated/in_pack_c8.c
! 62026b375ddc14114bc17c58066186ab  libgfortran/generated/in_pack_i1.c
! 6dda90a2722e0c1c9bc5b91169731a25  libgfortran/generated/in_pack_i16.c
! 9cf86d0652da435029b5de330319c325  libgfortran/generated/in_pack_i2.c
! aa65b44e6cf75767a25806c4fbd83f28  libgfortran/generated/in_pack_i4.c
! 3c29883faa26e1021b33a5a666878911  libgfortran/generated/in_pack_i8.c
! cfbb23758317f66fedae573e9bd3af7d  libgfortran/generated/in_pack_r10.c
! 2d72713b76014a622abc59d9ff3d086c  libgfortran/generated/in_pack_r16.c
! 4e1cdc62af5e0b0d26c4ea7a3e903639  libgfortran/generated/in_pack_r4.c
! e39a22941df81af56b227803db4760c9  libgfortran/generated/in_pack_r8.c
! ac01a512d61313548d20bf5f34de3bc8  libgfortran/generated/in_unpack_c10.c
! 7fd4ed593dc90b01ff390298eb60e2bb  libgfortran/generated/in_unpack_c16.c
! 2d58e36eb2573d66e4a2c42d71fdc543  libgfortran/generated/in_unpack_c4.c
! 9a79768d1a2bbc26362391cedeff3846  libgfortran/generated/in_unpack_c8.c
! c10da51edb867acd99836d6c7a4aad20  libgfortran/generated/in_unpack_i1.c
! 30d3f98663a12afef5b17d547e5b3b28  libgfortran/generated/in_unpack_i16.c
! 0bdfb478fe3a04f202efe43728ccf285  libgfortran/generated/in_unpack_i2.c
! 7ab6ecae8c8b1a7008594afefbb8f572  libgfortran/generated/in_unpack_i4.c
! 049bca92650e0a34bfe545e73a0b414e  libgfortran/generated/in_unpack_i8.c
! 45baa6dfe33048034b61604568289b07  libgfortran/generated/in_unpack_r10.c
! 95c129d90e49e4ec314c817090ff7a3c  libgfortran/generated/in_unpack_r16.c
! 2d7af624766760bc8649988e76396e85  libgfortran/generated/in_unpack_r4.c
! 7e4589c25b0db7cceb5062d0a4d3b9f4  libgfortran/generated/in_unpack_r8.c
! bea1bafdc710f988d9c2af44d4a6b6bb  libgfortran/generated/iparity_i1.c
! 57d181a09e83b890a6a1eb93f0674f70  libgfortran/generated/iparity_i16.c
! af7bc1960a96dc321742c793125acdca  libgfortran/generated/iparity_i2.c
! 19329fae15eb54ff4df43f705ab669f8  libgfortran/generated/iparity_i4.c
! 53a832f45c1c33486a7f1cda6851b8f8  libgfortran/generated/iparity_i8.c
! 445d95e7c57cde1e76ac3b75240928ec  libgfortran/generated/matmul_c10.c
! 28c2e151aca1c469f8e75162c4421362  libgfortran/generated/matmul_c16.c
! 891d88d9fd9b887fe8dce0ab3c27e85a  libgfortran/generated/matmul_c4.c
! e8b7556043cd46a20ede897e11714125  libgfortran/generated/matmul_c8.c
! 578c304c90a1479d894c70b56907d37a  libgfortran/generated/matmul_i1.c
! 8a53c021daaacb219d8e81719c838788  libgfortran/generated/matmul_i16.c
! 1c838d040b45633dcccdc1254cfeb5cf  libgfortran/generated/matmul_i2.c
! 47c63e6cc593bf43f34e030759dd6f0c  libgfortran/generated/matmul_i4.c
! e8a453b657c1a58d98bc765c7d1b0ed8  libgfortran/generated/matmul_i8.c
! 7bf048626dba6eebaaf5a679e4b17248  libgfortran/generated/matmul_l16.c
! d731caf94c1f68235fe85d754fe500e0  libgfortran/generated/matmul_l4.c
! c296df0d240973f7a5a2e9fc76f41b4d  libgfortran/generated/matmul_l8.c
! 4b53114fd2dc8256227eb168914d7d06  libgfortran/generated/matmul_r10.c
! 1187cb7a65194d75fa1f2c8068c44ded  libgfortran/generated/matmul_r16.c
! c154a16b0907f8c7dc4868516ae1df26  libgfortran/generated/matmul_r4.c
! 644ce46e8de96004b3f546e0dadd9d29  libgfortran/generated/matmul_r8.c
! c37453cd50d82de3cc8d6d57bb1197a0  libgfortran/generated/matmulavx128_c10.c
! 65ce3f7ed6f36a12c5256165b3e67537  libgfortran/generated/matmulavx128_c16.c
! d521dc7fcab092fc2e8bd35082b6f38b  libgfortran/generated/matmulavx128_c4.c
! 9a2fca39706fc1b45268f2ab875ed77a  libgfortran/generated/matmulavx128_c8.c
! 923d758c664814d2244a4883e057893b  libgfortran/generated/matmulavx128_i1.c
! c549e88abb44e9dbe0df91974fcf584c  libgfortran/generated/matmulavx128_i16.c
! 7b701cfc02bd0854ad03bda67b038719  libgfortran/generated/matmulavx128_i2.c
! a92fd5c53a14085ab317cdef1ed2f71b  libgfortran/generated/matmulavx128_i4.c
! 8dd3916f5d409ead8ef9d0a731ac4860  libgfortran/generated/matmulavx128_i8.c
! 8acfddff15b17470d184d1824f59f88d  libgfortran/generated/matmulavx128_r10.c
! 7aa1f5d1c22ea8eedc33feb47b006ed7  libgfortran/generated/matmulavx128_r16.c
! 1f16c9c75477b30c8694621ac687c8ae  libgfortran/generated/matmulavx128_r4.c
! 734990298d1029e588f1dd6c9154f87b  libgfortran/generated/matmulavx128_r8.c
! ce8720c61253b565e7e452bf75b1028e  libgfortran/generated/maxloc0_16_i1.c
! 425e0751705b1e46dae2e11553449138  libgfortran/generated/maxloc0_16_i16.c
! 361ab6e3ad11169f1836a7e8695cd3ce  libgfortran/generated/maxloc0_16_i2.c
! 97b2d263c620da3a981473d1300abe8f  libgfortran/generated/maxloc0_16_i4.c
! 57bed9abee11e4a71918c6df263b8c5f  libgfortran/generated/maxloc0_16_i8.c
! cca36e207327b27ec94cefd20e258940  libgfortran/generated/maxloc0_16_r10.c
! ef1b7d16ed81ea862732643b0cc7947e  libgfortran/generated/maxloc0_16_r16.c
! f7aa9eac24af810827272fce18ce5146  libgfortran/generated/maxloc0_16_r4.c
! 4eab95fd39e4c942935b5b0203a2d9e4  libgfortran/generated/maxloc0_16_r8.c
! bbf93fb69e1af405ec71c33ece31762b  libgfortran/generated/maxloc0_16_s1.c
! 638a4bbd23438936924de6771c15dd28  libgfortran/generated/maxloc0_16_s4.c
! 3327fc72f9832676001aaea5269aa5e8  libgfortran/generated/maxloc0_4_i1.c
! 36563416aada0d6a7f255019f54378d2  libgfortran/generated/maxloc0_4_i16.c
! 4b27404074bc8c423a648b1735c12c68  libgfortran/generated/maxloc0_4_i2.c
! 187267fc944548357652a39ef983592b  libgfortran/generated/maxloc0_4_i4.c
! e33037e45c8e88ee0451f1d32e6af188  libgfortran/generated/maxloc0_4_i8.c
! 30b7325c00a5c3fa1f806e4d73a7d743  libgfortran/generated/maxloc0_4_r10.c
! a7805a1724007d42b5c3654ee6a40ca2  libgfortran/generated/maxloc0_4_r16.c
! 2dec14103d98330ad4b1cafbfe2530fb  libgfortran/generated/maxloc0_4_r4.c
! 740e63e8e24de83bc4996979b32f8cec  libgfortran/generated/maxloc0_4_r8.c
! 023699ab96ad27bdc325c6b83925a54d  libgfortran/generated/maxloc0_4_s1.c
! d0f637e8fdfd456e4cc98754a9a57e8f  libgfortran/generated/maxloc0_4_s4.c
! 24c5754699dfad8dcfda03173ea057ca  libgfortran/generated/maxloc0_8_i1.c
! a0e1e9fe34483b59071b6974ec3e631b  libgfortran/generated/maxloc0_8_i16.c
! 859072d951e151e010acefad8e024b11  libgfortran/generated/maxloc0_8_i2.c
! 2d777232eb5cc8ab0dbdc5a721daaeff  libgfortran/generated/maxloc0_8_i4.c
! 45f31edd29d5c374c8cd15c921b901e6  libgfortran/generated/maxloc0_8_i8.c
! 5f9ea1e9f142c3e1a458e5dbf3454772  libgfortran/generated/maxloc0_8_r10.c
! 11585aab4f5137f2f79a318ec4f76183  libgfortran/generated/maxloc0_8_r16.c
! 26168b4747ebf47331dbbafd8f4529f3  libgfortran/generated/maxloc0_8_r4.c
! 239d027d22d2547f989c49d004f2834c  libgfortran/generated/maxloc0_8_r8.c
! 520379bd36d01453515a4fc110ff53cb  libgfortran/generated/maxloc0_8_s1.c
! 948d1708822280b760ff26deff200abe  libgfortran/generated/maxloc0_8_s4.c
! 7d1ff3a0a96923637f19e4fd4cd13f7a  libgfortran/generated/maxloc1_16_i1.c
! b947cc39b720ec955e18a3863d7ea436  libgfortran/generated/maxloc1_16_i16.c
! 24c3fe9254bb5d8b3bedef9c66e9b0ef  libgfortran/generated/maxloc1_16_i2.c
! 6d3ecf27dc64bfc371fe0f16cf8be793  libgfortran/generated/maxloc1_16_i4.c
! dee415814dbe34d40016e5fe319c3a65  libgfortran/generated/maxloc1_16_i8.c
! 7cbb87e1c959420d48777b547ef74770  libgfortran/generated/maxloc1_16_r10.c
! c5fa803482b003058696f05c02b09530  libgfortran/generated/maxloc1_16_r16.c
! 19125073a102330b5a6c46eaa3793682  libgfortran/generated/maxloc1_16_r4.c
! 707ea60526e13c03afaa503b879dd8d6  libgfortran/generated/maxloc1_16_r8.c
! 91606ba7c37a172e94e06f96441e8c75  libgfortran/generated/maxloc1_16_s1.c
! 475c15934d68907af5a42010ced9ee7f  libgfortran/generated/maxloc1_16_s4.c
! c9b195d118f5d316db6c6e127723dc85  libgfortran/generated/maxloc1_4_i1.c
! 620836dd7a0ccae01c5ba7d545207ac5  libgfortran/generated/maxloc1_4_i16.c
! f63ed891aa60214ca8e17deae9600ca0  libgfortran/generated/maxloc1_4_i2.c
! 39caf9fe4accbc367df03982b46844a2  libgfortran/generated/maxloc1_4_i4.c
! d249eafc098e636432f5ca3874f50c02  libgfortran/generated/maxloc1_4_i8.c
! 70d898e96cbe09c76c42e8585c28f8ff  libgfortran/generated/maxloc1_4_r10.c
! 2b96ed982c72cea4faf14185830a81ef  libgfortran/generated/maxloc1_4_r16.c
! 275e118b841eea23bd02b9ce237a249e  libgfortran/generated/maxloc1_4_r4.c
! 1015416c684f7978f9e2ff44d4e1efde  libgfortran/generated/maxloc1_4_r8.c
! 069b14c8f14d47398b3c1f78b6ce765e  libgfortran/generated/maxloc1_4_s1.c
! bd7cbbfcd35c9357d7c51df17af9aaaf  libgfortran/generated/maxloc1_4_s4.c
! 6ff2fd6b3632e3339fd1e32d9505f8dd  libgfortran/generated/maxloc1_8_i1.c
! eff0e4bcc527111692f1745c5a35eb13  libgfortran/generated/maxloc1_8_i16.c
! 389cb399c41baa140fd49db52098794f  libgfortran/generated/maxloc1_8_i2.c
! 7ee9b2abf01a5fab002ddc33a823eb5d  libgfortran/generated/maxloc1_8_i4.c
! dd9b7c87df5428ce1c788fd51be96c3d  libgfortran/generated/maxloc1_8_i8.c
! 01ad8c7d274aad113dd594e8cb66772b  libgfortran/generated/maxloc1_8_r10.c
! 8f3559e48581d888276b11f54b97543f  libgfortran/generated/maxloc1_8_r16.c
! c8edae55d75816d69652492b69fdf63a  libgfortran/generated/maxloc1_8_r4.c
! e3ed38c09b0152da22ef602bb89bb3d6  libgfortran/generated/maxloc1_8_r8.c
! 52851568cc59414f42715c3d7febc5c1  libgfortran/generated/maxloc1_8_s1.c
! 16cb403f25719ca19d902492bef38ced  libgfortran/generated/maxloc1_8_s4.c
! 0aca1c7b5a48ac045fbfd5fb1d3fa261  libgfortran/generated/maxloc2_16_s1.c
! fbe4670d1de5945b7f13b1741bda4dd2  libgfortran/generated/maxloc2_16_s4.c
! 6889bbe560b3718936c5ef4571fb2869  libgfortran/generated/maxloc2_4_s1.c
! c9750ff69bf3dadc45f2754ae3b01e99  libgfortran/generated/maxloc2_4_s4.c
! c35437dc3b15819e72f0f0a7e2af497b  libgfortran/generated/maxloc2_8_s1.c
! d8c78144d06b65556ebf6c33e7979c56  libgfortran/generated/maxloc2_8_s4.c
! a307f168c0492c48bd2af958a0d9256b  libgfortran/generated/maxval0_s1.c
! 3ebe44a56597ec092f28b8c99f39f811  libgfortran/generated/maxval0_s4.c
! bd895c6129ffcb343024ffc4260850bc  libgfortran/generated/maxval1_s1.c
! 93cdbad26ab59617db8a257d72c62101  libgfortran/generated/maxval1_s4.c
! 91eaa3cfa34ef9443cde4352f7bd418e  libgfortran/generated/maxval_i1.c
! 9db0b2591c7ea99ba05b41f45abae389  libgfortran/generated/maxval_i16.c
! a5dbeaccdcce71af8e3c46d3a34fa373  libgfortran/generated/maxval_i2.c
! 27c50304f01f5189c6aac61c3a175de3  libgfortran/generated/maxval_i4.c
! 1c415ab91bc8963360efe5af88e49b15  libgfortran/generated/maxval_i8.c
! 94dcfa614d7371345b18702ef4030d92  libgfortran/generated/maxval_r10.c
! cbe77bb425313df353464c329b29ce78  libgfortran/generated/maxval_r16.c
! a2f52fe0e59122b0cd49f1e4449930c6  libgfortran/generated/maxval_r4.c
! eb2025312220a64dcbdb22fdb22c94d4  libgfortran/generated/maxval_r8.c
! feac16ae51499c4c79d4a683228fc98c  libgfortran/generated/minloc0_16_i1.c
! cc4bf79dc97e0f40b2af7debe7dfa1b8  libgfortran/generated/minloc0_16_i16.c
! 14bbf66b70279d14d61a72bfa494bc84  libgfortran/generated/minloc0_16_i2.c
! 97490fee7875d5d8934b64f9be5074e2  libgfortran/generated/minloc0_16_i4.c
! a5ee6ad982f560151bf497571fc185b5  libgfortran/generated/minloc0_16_i8.c
! 4ee1c2f21f3fc9d182f65b38897d1eb1  libgfortran/generated/minloc0_16_r10.c
! 6dc4aaeb5bbc349f9310b06dd56a8d86  libgfortran/generated/minloc0_16_r16.c
! b817910fed8cdafe9b69219ffaa6ddca  libgfortran/generated/minloc0_16_r4.c
! 74c0d4cda409bd8ea4d6ef4ebc1377c3  libgfortran/generated/minloc0_16_r8.c
! 91fe2e98e316b64617934470e916687d  libgfortran/generated/minloc0_16_s1.c
! 3f0f9c7e1fef7e93cb72872f7ab60e11  libgfortran/generated/minloc0_16_s4.c
! 641ba507760f248b461d1e15212537bd  libgfortran/generated/minloc0_4_i1.c
! c582c2e03a6385bd71aeab6fd3266da4  libgfortran/generated/minloc0_4_i16.c
! f18eaee730c296bef627136265475af0  libgfortran/generated/minloc0_4_i2.c
! 0108a8a8ec24588ee85065e29b7998db  libgfortran/generated/minloc0_4_i4.c
! 05654806b6b8447fcb82053b7911859d  libgfortran/generated/minloc0_4_i8.c
! 7238cc8ecf116ba86cab3e1d610a858d  libgfortran/generated/minloc0_4_r10.c
! df9cf188a3261008e50efa6258446c85  libgfortran/generated/minloc0_4_r16.c
! b59ef463516860e1bdb6cdbc8908b1cd  libgfortran/generated/minloc0_4_r4.c
! dad20635c97c77e8b79455c15d1501cc  libgfortran/generated/minloc0_4_r8.c
! d97e4133a03b4ac0fffdd499f3fb3efa  libgfortran/generated/minloc0_4_s1.c
! ac4910ca78e132227c49fddaccb8d6fc  libgfortran/generated/minloc0_4_s4.c
! 0d99c3af080eb1ad48c480fdb5c42aa1  libgfortran/generated/minloc0_8_i1.c
! 3f9e7fc36fe1ee4464cc75f4a00555ea  libgfortran/generated/minloc0_8_i16.c
! 64bbfa889e765e950022d34a9e6e5b16  libgfortran/generated/minloc0_8_i2.c
! 48199a607a84e0c656f2109b4ed62033  libgfortran/generated/minloc0_8_i4.c
! 94aa5d6b313eb567035eb43b29a65beb  libgfortran/generated/minloc0_8_i8.c
! 5c35a223b93231767f94f336303b6654  libgfortran/generated/minloc0_8_r10.c
! c1fddeff31210924e352ada9646f8450  libgfortran/generated/minloc0_8_r16.c
! c9608fbd944f173cd75fe8019084b529  libgfortran/generated/minloc0_8_r4.c
! 1b785704db62b6ec6f7ecda67f7ff3f2  libgfortran/generated/minloc0_8_r8.c
! 3a12b19a92f4a720b8d7255c6fd3c71d  libgfortran/generated/minloc0_8_s1.c
! 94e15da4ca8805ea721a4f68c953e49d  libgfortran/generated/minloc0_8_s4.c
! feaa9279aeb000218bd7c4d19b2ee4c9  libgfortran/generated/minloc1_16_i1.c
! 8b8928d06d4f50e22f204dd8927cfd82  libgfortran/generated/minloc1_16_i16.c
! 3f82ddff19c072bd2c029ba0be4cc683  libgfortran/generated/minloc1_16_i2.c
! 59cc472a8ffdc7ac7c3bd2397e35f1a5  libgfortran/generated/minloc1_16_i4.c
! be34ada420dba219fc8a511a9683ef6c  libgfortran/generated/minloc1_16_i8.c
! 870878db3779e2097f1380733ca1b71a  libgfortran/generated/minloc1_16_r10.c
! 16da647c7e60a054397bce8c112e53d7  libgfortran/generated/minloc1_16_r16.c
! 6a99b5bea4cb9bd823b1fb1a5f30d3fb  libgfortran/generated/minloc1_16_r4.c
! fd6e5cc63ef941603394957d7c1f73f0  libgfortran/generated/minloc1_16_r8.c
! 15e5be0044bef4101affb054f87fbe1d  libgfortran/generated/minloc1_16_s1.c
! 4fe1e5a6c377914ea3fc64f162a7bb1d  libgfortran/generated/minloc1_16_s4.c
! 7b37bf784af841ecf557b3efb0a7b267  libgfortran/generated/minloc1_4_i1.c
! d82df8b04d26448b4328e51760428954  libgfortran/generated/minloc1_4_i16.c
! db05da3a9737456a37c59afca02584d0  libgfortran/generated/minloc1_4_i2.c
! b70235c0a3cd8ecc9ba38d775d65ed9b  libgfortran/generated/minloc1_4_i4.c
! 30559c995d441049fde4e9c17b0d0d44  libgfortran/generated/minloc1_4_i8.c
! c81a931e36bdeb966c83767fd1f6c125  libgfortran/generated/minloc1_4_r10.c
! b9c3c898070378d1dd6d8873543de1b4  libgfortran/generated/minloc1_4_r16.c
! 7f2e6e208a58e14f552d8aec5b4d04f4  libgfortran/generated/minloc1_4_r4.c
! e22d2c866552fa0545d8493f48ab5288  libgfortran/generated/minloc1_4_r8.c
! 05d62cece902cdb7d8f9976aab3a699a  libgfortran/generated/minloc1_4_s1.c
! 2852d169b91d49311ecd95297c3b091f  libgfortran/generated/minloc1_4_s4.c
! 231da588fab43cdc436888fcc1027755  libgfortran/generated/minloc1_8_i1.c
! c1a550322790b7d8a48850837b433fc3  libgfortran/generated/minloc1_8_i16.c
! 1a985c449629f2a5ce11f3475cd54c11  libgfortran/generated/minloc1_8_i2.c
! 29cffe615266f1b6f7dfd716b1d41e3f  libgfortran/generated/minloc1_8_i4.c
! a0923bea3894df9b62695974cfac948c  libgfortran/generated/minloc1_8_i8.c
! 11848054e16ac332d6260ac1de808f96  libgfortran/generated/minloc1_8_r10.c
! 1ebb1680594377515700b46ee7fa0c89  libgfortran/generated/minloc1_8_r16.c
! 64e75316a312efa4d85cea0f46e05e27  libgfortran/generated/minloc1_8_r4.c
! c3a9b78019959cac21a21d41ffc8b182  libgfortran/generated/minloc1_8_r8.c
! 566ac7827509b4093d3549037389ba01  libgfortran/generated/minloc1_8_s1.c
! 05efb30e928923005833d75f0b3730c8  libgfortran/generated/minloc1_8_s4.c
! 75e47dcb17b731231f825f701d42f999  libgfortran/generated/minloc2_16_s1.c
! 7eb0861bb6257144b3110be5ca462a98  libgfortran/generated/minloc2_16_s4.c
! 01521798c7f1ccaba1caac36c685971d  libgfortran/generated/minloc2_4_s1.c
! 84f8b524535647568c08d3b4bd7bcc43  libgfortran/generated/minloc2_4_s4.c
! 96be08e43149ca7c7f60033ac93f575f  libgfortran/generated/minloc2_8_s1.c
! 13960f71bbbacf2d1a2a575e3898eb1e  libgfortran/generated/minloc2_8_s4.c
! 5549a1fddcbda31ee22b451381dd8756  libgfortran/generated/minval0_s1.c
! 554b3c92d9fdb80c475f14dc37dd6368  libgfortran/generated/minval0_s4.c
! 236f8b405a6a34f9facfc41524576e99  libgfortran/generated/minval1_s1.c
! dd5d07e0a2662207fdba5ff4d96706e5  libgfortran/generated/minval1_s4.c
! c5b6af7b00e314cf69821fabd69a8bcf  libgfortran/generated/minval_i1.c
! ba1dbe9a307d828a4a41dab9a145871b  libgfortran/generated/minval_i16.c
! febcd6d1ee941b16bebc12e1321969d2  libgfortran/generated/minval_i2.c
! 24ac4565920c251c936d815c579c143e  libgfortran/generated/minval_i4.c
! 6147f2072f275265c0b26e6e6cea581f  libgfortran/generated/minval_i8.c
! 759c710a9909bd2b9ed9ea4519c4d741  libgfortran/generated/minval_r10.c
! 0a529545607227c27becb2aaec53850a  libgfortran/generated/minval_r16.c
! bb06ba5b45981065b18d2729e714bbd0  libgfortran/generated/minval_r4.c
! 7491726cec48891c44463e8f21a2a7fe  libgfortran/generated/minval_r8.c
! 66b9c4ad3376c1c483273e6e0ff2c2a2  libgfortran/generated/misc_specifics.F90
! 61e5543c31d31c9633b07e991f8ac85d  libgfortran/generated/norm2_r10.c
! aa1d60036c116f4090ebcc354e399ef6  libgfortran/generated/norm2_r16.c
! 1653c46ef3ab1abc4ce79f3bbdd35a52  libgfortran/generated/norm2_r4.c
! 7ccebe281b9b80838e9c3a79b1d8b9ee  libgfortran/generated/norm2_r8.c
! a96483f16bf1da7be65508ac8d7c4b97  libgfortran/generated/pack_c10.c
! f25508f08bc6897c8b77dbf93c9e8513  libgfortran/generated/pack_c16.c
! 58ff77b19f87bfef93c11b17126436f0  libgfortran/generated/pack_c4.c
! 25eacd5956a5abc1a03bd5a50182a5bf  libgfortran/generated/pack_c8.c
! 27ced1ef1e00665010bfb3cb53585323  libgfortran/generated/pack_i1.c
! 2360de4ee4a049673955b31ee513a52f  libgfortran/generated/pack_i16.c
! 5c99aaf8bdc1af89d3a14c4f7b1351ff  libgfortran/generated/pack_i2.c
! babb7e38ac4f7b6feb67149bf3f41eb9  libgfortran/generated/pack_i4.c
! 2a8b0153688750ba227e8414fde39630  libgfortran/generated/pack_i8.c
! 19bda917a8f0f6880eda92a68d27633e  libgfortran/generated/pack_r10.c
! cdb2a55109bdd7bf2010d3d4ac31cd5a  libgfortran/generated/pack_r16.c
! cb71fc2bf954f25e64efce7f3ca1f3ef  libgfortran/generated/pack_r4.c
! 3ee4745452d36d3bc38f67443dc6140f  libgfortran/generated/pack_r8.c
! e73058951aae9db3195bde1b16d474dc  libgfortran/generated/parity_l1.c
! 881d697efdf815387d001fb3903651a7  libgfortran/generated/parity_l16.c
! 9fb97d9cf2e5d80223e41f9b3e7087ad  libgfortran/generated/parity_l2.c
! 531a67befa572bccef834302f4d4012a  libgfortran/generated/parity_l4.c
! c091f92d5d50bb894badda5bced7f034  libgfortran/generated/parity_l8.c
! f187045015310fd852732f67d17fe1ff  libgfortran/generated/pow_c10_i16.c
! 3c749039f9216426b39bbdacc78f50ec  libgfortran/generated/pow_c10_i4.c
! 478be541723153a0f216513110ec526e  libgfortran/generated/pow_c10_i8.c
! e291f5e121534c24fc429937d7f5d172  libgfortran/generated/pow_c16_i16.c
! 40f0a249dfa89928687b001167532e1d  libgfortran/generated/pow_c16_i4.c
! decfef0ed0bc868e1773ddf82d6cf8ea  libgfortran/generated/pow_c16_i8.c
! 8a27ca324635a00b2a7c5ff8017e5c65  libgfortran/generated/pow_c4_i16.c
! d12c3387658254562ad04cba3d1e0255  libgfortran/generated/pow_c4_i4.c
! 8b468d954a788da3bc425019146850a6  libgfortran/generated/pow_c4_i8.c
! 1f9e464602e31f166c1812af953ab70d  libgfortran/generated/pow_c8_i16.c
! fa84a1eef16db20fcca586cbfca1d187  libgfortran/generated/pow_c8_i4.c
! 0cbe9afab2ac933e0a9c9c487e365cb6  libgfortran/generated/pow_c8_i8.c
! 92a3aefd3ee981bd4fe98f9b31233f28  libgfortran/generated/pow_i16_i16.c
! 3e661d5ac035b4e08c3bee0e75d27c46  libgfortran/generated/pow_i16_i4.c
! 53ac871e4ec0f513114f3a6600922c94  libgfortran/generated/pow_i16_i8.c
! 752ec98d305e1cd863d158a5515f87fc  libgfortran/generated/pow_i4_i16.c
! c34913ac79379557d8ea6ba267ab8eb8  libgfortran/generated/pow_i4_i4.c
! e6245f9ac5eea4631f71d91eba9d720b  libgfortran/generated/pow_i4_i8.c
! 8566c976c54dc3fbe63dc3ac47a4e928  libgfortran/generated/pow_i8_i16.c
! bf91333745dce9097d0a6ac0566df923  libgfortran/generated/pow_i8_i4.c
! 28aab4c32ebea6a9b796e97185b5d589  libgfortran/generated/pow_i8_i8.c
! 7fff1f26034119993e531eb5150d3ab6  libgfortran/generated/pow_r10_i16.c
! d37bcc59e1035c19152bd5674bace67d  libgfortran/generated/pow_r10_i8.c
! 60905e7735a3bf56ca5ba0fa3e7cf186  libgfortran/generated/pow_r16_i16.c
! 864e782099c8b639a002d070271c3992  libgfortran/generated/pow_r16_i4.c
! 6f1cc32faed159919f23e28fe61ee088  libgfortran/generated/pow_r16_i8.c
! 19cb5f9871bf29b27c9a31eef44ab4ab  libgfortran/generated/pow_r4_i16.c
! 0ff6a9817b37e05e4b05d9f46e1feb0f  libgfortran/generated/pow_r4_i8.c
! 3b4a0a849e3f0ed26e0f9ec070f81703  libgfortran/generated/pow_r8_i16.c
! f75029104ef432f00f85b482f90202c0  libgfortran/generated/pow_r8_i8.c
! bb7c25d163090f5733bad952bb93642a  libgfortran/generated/product_c10.c
! 4b0503c3d18a64e43ebe2684b082f84c  libgfortran/generated/product_c16.c
! 6d6a8dd701234d2b97d0af6a4ba3dd51  libgfortran/generated/product_c4.c
! fe85438720e06c1b0ff039dd38156004  libgfortran/generated/product_c8.c
! aea1124e8ba1e6c6c23a04afc63a4890  libgfortran/generated/product_i1.c
! 89c9c31ec8df6b17b3cf41ef0a4e4f4b  libgfortran/generated/product_i16.c
! 0ac065ea57f2745c7139488273a89a3d  libgfortran/generated/product_i2.c
! f57db4da0759d460448ae5aebab6d3b7  libgfortran/generated/product_i4.c
! fa3c70c78b454406d26783c470a140a4  libgfortran/generated/product_i8.c
! 5d0833280e829e598bd7a4ed42ca06c4  libgfortran/generated/product_r10.c
! 9f079c53481bcadcce77d1347ac3dcfc  libgfortran/generated/product_r16.c
! 3c0337716cefb09f0f7a1796e88cb83a  libgfortran/generated/product_r4.c
! f70b2c6fe67c1acfaeece0111afe95ff  libgfortran/generated/product_r8.c
! d57d03a61194fc7c0161cb8b37acff92  libgfortran/generated/reshape_c10.c
! 9d3d66259a7f1175a0ece984f8bea41c  libgfortran/generated/reshape_c16.c
! 455c404ec8c045e3fd703dad58892306  libgfortran/generated/reshape_c4.c
! b07bd738facf41b2232ba38b9f583f7e  libgfortran/generated/reshape_c8.c
! 5f6f2af882dd153e50dee0e2bafd2338  libgfortran/generated/reshape_i16.c
! be3a92cf0936d0367e754f5f7b611b9a  libgfortran/generated/reshape_i4.c
! 33423a4e96ff8bea2d1a5f0582ab2a6a  libgfortran/generated/reshape_i8.c
! ee68cbc116004c6e1059b9945f4e5286  libgfortran/generated/reshape_r10.c
! fe337b8d42b62bdd0fe969a3a1372177  libgfortran/generated/reshape_r16.c
! 236909741c69436dd4dbf6180148a8a2  libgfortran/generated/reshape_r4.c
! de7c6d363b4eff1700d1a02167892813  libgfortran/generated/reshape_r8.c
! c42463f4d91a9a54f46eb04d5c511522  libgfortran/generated/shape_i1.c
! 34df0ad42a7c4e44b1eb79c9fc286e8d  libgfortran/generated/shape_i16.c
! fd7299ef0c285ad8d134fe169a0b2ca2  libgfortran/generated/shape_i2.c
! e09d46014747d8aad8decd290f210283  libgfortran/generated/shape_i4.c
! 75770d9c64ca4e3c85e5196a0b88712c  libgfortran/generated/shape_i8.c
! 7495c98a50bd6bbc599c9be7176455b6  libgfortran/generated/spread_c10.c
! 61cb8cb56c2bb51e6c9e8e78ea36a356  libgfortran/generated/spread_c16.c
! c0d9537d513eb940906412b1ad178a28  libgfortran/generated/spread_c4.c
! e9db0b85fc64dddb157a4f26b5234118  libgfortran/generated/spread_c8.c
! 41e615f16f1e27a2f936dfd908bafc29  libgfortran/generated/spread_i1.c
! 2310cba92bb8a24b15108b1bf1ae092d  libgfortran/generated/spread_i16.c
! 1cbd2bc7f4d728ace2d64f9d62df95e4  libgfortran/generated/spread_i2.c
! 86019786f18247ebbf1cd2e9dfd957b2  libgfortran/generated/spread_i4.c
! 85cbb33d6a913e2773e04b6396fc3e13  libgfortran/generated/spread_i8.c
! 80892179732207e436e7c3b13aed09fe  libgfortran/generated/spread_r10.c
! 02720764a463c26a513ad34472dd00b7  libgfortran/generated/spread_r16.c
! 784ddf8ee096465c976b7a5d129db018  libgfortran/generated/spread_r4.c
! 80ca2fb412cef0f8b533af2eaa41b808  libgfortran/generated/spread_r8.c
! 4f67dd49a0c55e123c3b4b2e543eb3dd  libgfortran/generated/sum_c10.c
! f28ef98e3fb32af40ee9e72578370137  libgfortran/generated/sum_c16.c
! 5ae4122f7fe93d09eda1b2432bb69c90  libgfortran/generated/sum_c4.c
! d8177a335ba215b8de4b75afb46025ec  libgfortran/generated/sum_c8.c
! b580ec68c03b36a560a58a0c49f48308  libgfortran/generated/sum_i1.c
! e9c85c9976d3e2c1f962a2b9f3a1cd23  libgfortran/generated/sum_i16.c
! 88c00e8ecedeffdb050d6e44c1ee6bc4  libgfortran/generated/sum_i2.c
! 3d98b3573185ff52f439c7347f1512dc  libgfortran/generated/sum_i4.c
! 2aba9dd98b46f2beb64449f7fee56080  libgfortran/generated/sum_i8.c
! 279607123b7670117e2da4b9e2f9a0d2  libgfortran/generated/sum_r10.c
! 4b55ab87efdff6a94a5adc09075b95ee  libgfortran/generated/sum_r16.c
! f8fe14a96f91f371fdc507b7f8791757  libgfortran/generated/sum_r4.c
! 2d67df0b7d393239856d2e82180cedcd  libgfortran/generated/sum_r8.c
! 3fbf83795404448eb0f4a8e3f966afd9  libgfortran/generated/unpack_c10.c
! aaf9be8a71fb07160d5ccb7b2f524896  libgfortran/generated/unpack_c16.c
! 6b43b16b405700182af2e35740f18805  libgfortran/generated/unpack_c4.c
! cd723c1f5abf8b604b94acbe26b14985  libgfortran/generated/unpack_c8.c
! 019b8a3d90850783d1bd9a50e6eab91f  libgfortran/generated/unpack_i1.c
! 579e8afc192c5ec35fb40d01becb104c  libgfortran/generated/unpack_i16.c
! 04eb263d8f85c9983606cb13764d74cb  libgfortran/generated/unpack_i2.c
! 9049319250f15464ccf4cddd1eed6a36  libgfortran/generated/unpack_i4.c
! 77294ea7db77f3b29551a0c12f04cbfc  libgfortran/generated/unpack_i8.c
! 29863427456625e5b63a58b60300a174  libgfortran/generated/unpack_r10.c
! 2cbc4f141f4ded29de7798e158b336ea  libgfortran/generated/unpack_r16.c
! 5524c777b64d0d5b3099db15dce793b8  libgfortran/generated/unpack_r4.c
! 5d8121d97c06a4a98d6ad7eea0e472ba  libgfortran/generated/unpack_r8.c
! 83d9ce8bc6362002d969906c396e5fbc  libgfortran/gfortran.map
! 6ca686d00386f09c4b5437fa9b25f5fb  libgfortran/ieee/ieee_arithmetic.F90
! 270cd615860fb4bb40a3c57684b22281  libgfortran/ieee/ieee_exceptions.F90
! 19dad6085ff50b858e2ae14423da8a96  libgfortran/ieee/ieee_features.F90
! 1ba772814bf2bbc5a1f84b10931d04f5  libgfortran/ieee/ieee_helper.c
! 7600b994094e313562aa74e66e7ff106  libgfortran/intrinsics/abort.c
! 2129ea130e3ff55f125e6914c4fa9ab9  libgfortran/intrinsics/access.c
! c968aca1ae1b478f0290afef46437295  libgfortran/intrinsics/args.c
! 33855478a44a55454ae2bdb897b2fe77  libgfortran/intrinsics/associated.c
! b5047168a09d6d3a88dd0d64d4919485  libgfortran/intrinsics/c99_functions.c
! 15304595a06f2e51a8a3c3846ad583ea  libgfortran/intrinsics/chdir.c
! 0c4305f11b2d4a11651903bb3996657a  libgfortran/intrinsics/chmod.c
! 55514b29b2410648f10ebf3cd1749cca  libgfortran/intrinsics/clock.c
! 45d898d09b4a1141936eda74eb934b7e  libgfortran/intrinsics/cpu_time.c
! 8a504e9967f327578a9ef19ba5f5ebe4  libgfortran/intrinsics/cshift0.c
! 7fa362f970b082e279c2c5584b0893b6  libgfortran/intrinsics/ctime.c
! 05ae2511575fb2074ef1280d2c2f5c92  libgfortran/intrinsics/date_and_time.c
! 99763d63aef512508f050a0fda6b2de7  libgfortran/intrinsics/dprod_r8.f90
! 342e7724f1d97d2738093e76b789e969  libgfortran/intrinsics/dtime.c
! 126b3358e9ae20818825cf265f4fdd60  libgfortran/intrinsics/env.c
! 1e0a02038243d39e569213c719a4c8b5  libgfortran/intrinsics/eoshift0.c
! 43c39a234a48f616edd6b8b3f549dfcf  libgfortran/intrinsics/eoshift2.c
! 35d92f4abb7617c3799bf165b17c8259  libgfortran/intrinsics/erfc_scaled.c
! 9dc172c4bf3b75cec616c4ef644417de  libgfortran/intrinsics/erfc_scaled_inc.c
! 03728a525290c11f06fb4437a2f64b85  libgfortran/intrinsics/etime.c
! 9ce03899aa0a1bcd584ce99983a95b1a  libgfortran/intrinsics/execute_command_line.c
! 18a574c28f3edaf4ba2fa9cbd484637a  libgfortran/intrinsics/exit.c
! 1c646279eb1b3ae77d5c7ac9c8b217ac  libgfortran/intrinsics/extends_type_of.c
! 7eb40a46f03d87cf54b2d73ed1a8ea16  libgfortran/intrinsics/f2c_specifics.F90
! 965038df756f9d73b316049c778a53fe  libgfortran/intrinsics/fnum.c
! 7c0d647d4b59ed4d35177084d3cd47be  libgfortran/intrinsics/gerror.c
! f4b1c65cb5551df09e51b9af150df9c4  libgfortran/intrinsics/getXid.c
! 997dd966ac063a52af1d628e92637d87  libgfortran/intrinsics/getcwd.c
! 065523aad9da58649d9f675d72fa22b2  libgfortran/intrinsics/getlog.c
! d453c9ba8b715f1cb5b701f009604ade  libgfortran/intrinsics/hostnm.c
! 52e7c2b8dc4626b9ee21e0613d33e09b  libgfortran/intrinsics/ierrno.c
! d36965d98a3961ac7aafd6c08cf76dd8  libgfortran/intrinsics/is_contiguous.c
! a865405049d84fd076beeecff4a3b4ad  libgfortran/intrinsics/ishftc.c
! 4806cec0c7a82cc15b403cf45700d5e7  libgfortran/intrinsics/kill.c
! ef9e78095a4b1a8517a1da6031a1be25  libgfortran/intrinsics/link.c
! efa969309794305d19fe430a26a5386a  libgfortran/intrinsics/move_alloc.c
! 36cf7b0beb0c08e56ff9049e8a93ef45  libgfortran/intrinsics/mvbits.c
! d87cab8c3b37ae3910ae7eefe6a6855c  libgfortran/intrinsics/pack_generic.c
! 8a0226775787cd399fb29d2c0f304e26  libgfortran/intrinsics/perror.c
! 2fcd369a7083de5944cfbc9de36f05db  libgfortran/intrinsics/rand.c
! aa9e566ce2905000961dce7bcb442a45  libgfortran/intrinsics/random.c
! 0ed9da7856ce044c0496100cb4ea572d  libgfortran/intrinsics/random_init.f90
! 54b94cf96b8bd536f201922fdcf3c88e  libgfortran/intrinsics/rename.c
! 6e0286e46ab64d25009a812000c0fe4c  libgfortran/intrinsics/reshape_generic.c
! e05ecb57e117a160248ad5295fdcbf18  libgfortran/intrinsics/reshape_packed.c
! 93a60eb3da310e7967aca932b176906d  libgfortran/intrinsics/selected_char_kind.c
! 464e5aaca9067594034d5f92f3e78f17  libgfortran/intrinsics/selected_int_kind.f90
! 67981f5758828a5b98ef88212657b0c0  libgfortran/intrinsics/selected_real_kind.f90
! cb1cee808e3bff3fd60dbc09a6f7001e  libgfortran/intrinsics/signal.c
! 34db5e746d06ca6b2c535cb3d209f31c  libgfortran/intrinsics/size.c
! b428ae783d9d407ebe2bd0ee983514a7  libgfortran/intrinsics/sleep.c
! 9e4d41f4e9ee5dc00fe43392b32cd7f4  libgfortran/intrinsics/spread_generic.c
! 30d3b13053d9119543b3fbf1e3113845  libgfortran/intrinsics/stat.c
! 291bd77cea06de38529cff8d960a3470  libgfortran/intrinsics/string_intrinsics.c
! b5de9b6463b57def1f1e733d39717225  libgfortran/intrinsics/string_intrinsics_inc.c
! 1950a28202803dc5e331abb12ad21699  libgfortran/intrinsics/symlnk.c
! 5e9bc4fa36c747793c9c00c02ef356a1  libgfortran/intrinsics/system.c
! 8492966997d3b4202371ade34d3e9dac  libgfortran/intrinsics/system_clock.c
! 1a6fa447aff1932ba9fdd6191713a786  libgfortran/intrinsics/time.c
! 7055d779550accee03c8b7ae54beb404  libgfortran/intrinsics/time_1.h
! bfa3afdeb04b0a3c1f1600d75fbe0b66  libgfortran/intrinsics/trigd.c
! 3470a047e1f2a7d5e70d547bf06deb65  libgfortran/intrinsics/trigd.inc
! 96cc0ff2e078027dbd9058471551cd20  libgfortran/intrinsics/trigd_lib.inc
! 2eb2a2faeebe9c3e228cf5ae48faa0d5  libgfortran/intrinsics/umask.c
! 0f3a896de8967763f7e1b3077adcab3e  libgfortran/intrinsics/unlink.c
! 03f88584ba4a9c9f62c3e7e23f800ca2  libgfortran/intrinsics/unpack_generic.c
! 31530a33ac4dda505145bbbb26533869  libgfortran/io/async.c
! ba79121f194526d480efd56cdf3021be  libgfortran/io/async.h
! 1e65d0b6f286871b51678604e885ecf4  libgfortran/io/close.c
! 7629cca4f6530ffdd690dded622ac1de  libgfortran/io/fbuf.c
! c9b7bec74d31aca97e092f0a7f867b1f  libgfortran/io/fbuf.h
! 090904c5612f3a4932f8d1a353d12e10  libgfortran/io/file_pos.c
! 293486d779e2d8f2ea2af2be428b0bb3  libgfortran/io/format.c
! a39a1053c40eaeccd244e71292a1b6a8  libgfortran/io/format.h
! 7e23acff3f5c87813fda290858acc69d  libgfortran/io/inquire.c
! e1d9589eb15e0ad9c8bf9c235879fb03  libgfortran/io/intrinsics.c
! 6e8d4a621e4f3c1b164d31102394f32d  libgfortran/io/io.h
! 3e5271b240c8435f6eab8e4479243e85  libgfortran/io/list_read.c
! a9afc4d95b4a0181f2fd25bfab10abaa  libgfortran/io/lock.c
! efc83e4796eb55d81f352163489cc3fe  libgfortran/io/open.c
! 3cb179ccac0bc8e948bdb13db00570d5  libgfortran/io/read.c
! 3b58c7b1bdc3040165b255473ab1169d  libgfortran/io/size_from_kind.c
! cf5f34c0afb39a9334b782392ef14c27  libgfortran/io/transfer.c
! b1ed0738be716c69e111b563152b440a  libgfortran/io/transfer128.c
! 2ffb52aaf8092094c723ff6ed4ee3449  libgfortran/io/unit.c
! 54362ee980110e59a1954ae6ca9d51d8  libgfortran/io/unix.c
! 60f0e1acd48d3e1f83ac817c5b7ae373  libgfortran/io/unix.h
! 93fe074e02af8fac234d46a336938948  libgfortran/io/write.c
! 52b80552cf97929403cd03e6751df513  libgfortran/io/write_float.def
! 9f24547c087e2f4a32ca6eeedec8a34b  libgfortran/kinds-override.h
! bc75d11d3876018d71022cf2311f5e61  libgfortran/libgfortran.h
! 2527bb19b82f08b34038b07b172d029d  libgfortran/libgfortran.spec.in
  dc1a87f5ed3520558b0fe9f43e4f5ba8  libgfortran/libtool-version
! 41723ca6d9d9d64a55db3792b1be2deb  libgfortran/m4/all.m4
! 62e6284d1841e31965580a9d35acb51b  libgfortran/m4/any.m4
! 219e5b97bea89bbd7a69768035ab0345  libgfortran/m4/bessel.m4
! 4f086e65f3cfc2d89e46338f90a63c45  libgfortran/m4/count.m4
! 51c9a7317cadb376c1d205a9bbf35991  libgfortran/m4/cshift0.m4
! 96b9b3eb6312acb03b562ae37ceff3f6  libgfortran/m4/cshift1.m4
! 8064600fc8f78035894eceeb56552d2e  libgfortran/m4/cshift1a.m4
! 2239644b3737840df0b33286f0f21e93  libgfortran/m4/eoshift1.m4
! a607f110cf9602b4f5d1b717d028606e  libgfortran/m4/eoshift3.m4
  a70290662a995bcc0ff8ac868b6eddda  libgfortran/m4/findloc0.m4
  22271fa12e82c61051f302c3a5072376  libgfortran/m4/findloc0s.m4
  111ea74dceb547cbf63c12832d73d5f4  libgfortran/m4/findloc1.m4
  be432b0e528c65667e6d736e1537515d  libgfortran/m4/findloc1s.m4
  62c4506b866cb09ea489c455e7c2e8bf  libgfortran/m4/findloc2s.m4
! 5cf0f8e81b2566f20cb9b43ac9d8a2da  libgfortran/m4/head.m4
! de131f23fa7d72ac8c687afb7069e72e  libgfortran/m4/iall.m4
! 4b3f5243315129ae80142b112ce1a510  libgfortran/m4/iany.m4
! c8c43659484ef299c3bd18d349451d6a  libgfortran/m4/ifindloc0.m4
! 68b65a6bf5ade4c6d081626a51ee3277  libgfortran/m4/ifindloc1.m4
! e7442fb5ecff83fb7c833c2fcbf70c19  libgfortran/m4/ifindloc2.m4
  143daeeed4d4e1baa17753b51ddd88be  libgfortran/m4/iforeach-s.m4
  ef77f0d18ce645146e5155d85730a2dc  libgfortran/m4/iforeach-s2.m4
  8bbbce69fc532a405b1b88c79c2ef47b  libgfortran/m4/iforeach.m4
  89b98ba2db8ff2252ed184a6c20b8f31  libgfortran/m4/ifunction-s.m4
  1603b9dcffb8d8436da0598e622783a9  libgfortran/m4/ifunction-s2.m4
  3cbecd5d114cf344efea0d4754437c7a  libgfortran/m4/ifunction.m4
  86a682dafdbffea255a15ff37710c93a  libgfortran/m4/ifunction_logical.m4
! 224d6b4732434f021ef34ca847d4d32d  libgfortran/m4/in_pack.m4
! 72ae7c0b0e95c1ad1e51a6b4bf88b1c2  libgfortran/m4/in_unpack.m4
! e70e60502b3d43fab6688b245ddebd19  libgfortran/m4/iparity.m4
  931d3e6134be8b18f8fd4b755b0f33cc  libgfortran/m4/iparm.m4
! d5dd312cb99a2c4b86701eb70b971398  libgfortran/m4/matmul.m4
  f90a0613ba9c7910fede3029a8db5527  libgfortran/m4/matmul_internal.m4
! 43c829b6e6f70e195c7ae82383d61fcc  libgfortran/m4/matmulavx128.m4
! 512de099a7870b0bcd7106d99b1b9c6a  libgfortran/m4/matmull.m4
! 889dda2a39e53dda4d261c757e194795  libgfortran/m4/maxloc0.m4
! 2440f1b98daffbc7b1e8dd24f20105e2  libgfortran/m4/maxloc0s.m4
! 248cabd7d744ce7ef8ca802e45d96c56  libgfortran/m4/maxloc1.m4
! 2d7095e641f3d7d819c0eaf80e686acd  libgfortran/m4/maxloc1s.m4
! fd662ee0a4da268d92dde6b9b119ac3b  libgfortran/m4/maxloc2s.m4
! 3e50ef7a9a543ed2ffaad76aea1e2dfa  libgfortran/m4/maxval.m4
! 3223146d0b921e9ef28315bb6edf6710  libgfortran/m4/maxval0s.m4
! 4a1c7cfb1bdc19052a75820a79cf6f58  libgfortran/m4/maxval1s.m4
! 812f1ad269f6613301fc51babf9ffe83  libgfortran/m4/minloc0.m4
! ff14333f607d22c15ad1cff01c7e461e  libgfortran/m4/minloc0s.m4
! d592b8ff1c845680db466a14dd892c29  libgfortran/m4/minloc1.m4
! 2396f202d3b282ef74213094a001af5e  libgfortran/m4/minloc1s.m4
! 433e5c6ea52e7d5cc91a7b25c533cc45  libgfortran/m4/minloc2s.m4
! 5f6bcf360e33132889edec2df234e241  libgfortran/m4/minval.m4
! 1c561b1cb1d7ec7ac7672ea89766c068  libgfortran/m4/minval0s.m4
! 9430636ed4790c75347ebeede806a7e5  libgfortran/m4/minval1s.m4
  6d8cbcd1d1489f643839e7ac2c00a736  libgfortran/m4/misc_specifics.m4
! 9b81a1acd09bfbf8e218728b9c6197c2  libgfortran/m4/mtype.m4
! 57b749bf49c017860fc6ae23ba2a3dbe  libgfortran/m4/norm2.m4
! f7a04fd3450eb7a9bf2c8e12460223b7  libgfortran/m4/pack.m4
! c0343997e11a1b85ebcd1706d0f8c1e3  libgfortran/m4/parity.m4
! 2e7ef6bc9c38387edecce8682a1628ea  libgfortran/m4/pow.m4
! bd65350eb1d0b28d732a261fdbd6cc59  libgfortran/m4/product.m4
! fa5f20d6b982d6693d03c47ba212ae0f  libgfortran/m4/reshape.m4
! b0b3f929681ad18f7e76ae21e58f3bda  libgfortran/m4/shape.m4
! 2478642167175833018a8947cc98b3fd  libgfortran/m4/specific.m4
! 4c60f3c3d2948ee7eb2668aa9cc61a04  libgfortran/m4/specific2.m4
! 7f6ce5e2a38483762ccd59a714e7e36f  libgfortran/m4/spread.m4
! becf8027952064fab41548258f994df6  libgfortran/m4/sum.m4
  0ad0318f00c85db29d184dc3dff12276  libgfortran/m4/types.m4
! b4401a937472147eaf1a54a10b471653  libgfortran/m4/unpack.m4
! 47fc3168e973c403289a8bc8b94b4f75  libgfortran/mk-kinds-h.sh
  5cacd438c86553689eda2ce3d5623b45  libgfortran/mk-sik-inc.sh
  f8813ac773f6f6eb0ea6ecb287fb9250  libgfortran/mk-srk-inc.sh
! 042e06641dccbcc9bbdfb49fdb07c09d  libgfortran/runtime/ISO_Fortran_binding.c
! a1ead418f99814a86f50c33c122d721d  libgfortran/runtime/backtrace.c
! 89aec5cdff5e22af340980f36911bcc0  libgfortran/runtime/bounds.c
! e76855e20821b1b367888f7ea69e0871  libgfortran/runtime/compile_options.c
! d752472ddc1606c8e10cdc78464f1eb2  libgfortran/runtime/convert_char.c
! 612cca13622c7628cf9e8e2333fb2d77  libgfortran/runtime/environ.c
! e40a2e7b1a7104b60d57a20932d7b3b4  libgfortran/runtime/error.c
! a71f01be3f571c30403c534f52e0a7d6  libgfortran/runtime/fpu.c
! ded3c04674324b01ca4863f0902ae9bd  libgfortran/runtime/in_pack_generic.c
! 2d945a03496083bfaa221e02d9ca00c0  libgfortran/runtime/in_unpack_generic.c
! d4303dc97a686de01894f4140efe8148  libgfortran/runtime/main.c
! 5432db966de4c07eb39256695a316137  libgfortran/runtime/memory.c
! 76349a319b5b10264c26c75c921c5d6f  libgfortran/runtime/minimal.c
! 5df4bd0d679dbaf97525db16437ab2a9  libgfortran/runtime/pause.c
! 30f6e1a06b1a94db2c129d516f8b9b60  libgfortran/runtime/select.c
! 55b6f051b3c7236a01fa263df9858399  libgfortran/runtime/select_inc.c
! a39f2ec9a6c1875055cf57a1ef3c4754  libgfortran/runtime/stop.c
! 6d9f13a4e97b31f98dd248433bc815c4  libgfortran/runtime/string.c
  5d4950ecb7b26d2c5e4e7b4e0dd74707  libgo/LICENSE
! 7b5809329fcec29cbdbbbd0c9788d8ed  libgo/MERGE
! 1eb786d9dd59df8f6edd218b088b9499  libgo/Makefile.am
! 96e76a2159395b8165c565416ec342b6  libgo/Makefile.in
  3a55d95595a6f9e37dee53826b4daff2  libgo/PATENTS
  d0952f0b499c9ebb887222764488a2fc  libgo/README
! d46376034c1fd6df47c8ba2cd5de9d0a  libgo/README.gcc
! 2aeb2e4252d8d01f2617798957024287  libgo/VERSION
  1a52cbc1db42a585461a5c4bcb398840  libgo/aclocal.m4
! 911b46316335f72f5818b16184305c56  libgo/check-packages.txt
  603eaa1869aebeeab6662a9bef739a41  libgo/config.h.in
  ad1ce707d70b18d5d14bdbcfef82a9bb  libgo/config/README
  2b5fe3d1420b597cb702a642a065373a  libgo/config/libtool.m4
--- 93950,94867 ----
  5bffa5826936db152a31f60524b34f0c  libgfortran/ChangeLog-2018
  a25a190e02c8ba2caa2c3dee224eba51  libgfortran/ChangeLog-2019
  561d7b7050b65ea8eac91bc825d5a816  libgfortran/ChangeLog-2020
! 14d3ee4271b29519e2e38d5f4214dcc3  libgfortran/ChangeLog-2021
! 85a2a86ebc531c92a58a44e24c713d01  libgfortran/ISO_Fortran_binding.h
! 5664eaea1f6c3857c0b54abcfc5a8531  libgfortran/Makefile.am
! 5335dd135636d1d69da30798d40a50b0  libgfortran/Makefile.in
! ca29f004198eb5d505c8eda5b685ba6a  libgfortran/acinclude.m4
  77dad7b87b2adfbfda676696055ef90f  libgfortran/aclocal.m4
! 22aed95bf8f49111299ca2ed4b666e8b  libgfortran/c99_protos.h
! 24cb7e4cc2442e5778a3459f43307372  libgfortran/caf/libcaf.h
! 637ee15620478b161f97acc863e69748  libgfortran/caf/mpi.c
! 45b080a37fad11526692e72d7363a7ec  libgfortran/caf/single.c
! e0caa8f020b379276d582ca19cd0aba8  libgfortran/config.h.in
! c8846b1296b476b5e94b54d7856a3e6b  libgfortran/config/fpu-387.h
! f30bd4ab784e2b8b47a0521e25b50f8e  libgfortran/config/fpu-aarch64.h
! c97c60c348b08040368919c6705acca1  libgfortran/config/fpu-aix.h
! c22139795095262b05205e7123a82007  libgfortran/config/fpu-generic.h
! 35d5495a8d95a8d065eb22ee659950d9  libgfortran/config/fpu-glibc.h
! 2e2820864061e3f9e49ab266a72a3511  libgfortran/config/fpu-sysv.h
  93375010faf12b59ff1618874a0beacd  libgfortran/config/t-aix
! 8b1d499d0ff2f4290f07537eafd9f048  libgfortran/configure
! e56fd010246d433fd05c8132d14c8735  libgfortran/configure.ac
! bbe45eeb78f252ad73cd1709edc231b2  libgfortran/configure.host
! 32b6e122cb7b8a06d83a34d5e3f4cf28  libgfortran/generated/_abs_c10.F90
! f53e20f6ba4067afb55a8a802bc6bfe5  libgfortran/generated/_abs_c16.F90
! 3dabd41f81f167ca620a72e39c9d3b8d  libgfortran/generated/_abs_c17.F90
! fb07964fe7647c40314056e83908c40c  libgfortran/generated/_abs_c4.F90
! 024d656637682486acf36f2bd9512824  libgfortran/generated/_abs_c8.F90
! 4b450da4fea1e602ed120f0c91aab37b  libgfortran/generated/_abs_i16.F90
! 8d2bb49c62ba0faef63d222ef6a198be  libgfortran/generated/_abs_i4.F90
! 805a41c3ca27d9f6d92d8d3cc91243f7  libgfortran/generated/_abs_i8.F90
! ab6dd3bf7f310aefe3f15620bb11a41f  libgfortran/generated/_abs_r10.F90
! 464b93c4c07158d7c9f95a2f51a5186a  libgfortran/generated/_abs_r16.F90
! 6e8b5b61330a60e6ed29c01f33434797  libgfortran/generated/_abs_r17.F90
! 98489fc5b8af6872f71a11d3bb98a532  libgfortran/generated/_abs_r4.F90
! bb04b2002601a039e5c03c9853b36e16  libgfortran/generated/_abs_r8.F90
! 86f03f8bea4e952c18f40f7423fa6f26  libgfortran/generated/_acos_r10.F90
! 6375911592740c2f44505d631e932b64  libgfortran/generated/_acos_r16.F90
! 60b6cb278b7c8e8f726897db0e058eae  libgfortran/generated/_acos_r17.F90
! 200f124cb75ea80bfaa1d625422b4d95  libgfortran/generated/_acos_r4.F90
! 427c0fbe177cc6f355a6a0d8141e6708  libgfortran/generated/_acos_r8.F90
! d0f9ca341d4dc124d4baf6bc1c2cb53d  libgfortran/generated/_acosh_r10.F90
! 712c0ed726e2074147cae2e80bc03d4d  libgfortran/generated/_acosh_r16.F90
! 5938b3ad8cc7dcc191b957eb03a199c2  libgfortran/generated/_acosh_r17.F90
! eaa5ce848f04feb70d839603e481ba81  libgfortran/generated/_acosh_r4.F90
! cd973675da5cc05445bb22e185564fb9  libgfortran/generated/_acosh_r8.F90
! 8d6a633c82fcacfff66a392f01d6e5da  libgfortran/generated/_aimag_c10.F90
! efe9801fe4607eaf8c49ff5a510cb1cc  libgfortran/generated/_aimag_c16.F90
! f9831fdf6faa527ca5908922eaef25e3  libgfortran/generated/_aimag_c17.F90
! 2635b5152d8bc57f71cab021d9ea7d2c  libgfortran/generated/_aimag_c4.F90
! e1851427cf9b582a6bdbf10822a01216  libgfortran/generated/_aimag_c8.F90
! 6e70ae4cad48fd0656be0bbea137d4d7  libgfortran/generated/_aint_r10.F90
! d3ac9ba10e78fc082825aaf3acfb3e56  libgfortran/generated/_aint_r16.F90
! 35214425b7c079c216bcae788a0a6c10  libgfortran/generated/_aint_r17.F90
! d8ee026305babc2d0330f114026453b6  libgfortran/generated/_aint_r4.F90
! a121942867900c57fe97b3bfcf2b1f0c  libgfortran/generated/_aint_r8.F90
! 96ea894b9bf4c8d5889561fa01f5b797  libgfortran/generated/_anint_r10.F90
! 90fd79c2710201dff0c7af8b8f3219f1  libgfortran/generated/_anint_r16.F90
! a4144831fb7ab5fc472eb6a47a4e3e7b  libgfortran/generated/_anint_r17.F90
! 1bb339c0e5901143fe77d3f0b3973f03  libgfortran/generated/_anint_r4.F90
! 5634ee3daa7f786a6223c9998ea4130a  libgfortran/generated/_anint_r8.F90
! de23b68178e3259070424be90ac0c992  libgfortran/generated/_asin_r10.F90
! 391d857fca8f80d3e9fee9736d02256c  libgfortran/generated/_asin_r16.F90
! a9ef1731660c75d40f1f6cc24ead6089  libgfortran/generated/_asin_r17.F90
! 44b5c1c9171ea212351fc095177a9e3c  libgfortran/generated/_asin_r4.F90
! e24e49b9b9fb57dddadc604f9aec2003  libgfortran/generated/_asin_r8.F90
! f89fb5eea2ea02c2c59abca55dece27f  libgfortran/generated/_asinh_r10.F90
! c62056fb9bd733643f4884b1ef860ef8  libgfortran/generated/_asinh_r16.F90
! ccc7d5ee7e50d065445760b0d0c16355  libgfortran/generated/_asinh_r17.F90
! fceae92883ae8eeca2c5454bfdeffead  libgfortran/generated/_asinh_r4.F90
! 36887eb67599e9921ffc20ae16f27c2c  libgfortran/generated/_asinh_r8.F90
! 3e780359852f21a1eb975868de9d4f01  libgfortran/generated/_atan2_r10.F90
! 45180fc215f9d65f94ca3f7bebafb2fc  libgfortran/generated/_atan2_r16.F90
! d7bdffcae04ef1836a4609e205ad0df4  libgfortran/generated/_atan2_r17.F90
! e96c30ac842d5278e0d7e08082a288aa  libgfortran/generated/_atan2_r4.F90
! 626f8967169eac6aa62d6a2b77b2aed3  libgfortran/generated/_atan2_r8.F90
! b1c9d7fa01758a89d9fcc4328288bad4  libgfortran/generated/_atan_r10.F90
! ff7922adcc3d583db03e65bb799b584f  libgfortran/generated/_atan_r16.F90
! efd99f53737905543d00c72e8ff06a8c  libgfortran/generated/_atan_r17.F90
! 5fc7ad6b664c2c3145fe26293c6b4757  libgfortran/generated/_atan_r4.F90
! 1197824401fa1a74d913f413d4cfc966  libgfortran/generated/_atan_r8.F90
! 4278bddde736e76c1abb11ada581e579  libgfortran/generated/_atanh_r10.F90
! 2b0ca7c82e16c2a8ec6ae558835c9ffa  libgfortran/generated/_atanh_r16.F90
! e8f0b0b7bdeef4e95706171f23604fb3  libgfortran/generated/_atanh_r17.F90
! a162e7daba1d10f6b797780b28fe6303  libgfortran/generated/_atanh_r4.F90
! dfbe874b8aa988d05260c0e980ced07d  libgfortran/generated/_atanh_r8.F90
! 5a6a575adf397388a67659c9ce2f0366  libgfortran/generated/_conjg_c10.F90
! 5e4b8648cb9838ae04c894370b19e5c9  libgfortran/generated/_conjg_c16.F90
! a1396e29e77f754e747b7b8a30c053cd  libgfortran/generated/_conjg_c17.F90
! c59b234c2da812ae59e5ab1c8bd74874  libgfortran/generated/_conjg_c4.F90
! 639127e8a030f0955304ea9a78d377e4  libgfortran/generated/_conjg_c8.F90
! df3a7f7c09c70906588c9eb0388e4db1  libgfortran/generated/_cos_c10.F90
! 258ad1a917fe88e09ccf3dc721b39aec  libgfortran/generated/_cos_c16.F90
! b9e8dfb42471ddf10d0aae738e56df77  libgfortran/generated/_cos_c17.F90
! d27e761352647366bd822117c56fe732  libgfortran/generated/_cos_c4.F90
! abf994c86da515eb392502b246a02d3c  libgfortran/generated/_cos_c8.F90
! cd9adbbf7f2744fa0c860aae1f957ffe  libgfortran/generated/_cos_r10.F90
! 3208f579f4f410fba74cf169dabde76a  libgfortran/generated/_cos_r16.F90
! ca543d91b3be88fb76a08b8f111831c7  libgfortran/generated/_cos_r17.F90
! 649f8ccadd20b37a4976268aa13a1832  libgfortran/generated/_cos_r4.F90
! 6089dc3c22eba6ef3e25a67db6f9ce29  libgfortran/generated/_cos_r8.F90
! db4c43f45ae1fb465856942afa460087  libgfortran/generated/_cosh_r10.F90
! 9fde7a39dd126898f5e11298ba74599e  libgfortran/generated/_cosh_r16.F90
! 46c0f40929260c1b4d60eb9338df6a9b  libgfortran/generated/_cosh_r17.F90
! 5944c740915d45855ba694b7b482c35e  libgfortran/generated/_cosh_r4.F90
! 4df4b381e9fc07f930a100977313759e  libgfortran/generated/_cosh_r8.F90
! aeb04624b3d50a7c8ca3b170dbfabff3  libgfortran/generated/_dim_i16.F90
! 5f0340bfa4b82e23bc6e22650c657045  libgfortran/generated/_dim_i4.F90
! 223eda9f222fdfe0bb553e8e95719a7c  libgfortran/generated/_dim_i8.F90
! 12b440dfe0a91775c521a72e38fd8882  libgfortran/generated/_dim_r10.F90
! d77349d995763715b32e5d5f8a94fa33  libgfortran/generated/_dim_r16.F90
! 33d9ef603901573b739ff8495223147b  libgfortran/generated/_dim_r17.F90
! 108c0f0d6f0ea1dc4adbf8610a6054d9  libgfortran/generated/_dim_r4.F90
! d280fd8d1bcf69e68674a2b1044eb59f  libgfortran/generated/_dim_r8.F90
! e694b462cb63569ece53154bc7d08da3  libgfortran/generated/_exp_c10.F90
! 943024975fe279f87fb034f8b4ca809f  libgfortran/generated/_exp_c16.F90
! bd0fe118d9646559b87b03086dba151b  libgfortran/generated/_exp_c17.F90
! 685520bc2e0acd10491ed376c502283d  libgfortran/generated/_exp_c4.F90
! 5727910b50a81d6c448c7546990d3efc  libgfortran/generated/_exp_c8.F90
! 3e38039c5e9e5c28e099605c2e070b4d  libgfortran/generated/_exp_r10.F90
! 794c44d5324f575a5beafd046b74259f  libgfortran/generated/_exp_r16.F90
! b325407cce4e2decb2df599512387953  libgfortran/generated/_exp_r17.F90
! adfff8ed62006da777d1075efa84a8bc  libgfortran/generated/_exp_r4.F90
! fb72123c1f2225c9e2af1af1882e4623  libgfortran/generated/_exp_r8.F90
! 71cbd23b2f595eb42969d85a42dd5645  libgfortran/generated/_log10_r10.F90
! 7149af6338948f9e88930baf8ee984a7  libgfortran/generated/_log10_r16.F90
! fd054d9403e728e7ca48ab31678ee6b8  libgfortran/generated/_log10_r17.F90
! e524f298b0f505e905b811ef76731d32  libgfortran/generated/_log10_r4.F90
! 96a61058826a3d7b672bde14ab9760a7  libgfortran/generated/_log10_r8.F90
! f145cee3b2da6f18696a77ee55f17c29  libgfortran/generated/_log_c10.F90
! 3ea78bb837cd7d9f2245293054db4c1f  libgfortran/generated/_log_c16.F90
! 4285f09a0e60f1b408822765877c746b  libgfortran/generated/_log_c17.F90
! 94c36b1d35a983cd651b89a8dcd44a07  libgfortran/generated/_log_c4.F90
! 59fcb45d646f454aa5d8ad2838e978d2  libgfortran/generated/_log_c8.F90
! 8f0063f668f86cc73a5af29d27a899b2  libgfortran/generated/_log_r10.F90
! e3e027d2e2244ba11d30d10ef15d6806  libgfortran/generated/_log_r16.F90
! d1f4e4ecd08a22fd09dd16115b4c4722  libgfortran/generated/_log_r17.F90
! 17a8a0128ac24c43e2e2f46d7938f0c3  libgfortran/generated/_log_r4.F90
! 9382efa3ee5a137b136ae4b69293fc55  libgfortran/generated/_log_r8.F90
! b46b88902b887352b321c87d318a5194  libgfortran/generated/_mod_i16.F90
! 0c811c0441f3d87d2b83bf94b9101f85  libgfortran/generated/_mod_i4.F90
! 34867a4fcf660510bcc67386932d2696  libgfortran/generated/_mod_i8.F90
! 69e1c9bc677fcf9ccffdfd8198c82b19  libgfortran/generated/_mod_r10.F90
! 7028bc253d066ad17155688848a9fb1f  libgfortran/generated/_mod_r16.F90
! 64115e6c87d3dddbcdf7b157266f77eb  libgfortran/generated/_mod_r17.F90
! 54f4d0212bd3455fc01698d0c9ec52a6  libgfortran/generated/_mod_r4.F90
! a8950da95b8ab2c720ee599befb70e99  libgfortran/generated/_mod_r8.F90
! 116e1eac029b4cf991dab4cdf1f7cd79  libgfortran/generated/_sign_i16.F90
! 240efa8b82c5442bbf04a52641bfec25  libgfortran/generated/_sign_i4.F90
! afcd326db3269dcb2373d17382eaf0d2  libgfortran/generated/_sign_i8.F90
! 26f2d20aeb4b1b0715cd257357892e1c  libgfortran/generated/_sign_r10.F90
! 5e8a3199a9e003954a4967ebcd89fad2  libgfortran/generated/_sign_r16.F90
! d4098cfca10f4502fb5c87ab64ef1efc  libgfortran/generated/_sign_r17.F90
! 5a21ae256b063773414112d12de58ece  libgfortran/generated/_sign_r4.F90
! 72c29bc832f80910d5228060516a59c1  libgfortran/generated/_sign_r8.F90
! b0de2c399d3bd856b6388eac65eac364  libgfortran/generated/_sin_c10.F90
! 2ddc7c22ecf5be7adfcf8d19b7259517  libgfortran/generated/_sin_c16.F90
! 0b9f37e3c48b7d1acb3709b7b5081b19  libgfortran/generated/_sin_c17.F90
! 828aa3137172b93b2ce2b70c3715618e  libgfortran/generated/_sin_c4.F90
! 3ce1cc313aa7dcd48a9b300e2849605e  libgfortran/generated/_sin_c8.F90
! f2fca5e0b41a6f8b54f9ebbe50c3c960  libgfortran/generated/_sin_r10.F90
! 7a8c13b54c2bacad6bbb8e631b599b69  libgfortran/generated/_sin_r16.F90
! 926b4682a7bf56d86d298bf55761e64c  libgfortran/generated/_sin_r17.F90
! 992f17d9e2ce564278e48f12f8e34980  libgfortran/generated/_sin_r4.F90
! 313a1de7fe545ebbdf2447ec1a831927  libgfortran/generated/_sin_r8.F90
! 26d1a048ee51e5d1d2a036cbb44184ae  libgfortran/generated/_sinh_r10.F90
! 50912c73d00bcc752af8cc004cdaa0d8  libgfortran/generated/_sinh_r16.F90
! 8f7a9954180315ff422d001a46eb7a5e  libgfortran/generated/_sinh_r17.F90
! 3cd77581127580fc155efcd90f0d99a8  libgfortran/generated/_sinh_r4.F90
! 3f2b22528611655838f4ba5bf3508403  libgfortran/generated/_sinh_r8.F90
! 83d00333ecc71c722f1ca5805bc678b0  libgfortran/generated/_sqrt_c10.F90
! 936906fbbdbdc75776858488fbffec1d  libgfortran/generated/_sqrt_c16.F90
! e59c894543e456cbd66bbeb060b46c76  libgfortran/generated/_sqrt_c17.F90
! 92c5df7af02fef35c5ed2162a7e19556  libgfortran/generated/_sqrt_c4.F90
! 13ee80da98f3a2bd932562b4d11c3dc0  libgfortran/generated/_sqrt_c8.F90
! a456d36c34c7d395bfe5f1ecc682d4d4  libgfortran/generated/_sqrt_r10.F90
! 81f088322073d3b569bff587b1719bd7  libgfortran/generated/_sqrt_r16.F90
! 276c51700aebd65964f5045105f478c0  libgfortran/generated/_sqrt_r17.F90
! 67f90c24840c90822cffa6dacd1d54cc  libgfortran/generated/_sqrt_r4.F90
! d54bdc1fd7599e99892d25e343b269ba  libgfortran/generated/_sqrt_r8.F90
! c2736ca6089197d74e87dc700997fbf6  libgfortran/generated/_tan_r10.F90
! 78db10e721bccb47825f2345e8a998c2  libgfortran/generated/_tan_r16.F90
! 40fe47688f60bb0ae4fd3faaf24aff23  libgfortran/generated/_tan_r17.F90
! bae2d13f4f0f8d5bfef8980d5d0b7928  libgfortran/generated/_tan_r4.F90
! 35ccee81c34160e8022a07f2e6b649b7  libgfortran/generated/_tan_r8.F90
! b2b4b4dbe6c7d5c10cc7b73b493e878a  libgfortran/generated/_tanh_r10.F90
! 0817d0ce3c05c4fefa568a261f77ac12  libgfortran/generated/_tanh_r16.F90
! 0bca871ecded8a17c51be14996755d5b  libgfortran/generated/_tanh_r17.F90
! ba080ae1459f3aa024843435afd24c15  libgfortran/generated/_tanh_r4.F90
! 1cb43674958ef3a119fe4750c8310b72  libgfortran/generated/_tanh_r8.F90
! 32b5eb1034cf2fc2024dfd6f9a436fb6  libgfortran/generated/all_l1.c
! 23a2b4923f342e7233e1e4c598e989a1  libgfortran/generated/all_l16.c
! fb118049a2172a4cb74f51e57a7cf81f  libgfortran/generated/all_l2.c
! ad32f73f700ccbb79a1c74088a1a79fe  libgfortran/generated/all_l4.c
! e7381c8ec0d414d7e1c518a4ecf0b560  libgfortran/generated/all_l8.c
! 6142fe98281aac63151f9b64ae525f9f  libgfortran/generated/any_l1.c
! 7edca7ea6c5941643af342c2d199bfb7  libgfortran/generated/any_l16.c
! bf31e9a45c33ca730e00d252558c2c85  libgfortran/generated/any_l2.c
! 3746c091f52741bd6a32a78f7e091a1f  libgfortran/generated/any_l4.c
! b66879681f5ad020a58843efbd962ca7  libgfortran/generated/any_l8.c
! a5e3c24af954a7f166c7e02110c7d6cb  libgfortran/generated/bessel_r10.c
! 51e732b830160ac4a15c7756f687a8cd  libgfortran/generated/bessel_r16.c
! 901282e485382e22d582d98dca924c1b  libgfortran/generated/bessel_r17.c
! eac9162cea0bc4fd22246892f8952e4b  libgfortran/generated/bessel_r4.c
! a87e5347f1b032f2fab4b93ec6fb9928  libgfortran/generated/bessel_r8.c
! f0f2ece7e5911f025664abc0ad26512d  libgfortran/generated/count_16_l.c
! 33a699f13f6c4ea47bf6b6c92087fad4  libgfortran/generated/count_1_l.c
! 7c13524bb0154d4cfe317fbb1186ff0d  libgfortran/generated/count_2_l.c
! 3ad482b90b2dead150a3fbb8002e7881  libgfortran/generated/count_4_l.c
! 3b70698b11b21f8db7f4e6c2b0cb7140  libgfortran/generated/count_8_l.c
! bff0dd0e89aef906771aed14f53e312e  libgfortran/generated/cshift0_c10.c
! 3fd5a1e473322157c7d5f99baad2dcdd  libgfortran/generated/cshift0_c16.c
! 7a8ba9c616574550a5732d35b502af5a  libgfortran/generated/cshift0_c17.c
! 57d01b3c49074c53f5ca8540ca6b5787  libgfortran/generated/cshift0_c4.c
! 7bef6b3d9954c46a8391f93f97f83e28  libgfortran/generated/cshift0_c8.c
! 606446a7be1957d288fdf6a575539068  libgfortran/generated/cshift0_i1.c
! 256d9d3aadffc40ab42dd5fecc75caf5  libgfortran/generated/cshift0_i16.c
! 473b1ca2fc7b5ebe7eeda09f66b9a611  libgfortran/generated/cshift0_i2.c
! 4e2c4bab79c0de44a2679f97d39a9414  libgfortran/generated/cshift0_i4.c
! 7c4cf411667106f253b02c9eac4b2e9f  libgfortran/generated/cshift0_i8.c
! c3fdc34817c2ae359bf4c8d9f7e57027  libgfortran/generated/cshift0_r10.c
! 0f456158b1dc1836171602a8ccdb553c  libgfortran/generated/cshift0_r16.c
! cf173b642f3239542a14b9bd156224a4  libgfortran/generated/cshift0_r17.c
! e24b149ba419ba47c5593aa46de4242c  libgfortran/generated/cshift0_r4.c
! f3a19649a1e72167cee95224a237c7ec  libgfortran/generated/cshift0_r8.c
! 7c003813da0184adf53367dcfb072016  libgfortran/generated/cshift1_16.c
! 49cdb759fa3c1feb93806fa77f33307a  libgfortran/generated/cshift1_16_c10.c
! a1ea9c0ee7f50c7959613cdb6d52181b  libgfortran/generated/cshift1_16_c16.c
! 774c2b8c8cd6458f98c71f1280fd69d1  libgfortran/generated/cshift1_16_c17.c
! 92040a246db026c29b1970f7b69561de  libgfortran/generated/cshift1_16_c4.c
! 90767e4246a40e2afaf8c829ec529da4  libgfortran/generated/cshift1_16_c8.c
! a0efcb43950e57bb4f60a1994e7f4f04  libgfortran/generated/cshift1_16_i1.c
! a35e23cd7df458bd0f518946fd1225ff  libgfortran/generated/cshift1_16_i16.c
! ef868b39cc91c533c8426d1fa8ac947f  libgfortran/generated/cshift1_16_i2.c
! b18e4937a6335680100dbf504d995435  libgfortran/generated/cshift1_16_i4.c
! 250b98a6b8882540a03e9ef48cddbc6d  libgfortran/generated/cshift1_16_i8.c
! b384ad39e92e050c2e5696dfb3721d2c  libgfortran/generated/cshift1_16_r10.c
! db9285f69b9dd90cb8d63be023de48f8  libgfortran/generated/cshift1_16_r16.c
! a43e2691d4e6134e3871244c6fb7ec52  libgfortran/generated/cshift1_16_r17.c
! 424415ba33dc861e0e63009110980c7b  libgfortran/generated/cshift1_16_r4.c
! 5c61de74d9780e13a9a736c85b3672ea  libgfortran/generated/cshift1_16_r8.c
! 0c982502db69a1a68f406dbd940cc245  libgfortran/generated/cshift1_4.c
! 7ff37adc25999d1b98dee227e3c18828  libgfortran/generated/cshift1_4_c10.c
! 6d4e823502887351eedd3c388a47d603  libgfortran/generated/cshift1_4_c16.c
! 65a91e5617fb3d57d00fb43404c69a50  libgfortran/generated/cshift1_4_c17.c
! 4c7302b48d9da14062338a9dc1a4f9f3  libgfortran/generated/cshift1_4_c4.c
! e19321142e12a5c41c3fd84818f20bb9  libgfortran/generated/cshift1_4_c8.c
! d023996170448e1bc1b265d3848babb6  libgfortran/generated/cshift1_4_i1.c
! 769b96d3c5e58ec89c65583a56f23985  libgfortran/generated/cshift1_4_i16.c
! 78d75abf3762b832f87382a1c49903d6  libgfortran/generated/cshift1_4_i2.c
! a0165d626d30d20249cd821822670870  libgfortran/generated/cshift1_4_i4.c
! dd88251a79ba20b41fb22c5ba7dc3407  libgfortran/generated/cshift1_4_i8.c
! 2e375d439e1ba746d99ad7be7e47f7e3  libgfortran/generated/cshift1_4_r10.c
! 2e00a9614fa2921066f837f18e092aaf  libgfortran/generated/cshift1_4_r16.c
! 556b8aacb9205405000d469b4ca2c5aa  libgfortran/generated/cshift1_4_r17.c
! 316e47658aa32ba97421095de17f698b  libgfortran/generated/cshift1_4_r4.c
! bec7899ef434e23a8c0ee5237cd77f04  libgfortran/generated/cshift1_4_r8.c
! 840b4b9bdbeca1c01991c6d2dcb4c28e  libgfortran/generated/cshift1_8.c
! 3f67ec6d7d0222e0694d029af76084d9  libgfortran/generated/cshift1_8_c10.c
! 1f52558374616d476d1d75892b01937f  libgfortran/generated/cshift1_8_c16.c
! 7dfc9a84197599101c9e5d1360ce15d1  libgfortran/generated/cshift1_8_c17.c
! bf603909213fb1c86065e34b94013590  libgfortran/generated/cshift1_8_c4.c
! e3e4bbf27385b7fbdc6245ffd6aaf582  libgfortran/generated/cshift1_8_c8.c
! 824baaf90aa9da4169ff8c29e3e0b31b  libgfortran/generated/cshift1_8_i1.c
! ac0246ff72bcc4e64b3a15d07dac6f2a  libgfortran/generated/cshift1_8_i16.c
! 799ef55d42730bd1e51fbabf632c090d  libgfortran/generated/cshift1_8_i2.c
! 6b36be119eb714490f2f64015c8c3dcc  libgfortran/generated/cshift1_8_i4.c
! 00b8313648459a11d3245c6cd6df4525  libgfortran/generated/cshift1_8_i8.c
! 4fbca8d65fdd37c28e732f5841a65d3f  libgfortran/generated/cshift1_8_r10.c
! 05ccb651921326c3d6c7add5363a8f4f  libgfortran/generated/cshift1_8_r16.c
! 595e04276a693c0d95382b285436ce39  libgfortran/generated/cshift1_8_r17.c
! a2e32acb8e86cf923051763afe0cfaa3  libgfortran/generated/cshift1_8_r4.c
! ba6174190068c5ecc812336588138139  libgfortran/generated/cshift1_8_r8.c
! 3be1baf97882ef5609ec61f7c73d5750  libgfortran/generated/eoshift1_16.c
! 3f0e28f3ed14e9445bbab1ead6bf8306  libgfortran/generated/eoshift1_4.c
! 2b7275ad3c1101300de474eb1dff7ea9  libgfortran/generated/eoshift1_8.c
! ba5c233b2b5fcf932e8cfdb6cd1fb127  libgfortran/generated/eoshift3_16.c
! 07f29ca7461786ac06facb7193947e65  libgfortran/generated/eoshift3_4.c
! b55e5b0efc1115529ce3bf1234061673  libgfortran/generated/eoshift3_8.c
! 099349bf86bda4346e37d56f1d904a43  libgfortran/generated/findloc0_c10.c
! ecea3ec6745cfd608506edfe1490defe  libgfortran/generated/findloc0_c16.c
! cb2d42cb369113fc11f75e86d27069f9  libgfortran/generated/findloc0_c17.c
! 0d3e7e842b640136fe37895bda4a1a96  libgfortran/generated/findloc0_c4.c
! ea7124327cebe65a84521747d4212218  libgfortran/generated/findloc0_c8.c
! 8aa449c658ca238ca79fb493e1b7046c  libgfortran/generated/findloc0_i1.c
! 7d117404398dbf4f86c3aa84b11ddf6c  libgfortran/generated/findloc0_i16.c
! e2587c2710828ef785414a68690bf672  libgfortran/generated/findloc0_i2.c
! c07536b905e41d108b6c4c0017ecdc3d  libgfortran/generated/findloc0_i4.c
! 7558ce976e29a9378cf65bf19fe20bf2  libgfortran/generated/findloc0_i8.c
! 4d1e2f5c723eb2c7ecec0d030babe5c3  libgfortran/generated/findloc0_r10.c
! 1caa5fe6d4b70e16c7d9691153f4d81f  libgfortran/generated/findloc0_r16.c
! f14d4966de33d8a53159b70f482bcc02  libgfortran/generated/findloc0_r17.c
! 14253d878bec011664621c857b60febe  libgfortran/generated/findloc0_r4.c
! 7ee42a0edaed4a704377fc5f5acdf0c2  libgfortran/generated/findloc0_r8.c
! 6cdd82cafd1b3da6911192e0c02acb6b  libgfortran/generated/findloc0_s1.c
! 1c363bfb9894abce09fdc66f8c2db9ea  libgfortran/generated/findloc0_s4.c
! f4a69bbb41ea75da244f0b1519974377  libgfortran/generated/findloc1_c10.c
! 43c6d7da5337f8f8907c6d3127aabab5  libgfortran/generated/findloc1_c16.c
! 6506adfa5e4531529a18a883f2c45c79  libgfortran/generated/findloc1_c17.c
! 309ad18d545a1f57ea737bdd8e9e0c86  libgfortran/generated/findloc1_c4.c
! 887ac6650c715496e8cbd0185678df29  libgfortran/generated/findloc1_c8.c
! 8a19d435324f76a32af7282fb1c96e89  libgfortran/generated/findloc1_i1.c
! c34121acb048f3349a95962475a651c8  libgfortran/generated/findloc1_i16.c
! 61c2237bc6dce818ab26670ba2a65d08  libgfortran/generated/findloc1_i2.c
! 553fc16792f258194d5983d49f8884e7  libgfortran/generated/findloc1_i4.c
! 22860b8596b7a5e6797e23931fd85a54  libgfortran/generated/findloc1_i8.c
! e84d13428b5ffde41dc3e50660454be0  libgfortran/generated/findloc1_r10.c
! 1b5ca2c7906b98feacd34d9b4b71689b  libgfortran/generated/findloc1_r16.c
! b81515ca91739291a29a3e757a3fc71d  libgfortran/generated/findloc1_r17.c
! b889e2825973f08b6ce755cd4325d33a  libgfortran/generated/findloc1_r4.c
! c3a569c7bca558f1eaa8116a2c98ba1a  libgfortran/generated/findloc1_r8.c
! 8f879c65798a0336c40196462b16ae36  libgfortran/generated/findloc1_s1.c
! ccb6f93fc94866ab2d1c206317631078  libgfortran/generated/findloc1_s4.c
! ee3ff4a793ca326fa5729c3c0a117527  libgfortran/generated/findloc2_s1.c
! 84d8665af288e783c8f6d2a28c0865e3  libgfortran/generated/findloc2_s4.c
! b175d994534b268fee0f8a58a53ea6d5  libgfortran/generated/iall_i1.c
! 40f3aa381214bffe8007abde8c591817  libgfortran/generated/iall_i16.c
! 4d424ffb433f699dfad7890811529bd9  libgfortran/generated/iall_i2.c
! 009621dbdabdf22b617307fc204c097b  libgfortran/generated/iall_i4.c
! c978a75ec212e0d8000dc0d10fedb276  libgfortran/generated/iall_i8.c
! 7da52ed297d7fb8faf2f04d6425632e7  libgfortran/generated/iany_i1.c
! bff569a6e95dfaa7c2d4d1f26c767593  libgfortran/generated/iany_i16.c
! b19e7307009190361e015b79e74fd32a  libgfortran/generated/iany_i2.c
! 5a424a01f10eccf8a54feef37db14d05  libgfortran/generated/iany_i4.c
! f8b845dba6aecb81dc9b0423aeb81501  libgfortran/generated/iany_i8.c
! c4db01ae65bb6e0374519adfd9386426  libgfortran/generated/in_pack_c10.c
! 95043a1c3b8a77cf768a23b45a0297e7  libgfortran/generated/in_pack_c16.c
! 4e073f2cdfdea22f6644d1d737192b73  libgfortran/generated/in_pack_c17.c
! adf07d683daa8609e8df1aa30caf6d7e  libgfortran/generated/in_pack_c4.c
! 41a4a1211a248709f7366974d8e9c3ef  libgfortran/generated/in_pack_c8.c
! 9c92da69fe8579ea0dd26ad5edee7b7e  libgfortran/generated/in_pack_i1.c
! 2b8ba418b3f162d1bb710a955e26e2c2  libgfortran/generated/in_pack_i16.c
! a4ad7c8a16f8cc848272b4b7c46fa111  libgfortran/generated/in_pack_i2.c
! a4aaa191c9c3f7e77ddcd608e618712f  libgfortran/generated/in_pack_i4.c
! 3abbe4df53ec2734d0db3128f20e5af4  libgfortran/generated/in_pack_i8.c
! 15169b01e589c659a35ecd7135b8f443  libgfortran/generated/in_pack_r10.c
! 3decb0e4378ee9b4d442aefef96b58c1  libgfortran/generated/in_pack_r16.c
! 26a2a6de9a46af0ca11a36b53537e399  libgfortran/generated/in_pack_r17.c
! fd204f912af61cd9f7838e56568551bf  libgfortran/generated/in_pack_r4.c
! af3d46f7471371607a78df3b00f0fd95  libgfortran/generated/in_pack_r8.c
! a8243b55ca2c4bf2330932b0da27a526  libgfortran/generated/in_unpack_c10.c
! 04090aa643de043c03f683573c04287e  libgfortran/generated/in_unpack_c16.c
! fc0712b48014e42c005fd71d1f88fd11  libgfortran/generated/in_unpack_c17.c
! 0990f032e51ab89406bcd52466db27d2  libgfortran/generated/in_unpack_c4.c
! 96f0cdba6cc3e7944daf4cb25f6d4603  libgfortran/generated/in_unpack_c8.c
! 0aa6675bf936a263f2f1332b55f96710  libgfortran/generated/in_unpack_i1.c
! 48d2e4f4d208f879745a56aff4f45565  libgfortran/generated/in_unpack_i16.c
! ef5e54756bde6e6268beaf93389c9bbd  libgfortran/generated/in_unpack_i2.c
! e85525e44b5c5087374ecd03ff58b4b6  libgfortran/generated/in_unpack_i4.c
! 60da2d6f462f583236f6fc785bb3a938  libgfortran/generated/in_unpack_i8.c
! 5958ab58dece4a5f81525952f1cbb256  libgfortran/generated/in_unpack_r10.c
! cfe59e86aacc271d6756a95b9372c8e2  libgfortran/generated/in_unpack_r16.c
! 5e4681e10876e4f9e7b4b795e480d736  libgfortran/generated/in_unpack_r17.c
! 58a42a1484000e0f0870c076a4369af1  libgfortran/generated/in_unpack_r4.c
! c49f113f217c4d342de8114e261d6e94  libgfortran/generated/in_unpack_r8.c
! 453d1136c52afc2b8e3eee843544ad96  libgfortran/generated/iparity_i1.c
! 36ba193d0a04d72927cf5450dcc28626  libgfortran/generated/iparity_i16.c
! 79a6f288397438482bbe1720959a1bcd  libgfortran/generated/iparity_i2.c
! b840f461d81e27f0d829d509d535ee8e  libgfortran/generated/iparity_i4.c
! bde1121670354ced7b6a5277ededee42  libgfortran/generated/iparity_i8.c
! 4b090c15e8980704636f8fda4fbda52b  libgfortran/generated/matmul_c10.c
! b6a53b966ffd3cc8981ef53324f3495b  libgfortran/generated/matmul_c16.c
! df0018a6201bf54cb414aeb8c13cfe3c  libgfortran/generated/matmul_c17.c
! 926a57579cbb5bd3bc0d8b5383e01db2  libgfortran/generated/matmul_c4.c
! 39923cc86f3b4eb3032625baa098e2ce  libgfortran/generated/matmul_c8.c
! 46f19caa372a323f4fd07a3fc91b8f82  libgfortran/generated/matmul_i1.c
! 621bd6cf01b9cc14050e67075b062320  libgfortran/generated/matmul_i16.c
! b3f05e0e73620344606c338a3e5e7913  libgfortran/generated/matmul_i2.c
! ff2061ee7f2f89854be5b61a2ec33138  libgfortran/generated/matmul_i4.c
! eb85155211ce27732a8285efff81b621  libgfortran/generated/matmul_i8.c
! da082b7a831c5d62deee980a79db7819  libgfortran/generated/matmul_l16.c
! 75040b7474e0d5e92711f6c3b0e37424  libgfortran/generated/matmul_l4.c
! 9514ce4019469e3316e24957e43ad3c4  libgfortran/generated/matmul_l8.c
! 70b5f73fae56e084355aca4942a9d2d5  libgfortran/generated/matmul_r10.c
! c5104dd1d60ec051a5ee5c0f5d808677  libgfortran/generated/matmul_r16.c
! 36faf5cc674c7d8c301b915fb8fe124a  libgfortran/generated/matmul_r17.c
! aec7bf946204f17956e76d8073aa3eb8  libgfortran/generated/matmul_r4.c
! 5a88d0d8546f941ff81ace106d3ec46e  libgfortran/generated/matmul_r8.c
! 99e7b32c66b2dede22d2572c667b3ff9  libgfortran/generated/matmulavx128_c10.c
! 8eefb38c50d06c3ba8a318a1894710a2  libgfortran/generated/matmulavx128_c16.c
! d26c1961428ab3a70368b91c9d17d0cc  libgfortran/generated/matmulavx128_c17.c
! 4f3279da1f5d3db02844762c52a2bc20  libgfortran/generated/matmulavx128_c4.c
! d5b7de177031b67ccac8c99ae4cdce2a  libgfortran/generated/matmulavx128_c8.c
! 91709d252fed3244a53225db7dfaa6cb  libgfortran/generated/matmulavx128_i1.c
! a7b9a2b9348e8a564761ffd97bf71c4f  libgfortran/generated/matmulavx128_i16.c
! 797e310e796b608f80329437585604b5  libgfortran/generated/matmulavx128_i2.c
! 2c3d86dca67f4c7330b938d2b1d3be17  libgfortran/generated/matmulavx128_i4.c
! df4d19e85d7f5f034a802ac94374cbc5  libgfortran/generated/matmulavx128_i8.c
! 8c9402a99df41df0cad84ef7b4c8c15b  libgfortran/generated/matmulavx128_r10.c
! c342f9ab9ca907f0a1d46121d5430a56  libgfortran/generated/matmulavx128_r16.c
! eb54ee8431b0ce993d82417d9f8fc459  libgfortran/generated/matmulavx128_r17.c
! 0b1b29daee6dfe284bb6a6d661a3c1d6  libgfortran/generated/matmulavx128_r4.c
! 31ff2aa6a7bdf3f3cda5dce4f8f2c9ef  libgfortran/generated/matmulavx128_r8.c
! 3fa747982a9e646b76f6c3dd9f6b1be6  libgfortran/generated/maxloc0_16_i1.c
! a8590d25e7e2efaba7271118121c4979  libgfortran/generated/maxloc0_16_i16.c
! 3dfa9c9a6039c695809bac1f8456e027  libgfortran/generated/maxloc0_16_i2.c
! 6e4c38fdc479f48210faf9dd6e032784  libgfortran/generated/maxloc0_16_i4.c
! 19733fbf7da89b0d117db9218eee592d  libgfortran/generated/maxloc0_16_i8.c
! 9cb13732306c0f19641b033bdae8a29f  libgfortran/generated/maxloc0_16_r10.c
! 587a4add5dfb8eca1d86997d54de1b56  libgfortran/generated/maxloc0_16_r16.c
! d4ec45745705e6720fb9edbce760e2b5  libgfortran/generated/maxloc0_16_r17.c
! 25602f175f285060ca4bc4926fbc0239  libgfortran/generated/maxloc0_16_r4.c
! c70def504734eb0f742cbf939dde649e  libgfortran/generated/maxloc0_16_r8.c
! 1bb993d07d8e103735c43868135aceef  libgfortran/generated/maxloc0_16_s1.c
! 2328e6cf50c426d104b654d15726f485  libgfortran/generated/maxloc0_16_s4.c
! e7082e0fd07011894998e73d953b0c48  libgfortran/generated/maxloc0_4_i1.c
! bc8a72abb78d936996e4c16359ce6a7a  libgfortran/generated/maxloc0_4_i16.c
! aef2f929451dac6869378402c4399d01  libgfortran/generated/maxloc0_4_i2.c
! 441bdc19f6e0bd35507501324c950bd5  libgfortran/generated/maxloc0_4_i4.c
! 500bf981e4d35896f3fe514be2206230  libgfortran/generated/maxloc0_4_i8.c
! e3e42470a824570bdbb688010c690fde  libgfortran/generated/maxloc0_4_r10.c
! 4a62185e0879cdd456ba79afd864c551  libgfortran/generated/maxloc0_4_r16.c
! 811451ee6f46af538a6df21689a627a6  libgfortran/generated/maxloc0_4_r17.c
! 01e73b837dc36dd045e84f8e9c3f4bd1  libgfortran/generated/maxloc0_4_r4.c
! 0fc5d0b6024d9315ea27ad6859bc5707  libgfortran/generated/maxloc0_4_r8.c
! 35e402e7177d1fe9d39e6b4e41e23227  libgfortran/generated/maxloc0_4_s1.c
! d62b63b2693c1b23bd094e2f0f276fd9  libgfortran/generated/maxloc0_4_s4.c
! 9e1ae940cee5e72564b804f54a1d37f5  libgfortran/generated/maxloc0_8_i1.c
! 0d8c5117474ab0e1aaf87cfdb6d3de40  libgfortran/generated/maxloc0_8_i16.c
! e9a17ac39c39c7364e68eff78e777315  libgfortran/generated/maxloc0_8_i2.c
! bdecfda418e9548858589078653fe4a5  libgfortran/generated/maxloc0_8_i4.c
! 62cc6f1b774e0e954a81efaa3a63aa80  libgfortran/generated/maxloc0_8_i8.c
! 3f1cd62c48d3aad9a75994c2d0a9c7fc  libgfortran/generated/maxloc0_8_r10.c
! c88176de7e709a0b31c8249082b583a3  libgfortran/generated/maxloc0_8_r16.c
! 5abc74dfc3750ea6783d92fbed56a3cd  libgfortran/generated/maxloc0_8_r17.c
! 182d958c45c4d30bb521776384f87baf  libgfortran/generated/maxloc0_8_r4.c
! 924781c55dd766a36fbb4a01303587e0  libgfortran/generated/maxloc0_8_r8.c
! b8112650eef0643754edcab41e2f828b  libgfortran/generated/maxloc0_8_s1.c
! 05ac426c7fb43ee1b3733455583bfd84  libgfortran/generated/maxloc0_8_s4.c
! 233bcdbf836ac57baee2e2b157a45fd3  libgfortran/generated/maxloc1_16_i1.c
! 90c0b60066951208ab867e121bdacdc1  libgfortran/generated/maxloc1_16_i16.c
! e35c69e21192c4be2374356451056f48  libgfortran/generated/maxloc1_16_i2.c
! 9f37d502938c2c93194eee922717ed7e  libgfortran/generated/maxloc1_16_i4.c
! ff581d5a57e9fa1aba38583558957a13  libgfortran/generated/maxloc1_16_i8.c
! 9fb1ab781753bb2a67daca7aef592252  libgfortran/generated/maxloc1_16_r10.c
! 3b4364a8a061608f09591841f5afa112  libgfortran/generated/maxloc1_16_r16.c
! b270ef642dc1f3a0b365bfd88b075a32  libgfortran/generated/maxloc1_16_r17.c
! 6265af287e28c1924adb51ca1a95872f  libgfortran/generated/maxloc1_16_r4.c
! 07da8412027513e6a42f8832b18907d7  libgfortran/generated/maxloc1_16_r8.c
! fc20a4eb8271fb80cd56cf5135c6b90b  libgfortran/generated/maxloc1_16_s1.c
! 7b16163b674874273332e9a89749b1cb  libgfortran/generated/maxloc1_16_s4.c
! 880dcb1b9a42d205dacb0dd0bf916e12  libgfortran/generated/maxloc1_4_i1.c
! e05d25f0074be2012161b02ccc8fdc57  libgfortran/generated/maxloc1_4_i16.c
! 4057de0edf4f1c508882b9def5056fbd  libgfortran/generated/maxloc1_4_i2.c
! a46971f93d3aa3a073579f79c6a68a14  libgfortran/generated/maxloc1_4_i4.c
! 449b9689a1a381657b6b59f729237506  libgfortran/generated/maxloc1_4_i8.c
! 1f3db60a8d66648a8bfa669f661bb406  libgfortran/generated/maxloc1_4_r10.c
! 03078a10b7ec8983c5e465cec06cf197  libgfortran/generated/maxloc1_4_r16.c
! 59a3d7d1239e8bc4a12dd3f60d8ea1ea  libgfortran/generated/maxloc1_4_r17.c
! 189f9d11a8aad07c835dcde01a03fe08  libgfortran/generated/maxloc1_4_r4.c
! f1f5bbf41ca3a0f12d75e08096fdbc2b  libgfortran/generated/maxloc1_4_r8.c
! 61556fa37040fe69291366631a401e92  libgfortran/generated/maxloc1_4_s1.c
! a4f267f117332845dd99c309c9f6a479  libgfortran/generated/maxloc1_4_s4.c
! 928fbaf793f3d91e88f173c56940fde2  libgfortran/generated/maxloc1_8_i1.c
! f66bb625d9676e71a9b09043aabb65c9  libgfortran/generated/maxloc1_8_i16.c
! 8e3a433837cf4dbe042b890668881823  libgfortran/generated/maxloc1_8_i2.c
! 7fa8e8854a7fef1db06c049e9d7b6e51  libgfortran/generated/maxloc1_8_i4.c
! 5efe4e8297ccedb26b613999a6222aea  libgfortran/generated/maxloc1_8_i8.c
! 5797ef2b0f4ba84fbfd01a41f21fab16  libgfortran/generated/maxloc1_8_r10.c
! 1dc6faae00d302a076a7535295c5c55b  libgfortran/generated/maxloc1_8_r16.c
! 9c76e2248512c1e8753c8a62276f103e  libgfortran/generated/maxloc1_8_r17.c
! 044a833c2095793536e8bbf5479b7836  libgfortran/generated/maxloc1_8_r4.c
! edba4f971fc680d16b1649a81c56a80f  libgfortran/generated/maxloc1_8_r8.c
! f3f0d61f79898773c50703bafe5af2de  libgfortran/generated/maxloc1_8_s1.c
! 240863dac6a589cecfe75a6784736a3c  libgfortran/generated/maxloc1_8_s4.c
! f5ddaa0d3c8d53f6f13e04405e994ecf  libgfortran/generated/maxloc2_16_s1.c
! 5e25dc3d8f28373dc2f64e4c0ec65c6a  libgfortran/generated/maxloc2_16_s4.c
! faf98c771f31dd6173a482b02cd412de  libgfortran/generated/maxloc2_4_s1.c
! c2ef85345d4e3d41e27a0f8b1f5e3052  libgfortran/generated/maxloc2_4_s4.c
! 377c0ca39a55561510c489dded3e32b4  libgfortran/generated/maxloc2_8_s1.c
! 1e59175eb6ae804b5c7b27bc8794d6cf  libgfortran/generated/maxloc2_8_s4.c
! bbab3934a3bd9ad75df531fa64b48e35  libgfortran/generated/maxval0_s1.c
! 3db68e9dd88046335b899e2fd42854a2  libgfortran/generated/maxval0_s4.c
! 8dc7a135da85fff6661edaa8212f3ac4  libgfortran/generated/maxval1_s1.c
! ed5dee155530fd505da8442d5f349cda  libgfortran/generated/maxval1_s4.c
! 27accc7ae0583c59dac6fe220b579b13  libgfortran/generated/maxval_i1.c
! 27cad9de454a6c138a33383c96de0017  libgfortran/generated/maxval_i16.c
! e1d35b45d936c3963c8189a4bab18bea  libgfortran/generated/maxval_i2.c
! c265d587bac3ff1574756aa3adb80b40  libgfortran/generated/maxval_i4.c
! bbdafed3e80186faef906d833eb60c92  libgfortran/generated/maxval_i8.c
! bb468bd9f5971751b4abc470244f7524  libgfortran/generated/maxval_r10.c
! fe7e71722c03a4df68ce37b8d6969aea  libgfortran/generated/maxval_r16.c
! acba8c243448bfcd925c1b6cb17993f2  libgfortran/generated/maxval_r17.c
! 3987b23df724a76cd27f73cb6d868a63  libgfortran/generated/maxval_r4.c
! e239382b566603f9d4c450c5f341b36e  libgfortran/generated/maxval_r8.c
! 7952874df6d939afd41cae4efc9f13de  libgfortran/generated/minloc0_16_i1.c
! 028c9f15b8bf376ed00fb34243c997af  libgfortran/generated/minloc0_16_i16.c
! 890cd9c864abe604c339c854d9678050  libgfortran/generated/minloc0_16_i2.c
! 9c56b3b406c498fd3860cb8a3c2551ad  libgfortran/generated/minloc0_16_i4.c
! 37d911b6aa119219049328024fcaac7f  libgfortran/generated/minloc0_16_i8.c
! db3f85b92e9f6c184bbc20f7b661b430  libgfortran/generated/minloc0_16_r10.c
! e3cd905840b6ff8218d83a033f9614f0  libgfortran/generated/minloc0_16_r16.c
! b09b42cf971b6278327d5eda5768a9c3  libgfortran/generated/minloc0_16_r17.c
! e14e68be4d8f64478e3bd5d07d660a28  libgfortran/generated/minloc0_16_r4.c
! f6a96f15869ecdaca9f93c1c74c7a547  libgfortran/generated/minloc0_16_r8.c
! 80e61c97fbfff51602fb6576f3273eb3  libgfortran/generated/minloc0_16_s1.c
! 98fa501649e976967c618eb68fbc8afa  libgfortran/generated/minloc0_16_s4.c
! 773dd3274adec0198c477f8b59963969  libgfortran/generated/minloc0_4_i1.c
! 812fb71d6d4fede1f7a94689af15b629  libgfortran/generated/minloc0_4_i16.c
! e4e6ed305885f18d70afcd0d85b33669  libgfortran/generated/minloc0_4_i2.c
! 32feeb4cbad405a4908756ffb7004e46  libgfortran/generated/minloc0_4_i4.c
! d2575fbe4fb5b5010965711b9b4ff398  libgfortran/generated/minloc0_4_i8.c
! 7908ceafc7a38e4584c26acb92c58b24  libgfortran/generated/minloc0_4_r10.c
! 8101fb3e498a4ecafa79dc11356af927  libgfortran/generated/minloc0_4_r16.c
! 1e9393767c52edd050bc80c2652f8159  libgfortran/generated/minloc0_4_r17.c
! c625fa09e9ffa999e2f77ed6409d41a2  libgfortran/generated/minloc0_4_r4.c
! 3b018270130a037f0897c2aa036c3fd4  libgfortran/generated/minloc0_4_r8.c
! 1b7b759ab28dd5f033fa1a10885875ad  libgfortran/generated/minloc0_4_s1.c
! b10a6a10b0817fab6eb527c7ac1750ee  libgfortran/generated/minloc0_4_s4.c
! c5e8ca7113d3199897d5c54892e7da2a  libgfortran/generated/minloc0_8_i1.c
! c61b20b39450cd9fb73dfe943dd4a7ef  libgfortran/generated/minloc0_8_i16.c
! 3db0dbbe12382916e853629f2c2c4ee4  libgfortran/generated/minloc0_8_i2.c
! b320ba4cc51c936ea008fb73a97a4b77  libgfortran/generated/minloc0_8_i4.c
! 6a86db28fb22c6c1d8053ffacb8f0f09  libgfortran/generated/minloc0_8_i8.c
! adb0bcdb869d8ef9b52ff77b7465b303  libgfortran/generated/minloc0_8_r10.c
! a0cb2dd43a315c028eda7a7bcf7b19cf  libgfortran/generated/minloc0_8_r16.c
! ac788c952b70d3c96599265e10ff44f6  libgfortran/generated/minloc0_8_r17.c
! 6b02003f411c1f6ebd1fff024a99e799  libgfortran/generated/minloc0_8_r4.c
! 6aa787a6e3cb26b9d283dc3a482a4669  libgfortran/generated/minloc0_8_r8.c
! e90ffa78cf9a2f6b1c09fa43826d0f0d  libgfortran/generated/minloc0_8_s1.c
! 1cadcf61a98238ad0bd9ef680ba8518b  libgfortran/generated/minloc0_8_s4.c
! 4d95aec018137c121d0ecb43ff33f092  libgfortran/generated/minloc1_16_i1.c
! c13bdde6bf3a3ee10223ed08d72c4c2a  libgfortran/generated/minloc1_16_i16.c
! 81b6a4d4ec0c94b5ed38ccc358731a7a  libgfortran/generated/minloc1_16_i2.c
! 785a6aef2f5a66d4ef9685e26bc054f7  libgfortran/generated/minloc1_16_i4.c
! b22201c1c02184e430f6cc63cdea7930  libgfortran/generated/minloc1_16_i8.c
! 27f478a94feebb9305542f1745d5b6f4  libgfortran/generated/minloc1_16_r10.c
! 17ad106d35231d2f89d4e82b96c12800  libgfortran/generated/minloc1_16_r16.c
! b998f4524053840b1511dd46b980460b  libgfortran/generated/minloc1_16_r17.c
! cfc3900e4407c1a6dbeb59457ccf9b26  libgfortran/generated/minloc1_16_r4.c
! 6fff87ff4ad484aaafb7a0b03820ae9a  libgfortran/generated/minloc1_16_r8.c
! f1507c403904a3006e396976c1f548e9  libgfortran/generated/minloc1_16_s1.c
! 1cc537e0737594bdacc0ebc026fd728f  libgfortran/generated/minloc1_16_s4.c
! af95a0741472502ccdf4b14eca650731  libgfortran/generated/minloc1_4_i1.c
! 581599880a5e18018df7096a48139382  libgfortran/generated/minloc1_4_i16.c
! 95c95c6f9e0fe402ed18e86957c67122  libgfortran/generated/minloc1_4_i2.c
! da62f3e9d5c3af09495c71bc57510ccd  libgfortran/generated/minloc1_4_i4.c
! ab8ec068ffaebdaf1f3b288d423b5346  libgfortran/generated/minloc1_4_i8.c
! 94fe64ddc5ce571ea4faee70acde2a99  libgfortran/generated/minloc1_4_r10.c
! dfb3426d440965537fa04f7aa01e98b5  libgfortran/generated/minloc1_4_r16.c
! 2a1c2a9ed28efbb8fcfbfb029dca760e  libgfortran/generated/minloc1_4_r17.c
! b270a875debcdd163bb085b62880aca5  libgfortran/generated/minloc1_4_r4.c
! 54e1d4b9176df78523ad908d887f59f4  libgfortran/generated/minloc1_4_r8.c
! b2663ccaff98ff0d7fe2281ca0b7dd87  libgfortran/generated/minloc1_4_s1.c
! 6de7e34163906ce22ccba2157c5b45fb  libgfortran/generated/minloc1_4_s4.c
! f03d419e3b14b99669f176bb5489e0ba  libgfortran/generated/minloc1_8_i1.c
! 2df54b1d5e6abf03ba6a9057b787adee  libgfortran/generated/minloc1_8_i16.c
! 57a1ebef875d7297f203230dc6a362f3  libgfortran/generated/minloc1_8_i2.c
! 568339fdb77c71c56408226a4ad68f96  libgfortran/generated/minloc1_8_i4.c
! e0f3b9d1e4595628fc767088c18ff678  libgfortran/generated/minloc1_8_i8.c
! 400740828cc970d673f97e6f8f75d188  libgfortran/generated/minloc1_8_r10.c
! 8db40a6d85225aee1d4412277874fb42  libgfortran/generated/minloc1_8_r16.c
! 1022bde09145492293a0f6d85691bed4  libgfortran/generated/minloc1_8_r17.c
! 097a1720c8ad5611e8007d8c2fe4f5f4  libgfortran/generated/minloc1_8_r4.c
! 724c3577ebbb6981ff52d5107070850c  libgfortran/generated/minloc1_8_r8.c
! 19d066969b1767551df155353497444e  libgfortran/generated/minloc1_8_s1.c
! 95f11ef80cbb94767365e5eb16000d0a  libgfortran/generated/minloc1_8_s4.c
! ec8e5eb3cbb1ec2e0f866b0cf98ca60d  libgfortran/generated/minloc2_16_s1.c
! c4262c4fb85df43e1da1d7d593b9f937  libgfortran/generated/minloc2_16_s4.c
! d35502f79efb0ca7a8c0c962aa8110b1  libgfortran/generated/minloc2_4_s1.c
! 9aa255208a799aea0104b31543f3abc6  libgfortran/generated/minloc2_4_s4.c
! 8e0e1599fd3613b25c96be39c402ebac  libgfortran/generated/minloc2_8_s1.c
! 718e7e26fd3b1bc3578daaae7b2cc6b6  libgfortran/generated/minloc2_8_s4.c
! bc1cd858c461d4b934ceaf97ce60113e  libgfortran/generated/minval0_s1.c
! 42bc79a21c2cc68116584f2e3fd38e55  libgfortran/generated/minval0_s4.c
! cbe49b64dd6a5c52f3d4f1ec0e38727c  libgfortran/generated/minval1_s1.c
! a189a1db32b865a2f1353ab9f38df6e7  libgfortran/generated/minval1_s4.c
! 81c7a04f34a56d156de8b3a2f52152f5  libgfortran/generated/minval_i1.c
! 899452c0064216e48953c0d3bda3d81f  libgfortran/generated/minval_i16.c
! c86f3ae90cc9963689812bcb6fdd3e72  libgfortran/generated/minval_i2.c
! b19eac07ae5b152afb5e52966619ef96  libgfortran/generated/minval_i4.c
! aaab9718d49c0eeb1dfb7163062cc6fc  libgfortran/generated/minval_i8.c
! 2861083e96fc1887c40f4ef971004b68  libgfortran/generated/minval_r10.c
! 08e2cf98bfc6c124292eef2a07780202  libgfortran/generated/minval_r16.c
! 9d15bf4b88a382ccaf240d32cbe26e97  libgfortran/generated/minval_r17.c
! 57054f2731e10ad49e9cfae9550f77f4  libgfortran/generated/minval_r4.c
! 63b4062603da946f7ce592900b1999b0  libgfortran/generated/minval_r8.c
! e62e322f009e327c3bfe6a84c9de1f5b  libgfortran/generated/misc_specifics.F90
! 3f7adf7b0dec9aeb758352a8c29a5285  libgfortran/generated/norm2_r10.c
! 8266459e27319f1b265e34e0b92cc3e1  libgfortran/generated/norm2_r16.c
! b56508da00a0c476421c85d2a15408cd  libgfortran/generated/norm2_r17.c
! c90618629cc3b4eeffc6a90e58ae7e0f  libgfortran/generated/norm2_r4.c
! 6fbfefd7c2214f636f7a560800b395f7  libgfortran/generated/norm2_r8.c
! cf1cc40743050c495f97f89fc6c8cf62  libgfortran/generated/pack_c10.c
! a4a0d3c5a3c9f808df00fcad143fa451  libgfortran/generated/pack_c16.c
! 3b78dbcb4a723c8e5d4abad5b3488acc  libgfortran/generated/pack_c17.c
! 1f17479779b28baa61ed37a2cddb5569  libgfortran/generated/pack_c4.c
! 14725af6dd0eadbb6a1e5c98453b2539  libgfortran/generated/pack_c8.c
! 42125b502ab2c3531f02d42d1fc8a6af  libgfortran/generated/pack_i1.c
! bba62bc8e1dcdd8bafdd4e1117ebf925  libgfortran/generated/pack_i16.c
! 61d90fb4ea8a916ff64505adf2ad032c  libgfortran/generated/pack_i2.c
! eaff75121826d8a2714760346a18ba81  libgfortran/generated/pack_i4.c
! 6d2381d82376d2eaa1910e4f36186a31  libgfortran/generated/pack_i8.c
! dcdb0f93107e95402bea55cfa98ae7b3  libgfortran/generated/pack_r10.c
! 66c9211ec496e1394c0c50f9257c5588  libgfortran/generated/pack_r16.c
! 525f990c865719f5656a01a6bd9391f9  libgfortran/generated/pack_r17.c
! edadf51d0359b7d9294c73146f4d5fe0  libgfortran/generated/pack_r4.c
! 7ed3f82654b81d14699327492f5b71a5  libgfortran/generated/pack_r8.c
! 8d68d57ffe23bd17ba1abb4abe0884d5  libgfortran/generated/parity_l1.c
! 06fcd790d17c25c85b4a851cb70d4011  libgfortran/generated/parity_l16.c
! 276e8a83e2ea6e2f8b6714ba46c38ef3  libgfortran/generated/parity_l2.c
! 369e1a520b7b1ed24a63dce7388243d1  libgfortran/generated/parity_l4.c
! 691bbfbfd90c8fbd1b1630967c9b394d  libgfortran/generated/parity_l8.c
! 586f8940e08c2b7fd05ac63a2f928c45  libgfortran/generated/pow_c10_i16.c
! a0878e55230ff3baf5ce733e6fa1dc38  libgfortran/generated/pow_c10_i4.c
! 5314b93b219cfc50759a5a0d92e225f0  libgfortran/generated/pow_c10_i8.c
! 47134368a46c463c4765910d315b1119  libgfortran/generated/pow_c16_i16.c
! a84feb2d3ac9692f94396683df690372  libgfortran/generated/pow_c16_i4.c
! c65436280eb372dce46993a2dd3806b9  libgfortran/generated/pow_c16_i8.c
! 08a0c261ad98c8d3f43649a0fc21e5ef  libgfortran/generated/pow_c17_i16.c
! 38fa6bd4b65ddb2f0667a85cc9f77560  libgfortran/generated/pow_c17_i4.c
! 16b539eef20b8f6d51b7492fbc32bd8b  libgfortran/generated/pow_c17_i8.c
! 2481a8e7d0aab0ee7d8f1f394764448a  libgfortran/generated/pow_c4_i16.c
! 5647d5adeaa4e6c123736924091a4c0b  libgfortran/generated/pow_c4_i4.c
! c7717ca762276a28df2ce18ee8430241  libgfortran/generated/pow_c4_i8.c
! 40f9600546d5e590a028850b37c963e5  libgfortran/generated/pow_c8_i16.c
! d3aeae6713733eb9f47a0b71808cef9b  libgfortran/generated/pow_c8_i4.c
! da7c73874a68b1ce33bfdfaf7ded86a7  libgfortran/generated/pow_c8_i8.c
! 36b830ef071d6e863203083661c79e0b  libgfortran/generated/pow_i16_i16.c
! ce676809de476d5611ca2dc9e06a7f11  libgfortran/generated/pow_i16_i4.c
! 61d182fa1c0c001d28c7e1d4d9ebd023  libgfortran/generated/pow_i16_i8.c
! 523c6bc9cd07c5a0f4eb4508ee45b7b7  libgfortran/generated/pow_i4_i16.c
! 3dac412743fa558f9f3ca45b8687d82a  libgfortran/generated/pow_i4_i4.c
! d7860dd1b641c6a0073afc9685ce299a  libgfortran/generated/pow_i4_i8.c
! 7ffa63ddcfd39cdaef9fec2b77c0e756  libgfortran/generated/pow_i8_i16.c
! 75a34a2ba4763461b2a28daab5f9c731  libgfortran/generated/pow_i8_i4.c
! d8db8d1546e98c0c7124922dbc3ae3e9  libgfortran/generated/pow_i8_i8.c
! 9716a724eb7816e9a494d4eb089aa019  libgfortran/generated/pow_r10_i16.c
! 79a36d87a4f3ef2afb614fae864bdcbd  libgfortran/generated/pow_r10_i8.c
! 02fa16fbef55826f23f6820aa3816ce3  libgfortran/generated/pow_r16_i16.c
! a9c73d30923fe052844dbe5014517b96  libgfortran/generated/pow_r16_i4.c
! 52b4d8e7a91044b1b278f1cc6e033ac0  libgfortran/generated/pow_r16_i8.c
! 29920452b31a63f8b310c2ad5e277850  libgfortran/generated/pow_r17_i16.c
! 62df542114f47d428c4add1550bb72eb  libgfortran/generated/pow_r17_i4.c
! 8f31f329754c54c0b5a3c43d74411c14  libgfortran/generated/pow_r17_i8.c
! dfbd1b38d90743b97b996e4e7ad83907  libgfortran/generated/pow_r4_i16.c
! a101651b182fc1dfc84b7ec139a0e3c8  libgfortran/generated/pow_r4_i8.c
! b1b35dcf5271a7e1dd2f7d632b37dffb  libgfortran/generated/pow_r8_i16.c
! cf343d3a8cf69a27a8800b0837af9db2  libgfortran/generated/pow_r8_i8.c
! 8be139621564963e4c9a23075585a0f3  libgfortran/generated/product_c10.c
! ed0b40f4ad9dfdc607ed0fc7ecb8c0c2  libgfortran/generated/product_c16.c
! f8ca964e1724b7e602fbb0a1ce48b542  libgfortran/generated/product_c17.c
! 69a6b51d250beb1e91953259c58b46b6  libgfortran/generated/product_c4.c
! be0a9d2668d32647676a692283082731  libgfortran/generated/product_c8.c
! 9a86b55f4c460a91adcfa984abf76db3  libgfortran/generated/product_i1.c
! ba26a38e68b22827cf8f9a9c6fbf1f05  libgfortran/generated/product_i16.c
! ffa9093389d0e6d427c663932ed7a70d  libgfortran/generated/product_i2.c
! ae97becae99a20eeb45302533b998ff4  libgfortran/generated/product_i4.c
! 37b7e27c92eaceda49f630e684edcece  libgfortran/generated/product_i8.c
! f01f2c2ade292726c1edd98a5fe70f27  libgfortran/generated/product_r10.c
! 3838be6b967b48fa8d64f9bb89c85a9e  libgfortran/generated/product_r16.c
! bdbd2c2b0aabf9a548394f891c425266  libgfortran/generated/product_r17.c
! 0571e81b43341a0d082394354d4da1e0  libgfortran/generated/product_r4.c
! 8a8a1396080dbb21c0c8a3983645f0d0  libgfortran/generated/product_r8.c
! 25c7cb04220db71866d2bd5f9eb32334  libgfortran/generated/reshape_c10.c
! 1023a48b3963f3040419b85740b16732  libgfortran/generated/reshape_c16.c
! c4b39e8164d6fa82be1550c4b0bf3f48  libgfortran/generated/reshape_c17.c
! 452ec5770e98516d3a3f2371f5de17d9  libgfortran/generated/reshape_c4.c
! c6b88fd0e2618bc74158d17d593a97e8  libgfortran/generated/reshape_c8.c
! 2cb3f9886004b0513c92116b51121918  libgfortran/generated/reshape_i16.c
! 2bd6bb4f9484c1042e1ebbba2b8b1581  libgfortran/generated/reshape_i4.c
! df9b1bcf9e7dedbeab8bfcb698c52aa8  libgfortran/generated/reshape_i8.c
! 7ca76b29755edd8dce80e7083f361cbc  libgfortran/generated/reshape_r10.c
! 57fe8c1de952c540e6cd8834f8b44e31  libgfortran/generated/reshape_r16.c
! 2ad7f5975c7da88717d0946939b5b3bd  libgfortran/generated/reshape_r17.c
! 3ab6bccea5a45d1d670a9f98aeabc836  libgfortran/generated/reshape_r4.c
! 198412e4d4acf0461a334b07aa42e258  libgfortran/generated/reshape_r8.c
! 9462581f2953a8d7f7814ddcd65e2f7a  libgfortran/generated/shape_i1.c
! 50704a2430763a518779cf02bcd6759f  libgfortran/generated/shape_i16.c
! 4f2f91e228c5a3dc316b4a6300af83ad  libgfortran/generated/shape_i2.c
! c989d3cdddbff395dc125bebbfca0dd3  libgfortran/generated/shape_i4.c
! e1d712e1880b048dc99086e59fe5f113  libgfortran/generated/shape_i8.c
! 4b23fa3db009c6a569bd775344c307c2  libgfortran/generated/spread_c10.c
! b3466aa7e2315839700291277f08573c  libgfortran/generated/spread_c16.c
! 3d6e9a55b9e24b079cc12b66e79f046a  libgfortran/generated/spread_c17.c
! 51f25e9c53a4769e835ffea204e3fd44  libgfortran/generated/spread_c4.c
! a05efb68383339f4721f4da4e7f2488b  libgfortran/generated/spread_c8.c
! 6be172b4905d8115a9ba986ff13bfaea  libgfortran/generated/spread_i1.c
! f98479f4d31f52ae7c18cd937b5dcf35  libgfortran/generated/spread_i16.c
! ade01c4ae20ceeb68fd2379f3bc29520  libgfortran/generated/spread_i2.c
! 7966085d7d39789dfd80a220eb07207a  libgfortran/generated/spread_i4.c
! e53b34b53cb1363ac091e0c92f6a09ec  libgfortran/generated/spread_i8.c
! b957ad55446afcf32b4087c6ad6cf961  libgfortran/generated/spread_r10.c
! d2b0f1221b091e1d0b32975e346e23a8  libgfortran/generated/spread_r16.c
! 1efb75d78f0c2dda870a91d0eb6f6752  libgfortran/generated/spread_r17.c
! 1d965a897e81b159bd5218c993786b8e  libgfortran/generated/spread_r4.c
! 9af970dc866cdf12b9933d3768823819  libgfortran/generated/spread_r8.c
! 87405832e0b7356581c3865c622b3dbf  libgfortran/generated/sum_c10.c
! 13e555dbeca657525aeb70b68d315c3e  libgfortran/generated/sum_c16.c
! 4eb8ae3a800e08c3578e1d0a1357683f  libgfortran/generated/sum_c17.c
! 3cb484ddb7bfa6333a1a903ac76c5402  libgfortran/generated/sum_c4.c
! 8bafa93d7af5d7e7b47c220dcfebcd46  libgfortran/generated/sum_c8.c
! db3a9d9123a55b029f5285c0b5dbf21d  libgfortran/generated/sum_i1.c
! eb123c323c71a8919cf782696b427914  libgfortran/generated/sum_i16.c
! 559da3b7219f6cc5a6c0908b32b277bd  libgfortran/generated/sum_i2.c
! b482504e1f9f9eaada274f6736ce2556  libgfortran/generated/sum_i4.c
! 8890be001481c4dcc36c8ddee6a8edde  libgfortran/generated/sum_i8.c
! 8209c3f248e49f2d1b76dd3724d0a9ae  libgfortran/generated/sum_r10.c
! 59e0f43d5fd87db80f30b972a10d81c3  libgfortran/generated/sum_r16.c
! 7b02552b7da6738429ac1e81eabd4fbf  libgfortran/generated/sum_r17.c
! 5f979d29293a26246d15a2306dae273f  libgfortran/generated/sum_r4.c
! 6bc215889e15935246d4526370e1bdce  libgfortran/generated/sum_r8.c
! 7f41a219d89fcb47def9180a15df6411  libgfortran/generated/unpack_c10.c
! 4acbacc761bc95db431f919ecf4070f6  libgfortran/generated/unpack_c16.c
! eae707272b5829d05cde2a0df1ec7583  libgfortran/generated/unpack_c17.c
! 53706a77da1c57035a3dd96bd834b212  libgfortran/generated/unpack_c4.c
! d7787ec953ddb4e233791c26cfb0a7b5  libgfortran/generated/unpack_c8.c
! d3982183e0963b64fd3db59c454ce3ec  libgfortran/generated/unpack_i1.c
! 2fdca7a046ba721faab27d4576cb0bc8  libgfortran/generated/unpack_i16.c
! 0e68cbc7ddc8184c20d06498480f1414  libgfortran/generated/unpack_i2.c
! 948742f43ae43b1e37de06ff73bca703  libgfortran/generated/unpack_i4.c
! 6aeb1a0ae5d0887436a686e680ee234b  libgfortran/generated/unpack_i8.c
! 951b6e383cc98171485758d1463b20b8  libgfortran/generated/unpack_r10.c
! d3aca4f8d1edfd1c9c2dfc6b4c9f4a2e  libgfortran/generated/unpack_r16.c
! 2eddeadd3aead196610b1b2dc56297ba  libgfortran/generated/unpack_r17.c
! 6dc0aebc68b42603e2b49d2feb61d5be  libgfortran/generated/unpack_r4.c
! af1e0feeab04d04e55e197d3bd630030  libgfortran/generated/unpack_r8.c
! abe776a2a8ff2f6c03f56d0f05fe3fde  libgfortran/gfortran.map
! 022ddb39b5dfb23e56f8c349dda234e2  libgfortran/ieee/ieee_arithmetic.F90
! 922de90c7aa879bc75ab02b6ee5a9af2  libgfortran/ieee/ieee_exceptions.F90
! 9b0cbc6a93c8410682bebcb499ca285b  libgfortran/ieee/ieee_features.F90
! 605161f750036d7f89924cbe3aacbc66  libgfortran/ieee/ieee_helper.c
! 0306a899783adfa4c2fce57279c33e6c  libgfortran/ieee/issignaling_fallback.h
! 098dbe8c67431dec1da38f2c90b14b3c  libgfortran/intrinsics/abort.c
! e4c78e724174f57c3d57ae8084e032aa  libgfortran/intrinsics/access.c
! 749e2a31b26acabaf76577b380d125b3  libgfortran/intrinsics/args.c
! e8a64408cd0747190e956c88fb19bb95  libgfortran/intrinsics/associated.c
! fba2c2566f2c90f92ff7258614a535e9  libgfortran/intrinsics/c99_functions.c
! d178159f4b7b9d52c890c3dfa81f5be1  libgfortran/intrinsics/chdir.c
! fe1b26289295fcefb093bb9694ceca1f  libgfortran/intrinsics/chmod.c
! e67e46af85ebac5bc0a736f906d4f3d6  libgfortran/intrinsics/clock.c
! 5945ccc51125c8d55772c091fb1c40ba  libgfortran/intrinsics/cpu_time.c
! af29276d31f4b0794efcbb20bc55e683  libgfortran/intrinsics/cshift0.c
! 1c70327e4ac66420c1f83dc20703dc09  libgfortran/intrinsics/ctime.c
! b96d06a2431b61fc672a12388aecd4f9  libgfortran/intrinsics/date_and_time.c
! f9c37acd66d311987aee77625d6d96a9  libgfortran/intrinsics/dprod_r8.f90
! 472bc612d1ae52cba9bd458e6f70ed63  libgfortran/intrinsics/dtime.c
! bfa572c97a2ea6c59de3b53b9af3b7a6  libgfortran/intrinsics/env.c
! 85ac554e7781fde0a65da63524701cec  libgfortran/intrinsics/eoshift0.c
! 9490caec9513caa7dc999055dc37d1c2  libgfortran/intrinsics/eoshift2.c
! 16267d04b264bcf3e882f0df4b2bcd56  libgfortran/intrinsics/erfc_scaled.c
! ab2c6db7b0a1e20a3e5f2568a2ea9f78  libgfortran/intrinsics/erfc_scaled_inc.c
! 02d59e173f36060c3ba4ec6404ada67a  libgfortran/intrinsics/etime.c
! c9c4f73b03c8f02aaf409965382c4904  libgfortran/intrinsics/execute_command_line.c
! 5146ee4a70325788ba31c789df67ae32  libgfortran/intrinsics/exit.c
! 46036114be296df98eed4c307b7e6601  libgfortran/intrinsics/extends_type_of.c
! a066286e5280d88822329a64cf96f66d  libgfortran/intrinsics/f2c_specifics.F90
! 89ee7181a8a78e8ef3ccb7a4129e924a  libgfortran/intrinsics/fnum.c
! d698b23840ca602acb025c5e2c8f3544  libgfortran/intrinsics/gerror.c
! 8299674a5df5a00940f03141911a8c91  libgfortran/intrinsics/getXid.c
! 788ce51a4471db37cb412fdd4d61846a  libgfortran/intrinsics/getcwd.c
! 4b2c35886aeb2c2e2df0d304e4bec76a  libgfortran/intrinsics/getlog.c
! 7211c33e1348afdc4a350cbc4b149d07  libgfortran/intrinsics/hostnm.c
! f8ec3804c49bfd9c1cae3c331119f603  libgfortran/intrinsics/ierrno.c
! 6730f04cb81d58b1c7f57dcdf9b03ab1  libgfortran/intrinsics/is_contiguous.c
! f99f17c7e73a4b35ce5ecac015e7eff8  libgfortran/intrinsics/ishftc.c
! d5cce4e9128a8a497b1006d07d308699  libgfortran/intrinsics/kill.c
! 8788a28944e462b598b5dae5aebd4e67  libgfortran/intrinsics/link.c
! 89e73ff54841bf638e5a44531fea9541  libgfortran/intrinsics/move_alloc.c
! ae7806fbc7736ef993908686b683031d  libgfortran/intrinsics/mvbits.c
! 905757aa129ba1d653050130c8cb43c3  libgfortran/intrinsics/pack_generic.c
! d8fe76c04d32b2e9060c44f82faef2c4  libgfortran/intrinsics/perror.c
! 6c34e3415bc1e17dfffe2d2c6ffb2836  libgfortran/intrinsics/rand.c
! 8d094c7bbb8283d1e49fd37fed7a7223  libgfortran/intrinsics/random.c
! ea3e9e669ec31e7d48aa37031c8edde1  libgfortran/intrinsics/random_init.f90
! e435c51b00d2d2d3ef16c832c55e663a  libgfortran/intrinsics/rename.c
! 0eddf1a7beb3c9db17e67e9eaa14ca23  libgfortran/intrinsics/reshape_generic.c
! cbcf8d2d5ba73af0dfb9ee08e047a6f8  libgfortran/intrinsics/reshape_packed.c
! a9c8cf9f8476442e0f8da23f5ac3d48d  libgfortran/intrinsics/selected_char_kind.c
! d59f581e29a5a2d753c5dc040c089faa  libgfortran/intrinsics/selected_int_kind.f90
! 5ecedd4ff82b0c04db94a8999ba06dbe  libgfortran/intrinsics/selected_real_kind.f90
! 2a767cc7dc06de4d5c7ff56907d2ce7a  libgfortran/intrinsics/signal.c
! e714edb7b6d98fefec00a02e1397b7be  libgfortran/intrinsics/size.c
! 31e578b4fbf1e0978beae8fbaeb5b58f  libgfortran/intrinsics/sleep.c
! 407d30ec2f558e86486acb03f7160705  libgfortran/intrinsics/spread_generic.c
! 2d6481a7f7a20345e33a725753f62cce  libgfortran/intrinsics/stat.c
! 2b16ff0bf376e52143b14e7486a6db3a  libgfortran/intrinsics/string_intrinsics.c
! 15be15c42527ba3ec418aa8761643057  libgfortran/intrinsics/string_intrinsics_inc.c
! 0ef3bd0347aa1b5f2a499c9d2ce9d034  libgfortran/intrinsics/symlnk.c
! 98e0916764ea7f9084e041db0470b862  libgfortran/intrinsics/system.c
! 24334ba74c9f879dd2e7928c829ce22b  libgfortran/intrinsics/system_clock.c
! b45142e736f65a2937ba7cb14de9bf55  libgfortran/intrinsics/time.c
! 08c87532319018dd1d103e9bab042cf5  libgfortran/intrinsics/time_1.h
! 2824de2b57cda4188a6b1e8c6f70b48c  libgfortran/intrinsics/trigd.c
! f3de0a89d5a1d57a0b8508351c7863a3  libgfortran/intrinsics/trigd.inc
! 0f70590a693f9211f6f9a3e8d3c10fcb  libgfortran/intrinsics/trigd_lib.inc
! 02b29eac6eca3b3c906a21e9391d37b7  libgfortran/intrinsics/umask.c
! dc5a158f5302465b3f2e59928d73d101  libgfortran/intrinsics/unlink.c
! dff13028e96ddc3c2d80a2840804e959  libgfortran/intrinsics/unpack_generic.c
! 1ec7f0ce3388fbcd3d20284727bdc7c6  libgfortran/io/async.c
! c417236572002305532e7cfa88a37440  libgfortran/io/async.h
! 0c7ff477b133f537b180889bfa83dd50  libgfortran/io/close.c
! b8815933feecce36a6c78d90808f93df  libgfortran/io/fbuf.c
! 73dd7e552edd651f8388277f429fa401  libgfortran/io/fbuf.h
! 63f4fcebeec9d1be5d77ca9077b844ad  libgfortran/io/file_pos.c
! 3cfce5ff02a77560eea8993333efe556  libgfortran/io/format.c
! be03b81f4cb15ad5b45e1f0b83d714ff  libgfortran/io/format.h
! 139bce575870e46f5866dc38e4ed9cc4  libgfortran/io/inquire.c
! 3323894eaf14b0bf4f9c0759601b4f45  libgfortran/io/intrinsics.c
! 89e51fc70e97b6d18f788a870fb2e131  libgfortran/io/io.h
! 7cde8ae696797a4bc1cc257ba7d8a653  libgfortran/io/list_read.c
! 389a5f70e7811be5c308de1069d51bf2  libgfortran/io/lock.c
! 98d6832225bb91387b70c7b93d717152  libgfortran/io/open.c
! 82a39b505357f1fef475eb6a133affa1  libgfortran/io/read.c
! 62d999264ba57d39ebca6da3226966eb  libgfortran/io/size_from_kind.c
! 7b62ae77ff353ca9b105aa5ab89d7d5d  libgfortran/io/transfer.c
! 6804c05f31f07473283c24263101986b  libgfortran/io/transfer128.c
! c8d6fca00774525b7db4171a021d595f  libgfortran/io/unit.c
! dc52619e1cfa84b7166abda6759ec678  libgfortran/io/unix.c
! f53bf8a377fabf09b90ff9ac95232c65  libgfortran/io/unix.h
! 363eb7fd4102408ec69da64edac2ee58  libgfortran/io/write.c
! f273395f71a8bb633083e471fc1bbf14  libgfortran/io/write_float.def
! 6b4c3a7d1ef1470d52a6fb5bef0576eb  libgfortran/kinds-override.h
! 840561aa2cceac1389496086176a24b1  libgfortran/libgfortran.h
! 0acddc63592eb50916263aa49d35efe9  libgfortran/libgfortran.spec.in
  dc1a87f5ed3520558b0fe9f43e4f5ba8  libgfortran/libtool-version
! 61e3cb51f0b281aef50dab1254b22b5f  libgfortran/m4/all.m4
! ab9bb61b04fe1dacd9460ca03ac1ee8d  libgfortran/m4/any.m4
! 6d169ee2bab60f4e1b066d92202b0e28  libgfortran/m4/bessel.m4
! a89a548262060c3e8f2c5300d41792b4  libgfortran/m4/count.m4
! 102045207b5c918699c7f8d2e32b6579  libgfortran/m4/cshift0.m4
! db64a050ad31b134a6c3d7a5be33a56c  libgfortran/m4/cshift1.m4
! 43589fa15b639d146691cfd16ad9fdc3  libgfortran/m4/cshift1a.m4
! eaca4cc43fbb4e1bf7bd286bc39d2329  libgfortran/m4/eoshift1.m4
! a4c1d6ad9343e8d17168e004e9ffaa9a  libgfortran/m4/eoshift3.m4
  a70290662a995bcc0ff8ac868b6eddda  libgfortran/m4/findloc0.m4
  22271fa12e82c61051f302c3a5072376  libgfortran/m4/findloc0s.m4
  111ea74dceb547cbf63c12832d73d5f4  libgfortran/m4/findloc1.m4
  be432b0e528c65667e6d736e1537515d  libgfortran/m4/findloc1s.m4
  62c4506b866cb09ea489c455e7c2e8bf  libgfortran/m4/findloc2s.m4
! c9d3acabcb2a3d7e0b3b1d593f94970e  libgfortran/m4/head.m4
! 595c9bd3babdb152a57dceb4d80071c8  libgfortran/m4/iall.m4
! 6168aaeac8454fc4554b6c3cd3b2544a  libgfortran/m4/iany.m4
! dc31c3dc230a3473d5aec5fc55dcee49  libgfortran/m4/ifindloc0.m4
! f68d50561c3fad876e6e9c1cd90cbd74  libgfortran/m4/ifindloc1.m4
! 2d09599f11ac5a7c824cafe2082ab158  libgfortran/m4/ifindloc2.m4
  143daeeed4d4e1baa17753b51ddd88be  libgfortran/m4/iforeach-s.m4
  ef77f0d18ce645146e5155d85730a2dc  libgfortran/m4/iforeach-s2.m4
  8bbbce69fc532a405b1b88c79c2ef47b  libgfortran/m4/iforeach.m4
+ d41d8cd98f00b204e9800998ecf8427e  libgfortran/m4/ifunc.m4
  89b98ba2db8ff2252ed184a6c20b8f31  libgfortran/m4/ifunction-s.m4
  1603b9dcffb8d8436da0598e622783a9  libgfortran/m4/ifunction-s2.m4
  3cbecd5d114cf344efea0d4754437c7a  libgfortran/m4/ifunction.m4
  86a682dafdbffea255a15ff37710c93a  libgfortran/m4/ifunction_logical.m4
! 387bc97c431ad1f2777d5b90a33e2d91  libgfortran/m4/in_pack.m4
! 00470ff43234442dcc2547f03b7b35ae  libgfortran/m4/in_unpack.m4
! 87f7fe240f0a47edd0b43ba0ced38554  libgfortran/m4/iparity.m4
  931d3e6134be8b18f8fd4b755b0f33cc  libgfortran/m4/iparm.m4
! 8fa415e6b47c79a32ded593d75eacfe8  libgfortran/m4/matmul.m4
  f90a0613ba9c7910fede3029a8db5527  libgfortran/m4/matmul_internal.m4
! 2e5af10a998fb33058b4c09f11d71bbc  libgfortran/m4/matmulavx128.m4
! 6a77468604f2282a6994d0828395ca0b  libgfortran/m4/matmull.m4
! e4a84727dfdbf2df5cdea47355d79d5b  libgfortran/m4/maxloc0.m4
! dfcc08f7c2feba73f8a326b85141632a  libgfortran/m4/maxloc0s.m4
! 6a16013e23ae0dd3816d6d43574e0699  libgfortran/m4/maxloc1.m4
! d0fa96ff91abe776e8e3c69178e2cbc5  libgfortran/m4/maxloc1s.m4
! 26edbaa33a08f4ee52adbe41516a4234  libgfortran/m4/maxloc2s.m4
! 8bd4079ef43eb701caae9c44b03b5326  libgfortran/m4/maxval.m4
! d436fa250176f0da93aa9856fc6fa7f6  libgfortran/m4/maxval0s.m4
! d2b5ef55b012352c861701270720c8fd  libgfortran/m4/maxval1s.m4
! c1ddf3b84bb52049490b00026554146c  libgfortran/m4/minloc0.m4
! 624f4ef8021ae8611de415ffc98aef57  libgfortran/m4/minloc0s.m4
! f429963a5772147d9a21c5e5b5a0b6b4  libgfortran/m4/minloc1.m4
! d2d1889874d22bf60328946074435d56  libgfortran/m4/minloc1s.m4
! 65975b2b3a5877f643008af268f821d3  libgfortran/m4/minloc2s.m4
! 352bcdfe8ebe3b30c46d6a94ec99ee8c  libgfortran/m4/minval.m4
! 34c3cfc84bcf7148f1f51aa62eaf2997  libgfortran/m4/minval0s.m4
! 8a3e03bd89763c569abccf7fc8322a18  libgfortran/m4/minval1s.m4
  6d8cbcd1d1489f643839e7ac2c00a736  libgfortran/m4/misc_specifics.m4
! 617892c7aa9d20832c57477f2255cf63  libgfortran/m4/mtype.m4
! 13e6401ba7f38454bc528a53ac62c662  libgfortran/m4/norm2.m4
! fa28013ea9f964ef32e0531d81a7e459  libgfortran/m4/pack.m4
! 57d9dc7f0a96d3130995586dcfd6a83b  libgfortran/m4/parity.m4
! becef773102de3d497481291fc144ffd  libgfortran/m4/pow.m4
! 402bd44044fd6d76d66c78683bc2e0b6  libgfortran/m4/product.m4
! 48b5ad8f5c4cd7b39d78f45d9dd07356  libgfortran/m4/reshape.m4
! 5fa7c412c5b7ffe6768c29ef87fcd7e7  libgfortran/m4/shape.m4
! 2b8de82dc8d9a5bfe1aebe4edd8e2adc  libgfortran/m4/specific.m4
! fde11348d3f1f27d7e48fd646db7c9b0  libgfortran/m4/specific2.m4
! 0c94b7f2bea36c63109413899199d474  libgfortran/m4/spread.m4
! 9613148070bf43c5b103d0566beef08d  libgfortran/m4/sum.m4
  0ad0318f00c85db29d184dc3dff12276  libgfortran/m4/types.m4
! 06a963e8fca563c68f71b76ca86fe6c6  libgfortran/m4/unpack.m4
! c5f600c8cc0ae5f16f2866cff071e3a7  libgfortran/mk-kinds-h.sh
  5cacd438c86553689eda2ce3d5623b45  libgfortran/mk-sik-inc.sh
  f8813ac773f6f6eb0ea6ecb287fb9250  libgfortran/mk-srk-inc.sh
! e838dcb32b0b396111855513bd1f667a  libgfortran/runtime/ISO_Fortran_binding.c
! f72e03d8a1fcc1517420eb124c251a46  libgfortran/runtime/backtrace.c
! 033a45c97f612d87d29d286d779ccd29  libgfortran/runtime/bounds.c
! a3e327b6e8ba2fed84089c7d1c92a250  libgfortran/runtime/compile_options.c
! 56b97f586fd00ef96625f5a0e747913b  libgfortran/runtime/convert_char.c
! 0e1d6a16baa3f41434bd5ceed391aad7  libgfortran/runtime/environ.c
! 86fbe145cd5a3736405ebae02b602833  libgfortran/runtime/error.c
! b71068475fa3bd57f5bcc425af970c05  libgfortran/runtime/fpu.c
! dbbd9294e38281c22423658a9d5cd8f9  libgfortran/runtime/in_pack_generic.c
! 434d52bcfca810c19370d0f0c4886787  libgfortran/runtime/in_unpack_generic.c
! 1fdd7662ff4fedb4b83a1557a96aa058  libgfortran/runtime/main.c
! 3bc571aa159ce7d070bc49b6181ba73c  libgfortran/runtime/memory.c
! ba55e489491a671df1db5d07ab1b08b9  libgfortran/runtime/minimal.c
! bbd0ca6d2a102f1d4e807d1f45c1d54c  libgfortran/runtime/pause.c
! 6541c9b21dcb26be9319bf3ddbf34206  libgfortran/runtime/select.c
! 503d8c7be69ce9c68270e11c67d91dde  libgfortran/runtime/select_inc.c
! d372c6ee28f589dfac9e56f5faea2629  libgfortran/runtime/stop.c
! 79ec8cc63043a525e906838fe1a16c64  libgfortran/runtime/string.c
  5d4950ecb7b26d2c5e4e7b4e0dd74707  libgo/LICENSE
! 160ac38979ae9334894994a1e7b4bf3b  libgo/MERGE
! d06107d54c5e373da04a7a6d829b00aa  libgo/Makefile.am
! ff8c768aa5b945fd017a46574d4fa171  libgo/Makefile.in
  3a55d95595a6f9e37dee53826b4daff2  libgo/PATENTS
  d0952f0b499c9ebb887222764488a2fc  libgo/README
! 492dd43b98c6602a8754328947942c40  libgo/README.gcc
! d4073ec54dd2cef02d0bfc29dd9f6c82  libgo/VERSION
  1a52cbc1db42a585461a5c4bcb398840  libgo/aclocal.m4
! 8829a0d35f69d15ebf8b1c1f7af388b6  libgo/check-packages.txt
  603eaa1869aebeeab6662a9bef739a41  libgo/config.h.in
  ad1ce707d70b18d5d14bdbcfef82a9bb  libgo/config/README
  2b5fe3d1420b597cb702a642a065373a  libgo/config/libtool.m4
*************** dee72a6a60e99528b0d17bf3ff9a1e15  libgo/
*** 89232,89249 ****
  bc2f6032c98896249eadb56177c7d357  libgo/config/ltsugar.m4
  c30cd33c496505f13d9fbdb6970c7c33  libgo/config/ltversion.m4
  293853a13b7e218e3a4342cf85fbbf25  libgo/config/lt~obsolete.m4
! 3792f7551700bc23bc72027a75559901  libgo/configure
! 7e1fcd9e9dc2c7f188c4b0e45b9089cf  libgo/configure.ac
! 88719bb7579a17f3f5151847704e9817  libgo/go/archive/tar/common.go
! 87a02710e7efca5db41784ba5734443b  libgo/go/archive/tar/format.go
! 6157740cb7c93bbafa4610d09f935316  libgo/go/archive/tar/reader.go
! 9930270dddaf83c2a53cb877816f7a99  libgo/go/archive/tar/reader_test.go
! e0e69d0ccced710b6ed7c46ca1129f44  libgo/go/archive/tar/stat_actime1.go
! f24d0e0a8444fa94e8cf245a1b0655b1  libgo/go/archive/tar/stat_actime2.go
! 6b75937c4b7dc88bc387f5ee7d469c86  libgo/go/archive/tar/stat_unix.go
! 06d4d332c1424af554d7e1fa9ca321b5  libgo/go/archive/tar/strconv.go
  b897241cdc074d998f7af6ae036ed90e  libgo/go/archive/tar/strconv_test.go
! a5edadc9373169a34814acddeb9a99ac  libgo/go/archive/tar/tar_test.go
  d08ccef3900a68afd0a36da5c297ec0a  libgo/go/archive/tar/testdata/file-and-dir.tar
  8ec27a5ea3e63f3ba68dccfc90fa7cfa  libgo/go/archive/tar/testdata/gnu-incremental.tar
  5234643c1f7c26ef4703a7ed6b1c3a90  libgo/go/archive/tar/testdata/gnu-long-nul.tar
--- 94870,94888 ----
  bc2f6032c98896249eadb56177c7d357  libgo/config/ltsugar.m4
  c30cd33c496505f13d9fbdb6970c7c33  libgo/config/ltversion.m4
  293853a13b7e218e3a4342cf85fbbf25  libgo/config/lt~obsolete.m4
! d1ef0544e1edc75cf4fa682072c7f36f  libgo/configure
! cab12e0bb1067003d29ecf70070880e8  libgo/configure.ac
! aac32f286f60f443762f017a205c38dc  libgo/go/archive/tar/common.go
! f7d12cedad0468bfe618b4d2f78e2389  libgo/go/archive/tar/format.go
! 2bbe8478660c394e2178904d3b0fd954  libgo/go/archive/tar/fuzz_test.go
! 6123dc42dfd2d41d6f5776b4eda92499  libgo/go/archive/tar/reader.go
! 47b180c0ca552690e62886ea636368b7  libgo/go/archive/tar/reader_test.go
! ffa69c0277cdde3e78d91cd825f48428  libgo/go/archive/tar/stat_actime1.go
! fd2c83667fdced0b418cdffdace79e12  libgo/go/archive/tar/stat_actime2.go
! dbf4aa258654a967ba97d452608690ad  libgo/go/archive/tar/stat_unix.go
! 3c786cf09abc22dec3457e323e183a91  libgo/go/archive/tar/strconv.go
  b897241cdc074d998f7af6ae036ed90e  libgo/go/archive/tar/strconv_test.go
! dc025fb8dff361daf6b15bd536a71416  libgo/go/archive/tar/tar_test.go
  d08ccef3900a68afd0a36da5c297ec0a  libgo/go/archive/tar/testdata/file-and-dir.tar
  8ec27a5ea3e63f3ba68dccfc90fa7cfa  libgo/go/archive/tar/testdata/gnu-incremental.tar
  5234643c1f7c26ef4703a7ed6b1c3a90  libgo/go/archive/tar/testdata/gnu-long-nul.tar
*************** c27492a55346ce5cd8ba5907f0f6c80d  libgo/
*** 89288,89299 ****
  c41d3ee8d26caffff1a839bff5fdd38b  libgo/go/archive/tar/testdata/writer-big.tar
  88712af2a004429d7101fd0c710baa8f  libgo/go/archive/tar/testdata/writer.tar
  d76dc07e475b2905b5fec1cf319b6356  libgo/go/archive/tar/testdata/xattrs.tar
! 3c9825dafcd35349513d0466df433d28  libgo/go/archive/tar/writer.go
! 13a7418a94a547815d0402269d397059  libgo/go/archive/tar/writer_test.go
! f5d4e520fd64f9068fd7388363ca0563  libgo/go/archive/zip/reader.go
! cc93f0d8c374bfb938ca253c7d2fa661  libgo/go/archive/zip/reader_test.go
  3d2fab177a862129afb90a862adc4aa3  libgo/go/archive/zip/register.go
! a88433e6d5c9f2057511e47e1085c906  libgo/go/archive/zip/struct.go
  0e5c6061f34579a29cd9e706200e3fc5  libgo/go/archive/zip/testdata/crc32-not-streamed.zip
  a0dc0660d6847cfdefd1e34811fa3e2a  libgo/go/archive/zip/testdata/dd.zip
  aaa427720ab764d9d4afec3a3646f6ad  libgo/go/archive/zip/testdata/go-no-datadesc-sig.zip.base64
--- 94927,94939 ----
  c41d3ee8d26caffff1a839bff5fdd38b  libgo/go/archive/tar/testdata/writer-big.tar
  88712af2a004429d7101fd0c710baa8f  libgo/go/archive/tar/testdata/writer.tar
  d76dc07e475b2905b5fec1cf319b6356  libgo/go/archive/tar/testdata/xattrs.tar
! 59eb6d153885d6741b8f070f1579c498  libgo/go/archive/tar/writer.go
! 2238a9589752072adb8c9239adafd1ae  libgo/go/archive/tar/writer_test.go
! ce66ba3ee02b5023e3f74d89f3d1e6fb  libgo/go/archive/zip/fuzz_test.go
! 4aa4b2f701f0ddf19255510197d6c131  libgo/go/archive/zip/reader.go
! 2a97d1bb59399cc03d69a11728ecc926  libgo/go/archive/zip/reader_test.go
  3d2fab177a862129afb90a862adc4aa3  libgo/go/archive/zip/register.go
! 1d4ffc0781e12ae8abc1f550c03030be  libgo/go/archive/zip/struct.go
  0e5c6061f34579a29cd9e706200e3fc5  libgo/go/archive/zip/testdata/crc32-not-streamed.zip
  a0dc0660d6847cfdefd1e34811fa3e2a  libgo/go/archive/zip/testdata/dd.zip
  aaa427720ab764d9d4afec3a3646f6ad  libgo/go/archive/zip/testdata/go-no-datadesc-sig.zip.base64
*************** ef798b17dbd597b930070b057efbe211  libgo/
*** 89322,89456 ****
  384be2e5e01c2618a144579f16ba024b  libgo/go/archive/zip/testdata/winxp.zip
  1547ce4f101eeb5c10d94718c6a226c9  libgo/go/archive/zip/testdata/zip64-2.zip
  8ae15e579d181b7b7837c197f02bbd5e  libgo/go/archive/zip/testdata/zip64.zip
! 7016294ce0e44ee0d93b0fd595c059a6  libgo/go/archive/zip/writer.go
! d817f5eff2efc6dd3d61434a9a3b3aad  libgo/go/archive/zip/writer_test.go
  9294c08976cbcb51c628a6e8368b1bdb  libgo/go/archive/zip/zip_test.go
! 3634479e07cff83c61baf39bf4c34f2a  libgo/go/bufio/bufio.go
! 65bf2a704d76d4185bee8571488b51e9  libgo/go/bufio/bufio_test.go
! 74adc139d415e47f5bdc3103674b4315  libgo/go/bufio/example_test.go
  bacdebd82802cbd0f42f243c2aca0761  libgo/go/bufio/export_test.go
! d740f74520ff5e88a9c0c918820ac2dd  libgo/go/bufio/scan.go
  c7ffaa2003eb1c1048b2d6c1c520fab2  libgo/go/bufio/scan_test.go
! a84ab9f5ac6680e9df6b9852434a030d  libgo/go/builtin/builtin.go
! cc4b1f41f772919beaaddbd10c8c990d  libgo/go/bytes/boundary_test.go
! 227a41e1685dec432ccc62196c0a13c0  libgo/go/bytes/buffer.go
! acc8276bd91fff413e5d9650ce58be6b  libgo/go/bytes/buffer_test.go
! 601ab0b0ac43a537e7492cd0af462897  libgo/go/bytes/bytes.go
! 79a1081cd8d4c82ae6037032733ce1a6  libgo/go/bytes/bytes_test.go
  8403daafe90f2fb91716d191715bfb13  libgo/go/bytes/compare_test.go
! a20178f9f422e5fd1d3a39a04eea5b1c  libgo/go/bytes/example_test.go
  a6b155afe547a59c54cba47dda59425c  libgo/go/bytes/export_test.go
  1789fcecfd852b5d65f40a8be7c230db  libgo/go/bytes/reader.go
! ab6c0fe7af2e0c68fa77f629f9e8abd7  libgo/go/bytes/reader_test.go
  18d29196050b82e790cef0bf03530348  libgo/go/cmd/buildid/buildid.go
  7a3b8823d79387f7ff99452154b18940  libgo/go/cmd/buildid/doc.go
! 2debfa5c39672a9c240963c68c18a10b  libgo/go/cmd/cgo/ast.go
! bf4b652e420915a8a8c2af51e94c02d4  libgo/go/cmd/cgo/doc.go
! 6005f31db323fd902a94ee68653c3277  libgo/go/cmd/cgo/gcc.go
  3f4f081f65c8360200a9ca291e9c72a8  libgo/go/cmd/cgo/godefs.go
! 3a56522fb22cc8a3f5bcdcbc7b971603  libgo/go/cmd/cgo/main.go
! 7677535f5d7b10362903a4bbd90c25cf  libgo/go/cmd/cgo/out.go
  149613e5586c59d8d7da138f6711f0c9  libgo/go/cmd/cgo/util.go
! b8e5ab5fabe9b352c29e12e646710b19  libgo/go/cmd/go.mod
! d2e1ea2991859ac8a6c1acdca48128ca  libgo/go/cmd/go/alldocs.go
! 37def72439f93e8e61475c283db6a01a  libgo/go/cmd/go/go11.go
! cf2ef2ab4138b6f81b0bf5a5edd1df4a  libgo/go/cmd/go/go_test.go
! 2f39d0965c1dbeb00a094a0371959aa1  libgo/go/cmd/go/go_unix_test.go
  bd28be506defb294a5d5a43348b02c5c  libgo/go/cmd/go/go_windows_test.go
  aa60ed147d8f5f83a3b9ef15272f609a  libgo/go/cmd/go/help_test.go
  ccf45b3e72e384d7dad8e6255ac9f357  libgo/go/cmd/go/init_test.go
  41e41c0a0af6032b5cdcfc876da05e30  libgo/go/cmd/go/internal/auth/auth.go
  7365cc410a1388ec7c43ea42a60a18db  libgo/go/cmd/go/internal/auth/netrc.go
  e4b7ca4f607d03ca05341e397f3a9e70  libgo/go/cmd/go/internal/auth/netrc_test.go
! 045b6dd00d08c7d374570c62fce13173  libgo/go/cmd/go/internal/base/base.go
  6b2aecf35b34bc473f80b5803b77c054  libgo/go/cmd/go/internal/base/env.go
! f51fc340cd674673be68e2eeaa7e00dc  libgo/go/cmd/go/internal/base/flag.go
  f652cfaea2d1d5399874f7e96f6aa1c9  libgo/go/cmd/go/internal/base/goflags.go
! e13389c7f3a934a3f3dad9b1f8d183a7  libgo/go/cmd/go/internal/base/path.go
  51d9fb9e2292044352d69588f2f36de8  libgo/go/cmd/go/internal/base/signal.go
! d2b5e73adbbf5e07a05303239c7f4128  libgo/go/cmd/go/internal/base/signal_notunix.go
! 38409e86b8e297bfad5fab9a143d460c  libgo/go/cmd/go/internal/base/signal_unix.go
! 9c33108683f58b8ba4fd464e37396d21  libgo/go/cmd/go/internal/base/tool.go
! 4f07de489bf44f927712e18f523862c8  libgo/go/cmd/go/internal/bug/bug.go
! d3d317725b7a3ca7f065d3cd7738abac  libgo/go/cmd/go/internal/cache/cache.go
  01b943a1d382bbe09756ef3d05e01672  libgo/go/cmd/go/internal/cache/cache_test.go
! 111c4408ce7f421e44cedf7cff7416ee  libgo/go/cmd/go/internal/cache/default.go
! 5426c38b28355eb30bee2875e28344be  libgo/go/cmd/go/internal/cache/hash.go
  dbf98cd27b5bdc1078f762e3878c3567  libgo/go/cmd/go/internal/cache/hash_test.go
! a27b7440db19aa350f424779d9932f75  libgo/go/cmd/go/internal/cfg/cfg.go
! 3090700cd99ea650ae63e87e305435e0  libgo/go/cmd/go/internal/clean/clean.go
! 0875829314fcc21843cdec060af3c5a5  libgo/go/cmd/go/internal/cmdflag/flag.go
! 6c3be0f167ad36e5a58108cd50b5a958  libgo/go/cmd/go/internal/doc/doc.go
! 4c7325725a1f8c501a9bb61605df7eab  libgo/go/cmd/go/internal/envcmd/env.go
! e94b15f1334a6a6bdf0f93b849d4423d  libgo/go/cmd/go/internal/fix/fix.go
! f79bd138d57d35655c4b28ec6b2fc3fd  libgo/go/cmd/go/internal/fmtcmd/fmt.go
! 13937aaedec64dccb2e53dcaa59d547c  libgo/go/cmd/go/internal/fsys/fsys.go
! 37055e4a8f8d7e6099c9a5fa4fc3f114  libgo/go/cmd/go/internal/fsys/fsys_test.go
! 4cd7e5f3b9252aef48b035fbbfab2ab3  libgo/go/cmd/go/internal/generate/generate.go
  04d01f4e2f2945111c096a635bd59f1b  libgo/go/cmd/go/internal/generate/generate_test.go
! d4c5a085c8a26cc9066dc982939729c8  libgo/go/cmd/go/internal/get/get.go
  96113e4fc82645aeb2e115fbd468fcb8  libgo/go/cmd/go/internal/get/tag_test.go
! f22654e489484d504acc3a9f53dd7447  libgo/go/cmd/go/internal/help/help.go
! 5c387bf72e52497b839f008394c2b8b2  libgo/go/cmd/go/internal/help/helpdoc.go
! b2fc9563f27fb6fd2afddafb4ebc6105  libgo/go/cmd/go/internal/imports/build.go
! c5f91fb600f85d53429bcbdbc02c42e1  libgo/go/cmd/go/internal/imports/read.go
! 8c6c11674197076b261a580c5f491a5d  libgo/go/cmd/go/internal/imports/read_test.go
  7558bbdd2d7ad533c664ad0aceb09577  libgo/go/cmd/go/internal/imports/scan.go
! be80b0ad695ac646cdce276679466bb2  libgo/go/cmd/go/internal/imports/scan_test.go
  2ae1222b231c4bce886d401398f38020  libgo/go/cmd/go/internal/imports/tags.go
  f11a57290bd837448cb8b36a05f78a53  libgo/go/cmd/go/internal/imports/testdata/android/.h.go
  762b99b9504cf6c21afe8b2b8ac67bb3  libgo/go/cmd/go/internal/imports/testdata/android/a_android.go
  d17980afd0abcdd22bc0a638f9649ae8  libgo/go/cmd/go/internal/imports/testdata/android/b_android_arm64.go
  8028737c5f482847902e094b0772881d  libgo/go/cmd/go/internal/imports/testdata/android/c_linux.go
  0c8d0c5a7af4854b64290f758e07d50a  libgo/go/cmd/go/internal/imports/testdata/android/d_linux_arm64.go
! a0d258979e59d615c00853fb4a6e7188  libgo/go/cmd/go/internal/imports/testdata/android/e.go
! 965cb32bab55793ea9ad29d0e83d2bfc  libgo/go/cmd/go/internal/imports/testdata/android/f.go
! 2082e05cf61e131c4ed6b652d9f5af43  libgo/go/cmd/go/internal/imports/testdata/android/g.go
  f11a57290bd837448cb8b36a05f78a53  libgo/go/cmd/go/internal/imports/testdata/illumos/.h.go
  fc183e10d5f735fe65e1d4a566ac9e83  libgo/go/cmd/go/internal/imports/testdata/illumos/a_illumos.go
  9bf212d9699b274d6c23577c51362fe7  libgo/go/cmd/go/internal/imports/testdata/illumos/b_illumos_amd64.go
  3451868899345d8236e114cdf6f93b7e  libgo/go/cmd/go/internal/imports/testdata/illumos/c_solaris.go
  db9a65876fdc7bae4726f703f4c0e533  libgo/go/cmd/go/internal/imports/testdata/illumos/d_solaris_amd64.go
! 23f084ac54b3e82edbe1e23b5aecf37c  libgo/go/cmd/go/internal/imports/testdata/illumos/e.go
! 210f35a8b9827f8a231a492d33cc51ff  libgo/go/cmd/go/internal/imports/testdata/illumos/f.go
! 9d503963d9d7e77818f4e931dc1c5424  libgo/go/cmd/go/internal/imports/testdata/illumos/g.go
  2725341113cca1ac0f4a0544c9afd23a  libgo/go/cmd/go/internal/imports/testdata/star/x.go
! 3fbff6c2f768a8dd6aa445f1af0633ea  libgo/go/cmd/go/internal/imports/testdata/star/x1.go
  4c4079c04c96f77c7f0b901154a28a3e  libgo/go/cmd/go/internal/imports/testdata/star/x_darwin.go
  50a7c204a7a37fb845e61dcbe29743c5  libgo/go/cmd/go/internal/imports/testdata/star/x_windows.go
! ffbbbb13bb2522e5cebe0f8a57972529  libgo/go/cmd/go/internal/list/context.go
! e9aea19e18c2bde69520ed9ab424a5e1  libgo/go/cmd/go/internal/list/list.go
! 1ec56bedacb7b14dc8bfe15c46277199  libgo/go/cmd/go/internal/load/flag.go
  94fca467c2106c7d6fe48cdb396c70ac  libgo/go/cmd/go/internal/load/flag_test.go
  4558f4acfca06853803287a80b960f2c  libgo/go/cmd/go/internal/load/path.go
! 8e242013bb2b2d4bcc906fdcf3a5eea9  libgo/go/cmd/go/internal/load/pkg.go
  26c78443549093a85cb7a33fe5903043  libgo/go/cmd/go/internal/load/pkg_test.go
  ccfb8d791ac8b57d233dcebe8a2c2fea  libgo/go/cmd/go/internal/load/search.go
! bb7e0aaaa41b91f8e398073a4e245501  libgo/go/cmd/go/internal/load/test.go
  7d9a217aa09004e5c1276f8f9d25bcbb  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock.go
! 2cf5a7ae2e4db240cb4de97d02c8f602  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_fcntl.go
! d53a39d835e9dd46e105fc86b3078070  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_other.go
! ba1a3f4b48c56cc982cbd65d2bd6e560  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_plan9.go
! df21c39d779371bde8db2b8cccf6d015  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_test.go
! 7ff35719ae47b913814efdb7622948ce  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_unix.go
! 684fb49fd8450d2b0e73ee0358bdf025  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_windows.go
  c7979f6e9f7f493978def2825b6bf6d4  libgo/go/cmd/go/internal/lockedfile/lockedfile.go
! 3fabb69de8e0d3e565485e99343fffe4  libgo/go/cmd/go/internal/lockedfile/lockedfile_filelock.go
! 4672281f959f3ae93ebf4204324a2bb0  libgo/go/cmd/go/internal/lockedfile/lockedfile_plan9.go
! 52bcbbd26efa621f04a096d1010eaa96  libgo/go/cmd/go/internal/lockedfile/lockedfile_test.go
  c3ba4e48088987fb7241ce00bd7c0127  libgo/go/cmd/go/internal/lockedfile/mutex.go
! 2264cb4af37e609d9175569ead231ccf  libgo/go/cmd/go/internal/lockedfile/transform_test.go
! ca6d850ad34b58fbf2c43dcdbf633a66  libgo/go/cmd/go/internal/modcmd/download.go
! 5dd57065cfbf8417997f319664b06f5f  libgo/go/cmd/go/internal/modcmd/edit.go
! 8b50be9fbbd72c18ffcca8ad7b176bac  libgo/go/cmd/go/internal/modcmd/graph.go
! 03abe04351997d55ee47e49ef795cb77  libgo/go/cmd/go/internal/modcmd/init.go
  315dbdaa7c8e7a77905972465be860d8  libgo/go/cmd/go/internal/modcmd/mod.go
! 09b2b586968f5f12cd933ad1c808037a  libgo/go/cmd/go/internal/modcmd/tidy.go
! fa84e387feaec8252597bd2ac052a8b2  libgo/go/cmd/go/internal/modcmd/vendor.go
! b0ef3a5d74e613b58a774df750d56eee  libgo/go/cmd/go/internal/modcmd/verify.go
! 258b656ec6881a536f3502537e95cd93  libgo/go/cmd/go/internal/modcmd/why.go
! 12e15061b2a3becc6ab8f4d95d3261fe  libgo/go/cmd/go/internal/modconv/convert.go
! cf46af43bd29821d79b10301e6903513  libgo/go/cmd/go/internal/modconv/convert_test.go
  8e34cb2203e60108b1b8908db122c699  libgo/go/cmd/go/internal/modconv/dep.go
  f830bd72b020b4ead0cefc3e86f44144  libgo/go/cmd/go/internal/modconv/glide.go
  f94a290828a97890b66814d9b00df294  libgo/go/cmd/go/internal/modconv/glock.go
--- 94962,95103 ----
  384be2e5e01c2618a144579f16ba024b  libgo/go/archive/zip/testdata/winxp.zip
  1547ce4f101eeb5c10d94718c6a226c9  libgo/go/archive/zip/testdata/zip64-2.zip
  8ae15e579d181b7b7837c197f02bbd5e  libgo/go/archive/zip/testdata/zip64.zip
! b579db314389ca9e9fbbb0db07f3762c  libgo/go/archive/zip/writer.go
! 7eb9be5e71eadccdee8381bfadbbd50b  libgo/go/archive/zip/writer_test.go
  9294c08976cbcb51c628a6e8368b1bdb  libgo/go/archive/zip/zip_test.go
! 3de2456b9a260ab07f176a86686db110  libgo/go/bufio/bufio.go
! af90bdfc052ede99911ddda72466561f  libgo/go/bufio/bufio_test.go
! 26f8b92fbf4e526c4cfdd007dcb2ed52  libgo/go/bufio/example_test.go
  bacdebd82802cbd0f42f243c2aca0761  libgo/go/bufio/export_test.go
! 59615b1ecc1e65e9c7df6d716c6bb93d  libgo/go/bufio/scan.go
  c7ffaa2003eb1c1048b2d6c1c520fab2  libgo/go/bufio/scan_test.go
! ffd70cde38ade98edf8a7cd64fba4080  libgo/go/builtin/builtin.go
! 85ae51a148f61b05e156512eb6f43d38  libgo/go/bytes/boundary_test.go
! 12a49c64d649a120e3bec51aa44acae5  libgo/go/bytes/buffer.go
! ffbe0e90bdf0abcbb87caafc48d0d055  libgo/go/bytes/buffer_test.go
! 63a952fe1db64d5373bfa7661e771042  libgo/go/bytes/bytes.go
! da3579355d98ec39733a8132ff462f5d  libgo/go/bytes/bytes_test.go
  8403daafe90f2fb91716d191715bfb13  libgo/go/bytes/compare_test.go
! bf76eb56d9d165df11c52546e03859b9  libgo/go/bytes/example_test.go
  a6b155afe547a59c54cba47dda59425c  libgo/go/bytes/export_test.go
  1789fcecfd852b5d65f40a8be7c230db  libgo/go/bytes/reader.go
! 9b22bc7a98c2885349a54b66fb4aa572  libgo/go/bytes/reader_test.go
  18d29196050b82e790cef0bf03530348  libgo/go/cmd/buildid/buildid.go
  7a3b8823d79387f7ff99452154b18940  libgo/go/cmd/buildid/doc.go
! d29680fb3b4bcf5e39fff57092d5a323  libgo/go/cmd/cgo/ast.go
! 79e95f5125fc9fdd916c25f28fd9fd8f  libgo/go/cmd/cgo/ast_go1.go
! 86db1b52668f98f708fe37fb11f6d63d  libgo/go/cmd/cgo/ast_go118.go
! deb3f35f9719736dc46ee9467b2601d3  libgo/go/cmd/cgo/doc.go
! 08eac5893e28901c02e8ee827621602a  libgo/go/cmd/cgo/gcc.go
  3f4f081f65c8360200a9ca291e9c72a8  libgo/go/cmd/cgo/godefs.go
! 33daac065b23c6ccb42aed6e533339b5  libgo/go/cmd/cgo/main.go
! a7d9479bfd768895db0ac8a57167f359  libgo/go/cmd/cgo/out.go
  149613e5586c59d8d7da138f6711f0c9  libgo/go/cmd/cgo/util.go
! beb844547551f643c2883091efeb64e0  libgo/go/cmd/go.mod
! fb2c0e6eade8aa44fa319a96324981ba  libgo/go/cmd/go/alldocs.go
! d63ccd49ed4f30288f8b518ea5e0ad24  libgo/go/cmd/go/go11.go
! eabde89d773e8fa8ce092d3179162bc5  libgo/go/cmd/go/go_test.go
! e7ec69b7e72a6554d3e422cb728cf094  libgo/go/cmd/go/go_unix_test.go
  bd28be506defb294a5d5a43348b02c5c  libgo/go/cmd/go/go_windows_test.go
  aa60ed147d8f5f83a3b9ef15272f609a  libgo/go/cmd/go/help_test.go
  ccf45b3e72e384d7dad8e6255ac9f357  libgo/go/cmd/go/init_test.go
  41e41c0a0af6032b5cdcfc876da05e30  libgo/go/cmd/go/internal/auth/auth.go
  7365cc410a1388ec7c43ea42a60a18db  libgo/go/cmd/go/internal/auth/netrc.go
  e4b7ca4f607d03ca05341e397f3a9e70  libgo/go/cmd/go/internal/auth/netrc_test.go
! 31ecb5afbc4582d0b68c601a0fa967b9  libgo/go/cmd/go/internal/base/base.go
  6b2aecf35b34bc473f80b5803b77c054  libgo/go/cmd/go/internal/base/env.go
! 0201fbaf0f950d9c27bc3b41c3502aa3  libgo/go/cmd/go/internal/base/flag.go
  f652cfaea2d1d5399874f7e96f6aa1c9  libgo/go/cmd/go/internal/base/goflags.go
! 83717393e0b5f2205d0f89ff30ea9370  libgo/go/cmd/go/internal/base/path.go
  51d9fb9e2292044352d69588f2f36de8  libgo/go/cmd/go/internal/base/signal.go
! 4cf2b01e209ab563a6d45b0d87cdaab0  libgo/go/cmd/go/internal/base/signal_notunix.go
! 1d493732348ff99a6b4fbed063bfe55e  libgo/go/cmd/go/internal/base/signal_unix.go
! 39505b05178ed60191ff03a735fdff14  libgo/go/cmd/go/internal/base/tool.go
! 716bddd21a29453c578d6715c9653ccd  libgo/go/cmd/go/internal/bug/bug.go
! ca3b68a8a05c90670a4f6cd40bc11507  libgo/go/cmd/go/internal/cache/cache.go
  01b943a1d382bbe09756ef3d05e01672  libgo/go/cmd/go/internal/cache/cache_test.go
! 3989326088f173d44c63118400d49eda  libgo/go/cmd/go/internal/cache/default.go
! 0cd5fef4bac81851bbb26dccc85761d2  libgo/go/cmd/go/internal/cache/hash.go
  dbf98cd27b5bdc1078f762e3878c3567  libgo/go/cmd/go/internal/cache/hash_test.go
! 088afa3347fa5691d5db6edb10651415  libgo/go/cmd/go/internal/cfg/cfg.go
! 03ec30aa3c128b8a4b4e4a094a671d75  libgo/go/cmd/go/internal/clean/clean.go
! 3ec2cb32eba38b37f6634a15f9399bc8  libgo/go/cmd/go/internal/cmdflag/flag.go
! 5086184cd84be2ccb5237c4acb479d27  libgo/go/cmd/go/internal/doc/doc.go
! f295148c4f106a29bddff8389277d147  libgo/go/cmd/go/internal/envcmd/env.go
! 2278eab96ab18137777d80d9784e496f  libgo/go/cmd/go/internal/fix/fix.go
! aed6482e6999b6af16bdf2426e3f5518  libgo/go/cmd/go/internal/fmtcmd/fmt.go
! 0ddab906e6cc15248330e070433d8be9  libgo/go/cmd/go/internal/fsys/fsys.go
! b15134d494d4e4c3a0e48731c3ec9e1b  libgo/go/cmd/go/internal/fsys/fsys_test.go
! 6979bf449ea4a674c7993efd11af1aec  libgo/go/cmd/go/internal/generate/generate.go
  04d01f4e2f2945111c096a635bd59f1b  libgo/go/cmd/go/internal/generate/generate_test.go
! 15c997ace99af432adcb9c6d30e7c835  libgo/go/cmd/go/internal/get/get.go
  96113e4fc82645aeb2e115fbd468fcb8  libgo/go/cmd/go/internal/get/tag_test.go
! 7427725c7919bda38748a9d04c8c5bbc  libgo/go/cmd/go/internal/help/help.go
! 9dd0fa16c88cb240d3477ce70c27968e  libgo/go/cmd/go/internal/help/helpdoc.go
! 43885ddc21e7cff089db6d06d3452dcb  libgo/go/cmd/go/internal/imports/build.go
! 037a000f601d4e29c87334a2cc9b2008  libgo/go/cmd/go/internal/imports/read.go
! b9639b87b267cb028b7f3e91b68a40db  libgo/go/cmd/go/internal/imports/read_test.go
  7558bbdd2d7ad533c664ad0aceb09577  libgo/go/cmd/go/internal/imports/scan.go
! 465377aa3bc9cbeaf0632f66eb4e1c5e  libgo/go/cmd/go/internal/imports/scan_test.go
  2ae1222b231c4bce886d401398f38020  libgo/go/cmd/go/internal/imports/tags.go
  f11a57290bd837448cb8b36a05f78a53  libgo/go/cmd/go/internal/imports/testdata/android/.h.go
  762b99b9504cf6c21afe8b2b8ac67bb3  libgo/go/cmd/go/internal/imports/testdata/android/a_android.go
  d17980afd0abcdd22bc0a638f9649ae8  libgo/go/cmd/go/internal/imports/testdata/android/b_android_arm64.go
  8028737c5f482847902e094b0772881d  libgo/go/cmd/go/internal/imports/testdata/android/c_linux.go
  0c8d0c5a7af4854b64290f758e07d50a  libgo/go/cmd/go/internal/imports/testdata/android/d_linux_arm64.go
! 39d83c99ab7286602bbcc4e41160c04d  libgo/go/cmd/go/internal/imports/testdata/android/e.go
! 3f496c282c82681e8290d7e49a23d9c0  libgo/go/cmd/go/internal/imports/testdata/android/f.go
! e331ef9ed428b478b8770fb73d30865b  libgo/go/cmd/go/internal/imports/testdata/android/g.go
! e2c9efc4ee69c4882120e1bb70b3cff7  libgo/go/cmd/go/internal/imports/testdata/android/tags.txt
! e078642afbf6dede5ec83b6307ffc646  libgo/go/cmd/go/internal/imports/testdata/android/want.txt
  f11a57290bd837448cb8b36a05f78a53  libgo/go/cmd/go/internal/imports/testdata/illumos/.h.go
  fc183e10d5f735fe65e1d4a566ac9e83  libgo/go/cmd/go/internal/imports/testdata/illumos/a_illumos.go
  9bf212d9699b274d6c23577c51362fe7  libgo/go/cmd/go/internal/imports/testdata/illumos/b_illumos_amd64.go
  3451868899345d8236e114cdf6f93b7e  libgo/go/cmd/go/internal/imports/testdata/illumos/c_solaris.go
  db9a65876fdc7bae4726f703f4c0e533  libgo/go/cmd/go/internal/imports/testdata/illumos/d_solaris_amd64.go
! e70f99d72f5c4f9f489135f1d5b12d2c  libgo/go/cmd/go/internal/imports/testdata/illumos/e.go
! 5685de4d161ec7cc7ea270022b823203  libgo/go/cmd/go/internal/imports/testdata/illumos/f.go
! 51d51d1ac67567853147a511a2789ec3  libgo/go/cmd/go/internal/imports/testdata/illumos/g.go
! 24748c75c8d7c24613e0d19f9612b58b  libgo/go/cmd/go/internal/imports/testdata/illumos/tags.txt
! e078642afbf6dede5ec83b6307ffc646  libgo/go/cmd/go/internal/imports/testdata/illumos/want.txt
! 3389dae361af79b04c9c8e7057f60cc6  libgo/go/cmd/go/internal/imports/testdata/star/tags.txt
! 682bb1bd4a770754e84bc23fede4589d  libgo/go/cmd/go/internal/imports/testdata/star/want.txt
  2725341113cca1ac0f4a0544c9afd23a  libgo/go/cmd/go/internal/imports/testdata/star/x.go
! b90d486909c4cdc9486d22765b89caa2  libgo/go/cmd/go/internal/imports/testdata/star/x1.go
  4c4079c04c96f77c7f0b901154a28a3e  libgo/go/cmd/go/internal/imports/testdata/star/x_darwin.go
  50a7c204a7a37fb845e61dcbe29743c5  libgo/go/cmd/go/internal/imports/testdata/star/x_windows.go
! d3e07eab708035416dd6f507365e589d  libgo/go/cmd/go/internal/list/context.go
! 1bac7ee28617db59572f560a7dbf6960  libgo/go/cmd/go/internal/list/list.go
! d2faf44d06847c2bb95e3cf7e35ec54f  libgo/go/cmd/go/internal/load/flag.go
  94fca467c2106c7d6fe48cdb396c70ac  libgo/go/cmd/go/internal/load/flag_test.go
  4558f4acfca06853803287a80b960f2c  libgo/go/cmd/go/internal/load/path.go
! 903943234197dfe84647c81029b54bbe  libgo/go/cmd/go/internal/load/pkg.go
  26c78443549093a85cb7a33fe5903043  libgo/go/cmd/go/internal/load/pkg_test.go
  ccfb8d791ac8b57d233dcebe8a2c2fea  libgo/go/cmd/go/internal/load/search.go
! 368f4b233b1f010424a6d6ee54c531c0  libgo/go/cmd/go/internal/load/test.go
  7d9a217aa09004e5c1276f8f9d25bcbb  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock.go
! 02ddc8b5568a6cc4ac04c10664b33544  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_fcntl.go
! de5692d8225f39e2d741b9cffd1ddb57  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_other.go
! a3f161affa2f81a0ed5e100086e5ad1a  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_plan9.go
! ea253456c4a7fa3628432ed637f2bc8d  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_test.go
! a1b6ea9e68291209ffa613371a1524ce  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_unix.go
! 460726fa9c2a5da5a56c2e49fd36fb91  libgo/go/cmd/go/internal/lockedfile/internal/filelock/filelock_windows.go
  c7979f6e9f7f493978def2825b6bf6d4  libgo/go/cmd/go/internal/lockedfile/lockedfile.go
! 20c7e72fcc5aaee2c2c7f784cd442ace  libgo/go/cmd/go/internal/lockedfile/lockedfile_filelock.go
! 054170f440554b38d50ddd9264b55e5b  libgo/go/cmd/go/internal/lockedfile/lockedfile_plan9.go
! 7d215b1d7932c316fcd6abb684e4662d  libgo/go/cmd/go/internal/lockedfile/lockedfile_test.go
  c3ba4e48088987fb7241ce00bd7c0127  libgo/go/cmd/go/internal/lockedfile/mutex.go
! d25dd241685430c247f0cbe21378c243  libgo/go/cmd/go/internal/lockedfile/transform_test.go
! a942442d4db49d164c5345df248a7f1f  libgo/go/cmd/go/internal/modcmd/download.go
! 85bb8c152961750f3301975f24690ce8  libgo/go/cmd/go/internal/modcmd/edit.go
! e3d655df45ba8cfba6dddf6245ceb596  libgo/go/cmd/go/internal/modcmd/graph.go
! 0a20ddf810140db91445e24bdd38730a  libgo/go/cmd/go/internal/modcmd/init.go
  315dbdaa7c8e7a77905972465be860d8  libgo/go/cmd/go/internal/modcmd/mod.go
! 8995e126d75cd79d0e70874264fc38e7  libgo/go/cmd/go/internal/modcmd/tidy.go
! 21ca2dd0ee991fcc461fc323740e4a98  libgo/go/cmd/go/internal/modcmd/vendor.go
! 8cd3e9a9c0d11d256b00c67635211368  libgo/go/cmd/go/internal/modcmd/verify.go
! ee1206f340604f0708ea5249fafece1b  libgo/go/cmd/go/internal/modcmd/why.go
! b465a76c376fe08b88aba8fed206ff3f  libgo/go/cmd/go/internal/modconv/convert.go
  8e34cb2203e60108b1b8908db122c699  libgo/go/cmd/go/internal/modconv/dep.go
  f830bd72b020b4ead0cefc3e86f44144  libgo/go/cmd/go/internal/modconv/glide.go
  f94a290828a97890b66814d9b00df294  libgo/go/cmd/go/internal/modconv/glock.go
*************** f97613467ea0f2d75c3e23d86bfb5250  libgo/
*** 89473,89478 ****
--- 95120,95127 ----
  886421a9e5d9dd20f8d77fa7e7b8ee08  libgo/go/cmd/go/internal/modconv/testdata/panicparse.vyml
  5273630439381f8bb56690222157e1a9  libgo/go/cmd/go/internal/modconv/testdata/prometheus.out
  d290be647661c1f7029a03d7f5a08b30  libgo/go/cmd/go/internal/modconv/testdata/prometheus.vjson
+ 40d0babd359b5b2549ce950be504bd16  libgo/go/cmd/go/internal/modconv/testdata/traefik.dep
+ 5ce0450312010e288b06438ca60521c6  libgo/go/cmd/go/internal/modconv/testdata/traefik.out
  d8408aeaf0f9d8dee60e893761ef2438  libgo/go/cmd/go/internal/modconv/testdata/upspin.dep
  d5f896ed7cf8c3613a9a2feaeb71143e  libgo/go/cmd/go/internal/modconv/testdata/upspin.out
  125a185946173dcad80bf64e68744f4f  libgo/go/cmd/go/internal/modconv/tsv.go
*************** d5f896ed7cf8c3613a9a2feaeb71143e  libgo/
*** 89480,89605 ****
  a66cca9947830608e5c45acbeb772b24  libgo/go/cmd/go/internal/modconv/vjson.go
  93db426b79be9580c820306d7cf03e0b  libgo/go/cmd/go/internal/modconv/vmanifest.go
  5b5b9fa98bf909314fd21496936ff3e1  libgo/go/cmd/go/internal/modconv/vyml.go
! 10d93f1784aa7a37ccccd52360c5839b  libgo/go/cmd/go/internal/modfetch/bootstrap.go
! 3d8e52ff3275370580b72ff3f20502c3  libgo/go/cmd/go/internal/modfetch/cache.go
  7355be4c744cd452e8d8b09347b50361  libgo/go/cmd/go/internal/modfetch/cache_test.go
! 65972577e78c17b2c225f48293770ea5  libgo/go/cmd/go/internal/modfetch/codehost/codehost.go
! cec73802503524836c21380fd26f455d  libgo/go/cmd/go/internal/modfetch/codehost/git.go
! 01e034f2429ac8dd329aac8c552983ab  libgo/go/cmd/go/internal/modfetch/codehost/git_test.go
! f6f4be75ecf5a7f6961e33336d98154b  libgo/go/cmd/go/internal/modfetch/codehost/shell.go
  4dab9d544ec188eaa540abb59c73be1f  libgo/go/cmd/go/internal/modfetch/codehost/svn.go
! e60baeb065dab00d5e27b167427a5f83  libgo/go/cmd/go/internal/modfetch/codehost/vcs.go
! 86670b97f7c3b7d3d2950dfa3f9d070b  libgo/go/cmd/go/internal/modfetch/coderepo.go
! 885e4d3c31c4393cfe3ad99ad032c4d5  libgo/go/cmd/go/internal/modfetch/coderepo_test.go
! 7a2bb09991a882900570f937ab89e0a0  libgo/go/cmd/go/internal/modfetch/fetch.go
! 5708298ebfb93bfff89eec1f70ad88d0  libgo/go/cmd/go/internal/modfetch/insecure.go
  61ff5860492832e2e5d880ccfcc3b3b6  libgo/go/cmd/go/internal/modfetch/key.go
! a9218d3d5b82735122eb87e9d5f53d34  libgo/go/cmd/go/internal/modfetch/proxy.go
! f03588418c336fc1e2edacc329d1b6b8  libgo/go/cmd/go/internal/modfetch/pseudo.go
! 56dedb4db76cfb7e037ac60aebd73a60  libgo/go/cmd/go/internal/modfetch/pseudo_test.go
! 84306fc2312100ad84f00eb1b5ed4151  libgo/go/cmd/go/internal/modfetch/repo.go
! 19caa153474923233ad4955db120bb94  libgo/go/cmd/go/internal/modfetch/sumdb.go
  11c64b4bbaee64be54a71effbd92005f  libgo/go/cmd/go/internal/modfetch/zip_sum_test/testdata/zip_sums.csv
  e5028194c561d2592a2b3c1008e0a2ff  libgo/go/cmd/go/internal/modfetch/zip_sum_test/zip_sum_test.go
! 8c0accc75dfac4bdc2761955ddc33b85  libgo/go/cmd/go/internal/modget/get.go
! c1e1f41b35e1a015668cbe6e2ed12153  libgo/go/cmd/go/internal/modget/query.go
! ec02439e46dba1cb662b84c445da6f92  libgo/go/cmd/go/internal/modinfo/info.go
! 2ad0faf0617957bb6b145a274f99c9ab  libgo/go/cmd/go/internal/modload/build.go
! c554a7371104b2dd551a258e309426f0  libgo/go/cmd/go/internal/modload/buildlist.go
! b2c568c597af6293f81de78f8467b979  libgo/go/cmd/go/internal/modload/help.go
! 8fc51e9a139c7dbc1289fa026f45c42e  libgo/go/cmd/go/internal/modload/import.go
! e92583b5c1997d376362c3f02536accc  libgo/go/cmd/go/internal/modload/import_test.go
! c38c2a98f5f01651e74dbfc59def5bb3  libgo/go/cmd/go/internal/modload/init.go
! 24630eb7940bdb829f9ed30a5e6e17e8  libgo/go/cmd/go/internal/modload/list.go
! 929492d8110735cd9640a4f8a1994de4  libgo/go/cmd/go/internal/modload/load.go
! c7acccaabf3583863f9a0aa7666d3c2f  libgo/go/cmd/go/internal/modload/modfile.go
! 11020d3298ea095f9690dc1dac3d5a87  libgo/go/cmd/go/internal/modload/mvs.go
  58eb96fee8564971f04ceab72fdc934e  libgo/go/cmd/go/internal/modload/mvs_test.go
! 605a79dba94db79ecad9b8571b0d3cb8  libgo/go/cmd/go/internal/modload/query.go
! e7667df90359e7cadecd88cbbced4c21  libgo/go/cmd/go/internal/modload/query_test.go
! 1d410d1a965c9dc52dbf75f58ca32c09  libgo/go/cmd/go/internal/modload/search.go
! 600289b769818cda8b51ca9455d1ccdb  libgo/go/cmd/go/internal/modload/stat_openfile.go
! 02f88bc37324a340168022b92068f56a  libgo/go/cmd/go/internal/modload/stat_unix.go
! a5728361fbca14983118e5af6a025926  libgo/go/cmd/go/internal/modload/stat_windows.go
! 3dc9c5d613a96bd00338488e63ca0f9c  libgo/go/cmd/go/internal/modload/vendor.go
! cb6b9ea6622fcf1e99fe6526644b0251  libgo/go/cmd/go/internal/mvs/errors.go
! 7ea5653f42d58e68ae692e1c180d0c6c  libgo/go/cmd/go/internal/mvs/mvs.go
! b8ce1515179ddf43dcad1b9bcf35d648  libgo/go/cmd/go/internal/mvs/mvs_test.go
  1f127740cc69f9f086e1e14e484fbcbf  libgo/go/cmd/go/internal/par/queue.go
  f07569995982617035eb759a95f29a0d  libgo/go/cmd/go/internal/par/queue_test.go
! d79585b767cb622783ac2faa09ad375b  libgo/go/cmd/go/internal/par/work.go
! b65dcb25e91011cea96549a0fd605e62  libgo/go/cmd/go/internal/par/work_test.go
! 0bbc6ee5bcd91dba1476141e0ff900ac  libgo/go/cmd/go/internal/renameio/renameio.go
! 1ca7e51bcf0bc6cbbe8ef0570763e70d  libgo/go/cmd/go/internal/renameio/renameio_test.go
! 42b026c478d00c1990707f22fdae0c3c  libgo/go/cmd/go/internal/renameio/umask_test.go
  645658b16469867d0b01e8319e6c4158  libgo/go/cmd/go/internal/robustio/robustio.go
  4bdf402b6734d1007b7adf81c0e68556  libgo/go/cmd/go/internal/robustio/robustio_darwin.go
! b6d29a36ed42b87940e0d787f0cc44ef  libgo/go/cmd/go/internal/robustio/robustio_flaky.go
! 7cdbbdb1780ef77223d163d49f57f57d  libgo/go/cmd/go/internal/robustio/robustio_other.go
  0cac75ce5ad07cd7ed2aac277db8eeec  libgo/go/cmd/go/internal/robustio/robustio_windows.go
! 2b142aded440ec3b2db1898737c17eb4  libgo/go/cmd/go/internal/run/run.go
! 3c05bd8d580f1771ce92559d576389ca  libgo/go/cmd/go/internal/search/search.go
  e41ffae77a8804f84e30204116091257  libgo/go/cmd/go/internal/search/search_test.go
! 09f08f485a1ae1a85963eb9839eeb6d9  libgo/go/cmd/go/internal/str/path.go
! e05d91d7721b14d4c0ada92aa2e7f6e9  libgo/go/cmd/go/internal/str/str.go
! a1ca62645468e4315cc7a86b9015d577  libgo/go/cmd/go/internal/str/str_test.go
! fe681e9565f65fb7361dd6451deddfc5  libgo/go/cmd/go/internal/test/cover.go
! cd31616d2b265aeeaa89515f3f3d2c89  libgo/go/cmd/go/internal/test/flagdefs.go
! 1055308c351e9a6f510e47bdf4daade3  libgo/go/cmd/go/internal/test/flagdefs_test.go
! 434fa37192f870ed533162503f9db6a2  libgo/go/cmd/go/internal/test/genflags.go
! 70fa4de2739ae83281e390cc2bd00119  libgo/go/cmd/go/internal/test/test.go
! 785b5dc5e26b1204b96a185b1e0dfd4d  libgo/go/cmd/go/internal/test/testflag.go
! c97bad85cfbb6632856b5a480c1e94a0  libgo/go/cmd/go/internal/tool/tool.go
  14b034a1e3733a149bf0dae920236e46  libgo/go/cmd/go/internal/trace/trace.go
- 82bf1ee3927b11c1b3c39b18015ae3aa  libgo/go/cmd/go/internal/txtar/archive.go
- ff7a4d711feed9235842031aa2a2caa4  libgo/go/cmd/go/internal/txtar/archive_test.go
  f270e47446143ea0e5b49d1bfa3bcb5d  libgo/go/cmd/go/internal/vcs/discovery.go
  b6c8dedff4ff73b06a33006151911c02  libgo/go/cmd/go/internal/vcs/discovery_test.go
! b12a06c79097f178f825ed879becabfb  libgo/go/cmd/go/internal/vcs/vcs.go
! 3584786b65a3ad5e7101fe980e95e9b4  libgo/go/cmd/go/internal/vcs/vcs_test.go
! bb43f00ceb441e66a36a507da47c9ad2  libgo/go/cmd/go/internal/version/exe.go
! 210703e59946ca552eed783677f87520  libgo/go/cmd/go/internal/version/version.go
! df0614691256d171e1a5d173008aba9c  libgo/go/cmd/go/internal/vet/vet.go
! 31e3a86cb563d1ae9ff191ae5e639276  libgo/go/cmd/go/internal/vet/vetflag.go
  5f683920a59442f441127cd2fb0371c8  libgo/go/cmd/go/internal/web/api.go
! fbecfe49eae9efb222e34181cd13d2fd  libgo/go/cmd/go/internal/web/bootstrap.go
  f95fecedfbc6323f9509aaa550d6881d  libgo/go/cmd/go/internal/web/file_test.go
! b7c8067000a1bbae0e65ef558b637098  libgo/go/cmd/go/internal/web/http.go
  dca1f089508f21b14a548e658429d966  libgo/go/cmd/go/internal/web/url.go
! 6b61e56552245c1159aa291f6d6d460c  libgo/go/cmd/go/internal/web/url_other.go
! cfa700d8582ce8012af61cbadf5e2624  libgo/go/cmd/go/internal/web/url_other_test.go
  f042a9e05853c9503b87ea0912abaff1  libgo/go/cmd/go/internal/web/url_test.go
  3cf617efca08defa83c5373fe054f267  libgo/go/cmd/go/internal/web/url_windows.go
  0747a99c06d7db6710937506b78e2ae9  libgo/go/cmd/go/internal/web/url_windows_test.go
! 518ced7202c1f55715c9280fba212dde  libgo/go/cmd/go/internal/work/action.go
! 3881ae19d22b0a2a672172a76293eba3  libgo/go/cmd/go/internal/work/build.go
! e84e31f8ab41b5d291258dece4765682  libgo/go/cmd/go/internal/work/build_test.go
! 9524228bb4bbc39adf7d7935fd4330a8  libgo/go/cmd/go/internal/work/buildid.go
! c7bb4cd5ad9f155deb0f2aa0586f760a  libgo/go/cmd/go/internal/work/exec.go
! e04912ee550ec29b55ae7392e6f4c804  libgo/go/cmd/go/internal/work/exec_test.go
! cfac19e1830811ae35dfbd9c68028dd3  libgo/go/cmd/go/internal/work/gc.go
! da2d567d533f33a88a04ad1c04bb7186  libgo/go/cmd/go/internal/work/gccgo.go
! 47ece5c91b70aee3dffb92aeb5be6dab  libgo/go/cmd/go/internal/work/init.go
! 314a5880acea3898ffb86d18a9ea3434  libgo/go/cmd/go/internal/work/security.go
! b2fbdfe65bb234a826fcbd50547b9e0d  libgo/go/cmd/go/internal/work/security_test.go
! 3abe1b3a63a287957d692b5c17dc8dee  libgo/go/cmd/go/internal/work/testgo.go
! 3a172ff64842c4e73a8d61521a3fab69  libgo/go/cmd/go/main.go
! 726b69c9a472df2db9d9209925992011  libgo/go/cmd/go/mkalldocs.sh
  d5cc9ef84467e0372b6f8935627f9f2d  libgo/go/cmd/go/note_test.go
! 1624b5e70c8dff58d204153c6d459263  libgo/go/cmd/go/proxy_test.go
! ee19ff44d0f6bed30597d667dab37ef5  libgo/go/cmd/go/script_test.go
! d1acd1bb3438b76c325b41b4533bf62d  libgo/go/cmd/go/testdata/addmod.go
  0e982e12da255addee72f26e85fb2d0f  libgo/go/cmd/go/testdata/failssh/ssh
  90bac82ed55ce2b07b5ad534c1dc6dbf  libgo/go/cmd/go/testdata/mod/README
  084e77d64be4ddd379ef4c2d712f085f  libgo/go/cmd/go/testdata/mod/example.com_badchain_a_v1.0.0.txt
  c1ee099a0ee845815db4cbd4e06472ee  libgo/go/cmd/go/testdata/mod/example.com_badchain_a_v1.1.0.txt
  102ce72d4e5fba3b7c96369bfc4329f1  libgo/go/cmd/go/testdata/mod/example.com_badchain_b_v1.0.0.txt
  69ff26b3644201433e32625a2b99e2be  libgo/go/cmd/go/testdata/mod/example.com_badchain_b_v1.1.0.txt
  5c62fe1b38ce4ce2470910bc91a93602  libgo/go/cmd/go/testdata/mod/example.com_badchain_c_v1.0.0.txt
  8d4751264b318f86145604fb06798685  libgo/go/cmd/go/testdata/mod/example.com_badchain_c_v1.1.0.txt
  d0d2dcfc8066dc9ac0b347cffe5525e3  libgo/go/cmd/go/testdata/mod/example.com_dotgo.go_v1.0.0.txt
  5475119a4c4f5c3e8a4cf15b4d3d9d81  libgo/go/cmd/go/testdata/mod/example.com_downgrade_v2.0.0.txt
  58a8fe3bff58827b81d7a98b6cad7b5e  libgo/go/cmd/go/testdata/mod/example.com_downgrade_v2_v2.0.1.txt
  333e9e080b2282bc620dc6f90cbc4e32  libgo/go/cmd/go/testdata/mod/example.com_invalidpath_v1_v1.0.0.txt
  b033dc502008aaecc9b2bccd0e2ba377  libgo/go/cmd/go/testdata/mod/example.com_join_subpkg_v1.0.0.txt
  00134c3fcfede8dca18ce6c4c1d8ce3a  libgo/go/cmd/go/testdata/mod/example.com_join_subpkg_v1.1.0.txt
--- 95129,95269 ----
  a66cca9947830608e5c45acbeb772b24  libgo/go/cmd/go/internal/modconv/vjson.go
  93db426b79be9580c820306d7cf03e0b  libgo/go/cmd/go/internal/modconv/vmanifest.go
  5b5b9fa98bf909314fd21496936ff3e1  libgo/go/cmd/go/internal/modconv/vyml.go
! 5e0aa2c9db841cd8d0fcaa93a8954130  libgo/go/cmd/go/internal/modfetch/bootstrap.go
! 8336b6cf477c4f4cb5b50594776dcc04  libgo/go/cmd/go/internal/modfetch/cache.go
  7355be4c744cd452e8d8b09347b50361  libgo/go/cmd/go/internal/modfetch/cache_test.go
! 6b647b34fa773a89d2bb3f496b3a5bf6  libgo/go/cmd/go/internal/modfetch/codehost/codehost.go
! 73944e599bf2455f70ec5146c7c2396b  libgo/go/cmd/go/internal/modfetch/codehost/git.go
! 57913870053de64a5d55fd8ef6a0d5f0  libgo/go/cmd/go/internal/modfetch/codehost/git_test.go
! 716b97943f26c978343119bc569cc777  libgo/go/cmd/go/internal/modfetch/codehost/shell.go
  4dab9d544ec188eaa540abb59c73be1f  libgo/go/cmd/go/internal/modfetch/codehost/svn.go
! 6d2eef135a34438c3346469d8ec393f3  libgo/go/cmd/go/internal/modfetch/codehost/vcs.go
! 2714b5400aed914c7e270cb8a81abdc6  libgo/go/cmd/go/internal/modfetch/coderepo.go
! 52a013cb3dcf0d6a4e08063cf114120d  libgo/go/cmd/go/internal/modfetch/coderepo_test.go
! 355c52638636e80bbfa1ce3775f310cc  libgo/go/cmd/go/internal/modfetch/fetch.go
  61ff5860492832e2e5d880ccfcc3b3b6  libgo/go/cmd/go/internal/modfetch/key.go
! dfce728da793d0e6ceb3a90b3f14bd92  libgo/go/cmd/go/internal/modfetch/proxy.go
! cf83a6099ae0b895970354bdc971f2a8  libgo/go/cmd/go/internal/modfetch/repo.go
! 56f95f62c83844df7e922ae51e73aa55  libgo/go/cmd/go/internal/modfetch/sumdb.go
  11c64b4bbaee64be54a71effbd92005f  libgo/go/cmd/go/internal/modfetch/zip_sum_test/testdata/zip_sums.csv
  e5028194c561d2592a2b3c1008e0a2ff  libgo/go/cmd/go/internal/modfetch/zip_sum_test/zip_sum_test.go
! 370c8b7fe8ef72c3b3e4e522ab753d81  libgo/go/cmd/go/internal/modget/get.go
! dbfa590edd32aaaa990979b4b18ea73c  libgo/go/cmd/go/internal/modget/query.go
! 645263b017e24d8a498294401954d772  libgo/go/cmd/go/internal/modinfo/info.go
! 5497bd1e1b00f4248ac1441ede81d66e  libgo/go/cmd/go/internal/modload/build.go
! 6b1f65123410b086c017b1450443091b  libgo/go/cmd/go/internal/modload/buildlist.go
! 4db5a18d6fcddf7e5795f55cc8dff0ad  libgo/go/cmd/go/internal/modload/edit.go
! 94ea02f83947755fd09234f0dacb7b21  libgo/go/cmd/go/internal/modload/help.go
! 205ae8d2978dec5f8e9fcce8d42df24b  libgo/go/cmd/go/internal/modload/import.go
! 36aa2a04024bd3e6acc26b6186f67962  libgo/go/cmd/go/internal/modload/import_test.go
! 09fc53edf4d0a618aa83e6b805050d20  libgo/go/cmd/go/internal/modload/init.go
! bdc7ed5070321860377f264675320f3a  libgo/go/cmd/go/internal/modload/list.go
! b7d64a48d1987333ca87b861b23020e7  libgo/go/cmd/go/internal/modload/load.go
! 20df0736cc3e0e8b25aeda47ae3de913  libgo/go/cmd/go/internal/modload/modfile.go
! 160ae6f617178b9bb635556fbd819c50  libgo/go/cmd/go/internal/modload/mvs.go
  58eb96fee8564971f04ceab72fdc934e  libgo/go/cmd/go/internal/modload/mvs_test.go
! 1485343437ceb2ae2d367e5fcb503523  libgo/go/cmd/go/internal/modload/query.go
! 46a908df4286b85e251f1d0d58951783  libgo/go/cmd/go/internal/modload/query_test.go
! 87d584a528203eb484199e8d8b899d58  libgo/go/cmd/go/internal/modload/search.go
! 32bd15120bb5656e48f9408412f933c8  libgo/go/cmd/go/internal/modload/stat_openfile.go
! 3b87e96c0fc278de0ed843f9a28f12e7  libgo/go/cmd/go/internal/modload/stat_unix.go
! 3a281f97985000c0e65698d3367837ed  libgo/go/cmd/go/internal/modload/stat_windows.go
! 7c9e73d7e85d7bad6eb4647866f9e09a  libgo/go/cmd/go/internal/modload/vendor.go
! 98333af03d0c9478dd258aa9e8790115  libgo/go/cmd/go/internal/mvs/errors.go
! 01ec7862eb394cfb5924ac55de7c8d36  libgo/go/cmd/go/internal/mvs/graph.go
! 83e08cf7211f9b4075cff6f66922b623  libgo/go/cmd/go/internal/mvs/mvs.go
! 6b2b4df64a45492ce7e8f0ae3d93f682  libgo/go/cmd/go/internal/mvs/mvs_test.go
  1f127740cc69f9f086e1e14e484fbcbf  libgo/go/cmd/go/internal/par/queue.go
  f07569995982617035eb759a95f29a0d  libgo/go/cmd/go/internal/par/queue_test.go
! a9926f4eaac488b78c6e51b86c70ab7d  libgo/go/cmd/go/internal/par/work.go
! bd707cb6ca84828a316457fb692117dd  libgo/go/cmd/go/internal/par/work_test.go
  645658b16469867d0b01e8319e6c4158  libgo/go/cmd/go/internal/robustio/robustio.go
  4bdf402b6734d1007b7adf81c0e68556  libgo/go/cmd/go/internal/robustio/robustio_darwin.go
! 6a565b69933dcd115f781f2f79e9a1fa  libgo/go/cmd/go/internal/robustio/robustio_flaky.go
! 2fb2736e5e59ffa4fb8a427ceba2fe7d  libgo/go/cmd/go/internal/robustio/robustio_other.go
  0cac75ce5ad07cd7ed2aac277db8eeec  libgo/go/cmd/go/internal/robustio/robustio_windows.go
! e11ced85fd28d977f31fb10b80a4693b  libgo/go/cmd/go/internal/run/run.go
! a07cc086208fb344740692e2f419832d  libgo/go/cmd/go/internal/search/search.go
  e41ffae77a8804f84e30204116091257  libgo/go/cmd/go/internal/search/search_test.go
! de7c128f40887e15ca6fc035aaa1f6ce  libgo/go/cmd/go/internal/str/path.go
! e5fc9df8bbca14e438b1aa155f66579e  libgo/go/cmd/go/internal/str/str.go
! 0b3cb69ee1b3d2c5ba4941afd9604003  libgo/go/cmd/go/internal/str/str_test.go
! 09c5158e49f188d4f5be1caa634e6858  libgo/go/cmd/go/internal/test/cover.go
! d68945d4d1bbdcbb1990e98ca3da2a80  libgo/go/cmd/go/internal/test/flagdefs.go
! 82c0c4f3656ce326ce8bccd1c0f040ea  libgo/go/cmd/go/internal/test/flagdefs_test.go
! 7cc28faa61378d9435d7bbe2eac86a14  libgo/go/cmd/go/internal/test/genflags.go
! 33f8a169bdb7c4b4603ea5851d82f9eb  libgo/go/cmd/go/internal/test/internal/genflags/vetflag.go
! 79ec78406c946627f0f61ce3b3fd95bd  libgo/go/cmd/go/internal/test/test.go
! e862495a36f46dbbef50b2732e8adcf4  libgo/go/cmd/go/internal/test/testflag.go
! 42cdc128b4ef8e259baf0c9e0a365e22  libgo/go/cmd/go/internal/tool/tool.go
  14b034a1e3733a149bf0dae920236e46  libgo/go/cmd/go/internal/trace/trace.go
  f270e47446143ea0e5b49d1bfa3bcb5d  libgo/go/cmd/go/internal/vcs/discovery.go
  b6c8dedff4ff73b06a33006151911c02  libgo/go/cmd/go/internal/vcs/discovery_test.go
! 233210b22d7952ce31b1a3a6ec0902be  libgo/go/cmd/go/internal/vcs/vcs.go
! c817d99a04e902394ff70d4152971379  libgo/go/cmd/go/internal/vcs/vcs_test.go
! f8e0f81d5e0d7ccdbbf4e30a19789524  libgo/go/cmd/go/internal/version/version.go
! 87f293e165b04003183c95e3bc37ede1  libgo/go/cmd/go/internal/vet/vet.go
! 3f54de107c639d7a4745048b127859b2  libgo/go/cmd/go/internal/vet/vetflag.go
  5f683920a59442f441127cd2fb0371c8  libgo/go/cmd/go/internal/web/api.go
! 773322818e1dbb7e1c7e66a5e20e1ec2  libgo/go/cmd/go/internal/web/bootstrap.go
  f95fecedfbc6323f9509aaa550d6881d  libgo/go/cmd/go/internal/web/file_test.go
! 9b3d00523089388707df28200b59c91e  libgo/go/cmd/go/internal/web/http.go
  dca1f089508f21b14a548e658429d966  libgo/go/cmd/go/internal/web/url.go
! c13b5e083730b16cfe52c6d72662343a  libgo/go/cmd/go/internal/web/url_other.go
! 268e4ebf667f24970c745913fce2666a  libgo/go/cmd/go/internal/web/url_other_test.go
  f042a9e05853c9503b87ea0912abaff1  libgo/go/cmd/go/internal/web/url_test.go
  3cf617efca08defa83c5373fe054f267  libgo/go/cmd/go/internal/web/url_windows.go
  0747a99c06d7db6710937506b78e2ae9  libgo/go/cmd/go/internal/web/url_windows_test.go
! a4825dea32064ff7dfac6dac8d8fc29a  libgo/go/cmd/go/internal/work/action.go
! c113a9813758b06d90f37891a09066fc  libgo/go/cmd/go/internal/work/build.go
! 122a6c661204e460876a9c0a71b8ea17  libgo/go/cmd/go/internal/work/build_test.go
! 7fe8c71221f6c8c31207b2f9e58b6c96  libgo/go/cmd/go/internal/work/buildid.go
! a4a21a4cd25e730d8269b250c0c70bb0  libgo/go/cmd/go/internal/work/exec.go
! 33e9031417cf6c142229993c0ab77c52  libgo/go/cmd/go/internal/work/exec_test.go
! 1549757b74b2d211c815c8e748ba59f8  libgo/go/cmd/go/internal/work/gc.go
! 37991171a251818980e54d329100087a  libgo/go/cmd/go/internal/work/gccgo.go
! 92a85e453aa32936051740366e69f911  libgo/go/cmd/go/internal/work/init.go
! 4e26c044c3067fe7835fd724298fc4d7  libgo/go/cmd/go/internal/work/security.go
! 072953321774ec471cbccfa65ae37ba2  libgo/go/cmd/go/internal/work/security_test.go
! 2d5b8e53d15799e1c6ed656ddca16af5  libgo/go/cmd/go/internal/work/testgo.go
! 571c74ba9ba413cdf9a517dde46322e0  libgo/go/cmd/go/internal/workcmd/edit.go
! aa301e8eaacbf6bf8314bb854c9de36f  libgo/go/cmd/go/internal/workcmd/init.go
! b69905cedfb9ab8759cf6b3efa956172  libgo/go/cmd/go/internal/workcmd/sync.go
! a6e46ce1e758eafebfb461c3e5fb6578  libgo/go/cmd/go/internal/workcmd/use.go
! d33fae23679e727be8778a5d8204fa68  libgo/go/cmd/go/internal/workcmd/work.go
! dfb508913fcd1a34d7b5e3a49382efc8  libgo/go/cmd/go/main.go
! e7553d0f3f704a0291c143d52721d6cf  libgo/go/cmd/go/mkalldocs.sh
  d5cc9ef84467e0372b6f8935627f9f2d  libgo/go/cmd/go/note_test.go
! 7d3ab0d66c1f4611085d96f0237c6c1a  libgo/go/cmd/go/proxy_test.go
! c6cca8020f9a10f809e47b54f58156bf  libgo/go/cmd/go/script_test.go
! e9ebabc9e7ca7d5fb0e9f6487be6a966  libgo/go/cmd/go/stop_other_test.go
! 68ed79406a18a5eee06ee1c63c756a1c  libgo/go/cmd/go/stop_unix_test.go
! 61643a7962425aa0988f1bc54ebffe68  libgo/go/cmd/go/testdata/addmod.go
  0e982e12da255addee72f26e85fb2d0f  libgo/go/cmd/go/testdata/failssh/ssh
  90bac82ed55ce2b07b5ad534c1dc6dbf  libgo/go/cmd/go/testdata/mod/README
+ 319ad531a20e11faabb136cd12e64423  libgo/go/cmd/go/testdata/mod/example.com_ambiguous_a_b_v0.0.0-empty.txt
+ a196761ca0450e88e0d3c2aff6c8f96c  libgo/go/cmd/go/testdata/mod/example.com_ambiguous_a_v1.0.0.txt
  084e77d64be4ddd379ef4c2d712f085f  libgo/go/cmd/go/testdata/mod/example.com_badchain_a_v1.0.0.txt
  c1ee099a0ee845815db4cbd4e06472ee  libgo/go/cmd/go/testdata/mod/example.com_badchain_a_v1.1.0.txt
  102ce72d4e5fba3b7c96369bfc4329f1  libgo/go/cmd/go/testdata/mod/example.com_badchain_b_v1.0.0.txt
  69ff26b3644201433e32625a2b99e2be  libgo/go/cmd/go/testdata/mod/example.com_badchain_b_v1.1.0.txt
  5c62fe1b38ce4ce2470910bc91a93602  libgo/go/cmd/go/testdata/mod/example.com_badchain_c_v1.0.0.txt
  8d4751264b318f86145604fb06798685  libgo/go/cmd/go/testdata/mod/example.com_badchain_c_v1.1.0.txt
+ 3dd93fde2a7fb6e7f6d6ff28e0b4b627  libgo/go/cmd/go/testdata/mod/example.com_cmd_v1.0.0-exclude.txt
+ 081fabb2917272e0162ea7b7b993c388  libgo/go/cmd/go/testdata/mod/example.com_cmd_v1.0.0-newerself.txt
+ c7b39a0c1d113d8e57212a9dae723c7d  libgo/go/cmd/go/testdata/mod/example.com_cmd_v1.0.0-replace.txt
+ a0971512d8bb1aa6a2b98caa5dc11b40  libgo/go/cmd/go/testdata/mod/example.com_cmd_v1.0.0.txt
+ ff602fe98fea748b6c3f3f4069556688  libgo/go/cmd/go/testdata/mod/example.com_cmd_v1.9.0.txt
+ fb5e21cc2d9c251c4e7cc37eb5dcc81f  libgo/go/cmd/go/testdata/mod/example.com_deprecated_a_v1.0.0.txt
+ 864cfaed9b1eacffd0b446bd5c3192fa  libgo/go/cmd/go/testdata/mod/example.com_deprecated_a_v1.9.0.txt
+ 7abb9a4ed9fee0598c856e221ef087f4  libgo/go/cmd/go/testdata/mod/example.com_deprecated_b_v1.0.0.txt
+ e0a375f13fe5b7294bf0aa75f67bc584  libgo/go/cmd/go/testdata/mod/example.com_deprecated_b_v1.9.0.txt
  d0d2dcfc8066dc9ac0b347cffe5525e3  libgo/go/cmd/go/testdata/mod/example.com_dotgo.go_v1.0.0.txt
+ 8d0981a45e5bad1a67b6d2a804e30876  libgo/go/cmd/go/testdata/mod/example.com_dotname_v1.0.0.txt
  5475119a4c4f5c3e8a4cf15b4d3d9d81  libgo/go/cmd/go/testdata/mod/example.com_downgrade_v2.0.0.txt
  58a8fe3bff58827b81d7a98b6cad7b5e  libgo/go/cmd/go/testdata/mod/example.com_downgrade_v2_v2.0.1.txt
+ 75d0acb874e285f34e811dd0fb9d51b1  libgo/go/cmd/go/testdata/mod/example.com_incompatiblewithsub_v1.0.0.txt
+ 8abf75b520456ae23dbc56c3b8e2f6f1  libgo/go/cmd/go/testdata/mod/example.com_incompatiblewithsub_v2.0.0+incompatible.txt
  333e9e080b2282bc620dc6f90cbc4e32  libgo/go/cmd/go/testdata/mod/example.com_invalidpath_v1_v1.0.0.txt
  b033dc502008aaecc9b2bccd0e2ba377  libgo/go/cmd/go/testdata/mod/example.com_join_subpkg_v1.0.0.txt
  00134c3fcfede8dca18ce6c4c1d8ce3a  libgo/go/cmd/go/testdata/mod/example.com_join_subpkg_v1.1.0.txt
*************** a3b99ab812d3d725c8b0c429c5d5f298  libgo/
*** 89623,89639 ****
--- 95287,95348 ----
  a8031c6550d892a2ee4f2b64c2ad2ca2  libgo/go/cmd/go/testdata/mod/example.com_pseudoupgrade_v0.0.0-20190430073000-30950c05d534.txt
  6cf0bd0340565f3927b7136173fe2bac  libgo/go/cmd/go/testdata/mod/example.com_pseudoupgrade_v0.1.0.txt
  d4db8c9f7c442d56f2c93873ac858de0  libgo/go/cmd/go/testdata/mod/example.com_pseudoupgrade_v0.1.1-0.20190429073117-b5426c86b553.txt
+ 29fdf209619c976ee482e5b9d95f20ed  libgo/go/cmd/go/testdata/mod/example.com_quote_v1.5.2.txt
+ 7a80c973ab024e6d5d2156be439f53ea  libgo/go/cmd/go/testdata/mod/example.com_retract_ambiguous_nested_v1.9.0-bad.txt
+ cd68c66b5817d5b407a33cc20ae07aac  libgo/go/cmd/go/testdata/mod/example.com_retract_ambiguous_other_v1.0.0.txt
+ 3a0c51aa5bf45646cd9408fdf27dc8e0  libgo/go/cmd/go/testdata/mod/example.com_retract_ambiguous_v1.0.0.txt
+ 6019d17aab64a2291a2a7f314f167730  libgo/go/cmd/go/testdata/mod/example.com_retract_incompatible_v1.0.0.txt
+ 51098a593c0e5489bdc9087cbad32a57  libgo/go/cmd/go/testdata/mod/example.com_retract_incompatible_v2.0.0+incompatible.txt
+ 09c1d7f8502600cbe08e6529abaa9189  libgo/go/cmd/go/testdata/mod/example.com_retract_missingmod_v1.0.0.txt
+ e59e5ae5e715f2f6f82163db3e945e2c  libgo/go/cmd/go/testdata/mod/example.com_retract_missingmod_v1.9.0.txt
+ 666ad1d240c33f7ee46887fed6e0c8a9  libgo/go/cmd/go/testdata/mod/example.com_retract_rationale_v1.0.0-block.txt
+ 8725e4f80ad128348b4569ce351fb482  libgo/go/cmd/go/testdata/mod/example.com_retract_rationale_v1.0.0-blockwithcomment.txt
+ b026289bda05e13a0d36f31440f24e98  libgo/go/cmd/go/testdata/mod/example.com_retract_rationale_v1.0.0-empty.txt
+ a24fd25438bd3e460fc39d6654cc9170  libgo/go/cmd/go/testdata/mod/example.com_retract_rationale_v1.0.0-long.txt
+ 3c051d101d493d13e22caf36c7ad18d3  libgo/go/cmd/go/testdata/mod/example.com_retract_rationale_v1.0.0-multiline1.txt
+ 778c34ca6bca6b99db8188eaf680db33  libgo/go/cmd/go/testdata/mod/example.com_retract_rationale_v1.0.0-multiline2.txt
+ af696d50f4b787df609eed65dbb6c5f0  libgo/go/cmd/go/testdata/mod/example.com_retract_rationale_v1.0.0-order.txt
+ 995dba1129007bd5d78ce25d93cfcae8  libgo/go/cmd/go/testdata/mod/example.com_retract_rationale_v1.0.0-unprintable.txt
+ 50a6e047dd3d790dbac7261b7dd3d66d  libgo/go/cmd/go/testdata/mod/example.com_retract_rationale_v1.0.1-order.txt
+ dfb7dec0d9e36ecbd06f68e5bddf81f0  libgo/go/cmd/go/testdata/mod/example.com_retract_rationale_v1.9.0.txt
+ d3bdd101f8b4246597497261af37ef70  libgo/go/cmd/go/testdata/mod/example.com_retract_rename_v1.0.0-bad.txt
+ d84667b26bce89cef5be529510f9bfeb  libgo/go/cmd/go/testdata/mod/example.com_retract_rename_v1.9.0-new.txt
+ 10ff41378fb1df037a0f912f9350b8f1  libgo/go/cmd/go/testdata/mod/example.com_retract_self_all_v1.9.0.txt
+ 8bf1dababc0b1101a5d29411d4137dbd  libgo/go/cmd/go/testdata/mod/example.com_retract_self_prerelease_v1.0.0.txt
+ f2801cb2987046ca57f3de0ccdeefab6  libgo/go/cmd/go/testdata/mod/example.com_retract_self_prerelease_v1.9.0.txt
+ 24565bba8c2617077299c83ac807220d  libgo/go/cmd/go/testdata/mod/example.com_retract_self_prerelease_v1.9.1-pre.txt
+ b0a7e44544917a66db1ebda7ec274255  libgo/go/cmd/go/testdata/mod/example.com_retract_self_prev_v1.0.0-bad.txt
+ d991b7226ee38756b4099a30cd632333  libgo/go/cmd/go/testdata/mod/example.com_retract_self_prev_v1.1.0.txt
+ 861a1793ba6b1a54c2fb6460cb083966  libgo/go/cmd/go/testdata/mod/example.com_retract_self_prev_v1.9.0.txt
+ 6733a9d495cbdaf1e6fe63b25f2382cb  libgo/go/cmd/go/testdata/mod/example.com_retract_self_pseudo_v0.0.0-20200325131415-0123456789ab
+ c6653399e6931296a135974006836c03  libgo/go/cmd/go/testdata/mod/example.com_retract_self_pseudo_v1.0.0-bad.txt
+ cbaa1d7d820d34c90449afa754404437  libgo/go/cmd/go/testdata/mod/example.com_retract_self_pseudo_v1.9.0.txt
+ b502cdc3f6ac7318cb5baa2ddef66e16  libgo/go/cmd/go/testdata/mod/example.com_retract_v1.0.0-bad.txt
+ 73660ad0699ad2205c841c38ed98f54e  libgo/go/cmd/go/testdata/mod/example.com_retract_v1.0.0-good.txt
+ 72aca9cb07af1ce55f0711e765c460a8  libgo/go/cmd/go/testdata/mod/example.com_retract_v1.0.0-unused.txt
+ 35aca18042b460508521e635bb2c184f  libgo/go/cmd/go/testdata/mod/example.com_retract_v1.1.0.txt
+ 35dce43acd3a78a4a63d7accf59d8b6a  libgo/go/cmd/go/testdata/mod/example.com_split-incompatible_subpkg_v0.1.0.txt
+ c123b24b60adf4046270268ff8b206d0  libgo/go/cmd/go/testdata/mod/example.com_split-incompatible_v2.0.0+incompatible.txt
+ c3e531f4a8d8d6bfb9bd6afde94b7671  libgo/go/cmd/go/testdata/mod/example.com_split-incompatible_v2.1.0-pre+incompatible.txt
  9ca43da813f0a3740d4d60b715c30dce  libgo/go/cmd/go/testdata/mod/example.com_split_subpkg_v1.1.0.txt
  478965d7c5ea6f087398c5b2b0240310  libgo/go/cmd/go/testdata/mod/example.com_split_v1.0.0.txt
  f284edeaff2b8805d0e3692f73338c66  libgo/go/cmd/go/testdata/mod/example.com_split_v1.1.0.txt
  1cfb15ede92ab56ac7aa1f613c384115  libgo/go/cmd/go/testdata/mod/example.com_stack_v1.0.0.txt
  3133d1ead8402e2b3bbe6072562853dd  libgo/go/cmd/go/testdata/mod/example.com_stack_v1.0.1.txt
  f7887e95ebddb91a382323d998bb1107  libgo/go/cmd/go/testdata/mod/example.com_tools_v1.0.0.txt
+ 6ea6a3f5a630d28c728459dc37137939  libgo/go/cmd/go/testdata/mod/example.com_undeprecated_v1.0.0.txt
+ ee3b6169e7f27316cf4f57894010525b  libgo/go/cmd/go/testdata/mod/example.com_undeprecated_v1.0.1.txt
  93979fcdbd0c0118d870a03e6d20c0c5  libgo/go/cmd/go/testdata/mod/example.com_usemissingpre_v1.0.0.txt
  78857fcc3790520bd8f26641ff895948  libgo/go/cmd/go/testdata/mod/example.com_v1.0.0.txt
  213b075f4f2903665fa224a0e3d030fb  libgo/go/cmd/go/testdata/mod/example.com_version_v1.0.0.txt
  b4629c207b11638fb132978e4efb04db  libgo/go/cmd/go/testdata/mod/example.com_version_v1.0.1.txt
  b12e15337e5c60427153935e34b91930  libgo/go/cmd/go/testdata/mod/example.com_version_v1.1.0.txt
+ 3118f5f325e241b0063f5c82889f99cd  libgo/go/cmd/go/testdata/mod/example.net_ambiguous_nested_v0.1.0.txt
+ 9700894c75adef0cc9d798d89252d668  libgo/go/cmd/go/testdata/mod/example.net_ambiguous_v0.1.0.txt
+ 0c5017b6e4747f4716d6c065574a380a  libgo/go/cmd/go/testdata/mod/example.net_ambiguous_v0.2.0.txt
+ fc261d57b73ded14d9b1e8c4096f4369  libgo/go/cmd/go/testdata/mod/example.net_pkgadded_v1.0.0.txt
+ 444fc548be2bd558b157ab72d299d6f6  libgo/go/cmd/go/testdata/mod/example.net_pkgadded_v1.1.0.txt
+ 6905c31931b5b94b0e7015eb1ef95206  libgo/go/cmd/go/testdata/mod/example.net_pkgadded_v1.2.0.txt
  e774f081ce5ae37b02908a33c31952c8  libgo/go/cmd/go/testdata/mod/github.com_dmitshur-test_modtest5_v0.0.0-20190619020302-197a620e0c9a.txt
  b119650025927e83dc61fee6759284d2  libgo/go/cmd/go/testdata/mod/github.com_dmitshur-test_modtest5_v0.5.0-alpha.0.20190619023908-3da23a9deb9e.txt
  3f47b6a55fbd2d5a8c99213d719709b0  libgo/go/cmd/go/testdata/mod/github.com_dmitshur-test_modtest5_v0.5.0-alpha.txt
*************** ece39f757fb0881fddadab76f785e9d5  libgo/
*** 89708,89983 ****
  8f98a724beb492524719e172b2d58d8e  libgo/go/cmd/go/testdata/modlegacy/src/new/sub/x/v1/y/y.go
  f22cb178b7998fdcaba5c10532221858  libgo/go/cmd/go/testdata/modlegacy/src/old/p1/p1.go
  0751265117ff392563d0a12382092857  libgo/go/cmd/go/testdata/modlegacy/src/old/p2/p2.go
! a0309e2b8f54c15e5e57d0982e9a4120  libgo/go/cmd/go/testdata/savedir.go
! 3a438fbedce3a8b36ffd2f4370155bf8  libgo/go/cmd/go/testdata/script/README
! 4fe8a82f32f39d436a8117d87e85de62  libgo/go/cmd/go/testdata/script/bug.txt
  5090ac6fd1fb9fbc61a6adbc46f0def6  libgo/go/cmd/go/testdata/script/build_GOTMPDIR.txt
  97379f709ae6fbaa19f4f4bf761a5463  libgo/go/cmd/go/testdata/script/build_acl_windows.txt
  5f431c2cd2c9b93bdaa530d58f799083  libgo/go/cmd/go/testdata/script/build_cache_compile.txt
  3d4b02b1ab75e27ea31dfdda09b5f2e8  libgo/go/cmd/go/testdata/script/build_cache_gomips.txt
  a1e27faefba409c9b690c368166f2243  libgo/go/cmd/go/testdata/script/build_cache_link.txt
  190cde199cdc1246ea6e03a71bc3b58f  libgo/go/cmd/go/testdata/script/build_cache_output.txt
! 960a9f8ee018a448842602fb58245706  libgo/go/cmd/go/testdata/script/build_cache_trimpath.txt
  17614c6044c0e86dc969e82489a437d9  libgo/go/cmd/go/testdata/script/build_gcflags.txt
  f42e143987eeb6dfaea584c043242eab  libgo/go/cmd/go/testdata/script/build_i.txt
  f8077cb351530f4c7f8ca61c68d824f4  libgo/go/cmd/go/testdata/script/build_multi_main.txt
  848ade6547c233319bad0e6b3af1f0de  libgo/go/cmd/go/testdata/script/build_nocache.txt
  47ac8ac6d5a4d04f4574d2659748856b  libgo/go/cmd/go/testdata/script/build_relative_pkgdir.txt
  359e53fe0933062b22c15a526abe4cce  libgo/go/cmd/go/testdata/script/build_relative_tmpdir.txt
! 0b2d629e43a0673b45fc91d5505432fa  libgo/go/cmd/go/testdata/script/build_runtime_gcflags.txt
! 61d8b4389c423cdedd5eea0e64792aad  libgo/go/cmd/go/testdata/script/build_trimpath.txt
  2c69443ecf0acd33c471187d6fc31bc7  libgo/go/cmd/go/testdata/script/cache_unix.txt
  951a47442045c43d50f0ee659c946b22  libgo/go/cmd/go/testdata/script/cache_vet.txt
  0e400c5f5fa693a94e9821b8ffab770a  libgo/go/cmd/go/testdata/script/cgo_syso_issue29253.txt
  af824bdae1e234c5d92f227ffd2cd1bf  libgo/go/cmd/go/testdata/script/clean_testcache.txt
  dc491fd02d6718d5ff2a67f6c77d65d7  libgo/go/cmd/go/testdata/script/cmd_import_error.txt
  9d7c42400724aa5ac2ca2bcc8d79e5ca  libgo/go/cmd/go/testdata/script/cover_atomic_pkgall.txt
  caf75437ba52f9bf33951bd4e1c4b09e  libgo/go/cmd/go/testdata/script/cover_mod_empty.txt
  1a42ddf1ef3f0dc2c2c6cf46f27e3c2e  libgo/go/cmd/go/testdata/script/cover_modes.txt
  76ff31132da5a96a1795cd86539d3215  libgo/go/cmd/go/testdata/script/cover_pkgall_multiple_mains.txt
  1115715066cf20ee58a470397f685c24  libgo/go/cmd/go/testdata/script/cover_pkgall_runtime.txt
  6158ecb786aa4a50f0cf26416e1ad5e6  libgo/go/cmd/go/testdata/script/cpu_profile_twice.txt
  31069bd0503e670384dd1dc7f8a1d4d7  libgo/go/cmd/go/testdata/script/devnull.txt
! 803cfca7ae5cbbc443f453cf8dfe2c59  libgo/go/cmd/go/testdata/script/env_write.txt
  d2ecb1a1b1387c4923216c044e97e2f1  libgo/go/cmd/go/testdata/script/fileline.txt
! 8c49a1aaeba4b8a186e7daa4f85e6a4b  libgo/go/cmd/go/testdata/script/fmt_load_errors.txt
  e266512d46667becf60b696e477051af  libgo/go/cmd/go/testdata/script/gccgo_m.txt
  482e75c227896606836ab8a873842595  libgo/go/cmd/go/testdata/script/gccgo_mangle.txt
! 485d26c4c45ff8dcd9ec9040c9bb6010  libgo/go/cmd/go/testdata/script/gcflags_patterns.txt
! 284d6b2821a80a6288c61cd76994ca14  libgo/go/cmd/go/testdata/script/get_404_meta.txt
  66008713bba01fe5dc311d4eea7b56f1  libgo/go/cmd/go/testdata/script/get_brace.txt
  c7ac2dd684bbd0ac3e2eeb6ab5ab2ed6  libgo/go/cmd/go/testdata/script/get_dotfiles.txt
! 21f49636babac701a225dfe66bed730e  libgo/go/cmd/go/testdata/script/get_insecure_redirect.txt
  3c0ab1badc3091e3e02601b4bbba4550  libgo/go/cmd/go/testdata/script/get_tilde.txt
  13c50ac07f758afd798de1aa557f03c7  libgo/go/cmd/go/testdata/script/get_with_git_trace.txt
! 8f44e4ecd75acdc789a2e22d095b856c  libgo/go/cmd/go/testdata/script/goflags.txt
! 106fe5ac11bc7aef87bc1c18781e2729  libgo/go/cmd/go/testdata/script/gopath_install.txt
! 4f6ae40246ae093cc416f8e0c829bd01  libgo/go/cmd/go/testdata/script/gopath_local.txt
  518ae313f29bb0d8cc8c45948e639cb5  libgo/go/cmd/go/testdata/script/gopath_moved_repo.txt
  fd5fee6444dc630b75eef1466298c36c  libgo/go/cmd/go/testdata/script/gopath_paths.txt
  b5316c60f6f70d2376d84efdebfdbfa1  libgo/go/cmd/go/testdata/script/gopath_std_vendor.txt
  0c2ae6ce07cc2ac4e51c2e51bb320408  libgo/go/cmd/go/testdata/script/help.txt
  ec1d642b1a03cce344e4c1fd323a80f4  libgo/go/cmd/go/testdata/script/import_main.txt
  9d04685fe658db9dde75baa3f3c2be80  libgo/go/cmd/go/testdata/script/install_cleans_build.txt
  5515b9a362f2978f73430307ee0a0063  libgo/go/cmd/go/testdata/script/install_cmd_gobin.txt
  7040281c85b7d8e0e3284c8a235d8a3e  libgo/go/cmd/go/testdata/script/install_cross_gobin.txt
  c2c6b4fac69339acdcc3e93d0f524c29  libgo/go/cmd/go/testdata/script/install_rebuild_gopath.txt
  05f91037b862398cea4e11a0445b691f  libgo/go/cmd/go/testdata/script/install_rebuild_removed.txt
  e6b093721adee1372111b956dac686cb  libgo/go/cmd/go/testdata/script/link_syso_issue33139.txt
  90a4596801b06a2d3ee455320c19f7ab  libgo/go/cmd/go/testdata/script/linkname.txt
  0834328bc91748984b7f75e318acd68d  libgo/go/cmd/go/testdata/script/list_ambiguous_path.txt
  2cc605344974113fca42e09bd13a1e75  libgo/go/cmd/go/testdata/script/list_bad_import.txt
  51b259630d5666fffca1b2d6e4aa4034  libgo/go/cmd/go/testdata/script/list_compiled_imports.txt
  05836e9979f2398e923b55e0f2825705  libgo/go/cmd/go/testdata/script/list_constraints.txt
  43fda832749b6c5a38fb32a60fe60027  libgo/go/cmd/go/testdata/script/list_find.txt
  044798238a86bf4ee2f594533a9374e6  libgo/go/cmd/go/testdata/script/list_importmap.txt
  c284c8b8f14a239fd99ae9d953873d7a  libgo/go/cmd/go/testdata/script/list_linkshared.txt
  2184074d4d6428c1f5ee01580c51c28d  libgo/go/cmd/go/testdata/script/list_parse_err.txt
  d7219915d3aa07f166b7b63b6bd8490e  libgo/go/cmd/go/testdata/script/list_split_main.txt
  384350db6aa926c83fa06818230179c1  libgo/go/cmd/go/testdata/script/list_std.txt
  00b12c59098b1bc4d5420b57b510db64  libgo/go/cmd/go/testdata/script/list_test_e.txt
! fa0a458d838de630a68354f74823e9b8  libgo/go/cmd/go/testdata/script/list_test_err.txt
  bd3eeb1a054a9730b52810a82d2c621c  libgo/go/cmd/go/testdata/script/list_test_imports.txt
  253161922db7bea8837d4dea71eb3dba  libgo/go/cmd/go/testdata/script/list_test_non_go_files.txt
  78e6605bc95be0bba803431655f7150e  libgo/go/cmd/go/testdata/script/mod_alt_goroot.txt
  2413ced002f0517ccf05bc04c29b540b  libgo/go/cmd/go/testdata/script/mod_ambiguous_import.txt
  38fb61151ae3aac698b41b167648d345  libgo/go/cmd/go/testdata/script/mod_auth.txt
! 9a360a8728f208e68dfc862769450014  libgo/go/cmd/go/testdata/script/mod_bad_domain.txt
  e6c7df0184114c23d615e0bae09d61d3  libgo/go/cmd/go/testdata/script/mod_bad_filenames.txt
! 1ce226760fe0d8ff5075999367d3cb15  libgo/go/cmd/go/testdata/script/mod_build_info_err.txt
  c17dd01a8ba9feacfa5d646e991aba49  libgo/go/cmd/go/testdata/script/mod_build_tags.txt
! 8d4d893bb529217b9cecfd767d7c2fed  libgo/go/cmd/go/testdata/script/mod_build_versioned.txt
! 5bf47d0bf0113921a2cac2f9c5bb6b4d  libgo/go/cmd/go/testdata/script/mod_cache_rw.txt
! 1e2d05d3d94274f851234c84609b68f3  libgo/go/cmd/go/testdata/script/mod_case.txt
! 85fd41fc414934d9ff2b5758d3609c3e  libgo/go/cmd/go/testdata/script/mod_case_cgo.txt
  9d19119d5296dac2e72fee88788b6789  libgo/go/cmd/go/testdata/script/mod_clean_cache.txt
! c05f86252b8f51660f147515c2655b0c  libgo/go/cmd/go/testdata/script/mod_concurrent.txt
  041bdb0409111923060929fbfb95f1a0  libgo/go/cmd/go/testdata/script/mod_convert_dep.txt
  d8f609897ca8b4ddf3252575e4d47622  libgo/go/cmd/go/testdata/script/mod_convert_git.txt
  f5dbc96107be0223dfbe9ead75586749  libgo/go/cmd/go/testdata/script/mod_convert_glide.txt
  8ecb3cd01e3a6f85813f5c8ba359f483  libgo/go/cmd/go/testdata/script/mod_convert_glockfile.txt
  847c3b36df67dde72327ce7949871fbc  libgo/go/cmd/go/testdata/script/mod_convert_godeps.txt
  e47c685fdc6919e17802aff3351438d2  libgo/go/cmd/go/testdata/script/mod_convert_tsv.txt
! b516fba2fff8df34e10de1f65ee0f197  libgo/go/cmd/go/testdata/script/mod_convert_tsv_insecure.txt
  a1e3f4113d6a6446a628443a0a6de3fd  libgo/go/cmd/go/testdata/script/mod_convert_vendor_conf.txt
  c19ca0bf7e6db0e574216222f0ea0ec3  libgo/go/cmd/go/testdata/script/mod_convert_vendor_json.txt
  3ed3da0f4cfbdff693056d33095b1465  libgo/go/cmd/go/testdata/script/mod_convert_vendor_manifest.txt
  83c33773e92023bffddc313afb498528  libgo/go/cmd/go/testdata/script/mod_convert_vendor_yml.txt
  508001f5d3ebd9d4a992adf95814d4c9  libgo/go/cmd/go/testdata/script/mod_dir.txt
  a250d88962db3d086cab21a55d25850d  libgo/go/cmd/go/testdata/script/mod_doc.txt
! e606d9757d325adfb913b353d2819598  libgo/go/cmd/go/testdata/script/mod_domain_root.txt
! 9cec43785d7adf8e2079da334a5ef5ad  libgo/go/cmd/go/testdata/script/mod_dot.txt
! c532eee427ce820822a7c0895aa77452  libgo/go/cmd/go/testdata/script/mod_download.txt
  1e863e536039ae3143e5963c3d3527a2  libgo/go/cmd/go/testdata/script/mod_download_hash.txt
  0efc15a8b38ccad118f21b0b84618ead  libgo/go/cmd/go/testdata/script/mod_download_json.txt
  433ae543b7a2c9d04cefcb2b0373d612  libgo/go/cmd/go/testdata/script/mod_download_replace_file.txt
! bf3fd118ad20b563b24157be21095982  libgo/go/cmd/go/testdata/script/mod_edit.txt
! 3bc901499cc6d3dd5bb76fc839e60b93  libgo/go/cmd/go/testdata/script/mod_edit_go.txt
! 306297df100f2b0acd2ee0038f4e56c4  libgo/go/cmd/go/testdata/script/mod_empty_err.txt
  0892f45fc78cf34e618968cd96829f08  libgo/go/cmd/go/testdata/script/mod_enabled.txt
  f15d5cfa1ca9039927529eb601d587b3  libgo/go/cmd/go/testdata/script/mod_file_proxy.txt
  be4b9f9ca081bca06d256ce0a119fd9d  libgo/go/cmd/go/testdata/script/mod_find.txt
! fc4c632b634f3742c11d5f881ffcb180  libgo/go/cmd/go/testdata/script/mod_fs_patterns.txt
! 7fedd5451db2949d8f0bd2f69b0d9ccd  libgo/go/cmd/go/testdata/script/mod_get_cmd.txt
! 96d8bcb6a5f6da67990b355bdb5ba17c  libgo/go/cmd/go/testdata/script/mod_get_commit.txt
! a6dce04db7895c5df1bce30ec21f21ed  libgo/go/cmd/go/testdata/script/mod_get_direct.txt
! 344e5f64c8a63e895d8fb7faf35d0ce6  libgo/go/cmd/go/testdata/script/mod_get_downgrade.txt
! 07dfc1aa1faeb23d2b852bd2fb19ef58  libgo/go/cmd/go/testdata/script/mod_get_fallback.txt
  bc3ef9345cf7b5cd5ee0da3e35ca635d  libgo/go/cmd/go/testdata/script/mod_get_hash.txt
! ecee0e38e27d740021335090baa7c64c  libgo/go/cmd/go/testdata/script/mod_get_incompatible.txt
! 0f4e13b8f696c16d09b5980021582042  libgo/go/cmd/go/testdata/script/mod_get_indirect.txt
! 4b9a72bbc0859eeca559644f8be5bb4f  libgo/go/cmd/go/testdata/script/mod_get_insecure_redirect.txt
! cd45ecc0131c48277f0983e6c46aed8d  libgo/go/cmd/go/testdata/script/mod_get_latest_pseudo.txt
! d407a8bf9a167025ab1fef7e388fcbd8  libgo/go/cmd/go/testdata/script/mod_get_local.txt
! 8c4324e8b977b0932f5bb0cf88b217ee  libgo/go/cmd/go/testdata/script/mod_get_main.txt
! 89afef727283341974ba69cc7200b453  libgo/go/cmd/go/testdata/script/mod_get_major.txt
! 7575ef1a13e7877794a8370b78958918  libgo/go/cmd/go/testdata/script/mod_get_moved.txt
! 9396f23962c10aecefed6baf8cd0c99d  libgo/go/cmd/go/testdata/script/mod_get_newcycle.txt
! 16850ce7c010f415026c32b037b1da76  libgo/go/cmd/go/testdata/script/mod_get_none.txt
! 25c8d4197fd1811c7bc5a8ff9ac560e8  libgo/go/cmd/go/testdata/script/mod_get_patterns.txt
! a06666f22515686acbfce4f4172cd0d4  libgo/go/cmd/go/testdata/script/mod_get_private_vcs.txt
! 0fde9e8352582009fc15943ff0a7d039  libgo/go/cmd/go/testdata/script/mod_get_pseudo.txt
! d5845eab048d2441bba25b58ea7fbdfe  libgo/go/cmd/go/testdata/script/mod_get_pseudo_other_branch.txt
! a74a231b73793287812dbbbfadd954d2  libgo/go/cmd/go/testdata/script/mod_get_pseudo_prefix.txt
! 1f594450efe868468aa9460c8eedd11e  libgo/go/cmd/go/testdata/script/mod_get_svn.txt
! b4329cfaac89014ce53d9f443020ac0e  libgo/go/cmd/go/testdata/script/mod_get_tags.txt
! 9966b228fcae4b562d1146b84bc2dea5  libgo/go/cmd/go/testdata/script/mod_get_test.txt
! c7cbe4748894c2e5c13bc78770a35546  libgo/go/cmd/go/testdata/script/mod_get_trailing_slash.txt
! 6ecbe0f8797493b28c2be78cf9a3402e  libgo/go/cmd/go/testdata/script/mod_get_upgrade.txt
! bddb7cb84fdcccea02bf39da6c7dd077  libgo/go/cmd/go/testdata/script/mod_get_upgrade_pseudo.txt
! b9abad71e7e4d6f33f91a833c7fa691d  libgo/go/cmd/go/testdata/script/mod_getmode_vendor.txt
! 20aab84b5f3324730760a6d40c76e6d9  libgo/go/cmd/go/testdata/script/mod_getx.txt
  e38adff826ea0f99306780ec353e2974  libgo/go/cmd/go/testdata/script/mod_git_export_subst.txt
  c92ed1315860137d16bc0aa90dd80b74  libgo/go/cmd/go/testdata/script/mod_go_version.txt
  294cd06aa8ed621f736d0fcdfca0a5f5  libgo/go/cmd/go/testdata/script/mod_go_version_mixed.txt
  617d4368b3a74fb76f772c9cd8b0a02d  libgo/go/cmd/go/testdata/script/mod_gobuild_import.txt
  eceaf7909e07bd765a20034948cadf4a  libgo/go/cmd/go/testdata/script/mod_gofmt_invalid.txt
! b8c3e9869661f0eed8bd9de34481ac0e  libgo/go/cmd/go/testdata/script/mod_gonoproxy.txt
! 8ae9b799901d22030bc9128fa3b23be1  libgo/go/cmd/go/testdata/script/mod_gopkg_unstable.txt
  9e184867708272e0782ac10f4f7d2620  libgo/go/cmd/go/testdata/script/mod_goroot_errors.txt
  f6db1b1e2b0ae05d978ec930a6eecefa  libgo/go/cmd/go/testdata/script/mod_graph.txt
  7e6b1289fcc17bd80686b261a27cf1ec  libgo/go/cmd/go/testdata/script/mod_help.txt
! 20f9ef6514a9bb62079d4f297552aef7  libgo/go/cmd/go/testdata/script/mod_import.txt
  afb8c959ade039700ac864136d2a9074  libgo/go/cmd/go/testdata/script/mod_import_mod.txt
! 4b94817751917b8e5efebea53f5e6d9e  libgo/go/cmd/go/testdata/script/mod_import_v1suffix.txt
! 88ed0be16fc8e11292d90334ee095a33  libgo/go/cmd/go/testdata/script/mod_in_testdata_dir.txt
  baf2a27935bbe1a8952740aec88989e2  libgo/go/cmd/go/testdata/script/mod_indirect.txt
  7f482fc80919946f2f46be25a8ae094b  libgo/go/cmd/go/testdata/script/mod_indirect_main.txt
  0981b2a4cb731b987d087b08fa021b15  libgo/go/cmd/go/testdata/script/mod_indirect_tidy.txt
! 6514be06552b786870c13af37faf28c8  libgo/go/cmd/go/testdata/script/mod_init_dep.txt
  2cff709ba2f617dac370072d6a3aeb57  libgo/go/cmd/go/testdata/script/mod_init_empty.txt
! 5dc8e86635f1b53ecccd5b431f2f41c1  libgo/go/cmd/go/testdata/script/mod_init_glide.txt
! 795c05b45c569427dd3b9882d1f7edc3  libgo/go/cmd/go/testdata/script/mod_init_path.txt
! 78798585336b2ac0eabd300af7bc03dc  libgo/go/cmd/go/testdata/script/mod_install_versioned.txt
! e80e2cfdef839ff83917bcc4413fcd8b  libgo/go/cmd/go/testdata/script/mod_internal.txt
! 438b185ca531189265d0bf28d1e779c6  libgo/go/cmd/go/testdata/script/mod_invalid_version.txt
! 4da77574649bb61232ab800669ac3769  libgo/go/cmd/go/testdata/script/mod_issue35317.txt
! 70eb54bc34d6c86cffa6b8e2801b30cf  libgo/go/cmd/go/testdata/script/mod_list.txt
  e0daf8a063cf86ed57bca26f6ac7a2bf  libgo/go/cmd/go/testdata/script/mod_list_bad_import.txt
! 1df64df10ced69dd1cfc4a1dd8f5caf3  libgo/go/cmd/go/testdata/script/mod_list_compiled_concurrent.txt
! dbc74c3e3deed398a401f87249febc30  libgo/go/cmd/go/testdata/script/mod_list_dir.txt
! ab6a61f20870116fd36aa162786df913  libgo/go/cmd/go/testdata/script/mod_list_direct.txt
  69235ebb6ec00617be80cb85e55c47f9  libgo/go/cmd/go/testdata/script/mod_list_e_readonly.txt
  aa120ef3adff6641763aab216accd157  libgo/go/cmd/go/testdata/script/mod_list_pseudo.txt
! a89069dd6a83507e6543185742b8c908  libgo/go/cmd/go/testdata/script/mod_list_replace_dir.txt
! d64bd3cdd0cd169f6be991c2b2834765  libgo/go/cmd/go/testdata/script/mod_list_std.txt
  5aec0f10d2895860e583f8721729aff1  libgo/go/cmd/go/testdata/script/mod_list_test.txt
  780c307f38fb1024d465900c06a3aabc  libgo/go/cmd/go/testdata/script/mod_list_upgrade.txt
! 902923a538d1b926a308bc15f62870ef  libgo/go/cmd/go/testdata/script/mod_list_upgrade_pseudo.txt
! cd8f799a2d653d7f7a7310a6dd5833da  libgo/go/cmd/go/testdata/script/mod_load_badchain.txt
  88fa780905366dc21c0c99e748d95c31  libgo/go/cmd/go/testdata/script/mod_load_badmod.txt
! 9873bd4ce08e0e1d33e5099a039f1d0b  libgo/go/cmd/go/testdata/script/mod_load_badzip.txt
  d39036071e238f16dfac232bac06d24e  libgo/go/cmd/go/testdata/script/mod_local_replace.txt
! 19abbcdcdc9cb18461e07bdf18878350  libgo/go/cmd/go/testdata/script/mod_missing_repo.txt
  ecc21f99203b132d2085186040d322ec  libgo/go/cmd/go/testdata/script/mod_missingpkg_prerelease.txt
  57aebbf7801966c6afa6651edaaae6e8  libgo/go/cmd/go/testdata/script/mod_modinfo.txt
! f7972676a80bfefe536ad4b70011fb97  libgo/go/cmd/go/testdata/script/mod_multirepo.txt
  18ae63aa8db51ebcd4cc1d711083a974  libgo/go/cmd/go/testdata/script/mod_nomod.txt
  6c8ececfa4063012a294acd9fb4f582a  libgo/go/cmd/go/testdata/script/mod_off.txt
  bfc1507f6da3adf0a82860c1b61bcf13  libgo/go/cmd/go/testdata/script/mod_off_init.txt
! b78f35de403b87bbee0431be40a79eb5  libgo/go/cmd/go/testdata/script/mod_outside.txt
  ae64b93722edefc2cb0e3c951b716d3e  libgo/go/cmd/go/testdata/script/mod_patterns.txt
  0f9cc6a73efc31e5d1073c9ede929e8c  libgo/go/cmd/go/testdata/script/mod_patterns_vendor.txt
! 92a313127d4ef92a360380faf492aa63  libgo/go/cmd/go/testdata/script/mod_permissions.txt
! 4589abd2a3ee9f0045ec5a886edcecb4  libgo/go/cmd/go/testdata/script/mod_prefer_compatible.txt
  8af488fc1b8f67369be0f4828a2792b8  libgo/go/cmd/go/testdata/script/mod_proxy_errors.txt
! 48d4c782a9d0a77fe265cfa04fd117bd  libgo/go/cmd/go/testdata/script/mod_proxy_https.txt
! d8e89055f4d56aa320f8179906511579  libgo/go/cmd/go/testdata/script/mod_proxy_list.txt
  174511b8862c2fd5623d219931425f32  libgo/go/cmd/go/testdata/script/mod_pseudo_cache.txt
! 96a841423445285ad7bcca27134be44e  libgo/go/cmd/go/testdata/script/mod_query.txt
! 458387d0ff0a6cc0b155dff88047b4a4  libgo/go/cmd/go/testdata/script/mod_query_empty.txt
! c8afe82966ddb004da567751c428d310  libgo/go/cmd/go/testdata/script/mod_query_exclude.txt
! 0d59a9c8538d02e058e343b36b0cc8fd  libgo/go/cmd/go/testdata/script/mod_readonly.txt
! 424bb8480da6a965524b17d3bb769f5c  libgo/go/cmd/go/testdata/script/mod_replace.txt
  1bcab23d2a6e8003bbc6120a51feaba3  libgo/go/cmd/go/testdata/script/mod_replace_gopkgin.txt
! 940786d075a1228233eadcb85d1b925f  libgo/go/cmd/go/testdata/script/mod_replace_import.txt
! 66f172c612e87fcc08812e3dcb0ad682  libgo/go/cmd/go/testdata/script/mod_require_exclude.txt
! 69986c0bc07f5635b3d4ff74389a0ef4  libgo/go/cmd/go/testdata/script/mod_retention.txt
  c9526637edf8d37e0851063b805a2f0c  libgo/go/cmd/go/testdata/script/mod_run_path.txt
! 12c56c18a178cd097476ea2280e722a3  libgo/go/cmd/go/testdata/script/mod_std_vendor.txt
  0b50524b8d7739ab3704e68d24d79e81  libgo/go/cmd/go/testdata/script/mod_string_alias.txt
! 34f078ef1121073349bbbe0792a800e2  libgo/go/cmd/go/testdata/script/mod_sum_replaced.txt
! 5c9b29932b852de01ab465f9bc9d9a7e  libgo/go/cmd/go/testdata/script/mod_sumdb.txt
! 514dae960eb3cfb14282559a3f4dd4bc  libgo/go/cmd/go/testdata/script/mod_sumdb_cache.txt
! 4db31425906630a01497657f7feff273  libgo/go/cmd/go/testdata/script/mod_sumdb_file_path.txt
! 13e802b47e594475f301283ee2608826  libgo/go/cmd/go/testdata/script/mod_sumdb_golang.txt
! 3b3185453d3e138d94fc25e35a098074  libgo/go/cmd/go/testdata/script/mod_sumdb_proxy.txt
! 0efbe09f23828d7ddcd4f53ed8bceaca  libgo/go/cmd/go/testdata/script/mod_symlink.txt
! 7d3eca90bf6e9f474892544cc5968cfd  libgo/go/cmd/go/testdata/script/mod_test.txt
  2820259b7d04da0270b2de52db31dc8f  libgo/go/cmd/go/testdata/script/mod_test_cached.txt
  85e210f2a362f270d46eb0d9a83bc9c9  libgo/go/cmd/go/testdata/script/mod_test_files.txt
  8b538329d6589f696e84ebeed445dd2e  libgo/go/cmd/go/testdata/script/mod_tidy.txt
  04e23a82a94d8f0e60b7b75ec98f4e58  libgo/go/cmd/go/testdata/script/mod_tidy_cycle.txt
! 13213e898df2fdddb93670b5c1908e9a  libgo/go/cmd/go/testdata/script/mod_tidy_error.txt
  1a78eae097a7102b1f2676e127956161  libgo/go/cmd/go/testdata/script/mod_tidy_quote.txt
! cdc0ad65eddb99d403747c0420a7558e  libgo/go/cmd/go/testdata/script/mod_tidy_replace.txt
! d0c25f46fbc4a5a3218f3ceadaab7507  libgo/go/cmd/go/testdata/script/mod_tidy_sum.txt
! bd81ebc17337d0c9d4873e9df78d810a  libgo/go/cmd/go/testdata/script/mod_upgrade_patch.txt
! e4f3e49d941e87bf73e9a8fd903a65cb  libgo/go/cmd/go/testdata/script/mod_vcs_missing.txt
! f73fbc4479938d3a870e61d1fad7a10d  libgo/go/cmd/go/testdata/script/mod_vendor.txt
! b8f2d69aeed4a1f5626b99dd5aad5c77  libgo/go/cmd/go/testdata/script/mod_vendor_auto.txt
! feb57ab8ab513648f1b0b076b82411c4  libgo/go/cmd/go/testdata/script/mod_vendor_build.txt
  23852d4734fd6c23f2f05967dd962dd3  libgo/go/cmd/go/testdata/script/mod_vendor_nodeps.txt
! bb58498a4ff8a1face9a290da9151760  libgo/go/cmd/go/testdata/script/mod_vendor_replace.txt
  2592cb437cf8f8767dfa2d3eaea407c2  libgo/go/cmd/go/testdata/script/mod_vendor_unused.txt
! 341eeee06fce6288a166aaf090d6edba  libgo/go/cmd/go/testdata/script/mod_verify.txt
  7234d122c0ba93349f1663ba0405dcd5  libgo/go/cmd/go/testdata/script/mod_versions.txt
  012656139b764651afff32e52f9d2d42  libgo/go/cmd/go/testdata/script/mod_why.txt
! 7ddc5e546c124031e60671fac2b07dbd  libgo/go/cmd/go/testdata/script/modfile_flag.txt
  22b3afa4e8f6eaf54f5231d711fea20d  libgo/go/cmd/go/testdata/script/noncanonical_import.txt
  dbb471f2dc212527ac6c24c3ed7ad312  libgo/go/cmd/go/testdata/script/pattern_syntax_error.txt
  dfb62925a95c0c6ca1f959ae9bc06fff  libgo/go/cmd/go/testdata/script/prevent_sys_unix_import.txt
  88e2929626e2d14449c7ccc8fc81cd60  libgo/go/cmd/go/testdata/script/run_hello.txt
  059e5010c132e3d1eba4aec4af80f299  libgo/go/cmd/go/testdata/script/run_set_executable_name.txt
! 8ce8786b33aad9e2338bb4a9f46d123b  libgo/go/cmd/go/testdata/script/run_wildcard.txt
  b330e0f4d27a4eabaaf1c63f3056836c  libgo/go/cmd/go/testdata/script/script_wait.txt
  e595107a5dba27387b8e0c78d3ea3b1a  libgo/go/cmd/go/testdata/script/std_vendor.txt
  87aae535e8dd4267abb2f4d2e219243c  libgo/go/cmd/go/testdata/script/test_bad_example.txt
  4d34f58e4625e33df4a412380d4718c0  libgo/go/cmd/go/testdata/script/test_badtest.txt
! fccc8b8e9cc46f9ad9f6c131b0a7ce7b  libgo/go/cmd/go/testdata/script/test_cache_inputs.txt
  b222151f2a921994a7f55ed249f24f7e  libgo/go/cmd/go/testdata/script/test_compile_binary.txt
  2197dda02b07ad8965ba97055aacdb8c  libgo/go/cmd/go/testdata/script/test_compile_tempfile.txt
  8809a4c467d3fc10104111656ac58b03  libgo/go/cmd/go/testdata/script/test_flags.txt
  efe26eeb268f6df41604dd3cd3f45c2e  libgo/go/cmd/go/testdata/script/test_generated_main.txt
  1d0f827f0f0701185cfa7514a9f4d574  libgo/go/cmd/go/testdata/script/test_go111module_cache.txt
  00a1784b9585d68b78c3c32e86152b37  libgo/go/cmd/go/testdata/script/test_main_archive.txt
  7746ca69adbc076e6481624dc8baf98f  libgo/go/cmd/go/testdata/script/test_rebuildall.txt
  e0de8dc5161a3b6ade1429efdd6ac760  libgo/go/cmd/go/testdata/script/test_status.txt
  5a59156cc1f673ae921d634f66c71140  libgo/go/cmd/go/testdata/script/test_timeout.txt
  73e1f866c6b9c55238cc92e3f645e6b0  libgo/go/cmd/go/testdata/script/vendor_complex.txt
! ec975c12bbc6096dfdc4c53af68a4e36  libgo/go/cmd/go/testdata/script/version.txt
  c800d4af05d63b175e8b1ba734b55be9  libgo/go/cmd/go/testdata/script/vet_asm.txt
  7d70f96679267e203d8aa12736575f1d  libgo/go/cmd/go/testdata/script/vet_deps.txt
  99947ab56e2537c8884f6dd8cc491750  libgo/go/cmd/go/testdata/script/vet_flags.txt
! 2cb3cedabdbd6e8986756898ed1aa343  libgo/go/cmd/go/testdata/test_regexps.txt
! df13e4cd3a4dcf3aa36b2533ae488d84  libgo/go/cmd/go/testdata/testterminal18153/terminal_test.go
  27d2592d4a25a41a5ed3c4fbdac5fb28  libgo/go/cmd/go/testdata/vendormod.txt
  ebf01e2a6cf40d4f3551d7ce9137e9a8  libgo/go/cmd/gofmt/doc.go
! 9dbf312f1b7aa1046fbbaf97e73622c7  libgo/go/cmd/gofmt/gofmt.go
! 00571ff76ddcf7d67aaa0b972ee7effe  libgo/go/cmd/gofmt/gofmt_test.go
  3b0675a2f0e08b9db3195e48000b3f6b  libgo/go/cmd/gofmt/internal.go
  2d51f4b232843ca01a38e3860006528e  libgo/go/cmd/gofmt/long_test.go
! 1e1576e3781a052c948a1bd75685dc7c  libgo/go/cmd/gofmt/rewrite.go
  8cbd03fcc467680232794c829d6dfcb2  libgo/go/cmd/gofmt/simplify.go
  03bee86190c5c4c3de3e3226adfe5d22  libgo/go/cmd/gofmt/testdata/comments.golden
  03bee86190c5c4c3de3e3226adfe5d22  libgo/go/cmd/gofmt/testdata/comments.input
--- 95417,96110 ----
  8f98a724beb492524719e172b2d58d8e  libgo/go/cmd/go/testdata/modlegacy/src/new/sub/x/v1/y/y.go
  f22cb178b7998fdcaba5c10532221858  libgo/go/cmd/go/testdata/modlegacy/src/old/p1/p1.go
  0751265117ff392563d0a12382092857  libgo/go/cmd/go/testdata/modlegacy/src/old/p2/p2.go
! 6ff90f125c243604624cd9b627e0db5b  libgo/go/cmd/go/testdata/savedir.go
! a64a0d73811f1c53f10872dbe9d36add  libgo/go/cmd/go/testdata/script/README
! b997af27ba4b1681ff87f622c7c23a84  libgo/go/cmd/go/testdata/script/badgo.txt
! 5c33e6de63a01d4cd0d58d9c7a997de0  libgo/go/cmd/go/testdata/script/bug.txt
  5090ac6fd1fb9fbc61a6adbc46f0def6  libgo/go/cmd/go/testdata/script/build_GOTMPDIR.txt
  97379f709ae6fbaa19f4f4bf761a5463  libgo/go/cmd/go/testdata/script/build_acl_windows.txt
+ 9d02d7884f4763b45fbd9ba6259b76ee  libgo/go/cmd/go/testdata/script/build_arm.txt
+ 3e3a6e7d38fdb55ec14e738433d9b522  libgo/go/cmd/go/testdata/script/build_cache_arch_mode.txt
  5f431c2cd2c9b93bdaa530d58f799083  libgo/go/cmd/go/testdata/script/build_cache_compile.txt
+ 80aa19e9e548b1668b0e5aa7915c1247  libgo/go/cmd/go/testdata/script/build_cache_disabled.txt
  3d4b02b1ab75e27ea31dfdda09b5f2e8  libgo/go/cmd/go/testdata/script/build_cache_gomips.txt
  a1e27faefba409c9b690c368166f2243  libgo/go/cmd/go/testdata/script/build_cache_link.txt
  190cde199cdc1246ea6e03a71bc3b58f  libgo/go/cmd/go/testdata/script/build_cache_output.txt
! dc84e2ca326da3d5371c0dbb883d77dc  libgo/go/cmd/go/testdata/script/build_cache_trimpath.txt
! ac1de4c5a06a5475310ee7a298f48b79  libgo/go/cmd/go/testdata/script/build_cd_gopath_different.txt
! ead92a4c0a6469273671ba3ad3851b8f  libgo/go/cmd/go/testdata/script/build_cgo_consistent_results.txt
! c87ef286874c4f53cde736c012fda0ed  libgo/go/cmd/go/testdata/script/build_concurrent_backend.txt
! aa53ac1572af62a62039db4d48f12b34  libgo/go/cmd/go/testdata/script/build_darwin_cc_arch.txt
! bc4938c66e0700633550da462f16deb5  libgo/go/cmd/go/testdata/script/build_dash_n_cgo.txt
! decaf9fac6c28fec514937ee509b457e  libgo/go/cmd/go/testdata/script/build_dash_o_dev_null.txt
! 8a277fd2de8d5d9e4b9f0056eba892be  libgo/go/cmd/go/testdata/script/build_dash_x.txt
! 416ee9cb7f9ee0304e8433c98e06332c  libgo/go/cmd/go/testdata/script/build_exe.txt
  17614c6044c0e86dc969e82489a437d9  libgo/go/cmd/go/testdata/script/build_gcflags.txt
+ 6019dac9c21297c7b719a88c4b89d090  libgo/go/cmd/go/testdata/script/build_gcflags_order.txt
+ 8e815296fa3b437b560437669c0c2b33  libgo/go/cmd/go/testdata/script/build_gopath_order.txt
  f42e143987eeb6dfaea584c043242eab  libgo/go/cmd/go/testdata/script/build_i.txt
+ 784f83fffd22264a8947fe51fbf3cbec  libgo/go/cmd/go/testdata/script/build_i_deprecate.txt
+ 7d68a7cf53aeb9d7c60a9f89af669d44  libgo/go/cmd/go/testdata/script/build_ignore_leading_bom.txt
+ d5847a87cbe8ffa95df16d4aad9b2ac0  libgo/go/cmd/go/testdata/script/build_import_comment.txt
+ dd4ecc91eeb847d0f3fea7e51e5482f8  libgo/go/cmd/go/testdata/script/build_import_cycle.txt
+ d59c263b0f85349b7353c56d8bb0a355  libgo/go/cmd/go/testdata/script/build_internal.txt
+ 4cff00498c8a480ddd527415a51788b3  libgo/go/cmd/go/testdata/script/build_issue48319.txt
+ d8886a267286c2f90550205473f3c769  libgo/go/cmd/go/testdata/script/build_issue6480.txt
+ d853480a1364a5c42f8a67a20e3136c8  libgo/go/cmd/go/testdata/script/build_link_x_import_path_escape.txt
  f8077cb351530f4c7f8ca61c68d824f4  libgo/go/cmd/go/testdata/script/build_multi_main.txt
+ 8fb71bea44b9dfb8c40ae861c254b8b4  libgo/go/cmd/go/testdata/script/build_n_cgo.txt
+ 192095afce11a9d7361663a9da1698c7  libgo/go/cmd/go/testdata/script/build_negative_p.txt
+ 4423738ea11c32298e0df0e160dfcb6f  libgo/go/cmd/go/testdata/script/build_no_go.txt
  848ade6547c233319bad0e6b3af1f0de  libgo/go/cmd/go/testdata/script/build_nocache.txt
+ 37061cbcad13490b2c7774febb8b5dde  libgo/go/cmd/go/testdata/script/build_output.txt
+ 92c0a5becb463462f0b940ef56b32624  libgo/go/cmd/go/testdata/script/build_overlay.txt
+ cbc86574e4e029bf6f6a90e4e9ee16fa  libgo/go/cmd/go/testdata/script/build_patterns_outside_gopath.txt
+ 92cee930202d1cb732fdba084b5800f6  libgo/go/cmd/go/testdata/script/build_plugin_non_main.txt
  47ac8ac6d5a4d04f4574d2659748856b  libgo/go/cmd/go/testdata/script/build_relative_pkgdir.txt
  359e53fe0933062b22c15a526abe4cce  libgo/go/cmd/go/testdata/script/build_relative_tmpdir.txt
! 9e2e960a5d0c243d47e9d5f3a08f18c9  libgo/go/cmd/go/testdata/script/build_runtime_gcflags.txt
! 35a0610913d7fd669e00e3e25bf0bc71  libgo/go/cmd/go/testdata/script/build_single_error.txt
! 1a19824d3cb978db3f2b7905ca096169  libgo/go/cmd/go/testdata/script/build_tag_goexperiment.txt
! 02b9aa2ec27df2d61eb8425fb7c1a86a  libgo/go/cmd/go/testdata/script/build_tags_no_comma.txt
! 6ef532adb4b4080eb5e9e9f8a0281ed4  libgo/go/cmd/go/testdata/script/build_test_only.txt
! ecf12155f8aca1d216b1599220f4de58  libgo/go/cmd/go/testdata/script/build_trimpath.txt
! ae5d0ea288cb337e35a54af8454442ed  libgo/go/cmd/go/testdata/script/build_trimpath_cgo.txt
! 1638b1975034958886eaeea8eb0c2e63  libgo/go/cmd/go/testdata/script/build_unsupported_goos.txt
! 69e35dd5e6aa69202b4be58423c2d5a9  libgo/go/cmd/go/testdata/script/build_vendor.txt
  2c69443ecf0acd33c471187d6fc31bc7  libgo/go/cmd/go/testdata/script/cache_unix.txt
  951a47442045c43d50f0ee659c946b22  libgo/go/cmd/go/testdata/script/cache_vet.txt
+ ece2072f937c0d1b232eebb84821da4d  libgo/go/cmd/go/testdata/script/cgo_asm_error.txt
+ 2ed40dfe5ba6b73fbc5238d6997fb453  libgo/go/cmd/go/testdata/script/cgo_bad_directives.txt
+ 762f14b15ffe8c4fd30a23da73671e99  libgo/go/cmd/go/testdata/script/cgo_depends_on_syscall.txt
+ 88c95e8e648525392e595838147a18bf  libgo/go/cmd/go/testdata/script/cgo_flag_contains_space.txt
+ 21437fc80f9697aed04e3720b23569c7  libgo/go/cmd/go/testdata/script/cgo_path.txt
+ 81d2e369d1082350ed68f560d1a469b8  libgo/go/cmd/go/testdata/script/cgo_path_space.txt
+ de939029a4fdd2169219524ff1664703  libgo/go/cmd/go/testdata/script/cgo_path_space_quote.txt
+ 9079b76f69d4a58a945f4d50aa718da0  libgo/go/cmd/go/testdata/script/cgo_stale.txt
+ e493459411ba7f30664a22ec1fe30e47  libgo/go/cmd/go/testdata/script/cgo_stale_precompiled.txt
  0e400c5f5fa693a94e9821b8ffab770a  libgo/go/cmd/go/testdata/script/cgo_syso_issue29253.txt
+ 554b3931848b5cc4580c8faed192fd89  libgo/go/cmd/go/testdata/script/clean_binary.txt
+ 90b6bf2db0fe9ef33f5eae5f2a9dff6d  libgo/go/cmd/go/testdata/script/clean_cache_n.txt
  af824bdae1e234c5d92f227ffd2cd1bf  libgo/go/cmd/go/testdata/script/clean_testcache.txt
  dc491fd02d6718d5ff2a67f6c77d65d7  libgo/go/cmd/go/testdata/script/cmd_import_error.txt
+ 17de10d685414f91ff212240dd5411e2  libgo/go/cmd/go/testdata/script/cover_asm.txt
  9d7c42400724aa5ac2ca2bcc8d79e5ca  libgo/go/cmd/go/testdata/script/cover_atomic_pkgall.txt
+ eed9085fa5f4d2662a28791c80bd9644  libgo/go/cmd/go/testdata/script/cover_blank_func_decl.txt
+ 84f453cf86624792f746acc3898b99e3  libgo/go/cmd/go/testdata/script/cover_cgo.txt
+ 6b0f44aff38e73444d718d20a0900912  libgo/go/cmd/go/testdata/script/cover_cgo_extra_file.txt
+ efa1e5ff9ad23be737603efcb4793c99  libgo/go/cmd/go/testdata/script/cover_cgo_extra_test.txt
+ 50c3475257f80f33dbdb15a3a7c59f9f  libgo/go/cmd/go/testdata/script/cover_cgo_xtest.txt
+ a22bad276dcbcd822c58c3926fcc3354  libgo/go/cmd/go/testdata/script/cover_dash_c.txt
+ 2c9e42a85211fb07ff0b1e464eef9e84  libgo/go/cmd/go/testdata/script/cover_dep_loop.txt
+ 5e3a5ad10951beb3d565796893467215  libgo/go/cmd/go/testdata/script/cover_dot_import.txt
+ f4d5c63833c0d037688a6000ee518404  libgo/go/cmd/go/testdata/script/cover_error.txt
+ e92e99c7c61d27eeb9b763d975fa3dcd  libgo/go/cmd/go/testdata/script/cover_import_main_loop.txt
  caf75437ba52f9bf33951bd4e1c4b09e  libgo/go/cmd/go/testdata/script/cover_mod_empty.txt
  1a42ddf1ef3f0dc2c2c6cf46f27e3c2e  libgo/go/cmd/go/testdata/script/cover_modes.txt
+ b28b333c72b623691de22ed0a10f6259  libgo/go/cmd/go/testdata/script/cover_pattern.txt
+ 0bb3940c4a88cd1ac73b3ed4a5413243  libgo/go/cmd/go/testdata/script/cover_pkgall_imports.txt
  76ff31132da5a96a1795cd86539d3215  libgo/go/cmd/go/testdata/script/cover_pkgall_multiple_mains.txt
  1115715066cf20ee58a470397f685c24  libgo/go/cmd/go/testdata/script/cover_pkgall_runtime.txt
+ 5474c24ed8edb719905be2fe6bf19623  libgo/go/cmd/go/testdata/script/cover_runs.txt
+ 063fa3e11df41bfe81309102efd95ff4  libgo/go/cmd/go/testdata/script/cover_statements.txt
+ e5daa8dcd27fbf3f4559d33e1423a055  libgo/go/cmd/go/testdata/script/cover_sync_atomic_import.txt
  6158ecb786aa4a50f0cf26416e1ad5e6  libgo/go/cmd/go/testdata/script/cpu_profile_twice.txt
  31069bd0503e670384dd1dc7f8a1d4d7  libgo/go/cmd/go/testdata/script/devnull.txt
! ecba07fbb77f1956aa09a1b4ae7bce3d  libgo/go/cmd/go/testdata/script/doc.txt
! a12672ddf3f8b7909630da0f483b3edd  libgo/go/cmd/go/testdata/script/embed.txt
! 6cc93bcc8836c5095524c67bef154cd0  libgo/go/cmd/go/testdata/script/embed_fmt.txt
! 68b78a3565e97c34055efb83f2270cde  libgo/go/cmd/go/testdata/script/env_cross_build.txt
! a45560ec383494bade123ec8684cef26  libgo/go/cmd/go/testdata/script/env_exp.txt
! 038c13785a9583cf44dce08e2f5b23fb  libgo/go/cmd/go/testdata/script/env_unset.txt
! 8f8cecab122556c7c0d1f5033ec61332  libgo/go/cmd/go/testdata/script/env_write.txt
  d2ecb1a1b1387c4923216c044e97e2f1  libgo/go/cmd/go/testdata/script/fileline.txt
! 3100bda472d9510cb09e05915977a1d2  libgo/go/cmd/go/testdata/script/fmt_load_errors.txt
! 06878a9ccecdc62bd6e7d6b221bd9fc1  libgo/go/cmd/go/testdata/script/gccgo_link_c.txt
  e266512d46667becf60b696e477051af  libgo/go/cmd/go/testdata/script/gccgo_m.txt
  482e75c227896606836ab8a873842595  libgo/go/cmd/go/testdata/script/gccgo_mangle.txt
! a9e77ee64b045e6a05d9e0ebd9ca2e85  libgo/go/cmd/go/testdata/script/gcflags_patterns.txt
! acf5793239e6a86bc9661b6008feec23  libgo/go/cmd/go/testdata/script/generate.txt
! b50a916e1c91b9b53c9afcb616bb73fe  libgo/go/cmd/go/testdata/script/generate_bad_imports.txt
! bc135bf6882498c9645dfff27150ab93  libgo/go/cmd/go/testdata/script/generate_env.txt
! acc5901804791470c77a2b0c2e284a8f  libgo/go/cmd/go/testdata/script/generate_invalid.txt
! 7d4a15f0024c53f174f1787a5b28b444  libgo/go/cmd/go/testdata/script/get_404_meta.txt
  66008713bba01fe5dc311d4eea7b56f1  libgo/go/cmd/go/testdata/script/get_brace.txt
+ a173951b13efa2dab3587fcc7a90f208  libgo/go/cmd/go/testdata/script/get_custom_domain_wildcard.txt
+ a43aba1cd5734540b1bee80ae38e74df  libgo/go/cmd/go/testdata/script/get_dash_t.txt
+ 9a9b6960dfde5aaf9cf6cc480a565349  libgo/go/cmd/go/testdata/script/get_domain_root.txt
+ c0578c8cbab861d1bf9916f5ff67f5a1  libgo/go/cmd/go/testdata/script/get_dot_slash_download.txt
  c7ac2dd684bbd0ac3e2eeb6ab5ab2ed6  libgo/go/cmd/go/testdata/script/get_dotfiles.txt
! 990fb4274583c82af7725bfbe0b8a385  libgo/go/cmd/go/testdata/script/get_go_file.txt
! 439c9fdbc9bb1a55262b50841c6616ed  libgo/go/cmd/go/testdata/script/get_goroot.txt
! 6a562953715ac9ccd584e249107536eb  libgo/go/cmd/go/testdata/script/get_insecure.txt
! 5e5d10d15ec8ac551f7e492bdd9d5e4d  libgo/go/cmd/go/testdata/script/get_insecure_custom_domain.txt
! 58d03147fa828116327f6cec8c7fe6cb  libgo/go/cmd/go/testdata/script/get_insecure_env.txt
! 5faf6b7ca7332f0d24daa2662b63bc13  libgo/go/cmd/go/testdata/script/get_insecure_no_longer_supported.txt
! 54ff05dfde0f27b8038daf6de5e9de41  libgo/go/cmd/go/testdata/script/get_insecure_redirect.txt
! 5ef652c0adf54cc33fc14fc44aa384e5  libgo/go/cmd/go/testdata/script/get_insecure_update.txt
! 01c9a3696a97b5c38af241063d8ef59e  libgo/go/cmd/go/testdata/script/get_internal_wildcard.txt
! 4c09035dabe962594fd19f84111e05c9  libgo/go/cmd/go/testdata/script/get_issue11307.txt
! fb8bbc65681c696611a1285232feab75  libgo/go/cmd/go/testdata/script/get_legacy.txt
! 7538ecb2a4a1c3bc8deeada4925cd6e2  libgo/go/cmd/go/testdata/script/get_non_pkg.txt
! e51e0ab0a526eca7edcd7ef530115529  libgo/go/cmd/go/testdata/script/get_race.txt
! 0ca6f8058251866626513c3767c1b9ef  libgo/go/cmd/go/testdata/script/get_test_only.txt
  3c0ab1badc3091e3e02601b4bbba4550  libgo/go/cmd/go/testdata/script/get_tilde.txt
+ e1325cd4da2b196133378cc3eabdbb6f  libgo/go/cmd/go/testdata/script/get_update.txt
+ 81e70ad53de2906a2b67d8b344d8e690  libgo/go/cmd/go/testdata/script/get_update_all.txt
+ f6bb9a612a27e3a7c905bcc97a425612  libgo/go/cmd/go/testdata/script/get_update_unknown_protocol.txt
+ dc7e1b3f8072a4193c4953a2d1bb559f  libgo/go/cmd/go/testdata/script/get_update_wildcard.txt
+ 7bfe1df397f5d0f6035adcfac688bf34  libgo/go/cmd/go/testdata/script/get_vcs_error_message.txt
+ 4ce512b7321566b6bf550d1f60ac6a08  libgo/go/cmd/go/testdata/script/get_vendor.txt
  13c50ac07f758afd798de1aa557f03c7  libgo/go/cmd/go/testdata/script/get_with_git_trace.txt
! e40dd740b6fe7c3ad881035e78661b2e  libgo/go/cmd/go/testdata/script/go_version.txt
! 3b94870e71ff3594db8571686571de4f  libgo/go/cmd/go/testdata/script/goflags.txt
! 3525e4e6cec030e02c8db17887095f29  libgo/go/cmd/go/testdata/script/gopath_install.txt
! c10f7289df235eb5773721324324f3df  libgo/go/cmd/go/testdata/script/gopath_local.txt
  518ae313f29bb0d8cc8c45948e639cb5  libgo/go/cmd/go/testdata/script/gopath_moved_repo.txt
  fd5fee6444dc630b75eef1466298c36c  libgo/go/cmd/go/testdata/script/gopath_paths.txt
  b5316c60f6f70d2376d84efdebfdbfa1  libgo/go/cmd/go/testdata/script/gopath_std_vendor.txt
+ bba83019ea476c7f68f171cb5a733537  libgo/go/cmd/go/testdata/script/gopath_vendor_dup_err.txt
+ b761998e44992008816fe597d9e21d41  libgo/go/cmd/go/testdata/script/goroot_executable.txt
+ b1e0eeb77e3dccf2e92decf3472aa516  libgo/go/cmd/go/testdata/script/govcs.txt
  0c2ae6ce07cc2ac4e51c2e51bb320408  libgo/go/cmd/go/testdata/script/help.txt
+ 0379a283ea8d9e689361fd18b03e9ec2  libgo/go/cmd/go/testdata/script/import_cycle.txt
+ a2a8e0d88f3aa0dde195c7a34680fa91  libgo/go/cmd/go/testdata/script/import_ignore.txt
  ec1d642b1a03cce344e4c1fd323a80f4  libgo/go/cmd/go/testdata/script/import_main.txt
+ cb610c9ef20435a185d038897d776e7f  libgo/go/cmd/go/testdata/script/install_cgo_excluded.txt
  9d04685fe658db9dde75baa3f3c2be80  libgo/go/cmd/go/testdata/script/install_cleans_build.txt
  5515b9a362f2978f73430307ee0a0063  libgo/go/cmd/go/testdata/script/install_cmd_gobin.txt
  7040281c85b7d8e0e3284c8a235d8a3e  libgo/go/cmd/go/testdata/script/install_cross_gobin.txt
+ c2be9a032c0efb146524f5a0e5a3ccb1  libgo/go/cmd/go/testdata/script/install_msan_and_race_require_cgo.txt
  c2c6b4fac69339acdcc3e93d0f524c29  libgo/go/cmd/go/testdata/script/install_rebuild_gopath.txt
  05f91037b862398cea4e11a0445b691f  libgo/go/cmd/go/testdata/script/install_rebuild_removed.txt
+ 97eb2537f339a56bfaa9d5b7629bcf2b  libgo/go/cmd/go/testdata/script/install_relative_gobin_fail.txt
+ 9ce5fc4a1c775704245d8b6031b63ff8  libgo/go/cmd/go/testdata/script/install_shadow_gopath.txt
+ 77688053ddbf1ae03641c0a4ae3f50fc  libgo/go/cmd/go/testdata/script/issue36000.txt
+ c09d3add9d6dc6d6e4a3c12afbe12371  libgo/go/cmd/go/testdata/script/ldflag.txt
+ 683e393a1ea6dc31f309eb6997676e68  libgo/go/cmd/go/testdata/script/link_external_undef.txt
+ 2eacf0081245e2bf8e071bebbb652379  libgo/go/cmd/go/testdata/script/link_matching_actionid.txt
  e6b093721adee1372111b956dac686cb  libgo/go/cmd/go/testdata/script/link_syso_issue33139.txt
  90a4596801b06a2d3ee455320c19f7ab  libgo/go/cmd/go/testdata/script/linkname.txt
+ c4cadbf4ee42d42408e4d5c14dd3b4e1  libgo/go/cmd/go/testdata/script/list_all_gobuild.txt
  0834328bc91748984b7f75e318acd68d  libgo/go/cmd/go/testdata/script/list_ambiguous_path.txt
  2cc605344974113fca42e09bd13a1e75  libgo/go/cmd/go/testdata/script/list_bad_import.txt
+ e3c54a056bf9c821e96e984463eac9ae  libgo/go/cmd/go/testdata/script/list_case_collision.txt
+ 33e951201ba753f5b8aec4096062ddd6  libgo/go/cmd/go/testdata/script/list_cgo_compiled_importmap.txt
  51b259630d5666fffca1b2d6e4aa4034  libgo/go/cmd/go/testdata/script/list_compiled_imports.txt
  05836e9979f2398e923b55e0f2825705  libgo/go/cmd/go/testdata/script/list_constraints.txt
+ b94d5bc4aff3bc671063395b730a9d7c  libgo/go/cmd/go/testdata/script/list_dedup_packages.txt
+ af15e7f120391b85540c6f14bdd7acca  libgo/go/cmd/go/testdata/script/list_err_cycle.txt
+ 57837df0ebad8e23a236c33e3ab80041  libgo/go/cmd/go/testdata/script/list_err_stack.txt
  43fda832749b6c5a38fb32a60fe60027  libgo/go/cmd/go/testdata/script/list_find.txt
+ 0cc18832d02816f11ea798e73b160215  libgo/go/cmd/go/testdata/script/list_find_nodeps.txt
+ e7b4a14dc5d4375b19e82ec10e7ecccb  libgo/go/cmd/go/testdata/script/list_gofile_in_goroot.txt
+ fcd47d0dd4ed687f41cd576e6df4da4c  libgo/go/cmd/go/testdata/script/list_gomod_in_gopath.txt
  044798238a86bf4ee2f594533a9374e6  libgo/go/cmd/go/testdata/script/list_importmap.txt
+ 0fe6a4db41b90d50e50c1b5c5752e436  libgo/go/cmd/go/testdata/script/list_json_with_f.txt
  c284c8b8f14a239fd99ae9d953873d7a  libgo/go/cmd/go/testdata/script/list_linkshared.txt
+ eff08214ec1bdf406731050c63e885e3  libgo/go/cmd/go/testdata/script/list_load_err.txt
+ a63a4f44f94add1bdc9f72c64cbb8ef4  libgo/go/cmd/go/testdata/script/list_module_when_error.txt
+ 9d5745d5258c2346cdf982b3942b0dc9  libgo/go/cmd/go/testdata/script/list_overlay.txt
  2184074d4d6428c1f5ee01580c51c28d  libgo/go/cmd/go/testdata/script/list_parse_err.txt
+ b5a45e4321ad386ed052c84ce73a5b60  libgo/go/cmd/go/testdata/script/list_permissions.txt
+ ef6fa3a1dd04809abf27cbe5c09302e8  libgo/go/cmd/go/testdata/script/list_reserved.txt
+ 7b974955eb225a0f056e5e652ef3e8da  libgo/go/cmd/go/testdata/script/list_shadow.txt
  d7219915d3aa07f166b7b63b6bd8490e  libgo/go/cmd/go/testdata/script/list_split_main.txt
  384350db6aa926c83fa06818230179c1  libgo/go/cmd/go/testdata/script/list_std.txt
+ 2f49fcfceb13abf06735b8229ec11430  libgo/go/cmd/go/testdata/script/list_std_vendor.txt
+ 1c1b5ffb0d1e7ffce5fc6f7e17dece6d  libgo/go/cmd/go/testdata/script/list_swigcxx.txt
+ 71d713c664558d82a86e5307f70a0d3a  libgo/go/cmd/go/testdata/script/list_symlink.txt
+ a74216c72d477e08185844314289b18a  libgo/go/cmd/go/testdata/script/list_symlink_internal.txt
+ 3a6e224f42b467bd0ba584fdefe5318c  libgo/go/cmd/go/testdata/script/list_symlink_issue35941.txt
+ 2aba4ffd6786223fede7f3f9ccc5e3d2  libgo/go/cmd/go/testdata/script/list_symlink_vendor_issue14054.txt
+ 9eca5b3fda8da9f7b7558d51a6c14c44  libgo/go/cmd/go/testdata/script/list_symlink_vendor_issue15201.txt
  00b12c59098b1bc4d5420b57b510db64  libgo/go/cmd/go/testdata/script/list_test_e.txt
! c9dd9941517409c3e89abb836a4fa249  libgo/go/cmd/go/testdata/script/list_test_err.txt
  bd3eeb1a054a9730b52810a82d2c621c  libgo/go/cmd/go/testdata/script/list_test_imports.txt
  253161922db7bea8837d4dea71eb3dba  libgo/go/cmd/go/testdata/script/list_test_non_go_files.txt
+ 1cf865152fc06aa63f9eaf7c047ce074  libgo/go/cmd/go/testdata/script/list_test_simple.txt
+ 1f50959b0c3b4658f701491ef72ef7bb  libgo/go/cmd/go/testdata/script/list_wildcard_skip_nonmatching.txt
+ a2c2c3334c236a6119aef37fb7762d91  libgo/go/cmd/go/testdata/script/load_test_pkg_err.txt
+ af0121d5898f15160e4710b4dec4f592  libgo/go/cmd/go/testdata/script/mod_all.txt
  78e6605bc95be0bba803431655f7150e  libgo/go/cmd/go/testdata/script/mod_alt_goroot.txt
  2413ced002f0517ccf05bc04c29b540b  libgo/go/cmd/go/testdata/script/mod_ambiguous_import.txt
  38fb61151ae3aac698b41b167648d345  libgo/go/cmd/go/testdata/script/mod_auth.txt
! 49cc08ec9236ed718e1efac03aad2157  libgo/go/cmd/go/testdata/script/mod_bad_domain.txt
  e6c7df0184114c23d615e0bae09d61d3  libgo/go/cmd/go/testdata/script/mod_bad_filenames.txt
! 8e073e40cdbd361712434c11633ec4b6  libgo/go/cmd/go/testdata/script/mod_build_info_err.txt
  c17dd01a8ba9feacfa5d646e991aba49  libgo/go/cmd/go/testdata/script/mod_build_tags.txt
! 3b2dd6434da75aa279bb2f4b176c5cd2  libgo/go/cmd/go/testdata/script/mod_build_trimpath_issue48557.txt
! 77341c8c783a2b2cc8949398878f73f7  libgo/go/cmd/go/testdata/script/mod_build_versioned.txt
! 8b1942479502f8d50277acae9911f285  libgo/go/cmd/go/testdata/script/mod_cache_dir.txt
! 36702d9b19f15116352a21d32552cd0d  libgo/go/cmd/go/testdata/script/mod_cache_rw.txt
! 087550949994afdd64ad41b583f7e6b8  libgo/go/cmd/go/testdata/script/mod_case.txt
! 495e954dc9bf81452281dbfcf797a0ea  libgo/go/cmd/go/testdata/script/mod_case_cgo.txt
  9d19119d5296dac2e72fee88788b6789  libgo/go/cmd/go/testdata/script/mod_clean_cache.txt
! 9db717c40b746c10efd6a0718aaeef50  libgo/go/cmd/go/testdata/script/mod_concurrent.txt
! f29af5e36e1d3c1e9901ad4936242c73  libgo/go/cmd/go/testdata/script/mod_convert.txt
  041bdb0409111923060929fbfb95f1a0  libgo/go/cmd/go/testdata/script/mod_convert_dep.txt
  d8f609897ca8b4ddf3252575e4d47622  libgo/go/cmd/go/testdata/script/mod_convert_git.txt
  f5dbc96107be0223dfbe9ead75586749  libgo/go/cmd/go/testdata/script/mod_convert_glide.txt
  8ecb3cd01e3a6f85813f5c8ba359f483  libgo/go/cmd/go/testdata/script/mod_convert_glockfile.txt
  847c3b36df67dde72327ce7949871fbc  libgo/go/cmd/go/testdata/script/mod_convert_godeps.txt
  e47c685fdc6919e17802aff3351438d2  libgo/go/cmd/go/testdata/script/mod_convert_tsv.txt
! 11e9dc05c353595e2fcc5ae213036465  libgo/go/cmd/go/testdata/script/mod_convert_tsv_insecure.txt
  a1e3f4113d6a6446a628443a0a6de3fd  libgo/go/cmd/go/testdata/script/mod_convert_vendor_conf.txt
  c19ca0bf7e6db0e574216222f0ea0ec3  libgo/go/cmd/go/testdata/script/mod_convert_vendor_json.txt
  3ed3da0f4cfbdff693056d33095b1465  libgo/go/cmd/go/testdata/script/mod_convert_vendor_manifest.txt
  83c33773e92023bffddc313afb498528  libgo/go/cmd/go/testdata/script/mod_convert_vendor_yml.txt
+ 79b3cf3ab0bedf16bf4a8f4c2ad22045  libgo/go/cmd/go/testdata/script/mod_deprecate_message.txt
  508001f5d3ebd9d4a992adf95814d4c9  libgo/go/cmd/go/testdata/script/mod_dir.txt
  a250d88962db3d086cab21a55d25850d  libgo/go/cmd/go/testdata/script/mod_doc.txt
! 9c32a33d59df0f0e2328d6961533184b  libgo/go/cmd/go/testdata/script/mod_domain_root.txt
! b54bbe4c9da73953d731043d458ef0a6  libgo/go/cmd/go/testdata/script/mod_dot.txt
! 7a633fc3cfe5e83314b946eaac1bd5b2  libgo/go/cmd/go/testdata/script/mod_download.txt
! 74660e07c88fb3d8d7ed7828c1595e0f  libgo/go/cmd/go/testdata/script/mod_download_concurrent_read.txt
  1e863e536039ae3143e5963c3d3527a2  libgo/go/cmd/go/testdata/script/mod_download_hash.txt
+ 58da2e408986804852ecffd515a2ff02  libgo/go/cmd/go/testdata/script/mod_download_insecure_redirect.txt
  0efc15a8b38ccad118f21b0b84618ead  libgo/go/cmd/go/testdata/script/mod_download_json.txt
+ 762b11ed96ead0538bffb139d6fc87cd  libgo/go/cmd/go/testdata/script/mod_download_partial.txt
+ 079db14f259ed5c82ef7ecd25361de53  libgo/go/cmd/go/testdata/script/mod_download_private_vcs.txt
  433ae543b7a2c9d04cefcb2b0373d612  libgo/go/cmd/go/testdata/script/mod_download_replace_file.txt
! c5a0a90c60fe982d26504b31ef0a88db  libgo/go/cmd/go/testdata/script/mod_download_svn.txt
! fc0bd8759ca755249e35485b01d10bab  libgo/go/cmd/go/testdata/script/mod_download_too_many_redirects.txt
! 8f293038972e76089ec9ba9fd13548c1  libgo/go/cmd/go/testdata/script/mod_e.txt
! f3a4af581ccfde0b4d32f6c584ef8226  libgo/go/cmd/go/testdata/script/mod_edit.txt
! 0a7b2b6f1f26dd10c9b56f0ed5b89738  libgo/go/cmd/go/testdata/script/mod_edit_go.txt
! bfebdd8b8a0e92ad8bc88962eabe0f77  libgo/go/cmd/go/testdata/script/mod_edit_no_modcache.txt
! 89cd6f1f61de71a325656812af885d28  libgo/go/cmd/go/testdata/script/mod_empty_err.txt
  0892f45fc78cf34e618968cd96829f08  libgo/go/cmd/go/testdata/script/mod_enabled.txt
  f15d5cfa1ca9039927529eb601d587b3  libgo/go/cmd/go/testdata/script/mod_file_proxy.txt
  be4b9f9ca081bca06d256ce0a119fd9d  libgo/go/cmd/go/testdata/script/mod_find.txt
! 2cf727b8a763b79707aa73f0f49976b8  libgo/go/cmd/go/testdata/script/mod_fs_patterns.txt
! d59409d48e5b3abd195363cbeca68df4  libgo/go/cmd/go/testdata/script/mod_get_ambiguous_arg.txt
! 0663cb6d365a509905989f9456f63b69  libgo/go/cmd/go/testdata/script/mod_get_ambiguous_import.txt
! 8f0dae59ca03ef464563c036b4cb3b6e  libgo/go/cmd/go/testdata/script/mod_get_ambiguous_pkg.txt
! 9e2fdcc73a1c30d5b06e8f451b11f997  libgo/go/cmd/go/testdata/script/mod_get_changes.txt
! e33c67410c834f169574da9dcc4f7c77  libgo/go/cmd/go/testdata/script/mod_get_commit.txt
! 420f9459910f82aa1913ba622859cc0f  libgo/go/cmd/go/testdata/script/mod_get_deprecate_install.txt
! 1a0172f0c1d6dda0ce36f3d28e9acb0d  libgo/go/cmd/go/testdata/script/mod_get_deprecated.txt
! d70ea68fcbb40f479abbe5c8ec2d265a  libgo/go/cmd/go/testdata/script/mod_get_direct.txt
! 8c2cf0fd32cf61df056e4695e79930f6  libgo/go/cmd/go/testdata/script/mod_get_downadd_indirect.txt
! 46826e3508ed330ce5efbe7bc25e3c60  libgo/go/cmd/go/testdata/script/mod_get_downgrade.txt
! 4e61a5a5ee82cf9e4404ac86c7b1196c  libgo/go/cmd/go/testdata/script/mod_get_downgrade_missing.txt
! ff425c8339d1ad23266da3972b9194a7  libgo/go/cmd/go/testdata/script/mod_get_downup_artifact.txt
! 5a59299420870bfdf8d865bf47dd3bff  libgo/go/cmd/go/testdata/script/mod_get_downup_indirect.txt
! 6b38164c866be4127a4d6ea9ee21f1ce  libgo/go/cmd/go/testdata/script/mod_get_downup_pseudo_artifact.txt
! 960b647ace3dd9cde820b570675c207b  libgo/go/cmd/go/testdata/script/mod_get_errors.txt
! 18b937b6904505df009ae2c4291421db  libgo/go/cmd/go/testdata/script/mod_get_extra.txt
! b7d9ce199af77c160c3c03033a05bcdd  libgo/go/cmd/go/testdata/script/mod_get_fallback.txt
! 4689c7b5686948de3412ca8f32563556  libgo/go/cmd/go/testdata/script/mod_get_fossil.txt
! b7face22b5852f5b564d7b65273ee6e1  libgo/go/cmd/go/testdata/script/mod_get_go_file.txt
  bc3ef9345cf7b5cd5ee0da3e35ca635d  libgo/go/cmd/go/testdata/script/mod_get_hash.txt
! d73a1b958deb5741d1fc0399b12703e4  libgo/go/cmd/go/testdata/script/mod_get_incompatible.txt
! 18ab7aa177586269a30e413caeb83f6d  libgo/go/cmd/go/testdata/script/mod_get_indirect.txt
! 43ae00eeb0f274d52d9dfa21f1065cbf  libgo/go/cmd/go/testdata/script/mod_get_issue37438.txt
! b1c71a6fd45f992ec4ea80c28ac32ec6  libgo/go/cmd/go/testdata/script/mod_get_issue47979.txt
! 7f48449e579fb108e5dde2d9c38ccc68  libgo/go/cmd/go/testdata/script/mod_get_issue48511.txt
! 9b1889ad49a365a63d24d8d830d1ff11  libgo/go/cmd/go/testdata/script/mod_get_latest_pseudo.txt
! 3c8f55075e5d345394a7462a4f90d1ab  libgo/go/cmd/go/testdata/script/mod_get_lazy_indirect.txt
! 2fc26f1f714067a8114b01b58ce1771c  libgo/go/cmd/go/testdata/script/mod_get_lazy_upgrade_lazy.txt
! e6d7b15ad3630fb71198f67337d341af  libgo/go/cmd/go/testdata/script/mod_get_local.txt
! a66361c7af5bd218342d1fff9907a091  libgo/go/cmd/go/testdata/script/mod_get_main.txt
! 8555af205847866bdf2d8d953ada9f12  libgo/go/cmd/go/testdata/script/mod_get_major.txt
! f62717a1b054b672d0b9f797d107dc35  libgo/go/cmd/go/testdata/script/mod_get_missing_ziphash.txt
! 3aa8d0b462d5b3615c075e9b67f03fbc  libgo/go/cmd/go/testdata/script/mod_get_moved.txt
! fb1cd3c35c2e4ce3e7d2d418962d32be  libgo/go/cmd/go/testdata/script/mod_get_newcycle.txt
! 2ade002147c24bcc55c234e47ffacbd9  libgo/go/cmd/go/testdata/script/mod_get_none.txt
! b64ca5942a59a1c5baf7e5727ef422f1  libgo/go/cmd/go/testdata/script/mod_get_nopkgs.txt
! df2dd1b3fd92a49d4f5ac7faef8c29fa  libgo/go/cmd/go/testdata/script/mod_get_patch.txt
! bd12ff7b056e8fffb8c25e3b8b9752c7  libgo/go/cmd/go/testdata/script/mod_get_patchbound.txt
! 6dfa93d7101aa4c7cea23edd2471fa24  libgo/go/cmd/go/testdata/script/mod_get_patchcycle.txt
! 79c0a4ee9eeeb62f10b6d6f26ed95506  libgo/go/cmd/go/testdata/script/mod_get_patchmod.txt
! 7e67b7cec4e87f782f47e18755336433  libgo/go/cmd/go/testdata/script/mod_get_patterns.txt
! 3b4f0fc183ad9fe31992a857bdef9a1b  libgo/go/cmd/go/testdata/script/mod_get_pkgtags.txt
! 24b3f3a444f1e8ea3934d16f517c5953  libgo/go/cmd/go/testdata/script/mod_get_prefer_incompatible.txt
! e8878b728d1b074d8b5cd5d697ca9846  libgo/go/cmd/go/testdata/script/mod_get_promote_implicit.txt
! f677830ed2bf1192e26169b9de8d7dc6  libgo/go/cmd/go/testdata/script/mod_get_pseudo.txt
! 841233c35b0e4edceaa6e2c7f28f4370  libgo/go/cmd/go/testdata/script/mod_get_pseudo_other_branch.txt
! 149981e6a19511c740a3cd0521aeef93  libgo/go/cmd/go/testdata/script/mod_get_pseudo_prefix.txt
! d4f2081d2d983138231485299b027f92  libgo/go/cmd/go/testdata/script/mod_get_replaced.txt
! e1dc349df0283d1f92ee34429d35956d  libgo/go/cmd/go/testdata/script/mod_get_retract.txt
! a3a81275b88c98ba215954f0f20c0bfc  libgo/go/cmd/go/testdata/script/mod_get_retract_ambiguous.txt
! ac42c25cafefb0f7f39ff6e5302391db  libgo/go/cmd/go/testdata/script/mod_get_split.txt
! 2fb487c2c9a3f223f782a2c99d77f837  libgo/go/cmd/go/testdata/script/mod_get_sum_noroot.txt
! 3cde683cc58ded45d8285785c1f50409  libgo/go/cmd/go/testdata/script/mod_get_tags.txt
! 94ea0856e596604458a273b70fb9d77d  libgo/go/cmd/go/testdata/script/mod_get_test.txt
! d69f4e36a8846ec4e1687de8f3716a99  libgo/go/cmd/go/testdata/script/mod_get_trailing_slash.txt
! 3e5c250c4e5e7e7c407d6eba1b6ba8ad  libgo/go/cmd/go/testdata/script/mod_get_update_unrelated_sum.txt
! b9dd9f3deee218f57e7b43cb56de377c  libgo/go/cmd/go/testdata/script/mod_get_upgrade.txt
! fd1a7f32d78a7fda5824e4a962c64a1b  libgo/go/cmd/go/testdata/script/mod_get_upgrade_pseudo.txt
! 6762ef05ba0cd2012fc13a4ff1b6a0fd  libgo/go/cmd/go/testdata/script/mod_get_wild.txt
! 41c65e371da37e240c08c7b74e4d8f42  libgo/go/cmd/go/testdata/script/mod_getmode_vendor.txt
! a77458d865575155b87036445306dff3  libgo/go/cmd/go/testdata/script/mod_getx.txt
  e38adff826ea0f99306780ec353e2974  libgo/go/cmd/go/testdata/script/mod_git_export_subst.txt
  c92ed1315860137d16bc0aa90dd80b74  libgo/go/cmd/go/testdata/script/mod_go_version.txt
+ 6870f81d40b7001cc6f1b37f3b3c1892  libgo/go/cmd/go/testdata/script/mod_go_version_missing.txt
  294cd06aa8ed621f736d0fcdfca0a5f5  libgo/go/cmd/go/testdata/script/mod_go_version_mixed.txt
  617d4368b3a74fb76f772c9cd8b0a02d  libgo/go/cmd/go/testdata/script/mod_gobuild_import.txt
  eceaf7909e07bd765a20034948cadf4a  libgo/go/cmd/go/testdata/script/mod_gofmt_invalid.txt
! 1e4d3724d00cdada18f23dfd4513a096  libgo/go/cmd/go/testdata/script/mod_gomodcache.txt
! 35e41b83b83cb6b4b11174cb11393578  libgo/go/cmd/go/testdata/script/mod_gonoproxy.txt
! 92805045f654a2f7bf4acd6a3f499c66  libgo/go/cmd/go/testdata/script/mod_gopkg_unstable.txt
  9e184867708272e0782ac10f4f7d2620  libgo/go/cmd/go/testdata/script/mod_goroot_errors.txt
  f6db1b1e2b0ae05d978ec930a6eecefa  libgo/go/cmd/go/testdata/script/mod_graph.txt
+ b156c9fc6585dab9a18d0b908c1bc6fc  libgo/go/cmd/go/testdata/script/mod_graph_version.txt
  7e6b1289fcc17bd80686b261a27cf1ec  libgo/go/cmd/go/testdata/script/mod_help.txt
! f1d01cb2bdf1848b5c41ecd18cdb5acf  libgo/go/cmd/go/testdata/script/mod_import.txt
! 7042357ecbeaa7ba78c05c81797aa227  libgo/go/cmd/go/testdata/script/mod_import_cycle.txt
! cf05d05dad1b5df99c8f190a16baabef  libgo/go/cmd/go/testdata/script/mod_import_issue41113.txt
! caebf52f30e6cac0ae3e7cb4079322f3  libgo/go/cmd/go/testdata/script/mod_import_issue42891.txt
! 867788eb1c42a0594c4bc25202a3c137  libgo/go/cmd/go/testdata/script/mod_import_meta.txt
  afb8c959ade039700ac864136d2a9074  libgo/go/cmd/go/testdata/script/mod_import_mod.txt
! a396e0ef4a9023b5cdcc483ca7e6be66  libgo/go/cmd/go/testdata/script/mod_import_v1suffix.txt
! cb17647b41c7964739c978708206212a  libgo/go/cmd/go/testdata/script/mod_in_testdata_dir.txt
  baf2a27935bbe1a8952740aec88989e2  libgo/go/cmd/go/testdata/script/mod_indirect.txt
  7f482fc80919946f2f46be25a8ae094b  libgo/go/cmd/go/testdata/script/mod_indirect_main.txt
+ c0dbd52ffba235e3328402c1c23f20e5  libgo/go/cmd/go/testdata/script/mod_indirect_nospace.txt
  0981b2a4cb731b987d087b08fa021b15  libgo/go/cmd/go/testdata/script/mod_indirect_tidy.txt
! b806ee5b21d8422d73734d6f4872fb9f  libgo/go/cmd/go/testdata/script/mod_init_dep.txt
  2cff709ba2f617dac370072d6a3aeb57  libgo/go/cmd/go/testdata/script/mod_init_empty.txt
! bf73dc81c8cd633e2e8db1353f02bde3  libgo/go/cmd/go/testdata/script/mod_init_glide.txt
! bf489bc620134ba5897f9a48ff0a9bde  libgo/go/cmd/go/testdata/script/mod_init_invalid_major.txt
! 50f5f1107f353b5fcedcccf50a1619b5  libgo/go/cmd/go/testdata/script/mod_init_path.txt
! 2aa55f0a6df8ce8ad473fc0906718c1e  libgo/go/cmd/go/testdata/script/mod_init_tidy.txt
! 55706b0ca2e96aefad3b77f8e2c18480  libgo/go/cmd/go/testdata/script/mod_install_hint.txt
! e892b2a1f562457a249435293654b328  libgo/go/cmd/go/testdata/script/mod_install_pkg_version.txt
! b326209810c1a362e2c8b84856791c89  libgo/go/cmd/go/testdata/script/mod_install_versioned.txt
! dfd93904abb9dce6c6eb589a03b95ba9  libgo/go/cmd/go/testdata/script/mod_internal.txt
! 643ce5e9a15d2cce762eade9fae1b49a  libgo/go/cmd/go/testdata/script/mod_invalid_path.txt
! 2239399332d177612cffd7a399181087  libgo/go/cmd/go/testdata/script/mod_invalid_path_dotname.txt
! b1e42d3def66fb6e55424d395ee9591e  libgo/go/cmd/go/testdata/script/mod_invalid_path_plus.txt
! a1b5033406334d66b911c7aaf0b04a70  libgo/go/cmd/go/testdata/script/mod_invalid_version.txt
! bb339596975ffb3b73b8e975deda06f9  libgo/go/cmd/go/testdata/script/mod_issue35317.txt
! 57c1d815e6d5b34eeefc72e3e400d263  libgo/go/cmd/go/testdata/script/mod_lazy_consistency.txt
! 0947299c040e2f748922966decc99993  libgo/go/cmd/go/testdata/script/mod_lazy_downgrade.txt
! e1b07d734e40fbf536509b61cc76a8fd  libgo/go/cmd/go/testdata/script/mod_lazy_import_allmod.txt
! 72d3fb4d275b4e1427755a6d60e476a1  libgo/go/cmd/go/testdata/script/mod_lazy_new_import.txt
! e07796b7122db8a29539452cd46dd784  libgo/go/cmd/go/testdata/script/mod_lazy_test_horizon.txt
! c44200771cc083582cfbc71fecac3da7  libgo/go/cmd/go/testdata/script/mod_lazy_test_of_test_dep.txt
! a651545ebac407934b9c4cc1ee5d62d8  libgo/go/cmd/go/testdata/script/mod_list.txt
  e0daf8a063cf86ed57bca26f6ac7a2bf  libgo/go/cmd/go/testdata/script/mod_list_bad_import.txt
! c3d4d22af270af343f24756285bd3b45  libgo/go/cmd/go/testdata/script/mod_list_command_line_arguments.txt
! 81fd4cc4bba362188c28ce8372c806e9  libgo/go/cmd/go/testdata/script/mod_list_compiled_concurrent.txt
! 3c243076a73d3bb177f3026ceb86a3a7  libgo/go/cmd/go/testdata/script/mod_list_deprecated.txt
! cb2d68b4c1ce51a062a07b79fd7b1942  libgo/go/cmd/go/testdata/script/mod_list_deprecated_replace.txt
! 3e6b5189066fce9edac857b3d540ca42  libgo/go/cmd/go/testdata/script/mod_list_dir.txt
! 740e30ddbd186ea1fdc5ae784134bd83  libgo/go/cmd/go/testdata/script/mod_list_direct.txt
  69235ebb6ec00617be80cb85e55c47f9  libgo/go/cmd/go/testdata/script/mod_list_e_readonly.txt
  aa120ef3adff6641763aab216accd157  libgo/go/cmd/go/testdata/script/mod_list_pseudo.txt
! 5b962ec7b16d53e1cc8da4512b422843  libgo/go/cmd/go/testdata/script/mod_list_replace_dir.txt
! 11c4d301a0263d00cb257aea96731e49  libgo/go/cmd/go/testdata/script/mod_list_retract.txt
! 2630ad40679fbd7af05700dd056836dc  libgo/go/cmd/go/testdata/script/mod_list_std.txt
! f8a62260d521723aae61586c2570e003  libgo/go/cmd/go/testdata/script/mod_list_sums.txt
  5aec0f10d2895860e583f8721729aff1  libgo/go/cmd/go/testdata/script/mod_list_test.txt
+ 4bbcadbbfc4a2393d01e94e437dc0f43  libgo/go/cmd/go/testdata/script/mod_list_test_cycle.txt
+ 98d5310ffb10e0202fd68fb071e373fa  libgo/go/cmd/go/testdata/script/mod_list_update_nolatest.txt
  780c307f38fb1024d465900c06a3aabc  libgo/go/cmd/go/testdata/script/mod_list_upgrade.txt
! cb3a20529ba469bd4a45e336d020491a  libgo/go/cmd/go/testdata/script/mod_list_upgrade_pseudo.txt
! ad53a4a51ef0d774a136daa10726b873  libgo/go/cmd/go/testdata/script/mod_load_badchain.txt
  88fa780905366dc21c0c99e748d95c31  libgo/go/cmd/go/testdata/script/mod_load_badmod.txt
! d37450dffad9d7d28cdee2ac360c47b7  libgo/go/cmd/go/testdata/script/mod_load_badzip.txt
! a4e235c7fa4f36015cb9fa58194858ce  libgo/go/cmd/go/testdata/script/mod_load_replace_mismatch.txt
  d39036071e238f16dfac232bac06d24e  libgo/go/cmd/go/testdata/script/mod_local_replace.txt
! ca1f4ed2aa3bbbcc076aa60f444ae956  libgo/go/cmd/go/testdata/script/mod_missing_repo.txt
  ecc21f99203b132d2085186040d322ec  libgo/go/cmd/go/testdata/script/mod_missingpkg_prerelease.txt
  57aebbf7801966c6afa6651edaaae6e8  libgo/go/cmd/go/testdata/script/mod_modinfo.txt
! 3c87cba62353be49a7183ee3d5788662  libgo/go/cmd/go/testdata/script/mod_multirepo.txt
! 222a5b03f15b274804fd0f0b676f7859  libgo/go/cmd/go/testdata/script/mod_no_gopath.txt
  18ae63aa8db51ebcd4cc1d711083a974  libgo/go/cmd/go/testdata/script/mod_nomod.txt
+ 83298a33d2e3aeae6c9cda9bd35ecb53  libgo/go/cmd/go/testdata/script/mod_notall.txt
  6c8ececfa4063012a294acd9fb4f582a  libgo/go/cmd/go/testdata/script/mod_off.txt
  bfc1507f6da3adf0a82860c1b61bcf13  libgo/go/cmd/go/testdata/script/mod_off_init.txt
! fecdc31208aee30ed1e3bf45f6878726  libgo/go/cmd/go/testdata/script/mod_outside.txt
! 06b10ffcc3d5a04dec0f0341f25dfb27  libgo/go/cmd/go/testdata/script/mod_overlay.txt
  ae64b93722edefc2cb0e3c951b716d3e  libgo/go/cmd/go/testdata/script/mod_patterns.txt
  0f9cc6a73efc31e5d1073c9ede929e8c  libgo/go/cmd/go/testdata/script/mod_patterns_vendor.txt
! 63849dfe0886647abe9dbcf1574ec821  libgo/go/cmd/go/testdata/script/mod_permissions.txt
! 6b5a5be2443f659b2a5e5ab2ef00567e  libgo/go/cmd/go/testdata/script/mod_prefer_compatible.txt
  8af488fc1b8f67369be0f4828a2792b8  libgo/go/cmd/go/testdata/script/mod_proxy_errors.txt
! e2297e26daeb880ce5421d731499d837  libgo/go/cmd/go/testdata/script/mod_proxy_https.txt
! ebf0656c94ef8b5702dbc19b6bab280d  libgo/go/cmd/go/testdata/script/mod_proxy_invalid.txt
! 1f273c2d14bdb712d16aabc73f8ad263  libgo/go/cmd/go/testdata/script/mod_proxy_list.txt
  174511b8862c2fd5623d219931425f32  libgo/go/cmd/go/testdata/script/mod_pseudo_cache.txt
! 04d3b82008b0335e02a9ef6ec9c06948  libgo/go/cmd/go/testdata/script/mod_query.txt
! a08d4ee58e9574ec428884f5dd30266c  libgo/go/cmd/go/testdata/script/mod_query_empty.txt
! 40e9453eeb0de962e7ed956b287a4f43  libgo/go/cmd/go/testdata/script/mod_query_exclude.txt
! 888191e675381bda850e82ed58ddc748  libgo/go/cmd/go/testdata/script/mod_query_main.txt
! 4d67598317419b792e28fa2240dd24ac  libgo/go/cmd/go/testdata/script/mod_readonly.txt
! a4a980e6c9ce494e36877c35cdfe33d7  libgo/go/cmd/go/testdata/script/mod_replace.txt
  1bcab23d2a6e8003bbc6120a51feaba3  libgo/go/cmd/go/testdata/script/mod_replace_gopkgin.txt
! 75167cd6a35994124a0e4f1cb24f02e4  libgo/go/cmd/go/testdata/script/mod_replace_import.txt
! 8b47e4e9e653017065282fc6a5de2ea3  libgo/go/cmd/go/testdata/script/mod_replace_readonly.txt
! 967dff81f0cd500aa3d4cb5308d905cb  libgo/go/cmd/go/testdata/script/mod_require_exclude.txt
! 9b9180869045578625dc3ff0aebe45e0  libgo/go/cmd/go/testdata/script/mod_retention.txt
! 01c653c1f1d50246a502ed94a220d8a4  libgo/go/cmd/go/testdata/script/mod_retract.txt
! d33d5220cb14b3866baa6a0733c1c517  libgo/go/cmd/go/testdata/script/mod_retract_fix_version.txt
! 5a72cfde6847160ef1869b7f523fc695  libgo/go/cmd/go/testdata/script/mod_retract_incompatible.txt
! fe1d2f0482bbfb6760d07b47a02b4e40  libgo/go/cmd/go/testdata/script/mod_retract_pseudo_base.txt
! 037b536db52c0593f1e733d947944615  libgo/go/cmd/go/testdata/script/mod_retract_rationale.txt
! bc296cae2d932d44c60d333731539a7c  libgo/go/cmd/go/testdata/script/mod_retract_rename.txt
! 9c36f2684498b83c3743fbbcfbb14267  libgo/go/cmd/go/testdata/script/mod_retract_replace.txt
! de041648822f43e6329e1c30a3620a6e  libgo/go/cmd/go/testdata/script/mod_retract_versions.txt
! 385cfd3661d04b715a96e96b8722d145  libgo/go/cmd/go/testdata/script/mod_run_nonmain.txt
  c9526637edf8d37e0851063b805a2f0c  libgo/go/cmd/go/testdata/script/mod_run_path.txt
! 7cc48eb753548beabbcb00580bdf6af9  libgo/go/cmd/go/testdata/script/mod_run_pkg_version.txt
! 2de8ae7ac0c66fc89e1391a5fd1c3392  libgo/go/cmd/go/testdata/script/mod_run_pkgerror.txt
! cdf8a639df35d73887537659a5125b3d  libgo/go/cmd/go/testdata/script/mod_skip_write.txt
! 702930e88c718748ed5671ef46f872e8  libgo/go/cmd/go/testdata/script/mod_std_vendor.txt
  0b50524b8d7739ab3704e68d24d79e81  libgo/go/cmd/go/testdata/script/mod_string_alias.txt
! 8ba32b87465128eee1b558a7700b0140  libgo/go/cmd/go/testdata/script/mod_sum_ambiguous.txt
! 2ec8349deee917a788943f70929585be  libgo/go/cmd/go/testdata/script/mod_sum_lookup.txt
! 0106b03884248b998044fc81a5f43828  libgo/go/cmd/go/testdata/script/mod_sum_readonly.txt
! 6725e9cccbec52f3430b377178ee65cb  libgo/go/cmd/go/testdata/script/mod_sum_replaced.txt
! e32d4d34d501a3addc6014b12fa09502  libgo/go/cmd/go/testdata/script/mod_sumdb.txt
! 4604b883a6099d12005fa1a1a388d703  libgo/go/cmd/go/testdata/script/mod_sumdb_cache.txt
! 1782f5c8871b47968a1123bf949a2538  libgo/go/cmd/go/testdata/script/mod_sumdb_file_path.txt
! c86c74e8c97f71255eb701ee383aa742  libgo/go/cmd/go/testdata/script/mod_sumdb_golang.txt
! 7e9cedff73ff01965d1c83cee30f148b  libgo/go/cmd/go/testdata/script/mod_sumdb_proxy.txt
! 07c7feeb692deba7cb648dbec28af15d  libgo/go/cmd/go/testdata/script/mod_symlink.txt
! 94d1ad49c6c7f7f1bc3fef90becbecde  libgo/go/cmd/go/testdata/script/mod_symlink_dotgo.txt
! b62058a0ebe88a740b30fe5611e0d663  libgo/go/cmd/go/testdata/script/mod_tagged_import_cycle.txt
! 7e8020d58a69ee24eee69c9084341cda  libgo/go/cmd/go/testdata/script/mod_test.txt
  2820259b7d04da0270b2de52db31dc8f  libgo/go/cmd/go/testdata/script/mod_test_cached.txt
  85e210f2a362f270d46eb0d9a83bc9c9  libgo/go/cmd/go/testdata/script/mod_test_files.txt
  8b538329d6589f696e84ebeed445dd2e  libgo/go/cmd/go/testdata/script/mod_tidy.txt
+ 6b13d48f6201ecff36980a7f3af85972  libgo/go/cmd/go/testdata/script/mod_tidy_compat.txt
+ 823d739d22497b52f526ce59ea3df51d  libgo/go/cmd/go/testdata/script/mod_tidy_compat_added.txt
+ 6bfe8ae22ed09d0feeaafc4f1cb82e10  libgo/go/cmd/go/testdata/script/mod_tidy_compat_ambiguous.txt
+ 37aeb68f0b2e9f19a9428e42612d21f0  libgo/go/cmd/go/testdata/script/mod_tidy_compat_deleted.txt
+ d37e67e9faa2fc7be56f172090e1518c  libgo/go/cmd/go/testdata/script/mod_tidy_compat_implicit.txt
+ 13bd31489892fe8e1e1f18bc16cde37c  libgo/go/cmd/go/testdata/script/mod_tidy_compat_incompatible.txt
+ 4ce7a9d0439bf9af05b2c73ced313f16  libgo/go/cmd/go/testdata/script/mod_tidy_compat_irrelevant.txt
+ e0f2fa69c8c8cd0903c41d5bb043c397  libgo/go/cmd/go/testdata/script/mod_tidy_convergence.txt
+ ca306b48e8629e2abd02ed654b13fe3e  libgo/go/cmd/go/testdata/script/mod_tidy_convergence_loop.txt
  04e23a82a94d8f0e60b7b75ec98f4e58  libgo/go/cmd/go/testdata/script/mod_tidy_cycle.txt
! f310ef2e01675a44f82ec6ec64d83e9a  libgo/go/cmd/go/testdata/script/mod_tidy_downgrade_ambiguous.txt
! ac5fac28af5c791465bcab2c62a42317  libgo/go/cmd/go/testdata/script/mod_tidy_error.txt
! 0b15dd3b2e69a1cbf39f648c93b5dba9  libgo/go/cmd/go/testdata/script/mod_tidy_indirect.txt
! d034975a0c0de06cc0214e091ebf1f86  libgo/go/cmd/go/testdata/script/mod_tidy_lazy_self.txt
! bcbd8f7213faef466958df3c319271de  libgo/go/cmd/go/testdata/script/mod_tidy_newroot.txt
! 08e82cac56df3e5d6839673e5dbb0415  libgo/go/cmd/go/testdata/script/mod_tidy_old.txt
! aeeb6c33ac837d0b34f2523f4aaa0e07  libgo/go/cmd/go/testdata/script/mod_tidy_oldgo.txt
  1a78eae097a7102b1f2676e127956161  libgo/go/cmd/go/testdata/script/mod_tidy_quote.txt
! 493c5b3dd43a6a5fd87aa3663dee4f14  libgo/go/cmd/go/testdata/script/mod_tidy_replace.txt
! 442a00026df528f421b73b56bb898e83  libgo/go/cmd/go/testdata/script/mod_tidy_replace_old.txt
! d300399d85e51712e3ec5bdb57886e31  libgo/go/cmd/go/testdata/script/mod_tidy_sum.txt
! 0bb89a5f0f84663dcf7f9e138e39688e  libgo/go/cmd/go/testdata/script/mod_tidy_symlink_issue35941.txt
! 9c00b39c112b6dc5b5cc41b09c1ac286  libgo/go/cmd/go/testdata/script/mod_tidy_too_new.txt
! f6c2206a25d623e2409e6c57f1bc147b  libgo/go/cmd/go/testdata/script/mod_tidy_version.txt
! 0e5ff70b9d588204fd00468c6e1c8794  libgo/go/cmd/go/testdata/script/mod_update_sum_readonly.txt
! 2c803494b1b89b8f628cb509bfb66f31  libgo/go/cmd/go/testdata/script/mod_upgrade_patch.txt
! 34b7c58e73ce243766f63e26c5595d3d  libgo/go/cmd/go/testdata/script/mod_vcs_missing.txt
! c67f60c6dd008a894a30e24da58d0420  libgo/go/cmd/go/testdata/script/mod_vendor.txt
! 172a7ba2ebb5e14453f3b9338363f579  libgo/go/cmd/go/testdata/script/mod_vendor_auto.txt
! 1208d3b6400ac3275afddd199e8ef841  libgo/go/cmd/go/testdata/script/mod_vendor_build.txt
! 8c0d71eaf1d17def69cbbab90bc25eb2  libgo/go/cmd/go/testdata/script/mod_vendor_embed.txt
! 3eb086c273e5bf0ff04546bfd6933a57  libgo/go/cmd/go/testdata/script/mod_vendor_gomod.txt
! 8ad0026b6d6bfa9ddfbd084b019895ac  libgo/go/cmd/go/testdata/script/mod_vendor_goversion.txt
! 666c650a9867d7bdcc4389ae78a6931e  libgo/go/cmd/go/testdata/script/mod_vendor_issue46867.txt
  23852d4734fd6c23f2f05967dd962dd3  libgo/go/cmd/go/testdata/script/mod_vendor_nodeps.txt
! f747c7a586881567a7d16a8da3ab320c  libgo/go/cmd/go/testdata/script/mod_vendor_redundant_requirement.txt
! ae6ff45f8cdc36a0a3b3e28bf580bf9a  libgo/go/cmd/go/testdata/script/mod_vendor_replace.txt
! cdc38dd8e7991566c20a54b7116ab0f7  libgo/go/cmd/go/testdata/script/mod_vendor_trimpath.txt
  2592cb437cf8f8767dfa2d3eaea407c2  libgo/go/cmd/go/testdata/script/mod_vendor_unused.txt
! 16677cf4148cf97a9299e8d1139b550c  libgo/go/cmd/go/testdata/script/mod_vendor_unused_only.txt
! 648912660f2f2c7d8b78b7f79145cc6d  libgo/go/cmd/go/testdata/script/mod_verify.txt
  7234d122c0ba93349f1663ba0405dcd5  libgo/go/cmd/go/testdata/script/mod_versions.txt
  012656139b764651afff32e52f9d2d42  libgo/go/cmd/go/testdata/script/mod_why.txt
! 3d07a09ca1ab0419874218933162fd4d  libgo/go/cmd/go/testdata/script/modfile_flag.txt
  22b3afa4e8f6eaf54f5231d711fea20d  libgo/go/cmd/go/testdata/script/noncanonical_import.txt
  dbb471f2dc212527ac6c24c3ed7ad312  libgo/go/cmd/go/testdata/script/pattern_syntax_error.txt
  dfb62925a95c0c6ca1f959ae9bc06fff  libgo/go/cmd/go/testdata/script/prevent_sys_unix_import.txt
+ a7fb037620fa000c91c2f30eb35fc048  libgo/go/cmd/go/testdata/script/run_dirs.txt
  88e2929626e2d14449c7ccc8fc81cd60  libgo/go/cmd/go/testdata/script/run_hello.txt
+ 53c30a2126c7a0210cb9dd00e50ffa93  libgo/go/cmd/go/testdata/script/run_hello_pkg.txt
+ 1ea93ae8a0bac047cbb43c13be8025f8  libgo/go/cmd/go/testdata/script/run_internal.txt
+ d6e6c5ca20a40d5c51bbf6302c42e52d  libgo/go/cmd/go/testdata/script/run_issue11709.txt
+ 17408919a4eedc6ce699ef26919a0b74  libgo/go/cmd/go/testdata/script/run_issue51125.txt
  059e5010c132e3d1eba4aec4af80f299  libgo/go/cmd/go/testdata/script/run_set_executable_name.txt
! f231d45025d42da86c9f83336c8761a5  libgo/go/cmd/go/testdata/script/run_vendor.txt
! c040a9c4ba81605a8034ba7cc0bd4e7d  libgo/go/cmd/go/testdata/script/run_wildcard.txt
! 7369399a4f3e469de8aed9f34a2e3e5c  libgo/go/cmd/go/testdata/script/run_work_versioned.txt
  b330e0f4d27a4eabaaf1c63f3056836c  libgo/go/cmd/go/testdata/script/script_wait.txt
  e595107a5dba27387b8e0c78d3ea3b1a  libgo/go/cmd/go/testdata/script/std_vendor.txt
  87aae535e8dd4267abb2f4d2e219243c  libgo/go/cmd/go/testdata/script/test_bad_example.txt
  4d34f58e4625e33df4a412380d4718c0  libgo/go/cmd/go/testdata/script/test_badtest.txt
! 7559697463a88933a07d183f5b8482e1  libgo/go/cmd/go/testdata/script/test_benchmark_1x.txt
! 707a4a7ffaf1f2fe2abd85bc5095c782  libgo/go/cmd/go/testdata/script/test_benchmark_chatty_fail.txt
! 4468f32165c0bf7fae54d1a5685f2102  libgo/go/cmd/go/testdata/script/test_benchmark_chatty_success.txt
! c0b6d3dbd5b742dbe1611e1279cf3a6e  libgo/go/cmd/go/testdata/script/test_benchmark_fatal.txt
! 5a73a58d54fd2c77520b6ce7a067db83  libgo/go/cmd/go/testdata/script/test_benchmark_labels.txt
! 173313bcca024cf97cb03921f1f8a0f1  libgo/go/cmd/go/testdata/script/test_benchmark_timeout.txt
! 451499e84a83d536db8cef77c96aecbb  libgo/go/cmd/go/testdata/script/test_build_failure.txt
! fb72104098b80ad339865868e04ac754  libgo/go/cmd/go/testdata/script/test_cache_inputs.txt
! 392a3a3c0509a591b7ffba833b89d7f5  libgo/go/cmd/go/testdata/script/test_chatty_fail.txt
! 313f998d71b185413121380632352c91  libgo/go/cmd/go/testdata/script/test_chatty_parallel_fail.txt
! 101f92fefde6b7eccb800fa238e247a7  libgo/go/cmd/go/testdata/script/test_chatty_parallel_success.txt
! 1ee0265a026ec74cacadc68617e606c1  libgo/go/cmd/go/testdata/script/test_chatty_parallel_success_sleepy.txt
! 1c26115adc133754eefdadf5f23fff91  libgo/go/cmd/go/testdata/script/test_chatty_success.txt
! a39dd8e86b4e2a483c8996cdf4b057ed  libgo/go/cmd/go/testdata/script/test_cleanup_failnow.txt
  b222151f2a921994a7f55ed249f24f7e  libgo/go/cmd/go/testdata/script/test_compile_binary.txt
  2197dda02b07ad8965ba97055aacdb8c  libgo/go/cmd/go/testdata/script/test_compile_tempfile.txt
+ e6ef3bad53bd6e3563f7f9ef130aeff7  libgo/go/cmd/go/testdata/script/test_deadline.txt
+ cd6f3303a2b2c583552d4c388779b36a  libgo/go/cmd/go/testdata/script/test_empty.txt
+ bf507902a3df3a293fe4c8a6e391f4f0  libgo/go/cmd/go/testdata/script/test_env_term.txt
+ 2dfa91ceea9868043184bde35ac32836  libgo/go/cmd/go/testdata/script/test_example_goexit.txt
+ 7d4f278ffad1394997a4fda7e7df3114  libgo/go/cmd/go/testdata/script/test_exit.txt
+ e35703537a25b3a9212af56a2167accd  libgo/go/cmd/go/testdata/script/test_fail_fast.txt
+ fce942b557f69751db5194e81b8bc224  libgo/go/cmd/go/testdata/script/test_fail_newline.txt
+ 09c77683fada64f7d8e7b198ff6b3b6d  libgo/go/cmd/go/testdata/script/test_finished_subtest_goroutines.txt
+ 4ffa420d716422663ba3c0e4939cc6b5  libgo/go/cmd/go/testdata/script/test_flag.txt
  8809a4c467d3fc10104111656ac58b03  libgo/go/cmd/go/testdata/script/test_flags.txt
+ 417d853dcc59d81f35b7f018e9aafff1  libgo/go/cmd/go/testdata/script/test_fuzz.txt
+ de4a4e121f5bf7efb3793250a6dd8278  libgo/go/cmd/go/testdata/script/test_fuzz_cache.txt
+ 4beab1569b527d8bd927670d7f92bb36  libgo/go/cmd/go/testdata/script/test_fuzz_chatty.txt
+ 19136b8d2823c3da9657a468a907a7d1  libgo/go/cmd/go/testdata/script/test_fuzz_cleanup.txt
+ 6ea073de7f8b107f88dd3c0bd78c586f  libgo/go/cmd/go/testdata/script/test_fuzz_cov.txt
+ e927934238d27742d627de4f2b8ebac2  libgo/go/cmd/go/testdata/script/test_fuzz_deadline.txt
+ 4fdf0f5a4742036e13364ee3e5325098  libgo/go/cmd/go/testdata/script/test_fuzz_dup_cache.txt
+ c455bf2b30573395a2b0c0fdc5b39f53  libgo/go/cmd/go/testdata/script/test_fuzz_fuzztime.txt
+ 7b7cb6078ded767a0c6e65295eeca0d7  libgo/go/cmd/go/testdata/script/test_fuzz_io_error.txt
+ 75287c0ef43a191031c4013fc4f5ce23  libgo/go/cmd/go/testdata/script/test_fuzz_match.txt
+ 045de7ef88afbde47da51b4d004fb080  libgo/go/cmd/go/testdata/script/test_fuzz_minimize.txt
+ 0151a88342df98127e1960265fc96736  libgo/go/cmd/go/testdata/script/test_fuzz_minimize_dirty_cov.txt
+ 127c5dfcc22f53e0a9ba2470927d2219  libgo/go/cmd/go/testdata/script/test_fuzz_minimize_interesting.txt
+ 208c6057fe8c9bdc8fc0efe1f384bae3  libgo/go/cmd/go/testdata/script/test_fuzz_modcache.txt
+ c7f1fa692a8fb76813032dbb4058f263  libgo/go/cmd/go/testdata/script/test_fuzz_multiple.txt
+ 513c6f77a3100c5648a94421b094b214  libgo/go/cmd/go/testdata/script/test_fuzz_mutate_crash.txt
+ ea9ae9ba4c2f96535c872f7ec2c46a40  libgo/go/cmd/go/testdata/script/test_fuzz_mutate_fail.txt
+ e6a45a3f2d6403f6ca624ab1ebd35368  libgo/go/cmd/go/testdata/script/test_fuzz_mutator.txt
+ 41794f5d6bbe6bca9a96d07905bbca2e  libgo/go/cmd/go/testdata/script/test_fuzz_mutator_repeat.txt
+ 3c189cef9aaa000916fbdd725d3fc529  libgo/go/cmd/go/testdata/script/test_fuzz_non_crash_signal.txt
+ c21d8ceaa215fecfb855d21b9d2473bc  libgo/go/cmd/go/testdata/script/test_fuzz_parallel.txt
+ 058794564cfd89e21385dfcd291ca1a1  libgo/go/cmd/go/testdata/script/test_fuzz_profile_flags.txt
+ ab805d015402445c3c99183f95f7288c  libgo/go/cmd/go/testdata/script/test_fuzz_return.txt
+ 7585bced32ead548ba88dd964cb313f3  libgo/go/cmd/go/testdata/script/test_fuzz_run.txt
+ e2084a595d42e0734604dd4396234f26  libgo/go/cmd/go/testdata/script/test_fuzz_seed_corpus.txt
+ ba52e405f1935d608014be4ccd771cd5  libgo/go/cmd/go/testdata/script/test_fuzz_setenv.txt
+ 953648eb7e4a47ec756a02a334e612d4  libgo/go/cmd/go/testdata/script/test_fuzz_test_race.txt
+ 1c5ea5cf818b7e2b2ee18fa1831aab24  libgo/go/cmd/go/testdata/script/test_fuzz_unsupported.txt
  efe26eeb268f6df41604dd3cd3f45c2e  libgo/go/cmd/go/testdata/script/test_generated_main.txt
  1d0f827f0f0701185cfa7514a9f4d574  libgo/go/cmd/go/testdata/script/test_go111module_cache.txt
+ d3dfa9d3397b18cc3ef667337628b3c3  libgo/go/cmd/go/testdata/script/test_import_error_stack.txt
+ 6c4a9a5650241dcfa29f1497fc7ed8cb  libgo/go/cmd/go/testdata/script/test_issue45477.txt
+ 2e57ef3e7b8daf2f2f820472e1388746  libgo/go/cmd/go/testdata/script/test_json.txt
+ 213ca8f96d47e67c5810342caba5df4d  libgo/go/cmd/go/testdata/script/test_json_exit.txt
+ 7eb40a7415b9b93c7d7c10cc0d99c906  libgo/go/cmd/go/testdata/script/test_json_interleaved.txt
+ c8395706c0984f4be2da5389aec1d0c2  libgo/go/cmd/go/testdata/script/test_json_panic_exit.txt
+ fedd5f5557b4de63a772409b64991c6a  libgo/go/cmd/go/testdata/script/test_main.txt
  00a1784b9585d68b78c3c32e86152b37  libgo/go/cmd/go/testdata/script/test_main_archive.txt
+ ba85dd66f6b53f7762bc977626378dae  libgo/go/cmd/go/testdata/script/test_main_panic.txt
+ bd846488b1dd62737a0541e255bf55cb  libgo/go/cmd/go/testdata/script/test_main_twice.txt
+ aca2684296cbfb0bbaa8a19fff9d9bc3  libgo/go/cmd/go/testdata/script/test_match_benchmark_labels.txt
+ 3ae119007c99b7d8b8c67d2c5d81fdae  libgo/go/cmd/go/testdata/script/test_match_no_benchmarks.txt
+ a7beeaedd53db74a35351db8e2adce15  libgo/go/cmd/go/testdata/script/test_match_no_subtests.txt
+ 063e26953c33a7c3f69edd2ec473b861  libgo/go/cmd/go/testdata/script/test_match_no_subtests_failure.txt
+ bd91dfd9bdc66a910ab0e0fbe8ef6f45  libgo/go/cmd/go/testdata/script/test_match_no_subtests_parallel.txt
+ 4abe982728c70bd82244988df95d4cb6  libgo/go/cmd/go/testdata/script/test_match_no_tests.txt
+ b4d6c5c257c9faa89002412f88c7e641  libgo/go/cmd/go/testdata/script/test_match_no_tests_build_failure.txt
+ 79cef940907ac58cf161c820219be027  libgo/go/cmd/go/testdata/script/test_match_no_tests_with_subtests.txt
+ cb4da093eafd09165a5bc331fa2d2a7d  libgo/go/cmd/go/testdata/script/test_match_only_benchmarks.txt
+ f1f910f9ceca1603da5d1af1b44a0ff8  libgo/go/cmd/go/testdata/script/test_match_only_example.txt
+ 25a89826a59e091b5325f5e354d7281d  libgo/go/cmd/go/testdata/script/test_match_only_subtests.txt
+ 8b0626041c2c51d1550094b17e68acad  libgo/go/cmd/go/testdata/script/test_match_only_subtests_parallel.txt
+ fffe79aa1bf6b4631560c650fe9f5c73  libgo/go/cmd/go/testdata/script/test_match_only_tests.txt
+ c130ee679f404a2cff25b0277e29645e  libgo/go/cmd/go/testdata/script/test_minus_n.txt
+ f3d0a2797548df8966f84a0f4519b504  libgo/go/cmd/go/testdata/script/test_no_run_example.txt
+ 351ca72212ea5de0dd6dea1d960aa447  libgo/go/cmd/go/testdata/script/test_no_tests.txt
+ d505f829d0c4a33778d8e7a57d222cd9  libgo/go/cmd/go/testdata/script/test_overlay.txt
+ 87ceb38295c80ab0216a565b23e42087  libgo/go/cmd/go/testdata/script/test_parallel_number.txt
+ cfa11d04327bfcc9250b3c5d97fd63cc  libgo/go/cmd/go/testdata/script/test_profile.txt
+ 39cda98ce70552ce33d4802d2b72e7b2  libgo/go/cmd/go/testdata/script/test_race.txt
+ 5bbc30ddbfb6942d2b98fd4644cff011  libgo/go/cmd/go/testdata/script/test_race_cover_mode_issue20435.txt
+ a48b67d77b0a67185e1ef0c7641fdd46  libgo/go/cmd/go/testdata/script/test_race_install.txt
+ 310d2d15737083249b866a76ed3aecde  libgo/go/cmd/go/testdata/script/test_race_install_cgo.txt
  7746ca69adbc076e6481624dc8baf98f  libgo/go/cmd/go/testdata/script/test_rebuildall.txt
+ f30bdd3038738be3245bc4c945562514  libgo/go/cmd/go/testdata/script/test_regexps.txt
+ a5e701c193acda1323f10661c8c2b3fb  libgo/go/cmd/go/testdata/script/test_relative_cmdline.txt
+ 379ea455f8091b21987c712931d850e9  libgo/go/cmd/go/testdata/script/test_relative_import.txt
+ e7ba0794ea1c16dd60d2169f060feb58  libgo/go/cmd/go/testdata/script/test_relative_import_dash_i.txt
+ 5b9965d5c3257887c22a568f90abeb50  libgo/go/cmd/go/testdata/script/test_script_cmdcd.txt
+ 32fe6e118db367c33c809c37695cf298  libgo/go/cmd/go/testdata/script/test_shuffle.txt
+ 8d3946a34353ba2d721fd9275e593845  libgo/go/cmd/go/testdata/script/test_source_order.txt
  e0de8dc5161a3b6ade1429efdd6ac760  libgo/go/cmd/go/testdata/script/test_status.txt
+ 193adf8feef953f1db46d3b310efd094  libgo/go/cmd/go/testdata/script/test_syntax_error_says_fail.txt
  5a59156cc1f673ae921d634f66c71140  libgo/go/cmd/go/testdata/script/test_timeout.txt
+ e3d8e7b921a418c20c1c63822b3237bb  libgo/go/cmd/go/testdata/script/test_trimpath.txt
+ 44d6c2cf6b47d61d0082914f53e469fa  libgo/go/cmd/go/testdata/script/test_trimpath_main.txt
+ f82efaaa47dbef9edb347aa0c804ce48  libgo/go/cmd/go/testdata/script/test_trimpath_test_suffix.txt
+ 1800e84caafed85cc3e9a9d33f1325af  libgo/go/cmd/go/testdata/script/test_vendor.txt
+ d065d171c59ec343604baf6adbe91a44  libgo/go/cmd/go/testdata/script/test_vet.txt
+ 657fd4267f2427153650bfd34fe3ad86  libgo/go/cmd/go/testdata/script/test_write_profiles_on_timeout.txt
+ 9be828ec4c98fdb9328c3adec4a47bd6  libgo/go/cmd/go/testdata/script/test_xtestonly_works.txt
+ 9af913f5f4f148142bf6b9a80958c808  libgo/go/cmd/go/testdata/script/testing_issue40908.txt
+ dd89fe2eba5c797acc6408d0a218469f  libgo/go/cmd/go/testdata/script/toolexec.txt
  73e1f866c6b9c55238cc92e3f645e6b0  libgo/go/cmd/go/testdata/script/vendor_complex.txt
! f3c006dadaa074c789bd9a734c39e822  libgo/go/cmd/go/testdata/script/vendor_gopath_issue11409.txt
! 51ec73f22013d6ab84a615fb096c064b  libgo/go/cmd/go/testdata/script/vendor_import.txt
! 8a2b0da6e800823a0b15903aa106c045  libgo/go/cmd/go/testdata/script/vendor_import_missing.txt
! d18ff4d74918a655ef2b99d4e5d0345d  libgo/go/cmd/go/testdata/script/vendor_import_wrong.txt
! b807cdd84faa509953c8494ee237939c  libgo/go/cmd/go/testdata/script/vendor_issue12156.txt
! 5d65342b20c29a57dc1af22d703f97dd  libgo/go/cmd/go/testdata/script/vendor_list_issue11977.txt
! 0d475bb58d04d91376f428be82aa6dda  libgo/go/cmd/go/testdata/script/vendor_resolve.txt
! ea33505cd39108f66ec3eff7b318039f  libgo/go/cmd/go/testdata/script/vendor_test_issue11864.txt
! 9079a026a47a67b6f5c20ad2a33e71f0  libgo/go/cmd/go/testdata/script/vendor_test_issue14613.txt
! f7d5d4714a4d3fee722d8a8048a03bd2  libgo/go/cmd/go/testdata/script/version.txt
! d028b65a8a811bbb1aee18bfd0902706  libgo/go/cmd/go/testdata/script/version_build_settings.txt
! b21c55c8b8048fd89e7e59c3be0b2dd1  libgo/go/cmd/go/testdata/script/version_buildvcs_bzr.txt
! 52540f601caf6478dd7b8076c8881524  libgo/go/cmd/go/testdata/script/version_buildvcs_fossil.txt
! c598f0462a80cdcfeecee7388681517b  libgo/go/cmd/go/testdata/script/version_buildvcs_git.txt
! 5ed5fc1551aede53d318f52a6aeabfb3  libgo/go/cmd/go/testdata/script/version_buildvcs_git_gpg.txt
! f28f22fe8719262fd559aa09c53fda9b  libgo/go/cmd/go/testdata/script/version_buildvcs_hg.txt
! aea46e766061f03239e7f05c5c4bd18c  libgo/go/cmd/go/testdata/script/version_buildvcs_nested.txt
! ccb4b20f420f874af520065250702abf  libgo/go/cmd/go/testdata/script/version_goexperiment.txt
! 1c5d129f213477e07b8734c3d9ff7fd0  libgo/go/cmd/go/testdata/script/version_replace.txt
! 64658aea6f7f332bbbbaada9bb8f90a0  libgo/go/cmd/go/testdata/script/vet.txt
  c800d4af05d63b175e8b1ba734b55be9  libgo/go/cmd/go/testdata/script/vet_asm.txt
  7d70f96679267e203d8aa12736575f1d  libgo/go/cmd/go/testdata/script/vet_deps.txt
  99947ab56e2537c8884f6dd8cc491750  libgo/go/cmd/go/testdata/script/vet_flags.txt
! 69793826e12366cac11f50d66647a7ab  libgo/go/cmd/go/testdata/script/vet_internal.txt
! 778d35bc55a9d706e81c1e321f10724f  libgo/go/cmd/go/testdata/script/work.txt
! 71f9753f5d654585224b5aa85646792c  libgo/go/cmd/go/testdata/script/work_build_no_modules.txt
! f9c09feded7b9917feef47df9bedfab3  libgo/go/cmd/go/testdata/script/work_edit.txt
! c83de9ef2f2640cee7d9874f7a0fd81c  libgo/go/cmd/go/testdata/script/work_env.txt
! e93a157e9ab2c65f8d9e7137cf4c6323  libgo/go/cmd/go/testdata/script/work_gowork.txt
! 7f4df40eae6b693b9f7875d7d5cd1e03  libgo/go/cmd/go/testdata/script/work_init_gowork.txt
! 0ae8db1f463482c1e46d76acc597064f  libgo/go/cmd/go/testdata/script/work_init_path.txt
! 0a2cc168104736d31dad885618a4873f  libgo/go/cmd/go/testdata/script/work_install_submodule.txt
! 2861ec6ebc6978da6627631e75e61518  libgo/go/cmd/go/testdata/script/work_issue51204.txt
! a321e5983f1dba8090dedecb40de7ad9  libgo/go/cmd/go/testdata/script/work_module_not_in_go_work.txt
! 3266d114892267fdf67c12861370fecf  libgo/go/cmd/go/testdata/script/work_nowork.txt
! cc1a3f08027d41a494b3cb777d8457c9  libgo/go/cmd/go/testdata/script/work_prune.txt
! d57a44fca4221e4230cc87e923265226  libgo/go/cmd/go/testdata/script/work_prune_all.txt
! 779dffca3104ecacfe8b27a0fbff58d0  libgo/go/cmd/go/testdata/script/work_regression_hang.txt
! 87a4e161906323fb8009755d427c4bb5  libgo/go/cmd/go/testdata/script/work_replace.txt
! 6dd603a33763941a433207a14c27de39  libgo/go/cmd/go/testdata/script/work_replace_conflict.txt
! 0379bec5400b6f7626286289dcc7f9b8  libgo/go/cmd/go/testdata/script/work_replace_conflict_override.txt
! c03998fb522bcc7e02eb7de111c135f5  libgo/go/cmd/go/testdata/script/work_replace_main_module.txt
! c9be02a455d08bc10a579f613999b42d  libgo/go/cmd/go/testdata/script/work_sum.txt
! 93dcd8303b2fd85514005f1734fe6893  libgo/go/cmd/go/testdata/script/work_sum_mismatch.txt
! 1cb91a3ecb60a08c7183c998898bbe0a  libgo/go/cmd/go/testdata/script/work_sync.txt
! 8af60891153aa0a1de83258dbb14fbf8  libgo/go/cmd/go/testdata/script/work_sync_irrelevant_dependency.txt
! 75a55828f9f9659d4f71b6bb99efe23d  libgo/go/cmd/go/testdata/script/work_sync_missing_module.txt
! d7c214092052a393797996819b3cb09b  libgo/go/cmd/go/testdata/script/work_sync_relevant_dependency.txt
! 868268d9a78f9c234299b0b5d5c67cbb  libgo/go/cmd/go/testdata/script/work_sync_sum.txt
! a9e89591260b6ec192c67ba74baedab8  libgo/go/cmd/go/testdata/script/work_use.txt
! 68b36f46fe573a916630ba14049dc908  libgo/go/cmd/go/testdata/script/work_use_deleted.txt
! be323fc5a82df2fa8eec3e2732c53216  libgo/go/cmd/go/testdata/script/work_use_dot.txt
! f85a183e7861930a54136a7fe6d5785e  libgo/go/cmd/go/testdata/script/work_use_issue50958.txt
! 5b5f3ac9be3ffcb28f9892078b74e4fc  libgo/go/cmd/go/testdata/script/work_use_noargs.txt
! 7ea86ddb81461f4413a70dbc979d9322  libgo/go/cmd/go/testdata/script/work_vet.txt
! a05c64331ca160026acd2add5c3b3a0b  libgo/go/cmd/go/testdata/script/work_why_download_graph.txt
! 40ce55b53b7d411b145898baad2e7c85  libgo/go/cmd/go/testdata/testterminal18153/terminal_test.go
  27d2592d4a25a41a5ed3c4fbdac5fb28  libgo/go/cmd/go/testdata/vendormod.txt
  ebf01e2a6cf40d4f3551d7ce9137e9a8  libgo/go/cmd/gofmt/doc.go
! 65f7c5bb2e2ace18b0c7c8c7e020efea  libgo/go/cmd/gofmt/gofmt.go
! 77969d2cc622b00dd0196881d5448d13  libgo/go/cmd/gofmt/gofmt_test.go
  3b0675a2f0e08b9db3195e48000b3f6b  libgo/go/cmd/gofmt/internal.go
  2d51f4b232843ca01a38e3860006528e  libgo/go/cmd/gofmt/long_test.go
! 179fa0f1aa90626392f52b0b7f52e406  libgo/go/cmd/gofmt/rewrite.go
  8cbd03fcc467680232794c829d6dfcb2  libgo/go/cmd/gofmt/simplify.go
  03bee86190c5c4c3de3e3226adfe5d22  libgo/go/cmd/gofmt/testdata/comments.golden
  03bee86190c5c4c3de3e3226adfe5d22  libgo/go/cmd/gofmt/testdata/comments.input
*************** fd6e2c41c5c105f5706233e60688824b  libgo/
*** 90037,90045 ****
  0211f1b6a9bcd60c1d8bf9989b01168c  libgo/go/cmd/gofmt/testdata/typeswitch.input
  9bcee56c7bbff38503b3029f5a5fd3a7  libgo/go/cmd/internal/browser/browser.go
  5d4f930e06dd072de85eb0b491e2f4c4  libgo/go/cmd/internal/buildid/buildid.go
! 14a0ad894e08da2a1a8251c820a69413  libgo/go/cmd/internal/buildid/buildid_test.go
  080093043e6ec48f16082180823992f4  libgo/go/cmd/internal/buildid/note.go
! f880d23d5bb3b71ab651a83d2a71050c  libgo/go/cmd/internal/buildid/rewrite.go
  75258c8141883ea1dcbfd31406cbea02  libgo/go/cmd/internal/buildid/testdata/a.elf.base64
  f9298077848d0a12d774bc22367aa678  libgo/go/cmd/internal/buildid/testdata/a.macho.base64
  d959d5d86356bd9e2d7691604a02096f  libgo/go/cmd/internal/buildid/testdata/a.pe.base64
--- 96164,96172 ----
  0211f1b6a9bcd60c1d8bf9989b01168c  libgo/go/cmd/gofmt/testdata/typeswitch.input
  9bcee56c7bbff38503b3029f5a5fd3a7  libgo/go/cmd/internal/browser/browser.go
  5d4f930e06dd072de85eb0b491e2f4c4  libgo/go/cmd/internal/buildid/buildid.go
! 1f94effd08d3ed381e5dd8488f65bed3  libgo/go/cmd/internal/buildid/buildid_test.go
  080093043e6ec48f16082180823992f4  libgo/go/cmd/internal/buildid/note.go
! b92b1c7c8fb8fe3e3ec7338359365f1a  libgo/go/cmd/internal/buildid/rewrite.go
  75258c8141883ea1dcbfd31406cbea02  libgo/go/cmd/internal/buildid/testdata/a.elf.base64
  f9298077848d0a12d774bc22367aa678  libgo/go/cmd/internal/buildid/testdata/a.macho.base64
  d959d5d86356bd9e2d7691604a02096f  libgo/go/cmd/internal/buildid/testdata/a.pe.base64
*************** d959d5d86356bd9e2d7691604a02096f  libgo/
*** 90049,90077 ****
  ee83232ed44d0b93433f04b9ebf7b257  libgo/go/cmd/internal/edit/edit.go
  3af1ecc2c190e82042995e259be4fbdf  libgo/go/cmd/internal/edit/edit_test.go
  877af56b004414bc8b7aec3bf2c26931  libgo/go/cmd/internal/objabi/autotype.go
! f1ca2f98323f46b808a52ace801e9daf  libgo/go/cmd/internal/objabi/flag.go
  8b8dabd88c226681b2868514036e4c7d  libgo/go/cmd/internal/objabi/flag_test.go
! 9b5dd9be7966b763b1832b677d6a0ecb  libgo/go/cmd/internal/objabi/funcdata.go
! 4bc23594720ecc5da1c821754d2a4333  libgo/go/cmd/internal/objabi/funcid.go
  066c0cd80917859cb49556c619b63833  libgo/go/cmd/internal/objabi/head.go
! 951b4856356d57357b5f5eb500b436a7  libgo/go/cmd/internal/objabi/line.go
  4d7bcc563b36b8082664a2aad3096b0d  libgo/go/cmd/internal/objabi/line_test.go
! 517a7aa16c72d25832a6612226159ab7  libgo/go/cmd/internal/objabi/path.go
  5400317c37f34db5e225d1831d8bdecf  libgo/go/cmd/internal/objabi/path_test.go
! aa9b3d41087be2071f12252308b18f2e  libgo/go/cmd/internal/objabi/reloctype.go
! 3d4ce7c6c03cec3602c2961d81578897  libgo/go/cmd/internal/objabi/reloctype_string.go
! c4ab201ea32b7e425e84b16725a924a3  libgo/go/cmd/internal/objabi/stack.go
! d10125de15672b428953e57c6cecf861  libgo/go/cmd/internal/objabi/symkind.go
! 3d1f6c46118f186acae6d8cad14f200a  libgo/go/cmd/internal/objabi/symkind_string.go
  d4754ba68d9cbe37486e976254fb41a8  libgo/go/cmd/internal/objabi/typekind.go
! 84f5fc9b243b8feb42f3d20219dbe48b  libgo/go/cmd/internal/objabi/util.go
  64a00cea6c40d3c1a2f57701da6f4b5c  libgo/go/cmd/internal/pkgpath/pkgpath.go
  371c175f5e23850ad4f19cd0b3a27531  libgo/go/cmd/internal/pkgpath/pkgpath_test.go
! 010f1651319bf708f8f4b619d421721d  libgo/go/cmd/internal/sys/arch.go
! befa14c4e9c93ed73f9ea97b343dd66d  libgo/go/cmd/internal/sys/supported.go
  45da7548f68cc719efe19ce4c28022cc  libgo/go/cmd/internal/sys/supported_test.go
  7afb792f013a046717a67872e05c7ff2  libgo/go/cmd/internal/test2json/test2json.go
! c578afa830020b698532bad3e68e3207  libgo/go/cmd/internal/test2json/test2json_test.go
  a97b278a09fba3081091218371290ecf  libgo/go/cmd/internal/test2json/testdata/ascii.json
  1c175713541ed5815e6fc54fe1755112  libgo/go/cmd/internal/test2json/testdata/ascii.test
  b6b9eabcdadb15e13a2fe23b56534c1b  libgo/go/cmd/internal/test2json/testdata/bench.json
--- 96176,96207 ----
  ee83232ed44d0b93433f04b9ebf7b257  libgo/go/cmd/internal/edit/edit.go
  3af1ecc2c190e82042995e259be4fbdf  libgo/go/cmd/internal/edit/edit_test.go
  877af56b004414bc8b7aec3bf2c26931  libgo/go/cmd/internal/objabi/autotype.go
! e113bb95f8d4d1b911cf00ffc3990264  libgo/go/cmd/internal/objabi/flag.go
  8b8dabd88c226681b2868514036e4c7d  libgo/go/cmd/internal/objabi/flag_test.go
! 35586dc6f792a0640ec219e2c16f30a7  libgo/go/cmd/internal/objabi/funcdata.go
! b5569db723ad37d60856a272ed9b98f4  libgo/go/cmd/internal/objabi/funcid.go
  066c0cd80917859cb49556c619b63833  libgo/go/cmd/internal/objabi/head.go
! cacd4fa2e3fdf15f1d58285a25cee42c  libgo/go/cmd/internal/objabi/line.go
  4d7bcc563b36b8082664a2aad3096b0d  libgo/go/cmd/internal/objabi/line_test.go
! 987f5e5b64057389866cd24825607fbb  libgo/go/cmd/internal/objabi/path.go
  5400317c37f34db5e225d1831d8bdecf  libgo/go/cmd/internal/objabi/path_test.go
! f87e9a3c7757ba1b0ad3de3b861a73c1  libgo/go/cmd/internal/objabi/reloctype.go
! 9f6e1495accc7d13ddb24920435739f8  libgo/go/cmd/internal/objabi/reloctype_string.go
! c71722b03239a8f807a536c35e033f8f  libgo/go/cmd/internal/objabi/stack.go
! ca137e62c78234244e31ee2ef2fdc017  libgo/go/cmd/internal/objabi/symkind.go
! 76dbd835213613deb629eeaa394267f3  libgo/go/cmd/internal/objabi/symkind_string.go
  d4754ba68d9cbe37486e976254fb41a8  libgo/go/cmd/internal/objabi/typekind.go
! 9b4c49fd6d9be20dde98bf3ce88d9520  libgo/go/cmd/internal/objabi/util.go
  64a00cea6c40d3c1a2f57701da6f4b5c  libgo/go/cmd/internal/pkgpath/pkgpath.go
  371c175f5e23850ad4f19cd0b3a27531  libgo/go/cmd/internal/pkgpath/pkgpath_test.go
! 3e500c2ee60b22a9bd658d384e6ff19a  libgo/go/cmd/internal/quoted/quoted.go
! d7ac61d86f8f15f3fa4f1458ad6ad82b  libgo/go/cmd/internal/quoted/quoted_test.go
! 2c22d6614af2837f127456b3f6fe7af0  libgo/go/cmd/internal/sys/arch.go
! 81f4d3045278dcf3df995835ab643d54  libgo/go/cmd/internal/sys/args.go
! 5b86158905f093dee927bd544e9f7d84  libgo/go/cmd/internal/sys/supported.go
  45da7548f68cc719efe19ce4c28022cc  libgo/go/cmd/internal/sys/supported_test.go
  7afb792f013a046717a67872e05c7ff2  libgo/go/cmd/internal/test2json/test2json.go
! 05f4d1ecf5d82daff3da91bc03ebbc2d  libgo/go/cmd/internal/test2json/test2json_test.go
  a97b278a09fba3081091218371290ecf  libgo/go/cmd/internal/test2json/testdata/ascii.json
  1c175713541ed5815e6fc54fe1755112  libgo/go/cmd/internal/test2json/testdata/ascii.test
  b6b9eabcdadb15e13a2fe23b56534c1b  libgo/go/cmd/internal/test2json/testdata/bench.json
*************** f2e87346883cf446ff4b4dbf01d1e1f3  libgo/
*** 90096,90104 ****
  83f40559c1c41931ab89fc25ff03a043  libgo/go/cmd/internal/test2json/testdata/unicode.test
  a838cffe1146a435fd229a8da41e0398  libgo/go/cmd/internal/test2json/testdata/vet.json
  3041c34ce5450be85b8b727c861740f4  libgo/go/cmd/internal/test2json/testdata/vet.test
! f8a7b8e336bef9c3f9346c65ea1fcebe  libgo/go/cmd/internal/traceviewer/format.go
  7a847f6b9210a6dd47813d3f0ad853b5  libgo/go/cmd/test2json/main.go
! 99cd841732ede8196819812792599523  libgo/go/cmd/vendor/modules.txt
  9eb6700aaba7ff06c6c4f36cfc3264b5  libgo/go/cmd/vet/README
  83154946bc8a0bc2471141f63bb0b4ad  libgo/go/cmd/vet/all/whitelist/386.txt
  6fe07891533d300561868ae1b09304e5  libgo/go/cmd/vet/all/whitelist/all.txt
--- 96226,96234 ----
  83f40559c1c41931ab89fc25ff03a043  libgo/go/cmd/internal/test2json/testdata/unicode.test
  a838cffe1146a435fd229a8da41e0398  libgo/go/cmd/internal/test2json/testdata/vet.json
  3041c34ce5450be85b8b727c861740f4  libgo/go/cmd/internal/test2json/testdata/vet.test
! e69377e93187e4eb2609a570e98eeea3  libgo/go/cmd/internal/traceviewer/format.go
  7a847f6b9210a6dd47813d3f0ad853b5  libgo/go/cmd/test2json/main.go
! e702b643b07f085fbc6c5349d2f4ddbc  libgo/go/cmd/vendor/modules.txt
  9eb6700aaba7ff06c6c4f36cfc3264b5  libgo/go/cmd/vet/README
  83154946bc8a0bc2471141f63bb0b4ad  libgo/go/cmd/vet/all/whitelist/386.txt
  6fe07891533d300561868ae1b09304e5  libgo/go/cmd/vet/all/whitelist/all.txt
*************** ad06276384ebc339e1931751e52b24ce  libgo/
*** 90147,90186 ****
  c7299a0bef92dc930694803a9b6caac2  libgo/go/cmd/vet/all/whitelist/windows_386.txt
  e4376cd78f4a0716559be206efa306cd  libgo/go/cmd/vet/all/whitelist/windows_amd64.txt
  3657e2e505c3f9ea30cccd04e8419e45  libgo/go/cmd/vet/doc.go
! 2879c36bbbaf203b0d5714014ddbd438  libgo/go/cmd/vet/main.go
  f67b623e7891147d66281c5edcf9df04  libgo/go/cmd/vet/testdata/asm/asm.go
! 0affe621c3c9823cd60dc639f6a2f5ff  libgo/go/cmd/vet/testdata/asm/asm1.s
  95441c9c85d5c9fa58b5ce76ce021a1f  libgo/go/cmd/vet/testdata/assign/assign.go
  8af3c28b342334d4d5b4bef6b9d7fcc3  libgo/go/cmd/vet/testdata/atomic/atomic.go
  b74dfa32f655c3b3dd5b7db9b0770cc6  libgo/go/cmd/vet/testdata/bool/bool.go
! 5aff45a56c6a30fb1251450b3168df69  libgo/go/cmd/vet/testdata/buildtag/buildtag.go
  c9c05975dcc2993dc641aa36aadd784e  libgo/go/cmd/vet/testdata/cgo/cgo.go
  c3e11d0da4be6c872116d91cfd4b126f  libgo/go/cmd/vet/testdata/composite/composite.go
! e2501b7348e6d680c9c3b6ef21d845dd  libgo/go/cmd/vet/testdata/copylock/copylock.go
  c5247cdfbfa3b4d04ff7c28ede2501e5  libgo/go/cmd/vet/testdata/deadcode/deadcode.go
! 5cce4cd97e82c44a4536e03a9dba7cd9  libgo/go/cmd/vet/testdata/httpresponse/httpresponse.go
  1f8451f2499e4b948165cc881fa68976  libgo/go/cmd/vet/testdata/lostcancel/lostcancel.go
  877989af76b556b8c7897f505b66e3fb  libgo/go/cmd/vet/testdata/method/method.go
  09e4d40ca62a81cb54809b906a95444d  libgo/go/cmd/vet/testdata/nilfunc/nilfunc.go
! 10d40c8d34f7d819ca867b6e5be0c1f7  libgo/go/cmd/vet/testdata/print/print.go
  a94bad5d92e989fb37bd44de123328b7  libgo/go/cmd/vet/testdata/rangeloop/rangeloop.go
  44394e3a889c9aa8958765be4dbf42ee  libgo/go/cmd/vet/testdata/shift/shift.go
  4207d4b584dc32a16bc48cb4e6e039e0  libgo/go/cmd/vet/testdata/structtag/structtag.go
! 82a4c9f7695203bac0cf4ae5325aa660  libgo/go/cmd/vet/testdata/tagtest/file1.go
! b5254f47dc011afae162571f96399ea8  libgo/go/cmd/vet/testdata/tagtest/file2.go
! 3819419931bbd5ac1b0606799f69232d  libgo/go/cmd/vet/testdata/testingpkg/tests.go
! d58e19e25a718b8e6db842b34a21e317  libgo/go/cmd/vet/testdata/testingpkg/tests_test.go
  642940b3835851d8e6073e9147db0967  libgo/go/cmd/vet/testdata/unmarshal/unmarshal.go
  80a5eb01bb3d4db9bc8a29d11a863407  libgo/go/cmd/vet/testdata/unsafeptr/unsafeptr.go
  442eef42da63fb6a83ff18b45d8a77d5  libgo/go/cmd/vet/testdata/unused/unused.go
! 4bd47fe76e34cb5c9f6ae2cd6887bdcd  libgo/go/cmd/vet/vet_test.go
  2751bc45c7c671452400b155c492052f  libgo/go/compress/bzip2/bit_reader.go
  c8162aa3dec1f1a009d304bc45ae66a7  libgo/go/compress/bzip2/bzip2.go
  2c3a6f12153da015c06880726247b3d9  libgo/go/compress/bzip2/bzip2_test.go
  a40e0907178d700813bcc25e21ce34cb  libgo/go/compress/bzip2/huffman.go
  22e3daca4fc3cc00dade3db05ef0b000  libgo/go/compress/bzip2/move_to_front.go
! d41d8cd98f00b204e9800998ecf8427e  libgo/go/compress/bzip2/testdata/Isaac.Newton-Opticks.txt.bz2
! 95da7ca97a8b8f5955fb7eb329784489  libgo/go/compress/bzip2/testdata/Mark.Twain-Tom.Sawyer.txt.bz2
  866d1b75ceb5d34415bbbebd354d072d  libgo/go/compress/bzip2/testdata/e.txt.bz2
  91cfcbcf414a3db1857d28da2e0d8dee  libgo/go/compress/bzip2/testdata/fail-issue5747.bz2
  740345cf514a4c8ad6eab50f8f56218f  libgo/go/compress/bzip2/testdata/pass-random1.bin
--- 96277,96321 ----
  c7299a0bef92dc930694803a9b6caac2  libgo/go/cmd/vet/all/whitelist/windows_386.txt
  e4376cd78f4a0716559be206efa306cd  libgo/go/cmd/vet/all/whitelist/windows_amd64.txt
  3657e2e505c3f9ea30cccd04e8419e45  libgo/go/cmd/vet/doc.go
! a7cfd55b0024c9a2d4e0a5ac445fd82b  libgo/go/cmd/vet/main.go
  f67b623e7891147d66281c5edcf9df04  libgo/go/cmd/vet/testdata/asm/asm.go
! 9084ead92ad964f55f237474c8dcc8c3  libgo/go/cmd/vet/testdata/asm/asm1.s
  95441c9c85d5c9fa58b5ce76ce021a1f  libgo/go/cmd/vet/testdata/assign/assign.go
  8af3c28b342334d4d5b4bef6b9d7fcc3  libgo/go/cmd/vet/testdata/atomic/atomic.go
  b74dfa32f655c3b3dd5b7db9b0770cc6  libgo/go/cmd/vet/testdata/bool/bool.go
! f11df0966130be0529620b120f0db59f  libgo/go/cmd/vet/testdata/buildtag/buildtag.go
! 509443dc728bbd14023d720c6ad8354c  libgo/go/cmd/vet/testdata/buildtag/buildtag2.go
! a4b0d78a737d361e49ef7cc08d450440  libgo/go/cmd/vet/testdata/buildtag/buildtag3.go
! 264bae2b5c0b423d67455d5c9b69004c  libgo/go/cmd/vet/testdata/buildtag/buildtag4.go
! c47f8a75cf1775e5af6941ebefa15b9f  libgo/go/cmd/vet/testdata/buildtag/buildtag5.go
! 8c3f498bc436c972e2a7002614fce25d  libgo/go/cmd/vet/testdata/buildtag/buildtag6.s
! bcc05c589b61c77c286f08bb1ace0be4  libgo/go/cmd/vet/testdata/buildtag/buildtag7.s
  c9c05975dcc2993dc641aa36aadd784e  libgo/go/cmd/vet/testdata/cgo/cgo.go
  c3e11d0da4be6c872116d91cfd4b126f  libgo/go/cmd/vet/testdata/composite/composite.go
! e79af90c6c8a7087d141b16b8d5ae74d  libgo/go/cmd/vet/testdata/copylock/copylock.go
  c5247cdfbfa3b4d04ff7c28ede2501e5  libgo/go/cmd/vet/testdata/deadcode/deadcode.go
! 5711545a885ac25eb70283ccb7f951f0  libgo/go/cmd/vet/testdata/httpresponse/httpresponse.go
  1f8451f2499e4b948165cc881fa68976  libgo/go/cmd/vet/testdata/lostcancel/lostcancel.go
  877989af76b556b8c7897f505b66e3fb  libgo/go/cmd/vet/testdata/method/method.go
  09e4d40ca62a81cb54809b906a95444d  libgo/go/cmd/vet/testdata/nilfunc/nilfunc.go
! 4ac695bd4da308d48a28b4ecd35625f0  libgo/go/cmd/vet/testdata/print/print.go
  a94bad5d92e989fb37bd44de123328b7  libgo/go/cmd/vet/testdata/rangeloop/rangeloop.go
  44394e3a889c9aa8958765be4dbf42ee  libgo/go/cmd/vet/testdata/shift/shift.go
  4207d4b584dc32a16bc48cb4e6e039e0  libgo/go/cmd/vet/testdata/structtag/structtag.go
! 5a46255477ddff5f2a6f54da6ef8afee  libgo/go/cmd/vet/testdata/tagtest/file1.go
! 1e85ac4e1b077dbc837dfcb1f2216c22  libgo/go/cmd/vet/testdata/tagtest/file2.go
! e86d25fa84627db42a1bcbb2e5b29427  libgo/go/cmd/vet/testdata/testingpkg/tests.go
! 3073d58950666b6b0c7323304fb65542  libgo/go/cmd/vet/testdata/testingpkg/tests_test.go
  642940b3835851d8e6073e9147db0967  libgo/go/cmd/vet/testdata/unmarshal/unmarshal.go
  80a5eb01bb3d4db9bc8a29d11a863407  libgo/go/cmd/vet/testdata/unsafeptr/unsafeptr.go
  442eef42da63fb6a83ff18b45d8a77d5  libgo/go/cmd/vet/testdata/unused/unused.go
! ccedafaacafea895b91d1d093b71d8ed  libgo/go/cmd/vet/vet_test.go
  2751bc45c7c671452400b155c492052f  libgo/go/compress/bzip2/bit_reader.go
  c8162aa3dec1f1a009d304bc45ae66a7  libgo/go/compress/bzip2/bzip2.go
  2c3a6f12153da015c06880726247b3d9  libgo/go/compress/bzip2/bzip2_test.go
  a40e0907178d700813bcc25e21ce34cb  libgo/go/compress/bzip2/huffman.go
  22e3daca4fc3cc00dade3db05ef0b000  libgo/go/compress/bzip2/move_to_front.go
! 6a048599ce8110354bf2ac09d01e79d9  libgo/go/compress/bzip2/testdata/Isaac.Newton-Opticks.txt.bz2
  866d1b75ceb5d34415bbbebd354d072d  libgo/go/compress/bzip2/testdata/e.txt.bz2
  91cfcbcf414a3db1857d28da2e0d8dee  libgo/go/compress/bzip2/testdata/fail-issue5747.bz2
  740345cf514a4c8ad6eab50f8f56218f  libgo/go/compress/bzip2/testdata/pass-random1.bin
*************** bc1906600d9696359786593b02e64d5b  libgo/
*** 90258,90273 ****
  e29770657936ab1baf47d457b55381ba  libgo/go/compress/flate/token.go
  4b58658416943bcc6c201084be76b4da  libgo/go/compress/flate/writer_test.go
  3381281d2e0c4003f6978263a4e85f2c  libgo/go/compress/gzip/example_test.go
  cfa21fcae5a163a28e436fe5f3cb7c6b  libgo/go/compress/gzip/gunzip.go
  30af9a6b33e62c80a8538f6eaa7584b8  libgo/go/compress/gzip/gunzip_test.go
  8c77742d812beae9475227ca05ee2290  libgo/go/compress/gzip/gzip.go
  e9049f253d4b368d839c763010677e2f  libgo/go/compress/gzip/gzip_test.go
! cabe5a922c11d5341edbc0350c2bb334  libgo/go/compress/gzip/issue14937_test.go
  0dffcd9f3c345d4ba3c76ba82fb5f4d5  libgo/go/compress/gzip/testdata/issue6550.gz.base64
! 5d03990646fcbee43a71a0184469cb42  libgo/go/compress/lzw/reader.go
! 8a86351beed7e0e8d7c316d3e4435052  libgo/go/compress/lzw/reader_test.go
! 23f13d3d7299a89acadc774db245f2fb  libgo/go/compress/lzw/writer.go
! b975156ef954a72aa7d76ac790a6a466  libgo/go/compress/lzw/writer_test.go
  575248786771823e57062a2b899ad710  libgo/go/compress/testdata/e.txt
  7ac25dac43eb18c14e69528e017cf079  libgo/go/compress/testdata/gettysburg.txt
  e654f83f0131cd51b41eebac2949f005  libgo/go/compress/testdata/pi.txt
--- 96393,96409 ----
  e29770657936ab1baf47d457b55381ba  libgo/go/compress/flate/token.go
  4b58658416943bcc6c201084be76b4da  libgo/go/compress/flate/writer_test.go
  3381281d2e0c4003f6978263a4e85f2c  libgo/go/compress/gzip/example_test.go
+ 3db0058192df749728a67e1afef906a2  libgo/go/compress/gzip/fuzz_test.go
  cfa21fcae5a163a28e436fe5f3cb7c6b  libgo/go/compress/gzip/gunzip.go
  30af9a6b33e62c80a8538f6eaa7584b8  libgo/go/compress/gzip/gunzip_test.go
  8c77742d812beae9475227ca05ee2290  libgo/go/compress/gzip/gzip.go
  e9049f253d4b368d839c763010677e2f  libgo/go/compress/gzip/gzip_test.go
! 2eb59b217f431ca3a1eb1e691ad6f322  libgo/go/compress/gzip/issue14937_test.go
  0dffcd9f3c345d4ba3c76ba82fb5f4d5  libgo/go/compress/gzip/testdata/issue6550.gz.base64
! c03af2348da4e808b44e8875eefd9552  libgo/go/compress/lzw/reader.go
! 8f4d1ab0ecb45021612322bb0595d841  libgo/go/compress/lzw/reader_test.go
! f702f0dcd8b0fca0ed196d7d741a0646  libgo/go/compress/lzw/writer.go
! a8ac2d58a44c25157299bf3ec6002080  libgo/go/compress/lzw/writer_test.go
  575248786771823e57062a2b899ad710  libgo/go/compress/testdata/e.txt
  7ac25dac43eb18c14e69528e017cf079  libgo/go/compress/testdata/gettysburg.txt
  e654f83f0131cd51b41eebac2949f005  libgo/go/compress/testdata/pi.txt
*************** e654f83f0131cd51b41eebac2949f005  libgo/
*** 90275,90309 ****
  2a7898eb21a29a8ca61904114880debb  libgo/go/compress/zlib/reader_test.go
  ae3c1bf9fe049e9563e1e2d78a929d48  libgo/go/compress/zlib/writer.go
  0aabd0dbca363692d49cb8444bbe40e1  libgo/go/compress/zlib/writer_test.go
! 56dc7884aab1fb41a91a8cfcd1ef235c  libgo/go/container/heap/heap.go
! 3442cea2ff783d4c4e1a941aaf0e58b4  libgo/go/container/heap/heap_test.go
! 7e6ebf6a05aa8fdd501026fc440b5f80  libgo/go/container/list/list.go
! 7cb4aca0766678d1d5ccf4d04908ce45  libgo/go/container/list/list_test.go
! 7d91d123d2b51105c8904031531704f7  libgo/go/container/ring/example_test.go
! 04f808f97d2480ea07eb40b3a54bf51b  libgo/go/container/ring/ring.go
! 16f6189a98042add423d1e11cb050900  libgo/go/container/ring/ring_test.go
! d768e501b478241fda6eba25c889e1f2  libgo/go/context/benchmark_test.go
! a7ff7766f77fe173c5255bcc8fe84c6e  libgo/go/context/context.go
! dbe3aa773447511570b26028bf948bcb  libgo/go/context/context_test.go
  30bbdde1d795ea395dd8ea2e8d86d46c  libgo/go/context/example_test.go
  6292e417f26ba5bb4a6dc5cbd34f2635  libgo/go/context/net_test.go
  027d92fdcb4aed934e53ee1041d6e486  libgo/go/context/x_test.go
! 590927177ab19da6e4ac9adf84c602fe  libgo/go/crypto/aes/aes_gcm.go
  9186a301659a85c1dd290f3ec7aaf4f7  libgo/go/crypto/aes/aes_test.go
  52bc400d4ddc5195f9eba3ea93646be5  libgo/go/crypto/aes/block.go
  43658eb05abba64d40eeb01f7fdee080  libgo/go/crypto/aes/cbc_s390x.go
  ce5494cd3d35121574cfe4f183b17ead  libgo/go/crypto/aes/cipher.go
! bf9eedb5a820338c9e1bf7a4cc608478  libgo/go/crypto/aes/cipher_asm.go
! c3cfcb0bc9d93f89f4b8e5c2cc3fcc1d  libgo/go/crypto/aes/cipher_generic.go
  59b2d5ccd700778466d4a930347faf34  libgo/go/crypto/aes/cipher_ppc64le.go
  57725487df8de01ff4b156caafbf30d6  libgo/go/crypto/aes/cipher_s390x.go
  789b23068b9ad1048e01b09b15e821e3  libgo/go/crypto/aes/const.go
  d1e946ae77454a4e2133bcf361533ec3  libgo/go/crypto/aes/ctr_s390x.go
! a5239da391c4abb6fa13116362010ea1  libgo/go/crypto/aes/gcm_ppc64le.go
  e373f96266e61afe5bba2b6ce432c9a5  libgo/go/crypto/aes/gcm_s390x.go
  94e6b6568f8eb10b2961a3f05189ace8  libgo/go/crypto/aes/modes.go
  9388e452f99fd69ecb3ce300313be051  libgo/go/crypto/aes/modes_test.go
! a641f1ce40eaabaa6963c125d4945014  libgo/go/crypto/cipher/benchmark_test.go
  ff164cc25f0a7a281db479992b200557  libgo/go/crypto/cipher/cbc.go
  2f1635814518f21d34a2654122de6351  libgo/go/crypto/cipher/cbc_aes_test.go
  79438ff4fccbaf90491106dfde53785b  libgo/go/crypto/cipher/cfb.go
--- 96411,96445 ----
  2a7898eb21a29a8ca61904114880debb  libgo/go/compress/zlib/reader_test.go
  ae3c1bf9fe049e9563e1e2d78a929d48  libgo/go/compress/zlib/writer.go
  0aabd0dbca363692d49cb8444bbe40e1  libgo/go/compress/zlib/writer_test.go
! f271200df5239f0959e27d5233d7251c  libgo/go/container/heap/heap.go
! cd4dcb00802a4c37db90ee1831725e1e  libgo/go/container/heap/heap_test.go
! ab2cbb3f0f1d6336756b76cda25f4126  libgo/go/container/list/list.go
! 1473413c675f64419f69af87bfa1ddf5  libgo/go/container/list/list_test.go
! a194834f453e8ea1b2271db7d311b68b  libgo/go/container/ring/example_test.go
! 6bcb98658bb6b6a14aa4ffad856f5c5f  libgo/go/container/ring/ring.go
! a577d3513cea4b85c542b62cf6b336f0  libgo/go/container/ring/ring_test.go
! 3b373ecc7b3f55f7032575ad5b4171c9  libgo/go/context/benchmark_test.go
! 21c329e42a2eee480d9b4859b386ed1d  libgo/go/context/context.go
! bc8c98cd366e41f200851f41089efe2b  libgo/go/context/context_test.go
  30bbdde1d795ea395dd8ea2e8d86d46c  libgo/go/context/example_test.go
  6292e417f26ba5bb4a6dc5cbd34f2635  libgo/go/context/net_test.go
  027d92fdcb4aed934e53ee1041d6e486  libgo/go/context/x_test.go
! 633633ef5da2a32730943be2678f931a  libgo/go/crypto/aes/aes_gcm.go
  9186a301659a85c1dd290f3ec7aaf4f7  libgo/go/crypto/aes/aes_test.go
  52bc400d4ddc5195f9eba3ea93646be5  libgo/go/crypto/aes/block.go
  43658eb05abba64d40eeb01f7fdee080  libgo/go/crypto/aes/cbc_s390x.go
  ce5494cd3d35121574cfe4f183b17ead  libgo/go/crypto/aes/cipher.go
! d3c69fa5071698f225cb18fcc4be4744  libgo/go/crypto/aes/cipher_asm.go
! 2b618b9efbdd0afdcafb73930ffcbd1f  libgo/go/crypto/aes/cipher_generic.go
  59b2d5ccd700778466d4a930347faf34  libgo/go/crypto/aes/cipher_ppc64le.go
  57725487df8de01ff4b156caafbf30d6  libgo/go/crypto/aes/cipher_s390x.go
  789b23068b9ad1048e01b09b15e821e3  libgo/go/crypto/aes/const.go
  d1e946ae77454a4e2133bcf361533ec3  libgo/go/crypto/aes/ctr_s390x.go
! f47d7e4b32b221db1d6364c6e6e2371d  libgo/go/crypto/aes/gcm_ppc64le.go
  e373f96266e61afe5bba2b6ce432c9a5  libgo/go/crypto/aes/gcm_s390x.go
  94e6b6568f8eb10b2961a3f05189ace8  libgo/go/crypto/aes/modes.go
  9388e452f99fd69ecb3ce300313be051  libgo/go/crypto/aes/modes_test.go
! 22a4185cf3456c10bffabdd5d4ae74bf  libgo/go/crypto/cipher/benchmark_test.go
  ff164cc25f0a7a281db479992b200557  libgo/go/crypto/cipher/cbc.go
  2f1635814518f21d34a2654122de6351  libgo/go/crypto/cipher/cbc_aes_test.go
  79438ff4fccbaf90491106dfde53785b  libgo/go/crypto/cipher/cfb.go
*************** ed80fb436d52d58edc59c787f0cb29a8  libgo/
*** 90323,90384 ****
  4d22c5a31ed3d5a3827c3c74a203d991  libgo/go/crypto/cipher/ofb_test.go
  e21ed3e4b39e2d1323eca20687c30a7c  libgo/go/crypto/cipher/xor_amd64.go
  9d4b3db6ed2b0126799140b0b4bffd99  libgo/go/crypto/cipher/xor_arm64.go
! 59f2775fd3dfdac1b4f76e47f8d8c2ad  libgo/go/crypto/cipher/xor_generic.go
! 93942117cdc4add1e26f144dfad48ccf  libgo/go/crypto/cipher/xor_ppc64x.go
  46e3dba7c3b2c14da77f1ee17298f12e  libgo/go/crypto/cipher/xor_test.go
! 0a2b318a2fec0ff0f9b5aecf344cbfd8  libgo/go/crypto/crypto.go
  2ad96a9cd5b4541d77b0adfb0aede027  libgo/go/crypto/des/block.go
  20cc7cd917ce51716b99383088e00040  libgo/go/crypto/des/cipher.go
  d906bcfd596bbd97b0c5ef8207a0e28d  libgo/go/crypto/des/const.go
  cb096af6cecb093d35c299cf7ae9c236  libgo/go/crypto/des/des_test.go
  dd825a66e55a1427b4cac8a1aa33c055  libgo/go/crypto/dsa/dsa.go
  5cffeec14876235caecf7bbeb78d03dc  libgo/go/crypto/dsa/dsa_test.go
! f7e0ec192f4dbcb2152b1d18deefc1d8  libgo/go/crypto/ecdsa/ecdsa.go
! 3214729a52bb0a2270a96a294f91d136  libgo/go/crypto/ecdsa/ecdsa_noasm.go
! c41321b8a43e741d665d614ebd8f07b8  libgo/go/crypto/ecdsa/ecdsa_s390x.go
! 232ae867be298185b967f7d7969832ad  libgo/go/crypto/ecdsa/ecdsa_s390x_test.go
! bbfe2ed8cf2022ab28b800d07d782646  libgo/go/crypto/ecdsa/ecdsa_test.go
  398cde569b0ddbf96b8611c9d618f71b  libgo/go/crypto/ecdsa/equal_test.go
  0f9f31975a844f6b570e4d3baa1a5f7a  libgo/go/crypto/ecdsa/example_test.go
  0029cd1da64f60898b152b066ced6605  libgo/go/crypto/ecdsa/testdata/SigVer.rsp.bz2
! 4eb1b4b732695b6c021c084e1c32327e  libgo/go/crypto/ed25519/ed25519.go
! 7dce67a379a8f188d5bc7371856a5c73  libgo/go/crypto/ed25519/ed25519_test.go
! 7d7d579cae9aa68ee288df719b2be675  libgo/go/crypto/ed25519/internal/edwards25519/const.go
! 7243ca323f4dfa1dc73bb44f31473d6a  libgo/go/crypto/ed25519/internal/edwards25519/edwards25519.go
  a9b19ad79ebc3c5ae2eadacf03a7b4d7  libgo/go/crypto/ed25519/testdata/sign.input.gz
! 067211884b0f7fc0da43cbbc229b71d6  libgo/go/crypto/elliptic/elliptic.go
! 1acae09eb65247f2df7ee64f459dca95  libgo/go/crypto/elliptic/elliptic_test.go
! 24e3815812637e2939b2d19b5c00b779  libgo/go/crypto/elliptic/fuzz_test.go
! 82344ad6bc49868d9ae403f2d181a1db  libgo/go/crypto/elliptic/p224.go
! 264b9b1a9cdc576bb03babdbe852a08b  libgo/go/crypto/elliptic/p224_test.go
! 000bcf9bb2173282c1606bd0272ccd93  libgo/go/crypto/elliptic/p256.go
! e1cbb9bf22b8a11a1d017ebce22c6c32  libgo/go/crypto/elliptic/p256_asm.go
! 057533cbf435b0018497b0efebd22fae  libgo/go/crypto/elliptic/p256_generic.go
! 08d199c8bee01940a667eb5284ea3819  libgo/go/crypto/elliptic/p256_ppc64le.go
! 316a8a71732aa6b5bdbb6eb12ef647f3  libgo/go/crypto/elliptic/p256_s390x.go
  888b765e4c780f2a661d41b15f5173d5  libgo/go/crypto/hmac/hmac.go
  8b7aa0a161c1d32d046639b00ad3a9d8  libgo/go/crypto/hmac/hmac_test.go
  40b515143722f2248d7e52d256a97006  libgo/go/crypto/internal/randutil/randutil.go
! 750f1a2bb19bf76301183ef399378571  libgo/go/crypto/internal/subtle/aliasing.go
! 837be21833bdd2636b29898f31b9ef71  libgo/go/crypto/internal/subtle/aliasing_appengine.go
  e44f4d4a74bff971d55f1b6251f9042f  libgo/go/crypto/internal/subtle/aliasing_test.go
  669523c34b97d66daa84c79e43853b86  libgo/go/crypto/issue21104_test.go
! d69271b213176abe15638f80d7e01bd3  libgo/go/crypto/md5/gen.go
  77482dca8a16b8ed34ff0bbb0a814bae  libgo/go/crypto/md5/md5.go
! 58f89aac1586e1a14d02e930e9fc1ba9  libgo/go/crypto/md5/md5_test.go
  100f84449d4cb967137ba4e030741c19  libgo/go/crypto/md5/md5block.go
! 968fd9882cfe28c759541ba88d214776  libgo/go/crypto/md5/md5block_decl.go
! b7c1e3948e6b96dc8ef794ee411a07c3  libgo/go/crypto/md5/md5block_generic.go
! ef5bb5dc6a45996643b3b448fa924a2d  libgo/go/crypto/rand/eagain.go
! 391a9a2ae9e4da4b8ea87cb8788fac0a  libgo/go/crypto/rand/rand.go
! c6ec91bcf16b412cfb637c18cfb68ace  libgo/go/crypto/rand/rand_batched.go
! 655ad0c2849557ce31036c60948fe7b3  libgo/go/crypto/rand/rand_batched_test.go
  54c4c1fef2097f42406db46f45c99490  libgo/go/crypto/rand/rand_freebsd.go
! 8ea03b913d385f2aa32efe2235421a5e  libgo/go/crypto/rand/rand_js.go
  54f5cab340aff2d5aca2ff32f39e0331  libgo/go/crypto/rand/rand_linux.go
! 056f9af0010c1093db173851d879797c  libgo/go/crypto/rand/rand_openbsd.go
  ac766ed9ce82e6a75dec0f207442090c  libgo/go/crypto/rand/rand_test.go
! c51b133923dc892eedae83eb9ef6a053  libgo/go/crypto/rand/rand_unix.go
  7cf4992fa65701a4a2540f04c701edde  libgo/go/crypto/rand/rand_windows.go
  e75d13daca9a534d8c9cd611e5ba6ffc  libgo/go/crypto/rand/util.go
  5280043695d6d553f0deca76f9c1c1a1  libgo/go/crypto/rand/util_test.go
--- 96459,96563 ----
  4d22c5a31ed3d5a3827c3c74a203d991  libgo/go/crypto/cipher/ofb_test.go
  e21ed3e4b39e2d1323eca20687c30a7c  libgo/go/crypto/cipher/xor_amd64.go
  9d4b3db6ed2b0126799140b0b4bffd99  libgo/go/crypto/cipher/xor_arm64.go
! 13b8cd9c381025b90a4e6765daaaf6bc  libgo/go/crypto/cipher/xor_generic.go
! d7b4cc87cb1b6f84b0436b64bf56d291  libgo/go/crypto/cipher/xor_ppc64x.go
  46e3dba7c3b2c14da77f1ee17298f12e  libgo/go/crypto/cipher/xor_test.go
! f4f947a388ae57a03355bb91501f8e5b  libgo/go/crypto/crypto.go
  2ad96a9cd5b4541d77b0adfb0aede027  libgo/go/crypto/des/block.go
  20cc7cd917ce51716b99383088e00040  libgo/go/crypto/des/cipher.go
  d906bcfd596bbd97b0c5ef8207a0e28d  libgo/go/crypto/des/const.go
  cb096af6cecb093d35c299cf7ae9c236  libgo/go/crypto/des/des_test.go
  dd825a66e55a1427b4cac8a1aa33c055  libgo/go/crypto/dsa/dsa.go
  5cffeec14876235caecf7bbeb78d03dc  libgo/go/crypto/dsa/dsa_test.go
! 2a331f74c38a2a0de790c4b6506435f1  libgo/go/crypto/ecdsa/ecdsa.go
! c89e38f082e51ab46b9fdd6f012dc8e2  libgo/go/crypto/ecdsa/ecdsa_noasm.go
! 088168bc30db6745cb4163a5b35d395e  libgo/go/crypto/ecdsa/ecdsa_s390x.go
! 9d6e1add49289548b9d5d3c8cddeacd2  libgo/go/crypto/ecdsa/ecdsa_s390x_test.go
! b66c04c87801462c8386fb83dddcc396  libgo/go/crypto/ecdsa/ecdsa_test.go
  398cde569b0ddbf96b8611c9d618f71b  libgo/go/crypto/ecdsa/equal_test.go
  0f9f31975a844f6b570e4d3baa1a5f7a  libgo/go/crypto/ecdsa/example_test.go
  0029cd1da64f60898b152b066ced6605  libgo/go/crypto/ecdsa/testdata/SigVer.rsp.bz2
! 4db58042d15cb1b2ce3a3d12ecc76125  libgo/go/crypto/ed25519/ed25519.go
! 8c965ae7f26e7f28efca57afa7bf6c8d  libgo/go/crypto/ed25519/ed25519_test.go
! 648ed7e2babc7a470dd7c42428b727b7  libgo/go/crypto/ed25519/ed25519vectors_test.go
! 524614b9aca855b8f2e1b8268f134265  libgo/go/crypto/ed25519/internal/edwards25519/doc.go
! 32fc267261ee7f3374e992cce9d3b900  libgo/go/crypto/ed25519/internal/edwards25519/edwards25519.go
! ed1d7c600b7c722b2d61552d0bd0f644  libgo/go/crypto/ed25519/internal/edwards25519/edwards25519_test.go
! 56464d640caa5d807a536c7b82b2c5a0  libgo/go/crypto/ed25519/internal/edwards25519/field/_asm/fe_amd64_asm.go
! 3e681c3e4610da93ef28d79be3968feb  libgo/go/crypto/ed25519/internal/edwards25519/field/_asm/go.mod
! ca7bcfdfc4d33481751ed8e1b3b06899  libgo/go/crypto/ed25519/internal/edwards25519/field/fe.go
! 2c7e7dbfb9ea17126de63da4fd7b46bd  libgo/go/crypto/ed25519/internal/edwards25519/field/fe_alias_test.go
! 54c59940043ab7fe4f1ecb19e709ccf1  libgo/go/crypto/ed25519/internal/edwards25519/field/fe_amd64.go
! 49399e68b374fcca03f0c85d8ba2a590  libgo/go/crypto/ed25519/internal/edwards25519/field/fe_amd64_noasm.go
! d3a5d95b8180207700dcdfc31377c651  libgo/go/crypto/ed25519/internal/edwards25519/field/fe_arm64.go
! 58bf61d174a4d5ea77daceffc0500228  libgo/go/crypto/ed25519/internal/edwards25519/field/fe_arm64_noasm.go
! 672e26f36c4f881c7d3f0f5d23deaf52  libgo/go/crypto/ed25519/internal/edwards25519/field/fe_bench_test.go
! dd314a0c56dbf5b6e81fcaf1152ec8fc  libgo/go/crypto/ed25519/internal/edwards25519/field/fe_generic.go
! dcf56798acb7efa0e146622002ddf7a5  libgo/go/crypto/ed25519/internal/edwards25519/field/fe_test.go
! 95dc2582260338ad1f38b831d50a37d9  libgo/go/crypto/ed25519/internal/edwards25519/scalar.go
! 280784f552eed94284195c9fb6264fc5  libgo/go/crypto/ed25519/internal/edwards25519/scalar_alias_test.go
! 189832ae96a65eff5501a04634d904cf  libgo/go/crypto/ed25519/internal/edwards25519/scalar_test.go
! 13d5dd5bc265a9433e5ebed58b501753  libgo/go/crypto/ed25519/internal/edwards25519/scalarmult.go
! 3e97105067b1f963db3109620d1c7d08  libgo/go/crypto/ed25519/internal/edwards25519/scalarmult_test.go
! f475ebbeead5e5c4b1aaecdab8ba314d  libgo/go/crypto/ed25519/internal/edwards25519/tables.go
! dac69f4977ec3026dbfb8aa34c18d4e5  libgo/go/crypto/ed25519/internal/edwards25519/tables_test.go
  a9b19ad79ebc3c5ae2eadacf03a7b4d7  libgo/go/crypto/ed25519/testdata/sign.input.gz
! 062be20fb63066d5ba0c768eb761d505  libgo/go/crypto/elliptic/elliptic.go
! 04a34dcc780ea0322a9b06c9449d62e8  libgo/go/crypto/elliptic/elliptic_test.go
! 2d63298066ad70c83d07fe8e4bcd1d80  libgo/go/crypto/elliptic/export_generate.go
! 3f1c54c68fe944cd88914521a5b96091  libgo/go/crypto/elliptic/fuzz_test.go
! 464883ae23048324abaa593ed2a6aa1a  libgo/go/crypto/elliptic/gen_p256_table.go
! 06733b602effc88862a649be0d84d8e1  libgo/go/crypto/elliptic/internal/fiat/fiat_test.go
! 4d73d905c19edcccd0141a30214278cb  libgo/go/crypto/elliptic/internal/fiat/generate.go
! c427478b9835f3bbc7357c939a9cdc6f  libgo/go/crypto/elliptic/internal/fiat/p224.go
! 14a2d60eee993afeae1f1026130af28e  libgo/go/crypto/elliptic/internal/fiat/p224_fiat64.go
! 97a693d36ac3e67bf21b468dbdc91ce6  libgo/go/crypto/elliptic/internal/fiat/p224_invert.go
! ef3cc27946f7de3d393bf17735db0c54  libgo/go/crypto/elliptic/internal/fiat/p384.go
! fe8d30a37728a7422a9f57c2cc86bfef  libgo/go/crypto/elliptic/internal/fiat/p384_fiat64.go
! a9ca1d33ac65d3459d9f2b3f6ef8f102  libgo/go/crypto/elliptic/internal/fiat/p384_invert.go
! 26458e5e7193cbe9bac97fe0f4a89e87  libgo/go/crypto/elliptic/internal/fiat/p521.go
! 115cb688eae7320c42009f7386c7ab11  libgo/go/crypto/elliptic/internal/fiat/p521_fiat64.go
! b0ff5b145a603728124e6bceb6bfff03  libgo/go/crypto/elliptic/internal/fiat/p521_invert.go
! 93ea92ae3b4becbfcd5082caab9910c1  libgo/go/crypto/elliptic/internal/nistec/nistec_test.go
! 2e72bb9868d3b9cf04cea23bdd021c9c  libgo/go/crypto/elliptic/internal/nistec/p224.go
! b54870068964cc0abbe428c19b9ff3cb  libgo/go/crypto/elliptic/internal/nistec/p384.go
! 44958af4c18fed9a56eda254888da1e8  libgo/go/crypto/elliptic/internal/nistec/p521.go
! c864b729e1d1867ece072058ea0c21a9  libgo/go/crypto/elliptic/p224.go
! 096a9954e65108452a21e106c0563a97  libgo/go/crypto/elliptic/p224_test.go
! 5841daa6c5b708afbaa215b73de3a272  libgo/go/crypto/elliptic/p256.go
! 60166fc1f108417ba332df5aebd48d7e  libgo/go/crypto/elliptic/p256_asm.go
! a42e1b96f5ded58c66dc987eb9839d65  libgo/go/crypto/elliptic/p256_asm_table_test.go
! d28cae03f302c019deee1f2cfcab0ad7  libgo/go/crypto/elliptic/p256_generic.go
! 6bfc92cf0f667a6134518bb0e05e47aa  libgo/go/crypto/elliptic/p256_ppc64le.go
! 823f95c3353819d206a71df9f07067ec  libgo/go/crypto/elliptic/p256_s390x.go
! 91c2d5806a2b8712884db2b3a1bc40d1  libgo/go/crypto/elliptic/p256_test.go
! 973499346b714ddf9596cbe4ade3218c  libgo/go/crypto/elliptic/p384.go
! 50790324b3401b7e9a76ba92e180c7d2  libgo/go/crypto/elliptic/p521.go
  888b765e4c780f2a661d41b15f5173d5  libgo/go/crypto/hmac/hmac.go
  8b7aa0a161c1d32d046639b00ad3a9d8  libgo/go/crypto/hmac/hmac_test.go
  40b515143722f2248d7e52d256a97006  libgo/go/crypto/internal/randutil/randutil.go
! 818d162757102c129d6ab437b6dcb589  libgo/go/crypto/internal/subtle/aliasing.go
! d3fb00d22e716310731ab7285dd03bfe  libgo/go/crypto/internal/subtle/aliasing_appengine.go
  e44f4d4a74bff971d55f1b6251f9042f  libgo/go/crypto/internal/subtle/aliasing_test.go
  669523c34b97d66daa84c79e43853b86  libgo/go/crypto/issue21104_test.go
! 340344eb7aef6bc924aacbadd49f5309  libgo/go/crypto/md5/gen.go
  77482dca8a16b8ed34ff0bbb0a814bae  libgo/go/crypto/md5/md5.go
! 72402798838b242da74a623e72ebd6b3  libgo/go/crypto/md5/md5_test.go
  100f84449d4cb967137ba4e030741c19  libgo/go/crypto/md5/md5block.go
! cdc57f611340b16809d2ddf69b96c4ed  libgo/go/crypto/md5/md5block_decl.go
! f2bd8b1360b3eb77b93201905dbaf4a7  libgo/go/crypto/md5/md5block_generic.go
! ba640c0cab844d216cf801dd5c191b95  libgo/go/crypto/rand/eagain.go
! 0c17a20f3689b9f036d511ce8017c9d6  libgo/go/crypto/rand/rand.go
! aa29415a793a7c03ddd2b6767c553918  libgo/go/crypto/rand/rand_batched.go
! 03f83da6f44eb87421c9b949947f26e2  libgo/go/crypto/rand/rand_batched_test.go
! 15d81522884f7cce34e68b5aec18aceb  libgo/go/crypto/rand/rand_dragonfly.go
  54c4c1fef2097f42406db46f45c99490  libgo/go/crypto/rand/rand_freebsd.go
! 688f9896ca2edf1bb1637d1b05931ce7  libgo/go/crypto/rand/rand_getentropy.go
! acc99233d8fd7c8e657073308882f510  libgo/go/crypto/rand/rand_js.go
  54f5cab340aff2d5aca2ff32f39e0331  libgo/go/crypto/rand/rand_linux.go
! b73fc6d32abfebfa94ef5a2f0ec88d01  libgo/go/crypto/rand/rand_solaris.go
  ac766ed9ce82e6a75dec0f207442090c  libgo/go/crypto/rand/rand_test.go
! 642eb8ded474b739d61ae0571528caf0  libgo/go/crypto/rand/rand_unix.go
  7cf4992fa65701a4a2540f04c701edde  libgo/go/crypto/rand/rand_windows.go
  e75d13daca9a534d8c9cd611e5ba6ffc  libgo/go/crypto/rand/util.go
  5280043695d6d553f0deca76f9c1c1a1  libgo/go/crypto/rand/util_test.go
*************** c1e097bbd571c427229aed459110e1db  libgo/
*** 90388,90525 ****
  1beb834fae7fc1fb88ccb0995e143530  libgo/go/crypto/rsa/example_test.go
  06d63094db340ee11d1644444876692f  libgo/go/crypto/rsa/pkcs1v15.go
  632f7da30e49c832040685897659456a  libgo/go/crypto/rsa/pkcs1v15_test.go
! aa6a91b7d20ebdfa4e4461bd6442ab91  libgo/go/crypto/rsa/pss.go
! 4ef2e2436a726f7519f039b0c9909d73  libgo/go/crypto/rsa/pss_test.go
! c464c46171d124053a4dc80cd11b2a60  libgo/go/crypto/rsa/rsa.go
  b5f6d9451a7d175381c880ccfe20d86d  libgo/go/crypto/rsa/rsa_test.go
  164dcaca31277eda4b7aaeec705a46c8  libgo/go/crypto/rsa/testdata/pss-vect.txt.bz2
! 886be768c52b2baa7c7ecc36a53392f6  libgo/go/crypto/sha1/fallback_test.go
! 5d4d18f168eed89bda710584887e6233  libgo/go/crypto/sha1/issue15617_test.go
  c0dc88d96d53454b1748d00060cd2df6  libgo/go/crypto/sha1/sha1.go
! 8d1fa03f0624acb07649c7135999483f  libgo/go/crypto/sha1/sha1_test.go
  97a62563370ef65aa421f2986c766893  libgo/go/crypto/sha1/sha1block.go
  4ebe77c031daff6d9d486700716cdba2  libgo/go/crypto/sha1/sha1block_amd64.go
  3e164a5a6d0ad81626b84529aa72fab2  libgo/go/crypto/sha1/sha1block_arm64.go
! 39efd1dfbd89c21aabe124ddc7430b19  libgo/go/crypto/sha1/sha1block_decl.go
! 4970ba6fd098ec9cb4d8c6dadac3a8ee  libgo/go/crypto/sha1/sha1block_generic.go
  7edd9698c6143ea28d05206367d405d0  libgo/go/crypto/sha1/sha1block_s390x.go
  e901664233fd93832e7499945ef66107  libgo/go/crypto/sha256/example_test.go
! 23073c440e1de9767d0f9e25226b266b  libgo/go/crypto/sha256/fallback_test.go
! 3c67e87a6131d0af1da61b3996ff041a  libgo/go/crypto/sha256/sha256.go
! c6f12de71d58ecafed850ac85e7de845  libgo/go/crypto/sha256/sha256_test.go
  382c9bf0225660ec293cb9ea04f3c42d  libgo/go/crypto/sha256/sha256block.go
  e37f0ac97ae37f7dd1e726b9965e575a  libgo/go/crypto/sha256/sha256block_amd64.go
  e23ab5fdc76592a4f5dc09d2882e34c7  libgo/go/crypto/sha256/sha256block_arm64.go
! c0ccca27330c109cf261c6640c3c8446  libgo/go/crypto/sha256/sha256block_decl.go
! 6fd17124ad3afd74ce6d5254500b554e  libgo/go/crypto/sha256/sha256block_generic.go
  cc808d9b6ac022e82c4501a5bfd283da  libgo/go/crypto/sha256/sha256block_s390x.go
! 7d42ee3c9a4e2c573f3065d523f5d279  libgo/go/crypto/sha512/fallback_test.go
! 24951e16b0dabd6618465e6b169a1e81  libgo/go/crypto/sha512/sha512.go
! af3da4ebe2fbed7fd7ecd6d7bbc503e9  libgo/go/crypto/sha512/sha512_test.go
  610c117fe37cd7883af5944fb15efead  libgo/go/crypto/sha512/sha512block.go
! 84648a2dea26c9969bde5a382bbac7ad  libgo/go/crypto/sha512/sha512block_amd64.go
! e86a6f534f375062e63acaad00707dad  libgo/go/crypto/sha512/sha512block_decl.go
! 038d3674424f0dd5d7a585171588b58a  libgo/go/crypto/sha512/sha512block_generic.go
  40cea3fa4bde06c8572e87fad431784d  libgo/go/crypto/sha512/sha512block_s390x.go
  7c4dfa85f6bd1558e9c4e6f0856eb776  libgo/go/crypto/subtle/constant_time.go
  24a0e131c0fe0854057b893333a9d345  libgo/go/crypto/subtle/constant_time_test.go
  ffb037cc0f610f1a0bf525c58563c3bb  libgo/go/crypto/tls/alert.go
  25e84204a83692c6e404e9681d45b7cb  libgo/go/crypto/tls/auth.go
  02915594a831b3476e65c122d3cf173a  libgo/go/crypto/tls/auth_test.go
! d5cf8140c11b51c979651fba81912766  libgo/go/crypto/tls/cipher_suites.go
! 0be0bf165dd0d0fb5ee39705f080ed79  libgo/go/crypto/tls/common.go
  f5d22c7d084a2cb43d32a9ccbd4bd4ee  libgo/go/crypto/tls/common_string.go
! 69e3f9b47b1cd89ff491601fefa8991f  libgo/go/crypto/tls/conn.go
  6948a81b470020b87c20d0aa71de1bfd  libgo/go/crypto/tls/conn_test.go
  1e4c9666f505813e54ed2b3d4056d2f8  libgo/go/crypto/tls/example_test.go
! e2323c9e784e5e135871aa27ad4fc263  libgo/go/crypto/tls/generate_cert.go
! e92e8806811a956a9195fb2972cfdf05  libgo/go/crypto/tls/handshake_client.go
! fc81278cb93dbaf194469547fd6db099  libgo/go/crypto/tls/handshake_client_test.go
! 02e4e3049ada3475c9cf2a8013818c0d  libgo/go/crypto/tls/handshake_client_tls13.go
! abfdf6660ed14979b84023ced6bcb1ce  libgo/go/crypto/tls/handshake_messages.go
! 9458e121c070ab03cbc896ec1ba75d02  libgo/go/crypto/tls/handshake_messages_test.go
! 9cb3039fdf437490719ab7522f8f6a27  libgo/go/crypto/tls/handshake_server.go
! 1dd58618f08b1251c339c156c02c5397  libgo/go/crypto/tls/handshake_server_test.go
! 92b8814efb369f95cfb764078465d332  libgo/go/crypto/tls/handshake_server_tls13.go
! c6d1d325bc6276875d33d2945cce0f2e  libgo/go/crypto/tls/handshake_test.go
! a105030d37b852be09c79ab64711c30c  libgo/go/crypto/tls/handshake_unix_test.go
! de4d4e319b659530ccf13b712b85e7bc  libgo/go/crypto/tls/key_agreement.go
  aa7a95034a03be2806fa57040be5dc21  libgo/go/crypto/tls/key_schedule.go
  b98cc62e868e434daafbce170d3d29d4  libgo/go/crypto/tls/key_schedule_test.go
  1f6ce4e721cd7e630fef1020741f99fb  libgo/go/crypto/tls/link_test.go
  a498585344ed13cdf9b6422f4d91a1eb  libgo/go/crypto/tls/prf.go
  f83a9bcb2792661f0a2508c44f3f1c3f  libgo/go/crypto/tls/prf_test.go
! b8c0d2aebd6ba06d54bb267af6994da8  libgo/go/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-ECDSA
! 34fe70b73738d1c420b050ceba7008da  libgo/go/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-RSA
  318d50dda859aa563e1ce88d359936e4  libgo/go/crypto/tls/testdata/Client-TLSv10-ClientCert-Ed25519
! 43fd64e7ce5472499bd1403c59589729  libgo/go/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-ECDSA
! 3d163af5ab6f189808238d6d842d95d9  libgo/go/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-RSA
! 3adf59b199cddff109b92c985f419474  libgo/go/crypto/tls/testdata/Client-TLSv10-ECDHE-ECDSA-AES
! db1114c5fa8884b62a5f4e2d216dbad8  libgo/go/crypto/tls/testdata/Client-TLSv10-ECDHE-RSA-AES
  d41d8cd98f00b204e9800998ecf8427e  libgo/go/crypto/tls/testdata/Client-TLSv10-Ed25519
! ba50359a6dd7b168a94c90bc58174fab  libgo/go/crypto/tls/testdata/Client-TLSv10-ExportKeyingMaterial
! 2a454d203a54eda6e6d0283aecf751cb  libgo/go/crypto/tls/testdata/Client-TLSv10-RSA-RC4
! d0762ced237295f9e8d0a7e334e67556  libgo/go/crypto/tls/testdata/Client-TLSv11-ECDHE-ECDSA-AES
! 36468eba3a330bcfb73ac435835e41e4  libgo/go/crypto/tls/testdata/Client-TLSv11-ECDHE-RSA-AES
  d41d8cd98f00b204e9800998ecf8427e  libgo/go/crypto/tls/testdata/Client-TLSv11-Ed25519
! 1abad435e95248db37096d82bc9dd295  libgo/go/crypto/tls/testdata/Client-TLSv11-RSA-RC4
! bbda6e969acded1d08a440a2d90abd25  libgo/go/crypto/tls/testdata/Client-TLSv12-AES128-GCM-SHA256
! 8a3e9f9f573d731ab39e3f2e4e6bfb86  libgo/go/crypto/tls/testdata/Client-TLSv12-AES128-SHA256
! ae4fc81aff3ba9cbe4225b4ac409f033  libgo/go/crypto/tls/testdata/Client-TLSv12-AES256-GCM-SHA384
! 642bedb4bdf45cb8a2a116fc1f08193a  libgo/go/crypto/tls/testdata/Client-TLSv12-ALPN
  81b50093430f5cef3d1f2517c004bb8b  libgo/go/crypto/tls/testdata/Client-TLSv12-ALPN-NoMatch
! d9fd379448fad5e2cad6dd064be51da7  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-ECDSA
! 584653c3ba6474bf5b362a7780c1bf22  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-RSA
! b7faec9a9cb4b09f545d3158627637d3  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-Ed25519
! 5163196b3556c26b94611b97e491c938  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-AES256-GCM-SHA384
! 09768db9b148cc5c36551f0704f7216c  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-ECDSA
! eae8a4da8f2aa0b30a69c63381d2c48f  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSA
! de2bd8e8005e1be03f1a9420b888ead0  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPKCS1v15
! 12897904d2c7048c641bb19a659e3cc9  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPSS
! febd0535884e0a3568b6ba72f9aa0800  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES
! 24e7bec03544a2cb49f754b13be2fcc7  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES-GCM
! df3f573289b38ec3fe1f2b06ce9efe0c  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES128-SHA256
! af8cbe354eb0d216b4c3e75e8599a6cf  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES256-GCM-SHA384
! de16cc8be6fb75821775284a61993e93  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-CHACHA20-POLY1305
! a5676c625c3c4611473c64f7821dcc8f  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES
! d7070cf9229471596a46859af0955091  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES128-SHA256
! cf8315b5d88f089c77bbf3378ffbd0d3  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-CHACHA20-POLY1305
! 620e7d994c6259c2bb7cc879b4c87859  libgo/go/crypto/tls/testdata/Client-TLSv12-Ed25519
! 1db9e7e17f2350fa5acb69babf3189bd  libgo/go/crypto/tls/testdata/Client-TLSv12-ExportKeyingMaterial
! f2e5a9f5f387da5b7934e008ed8bd5a6  libgo/go/crypto/tls/testdata/Client-TLSv12-P256-ECDHE
! 0803b608ab1253c908a65019393d6a46  libgo/go/crypto/tls/testdata/Client-TLSv12-RSA-RC4
! bb7595d67e6aea8db23a203e98705713  libgo/go/crypto/tls/testdata/Client-TLSv12-RenegotiateOnce
! 58cfdd616e37b3e1ab76c82986c91224  libgo/go/crypto/tls/testdata/Client-TLSv12-RenegotiateTwice
! a2a5e5904f862e455e191f96a3a46c52  libgo/go/crypto/tls/testdata/Client-TLSv12-RenegotiateTwiceRejected
! 219aba2c5f6682b18e5cafc57a44b16b  libgo/go/crypto/tls/testdata/Client-TLSv12-RenegotiationRejected
! 30bc4ff6eec54f7f0a2a0f74eeb40e0b  libgo/go/crypto/tls/testdata/Client-TLSv12-SCT
! a3cc88e303ab93c8fa51f594e466b9e2  libgo/go/crypto/tls/testdata/Client-TLSv12-X25519-ECDHE
! bf869c04909619a289a04ba6669c01ea  libgo/go/crypto/tls/testdata/Client-TLSv13-AES128-SHA256
! bae3457472bd9e67ea8d69f1a9eabb78  libgo/go/crypto/tls/testdata/Client-TLSv13-AES256-SHA384
! 1c7698090c4d280fa69489ca1a1fac0c  libgo/go/crypto/tls/testdata/Client-TLSv13-ALPN
! ece6ec27abcd73458d94ee40ea6c6c1e  libgo/go/crypto/tls/testdata/Client-TLSv13-CHACHA20-SHA256
! b88052ccd1e9b6e786716ef9d9f9252a  libgo/go/crypto/tls/testdata/Client-TLSv13-ClientCert-ECDSA-RSA
! f5cfd07dc4dc87492c6874b02aa29b96  libgo/go/crypto/tls/testdata/Client-TLSv13-ClientCert-Ed25519
! e70c1b039099b91536cdc5d702f2d451  libgo/go/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-ECDSA
! 9fb5f21037daecddc413db34fec7a7e9  libgo/go/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-RSAPSS
! 9eaceba278ac4936c65e4dc4b200d76e  libgo/go/crypto/tls/testdata/Client-TLSv13-ECDSA
! c051f6b03cc94df6a308e063cdca1425  libgo/go/crypto/tls/testdata/Client-TLSv13-Ed25519
! 177d847b686b4a2d62be05090ecad733  libgo/go/crypto/tls/testdata/Client-TLSv13-ExportKeyingMaterial
! c924bb71ee2e9a7b285a7396badfe209  libgo/go/crypto/tls/testdata/Client-TLSv13-HelloRetryRequest
! be58274cfd1ec54f00569371c2958f7d  libgo/go/crypto/tls/testdata/Client-TLSv13-KeyUpdate
! 13bc92092741f980459efc907bbf3206  libgo/go/crypto/tls/testdata/Client-TLSv13-P256-ECDHE
! 86a5e7745772c687ff14b4b4249dbad3  libgo/go/crypto/tls/testdata/Client-TLSv13-X25519-ECDHE
  8a35f9d6111362221232ee2ac91daa5c  libgo/go/crypto/tls/testdata/Server-TLSv10-ECDHE-ECDSA-AES
! e4d506412483d9d24d78eda89be2aa10  libgo/go/crypto/tls/testdata/Server-TLSv10-ExportKeyingMaterial
  979b9a5c28b19ee9596fd6f33963eb84  libgo/go/crypto/tls/testdata/Server-TLSv10-RSA-3DES
  fadd2d0370b181146bc89aa16c62b1cc  libgo/go/crypto/tls/testdata/Server-TLSv10-RSA-AES
  4fca5f34631ee17bae6fd95e2573f5f2  libgo/go/crypto/tls/testdata/Server-TLSv10-RSA-RC4
  7d26f337261af1876f06a9d1a302bcfd  libgo/go/crypto/tls/testdata/Server-TLSv11-FallbackSCSV
  cf9907844ce26b93f3d6cb22c7098dae  libgo/go/crypto/tls/testdata/Server-TLSv11-RSA-RC4
  19e36eaf1adc5b6e10048b9bc8015557  libgo/go/crypto/tls/testdata/Server-TLSv12-ALPN
! 6a2a1b31f2ff9e3215b0da673ac92800  libgo/go/crypto/tls/testdata/Server-TLSv12-ALPN-NoMatch
! 3705e63ae94c8d7e5b4d6cdc117e0b0c  libgo/go/crypto/tls/testdata/Server-TLSv12-CipherSuiteCertPreferenceECDSA
! 41e6b12f748a8f356f63222231343da3  libgo/go/crypto/tls/testdata/Server-TLSv12-CipherSuiteCertPreferenceRSA
  cc7876ba528c34cfa660b4806e8d95f2  libgo/go/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndECDSAGiven
  3591b5da1873d7db628f8d4f30c010f5  libgo/go/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndEd25519Given
  5b3ef9ce382f8c6b9dca671ec717c335  libgo/go/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndGiven
--- 96567,96704 ----
  1beb834fae7fc1fb88ccb0995e143530  libgo/go/crypto/rsa/example_test.go
  06d63094db340ee11d1644444876692f  libgo/go/crypto/rsa/pkcs1v15.go
  632f7da30e49c832040685897659456a  libgo/go/crypto/rsa/pkcs1v15_test.go
! e600fd821647617ae568c86481353e56  libgo/go/crypto/rsa/pss.go
! 648457f06f6f2afdec41dec2a9a2cd1e  libgo/go/crypto/rsa/pss_test.go
! c4b4520bf84f65aafb6bd221d4fa5d39  libgo/go/crypto/rsa/rsa.go
  b5f6d9451a7d175381c880ccfe20d86d  libgo/go/crypto/rsa/rsa_test.go
  164dcaca31277eda4b7aaeec705a46c8  libgo/go/crypto/rsa/testdata/pss-vect.txt.bz2
! fbea2164595b6dced804fd640bcdb3ee  libgo/go/crypto/sha1/fallback_test.go
! 9d279d3c4c839c31a8ad47562a092592  libgo/go/crypto/sha1/issue15617_test.go
  c0dc88d96d53454b1748d00060cd2df6  libgo/go/crypto/sha1/sha1.go
! 868d2da3dd4dda215e0a2f1259a66140  libgo/go/crypto/sha1/sha1_test.go
  97a62563370ef65aa421f2986c766893  libgo/go/crypto/sha1/sha1block.go
  4ebe77c031daff6d9d486700716cdba2  libgo/go/crypto/sha1/sha1block_amd64.go
  3e164a5a6d0ad81626b84529aa72fab2  libgo/go/crypto/sha1/sha1block_arm64.go
! c6e86ec7b3c4f474ccca9282a4175a45  libgo/go/crypto/sha1/sha1block_decl.go
! a037f3a2fc43b330ee9e21235dfd8fd6  libgo/go/crypto/sha1/sha1block_generic.go
  7edd9698c6143ea28d05206367d405d0  libgo/go/crypto/sha1/sha1block_s390x.go
  e901664233fd93832e7499945ef66107  libgo/go/crypto/sha256/example_test.go
! fb12d760316722fbcc1e7d3becdd115c  libgo/go/crypto/sha256/fallback_test.go
! 586cbd8f6d4342f71c8f177ad81e1f3e  libgo/go/crypto/sha256/sha256.go
! ce34e2dbf1e8917d4d18eb2013deea84  libgo/go/crypto/sha256/sha256_test.go
  382c9bf0225660ec293cb9ea04f3c42d  libgo/go/crypto/sha256/sha256block.go
  e37f0ac97ae37f7dd1e726b9965e575a  libgo/go/crypto/sha256/sha256block_amd64.go
  e23ab5fdc76592a4f5dc09d2882e34c7  libgo/go/crypto/sha256/sha256block_arm64.go
! 561c9ac680d35c4d5a7ae17f5572ecf3  libgo/go/crypto/sha256/sha256block_decl.go
! a0bc0fcec200a1e586ba61b203cc2ab3  libgo/go/crypto/sha256/sha256block_generic.go
  cc808d9b6ac022e82c4501a5bfd283da  libgo/go/crypto/sha256/sha256block_s390x.go
! 04ffa30d112639a4286364e4ec8b48cc  libgo/go/crypto/sha512/fallback_test.go
! 6a2d08f836221dc15b6f364c42d562fb  libgo/go/crypto/sha512/sha512.go
! 0aabf0cb254779bc25046183e3058ac7  libgo/go/crypto/sha512/sha512_test.go
  610c117fe37cd7883af5944fb15efead  libgo/go/crypto/sha512/sha512block.go
! 60c9b0dfcab9b4a9b72f461471465e64  libgo/go/crypto/sha512/sha512block_amd64.go
! ea6cf00847d689f4e8946b5cbd4ae82f  libgo/go/crypto/sha512/sha512block_decl.go
! 8b1f186ed7f455ce912c4a2a070a019d  libgo/go/crypto/sha512/sha512block_generic.go
  40cea3fa4bde06c8572e87fad431784d  libgo/go/crypto/sha512/sha512block_s390x.go
  7c4dfa85f6bd1558e9c4e6f0856eb776  libgo/go/crypto/subtle/constant_time.go
  24a0e131c0fe0854057b893333a9d345  libgo/go/crypto/subtle/constant_time_test.go
  ffb037cc0f610f1a0bf525c58563c3bb  libgo/go/crypto/tls/alert.go
  25e84204a83692c6e404e9681d45b7cb  libgo/go/crypto/tls/auth.go
  02915594a831b3476e65c122d3cf173a  libgo/go/crypto/tls/auth_test.go
! 20dd0e73bf07673b5f2a2652471874cc  libgo/go/crypto/tls/cipher_suites.go
! cd22117084312f957a4252abca36e398  libgo/go/crypto/tls/common.go
  f5d22c7d084a2cb43d32a9ccbd4bd4ee  libgo/go/crypto/tls/common_string.go
! dcdcea9380167bc0fc31fbcc9ae7cd70  libgo/go/crypto/tls/conn.go
  6948a81b470020b87c20d0aa71de1bfd  libgo/go/crypto/tls/conn_test.go
  1e4c9666f505813e54ed2b3d4056d2f8  libgo/go/crypto/tls/example_test.go
! 6c121e7342c13fdc786312f66d8dbb99  libgo/go/crypto/tls/generate_cert.go
! 92c22ddf04bfc1134e9ce858e4fe63d1  libgo/go/crypto/tls/handshake_client.go
! b1c3932241580b99b951fae0edb61fd8  libgo/go/crypto/tls/handshake_client_test.go
! 0427ef397843c02f3be96cfacd0f14a3  libgo/go/crypto/tls/handshake_client_tls13.go
! 46b69f2680156d5e71cb8c6ae2343e94  libgo/go/crypto/tls/handshake_messages.go
! 0945ccb0c15b2deb95d8ca2b33b0ea54  libgo/go/crypto/tls/handshake_messages_test.go
! 5acf20b462aafc7a101527ee55f5c865  libgo/go/crypto/tls/handshake_server.go
! 2b8b5b21bf0ce23f0cc1267b74babf93  libgo/go/crypto/tls/handshake_server_test.go
! 4de3e07cdf2105cfcbfc08e792804987  libgo/go/crypto/tls/handshake_server_tls13.go
! b064ac2d0b92b42852f6ecd68366b46d  libgo/go/crypto/tls/handshake_test.go
! 9a32a638fe102dd2d9c10bdc7fea9e5e  libgo/go/crypto/tls/handshake_unix_test.go
! a7f68e8d2ee39cb8a707a0e0eba8ca47  libgo/go/crypto/tls/key_agreement.go
  aa7a95034a03be2806fa57040be5dc21  libgo/go/crypto/tls/key_schedule.go
  b98cc62e868e434daafbce170d3d29d4  libgo/go/crypto/tls/key_schedule_test.go
  1f6ce4e721cd7e630fef1020741f99fb  libgo/go/crypto/tls/link_test.go
  a498585344ed13cdf9b6422f4d91a1eb  libgo/go/crypto/tls/prf.go
  f83a9bcb2792661f0a2508c44f3f1c3f  libgo/go/crypto/tls/prf_test.go
! 0618615a9c3e04eb7faf1b1842d4009d  libgo/go/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-ECDSA
! 76243bd093472582bf3c282a6ea2a2b1  libgo/go/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-RSA
  318d50dda859aa563e1ce88d359936e4  libgo/go/crypto/tls/testdata/Client-TLSv10-ClientCert-Ed25519
! ccbe71f57c69c4e34765f7626d693f2a  libgo/go/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-ECDSA
! b6a49d0d05bfd3740a9f3421a7823e3a  libgo/go/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-RSA
! 264d6bb6f6a82c1c248a9ecbb383979f  libgo/go/crypto/tls/testdata/Client-TLSv10-ECDHE-ECDSA-AES
! c172a4e672d430e9593f60dc147c1152  libgo/go/crypto/tls/testdata/Client-TLSv10-ECDHE-RSA-AES
  d41d8cd98f00b204e9800998ecf8427e  libgo/go/crypto/tls/testdata/Client-TLSv10-Ed25519
! 60bc013f2734afd4b1c184dc158f428a  libgo/go/crypto/tls/testdata/Client-TLSv10-ExportKeyingMaterial
! 4c1c76935a6db5dd7675e96dae750821  libgo/go/crypto/tls/testdata/Client-TLSv10-RSA-RC4
! 47a6feeb4746b7f4c121d49cfa0aa810  libgo/go/crypto/tls/testdata/Client-TLSv11-ECDHE-ECDSA-AES
! 133576fee51b4ef6ac51579ae29bdbf7  libgo/go/crypto/tls/testdata/Client-TLSv11-ECDHE-RSA-AES
  d41d8cd98f00b204e9800998ecf8427e  libgo/go/crypto/tls/testdata/Client-TLSv11-Ed25519
! f1c036ae277ef1f8be885d0fda7bbd94  libgo/go/crypto/tls/testdata/Client-TLSv11-RSA-RC4
! 0be555e000fd7d1d004fcef59cf39c98  libgo/go/crypto/tls/testdata/Client-TLSv12-AES128-GCM-SHA256
! 0b122279f3399ff7d18ef0b23dc17076  libgo/go/crypto/tls/testdata/Client-TLSv12-AES128-SHA256
! 67309789cba5b677944359e5aeed843c  libgo/go/crypto/tls/testdata/Client-TLSv12-AES256-GCM-SHA384
! b37c7b19d7d7b79c9b1154979301b11a  libgo/go/crypto/tls/testdata/Client-TLSv12-ALPN
  81b50093430f5cef3d1f2517c004bb8b  libgo/go/crypto/tls/testdata/Client-TLSv12-ALPN-NoMatch
! 00fd154d9a53ee8bdd408feb50179650  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-ECDSA
! 44ea9ecf171353da0687b9f4692fa75f  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-RSA
! b982e04ef4bf4750390fd1a8dbd13d82  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-Ed25519
! 961524154e5bd742ca82e6858e4baba1  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-AES256-GCM-SHA384
! f504cf594545247956a825d300c18d0d  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-ECDSA
! 27c699913560332101f993081b431962  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSA
! e1c334e02aeb7982806012953191b82a  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPKCS1v15
! 176878c1cb3b912beabe4e71dc5a5595  libgo/go/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPSS
! c77d43318319c104dd6d66a56faa622d  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES
! 4f0bf53f86e9d6d53a649d7384235576  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES-GCM
! 85827867f568d372e4d6d2ac5c1b2e80  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES128-SHA256
! 3d77b0316307f693f8f487ed776803fe  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES256-GCM-SHA384
! 6cd73a72da79a029da5ceece9d7fb132  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-CHACHA20-POLY1305
! ff31572b3f8260257cf6ba03a6050209  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES
! 731b0a82b4e1796055bc1b2659de97f7  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES128-SHA256
! 6848fc152603fd6eb1d0a3e8bf4d0133  libgo/go/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-CHACHA20-POLY1305
! f4d1b0856ec5e52466c5b45db67c6243  libgo/go/crypto/tls/testdata/Client-TLSv12-Ed25519
! bdf5460e62d6a3039154a14cbd96d2ae  libgo/go/crypto/tls/testdata/Client-TLSv12-ExportKeyingMaterial
! c9f70a62e8a50d31432e41281bb16020  libgo/go/crypto/tls/testdata/Client-TLSv12-P256-ECDHE
! 901e90988120fefe1a27b412499b637a  libgo/go/crypto/tls/testdata/Client-TLSv12-RSA-RC4
! f2c73377a192bbd753c30b39e77ab061  libgo/go/crypto/tls/testdata/Client-TLSv12-RenegotiateOnce
! 140be4f0a5f8d3b99479aa5839b801b2  libgo/go/crypto/tls/testdata/Client-TLSv12-RenegotiateTwice
! dbf679c9708f471e73341266972b2202  libgo/go/crypto/tls/testdata/Client-TLSv12-RenegotiateTwiceRejected
! 10f9e700540382565ed9ae2cc7c08d7b  libgo/go/crypto/tls/testdata/Client-TLSv12-RenegotiationRejected
! 1ae1c9a6b1a3997e4c8c5a5c99a274f1  libgo/go/crypto/tls/testdata/Client-TLSv12-SCT
! 67b5af881a65d7a974f5d4f406dfbb91  libgo/go/crypto/tls/testdata/Client-TLSv12-X25519-ECDHE
! b025f6c5d6013d915bc47d3c116fc82f  libgo/go/crypto/tls/testdata/Client-TLSv13-AES128-SHA256
! b16a5e09e9f926c94fac17e6d030a972  libgo/go/crypto/tls/testdata/Client-TLSv13-AES256-SHA384
! d2ff0c7507199f071a128a219909b050  libgo/go/crypto/tls/testdata/Client-TLSv13-ALPN
! adaafe9bdb299e0bab906a78bc0a7584  libgo/go/crypto/tls/testdata/Client-TLSv13-CHACHA20-SHA256
! 550f2a9a90c9381cb9a3655cd852929b  libgo/go/crypto/tls/testdata/Client-TLSv13-ClientCert-ECDSA-RSA
! e5db7fa307b602619d798fb874b05250  libgo/go/crypto/tls/testdata/Client-TLSv13-ClientCert-Ed25519
! f7d3fb5e384db188ac9d22310deefb02  libgo/go/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-ECDSA
! c6e6d65ad4da3b293b35218b081fb3e0  libgo/go/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-RSAPSS
! ba2d761c1758464719e4f715dd6643f7  libgo/go/crypto/tls/testdata/Client-TLSv13-ECDSA
! f10b7dcad75a6b38887d02ca07e59530  libgo/go/crypto/tls/testdata/Client-TLSv13-Ed25519
! 62b0f07c1d9eef31bd70cf3669100410  libgo/go/crypto/tls/testdata/Client-TLSv13-ExportKeyingMaterial
! f433ba5e843dc97f2926f772c11d10e7  libgo/go/crypto/tls/testdata/Client-TLSv13-HelloRetryRequest
! 311e0a5317bd5c8f577548884825c05c  libgo/go/crypto/tls/testdata/Client-TLSv13-KeyUpdate
! afaf46ae30ca7459b4d16570635d7f6b  libgo/go/crypto/tls/testdata/Client-TLSv13-P256-ECDHE
! 46539e0baeaec3079384de009bee8a6b  libgo/go/crypto/tls/testdata/Client-TLSv13-X25519-ECDHE
  8a35f9d6111362221232ee2ac91daa5c  libgo/go/crypto/tls/testdata/Server-TLSv10-ECDHE-ECDSA-AES
! 99491cac9f347dc7dfcbbd6a264d349b  libgo/go/crypto/tls/testdata/Server-TLSv10-ExportKeyingMaterial
  979b9a5c28b19ee9596fd6f33963eb84  libgo/go/crypto/tls/testdata/Server-TLSv10-RSA-3DES
  fadd2d0370b181146bc89aa16c62b1cc  libgo/go/crypto/tls/testdata/Server-TLSv10-RSA-AES
  4fca5f34631ee17bae6fd95e2573f5f2  libgo/go/crypto/tls/testdata/Server-TLSv10-RSA-RC4
  7d26f337261af1876f06a9d1a302bcfd  libgo/go/crypto/tls/testdata/Server-TLSv11-FallbackSCSV
  cf9907844ce26b93f3d6cb22c7098dae  libgo/go/crypto/tls/testdata/Server-TLSv11-RSA-RC4
  19e36eaf1adc5b6e10048b9bc8015557  libgo/go/crypto/tls/testdata/Server-TLSv12-ALPN
! 30cbaf66a73ff709597fd67fd3e02b0e  libgo/go/crypto/tls/testdata/Server-TLSv12-ALPN-Fallback
! a7f039bda6d93839b08e22c8b288cba2  libgo/go/crypto/tls/testdata/Server-TLSv12-ALPN-NoMatch
! 24bba92ad46c7443c60155697500ac0b  libgo/go/crypto/tls/testdata/Server-TLSv12-ALPN-NotConfigured
  cc7876ba528c34cfa660b4806e8d95f2  libgo/go/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndECDSAGiven
  3591b5da1873d7db628f8d4f30c010f5  libgo/go/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndEd25519Given
  5b3ef9ce382f8c6b9dca671ec717c335  libgo/go/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndGiven
*************** ac747971f61e396ec1ebe11a05715800  libgo/
*** 90547,90553 ****
  ad4bb8c8fa389088f86c8dfa7cd798e6  libgo/go/crypto/tls/testdata/Server-TLSv13-AES128-SHA256
  9d26ff8f2a3bf1834cb055fc14662e88  libgo/go/crypto/tls/testdata/Server-TLSv13-AES256-SHA384
  599bf831ad82cb6af9d4096d22a197ca  libgo/go/crypto/tls/testdata/Server-TLSv13-ALPN
! 071ea0da163a59679d50393e1acb621f  libgo/go/crypto/tls/testdata/Server-TLSv13-ALPN-NoMatch
  b892c2dcef373b878ff2d0715366110c  libgo/go/crypto/tls/testdata/Server-TLSv13-CHACHA20-SHA256
  a346cc436f327e3c69680b345bea8483  libgo/go/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndECDSAGiven
  23bf51657b1c03171885dd43085dd60b  libgo/go/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndEd25519Given
--- 96726,96734 ----
  ad4bb8c8fa389088f86c8dfa7cd798e6  libgo/go/crypto/tls/testdata/Server-TLSv13-AES128-SHA256
  9d26ff8f2a3bf1834cb055fc14662e88  libgo/go/crypto/tls/testdata/Server-TLSv13-AES256-SHA384
  599bf831ad82cb6af9d4096d22a197ca  libgo/go/crypto/tls/testdata/Server-TLSv13-ALPN
! 60974f7d59c34c75f6103043df8528a5  libgo/go/crypto/tls/testdata/Server-TLSv13-ALPN-Fallback
! 3653b87fef155002fda1239860cf9311  libgo/go/crypto/tls/testdata/Server-TLSv13-ALPN-NoMatch
! fb77806c806432f8375d3d663e1ef434  libgo/go/crypto/tls/testdata/Server-TLSv13-ALPN-NotConfigured
  b892c2dcef373b878ff2d0715366110c  libgo/go/crypto/tls/testdata/Server-TLSv13-CHACHA20-SHA256
  a346cc436f327e3c69680b345bea8483  libgo/go/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndECDSAGiven
  23bf51657b1c03171885dd43085dd60b  libgo/go/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndEd25519Given
*************** d6a3256a046d57feca0ff021235c9ede  libgo/
*** 90569,90634 ****
  2f28864b82258ed5eaf4bbec2254a0d6  libgo/go/crypto/tls/testdata/example-cert.pem
  e2ec9bd8f6f42c104c048bb324bf00d7  libgo/go/crypto/tls/testdata/example-key.pem
  e0281d4b0d8067540dc185550b995938  libgo/go/crypto/tls/ticket.go
! 84229f90ab43909ed3b7d321222fbd2f  libgo/go/crypto/tls/tls.go
! d1635f555d1d8e46eb8697fee769470e  libgo/go/crypto/tls/tls_test.go
! ca9462c0020e0ad94b34f1bde5ea7aa2  libgo/go/crypto/x509/cert_pool.go
! 4e8f3124ead5100e098f9d0d93651443  libgo/go/crypto/x509/internal/macos/corefoundation.go
! d47875d1c1d95d96f1463b14c1b3cf0b  libgo/go/crypto/x509/internal/macos/security.go
! 7828850a2815d8a826f0d4b775cff1b9  libgo/go/crypto/x509/name_constraints_test.go
! 28f99bcfe0c23c5be4370a85ac4010d7  libgo/go/crypto/x509/pem_decrypt.go
  55ba8377b99cdcb798b75e8749e49d45  libgo/go/crypto/x509/pem_decrypt_test.go
  1255a59ccc8d75bc9845213c27d272ed  libgo/go/crypto/x509/pkcs1.go
! ffe52c837386e3f097aa22525659a764  libgo/go/crypto/x509/pkcs8.go
  61a7cff3e2916004065025a4a62666be  libgo/go/crypto/x509/pkcs8_test.go
! 0d678edc4b07c5a4037f4e292f301783  libgo/go/crypto/x509/pkix/pkix.go
! 8b0ecf8aa3e747c0d7461540d730c5b9  libgo/go/crypto/x509/root.go
! c946c905b6af2773a7b9ec63f6783462  libgo/go/crypto/x509/root_aix.go
! 6b110eebc55d7f6619579c9899d324c2  libgo/go/crypto/x509/root_bsd.go
! 06b28bef8ecc003b0ff7584e2830e0cf  libgo/go/crypto/x509/root_darwin.go
  7520b592de05803bc8987571f3a55035  libgo/go/crypto/x509/root_hurd.go
! 7988a1ff50e272611d784679248560a3  libgo/go/crypto/x509/root_ios.go
! ae966a28e3dd42ddcb40bba8dbd2686e  libgo/go/crypto/x509/root_ios_gen.go
! 655b7dde2ed17a7f9ee1a90158d917fc  libgo/go/crypto/x509/root_js.go
! 95a799d8c6ba6ba3d5f6d6277fd2eb8e  libgo/go/crypto/x509/root_linux.go
! 34e1b2dc96dffbfcabd6a0c94069072b  libgo/go/crypto/x509/root_omit.go
! a8e09427cd58becbf91e9b3114c6a2b1  libgo/go/crypto/x509/root_omit_test.go
! 48b8f019b4f6d184b62759df40384d15  libgo/go/crypto/x509/root_plan9.go
! fadfeafcc6db85e649f82aec9da0f7a8  libgo/go/crypto/x509/root_solaris.go
! 24f3679cac7c6257f8db4fb9cd77e233  libgo/go/crypto/x509/root_unix.go
! 3322314f4fb861720f44d8c970885002  libgo/go/crypto/x509/root_unix_test.go
! a5fb94a5f352065db55ee87836e72371  libgo/go/crypto/x509/root_windows.go
  1d434a92ae23d60f7c2fbf0e0e194225  libgo/go/crypto/x509/sec1.go
  cecdc706396bf89248a2f067b663c0cd  libgo/go/crypto/x509/sec1_test.go
  18202f8d63fb43e053de6458d55872ad  libgo/go/crypto/x509/test-file.crt
  53c378bcca2793c3fa7a4df52707eb56  libgo/go/crypto/x509/testdata/test-dir.crt
! a422702ebe2b0a7679649e4f751e00b3  libgo/go/crypto/x509/verify.go
! bff0ccf5649e24c82cca3235ddb84d4c  libgo/go/crypto/x509/verify_test.go
! 4a9498015a7d1f363058f9301f1b47fa  libgo/go/crypto/x509/x509.go
! d1739a3dec9aeb4fb06700883ec7cffc  libgo/go/crypto/x509/x509_test.go
! 3132ca5e45245920caa072161fbe4f12  libgo/go/crypto/x509/x509_test_import.go
! b9ec55c3c325a1ee4868df47df4ced26  libgo/go/database/sql/convert.go
! 6de4c96cea91ae1df63a66bfaf09832e  libgo/go/database/sql/convert_test.go
  b22b8d2d363a6eab8942852ef826d0f4  libgo/go/database/sql/ctxutil.go
! 790f2bf00c8ae0745ac944b2fe370411  libgo/go/database/sql/driver/driver.go
! c5ba0d21f265f91954430abeaf452b68  libgo/go/database/sql/driver/types.go
! 1bf043969dce134c7ad69a556fb6834a  libgo/go/database/sql/driver/types_test.go
  e6321acca093a0f56c3f7d3cfc6e5f4e  libgo/go/database/sql/example_cli_test.go
  ab87746229e8a46ba621c5e16875c5cf  libgo/go/database/sql/example_service_test.go
! a3db9f2ae992fa5348f6747b98af05d4  libgo/go/database/sql/fakedb_test.go
! 590dafc75e7983f4fe3880bb97aafd3f  libgo/go/database/sql/sql.go
! dff028d25851566678a1fe9ec47596ac  libgo/go/database/sql/sql_test.go
  2cf5b361722255fae8e7192154b8402e  libgo/go/debug/dwarf/attr_string.go
  9174ba90e858174fe2f0669882d8e6c7  libgo/go/debug/dwarf/buf.go
  b46f4916a66938077e6031bf41dda9c6  libgo/go/debug/dwarf/class_string.go
! 384aeca0e25fa5c6b4df21e1543f8a24  libgo/go/debug/dwarf/const.go
  c28e0230ff0b0ee5802089ee60269016  libgo/go/debug/dwarf/dwarf5ranges_test.go
! aaf568df9a1d7d8db23d69720a8cf243  libgo/go/debug/dwarf/entry.go
! d2b7da91d468222484ab65bb98948f48  libgo/go/debug/dwarf/entry_test.go
  248287fbc820cab5a4276928ff9d7209  libgo/go/debug/dwarf/export_test.go
  6cc5cf17f9effa1deddee19588d11e1a  libgo/go/debug/dwarf/line.go
! 3b70091c3aa18dd00a7080f5b2baa0e0  libgo/go/debug/dwarf/line_test.go
  788715db62d3e90e17530e88471af5ad  libgo/go/debug/dwarf/open.go
  3bf2f8f5466e194ea1461667c4ccc3af  libgo/go/debug/dwarf/tag_string.go
  73bc9386f8192ed75607d4bde1ce2b42  libgo/go/debug/dwarf/testdata/cppunsuptypes.cc
  e04f9c38fe56385085e6b2ebd8564154  libgo/go/debug/dwarf/testdata/cppunsuptypes.elf
  c48488233d6ad5097bba0895351ae989  libgo/go/debug/dwarf/testdata/cycle.c
--- 96750,96817 ----
  2f28864b82258ed5eaf4bbec2254a0d6  libgo/go/crypto/tls/testdata/example-cert.pem
  e2ec9bd8f6f42c104c048bb324bf00d7  libgo/go/crypto/tls/testdata/example-key.pem
  e0281d4b0d8067540dc185550b995938  libgo/go/crypto/tls/ticket.go
! fb39d36797992586f3178188718b0c36  libgo/go/crypto/tls/tls.go
! 7f2c0871f5c00a0aeaa3fad129d50796  libgo/go/crypto/tls/tls_test.go
! fee50745a618969de6971115cea99c5b  libgo/go/crypto/x509/cert_pool.go
! 6ba0dbba8fd8e3ffecd7972e85cfdc83  libgo/go/crypto/x509/hybrid_pool_test.go
! 7fc12e96e70223731b3f6723c759bcee  libgo/go/crypto/x509/name_constraints_test.go
! 42b5f98d3d018073170bcdfe2c706a13  libgo/go/crypto/x509/parser.go
! 6ce766c96b4a36ac044417684913c340  libgo/go/crypto/x509/parser_test.go
! eef8ddc6e4b5ee9c59941926eec4d998  libgo/go/crypto/x509/pem_decrypt.go
  55ba8377b99cdcb798b75e8749e49d45  libgo/go/crypto/x509/pem_decrypt_test.go
  1255a59ccc8d75bc9845213c27d272ed  libgo/go/crypto/x509/pkcs1.go
! 3f9e16e3c2b491dd10ad3694a4f455e4  libgo/go/crypto/x509/pkcs8.go
  61a7cff3e2916004065025a4a62666be  libgo/go/crypto/x509/pkcs8_test.go
! 8e2eec6f8822e0659e523795c6681ba2  libgo/go/crypto/x509/pkix/pkix.go
! abc115df29bd2be75e546ea29777524d  libgo/go/crypto/x509/root.go
! d2cedada84bc8d7f2cfc30ed0f580e72  libgo/go/crypto/x509/root_aix.go
! 392291319abaa6a381821167c8f726e9  libgo/go/crypto/x509/root_bsd.go
! f61951b9fa949ed97adb7117312a3375  libgo/go/crypto/x509/root_darwin.go
  7520b592de05803bc8987571f3a55035  libgo/go/crypto/x509/root_hurd.go
! 6dd85ede35a46e8ce9e9a9e71934fab3  libgo/go/crypto/x509/root_js.go
! 0be7f63071db6de92f1748627b5dc08c  libgo/go/crypto/x509/root_linux.go
! 9c7da4e4f92effa500ad85cc6c393be6  libgo/go/crypto/x509/root_plan9.go
! 920c21293b00e897553891e9b539886b  libgo/go/crypto/x509/root_solaris.go
! 97e31634ce7261a2ef00a59ddbe90cfd  libgo/go/crypto/x509/root_unix.go
! fe1e24c462d0aa16e4a716c95fde7c54  libgo/go/crypto/x509/root_unix_test.go
! 9e0087a29663056382fb5dcd01188d55  libgo/go/crypto/x509/root_windows.go
! b8a6fdeff0fe0ea18f181c959b5658c6  libgo/go/crypto/x509/root_windows_test.go
  1d434a92ae23d60f7c2fbf0e0e194225  libgo/go/crypto/x509/sec1.go
  cecdc706396bf89248a2f067b663c0cd  libgo/go/crypto/x509/sec1_test.go
  18202f8d63fb43e053de6458d55872ad  libgo/go/crypto/x509/test-file.crt
  53c378bcca2793c3fa7a4df52707eb56  libgo/go/crypto/x509/testdata/test-dir.crt
! 0012735ed7ccc27669438b99e0b343e7  libgo/go/crypto/x509/verify.go
! af84b72a1df1ac49bab8c4c5b5dc017f  libgo/go/crypto/x509/verify_test.go
! e97f5a7f37b2a82ce041a35f6b8b5123  libgo/go/crypto/x509/x509.go
! 47a3319d911ce007f82084c551125f19  libgo/go/crypto/x509/x509_test.go
! 6bc6c2451a742471188cc2bfb0e61d5f  libgo/go/crypto/x509/x509_test_import.go
! 649fdba8a745f80fac84f5a6de20fba0  libgo/go/database/sql/convert.go
! 1e2d40c4ae5f6d67a09326f2c7b57ce2  libgo/go/database/sql/convert_test.go
  b22b8d2d363a6eab8942852ef826d0f4  libgo/go/database/sql/ctxutil.go
! 64a5615d8b7c68cd6d2a825e520c9886  libgo/go/database/sql/driver/driver.go
! d5fb0f18322cf280a94aba1a762ccfe5  libgo/go/database/sql/driver/types.go
! 41839f8c076452ce8e9b6eacb791505a  libgo/go/database/sql/driver/types_test.go
  e6321acca093a0f56c3f7d3cfc6e5f4e  libgo/go/database/sql/example_cli_test.go
  ab87746229e8a46ba621c5e16875c5cf  libgo/go/database/sql/example_service_test.go
! 7e06ec188b6e248f96588350f20774a6  libgo/go/database/sql/fakedb_test.go
! 04d16375bbe15c537297b6c2c91f1b39  libgo/go/database/sql/sql.go
! a701f5d52dd71e0eec958f728db306df  libgo/go/database/sql/sql_test.go
! 9843264b461708bdd8fac085e6d0fbc3  libgo/go/debug/buildinfo/buildinfo.go
! e510b103dcaad301e0f657c4606b0f89  libgo/go/debug/buildinfo/buildinfo_test.go
  2cf5b361722255fae8e7192154b8402e  libgo/go/debug/dwarf/attr_string.go
  9174ba90e858174fe2f0669882d8e6c7  libgo/go/debug/dwarf/buf.go
  b46f4916a66938077e6031bf41dda9c6  libgo/go/debug/dwarf/class_string.go
! e21bc41a0a4801561d7ffb8a3013b59c  libgo/go/debug/dwarf/const.go
  c28e0230ff0b0ee5802089ee60269016  libgo/go/debug/dwarf/dwarf5ranges_test.go
! aed48f1e13eee1c210d89a9c427504ba  libgo/go/debug/dwarf/entry.go
! 2bbffc578ee24808b5d06ead5691f898  libgo/go/debug/dwarf/entry_test.go
  248287fbc820cab5a4276928ff9d7209  libgo/go/debug/dwarf/export_test.go
  6cc5cf17f9effa1deddee19588d11e1a  libgo/go/debug/dwarf/line.go
! fd4de1c0b06936665d5ae215b816a11a  libgo/go/debug/dwarf/line_test.go
  788715db62d3e90e17530e88471af5ad  libgo/go/debug/dwarf/open.go
  3bf2f8f5466e194ea1461667c4ccc3af  libgo/go/debug/dwarf/tag_string.go
+ c4dd8f8b1c62285e48390a8dcfc8ce94  libgo/go/debug/dwarf/testdata/bitfields.c
+ 0ad70cc214e9cbd7306ac0057dfcba38  libgo/go/debug/dwarf/testdata/bitfields.elf4
  73bc9386f8192ed75607d4bde1ce2b42  libgo/go/debug/dwarf/testdata/cppunsuptypes.cc
  e04f9c38fe56385085e6b2ebd8564154  libgo/go/debug/dwarf/testdata/cppunsuptypes.elf
  c48488233d6ad5097bba0895351ae989  libgo/go/debug/dwarf/testdata/cycle.c
*************** f73405447309d114781eb0331b37ffa2  libgo/
*** 90644,90662 ****
  29ff91ea1cd1f355bd3662ab97c400ae  libgo/go/debug/dwarf/testdata/line2.c
  4e23584636ae26ad0e5d53b23bb97538  libgo/go/debug/dwarf/testdata/ranges.c
  427eec3ada7847fb31ee76cbcdcb232b  libgo/go/debug/dwarf/testdata/ranges.elf
  82be0ba322531e6ed35d8ee45c0c9b73  libgo/go/debug/dwarf/testdata/split.c
  fc7f831f92f838bacbb665c43bf5eba4  libgo/go/debug/dwarf/testdata/split.elf
! b92b510ef6d88424dd0d9c8a4bc4dbb5  libgo/go/debug/dwarf/testdata/typedef.c
  8c7e4f38f77d12641dd655ac2bf2b1ce  libgo/go/debug/dwarf/testdata/typedef.elf
  7099066229488f85aba68416dd33bf83  libgo/go/debug/dwarf/testdata/typedef.elf4
  64631e6b3ed893db85436dc8c1544486  libgo/go/debug/dwarf/testdata/typedef.macho
! f8e205cc8c6ab3effebb16ac6be0a17d  libgo/go/debug/dwarf/type.go
! 3e90447c18712f2d16508e71d90f97d4  libgo/go/debug/dwarf/type_test.go
  b39de4ed3f1f884de7b8821a985287fb  libgo/go/debug/dwarf/typeunit.go
! 3cf8d97cb9790a429475ff5741901017  libgo/go/debug/dwarf/unit.go
! e5fbc0b5f609e183f2af9b4804c90fb8  libgo/go/debug/elf/elf.go
! 28eb6b9f4f46f23fd82e0d06f1365df2  libgo/go/debug/elf/elf_test.go
! 04be6d9f86605b61147242758bc0b118  libgo/go/debug/elf/file.go
  92bb6cfd41c3f32dd777299ab90aaf1c  libgo/go/debug/elf/file_test.go
  f9f04dd77ce8b45403e77ea632d93590  libgo/go/debug/elf/reader.go
  f1374ec8ed40aa77be540da55827179d  libgo/go/debug/elf/symbols_test.go
--- 96827,96849 ----
  29ff91ea1cd1f355bd3662ab97c400ae  libgo/go/debug/dwarf/testdata/line2.c
  4e23584636ae26ad0e5d53b23bb97538  libgo/go/debug/dwarf/testdata/ranges.c
  427eec3ada7847fb31ee76cbcdcb232b  libgo/go/debug/dwarf/testdata/ranges.elf
+ fc6c9bafe82572dc5da073f1a97c70eb  libgo/go/debug/dwarf/testdata/rnglistx.c
+ d859fb54410bfdff3777e5f7d449a639  libgo/go/debug/dwarf/testdata/rnglistx.elf
  82be0ba322531e6ed35d8ee45c0c9b73  libgo/go/debug/dwarf/testdata/split.c
  fc7f831f92f838bacbb665c43bf5eba4  libgo/go/debug/dwarf/testdata/split.elf
! 7712f5caaaba3c8329623524a3168705  libgo/go/debug/dwarf/testdata/typedef.c
  8c7e4f38f77d12641dd655ac2bf2b1ce  libgo/go/debug/dwarf/testdata/typedef.elf
  7099066229488f85aba68416dd33bf83  libgo/go/debug/dwarf/testdata/typedef.elf4
+ 1c1eb8b677e2e583270cde4e0aa46b2f  libgo/go/debug/dwarf/testdata/typedef.elf5
  64631e6b3ed893db85436dc8c1544486  libgo/go/debug/dwarf/testdata/typedef.macho
! 51d9aebaf2abafa2ee583e88a8cedd54  libgo/go/debug/dwarf/testdata/typedef.macho4
! 65d8b88324ec97186095d5a02c449de9  libgo/go/debug/dwarf/type.go
! fbbf590c02d4c6696b29876eea78566d  libgo/go/debug/dwarf/type_test.go
  b39de4ed3f1f884de7b8821a985287fb  libgo/go/debug/dwarf/typeunit.go
! a88ae09b88ebac8d69c43f978d4e15e2  libgo/go/debug/dwarf/unit.go
! 80a3738c38fe6c633a61fe4ffa8dc34f  libgo/go/debug/elf/elf.go
! 30d2940dc68bb74b2fda0d0676ad58f1  libgo/go/debug/elf/elf_test.go
! 9db85d898e0bde26b1380f4dfa93c362  libgo/go/debug/elf/file.go
  92bb6cfd41c3f32dd777299ab90aaf1c  libgo/go/debug/elf/file_test.go
  f9f04dd77ce8b45403e77ea632d93590  libgo/go/debug/elf/reader.go
  f1374ec8ed40aa77be540da55827179d  libgo/go/debug/elf/symbols_test.go
*************** a5ba9661734ffb886d3675082c2b4808  libgo/
*** 90689,90705 ****
  0986841ab8783e088c0d4efb2d625030  libgo/go/debug/elf/testdata/zdebug-test-gcc484-x86-64.obj
  f549e93bb4abecfa2f405787ace90ac7  libgo/go/debug/gosym/pclinetest.h
  0c042c48ee46b12d9e396c15d9f5998e  libgo/go/debug/gosym/pclinetest.s
! 33f6fbe4fd645600afda3cadd408096b  libgo/go/debug/gosym/pclntab.go
! e8ffe72f5e22b991f866d0082f356b9d  libgo/go/debug/gosym/pclntab_test.go
! 7d70e392c2f3dfab766fb7421679041b  libgo/go/debug/gosym/symtab.go
! 697848ed94fa28dec4c95568c8a567c1  libgo/go/debug/gosym/symtab_test.go
  38e10a38566d3ff59dbb7ddce0af1283  libgo/go/debug/gosym/testdata/main.go
  d6803afca4c3518d9c29b4e7ee435eeb  libgo/go/debug/gosym/testdata/pclinetest.h
  9892eed5073980d1538d2983be300d77  libgo/go/debug/gosym/testdata/pclinetest.s
  20865a878811a9de0a514120158f3cec  libgo/go/debug/macho/fat.go
! 0e53da7046fdb5b73931857cf7676ac7  libgo/go/debug/macho/file.go
! 936b5a37f7a10841a413b74a29ab1b4f  libgo/go/debug/macho/file_test.go
! f8b21dc5387d5344c543780961d3eda0  libgo/go/debug/macho/macho.go
  536d9629bf1af47f22a53d666d457f25  libgo/go/debug/macho/reloctype.go
  a661ff5fb347d021bfb980467f3b515d  libgo/go/debug/macho/reloctype_string.go
  d2d83a4e0e466940a7cfd087b99b2fd1  libgo/go/debug/macho/testdata/clang-386-darwin-exec-with-rpath.base64
--- 96876,96892 ----
  0986841ab8783e088c0d4efb2d625030  libgo/go/debug/elf/testdata/zdebug-test-gcc484-x86-64.obj
  f549e93bb4abecfa2f405787ace90ac7  libgo/go/debug/gosym/pclinetest.h
  0c042c48ee46b12d9e396c15d9f5998e  libgo/go/debug/gosym/pclinetest.s
! cc921452f60c871e9782af083ef4be08  libgo/go/debug/gosym/pclntab.go
! d51e96c0beb80225117533f42acefdd3  libgo/go/debug/gosym/pclntab_test.go
! 7a84ea022ece4d1407826a72a0ed1be7  libgo/go/debug/gosym/symtab.go
! 9dfc626559b125a50d4d5cdcc16d9cef  libgo/go/debug/gosym/symtab_test.go
  38e10a38566d3ff59dbb7ddce0af1283  libgo/go/debug/gosym/testdata/main.go
  d6803afca4c3518d9c29b4e7ee435eeb  libgo/go/debug/gosym/testdata/pclinetest.h
  9892eed5073980d1538d2983be300d77  libgo/go/debug/gosym/testdata/pclinetest.s
  20865a878811a9de0a514120158f3cec  libgo/go/debug/macho/fat.go
! 9b0000ad9e6490a20a43e636c54dc488  libgo/go/debug/macho/file.go
! 97594efea208dd75938b460bb6a49ecf  libgo/go/debug/macho/file_test.go
! e8dc10ecdcd5b9d04621a7ad049b5205  libgo/go/debug/macho/macho.go
  536d9629bf1af47f22a53d666d457f25  libgo/go/debug/macho/reloctype.go
  a661ff5fb347d021bfb980467f3b515d  libgo/go/debug/macho/reloctype_string.go
  d2d83a4e0e466940a7cfd087b99b2fd1  libgo/go/debug/macho/testdata/clang-386-darwin-exec-with-rpath.base64
*************** d2d83a4e0e466940a7cfd087b99b2fd1  libgo/
*** 90711,90719 ****
  93f9634506e76ab46d04302b96f3146c  libgo/go/debug/macho/testdata/gcc-amd64-darwin-exec-debug.base64
  d5cc5689613d6dc3c5ba7c3eca1227ba  libgo/go/debug/macho/testdata/gcc-amd64-darwin-exec.base64
  16ac886f4f5d825a30306e935bbeb5a4  libgo/go/debug/macho/testdata/hello.c
! ba30628b2b4211cab47f9f4fd0690bca  libgo/go/debug/pe/file.go
! 1aab25a4380f0c22365b051945ab2b20  libgo/go/debug/pe/file_cgo_test.go
! e1ee4d23501ba1e5024abeb442856302  libgo/go/debug/pe/file_test.go
  76f28e14543b1783c334287451ec44f7  libgo/go/debug/pe/pe.go
  404dc2de3446caddf51b1e530890772d  libgo/go/debug/pe/section.go
  2ab06d918d5a54d3e94f28b6936ce7ff  libgo/go/debug/pe/string.go
--- 96898,96906 ----
  93f9634506e76ab46d04302b96f3146c  libgo/go/debug/macho/testdata/gcc-amd64-darwin-exec-debug.base64
  d5cc5689613d6dc3c5ba7c3eca1227ba  libgo/go/debug/macho/testdata/gcc-amd64-darwin-exec.base64
  16ac886f4f5d825a30306e935bbeb5a4  libgo/go/debug/macho/testdata/hello.c
! d102b8c7bc61de1c3e823976a0ce0b4c  libgo/go/debug/pe/file.go
! ab9d6eb37ab8eef2e1669681f3e8e32c  libgo/go/debug/pe/file_cgo_test.go
! a6e5e72921a3955abfb3be945457eb72  libgo/go/debug/pe/file_test.go
  76f28e14543b1783c334287451ec44f7  libgo/go/debug/pe/pe.go
  404dc2de3446caddf51b1e530890772d  libgo/go/debug/pe/section.go
  2ab06d918d5a54d3e94f28b6936ce7ff  libgo/go/debug/pe/string.go
*************** a54a78489eb28fb5a7d3111aab76bc23  libgo/
*** 90725,90731 ****
  faa37dff067bbd1e298b1818f4a3595d  libgo/go/debug/pe/testdata/gcc-amd64-mingw-obj
  16ac886f4f5d825a30306e935bbeb5a4  libgo/go/debug/pe/testdata/hello.c
  24412a65bba40cf984f0daa6451f4be4  libgo/go/debug/pe/testdata/vmlinuz-4.15.0-47-generic
! e97e826a2eb0dc12192662c34001d22d  libgo/go/debug/plan9obj/file.go
  c4e5723498d4afada215d9eb0f77cfd1  libgo/go/debug/plan9obj/file_test.go
  36f902099649b7d43a76eeef1995a656  libgo/go/debug/plan9obj/plan9obj.go
  5e87de15bf1da255815847ea34228460  libgo/go/debug/plan9obj/testdata/386-plan9-exec
--- 96912,96918 ----
  faa37dff067bbd1e298b1818f4a3595d  libgo/go/debug/pe/testdata/gcc-amd64-mingw-obj
  16ac886f4f5d825a30306e935bbeb5a4  libgo/go/debug/pe/testdata/hello.c
  24412a65bba40cf984f0daa6451f4be4  libgo/go/debug/pe/testdata/vmlinuz-4.15.0-47-generic
! bf8b810eaaf3dbc9335fabba6c73a21c  libgo/go/debug/plan9obj/file.go
  c4e5723498d4afada215d9eb0f77cfd1  libgo/go/debug/plan9obj/file_test.go
  36f902099649b7d43a76eeef1995a656  libgo/go/debug/plan9obj/plan9obj.go
  5e87de15bf1da255815847ea34228460  libgo/go/debug/plan9obj/testdata/386-plan9-exec
*************** d141fe4ce073e954a739c2e351360bd7  libgo/
*** 90741,90750 ****
  8cc04b1db59fdf4acc68badc19499092  libgo/go/debug/xcoff/testdata/xlc-ppc32-aix-exec
  78797635724d3a8303f4a60746af071c  libgo/go/debug/xcoff/testdata/xlc-ppc64-aix-exec
  257dfc19ff2e8edabb5bc509f273bfab  libgo/go/debug/xcoff/xcoff.go
! d387e0a244d2a6decdfddddb9d0f320a  libgo/go/embed/embed.go
  e15c72e1c1fa865a18bfdcd19bd6f868  libgo/go/embed/internal/embedtest/concurrency.txt
! a7b648b399c1ea09046abfca99323ff2  libgo/go/embed/internal/embedtest/embed_test.go
  652bffbbb0fb766ee1e12c8fd095bf77  libgo/go/embed/internal/embedtest/embedx_test.go
  7082df90f1a8d05c24fe7d99b3873410  libgo/go/embed/internal/embedtest/testdata/.hidden/.more/tip.txt
  7082df90f1a8d05c24fe7d99b3873410  libgo/go/embed/internal/embedtest/testdata/.hidden/_more/tip.txt
  dbbeec96bf25b5c1bd4d238ea436868d  libgo/go/embed/internal/embedtest/testdata/.hidden/fortune.txt
--- 96928,96939 ----
  8cc04b1db59fdf4acc68badc19499092  libgo/go/debug/xcoff/testdata/xlc-ppc32-aix-exec
  78797635724d3a8303f4a60746af071c  libgo/go/debug/xcoff/testdata/xlc-ppc64-aix-exec
  257dfc19ff2e8edabb5bc509f273bfab  libgo/go/debug/xcoff/xcoff.go
! ae8ee3c1a740d1d43d1de388c020790f  libgo/go/embed/embed.go
! 1934f13e5a7816aeb61e131dcf9219f8  libgo/go/embed/example_test.go
  e15c72e1c1fa865a18bfdcd19bd6f868  libgo/go/embed/internal/embedtest/concurrency.txt
! 3df91625e633828c8982c2111bcbf1e4  libgo/go/embed/internal/embedtest/embed_test.go
  652bffbbb0fb766ee1e12c8fd095bf77  libgo/go/embed/internal/embedtest/embedx_test.go
+ dbbeec96bf25b5c1bd4d238ea436868d  libgo/go/embed/internal/embedtest/testdata/-not-hidden/fortune.txt
  7082df90f1a8d05c24fe7d99b3873410  libgo/go/embed/internal/embedtest/testdata/.hidden/.more/tip.txt
  7082df90f1a8d05c24fe7d99b3873410  libgo/go/embed/internal/embedtest/testdata/.hidden/_more/tip.txt
  dbbeec96bf25b5c1bd4d238ea436868d  libgo/go/embed/internal/embedtest/testdata/.hidden/fortune.txt
*************** c66d3d004302f9f51908bc6c3e36118e  libgo/
*** 90756,90888 ****
  ad92f7955f525b0b753d2c9a42cc3299  libgo/go/embed/internal/embedtest/testdata/i/i18n.txt
  713431a750b0f2aa7424b22c6e358302  libgo/go/embed/internal/embedtest/testdata/i/j/k/k8s.txt
  f7db82a199d42ea62434c427df056f19  libgo/go/embed/internal/embedtest/testdata/ken.txt
! 92462ac904ce7336d9743e4e831d7f23  libgo/go/encoding/ascii85/ascii85.go
! 394fccf3c771a3dec9351731f986d492  libgo/go/encoding/ascii85/ascii85_test.go
! 5bd924cae56b717a46ce9edcb07f9a26  libgo/go/encoding/asn1/asn1.go
! 0a3457d8809fb2c690c11efac4598c3c  libgo/go/encoding/asn1/asn1_test.go
! 29f6ba578eabac750e5cd22e1463c491  libgo/go/encoding/asn1/common.go
! 35befa39e8fcc86a459c5aea35b64d6f  libgo/go/encoding/asn1/marshal.go
! 8c5d658b618ea7faa7cd2a34d8c63c56  libgo/go/encoding/asn1/marshal_test.go
! 5924a31f389fef88e3c2984a70e28973  libgo/go/encoding/base32/base32.go
! a5ce5f293c7b689e5e67a7ea968e6617  libgo/go/encoding/base32/base32_test.go
! f848c631931812702bfb84285a17c0f1  libgo/go/encoding/base64/base64.go
! 33417c87a88630800bf03b8b0cdc8097  libgo/go/encoding/base64/base64_test.go
! 48cf868077c34055080b5d621708c96c  libgo/go/encoding/binary/binary.go
! ee7f7b272990cff751c5c48d417916c6  libgo/go/encoding/binary/binary_test.go
! b11b8a8fc803b15b8632d3f4f4a245c8  libgo/go/encoding/binary/varint.go
! 750de3a4ba4ddecfa53ac3fd53ad274f  libgo/go/encoding/binary/varint_test.go
  2dafdf86dc65328db0ae53a0bc7b9c2c  libgo/go/encoding/csv/example_test.go
! f001138424b9da0d05b3c0edd233a1ed  libgo/go/encoding/csv/fuzz.go
! 854e345232f051b0d17f482f9261586c  libgo/go/encoding/csv/reader.go
! b0d5fa9fbc716d275429d7e6cc6102c5  libgo/go/encoding/csv/reader_test.go
  21810d1e935bd6cb045ef36e558fa5d3  libgo/go/encoding/csv/writer.go
  23f200934e20b4aba08aa28d698ec740  libgo/go/encoding/csv/writer_test.go
  cf390c08a8bce581b43b6812e08876c9  libgo/go/encoding/encoding.go
! 00e9712d6448eeb8f7c7c9771de2699e  libgo/go/encoding/gob/codec_test.go
! e35904a2dcd7a30c41cef893ed3c49f9  libgo/go/encoding/gob/debug.go
  09d16993223695c6ab1bb040dc89fee4  libgo/go/encoding/gob/dec_helpers.go
! 8979e6f83f388ae4234b9246890a9502  libgo/go/encoding/gob/decgen.go
! 9fe63ac509ecbe2912919f7242c81b68  libgo/go/encoding/gob/decode.go
! 59a7289ce80a1af5ee24aea22a715618  libgo/go/encoding/gob/decoder.go
  6535fab6f6ec708ce7e9b9bb81f397d4  libgo/go/encoding/gob/doc.go
! 5a6d15243feedb1eca701318de31977a  libgo/go/encoding/gob/dump.go
  c25bf7312645b9cff0b4e4365de1f28f  libgo/go/encoding/gob/enc_helpers.go
! 7009b6d8c961571f9e9077ff48d5d09f  libgo/go/encoding/gob/encgen.go
! 6b00bcd634e2b5820fc4abeee24195f7  libgo/go/encoding/gob/encode.go
! b741a56a102065decc52ff0a9295eda8  libgo/go/encoding/gob/encoder.go
! 32b1ee613ff2f9cdd1413a5721aff491  libgo/go/encoding/gob/encoder_test.go
! dfa08fd6d3fdf33eddcc3dbe126d0926  libgo/go/encoding/gob/error.go
! 9cec44542cce4412a2e0219901fca7d2  libgo/go/encoding/gob/gobencdec_test.go
! 58f5d1e91674343e771e58571daa2fca  libgo/go/encoding/gob/timing_test.go
! a19838c42be76f32233bbeebd11763c5  libgo/go/encoding/gob/type.go
! efc0a34fb6763c8c757f71b5f6dd87c2  libgo/go/encoding/gob/type_test.go
  528076ee7a1fa504117e9d2a98955009  libgo/go/encoding/hex/example_test.go
  19f9396403ff4bc876895de2f0c11371  libgo/go/encoding/hex/hex.go
  dfdf3a5c3d7f1cbecfa7031321799ce7  libgo/go/encoding/hex/hex_test.go
! 926e8d054c08e4281f97cae658164918  libgo/go/encoding/json/bench_test.go
! 91bb04cd54ace2ef6029961eb86410ff  libgo/go/encoding/json/decode.go
! 510c528e270598da7e456edce39412b7  libgo/go/encoding/json/decode_test.go
! 9738c57b219faa7e72717831a1b2ac9e  libgo/go/encoding/json/encode.go
! fcd302ef3faba7a2c5ad7a68ca2b8454  libgo/go/encoding/json/encode_test.go
  6696d9e8b1715c9ccc8952351c83fab4  libgo/go/encoding/json/example_marshaling_test.go
  21ba7c7ab58f176aee4a162af24a6316  libgo/go/encoding/json/example_text_marshaling_test.go
  58f0b67923caf5d1a8ea55470b6c0ac0  libgo/go/encoding/json/fold.go
  7cc305f2f6cf1de1cc99724a1748a7bc  libgo/go/encoding/json/fold_test.go
! 5d727b3808d8a1507f36ab3b3d402eb1  libgo/go/encoding/json/fuzz.go
  5bec5a03439a24edea5675b46016a4f9  libgo/go/encoding/json/indent.go
  4668675f4c4b18c8f639cd78bb4eafae  libgo/go/encoding/json/number_test.go
! 2c58e996cc5b437fe2442a8ed9f45a13  libgo/go/encoding/json/scanner.go
! 96a6d9c9c0216a2e3c1ddcb4a06c79af  libgo/go/encoding/json/scanner_test.go
! f4322e52985f772289ccce741790611e  libgo/go/encoding/json/stream.go
! 74ad5a3ea8fff51726b26bafca0689b8  libgo/go/encoding/json/stream_test.go
  1277e282f6bf1c91d83f726aae7be95c  libgo/go/encoding/json/tables.go
! 7d143f4b184e728a7751184a5ab99de6  libgo/go/encoding/json/tagkey_test.go
! 9f0b63408a1cf1c63f1ba0a556aa0ca0  libgo/go/encoding/json/tags.go
  89e4c307ea4a4f4ec3eb43d0cea004c0  libgo/go/encoding/json/tags_test.go
  9d281d5b21f0fcbbf6e840a2901d01c1  libgo/go/encoding/json/testdata/code.json.gz
  90f113780677fc209fbc176f20c85905  libgo/go/encoding/pem/example_test.go
! cb2b7b67399e2511432239484492b466  libgo/go/encoding/pem/pem.go
  8c0bd61f38c812933895516d4f68ae62  libgo/go/encoding/pem/pem_test.go
  f7065bcad9023fbf85033e459dd41594  libgo/go/encoding/xml/atom_test.go
  d6faa60a5ae55010235a8d13771d9560  libgo/go/encoding/xml/example_marshaling_test.go
  ba01e03401cf7036e5da40f1bd4eceda  libgo/go/encoding/xml/example_text_marshaling_test.go
! 9e46aa2766467ea70f729ab2db3cad4b  libgo/go/encoding/xml/marshal.go
! fb7d98eb6a64ac6d3b10856589c48cb0  libgo/go/encoding/xml/marshal_test.go
! c3c30183cbbd8bae3c59ed2654b51aeb  libgo/go/encoding/xml/read.go
! fa97bb2f93f6dd8e2546eb678966c4ee  libgo/go/encoding/xml/read_test.go
! 29621a85b7d1f28a460b6c511c429911  libgo/go/encoding/xml/typeinfo.go
! c73a5699e4a7bbff33533876973ffc43  libgo/go/encoding/xml/xml.go
! 6aca24ecf657efb93c35d127ea7039a7  libgo/go/encoding/xml/xml_test.go
  61973f508c803662e93c35e6ed0a479d  libgo/go/errors/errors.go
  d3f785fb54dda63a9286d9e2038f5aeb  libgo/go/errors/errors_test.go
! edc480fa5e6c12aae036680900ef04c9  libgo/go/errors/wrap.go
! 31164292d2ef36d303963dc89e5e532e  libgo/go/errors/wrap_test.go
! 69cec3ad76693af3e50d004ea7c7025a  libgo/go/expvar/expvar.go
! 91404b0dff65de8e258ef64d473b44d1  libgo/go/expvar/expvar_test.go
  b869c622917743b3781eceb20df1371b  libgo/go/flag/example_func_test.go
  97c2f30cebb7bb49677b5c6216b7e495  libgo/go/flag/example_test.go
  16150cc6861f8da8c38f66da3492231e  libgo/go/flag/example_value_test.go
  a69ac9ffc946290a3b40d54743810cb7  libgo/go/flag/export_test.go
! 2a6903f7c292623286ea7c273900e654  libgo/go/flag/flag.go
! 21eca174952000ade04b36faf240f396  libgo/go/flag/flag_test.go
! 37f4199e0fd0370a237c91524a67a9be  libgo/go/fmt/doc.go
! 3dec4da5df39592bec1c14a2fcbe3131  libgo/go/fmt/errors.go
  041cd7949f21f8cbe57370cb9a202d5e  libgo/go/fmt/errors_test.go
  4aac3ae60bb7f1350b4ac2d0c6f1a5d8  libgo/go/fmt/example_test.go
  4f3d783dffb31ae9d17c27343eb363d3  libgo/go/fmt/export_test.go
! 2a532ba34799573764cc16c807bb15b6  libgo/go/fmt/fmt_test.go
! 3f87f828cc703438a0771105f3259979  libgo/go/fmt/format.go
  2819cadd0e04cc10f1c31e41ee42463a  libgo/go/fmt/gostringer_example_test.go
! 1e2abbd9388d2c40161b69b25e90f353  libgo/go/fmt/print.go
! 1f898e43ee97be4a21f7b4054dbffefe  libgo/go/fmt/scan.go
! 879bd805a141c26820822483afd54cbb  libgo/go/fmt/scan_test.go
  6fcb09cb0cd589441f3d63eda967b071  libgo/go/fmt/stringer_example_test.go
  2369824f08c60e32daa40b736d182964  libgo/go/fmt/stringer_test.go
! be3f406a7815dee68730c88a233d6224  libgo/go/go.mod
! 48fddd6db923a87c59afdc8b66665047  libgo/go/go/ast/ast.go
  d4d45d52a65eb9a90a577b7642507749  libgo/go/go/ast/ast_test.go
! 9f1f11f06f41ae838e8a0b1d1041291b  libgo/go/go/ast/commentmap.go
  06e1b96007b49fefd9c6e6f78a308d6d  libgo/go/go/ast/commentmap_test.go
  ff813a3cb3fe9d99e87360055ed08345  libgo/go/go/ast/filter.go
  bf2c3134657aed37c679064ac0654d88  libgo/go/go/ast/filter_test.go
  58bdbbe7729f18c722f00a1bc5956a60  libgo/go/go/ast/import.go
  e9a932b0d26963e43bbaff5af1a13a6c  libgo/go/go/ast/issues_test.go
! 6b09f5a06414521cc8836ebcfb943a1a  libgo/go/go/ast/print.go
! 37f0da8f9994ef23553dd3327895afa7  libgo/go/go/ast/print_test.go
! 3be25bbb06e1daddd8871a53a5202517  libgo/go/go/ast/resolve.go
! a34425a8ac23d6af13812cc2f18b5e0b  libgo/go/go/ast/scope.go
! 518c3e4a187ec8053a8721ab88b1b6c8  libgo/go/go/ast/walk.go
! d80f789164b9949774a58c6ccbb9e6e3  libgo/go/go/build/build.go
! 5ef4fced7a098f9ca67f438700bf5dbc  libgo/go/go/build/build_test.go
! 9cad0a4129d85b2fd258e882d9a2eb73  libgo/go/go/build/constraint/expr.go
! da821af42e97c3fc7f2b088ea293b757  libgo/go/go/build/constraint/expr_test.go
! 134f726571de1804510c2f18c6da56b3  libgo/go/go/build/deps_test.go
! c3c50241f1971c7a0fd71a6b9a4d58f7  libgo/go/go/build/doc.go
! 208c93a77628472488f59d8fca6c0958  libgo/go/go/build/gc.go
! d9f729d93287dd32bee3c25091895c81  libgo/go/go/build/gccgo.go
! 07c2dc964cf324ed1da8360c7ff81368  libgo/go/go/build/read.go
! 19eda25fb5946d5bc126c8de668c59ae  libgo/go/go/build/read_test.go
! b172838ffe01e1819a218164b16e23d5  libgo/go/go/build/syslist.go
  bc42fd82b00ef1da0fb863a04c89e368  libgo/go/go/build/syslist_test.go
  d0508cfc2d888979852c42a97500ae2c  libgo/go/go/build/testdata/cgo_disabled/cgo_disabled.go
  f657ff91cc94e1fd35f0e42e74d86020  libgo/go/go/build/testdata/cgo_disabled/empty.go
--- 96945,97078 ----
  ad92f7955f525b0b753d2c9a42cc3299  libgo/go/embed/internal/embedtest/testdata/i/i18n.txt
  713431a750b0f2aa7424b22c6e358302  libgo/go/embed/internal/embedtest/testdata/i/j/k/k8s.txt
  f7db82a199d42ea62434c427df056f19  libgo/go/embed/internal/embedtest/testdata/ken.txt
! d15c907cf93d72e416bcc44e75a61c6c  libgo/go/encoding/ascii85/ascii85.go
! 995c5af4e6e4f27cd2973446780ca8d1  libgo/go/encoding/ascii85/ascii85_test.go
! 95b7be1e6a351ad6c397caea1ed96ed2  libgo/go/encoding/asn1/asn1.go
! a2cc5cd1248e0119a9d3f719b2e7b4b1  libgo/go/encoding/asn1/asn1_test.go
! 02cf43ff3de7915a9d36b9438035e947  libgo/go/encoding/asn1/common.go
! fd4ea8a2ada5ac332e95e12530546aae  libgo/go/encoding/asn1/marshal.go
! 331394f3efbecc253a297d0a46060095  libgo/go/encoding/asn1/marshal_test.go
! 650b40bf902060204df713b0dd288858  libgo/go/encoding/base32/base32.go
! fea731c89d1ce85501bda2a8d16dabdc  libgo/go/encoding/base32/base32_test.go
! 2e1ce3fd3a4519b3a0505c2ba72429db  libgo/go/encoding/base64/base64.go
! 2f070bf5ba0f32755cb330a632f0b532  libgo/go/encoding/base64/base64_test.go
! edefb4dacd24fcc915d7c33bc02f2a23  libgo/go/encoding/binary/binary.go
! 26a40637aa2e68454ad8d0accb48e509  libgo/go/encoding/binary/binary_test.go
! 8f4d5e099dff5a730b5cc7d5a126b8b5  libgo/go/encoding/binary/varint.go
! 05dfe5887300a0308f4bbdaaeac1a8f7  libgo/go/encoding/binary/varint_test.go
  2dafdf86dc65328db0ae53a0bc7b9c2c  libgo/go/encoding/csv/example_test.go
! 97e62ee027e6e3472cc79bd5ee59226e  libgo/go/encoding/csv/fuzz.go
! fe0ba118af5e42a729658fdef9e7eaf3  libgo/go/encoding/csv/reader.go
! 72decc31de8c052565c2e40d79cebbc4  libgo/go/encoding/csv/reader_test.go
  21810d1e935bd6cb045ef36e558fa5d3  libgo/go/encoding/csv/writer.go
  23f200934e20b4aba08aa28d698ec740  libgo/go/encoding/csv/writer_test.go
  cf390c08a8bce581b43b6812e08876c9  libgo/go/encoding/encoding.go
! e51e5ab13842b84e8f342efe8d0646d0  libgo/go/encoding/gob/codec_test.go
! 0c04836ffd19432cecba22ca02aaa16e  libgo/go/encoding/gob/debug.go
  09d16993223695c6ab1bb040dc89fee4  libgo/go/encoding/gob/dec_helpers.go
! 88ca2ecf3eee7d7bb8eacf1803f8728e  libgo/go/encoding/gob/decgen.go
! 76ddc2acba11caf880e524f3d5bca183  libgo/go/encoding/gob/decode.go
! c0cda45cbf9226bfa75e7758b02c60b1  libgo/go/encoding/gob/decoder.go
  6535fab6f6ec708ce7e9b9bb81f397d4  libgo/go/encoding/gob/doc.go
! b1f1246c78f998046bc12eb314b93c37  libgo/go/encoding/gob/dump.go
  c25bf7312645b9cff0b4e4365de1f28f  libgo/go/encoding/gob/enc_helpers.go
! 71b3874fe2daa3616bace55ce070bf4b  libgo/go/encoding/gob/encgen.go
! edf01654c86ad205ea33b74a9841fb05  libgo/go/encoding/gob/encode.go
! b13cafd750891c0716eedb56c8344a36  libgo/go/encoding/gob/encoder.go
! ce6babb043aba23df9b5ca5b511e7314  libgo/go/encoding/gob/encoder_test.go
! d4e207b9fe3a7cfd30848c63e38bd766  libgo/go/encoding/gob/error.go
! 5d79bc0ff101e5cc382af6bdf90b24d3  libgo/go/encoding/gob/gobencdec_test.go
! 4f28f658bd1ccafecfef8fc3c26b3922  libgo/go/encoding/gob/timing_test.go
! 8b4070b4205dc1350bb3574cc9212ffc  libgo/go/encoding/gob/type.go
! 6081c4ab4ccfd87f89fa53765a6cfcfd  libgo/go/encoding/gob/type_test.go
  528076ee7a1fa504117e9d2a98955009  libgo/go/encoding/hex/example_test.go
  19f9396403ff4bc876895de2f0c11371  libgo/go/encoding/hex/hex.go
  dfdf3a5c3d7f1cbecfa7031321799ce7  libgo/go/encoding/hex/hex_test.go
! 19183663f97177cea01684cd62747073  libgo/go/encoding/json/bench_test.go
! d3dff19a51e92e1d55458eaef3bc0fd7  libgo/go/encoding/json/decode.go
! 8b5b980e02d8f47dcf601e483e3b05f1  libgo/go/encoding/json/decode_test.go
! 394311b9f3adad619ca7ed3aadf7a1af  libgo/go/encoding/json/encode.go
! e41e56e236ca562a5056a1d55b04beaf  libgo/go/encoding/json/encode_test.go
  6696d9e8b1715c9ccc8952351c83fab4  libgo/go/encoding/json/example_marshaling_test.go
  21ba7c7ab58f176aee4a162af24a6316  libgo/go/encoding/json/example_text_marshaling_test.go
  58f0b67923caf5d1a8ea55470b6c0ac0  libgo/go/encoding/json/fold.go
  7cc305f2f6cf1de1cc99724a1748a7bc  libgo/go/encoding/json/fold_test.go
! e63a4c42389bf1f263429453715e02fd  libgo/go/encoding/json/fuzz.go
! 89173ab21b1b7a2c0eb8b0c7fa86a08d  libgo/go/encoding/json/fuzz_test.go
  5bec5a03439a24edea5675b46016a4f9  libgo/go/encoding/json/indent.go
  4668675f4c4b18c8f639cd78bb4eafae  libgo/go/encoding/json/number_test.go
! ce21e387c862f5d373c935c5ba24eaf8  libgo/go/encoding/json/scanner.go
! ccbe63c7cf1d7b61a1ea82d782dfc6bc  libgo/go/encoding/json/scanner_test.go
! 9a9d76a19b677d1f18df0c88636941e8  libgo/go/encoding/json/stream.go
! a48dbbcf2fe9f45529ed5e0b39f94a08  libgo/go/encoding/json/stream_test.go
  1277e282f6bf1c91d83f726aae7be95c  libgo/go/encoding/json/tables.go
! 07c33cff9c2ff339a284db2d37884bce  libgo/go/encoding/json/tagkey_test.go
! e645ab9ef4ac5a16991a8b3905de6bf3  libgo/go/encoding/json/tags.go
  89e4c307ea4a4f4ec3eb43d0cea004c0  libgo/go/encoding/json/tags_test.go
  9d281d5b21f0fcbbf6e840a2901d01c1  libgo/go/encoding/json/testdata/code.json.gz
  90f113780677fc209fbc176f20c85905  libgo/go/encoding/pem/example_test.go
! b33d94f3fc3d6973c86e57272f3086a8  libgo/go/encoding/pem/pem.go
  8c0bd61f38c812933895516d4f68ae62  libgo/go/encoding/pem/pem_test.go
  f7065bcad9023fbf85033e459dd41594  libgo/go/encoding/xml/atom_test.go
  d6faa60a5ae55010235a8d13771d9560  libgo/go/encoding/xml/example_marshaling_test.go
  ba01e03401cf7036e5da40f1bd4eceda  libgo/go/encoding/xml/example_text_marshaling_test.go
! ed0c0d7969112499126d216516e373f9  libgo/go/encoding/xml/marshal.go
! e584a2042fecdd77aa1d750ed0f6eaba  libgo/go/encoding/xml/marshal_test.go
! 4e67f2f0a9b621b1ede3480783b3c941  libgo/go/encoding/xml/read.go
! a2956ea34083bab5eb7dab42deee48ed  libgo/go/encoding/xml/read_test.go
! fea49d4bb32296b5ffbbdcc9f42a37c6  libgo/go/encoding/xml/typeinfo.go
! 66ff4a21fbac855700066805f3050c14  libgo/go/encoding/xml/xml.go
! 18d1e058f6d5ae5dbf3c192355573584  libgo/go/encoding/xml/xml_test.go
  61973f508c803662e93c35e6ed0a479d  libgo/go/errors/errors.go
  d3f785fb54dda63a9286d9e2038f5aeb  libgo/go/errors/errors_test.go
! 958318f801d247bbf3ff1339a1caf7d6  libgo/go/errors/wrap.go
! 3b584b999de7ced957ad6759e786e2f0  libgo/go/errors/wrap_test.go
! 81a79ad826a5ea4332b55f6ca6f496df  libgo/go/expvar/expvar.go
! d75456e8a95c1eeb58f5a8002872878c  libgo/go/expvar/expvar_test.go
  b869c622917743b3781eceb20df1371b  libgo/go/flag/example_func_test.go
  97c2f30cebb7bb49677b5c6216b7e495  libgo/go/flag/example_test.go
  16150cc6861f8da8c38f66da3492231e  libgo/go/flag/example_value_test.go
  a69ac9ffc946290a3b40d54743810cb7  libgo/go/flag/export_test.go
! 33beef5d05cecfd30e036d48006a20a9  libgo/go/flag/flag.go
! 79f1f7f308cb6c7e3babbf27a037a5d7  libgo/go/flag/flag_test.go
! 7c4869f62de5ebeae7fbfb3bc7b418ce  libgo/go/fmt/doc.go
! dd38302fd17cfd0b4e9425b516c525fe  libgo/go/fmt/errors.go
  041cd7949f21f8cbe57370cb9a202d5e  libgo/go/fmt/errors_test.go
  4aac3ae60bb7f1350b4ac2d0c6f1a5d8  libgo/go/fmt/example_test.go
  4f3d783dffb31ae9d17c27343eb363d3  libgo/go/fmt/export_test.go
! e5a73e8fea5e30677af4ca46a8a2f420  libgo/go/fmt/fmt_test.go
! 4f20a697d449c338298df021eb1901cc  libgo/go/fmt/format.go
  2819cadd0e04cc10f1c31e41ee42463a  libgo/go/fmt/gostringer_example_test.go
! 7e1df9bc0c826ec727f2b4e8fcb187f0  libgo/go/fmt/print.go
! c3d76c2792e5791b282011e1c74eb6e7  libgo/go/fmt/scan.go
! 8d84dada6b800609d48b0c7e0a775cb6  libgo/go/fmt/scan_test.go
  6fcb09cb0cd589441f3d63eda967b071  libgo/go/fmt/stringer_example_test.go
  2369824f08c60e32daa40b736d182964  libgo/go/fmt/stringer_test.go
! d55c9bd287b7a7941e145354f5974d0a  libgo/go/go.mod
! ce5ef3c8bfb0242e90cfb06de2c15b3b  libgo/go/go/ast/ast.go
  d4d45d52a65eb9a90a577b7642507749  libgo/go/go/ast/ast_test.go
! e614191e6d9697c1dac5128c815b62e4  libgo/go/go/ast/commentmap.go
  06e1b96007b49fefd9c6e6f78a308d6d  libgo/go/go/ast/commentmap_test.go
  ff813a3cb3fe9d99e87360055ed08345  libgo/go/go/ast/filter.go
  bf2c3134657aed37c679064ac0654d88  libgo/go/go/ast/filter_test.go
  58bdbbe7729f18c722f00a1bc5956a60  libgo/go/go/ast/import.go
  e9a932b0d26963e43bbaff5af1a13a6c  libgo/go/go/ast/issues_test.go
! c2db3c1292d5edc6c1cfe6ee891e16f1  libgo/go/go/ast/print.go
! 885d9eb34a487ff53cf6dff649c0a3f4  libgo/go/go/ast/print_test.go
! 7cf1ce529cb0d2d95a450bb66f48ecfa  libgo/go/go/ast/resolve.go
! 71d050ca0841dadb380f862710f6052c  libgo/go/go/ast/scope.go
! 0c310cc2cd6e490487b87a2eb418f992  libgo/go/go/ast/walk.go
! c965712574f792d705b6a9c7c29153e8  libgo/go/go/build/build.go
! af62fe83f5d4984571018556ea352dbe  libgo/go/go/build/build_test.go
! 8e4a806ac84fa5fdf4425af55febfa6b  libgo/go/go/build/constraint/expr.go
! 25565791086eab47d41e4cb2f379e0cc  libgo/go/go/build/constraint/expr_test.go
! ea32ac90b0eef54f654c2992ecad5912  libgo/go/go/build/deps_test.go
! e747ba7102cfce9234d4d17933cf8f8d  libgo/go/go/build/doc.go
! d6ad2cfaf9deef4a26e3a1aae49e63a5  libgo/go/go/build/gc.go
! 0c664a6c5448c44b51d96eab5a8ea7a5  libgo/go/go/build/gccgo.go
! 025b841a788c84ca1de523af5a28b7a9  libgo/go/go/build/read.go
! 8164e1eae7cd3baaf0ed4ddd8c11d6b7  libgo/go/go/build/read_test.go
! 868cb49095bd6d2702b6661aef630d49  libgo/go/go/build/syslist.go
  bc42fd82b00ef1da0fb863a04c89e368  libgo/go/go/build/syslist_test.go
  d0508cfc2d888979852c42a97500ae2c  libgo/go/go/build/testdata/cgo_disabled/cgo_disabled.go
  f657ff91cc94e1fd35f0e42e74d86020  libgo/go/go/build/testdata/cgo_disabled/empty.go
*************** de6991b3771170d6d3ce31fe2c89b5f1  libgo/
*** 90900,90917 ****
  842e240ef7931f92f94e63add9e6506f  libgo/go/go/build/testdata/withvendor/src/a/b/b.go
  eb31b8dabff5785d4a236b6721d75f29  libgo/go/go/build/testdata/withvendor/src/a/vendor/c/d/d.go
  9dcd23f222a1c03c55ea842cc261e586  libgo/go/go/constant/example_test.go
! dc5a41ba96cf4f03ad9101740e5305dc  libgo/go/go/constant/value.go
! c66922722a14b16ff715320d1ae60b77  libgo/go/go/constant/value_test.go
! 90244c0ba39bfd8861cc5a5831f3d512  libgo/go/go/doc/comment.go
  d780e53bc79b866b24f476916593a43a  libgo/go/go/doc/comment_test.go
! ab3c88177579e5642eeeb1fe919a6cc2  libgo/go/go/doc/doc.go
! 2970192b5008968e37b8890ce9d2429c  libgo/go/go/doc/doc_test.go
! 323e1f53b61f1a58982cba1e3036dcbe  libgo/go/go/doc/example.go
! 9305aff0cfadc347d336ee91af081c39  libgo/go/go/doc/example_test.go
! fa43e8e8becdba36441c11035fd12961  libgo/go/go/doc/exports.go
! a8c394bea00b685d8d0c5c3e24018879  libgo/go/go/doc/filter.go
! 65a21b416615cf6818c879000bb569f3  libgo/go/go/doc/headscan.go
! 1104d0ee6bc6e739c64ed1ad078a6bd5  libgo/go/go/doc/reader.go
  5312f84d2d0336c226ea19fcb6113732  libgo/go/go/doc/synopsis.go
  68b6b95ed70c1edc284b99e8fca494a0  libgo/go/go/doc/synopsis_test.go
  9696451e9ed297a37eeb6577a16d9494  libgo/go/go/doc/testdata/a.0.golden
--- 97090,97108 ----
  842e240ef7931f92f94e63add9e6506f  libgo/go/go/build/testdata/withvendor/src/a/b/b.go
  eb31b8dabff5785d4a236b6721d75f29  libgo/go/go/build/testdata/withvendor/src/a/vendor/c/d/d.go
  9dcd23f222a1c03c55ea842cc261e586  libgo/go/go/constant/example_test.go
! 66b8525ce739c0ca3cb46dc206b8e882  libgo/go/go/constant/kind_string.go
! d31bcfa6d3043ddf69cd130ae1c46fbd  libgo/go/go/constant/value.go
! 75e0700492a2f976ba4d51293b97d45f  libgo/go/go/constant/value_test.go
! 828d4fe14ccdc7e3ca5142272bea1ece  libgo/go/go/doc/comment.go
  d780e53bc79b866b24f476916593a43a  libgo/go/go/doc/comment_test.go
! 838c8ea9558366848da5db3f859061e5  libgo/go/go/doc/doc.go
! 826462dd51161f338e701164e669e379  libgo/go/go/doc/doc_test.go
! 34ed109024584068f1aeb142f9de913e  libgo/go/go/doc/example.go
! f5615809da8292934486765ced83fb1c  libgo/go/go/doc/example_test.go
! d2cbead5f601cb77b4785a0a842b4c61  libgo/go/go/doc/exports.go
! d839716f82540a5903437af6ca723e84  libgo/go/go/doc/filter.go
! bc6c27629b7e005aae33ff3371e51ee9  libgo/go/go/doc/headscan.go
! 9c0102abe9dfe7d4c3bd480b6e4cfd79  libgo/go/go/doc/reader.go
  5312f84d2d0336c226ea19fcb6113732  libgo/go/go/doc/synopsis.go
  68b6b95ed70c1edc284b99e8fca494a0  libgo/go/go/doc/synopsis_test.go
  9696451e9ed297a37eeb6577a16d9494  libgo/go/go/doc/testdata/a.0.golden
*************** a8c394bea00b685d8d0c5c3e24018879  libgo/
*** 90919,90929 ****
  9696451e9ed297a37eeb6577a16d9494  libgo/go/go/doc/testdata/a.2.golden
  53211c711431e426a5015b7b8b45e503  libgo/go/go/doc/testdata/a0.go
  8c26c3ead4faa5df75ae374068e1c239  libgo/go/go/doc/testdata/a1.go
! e55a6d247f12d1e0c63ec812281121f8  libgo/go/go/doc/testdata/b.0.golden
! d2e1f55e788d6f5d6a2f81a1ab87be0f  libgo/go/go/doc/testdata/b.1.golden
! e55a6d247f12d1e0c63ec812281121f8  libgo/go/go/doc/testdata/b.2.golden
! a4f1d2ab2cb8c6c3d04a7cb6cbbc78bd  libgo/go/go/doc/testdata/b.go
! 8513108f86dd415519a560f65cd11c16  libgo/go/go/doc/testdata/benchmark.go
  267e85e0a0df6ced68bc86beda2aaadc  libgo/go/go/doc/testdata/blank.0.golden
  38c3a3bb522e789906140ae1eb4b0721  libgo/go/go/doc/testdata/blank.1.golden
  267e85e0a0df6ced68bc86beda2aaadc  libgo/go/go/doc/testdata/blank.2.golden
--- 97110,97120 ----
  9696451e9ed297a37eeb6577a16d9494  libgo/go/go/doc/testdata/a.2.golden
  53211c711431e426a5015b7b8b45e503  libgo/go/go/doc/testdata/a0.go
  8c26c3ead4faa5df75ae374068e1c239  libgo/go/go/doc/testdata/a1.go
! 354727caf075aae102f9994a8e683f09  libgo/go/go/doc/testdata/b.0.golden
! 0ad0c0f2a89254ace275481ea27c07f4  libgo/go/go/doc/testdata/b.1.golden
! 354727caf075aae102f9994a8e683f09  libgo/go/go/doc/testdata/b.2.golden
! ef270d7b67634ec518cb6245473eec04  libgo/go/go/doc/testdata/b.go
! db3e625b236b1702e6cf5d3a409765c5  libgo/go/go/doc/testdata/benchmark.go
  267e85e0a0df6ced68bc86beda2aaadc  libgo/go/go/doc/testdata/blank.0.golden
  38c3a3bb522e789906140ae1eb4b0721  libgo/go/go/doc/testdata/blank.1.golden
  267e85e0a0df6ced68bc86beda2aaadc  libgo/go/go/doc/testdata/blank.2.golden
*************** ad24fd06b785335bdb1c0c08419676ca  libgo/
*** 90962,90967 ****
--- 97153,97162 ----
  53aa9c7d1643fb70b294d22e27ad2d24  libgo/go/go/doc/testdata/g.1.golden
  ad24fd06b785335bdb1c0c08419676ca  libgo/go/go/doc/testdata/g.2.golden
  9d1df71d6cb3d3508618346d4e08d6a7  libgo/go/go/doc/testdata/g.go
+ fe7af0b58569086b6473e845e46e93de  libgo/go/go/doc/testdata/generics.0.golden
+ d60e503b12777f2d9ea0068ec3d929a3  libgo/go/go/doc/testdata/generics.1.golden
+ fe7af0b58569086b6473e845e46e93de  libgo/go/go/doc/testdata/generics.2.golden
+ 75007f5d09ba6b8f5bdc833fadbcf30d  libgo/go/go/doc/testdata/generics.go
  73a422200c59664b61438a852fb74892  libgo/go/go/doc/testdata/issue12839.0.golden
  46c8503b0337ef5bc13ac3677bfae062  libgo/go/go/doc/testdata/issue12839.1.golden
  73a422200c59664b61438a852fb74892  libgo/go/go/doc/testdata/issue12839.2.golden
*************** d1447502dd444d7269ec2bf5c997806f  libgo/
*** 90987,91009 ****
  3cb6d13949e193b4e7c311db70b58272  libgo/go/go/doc/testdata/predeclared.2.golden
  c0b49df596a5e737035a10963874fafb  libgo/go/go/doc/testdata/predeclared.go
  f19b9c3c424053077245efc1584d5eac  libgo/go/go/doc/testdata/template.txt
! f13e35e01236bc501949cc0b287f3bbd  libgo/go/go/doc/testdata/testing.0.golden
! b4aa32ac3afc28901c39479ed56c82cb  libgo/go/go/doc/testdata/testing.1.golden
! f13e35e01236bc501949cc0b287f3bbd  libgo/go/go/doc/testdata/testing.2.golden
! 6fe45325395c5d54867b223e79ea5c58  libgo/go/go/doc/testdata/testing.go
  9017b048eec20f87a31077d05316e842  libgo/go/go/format/benchmark_test.go
  d950896d6e41074456c9560e96f01530  libgo/go/go/format/example_test.go
! dbfb0c1f123596ae7472d86ac6261611  libgo/go/go/format/format.go
! 380ca9251b43b72ed20d39c2a89eccae  libgo/go/go/format/format_test.go
  91f5c3352f2eadd529476893acd69d73  libgo/go/go/format/internal.go
  277376daf740554d51f37e5a0f90d3ab  libgo/go/go/importer/importer.go
! 2ba584cb96ff09dbb063e5d2094c5008  libgo/go/go/importer/importer_test.go
  77696dafc97f7596d5278e9f1d0ba739  libgo/go/go/internal/gccgoimporter/ar.go
  8e3a6950d33efa95e394b949babaf086  libgo/go/go/internal/gccgoimporter/gccgoinstallation.go
! 32693376e96a6b80ca2ed06f4e097bf8  libgo/go/go/internal/gccgoimporter/gccgoinstallation_test.go
  6d2110aa252ba390c43c76ab4e05e535  libgo/go/go/internal/gccgoimporter/importer.go
! 645727d4da77bf34aca527ba08cb74d0  libgo/go/go/internal/gccgoimporter/importer_test.go
! ce33a41ec260744656fb958247d03d31  libgo/go/go/internal/gccgoimporter/parser.go
  21dadbf1bff4c2adbb8dc8ec49147ecd  libgo/go/go/internal/gccgoimporter/parser_test.go
  6b5ad74e54217ee2ce9a4d097b9d0c7d  libgo/go/go/internal/gccgoimporter/testdata/aliases.go
  08b64ac87a4fec11683ee190a7b23a8a  libgo/go/go/internal/gccgoimporter/testdata/aliases.gox
--- 97182,97204 ----
  3cb6d13949e193b4e7c311db70b58272  libgo/go/go/doc/testdata/predeclared.2.golden
  c0b49df596a5e737035a10963874fafb  libgo/go/go/doc/testdata/predeclared.go
  f19b9c3c424053077245efc1584d5eac  libgo/go/go/doc/testdata/template.txt
! 2ebef190712740cd8729ad442e1ae075  libgo/go/go/doc/testdata/testing.0.golden
! 9839be52a78fe0835997022787e0c82c  libgo/go/go/doc/testdata/testing.1.golden
! 2ebef190712740cd8729ad442e1ae075  libgo/go/go/doc/testdata/testing.2.golden
! 060d805293f33a0501b9326787b930a4  libgo/go/go/doc/testdata/testing.go
  9017b048eec20f87a31077d05316e842  libgo/go/go/format/benchmark_test.go
  d950896d6e41074456c9560e96f01530  libgo/go/go/format/example_test.go
! 8ae6c4fac484dde4c2f6299ddd0647a2  libgo/go/go/format/format.go
! d9e6d587a28672a646590381a5c6dea3  libgo/go/go/format/format_test.go
  91f5c3352f2eadd529476893acd69d73  libgo/go/go/format/internal.go
  277376daf740554d51f37e5a0f90d3ab  libgo/go/go/importer/importer.go
! d66659871c9468931aa53015d5460ca2  libgo/go/go/importer/importer_test.go
  77696dafc97f7596d5278e9f1d0ba739  libgo/go/go/internal/gccgoimporter/ar.go
  8e3a6950d33efa95e394b949babaf086  libgo/go/go/internal/gccgoimporter/gccgoinstallation.go
! 115a64807c3021934460b7bec6ddae77  libgo/go/go/internal/gccgoimporter/gccgoinstallation_test.go
  6d2110aa252ba390c43c76ab4e05e535  libgo/go/go/internal/gccgoimporter/importer.go
! 0fc3a9191cb32d942d5bd27b9da25963  libgo/go/go/internal/gccgoimporter/importer_test.go
! ef629a37e5d74980cfd3a345c54a6598  libgo/go/go/internal/gccgoimporter/parser.go
  21dadbf1bff4c2adbb8dc8ec49147ecd  libgo/go/go/internal/gccgoimporter/parser_test.go
  6b5ad74e54217ee2ce9a4d097b9d0c7d  libgo/go/go/internal/gccgoimporter/testdata/aliases.go
  08b64ac87a4fec11683ee190a7b23a8a  libgo/go/go/internal/gccgoimporter/testdata/aliases.gox
*************** ce33a41ec260744656fb958247d03d31  libgo/
*** 91012,91018 ****
  f2aad2f9c531bec2bade4dc207de7e45  libgo/go/go/internal/gccgoimporter/testdata/conversions.go
  8c9de978716d5ab49005c2a95eb30802  libgo/go/go/internal/gccgoimporter/testdata/conversions.gox
  8cc988510c2a6f4963b998f6d8448edf  libgo/go/go/internal/gccgoimporter/testdata/escapeinfo.go
! a196d533e13f76c7e37376c5d9525508  libgo/go/go/internal/gccgoimporter/testdata/escapeinfo.gox
  46fe645e3151a082174da2dcff88e52b  libgo/go/go/internal/gccgoimporter/testdata/imports.go
  37034e36b1e8e0942b2d842a0f6062de  libgo/go/go/internal/gccgoimporter/testdata/imports.gox
  d3d07d83edba799e6b79f15c3e666977  libgo/go/go/internal/gccgoimporter/testdata/issue27856.go
--- 97207,97213 ----
  f2aad2f9c531bec2bade4dc207de7e45  libgo/go/go/internal/gccgoimporter/testdata/conversions.go
  8c9de978716d5ab49005c2a95eb30802  libgo/go/go/internal/gccgoimporter/testdata/conversions.gox
  8cc988510c2a6f4963b998f6d8448edf  libgo/go/go/internal/gccgoimporter/testdata/escapeinfo.go
! dae882204f18aef51368dcaef7523b98  libgo/go/go/internal/gccgoimporter/testdata/escapeinfo.gox
  46fe645e3151a082174da2dcff88e52b  libgo/go/go/internal/gccgoimporter/testdata/imports.go
  37034e36b1e8e0942b2d842a0f6062de  libgo/go/go/internal/gccgoimporter/testdata/imports.gox
  d3d07d83edba799e6b79f15c3e666977  libgo/go/go/internal/gccgoimporter/testdata/issue27856.go
*************** e8f52c582ba100d6fdf04b4a7bbc6f36  libgo/
*** 91032,91048 ****
  77882aee4bb2c6d05d3da6b08122a2e4  libgo/go/go/internal/gccgoimporter/testdata/notinheap.gox
  d252c7977d4e0ba245d64fe2a5d30b26  libgo/go/go/internal/gccgoimporter/testdata/pointer.go
  7ba18b627fc4f0e18686f8ac6ab94ff1  libgo/go/go/internal/gccgoimporter/testdata/pointer.gox
! 25905b474f8daf5c748fd1601d07ec2f  libgo/go/go/internal/gccgoimporter/testdata/time.gox
! 6b7776e67ae5d53ca59f5656077e9ce9  libgo/go/go/internal/gccgoimporter/testdata/unicode.gox
! aed8c3f6c46b268ec4901d99015742b2  libgo/go/go/internal/gccgoimporter/testdata/v1reflect.gox
  eb3940abadb512293f35d5547d38941c  libgo/go/go/internal/gcimporter/exportdata.go
! 105eef2e703b0243b1f4a1cda6eea737  libgo/go/go/internal/gcimporter/gcimporter.go
! fe9a3e26001d94f90ef00a6db5ee80a9  libgo/go/go/internal/gcimporter/gcimporter_test.go
! 4ed93af45a53d5cb924f28ca6dd2b33e  libgo/go/go/internal/gcimporter/iimport.go
! ab44749988ea788f1f20824546b37d1b  libgo/go/go/internal/gcimporter/support.go
  fa2d73794ce8800e4017f58c09681818  libgo/go/go/internal/gcimporter/testdata/a.go
  d78cd93092154dfb7842feab562a6248  libgo/go/go/internal/gcimporter/testdata/b.go
! fb949938da30994387e0897252ca0dae  libgo/go/go/internal/gcimporter/testdata/exports.go
  7a1634bb7320b0ea5c96273748430166  libgo/go/go/internal/gcimporter/testdata/issue15920.go
  91dabf42cdc4894d08abe3aff19cd9e0  libgo/go/go/internal/gcimporter/testdata/issue20046.go
  9be613ecbbf2c01c48f02d2d9e873abb  libgo/go/go/internal/gcimporter/testdata/issue25301.go
--- 97227,97244 ----
  77882aee4bb2c6d05d3da6b08122a2e4  libgo/go/go/internal/gccgoimporter/testdata/notinheap.gox
  d252c7977d4e0ba245d64fe2a5d30b26  libgo/go/go/internal/gccgoimporter/testdata/pointer.go
  7ba18b627fc4f0e18686f8ac6ab94ff1  libgo/go/go/internal/gccgoimporter/testdata/pointer.gox
! b43f5d031a1a094119c5629f298eec4d  libgo/go/go/internal/gccgoimporter/testdata/time.gox
! e9714811349019e5697ac332d760128a  libgo/go/go/internal/gccgoimporter/testdata/unicode.gox
! f7ad4710fd29265cd0c464d5571c5029  libgo/go/go/internal/gccgoimporter/testdata/v1reflect.gox
  eb3940abadb512293f35d5547d38941c  libgo/go/go/internal/gcimporter/exportdata.go
! 92eea4772c33335eb34bb7d9bc8c50fe  libgo/go/go/internal/gcimporter/gcimporter.go
! 69e0a939b49ee74b4ec19365ffe21f89  libgo/go/go/internal/gcimporter/gcimporter_test.go
! 3347744307e0bfce0c56fe97c23bc316  libgo/go/go/internal/gcimporter/iimport.go
! 23389a5e753d23157f3702cf8a35c65d  libgo/go/go/internal/gcimporter/support.go
  fa2d73794ce8800e4017f58c09681818  libgo/go/go/internal/gcimporter/testdata/a.go
  d78cd93092154dfb7842feab562a6248  libgo/go/go/internal/gcimporter/testdata/b.go
! effcd29c32e970fa4c712ac3f80d3dc6  libgo/go/go/internal/gcimporter/testdata/exports.go
! 02ba729ed9588a2b343df0b1d49fe26b  libgo/go/go/internal/gcimporter/testdata/generics.go
  7a1634bb7320b0ea5c96273748430166  libgo/go/go/internal/gcimporter/testdata/issue15920.go
  91dabf42cdc4894d08abe3aff19cd9e0  libgo/go/go/internal/gcimporter/testdata/issue20046.go
  9be613ecbbf2c01c48f02d2d9e873abb  libgo/go/go/internal/gcimporter/testdata/issue25301.go
*************** aeadde285ab5506ebf28678f041722fb  libgo/
*** 91053,91076 ****
  bf14de558b361637cf2ad47ad9aba0c5  libgo/go/go/internal/gcimporter/testdata/versions/test_go1.7_1.a
  5a0034304205c4a2c415093ecc5c04c8  libgo/go/go/internal/gcimporter/testdata/versions/test_go1.8_4.a
  77e3c54dd4f4906536e53da7838b5be9  libgo/go/go/internal/gcimporter/testdata/versions/test_go1.8_5.a
! fa92356aba7350bcd4386737e0824bb8  libgo/go/go/internal/srcimporter/srcimporter.go
  1ddcd620ea4493471981849cceb5752f  libgo/go/go/internal/srcimporter/srcimporter_test.go
  5c5d6ebb692d11662cba1e0976c899cc  libgo/go/go/internal/srcimporter/testdata/issue20855/issue20855.go
  4d161a0b48ef22681b4fa685e515db91  libgo/go/go/internal/srcimporter/testdata/issue23092/issue23092.go
  55bc01f8d6ba92e431d53ab84eb2f323  libgo/go/go/internal/srcimporter/testdata/issue24392/issue24392.go
! 5fae056f0f7aa75393db8c62fc01b8bd  libgo/go/go/parser/error_test.go
! 6914fa5fe8ab91cd3aefed9958decc21  libgo/go/go/parser/interface.go
! 5c15f7685bbbdaa66cce590a6957d20e  libgo/go/go/parser/parser.go
  b82eaade03d7012d67bcf68a073792f1  libgo/go/go/parser/parser_test.go
! 4ba9c5f7c2884da437e84577e5740ece  libgo/go/go/parser/performance_test.go
! b1da7f282fd4b9e9ef2ea850a38f0c62  libgo/go/go/parser/short_test.go
  362111aeac401922457af40d001736a1  libgo/go/go/parser/testdata/commas.src
  1a130846a9251f6d348aca13acd2e01a  libgo/go/go/parser/testdata/issue3106.src
  6480022653ed4624f85aa950e7fa37c1  libgo/go/go/parser/testdata/issue42951/not_a_file.go/invalid.go
! cb1c7e32aced5191cacdbb50386ed764  libgo/go/go/printer/nodes.go
  47eef095890b2c6fb9965a113ac4dcde  libgo/go/go/printer/performance_test.go
! 95d892939ea16d933c4c84da2cce17f0  libgo/go/go/printer/printer.go
! 272c2ad0aa544b62bfb533bda8132a98  libgo/go/go/printer/printer_test.go
  d9f820e42a7eeb56cc7af343b9699b71  libgo/go/go/printer/testdata/alignment.golden
  16fe038ae8932a4471d08f8b7ba0d807  libgo/go/go/printer/testdata/alignment.input
  1b790755dad29c1b8f0bc91b97a336d5  libgo/go/go/printer/testdata/comments.golden
--- 97249,97293 ----
  bf14de558b361637cf2ad47ad9aba0c5  libgo/go/go/internal/gcimporter/testdata/versions/test_go1.7_1.a
  5a0034304205c4a2c415093ecc5c04c8  libgo/go/go/internal/gcimporter/testdata/versions/test_go1.8_4.a
  77e3c54dd4f4906536e53da7838b5be9  libgo/go/go/internal/gcimporter/testdata/versions/test_go1.8_5.a
! 3910222f85bdc555c7d5af78e2972aaa  libgo/go/go/internal/srcimporter/srcimporter.go
  1ddcd620ea4493471981849cceb5752f  libgo/go/go/internal/srcimporter/srcimporter_test.go
  5c5d6ebb692d11662cba1e0976c899cc  libgo/go/go/internal/srcimporter/testdata/issue20855/issue20855.go
  4d161a0b48ef22681b4fa685e515db91  libgo/go/go/internal/srcimporter/testdata/issue23092/issue23092.go
  55bc01f8d6ba92e431d53ab84eb2f323  libgo/go/go/internal/srcimporter/testdata/issue24392/issue24392.go
! 34418d92f365a72dda113411b2995d2c  libgo/go/go/internal/typeparams/common.go
! 83e663ed1d01a8b65e0111a4ec5bd6a0  libgo/go/go/internal/typeparams/typeparams.go
! 000ff1fbeb53c635ffaea933884bcab9  libgo/go/go/parser/error_test.go
! dd5f6d0b7adb87ce052bfc48b8a36187  libgo/go/go/parser/interface.go
! ad283f57a42f3428f397dcf2f6db512e  libgo/go/go/parser/parser.go
  b82eaade03d7012d67bcf68a073792f1  libgo/go/go/parser/parser_test.go
! f95f1aba60653f708663d8370e44cf12  libgo/go/go/parser/performance_test.go
! 75306cece75ebe558b95183968fd32dd  libgo/go/go/parser/resolver.go
! b80ed5ce0bbc8b2f5c9c5f544ee22a69  libgo/go/go/parser/resolver_test.go
! ee8d7bead9411588eb7121ba40067dd8  libgo/go/go/parser/short_test.go
! b94197374670b079ba1f6393aec0e102  libgo/go/go/parser/testdata/chans.go2
  362111aeac401922457af40d001736a1  libgo/go/go/parser/testdata/commas.src
+ 278d3883a143e03d60a91e1a1895f18a  libgo/go/go/parser/testdata/issue11377.src
+ 326d6133020efa698740ed03c2545b65  libgo/go/go/parser/testdata/issue23434.src
  1a130846a9251f6d348aca13acd2e01a  libgo/go/go/parser/testdata/issue3106.src
+ 59021e708794fb2dceffcaf0340aee33  libgo/go/go/parser/testdata/issue34946.src
  6480022653ed4624f85aa950e7fa37c1  libgo/go/go/parser/testdata/issue42951/not_a_file.go/invalid.go
! e2cf4fff024fdadc38d2d28c28eaef7f  libgo/go/go/parser/testdata/issue44504.src
! 50a64797baa359ba803b0c07c0b4c8f1  libgo/go/go/parser/testdata/linalg.go2
! 1764b792c9b5ba290074d5e0b5265d95  libgo/go/go/parser/testdata/map.go2
! e3c335530ba2d6cef3e5bfcd1a2130be  libgo/go/go/parser/testdata/metrics.go2
! 5d9f9ed1254254defe62a62301352079  libgo/go/go/parser/testdata/resolution/issue45136.src
! 72deef10941e0c1b8854b1fd26f089f3  libgo/go/go/parser/testdata/resolution/issue45160.src
! 0b93ec11c468bb22f8ff0f06aa9735ee  libgo/go/go/parser/testdata/resolution/resolution.src
! d2b6c6c72a40545daaee50f46e88c071  libgo/go/go/parser/testdata/resolution/typeparams.go2
! 3984ae1f2bd61d8f98ba1b2b2cd4efbc  libgo/go/go/parser/testdata/set.go2
! 4ca8dc21b24ebaea918dc000d5fc21a9  libgo/go/go/parser/testdata/slices.go2
! 19f0b188c2702055338d5b9420fbaff0  libgo/go/go/parser/testdata/sort.go2
! b06c7d391d7a2dc3ff9321b7863c9c77  libgo/go/go/parser/testdata/typeparams.src
! c01e8989105f56949ef6d0b0ff18cae4  libgo/go/go/printer/gobuild.go
! 2851d204ac7f7eee9cf63e26b6c26ae6  libgo/go/go/printer/nodes.go
  47eef095890b2c6fb9965a113ac4dcde  libgo/go/go/printer/performance_test.go
! 3d68772f0483e17923eb9e694860e41b  libgo/go/go/printer/printer.go
! 0211ff992d706d77da54efab25645e4d  libgo/go/go/printer/printer_test.go
  d9f820e42a7eeb56cc7af343b9699b71  libgo/go/go/printer/testdata/alignment.golden
  16fe038ae8932a4471d08f8b7ba0d807  libgo/go/go/printer/testdata/alignment.input
  1b790755dad29c1b8f0bc91b97a336d5  libgo/go/go/printer/testdata/comments.golden
*************** a52c8b3df904d8ce2206f860529ec368  libgo/
*** 91081,91247 ****
  bfeec2d4f5c215e8e73fb4c64c33890f  libgo/go/go/printer/testdata/complit.input
  35b0ff6fe9b4b3c373f09f2e071382dd  libgo/go/go/printer/testdata/complit.x
  bb47fdeb43c02c4738bef5ed721cfe5f  libgo/go/go/printer/testdata/declarations.golden
! b9fd25f9636658afa591244caa09d205  libgo/go/go/printer/testdata/declarations.input
  844f4638b6f2ac8ff51fb9b08ba912e2  libgo/go/go/printer/testdata/empty.golden
  844f4638b6f2ac8ff51fb9b08ba912e2  libgo/go/go/printer/testdata/empty.input
  0475f52459bd9ca1c93bb1f7338bbfa4  libgo/go/go/printer/testdata/expressions.golden
  f464c3f5e94d978350ffc105a3e672cf  libgo/go/go/printer/testdata/expressions.input
  7eb7d2808ef1f4646bae851b2d047ac9  libgo/go/go/printer/testdata/expressions.raw
  df4aaedd6d7edf6471c6363b96f795c7  libgo/go/go/printer/testdata/go2numbers.golden
  044db0cfacf41ac5e9e196f6d94dfbd5  libgo/go/go/printer/testdata/go2numbers.input
  ca43d929b2ceece8c92e6759db0a8ff1  libgo/go/go/printer/testdata/go2numbers.norm
  54cbe27977459067884da0108f3c1c3c  libgo/go/go/printer/testdata/linebreaks.golden
  a5ba1a460ad6c282f937c16b5c2badd0  libgo/go/go/printer/testdata/linebreaks.input
! b776048c31403cc51479f0db5c84468e  libgo/go/go/printer/testdata/parser.go
  875c096fbdc952394336b698e8b28faf  libgo/go/go/printer/testdata/slow.golden
  9c50bb59eb5a355a27762a6c8a0b754d  libgo/go/go/printer/testdata/slow.input
  c32070e550551ee1057b8c015483f42d  libgo/go/go/printer/testdata/statements.golden
  6d36ac4950b4eaed99ad086d4897b606  libgo/go/go/printer/testdata/statements.input
! edf121a0d1c71749f3ece109a73694d0  libgo/go/go/scanner/errors.go
! aba79891d778a3912d3df8691cc2cd78  libgo/go/go/scanner/scanner.go
! 13bbaa71abf373f2d244bc7e4996b37c  libgo/go/go/scanner/scanner_test.go
  baea047d348fd93adde5c2f5902bf9a7  libgo/go/go/token/example_test.go
! dfa2e5e8ef03adf46474f835ff1b3045  libgo/go/go/token/position.go
  99e5f129d15043788208753943786cd4  libgo/go/go/token/position_test.go
! 814b43a3b82369e7deed2ff7e7c6d079  libgo/go/go/token/serialize.go
! 7f96cc16b25fcc0687a856f1bd33e74f  libgo/go/go/token/serialize_test.go
! 0328cf596208beae09a04e7285aabe78  libgo/go/go/token/token.go
  6a2b61bdb350f083c29a0af1bcf7a37f  libgo/go/go/token/token_test.go
! 0b28272cccb96d56514e76753a143bbc  libgo/go/go/types/api.go
! 0a9922529a47bd740112c558290ef2ef  libgo/go/go/types/api_test.go
! df569654d5d781799a2e02a5557cdccb  libgo/go/go/types/assignments.go
! d1414dac16e32e4f1d17421f1023b7c4  libgo/go/go/types/builtins.go
! a08bb7ccec9c006300659030a2ec45ff  libgo/go/go/types/builtins_test.go
! 84de8c3e970a780277007600cc42721b  libgo/go/go/types/call.go
! 51d845a4bf98a7a5a44b8fdad52ea6d8  libgo/go/go/types/check.go
! 4c1549e9d3aeb7e155655abaf2a7d1c3  libgo/go/go/types/check_test.go
! ba6a1328352da11a2264613aa6281320  libgo/go/go/types/conversions.go
! f19b22c98ce47373cb0b9be2d31cf2d5  libgo/go/go/types/decl.go
! eadf01a4966ea0f59b0602d822e1552f  libgo/go/go/types/errorcodes.go
! 745f11eb0d717043d1a4d83a97038e5a  libgo/go/go/types/errorcodes_test.go
! e3c6cc0b49358383decd728fdce4e663  libgo/go/go/types/errors.go
! 1868beb856f30bdb110b2fdc91238e69  libgo/go/go/types/eval.go
! 1367e8b84242c7d42cb6bb1cc633b528  libgo/go/go/types/eval_test.go
! 8cb45ba351067662a9e438b5b118e444  libgo/go/go/types/example_test.go
! 309e778ec94c84141f879d214b6b09a1  libgo/go/go/types/expr.go
! 9bed1f6e6ef958381f2b6527b48b2847  libgo/go/go/types/exprstring.go
! 8ed6d8b0fb472274826f384ff6d90799  libgo/go/go/types/exprstring_test.go
  35a1fe79aa62d392ec0a7e238232d6fd  libgo/go/go/types/gccgosizes.go
! d75feba1cd83fe7877030671d6e1595a  libgo/go/go/types/gotype.go
! 7c5725c280fc3df46912afedf256b134  libgo/go/go/types/hilbert_test.go
! f2b01caf257d7a20674b79942cacb48e  libgo/go/go/types/initorder.go
! cf0067f3096ff68413a52d58ba2919da  libgo/go/go/types/issues_test.go
! dd137e07eb215940585370fb3a21d360  libgo/go/go/types/labels.go
! a397eaec8ae991e1faffc624876dd32a  libgo/go/go/types/lookup.go
! a3839545900d35fc3ecc163471723220  libgo/go/go/types/methodset.go
! cf4e23e4c3f35c8cd199940f4c90256c  libgo/go/go/types/object.go
! 55a65c987a87796a9208085aba2a1e48  libgo/go/go/types/object_test.go
  f2ff0868ba0ab2672cc4e85528cc2f7c  libgo/go/go/types/objset.go
! 6bf5cf67e425b7e175e899b81e4dbdc3  libgo/go/go/types/operand.go
  e46dba56e3772c008e9e2afc1ea14074  libgo/go/go/types/package.go
! 56e523aebb94254653edd764cb17068c  libgo/go/go/types/predicates.go
! 6690aa16e3ae9531a614918816ccd232  libgo/go/go/types/resolver.go
  25fe964a60967efdafd8cbb1ba593ca0  libgo/go/go/types/resolver_test.go
  1ca75c3032dd6f340590617c3c02cb0b  libgo/go/go/types/return.go
! f9948680939961e0f6418fac0fa903bb  libgo/go/go/types/scope.go
  4500c9306a301889ef87a02195752d7b  libgo/go/go/types/selection.go
! a6ee3a769de242de18fcc51827d9137a  libgo/go/go/types/self_test.go
! 702a7c3990388a5c32e89a8e2f805e8c  libgo/go/go/types/sizes.go
  4e1e2589621b76695b808b6b677f39e6  libgo/go/go/types/sizes_test.go
! a2cd16591fdfa79f7ef98644f290a774  libgo/go/go/types/stdlib_test.go
! 1d6954d1f038b47a698a52200efe3fbe  libgo/go/go/types/stmt.go
! 008462149fe95dcefb74d6f667b079af  libgo/go/go/types/testdata/blank.src
! f8085390ee334b329a853c5715290771  libgo/go/go/types/testdata/builtins.src
! f29bac3367b85c3b92fa33e54b10e705  libgo/go/go/types/testdata/const0.src
! 8c449f1a8fb86e1997b04091718c3fe7  libgo/go/go/types/testdata/const1.src
! 86c2c1ef1f64d8fa8226516803b7f277  libgo/go/go/types/testdata/constdecl.src
! 1fe35ddc4ddb5b91c5bfe6afc171ab86  libgo/go/go/types/testdata/conversions.src
! 94ced19e10ffde3473340cc1d79339e7  libgo/go/go/types/testdata/conversions2.src
! 544338dccc69a24b87a4f6ac5cea5538  libgo/go/go/types/testdata/cycles.src
! e422e493f2eb6cf61258dd94b1abcfca  libgo/go/go/types/testdata/cycles1.src
! 3f5efced473a835a0542b6b6f04977ab  libgo/go/go/types/testdata/cycles2.src
! cbe80cc074110d1d70d23636e566e8b2  libgo/go/go/types/testdata/cycles3.src
! 504c4a77c5f0451810add2ad1422146a  libgo/go/go/types/testdata/cycles4.src
! bde8ec7d2176a8a2c54817e41af082f9  libgo/go/go/types/testdata/cycles5.src
! 85940ae79e224255c65ada285263111d  libgo/go/go/types/testdata/decls0.src
! c666841104c793be2718aabe501cc6cf  libgo/go/go/types/testdata/decls1.src
! 12a09f4291016af1c6dadd60ba5fd9e4  libgo/go/go/types/testdata/decls2a.src
! c042412a65bfe3884be84c1307a74e00  libgo/go/go/types/testdata/decls2b.src
! 20608e21f45967894e9fc9f9d7b215c8  libgo/go/go/types/testdata/decls3.src
! 70b1c5068e1e39d45116b9de826fd32e  libgo/go/go/types/testdata/decls4.src
! 07e078643ddda701387abc66e94c175f  libgo/go/go/types/testdata/decls5.src
! a35ff5cb8c071230e952d1dce60e00c5  libgo/go/go/types/testdata/errors.src
! 2031bfb47acd5d5bf3f870f3d420f66f  libgo/go/go/types/testdata/expr0.src
! a9ce179fc2b1677dad210c8873a24217  libgo/go/go/types/testdata/expr1.src
! 7b84531a732a948ce059a36b3a69422a  libgo/go/go/types/testdata/expr2.src
! 4231a6e2d73a8c955c772ea98a1fbda0  libgo/go/go/types/testdata/expr3.src
! 5c94eeb6b55885675d4f84c0e6b20ca8  libgo/go/go/types/testdata/gotos.src
! db641dbe9fcdb62946ff5fd045c88f59  libgo/go/go/types/testdata/importC.src
! 46ff342259a4ec3927ed1907e02dc771  libgo/go/go/types/testdata/importdecl0a.src
! 5b0d5208394b405398b8128a0f6aa4c3  libgo/go/go/types/testdata/importdecl0b.src
! f2a5574eb1b0300d377550415b4f39f1  libgo/go/go/types/testdata/importdecl1a.src
! 163160b86089fc34784373a479fc446f  libgo/go/go/types/testdata/importdecl1b.src
! 03247d6c441722b2c1dd0bf2a5b22d1e  libgo/go/go/types/testdata/init0.src
! 65d334e9813ba6e1367f9920ffede43b  libgo/go/go/types/testdata/init1.src
! 82306de0bef1e661c90f9f77801cf752  libgo/go/go/types/testdata/init2.src
! 8113077fe1c39682d3f202161d5c9d79  libgo/go/go/types/testdata/issue25008a.src
! ab72be0005cedb4d1cbe8c9640935d68  libgo/go/go/types/testdata/issue25008b.src
! f003ba3e8bb918f7829c6aea8658f7fd  libgo/go/go/types/testdata/issues.src
! 6970d9e692e79c1b9d7e65fe0567d01e  libgo/go/go/types/testdata/labels.src
! cd845c1a3d1cdd5a2aea623c3f926380  libgo/go/go/types/testdata/literals.src
! 12cabb6502fee8532daa89bf04d6c0d4  libgo/go/go/types/testdata/methodsets.src
! aa25dc6346414ca9da5f55995ec67c56  libgo/go/go/types/testdata/shifts.src
! 186bc7b03a0d04e5187b9fe455277ab4  libgo/go/go/types/testdata/stmt0.src
! ba7656e7e724bb7562202316c80f9787  libgo/go/go/types/testdata/stmt1.src
! a0be82eda51173b561726a64e04cfcd9  libgo/go/go/types/testdata/vardecl.src
  4abe25acbffdb7feb1ba047129054611  libgo/go/go/types/token_test.go
! d739614ca3c1042ff3503130c3b74e2b  libgo/go/go/types/type.go
! e808c960462de22436f95b1ee1c13043  libgo/go/go/types/typestring.go
! e66a9c7215c924cc2523a90433cbd769  libgo/go/go/types/typestring_test.go
! 6db6f3e6e31c1e31a4aaf64ac3abbdb5  libgo/go/go/types/typexpr.go
! 30cc99ca40ff0d0ebb41439489c1c711  libgo/go/go/types/universe.go
! 294175d8fccde1f8879927872562464c  libgo/go/golang.org/x/crypto/chacha20/chacha_arm64.go
  6e8cb26a6e41c21717e772a10b2f2a6d  libgo/go/golang.org/x/crypto/chacha20/chacha_generic.go
! 7082af02c0206377432fd6e14cd66515  libgo/go/golang.org/x/crypto/chacha20/chacha_noasm.go
! bb1312b92dafd211928941424de5ae72  libgo/go/golang.org/x/crypto/chacha20/chacha_ppc64le.go
! 39549f24b1eb49abf6a0a665d7908ac3  libgo/go/golang.org/x/crypto/chacha20/chacha_s390x.go
  001058088edcf8ef751b1dfdd825a2dd  libgo/go/golang.org/x/crypto/chacha20/xor.go
! bc4746b36731db02210cb2a2779a996b  libgo/go/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go
! 0973c058dd91a31d8d511f8c95c1ece6  libgo/go/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go
! 9e59656d225750b0552c8b3bcca22a3b  libgo/go/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go
! a208724f94100e267934abb44876746e  libgo/go/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go
! 9e9656b041ae703ef7995fb3c45173cd  libgo/go/golang.org/x/crypto/chacha20poly1305/xchacha20poly1305.go
! f814205c53d4e6ca09f449eca77cc2b7  libgo/go/golang.org/x/crypto/cryptobyte/asn1.go
  a852d2d0592351484d2ea6420359b481  libgo/go/golang.org/x/crypto/cryptobyte/asn1/asn1.go
  ab8c271bbf0d149ff9712708622bb755  libgo/go/golang.org/x/crypto/cryptobyte/builder.go
  6991f1b3d36a2f360ea8ba64afddb1dc  libgo/go/golang.org/x/crypto/cryptobyte/string.go
! 4aa22ee59b3478bc17caa67f45eeb48a  libgo/go/golang.org/x/crypto/curve25519/curve25519.go
! 9bcc043bc3ea1254e2459157383f4f38  libgo/go/golang.org/x/crypto/curve25519/curve25519_amd64.go
  cdd5537b6532b98ed1962a7e070059b2  libgo/go/golang.org/x/crypto/curve25519/curve25519_generic.go
! f6887bb489afef44eb98658bf85a420c  libgo/go/golang.org/x/crypto/curve25519/curve25519_noasm.go
  136a6396cd8588e8bf55616381cf3e3f  libgo/go/golang.org/x/crypto/ed25519/ed25519.go
  158d8cbe55872faed590ea493065e499  libgo/go/golang.org/x/crypto/ed25519/ed25519_go113.go
  7d7d579cae9aa68ee288df719b2be675  libgo/go/golang.org/x/crypto/ed25519/internal/edwards25519/const.go
  7351f56555c0f74406c03baa8b2bb44e  libgo/go/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go
  ffcbf66e442f8121fdd6dc6f677d0a28  libgo/go/golang.org/x/crypto/hkdf/hkdf.go
! 1604a1e6b41063ca158106c22de5e7a0  libgo/go/golang.org/x/crypto/internal/subtle/aliasing.go
  4e827205e775951ae90121fe4dfb07a4  libgo/go/golang.org/x/crypto/internal/subtle/aliasing_appengine.go
! 13a32f566cf41201625b267b19b33a59  libgo/go/golang.org/x/crypto/poly1305/bits_compat.go
! e39f74da755ccdbd9e3862245e23fc21  libgo/go/golang.org/x/crypto/poly1305/bits_go1.13.go
! 418a6aac1e09a6a5c97c9b91e973b0c0  libgo/go/golang.org/x/crypto/poly1305/mac_noasm.go
  f7cac3740f0f0648b7ec7f56a3807ca8  libgo/go/golang.org/x/crypto/poly1305/poly1305.go
! 8e00e16edc44eb4005ad263e1a0a75cf  libgo/go/golang.org/x/crypto/poly1305/sum_amd64.go
  98c6abccaad0c4c2e1d2385d96236c9a  libgo/go/golang.org/x/crypto/poly1305/sum_generic.go
! 6f5d476ef9ad8820918fc146df976b25  libgo/go/golang.org/x/crypto/poly1305/sum_ppc64le.go
! 5256516c87093d2075734d4dd3913917  libgo/go/golang.org/x/crypto/poly1305/sum_s390x.go
  5d4950ecb7b26d2c5e4e7b4e0dd74707  libgo/go/golang.org/x/mod/LICENSE
  3a55d95595a6f9e37dee53826b4daff2  libgo/go/golang.org/x/mod/PATENTS
  01f071fdba44f661c678e282b4b86423  libgo/go/golang.org/x/mod/internal/lazyregexp/lazyre.go
  eef486d3a5702629cd3b1f847e74d9a9  libgo/go/golang.org/x/mod/modfile/print.go
! d7449f53ffc8bc05508db0741986ebc3  libgo/go/golang.org/x/mod/modfile/read.go
! 3853a5dd9be96cf437d2e3cb59211c9e  libgo/go/golang.org/x/mod/modfile/rule.go
! 0ac763cbab52f0d2b4eb4ff562022731  libgo/go/golang.org/x/mod/module/module.go
! 275fb73fa32ea3b8de7e2016c2c8a2cf  libgo/go/golang.org/x/mod/semver/semver.go
  492129824fc9784e2099ab478c939872  libgo/go/golang.org/x/mod/sumdb/cache.go
  becf75eb44b4de4d653ad78ff96f046c  libgo/go/golang.org/x/mod/sumdb/client.go
  cda0ed349ceae0857ba39c4fc10044f3  libgo/go/golang.org/x/mod/sumdb/dirhash/hash.go
--- 97298,97619 ----
  bfeec2d4f5c215e8e73fb4c64c33890f  libgo/go/go/printer/testdata/complit.input
  35b0ff6fe9b4b3c373f09f2e071382dd  libgo/go/go/printer/testdata/complit.x
  bb47fdeb43c02c4738bef5ed721cfe5f  libgo/go/go/printer/testdata/declarations.golden
! 0179e4b21dfa2899c18f96b885990b9c  libgo/go/go/printer/testdata/declarations.input
  844f4638b6f2ac8ff51fb9b08ba912e2  libgo/go/go/printer/testdata/empty.golden
  844f4638b6f2ac8ff51fb9b08ba912e2  libgo/go/go/printer/testdata/empty.input
  0475f52459bd9ca1c93bb1f7338bbfa4  libgo/go/go/printer/testdata/expressions.golden
  f464c3f5e94d978350ffc105a3e672cf  libgo/go/go/printer/testdata/expressions.input
  7eb7d2808ef1f4646bae851b2d047ac9  libgo/go/go/printer/testdata/expressions.raw
+ c40f460add5d734a9c6a516e640dce4e  libgo/go/go/printer/testdata/generics.golden
+ 0f39e87eb2b54c51151fc61d426402c3  libgo/go/go/printer/testdata/generics.input
  df4aaedd6d7edf6471c6363b96f795c7  libgo/go/go/printer/testdata/go2numbers.golden
  044db0cfacf41ac5e9e196f6d94dfbd5  libgo/go/go/printer/testdata/go2numbers.input
  ca43d929b2ceece8c92e6759db0a8ff1  libgo/go/go/printer/testdata/go2numbers.norm
+ deacc2590cbf1b1e7b27de3528ac4b77  libgo/go/go/printer/testdata/gobuild1.golden
+ a204c3d2077b8d957f8b3b44ed0626aa  libgo/go/go/printer/testdata/gobuild1.input
+ 2b95c6280e0843f03c6c0f770d4d38b8  libgo/go/go/printer/testdata/gobuild2.golden
+ e386c59a0cd53349d464098e7b51314b  libgo/go/go/printer/testdata/gobuild2.input
+ 9d9bc7fd20857caf1287aec804021dc3  libgo/go/go/printer/testdata/gobuild3.golden
+ a63f27a87900694995e934ea2100d889  libgo/go/go/printer/testdata/gobuild3.input
+ a2b7a3f9e4fc49928fe2a38c6b1feb79  libgo/go/go/printer/testdata/gobuild4.golden
+ e6eed32dc8651c7600041db806eff6ef  libgo/go/go/printer/testdata/gobuild4.input
+ 751c77a3ebfd0ed781ed26974e8ccbd5  libgo/go/go/printer/testdata/gobuild5.golden
+ cab52bc0b9bd8d16f683f08a094261e3  libgo/go/go/printer/testdata/gobuild5.input
+ d6cdb64b32ef1d14036805d3dbfff9f4  libgo/go/go/printer/testdata/gobuild6.golden
+ 6086c0f3c8eb9e0e831ec4b7455d386a  libgo/go/go/printer/testdata/gobuild6.input
+ 88eacc5092c04a30b6c3b36aaf9c0f5e  libgo/go/go/printer/testdata/gobuild7.golden
+ 88eacc5092c04a30b6c3b36aaf9c0f5e  libgo/go/go/printer/testdata/gobuild7.input
  54cbe27977459067884da0108f3c1c3c  libgo/go/go/printer/testdata/linebreaks.golden
  a5ba1a460ad6c282f937c16b5c2badd0  libgo/go/go/printer/testdata/linebreaks.input
! 1c263ff6e11eaa2ea0df5f964069447a  libgo/go/go/printer/testdata/parser.go
  875c096fbdc952394336b698e8b28faf  libgo/go/go/printer/testdata/slow.golden
  9c50bb59eb5a355a27762a6c8a0b754d  libgo/go/go/printer/testdata/slow.input
  c32070e550551ee1057b8c015483f42d  libgo/go/go/printer/testdata/statements.golden
  6d36ac4950b4eaed99ad086d4897b606  libgo/go/go/printer/testdata/statements.input
! 48c00ab215923ae73a8d7515e0766043  libgo/go/go/scanner/errors.go
! 4c935cfed74b15f258b50125f54c6aea  libgo/go/go/scanner/scanner.go
! 1d409760de14946cd7677694cfb428ef  libgo/go/go/scanner/scanner_test.go
  baea047d348fd93adde5c2f5902bf9a7  libgo/go/go/token/example_test.go
! a0f9c2f62437d0ccaa8d734e8331d7b0  libgo/go/go/token/position.go
! 3d0dd0a43d24f1b054474f8779ca2585  libgo/go/go/token/position_bench_test.go
  99e5f129d15043788208753943786cd4  libgo/go/go/token/position_test.go
! 89c992e4c70f5198b2cbb6f6d1b05947  libgo/go/go/token/serialize.go
! 2e8edac5a90c24d397a90ae974b97205  libgo/go/go/token/serialize_test.go
! acb18d67e4b1f83a5fb5e7f3ba330929  libgo/go/go/token/token.go
  6a2b61bdb350f083c29a0af1bcf7a37f  libgo/go/go/token/token_test.go
! 01504bc335bf8b13827aee209121da29  libgo/go/go/types/api.go
! 7b7062dc1147bd6ee59d2cc05e9c4537  libgo/go/go/types/api_test.go
! 9de97332ed24bf6b0ebe86206f85f2d9  libgo/go/go/types/array.go
! 905d694edf334706f956369150675c98  libgo/go/go/types/assignments.go
! 09c44d56802fd7eeac9861e8f1de5b51  libgo/go/go/types/basic.go
! 119b1beebb660de52f9f10e2c4f7a668  libgo/go/go/types/builtins.go
! 08b3c09aaf41bfabcaf0da9fc2828d9b  libgo/go/go/types/builtins_test.go
! 76813f53b42ddb6180c21e722728dc5c  libgo/go/go/types/call.go
! edaf848dee96edbe1f3ee3c3de108dd4  libgo/go/go/types/chan.go
! d881ea27848202e3a44058e75b94d18a  libgo/go/go/types/check.go
! 41d3c7243e2436e7fdaf9eb97c4bb551  libgo/go/go/types/check_test.go
! e585256c5a36a7d3a7170fe861ac04fb  libgo/go/go/types/context.go
! 8b766dda2bef5d6c52d1c457c13bfd27  libgo/go/go/types/context_test.go
! f2fb2e6722fd01f2319a632310bdb8da  libgo/go/go/types/conversions.go
! a403be05606241e0d3fd0a63ff6e1ef8  libgo/go/go/types/decl.go
! c2fc0b318b7708b3830e134c6ef86fc5  libgo/go/go/types/errorcodes.go
! 8492096e657dba5ae17cb7467d8eb555  libgo/go/go/types/errorcodes_test.go
! fbed61ef20fa938009ecd823b19cfcca  libgo/go/go/types/errors.go
! 51df9a857433f3106bc94eb95263b3b6  libgo/go/go/types/errors_test.go
! 0565677fa5071d931a405ed0116622e8  libgo/go/go/types/eval.go
! 69fd6114f58022eed4dd3554dbc90842  libgo/go/go/types/eval_test.go
! 35749da1bd5d2816bc205f8e8d6d8b51  libgo/go/go/types/example_test.go
! 237a3711acbb8aa5e61353774903f941  libgo/go/go/types/expr.go
! 08a0a11613daf02d3551d0236ff9db06  libgo/go/go/types/exprstring.go
! 2412cbf1295feddcf5221fbfc0441655  libgo/go/go/types/exprstring_test.go
  35a1fe79aa62d392ec0a7e238232d6fd  libgo/go/go/types/gccgosizes.go
! 0f4b8c3c1c1660502a171ab3f508683f  libgo/go/go/types/gotype.go
! c81ac3361c76b79f8b0bcfed3c2b59c3  libgo/go/go/types/hilbert_test.go
! 38d664dbe1a554e1562d031e269fdb89  libgo/go/go/types/index.go
! d7500bdaca7dff3dd051fb3260e94e40  libgo/go/go/types/infer.go
! e442bffef95c98070d1bf91b35934099  libgo/go/go/types/initorder.go
! 1b0cd4b90be4d2c347c68150307089ac  libgo/go/go/types/instantiate.go
! 984a37bb87be4c76b8dc47afcea57077  libgo/go/go/types/instantiate_test.go
! 6ba8d6f97f4aeec26898f15adbff2b01  libgo/go/go/types/interface.go
! 7e2725176e5105c55412c142ef364581  libgo/go/go/types/issues_test.go
! 75612c5e964442f25906ab9b64d6ad0e  libgo/go/go/types/labels.go
! ea0f733bfa0343bb6cf43e735bb8666a  libgo/go/go/types/lookup.go
! b1cba5a4ac7a4f4e9a27a16c641d303e  libgo/go/go/types/map.go
! 7fda9b25c8dadc487ec4aebc0c658b6f  libgo/go/go/types/methodlist.go
! f4e1483995165048730524e2aac80cfe  libgo/go/go/types/methodlist_test.go
! 43cc3fb077a8d2867a1a111acbaba3b8  libgo/go/go/types/methodset.go
! eb49f5b3503c4329ef4ec3a14576fa3b  libgo/go/go/types/methodset_test.go
! 4ae5d0d28eb88d69d111bc7720a70bd8  libgo/go/go/types/mono.go
! 3664d94932abe8222daf51e4318cd092  libgo/go/go/types/mono_test.go
! c231a3b7f907c142314c10b702fa478f  libgo/go/go/types/named.go
! e87cb4d081961a1af30968f8c2e7a20e  libgo/go/go/types/object.go
! dc11dbb7376d1a870fab5ab22b9a2cd6  libgo/go/go/types/object_test.go
  f2ff0868ba0ab2672cc4e85528cc2f7c  libgo/go/go/types/objset.go
! be2940c0c6a6bdc82321128921c829ff  libgo/go/go/types/operand.go
  e46dba56e3772c008e9e2afc1ea14074  libgo/go/go/types/package.go
! d80fffdeaad5423e4c4a81a9834e9902  libgo/go/go/types/pointer.go
! 357d8319dd4c659d5cea82011938096e  libgo/go/go/types/predicates.go
! c16ce5c3274416fd72f19e7023b03942  libgo/go/go/types/resolver.go
  25fe964a60967efdafd8cbb1ba593ca0  libgo/go/go/types/resolver_test.go
  1ca75c3032dd6f340590617c3c02cb0b  libgo/go/go/types/return.go
! ff31ab9cfcbe5ac11a2163ee31d08cd4  libgo/go/go/types/scope.go
  4500c9306a301889ef87a02195752d7b  libgo/go/go/types/selection.go
! 30135836b951bcf69c394d258be15bd0  libgo/go/go/types/self_test.go
! b7c56f04584a8028630f095e94e0d6e7  libgo/go/go/types/signature.go
! d4f07be5a48406890b4d2882e722766e  libgo/go/go/types/sizeof_test.go
! 9f50a17761eb6d357f558a79a84a0ab9  libgo/go/go/types/sizes.go
  4e1e2589621b76695b808b6b677f39e6  libgo/go/go/types/sizes_test.go
! 6dd6da28cf9786e4f636a6921872f647  libgo/go/go/types/slice.go
! 77e017e937b462e71606075d6c4840ed  libgo/go/go/types/stdlib_test.go
! 29a0e934517be20a09aaf0b9991137c4  libgo/go/go/types/stmt.go
! ed1285b391785e8754bdf5892d18ec9f  libgo/go/go/types/struct.go
! e6f6ecbe298c8fa4782e46a0b8d0a7ef  libgo/go/go/types/subst.go
! c81b8f0d719b6c37800e2e0a905a1ee4  libgo/go/go/types/termlist.go
! 83fb333c211d6e6cb261e401c46ad244  libgo/go/go/types/termlist_test.go
! 008462149fe95dcefb74d6f667b079af  libgo/go/go/types/testdata/check/blank.src
! da1a5914c41ca2e4cfd9faa611a5f4c2  libgo/go/go/types/testdata/check/builtins.go2
! a7bd26d2c60b58a4405e0aa8d9d27512  libgo/go/go/types/testdata/check/builtins.src
! b94197374670b079ba1f6393aec0e102  libgo/go/go/types/testdata/check/chans.go2
! 3679da0868cfdf0574c7016415b0212e  libgo/go/go/types/testdata/check/const0.src
! e07e23667e0fae82d2503025c94b4615  libgo/go/go/types/testdata/check/const1.src
! 86c2c1ef1f64d8fa8226516803b7f277  libgo/go/go/types/testdata/check/constdecl.src
! 1fe35ddc4ddb5b91c5bfe6afc171ab86  libgo/go/go/types/testdata/check/conversions.src
! 94ced19e10ffde3473340cc1d79339e7  libgo/go/go/types/testdata/check/conversions2.src
! 0f95609a0771a1d4e0a3014dce94293f  libgo/go/go/types/testdata/check/cycles.src
! e422e493f2eb6cf61258dd94b1abcfca  libgo/go/go/types/testdata/check/cycles1.src
! 3f5efced473a835a0542b6b6f04977ab  libgo/go/go/types/testdata/check/cycles2.src
! cbe80cc074110d1d70d23636e566e8b2  libgo/go/go/types/testdata/check/cycles3.src
! e1af3762b43c50c3765ea35b8f847bea  libgo/go/go/types/testdata/check/cycles4.src
! 540f5da785e08de2793931ba415cafbd  libgo/go/go/types/testdata/check/cycles5.src
! 787b97dd31823beb1245e446636c9690  libgo/go/go/types/testdata/check/decls0.src
! c03242d6e9ae182a896499876b4e5400  libgo/go/go/types/testdata/check/decls1.src
! 12a09f4291016af1c6dadd60ba5fd9e4  libgo/go/go/types/testdata/check/decls2/decls2a.src
! c042412a65bfe3884be84c1307a74e00  libgo/go/go/types/testdata/check/decls2/decls2b.src
! 20608e21f45967894e9fc9f9d7b215c8  libgo/go/go/types/testdata/check/decls3.src
! 70b1c5068e1e39d45116b9de826fd32e  libgo/go/go/types/testdata/check/decls4.src
! 07e078643ddda701387abc66e94c175f  libgo/go/go/types/testdata/check/decls5.src
! feaac88a77c26e2cfacfbdbe069de302  libgo/go/go/types/testdata/check/errors.src
! 2031bfb47acd5d5bf3f870f3d420f66f  libgo/go/go/types/testdata/check/expr0.src
! 01067336bb4a203a3fb75827607a6280  libgo/go/go/types/testdata/check/expr1.src
! 7e8a5f23febcc3db10db301c24b1b0ba  libgo/go/go/types/testdata/check/expr2.src
! 206dc6031791e19e0713cb509b8f8192  libgo/go/go/types/testdata/check/expr3.src
! 2c1937e6503bc1690362232cfddab1eb  libgo/go/go/types/testdata/check/go1_12.src
! d2a2de107ca2448c76fc7b7bb848da30  libgo/go/go/types/testdata/check/go1_13.src
! 67ed2e0f8436474c6ed46ca168b24dc0  libgo/go/go/types/testdata/check/go1_16.src
! e56198ad4410f42d0c58fb096008a2ef  libgo/go/go/types/testdata/check/go1_8.src
! 5c94eeb6b55885675d4f84c0e6b20ca8  libgo/go/go/types/testdata/check/gotos.src
! db641dbe9fcdb62946ff5fd045c88f59  libgo/go/go/types/testdata/check/importC.src
! 29983025c3a5447c275838614551b004  libgo/go/go/types/testdata/check/importdecl0/importdecl0a.src
! 0e2e3153a13969f36974bd64a08f98f0  libgo/go/go/types/testdata/check/importdecl0/importdecl0b.src
! f2a5574eb1b0300d377550415b4f39f1  libgo/go/go/types/testdata/check/importdecl1/importdecl1a.src
! e6171b867a52ee3172df70db3aa0758a  libgo/go/go/types/testdata/check/importdecl1/importdecl1b.src
! 03247d6c441722b2c1dd0bf2a5b22d1e  libgo/go/go/types/testdata/check/init0.src
! 65d334e9813ba6e1367f9920ffede43b  libgo/go/go/types/testdata/check/init1.src
! 82306de0bef1e661c90f9f77801cf752  libgo/go/go/types/testdata/check/init2.src
! 8113077fe1c39682d3f202161d5c9d79  libgo/go/go/types/testdata/check/issue25008/issue25008a.src
! ab72be0005cedb4d1cbe8c9640935d68  libgo/go/go/types/testdata/check/issue25008/issue25008b.src
! c8e496cfc32e4f442f74af47623a440e  libgo/go/go/types/testdata/check/issues.go2
! eca8fa746a9a50b76ba322aa5bdbd7ac  libgo/go/go/types/testdata/check/issues.src
! 6970d9e692e79c1b9d7e65fe0567d01e  libgo/go/go/types/testdata/check/labels.src
! 0e78be693304ae918fa7b36934d821d9  libgo/go/go/types/testdata/check/linalg.go2
! cd845c1a3d1cdd5a2aea623c3f926380  libgo/go/go/types/testdata/check/literals.src
! 70e2a1a2a3488e7edc668b41ad937386  libgo/go/go/types/testdata/check/main.go2
! 25969dfb78cc138c29fb7c4acd2d318f  libgo/go/go/types/testdata/check/main.src
! bfbb10dfcf4330107ce9e9f4b9254331  libgo/go/go/types/testdata/check/map.go2
! 8d5045c528514696df4a40b8b8f392f1  libgo/go/go/types/testdata/check/map2.go2
! ccd7ad82ac628b543283661d4b1d4d0f  libgo/go/go/types/testdata/check/methodsets.src
! 02289a93aca90990f6c23d4e04b30ba5  libgo/go/go/types/testdata/check/shifts.src
! 63fcf95345b911441e5babae01a314bf  libgo/go/go/types/testdata/check/slices.go2
! 107cec02a1968149a13cd4bf24d901c1  libgo/go/go/types/testdata/check/stmt0.src
! ba7656e7e724bb7562202316c80f9787  libgo/go/go/types/testdata/check/stmt1.src
! e4f017f1c4776e8ca3eb8599564278bf  libgo/go/go/types/testdata/check/todos.go2
! 432486d431519741e1a7e9e2db5083a0  libgo/go/go/types/testdata/check/typeinst.go2
! 0a62c88eef15619855e453e97ab634b5  libgo/go/go/types/testdata/check/typeinst2.go2
! bc7d32a79884ce411fa9fefda4f1a0d6  libgo/go/go/types/testdata/check/typeparams.go2
! f0158e92a3d79296586e746a5d6e8975  libgo/go/go/types/testdata/check/vardecl.src
! a8bb7b4959070b81cc985a0248a01d00  libgo/go/go/types/testdata/examples/functions.go2
! 1fd255d3ae760d7e8c3aca8fd01a1ba4  libgo/go/go/types/testdata/examples/inference.go2
! 257bf6371ea6cb6a46b0744ad1b8c5bb  libgo/go/go/types/testdata/examples/methods.go2
! 007822562a2d9376bac9e83275732836  libgo/go/go/types/testdata/examples/types.go2
! 97595348e1f630c2fa80722ab8e5459d  libgo/go/go/types/testdata/fixedbugs/issue20583.src
! 294c4e9b5b2c655dccfff1c26c4c076b  libgo/go/go/types/testdata/fixedbugs/issue23203a.src
! 75ce73a035540c6b26a395e889633146  libgo/go/go/types/testdata/fixedbugs/issue23203b.src
! e401659f5b258e171d50ec68385d6216  libgo/go/go/types/testdata/fixedbugs/issue25838.go
! 334557432d5292164d31ca5e75adf062  libgo/go/go/types/testdata/fixedbugs/issue26390.src
! e87254f2f9ed286415b0bd724bfea316  libgo/go/go/types/testdata/fixedbugs/issue28251.src
! c87a53c9e901b7cf92c400cd27194940  libgo/go/go/types/testdata/fixedbugs/issue39634.go2
! 74ace1401b005db1b344626c3b9d2c4d  libgo/go/go/types/testdata/fixedbugs/issue39664.go2
! 84a440e9151ff64bdb9b7e03d5b90223  libgo/go/go/types/testdata/fixedbugs/issue39680.go2
! 67688226c1fabec897f2eb0d5598bd9d  libgo/go/go/types/testdata/fixedbugs/issue39693.go2
! 019379cfb578a7b176aeb0ec0b4f3a0d  libgo/go/go/types/testdata/fixedbugs/issue39699.go2
! 72245324400140e6a53e047c8df49225  libgo/go/go/types/testdata/fixedbugs/issue39711.go2
! a7831bdc2f5afd2f142caec7f4d19323  libgo/go/go/types/testdata/fixedbugs/issue39723.go2
! 39f935f1908e7f7163a5b4d1e7c358a3  libgo/go/go/types/testdata/fixedbugs/issue39725.go2
! 520cf3087bfd8df6a189de229a3765a1  libgo/go/go/types/testdata/fixedbugs/issue39754.go2
! 74c279e178c7d565bafd49f4f68b74fd  libgo/go/go/types/testdata/fixedbugs/issue39755.go2
! 4adc6d9942eb24fdcb4253d823dcf13c  libgo/go/go/types/testdata/fixedbugs/issue39768.go2
! 09f1e67214faa67ceb84971cf3427258  libgo/go/go/types/testdata/fixedbugs/issue39938.go2
! 91429cc0bf6f17c57e7c766f7b1577b8  libgo/go/go/types/testdata/fixedbugs/issue39948.go2
! ea4f67220b5ff467883ddd489262189d  libgo/go/go/types/testdata/fixedbugs/issue39976.go2
! 48f21324c8c8d0904020453461134d08  libgo/go/go/types/testdata/fixedbugs/issue39982.go2
! 2b3cad7c99af3c90b3183d1a877f94f3  libgo/go/go/types/testdata/fixedbugs/issue40038.go2
! 585055d41b0d1efb52e21dcab50f05e8  libgo/go/go/types/testdata/fixedbugs/issue40056.go2
! 10828bd2ee25cea5103bc3da76ffc4f0  libgo/go/go/types/testdata/fixedbugs/issue40057.go2
! 55e1134a9c17f28dcf68ce7ce00cb4b1  libgo/go/go/types/testdata/fixedbugs/issue40301.go2
! 0fdba978687e07f1f9a6d8a5ce38e568  libgo/go/go/types/testdata/fixedbugs/issue40684.go2
! af4c3684ea81614e59e2c15a24b02e25  libgo/go/go/types/testdata/fixedbugs/issue41124.go2
! 0d548abe555ac04b8452fa25a18b8605  libgo/go/go/types/testdata/fixedbugs/issue42695.src
! dbe77964bdb121495161610826cab730  libgo/go/go/types/testdata/fixedbugs/issue42758.go2
! b22bf4b93f78723e193fcf6783dc41a5  libgo/go/go/types/testdata/fixedbugs/issue42987.src
! 85de53068d60b248ccdd5fbd3726eb71  libgo/go/go/types/testdata/fixedbugs/issue43087.src
! 24c9a6b7b8a87f34808cadc6ca01fe06  libgo/go/go/types/testdata/fixedbugs/issue43110.src
! bb20cba699e073165d20c2f23522b0d4  libgo/go/go/types/testdata/fixedbugs/issue43124.src
! 2f1fb70d3ac4c01416e86f4ea48ddeeb  libgo/go/go/types/testdata/fixedbugs/issue43125.src
! e43f2afc69e5095725887d2f8ca43aa9  libgo/go/go/types/testdata/fixedbugs/issue43190.src
! 9b7921beb0254dd5e48022d01a887a45  libgo/go/go/types/testdata/fixedbugs/issue44688.go2
! eea92a3cce74d5d8e84730c27e40b115  libgo/go/go/types/testdata/fixedbugs/issue44799.go2
! d3965e9c6f82f710c00586644854a8aa  libgo/go/go/types/testdata/fixedbugs/issue45114.go
! 2f437ee5e513fa2c826f97ef403e8efe  libgo/go/go/types/testdata/fixedbugs/issue45548.go2
! 1ffe2ea69a989776ccb6d3110bed4b45  libgo/go/go/types/testdata/fixedbugs/issue45635.go2
! e6909cc303331168ff61887dbd1d5d4d  libgo/go/go/types/testdata/fixedbugs/issue45985.go2
! 015416e438bfa0943caea00fb983f7dc  libgo/go/go/types/testdata/fixedbugs/issue46403.src
! 7ca1369d8033147e1168d447ea91ee59  libgo/go/go/types/testdata/fixedbugs/issue46404.go1
! ba429d4a2f139e462f2ac0842533e8c1  libgo/go/go/types/testdata/fixedbugs/issue49003.go
! 47c185bbdbc7156b6d183eb68b753993  libgo/go/go/types/testdata/fixedbugs/issue49005.go
! 9c67fb84964c63ef3e904b7f8dfb1bc4  libgo/go/go/types/testdata/fixedbugs/issue50918.go
! 572000ef6daa7588c84d5538c8223c8e  libgo/go/go/types/testdata/fixedbugs/issue50965.go
! 5d237ff7311e5a1b21efec367e8dad13  libgo/go/go/types/testdata/fixedbugs/issue51145.go
! 14a2d06c3fb4f60a8f771f766c074cd7  libgo/go/go/types/testdata/fixedbugs/issue51229.go2
! fec914ea6bea9388209461ae1080900a  libgo/go/go/types/testdata/fixedbugs/issue51232.go2
! c1d43147919626fc7d64a5bf9e2b3bd3  libgo/go/go/types/testdata/fixedbugs/issue51233.go2
! ff32c32f1182eebc8068c0e0916cd29e  libgo/go/go/types/testdata/fixedbugs/issue51257.go2
! ed6e2daa6f09974fecfc589e2235f9e2  libgo/go/go/types/testdata/fixedbugs/issue51335.go2
! 3eac8cf2910d4fb39ad18a6822a4bf27  libgo/go/go/types/testdata/fixedbugs/issue51339.go2
! 1e651a3b08c30d8925d26601218b90f4  libgo/go/go/types/testdata/fixedbugs/issue51360.go
! 0af74849aa2389c69e71abf4961bfd3d  libgo/go/go/types/testdata/fixedbugs/issue51376.go2
! f8cc115ac72aab2e1201db7c04d7ce43  libgo/go/go/types/testdata/fixedbugs/issue51386.go2
! c439409787d01159880f71d4491964a3  libgo/go/go/types/testdata/fixedbugs/issue51437.go
! 4233411ff70a15537985e02ad3909329  libgo/go/go/types/testdata/fixedbugs/issue51472.go2
! 1dc5f03c59efc793547d7cf4ce9767b5  libgo/go/go/types/testdata/fixedbugs/issue51509.go
! 103001267433f7b0bfd3a0aa18202f0c  libgo/go/go/types/testdata/fixedbugs/issue51578.go2
! 8857cc45164a9f9f2766c4d04b8c89d2  libgo/go/go/types/testdata/fixedbugs/issue51593.go2
! 2b4e4ef82f44fe02d733a13119334aea  libgo/go/go/types/testdata/fixedbugs/issue6977.src
  4abe25acbffdb7feb1ba047129054611  libgo/go/go/types/token_test.go
! e0d39c4fa1aa3f4b3b99da0e706fd272  libgo/go/go/types/tuple.go
! 3d776355d097700f659a552ade243d28  libgo/go/go/types/type.go
! ca5975b6593cfc75835abbdee5d61c98  libgo/go/go/types/typelists.go
! ba6a27b0a65886e6e84dfbe692f7dfab  libgo/go/go/types/typeparam.go
! 8a394d061dfee866fde0703778f4c07b  libgo/go/go/types/typeset.go
! 27e1a17f1a8e87a07fafbbd27019a468  libgo/go/go/types/typeset_test.go
! 6f54c53dfaa186cf19a070783c8d9d60  libgo/go/go/types/typestring.go
! 74297394a00f4c4825a47f4015f913c1  libgo/go/go/types/typestring_test.go
! 828c2a3562c2d99265084c90e8f7eefb  libgo/go/go/types/typeterm.go
! 7290a77e79cfc01391fa404eaf4641c0  libgo/go/go/types/typeterm_test.go
! 8aab1b9b88277919606bd623848a2179  libgo/go/go/types/typexpr.go
! 5c4b37972a209739f29574fbfeaef8d6  libgo/go/go/types/unify.go
! 8fda8b7b284b06fe053ec51ed5ae7192  libgo/go/go/types/union.go
! dbe2238fa89305f4252341588030142e  libgo/go/go/types/universe.go
! a9adcfbd4beb874d46a99a0b550554f7  libgo/go/go/types/validtype.go
! 5dea0ffd68fd5a45c2accde6ef247c39  libgo/go/go/types/version.go
! e3a1a3197730e476de8e77fa0ad2ae98  libgo/go/golang.org/x/crypto/chacha20/chacha_arm64.go
  6e8cb26a6e41c21717e772a10b2f2a6d  libgo/go/golang.org/x/crypto/chacha20/chacha_generic.go
! e62fb7cd2a15fa600b3ef23c766f8feb  libgo/go/golang.org/x/crypto/chacha20/chacha_noasm.go
! a26b61f3a05c0ce2f12be0abe3619a91  libgo/go/golang.org/x/crypto/chacha20/chacha_ppc64le.go
! 83624bc6ae679baf5a8ccc599dfa52ad  libgo/go/golang.org/x/crypto/chacha20/chacha_s390x.go
  001058088edcf8ef751b1dfdd825a2dd  libgo/go/golang.org/x/crypto/chacha20/xor.go
! 93d50e75defe35d021ad5dc0a693c22f  libgo/go/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go
! 58d1da4bd4e59e3e81948d024d5f4a0e  libgo/go/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go
! 128060e2028629e74aaa0b231a933911  libgo/go/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go
! 302e5fa1d7336f58cf8330ca67a5d2d1  libgo/go/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go
! 6586691ee15e19f0644c4904f8a19ed8  libgo/go/golang.org/x/crypto/chacha20poly1305/xchacha20poly1305.go
! 88ea6cf16a42f6cb0b0ebef8641ab5c8  libgo/go/golang.org/x/crypto/cryptobyte/asn1.go
  a852d2d0592351484d2ea6420359b481  libgo/go/golang.org/x/crypto/cryptobyte/asn1/asn1.go
  ab8c271bbf0d149ff9712708622bb755  libgo/go/golang.org/x/crypto/cryptobyte/builder.go
  6991f1b3d36a2f360ea8ba64afddb1dc  libgo/go/golang.org/x/crypto/cryptobyte/string.go
! 43e76d99e1d04eec43520ce6054fe348  libgo/go/golang.org/x/crypto/curve25519/curve25519.go
! 23147ea6b2d350963898bc599c77fd9c  libgo/go/golang.org/x/crypto/curve25519/curve25519_amd64.go
  cdd5537b6532b98ed1962a7e070059b2  libgo/go/golang.org/x/crypto/curve25519/curve25519_generic.go
! 0c1df9e1aecc20001d494683d5a2d4ce  libgo/go/golang.org/x/crypto/curve25519/curve25519_noasm.go
! 9ceaf76a889d866caf4682cdbb460a1a  libgo/go/golang.org/x/crypto/curve25519/internal/field/fe.go
! 074aeae27498a9f077265c235cbc905c  libgo/go/golang.org/x/crypto/curve25519/internal/field/fe_amd64.go
! 6ae1c6e9d67ed0c346979f64bfe3e190  libgo/go/golang.org/x/crypto/curve25519/internal/field/fe_amd64_noasm.go
! dee13ce2813e35d0905862482391ae14  libgo/go/golang.org/x/crypto/curve25519/internal/field/fe_arm64.go
! 45bf96931f7913bdde116aa7372cafb6  libgo/go/golang.org/x/crypto/curve25519/internal/field/fe_arm64_noasm.go
! 1d24a2b726d1fbd82a9b898e10371ec0  libgo/go/golang.org/x/crypto/curve25519/internal/field/fe_generic.go
  136a6396cd8588e8bf55616381cf3e3f  libgo/go/golang.org/x/crypto/ed25519/ed25519.go
  158d8cbe55872faed590ea493065e499  libgo/go/golang.org/x/crypto/ed25519/ed25519_go113.go
  7d7d579cae9aa68ee288df719b2be675  libgo/go/golang.org/x/crypto/ed25519/internal/edwards25519/const.go
  7351f56555c0f74406c03baa8b2bb44e  libgo/go/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go
  ffcbf66e442f8121fdd6dc6f677d0a28  libgo/go/golang.org/x/crypto/hkdf/hkdf.go
! 6e862ab8c36117d835762c7d542b1d25  libgo/go/golang.org/x/crypto/internal/poly1305/bits_compat.go
! b8bfad8f72a4ef7a5ca7207732d9c8ec  libgo/go/golang.org/x/crypto/internal/poly1305/bits_go1.13.go
! 4e54b2a6f8a45781d3903ae5da5d7e50  libgo/go/golang.org/x/crypto/internal/poly1305/mac_noasm.go
! 493d3e8dbac462a5b21d86676e214c2c  libgo/go/golang.org/x/crypto/internal/poly1305/poly1305.go
! 2d4fca2ec2dc448cc1e9ab995a69ed19  libgo/go/golang.org/x/crypto/internal/poly1305/sum_amd64.go
! 98c6abccaad0c4c2e1d2385d96236c9a  libgo/go/golang.org/x/crypto/internal/poly1305/sum_generic.go
! 517e3964835d6055757bf93a3a9e509a  libgo/go/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go
! 995fba001caf403995ac2331c14dc67d  libgo/go/golang.org/x/crypto/internal/poly1305/sum_s390x.go
! 06ad3c7c2f1325c61fae5e179b71c8b2  libgo/go/golang.org/x/crypto/internal/subtle/aliasing.go
  4e827205e775951ae90121fe4dfb07a4  libgo/go/golang.org/x/crypto/internal/subtle/aliasing_appengine.go
! 43103f561a59d1f11fc6fbfd485c5205  libgo/go/golang.org/x/crypto/internal/subtle/aliasing_purego.go
! 6e862ab8c36117d835762c7d542b1d25  libgo/go/golang.org/x/crypto/poly1305/bits_compat.go
! b8bfad8f72a4ef7a5ca7207732d9c8ec  libgo/go/golang.org/x/crypto/poly1305/bits_go1.13.go
! 4e54b2a6f8a45781d3903ae5da5d7e50  libgo/go/golang.org/x/crypto/poly1305/mac_noasm.go
  f7cac3740f0f0648b7ec7f56a3807ca8  libgo/go/golang.org/x/crypto/poly1305/poly1305.go
! 2d4fca2ec2dc448cc1e9ab995a69ed19  libgo/go/golang.org/x/crypto/poly1305/sum_amd64.go
  98c6abccaad0c4c2e1d2385d96236c9a  libgo/go/golang.org/x/crypto/poly1305/sum_generic.go
! 517e3964835d6055757bf93a3a9e509a  libgo/go/golang.org/x/crypto/poly1305/sum_ppc64le.go
! 995fba001caf403995ac2331c14dc67d  libgo/go/golang.org/x/crypto/poly1305/sum_s390x.go
  5d4950ecb7b26d2c5e4e7b4e0dd74707  libgo/go/golang.org/x/mod/LICENSE
  3a55d95595a6f9e37dee53826b4daff2  libgo/go/golang.org/x/mod/PATENTS
  01f071fdba44f661c678e282b4b86423  libgo/go/golang.org/x/mod/internal/lazyregexp/lazyre.go
  eef486d3a5702629cd3b1f847e74d9a9  libgo/go/golang.org/x/mod/modfile/print.go
! 8befa52311891714c43ea7d502fb8557  libgo/go/golang.org/x/mod/modfile/read.go
! 25bca704e4bdd54cdcbb494267447ba9  libgo/go/golang.org/x/mod/modfile/rule.go
! eb00782c07bcbdd323cce35f4b36a41f  libgo/go/golang.org/x/mod/modfile/work.go
! 5e8af01a8787138954ddcb98da44536a  libgo/go/golang.org/x/mod/module/module.go
! dc619cdd7cc51374959c11ec4eff63c7  libgo/go/golang.org/x/mod/module/pseudo.go
! 6001a6c33530e40b9e40da3c640e105e  libgo/go/golang.org/x/mod/semver/semver.go
  492129824fc9784e2099ab478c939872  libgo/go/golang.org/x/mod/sumdb/cache.go
  becf75eb44b4de4d653ad78ff96f046c  libgo/go/golang.org/x/mod/sumdb/client.go
  cda0ed349ceae0857ba39c4fc10044f3  libgo/go/golang.org/x/mod/sumdb/dirhash/hash.go
*************** e3de471cf243e8815c29682f42fb6b99  libgo/
*** 91251,91308 ****
  fccc2c770b7828c5d3661624520b3f90  libgo/go/golang.org/x/mod/sumdb/tlog/note.go
  03b7d8c74ae821341092399957604da9  libgo/go/golang.org/x/mod/sumdb/tlog/tile.go
  b1e8095ab63cff363f1041823e7f687b  libgo/go/golang.org/x/mod/sumdb/tlog/tlog.go
! d617e2b509c7adb1d575de7cd68bf62d  libgo/go/golang.org/x/mod/zip/zip.go
! e615ffcbf45a2b16f2a2b02518f68aa7  libgo/go/golang.org/x/net/dns/dnsmessage/message.go
  602426b485b3cb10d9b87b39886e4a56  libgo/go/golang.org/x/net/http/httpguts/guts.go
  d4f694b28a1e8a35ed86e4165b13e0bb  libgo/go/golang.org/x/net/http/httpguts/httplex.go
! a2e657d268ae254bb89e9490236fbd6d  libgo/go/golang.org/x/net/http/httpproxy/proxy.go
  962a47212c19377e92a498be4f60d639  libgo/go/golang.org/x/net/http2/hpack/encode.go
  e2c26266346af2f9439c83b75a384f3e  libgo/go/golang.org/x/net/http2/hpack/hpack.go
! 75f17bda97f4bb746eea8496660ff0fb  libgo/go/golang.org/x/net/http2/hpack/huffman.go
  bd5e9668dfcbd5c3da3373e2a2f6ebb0  libgo/go/golang.org/x/net/http2/hpack/tables.go
! fb79b74bbfea28d7246ffe3b8d205ade  libgo/go/golang.org/x/net/idna/idna10.0.0.go
! fbede0954fc47c0dd3d39b6717933b2f  libgo/go/golang.org/x/net/idna/idna9.0.0.go
! 33ea1bc0c96b90bc05b2e40c49242729  libgo/go/golang.org/x/net/idna/punycode.go
! 5ea6016ab7ed40246a799b71b8f86456  libgo/go/golang.org/x/net/idna/tables10.0.0.go
! 340637f486682e7a5b47fb60861659fa  libgo/go/golang.org/x/net/idna/tables11.0.0.go
! e79ea41619ace8f001b78183be7410c9  libgo/go/golang.org/x/net/idna/tables12.0.0.go
! d571c53db0769302598d14feeeb2a05e  libgo/go/golang.org/x/net/idna/tables13.0.0.go
! 4164652b93db1331492d3cecc56cd1c6  libgo/go/golang.org/x/net/idna/tables9.0.0.go
  1d7b3e2ea7786cbe36a81d4fab3c2e38  libgo/go/golang.org/x/net/idna/trie.go
  85b4d935f17f8c700e85e324975790e7  libgo/go/golang.org/x/net/idna/trieval.go
! 1537bd432b2514e259a17f30127013e6  libgo/go/golang.org/x/net/lif/address.go
! 24bea8c360bd3ca0665dd203efd10d47  libgo/go/golang.org/x/net/lif/binary.go
! a02121696cf6f775cdd9aae90e231e54  libgo/go/golang.org/x/net/lif/lif.go
! f36569f7299b92a48642d22e99c40bf9  libgo/go/golang.org/x/net/lif/link.go
! 8da32eb2e38b1a74ae7e6c0a35b519c2  libgo/go/golang.org/x/net/lif/sys.go
! c43a70009595bdd359eeb92a6f382e5c  libgo/go/golang.org/x/net/lif/syscall.go
  098af34ff8bbcff6d527c7e69339107a  libgo/go/golang.org/x/net/lif/zsys_solaris.go
  b5229968d2aa82db5ce227ff8a556c17  libgo/go/golang.org/x/net/nettest/conntest.go
! 353f5979995eedfc4344b61887a1d1b5  libgo/go/golang.org/x/net/nettest/nettest.go
! a373b6fae6265f316a7e74169717f047  libgo/go/golang.org/x/net/nettest/nettest_stub.go
! c84be399cee482507f20c78700a35b57  libgo/go/golang.org/x/net/nettest/nettest_unix.go
  9b04a2d1a00f3d24e45ca3d89c02ed55  libgo/go/golang.org/x/net/nettest/nettest_windows.go
! 453e65ccf87a74cedb5c8568caee365c  libgo/go/golang.org/x/net/route/address.go
! 2212f11eb8bbac2067c381bd530de27f  libgo/go/golang.org/x/net/route/binary.go
! 3f7010d7aa2d1f0056776e502268e86c  libgo/go/golang.org/x/net/route/interface.go
! 452f46106eaa7f59893f258d2590a27f  libgo/go/golang.org/x/net/route/interface_announce.go
! ce1d8d9eb8cfcb85e8b82c6d43bcc4ad  libgo/go/golang.org/x/net/route/interface_classic.go
  c710caae4ba863d2129e62234442a0b4  libgo/go/golang.org/x/net/route/interface_freebsd.go
! 4d1fcc318ff42997d12d9e1809470dbc  libgo/go/golang.org/x/net/route/interface_multicast.go
  fb888eeead4668205e2aa214dd7a9555  libgo/go/golang.org/x/net/route/interface_openbsd.go
! 3a1665372ef78ba7b00f2438177fa8ea  libgo/go/golang.org/x/net/route/message.go
! 63ded70e77b0eecff568674bebb240a4  libgo/go/golang.org/x/net/route/route.go
! 48735830dd762f682356141d9f216ea1  libgo/go/golang.org/x/net/route/route_classic.go
  c2139a4ad02da0c00701d24f41567a20  libgo/go/golang.org/x/net/route/route_openbsd.go
! a2364eeb5755f822a00bdc84469682e1  libgo/go/golang.org/x/net/route/sys.go
  383e5ad87a434a3a4e9234f50b9d801b  libgo/go/golang.org/x/net/route/sys_darwin.go
  fb1d8a9b3e29512146d9dc88a1ac3e85  libgo/go/golang.org/x/net/route/sys_dragonfly.go
! 58d4ef622d0ce9f6e8ba9be2c58c708a  libgo/go/golang.org/x/net/route/sys_freebsd.go
  520f1b7dbde20e5da0bb290a0d63f6cb  libgo/go/golang.org/x/net/route/sys_netbsd.go
  b7dc843f3a672dbdf122954810341366  libgo/go/golang.org/x/net/route/sys_openbsd.go
! 271b82f24ca6947668be86b9a41b6a9d  libgo/go/golang.org/x/net/route/syscall.go
  bf11a162630fb8885f4e7081a8dfddc0  libgo/go/golang.org/x/net/route/syscall_go1_11_darwin.go
! fa8e88415aea9c3f9affb88657ee4e95  libgo/go/golang.org/x/net/route/syscall_go1_12_darwin.go
  89f91e7c37221e31dbeb99063d251cd9  libgo/go/golang.org/x/net/route/zsys_darwin.go
  618aa077ebb00d9790523ed7cfc40340  libgo/go/golang.org/x/net/route/zsys_dragonfly.go
  122be59c4d2507f2edc29a3a50bb1f6d  libgo/go/golang.org/x/net/route/zsys_freebsd_386.go
--- 97623,97682 ----
  fccc2c770b7828c5d3661624520b3f90  libgo/go/golang.org/x/mod/sumdb/tlog/note.go
  03b7d8c74ae821341092399957604da9  libgo/go/golang.org/x/mod/sumdb/tlog/tile.go
  b1e8095ab63cff363f1041823e7f687b  libgo/go/golang.org/x/mod/sumdb/tlog/tlog.go
! 331eeca6119bf38c0308418e4cfd5bbf  libgo/go/golang.org/x/mod/zip/zip.go
! 74d0cbb354241c2506ca61c8fbdf6ea9  libgo/go/golang.org/x/net/dns/dnsmessage/message.go
  602426b485b3cb10d9b87b39886e4a56  libgo/go/golang.org/x/net/http/httpguts/guts.go
  d4f694b28a1e8a35ed86e4165b13e0bb  libgo/go/golang.org/x/net/http/httpguts/httplex.go
! b94c26188d69c4ce8fce6491cec521b5  libgo/go/golang.org/x/net/http/httpproxy/proxy.go
  962a47212c19377e92a498be4f60d639  libgo/go/golang.org/x/net/http2/hpack/encode.go
  e2c26266346af2f9439c83b75a384f3e  libgo/go/golang.org/x/net/http2/hpack/hpack.go
! 116559df2e0d2a14b8bc8556af56786c  libgo/go/golang.org/x/net/http2/hpack/huffman.go
  bd5e9668dfcbd5c3da3373e2a2f6ebb0  libgo/go/golang.org/x/net/http2/hpack/tables.go
! 34244d953d6abc7b88db651e29825853  libgo/go/golang.org/x/net/idna/go118.go
! 19be396fbc684ed5c12568cf36d46f95  libgo/go/golang.org/x/net/idna/idna10.0.0.go
! 3da4d28f4e9adaeba547a08e0f9382b8  libgo/go/golang.org/x/net/idna/idna9.0.0.go
! 55aa738002c9f604caccb37a54d58f8d  libgo/go/golang.org/x/net/idna/pre_go118.go
! d6eece33fbb11cfe6275cb5b39333b9a  libgo/go/golang.org/x/net/idna/punycode.go
! 9009cecef282293c9f5e2f736ba4002f  libgo/go/golang.org/x/net/idna/tables10.0.0.go
! 4c879064c93fe82837d570da1960d13c  libgo/go/golang.org/x/net/idna/tables11.0.0.go
! c5e6670b503aaaca6b1c4ee4d6129265  libgo/go/golang.org/x/net/idna/tables12.0.0.go
! 35e50627d0fb813823d6fe4885e11397  libgo/go/golang.org/x/net/idna/tables13.0.0.go
! 21ac5b8f157cb0f90fdd448553b84ee1  libgo/go/golang.org/x/net/idna/tables9.0.0.go
  1d7b3e2ea7786cbe36a81d4fab3c2e38  libgo/go/golang.org/x/net/idna/trie.go
  85b4d935f17f8c700e85e324975790e7  libgo/go/golang.org/x/net/idna/trieval.go
! c5ff7c700cac740122207f0f960ad74b  libgo/go/golang.org/x/net/lif/address.go
! 47c6edc2b3f143b2f71fbe0d06e423e3  libgo/go/golang.org/x/net/lif/binary.go
! 16e9c4b9af56b6c51103e9df8f975dff  libgo/go/golang.org/x/net/lif/lif.go
! 2855ad450c34403587b405124bed5994  libgo/go/golang.org/x/net/lif/link.go
! 1879648279e86620ab2d1bf7921518f1  libgo/go/golang.org/x/net/lif/sys.go
! f7289b0b3c64df5fed4c59aa1b018084  libgo/go/golang.org/x/net/lif/syscall.go
  098af34ff8bbcff6d527c7e69339107a  libgo/go/golang.org/x/net/lif/zsys_solaris.go
  b5229968d2aa82db5ce227ff8a556c17  libgo/go/golang.org/x/net/nettest/conntest.go
! dfaaeffcfd0597649f023594c72289c2  libgo/go/golang.org/x/net/nettest/nettest.go
! 2edfc077a71651d12117b49486206ca7  libgo/go/golang.org/x/net/nettest/nettest_stub.go
! a8658527c8a9503dae5e0f22e1888438  libgo/go/golang.org/x/net/nettest/nettest_unix.go
  9b04a2d1a00f3d24e45ca3d89c02ed55  libgo/go/golang.org/x/net/nettest/nettest_windows.go
! d400702a8ae01211404e92b5e97e773f  libgo/go/golang.org/x/net/route/address.go
! 93eefaf5fbf4743e6cad4b4ca9d676c2  libgo/go/golang.org/x/net/route/binary.go
! 68d45b8e28b0701d1ba1ef8d193d091d  libgo/go/golang.org/x/net/route/interface.go
! a444b9e2b3f0415edee0caf5bfe0ffe3  libgo/go/golang.org/x/net/route/interface_announce.go
! 070306bd18fa114a06cb3528034176e2  libgo/go/golang.org/x/net/route/interface_classic.go
  c710caae4ba863d2129e62234442a0b4  libgo/go/golang.org/x/net/route/interface_freebsd.go
! 3dd4924a49d62bdd16b46e5e6d0ade40  libgo/go/golang.org/x/net/route/interface_multicast.go
  fb888eeead4668205e2aa214dd7a9555  libgo/go/golang.org/x/net/route/interface_openbsd.go
! 526baf55d0396d899a981f652348d557  libgo/go/golang.org/x/net/route/message.go
! 8b43864e79a0199fd14913e83957b401  libgo/go/golang.org/x/net/route/route.go
! 75a5389f5b3a376aff93ca4b2b9d39d8  libgo/go/golang.org/x/net/route/route_classic.go
  c2139a4ad02da0c00701d24f41567a20  libgo/go/golang.org/x/net/route/route_openbsd.go
! 5afa9254a6b8c2e9fdcad924abb67b96  libgo/go/golang.org/x/net/route/sys.go
  383e5ad87a434a3a4e9234f50b9d801b  libgo/go/golang.org/x/net/route/sys_darwin.go
  fb1d8a9b3e29512146d9dc88a1ac3e85  libgo/go/golang.org/x/net/route/sys_dragonfly.go
! 298bbfe282448d8e6f31072ad5692987  libgo/go/golang.org/x/net/route/sys_freebsd.go
  520f1b7dbde20e5da0bb290a0d63f6cb  libgo/go/golang.org/x/net/route/sys_netbsd.go
  b7dc843f3a672dbdf122954810341366  libgo/go/golang.org/x/net/route/sys_openbsd.go
! 736005cabb46ac86845781d5827f57d3  libgo/go/golang.org/x/net/route/syscall.go
  bf11a162630fb8885f4e7081a8dfddc0  libgo/go/golang.org/x/net/route/syscall_go1_11_darwin.go
! 77b4f50ad1d2cf0f5514ca33b4011cef  libgo/go/golang.org/x/net/route/syscall_go1_12_darwin.go
  89f91e7c37221e31dbeb99063d251cd9  libgo/go/golang.org/x/net/route/zsys_darwin.go
  618aa077ebb00d9790523ed7cfc40340  libgo/go/golang.org/x/net/route/zsys_dragonfly.go
  122be59c4d2507f2edc29a3a50bb1f6d  libgo/go/golang.org/x/net/route/zsys_freebsd_386.go
*************** fa8e88415aea9c3f9affb88657ee4e95  libgo/
*** 91311,91367 ****
  377f5a6c1e428f1fcc1317b4ff54db8d  libgo/go/golang.org/x/net/route/zsys_freebsd_arm64.go
  69d348fc35dd61eded30c974642338d1  libgo/go/golang.org/x/net/route/zsys_netbsd.go
  29dfae294b6fa731202660d1484aba36  libgo/go/golang.org/x/net/route/zsys_openbsd.go
  72c424862ee2e52c1b2d8a512e3d99af  libgo/go/golang.org/x/sys/cpu/byteorder.go
! 915388e7d1ba9e27c2f31767b6a67317  libgo/go/golang.org/x/sys/cpu/cpu.go
! 3f4be11cf0cfb86c2dd19883165d0f9b  libgo/go/golang.org/x/sys/cpu/cpu_aix.go
  93487a30ddfed1539bd8be87e0440af3  libgo/go/golang.org/x/sys/cpu/cpu_arm.go
  b6f0ad68a7fa53522d0cc523d3bccdf8  libgo/go/golang.org/x/sys/cpu/cpu_arm64.go
! 6a3004a70ef68c51edf001b91db461f7  libgo/go/golang.org/x/sys/cpu/cpu_gc_arm64.go
! 9160e8a992724b1b99332a6478ad722f  libgo/go/golang.org/x/sys/cpu/cpu_gc_s390x.go
! e838c4b9c35fa70c17bc64ed1f19b731  libgo/go/golang.org/x/sys/cpu/cpu_gc_x86.go
! 934b9b37caf25623d6cb877337df50e8  libgo/go/golang.org/x/sys/cpu/cpu_gccgo_arm64.go
! 12f7e4b7edf300007aaa54324dbd3abc  libgo/go/golang.org/x/sys/cpu/cpu_gccgo_s390x.go
  e0bc6706f149f0af949f31b78fa508a1  libgo/go/golang.org/x/sys/cpu/cpu_gccgo_x86.c
! 1c59e2cfc2f1e7952fa9e72cd7e6b2bc  libgo/go/golang.org/x/sys/cpu/cpu_gccgo_x86.go
! c1ab7547deb2442c6276f18ef12be434  libgo/go/golang.org/x/sys/cpu/cpu_linux.go
  dfa4fd04aa81a48316bf341f872bb405  libgo/go/golang.org/x/sys/cpu/cpu_linux_arm.go
  844a01fc6dcf133ac1824858e651794a  libgo/go/golang.org/x/sys/cpu/cpu_linux_arm64.go
! acf6450dd66693a58e49cceb2d3a6dde  libgo/go/golang.org/x/sys/cpu/cpu_linux_mips64x.go
! edcbc08a28e3ee95bbe6de0c23f7a06f  libgo/go/golang.org/x/sys/cpu/cpu_linux_noinit.go
! 63acb9717e602641e848fbb925475113  libgo/go/golang.org/x/sys/cpu/cpu_linux_ppc64x.go
  cba171250f2ae7823c6f05eea268ef25  libgo/go/golang.org/x/sys/cpu/cpu_linux_s390x.go
! 5764d0518a237f22b7f34f2fdd60dc4f  libgo/go/golang.org/x/sys/cpu/cpu_mips64x.go
! 39bbaa74d66a45b6ca744702cd6c8544  libgo/go/golang.org/x/sys/cpu/cpu_mipsx.go
  1dcdcebd484888e4e3f728664f67172a  libgo/go/golang.org/x/sys/cpu/cpu_netbsd_arm64.go
  df064edf2863b53d67231ed238b2bef0  libgo/go/golang.org/x/sys/cpu/cpu_other.go
  3e7df39456861c43ddbdc7886f47dc21  libgo/go/golang.org/x/sys/cpu/cpu_other_arch.go
! 9cc30fa0b92bc7419bf3b11e81ffbb91  libgo/go/golang.org/x/sys/cpu/cpu_other_arm.go
! 5b1c2e1eca603397033117a07e5325e5  libgo/go/golang.org/x/sys/cpu/cpu_other_arm64.go
! 3c30b0c32448877292b1b36e82dc7c50  libgo/go/golang.org/x/sys/cpu/cpu_other_mips64x.go
! 69f1f59f683e5205718f368bf47ee7c8  libgo/go/golang.org/x/sys/cpu/cpu_ppc64x.go
  b8c18684d0ecf11b798f30b622745a3e  libgo/go/golang.org/x/sys/cpu/cpu_riscv.go
! 8f1e9722ce73e259974c50de54c6d4ed  libgo/go/golang.org/x/sys/cpu/cpu_riscv64.go
  c0dffb19ab8b9b3d65648ce0245712bc  libgo/go/golang.org/x/sys/cpu/cpu_s390x.go
! ace277646f736c2e3ad4d2b88d691ca0  libgo/go/golang.org/x/sys/cpu/cpu_wasm.go
! a91909911a2968caefec3f73fa967c1e  libgo/go/golang.org/x/sys/cpu/cpu_x86.go
  f56c0de271b61bcd29da88c95796b5fa  libgo/go/golang.org/x/sys/cpu/cpu_zos.go
  5e07f432b17138e15cca555da7146863  libgo/go/golang.org/x/sys/cpu/cpu_zos_s390x.go
  00875b04df26aec9a2001a82eeef4ae0  libgo/go/golang.org/x/sys/cpu/hwcap_linux.go
! d156e232e449c78fb4c6f9bd9f5d14d9  libgo/go/golang.org/x/sys/cpu/syscall_aix_gccgo.go
! 382f831387d1fb7fc3dc25ac183442c0  libgo/go/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go
  1f98dc5015303aab187a536269e6231b  libgo/go/golang.org/x/text/secure/bidirule/bidirule.go
! 6e8e590126f079169319e0d233663f82  libgo/go/golang.org/x/text/secure/bidirule/bidirule10.0.0.go
! 3d337d19f4039985f6b7304d2725df5c  libgo/go/golang.org/x/text/secure/bidirule/bidirule9.0.0.go
  ccfe8db2db5e042dbf99382b06245078  libgo/go/golang.org/x/text/transform/transform.go
! 518d271c7405a857a0338011671ae3fa  libgo/go/golang.org/x/text/unicode/bidi/bidi.go
  65e1f7062ad3c6d02973663c25eaf6c8  libgo/go/golang.org/x/text/unicode/bidi/bracket.go
! b0c9f9e3eeaa730ef8535680a58b9d6c  libgo/go/golang.org/x/text/unicode/bidi/core.go
  a94e8735d389eafb100e8701c924819e  libgo/go/golang.org/x/text/unicode/bidi/prop.go
! 146c655815fc90e42238d55a7ab4bbd9  libgo/go/golang.org/x/text/unicode/bidi/tables10.0.0.go
! ad06408704bb70ff0b701a4c91637c66  libgo/go/golang.org/x/text/unicode/bidi/tables11.0.0.go
! 87cd82d04212c6d9237ab1bc557c3a58  libgo/go/golang.org/x/text/unicode/bidi/tables12.0.0.go
! 8c0c90f7d65724f4f09574747e233a51  libgo/go/golang.org/x/text/unicode/bidi/tables13.0.0.go
! 4ec5d1da2c2c6ed3665886a9eea0ff4d  libgo/go/golang.org/x/text/unicode/bidi/tables9.0.0.go
  de1e7e42151682f52b862c88c21804e7  libgo/go/golang.org/x/text/unicode/bidi/trieval.go
  6f35763cd2d9b734d8b22c1e843d6ef6  libgo/go/golang.org/x/text/unicode/norm/composition.go
  ee26429d58961ebec44f347d0592a0e7  libgo/go/golang.org/x/text/unicode/norm/forminfo.go
--- 97685,97746 ----
  377f5a6c1e428f1fcc1317b4ff54db8d  libgo/go/golang.org/x/net/route/zsys_freebsd_arm64.go
  69d348fc35dd61eded30c974642338d1  libgo/go/golang.org/x/net/route/zsys_netbsd.go
  29dfae294b6fa731202660d1484aba36  libgo/go/golang.org/x/net/route/zsys_openbsd.go
+ 6e6605503566e38b8b8f3721b3f236dd  libgo/go/golang.org/x/sync/AUTHORS
+ 6d847c415c1a12b419f4c410b3c43a44  libgo/go/golang.org/x/sync/CONTRIBUTORS
+ 5d4950ecb7b26d2c5e4e7b4e0dd74707  libgo/go/golang.org/x/sync/LICENSE
+ 3a55d95595a6f9e37dee53826b4daff2  libgo/go/golang.org/x/sync/PATENTS
+ 359f2d21917a780e0cadd10c056fd395  libgo/go/golang.org/x/sync/semaphore/semaphore.go
  72c424862ee2e52c1b2d8a512e3d99af  libgo/go/golang.org/x/sys/cpu/byteorder.go
! 21a508171570dbb215aa695e195c47c4  libgo/go/golang.org/x/sys/cpu/cpu.go
! df960e3d3086086402a9f45a8cdbcb19  libgo/go/golang.org/x/sys/cpu/cpu_aix.go
  93487a30ddfed1539bd8be87e0440af3  libgo/go/golang.org/x/sys/cpu/cpu_arm.go
  b6f0ad68a7fa53522d0cc523d3bccdf8  libgo/go/golang.org/x/sys/cpu/cpu_arm64.go
! 9c21b99bedea5a65d399e805e6f242b4  libgo/go/golang.org/x/sys/cpu/cpu_gc_arm64.go
! 39db785be28b00ab954f42d33feb4974  libgo/go/golang.org/x/sys/cpu/cpu_gc_s390x.go
! f3d98991931b1c747db7733cb8b34b82  libgo/go/golang.org/x/sys/cpu/cpu_gc_x86.go
! 4289fcf652ebbff0d1e8c06abdef1057  libgo/go/golang.org/x/sys/cpu/cpu_gccgo_arm64.go
! 4044b728e1c63f0cc7a147f66a57620b  libgo/go/golang.org/x/sys/cpu/cpu_gccgo_s390x.go
  e0bc6706f149f0af949f31b78fa508a1  libgo/go/golang.org/x/sys/cpu/cpu_gccgo_x86.c
! 081e38a411a1c2b49f87b53b0e3c2d1f  libgo/go/golang.org/x/sys/cpu/cpu_gccgo_x86.go
! a3b6008d33b90af548ec7dfd5dbbf8cb  libgo/go/golang.org/x/sys/cpu/cpu_linux.go
  dfa4fd04aa81a48316bf341f872bb405  libgo/go/golang.org/x/sys/cpu/cpu_linux_arm.go
  844a01fc6dcf133ac1824858e651794a  libgo/go/golang.org/x/sys/cpu/cpu_linux_arm64.go
! 6f72812157bfd529bdd3d3955a0b3b3f  libgo/go/golang.org/x/sys/cpu/cpu_linux_mips64x.go
! afee27d5775b02b263c8284087908e7f  libgo/go/golang.org/x/sys/cpu/cpu_linux_noinit.go
! ea610657ea1cad1216767f2be6141465  libgo/go/golang.org/x/sys/cpu/cpu_linux_ppc64x.go
  cba171250f2ae7823c6f05eea268ef25  libgo/go/golang.org/x/sys/cpu/cpu_linux_s390x.go
! 330d5a8bb9cc6b03464a6bfba55afc75  libgo/go/golang.org/x/sys/cpu/cpu_mips64x.go
! ec662caaefc7acda8102ca384b6ae7e8  libgo/go/golang.org/x/sys/cpu/cpu_mipsx.go
  1dcdcebd484888e4e3f728664f67172a  libgo/go/golang.org/x/sys/cpu/cpu_netbsd_arm64.go
  df064edf2863b53d67231ed238b2bef0  libgo/go/golang.org/x/sys/cpu/cpu_other.go
  3e7df39456861c43ddbdc7886f47dc21  libgo/go/golang.org/x/sys/cpu/cpu_other_arch.go
! 5c2886901dd1a0beb540279aa60314d6  libgo/go/golang.org/x/sys/cpu/cpu_other_arm.go
! 173827dca691ecb907ed41f5aa95f176  libgo/go/golang.org/x/sys/cpu/cpu_other_arm64.go
! 306dabb2c7ee5ca456d19c0f69bf92e8  libgo/go/golang.org/x/sys/cpu/cpu_other_mips64x.go
! b8de0d7130b21ca8875c2d21bf818ea9  libgo/go/golang.org/x/sys/cpu/cpu_ppc64x.go
  b8c18684d0ecf11b798f30b622745a3e  libgo/go/golang.org/x/sys/cpu/cpu_riscv.go
! c36c76b22f6bef5e67530fb95cfc96aa  libgo/go/golang.org/x/sys/cpu/cpu_riscv64.go
  c0dffb19ab8b9b3d65648ce0245712bc  libgo/go/golang.org/x/sys/cpu/cpu_s390x.go
! dc3c56579880687116544e814d25fe69  libgo/go/golang.org/x/sys/cpu/cpu_wasm.go
! 991fc77c299ca1630cd450e12c83244e  libgo/go/golang.org/x/sys/cpu/cpu_x86.go
  f56c0de271b61bcd29da88c95796b5fa  libgo/go/golang.org/x/sys/cpu/cpu_zos.go
  5e07f432b17138e15cca555da7146863  libgo/go/golang.org/x/sys/cpu/cpu_zos_s390x.go
  00875b04df26aec9a2001a82eeef4ae0  libgo/go/golang.org/x/sys/cpu/hwcap_linux.go
! f15e7932cfa34485a1507b2f01e16381  libgo/go/golang.org/x/sys/cpu/syscall_aix_gccgo.go
! fed80498fc30bc29fb5ed54468e92867  libgo/go/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go
  1f98dc5015303aab187a536269e6231b  libgo/go/golang.org/x/text/secure/bidirule/bidirule.go
! ca11fee7ac6f9a269e1b2d0bf3270ad2  libgo/go/golang.org/x/text/secure/bidirule/bidirule10.0.0.go
! 63c37e2c4864038318f202a94ddcc831  libgo/go/golang.org/x/text/secure/bidirule/bidirule9.0.0.go
  ccfe8db2db5e042dbf99382b06245078  libgo/go/golang.org/x/text/transform/transform.go
! 61602917b6d20a076c294a26af03f701  libgo/go/golang.org/x/text/unicode/bidi/bidi.go
  65e1f7062ad3c6d02973663c25eaf6c8  libgo/go/golang.org/x/text/unicode/bidi/bracket.go
! 2e7abb728d7c8ed71f0dcfae42c42bc1  libgo/go/golang.org/x/text/unicode/bidi/core.go
  a94e8735d389eafb100e8701c924819e  libgo/go/golang.org/x/text/unicode/bidi/prop.go
! 3fb999f5985099808abac93ae70ecbf9  libgo/go/golang.org/x/text/unicode/bidi/tables10.0.0.go
! a191105bf372fe03b44677e70e53f5cc  libgo/go/golang.org/x/text/unicode/bidi/tables11.0.0.go
! 8f889cba4c4559df7e807ca260906fe5  libgo/go/golang.org/x/text/unicode/bidi/tables12.0.0.go
! ea6233eeb0678b9a7c0b29cce2a0e0e3  libgo/go/golang.org/x/text/unicode/bidi/tables13.0.0.go
! c99eae3b1b2ca050b961452fd4298750  libgo/go/golang.org/x/text/unicode/bidi/tables9.0.0.go
  de1e7e42151682f52b862c88c21804e7  libgo/go/golang.org/x/text/unicode/bidi/trieval.go
  6f35763cd2d9b734d8b22c1e843d6ef6  libgo/go/golang.org/x/text/unicode/norm/composition.go
  ee26429d58961ebec44f347d0592a0e7  libgo/go/golang.org/x/text/unicode/norm/forminfo.go
*************** ee26429d58961ebec44f347d0592a0e7  libgo/
*** 91369,91444 ****
  0108c164232430e6c7ebfec22fcee499  libgo/go/golang.org/x/text/unicode/norm/iter.go
  f9d515d1d2c32e2992a936e3a8fb8e43  libgo/go/golang.org/x/text/unicode/norm/normalize.go
  c4127ecd30651864558a44a09c9e9e70  libgo/go/golang.org/x/text/unicode/norm/readwriter.go
! 2fb185792a2d680c8ce8868111884f64  libgo/go/golang.org/x/text/unicode/norm/tables10.0.0.go
! ad477cd0e75fc1729df8667d39889ad2  libgo/go/golang.org/x/text/unicode/norm/tables11.0.0.go
! 828b4bc3281dd91ec4772124c0fe8686  libgo/go/golang.org/x/text/unicode/norm/tables12.0.0.go
! 9c77fd3cc7c7bdcc7cf946d5d427da5b  libgo/go/golang.org/x/text/unicode/norm/tables13.0.0.go
! 0cf511ecd9ab859a86305c7f152f42d1  libgo/go/golang.org/x/text/unicode/norm/tables9.0.0.go
  f9454484617953b06b380088ecda689c  libgo/go/golang.org/x/text/unicode/norm/transform.go
  3aae5b2aa8a6489b1c0ae5ab31f1d356  libgo/go/golang.org/x/text/unicode/norm/trie.go
  5d4950ecb7b26d2c5e4e7b4e0dd74707  libgo/go/golang.org/x/tools/LICENSE
  3a55d95595a6f9e37dee53826b4daff2  libgo/go/golang.org/x/tools/PATENTS
  3e66a29882c623d9f97222fc1e5ade7d  libgo/go/golang.org/x/tools/go/analysis/analysis.go
  8e6057601126792179df2ee6f4512147  libgo/go/golang.org/x/tools/go/analysis/diagnostic.go
  d1aed24c142c9ff02b201a582b014e69  libgo/go/golang.org/x/tools/go/analysis/doc.go
  32d5f865d959f91fbc5fc2b4a4e815ee  libgo/go/golang.org/x/tools/go/analysis/internal/analysisflags/flags.go
  0f93e9c057af5edb0820cd30ccfc2bc5  libgo/go/golang.org/x/tools/go/analysis/internal/analysisflags/help.go
  2b7faa806070439f60ffcf09da47c956  libgo/go/golang.org/x/tools/go/analysis/internal/facts/facts.go
! 047690a925914d659c7d606db34e2953  libgo/go/golang.org/x/tools/go/analysis/internal/facts/imports.go
! 3f812f43e51734577ea6cafc292a30af  libgo/go/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go
  752f5ca6d07525ce6521335e31fdb010  libgo/go/golang.org/x/tools/go/analysis/passes/assign/assign.go
  d6e4016f63abf5cbba2bf42af536f6bf  libgo/go/golang.org/x/tools/go/analysis/passes/atomic/atomic.go
  02c202ce36618742088c9753ace3b671  libgo/go/golang.org/x/tools/go/analysis/passes/bools/bools.go
! 3e21b7bf7f21452a4854f26a01a8ff08  libgo/go/golang.org/x/tools/go/analysis/passes/buildtag/buildtag.go
  be7a1d8a4e7a7afd663038a3afa12bb9  libgo/go/golang.org/x/tools/go/analysis/passes/cgocall/cgocall.go
! e093bc475e5fd432d58a41b43695f493  libgo/go/golang.org/x/tools/go/analysis/passes/composite/composite.go
  9d4974d405f509290cc1636daae4aaf5  libgo/go/golang.org/x/tools/go/analysis/passes/composite/whitelist.go
! b9b564e1890e5e6b6b38e8c66a1711bb  libgo/go/golang.org/x/tools/go/analysis/passes/copylock/copylock.go
! 8021155ced2fcc8daef17d6d6bc64eb9  libgo/go/golang.org/x/tools/go/analysis/passes/ctrlflow/ctrlflow.go
  270d2204868268034bd85140ae7c3d6b  libgo/go/golang.org/x/tools/go/analysis/passes/errorsas/errorsas.go
  f6b2a86344ae4d5f1fe872b6a2a0b378  libgo/go/golang.org/x/tools/go/analysis/passes/framepointer/framepointer.go
  18a705762411f83155eb6ec477b5c1c7  libgo/go/golang.org/x/tools/go/analysis/passes/httpresponse/httpresponse.go
! 6ad355721a9d78190ed5db055c3ffdad  libgo/go/golang.org/x/tools/go/analysis/passes/ifaceassert/ifaceassert.go
! 3b5932a4e4c3910b6120192d474a3a91  libgo/go/golang.org/x/tools/go/analysis/passes/inspect/inspect.go
  6142bd66242c3953d5a14ed1d3161a27  libgo/go/golang.org/x/tools/go/analysis/passes/internal/analysisutil/util.go
! 587ab2465297764bd9ae960bb5105286  libgo/go/golang.org/x/tools/go/analysis/passes/loopclosure/loopclosure.go
  b30ac7d0075decdc3e45bee86192b9be  libgo/go/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go
! 349239697f7da1a9e8baaab5e84ab663  libgo/go/golang.org/x/tools/go/analysis/passes/nilfunc/nilfunc.go
  ffa02dd6d141f2ce330857b5ac7ab678  libgo/go/golang.org/x/tools/go/analysis/passes/pkgfact/pkgfact.go
! a86fea9db1724722aa66f348ae2da74b  libgo/go/golang.org/x/tools/go/analysis/passes/printf/printf.go
! 24a606a46b6b55bb490e47299cd0080f  libgo/go/golang.org/x/tools/go/analysis/passes/printf/types.go
  e6fa433a73322f3d5843e8490159e030  libgo/go/golang.org/x/tools/go/analysis/passes/shift/dead.go
! 1e7582193fbdec5d182005e69fe393eb  libgo/go/golang.org/x/tools/go/analysis/passes/shift/shift.go
! aab0951d37eb49a1ba2be11f1c4e040f  libgo/go/golang.org/x/tools/go/analysis/passes/stdmethods/stdmethods.go
! 77c1bde28750b5909e322ce45ace0296  libgo/go/golang.org/x/tools/go/analysis/passes/stringintconv/string.go
  086df3e2ff2d8908352456c0df68bd4a  libgo/go/golang.org/x/tools/go/analysis/passes/structtag/structtag.go
! dcfadae355b9d9b829bc5e45d5d4f373  libgo/go/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go
! 065a81c257f58f07cc5c379124e76cae  libgo/go/golang.org/x/tools/go/analysis/passes/tests/tests.go
! a07a47429c9717c0496262cf6699c4fa  libgo/go/golang.org/x/tools/go/analysis/passes/unmarshal/unmarshal.go
  5481cda4886283c9ee939223c048b3d0  libgo/go/golang.org/x/tools/go/analysis/passes/unreachable/unreachable.go
  0beb6bda795bb2066c74956398f3f988  libgo/go/golang.org/x/tools/go/analysis/passes/unsafeptr/unsafeptr.go
! 7c42000ab97d6750616696ec636be6f0  libgo/go/golang.org/x/tools/go/analysis/passes/unusedresult/unusedresult.go
  d229db7f70c41d6a68ee5946e87d872c  libgo/go/golang.org/x/tools/go/analysis/unitchecker/main.go
! ea067aea11f0fe6c63df53e8db56c22b  libgo/go/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go
! 3af9b34683095504cc713e6baa8073be  libgo/go/golang.org/x/tools/go/analysis/unitchecker/unitchecker112.go
  0e97f1a01944e52b289f15b6d5cd5804  libgo/go/golang.org/x/tools/go/analysis/validate.go
! 50c85ecf02816f1b403349e85622d7ea  libgo/go/golang.org/x/tools/go/ast/astutil/enclosing.go
  ee4b46f4339448515f1709dc25f94b34  libgo/go/golang.org/x/tools/go/ast/astutil/imports.go
! 53e84944057680f2ad2c83b3b705c0f6  libgo/go/golang.org/x/tools/go/ast/astutil/rewrite.go
  313722a1bf0a9dae2e023c9f8fffd1d4  libgo/go/golang.org/x/tools/go/ast/astutil/util.go
  834a33506af13a7f0cf8539876816cf9  libgo/go/golang.org/x/tools/go/ast/inspector/inspector.go
! 051b30c426b6c2b0e878db3872105862  libgo/go/golang.org/x/tools/go/ast/inspector/typeof.go
  a009c86f7a675bae6190aaf68d579b31  libgo/go/golang.org/x/tools/go/cfg/builder.go
  69b538a6ff1160cef6c6613f368e1629  libgo/go/golang.org/x/tools/go/cfg/cfg.go
! b15b7bbe77e382ab230c647fdd598ed0  libgo/go/golang.org/x/tools/go/types/objectpath/objectpath.go
! a718ff62afafa1b52e7d8b336031e195  libgo/go/golang.org/x/tools/go/types/typeutil/callee.go
  fb6c2862bcf88d38633449c9d62a0c0a  libgo/go/golang.org/x/tools/go/types/typeutil/imports.go
! b2e833de33caaa37aa3cf677b8b878da  libgo/go/golang.org/x/tools/go/types/typeutil/map.go
  f474c8805d07a4bcd752b963c7a72da9  libgo/go/golang.org/x/tools/go/types/typeutil/methodsetcache.go
  f4a1ba4e7337cb75bee6aba59d4a09ca  libgo/go/golang.org/x/tools/go/types/typeutil/ui.go
  54a1028ba7bad14a6710910e024d7676  libgo/go/golang.org/x/tools/internal/analysisinternal/analysis.go
! 01df12a2ea6454c7d1ac6c119226471f  libgo/go/golang.org/x/tools/internal/lsp/fuzzy/input.go
! 363385c8cd31218fea029ea9a846d2dd  libgo/go/golang.org/x/tools/internal/lsp/fuzzy/matcher.go
  a413d6b3884e141783f23d00d5838777  libgo/go/golang.org/x/xerrors/LICENSE
  3a55d95595a6f9e37dee53826b4daff2  libgo/go/golang.org/x/xerrors/PATENTS
  87e85122864fe749bfe1f872546a4ca6  libgo/go/golang.org/x/xerrors/README
--- 97748,97837 ----
  0108c164232430e6c7ebfec22fcee499  libgo/go/golang.org/x/text/unicode/norm/iter.go
  f9d515d1d2c32e2992a936e3a8fb8e43  libgo/go/golang.org/x/text/unicode/norm/normalize.go
  c4127ecd30651864558a44a09c9e9e70  libgo/go/golang.org/x/text/unicode/norm/readwriter.go
! aebd91480abc9ac7239bd384abdabdef  libgo/go/golang.org/x/text/unicode/norm/tables10.0.0.go
! 49db2679de38048380de046ba5f0fc6a  libgo/go/golang.org/x/text/unicode/norm/tables11.0.0.go
! d73850af883fade04f9d2507333e4c1e  libgo/go/golang.org/x/text/unicode/norm/tables12.0.0.go
! 342ce2053abbe0d4deabbbf24764b261  libgo/go/golang.org/x/text/unicode/norm/tables13.0.0.go
! efc42788d0c82ef6172813ca87ad9708  libgo/go/golang.org/x/text/unicode/norm/tables9.0.0.go
  f9454484617953b06b380088ecda689c  libgo/go/golang.org/x/text/unicode/norm/transform.go
  3aae5b2aa8a6489b1c0ae5ab31f1d356  libgo/go/golang.org/x/text/unicode/norm/trie.go
  5d4950ecb7b26d2c5e4e7b4e0dd74707  libgo/go/golang.org/x/tools/LICENSE
  3a55d95595a6f9e37dee53826b4daff2  libgo/go/golang.org/x/tools/PATENTS
+ f3fb234aa1705f36dc206d6c6b4bb079  libgo/go/golang.org/x/tools/cover/profile.go
  3e66a29882c623d9f97222fc1e5ade7d  libgo/go/golang.org/x/tools/go/analysis/analysis.go
  8e6057601126792179df2ee6f4512147  libgo/go/golang.org/x/tools/go/analysis/diagnostic.go
  d1aed24c142c9ff02b201a582b014e69  libgo/go/golang.org/x/tools/go/analysis/doc.go
  32d5f865d959f91fbc5fc2b4a4e815ee  libgo/go/golang.org/x/tools/go/analysis/internal/analysisflags/flags.go
  0f93e9c057af5edb0820cd30ccfc2bc5  libgo/go/golang.org/x/tools/go/analysis/internal/analysisflags/help.go
  2b7faa806070439f60ffcf09da47c956  libgo/go/golang.org/x/tools/go/analysis/internal/facts/facts.go
! 61238bf825ce6abc3f1c47ea2764fc34  libgo/go/golang.org/x/tools/go/analysis/internal/facts/imports.go
! 9825aed4b8b55f6dd0c00a080953ab29  libgo/go/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go
  752f5ca6d07525ce6521335e31fdb010  libgo/go/golang.org/x/tools/go/analysis/passes/assign/assign.go
  d6e4016f63abf5cbba2bf42af536f6bf  libgo/go/golang.org/x/tools/go/analysis/passes/atomic/atomic.go
  02c202ce36618742088c9753ace3b671  libgo/go/golang.org/x/tools/go/analysis/passes/bools/bools.go
! 9c54bf6b0080ec9dd502c671f4646760  libgo/go/golang.org/x/tools/go/analysis/passes/buildtag/buildtag.go
! 7ea694f91996a65e60a885cd6d2c3dba  libgo/go/golang.org/x/tools/go/analysis/passes/buildtag/buildtag_old.go
  be7a1d8a4e7a7afd663038a3afa12bb9  libgo/go/golang.org/x/tools/go/analysis/passes/cgocall/cgocall.go
! 649330d8fab9e8cf76e8105a612a7fe3  libgo/go/golang.org/x/tools/go/analysis/passes/composite/composite.go
  9d4974d405f509290cc1636daae4aaf5  libgo/go/golang.org/x/tools/go/analysis/passes/composite/whitelist.go
! c3d66dd1caeb0b6029c2619a04ec81d6  libgo/go/golang.org/x/tools/go/analysis/passes/copylock/copylock.go
! d591512ab60e34b74d0d2474da14861c  libgo/go/golang.org/x/tools/go/analysis/passes/ctrlflow/ctrlflow.go
  270d2204868268034bd85140ae7c3d6b  libgo/go/golang.org/x/tools/go/analysis/passes/errorsas/errorsas.go
  f6b2a86344ae4d5f1fe872b6a2a0b378  libgo/go/golang.org/x/tools/go/analysis/passes/framepointer/framepointer.go
  18a705762411f83155eb6ec477b5c1c7  libgo/go/golang.org/x/tools/go/analysis/passes/httpresponse/httpresponse.go
! efc39b5c6fb194b140f4d71650755afa  libgo/go/golang.org/x/tools/go/analysis/passes/ifaceassert/ifaceassert.go
! 74043fed13e106ae4036593f67f12d54  libgo/go/golang.org/x/tools/go/analysis/passes/ifaceassert/parameterized.go
! 49ee8ff49178fbe5f969fcd11f61e30a  libgo/go/golang.org/x/tools/go/analysis/passes/inspect/inspect.go
  6142bd66242c3953d5a14ed1d3161a27  libgo/go/golang.org/x/tools/go/analysis/passes/internal/analysisutil/util.go
! 926c12d0ece2c95f7e4aa290aa7876e9  libgo/go/golang.org/x/tools/go/analysis/passes/loopclosure/loopclosure.go
  b30ac7d0075decdc3e45bee86192b9be  libgo/go/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go
! ceb7cea72e4acf3808ae1f063548d4ca  libgo/go/golang.org/x/tools/go/analysis/passes/nilfunc/nilfunc.go
  ffa02dd6d141f2ce330857b5ac7ab678  libgo/go/golang.org/x/tools/go/analysis/passes/pkgfact/pkgfact.go
! 6ff00b1aa3d23ea5baf0ea1bd23d4d1e  libgo/go/golang.org/x/tools/go/analysis/passes/printf/printf.go
! e4408fb46fd79ac907a32687f426c405  libgo/go/golang.org/x/tools/go/analysis/passes/printf/types.go
  e6fa433a73322f3d5843e8490159e030  libgo/go/golang.org/x/tools/go/analysis/passes/shift/dead.go
! e83d2d4137b8bb6ffd36e5d8eb3ec5b1  libgo/go/golang.org/x/tools/go/analysis/passes/shift/shift.go
! fea74c300ede6ef90ff1d3c1ab1cdeb1  libgo/go/golang.org/x/tools/go/analysis/passes/sigchanyzer/sigchanyzer.go
! b7dc5e3764b5ea32954912e5d222fd6d  libgo/go/golang.org/x/tools/go/analysis/passes/stdmethods/stdmethods.go
! 708326d31a819352c77da08638d94e62  libgo/go/golang.org/x/tools/go/analysis/passes/stringintconv/string.go
  086df3e2ff2d8908352456c0df68bd4a  libgo/go/golang.org/x/tools/go/analysis/passes/structtag/structtag.go
! b3855a256e1031c43dd0720657261244  libgo/go/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go
! 3538e6ebc91326125a417fa703a44446  libgo/go/golang.org/x/tools/go/analysis/passes/tests/tests.go
! cc0d6fca31388e3f7c463eb56652eb7a  libgo/go/golang.org/x/tools/go/analysis/passes/unmarshal/unmarshal.go
  5481cda4886283c9ee939223c048b3d0  libgo/go/golang.org/x/tools/go/analysis/passes/unreachable/unreachable.go
  0beb6bda795bb2066c74956398f3f988  libgo/go/golang.org/x/tools/go/analysis/passes/unsafeptr/unsafeptr.go
! de4cedef53f41d7209a1a3bae9284e9f  libgo/go/golang.org/x/tools/go/analysis/passes/unusedresult/unusedresult.go
  d229db7f70c41d6a68ee5946e87d872c  libgo/go/golang.org/x/tools/go/analysis/unitchecker/main.go
! 35babb54addcb8c4c4ede2022256338d  libgo/go/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go
! 0f0f41f1a548665d1518ef8cfcfd4e4a  libgo/go/golang.org/x/tools/go/analysis/unitchecker/unitchecker112.go
  0e97f1a01944e52b289f15b6d5cd5804  libgo/go/golang.org/x/tools/go/analysis/validate.go
! 41527c17e66f08b5d942f63230e3c217  libgo/go/golang.org/x/tools/go/ast/astutil/enclosing.go
  ee4b46f4339448515f1709dc25f94b34  libgo/go/golang.org/x/tools/go/ast/astutil/imports.go
! abb28d34b8502107c313bafdf06102af  libgo/go/golang.org/x/tools/go/ast/astutil/rewrite.go
  313722a1bf0a9dae2e023c9f8fffd1d4  libgo/go/golang.org/x/tools/go/ast/astutil/util.go
  834a33506af13a7f0cf8539876816cf9  libgo/go/golang.org/x/tools/go/ast/inspector/inspector.go
! a679051d7fabdff0f2b3b8689361df53  libgo/go/golang.org/x/tools/go/ast/inspector/typeof.go
  a009c86f7a675bae6190aaf68d579b31  libgo/go/golang.org/x/tools/go/cfg/builder.go
  69b538a6ff1160cef6c6613f368e1629  libgo/go/golang.org/x/tools/go/cfg/cfg.go
! 82f2e226fe22188c9fd4d85be22195e9  libgo/go/golang.org/x/tools/go/types/objectpath/objectpath.go
! 1ebe56c557cacd3d84e56a6e8a387042  libgo/go/golang.org/x/tools/go/types/typeutil/callee.go
  fb6c2862bcf88d38633449c9d62a0c0a  libgo/go/golang.org/x/tools/go/types/typeutil/imports.go
! a317ddd36d774dd577755fc327197195  libgo/go/golang.org/x/tools/go/types/typeutil/map.go
  f474c8805d07a4bcd752b963c7a72da9  libgo/go/golang.org/x/tools/go/types/typeutil/methodsetcache.go
  f4a1ba4e7337cb75bee6aba59d4a09ca  libgo/go/golang.org/x/tools/go/types/typeutil/ui.go
  54a1028ba7bad14a6710910e024d7676  libgo/go/golang.org/x/tools/internal/analysisinternal/analysis.go
! 0d409735da2517ef4bd4e7491492e41c  libgo/go/golang.org/x/tools/internal/lsp/fuzzy/input.go
! ff787381be8ba3fb3439bede78d76e69  libgo/go/golang.org/x/tools/internal/lsp/fuzzy/matcher.go
! 40e753b250d15d6c2892481abf377dc9  libgo/go/golang.org/x/tools/internal/lsp/fuzzy/symbol.go
! a4bd45734911fb25fa05b4b3783e6622  libgo/go/golang.org/x/tools/internal/typeparams/common.go
! f2d7df5ae129cae341e6d8dda3046fbc  libgo/go/golang.org/x/tools/internal/typeparams/enabled_go117.go
! c68270b87b529d01977be67e37481a9a  libgo/go/golang.org/x/tools/internal/typeparams/enabled_go118.go
! d3b50e64d2ca855bbf543d574292e2cc  libgo/go/golang.org/x/tools/internal/typeparams/normalize.go
! 5e681c602acf9a978873b20aec54e18e  libgo/go/golang.org/x/tools/internal/typeparams/termlist.go
! 0e0cb01818f5677b9ae48dbef218aa22  libgo/go/golang.org/x/tools/internal/typeparams/typeparams_go117.go
! 389b292e83fa90bf2a12785ed3dfd209  libgo/go/golang.org/x/tools/internal/typeparams/typeparams_go118.go
! 04f058aaa2743a2fcd51fa9a156e9ad7  libgo/go/golang.org/x/tools/internal/typeparams/typeterm.go
! e5f3864c618e1676afb52413cb43c9d3  libgo/go/golang.org/x/tools/txtar/archive.go
  a413d6b3884e141783f23d00d5838777  libgo/go/golang.org/x/xerrors/LICENSE
  3a55d95595a6f9e37dee53826b4daff2  libgo/go/golang.org/x/xerrors/PATENTS
  87e85122864fe749bfe1f872546a4ca6  libgo/go/golang.org/x/xerrors/README
*************** d2dfcb5689c9caf5ce1b8559fbd89d76  libgo/
*** 91458,91469 ****
  9e5c06cb4bd7d4f4bd01312ab279e508  libgo/go/hash/crc32/crc32_amd64.go
  747c1f9bd3aeafb6e0b7c0e8e2058123  libgo/go/hash/crc32/crc32_arm64.go
  672e27745433436913cf360b2dece8b5  libgo/go/hash/crc32/crc32_generic.go
! 1ba309eacf965359eebfbdb64555674f  libgo/go/hash/crc32/crc32_otherarch.go
  ab076b6be5c97561bf79fab2c0569a64  libgo/go/hash/crc32/crc32_ppc64le.go
  59ebac54a70cb3aa291598b17769564c  libgo/go/hash/crc32/crc32_s390x.go
  da2cbf6b81f25f8c73b7c2c5a32c7be3  libgo/go/hash/crc32/crc32_test.go
  7b8109fec8c950fc712ffd6350ca612c  libgo/go/hash/crc32/example_test.go
! 0cd5a00cdc6edfbc7e4c9de059f3baf4  libgo/go/hash/crc32/gen_const_ppc64le.go
  9bc9fc984994e69f19bf7366912ce7a5  libgo/go/hash/crc64/crc64.go
  2fffa60cc4121c2414a1299720b41ea7  libgo/go/hash/crc64/crc64_test.go
  645bb03c0d4d72740efdf952be1f85e7  libgo/go/hash/example_test.go
--- 97851,97862 ----
  9e5c06cb4bd7d4f4bd01312ab279e508  libgo/go/hash/crc32/crc32_amd64.go
  747c1f9bd3aeafb6e0b7c0e8e2058123  libgo/go/hash/crc32/crc32_arm64.go
  672e27745433436913cf360b2dece8b5  libgo/go/hash/crc32/crc32_generic.go
! eec6dc8eeb0742c7603b49c81cf2a0be  libgo/go/hash/crc32/crc32_otherarch.go
  ab076b6be5c97561bf79fab2c0569a64  libgo/go/hash/crc32/crc32_ppc64le.go
  59ebac54a70cb3aa291598b17769564c  libgo/go/hash/crc32/crc32_s390x.go
  da2cbf6b81f25f8c73b7c2c5a32c7be3  libgo/go/hash/crc32/crc32_test.go
  7b8109fec8c950fc712ffd6350ca612c  libgo/go/hash/crc32/example_test.go
! 8095271cdf26d2c3351096ec4ce7ec56  libgo/go/hash/crc32/gen_const_ppc64le.go
  9bc9fc984994e69f19bf7366912ce7a5  libgo/go/hash/crc64/crc64.go
  2fffa60cc4121c2414a1299720b41ea7  libgo/go/hash/crc64/crc64_test.go
  645bb03c0d4d72740efdf952be1f85e7  libgo/go/hash/example_test.go
*************** da2cbf6b81f25f8c73b7c2c5a32c7be3  libgo/
*** 91471,91478 ****
  bc4c5a7ede82eb4418b96c6d7738d4c9  libgo/go/hash/fnv/fnv_test.go
  c1a5611f8ea9c06ccb019508c3c2ed5c  libgo/go/hash/hash.go
  9b2ffae26f6954f75a3e90a25d1f57e5  libgo/go/hash/maphash/example_test.go
! 1e9bd8dd532b18462b28ec31986bf25d  libgo/go/hash/maphash/maphash.go
! 661a14606fdef21086734291f2659aea  libgo/go/hash/maphash/maphash_test.go
  04d7e6f5cb7eb19f39ed7e328ef6097e  libgo/go/hash/maphash/smhasher_test.go
  055a6da6aec9eb5976d82f7aeb497dbd  libgo/go/hash/marshal_test.go
  348ce93e9c934fe4500a7e54211e7efe  libgo/go/html/entity.go
--- 97864,97871 ----
  bc4c5a7ede82eb4418b96c6d7738d4c9  libgo/go/hash/fnv/fnv_test.go
  c1a5611f8ea9c06ccb019508c3c2ed5c  libgo/go/hash/hash.go
  9b2ffae26f6954f75a3e90a25d1f57e5  libgo/go/hash/maphash/example_test.go
! c797db7764115f789ea938cef9605c68  libgo/go/hash/maphash/maphash.go
! 2fd2887246279e7a1b68265336048c62  libgo/go/hash/maphash/maphash_test.go
  04d7e6f5cb7eb19f39ed7e328ef6097e  libgo/go/hash/maphash/smhasher_test.go
  055a6da6aec9eb5976d82f7aeb497dbd  libgo/go/hash/marshal_test.go
  348ce93e9c934fe4500a7e54211e7efe  libgo/go/html/entity.go
*************** c1a5611f8ea9c06ccb019508c3c2ed5c  libgo/
*** 91480,91512 ****
  b6b5718a9359a51904275e4a2dcab0e9  libgo/go/html/escape.go
  86037b4a7db52b43eeb44b95a17f835a  libgo/go/html/escape_test.go
  c25ef92adb0747302fe0d99c86b07bac  libgo/go/html/example_test.go
! bba1e21bdf1e331c14228c6d55f7404b  libgo/go/html/fuzz.go
! abd5871dc8a3767d7c00031851098ebd  libgo/go/html/template/attr.go
  888dc55957e989bbefdb0e5ede73a2a8  libgo/go/html/template/attr_string.go
  3d419cd9114fc275ee973d253409e71e  libgo/go/html/template/clone_test.go
! c7b8d9f38483918cfab71f4ae89ee141  libgo/go/html/template/content.go
! 2a43b26d9be4eba09d0258843033fcae  libgo/go/html/template/content_test.go
! 85545c3d44bdab3811ddd2d6123d0bcc  libgo/go/html/template/context.go
! 65b80129a2d5d1154f16365c27695360  libgo/go/html/template/css.go
  55e9163874525f8c28e019f575a9ebba  libgo/go/html/template/css_test.go
  d0685d862b438677e3a70cf22117cdf0  libgo/go/html/template/delim_string.go
  86ebe6f57a3758381707d59dc4a44905  libgo/go/html/template/doc.go
  c04868ab9d1e2a50b8a2c58e5aeaf003  libgo/go/html/template/element_string.go
! e1a59197f089f1ebaf97c96dc60f7f9e  libgo/go/html/template/error.go
! fbc94e6bf09bbbb0c35e8c4992a2e5c0  libgo/go/html/template/escape.go
! be220be3539e72faa220a02f51e2cbe7  libgo/go/html/template/escape_test.go
! 067ca8111c5709e89a5094e3bbd68116  libgo/go/html/template/example_test.go
  1e0217b43d300a7bb7cc355f8e9e121a  libgo/go/html/template/examplefiles_test.go
! 076429f488a0751882936bc6e383ad7c  libgo/go/html/template/exec_test.go
! 3cb0e280dd29754101994f41e86bcfcf  libgo/go/html/template/html.go
  168fb875c16d9bbe98e9f332d126c055  libgo/go/html/template/html_test.go
! 9ce9cdc5970063761708be57e3bb0d4e  libgo/go/html/template/js.go
! 8416142cde816f3551af2146d1c022dc  libgo/go/html/template/js_test.go
  dc6364324c3072c8b723a4e53677d08c  libgo/go/html/template/jsctx_string.go
  908a1881fba2f8329387c886eb59d8e4  libgo/go/html/template/multi_test.go
  85defc4801e92a882e763665cdd9ae3f  libgo/go/html/template/state_string.go
! 39d18d11bc1a4fffc827851a8a126e8e  libgo/go/html/template/template.go
! b4a327b369f41634ea522f736a4e170e  libgo/go/html/template/template_test.go
  d6b6ff8eb45b5d3c6559c70664f2f9f3  libgo/go/html/template/testdata/file1.tmpl
  30ae547a79cfdc1dc838a5a0d9ed8198  libgo/go/html/template/testdata/file2.tmpl
  47b29f51328e97794a0fb49bba31f560  libgo/go/html/template/testdata/fs.zip
--- 97873,97905 ----
  b6b5718a9359a51904275e4a2dcab0e9  libgo/go/html/escape.go
  86037b4a7db52b43eeb44b95a17f835a  libgo/go/html/escape_test.go
  c25ef92adb0747302fe0d99c86b07bac  libgo/go/html/example_test.go
! be96f3b4df2620eef0d427a25a0e2933  libgo/go/html/fuzz.go
! febc26a6a17fe49d2ad707ed8e4d3f0c  libgo/go/html/template/attr.go
  888dc55957e989bbefdb0e5ede73a2a8  libgo/go/html/template/attr_string.go
  3d419cd9114fc275ee973d253409e71e  libgo/go/html/template/clone_test.go
! 5a9b59c73f6401b0c5efc0a63e3c81b9  libgo/go/html/template/content.go
! c3ac9cd960f63a5e2db8ea460c695659  libgo/go/html/template/content_test.go
! a9ac68744ce43163e91adfc9c0a00433  libgo/go/html/template/context.go
! aa2d7394eee28b166e451cbd086b3ec5  libgo/go/html/template/css.go
  55e9163874525f8c28e019f575a9ebba  libgo/go/html/template/css_test.go
  d0685d862b438677e3a70cf22117cdf0  libgo/go/html/template/delim_string.go
  86ebe6f57a3758381707d59dc4a44905  libgo/go/html/template/doc.go
  c04868ab9d1e2a50b8a2c58e5aeaf003  libgo/go/html/template/element_string.go
! a76803343821af80288a644b253e49b8  libgo/go/html/template/error.go
! aec456e6232cf71399b6e7d22e0be27a  libgo/go/html/template/escape.go
! 17a31cb3a7b72fca23d1da589c8e1b75  libgo/go/html/template/escape_test.go
! dbb0a5c96a704e18a017ce52cc16af2d  libgo/go/html/template/example_test.go
  1e0217b43d300a7bb7cc355f8e9e121a  libgo/go/html/template/examplefiles_test.go
! b3c47cdd51d98df2617dd0062376e4b2  libgo/go/html/template/exec_test.go
! 0bc20d6d4ee7c8ae6e484edb80895f72  libgo/go/html/template/html.go
  168fb875c16d9bbe98e9f332d126c055  libgo/go/html/template/html_test.go
! 6483f9c13a03722492a38aa0db0688fa  libgo/go/html/template/js.go
! f92e11d43b2b16ba820134d66474d633  libgo/go/html/template/js_test.go
  dc6364324c3072c8b723a4e53677d08c  libgo/go/html/template/jsctx_string.go
  908a1881fba2f8329387c886eb59d8e4  libgo/go/html/template/multi_test.go
  85defc4801e92a882e763665cdd9ae3f  libgo/go/html/template/state_string.go
! a916ef0e592f6953cdbde325dee4e531  libgo/go/html/template/template.go
! 76d70775919c0f029000972f79302ad4  libgo/go/html/template/template_test.go
  d6b6ff8eb45b5d3c6559c70664f2f9f3  libgo/go/html/template/testdata/file1.tmpl
  30ae547a79cfdc1dc838a5a0d9ed8198  libgo/go/html/template/testdata/file2.tmpl
  47b29f51328e97794a0fb49bba31f560  libgo/go/html/template/testdata/fs.zip
*************** d6b6ff8eb45b5d3c6559c70664f2f9f3  libgo/
*** 91514,91563 ****
  1fd8ef440f5fd08e0117c3c00500294b  libgo/go/html/template/testdata/tmpl2.tmpl
  52472e4d3838e2a2530712e77cbb0ac1  libgo/go/html/template/transition.go
  794c76daefd189e7a55f97b5ce4bd9ed  libgo/go/html/template/transition_test.go
! a5e95c51763710adcae02d703a247433  libgo/go/html/template/url.go
! 08f8319972248363c1f6efd05c81153a  libgo/go/html/template/url_test.go
  1973229a5ac302dc476de88f825aafe2  libgo/go/html/template/urlpart_string.go
  0ee9e1086d3be098c9d118eea9e2b35c  libgo/go/image/color/color.go
  697ed61304b0fa02aea26470f306a495  libgo/go/image/color/color_test.go
! 5c3c52bb25cf94b6f8fa93336b481f0a  libgo/go/image/color/palette/gen.go
  9351e4a2e64d6046298e943eb06ecf5c  libgo/go/image/color/palette/generate.go
  6b6b24a272cf87fff7f3b3fe4d980e4f  libgo/go/image/color/palette/palette.go
  9d403013ccc8572ceb09585a7e868089  libgo/go/image/color/ycbcr.go
  eb49954ae9c2cc1153e2b0ac76c25fda  libgo/go/image/color/ycbcr_test.go
  7beb2f38eacb2c6b1fcab14b480f4aa5  libgo/go/image/decode_example_test.go
  f9d93c6d8bba9579dec7faf89cc73658  libgo/go/image/decode_test.go
! a7dfb713905410d3cbc0d90b9181ea31  libgo/go/image/draw/bench_test.go
  05b4c6b42b216ef3f39178bdedd124a6  libgo/go/image/draw/clip_test.go
! fb0c0ae2d40239c18c5ad401d47f46e5  libgo/go/image/draw/draw.go
! fc1f7a765694edd76da9066b0908c5b5  libgo/go/image/draw/draw_test.go
  f5204adc294703971186a2ddc9714760  libgo/go/image/draw/example_test.go
  6119c833eb5b59fb2f443394c0db2acb  libgo/go/image/format.go
! 48ecf182eff7c6291cc91ef7323ab69d  libgo/go/image/geom.go
  9a8f5ed2c0cf944d5b4c93bd318889d2  libgo/go/image/geom_test.go
! 722f3c4e1a524c012bce85ab0323985d  libgo/go/image/gif/reader.go
  f24db612d6f3f688edb8c4882a042fa9  libgo/go/image/gif/reader_test.go
  d06cf95880b3a8ae31d4fdb93fedf851  libgo/go/image/gif/writer.go
  485f9510892c7611f22309428af139cf  libgo/go/image/gif/writer_test.go
! 45bd9571607b2de75068cfca388e138b  libgo/go/image/image.go
! 52c8c7a9c070e214a441eec2467b7df4  libgo/go/image/image_test.go
! d093a41a1cc2ecbc753bbfc9914b8550  libgo/go/image/internal/imageutil/gen.go
  f17c0b78607a9db21a18e33d106ed160  libgo/go/image/internal/imageutil/imageutil.go
  6b45c8bcc99a04a90fc88d500ac3a227  libgo/go/image/internal/imageutil/impl.go
  e0649349326bee233728d0badff2e25b  libgo/go/image/jpeg/dct_test.go
  d8ec8e0dc67d96f56b092e650a3d6b80  libgo/go/image/jpeg/fdct.go
  9700c44ea13ff67daedd5dad2511a15f  libgo/go/image/jpeg/huffman.go
  6cfacf6d19184013295b9ab200b3f37a  libgo/go/image/jpeg/idct.go
! 809ee4017e28ae7097777d773515b402  libgo/go/image/jpeg/reader.go
  f0fde4609baccf420794b7757affebde  libgo/go/image/jpeg/reader_test.go
  edbebf89453d683d6bd67291a54257d7  libgo/go/image/jpeg/scan.go
  6ab9412fbf1fd9c757c0b2b2c722861e  libgo/go/image/jpeg/writer.go
  9a2bc48f04ac41ed269e990fb43ed44f  libgo/go/image/jpeg/writer_test.go
! 8329e8281233f429a5df3f95b8a47eaa  libgo/go/image/names.go
  b10ff76b18900da446480301b6880117  libgo/go/image/png/example_test.go
! 73d25d1f6314c780192d0b9722163334  libgo/go/image/png/fuzz.go
  cae7ad20b122bf2b990fef70ff4877b4  libgo/go/image/png/paeth.go
  1caac54afaaad92487178b716e2727fe  libgo/go/image/png/paeth_test.go
! 323e61fca3d4744abee847ba63e0e81d  libgo/go/image/png/reader.go
  bdabb5415003ef1ba7ea49107a9af640  libgo/go/image/png/reader_test.go
  02fc2ecfd2154905cb5b591c32c9f7c7  libgo/go/image/png/testdata/benchGray.png
  e53a3cd017e256b059f0c63055182f17  libgo/go/image/png/testdata/benchNRGBA-gradient.png
--- 97907,97959 ----
  1fd8ef440f5fd08e0117c3c00500294b  libgo/go/html/template/testdata/tmpl2.tmpl
  52472e4d3838e2a2530712e77cbb0ac1  libgo/go/html/template/transition.go
  794c76daefd189e7a55f97b5ce4bd9ed  libgo/go/html/template/transition_test.go
! a54443138630c43bbe6665a65cd4878a  libgo/go/html/template/url.go
! 6e9c842fc52d8a443c251dc5b20ca760  libgo/go/html/template/url_test.go
  1973229a5ac302dc476de88f825aafe2  libgo/go/html/template/urlpart_string.go
  0ee9e1086d3be098c9d118eea9e2b35c  libgo/go/image/color/color.go
  697ed61304b0fa02aea26470f306a495  libgo/go/image/color/color_test.go
! 2deea74d1e68aad94100979833d255c0  libgo/go/image/color/palette/gen.go
  9351e4a2e64d6046298e943eb06ecf5c  libgo/go/image/color/palette/generate.go
  6b6b24a272cf87fff7f3b3fe4d980e4f  libgo/go/image/color/palette/palette.go
  9d403013ccc8572ceb09585a7e868089  libgo/go/image/color/ycbcr.go
  eb49954ae9c2cc1153e2b0ac76c25fda  libgo/go/image/color/ycbcr_test.go
  7beb2f38eacb2c6b1fcab14b480f4aa5  libgo/go/image/decode_example_test.go
  f9d93c6d8bba9579dec7faf89cc73658  libgo/go/image/decode_test.go
! fbd3ee29cba4a7af7967ca4417fa76ca  libgo/go/image/draw/bench_test.go
  05b4c6b42b216ef3f39178bdedd124a6  libgo/go/image/draw/clip_test.go
! c7f9f3e6e9f8fc3f34f69de33e42461a  libgo/go/image/draw/draw.go
! 576082a6a55bb07a23b25eb13da14da6  libgo/go/image/draw/draw_test.go
  f5204adc294703971186a2ddc9714760  libgo/go/image/draw/example_test.go
  6119c833eb5b59fb2f443394c0db2acb  libgo/go/image/format.go
! 082b2a3fe637690733f791f344a084e8  libgo/go/image/geom.go
  9a8f5ed2c0cf944d5b4c93bd318889d2  libgo/go/image/geom_test.go
! 49d4e4af5a56fe774d1a1ca9df927222  libgo/go/image/gif/fuzz_test.go
! afd23e08f7a2c8e916c776565b5c51cb  libgo/go/image/gif/reader.go
  f24db612d6f3f688edb8c4882a042fa9  libgo/go/image/gif/reader_test.go
  d06cf95880b3a8ae31d4fdb93fedf851  libgo/go/image/gif/writer.go
  485f9510892c7611f22309428af139cf  libgo/go/image/gif/writer_test.go
! 4cd0ac36cddbecb16ec53057ac7f3283  libgo/go/image/image.go
! 1a18bbe578acc5110485320d429d82ce  libgo/go/image/image_test.go
! c016f8ad5073ad6b10952ceecdaeacf5  libgo/go/image/internal/imageutil/gen.go
  f17c0b78607a9db21a18e33d106ed160  libgo/go/image/internal/imageutil/imageutil.go
  6b45c8bcc99a04a90fc88d500ac3a227  libgo/go/image/internal/imageutil/impl.go
  e0649349326bee233728d0badff2e25b  libgo/go/image/jpeg/dct_test.go
  d8ec8e0dc67d96f56b092e650a3d6b80  libgo/go/image/jpeg/fdct.go
+ db9d023b78e7eb3b1a4379d9d5ce18d0  libgo/go/image/jpeg/fuzz_test.go
  9700c44ea13ff67daedd5dad2511a15f  libgo/go/image/jpeg/huffman.go
  6cfacf6d19184013295b9ab200b3f37a  libgo/go/image/jpeg/idct.go
! 247ac9affa8094ada6d4938601181365  libgo/go/image/jpeg/reader.go
  f0fde4609baccf420794b7757affebde  libgo/go/image/jpeg/reader_test.go
  edbebf89453d683d6bd67291a54257d7  libgo/go/image/jpeg/scan.go
  6ab9412fbf1fd9c757c0b2b2c722861e  libgo/go/image/jpeg/writer.go
  9a2bc48f04ac41ed269e990fb43ed44f  libgo/go/image/jpeg/writer_test.go
! 7c123ffaee6ca5136a2ee9947eed039a  libgo/go/image/names.go
  b10ff76b18900da446480301b6880117  libgo/go/image/png/example_test.go
! 0709c04b0f2f540daf66dd8dd2d7c5c6  libgo/go/image/png/fuzz.go
! e8191631fb2fef74dd7a2f035a5a2c81  libgo/go/image/png/fuzz_test.go
  cae7ad20b122bf2b990fef70ff4877b4  libgo/go/image/png/paeth.go
  1caac54afaaad92487178b716e2727fe  libgo/go/image/png/paeth_test.go
! bfef270499f3652b1d059c78f21833d5  libgo/go/image/png/reader.go
  bdabb5415003ef1ba7ea49107a9af640  libgo/go/image/png/reader_test.go
  02fc2ecfd2154905cb5b591c32c9f7c7  libgo/go/image/png/testdata/benchGray.png
  e53a3cd017e256b059f0c63055182f17  libgo/go/image/png/testdata/benchNRGBA-gradient.png
*************** e4451d4233de3574bd2728193f2c9f24  libgo/
*** 91644,91650 ****
  843aabd1eee9aa042e0e210d6d04b0d2  libgo/go/image/png/testdata/pngsuite/ftp0n3p08.sng
  6207a3c0ebe11ad7aa3c0b859d7194b9  libgo/go/image/png/testdata/pngsuite/ftp1n3p08.png
  5c6ef37bff477455f8dd3db200ce09e2  libgo/go/image/png/testdata/pngsuite/ftp1n3p08.sng
! 80c6e9a22ce2c54c11ad9b8651ef97e6  libgo/go/image/png/writer.go
  dfabe62d5520064adc004f21cc6bf0db  libgo/go/image/png/writer_test.go
  cdc71af61452de075b355596f429cea0  libgo/go/image/testdata/video-001.221212.jpeg
  2448220c1dbd15767fea75277a25725a  libgo/go/image/testdata/video-001.221212.png
--- 98040,98046 ----
  843aabd1eee9aa042e0e210d6d04b0d2  libgo/go/image/png/testdata/pngsuite/ftp0n3p08.sng
  6207a3c0ebe11ad7aa3c0b859d7194b9  libgo/go/image/png/testdata/pngsuite/ftp1n3p08.png
  5c6ef37bff477455f8dd3db200ce09e2  libgo/go/image/png/testdata/pngsuite/ftp1n3p08.sng
! 71450b2df448fd1ccfbfa173bd692b14  libgo/go/image/png/writer.go
  dfabe62d5520064adc004f21cc6bf0db  libgo/go/image/png/writer_test.go
  cdc71af61452de075b355596f429cea0  libgo/go/image/testdata/video-001.221212.jpeg
  2448220c1dbd15767fea75277a25725a  libgo/go/image/testdata/video-001.221212.png
*************** a37c029e52bd96f9d2bc7dfb49555287  libgo/
*** 91681,91808 ****
  1f882287f34692d3d93a088c05b224f2  libgo/go/image/testdata/video-005.gray.q50.2x2.progressive.jpeg
  981c41ba6c5829f203cffb876847fabd  libgo/go/image/testdata/video-005.gray.q50.jpeg
  3c36ce09b1f5861634d848e61e66b8c7  libgo/go/image/testdata/video-005.gray.q50.progressive.jpeg
! c80a82eedbf089afed7d5ec207094c47  libgo/go/image/ycbcr.go
  66d45571901c586c5fead74ece5018a7  libgo/go/image/ycbcr_test.go
  56335170da7d34683f92d648c43b551c  libgo/go/index/suffixarray/example_test.go
! b3af43ed6d8395690d662da170a7d1f0  libgo/go/index/suffixarray/gen.go
  7f7d92cdd7daf1cc56836403b19048bb  libgo/go/index/suffixarray/sais.go
  adecb9131ed5256a866ebce39bbca8cc  libgo/go/index/suffixarray/sais2.go
  b467c33283f1a55c04377e216b195ff3  libgo/go/index/suffixarray/suffixarray.go
  2a7f05341169c7c5a8dd7f78a69da041  libgo/go/index/suffixarray/suffixarray_test.go
  b11555655e664f686e42a17df96bdeef  libgo/go/internal/bytealg/bytealg.c
! 4ce0e8299547a80aea9c42df2c064986  libgo/go/internal/bytealg/bytealg.go
! 50d73d85502c43d48a60e6c3f5bc65b9  libgo/go/internal/bytealg/compare_generic.go
! 5124101a6c62e1b52a085156942dfa29  libgo/go/internal/bytealg/compare_native.go
! ce518b6be094ad03577da8bed16b4db0  libgo/go/internal/bytealg/count_generic.go
! 425bd1420190fdab3be99db13bc791c1  libgo/go/internal/bytealg/count_native.go
  2145d5da05a7099dc860bb0793e9fae4  libgo/go/internal/bytealg/equal_generic.go
  64c2194a10be3a82e8db4becdf1c5c36  libgo/go/internal/bytealg/equal_native.go
  05984539eab7374389d533b62fab5834  libgo/go/internal/bytealg/gccgo.go
! 4bc4e211372e7593dcf26b04e1cd4917  libgo/go/internal/bytealg/index_amd64.go
  8b850df851f320f487b70789d0638c59  libgo/go/internal/bytealg/index_arm64.go
! 182373a1ecfde0b0796163f62123f5a1  libgo/go/internal/bytealg/index_generic.go
! 899a4121dfc1080be6d811e366ea055c  libgo/go/internal/bytealg/index_native.go
  c8c66af1d46d2b7a8041efd120e337fb  libgo/go/internal/bytealg/index_s390x.go
! df4e604f0c71e62a842685437eb2248e  libgo/go/internal/bytealg/indexbyte_generic.go
! e63183a3f65b252a5f09be0990d5a737  libgo/go/internal/bytealg/indexbyte_native.go
! 769b8f1eb8c042ff67f1a2c50ed66de6  libgo/go/internal/cfg/cfg.go
! 385887f0c12f7b54186d887ab742266f  libgo/go/internal/cpu/cpu.go
! bd260454659fd16e51c5099f5835b9b7  libgo/go/internal/cpu/cpu_386.go
! 3ac00a0e4410afd906c8cbd6f6507b1d  libgo/go/internal/cpu/cpu_amd64.go
! 0ea848573797f48450f5659ce12b8e3e  libgo/go/internal/cpu/cpu_amd64p32.go
  5bf64f2add6728649b4b2551e9279e52  libgo/go/internal/cpu/cpu_arm.go
  5c3f11edfc7630cdf5117b153cd88a4b  libgo/go/internal/cpu/cpu_arm64.go
! 7319189aa9183d1861de82426d987138  libgo/go/internal/cpu/cpu_arm64_android.go
! 158440da805d03e534bfab9d8ffa392f  libgo/go/internal/cpu/cpu_arm64_darwin.go
! fb750d8071148c9985ac107179ea133a  libgo/go/internal/cpu/cpu_arm64_freebsd.go
! fa4126a8007e9e9b0633ff49968727d9  libgo/go/internal/cpu/cpu_arm64_hwcap.go
! 1b2b943b46d4218c487a4334d4f7de62  libgo/go/internal/cpu/cpu_arm64_linux.go
! c707eda75ffcfc9e531ca40db446f7fe  libgo/go/internal/cpu/cpu_arm64_other.go
  d74b89702856fbfd5627a1097bdae86a  libgo/go/internal/cpu/cpu_gccgo.c
  cfa3e345725cdccf65fd0df74870bfee  libgo/go/internal/cpu/cpu_mips.go
! 06c3361233b35a835dca8630dee1a2c6  libgo/go/internal/cpu/cpu_mips64x.go
  cfa3e345725cdccf65fd0df74870bfee  libgo/go/internal/cpu/cpu_mipsle.go
! a06547b3c88da70b42718075c4bbb80b  libgo/go/internal/cpu/cpu_no_name.go
  18e14581eea8ccaf1de84db156c49454  libgo/go/internal/cpu/cpu_other.go
! 6101d0d15253e55a71d92c8d23039b2e  libgo/go/internal/cpu/cpu_ppc64x.go
! 4c18ffcedee52d1bbddedd635569a8b3  libgo/go/internal/cpu/cpu_ppc64x_aix.go
! aa0f897fc0d6bdcdfdc6e87ed77c5550  libgo/go/internal/cpu/cpu_ppc64x_linux.go
  844e86e41ff72a5ec95ca1ce9d799585  libgo/go/internal/cpu/cpu_riscv64.go
  ccf0b9c5e70b51716cb9981bc67a5cd6  libgo/go/internal/cpu/cpu_s390x.go
  8a762efe878fed094098c0a7c7d5be8c  libgo/go/internal/cpu/cpu_s390x_test.go
! 47654b9f81a7be82721a54b3465f9f12  libgo/go/internal/cpu/cpu_test.go
  e8d5a968f90a53caed664069c785c177  libgo/go/internal/cpu/cpu_wasm.go
! 9041b4c1a30e8863bfc9ae29c34b3f8c  libgo/go/internal/cpu/cpu_x86.go
! a670507ac0571dcfec9601ce12640961  libgo/go/internal/cpu/cpu_x86_test.go
  f765a2fda3ec7787cce5555c4bae0bdf  libgo/go/internal/cpu/export_test.go
  c02af26ea85b8e6b84589fbbdd64f8c2  libgo/go/internal/execabs/execabs.go
! bcf3befa86d329337f6c5abefc0e401c  libgo/go/internal/execabs/execabs_test.go
  bed4982a037778184d1458880055fdc1  libgo/go/internal/fmtsort/export_test.go
! 8eca65685f31f40d80ac5b56c87205be  libgo/go/internal/fmtsort/sort.go
! be4db4d47005e878d0037e5113d711a7  libgo/go/internal/fmtsort/sort_test.go
! 7ec25de305993812c6cea97b4698278c  libgo/go/internal/goroot/gc.go
! 2da7893142df2acd00e4a02e40987779  libgo/go/internal/goroot/gccgo.go
! 8086a3ce4a371c2ada91d4cca3c65651  libgo/go/internal/goversion/goversion.go
  01f071fdba44f661c678e282b4b86423  libgo/go/internal/lazyregexp/lazyre.go
! 8e4d4c0e32cb9a122240e9182d0d2033  libgo/go/internal/lazytemplate/lazytemplate.go
! 3684d457c29d834d162bc6c54dabba5a  libgo/go/internal/nettrace/nettrace.go
  59c48c26fb5883d16a4258d405180af2  libgo/go/internal/obscuretestdata/obscuretestdata.go
  4d5b4079868a55f90a39e911081221a2  libgo/go/internal/oserror/errors.go
! c2103d2f9cb594f453c1a8ed275a9946  libgo/go/internal/poll/copy_file_range_linux.go
! 344224ef5d918433550680411229d4cb  libgo/go/internal/poll/errno_unix.go
! 09ce7e9dd7e3ddbb02ef8e5022e484f5  libgo/go/internal/poll/errno_windows.go
  ce40fbd4795dc9d6c3f99e9d5272916d  libgo/go/internal/poll/error_linux_test.go
! 6abf852630ab8f8482da952b5926eadf  libgo/go/internal/poll/error_stub_test.go
  5bd53f09db86bc21cfa6624b7b50b225  libgo/go/internal/poll/error_test.go
! 6298dfe843c39d3508506d95a485e783  libgo/go/internal/poll/export_posix_test.go
! ec209188a8bfd11890e98c94a4bcb7f2  libgo/go/internal/poll/export_test.go
  b268c43a787383b30fc7d66ccacff408  libgo/go/internal/poll/export_windows_test.go
! b37d21c6d3a50abd066c81778cc8eee0  libgo/go/internal/poll/fcntl_js.go
! f2c6fad9ee90b573b5fd3798ebb40349  libgo/go/internal/poll/fcntl_libc.go
! 7cca42cee0122e69b6f9603cd28a0f4f  libgo/go/internal/poll/fcntl_syscall.go
! 893a4b606c35aee188853bf4dc06ae67  libgo/go/internal/poll/fd.go
  2047f76830787af95040898be9772cfa  libgo/go/internal/poll/fd_fsync_darwin.go
! 6789b5fdfadee7dd0c256d3f3a8aac55  libgo/go/internal/poll/fd_fsync_posix.go
  f1e70083b1440bed4ad990f346263a02  libgo/go/internal/poll/fd_fsync_windows.go
! 6e6c2602ebea534f5df8de7e9dc0f665  libgo/go/internal/poll/fd_io_plan9.go
  bc5d762a542ed1506735c6f49562a49c  libgo/go/internal/poll/fd_mutex.go
  6b5b823059f30516131664efcd143a82  libgo/go/internal/poll/fd_mutex_test.go
  728e6ae558e3f30964b93caceca90a6d  libgo/go/internal/poll/fd_opendir_darwin.go
  fce1c3235a394a3921fcda95c1c8f569  libgo/go/internal/poll/fd_plan9.go
! d54c6c0ecc111e893ee2a2098ddd2c5a  libgo/go/internal/poll/fd_poll_js.go
! 9c70a2d07c2b06942b2d38e5d6105db2  libgo/go/internal/poll/fd_poll_runtime.go
! 87c024095ae24dc8ad9cd8f616e480df  libgo/go/internal/poll/fd_posix.go
! 53b68571628c77f910929ad374d9108c  libgo/go/internal/poll/fd_posix_test.go
! 740845682bff9a5366ca6a1d3ca92f55  libgo/go/internal/poll/fd_unix.go
! 78eab2e6f99ab266e636ceb7b9b6ee46  libgo/go/internal/poll/fd_windows.go
  6590e98d43fdc0c2593220dfe36d67fd  libgo/go/internal/poll/fd_windows_test.go
! c2638ff2846b2fef2f70790ace2f10f2  libgo/go/internal/poll/fd_writev_darwin.go
! 2a925f236349379318c938c8685ee071  libgo/go/internal/poll/fd_writev_illumos.go
! 6d6afe97611c3127e6e7c5e92a0adabd  libgo/go/internal/poll/fd_writev_unix.go
! 91260376b6439aecd6c09d3b459a64f6  libgo/go/internal/poll/hook_cloexec.go
! 03e18719c64d62fa7a53911815af99ca  libgo/go/internal/poll/hook_unix.go
  f9e203c47c3495141cef11d4c2af02c9  libgo/go/internal/poll/hook_windows.go
! 4e91a2b40d0f2cdd7f66ff9297083917  libgo/go/internal/poll/iovec_illumos.go
! 5a37b41c29dd9e0c3ab43276420ec57e  libgo/go/internal/poll/iovec_unix.go
  5124d2d882958e77d5810767e564b25d  libgo/go/internal/poll/read_test.go
! abf5728578824d91d24b5f0ccf24b71b  libgo/go/internal/poll/sendfile_bsd.go
  5bbe1c37852ee039d791f288ae5b652d  libgo/go/internal/poll/sendfile_glibc.go
! 2dab4218fcdb7f3a8fc3dd30018f5ac8  libgo/go/internal/poll/sendfile_solaris.go
  8028f4b74e5dd9fd00b5b9cf623c0f69  libgo/go/internal/poll/sendfile_windows.go
! 9c62e29e96c099aa70b76fc60e56eecd  libgo/go/internal/poll/sock_cloexec.go
! 8c750ebdada708bdc788b0eda25cdf74  libgo/go/internal/poll/sockopt.go
  03c5e2154fbf3bd10e0b12987e5ef16d  libgo/go/internal/poll/sockopt_linux.go
! b67a976b9f96bd7b74d7ae5b0d8b5ec8  libgo/go/internal/poll/sockopt_unix.go
  a63c6dd4bc5f02088c1dc3158d68bb07  libgo/go/internal/poll/sockopt_windows.go
! b03a6090ea070edc902c2af6a9eb32ae  libgo/go/internal/poll/sockoptip.go
! b44d61f083428332c184bf48c848af86  libgo/go/internal/poll/splice_linux.go
! 126eec79336718067d9463116ff15194  libgo/go/internal/poll/strconv.go
! 5f7ec0d5a948671af6f9178c4e4c68fc  libgo/go/internal/poll/sys_cloexec.go
! 1915b66b670ec70e75a7b27e83ccc999  libgo/go/internal/poll/writev.go
  7d3289a09320b4aacd68e8cd5d63f813  libgo/go/internal/poll/writev_test.go
  62f2042d1fd0940991a4e6138dfbfac7  libgo/go/internal/profile/encode.go
  2742e1a8fd2c10f25cc9e98f2834edfc  libgo/go/internal/profile/filter.go
! f215ab05a44b0b39da0130653d8b6473  libgo/go/internal/profile/legacy_profile.go
  0008dfcfa21cdfe81f7f2cf2fcfd6008  libgo/go/internal/profile/merge.go
  16ec4637d8d50dfdaa5728c13c120a33  libgo/go/internal/profile/profile.go
  b0444ee7eda577cce633330363da86b9  libgo/go/internal/profile/profile_test.go
--- 98077,98258 ----
  1f882287f34692d3d93a088c05b224f2  libgo/go/image/testdata/video-005.gray.q50.2x2.progressive.jpeg
  981c41ba6c5829f203cffb876847fabd  libgo/go/image/testdata/video-005.gray.q50.jpeg
  3c36ce09b1f5861634d848e61e66b8c7  libgo/go/image/testdata/video-005.gray.q50.progressive.jpeg
! 6d99260bbace0b2802f2c0470ab95466  libgo/go/image/ycbcr.go
  66d45571901c586c5fead74ece5018a7  libgo/go/image/ycbcr_test.go
  56335170da7d34683f92d648c43b551c  libgo/go/index/suffixarray/example_test.go
! 69d443e22a9df635e2f13813567bd836  libgo/go/index/suffixarray/gen.go
  7f7d92cdd7daf1cc56836403b19048bb  libgo/go/index/suffixarray/sais.go
  adecb9131ed5256a866ebce39bbca8cc  libgo/go/index/suffixarray/sais2.go
  b467c33283f1a55c04377e216b195ff3  libgo/go/index/suffixarray/suffixarray.go
  2a7f05341169c7c5a8dd7f78a69da041  libgo/go/index/suffixarray/suffixarray_test.go
+ 41d068a3051cf8e15bd4acf12e4588e2  libgo/go/internal/abi/abi.go
+ 2a2a56756bd78668e8a781b424f313ae  libgo/go/internal/buildcfg/cfg.go
+ 3f0bcc7c55615ab744b82314bd75dfbd  libgo/go/internal/buildcfg/cfg_test.go
+ f3042e52ce62216a8411a35c204ca019  libgo/go/internal/buildcfg/exp.go
  b11555655e664f686e42a17df96bdeef  libgo/go/internal/bytealg/bytealg.c
! 0bc73ac3908a9adc7bdd3f326a1663c9  libgo/go/internal/bytealg/bytealg.go
! 11a1be8de36d95642bfa57f3d9929c94  libgo/go/internal/bytealg/compare_generic.go
! a1435d8b16367d2e12fbd64531b8116c  libgo/go/internal/bytealg/compare_native.go
! 63bc4d8553108b8bd08c10e7d1095ac1  libgo/go/internal/bytealg/count_generic.go
! 8d8a0cd6b0e1cf03f71f4a6e6b9dd9b4  libgo/go/internal/bytealg/count_native.go
  2145d5da05a7099dc860bb0793e9fae4  libgo/go/internal/bytealg/equal_generic.go
  64c2194a10be3a82e8db4becdf1c5c36  libgo/go/internal/bytealg/equal_native.go
  05984539eab7374389d533b62fab5834  libgo/go/internal/bytealg/gccgo.go
! 2d69e6e8c2dd9ba76ee5f25103b38358  libgo/go/internal/bytealg/index_amd64.go
  8b850df851f320f487b70789d0638c59  libgo/go/internal/bytealg/index_arm64.go
! d88b2e5a4bee1b4740534f541a347822  libgo/go/internal/bytealg/index_generic.go
! 6e43f357bda4baebd66a4c630e10c497  libgo/go/internal/bytealg/index_native.go
! 620ed41569b1ea6e6e3b4e8854b3ecd2  libgo/go/internal/bytealg/index_ppc64x.go
  c8c66af1d46d2b7a8041efd120e337fb  libgo/go/internal/bytealg/index_s390x.go
! 60a71037c54776bfc8b95adbeeb9f176  libgo/go/internal/bytealg/indexbyte_generic.go
! 41e482a322d3f78ae7d5a999dd2d51f6  libgo/go/internal/bytealg/indexbyte_native.go
! e87a1ab37af2f93c279658b55e882141  libgo/go/internal/cfg/cfg.go
! c696f87e223b9fc5ff59125521081aa0  libgo/go/internal/cpu/cpu.go
  5bf64f2add6728649b4b2551e9279e52  libgo/go/internal/cpu/cpu_arm.go
  5c3f11edfc7630cdf5117b153cd88a4b  libgo/go/internal/cpu/cpu_arm64.go
! 4e5ce60f32de1bbf50113986c89cc9ec  libgo/go/internal/cpu/cpu_arm64_android.go
! fdebac57145748cec4e0cb3b497b8893  libgo/go/internal/cpu/cpu_arm64_darwin.go
! 3908fb6884110f5cf986a177d2ba05eb  libgo/go/internal/cpu/cpu_arm64_freebsd.go
! 68850e313e15690a70f69701f4f4cdfd  libgo/go/internal/cpu/cpu_arm64_hwcap.go
! b07329b2083aa8cd24b3dfadcf384274  libgo/go/internal/cpu/cpu_arm64_linux.go
! e758e644496e3cbdf8e42dedb3bcb2d0  libgo/go/internal/cpu/cpu_arm64_other.go
  d74b89702856fbfd5627a1097bdae86a  libgo/go/internal/cpu/cpu_gccgo.c
  cfa3e345725cdccf65fd0df74870bfee  libgo/go/internal/cpu/cpu_mips.go
! 9ffd0a31596c97018439df8f5488ed3c  libgo/go/internal/cpu/cpu_mips64x.go
  cfa3e345725cdccf65fd0df74870bfee  libgo/go/internal/cpu/cpu_mipsle.go
! 341ee545b3b9de830c35e4179d9bc69b  libgo/go/internal/cpu/cpu_no_name.go
  18e14581eea8ccaf1de84db156c49454  libgo/go/internal/cpu/cpu_other.go
! 63d8fc2e863c3485d5494e9efb4ac1b3  libgo/go/internal/cpu/cpu_ppc64x.go
! 6c11cba1d8d4fd2aea464063503b563a  libgo/go/internal/cpu/cpu_ppc64x_aix.go
! e3e438754660fd89da3eeeb3a9006ce7  libgo/go/internal/cpu/cpu_ppc64x_linux.go
  844e86e41ff72a5ec95ca1ce9d799585  libgo/go/internal/cpu/cpu_riscv64.go
  ccf0b9c5e70b51716cb9981bc67a5cd6  libgo/go/internal/cpu/cpu_s390x.go
  8a762efe878fed094098c0a7c7d5be8c  libgo/go/internal/cpu/cpu_s390x_test.go
! baabe7c0ffc4116371aa248f15548442  libgo/go/internal/cpu/cpu_test.go
  e8d5a968f90a53caed664069c785c177  libgo/go/internal/cpu/cpu_wasm.go
! dc32f60e07f00dad75ea69c4e2a676f5  libgo/go/internal/cpu/cpu_x86.go
! 2da040ec3f41215e6acd4d291725f4b2  libgo/go/internal/cpu/cpu_x86_test.go
  f765a2fda3ec7787cce5555c4bae0bdf  libgo/go/internal/cpu/export_test.go
  c02af26ea85b8e6b84589fbbdd64f8c2  libgo/go/internal/execabs/execabs.go
! cd33429fe134d0cc62b1bc5790ad4674  libgo/go/internal/execabs/execabs_test.go
  bed4982a037778184d1458880055fdc1  libgo/go/internal/fmtsort/export_test.go
! 7851ab59678f11aaec0660c92dba852f  libgo/go/internal/fmtsort/sort.go
! b139942a5099f14a4d543717fb3a34da  libgo/go/internal/fmtsort/sort_test.go
! 38d78df45ce44608f888fdbb6d90d08a  libgo/go/internal/fuzz/counters_supported.go
! 7bba03021256cb8fa7849f234dea6b8a  libgo/go/internal/fuzz/counters_unsupported.go
! 9a76b4582fa7cac52b8d75ad519a5e6f  libgo/go/internal/fuzz/coverage.go
! 489d6d3cb325b3532cc8e773e4cb0553  libgo/go/internal/fuzz/encoding.go
! 9ffdc4a30bc3d5ae50b39f051c8a6032  libgo/go/internal/fuzz/encoding_test.go
! 6ea31b4fbcd4939be50a9f2f84f5eeeb  libgo/go/internal/fuzz/fuzz.go
! 8c81002eb667f5bdbe5b696cbf7b612d  libgo/go/internal/fuzz/mem.go
! 22de3377c02452b82048fa37df8fc0cd  libgo/go/internal/fuzz/minimize.go
! 810d52d2277845a4212c5ba975fb792d  libgo/go/internal/fuzz/minimize_test.go
! 62ace9a5fdb2ea179e1dbdb6582e3691  libgo/go/internal/fuzz/mutator.go
! 004aaaad14d60cadd4da75abf77872ad  libgo/go/internal/fuzz/mutator_test.go
! d3a35f40dc5bb3db1fa5e7abb6581b87  libgo/go/internal/fuzz/mutators_byteslice.go
! 9f11291c22030a5359a9864e7c4e537d  libgo/go/internal/fuzz/mutators_byteslice_test.go
! 74bcdb48a49e5de62d43059fee014b11  libgo/go/internal/fuzz/pcg.go
! b845c549fe2cc86213119527ab8d3df8  libgo/go/internal/fuzz/queue.go
! 3038fefcb4d3a973f036c595746491c5  libgo/go/internal/fuzz/queue_test.go
! 55b88a28f745201b0c1c8c83af463e22  libgo/go/internal/fuzz/sys_posix.go
! e46c9bbcd1ebdaab64c13b5478fd4bc9  libgo/go/internal/fuzz/sys_unimplemented.go
! 31b90d9286b5c333d0059cd052bc94f6  libgo/go/internal/fuzz/sys_windows.go
! 523204fd19e5ca78c277bb1cd5083e59  libgo/go/internal/fuzz/trace.go
! 35e6dc9849a2cdcd2d72cc59bc23138c  libgo/go/internal/fuzz/worker.go
! e170c4bbcc706ff39ce205d73fc80a22  libgo/go/internal/fuzz/worker_test.go
! 451c069c9f2d3503f86f1dfbe665fd20  libgo/go/internal/goarch/goarch.go
! 7c7ec4fe64d8ddd365dc3501d9c8e23b  libgo/go/internal/godebug/godebug.go
! edce4c57c6cbafdf964bb7cacf9de4a6  libgo/go/internal/godebug/godebug_test.go
! 9f79c97ffbb20dcccac3d52d08874353  libgo/go/internal/goexperiment/exp_fieldtrack_off.go
! 6f7ecbd4beb3fa0d70ee26cd65c62aab  libgo/go/internal/goexperiment/exp_fieldtrack_on.go
! 39ecd1fe2fbb5f1887e4986865bce979  libgo/go/internal/goexperiment/exp_heapminimum512kib_off.go
! 65a926f7ff861b3cbfaea36b0e16337f  libgo/go/internal/goexperiment/exp_heapminimum512kib_on.go
! 742dd34932743b91545ee053f814b686  libgo/go/internal/goexperiment/exp_pacerredesign_off.go
! 0c36ae25d435df85a5977fd11a735b5b  libgo/go/internal/goexperiment/exp_pacerredesign_on.go
! 6367af6847ae69070840b7fdc6dd0916  libgo/go/internal/goexperiment/exp_preemptibleloops_off.go
! ef0b209021f379427065efbd0cf924a1  libgo/go/internal/goexperiment/exp_preemptibleloops_on.go
! 7e283d44a4a5dcc5877c506e60465941  libgo/go/internal/goexperiment/exp_regabiargs_off.go
! 3f558740d8ffdb7d5958d52e588ff35c  libgo/go/internal/goexperiment/exp_regabiargs_on.go
! 24bbfcb28fc0aba16d8a479cb7926f62  libgo/go/internal/goexperiment/exp_regabireflect_off.go
! d38d6ace8e7aa9e5eb90f46cc6d635ad  libgo/go/internal/goexperiment/exp_regabireflect_on.go
! a792baa9902e3944be25f7ea9991fad6  libgo/go/internal/goexperiment/exp_regabiwrappers_off.go
! 60d26d9dcac58bb3fe1170bced100169  libgo/go/internal/goexperiment/exp_regabiwrappers_on.go
! ddb09d2b7a34fae8e3bfa0efa4de2f71  libgo/go/internal/goexperiment/exp_staticlockranking_off.go
! 63a8e870cae61fcbc6ea30ec5a717df2  libgo/go/internal/goexperiment/exp_staticlockranking_on.go
! 749b9c06fbf00aa3964e9ddabd2d21b2  libgo/go/internal/goexperiment/exp_unified_off.go
! b04a8adc6d8b406e91d2f2fb4dd6374d  libgo/go/internal/goexperiment/exp_unified_on.go
! c6d12fa4d3c5f39569bc58c03de9e301  libgo/go/internal/goexperiment/flags.go
! b02dc32063eb64ab43d638cb6bb972f1  libgo/go/internal/goexperiment/mkconsts.go
! 8a7e775bf30e8388d3796ac11183fcc4  libgo/go/internal/goos/goos.go
! 145e62e0419b6cc83ed14e1161f8448c  libgo/go/internal/goroot/gc.go
! 5808e3463cdbc432cfa8412c879e14cb  libgo/go/internal/goroot/gccgo.go
! 8b033bf05f46fb0b9fbeac51728c87f7  libgo/go/internal/goversion/goversion.go
! 2e01a84211410f852d7210f572fbf57e  libgo/go/internal/intern/intern.go
! bfaae36c4f66a9a632378ac81bbd938b  libgo/go/internal/intern/intern_test.go
! e81cb0370d083934212d3deda092505b  libgo/go/internal/itoa/itoa.go
! 1b0d113d354c9c7c2d91296921aa8a18  libgo/go/internal/itoa/itoa_test.go
  01f071fdba44f661c678e282b4b86423  libgo/go/internal/lazyregexp/lazyre.go
! c103ed791d7f858dca9206bec1e71d3e  libgo/go/internal/lazytemplate/lazytemplate.go
! 6e9320bc20bb9165967b6576bb04842b  libgo/go/internal/nettrace/nettrace.go
  59c48c26fb5883d16a4258d405180af2  libgo/go/internal/obscuretestdata/obscuretestdata.go
  4d5b4079868a55f90a39e911081221a2  libgo/go/internal/oserror/errors.go
! c65a815b05ca2f519852355ca0004291  libgo/go/internal/poll/copy_file_range_linux.go
! 54dcbd5d54f1b97df4d18c1aa2d32308  libgo/go/internal/poll/errno_unix.go
! 57f851c3a7ff6359407f309d60fd6e2d  libgo/go/internal/poll/errno_windows.go
  ce40fbd4795dc9d6c3f99e9d5272916d  libgo/go/internal/poll/error_linux_test.go
! d2e5613ac5deb265a619424aee6a3c08  libgo/go/internal/poll/error_stub_test.go
  5bd53f09db86bc21cfa6624b7b50b225  libgo/go/internal/poll/error_test.go
! c0f8549eec64fe21187a62d952e259a7  libgo/go/internal/poll/export_linux_test.go
! ef29a798273372f7a58455a145e04825  libgo/go/internal/poll/export_posix_test.go
! 2166cb331af76aa86d26f2de9aa6526c  libgo/go/internal/poll/export_test.go
  b268c43a787383b30fc7d66ccacff408  libgo/go/internal/poll/export_windows_test.go
! 4fdb5edf0df08ebb4a2837b32d96d83d  libgo/go/internal/poll/fcntl_js.go
! 0394a6bedc2547b3d4af73e9b2458dcd  libgo/go/internal/poll/fcntl_libc.go
! 753d2514c1715c3c6d6c8566c27a6b92  libgo/go/internal/poll/fcntl_syscall.go
! 89919349f2c422da819d39420ec319b7  libgo/go/internal/poll/fd.go
  2047f76830787af95040898be9772cfa  libgo/go/internal/poll/fd_fsync_darwin.go
! 3d65f928659627eacdec61f9613277fc  libgo/go/internal/poll/fd_fsync_posix.go
  f1e70083b1440bed4ad990f346263a02  libgo/go/internal/poll/fd_fsync_windows.go
! d9baf7f2b4c9244a9ff6069b192d8e19  libgo/go/internal/poll/fd_io_plan9.go
  bc5d762a542ed1506735c6f49562a49c  libgo/go/internal/poll/fd_mutex.go
  6b5b823059f30516131664efcd143a82  libgo/go/internal/poll/fd_mutex_test.go
  728e6ae558e3f30964b93caceca90a6d  libgo/go/internal/poll/fd_opendir_darwin.go
  fce1c3235a394a3921fcda95c1c8f569  libgo/go/internal/poll/fd_plan9.go
! cf22be3deda6efaa62654ecb89b7602f  libgo/go/internal/poll/fd_poll_js.go
! 79a22a1d6abed0ee71dc06d05b414cbd  libgo/go/internal/poll/fd_poll_runtime.go
! 40c9c0df08dc042422f2be3e64cd3541  libgo/go/internal/poll/fd_posix.go
! c94e137c97c19abd705dd4930cf09e13  libgo/go/internal/poll/fd_posix_test.go
! e16555d51c53ebeccfd09ce3974334d6  libgo/go/internal/poll/fd_unix.go
! ab8183fc45ec66a570ca4915ee28b1e8  libgo/go/internal/poll/fd_windows.go
  6590e98d43fdc0c2593220dfe36d67fd  libgo/go/internal/poll/fd_windows_test.go
! 584dff51009190f2e7d260763525543e  libgo/go/internal/poll/fd_writev_darwin.go
! e26e26011dcf1ca9a1a3498c18a04c1f  libgo/go/internal/poll/fd_writev_illumos.go
! c116b08ad260732b196f2ebf5b3c20a5  libgo/go/internal/poll/fd_writev_unix.go
! d4857aeb62a1404f5b14be302376f7ce  libgo/go/internal/poll/hook_cloexec.go
! 4da19053f5ad44cb0bd7ec4f201046e7  libgo/go/internal/poll/hook_unix.go
  f9e203c47c3495141cef11d4c2af02c9  libgo/go/internal/poll/hook_windows.go
! 7c6acac97e2b2b32b7f55921d1afa89b  libgo/go/internal/poll/iovec_illumos.go
! cb8498d28e783f150a2aab35c5d995a4  libgo/go/internal/poll/iovec_unix.go
  5124d2d882958e77d5810767e564b25d  libgo/go/internal/poll/read_test.go
! e588a999436c0a61aa49e55841fcb153  libgo/go/internal/poll/sendfile_bsd.go
  5bbe1c37852ee039d791f288ae5b652d  libgo/go/internal/poll/sendfile_glibc.go
! 7983056ae9bd6ae86e132690a4af6dac  libgo/go/internal/poll/sendfile_solaris.go
  8028f4b74e5dd9fd00b5b9cf623c0f69  libgo/go/internal/poll/sendfile_windows.go
! 22810980aed9211c63358489b831ac51  libgo/go/internal/poll/sock_cloexec.go
! b97f61b674175b31f5aa65192e66d1b5  libgo/go/internal/poll/sockopt.go
  03c5e2154fbf3bd10e0b12987e5ef16d  libgo/go/internal/poll/sockopt_linux.go
! 498fb9b12864cd91160970cd054a6336  libgo/go/internal/poll/sockopt_unix.go
  a63c6dd4bc5f02088c1dc3158d68bb07  libgo/go/internal/poll/sockopt_windows.go
! ed7378d816db70dfbac8d58753eae925  libgo/go/internal/poll/sockoptip.go
! 2e7f014f0664ff54b0a87cb02b503df1  libgo/go/internal/poll/splice_linux.go
! 224b283bb3f016b9bfe1a1d234e3ac59  libgo/go/internal/poll/splice_linux_test.go
! 41a8d931148f34243d3996b07b08282b  libgo/go/internal/poll/strconv.go
! 405de65db67d1d2be4b8844a43077104  libgo/go/internal/poll/sys_cloexec.go
! b6b45a5bebe997567ac765156b8a5d2b  libgo/go/internal/poll/writev.go
  7d3289a09320b4aacd68e8cd5d63f813  libgo/go/internal/poll/writev_test.go
  62f2042d1fd0940991a4e6138dfbfac7  libgo/go/internal/profile/encode.go
  2742e1a8fd2c10f25cc9e98f2834edfc  libgo/go/internal/profile/filter.go
! 07749499ab286c7f6a38679b11748d57  libgo/go/internal/profile/legacy_profile.go
  0008dfcfa21cdfe81f7f2cf2fcfd6008  libgo/go/internal/profile/merge.go
  16ec4637d8d50dfdaa5728c13c120a33  libgo/go/internal/profile/profile.go
  b0444ee7eda577cce633330363da86b9  libgo/go/internal/profile/profile_test.go
*************** b09e36c05434f8c71095dd34193dd6dc  libgo/
*** 91810,91832 ****
  d434ed2afa9b019dd066da34dd384e7f  libgo/go/internal/profile/proto_test.go
  d3bec38805b7716ed269d85f46e818b5  libgo/go/internal/profile/prune.go
  4d0a5052a9c31a154e29aae1181fe6b4  libgo/go/internal/race/doc.go
! 3334c451d82b93847b8ba2669beb36a8  libgo/go/internal/race/norace.go
! 132fd81e2b9c683c70d9feb34fc9b1a0  libgo/go/internal/race/race.go
! 19c92d9fe876b7488bf6b387ae187215  libgo/go/internal/reflectlite/all_test.go
  5ba573755b0ee07d578396e1eed8d6c5  libgo/go/internal/reflectlite/eqtype.go
  8ae87ca0238c38aa85a1d125b5b7da21  libgo/go/internal/reflectlite/eqtype_aix_gccgo.go
! cebae82d16a55ef2b10d5374a1f95b68  libgo/go/internal/reflectlite/export_test.go
  c77a92a5887deb9be2c3b85e04ddb104  libgo/go/internal/reflectlite/reflect_mirror_test.go
! 0f915757131d22a3ee186bd8335b7ff0  libgo/go/internal/reflectlite/set_test.go
! 0b802b0d2d1e24e370de50824c9ea866  libgo/go/internal/reflectlite/swapper.go
! ecb3ce6e9174c6d808c87ff8e6fefdb9  libgo/go/internal/reflectlite/tostring_test.go
! e258dd4906c9875ff2ff0cc68a13885d  libgo/go/internal/reflectlite/type.go
! 47d943bddb2fd81cd6c27dd4a7be8841  libgo/go/internal/reflectlite/value.go
! 1313f76918c28d0331464947516bf946  libgo/go/internal/singleflight/singleflight.go
! bf16bc5e91196cda98289113290abbe2  libgo/go/internal/singleflight/singleflight_test.go
! 93a4d7f1f28004592f6c56b56b1c851f  libgo/go/internal/syscall/execenv/execenv_default.go
! 7f611c1d6fb25ba59cbe4906930d51ff  libgo/go/internal/syscall/execenv/execenv_windows.go
! e58e02c7666b00717e1d143e704a7df1  libgo/go/internal/syscall/unix/at.go
  70edfe76d4ae8e6e7db23e89415a4cfa  libgo/go/internal/syscall/unix/at_aix.go
  9f5de450f2e892494c8afc527e054f31  libgo/go/internal/syscall/unix/at_freebsd.go
  0fe5eebf88a68c37bd2670eb39540252  libgo/go/internal/syscall/unix/at_largefile.go
--- 98260,98282 ----
  d434ed2afa9b019dd066da34dd384e7f  libgo/go/internal/profile/proto_test.go
  d3bec38805b7716ed269d85f46e818b5  libgo/go/internal/profile/prune.go
  4d0a5052a9c31a154e29aae1181fe6b4  libgo/go/internal/race/doc.go
! 4e973cce17d749251fe67e994d54a134  libgo/go/internal/race/norace.go
! 8a3d15c2d098f58cee0bdcec6a1d2b2b  libgo/go/internal/race/race.go
! 59000ab3c1799575303588c06acedce6  libgo/go/internal/reflectlite/all_test.go
  5ba573755b0ee07d578396e1eed8d6c5  libgo/go/internal/reflectlite/eqtype.go
  8ae87ca0238c38aa85a1d125b5b7da21  libgo/go/internal/reflectlite/eqtype_aix_gccgo.go
! 04ba6d691b46af7fa23ca26851cdc558  libgo/go/internal/reflectlite/export_test.go
  c77a92a5887deb9be2c3b85e04ddb104  libgo/go/internal/reflectlite/reflect_mirror_test.go
! 6ad0be15ae3106eadc48424985c4f837  libgo/go/internal/reflectlite/set_test.go
! b4dab995eb31cbfab9efcdc118eb38a4  libgo/go/internal/reflectlite/swapper.go
! 8d1bdd82930955beb2d6a9fc6581fd40  libgo/go/internal/reflectlite/tostring_test.go
! 559e5b549c5a8ae02c21eab6c66a6c86  libgo/go/internal/reflectlite/type.go
! 5f16bf51ac570cb91a2561addf652da6  libgo/go/internal/reflectlite/value.go
! e9d625952215779d90f1107646c07364  libgo/go/internal/singleflight/singleflight.go
! 185a829ad0e6e226cf643bda21ad8eea  libgo/go/internal/singleflight/singleflight_test.go
! 98dbf4e01c144c714b93e4f17f9d815b  libgo/go/internal/syscall/execenv/execenv_default.go
! 23c9a9944079473168fc48dc1d05c3bb  libgo/go/internal/syscall/execenv/execenv_windows.go
! bcdb07f2366e857585a95fd3bed78f6b  libgo/go/internal/syscall/unix/at.go
  70edfe76d4ae8e6e7db23e89415a4cfa  libgo/go/internal/syscall/unix/at_aix.go
  9f5de450f2e892494c8afc527e054f31  libgo/go/internal/syscall/unix/at_freebsd.go
  0fe5eebf88a68c37bd2670eb39540252  libgo/go/internal/syscall/unix/at_largefile.go
*************** f5810b9fbd18c36d1398cc96f407c689  libgo/
*** 91841,91899 ****
  5f40b47e7c2d0ea70816ee5e3dff1253  libgo/go/internal/syscall/unix/copy_file_range_linux.go
  ad17fd7c7a01712ad2add81147c009c2  libgo/go/internal/syscall/unix/dummy.go
  14cedfa3a429812400e1fecdca4a87ee  libgo/go/internal/syscall/unix/getentropy_openbsd.go
! fcb24324edaa58254a9fc1038122e0f0  libgo/go/internal/syscall/unix/getrandom_freebsd.go
! 78bc141cbd60fb390424d6451a8eda84  libgo/go/internal/syscall/unix/getrandom_linux.go
! dc8031c307652bb718e60a3b304242ba  libgo/go/internal/syscall/unix/ioctl_aix.go
! 4718738e0210d678d83a341bfee72886  libgo/go/internal/syscall/unix/nonblocking.go
! def73170c0c8ef7205ec429a96d9accf  libgo/go/internal/syscall/unix/nonblocking_js.go
! 5db6fc4b8c14c51d7f670bdc67d79590  libgo/go/internal/syscall/unix/nonblocking_libc.go
  6c778fb7caaa01ec917bbd5903ad235c  libgo/go/internal/syscall/unix/sysnum_linux_386.go
  6d9eee7c2bc1039f94363f74ab36df45  libgo/go/internal/syscall/unix/sysnum_linux_alpha.go
  31d102a1e964ff235f5e5b71d2973256  libgo/go/internal/syscall/unix/sysnum_linux_amd64.go
  8818766790a8cd5fa7611ebe8cfbeae4  libgo/go/internal/syscall/unix/sysnum_linux_amd64p32.go
  da6cfdc50392a3492ab214b2c0ae9dbb  libgo/go/internal/syscall/unix/sysnum_linux_arm.go
! a7ef1a1d13f32c2a5242b0046b248f1b  libgo/go/internal/syscall/unix/sysnum_linux_generic.go
  5c1ded3244f3105658389affd3bee07f  libgo/go/internal/syscall/unix/sysnum_linux_ia64.go
  59e8c36b0e300cda73dfb1c5ecc0d900  libgo/go/internal/syscall/unix/sysnum_linux_m68k.go
  ad622a655de7f37ffba483821d6fd8b7  libgo/go/internal/syscall/unix/sysnum_linux_mips64p32x.go
! f44c983bf379887db04ae937d06911e7  libgo/go/internal/syscall/unix/sysnum_linux_mips64x.go
! 9b46730feb1b6de73f0aa1eb1a6cf8fc  libgo/go/internal/syscall/unix/sysnum_linux_mipsx.go
! db3fb089a4f8762d9acb7b1b57e0b680  libgo/go/internal/syscall/unix/sysnum_linux_ppc64x.go
  58d81d5dcd2792550a7cb6b0c73b5e44  libgo/go/internal/syscall/unix/sysnum_linux_s390.go
  58d81d5dcd2792550a7cb6b0c73b5e44  libgo/go/internal/syscall/unix/sysnum_linux_s390x.go
  6a05117de661d9ff7cb1a6bda4c4c8f4  libgo/go/internal/syscall/unix/sysnum_linux_shx.go
  6d90d9cd636bf0236864a33aa04a750d  libgo/go/internal/syscall/unix/sysnum_linux_sparcx.go
! 85ccf208033b5cd98f9423010ffeb3de  libgo/go/internal/syscall/windows/exec_windows_test.go
! b59960035e16893423bb1669aca98a14  libgo/go/internal/syscall/windows/mksyscall.go
  ccbb2330dfe78c312331a30db624eb3e  libgo/go/internal/syscall/windows/psapi_windows.go
! 16b69449cf06972cee015e61b6af51e5  libgo/go/internal/syscall/windows/registry/export_test.go
! c533112a99dfabffcf8cc2b3e1e9ff68  libgo/go/internal/syscall/windows/registry/key.go
! c3dee09652c0affeb1fa7eb7daf7aaa7  libgo/go/internal/syscall/windows/registry/mksyscall.go
! 15758ab73df1aab1fb79115ddd26dffc  libgo/go/internal/syscall/windows/registry/registry_test.go
! 129139bd05e6e8f3fedb25800f917751  libgo/go/internal/syscall/windows/registry/syscall.go
! 32ff14cc938d267a8175e6c4566e3979  libgo/go/internal/syscall/windows/registry/value.go
  7953c5599b6a4611ab9fbb86c515446c  libgo/go/internal/syscall/windows/registry/zsyscall_windows.go
  74bb4a567a76df3b27ea63a509019d4c  libgo/go/internal/syscall/windows/reparse_windows.go
  4c0205bc5d9f38bbd817631131b7161f  libgo/go/internal/syscall/windows/security_windows.go
  03a74d8777dc4356f59e0d05c8b508b2  libgo/go/internal/syscall/windows/symlink_windows.go
  443f9b947b590bd3cc20ea1a612496fc  libgo/go/internal/syscall/windows/syscall_windows.go
! f6c3625a5621c028d79dad266af198d7  libgo/go/internal/syscall/windows/sysdll/sysdll.go
  fd2a36db6ad279979992f53547273c80  libgo/go/internal/syscall/windows/zsyscall_windows.go
  b1a9e78745c0e4b4f3dd09eaef29bc14  libgo/go/internal/sysinfo/sysinfo.go
! 040e5bfa2bcfb18e75f9ae288152c189  libgo/go/internal/testenv/testenv.go
! d12588db1f13411a3196285507549640  libgo/go/internal/testenv/testenv_cgo.go
! c482a74cfa5ffe5dd986afa7b54bbb82  libgo/go/internal/testenv/testenv_notwin.go
  8ec4ccfba33625e9e9cc36fd38aa73d1  libgo/go/internal/testenv/testenv_windows.go
  dadc0d83af748ffe1e098ac2729a33cc  libgo/go/internal/testlog/exit.go
  f4df4d86b40e7880ca5dad3a8c8fc2d0  libgo/go/internal/testlog/log.go
! cec6ea83cbf8865804722b3cd08b4001  libgo/go/internal/trace/gc.go
  077f7681ed780a66bb674fa0c57c0b35  libgo/go/internal/trace/gc_test.go
  8280f1704ca9600a9db8cf3140260c88  libgo/go/internal/trace/goroutines.go
  5394d35cbaa3168a9ad8264b3e484967  libgo/go/internal/trace/mkcanned.bash
  f63a46b914ffaaf48c3e3a8c508f1398  libgo/go/internal/trace/mud.go
  7b075cec88ab8619376b4c74eacce221  libgo/go/internal/trace/mud_test.go
  010cb5f562f5f4b8dae10096785ec8bb  libgo/go/internal/trace/order.go
! c049cf26af8d17724a0fc3b3692fafe2  libgo/go/internal/trace/parser.go
  9319343d0db89b675ccfc90301527c38  libgo/go/internal/trace/parser_test.go
  2baf1b8be54952bd774c75e378e25179  libgo/go/internal/trace/testdata/http_1_10_good
  5f05df28b789b47c6a0c15c08e8af815  libgo/go/internal/trace/testdata/http_1_11_good
--- 98291,98357 ----
  5f40b47e7c2d0ea70816ee5e3dff1253  libgo/go/internal/syscall/unix/copy_file_range_linux.go
  ad17fd7c7a01712ad2add81147c009c2  libgo/go/internal/syscall/unix/dummy.go
  14cedfa3a429812400e1fecdca4a87ee  libgo/go/internal/syscall/unix/getentropy_openbsd.go
! bc64593772c7336757ac37a547890230  libgo/go/internal/syscall/unix/getrandom.go
! dbecf9e0fd3c8b7798813826f1741c3f  libgo/go/internal/syscall/unix/getrandom_dragonfly.go
! 7c84dfac585cc0c2c3772dff5fe98e24  libgo/go/internal/syscall/unix/getrandom_freebsd.go
! b7497f5915e0ce3cd162aeaedaf99eeb  libgo/go/internal/syscall/unix/getrandom_linux.go
! b08f77d1faada0a97a7a71458a9abb5b  libgo/go/internal/syscall/unix/getrandom_solaris.go
! 677d6c4339a64e8e88c63b0d69f0ec54  libgo/go/internal/syscall/unix/ioctl_aix.go
! e80db09ca0df4c10aee08891da4c14ca  libgo/go/internal/syscall/unix/net.go
! 322e30bd28ab1d1b639b66013c68feae  libgo/go/internal/syscall/unix/net_js.go
! 78e163b1ca63278e9ef415b0f702ea6a  libgo/go/internal/syscall/unix/nonblocking.go
! 9e42bcd3078381448d7f6a70f219d77c  libgo/go/internal/syscall/unix/nonblocking_js.go
! 57abb56f0e4b42b0b2eac3962e6378cb  libgo/go/internal/syscall/unix/nonblocking_libc.go
  6c778fb7caaa01ec917bbd5903ad235c  libgo/go/internal/syscall/unix/sysnum_linux_386.go
  6d9eee7c2bc1039f94363f74ab36df45  libgo/go/internal/syscall/unix/sysnum_linux_alpha.go
  31d102a1e964ff235f5e5b71d2973256  libgo/go/internal/syscall/unix/sysnum_linux_amd64.go
  8818766790a8cd5fa7611ebe8cfbeae4  libgo/go/internal/syscall/unix/sysnum_linux_amd64p32.go
  da6cfdc50392a3492ab214b2c0ae9dbb  libgo/go/internal/syscall/unix/sysnum_linux_arm.go
! 23a26225ee84704c1cf4c09c8cc50f38  libgo/go/internal/syscall/unix/sysnum_linux_generic.go
  5c1ded3244f3105658389affd3bee07f  libgo/go/internal/syscall/unix/sysnum_linux_ia64.go
  59e8c36b0e300cda73dfb1c5ecc0d900  libgo/go/internal/syscall/unix/sysnum_linux_m68k.go
  ad622a655de7f37ffba483821d6fd8b7  libgo/go/internal/syscall/unix/sysnum_linux_mips64p32x.go
! 1bd2c9b6e44889a1a03a40cee9fb3664  libgo/go/internal/syscall/unix/sysnum_linux_mips64x.go
! 91cd578d20c7db66ef968050252f9cd5  libgo/go/internal/syscall/unix/sysnum_linux_mipsx.go
! 711b6209456ee006f83c77d5d8cc5c27  libgo/go/internal/syscall/unix/sysnum_linux_ppc64x.go
  58d81d5dcd2792550a7cb6b0c73b5e44  libgo/go/internal/syscall/unix/sysnum_linux_s390.go
  58d81d5dcd2792550a7cb6b0c73b5e44  libgo/go/internal/syscall/unix/sysnum_linux_s390x.go
  6a05117de661d9ff7cb1a6bda4c4c8f4  libgo/go/internal/syscall/unix/sysnum_linux_shx.go
  6d90d9cd636bf0236864a33aa04a750d  libgo/go/internal/syscall/unix/sysnum_linux_sparcx.go
! 928188366078f51805b51071deb22f16  libgo/go/internal/syscall/windows/exec_windows_test.go
! 02f4a13b7c336bf7e60ee57caec79b4a  libgo/go/internal/syscall/windows/mksyscall.go
! a607b6ea75699ba90c63084e70de33aa  libgo/go/internal/syscall/windows/net_windows.go
  ccbb2330dfe78c312331a30db624eb3e  libgo/go/internal/syscall/windows/psapi_windows.go
! 0a385a29c8fb3105a08d79130fc20c72  libgo/go/internal/syscall/windows/registry/export_test.go
! 1a6d374e0f615d168970cd802412984b  libgo/go/internal/syscall/windows/registry/key.go
! 73065e240ffb46f27b55eb159c588ce4  libgo/go/internal/syscall/windows/registry/mksyscall.go
! f825f632a21522b286847fcdae61bca4  libgo/go/internal/syscall/windows/registry/registry_test.go
! 7d0e7c122a230055c87141577b7b08dc  libgo/go/internal/syscall/windows/registry/syscall.go
! 84e123d5df0420e4e37b591fdba12b26  libgo/go/internal/syscall/windows/registry/value.go
  7953c5599b6a4611ab9fbb86c515446c  libgo/go/internal/syscall/windows/registry/zsyscall_windows.go
  74bb4a567a76df3b27ea63a509019d4c  libgo/go/internal/syscall/windows/reparse_windows.go
  4c0205bc5d9f38bbd817631131b7161f  libgo/go/internal/syscall/windows/security_windows.go
  03a74d8777dc4356f59e0d05c8b508b2  libgo/go/internal/syscall/windows/symlink_windows.go
  443f9b947b590bd3cc20ea1a612496fc  libgo/go/internal/syscall/windows/syscall_windows.go
! 71f0fdbcfe756824146a67b5be9586b6  libgo/go/internal/syscall/windows/sysdll/sysdll.go
  fd2a36db6ad279979992f53547273c80  libgo/go/internal/syscall/windows/zsyscall_windows.go
  b1a9e78745c0e4b4f3dd09eaef29bc14  libgo/go/internal/sysinfo/sysinfo.go
! 9d2a5f9c908b03a7e707bf2edf5e261b  libgo/go/internal/testenv/testenv.go
! c6f656730033754c15ad10ca2da69c44  libgo/go/internal/testenv/testenv_cgo.go
! 8335231a47707b1b9bbee58ed2add678  libgo/go/internal/testenv/testenv_notunix.go
! de2885b3e2d88a611a2fca27fdae9d62  libgo/go/internal/testenv/testenv_notwin.go
! 6f8021930bc47ad873b9657a104e98bc  libgo/go/internal/testenv/testenv_unix.go
  8ec4ccfba33625e9e9cc36fd38aa73d1  libgo/go/internal/testenv/testenv_windows.go
  dadc0d83af748ffe1e098ac2729a33cc  libgo/go/internal/testlog/exit.go
  f4df4d86b40e7880ca5dad3a8c8fc2d0  libgo/go/internal/testlog/log.go
! fe9398c65cf20ad609ffcbb1c57ac9cb  libgo/go/internal/trace/gc.go
  077f7681ed780a66bb674fa0c57c0b35  libgo/go/internal/trace/gc_test.go
  8280f1704ca9600a9db8cf3140260c88  libgo/go/internal/trace/goroutines.go
  5394d35cbaa3168a9ad8264b3e484967  libgo/go/internal/trace/mkcanned.bash
  f63a46b914ffaaf48c3e3a8c508f1398  libgo/go/internal/trace/mud.go
  7b075cec88ab8619376b4c74eacce221  libgo/go/internal/trace/mud_test.go
  010cb5f562f5f4b8dae10096785ec8bb  libgo/go/internal/trace/order.go
! 2fe52b250d5cd334f2211745fe2e1efe  libgo/go/internal/trace/parser.go
  9319343d0db89b675ccfc90301527c38  libgo/go/internal/trace/parser_test.go
  2baf1b8be54952bd774c75e378e25179  libgo/go/internal/trace/testdata/http_1_10_good
  5f05df28b789b47c6a0c15c08e8af815  libgo/go/internal/trace/testdata/http_1_11_good
*************** ff0eb1ecdac489ead4abe06c4ef72597  libgo/
*** 91914,91920 ****
  c86d327cba4954b40469735b6bea0d31  libgo/go/internal/trace/testdata/user_task_span_1_11_good
  6895874f4c24f8bd7c9889bfadb3c8ee  libgo/go/internal/trace/writer.go
  37acb645035047f980d398e1e38e1430  libgo/go/internal/unsafeheader/unsafeheader.go
! f4ef2585d4a7de15a0494c61809b703d  libgo/go/internal/unsafeheader/unsafeheader_test.go
  5f2c24c4397b3632946e74c97305fd3d  libgo/go/internal/xcoff/ar.go
  6d80832c8c42e4312d76da61b90ff416  libgo/go/internal/xcoff/ar_test.go
  dc040cb1d1f707a07a19399a3a2795eb  libgo/go/internal/xcoff/file.go
--- 98372,98378 ----
  c86d327cba4954b40469735b6bea0d31  libgo/go/internal/trace/testdata/user_task_span_1_11_good
  6895874f4c24f8bd7c9889bfadb3c8ee  libgo/go/internal/trace/writer.go
  37acb645035047f980d398e1e38e1430  libgo/go/internal/unsafeheader/unsafeheader.go
! 0a4b1d1b63d682deb603742a04a812a7  libgo/go/internal/unsafeheader/unsafeheader_test.go
  5f2c24c4397b3632946e74c97305fd3d  libgo/go/internal/xcoff/ar.go
  6d80832c8c42e4312d76da61b90ff416  libgo/go/internal/xcoff/ar_test.go
  dc040cb1d1f707a07a19399a3a2795eb  libgo/go/internal/xcoff/file.go
*************** d141fe4ce073e954a739c2e351360bd7  libgo/
*** 91927,92036 ****
  8e157c18afb0e5f0344a6f0997267ac2  libgo/go/internal/xcoff/testdata/printbye.c
  53f217ba5dd53217e5e2539808fac481  libgo/go/internal/xcoff/testdata/printhello.c
  3eb585d550d13a2f892b31bb10624203  libgo/go/internal/xcoff/xcoff.go
! 5438db9816934f4485c7bd2aaf2b1dc2  libgo/go/io/example_test.go
  70dfd01084b40cc343dddb71b47c4647  libgo/go/io/export_test.go
! 8b052b24f728c838732f2f6f9be8b8eb  libgo/go/io/fs/fs.go
  a7e5a796a7c6a75a4773e2be1341300e  libgo/go/io/fs/fs_test.go
  baa15e6c3dc261539a75a51eef0e70df  libgo/go/io/fs/glob.go
  9fd5ac01209081acb82b66d7203f399d  libgo/go/io/fs/glob_test.go
! bb336e507ad2226047171339c0c564f2  libgo/go/io/fs/readdir.go
! 87cbf2c7df560f443090ff8b01a91b7b  libgo/go/io/fs/readdir_test.go
! 9bed2635cbb2e4d8e4a76e3eafc8b7e3  libgo/go/io/fs/readfile.go
  a2e5e119811014f0282d37066d8434ed  libgo/go/io/fs/readfile_test.go
  7841564e890598962e48154823e51678  libgo/go/io/fs/stat.go
  d6e77cc5f64cb615decf65139dcf07e4  libgo/go/io/fs/stat_test.go
! aa7cef1c33395b5493295ad393460017  libgo/go/io/fs/sub.go
  42d836ccd378d7a4ab8c40ec4807f6f0  libgo/go/io/fs/sub_test.go
  00598403a89c3c1139fa282b6578bb95  libgo/go/io/fs/walk.go
! eaac303672e2ec316cd24921b3c6dab7  libgo/go/io/fs/walk_test.go
! d43299c78c64d9d3c3c680243e2aad2e  libgo/go/io/io.go
! ec1450d3e4837d8de7f8f2c5aa766fc9  libgo/go/io/io_test.go
  ea902dbac9d42e895bc2606402cb6582  libgo/go/io/ioutil/example_test.go
- e7c2136c063d22769d4484fa81fc5273  libgo/go/io/ioutil/export_test.go
  37e1bd1a1c317ccf79eee8fb8d92e4c9  libgo/go/io/ioutil/ioutil.go
  a8bb2cc0b3284d3c6f7ff8c31a241e74  libgo/go/io/ioutil/ioutil_test.go
! 351e1b5f1b2e4360b34554cd0bb3c4c9  libgo/go/io/ioutil/tempfile.go
! 032e9d8a024353caf1426b5ff34fde14  libgo/go/io/ioutil/tempfile_test.go
  a2ad62dd6088e213c12f8dbb625a993a  libgo/go/io/ioutil/testdata/hello
  6ce38e3f8bf981ad9af952e18fc05a0e  libgo/go/io/multi.go
! 5ef43d874ea207dba328274c09dbdb4c  libgo/go/io/multi_test.go
! 0d70325f6d9d2c45fb95dfa6d768a14d  libgo/go/io/pipe.go
  2aede3906faae4d3345e8f920dea3ec9  libgo/go/io/pipe_test.go
! c2c00ad977ffa9840fc2efcb933faddc  libgo/go/log/log.go
! e83593c150d09111e8a286b7bbdc4944  libgo/go/log/log_test.go
  e1898bb015ade6fb47cf79273e845db2  libgo/go/log/syslog/doc.go
! 552ae509e0780cb32ad6c818f065a380  libgo/go/log/syslog/example_test.go
! 1a469852babd69328a7c222e333163e4  libgo/go/log/syslog/syslog.go
  5a7976c6d885eb99b534a5dfdaea0682  libgo/go/log/syslog/syslog_c.c
  9f42a14ed1130e5bfb22285493c519c5  libgo/go/log/syslog/syslog_libc.go
! 8354b405c498f2698d155b76f519abf2  libgo/go/log/syslog/syslog_test.go
! 1c1d1eebc3e7d7ad3488614a3738fd85  libgo/go/log/syslog/syslog_unix.go
  bc0baa61ecd6897de3da3edb0f016806  libgo/go/math/abs.go
  390f0d72d3c81adad147c6db82db048b  libgo/go/math/acosh.go
! 31354da67eee59257d6d04c54e31b222  libgo/go/math/all_test.go
! 99f2434d0df7c9ba1ad47e6e04429f9f  libgo/go/math/arith_s390x.go
  bfecc5023664f4f5f590e1622c616030  libgo/go/math/arith_s390x_test.go
! ee47bed0f44643a86454d881fa472627  libgo/go/math/asin.go
  56391c66d4b1272044c0b6e3be60a5a6  libgo/go/math/asinh.go
! 7ed813f8adb78ab5634b5b83e9474461  libgo/go/math/atan.go
  a38c5d81ae7b5fa0749743a1f6d19480  libgo/go/math/atan2.go
  1a21b8de6f753a2af01c2c1bf116bc92  libgo/go/math/atanh.go
  3eff02e47f20d8e41dc9b93305133aa7  libgo/go/math/big/accuracy_string.go
! 19cf848d64d107c15b45420a5c226fbf  libgo/go/math/big/arith.go
! 3b1de652535445b99ab2db4c6483df0c  libgo/go/math/big/arith_amd64.go
! 8c5d65e25fee864dcfe07f8e4b52f067  libgo/go/math/big/arith_decl.go
! f4292de20b0dadad077fedc3fc3ef239  libgo/go/math/big/arith_decl_pure.go
! 5afbbd5632d4d621c92bb612ad37255c  libgo/go/math/big/arith_decl_s390x.go
! a87e678346bcf5d9cc3e1fecc0540beb  libgo/go/math/big/arith_s390x_test.go
! 7a3e3778ab582aeda9b136cc8f89b8bd  libgo/go/math/big/arith_test.go
  531c8219fcaf9855deccc82027b58363  libgo/go/math/big/bits_test.go
  8a466a0f1cde16efa473dc4d23259bb3  libgo/go/math/big/calibrate_test.go
  e3ff2206e46c4b4bcc2844647f379ef0  libgo/go/math/big/decimal.go
  71f75a06e14c8c009d5777e5f897dbcd  libgo/go/math/big/decimal_test.go
  aacd9e49acb2bfbf4a6969b4712ee33e  libgo/go/math/big/doc.go
  3cca165f20a30a7c2263cd6ac9c3e7c3  libgo/go/math/big/example_rat_test.go
! d09df6d150ee3ca2ba25742cfe58acfe  libgo/go/math/big/float.go
  94bd0f3b6df04601c99a5a5993c22c0d  libgo/go/math/big/float_test.go
  7119ff0121cc1c877a741de6ae9d8151  libgo/go/math/big/floatconv.go
! fd9a871cd0bbe604e704daf713f82275  libgo/go/math/big/floatconv_test.go
  fa13efda78fb148d3417cce3248e0b94  libgo/go/math/big/floatexample_test.go
  b0f20b2822c486d8711bc0d0fabf33de  libgo/go/math/big/floatmarsh.go
  37fb2b8f71e32f7444f06c2f671ae2ae  libgo/go/math/big/floatmarsh_test.go
  4d7cadd571e64eb7bbbee489f9ecd716  libgo/go/math/big/ftoa.go
  6f756735158cadf1b9f9f4672b21a357  libgo/go/math/big/gcd_test.go
  fb40193bf8426b322ecf298d83723925  libgo/go/math/big/hilbert_test.go
! e4a2b8725ed50515145aad344e598829  libgo/go/math/big/int.go
  fa9e205b853590c1b7267a870a46846f  libgo/go/math/big/int_test.go
  495cd63056ebbca31a6209d482d2d982  libgo/go/math/big/intconv.go
  025f18ceae84aff402e04c7d7dbb6b39  libgo/go/math/big/intconv_test.go
  f83cd650bde6dc9a8c2485bf06444de2  libgo/go/math/big/intmarsh.go
  b27cdb7ccf9576445e7184aade97c6f8  libgo/go/math/big/intmarsh_test.go
! 5b57bfefda41864a56ab9e05b667285d  libgo/go/math/big/link_test.go
! a09f0908bfd9dccfb526dba926d41a3c  libgo/go/math/big/nat.go
  5097892c6f7e877b3e37cca79f5d6682  libgo/go/math/big/nat_test.go
  d44aed2c1bc27a400a674876c1ec4162  libgo/go/math/big/natconv.go
  d9ebeb148d22afa7f74c364b0c7cae5f  libgo/go/math/big/natconv_test.go
  37ca7d53a658194c31917978905eee03  libgo/go/math/big/prime.go
  c07f99af31649a2b0636333e730d9d93  libgo/go/math/big/prime_test.go
! 853ec24670c430fdb91afffef25bbd3f  libgo/go/math/big/rat.go
! 36894470fba228df28051b8d5350b7fa  libgo/go/math/big/rat_test.go
! e642782bea3dcf39026a3f5645742405  libgo/go/math/big/ratconv.go
! 5cbf3787ad497001b82ea2cc9ab0afcb  libgo/go/math/big/ratconv_test.go
  007fbce07bd46fbd343213a0c490069a  libgo/go/math/big/ratmarsh.go
  3baa3e326bed1bcbda3688e0a423defb  libgo/go/math/big/ratmarsh_test.go
  ebec80a55b4b0ec4db98b9e390f09e79  libgo/go/math/big/roundingmode_string.go
  8cea1d8e4b8ec378dfcc8f2226074757  libgo/go/math/big/sqrt.go
  a8215473d04f5f20e59b669bd6a7fd66  libgo/go/math/big/sqrt_test.go
  9e18366ae7543837f4de3a42b1f81755  libgo/go/math/bits.go
! 7bfa4f8304ea1b5fbe1ef995af6f9f75  libgo/go/math/bits/bits.go
! 5fbf79c53143c2c7ad8faf3cf1a2bb64  libgo/go/math/bits/bits_errors.go
! b8de89840fb542054416a5ddc6188692  libgo/go/math/bits/bits_errors_bootstrap.go
! 24d83bc55817368d8e63f142c930b5d6  libgo/go/math/bits/bits_tables.go
  70fd134308e319c371ccf039e8007d81  libgo/go/math/bits/bits_test.go
  8006429b4515fa749039cc520c90686a  libgo/go/math/bits/example_test.go
  21e60e9877a9cb90c81efb31ab0d8e11  libgo/go/math/bits/export_test.go
! 5c9f9339c4c794c743b39fc252dc9221  libgo/go/math/bits/make_examples.go
! 5e476afb86d31e88e0f6a791da046f1b  libgo/go/math/bits/make_tables.go
  e50f00b43d394a0cc319719168e913fd  libgo/go/math/cbrt.go
  f7162d9045ea9510ab026896240021b7  libgo/go/math/cmplx/abs.go
  0184ecc1643a26c7ca854184fbe260d5  libgo/go/math/cmplx/asin.go
--- 98385,98496 ----
  8e157c18afb0e5f0344a6f0997267ac2  libgo/go/internal/xcoff/testdata/printbye.c
  53f217ba5dd53217e5e2539808fac481  libgo/go/internal/xcoff/testdata/printhello.c
  3eb585d550d13a2f892b31bb10624203  libgo/go/internal/xcoff/xcoff.go
! 3a811e9a8fec5567bd4354ece6c5b381  libgo/go/io/example_test.go
  70dfd01084b40cc343dddb71b47c4647  libgo/go/io/export_test.go
! ab388fe365634a04a7e3df8a4b7e85e2  libgo/go/io/fs/example_test.go
! 91980911508ec07d041d681c2f5e58cf  libgo/go/io/fs/fs.go
  a7e5a796a7c6a75a4773e2be1341300e  libgo/go/io/fs/fs_test.go
  baa15e6c3dc261539a75a51eef0e70df  libgo/go/io/fs/glob.go
  9fd5ac01209081acb82b66d7203f399d  libgo/go/io/fs/glob_test.go
! ebb828009d43063951182aaf6018e59a  libgo/go/io/fs/readdir.go
! 871bcd2d083b0d2b530702ae96b6f6ab  libgo/go/io/fs/readdir_test.go
! d0d56e3e2f96a645b66633b6a99558b2  libgo/go/io/fs/readfile.go
  a2e5e119811014f0282d37066d8434ed  libgo/go/io/fs/readfile_test.go
  7841564e890598962e48154823e51678  libgo/go/io/fs/stat.go
  d6e77cc5f64cb615decf65139dcf07e4  libgo/go/io/fs/stat_test.go
! 46f32623a674443af0d616e211405f8d  libgo/go/io/fs/sub.go
  42d836ccd378d7a4ab8c40ec4807f6f0  libgo/go/io/fs/sub_test.go
  00598403a89c3c1139fa282b6578bb95  libgo/go/io/fs/walk.go
! 0276e16a16ad31c8ba3a87796733cb52  libgo/go/io/fs/walk_test.go
! 57071891e36c56fe12ebcf4bebdfcf1a  libgo/go/io/io.go
! 6fa9a940a200173825b97402debb2498  libgo/go/io/io_test.go
  ea902dbac9d42e895bc2606402cb6582  libgo/go/io/ioutil/example_test.go
  37e1bd1a1c317ccf79eee8fb8d92e4c9  libgo/go/io/ioutil/ioutil.go
  a8bb2cc0b3284d3c6f7ff8c31a241e74  libgo/go/io/ioutil/ioutil_test.go
! 942cfbbf658b85247dc3b5660e993b81  libgo/go/io/ioutil/tempfile.go
! c82c97424fe6b7b61ed41860992dc5ca  libgo/go/io/ioutil/tempfile_test.go
  a2ad62dd6088e213c12f8dbb625a993a  libgo/go/io/ioutil/testdata/hello
  6ce38e3f8bf981ad9af952e18fc05a0e  libgo/go/io/multi.go
! e65e64493bfb09860af637a068abdcbc  libgo/go/io/multi_test.go
! 6bd01b7ab719940f5c40222dc48c3640  libgo/go/io/pipe.go
  2aede3906faae4d3345e8f920dea3ec9  libgo/go/io/pipe_test.go
! 42189fa81116e51fb6bffff068c7911b  libgo/go/log/log.go
! c0f7ac4fd2292cbcf270cef2ca5e0b74  libgo/go/log/log_test.go
  e1898bb015ade6fb47cf79273e845db2  libgo/go/log/syslog/doc.go
! 57ac77a0b2175e9f4a2cd0d041a33751  libgo/go/log/syslog/example_test.go
! a8a44fe9c4196dbd4acca89633e46cab  libgo/go/log/syslog/syslog.go
  5a7976c6d885eb99b534a5dfdaea0682  libgo/go/log/syslog/syslog_c.c
  9f42a14ed1130e5bfb22285493c519c5  libgo/go/log/syslog/syslog_libc.go
! 71078aba5fdb59707958715101bc1737  libgo/go/log/syslog/syslog_test.go
! f3c65b70cc0b941f4ea5e0a9f3920832  libgo/go/log/syslog/syslog_unix.go
  bc0baa61ecd6897de3da3edb0f016806  libgo/go/math/abs.go
  390f0d72d3c81adad147c6db82db048b  libgo/go/math/acosh.go
! 13724b546a82fa12a08b172e0d942ec3  libgo/go/math/all_test.go
! 31ab6e2a152de3a5973c5c405aeb34b1  libgo/go/math/arith_s390x.go
  bfecc5023664f4f5f590e1622c616030  libgo/go/math/arith_s390x_test.go
! d3880c29132463ffedda1cbad55fadbf  libgo/go/math/asin.go
  56391c66d4b1272044c0b6e3be60a5a6  libgo/go/math/asinh.go
! 3b93ee52633c86b8103aa1b38803cb04  libgo/go/math/atan.go
  a38c5d81ae7b5fa0749743a1f6d19480  libgo/go/math/atan2.go
  1a21b8de6f753a2af01c2c1bf116bc92  libgo/go/math/atanh.go
  3eff02e47f20d8e41dc9b93305133aa7  libgo/go/math/big/accuracy_string.go
! e5e85784ddf1e3ab3fd829869ee337d6  libgo/go/math/big/arith.go
! 498d8e9fbfb5a3efa0f47b8606f70668  libgo/go/math/big/arith_amd64.go
! 22ef3b42cb04a246e57524e8a50d3e65  libgo/go/math/big/arith_decl.go
! a895e6cf63dc3e7bc507b6debf7fe3ba  libgo/go/math/big/arith_decl_pure.go
! 7c2c4c54232cb795adf1e8319f90d324  libgo/go/math/big/arith_decl_s390x.go
! c5ebe1b7c2b297c3847e6a794960e3fb  libgo/go/math/big/arith_s390x_test.go
! 8324300d1cc5fa06e7be130825f9715a  libgo/go/math/big/arith_test.go
  531c8219fcaf9855deccc82027b58363  libgo/go/math/big/bits_test.go
  8a466a0f1cde16efa473dc4d23259bb3  libgo/go/math/big/calibrate_test.go
  e3ff2206e46c4b4bcc2844647f379ef0  libgo/go/math/big/decimal.go
  71f75a06e14c8c009d5777e5f897dbcd  libgo/go/math/big/decimal_test.go
  aacd9e49acb2bfbf4a6969b4712ee33e  libgo/go/math/big/doc.go
  3cca165f20a30a7c2263cd6ac9c3e7c3  libgo/go/math/big/example_rat_test.go
! d00713e2a07eecc17e49367f389c8ee5  libgo/go/math/big/float.go
  94bd0f3b6df04601c99a5a5993c22c0d  libgo/go/math/big/float_test.go
  7119ff0121cc1c877a741de6ae9d8151  libgo/go/math/big/floatconv.go
! c05cfa229741bfb84616cabc6b040ae5  libgo/go/math/big/floatconv_test.go
  fa13efda78fb148d3417cce3248e0b94  libgo/go/math/big/floatexample_test.go
  b0f20b2822c486d8711bc0d0fabf33de  libgo/go/math/big/floatmarsh.go
  37fb2b8f71e32f7444f06c2f671ae2ae  libgo/go/math/big/floatmarsh_test.go
  4d7cadd571e64eb7bbbee489f9ecd716  libgo/go/math/big/ftoa.go
  6f756735158cadf1b9f9f4672b21a357  libgo/go/math/big/gcd_test.go
  fb40193bf8426b322ecf298d83723925  libgo/go/math/big/hilbert_test.go
! dbde07218f36ddadd3ede41ca3b09a6e  libgo/go/math/big/int.go
  fa9e205b853590c1b7267a870a46846f  libgo/go/math/big/int_test.go
  495cd63056ebbca31a6209d482d2d982  libgo/go/math/big/intconv.go
  025f18ceae84aff402e04c7d7dbb6b39  libgo/go/math/big/intconv_test.go
  f83cd650bde6dc9a8c2485bf06444de2  libgo/go/math/big/intmarsh.go
  b27cdb7ccf9576445e7184aade97c6f8  libgo/go/math/big/intmarsh_test.go
! 0faf75054285343752bfedd500f8487f  libgo/go/math/big/link_test.go
! 1769ff812ff246a452a17b0f5272b151  libgo/go/math/big/nat.go
  5097892c6f7e877b3e37cca79f5d6682  libgo/go/math/big/nat_test.go
  d44aed2c1bc27a400a674876c1ec4162  libgo/go/math/big/natconv.go
  d9ebeb148d22afa7f74c364b0c7cae5f  libgo/go/math/big/natconv_test.go
+ e3822f6844c1d64544f8374b40177f88  libgo/go/math/big/natdiv.go
  37ca7d53a658194c31917978905eee03  libgo/go/math/big/prime.go
  c07f99af31649a2b0636333e730d9d93  libgo/go/math/big/prime_test.go
! e634b593f3e5f78775e4fda059ac6afe  libgo/go/math/big/rat.go
! 595e5e647c64da0c552dc2edb8c27ef4  libgo/go/math/big/rat_test.go
! b377ba2fa6d1c44b9ca0fef2a9d2a55b  libgo/go/math/big/ratconv.go
! 80bec82e3a5586fd213881caf9823a3a  libgo/go/math/big/ratconv_test.go
  007fbce07bd46fbd343213a0c490069a  libgo/go/math/big/ratmarsh.go
  3baa3e326bed1bcbda3688e0a423defb  libgo/go/math/big/ratmarsh_test.go
  ebec80a55b4b0ec4db98b9e390f09e79  libgo/go/math/big/roundingmode_string.go
  8cea1d8e4b8ec378dfcc8f2226074757  libgo/go/math/big/sqrt.go
  a8215473d04f5f20e59b669bd6a7fd66  libgo/go/math/big/sqrt_test.go
  9e18366ae7543837f4de3a42b1f81755  libgo/go/math/bits.go
! 84b71e8863491a085844680d2c624751  libgo/go/math/bits/bits.go
! 7eee5328ba4cf48b13794fa183a45d13  libgo/go/math/bits/bits_errors.go
! 6a8a944bcadd6ab21d5862103b64913f  libgo/go/math/bits/bits_errors_bootstrap.go
! a8302e005dba344bdccc8e7234e01c63  libgo/go/math/bits/bits_tables.go
  70fd134308e319c371ccf039e8007d81  libgo/go/math/bits/bits_test.go
+ 6e15a49a18fa5d025036245df2012582  libgo/go/math/bits/example_math_test.go
  8006429b4515fa749039cc520c90686a  libgo/go/math/bits/example_test.go
  21e60e9877a9cb90c81efb31ab0d8e11  libgo/go/math/bits/export_test.go
! 8d3fc13f91e6ea75026e37d6a2d4ae4f  libgo/go/math/bits/make_examples.go
! 80e9b5bdcb04defbc52a9200d227f078  libgo/go/math/bits/make_tables.go
  e50f00b43d394a0cc319719168e913fd  libgo/go/math/cbrt.go
  f7162d9045ea9510ab026896240021b7  libgo/go/math/cmplx/abs.go
  0184ecc1643a26c7ca854184fbe260d5  libgo/go/math/cmplx/asin.go
*************** f7162d9045ea9510ab026896240021b7  libgo/
*** 92038,92044 ****
  1928eb52ae51818eb4897ba32fde3792  libgo/go/math/cmplx/conj.go
  df86d1988ac7b59a219120e121720a02  libgo/go/math/cmplx/example_test.go
  b2028e9a2d391d640ee6cc773e059143  libgo/go/math/cmplx/exp.go
! b743e1a2e908d653aa95f35e41635979  libgo/go/math/cmplx/huge_test.go
  4ac6d445ed14fc77867d97cb71d0ee5a  libgo/go/math/cmplx/isinf.go
  290e6cab4d4048c8ae7bcf2a10bbafbd  libgo/go/math/cmplx/isnan.go
  247fbec6892f5fa6df7d2e38363d17c7  libgo/go/math/cmplx/log.go
--- 98498,98504 ----
  1928eb52ae51818eb4897ba32fde3792  libgo/go/math/cmplx/conj.go
  df86d1988ac7b59a219120e121720a02  libgo/go/math/cmplx/example_test.go
  b2028e9a2d391d640ee6cc773e059143  libgo/go/math/cmplx/exp.go
! fdf6c8a304a4ccc8a0ce125c758a35dd  libgo/go/math/cmplx/huge_test.go
  4ac6d445ed14fc77867d97cb71d0ee5a  libgo/go/math/cmplx/isinf.go
  290e6cab4d4048c8ae7bcf2a10bbafbd  libgo/go/math/cmplx/isnan.go
  247fbec6892f5fa6df7d2e38363d17c7  libgo/go/math/cmplx/log.go
*************** e9d3a2acfcb8f7aa22d34d60051dfc1e  libgo/
*** 92049,92420 ****
  b0b6cde1cb13bbd346ebdc4a192ebcb5  libgo/go/math/cmplx/sin.go
  b70050d82020a78a09d0f80c28ab69f3  libgo/go/math/cmplx/sqrt.go
  6f8db890a8205d2dd11d2619403d7ff1  libgo/go/math/cmplx/tan.go
! 76d51d6b78a918eb58974d3e180a1551  libgo/go/math/const.go
  6996ff601a059b6529b5623dd0cd9cfe  libgo/go/math/copysign.go
! 46c69e6939df96f2ead0127fd151cdc6  libgo/go/math/dim.go
  c696310a2a108fa2532395d36ccc7646  libgo/go/math/erf.go
  9f5c919e88e0e943560a7e522e9b5086  libgo/go/math/erfinv.go
! 97cb0d4191fe1e15f62b43c53fd0f35f  libgo/go/math/example_test.go
! 68c9f1cc4d8457a9a5f9622af53e7d8f  libgo/go/math/exp.go
! 77a6892b42c98c582404f30444539a58  libgo/go/math/exp_asm.go
! fb4b108669e64f9b5aea823c43a9a367  libgo/go/math/expm1.go
  f79fd24d6f9a8693688cdb5dfe744990  libgo/go/math/export_s390x_test.go
  0e0837d40ebea64e6b256a4834512f4c  libgo/go/math/export_test.go
! 6facf67e8c14558f364641464e7280ac  libgo/go/math/floor.go
! 493edf5f6bb440d2dbfecc953e579249  libgo/go/math/fma.go
! 4822cff972ca61cb955c6f6a36c2cc62  libgo/go/math/frexp.go
  9fee9eb1c4a27bde46ff9f47068ebc61  libgo/go/math/gamma.go
! a17d37b6c57712659ad85e2ca7260bcb  libgo/go/math/huge_test.go
  3ff0355ea3e589a6e34d8067b23bc07e  libgo/go/math/hypot.go
  b2d54ba768d8b7f3343854b69a633cd3  libgo/go/math/j0.go
  671d8a3fec1262edf6b6038a27a6274d  libgo/go/math/j1.go
  544e16d6d6a488a7586a0bd09e6fe16f  libgo/go/math/jn.go
  77c8c1b0d0b9732ab8550ed632798cdd  libgo/go/math/ldexp.go
  a6421fbd9c44f96c9b411d269c2311bf  libgo/go/math/lgamma.go
! 6d248032462e296f305c0b8c9b14b355  libgo/go/math/log.go
  e07dbaf31b13d9cf786d4152690f2f77  libgo/go/math/log10.go
  a6d6ae4ff171a327b75e01904b38154f  libgo/go/math/log1p.go
  664e5b5d5a8d19bc2e7c91d3d980b67b  libgo/go/math/logb.go
! 7f9fcf9e6f727787053fdf088a483810  libgo/go/math/mod.go
! 870939d9b36a60ab96b01e95dd35adb2  libgo/go/math/modf.go
  4e7fefbb1739124aeff8c2e89658f153  libgo/go/math/nextafter.go
  ebf25f782cfb20da855daf4cc040fbb8  libgo/go/math/pow.go
  68f05dfe608033365773b29625d8a6fd  libgo/go/math/pow10.go
  994ed60e5c9cd6fae93df29614b2e6be  libgo/go/math/rand/exp.go
! ec47ef7ebffdda64d44e0a5a32e95701  libgo/go/math/rand/gen_cooked.go
  cd375b5752b3094726a21a5d7732b5e1  libgo/go/math/rand/normal.go
! 8073c269d6f074828a9db5f28229f721  libgo/go/math/rand/race_test.go
! ca3f837cf3ecfbae0da5af3cba36565c  libgo/go/math/rand/rand.go
! 11025d9b2a53a65f05f0f4c7d72315cf  libgo/go/math/rand/rand_test.go
! c428ebc4b7899a835672ad9aea7d25f7  libgo/go/math/rand/regress_test.go
  4444c401b5103a0852eadd57d6374050  libgo/go/math/rand/rng.go
  c59029181577bcda5df58a7de276fa63  libgo/go/math/rand/zipf.go
! 307a817863a24bfde9d3125b5290be42  libgo/go/math/remainder.go
  a029fa437e4ae151a70522e359e9c3d0  libgo/go/math/signbit.go
! 6d6c1b19605d63cd740405980a088e36  libgo/go/math/sin.go
  c557575561d914fb0897682f2026c02d  libgo/go/math/sincos.go
! fc62755ca43927185173b4d1d80c02c7  libgo/go/math/sinh.go
  2a25de3c788f51c27f4e6fe380a7fd06  libgo/go/math/sqrt.go
! 44bb39c6347c24333768ec52a8c551b2  libgo/go/math/tan.go
! 4be00347ccb57c3cae5c45bec3537471  libgo/go/math/tanh.go
  1a19326370f789fa184010859c26b09b  libgo/go/math/trig_reduce.go
  75063090695c29e729302c292798d6b8  libgo/go/math/unsafe.go
! 9c64d71fb6f2a342b61f3600248d5d4d  libgo/go/mime/encodedword.go
  2f4b629d6238da024f3eeac6cc62bf87  libgo/go/mime/encodedword_test.go
  8f95cf63e95b52f170e1ca0a638759d9  libgo/go/mime/example_test.go
  e646cecd5158e36054301b0bb6704adf  libgo/go/mime/grammar.go
! ea55e25b2312e99c226e5a273c4266db  libgo/go/mime/mediatype.go
! 6ed1263c400cfb229322b863e98e30b1  libgo/go/mime/mediatype_test.go
  d1439d295d145e849ac1e4f9c013213f  libgo/go/mime/multipart/formdata.go
  60f83992f660d8c19a49229c288f8652  libgo/go/mime/multipart/formdata_test.go
! c8fe55da74d055b29d72b726250eed47  libgo/go/mime/multipart/multipart.go
  e937bf46ab349c3e5a1e7332d599abc9  libgo/go/mime/multipart/multipart_test.go
  ea13f3c87e9a921a7368f85cd6ae67d3  libgo/go/mime/multipart/testdata/nested-mime
  29d0c21fd543ed7cd2aa15cc6c447899  libgo/go/mime/multipart/writer.go
  b91db6ffe7fd90e987e8e97afb54f235  libgo/go/mime/multipart/writer_test.go
  8b858169302a8d76b5045883818ecafa  libgo/go/mime/quotedprintable/example_test.go
  4be366c0b9637966fe48a68be687ecb0  libgo/go/mime/quotedprintable/reader.go
! 5ee4624e8a954ae45009209c028f3843  libgo/go/mime/quotedprintable/reader_test.go
  9a7a8fa0c7feea3bba71fb7f409edf6a  libgo/go/mime/quotedprintable/writer.go
  0b8baa2e929c511c094acfcefdd96fa9  libgo/go/mime/quotedprintable/writer_test.go
  d7c2d693b83d74f542553f24afe3d013  libgo/go/mime/test.types
  d7c2d693b83d74f542553f24afe3d013  libgo/go/mime/testdata/test.types
  452e5eefd1071c8538b9315a6439994f  libgo/go/mime/testdata/test.types.plan9
! 38f3cba1e07d36aaef13e98b3de07e5c  libgo/go/mime/type.go
  38cd804ecac4484ac521d769afedbefb  libgo/go/mime/type_dragonfly.go
  38cd804ecac4484ac521d769afedbefb  libgo/go/mime/type_freebsd.go
  eaef28a4e56cbee96692095f999e83f8  libgo/go/mime/type_openbsd.go
  5decf13646968cfa0292bce1e80d78da  libgo/go/mime/type_plan9.go
  b2404ba91edcd277d3a8364c4fb803a3  libgo/go/mime/type_test.go
! fab12682bc6af83e8bf9f3fb94acf2f0  libgo/go/mime/type_unix.go
  3bdf5598271fa2c31d7b55137192c950  libgo/go/mime/type_windows.go
! e2058cbdab21bb5cf65d266969706e0e  libgo/go/net/addrselect.go
! e18e6a1c6d22dee80fae58407386579f  libgo/go/net/addrselect_test.go
! 9307247e641c97ad0f67a82ac8b9ef5b  libgo/go/net/cgo_aix.go
! f7079b64aa3fe7192ad3ce4383a3c84e  libgo/go/net/cgo_android.go
! d9a30acea51cd178a93915ab1348f134  libgo/go/net/cgo_bsd.go
  3ad0daa8a9c4bfe13f484111c762dc4b  libgo/go/net/cgo_hurd.go
! 58e7d96fd75c58122947481411649233  libgo/go/net/cgo_linux.go
! 9e7f9e047965ebfd6d418cfd9b392b57  libgo/go/net/cgo_netbsd.go
! 73d025a08469d0c2e9682cce11da59a2  libgo/go/net/cgo_openbsd.go
! 7e22a198fa3a189b8ac7832e6e7a4b8e  libgo/go/net/cgo_resnew.go
! 964377dc305c8eec76449ee353a10616  libgo/go/net/cgo_resold.go
! a40b11b7e620d7da9f650f3c85e94228  libgo/go/net/cgo_socknew.go
! 1701cea6528eed41eb29138cf52c0d2f  libgo/go/net/cgo_sockold.go
! 45143e812d7fea77d7cba8db0a5634a1  libgo/go/net/cgo_solaris.go
! 3262e51971b1cb74478bcca6acfb9275  libgo/go/net/cgo_stub.go
! 1c91001dd6a305b2636297fc7a852a46  libgo/go/net/cgo_unix.go
! 97b160dce3390dbe7bf638c1743d86ee  libgo/go/net/cgo_unix_test.go
! 1ae0c51bf7a5c7e6cc4577b948752c13  libgo/go/net/cgo_windows.go
! ea0f9fa98ed9abbc58f32ca0adb4f0f6  libgo/go/net/conf.go
! 5ac9aff1490640627a495d3645b2d715  libgo/go/net/conf_netcgo.go
! e7b9f81df8907c662efcb26ea7dccb03  libgo/go/net/conf_test.go
! f80a1bf212ebf785b8fcfa260f5dc107  libgo/go/net/conn_test.go
! 4bb42666ec03bd72d3cfa26fc98176ac  libgo/go/net/dial.go
! 9cce875db9d170a116014865674a722e  libgo/go/net/dial_test.go
! 72ec733a48ddc2c97a8db850236817b0  libgo/go/net/dial_unix_test.go
! 3d95aea0ae8344ab86081581e0f9ffc7  libgo/go/net/dnsclient.go
  0633848b8fde9f29e6590c6dfa02fcd7  libgo/go/net/dnsclient_test.go
! dfed4b46549f676be43d9b24b0e3f84a  libgo/go/net/dnsclient_unix.go
! 64b97521bf09c83ab439fd2737ef8d7f  libgo/go/net/dnsclient_unix_test.go
! 84d9bd9121afb272a4d6031b65f60279  libgo/go/net/dnsconfig_unix.go
! 8f7437983cc8642509862731eee0c995  libgo/go/net/dnsconfig_unix_test.go
! e19c81108b1510936f59e0fc23923503  libgo/go/net/dnsname_test.go
  2a09c424c0d8d80ffe611262a6e281a8  libgo/go/net/error_plan9.go
! b8b3b08358f6c9491bd4480a65429bdb  libgo/go/net/error_plan9_test.go
! 42d0b841630fe9035f765a328c60518e  libgo/go/net/error_posix.go
! 56b5bea56d7c6395d2494e5f8ae5fcaf  libgo/go/net/error_posix_test.go
! 1d1377db03d2a4c39c412ffc2a8c1f22  libgo/go/net/error_test.go
! 041d6ec8861d0caccee9fd2efc78cb00  libgo/go/net/error_unix.go
! 8d6e3589f7b3eb6ee9a5f60053166e9a  libgo/go/net/error_unix_test.go
  074802dcbd0d547811a910e495d18a14  libgo/go/net/error_windows.go
! 63f0353da8d8fce76096c47f4d2d6441  libgo/go/net/error_windows_test.go
! 049847a20de33e0167e978efe9bc4ff6  libgo/go/net/example_test.go
! 8ce695e5626036ec9a966858f13c23ed  libgo/go/net/external_test.go
  365593e80afb253f235bba55f42b21d1  libgo/go/net/fd_plan9.go
! 7c53ad5ad6bb709739175577ce7dfa3a  libgo/go/net/fd_posix.go
! e56f319f19e2f3fac9507041f590ac40  libgo/go/net/fd_unix.go
  e62732711509abc471f5330f0ac38eaf  libgo/go/net/fd_windows.go
  fa04cee92dab65f8128b73a7a36408ae  libgo/go/net/file.go
  13ecb88d7305a09023afffde195e7c15  libgo/go/net/file_plan9.go
! 292ba0400cddbd99c3ec814eec243ba3  libgo/go/net/file_stub.go
! 8fb455c3f964ed1fda7992f2e960623a  libgo/go/net/file_test.go
! 1a89ea75d3a8750e8da0d9858152b2a6  libgo/go/net/file_unix.go
  30876c1c5f58de3543d36ef2d38f4825  libgo/go/net/file_windows.go
  2ca32936d37eee699023f6a5089472cc  libgo/go/net/hook.go
  ab6b66c47d7fc39618c8a400cd48a24e  libgo/go/net/hook_plan9.go
! d9d33dac8ab0eca1d78bb423823752c2  libgo/go/net/hook_unix.go
  f2e6fabae4c9d246bdbd8ff254f4e096  libgo/go/net/hook_windows.go
! 928fe4840b0c4214c7d43682f59446a8  libgo/go/net/hosts.go
! 9a2343dbaa644fdbac9d74a72d812cf8  libgo/go/net/hosts_test.go
  77e1fec0f3af1cf49701683f11039637  libgo/go/net/hosts_testdata
  7641f03b37990656f1576a2bacf8f7ca  libgo/go/net/http/alpn_test.go
! 97c9804ba4405d65f35b808f94454192  libgo/go/net/http/cgi/child.go
  8a0a6010ff8d3d98ef12c353d26c2bef  libgo/go/net/http/cgi/child_test.go
! 6c8bf1c306e687e9c64c2fcdb082a5b6  libgo/go/net/http/cgi/host.go
! 3840d3572518856a8ada5173d9811715  libgo/go/net/http/cgi/host_test.go
! 99a9b081ac9213a61fd8f1d8c1fedd52  libgo/go/net/http/cgi/integration_test.go
! e4400fedaf2630813552e8b089eab560  libgo/go/net/http/cgi/posix_test.go
  d7e85fa43c940035f4594614307de77a  libgo/go/net/http/cgi/testdata/test.cgi
! ad4de725958b31ba38d5cd4c952c5228  libgo/go/net/http/client.go
! 4252ede860e070a2ab445ac7de7e44a6  libgo/go/net/http/client_test.go
! 16efad9ef3af2f0e47c240635b3db8d1  libgo/go/net/http/clientserver_test.go
  32dab4fc96751b3b271a3658a6b16d69  libgo/go/net/http/clone.go
! 57f5b3bad1ed9517b8253651e6535860  libgo/go/net/http/cookie.go
! 83f75344595ca7d211e0e5e54e8666ef  libgo/go/net/http/cookie_test.go
  42a80d5d3ffd56144396086e16a507bd  libgo/go/net/http/cookiejar/dummy_publicsuffix_test.go
  989022b325e93055d5d7ca0fe4e5ebb7  libgo/go/net/http/cookiejar/example_test.go
! 0552a5ee0d1b3a56a3712a00dc5918cb  libgo/go/net/http/cookiejar/jar.go
  8c7a7c09f9bae622b62ae1560f37fdef  libgo/go/net/http/cookiejar/jar_test.go
! 7aea102b9b4298e12caa878e7e70f330  libgo/go/net/http/cookiejar/punycode.go
  fabfb997332db4db285c4a3beaa6d742  libgo/go/net/http/cookiejar/punycode_test.go
  9076d9db46c1c4ade79461dc62bd4dbe  libgo/go/net/http/doc.go
  5b6a21d31e80ad6c19a58345aee58ac6  libgo/go/net/http/example_filesystem_test.go
  e79282f8a2abf5d53e71a8b587b0ad95  libgo/go/net/http/example_handle_test.go
! 7ecd7017df48c43f1db1d357e8f21873  libgo/go/net/http/example_test.go
! 75ecfd6146bd2a4a4afa886fe71ba384  libgo/go/net/http/export_test.go
! 61305ed0b99ea85b5c37be3f54d1f11c  libgo/go/net/http/fcgi/child.go
  47202d325ac9d95c70abeaaaffc8dd61  libgo/go/net/http/fcgi/fcgi.go
! 1171b2fd272110e556bf67992fd20b64  libgo/go/net/http/fcgi/fcgi_test.go
  8f307dd7176f148925a44be015c37dba  libgo/go/net/http/filetransport.go
! a25d68ed5be13dcbf8a8df0b43804521  libgo/go/net/http/filetransport_test.go
! 19b65e44ae21cc537047e06f1f31f875  libgo/go/net/http/fs.go
! 1c3c19becb2d7895c60d603ea3b2d15f  libgo/go/net/http/fs_test.go
! 9ba15574af137b0b8ee1335378f141fc  libgo/go/net/http/h2_bundle.go
! 4d4601fac859fd8a72db73438a7668c5  libgo/go/net/http/header.go
! 33d6be154b87bdf0f213bcab064b5f00  libgo/go/net/http/header_test.go
! 49360f359f8152d6638cf019152081bd  libgo/go/net/http/http.go
! 9ac8f0f399219c9d7eb77dc3c7ef419f  libgo/go/net/http/http_test.go
  d499dfabe7114254ee6c46aa0aa60af6  libgo/go/net/http/httptest/example_test.go
  14ded6bb454b765d7cce0dfb77fd49cb  libgo/go/net/http/httptest/httptest.go
  7d91e33ce6d2d5af37024f317fbd7e86  libgo/go/net/http/httptest/httptest_test.go
! 785ddb162c3de6330d60e350e3c87769  libgo/go/net/http/httptest/recorder.go
! f2e40c968579813d4e4bad71af19e6f2  libgo/go/net/http/httptest/recorder_test.go
! d01b4313ea3995f7adaa945cdb68e102  libgo/go/net/http/httptest/server.go
  4fe7875d8475b243712d3ef4d379999a  libgo/go/net/http/httptest/server_test.go
  e6dc64cdeb8c4ccdf9e88fdb0d4587ef  libgo/go/net/http/httptrace/example_test.go
! 5a3eac540df1900a44d08f7a9f9d85d1  libgo/go/net/http/httptrace/trace.go
  bb2a61d61c614a20bfdef885c91bb578  libgo/go/net/http/httptrace/trace_test.go
! 7e873b8a525bec21ff9c731496a55708  libgo/go/net/http/httputil/dump.go
! 954be5d60a1cbd11e6ff7fbd6c5f3004  libgo/go/net/http/httputil/dump_test.go
  48c8628596e0db641a910479cbc95c60  libgo/go/net/http/httputil/example_test.go
  621fc522707bcfe96838d2f35ff32e29  libgo/go/net/http/httputil/httputil.go
  8fcb758f622f8024b45c670f5c214f6a  libgo/go/net/http/httputil/persist.go
! d6dc38ec1d9557662616adfebf95df10  libgo/go/net/http/httputil/reverseproxy.go
! 2b570c532328c38fd3c44f0996fb068b  libgo/go/net/http/httputil/reverseproxy_test.go
! f41563affc303e804d128880491ffd58  libgo/go/net/http/internal/chunked.go
! c3561567fa2c3c2f70748fbb6834510e  libgo/go/net/http/internal/chunked_test.go
! d8dfb99ddffa4bb63870288bdf1b9fe8  libgo/go/net/http/internal/testcert.go
  0f1b2ae9b087721dc8d532479b919c2e  libgo/go/net/http/jar.go
! 16c5d56b1e54d05ccfc299d62d3154ee  libgo/go/net/http/main_test.go
  5b196501ffa7d98bd91bcb0561952a22  libgo/go/net/http/method.go
! 10005d3edbd4896077baf52eca2b21ca  libgo/go/net/http/omithttp2.go
! 73f9ecc56d651b23f7bfbd07fcd65969  libgo/go/net/http/pprof/pprof.go
! ccd3698c1005feee2a10ec47a1154daa  libgo/go/net/http/pprof/pprof_test.go
  f13e1f63c322e94e3b907d6caf09d25e  libgo/go/net/http/proxy_test.go
  9a78c894b9046071d6fd6ecaaaa1537b  libgo/go/net/http/range_test.go
  f3a20b03b94a0865bbeeda0f2076d3f2  libgo/go/net/http/readrequest_test.go
! bf86005e5600a4ff826daf4d109d349d  libgo/go/net/http/request.go
! 7ae5eb68a6aadfcd9872fe8503aa5f4a  libgo/go/net/http/request_test.go
! e8090a2582b7d8c84a0643b1fed21452  libgo/go/net/http/requestwrite_test.go
! 6d90a38f3a41a3766eccf971f5e578f8  libgo/go/net/http/response.go
! fe4afea7434b6aa8a5131faadb916dae  libgo/go/net/http/response_test.go
  49c49d05c7a8ac63eff2062c67e065f5  libgo/go/net/http/responsewrite_test.go
! 46994b44d2940614c609ba98688e7a3f  libgo/go/net/http/roundtrip.go
! 2c43db9b8d7e5d63db9321300894affd  libgo/go/net/http/roundtrip_js.go
! cd7e373e5f02e73fe5c95aab8cc13d23  libgo/go/net/http/serve_test.go
! cec55125a3320513fe735a74aadbe7c8  libgo/go/net/http/server.go
! a7586db3651650d075f8fa4151a5f579  libgo/go/net/http/server_test.go
  ddf3c49d88c56a8d67fb809980cb20b6  libgo/go/net/http/sniff.go
! 19a64dc78a1331187e99b5ca5a807c5b  libgo/go/net/http/sniff_test.go
  743834de0c5c3afe182870b421463ea7  libgo/go/net/http/socks_bundle.go
  959838655df79dd1948d8a7e1e954196  libgo/go/net/http/status.go
  3749f52bb326ae96782b42dc0a97b4c1  libgo/go/net/http/testdata/file
  39bf3a5cbcd978e0d9a9bab0f27787b4  libgo/go/net/http/testdata/index.html
  746f7bd76da133c7035108d0053a7e79  libgo/go/net/http/testdata/style.css
! 3b1d33a2a9bfc46181f7c54d16f667ac  libgo/go/net/http/transfer.go
  a27ef4ea99a47c5dd4df08d6a6f4b15d  libgo/go/net/http/transfer_test.go
! a5e36d2a0f75270d08ce6568eb6a1d91  libgo/go/net/http/transport.go
! 7712a4b51c96dd7bd831adfcfe6698f9  libgo/go/net/http/transport_internal_test.go
! 4d4ace79b1654d429161adddebe95344  libgo/go/net/http/transport_test.go
! 1cc2a86545b9a3ad083398fd0eb443de  libgo/go/net/http/triv.go
! 1de2210361240cb1b3b237a4bb5bdbf1  libgo/go/net/interface.go
! 6d4658ce4e7b49e17d28d6831ed8e707  libgo/go/net/interface_aix.go
! 55dbd9d74d3b73535e827df0056bae1e  libgo/go/net/interface_bsd.go
! 77ada80f92003ee97ea83618ee47fa4e  libgo/go/net/interface_bsd_test.go
! 82469630fe461a0b90c1242ea1c06145  libgo/go/net/interface_bsdvar.go
  dc7ca7365edbede73daa0b1b5b4891c7  libgo/go/net/interface_darwin.go
! 3e55fb7a3a7d5189b393a50069faa756  libgo/go/net/interface_freebsd.go
  477b4e2fff4f36318811b100f7cfcac9  libgo/go/net/interface_linux.go
  bd00334720a282bfa3655af3d4587339  libgo/go/net/interface_linux_test.go
! 7f2d976c02da3cc28d0065030d140b13  libgo/go/net/interface_plan9.go
  e44f73a9ea0f4a7121fbd349ef32d47e  libgo/go/net/interface_solaris.go
! 8d3de81cca9651cde9463f4d8fedb02e  libgo/go/net/interface_stub.go
! 033a0386e631592f479a4b8e476b121e  libgo/go/net/interface_test.go
! cd30a9ed56f82d4f5b853d70f64d6dc4  libgo/go/net/interface_unix_test.go
  f2ec265e092f0d8906570a8593fd766d  libgo/go/net/interface_windows.go
! 4938aae8d8c4b20a144745c62fd03807  libgo/go/net/internal/socktest/main_test.go
! 0e56ac4ee38729db3b2be1ecaabdc830  libgo/go/net/internal/socktest/main_unix_test.go
  2cfc75a60347ce6dc6ec6e2bbbbdf587  libgo/go/net/internal/socktest/main_windows_test.go
  7191d08be01ea5c2171a415596ae18e9  libgo/go/net/internal/socktest/switch.go
! d533a96d403af07716cce570e7894e7f  libgo/go/net/internal/socktest/switch_posix.go
! 210a4961c356382d8caa578085bdbdad  libgo/go/net/internal/socktest/switch_stub.go
! f5e2be14e840535ee3b2a79ed4272c43  libgo/go/net/internal/socktest/switch_unix.go
  e545fc02b83eb3d301779219574da8e8  libgo/go/net/internal/socktest/switch_windows.go
! 8c566bb2dfbfaadb53bfecaafad7299a  libgo/go/net/internal/socktest/sys_cloexec.go
! 3ab157716994aa4830b4d0e43246db1e  libgo/go/net/internal/socktest/sys_unix.go
  a9793c2001dcdbae6de26c3126bfc146  libgo/go/net/internal/socktest/sys_windows.go
! 6ab9cb5ecc1902a3c6d26aaad3ba0cb8  libgo/go/net/ip.go
! fea86d1cbbdea760b8dcf7ea47b934a4  libgo/go/net/ip_test.go
  998f95960c278185cc6ef75d037c1066  libgo/go/net/iprawsock.go
  5ddf25949204389f7e9f8cf2aafc14bc  libgo/go/net/iprawsock_plan9.go
! 702c73b17e7b2f6bbc81fcd80e2380d2  libgo/go/net/iprawsock_posix.go
! 7cd1b291592446506c82c1c52d97bc84  libgo/go/net/iprawsock_test.go
! f0dee4365510b930764c8499fa387b82  libgo/go/net/ipsock.go
! ee95729a82114579c73d006a9cdfb56a  libgo/go/net/ipsock_plan9.go
  a3a7e158b19729a1ade563770da81985  libgo/go/net/ipsock_plan9_test.go
! e73106463a2641ed1ad960c03d87580f  libgo/go/net/ipsock_posix.go
  07e3ace72b261ace00842ec4e545cca4  libgo/go/net/ipsock_test.go
! 3e98060d35354c0739ee574a3b4a8220  libgo/go/net/listen_test.go
! 324cb63052138119dc8a726449a30531  libgo/go/net/lookup.go
! 5ac46ed0a8d1ae83aa1ba81984ff1611  libgo/go/net/lookup_fake.go
! 57f21572384e12e43660359ba7be6943  libgo/go/net/lookup_plan9.go
! 73a0f83b029425672019f8ec5d0d787d  libgo/go/net/lookup_test.go
! ce866560b80d2541411e577b98f34a1a  libgo/go/net/lookup_unix.go
! 79678b69256585beb2e73b6bb751b030  libgo/go/net/lookup_windows.go
! c8e49c19c7268af3855bf732fe511097  libgo/go/net/lookup_windows_test.go
  4b90d898a40af43e323c8bf7a6bda41f  libgo/go/net/mac.go
  3fd6cf58c362824035b77585d22e8a7c  libgo/go/net/mac_test.go
  97a3035d50497940cc9f6f0344d20570  libgo/go/net/mail/example_test.go
! 7c8f73222e4d071534d9b20fec33f528  libgo/go/net/mail/message.go
  b13090c48e676c8ceb99d0825a76f9b1  libgo/go/net/mail/message_test.go
! 6746fd10e869d5a352809bf6f709665d  libgo/go/net/main_cloexec_test.go
! f548d336745a50c4cc8aab84000c0ced  libgo/go/net/main_conf_test.go
! 9c78f23cb9b4d91337ade37872c930f4  libgo/go/net/main_noconf_test.go
  eda73809fd6152fe3ad6d2d02e53b5a2  libgo/go/net/main_plan9_test.go
! c915459d5ed65674b20dcd2f185bcceb  libgo/go/net/main_posix_test.go
! 96b558563018da41ebed12e8e1dd0367  libgo/go/net/main_test.go
! ee33d9a7803e138456a6fb6f71ee341a  libgo/go/net/main_unix_test.go
  843c1a9e232c2fedc1f7c555559b8dc9  libgo/go/net/main_windows_test.go
! a10b9e35d70de28b8f12814459f152fc  libgo/go/net/mockserver_test.go
! aff2ec583e47a06ef3b87b238466b791  libgo/go/net/net.go
! c57b6d8fec004b20287e061c7a12806b  libgo/go/net/net_fake.go
! f135db4cb19f3458710ec982ae0fb738  libgo/go/net/net_test.go
  d20ac26330c1e6fa5c87a58b79711acf  libgo/go/net/newpollserver_rtems.go
! 6be4dc522d68c3da3f17b58c7e516494  libgo/go/net/nss.go
! 9468475a1e672be361eae05bd6d14cca  libgo/go/net/nss_test.go
! c15f35d8f2d9ef5129c08b325da26f8d  libgo/go/net/packetconn_test.go
! c2f0dcd463ece472ebd0dfd0c3fbdb38  libgo/go/net/parse.go
! 3279d0b13595d5e1bfb99cb783442120  libgo/go/net/parse_test.go
  0dde92b72eee0cc50fe8bf91e5cd62b5  libgo/go/net/pipe.go
  55cefd2dfaea8ff7cf1fdd39074d09f1  libgo/go/net/pipe_test.go
! c5c601ef30dd705c4bcc3f456348dd01  libgo/go/net/platform_test.go
  af34e67f238a3a08bbeefc6183d29db7  libgo/go/net/port.go
  978481de9c29c13c4a16a3830071185b  libgo/go/net/port_test.go
! 8c0d7aaac3166c161d7b9e8eedfc612c  libgo/go/net/port_unix.go
! 348c8eb27e296d5129d313b3e67de966  libgo/go/net/protoconn_test.go
  9687c28f5dc92a1da123e0e1274acc81  libgo/go/net/rawconn.go
! 51ea9b7abbb9f15c63bf6a28a395c613  libgo/go/net/rawconn_stub_test.go
! d9a007acaa20a67dd2ce23c8d39f4445  libgo/go/net/rawconn_test.go
! bba31a8d06589f04be7a6bb68b536a93  libgo/go/net/rawconn_unix_test.go
  e4e0d447c40a040fd3332598398f8bda  libgo/go/net/rawconn_windows_test.go
! a494ab1139990e3926aae6fb447cc805  libgo/go/net/rpc/client.go
! dc7eddb96079bd8e41e2575c18600d48  libgo/go/net/rpc/client_test.go
! 762e605bffd0f0a556ee73f508ccbfdb  libgo/go/net/rpc/debug.go
! 1dc366ed08a127bb4afee52b265a2d8a  libgo/go/net/rpc/jsonrpc/all_test.go
! ff795877f97b65357aa503243b45d315  libgo/go/net/rpc/jsonrpc/client.go
! 8c6fdfad63d6c4d640fbfd035195cf67  libgo/go/net/rpc/jsonrpc/server.go
! 16da175ff093948a388f398205db6672  libgo/go/net/rpc/server.go
! 815a2f3260866ae90071593c2226ce51  libgo/go/net/rpc/server_test.go
  5b3add5c4e27bfd2da9536ec88fd597c  libgo/go/net/sendfile_glibc.go
! 721dbdf95459d720107b1324f6194ffc  libgo/go/net/sendfile_stub.go
! c766859d43863cdf07d4984d17f09510  libgo/go/net/sendfile_test.go
! 24b8e7273ff3c5ed1f8b261f44b7bd2c  libgo/go/net/sendfile_unix_alt.go
  cd44d6ae6b2b3350bbed7ebd04f4dce9  libgo/go/net/sendfile_windows.go
! 945b942313ba8cf4f4e1239eadb273a6  libgo/go/net/server_test.go
! 7afcebc4df1bf52412d0f986632e31b2  libgo/go/net/smtp/auth.go
! 29d20945b94901edca38358db3531ca5  libgo/go/net/smtp/smtp.go
! a42e8795e9077f6c4d76b6865fb72613  libgo/go/net/smtp/smtp_test.go
! c791c9a7cec804f833dba5c1c3413a3a  libgo/go/net/sock_bsd.go
! a007ad97a8ba9ab382f1a28e84f4d414  libgo/go/net/sock_cloexec.go
  bbe86caad9d84d107df292439d1d69c8  libgo/go/net/sock_linux.go
  4dfe461cfa55fc62cdae8eb9e1e0ef51  libgo/go/net/sock_linux_test.go
  1745a4c17a11526e5b5264cf29f14a19  libgo/go/net/sock_plan9.go
! 0b5c710926043382e478f3099a6b658a  libgo/go/net/sock_posix.go
! ff289f7506c62c0f610bc4ab3ff3bd7e  libgo/go/net/sock_stub.go
  586c6c2dbd46b409eaa254d4303aa799  libgo/go/net/sock_windows.go
! a8cac3be8de9c88ef61a9f81d2c0a3cb  libgo/go/net/sockaddr_posix.go
  f71881b3b43b5c24b0772a7110d2db94  libgo/go/net/sockopt_aix.go
! 8258c43efbff79dc7d6e1d76cc8554c8  libgo/go/net/sockopt_bsd.go
  4fa5f3d74893806406fe9266c7e8201d  libgo/go/net/sockopt_hurd.go
  871c2b92d28844e6b3a518641592cdcd  libgo/go/net/sockopt_linux.go
  144c11ac9965aac68530e61d45bc93d7  libgo/go/net/sockopt_plan9.go
! b9845c25a7ab3005c831ec44c93c8038  libgo/go/net/sockopt_posix.go
  871c2b92d28844e6b3a518641592cdcd  libgo/go/net/sockopt_solaris.go
! a63fb310d0dfd85f9c206eeb86456203  libgo/go/net/sockopt_stub.go
  ea9c79e5f89d2b3b71ce5fc2ad519cc3  libgo/go/net/sockopt_windows.go
! 48590a90b3d81d9c93872de1f1d83f9c  libgo/go/net/sockoptip_bsdvar.go
  f8ae591103e20a0aa91d07b395965ad0  libgo/go/net/sockoptip_linux.go
! af9eda9f2808fabb678e4f42d90c4a07  libgo/go/net/sockoptip_posix.go
! 8e40cefaf7fef6e9803813f48a0a4a47  libgo/go/net/sockoptip_stub.go
  b5ee6bc6eee276205750c472b9ad6015  libgo/go/net/sockoptip_windows.go
  bcaaea0fe67ed1bc11479f252d3b02ff  libgo/go/net/splice_linux.go
! 93c509c784d56231a1e03612d699f559  libgo/go/net/splice_stub.go
! 17c8cf536d2b2384dedc2067159bdf8e  libgo/go/net/splice_test.go
! 55a19be9b185c96ff31e363a4d3ba386  libgo/go/net/sys_cloexec.go
! 220a5518ac3ade85bca414ae4a215b6b  libgo/go/net/tcpsock.go
  590c0b4812a9fca1e6b798b2ac528eb2  libgo/go/net/tcpsock_plan9.go
! 37848e5543b5b61e84499ad0bb070786  libgo/go/net/tcpsock_posix.go
! b3995fb5aba6258afee1ad89a3304c65  libgo/go/net/tcpsock_test.go
! e0523ac7f05df4c5d316c09da7fd8ee1  libgo/go/net/tcpsock_unix_test.go
  b4c87ff0d2bd706fcee868a0365d87e2  libgo/go/net/tcpsockopt_darwin.go
  bac7765c9de9a68ea328de1d96e6093c  libgo/go/net/tcpsockopt_dragonfly.go
  dacd4b8cac046d51733a60b7993760bc  libgo/go/net/tcpsockopt_openbsd.go
! d2149b637c507484fa56de79cf9a24a9  libgo/go/net/tcpsockopt_plan9.go
! a4c6626210a2f0d52ebbdf9c993ccefe  libgo/go/net/tcpsockopt_posix.go
  e526323509d64c80d7cddd8d5794b86b  libgo/go/net/tcpsockopt_solaris.go
! 8c63ac01a3561121f603db37cb29a6d7  libgo/go/net/tcpsockopt_stub.go
! 6cc9bb6abba17bc26a9eaa4c9af3d3fc  libgo/go/net/tcpsockopt_unix.go
  ff96bd74553ff3df0429fdc30e0bb074  libgo/go/net/tcpsockopt_windows.go
  f7acb47d9b57c691e05f51045394b28a  libgo/go/net/testdata/case-hosts
  15f42fa12b09b82e46f6c34644fca530  libgo/go/net/testdata/domain-resolv.conf
--- 98509,98906 ----
  b0b6cde1cb13bbd346ebdc4a192ebcb5  libgo/go/math/cmplx/sin.go
  b70050d82020a78a09d0f80c28ab69f3  libgo/go/math/cmplx/sqrt.go
  6f8db890a8205d2dd11d2619403d7ff1  libgo/go/math/cmplx/tan.go
! bd2182a4d1d074c64618a00172181d15  libgo/go/math/const.go
! 0a795e96195da3fd567dc0a33915c044  libgo/go/math/const_test.go
  6996ff601a059b6529b5623dd0cd9cfe  libgo/go/math/copysign.go
! 379c7aef57681eb7a2029eb8e957c078  libgo/go/math/dim.go
! 3795e7501c143ca37a620b91c85d4293  libgo/go/math/dim_noasm.go
  c696310a2a108fa2532395d36ccc7646  libgo/go/math/erf.go
  9f5c919e88e0e943560a7e522e9b5086  libgo/go/math/erfinv.go
! dfbb33eaf31e72d2ad99792157ed070d  libgo/go/math/example_test.go
! b818dc40f642bbc8c9aa4270e0cd45c3  libgo/go/math/exp.go
! 5a3e0d171f3d502eb3e074fff5ae3e0e  libgo/go/math/exp2_noasm.go
! 05daebf3bc06d123fcb5ce2f81c96efb  libgo/go/math/exp_amd64.go
! ba57d6645cab38143f40b7d4e08a9338  libgo/go/math/exp_noasm.go
! c1210f9331b6797b805481fa168f5aec  libgo/go/math/expm1.go
  f79fd24d6f9a8693688cdb5dfe744990  libgo/go/math/export_s390x_test.go
  0e0837d40ebea64e6b256a4834512f4c  libgo/go/math/export_test.go
! 9c206403fe52e1e41a3fc4fe4d42f65f  libgo/go/math/floor.go
! 381d9f0f4c406a5ce10c4f0629b32a79  libgo/go/math/floor_noasm.go
! a316439ba134e479cd6b293198fc3fd0  libgo/go/math/fma.go
! 10d3ba05c9a80bcb93948e1ed2fd7341  libgo/go/math/frexp.go
  9fee9eb1c4a27bde46ff9f47068ebc61  libgo/go/math/gamma.go
! 5229290fde71ac50353c860626227008  libgo/go/math/huge_test.go
  3ff0355ea3e589a6e34d8067b23bc07e  libgo/go/math/hypot.go
  b2d54ba768d8b7f3343854b69a633cd3  libgo/go/math/j0.go
  671d8a3fec1262edf6b6038a27a6274d  libgo/go/math/j1.go
  544e16d6d6a488a7586a0bd09e6fe16f  libgo/go/math/jn.go
  77c8c1b0d0b9732ab8550ed632798cdd  libgo/go/math/ldexp.go
  a6421fbd9c44f96c9b411d269c2311bf  libgo/go/math/lgamma.go
! 3b64f41b9f1e48d335606e51d3d3d2bb  libgo/go/math/log.go
  e07dbaf31b13d9cf786d4152690f2f77  libgo/go/math/log10.go
  a6d6ae4ff171a327b75e01904b38154f  libgo/go/math/log1p.go
  664e5b5d5a8d19bc2e7c91d3d980b67b  libgo/go/math/logb.go
! d74017aad5d51eb73b0faea8f0764054  libgo/go/math/mod.go
! 1cc954f3cb780fd5e05a308e2f7757cc  libgo/go/math/modf.go
! 03eee289d04eca127c3f29d2bfcd0c13  libgo/go/math/modf_noasm.go
  4e7fefbb1739124aeff8c2e89658f153  libgo/go/math/nextafter.go
  ebf25f782cfb20da855daf4cc040fbb8  libgo/go/math/pow.go
  68f05dfe608033365773b29625d8a6fd  libgo/go/math/pow10.go
  994ed60e5c9cd6fae93df29614b2e6be  libgo/go/math/rand/exp.go
! dbc8abefd9e372589230075e05584dd1  libgo/go/math/rand/export_test.go
! 48408bc4a6cd07563fbbc21394af0da1  libgo/go/math/rand/gen_cooked.go
  cd375b5752b3094726a21a5d7732b5e1  libgo/go/math/rand/normal.go
! 83d11a87583b0aff76eac849e6f00af3  libgo/go/math/rand/race_test.go
! 5fe814c0e05e90aba655765e64eeb758  libgo/go/math/rand/rand.go
! d0f8babe95d6ec3f4c604aa040fcd320  libgo/go/math/rand/rand_test.go
! f52f6ce8819488b8c905b45bf14a99ef  libgo/go/math/rand/regress_test.go
  4444c401b5103a0852eadd57d6374050  libgo/go/math/rand/rng.go
  c59029181577bcda5df58a7de276fa63  libgo/go/math/rand/zipf.go
! d62557a053d2670ffc5261446965ea29  libgo/go/math/remainder.go
  a029fa437e4ae151a70522e359e9c3d0  libgo/go/math/signbit.go
! f40964ef0dc728f56b49fdf90cbb42fc  libgo/go/math/sin.go
  c557575561d914fb0897682f2026c02d  libgo/go/math/sincos.go
! 6e0dedf59fbee22e7195d3f4a5c15505  libgo/go/math/sinh.go
  2a25de3c788f51c27f4e6fe380a7fd06  libgo/go/math/sqrt.go
! 7dcae2cf752fd8140a2c21fc6f051925  libgo/go/math/stubs.go
! d45113678d3134fa2b16082a0fb413d2  libgo/go/math/tan.go
! 8ab63fb6e5eca79bfefd739029b04a72  libgo/go/math/tanh.go
  1a19326370f789fa184010859c26b09b  libgo/go/math/trig_reduce.go
  75063090695c29e729302c292798d6b8  libgo/go/math/unsafe.go
! 30770f09aa207ac85d6f6d831c1b33bc  libgo/go/mime/encodedword.go
  2f4b629d6238da024f3eeac6cc62bf87  libgo/go/mime/encodedword_test.go
  8f95cf63e95b52f170e1ca0a638759d9  libgo/go/mime/example_test.go
  e646cecd5158e36054301b0bb6704adf  libgo/go/mime/grammar.go
! 4d2e3532f4ae30cae3f213a58c70c8cd  libgo/go/mime/mediatype.go
! e27b1092d604255bf6408c8b37875bdc  libgo/go/mime/mediatype_test.go
  d1439d295d145e849ac1e4f9c013213f  libgo/go/mime/multipart/formdata.go
  60f83992f660d8c19a49229c288f8652  libgo/go/mime/multipart/formdata_test.go
! 353b8237393b21099ba292c5e69b6dc7  libgo/go/mime/multipart/multipart.go
  e937bf46ab349c3e5a1e7332d599abc9  libgo/go/mime/multipart/multipart_test.go
  ea13f3c87e9a921a7368f85cd6ae67d3  libgo/go/mime/multipart/testdata/nested-mime
  29d0c21fd543ed7cd2aa15cc6c447899  libgo/go/mime/multipart/writer.go
  b91db6ffe7fd90e987e8e97afb54f235  libgo/go/mime/multipart/writer_test.go
  8b858169302a8d76b5045883818ecafa  libgo/go/mime/quotedprintable/example_test.go
  4be366c0b9637966fe48a68be687ecb0  libgo/go/mime/quotedprintable/reader.go
! 59e1b33e5fc2e74bbb208c1ce73566e6  libgo/go/mime/quotedprintable/reader_test.go
  9a7a8fa0c7feea3bba71fb7f409edf6a  libgo/go/mime/quotedprintable/writer.go
  0b8baa2e929c511c094acfcefdd96fa9  libgo/go/mime/quotedprintable/writer_test.go
  d7c2d693b83d74f542553f24afe3d013  libgo/go/mime/test.types
  d7c2d693b83d74f542553f24afe3d013  libgo/go/mime/testdata/test.types
+ 4e12507c464865b7b3312a94b39cb520  libgo/go/mime/testdata/test.types.globs2
  452e5eefd1071c8538b9315a6439994f  libgo/go/mime/testdata/test.types.plan9
! 208df0449507555c23863f8a6b09cf1d  libgo/go/mime/type.go
  38cd804ecac4484ac521d769afedbefb  libgo/go/mime/type_dragonfly.go
  38cd804ecac4484ac521d769afedbefb  libgo/go/mime/type_freebsd.go
  eaef28a4e56cbee96692095f999e83f8  libgo/go/mime/type_openbsd.go
  5decf13646968cfa0292bce1e80d78da  libgo/go/mime/type_plan9.go
  b2404ba91edcd277d3a8364c4fb803a3  libgo/go/mime/type_test.go
! c418623b9cca1129a770ea7edc727dc5  libgo/go/mime/type_unix.go
! 3d2021ccbc1bfe5381c6efcff907f28f  libgo/go/mime/type_unix_test.go
  3bdf5598271fa2c31d7b55137192c950  libgo/go/mime/type_windows.go
! 22d80a82f2c8f2ce68d890aa1abf1cf7  libgo/go/net/addrselect.go
! 3121239894eaeb205a08645935894636  libgo/go/net/addrselect_test.go
! 9768723f6e8bad040c29a8f2449c2be9  libgo/go/net/cgo_aix.go
! 4902a5b2b953b93454650170e53afdd7  libgo/go/net/cgo_android.go
! fcf6985e049063141813ceae26a8f890  libgo/go/net/cgo_bsd.go
  3ad0daa8a9c4bfe13f484111c762dc4b  libgo/go/net/cgo_hurd.go
! 8470525dabae275495db13bfdd909f46  libgo/go/net/cgo_linux.go
! ab08eb1fb52095ff707963f26266b367  libgo/go/net/cgo_netbsd.go
! 9178ca59b3015002ce0bd8fde3e66c5f  libgo/go/net/cgo_openbsd.go
! fe2e8ba4eab19e164cb9d6d284082ff4  libgo/go/net/cgo_resnew.go
! c96985ce7adb6f2f7c32b1ac542ece6d  libgo/go/net/cgo_resold.go
! 10744f80e100a2d2a70f1ec0e2648adf  libgo/go/net/cgo_socknew.go
! 1468a300a297eb486a660773528673dc  libgo/go/net/cgo_sockold.go
! 0b2650986c6756c340f326f3dfda3c12  libgo/go/net/cgo_solaris.go
! 641ae552642aacfff0b9c1e81740f9e8  libgo/go/net/cgo_stub.go
! 78933e5c6c673fab89640b4589148e0c  libgo/go/net/cgo_unix.go
! 4b22ffe2facaadeb3ff6b823bd16a089  libgo/go/net/cgo_unix_test.go
! fb31fbab88c7af58fe48b6a520681920  libgo/go/net/cgo_windows.go
! f029240cdc06d68c3332f12928b4b952  libgo/go/net/conf.go
! ad5cd7a9bb0d218c37600dfdb52c56b7  libgo/go/net/conf_netcgo.go
! a31fe6d69f68a715b30208a2e6eccdd3  libgo/go/net/conf_test.go
! 078fbf2457005816d3a16410e245c4da  libgo/go/net/conn_test.go
! 138556158f8720ce415ca4b700948e48  libgo/go/net/dial.go
! f107ea12ecf6e621ab75d91577999d42  libgo/go/net/dial_test.go
! f3eacf4acfc2697490feea5681591eca  libgo/go/net/dial_unix_test.go
! 1e8d42681ba0581f0e47625dfc6fce6a  libgo/go/net/dnsclient.go
  0633848b8fde9f29e6590c6dfa02fcd7  libgo/go/net/dnsclient_test.go
! a626b2138ab18b4bd5f19bd337d699e4  libgo/go/net/dnsclient_unix.go
! b7bc5d1dee9906d91101c05a00fa356a  libgo/go/net/dnsclient_unix_test.go
! f4598e06d46af0e89a92073c7c1501d3  libgo/go/net/dnsconfig_unix.go
! f658faa52da5424870cae25f571af9da  libgo/go/net/dnsconfig_unix_test.go
! 19fc88d8700e475257dd9e4523bd4bfa  libgo/go/net/dnsname_test.go
  2a09c424c0d8d80ffe611262a6e281a8  libgo/go/net/error_plan9.go
! c8138226ace3705256fd8a1f91300380  libgo/go/net/error_plan9_test.go
! 77f2d286a198e89cdfe3476b9498424a  libgo/go/net/error_posix.go
! d5b4bf8ccd8c564626b9673368d0d0f5  libgo/go/net/error_posix_test.go
! 25efc2164ec1f418796fcf12e55d0f62  libgo/go/net/error_test.go
! 34e874cae2756940131db775fb572dab  libgo/go/net/error_unix.go
! b12228f1ef95390d7282585e519ce783  libgo/go/net/error_unix_test.go
  074802dcbd0d547811a910e495d18a14  libgo/go/net/error_windows.go
! 29082a1675efc4c714cf2a0800afb89d  libgo/go/net/error_windows_test.go
! c65600808dd4a09298fc9da074390bc5  libgo/go/net/example_test.go
! 19f294ef336651022fc22eaf3fca137a  libgo/go/net/external_test.go
! 4e543a30f810c327f13aa3ae3f30b5f4  libgo/go/net/fcntl_libc_test.go
! 3d18494ff1906837a78759acb37a1577  libgo/go/net/fcntl_syscall_test.go
  365593e80afb253f235bba55f42b21d1  libgo/go/net/fd_plan9.go
! 8928b26bf83f7f09f4cc1416408c6803  libgo/go/net/fd_posix.go
! d58a8d104a831c2b3b2adbd9ae302116  libgo/go/net/fd_unix.go
  e62732711509abc471f5330f0ac38eaf  libgo/go/net/fd_windows.go
  fa04cee92dab65f8128b73a7a36408ae  libgo/go/net/file.go
  13ecb88d7305a09023afffde195e7c15  libgo/go/net/file_plan9.go
! 7b7f4f6e6141febc915a465ceea1d69d  libgo/go/net/file_stub.go
! 2e0af1f6044739985b08fee695bfe980  libgo/go/net/file_test.go
! 55a4465b479145cac26f018fe45f1e25  libgo/go/net/file_unix.go
  30876c1c5f58de3543d36ef2d38f4825  libgo/go/net/file_windows.go
  2ca32936d37eee699023f6a5089472cc  libgo/go/net/hook.go
  ab6b66c47d7fc39618c8a400cd48a24e  libgo/go/net/hook_plan9.go
! e5d6fa1533adc69c701e355a0e8c6eec  libgo/go/net/hook_unix.go
  f2e6fabae4c9d246bdbd8ff254f4e096  libgo/go/net/hook_windows.go
! a607707e00954f4f2569e79b71689ef1  libgo/go/net/hosts.go
! eae6444b340363d78a54a2ad7833097c  libgo/go/net/hosts_test.go
  77e1fec0f3af1cf49701683f11039637  libgo/go/net/hosts_testdata
  7641f03b37990656f1576a2bacf8f7ca  libgo/go/net/http/alpn_test.go
! 236acaf6f53ee8fb14762047b04a3d1c  libgo/go/net/http/cgi/child.go
  8a0a6010ff8d3d98ef12c353d26c2bef  libgo/go/net/http/cgi/child_test.go
! 369a8beab70162d93c34694541e5703f  libgo/go/net/http/cgi/host.go
! 2e47af4ada698b80bc390ac5500278b1  libgo/go/net/http/cgi/host_test.go
! 67730d23fa0303d516e447e8670525df  libgo/go/net/http/cgi/integration_test.go
! b0493da6cf36f597e4322fc6facd499a  libgo/go/net/http/cgi/posix_test.go
  d7e85fa43c940035f4594614307de77a  libgo/go/net/http/cgi/testdata/test.cgi
! deef1dfbb1a0ae1c96c61ecfbec9e8a2  libgo/go/net/http/client.go
! a28c7c1228a649f8b7406874da1db3b6  libgo/go/net/http/client_test.go
! 0fa0b16c7446f39f94668e65b37c5a43  libgo/go/net/http/clientserver_test.go
  32dab4fc96751b3b271a3658a6b16d69  libgo/go/net/http/clone.go
! d0d509e09871ab865efbf95f894f8afa  libgo/go/net/http/cookie.go
! d55f8b340e133b91e81e8851d3e39081  libgo/go/net/http/cookie_test.go
  42a80d5d3ffd56144396086e16a507bd  libgo/go/net/http/cookiejar/dummy_publicsuffix_test.go
  989022b325e93055d5d7ca0fe4e5ebb7  libgo/go/net/http/cookiejar/example_test.go
! 69ce60b3312ef610dfe6d61cb4967b4c  libgo/go/net/http/cookiejar/jar.go
  8c7a7c09f9bae622b62ae1560f37fdef  libgo/go/net/http/cookiejar/jar_test.go
! 7a37797f32087226bc13d81e84d1ad3c  libgo/go/net/http/cookiejar/punycode.go
  fabfb997332db4db285c4a3beaa6d742  libgo/go/net/http/cookiejar/punycode_test.go
  9076d9db46c1c4ade79461dc62bd4dbe  libgo/go/net/http/doc.go
  5b6a21d31e80ad6c19a58345aee58ac6  libgo/go/net/http/example_filesystem_test.go
  e79282f8a2abf5d53e71a8b587b0ad95  libgo/go/net/http/example_handle_test.go
! 3637c65d5cba72270ab0fca68010ea20  libgo/go/net/http/example_test.go
! 6129d044889cc17f4150a0be86de684f  libgo/go/net/http/export_test.go
! dd437717c238018b0a974edf85a9d920  libgo/go/net/http/fcgi/child.go
  47202d325ac9d95c70abeaaaffc8dd61  libgo/go/net/http/fcgi/fcgi.go
! 8c72273b8c0c85f15086d9857aca120c  libgo/go/net/http/fcgi/fcgi_test.go
  8f307dd7176f148925a44be015c37dba  libgo/go/net/http/filetransport.go
! b457cb647ee4feb0a025c03e405bd15b  libgo/go/net/http/filetransport_test.go
! 71136762de61bad6c421cb5c329b4fe8  libgo/go/net/http/fs.go
! b2803f341e84aa634e1574b1e9f40a98  libgo/go/net/http/fs_test.go
! e4f4a630920c560ae95d5728a70d80bf  libgo/go/net/http/h2_bundle.go
! eb0eb3e3c5cf088d3dc94f8807805214  libgo/go/net/http/header.go
! bff59a8cbcd1536f1963f3add546e4ef  libgo/go/net/http/header_test.go
! f80fe06e5e6ba5218a37b2428a726429  libgo/go/net/http/http.go
! ffb25ef234088cb7fdc523d31eabedb4  libgo/go/net/http/http_test.go
  d499dfabe7114254ee6c46aa0aa60af6  libgo/go/net/http/httptest/example_test.go
  14ded6bb454b765d7cce0dfb77fd49cb  libgo/go/net/http/httptest/httptest.go
  7d91e33ce6d2d5af37024f317fbd7e86  libgo/go/net/http/httptest/httptest_test.go
! e0c44078a181f2b8b201d0710060e258  libgo/go/net/http/httptest/recorder.go
! fef3c0f2f9911639e9c67b532ace7e03  libgo/go/net/http/httptest/recorder_test.go
! 1fa9e75e688a6e87f8331679519bcad5  libgo/go/net/http/httptest/server.go
  4fe7875d8475b243712d3ef4d379999a  libgo/go/net/http/httptest/server_test.go
  e6dc64cdeb8c4ccdf9e88fdb0d4587ef  libgo/go/net/http/httptrace/example_test.go
! 67008bb7346df0ab9326a491332f35c8  libgo/go/net/http/httptrace/trace.go
  bb2a61d61c614a20bfdef885c91bb578  libgo/go/net/http/httptrace/trace_test.go
! 34cf56614589d68bea4e5a3ae3afb46b  libgo/go/net/http/httputil/dump.go
! dffd105c52b8430877f6e58f36b72f1a  libgo/go/net/http/httputil/dump_test.go
  48c8628596e0db641a910479cbc95c60  libgo/go/net/http/httputil/example_test.go
  621fc522707bcfe96838d2f35ff32e29  libgo/go/net/http/httputil/httputil.go
  8fcb758f622f8024b45c670f5c214f6a  libgo/go/net/http/httputil/persist.go
! 5c0d6034136ff822854857823341ca58  libgo/go/net/http/httputil/reverseproxy.go
! 8110a5b7bd383239ecfbc11e9c711c9d  libgo/go/net/http/httputil/reverseproxy_test.go
! f8457a3be8146d3e514d539a5641ac3a  libgo/go/net/http/internal/ascii/print.go
! 686e9f3df59d834c6a0318d48ff97cad  libgo/go/net/http/internal/ascii/print_test.go
! f39f8a43a6adc6fe4b1f9d5e0f5e2b41  libgo/go/net/http/internal/chunked.go
! e08c168aa7ff15bdab98d60635b392ed  libgo/go/net/http/internal/chunked_test.go
! ede634b680f9a2b9039325e5b742e171  libgo/go/net/http/internal/testcert/testcert.go
  0f1b2ae9b087721dc8d532479b919c2e  libgo/go/net/http/jar.go
! aedb9655fdf5ff5ccef212a5d23a2e4d  libgo/go/net/http/main_test.go
  5b196501ffa7d98bd91bcb0561952a22  libgo/go/net/http/method.go
! 5fd858051540940e71da777a60213419  libgo/go/net/http/omithttp2.go
! 801b3080f754db22ecaa802b33f1a2bc  libgo/go/net/http/pprof/pprof.go
! 2ba16769b997e1f4aceec5c1ad10d2f2  libgo/go/net/http/pprof/pprof_test.go
  f13e1f63c322e94e3b907d6caf09d25e  libgo/go/net/http/proxy_test.go
  9a78c894b9046071d6fd6ecaaaa1537b  libgo/go/net/http/range_test.go
  f3a20b03b94a0865bbeeda0f2076d3f2  libgo/go/net/http/readrequest_test.go
! 0b691247e7d50c879aa9f2b35c07c8d5  libgo/go/net/http/request.go
! 056f492ea4979f5d889f240c6d475bfa  libgo/go/net/http/request_test.go
! c3bb0908dbe88d4c24c58e81afdf3359  libgo/go/net/http/requestwrite_test.go
! 0e58ff80f1d9f102820acd2b53b5be69  libgo/go/net/http/response.go
! 98eda74917cd080414d93f87608672b0  libgo/go/net/http/response_test.go
  49c49d05c7a8ac63eff2062c67e065f5  libgo/go/net/http/responsewrite_test.go
! 4105bcfc4da296812413107c957e5f2e  libgo/go/net/http/roundtrip.go
! 05cfff9b08a3d1bfd26f8db2ad267657  libgo/go/net/http/roundtrip_js.go
! 1a6441fc5f3bd5c05b4d8437a2e44693  libgo/go/net/http/serve_test.go
! 94276d3459f51afc80bc5de3ec063464  libgo/go/net/http/server.go
! b0d22f9cd56b56b4bfae99915de244a8  libgo/go/net/http/server_test.go
  ddf3c49d88c56a8d67fb809980cb20b6  libgo/go/net/http/sniff.go
! 357ec0eeb2b281acdd2ff6fb6b6e4813  libgo/go/net/http/sniff_test.go
  743834de0c5c3afe182870b421463ea7  libgo/go/net/http/socks_bundle.go
  959838655df79dd1948d8a7e1e954196  libgo/go/net/http/status.go
  3749f52bb326ae96782b42dc0a97b4c1  libgo/go/net/http/testdata/file
  39bf3a5cbcd978e0d9a9bab0f27787b4  libgo/go/net/http/testdata/index.html
  746f7bd76da133c7035108d0053a7e79  libgo/go/net/http/testdata/style.css
! 22ab95d1261eba3314825d225179b5d6  libgo/go/net/http/transfer.go
  a27ef4ea99a47c5dd4df08d6a6f4b15d  libgo/go/net/http/transfer_test.go
! a2d0e5e396aa7ef0adf69e466ece0dfb  libgo/go/net/http/transport.go
! 21799e63104363bc404f9edc08139a46  libgo/go/net/http/transport_default_js.go
! 148d7a35cdecd49956e72d690d3fbbcd  libgo/go/net/http/transport_default_other.go
! c9f949c49180331f27bea7dcc26a4960  libgo/go/net/http/transport_internal_test.go
! fe0eda1ce0318f348aa6c30e95ca0193  libgo/go/net/http/transport_test.go
! 2a731b28bc90225a8de0a66c3a5a5dde  libgo/go/net/http/triv.go
! a51c9d222f1a013a5907a4fb2337c358  libgo/go/net/interface.go
! fd91081ba9395f170b367407e396e4c4  libgo/go/net/interface_aix.go
! be43b3bed35d62dcf7e084bcbcc6c8d8  libgo/go/net/interface_bsd.go
! 244ccb7bcff2870a68794d5d67f31407  libgo/go/net/interface_bsd_test.go
! 9049243627b6fae2d66a3a4fba3aed0b  libgo/go/net/interface_bsdvar.go
  dc7ca7365edbede73daa0b1b5b4891c7  libgo/go/net/interface_darwin.go
! ec6a30e1c56cb7de193d15ac4b440162  libgo/go/net/interface_freebsd.go
  477b4e2fff4f36318811b100f7cfcac9  libgo/go/net/interface_linux.go
  bd00334720a282bfa3655af3d4587339  libgo/go/net/interface_linux_test.go
! d9b6401e3c9e83ae3865e2a9d89dee75  libgo/go/net/interface_plan9.go
  e44f73a9ea0f4a7121fbd349ef32d47e  libgo/go/net/interface_solaris.go
! ac5580f7b3040a6d7b83cf6f76c688ac  libgo/go/net/interface_stub.go
! 6d348ccf1d25ffcd4c9a12077fef0cac  libgo/go/net/interface_test.go
! ac148c112091f12260212c79a509ce36  libgo/go/net/interface_unix_test.go
  f2ec265e092f0d8906570a8593fd766d  libgo/go/net/interface_windows.go
! 138cf7a5cfa1d1f5b0f6b65b55da8d7c  libgo/go/net/internal/socktest/main_test.go
! f1a53d2b068578a5763ded9d39d8e810  libgo/go/net/internal/socktest/main_unix_test.go
  2cfc75a60347ce6dc6ec6e2bbbbdf587  libgo/go/net/internal/socktest/main_windows_test.go
  7191d08be01ea5c2171a415596ae18e9  libgo/go/net/internal/socktest/switch.go
! 561d16edf38b367e4a77b199cc0b43fc  libgo/go/net/internal/socktest/switch_posix.go
! 3d162c84b240b074bbe52836d3d1c766  libgo/go/net/internal/socktest/switch_stub.go
! 6bbb6c2512c14e9d2a67933dd4a2f85d  libgo/go/net/internal/socktest/switch_unix.go
  e545fc02b83eb3d301779219574da8e8  libgo/go/net/internal/socktest/switch_windows.go
! b7a195ab189bce48940a73257a16fef8  libgo/go/net/internal/socktest/sys_cloexec.go
! 340af8be181c06cab6486b0d7c1c2e63  libgo/go/net/internal/socktest/sys_unix.go
  a9793c2001dcdbae6de26c3126bfc146  libgo/go/net/internal/socktest/sys_windows.go
! dec0191fdab02cc41080d2652d8becaa  libgo/go/net/ip.go
! da96c955ef0af9a749b6fa06a2c0a7bc  libgo/go/net/ip_test.go
  998f95960c278185cc6ef75d037c1066  libgo/go/net/iprawsock.go
  5ddf25949204389f7e9f8cf2aafc14bc  libgo/go/net/iprawsock_plan9.go
! 1712f645192563f0803edb6149598fc0  libgo/go/net/iprawsock_posix.go
! 08548c2b799361bd77e33509bc2356f1  libgo/go/net/iprawsock_test.go
! 8f2b6af3e44d9de057e4f5b666d71fd9  libgo/go/net/ipsock.go
! e9aaa48d06f60abed6e13371cb909363  libgo/go/net/ipsock_plan9.go
  a3a7e158b19729a1ade563770da81985  libgo/go/net/ipsock_plan9_test.go
! 13847e1a5f86be160926a457b99fee51  libgo/go/net/ipsock_posix.go
  07e3ace72b261ace00842ec4e545cca4  libgo/go/net/ipsock_test.go
! 8bffff12aad89ba26349f9df99a8384f  libgo/go/net/listen_test.go
! e7d5a605f60d4da5b928bf62d01da179  libgo/go/net/lookup.go
! a248b2d5862554be0b4d4db3ac9e08fb  libgo/go/net/lookup_fake.go
! 9916b263d76db0e202b8537dbe8df7d6  libgo/go/net/lookup_plan9.go
! 580cf0a1f6e18c67916a2bef242c9d4e  libgo/go/net/lookup_test.go
! 9e29560358cc2b812823083afb74d6c9  libgo/go/net/lookup_unix.go
! ddf66dd0ef5ee3aa4fd373f30d8bfb07  libgo/go/net/lookup_windows.go
! d2e524d5d50a63b72656173a216a9eeb  libgo/go/net/lookup_windows_test.go
  4b90d898a40af43e323c8bf7a6bda41f  libgo/go/net/mac.go
  3fd6cf58c362824035b77585d22e8a7c  libgo/go/net/mac_test.go
  97a3035d50497940cc9f6f0344d20570  libgo/go/net/mail/example_test.go
! da4e2bacf1a53ec8920d7f7a21cb9d57  libgo/go/net/mail/message.go
  b13090c48e676c8ceb99d0825a76f9b1  libgo/go/net/mail/message_test.go
! 8b694382c9eb743aed3bf3ede55833d6  libgo/go/net/main_cloexec_test.go
! e2d1331f45a15785ac005d13ea552eb9  libgo/go/net/main_conf_test.go
! 48fa554334ed48faf60e9c1eef070cdb  libgo/go/net/main_noconf_test.go
  eda73809fd6152fe3ad6d2d02e53b5a2  libgo/go/net/main_plan9_test.go
! 184da985ac4ca203a4281288ef70872f  libgo/go/net/main_posix_test.go
! c47301eb5ea282cdabb5547eaea3ed3b  libgo/go/net/main_test.go
! 5f1886194bf17fdad266dd0a011f5ab3  libgo/go/net/main_unix_test.go
  843c1a9e232c2fedc1f7c555559b8dc9  libgo/go/net/main_windows_test.go
! 55d4dce3fbced57889bdefa03801bd80  libgo/go/net/mockserver_test.go
! d26e2902b71bec2d874d7359cf87a8f5  libgo/go/net/net.go
! 6f57f3158841eb52297729d85c19d2bb  libgo/go/net/net_fake.go
! 37884ce0c70c0d27171ba01d8b9465bd  libgo/go/net/net_test.go
! 90b6c2f4b60fe3330077e2ac76e666c6  libgo/go/net/netip/export_test.go
! 8d17ceb025543bdc8027d83c1ecdf5ce  libgo/go/net/netip/fuzz_test.go
! 4a31d5cfe90e6864a76f6dc13ab37e2e  libgo/go/net/netip/inlining_test.go
! 0b39d9e0ee71a3e4f2fea3c3073c93b8  libgo/go/net/netip/leaf_alts.go
! 541a5776d87482223bc945186b8aecd4  libgo/go/net/netip/netip.go
! fc6c3364c163bc98a63a39ed3737cc5d  libgo/go/net/netip/netip_pkg_test.go
! 207a72deedce911f6cd53ecfe27d5b62  libgo/go/net/netip/netip_test.go
! 25d44a2d697d2ca21a1bfc047ab30c07  libgo/go/net/netip/slow_test.go
! b9ea70188657148f8697b0fe064635eb  libgo/go/net/netip/uint128.go
! 6fa322865311dccc18dbf2de12697e98  libgo/go/net/netip/uint128_test.go
  d20ac26330c1e6fa5c87a58b79711acf  libgo/go/net/newpollserver_rtems.go
! ec567ff7407f83d00496940066b3bfad  libgo/go/net/nss.go
! 5921be2978101c7f244b17755f39db1f  libgo/go/net/nss_test.go
! dc02e521c42be4aeb5dbe6e10a7a6d57  libgo/go/net/packetconn_test.go
! 9f16ed9684474390dd95fb18d181125a  libgo/go/net/parse.go
! 716dd83360d9fe951055284ddbf69984  libgo/go/net/parse_test.go
  0dde92b72eee0cc50fe8bf91e5cd62b5  libgo/go/net/pipe.go
  55cefd2dfaea8ff7cf1fdd39074d09f1  libgo/go/net/pipe_test.go
! 7c9f1eeb0c336b228dd413a0c6239493  libgo/go/net/platform_test.go
  af34e67f238a3a08bbeefc6183d29db7  libgo/go/net/port.go
  978481de9c29c13c4a16a3830071185b  libgo/go/net/port_test.go
! 471d3aaff98357f6a3ceafb379e7f5d5  libgo/go/net/port_unix.go
! 2a5ad5d842943bd24e320e414a54fffe  libgo/go/net/protoconn_test.go
  9687c28f5dc92a1da123e0e1274acc81  libgo/go/net/rawconn.go
! 528be5e3cf061253bce25306061bccb3  libgo/go/net/rawconn_stub_test.go
! 71674314c0386ae60cbbbecb2f54d26b  libgo/go/net/rawconn_test.go
! 704e222eda3260471a84bf50c76613b0  libgo/go/net/rawconn_unix_test.go
  e4e0d447c40a040fd3332598398f8bda  libgo/go/net/rawconn_windows_test.go
! f85750de3a3f0195d38bfbbe19cb3241  libgo/go/net/rpc/client.go
! 9d8fc8f482e73cf841cbfd79614d4e80  libgo/go/net/rpc/client_test.go
! 8201bbf261e0d5a00cee90aa48d5e113  libgo/go/net/rpc/debug.go
! db3b53c86cdcb74226234510dd2328b9  libgo/go/net/rpc/jsonrpc/all_test.go
! 4cb3f7edeb38a87280845cdcb887a488  libgo/go/net/rpc/jsonrpc/client.go
! b7d9de7a9557ce7cbd9fa024b4177d37  libgo/go/net/rpc/jsonrpc/server.go
! 6e1cf2a8b116c7d01b9d863ca94d8f24  libgo/go/net/rpc/server.go
! f2b4e2b05da3ec2a3219e0195b0cc005  libgo/go/net/rpc/server_test.go
  5b3add5c4e27bfd2da9536ec88fd597c  libgo/go/net/sendfile_glibc.go
! 740873c48643d505b45b5c917c4c4583  libgo/go/net/sendfile_stub.go
! cc1fcead627f7f7929bdd36bbe960af1  libgo/go/net/sendfile_test.go
! 18257a8395f7e2fd1d9523a608dfd68a  libgo/go/net/sendfile_unix_alt.go
  cd44d6ae6b2b3350bbed7ebd04f4dce9  libgo/go/net/sendfile_windows.go
! b4a90a9ad1703fedd745b3e59e9ccf68  libgo/go/net/server_test.go
! e60de8db95f2699f0254f3f8a0b2087c  libgo/go/net/smtp/auth.go
! f85a5dfa75ae3728a1850f7a034f3afb  libgo/go/net/smtp/smtp.go
! e4466aacff3051304a8898fef057f431  libgo/go/net/smtp/smtp_test.go
! b29dbb3b56e6f270c73f1c63e979a411  libgo/go/net/sock_bsd.go
! 0ec8d59dfd88d8f12785a13ed7971dab  libgo/go/net/sock_cloexec.go
  bbe86caad9d84d107df292439d1d69c8  libgo/go/net/sock_linux.go
  4dfe461cfa55fc62cdae8eb9e1e0ef51  libgo/go/net/sock_linux_test.go
  1745a4c17a11526e5b5264cf29f14a19  libgo/go/net/sock_plan9.go
! f3dbf3e7b68346a466a7962ff0b67454  libgo/go/net/sock_posix.go
! 6d22c88ee992a51c4745f4f79cfeae91  libgo/go/net/sock_stub.go
  586c6c2dbd46b409eaa254d4303aa799  libgo/go/net/sock_windows.go
! 921f717722a667bf5270deceaab3241a  libgo/go/net/sockaddr_posix.go
  f71881b3b43b5c24b0772a7110d2db94  libgo/go/net/sockopt_aix.go
! f10ba30ca6cd4ec72f097a9a18b6bf1b  libgo/go/net/sockopt_bsd.go
  4fa5f3d74893806406fe9266c7e8201d  libgo/go/net/sockopt_hurd.go
  871c2b92d28844e6b3a518641592cdcd  libgo/go/net/sockopt_linux.go
  144c11ac9965aac68530e61d45bc93d7  libgo/go/net/sockopt_plan9.go
! 4515a4ba0e5b3cfb7689eaacb34a449f  libgo/go/net/sockopt_posix.go
  871c2b92d28844e6b3a518641592cdcd  libgo/go/net/sockopt_solaris.go
! a9ffad619f6ca68bd1f3561ca449e246  libgo/go/net/sockopt_stub.go
  ea9c79e5f89d2b3b71ce5fc2ad519cc3  libgo/go/net/sockopt_windows.go
! 6acd640e4d1cadeec6122b7595604db0  libgo/go/net/sockoptip_bsdvar.go
  f8ae591103e20a0aa91d07b395965ad0  libgo/go/net/sockoptip_linux.go
! 65bf247c340d36b35235a193da693f69  libgo/go/net/sockoptip_posix.go
! da278fce5c75d2098b1477721ad3e854  libgo/go/net/sockoptip_stub.go
  b5ee6bc6eee276205750c472b9ad6015  libgo/go/net/sockoptip_windows.go
  bcaaea0fe67ed1bc11479f252d3b02ff  libgo/go/net/splice_linux.go
! 0e04612d290e497c5c85378053035d86  libgo/go/net/splice_stub.go
! cbacfccd44ea7a914a791bb43474ee97  libgo/go/net/splice_test.go
! dc08ca1a8157109b8ff7ee46b7f59730  libgo/go/net/sys_cloexec.go
! 3386d14b175df11ffc12a55494067030  libgo/go/net/tcpsock.go
  590c0b4812a9fca1e6b798b2ac528eb2  libgo/go/net/tcpsock_plan9.go
! 91c29f855a710020bcbf130956339a2e  libgo/go/net/tcpsock_posix.go
! 0af64b3bb47aeceeb6dca000a9998fd6  libgo/go/net/tcpsock_test.go
! 8916826d36cd69ed6f987b4411544e57  libgo/go/net/tcpsock_unix_test.go
  b4c87ff0d2bd706fcee868a0365d87e2  libgo/go/net/tcpsockopt_darwin.go
  bac7765c9de9a68ea328de1d96e6093c  libgo/go/net/tcpsockopt_dragonfly.go
  dacd4b8cac046d51733a60b7993760bc  libgo/go/net/tcpsockopt_openbsd.go
! 2560dd3a57a8bd8a896cd068a9216d40  libgo/go/net/tcpsockopt_plan9.go
! d52724e0e7c4a80965aed0cf66687f41  libgo/go/net/tcpsockopt_posix.go
  e526323509d64c80d7cddd8d5794b86b  libgo/go/net/tcpsockopt_solaris.go
! 9ef4d9246b1ab0c582dd7f10b233081a  libgo/go/net/tcpsockopt_stub.go
! 64cb561c1dde16388607b4d1caf427e6  libgo/go/net/tcpsockopt_unix.go
  ff96bd74553ff3df0429fdc30e0bb074  libgo/go/net/tcpsockopt_windows.go
  f7acb47d9b57c691e05f51045394b28a  libgo/go/net/testdata/case-hosts
  15f42fa12b09b82e46f6c34644fca530  libgo/go/net/testdata/domain-resolv.conf
*************** e7c1c6cf342a50bccdd8fc3f3633d48e  libgo/
*** 92424,92430 ****
  2ed3fc440e799eb489bd3308adff0e57  libgo/go/net/testdata/igmp
  4ffe1a59695f13c8a17af741b859aa19  libgo/go/net/testdata/igmp6
  7ceb9e6e1f5201ad42d1675b6fab9af4  libgo/go/net/testdata/invalid-ndots-resolv.conf
! 454806711db2c79c01eddf2a14455e89  libgo/go/net/testdata/ipv4-hosts
  af4f8b535329f3f6dc24498c34abdb75  libgo/go/net/testdata/ipv6-hosts
  ab0cb6078f2ef064ab47539f886f8271  libgo/go/net/testdata/large-ndots-resolv.conf
  14176fd622372e71dd98c1ff51c289d0  libgo/go/net/testdata/linux-use-vc-resolv.conf
--- 98910,98916 ----
  2ed3fc440e799eb489bd3308adff0e57  libgo/go/net/testdata/igmp
  4ffe1a59695f13c8a17af741b859aa19  libgo/go/net/testdata/igmp6
  7ceb9e6e1f5201ad42d1675b6fab9af4  libgo/go/net/testdata/invalid-ndots-resolv.conf
! 4ae04988cbeb23ba5e0001d5808373e4  libgo/go/net/testdata/ipv4-hosts
  af4f8b535329f3f6dc24498c34abdb75  libgo/go/net/testdata/ipv6-hosts
  ab0cb6078f2ef064ab47539f886f8271  libgo/go/net/testdata/large-ndots-resolv.conf
  14176fd622372e71dd98c1ff51c289d0  libgo/go/net/testdata/linux-use-vc-resolv.conf
*************** e13c881c9e7511c475dd3f538224a427  libgo/
*** 92439,92466 ****
  4c9f815b1e71d6207f3b7efd42d8a7e1  libgo/go/net/textproto/header.go
  8783131de6323dff01565b3ceeef7ca8  libgo/go/net/textproto/header_test.go
  cd367df6141c293f6de3d7c4cc7a6d27  libgo/go/net/textproto/pipeline.go
! b84fd4ec62e901b54f89544fd33a008d  libgo/go/net/textproto/reader.go
  32e7cdd3cb6c5f342526eb69944abb17  libgo/go/net/textproto/reader_test.go
! 4129d0642056114957236c93c22da284  libgo/go/net/textproto/textproto.go
! 220484e40709e9b5cfa2e19c378261c2  libgo/go/net/textproto/writer.go
  8b533b1a06afed0dd5623c6d71e17a67  libgo/go/net/textproto/writer_test.go
! 91ca49062084f4d0b81c8a02c1df1728  libgo/go/net/timeout_test.go
! 90883586911f67bd0a8ee43ef7b7e3ea  libgo/go/net/udpsock.go
! cad4aba219f3d37debd02fa5a2145104  libgo/go/net/udpsock_plan9.go
  52ae31ea57d0a3db86f7e56b742ca851  libgo/go/net/udpsock_plan9_test.go
! 039d2ef9980a4fc6029c5fd95bdd5d73  libgo/go/net/udpsock_posix.go
! fee3d419dc3b6b719876d42aeea59e06  libgo/go/net/udpsock_test.go
  9d022bcb6a4950adc68c82457408b40f  libgo/go/net/unixsock.go
  3e9fbd3d3c9a4def683ac7883c6ee147  libgo/go/net/unixsock_linux_test.go
  781514566fecf6fcd07ae118be60fa47  libgo/go/net/unixsock_plan9.go
! e4b717b3f3e05ba9656fd62d6d25fc9f  libgo/go/net/unixsock_posix.go
! afb49b60b746f2950f962ec865d628dc  libgo/go/net/unixsock_test.go
! 199a4e85dfa65f1cc5901d3b04f2f6dd  libgo/go/net/unixsock_windows_test.go
! 58dce64a99ad9b2491e2a20b3afc8b82  libgo/go/net/url/url.go
! 7bc31ec2672ffe642606c9598314e0a5  libgo/go/net/url/url_test.go
! 01c834d311c610d1b73b61b2d9f41f3e  libgo/go/net/write_unix_test.go
! e70fe5f2b31986a201168b6ae8a9f865  libgo/go/net/writev_test.go
! 3bc4f2305d4cb646325567ac8b4a2f89  libgo/go/net/writev_unix.go
  ae62fb0abeecfb7a271d2951f74ae74b  libgo/go/os/dir.go
  e4e0d93b86976adf73916677181dfe7b  libgo/go/os/dir_gccgo.go
  626828291c232475e93f49f1a707b826  libgo/go/os/dir_gccgo_c.c
--- 98925,98956 ----
  4c9f815b1e71d6207f3b7efd42d8a7e1  libgo/go/net/textproto/header.go
  8783131de6323dff01565b3ceeef7ca8  libgo/go/net/textproto/header_test.go
  cd367df6141c293f6de3d7c4cc7a6d27  libgo/go/net/textproto/pipeline.go
! 198cf1cd08e676e9cfc8dda523a40832  libgo/go/net/textproto/reader.go
  32e7cdd3cb6c5f342526eb69944abb17  libgo/go/net/textproto/reader_test.go
! 2996b79b893482aac34ec0a8699c32aa  libgo/go/net/textproto/textproto.go
! f2968d52f0284125f300b7afa4365685  libgo/go/net/textproto/writer.go
  8b533b1a06afed0dd5623c6d71e17a67  libgo/go/net/textproto/writer_test.go
! c8817f58dd7ae76099461801d20afd60  libgo/go/net/timeout_test.go
! b5aa782df4b871c3440eff01d600eb8c  libgo/go/net/udpsock.go
! a3cd87787fe4f5ebd6dc0ae59331e217  libgo/go/net/udpsock_plan9.go
  52ae31ea57d0a3db86f7e56b742ca851  libgo/go/net/udpsock_plan9_test.go
! f787dac505a80416e02f2adbc0cd01db  libgo/go/net/udpsock_posix.go
! cc9bee15ccbf829fdc24961c16d323c8  libgo/go/net/udpsock_test.go
  9d022bcb6a4950adc68c82457408b40f  libgo/go/net/unixsock.go
  3e9fbd3d3c9a4def683ac7883c6ee147  libgo/go/net/unixsock_linux_test.go
  781514566fecf6fcd07ae118be60fa47  libgo/go/net/unixsock_plan9.go
! 46479340e9ef4c8107ce675f24f8a5ce  libgo/go/net/unixsock_posix.go
! 16b06da3ea127e66593972b01e672b02  libgo/go/net/unixsock_readmsg_cloexec.go
! 58cfee3ef5ccac7923f2ba64e3eafb0c  libgo/go/net/unixsock_readmsg_cmsg_cloexec.go
! 2f673e70b3f002c3f5160ef7b9e84545  libgo/go/net/unixsock_readmsg_other.go
! 83656b183375b4cfebfe5c556ac78b9b  libgo/go/net/unixsock_readmsg_test.go
! 417c2980107362f2c309f3abe822af12  libgo/go/net/unixsock_test.go
! cc995b68932af13e8c9668da6233b883  libgo/go/net/unixsock_windows_test.go
! 069e29e689c2f533815cda9b8b7278df  libgo/go/net/url/url.go
! fc0d1f7d04d1fe4c03c8fddf2680b82e  libgo/go/net/url/url_test.go
! 943474b7da0cf77a1b36915694024add  libgo/go/net/write_unix_test.go
! 7659d9d457c085ac2faa7445474f3b54  libgo/go/net/writev_test.go
! fc05ae9658dbe2578970d02dda905615  libgo/go/net/writev_unix.go
  ae62fb0abeecfb7a271d2951f74ae74b  libgo/go/os/dir.go
  e4e0d93b86976adf73916677181dfe7b  libgo/go/os/dir_gccgo.go
  626828291c232475e93f49f1a707b826  libgo/go/os/dir_gccgo_c.c
*************** d3deb692ae1c89e8da90ed01d9f16dbd  libgo/
*** 92470,92587 ****
  c0850a9cf08dc95e5853216ba08c767e  libgo/go/os/dir_plan9.go
  d7f5b3c9e8b47d2b79131254c9579db0  libgo/go/os/dir_regfile.go
  48612ceabf93a8d3d370a9a7f16fb0c9  libgo/go/os/env.go
! cd77df8c9ea90f59f5585ad99ad6f779  libgo/go/os/env_test.go
! 829a99830d39b5262c6633d36be9b81d  libgo/go/os/env_unix_test.go
! da470199a15a808612f3a3097e4f4a3c  libgo/go/os/error.go
! 53b10212ffafcf262daa6a27eee0ea49  libgo/go/os/error_errno.go
  006fd4281d610546aa4a8ff33fd5f99a  libgo/go/os/error_plan9.go
! 41b05a26214359c08d295bcf495e76c1  libgo/go/os/error_posix.go
! a48e9b54008a2395e2fa5d5135955f72  libgo/go/os/error_test.go
! d45241b9bf279733c03984c52501f5be  libgo/go/os/error_unix_test.go
! c0ddd4e4d820fd052ba825f658b5bc46  libgo/go/os/error_windows_test.go
! af6f9e193b61860d1e69bb4ec34be223  libgo/go/os/example_test.go
! a10f8acb5e6e7afa2780ef3a4589cc98  libgo/go/os/exec.go
  c667f335928cea32a9f5a07f12ba4ad5  libgo/go/os/exec/bench_test.go
  5da5764a4759c08543e5bc63e0d970f6  libgo/go/os/exec/env_test.go
! 468118c23a3fb1747bd4768fc2074b1b  libgo/go/os/exec/exec.go
! ef94eb24a0bcc22384780dbded1c084d  libgo/go/os/exec/exec_linux_test.go
  ea7d95f6f7f47a8c425c79642db6b087  libgo/go/os/exec/exec_plan9.go
! 7c817d2ea793e3d11be4b0cfde72b53f  libgo/go/os/exec/exec_posix_test.go
! eb9c011bae9f048bab8d9f56e42bdc0b  libgo/go/os/exec/exec_test.go
! 69460f7e30d1a3bb3051497ec8f7debe  libgo/go/os/exec/exec_unix.go
  c919d639a65c14c4c5f1adbb8615ee87  libgo/go/os/exec/exec_windows.go
  2d239d712d33fb848065f13812a876ab  libgo/go/os/exec/internal_test.go
! 087a049915267129b3f26d539a0f9be9  libgo/go/os/exec/lp_js.go
  b2b6c83c09ee08994ca69e45716ce7cc  libgo/go/os/exec/lp_plan9.go
  41619b7d87d5ecc522bc2eafadf2f303  libgo/go/os/exec/lp_test.go
! 4ed92188e6a15babab3125dc3fec28e0  libgo/go/os/exec/lp_unix.go
! 65add26723a3f6f88ce2bafd1856a4bc  libgo/go/os/exec/lp_unix_test.go
  a4ba4a7bb7b291afd212d2aa32931eb4  libgo/go/os/exec/lp_windows.go
! 002d8c2029cfaef8683837960fee6a9e  libgo/go/os/exec/read3.go
! 1201579b585387b6b822d76b8766ea31  libgo/go/os/exec_plan9.go
! 22f80b88722e83c224a1c5bddbc4d7e9  libgo/go/os/exec_posix.go
! 3831f33b4ef48ad8b8b0bf89d7421bb0  libgo/go/os/exec_unix.go
! f78e199fc9d9fff605f5a4974fa7d967  libgo/go/os/exec_unix_test.go
! 71986a6eaa7d8b560abbaece2b141b46  libgo/go/os/exec_windows.go
  205c51b025b9372f82e747dfe4df1782  libgo/go/os/executable.go
  2ea7281434095cfc020304ea4563cf0a  libgo/go/os/executable_darwin.go
  46540aea0cd42828d23a566c4765a125  libgo/go/os/executable_dragonfly.go
  b66d0f701cfe7d0916b14cd6ec5a327d  libgo/go/os/executable_freebsd.go
! fbe11481073d5075eefa66b42528677c  libgo/go/os/executable_path.go
! b7de93476c44316aaabb84d7439ad1ac  libgo/go/os/executable_plan9.go
! e975a3486095eaf868c46e4f5e282f13  libgo/go/os/executable_procfs.go
  247494adee7109031bdc31783030e565  libgo/go/os/executable_solaris.go
! bb7ae384abea2c65566970ec7b35d1ef  libgo/go/os/executable_sysctl.go
! 828bee93fe63b3ca92e80c288eb651a1  libgo/go/os/executable_test.go
  76aa9403bfb354bc7e6c45c4ad819ba5  libgo/go/os/executable_windows.go
  9159ce8dd0b7ab4c49c5004c3fcfb695  libgo/go/os/export_linux_test.go
  457ad7b99509395d986ef4d5ce1c488c  libgo/go/os/export_test.go
! a5c4b470aa115d38ebc202bb1387c3d8  libgo/go/os/export_unix_test.go
! 5eaec89a04438036b1e5dde518a8ae06  libgo/go/os/export_windows_test.go
! 8ac3639f6457463e8aa7317a3c915729  libgo/go/os/fifo_test.go
! 3d06a496b80eebfd017d5492a3a62f8d  libgo/go/os/file.go
! 7481ab23436952e18f0c15b31e72d04d  libgo/go/os/file_plan9.go
! 2138b2a35092296bb69059ddfd64accb  libgo/go/os/file_posix.go
! 0ffe7c129c4e95d3bab524c9f5ef5834  libgo/go/os/file_unix.go
  b2243d03465b2f097be566c15ef44c82  libgo/go/os/getwd.go
  60b725f10c9c85c70d97880dfe8191b3  libgo/go/os/issue37161/a
  3b5d5c3712955042212316173ccf37be  libgo/go/os/issue37161/b
  2cd6ee2c70b0bde53fbe6cac3c8b8bb1  libgo/go/os/issue37161/c
! ce619ed6d2eb85a485c93a0d7352232a  libgo/go/os/os_test.go
! 60352e5f4e91901d4e9663591468576a  libgo/go/os/os_unix_test.go
! 4edf29e7caa11c2498503b01b20dcad8  libgo/go/os/os_windows_test.go
  38c233202cc22800cc031a416c84f5b4  libgo/go/os/path.go
  c5fe061b3241fd61d8724fe886aafa73  libgo/go/os/path_plan9.go
! e6946f9caca43f7ac372d49e7ae2086d  libgo/go/os/path_test.go
! f6a0f852e64d6b7cacbdeafc18ee39be  libgo/go/os/path_unix.go
! 07eddf0ade79736627b79606534072a3  libgo/go/os/path_windows.go
! b968a9ff3d7fab809c26baedb4802e1e  libgo/go/os/path_windows_test.go
! 6c80d6c0ac41d5aadf6259521395f543  libgo/go/os/pipe2_bsd.go
! 16331821d7f96d014884cea181d36ec0  libgo/go/os/pipe2_illumos.go
! da3b676b293dc8dc4e8365e5fde3942a  libgo/go/os/pipe_bsd.go
  62e073cfad6b7be1fa723966438a32a6  libgo/go/os/pipe_glibc.go
! 017dd2e375b140a67c869242e43fa991  libgo/go/os/pipe_test.go
  a2699279e503d0c05b713f6f422ba217  libgo/go/os/proc.go
! ecfb560f067c5e85c62904e8993ebd20  libgo/go/os/rawconn.go
! 562b35a1b7c0c3eff8819a1a8dd04c36  libgo/go/os/rawconn_test.go
  bc748e210808e7063aa16d9a59c5e2ff  libgo/go/os/read_test.go
  edc9923bdcb09887d9fb4cf944f04f53  libgo/go/os/readfrom_linux.go
! 5f384406c842093069536a63affe6e95  libgo/go/os/readfrom_linux_test.go
! e36d4c17180d47f8c05a56c7624164a6  libgo/go/os/readfrom_stub.go
! 2fee5149f93982d99685f0d0f78c0c0c  libgo/go/os/removeall_at.go
! f3e7d386c7df3983e007ea0248884feb  libgo/go/os/removeall_noat.go
! 338544972d065cb97dc4a98a066497af  libgo/go/os/removeall_test.go
! 6971857726d8ed4e0693ac29515b5585  libgo/go/os/signal/doc.go
! c2d576a31f2416d8ebf6909194111a6e  libgo/go/os/signal/example_unix_test.go
! 15686fd346a7959e3b18eba74b3ce3f8  libgo/go/os/signal/internal/pty/pty.go
  bddacc4ff6633ece2dfde601f2ccfc38  libgo/go/os/signal/signal.go
! 4ed4fa4cf9f25d9a1a42509546c10c86  libgo/go/os/signal/signal_cgo_test.go
! a4b7bf5e137c6a3d1950e8e4ab5d685a  libgo/go/os/signal/signal_linux_test.go
  1d29e80b44f28ebcb46a792beae60116  libgo/go/os/signal/signal_plan9.go
! 6cf1c60023e30d5d680ef01b501db3ee  libgo/go/os/signal/signal_plan9_test.go
! 6f14ff482695669f53c520ac27376cd4  libgo/go/os/signal/signal_test.go
! 3e8afa043bbf06a04ffd0fa82cf48859  libgo/go/os/signal/signal_unix.go
  c3a2764cad7b0e3d72287cbdaf77ac78  libgo/go/os/stat.go
  4319edab2ffac69f550a4ae26017b939  libgo/go/os/stat_aix.go
  caee66c9780fe059d640e53d032c325b  libgo/go/os/stat_atim.go
  935e4988e6d00ab23025096627435e65  libgo/go/os/stat_atimespec.go
  69889f3f3aa9c669ff47b492066de899  libgo/go/os/stat_dragonfly.go
! 6e2d987cbabee98c52ae5c5d4a19a23a  libgo/go/os/stat_js.go
! 409d6db198b97c4adb6bd8ddada2e601  libgo/go/os/stat_plan9.go
  3fa76abf938fab717fa51a63a7939245  libgo/go/os/stat_solaris.go
! 8af44cad005b68f166cead5cc6d63584  libgo/go/os/stat_test.go
! 40ea0fa444240d60e430a1c51511734b  libgo/go/os/stat_unix.go
! 71b59ea3be063a158bf045bce757da60  libgo/go/os/sticky_bsd.go
! b287121f5e6f7c32af9eee221a3e65e8  libgo/go/os/sticky_notbsd.go
! 7278237d114b2684931308a7499ea925  libgo/go/os/str.go
  a43b2c4a6beb34efaaef34ae322824d7  libgo/go/os/sys.go
! af21193756921efd5e715421dd454dde  libgo/go/os/sys_bsd.go
! c901864bd0df87310edb915da0582abc  libgo/go/os/sys_js.go
  7e2ee28a9dcf5f4c737e639cb072ca5e  libgo/go/os/sys_linux.go
  2bfd35fe4bb2fc2a259a109a2742c1fc  libgo/go/os/sys_plan9.go
  0245da3396070eea47171fe6e14a8633  libgo/go/os/sys_uname.go
! 68d9eb0dfdcd0ba3e4b81df9b51387ff  libgo/go/os/sys_unix.go
! ebc60498ed2e0e20ba8cd5ab561deb94  libgo/go/os/tempfile.go
  5977fdd4aebf336bd65c128b896f2e32  libgo/go/os/tempfile_test.go
  d41d8cd98f00b204e9800998ecf8427e  libgo/go/os/testdata/dirfs/a
  d41d8cd98f00b204e9800998ecf8427e  libgo/go/os/testdata/dirfs/b
--- 98960,99083 ----
  c0850a9cf08dc95e5853216ba08c767e  libgo/go/os/dir_plan9.go
  d7f5b3c9e8b47d2b79131254c9579db0  libgo/go/os/dir_regfile.go
  48612ceabf93a8d3d370a9a7f16fb0c9  libgo/go/os/env.go
! 4f70fd969ef30b9e5c2f7cf1bc6496c9  libgo/go/os/env_test.go
! 4598ae1b824dd455b46a5397308eb1c7  libgo/go/os/env_unix_test.go
! c77156323f0493bd32b1a65ed0d497c8  libgo/go/os/error.go
! ba5362a54b3c2bbc7f2c1e102f2ab94f  libgo/go/os/error_errno.go
  006fd4281d610546aa4a8ff33fd5f99a  libgo/go/os/error_plan9.go
! b346e4450986abdc4fcf27a4bd16ad17  libgo/go/os/error_posix.go
! 41123e4048e916f97887820e889c7784  libgo/go/os/error_test.go
! f3ff86d87e9b8a38a09dde9a48cbb8db  libgo/go/os/error_unix_test.go
! bc22ac2a5e5d5c832b08035920907e83  libgo/go/os/error_windows_test.go
! 1e7169a30312eedb08aa8ba824b1ae2d  libgo/go/os/example_test.go
! a35dba2fe31f0f475bf2ea6bb6026bd2  libgo/go/os/exec.go
  c667f335928cea32a9f5a07f12ba4ad5  libgo/go/os/exec/bench_test.go
  5da5764a4759c08543e5bc63e0d970f6  libgo/go/os/exec/env_test.go
! 4ada76bb9fad450a2841556c0185d10d  libgo/go/os/exec/exec.go
! 973e85bbde3f578d0ba78979ee489cc9  libgo/go/os/exec/exec_linux_test.go
  ea7d95f6f7f47a8c425c79642db6b087  libgo/go/os/exec/exec_plan9.go
! 166b3ce4ca26c66f62837e0f3b2a444d  libgo/go/os/exec/exec_posix_test.go
! 07566badc2aed6aa79a09a8fc963a10c  libgo/go/os/exec/exec_test.go
! b9605b89f14828e8c49bbe2e416a0411  libgo/go/os/exec/exec_unix.go
  c919d639a65c14c4c5f1adbb8615ee87  libgo/go/os/exec/exec_windows.go
+ cb9260c38f250aabc28bd428a400f984  libgo/go/os/exec/exec_windows_test.go
+ fd91de122078bc533e473eff13c9e457  libgo/go/os/exec/internal/fdtest/exists_js.go
+ 6735fe3d8890f2c7b23f9a0a3585dfce  libgo/go/os/exec/internal/fdtest/exists_plan9.go
+ 7ae8768c2a87def26d4808db94f12f3c  libgo/go/os/exec/internal/fdtest/exists_test.go
+ 5b13fbb70cd167342bf81bd00a5abd3c  libgo/go/os/exec/internal/fdtest/exists_unix.go
+ 2959a5e0e7d504ed6d559cebea0ef9d4  libgo/go/os/exec/internal/fdtest/exists_windows.go
  2d239d712d33fb848065f13812a876ab  libgo/go/os/exec/internal_test.go
! 081e1d10c2ad1952591eb78ce74e10e0  libgo/go/os/exec/lp_js.go
  b2b6c83c09ee08994ca69e45716ce7cc  libgo/go/os/exec/lp_plan9.go
  41619b7d87d5ecc522bc2eafadf2f303  libgo/go/os/exec/lp_test.go
! cabe49850d8b7ae311cb93816dec1abb  libgo/go/os/exec/lp_unix.go
! 159766304a98edacc15a07f2bb7f2640  libgo/go/os/exec/lp_unix_test.go
  a4ba4a7bb7b291afd212d2aa32931eb4  libgo/go/os/exec/lp_windows.go
! 47a8a0f7f6012a8be806f5c3cbb204bf  libgo/go/os/exec/read3.go
! 5e5fb102c95bff5f570325803354e256  libgo/go/os/exec_plan9.go
! cf722673d6da742829f06d4852d5ce69  libgo/go/os/exec_posix.go
! ca99c492babee2d0a09fef8b46a192e1  libgo/go/os/exec_unix.go
! 7abb99e1b5422e303d555a32ac957801  libgo/go/os/exec_unix_test.go
! 4e33d9f841eb131fb14782f3515b8346  libgo/go/os/exec_windows.go
  205c51b025b9372f82e747dfe4df1782  libgo/go/os/executable.go
  2ea7281434095cfc020304ea4563cf0a  libgo/go/os/executable_darwin.go
  46540aea0cd42828d23a566c4765a125  libgo/go/os/executable_dragonfly.go
  b66d0f701cfe7d0916b14cd6ec5a327d  libgo/go/os/executable_freebsd.go
! 3b15b20008cb1ffeb7eaa2b7ef68f0f6  libgo/go/os/executable_path.go
! ec3bb2f4581a56a5256d55f6ede81f56  libgo/go/os/executable_plan9.go
! b06d1c24043bb54bdeff4c083562d18d  libgo/go/os/executable_procfs.go
  247494adee7109031bdc31783030e565  libgo/go/os/executable_solaris.go
! dabbf07dc89efc7bcf76ef644b02b35e  libgo/go/os/executable_sysctl.go
! 38068da5b7611b483ff0b8ff941eed49  libgo/go/os/executable_test.go
  76aa9403bfb354bc7e6c45c4ad819ba5  libgo/go/os/executable_windows.go
  9159ce8dd0b7ab4c49c5004c3fcfb695  libgo/go/os/export_linux_test.go
  457ad7b99509395d986ef4d5ce1c488c  libgo/go/os/export_test.go
! eff363e8031bb787a5a2be1855784958  libgo/go/os/export_unix_test.go
! bdc3379274f715735fd517e21ba294c6  libgo/go/os/export_windows_test.go
! 6de287493e244f23a1660d88045fd369  libgo/go/os/fifo_test.go
! 9307056409b43816892b755ce66f4125  libgo/go/os/file.go
! 98a8c5545aaabe3ce24135f1bce4e84e  libgo/go/os/file_plan9.go
! 1f80ddc5343d0e319e24ad9d946d29f2  libgo/go/os/file_posix.go
! 3c77c1b0bbbb98072220984c2acb05ea  libgo/go/os/file_unix.go
  b2243d03465b2f097be566c15ef44c82  libgo/go/os/getwd.go
  60b725f10c9c85c70d97880dfe8191b3  libgo/go/os/issue37161/a
  3b5d5c3712955042212316173ccf37be  libgo/go/os/issue37161/b
  2cd6ee2c70b0bde53fbe6cac3c8b8bb1  libgo/go/os/issue37161/c
! b9be9014dd44c8c4305763163d1dc3e4  libgo/go/os/os_test.go
! a87da8df932ff7809f5816f52e05ac48  libgo/go/os/os_unix_test.go
! ec82e45a6bde2a17c405a9a73dc704da  libgo/go/os/os_windows_test.go
  38c233202cc22800cc031a416c84f5b4  libgo/go/os/path.go
  c5fe061b3241fd61d8724fe886aafa73  libgo/go/os/path_plan9.go
! 7082b5adf8364308e78cb4c83f0b6e22  libgo/go/os/path_test.go
! e0f5c8db03ea596d983664cbee4d36f5  libgo/go/os/path_unix.go
! 957edca3e4bff2c9127ae07946d88470  libgo/go/os/path_windows.go
! 6172e1c4408d4f0f29340d57a4f6a4f6  libgo/go/os/path_windows_test.go
! d98e56ab23b1c4586b2e532df8215038  libgo/go/os/pipe2_bsd.go
! 9e135223e76725096e8c0f7657c9d340  libgo/go/os/pipe2_illumos.go
! e961b9c850d4c421146e49e436ab0034  libgo/go/os/pipe_bsd.go
  62e073cfad6b7be1fa723966438a32a6  libgo/go/os/pipe_glibc.go
! 93a7198545ccad1c2b19710f3ebc24cd  libgo/go/os/pipe_test.go
  a2699279e503d0c05b713f6f422ba217  libgo/go/os/proc.go
! 223222ff5f754ab4648aae5735489bb7  libgo/go/os/rawconn.go
! 47226e8ef0d3e459c87fdd8123770e2f  libgo/go/os/rawconn_test.go
  bc748e210808e7063aa16d9a59c5e2ff  libgo/go/os/read_test.go
  edc9923bdcb09887d9fb4cf944f04f53  libgo/go/os/readfrom_linux.go
! 1d3bdc12becd88c7fc973d165ff16fac  libgo/go/os/readfrom_linux_test.go
! 969872d61037a899d13a7ee727277cdf  libgo/go/os/readfrom_stub.go
! a63c4eb7f17de6db00eabb75a1f7c9c3  libgo/go/os/removeall_at.go
! 3354dbd4c493803d95f13ce8aca73e1d  libgo/go/os/removeall_noat.go
! 9bded14ffa3081ae76a37362ff80b73e  libgo/go/os/removeall_test.go
! 2063554b654d1fa3335deb710789395f  libgo/go/os/signal/doc.go
! 5e79ceecf8f4b6fca4e659d8d440c6a5  libgo/go/os/signal/example_unix_test.go
! 10551ce96bda26ddc6ead02d2e7c0feb  libgo/go/os/signal/internal/pty/pty.go
  bddacc4ff6633ece2dfde601f2ccfc38  libgo/go/os/signal/signal.go
! ebc58c73ccd9e0a7b6288217bcba7e97  libgo/go/os/signal/signal_cgo_test.go
! 3e7fb610c38b449269b9e5789e19e6bd  libgo/go/os/signal/signal_linux_test.go
  1d29e80b44f28ebcb46a792beae60116  libgo/go/os/signal/signal_plan9.go
! d006bbb928268c9dd6f85a424f9a7bd4  libgo/go/os/signal/signal_plan9_test.go
! d60a671956de8e3dd88911b85617813f  libgo/go/os/signal/signal_test.go
! 8c2eebeac92cb6302666f09a3ba8c48c  libgo/go/os/signal/signal_unix.go
  c3a2764cad7b0e3d72287cbdaf77ac78  libgo/go/os/stat.go
  4319edab2ffac69f550a4ae26017b939  libgo/go/os/stat_aix.go
  caee66c9780fe059d640e53d032c325b  libgo/go/os/stat_atim.go
  935e4988e6d00ab23025096627435e65  libgo/go/os/stat_atimespec.go
  69889f3f3aa9c669ff47b492066de899  libgo/go/os/stat_dragonfly.go
! 802ffa3a9547496754a19763a0c695c5  libgo/go/os/stat_js.go
! 8cbb2cc06e7567842092b786a475db0d  libgo/go/os/stat_plan9.go
  3fa76abf938fab717fa51a63a7939245  libgo/go/os/stat_solaris.go
! ac3b7c7d23dd1e40cfd3437e1c5735a7  libgo/go/os/stat_test.go
! 3d72380d0b53e990deba6e416b876d54  libgo/go/os/stat_unix.go
! 7b8247104694123ed42d56c26b2ec982  libgo/go/os/sticky_bsd.go
! a04df371caaa3671e3943838337c5ddf  libgo/go/os/sticky_notbsd.go
! 8fb6cd1e2a87fc074eff3dcfb43b1a98  libgo/go/os/str.go
  a43b2c4a6beb34efaaef34ae322824d7  libgo/go/os/sys.go
! f6868c86091f714902da72a04018c783  libgo/go/os/sys_bsd.go
! dc75267844965fc1bb9efc8bdb313253  libgo/go/os/sys_js.go
  7e2ee28a9dcf5f4c737e639cb072ca5e  libgo/go/os/sys_linux.go
  2bfd35fe4bb2fc2a259a109a2742c1fc  libgo/go/os/sys_plan9.go
  0245da3396070eea47171fe6e14a8633  libgo/go/os/sys_uname.go
! f1f4294592edacfb00a70de830c65500  libgo/go/os/sys_unix.go
! a949b569bbbb3fa9d745c6c149feb270  libgo/go/os/tempfile.go
  5977fdd4aebf336bd65c128b896f2e32  libgo/go/os/tempfile_test.go
  d41d8cd98f00b204e9800998ecf8427e  libgo/go/os/testdata/dirfs/a
  d41d8cd98f00b204e9800998ecf8427e  libgo/go/os/testdata/dirfs/b
*************** a2ad62dd6088e213c12f8dbb625a993a  libgo/
*** 92590,93175 ****
  60b725f10c9c85c70d97880dfe8191b3  libgo/go/os/testdata/issue37161/a
  3b5d5c3712955042212316173ccf37be  libgo/go/os/testdata/issue37161/b
  2cd6ee2c70b0bde53fbe6cac3c8b8bb1  libgo/go/os/testdata/issue37161/c
! 07ff7fc3c1fd96f56848b8382ccea9c2  libgo/go/os/timeout_test.go
  5e60413c95f8421ca70bb23d39fa8d61  libgo/go/os/types.go
! fdc1a679906c3a2e0f863a13a92a1ae8  libgo/go/os/types_plan9.go
! d4dfa6fa1d9d3cae77a56dd3aafa8bb5  libgo/go/os/types_unix.go
! 53f847cd389166174c483090d4eb50c5  libgo/go/os/types_windows.go
! 6de092f1dda5924c307110d4de06d588  libgo/go/os/user/cgo_lookup_unix.go
! 87886aff6077cb9e5e57d39176853ff2  libgo/go/os/user/cgo_unix_test.go
  24be1c687e6c538507a64aaba948f83e  libgo/go/os/user/decls_aix.go
! 432f92fc323362b66a4272e7e0115503  libgo/go/os/user/decls_solaris.go
  d2d3f20206e0defbe9e862e4a0a27845  libgo/go/os/user/decls_unix.go
! e066aa2b75bae3e2fb74844b72e5ba5c  libgo/go/os/user/listgroups_aix.go
! 235b2dc0ce73096c1d486260abfa89af  libgo/go/os/user/listgroups_solaris.go
! a984b4be3dd307b894d0192e7df2413e  libgo/go/os/user/listgroups_unix.go
  c1127101febb20131cce341d39d68923  libgo/go/os/user/lookup.go
! 96980b26ee2386f37e644d277d6b667e  libgo/go/os/user/lookup_android.go
! 860c5caae9e009f8fd2f0e343122a000  libgo/go/os/user/lookup_plan9.go
! 3f385d7e5c1badb1c41690c0101c2b31  libgo/go/os/user/lookup_stubs.go
! ea3679db938e72e3b47d1df138ea6c3f  libgo/go/os/user/lookup_unix.go
! ed11fb0b86333c68fec5db25eb40ea5a  libgo/go/os/user/lookup_unix_test.go
  80e4c8e2c040a193473c47f1b683c3b3  libgo/go/os/user/lookup_windows.go
! fb87f1809e72b8166e8a58c63a88175e  libgo/go/os/user/user.go
! 437d1e90d948b1697c5e1da2cb741ac5  libgo/go/os/user/user_test.go
! 414062b5610f07df01ccdbf522926228  libgo/go/os/wait_unimp.go
! 2ae5b989f765ac1e32add0258d228422  libgo/go/os/wait_wait6.go
! e26f5a2db17f5a36e36b837bf84e610c  libgo/go/os/wait_waitid.go
  c1b9c98ee021d849c0b43c9216735455  libgo/go/path/example_test.go
  e7362f9952e047522ea3080f1772e750  libgo/go/path/filepath/example_test.go
! 5e8dba6867482ebd10113ca50d0787fc  libgo/go/path/filepath/example_unix_test.go
! d03c6cf4a0ddb4b82fb3c80889b87190  libgo/go/path/filepath/example_unix_walk_test.go
  d53439751e8554fd84fa78a0103cf17d  libgo/go/path/filepath/export_test.go
  4233036575e89add745849a436003709  libgo/go/path/filepath/export_windows_test.go
  c243339e3b608d1cbf970bea228b3bd2  libgo/go/path/filepath/match.go
! e07a3e9ca036eb3c46b4c8adf8ffc10e  libgo/go/path/filepath/match_test.go
! f3284017d182827ec5c32be29ac78e72  libgo/go/path/filepath/path.go
  182004ef31c7f7d0d6071a350a78deef  libgo/go/path/filepath/path_plan9.go
! 0321fc180882e1eaf6eda3d214f678f3  libgo/go/path/filepath/path_test.go
! 4d5f5f3a09ec0ad479489950df00f58c  libgo/go/path/filepath/path_unix.go
! eb115a379b5df7372cf96272d914c013  libgo/go/path/filepath/path_windows.go
  ff36007801cac266bbbb9ea95811cdd9  libgo/go/path/filepath/symlink.go
! 67d9ef4276c83f465159c29bb2e2bfa6  libgo/go/path/filepath/symlink_unix.go
  26e03d701fc7a412804382943f651cc0  libgo/go/path/filepath/symlink_windows.go
  2689c67d5fabe8f0ee17ede3ea25e93c  libgo/go/path/match.go
  cbf07a00c9d3ac4f4fbde2ba7d235983  libgo/go/path/match_test.go
  54c6b8c746a5a3135245ba73fbe122c3  libgo/go/path/path.go
  45e0329e1a3506bac219751ad0ef21a2  libgo/go/path/path_test.go
! f39cb04a9ade4d04aa5ec6f32d789d4b  libgo/go/plugin/plugin.go
! 575bf4a5bc93d4621ad44461d9defc9e  libgo/go/plugin/plugin_dlopen.go
! 14cf8031dee4203d67eb002fc559df1c  libgo/go/plugin/plugin_stubs.go
! bc45f7de0f0d6ab99d967682215d5c36  libgo/go/plugin/plugin_test.go
! 6588c619d72856473a0675338e9d6e0b  libgo/go/reflect/all_test.go
! 3b44d54a552aef4827bdfdfde2dc99fd  libgo/go/reflect/deepequal.go
  a2296897da2a9eb152deaea98d179c73  libgo/go/reflect/eqtype.go
  6ebbb61bd2c7644252d9a065e2b64e0e  libgo/go/reflect/eqtype_aix_gccgo.go
! 0ddb9a403f277f567de00299da1a3349  libgo/go/reflect/example_test.go
! 34cb3367aa488760da8c5cdce4745fb8  libgo/go/reflect/export_test.go
! afdb129f8614d2ab1c3696f35cef28ae  libgo/go/reflect/makefunc.go
! 52a2968dfb36942acea8de1d8f872f11  libgo/go/reflect/makefunc_ffi.go
  64143c1a6fceabc569854ebd07504a3e  libgo/go/reflect/makefunc_ffi_c.c
! 9674609cef9de54dd124b6e86cc37213  libgo/go/reflect/set_test.go
! 352b590753ef61df4c824197ebec9a4e  libgo/go/reflect/swapper.go
! f85e1c21045db9a41164cb7c72373e9b  libgo/go/reflect/tostring_test.go
! 099262adb40160647f8b741e19a8b56c  libgo/go/reflect/type.go
! 69e53fd5265c65d1d9edf26f8f9a021f  libgo/go/reflect/value.go
! dd8f5683cd2b1c04f4c9c8724ee9da27  libgo/go/regexp/all_test.go
  95fb311a7b03e760ccbb36bee08a6856  libgo/go/regexp/backtrack.go
  60e05eaee653363d8a79d7da5096d277  libgo/go/regexp/example_test.go
  d69b2ea15320ca7b32ebec0ddcf9a87c  libgo/go/regexp/exec.go
! b31d554eec2179c2bf7351f41210fbf2  libgo/go/regexp/exec2_test.go
! 6b083706dc1a5c2a3d57862665d21919  libgo/go/regexp/exec_test.go
! e9c00b39233fbf6471f9f9560e02cb04  libgo/go/regexp/find_test.go
! e5db5b014b326bcd175755a50be0ac79  libgo/go/regexp/onepass.go
! 24ef884e19f816eef85e7446fcc6bc41  libgo/go/regexp/onepass_test.go
! da17f2db76fe9c130aa1bcfa5b4d887b  libgo/go/regexp/regexp.go
! ba087ffac21ce3eb47b024b0982f5537  libgo/go/regexp/syntax/compile.go
  f4a5b748c6b9a24d905f31201c0d0e61  libgo/go/regexp/syntax/doc.go
  4ec17c72c61756faea953da0152e293c  libgo/go/regexp/syntax/op_string.go
! 9cf26fe0273715feb630ba67915548ed  libgo/go/regexp/syntax/parse.go
! 67016ecf6ea3204e45cae2369df84b0c  libgo/go/regexp/syntax/parse_test.go
  fa7a5c563b7be06e9ced902e305223f7  libgo/go/regexp/syntax/perl_groups.go
! d1c63835261f3c040b259c37e38a96c9  libgo/go/regexp/syntax/prog.go
! 7fc9706a7e40f4f60e74cf93bd2feb43  libgo/go/regexp/syntax/prog_test.go
  556819f808bc1fadb92844ff225628e3  libgo/go/regexp/syntax/regexp.go
  c72cd882c3a1c4ab1e7b8dcbe79526f1  libgo/go/regexp/syntax/simplify.go
  a18b993e0182b01aed7c48c8cb271703  libgo/go/regexp/syntax/simplify_test.go
  44a4773a582d6477197072e1b45cc367  libgo/go/regexp/testdata/README
! a9693b15d846f4dbc70cb353c1ad5f64  libgo/go/regexp/testdata/basic.dat
! dc8f89c5577c9e97d90c25c8341830db  libgo/go/regexp/testdata/nullsubexpr.dat
! ce4d01bc256482203dedba6c2e6827df  libgo/go/regexp/testdata/re2-exhaustive.txt.bz2
! 3e1bb0bc67b431632da2eb15a8cb0149  libgo/go/regexp/testdata/re2-search.txt
  f99f99715745fe92f8a824f11d936a06  libgo/go/regexp/testdata/repetition.dat
  454e3934d6cbf6640a547548f78e70b9  libgo/go/regexp/testdata/testregex.c
! 24ac34791027d34c6448ed2c16dd881a  libgo/go/runtime/alg.go
  620c42d6906acae7dd0f38723004acdc  libgo/go/runtime/atomic_pointer.go
! cfdfbc90626aa2d5809312a5bf644a76  libgo/go/runtime/auxv_none.go
  7fe910f3c857427987a1be1f74b0ee1b  libgo/go/runtime/callers_test.go
  2b4bf4503adf708178e74d03b7188e26  libgo/go/runtime/cgo_gccgo.go
! 124bc74c240aa26a27cbe18e3582f76c  libgo/go/runtime/cgocall.go
! 647b5a506f805201e90e685709cfd5db  libgo/go/runtime/cgocheck.go
! b3711fe537bcf675b7e6c52862f18acc  libgo/go/runtime/chan.go
! 3fe48f8e89015dfae836d80a3a6647ae  libgo/go/runtime/chan_test.go
  cea2ebeeac97f27d5f1e673612690253  libgo/go/runtime/chanbarrier_test.go
! 623acba67151b098cab2c93df4617ae7  libgo/go/runtime/checkptr.go
! b192356934be0e4ee548be728c7a8e76  libgo/go/runtime/checkptr_test.go
  d24444200f8bef380fcad6ba46723fc1  libgo/go/runtime/closure_test.go
  7971d50020cc0b08b89878bba0ec9d82  libgo/go/runtime/compiler.go
  e0c63ad8382340442573a02a97aebcda  libgo/go/runtime/complex_test.go
  c4e255afc3d67a69f152edbbf405afa6  libgo/go/runtime/conv_wasm_test.go
  cbb402068c51090546e64ff50efa903c  libgo/go/runtime/cpuflags_arm64.go
! 48b40bc8900eb1eed9fa3d7727323560  libgo/go/runtime/cpuprof.go
! 00acb53994f636800e13672a2124d54d  libgo/go/runtime/cputicks.go
! ade88fb4c9b198d4b2843779de2671c4  libgo/go/runtime/crash_cgo_test.go
  cfee3af9ebba822f9b0e8a0bbd9375da  libgo/go/runtime/crash_gccgo_test.go
! faa0e8c2c9f18a97bc8528c36caec4ae  libgo/go/runtime/crash_nonunix_test.go
! 1e8b3cf4c678748521f222eb4248830a  libgo/go/runtime/crash_test.go
! 46d913069c8ea9fe954fb83972ea9960  libgo/go/runtime/crash_unix_test.go
! 0b7804edf0945318789a2be140b9129a  libgo/go/runtime/debug.go
  8c834fcf7fd2e9c3780e8ccf18f1c18a  libgo/go/runtime/debug/garbage.go
! ad795ea82c891dcc44b81669415d5bb3  libgo/go/runtime/debug/garbage_test.go
  4b773b3d915f30b30540f9cde03eb184  libgo/go/runtime/debug/heapdump_test.go
! ef6474040e50307711bca4675750aeac  libgo/go/runtime/debug/mod.go
! 474e4e2e87ebcb44c6c6c9c4b7de44ab  libgo/go/runtime/debug/panic_test.go
  324e61ddc62f45a1d1c3fd20a427062a  libgo/go/runtime/debug/stack.go
  7bd8d2bc1b1ac62347f86f745d0eff95  libgo/go/runtime/debug/stack_test.go
  a85550fb24ca8225b8874b47efa133df  libgo/go/runtime/debug/stubs.go
! ac8b543c3f436dafb99267a0eafd9705  libgo/go/runtime/debug_test.go
! 7d70761083d4586f72751e4c13a18e51  libgo/go/runtime/debuglog.go
! aaa699990c48a09562d10e3463c3358d  libgo/go/runtime/debuglog_off.go
! 5bc7be738f4354d2f56e010b6cf5fac4  libgo/go/runtime/debuglog_on.go
  62cba6f9b8d70f7119bca15e6c2b6151  libgo/go/runtime/debuglog_test.go
! 1eda0188837f2ad2a7f379f157d99014  libgo/go/runtime/defer_test.go
! 1739ec210635a37f3ab9e8ce8d62c703  libgo/go/runtime/env_posix.go
  66d03cf12b02144ceb3e7563770e8b7d  libgo/go/runtime/env_test.go
  518595b084705257e997919e33cf3e01  libgo/go/runtime/eqtype.go
  88345351f85e1313557ed2047d58ac27  libgo/go/runtime/eqtype_aix_gccgo.go
! 0ac319968243fde03d79b35c14d1b8b5  libgo/go/runtime/error.go
! ef9929cc224a1ccdaf626cd48cc662fb  libgo/go/runtime/example_test.go
! 867523ef958954b1c37cf87ee6528bf6  libgo/go/runtime/export_debug_test.go
! b469d2ae326e9597c7725a3fce9c3a56  libgo/go/runtime/export_debuglog_test.go
! 463e2910ec971e8016d5ccf09406ea59  libgo/go/runtime/export_linux_test.go
! f9a75d0ebb3f61a23003fae884bb60fc  libgo/go/runtime/export_mmap_test.go
! 387c9cf0e6f9a646d4ed5668d691cc2a  libgo/go/runtime/export_pipe2_test.go
! a1c33256a02aab7de15ae556296dfa55  libgo/go/runtime/export_pipe_test.go
! 0998e75f522063e297e46011a9ddcc56  libgo/go/runtime/export_test.go
! 14ccdaeb9af79c348b15c6f021f156ca  libgo/go/runtime/export_unix_test.go
! 6cf8e5461555704101c96680c126d3d9  libgo/go/runtime/export_windows_test.go
! 86eaee889dcc5332bfc9745f82582597  libgo/go/runtime/extern.go
  c320b7da530e4f0897ae4a0e5f245bdd  libgo/go/runtime/fastlog2.go
  98fa37aa2849cd0923db32ac978bfcea  libgo/go/runtime/fastlog2_test.go
  52d8d18843078e415ebd00a11c8f45f4  libgo/go/runtime/fastlog2table.go
  37daeb0497dbbd2f1756c917528cac47  libgo/go/runtime/ffi.go
  f3e367be9f1303b808ba504b2992d9b0  libgo/go/runtime/float.go
! 627d76812669048792f17e499dc47f91  libgo/go/runtime/gc_test.go
! 0ef1294eb18e7eef240af3cc387917aa  libgo/go/runtime/gcinfo_test.go
! f671634c37cf53673ac00a0a9411fc1c  libgo/go/runtime/hash32.go
! a01d3d3cb68a30fb31cc0d4dca31549d  libgo/go/runtime/hash64.go
! 4fc9acd59ec1d5ee8d417bcb395bb9e4  libgo/go/runtime/hash_test.go
! 5d4cf9e455a62234f05d45746d835c8a  libgo/go/runtime/heapdump.go
! e1f17f2369323d2580e99ba0304d1b58  libgo/go/runtime/histogram.go
! 8984a6b36a97ff8d34d2b3d62c2eea75  libgo/go/runtime/histogram_test.go
! 0a30a4b660b7ad66a646d95ff84f66de  libgo/go/runtime/iface.go
! 5529c91bb6e4c3e93c37c06b0869306a  libgo/go/runtime/iface_test.go
! 25481682fe117ee7ad3b5f365167b8db  libgo/go/runtime/internal/atomic/atomic.c
! 2c146ec44a28c3e1caca69a57a3cd09f  libgo/go/runtime/internal/atomic/atomic_test.go
! 6b470ca4fe8bb5557468dfba062a346b  libgo/go/runtime/internal/atomic/bench_test.go
  4e32a2a66164b532ba5d3a00c2b3b080  libgo/go/runtime/internal/atomic/gccgo.go
! 1dc653ff1fcc67879350143ec04ea9a9  libgo/go/runtime/internal/atomic/stubs.go
  1abc65286966e58e772e23a93e78a08a  libgo/go/runtime/internal/atomic/unaligned.go
! 00c883035abf1442ec1db178f2362d18  libgo/go/runtime/internal/math/math.go
  3f66365f42e291740221db6cdeab6e44  libgo/go/runtime/internal/math/math_test.go
  d3209c9cf093801706fb8cb5b31bc0e8  libgo/go/runtime/internal/sys/intrinsics.go
! 831d27c58f22f343b02f12a9aeae6384  libgo/go/runtime/internal/sys/intrinsics_common.go
  3d0e0f78fa156fece5ea69a22b4257b0  libgo/go/runtime/internal/sys/intrinsics_test.go
! 03af967c43c39bc3bd839953c0d47c08  libgo/go/runtime/internal/sys/stubs.go
! 25743016e1c0daa81d5651f5651641e0  libgo/go/runtime/internal/sys/sys.go
  3c71ad04ba9834cd1e4cdcd1b873f6ab  libgo/go/runtime/lfstack.go
! c7c054cebbc0fcd02b8b6061541a2fc8  libgo/go/runtime/lfstack_32bit.go
! abdd677a24643066606135cb5d1d7df2  libgo/go/runtime/lfstack_64bit.go
! 67fe49711e28c2362368b34e8bb09969  libgo/go/runtime/lfstack_test.go
! ee76757a978bf6edf09fe1399a4b733e  libgo/go/runtime/libfuzzer.go
! 6aced5a6f90c881eb45618c264bf3d45  libgo/go/runtime/lock_futex.go
! 5a817222c0d60ead7ea80c63ae320eba  libgo/go/runtime/lock_js.go
! 5bab25a4cf512787b1aede585131ce01  libgo/go/runtime/lock_sema.go
! 91825c16003641fb4d446aba378ad05d  libgo/go/runtime/lockrank.go
! aac1189a19825aa4a84dddb91ac340ea  libgo/go/runtime/lockrank_off.go
! ff886c8c654a5758896bd94871cec80c  libgo/go/runtime/lockrank_on.go
! ab0e007c398e60995c7e58a93aaa442c  libgo/go/runtime/malloc.go
! 68cedbbd93c084bd59d79a6c3f2416ad  libgo/go/runtime/malloc_test.go
! 130f6aff6449e4928cddbceff0fc9359  libgo/go/runtime/map.go
! 7472ece3b9588817129607489c44c924  libgo/go/runtime/map_benchmark_test.go
! 41515ae10e1ec71a15a0a509756d134f  libgo/go/runtime/map_fast32.go
! 9c521ec16d07ed95b219bb538b2e90d4  libgo/go/runtime/map_fast64.go
! c09ecd8bfc8f81ab291cf5fa96aa08d0  libgo/go/runtime/map_faststr.go
! d8447e0130c65ee7aab8ef7aea9fb577  libgo/go/runtime/map_test.go
! 8d9eb852041027ad6341ec6feea97f94  libgo/go/runtime/mbarrier.go
! 438af70fe1ea548a7ec740fe5712ed99  libgo/go/runtime/mbitmap.go
! 03e6c1751a397b3f107cc06b0ae6d590  libgo/go/runtime/mcache.go
! edd0b74ab16abe4e872a200ae4afe1c7  libgo/go/runtime/mcentral.go
! d8a0e84b0d0701c5c560017f6ab56e68  libgo/go/runtime/mcheckmark.go
  bd01a74e0a3f3e08aeec945100c329bc  libgo/go/runtime/mem_gccgo.go
  034df5e78566981cc4e6b61135fef43b  libgo/go/runtime/memmove_linux_amd64_test.go
  e295e76c8e913427333b9f518014abc6  libgo/go/runtime/memmove_test.go
! e24f97cf46946efef68d63a0eb6fda73  libgo/go/runtime/metrics.go
! fa64eadf70e4d77961d69d74cab60fd1  libgo/go/runtime/metrics/description.go
  c910177cd122abd5a9eba6a885a93910  libgo/go/runtime/metrics/description_test.go
! 20e0b549d9c5fa5caf0fd89407c508d6  libgo/go/runtime/metrics/doc.go
  39ab6d68704b555dc84d5054697cada6  libgo/go/runtime/metrics/example_test.go
  b160fa69fe0592127a84a5dfaee0d157  libgo/go/runtime/metrics/histogram.go
  ce5e99bef63aa6aa260ed1e961be86a0  libgo/go/runtime/metrics/sample.go
  f61bd133399628a1900b27b3a28141cf  libgo/go/runtime/metrics/value.go
! c9f22648024bef39c1ae707bcc190589  libgo/go/runtime/metrics_test.go
! 9217467d23edd53af43c17618b3dd621  libgo/go/runtime/mfinal.go
! bfbf41b480ab847220914454bd77cc57  libgo/go/runtime/mfinal_test.go
! 346b416ff4234b6b81387c537dd753c9  libgo/go/runtime/mfixalloc.go
! 5f757100bf6633b6f70d1dc265cb01a7  libgo/go/runtime/mgc.go
! a675c175229e5f286b000acd88117f40  libgo/go/runtime/mgc_gccgo.go
! 6a0ede4cbe1d6d8d86b67e56f413e722  libgo/go/runtime/mgcmark.go
! 0280a5ec6b4a73a280500939495d9f2e  libgo/go/runtime/mgcscavenge.go
! 8760c82934c31db8b09b9483c44a8894  libgo/go/runtime/mgcscavenge_test.go
! 7ca18f5033cbc19a428093d2705e6ce0  libgo/go/runtime/mgcsweep.go
! cd298b1116cd374938571c779e8ea48d  libgo/go/runtime/mgcwork.go
! b060c4d98883f2e8b20f61f0914c480b  libgo/go/runtime/mheap.go
! b5dd5f449d709e6034f39d2fe9aa05d4  libgo/go/runtime/mkfastlog2table.go
! 20895f7acfce2d35a40418a72b7ee124  libgo/go/runtime/mkpreempt.go
! 55c4568709378f8ba5feb260e85ef500  libgo/go/runtime/mksizeclasses.go
! 89898115ac5ac6f74cb73926a07adf0a  libgo/go/runtime/mpagealloc.go
! f7f668b84edec631a36169ae428628aa  libgo/go/runtime/mpagealloc_32bit.go
! 694976d331df489ee25f7778d795f543  libgo/go/runtime/mpagealloc_64bit.go
! 298bf18506dec178ae67216e71e7184e  libgo/go/runtime/mpagealloc_test.go
! 05d3c93e7d060b514e1ca1571d727ea9  libgo/go/runtime/mpagecache.go
! d2f54ff10655ec48fe4433ec98ffed9e  libgo/go/runtime/mpagecache_test.go
! 421f66392fcb243fefe850920b79a771  libgo/go/runtime/mpallocbits.go
  d92a6ae713740eec77e0d5fdeead20a6  libgo/go/runtime/mpallocbits_test.go
! 42a894d734de6f5becb38cff6e06c533  libgo/go/runtime/mprof.go
! d4051b4865c90e6e3b0a7ec568e8e22d  libgo/go/runtime/mranges.go
  fc7d340e2875c2cb28c840799efb1ba4  libgo/go/runtime/mranges_test.go
! d12da266bc7b9f926629e9cb02ba26ad  libgo/go/runtime/msan/msan.go
! b23ff3c874c1ce27a2593cc04fce04d8  libgo/go/runtime/msan0.go
  b5116da5a4fcab561313b26771e06d9f  libgo/go/runtime/msize.go
! 3858b85e8202235e6b5e49c9b867afb6  libgo/go/runtime/mspanset.go
! d84dfd57ebade2b8065afb2fd59aa94f  libgo/go/runtime/mstats.go
! e10306589a35fdcf436bb78fa3f302f2  libgo/go/runtime/mwbbuf.go
! 5f828c62ed1df3416c488dd2fff2830b  libgo/go/runtime/nbpipe_pipe.go
! 3b7f7a3b07fb8ab64803db0f385a2138  libgo/go/runtime/nbpipe_pipe2.go
! a3fe1c973796b455d48587d4793ab6b6  libgo/go/runtime/nbpipe_test.go
  b955bbe836c3bbd65144d08f3aa3f5ea  libgo/go/runtime/net_plan9.go
! 4441f9ce3167c2e767e4e22840a3a7e2  libgo/go/runtime/netpoll.go
! b44ba804f96f754cfc0329811c9260af  libgo/go/runtime/netpoll_aix.go
! 09b4862291ac81fb4a4629a302e72322  libgo/go/runtime/netpoll_epoll.go
! e45b58d8270eff020e441bfddbae83a6  libgo/go/runtime/netpoll_fake.go
! 6a26d3e5a283bea6c1289c2f0ad53287  libgo/go/runtime/netpoll_hurd.go
! 9b0d32ac47b89c1733223e6072d45f05  libgo/go/runtime/netpoll_kqueue.go
  ea73638a43a5d13ff246a5ffa08b173f  libgo/go/runtime/netpoll_os_test.go
! 25d17666891cda7499f04d3fc57f9561  libgo/go/runtime/netpoll_solaris.go
! 04e728611de521f9f123542e2e60f2de  libgo/go/runtime/netpoll_stub.go
  ef6fe895bb7ee3f159c5b6ca1ff80f3b  libgo/go/runtime/netpoll_windows.go
! 3c6b542f720e39a9402d8d391cc66701  libgo/go/runtime/norace_test.go
  abe03e43d221f9678964394a556d4cf6  libgo/go/runtime/numcpu_freebsd_test.go
! c3659bc3c8b68203331c793e7686c2fb  libgo/go/runtime/os3_solaris.go
! 5e88f005a14acdacd8ba8a81be31e2c2  libgo/go/runtime/os_aix.go
! 714006ac1454334e5570041c5ea7c150  libgo/go/runtime/os_darwin.go
! 5efe91ea7f0721e326a065d99f091883  libgo/go/runtime/os_dragonfly.go
! 06cd69da109dfcdc951b2a53d5301b93  libgo/go/runtime/os_freebsd.go
  6ac875ea3308e7ca018f45ec3d4ff5e1  libgo/go/runtime/os_freebsd_arm64.go
! 7263dc141c33c580296470ba3f4e6239  libgo/go/runtime/os_gccgo.go
! 42b620de6e7edc0375659dd018b73577  libgo/go/runtime/os_hurd.go
  e9438f316eb39bee387d1e010a69e0ca  libgo/go/runtime/os_illumos.go
! 0e29c4238d4c5aab06e202c1dc5d56e6  libgo/go/runtime/os_js.go
! 56f134f75932352896a48402b87ce922  libgo/go/runtime/os_linux.go
  bc2773acfbcd6d681d5355bd9d5179d2  libgo/go/runtime/os_linux_arm.go
! 88a4f32f4ba04626f44875fedff21b1c  libgo/go/runtime/os_linux_arm64.go
! 5877c1717c882bb2bf6560ff9decbb14  libgo/go/runtime/os_linux_mips64x.go
! 7779dda91a0a8e06884b8a83ab3c37c2  libgo/go/runtime/os_linux_mipsx.go
! 9eefb8a5f36b447da6e2cca654a437dc  libgo/go/runtime/os_linux_noauxv.go
! d2a903bcf33552be9cebb89563c92a63  libgo/go/runtime/os_linux_ppc64x.go
  62cfdb71cdb491bd41cbf9340fbedf1c  libgo/go/runtime/os_linux_s390x.go
! f8d7d7ef4fbf058d3869d19e92ef66f4  libgo/go/runtime/os_netbsd.go
! 220f87e2bb50ec754dd7a6450bda5020  libgo/go/runtime/os_netbsd_arm64.go
! 215aa422c585f52745541596a4a5cf1a  libgo/go/runtime/os_only_solaris.go
! 10c3bda813ada3ee0177ee82eebe0585  libgo/go/runtime/os_openbsd.go
  b62275fe8976cc8c90a8d3ead2cc5276  libgo/go/runtime/os_solaris.go
  b2d6fa5728766e88e876f91f1a3c9e95  libgo/go/runtime/os_windows_arm.go
! 86644f758997585769ec12d8c32c75b8  libgo/go/runtime/panic.go
! 76912002531d838499d2542bd45ce4c3  libgo/go/runtime/panic32.go
  f3061a853da4f2665a4e6253ec4b50db  libgo/go/runtime/panic_test.go
  093fb8619e8f718d7c2a6748f7a0d4da  libgo/go/runtime/pprof/elf.go
  20b4a3be648af8ee3718713b9f616765  libgo/go/runtime/pprof/label.go
  dd42aa77fa2e7d47ac2023d5f32aad5e  libgo/go/runtime/pprof/label_test.go
  934fdf417b83965fbe03f6a27e1e4ff9  libgo/go/runtime/pprof/map.go
! 5f21078c44f905301a06241f4f87eebd  libgo/go/runtime/pprof/mprof_test.go
! 8da83328d7214f29a5f89528e30d255d  libgo/go/runtime/pprof/pprof.go
! 51b6dc2fba4b95006fecd316d0e0de5a  libgo/go/runtime/pprof/pprof_norusage.go
! 98db463bd85416db468b1b6b96375b6a  libgo/go/runtime/pprof/pprof_rusage.go
! 094911a3e793c790565e247866db7137  libgo/go/runtime/pprof/pprof_test.go
! 0c0d58d830445464466a3f9269ccf745  libgo/go/runtime/pprof/proto.go
! 9fe6ade2165de6c2b61baf0ad8a864bd  libgo/go/runtime/pprof/proto_test.go
  67d1caf2c57ece01a95a85053ad0afb3  libgo/go/runtime/pprof/protobuf.go
  0b700804ed788627f579d33fdc38f64b  libgo/go/runtime/pprof/protomem.go
  0b4f6877a921a7caecae0481b1d994f1  libgo/go/runtime/pprof/protomem_test.go
  a41903e6b202c94c5cf7608397153b93  libgo/go/runtime/pprof/runtime.go
  2ea1c28984ca3fcabe6f98ace0e16b28  libgo/go/runtime/pprof/runtime_test.go
  5913b7b52393d1764efd64d1da9c7054  libgo/go/runtime/pprof/testdata/README
  14018ad92171c12664a70b2c9d653bc8  libgo/go/runtime/pprof/testdata/mappingtest/main.go
  b0c0ee9afbf20e5ec7df25bf6a591593  libgo/go/runtime/pprof/testdata/test32
  70ce312996442a3c9f1ca1c61d10e628  libgo/go/runtime/pprof/testdata/test32be
  092db9490d8f1d4d5d6d45c308363239  libgo/go/runtime/pprof/testdata/test64
  330e0459efb34478eab1df29cf3b1530  libgo/go/runtime/pprof/testdata/test64be
  4d361e4dc4fe1dd24b4faef629b9ca73  libgo/go/runtime/preempt.go
! 902cd6d78fa504200458c7068699c1b2  libgo/go/runtime/preempt_nonwindows.go
! 0a183551878641308f4e3d345b584c95  libgo/go/runtime/print.go
! d58346fe40a21eb5824692e9d492276d  libgo/go/runtime/proc.go
  ae6799d03b400a51be099b6b67904f9e  libgo/go/runtime/proc_runtime_test.go
! 2c9862d834efc51ab36f33f94bf2c07d  libgo/go/runtime/proc_test.go
  05262f8d035dc7329132ff2204136f6a  libgo/go/runtime/profbuf.go
  d5e668c7e76529245dc2b9fa56fee3a8  libgo/go/runtime/profbuf_test.go
  76f5ccb5dde7aec4ad22293203beb1c5  libgo/go/runtime/proflabel.go
! c145a4aea40bca8e94cbd24e2d0be914  libgo/go/runtime/race0.go
  befb3cf1a8dfbf62d85d4c066b099e09  libgo/go/runtime/rand_test.go
  a9bb6d5971fad9daae8045e815ce3622  libgo/go/runtime/rdebug.go
! 74fad87dade3574ab0087f79088ca092  libgo/go/runtime/relax_stub.go
! e80da2f088ad93fb1141f3d764c5fb04  libgo/go/runtime/runtime-lldb_test.go
  94ecf1eafd18d3b7283ab71080f03f70  libgo/go/runtime/runtime.go
! 293e2bd8fb6a42b5c633720f70e6f84a  libgo/go/runtime/runtime1.go
! 7f1eb67c419354f10e455754ee6be2d5  libgo/go/runtime/runtime2.go
! 80d7659d3ca8c538c66bf8eeda56c5c0  libgo/go/runtime/runtime_mmap_test.go
! 06be1cb9674129b3dfebe1f8c05789aa  libgo/go/runtime/runtime_test.go
! fe613f3911dc534ab842212f4f4984ce  libgo/go/runtime/runtime_unix_test.go
  4d4aac317c0d55be4f22b399ef43cc55  libgo/go/runtime/rwmutex.go
! cbe3eb01e703e7b83786189c7a28765e  libgo/go/runtime/rwmutex_test.go
! bf052a158f67e3ac4b64780145e3eb5c  libgo/go/runtime/select.go
  3fc3a1073075fbc3404dd60fef3c394c  libgo/go/runtime/sema.go
  bb2f5f655d3c5eeea977bc4dd0c46cad  libgo/go/runtime/sema_test.go
! 4d897bf2651d7cb40eccdae43d5ba58a  libgo/go/runtime/semasleep_test.go
! 7c5b5f99bc1114fc3d56b83611269de2  libgo/go/runtime/signal_gccgo.go
! 46e61a23e757a5fa78545faa9643ca53  libgo/go/runtime/signal_unix.go
! 678fbe97cfbbd118ced0bf06b9c7ef47  libgo/go/runtime/signal_windows_test.go
! d6953467d2ac5181c32cd964d5ee206d  libgo/go/runtime/sigqueue.go
! 8f3c93b817167aacd1889f0d4d67504f  libgo/go/runtime/sigqueue_note.go
! 724f9663ffea2815c500769e2ec6c4c6  libgo/go/runtime/sizeclasses.go
! ef5147fe184a47a3eaf802111aa56150  libgo/go/runtime/sizeof_test.go
! 1863e0a28d2c3c6e512a0d350f0948d6  libgo/go/runtime/slice.go
  451d4d651d99426f7901f74ddd7e6e5d  libgo/go/runtime/slice_test.go
! 30ad4bc5cc97a4434d18095e74f7813b  libgo/go/runtime/stack_test.go
! a6dace3e648b2f6bb5202408aba94ee5  libgo/go/runtime/string.go
  3d5512aded08e80fbb3d9a7454c58b3b  libgo/go/runtime/string_test.go
! 1e42949c8923a214d0d64f972e393cdc  libgo/go/runtime/stubs.go
! e29ae878d12273f1b1ea54c23e14f499  libgo/go/runtime/stubs2.go
! a3697bc9b8072b6aa70956171dfe68f6  libgo/go/runtime/stubs3.go
! 868e81b1a88bd922d5a9660b677a9f43  libgo/go/runtime/stubs_linux.go
! 493f0a9be547e5872838cfe4a186aabf  libgo/go/runtime/stubs_nonlinux.go
! f683775b936ff1dae38fe1a8d3c4086f  libgo/go/runtime/symtab.go
! cfc0c3a2025090722210a998e8c6bae0  libgo/go/runtime/symtab_test.go
! 4daf82b54749beaac24c1193f929d74b  libgo/go/runtime/sys_wasm.go
  c472fb1d79f1919c32c8087c37e8a606  libgo/go/runtime/testdata/testfaketime/faketime.go
  0e5300ee70a78543ac67025af26a69b5  libgo/go/runtime/testdata/testprog/abort.go
! e16bfd00b1cef1b0b70864d179610bb4  libgo/go/runtime/testdata/testprog/badtraceback.go
! 78184745c3e8ae2c880da54be797b3b2  libgo/go/runtime/testdata/testprog/checkptr.go
  172e4208200267e59d0ea047a8c0440d  libgo/go/runtime/testdata/testprog/crash.go
  fa231bb8c7bea90eb3b4f56c648a1cd4  libgo/go/runtime/testdata/testprog/deadlock.go
! 682b683d23d8cf8ba1161f7fefd868e8  libgo/go/runtime/testdata/testprog/gc.go
  4a33f046238f211f09e59df6e0298be6  libgo/go/runtime/testdata/testprog/lockosthread.go
  d9e02d0b5bbe11e3d270bbd949888cf8  libgo/go/runtime/testdata/testprog/main.go
  1e74a8f6718e1af4736e09e826b27dc4  libgo/go/runtime/testdata/testprog/map.go
  f7ea862313619d428b31b40fd107f93f  libgo/go/runtime/testdata/testprog/memprof.go
  e9e92bff3636bbec8c572dab5cdc5847  libgo/go/runtime/testdata/testprog/misc.go
! 6d85470f2651e69227d5d1db070238aa  libgo/go/runtime/testdata/testprog/numcpu_freebsd.go
  9000e4cbb4edd13619b679af8fc6106d  libgo/go/runtime/testdata/testprog/panicprint.go
  c2048f4452acdf90e12de2313c902b9d  libgo/go/runtime/testdata/testprog/panicrace.go
! 6efe1f6686e874fc6acccb140d506207  libgo/go/runtime/testdata/testprog/preempt.go
! b76ce0d4c1c05d70941ffc4db0e19ab9  libgo/go/runtime/testdata/testprog/signal.go
! ee681b8dd07ca8896cf664f581ff1b8b  libgo/go/runtime/testdata/testprog/sleep.go
  b86bee5ad967b6809bba1a6e5ba90247  libgo/go/runtime/testdata/testprog/stringconcat.go
  ec6f3dd15e09fab6a391e7a9f9a6a831  libgo/go/runtime/testdata/testprog/syscall_windows.go
  4aaaef9d2cf35e4eabd0f3ee96f907bb  libgo/go/runtime/testdata/testprog/syscalls.go
  cac0974909402e3236227717b3bd7f7c  libgo/go/runtime/testdata/testprog/syscalls_linux.go
! 250e33f09d303bce57b082757979a3e8  libgo/go/runtime/testdata/testprog/syscalls_none.go
  d12956ad4f26beaceacb3f1add9607e0  libgo/go/runtime/testdata/testprog/timeprof.go
! 0ff6666a689c68fef9af813c42065d0b  libgo/go/runtime/testdata/testprog/traceback_ancestors.go
  ea8fd66b0b8dfb93b42d1225205c9b01  libgo/go/runtime/testdata/testprog/vdso.go
! b67ffc75ff026c7d58fadbab4cfc0ee8  libgo/go/runtime/testdata/testprogcgo/aprof.go
  cb7bbb3acd0fdb0ddc9ec3bb6361724b  libgo/go/runtime/testdata/testprogcgo/bigstack_windows.c
! 5c15092fea3beb7a81dfeca1840a2599  libgo/go/runtime/testdata/testprogcgo/bigstack_windows.go
! 5dc55f4c3103703d8257e2fcdc4a7acb  libgo/go/runtime/testdata/testprogcgo/callback.go
! dcf976b46e73e0f15c5889e9d7035573  libgo/go/runtime/testdata/testprogcgo/catchpanic.go
  f49395d9977a4e6a20432c77725b2b4a  libgo/go/runtime/testdata/testprogcgo/cgo.go
  ebaf5edc08d3a26b8c824f217f07d4fa  libgo/go/runtime/testdata/testprogcgo/crash.go
  88e0bb6d68a5214c81759f62d5bf42c4  libgo/go/runtime/testdata/testprogcgo/deadlock.go
  eb23be0ba22dad5ed40d97c424315870  libgo/go/runtime/testdata/testprogcgo/dll_windows.go
! 817552d9d1b1e53369cd97b1187c63c9  libgo/go/runtime/testdata/testprogcgo/dropm.go
  459ea91b6e71cd736d3c50e96e8e459b  libgo/go/runtime/testdata/testprogcgo/dropm_stub.go
! 15ff97f702f51aebd59bdaa53817f470  libgo/go/runtime/testdata/testprogcgo/eintr.go
! 049a865e329153280a35570c3f29b131  libgo/go/runtime/testdata/testprogcgo/exec.go
! efe1c0d9aa9f984cd856be2f934df8ed  libgo/go/runtime/testdata/testprogcgo/lockosthread.c
! 18b2c640cfae3adb7411c7431ecbc1fc  libgo/go/runtime/testdata/testprogcgo/lockosthread.go
  d9e02d0b5bbe11e3d270bbd949888cf8  libgo/go/runtime/testdata/testprogcgo/main.go
! 44c55b451dae91e983d9f4f3b1660060  libgo/go/runtime/testdata/testprogcgo/needmdeadlock.go
! b65f082237e0067797a890413e83bb92  libgo/go/runtime/testdata/testprogcgo/numgoroutine.go
! 9f89240630d79e1c1ad468f9ecc4ee25  libgo/go/runtime/testdata/testprogcgo/pprof.go
! 4bbb100713ee74cea6e93a2568ca96cc  libgo/go/runtime/testdata/testprogcgo/raceprof.go
! de8f539845f39e326f0b38570b3daafb  libgo/go/runtime/testdata/testprogcgo/racesig.go
! 2b712007a051f59a2e33d59567afb4c8  libgo/go/runtime/testdata/testprogcgo/segv.go
  2a1d972b04491bafa8f369a961984aad  libgo/go/runtime/testdata/testprogcgo/sigpanic.go
! e82cbd0866f6d960030b8ac84cd2c67a  libgo/go/runtime/testdata/testprogcgo/sigstack.go
  c178d94c2363d68c114e7e28c23b1a25  libgo/go/runtime/testdata/testprogcgo/stack_windows.go
! f130568d34a09b1fec48db4dc63abd45  libgo/go/runtime/testdata/testprogcgo/threadpanic.go
  21ca4bdb7d827c5d39c0f256ed673d6c  libgo/go/runtime/testdata/testprogcgo/threadpanic_unix.c
  4521507061b29e1f266a11e2a7a99698  libgo/go/runtime/testdata/testprogcgo/threadpanic_windows.c
! 5def76ba7616e2811c1509f5f35dd230  libgo/go/runtime/testdata/testprogcgo/threadpprof.go
! 15f8cc955e22863859c5c3635107dbc4  libgo/go/runtime/testdata/testprogcgo/threadprof.go
! 207c20ea521747b498b011db47e25ff0  libgo/go/runtime/testdata/testprogcgo/traceback.go
! e20920cf8f51db2555210dc9ef3691ae  libgo/go/runtime/testdata/testprogcgo/traceback_gccgo.go
! b02afeb4a15586ff5f18385717f595a2  libgo/go/runtime/testdata/testprogcgo/tracebackctxt.go
! 3ef0a7a35d982d07aa1d469c5ca0e631  libgo/go/runtime/testdata/testprogcgo/tracebackctxt_c.c
! e54464bf9fe49e30bc8920e26aa4fbd3  libgo/go/runtime/testdata/testprogcgo/windows/win.go
  0b0ccb29e430d4c4a9ab19412c121273  libgo/go/runtime/testdata/testprogcxx/main.go
  f8fc0effb485a49c8a192369654d9fea  libgo/go/runtime/testdata/testprogcxx/traceback.cc
  5af43c8e3a18016d151097514c73ce7b  libgo/go/runtime/testdata/testprogcxx/traceback.go
  d9e02d0b5bbe11e3d270bbd949888cf8  libgo/go/runtime/testdata/testprognet/main.go
  286288807cc6c215bcfb8cc6ac39327e  libgo/go/runtime/testdata/testprognet/net.go
! d85dd3c49d08697f99f540ba6e1174c8  libgo/go/runtime/testdata/testprognet/signal.go
! c5fbacb05e941bf3f1efe84ec9709b49  libgo/go/runtime/testdata/testprognet/signalexec.go
! a64a93630a058498b7796fc7b8579454  libgo/go/runtime/testdata/testwinlib/main.c
! 8d24bc36e158943d336ba603a7b38987  libgo/go/runtime/testdata/testwinlib/main.go
! e2d2f6befe9c9e5aedefa0911b612630  libgo/go/runtime/testdata/testwinlibsignal/dummy.go
  73b045094ad01a0e940034428947dd5b  libgo/go/runtime/testdata/testwinsignal/main.go
! a48cc1fb702bbb7bc1063fd8e04b5a7c  libgo/go/runtime/time.go
! cc0e2649a4d605233383bcc2ff2f1fe5  libgo/go/runtime/time_fake.go
! 01fe9c3ea9536d2f747c7ba7af77db08  libgo/go/runtime/time_nofake.go
  101d390946aaa71a11228ad540098145  libgo/go/runtime/time_test.go
! 33112dfd3d444056a0113e7e594cbe80  libgo/go/runtime/timeasm.go
! 627f19cb56b7b72997034603dcffad90  libgo/go/runtime/timestub.go
! 229ab68136e461342a8858deedd2f6f8  libgo/go/runtime/timestub2.go
! 81c7b80b9e903eaf732b82c319de3545  libgo/go/runtime/trace.go
! f8ac444d17d3614d42771effbed5ab7d  libgo/go/runtime/trace/annotation.go
  7d05fccd96ef7c5ca2a56c68539addd1  libgo/go/runtime/trace/annotation_test.go
  8394ada76c0c28f76f5e262e5c99f974  libgo/go/runtime/trace/example_test.go
  461ea3ae4a3de89bd39a90cd59395753  libgo/go/runtime/trace/trace.go
  8ffa5ee76cec4cde4685441101e038d3  libgo/go/runtime/trace/trace_stack_test.go
  3956a504e82dfb465d6f711422d5e6af  libgo/go/runtime/trace/trace_test.go
  6e4f94a6076e388fadedd6cc333efdf0  libgo/go/runtime/traceback_gccgo.go
! e5cc2a202a1b816f34a202b59f4d80da  libgo/go/runtime/type.go
  c60a5202f5ceb0e3f3b09ab202e9f6c7  libgo/go/runtime/typekind.go
  5a418f6713f974c3cd474e9ffea7cc82  libgo/go/runtime/utf8.go
! f44bd95750b08ffb83cfa731995cbeed  libgo/go/runtime/write_err.go
! 481989c5ed6980cc6fbe24b24162ee56  libgo/go/runtime/write_err_android.go
  ff84f5d56acf431dcdc3ea0b97c42ca3  libgo/go/sort/example_interface_test.go
  b89549ffb67af1968a2b38c8f879ec67  libgo/go/sort/example_keys_test.go
  264a03e111dff061a89d470fab5b512d  libgo/go/sort/example_multi_test.go
! 603bfbb67df6fcfbdafe37cb4a6422e8  libgo/go/sort/example_search_test.go
  b89a87e51c9a8363066de856ef127981  libgo/go/sort/example_test.go
  21ebe3c56494e1ebc52acb3251a6f78a  libgo/go/sort/example_wrapper_test.go
  5ec468d74053964b118cc04effd2611c  libgo/go/sort/export_test.go
! a6e2d182d3592f5a48e8edddce544a64  libgo/go/sort/genzfunc.go
  ab69a9f941ac3f104b923190814c37f3  libgo/go/sort/search.go
  3e876da36a15eeb8775010f13220c341  libgo/go/sort/search_test.go
! b76a181cd7ad76df37f78cb126b1b2c4  libgo/go/sort/slice.go
! 69701041804123373c00232a2f02fb71  libgo/go/sort/slice_go113.go
! 6128f25368ee73a0eedaf736be1544c6  libgo/go/sort/slice_go14.go
! cf46c40c1fda767519b934a325330597  libgo/go/sort/slice_go18.go
! 93de62953073d66e2af1a0eee33f7352  libgo/go/sort/sort.go
  838b24b5f7cf8599474947780e5ee459  libgo/go/sort/sort_test.go
  a5872ee6a27e38bd3b6a51628c580f87  libgo/go/sort/zfuncversion.go
  c57d3bac728104db67ce130b39533fa2  libgo/go/strconv/atob.go
  2b0e97637f1876802fd5251d27c86e27  libgo/go/strconv/atob_test.go
  cbb11485fea3e1dec0a0bb5056fbabdd  libgo/go/strconv/atoc.go
  10c2791c2e8bdccd4d6f9a4fdcc4d28a  libgo/go/strconv/atoc_test.go
! 6256547db67790a92f77b6fb131c502d  libgo/go/strconv/atof.go
! 99c8303ed137b848beabb0d83e1368cf  libgo/go/strconv/atof_test.go
! 83566b971e34187bd41a2ded739b7223  libgo/go/strconv/atoi.go
! b57957fb64e39d4a7b58ae8295209de7  libgo/go/strconv/atoi_test.go
  35c9fee0ee5d1c05424ee60d909ceae4  libgo/go/strconv/ctoa.go
  af6268eb8dddb9905ca11013c0ff30c9  libgo/go/strconv/ctoa_test.go
  437406951b80b7f1a169625d5cadf412  libgo/go/strconv/decimal.go
  c8fbcf5ed89480898c8ad5a5f7e91a2f  libgo/go/strconv/decimal_test.go
  7bd2703a371609a3f08e85b11dbdee4a  libgo/go/strconv/doc.go
! a98db250a8e25c7b3777aebc306454c8  libgo/go/strconv/eisel_lemire.go
  31b299c818ecfe2d488e2f804cbbba08  libgo/go/strconv/example_test.go
  b19af02747208a319da91b1301c9900f  libgo/go/strconv/export_test.go
! 4afdf4e977d5eb91484039c01fe0cafe  libgo/go/strconv/extfloat.go
! deae6f87af61351b28e00a4509bcf6a9  libgo/go/strconv/fp_test.go
! 32f06226601cb51511bacfeccc5613bb  libgo/go/strconv/ftoa.go
! 9de3c86b862f192f6c8dab7a804b24cd  libgo/go/strconv/ftoa_test.go
! b5e86b1aacb6b32ea789f88f9e000ea8  libgo/go/strconv/internal_test.go
  66b80541ebd0d866b4ca257d79792a47  libgo/go/strconv/isprint.go
  e0b69352ae18a9d9771d314abf634f6f  libgo/go/strconv/itoa.go
  82e1c89ea104e3fb66329dbbce013d21  libgo/go/strconv/itoa_test.go
! 0be0bdac5c5aa74c6e38fd08c0d252c0  libgo/go/strconv/makeisprint.go
! 871551883b9efed73e00f96e7928b7ff  libgo/go/strconv/quote.go
! 6fce184c5e5e94f9479bafeb2a713ff7  libgo/go/strconv/quote_test.go
  b38355d8b3ec666c65f60742e650a983  libgo/go/strconv/strconv_test.go
  dc1ca447fa01cae0bb5de6427d6aa4ae  libgo/go/strconv/testdata/testfp.txt
  dc1ca447fa01cae0bb5de6427d6aa4ae  libgo/go/strconv/testfp.txt
! 67fa00fb82b08eecf932cf68191de714  libgo/go/strings/builder.go
! 34746af114e8c97e99d0950515f46af6  libgo/go/strings/builder_test.go
! 5fc7909f4a161bb1377a9841315a6285  libgo/go/strings/compare.go
  23b544761fdb246896dddad133cf16e0  libgo/go/strings/compare_test.go
! 6fc3af07975f3f8e78c28cc8b98bae43  libgo/go/strings/example_test.go
! bf5ce9a36e5bedbd7dc045557c398236  libgo/go/strings/export_test.go
  91485bf0f0a1ad6e75a74b5816c57810  libgo/go/strings/reader.go
! ffca52eba4b92c2a24fbf8a8fc6ac8fa  libgo/go/strings/reader_test.go
! a138cc57ced2c51385dc7e09482735b2  libgo/go/strings/replace.go
  3f8a61dbea1b3788851a32c3836f266c  libgo/go/strings/replace_test.go
  5be401c63806185ee237c0bb137c44b4  libgo/go/strings/search.go
  4244a4944e6adcdd4876875c45b9d73a  libgo/go/strings/search_test.go
! a7c201d9a3caf7228bee4496a7267543  libgo/go/strings/strings.go
! 5a393deefb89b3c800c447075b94a95c  libgo/go/strings/strings_test.go
  922ef30f735e54dc806f7f1001312fa7  libgo/go/sync/atomic/atomic.c
! 86bf93b6f8458ff210176ccb6be48f17  libgo/go/sync/atomic/atomic_test.go
  02ac008e348750401076ed908cdaf51d  libgo/go/sync/atomic/doc.go
  e213ecb30da78e95c4ec808dea908299  libgo/go/sync/atomic/example_test.go
  1abc65286966e58e772e23a93e78a08a  libgo/go/sync/atomic/unaligned.go
! 81c084116d0d8145dde5ce2ffbc6ac3b  libgo/go/sync/atomic/value.go
! b2fdda58342667817a298b3e024ce3b6  libgo/go/sync/atomic/value_test.go
  bce2e5ddfc7d396f523e03e136b571fc  libgo/go/sync/cond.go
  647cb2014f8ffdbeb3af5116d2bc56da  libgo/go/sync/cond_test.go
! 5e8ce2e0a595e04701e5deed174f386b  libgo/go/sync/example_pool_test.go
! 379823b8233ddc7532c13535342b773c  libgo/go/sync/example_test.go
! 5d9408fdbfc3e7d6d198b46c07064d94  libgo/go/sync/export_test.go
! e1617e6b96c6f74260432af19a692a6a  libgo/go/sync/map.go
! 71ad28344e922f1a895209edd8feca09  libgo/go/sync/map_bench_test.go
! 17fae3516f8195c35cbf15dfbd4f5f81  libgo/go/sync/map_reference_test.go
! 02f131e649c1e89288aa15aa3245bf02  libgo/go/sync/map_test.go
! 99ca5bd4d9b7266e63dc76eb0fdd4e00  libgo/go/sync/mutex.go
! 6ca5ec0ed58e8e5cceaf69d0870811b0  libgo/go/sync/mutex_test.go
  c2dca259aa25c21414782786a5b764b5  libgo/go/sync/once.go
  2c3240d310641137172167ba79ac92de  libgo/go/sync/once_test.go
! fc671511eec0b97c17c6aaacff90cdbc  libgo/go/sync/pool.go
! 70ce4bae1704966ee184600d3dbc3996  libgo/go/sync/pool_test.go
! 7a143eb46b84fff8f9ca729ab8b1918a  libgo/go/sync/poolqueue.go
  64ec5b8b4aec8fd8ad76d658b859b9ee  libgo/go/sync/runtime.go
! 2b7cbe6d38694ac368965aa733e0b5a5  libgo/go/sync/runtime2.go
! 599ddff7bcaf47b63219b526f44cc0af  libgo/go/sync/runtime2_lockrank.go
  72ceac3d1895eef5f4e9ed1a4181478e  libgo/go/sync/runtime_sema_test.go
! ed5a5bd1e0d95a57da6347d2d6a337d0  libgo/go/sync/rwmutex.go
! 6e3231c7e62e442b590cc8dc21b8ae4a  libgo/go/sync/rwmutex_test.go
! ecc0f5669d668369b39ae3fc191e93e5  libgo/go/sync/waitgroup.go
! 0565e2113baf9c59f317d6f38670f9e4  libgo/go/sync/waitgroup_test.go
! 3f280b435328bda30bee1fe9f6e8d3a2  libgo/go/syscall/bpf_bsd.go
  9aaba33f94ef792cd83c885cb84fbd30  libgo/go/syscall/bpf_darwin.go
  bcba9c41e717ecc5f9fadedc63b51631  libgo/go/syscall/clone_linux.c
  59298e712286f79b16fe86c28ab48fc8  libgo/go/syscall/const_plan9.go
! 598132f71cd40ff38e768ec6f9993eaa  libgo/go/syscall/creds_test.go
  f3bc6044d11bfddc8ddee276c7c3c8a0  libgo/go/syscall/dir_plan9.go
! a00662e475fe9d459295430953886ad2  libgo/go/syscall/dirent.go
! 9e637fe8f51b23680da50d56ad00b3dc  libgo/go/syscall/dirent_test.go
! 40ebb3339843bac09d8fd3fad178ebc0  libgo/go/syscall/endian_big.go
! 0034d19c6def92611f9f06c887551c34  libgo/go/syscall/endian_little.go
! 0f0434c5d9c765199dd218c63ca748ff  libgo/go/syscall/env_unix.go
  191058c52e6b6cfb72ed323baa0e0f01  libgo/go/syscall/env_windows.go
  9d171a1ced6ead793607cd7bcb7f1d58  libgo/go/syscall/errno.c
  e997bae42fe4ba0d7865f88e9f039a9c  libgo/go/syscall/errors_plan9.go
  246ad220feddf48c3796fabb035a8d6b  libgo/go/syscall/errstr.go
  b5fde02a7c01362d218b8e407438c7b8  libgo/go/syscall/errstr_glibc.go
! 99e09fa893bf563c62966cf0fc97d75c  libgo/go/syscall/exec_bsd.go
! b6d87a9382e61be21af2b76cf9280930  libgo/go/syscall/exec_linux.go
! 0ada317d0f37e4f1f1e32895517076e2  libgo/go/syscall/exec_linux_test.go
  ec30317b065747527fccbc8e4cc44f04  libgo/go/syscall/exec_stubs.go
! 208d246dfa5c6469513947907e5c4272  libgo/go/syscall/exec_unix.go
! a10d5d797375c60e5711f5521071982d  libgo/go/syscall/exec_unix_test.go
! 21e0ffcc2987b1b79f6b2387f72dc0c9  libgo/go/syscall/exec_windows.go
! 9e826f2ddd3ac3bfd9d85c43ca3cd424  libgo/go/syscall/exec_windows_test.go
! 6ecaf802afbac821d42f9bd596eae9ac  libgo/go/syscall/export_aix_test.go
  9ae3d196559303bcbfcb54e5ab7b3ea7  libgo/go/syscall/export_freebsd_test.go
  e47cb3fd01944472b1b09591f44ab02c  libgo/go/syscall/export_linux_test.go
! 687f993fe615bbec0dd2869fc28d3640  libgo/go/syscall/export_test.go
! 8da717c80792374633ca6ceb42c25434  libgo/go/syscall/export_unix_test.go
  c0c22c4f29e8103f803487e806626353  libgo/go/syscall/flock_darwin.go
! ceccc326b879cdcf064237f4d3ca0195  libgo/go/syscall/forkpipe.go
! 450142be47b9f19cc8df995ce851361b  libgo/go/syscall/forkpipe2.go
! 86e607127624156a5002762c37c1586d  libgo/go/syscall/fs_js.go
! 330f4a6009a05539f085d1a578e16419  libgo/go/syscall/getdirentries_test.go
! 3029f758f3b668d233e4f073af7ba3eb  libgo/go/syscall/js/export_test.go
! f2a9acd2a4530f20f8df91b27bf38073  libgo/go/syscall/js/func.go
! 458f8aa72147c24165ef98aef203d732  libgo/go/syscall/js/js.go
! 58cc615ba93c90d5cd68a2bb766599fa  libgo/go/syscall/js/js_test.go
  715c03693785f5172ce7ae5971015c28  libgo/go/syscall/libcall_aix.go
  fad34038f40ff23de2b9b3390008db34  libgo/go/syscall/libcall_bsd.go
  8d3d53322b2783b898c415ba37a16dd9  libgo/go/syscall/libcall_bsd_largefile.go
  0510facb65ec87fbb79c71e9b30b6499  libgo/go/syscall/libcall_bsd_regfile.go
  caf93ff057c135366a3fabf9c1992ad9  libgo/go/syscall/libcall_bsd_sendfile.go
! 9889793326ebd5a0d55792f628ac0386  libgo/go/syscall/libcall_glibc.go
  0b7cc30b317196a42882ace5a55527bd  libgo/go/syscall/libcall_hurd.go
  562e5aacf2778a3c9a00918069e43b2f  libgo/go/syscall/libcall_hurd_386.go
  ad4306c7d52c93cc9cdfbaa2415c8ad4  libgo/go/syscall/libcall_irix.go
--- 99086,99719 ----
  60b725f10c9c85c70d97880dfe8191b3  libgo/go/os/testdata/issue37161/a
  3b5d5c3712955042212316173ccf37be  libgo/go/os/testdata/issue37161/b
  2cd6ee2c70b0bde53fbe6cac3c8b8bb1  libgo/go/os/testdata/issue37161/c
! 8cc7ef30f2c0bc9f950168ffe4dd60c2  libgo/go/os/timeout_test.go
  5e60413c95f8421ca70bb23d39fa8d61  libgo/go/os/types.go
! 3456c049a20bd119c533cdce0c8ff891  libgo/go/os/types_plan9.go
! 08b30d749e75aa797731946581e232f1  libgo/go/os/types_unix.go
! bf19d48a8943a20b76a19304f42c85d7  libgo/go/os/types_windows.go
! d61c8538f7ec474183801b1e764b81e8  libgo/go/os/user/cgo_listgroups_unix.go
! 34ebce0a002d09501c67955d493f8767  libgo/go/os/user/cgo_lookup_unix.go
! dd97a90c84eeff5bc473c533213fe049  libgo/go/os/user/cgo_unix_test.go
  24be1c687e6c538507a64aaba948f83e  libgo/go/os/user/decls_aix.go
! 5381c085c6c9f411272d115868c5c7b8  libgo/go/os/user/decls_solaris.go
  d2d3f20206e0defbe9e862e4a0a27845  libgo/go/os/user/decls_unix.go
! 80368ba5af41c30853534411f1bc666d  libgo/go/os/user/getgrouplist_unix.go
! e4fd14f3ab8c42b1bbdee5055bb3a428  libgo/go/os/user/listgroups_stub.go
! bf3b2235ade2fc42640aa867cfa6182b  libgo/go/os/user/listgroups_unix.go
! 4ee215fe44a300d9e734e0940ff6ccaf  libgo/go/os/user/listgroups_unix_test.go
  c1127101febb20131cce341d39d68923  libgo/go/os/user/lookup.go
! 3746a5f2e3ea2c5acc325949bdd16e3c  libgo/go/os/user/lookup_android.go
! 94250a6b54e44ba1041b4fa72af53057  libgo/go/os/user/lookup_plan9.go
! af9fe405f0b1730fc7b7186155304a92  libgo/go/os/user/lookup_stubs.go
! 3f1d7601025abff2699d33374b7d4281  libgo/go/os/user/lookup_unix.go
! 0fb6bcb1d71385254dc4129b65c555ff  libgo/go/os/user/lookup_unix_test.go
  80e4c8e2c040a193473c47f1b683c3b3  libgo/go/os/user/lookup_windows.go
! 79b30d62ff1849b5e2aee6ea97300152  libgo/go/os/user/user.go
! 3f3bee5c70bfd39d5efac5f4c5d6e1c0  libgo/go/os/user/user_test.go
! 005be940c6c87bc973945fa9e7b12543  libgo/go/os/wait_unimp.go
! 784756f45c41473e13f5b175d159a05a  libgo/go/os/wait_wait6.go
! e05a0d782e9df3a5d4ffde4af922f51a  libgo/go/os/wait_waitid.go
  c1b9c98ee021d849c0b43c9216735455  libgo/go/path/example_test.go
  e7362f9952e047522ea3080f1772e750  libgo/go/path/filepath/example_test.go
! dfb064de9125cf01b80b1882d2b3387c  libgo/go/path/filepath/example_unix_test.go
! 6042a5b524d8ebf2703d1516a2b96c09  libgo/go/path/filepath/example_unix_walk_test.go
  d53439751e8554fd84fa78a0103cf17d  libgo/go/path/filepath/export_test.go
  4233036575e89add745849a436003709  libgo/go/path/filepath/export_windows_test.go
  c243339e3b608d1cbf970bea228b3bd2  libgo/go/path/filepath/match.go
! 3a6082fb30f05f9c7e7581498fa881f0  libgo/go/path/filepath/match_test.go
! 9014bd42a0f9b6ca082cfa260c17bcb2  libgo/go/path/filepath/path.go
  182004ef31c7f7d0d6071a350a78deef  libgo/go/path/filepath/path_plan9.go
! dd50e88410bf1389fbf6ab689358242c  libgo/go/path/filepath/path_test.go
! ed815f5d09a96b0b59178ded84026d99  libgo/go/path/filepath/path_unix.go
! 0be09b985b9ec97862683e78f7b30ab4  libgo/go/path/filepath/path_windows.go
  ff36007801cac266bbbb9ea95811cdd9  libgo/go/path/filepath/symlink.go
! 63334475550a15395d9e713f7dec5a5c  libgo/go/path/filepath/symlink_unix.go
  26e03d701fc7a412804382943f651cc0  libgo/go/path/filepath/symlink_windows.go
  2689c67d5fabe8f0ee17ede3ea25e93c  libgo/go/path/match.go
  cbf07a00c9d3ac4f4fbde2ba7d235983  libgo/go/path/match_test.go
  54c6b8c746a5a3135245ba73fbe122c3  libgo/go/path/path.go
  45e0329e1a3506bac219751ad0ef21a2  libgo/go/path/path_test.go
! 54c8f039dbedca75e547d3282a2192b9  libgo/go/plugin/plugin.go
! ecfd40e756df87c94352d6a3c03e5339  libgo/go/plugin/plugin_dlopen.go
! a68bbccbfc9ffe526761f18942742868  libgo/go/plugin/plugin_stubs.go
! 04b168d4a0e14dd979f37d45299fb859  libgo/go/plugin/plugin_test.go
! e98df7288c0d1801e8b3d37304fa4d0a  libgo/go/reflect/all_test.go
! 5e9d62577c02eb79c83aec607666ed4f  libgo/go/reflect/deepequal.go
  a2296897da2a9eb152deaea98d179c73  libgo/go/reflect/eqtype.go
  6ebbb61bd2c7644252d9a065e2b64e0e  libgo/go/reflect/eqtype_aix_gccgo.go
! 1b14a925450417095b4c5936096bb9b6  libgo/go/reflect/example_test.go
! 0b38c4b316a69ba1a5de9b5d385079ce  libgo/go/reflect/export_test.go
! e95f5e57ae79ea6d21cbffc5dded84d1  libgo/go/reflect/internal/example1/example.go
! 5cfaa5afba3c1af9b78f6594ba19d391  libgo/go/reflect/internal/example2/example.go
! 01ec448d31fda0c137061c78a33c0ab9  libgo/go/reflect/makefunc.go
! c0364cab37e2611408e690c4cc2bb989  libgo/go/reflect/makefunc_ffi.go
  64143c1a6fceabc569854ebd07504a3e  libgo/go/reflect/makefunc_ffi_c.c
! 8614abbe361845eb14970cd5b9d184ac  libgo/go/reflect/set_test.go
! f0e5915c28522ca17aa1a77679e1f8b9  libgo/go/reflect/swapper.go
! 99c7197dc04dee46dd1084358975fe42  libgo/go/reflect/tostring_test.go
! 2b13519dde1f451962d423ac16401945  libgo/go/reflect/type.go
! 0e7eb5f48f3d2ff98eb101ed594556c0  libgo/go/reflect/value.go
! d77a6f03521f3a367e2abd2d3e5a8a7e  libgo/go/reflect/visiblefields.go
! abcc596cbf491ac48b3c44ffdf4a3d01  libgo/go/reflect/visiblefields_test.go
! 1e920f1587912122fd4ce92148497780  libgo/go/regexp/all_test.go
  95fb311a7b03e760ccbb36bee08a6856  libgo/go/regexp/backtrack.go
  60e05eaee653363d8a79d7da5096d277  libgo/go/regexp/example_test.go
  d69b2ea15320ca7b32ebec0ddcf9a87c  libgo/go/regexp/exec.go
! a25b72af19ad96bcda938a859a8b7ea4  libgo/go/regexp/exec2_test.go
! b7adc59c204b39424c53265bfdd8ac64  libgo/go/regexp/exec_test.go
! 103321d9c19191b2a232c2cea2ce3e66  libgo/go/regexp/find_test.go
! 8aeea867c0bc382c944b02c5df4e57a0  libgo/go/regexp/onepass.go
! e6582c04ad9b64ac74747046f217143c  libgo/go/regexp/onepass_test.go
! 5ad45a2e80683ee7acaf28fff8305de2  libgo/go/regexp/regexp.go
! 1edc92da8658aa1bdf6a2768b465f128  libgo/go/regexp/syntax/compile.go
  f4a5b748c6b9a24d905f31201c0d0e61  libgo/go/regexp/syntax/doc.go
  4ec17c72c61756faea953da0152e293c  libgo/go/regexp/syntax/op_string.go
! a10a5dffdba8963f3560373f108f2c5f  libgo/go/regexp/syntax/parse.go
! 865667607829e06dd1fbd7cdf8210bd6  libgo/go/regexp/syntax/parse_test.go
  fa7a5c563b7be06e9ced902e305223f7  libgo/go/regexp/syntax/perl_groups.go
! b65fdd1682fd53c59093119b6bb4f089  libgo/go/regexp/syntax/prog.go
! e29404486f3f6183ba9dcddf061fe063  libgo/go/regexp/syntax/prog_test.go
  556819f808bc1fadb92844ff225628e3  libgo/go/regexp/syntax/regexp.go
  c72cd882c3a1c4ab1e7b8dcbe79526f1  libgo/go/regexp/syntax/simplify.go
  a18b993e0182b01aed7c48c8cb271703  libgo/go/regexp/syntax/simplify_test.go
  44a4773a582d6477197072e1b45cc367  libgo/go/regexp/testdata/README
! 70a450ddf5fe80687b991b0ad4d0689f  libgo/go/regexp/testdata/basic.dat
! 874e2e5b58ffcad1569efa6f69fdd73d  libgo/go/regexp/testdata/nullsubexpr.dat
! 18b4f1b60eee114f2aa8aeca15a68859  libgo/go/regexp/testdata/re2-exhaustive.txt.bz2
! 604e45aa21a814f8ef74e0f11d3ff36a  libgo/go/regexp/testdata/re2-search.txt
  f99f99715745fe92f8a824f11d936a06  libgo/go/regexp/testdata/repetition.dat
  454e3934d6cbf6640a547548f78e70b9  libgo/go/regexp/testdata/testregex.c
! 76c8cc5805a12b9fadc96692f13df928  libgo/go/runtime/abi_test.go
! e26da84427467d19e440cad63d0dbc37  libgo/go/runtime/alg.go
! e9fbd84de34e1f1c0f24f2ad7484832c  libgo/go/runtime/asan/asan.go
! bed0f06dcf8f783133f0349c0ff725dd  libgo/go/runtime/asan0.go
  620c42d6906acae7dd0f38723004acdc  libgo/go/runtime/atomic_pointer.go
! 378753206f8b89cdf8507bd838cd752e  libgo/go/runtime/auxv_none.go
  7fe910f3c857427987a1be1f74b0ee1b  libgo/go/runtime/callers_test.go
+ b99c93066c865891540d1edd0f2139fe  libgo/go/runtime/cgo/handle.go
+ 70d3e4639f703bacb09e9c20ab62f4d3  libgo/go/runtime/cgo/handle_test.go
  2b4bf4503adf708178e74d03b7188e26  libgo/go/runtime/cgo_gccgo.go
! 40fa423b562bc3c0f6e23f757b2cf2c3  libgo/go/runtime/cgocall.go
! b7e45ea2a9b926c7184a8afb548ca9ef  libgo/go/runtime/cgocheck.go
! 2440e3d36564d7cb7a3e108795221b20  libgo/go/runtime/chan.go
! e3bc7665040da745033a189258803d88  libgo/go/runtime/chan_test.go
  cea2ebeeac97f27d5f1e673612690253  libgo/go/runtime/chanbarrier_test.go
! e703a94bab0b2a72793a2a8d7e293a8b  libgo/go/runtime/checkptr.go
! 6c11f7278ff791143e10bf48d8668616  libgo/go/runtime/checkptr_test.go
  d24444200f8bef380fcad6ba46723fc1  libgo/go/runtime/closure_test.go
  7971d50020cc0b08b89878bba0ec9d82  libgo/go/runtime/compiler.go
  e0c63ad8382340442573a02a97aebcda  libgo/go/runtime/complex_test.go
  c4e255afc3d67a69f152edbbf405afa6  libgo/go/runtime/conv_wasm_test.go
  cbb402068c51090546e64ff50efa903c  libgo/go/runtime/cpuflags_arm64.go
! 7bf36f41af3d58da062b2bdb93680a37  libgo/go/runtime/cpuprof.go
! c76384d9fa86e9a53404df14124f83cd  libgo/go/runtime/cputicks.go
! 85b0b79b520b765f19072b2cb64742c4  libgo/go/runtime/crash_cgo_test.go
  cfee3af9ebba822f9b0e8a0bbd9375da  libgo/go/runtime/crash_gccgo_test.go
! bd4ad49ba18ca8d5d331e0b9ee3fc79b  libgo/go/runtime/crash_test.go
! 7065f54a77101967b4cc865680bdc415  libgo/go/runtime/crash_unix_test.go
! c1254ad44369723288cc90be0d9cfee5  libgo/go/runtime/debug.go
  8c834fcf7fd2e9c3780e8ccf18f1c18a  libgo/go/runtime/debug/garbage.go
! 9dacb2eef795365dd7352f42cbe399cb  libgo/go/runtime/debug/garbage_test.go
  4b773b3d915f30b30540f9cde03eb184  libgo/go/runtime/debug/heapdump_test.go
! 59e12a044f564e4693eb73486de6d087  libgo/go/runtime/debug/mod.go
! 4568f7c5663d7f9de88c260cd0dafabd  libgo/go/runtime/debug/mod_test.go
! 910083ef196eb04adf6d3fcd9da65a04  libgo/go/runtime/debug/panic_test.go
  324e61ddc62f45a1d1c3fd20a427062a  libgo/go/runtime/debug/stack.go
  7bd8d2bc1b1ac62347f86f745d0eff95  libgo/go/runtime/debug/stack_test.go
  a85550fb24ca8225b8874b47efa133df  libgo/go/runtime/debug/stubs.go
! 3883ec64ea34d94f9926ce88724bd408  libgo/go/runtime/debuglog.go
! a0c4015a51bb28ec01d18975c4b96536  libgo/go/runtime/debuglog_off.go
! 6f2424125dd187abffe914e352844e6b  libgo/go/runtime/debuglog_on.go
  62cba6f9b8d70f7119bca15e6c2b6151  libgo/go/runtime/debuglog_test.go
! 0e7505ba98f8fb823c2eece12c92b128  libgo/go/runtime/defer_test.go
! 1aa730de8fdbd2db79f9cbc19742ca07  libgo/go/runtime/defs_windows_arm64.go
! d5206ddaaf8e60e2ac642d980feca21e  libgo/go/runtime/env_posix.go
  66d03cf12b02144ceb3e7563770e8b7d  libgo/go/runtime/env_test.go
  518595b084705257e997919e33cf3e01  libgo/go/runtime/eqtype.go
  88345351f85e1313557ed2047d58ac27  libgo/go/runtime/eqtype_aix_gccgo.go
! 7ef20e7e48f98ac4f9494d74cc6c5a88  libgo/go/runtime/error.go
! 815f432053468175e93457e2b61a85e1  libgo/go/runtime/example_test.go
! b6b42b4bfc5a3488bdf65b257224fb55  libgo/go/runtime/export_debuglog_test.go
! 769f78529ee65daf969138fc6d7c843a  libgo/go/runtime/export_linux_test.go
! c4d3f033db92cd3a7616ccaeccd1b279  libgo/go/runtime/export_mmap_test.go
! b7280d595c7c4418332d621c92079f22  libgo/go/runtime/export_pipe2_test.go
! 03b5c39915a8c9e0bb25abd5e1f4dd14  libgo/go/runtime/export_pipe_test.go
! aca541d0fcb9891e79eccabcfe613fe5  libgo/go/runtime/export_test.go
! f683c5a9297a201e2f353f2f66fc4a57  libgo/go/runtime/export_unix_test.go
! 7c1728e2211bb9d7860ae60122b3e369  libgo/go/runtime/export_windows_test.go
! 0a6d740c0e4fed9e8ee44889f2b130fa  libgo/go/runtime/extern.go
  c320b7da530e4f0897ae4a0e5f245bdd  libgo/go/runtime/fastlog2.go
  98fa37aa2849cd0923db32ac978bfcea  libgo/go/runtime/fastlog2_test.go
  52d8d18843078e415ebd00a11c8f45f4  libgo/go/runtime/fastlog2table.go
  37daeb0497dbbd2f1756c917528cac47  libgo/go/runtime/ffi.go
  f3e367be9f1303b808ba504b2992d9b0  libgo/go/runtime/float.go
! 4f47c02b74b9ab497ef9ba0aade67121  libgo/go/runtime/float_test.go
! 88f84f0373edbaf2cb8ab03286081540  libgo/go/runtime/gc_test.go
! 00e60955560c4de05e51d4c8ef5efeea  libgo/go/runtime/gcinfo_test.go
! 5037a333a40d5005bc939446c64cc4a2  libgo/go/runtime/hash32.go
! a2a58a779e90e6de2c9ee6d5a55cbd7c  libgo/go/runtime/hash64.go
! 0053f76197106866ed04fd88c78c5fdd  libgo/go/runtime/hash_test.go
! e6ebbb646a66a4f4cc65dd593de1e7b7  libgo/go/runtime/heapdump.go
! 65afc34b649d1dfb72d348b9b355e99e  libgo/go/runtime/histogram.go
! ad916cabfd328ba41705b48e1c5dce44  libgo/go/runtime/histogram_test.go
! 283fbfadd965c374f520e38cf78dad0d  libgo/go/runtime/iface.go
! 61a63fa3cb72afc9ba80270bbcd5a872  libgo/go/runtime/iface_test.go
! 4f25b0d42af956c0cb7884931959c149  libgo/go/runtime/internal/atomic/atomic.c
! 02c5613de05671df16238146193f8f19  libgo/go/runtime/internal/atomic/atomic_test.go
! ed3a9b5ea7529b71eb511ad4ec40d17b  libgo/go/runtime/internal/atomic/bench_test.go
! 5443e7b45cd7b98bf04aaa53ddb41585  libgo/go/runtime/internal/atomic/doc.go
  4e32a2a66164b532ba5d3a00c2b3b080  libgo/go/runtime/internal/atomic/gccgo.go
! c31d65ff09ff1ff1873bb4056f2143d2  libgo/go/runtime/internal/atomic/stubs.go
! 2d5f0c584fa6f511407c0f91bcad47e5  libgo/go/runtime/internal/atomic/types.go
! 2341e9976ee93008598071c1b1925ad5  libgo/go/runtime/internal/atomic/types_64bit.go
  1abc65286966e58e772e23a93e78a08a  libgo/go/runtime/internal/atomic/unaligned.go
! 195b8a888600d518d7035b3227d2df55  libgo/go/runtime/internal/math/math.go
  3f66365f42e291740221db6cdeab6e44  libgo/go/runtime/internal/math/math_test.go
+ f77e9088ae43414727606c21215c7208  libgo/go/runtime/internal/sys/consts.go
  d3209c9cf093801706fb8cb5b31bc0e8  libgo/go/runtime/internal/sys/intrinsics.go
! e6c71e533ed828d4d9c7936509a96b95  libgo/go/runtime/internal/sys/intrinsics_common.go
  3d0e0f78fa156fece5ea69a22b4257b0  libgo/go/runtime/internal/sys/intrinsics_test.go
! f6ba9cd11a4f3c4dbdfe4fd25d52bc66  libgo/go/runtime/internal/sys/sys.go
! fcbe91178b8ba2db32680d7edeb3ca69  libgo/go/runtime/internal/syscall/errno.c
! cea7a3d1c931094279c1cb4fdd1daa43  libgo/go/runtime/internal/syscall/syscall_linux.go
! 2e532d876a3438b0fa7008e09fb398ae  libgo/go/runtime/internal/syscall/syscall_other.go
  3c71ad04ba9834cd1e4cdcd1b873f6ab  libgo/go/runtime/lfstack.go
! b1ec289d64e947dfc47b0880b7f9057c  libgo/go/runtime/lfstack_32bit.go
! 1e8e40a972895eaeb176c1dd784eb7f9  libgo/go/runtime/lfstack_64bit.go
! 348b063cca65549c3dd160edfa1250cd  libgo/go/runtime/lfstack_test.go
! a66ceb3f4b9ba4bc28cf64cc1abf8c07  libgo/go/runtime/libfuzzer.go
! 7113952d64c37410af20a7c76c95c8c5  libgo/go/runtime/lock_futex.go
! 1021c5b583ab2bf07235a834e9bc3601  libgo/go/runtime/lock_js.go
! 877ee76adabcaea10f24a7082d56adfb  libgo/go/runtime/lock_sema.go
! 2e2c067619c65f8661b74b316e0a7b5f  libgo/go/runtime/lockrank.go
! 3c23c8dd57027bcb55130592a0ccb55d  libgo/go/runtime/lockrank_off.go
! a85c2877b147ce7ce76264ec91e61b9f  libgo/go/runtime/lockrank_on.go
! 3d2a6c0dcb653868125f8f8666cf3d20  libgo/go/runtime/lockrank_test.go
! 3b79d3aa25513f72a0bd7c4de0ee771c  libgo/go/runtime/malloc.go
! ca3a8024bdd365e5b2f202d2b2fa55cb  libgo/go/runtime/malloc_test.go
! f457cad182a2921b15aa2f4e96172cbf  libgo/go/runtime/map.go
! b362d673964224c7ad5b7c0fc0411c67  libgo/go/runtime/map_benchmark_test.go
! 0b18a9748621dad4195ae0b7de110540  libgo/go/runtime/map_fast32.go
! 25f9c48a77e3867df7fc8a14bf0c2c69  libgo/go/runtime/map_fast64.go
! 0c498cdc256b9a75198dca254f453192  libgo/go/runtime/map_faststr.go
! 7c5fd4d117388bd542eeeb2321dd4fdb  libgo/go/runtime/map_test.go
! 5c266146a59b646cc69bd6c627c708ae  libgo/go/runtime/mbarrier.go
! 519a8cbec2018fefdaec31d55648bf49  libgo/go/runtime/mbitmap.go
! 30b03e84c31573d3a3252f0e2519fd23  libgo/go/runtime/mcache.go
! 1c086e4f02c68c5bdc7d5ae24909ebfd  libgo/go/runtime/mcentral.go
! fab5ed36c73ae27abf390309c40789d4  libgo/go/runtime/mcheckmark.go
  bd01a74e0a3f3e08aeec945100c329bc  libgo/go/runtime/mem_gccgo.go
  034df5e78566981cc4e6b61135fef43b  libgo/go/runtime/memmove_linux_amd64_test.go
  e295e76c8e913427333b9f518014abc6  libgo/go/runtime/memmove_test.go
! c21485376d776d06e1c850e5ae0f4c01  libgo/go/runtime/metrics.go
! 99d9ac90bfb1f3485b68b2f90afc6bd7  libgo/go/runtime/metrics/description.go
  c910177cd122abd5a9eba6a885a93910  libgo/go/runtime/metrics/description_test.go
! 33f814b0e95012cf68d0afa687396802  libgo/go/runtime/metrics/doc.go
  39ab6d68704b555dc84d5054697cada6  libgo/go/runtime/metrics/example_test.go
  b160fa69fe0592127a84a5dfaee0d157  libgo/go/runtime/metrics/histogram.go
  ce5e99bef63aa6aa260ed1e961be86a0  libgo/go/runtime/metrics/sample.go
  f61bd133399628a1900b27b3a28141cf  libgo/go/runtime/metrics/value.go
! 4be2ddebee6f3bef20e5b2b7791955d9  libgo/go/runtime/metrics_test.go
! bafbf1d2d3263a0fff5b92c9ac9359b4  libgo/go/runtime/mfinal.go
! 2bbdf068ba60210756eba61971cb20f2  libgo/go/runtime/mfinal_test.go
! 7d86028716894de76a94ee95b30d27c2  libgo/go/runtime/mfixalloc.go
! 8007db0c6feec57a28429b21a1ef78e0  libgo/go/runtime/mgc.go
! a8709d7c238a3ebef9f46b99143c2df2  libgo/go/runtime/mgc_gccgo.go
! 39bcfb71559ca799f17cb9bc4780d8b6  libgo/go/runtime/mgcmark.go
! c7e6b909e151df7124bd08ff0daf328e  libgo/go/runtime/mgcpacer.go
! 636b84b242b81054c54061538b405b25  libgo/go/runtime/mgcpacer_test.go
! aa9ad1147da69f5f7e5001e769ee231c  libgo/go/runtime/mgcscavenge.go
! e16e8948f439ba8c76468b0a77d7a42d  libgo/go/runtime/mgcscavenge_test.go
! 3078747173b2ddafaa80eb1133100b41  libgo/go/runtime/mgcsweep.go
! 22f1432413c5ca313628dac85eb53e35  libgo/go/runtime/mgcwork.go
! fddcaa91fd4b601c8c06e89d34cbeb67  libgo/go/runtime/mheap.go
! b90dbc9a7d5679bc3dc81e5f0027a46d  libgo/go/runtime/mkfastlog2table.go
! fd465b62e5a5fe58b83bee93c87d1b0c  libgo/go/runtime/mkpreempt.go
! b85b90722653d081f736adbb23284817  libgo/go/runtime/mksizeclasses.go
! 4012ca088ca9184ee9166609141c493f  libgo/go/runtime/mpagealloc.go
! 5b72a638349bf827c55127a4df265629  libgo/go/runtime/mpagealloc_32bit.go
! 1a35c9b9bb75220b57a2a6a5a7144223  libgo/go/runtime/mpagealloc_64bit.go
! 4a2d84b4bc708ab77e73f93234fcbb5d  libgo/go/runtime/mpagealloc_test.go
! ba9322acd2fc1218d70460064698e555  libgo/go/runtime/mpagecache.go
! 821f6f42878404ccafd21170168c67f3  libgo/go/runtime/mpagecache_test.go
! c02fce3d05ff0124f905ad2526e85fbc  libgo/go/runtime/mpallocbits.go
  d92a6ae713740eec77e0d5fdeead20a6  libgo/go/runtime/mpallocbits_test.go
! 4e54e0fbfa684d6fc0041bc9be21b286  libgo/go/runtime/mprof.go
! a103340f96aa538fd8c25d5aafc7c38a  libgo/go/runtime/mranges.go
  fc7d340e2875c2cb28c840799efb1ba4  libgo/go/runtime/mranges_test.go
! 43f739fdba3701e538b4de43a7a73738  libgo/go/runtime/msan/msan.go
! f51ec4017ff9805ea20fa15f66b559ba  libgo/go/runtime/msan0.go
  b5116da5a4fcab561313b26771e06d9f  libgo/go/runtime/msize.go
! 43b02f9940e97a6898a4af772c49b8eb  libgo/go/runtime/mspanset.go
! 6c97fa5c045c37b102c4ce18c05ead6d  libgo/go/runtime/mstats.go
! 713f4d9e0f17230f821cff5047aaa2bb  libgo/go/runtime/mwbbuf.go
! e6ce83cedb25ef9c48bf54f731976ccb  libgo/go/runtime/nbpipe_pipe.go
! 05ebe5700fbad204bed0ae20539ba0ed  libgo/go/runtime/nbpipe_pipe2.go
! f19f1d0af480b8fcfe230e895a5327a3  libgo/go/runtime/nbpipe_test.go
  b955bbe836c3bbd65144d08f3aa3f5ea  libgo/go/runtime/net_plan9.go
! 07853e9e5d75dbc87465c4a6656a3f1c  libgo/go/runtime/netpoll.go
! 468758fa351cadd6c1e3f49e176c3380  libgo/go/runtime/netpoll_aix.go
! 9efa007eca13bf05a1d33e90cdf35b66  libgo/go/runtime/netpoll_epoll.go
! c7f2ac81788341262501a74e1d988819  libgo/go/runtime/netpoll_fake.go
! 16661155dfd7033d3049adf0e2cce275  libgo/go/runtime/netpoll_hurd.go
! 63bf0b3329e657a52a906ace4fa66eea  libgo/go/runtime/netpoll_kqueue.go
  ea73638a43a5d13ff246a5ffa08b173f  libgo/go/runtime/netpoll_os_test.go
! 4479c857753dedf14fa22795cea6eb5f  libgo/go/runtime/netpoll_solaris.go
! 1d2538483548cd801b8758d8d70ae039  libgo/go/runtime/netpoll_stub.go
  ef6fe895bb7ee3f159c5b6ca1ff80f3b  libgo/go/runtime/netpoll_windows.go
! 32894be78090e55fa16d0424b9cef41f  libgo/go/runtime/norace_test.go
  abe03e43d221f9678964394a556d4cf6  libgo/go/runtime/numcpu_freebsd_test.go
! ec7301b1b888280949241137f5eaec5a  libgo/go/runtime/os3_solaris.go
! c03531a5a9e6e4702497fbef05cec558  libgo/go/runtime/os_aix.go
! 4a8952faeea71fecb32e2938c8c0836f  libgo/go/runtime/os_darwin.go
! ad7c3c5d83575cdcba8f7da7415398af  libgo/go/runtime/os_dragonfly.go
! 7bfc4b826baa08b5316d69f6b365eea4  libgo/go/runtime/os_freebsd.go
  6ac875ea3308e7ca018f45ec3d4ff5e1  libgo/go/runtime/os_freebsd_arm64.go
! 0d0662a610f8d3526a77aa25a9bcf813  libgo/go/runtime/os_gccgo.go
! 52bd070d327db7c2e9146a7c4afc9652  libgo/go/runtime/os_hurd.go
  e9438f316eb39bee387d1e010a69e0ca  libgo/go/runtime/os_illumos.go
! 4eb91f7317f1c73cc7432c1e7e3e6354  libgo/go/runtime/os_js.go
! 4175790133e164af4eef573f293a0b70  libgo/go/runtime/os_linux.go
  bc2773acfbcd6d681d5355bd9d5179d2  libgo/go/runtime/os_linux_arm.go
! 6c7f3b61dff535c19e812385685d0f9b  libgo/go/runtime/os_linux_arm64.go
! 8140e1fcc824729cab8dc67bf420185c  libgo/go/runtime/os_linux_mips64x.go
! 3194bab522931391f0e71703e6b435f6  libgo/go/runtime/os_linux_mipsx.go
! 48ff97754c91cc0b7bffc133ef0f9c82  libgo/go/runtime/os_linux_noauxv.go
! 9f72ec4c15c2cb9201b2ebfed90af372  libgo/go/runtime/os_linux_ppc64x.go
  62cfdb71cdb491bd41cbf9340fbedf1c  libgo/go/runtime/os_linux_s390x.go
! 0f92643c98006e558269b8d0ff9d4e85  libgo/go/runtime/os_netbsd.go
! fa3e459b736723abc1d4060fedc7e85b  libgo/go/runtime/os_netbsd_arm64.go
! 91402a2069c67a3f213ed5b485cb0374  libgo/go/runtime/os_only_solaris.go
! 880a6034a1cf2117312119538ef7002b  libgo/go/runtime/os_openbsd.go
  b62275fe8976cc8c90a8d3ead2cc5276  libgo/go/runtime/os_solaris.go
  b2d6fa5728766e88e876f91f1a3c9e95  libgo/go/runtime/os_windows_arm.go
! 1f9e482aad9bb272fc4ec908c3ef88c0  libgo/go/runtime/os_windows_arm64.go
! 75d0d2179d90a7eae8631a8715992d14  libgo/go/runtime/panic.go
! 87827ef7af424ba1435bb82e6a350009  libgo/go/runtime/panic32.go
  f3061a853da4f2665a4e6253ec4b50db  libgo/go/runtime/panic_test.go
  093fb8619e8f718d7c2a6748f7a0d4da  libgo/go/runtime/pprof/elf.go
  20b4a3be648af8ee3718713b9f616765  libgo/go/runtime/pprof/label.go
  dd42aa77fa2e7d47ac2023d5f32aad5e  libgo/go/runtime/pprof/label_test.go
  934fdf417b83965fbe03f6a27e1e4ff9  libgo/go/runtime/pprof/map.go
! 3bb0c12700bed968c9aeb547498ca716  libgo/go/runtime/pprof/mprof_test.go
! c3e3902a5ed823df1e40ebe4bfbe65cc  libgo/go/runtime/pprof/pprof.go
! 361ec179c2b1f7f31cc8c490d85550bf  libgo/go/runtime/pprof/pprof_norusage.go
! f2d932d557a3c6762c4c864e555abd2a  libgo/go/runtime/pprof/pprof_rusage.go
! e35bfe649a26d4ae2653fadddd27c570  libgo/go/runtime/pprof/pprof_test.go
! b922576f307f6e883d8f6c18179af70c  libgo/go/runtime/pprof/proto.go
! 16f7cb764f4e4f2dab2f2f1fe896458d  libgo/go/runtime/pprof/proto_test.go
  67d1caf2c57ece01a95a85053ad0afb3  libgo/go/runtime/pprof/protobuf.go
  0b700804ed788627f579d33fdc38f64b  libgo/go/runtime/pprof/protomem.go
  0b4f6877a921a7caecae0481b1d994f1  libgo/go/runtime/pprof/protomem_test.go
  a41903e6b202c94c5cf7608397153b93  libgo/go/runtime/pprof/runtime.go
  2ea1c28984ca3fcabe6f98ace0e16b28  libgo/go/runtime/pprof/runtime_test.go
+ 6ea8c32c59217e372fffe21d78a34192  libgo/go/runtime/pprof/rusage_test.go
  5913b7b52393d1764efd64d1da9c7054  libgo/go/runtime/pprof/testdata/README
  14018ad92171c12664a70b2c9d653bc8  libgo/go/runtime/pprof/testdata/mappingtest/main.go
  b0c0ee9afbf20e5ec7df25bf6a591593  libgo/go/runtime/pprof/testdata/test32
  70ce312996442a3c9f1ca1c61d10e628  libgo/go/runtime/pprof/testdata/test32be
  092db9490d8f1d4d5d6d45c308363239  libgo/go/runtime/pprof/testdata/test64
  330e0459efb34478eab1df29cf3b1530  libgo/go/runtime/pprof/testdata/test64be
+ f0b30fedaf1a25232c46c30d7272def9  libgo/go/runtime/pprof/uname_linux_test.go
+ 10540f36df8b36a378ac5bdd7d77f77f  libgo/go/runtime/pprof/uname_other_test.go
  4d361e4dc4fe1dd24b4faef629b9ca73  libgo/go/runtime/preempt.go
! 44dca2c669f877881cdd53081201eef9  libgo/go/runtime/preempt_nonwindows.go
! f158148515488e6672d0fdcbee1e59e1  libgo/go/runtime/print.go
! 53059568bdd25e6e1a55262ba5033ffd  libgo/go/runtime/proc.go
  ae6799d03b400a51be099b6b67904f9e  libgo/go/runtime/proc_runtime_test.go
! 25bd156cf24d8ec74ec7e949d0d2b5f3  libgo/go/runtime/proc_test.go
  05262f8d035dc7329132ff2204136f6a  libgo/go/runtime/profbuf.go
  d5e668c7e76529245dc2b9fa56fee3a8  libgo/go/runtime/profbuf_test.go
  76f5ccb5dde7aec4ad22293203beb1c5  libgo/go/runtime/proflabel.go
! e79c27feed0d92aa4d4ae2a068537ad8  libgo/go/runtime/race0.go
  befb3cf1a8dfbf62d85d4c066b099e09  libgo/go/runtime/rand_test.go
  a9bb6d5971fad9daae8045e815ce3622  libgo/go/runtime/rdebug.go
! c939401ed68d4a1d8759363b39932340  libgo/go/runtime/relax_stub.go
! d2975d2ea63c0d316e41530e6620248a  libgo/go/runtime/runtime-lldb_test.go
  94ecf1eafd18d3b7283ab71080f03f70  libgo/go/runtime/runtime.go
! 37bb0c93282fc15905ecf481d09a8da3  libgo/go/runtime/runtime1.go
! d0e0a709ad3a2e43190ae2face195df3  libgo/go/runtime/runtime2.go
! 38b16212f071287f79281750031fe3b8  libgo/go/runtime/runtime_linux_test.go
! 5af8c0b26501e642dea4774890593801  libgo/go/runtime/runtime_mmap_test.go
! 2696e2ff8cadafefbc02d41b4d174d5e  libgo/go/runtime/runtime_test.go
! 656cba0675980c8b1afed4f0293f6716  libgo/go/runtime/runtime_unix_test.go
  4d4aac317c0d55be4f22b399ef43cc55  libgo/go/runtime/rwmutex.go
! a87b2b9b3c0de05d3a20c8238ccea53e  libgo/go/runtime/rwmutex_test.go
! 6cb4f5982020b3e594a0654f52ca851b  libgo/go/runtime/select.go
  3fc3a1073075fbc3404dd60fef3c394c  libgo/go/runtime/sema.go
  bb2f5f655d3c5eeea977bc4dd0c46cad  libgo/go/runtime/sema_test.go
! d6c0137bc525aa12af417b42e20e6f66  libgo/go/runtime/semasleep_test.go
! 93d10cdbc07449b126873d432f1937a1  libgo/go/runtime/signal_gccgo.go
! e22592c21a7b43b13a0942b4567d7a85  libgo/go/runtime/signal_unix.go
! 522a1b9795327253f72c4d7123114ac3  libgo/go/runtime/signal_windows_test.go
! cb910853e45267c90689f9c7d9c7f021  libgo/go/runtime/sigqueue.go
! 2aa3d6c06de80159d3558d99bab2e579  libgo/go/runtime/sigqueue_note.go
! 4bc68ab961383842172e7e3f23ecceaf  libgo/go/runtime/sizeclasses.go
! cc7ef81983213c462b01d1f9471b140c  libgo/go/runtime/sizeof_test.go
! af63829520884bf94857729607701539  libgo/go/runtime/slice.go
  451d4d651d99426f7901f74ddd7e6e5d  libgo/go/runtime/slice_test.go
! 7370356b0fcf763bc0242a0da4373f91  libgo/go/runtime/stack_test.go
! b8a73eafe6f2ca74cc15dda8c39bbea8  libgo/go/runtime/string.go
  3d5512aded08e80fbb3d9a7454c58b3b  libgo/go/runtime/string_test.go
! 36124270fd06eec4e44280e704a92922  libgo/go/runtime/stubs.go
! ca8363207294a9f216fbe425eccede9a  libgo/go/runtime/stubs2.go
! 12b44346503d665409495c32e347f68c  libgo/go/runtime/stubs3.go
! 2e712dcc2cc69bfc61218216de5bba1f  libgo/go/runtime/stubs_linux.go
! 41fa5c19da0693ff3fc39a0124ceb3e5  libgo/go/runtime/stubs_nonlinux.go
! c124a6f1e2cfafd859ea3193703f3b24  libgo/go/runtime/symtab.go
! 1c0d72c111961185d3a5f30033fbcf83  libgo/go/runtime/symtab_test.go
! cfaf5c714381edcca73a40de48684b2c  libgo/go/runtime/sys_wasm.go
  c472fb1d79f1919c32c8087c37e8a606  libgo/go/runtime/testdata/testfaketime/faketime.go
  0e5300ee70a78543ac67025af26a69b5  libgo/go/runtime/testdata/testprog/abort.go
! 15696b1e133b9ebf6c475bc4cc00c6be  libgo/go/runtime/testdata/testprog/badtraceback.go
! 35692f934aeb84bc7e26c9f569ea14c4  libgo/go/runtime/testdata/testprog/checkptr.go
  172e4208200267e59d0ea047a8c0440d  libgo/go/runtime/testdata/testprog/crash.go
+ f459973db7b23466a7f8f6fbe5564694  libgo/go/runtime/testdata/testprog/crashdump.go
  fa231bb8c7bea90eb3b4f56c648a1cd4  libgo/go/runtime/testdata/testprog/deadlock.go
! 43010fa8c4d513b16d0035f108d80025  libgo/go/runtime/testdata/testprog/gc.go
  4a33f046238f211f09e59df6e0298be6  libgo/go/runtime/testdata/testprog/lockosthread.go
  d9e02d0b5bbe11e3d270bbd949888cf8  libgo/go/runtime/testdata/testprog/main.go
  1e74a8f6718e1af4736e09e826b27dc4  libgo/go/runtime/testdata/testprog/map.go
  f7ea862313619d428b31b40fd107f93f  libgo/go/runtime/testdata/testprog/memprof.go
  e9e92bff3636bbec8c572dab5cdc5847  libgo/go/runtime/testdata/testprog/misc.go
! cb063d633ecb8aaaad0d72e3382c61ac  libgo/go/runtime/testdata/testprog/numcpu_freebsd.go
  9000e4cbb4edd13619b679af8fc6106d  libgo/go/runtime/testdata/testprog/panicprint.go
  c2048f4452acdf90e12de2313c902b9d  libgo/go/runtime/testdata/testprog/panicrace.go
! 3e986bb3a815a2f34af430f3c419379d  libgo/go/runtime/testdata/testprog/preempt.go
! 66091953492e02824da269113649798b  libgo/go/runtime/testdata/testprog/signal.go
! 2e1b626bebdbeb5a6f2ff6d9c7e07734  libgo/go/runtime/testdata/testprog/sleep.go
  b86bee5ad967b6809bba1a6e5ba90247  libgo/go/runtime/testdata/testprog/stringconcat.go
  ec6f3dd15e09fab6a391e7a9f9a6a831  libgo/go/runtime/testdata/testprog/syscall_windows.go
  4aaaef9d2cf35e4eabd0f3ee96f907bb  libgo/go/runtime/testdata/testprog/syscalls.go
  cac0974909402e3236227717b3bd7f7c  libgo/go/runtime/testdata/testprog/syscalls_linux.go
! 1380bb294af34d1800859b342acfe744  libgo/go/runtime/testdata/testprog/syscalls_none.go
  d12956ad4f26beaceacb3f1add9607e0  libgo/go/runtime/testdata/testprog/timeprof.go
! 7ebcba86bbbe1b4e0286bf3b0202d30b  libgo/go/runtime/testdata/testprog/traceback_ancestors.go
  ea8fd66b0b8dfb93b42d1225205c9b01  libgo/go/runtime/testdata/testprog/vdso.go
! 3e6fc2d9f30f257390bf856e9991b641  libgo/go/runtime/testdata/testprogcgo/aprof.go
! abd07363a69f19d931b6b50e508b515b  libgo/go/runtime/testdata/testprogcgo/aprof_c.c
! 7caece527d0a50757f72f4cd7c7b6993  libgo/go/runtime/testdata/testprogcgo/bigstack1_windows.c
  cb7bbb3acd0fdb0ddc9ec3bb6361724b  libgo/go/runtime/testdata/testprogcgo/bigstack_windows.c
! d646d6aa066c8a14834f5e3efc6d6408  libgo/go/runtime/testdata/testprogcgo/bigstack_windows.go
! 2e7f3077926a8d83a2c7d163b9f695ac  libgo/go/runtime/testdata/testprogcgo/callback.go
! 87fc6d47bb306862c645a8e3a3f5a678  libgo/go/runtime/testdata/testprogcgo/catchpanic.go
  f49395d9977a4e6a20432c77725b2b4a  libgo/go/runtime/testdata/testprogcgo/cgo.go
  ebaf5edc08d3a26b8c824f217f07d4fa  libgo/go/runtime/testdata/testprogcgo/crash.go
  88e0bb6d68a5214c81759f62d5bf42c4  libgo/go/runtime/testdata/testprogcgo/deadlock.go
  eb23be0ba22dad5ed40d97c424315870  libgo/go/runtime/testdata/testprogcgo/dll_windows.go
! e0ffd9a369b18eec50a9a0ae4722aa48  libgo/go/runtime/testdata/testprogcgo/dropm.go
  459ea91b6e71cd736d3c50e96e8e459b  libgo/go/runtime/testdata/testprogcgo/dropm_stub.go
! 81252ae86ce2c6ec21b94158400b70d8  libgo/go/runtime/testdata/testprogcgo/eintr.go
! 2bbffd6f7d7fb06333b136e6e9e3eddb  libgo/go/runtime/testdata/testprogcgo/exec.go
! db178f1d184b7e16cf53417e2a6f029a  libgo/go/runtime/testdata/testprogcgo/gprof.go
! c1f9e5efd8574166003de44a29fe356b  libgo/go/runtime/testdata/testprogcgo/gprof_c.c
! 903c03147726e1b981db06c0c4871418  libgo/go/runtime/testdata/testprogcgo/lockosthread.c
! 4a9cb0849425627d67404401f3663585  libgo/go/runtime/testdata/testprogcgo/lockosthread.go
  d9e02d0b5bbe11e3d270bbd949888cf8  libgo/go/runtime/testdata/testprogcgo/main.go
! b6f9604f0afc8be2ff3759271cfff30b  libgo/go/runtime/testdata/testprogcgo/needmdeadlock.go
! 4a44642cdf4bc4d0e2518dcd8e1aeae0  libgo/go/runtime/testdata/testprogcgo/numgoroutine.go
! 987e7bc6d44ab4733bf76ab3b6a292dc  libgo/go/runtime/testdata/testprogcgo/panic.c
! c7695d0a746fd481b08bb2de59d149b1  libgo/go/runtime/testdata/testprogcgo/panic.go
! fcdf5ba08591485b38dfa0f5fa21bd8e  libgo/go/runtime/testdata/testprogcgo/pprof.go
! 4b35bc74669db6ac0157a0f19f1c19fe  libgo/go/runtime/testdata/testprogcgo/pprof_callback.go
! 270e669d99622757a508774a1b732737  libgo/go/runtime/testdata/testprogcgo/raceprof.go
! 21fc5231cdaf208c0e346b858d580979  libgo/go/runtime/testdata/testprogcgo/racesig.go
! ba4c19f2f5d11b83be62a1048d8859ba  libgo/go/runtime/testdata/testprogcgo/segv.go
  2a1d972b04491bafa8f369a961984aad  libgo/go/runtime/testdata/testprogcgo/sigpanic.go
! 8a59bdb8caf43575d211a0b775d89dce  libgo/go/runtime/testdata/testprogcgo/sigstack.go
! 0828ab644589b73e5a7a50896affaed7  libgo/go/runtime/testdata/testprogcgo/sigthrow.go
  c178d94c2363d68c114e7e28c23b1a25  libgo/go/runtime/testdata/testprogcgo/stack_windows.go
! 6fbd787fe1f462c46627517950c3a0c7  libgo/go/runtime/testdata/testprogcgo/threadpanic.go
  21ca4bdb7d827c5d39c0f256ed673d6c  libgo/go/runtime/testdata/testprogcgo/threadpanic_unix.c
  4521507061b29e1f266a11e2a7a99698  libgo/go/runtime/testdata/testprogcgo/threadpanic_windows.c
! f8f779bc7501702ab96b2344ca3d8755  libgo/go/runtime/testdata/testprogcgo/threadpprof.go
! b26816479c9d329ce0ba946581ca4379  libgo/go/runtime/testdata/testprogcgo/threadprof.go
! a2d305ff02345fef6e1b5f2cebc673bc  libgo/go/runtime/testdata/testprogcgo/traceback.go
! bb9d48f3cabbeb1b3abed468ae591e9d  libgo/go/runtime/testdata/testprogcgo/traceback_c.c
! 7b5b2a9d01baba8a1d2171d527a6d355  libgo/go/runtime/testdata/testprogcgo/traceback_gccgo.go
! 69e5005c091477b44f15875c5dff96dd  libgo/go/runtime/testdata/testprogcgo/tracebackctxt.go
! bbda1b6b7bcf56a6f479563ecd3c87ac  libgo/go/runtime/testdata/testprogcgo/tracebackctxt_c.c
! 7051c22e67fa07b18f4ab03ddf31e22b  libgo/go/runtime/testdata/testprogcgo/windows/win.go
  0b0ccb29e430d4c4a9ab19412c121273  libgo/go/runtime/testdata/testprogcxx/main.go
  f8fc0effb485a49c8a192369654d9fea  libgo/go/runtime/testdata/testprogcxx/traceback.cc
  5af43c8e3a18016d151097514c73ce7b  libgo/go/runtime/testdata/testprogcxx/traceback.go
  d9e02d0b5bbe11e3d270bbd949888cf8  libgo/go/runtime/testdata/testprognet/main.go
  286288807cc6c215bcfb8cc6ac39327e  libgo/go/runtime/testdata/testprognet/net.go
! 3381c643b586c832e39aedd222f23b23  libgo/go/runtime/testdata/testprognet/signal.go
! 137a27de9572254432e2974020d93d25  libgo/go/runtime/testdata/testprognet/signalexec.go
! d13c844985b40f9acca38cc30a20e1cf  libgo/go/runtime/testdata/testwinlib/main.c
! e768db4e77a4c9d20ed680fdb4e4e27b  libgo/go/runtime/testdata/testwinlib/main.go
! 41c568a38b6206428e1a78af5dd1b611  libgo/go/runtime/testdata/testwinlibsignal/dummy.go
! 2677d556587576024c42de3df9e61677  libgo/go/runtime/testdata/testwinlibsignal/main.c
  73b045094ad01a0e940034428947dd5b  libgo/go/runtime/testdata/testwinsignal/main.go
! a67408423e24b5ecdc18a1a04351e1f4  libgo/go/runtime/time.go
! e3fe6b1bbe33d114d81b246b58308330  libgo/go/runtime/time_fake.go
! 1b8d4358c891531a25ba1392e2c3cc7a  libgo/go/runtime/time_nofake.go
  101d390946aaa71a11228ad540098145  libgo/go/runtime/time_test.go
! 65ea62fdd0062061fb74a8ab03e6d77e  libgo/go/runtime/timeasm.go
! 3e7ea053958d2ebe2946ef065fa140da  libgo/go/runtime/timestub.go
! f979f6591b790eb50f77f3efccb80481  libgo/go/runtime/timestub2.go
! 9538eb71e037e70a58409e2d4e622c43  libgo/go/runtime/tls_stub.go
! 22cfc7fc26f194cbd83bdb122799f3f9  libgo/go/runtime/tls_windows_amd64.go
! 68e788d0db246d29a29a65da2564e921  libgo/go/runtime/trace.go
! 72a341958ab94b31d5f88616db512239  libgo/go/runtime/trace/annotation.go
  7d05fccd96ef7c5ca2a56c68539addd1  libgo/go/runtime/trace/annotation_test.go
  8394ada76c0c28f76f5e262e5c99f974  libgo/go/runtime/trace/example_test.go
  461ea3ae4a3de89bd39a90cd59395753  libgo/go/runtime/trace/trace.go
  8ffa5ee76cec4cde4685441101e038d3  libgo/go/runtime/trace/trace_stack_test.go
  3956a504e82dfb465d6f711422d5e6af  libgo/go/runtime/trace/trace_test.go
  6e4f94a6076e388fadedd6cc333efdf0  libgo/go/runtime/traceback_gccgo.go
! be067495e660afd45866543733ba3c1a  libgo/go/runtime/traceback_test.go
! 67537c1e9cbe7218a3d60bdee31dc3cd  libgo/go/runtime/type.go
  c60a5202f5ceb0e3f3b09ab202e9f6c7  libgo/go/runtime/typekind.go
  5a418f6713f974c3cd474e9ffea7cc82  libgo/go/runtime/utf8.go
! e0dc4e36a6f4233beaf22869d1f43d5e  libgo/go/runtime/write_err.go
! 31bde800e23dfb19bc9c77460920260d  libgo/go/runtime/write_err_android.go
  ff84f5d56acf431dcdc3ea0b97c42ca3  libgo/go/sort/example_interface_test.go
  b89549ffb67af1968a2b38c8f879ec67  libgo/go/sort/example_keys_test.go
  264a03e111dff061a89d470fab5b512d  libgo/go/sort/example_multi_test.go
! e66dbe532114e85a4e82a531c764e348  libgo/go/sort/example_search_test.go
  b89a87e51c9a8363066de856ef127981  libgo/go/sort/example_test.go
  21ebe3c56494e1ebc52acb3251a6f78a  libgo/go/sort/example_wrapper_test.go
  5ec468d74053964b118cc04effd2611c  libgo/go/sort/export_test.go
! 2ed502f014b6a7101abf9df72f8f09b2  libgo/go/sort/genzfunc.go
  ab69a9f941ac3f104b923190814c37f3  libgo/go/sort/search.go
  3e876da36a15eeb8775010f13220c341  libgo/go/sort/search_test.go
! 9a294826879e8cc199cc803b6980a3b9  libgo/go/sort/slice.go
! bb14bd325b445668ff884605a9dac0aa  libgo/go/sort/slice_go113.go
! 42b65df48596739142642dd787667cf2  libgo/go/sort/slice_go14.go
! d0c3e418f4cb2942793a1534dde0afe3  libgo/go/sort/slice_go18.go
! 200538f186efb3aa76335e4f8a666723  libgo/go/sort/sort.go
  838b24b5f7cf8599474947780e5ee459  libgo/go/sort/sort_test.go
  a5872ee6a27e38bd3b6a51628c580f87  libgo/go/sort/zfuncversion.go
  c57d3bac728104db67ce130b39533fa2  libgo/go/strconv/atob.go
  2b0e97637f1876802fd5251d27c86e27  libgo/go/strconv/atob_test.go
  cbb11485fea3e1dec0a0bb5056fbabdd  libgo/go/strconv/atoc.go
  10c2791c2e8bdccd4d6f9a4fdcc4d28a  libgo/go/strconv/atoc_test.go
! 53c67e1f20315db355c54c0b82a0a3ee  libgo/go/strconv/atof.go
! 08149d0484cfa8ca4f3b359eed122ef4  libgo/go/strconv/atof_test.go
! 06800db48ba243b324f450b7701eb36d  libgo/go/strconv/atoi.go
! 35c33af1d52ecb763c433403350d23eb  libgo/go/strconv/atoi_test.go
! 193e458e7e98a611d3aa2500f22723e4  libgo/go/strconv/bytealg.go
! 77800f2b867e37007870ea93845f5fdb  libgo/go/strconv/bytealg_bootstrap.go
  35c9fee0ee5d1c05424ee60d909ceae4  libgo/go/strconv/ctoa.go
  af6268eb8dddb9905ca11013c0ff30c9  libgo/go/strconv/ctoa_test.go
  437406951b80b7f1a169625d5cadf412  libgo/go/strconv/decimal.go
  c8fbcf5ed89480898c8ad5a5f7e91a2f  libgo/go/strconv/decimal_test.go
  7bd2703a371609a3f08e85b11dbdee4a  libgo/go/strconv/doc.go
! e4705e6096a69762d544be2149a07561  libgo/go/strconv/eisel_lemire.go
  31b299c818ecfe2d488e2f804cbbba08  libgo/go/strconv/example_test.go
  b19af02747208a319da91b1301c9900f  libgo/go/strconv/export_test.go
! 90c4c8ff06a80ada55cda025b2fa6acd  libgo/go/strconv/fp_test.go
! 04d31704760924eda743a27f5f624ab6  libgo/go/strconv/ftoa.go
! 02a8de7aae9117d0b37a7bdd261b6f82  libgo/go/strconv/ftoa_test.go
! f28c908c2abd1597722cac77d237de4a  libgo/go/strconv/ftoaryu.go
! eb7749c993d6abead2ec63bff0b649c2  libgo/go/strconv/ftoaryu_test.go
! 8bc124ef536282f55676d75f0fee6551  libgo/go/strconv/internal_test.go
  66b80541ebd0d866b4ca257d79792a47  libgo/go/strconv/isprint.go
  e0b69352ae18a9d9771d314abf634f6f  libgo/go/strconv/itoa.go
  82e1c89ea104e3fb66329dbbce013d21  libgo/go/strconv/itoa_test.go
! 4b477b13b48b93afe2ca840b9eb180a0  libgo/go/strconv/makeisprint.go
! 69835f8eea3a036bdd6b5d0392098dad  libgo/go/strconv/quote.go
! dc5611cbb4842e264dc56ed3a27eda2d  libgo/go/strconv/quote_test.go
  b38355d8b3ec666c65f60742e650a983  libgo/go/strconv/strconv_test.go
  dc1ca447fa01cae0bb5de6427d6aa4ae  libgo/go/strconv/testdata/testfp.txt
  dc1ca447fa01cae0bb5de6427d6aa4ae  libgo/go/strconv/testfp.txt
! 752662c70aade3a7234c5b5f939f61cd  libgo/go/strings/builder.go
! d767f9b24828a987cd4e03aa2460d8ac  libgo/go/strings/builder_test.go
! 9b2760f6fc3eacaefbbdad1852e1080c  libgo/go/strings/clone.go
! 2e51682342d3e20c248f3700be2c2afd  libgo/go/strings/clone_test.go
! 3e07041eb3ba1926605f49a685c75e34  libgo/go/strings/compare.go
  23b544761fdb246896dddad133cf16e0  libgo/go/strings/compare_test.go
! 7e58c7cdd1a08d635a3bb69a0c7d3a8e  libgo/go/strings/example_test.go
! 0de5f037ce0378ebc1cec1660f5d67e6  libgo/go/strings/export_test.go
  91485bf0f0a1ad6e75a74b5816c57810  libgo/go/strings/reader.go
! 4a33cbbd5d514188de12263c90b25e42  libgo/go/strings/reader_test.go
! 218861d908273b8e9b2da6877b15e20f  libgo/go/strings/replace.go
  3f8a61dbea1b3788851a32c3836f266c  libgo/go/strings/replace_test.go
  5be401c63806185ee237c0bb137c44b4  libgo/go/strings/search.go
  4244a4944e6adcdd4876875c45b9d73a  libgo/go/strings/search_test.go
! f827a1dbb444f1b28d8184cf5604181c  libgo/go/strings/strings.go
! f7b86032ca45f0cb5f74e37d628ca9cf  libgo/go/strings/strings_test.go
  922ef30f735e54dc806f7f1001312fa7  libgo/go/sync/atomic/atomic.c
! 0fc1799506f9f34433d8879614a1f473  libgo/go/sync/atomic/atomic_test.go
  02ac008e348750401076ed908cdaf51d  libgo/go/sync/atomic/doc.go
  e213ecb30da78e95c4ec808dea908299  libgo/go/sync/atomic/example_test.go
  1abc65286966e58e772e23a93e78a08a  libgo/go/sync/atomic/unaligned.go
! c3912abead3f39bf2ecfee76d3753ee8  libgo/go/sync/atomic/value.go
! 015be27edab023de20881c3ded8b28d6  libgo/go/sync/atomic/value_test.go
  bce2e5ddfc7d396f523e03e136b571fc  libgo/go/sync/cond.go
  647cb2014f8ffdbeb3af5116d2bc56da  libgo/go/sync/cond_test.go
! 0a4d169dde9b9c801d970dd4b5c8c38e  libgo/go/sync/example_pool_test.go
! 78e6c0c6f59e296dbf5806a21b81e3f2  libgo/go/sync/example_test.go
! 35f1ff4fa62e94df50dc3b0f585fea81  libgo/go/sync/export_test.go
! bebdf3f031d27f3561da4728090e64fb  libgo/go/sync/map.go
! 22ea3747c15bca7249d431d485036602  libgo/go/sync/map_bench_test.go
! 1c7cd477793c0cbc24b195c26d7d34b3  libgo/go/sync/map_reference_test.go
! dc3b5554a5409f9893ba9a0d343441a9  libgo/go/sync/map_test.go
! 50a0979d4ce946127e6fd60e72d65cda  libgo/go/sync/mutex.go
! 9dc4d2fcf0588f7c05d7ef73d0173882  libgo/go/sync/mutex_test.go
  c2dca259aa25c21414782786a5b764b5  libgo/go/sync/once.go
  2c3240d310641137172167ba79ac92de  libgo/go/sync/once_test.go
! 45168c7af3b586aac96b334ee0b68dd0  libgo/go/sync/pool.go
! 67740e7a834384e151bde5b3c42fbab3  libgo/go/sync/pool_test.go
! c5c904ce693c0d197116b3a1878578b4  libgo/go/sync/poolqueue.go
  64ec5b8b4aec8fd8ad76d658b859b9ee  libgo/go/sync/runtime.go
! 290cd38b19b2d8fba4df645d5dd82036  libgo/go/sync/runtime2.go
! 3ea81051642abdb7221428193e2bc6f1  libgo/go/sync/runtime2_lockrank.go
  72ceac3d1895eef5f4e9ed1a4181478e  libgo/go/sync/runtime_sema_test.go
! 196401fd57997c4c5e432e2637bd767d  libgo/go/sync/rwmutex.go
! 6c40253fbb2b2f22fac1b0599c451939  libgo/go/sync/rwmutex_test.go
! 97eda1e0311c0a5e284d47f4fc0cb589  libgo/go/sync/waitgroup.go
! d55f166c249eb0ddf40fbcc306863843  libgo/go/sync/waitgroup_test.go
! d0aca74d8a926e6b9cb3e03e5cff2461  libgo/go/syscall/asan0.go
! 36aa9175a1165129b9f8d759c01e06b8  libgo/go/syscall/bpf_bsd.go
  9aaba33f94ef792cd83c885cb84fbd30  libgo/go/syscall/bpf_darwin.go
  bcba9c41e717ecc5f9fadedc63b51631  libgo/go/syscall/clone_linux.c
  59298e712286f79b16fe86c28ab48fc8  libgo/go/syscall/const_plan9.go
! 439bf440d06efe2c992cfe9ce2bdcafe  libgo/go/syscall/creds_test.go
  f3bc6044d11bfddc8ddee276c7c3c8a0  libgo/go/syscall/dir_plan9.go
! ae58568787af8b5f9e7ce205043f4e8c  libgo/go/syscall/dirent.go
! ee6aca5ccaf19ffcbdc8ad467542740a  libgo/go/syscall/dirent_test.go
! 37aa0a73621184d81b793054e9dc9cf6  libgo/go/syscall/endian_big.go
! 83e598dc6bbc32071d6ab263b98c10ce  libgo/go/syscall/endian_little.go
! 04ddd46356d075387a0373af87010353  libgo/go/syscall/env_unix.go
  191058c52e6b6cfb72ed323baa0e0f01  libgo/go/syscall/env_windows.go
  9d171a1ced6ead793607cd7bcb7f1d58  libgo/go/syscall/errno.c
  e997bae42fe4ba0d7865f88e9f039a9c  libgo/go/syscall/errors_plan9.go
  246ad220feddf48c3796fabb035a8d6b  libgo/go/syscall/errstr.go
  b5fde02a7c01362d218b8e407438c7b8  libgo/go/syscall/errstr_glibc.go
! c8e33587824df5ac96cb9e414053fe92  libgo/go/syscall/exec_bsd.go
! b66cb02480461b9d6efd288dc56b17c3  libgo/go/syscall/exec_freebsd.go
! 82cc7488b0ac748f1fcb6201a906c65a  libgo/go/syscall/exec_hurd.go
! bef72360eeb73e9677535307552e35c7  libgo/go/syscall/exec_linux.go
! 1aa26c22992ac9fe94148d3a93c8da27  libgo/go/syscall/exec_linux_test.go
! d8579c332f33abf500076a62b7f989fd  libgo/go/syscall/exec_pdeathsig_test.go
  ec30317b065747527fccbc8e4cc44f04  libgo/go/syscall/exec_stubs.go
! 70d75a5cdbab1f264c2dae8fa3050a2c  libgo/go/syscall/exec_unix.go
! b29fc6f09590083773ef3e434debd595  libgo/go/syscall/exec_unix_test.go
! 677541b208fb33bea51127dd892a7585  libgo/go/syscall/exec_windows.go
! 0216681f0a3603ab3231cae78f2129f2  libgo/go/syscall/exec_windows_test.go
! 69c601148c00221ada4b537f3f1ce1c2  libgo/go/syscall/export_aix_test.go
  9ae3d196559303bcbfcb54e5ab7b3ea7  libgo/go/syscall/export_freebsd_test.go
  e47cb3fd01944472b1b09591f44ab02c  libgo/go/syscall/export_linux_test.go
! e4e2d8122bd7ca3b39cbcb0b07af04e5  libgo/go/syscall/export_unix_test.go
! 3ce94f6f915d9d151428b1be6b0b6fd6  libgo/go/syscall/export_windows_test.go
  c0c22c4f29e8103f803487e806626353  libgo/go/syscall/flock_darwin.go
! 588bb2e4b884663ed1bd02e855e6f450  libgo/go/syscall/forkpipe.go
! f36a732ad36118bf6327b027fa8ea5da  libgo/go/syscall/forkpipe2.go
! dcc299fee2b17abdfeae96247a594236  libgo/go/syscall/fs_js.go
! cbd945d6792b9f71c71024c0000547ed  libgo/go/syscall/getdirentries_test.go
! 63637a9405af59d707501b6013515ae9  libgo/go/syscall/js/export_test.go
! c25d966535b904ca98e1ad6374ceac7b  libgo/go/syscall/js/func.go
! e42ae59cc28384fafa35f071d6968b2e  libgo/go/syscall/js/js.go
! 4ffbb07223596d8b8015ecb7e0f51209  libgo/go/syscall/js/js_test.go
  715c03693785f5172ce7ae5971015c28  libgo/go/syscall/libcall_aix.go
  fad34038f40ff23de2b9b3390008db34  libgo/go/syscall/libcall_bsd.go
  8d3d53322b2783b898c415ba37a16dd9  libgo/go/syscall/libcall_bsd_largefile.go
  0510facb65ec87fbb79c71e9b30b6499  libgo/go/syscall/libcall_bsd_regfile.go
  caf93ff057c135366a3fabf9c1992ad9  libgo/go/syscall/libcall_bsd_sendfile.go
! 70354b924cfe8f3ac607b0d5ae031044  libgo/go/syscall/libcall_glibc.go
  0b7cc30b317196a42882ace5a55527bd  libgo/go/syscall/libcall_hurd.go
  562e5aacf2778a3c9a00918069e43b2f  libgo/go/syscall/libcall_hurd_386.go
  ad4306c7d52c93cc9cdfbaa2415c8ad4  libgo/go/syscall/libcall_irix.go
*************** d0dfa8e45cee5defb536480f056ed447  libgo/
*** 93179,93185 ****
  0f110f6b4b28d847963c11d0307ebbfb  libgo/go/syscall/libcall_linux_amd64.go
  ce162a117004aefe7a22fb9acbb75fb6  libgo/go/syscall/libcall_linux_s390.go
  ce162a117004aefe7a22fb9acbb75fb6  libgo/go/syscall/libcall_linux_s390x.go
! b5f13f78bdec181d93be33d7c9e6e761  libgo/go/syscall/libcall_linux_utimesnano.go
  78f9b733965f52ec037f340da4424679  libgo/go/syscall/libcall_posix.go
  be76e9be95722a9b93ae038a613eea57  libgo/go/syscall/libcall_posix_largefile.go
  52330f2b01b7aed2a0559201d3b5fb0a  libgo/go/syscall/libcall_posix_nonhurd.go
--- 99723,99729 ----
  0f110f6b4b28d847963c11d0307ebbfb  libgo/go/syscall/libcall_linux_amd64.go
  ce162a117004aefe7a22fb9acbb75fb6  libgo/go/syscall/libcall_linux_s390.go
  ce162a117004aefe7a22fb9acbb75fb6  libgo/go/syscall/libcall_linux_s390x.go
! 219739732560d7d3b241f820bdf7463d  libgo/go/syscall/libcall_linux_utimesnano.go
  78f9b733965f52ec037f340da4424679  libgo/go/syscall/libcall_posix.go
  be76e9be95722a9b93ae038a613eea57  libgo/go/syscall/libcall_posix_largefile.go
  52330f2b01b7aed2a0559201d3b5fb0a  libgo/go/syscall/libcall_posix_nonhurd.go
*************** b55e11c58c083680acda683400c7317e  libgo/
*** 93196,93229 ****
  1f3faef7b5f08c81787d0faa2588cec3  libgo/go/syscall/libcall_wait4.go
  e6c0c1a73eb2b4304600563980dfa862  libgo/go/syscall/libcall_wait4_aix.go
  c69fafcb2bf056078c9afe6a81824c87  libgo/go/syscall/lsf_linux.go
! 94fff5b8dcf7538948089b7bacab366d  libgo/go/syscall/mkasm.go
  fa8ba9dad35bbc2428696a0cfcfdd116  libgo/go/syscall/mksyscall.awk
! 654b63d48a23c725285a2623f7b257a4  libgo/go/syscall/mmap_unix_test.go
! c7faa8214b138ba27eed688d7bb69fc8  libgo/go/syscall/msan0.go
  84caaf6601fe2492731e0aaa08d5dae8  libgo/go/syscall/net.go
! d04d2e357aa9727921aae85d0c76a7e1  libgo/go/syscall/net_js.go
! 2c7ce5b469b485c93b8b0ff3f41ab578  libgo/go/syscall/netlink_linux.go
  6a6dcc85d1a2d05d3e3d1174dcf8066a  libgo/go/syscall/pwd_plan9.go
! f105e492e3737dabc634989bf6fe66d1  libgo/go/syscall/route_bsd.go
  171380e74906e9601567bc81a59892c8  libgo/go/syscall/route_darwin.go
  0dd914e211c368d01bb31bdcf1e2b4ab  libgo/go/syscall/route_dragonfly.go
  0b29cea4bb6830d007e070bc49454a6a  libgo/go/syscall/route_freebsd.go
! 73dcd12ca6934aebc04c3e66ec372805  libgo/go/syscall/route_freebsd_32bit.go
! 1fa9a87313d79c057ca1b5a730eefa05  libgo/go/syscall/route_freebsd_64bit.go
  df8a551c956bc3737301c2d5a3700579  libgo/go/syscall/route_netbsd.go
  d13db977a1f8b505c859367325c65687  libgo/go/syscall/route_openbsd.go
  548c717be44bdf60ffddf6bda2f8f852  libgo/go/syscall/security_windows.go
! 683a3640fbaa7c9ef0458b2f809d3265  libgo/go/syscall/setuidgid_32_linux.go
! 9e91781375f8f01e8e474c1d4736f37d  libgo/go/syscall/setuidgid_linux.go
  c41963aff6f671a6df727e478deed0bc  libgo/go/syscall/signame.c
  f6198757bf750b2e86c9f7f4920828a9  libgo/go/syscall/sleep_rtems.go
  b30e4fd94e74d91b5252cfd8eccad3cf  libgo/go/syscall/sleep_select.go
  930ac3cd3c8a42dd414b1a24125658e8  libgo/go/syscall/sock_cloexec_linux.go
  1f16c7eba73e816c7cd9458eb1b017ea  libgo/go/syscall/sockcmsg_dragonfly.go
  ac6ea144ae2aa14415fe0681812fb135  libgo/go/syscall/sockcmsg_linux.go
! 2c7a8993930231b05be90691c1c4713f  libgo/go/syscall/sockcmsg_unix.go
! 8b8c8ed578ff9a8f2cc373a59346f888  libgo/go/syscall/sockcmsg_unix_other.go
! b7f206a5ea4e302476061105275f8c6c  libgo/go/syscall/socket.go
  c43e9f9fd83b7f82926c7fdab24fc53d  libgo/go/syscall/socket_aix.go
  ca7f79d8156a318a770247ee29c43a01  libgo/go/syscall/socket_bsd.go
  4526ce2d51a10cff3f4c3edecdb2a584  libgo/go/syscall/socket_hurd.go
--- 99740,99773 ----
  1f3faef7b5f08c81787d0faa2588cec3  libgo/go/syscall/libcall_wait4.go
  e6c0c1a73eb2b4304600563980dfa862  libgo/go/syscall/libcall_wait4_aix.go
  c69fafcb2bf056078c9afe6a81824c87  libgo/go/syscall/lsf_linux.go
! 3d5b1b31ccfad426f85c0bf067b1322a  libgo/go/syscall/mkasm.go
  fa8ba9dad35bbc2428696a0cfcfdd116  libgo/go/syscall/mksyscall.awk
! 5c8851546f6c6e6c29bd12118a8e1532  libgo/go/syscall/mmap_unix_test.go
! 2498f3eed058b4d05220e5feb2a3812b  libgo/go/syscall/msan0.go
  84caaf6601fe2492731e0aaa08d5dae8  libgo/go/syscall/net.go
! 3928e2aa36a587f2f262714ce3f92663  libgo/go/syscall/net_js.go
! a59b978d8ab5ee36eacd5eb524d13187  libgo/go/syscall/netlink_linux.go
  6a6dcc85d1a2d05d3e3d1174dcf8066a  libgo/go/syscall/pwd_plan9.go
! 5bf8055ff2f342cdc51ca5e00df3b88f  libgo/go/syscall/route_bsd.go
  171380e74906e9601567bc81a59892c8  libgo/go/syscall/route_darwin.go
  0dd914e211c368d01bb31bdcf1e2b4ab  libgo/go/syscall/route_dragonfly.go
  0b29cea4bb6830d007e070bc49454a6a  libgo/go/syscall/route_freebsd.go
! 8d78979f98384cf5c0c7dd737b161140  libgo/go/syscall/route_freebsd_32bit.go
! f6bff5ac98cd8055b4da295de2d217d8  libgo/go/syscall/route_freebsd_64bit.go
  df8a551c956bc3737301c2d5a3700579  libgo/go/syscall/route_netbsd.go
  d13db977a1f8b505c859367325c65687  libgo/go/syscall/route_openbsd.go
  548c717be44bdf60ffddf6bda2f8f852  libgo/go/syscall/security_windows.go
! af192ae27cd59288bab393ba3b8791dc  libgo/go/syscall/setuidgid_32_linux.go
! 542265dabc4335b878f72770909dfddf  libgo/go/syscall/setuidgid_linux.go
  c41963aff6f671a6df727e478deed0bc  libgo/go/syscall/signame.c
  f6198757bf750b2e86c9f7f4920828a9  libgo/go/syscall/sleep_rtems.go
  b30e4fd94e74d91b5252cfd8eccad3cf  libgo/go/syscall/sleep_select.go
  930ac3cd3c8a42dd414b1a24125658e8  libgo/go/syscall/sock_cloexec_linux.go
  1f16c7eba73e816c7cd9458eb1b017ea  libgo/go/syscall/sockcmsg_dragonfly.go
  ac6ea144ae2aa14415fe0681812fb135  libgo/go/syscall/sockcmsg_linux.go
! 882ac557fd995909aabc3f23151b7085  libgo/go/syscall/sockcmsg_unix.go
! 7c74f125a645c3bf5001b5920097d7f4  libgo/go/syscall/sockcmsg_unix_other.go
! 8aa7392688e2db73ec8591d973d43431  libgo/go/syscall/socket.go
  c43e9f9fd83b7f82926c7fdab24fc53d  libgo/go/syscall/socket_aix.go
  ca7f79d8156a318a770247ee29c43a01  libgo/go/syscall/socket_bsd.go
  4526ce2d51a10cff3f4c3edecdb2a584  libgo/go/syscall/socket_hurd.go
*************** d222e9fb18b3dc0236f041a07a0e47ce  libgo/
*** 93234,93293 ****
  a32c8f38aef86961c1bfd750e18d94a1  libgo/go/syscall/socket_posix.go
  57ed75694a025e8553fe2ba1de10d658  libgo/go/syscall/socket_solaris.go
  167f36ad5355fe6ed983982996c02d69  libgo/go/syscall/socket_xnet.go
- 21b5a484bcf7f42415dfc0d1c2da3be5  libgo/go/syscall/str.go
  ce4c501d2565a767d84060f75dc51366  libgo/go/syscall/syscall.go
  6f2b2e0979d3ed4fc77da45b0f4d3dd0  libgo/go/syscall/syscall_aix.go
  5c1be62bcdb0a752dce2f1dc35c1349e  libgo/go/syscall/syscall_aix_ppc.go
  0e142cfb436483c276aea628de798a86  libgo/go/syscall/syscall_aix_ppc64.go
! ba4c03de9f8e4f01b7e68cd654298b1b  libgo/go/syscall/syscall_darwin.go
! 8abaea48f434c80b6330ce22fbdbb1ce  libgo/go/syscall/syscall_dragonfly.go
  d46537cc7906d2e27e3dd0b20f59cdda  libgo/go/syscall/syscall_errno.go
  21c7b2d93dc14b6c353aa068a648ee4d  libgo/go/syscall/syscall_freebsd.go
  9272cf24534b777af3e85023778fcda9  libgo/go/syscall/syscall_freebsd_arm64.go
! 655be20fa3d71905f880371748ad8345  libgo/go/syscall/syscall_freebsd_test.go
  cfc572e64bcc8691afa48ba2e4ae15b6  libgo/go/syscall/syscall_funcs.go
  d2d141db7a9d52927adc4a783fd1fb97  libgo/go/syscall/syscall_funcs_stubs.go
  f5d79416aee343137923856cdd7d2ded  libgo/go/syscall/syscall_glibc.go
! 8d1154ea561f8a20ed1100e04b866380  libgo/go/syscall/syscall_js.go
  714caa0736025bb89a456a46aecadc5f  libgo/go/syscall/syscall_linux.go
! 4423eeae94452b3674c0ce2fe1471499  libgo/go/syscall/syscall_linux_386.go
  76aaef7313d5941f3fbacda3ce01b730  libgo/go/syscall/syscall_linux_alpha.go
  3e9b2f55c7ff79a34dc0b67bca3de753  libgo/go/syscall/syscall_linux_amd64.go
! 9ecd94464c4c67d7dc027ad9495abee1  libgo/go/syscall/syscall_linux_mipsx.go
  112479d6d9e365de6d786867c94dd2b6  libgo/go/syscall/syscall_linux_riscv64.go
  c6e4c1099b33e82cff86979650bbaa5f  libgo/go/syscall/syscall_linux_s390.go
  37f887c57173dd177a17d2c50ffca527  libgo/go/syscall/syscall_linux_s390x.go
! 46a3ffe4cdd80e1f2bbce57b9ba4054c  libgo/go/syscall/syscall_linux_test.go
  2c6673d99c57c3c767a4b710b904683d  libgo/go/syscall/syscall_netbsd.go
  7cb17b469b491a72fcb4249bb3865514  libgo/go/syscall/syscall_netbsd_arm64.go
  d9361d43ef12dff92e57635f642be2a9  libgo/go/syscall/syscall_openbsd.go
  ec6b33dd3de3394bb0f6bb83659e3582  libgo/go/syscall/syscall_openbsd_arm64.go
  ece0acb4b95afb8e2355bc2209b174be  libgo/go/syscall/syscall_plan9_test.go
! 2da75be9bd1cb47b3b97958458ed832b  libgo/go/syscall/syscall_ptrace_test.go
  42f8185437f1661f70b62fd714eb4210  libgo/go/syscall/syscall_solaris.go
! 54e52c75bcc1208dfe76f1bec5636b42  libgo/go/syscall/syscall_test.go
! 1806eda28508161bc91cfa6118c3755d  libgo/go/syscall/syscall_unix.go
! cd48cf9d21d5138b479cbf34a1c15b8b  libgo/go/syscall/syscall_unix_test.go
! cd78596f499af675401bbc1672a9bb4a  libgo/go/syscall/tables_js.go
! ebc8a787bfe2504ea9a8d693456e6354  libgo/go/syscall/time_fake.go
! 47cf79c188c42fbd2a50a9288f5c1ba4  libgo/go/syscall/time_nofake.go
! bdef0892248df4ed47072739435722aa  libgo/go/syscall/timestruct.go
  ab266dfc8754f91d500efadf03d22e64  libgo/go/syscall/wait.c
  a2c87e985b24115b85a59cb86a2ff148  libgo/go/testdata/Isaac.Newton-Opticks.txt
  a8b0651e692061a91726f593bf794765  libgo/go/testing/allocs.go
! fd587d4a53008cc7bcdc65dbd97333c5  libgo/go/testing/allocs_test.go
! 558f3581613a3a860969de295a22e5d0  libgo/go/testing/benchmark.go
! 0205cd107789c875f30dcb5c4f270470  libgo/go/testing/benchmark_test.go
  d7217f9dcf2dcbc3e0812990b8f01da7  libgo/go/testing/cover.go
! 68038959488a20eef13750a0d39020b6  libgo/go/testing/example.go
  154fb812f9bfb1b22935cc50c58da653  libgo/go/testing/export_test.go
! dc897bac6e873dee2e396bdf6b27af75  libgo/go/testing/fstest/mapfs.go
! 6d273392a6affad3841afc0a11362393  libgo/go/testing/fstest/mapfs_test.go
! ef3d915f1d601f05f89c826315606769  libgo/go/testing/fstest/testfs.go
! e8615b035f0bf7246eb0f635aeff4488  libgo/go/testing/fstest/testfs_test.go
! a8937ad3fe13481fc114a20c4a6de354  libgo/go/testing/helper_test.go
! 85dc600b7c6155a9604762587113429e  libgo/go/testing/helperfuncs_test.go
! 68722b8a553434f9f161de23478600d9  libgo/go/testing/internal/testdeps/deps.go
  39eef9208cd80357e68f61229111a61a  libgo/go/testing/iotest/example_test.go
  c92087889bddee38d4a41461eefac76d  libgo/go/testing/iotest/logger.go
  65a5a6a2fe66ee7dc57130369d446d34  libgo/go/testing/iotest/logger_test.go
--- 99778,99838 ----
  a32c8f38aef86961c1bfd750e18d94a1  libgo/go/syscall/socket_posix.go
  57ed75694a025e8553fe2ba1de10d658  libgo/go/syscall/socket_solaris.go
  167f36ad5355fe6ed983982996c02d69  libgo/go/syscall/socket_xnet.go
  ce4c501d2565a767d84060f75dc51366  libgo/go/syscall/syscall.go
  6f2b2e0979d3ed4fc77da45b0f4d3dd0  libgo/go/syscall/syscall_aix.go
  5c1be62bcdb0a752dce2f1dc35c1349e  libgo/go/syscall/syscall_aix_ppc.go
  0e142cfb436483c276aea628de798a86  libgo/go/syscall/syscall_aix_ppc64.go
! 334a9b1171ada442a2f637071b4c5e48  libgo/go/syscall/syscall_darwin.go
! 014c86a47872f817d09a4e7a69092051  libgo/go/syscall/syscall_dragonfly.go
  d46537cc7906d2e27e3dd0b20f59cdda  libgo/go/syscall/syscall_errno.go
  21c7b2d93dc14b6c353aa068a648ee4d  libgo/go/syscall/syscall_freebsd.go
  9272cf24534b777af3e85023778fcda9  libgo/go/syscall/syscall_freebsd_arm64.go
! b6eddac020ed41f656c3b76b772d01f1  libgo/go/syscall/syscall_freebsd_test.go
  cfc572e64bcc8691afa48ba2e4ae15b6  libgo/go/syscall/syscall_funcs.go
  d2d141db7a9d52927adc4a783fd1fb97  libgo/go/syscall/syscall_funcs_stubs.go
  f5d79416aee343137923856cdd7d2ded  libgo/go/syscall/syscall_glibc.go
! 558a0331e1c105b71208797e9d5166e1  libgo/go/syscall/syscall_js.go
  714caa0736025bb89a456a46aecadc5f  libgo/go/syscall/syscall_linux.go
! a8a2bd6885ed8879cb91a5bd8e487f16  libgo/go/syscall/syscall_linux_386.go
  76aaef7313d5941f3fbacda3ce01b730  libgo/go/syscall/syscall_linux_alpha.go
  3e9b2f55c7ff79a34dc0b67bca3de753  libgo/go/syscall/syscall_linux_amd64.go
! 903deece0112b5c730f47a4f7294853b  libgo/go/syscall/syscall_linux_mipsx.go
  112479d6d9e365de6d786867c94dd2b6  libgo/go/syscall/syscall_linux_riscv64.go
  c6e4c1099b33e82cff86979650bbaa5f  libgo/go/syscall/syscall_linux_s390.go
  37f887c57173dd177a17d2c50ffca527  libgo/go/syscall/syscall_linux_s390x.go
! 16e02292933ec20c9f098a800ec41515  libgo/go/syscall/syscall_linux_test.go
  2c6673d99c57c3c767a4b710b904683d  libgo/go/syscall/syscall_netbsd.go
  7cb17b469b491a72fcb4249bb3865514  libgo/go/syscall/syscall_netbsd_arm64.go
  d9361d43ef12dff92e57635f642be2a9  libgo/go/syscall/syscall_openbsd.go
  ec6b33dd3de3394bb0f6bb83659e3582  libgo/go/syscall/syscall_openbsd_arm64.go
  ece0acb4b95afb8e2355bc2209b174be  libgo/go/syscall/syscall_plan9_test.go
! 57166197ce68602889de24bbc5bbb0b7  libgo/go/syscall/syscall_ptrace_test.go
  42f8185437f1661f70b62fd714eb4210  libgo/go/syscall/syscall_solaris.go
! f8ab24f9983ec52bdd383aa8706e2b48  libgo/go/syscall/syscall_test.go
! 4def1d016629eed2aa7f219d3a67b5c0  libgo/go/syscall/syscall_unix.go
! 9fdda606b048286b484e4fbea469515e  libgo/go/syscall/syscall_unix_test.go
! f484547f1254c7b95028fe9ed763b8f3  libgo/go/syscall/tables_js.go
! a30331834ba72a1fa964c9eca11c6b75  libgo/go/syscall/time_fake.go
! 3cd5fc2863e0b059761b5ec1ccd99a83  libgo/go/syscall/time_nofake.go
! 6120bf00982641e2cd37125c9aa30d9a  libgo/go/syscall/timestruct.go
! 6295b6d86ae41b10d02f2db79977f856  libgo/go/syscall/types_windows_arm64.go
  ab266dfc8754f91d500efadf03d22e64  libgo/go/syscall/wait.c
  a2c87e985b24115b85a59cb86a2ff148  libgo/go/testdata/Isaac.Newton-Opticks.txt
  a8b0651e692061a91726f593bf794765  libgo/go/testing/allocs.go
! 0bfe3ec15f23eebbd608b1c4a2a1720c  libgo/go/testing/allocs_test.go
! 82d4f4dfabd8bf77fc353982ecf66579  libgo/go/testing/benchmark.go
! ffb5bbd4fa5eb2f5231a3aa59dc43bae  libgo/go/testing/benchmark_test.go
  d7217f9dcf2dcbc3e0812990b8f01da7  libgo/go/testing/cover.go
! b19b9d2b9aa4612bff08df2a2cbcf0b6  libgo/go/testing/example.go
  154fb812f9bfb1b22935cc50c58da653  libgo/go/testing/export_test.go
! e8e0bad5b71c2713742784a7fd6cb8f8  libgo/go/testing/fstest/mapfs.go
! 85d6da2a1cb42ccbea7391b1ac06445d  libgo/go/testing/fstest/mapfs_test.go
! 8ae3e3475a91e1333a23311e529b3724  libgo/go/testing/fstest/testfs.go
! d682a2d0b3b48e7a12960485708e4c23  libgo/go/testing/fstest/testfs_test.go
! de0437821cd897d397b3c43043affa1e  libgo/go/testing/fuzz.go
! e5d12a3f76ff9589594aeecce779c09b  libgo/go/testing/helper_test.go
! b6a1ca8859aa7c53c729d14e15890f95  libgo/go/testing/helperfuncs_test.go
! 1565cd60e09e809bd705f3707b4e8d60  libgo/go/testing/internal/testdeps/deps.go
  39eef9208cd80357e68f61229111a61a  libgo/go/testing/iotest/example_test.go
  c92087889bddee38d4a41461eefac76d  libgo/go/testing/iotest/logger.go
  65a5a6a2fe66ee7dc57130369d446d34  libgo/go/testing/iotest/logger_test.go
*************** c92087889bddee38d4a41461eefac76d  libgo/
*** 93295,93397 ****
  41cf012ce22f41e95b32bf896e19a065  libgo/go/testing/iotest/reader_test.go
  9217f1912a8069ffc6136a02aeeb2f4b  libgo/go/testing/iotest/writer.go
  550b212707ff9943f9dd0c4c709fc08e  libgo/go/testing/iotest/writer_test.go
! 4f73f47e7836d2ab7c80bc4b1d851f6f  libgo/go/testing/match.go
! cacbe685a3aecedc1a5826107be94bf7  libgo/go/testing/match_test.go
  eeacb58b3d0b63d641138c7bfe44ac78  libgo/go/testing/panic_test.go
! b37e60c8c0fa363df74bbfc444e10e38  libgo/go/testing/quick/quick.go
  e61ef5d6d57ba58f408157c9c14626e2  libgo/go/testing/quick/quick_test.go
! cb2334b28ff6fd4a8e499b347f2cf117  libgo/go/testing/run_example.go
! 04b8fc3d0cf3e2e842806b59cad9b771  libgo/go/testing/run_example_js.go
! 389c5f9680a0e043230a14b2bae9c925  libgo/go/testing/sub_test.go
! edf3a9bffd08fed186506a2081f194c3  libgo/go/testing/testing.go
! 2079fa0ac2771b4e42372ce837c3647e  libgo/go/testing/testing_test.go
  ea889e738285153fa058f4fcdbda499f  libgo/go/text/scanner/example_test.go
! 7179b565461e46655db74ffc519528a8  libgo/go/text/scanner/scanner.go
  631bde4f1fe3d7ea07ea8cfff9ace675  libgo/go/text/scanner/scanner_test.go
  610499705fdc72cc6842a53888e534f0  libgo/go/text/tabwriter/example_test.go
  aa9987f61437c585e160b2482b9c4f7f  libgo/go/text/tabwriter/tabwriter.go
  b3e4ad224d7a34bec609bc60d94cb04f  libgo/go/text/tabwriter/tabwriter_test.go
! be7ddb34046a14629a2f8c7cfe137195  libgo/go/text/template/doc.go
! 9fddc3eae7dfb19d1f0df9e6e9833feb  libgo/go/text/template/exec.go
! 841e0dc80dc57119b1c6572c6f13b3da  libgo/go/text/template/exec_test.go
! 590a3672886d888c744e7b4aba572aa2  libgo/go/text/template/funcs.go
  1095452082515db1e2fc4995c0b374a5  libgo/go/text/template/helper.go
! bb49a2cfe22b2076a9c734f27d2c2223  libgo/go/text/template/link_test.go
! acc4fc495ad62e71ff415da11fd4395b  libgo/go/text/template/multi_test.go
! f3066faeb273231ca51b072c3b55aa4e  libgo/go/text/template/option.go
! 09ed25db5cbfac498feda9b19fd2e35a  libgo/go/text/template/parse/lex.go
! f79328b24cd8b668fbcad1eaf576ded6  libgo/go/text/template/parse/lex_test.go
! 03c297fa0809aed7d5289fb4b789d601  libgo/go/text/template/parse/node.go
! ed0c695deb8318fe4610d76c9d8134a0  libgo/go/text/template/parse/parse.go
! 6373b602a4dd54bd0b2c844db61fb9f1  libgo/go/text/template/parse/parse_test.go
! 33615261a25336759ebda7b709fe3a7f  libgo/go/text/template/template.go
  d6b6ff8eb45b5d3c6559c70664f2f9f3  libgo/go/text/template/testdata/file1.tmpl
  30ae547a79cfdc1dc838a5a0d9ed8198  libgo/go/text/template/testdata/file2.tmpl
  3bb3b4e20658955000386362214b8246  libgo/go/text/template/testdata/tmpl1.tmpl
  1fd8ef440f5fd08e0117c3c00500294b  libgo/go/text/template/testdata/tmpl2.tmpl
! 1241564f352b0a970bf6f03cbf3bdfe3  libgo/go/time/embed.go
! 98dc1110cba902b063e7117fc0710896  libgo/go/time/example_test.go
  f7096f0422dcb77d03e56eb3fb2f2f12  libgo/go/time/export_android_test.go
! f0955c2a3243409f58ecf9d06fcf05e8  libgo/go/time/export_test.go
! df2da641e4e93b330dcd40b6f7f52f58  libgo/go/time/format.go
! 071a86b16f7ba6d5a49eec775f80f75c  libgo/go/time/format_test.go
! edc12e7feb81eeaab1c0469520cbe20c  libgo/go/time/genzabbrs.go
! 022b234f43fcff2fad04074ad2586051  libgo/go/time/internal_test.go
  ef4b3752a38e904365f7b901d1a78aa4  libgo/go/time/mono_test.go
! a24199f7bf8d885e76de2938718ebf67  libgo/go/time/sleep.go
! 3cacff48ffd28376082e1506cb5b6ecf  libgo/go/time/sleep_test.go
! 5dbbfa399e9a3b3f215b5eb60054f52f  libgo/go/time/sys_plan9.go
! 383a565b424663f1f701dc1918dbd84b  libgo/go/time/sys_unix.go
  bb0750db9ecbdac55664d532e548111d  libgo/go/time/sys_windows.go
! 6e2f9dfc13f3bce1013fdc6e161dbf82  libgo/go/time/tick.go
! 073f98b6bd3dc779a606718591192f2e  libgo/go/time/tick_test.go
! 74440bb1734555ad44515239f0bd2b56  libgo/go/time/time.go
! 5b1add418f6c1b0d5494acb76ec8454b  libgo/go/time/time_test.go
! d5b4f504e7587118a0baffc912aaaa8d  libgo/go/time/tzdata/generate_zipdata.go
  b7954062d2fdf2b1a331f2820a36e9ec  libgo/go/time/tzdata/tzdata.go
! addd4742f36477388796b827c3ef1f1b  libgo/go/time/tzdata/zipdata.go
  c41a73dd27252057857c3cf40ddbe132  libgo/go/time/tzdata_test.go
! 382279e78bc1a604d4e954f910337223  libgo/go/time/zoneinfo.go
  f4b087362ae55fe6e4011d8bf2d16d4f  libgo/go/time/zoneinfo_abbrs_windows.go
  d4a1098abc233868e45ed49030f3f189  libgo/go/time/zoneinfo_android.go
  805c52a6dfd07be8e0d5c805ef8c0180  libgo/go/time/zoneinfo_android_test.go
! db2c7a203ad7636b97179d3692de5860  libgo/go/time/zoneinfo_ios.go
! d3966960ae0149012d9a7e4ed8e09343  libgo/go/time/zoneinfo_js.go
  3d248aad631a78cbd82f8b2106d19181  libgo/go/time/zoneinfo_plan9.go
  49be5a6f3119f1666bf25ca6b28fb57b  libgo/go/time/zoneinfo_read.go
! 1c5e97c816fdb2e5c63ffcded294778d  libgo/go/time/zoneinfo_test.go
! b70de040ef4c02635e7ff454b01bd390  libgo/go/time/zoneinfo_unix.go
! bab64eb6109295bb7c80a9bc3c0fa1d0  libgo/go/time/zoneinfo_unix_test.go
  38f82cdd53d65ee608b10a62bc5fd5bf  libgo/go/time/zoneinfo_windows.go
  20462663527bbc31aa3bdf3fba3f978a  libgo/go/unicode/casetables.go
  06fbe90f41e9b74f0bd79e5303d67d2d  libgo/go/unicode/digit.go
  52e66b5dde148ddf6d9b349d93601cfe  libgo/go/unicode/digit_test.go
! 82119e53d20f26b8a56ae2944e7663d5  libgo/go/unicode/example_test.go
  f5a0b22c681da7633cf7c31a08f3eb6b  libgo/go/unicode/graphic.go
  f21fa9794cb8a8f6a8340fd13ebd9029  libgo/go/unicode/graphic_test.go
! b3068b0ac809964e0211877cf76f5453  libgo/go/unicode/letter.go
! da9f96e402aa9002e78a487b4951f328  libgo/go/unicode/letter_test.go
  f0a68679656718826d449fde31ed2f98  libgo/go/unicode/script_test.go
  c4d2846cb08f6c5bab32f58c0fa76517  libgo/go/unicode/tables.go
  02eca89a5d7dac849d7d937649f00c42  libgo/go/unicode/utf16/export_test.go
  38efab74303157974a2309158b6ceb79  libgo/go/unicode/utf16/utf16.go
  8788eacccc9d765d9e1252feca08f02d  libgo/go/unicode/utf16/utf16_test.go
! 0463ed5b5c03ba70a9b7ed02c9730b8e  libgo/go/unicode/utf8/example_test.go
! c97eaceb00bddd7fec1d8d4868b2b69a  libgo/go/unicode/utf8/utf8.go
! 126253403a6fd8518387122ed73e1c58  libgo/go/unicode/utf8/utf8_test.go
! 239c41cae86fd495b33a2406d2fd01f3  libgo/go/vendor/modules.txt
! 3105d5a31e583b294d7db2540fb04600  libgo/goarch.sh
  342e21bbfbb708562a0417b169575759  libgo/godeps.sh
! ca0647f4ad6aa1857522b87b141f2097  libgo/gotool-packages.txt
! f75237819f9a3a1efbc8254ec43e8c8a  libgo/libgo-packages.txt
  b6c9aececc30fd32355c0415e1b547a5  libgo/libgo.imp
! cbf6a5fc1d5e643d60d6681bd7d4afcd  libgo/match.sh
! 1050837fa0f5d2a9f07ab6e514186d07  libgo/merge.sh
! 1b2ae4d92dd69e03d324e96ba6e9cc71  libgo/misc/cgo/errors/badsym_test.go
! 852a00528844f9946f54e21a8607ba33  libgo/misc/cgo/errors/errors_test.go
! f8e5f71a2d83e0cd5ceb4cc5dedb4232  libgo/misc/cgo/errors/ptr_test.go
  3c0ed980714b44f50b4492eb067bcc17  libgo/misc/cgo/errors/testdata/err1.go
! c1f02c81b10073c7991778abb2e83c12  libgo/misc/cgo/errors/testdata/err2.go
  f5ff833d012c6254c9ccae703f44dc9e  libgo/misc/cgo/errors/testdata/err4.go
  9b9b2fcfd0c70612df339f67add55602  libgo/misc/cgo/errors/testdata/issue11097a.go
  e9aaa4cff222232e2772dcf37aeee852  libgo/misc/cgo/errors/testdata/issue11097b.go
--- 99840,99949 ----
  41cf012ce22f41e95b32bf896e19a065  libgo/go/testing/iotest/reader_test.go
  9217f1912a8069ffc6136a02aeeb2f4b  libgo/go/testing/iotest/writer.go
  550b212707ff9943f9dd0c4c709fc08e  libgo/go/testing/iotest/writer_test.go
! 72bc54c19a6864f7bdd115bbb733a7a4  libgo/go/testing/match.go
! 904dc451257b3d3cc079d65af92a2345  libgo/go/testing/match_test.go
  eeacb58b3d0b63d641138c7bfe44ac78  libgo/go/testing/panic_test.go
! 2b02b00cfb1fccf90c623d680b52d43d  libgo/go/testing/quick/quick.go
  e61ef5d6d57ba58f408157c9c14626e2  libgo/go/testing/quick/quick_test.go
! f6c4cbc0688ac73e883723afa10cb696  libgo/go/testing/run_example.go
! 27ae42fba146a32dfcf44eca31b9839e  libgo/go/testing/run_example_js.go
! 806ae8580f408720d9ffdf76da4cf097  libgo/go/testing/sub_test.go
! 92d0f3c31dc2276f2ce17932ff31b254  libgo/go/testing/testing.go
! cea1358626f5615fca0256d164ec2d77  libgo/go/testing/testing_other.go
! 0f5cdb8efb5a5e9213dd128551ddeb8c  libgo/go/testing/testing_test.go
! 87313c359f8fdb35e2bf79329ab92606  libgo/go/testing/testing_windows.go
  ea889e738285153fa058f4fcdbda499f  libgo/go/text/scanner/example_test.go
! c98f1f0472c0ef69b3a46f1ec59542b1  libgo/go/text/scanner/scanner.go
  631bde4f1fe3d7ea07ea8cfff9ace675  libgo/go/text/scanner/scanner_test.go
  610499705fdc72cc6842a53888e534f0  libgo/go/text/tabwriter/example_test.go
  aa9987f61437c585e160b2482b9c4f7f  libgo/go/text/tabwriter/tabwriter.go
  b3e4ad224d7a34bec609bc60d94cb04f  libgo/go/text/tabwriter/tabwriter_test.go
! 8ca0d45fc298c3b16df58bda858b9455  libgo/go/text/template/doc.go
! 7a7e552660447ff84a2c1284205288e5  libgo/go/text/template/exec.go
! cf77b51f7ceb0c1471e484aa80745aee  libgo/go/text/template/exec_test.go
! cb023ddeadcaea8a3f0751650c0da531  libgo/go/text/template/funcs.go
  1095452082515db1e2fc4995c0b374a5  libgo/go/text/template/helper.go
! 9881db327f10ecc5666b98423692d981  libgo/go/text/template/link_test.go
! 4a20223e4394b2685a95ada989c63fbd  libgo/go/text/template/multi_test.go
! 41e26a1b51da3fef80fc1594549f710b  libgo/go/text/template/option.go
! 9f1742457572071a5bfcf0be653db2e9  libgo/go/text/template/parse/lex.go
! f3ab80d9f4fc42d291035b82c04f3293  libgo/go/text/template/parse/lex_test.go
! 05845b110db65e054ea2af6d4259ca16  libgo/go/text/template/parse/node.go
! c70b846bcb310ef383032e8c60af30aa  libgo/go/text/template/parse/parse.go
! 27944e4811986524d689249c82e29ff7  libgo/go/text/template/parse/parse_test.go
! ae974403e9f6efef8a76f7137fce9710  libgo/go/text/template/template.go
  d6b6ff8eb45b5d3c6559c70664f2f9f3  libgo/go/text/template/testdata/file1.tmpl
  30ae547a79cfdc1dc838a5a0d9ed8198  libgo/go/text/template/testdata/file2.tmpl
  3bb3b4e20658955000386362214b8246  libgo/go/text/template/testdata/tmpl1.tmpl
  1fd8ef440f5fd08e0117c3c00500294b  libgo/go/text/template/testdata/tmpl2.tmpl
! eb83e05663f56943c1e70119ddaf89da  libgo/go/time/embed.go
! 2efe036d39ff543ca102edd97ce74bb0  libgo/go/time/example_test.go
  f7096f0422dcb77d03e56eb3fb2f2f12  libgo/go/time/export_android_test.go
! e56c669296b5d31f3e5a15bc6f47f7e9  libgo/go/time/export_test.go
! 4647b3bef2d852e6c376aa46aec7fb88  libgo/go/time/format.go
! eb17d02e16bc35622bc48d689887a598  libgo/go/time/format_test.go
! eb8da8e838f4f77ae1abe581700adb25  libgo/go/time/genzabbrs.go
! c23520bb1f7d351306f748dd638bc238  libgo/go/time/internal_test.go
  ef4b3752a38e904365f7b901d1a78aa4  libgo/go/time/mono_test.go
! 018be7a94d2d554d98ba9fc75f9e107b  libgo/go/time/sleep.go
! e399f8ec351743edbe8d49198e7d9440  libgo/go/time/sleep_test.go
! 7d7b27c4b6e6248babfbdac05d1af4d3  libgo/go/time/sys_plan9.go
! 78aad86a0435bbebf180990c30338416  libgo/go/time/sys_unix.go
  bb0750db9ecbdac55664d532e548111d  libgo/go/time/sys_windows.go
! 2577d6d2ba90616ca47c8ee8d9fbca20  libgo/go/time/testdata/2020b_Europe_Berlin
! 73727b5259886ffb64fb8e20d5456cc6  libgo/go/time/testdata/2021a_America_Nuuk
! f1758852685fee0e701b82aa868fc368  libgo/go/time/testdata/2021a_Asia_Gaza
! 9fae53762400421dfbba224c8f21038d  libgo/go/time/testdata/2021a_Europe_Dublin
! dd70222ad43aed10abce23d4e00ca55c  libgo/go/time/tick.go
! b2b31e23607681a6917c481d868cdc1f  libgo/go/time/tick_test.go
! 63c2b2f147bd828b6bb9ab5ba7fdf9c9  libgo/go/time/time.go
! af25048cc29cc6be6099975ad0e271a0  libgo/go/time/time_test.go
! e6efe6131b1e654641c77ad3d71c320a  libgo/go/time/tzdata/generate_zipdata.go
  b7954062d2fdf2b1a331f2820a36e9ec  libgo/go/time/tzdata/tzdata.go
! 8a20a04c268814dbd1c30d4e768eebc5  libgo/go/time/tzdata/zipdata.go
  c41a73dd27252057857c3cf40ddbe132  libgo/go/time/tzdata_test.go
! 4b3753fde7e4ff03a39a75222354f206  libgo/go/time/zoneinfo.go
  f4b087362ae55fe6e4011d8bf2d16d4f  libgo/go/time/zoneinfo_abbrs_windows.go
  d4a1098abc233868e45ed49030f3f189  libgo/go/time/zoneinfo_android.go
  805c52a6dfd07be8e0d5c805ef8c0180  libgo/go/time/zoneinfo_android_test.go
! 3d8a2fcfeede6efc5446f54063b5a06d  libgo/go/time/zoneinfo_ios.go
! 82a961220c960bf054deea2ca74fd585  libgo/go/time/zoneinfo_js.go
  3d248aad631a78cbd82f8b2106d19181  libgo/go/time/zoneinfo_plan9.go
  49be5a6f3119f1666bf25ca6b28fb57b  libgo/go/time/zoneinfo_read.go
! a6094fa64371c9af8e37a5c02e599389  libgo/go/time/zoneinfo_test.go
! 0c828f677b06925a114d07149dfa1d6b  libgo/go/time/zoneinfo_unix.go
! 364d259254928029940df244bd808c3c  libgo/go/time/zoneinfo_unix_test.go
  38f82cdd53d65ee608b10a62bc5fd5bf  libgo/go/time/zoneinfo_windows.go
  20462663527bbc31aa3bdf3fba3f978a  libgo/go/unicode/casetables.go
  06fbe90f41e9b74f0bd79e5303d67d2d  libgo/go/unicode/digit.go
  52e66b5dde148ddf6d9b349d93601cfe  libgo/go/unicode/digit_test.go
! c1ebcc65e5622ee05e8925cb3ef60a31  libgo/go/unicode/example_test.go
  f5a0b22c681da7633cf7c31a08f3eb6b  libgo/go/unicode/graphic.go
  f21fa9794cb8a8f6a8340fd13ebd9029  libgo/go/unicode/graphic_test.go
! 7391115ae4dd3daa87c1d4bcb78e21cf  libgo/go/unicode/letter.go
! d7783eb7ead6d4e5153535b93403c85b  libgo/go/unicode/letter_test.go
  f0a68679656718826d449fde31ed2f98  libgo/go/unicode/script_test.go
  c4d2846cb08f6c5bab32f58c0fa76517  libgo/go/unicode/tables.go
  02eca89a5d7dac849d7d937649f00c42  libgo/go/unicode/utf16/export_test.go
  38efab74303157974a2309158b6ceb79  libgo/go/unicode/utf16/utf16.go
  8788eacccc9d765d9e1252feca08f02d  libgo/go/unicode/utf16/utf16_test.go
! 45392f48d7d1aaa462bcc95b51bc70b1  libgo/go/unicode/utf8/example_test.go
! 2c4d3713a77c44ac98c5666b839f529e  libgo/go/unicode/utf8/utf8.go
! db676c1f1d2849067afce04315a08b09  libgo/go/unicode/utf8/utf8_test.go
! 68b0af602cca7611c675a533d1ca1ab4  libgo/go/vendor/modules.txt
! b34a692bd542de151dc73de26d16dd2e  libgo/goarch.sh
  342e21bbfbb708562a0417b169575759  libgo/godeps.sh
! 59c854f27a495007f0fce591f2e9c5b3  libgo/gotool-packages.txt
! dc4d027ba4f9a8a47e74c9f718158a50  libgo/libgo-packages.txt
  b6c9aececc30fd32355c0415e1b547a5  libgo/libgo.imp
! 9393aa3833b118c9738c2829595bd59d  libgo/match.sh
! 18182d0d932fda00e3e604b66ac4f96b  libgo/merge.sh
! ae7ca3094c2cc3888e7669918d9da48f  libgo/misc/cgo/errors/argposition_test.go
! 2e379c3e4dd4a1a554f1ceb0a37bf125  libgo/misc/cgo/errors/badsym_test.go
! 0ddb8a49396eff7d7bab213131ea8542  libgo/misc/cgo/errors/errors_test.go
! 0bc7ed1c6d830466c4815ccf63e32ae6  libgo/misc/cgo/errors/ptr_test.go
  3c0ed980714b44f50b4492eb067bcc17  libgo/misc/cgo/errors/testdata/err1.go
! 7fc7a5c23bc34ca93d85422e8c152de1  libgo/misc/cgo/errors/testdata/err2.go
  f5ff833d012c6254c9ccae703f44dc9e  libgo/misc/cgo/errors/testdata/err4.go
  9b9b2fcfd0c70612df339f67add55602  libgo/misc/cgo/errors/testdata/issue11097a.go
  e9aaa4cff222232e2772dcf37aeee852  libgo/misc/cgo/errors/testdata/issue11097b.go
*************** e1738a28ecd6a43ffb8069ceb5653006  libgo/
*** 93401,93406 ****
--- 99953,99959 ----
  42e18c3a2617c25f6dca96c151cddbca  libgo/misc/cgo/errors/testdata/issue28069.go
  594409ffa8024ba68ed7763778eecf78  libgo/misc/cgo/errors/testdata/issue28721.go
  973b0912238933b9d976e7fda075b405  libgo/misc/cgo/errors/testdata/issue33061.go
+ 2096af4f0ad4a6d55d2804469c291599  libgo/misc/cgo/errors/testdata/issue42580.go
  3cf4bb2a1a6c125774466ec8f453f1c3  libgo/misc/cgo/errors/testdata/long_double_size.go
  116785aa37da4b63ef8cab040574414c  libgo/misc/cgo/errors/testdata/malloc.go
  47580f3b4ac401623cfef8df159faaa5  libgo/misc/cgo/fortran/answer.f90
*************** e1738a28ecd6a43ffb8069ceb5653006  libgo/
*** 93408,93417 ****
  49549f5e127b70da9bcf5ea08d3fe245  libgo/misc/cgo/fortran/fortran_test.go
  db27761a48b39d6df33113d394cb2e95  libgo/misc/cgo/fortran/helloworld/helloworld.f90
  f9c6292181441052f847d50f295a1d4a  libgo/misc/cgo/fortran/test.bash
! c148cc9636bf2ff78c9feb6a5af9fce6  libgo/misc/cgo/gmp/fib.go
  20524e3566221485343315706eae43a0  libgo/misc/cgo/gmp/gmp.go
! 0cbf65dd349d97ef4b23ea8268ccf5f5  libgo/misc/cgo/gmp/pi.go
! 4fc609cd72b78d65c1cb0553446c8f0e  libgo/misc/cgo/life/life_test.go
  da522b4c858cfa6fc5936650939c57d4  libgo/misc/cgo/life/overlaydir_test.go
  e333919bef801e9adcc46db19680d3b9  libgo/misc/cgo/life/testdata/c-life.c
  6899243a9e2b427e2c803665189c8273  libgo/misc/cgo/life/testdata/life.go
--- 99961,99970 ----
  49549f5e127b70da9bcf5ea08d3fe245  libgo/misc/cgo/fortran/fortran_test.go
  db27761a48b39d6df33113d394cb2e95  libgo/misc/cgo/fortran/helloworld/helloworld.f90
  f9c6292181441052f847d50f295a1d4a  libgo/misc/cgo/fortran/test.bash
! 98b4fab67dde651176ebecb2a1bfb22d  libgo/misc/cgo/gmp/fib.go
  20524e3566221485343315706eae43a0  libgo/misc/cgo/gmp/gmp.go
! f3c16bb143fb41b47c5d19705492551e  libgo/misc/cgo/gmp/pi.go
! 0bf03c8728b8e2b66883db96f304e45e  libgo/misc/cgo/life/life_test.go
  da522b4c858cfa6fc5936650939c57d4  libgo/misc/cgo/life/overlaydir_test.go
  e333919bef801e9adcc46db19680d3b9  libgo/misc/cgo/life/testdata/c-life.c
  6899243a9e2b427e2c803665189c8273  libgo/misc/cgo/life/testdata/life.go
*************** ee5a40e2bd2e48907f92346d9b49da78  libgo/
*** 93421,93427 ****
  d469ba248b8c5765a89a253d339046d6  libgo/misc/cgo/nocgo/nocgo.go
  f69b131d9819968c11688786945a3671  libgo/misc/cgo/nocgo/nocgo_test.go
  fbecd642e89c2997b20b016c0e9309a3  libgo/misc/cgo/stdio/overlaydir_test.go
! d11165bc7356a6b534fdd98880e1a01f  libgo/misc/cgo/stdio/stdio_test.go
  c558f59cd6cf7f58f938c4fa8cd5c4a5  libgo/misc/cgo/stdio/testdata/chain.go
  a0d2f9386e0a43fc68d7a94fb48de9b8  libgo/misc/cgo/stdio/testdata/chain.out
  b6094c6e94f43a5e9aac82b309edbb45  libgo/misc/cgo/stdio/testdata/fib.go
--- 99974,99980 ----
  d469ba248b8c5765a89a253d339046d6  libgo/misc/cgo/nocgo/nocgo.go
  f69b131d9819968c11688786945a3671  libgo/misc/cgo/nocgo/nocgo_test.go
  fbecd642e89c2997b20b016c0e9309a3  libgo/misc/cgo/stdio/overlaydir_test.go
! 7f051113f5e627f9350b1abdc04a4253  libgo/misc/cgo/stdio/stdio_test.go
  c558f59cd6cf7f58f938c4fa8cd5c4a5  libgo/misc/cgo/stdio/testdata/chain.go
  a0d2f9386e0a43fc68d7a94fb48de9b8  libgo/misc/cgo/stdio/testdata/chain.out
  b6094c6e94f43a5e9aac82b309edbb45  libgo/misc/cgo/stdio/testdata/fib.go
*************** d7e78058738290e2483251e6b97251ba  libgo/
*** 93433,93458 ****
  95e77a31170491326dd8742a0a1ebfb2  libgo/misc/cgo/stdio/testdata/stdio/stdio.go
  eaeb78fda062d986c76134fc2bbf2d51  libgo/misc/cgo/test/backdoor.go
  17244228322762ffa7ecdd8a727a6b71  libgo/misc/cgo/test/buildid_linux.go
! 109e33aac9c7e3b38805dffed3eba1aa  libgo/misc/cgo/test/callback.go
  49335fbfcbae448f34377e51959082e1  libgo/misc/cgo/test/callback_c.c
  cc7244ffa840bb2bf6f2b383616d28d8  libgo/misc/cgo/test/callback_c_gc.c
  96fff232701fc15784e771f3f3645d0f  libgo/misc/cgo/test/callback_c_gccgo.c
  32b3e7610c58a4a743889f2af83879e4  libgo/misc/cgo/test/cgo_linux_test.go
  bf38c3690d634d5cd54a6ff63c800406  libgo/misc/cgo/test/cgo_stubs_android_test.go
! abc5434949a48aca01d670c22dc17fef  libgo/misc/cgo/test/cgo_test.go
! 20e866126359dbe63b0c97b38410f574  libgo/misc/cgo/test/cgo_thread_lock.go
! d4bf41221286a234cf3efa8b8ca7c73e  libgo/misc/cgo/test/cgo_unix_test.go
  ab5d420b8abd087ed27f929d43428f42  libgo/misc/cgo/test/cthread_unix.c
  f6c5c772dfcb6fe41dbccf8d1456bec3  libgo/misc/cgo/test/cthread_windows.c
! eb5f6bff3e1219da1650530e52a26ca7  libgo/misc/cgo/test/issue1435.go
! f00698e7b7eaff04e57b27283e837485  libgo/misc/cgo/test/issue18146.go
  e7e431ce6e7b5ae73377b4cfc1ad2077  libgo/misc/cgo/test/issue20910.c
! decd112bb307b94c45444d59be7033d2  libgo/misc/cgo/test/issue21897.go
! 592d353ddb7a12a9cc7479b353808d0e  libgo/misc/cgo/test/issue21897b.go
  a827b10ecb1480b6f992149979a87a5a  libgo/misc/cgo/test/issue31891.c
  4f3ef598cb35b3a4309daa3fc866aa5d  libgo/misc/cgo/test/issue4029.c
! 991a203bc90bc84523eb8c54a83676ac  libgo/misc/cgo/test/issue4029.go
! 1dfbf93a9df8b975fdfda7b97162d555  libgo/misc/cgo/test/issue4029w.go
  2d3cd1dcdf8b33c48b60726ea737355e  libgo/misc/cgo/test/issue42495.go
  6dbc3bfd1740a9d7d57bd1857cf29233  libgo/misc/cgo/test/issue4273.c
  8e53c0246b8bd05729dd04f7d7466b7e  libgo/misc/cgo/test/issue4273b.c
--- 99986,100013 ----
  95e77a31170491326dd8742a0a1ebfb2  libgo/misc/cgo/stdio/testdata/stdio/stdio.go
  eaeb78fda062d986c76134fc2bbf2d51  libgo/misc/cgo/test/backdoor.go
  17244228322762ffa7ecdd8a727a6b71  libgo/misc/cgo/test/buildid_linux.go
! 964e23119aaac600e5c3af9926648304  libgo/misc/cgo/test/callback.go
  49335fbfcbae448f34377e51959082e1  libgo/misc/cgo/test/callback_c.c
  cc7244ffa840bb2bf6f2b383616d28d8  libgo/misc/cgo/test/callback_c_gc.c
  96fff232701fc15784e771f3f3645d0f  libgo/misc/cgo/test/callback_c_gccgo.c
  32b3e7610c58a4a743889f2af83879e4  libgo/misc/cgo/test/cgo_linux_test.go
  bf38c3690d634d5cd54a6ff63c800406  libgo/misc/cgo/test/cgo_stubs_android_test.go
! 349eff443a3ad70576a15db77f83fc61  libgo/misc/cgo/test/cgo_test.go
! feff1caa96c292747cd42534bfb24ccc  libgo/misc/cgo/test/cgo_thread_lock.go
! 4d4a64c12dbbc0c352b7d3697f5731eb  libgo/misc/cgo/test/cgo_unix_test.go
  ab5d420b8abd087ed27f929d43428f42  libgo/misc/cgo/test/cthread_unix.c
  f6c5c772dfcb6fe41dbccf8d1456bec3  libgo/misc/cgo/test/cthread_windows.c
! e2a511a6b8fafad908b8151778aea3c5  libgo/misc/cgo/test/issue1435.go
! ae474879bf394e1e21c0c94e4cd598e7  libgo/misc/cgo/test/issue18146.go
  e7e431ce6e7b5ae73377b4cfc1ad2077  libgo/misc/cgo/test/issue20910.c
! 9244cdb2184a2489ed7a53beab30d02a  libgo/misc/cgo/test/issue21897.go
! 01a5249d3d8e80747d4742c12c99e88e  libgo/misc/cgo/test/issue21897b.go
  a827b10ecb1480b6f992149979a87a5a  libgo/misc/cgo/test/issue31891.c
  4f3ef598cb35b3a4309daa3fc866aa5d  libgo/misc/cgo/test/issue4029.c
! 48c7e2749cac5f8828ef6538361bca6e  libgo/misc/cgo/test/issue4029.go
! 5ecb66be2bbbac0e45f3a82a913f46c6  libgo/misc/cgo/test/issue4029w.go
! b268b1e15fbcf631ddc45630e44424fe  libgo/misc/cgo/test/issue42018.go
! 17c0cc7ad6fd76e9ab1d39224e1f16e9  libgo/misc/cgo/test/issue42018_windows.go
  2d3cd1dcdf8b33c48b60726ea737355e  libgo/misc/cgo/test/issue42495.go
  6dbc3bfd1740a9d7d57bd1857cf29233  libgo/misc/cgo/test/issue4273.c
  8e53c0246b8bd05729dd04f7d7466b7e  libgo/misc/cgo/test/issue4273b.c
*************** f2e763ef51ca4b26b6b028db4434215d  libgo/
*** 93464,93486 ****
  3f38262e3ab8af462db06ba8599ae778  libgo/misc/cgo/test/issue6833_c.c
  6498752c1d96cecd9a8af5ef809372b4  libgo/misc/cgo/test/issue6907export_c.c
  074edef0b53cc462888881f8140b52d3  libgo/misc/cgo/test/issue6997_linux.c
! 3191719e8a1860195bc19a29951186b5  libgo/misc/cgo/test/issue6997_linux.go
  92a0d86c1ceb2b2a2f2995ef9e39b7c7  libgo/misc/cgo/test/issue7234_test.go
! 991b49c86f165efd7712a8626af694c0  libgo/misc/cgo/test/issue8148.go
  2dfbbc92f3a5440122f0a20645c6af03  libgo/misc/cgo/test/issue8331.h
! e679d0cc00ca8503a5adb8cfafdcba58  libgo/misc/cgo/test/issue8517.go
  5f47bbf4ed9dbb6f5681b556a4c21beb  libgo/misc/cgo/test/issue8517_windows.c
  59b12011bec082517d4d1f3bc83099a9  libgo/misc/cgo/test/issue8517_windows.go
! 91e7f56bc81da2c233ccc0d0bad0d775  libgo/misc/cgo/test/issue8694.go
  8d3ea20893a9489ef5be4dcec9547f60  libgo/misc/cgo/test/issue8811.c
  a09e5b7ae79a928e91712fb26b34533d  libgo/misc/cgo/test/overlaydir_test.go
! fbac7f6d6e6b4d5f80cec295bf3d4632  libgo/misc/cgo/test/pkg_test.go
! 23796df8a6c6ed3aad756f5ad7d647e4  libgo/misc/cgo/test/setgid_linux.go
! 8edbe29e0d6dfe92a50c5b6910677634  libgo/misc/cgo/test/sigaltstack.go
  be7ad618980be7ceb8d08800414925b0  libgo/misc/cgo/test/sigprocmask.c
! c0c2c867016085d2c729c08d37bb7021  libgo/misc/cgo/test/sigprocmask.go
! ef0e47a19d2aa48bcca2fa860f520f31  libgo/misc/cgo/test/test.go
! 4f20ccdc7c1335d68b283d5c3836dc77  libgo/misc/cgo/test/test_unix.go
  b51608fa946e2a41effc284dddcd3b56  libgo/misc/cgo/test/test_windows.go
  bb6d37eb8e88211ceed1e0ad1d37b56a  libgo/misc/cgo/test/testdata/cgo_linux_test.go
  59d611e93391371594e9dd2359789ffa  libgo/misc/cgo/test/testdata/cgo_test.go
--- 100019,100042 ----
  3f38262e3ab8af462db06ba8599ae778  libgo/misc/cgo/test/issue6833_c.c
  6498752c1d96cecd9a8af5ef809372b4  libgo/misc/cgo/test/issue6907export_c.c
  074edef0b53cc462888881f8140b52d3  libgo/misc/cgo/test/issue6997_linux.c
! c958b8cde9ba84c4ea317f8481928d2a  libgo/misc/cgo/test/issue6997_linux.go
  92a0d86c1ceb2b2a2f2995ef9e39b7c7  libgo/misc/cgo/test/issue7234_test.go
! 4c81b714a4e7439f8507240ab51c77c5  libgo/misc/cgo/test/issue8148.c
! c6c54eb7f31ca593044f571cfc189cc3  libgo/misc/cgo/test/issue8148.go
  2dfbbc92f3a5440122f0a20645c6af03  libgo/misc/cgo/test/issue8331.h
! 0dca2cbfeaccd191b335cf076cf21966  libgo/misc/cgo/test/issue8517.go
  5f47bbf4ed9dbb6f5681b556a4c21beb  libgo/misc/cgo/test/issue8517_windows.c
  59b12011bec082517d4d1f3bc83099a9  libgo/misc/cgo/test/issue8517_windows.go
! ae342e7f420cf494f45bdf15dd166cf9  libgo/misc/cgo/test/issue8694.go
  8d3ea20893a9489ef5be4dcec9547f60  libgo/misc/cgo/test/issue8811.c
  a09e5b7ae79a928e91712fb26b34533d  libgo/misc/cgo/test/overlaydir_test.go
! 3a4d0dea827bd7cab469eca67be82564  libgo/misc/cgo/test/pkg_test.go
! 518bc4d65083f746c4fc043c074961f6  libgo/misc/cgo/test/setgid_linux.go
! 499c2a5fb3842501376d683bd0cf88cf  libgo/misc/cgo/test/sigaltstack.go
  be7ad618980be7ceb8d08800414925b0  libgo/misc/cgo/test/sigprocmask.c
! 21b73ce97765e0e1aaf02eeb07486c4d  libgo/misc/cgo/test/sigprocmask.go
! ff2a9e60b8db483e64587ce2c727546f  libgo/misc/cgo/test/test.go
! 2972c74763fd696fbcb7ae25e5b3f7ce  libgo/misc/cgo/test/test_unix.go
  b51608fa946e2a41effc284dddcd3b56  libgo/misc/cgo/test/test_windows.go
  bb6d37eb8e88211ceed1e0ad1d37b56a  libgo/misc/cgo/test/testdata/cgo_linux_test.go
  59d611e93391371594e9dd2359789ffa  libgo/misc/cgo/test/testdata/cgo_test.go
*************** c18a9cf261a0d3ce21d3b8c59f67f66b  libgo/
*** 93521,93526 ****
--- 100077,100084 ----
  0f72ebb2ea5347c250f3ea0150eda90c  libgo/misc/cgo/test/testdata/issue30527/b.go
  ba8a1f1f623813b97df2f3ab58c18d70  libgo/misc/cgo/test/testdata/issue41761.go
  ff8308c36e57c40821589281fecb683a  libgo/misc/cgo/test/testdata/issue41761a/a.go
+ a9c90cc657b0f07b5b30e6e2b938f614  libgo/misc/cgo/test/testdata/issue43639.go
+ 36554c8fd0cc421e9235f14b91697fe3  libgo/misc/cgo/test/testdata/issue43639/a.go
  b7d412debb2abf957799934c77b7cdb6  libgo/misc/cgo/test/testdata/issue8756.go
  78befbe35ef08e8c4ba0c5930192445a  libgo/misc/cgo/test/testdata/issue8756/issue8756.go
  b9aa09f798b3bc83ce51e20bd810bade  libgo/misc/cgo/test/testdata/issue8828.go
*************** b9aa09f798b3bc83ce51e20bd810bade  libgo/
*** 93528,93559 ****
  5f8d56a00da98056b83a1f6c378fda2e  libgo/misc/cgo/test/testdata/issue8828/trivial.go
  a808c8a17aceb7e68127efd61affbfb5  libgo/misc/cgo/test/testdata/issue9026.go
  f9d3c83f95a0f529b1c194c3bade1668  libgo/misc/cgo/test/testdata/issue9026/issue9026.go
! 276cf293f75de9f4736f6e56835bbeab  libgo/misc/cgo/test/testdata/issue9400/asm_386.s
! becd1c2d6f8c108451b5891cf40b427b  libgo/misc/cgo/test/testdata/issue9400/asm_amd64x.s
! d6a563e1a42c2dbf68308bca23f858ad  libgo/misc/cgo/test/testdata/issue9400/asm_arm.s
! 770bf9327ae866f522cc143c655456da  libgo/misc/cgo/test/testdata/issue9400/asm_arm64.s
! 03860280564ecb90d3c1169d81455921  libgo/misc/cgo/test/testdata/issue9400/asm_mips64x.s
! 3f8483786bc876c80c1d1b4df2f0c538  libgo/misc/cgo/test/testdata/issue9400/asm_mipsx.s
! 29533c67786f80a6b2368a5ec9e5fd7a  libgo/misc/cgo/test/testdata/issue9400/asm_ppc64x.s
! 3d720bc896800033908328ff962d9c04  libgo/misc/cgo/test/testdata/issue9400/asm_riscv64.s
! 88bfbd9927e0341a4ad2aa3d40de8c60  libgo/misc/cgo/test/testdata/issue9400/asm_s390x.s
  050b0c9810cc2ac7620223802714318c  libgo/misc/cgo/test/testdata/issue9400/gccgo.go
  4ce7229937fa38e883e74683001df70a  libgo/misc/cgo/test/testdata/issue9400/stubs.go
! abc8947c783bd446ce4147748933b842  libgo/misc/cgo/test/testdata/issue9400_linux.go
  b20ddef474a1c4b0ebee9c8627deb41c  libgo/misc/cgo/test/testdata/issue9510.go
  f75c8000816f3eac1bceebafd1e8ffa2  libgo/misc/cgo/test/testdata/issue9510a/a.go
  83bbcdcb1023f0de0807dbb2d7742f09  libgo/misc/cgo/test/testdata/issue9510b/b.go
  269d28ce1dda5d7d67560dd21997a3df  libgo/misc/cgo/test/testdata/test26213.go
! 2521342c991cfc5080d0e2d2cd5111a2  libgo/misc/cgo/test/testx.go
  e93af13b9ec72b3ff0a20994cef2d38c  libgo/misc/cgo/testasan/main.go
! d247ed383ef84bdb92f2d5738545d8a2  libgo/misc/cgo/testcarchive/carchive_test.go
  f8d551b0a2fd42e8270f9527e25e56ea  libgo/misc/cgo/testcarchive/overlaydir_test.go
  587041295d36af14ec71daf2b3bb9795  libgo/misc/cgo/testcarchive/testdata/libgo/libgo.go
  53753bff72eede1a577ac364c9cb22ed  libgo/misc/cgo/testcarchive/testdata/libgo2/libgo2.go
  f4ac832850de15bdf7a61110981b4e90  libgo/misc/cgo/testcarchive/testdata/libgo3/libgo3.go
  434da68b49fe4214bdf6a3d4b1feacda  libgo/misc/cgo/testcarchive/testdata/libgo4/libgo4.go
! 1137de8f1569717ae4c7019eb42259da  libgo/misc/cgo/testcarchive/testdata/libgo6/sigprof.go
  43e6b90709b705f48ab0d39a08524503  libgo/misc/cgo/testcarchive/testdata/libgo7/sink.go
  a4fd83ecf881c71ee4399ac6e23b9fdb  libgo/misc/cgo/testcarchive/testdata/main.c
  f323397c907f0760c2f227d52654f73d  libgo/misc/cgo/testcarchive/testdata/main2.c
  ec8d65b2e27d0c9c0a3b55beaab48400  libgo/misc/cgo/testcarchive/testdata/main3.c
--- 100086,100120 ----
  5f8d56a00da98056b83a1f6c378fda2e  libgo/misc/cgo/test/testdata/issue8828/trivial.go
  a808c8a17aceb7e68127efd61affbfb5  libgo/misc/cgo/test/testdata/issue9026.go
  f9d3c83f95a0f529b1c194c3bade1668  libgo/misc/cgo/test/testdata/issue9026/issue9026.go
! 7796d177ee1e2444425dab6cd6fd3b6a  libgo/misc/cgo/test/testdata/issue9400/asm_386.s
! 8152b3170ee44e90f5ce82dbfbded543  libgo/misc/cgo/test/testdata/issue9400/asm_amd64x.s
! 339e87b6d2243b11ffaeda658f75b53a  libgo/misc/cgo/test/testdata/issue9400/asm_arm.s
! bcff54a5e095725905d662e68daba423  libgo/misc/cgo/test/testdata/issue9400/asm_arm64.s
! 77c842977b86b40021775f701fab80a0  libgo/misc/cgo/test/testdata/issue9400/asm_mips64x.s
! 0edf81be38f0509578beb404a46edb33  libgo/misc/cgo/test/testdata/issue9400/asm_mipsx.s
! 45e176ca2b333703cf2c170d752f500d  libgo/misc/cgo/test/testdata/issue9400/asm_ppc64x.s
! 339cca7192ee5c605acdca0105abe094  libgo/misc/cgo/test/testdata/issue9400/asm_riscv64.s
! 83d324af47df75ae0fe46955fb5ddf8f  libgo/misc/cgo/test/testdata/issue9400/asm_s390x.s
  050b0c9810cc2ac7620223802714318c  libgo/misc/cgo/test/testdata/issue9400/gccgo.go
  4ce7229937fa38e883e74683001df70a  libgo/misc/cgo/test/testdata/issue9400/stubs.go
! 361a932a459400c4c6b7fe3d34a55f06  libgo/misc/cgo/test/testdata/issue9400_linux.go
  b20ddef474a1c4b0ebee9c8627deb41c  libgo/misc/cgo/test/testdata/issue9510.go
  f75c8000816f3eac1bceebafd1e8ffa2  libgo/misc/cgo/test/testdata/issue9510a/a.go
  83bbcdcb1023f0de0807dbb2d7742f09  libgo/misc/cgo/test/testdata/issue9510b/b.go
  269d28ce1dda5d7d67560dd21997a3df  libgo/misc/cgo/test/testdata/test26213.go
! 824257ba92a505ec5e8c40db2eb67ce0  libgo/misc/cgo/test/testx.c
! dffebf8d16be9e4e3c8c7d1de779ceff  libgo/misc/cgo/test/testx.go
! 6f233a6cd0f3ad47cfa29e6973539b87  libgo/misc/cgo/test/typeparam.go
  e93af13b9ec72b3ff0a20994cef2d38c  libgo/misc/cgo/testasan/main.go
! 8bed02cdec9b30a7635b36bf2c85c323  libgo/misc/cgo/testcarchive/carchive_test.go
  f8d551b0a2fd42e8270f9527e25e56ea  libgo/misc/cgo/testcarchive/overlaydir_test.go
  587041295d36af14ec71daf2b3bb9795  libgo/misc/cgo/testcarchive/testdata/libgo/libgo.go
  53753bff72eede1a577ac364c9cb22ed  libgo/misc/cgo/testcarchive/testdata/libgo2/libgo2.go
  f4ac832850de15bdf7a61110981b4e90  libgo/misc/cgo/testcarchive/testdata/libgo3/libgo3.go
  434da68b49fe4214bdf6a3d4b1feacda  libgo/misc/cgo/testcarchive/testdata/libgo4/libgo4.go
! f81234869ca3fb7f3e8d40fc102d1e6e  libgo/misc/cgo/testcarchive/testdata/libgo6/sigprof.go
  43e6b90709b705f48ab0d39a08524503  libgo/misc/cgo/testcarchive/testdata/libgo7/sink.go
+ 7b921585c307fffcc60c13bf9497a4ba  libgo/misc/cgo/testcarchive/testdata/libgo8/a.go
  a4fd83ecf881c71ee4399ac6e23b9fdb  libgo/misc/cgo/testcarchive/testdata/main.c
  f323397c907f0760c2f227d52654f73d  libgo/misc/cgo/testcarchive/testdata/main2.c
  ec8d65b2e27d0c9c0a3b55beaab48400  libgo/misc/cgo/testcarchive/testdata/main3.c
*************** d8e523dbb07ee8991068ef6886d2a8cc  libgo/
*** 93561,93578 ****
  2d616e7b1c6bfba4b64789f71941b58e  libgo/misc/cgo/testcarchive/testdata/main5.c
  cfec2f087e0c44a1af6688aa685fc36d  libgo/misc/cgo/testcarchive/testdata/main6.c
  a4d768923d14ea98ac9811fc9a117032  libgo/misc/cgo/testcarchive/testdata/main7.c
  7c6ebec01d4524b0f65222e6cfb2ef97  libgo/misc/cgo/testcarchive/testdata/main_unix.c
  10233f35d78e18db246cf0fdf68d875e  libgo/misc/cgo/testcarchive/testdata/main_windows.c
  0b9a14f8a2750604ebb0ca8e0541cc2e  libgo/misc/cgo/testcarchive/testdata/p/p.go
! c7ab3949a10b313bbbc2af2509e516ca  libgo/misc/cgo/testcshared/cshared_test.go
  0896e0a75c112ff26beb911cdfca0ca3  libgo/misc/cgo/testcshared/overlaydir_test.go
  d711df9a3e8d93ab912a04bc6f1d0fb0  libgo/misc/cgo/testcshared/testdata/go2c2go/go/shlib.go
  99281ff3a94472a7031e180cc4af7757  libgo/misc/cgo/testcshared/testdata/go2c2go/m1/c.c
  7844ecdc921b6cd0c7667af6471549b2  libgo/misc/cgo/testcshared/testdata/go2c2go/m1/main.go
  f3ce4a9e9f9308298ffe8d43a0cd08b7  libgo/misc/cgo/testcshared/testdata/go2c2go/m2/main.go
  52bdff20a9d30e5166dd3c7693c8e667  libgo/misc/cgo/testcshared/testdata/libgo/libgo.go
! 125f686b2903a5d5a5386bc188485e6b  libgo/misc/cgo/testcshared/testdata/libgo2/dup2.go
! 85236243464ab5d7e04737e83bbfeca4  libgo/misc/cgo/testcshared/testdata/libgo2/dup3.go
  05d2c95bd1c4bbf7589a26dccb8f2362  libgo/misc/cgo/testcshared/testdata/libgo2/libgo2.go
  e3f3c15f046056f657dd4a02626be4d8  libgo/misc/cgo/testcshared/testdata/libgo4/libgo4.go
  6abb6f1115cbda57e3777a32809ac7cb  libgo/misc/cgo/testcshared/testdata/libgo5/libgo5.go
--- 100122,100140 ----
  2d616e7b1c6bfba4b64789f71941b58e  libgo/misc/cgo/testcarchive/testdata/main5.c
  cfec2f087e0c44a1af6688aa685fc36d  libgo/misc/cgo/testcarchive/testdata/main6.c
  a4d768923d14ea98ac9811fc9a117032  libgo/misc/cgo/testcarchive/testdata/main7.c
+ dcd2bd4edcfd548747090161e973a1d3  libgo/misc/cgo/testcarchive/testdata/main8.c
  7c6ebec01d4524b0f65222e6cfb2ef97  libgo/misc/cgo/testcarchive/testdata/main_unix.c
  10233f35d78e18db246cf0fdf68d875e  libgo/misc/cgo/testcarchive/testdata/main_windows.c
  0b9a14f8a2750604ebb0ca8e0541cc2e  libgo/misc/cgo/testcarchive/testdata/p/p.go
! 2ea185e566401c1691f8be5d6cfcb321  libgo/misc/cgo/testcshared/cshared_test.go
  0896e0a75c112ff26beb911cdfca0ca3  libgo/misc/cgo/testcshared/overlaydir_test.go
  d711df9a3e8d93ab912a04bc6f1d0fb0  libgo/misc/cgo/testcshared/testdata/go2c2go/go/shlib.go
  99281ff3a94472a7031e180cc4af7757  libgo/misc/cgo/testcshared/testdata/go2c2go/m1/c.c
  7844ecdc921b6cd0c7667af6471549b2  libgo/misc/cgo/testcshared/testdata/go2c2go/m1/main.go
  f3ce4a9e9f9308298ffe8d43a0cd08b7  libgo/misc/cgo/testcshared/testdata/go2c2go/m2/main.go
  52bdff20a9d30e5166dd3c7693c8e667  libgo/misc/cgo/testcshared/testdata/libgo/libgo.go
! d41c4e9331deda3ae252bd6d5e185cdf  libgo/misc/cgo/testcshared/testdata/libgo2/dup2.go
! 4d1de12e2e6bdef7e56a4ba6e32eaec4  libgo/misc/cgo/testcshared/testdata/libgo2/dup3.go
  05d2c95bd1c4bbf7589a26dccb8f2362  libgo/misc/cgo/testcshared/testdata/libgo2/libgo2.go
  e3f3c15f046056f657dd4a02626be4d8  libgo/misc/cgo/testcshared/testdata/libgo4/libgo4.go
  6abb6f1115cbda57e3777a32809ac7cb  libgo/misc/cgo/testcshared/testdata/libgo5/libgo5.go
*************** fb75da8705701f3da6e2ec86473c4c17  libgo/
*** 93590,93604 ****
  e0a1c1a867c2e93bd63c19d70dda4256  libgo/misc/cgo/testgodefs/testdata/issue37621.go
  51234920db243fdb579717c77d539dcb  libgo/misc/cgo/testgodefs/testdata/issue38649.go
  232f33165bc0ed8f55560d412cb86ced  libgo/misc/cgo/testgodefs/testdata/issue39534.go
  db2bc8bd45ed894b976b9475a5becabb  libgo/misc/cgo/testgodefs/testdata/issue8478.go
! 7ff732b2b8ce548d1c923632aeb06d4c  libgo/misc/cgo/testgodefs/testdata/main.go
! 1bbe5a7986a1331a8c536d622c6de4b6  libgo/misc/cgo/testgodefs/testgodefs_test.go
  b3330d10bd88d7aad002abd770127440  libgo/misc/cgo/testplugin/altpath/testdata/common/common.go
  f52770aca0b2057488145d14f2b05df5  libgo/misc/cgo/testplugin/altpath/testdata/plugin-mismatch/main.go
  bd3ef64f7b22e8989fa8c22242e28170  libgo/misc/cgo/testplugin/overlaydir_test.go
! 5665c37633bd03209ca5ab8cd0a482b6  libgo/misc/cgo/testplugin/plugin_test.go
  77087613c7c8ef8378399fb25995bd87  libgo/misc/cgo/testplugin/testdata/checkdwarf/main.go
  4494c6c69234e18bd292355275abb48f  libgo/misc/cgo/testplugin/testdata/common/common.go
  c7f56577da69e7e969cde246d407eeb0  libgo/misc/cgo/testplugin/testdata/host/host.go
  5209de736243b4562f18c46a705c8f29  libgo/misc/cgo/testplugin/testdata/iface/main.go
  97e24ac2eb602aa6007c80a8d7715e04  libgo/misc/cgo/testplugin/testdata/iface_a/a.go
--- 100152,100168 ----
  e0a1c1a867c2e93bd63c19d70dda4256  libgo/misc/cgo/testgodefs/testdata/issue37621.go
  51234920db243fdb579717c77d539dcb  libgo/misc/cgo/testgodefs/testdata/issue38649.go
  232f33165bc0ed8f55560d412cb86ced  libgo/misc/cgo/testgodefs/testdata/issue39534.go
+ 2c08a7f4a4a3846d04e8d392d012ebd1  libgo/misc/cgo/testgodefs/testdata/issue48396.go
  db2bc8bd45ed894b976b9475a5becabb  libgo/misc/cgo/testgodefs/testdata/issue8478.go
! e2228fc3422c5ec09c85e64bd0d57766  libgo/misc/cgo/testgodefs/testdata/main.go
! 67da4cb941074528fc8a8865ec2d43c7  libgo/misc/cgo/testgodefs/testgodefs_test.go
  b3330d10bd88d7aad002abd770127440  libgo/misc/cgo/testplugin/altpath/testdata/common/common.go
  f52770aca0b2057488145d14f2b05df5  libgo/misc/cgo/testplugin/altpath/testdata/plugin-mismatch/main.go
  bd3ef64f7b22e8989fa8c22242e28170  libgo/misc/cgo/testplugin/overlaydir_test.go
! cbef0aee6f0438d7e852ccf26b350a35  libgo/misc/cgo/testplugin/plugin_test.go
  77087613c7c8ef8378399fb25995bd87  libgo/misc/cgo/testplugin/testdata/checkdwarf/main.go
  4494c6c69234e18bd292355275abb48f  libgo/misc/cgo/testplugin/testdata/common/common.go
+ 995cb7a8a31f1f04775b79013e6612fa  libgo/misc/cgo/testplugin/testdata/forkexec/main.go
  c7f56577da69e7e969cde246d407eeb0  libgo/misc/cgo/testplugin/testdata/host/host.go
  5209de736243b4562f18c46a705c8f29  libgo/misc/cgo/testplugin/testdata/iface/main.go
  97e24ac2eb602aa6007c80a8d7715e04  libgo/misc/cgo/testplugin/testdata/iface_a/a.go
*************** ef6e6dcc03cbd7f5dd7f6e1331843f52  libgo/
*** 93631,93637 ****
  b2ebd0a0623c71002f67de62c61753e9  libgo/misc/cgo/testplugin/testdata/issue44956/plugin2.go
  b11da600e0889c4fe57d2895bf8c839d  libgo/misc/cgo/testplugin/testdata/method/main.go
  e75122fe9fccf43cf8dfc77fca461787  libgo/misc/cgo/testplugin/testdata/method/plugin.go
! def44028fe231c2547cb3078694ee0a8  libgo/misc/cgo/testplugin/testdata/method2/main.go
  30024686784a5b19bd8d28987c78e101  libgo/misc/cgo/testplugin/testdata/method2/p/p.go
  5cefa1cd5e491227f1ed44d1fe101e9b  libgo/misc/cgo/testplugin/testdata/method2/plugin.go
  6631548e13c55dc48c06670d1738ea9f  libgo/misc/cgo/testplugin/testdata/plugin1/plugin1.go
--- 100195,100201 ----
  b2ebd0a0623c71002f67de62c61753e9  libgo/misc/cgo/testplugin/testdata/issue44956/plugin2.go
  b11da600e0889c4fe57d2895bf8c839d  libgo/misc/cgo/testplugin/testdata/method/main.go
  e75122fe9fccf43cf8dfc77fca461787  libgo/misc/cgo/testplugin/testdata/method/plugin.go
! e6716bcee23df9aca8deca94f78236b9  libgo/misc/cgo/testplugin/testdata/method2/main.go
  30024686784a5b19bd8d28987c78e101  libgo/misc/cgo/testplugin/testdata/method2/p/p.go
  5cefa1cd5e491227f1ed44d1fe101e9b  libgo/misc/cgo/testplugin/testdata/method2/plugin.go
  6631548e13c55dc48c06670d1738ea9f  libgo/misc/cgo/testplugin/testdata/plugin1/plugin1.go
*************** def44028fe231c2547cb3078694ee0a8  libgo/
*** 93639,93647 ****
  38a354fcc57c1a4a50ea408a2077751b  libgo/misc/cgo/testplugin/testdata/sub/plugin1/plugin1.go
  051ac3d4920e2fc77766cf7eb3449e2c  libgo/misc/cgo/testplugin/testdata/unnamed1/main.go
  16caee69133d198a6300aa09ce4a96c2  libgo/misc/cgo/testplugin/testdata/unnamed2/main.go
! 5cd59d5d24da9c0261c0dc8d8d5dda07  libgo/misc/cgo/testsanitizers/cc_test.go
! cc2b8ba11008ea6a498e7b00974159f6  libgo/misc/cgo/testsanitizers/cshared_test.go
! b24770c8d41ed44fcd75995b2efa8e38  libgo/misc/cgo/testsanitizers/msan_test.go
  306ad24dba4a960089277ca997dfa740  libgo/misc/cgo/testsanitizers/testdata/msan.go
  7f1cda8c94eef92c16f09c3c966b14e5  libgo/misc/cgo/testsanitizers/testdata/msan2.go
  148f1af88cd5cba489c7cade511966a8  libgo/misc/cgo/testsanitizers/testdata/msan2_cmsan.go
--- 100203,100218 ----
  38a354fcc57c1a4a50ea408a2077751b  libgo/misc/cgo/testplugin/testdata/sub/plugin1/plugin1.go
  051ac3d4920e2fc77766cf7eb3449e2c  libgo/misc/cgo/testplugin/testdata/unnamed1/main.go
  16caee69133d198a6300aa09ce4a96c2  libgo/misc/cgo/testplugin/testdata/unnamed2/main.go
! ea6f9dbfabd6d5ec22c369acc3b2d3dd  libgo/misc/cgo/testsanitizers/asan_test.go
! 03665b997fafcac33aebadf1e98f81ca  libgo/misc/cgo/testsanitizers/cc_test.go
! 031faff099957f7d08576130111414da  libgo/misc/cgo/testsanitizers/cshared_test.go
! 49f0fcaacf61e0b0d83a76138f4448a8  libgo/misc/cgo/testsanitizers/msan_test.go
! c841117f80d431e18f45b50d516830f5  libgo/misc/cgo/testsanitizers/testdata/asan1_fail.go
! 907a6b596b78a8723ee1f4bb1d8c8c1b  libgo/misc/cgo/testsanitizers/testdata/asan2_fail.go
! c28df412f6053bbeee9f863c23c5dea9  libgo/misc/cgo/testsanitizers/testdata/asan3_fail.go
! 84866f64cbf2fe61c9f96177c72b28ac  libgo/misc/cgo/testsanitizers/testdata/asan4_fail.go
! 189d078d3f15c2ecc05e048bc008fe45  libgo/misc/cgo/testsanitizers/testdata/asan5_fail.go
! bdc8432d8048b486afd955f360736744  libgo/misc/cgo/testsanitizers/testdata/asan_useAfterReturn.go
  306ad24dba4a960089277ca997dfa740  libgo/misc/cgo/testsanitizers/testdata/msan.go
  7f1cda8c94eef92c16f09c3c966b14e5  libgo/misc/cgo/testsanitizers/testdata/msan2.go
  148f1af88cd5cba489c7cade511966a8  libgo/misc/cgo/testsanitizers/testdata/msan2_cmsan.go
*************** d5094826cb76b870851b25cb34f068ce  libgo/
*** 93650,93655 ****
--- 100221,100227 ----
  7b8ba99361c5f738ff8c95b826b59047  libgo/misc/cgo/testsanitizers/testdata/msan5.go
  6251fa837e5b9e01ac77578c4dd2eb57  libgo/misc/cgo/testsanitizers/testdata/msan6.go
  b9c17c27540f00dcc1aedd0e2498998c  libgo/misc/cgo/testsanitizers/testdata/msan7.go
+ aa73e4ed70ec36158375ff7eaaeacda3  libgo/misc/cgo/testsanitizers/testdata/msan8.go
  bbfca19f56ecd3397f1ccda5daf5b156  libgo/misc/cgo/testsanitizers/testdata/msan_fail.go
  62246d176148e932140dbc1f7d209594  libgo/misc/cgo/testsanitizers/testdata/msan_shared.go
  9ad1ebeec513d9831beffde820167bdc  libgo/misc/cgo/testsanitizers/testdata/tsan.go
*************** e3e0004eb12806fb543471c4aa1e97c0  libgo/
*** 93663,93679 ****
  e3fc48de400ea2fc9bb17ad44864c375  libgo/misc/cgo/testsanitizers/testdata/tsan6.go
  908678a5a3988c0249391b82067139ee  libgo/misc/cgo/testsanitizers/testdata/tsan7.go
  f5081bc39552f3e27dca3536687ebf54  libgo/misc/cgo/testsanitizers/testdata/tsan8.go
! 7115b5294073ca0bb6b4ae3af83087c5  libgo/misc/cgo/testsanitizers/testdata/tsan9.go
  b3939da3e573bc742d313c4c766f5677  libgo/misc/cgo/testsanitizers/testdata/tsan_shared.go
  32afff6a513b574ad17963c3c3c2adac  libgo/misc/cgo/testsanitizers/tsan_test.go
  6e7cf64dcc5fd620ee90f312670672b2  libgo/misc/cgo/testshared/overlaydir_test.go
! 9dfaedb1a4891949044af0e938cb6360  libgo/misc/cgo/testshared/shared_test.go
  c8c244c463dafa52f306582ef7f534a2  libgo/misc/cgo/testshared/testdata/dep2/dep2.go
  e8933585d210efc08ffd3e3df56062bb  libgo/misc/cgo/testshared/testdata/dep3/dep3.go
! 7540284a79ae7e46ed86d02bcf6175a1  libgo/misc/cgo/testshared/testdata/depBase/asm.s
  d3b8b8eff2b5df460da8cb91eee81cd8  libgo/misc/cgo/testshared/testdata/depBase/dep.go
  c949d0006b7de61a8a4a3b4b891b1b39  libgo/misc/cgo/testshared/testdata/depBase/gccgo.go
! f819a440469998e421647ce3d11836f4  libgo/misc/cgo/testshared/testdata/depBase/stubs.go
  95e72a8ad4fb5be55bcfd19a2206354d  libgo/misc/cgo/testshared/testdata/division/division.go
  f018e673324a605d87d1f3efddac5b11  libgo/misc/cgo/testshared/testdata/exe/exe.go
  599fa696fefa84ed9e98140f87be772f  libgo/misc/cgo/testshared/testdata/exe2/exe2.go
--- 100235,100251 ----
  e3fc48de400ea2fc9bb17ad44864c375  libgo/misc/cgo/testsanitizers/testdata/tsan6.go
  908678a5a3988c0249391b82067139ee  libgo/misc/cgo/testsanitizers/testdata/tsan7.go
  f5081bc39552f3e27dca3536687ebf54  libgo/misc/cgo/testsanitizers/testdata/tsan8.go
! 9f48017a83e7eb2afe4a73836395e5ae  libgo/misc/cgo/testsanitizers/testdata/tsan9.go
  b3939da3e573bc742d313c4c766f5677  libgo/misc/cgo/testsanitizers/testdata/tsan_shared.go
  32afff6a513b574ad17963c3c3c2adac  libgo/misc/cgo/testsanitizers/tsan_test.go
  6e7cf64dcc5fd620ee90f312670672b2  libgo/misc/cgo/testshared/overlaydir_test.go
! afddb8d550432604a2b2111a0985ba1d  libgo/misc/cgo/testshared/shared_test.go
  c8c244c463dafa52f306582ef7f534a2  libgo/misc/cgo/testshared/testdata/dep2/dep2.go
  e8933585d210efc08ffd3e3df56062bb  libgo/misc/cgo/testshared/testdata/dep3/dep3.go
! 21c04794f7825ab8067bd373d791a0e8  libgo/misc/cgo/testshared/testdata/depBase/asm.s
  d3b8b8eff2b5df460da8cb91eee81cd8  libgo/misc/cgo/testshared/testdata/depBase/dep.go
  c949d0006b7de61a8a4a3b4b891b1b39  libgo/misc/cgo/testshared/testdata/depBase/gccgo.go
! 97ba7d17a6125a872411fdd76b9fb4a1  libgo/misc/cgo/testshared/testdata/depBase/stubs.go
  95e72a8ad4fb5be55bcfd19a2206354d  libgo/misc/cgo/testshared/testdata/division/division.go
  f018e673324a605d87d1f3efddac5b11  libgo/misc/cgo/testshared/testdata/exe/exe.go
  599fa696fefa84ed9e98140f87be772f  libgo/misc/cgo/testshared/testdata/exe2/exe2.go
*************** bda05a0352aefb90f231db36d77ae557  libgo/
*** 93698,93727 ****
  2f61d19894f6e01c33bf61d2066fd695  libgo/misc/cgo/testshared/testdata/issue44031/a/a.go
  1724b6ddc0c6c417eff07d5e22925056  libgo/misc/cgo/testshared/testdata/issue44031/b/b.go
  1f4efd722c821a92248db6e0448d196d  libgo/misc/cgo/testshared/testdata/issue44031/main/main.go
  aeab150469a79abc75a5def987bebe73  libgo/misc/cgo/testshared/testdata/trivial/trivial.go
  d07e34b8576e3653d7b109bdb8d8ce57  libgo/misc/cgo/testsigfwd/main.go
! 9b32239b5572c937f10ecdabed00c9f8  libgo/misc/cgo/testso/noso_test.go
  0f7eff7658a5d95930e817fcd0c1f75b  libgo/misc/cgo/testso/overlaydir_test.go
! 661581c23e91b8218c337957150c6533  libgo/misc/cgo/testso/so_test.go
  476b5d0c49c5f4c36f12ad08f5ef1bc4  libgo/misc/cgo/testso/testdata/cgoso.c
! 2a69ca98eb03a290b2ec09f90e3dc246  libgo/misc/cgo/testso/testdata/cgoso.go
  6ad786311efe9c3dac415f5cbf696b41  libgo/misc/cgo/testso/testdata/cgoso_c.c
  1c7f55058ebf2c56a697369ae27acadc  libgo/misc/cgo/testso/testdata/cgoso_unix.go
  0c93bb23c01933294ee6dc5d7dc2639a  libgo/misc/cgo/testso/testdata/main.go
! 9b32239b5572c937f10ecdabed00c9f8  libgo/misc/cgo/testsovar/noso_test.go
  0f7eff7658a5d95930e817fcd0c1f75b  libgo/misc/cgo/testsovar/overlaydir_test.go
! 661581c23e91b8218c337957150c6533  libgo/misc/cgo/testsovar/so_test.go
! f1fdc9ddbd81397c9765fe70c1a643a0  libgo/misc/cgo/testsovar/testdata/cgoso.go
  d5161f9796e597a2feaef3607564562a  libgo/misc/cgo/testsovar/testdata/cgoso_c.c
  8911a6ef43f6b3dc013db9ac307919dd  libgo/misc/cgo/testsovar/testdata/cgoso_c.h
  1ab9f5bb8a2a69d92d462121ff5ab1f4  libgo/misc/cgo/testsovar/testdata/main.go
  fb40fc675164613c2ce0361a86ebd5d0  libgo/misc/cgo/testtls/tls.go
! 377645daa8bde69ae6669dcc00a689ff  libgo/misc/cgo/testtls/tls_test.go
  696f9519af1fee77682869bb7037ecaf  libgo/misc/cgo/testtls/tls_unix.c
  cf2ea695111955efb5ada96e3b469cf2  libgo/mklinknames.awk
! c5d522fa8da8b1baf4a55a13d292eacb  libgo/mkrsysinfo.sh
! 4fc8543396f9c5be709cbdc38b94d373  libgo/mkruntimeinc.sh
! 81b8b042300eee47fae42dae3d92cf4e  libgo/mksigtab.sh
  6a1ca54f4f84b00f4d0308ff0a794d5f  libgo/mksysinfo.sh
  9c66bb618ec9c46d7e7dcadd04faf52b  libgo/mvifdiff.sh
  828897ee2e9950dc2b36e98b3f4e1f77  libgo/runtime/aeshash.c
--- 100270,100301 ----
  2f61d19894f6e01c33bf61d2066fd695  libgo/misc/cgo/testshared/testdata/issue44031/a/a.go
  1724b6ddc0c6c417eff07d5e22925056  libgo/misc/cgo/testshared/testdata/issue44031/b/b.go
  1f4efd722c821a92248db6e0448d196d  libgo/misc/cgo/testshared/testdata/issue44031/main/main.go
+ d0b1190be898ba134c7489a76017e709  libgo/misc/cgo/testshared/testdata/issue47837/a/a.go
+ fc0ff9ccbf83d2620d672841d54aa418  libgo/misc/cgo/testshared/testdata/issue47837/main/main.go
  aeab150469a79abc75a5def987bebe73  libgo/misc/cgo/testshared/testdata/trivial/trivial.go
  d07e34b8576e3653d7b109bdb8d8ce57  libgo/misc/cgo/testsigfwd/main.go
! ee226796e877fcafaa7b103bd8ad73e5  libgo/misc/cgo/testso/noso_test.go
  0f7eff7658a5d95930e817fcd0c1f75b  libgo/misc/cgo/testso/overlaydir_test.go
! 7217bfb63d37adf3429028f76668e798  libgo/misc/cgo/testso/so_test.go
  476b5d0c49c5f4c36f12ad08f5ef1bc4  libgo/misc/cgo/testso/testdata/cgoso.c
! 0c1bf9c9ed0241b3711e549d45fe5c06  libgo/misc/cgo/testso/testdata/cgoso.go
  6ad786311efe9c3dac415f5cbf696b41  libgo/misc/cgo/testso/testdata/cgoso_c.c
  1c7f55058ebf2c56a697369ae27acadc  libgo/misc/cgo/testso/testdata/cgoso_unix.go
  0c93bb23c01933294ee6dc5d7dc2639a  libgo/misc/cgo/testso/testdata/main.go
! ee226796e877fcafaa7b103bd8ad73e5  libgo/misc/cgo/testsovar/noso_test.go
  0f7eff7658a5d95930e817fcd0c1f75b  libgo/misc/cgo/testsovar/overlaydir_test.go
! 7217bfb63d37adf3429028f76668e798  libgo/misc/cgo/testsovar/so_test.go
! a5d7bcfebd52458d0de5ccdffcecb25b  libgo/misc/cgo/testsovar/testdata/cgoso.go
  d5161f9796e597a2feaef3607564562a  libgo/misc/cgo/testsovar/testdata/cgoso_c.c
  8911a6ef43f6b3dc013db9ac307919dd  libgo/misc/cgo/testsovar/testdata/cgoso_c.h
  1ab9f5bb8a2a69d92d462121ff5ab1f4  libgo/misc/cgo/testsovar/testdata/main.go
  fb40fc675164613c2ce0361a86ebd5d0  libgo/misc/cgo/testtls/tls.go
! b5c5e9ca72f553e7ff501efe47733404  libgo/misc/cgo/testtls/tls_test.go
  696f9519af1fee77682869bb7037ecaf  libgo/misc/cgo/testtls/tls_unix.c
  cf2ea695111955efb5ada96e3b469cf2  libgo/mklinknames.awk
! e8278f98a23aec9dfeb657bdfeeca029  libgo/mkrsysinfo.sh
! 60a301871ca83fcda4708049294532d9  libgo/mkruntimeinc.sh
! 54782b787517c5f40756ea576e6c2e3c  libgo/mksigtab.sh
  6a1ca54f4f84b00f4d0308ff0a794d5f  libgo/mksysinfo.sh
  9c66bb618ec9c46d7e7dcadd04faf52b  libgo/mvifdiff.sh
  828897ee2e9950dc2b36e98b3f4e1f77  libgo/runtime/aeshash.c
*************** bc8121acb97ddc7bf2ce153b0918ca35  libgo/
*** 93746,93755 ****
  1b81e55f6ff9cd0734e326617f8fb7ac  libgo/runtime/go-memmove.c
  b532f1e01813112ca6cc108a5b8ffdf2  libgo/runtime/go-nanotime.c
  7f766af44d2f922e4cfd15b9867eab8d  libgo/runtime/go-nosys.c
! 4b025f100a217b94db371dbe5e6b8a60  libgo/runtime/go-now.c
  d9925cb56c2ba2bc269933fc5c2ca259  libgo/runtime/go-reflect-call.c
  b2f07b4235f5d3afea32439a6620995b  libgo/runtime/go-setenv.c
! aa805c79a1211a3a570ce1e5a86ef004  libgo/runtime/go-signal.c
  6ade856ecb3d86b341bf182f31679cfe  libgo/runtime/go-string.h
  2b81afafd311c1c2b992982984c5e326  libgo/runtime/go-unsafe-pointer.c
  5d48d5cccc2ed2f80b567efbb0b71971  libgo/runtime/go-unsetenv.c
--- 100320,100329 ----
  1b81e55f6ff9cd0734e326617f8fb7ac  libgo/runtime/go-memmove.c
  b532f1e01813112ca6cc108a5b8ffdf2  libgo/runtime/go-nanotime.c
  7f766af44d2f922e4cfd15b9867eab8d  libgo/runtime/go-nosys.c
! e232a63e4af4c71972324051f3fd1c86  libgo/runtime/go-now.c
  d9925cb56c2ba2bc269933fc5c2ca259  libgo/runtime/go-reflect-call.c
  b2f07b4235f5d3afea32439a6620995b  libgo/runtime/go-setenv.c
! def4931ff005a2b8b5475b335db1a558  libgo/runtime/go-signal.c
  6ade856ecb3d86b341bf182f31679cfe  libgo/runtime/go-string.h
  2b81afafd311c1c2b992982984c5e326  libgo/runtime/go-unsafe-pointer.c
  5d48d5cccc2ed2f80b567efbb0b71971  libgo/runtime/go-unsetenv.c
*************** fcf383d3cba5ec358dfc04932d155811  libgo/
*** 93757,93959 ****
  c9a81542bf3ef7560958b6cbea5982c1  libgo/runtime/go-varargs.c
  a069ce221f9436d070ef24e5b056f5a7  libgo/runtime/panic.c
  ee09b4a160083b328fd1b84c8e6bef3e  libgo/runtime/print.c
! 9012366cf930d1e2d07a7f4906838cee  libgo/runtime/proc.c
  88236bd9baaae0e22c2fe3c097d9cfbf  libgo/runtime/rtems-task-variable-add.c
  da8feb87689c14c2ade32638da912eac  libgo/runtime/runtime.h
! 9f3cbb4598995168f1b1042a587ee8e9  libgo/runtime/runtime_c.c
! 7e8c8817ee732c944857259927850d02  libgo/runtime/stack.c
  f1f0917f45d626d15a5f129fef3d81e2  libgo/runtime/yield.c
  3ed2085cb41333632578bcadc9dc38b7  libgo/sysinfo.c
  64195708a46fb2d5225149f15a8e3991  libgo/testsuite/Makefile.am
  a88e7b262182c586e88c9684af1ccc29  libgo/testsuite/Makefile.in
  180c96a619276205ec9fc8e8217b67bd  libgo/testsuite/config/default.exp
! db714ec1a0facc57280cd0cea89f20d3  libgo/testsuite/gotest
  e3e86019491a40bd4f45424d7ce11037  libgo/testsuite/lib/libgo.exp
  c5574d106d35be5d94e80301b0855ada  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! ec2a66db82d0f24a63e3418b3247e9ad  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
! 775674136485d314e8cfa08ec26c4fc4  libgomp/Makefile.am
! cc0f858ff11f575dddb9c6738a27e009  libgomp/Makefile.in
! 2a5f26b1d96224a9bac97798c67316cd  libgomp/acc_prof.h
! c49c27dee875cdeae7024cb9d7fadf27  libgomp/acinclude.m4
  30a64ccfecfa60e8b5098e9fe26ea707  libgomp/aclocal.m4
! 75c0b7d44adf436cbd3e317fd3f6301c  libgomp/affinity-fmt.c
! f6ad5774aeeaa762b39e1090bf3d75db  libgomp/affinity.c
! 88b4f18e0c355c7167390548a4754da4  libgomp/alloc.c
! 2458c741c39c3e6f6ab24dc983d8bddb  libgomp/allocator.c
! d53fa2f436c75979aa6433c2e2fdae91  libgomp/atomic.c
! c91d9fdfda3eb84c845b7703305de606  libgomp/barrier.c
! 4aeeea235b6b35c0c89feb9b7a9b349e  libgomp/config.h.in
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/libgomp-plugin.c
! 04c5216eb27a1a0828309594496031a5  libgomp/config/accel/lock.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/mutex.c
! c46e7dd52585a60d4be525e938f3c26f  libgomp/config/accel/mutex.h
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-async.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-cuda.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-host.c
! 07e89a4b19a37e19374df28a3c4d2428  libgomp/config/accel/oacc-init.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-mem.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-plugin.c
  7973e447504d3a02e64bae101b909b1a  libgomp/config/accel/omp-lock.h
! 23566eb8d91cc69e5396156c7bdf5b61  libgomp/config/accel/openacc.f90
! 0a41cd8d100e9e4cde1284ad7db47bd6  libgomp/config/accel/pool.h
! 585c0875306ee27f73630c7af8e0f5f0  libgomp/config/accel/proc.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/ptrlock.c
! 1d3fbd9ed01779c5de119455e28c2f4c  libgomp/config/accel/ptrlock.h
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/sem.c
! 9a7d3bbaed73db2faf8cdf3372dad10d  libgomp/config/accel/sem.h
! 323fdd6ead9f8db70c976caf583b152e  libgomp/config/accel/thread-stacksize.h
! 72dd6bc01035e9ef5579a23108de8799  libgomp/config/bsd/proc.c
! 9c3a691078b1047c1f467b9d89bd361a  libgomp/config/darwin/plugin-suffix.h
! 6a6844728f0ba5f74de03d31a7f5e698  libgomp/config/darwin/thread-stacksize.h
! 43fa2c8e58a2c4601b19ac818ab348d6  libgomp/config/gcn/affinity-fmt.c
! f61d6c76267281217e9fd1ee62d943ac  libgomp/config/gcn/bar.c
! af056d3b347662626aa0637959f7c4be  libgomp/config/gcn/bar.h
! 8bb7fccc402a23d8afc286765a19a587  libgomp/config/gcn/doacross.h
! b5dec9b9a3b48cc3b4fe45747fa00fcd  libgomp/config/gcn/icv-device.c
! 97fb7bc3e26ac7b779ca573d0b393833  libgomp/config/gcn/oacc-target.c
! 9754b40012de512c01def38b532eb5d1  libgomp/config/gcn/simple-bar.h
! 0b3ef7c79010eabc012a13f9f00b0a50  libgomp/config/gcn/target.c
! a093268f0aff101841cae70e1687df24  libgomp/config/gcn/task.c
! af315838686f7af6cdffd5ecc842f150  libgomp/config/gcn/team.c
! cf17e7c7438f7a965af7e87f2061f9b6  libgomp/config/gcn/time.c
! d0d13a906e96f70ffaf885be3e18fed5  libgomp/config/hpux/plugin-suffix.h
! 56f6eae10dd75e1e2a14368829c8817d  libgomp/config/linux/affinity.c
! 789cef084fcc44283227869bce3f3e54  libgomp/config/linux/alpha/futex.h
! 80dabbe0ad3609a72e78ef109a79184d  libgomp/config/linux/bar.c
! b85366ae34b87988c342cff0a52d1506  libgomp/config/linux/bar.h
! 8b6308d8ad62d496a9b4fec88c7d690e  libgomp/config/linux/doacross.h
! 675f17dcb21c01bd98a76712132e1523  libgomp/config/linux/futex.h
! eff4f12666ca50f8fc38db31bc3f8329  libgomp/config/linux/ia64/futex.h
! 06ae546d273bb8e157443e888876519a  libgomp/config/linux/lock.c
! 39dd96d7d746e748aede075f4d5913e4  libgomp/config/linux/mips/futex.h
! 213b604b256dbeb88361aca90d91a81b  libgomp/config/linux/mutex.c
! d24e6e1b670a272ad9827e4e2137464d  libgomp/config/linux/mutex.h
  7973e447504d3a02e64bae101b909b1a  libgomp/config/linux/omp-lock.h
! 94351d37a42a509c91c28df6e885e109  libgomp/config/linux/powerpc/futex.h
! 3bdee04f8603cff8515a579a7e56f410  libgomp/config/linux/proc.c
! 276793de1600c29a294e24b1af57fe8b  libgomp/config/linux/proc.h
! 4214f75d480b8a3c176c1a4c16bc02ff  libgomp/config/linux/ptrlock.c
! 8b0b288099e6a8eb5aae6dde207630a6  libgomp/config/linux/ptrlock.h
! 4736fb38916fd7ee77ec2f93187c2577  libgomp/config/linux/s390/futex.h
! c674d8fd0e81b3e10baa105e4a0eae68  libgomp/config/linux/sem.c
! fa3f8f1c6d5387f1e45d407f5b8d982e  libgomp/config/linux/sem.h
! fdcd449dcbfb0a8ee9ea935b67db9bba  libgomp/config/linux/sparc/futex.h
! 3e9f89eebb191b83ecd80f4b1f392846  libgomp/config/linux/tile/futex.h
! e10251baa98d3fd948fa9163b021b425  libgomp/config/linux/wait.h
! 91e132743b604c25db4b432948fd71de  libgomp/config/linux/x86/futex.h
! c99f6685d1156ef616af2af894a33bb7  libgomp/config/mingw32/affinity-fmt.c
! 0bb2c931a1fe49822628041c58913156  libgomp/config/mingw32/proc.c
! 69642c5d72ce78161bdeca95ff3f3e99  libgomp/config/mingw32/time.c
! 7c55c8d2149b70367eb8c4ec9b79d239  libgomp/config/nvptx/affinity-fmt.c
  6bb7711f9ae2bc93662a9c5ece06f7ee  libgomp/config/nvptx/atomic.c
! f7f45ad0a9dc463668c10274a0f4c594  libgomp/config/nvptx/bar.c
! 0e9b61aebba1e58777abe2bf70778706  libgomp/config/nvptx/bar.h
! 54e8f598739c528d22f193ab62258db0  libgomp/config/nvptx/doacross.h
! 6e59f8a20192492f7b1595247c2d12ba  libgomp/config/nvptx/error.c
! 2f0525fd51e62727629b10f4c4c24e96  libgomp/config/nvptx/icv-device.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/nvptx/oacc-parallel.c
! d87bcf74841551ea33d5cffcc62db0cd  libgomp/config/nvptx/simple-bar.h
! 684451c729128ce049f848a4887c7d6b  libgomp/config/nvptx/target.c
! a256af837eb07e275556ca133282fa6a  libgomp/config/nvptx/task.c
! 08514204486ba062f5ace0a02b876889  libgomp/config/nvptx/team.c
! 0c9a9b2f916798969643d9950c09d444  libgomp/config/nvptx/teams.c
! 4749e8d9231ff778a7cd85f0bfa6f12e  libgomp/config/nvptx/time.c
! 165fbbe344a2201f2a8e82c93799bea7  libgomp/config/posix/bar.c
! 9859176df2961e171f9ee1a4f8d71369  libgomp/config/posix/bar.h
! 45b6e0d88e3d297b47dea43cacf6a715  libgomp/config/posix/doacross.h
! dd4b649edd0a24171fba8bdd42ff9944  libgomp/config/posix/lock.c
  efc434763cbe71b67359f1858f6c9480  libgomp/config/posix/mutex.c
! 9a7986ecdef410bc30c4a814f1f49a7e  libgomp/config/posix/mutex.h
  e84e55894856b53abe34b30f6148b070  libgomp/config/posix/omp-lock.h
! 51ac5218ec13ae06244faec594f7a941  libgomp/config/posix/plugin-suffix.h
! a075a84248997a7f3925cbf46873f176  libgomp/config/posix/pool.h
! 6223fb1acc8a5f6da489ac0b12976701  libgomp/config/posix/proc.c
  efc434763cbe71b67359f1858f6c9480  libgomp/config/posix/ptrlock.c
! a3e8b4412687e1382e329ab9e00c9e92  libgomp/config/posix/ptrlock.h
! a9c4214838c06c650f5a474c90b68423  libgomp/config/posix/sem.c
! 1fa7b4b284c7bd4a9dc413cae0e37974  libgomp/config/posix/sem.h
! 551893eada2e8ba4db7fbb4ea7604938  libgomp/config/posix/simple-bar.h
! cc13c8014fa0ee53a326cb3583984368  libgomp/config/posix/thread-stacksize.h
! 2efbd097aed6baa5b2acb5a2d0abf4fe  libgomp/config/posix/time.c
! f66a804b7a06f3422b299e392ff2cd6a  libgomp/config/rtems/affinity-fmt.c
! b1a1be3d7d546e03f2697050f0105f10  libgomp/config/rtems/bar.c
! a42093fb96dd7de613a5350ca11e99e7  libgomp/config/rtems/bar.h
  efc434763cbe71b67359f1858f6c9480  libgomp/config/rtems/mutex.c
! fc96df2ec557da944078791fe7c1f12f  libgomp/config/rtems/mutex.h
! 52d0c9ce481b81eb9ccc68162a6784e5  libgomp/config/rtems/pool.h
! 2e980d17defcb97fde88cf5f6c8585e5  libgomp/config/rtems/proc.c
  efc434763cbe71b67359f1858f6c9480  libgomp/config/rtems/sem.c
! 4d3a8b6f34059afa087aa981d61460dd  libgomp/config/rtems/sem.h
  af41d1d04a4112345554ca8b8a072ed9  libgomp/config/t-aix
! a770c6d5cd51dc1a0736d60fd0f0fc57  libgomp/configure
! ab9ea228856e2fe51dd944933ffc6483  libgomp/configure.ac
! 5b8ec995a772307aacae5779580b5817  libgomp/configure.tgt
! 705ffb59b51affa5d25feededd4bdd63  libgomp/critical.c
! 97efd7efc8cc031e7446d5dc7088a851  libgomp/env.c
! 0c0c8a0552a7ee0cf622007aada7d9a3  libgomp/error.c
! cac1df4750249c9f5daeb544c5ed2aa3  libgomp/fortran.c
! 13f0b1f26e2686a5714fa8eed067ad8f  libgomp/hashtab.h
! 4a4b43464c190c16a36bf24c71ba60e3  libgomp/icv-device.c
! f54116feb9c269130e632ccb02620a48  libgomp/icv.c
! c8843a63ba608b0b5d646254dedaca38  libgomp/iter.c
! de1c2d0c718443d5a90b60ea327939da  libgomp/iter_ull.c
! a9602ab9ee9f89734074f35456117573  libgomp/libgomp-plugin.c
! 465ccd19218bce34f9416c8e5367ac12  libgomp/libgomp-plugin.h
! aaa17bf11b59931da2d709d5a2e528a2  libgomp/libgomp.h
! 68a20844b29390c9e09e2416ac66b5b9  libgomp/libgomp.info
! 67964eb0101a54721e14945594dc2c5a  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! 1207eb54aa3a040f8b931b86d5d21b1d  libgomp/libgomp.texi
! b474ebd58d1c5d3bcb39f0c5f2efec6a  libgomp/libgomp_f.h.in
! 09ffcd91d661a0b21fe7c335ce09c201  libgomp/libgomp_g.h
! 8233367e108fccb64e978ccda1dd0951  libgomp/lock.c
! 1243457101a80ac8375af609fd070ab6  libgomp/loop.c
! fc116d44f2230fc2c772c94d57a12c0b  libgomp/loop_ull.c
! c22fea336d6cc9feeaa92b98483cc8ec  libgomp/oacc-async.c
! 149843d87f3c9fc61b6fea2c213c841d  libgomp/oacc-cuda.c
! 70c966c661d7b2d5e4a2f7549c63967a  libgomp/oacc-host.c
! 322fdb3f78c5fc466c07db0b3e3259c2  libgomp/oacc-init.c
! 6288055e0d95f7c55434ea18f21c2303  libgomp/oacc-int.h
! 775b8218b1e40da5ccd7fca9e96d230c  libgomp/oacc-mem.c
! 2b677b86d83b9f8b3b2270027227d698  libgomp/oacc-parallel.c
! fd62934cb4258d44e8ddceba017d23aa  libgomp/oacc-plugin.c
! efa5f1b51c15eff06510345cbf3bafed  libgomp/oacc-plugin.h
! c2be6336690df753da151f6d64755628  libgomp/oacc-profiling.c
  6a2627e5d8a4e542cab7eddc96b53f37  libgomp/oacc-target.c
! a8516a4a3a84a5d6c8a2c327ff2c305a  libgomp/omp.h.in
! f4e3a5c05af500b391491a273d4eb5ae  libgomp/omp_lib.f90.in
! 8b5319b3c6cd9867a145173635b706f5  libgomp/omp_lib.h.in
! ccc1d2e4e602d77a4aaca6d3d42153d4  libgomp/openacc.f90
! 9c5c306a756d7270788a26be0331337a  libgomp/openacc.h
! 423e5d861550f0c628e17c04bc57baa1  libgomp/openacc_lib.h
! 9d64bf8d95e3d0c6ec8063ec688dd14e  libgomp/ordered.c
! 3dce7225ba2f160067353cf99843c439  libgomp/parallel.c
! b886fd207a7042a06000c9f5268f98c1  libgomp/plugin/Makefrag.am
! 3bf44442c2dcba6af5ab3a2bad037296  libgomp/plugin/configfrag.ac
  7a3944d0ff7bc0b4cdbcaebc1228469b  libgomp/plugin/cuda-lib.def
! 0efac2d6a68e4eb8959a016090bf1e5b  libgomp/plugin/cuda/cuda.h
! 967970de7d98de4920af20e2399feda6  libgomp/plugin/plugin-gcn.c
! 90892e08e6d646b902d50ad2529a2e74  libgomp/plugin/plugin-nvptx.c
! bb638ec2a05e8ec15bc382976eb5640b  libgomp/priority_queue.c
! e372584ef8304cf52e4e09a9fc05adf3  libgomp/priority_queue.h
! 8aa923ea97fcdde12994c8485d0f6d2e  libgomp/sections.c
! 14f5dd8fb06b6d64c2b883bae8f012a8  libgomp/secure_getenv.h
! 954d195e8d56380488976617fde73813  libgomp/single.c
! e6cf92cd98976f129367e400696fabbb  libgomp/splay-tree.c
! 48ca4acfe2742359f3e2a732ec5d92d4  libgomp/splay-tree.h
! 3671c9767a3fc1f7e8f80f6478c46c2e  libgomp/target.c
! 7d9ef00b8b9879aafb854635ed8dcd09  libgomp/task.c
! ff8d8695435d2fd418bcc6437db02562  libgomp/taskloop.c
! 1d1cca28977e6aef439521c8d10eed90  libgomp/team.c
! 8d61131215921c894f5e0449c79c0a18  libgomp/teams.c
  e07f04fffd2f6276df2fbeca36cc3d91  libgomp/testsuite/Makefile.am
  648be0a5f804ab0023a14d22cca4a3de  libgomp/testsuite/Makefile.in
! e7fa5ebeef61fd5a5de78de61a1f82b3  libgomp/testsuite/config/default.exp
  6c859d1c520b245e51a29693632545d6  libgomp/testsuite/lib/libgomp-dg.exp
! 9784a5bd561ffb2eed2694aeaf996bcf  libgomp/testsuite/lib/libgomp.exp
  97fdc33cc25788d4b9dc1db6aefed760  libgomp/testsuite/libgomp-site-extra.exp.in
  ed323f968c0e2d197ee36bf3b1f678e3  libgomp/testsuite/libgomp-test-support.exp.in
  75cc672a1bf25974c5f4c5e3bc1a74b1  libgomp/testsuite/libgomp.c++/affinity-1.C
--- 100331,100534 ----
  c9a81542bf3ef7560958b6cbea5982c1  libgo/runtime/go-varargs.c
  a069ce221f9436d070ef24e5b056f5a7  libgo/runtime/panic.c
  ee09b4a160083b328fd1b84c8e6bef3e  libgo/runtime/print.c
! d39dbcde4108cab98e6b46d3f76727a7  libgo/runtime/proc.c
  88236bd9baaae0e22c2fe3c097d9cfbf  libgo/runtime/rtems-task-variable-add.c
  da8feb87689c14c2ade32638da912eac  libgo/runtime/runtime.h
! 5b900bdaaf4bbdf1139d11f6f0220757  libgo/runtime/runtime_c.c
! b0bef0d844dadebbe84ad9cf32c002bf  libgo/runtime/stack.c
  f1f0917f45d626d15a5f129fef3d81e2  libgo/runtime/yield.c
  3ed2085cb41333632578bcadc9dc38b7  libgo/sysinfo.c
  64195708a46fb2d5225149f15a8e3991  libgo/testsuite/Makefile.am
  a88e7b262182c586e88c9684af1ccc29  libgo/testsuite/Makefile.in
  180c96a619276205ec9fc8e8217b67bd  libgo/testsuite/config/default.exp
! 52be5053fe7834d6025739fc840010d8  libgo/testsuite/gotest
  e3e86019491a40bd4f45424d7ce11037  libgo/testsuite/lib/libgo.exp
  c5574d106d35be5d94e80301b0855ada  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 3707440479b85e569c50223bea416d37  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
! 4c820cf0c4f1fd83f68890608487f44e  libgomp/Makefile.am
! 147201569e2c2619fa2ecf4ddffd5906  libgomp/Makefile.in
! 4ba8f039959a7b81003ebc6326e8448f  libgomp/acc_prof.h
! 04093a1844822b7ca2bce3693d4c9b9c  libgomp/acinclude.m4
  30a64ccfecfa60e8b5098e9fe26ea707  libgomp/aclocal.m4
! 1d74fdf37d8ed0709a24eb6ab2cd4f8c  libgomp/affinity-fmt.c
! 7f4c6f72fa48dc139295b26e56af43da  libgomp/affinity.c
! 92d2e6686a1a0885ae2af1a1ad9d09ff  libgomp/alloc.c
! c67149458bf77cbdc54b363abe4d5fb0  libgomp/allocator.c
! 5e2212533b6989e85bcdf28060a63bf5  libgomp/atomic.c
! f0ad944f326f53f455ee4053c2ed45e6  libgomp/barrier.c
! 55ef83d31359a5fa6ce033804a69ee6a  libgomp/config.h.in
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/libgomp-plugin.c
! 305b1e877e9d4ab37a3bc29b30c8823c  libgomp/config/accel/lock.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/mutex.c
! b5cee017ed1ad849ba8b71c0d98761ed  libgomp/config/accel/mutex.h
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-async.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-cuda.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-host.c
! 02ff4c53df8ffe815f7adfe7be7ebb95  libgomp/config/accel/oacc-init.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-mem.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/oacc-plugin.c
  7973e447504d3a02e64bae101b909b1a  libgomp/config/accel/omp-lock.h
! 8192c22a8588a19e7c74750b7c3c667d  libgomp/config/accel/openacc.f90
! 15091d926ad2aeab9e1639b293e82e91  libgomp/config/accel/pool.h
! 6acbabaf8ce56985a492cbe2290ecc96  libgomp/config/accel/proc.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/ptrlock.c
! cfe54da42394475bdf7b664e4ae8df4a  libgomp/config/accel/ptrlock.h
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/sem.c
! 028235262ef0125a5d8172e342659e34  libgomp/config/accel/sem.h
! 3a5cba896b072e24e79c7eedfe1dc0c6  libgomp/config/accel/thread-stacksize.h
! 61566bc1af3ecb9e909cebdbda0d273a  libgomp/config/bsd/proc.c
! 26bb34ded740828c355d57aa359fc9c6  libgomp/config/darwin/plugin-suffix.h
! 066697225d1208cd7f9ea49564cfdf23  libgomp/config/darwin/thread-stacksize.h
! efceb66a6ca5a1a388c8f38d90e820a3  libgomp/config/gcn/affinity-fmt.c
! 8ff0c760b79af9d67145d367921515ab  libgomp/config/gcn/bar.c
! c35d5d93d17b6ff4185e398ab915b485  libgomp/config/gcn/bar.h
! 98deaf2ec1451f2aa46865cc35a4d79c  libgomp/config/gcn/doacross.h
! bb9ad3151c8f76d0005ec57bac3f4fdb  libgomp/config/gcn/icv-device.c
! 04014261890ad07218f5f5e1ed851155  libgomp/config/gcn/oacc-target.c
! 80e751ab3367c54fdc183693bc1d24e5  libgomp/config/gcn/simple-bar.h
! 247a89760a505c002ae15ece935d7646  libgomp/config/gcn/target.c
! c2400c48daf103c75e5e3fa4657f7985  libgomp/config/gcn/task.c
! 7b8b5972a035561d77d44a628be6dd96  libgomp/config/gcn/team.c
! f0c234b7f8b6e02d5715ee96f2d9183c  libgomp/config/gcn/teams.c
! 5c41d811d91579862cad89b97e979963  libgomp/config/gcn/time.c
! 0475090d191426d305ee0177d6d290cb  libgomp/config/hpux/plugin-suffix.h
! ffb77e95900df0e07660188d230974b3  libgomp/config/linux/affinity.c
! 55cc081b51a3b53bc797d4c7b772d7a0  libgomp/config/linux/alpha/futex.h
! da3535904f1f119cd4a537f818fc9042  libgomp/config/linux/bar.c
! 560e1782553002da3de623cda0a55e28  libgomp/config/linux/bar.h
! 2ef4bf060eebf71aca878e2e8cbe5505  libgomp/config/linux/doacross.h
! 00ad7bdf1a88c83d794811c052e7e482  libgomp/config/linux/futex.h
! 0ec9affac1c10ae580f67d399a3ae622  libgomp/config/linux/ia64/futex.h
! f429bdcce8355261ebb233f15b3e4d9f  libgomp/config/linux/lock.c
! 11ed3ad24743a30b39b79d457eb95dea  libgomp/config/linux/mips/futex.h
! 07e803a3ddd761a02e5a370071c8ea5e  libgomp/config/linux/mutex.c
! 7da48b66f14b1f69b47b25c10c09d2d2  libgomp/config/linux/mutex.h
  7973e447504d3a02e64bae101b909b1a  libgomp/config/linux/omp-lock.h
! 0e14482cae964c6a10132a09a8456228  libgomp/config/linux/powerpc/futex.h
! 84cddb5832284b1d5f0131a3ec8cf069  libgomp/config/linux/proc.c
! 9fe2bf78c1ce2943bd5453d0d80c967e  libgomp/config/linux/proc.h
! 73874e89feae443ab30e4b46775242c1  libgomp/config/linux/ptrlock.c
! 1480d012d2cfe7c58cb2df8100f14abf  libgomp/config/linux/ptrlock.h
! 3346583e16c81764e8440f0d7cd143f5  libgomp/config/linux/s390/futex.h
! b0c35369c274b56e0de49d46f6de50b2  libgomp/config/linux/sem.c
! b86534ea32e47d30acc41532c8a7381f  libgomp/config/linux/sem.h
! ed7ce2cf1cd8afbc71cfaa38c6911a2b  libgomp/config/linux/sparc/futex.h
! 58368f3df7e78dcff62a20912fe74ed4  libgomp/config/linux/tile/futex.h
! c53929530c2418fde2ea55d8b4993922  libgomp/config/linux/wait.h
! 7f55c18168174eac934e0d5d3d81e86d  libgomp/config/linux/x86/futex.h
! a506f04b3a588e451675135fc5ff863c  libgomp/config/mingw32/affinity-fmt.c
! 94366526333c4409647d561ca36f623d  libgomp/config/mingw32/proc.c
! b66586f2b086357279b5c3486ea2913b  libgomp/config/mingw32/time.c
! a3f5cd9b7862d62a3d22513395fec620  libgomp/config/nvptx/affinity-fmt.c
  6bb7711f9ae2bc93662a9c5ece06f7ee  libgomp/config/nvptx/atomic.c
! c3a1e264a4c05383328f383eb0ed0b4b  libgomp/config/nvptx/bar.c
! 4005bf32cf67e63f3d3d9c3510ced9a2  libgomp/config/nvptx/bar.h
! f6c027a61026d99fdeecea242476f94c  libgomp/config/nvptx/doacross.h
! 21e60aba9b4e4bae327616256e21898e  libgomp/config/nvptx/error.c
! 8bc1329e3caa06daddccd99fb3ea9ba8  libgomp/config/nvptx/icv-device.c
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/nvptx/oacc-parallel.c
! da6a0aaa2fd89eb48fc1c3360e24a0c3  libgomp/config/nvptx/simple-bar.h
! 9539f9ee3e82cdd3b73c1adffcffd6a6  libgomp/config/nvptx/target.c
! f1e3a4209781d5cf893b4d3a36a14991  libgomp/config/nvptx/task.c
! f340b0703c5b8d4e494d741d6f62c85d  libgomp/config/nvptx/team.c
! 55e5522fc782ac1c7b258c630bd67df8  libgomp/config/nvptx/teams.c
! 0ab5690dea9b024b60cc2ffbdddbda22  libgomp/config/nvptx/time.c
! bde0142646ef0ec7fbfa8c45dede3cd6  libgomp/config/posix/bar.c
! e873572edfcb0753ede9cc651bc06fe5  libgomp/config/posix/bar.h
! fa056523f4757e26eddf68f96dda402d  libgomp/config/posix/doacross.h
! 6de4023956fee61c78681912895c784a  libgomp/config/posix/lock.c
  efc434763cbe71b67359f1858f6c9480  libgomp/config/posix/mutex.c
! b953ecf8e6a78ace16e4a4f4590aba3c  libgomp/config/posix/mutex.h
  e84e55894856b53abe34b30f6148b070  libgomp/config/posix/omp-lock.h
! 1557a6c219673308566970890e1307f4  libgomp/config/posix/plugin-suffix.h
! 0b896a4c556949d032477ed8bf56e8ca  libgomp/config/posix/pool.h
! 8f4f93af0ef35b89930f7a5b8d632007  libgomp/config/posix/proc.c
  efc434763cbe71b67359f1858f6c9480  libgomp/config/posix/ptrlock.c
! da83b762f0baba688459dd365ea394e6  libgomp/config/posix/ptrlock.h
! 6bda8b0a65ff4e544e2a35acfd0ed039  libgomp/config/posix/sem.c
! 2b3fd99ccfd6ec90002237cc79a52ef6  libgomp/config/posix/sem.h
! b7b96675b73c70d74e50df5fb6d88a83  libgomp/config/posix/simple-bar.h
! b8e14b6ff61b407bcd71b039f6075a7f  libgomp/config/posix/thread-stacksize.h
! e327453b67dede5b7a04faf5516ba01a  libgomp/config/posix/time.c
! b669e10d8604cff82046689762af022e  libgomp/config/rtems/affinity-fmt.c
! b7768538323ef2846d1ee822c4557c9e  libgomp/config/rtems/bar.c
! b62c2e44568385f6169df86f72d96535  libgomp/config/rtems/bar.h
  efc434763cbe71b67359f1858f6c9480  libgomp/config/rtems/mutex.c
! b164e6b3b504abe76c66769445fb8f59  libgomp/config/rtems/mutex.h
! 616c5a679bb1feff0a3c2ecaad28d683  libgomp/config/rtems/pool.h
! 4b5249411a9992f52d98e14be799788a  libgomp/config/rtems/proc.c
  efc434763cbe71b67359f1858f6c9480  libgomp/config/rtems/sem.c
! 3803e246a7effac5f68defbc6467d18c  libgomp/config/rtems/sem.h
  af41d1d04a4112345554ca8b8a072ed9  libgomp/config/t-aix
! 69268a5fe7cf02cd66d6623a6f672c36  libgomp/configure
! c148ac8aacb9f40379a65826a6941790  libgomp/configure.ac
! df326a12f33954a095cf171bc51c7067  libgomp/configure.tgt
! 961b136816f6a14d942d57a87dc80550  libgomp/critical.c
! a2846404f7e3b4d082df7d3bcf507ce8  libgomp/env.c
! a7bdb20af01f8fee6af4277cb0b69ed5  libgomp/error.c
! b4b3ff9a2527e499cebeb7b48c150ff6  libgomp/fortran.c
! 707d9d8bd1d758d003ccc65dd723f07d  libgomp/hashtab.h
! 38618483c21d26945b3abee84407b743  libgomp/icv-device.c
! 462d628d485745556ed5ef9d4ded68e2  libgomp/icv.c
! 9e2f358eb25070d50ce05f500e489583  libgomp/iter.c
! 3c6bb4f3cc4a2c7ba31b20461a395972  libgomp/iter_ull.c
! 8f1e6e4f0cf98dcffb1c147b18838798  libgomp/libgomp-plugin.c
! 335a7094586075334b6a9d0faa6ebe7d  libgomp/libgomp-plugin.h
! 2962f7fc6d30462dbcdee1930d6033ab  libgomp/libgomp.h
! bc87fea4a2bd0af95c4fbccfee887558  libgomp/libgomp.info
! c767351b8d4fa4dfa3fbdb2b50c8ab3e  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! 708fb10cc2fd4acdf39ab66fa4a7335d  libgomp/libgomp.texi
! 71e3b6cdcc4c79987e6ba8b7f946c99b  libgomp/libgomp_f.h.in
! 6a7706098d36920cb8ddba2cbd5f7593  libgomp/libgomp_g.h
! e6ef8c06acd3729a00656fd7f60fc8dd  libgomp/lock.c
! 498e428ed2d3f55d7e453384a27920b7  libgomp/loop.c
! 825a1e0c2481ef7e7f7615c8110f7617  libgomp/loop_ull.c
! e022a22a82b213700145bc066cb4b4f3  libgomp/oacc-async.c
! 84ed3b7f35793eefba6108be7b535e8a  libgomp/oacc-cuda.c
! 8ad22e5cecedbefc092fbbdba083b2fb  libgomp/oacc-host.c
! a032db1c061d47ebd6eb5036272b8f24  libgomp/oacc-init.c
! 269be54d64f061ccb9475597aca4bc94  libgomp/oacc-int.h
! dd4e61dca435161356b98aed48bd839d  libgomp/oacc-mem.c
! 2bc68c0b12aea4aa3d92bd265112420e  libgomp/oacc-parallel.c
! 77c456e4d318d5ab0c7a88151c99e2a9  libgomp/oacc-plugin.c
! b171cf87517ff27201369f7057c5b982  libgomp/oacc-plugin.h
! 71cea76c74deb5c90c7cf31a3f6bb668  libgomp/oacc-profiling.c
  6a2627e5d8a4e542cab7eddc96b53f37  libgomp/oacc-target.c
! 8e36c1f06584a8dc812474acd143bf7a  libgomp/omp.h.in
! 4f7af57bfc6daa9e17387b7a4b369119  libgomp/omp_lib.f90.in
! d0c05ef8cce07f52561cec2e9225f7a4  libgomp/omp_lib.h.in
! e0cb6a17790629f29f3c57a580a4114a  libgomp/openacc.f90
! 876caf5a166553d4ec3bbbf3fd1a754d  libgomp/openacc.h
! d4a8ec1af001375aafe7bfde975cab8f  libgomp/openacc_lib.h
! 40d07f087125faf8ae89afbffd230b03  libgomp/ordered.c
! 233aa37be9fef9647bf83b06a3f564cd  libgomp/parallel.c
! 6887a1d92e7fcecc3a468f138f7a8b56  libgomp/plugin/Makefrag.am
! 5aca13c8d717b3c03cce30586f583558  libgomp/plugin/configfrag.ac
  7a3944d0ff7bc0b4cdbcaebc1228469b  libgomp/plugin/cuda-lib.def
! 35df8712a7f8cd2b5c6664f3a05b95c6  libgomp/plugin/plugin-gcn.c
! a74a5b617efd4f6e20f42992ebd898ea  libgomp/plugin/plugin-nvptx.c
! 34635a1638eba4f8b018600901257772  libgomp/priority_queue.c
! 58dc808c135c763ab8665bad880aa7a8  libgomp/priority_queue.h
! fc9cba87f56310fc46309faa5b4859ec  libgomp/scope.c
! 32b0d6b28a090467b2d009e8deb2ef79  libgomp/sections.c
! a8331c6aed90bc0e9160490a64dce03c  libgomp/secure_getenv.h
! f8dad6a2b2c22a35d0e0a04725a1a5cd  libgomp/single.c
! 0a3076c6a5743883d28bfbd711c7c33a  libgomp/splay-tree.c
! 8801980c8775527a11f77301862b0d2f  libgomp/splay-tree.h
! ad0208fd92cea053d709197a88006b6d  libgomp/target.c
! 98929b0aa6ee470d1d94f95d20fe52de  libgomp/task.c
! 5954576d4231b1ee2a73dbf601bf742e  libgomp/taskloop.c
! da4ddcafdbe90d447ac7ace610407732  libgomp/team.c
! efac562db57f45ea4ec34a672a09bc00  libgomp/teams.c
  e07f04fffd2f6276df2fbeca36cc3d91  libgomp/testsuite/Makefile.am
  648be0a5f804ab0023a14d22cca4a3de  libgomp/testsuite/Makefile.in
! 01d3ae9b53e2b97f3dce55fcaed1a924  libgomp/testsuite/config/default.exp
  6c859d1c520b245e51a29693632545d6  libgomp/testsuite/lib/libgomp-dg.exp
! 4a9a22558b7ef794bed1f80d040e511f  libgomp/testsuite/lib/libgomp.exp
  97fdc33cc25788d4b9dc1db6aefed760  libgomp/testsuite/libgomp-site-extra.exp.in
  ed323f968c0e2d197ee36bf3b1f678e3  libgomp/testsuite/libgomp-test-support.exp.in
  75cc672a1bf25974c5f4c5e3bc1a74b1  libgomp/testsuite/libgomp.c++/affinity-1.C
*************** ed323f968c0e2d197ee36bf3b1f678e3  libgom
*** 93965,93970 ****
--- 100540,100547 ----
  a56e4a1dad7c21fecfbf5dd26cb1f86a  libgomp/testsuite/libgomp.c++/atomic-13.C
  f5aa3b6a543d3042289d53904701574b  libgomp/testsuite/libgomp.c++/atomic-14.C
  156c6a231b71803eea67391fb8826eab  libgomp/testsuite/libgomp.c++/atomic-15.C
+ 8c1e1f7a6d13331292d7c81fc62e7f77  libgomp/testsuite/libgomp.c++/atomic-16.C
+ 212e1577f5f4318294d08012e2c46eb4  libgomp/testsuite/libgomp.c++/atomic-17.C
  11dca764f708d500baba4ceaa6de9b54  libgomp/testsuite/libgomp.c++/atomic-2.C
  6cce79d9ec704407d872ee19b27e9946  libgomp/testsuite/libgomp.c++/atomic-3.C
  f944acede3f9beeaf281ef9282c0ff44  libgomp/testsuite/libgomp.c++/atomic-4.C
*************** e4c259ceb3f0850ee4a9c2d8db93fa19  libgom
*** 94000,94005 ****
--- 100577,100583 ----
  cf8630c02b905d98e08a439066bb9815  libgomp/testsuite/libgomp.c++/ctor-8.C
  0bd7fe39119bfc0574561c1e381edc5b  libgomp/testsuite/libgomp.c++/ctor-9.C
  69326cfd40097e393a1bdb2e95e9052d  libgomp/testsuite/libgomp.c++/declare_target-1.C
+ 9680d8fd6dafdcd73ddfb70fce9898b5  libgomp/testsuite/libgomp.c++/default-1.C
  01456b503209d46ee61ee8a1877c839c  libgomp/testsuite/libgomp.c++/depend-1.C
  5ddffb7f236c9b7b81760cac311649f6  libgomp/testsuite/libgomp.c++/depend-iterator-1.C
  521ba1bcee599d1efb924a8c86ed94d1  libgomp/testsuite/libgomp.c++/depobj-1.C
*************** dc7de2a56e857e340edadd8faabda685  libgom
*** 94081,94087 ****
  9262df59cf611b7f8a158b637ef46a9e  libgomp/testsuite/libgomp.c++/pr86542.C
  2f4b5b9cb40dd4bff2c3c0ebada29767  libgomp/testsuite/libgomp.c++/pr88988.C
  7cc253bb1b2c2c65f9d69743d9235b32  libgomp/testsuite/libgomp.c++/pr93931.C
! 8a7b94143ab9452c0f9db7ac15b3344f  libgomp/testsuite/libgomp.c++/pr96390.C
  a594cebdf052900dd0c8792068e14d85  libgomp/testsuite/libgomp.c++/reduction-1.C
  1473f55e3f6f9827b6dd281025b88b85  libgomp/testsuite/libgomp.c++/reduction-10.C
  bd119573b86fb5577edaf97dd86d2a6c  libgomp/testsuite/libgomp.c++/reduction-11.C
--- 100659,100665 ----
  9262df59cf611b7f8a158b637ef46a9e  libgomp/testsuite/libgomp.c++/pr86542.C
  2f4b5b9cb40dd4bff2c3c0ebada29767  libgomp/testsuite/libgomp.c++/pr88988.C
  7cc253bb1b2c2c65f9d69743d9235b32  libgomp/testsuite/libgomp.c++/pr93931.C
! 21fb1c18428bd927c201491b036a6884  libgomp/testsuite/libgomp.c++/pr96390.C
  a594cebdf052900dd0c8792068e14d85  libgomp/testsuite/libgomp.c++/reduction-1.C
  1473f55e3f6f9827b6dd281025b88b85  libgomp/testsuite/libgomp.c++/reduction-10.C
  bd119573b86fb5577edaf97dd86d2a6c  libgomp/testsuite/libgomp.c++/reduction-11.C
*************** ff04658f034a805f42f6227468e350d8  libgom
*** 94128,94151 ****
  6c9d8951c10a36292097716f431c385a  libgomp/testsuite/libgomp.c++/single-2.C
  7d0f24f8edab30e9e5aa2d3f5133e9f4  libgomp/testsuite/libgomp.c++/single-3.C
  866b1595d3c521f9e048f3d196a4dea7  libgomp/testsuite/libgomp.c++/target-10.C
! f9ebba93b0029f47097de1c55d376f98  libgomp/testsuite/libgomp.c++/target-11.C
! c319ce488388e1c7119df0e01aafc487  libgomp/testsuite/libgomp.c++/target-12.C
  a6b49af37227f8b4a2b400968972f26d  libgomp/testsuite/libgomp.c++/target-13.C
  9e98d2f79fc4ee9addb65363ad3dac4d  libgomp/testsuite/libgomp.c++/target-14.C
! 16f9f00caebb80b32ce2d954579ffc42  libgomp/testsuite/libgomp.c++/target-15.C
! 84ef80d5c2db359900fff1507b0cc857  libgomp/testsuite/libgomp.c++/target-16.C
! 57a8e43274e9670b9d32da2a2fa35fcd  libgomp/testsuite/libgomp.c++/target-17.C
  6e3babc53e79af678886045a6d419bc3  libgomp/testsuite/libgomp.c++/target-18.C
  f7b3ed0affdfcdc8be33426e55f56c65  libgomp/testsuite/libgomp.c++/target-19.C
  a7edc8ba5a137d69a617a4d3675b5b01  libgomp/testsuite/libgomp.c++/target-2-aux.cc
  adba67f432b50b18b63fd983c7c0402a  libgomp/testsuite/libgomp.c++/target-2.C
  37e4e40177aed08ff1f53d7b901a11ce  libgomp/testsuite/libgomp.c++/target-20.C
! 0348df8a93fdb7c3f0a0f7923eb9555c  libgomp/testsuite/libgomp.c++/target-21.C
  5997530d2ff7d321f6ba42c090c31624  libgomp/testsuite/libgomp.c++/target-22.C
  71c15b60610a2e837b909b193b5386d2  libgomp/testsuite/libgomp.c++/target-6.C
  131b2ab5b78c2725e33c4249f59e5799  libgomp/testsuite/libgomp.c++/target-7.C
  1a7862ad9a2af6943f9928a670bcaf16  libgomp/testsuite/libgomp.c++/target-8.C
  e8abd1a92868914a2a5307268ef4b3d8  libgomp/testsuite/libgomp.c++/target-9.C
  4755f8276f35f740d59135af4e5242f0  libgomp/testsuite/libgomp.c++/task-1.C
  5532f36e28daf97021228ebf72885697  libgomp/testsuite/libgomp.c++/task-2.C
  27531bc2a807e1107292fe33e894f8a0  libgomp/testsuite/libgomp.c++/task-3.C
--- 100706,100747 ----
  6c9d8951c10a36292097716f431c385a  libgomp/testsuite/libgomp.c++/single-2.C
  7d0f24f8edab30e9e5aa2d3f5133e9f4  libgomp/testsuite/libgomp.c++/single-3.C
  866b1595d3c521f9e048f3d196a4dea7  libgomp/testsuite/libgomp.c++/target-10.C
! 584a99de04a66868ae3499eedc3e2195  libgomp/testsuite/libgomp.c++/target-11.C
! 27a976c5e735ce9e087e36caed72abea  libgomp/testsuite/libgomp.c++/target-12.C
  a6b49af37227f8b4a2b400968972f26d  libgomp/testsuite/libgomp.c++/target-13.C
  9e98d2f79fc4ee9addb65363ad3dac4d  libgomp/testsuite/libgomp.c++/target-14.C
! 2c4c8267dca8995861a505bab1fbea46  libgomp/testsuite/libgomp.c++/target-15.C
! a847e64529061157489cc5cde35c7ab0  libgomp/testsuite/libgomp.c++/target-16.C
! a627394989a1f5de1aef46f3899651b0  libgomp/testsuite/libgomp.c++/target-17.C
  6e3babc53e79af678886045a6d419bc3  libgomp/testsuite/libgomp.c++/target-18.C
  f7b3ed0affdfcdc8be33426e55f56c65  libgomp/testsuite/libgomp.c++/target-19.C
  a7edc8ba5a137d69a617a4d3675b5b01  libgomp/testsuite/libgomp.c++/target-2-aux.cc
  adba67f432b50b18b63fd983c7c0402a  libgomp/testsuite/libgomp.c++/target-2.C
  37e4e40177aed08ff1f53d7b901a11ce  libgomp/testsuite/libgomp.c++/target-20.C
! ab3063f8b6682d372e65d063a35a406d  libgomp/testsuite/libgomp.c++/target-21.C
  5997530d2ff7d321f6ba42c090c31624  libgomp/testsuite/libgomp.c++/target-22.C
+ 2ccc87923b6fdd79d28d47e24e5dbfce  libgomp/testsuite/libgomp.c++/target-23.C
  71c15b60610a2e837b909b193b5386d2  libgomp/testsuite/libgomp.c++/target-6.C
  131b2ab5b78c2725e33c4249f59e5799  libgomp/testsuite/libgomp.c++/target-7.C
  1a7862ad9a2af6943f9928a670bcaf16  libgomp/testsuite/libgomp.c++/target-8.C
  e8abd1a92868914a2a5307268ef4b3d8  libgomp/testsuite/libgomp.c++/target-9.C
+ 4f1a5a6faf4e4b1e94a99f3df7f59dfd  libgomp/testsuite/libgomp.c++/target-has-device-addr-2.C
+ c2ea975d3e14f144e2ade23a720b62bd  libgomp/testsuite/libgomp.c++/target-has-device-addr-4.C
+ e259056e47b1dc505accadfe5b89d17a  libgomp/testsuite/libgomp.c++/target-has-device-addr-5.C
+ e2dfff93f6318ffc237067f281108b05  libgomp/testsuite/libgomp.c++/target-has-device-addr-6.C
+ 97a638ec3a95eff4958b3eac3dfbfbaf  libgomp/testsuite/libgomp.c++/target-in-reduction-1.C
+ 0277e9ef051fe788c9b9cd37617bc8aa  libgomp/testsuite/libgomp.c++/target-in-reduction-2.C
+ 94715868a8f003ba6af5b900cca94745  libgomp/testsuite/libgomp.c++/target-lambda-1.C
+ b22a767f11646ecb4998ef385c41337f  libgomp/testsuite/libgomp.c++/target-lambda-2.C
+ d01f6cd5771f7784c8ce461cf8b60255  libgomp/testsuite/libgomp.c++/target-same-name-2-a.C
+ b0372bd118a07b6674371887148186be  libgomp/testsuite/libgomp.c++/target-same-name-2-b.C
+ e20a8ae264dd60aac921ec743e8b6ef6  libgomp/testsuite/libgomp.c++/target-same-name-2.C
+ dd3ce96eb6e1a02d995c05804baf3219  libgomp/testsuite/libgomp.c++/target-this-1.C
+ 7ecd542ef8fc4d3c7a2e77af16f33ddc  libgomp/testsuite/libgomp.c++/target-this-2.C
+ fba21b58f96148e08077f4e33845a409  libgomp/testsuite/libgomp.c++/target-this-3.C
+ 6b0ab1a02e480902c3290649608601e6  libgomp/testsuite/libgomp.c++/target-this-4.C
+ 16c373a225fe82f7f0d604229dd1c144  libgomp/testsuite/libgomp.c++/target-this-5.C
+ d3a5c683e9f1ba8fe5f9c52a09722af0  libgomp/testsuite/libgomp.c++/target-virtual-1.C
  4755f8276f35f740d59135af4e5242f0  libgomp/testsuite/libgomp.c++/task-1.C
  5532f36e28daf97021228ebf72885697  libgomp/testsuite/libgomp.c++/task-2.C
  27531bc2a807e1107292fe33e894f8a0  libgomp/testsuite/libgomp.c++/task-3.C
*************** ea9d7efadb5b2c25e305ce1e8aee8d04  libgom
*** 94203,94213 ****
  18bc8983002568fa3de20df48f9b2c2f  libgomp/testsuite/libgomp.c++/udr-7.C
  a0ed7c5ec445acca5bb4d3efd5041bbf  libgomp/testsuite/libgomp.c++/udr-8.C
  9049517c3597f400ce3982fc59a9cb94  libgomp/testsuite/libgomp.c-c++-common/alloc-1.c
  fd2369c7ae56d95d52913f986183913e  libgomp/testsuite/libgomp.c-c++-common/alloc-2.c
  6f5f297baa365e3ee82fd98026c3f0f4  libgomp/testsuite/libgomp.c-c++-common/alloc-3.c
! 74336da00bc337b3aa2ecc1cbfdd3303  libgomp/testsuite/libgomp.c-c++-common/alloc-4.c
  dd35f837ba3f36a2f937940516cd6df9  libgomp/testsuite/libgomp.c-c++-common/allocate-1.c
  4dc4b112dfee5bd9786bd0c593398b1b  libgomp/testsuite/libgomp.c-c++-common/atomic-18.c
  83a30fcfeab47090fa194cc1e6ec2f83  libgomp/testsuite/libgomp.c-c++-common/cancel-parallel-1.c
  025dfca2b02c470cf7f46afb552c078c  libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-1.c
  e84312e49f013526d73d8d431b003123  libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-2.c
--- 100799,100820 ----
  18bc8983002568fa3de20df48f9b2c2f  libgomp/testsuite/libgomp.c++/udr-7.C
  a0ed7c5ec445acca5bb4d3efd5041bbf  libgomp/testsuite/libgomp.c++/udr-8.C
  9049517c3597f400ce3982fc59a9cb94  libgomp/testsuite/libgomp.c-c++-common/alloc-1.c
+ fc7de9de760679e8b92e68cc05f02dcd  libgomp/testsuite/libgomp.c-c++-common/alloc-10.c
  fd2369c7ae56d95d52913f986183913e  libgomp/testsuite/libgomp.c-c++-common/alloc-2.c
  6f5f297baa365e3ee82fd98026c3f0f4  libgomp/testsuite/libgomp.c-c++-common/alloc-3.c
! 6dfe7bee722e661d4d268b712c0f1d78  libgomp/testsuite/libgomp.c-c++-common/alloc-4.c
! 55ad5dc0034cf4ba17d37be91bf2d03d  libgomp/testsuite/libgomp.c-c++-common/alloc-5.c
! 405cb345b0376411a0ce13696abe11b8  libgomp/testsuite/libgomp.c-c++-common/alloc-6.c
! 13f9ffdf78c7c6460416acf1c9e28029  libgomp/testsuite/libgomp.c-c++-common/alloc-7.c
! 958b22575f252e68c66b6c7a7f0da79a  libgomp/testsuite/libgomp.c-c++-common/alloc-8.c
! 6a6bc24d15d026cca5b2ff5b6e30d6e2  libgomp/testsuite/libgomp.c-c++-common/alloc-9.c
  dd35f837ba3f36a2f937940516cd6df9  libgomp/testsuite/libgomp.c-c++-common/allocate-1.c
+ c1c21337b0fec3c68ff32349fb0a4018  libgomp/testsuite/libgomp.c-c++-common/allocate-2.c
+ aa6a105d9a9f8c8f7cd0e1025e2a0a53  libgomp/testsuite/libgomp.c-c++-common/allocate-3.c
  4dc4b112dfee5bd9786bd0c593398b1b  libgomp/testsuite/libgomp.c-c++-common/atomic-18.c
+ 0892e753aa240ae919dd5eca15841da2  libgomp/testsuite/libgomp.c-c++-common/atomic-19.c
+ 69c685c05133b4a16e0c8dac70b08f1c  libgomp/testsuite/libgomp.c-c++-common/atomic-20.c
+ 7a2af54d64b5694d40c340fd54e94a2a  libgomp/testsuite/libgomp.c-c++-common/atomic-21.c
  83a30fcfeab47090fa194cc1e6ec2f83  libgomp/testsuite/libgomp.c-c++-common/cancel-parallel-1.c
  025dfca2b02c470cf7f46afb552c078c  libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-1.c
  e84312e49f013526d73d8d431b003123  libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-2.c
*************** e84312e49f013526d73d8d431b003123  libgom
*** 94216,94227 ****
--- 100823,100836 ----
  9fe6259058ff7671b0dadfe2a5eea80f  libgomp/testsuite/libgomp.c-c++-common/critical-hint-1.c
  a4ab197aeadddd54aec1345501b5ea69  libgomp/testsuite/libgomp.c-c++-common/critical-hint-2.c
  12e3ee01b70343537315551db476c391  libgomp/testsuite/libgomp.c-c++-common/declare_target-1.c
+ 59c8656b7740501a704831756762d395  libgomp/testsuite/libgomp.c-c++-common/default-1.c
  ffae923e01f64777614298d5256aa1e4  libgomp/testsuite/libgomp.c-c++-common/depend-iterator-1.c
  89f89f54b56b11293d8d7db027c1dc5b  libgomp/testsuite/libgomp.c-c++-common/depend-iterator-2.c
  1583f97cbaa7d0b05f4bc3415cf9a901  libgomp/testsuite/libgomp.c-c++-common/depend-mutexinout-1.c
  744de86f8478d3f33bf9ae8549aa5d5f  libgomp/testsuite/libgomp.c-c++-common/depend-mutexinout-2.c
  34181537abfe326d25c077843377069a  libgomp/testsuite/libgomp.c-c++-common/depobj-1.c
  3035c770acef0fafa426b2d7148c9238  libgomp/testsuite/libgomp.c-c++-common/display-affinity-1.c
+ 4bb908a5492bbb499dc7bc00082d3676  libgomp/testsuite/libgomp.c-c++-common/error-1.c
  128ad362b06c9753ddbcbe2789351c1a  libgomp/testsuite/libgomp.c-c++-common/for-1.c
  c8a38164050e9ce322ff7c77a9f0f96c  libgomp/testsuite/libgomp.c-c++-common/for-1.h
  90517645b53ddd6cd57d1b9e55ae5023  libgomp/testsuite/libgomp.c-c++-common/for-10.c
*************** cbc14e9058cf7693b82cf46dc742fafb  libgom
*** 94233,94239 ****
  39f370f549dd8b0710d66b5d97a3817c  libgomp/testsuite/libgomp.c-c++-common/for-16.c
  e0f3473e377101c52df3a53604089bff  libgomp/testsuite/libgomp.c-c++-common/for-2.c
  fb8359839c9314ffa41831bcd16efb06  libgomp/testsuite/libgomp.c-c++-common/for-2.h
! 6f46aa7185eee9a71aa6aba553dec946  libgomp/testsuite/libgomp.c-c++-common/for-3.c
  5c2c6f34632d5e4d4a9f6cad324f21ef  libgomp/testsuite/libgomp.c-c++-common/for-4.c
  0885eb5a2a371c53a717ebe52186deeb  libgomp/testsuite/libgomp.c-c++-common/for-5.c
  44cbd81173518afca6a17f0bf914a60f  libgomp/testsuite/libgomp.c-c++-common/for-6.c
--- 100842,100848 ----
  39f370f549dd8b0710d66b5d97a3817c  libgomp/testsuite/libgomp.c-c++-common/for-16.c
  e0f3473e377101c52df3a53604089bff  libgomp/testsuite/libgomp.c-c++-common/for-2.c
  fb8359839c9314ffa41831bcd16efb06  libgomp/testsuite/libgomp.c-c++-common/for-2.h
! ec2352caddec68baeddd9018aa81c14b  libgomp/testsuite/libgomp.c-c++-common/for-3.c
  5c2c6f34632d5e4d4a9f6cad324f21ef  libgomp/testsuite/libgomp.c-c++-common/for-4.c
  0885eb5a2a371c53a717ebe52186deeb  libgomp/testsuite/libgomp.c-c++-common/for-5.c
  44cbd81173518afca6a17f0bf914a60f  libgomp/testsuite/libgomp.c-c++-common/for-6.c
*************** ee0115a370a5b6a9e6990b3d15bdd431  libgom
*** 94242,94247 ****
--- 100851,100858 ----
  81a985257cde0e49d560ae8aee85cf96  libgomp/testsuite/libgomp.c-c++-common/for-9.c
  38b84120e95c50bcbe995ff760fb2f46  libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded-aux.c
  45a948d47bf9a9580f0eaaa779cabe59  libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded.c
+ 5064d7f7b54485f71e0e73966931c7e0  libgomp/testsuite/libgomp.c-c++-common/icv-3.c
+ 0ff41f87bf85b96ed10a04878ee178b2  libgomp/testsuite/libgomp.c-c++-common/icv-4.c
  2db7225fd29d77c0461e025f76bb7fce  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-1.c
  4ea18b6b659c1a92c5928b282969d372  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-10.c
  14c015447b26dcc91408ffe46450e85f  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-2.c
*************** ee0115a370a5b6a9e6990b3d15bdd431  libgom
*** 94249,94268 ****
  2a62fb1f5acbb41d1ce6f3cfc49d9a79  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-4.c
  00ee2bd347302e73b6ce24af1fb2289e  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-5.c
  5ebd8eb33044c8b043282d7fbc53640f  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-6.c
! 03689edfc89550fff7e348486a5e4c78  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-7.c
! aded42f6886bbe0ebc476f72577d0123  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-8.c
  0a75c2e290ee657931ebb15b56b68b6f  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-9.c
  b27380cd395a2928996b8531b3eb62ad  libgomp/testsuite/libgomp.c-c++-common/loop-1.c
  683302cd2c348c750020ecdfcfa8c7de  libgomp/testsuite/libgomp.c-c++-common/loop-13.c
  81cd8a77c25ea49d08f07250f984f35d  libgomp/testsuite/libgomp.c-c++-common/loop-14.c
  dffc3aabaa5b2461aa560fc66c80c0fe  libgomp/testsuite/libgomp.c-c++-common/loop-15.c
  3c55e0ae7ee0559f4081eae1bd8bcff2  libgomp/testsuite/libgomp.c-c++-common/master-combined-1.c
  f959c1fe9d94d7321dbc7b419eefe7a7  libgomp/testsuite/libgomp.c-c++-common/monotonic-1.c
  cc6abf61b301e17286872d6d76d483c0  libgomp/testsuite/libgomp.c-c++-common/monotonic-2.c
  1c4ec2975c3dc84ae293e87a285260b4  libgomp/testsuite/libgomp.c-c++-common/nested-parallel-unbalanced.c
  d9c974865c1c03b48fac0231e028a7be  libgomp/testsuite/libgomp.c-c++-common/nonmonotonic-1.c
  214e7bba3d270a6822e2e6161f05981b  libgomp/testsuite/libgomp.c-c++-common/nonmonotonic-2.c
! dfe1951e336cd10cf4b2330c5ffb28f4  libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h
  53fe13231ac841815b983b820fa61932  libgomp/testsuite/libgomp.c-c++-common/ordered-4.c
  35032e9e752cf0fddfcf3aa3df880c48  libgomp/testsuite/libgomp.c-c++-common/pause-1.c
  333f11e6a780e595ef92d101803745c9  libgomp/testsuite/libgomp.c-c++-common/pause-2.c
--- 100860,100883 ----
  2a62fb1f5acbb41d1ce6f3cfc49d9a79  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-4.c
  00ee2bd347302e73b6ce24af1fb2289e  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-5.c
  5ebd8eb33044c8b043282d7fbc53640f  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-6.c
! 034b25e891c2510d11736c14fd27c0dd  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-7.c
! e0152eb35a9d3899870d04febb8995ac  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-8.c
  0a75c2e290ee657931ebb15b56b68b6f  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-9.c
  b27380cd395a2928996b8531b3eb62ad  libgomp/testsuite/libgomp.c-c++-common/loop-1.c
  683302cd2c348c750020ecdfcfa8c7de  libgomp/testsuite/libgomp.c-c++-common/loop-13.c
  81cd8a77c25ea49d08f07250f984f35d  libgomp/testsuite/libgomp.c-c++-common/loop-14.c
  dffc3aabaa5b2461aa560fc66c80c0fe  libgomp/testsuite/libgomp.c-c++-common/loop-15.c
+ 5cdaccb404c42c94d2b0ed71fa9b4450  libgomp/testsuite/libgomp.c-c++-common/masked-1.c
  3c55e0ae7ee0559f4081eae1bd8bcff2  libgomp/testsuite/libgomp.c-c++-common/master-combined-1.c
  f959c1fe9d94d7321dbc7b419eefe7a7  libgomp/testsuite/libgomp.c-c++-common/monotonic-1.c
  cc6abf61b301e17286872d6d76d483c0  libgomp/testsuite/libgomp.c-c++-common/monotonic-2.c
  1c4ec2975c3dc84ae293e87a285260b4  libgomp/testsuite/libgomp.c-c++-common/nested-parallel-unbalanced.c
  d9c974865c1c03b48fac0231e028a7be  libgomp/testsuite/libgomp.c-c++-common/nonmonotonic-1.c
  214e7bba3d270a6822e2e6161f05981b  libgomp/testsuite/libgomp.c-c++-common/nonmonotonic-2.c
! 857b86f8109e8843b901fc93bce4c8a8  libgomp/testsuite/libgomp.c-c++-common/nothing-1.c
! e3dab4fbc1c6803d5b9b05f69a4d5057  libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h
! 74baf3447a9a73a48cd8d205ea13026b  libgomp/testsuite/libgomp.c-c++-common/order-reproducible-1.c
! e2bc55eb4581cd421c13c8ce68663678  libgomp/testsuite/libgomp.c-c++-common/order-reproducible-2.c
  53fe13231ac841815b983b820fa61932  libgomp/testsuite/libgomp.c-c++-common/ordered-4.c
  35032e9e752cf0fddfcf3aa3df880c48  libgomp/testsuite/libgomp.c-c++-common/pause-1.c
  333f11e6a780e595ef92d101803745c9  libgomp/testsuite/libgomp.c-c++-common/pause-2.c
*************** dff7a676c5c7625a109dad1fb29c317d  libgom
*** 94288,94310 ****
  08611a968d3d5d8544391a554aa64d2e  libgomp/testsuite/libgomp.c-c++-common/pr83046.c
  bbbd1b345adde5e2b11d48880c03841d  libgomp/testsuite/libgomp.c-c++-common/pr93515.c
  aa27b099930bc5b5e07e143f2ff6fedc  libgomp/testsuite/libgomp.c-c++-common/pr94366.c
! 083fd3b3485a54da1a1bf118b3d85a18  libgomp/testsuite/libgomp.c-c++-common/pr96390.c
  815799e957465c99070ca74ae5616589  libgomp/testsuite/libgomp.c-c++-common/ptr-attach-1.c
  2d2748b0be4d42cf748c994d23973c0d  libgomp/testsuite/libgomp.c-c++-common/reduction-1.c
! 9da12835144604ca0825fc458da152ab  libgomp/testsuite/libgomp.c-c++-common/reduction-16.c
  0da0ce29b808834888fc9c79f55a6f40  libgomp/testsuite/libgomp.c-c++-common/reduction-2.c
  e453d108664fa547feb3b13c881be597  libgomp/testsuite/libgomp.c-c++-common/reduction-3.c
  5fb06d4bdb476173a92277c8e950d55c  libgomp/testsuite/libgomp.c-c++-common/reduction-4.c
  d66bb650f4953bee67dede99228fb94f  libgomp/testsuite/libgomp.c-c++-common/simd-1.c
  561437d7d3d7ef8ef34cb872b883ba18  libgomp/testsuite/libgomp.c-c++-common/simd-14.c
  cbc1c46aca10b5056dd653273e1b22d3  libgomp/testsuite/libgomp.c-c++-common/simd-15.c
  084c24f7e403ce84d5acddb7371e6db7  libgomp/testsuite/libgomp.c-c++-common/simd-16.c
  668f2a5501e9bfa773356969d62db4da  libgomp/testsuite/libgomp.c-c++-common/simd-17.c
  fa179f92bce747c523f38056959318ff  libgomp/testsuite/libgomp.c-c++-common/target-1.c
  d01ee6246770101e0827d46c27fc4cc5  libgomp/testsuite/libgomp.c-c++-common/target-10.c
  52ce685862fa4549564c34c17e73ed24  libgomp/testsuite/libgomp.c-c++-common/target-13.c
  e590f10fae9bf053ed7123777b03bf32  libgomp/testsuite/libgomp.c-c++-common/target-2.c
  5411abe8bc8fb16337ef59206b9a233a  libgomp/testsuite/libgomp.c-c++-common/target-40.c
  5232d615b2109b50002b7e6eb8301a84  libgomp/testsuite/libgomp.c-c++-common/task-detach-1.c
  7f2f3a630783e68a54ffcd18a73085b2  libgomp/testsuite/libgomp.c-c++-common/task-detach-10.c
  bf2a6ba66b2350c597a56727abd53608  libgomp/testsuite/libgomp.c-c++-common/task-detach-11.c
--- 100903,100946 ----
  08611a968d3d5d8544391a554aa64d2e  libgomp/testsuite/libgomp.c-c++-common/pr83046.c
  bbbd1b345adde5e2b11d48880c03841d  libgomp/testsuite/libgomp.c-c++-common/pr93515.c
  aa27b099930bc5b5e07e143f2ff6fedc  libgomp/testsuite/libgomp.c-c++-common/pr94366.c
! a86d9a83545e3b50c9acf939c20f319c  libgomp/testsuite/libgomp.c-c++-common/pr96390.c
  815799e957465c99070ca74ae5616589  libgomp/testsuite/libgomp.c-c++-common/ptr-attach-1.c
  2d2748b0be4d42cf748c994d23973c0d  libgomp/testsuite/libgomp.c-c++-common/reduction-1.c
! 1918a797ca25f14588ff263d56568f8d  libgomp/testsuite/libgomp.c-c++-common/reduction-16.c
! d7ab6e4bfb482647bc734af066fff6e3  libgomp/testsuite/libgomp.c-c++-common/reduction-17.c
  0da0ce29b808834888fc9c79f55a6f40  libgomp/testsuite/libgomp.c-c++-common/reduction-2.c
  e453d108664fa547feb3b13c881be597  libgomp/testsuite/libgomp.c-c++-common/reduction-3.c
  5fb06d4bdb476173a92277c8e950d55c  libgomp/testsuite/libgomp.c-c++-common/reduction-4.c
+ b81001ea5b86a968c0d65cd22d5ac974  libgomp/testsuite/libgomp.c-c++-common/reduction-5.c
+ fde44859b725290055507326964d562d  libgomp/testsuite/libgomp.c-c++-common/reduction-6.c
+ ffe87889b4d3a046dbdc776f484123e8  libgomp/testsuite/libgomp.c-c++-common/refcount-1.c
+ ee53be878dd906b2e18b5907cb4a4617  libgomp/testsuite/libgomp.c-c++-common/scope-1.c
  d66bb650f4953bee67dede99228fb94f  libgomp/testsuite/libgomp.c-c++-common/simd-1.c
  561437d7d3d7ef8ef34cb872b883ba18  libgomp/testsuite/libgomp.c-c++-common/simd-14.c
  cbc1c46aca10b5056dd653273e1b22d3  libgomp/testsuite/libgomp.c-c++-common/simd-15.c
  084c24f7e403ce84d5acddb7371e6db7  libgomp/testsuite/libgomp.c-c++-common/simd-16.c
  668f2a5501e9bfa773356969d62db4da  libgomp/testsuite/libgomp.c-c++-common/simd-17.c
+ 4275166e2a03408f5d25127421bfd832  libgomp/testsuite/libgomp.c-c++-common/struct-elem-1.c
+ 80deab7b7285fa934f6f5e449fc455bb  libgomp/testsuite/libgomp.c-c++-common/struct-elem-2.c
+ 31d15621334ecdff113afb86d86a61e0  libgomp/testsuite/libgomp.c-c++-common/struct-elem-3.c
+ b6ead85ed266e62b8a8477bcdf3073f9  libgomp/testsuite/libgomp.c-c++-common/struct-elem-4.c
+ 2f381b5b2c1edcb3aff57cd8162f2765  libgomp/testsuite/libgomp.c-c++-common/struct-elem-5.c
  fa179f92bce747c523f38056959318ff  libgomp/testsuite/libgomp.c-c++-common/target-1.c
  d01ee6246770101e0827d46c27fc4cc5  libgomp/testsuite/libgomp.c-c++-common/target-10.c
  52ce685862fa4549564c34c17e73ed24  libgomp/testsuite/libgomp.c-c++-common/target-13.c
  e590f10fae9bf053ed7123777b03bf32  libgomp/testsuite/libgomp.c-c++-common/target-2.c
  5411abe8bc8fb16337ef59206b9a233a  libgomp/testsuite/libgomp.c-c++-common/target-40.c
+ c1475af16cfcc82bec0d85875d542fdb  libgomp/testsuite/libgomp.c-c++-common/target-41.c
+ d87524b525b7f424e584af640f4b038b  libgomp/testsuite/libgomp.c-c++-common/target-42.c
+ 08b479cee4978918cedb9f5cd9453710  libgomp/testsuite/libgomp.c-c++-common/target-45.c
+ 1120f9e50460c0396d1ae405ffd3e780  libgomp/testsuite/libgomp.c-c++-common/target-has-device-addr-1.c
+ e73115d6a79251ae1cec9faf5147c7c8  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-1.c
+ bf1a2d5b5e659178fb80138902374a56  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-2.c
+ c59c2b50b25e1cc94ef1440dd9e22f71  libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-1.c
+ e4ae276ba05cf2521872c73349458117  libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-2.c
+ 400c5830e8dd2f17214d8d23477755de  libgomp/testsuite/libgomp.c-c++-common/target-same-name-1-a.c
+ 469b004815365e46140bcd8b826170ce  libgomp/testsuite/libgomp.c-c++-common/target-same-name-1-b.c
+ b85430592a96b021a6f4ab81d5c35eb9  libgomp/testsuite/libgomp.c-c++-common/target-same-name-1.c
  5232d615b2109b50002b7e6eb8301a84  libgomp/testsuite/libgomp.c-c++-common/task-detach-1.c
  7f2f3a630783e68a54ffcd18a73085b2  libgomp/testsuite/libgomp.c-c++-common/task-detach-10.c
  bf2a6ba66b2350c597a56727abd53608  libgomp/testsuite/libgomp.c-c++-common/task-detach-11.c
*************** b40007acfa7d6af27f51387ecc184dae  libgom
*** 94314,94320 ****
  80f1063bb97ccd9af83f01d1967ea47b  libgomp/testsuite/libgomp.c-c++-common/task-detach-3.c
  9d8d31615d3312bd47d979e0ddb895a1  libgomp/testsuite/libgomp.c-c++-common/task-detach-4.c
  511e7692f392de69f828890dc5901e90  libgomp/testsuite/libgomp.c-c++-common/task-detach-5.c
! fd0527d1b510bf4ad7665823b3d06823  libgomp/testsuite/libgomp.c-c++-common/task-detach-6.c
  30fa39cf4185a1d4467acb7da650aaa6  libgomp/testsuite/libgomp.c-c++-common/task-detach-7.c
  8e64db6e7526c10809c0a1d05a25f95b  libgomp/testsuite/libgomp.c-c++-common/task-detach-8.c
  d2cb6d4c0500a7f9ba372f1dbf3296c1  libgomp/testsuite/libgomp.c-c++-common/task-detach-9.c
--- 100950,100956 ----
  80f1063bb97ccd9af83f01d1967ea47b  libgomp/testsuite/libgomp.c-c++-common/task-detach-3.c
  9d8d31615d3312bd47d979e0ddb895a1  libgomp/testsuite/libgomp.c-c++-common/task-detach-4.c
  511e7692f392de69f828890dc5901e90  libgomp/testsuite/libgomp.c-c++-common/task-detach-5.c
! 6f168f36bc9ce041c910791b5b462301  libgomp/testsuite/libgomp.c-c++-common/task-detach-6.c
  30fa39cf4185a1d4467acb7da650aaa6  libgomp/testsuite/libgomp.c-c++-common/task-detach-7.c
  8e64db6e7526c10809c0a1d05a25f95b  libgomp/testsuite/libgomp.c-c++-common/task-detach-8.c
  d2cb6d4c0500a7f9ba372f1dbf3296c1  libgomp/testsuite/libgomp.c-c++-common/task-detach-9.c
*************** d2cb6d4c0500a7f9ba372f1dbf3296c1  libgom
*** 94324,94329 ****
--- 100960,100966 ----
  e4f419faa09d744436aad29d88eb43cf  libgomp/testsuite/libgomp.c-c++-common/task-reduction-13.c
  d284915ed4a4ac417bfb2b7632453bec  libgomp/testsuite/libgomp.c-c++-common/task-reduction-14.c
  9c603541ce46d78d4526034634edb381  libgomp/testsuite/libgomp.c-c++-common/task-reduction-15.c
+ f60960e78fad9b2017aed57b39c1653a  libgomp/testsuite/libgomp.c-c++-common/task-reduction-16.c
  47acc8ff8c516165766737c2f13be4cf  libgomp/testsuite/libgomp.c-c++-common/task-reduction-2.c
  33b998ac8605f9aab9808c883f2e85eb  libgomp/testsuite/libgomp.c-c++-common/task-reduction-3.c
  5ab2e1d3a94c19b612a71f802938e9d8  libgomp/testsuite/libgomp.c-c++-common/task-reduction-4.c
*************** e8b91070ba113269db3f80127dea46d1  libgom
*** 94336,94351 ****
  533a2f763e275eebcca5c5ab19adcde9  libgomp/testsuite/libgomp.c-c++-common/taskloop-1.c
  cbef0235768c1f4944ee1b5c5fa053be  libgomp/testsuite/libgomp.c-c++-common/taskloop-2.c
  8b721a972a83827d50ac99b596effbce  libgomp/testsuite/libgomp.c-c++-common/taskloop-3.c
! 192e8a76776b74e70499b60a2a326369  libgomp/testsuite/libgomp.c-c++-common/taskloop-4.c
  a45e0bc2a9defec1ccedcfe9f7d71f80  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-1.c
  bf98adf4221cad6e7da7bfc5a26395d4  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-2.c
  2eba45c946c43172dafb32280f9b9085  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-3.c
  fb173d8d2f7d77807e2f94fea30c2a43  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-4.c
  7766c9cddf6031ff22c64ce9e45948bc  libgomp/testsuite/libgomp.c-c++-common/taskwait-depend-1.c
  5d8ecdbae4b1a48b2e6a1ddef6b0ca7f  libgomp/testsuite/libgomp.c-c++-common/udr-1.c
  448f5dd482b6ef3000923aaa33bb3bfb  libgomp/testsuite/libgomp.c-c++-common/unmap-infinity-2.c
  b2587cfb605c9af09f5b45e95cdb2437  libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c
! b6206b96870346519e061d466750b845  libgomp/testsuite/libgomp.c/affinity-1.c
  fe6e22f8c0d2e289ecbd5ea26c9ed1bc  libgomp/testsuite/libgomp.c/affinity-2.c
  1f6a1f1c31286073320fc1d55660da23  libgomp/testsuite/libgomp.c/appendix-a/a.15.1.c
  16dafd2aadb62eb39423e7b2deb46cc1  libgomp/testsuite/libgomp.c/appendix-a/a.16.1.c
--- 100973,100993 ----
  533a2f763e275eebcca5c5ab19adcde9  libgomp/testsuite/libgomp.c-c++-common/taskloop-1.c
  cbef0235768c1f4944ee1b5c5fa053be  libgomp/testsuite/libgomp.c-c++-common/taskloop-2.c
  8b721a972a83827d50ac99b596effbce  libgomp/testsuite/libgomp.c-c++-common/taskloop-3.c
! 2a89db069ccb0624db9d711681161fbe  libgomp/testsuite/libgomp.c-c++-common/taskloop-4.c
! f2e93e59b93b24a2a3ed96e4562d49e9  libgomp/testsuite/libgomp.c-c++-common/taskloop-5.c
  a45e0bc2a9defec1ccedcfe9f7d71f80  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-1.c
  bf98adf4221cad6e7da7bfc5a26395d4  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-2.c
  2eba45c946c43172dafb32280f9b9085  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-3.c
  fb173d8d2f7d77807e2f94fea30c2a43  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-4.c
  7766c9cddf6031ff22c64ce9e45948bc  libgomp/testsuite/libgomp.c-c++-common/taskwait-depend-1.c
+ e8fd73b729dbcad088c01b1d0f31a2ff  libgomp/testsuite/libgomp.c-c++-common/teams-1.c
+ 7df126bb12429498f7ff59725539584a  libgomp/testsuite/libgomp.c-c++-common/teams-2.c
+ 7bf43ffa356123b83df7b2f06cb4ad94  libgomp/testsuite/libgomp.c-c++-common/thread-limit-1.c
  5d8ecdbae4b1a48b2e6a1ddef6b0ca7f  libgomp/testsuite/libgomp.c-c++-common/udr-1.c
  448f5dd482b6ef3000923aaa33bb3bfb  libgomp/testsuite/libgomp.c-c++-common/unmap-infinity-2.c
  b2587cfb605c9af09f5b45e95cdb2437  libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c
! 9827d700d634869b090c7636cc855819  libgomp/testsuite/libgomp.c/address-space-1.c
! 1859f4268fdf64646f382513441ebf0b  libgomp/testsuite/libgomp.c/affinity-1.c
  fe6e22f8c0d2e289ecbd5ea26c9ed1bc  libgomp/testsuite/libgomp.c/affinity-2.c
  1f6a1f1c31286073320fc1d55660da23  libgomp/testsuite/libgomp.c/appendix-a/a.15.1.c
  16dafd2aadb62eb39423e7b2deb46cc1  libgomp/testsuite/libgomp.c/appendix-a/a.16.1.c
*************** a0864a470dcfab5610654831f9ec1740  libgom
*** 94403,94408 ****
--- 101045,101057 ----
  b5604fce8e01b4e305a8c0a4563d1aa9  libgomp/testsuite/libgomp.c/debug-1.c
  9c2e77575175172ebb8ff9301c063d3d  libgomp/testsuite/libgomp.c/declare-variant-1.c
  6d6b0531c9f74483e6111b636da2edf2  libgomp/testsuite/libgomp.c/declare-variant-2.c
+ 30093bb51133327e8180a126ef9fa303  libgomp/testsuite/libgomp.c/declare-variant-3-sm30.c
+ 16bb2971883718f99eaf35aa218388a3  libgomp/testsuite/libgomp.c/declare-variant-3-sm35.c
+ e1ed9cc06141fce55456e6272a71118b  libgomp/testsuite/libgomp.c/declare-variant-3-sm53.c
+ b1d3fe36737490aef180f46d7da6e87d  libgomp/testsuite/libgomp.c/declare-variant-3-sm70.c
+ 0be08e10481456dea34aa3c77469bb95  libgomp/testsuite/libgomp.c/declare-variant-3-sm75.c
+ 521294738537591a7c348c6cf22ab183  libgomp/testsuite/libgomp.c/declare-variant-3-sm80.c
+ 7b6aaf409418914c7e9fbc501eda6c9b  libgomp/testsuite/libgomp.c/declare-variant-3.h
  de26bcca8c4e027a5ce130d6ff6fc370  libgomp/testsuite/libgomp.c/depend-1.c
  f064386a2df301c3135834944af37de9  libgomp/testsuite/libgomp.c/depend-10.c
  e46784f3cdfb38c461a2af6e0d9094a0  libgomp/testsuite/libgomp.c/depend-2.c
*************** c97be2d4dda2fd0e24aee73e7daeb779  libgom
*** 94481,94486 ****
--- 101130,101137 ----
  55bdc5ab65021c3fa80cc6ee8c856909  libgomp/testsuite/libgomp.c/loop-23.c
  a19b860b4cd897806edbbabe581dbb96  libgomp/testsuite/libgomp.c/loop-24.c
  1560509326b57b175c476871c1751dee  libgomp/testsuite/libgomp.c/loop-25.c
+ c526be410e3cf6c1c674405feb05cbb2  libgomp/testsuite/libgomp.c/loop-26.c
+ 78088db622ed796d0cffbcc62df18537  libgomp/testsuite/libgomp.c/loop-27.c
  2d311b74a086fbde01cc1251018f8c89  libgomp/testsuite/libgomp.c/loop-3.c
  3e1854d7c928c20929261995df919755  libgomp/testsuite/libgomp.c/loop-4.c
  4537e604838f3ef6d5be6400a2725e3d  libgomp/testsuite/libgomp.c/loop-5.c
*************** b2840419f7f70553698eb41dcd3bd6c6  libgom
*** 94503,94509 ****
  8a9572f97bc43759a0119831329e9616  libgomp/testsuite/libgomp.c/omp-loop03.c
  541a47c47277479639be47343a9637fe  libgomp/testsuite/libgomp.c/omp-nested-1.c
  6e5c46b685d5a7b0bba3776bbddd9cb9  libgomp/testsuite/libgomp.c/omp-nested-2.c
! 2573aa3bc27e163f1dc25de2aa4e3e16  libgomp/testsuite/libgomp.c/omp-nested-3.c
  20a1c4ad16d936e13bfcff4af3b2a27a  libgomp/testsuite/libgomp.c/omp-parallel-for.c
  e756f95da64c35a1d35271b41d86a25f  libgomp/testsuite/libgomp.c/omp-parallel-if.c
  fd94f11e80d06ba6d2e92c00e2dbaf0d  libgomp/testsuite/libgomp.c/omp-single-1.c
--- 101154,101160 ----
  8a9572f97bc43759a0119831329e9616  libgomp/testsuite/libgomp.c/omp-loop03.c
  541a47c47277479639be47343a9637fe  libgomp/testsuite/libgomp.c/omp-nested-1.c
  6e5c46b685d5a7b0bba3776bbddd9cb9  libgomp/testsuite/libgomp.c/omp-nested-2.c
! 155f067cfc582aa157e2bdb3145adbf5  libgomp/testsuite/libgomp.c/omp-nested-3.c
  20a1c4ad16d936e13bfcff4af3b2a27a  libgomp/testsuite/libgomp.c/omp-parallel-for.c
  e756f95da64c35a1d35271b41d86a25f  libgomp/testsuite/libgomp.c/omp-parallel-if.c
  fd94f11e80d06ba6d2e92c00e2dbaf0d  libgomp/testsuite/libgomp.c/omp-single-1.c
*************** bb5f1add3b172a6350a63ac4065e26ec  libgom
*** 94529,94538 ****
  ecc1971bfd0bc04115af17ac694a0431  libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-6.c
  f6ff904d877753394a1482a595ff74d0  libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-7.c
  e2af3bc3621d7e03158bdd391ec72c47  libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt.c
! ebdfdc0bfc1675a26f73ba66329d6e75  libgomp/testsuite/libgomp.c/places-6.c
! dce925481bd33e4b6155a992941a2741  libgomp/testsuite/libgomp.c/places-7.c
! 033508b78702497acf629bd938d3000c  libgomp/testsuite/libgomp.c/places-8.c
  bb57a9ccf51a738ab2985a513801a658  libgomp/testsuite/libgomp.c/pr104385.c
  c522146f1617da47efbc34dedb563f61  libgomp/testsuite/libgomp.c/pr24455-1.c
  4d9e31cef64ff399334db6c29e3a07db  libgomp/testsuite/libgomp.c/pr24455.c
  5f9c41745fbf27e0d2ca8e182c9ff34f  libgomp/testsuite/libgomp.c/pr26171.c
--- 101180,101200 ----
  ecc1971bfd0bc04115af17ac694a0431  libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-6.c
  f6ff904d877753394a1482a595ff74d0  libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-7.c
  e2af3bc3621d7e03158bdd391ec72c47  libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt.c
! 43cb74f845ffaf3624d68823bf37ab83  libgomp/testsuite/libgomp.c/places-1.c
! 88dbf3931b88f6386b92b644d2fcfa1a  libgomp/testsuite/libgomp.c/places-10.c
! 66306adea0b8d467f3b10ca3528eeb01  libgomp/testsuite/libgomp.c/places-2.c
! 2105e6e906ba52414bd4a2f6e27984fb  libgomp/testsuite/libgomp.c/places-3.c
! e39bd04c0eb92e3912a2ca562f9c264d  libgomp/testsuite/libgomp.c/places-4.c
! b2fb8a46bb1499918a8fc73feb9e8d08  libgomp/testsuite/libgomp.c/places-5.c
! 0cc512ec4e4df3d4358d2b47f441517e  libgomp/testsuite/libgomp.c/places-6.c
! 85ff1aec133bd8a4b5de89942472b6ab  libgomp/testsuite/libgomp.c/places-7.c
! ea933c3d3011e72147289674c4f66d9f  libgomp/testsuite/libgomp.c/places-8.c
! 4b3bd4043ea1b8f3ca4b9c512b5cabc1  libgomp/testsuite/libgomp.c/places-9.c
  bb57a9ccf51a738ab2985a513801a658  libgomp/testsuite/libgomp.c/pr104385.c
+ b39893ba213997fb0f30060685879d54  libgomp/testsuite/libgomp.c/pr104783-2.c
+ 9783950bd82dd3de38f343049b240ea9  libgomp/testsuite/libgomp.c/pr104783.c
+ 90c233f1c51f5ec4e94b2c31c4dc28bb  libgomp/testsuite/libgomp.c/pr104952-1.c
+ aa4bf5c713a6787268e4b1415f31402c  libgomp/testsuite/libgomp.c/pr104952-2.c
  c522146f1617da47efbc34dedb563f61  libgomp/testsuite/libgomp.c/pr24455-1.c
  4d9e31cef64ff399334db6c29e3a07db  libgomp/testsuite/libgomp.c/pr24455.c
  5f9c41745fbf27e0d2ca8e182c9ff34f  libgomp/testsuite/libgomp.c/pr26171.c
*************** a09e656e44149f1bcaf7519d9cfea66c  libgom
*** 94564,94570 ****
  006c9241a06131d8b1ad87c0a7a58349  libgomp/testsuite/libgomp.c/pr42029.c
  9833af43747691db1943582bcdcaaa5c  libgomp/testsuite/libgomp.c/pr42942.c
  3b6d62c4c9f8e8ce4656f6342157558e  libgomp/testsuite/libgomp.c/pr43893.c
! 98e5e0392d559ee3428b62c6dfa93e0c  libgomp/testsuite/libgomp.c/pr46032-2.c
  014ad41df9153b87675e7db55d0b87e9  libgomp/testsuite/libgomp.c/pr46032.c
  7063eafd5386ba2fb42b9714bc3c1b6e  libgomp/testsuite/libgomp.c/pr46193.c
  dc156ed1b463ca0cf6f8e76c9ee9274b  libgomp/testsuite/libgomp.c/pr46886.c
--- 101226,101232 ----
  006c9241a06131d8b1ad87c0a7a58349  libgomp/testsuite/libgomp.c/pr42029.c
  9833af43747691db1943582bcdcaaa5c  libgomp/testsuite/libgomp.c/pr42942.c
  3b6d62c4c9f8e8ce4656f6342157558e  libgomp/testsuite/libgomp.c/pr43893.c
! de5d5ccf27e659366817c58bb94fe904  libgomp/testsuite/libgomp.c/pr46032-2.c
  014ad41df9153b87675e7db55d0b87e9  libgomp/testsuite/libgomp.c/pr46032.c
  7063eafd5386ba2fb42b9714bc3c1b6e  libgomp/testsuite/libgomp.c/pr46193.c
  dc156ed1b463ca0cf6f8e76c9ee9274b  libgomp/testsuite/libgomp.c/pr46886.c
*************** fbaa429fdd38498866cb27eca67eb819  libgom
*** 94593,94598 ****
--- 101255,101261 ----
  e768743d2af95f59780e3418077b7e1e  libgomp/testsuite/libgomp.c/pr80853.c
  9116b9dc2c0c3c11fdab95ea2ca66a18  libgomp/testsuite/libgomp.c/pr81687-1.c
  5996dc15da52a000b77c153bb70588f6  libgomp/testsuite/libgomp.c/pr81687-2.c
+ 028299ccbe448518755bf7ecfb2173c4  libgomp/testsuite/libgomp.c/pr81778.c
  d2e99b56eca2603a98c09d8a426f014d  libgomp/testsuite/libgomp.c/pr86416-1.c
  2e46285bc3dd9de6aa9f549109ddeee5  libgomp/testsuite/libgomp.c/pr86416-2.c
  ed00c0e197dcbbf46f44ea320b473f78  libgomp/testsuite/libgomp.c/pr86660.c
*************** ed00c0e197dcbbf46f44ea320b473f78  libgom
*** 94601,94607 ****
  c809670e9df5e9371adcd7582c352fe5  libgomp/testsuite/libgomp.c/pr90811.c
  f8cba5bb3699e3f485284509b6e62be1  libgomp/testsuite/libgomp.c/pr93566.c
  4bb680cff61e18f2ea352bea8bb8c120  libgomp/testsuite/libgomp.c/pr95620.c
! 5f704d7ceb2f2c83dc54e374e9bece7c  libgomp/testsuite/libgomp.c/pr99555-1.c
  2a0a447db3ae892c0c62b0136b00360e  libgomp/testsuite/libgomp.c/priority.c
  1e5ea8fc34fa3f534cb09856ee80711f  libgomp/testsuite/libgomp.c/private-1.c
  a594cebdf052900dd0c8792068e14d85  libgomp/testsuite/libgomp.c/reduction-1.c
--- 101264,101270 ----
  c809670e9df5e9371adcd7582c352fe5  libgomp/testsuite/libgomp.c/pr90811.c
  f8cba5bb3699e3f485284509b6e62be1  libgomp/testsuite/libgomp.c/pr93566.c
  4bb680cff61e18f2ea352bea8bb8c120  libgomp/testsuite/libgomp.c/pr95620.c
! af2c138fc21bc0f119da34585c3c58c3  libgomp/testsuite/libgomp.c/pr99555-1.c
  2a0a447db3ae892c0c62b0136b00360e  libgomp/testsuite/libgomp.c/priority.c
  1e5ea8fc34fa3f534cb09856ee80711f  libgomp/testsuite/libgomp.c/private-1.c
  a594cebdf052900dd0c8792068e14d85  libgomp/testsuite/libgomp.c/reduction-1.c
*************** a2fe1187196581f584947961e875b325  libgom
*** 94661,94667 ****
  e770a162e63a8ef14578c664c60a1609  libgomp/testsuite/libgomp.c/simd-9.c
  21b382f164a90f3510cb97d72b5288b0  libgomp/testsuite/libgomp.c/single-1.c
  f96d46491425528d3d7b30c80c64952a  libgomp/testsuite/libgomp.c/single-2.c
! eed557effb2ec344dd9cfde4cdefdf74  libgomp/testsuite/libgomp.c/sort-1.c
  fe7fdb3688e9cc0090e8bf29500cd119  libgomp/testsuite/libgomp.c/static-chunk-size-one.c
  b100c329df163acfa97656a24a5c1bb9  libgomp/testsuite/libgomp.c/switch-conversion-2.c
  7c841b55fe2c0baa3b9aa8b2656a1d60  libgomp/testsuite/libgomp.c/switch-conversion.c
--- 101324,101330 ----
  e770a162e63a8ef14578c664c60a1609  libgomp/testsuite/libgomp.c/simd-9.c
  21b382f164a90f3510cb97d72b5288b0  libgomp/testsuite/libgomp.c/single-1.c
  f96d46491425528d3d7b30c80c64952a  libgomp/testsuite/libgomp.c/single-2.c
! 0079230a2bd5b5c5b2df0a8093bf2928  libgomp/testsuite/libgomp.c/sort-1.c
  fe7fdb3688e9cc0090e8bf29500cd119  libgomp/testsuite/libgomp.c/static-chunk-size-one.c
  b100c329df163acfa97656a24a5c1bb9  libgomp/testsuite/libgomp.c/switch-conversion-2.c
  7c841b55fe2c0baa3b9aa8b2656a1d60  libgomp/testsuite/libgomp.c/switch-conversion.c
*************** aa5f3d6857ebbdacbc317114429b603a  libgom
*** 94676,94689 ****
  5db64b8d1a5b9e2c35fc058aaf002a15  libgomp/testsuite/libgomp.c/target-20.c
  96268d9b7cf5e004e7d8b46ee3b1fd4c  libgomp/testsuite/libgomp.c/target-21.c
  f2e54a8764788eb33e978b5d31ff89b6  libgomp/testsuite/libgomp.c/target-22.c
! 9f5f96ce25f6f51275700766e888ad21  libgomp/testsuite/libgomp.c/target-23.c
  f9477bd5cd91873e5bdae1efb8919bf2  libgomp/testsuite/libgomp.c/target-24.c
  cfe55d2cd53f9f250f09f4f5fe8f0a26  libgomp/testsuite/libgomp.c/target-25.c
  f10dc3eae15856c4039679f4c4b59813  libgomp/testsuite/libgomp.c/target-26.c
  b19f78bcd8657caada64699a1cf44c50  libgomp/testsuite/libgomp.c/target-27.c
  cfb96280c2ccf2711f5cc008a7b246ae  libgomp/testsuite/libgomp.c/target-28.c
! 3676a99310c885b9ffc9885d81871df4  libgomp/testsuite/libgomp.c/target-29.c
! b7efacf79d1aeccedabb2bb25be9f758  libgomp/testsuite/libgomp.c/target-3.c
  89b93437359f4de22f03c55eb9283547  libgomp/testsuite/libgomp.c/target-30.c
  fb05ccdba2c69c6ada8c59531dc61e6b  libgomp/testsuite/libgomp.c/target-31.c
  dceaa3615119793c5e2cc8a17d2db8bf  libgomp/testsuite/libgomp.c/target-32.c
--- 101339,101352 ----
  5db64b8d1a5b9e2c35fc058aaf002a15  libgomp/testsuite/libgomp.c/target-20.c
  96268d9b7cf5e004e7d8b46ee3b1fd4c  libgomp/testsuite/libgomp.c/target-21.c
  f2e54a8764788eb33e978b5d31ff89b6  libgomp/testsuite/libgomp.c/target-22.c
! 4ce1597f944d0dab5e5edb26f06eb285  libgomp/testsuite/libgomp.c/target-23.c
  f9477bd5cd91873e5bdae1efb8919bf2  libgomp/testsuite/libgomp.c/target-24.c
  cfe55d2cd53f9f250f09f4f5fe8f0a26  libgomp/testsuite/libgomp.c/target-25.c
  f10dc3eae15856c4039679f4c4b59813  libgomp/testsuite/libgomp.c/target-26.c
  b19f78bcd8657caada64699a1cf44c50  libgomp/testsuite/libgomp.c/target-27.c
  cfb96280c2ccf2711f5cc008a7b246ae  libgomp/testsuite/libgomp.c/target-28.c
! 853e83a34241d01c658ccbaf8af52df8  libgomp/testsuite/libgomp.c/target-29.c
! f7a44ccd815684332e17fd32bdd34759  libgomp/testsuite/libgomp.c/target-3.c
  89b93437359f4de22f03c55eb9283547  libgomp/testsuite/libgomp.c/target-30.c
  fb05ccdba2c69c6ada8c59531dc61e6b  libgomp/testsuite/libgomp.c/target-31.c
  dceaa3615119793c5e2cc8a17d2db8bf  libgomp/testsuite/libgomp.c/target-32.c
*************** afd63367e7cb3f8df5a7702805b4f9d2  libgom
*** 94698,94713 ****
  8709eb7110674b1efddc628092eb42bc  libgomp/testsuite/libgomp.c/target-40.c
  c9e80fc96a8f99538398f336cf472679  libgomp/testsuite/libgomp.c/target-41.c
  d067438963387572140642a66e0fc4e4  libgomp/testsuite/libgomp.c/target-42.c
! 860fdb27a5db94a4e91f0fcec6aed4f6  libgomp/testsuite/libgomp.c/target-43.c
! 4dea939b912f361c60b8386c2e6ffb84  libgomp/testsuite/libgomp.c/target-5.c
! 28d4b1be162344df6352a5d813c023fb  libgomp/testsuite/libgomp.c/target-6.c
  a9b2ad991bd60cd4cd6ef4a68071bee6  libgomp/testsuite/libgomp.c/target-7.c
  9249f482d7291a60ed32df9743b496fb  libgomp/testsuite/libgomp.c/target-8.c
  59acb9b212e99b3f1ea3d1a543acdd3d  libgomp/testsuite/libgomp.c/target-9.c
  4e29a1266d0dcad35365d246391e52c3  libgomp/testsuite/libgomp.c/target-critical-1.c
  2c67f32f623ae7d4b5ad5c7688a6acb1  libgomp/testsuite/libgomp.c/target-link-1.c
  7d9530ec8677e1a90e6b3d38859fc1b2  libgomp/testsuite/libgomp.c/target-print-1.c
! f878b54bdd6fc145f9eebe788a29caee  libgomp/testsuite/libgomp.c/target-teams-1.c
  199474ddc91715f45996e095a9f4298a  libgomp/testsuite/libgomp.c/task-1.c
  b07f3ce8ad8f8edece7624d18f5d154d  libgomp/testsuite/libgomp.c/task-2.c
  f7ff00e5f2a30832f7f427c91fa1f61b  libgomp/testsuite/libgomp.c/task-3.c
--- 101361,101378 ----
  8709eb7110674b1efddc628092eb42bc  libgomp/testsuite/libgomp.c/target-40.c
  c9e80fc96a8f99538398f336cf472679  libgomp/testsuite/libgomp.c/target-41.c
  d067438963387572140642a66e0fc4e4  libgomp/testsuite/libgomp.c/target-42.c
! 184b0eef2e27bd122e3088e8c97aa90f  libgomp/testsuite/libgomp.c/target-43.c
! f3838b24aa67138bc997d68ceb604183  libgomp/testsuite/libgomp.c/target-44.c
! 338aba7cb587117b870b6de02f7c8592  libgomp/testsuite/libgomp.c/target-5.c
! ae27a3336844047d494b72607cf843fc  libgomp/testsuite/libgomp.c/target-6.c
  a9b2ad991bd60cd4cd6ef4a68071bee6  libgomp/testsuite/libgomp.c/target-7.c
  9249f482d7291a60ed32df9743b496fb  libgomp/testsuite/libgomp.c/target-8.c
  59acb9b212e99b3f1ea3d1a543acdd3d  libgomp/testsuite/libgomp.c/target-9.c
  4e29a1266d0dcad35365d246391e52c3  libgomp/testsuite/libgomp.c/target-critical-1.c
+ d7cbe25f5829f4d664a461d6ef7327f5  libgomp/testsuite/libgomp.c/target-has-device-addr-3.c
  2c67f32f623ae7d4b5ad5c7688a6acb1  libgomp/testsuite/libgomp.c/target-link-1.c
  7d9530ec8677e1a90e6b3d38859fc1b2  libgomp/testsuite/libgomp.c/target-print-1.c
! 3ec1f30520e033764f5322b77b9ccb08  libgomp/testsuite/libgomp.c/target-teams-1.c
  199474ddc91715f45996e095a9f4298a  libgomp/testsuite/libgomp.c/task-1.c
  b07f3ce8ad8f8edece7624d18f5d154d  libgomp/testsuite/libgomp.c/task-2.c
  f7ff00e5f2a30832f7f427c91fa1f61b  libgomp/testsuite/libgomp.c/task-3.c
*************** d4661425a651c88d20ba240b4b095d25  libgom
*** 94718,94731 ****
  ccf79f1a3cd3d9897f6ea88c19bfbdc8  libgomp/testsuite/libgomp.c/task-reduction-2.c
  e25fde9ed6b03c3c743ea8cf6c8eaa3e  libgomp/testsuite/libgomp.c/task-reduction-3.c
  3b961187e4321fe4d1a657f3f6963089  libgomp/testsuite/libgomp.c/task-reduction-4.c
! 9f2f00d3e1ed329753822b8614fad257  libgomp/testsuite/libgomp.c/teams-1.c
  37b3daacf6336034e4ee7c938d7fc2ef  libgomp/testsuite/libgomp.c/teams-2.c
  8f9a5283e3b48bb452ccf9f17b6bf998  libgomp/testsuite/libgomp.c/teams-3.c
  74e159f134df946b8d2bcebce46c6cf3  libgomp/testsuite/libgomp.c/thread-limit-1.c
! c489925b819c1df0808582fbb2b592cd  libgomp/testsuite/libgomp.c/thread-limit-2.c
! 099b6f9e6fd2c4becb3b005b67c87003  libgomp/testsuite/libgomp.c/thread-limit-3.c
! 6ded7f74bd8b65e15dcfbb69dc9dd7c0  libgomp/testsuite/libgomp.c/thread-limit-4.c
! 690f08837bbda19cd6c9f10de6e3376d  libgomp/testsuite/libgomp.c/thread-limit-5.c
  4e04bd947e2e4aa6b0d33535232575a6  libgomp/testsuite/libgomp.c/udr-2.c
  26a632a90e3b65f74ab6b734c3fd0d94  libgomp/testsuite/libgomp.c/udr-3.c
  edfe0cd950eb6d29688ffe6e38c87d10  libgomp/testsuite/libgomp.c/uns-outer-4.c
--- 101383,101398 ----
  ccf79f1a3cd3d9897f6ea88c19bfbdc8  libgomp/testsuite/libgomp.c/task-reduction-2.c
  e25fde9ed6b03c3c743ea8cf6c8eaa3e  libgomp/testsuite/libgomp.c/task-reduction-3.c
  3b961187e4321fe4d1a657f3f6963089  libgomp/testsuite/libgomp.c/task-reduction-4.c
! f75d1327afda704d612dae70b35ac230  libgomp/testsuite/libgomp.c/teams-1.c
  37b3daacf6336034e4ee7c938d7fc2ef  libgomp/testsuite/libgomp.c/teams-2.c
  8f9a5283e3b48bb452ccf9f17b6bf998  libgomp/testsuite/libgomp.c/teams-3.c
+ 01982ba157671cfd498fc3b3effd6f5d  libgomp/testsuite/libgomp.c/teams-4.c
+ 823e6611a5fcc98ccb7472d8cd3c93bc  libgomp/testsuite/libgomp.c/teams-5.c
  74e159f134df946b8d2bcebce46c6cf3  libgomp/testsuite/libgomp.c/thread-limit-1.c
! 3cdc81bd7b9c658361c933f7a80c7a77  libgomp/testsuite/libgomp.c/thread-limit-2.c
! 014784f1e47ac29bf6638d12861665ec  libgomp/testsuite/libgomp.c/thread-limit-3.c
! 65b122ed46c1c99e052ffdbb6cec4968  libgomp/testsuite/libgomp.c/thread-limit-4.c
! 2c056e80fa07dd3649137bb24e331964  libgomp/testsuite/libgomp.c/thread-limit-5.c
  4e04bd947e2e4aa6b0d33535232575a6  libgomp/testsuite/libgomp.c/udr-2.c
  26a632a90e3b65f74ab6b734c3fd0d94  libgomp/testsuite/libgomp.c/udr-3.c
  edfe0cd950eb6d29688ffe6e38c87d10  libgomp/testsuite/libgomp.c/uns-outer-4.c
*************** edfe0cd950eb6d29688ffe6e38c87d10  libgom
*** 94734,94744 ****
  bc4cd825c8ad15fbafb7f2c60e6cab7c  libgomp/testsuite/libgomp.fortran/affinity1.f90
  a7ba1c005e2c0979fffc63313c6c2d42  libgomp/testsuite/libgomp.fortran/affinity2.f90
  b4e8ed1ab4338f0ccdabc2598d2e0973  libgomp/testsuite/libgomp.fortran/aligned1.f03
! 6b755198be1d78cfe83494a9c5e1b2cb  libgomp/testsuite/libgomp.fortran/alloc-1.F90
  cd56a1c8c06023889e5801d472bfd513  libgomp/testsuite/libgomp.fortran/alloc-2.F90
  7b4c534af5b5bc27d14a0f407856cdef  libgomp/testsuite/libgomp.fortran/alloc-3.F
! 6d561b42c19202f65d0c78524b9803c5  libgomp/testsuite/libgomp.fortran/alloc-4.f90
  6426f3a0ec331dd77abdb2bb4f3f2150  libgomp/testsuite/libgomp.fortran/alloc-5.f90
  20b043532a006fde073387f9a23e4054  libgomp/testsuite/libgomp.fortran/alloc-comp-1.f90
  21463b128d951cea6b4ea41176379b5c  libgomp/testsuite/libgomp.fortran/alloc-comp-2.f90
  678b373acad56382f04e66e2b24bc6c2  libgomp/testsuite/libgomp.fortran/alloc-comp-3.f90
--- 101401,101419 ----
  bc4cd825c8ad15fbafb7f2c60e6cab7c  libgomp/testsuite/libgomp.fortran/affinity1.f90
  a7ba1c005e2c0979fffc63313c6c2d42  libgomp/testsuite/libgomp.fortran/affinity2.f90
  b4e8ed1ab4338f0ccdabc2598d2e0973  libgomp/testsuite/libgomp.fortran/aligned1.f03
! 74fecba59a6fa206dab72abe50117a50  libgomp/testsuite/libgomp.fortran/alloc-1.F90
! 110389787fbadb387faf33ca981ab2b6  libgomp/testsuite/libgomp.fortran/alloc-10.f90
! 9f6a24a5a95f3f5d7ed129143b034230  libgomp/testsuite/libgomp.fortran/alloc-11.f90
! 051205d0ca7ee1afc858e7d1a14aa619  libgomp/testsuite/libgomp.fortran/alloc-12.f90
  cd56a1c8c06023889e5801d472bfd513  libgomp/testsuite/libgomp.fortran/alloc-2.F90
  7b4c534af5b5bc27d14a0f407856cdef  libgomp/testsuite/libgomp.fortran/alloc-3.F
! 5a1ed7f2b92ea2181c5f87db2850c5f5  libgomp/testsuite/libgomp.fortran/alloc-4.f90
  6426f3a0ec331dd77abdb2bb4f3f2150  libgomp/testsuite/libgomp.fortran/alloc-5.f90
+ a8dd8b50efc1eed90947fc4b0fea959c  libgomp/testsuite/libgomp.fortran/alloc-6.f90
+ 1354954216886966384fc22561bbcada  libgomp/testsuite/libgomp.fortran/alloc-7.c
+ 8c8000e76a1e2454cb1e9bab199dadaf  libgomp/testsuite/libgomp.fortran/alloc-7.f90
+ ea7af72aa36d2712b7aaf2af97a4368c  libgomp/testsuite/libgomp.fortran/alloc-8.f90
+ d5aca734d4d8053399b0ca448bae77f3  libgomp/testsuite/libgomp.fortran/alloc-9.f90
  20b043532a006fde073387f9a23e4054  libgomp/testsuite/libgomp.fortran/alloc-comp-1.f90
  21463b128d951cea6b4ea41176379b5c  libgomp/testsuite/libgomp.fortran/alloc-comp-2.f90
  678b373acad56382f04e66e2b24bc6c2  libgomp/testsuite/libgomp.fortran/alloc-comp-3.f90
*************** f483f8ef7a141b36266f9b8a5c59546d  libgom
*** 94754,94759 ****
--- 101429,101436 ----
  7669a222effc45baa99fd7cedbe74954  libgomp/testsuite/libgomp.fortran/allocatable7.f90
  57a1e28c47f5a462deab48ffd84c3a6b  libgomp/testsuite/libgomp.fortran/allocatable8.f90
  4a681bd0d9720d19f48c680c2107b2c5  libgomp/testsuite/libgomp.fortran/allocatable9.f90
+ 0c2f965d6624e70619036c05ca63542f  libgomp/testsuite/libgomp.fortran/allocate-1.c
+ 09de6529e507e5d55e6c9cc8ededc154  libgomp/testsuite/libgomp.fortran/allocate-1.f90
  d69ebafdf43e748e354c0c05228cdd0c  libgomp/testsuite/libgomp.fortran/appendix-a/a.15.1.f90
  3f53f7b5eb9ab9c8cb9eb0edfeedad91  libgomp/testsuite/libgomp.fortran/appendix-a/a.16.1.f90
  7998d91139611d36ffbdf8865cace3da  libgomp/testsuite/libgomp.fortran/appendix-a/a.18.1.f90
*************** f34e0c37442a4a7019dadca0b34ac11d  libgom
*** 94781,94786 ****
--- 101458,101464 ----
  98d8bccda7be1f37deb4ed3aadff389b  libgomp/testsuite/libgomp.fortran/associate1.f90
  ecf54cfe573e26fbe381ec30a4a7f172  libgomp/testsuite/libgomp.fortran/associate2.f90
  04d40d6a13d541010cb348f94b456ffc  libgomp/testsuite/libgomp.fortran/associate3.f90
+ 05348fb88079172a7afba741ecfd402f  libgomp/testsuite/libgomp.fortran/associate4.f90
  6a5fae5c6cd087156772f285d385bdd2  libgomp/testsuite/libgomp.fortran/async_io_1.f90
  180f48790dd0fb14abd20ffdaec2d606  libgomp/testsuite/libgomp.fortran/async_io_2.f90
  01e078c0fdeee0178031bb40903de0a1  libgomp/testsuite/libgomp.fortran/async_io_3.f90
*************** f6bb53d5875b7f5160a51bdb73a74c59  libgom
*** 94790,94795 ****
--- 101468,101474 ----
  4970c9e01930449f7d2a907f094e7afb  libgomp/testsuite/libgomp.fortran/async_io_7.f90
  31240ed1ebd26bf4876192a37ac37526  libgomp/testsuite/libgomp.fortran/async_io_8.f90
  f5bc3f5e91cbec8d383b3212d33c828a  libgomp/testsuite/libgomp.fortran/async_io_9.f90
+ 598d450d401317bf9647c212515ee0a7  libgomp/testsuite/libgomp.fortran/atomic-19.f90
  0cf6fc87987dbd18ee6f54a20ad2c091  libgomp/testsuite/libgomp.fortran/atomic1.f90
  bce2f1f8ced23c00da1bd2f23e448e44  libgomp/testsuite/libgomp.fortran/cancel-do-1.f90
  64e59c91265d33e711e819aef5a418e1  libgomp/testsuite/libgomp.fortran/cancel-do-2.f90
*************** fc21f2cb7745bf59fb29631d4f295c34  libgom
*** 94799,94804 ****
--- 101478,101486 ----
  6f47073d6c8e21623d7f5f1a8632f0f7  libgomp/testsuite/libgomp.fortran/cancel-taskgroup-2.f90
  7bf6c3a195ad06634b2eb63a30d3e53d  libgomp/testsuite/libgomp.fortran/character1.f90
  7808d64d74e885d65679c0932b5bc21f  libgomp/testsuite/libgomp.fortran/character2.f90
+ d84a15d09c10db5703601af8a15f0aa3  libgomp/testsuite/libgomp.fortran/class-firstprivate-1.f90
+ d1358707f830dc28cd411b6695bdb664  libgomp/testsuite/libgomp.fortran/class-firstprivate-2.f90
+ cc9f29b800e6827ef72d92a64dabed77  libgomp/testsuite/libgomp.fortran/class-firstprivate-3.f90
  e8140da74a4301935bdc6003eeff81b7  libgomp/testsuite/libgomp.fortran/close_errors_1.f90
  f010e4e57b08360b6784834bc418f08c  libgomp/testsuite/libgomp.fortran/collapse1.f90
  90b4363d4abd073634838ef99f6e5a0a  libgomp/testsuite/libgomp.fortran/collapse2.f90
*************** c0ebd55529e9baf82532c7b2f51f3fe4  libgom
*** 94821,94829 ****
--- 101503,101516 ----
  764201860dc811d06aced27b2b1a3637  libgomp/testsuite/libgomp.fortran/declare-target-1.f90
  b7af5ebe63291dc93c626e43d6f57175  libgomp/testsuite/libgomp.fortran/declare-target-2.f90
  49813561cddcf22ee10c7f9de89f62c3  libgomp/testsuite/libgomp.fortran/declare-target-3.f90
+ 6f5fe664dff676bc9cc04b850f98d046  libgomp/testsuite/libgomp.fortran/declare-variant-1.f90
+ 645acb6b48e623ae2033047eff79d0d5  libgomp/testsuite/libgomp.fortran/defaultmap-8.f90
  085b168af19aac8a6dd4f31eda256d5c  libgomp/testsuite/libgomp.fortran/depend-1.f90
  f528c60f59b52a75c434ced5c9a53e30  libgomp/testsuite/libgomp.fortran/depend-2.f90
  7ebb6e3f3faa4674c639dfcc079e08dc  libgomp/testsuite/libgomp.fortran/depend-3.f90
+ ebdf8db73d2d54c1902aff5e6421fb14  libgomp/testsuite/libgomp.fortran/depend-4.f90
+ 555a9404bb8537a4e77d4f6182bc9e1a  libgomp/testsuite/libgomp.fortran/depend-iterator-2.f90
+ 31e5e093c62472c7dd338fd5cb6f0a15  libgomp/testsuite/libgomp.fortran/depobj-1.f90
  927ba26a384b46f208146dc741c0d464  libgomp/testsuite/libgomp.fortran/display-affinity-1.f90
  b27fda28ea209679d1fd8dab627e1468  libgomp/testsuite/libgomp.fortran/do1.f90
  e5575c879fa22b33a94ebe42d9cfc7aa  libgomp/testsuite/libgomp.fortran/do2.f90
*************** aa15618c3424182c7ab9976352f3f841  libgom
*** 94832,94843 ****
  7c59966d63fa307ff5b7881bce1f067f  libgomp/testsuite/libgomp.fortran/doacross2.f90
  38a69ab87320a0ee3ca08fccb175ab76  libgomp/testsuite/libgomp.fortran/doacross3.f90
  ebe7ba81e035d4ab86f7804cd541614d  libgomp/testsuite/libgomp.fortran/dummy-procs-1.f90
  e169bdb39b192bb0ba2d9a077ad5ae8c  libgomp/testsuite/libgomp.fortran/examples-4/array_sections-3.f90
  1e5bcb6ccfd3ea2f2a295cd8c630278c  libgomp/testsuite/libgomp.fortran/examples-4/array_sections-4.f90
  8a72bb2fd12ec5cceecab8ac17e825a9  libgomp/testsuite/libgomp.fortran/examples-4/async_target-1.f90
  f89804c676b502687612d8ca7000ed99  libgomp/testsuite/libgomp.fortran/examples-4/async_target-2.f90
! 382975583e1d52df40347c90e3ff9c16  libgomp/testsuite/libgomp.fortran/examples-4/declare_target-1.f90
! a38d5e850eec052d56fc70715e2708da  libgomp/testsuite/libgomp.fortran/examples-4/declare_target-2.f90
  cb66ef79e6c7f88b9a591a9cc6d3389c  libgomp/testsuite/libgomp.fortran/examples-4/declare_target-3.f90
  8ac7d08d2e6d890bd01e78c7110050a6  libgomp/testsuite/libgomp.fortran/examples-4/declare_target-4.f90
  78e2667aa17651cda72b69d7dd97fe16  libgomp/testsuite/libgomp.fortran/examples-4/declare_target-5.f90
--- 101519,101531 ----
  7c59966d63fa307ff5b7881bce1f067f  libgomp/testsuite/libgomp.fortran/doacross2.f90
  38a69ab87320a0ee3ca08fccb175ab76  libgomp/testsuite/libgomp.fortran/doacross3.f90
  ebe7ba81e035d4ab86f7804cd541614d  libgomp/testsuite/libgomp.fortran/dummy-procs-1.f90
+ dbf8d5d52757ffbf204f319b01a6f8ab  libgomp/testsuite/libgomp.fortran/error-1.f90
  e169bdb39b192bb0ba2d9a077ad5ae8c  libgomp/testsuite/libgomp.fortran/examples-4/array_sections-3.f90
  1e5bcb6ccfd3ea2f2a295cd8c630278c  libgomp/testsuite/libgomp.fortran/examples-4/array_sections-4.f90
  8a72bb2fd12ec5cceecab8ac17e825a9  libgomp/testsuite/libgomp.fortran/examples-4/async_target-1.f90
  f89804c676b502687612d8ca7000ed99  libgomp/testsuite/libgomp.fortran/examples-4/async_target-2.f90
! 9368d34e0bb2e5f9af0c850113adaaed  libgomp/testsuite/libgomp.fortran/examples-4/declare_target-1.f90
! 0cd54428a58212635e7b72f7eea6666c  libgomp/testsuite/libgomp.fortran/examples-4/declare_target-2.f90
  cb66ef79e6c7f88b9a591a9cc6d3389c  libgomp/testsuite/libgomp.fortran/examples-4/declare_target-3.f90
  8ac7d08d2e6d890bd01e78c7110050a6  libgomp/testsuite/libgomp.fortran/examples-4/declare_target-4.f90
  78e2667aa17651cda72b69d7dd97fe16  libgomp/testsuite/libgomp.fortran/examples-4/declare_target-5.f90
*************** a0fea6593244c117295ec1c75e63b64f  libgom
*** 94877,94882 ****
--- 101565,101573 ----
  02624408febf6ba2958380cf587a6f5f  libgomp/testsuite/libgomp.fortran/examples-4/teams-5.f90
  e3121f156cff11c333c32e13f4f02f1c  libgomp/testsuite/libgomp.fortran/examples-4/teams-6.f90
  f221242394d1d1eed14fbd76d9a03c2f  libgomp/testsuite/libgomp.fortran/fortran.exp
+ 0ae624aa05c8819f276790b584877c30  libgomp/testsuite/libgomp.fortran/icv-3.f90
+ 26eb6b7434134ddb541ef3c1b84cd77c  libgomp/testsuite/libgomp.fortran/icv-4.f90
+ 6b05d305be8a6a014f76bf8c1b289fec  libgomp/testsuite/libgomp.fortran/icv-8.f90
  1d7f490f3aa22662cdd277712b26a462  libgomp/testsuite/libgomp.fortran/is_device_ptr-1.f90
  c25692d207e679ebce7864339e12a85f  libgomp/testsuite/libgomp.fortran/jacobi.f
  de6f55a3f86dc416877253cfdf1ab448  libgomp/testsuite/libgomp.fortran/lastprivate-conditional-10.f90
*************** edb8cf0884ac73fb59ab5c66f1acb3ad  libgom
*** 94890,94895 ****
--- 101581,101588 ----
  12b2386c008a817a32688ca1ae228c42  libgomp/testsuite/libgomp.fortran/lock-2.f90
  f4ad2acbc3bf213777f658e4581eb805  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-1.f90
  794f9311ffd6c98b9329dc06aa6a39e3  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-2.f90
+ 235b8f3fb869589084e0e80ba5622db7  libgomp/testsuite/libgomp.fortran/masked-1.f90
+ 835cd687e20bf1f2c12df594c245ecdc  libgomp/testsuite/libgomp.fortran/my-usleep.c
  34e118b4de7cfbd20c7427abb1d4c7e5  libgomp/testsuite/libgomp.fortran/nested1.f90
  d85fd25e4c208bee65d5780465935a3c  libgomp/testsuite/libgomp.fortran/nestedfn1.f90
  7aabebf18cc6b5bbbdc0f8f4a85f1a60  libgomp/testsuite/libgomp.fortran/nestedfn2.f90
*************** c910dfe57b9f53b8992d397c3571fd09  libgom
*** 94917,94923 ****
--- 101610,101620 ----
  3e8aa59e7a86d28bacafdfab584f0a22  libgomp/testsuite/libgomp.fortran/on_device_arch.c
  8aa12e7dad422c429a80a15a029ca3b8  libgomp/testsuite/libgomp.fortran/openmp_version-1.f
  652c29cde1daaffead2dae0cc54aa9a7  libgomp/testsuite/libgomp.fortran/openmp_version-2.f90
+ b12d43efd39917600c23bdbe6e67c348  libgomp/testsuite/libgomp.fortran/optional-bind-c.f90
  57b1c325fdc9d4288e335bb56037d1c3  libgomp/testsuite/libgomp.fortran/optional-map.f90
+ a48363ff5c5386125ca1682709e2407e  libgomp/testsuite/libgomp.fortran/order-reproducible-1.f90
+ 678634fe2094e6d71d4d8dc3b1c1206f  libgomp/testsuite/libgomp.fortran/order-reproducible-2.f90
+ 84abc52abece939c2fa04b3d3d942da7  libgomp/testsuite/libgomp.fortran/parallel-master.f90
  18632f821c4d20cc8ddfb8b182ae7d87  libgomp/testsuite/libgomp.fortran/parloops-exit-first-loop-alt-2.f95
  b018601a4e35da4037b1e04dfdb00b98  libgomp/testsuite/libgomp.fortran/parloops-exit-first-loop-alt.f95
  10f51539240fd456f44686f1368a9ebb  libgomp/testsuite/libgomp.fortran/pointer1.f90
*************** a446018edae19a61aa6c9d823e6b9bf1  libgom
*** 94964,94969 ****
--- 101661,101667 ----
  0a4b33df6b5e6f6d6670ba0af38eee36  libgomp/testsuite/libgomp.fortran/pr84418-2.f90
  c7db4b5dee9ac08d55532ef8375a0a44  libgomp/testsuite/libgomp.fortran/pr88463-1.f90
  10dbdf5281da9c9f304148a51eebb319  libgomp/testsuite/libgomp.fortran/pr88463-2.f90
+ ed9fbe24202460ac0d1324b917a21848  libgomp/testsuite/libgomp.fortran/pr90030.f90
  6a708c6e46808f6d4af2fd68ad5aac1a  libgomp/testsuite/libgomp.fortran/pr90779.f90
  525a2158ec6cd5547def75322fa30912  libgomp/testsuite/libgomp.fortran/pr93553.f90
  8b1a074bf6ac8ea5010df757cd5d381f  libgomp/testsuite/libgomp.fortran/pr95654.f90
*************** b86e035d24babf0c6f9d3607c02b652e  libgom
*** 94975,94985 ****
--- 101673,101685 ----
  5899f176a17d8eba0edb298b174173b3  libgomp/testsuite/libgomp.fortran/reduction4.f90
  6525e29cdea318e59633c8df34a55c9c  libgomp/testsuite/libgomp.fortran/reduction5.f90
  cb3013075cd476e0aa06ce0539ce8956  libgomp/testsuite/libgomp.fortran/reduction6.f90
+ 304da9196843372885093e5cacce568e  libgomp/testsuite/libgomp.fortran/refcount-1.f90
  ad73f3cdfa6093602117e056e552a92e  libgomp/testsuite/libgomp.fortran/reference1.f90
  50d442710afd759c4aa50c0567fff8cb  libgomp/testsuite/libgomp.fortran/reference2.f90
  87ff32e5b6410cb8d684b7aa6daa7822  libgomp/testsuite/libgomp.fortran/retval1.f90
  fcd96d03b20dba6577d8b95c225c2827  libgomp/testsuite/libgomp.fortran/retval2.f90
  f94173449f0106660c3c83b7da6eb1b2  libgomp/testsuite/libgomp.fortran/scan-1.f90
+ fbdab6e5a5617405737d6de640e5197a  libgomp/testsuite/libgomp.fortran/scope-1.f90
  e4cf951d5826f38fd2445b2bd21a6f3b  libgomp/testsuite/libgomp.fortran/sharing1.f90
  fb3e4ec0015a50f8ddd3f6a1306e2627  libgomp/testsuite/libgomp.fortran/sharing2.f90
  4b323aab0234bc26e21f874065725efd  libgomp/testsuite/libgomp.fortran/simd1.f90
*************** c404adfb5e1e175f034e3ec64a2d8553  libgom
*** 94994,95009 ****
--- 101694,101717 ----
  b0c4d7d8991d26105163a63641eb9f46  libgomp/testsuite/libgomp.fortran/struct-elem-map-1.f90
  662ace7f2e660ef85ab05666191e4606  libgomp/testsuite/libgomp.fortran/tabs1.f90
  6bdb484b10f4cf6e378b081ae20083f6  libgomp/testsuite/libgomp.fortran/tabs2.f
+ 279ecf43b0faaaf75e9e77dd8d9db7df  libgomp/testsuite/libgomp.fortran/target-12.f90
  063a24dc5c19b2adb2c5fcb0b05a58a4  libgomp/testsuite/libgomp.fortran/target-allocatable-1-1.f90
  89c53be6c76a8902941180b26848ae9b  libgomp/testsuite/libgomp.fortran/target-allocatable-1-2.f90
  f3e9642d4302feea21de2d2b9f5ca654  libgomp/testsuite/libgomp.fortran/target-enter-data-1.f90
  10cc37e35fda6c7ed2cff8cf2f9f8371  libgomp/testsuite/libgomp.fortran/target-enter-data-2.F90
+ 6069ee87a3235563ba19c231c5d6c1e5  libgomp/testsuite/libgomp.fortran/target-has-device-addr-1.f90
+ 59c61dfb9aba411df68fdeed8f3c5659  libgomp/testsuite/libgomp.fortran/target-has-device-addr-2.f90
+ 9ddb3d9bf13556db631c8e466cc523cc  libgomp/testsuite/libgomp.fortran/target-has-device-addr-3.f90
+ 9ae0f32be5dff9e05029e020cf6af7de  libgomp/testsuite/libgomp.fortran/target-has-device-addr-4.f90
+ 49908b2e3663c182a2478e5f28929c6d  libgomp/testsuite/libgomp.fortran/target-in-reduction-1.f90
+ c604509b615d707812822a4f9559faca  libgomp/testsuite/libgomp.fortran/target-in-reduction-2.f90
  c8674726b7e6d033a64557c340289db9  libgomp/testsuite/libgomp.fortran/target-map-1.f90
  7e2f3e496520976a37df3ba992f7f69a  libgomp/testsuite/libgomp.fortran/target-print-1-nvptx.f90
  bc18d7dcb406b7660308046e178bba0d  libgomp/testsuite/libgomp.fortran/target-print-1.f90
  b7c20b004458fd9909db3090ddfcd1d8  libgomp/testsuite/libgomp.fortran/target-simd.f90
  06e3ddc01cecc71c2af49a64f38f6a88  libgomp/testsuite/libgomp.fortran/target-var.f90
  1db1fe2cc8dbdf1b311a5f49a4004ed7  libgomp/testsuite/libgomp.fortran/target1.f90
+ 374411f76e4795c5d814b344336afd31  libgomp/testsuite/libgomp.fortran/target10.f90
  cd35897c72fe52157d20924875a4168f  libgomp/testsuite/libgomp.fortran/target2.f90
  b49956429e82860e59f365f5e6797a44  libgomp/testsuite/libgomp.fortran/target3.f90
  efb13688b8f5b12df4f386ca40cc687d  libgomp/testsuite/libgomp.fortran/target4.f90
*************** dcfe27eb9dec5095293470aaba48e94a  libgom
*** 95020,95040 ****
  2684d47a634cb6a69da9f20d4837c35c  libgomp/testsuite/libgomp.fortran/task-detach-3.f90
  034c0352697e1a21933626072ccb4d81  libgomp/testsuite/libgomp.fortran/task-detach-4.f90
  247136c819572f09a1c2db8e5f41ed1d  libgomp/testsuite/libgomp.fortran/task-detach-5.f90
! fa9e29d2f58ab9c04a5bc5a1a3876da2  libgomp/testsuite/libgomp.fortran/task-detach-6.f90
  590b516f04de7ece4ed42eb82e4c487f  libgomp/testsuite/libgomp.fortran/task-detach-7.f90
  a46ae26255d516b8ed937dff6c28ec1d  libgomp/testsuite/libgomp.fortran/task-detach-8.f90
  f2450ae8387ba84e68f4b97807a8092e  libgomp/testsuite/libgomp.fortran/task-detach-9.f90
  113de27610157d8cdd9794598566ad24  libgomp/testsuite/libgomp.fortran/task1.f90
  2675d60a88dcd376d85a3b69e41997be  libgomp/testsuite/libgomp.fortran/task2.f90
  d0a3dcc41da194a892e1d5818a58e3fb  libgomp/testsuite/libgomp.fortran/task3.f90
  523ce5caff5510694abd586f24292b20  libgomp/testsuite/libgomp.fortran/task4.f90
  bfc1ea546298a904dc9793533995a768  libgomp/testsuite/libgomp.fortran/taskgroup1.f90
  e51a40daef7d1ce1e50dfdd1b278cad2  libgomp/testsuite/libgomp.fortran/taskloop1.f90
  98a35e139eeb4252f32bce147d6909a7  libgomp/testsuite/libgomp.fortran/taskloop2.f90
  beee9d3f7311fb5afea95ed2904ade4d  libgomp/testsuite/libgomp.fortran/taskloop3.f90
  5abe0f692be4e8a434110d635cdfc8ad  libgomp/testsuite/libgomp.fortran/taskloop4.f90
! 346d467e4a3734eae3741cf486561f31  libgomp/testsuite/libgomp.fortran/teams1.f90
  271e42e9ae5699ce11bdb626da4f303e  libgomp/testsuite/libgomp.fortran/teams2.f90
  68c582cd53392d927b924261c0a0a9ae  libgomp/testsuite/libgomp.fortran/threadprivate1.f90
  25a920544d3094734b29affc551ff0ef  libgomp/testsuite/libgomp.fortran/threadprivate2.f90
  d846e2b2160ea0523761005dd9a5d3b1  libgomp/testsuite/libgomp.fortran/threadprivate3.f90
--- 101728,101755 ----
  2684d47a634cb6a69da9f20d4837c35c  libgomp/testsuite/libgomp.fortran/task-detach-3.f90
  034c0352697e1a21933626072ccb4d81  libgomp/testsuite/libgomp.fortran/task-detach-4.f90
  247136c819572f09a1c2db8e5f41ed1d  libgomp/testsuite/libgomp.fortran/task-detach-5.f90
! 70f3f40c381cf40831b26a1a2340cd02  libgomp/testsuite/libgomp.fortran/task-detach-6.f90
  590b516f04de7ece4ed42eb82e4c487f  libgomp/testsuite/libgomp.fortran/task-detach-7.f90
  a46ae26255d516b8ed937dff6c28ec1d  libgomp/testsuite/libgomp.fortran/task-detach-8.f90
  f2450ae8387ba84e68f4b97807a8092e  libgomp/testsuite/libgomp.fortran/task-detach-9.f90
+ bae89551c4694717d5718528c9850482  libgomp/testsuite/libgomp.fortran/task-reduction-16.f90
  113de27610157d8cdd9794598566ad24  libgomp/testsuite/libgomp.fortran/task1.f90
  2675d60a88dcd376d85a3b69e41997be  libgomp/testsuite/libgomp.fortran/task2.f90
  d0a3dcc41da194a892e1d5818a58e3fb  libgomp/testsuite/libgomp.fortran/task3.f90
  523ce5caff5510694abd586f24292b20  libgomp/testsuite/libgomp.fortran/task4.f90
  bfc1ea546298a904dc9793533995a768  libgomp/testsuite/libgomp.fortran/taskgroup1.f90
+ c9c4d723d5254054cedfb5321c1b70cb  libgomp/testsuite/libgomp.fortran/taskloop-4-a.f90
+ 11820e6843f3af18630ad738c12da444  libgomp/testsuite/libgomp.fortran/taskloop-4.f90
+ d9e8c07a801ee1bdffafe507313615c5  libgomp/testsuite/libgomp.fortran/taskloop-5-a.f90
+ 1cc10f7fc4b5391fe705322e13935a9a  libgomp/testsuite/libgomp.fortran/taskloop-5.f90
  e51a40daef7d1ce1e50dfdd1b278cad2  libgomp/testsuite/libgomp.fortran/taskloop1.f90
  98a35e139eeb4252f32bce147d6909a7  libgomp/testsuite/libgomp.fortran/taskloop2.f90
  beee9d3f7311fb5afea95ed2904ade4d  libgomp/testsuite/libgomp.fortran/taskloop3.f90
  5abe0f692be4e8a434110d635cdfc8ad  libgomp/testsuite/libgomp.fortran/taskloop4.f90
! b13aebac7e571badd867d06964d3a1e1  libgomp/testsuite/libgomp.fortran/teams-1.f90
! 0021d93b0355ac35973e30744eb38ede  libgomp/testsuite/libgomp.fortran/teams1.f90
  271e42e9ae5699ce11bdb626da4f303e  libgomp/testsuite/libgomp.fortran/teams2.f90
+ 30dae12b09e369f6009c8f42f445b919  libgomp/testsuite/libgomp.fortran/thread-limit-1.f90
  68c582cd53392d927b924261c0a0a9ae  libgomp/testsuite/libgomp.fortran/threadprivate1.f90
  25a920544d3094734b29affc551ff0ef  libgomp/testsuite/libgomp.fortran/threadprivate2.f90
  d846e2b2160ea0523761005dd9a5d3b1  libgomp/testsuite/libgomp.fortran/threadprivate3.f90
*************** b1f5d4bd212151ec10ee5fcb2e86e8a9  libgom
*** 95060,95065 ****
--- 101775,101781 ----
  0f0739055024a52f6c6062614fefcd20  libgomp/testsuite/libgomp.fortran/use_device_addr-4.f90
  27c3a980a8e94305bd6a957c7ea5dbd8  libgomp/testsuite/libgomp.fortran/use_device_ptr-1.f90
  d58b22d6389008961e84f8a1b3d9a8f9  libgomp/testsuite/libgomp.fortran/use_device_ptr-3.f90
+ 421b0a816a39ae625f4e8f4f91b3671d  libgomp/testsuite/libgomp.fortran/use_device_ptr-4.f90
  5b0545422a5d32741adf1b28e189108a  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-1.f90
  95257bb64bc7b70916e7cf5e4c13ac0a  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-2.f90
  2b347c1c7f2cbe98905e1b48f453f08c  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-3.f90
*************** bf94ef977afb5353c18948ce9e602bfa  libgom
*** 95078,95094 ****
  e7a61a11b74fb8e2e4d71f7a03078500  libgomp/testsuite/libgomp.graphite/force-parallel-1.c
  79fedad6d75bdc436c74c6ccabd1c317  libgomp/testsuite/libgomp.graphite/force-parallel-2.c
  7a00417999c02913b99a84c786868fd1  libgomp/testsuite/libgomp.graphite/force-parallel-3.c
! 6369565331031cf511f9670392b1a404  libgomp/testsuite/libgomp.graphite/force-parallel-4.c
! dfab06ac93e94d1581d8686cae036318  libgomp/testsuite/libgomp.graphite/force-parallel-5.c
  bc89329871a4063322c6c6a75033c327  libgomp/testsuite/libgomp.graphite/force-parallel-6.c
  c7c454ddd0e7815a3bcc65d728543f0c  libgomp/testsuite/libgomp.graphite/force-parallel-7.c
! 5a66165f62acdcd93ac4a96fd04c5e7c  libgomp/testsuite/libgomp.graphite/force-parallel-8.c
  afbfc00298798c7c56e3095384ac408a  libgomp/testsuite/libgomp.graphite/force-parallel-9.c
! 5a1b6bfa5ae68b138afdba21d69ff0c4  libgomp/testsuite/libgomp.graphite/graphite.exp
  b274f32716465c48bfe021ad40ae5184  libgomp/testsuite/libgomp.graphite/pr41118.c
  a8440c7128038abbec4c5b0b8e057565  libgomp/testsuite/libgomp.oacc-c++/c++.exp
  453e6f1d9f502042e4ee6b8e52564c6a  libgomp/testsuite/libgomp.oacc-c++/cache-1.C
! b27cecd237d0e2ce459988833e90f28a  libgomp/testsuite/libgomp.oacc-c++/declare-1.C
  d4976186c6059f98d3a33b36f5c4d896  libgomp/testsuite/libgomp.oacc-c++/declare-pr94120.C
  d0be357251fa9b81f47dc517c6dcf8d4  libgomp/testsuite/libgomp.oacc-c++/deep-copy-12.C
  a924aab65a7c7201de2adf4968e8e2e6  libgomp/testsuite/libgomp.oacc-c++/deep-copy-13.C
--- 101794,101810 ----
  e7a61a11b74fb8e2e4d71f7a03078500  libgomp/testsuite/libgomp.graphite/force-parallel-1.c
  79fedad6d75bdc436c74c6ccabd1c317  libgomp/testsuite/libgomp.graphite/force-parallel-2.c
  7a00417999c02913b99a84c786868fd1  libgomp/testsuite/libgomp.graphite/force-parallel-3.c
! 15a27db8e574f52b5f617f056c72aa78  libgomp/testsuite/libgomp.graphite/force-parallel-4.c
! d06f20463c71cc18a245131e421c6e37  libgomp/testsuite/libgomp.graphite/force-parallel-5.c
  bc89329871a4063322c6c6a75033c327  libgomp/testsuite/libgomp.graphite/force-parallel-6.c
  c7c454ddd0e7815a3bcc65d728543f0c  libgomp/testsuite/libgomp.graphite/force-parallel-7.c
! ef7b761ee578290c488dcfb7c28a0b66  libgomp/testsuite/libgomp.graphite/force-parallel-8.c
  afbfc00298798c7c56e3095384ac408a  libgomp/testsuite/libgomp.graphite/force-parallel-9.c
! f7f04705cef0b98de36866c93b875ee6  libgomp/testsuite/libgomp.graphite/graphite.exp
  b274f32716465c48bfe021ad40ae5184  libgomp/testsuite/libgomp.graphite/pr41118.c
  a8440c7128038abbec4c5b0b8e057565  libgomp/testsuite/libgomp.oacc-c++/c++.exp
  453e6f1d9f502042e4ee6b8e52564c6a  libgomp/testsuite/libgomp.oacc-c++/cache-1.C
! 0af65ee2314145d77cef7ebd9e651556  libgomp/testsuite/libgomp.oacc-c++/declare-1.C
  d4976186c6059f98d3a33b36f5c4d896  libgomp/testsuite/libgomp.oacc-c++/declare-pr94120.C
  d0be357251fa9b81f47dc517c6dcf8d4  libgomp/testsuite/libgomp.oacc-c++/deep-copy-12.C
  a924aab65a7c7201de2adf4968e8e2e6  libgomp/testsuite/libgomp.oacc-c++/deep-copy-13.C
*************** a924aab65a7c7201de2adf4968e8e2e6  libgom
*** 95096,95101 ****
--- 101812,101819 ----
  a336b372fbba053cbc1902f7a2bf87d7  libgomp/testsuite/libgomp.oacc-c++/non-scalar-data.C
  8c2a8c355da4844ae1d1a8608c1274f3  libgomp/testsuite/libgomp.oacc-c++/pr71959-aux.cc
  b3bb9cd7e87ab639790a4db7f6dbd451  libgomp/testsuite/libgomp.oacc-c++/pr71959.C
+ 7cf085e4cd9232a234391a24598f031e  libgomp/testsuite/libgomp.oacc-c++/privatized-ref-2.C
+ 7c276dbb0b80b21e1156186b75f899c8  libgomp/testsuite/libgomp.oacc-c++/privatized-ref-3.C
  b4fc04813771a8801e90ced112679b03  libgomp/testsuite/libgomp.oacc-c++/ref-1.C
  52de558ab1f71976b5d4c5322833f779  libgomp/testsuite/libgomp.oacc-c++/routine-1-auto.C
  7066b1f0e219a735525b6a8e131b7be4  libgomp/testsuite/libgomp.oacc-c++/routine-1-template-auto.C
*************** dcef4e59a85d0709464c0a18f8106c53  libgom
*** 95120,95126 ****
  2621742288741202fe390b6f70ca54c4  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property-aux.c
  f4167c1c583a543e5b5024652b6d74be  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property-gcn.c
  5a4f7ebc57b87f5bfae177b2506c9e4f  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property-host.c
! c3c9fa961f1d931be3d81797e818f7ec  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property-nvptx.c
  49c9709dccc76f20b3a5c5ffd8092842  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property.c
  9b2b9267c4c3d581c9d093234fd782d6  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_map_data-device_already-1.c
  779971f95813afa361e9fafa83f489c9  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_map_data-device_already-2.c
--- 101838,101844 ----
  2621742288741202fe390b6f70ca54c4  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property-aux.c
  f4167c1c583a543e5b5024652b6d74be  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property-gcn.c
  5a4f7ebc57b87f5bfae177b2506c9e4f  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property-host.c
! e52bf66ad30053b87fac627a1f4109d6  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property-nvptx.c
  49c9709dccc76f20b3a5c5ffd8092842  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_get_property.c
  9b2b9267c4c3d581c9d093234fd782d6  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_map_data-device_already-1.c
  779971f95813afa361e9fafa83f489c9  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_map_data-device_already-2.c
*************** c3c9fa961f1d931be3d81797e818f7ec  libgom
*** 95128,95147 ****
  63ff72d59e981e772ed78cb7307de12e  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_map_data-host_already-1.c
  d36c56b9b161368fbce8efe09449dbf6  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_map_data-host_already-2.c
  01102bb5cd8ca990a37df199ebd6f6dd  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_map_data-host_already-3.c
! 4172e47fb7e2cd81c1f9cf658c548fe7  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_on_device-1.c
  05b66fbd6c12c103181fc52d3bf21146  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-dispatch-1.c
! ee86294172ad7f6067afff8b162ae571  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-init-1.c
  f6d412d14f2b49d85657fb6dc68aa171  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-init-2.c
! 3f3763aa0692a9bb9cd30bf7bd378f3e  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-kernels-1.c
! 2dee86d6d035ae512f59bcf4cfffb2ec  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-parallel-1.c
  4c138d368db7fdb266456704e2b0ce53  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-valid_bytes-1.c
  adc5b169933ec8730cb4f35d90e4f00e  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-version-1.c
  e9972d1ff25595900bd2b8672f16f20e  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_set_cuda_stream-1.c
  a7e8657476ab5ede649a5fcf9baad94a  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_unmap_data-pr92840-1.c
  54812e832ddf85e7fd8af7436d4d5af0  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_unmap_data-pr92840-2.c
  9dd10bf030f3652c0a29655dd4362ded  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_unmap_data-pr92840-3.c
! 19588d7b4d1252e37ad20d1584475a21  libgomp/testsuite/libgomp.oacc-c-c++-common/async_queue-1.c
! f7a9b184b1fef89d4ba1d7e2bfcef9c5  libgomp/testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c
  42da18fa72387c734c218d031aca73cc  libgomp/testsuite/libgomp.oacc-c-c++-common/asyncwait-nop-1.c
  cb001e314fc2dbfe743f56e927a54dce  libgomp/testsuite/libgomp.oacc-c-c++-common/atomic_capture-1.c
  fbdb79613c9e4039ef079c21db73e11f  libgomp/testsuite/libgomp.oacc-c-c++-common/atomic_capture-2.c
--- 101846,101867 ----
  63ff72d59e981e772ed78cb7307de12e  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_map_data-host_already-1.c
  d36c56b9b161368fbce8efe09449dbf6  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_map_data-host_already-2.c
  01102bb5cd8ca990a37df199ebd6f6dd  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_map_data-host_already-3.c
! 5e49a4a09577b3e3af65ed5092bde13c  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_on_device-1.c
  05b66fbd6c12c103181fc52d3bf21146  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-dispatch-1.c
! c20cad710294b1d13c0dc2b1460754f2  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-init-1.c
  f6d412d14f2b49d85657fb6dc68aa171  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-init-2.c
! b2386b6e82a8615256cb0f88cec84c98  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-kernels-1.c
! 11879bc5a4a630c37b6a1aaddf423be4  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-parallel-1.c
  4c138d368db7fdb266456704e2b0ce53  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-valid_bytes-1.c
  adc5b169933ec8730cb4f35d90e4f00e  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_prof-version-1.c
  e9972d1ff25595900bd2b8672f16f20e  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_set_cuda_stream-1.c
  a7e8657476ab5ede649a5fcf9baad94a  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_unmap_data-pr92840-1.c
  54812e832ddf85e7fd8af7436d4d5af0  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_unmap_data-pr92840-2.c
  9dd10bf030f3652c0a29655dd4362ded  libgomp/testsuite/libgomp.oacc-c-c++-common/acc_unmap_data-pr92840-3.c
! 2c71b291e5476e4e449fa13bbd566c1a  libgomp/testsuite/libgomp.oacc-c-c++-common/async-data-1-1.c
! 6b1a06ba5f5ac82fe51f11935570e0a2  libgomp/testsuite/libgomp.oacc-c-c++-common/async-data-1-2.c
! 5ae131e3ed8fc439e1a9ec4e18e29c7b  libgomp/testsuite/libgomp.oacc-c-c++-common/async_queue-1.c
! d0b652b80b3e4d13706f3a30d89ea080  libgomp/testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c
  42da18fa72387c734c218d031aca73cc  libgomp/testsuite/libgomp.oacc-c-c++-common/asyncwait-nop-1.c
  cb001e314fc2dbfe743f56e927a54dce  libgomp/testsuite/libgomp.oacc-c-c++-common/atomic_capture-1.c
  fbdb79613c9e4039ef079c21db73e11f  libgomp/testsuite/libgomp.oacc-c-c++-common/atomic_capture-2.c
*************** fbdb79613c9e4039ef079c21db73e11f  libgom
*** 95149,95154 ****
--- 101869,101875 ----
  97f62618e6e37c14b2b9ed17c7579fd0  libgomp/testsuite/libgomp.oacc-c-c++-common/atomic_rw-1.c
  276fea47eb47f5b846d12e7f4013aaa1  libgomp/testsuite/libgomp.oacc-c-c++-common/atomic_update-1.c
  760e768bc422654e755f3164d717aedf  libgomp/testsuite/libgomp.oacc-c-c++-common/broadcast-1.c
+ 94d1532a32ff2ffcfd5af7af5987f316  libgomp/testsuite/libgomp.oacc-c-c++-common/broadcast-many.c
  0a33cf211c67bd74c537cc1a4e87d1cc  libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c
  7075fc6b02473e696cc6447d68b597a9  libgomp/testsuite/libgomp.oacc-c-c++-common/clauses-1.c
  e69ad21264603585ada7277411b59fab  libgomp/testsuite/libgomp.oacc-c-c++-common/clauses-2.c
*************** a4310590c76fb5671abb7e599593076d  libgom
*** 95158,95186 ****
  c32e2956c7c1bb85bd85fa3aecfc50c5  libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-4.c
  19f2f5601f95ec58b09b95258b0818b1  libgomp/testsuite/libgomp.oacc-c-c++-common/combined-directives-1.c
  958046e6274805975b0db25945fb2609  libgomp/testsuite/libgomp.oacc-c-c++-common/combined-reduction.c
! e05819eb64665eb66c2eec740735e4b1  libgomp/testsuite/libgomp.oacc-c-c++-common/context-1.c
! 493580dbb806c45bdac06799ecfcc701  libgomp/testsuite/libgomp.oacc-c-c++-common/context-2.c
! 530d486e8208e784c6423e5e08dcaeae  libgomp/testsuite/libgomp.oacc-c-c++-common/context-3.c
! 7af5972830c241acce9cd62ea9a8e2a8  libgomp/testsuite/libgomp.oacc-c-c++-common/context-4.c
  98ea87c8193e01406d01d50c3ec22bcf  libgomp/testsuite/libgomp.oacc-c-c++-common/crash-1.c
  c826235c3b755ef2376b379ef9b17203  libgomp/testsuite/libgomp.oacc-c-c++-common/data-1.c
  7e1e83302151387dcf74e27731218cf5  libgomp/testsuite/libgomp.oacc-c-c++-common/data-2-lib.c
  da21f3624167531fae9d51550d12335d  libgomp/testsuite/libgomp.oacc-c-c++-common/data-2.c
  a0826470352b3d00ca5ad532634a1535  libgomp/testsuite/libgomp.oacc-c-c++-common/data-3.c
! 855e07ee7e3665485bf516306238e1df  libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels-ipa-pta.c
  9b6dd5748b288e6ce971d52df9236ac5  libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels.c
! 45640f334180a1e83d97a2929873a0f5  libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel-ipa-pta.c
  39c565e9118017aa2f98b6fe6a26e964  libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel.c
  6869d0b2a43e3202ad2f6ece707b9cf2  libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses.h
  f33096223f3058b45355d180ea6b4b0a  libgomp/testsuite/libgomp.oacc-c-c++-common/data-firstprivate-1.c
  7cd99264c02421d4c3ea21bb20145a21  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-1.c
  ce24e046c5347f93b3d94f41af63f083  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-2.c
! 00535f53258bc361a4c8f866fec0f25e  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-3.c
  ebb8f3adc650c08eeaf1e77a9b7084d4  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-4.c
  22918a096aad8e89d005adba57f4568d  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-5.c
! 95bfbb7b9d1551a2ef52542dae69b25a  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c
! b31aa7619a0bd38041bb74c411d3f21f  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose.c
! 9492c467f79eeae532b409d7b23b0631  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla.c
  87e0504dda48475fd0f053b8ce73c933  libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-1.c
  4fa07035c293b9ed9e4dc0c2e01511da  libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-10.c
  0b25a866f5d087c91925337a99617ee2  libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-11.c
--- 101879,101905 ----
  c32e2956c7c1bb85bd85fa3aecfc50c5  libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-4.c
  19f2f5601f95ec58b09b95258b0818b1  libgomp/testsuite/libgomp.oacc-c-c++-common/combined-directives-1.c
  958046e6274805975b0db25945fb2609  libgomp/testsuite/libgomp.oacc-c-c++-common/combined-reduction.c
! 071d4357b571294fc6eb7626dbb3c5d3  libgomp/testsuite/libgomp.oacc-c-c++-common/context-1.c
! c142e6b017d258e84ac7590f6d272afe  libgomp/testsuite/libgomp.oacc-c-c++-common/context-2.c
! 6e2e83952679f7b4509f40598d6f8176  libgomp/testsuite/libgomp.oacc-c-c++-common/context-3.c
! e86facfc6fa8df609d9a6cd8bda4558b  libgomp/testsuite/libgomp.oacc-c-c++-common/context-4.c
  98ea87c8193e01406d01d50c3ec22bcf  libgomp/testsuite/libgomp.oacc-c-c++-common/crash-1.c
  c826235c3b755ef2376b379ef9b17203  libgomp/testsuite/libgomp.oacc-c-c++-common/data-1.c
  7e1e83302151387dcf74e27731218cf5  libgomp/testsuite/libgomp.oacc-c-c++-common/data-2-lib.c
  da21f3624167531fae9d51550d12335d  libgomp/testsuite/libgomp.oacc-c-c++-common/data-2.c
  a0826470352b3d00ca5ad532634a1535  libgomp/testsuite/libgomp.oacc-c-c++-common/data-3.c
! fb17c028fd87af5b26b4238fa2c2e796  libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels-ipa-pta.c
  9b6dd5748b288e6ce971d52df9236ac5  libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-kernels.c
! 9a24345e45933088769dead5ed98b52c  libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel-ipa-pta.c
  39c565e9118017aa2f98b6fe6a26e964  libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses-parallel.c
  6869d0b2a43e3202ad2f6ece707b9cf2  libgomp/testsuite/libgomp.oacc-c-c++-common/data-clauses.h
  f33096223f3058b45355d180ea6b4b0a  libgomp/testsuite/libgomp.oacc-c-c++-common/data-firstprivate-1.c
  7cd99264c02421d4c3ea21bb20145a21  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-1.c
  ce24e046c5347f93b3d94f41af63f083  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-2.c
! b65152431e98716cff7279c301daa7ed  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-3.c
  ebb8f3adc650c08eeaf1e77a9b7084d4  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-4.c
  22918a096aad8e89d005adba57f4568d  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-5.c
! 7ff9dec9f3762d946f2001619610dfc2  libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla.c
  87e0504dda48475fd0f053b8ce73c933  libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-1.c
  4fa07035c293b9ed9e4dc0c2e01511da  libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-10.c
  0b25a866f5d087c91925337a99617ee2  libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-11.c
*************** b31aa7619a0bd38041bb74c411d3f21f  libgom
*** 95193,95226 ****
  4aabddd036776023f9c2c3d6ed05828d  libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-7.c
  43c4b0ed1cfe04cc6cc7b1239ae4831d  libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-8.c
  d4b69294a211a96b70ae02bd130cfd8d  libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-9.c
! ed51d15d31ea19fd605f14708740005e  libgomp/testsuite/libgomp.oacc-c-c++-common/default-1.c
  aa6b36c4a8b02af8803293f68c209f30  libgomp/testsuite/libgomp.oacc-c-c++-common/deviceptr-1.c
  a3486bacd7b29c9e93ee1df6beada30b  libgomp/testsuite/libgomp.oacc-c-c++-common/enter-data.c
  79cd32783c3680221c6f0ec02a95be8b  libgomp/testsuite/libgomp.oacc-c-c++-common/enter_exit-lib.c
! afaad65c1db1376693687b3f6ecef6e6  libgomp/testsuite/libgomp.oacc-c-c++-common/f-asyncwait-1.c
! eef767605141895a1a2ee43bd3ec0d2f  libgomp/testsuite/libgomp.oacc-c-c++-common/f-asyncwait-2.c
! fc3f73aa977c7d0bc24d42c4ae63b1b0  libgomp/testsuite/libgomp.oacc-c-c++-common/f-asyncwait-3.c
! cdbce17fd87ba4513f70f58a5d9fb098  libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c
  8c686d1346fe88eaefaed3451bae8327  libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-mappings-1.c
  20e4254d0298152299093bbcb18e32a6  libgomp/testsuite/libgomp.oacc-c-c++-common/function-not-offloaded.c
  572f31cdf00a7c485a7bda310c6052d1  libgomp/testsuite/libgomp.oacc-c-c++-common/gang-reduction-var-assignment.c
  7f83363fad987ebc3f67b450de0c0183  libgomp/testsuite/libgomp.oacc-c-c++-common/gang-static-1.c
  ef7560d8ddc45ef6327ec11fe016d337  libgomp/testsuite/libgomp.oacc-c-c++-common/gang-static-2.c
  73003aea390535b68a37e279b4514d67  libgomp/testsuite/libgomp.oacc-c-c++-common/gomp-debug-env.c
! 91e7df6799f9147b50a7dbc4cb18f7b7  libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-1.c
  306138bfc01b6378c91237fd77b8bdaf  libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-2.c
  adaec910973d8115f7e0d47383986917  libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-4.c
  caf971b57d6898c5e9ac246c6c8a00dc  libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-5.c
  381831619d1acd4fd67a0b656d4ce0b3  libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-6.c
! 2e526b5c6acd01c5e9acbd89a31542ed  libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-7.c
  dfbe7b7f1e2335edce726504383f9b2c  libgomp/testsuite/libgomp.oacc-c-c++-common/if-1.c
  2a240399332cca9373afb10f87a8f179  libgomp/testsuite/libgomp.oacc-c-c++-common/insufficient-resources.c
  b62d943ff000b5c04985d2e8e9583ab7  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-2.c
  46bf7e2b0cabef27d798b3b2957f6583  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-3.c
  c35fcfa359b0fbc3caf1b7d8d7c018bb  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta.c
! fe7f0dffa24d94a2574c1eed6d80d907  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c
  beed5eb74e7f9b935447c13c31a7ed23  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-empty.c
! f55ca55492b58beee675080a877a7ad5  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-2.c
  bf84cd20cbed842b879a3ebfee653954  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-3.c
  7003d37cae5082bd3c17cf91f520f14f  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-2.c
  b2ad6a7e5f5fe85d74276dd7685ed7b1  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-3.c
--- 101912,101945 ----
  4aabddd036776023f9c2c3d6ed05828d  libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-7.c
  43c4b0ed1cfe04cc6cc7b1239ae4831d  libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-8.c
  d4b69294a211a96b70ae02bd130cfd8d  libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-9.c
! 86912a4f5e145ea29f7c45d935bec143  libgomp/testsuite/libgomp.oacc-c-c++-common/default-1.c
  aa6b36c4a8b02af8803293f68c209f30  libgomp/testsuite/libgomp.oacc-c-c++-common/deviceptr-1.c
  a3486bacd7b29c9e93ee1df6beada30b  libgomp/testsuite/libgomp.oacc-c-c++-common/enter-data.c
  79cd32783c3680221c6f0ec02a95be8b  libgomp/testsuite/libgomp.oacc-c-c++-common/enter_exit-lib.c
! 92e1bd376da245106651cf0c7819e45b  libgomp/testsuite/libgomp.oacc-c-c++-common/f-asyncwait-1.c
! c379e67270c935d3734c42cf45ec56e1  libgomp/testsuite/libgomp.oacc-c-c++-common/f-asyncwait-2.c
! a1e93a963461971d26b26caf1baead16  libgomp/testsuite/libgomp.oacc-c-c++-common/f-asyncwait-3.c
! 2ce2b3b1469cebd90108717cf839ac07  libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c
  8c686d1346fe88eaefaed3451bae8327  libgomp/testsuite/libgomp.oacc-c-c++-common/firstprivate-mappings-1.c
  20e4254d0298152299093bbcb18e32a6  libgomp/testsuite/libgomp.oacc-c-c++-common/function-not-offloaded.c
  572f31cdf00a7c485a7bda310c6052d1  libgomp/testsuite/libgomp.oacc-c-c++-common/gang-reduction-var-assignment.c
  7f83363fad987ebc3f67b450de0c0183  libgomp/testsuite/libgomp.oacc-c-c++-common/gang-static-1.c
  ef7560d8ddc45ef6327ec11fe016d337  libgomp/testsuite/libgomp.oacc-c-c++-common/gang-static-2.c
  73003aea390535b68a37e279b4514d67  libgomp/testsuite/libgomp.oacc-c-c++-common/gomp-debug-env.c
! b59d72fbc6bec08fa979243143a9461a  libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-1.c
  306138bfc01b6378c91237fd77b8bdaf  libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-2.c
  adaec910973d8115f7e0d47383986917  libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-4.c
  caf971b57d6898c5e9ac246c6c8a00dc  libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-5.c
  381831619d1acd4fd67a0b656d4ce0b3  libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-6.c
! 2a2496e59bc0755c6ac4c6a8b70e42e7  libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-7.c
  dfbe7b7f1e2335edce726504383f9b2c  libgomp/testsuite/libgomp.oacc-c-c++-common/if-1.c
  2a240399332cca9373afb10f87a8f179  libgomp/testsuite/libgomp.oacc-c-c++-common/insufficient-resources.c
  b62d943ff000b5c04985d2e8e9583ab7  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-2.c
  46bf7e2b0cabef27d798b3b2957f6583  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta-3.c
  c35fcfa359b0fbc3caf1b7d8d7c018bb  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-alias-ipa-pta.c
! 24758559d899f60520f73325b502c8be  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c
  beed5eb74e7f9b935447c13c31a7ed23  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-empty.c
! 25bda364e614eb97f1fb151f451b988b  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-2.c
  bf84cd20cbed842b879a3ebfee653954  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-3.c
  7003d37cae5082bd3c17cf91f520f14f  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-2.c
  b2ad6a7e5f5fe85d74276dd7685ed7b1  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-and-seq-3.c
*************** faabab34fd4f4b9e64c6a7b0c63af475  libgom
*** 95235,95281 ****
  c05c7d2389e7b565732db67e40939356  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-data-enter-exit.c
  c1f2799cf401cc8b85043bd8323c9720  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-data-update.c
  e9fb9622d7535d49679bb287bc0f1ef4  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-data.c
! be0ebed8de4bc043bfe424cbcddd2d09  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-g.c
  7ea7a02530a0bc0aa475d90c9cbad7cc  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-mod-not-zero.c
  fca16823da7b716065a6c07b13ba8d8f  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-n.c
  66186c2a6c9380293a63ee48219d0116  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-nest.c
  6ae0e4093e0131d2b649ab1998c5b6b8  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop.c
  805b02c892200bf8f1232a553ea15c55  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-parallel-loop-data-enter-exit.c
! 2dd1184f1d00a503bd0cfc0a2838c35a  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-1.c
! 129ff21180ef1905f06c8470fd603955  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-2.c
! 6852d3027154e2ebde06e6d5fe5684ca  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-3.c
! b54dc4599f4dfaa043e7d0dfb088494c  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-4.c
! eb2f905646382d0b4dc4d322f32ae77a  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-5.c
! ee97f683a8a583b618e83b644f6da403  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-1.c
! 59c930f02b0f2c4ab564c03e128b83aa  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-2.c
! a1a8a93202865c9edc5a1b99d302a1e9  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-3.c
! 95e4d0b8fdc8202007b2c3df6cf30988  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-4.c
! 7f8e8ae152b6b143fac09c3bb62b1aea  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-5.c
! 61cd9e6c6c948ee5b7db0ddf5ff340cf  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-6.c
! 0ba7768916416373df88a9ff572c935c  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-vector-1.c
! 3e358e1c83b3305773b8e1332455c683  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-vector-2.c
! c99ce74b1025039f69bc42aa9eeed3cd  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-1.c
! c3813f59dae61ce8ef963bfd901643c1  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-2.c
! 44459e12632ada74d3e6f6f272a2f5ba  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-3.c
! e1b79fe7d88ce8a97093e7e691d677be  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-4.c
! 660cba856d39485c573d6c196becbe5c  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-5.c
! 7f668b39e0cdb4162812701fd0566270  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-6.c
! 753bad7ed731dc9a2b8357d7453751a4  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-7.c
! 1e7f9087c0978c71da04f1231b918a23  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-reduction-1.c
  6902a407096d1838d46e82ecd54fe072  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-reduction.c
  3d852537d3b1f1f1167ef012adff3f03  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-1.c
  0647ff16bec26cb5e49e42534818a0e1  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-10.c
! e7648493e98779e382c7c94417227298  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-11.c
  b0ffdc346d77dc494de147589113329a  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-12.c
! a4076471bf526767501d7d39298bfe59  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-13.c
! 642602500817da2dc711b70b37a0810b  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-14.c
! 9e54fbefe14139670227ea538039db30  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-15.c
  144cd222a64eeb2b17384097c1a340d9  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-16.c
  d26348e4b030687c17b1e936be78a16e  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-19.c
  914bab186fcbca87b6df7eec0e60bc97  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-2.c
! 78476871c44b86163efb432158515e8b  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-20.c
! 07827d0c9bc4367deccd15e6a6bf4616  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-23.c
! 60a6c793ac8c8d7150cf86ce88005008  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-24.c
  5910c2de4d00602de60372a2adf2a1d6  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-25.c
  8b091821d3b802ee5925f6575388322f  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-26.c
  192d28bc1efe5bcb0597ef303521ab8b  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-27.c
--- 101954,102000 ----
  c05c7d2389e7b565732db67e40939356  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-data-enter-exit.c
  c1f2799cf401cc8b85043bd8323c9720  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-data-update.c
  e9fb9622d7535d49679bb287bc0f1ef4  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-data.c
! 27bb697073211b8943b108e557e770d7  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-g.c
  7ea7a02530a0bc0aa475d90c9cbad7cc  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-mod-not-zero.c
  fca16823da7b716065a6c07b13ba8d8f  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-n.c
  66186c2a6c9380293a63ee48219d0116  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-nest.c
  6ae0e4093e0131d2b649ab1998c5b6b8  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop.c
  805b02c892200bf8f1232a553ea15c55  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-parallel-loop-data-enter-exit.c
! f657c5b37b9b9decc37cf78044632156  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-1.c
! a0b0c087ac2ce0fca7fac8d715f1bb88  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-2.c
! 483e543c45bb926fe48dd384191656f4  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-3.c
! c776724a5ed7e49f2719db2ff2a350e7  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-4.c
! a58a1335a82b3a21b2413b0a3eb53329  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-5.c
! 06ce40b967f7a8d6896e6ce14057da12  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-1.c
! 567b7831bda83bcef708e7ad04bd1b3b  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-2.c
! 92186c1ab423558b12252fafbf5e333e  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-3.c
! 05054e45335ac42aede073443598af1c  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-4.c
! 740039d41ec348ff871cc985c687c16c  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-5.c
! d1ab65f15cfe7f9f267605c4210e8ffa  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-gang-6.c
! 48aba2584f3ecf16480b79a535f80074  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-vector-1.c
! 899408dfececc5e11042cd6d37675733  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-vector-2.c
! 4780b210ffce9232184cfc402bef91e9  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-1.c
! 433a97aac6323c8d9c051d9c7f0ec4c7  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-2.c
! 8b2dc6fad1c372c82b89e1a700e36e24  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-3.c
! 007c95fabbdd396c1e90534f85ae4453  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-4.c
! d86642f05dcaad0a3d310087bf5f5a7f  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-5.c
! 1354b5aa6fb80c919486e613184907be  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-6.c
! 7cafb15c85eae3196d791ef2751d6e47  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-7.c
! 7715167e5aeabdf86f0e859646bc23b6  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-reduction-1.c
  6902a407096d1838d46e82ecd54fe072  libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-reduction.c
  3d852537d3b1f1f1167ef012adff3f03  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-1.c
  0647ff16bec26cb5e49e42534818a0e1  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-10.c
! ae1a5c96fe18223438cb17236203a5ef  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-11.c
  b0ffdc346d77dc494de147589113329a  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-12.c
! 04abb7497bcf356e96617f175f25b4d9  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-13.c
! 431cf6aec773250e2cfd7600e7594351  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-14.c
! db56a9adb4359c67a6b7164432ea363e  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-15.c
  144cd222a64eeb2b17384097c1a340d9  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-16.c
  d26348e4b030687c17b1e936be78a16e  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-19.c
  914bab186fcbca87b6df7eec0e60bc97  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-2.c
! 66f392de28be2cd1b9a7007517e3ad3a  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-20.c
! 0760bda9bdbdd12b66cfb72dcd0715b6  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-23.c
! 566109a7130dcf3b1eed0e5da4e4d6c3  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-24.c
  5910c2de4d00602de60372a2adf2a1d6  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-25.c
  8b091821d3b802ee5925f6575388322f  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-26.c
  192d28bc1efe5bcb0597ef303521ab8b  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-27.c
*************** d26348e4b030687c17b1e936be78a16e  libgom
*** 95283,95289 ****
  d12fd6d02cc6c4fffbabf0a5f5fc9f7a  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-31.c
  cd1da26a252d0a649b0248f9e035a41a  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-32.c
  8f45f91927636362dab19a6f8fa1a5f1  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-33.c
! 57db7bcfb67fdd793836c95d3d1b001c  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-34.c
  ce2d778a9a3410c613ee686e1a376d2c  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-35.c
  2f7d14ce9a211da1dd7dd609bfb147c8  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-36.c
  84c260da696be8db51f1ab9b4b38d821  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-37.c
--- 102002,102008 ----
  d12fd6d02cc6c4fffbabf0a5f5fc9f7a  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-31.c
  cd1da26a252d0a649b0248f9e035a41a  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-32.c
  8f45f91927636362dab19a6f8fa1a5f1  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-33.c
! 33a0b60088cc0e5d6894833eca576be2  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-34.c
  ce2d778a9a3410c613ee686e1a376d2c  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-35.c
  2f7d14ce9a211da1dd7dd609bfb147c8  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-36.c
  84c260da696be8db51f1ab9b4b38d821  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-37.c
*************** f64d3ef8bf6b155a353fdf363b887b62  libgom
*** 95291,95371 ****
  70aa8c195bb1388a7d6267c5118895f0  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-4.c
  c2a1b9406251467ff384653151059034  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-40.c
  a6a2aa834a1a0ed011fe9b6005c24ad1  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-41.c
! ff6f6da05f07645c7e372f0b91fe716c  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-42.c
! bda2b158be47052dbb8dd1060b12639b  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-44.c
  f3c081c7fb926320ab7e9158cf4afe63  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-45.c
  625c76e3268362f8980149f627efa7ac  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-46.c
! a034ed89c25fd9c6e707e44dd9fb4b2e  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-48.c
  7fe1252154fdd75cc855653e406aed3a  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-49.c
! afdb5f02f7afe5019e6fa30541cde250  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-5.c
  2b44b7a7c9de1b731b2bb8294192b724  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-51.c
! d2a108f3de5edadbbbe78edb9efaa65c  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-52.c
! ca6c3efb82831c67c9a18fc8b97af3b8  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-53.c
! 8220d7ffcb1d413eac148aaf3d4aedbf  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-54.c
  0f610afbab6588f7e3fad4628315d2ad  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-55.c
  b7ccf9ff50433844a194987f0fe74c54  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-56.c
! 1eccc8b5432ae6fb9f22bb77f49333fc  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-57.c
! 965049be12e0460d89579adbba30d40c  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-58.c
  f45a93e92bc9bc6f77c5c32a826c11d2  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-59.c
! fe98fac9c429b39de3ca113efca71ab2  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-6.c
  f59598f9d91fd143b2639bf346f2a4d4  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-60.c
  8e14d598822b60ebe45006160fec7883  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-61.c
! ee5b7e020cc0198485e9ece5608033ca  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-62.c
! 9c9f471589130ec518229fd28c0f3967  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-63.c
! f29d26d9eca95ddc339432bbcad0e72a  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-64.c
! 35bbc20c2dae5890584475aa2c55f405  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-65.c
  a8a9b77df4077a32cc3197211627e8c2  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-66.c
! 8aa25d383b25b833cbdc36c0bafd61ae  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-67.c
! 211e61a12ff3113aaaa56ed647d3437c  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-68.c
! 91d2f9583e9731fe4a88ae78b355a264  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-69.c
  3843f12a3d13f977bc3e9ecd9f8bb8b8  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-7.c
! 5d6f7b5e6a5b438ff703c4dd6aef8219  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-70.c
! ec46d2a1cb2c5dd2d827597615787542  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-72.c
! b71b32ef3d20a206d17e12fa02f408a2  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-73.c
! bea7f634308d0f614e4ef988346104fa  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-74.c
! 66ea5869c5df18eb1d1a8c1e04eadaee  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-75.c
! 915bbe12a7389c44165a9f726c282d64  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-76.c
! 5f070ff43bf6a054db3808450979636f  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-78.c
! bcd19ff563913ffaa5ad1ba9423556d9  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-79.c
  0d9eab2da5abba85086a2b13803efa2b  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-8.c
! c4b4a5bd6aed844c23465093725f6b18  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-81.c
! 25fa339f9435c31cbbcd42e35e53b0cc  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-82.c
! 8a325a16707c4db9e9e127c80deb29a9  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-83.c
! 507338b236eaa67235956edda17bb6c8  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-84.c
! 8949c0b7219105ac7c87b868121d2665  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-85.c
! 2c50bfc1e69dbb2fc4221c3767bb46bb  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-86.c
! 011953921a9648fe2d622de87e96f687  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-87.c
! ec819f812621c258b1eeb4a156ec1f42  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-88.c
! 9040eb7fb76d76684c4b67216979084b  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-89.c
  fa60200e0fb48952eddcb219fbfa2f3d  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-9.c
! 8d0fc79250ebd8f94a8daecfb5677ab1  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-90.c
! 7f82a66b1d97554afbb93d4327fc1fdb  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-91.c
! 63b0abf54d070c509131a39cc0045d09  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-92.c
! 779b055d4df6756a8690621496e1944b  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-94.c
! 8808e95a414ff86f13bfed6922e62092  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-95.c
! 1a7250fbf5e710be255255ec26f047e5  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c
  a79cb46ffee904def26285cabcd00b7f  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-default-runtime.c
  7bae2251f19fb8dd4b4ae9f3110a3015  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-default.h
! 940a5c448cb7bac31695e23659210124  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-dim-default.c
! e5a0d756986e79eaa45cfdc2388b8eb5  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-1.c
! 6a201a5ff2fe837ccfc2da2759338db7  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-2.c
! 77df367f78d8115324f0f5125c0b4c45  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-gwv-1.c
! 8a6175afd9cccc8856a439d83bfae06f  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c
! 3d359987468cc3a3a7f9dd5cbd5fa193  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c
! d2e76ef669b7bdd88ff0acdd910ae095  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c
! a68dee1864910113d24df5f8f3bc4a28  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-2.c
! 2ab8fafce67a4ddbfda3f89ba438731c  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c
! 5cd55b901f5cf68b1f15ac4eb01cacad  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c
! c3a35b854093af71763e5251f4d12596  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c
! ae82b31e028d055315107ca0a61142ab  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-v-1.c
! 54604ff560602c88cb9c96920cc0a795  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-w-1.c
! c02ec6090bad7dd18c97c6edc2f2a3b7  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-wv-1.c
  2e7b967583a4efc9ca521971c2986c29  libgomp/testsuite/libgomp.oacc-c-c++-common/map-data-1.c
  1cb3d8f38b931ef6ab9f1b21ca142228  libgomp/testsuite/libgomp.oacc-c-c++-common/mapping-1.c
  adcdf604914cbb48debe799674b5db8e  libgomp/testsuite/libgomp.oacc-c-c++-common/mdc-refcount-1.c
  12b7ce730c3c6ea1978aba1c46442d3e  libgomp/testsuite/libgomp.oacc-c-c++-common/mdc-refcount-2.c
  831ed57be9916277745f6ae79045c6f1  libgomp/testsuite/libgomp.oacc-c-c++-common/mdc-refcount-3.c
! 9000d0b82788d41d0f3f38a1e011931a  libgomp/testsuite/libgomp.oacc-c-c++-common/mode-transitions.c
  4ad5cc05b3074b790b7e68a28556ae0f  libgomp/testsuite/libgomp.oacc-c-c++-common/nested-1.c
  968a8b86f9a11317a5a9c9b8d1d372af  libgomp/testsuite/libgomp.oacc-c-c++-common/nested-2.c
  e45ac1ff3f93693f35f0a97222dcb90d  libgomp/testsuite/libgomp.oacc-c-c++-common/no_create-1.c
--- 102010,102091 ----
  70aa8c195bb1388a7d6267c5118895f0  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-4.c
  c2a1b9406251467ff384653151059034  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-40.c
  a6a2aa834a1a0ed011fe9b6005c24ad1  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-41.c
! cf24f082f3ef03f44ff48568ec799e72  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-42.c
! 83bc9ad195204defc3236509e9e0d7f9  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-44.c
  f3c081c7fb926320ab7e9158cf4afe63  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-45.c
  625c76e3268362f8980149f627efa7ac  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-46.c
! 4ecef8a701e40138333157cff6c5da76  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-48.c
  7fe1252154fdd75cc855653e406aed3a  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-49.c
! 793f281c63ebb777e67eac9ec5b19c22  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-5.c
  2b44b7a7c9de1b731b2bb8294192b724  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-51.c
! 20f9d044ad27704a8d53605aa5c3a991  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-52.c
! 0bd9ef4ba4b7a10a48dbcf022c0f026d  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-53.c
! 054cc21dc472943d24e3fa9fa2a5d9c0  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-54.c
  0f610afbab6588f7e3fad4628315d2ad  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-55.c
  b7ccf9ff50433844a194987f0fe74c54  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-56.c
! 521b04e79451b2ffd2126b18fe24556c  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-57.c
! 26e8771c9d7e9db0f530f07147709715  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-58.c
  f45a93e92bc9bc6f77c5c32a826c11d2  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-59.c
! a872a53325bc3cbddc46a5ee09826537  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-6.c
  f59598f9d91fd143b2639bf346f2a4d4  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-60.c
  8e14d598822b60ebe45006160fec7883  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-61.c
! a1c3809e2c0e4c3cba57b1a519f8f807  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-62.c
! b3762271edd5c411c70de796155c3689  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-63.c
! 64483ebd2d8485d93cb0ab639041c41e  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-64.c
! be8d6800741e2cc38fd94b7b3edbcd17  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-65.c
  a8a9b77df4077a32cc3197211627e8c2  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-66.c
! b3dc78798bc3b076a759e8496ae97685  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-67.c
! 26bbe00f70d54486ef47e329421dbf03  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-68.c
! 1d4546cd3ed80fe9033edb4e340d6c58  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-69.c
  3843f12a3d13f977bc3e9ecd9f8bb8b8  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-7.c
! bdb8f0ba6e6eb90af206d869a0c2101f  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-70.c
! 649de09240e8c78c0336107607eea291  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-72.c
! 5f7a2373d56d89876fbb6b93e1fdb414  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-73.c
! 7ebb69075685f385253bbc5823d82d47  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-74.c
! 127213b6796f9fb71d5ab2e0e8782bfc  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-75.c
! 22ec2a7b8fa39926e63ada9a41c64db9  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-76.c
! a2a73b7afdd8131f44023cf493a71ab7  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-78.c
! c2b311ba818ada85bf28eb2b77030418  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-79.c
  0d9eab2da5abba85086a2b13803efa2b  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-8.c
! 6ee3d6314f0ab65719e500d54ca062cc  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-81.c
! f9837596434e7598207894a89d9318c9  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-82.c
! fec2159ffa0aa231aee4679c088613e9  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-83.c
! 540e1fd8857378c47f4855bea9517287  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-84.c
! 2c6aa14afd14ff37658da81c045961e3  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-85.c
! 0411c83fc84e8819c70a3d899c7886ea  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-86.c
! 9568dd8f1ef42b04513dbcdfb680a4e2  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-87.c
! ea94310718507828c2d568642c3ad885  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-88.c
! 1a290a2729354ee1f975f9cc3b7d9883  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-89.c
  fa60200e0fb48952eddcb219fbfa2f3d  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-9.c
! ac6f2333a907b6de8bda3449241c53f1  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-90.c
! a45fb61e6aed67d9e3e96d92f7895125  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-91.c
! 4858f2cb642c54e9e7ce1d2762269cb9  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-92.c
! a5f9c529aaa2011bcea9ebd1177afde4  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-94.c
! 20e0997ee33fd896cfd774f51d7371d9  libgomp/testsuite/libgomp.oacc-c-c++-common/lib-95.c
! 651dd2337ba544c0e6276d7aa9bdaa45  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c
  a79cb46ffee904def26285cabcd00b7f  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-default-runtime.c
  7bae2251f19fb8dd4b4ae9f3110a3015  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-default.h
! f48f81ad228ea412b0fa8560f7a6fab6  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-dim-default.c
! 7936410053a110f387a59230494578d0  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-1.c
! ace87c701bc54405ea56c901f5864df0  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-g-2.c
! 0b2b6442a20104f84b1c37cc1690dca4  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-gwv-1.c
! d6907c0582367fc3c8c3c0abfd75b248  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-gwv-2.c
! aef0ba04e9cc87ba92395209ee60b7d5  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c
! 5bfd5296495abce04dac0e2f1c7225ce  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c
! bef090ccbd92525cbbf8f18e948ad341  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c
! 17ab3adca478bc98b818d5baae9bc798  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-2.c
! f597f802776f3ef9b02bbdeb81a87ac4  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c
! 970811fc565f93e5b4365bd2e8ad9a55  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c
! 79ba2f15c91a40b8fb00e630c8084852  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c
! 79fca8da70860573e91046726d78891d  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-v-1.c
! 609768915892056f12ef7dc4415c35b3  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-w-1.c
! 28ec332e4aed8dec40f0759b6683d888  libgomp/testsuite/libgomp.oacc-c-c++-common/loop-wv-1.c
  2e7b967583a4efc9ca521971c2986c29  libgomp/testsuite/libgomp.oacc-c-c++-common/map-data-1.c
  1cb3d8f38b931ef6ab9f1b21ca142228  libgomp/testsuite/libgomp.oacc-c-c++-common/mapping-1.c
  adcdf604914cbb48debe799674b5db8e  libgomp/testsuite/libgomp.oacc-c-c++-common/mdc-refcount-1.c
  12b7ce730c3c6ea1978aba1c46442d3e  libgomp/testsuite/libgomp.oacc-c-c++-common/mdc-refcount-2.c
  831ed57be9916277745f6ae79045c6f1  libgomp/testsuite/libgomp.oacc-c-c++-common/mdc-refcount-3.c
! e6a5f83e468db1c48a248853d4c14399  libgomp/testsuite/libgomp.oacc-c-c++-common/mode-transitions.c
  4ad5cc05b3074b790b7e68a28556ae0f  libgomp/testsuite/libgomp.oacc-c-c++-common/nested-1.c
  968a8b86f9a11317a5a9c9b8d1d372af  libgomp/testsuite/libgomp.oacc-c-c++-common/nested-2.c
  e45ac1ff3f93693f35f0a97222dcb90d  libgomp/testsuite/libgomp.oacc-c-c++-common/no_create-1.c
*************** df7ad53344eda7fbf137bede9881f937  libgom
*** 95379,95393 ****
  121c1851eca6741da8d5dcdf01682174  libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-1.c
  dad64eeb3afa870b5cc1e483a491834a  libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-2.c
  8828a9d7326540fea76c07ba14dfbcfc  libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c
! 74c992d9541df1b5050c993f96053f57  libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c
! b53629782de18001e681fd3ba0a7ecb9  libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c
! 7ef8129cc3665d7bea9e0e548927a213  libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c
! d66ab79b3ccd76174c62898f613e8dcd  libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims.c
  13738214f52524bee03830310425deb2  libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-empty.c
  faa784518f833029ab95d5b52e757074  libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-loop-1.c
  53cfa8dfa269a474b19974bca078777e  libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-loop-1.h
  cc6edeca61eb6307f45e6ef216f83a83  libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-loop-2.h
! f042a74c9acd1b798d451842cf21bd78  libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c
  a5278638b6db8f8330c505f9431f453f  libgomp/testsuite/libgomp.oacc-c-c++-common/pointer-align-1.c
  94f343a0a3568ebcb08045cd95eaedc0  libgomp/testsuite/libgomp.oacc-c-c++-common/pr70289.c
  b480e00caa0b139129c773a615bdc67e  libgomp/testsuite/libgomp.oacc-c-c++-common/pr70373.c
--- 102099,102113 ----
  121c1851eca6741da8d5dcdf01682174  libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-1.c
  dad64eeb3afa870b5cc1e483a491834a  libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-2.c
  8828a9d7326540fea76c07ba14dfbcfc  libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c
! 929e06375f6d8e179f8f039e327b69d1  libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c
! cb2c525e500d2aee9a85644d21993cb2  libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c
! a10c48dc0e7c9c85814cfab8cad78dcd  libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c
! e6a4f73d80803ca64ff5ba4a2360c179  libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims.c
  13738214f52524bee03830310425deb2  libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-empty.c
  faa784518f833029ab95d5b52e757074  libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-loop-1.c
  53cfa8dfa269a474b19974bca078777e  libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-loop-1.h
  cc6edeca61eb6307f45e6ef216f83a83  libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-loop-2.h
! 20aa7aaa65563381504df9f2d40d12d6  libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c
  a5278638b6db8f8330c505f9431f453f  libgomp/testsuite/libgomp.oacc-c-c++-common/pointer-align-1.c
  94f343a0a3568ebcb08045cd95eaedc0  libgomp/testsuite/libgomp.oacc-c-c++-common/pr70289.c
  b480e00caa0b139129c773a615bdc67e  libgomp/testsuite/libgomp.oacc-c-c++-common/pr70373.c
*************** f4b077ed86c2694e71f3b739b8acc39a  libgom
*** 95399,95414 ****
  163681ae13ec7dafe5504b0ea3b6545c  libgomp/testsuite/libgomp.oacc-c-c++-common/pr84955-1.c
  7bebc40e2fc1dd55a72340d501f63635  libgomp/testsuite/libgomp.oacc-c-c++-common/pr84955.c
  c0b1c7a2ace439e7d274ea61e014601c  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381-2.c
! f9e197fbc815ab50517803597fd883bc  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381-3.c
  7d7ef33a08e8f83dda3171b8ce0c7d3d  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381-4.c
  04d32f8ffb3748882719791be7c2d862  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381-5.c
  f40f9dcdb158db5585a400b5fdb7c8ca  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381.c
  26e31ce5804cbb967bc6fd5ea1958412  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85422.c
! 196e0a60a6dc7e2db37056e930062298  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85486-2.c
! ab0118348db01ee3397b09491f15e5ce  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85486-3.c
! cee2934882724712bae4a0c77c85bbdd  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85486.c
  4fe148d3cb364744a0b8614243c110e0  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85782.c
! d317991e6bfc08636d3f79a7be1fc671  libgomp/testsuite/libgomp.oacc-c-c++-common/pr87835.c
  3f7d48aa6bc944391986f0d03a5d74a7  libgomp/testsuite/libgomp.oacc-c-c++-common/pr88288.c
  a519f1298d548091a6f79679d3ba9493  libgomp/testsuite/libgomp.oacc-c-c++-common/pr88941.c
  f18533e09ca653b441891e7eada5fdff  libgomp/testsuite/libgomp.oacc-c-c++-common/pr88946.c
--- 102119,102134 ----
  163681ae13ec7dafe5504b0ea3b6545c  libgomp/testsuite/libgomp.oacc-c-c++-common/pr84955-1.c
  7bebc40e2fc1dd55a72340d501f63635  libgomp/testsuite/libgomp.oacc-c-c++-common/pr84955.c
  c0b1c7a2ace439e7d274ea61e014601c  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381-2.c
! 16c751bd8f10452c31d6dbf14504d65a  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381-3.c
  7d7ef33a08e8f83dda3171b8ce0c7d3d  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381-4.c
  04d32f8ffb3748882719791be7c2d862  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381-5.c
  f40f9dcdb158db5585a400b5fdb7c8ca  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85381.c
  26e31ce5804cbb967bc6fd5ea1958412  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85422.c
! cf07ee0c55c94c87390e68ec106eb499  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85486-2.c
! 4e3c84d7ec9800c57c12ce1fd3cd797b  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85486-3.c
! d3cedfa64b9299dcc4cc3112fae5a4a9  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85486.c
  4fe148d3cb364744a0b8614243c110e0  libgomp/testsuite/libgomp.oacc-c-c++-common/pr85782.c
! 0d86bd452b4166fe5933b972fd738a8d  libgomp/testsuite/libgomp.oacc-c-c++-common/pr87835.c
  3f7d48aa6bc944391986f0d03a5d74a7  libgomp/testsuite/libgomp.oacc-c-c++-common/pr88288.c
  a519f1298d548091a6f79679d3ba9493  libgomp/testsuite/libgomp.oacc-c-c++-common/pr88941.c
  f18533e09ca653b441891e7eada5fdff  libgomp/testsuite/libgomp.oacc-c-c++-common/pr88946.c
*************** ee92965ca541f750df722d2fe265e58d  libgom
*** 95424,95441 ****
  0dfb12a77388c3a0ee42c66e4036a2b8  libgomp/testsuite/libgomp.oacc-c-c++-common/pr92877-1.c
  27a72959dba0ab84df97083cffc34318  libgomp/testsuite/libgomp.oacc-c-c++-common/pr92970-1.c
  efb607db23705e7d0e0052136747aa2b  libgomp/testsuite/libgomp.oacc-c-c++-common/pr92984-1.c
! 6c8d1324f65ffb1621cb66cd023fa71a  libgomp/testsuite/libgomp.oacc-c-c++-common/pr95270-1.c
  01b2024c52a09bc7fc5e47194a1ef682  libgomp/testsuite/libgomp.oacc-c-c++-common/pr95270-2.c
  8ccb391ecb020ee72dd4b3c91795a894  libgomp/testsuite/libgomp.oacc-c-c++-common/present-1.c
  b3824216ed6541363eaab687c61bb584  libgomp/testsuite/libgomp.oacc-c-c++-common/present-2.c
! f6a4f95364d4753e1b6bc27116c40f32  libgomp/testsuite/libgomp.oacc-c-c++-common/private-variables.c
  860979ab58747c7040ee3c4c38302735  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c
  3c1cee7992dfcf6b730b69a0efb2614c  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-2.c
  875ee1222c17fd07d573f26a124f0939  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-3.c
  fd94b5ec6470f1113cc5a38c6db4cbfc  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-4.c
! 8f72109c5e260d650d9d51e1dfebb4e1  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-5.c
! 25d16324de366c47703fd359b6bd84e6  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-6.c
! bbc6d166b3ddc1ece97c3c89706e19db  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
  0fc354f8d8f049474bcdaa855dac08e8  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-8.c
  1d1adb51af879755185bb618aaa65ee9  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-dbl.c
  72bb5ee190874513710f37cf087e2488  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-flt.c
--- 102144,102163 ----
  0dfb12a77388c3a0ee42c66e4036a2b8  libgomp/testsuite/libgomp.oacc-c-c++-common/pr92877-1.c
  27a72959dba0ab84df97083cffc34318  libgomp/testsuite/libgomp.oacc-c-c++-common/pr92970-1.c
  efb607db23705e7d0e0052136747aa2b  libgomp/testsuite/libgomp.oacc-c-c++-common/pr92984-1.c
! ee14c246a4b0621d735a59d30ac0299a  libgomp/testsuite/libgomp.oacc-c-c++-common/pr95270-1.c
  01b2024c52a09bc7fc5e47194a1ef682  libgomp/testsuite/libgomp.oacc-c-c++-common/pr95270-2.c
  8ccb391ecb020ee72dd4b3c91795a894  libgomp/testsuite/libgomp.oacc-c-c++-common/present-1.c
  b3824216ed6541363eaab687c61bb584  libgomp/testsuite/libgomp.oacc-c-c++-common/present-2.c
! 92f1c6a9ab211f9c69a79ea2f24d7b7a  libgomp/testsuite/libgomp.oacc-c-c++-common/private-atomic-1-gang.c
! 88d7cb06b9f0d1b5d3b7f0028babd6f1  libgomp/testsuite/libgomp.oacc-c-c++-common/private-atomic-1.c
! ac8c119cd16886f2edb81026351b50fc  libgomp/testsuite/libgomp.oacc-c-c++-common/private-variables.c
  860979ab58747c7040ee3c4c38302735  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c
  3c1cee7992dfcf6b730b69a0efb2614c  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-2.c
  875ee1222c17fd07d573f26a124f0939  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-3.c
  fd94b5ec6470f1113cc5a38c6db4cbfc  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-4.c
! bc575facaf94d6f6d2c579712451287b  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-5.c
! 09f6f75a650d1fb022faca9e867c6556  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-6.c
! 8c6a544366a7f9ff690cfda71e40fabb  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
  0fc354f8d8f049474bcdaa855dac08e8  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-8.c
  1d1adb51af879755185bb618aaa65ee9  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-dbl.c
  72bb5ee190874513710f37cf087e2488  libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-flt.c
*************** ad168cfedf92ebb1f18d0b4e037fec4c  libgom
*** 95446,95463 ****
  d1b99a25ac537b945a0d13938f5cccd3  libgomp/testsuite/libgomp.oacc-c-c++-common/refcounting-1.c
  ff9529db384a10d9260a07b720bac31d  libgomp/testsuite/libgomp.oacc-c-c++-common/refcounting-2.c
  bfb8a1981f65bf0f6f7e7ceffe50d12f  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-1.c
! 5f5eb258f275dae741462f4a29a1c0e9  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-4.c
! 5d15b42e8afb96a1fbd18f9d6b7cd167  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-g-1.c
! 8f5870a190f5b6c9bbff47871f09bcb3  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-gwv-1.c
! 518d97bf0bc5df2db05cb42d2a31434e  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-v-1.c
! 1a465d1e1bc74775a2990782de6cc788  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-w-1.c
! 771ea191fe0f86feae77a91e786cd92f  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-1.c
! 9418b01ffd5959058f86a266f7d445e6  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c
! c9bee1b3813a97104a84319927c91922  libgomp/testsuite/libgomp.oacc-c-c++-common/static-variable-1.c
  0c8d53037ec5c2b4a2208f9527b55b0c  libgomp/testsuite/libgomp.oacc-c-c++-common/struct-1.c
  a2a3b463713aeac5d2334e0d7d3a7b08  libgomp/testsuite/libgomp.oacc-c-c++-common/struct-3-1-1.c
! d5a34a7eae3b8074ac27869cb72cfff3  libgomp/testsuite/libgomp.oacc-c-c++-common/struct-copyout-1.c
! c2c6207d7d3ab4450195bc971075c09f  libgomp/testsuite/libgomp.oacc-c-c++-common/struct-copyout-2.c
  4ea57202e8f73d6b4fc10a38842c980b  libgomp/testsuite/libgomp.oacc-c-c++-common/structured-detach-underflow.c
  9e863144cbe129ee6c6b4fef905f1ec2  libgomp/testsuite/libgomp.oacc-c-c++-common/structured-dynamic-lifetimes-1-lib.c
  4165d7eca516f6416c5b74cadb7c765b  libgomp/testsuite/libgomp.oacc-c-c++-common/structured-dynamic-lifetimes-1.c
--- 102168,102188 ----
  d1b99a25ac537b945a0d13938f5cccd3  libgomp/testsuite/libgomp.oacc-c-c++-common/refcounting-1.c
  ff9529db384a10d9260a07b720bac31d  libgomp/testsuite/libgomp.oacc-c-c++-common/refcounting-2.c
  bfb8a1981f65bf0f6f7e7ceffe50d12f  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-1.c
! df530ba0c841e743894417cbc02d170c  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-4.c
! 32669ea61f7666f9191edab5d51c15fb  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-g-1.c
! d1608fbfd50247044238123c32b70625  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-gwv-1.c
! 8a5b1095be7c201a02d6b3092af1ae7e  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-nohost-1.c
! 2ce2170865d76ca5d35bb4ba1a0f53df  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-nohost-2.c
! e761f4dca6250611ff0792b1d8cacfbc  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-nohost-2_2.c
! 2bca4d84754ff7276b96cc402823cbc6  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-v-1.c
! d56fcc986a0bc959a99533bf679f67ff  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-w-1.c
! fef8f37a1e9739517b8106f0b1ff56b0  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-1.c
! 78714daf89dd2747ad57135db06f17bf  libgomp/testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c
! 56fb25d9e6e334fc162109f9ee5430cf  libgomp/testsuite/libgomp.oacc-c-c++-common/static-variable-1.c
  0c8d53037ec5c2b4a2208f9527b55b0c  libgomp/testsuite/libgomp.oacc-c-c++-common/struct-1.c
  a2a3b463713aeac5d2334e0d7d3a7b08  libgomp/testsuite/libgomp.oacc-c-c++-common/struct-3-1-1.c
! a53a1592e46ea604009eb22d4cba04d7  libgomp/testsuite/libgomp.oacc-c-c++-common/struct-copyout-1.c
! e42c053666306c11dc2a54e497858961  libgomp/testsuite/libgomp.oacc-c-c++-common/struct-copyout-2.c
  4ea57202e8f73d6b4fc10a38842c980b  libgomp/testsuite/libgomp.oacc-c-c++-common/structured-detach-underflow.c
  9e863144cbe129ee6c6b4fef905f1ec2  libgomp/testsuite/libgomp.oacc-c-c++-common/structured-dynamic-lifetimes-1-lib.c
  4165d7eca516f6416c5b74cadb7c765b  libgomp/testsuite/libgomp.oacc-c-c++-common/structured-dynamic-lifetimes-1.c
*************** acff0307cbfdb6578ef67d96f7f7cbaf  libgom
*** 95489,95510 ****
  c71bace3863362a246a4776a61008554  libgomp/testsuite/libgomp.oacc-c-c++-common/unmap-infinity-1.c
  964557340c6a86906ae6e0d52e6bad79  libgomp/testsuite/libgomp.oacc-c-c++-common/update-1.c
  5afdaccc6952024b9bec7e66bab1d0cc  libgomp/testsuite/libgomp.oacc-c-c++-common/variable-not-offloaded.c
! 0fee9f765c08740971ec3789e9985ab9  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-1.c
  775820b04ba81a1ce1e41aa1eebf9739  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-10.c
! 50e74124b5c5129b446b3ee649536cf5  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-2.c
! 96ee3eb72e31f9693c08e4e46319fa4e  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-3.c
! 4adc8237fd2492a52f684bd0e7a90358  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-4.c
! b79f45929e13e6df5afff48b6fbde3bb  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-5.c
! 3b5fd3db4bdbb68f437bebba4a3760b9  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-6.c
! bb2dc9b5fa7cc9309a4d07e17f93b898  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-7.c
! f1675b103a1e24b00e71e81636ce7f3b  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-64-1.c
  b2c17cafa94ba44707fec72c73206817  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-64-2.c
  26ad294da21fe54337772daec065cf83  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-64-3.c
  a9f926de80d09b0da7520672b009c751  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-loop.c
  e65c44041c15898765a99f6782a191d2  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-type-1.c
  1adf3017b5fe6def74e1026289ff82b8  libgomp/testsuite/libgomp.oacc-c-c++-common/vprop-2.c
  3df312778896ed29ec60eefae35ce701  libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c
! 89749d57d6791896fff641c862a9331b  libgomp/testsuite/libgomp.oacc-c-c++-common/vred2d-128.c
  4210ba709794292b7c55787ddbfa572a  libgomp/testsuite/libgomp.oacc-c-c++-common/zero_length_subarrays.c
  4796f6f728e7eb127e28ee59e5f1ef18  libgomp/testsuite/libgomp.oacc-c/c.exp
  cbdcc7dbb1bbfcb008b972db87d6a771  libgomp/testsuite/libgomp.oacc-c/nested-function-1.c
--- 102214,102235 ----
  c71bace3863362a246a4776a61008554  libgomp/testsuite/libgomp.oacc-c-c++-common/unmap-infinity-1.c
  964557340c6a86906ae6e0d52e6bad79  libgomp/testsuite/libgomp.oacc-c-c++-common/update-1.c
  5afdaccc6952024b9bec7e66bab1d0cc  libgomp/testsuite/libgomp.oacc-c-c++-common/variable-not-offloaded.c
! 2b8f327a181cfc36401508a2a3dcc00d  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-1.c
  775820b04ba81a1ce1e41aa1eebf9739  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-10.c
! ea87be4bfbb35a728ca117e238e4ae59  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-2.c
! 354383c08d620a81f13279fd2662ab07  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-3.c
! 345eb83e864dbc0f95ab00c368acdb0a  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-4.c
! 8fa662da038607617dd03201e420b231  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-5.c
! da6671b478968727a40cab0d760f5bc1  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-6.c
! 5d22e7367e14d248fe9c0e66be11211d  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-128-7.c
! e8221258158a595521ffcea51cc76831  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-64-1.c
  b2c17cafa94ba44707fec72c73206817  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-64-2.c
  26ad294da21fe54337772daec065cf83  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-length-64-3.c
  a9f926de80d09b0da7520672b009c751  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-loop.c
  e65c44041c15898765a99f6782a191d2  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-type-1.c
  1adf3017b5fe6def74e1026289ff82b8  libgomp/testsuite/libgomp.oacc-c-c++-common/vprop-2.c
  3df312778896ed29ec60eefae35ce701  libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c
! 7de82a0bdf6321de2decfdc73ccc05b0  libgomp/testsuite/libgomp.oacc-c-c++-common/vred2d-128.c
  4210ba709794292b7c55787ddbfa572a  libgomp/testsuite/libgomp.oacc-c-c++-common/zero_length_subarrays.c
  4796f6f728e7eb127e28ee59e5f1ef18  libgomp/testsuite/libgomp.oacc-c/c.exp
  cbdcc7dbb1bbfcb008b972db87d6a771  libgomp/testsuite/libgomp.oacc-c/nested-function-1.c
*************** cbdcc7dbb1bbfcb008b972db87d6a771  libgom
*** 95514,95533 ****
  f71531081e68cf72f20e97fa5e84200c  libgomp/testsuite/libgomp.oacc-fortran/abort-1.f90
  c9683c99e94f6e35b6a3266a17594788  libgomp/testsuite/libgomp.oacc-fortran/abort-2.f90
  b679de5ffd18c9aa9dde2bffdaf92c7f  libgomp/testsuite/libgomp.oacc-fortran/acc_get_property.f90
! 49e143ec0fe9db8386a24b6f4a6431a5  libgomp/testsuite/libgomp.oacc-fortran/acc_on_device-1-1.f90
! 38a1c012a5fcce2ad18984f74df89de2  libgomp/testsuite/libgomp.oacc-fortran/acc_on_device-1-2.f
! 7af719eb400782dd892a4a95729bbb95  libgomp/testsuite/libgomp.oacc-fortran/acc_on_device-1-3.f
  1156f6bd1e8853e97f454dde55593fcf  libgomp/testsuite/libgomp.oacc-fortran/allocatable-1-1.f90
  b5f50dc24e2c3eca23c78de810809df1  libgomp/testsuite/libgomp.oacc-fortran/allocatable-1-2.f90
  268441c3b6afe4ef21eb895887650817  libgomp/testsuite/libgomp.oacc-fortran/allocatable-array-1.f90
  cc03e25c3691271e9e9fbb2a674b4655  libgomp/testsuite/libgomp.oacc-fortran/array-stride-dt-1.f90
! b60f9df599841cb97ef2a6785c97ff52  libgomp/testsuite/libgomp.oacc-fortran/asyncwait-1.f90
! c54dcd56776270d286dbab537ea69b4a  libgomp/testsuite/libgomp.oacc-fortran/asyncwait-2.f90
! 8b367ab07bf8308d580e8dc6e80b36a3  libgomp/testsuite/libgomp.oacc-fortran/asyncwait-3.f90
  6fd2a710a84cc89cd45650694d15656e  libgomp/testsuite/libgomp.oacc-fortran/atomic_capture-1.f90
  b53eda12d1ace10b6256bd20bcfcfa38  libgomp/testsuite/libgomp.oacc-fortran/atomic_rw-1.f90
  552def687c8967818402a522b6670853  libgomp/testsuite/libgomp.oacc-fortran/atomic_update-1.f90
! acd19f659b5ab60d50f00dbdf9726673  libgomp/testsuite/libgomp.oacc-fortran/attach-descriptor-1.f90
  a317b75844930d0a54c56b7d47efafee  libgomp/testsuite/libgomp.oacc-fortran/attach-descriptor-2.f90
  c459a54e791263602dae13c9b38a66ad  libgomp/testsuite/libgomp.oacc-fortran/cache-1.f95
  87fd6e069189d013b2200472b9eb8bda  libgomp/testsuite/libgomp.oacc-fortran/class-ptr-param.f95
--- 102239,102258 ----
  f71531081e68cf72f20e97fa5e84200c  libgomp/testsuite/libgomp.oacc-fortran/abort-1.f90
  c9683c99e94f6e35b6a3266a17594788  libgomp/testsuite/libgomp.oacc-fortran/abort-2.f90
  b679de5ffd18c9aa9dde2bffdaf92c7f  libgomp/testsuite/libgomp.oacc-fortran/acc_get_property.f90
! 0eac7e1af4d8ca7c4c42d76cd5015444  libgomp/testsuite/libgomp.oacc-fortran/acc_on_device-1-1.f90
! c9d04d0d82b514d2de4958c54c12b349  libgomp/testsuite/libgomp.oacc-fortran/acc_on_device-1-2.f
! a29a811aa157e6d9fe6113fc76befbe0  libgomp/testsuite/libgomp.oacc-fortran/acc_on_device-1-3.f
  1156f6bd1e8853e97f454dde55593fcf  libgomp/testsuite/libgomp.oacc-fortran/allocatable-1-1.f90
  b5f50dc24e2c3eca23c78de810809df1  libgomp/testsuite/libgomp.oacc-fortran/allocatable-1-2.f90
  268441c3b6afe4ef21eb895887650817  libgomp/testsuite/libgomp.oacc-fortran/allocatable-array-1.f90
  cc03e25c3691271e9e9fbb2a674b4655  libgomp/testsuite/libgomp.oacc-fortran/array-stride-dt-1.f90
! 7cbba7ea1cae9e9e37397e6933c406ed  libgomp/testsuite/libgomp.oacc-fortran/asyncwait-1.f90
! 584753e239ba854b979ae57fd91a3eab  libgomp/testsuite/libgomp.oacc-fortran/asyncwait-2.f90
! c5b9d0d779b841c50246925659eb5634  libgomp/testsuite/libgomp.oacc-fortran/asyncwait-3.f90
  6fd2a710a84cc89cd45650694d15656e  libgomp/testsuite/libgomp.oacc-fortran/atomic_capture-1.f90
  b53eda12d1ace10b6256bd20bcfcfa38  libgomp/testsuite/libgomp.oacc-fortran/atomic_rw-1.f90
  552def687c8967818402a522b6670853  libgomp/testsuite/libgomp.oacc-fortran/atomic_update-1.f90
! 6fca7b464038e93557222bee59420947  libgomp/testsuite/libgomp.oacc-fortran/attach-descriptor-1.f90
  a317b75844930d0a54c56b7d47efafee  libgomp/testsuite/libgomp.oacc-fortran/attach-descriptor-2.f90
  c459a54e791263602dae13c9b38a66ad  libgomp/testsuite/libgomp.oacc-fortran/cache-1.f95
  87fd6e069189d013b2200472b9eb8bda  libgomp/testsuite/libgomp.oacc-fortran/class-ptr-param.f95
*************** e291fb4985f02fc7782cabd92b7fffae  libgom
*** 95553,95560 ****
  728b3e0da3702bf7f1a50e4f6476262f  libgomp/testsuite/libgomp.oacc-fortran/data-3.f90
  817ea5e4070011bdb1552c03b52d8816  libgomp/testsuite/libgomp.oacc-fortran/data-4-2.f90
  2fe7f6b41e02df794fab057986082f62  libgomp/testsuite/libgomp.oacc-fortran/data-4.f90
! 8e0ed13166647b881e630be03cb5107d  libgomp/testsuite/libgomp.oacc-fortran/data-5.f90
! ac946b94f0151da0c0b97127eec425f2  libgomp/testsuite/libgomp.oacc-fortran/declare-1.f90
  83b2b6a7d90554fc77a6a4266b037818  libgomp/testsuite/libgomp.oacc-fortran/declare-2.f90
  ae41f5db2035d1b0ded7399cbf7135b4  libgomp/testsuite/libgomp.oacc-fortran/declare-3.f90
  28eddc3ff93ba0dcfa58b6e5aa8315bc  libgomp/testsuite/libgomp.oacc-fortran/declare-4.f90
--- 102278,102285 ----
  728b3e0da3702bf7f1a50e4f6476262f  libgomp/testsuite/libgomp.oacc-fortran/data-3.f90
  817ea5e4070011bdb1552c03b52d8816  libgomp/testsuite/libgomp.oacc-fortran/data-4-2.f90
  2fe7f6b41e02df794fab057986082f62  libgomp/testsuite/libgomp.oacc-fortran/data-4.f90
! 3bb8da25116226b8ffde6e4c2d09cefd  libgomp/testsuite/libgomp.oacc-fortran/data-5.f90
! 437b0678dace3ccb57b54cc512e04c0f  libgomp/testsuite/libgomp.oacc-fortran/declare-1.f90
  83b2b6a7d90554fc77a6a4266b037818  libgomp/testsuite/libgomp.oacc-fortran/declare-2.f90
  ae41f5db2035d1b0ded7399cbf7135b4  libgomp/testsuite/libgomp.oacc-fortran/declare-3.f90
  28eddc3ff93ba0dcfa58b6e5aa8315bc  libgomp/testsuite/libgomp.oacc-fortran/declare-4.f90
*************** cd7fb9976506e9fd8976a32edc607640  libgom
*** 95571,95577 ****
  cdfddf352df6c0dd2ff55366462575ec  libgomp/testsuite/libgomp.oacc-fortran/derived-type-1.f90
  57095ccfd680418928ca4837fbc882d6  libgomp/testsuite/libgomp.oacc-fortran/derivedtype-1.f95
  55a9a80a81230662b49c62fb85e8cf84  libgomp/testsuite/libgomp.oacc-fortran/derivedtype-2.f95
! fe9488a4be690a5e768b3954dc317933  libgomp/testsuite/libgomp.oacc-fortran/derivedtypes-arrays-1.f90
  7094eb65ee7121b33edac2c4502fd4cb  libgomp/testsuite/libgomp.oacc-fortran/dummy-array.f90
  8db3687cdd62db5b1cdc1b4ab1991217  libgomp/testsuite/libgomp.oacc-fortran/dynamic-incr-structural-1.f90
  de0b6577a463e2b1228c30823e3d915e  libgomp/testsuite/libgomp.oacc-fortran/dynamic-pointer-1.f90
--- 102296,102302 ----
  cdfddf352df6c0dd2ff55366462575ec  libgomp/testsuite/libgomp.oacc-fortran/derived-type-1.f90
  57095ccfd680418928ca4837fbc882d6  libgomp/testsuite/libgomp.oacc-fortran/derivedtype-1.f95
  55a9a80a81230662b49c62fb85e8cf84  libgomp/testsuite/libgomp.oacc-fortran/derivedtype-2.f95
! 20bc27a22bf65c28753f6620a4428efd  libgomp/testsuite/libgomp.oacc-fortran/derivedtypes-arrays-1.f90
  7094eb65ee7121b33edac2c4502fd4cb  libgomp/testsuite/libgomp.oacc-fortran/dummy-array.f90
  8db3687cdd62db5b1cdc1b4ab1991217  libgomp/testsuite/libgomp.oacc-fortran/dynamic-incr-structural-1.f90
  de0b6577a463e2b1228c30823e3d915e  libgomp/testsuite/libgomp.oacc-fortran/dynamic-pointer-1.f90
*************** b15b38824b1308517e500eed941b395c  libgom
*** 95581,95594 ****
  1ca90666ec166deb31a532f320f58fa2  libgomp/testsuite/libgomp.oacc-fortran/firstprivate-1.f90
  9ed8ce5724f0c0dcfe8ed42ca9f70faa  libgomp/testsuite/libgomp.oacc-fortran/fortran.exp
  1c759d21e241899405470f8b5a93d4c4  libgomp/testsuite/libgomp.oacc-fortran/gang-static-1.f90
! baf0045717c212a4e4fa0e95506bf19c  libgomp/testsuite/libgomp.oacc-fortran/gemm-2.f90
! 008479edcad6762fa3ed30dda45251a8  libgomp/testsuite/libgomp.oacc-fortran/gemm.f90
  7e7d539e2c889056240b9439d72f8fcf  libgomp/testsuite/libgomp.oacc-fortran/host_data-1.f90
! 3678ba1a671373c9044fe4e813f6b5c9  libgomp/testsuite/libgomp.oacc-fortran/host_data-2.f90
! d3fcf6235fcd191d01972168b9aea7b6  libgomp/testsuite/libgomp.oacc-fortran/host_data-3.f
! 40506f0c3a4f5f996b401c783986eeb9  libgomp/testsuite/libgomp.oacc-fortran/host_data-4.f90
! bbbf669a571af6776bd4959185739036  libgomp/testsuite/libgomp.oacc-fortran/host_data-5.F90
! e7667d7a3daf07e360f07c8d85f08b26  libgomp/testsuite/libgomp.oacc-fortran/if-1.f90
  9e79f04def374125ca7e12df1aa42e17  libgomp/testsuite/libgomp.oacc-fortran/implicit-firstprivate-ref.f90
  916dd1d0624fc62083348884a09e0cf8  libgomp/testsuite/libgomp.oacc-fortran/kernels-acc-loop-reduction-2.f90
  7c709c6d864edc4962556c34495e8b24  libgomp/testsuite/libgomp.oacc-fortran/kernels-acc-loop-reduction.f90
--- 102306,102319 ----
  1ca90666ec166deb31a532f320f58fa2  libgomp/testsuite/libgomp.oacc-fortran/firstprivate-1.f90
  9ed8ce5724f0c0dcfe8ed42ca9f70faa  libgomp/testsuite/libgomp.oacc-fortran/fortran.exp
  1c759d21e241899405470f8b5a93d4c4  libgomp/testsuite/libgomp.oacc-fortran/gang-static-1.f90
! 9f91cf29f5b9c4862df0fb9820bcf937  libgomp/testsuite/libgomp.oacc-fortran/gemm-2.f90
! e79bc2530648a870e2f0ff4c36e184f2  libgomp/testsuite/libgomp.oacc-fortran/gemm.f90
  7e7d539e2c889056240b9439d72f8fcf  libgomp/testsuite/libgomp.oacc-fortran/host_data-1.f90
! 7ec12a5b107bbcc52d745bea79a48720  libgomp/testsuite/libgomp.oacc-fortran/host_data-2.f90
! cf2a27da59d3b7856348e6c1707bc944  libgomp/testsuite/libgomp.oacc-fortran/host_data-3.f
! 63d16960cfabb69ecf97cf86440e8178  libgomp/testsuite/libgomp.oacc-fortran/host_data-4.f90
! ff0dfe860a767859da163b00d4de4479  libgomp/testsuite/libgomp.oacc-fortran/host_data-5.F90
! d09b7a0a0fcbb38c1c35b5a9899e3a09  libgomp/testsuite/libgomp.oacc-fortran/if-1.f90
  9e79f04def374125ca7e12df1aa42e17  libgomp/testsuite/libgomp.oacc-fortran/implicit-firstprivate-ref.f90
  916dd1d0624fc62083348884a09e0cf8  libgomp/testsuite/libgomp.oacc-fortran/kernels-acc-loop-reduction-2.f90
  7c709c6d864edc4962556c34495e8b24  libgomp/testsuite/libgomp.oacc-fortran/kernels-acc-loop-reduction.f90
*************** c89e92bd2d859862bef91e6cd3a8347b  libgom
*** 95596,95602 ****
  a68833c3acdcbe634aea306fdf2bcd51  libgomp/testsuite/libgomp.oacc-fortran/kernels-collapse-4.f90
  37eaabee0180aa82b7a0b994afb530d9  libgomp/testsuite/libgomp.oacc-fortran/kernels-independent.f90
  bf8a23d4a54a84319430cf12f4ab5155  libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-1.f90
! a87e74a4416c2b914cc1ef2724a58321  libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-2.f95
  92aea28f06d0c5944bd84f91ce521a5d  libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-2.f95
  3755e459a8bcf7ae9909961c1aa1e041  libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit-2.f95
  a099f8b746cc1ce623241a11dce9e31f  libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit.f95
--- 102321,102327 ----
  a68833c3acdcbe634aea306fdf2bcd51  libgomp/testsuite/libgomp.oacc-fortran/kernels-collapse-4.f90
  37eaabee0180aa82b7a0b994afb530d9  libgomp/testsuite/libgomp.oacc-fortran/kernels-independent.f90
  bf8a23d4a54a84319430cf12f4ab5155  libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-1.f90
! 95bf77b35a3e4fc7a60d24bca8091d28  libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-2.f95
  92aea28f06d0c5944bd84f91ce521a5d  libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-2.f95
  3755e459a8bcf7ae9909961c1aa1e041  libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit-2.f95
  a099f8b746cc1ce623241a11dce9e31f  libgomp/testsuite/libgomp.oacc-fortran/kernels-loop-data-enter-exit.f95
*************** a099f8b746cc1ce623241a11dce9e31f  libgom
*** 95605,95641 ****
  1bea78f54273c982b84abd552dab0d32  libgomp/testsuite/libgomp.oacc-fortran/kernels-loop.f95
  bcea2108756f9655b402e426cda82b38  libgomp/testsuite/libgomp.oacc-fortran/kernels-map-1.f90
  f5f24ee5f1b49c5476b8e434667b973c  libgomp/testsuite/libgomp.oacc-fortran/kernels-parallel-loop-data-enter-exit.f95
! abd33d2a12ed7745a6179881f35a8375  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-1.f90
! 099cae4f8f279072d099a331f655da82  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-2.f90
! 9a69435eda500b05c19e0d72ea45ce33  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-3.f90
! 77456152d8655f986d36a11cd2a15b7d  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-6.f90
! f976df8e42592589e2b612a06d34c02d  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-vector-1.f90
! 6281c7ad5b712fd173cf93e0eeeb12c6  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-vector-2.f90
! 889ac94a795ca2b5e3d3992ad58f6f4f  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-1.f90
! da8a3e93f7108aeaf0af5386ad554b1d  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-2.f90
! 2b6f955edae9522d7fe961d914371ea4  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-3.f90
! b2aae28f45135ad5f3074f0f709d2caf  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-4.f90
! e3c029d3cb778e43609a1fd9a8886f3a  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-5.f90
! b4c8159fae89267a25c80ccfc11ac5a0  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-6.f90
! 071d84328eefd52791b670858d61b124  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-7.f90
! a264864cf62679a25052680a84c26370  libgomp/testsuite/libgomp.oacc-fortran/kernels-reduction-1.f90
  aeaad5052b0b55075519fae4a77d2275  libgomp/testsuite/libgomp.oacc-fortran/lib-1.f90
! 43db45ad2e362c84d12d9f23f31f73a0  libgomp/testsuite/libgomp.oacc-fortran/lib-10.f90
  2cb8539f9bc2791e35d9e5ba01f9b560  libgomp/testsuite/libgomp.oacc-fortran/lib-12.f90
  2c9dbfa953fb74a2be2be0f010fa0739  libgomp/testsuite/libgomp.oacc-fortran/lib-13.f90
! 44a9f17e0200fee4a7de3986216cad5d  libgomp/testsuite/libgomp.oacc-fortran/lib-14.f90
  91240e943d4c6ac011ae7a5b374f72ef  libgomp/testsuite/libgomp.oacc-fortran/lib-15.f90
! d0b517e6ad6efc4c1dd16374f1d86c2f  libgomp/testsuite/libgomp.oacc-fortran/lib-16-2.f90
! f98cd2e4d284c8d428356a73d302bc34  libgomp/testsuite/libgomp.oacc-fortran/lib-16.f90
  ded3fbe13b7b3a32094424794ec431a8  libgomp/testsuite/libgomp.oacc-fortran/lib-2.f
  1c546c6eef4d1ddd8e0b748ccc703357  libgomp/testsuite/libgomp.oacc-fortran/lib-3.f
  6cb1ae63d758b34c0b2ad54d247a16d7  libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f
  c02d06bf92c7e31995bf394f8ed4708f  libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f
  a975bf7ac8e332ff727db7c22c514c28  libgomp/testsuite/libgomp.oacc-fortran/lib-4.f90
! 2410532880e58799e24af6c9a3aa90ce  libgomp/testsuite/libgomp.oacc-fortran/lib-5.f90
  b17a9bac2116bc46ac5e479464f84c00  libgomp/testsuite/libgomp.oacc-fortran/lib-6.f90
! 6c2130a015fb31ec8a56158552fee173  libgomp/testsuite/libgomp.oacc-fortran/lib-7.f90
! 341329394e0e33035b866cbd7ae074a3  libgomp/testsuite/libgomp.oacc-fortran/lib-8.f90
  bbd4b16c1ca7daf2a129c18670fd1947  libgomp/testsuite/libgomp.oacc-fortran/map-1.f90
  e08cd040493e659bd3b19377dbc3f86b  libgomp/testsuite/libgomp.oacc-fortran/mdc-refcount-1-1-1.f90
  cc3335aa2bc2ad1f59069020262f6d00  libgomp/testsuite/libgomp.oacc-fortran/mdc-refcount-1-1-2.F90
--- 102330,102366 ----
  1bea78f54273c982b84abd552dab0d32  libgomp/testsuite/libgomp.oacc-fortran/kernels-loop.f95
  bcea2108756f9655b402e426cda82b38  libgomp/testsuite/libgomp.oacc-fortran/kernels-map-1.f90
  f5f24ee5f1b49c5476b8e434667b973c  libgomp/testsuite/libgomp.oacc-fortran/kernels-parallel-loop-data-enter-exit.f95
! e48047820a9a46b2889a9f4cd7b2bc66  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-1.f90
! f4ee261a7c17c62a7d20be6a85f39a3a  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-2.f90
! 44cbfbf6c61a04de030d2a60d4bd8d63  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-3.f90
! e7279502332fdf3905ddc49743025848  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-6.f90
! db51508dd250ba5d94f8ec8fdc25387b  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-vector-1.f90
! 35a1deb47258914cd996b00795d9fc6c  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-vector-2.f90
! c35e6e98bc5ea35d34a7f37fcf2ea564  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-1.f90
! cfa34d72176aab0959632e702fef8668  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-2.f90
! 11017cfe2150eeeb569f7f5e18ee195e  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-3.f90
! acfd83d4c416c6c70fecbb7472ec3f36  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-4.f90
! 79f8c1c717328fdda5ca3767f1580922  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-5.f90
! 14bc729dac61a2568dcd16171d11f021  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-6.f90
! a5d80da308c21f5cc3268318f4dd0d6c  libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-worker-7.f90
! ad0f604b81bd68d2854d88260581b24f  libgomp/testsuite/libgomp.oacc-fortran/kernels-reduction-1.f90
  aeaad5052b0b55075519fae4a77d2275  libgomp/testsuite/libgomp.oacc-fortran/lib-1.f90
! 463b3f99768cf4a6b78111b273b6de56  libgomp/testsuite/libgomp.oacc-fortran/lib-10.f90
  2cb8539f9bc2791e35d9e5ba01f9b560  libgomp/testsuite/libgomp.oacc-fortran/lib-12.f90
  2c9dbfa953fb74a2be2be0f010fa0739  libgomp/testsuite/libgomp.oacc-fortran/lib-13.f90
! ed57da4a84299d79c753f649f89caed7  libgomp/testsuite/libgomp.oacc-fortran/lib-14.f90
  91240e943d4c6ac011ae7a5b374f72ef  libgomp/testsuite/libgomp.oacc-fortran/lib-15.f90
! 25a129e874b4748b2a86c6b553e0b334  libgomp/testsuite/libgomp.oacc-fortran/lib-16-2.f90
! b23f177a6bf3c01c9fcd91a0cbdb6497  libgomp/testsuite/libgomp.oacc-fortran/lib-16.f90
  ded3fbe13b7b3a32094424794ec431a8  libgomp/testsuite/libgomp.oacc-fortran/lib-2.f
  1c546c6eef4d1ddd8e0b748ccc703357  libgomp/testsuite/libgomp.oacc-fortran/lib-3.f
  6cb1ae63d758b34c0b2ad54d247a16d7  libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f
  c02d06bf92c7e31995bf394f8ed4708f  libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f
  a975bf7ac8e332ff727db7c22c514c28  libgomp/testsuite/libgomp.oacc-fortran/lib-4.f90
! b85dca7b9975ade4361803366910b9df  libgomp/testsuite/libgomp.oacc-fortran/lib-5.f90
  b17a9bac2116bc46ac5e479464f84c00  libgomp/testsuite/libgomp.oacc-fortran/lib-6.f90
! 2da27ca69bd2accd960370b1a16c3f27  libgomp/testsuite/libgomp.oacc-fortran/lib-7.f90
! 2be62c3a48d59fb5ea2c41ee5e3e1a0a  libgomp/testsuite/libgomp.oacc-fortran/lib-8.f90
  bbd4b16c1ca7daf2a129c18670fd1947  libgomp/testsuite/libgomp.oacc-fortran/map-1.f90
  e08cd040493e659bd3b19377dbc3f86b  libgomp/testsuite/libgomp.oacc-fortran/mdc-refcount-1-1-1.f90
  cc3335aa2bc2ad1f59069020262f6d00  libgomp/testsuite/libgomp.oacc-fortran/mdc-refcount-1-1-2.F90
*************** f28ba9da4d61e918f023fe4c4cb5b881  libgom
*** 95664,95711 ****
  d72d2020e130baea4df9a44c7838722a  libgomp/testsuite/libgomp.oacc-fortran/optional-firstprivate.f90
  6a2a8dd19565bc170c9bf65af57afab8  libgomp/testsuite/libgomp.oacc-fortran/optional-host_data.f90
  c18ba62022da6e901a96d34febfd76d2  libgomp/testsuite/libgomp.oacc-fortran/optional-nested-calls.f90
! c8548d752e7639b37f28078cecfb08e7  libgomp/testsuite/libgomp.oacc-fortran/optional-private.f90
! c938c2c0e57bc079b2deb26bb0892738  libgomp/testsuite/libgomp.oacc-fortran/optional-reduction.f90
  74e823be8176b443d3d42c8185ed5e92  libgomp/testsuite/libgomp.oacc-fortran/optional-update-device.f90
  ee9f4b7a6a45307457967dd800b60194  libgomp/testsuite/libgomp.oacc-fortran/optional-update-host.f90
! 52143be00da5758b98b8954142e63525  libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-1.f
! 2f05027ceef00ff5758125465bf9a54d  libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-2.f
! c133c44b6da950207fe2fecab84f8e62  libgomp/testsuite/libgomp.oacc-fortran/parallel-dims-aux.c
! 0189de1c96c37c77243f8f3259bb9674  libgomp/testsuite/libgomp.oacc-fortran/parallel-dims.f90
  80c95fdc50d30ca6b6e9a656a3dee888  libgomp/testsuite/libgomp.oacc-fortran/parallel-loop-1.f90
! d32062ce97675dc5b8de4e9cee87e1b5  libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90
  d9e4b9d5b65e13485be9e4fccd4825fd  libgomp/testsuite/libgomp.oacc-fortran/pointer-align-1.f90
  080a98cbed388ca018c933fd53e1e88d  libgomp/testsuite/libgomp.oacc-fortran/pr68813.f90
  ba279397e9aceb22ea58f656fd6bcd9f  libgomp/testsuite/libgomp.oacc-fortran/pr70289.f90
! 4827ada7edba616d5228fdc08ba75f7d  libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90
  4efe96d8b96638a6b6e34f91259123b1  libgomp/testsuite/libgomp.oacc-fortran/pr81352.f90
  ae34a0a33c324e692b2da2ef2923edb3  libgomp/testsuite/libgomp.oacc-fortran/pr83920.f90
! 2db69fba10f0ce5a690041399be29d9d  libgomp/testsuite/libgomp.oacc-fortran/pr84028.f90
  8175cec1f19b14dba021a884c3d90e52  libgomp/testsuite/libgomp.oacc-fortran/pr84955.f90
! 91bf4d48a39d8394a4d44a6f471979dc  libgomp/testsuite/libgomp.oacc-fortran/pr94358-1.f90
! f6d2da9fc59c699efbd51b9c34bdbeb8  libgomp/testsuite/libgomp.oacc-fortran/pr96628-part1.f90
  0713d6f197e69942e0bf3ce291d92c25  libgomp/testsuite/libgomp.oacc-fortran/pr96628-part2.f90
  b67bfba76f88f8ae8281c1e2e381706a  libgomp/testsuite/libgomp.oacc-fortran/print-1-nvptx.f90
! 0ca3908532b8e5ae143b4c11a6822625  libgomp/testsuite/libgomp.oacc-fortran/print-1.f90
! 0da4e68cc568259f83f1c02b2e4a6305  libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90
  c8960b2d870263545f61c78baeb03c7b  libgomp/testsuite/libgomp.oacc-fortran/pset-1.f90
! c1752cc12b418380f2f7cdf1cb2350cd  libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90
  97e65050d6226da060e95c2fb1985e9d  libgomp/testsuite/libgomp.oacc-fortran/reduction-2.f90
  49814be3262cf0c6420544b17cdf3934  libgomp/testsuite/libgomp.oacc-fortran/reduction-3.f90
  a9e822ce19d26f5cc1427bb8eccd2aba  libgomp/testsuite/libgomp.oacc-fortran/reduction-4.f90
! 795594aaeafd2a32a8554f35d32740e4  libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90
! 38888816d7b2973d123af2bbeb464743  libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90
! 81ca0ae4d4f9726ca7e0b4afc2819973  libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90
  2319e6e9fb323e323de49d8e109f5e73  libgomp/testsuite/libgomp.oacc-fortran/reduction-8.f90
! ef528021ebe7dff74cf8f0a78d2eac65  libgomp/testsuite/libgomp.oacc-fortran/reference-reductions.f90
! 2ddccd79e8a32a22990bb59958cdf590  libgomp/testsuite/libgomp.oacc-fortran/routine-1.f90
! aaf52555d5d80386445afe1a1fb0fda4  libgomp/testsuite/libgomp.oacc-fortran/routine-10.f90
! 180a86fcfcbd20e3283b065ecc7ab6aa  libgomp/testsuite/libgomp.oacc-fortran/routine-2.f90
! 587985ef7e9fc6203f8886fbafacf9f5  libgomp/testsuite/libgomp.oacc-fortran/routine-3.f90
  576d913af18b8261f765fcf068efc278  libgomp/testsuite/libgomp.oacc-fortran/routine-4.f90
  ee7521ad4aa9a4706a403ccbc2d58f80  libgomp/testsuite/libgomp.oacc-fortran/routine-5.f90
! 72f512627fac89dcf61bcaadae02b3ed  libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90
! 33ef2e55343edd608f8494ebf9d3be7c  libgomp/testsuite/libgomp.oacc-fortran/routine-9.f90
  b597915a52bb85b1298c867e37105162  libgomp/testsuite/libgomp.oacc-fortran/stop-1.f
  31a78af6c9cd8024bc256da6bee7798e  libgomp/testsuite/libgomp.oacc-fortran/stop-2.f
  6767d800c1c100b32b1dba2d6080c0a3  libgomp/testsuite/libgomp.oacc-fortran/stop-3.f
--- 102389,102443 ----
  d72d2020e130baea4df9a44c7838722a  libgomp/testsuite/libgomp.oacc-fortran/optional-firstprivate.f90
  6a2a8dd19565bc170c9bf65af57afab8  libgomp/testsuite/libgomp.oacc-fortran/optional-host_data.f90
  c18ba62022da6e901a96d34febfd76d2  libgomp/testsuite/libgomp.oacc-fortran/optional-nested-calls.f90
! 0a1fa21663fdfc7805d27a3be2693c7c  libgomp/testsuite/libgomp.oacc-fortran/optional-private.f90
! 25b58827bea5208206067594a6514b2f  libgomp/testsuite/libgomp.oacc-fortran/optional-reduction.f90
  74e823be8176b443d3d42c8185ed5e92  libgomp/testsuite/libgomp.oacc-fortran/optional-update-device.f90
  ee9f4b7a6a45307457967dd800b60194  libgomp/testsuite/libgomp.oacc-fortran/optional-update-host.f90
! a402f798a57907e7674086319cffb22a  libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-1.f
! e454fc34a070199f0efc5d93f4b2f680  libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-2.f
! afd3ef6ee5d490af92f835aae7deb0c0  libgomp/testsuite/libgomp.oacc-fortran/parallel-dims-aux.c
! 3cbc2ceb34c812be6e5994f28cb55d56  libgomp/testsuite/libgomp.oacc-fortran/parallel-dims.f90
  80c95fdc50d30ca6b6e9a656a3dee888  libgomp/testsuite/libgomp.oacc-fortran/parallel-loop-1.f90
! 4f567e851fc41037bc345363da01face  libgomp/testsuite/libgomp.oacc-fortran/parallel-reduction.f90
  d9e4b9d5b65e13485be9e4fccd4825fd  libgomp/testsuite/libgomp.oacc-fortran/pointer-align-1.f90
  080a98cbed388ca018c933fd53e1e88d  libgomp/testsuite/libgomp.oacc-fortran/pr68813.f90
  ba279397e9aceb22ea58f656fd6bcd9f  libgomp/testsuite/libgomp.oacc-fortran/pr70289.f90
! df66384433cd85d840c96ce3afcb8a18  libgomp/testsuite/libgomp.oacc-fortran/pr70643.f90
  4efe96d8b96638a6b6e34f91259123b1  libgomp/testsuite/libgomp.oacc-fortran/pr81352.f90
  ae34a0a33c324e692b2da2ef2923edb3  libgomp/testsuite/libgomp.oacc-fortran/pr83920.f90
! 1e7d8ccfbe23d4e6f68bae40bce019fe  libgomp/testsuite/libgomp.oacc-fortran/pr84028.f90
  8175cec1f19b14dba021a884c3d90e52  libgomp/testsuite/libgomp.oacc-fortran/pr84955.f90
! 23f7ae65627ecb7962557bae27fe0f81  libgomp/testsuite/libgomp.oacc-fortran/pr90030.f90
! ab1bef1451508c50b6d75e5790e61c2e  libgomp/testsuite/libgomp.oacc-fortran/pr94358-1.f90
! 57178f0c49f9adc4befee9c7b93d77af  libgomp/testsuite/libgomp.oacc-fortran/pr96628-part1.f90
  0713d6f197e69942e0bf3ce291d92c25  libgomp/testsuite/libgomp.oacc-fortran/pr96628-part2.f90
  b67bfba76f88f8ae8281c1e2e381706a  libgomp/testsuite/libgomp.oacc-fortran/print-1-nvptx.f90
! 0d158804782b227527d9331c06d5cac4  libgomp/testsuite/libgomp.oacc-fortran/print-1.f90
! ac9e80c7d1eb2f0ec65ce5a9226fb1d2  libgomp/testsuite/libgomp.oacc-fortran/private-atomic-1-gang.f90
! 8d0523f7afaa77909cc566ebb2000f86  libgomp/testsuite/libgomp.oacc-fortran/private-atomic-1-vector.f90
! 1c3ea6cf8b3fdbaaca48eede6a78b377  libgomp/testsuite/libgomp.oacc-fortran/private-atomic-1-worker.f90
! a2a630debffe26086dcf2269428bc680  libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90
! 08b06d21055c0ae650695af3186e447b  libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-1.f95
! 7676ae962c437a7b2e5a714c64aeb736  libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90
  c8960b2d870263545f61c78baeb03c7b  libgomp/testsuite/libgomp.oacc-fortran/pset-1.f90
! 0094f0ea35e805d38b98b9fc1df88e12  libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90
  97e65050d6226da060e95c2fb1985e9d  libgomp/testsuite/libgomp.oacc-fortran/reduction-2.f90
  49814be3262cf0c6420544b17cdf3934  libgomp/testsuite/libgomp.oacc-fortran/reduction-3.f90
  a9e822ce19d26f5cc1427bb8eccd2aba  libgomp/testsuite/libgomp.oacc-fortran/reduction-4.f90
! 326c80c2462dfee7ab016d84ef7cedff  libgomp/testsuite/libgomp.oacc-fortran/reduction-5.f90
! 390e0c40d29abb94570aedebbccf9c29  libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90
! a46315dfdcd237a30d2ed513793e7af0  libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90
  2319e6e9fb323e323de49d8e109f5e73  libgomp/testsuite/libgomp.oacc-fortran/reduction-8.f90
! ecab3db1c583fd780509f998730e2683  libgomp/testsuite/libgomp.oacc-fortran/reference-reductions.f90
! f27c8699055d51137a215f859b9c29c9  libgomp/testsuite/libgomp.oacc-fortran/routine-1.f90
! 8d4eb336720b8e88b9ef629a86e332fa  libgomp/testsuite/libgomp.oacc-fortran/routine-10.f90
! a8976adc015f700fa25295be14447374  libgomp/testsuite/libgomp.oacc-fortran/routine-2.f90
! 634446df98fb16345c308d413f621138  libgomp/testsuite/libgomp.oacc-fortran/routine-3.f90
  576d913af18b8261f765fcf068efc278  libgomp/testsuite/libgomp.oacc-fortran/routine-4.f90
  ee7521ad4aa9a4706a403ccbc2d58f80  libgomp/testsuite/libgomp.oacc-fortran/routine-5.f90
! b17d9a6be87aa880c6f4edacb94c8b96  libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90
! d8a29de950f49f4fc90c9401a7c03227  libgomp/testsuite/libgomp.oacc-fortran/routine-9.f90
! d875f4d51a3b5cbf9037bc9fd0dacfd6  libgomp/testsuite/libgomp.oacc-fortran/routine-nohost-1.f90
  b597915a52bb85b1298c867e37105162  libgomp/testsuite/libgomp.oacc-fortran/stop-1.f
  31a78af6c9cd8024bc256da6bee7798e  libgomp/testsuite/libgomp.oacc-fortran/stop-2.f
  6767d800c1c100b32b1dba2d6080c0a3  libgomp/testsuite/libgomp.oacc-fortran/stop-3.f
*************** e8a3245c095430c8ef2413afe2ee4c48  libgom
*** 95715,95758 ****
  1ee538b1d8c3361fa5c71fc8cac2aa7a  libgomp/testsuite/libgomp.oacc-fortran/update-2.f90
  1d2e2e1ab9f0d92351625f2c5661dbb8  libgomp/testsuite/libgomp.oacc-fortran/update-dt-array.f90
  989e6535f20045be32e9e91643a0b08f  libgomp/testsuite/libgomp.oacc-fortran/vector-routine.f90
! 8ad28ef1808c27a75ad52229a13307c4  libgomp/work.c
! 0600fee6b19aff2c196bbd8652e43fa4  libhsail-rt/ChangeLog
! 9147b482b39962a71e580b4a8265285e  libhsail-rt/Makefile.am
! f63e3c959c7490f1fbe708067e4884ae  libhsail-rt/Makefile.in
! de97a355fadb5753d182cbcf06b1b33a  libhsail-rt/README
! 9fe4a2e547516f597b253cd8efd9c069  libhsail-rt/aclocal.m4
! 0f3f9000b23f89249af720f0cc2034fa  libhsail-rt/configure
! 8fe038f14ce9e21e83fdd96fb85374ea  libhsail-rt/configure.ac
! 74e96a808d107fbaec535d18c1686a98  libhsail-rt/configure.tgt
! 9ea444ff6e91bb60f7c3637665e5efb9  libhsail-rt/include/internal/fibers.h
! f7cd18dd096b1bc07364470ea1c7a6fb  libhsail-rt/include/internal/phsa-queue-interface.h
! 2db46bbcce909d9df6402954f9c94eb4  libhsail-rt/include/internal/phsa-rt.h
! 555a075ebdf52347960985e053edd866  libhsail-rt/include/internal/workitems.h
! 4844c8729c3e504934b981bdefad7e0d  libhsail-rt/rt/arithmetic.c
! ba9d6c8fce9da64c0ab8d7f9c8188d4a  libhsail-rt/rt/atomics.c
! 5513605c8ecdeff153dbe3cb1fdfe744  libhsail-rt/rt/bitstring.c
! be5e977073ff1d8264c9a95397fac305  libhsail-rt/rt/fbarrier.c
! 3a4c9afc82600a30c02ab2fe47e10ace  libhsail-rt/rt/fibers.c
! ea531e7185c5909308ccddc8f273dd88  libhsail-rt/rt/fp16.c
! fff440612fc95e424cc537811af84250  libhsail-rt/rt/misc.c
! 425c23afc0032ee2e6dd9a935d2b8ac6  libhsail-rt/rt/multimedia.c
! 1319d35508333122096e5b445436b6e2  libhsail-rt/rt/queue.c
! 5fb5725754d747fb054ecb7fa16217e4  libhsail-rt/rt/sat_arithmetic.c
! 2c33cd0d204cf46d93cb0764bbed603a  libhsail-rt/rt/segment.c
! f35af2a2efaa8dd337095878b57cabf5  libhsail-rt/rt/workitems.c
! ef9f05873915c22cae79ef5545355353  libhsail-rt/target-config.h.in
  99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
  a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
! 3ef05da1891969dfc77c23fe81145f5f  libiberty/ChangeLog
  347c31392973de6a4872d540c1718dc1  libiberty/ChangeLog.jit
! d2b139408a3f08c5813183e34dc39b38  libiberty/Makefile.in
  c68dbf7834af4281ebd84caa3fd54680  libiberty/README
! f9b2cd52c3c30368d71459347fb64849  libiberty/_doprnt.c
! ad7456c201ca1e60520e6955b41a964c  libiberty/acinclude.m4
  d1955a5319e9f2bf4d714152f8da1d1a  libiberty/aclocal.m4
  e60c2e7c5dcdd19510066c13f1a527d3  libiberty/alloca.c
! 2a8c5652b247080a01280f8c6af37fdc  libiberty/argv.c
! ba1a69aa92e6248b3ab674f74a9fd0de  libiberty/asprintf.c
  a16ea056b95fd70c21333db132da14ff  libiberty/at-file.texi
  c34119797a13e71989722851c14b711b  libiberty/atexit.c
  ab8d4cd68aa4892e2318d2c71864cc56  libiberty/basename.c
--- 102447,102465 ----
  1ee538b1d8c3361fa5c71fc8cac2aa7a  libgomp/testsuite/libgomp.oacc-fortran/update-2.f90
  1d2e2e1ab9f0d92351625f2c5661dbb8  libgomp/testsuite/libgomp.oacc-fortran/update-dt-array.f90
  989e6535f20045be32e9e91643a0b08f  libgomp/testsuite/libgomp.oacc-fortran/vector-routine.f90
! 6093e9d697987434cc9d843eba99b2f5  libgomp/work.c
  99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
  a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
! d77dadca2147310f0833f298c5e1448b  libiberty/ChangeLog
  347c31392973de6a4872d540c1718dc1  libiberty/ChangeLog.jit
! 73876271d63c0a1714fd605cb5898efa  libiberty/Makefile.in
  c68dbf7834af4281ebd84caa3fd54680  libiberty/README
! 6775ab372c166a5b526d8a6478564f62  libiberty/_doprnt.c
! 9b3892c9c637349b5fb1317991969b58  libiberty/acinclude.m4
  d1955a5319e9f2bf4d714152f8da1d1a  libiberty/aclocal.m4
  e60c2e7c5dcdd19510066c13f1a527d3  libiberty/alloca.c
! 17c8aa894195eee0ae35de1c1fc462c1  libiberty/argv.c
! 096af09ad0e47000226805186409e780  libiberty/asprintf.c
  a16ea056b95fd70c21333db132da14ff  libiberty/at-file.texi
  c34119797a13e71989722851c14b711b  libiberty/atexit.c
  ab8d4cd68aa4892e2318d2c71864cc56  libiberty/basename.c
*************** a707d2e5daa09d204d4441e8713048ca  libibe
*** 95762,95770 ****
  0ce04768d60b33d4951e6542d1bcbdac  libiberty/bsearch_r.c
  4a0acb9356a52f3bcfd67efa26997b58  libiberty/bzero.c
  5bd055836a440051d7c561a9f591ecbb  libiberty/calloc.c
! 2d92d71ed61f6621c087dac46c5f2450  libiberty/choose-temp.c
! 36f44e787c68450a2b7c1d10fc3d13f8  libiberty/clock.c
! bfd0958f18564e6b31c64920e419969e  libiberty/concat.c
  83565a31c7f296b3013daf383cd03ee9  libiberty/config.h-vms
  c490c2d0e84347da40a272a019f71dd4  libiberty/config.in
  4004fdcde347fda58406b4b84a995c66  libiberty/config/mh-aix
--- 102469,102477 ----
  0ce04768d60b33d4951e6542d1bcbdac  libiberty/bsearch_r.c
  4a0acb9356a52f3bcfd67efa26997b58  libiberty/bzero.c
  5bd055836a440051d7c561a9f591ecbb  libiberty/calloc.c
! 2b8a5f1ac12ba949e9ab36ffa80d19c4  libiberty/choose-temp.c
! 27c6e6c8f9aec70615c9a83d7bd10a3a  libiberty/clock.c
! 1ce244a479c8df2d95d0265eb5aa36f0  libiberty/concat.c
  83565a31c7f296b3013daf383cd03ee9  libiberty/config.h-vms
  c490c2d0e84347da40a272a019f71dd4  libiberty/config.in
  4004fdcde347fda58406b4b84a995c66  libiberty/config/mh-aix
*************** c490c2d0e84347da40a272a019f71dd4  libibe
*** 95772,95991 ****
  044204f5b4bcac5eae2face0602129ae  libiberty/config/mh-fbsd21
  904bdcd9daf97fa55a9ca8901ffe7435  libiberty/config/mh-openedition
  38e76da568ab25260754fdb9d5080513  libiberty/config/mh-windows
! 56a45e5f8af31c8caed97f4e4dc5379f  libiberty/configure
! a93da0f9e4f38f080e092efb748971a0  libiberty/configure.ac
  5824bd0f9be9f4fa74bb3bdc7fd9431c  libiberty/configure.com
! 3f7c04aad9685c914253ef29a611199e  libiberty/copying-lib.texi
  fe053283d3559af3ec5cac45f8ead009  libiberty/copysign.c
! 7b63e04c6e9a18f279805ade1fe0305f  libiberty/cp-demangle.c
! 918eb42653b0bef10c0451209f10f2ff  libiberty/cp-demangle.h
! 22ffad6d2f908fe9f25f89016ec265cf  libiberty/cp-demint.c
! 7b74e83f683480ac7b91daf96f42a208  libiberty/cplus-dem.c
! c62fd9d734ffc22c24974f15a2196191  libiberty/crc32.c
! 67426e2352d23441bd5925f13013791c  libiberty/d-demangle.c
! 5a65aae4d1fdb63ca287ad773d568f7f  libiberty/dwarfnames.c
! 44caaf4ea452985b89aba11ee3d379be  libiberty/dyn-string.c
! 4390cd531b96e37fec16e734b6b5db8c  libiberty/fdmatch.c
  0c2635175b975823b40980974dfc2110  libiberty/ffs.c
! 379d8f7ec4a178e363d55d5aa7a29e8a  libiberty/fibheap.c
! 293852de0cc2c1a94b8129572dabdfc0  libiberty/filedescriptor.c
! 811d12698ad26785de510760f9369afc  libiberty/filename_cmp.c
! 79f2a33446d1de281562472249364b59  libiberty/floatformat.c
! fb0c17f9894de5d167d54d45e5a14290  libiberty/fnmatch.c
  145debe2f28f470878f95b1255f5537c  libiberty/fnmatch.txh
! d571094ade4af24192b8ae639d503802  libiberty/fopen_unlocked.c
  cd2f41c11d564ff1394a2bc8e0d39bd9  libiberty/functions.texi
! f867b7a778070d75e1b256ed4f3a65fb  libiberty/gather-docs
  754c5ef42440c5d1b62146174a6636e4  libiberty/getcwd.c
! 2a5faa14c0b41ebe7053ee32cdf17231  libiberty/getopt.c
! 4600d159dcc9940c11ff8763c8f2a021  libiberty/getopt1.c
  bb0043d92c716691cc17b80c845c336b  libiberty/getpagesize.c
  5e520e600636a692f52e62dcfb01921c  libiberty/getpwd.c
! fee15e1f5a5859ed8953cc8c2bad2794  libiberty/getruntime.c
  0c70ad1e35bb090b52ed593865025741  libiberty/gettimeofday.c
! 315d634b387f55dd0d1fa4ee97ee95fa  libiberty/hashtab.c
! 199dea139218ad71acf9f6dbcbf340bb  libiberty/hex.c
  4d485e7735be430b22aea0abb4938e26  libiberty/index.c
  9d0471286f21d9027bbf1b7c67b87856  libiberty/insque.c
! 6af8aee3d0f8fc3ae252e3ead4e9b454  libiberty/lbasename.c
! 49c5f5ab825c4bd456afb37b5474784b  libiberty/libiberty.texi
! 7881dfa6c12008ddaf11607bf6bed713  libiberty/lrealpath.c
! 1f97bb74cde590207b10930a47eca3b5  libiberty/maint-tool
! 55933913890a2ece22d08e4482707166  libiberty/make-relative-prefix.c
! 18b6d56f9bc4bccc36d13fda3838b203  libiberty/make-temp-file.c
  80367d734a974bd32e9ebc370dedd2e7  libiberty/makefile.vms
! e383b626d8414d0d87f24445bd58e6d4  libiberty/md5.c
  de9bd20436bf2cb64d8c374c110ce315  libiberty/memchr.c
  33320d312ab390ca0eb5c43c9e349d57  libiberty/memcmp.c
  c90c2f09bdcbd65b4732a4be25a56d12  libiberty/memcpy.c
! d09bf75e62c1449c1c488d4baf8842eb  libiberty/memmem.c
  99bfeaeb76e8e725dd8766f33810ccb1  libiberty/memmove.c
! b7293fcd6d5be9cc7e1ea5c72d5b5918  libiberty/mempcpy.c
  c44adc5ac09bdc782a8e13086ffa9367  libiberty/memset.c
! 24f0ad30c6403a6b12143a48221b6c29  libiberty/mkstemps.c
  7897e43bedd2def4beb6eb73003efa68  libiberty/msdos.c
! 5be63278d0ff2f3cf24e7d08f2406e0d  libiberty/objalloc.c
! b0e28d6013324933cde86a7082548bee  libiberty/obstack.c
  26ef02d458c958c1599de12b02c559dc  libiberty/obstacks.texi
! 502f10848aaa76deabb3fc72dbedc765  libiberty/partition.c
! f6588fdb80e5e9577731264474196485  libiberty/pex-common.c
! eb70b37dd4cd7d2a8216103c62bbce1f  libiberty/pex-common.h
! 046feff2e86d975122743becc6709540  libiberty/pex-djgpp.c
! ad0436df24cc7e497bedcf3c332b0a1a  libiberty/pex-msdos.c
! 9432e56b8b6fd150ced79ef0a1e3e45c  libiberty/pex-one.c
! 63af51490434d9289a6e3491424f6ed2  libiberty/pex-unix.c
! 314a2e9353d33a06ba2ff9dcea4e77b1  libiberty/pex-win32.c
! 06304452ee660564b6c1c0ac6c5ce553  libiberty/pexecute.c
  a6b1581efa83a4072727b38d6fef4230  libiberty/pexecute.txh
! 563e1d12db28f6000083bd3333a1ca9c  libiberty/physmem.c
! 7022295e4946e3823e17f166ae7809cb  libiberty/putenv.c
  94f22680349b4ae73ad658495d2eb542  libiberty/random.c
! f3f0aaebb6ab368e62c67ff9a5675ce0  libiberty/regex.c
  24eab3d83825c3be13549dc62b6d63d6  libiberty/rename.c
  74850488731148a9c9f410042144f37d  libiberty/rindex.c
! 6249a85761472466cd47eec599a3cb6d  libiberty/rust-demangle.c
! eace59ac0de55fdc58232b196cdaecd1  libiberty/safe-ctype.c
! 2ae492363d5deb14f195eec78fae6234  libiberty/setenv.c
! 743e1e272d59750c5edb14d5bce9d4bd  libiberty/setproctitle.c
! b0bfa24a5463b326e70dd400a27201c8  libiberty/sha1.c
  284bb7a096480b355b75c337086220a2  libiberty/sigsetmask.c
! 51026799cd2d665738861e8d6c917701  libiberty/simple-object-coff.c
! 31967686f407e6ca1bdd2a1fa1cce850  libiberty/simple-object-common.h
! f1c1668595f1ff3168ebae34df2c6049  libiberty/simple-object-elf.c
! 699ef340f26efedcc9fba9f8cf58cf14  libiberty/simple-object-mach-o.c
! 159199682f4dd7bbff930e9d8bd572fe  libiberty/simple-object-xcoff.c
! 57fb43d2b927f5e971297262fcefd35b  libiberty/simple-object.c
  4863a11e04a2021af582edf86f156954  libiberty/simple-object.txh
! cbac1b4a54ec343f1f8a842296cc98b4  libiberty/snprintf.c
! 406b30d27fbd7b0ca02091076d26e698  libiberty/sort.c
! 83b96a061a3b8367d613fd75c47e4868  libiberty/spaces.c
! 9ba32f6bca1addef2033422aad2f73e9  libiberty/splay-tree.c
! 9135a0ed6f68840642ad4c4e82039a88  libiberty/stack-limit.c
! 22ad5e39a8364d95669519172851de1b  libiberty/stpcpy.c
! afd870344182ec591e834367a722294d  libiberty/stpncpy.c
  0c900e9180d750a26ac0ddb237151832  libiberty/strcasecmp.c
  13cce636dd9882e42c9fc5d607351f4f  libiberty/strchr.c
  9f681e91439ac44c9df8e1b1deef33b5  libiberty/strdup.c
  ccad70af73664dbb198eb66bbea8659a  libiberty/strerror.c
  2d414e20c053293f373a5306192db8f5  libiberty/strncasecmp.c
  cc534c2ea00ea0b5e49ba8f61c6e467d  libiberty/strncmp.c
! 6aecad401679a5a2f8601d059bab31ca  libiberty/strndup.c
  fd1435a5be24d2ed84909540998dd5d7  libiberty/strnlen.c
  5b0eb0000c746fc4c1854f00bb80b53d  libiberty/strrchr.c
  f214096086d1747033efa505022dd89c  libiberty/strsignal.c
  4f7ee7afbc48687f2bb8436658acff27  libiberty/strstr.c
! ef49b0148e933f2d05c4db04f2e84822  libiberty/strtod.c
  c9bd3841bbde6d8ae680f62523f00ab0  libiberty/strtol.c
  9968bbb75dc08ce768389912954f4348  libiberty/strtoll.c
  26196a9a92fae743a06d65f0e081084b  libiberty/strtoul.c
  d132d24f15fe05fe3614e69d6dbc65aa  libiberty/strtoull.c
! e9e8c2477a3ce95e3e55ba150c09fd0d  libiberty/strverscmp.c
! e2a97c7f2fce77132895514e4e88fd1c  libiberty/testsuite/Makefile.in
! c2803e850764e5da003e01d6d89fbd55  libiberty/testsuite/d-demangle-expected
! 402444a8dd2467bb6c339bcaae24a1f8  libiberty/testsuite/demangle-expected
! 23a85f27f4ef8c991e64e7c857988709  libiberty/testsuite/demangler-fuzzer.c
! d979995f0dcf2d11fce7fb6d015a1ad4  libiberty/testsuite/rust-demangle-expected
! 2ba92e242bd94088875b9f708f070b36  libiberty/testsuite/test-demangle.c
! 6314ba3ceeacd48c9edcad338689f6b3  libiberty/testsuite/test-expandargv.c
! 85c87a1abb1e3aa504219350c91802bb  libiberty/testsuite/test-pexecute.c
! 2be5d7fddaf9b0c521a00249a478a004  libiberty/testsuite/test-strtol.c
! 2d7988cd6b6920dcd5b68865aa9c597e  libiberty/timeval-utils.c
  6b513119d8c36af928821e8ec24265d7  libiberty/tmpnam.c
! bc203eb5a03dad5029933d5b65169737  libiberty/unlink-if-ordinary.c
! 87c106da8333aa8fb935ee7509c40023  libiberty/vasprintf.c
  8e71982d77e91c0e3c57ca86c8a1b548  libiberty/vfork.c
! 078d0fdc3c590ebed4d75a5404816df2  libiberty/vfprintf.c
! 1b0601be727001d9067180203c7152d5  libiberty/vprintf-support.c
! ccacfcab364a33558a78c0c56171b589  libiberty/vprintf-support.h
  28af0a1bf222ed2a5a87d9e170ef4a46  libiberty/vprintf.c
! aac44ef288c8181046489935c34b70f0  libiberty/vsnprintf.c
! 4ad579fa6ded04268d6bb696f6d58d9f  libiberty/vsprintf.c
  3b03f409fd38f9d543870f21e6d7f5c8  libiberty/waitpid.c
! 563ac1fd45c903826633c0b3773d5b8f  libiberty/xasprintf.c
  f32b581d10bcc500277b6f4b4f923a4e  libiberty/xatexit.c
! 58d5efcbeda8b76df09a27fd7adac3e0  libiberty/xexit.c
! d82021d2287ed5eb95a7e8c6e71d6c9a  libiberty/xmalloc.c
  b2c289eb14e9197dcad172f3acba12b7  libiberty/xmemdup.c
  4746095b1b67693ab6e78ed72ead1235  libiberty/xstrdup.c
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
! 8d3c8fb3f736a2aa560ea573c413e8a7  libiberty/xstrndup.c
! e99d7e473939c4eba9b0590e304ce757  libiberty/xvasprintf.c
! 4a6c2b57c38c180822666ad7c42a8d10  libitm/ChangeLog
  a9df0726c501bf71a46f426068e8fc9f  libitm/Makefile.am
  06bb67375770bbbe550b5708624ed9d8  libitm/Makefile.in
! af64519b66d5357841d3fcdec64563ed  libitm/aatree.cc
! 20dde25f5f649dded702c12bd23c1657  libitm/aatree.h
! 3d33a4cdccfd6a43f5e6b37fa3c6ba9c  libitm/acinclude.m4
  c98774b09e6486e6a0818631af2fd088  libitm/aclocal.m4
! 808f29cbbd1f64b63aab7a7e5f6da9c6  libitm/alloc.cc
! 21c423753011440e9fe6d5e2d2683537  libitm/alloc_c.cc
! e134de1202f4fb98b2f0bf3454c54e0e  libitm/alloc_cpp.cc
! ad69789b0361bf09c2bcb19135f584b1  libitm/barrier.cc
! 622036164204a5e17bf1d67dd6ae88e7  libitm/beginend.cc
! bb26b491f8f9b96f2cd8517b2f616a06  libitm/clone.cc
! 3e02fdf93a4202ad2bc8762f9370edb3  libitm/common.h
  05ea82fd12c7b4a030b6310b862ff47d  libitm/config.h.in
! 8e59b58ecd24f49a9f222939d90a568d  libitm/config/aarch64/sjlj.S
! f77bb601b4532b9ff2aa758718061839  libitm/config/aarch64/target.h
! deeb0f7d85567ad281619dd87679c440  libitm/config/alpha/sjlj.S
! 62bcfbef13f1e90796149d99544b6625  libitm/config/alpha/target.h
! a92724ed04dceb8953510342c6190481  libitm/config/arm/hwcap.cc
! 0f5310de3f4c00263859fa888547df4a  libitm/config/arm/hwcap.h
! 49fc84c95ddbb8e7d3c3d3a451d7d848  libitm/config/arm/sjlj.S
! b8a966cce5270a8f70ad0fea4bad8617  libitm/config/arm/target.h
! 04f9dbbcb3cd61160b22bb591a1604bd  libitm/config/generic/asmcfi.h
! 1ee3f7b556ca67aeb48dba245d8a5024  libitm/config/generic/tls.cc
! f37eb39fe50cb49d2b567914e51aeaf8  libitm/config/generic/tls.h
! 7a8577eaa483adb47c2254592b72fcbe  libitm/config/linux/alpha/futex_bits.h
! b2eef913ff00c95478bce09a86a14c08  libitm/config/linux/futex.cc
! f6c634d071b6f57f86c5901774403f14  libitm/config/linux/futex.h
! dffbe312764a34a974d98dee3d5b0996  libitm/config/linux/futex_bits.h
! 31fd8448cd93f1b4da625ff1e9494455  libitm/config/linux/powerpc/futex_bits.h
! 6010f479f96da34bd53bfa81bbefab01  libitm/config/linux/rwlock.cc
! ce00a3626e73cfc3cc5b8fd09cfd7abd  libitm/config/linux/rwlock.h
! 2d639133eeb5ba71fea3f3bc89447a71  libitm/config/linux/sh/futex_bits.h
! 1a478b7c13136e4f1246d9444cefec6b  libitm/config/linux/sparc/futex_bits.h
! 1884909ded39de9dd8a89e9009106550  libitm/config/linux/x86/futex_bits.h
! c34d6a4e42d719ad60452be0e3a96da9  libitm/config/linux/x86/tls.h
! 3ed37bb1df55a0f4c4c4f2ec1847903d  libitm/config/posix/rwlock.cc
! fdd5f042f8a451d0e1fa12849d5771a7  libitm/config/posix/rwlock.h
! 67fc5ebc5960d68d52651f84e9cb7cb4  libitm/config/powerpc/sjlj.S
! db3cc7a6bb88958e3d38f644a14f8342  libitm/config/powerpc/target.h
! 0ec39ea5fc008d33726ec360d97fff30  libitm/config/s390/sjlj.S
! a25bde591ff489c0e0e57a82cc993922  libitm/config/s390/target.h
! 5f3992182c52efc54e1f74da797534ce  libitm/config/sh/sjlj.S
! 10acaf48689bcfd791d86f465d504da9  libitm/config/sh/target.h
! 61733d0738dd24c1a7b384073b411cb0  libitm/config/sparc/sjlj.S
! e2c16d597b1af6445a1772ceee987273  libitm/config/sparc/target.h
! 5f0d398c7234fbb87cc86c0ca9bfb8c4  libitm/config/x86/sjlj.S
! c9222a512fcc4f010415011a88500092  libitm/config/x86/target.h
! 9c568b09bc5774c81e94d2293756cb4b  libitm/config/x86/x86_avx.cc
! 64f9b1adce5d7b0cd2c7e3fbe285f19f  libitm/config/x86/x86_sse.cc
! 740eebd258eea5c470334bb0246bc5b7  libitm/configure
! 912610810bb0eb582e6463b2caa5c524  libitm/configure.ac
! 562cd5d45320ff8b6d0d4b011dc26ec2  libitm/configure.tgt
! 0169c0d253c2099112e38ba69dcab625  libitm/containers.h
! ab70f9809e69aeb6236ac85b453d22ae  libitm/dispatch.h
! 00dbe1cee8d24eca61f7b471d1bdb412  libitm/eh_cpp.cc
! 0fc2c7d1a46777c2f9aeaa3dbc4010c1  libitm/libitm.h
! 0f6bf728083356d692bee2d5435b13e6  libitm/libitm.info
  0c43820b921ecdbe9d98f068100e716a  libitm/libitm.map
  ea467d7117853d139bb288ab75261139  libitm/libitm.spec.in
! 210ab7d12145f345b6d37bcbc56f15c7  libitm/libitm.texi
! e018d80f6a6d89f00ec87308073222e5  libitm/libitm_i.h
! 9294c322e823968a6af75534c5023883  libitm/local.cc
! 76b3fec08241438f8bbb5ee68fe3bd05  libitm/local_atomic
! 539661b2ef52bdcc5644b8e5d62eb779  libitm/method-gl.cc
! af7a9eafbcdfee89fc6136127b662355  libitm/method-ml.cc
! 35b3754587e760bdce304d531d526c43  libitm/method-serial.cc
! f7c1652ecebd6464075dc85bd052d9be  libitm/query.cc
! b2a53ec17f9f9209aa2f051e1264c31c  libitm/retry.cc
  4835ec70e1fbcd9acd3c280c0060afa4  libitm/testsuite/Makefile.am
  d4d9b9513817c7a7ed3b32f016b07c90  libitm/testsuite/Makefile.in
! c09f570c398098186715184415926c1f  libitm/testsuite/config/default.exp
  9ab92f2310c96121666b692e1660d24f  libitm/testsuite/lib/libitm-dg.exp
  dc74f9049c1c5e5ba706ccd9a852f0f0  libitm/testsuite/lib/libitm.exp
! d953b4e9b6a33467c1c38d9a56f7cd13  libitm/testsuite/libitm.c++/c++.exp
  11785412cb94b04ecc293453486ad223  libitm/testsuite/libitm.c++/dropref.C
  d806946f2845368f69a6513f60b085d2  libitm/testsuite/libitm.c++/eh-1.C
  4d185e0f675cc4954831fb956401121c  libitm/testsuite/libitm.c++/eh-2.C
--- 102479,102698 ----
  044204f5b4bcac5eae2face0602129ae  libiberty/config/mh-fbsd21
  904bdcd9daf97fa55a9ca8901ffe7435  libiberty/config/mh-openedition
  38e76da568ab25260754fdb9d5080513  libiberty/config/mh-windows
! a770c7ae68d8072d46889a4c563e27a6  libiberty/configure
! b34fd9b24ccc56cf3cf9e7f7e0e738c8  libiberty/configure.ac
  5824bd0f9be9f4fa74bb3bdc7fd9431c  libiberty/configure.com
! ec178f616a88f78dd09043a6f541a9d5  libiberty/copying-lib.texi
  fe053283d3559af3ec5cac45f8ead009  libiberty/copysign.c
! 837a0199be34f75b293d2a502ee140e9  libiberty/cp-demangle.c
! e82b2e4799197a4dd07efcf7f0068a7b  libiberty/cp-demangle.h
! 557275f8e42135634db2d3816f23e0ea  libiberty/cp-demint.c
! 0126c6f796b98d46ae35493b8afcbc0d  libiberty/cplus-dem.c
! 0564248d12a746627bb1f0fcb8233955  libiberty/crc32.c
! b640f603e24f034a130edab72d66120c  libiberty/d-demangle.c
! 74a4cf267739f54e9bd7b151eed8c7f5  libiberty/dwarfnames.c
! 365f29b05c3b5d2c2e4a7be512c5d28c  libiberty/dyn-string.c
! 9e1b42716a2eeffb2a7bba67ad018098  libiberty/fdmatch.c
  0c2635175b975823b40980974dfc2110  libiberty/ffs.c
! 7ca7abd4925e4a3168280190693ef7e2  libiberty/fibheap.c
! 31ff352e16bb8b9e4dd1d83729530cc1  libiberty/filedescriptor.c
! cceb69354c78965a2ad474554fb140ad  libiberty/filename_cmp.c
! afb8683d18c3db8e96c78969af5d4f00  libiberty/floatformat.c
! d50dc6a32388527811552eb6cd47c3bc  libiberty/fnmatch.c
  145debe2f28f470878f95b1255f5537c  libiberty/fnmatch.txh
! ee2460d535f3823804b37ac6b205ca01  libiberty/fopen_unlocked.c
  cd2f41c11d564ff1394a2bc8e0d39bd9  libiberty/functions.texi
! c3425bc405194034269d6dfff0b476c7  libiberty/gather-docs
  754c5ef42440c5d1b62146174a6636e4  libiberty/getcwd.c
! 264cc93c3a7a678d6eb94bb21066b28b  libiberty/getopt.c
! 5b94367e9dc54f4ad7697f7dfaa60c8b  libiberty/getopt1.c
  bb0043d92c716691cc17b80c845c336b  libiberty/getpagesize.c
  5e520e600636a692f52e62dcfb01921c  libiberty/getpwd.c
! 31504633fe71392974417954436ae3f7  libiberty/getruntime.c
  0c70ad1e35bb090b52ed593865025741  libiberty/gettimeofday.c
! dd22cf8c0971caed5212fee0e22a7fed  libiberty/hashtab.c
! 5f27e67265fa97fadf8c012d6b7ed5b1  libiberty/hex.c
  4d485e7735be430b22aea0abb4938e26  libiberty/index.c
  9d0471286f21d9027bbf1b7c67b87856  libiberty/insque.c
! 56e586a35ad1cf5193d77dda05fd87c1  libiberty/lbasename.c
! d190cc08ed81c07f25658d29e7cf6a16  libiberty/libiberty.texi
! 4ba2bddf4490b0b50ae4dc8cf44619da  libiberty/lrealpath.c
! 47df04004b36f9b2058215f466adbcac  libiberty/maint-tool
! 7d9e677f5e8379749867382f212ec9ae  libiberty/make-relative-prefix.c
! f18138afdb89eb95c4aa7258af4bdefd  libiberty/make-temp-file.c
  80367d734a974bd32e9ebc370dedd2e7  libiberty/makefile.vms
! a1a2c1a59a9f0e91476ebd3df4bf8f63  libiberty/md5.c
  de9bd20436bf2cb64d8c374c110ce315  libiberty/memchr.c
  33320d312ab390ca0eb5c43c9e349d57  libiberty/memcmp.c
  c90c2f09bdcbd65b4732a4be25a56d12  libiberty/memcpy.c
! ca5114f2170ca0be79a0bad1dfebf7d0  libiberty/memmem.c
  99bfeaeb76e8e725dd8766f33810ccb1  libiberty/memmove.c
! d40c9e55ba2af2ae1ef02932bf72ae10  libiberty/mempcpy.c
  c44adc5ac09bdc782a8e13086ffa9367  libiberty/memset.c
! 67cbee8f1f378be1e8993dbb75a92c65  libiberty/mkstemps.c
  7897e43bedd2def4beb6eb73003efa68  libiberty/msdos.c
! db43b0518a5e0ef863edd06940486b6f  libiberty/objalloc.c
! f631c697f6c13033f9ae6df0045a3205  libiberty/obstack.c
  26ef02d458c958c1599de12b02c559dc  libiberty/obstacks.texi
! dd4a8f32bdb93b45740af9cdc2a93413  libiberty/partition.c
! 79e9480511026e3180e145c60261f140  libiberty/pex-common.c
! 2f012e9a378f78cdbffe37d04bc43fd5  libiberty/pex-common.h
! aaf2eb83659034359f15a5b644377e9d  libiberty/pex-djgpp.c
! f896e1354485c7becf671197d8cd5cb0  libiberty/pex-msdos.c
! 306c8b838744d5f9222d3fc158d9d3ce  libiberty/pex-one.c
! c29772ec41e7e8ab4a8cc541a68792c4  libiberty/pex-unix.c
! 68a448b9a9a49911751193e9120455cc  libiberty/pex-win32.c
! e8b700224dfe162a5e3f449db6f18526  libiberty/pexecute.c
  a6b1581efa83a4072727b38d6fef4230  libiberty/pexecute.txh
! 651c794393082f9a8fda27efa35484c6  libiberty/physmem.c
! db3f1c9a897172a5eb09f900f77c8854  libiberty/putenv.c
  94f22680349b4ae73ad658495d2eb542  libiberty/random.c
! b3f964eb854e29420c5eec3c098a9e3f  libiberty/regex.c
  24eab3d83825c3be13549dc62b6d63d6  libiberty/rename.c
  74850488731148a9c9f410042144f37d  libiberty/rindex.c
! 324131745b683306791ac4909aee6434  libiberty/rust-demangle.c
! ed24fd55759858859e8feb2a33bdc7c7  libiberty/safe-ctype.c
! 39034db758acb200b85b163dd9471fe8  libiberty/setenv.c
! 0ae73a22ffd14e6bf4b2fa0952138c48  libiberty/setproctitle.c
! 692733a917263fbe6020abcbcd794c23  libiberty/sha1.c
  284bb7a096480b355b75c337086220a2  libiberty/sigsetmask.c
! 11cc73d71970e5461632e45ff27a3e5e  libiberty/simple-object-coff.c
! 3d357f010f0064e322ba47b4a0f19ccd  libiberty/simple-object-common.h
! a2473ab822d5d4c9e6b8deec974adf92  libiberty/simple-object-elf.c
! 08f858c0c13698d2ed88970324c062b3  libiberty/simple-object-mach-o.c
! 6d35a3a532f8174e879592ff4f5fa2e7  libiberty/simple-object-xcoff.c
! e383eb44fa28c6bed26aac5759bdf336  libiberty/simple-object.c
  4863a11e04a2021af582edf86f156954  libiberty/simple-object.txh
! 1674eb5b497afcf625132485adc69c57  libiberty/snprintf.c
! 16f06ed9225a198796939548c217de81  libiberty/sort.c
! 94f6aa7fa517f83124427fbc73c70b6a  libiberty/spaces.c
! 7b4ba30e3f86fb756cbec0a13a1be8d7  libiberty/splay-tree.c
! 5321e2c17db86abac5635b9f397c8266  libiberty/stack-limit.c
! 1ddeff770a27d04310664882d7ac8348  libiberty/stpcpy.c
! 6ae648abc5ed47faf4a39ba693956b4b  libiberty/stpncpy.c
  0c900e9180d750a26ac0ddb237151832  libiberty/strcasecmp.c
  13cce636dd9882e42c9fc5d607351f4f  libiberty/strchr.c
  9f681e91439ac44c9df8e1b1deef33b5  libiberty/strdup.c
  ccad70af73664dbb198eb66bbea8659a  libiberty/strerror.c
  2d414e20c053293f373a5306192db8f5  libiberty/strncasecmp.c
  cc534c2ea00ea0b5e49ba8f61c6e467d  libiberty/strncmp.c
! c571844e422b5235f01be355b52930d6  libiberty/strndup.c
  fd1435a5be24d2ed84909540998dd5d7  libiberty/strnlen.c
  5b0eb0000c746fc4c1854f00bb80b53d  libiberty/strrchr.c
  f214096086d1747033efa505022dd89c  libiberty/strsignal.c
  4f7ee7afbc48687f2bb8436658acff27  libiberty/strstr.c
! d49a67b65f88c81556a66cb2096e0881  libiberty/strtod.c
  c9bd3841bbde6d8ae680f62523f00ab0  libiberty/strtol.c
  9968bbb75dc08ce768389912954f4348  libiberty/strtoll.c
  26196a9a92fae743a06d65f0e081084b  libiberty/strtoul.c
  d132d24f15fe05fe3614e69d6dbc65aa  libiberty/strtoull.c
! a49af5847793a95c3ed330eaf3100e9f  libiberty/strverscmp.c
! c403240df8eb2f15dcb54e1fbda1800e  libiberty/testsuite/Makefile.in
! cd08c8fa8cc7f327c16a8eaab09fa56b  libiberty/testsuite/d-demangle-expected
! 20fb76e95e5a06b30afb92c55476736a  libiberty/testsuite/demangle-expected
! 4c4a58a1943dc8879139a1f6a7f544b2  libiberty/testsuite/demangler-fuzzer.c
! 3a9dd86d23e50ad55b3af57e17c41a44  libiberty/testsuite/rust-demangle-expected
! 43f8852fec273efda3822f78a58ec725  libiberty/testsuite/test-demangle.c
! 3307d8bfa563dda02b555c6677c84b65  libiberty/testsuite/test-expandargv.c
! ffd3e827beeb422102b236f215f50a5f  libiberty/testsuite/test-pexecute.c
! 01f34496c6129300ad166783cb0702ab  libiberty/testsuite/test-strtol.c
! 9296d2cafd1406fd13772cd9408a91d0  libiberty/timeval-utils.c
  6b513119d8c36af928821e8ec24265d7  libiberty/tmpnam.c
! 7e25426ada2988c06731a8d72c381048  libiberty/unlink-if-ordinary.c
! 2af5d944ce8b9b5c1a83524c6f25c5cf  libiberty/vasprintf.c
  8e71982d77e91c0e3c57ca86c8a1b548  libiberty/vfork.c
! 122f580d85a41e1680302a0c29628ce8  libiberty/vfprintf.c
! 128dec0a471ee05d31364c3928c88704  libiberty/vprintf-support.c
! cc3e05f697f34851d2fc646d1ae95b59  libiberty/vprintf-support.h
  28af0a1bf222ed2a5a87d9e170ef4a46  libiberty/vprintf.c
! a62af7c5cdbabe844e927da6014c7ef8  libiberty/vsnprintf.c
! 9e5bb4e526d2a56e6e2683ae92cd7ce3  libiberty/vsprintf.c
  3b03f409fd38f9d543870f21e6d7f5c8  libiberty/waitpid.c
! 075c0e235ca817e651d8f02a5afcb400  libiberty/xasprintf.c
  f32b581d10bcc500277b6f4b4f923a4e  libiberty/xatexit.c
! ff0d19b0532b36b2f5c4d111e22b43ff  libiberty/xexit.c
! 43cb7999265798c60bd0b50a50a9732a  libiberty/xmalloc.c
  b2c289eb14e9197dcad172f3acba12b7  libiberty/xmemdup.c
  4746095b1b67693ab6e78ed72ead1235  libiberty/xstrdup.c
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
! 212d4847bfdeadb110f63393e845a968  libiberty/xstrndup.c
! 51f9ff1eae01d3f75924518629c63c82  libiberty/xvasprintf.c
! eded45d8a48a72b19ea703d6c503b566  libitm/ChangeLog
  a9df0726c501bf71a46f426068e8fc9f  libitm/Makefile.am
  06bb67375770bbbe550b5708624ed9d8  libitm/Makefile.in
! e73ee635a6e93e055b58fc08cecf2d48  libitm/aatree.cc
! c0bb3c9b51e85e0b2a886dad6a2062b9  libitm/aatree.h
! 724846b555020a9e223c8322082e775a  libitm/acinclude.m4
  c98774b09e6486e6a0818631af2fd088  libitm/aclocal.m4
! 621135254eff51b7c1001d9e0d67506f  libitm/alloc.cc
! eda3a6b8555a6eb63d893eef15d19087  libitm/alloc_c.cc
! ce08e810436f7fe31d5663d437a9b35f  libitm/alloc_cpp.cc
! bc255794bc42bec523873230eb601b3e  libitm/barrier.cc
! c022fcd83e59219b4aefb79bbe0b3f91  libitm/beginend.cc
! 16dcf09e3bd3060966a254d7054b2bc9  libitm/clone.cc
! ec0f28789019c28c15cc50e2da4754fc  libitm/common.h
  05ea82fd12c7b4a030b6310b862ff47d  libitm/config.h.in
! db5db45057f499b476053110101bbd11  libitm/config/aarch64/sjlj.S
! 5e19922856a766111a2163b5a083644a  libitm/config/aarch64/target.h
! 2da58be55c3745af53384b617cc0698c  libitm/config/alpha/sjlj.S
! 20890f1ab6cce432340fd918848c8890  libitm/config/alpha/target.h
! 96534d2babdc8ba4b8d803cd5daed912  libitm/config/arm/hwcap.cc
! 5c2e8e6e4a7c03a3fe7d993d56d2683c  libitm/config/arm/hwcap.h
! f9a5e16570e967102033b9002459ad90  libitm/config/arm/sjlj.S
! a85dcc6f0194bf162a8f01a8e122b4cb  libitm/config/arm/target.h
! 2daabd5a6b2be12fcbafb3d1093bf9ac  libitm/config/generic/asmcfi.h
! a6c473abc50a036880bec27c566d36b8  libitm/config/generic/tls.cc
! e3add69e8455cfd0ee5c33092581dfcd  libitm/config/generic/tls.h
! 84d1b2cb8bb880938c7b888a61966abf  libitm/config/linux/alpha/futex_bits.h
! 17a0901312b9f3edeae96df0fa31d19e  libitm/config/linux/futex.cc
! a5c49954069e32a0660ef41e129df252  libitm/config/linux/futex.h
! 176b50688b8d388a9593d6e6078b53f0  libitm/config/linux/futex_bits.h
! ac2d6dde96ef71792443bd2ebfb4547c  libitm/config/linux/powerpc/futex_bits.h
! c3339f6274521b04d10e1def9231b115  libitm/config/linux/rwlock.cc
! 6a3effc01798ac06e0ab1361d07c8d75  libitm/config/linux/rwlock.h
! f03645bec31d81133cb6bda311a474dc  libitm/config/linux/sh/futex_bits.h
! 7df76aab36f3c8d816b1a0556f1eae87  libitm/config/linux/sparc/futex_bits.h
! 679c9341ba325009bf37e2f6b486de09  libitm/config/linux/x86/futex_bits.h
! be3944a5172dd9631ef683192326beda  libitm/config/linux/x86/tls.h
! 1fe611710586b1dc5f1c42c23368fb8a  libitm/config/posix/rwlock.cc
! 714288c8703d7273474e8fbe0a662a20  libitm/config/posix/rwlock.h
! 95abcc7d0756291dcccc099937ad7a8e  libitm/config/powerpc/sjlj.S
! 53d532b0c510e95d1fc760f565ccc564  libitm/config/powerpc/target.h
! e156596b3261f3fbf134e9974e8c2301  libitm/config/s390/sjlj.S
! 9c0385b0c6f56403e7855386ab37bd1f  libitm/config/s390/target.h
! fcf2c1ea1ba9b49728d748819499baf4  libitm/config/sh/sjlj.S
! 514c67c2b5024fca3e57832b1095469d  libitm/config/sh/target.h
! 3c22eff1daa0e3ce3b1949384d11dfea  libitm/config/sparc/sjlj.S
! a9e4824b547baa3d04889a43c598ae28  libitm/config/sparc/target.h
! d76ecb405e4863bda26db7d427f8e995  libitm/config/x86/sjlj.S
! 69924bb1f68cc529836876444c354290  libitm/config/x86/target.h
! 71753a31a5acfdfd11ed6244d84f4e7c  libitm/config/x86/x86_avx.cc
! 5354c1dcccbc3e6cae425f96dc2b315b  libitm/config/x86/x86_sse.cc
! 70a394c42a190dcc937e1898cda6357f  libitm/configure
! 2b5c2ef23f3931ae16e19bae7b9810d1  libitm/configure.ac
! caa8ffd24eea056dabeaac91e8d1ba8c  libitm/configure.tgt
! fd380f0eaa4841b1f8185e3d4f8b1ff1  libitm/containers.h
! 01980d1244f27e09b91b774c38e34bf0  libitm/dispatch.h
! 6191540cdd3efc4f19822744c765842c  libitm/eh_cpp.cc
! b9157df74e562da678e0ad3e8eb5d1dc  libitm/libitm.h
! 873a338fb63a273a34508395978354bd  libitm/libitm.info
  0c43820b921ecdbe9d98f068100e716a  libitm/libitm.map
  ea467d7117853d139bb288ab75261139  libitm/libitm.spec.in
! 88925f6e4d09e1e09839f2b5b5ae1bf6  libitm/libitm.texi
! 7f163721921f4c8bd804d6e5836e11af  libitm/libitm_i.h
! 42a035b35cc2c9dd5a4edb50ad8bc88e  libitm/local.cc
! b58dc2ffc03fc5ea09407524ad91891e  libitm/local_atomic
! dbdecee02bbf06b38ac7439afac12baf  libitm/method-gl.cc
! 4c8e97caf3c2d67396bb16487707c9ad  libitm/method-ml.cc
! a703879e30fbb0a837adac2155bdb287  libitm/method-serial.cc
! 7985e1dfce83fce43249c20f90cc5c56  libitm/query.cc
! 4d9e176aa48264a9841b32d07177a771  libitm/retry.cc
  4835ec70e1fbcd9acd3c280c0060afa4  libitm/testsuite/Makefile.am
  d4d9b9513817c7a7ed3b32f016b07c90  libitm/testsuite/Makefile.in
! 88850c9ff315083f74a05c36039af35c  libitm/testsuite/config/default.exp
  9ab92f2310c96121666b692e1660d24f  libitm/testsuite/lib/libitm-dg.exp
  dc74f9049c1c5e5ba706ccd9a852f0f0  libitm/testsuite/lib/libitm.exp
! 43bb97d36e4de4225a3ca877a76e95e4  libitm/testsuite/libitm.c++/c++.exp
  11785412cb94b04ecc293453486ad223  libitm/testsuite/libitm.c++/dropref.C
  d806946f2845368f69a6513f60b085d2  libitm/testsuite/libitm.c++/eh-1.C
  4d185e0f675cc4954831fb956401121c  libitm/testsuite/libitm.c++/eh-2.C
*************** b4e503ecfdccc9f13da8f73eeb6f23a9  libitm
*** 96012,96077 ****
  838bdb8846eac9161e3ffbe553049f2f  libitm/testsuite/libitm.c/simple-2.c
  7ecc8e520a5c494d159cb7571cca7cdc  libitm/testsuite/libitm.c/stackundo.c
  ef24198422c19f99b0c41be6a16f7081  libitm/testsuite/libitm.c/txrelease.c
! fe2e602544303e0ca40c8acd58bf0397  libitm/useraction.cc
! c3a4f9a7b553245bf2dbb55c53767427  libitm/util.cc
! 82b71d58ac5e330e61497928e573d767  libobjc/ChangeLog
! fee63cfea98fac80ab4c9369ce19765a  libobjc/Makefile.in
! 0b2f74b5c1588ee9de0dd076fccc99a6  libobjc/NXConstStr.m
! df7a2af88216fb36f0319f328ada2fb8  libobjc/Object.m
! 9d750d580d82eda065c586a72ee24b79  libobjc/Protocol.m
  d5edaeee0d84e4305368367019952ba7  libobjc/README
  dbf36fc59f8e048201543aead57eb206  libobjc/THREADS
! c54ef3ce58742ec702257f92d488d292  libobjc/accessors.m
! 8fe4599c2b2fdbb1db7497742339e3aa  libobjc/acinclude.m4
  005cfc1ff705e51549970f72513c195a  libobjc/aclocal.m4
! b49b41658bd96cfc00259d94ebc1665b  libobjc/class.c
  a9245d99d9418e18cecf891d7a93d664  libobjc/config.h.in
  2665537bab5737c5050d2ee2916707a9  libobjc/configure
! 54c6b0286127dee4e0870d5f393b5ce6  libobjc/configure.ac
! d0614f512e28731901f9885801641a30  libobjc/encoding.c
! fc77599698386d9a4ff7902ef1d30494  libobjc/error.c
! 4eef06d9263623ff16229c01ec247dd5  libobjc/exception.c
! 822850fa39d927cb0108d2617d26f9ff  libobjc/gc.c
! 6e6a2372ee3dd50270a7afbcc9176b8a  libobjc/hash.c
! 8607e141d70ff4641c57e9b247d70e44  libobjc/init.c
! f8133eb49a489661484c06373cbc3a94  libobjc/ivars.c
! fe5457410030bbaaba80703e4331cf9f  libobjc/libobjc.def
! de9d24f86ec7692c31978fca3a8ba024  libobjc/linking.m
! 4e4d662205df779610957792f64abec1  libobjc/memory.c
! 7cb21f2396a373764fd52affceb3c9d1  libobjc/methods.c
! 97abf83c3b37ce760fc9ebc4bf95e725  libobjc/nil_method.c
! fed0bcd80ed284c3517a13c2aa1f6d76  libobjc/objc-foreach.c
  4758c47369f62786c0dcdf45f3397ff7  libobjc/objc-private/README
! 1eeac7fe67901671d1e9d8a145b092f4  libobjc/objc-private/accessors.h
! 621ccd4244d28d100806ec70f4452912  libobjc/objc-private/common.h
! 74c8c8aa9ee74b1f586fdf65bb418568  libobjc/objc-private/error.h
! 6c9ddfcc23fc298b62596a465fa23b8f  libobjc/objc-private/hash.h
! 6408208fe57765389d872b2acb1337c5  libobjc/objc-private/module-abi-8.h
! c50de86f3d29a23f6422f49b5239bdc5  libobjc/objc-private/objc-list.h
! 45f6a1e5e30fb26624ca6783e7f3e25e  libobjc/objc-private/objc-sync.h
! 43502d777be81cc3412e6f3904935763  libobjc/objc-private/protocols.h
! 45dac50f9a35e291d0cef7866d4ff0b3  libobjc/objc-private/runtime.h
! 0c353b42bd9dad0a456f98180b222e18  libobjc/objc-private/sarray.h
! 3ae041a41f632abb82c1e74e9c054100  libobjc/objc-private/selector.h
! 66ff5b3833e7b6ad9b86edfc2f99f318  libobjc/objc-sync.c
! 6ec5e1d6e72c3ad9cddbef17b8b6998e  libobjc/objc/NXConstStr.h
! 68699fc3e135530bbaaa0a477b98e1a8  libobjc/objc/Object.h
! e3dbc08721ba9bb6ecae03dc505ffb55  libobjc/objc/Protocol.h
  6a0d7c25fa8ddefde53bbaf36eea5bdf  libobjc/objc/README
! 1dd96f505f3e9941502e045bb4d435de  libobjc/objc/message.h
! 98feb767c2a22b77ebda043180f4de8c  libobjc/objc/objc-decls.h
! b664e161f8e4aa5faf76a5e093c1a7ef  libobjc/objc/objc-exception.h
! f15abb3904df01a31d3c398c492c40c8  libobjc/objc/objc-sync.h
! 1d0d8ac71f445e5ebd2a9897459ce012  libobjc/objc/objc.h
! 64b37629483264fce10bc575f8ab496e  libobjc/objc/runtime.h
! f223d0a01e060ed11fc165db01786f72  libobjc/objc/thr.h
! 205ba52fb74a10773faccd5b675c7e84  libobjc/objects.c
! fcf99f4b6c05e0ac9ca7b7523e859699  libobjc/protocols.c
! e514cfffa12c9e3a276f91bda41431b4  libobjc/sarray.c
! b19a45655f215076ddf0ba0abecfbb45  libobjc/selector.c
! 1c03202bdb561211ad5e1d73cbb0172e  libobjc/sendmsg.c
! efb54be80262d2dd7d3b30974990576e  libobjc/thr.c
! e85300e88baba6ec17a08d77fc3ce9b9  liboffloadmic/ChangeLog
  99e2b0817f42c602b520261f7dee183b  liboffloadmic/Makefile.am
  a64a74f82774f355013471ad4dbe5014  liboffloadmic/Makefile.in
  ab5ae12a0dda7edadc0bd2be40ccff6a  liboffloadmic/aclocal.m4
--- 102719,102784 ----
  838bdb8846eac9161e3ffbe553049f2f  libitm/testsuite/libitm.c/simple-2.c
  7ecc8e520a5c494d159cb7571cca7cdc  libitm/testsuite/libitm.c/stackundo.c
  ef24198422c19f99b0c41be6a16f7081  libitm/testsuite/libitm.c/txrelease.c
! 827aae314af0cb1a41856a4973e45158  libitm/useraction.cc
! b6007e57947202cf48fe0c24317b69fd  libitm/util.cc
! d5f7d50698c1dfb4d272cbbe64130fb8  libobjc/ChangeLog
! 890899e673f4a4b9936a49fd705523d7  libobjc/Makefile.in
! 81848b4e1479af80c64f39e3c24666aa  libobjc/NXConstStr.m
! 24647c970f57dc764e7822e326b18bfc  libobjc/Object.m
! 5a64fa8039ff9485f6ecd6dd44b93de4  libobjc/Protocol.m
  d5edaeee0d84e4305368367019952ba7  libobjc/README
  dbf36fc59f8e048201543aead57eb206  libobjc/THREADS
! 52e6eb0b55a660f30c6002c10276a273  libobjc/accessors.m
! 5337a24e08b947db760824604ed1364f  libobjc/acinclude.m4
  005cfc1ff705e51549970f72513c195a  libobjc/aclocal.m4
! d8a45922d6bdcde1424bafe7a76f2dfb  libobjc/class.c
  a9245d99d9418e18cecf891d7a93d664  libobjc/config.h.in
  2665537bab5737c5050d2ee2916707a9  libobjc/configure
! d755bc9f0fec85f832122a131609ed69  libobjc/configure.ac
! a0dcbce9f557c39637b5821197acb444  libobjc/encoding.c
! 5bb2986d367f29dc504cb700d068ab4e  libobjc/error.c
! 62bee6ff7dc1553be131713ae31bde89  libobjc/exception.c
! 1775c9863e42845405a395f263416b36  libobjc/gc.c
! 99dfe1fccc910f972aff77f1d3d7e48e  libobjc/hash.c
! 3022730ca0c39b7870531771905d601e  libobjc/init.c
! 5fe0328ec98ca494d75928719acad37e  libobjc/ivars.c
! 74b90e821293affe3e14dfb76bec7791  libobjc/libobjc.def
! a3a5d6c66d0cd3dbf37d51be2e9c1d6b  libobjc/linking.m
! 518961e8236c89e291668b07133700f2  libobjc/memory.c
! cc4677cd9c00e4da8a21628767fa4455  libobjc/methods.c
! 2a50c00e186696d75656474f19248a96  libobjc/nil_method.c
! db0f2cf91b19514268f82185551d8071  libobjc/objc-foreach.c
  4758c47369f62786c0dcdf45f3397ff7  libobjc/objc-private/README
! 5c9a63d66ac1ba1e86cc17535c8d6258  libobjc/objc-private/accessors.h
! 7f223cd8c4826a01c2c00fc7e3c1db33  libobjc/objc-private/common.h
! 62b8a56932776f3e69b738594ba8e4b9  libobjc/objc-private/error.h
! 04c840acbf3b752248d9a6ee138f41b6  libobjc/objc-private/hash.h
! e57563e6d2f8e20ae85b4d569439de2a  libobjc/objc-private/module-abi-8.h
! 08570e829a9b4071ceb1fe8daa1c83c0  libobjc/objc-private/objc-list.h
! 9d0d8672bcf6387abcfd985469d50ec9  libobjc/objc-private/objc-sync.h
! 2c45018adc6158bf20cf3457da7a91a6  libobjc/objc-private/protocols.h
! 01519fe0bc2b684ff5718b245757d486  libobjc/objc-private/runtime.h
! 8ba6137c5bfe1790d9ae95407b8c7c44  libobjc/objc-private/sarray.h
! 1297f509435fe91b9c1cd5f84e0dbd23  libobjc/objc-private/selector.h
! 2bf191286747fda4ad638dee8591c405  libobjc/objc-sync.c
! ae49839b51e2779fb2325ee27ff2f119  libobjc/objc/NXConstStr.h
! 6c7e24c97b6b968f5d1c0874961c49ac  libobjc/objc/Object.h
! 8ff04bed32fc4ba6a20108a96c7167c1  libobjc/objc/Protocol.h
  6a0d7c25fa8ddefde53bbaf36eea5bdf  libobjc/objc/README
! ebe82af9326a8c9f872355834bf7ca20  libobjc/objc/message.h
! deb372178d10b50c7310a2df29f37c18  libobjc/objc/objc-decls.h
! 499d1adfb5b73e0051fa877b52502e72  libobjc/objc/objc-exception.h
! 92adde799ef8f733d86704d139d520b6  libobjc/objc/objc-sync.h
! a447fe9ac9b70dcea419963424756f7b  libobjc/objc/objc.h
! ee97fbe6079f13100b28b341b0420224  libobjc/objc/runtime.h
! de687fd31db43c6f9674aa43e0973ea1  libobjc/objc/thr.h
! a88a04db1a9eaec72b0a4dc56998acbc  libobjc/objects.c
! b53fe55892233fb1cfe23d0122a5ed1c  libobjc/protocols.c
! a30af7ca948eb564a2533132489a22b2  libobjc/sarray.c
! 6460e0de9fc2cf12b5f11a9e8c1c1f70  libobjc/selector.c
! 069f2fe8a2ae9b7e7187303013e644a1  libobjc/sendmsg.c
! 5e1cf5e279c3c84fddb5afd6ec6f7741  libobjc/thr.c
! d1e0704c8e4f0107a837a28f73ed34e5  liboffloadmic/ChangeLog
  99e2b0817f42c602b520261f7dee183b  liboffloadmic/Makefile.am
  a64a74f82774f355013471ad4dbe5014  liboffloadmic/Makefile.in
  ab5ae12a0dda7edadc0bd2be40ccff6a  liboffloadmic/aclocal.m4
*************** f8003f0c73440d3d906f35df97da31af  liboff
*** 96090,96096 ****
  ab8a94519bfb382c40efaf24609f813a  liboffloadmic/include/coi/sink/COIBuffer_sink.h
  1ecfe0d1eac2996b0d3306be28fa009e  liboffloadmic/include/coi/sink/COIPipeline_sink.h
  3de9a8b53d9be52c74d5f9386d54c5da  liboffloadmic/include/coi/sink/COIProcess_sink.h
! 41c481b55a41165a4e97830bdce39aef  liboffloadmic/include/coi/source/COIBuffer_source.h
  3816de330b73947b797b4ab1769ca44b  liboffloadmic/include/coi/source/COIEngine_source.h
  626c413cf8098eaa5d0de38524c425aa  liboffloadmic/include/coi/source/COIEvent_source.h
  4a7610d58e6b8f2c1d82c5d4d89e14d3  liboffloadmic/include/coi/source/COIPipeline_source.h
--- 102797,102803 ----
  ab8a94519bfb382c40efaf24609f813a  liboffloadmic/include/coi/sink/COIBuffer_sink.h
  1ecfe0d1eac2996b0d3306be28fa009e  liboffloadmic/include/coi/sink/COIPipeline_sink.h
  3de9a8b53d9be52c74d5f9386d54c5da  liboffloadmic/include/coi/sink/COIProcess_sink.h
! af5852624ff9358ad03d1c71905a6cc9  liboffloadmic/include/coi/source/COIBuffer_source.h
  3816de330b73947b797b4ab1769ca44b  liboffloadmic/include/coi/source/COIEngine_source.h
  626c413cf8098eaa5d0de38524c425aa  liboffloadmic/include/coi/source/COIEvent_source.h
  4a7610d58e6b8f2c1d82c5d4d89e14d3  liboffloadmic/include/coi/source/COIPipeline_source.h
*************** b1def68202639bd452fb59aea3371fe4  liboff
*** 96159,96250 ****
  4659326a13bd5fed47bb680ddb6f5dc3  liboffloadmic/runtime/orsl-lite/include/orsl-lite.h
  cc603cdf253cc686bfcee192bb7630df  liboffloadmic/runtime/orsl-lite/lib/orsl-lite.c
  dff5c8575c49d6aa71e549b0fa021479  liboffloadmic/runtime/orsl-lite/version.txt
! 793d5c99ec5ebb7fca5998ec76aa8152  libphobos/ChangeLog
! 33bab560c80ad2bb8f6a01c76e8fac58  libphobos/Makefile.am
! c82f2c9df9a32b41c885f634fd4618b4  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
! 4b61d4f71285cbc989f962250fb067a6  libphobos/acinclude.m4
  fbb3c30724cb241010afacb0505c53e7  libphobos/aclocal.m4
  4923b1152206303a26c7dfb87f5de315  libphobos/config.h.in
! e1132d289faa02ff818735f097e6961d  libphobos/configure
! 844b7bd59219ff22200c109d3daca5b4  libphobos/configure.ac
! 5d0cb0ba840d0da4d02d728646c1995f  libphobos/configure.tgt
! 4fc4fe1f005bbbe92182c492dfa11879  libphobos/d_rules.am
! 8aa3148471595dc8cae4ec62919a57ea  libphobos/libdruntime/LICENSE
! a2e3d8e50b683be1bb2a3f71654cf253  libphobos/libdruntime/MERGE
! 79c0bb65136e2d09884f89a8ee5fe84c  libphobos/libdruntime/Makefile.am
! fc1493d12618a9d399f1b50a6059b3c9  libphobos/libdruntime/Makefile.in
! 243d5d07f12cc2eb4375b39daee48cb6  libphobos/libdruntime/__entrypoint.di
! d9431d9349d8904f044016098d57ed93  libphobos/libdruntime/__main.di
! f7d57528e369858a460619fc3fd71cdb  libphobos/libdruntime/config/aarch64/switchcontext.S
! 6453f31e003a8235b632df6d25155d41  libphobos/libdruntime/config/arm/switchcontext.S
! ea455c0596f7024208c4a2e9063cc4c2  libphobos/libdruntime/config/common/threadasm.S
! f1ce8a10d7b7eedf458048527aa8154b  libphobos/libdruntime/config/mingw/msvc.c
! 46cb95493bf5b06dabba4d1f813b9da6  libphobos/libdruntime/config/mingw/switchcontext.S
! c12b05a45964bf4bdae4603ae4ce47b5  libphobos/libdruntime/config/mips/switchcontext.S
! 01a90ff80c4d60c00aadbcb7adefaf73  libphobos/libdruntime/config/powerpc/switchcontext.S
! 17c32783668bfe24249a0c951ef18d08  libphobos/libdruntime/config/s390/get_tls_offset.S
! 6b102a3459c85782c18f2fbab0a0e5ea  libphobos/libdruntime/config/systemz/get_tls_offset.S
! 91cb936a44ff7b5a45a6002369fbde6e  libphobos/libdruntime/config/x86/switchcontext.S
! a8c8d5fe3bf3060df2aef535a1a3cb15  libphobos/libdruntime/core/atomic.d
! 9d6d58736eca8f18fbb0207d7ea26756  libphobos/libdruntime/core/attribute.d
! 4fcb39af3195321a158589d875faaa2c  libphobos/libdruntime/core/bitop.d
! bc6c7fad057970ceedf1b4384a0d173d  libphobos/libdruntime/core/checkedint.d
  e78005e94abbe57989cebd7c9a7c745f  libphobos/libdruntime/core/cpuid.d
! 0bbfdf6946f532945962f2ea11fe9c65  libphobos/libdruntime/core/demangle.d
! a44eebee0344cacc3e7b8b0a99cff8c7  libphobos/libdruntime/core/exception.d
! e83e6a9f6fb52fb24f1796f23f1a18b6  libphobos/libdruntime/core/internal/abort.d
! faf661e33781f7a48d9702fb9c8f11c7  libphobos/libdruntime/core/internal/arrayop.d
  87f5099304bb6fa7f4723eb1c7b3aa7d  libphobos/libdruntime/core/internal/attributes.d
! 6caa475db7002dc33f288a2c493e895d  libphobos/libdruntime/core/internal/convert.d
! e99b934946358577ca5236bc4afaf88c  libphobos/libdruntime/core/internal/hash.d
! 39f71cce4c8ab6c77cfa8590abc1bbf5  libphobos/libdruntime/core/internal/spinlock.d
! 1d11ebb93bf474099f1fd3590c94356b  libphobos/libdruntime/core/internal/string.d
! ed84173ee2f70111f0daf3c08433d7e7  libphobos/libdruntime/core/internal/traits.d
! a42df479bd0f00336da756f71cadec09  libphobos/libdruntime/core/math.d
! 975c6a4f7bc3b7d27578d2fbc84c5176  libphobos/libdruntime/core/memory.d
! 0a83ed84f5ae0ea3ae09d4a55846f0db  libphobos/libdruntime/core/runtime.d
! 1c57f26e7da85fca9e47d730ec9e8444  libphobos/libdruntime/core/simd.d
  f276ebf85ef328a41c5ca86da694d73f  libphobos/libdruntime/core/stdc/assert_.d
  027bd40faf09b13abf5dc94da4aaa176  libphobos/libdruntime/core/stdc/complex.d
! 9d2ae5828ad2e4e11fc25d3838c06341  libphobos/libdruntime/core/stdc/config.d
  e73e1e0aaf48227fef16ff41037ecbdd  libphobos/libdruntime/core/stdc/ctype.d
  b0bed8bde9d9aa6689fee207f4ae06e0  libphobos/libdruntime/core/stdc/errno.d
  e91ed8a068db9723b27deb61078c2a0e  libphobos/libdruntime/core/stdc/errno_.c
! 5bc69913491ed28a0c3a08bf4d2434d8  libphobos/libdruntime/core/stdc/fenv.d
  627bd812c57c65e72ca9360911ec5e37  libphobos/libdruntime/core/stdc/float_.d
  7b0fbc4eebf5b3364fd3541f51608b9a  libphobos/libdruntime/core/stdc/inttypes.d
  1a30fd546325cb5ed6fe746ef0c6f995  libphobos/libdruntime/core/stdc/limits.d
  b51a1082520c7feae033856d8ff7feaf  libphobos/libdruntime/core/stdc/locale.d
! f81c12ec62853e665d8537a2590e7006  libphobos/libdruntime/core/stdc/math.d
  94c1f25ee3344d05581afb7715c36fd8  libphobos/libdruntime/core/stdc/signal.d
  637ca0b5e651c59698ec62ce8235a651  libphobos/libdruntime/core/stdc/stdarg.d
  ec9f863d9c7addf6af7a13d803894041  libphobos/libdruntime/core/stdc/stddef.d
! 4a8184303c15a0bd84986bd752cb5956  libphobos/libdruntime/core/stdc/stdint.d
! 6e6b96bab9be505e18fa06a22c66f330  libphobos/libdruntime/core/stdc/stdio.d
! 162cf9b9678d6f00ed1578ea329f5d2c  libphobos/libdruntime/core/stdc/stdlib.d
! f4fb01a3ee53332353bf7d886b82e6a7  libphobos/libdruntime/core/stdc/string.d
  b1b452c04a088565feada1af815d3ea2  libphobos/libdruntime/core/stdc/tgmath.d
  5b4d2f8d4b10356845cfded43243cbeb  libphobos/libdruntime/core/stdc/time.d
! f0996fca3450ab1ce16a808a4e304176  libphobos/libdruntime/core/stdc/wchar_.d
  b1663e1953112eee39a60ee083f81988  libphobos/libdruntime/core/stdc/wctype.d
! 52254a7e6a4872d378fc0fe1625b3eed  libphobos/libdruntime/core/stdcpp/exception.d
! 41e1afdf4ad74ac7784eb4eb2e1eebe8  libphobos/libdruntime/core/stdcpp/typeinfo.d
! 9ca247dcfa9f9740089dacdd465e7fc0  libphobos/libdruntime/core/sync/barrier.d
! 0773ba776562ae87d99a574bf8392d47  libphobos/libdruntime/core/sync/condition.d
! f9fb574f0baa909bf159bb8d4823ef96  libphobos/libdruntime/core/sync/config.d
  639f1741cd8b67f88b45de6877ebaf28  libphobos/libdruntime/core/sync/exception.d
! 48cde7504a00966d44e02ab9e1798254  libphobos/libdruntime/core/sync/mutex.d
! 7fd0938eeb60d93b07b37eaf932947fd  libphobos/libdruntime/core/sync/rwmutex.d
! 9fa64d695826f18da9541181ceda3892  libphobos/libdruntime/core/sync/semaphore.d
  50fe5e30b4d51364e814298406f553f8  libphobos/libdruntime/core/sys/bionic/err.d
  d55bf2dad61f2510372f4bc81570b20b  libphobos/libdruntime/core/sys/bionic/fcntl.d
  61ec901bd4228ade72b80f786ea9f841  libphobos/libdruntime/core/sys/bionic/stdlib.d
! c4a4a30c955883aaed97049584c1513c  libphobos/libdruntime/core/sys/bionic/string.d
  6590cb511cc9a5f03165dd25827e7d5b  libphobos/libdruntime/core/sys/bionic/unistd.d
  e1a0c2ace7ce019d9507ff2e36d9046c  libphobos/libdruntime/core/sys/darwin/config.d
  7268f90152682f29fdbfdaea2235051f  libphobos/libdruntime/core/sys/darwin/crt_externs.d
! 709b12a24d03edec2c980a4af2b9d3aa  libphobos/libdruntime/core/sys/darwin/dlfcn.d
  a3c540146008694cd55b9331f0ea3c00  libphobos/libdruntime/core/sys/darwin/err.d
  57ead34bc2c10609cee697697c7109d9  libphobos/libdruntime/core/sys/darwin/execinfo.d
  0060659b909387b22689025cf7610aa1  libphobos/libdruntime/core/sys/darwin/fcntl.d
--- 102866,103006 ----
  4659326a13bd5fed47bb680ddb6f5dc3  liboffloadmic/runtime/orsl-lite/include/orsl-lite.h
  cc603cdf253cc686bfcee192bb7630df  liboffloadmic/runtime/orsl-lite/lib/orsl-lite.c
  dff5c8575c49d6aa71e549b0fa021479  liboffloadmic/runtime/orsl-lite/version.txt
! 4fac280dc41ce892a38f413316b88ac2  libphobos/ChangeLog
! 340ec558e25dd7225f7130cbf438ffc4  libphobos/Makefile.am
! 76f8b53761f8cbc5794e4a5fb5736588  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
! 89eed9dd40105abf4e48a97711bbe12c  libphobos/acinclude.m4
  fbb3c30724cb241010afacb0505c53e7  libphobos/aclocal.m4
  4923b1152206303a26c7dfb87f5de315  libphobos/config.h.in
! 887a4943e7312bf370be5a00158d366f  libphobos/configure
! 05a5341e706c429fee8fa722908db394  libphobos/configure.ac
! 112929974da1fdaa8a96be23952f9a7b  libphobos/configure.tgt
! fb19f2254dad8fbcb5691d673899ddd6  libphobos/d_rules.am
! e4224ccaecb14d942c71d31bef20d78c  libphobos/libdruntime/LICENSE.txt
! d47912bdef9cc13ada49d5e4d22d3f82  libphobos/libdruntime/MERGE
! 1f8c50ca38419685dbaa1ea5d22dc94f  libphobos/libdruntime/Makefile.am
! ad4b92509e67eebe63ae781fca53d6f0  libphobos/libdruntime/Makefile.in
! 273a917f05ae8df29c05cbfc1c4d69ac  libphobos/libdruntime/__builtins.di
! 73f5944083fb2b783e407a16260ff96a  libphobos/libdruntime/__main.di
! 85278b38e80d7f52c753c02f7e6ba99b  libphobos/libdruntime/config/aarch64/switchcontext.S
! de86fcf832aacafe6e17352f85cc0a0c  libphobos/libdruntime/config/arm/switchcontext.S
! d17adee7a0b1e6259e9e97ba40803b09  libphobos/libdruntime/config/common/threadasm.S
! d5b5e965ba999dfb7a7f0ffac8904f98  libphobos/libdruntime/config/mingw/msvc.c
! cb4171209ec1903502ed2be8de07fd03  libphobos/libdruntime/config/mingw/switchcontext.S
! ef4cf4be418739530e1cab8aa97dc1f4  libphobos/libdruntime/config/mips/switchcontext.S
! f6b6d7e26ef02e095ac4f7899931eecb  libphobos/libdruntime/config/powerpc/switchcontext.S
! a0883a51636d07264d1a6ebb9fec16b6  libphobos/libdruntime/config/s390/get_tls_offset.S
! 40f06b6bb0c30deb71d67b43e0c6448e  libphobos/libdruntime/config/systemz/get_tls_offset.S
! b11b71e0ad87c1b0e8f53c2841b00f1f  libphobos/libdruntime/config/x86/switchcontext.S
! 215298202cf9f846b9926177e2797aa7  libphobos/libdruntime/core/atomic.d
! 58b3b16c2cfc400fc8bcae6adf0b01ef  libphobos/libdruntime/core/attribute.d
! 49d61e2bb179d74c692b97a61a0bd2ff  libphobos/libdruntime/core/bitop.d
! 4a82ffb16f497f908bf37f14173450ca  libphobos/libdruntime/core/builtins.d
! 46c8a565a874deb70d23572b5b8f97bf  libphobos/libdruntime/core/checkedint.d
  e78005e94abbe57989cebd7c9a7c745f  libphobos/libdruntime/core/cpuid.d
! 6df09f0b0ff14518ab41347884ff95fd  libphobos/libdruntime/core/demangle.d
! e07710eec83b5ac9590ee99967db86b7  libphobos/libdruntime/core/exception.d
! 29b15a06fa6567c6eb960bb8f47b97d0  libphobos/libdruntime/core/gc/config.d
! 4ef58a3ac2165a7f0cbf25236599b610  libphobos/libdruntime/core/gc/gcinterface.d
! 9473dda5fca28fa3b7f32a14603fd3c7  libphobos/libdruntime/core/gc/registry.d
! 44470e31bc74da550f506133a03b62c1  libphobos/libdruntime/core/int128.d
! ed27a92c7d3ec4b856b3fa14ff3aee14  libphobos/libdruntime/core/internal/abort.d
! 169148668a694a7f2dae4de36603584b  libphobos/libdruntime/core/internal/array/appending.d
! e2863acaf9bd9eb4425a6f850d4f0cff  libphobos/libdruntime/core/internal/array/capacity.d
! 38e927f0c952ad679e5cb6c1cde2c6a9  libphobos/libdruntime/core/internal/array/casting.d
! 356e41b628757d5487dd4703fb0b61a8  libphobos/libdruntime/core/internal/array/comparison.d
! c5f295cc7a72d48bf07b83d6a9ff03c7  libphobos/libdruntime/core/internal/array/concatenation.d
! e814a0d2c4ed6fadbdd5e5d6e99f58d6  libphobos/libdruntime/core/internal/array/construction.d
! aa7423a5ca996ce499c5ad2f7592e330  libphobos/libdruntime/core/internal/array/equality.d
! 3db7ad624aea7c6f2d6581bed9c0040a  libphobos/libdruntime/core/internal/array/operations.d
! e2c019d004d60cb9d0b935bb3492d007  libphobos/libdruntime/core/internal/array/utils.d
! be79c443a83dd0e1f0ba76076ed48b65  libphobos/libdruntime/core/internal/atomic.d
  87f5099304bb6fa7f4723eb1c7b3aa7d  libphobos/libdruntime/core/internal/attributes.d
! a9542934a22ca3085232cc43feecd6a4  libphobos/libdruntime/core/internal/container/array.d
! 5bc9e156024da400fda515126d9fa893  libphobos/libdruntime/core/internal/container/common.d
! 651bcf61fd888da86b453d8a72d84069  libphobos/libdruntime/core/internal/container/hashtab.d
! f70666bdd80bfb970a17a9ed9be599ba  libphobos/libdruntime/core/internal/container/treap.d
! 0306fb8236a992e8cd0fd3c0eb09aea7  libphobos/libdruntime/core/internal/convert.d
! 5af8c61e8d1169c0eb82b2f2a076c213  libphobos/libdruntime/core/internal/dassert.d
! 963ea5f13b1323723157e4819d600aa2  libphobos/libdruntime/core/internal/destruction.d
! b7a158acc86998b63150c8e8767fff46  libphobos/libdruntime/core/internal/entrypoint.d
! 5de3efdd6ac2925e257c2085f3122dce  libphobos/libdruntime/core/internal/gc/bits.d
! eb76f72bcdf2014e0088a8877efd501d  libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d
! d6e0b069b896b4d8086027d80e5c83c0  libphobos/libdruntime/core/internal/gc/impl/manual/gc.d
! 1df48c32d9a821406ea635dc10cd8540  libphobos/libdruntime/core/internal/gc/impl/proto/gc.d
! 2cb095b0d446a4de7ca7f088a709b87b  libphobos/libdruntime/core/internal/gc/os.d
! 8725bd40d9847f863beaa7d8376edea3  libphobos/libdruntime/core/internal/gc/pooltable.d
! 2a6f2821592777625ec740c2521223c7  libphobos/libdruntime/core/internal/gc/proxy.d
! 57faa146e23e87068997584d8e1944c9  libphobos/libdruntime/core/internal/hash.d
! 299e680f03c3ddc13696fd52fc8354c4  libphobos/libdruntime/core/internal/lifetime.d
! 37bd48ea66ddb05259c7995f66a87815  libphobos/libdruntime/core/internal/moving.d
! 51162a434d5064c9f911220e178fc4f3  libphobos/libdruntime/core/internal/parseoptions.d
! 0ebbb014070d4b7532bfc5ced87a65b9  libphobos/libdruntime/core/internal/postblit.d
! 96f934300549e463061f98ce882e48b1  libphobos/libdruntime/core/internal/qsort.d
! 7ed2adffd54bf24394f997436dbe1420  libphobos/libdruntime/core/internal/spinlock.d
! 1bca667c9be060cf8d91bc2a89d261e1  libphobos/libdruntime/core/internal/string.d
! 0e954400ebc20e538cb0df0607daaeca  libphobos/libdruntime/core/internal/switch_.d
! 6b539bb09c49520794c30306581df6da  libphobos/libdruntime/core/internal/traits.d
! 67c15a55cfdff433aab90090fc9340e7  libphobos/libdruntime/core/internal/utf.d
! 22fe055f41451524e12f35c4d7b2c3bb  libphobos/libdruntime/core/internal/util/array.d
! 233370fbd6246580432384701cb2742a  libphobos/libdruntime/core/internal/util/math.d
! 793a33d93b61cca5a1e41316e67f6dd1  libphobos/libdruntime/core/lifetime.d
! bd9dd2b1b7a3d5e29673d463a4c8bc71  libphobos/libdruntime/core/math.d
! d3dea94cb11a6efc06a1d586f2067733  libphobos/libdruntime/core/memory.d
! 7b3e5b1fc656fd7d2d70c6ffdbe334d4  libphobos/libdruntime/core/runtime.d
! 94c90e0497c4a86a91cb75801ba3d8fc  libphobos/libdruntime/core/simd.d
  f276ebf85ef328a41c5ca86da694d73f  libphobos/libdruntime/core/stdc/assert_.d
  027bd40faf09b13abf5dc94da4aaa176  libphobos/libdruntime/core/stdc/complex.d
! 3613d1329557413a0d692ad85eeb029c  libphobos/libdruntime/core/stdc/config.d
  e73e1e0aaf48227fef16ff41037ecbdd  libphobos/libdruntime/core/stdc/ctype.d
  b0bed8bde9d9aa6689fee207f4ae06e0  libphobos/libdruntime/core/stdc/errno.d
  e91ed8a068db9723b27deb61078c2a0e  libphobos/libdruntime/core/stdc/errno_.c
! f91734b04d780ee0be567172b74049b5  libphobos/libdruntime/core/stdc/fenv.d
  627bd812c57c65e72ca9360911ec5e37  libphobos/libdruntime/core/stdc/float_.d
  7b0fbc4eebf5b3364fd3541f51608b9a  libphobos/libdruntime/core/stdc/inttypes.d
  1a30fd546325cb5ed6fe746ef0c6f995  libphobos/libdruntime/core/stdc/limits.d
  b51a1082520c7feae033856d8ff7feaf  libphobos/libdruntime/core/stdc/locale.d
! 33f56d98255ef50ccac83c1e1241929b  libphobos/libdruntime/core/stdc/math.d
  94c1f25ee3344d05581afb7715c36fd8  libphobos/libdruntime/core/stdc/signal.d
  637ca0b5e651c59698ec62ce8235a651  libphobos/libdruntime/core/stdc/stdarg.d
  ec9f863d9c7addf6af7a13d803894041  libphobos/libdruntime/core/stdc/stddef.d
! 63fb4f32732e7af998851bc69918ebff  libphobos/libdruntime/core/stdc/stdint.d
! e3d549833deb867eacca648b789687d9  libphobos/libdruntime/core/stdc/stdio.d
! 67f86e850583ab1ffcaabe52d2779757  libphobos/libdruntime/core/stdc/stdlib.d
! 4205e02c15ae138bcafb04d28f877484  libphobos/libdruntime/core/stdc/string.d
  b1b452c04a088565feada1af815d3ea2  libphobos/libdruntime/core/stdc/tgmath.d
  5b4d2f8d4b10356845cfded43243cbeb  libphobos/libdruntime/core/stdc/time.d
! 0aef12c394614bbe079f1793a5c37435  libphobos/libdruntime/core/stdc/wchar_.d
  b1663e1953112eee39a60ee083f81988  libphobos/libdruntime/core/stdc/wctype.d
! a343caf6e115a78beda4a590a00c124b  libphobos/libdruntime/core/stdcpp/allocator.d
! 83a1cef26175a49cf10768716683fede  libphobos/libdruntime/core/stdcpp/array.d
! 66de5c8df7412ea8d5fa973ed6fdd047  libphobos/libdruntime/core/stdcpp/exception.d
! 11e2db1bb8b58d00c9828fe11c5db485  libphobos/libdruntime/core/stdcpp/memory.d
! c42237e1c2e0d5a73f83bca2d569be95  libphobos/libdruntime/core/stdcpp/new_.d
! 6f0c8695e3969c7a759780b1a5ec1fc8  libphobos/libdruntime/core/stdcpp/string.d
! 7c1c6a905460a22413803a99a8627604  libphobos/libdruntime/core/stdcpp/string_view.d
! 12a17952827821958ee88a65eba6a869  libphobos/libdruntime/core/stdcpp/type_traits.d
! 0569b3425bd101daae472163154e504d  libphobos/libdruntime/core/stdcpp/typeinfo.d
! 06dd797b544244f3a183b5a9e384cd06  libphobos/libdruntime/core/stdcpp/utility.d
! f6303bba4269a36c93ec5592d2096be9  libphobos/libdruntime/core/stdcpp/vector.d
! b364863ebff89d65fec7b99b28297890  libphobos/libdruntime/core/stdcpp/xutility.d
! fbde46456ccf791794e8a05ff5e2514e  libphobos/libdruntime/core/sync/barrier.d
! ea1dd922e030afb9aa4af69a16f32aa1  libphobos/libdruntime/core/sync/condition.d
! 32e65cd032b692a0bc7ef837d9b288e8  libphobos/libdruntime/core/sync/config.d
! b0b7816a914ef20ee57eb6e87494489e  libphobos/libdruntime/core/sync/event.d
  639f1741cd8b67f88b45de6877ebaf28  libphobos/libdruntime/core/sync/exception.d
! 2cc688a01dce8657a69c57effda6158f  libphobos/libdruntime/core/sync/mutex.d
! 51c9e98d49f72c5db1eb7260656f678d  libphobos/libdruntime/core/sync/rwmutex.d
! 2f67770ee754b7013cdcc2bd45ada38d  libphobos/libdruntime/core/sync/semaphore.d
  50fe5e30b4d51364e814298406f553f8  libphobos/libdruntime/core/sys/bionic/err.d
  d55bf2dad61f2510372f4bc81570b20b  libphobos/libdruntime/core/sys/bionic/fcntl.d
  61ec901bd4228ade72b80f786ea9f841  libphobos/libdruntime/core/sys/bionic/stdlib.d
! 37cf1fc03c8fb882e6bd777d1de22c7a  libphobos/libdruntime/core/sys/bionic/string.d
  6590cb511cc9a5f03165dd25827e7d5b  libphobos/libdruntime/core/sys/bionic/unistd.d
  e1a0c2ace7ce019d9507ff2e36d9046c  libphobos/libdruntime/core/sys/darwin/config.d
  7268f90152682f29fdbfdaea2235051f  libphobos/libdruntime/core/sys/darwin/crt_externs.d
! 0eda72e3cac9805cc23af8959075decb  libphobos/libdruntime/core/sys/darwin/dlfcn.d
  a3c540146008694cd55b9331f0ea3c00  libphobos/libdruntime/core/sys/darwin/err.d
  57ead34bc2c10609cee697697c7109d9  libphobos/libdruntime/core/sys/darwin/execinfo.d
  0060659b909387b22689025cf7610aa1  libphobos/libdruntime/core/sys/darwin/fcntl.d
*************** cdd965e1bc4060658a5783cea01da633  libpho
*** 96253,96259 ****
  1977f7f9305576784856f478fc34637e  libphobos/libdruntime/core/sys/darwin/mach/getsect.d
  0ff5ed83f084635f094a9003ce83e2e3  libphobos/libdruntime/core/sys/darwin/mach/kern_return.d
  322a2c3bf9ff78db7beed5f673f08f84  libphobos/libdruntime/core/sys/darwin/mach/loader.d
! c122b118a6caa88ffee48b98cab19b1a  libphobos/libdruntime/core/sys/darwin/mach/nlist.d
  27705f6828a0cd3d2ed10b37956cb52d  libphobos/libdruntime/core/sys/darwin/mach/port.d
  11f245cf78f453eec2ce6ab6ab994489  libphobos/libdruntime/core/sys/darwin/mach/semaphore.d
  09669d73890b99bf78487d58f0bc57df  libphobos/libdruntime/core/sys/darwin/mach/stab.d
--- 103009,103015 ----
  1977f7f9305576784856f478fc34637e  libphobos/libdruntime/core/sys/darwin/mach/getsect.d
  0ff5ed83f084635f094a9003ce83e2e3  libphobos/libdruntime/core/sys/darwin/mach/kern_return.d
  322a2c3bf9ff78db7beed5f673f08f84  libphobos/libdruntime/core/sys/darwin/mach/loader.d
! b494cd41558ecb995c4333baf8fc06e5  libphobos/libdruntime/core/sys/darwin/mach/nlist.d
  27705f6828a0cd3d2ed10b37956cb52d  libphobos/libdruntime/core/sys/darwin/mach/port.d
  11f245cf78f453eec2ce6ab6ab994489  libphobos/libdruntime/core/sys/darwin/mach/semaphore.d
  09669d73890b99bf78487d58f0bc57df  libphobos/libdruntime/core/sys/darwin/mach/stab.d
*************** c122b118a6caa88ffee48b98cab19b1a  libpho
*** 96261,96285 ****
  e0cfebfa42a04ef83e94ce398f8d572a  libphobos/libdruntime/core/sys/darwin/netinet/in_.d
  99642cacbd6ed7ea6c4ea68521cbd236  libphobos/libdruntime/core/sys/darwin/pthread.d
  a638835645b7f6f237988cde82cdc023  libphobos/libdruntime/core/sys/darwin/stdlib.d
! a76880a4302f8dd367056c35b58eec89  libphobos/libdruntime/core/sys/darwin/string.d
  1822982f807a2d0bf4f414d7508f14b9  libphobos/libdruntime/core/sys/darwin/sys/attr.d
  f313052d67738ea2ef7ecb6a841d8e8a  libphobos/libdruntime/core/sys/darwin/sys/cdefs.d
  0a9f455c4909b18d235716e2e990b036  libphobos/libdruntime/core/sys/darwin/sys/event.d
  d45630fa4eae2334c1017e90da6181b4  libphobos/libdruntime/core/sys/darwin/sys/mman.d
  ee768f1e1a87f6a51cceb812e431b845  libphobos/libdruntime/core/sys/darwin/sys/sysctl.d
! 8b393d5614608802c0118242aac3c2b5  libphobos/libdruntime/core/sys/dragonflybsd/dlfcn.d
  6eac382e99d9b8534968c86038d313d8  libphobos/libdruntime/core/sys/dragonflybsd/err.d
  acf1e3bd64ab277991c64333d3e0579b  libphobos/libdruntime/core/sys/dragonflybsd/execinfo.d
  a6a8f14bd00ff97c7e0951489f562ad8  libphobos/libdruntime/core/sys/dragonflybsd/netinet/in_.d
  c86f640d53951aff6dc85f8a55a95b29  libphobos/libdruntime/core/sys/dragonflybsd/pthread_np.d
  ca5f75ae9c3430ffa168de837fbdacce  libphobos/libdruntime/core/sys/dragonflybsd/stdlib.d
! 9972b2bf7d75c85217ee1cb8e4168a9d  libphobos/libdruntime/core/sys/dragonflybsd/string.d
  aebec2abbff9264fe5fb8fe7f0742f3e  libphobos/libdruntime/core/sys/dragonflybsd/sys/_bitset.d
  5ab9878143773ab170060d0052e88be1  libphobos/libdruntime/core/sys/dragonflybsd/sys/_cpuset.d
  9e2c4a7a7c64e5ecccf60e6ecc2bca8d  libphobos/libdruntime/core/sys/dragonflybsd/sys/cdefs.d
  7fa74bda026e2e5ef3bedefc21399d5b  libphobos/libdruntime/core/sys/dragonflybsd/sys/elf.d
! 215cfaaeb2be0a1804bd00c3d5a6fb83  libphobos/libdruntime/core/sys/dragonflybsd/sys/elf32.d
! 7be5b5634353fc858899a6918aa3cbd5  libphobos/libdruntime/core/sys/dragonflybsd/sys/elf64.d
  99207929e21166c3d01746e683da783f  libphobos/libdruntime/core/sys/dragonflybsd/sys/elf_common.d
  c4670d2d6c9210cd8b63dd16ea2d4c7e  libphobos/libdruntime/core/sys/dragonflybsd/sys/event.d
  94cb059685b222a5be21171cd4e5ae38  libphobos/libdruntime/core/sys/dragonflybsd/sys/link_elf.d
--- 103017,103041 ----
  e0cfebfa42a04ef83e94ce398f8d572a  libphobos/libdruntime/core/sys/darwin/netinet/in_.d
  99642cacbd6ed7ea6c4ea68521cbd236  libphobos/libdruntime/core/sys/darwin/pthread.d
  a638835645b7f6f237988cde82cdc023  libphobos/libdruntime/core/sys/darwin/stdlib.d
! b23e9db102d21fdfaae26d64270c36b4  libphobos/libdruntime/core/sys/darwin/string.d
  1822982f807a2d0bf4f414d7508f14b9  libphobos/libdruntime/core/sys/darwin/sys/attr.d
  f313052d67738ea2ef7ecb6a841d8e8a  libphobos/libdruntime/core/sys/darwin/sys/cdefs.d
  0a9f455c4909b18d235716e2e990b036  libphobos/libdruntime/core/sys/darwin/sys/event.d
  d45630fa4eae2334c1017e90da6181b4  libphobos/libdruntime/core/sys/darwin/sys/mman.d
  ee768f1e1a87f6a51cceb812e431b845  libphobos/libdruntime/core/sys/darwin/sys/sysctl.d
! 6c97885f83797ff4aebb198ca52c218a  libphobos/libdruntime/core/sys/dragonflybsd/dlfcn.d
  6eac382e99d9b8534968c86038d313d8  libphobos/libdruntime/core/sys/dragonflybsd/err.d
  acf1e3bd64ab277991c64333d3e0579b  libphobos/libdruntime/core/sys/dragonflybsd/execinfo.d
  a6a8f14bd00ff97c7e0951489f562ad8  libphobos/libdruntime/core/sys/dragonflybsd/netinet/in_.d
  c86f640d53951aff6dc85f8a55a95b29  libphobos/libdruntime/core/sys/dragonflybsd/pthread_np.d
  ca5f75ae9c3430ffa168de837fbdacce  libphobos/libdruntime/core/sys/dragonflybsd/stdlib.d
! 6cfdddbb5f50d6707b5ef87de9122759  libphobos/libdruntime/core/sys/dragonflybsd/string.d
  aebec2abbff9264fe5fb8fe7f0742f3e  libphobos/libdruntime/core/sys/dragonflybsd/sys/_bitset.d
  5ab9878143773ab170060d0052e88be1  libphobos/libdruntime/core/sys/dragonflybsd/sys/_cpuset.d
  9e2c4a7a7c64e5ecccf60e6ecc2bca8d  libphobos/libdruntime/core/sys/dragonflybsd/sys/cdefs.d
  7fa74bda026e2e5ef3bedefc21399d5b  libphobos/libdruntime/core/sys/dragonflybsd/sys/elf.d
! afda28e4fafda81abea4e57b2ce769ca  libphobos/libdruntime/core/sys/dragonflybsd/sys/elf32.d
! 71faf49f5b6f9744d6dc2f1fd2f94d79  libphobos/libdruntime/core/sys/dragonflybsd/sys/elf64.d
  99207929e21166c3d01746e683da783f  libphobos/libdruntime/core/sys/dragonflybsd/sys/elf_common.d
  c4670d2d6c9210cd8b63dd16ea2d4c7e  libphobos/libdruntime/core/sys/dragonflybsd/sys/event.d
  94cb059685b222a5be21171cd4e5ae38  libphobos/libdruntime/core/sys/dragonflybsd/sys/link_elf.d
*************** c4670d2d6c9210cd8b63dd16ea2d4c7e  libpho
*** 96287,96306 ****
  894ff2238ebbebe3242c4209a893c05b  libphobos/libdruntime/core/sys/dragonflybsd/sys/socket.d
  1edd21f71df6ed90f611f5f352b3166c  libphobos/libdruntime/core/sys/dragonflybsd/sys/sysctl.d
  f14294df112fde328fa8d60fe9777a4c  libphobos/libdruntime/core/sys/dragonflybsd/time.d
! 1444514d2815d1ade27a97ed079c78e2  libphobos/libdruntime/core/sys/freebsd/config.d
! db0c50d9548853a0e6d6e04514075c2d  libphobos/libdruntime/core/sys/freebsd/dlfcn.d
  af280329e0c803d82636283b14c46642  libphobos/libdruntime/core/sys/freebsd/err.d
  380100960f334f1ed62e46fcde0154f3  libphobos/libdruntime/core/sys/freebsd/execinfo.d
  307b5921875f2667f8c2a0195d46589e  libphobos/libdruntime/core/sys/freebsd/netinet/in_.d
  eed1afcf0c9c1f7170550c80d4c1a294  libphobos/libdruntime/core/sys/freebsd/pthread_np.d
  ef7226f644352e61dd81ad370cf837fc  libphobos/libdruntime/core/sys/freebsd/stdlib.d
! 516149c63b33c453ea924d05504cd92f  libphobos/libdruntime/core/sys/freebsd/string.d
  760a556212d4a95cf4109e26f2492711  libphobos/libdruntime/core/sys/freebsd/sys/_bitset.d
  55344b2716c3a4c2b4dae60cf7c69ca8  libphobos/libdruntime/core/sys/freebsd/sys/_cpuset.d
  7935160b9fb1677ccd85bb239deaa975  libphobos/libdruntime/core/sys/freebsd/sys/cdefs.d
  2d62ba1bf8ce4b7da48af344a8251ad0  libphobos/libdruntime/core/sys/freebsd/sys/elf.d
! 2bc8637b5d34b107ae5a6b2dcf35c780  libphobos/libdruntime/core/sys/freebsd/sys/elf32.d
! 99a3029e4430f4ac1819c71b837eaa55  libphobos/libdruntime/core/sys/freebsd/sys/elf64.d
  f505ef077a2c3986ca4055d98decc56a  libphobos/libdruntime/core/sys/freebsd/sys/elf_common.d
  d2880e9391595d51528eb24f44a12446  libphobos/libdruntime/core/sys/freebsd/sys/event.d
  3438f02ecb73e3e9a85756b150a51b74  libphobos/libdruntime/core/sys/freebsd/sys/link_elf.d
--- 103043,103062 ----
  894ff2238ebbebe3242c4209a893c05b  libphobos/libdruntime/core/sys/dragonflybsd/sys/socket.d
  1edd21f71df6ed90f611f5f352b3166c  libphobos/libdruntime/core/sys/dragonflybsd/sys/sysctl.d
  f14294df112fde328fa8d60fe9777a4c  libphobos/libdruntime/core/sys/dragonflybsd/time.d
! b4c58f5c2b484f52e2677a5f6efaf183  libphobos/libdruntime/core/sys/freebsd/config.d
! fdbaf03147cfe71d5470a4e029044a7c  libphobos/libdruntime/core/sys/freebsd/dlfcn.d
  af280329e0c803d82636283b14c46642  libphobos/libdruntime/core/sys/freebsd/err.d
  380100960f334f1ed62e46fcde0154f3  libphobos/libdruntime/core/sys/freebsd/execinfo.d
  307b5921875f2667f8c2a0195d46589e  libphobos/libdruntime/core/sys/freebsd/netinet/in_.d
  eed1afcf0c9c1f7170550c80d4c1a294  libphobos/libdruntime/core/sys/freebsd/pthread_np.d
  ef7226f644352e61dd81ad370cf837fc  libphobos/libdruntime/core/sys/freebsd/stdlib.d
! 6a9dc335efc1298f3d31578c068ca4f9  libphobos/libdruntime/core/sys/freebsd/string.d
  760a556212d4a95cf4109e26f2492711  libphobos/libdruntime/core/sys/freebsd/sys/_bitset.d
  55344b2716c3a4c2b4dae60cf7c69ca8  libphobos/libdruntime/core/sys/freebsd/sys/_cpuset.d
  7935160b9fb1677ccd85bb239deaa975  libphobos/libdruntime/core/sys/freebsd/sys/cdefs.d
  2d62ba1bf8ce4b7da48af344a8251ad0  libphobos/libdruntime/core/sys/freebsd/sys/elf.d
! f499b9b3eb2d85f5a6721d4dd0189422  libphobos/libdruntime/core/sys/freebsd/sys/elf32.d
! 06e0e73a93363a0e6758e99fdfcc82c1  libphobos/libdruntime/core/sys/freebsd/sys/elf64.d
  f505ef077a2c3986ca4055d98decc56a  libphobos/libdruntime/core/sys/freebsd/sys/elf_common.d
  d2880e9391595d51528eb24f44a12446  libphobos/libdruntime/core/sys/freebsd/sys/event.d
  3438f02ecb73e3e9a85756b150a51b74  libphobos/libdruntime/core/sys/freebsd/sys/link_elf.d
*************** b5482e757cf68b7cab783fb27ff7e8dc  libpho
*** 96309,96335 ****
  2fd5d8f5c454e4d0236e0c6b4076b3f3  libphobos/libdruntime/core/sys/freebsd/sys/sysctl.d
  7580b3a7ee4945c8401ff9ad2b1eb5d8  libphobos/libdruntime/core/sys/freebsd/time.d
  58ce9c60b279b1d219d3f44f0c062f3e  libphobos/libdruntime/core/sys/freebsd/unistd.d
! 78eda82e58bc4fe3830e3a0d95ad237b  libphobos/libdruntime/core/sys/linux/config.d
! 979cdf63693b849e23cf9b16863fd665  libphobos/libdruntime/core/sys/linux/dlfcn.d
  9d78ad97e048f35f166e93fc8a257d3b  libphobos/libdruntime/core/sys/linux/elf.d
  45b78c71b74d9b20049dbdc6489ea85a  libphobos/libdruntime/core/sys/linux/epoll.d
  e191c06f87919f4adec9c982feb29aec  libphobos/libdruntime/core/sys/linux/err.d
! 185b342b16c42624b12ffd1b30a8a362  libphobos/libdruntime/core/sys/linux/errno.d
  5acfff22872b45dea57ec75e92889abc  libphobos/libdruntime/core/sys/linux/execinfo.d
  935ea2ae6772bc751d347bb55641b584  libphobos/libdruntime/core/sys/linux/fcntl.d
  74e924a11837d0902cd064af18ae0456  libphobos/libdruntime/core/sys/linux/ifaddrs.d
  4f38545861ca7fa7efb84e0a5fcd6b3c  libphobos/libdruntime/core/sys/linux/link.d
! 55ee58373a21df97b0b2b1976c1030f6  libphobos/libdruntime/core/sys/linux/netinet/in_.d
  ef4ca38842cf7000f36294af3547a28a  libphobos/libdruntime/core/sys/linux/netinet/tcp.d
! 429fd504099fca269ed1b8cf4929cdf7  libphobos/libdruntime/core/sys/linux/sched.d
  8a4825fd9f24f4d8eb8b82ab454851c3  libphobos/libdruntime/core/sys/linux/stdio.d
! e4101265ca43c372f146c958e47bc0c4  libphobos/libdruntime/core/sys/linux/string.d
  28da6eda5c615291a6aac7a619f20f78  libphobos/libdruntime/core/sys/linux/sys/auxv.d
  7ea96b49471b6289eb8299fbe418c31a  libphobos/libdruntime/core/sys/linux/sys/eventfd.d
  d24094280e490194dedf87b353ff18bb  libphobos/libdruntime/core/sys/linux/sys/file.d
! e9d6847489a932ed6c168dc2f63139f1  libphobos/libdruntime/core/sys/linux/sys/inotify.d
! eaf7761cb76c18a22f0106e37ba72ff8  libphobos/libdruntime/core/sys/linux/sys/mman.d
  760b3a3ba87ef1ea457197d20ffd7bb8  libphobos/libdruntime/core/sys/linux/sys/prctl.d
  8dd5be002434c8031e503c306e4400f9  libphobos/libdruntime/core/sys/linux/sys/signalfd.d
  00be1093b809dc09200b03f711033c00  libphobos/libdruntime/core/sys/linux/sys/socket.d
  9467d51c62741df44e30900beee30259  libphobos/libdruntime/core/sys/linux/sys/sysinfo.d
--- 103065,103095 ----
  2fd5d8f5c454e4d0236e0c6b4076b3f3  libphobos/libdruntime/core/sys/freebsd/sys/sysctl.d
  7580b3a7ee4945c8401ff9ad2b1eb5d8  libphobos/libdruntime/core/sys/freebsd/time.d
  58ce9c60b279b1d219d3f44f0c062f3e  libphobos/libdruntime/core/sys/freebsd/unistd.d
! 2e58042b40b06181daf7cb32b0d0b3d6  libphobos/libdruntime/core/sys/linux/config.d
! ae73e7f5b20594fe59ce2008d9e82d37  libphobos/libdruntime/core/sys/linux/dlfcn.d
  9d78ad97e048f35f166e93fc8a257d3b  libphobos/libdruntime/core/sys/linux/elf.d
  45b78c71b74d9b20049dbdc6489ea85a  libphobos/libdruntime/core/sys/linux/epoll.d
  e191c06f87919f4adec9c982feb29aec  libphobos/libdruntime/core/sys/linux/err.d
! feeb11886796e75ce1e5383c6e146f8b  libphobos/libdruntime/core/sys/linux/errno.d
  5acfff22872b45dea57ec75e92889abc  libphobos/libdruntime/core/sys/linux/execinfo.d
  935ea2ae6772bc751d347bb55641b584  libphobos/libdruntime/core/sys/linux/fcntl.d
+ deba09f2c7c1081d0da4335caf995f7e  libphobos/libdruntime/core/sys/linux/fs.d
  74e924a11837d0902cd064af18ae0456  libphobos/libdruntime/core/sys/linux/ifaddrs.d
+ 261910adb953dff0955f8e3cfe51a215  libphobos/libdruntime/core/sys/linux/io_uring.d
  4f38545861ca7fa7efb84e0a5fcd6b3c  libphobos/libdruntime/core/sys/linux/link.d
! 12fb5b8d3834b7b9da4b7c2158d39f82  libphobos/libdruntime/core/sys/linux/netinet/in_.d
  ef4ca38842cf7000f36294af3547a28a  libphobos/libdruntime/core/sys/linux/netinet/tcp.d
! 4ac5e691f31abb410e14b5944c97461c  libphobos/libdruntime/core/sys/linux/perf_event.d
! ab74a4f64ae574524cf66da00ed59381  libphobos/libdruntime/core/sys/linux/sched.d
  8a4825fd9f24f4d8eb8b82ab454851c3  libphobos/libdruntime/core/sys/linux/stdio.d
! 782a789c9c3999e5dc4d3089df64c870  libphobos/libdruntime/core/sys/linux/string.d
  28da6eda5c615291a6aac7a619f20f78  libphobos/libdruntime/core/sys/linux/sys/auxv.d
  7ea96b49471b6289eb8299fbe418c31a  libphobos/libdruntime/core/sys/linux/sys/eventfd.d
  d24094280e490194dedf87b353ff18bb  libphobos/libdruntime/core/sys/linux/sys/file.d
! d0516e4d4ab55a2503c79620d4864d62  libphobos/libdruntime/core/sys/linux/sys/inotify.d
! 770fb85d79a8cc772cdda0769c205d44  libphobos/libdruntime/core/sys/linux/sys/mman.d
  760b3a3ba87ef1ea457197d20ffd7bb8  libphobos/libdruntime/core/sys/linux/sys/prctl.d
+ f80d0aef18c502a635390c78983541dd  libphobos/libdruntime/core/sys/linux/sys/procfs.d
  8dd5be002434c8031e503c306e4400f9  libphobos/libdruntime/core/sys/linux/sys/signalfd.d
  00be1093b809dc09200b03f711033c00  libphobos/libdruntime/core/sys/linux/sys/socket.d
  9467d51c62741df44e30900beee30259  libphobos/libdruntime/core/sys/linux/sys/sysinfo.d
*************** e0d6349243f4628102df05cc8aecb721  libpho
*** 96340,96353 ****
  911e6b52f63b86bf643effb3bc490d48  libphobos/libdruntime/core/sys/linux/timerfd.d
  36b60a4130cd1488549946ab47892020  libphobos/libdruntime/core/sys/linux/tipc.d
  147de99dcf03eef5b45d3c774b64b677  libphobos/libdruntime/core/sys/linux/unistd.d
! 98bd3f73b2d68a75a74ee1dd820fa98a  libphobos/libdruntime/core/sys/netbsd/dlfcn.d
  dfd28b5ab076802f136129647195c782  libphobos/libdruntime/core/sys/netbsd/err.d
  16687f12d9b35a350c3415c52d038cd0  libphobos/libdruntime/core/sys/netbsd/execinfo.d
  f03137d862ce397c6fb8ef85bcefab73  libphobos/libdruntime/core/sys/netbsd/stdlib.d
! a112b6ad4d37972b66801bcdf8b36906  libphobos/libdruntime/core/sys/netbsd/string.d
  e739d3dae4d70fa6737b4ce09c43994d  libphobos/libdruntime/core/sys/netbsd/sys/elf.d
! 2f2ddae6374b8429bf5c0782474af3b8  libphobos/libdruntime/core/sys/netbsd/sys/elf32.d
! 42b77f346add5cd23414a517acbfe0d5  libphobos/libdruntime/core/sys/netbsd/sys/elf64.d
  62f3e35fa3023872887390d5132421ce  libphobos/libdruntime/core/sys/netbsd/sys/elf_common.d
  3b9b03a58246b1ff0add7bf8623db546  libphobos/libdruntime/core/sys/netbsd/sys/event.d
  b7d30227519e88528d6f108a0b716317  libphobos/libdruntime/core/sys/netbsd/sys/featuretest.d
--- 103100,103113 ----
  911e6b52f63b86bf643effb3bc490d48  libphobos/libdruntime/core/sys/linux/timerfd.d
  36b60a4130cd1488549946ab47892020  libphobos/libdruntime/core/sys/linux/tipc.d
  147de99dcf03eef5b45d3c774b64b677  libphobos/libdruntime/core/sys/linux/unistd.d
! 1b582b30d3653f119276cadc05ee72d8  libphobos/libdruntime/core/sys/netbsd/dlfcn.d
  dfd28b5ab076802f136129647195c782  libphobos/libdruntime/core/sys/netbsd/err.d
  16687f12d9b35a350c3415c52d038cd0  libphobos/libdruntime/core/sys/netbsd/execinfo.d
  f03137d862ce397c6fb8ef85bcefab73  libphobos/libdruntime/core/sys/netbsd/stdlib.d
! 7b0f236b427b427e01e8fa52532b2c3c  libphobos/libdruntime/core/sys/netbsd/string.d
  e739d3dae4d70fa6737b4ce09c43994d  libphobos/libdruntime/core/sys/netbsd/sys/elf.d
! c3b5c9b222123c7d9b1842e8f8ad8db4  libphobos/libdruntime/core/sys/netbsd/sys/elf32.d
! 2a7a314b6654849148db9a5ee7f8a8b0  libphobos/libdruntime/core/sys/netbsd/sys/elf64.d
  62f3e35fa3023872887390d5132421ce  libphobos/libdruntime/core/sys/netbsd/sys/elf_common.d
  3b9b03a58246b1ff0add7bf8623db546  libphobos/libdruntime/core/sys/netbsd/sys/event.d
  b7d30227519e88528d6f108a0b716317  libphobos/libdruntime/core/sys/netbsd/sys/featuretest.d
*************** b7d30227519e88528d6f108a0b716317  libpho
*** 96355,96438 ****
  9de03b49678d737774525f946308c176  libphobos/libdruntime/core/sys/netbsd/sys/mman.d
  00fa230caafce571c5e5b9b1c0e66f55  libphobos/libdruntime/core/sys/netbsd/sys/sysctl.d
  c91b85e73f2ed19d2ab87faaa1954366  libphobos/libdruntime/core/sys/netbsd/time.d
! dbe541665e1a72e9c61dcddb24ffe02a  libphobos/libdruntime/core/sys/openbsd/dlfcn.d
  76a7cedaf47c514815473a2e187a7c4d  libphobos/libdruntime/core/sys/openbsd/err.d
! 1094a03d71c0a72acc499e1514f8a6d8  libphobos/libdruntime/core/sys/openbsd/stdlib.d
! 79e7d6174c84307e15bfe2d70bf58884  libphobos/libdruntime/core/sys/openbsd/string.d
  61119274dbe0da19bb7862b1d8e3be88  libphobos/libdruntime/core/sys/openbsd/sys/cdefs.d
  4f2b043926b16e1b37a2e25509085736  libphobos/libdruntime/core/sys/openbsd/sys/elf.d
! 47420237b3795e8d4fa790d55bde4adf  libphobos/libdruntime/core/sys/openbsd/sys/elf32.d
! b1f1af3d6d0621746166cc16eb9c7b3e  libphobos/libdruntime/core/sys/openbsd/sys/elf64.d
  dadfb12aa3ebcaf98bc06d53bec3b016  libphobos/libdruntime/core/sys/openbsd/sys/elf_common.d
  ed254802fe236c52abe7ec9ebf7f8f79  libphobos/libdruntime/core/sys/openbsd/sys/link_elf.d
! 21b6f504ce0ee889fbffd0f0ea9aeb52  libphobos/libdruntime/core/sys/openbsd/sys/mman.d
! 3a11d7597d9438b11c9a26cccfe8117c  libphobos/libdruntime/core/sys/openbsd/sys/sysctl.d
  26fdce9d3769cf37bf38b5ada08836f3  libphobos/libdruntime/core/sys/openbsd/time.d
! 589069ea0610cd2c7339a90d955d292d  libphobos/libdruntime/core/sys/openbsd/unistd.d
! 198370b8820f3db46a80d447938a30d3  libphobos/libdruntime/core/sys/posix/aio.d
! c1dac6288753c891f8ec173a3dc57d62  libphobos/libdruntime/core/sys/posix/arpa/inet.d
! 1a446ce70964990d0864c586f5755fe0  libphobos/libdruntime/core/sys/posix/config.d
! 676658d748ed751e7fc65ece0c887cfc  libphobos/libdruntime/core/sys/posix/dirent.d
! 131db3f9d781b6dfdb4fa72d4981218d  libphobos/libdruntime/core/sys/posix/dlfcn.d
! 308cbd84ae80447c14acd90eabef36aa  libphobos/libdruntime/core/sys/posix/fcntl.d
  7c2ed4684f1e1236c753e224d3861bc6  libphobos/libdruntime/core/sys/posix/grp.d
  78097ad54d7e30233bc2096505d9381f  libphobos/libdruntime/core/sys/posix/iconv.d
  5fde0ea877bd02237ae4c8bad758af1e  libphobos/libdruntime/core/sys/posix/inttypes.d
  c582dcc48c9dbc511dcbb250b6e8e0ff  libphobos/libdruntime/core/sys/posix/libgen.d
! b988465d4b60d57b4960d42b8fe49352  libphobos/libdruntime/core/sys/posix/locale.d
  5cdd1d83f9dd28b654c12a503f0721bd  libphobos/libdruntime/core/sys/posix/mqueue.d
! 7a91f96e1429fa42fa4f41114dc92706  libphobos/libdruntime/core/sys/posix/net/if_.d
! 0e92adce08f71ad99e1d8c8939c17092  libphobos/libdruntime/core/sys/posix/netdb.d
  352e112b95d9f5b485e02df80a159271  libphobos/libdruntime/core/sys/posix/netinet/in_.d
  e2bed0b739fc017fa2c967cab3adf1ab  libphobos/libdruntime/core/sys/posix/netinet/tcp.d
! c0b5849f19fa26f6230cf4bee5543e08  libphobos/libdruntime/core/sys/posix/poll.d
  f018b3052e24a1c26e41901675990102  libphobos/libdruntime/core/sys/posix/pthread.d
  453c6c187ee2dc82d0fa5abc3504c0b1  libphobos/libdruntime/core/sys/posix/pwd.d
! 4a9f21b35663aad717b12e86926bf338  libphobos/libdruntime/core/sys/posix/sched.d
! e28f540a5c2e22756eefd8b50d01a0a0  libphobos/libdruntime/core/sys/posix/semaphore.d
! 802cdc5f25ac3225689c0d239b5568df  libphobos/libdruntime/core/sys/posix/setjmp.d
! eecb290966813f46751b150311a3e9ba  libphobos/libdruntime/core/sys/posix/signal.d
! c93e4de9caab4a1470e278682e6c903d  libphobos/libdruntime/core/sys/posix/spawn.d
! 5c93ef14880500138d9f642ec4d501e0  libphobos/libdruntime/core/sys/posix/stdc/time.d
! 9216223c082ad17fb7e37ffa9e3d1f41  libphobos/libdruntime/core/sys/posix/stdio.d
  11edef1239c75ff58562b90313319a04  libphobos/libdruntime/core/sys/posix/stdlib.d
! 47ea7e4d8969d71d4d029e26ccc354af  libphobos/libdruntime/core/sys/posix/string.d
  cfe01b190b878b0e95fb9347033971dc  libphobos/libdruntime/core/sys/posix/strings.d
! a5bdd8ee2ca5db40440e27208ed0389c  libphobos/libdruntime/core/sys/posix/sys/filio.d
! c4d1a3c15ffb9d69c5111e4fd2d9eed5  libphobos/libdruntime/core/sys/posix/sys/ioccom.d
! 17aaf38545598765b5d6cde146431720  libphobos/libdruntime/core/sys/posix/sys/ioctl.d
! 925d759cf9d5b18eb3e54b1c2e1bc77d  libphobos/libdruntime/core/sys/posix/sys/ipc.d
! 054c01a08967a0829cf04244b28ae7ae  libphobos/libdruntime/core/sys/posix/sys/mman.d
  71e2800fd8795ce5238be51d015f215d  libphobos/libdruntime/core/sys/posix/sys/msg.d
! 6b74b3097f933b7f747f680af0cadff2  libphobos/libdruntime/core/sys/posix/sys/resource.d
  920e611edb76252a28fadbc6f1f7290c  libphobos/libdruntime/core/sys/posix/sys/select.d
! 3f0160fd3aef93cff923512013076f31  libphobos/libdruntime/core/sys/posix/sys/shm.d
! af2ed3c00c9dfcc030db67502b701893  libphobos/libdruntime/core/sys/posix/sys/socket.d
! d1a065cefdde38d41ee3b3018f769a41  libphobos/libdruntime/core/sys/posix/sys/stat.d
! a1bfb009ab16e1b9ac568b1bdee35fac  libphobos/libdruntime/core/sys/posix/sys/statvfs.d
  f71ae7f996ce3771b140c9a921b5aeb9  libphobos/libdruntime/core/sys/posix/sys/time.d
! 3ae60f821a06e5d186bca19aba1d47e6  libphobos/libdruntime/core/sys/posix/sys/ttycom.d
! 7a8ec90679d130ed9a9a2a83dbca6592  libphobos/libdruntime/core/sys/posix/sys/types.d
  2d6bebed89a89ff7ab8a98164586e3f8  libphobos/libdruntime/core/sys/posix/sys/uio.d
  052e161c5cb19aa20eb6573d04d35678  libphobos/libdruntime/core/sys/posix/sys/un.d
  9d80c5eb1f9e3c226152f4b1a775ade7  libphobos/libdruntime/core/sys/posix/sys/utsname.d
! 39278679b3f1fcb707ac0d97d4c67ab4  libphobos/libdruntime/core/sys/posix/sys/wait.d
  8437ee40fa6b6f2f44bf7c68f5009ab3  libphobos/libdruntime/core/sys/posix/syslog.d
! 2f0cc16e98fbd3d4ec11f56079e524ab  libphobos/libdruntime/core/sys/posix/termios.d
! a17c99a8a9d6de27db17c0817eea5849  libphobos/libdruntime/core/sys/posix/time.d
! 5e84397b1e18a77a36adb905de82fc26  libphobos/libdruntime/core/sys/posix/ucontext.d
  b170c2fa65d62140895035c27f858ff0  libphobos/libdruntime/core/sys/posix/unistd.d
  2df1796dfe2516e39808045b21b3ff8c  libphobos/libdruntime/core/sys/posix/utime.d
! 3912c5418db939fee965556c29a7d147  libphobos/libdruntime/core/sys/solaris/dlfcn.d
  e24762f124741eb7164ac6d35f819119  libphobos/libdruntime/core/sys/solaris/elf.d
  6609181d8ebdbb548ac7d475d0b53e25  libphobos/libdruntime/core/sys/solaris/err.d
  d821485cf4fb84fc3a4823d17496c304  libphobos/libdruntime/core/sys/solaris/execinfo.d
  13168aebf00d1f79d79f7aa9a14ee45e  libphobos/libdruntime/core/sys/solaris/libelf.d
  b80defc2ca94dd32d65995270ef8aed4  libphobos/libdruntime/core/sys/solaris/link.d
  9ab55da380bb23d8586ee2d0026f2d88  libphobos/libdruntime/core/sys/solaris/stdlib.d
! 61b6eada0d246b8f343da95efdc87f67  libphobos/libdruntime/core/sys/solaris/sys/elf.d
! 61f95af40f0fc7bdd539dd639521b495  libphobos/libdruntime/core/sys/solaris/sys/elf_386.d
! 7f25338f3d930a3d260412d97117d0df  libphobos/libdruntime/core/sys/solaris/sys/elf_SPARC.d
  c3b9387d319e17b1825a2b306d1b524d  libphobos/libdruntime/core/sys/solaris/sys/elf_amd64.d
  0884e0943c7a980f29212b1293b12dba  libphobos/libdruntime/core/sys/solaris/sys/elf_notes.d
  eeffc8caf2a16c5f95ba55a3c48f70f1  libphobos/libdruntime/core/sys/solaris/sys/elftypes.d
--- 103115,103201 ----
  9de03b49678d737774525f946308c176  libphobos/libdruntime/core/sys/netbsd/sys/mman.d
  00fa230caafce571c5e5b9b1c0e66f55  libphobos/libdruntime/core/sys/netbsd/sys/sysctl.d
  c91b85e73f2ed19d2ab87faaa1954366  libphobos/libdruntime/core/sys/netbsd/time.d
! c7b4a367e75732d0bd109155097b4d01  libphobos/libdruntime/core/sys/openbsd/dlfcn.d
  76a7cedaf47c514815473a2e187a7c4d  libphobos/libdruntime/core/sys/openbsd/err.d
! a3a5e904d4c5c7ebb1ea955088e42c15  libphobos/libdruntime/core/sys/openbsd/execinfo.d
! 79a1fe62ab4709585b456f73ff271f31  libphobos/libdruntime/core/sys/openbsd/pthread_np.d
! d164e440f3d1a1253c38845bfffd62cd  libphobos/libdruntime/core/sys/openbsd/pwd.d
! e44c1bb0475bad210df34a6ac2f2b7c5  libphobos/libdruntime/core/sys/openbsd/stdlib.d
! a9eb1c1eaf5c0383b7eda373805c48a1  libphobos/libdruntime/core/sys/openbsd/string.d
  61119274dbe0da19bb7862b1d8e3be88  libphobos/libdruntime/core/sys/openbsd/sys/cdefs.d
  4f2b043926b16e1b37a2e25509085736  libphobos/libdruntime/core/sys/openbsd/sys/elf.d
! 0b71a0b7809a12e17f334ce2ae8c6732  libphobos/libdruntime/core/sys/openbsd/sys/elf32.d
! 44de53e0c71e5ab94373d783f7c62315  libphobos/libdruntime/core/sys/openbsd/sys/elf64.d
  dadfb12aa3ebcaf98bc06d53bec3b016  libphobos/libdruntime/core/sys/openbsd/sys/elf_common.d
  ed254802fe236c52abe7ec9ebf7f8f79  libphobos/libdruntime/core/sys/openbsd/sys/link_elf.d
! c3908fc79870408909773bdacf209951  libphobos/libdruntime/core/sys/openbsd/sys/mman.d
! b4bd052f0e8e57db0716f807263ad759  libphobos/libdruntime/core/sys/openbsd/sys/sysctl.d
  26fdce9d3769cf37bf38b5ada08836f3  libphobos/libdruntime/core/sys/openbsd/time.d
! 475e7db371c2520012c6b29906055ad7  libphobos/libdruntime/core/sys/openbsd/unistd.d
! dff5b3d448d47bc61be7e61d4c4c6535  libphobos/libdruntime/core/sys/posix/aio.d
! d2d580de88e21c5ff2e144828e88cc50  libphobos/libdruntime/core/sys/posix/arpa/inet.d
! fd11d976ba366a9c5e161cb2d5db8542  libphobos/libdruntime/core/sys/posix/config.d
! 98202cc896b9c40be409de7346d39098  libphobos/libdruntime/core/sys/posix/dirent.d
! cfcdef0b23bffbf52f445b7aa2a56bdb  libphobos/libdruntime/core/sys/posix/dlfcn.d
! 47fb0b45a6e5ea74342ab5924b8709a6  libphobos/libdruntime/core/sys/posix/fcntl.d
  7c2ed4684f1e1236c753e224d3861bc6  libphobos/libdruntime/core/sys/posix/grp.d
  78097ad54d7e30233bc2096505d9381f  libphobos/libdruntime/core/sys/posix/iconv.d
  5fde0ea877bd02237ae4c8bad758af1e  libphobos/libdruntime/core/sys/posix/inttypes.d
  c582dcc48c9dbc511dcbb250b6e8e0ff  libphobos/libdruntime/core/sys/posix/libgen.d
! 4e12dcddcaf5253ab081ea5e60bb61a7  libphobos/libdruntime/core/sys/posix/locale.d
  5cdd1d83f9dd28b654c12a503f0721bd  libphobos/libdruntime/core/sys/posix/mqueue.d
! c52e1b57a6c9a7e6c61030140d29fb1e  libphobos/libdruntime/core/sys/posix/net/if_.d
! 7fd6481e2a0bdbc488efad18f24a064d  libphobos/libdruntime/core/sys/posix/netdb.d
  352e112b95d9f5b485e02df80a159271  libphobos/libdruntime/core/sys/posix/netinet/in_.d
  e2bed0b739fc017fa2c967cab3adf1ab  libphobos/libdruntime/core/sys/posix/netinet/tcp.d
! 5f9fe4dab895abc901288461ba26bd92  libphobos/libdruntime/core/sys/posix/poll.d
  f018b3052e24a1c26e41901675990102  libphobos/libdruntime/core/sys/posix/pthread.d
  453c6c187ee2dc82d0fa5abc3504c0b1  libphobos/libdruntime/core/sys/posix/pwd.d
! d109055bc2aa13898d6b0589ce1b8400  libphobos/libdruntime/core/sys/posix/sched.d
! 71b41751c94288d45fe9230b3a7438c0  libphobos/libdruntime/core/sys/posix/semaphore.d
! 978a05563785ce5c3b38034e7d63cfb1  libphobos/libdruntime/core/sys/posix/setjmp.d
! fe74987b3fc4ddeca857ab247952efa8  libphobos/libdruntime/core/sys/posix/signal.d
! d0284e214eaee28922cafcf759ec0fbd  libphobos/libdruntime/core/sys/posix/spawn.d
! ce6e14eeb25bb2f98124ca8fa6cb3663  libphobos/libdruntime/core/sys/posix/stdc/time.d
! 7541cf235ea7c9276be6e22584b53ee1  libphobos/libdruntime/core/sys/posix/stdio.d
  11edef1239c75ff58562b90313319a04  libphobos/libdruntime/core/sys/posix/stdlib.d
! 0313c7a312035edfb406e3dabd37d3ac  libphobos/libdruntime/core/sys/posix/string.d
  cfe01b190b878b0e95fb9347033971dc  libphobos/libdruntime/core/sys/posix/strings.d
! 98f89d25671784d5f8e95eb21185d303  libphobos/libdruntime/core/sys/posix/sys/filio.d
! a044bc098ab89980bb29d43e3d3b4ca3  libphobos/libdruntime/core/sys/posix/sys/ioccom.d
! 09d67cdb713be00af1591c570fadca49  libphobos/libdruntime/core/sys/posix/sys/ioctl.d
! 6ffa72d6e8368d03ff701d7eadc671fb  libphobos/libdruntime/core/sys/posix/sys/ipc.d
! bf103db23a410d8acfcd3b309d5e658e  libphobos/libdruntime/core/sys/posix/sys/mman.d
  71e2800fd8795ce5238be51d015f215d  libphobos/libdruntime/core/sys/posix/sys/msg.d
! e1a4dc12c0e46333f1167039cc174b3e  libphobos/libdruntime/core/sys/posix/sys/resource.d
  920e611edb76252a28fadbc6f1f7290c  libphobos/libdruntime/core/sys/posix/sys/select.d
! 665dd7ab8abc0cb410ee83d10a7af54d  libphobos/libdruntime/core/sys/posix/sys/shm.d
! c5839f9a7e1deb9fe43675915f460a28  libphobos/libdruntime/core/sys/posix/sys/socket.d
! be0501a5e64e34bfd6eb23bb96e59480  libphobos/libdruntime/core/sys/posix/sys/stat.d
! 0cb4396498587e559fd547cf368a5018  libphobos/libdruntime/core/sys/posix/sys/statvfs.d
  f71ae7f996ce3771b140c9a921b5aeb9  libphobos/libdruntime/core/sys/posix/sys/time.d
! 470b765b77b45968b1ebd355690ea493  libphobos/libdruntime/core/sys/posix/sys/ttycom.d
! 8c4f06016383b4b17081fb199684e212  libphobos/libdruntime/core/sys/posix/sys/types.d
  2d6bebed89a89ff7ab8a98164586e3f8  libphobos/libdruntime/core/sys/posix/sys/uio.d
  052e161c5cb19aa20eb6573d04d35678  libphobos/libdruntime/core/sys/posix/sys/un.d
  9d80c5eb1f9e3c226152f4b1a775ade7  libphobos/libdruntime/core/sys/posix/sys/utsname.d
! 91ffccb094044117e85b3e0ec40bc3d1  libphobos/libdruntime/core/sys/posix/sys/wait.d
  8437ee40fa6b6f2f44bf7c68f5009ab3  libphobos/libdruntime/core/sys/posix/syslog.d
! 47e71f6392a58c71d9ccf1f2d8ce57ad  libphobos/libdruntime/core/sys/posix/termios.d
! 2b8fd3f5475ffbbbc0099e30b4500536  libphobos/libdruntime/core/sys/posix/time.d
! f5075a7451b8553ec5fdbc2307469cf8  libphobos/libdruntime/core/sys/posix/ucontext.d
  b170c2fa65d62140895035c27f858ff0  libphobos/libdruntime/core/sys/posix/unistd.d
  2df1796dfe2516e39808045b21b3ff8c  libphobos/libdruntime/core/sys/posix/utime.d
! 30a7c865e2541fe983de69db93f37601  libphobos/libdruntime/core/sys/solaris/dlfcn.d
  e24762f124741eb7164ac6d35f819119  libphobos/libdruntime/core/sys/solaris/elf.d
  6609181d8ebdbb548ac7d475d0b53e25  libphobos/libdruntime/core/sys/solaris/err.d
  d821485cf4fb84fc3a4823d17496c304  libphobos/libdruntime/core/sys/solaris/execinfo.d
  13168aebf00d1f79d79f7aa9a14ee45e  libphobos/libdruntime/core/sys/solaris/libelf.d
  b80defc2ca94dd32d65995270ef8aed4  libphobos/libdruntime/core/sys/solaris/link.d
  9ab55da380bb23d8586ee2d0026f2d88  libphobos/libdruntime/core/sys/solaris/stdlib.d
! c3db7c4e95d93801f0cd1cf84355bb35  libphobos/libdruntime/core/sys/solaris/sys/elf.d
! 5d49ba8540337b3091779630f6322638  libphobos/libdruntime/core/sys/solaris/sys/elf_386.d
! 546d1db9dd4a4d870ec967cc605fc9e7  libphobos/libdruntime/core/sys/solaris/sys/elf_SPARC.d
  c3b9387d319e17b1825a2b306d1b524d  libphobos/libdruntime/core/sys/solaris/sys/elf_amd64.d
  0884e0943c7a980f29212b1293b12dba  libphobos/libdruntime/core/sys/solaris/sys/elf_notes.d
  eeffc8caf2a16c5f95ba55a3c48f70f1  libphobos/libdruntime/core/sys/solaris/sys/elftypes.d
*************** b9faed4c0872089959f3d536c5ef4859  libpho
*** 96441,96786 ****
  ee0171b87244b69c4c653ae92f3ecdc3  libphobos/libdruntime/core/sys/solaris/sys/procset.d
  62c2f92b9a740d50758085899522502d  libphobos/libdruntime/core/sys/solaris/sys/types.d
  f3220636fa9a34351a43f51401f4186d  libphobos/libdruntime/core/sys/solaris/time.d
! e60ba1b5fbad2b45a6ead5bad484e550  libphobos/libdruntime/core/sys/windows/accctrl.d
! c158ff42f4f0eb9add373d2ffa6a171f  libphobos/libdruntime/core/sys/windows/aclapi.d
! 74ff7397965f83ace4a336c95411c51e  libphobos/libdruntime/core/sys/windows/aclui.d
! 2de19c2dc772f4ab59b9ff46da50589f  libphobos/libdruntime/core/sys/windows/basetsd.d
! 0c7ea73111f044ebba90bd13ede0e173  libphobos/libdruntime/core/sys/windows/basetyps.d
! 8ab3cf5d41de5eb9291b75ad64741d98  libphobos/libdruntime/core/sys/windows/cderr.d
! 106e46f3e0870524d208517f3c487e50  libphobos/libdruntime/core/sys/windows/cguid.d
  76bef2951a092c3c8357d154f511f7d6  libphobos/libdruntime/core/sys/windows/com.d
! b8a1593ba1d52da2ce8f1da485a6a90d  libphobos/libdruntime/core/sys/windows/comcat.d
! e8fb8ec4d3f85f31fcd7cd3dace6c237  libphobos/libdruntime/core/sys/windows/commctrl.d
! 1fe6fea72f7159d2591eb65f10ef09d6  libphobos/libdruntime/core/sys/windows/commdlg.d
! 9bcf0e605c73bd7256a44647d29ca972  libphobos/libdruntime/core/sys/windows/core.d
! 9e8be05cb7df74dff8d1e2a7c6077077  libphobos/libdruntime/core/sys/windows/cpl.d
! 8c99efa6d0dc4df6d1675006b1ea8c50  libphobos/libdruntime/core/sys/windows/cplext.d
! e55801c9457fa9c384dd940783ec1d8b  libphobos/libdruntime/core/sys/windows/custcntl.d
! 28ae9c29d5ed81f89c6de26951280a10  libphobos/libdruntime/core/sys/windows/dbghelp.d
  8cba1e0d4f91578ef2364a4888827226  libphobos/libdruntime/core/sys/windows/dbghelp_types.d
! 416c6790167d04b195ad2659edb9a48c  libphobos/libdruntime/core/sys/windows/dbt.d
! 4d3f13ec29be06ff5c1b03a1fb736d83  libphobos/libdruntime/core/sys/windows/dde.d
! cf43067723fa8e10d50b9573d9248af6  libphobos/libdruntime/core/sys/windows/ddeml.d
! b90666e0ce33d32ef93a3b74557474c8  libphobos/libdruntime/core/sys/windows/dhcpcsdk.d
! fe3cc14affda80417ee5ebb011ed77ae  libphobos/libdruntime/core/sys/windows/dlgs.d
! 48461edcf3b5f0046910c40e27e5f3ca  libphobos/libdruntime/core/sys/windows/dll.d
! 599667129a9fccaad408b7e80eb3de78  libphobos/libdruntime/core/sys/windows/docobj.d
! c6d513ec9c9ef2a48d657f1d4ca6e593  libphobos/libdruntime/core/sys/windows/errorrep.d
! 94e87d15366e92bdea6ef2bbdacbb993  libphobos/libdruntime/core/sys/windows/exdisp.d
! 9f3821ee16c7c0f6841bcd16db654226  libphobos/libdruntime/core/sys/windows/exdispid.d
! 5dcd2bc8b138be0ad88102d542602d51  libphobos/libdruntime/core/sys/windows/httpext.d
! 62fd7b950934b7aa3e5229e7b77bdcee  libphobos/libdruntime/core/sys/windows/idispids.d
! dbceb35681601fdb9455df0c10181988  libphobos/libdruntime/core/sys/windows/imagehlp.d
! cbd671394c28499999293ee71041f7da  libphobos/libdruntime/core/sys/windows/imm.d
! 9c375de14db8f808f13eaeb8f1ac1d08  libphobos/libdruntime/core/sys/windows/intshcut.d
! 47577573b9b6313b6c0c0abaf081988b  libphobos/libdruntime/core/sys/windows/ipexport.d
! 4f6274a5a48fa1187b047d72e4e70416  libphobos/libdruntime/core/sys/windows/iphlpapi.d
! 38c49ea9d35df883cba0e21646be27e9  libphobos/libdruntime/core/sys/windows/ipifcons.d
! a3262ebec262d4237681c3a13524348c  libphobos/libdruntime/core/sys/windows/iprtrmib.d
! eada8afcd4475b2e9aab5741f3aad725  libphobos/libdruntime/core/sys/windows/iptypes.d
! a37c1498fa989d3fb5d2b86964d01a50  libphobos/libdruntime/core/sys/windows/isguids.d
! 906312f4cf83638377b5351963995fa9  libphobos/libdruntime/core/sys/windows/lm.d
! 493639602b21da35477a40ec61c1552e  libphobos/libdruntime/core/sys/windows/lmaccess.d
! 66d0894420dc642ce72153af82679236  libphobos/libdruntime/core/sys/windows/lmalert.d
! b2bcd7942acd283bcdda94580c8b7cdb  libphobos/libdruntime/core/sys/windows/lmapibuf.d
! 0b59c401015b5531c9a80f564c365c9d  libphobos/libdruntime/core/sys/windows/lmat.d
! 00963138deec1f655aeb6243aed0f50a  libphobos/libdruntime/core/sys/windows/lmaudit.d
! 115b2b88f629468f026c1c5f87bfbe8c  libphobos/libdruntime/core/sys/windows/lmbrowsr.d
! 95a503c6be23f4cf380508f529c185cf  libphobos/libdruntime/core/sys/windows/lmchdev.d
! 54dcd6c18d843586a880a400e4ff5746  libphobos/libdruntime/core/sys/windows/lmconfig.d
! bf4d1baebe6a104d462b19843d7b5fa4  libphobos/libdruntime/core/sys/windows/lmcons.d
! 8f725c403cacc5b8d1d0d80583112588  libphobos/libdruntime/core/sys/windows/lmerr.d
! 83ec843f18885dfdc0c4ed5653d0c812  libphobos/libdruntime/core/sys/windows/lmerrlog.d
! 369978c6ae021429bf834cb329315d87  libphobos/libdruntime/core/sys/windows/lmmsg.d
! 6acd8eb9cf2e6195acedb677fbd8b974  libphobos/libdruntime/core/sys/windows/lmremutl.d
! a25fd9e141794b70cb04f64cdba47aab  libphobos/libdruntime/core/sys/windows/lmrepl.d
! 7edaa9a90a50484b62774984be03c722  libphobos/libdruntime/core/sys/windows/lmserver.d
! 07247c1a9c0a15a7af9d41d72123c382  libphobos/libdruntime/core/sys/windows/lmshare.d
! 7d593a4a0782846e8cb8f86bb892082c  libphobos/libdruntime/core/sys/windows/lmsname.d
! 15b5358cdf17034d2d3569577cae4f16  libphobos/libdruntime/core/sys/windows/lmstats.d
! b49ae5de02315bd5e425f675317d558a  libphobos/libdruntime/core/sys/windows/lmsvc.d
! 763b5699d40e0133b1d9790486575096  libphobos/libdruntime/core/sys/windows/lmuse.d
! 28d14d90a9460081e92f7084295ca390  libphobos/libdruntime/core/sys/windows/lmuseflg.d
! fba032824ff31f7fd1b779b20deca3c5  libphobos/libdruntime/core/sys/windows/lmwksta.d
! 4b6f4ad39f879985146c226e1edf91b3  libphobos/libdruntime/core/sys/windows/lzexpand.d
! 878b8303fd216c0112e4a665c57d58c0  libphobos/libdruntime/core/sys/windows/mapi.d
! ca6cf9f783bfa9e145e762147871e6ea  libphobos/libdruntime/core/sys/windows/mciavi.d
! 835f23a4c9c102cb74d0e84d4c329ff5  libphobos/libdruntime/core/sys/windows/mcx.d
! 5f4f87999a72b1fc41c568539f344415  libphobos/libdruntime/core/sys/windows/mgmtapi.d
! 26b6de7d78e946770d8afb8629f64777  libphobos/libdruntime/core/sys/windows/mmsystem.d
! 4036a7e0f6d72a2d0f1155472286d2c3  libphobos/libdruntime/core/sys/windows/msacm.d
! 79a3f4ea1653eeb862b7784b978bb207  libphobos/libdruntime/core/sys/windows/mshtml.d
! 373af9dcda49c0381586f6ec65a33ae6  libphobos/libdruntime/core/sys/windows/mswsock.d
! df173ade8257d396c02febe385d518b6  libphobos/libdruntime/core/sys/windows/nb30.d
! d25ba8587e58f0e96dba770247dca79b  libphobos/libdruntime/core/sys/windows/nddeapi.d
! b0affcb7330f10bf314c4a9997ab2bd1  libphobos/libdruntime/core/sys/windows/nspapi.d
! 2342a185e4238a54e763de0833b33f98  libphobos/libdruntime/core/sys/windows/ntdef.d
! eb0fd31ee4ad16a9fd69b22d66b0dac8  libphobos/libdruntime/core/sys/windows/ntdll.d
! 27fcc788fddef64bf1904685e546d568  libphobos/libdruntime/core/sys/windows/ntldap.d
! 2813a5d99ac7580e2064b6ee78a59568  libphobos/libdruntime/core/sys/windows/ntsecapi.d
! 3fa692a7e1c9591b9f4317839db0c1b7  libphobos/libdruntime/core/sys/windows/ntsecpkg.d
! 01f1dac5eae2337d0f5c3c84e076444e  libphobos/libdruntime/core/sys/windows/oaidl.d
! 42f6b17bea44954f8559025f0eec633d  libphobos/libdruntime/core/sys/windows/objbase.d
! 400a2701dd09b0ae3785f32a2a20bdd2  libphobos/libdruntime/core/sys/windows/objfwd.d
! 22fd5a0838e74215870ce7d1ff4979d2  libphobos/libdruntime/core/sys/windows/objidl.d
! 774048c8307cdbfe5a8bd486808d388d  libphobos/libdruntime/core/sys/windows/objsafe.d
! 5e75bb42fad5055fd1fb680f244ffd8e  libphobos/libdruntime/core/sys/windows/ocidl.d
! ebb1693b0ffb56e58f57331a7f65d1f1  libphobos/libdruntime/core/sys/windows/odbcinst.d
! 471881b1b36e9ae0b971d9c26af4776a  libphobos/libdruntime/core/sys/windows/ole.d
! 680eff4f2cce805e5ab8bc317ce3f002  libphobos/libdruntime/core/sys/windows/ole2.d
! c6c71c11b0bcfa7339473dd044bd15d4  libphobos/libdruntime/core/sys/windows/ole2ver.d
! 1a9f69fe60881a975f86934fce8d6e8b  libphobos/libdruntime/core/sys/windows/oleacc.d
! 643ae0d0439ecfabb44e3de47a3d5806  libphobos/libdruntime/core/sys/windows/oleauto.d
! f6a1546a4a38c09f27f7aef318e9915c  libphobos/libdruntime/core/sys/windows/olectl.d
! e72ecc6bf147449b0e681c6ad64a122d  libphobos/libdruntime/core/sys/windows/olectlid.d
! 61e8419892db64c602107d64b9485f49  libphobos/libdruntime/core/sys/windows/oledlg.d
! b89a6cac2b53c4f4938f7efca8b788f1  libphobos/libdruntime/core/sys/windows/oleidl.d
! b43671b2d6e1e874612f9f8be6a9462e  libphobos/libdruntime/core/sys/windows/pbt.d
! 8d52b0ea286320b82dfca47c98fb5795  libphobos/libdruntime/core/sys/windows/powrprof.d
! 16d29cb9889e9d4b5577e7909a7fae9a  libphobos/libdruntime/core/sys/windows/prsht.d
! 62daf71b1ccaee28f31fc5a4145d657e  libphobos/libdruntime/core/sys/windows/psapi.d
! 62aeb568f4301e8f01a0d4da4ec5cbf5  libphobos/libdruntime/core/sys/windows/rapi.d
! b5daf87e5e46bbb9b95935ee5420cedb  libphobos/libdruntime/core/sys/windows/ras.d
! 4a8b10315dba17f62c4bdf47120d720a  libphobos/libdruntime/core/sys/windows/rasdlg.d
! c35c3610ef8f118d77b0d774190e5954  libphobos/libdruntime/core/sys/windows/raserror.d
! c0bbfba568022b4422e1b94f4507794c  libphobos/libdruntime/core/sys/windows/rassapi.d
! 9c09e394032f099c47036d3f572f4ef0  libphobos/libdruntime/core/sys/windows/reason.d
! fea4e3459e1f8e5fb0acdb73d5b0433d  libphobos/libdruntime/core/sys/windows/regstr.d
! 11b3aab10ae9d21b5041585fdaabda0c  libphobos/libdruntime/core/sys/windows/richedit.d
! ce52bc0a798920138465d416bad50023  libphobos/libdruntime/core/sys/windows/richole.d
! 7ee34cc5279dfc6ffad216dacd11b7eb  libphobos/libdruntime/core/sys/windows/rpc.d
! 1e6e6a97f105d2404b06010277a32b8a  libphobos/libdruntime/core/sys/windows/rpcdce.d
! e5f8ed5d31722e4e2d2b571154b97936  libphobos/libdruntime/core/sys/windows/rpcdce2.d
! 9e6b2a24309e5e1c556156653b47df1d  libphobos/libdruntime/core/sys/windows/rpcdcep.d
! 05245fa8a1d1451b7d50c7eb3e152813  libphobos/libdruntime/core/sys/windows/rpcndr.d
! 13058673cfd91dd78b1b2b85e69f74e5  libphobos/libdruntime/core/sys/windows/rpcnsi.d
! 6ac497c9ccf65a0f7f5ac90e78433812  libphobos/libdruntime/core/sys/windows/rpcnsip.d
! cd3181cb55dee6037162a110c0598189  libphobos/libdruntime/core/sys/windows/rpcnterr.d
! 3d876681523e99c06b7d53372e061814  libphobos/libdruntime/core/sys/windows/schannel.d
! 43a6fe0904eadb137f289ac65dc2da29  libphobos/libdruntime/core/sys/windows/sdkddkver.d
! 1442256d523a52c55b6b40442519685e  libphobos/libdruntime/core/sys/windows/secext.d
! 4915cba40db9f33552dd7706eebc17e1  libphobos/libdruntime/core/sys/windows/security.d
! 0eb410b3790b48e03609bb95c11fb189  libphobos/libdruntime/core/sys/windows/servprov.d
! bd46957e8c9a4322cfc9ae1b41cbde70  libphobos/libdruntime/core/sys/windows/setupapi.d
! 0cf5294512c7d0feb19ceb1463ae494e  libphobos/libdruntime/core/sys/windows/shellapi.d
! fa27de1603bc83ad2936e0cd1f2ff7e9  libphobos/libdruntime/core/sys/windows/shldisp.d
! 120cdb222080e5ed979298d98f62a8d2  libphobos/libdruntime/core/sys/windows/shlguid.d
! 59666bfbe6ebda2672079aec76cf7415  libphobos/libdruntime/core/sys/windows/shlobj.d
! 8d1ca51e3757d8fd1dc3543cd4bad4f6  libphobos/libdruntime/core/sys/windows/shlwapi.d
! c06d30b4138e251eb80270d7adf3b7dd  libphobos/libdruntime/core/sys/windows/snmp.d
! aa8243b901e194899e739be4ed581765  libphobos/libdruntime/core/sys/windows/sql.d
! fcf4c97e6513ec6db1f4658c4b768ab7  libphobos/libdruntime/core/sys/windows/sqlext.d
! e009969d2f6d6d230008e5a1f7328c96  libphobos/libdruntime/core/sys/windows/sqltypes.d
! 0d21c1a4dcc25b49189166ec66f6405b  libphobos/libdruntime/core/sys/windows/sqlucode.d
! 0fa45f1564447bf49c3badb1f0cba2b7  libphobos/libdruntime/core/sys/windows/sspi.d
  fe2b1b324ddc31d4721bf8f161a1ce05  libphobos/libdruntime/core/sys/windows/stacktrace.d
! da80ac2bd36e867daaa4c860e8b5b507  libphobos/libdruntime/core/sys/windows/stat.d
! 7ea919cf11baf0b21a655c60a96c1bf1  libphobos/libdruntime/core/sys/windows/stdc/malloc.d
  33fcc28066c3bb9129080337483b0f97  libphobos/libdruntime/core/sys/windows/stdc/time.d
! 7b404900e92c9e6fd30778373c1557eb  libphobos/libdruntime/core/sys/windows/subauth.d
  e7e393070a6f9ebc51696a32de60f6b9  libphobos/libdruntime/core/sys/windows/threadaux.d
! 48620a58eb7160ce7051e046466f4fd5  libphobos/libdruntime/core/sys/windows/tlhelp32.d
! a028aedb3483e9a767110f0306ea51a9  libphobos/libdruntime/core/sys/windows/tmschema.d
! 347e8ef196427622cb729d6e45f566b9  libphobos/libdruntime/core/sys/windows/unknwn.d
  ce81808a97b10b192404ef60d9c75dbe  libphobos/libdruntime/core/sys/windows/uuid.d
! 03faf8d65d7a8a81e6a9f00bd421e9ee  libphobos/libdruntime/core/sys/windows/vfw.d
! 9f93ac18d6448a519ea50cb57f714922  libphobos/libdruntime/core/sys/windows/w32api.d
! c9411fa956bcbe61bfa7a1bce1d40fbb  libphobos/libdruntime/core/sys/windows/winbase.d
! ef3efdcdc68c749ece0349be6a119d3a  libphobos/libdruntime/core/sys/windows/winber.d
! b43233820d08e93bcd4a8655c4c4aa2e  libphobos/libdruntime/core/sys/windows/wincon.d
! 5d7777681139515ab078d8a4e60c300a  libphobos/libdruntime/core/sys/windows/wincrypt.d
! f6ffc7c1a7ed3906bd2cc19692f68d9c  libphobos/libdruntime/core/sys/windows/windef.d
! b38eaec7db540b9b15906ca44b7f1a6c  libphobos/libdruntime/core/sys/windows/windows.d
! be4861a5332104cdcb9001be3453e5a7  libphobos/libdruntime/core/sys/windows/winerror.d
! 95c7867dfe940f9a82956ce88cefc916  libphobos/libdruntime/core/sys/windows/wingdi.d
! 21329a6c9bef96038b45c20171e0abdd  libphobos/libdruntime/core/sys/windows/winhttp.d
! 6184889de5f294499addce7f7372ca62  libphobos/libdruntime/core/sys/windows/wininet.d
! bc2e3aaebf590cd6e58c68d9837d9cbb  libphobos/libdruntime/core/sys/windows/winioctl.d
! 25a0bded049a78fc140fdc40e5c888b3  libphobos/libdruntime/core/sys/windows/winldap.d
! 2cd0d40500f11c538843688d31a97520  libphobos/libdruntime/core/sys/windows/winnetwk.d
! 739f94fe333acfa41fa4ec26382b0221  libphobos/libdruntime/core/sys/windows/winnls.d
! b66fb78b8524d3a11b5c9fa70deae7bc  libphobos/libdruntime/core/sys/windows/winnt.d
! 647409c56727f538c8a553ec2bbe7c7d  libphobos/libdruntime/core/sys/windows/winperf.d
! 01d4f9684ab288599c1851abd254ff18  libphobos/libdruntime/core/sys/windows/winreg.d
  58898fbc427949691097ea2bc559e461  libphobos/libdruntime/core/sys/windows/winsock2.d
! d6e08a59f40a5095d1e68af93fb84fb4  libphobos/libdruntime/core/sys/windows/winspool.d
! 6ef834a3781977793bdc4af1b38f3c85  libphobos/libdruntime/core/sys/windows/winsvc.d
! 298f3157a21f756bdc6c6511e11001f7  libphobos/libdruntime/core/sys/windows/winuser.d
! a6887674d81fb7f6e0b970616305f770  libphobos/libdruntime/core/sys/windows/winver.d
! 3fc2f9ae527422e5d960625685f28d13  libphobos/libdruntime/core/sys/windows/wtsapi32.d
! 431b79a9c95d40f30daad89d9ed98726  libphobos/libdruntime/core/sys/windows/wtypes.d
! b889a41034dc19351fd74b8d7199c6f1  libphobos/libdruntime/core/thread/context.d
! f199f89af859358f15bae7a290ba9f13  libphobos/libdruntime/core/thread/fiber.d
! 765b5cbcf2313a0962e9dea47253fce0  libphobos/libdruntime/core/thread/osthread.d
  9b6ee3a7c47a4d264ce79b0c16495747  libphobos/libdruntime/core/thread/package.d
! ca894a1fd05d407c5cbf06f783910779  libphobos/libdruntime/core/thread/threadbase.d
  c1ed5b58527141cfd45c44e71ae05ec8  libphobos/libdruntime/core/thread/threadgroup.d
  12e24b84e408496a6d50f1b25ac7faed  libphobos/libdruntime/core/thread/types.d
! 2adf057be60160bf656c8cc794855f90  libphobos/libdruntime/core/time.d
  ba840dec340cd1fed28cbc0a57224321  libphobos/libdruntime/core/vararg.d
  4cf99596b90593fec63debe10874dfdb  libphobos/libdruntime/core/volatile.d
! 6f76ee818b90e0f22edc13f0fb8a42d4  libphobos/libdruntime/gc/bits.d
! 54d72201d48183b39118594ea1640215  libphobos/libdruntime/gc/config.d
! 59bcd185be418dd333b4b8fecbb8dbd1  libphobos/libdruntime/gc/gcinterface.d
! 8d1b6f7e0ee968b3576749cff4b046c6  libphobos/libdruntime/gc/impl/conservative/gc.d
! b33daac4c8f5cd557ce1498686f0b4a9  libphobos/libdruntime/gc/impl/manual/gc.d
! f935018d2e1b9673ff79cd99976f9b44  libphobos/libdruntime/gc/os.d
! 2aa01ae9368c8cb0b3a7199e0d0463f0  libphobos/libdruntime/gc/pooltable.d
! 5e7be9fda7539a63e55b53ca6e89a41f  libphobos/libdruntime/gc/proxy.d
! f254748ad10d3df614cb9e26c72f088d  libphobos/libdruntime/gcc/attribute.d
! 9ce27a7c239a646ec1cef7caffc32b46  libphobos/libdruntime/gcc/attributes.d
! 1919e6f2b1cf995ea1d672a1e2d29775  libphobos/libdruntime/gcc/backtrace.d
! a29875e6acf5d065eab3c5037a3b3e8c  libphobos/libdruntime/gcc/builtins.d
! ba6c574496316ee8452cb145f4f816fb  libphobos/libdruntime/gcc/config.d.in
! d1bc6dd2550ef17d320b1583376b8b36  libphobos/libdruntime/gcc/deh.d
! bffb543e12c3ce864f73bb97ca4107ae  libphobos/libdruntime/gcc/drtstuff.c
! 4ed9b6c174a2679960bcb7ec76b3ec47  libphobos/libdruntime/gcc/emutls.d
! 9a777f758428471cbf8230c1c999b6df  libphobos/libdruntime/gcc/gthread.d
! 952bb8e2b4c008fd81f8acb0f0c972b9  libphobos/libdruntime/gcc/libbacktrace.d.in
! 8cf9845da9c1aedb6ce9878ed08c9df8  libphobos/libdruntime/gcc/sections/common.d
! dc4de3ad4cf18c1a624aa3aac3edbb8d  libphobos/libdruntime/gcc/sections/elf.d
! a90a63ebd63cdf43a58084f6dfa08080  libphobos/libdruntime/gcc/sections/macho.d
! 04352ae20ae0f414115cecad44305ed2  libphobos/libdruntime/gcc/sections/package.d
! d5e63a537336c57c3de8697fc334d37b  libphobos/libdruntime/gcc/sections/pecoff.d
! e3859370c796afb93733e146dc19ea70  libphobos/libdruntime/gcc/unwind/arm.d
! e9f9b70dcc86d63920bac973ef5f9fc0  libphobos/libdruntime/gcc/unwind/arm_common.d
! 50e5fecb9286822a640e4145c21d7807  libphobos/libdruntime/gcc/unwind/c6x.d
! c9ece913a80fb2002e7e45b3c7d12cd8  libphobos/libdruntime/gcc/unwind/generic.d
! ae8fde642e27c32d71fbe494e7033cf6  libphobos/libdruntime/gcc/unwind/package.d
! 883e374c29aa5c26149e82cca526b7e4  libphobos/libdruntime/gcc/unwind/pe.d
! a3c7fae6372b9dfd9fcc3bf208e19d61  libphobos/libdruntime/object.d
! 2339759e263b9ee6cb54007a2f65621f  libphobos/libdruntime/rt/aApply.d
! 7bae7a71451d0c1c4887017cb1444224  libphobos/libdruntime/rt/aApplyR.d
! 4c2319a5c816f32f16e456ebfb275025  libphobos/libdruntime/rt/aaA.d
! bf2d0c5ee588f20591feb760d1be062b  libphobos/libdruntime/rt/adi.d
! f936df09728d8c3159d0072b320e4394  libphobos/libdruntime/rt/arrayassign.d
! 10987733a1727eee2dd196de6ec57cff  libphobos/libdruntime/rt/arraycast.d
! 483d28e61a9c8d210a65dcbe60f0966d  libphobos/libdruntime/rt/arraycat.d
! f151c72274ebba5d0c7e154de741bc13  libphobos/libdruntime/rt/cast_.d
! 0ad55700a19e5572d0c3f30f18d1a87f  libphobos/libdruntime/rt/config.d
! 146496a6e27ce8ade6fa851733e22127  libphobos/libdruntime/rt/critical_.d
! 1b88256983be275224fce2f52916777e  libphobos/libdruntime/rt/deh.d
! 9e735b8192cebcd1b070e06c3a3d5306  libphobos/libdruntime/rt/dmain2.d
! 4fbc11ce97f57dee76d205b024119fd0  libphobos/libdruntime/rt/dylib_fixes.c
! e617634e193d1a564871af1b4ec12608  libphobos/libdruntime/rt/invariant.d
! 4986aec9888f2f85b3c667d87cf5a1d5  libphobos/libdruntime/rt/lifetime.d
! 189f5d4e3c91aad753ebab4f8e9326e7  libphobos/libdruntime/rt/memory.d
! ffe683bd3698fcf91c1540cec5729b6e  libphobos/libdruntime/rt/minfo.d
! a205d23d1d543ad22c2d36a7997f7fed  libphobos/libdruntime/rt/monitor_.d
! 4db7e4d3e4deb583457c38fc0b1a31fe  libphobos/libdruntime/rt/obj.d
! 0503266dd47dfdb53c6fc6e8956a48cf  libphobos/libdruntime/rt/qsort.d
! 1af010948b5366c59d84460f6f4948ba  libphobos/libdruntime/rt/sections.d
! 6939b735af708f1e0f40865d462e3f8b  libphobos/libdruntime/rt/switch_.d
! f034f9b404d470e3ab8714d8280b9d9f  libphobos/libdruntime/rt/tlsgc.d
! f69875190bb511b8b4c65781b727e2b3  libphobos/libdruntime/rt/util/array.d
! 757864d7635457a26314632dee8a02f7  libphobos/libdruntime/rt/util/container/array.d
! 109e2c9880c4070b4bd43b308b4acc4b  libphobos/libdruntime/rt/util/container/common.d
! cb673fe348c18d72ce4a2757adfc228b  libphobos/libdruntime/rt/util/container/hashtab.d
! 877344d9958d333ea890d5138ef045aa  libphobos/libdruntime/rt/util/container/treap.d
! 0024b82d84229e7bf6bac4ef0dcfe9c7  libphobos/libdruntime/rt/util/random.d
! 5acc985ba4c4fe58afd6366c7ed8dfc8  libphobos/libdruntime/rt/util/typeinfo.d
! b99dcde4a59a7d6102c8ee790ca070ac  libphobos/libdruntime/rt/util/utf.d
! 054c5512c17b9e4cee9d7b7b617d8b21  libphobos/m4/autoconf.m4
  cbef578492ab132e253c07ad83e6ee8a  libphobos/m4/druntime.m4
  fbffedeb7e8a911ebb298bdff921256a  libphobos/m4/druntime/cpu.m4
  82b8f67e7ad56ad32591fd6b000fca98  libphobos/m4/druntime/libraries.m4
! 4ee961ccd0e2772af6fb86d6b3c412d6  libphobos/m4/druntime/os.m4
! 5569bee9140b0a0f5701b0260a254296  libphobos/m4/gcc_support.m4
  c49ab40607849fa623787878420e7207  libphobos/m4/gdc.m4
  458abf211dc60540bf28a9257d4bd4e5  libphobos/m4/libtool.m4
  e4224ccaecb14d942c71d31bef20d78c  libphobos/src/LICENSE_1_0.txt
! 2b7cdc36f40f01119007f3ee872eafac  libphobos/src/MERGE
! 6114be53c421dfdca3e2a1f5229422dc  libphobos/src/Makefile.am
! 8c15d1b15bd23b969c26b385859a4c81  libphobos/src/Makefile.in
  ff30fe7275b03f69e2a7796e47d142e8  libphobos/src/drtstuff.spec
! 97eb1f8362eca17ed08cc593df09b125  libphobos/src/etc/c/curl.d
! a19ea89a62a29ab1731f633de9096dc5  libphobos/src/etc/c/sqlite3.d
! 8ad6dd83bb164a8a685925970f8adff5  libphobos/src/etc/c/zlib.d
! bea08d206672098f5b66b07740dbb497  libphobos/src/index.d
  3a1ad66c3c47609c90c1f4d9cf8ddca2  libphobos/src/libgphobos.spec.in
! 69b5f280c2ba8060530461cb88c3a235  libphobos/src/std/algorithm/comparison.d
! 1f42972eaccf7f667e216e0e3f4b4585  libphobos/src/std/algorithm/internal.d
! 2f7e8806821cb1d624019faf20790446  libphobos/src/std/algorithm/iteration.d
! c9df126fd96c686e5df36b73634f325c  libphobos/src/std/algorithm/mutation.d
! d0af10a29dfafad75ab5c5e0c5e0884d  libphobos/src/std/algorithm/package.d
! f918ff65686c3aef055494c94d2cbe22  libphobos/src/std/algorithm/searching.d
! 98ef6e3bab6054ad1d63925fde0f5e13  libphobos/src/std/algorithm/setops.d
! 24af0fa9b2d7e8792742d122ccdda15b  libphobos/src/std/algorithm/sorting.d
! 89778338c1b9f4097e75cf8a0129f8cf  libphobos/src/std/array.d
! 2dd755e5dce60fcb4f7ef225d075d0ba  libphobos/src/std/ascii.d
! dd05c9b26bc4c8fea27c29375fb19bce  libphobos/src/std/base64.d
! 2e1b74bd6f1caaa09fc7b0815300f93e  libphobos/src/std/bigint.d
! c7d8dbb241e01e5455a912f11ff68b83  libphobos/src/std/bitmanip.d
! 650a2cffce3d7f24c75c74f88094e60b  libphobos/src/std/compiler.d
! f4412f413d3e5a859b4c9d0fa5cdf5c0  libphobos/src/std/complex.d
! e7c7c3c72593bf413bdd6cf318a0ec5e  libphobos/src/std/concurrency.d
! efefaf636ac9c2700e0236e905fd6a66  libphobos/src/std/container/array.d
! 36afdfdd90a59191e14f28d4707f3dc4  libphobos/src/std/container/binaryheap.d
! 37d8ece674f85aa09238e37202cb9051  libphobos/src/std/container/dlist.d
! ddad07ebe46fb30a7bc04dacf7bcb95d  libphobos/src/std/container/package.d
! 6b16380ed49c116bddb3ed6e07117350  libphobos/src/std/container/rbtree.d
! 012132aa38bffc0bda89172cf79b83ac  libphobos/src/std/container/slist.d
! e782ada904d666a60876d579a3e968b4  libphobos/src/std/container/util.d
! 5704d8083d5bd5fd677448c8af0a0a65  libphobos/src/std/conv.d
! 854792846bec69d0162f4541a2d790f9  libphobos/src/std/csv.d
! 2d4609b176df3fa82a934ba209ae8a0b  libphobos/src/std/datetime/date.d
! facdd33ec15bb454b70f1fb6f2085b78  libphobos/src/std/datetime/interval.d
! 78730a0ec629f956f20bb731e03e6ab2  libphobos/src/std/datetime/package.d
! a9b9e495e47d86cdc0718c4b8cc1600c  libphobos/src/std/datetime/stopwatch.d
! 93988329919ee7fd12cb90e95478944d  libphobos/src/std/datetime/systime.d
! 3dc36925a727161d1d20d58070d928d1  libphobos/src/std/datetime/timezone.d
! d8b6962911e8b75d349da26658d8b57a  libphobos/src/std/demangle.d
! 77339e6de1fc6d9273dc43f384f456e1  libphobos/src/std/digest/crc.d
! 46da8f96e31725d98662f6c7014b7354  libphobos/src/std/digest/digest.d
! a2a3eb71c004efc75dcd31e564090bb4  libphobos/src/std/digest/hmac.d
! 49426e948856a9e3e20adbea557fbb60  libphobos/src/std/digest/md.d
! 4c8093d46f30c0ecccfa54ba1fb85563  libphobos/src/std/digest/murmurhash.d
! 05ae411a1ca9046fc04cb493d904ba10  libphobos/src/std/digest/package.d
! 64f861b7bc3c68a5d37183fb631b1ce4  libphobos/src/std/digest/ripemd.d
! db4bc8a27e488683760a1d60913bf1e1  libphobos/src/std/digest/sha.d
! 0b8d0d2ad0c8bc98be4121f8fbf4cfe9  libphobos/src/std/encoding.d
! ec152502cb3ce282f7b74bb2d525dd11  libphobos/src/std/exception.d
! 07361a6b930672629c60fc313827f6c7  libphobos/src/std/experimental/allocator/building_blocks/affix_allocator.d
! a1abaa55e33b599a4cf0c8f7d3824194  libphobos/src/std/experimental/allocator/building_blocks/allocator_list.d
! b1676a1df71e77fa9f6188d999132348  libphobos/src/std/experimental/allocator/building_blocks/bitmapped_block.d
! 29cecd8ae30899bddf40cb859893d565  libphobos/src/std/experimental/allocator/building_blocks/bucketizer.d
! dfc19eabde984f92952cef4aa53f2e8a  libphobos/src/std/experimental/allocator/building_blocks/fallback_allocator.d
! 559d21816900e0e5f10c78b3a2f73099  libphobos/src/std/experimental/allocator/building_blocks/free_list.d
! 230b91c34238598b00ee104a04cb751a  libphobos/src/std/experimental/allocator/building_blocks/free_tree.d
! 08da4656323bbdf889ddad553a341139  libphobos/src/std/experimental/allocator/building_blocks/kernighan_ritchie.d
! bd256f7962ef397981f5f90de59c52dd  libphobos/src/std/experimental/allocator/building_blocks/null_allocator.d
! 518c8d4d74b42f38d4c5f6895b243fcf  libphobos/src/std/experimental/allocator/building_blocks/package.d
! d9668ecbba55bd17ce9296662a29e88f  libphobos/src/std/experimental/allocator/building_blocks/quantizer.d
! 2adb3dae5ebc282dc6e3e3fad09874f0  libphobos/src/std/experimental/allocator/building_blocks/region.d
! ade382f0228d590696e1e1730c23dcc4  libphobos/src/std/experimental/allocator/building_blocks/scoped_allocator.d
! ed4b6ca271c719393e3d32f95bf98d09  libphobos/src/std/experimental/allocator/building_blocks/segregator.d
! e02ae51df2e72057c7be83a876850e01  libphobos/src/std/experimental/allocator/building_blocks/stats_collector.d
! cf920ce550d5a446019208ffd4586fc0  libphobos/src/std/experimental/allocator/common.d
! f8489c053be22fef99fa0e956069cdbf  libphobos/src/std/experimental/allocator/gc_allocator.d
! 3104dc6db8a51151c8bcb99942e18ae0  libphobos/src/std/experimental/allocator/mallocator.d
! 94fca816b1a2d7ed566e18b1a62c1cf0  libphobos/src/std/experimental/allocator/mmap_allocator.d
! 8590746fbf0c31d80c991fa43fc62723  libphobos/src/std/experimental/allocator/package.d
! 8c297aaae9395d04d6b0a4291608e578  libphobos/src/std/experimental/allocator/showcase.d
! 2c77ac07c57f268607b7c4722668dfd8  libphobos/src/std/experimental/allocator/typed.d
! ab89728697de6aa77dd0fd009e7b4e2c  libphobos/src/std/experimental/checkedint.d
! 81c45a5b96126468ad2b7230bd2031c1  libphobos/src/std/experimental/logger/core.d
! fb93cb9970cc8437579c2d36ffe210cc  libphobos/src/std/experimental/logger/filelogger.d
! 8ffbef37f72cdcaffa8370e932827a62  libphobos/src/std/experimental/logger/multilogger.d
! 0e25692d617d83b6135ad7cf96cba552  libphobos/src/std/experimental/logger/nulllogger.d
! 8990e49eb8e32ce16d9ad60a59d2f0f8  libphobos/src/std/experimental/logger/package.d
  768b30d13593aba9e2715a7d868d763e  libphobos/src/std/experimental/note.md
! fca340b51411154e910811dbec4ad528  libphobos/src/std/experimental/typecons.d
! 8a70f0774df0a5ff1569b429efeb180f  libphobos/src/std/file.d
! a2273330503c3be223468f79cfac2603  libphobos/src/std/format.d
! a9bcbfe8b80cf74f958269311360e8a9  libphobos/src/std/functional.d
! cba82f262d27ecd762bade9ceb5641df  libphobos/src/std/getopt.d
! 0e73cb6827cf20df80c4dbda34e548c6  libphobos/src/std/internal/cstring.d
! f4d2a4f227d72d6aaae7253ec7deca77  libphobos/src/std/internal/math/biguintcore.d
! 1573927ce5c1c799a6a3b9687b60f97b  libphobos/src/std/internal/math/biguintnoasm.d
! 2f88d75d8626b0556660186e9e589e3d  libphobos/src/std/internal/math/errorfunction.d
! 3ee93003bf8edd81e0a57973faa63456  libphobos/src/std/internal/math/gammafunction.d
! 58e2abb18da0d53741e22e3bf5e1285a  libphobos/src/std/internal/scopebuffer.d
! f36ecd6944cbf2a1b92c449a33839d11  libphobos/src/std/internal/test/dummyrange.d
  8c74ab50895aaf9b04b114888ade41d8  libphobos/src/std/internal/test/range.d
  9d403089f5dfdab0c5fd3b765e0e5e07  libphobos/src/std/internal/test/uda.d
  687424bb0829cde118f2ccf009041cb6  libphobos/src/std/internal/unicode_comp.d
--- 103204,103544 ----
  ee0171b87244b69c4c653ae92f3ecdc3  libphobos/libdruntime/core/sys/solaris/sys/procset.d
  62c2f92b9a740d50758085899522502d  libphobos/libdruntime/core/sys/solaris/sys/types.d
  f3220636fa9a34351a43f51401f4186d  libphobos/libdruntime/core/sys/solaris/time.d
! 808bc3a894b23f128a067e177eb6ca6c  libphobos/libdruntime/core/sys/windows/accctrl.d
! 151e5ba9d91712b72628d18e54c9998d  libphobos/libdruntime/core/sys/windows/aclapi.d
! 29e20fb5eeaa05b57ed29baea8781346  libphobos/libdruntime/core/sys/windows/aclui.d
! 146ed1ee14179ec5cf0c726c82125998  libphobos/libdruntime/core/sys/windows/basetsd.d
! 4c02d659cd57f85f360517e218a6c914  libphobos/libdruntime/core/sys/windows/basetyps.d
! f66a616c8baaf64c29936cd3048d19e6  libphobos/libdruntime/core/sys/windows/cderr.d
! 12902fe04a0fa0ff16f1b161d543b8a1  libphobos/libdruntime/core/sys/windows/cguid.d
  76bef2951a092c3c8357d154f511f7d6  libphobos/libdruntime/core/sys/windows/com.d
! 00498300c262c4ceadf89d0935b8a938  libphobos/libdruntime/core/sys/windows/comcat.d
! 622a690fb04316d2a3f4f8d86994ce88  libphobos/libdruntime/core/sys/windows/commctrl.d
! 83c5d2a3950691d3654234e46f1162e7  libphobos/libdruntime/core/sys/windows/commdlg.d
! bf3823be2764fc604e8c83099bd0aa17  libphobos/libdruntime/core/sys/windows/core.d
! df17db5eb7c80b7490d6a14fb9f80cb3  libphobos/libdruntime/core/sys/windows/cpl.d
! 6b3f1d204af577016f8b018b87e05240  libphobos/libdruntime/core/sys/windows/cplext.d
! 617edb3cf4c35f1055c617b872227108  libphobos/libdruntime/core/sys/windows/custcntl.d
! 2fefa13da27ec9e41a963fae8978afa9  libphobos/libdruntime/core/sys/windows/dbghelp.d
  8cba1e0d4f91578ef2364a4888827226  libphobos/libdruntime/core/sys/windows/dbghelp_types.d
! e7f7e42fdee549a56be94902151e47d6  libphobos/libdruntime/core/sys/windows/dbt.d
! 37a1fb068305a62b9c66df98781218f4  libphobos/libdruntime/core/sys/windows/dde.d
! fe15c852c0c7a10ea6d2833505584b67  libphobos/libdruntime/core/sys/windows/ddeml.d
! 70746c5e5b147656e175f05355c7982b  libphobos/libdruntime/core/sys/windows/dhcpcsdk.d
! 6506f0b30bb19c98c056a0c62697fdb6  libphobos/libdruntime/core/sys/windows/dlgs.d
! 404f647595bc029816b13355c127c38b  libphobos/libdruntime/core/sys/windows/dll.d
! a13bdf38ebe3de9554aee2155ae12616  libphobos/libdruntime/core/sys/windows/docobj.d
! 9bca48c59fb5b059d2996d1126ee8464  libphobos/libdruntime/core/sys/windows/errorrep.d
! f44f2732a8930a345732ff9a0b1493b0  libphobos/libdruntime/core/sys/windows/exdisp.d
! 21344ae84f3cfdcad624405fd4f21b8b  libphobos/libdruntime/core/sys/windows/exdispid.d
! 122bbb052c73613abea20b303f8b6ceb  libphobos/libdruntime/core/sys/windows/httpext.d
! 7753f59cbc132e8a4800c4fc3741ec02  libphobos/libdruntime/core/sys/windows/idispids.d
! d4560e2819944dd4c5a60c02cdc08ba5  libphobos/libdruntime/core/sys/windows/imagehlp.d
! 3ed036c15c08b64145ca5a8ccc7fb0d4  libphobos/libdruntime/core/sys/windows/imm.d
! c2639eba9c9089ceb381771790e7bf26  libphobos/libdruntime/core/sys/windows/intshcut.d
! ac534f781dcf76e028ad27f1528cf89a  libphobos/libdruntime/core/sys/windows/ipexport.d
! dc802d3452377a6b88993766ef9776d4  libphobos/libdruntime/core/sys/windows/iphlpapi.d
! 4a361a77b16ca812d5966b8fe5263c1d  libphobos/libdruntime/core/sys/windows/ipifcons.d
! 78b566b86a7049c78670bab480910a5a  libphobos/libdruntime/core/sys/windows/iprtrmib.d
! d059a7e960da041f5ebb2ec690a7e7e2  libphobos/libdruntime/core/sys/windows/iptypes.d
! 3cb08ac571b1a256214aabdbc13d2652  libphobos/libdruntime/core/sys/windows/isguids.d
! 922979b5f58c38b51bc0d5c2ecd24938  libphobos/libdruntime/core/sys/windows/lm.d
! 0b104b3847649e322fdb9fe0ba559e57  libphobos/libdruntime/core/sys/windows/lmaccess.d
! 7439bc81efd9941de0ab33db3d2294cc  libphobos/libdruntime/core/sys/windows/lmalert.d
! 0dd23d8078b94a75924984e1e5768732  libphobos/libdruntime/core/sys/windows/lmapibuf.d
! a5d612f7bc3df0b78b45a67c18eaca93  libphobos/libdruntime/core/sys/windows/lmat.d
! 8435d939538280707ad01a653f53dd3e  libphobos/libdruntime/core/sys/windows/lmaudit.d
! b602f201f692e96e95fe540a0fc27255  libphobos/libdruntime/core/sys/windows/lmbrowsr.d
! 937408cb87fc7f5b696adffb1196f4ca  libphobos/libdruntime/core/sys/windows/lmchdev.d
! ebf86bf2bb28a864f110cdc3a1bbe73f  libphobos/libdruntime/core/sys/windows/lmconfig.d
! 4d2f5b0f1d449079f9fee12c3d16e922  libphobos/libdruntime/core/sys/windows/lmcons.d
! 2fb03122a07ee35724f35d7be802b5b2  libphobos/libdruntime/core/sys/windows/lmerr.d
! ff2eb004806cc98d2df8099e1ce27755  libphobos/libdruntime/core/sys/windows/lmerrlog.d
! 46c567cdd1c12be842c23546c955c212  libphobos/libdruntime/core/sys/windows/lmmsg.d
! bdf0b485c83f3731455b4eabac272899  libphobos/libdruntime/core/sys/windows/lmremutl.d
! cf42c487ec64f310c4ac5b7f17e2177e  libphobos/libdruntime/core/sys/windows/lmrepl.d
! 8c09698cf9ca3bdaff13f4caefd6e15f  libphobos/libdruntime/core/sys/windows/lmserver.d
! 88cc920e9a2f1fefa06c75d8246b0583  libphobos/libdruntime/core/sys/windows/lmshare.d
! d027c4af37e8c12d04a1715366ccdc83  libphobos/libdruntime/core/sys/windows/lmsname.d
! 412f6c37b95f96955edf8c914f55e96e  libphobos/libdruntime/core/sys/windows/lmstats.d
! b20537a3ea8fcdc8964054cd4d873943  libphobos/libdruntime/core/sys/windows/lmsvc.d
! d50c55420d146dcadf38831b4fa927ab  libphobos/libdruntime/core/sys/windows/lmuse.d
! 3e13960adb39f79707752dc97f60561c  libphobos/libdruntime/core/sys/windows/lmuseflg.d
! e9f010e929ed07ba22d2e81b961cb390  libphobos/libdruntime/core/sys/windows/lmwksta.d
! 6de49c0025143388de940c9e9fa1ae57  libphobos/libdruntime/core/sys/windows/lzexpand.d
! 83f824c5d5fa123dbc34469a730fe902  libphobos/libdruntime/core/sys/windows/mapi.d
! 5d46c44f541d116eaa7c93fc80e133df  libphobos/libdruntime/core/sys/windows/mciavi.d
! 4a8ea97fc482228f528f6dcf9c377a21  libphobos/libdruntime/core/sys/windows/mcx.d
! 7fe9440c7a284de9254ad73e70f763a3  libphobos/libdruntime/core/sys/windows/mgmtapi.d
! 559684c9014d05477bde270c5d2bf0ef  libphobos/libdruntime/core/sys/windows/mmsystem.d
! ff901131d405bbadc1b0fea91e7e1cd1  libphobos/libdruntime/core/sys/windows/msacm.d
! a2da78a3535fa3f6cfb6b16b6c125c8b  libphobos/libdruntime/core/sys/windows/mshtml.d
! 98dbded17063660a927ad1a6ae925ebc  libphobos/libdruntime/core/sys/windows/mswsock.d
! b58bdb461f981df50552c0296f6f6404  libphobos/libdruntime/core/sys/windows/nb30.d
! 6ff0c83f83b987d58d87451ed0e341a9  libphobos/libdruntime/core/sys/windows/nddeapi.d
! 5b555c3e204031838e566cb84cd88279  libphobos/libdruntime/core/sys/windows/nspapi.d
! 980b97100d5c5ee55701daeb50eab3cd  libphobos/libdruntime/core/sys/windows/ntdef.d
! 8f8e68fe1f6387e97f28b1158fc0b37e  libphobos/libdruntime/core/sys/windows/ntdll.d
! 2732aaced270a5a97c0e2e05d75d7c34  libphobos/libdruntime/core/sys/windows/ntldap.d
! 02e288fb55334b235c205f171841d15b  libphobos/libdruntime/core/sys/windows/ntsecapi.d
! c5701a15c9a2cd17576f2c6e3d62cc1c  libphobos/libdruntime/core/sys/windows/ntsecpkg.d
! 8070357184723d2c4d1a8875eae99318  libphobos/libdruntime/core/sys/windows/oaidl.d
! 0697d08221761dcaa1a7086abb320407  libphobos/libdruntime/core/sys/windows/objbase.d
! 4267fab7b1ca86bae18c9c90b5a6b197  libphobos/libdruntime/core/sys/windows/objfwd.d
! 845d75362906da6811abbc54f3b5d027  libphobos/libdruntime/core/sys/windows/objidl.d
! f4fc33b1f8b5cd6f06addbf307cf2ff4  libphobos/libdruntime/core/sys/windows/objsafe.d
! 198604924bdda3ff81e0729c0bf3ac15  libphobos/libdruntime/core/sys/windows/ocidl.d
! 9b9a26858a4fd880490432c245c690fb  libphobos/libdruntime/core/sys/windows/odbcinst.d
! 575706a85de3aec2342a34b8868e613c  libphobos/libdruntime/core/sys/windows/ole.d
! 5734631476d9df969aad11f6103edb31  libphobos/libdruntime/core/sys/windows/ole2.d
! 314785a8f31488c44e22711f37b32e61  libphobos/libdruntime/core/sys/windows/ole2ver.d
! 896628c955c05512204ace6daa906826  libphobos/libdruntime/core/sys/windows/oleacc.d
! 31a233e2bec447d79df3b2b79d3c086b  libphobos/libdruntime/core/sys/windows/oleauto.d
! 309ccba932d6d38cb0d30fa3be1a3a49  libphobos/libdruntime/core/sys/windows/olectl.d
! bcfcb5e089cf2722c3645d9de6b80cee  libphobos/libdruntime/core/sys/windows/olectlid.d
! 06986de3f9ef2d22f5e28b160b4fac84  libphobos/libdruntime/core/sys/windows/oledlg.d
! 91d8b3eb219b474645037c973d132ece  libphobos/libdruntime/core/sys/windows/oleidl.d
! 23ac24afbecb650eae083d9cf8e1fc2a  libphobos/libdruntime/core/sys/windows/pbt.d
! facc59b9efb9529c6f83982948201022  libphobos/libdruntime/core/sys/windows/powrprof.d
! e5032dbd97f773bfb25561e44cf7c6d3  libphobos/libdruntime/core/sys/windows/prsht.d
! c02fb8478d7f18e5628358fe9faf628c  libphobos/libdruntime/core/sys/windows/psapi.d
! 7b85b9970ef810a987a52f0dc47440c8  libphobos/libdruntime/core/sys/windows/rapi.d
! a399a9ef556c6dfb985cfb9b38721506  libphobos/libdruntime/core/sys/windows/ras.d
! 865844dfab4cca39800c73125dc30b29  libphobos/libdruntime/core/sys/windows/rasdlg.d
! 06627529abcd0f6e279452d4a7d666cd  libphobos/libdruntime/core/sys/windows/raserror.d
! 4ed0efae8172578fd8c0679e6290050a  libphobos/libdruntime/core/sys/windows/rassapi.d
! 9a443c0cca7de43a2859ebce16a8cb1a  libphobos/libdruntime/core/sys/windows/reason.d
! 15539dc5a802e7919743b8b2b38c3f4e  libphobos/libdruntime/core/sys/windows/regstr.d
! 974903a5c908898eb13395f7af19f800  libphobos/libdruntime/core/sys/windows/richedit.d
! 5e89af43fc43cd921f66fa94761f0db9  libphobos/libdruntime/core/sys/windows/richole.d
! b5d353f75afbe10c4cc16428b8cede58  libphobos/libdruntime/core/sys/windows/rpc.d
! 70d87685e382f424fd27a814bbc1511d  libphobos/libdruntime/core/sys/windows/rpcdce.d
! baf4c16ad6af324e1a8dc46e2eb7b174  libphobos/libdruntime/core/sys/windows/rpcdce2.d
! 71db721c4533482c664b5a8c77e60166  libphobos/libdruntime/core/sys/windows/rpcdcep.d
! 4dabfa6de0b0862bcefea7216ef5466e  libphobos/libdruntime/core/sys/windows/rpcndr.d
! 9b6f247e39479dc6caca4594ad103071  libphobos/libdruntime/core/sys/windows/rpcnsi.d
! 82dbf3bc1821c352871cef7cad538ded  libphobos/libdruntime/core/sys/windows/rpcnsip.d
! 0e1b07ddd360edef714715e4ca46f361  libphobos/libdruntime/core/sys/windows/rpcnterr.d
! 9a7e69a3857a1b4fac20cd72f0cb8541  libphobos/libdruntime/core/sys/windows/schannel.d
! cfa3380c0e66aaa12066e31e4d6630be  libphobos/libdruntime/core/sys/windows/sdkddkver.d
! 5d16a207e9dc066fe434aec578a3c604  libphobos/libdruntime/core/sys/windows/secext.d
! aba2c3ed010703a24b3eaa314c7dba77  libphobos/libdruntime/core/sys/windows/security.d
! 03bb6b9eaf7e0693781e8af3b75708ab  libphobos/libdruntime/core/sys/windows/servprov.d
! 10f889f1c8a589330633e9ec58d97910  libphobos/libdruntime/core/sys/windows/setupapi.d
! 5c66c853dea7d0fbd72ac8b78621d0e8  libphobos/libdruntime/core/sys/windows/shellapi.d
! a432c5e0781edcc3cef8d95bfe24ad08  libphobos/libdruntime/core/sys/windows/shldisp.d
! bdaaf613b56d24a3c3af405eb9a46626  libphobos/libdruntime/core/sys/windows/shlguid.d
! 76225ade83dfcc518ba4e607e95d38f9  libphobos/libdruntime/core/sys/windows/shlobj.d
! c78ae3ed78254f32c759570cb1d63d2e  libphobos/libdruntime/core/sys/windows/shlwapi.d
! e2dcb8e3afc4f00f435c6259685ff2a2  libphobos/libdruntime/core/sys/windows/snmp.d
! 97c0084e489fb243944088f1fb87ce07  libphobos/libdruntime/core/sys/windows/sql.d
! 16234ad84092905079116811d6c036b4  libphobos/libdruntime/core/sys/windows/sqlext.d
! 18d212dea8889cee60ef40a478928578  libphobos/libdruntime/core/sys/windows/sqltypes.d
! 7dcb4c6605f0fe5957d3ce91edfd9a15  libphobos/libdruntime/core/sys/windows/sqlucode.d
! 49e6c2e84a7af5842c1fe4a2e36d4272  libphobos/libdruntime/core/sys/windows/sspi.d
  fe2b1b324ddc31d4721bf8f161a1ce05  libphobos/libdruntime/core/sys/windows/stacktrace.d
! 138ada52a6bb558470c32fc96b1b63ea  libphobos/libdruntime/core/sys/windows/stat.d
! 982f10eb707bc52e123da86bb6f9aa2d  libphobos/libdruntime/core/sys/windows/stdc/malloc.d
  33fcc28066c3bb9129080337483b0f97  libphobos/libdruntime/core/sys/windows/stdc/time.d
! 82d937074fe877870140063446034882  libphobos/libdruntime/core/sys/windows/subauth.d
  e7e393070a6f9ebc51696a32de60f6b9  libphobos/libdruntime/core/sys/windows/threadaux.d
! 1f7972a97e739307650b2de2f6b6b804  libphobos/libdruntime/core/sys/windows/tlhelp32.d
! 1aea628954553309f097770c83968050  libphobos/libdruntime/core/sys/windows/tmschema.d
! 972272bd882f6fcd626f033322fc7d51  libphobos/libdruntime/core/sys/windows/unknwn.d
  ce81808a97b10b192404ef60d9c75dbe  libphobos/libdruntime/core/sys/windows/uuid.d
! bbda9656dc96dc445df85d544e737fb4  libphobos/libdruntime/core/sys/windows/vfw.d
! 648e271a7583f8d496bf6f71fa45ed07  libphobos/libdruntime/core/sys/windows/w32api.d
! f7195e29b9ea24e5fcec89a185d9d94d  libphobos/libdruntime/core/sys/windows/winbase.d
! f4cbeab1ae700532603665052a1fbd0a  libphobos/libdruntime/core/sys/windows/winber.d
! 8de74d2b2d896f082fefd7d01860e185  libphobos/libdruntime/core/sys/windows/wincon.d
! 55a67f2369a07dcb366599f84826d85c  libphobos/libdruntime/core/sys/windows/wincrypt.d
! 496b1ef7b5e110d849d7f3176286a782  libphobos/libdruntime/core/sys/windows/windef.d
! cf151ed8a277c0eb333946bed00e7ff4  libphobos/libdruntime/core/sys/windows/windows.d
! c2c89dcd50f4bc8d193dfb43e01f9ae5  libphobos/libdruntime/core/sys/windows/winerror.d
! 6ebd0c6d0a3b05b7f04d01e159932391  libphobos/libdruntime/core/sys/windows/wingdi.d
! d059136d9dc00ac4186ccdfc97d18c0b  libphobos/libdruntime/core/sys/windows/winhttp.d
! f6bd0d2401a53d557545afb545c7e40b  libphobos/libdruntime/core/sys/windows/wininet.d
! a5db320dd8926e255a554ccb836bdf47  libphobos/libdruntime/core/sys/windows/winioctl.d
! 5c6c241e9881e6c0aa0f01e4a26d3d85  libphobos/libdruntime/core/sys/windows/winldap.d
! 26a591867e39731685d8d2b721958d0d  libphobos/libdruntime/core/sys/windows/winnetwk.d
! 8b79166be23b6b752655e083e2e19810  libphobos/libdruntime/core/sys/windows/winnls.d
! 6f319fb9cfc3eb27daca7dcd1e2c0497  libphobos/libdruntime/core/sys/windows/winnt.d
! 6a2b53e6d523cdf0fa15861a8a2130e2  libphobos/libdruntime/core/sys/windows/winperf.d
! b66e5153bab0f07eba03e7d5cb7b949d  libphobos/libdruntime/core/sys/windows/winreg.d
  58898fbc427949691097ea2bc559e461  libphobos/libdruntime/core/sys/windows/winsock2.d
! e12c4833ab1f1373921cc9d2f260ea37  libphobos/libdruntime/core/sys/windows/winspool.d
! 776c9177c1bac43deebc4dda460bfebe  libphobos/libdruntime/core/sys/windows/winsvc.d
! dc199811f0290ee8468f34bc187c8de2  libphobos/libdruntime/core/sys/windows/winuser.d
! 2a4f3e05bc9c401da3f050ff6cadd070  libphobos/libdruntime/core/sys/windows/winver.d
! d54adc4971007736dd7835c28aa54599  libphobos/libdruntime/core/sys/windows/wtsapi32.d
! 0e4381cfce5a20c4c7c4c40dc48a0f77  libphobos/libdruntime/core/sys/windows/wtypes.d
! 9094c28b1e25c7802bae1054ff893274  libphobos/libdruntime/core/thread/context.d
! f68c376a5b9520a30c12634c4adce53f  libphobos/libdruntime/core/thread/fiber.d
! 521c5c83eaf237ec400d8219e0628cce  libphobos/libdruntime/core/thread/osthread.d
  9b6ee3a7c47a4d264ce79b0c16495747  libphobos/libdruntime/core/thread/package.d
! 65b55cf17fa4d056e58a6b20592c8f03  libphobos/libdruntime/core/thread/threadbase.d
  c1ed5b58527141cfd45c44e71ae05ec8  libphobos/libdruntime/core/thread/threadgroup.d
  12e24b84e408496a6d50f1b25ac7faed  libphobos/libdruntime/core/thread/types.d
! 01a8282e7aeb5ac349967ba8d24048b8  libphobos/libdruntime/core/time.d
  ba840dec340cd1fed28cbc0a57224321  libphobos/libdruntime/core/vararg.d
  4cf99596b90593fec63debe10874dfdb  libphobos/libdruntime/core/volatile.d
! deebefba0b6c32a2d8d47c8f9617b3c5  libphobos/libdruntime/gcc/attribute.d
! f53c4bd589f04b8fa61e409abb4efcf9  libphobos/libdruntime/gcc/attributes.d
! 4b65b7ba63d28167ae0c27a1105dc8ec  libphobos/libdruntime/gcc/backtrace.d
! 736619eabfb82dff8a9c85ca405cd3a8  libphobos/libdruntime/gcc/builtins.d
! f019bb4efd5dd1040cda211f04e5a293  libphobos/libdruntime/gcc/config.d.in
! f6f562bf67c85f659608158ab22113bd  libphobos/libdruntime/gcc/deh.d
! ee6922c9cc81503907572a1a415a0df1  libphobos/libdruntime/gcc/drtstuff.c
! bb4c5bcb2c1ee8f5dbe465c4aa9282f8  libphobos/libdruntime/gcc/emutls.d
! ebd6b867b96875ce699a8531b0a1407f  libphobos/libdruntime/gcc/gthread.d
! dd60dd69730681269ba31b21bfbe290d  libphobos/libdruntime/gcc/libbacktrace.d.in
! 297f49a1ddb40ed1dd21a441ab51262a  libphobos/libdruntime/gcc/sections/common.d
! 6c5e21b164e4c4720695e24255ef37ae  libphobos/libdruntime/gcc/sections/elf.d
! 6a581b483b45c01f9ade77f382dfd472  libphobos/libdruntime/gcc/sections/macho.d
! a3345fbce1c2166b7e2c352666b1db99  libphobos/libdruntime/gcc/sections/package.d
! 88f56bf3980baf51d44a5b7d3bfc5128  libphobos/libdruntime/gcc/sections/pecoff.d
! 7bf88f5bb33176fabb1430b3c4b67581  libphobos/libdruntime/gcc/unwind/arm.d
! 426331331e95b80fc6b4e3e0c098db5c  libphobos/libdruntime/gcc/unwind/arm_common.d
! e4ced11e3a1a8d4f122b9861f77fbd97  libphobos/libdruntime/gcc/unwind/c6x.d
! e740d3a1108b5c71bc7afa00fa91c71f  libphobos/libdruntime/gcc/unwind/generic.d
! 8e746dca72078bccb916afb79713f5bd  libphobos/libdruntime/gcc/unwind/package.d
! c538806fe61dd1559955501227f6b649  libphobos/libdruntime/gcc/unwind/pe.d
! 365bcfbdd4b8be9c912a1580acda00f6  libphobos/libdruntime/object.d
! 26d2e0e3b3a41e505f88520718918a8b  libphobos/libdruntime/rt/aApply.d
! 011efd978fd56e81e312bf1575d79d40  libphobos/libdruntime/rt/aApplyR.d
! 13541412aa8cecd56d7787bcb22dec09  libphobos/libdruntime/rt/aaA.d
! c50bbbb450796967c2c51cf3fef9da14  libphobos/libdruntime/rt/adi.d
! 7fd38486c3e675cc117a5a8a488fb6ab  libphobos/libdruntime/rt/arrayassign.d
! 8d7590e2d80123970d6ffadec3b61738  libphobos/libdruntime/rt/arraycat.d
! c77f95b637563a0cfa639db5e1702145  libphobos/libdruntime/rt/cast_.d
! e356126947e7110fb24ae47490f6dde1  libphobos/libdruntime/rt/config.d
! c25c7722f38f79cec022a1fa60e1bf1c  libphobos/libdruntime/rt/critical_.d
! 69d6ca3eca1d939909bbb1575e2e957c  libphobos/libdruntime/rt/deh.d
! e2b07c5412b917379e9ec1d750d858d2  libphobos/libdruntime/rt/dmain2.d
! 1d633137c4f1501ea0ad70dabff55ce5  libphobos/libdruntime/rt/dylib_fixes.c
! 9c6b80bda130cfa4691d6c3e91e916dc  libphobos/libdruntime/rt/ehalloc.d
! 558c02062a26469537c962127a6722db  libphobos/libdruntime/rt/invariant.d
! 11af16adde9a49f1089cd85f7de66dcc  libphobos/libdruntime/rt/lifetime.d
! 3256fa529b5c773a7af9a6a8a2e989cb  libphobos/libdruntime/rt/memory.d
! 5f1ab316616c37588dacbfcbf1023270  libphobos/libdruntime/rt/minfo.d
! ae09fcbab0db0e0d41790bf453925601  libphobos/libdruntime/rt/monitor_.d
! 008975c2c08f12ee0d0dd8c682932dfc  libphobos/libdruntime/rt/profilegc.d
! d5fb28a0b82b9570223e40df91e38cb4  libphobos/libdruntime/rt/sections.d
! c7a6041a6bac5ecaf2e2688bf5eea41b  libphobos/libdruntime/rt/tlsgc.d
! 8fbdd95038dacf34b2f421ee9aeafa51  libphobos/libdruntime/rt/util/typeinfo.d
! b44590c842b754fede38a9a70a5b2d53  libphobos/libdruntime/rt/util/utility.d
! 98e21634a122597ed7abb6150c41cdbf  libphobos/m4/autoconf.m4
  cbef578492ab132e253c07ad83e6ee8a  libphobos/m4/druntime.m4
  fbffedeb7e8a911ebb298bdff921256a  libphobos/m4/druntime/cpu.m4
  82b8f67e7ad56ad32591fd6b000fca98  libphobos/m4/druntime/libraries.m4
! bcf226bf8392b2181c4c8f9a386f0a26  libphobos/m4/druntime/os.m4
! be2340569194e9c072c40fc94eab3483  libphobos/m4/gcc_support.m4
  c49ab40607849fa623787878420e7207  libphobos/m4/gdc.m4
  458abf211dc60540bf28a9257d4bd4e5  libphobos/m4/libtool.m4
  e4224ccaecb14d942c71d31bef20d78c  libphobos/src/LICENSE_1_0.txt
! b03014bfbcf28503901133c098c43348  libphobos/src/MERGE
! 7551c0d5a6b83f8147986e95ed723971  libphobos/src/Makefile.am
! 250255bfc33ebb151181231740d0b48b  libphobos/src/Makefile.in
  ff30fe7275b03f69e2a7796e47d142e8  libphobos/src/drtstuff.spec
! c5411b49cf07ba1337d42bf34ba95eca  libphobos/src/etc/c/curl.d
! 8c80b7845f5279d405fa59c9bca95483  libphobos/src/etc/c/zlib.d
! 6ef689bb347e3c81e28cb2dc4cfce218  libphobos/src/index.dd
  3a1ad66c3c47609c90c1f4d9cf8ddca2  libphobos/src/libgphobos.spec.in
! 0c6fb8e5f94e48ea1f8ac09e8aa9950e  libphobos/src/std/algorithm/comparison.d
! 694c41f4d2a56ffa1cea9387144617a7  libphobos/src/std/algorithm/internal.d
! 3d1da33665fd4cee17eb37a69ba2dd24  libphobos/src/std/algorithm/iteration.d
! 2e8ad031484fc4476ed3123e32d4a479  libphobos/src/std/algorithm/mutation.d
! 9dfb48a88dd21220dab0842da7e9069c  libphobos/src/std/algorithm/package.d
! 90358578e042f9188105fa5be3f28d96  libphobos/src/std/algorithm/searching.d
! 77167ad7cf4c80bb39eeaf62f0ed0772  libphobos/src/std/algorithm/setops.d
! c77dc0dc960b70a46336f5ad8dc9ef23  libphobos/src/std/algorithm/sorting.d
! 080203bad4c4d98accf157b43ae4fff2  libphobos/src/std/array.d
! ce89b519f17e4e9ab7a90eae953b6899  libphobos/src/std/ascii.d
! e6adb636b6c97580a557d2c2fb435c8a  libphobos/src/std/base64.d
! f8a5c94dee5cb1354434c5e0c17d991e  libphobos/src/std/bigint.d
! 67a6c72eeb99eaa907b0b4a4be357843  libphobos/src/std/bitmanip.d
! d7e0be2558cfd762beb23a58be6fc33d  libphobos/src/std/checkedint.d
! 757c8eb1d1c8a51cb52672afd0ad6523  libphobos/src/std/compiler.d
! 7d70b27133c5d68900d3722282927e68  libphobos/src/std/complex.d
! 9d843077700d2f4ce86837f6c490bb1e  libphobos/src/std/concurrency.d
! 004ac7014a2a3eb7d0ec935350093163  libphobos/src/std/container/array.d
! fbf4cee1f26069434cc434da66c2d9a0  libphobos/src/std/container/binaryheap.d
! d4cbd0e5494bb1e212e809ceba1f3787  libphobos/src/std/container/dlist.d
! df3f67c15b5b7b1af94bf29d9744f005  libphobos/src/std/container/package.d
! 0cb7396703bc5779518aaa30e6c9ada7  libphobos/src/std/container/rbtree.d
! 4a327ea86a45ce1f67fa44aa634bfd06  libphobos/src/std/container/slist.d
! c8590ffcd747e9da50e3afc8e4c69111  libphobos/src/std/container/util.d
! 3f93bb1571fbc26869b34c299971d3ae  libphobos/src/std/conv.d
! 6aef79b4677f6bb259b947c1c3176dfe  libphobos/src/std/csv.d
! e9d818e994a694951a607a1aaa99c921  libphobos/src/std/datetime/date.d
! 8940289b80bf4d65f426f9625a18a7cc  libphobos/src/std/datetime/interval.d
! bbd9f262fce997eefac78b6ed54e3d41  libphobos/src/std/datetime/package.d
! d225a622b0c7c7087ba9fa025dbd7f68  libphobos/src/std/datetime/stopwatch.d
! 61870506f04ab08e474ff919fd40b4be  libphobos/src/std/datetime/systime.d
! 8cfadc94124fad7d25f7bbed42f9601d  libphobos/src/std/datetime/timezone.d
! 221da1b10eb5da893eb97e28d5de3171  libphobos/src/std/demangle.d
! 9495d76a00c8e254cb9432a0edd39057  libphobos/src/std/digest/crc.d
! b96726916ca7dce077d6ccc5a139744b  libphobos/src/std/digest/digest.d
! 329fdb1951a5cad44dfcce2351d25fb0  libphobos/src/std/digest/hmac.d
! d1c0606553ccbfef18e98e16c0dafce2  libphobos/src/std/digest/md.d
! 507eab746199f8e9e5616142fcada09c  libphobos/src/std/digest/murmurhash.d
! a35cbabb8aa77d8451c285063c5c8211  libphobos/src/std/digest/package.d
! 4a611bd9d6b92c30cfac32edfd614b54  libphobos/src/std/digest/ripemd.d
! e298410eaf608ba40ad57abaee6be1d7  libphobos/src/std/digest/sha.d
! cdc3d0431aa2e54b40e0570c9a848b27  libphobos/src/std/encoding.d
! 5001d96ff4a2f01e38faa96c21af08b4  libphobos/src/std/exception.d
! fe6f3a5b36768d08dda63bc5b0a3cf24  libphobos/src/std/experimental/allocator/building_blocks/affix_allocator.d
! fcaff08a46f987574badac3b62aa9bce  libphobos/src/std/experimental/allocator/building_blocks/aligned_block_list.d
! 3f22509f0c1d415e5a802316b26e2eec  libphobos/src/std/experimental/allocator/building_blocks/allocator_list.d
! 54937f37e3907116b80036449560c873  libphobos/src/std/experimental/allocator/building_blocks/ascending_page_allocator.d
! 81c04e6daf295821dbdc8654dbcb970e  libphobos/src/std/experimental/allocator/building_blocks/bitmapped_block.d
! aaab7cd4d84a361d433bb44d4301c0af  libphobos/src/std/experimental/allocator/building_blocks/bucketizer.d
! 0e5ef4f86a7c6af7d71c1d6e91642916  libphobos/src/std/experimental/allocator/building_blocks/fallback_allocator.d
! 61b4fd73afee369348ca5b20011cf3b0  libphobos/src/std/experimental/allocator/building_blocks/free_list.d
! e2b3853391f7f8a209cbb8a919361f64  libphobos/src/std/experimental/allocator/building_blocks/free_tree.d
! 6fbed4b6e7e24d876ce37c64f5bb3775  libphobos/src/std/experimental/allocator/building_blocks/kernighan_ritchie.d
! 52b04093760e06f9eae5cf5a73ae094c  libphobos/src/std/experimental/allocator/building_blocks/null_allocator.d
! 38d76c4904a8c59d8d1fbb5a6c0b26f2  libphobos/src/std/experimental/allocator/building_blocks/package.d
! 8e504c19721caea78593a2a7995527f8  libphobos/src/std/experimental/allocator/building_blocks/quantizer.d
! 88afc3845d2183907bb426fcf1384d15  libphobos/src/std/experimental/allocator/building_blocks/region.d
! 45bdd898911a65e7ceb907a847c5485d  libphobos/src/std/experimental/allocator/building_blocks/scoped_allocator.d
! 92e2fa4e7ea0742441c1c5294b811731  libphobos/src/std/experimental/allocator/building_blocks/segregator.d
! 6a8a75ceef26c6c95c21b6bad334aa76  libphobos/src/std/experimental/allocator/building_blocks/stats_collector.d
! 8e5b61f07763ec295dfc02cf6a33ea6c  libphobos/src/std/experimental/allocator/common.d
! f39a9f5fa9bfdc9d8679091918adb41a  libphobos/src/std/experimental/allocator/gc_allocator.d
! f3900ee7c6222e36e06fa70fe9989cf3  libphobos/src/std/experimental/allocator/mallocator.d
! 1f302837e4f8c4355c52fcababcc23a1  libphobos/src/std/experimental/allocator/mmap_allocator.d
! ac0ba4200b54066b5907aad4747ca4cf  libphobos/src/std/experimental/allocator/package.d
! 95d3cda8eeb16d5098af629850dc17a2  libphobos/src/std/experimental/allocator/showcase.d
! d4a442037642d3549358dcee57652703  libphobos/src/std/experimental/allocator/typed.d
! 2dbacb9d606f437e4997e0466434586c  libphobos/src/std/experimental/checkedint.d
! 7d370afce7376ed7ec7ed4e5ccb2a60e  libphobos/src/std/experimental/logger/core.d
! 4d886ee182c154e07e575537d4877a35  libphobos/src/std/experimental/logger/filelogger.d
! f01f925c111b0932c1ac8eef82d9f48a  libphobos/src/std/experimental/logger/multilogger.d
! 822eb2329e13be4c4c0fb6aa785732ec  libphobos/src/std/experimental/logger/nulllogger.d
! 6d06515a54ad097d39cdeb8c5be0d836  libphobos/src/std/experimental/logger/package.d
  768b30d13593aba9e2715a7d868d763e  libphobos/src/std/experimental/note.md
! 06c9eb40c5c9d9d8126c3a754ab5734d  libphobos/src/std/experimental/typecons.d
! abbf8ebaf8eeccee51fcb6543765b620  libphobos/src/std/file.d
! 72a246e914744d16160f1137787e0e8c  libphobos/src/std/format/internal/floats.d
! 2d56c99084de17c03489845dd80ed3e8  libphobos/src/std/format/internal/read.d
! 181298d84cad357547ed66d5de9ff602  libphobos/src/std/format/internal/write.d
! e3b44cf5c01ce3089688e0a51954a7f1  libphobos/src/std/format/package.d
! 244499abf77f4022cf4181e4aaee3427  libphobos/src/std/format/read.d
! 354de99a99f6a44d81c3e6a59d9ab694  libphobos/src/std/format/spec.d
! 8e38679bc9b8fb3b7132b5dd30f972a7  libphobos/src/std/format/write.d
! 408e0a63a00b341c107f7942ecbbcbea  libphobos/src/std/functional.d
! 68fd491d993e905f36f35eff3a1ecfd8  libphobos/src/std/getopt.d
! aeaa7be710d3a020515ed52e4dd2bf60  libphobos/src/std/int128.d
! 8bc9fa8deafb0e80277b86268d55fa53  libphobos/src/std/internal/attributes.d
! 4fc3dee264a23e6b241d6b1e77fc8a4c  libphobos/src/std/internal/cstring.d
! def4283a7fd5328efa5c796fe3d08687  libphobos/src/std/internal/math/biguintcore.d
! d3a41b19b71afaad9507ea2b7e63baa1  libphobos/src/std/internal/math/biguintnoasm.d
! 8163acdb919296a99cd241f472263b56  libphobos/src/std/internal/math/errorfunction.d
! d409b729d144772803160119159f9ada  libphobos/src/std/internal/math/gammafunction.d
! f25b12bd0896d34a7a63eeccbb71ddd1  libphobos/src/std/internal/memory.d
! b8a0549fa22a82b03b350b02592236a5  libphobos/src/std/internal/scopebuffer.d
! 0e5cac523b09a65e2fca9738dc08194d  libphobos/src/std/internal/test/dummyrange.d
  8c74ab50895aaf9b04b114888ade41d8  libphobos/src/std/internal/test/range.d
  9d403089f5dfdab0c5fd3b765e0e5e07  libphobos/src/std/internal/test/uda.d
  687424bb0829cde118f2ccf009041cb6  libphobos/src/std/internal/unicode_comp.d
*************** f36ecd6944cbf2a1b92c449a33839d11  libpho
*** 96788,96873 ****
  53ecada21dfa2607ae217405eff608b9  libphobos/src/std/internal/unicode_grapheme.d
  3c2fba9e8502aa68faf30f97f5b571fc  libphobos/src/std/internal/unicode_norm.d
  e6a08fb4d7276775840f8fde15eb008e  libphobos/src/std/internal/unicode_tables.d
! a2ae05947a98834a562acbc03bf33550  libphobos/src/std/internal/windows/advapi32.d
! 07236968633d655b0da673e496fed396  libphobos/src/std/json.d
! 8199a7cd17f02f5334601fdef3166535  libphobos/src/std/math.d
! d64e7c6f9f940e7d7f14d7d36c358989  libphobos/src/std/mathspecial.d
! 67828c841f9f6ada962fea66bb268d33  libphobos/src/std/meta.d
! 0399473cfd9632b309d72c0040489531  libphobos/src/std/mmfile.d
! 91280f8cf7ed15cb9bbfd13bd3723112  libphobos/src/std/net/curl.d
! 70c88d4496f371ca966e6a139e837ea3  libphobos/src/std/net/isemail.d
! d471e006e4eff73c7d20b9167e24d741  libphobos/src/std/numeric.d
! 388208c6635979df5a07648d1f0cdc2e  libphobos/src/std/outbuffer.d
! 842f278bff583b4bd01499694eadcb0c  libphobos/src/std/parallelism.d
! 2b189485e4897de30dbd494f6d788e0b  libphobos/src/std/path.d
! 8e5e73cca99a16adb64a6a03126b3caa  libphobos/src/std/process.d
! 592b96acd85b7ae34760c56d2e1af9f7  libphobos/src/std/random.d
! 1d5f5bfe4477f509753c7242be1c9583  libphobos/src/std/range/interfaces.d
! 6c8837cd6d2408380210c4f909eb18f3  libphobos/src/std/range/package.d
! 977bc68925d2e5a24972dfec11d6d245  libphobos/src/std/range/primitives.d
! f1c1a6b3c7a2ae3529faf5dd24fa3837  libphobos/src/std/regex/internal/backtracking.d
! 26a9d95cdcd55fa4d7006787f114bee9  libphobos/src/std/regex/internal/generator.d
! 62bc465827acb96232b4132a60f05a36  libphobos/src/std/regex/internal/ir.d
! f854d99cc56bd90af7ed854ae4c5f4a9  libphobos/src/std/regex/internal/kickstart.d
! 975b74c5457b32ddace295e759995f63  libphobos/src/std/regex/internal/parser.d
! cc02a9fea97526c85bb1ea77ef6760c0  libphobos/src/std/regex/internal/tests.d
! 49a6aceaab294b0b5369e56f7ba87bb5  libphobos/src/std/regex/internal/tests2.d
! b99f626316273c3daf2953bfd822609c  libphobos/src/std/regex/internal/thompson.d
! 9331982b3979f24025c8d01a02eaae41  libphobos/src/std/regex/package.d
! df4f18ae8c7b1188ceb25cebc8cdbfad  libphobos/src/std/signals.d
! 209df4ea3736cae127de93cd246ea310  libphobos/src/std/socket.d
! 6a33097edd4ad1e0309cbf45449a8d4e  libphobos/src/std/stdint.d
! be8a624f7d83029b625cc6a304f7ce56  libphobos/src/std/stdio.d
! 54c3c76107b8a7608d8de8cfbff0a908  libphobos/src/std/string.d
! ae3eea4dd286cc0c253a4bf4f0382cef  libphobos/src/std/system.d
! 857bc18696d7036249f50428486036b0  libphobos/src/std/traits.d
! ff44ce9c7785fceb3dd14c1af4c49a78  libphobos/src/std/typecons.d
! 0c2864a8173de711ac1c1085e4f321cf  libphobos/src/std/typetuple.d
! e0069a8fdebf24d2689b2648a6fa8248  libphobos/src/std/uni.d
! 87e90859aa6919e3023e8671040966c8  libphobos/src/std/uri.d
! 617307792f4825e2555fa30d5df0a2b4  libphobos/src/std/utf.d
! 229ac812c520cb2c83494e4d67e21d99  libphobos/src/std/uuid.d
! ee1fa3514e0cedfb7488e2be873ec9fd  libphobos/src/std/variant.d
! 0aea3e7174cafa4ca9a810cd359e4a12  libphobos/src/std/windows/charset.d
! 47c382b5ecf8e5b81bf7760dc34f57c6  libphobos/src/std/windows/registry.d
! 16a61b9b540df5967d61dc3060daf52d  libphobos/src/std/windows/syserror.d
! ed6622a6fa6da3b41e47f072aacdcccb  libphobos/src/std/xml.d
! f948100c606aac80dc7ea101dbd8938b  libphobos/src/std/zip.d
! e286530c1673eab67616befb2f26f1a7  libphobos/src/std/zlib.d
! b5ef2bfc6ccc86766453074317e71166  libphobos/testsuite/Makefile.am
  a13be93a99fb4f3ac1cd895ac34c9305  libphobos/testsuite/Makefile.in
! b6823735d7a4e6efcdd761ebf75c53bc  libphobos/testsuite/config/default.exp
! a5710012b14c38efe030c8768c419b84  libphobos/testsuite/lib/libphobos-dg.exp
! b0323a9ca2c057a6dfef1504422c88bc  libphobos/testsuite/lib/libphobos.exp
! 84287a27c199fbae32ce036586eb3e99  libphobos/testsuite/libphobos.aa/aa.exp
! bc5e4ff02f931c6e4092411c492a23eb  libphobos/testsuite/libphobos.aa/test_aa.d
! 52aa82eb55841708ea1accdcab5dfc19  libphobos/testsuite/libphobos.allocations/allocations.exp
  7dfee0831ce08cfd971056dee5ce8519  libphobos/testsuite/libphobos.allocations/overflow_from_existing.d
  39b50d25dc11230fd4d61a9d7c8cf7a0  libphobos/testsuite/libphobos.allocations/overflow_from_zero.d
  94c17250a195da16fb246ef8e28d3477  libphobos/testsuite/libphobos.allocations/tls_gc_integration.d
! 68744a241e68f31847432a7816c595e0  libphobos/testsuite/libphobos.cycles/cycles.exp
  1d8fc1ccfee07e211685dad723c7c5ef  libphobos/testsuite/libphobos.cycles/mod1.d
  504ac65b81c5b13426dbccb387e5ea96  libphobos/testsuite/libphobos.cycles/mod2.d
  8fd2e066de9b173803c23766ec268bc6  libphobos/testsuite/libphobos.cycles/mod3.d
! f83fd9e007d10b5d0231dfd0cfb8a17d  libphobos/testsuite/libphobos.druntime/druntime.exp
! 5b2eec0a9988a7c0c87200eb5efd0e77  libphobos/testsuite/libphobos.druntime_shared/druntime_shared.exp
  53adf2e14495ca10a85a32022b69fa86  libphobos/testsuite/libphobos.exceptions/chain.d
! 52aa82eb55841708ea1accdcab5dfc19  libphobos/testsuite/libphobos.exceptions/exceptions.exp
  17d3680e349b715f2c8ae4cd23ab5dc5  libphobos/testsuite/libphobos.exceptions/invalid_memory_operation.d
  f20a3bb9bc82bda410377ab87e9dfa75  libphobos/testsuite/libphobos.exceptions/line_trace.d
  bf5b834c84dce34c411728d08e740501  libphobos/testsuite/libphobos.exceptions/static_dtor.d
  31f5d626ceb6296159b2ba424ee49c32  libphobos/testsuite/libphobos.exceptions/stderr_msg.d
  1f17216ed3cb74970b34edf1fe76623d  libphobos/testsuite/libphobos.exceptions/unittest_assert.d
! 71bea904d6761af4063877c668a8fe49  libphobos/testsuite/libphobos.exceptions/unknown_gc.d
! 84287a27c199fbae32ce036586eb3e99  libphobos/testsuite/libphobos.hash/hash.exp
! 23008e0ae50c9c076a539d22ebcd0b49  libphobos/testsuite/libphobos.hash/test_hash.d
! 245b43d36cad9840fce44fbf4358d424  libphobos/testsuite/libphobos.init_fini/init_fini.exp
  b6bbf47234f6bdb61c628cae44fb04f9  libphobos/testsuite/libphobos.init_fini/runtime_args.d
  6cf643d2e05d4806362cf62c56562e5e  libphobos/testsuite/libphobos.init_fini/thread_join.d
! 27c43b1f8fa27481d7f1a9039ca3f912  libphobos/testsuite/libphobos.phobos/phobos.exp
! 295b1eaf5b3977cb09f1a23395f94e08  libphobos/testsuite/libphobos.phobos_shared/phobos_shared.exp
  dc9924675718952b484eadd2d458553a  libphobos/testsuite/libphobos.shared/finalize.d
! 31e8bf46746f3f04a617d6a88183d6df  libphobos/testsuite/libphobos.shared/host.c
  568552f233800fa4522238fe4c907fb7  libphobos/testsuite/libphobos.shared/lib.d
  a2ec8376ef41cae7c91b91843957a44f  libphobos/testsuite/libphobos.shared/lib_13414.d
  4538bd3ced980e1cc5a073892e5a6956  libphobos/testsuite/libphobos.shared/liblinkdep.d
--- 103546,103680 ----
  53ecada21dfa2607ae217405eff608b9  libphobos/src/std/internal/unicode_grapheme.d
  3c2fba9e8502aa68faf30f97f5b571fc  libphobos/src/std/internal/unicode_norm.d
  e6a08fb4d7276775840f8fde15eb008e  libphobos/src/std/internal/unicode_tables.d
! 45087463db98822e8c5121d00d783e28  libphobos/src/std/internal/windows/advapi32.d
! ff098a8e6d203a5b822bf93bd6e0605c  libphobos/src/std/json.d
! 78fa808fea55910a072c7c5de2c7ce25  libphobos/src/std/math/algebraic.d
! 3cee3970cfe6bcde0d4b6c640b9aae04  libphobos/src/std/math/constants.d
! 0f65af40d75f61407d4a877161fdcecb  libphobos/src/std/math/exponential.d
! af3a6f3c0633b36813cccbcb45cd02e0  libphobos/src/std/math/hardware.d
! 2bd137ace1ef5ead9356f66cd6860015  libphobos/src/std/math/operations.d
! 4838003d42a801c32236eb898c6354e5  libphobos/src/std/math/package.d
! 88694133c2ab2068b6250dbc41d3cb48  libphobos/src/std/math/remainder.d
! 35f0b8962df2c67d8d595957cd2fd6a3  libphobos/src/std/math/rounding.d
! e8bd9e50e4db07d1a28a96f8bef435c6  libphobos/src/std/math/traits.d
! 55ca736fc24cd43f2cbdf17dc56f8464  libphobos/src/std/math/trigonometry.d
! 7fa986b6825d8e7e1d7602c9fae96379  libphobos/src/std/mathspecial.d
! cab725491843dffe529d75799116997c  libphobos/src/std/meta.d
! 219b276950687ac0f45a709c41071910  libphobos/src/std/mmfile.d
! 472d46fd602a43a52dc94e6db1b2b0f4  libphobos/src/std/net/curl.d
! c8b18b34f9ff72e666e93c31469c4e16  libphobos/src/std/net/isemail.d
! 2d2e8fddc0a84131b9aedfde795785d3  libphobos/src/std/numeric.d
! 1c4cf1055ad2af321798d32796bdbe63  libphobos/src/std/outbuffer.d
! 1670d32f41ebee6dcca7be11d7b8e571  libphobos/src/std/package.d
! 2563cd40c065bc220cdc6324cf785334  libphobos/src/std/parallelism.d
! 8a0c51dc07b8af1e21dee3aab4abfb82  libphobos/src/std/path.d
! f3c4a1dedd7c006d3d6e27c799395092  libphobos/src/std/process.d
! 610399b87ff898840defd6917de060e9  libphobos/src/std/random.d
! c5cd4fcc3bcab89448fcfebb69227b4d  libphobos/src/std/range/interfaces.d
! 471179ea6d4e9e6825e0395a1393e979  libphobos/src/std/range/package.d
! b13333dc7b9cff802e232ce18d3faca1  libphobos/src/std/range/primitives.d
! 5a09afc95efa24ecdcec9b5f358e4c9d  libphobos/src/std/regex/internal/backtracking.d
! 44883eb43e246b6b244c1ff51ebf2822  libphobos/src/std/regex/internal/generator.d
! 01c86d99e9f6ec573a51963bd681e3b1  libphobos/src/std/regex/internal/ir.d
! 12c8dadaebb3d1657fa4dce91b6111d4  libphobos/src/std/regex/internal/kickstart.d
! 14af6103fec5f984956cc414e1352bdf  libphobos/src/std/regex/internal/parser.d
! ac0a9a606c95c4c1632599630d77cac4  libphobos/src/std/regex/internal/tests.d
! 25f5ce0273dbf7fcc617aeb2137a0e7d  libphobos/src/std/regex/internal/tests2.d
! aeaabeccb20b26b961df5a92a0216c53  libphobos/src/std/regex/internal/thompson.d
! caad90c0a9ca6ba1192ea203e58e4b90  libphobos/src/std/regex/package.d
! ece83ca6b8d7d3df554ca657bdcc387d  libphobos/src/std/signals.d
! 2e18604e17b573b0c1152d628dcac702  libphobos/src/std/socket.d
! 65fa3f6f1125566206c3a4ac3e8adfe3  libphobos/src/std/stdint.d
! f0b9ea54af663ee59d75f104c5271003  libphobos/src/std/stdio.d
! 25fc7625a3d6db6461604c7d9a2b61c9  libphobos/src/std/string.d
! f0a368222f2eb4ba986cce7bb91802ce  libphobos/src/std/sumtype.d
! 743fc73fb5b932ab501e2690fb60f287  libphobos/src/std/system.d
! 16bee9a601a5394901ad560af671980b  libphobos/src/std/traits.d
! 16ba66f806257498ac27662a0c30fef0  libphobos/src/std/typecons.d
! 8592c7afe7a1de32c25d04e3fa0f2bca  libphobos/src/std/typetuple.d
! 745692defd8651a1789b4bfc936271a1  libphobos/src/std/uni/package.d
! c2ff190df1f5298cbcc40494150b1d48  libphobos/src/std/uri.d
! 360afd8c5a7d003999e25d9f306b2aaa  libphobos/src/std/utf.d
! 3a666d69aed573579bcbef378706e687  libphobos/src/std/uuid.d
! 06feadc915c94a6adc156e6db485e105  libphobos/src/std/variant.d
! fb2675bdcc716cb272a59ab642e3b40b  libphobos/src/std/windows/charset.d
! c5a7166449af8fb4862d571e041de6f2  libphobos/src/std/windows/registry.d
! 2d02a363c97346a106c63e9894a52b65  libphobos/src/std/windows/syserror.d
! 7838ae96af62a266c6a826c9797cb5f6  libphobos/src/std/xml.d
! 87f26ae34d849b4750d292a331ff26aa  libphobos/src/std/zip.d
! 4e04d19560e31a1b8b799dd43fcd51f8  libphobos/src/std/zlib.d
! afc465514015e7585c73dca64c6730f1  libphobos/testsuite/Makefile.am
  a13be93a99fb4f3ac1cd895ac34c9305  libphobos/testsuite/Makefile.in
! 1ad916826d76bc238dc08d94e88e9bae  libphobos/testsuite/config/default.exp
! e30cd73053f5f8c54f14b50750017438  libphobos/testsuite/lib/libphobos-dg.exp
! feefacfdebf14310890cecebab127e07  libphobos/testsuite/lib/libphobos.exp
! f5872102569ae6573ee1d84cec7ac9fe  libphobos/testsuite/libphobos.aa/aa.exp
! f242f91c78645f5850aa6ef68c87ebab  libphobos/testsuite/libphobos.aa/test_aa.d
! d86b969dda21cc9af1483872e4a3dcc8  libphobos/testsuite/libphobos.allocations/alloc_from_assert.d
! 0ad611065de7b103ec02d24117f344ff  libphobos/testsuite/libphobos.allocations/allocations.exp
  7dfee0831ce08cfd971056dee5ce8519  libphobos/testsuite/libphobos.allocations/overflow_from_existing.d
  39b50d25dc11230fd4d61a9d7c8cf7a0  libphobos/testsuite/libphobos.allocations/overflow_from_zero.d
  94c17250a195da16fb246ef8e28d3477  libphobos/testsuite/libphobos.allocations/tls_gc_integration.d
! e78e9cd09e4f036e64735a40b81a84b0  libphobos/testsuite/libphobos.betterc/betterc.exp
! 62bfbf82ba7ca2ce9c06e31251b5f47c  libphobos/testsuite/libphobos.betterc/test18828.d
! 2ffa89e25b800dccc9be63ee4390ba9c  libphobos/testsuite/libphobos.betterc/test19416.d
! 30aa08f7286c05e97e1c42ab62639574  libphobos/testsuite/libphobos.betterc/test19421.d
! 6054c54ba4f38d82f841383c51fbad63  libphobos/testsuite/libphobos.betterc/test19561.d
! 8722fd8cd1adf0c7b508b9ce02328eb8  libphobos/testsuite/libphobos.betterc/test19924.d
! dff431eaf273342c672aaf2c74ab92a6  libphobos/testsuite/libphobos.betterc/test19933.d
! ac1556b23f971f5009959fb07f8166bf  libphobos/testsuite/libphobos.betterc/test20088.d
! 3589455e03e693d6f583052b791e5f4f  libphobos/testsuite/libphobos.betterc/test20613.d
! a3cb48ed7c054296fe69ea02aaa283ef  libphobos/testsuite/libphobos.betterc/test22336.d
! 252f8c0979c71ceb86fcfc6acb6420ad  libphobos/testsuite/libphobos.config/config.exp
! 0e3c934dac31e4a869413c3f3969211e  libphobos/testsuite/libphobos.config/test19433.d
! 4c5e592032e7cbd4c033dc9af9201db0  libphobos/testsuite/libphobos.config/test20459.d
! 4cda878bfbdcad844a4124b36664f4a8  libphobos/testsuite/libphobos.config/test22523.d
! 088997f6a40befa87a66e2a71738f7bf  libphobos/testsuite/libphobos.cycles/cycles.exp
  1d8fc1ccfee07e211685dad723c7c5ef  libphobos/testsuite/libphobos.cycles/mod1.d
  504ac65b81c5b13426dbccb387e5ea96  libphobos/testsuite/libphobos.cycles/mod2.d
  8fd2e066de9b173803c23766ec268bc6  libphobos/testsuite/libphobos.cycles/mod3.d
! 203bcc2119bc9af43db3f0e5b09d6948  libphobos/testsuite/libphobos.druntime/druntime.exp
! 37912e90d87534d65427108bfb6512a8  libphobos/testsuite/libphobos.druntime_shared/druntime_shared.exp
! 1b0ad49679c9a06598cfe65b1f98773d  libphobos/testsuite/libphobos.exceptions/assert_fail.d
! 0853067452a85c65ff3629b907628f4d  libphobos/testsuite/libphobos.exceptions/catch_in_finally.d
  53adf2e14495ca10a85a32022b69fa86  libphobos/testsuite/libphobos.exceptions/chain.d
! 0ad611065de7b103ec02d24117f344ff  libphobos/testsuite/libphobos.exceptions/exceptions.exp
! d595be7092b8db6d94bfdad2f3582157  libphobos/testsuite/libphobos.exceptions/future_message.d
  17d3680e349b715f2c8ae4cd23ab5dc5  libphobos/testsuite/libphobos.exceptions/invalid_memory_operation.d
  f20a3bb9bc82bda410377ab87e9dfa75  libphobos/testsuite/libphobos.exceptions/line_trace.d
+ 5204c2c6007dd17d2eef187695f8c022  libphobos/testsuite/libphobos.exceptions/long_backtrace_trunc.d
+ 70b76ebf678e92adfb039cba075728ee  libphobos/testsuite/libphobos.exceptions/message_with_null.d
+ fd11b15c92352dad4e470062d7148517  libphobos/testsuite/libphobos.exceptions/refcounted.d
+ debfe4beaf54e77109e0c996fbdc45a7  libphobos/testsuite/libphobos.exceptions/rt_trap_exceptions.d
+ d0b0d163e054a715940a0b8c19fc84a2  libphobos/testsuite/libphobos.exceptions/rt_trap_exceptions_drt.d
  bf5b834c84dce34c411728d08e740501  libphobos/testsuite/libphobos.exceptions/static_dtor.d
  31f5d626ceb6296159b2ba424ee49c32  libphobos/testsuite/libphobos.exceptions/stderr_msg.d
  1f17216ed3cb74970b34edf1fe76623d  libphobos/testsuite/libphobos.exceptions/unittest_assert.d
! 68b182a855dd5d72a6c0afd27961c698  libphobos/testsuite/libphobos.exceptions/unknown_gc.d
! b6ebfcdaf3a8630eae6d2fea0200d718  libphobos/testsuite/libphobos.gc/attributes.d
! 5becf076c0fa4681b6900d0d305d77c1  libphobos/testsuite/libphobos.gc/forkgc.d
! 8af09af86fcec343cb88000da6cfb030  libphobos/testsuite/libphobos.gc/forkgc2.d
! 774f5323f130348fc511b3351208502e  libphobos/testsuite/libphobos.gc/gc.exp
! 2edada512091a3b4061f7667900f9563  libphobos/testsuite/libphobos.gc/nocollect.d
! 96e067519bb8d41abce482b6595333aa  libphobos/testsuite/libphobos.gc/precisegc.d
! 84728e02159c56717e2c7bbd57b0b7ea  libphobos/testsuite/libphobos.gc/recoverfree.d
! 72c768e90bab4bb63d0d95c0f1d95f23  libphobos/testsuite/libphobos.gc/sigmaskgc.d
! 1c1428f89e3640506d3d1b88c74aa9cd  libphobos/testsuite/libphobos.gc/startbackgc.d
! f5872102569ae6573ee1d84cec7ac9fe  libphobos/testsuite/libphobos.hash/hash.exp
! 09b51557521e7370eafd85d775bc966a  libphobos/testsuite/libphobos.hash/test_hash.d
! d132751bd41e111dc5e97a83ea5cfe55  libphobos/testsuite/libphobos.imports/bug18193.d
! 5cdb4be813171fbb60ca58574db9efc0  libphobos/testsuite/libphobos.imports/imports.exp
! b418376d78eb3705708a6bc984fa2b81  libphobos/testsuite/libphobos.init_fini/custom_gc.d
! ea54c346265b64ff5d368d8a2197b96b  libphobos/testsuite/libphobos.init_fini/init_fini.exp
  b6bbf47234f6bdb61c628cae44fb04f9  libphobos/testsuite/libphobos.init_fini/runtime_args.d
+ 6e0f2e6611c4974eb8f6ad893e3243c9  libphobos/testsuite/libphobos.init_fini/test18996.d
  6cf643d2e05d4806362cf62c56562e5e  libphobos/testsuite/libphobos.init_fini/thread_join.d
! f237366ab4e39b3e3dcfc8bafcde881e  libphobos/testsuite/libphobos.lifetime/large_aggregate_destroy_21097.d
! 774f5323f130348fc511b3351208502e  libphobos/testsuite/libphobos.lifetime/lifetime.exp
! fe0aaf2a9d16a6e33b12d3bb749eb865  libphobos/testsuite/libphobos.phobos/phobos.exp
! 8cb9e1202957667ec0d675940e1df7d0  libphobos/testsuite/libphobos.phobos_shared/phobos_shared.exp
  dc9924675718952b484eadd2d458553a  libphobos/testsuite/libphobos.shared/finalize.d
! a0025a5aec846b3bd54d13311de970b6  libphobos/testsuite/libphobos.shared/host.c
  568552f233800fa4522238fe4c907fb7  libphobos/testsuite/libphobos.shared/lib.d
  a2ec8376ef41cae7c91b91843957a44f  libphobos/testsuite/libphobos.shared/lib_13414.d
  4538bd3ced980e1cc5a073892e5a6956  libphobos/testsuite/libphobos.shared/liblinkdep.d
*************** df4c464d966dbbdce054e9d59018c866  libpho
*** 96877,96909 ****
  340fc149cbdf6ac40e4f428449dcb727  libphobos/testsuite/libphobos.shared/linkDR.c
  218cf26adf1ed3f070b0c1ef175470d1  libphobos/testsuite/libphobos.shared/link_linkdep.d
  862d1eb656698b20b66f9843eea6e32b  libphobos/testsuite/libphobos.shared/link_loaddep.d
! ce1cca84db12670da99d6c1153de8dd9  libphobos/testsuite/libphobos.shared/link_mod_collision.d
! ddef1f361e008f5ce61140281cc4086f  libphobos/testsuite/libphobos.shared/load.d
  711cc924e2b8a6f3068bb79a36567d51  libphobos/testsuite/libphobos.shared/loadDR.c
! c2d7d8743684246c1910e1f5b7886bf4  libphobos/testsuite/libphobos.shared/load_13414.d
  153e2bfb582dbfcdbcdcea85ff915dc9  libphobos/testsuite/libphobos.shared/load_linkdep.d
  d3c9a66f75a4c0e9517bb616aa64dbf0  libphobos/testsuite/libphobos.shared/load_loaddep.d
- 7296c8b58a8ecd96b9e356bc9b48f141  libphobos/testsuite/libphobos.shared/load_mod_collision.d
  7208bfcc87f14bf3c973fd0046246456  libphobos/testsuite/libphobos.shared/plugin.d
! 937c57ed50388766f10b6ef01e2bfd52  libphobos/testsuite/libphobos.shared/shared.exp
! b32be97cb294b7836a5e6d15a92b9047  libphobos/testsuite/libphobos.thread/fiber_guard_page.d
! 52aa82eb55841708ea1accdcab5dfc19  libphobos/testsuite/libphobos.thread/thread.exp
! 47f6734418d71269ebe08d8f12ec205f  libphobos/testsuite/libphobos.thread/tlsgc_sections.d
  78729aa84444a843eaada3c2e3a17e43  libphobos/testsuite/libphobos.typeinfo/comparison.d
  f0442e8b8974938ded0d17389f8b0608  libphobos/testsuite/libphobos.typeinfo/struct-align.d
! 245b43d36cad9840fce44fbf4358d424  libphobos/testsuite/libphobos.typeinfo/typeinfo.exp
! 9b10185286c1d2167a91a48b650c30fd  libphobos/testsuite/testsuite_flags.in
  a916467b91076e631dd8edb7424769c7  libquadmath/COPYING.LIB
! 082fc14a59e440c9da61462ac0a56041  libquadmath/ChangeLog
  4696eddf264dd090e144b4849b0a6d91  libquadmath/Makefile.am
  644a78a01d94abe28b364eaa21142d82  libquadmath/Makefile.in
  d9afbc1f1e04c7e461265ff9323cc6f4  libquadmath/acinclude.m4
  1a1d1b5a61d685d544d98ec2e4b86d5a  libquadmath/aclocal.m4
  cf5a7864ff15ab4dd1604e0f6fe4e501  libquadmath/config.h.in
! 7b01e196ad5d8354ad07398ee5c470fe  libquadmath/configure
! 279cb151e8c43d5af048eb1a9608a435  libquadmath/configure.ac
! 4181c78dc5377afc7ef8c3c5c3ad4107  libquadmath/libquadmath.info
! f698e3dbcbae17420f2b72b77578ea17  libquadmath/libquadmath.texi
  77280bb7ee423875e03d9c0d34527df6  libquadmath/libtool-version
  452fee0ef153d65eb7413a5103c63a23  libquadmath/math/acoshq.c
  c4c7d5ffedb33360fdfb16dc037faf46  libquadmath/math/acosq.c
--- 103684,103724 ----
  340fc149cbdf6ac40e4f428449dcb727  libphobos/testsuite/libphobos.shared/linkDR.c
  218cf26adf1ed3f070b0c1ef175470d1  libphobos/testsuite/libphobos.shared/link_linkdep.d
  862d1eb656698b20b66f9843eea6e32b  libphobos/testsuite/libphobos.shared/link_loaddep.d
! 12efd99195ffd7d8cd31ea284fcfbd8c  libphobos/testsuite/libphobos.shared/load.d
  711cc924e2b8a6f3068bb79a36567d51  libphobos/testsuite/libphobos.shared/loadDR.c
! 603b25d8463e350760f195ff23511f7c  libphobos/testsuite/libphobos.shared/load_13414.d
  153e2bfb582dbfcdbcdcea85ff915dc9  libphobos/testsuite/libphobos.shared/load_linkdep.d
  d3c9a66f75a4c0e9517bb616aa64dbf0  libphobos/testsuite/libphobos.shared/load_loaddep.d
  7208bfcc87f14bf3c973fd0046246456  libphobos/testsuite/libphobos.shared/plugin.d
! b833b7968232fbbab07fd74de1cff2c2  libphobos/testsuite/libphobos.shared/shared.exp
! d76a16e148ca6be28bb070949f541b19  libphobos/testsuite/libphobos.thread/external_threads.d
! 2d54a30ddb78b9f0a38814a319846450  libphobos/testsuite/libphobos.thread/fiber_guard_page.d
! 3e309c288aff9749089ac68af091756f  libphobos/testsuite/libphobos.thread/join_detach.d
! 42d85aa4daa1f572a3dd573c6b4a7b79  libphobos/testsuite/libphobos.thread/test_import.d
! 0ad611065de7b103ec02d24117f344ff  libphobos/testsuite/libphobos.thread/thread.exp
! d57071e219935d7e85956a6a6cffdee8  libphobos/testsuite/libphobos.thread/tlsgc_sections.d
! 2ae1787b8a29d9e252614d3d8c1c2e1e  libphobos/testsuite/libphobos.thread/tlsstack.d
! 78f60a158455ee76966df72c07eb01b2  libphobos/testsuite/libphobos.traits/all_satisfy.d
! 774f5323f130348fc511b3351208502e  libphobos/testsuite/libphobos.traits/traits.exp
  78729aa84444a843eaada3c2e3a17e43  libphobos/testsuite/libphobos.typeinfo/comparison.d
+ 022137c81bdd2f5b3a98cba92fdad9a7  libphobos/testsuite/libphobos.typeinfo/enum_.d
+ 42891afbce3f3a03e17ba0e0e4b6dadd  libphobos/testsuite/libphobos.typeinfo/isbaseof.d
  f0442e8b8974938ded0d17389f8b0608  libphobos/testsuite/libphobos.typeinfo/struct-align.d
! ea54c346265b64ff5d368d8a2197b96b  libphobos/testsuite/libphobos.typeinfo/typeinfo.exp
! d3ca33295a3a7d8dce98defab11dd626  libphobos/testsuite/libphobos.unittest/customhandler.d
! 0a20e31851bfeb7af5c833abe63b3ba1  libphobos/testsuite/libphobos.unittest/unittest.exp
! bf9a9859c3d5e0581c756501aefba7b9  libphobos/testsuite/testsuite_flags.in
  a916467b91076e631dd8edb7424769c7  libquadmath/COPYING.LIB
! e3f7f0f55f59ea40c6e5119f581af5f0  libquadmath/ChangeLog
  4696eddf264dd090e144b4849b0a6d91  libquadmath/Makefile.am
  644a78a01d94abe28b364eaa21142d82  libquadmath/Makefile.in
  d9afbc1f1e04c7e461265ff9323cc6f4  libquadmath/acinclude.m4
  1a1d1b5a61d685d544d98ec2e4b86d5a  libquadmath/aclocal.m4
  cf5a7864ff15ab4dd1604e0f6fe4e501  libquadmath/config.h.in
! 29f1dc1d4d1b2c2dde209fe86503326b  libquadmath/configure
! 06e51379889d00dc467f2a2d496fa0a7  libquadmath/configure.ac
! 55a678900745923204845727e13ed8c3  libquadmath/libquadmath.info
! b19dc24b5767bb9f3e4d7b3bb50f9f47  libquadmath/libquadmath.texi
  77280bb7ee423875e03d9c0d34527df6  libquadmath/libtool-version
  452fee0ef153d65eb7413a5103c63a23  libquadmath/math/acoshq.c
  c4c7d5ffedb33360fdfb16dc037faf46  libquadmath/math/acosq.c
*************** a81cc82679e80c86cfbd5575867450d0  libqua
*** 97034,97168 ****
  af84fa5118f4adec8393614994e1c4d6  libquadmath/strtod/strtoflt128.c
  d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
  12c73a846f7668d29de720bd79502bef  libquadmath/update-quadmath.py
! b292904740befccece28f220ae057841  libsanitizer/ChangeLog
  63916ba64a3cfa7ce2809fb46ab38597  libsanitizer/HOWTO_MERGE
  0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
! 4b97cb7f10927471b74a1536f5472643  libsanitizer/LOCAL_PATCHES
! 020d73e585a109be07580b930d4f8efd  libsanitizer/MERGE
! 070b22e4af6b91b74a465f4cec5b59e8  libsanitizer/Makefile.am
! c8d39f0bf0aeeb7dbd74e4bcaf219b0f  libsanitizer/Makefile.in
  af677523339d9108ea25d6905226bf0a  libsanitizer/README.gcc
  9fefac8c0974bfaa97f7bd2eba2ecb55  libsanitizer/acinclude.m4
! 3e95ebc3e885f5937a99e76009d4bf78  libsanitizer/aclocal.m4
! 55f3f71c4cc613a257e8ddd792b91d6a  libsanitizer/asan/Makefile.am
! ac450965101bb600287e4c45ed96cc32  libsanitizer/asan/Makefile.in
  95fe7ddd3619047b1789dacbf0905dba  libsanitizer/asan/asan_activation.cpp
  49679f380cb38cd6671d4d18b3c103e2  libsanitizer/asan/asan_activation.h
  acd6633a0710d8be6454db6d024d7aa9  libsanitizer/asan/asan_activation_flags.inc
! 657b7c01211e1500dfc24ffec381a05e  libsanitizer/asan/asan_allocator.cpp
! ee92172d838335e71cb4d7c250888a63  libsanitizer/asan/asan_allocator.h
! efe8748a992ee28fbb7cf3767f4c872d  libsanitizer/asan/asan_debugging.cpp
! 09fdd7d7cf90f1a76dee6dbe6a32e44f  libsanitizer/asan/asan_descriptions.cpp
! d02234d10635c3d0489d656daa5fa47f  libsanitizer/asan/asan_descriptions.h
! 183fa43df82b52fe4b7310508bf4450b  libsanitizer/asan/asan_errors.cpp
  1d5de746827142d7ea1943556d298756  libsanitizer/asan/asan_errors.h
! 2cfebe883cd41f184334eb6ca1c41b9f  libsanitizer/asan/asan_fake_stack.cpp
  a15f0895968debeada4576d3f50cd49f  libsanitizer/asan/asan_fake_stack.h
! a9a92abd9f935775712cc15525cf3f06  libsanitizer/asan/asan_flags.cpp
  62bf4dd74e13c5de98bece330fca0dae  libsanitizer/asan/asan_flags.h
! d1c9d6ab30c5a2c49cc292ed78970aec  libsanitizer/asan/asan_flags.inc
! 7327417056adc5eec500d86950ed917a  libsanitizer/asan/asan_fuchsia.cpp
! 70b118d5e33ff23fe15dae5e02f0d9ea  libsanitizer/asan/asan_globals.cpp
  6f0a3e5b544abc4a7e05109d94bc01f6  libsanitizer/asan/asan_globals_win.cpp
  70bdc70f05ca1bf6f615ea7609e3bf8c  libsanitizer/asan/asan_init_version.h
! 46028b60b69f991457dcbe846946f345  libsanitizer/asan/asan_interceptors.cpp
! 585bb04555a4f07af610378c0fbd0db5  libsanitizer/asan/asan_interceptors.h
! d16e968834fb08491e8bd8187ff2430f  libsanitizer/asan/asan_interceptors_memintrinsics.cpp
  74aac85222c7e2a49a37c5d6d6eef525  libsanitizer/asan/asan_interceptors_memintrinsics.h
  0a948195ce48643ed8bf2a408f34139f  libsanitizer/asan/asan_interceptors_vfork.S
! e64899305d01254f317b0a0101e04e57  libsanitizer/asan/asan_interface.inc
  0ef4a03be11df9ef0907f857904612cd  libsanitizer/asan/asan_interface_internal.h
! b2d0b3ddb40abcef5cc5540d41362590  libsanitizer/asan/asan_internal.h
! c7d170a96441edb85be872bfa2afbf4e  libsanitizer/asan/asan_linux.cpp
  d41d8cd98f00b204e9800998ecf8427e  libsanitizer/asan/asan_lock.h
  0982c46c224d6935989e45d1745fab1e  libsanitizer/asan/asan_mac.cpp
! 24e4f4a5b92e8f8d7f71f5377ab452f2  libsanitizer/asan/asan_malloc_linux.cpp
! 71856c7aeab5f4ab5245d696e364f23a  libsanitizer/asan/asan_malloc_local.h
  2bb6ed3c14824117e69719ed5be917f4  libsanitizer/asan/asan_malloc_mac.cpp
  ad791013449cae9daa0b4ec69efa1ab8  libsanitizer/asan/asan_malloc_win.cpp
! dc147668f9368546c106d487229e0ef2  libsanitizer/asan/asan_mapping.h
! 375ef070698f18947fc62a996458b6f1  libsanitizer/asan/asan_mapping_myriad.h
  02919456959330f6eb64ef743f43f0c9  libsanitizer/asan/asan_mapping_sparc64.h
  1d6e119ce3ae5fb54b0de58087c07392  libsanitizer/asan/asan_memory_profile.cpp
! df7f6f214bae98741d56eb846dce787a  libsanitizer/asan/asan_new_delete.cpp
! 3dbbec86a2a5d3354c39f723879652a2  libsanitizer/asan/asan_poisoning.cpp
! acb0afb7b450c53a1e77e6cb22244e8d  libsanitizer/asan/asan_poisoning.h
! 1005d495564b8276b01c78b4b69441f3  libsanitizer/asan/asan_posix.cpp
  72bdf1b7e38d574b81f7eda5e24a7341  libsanitizer/asan/asan_preinit.cpp
  dafabda2dd9c06fc4a26b5dd8bf4717b  libsanitizer/asan/asan_premap_shadow.cpp
  a116a301835f4803dda6ba547a4efb13  libsanitizer/asan/asan_premap_shadow.h
! abe0bd33f8ae0be518474ee31e17a4df  libsanitizer/asan/asan_report.cpp
  446fa0a0c19f36c3e72a9b18c5aacc2d  libsanitizer/asan/asan_report.h
! 4d87e1a5f426afe302f2bd712f18257c  libsanitizer/asan/asan_rtems.cpp
! d9426b73fde0f81c91f9966a8836ecc2  libsanitizer/asan/asan_rtl.cpp
  7a66ee99b1b671c738ca237415ef25b8  libsanitizer/asan/asan_scariness_score.h
! 5c2f75c6c1313619dfbdd2e7e69d0087  libsanitizer/asan/asan_shadow_setup.cpp
! 8cb86aec8b62e684309ecf0ce74aa6e7  libsanitizer/asan/asan_stack.cpp
! 42492d06c2785f69f2a16ad7cfc63c91  libsanitizer/asan/asan_stack.h
! bb9764c02889b8a287b178dd518a6581  libsanitizer/asan/asan_stats.cpp
  89151303b3f73f562ecdcb3835396dee  libsanitizer/asan/asan_stats.h
  a2311345c440ff8eb171ae9fa30980b6  libsanitizer/asan/asan_suppressions.cpp
  8ab11db904fc944b69ba16601317c1c7  libsanitizer/asan/asan_suppressions.h
! 6240f3af19547519077f2653db981c00  libsanitizer/asan/asan_thread.cpp
! 6b6bbe7f7b8238b0de1b1219b9a3790f  libsanitizer/asan/asan_thread.h
! 614e84099db77267fe0d0faf603f1bf3  libsanitizer/asan/asan_win.cpp
  04f1f4ed8494f257b85b04acb5ba1429  libsanitizer/asan/asan_win_dll_thunk.cpp
  c38c4aad80d927b2557c5e1699d5ad04  libsanitizer/asan/asan_win_dynamic_runtime_thunk.cpp
  92464876ef7c58cb739f8dbb05e2f3a9  libsanitizer/asan/asan_win_weak_interception.cpp
! b0666c8f23d627e872a9a54b1a201cec  libsanitizer/asan/libtool-version
! 5e33ed31fe41aaddda140fbff4ce0a62  libsanitizer/builtins/assembly.h
  4d6948c4912be5da16e30aac001b87d7  libsanitizer/config.h.in
! 71791af9e7d64000760bb85e094f90bd  libsanitizer/configure
! b3d0b12bf4f8383e0827e526087737cb  libsanitizer/configure.ac
! ebd023260ace15db0db0a8e46ee9efa1  libsanitizer/configure.tgt
! cc44a43ab9d9eda272e30cd495ce110f  libsanitizer/hwasan/Makefile.am
! 4145fee4229c812edebc4f61974d28de  libsanitizer/hwasan/Makefile.in
! d7b2b70db329a1129a9bed7c9f516b5d  libsanitizer/hwasan/hwasan.cpp
! 7751f58fd14a782e9c68d8c83702f0bb  libsanitizer/hwasan/hwasan.h
! 8beb6730eaa8c2f8bacbe3c6617b8668  libsanitizer/hwasan/hwasan_allocator.cpp
! 05dca677617b2386811b03d54f0832f1  libsanitizer/hwasan/hwasan_allocator.h
! e891daf3d4e0e7e4980fd15fbd87214d  libsanitizer/hwasan/hwasan_checks.h
! 9e13f86d83a5c8a7048f6d6a274915e0  libsanitizer/hwasan/hwasan_dynamic_shadow.cpp
  d2c53fada53bfee78b11f99e297aed7b  libsanitizer/hwasan/hwasan_dynamic_shadow.h
! 2d23dce5938d99923f83e2d93c15f07b  libsanitizer/hwasan/hwasan_exceptions.cpp
! 88a12cde40ae4429b0c9a2f128894e99  libsanitizer/hwasan/hwasan_flags.h
! 631ca201320c44e3e577206e7b7ee27e  libsanitizer/hwasan/hwasan_flags.inc
  8b0d27d2990e7a5abefa41c4b95a0b6f  libsanitizer/hwasan/hwasan_globals.cpp
  7050574c89f5706695578f62a6ead34e  libsanitizer/hwasan/hwasan_globals.h
! 67a6a7e6c6dddeeed46a0fa544f9e1f3  libsanitizer/hwasan/hwasan_interceptors.cpp
! e342ab75f732f28c79f631aca00b5013  libsanitizer/hwasan/hwasan_interceptors_vfork.S
! ccb82a33af1ed139388c973973c74c8e  libsanitizer/hwasan/hwasan_interface_internal.h
! 9aed6858728a8dad071db315e7319938  libsanitizer/hwasan/hwasan_linux.cpp
  2ee3ae16d29b69720e9f2512908a45b5  libsanitizer/hwasan/hwasan_malloc_bisect.h
! ed70218d108ab3e3251b2f9a22d0d67b  libsanitizer/hwasan/hwasan_mapping.h
! efbdd779145141823082c48a4ad53c41  libsanitizer/hwasan/hwasan_memintrinsics.cpp
! aac0d87d95144a9ce8db025b95dc92ee  libsanitizer/hwasan/hwasan_new_delete.cpp
! c804d0ccb4271188b656229cb457efcb  libsanitizer/hwasan/hwasan_poisoning.cpp
  dbbf5a6219c3628eace17cf1d008c47a  libsanitizer/hwasan/hwasan_poisoning.h
! 4471f7ae84a8840ec7de94392467f8f7  libsanitizer/hwasan/hwasan_report.cpp
  b654d3bf43a1885c15c7c532f2b80593  libsanitizer/hwasan/hwasan_report.h
! 05e9b01c45a051d7c23f1a2fb36647f0  libsanitizer/hwasan/hwasan_setjmp.S
! 08ef6d0b3d26eb842b39d4b18007981f  libsanitizer/hwasan/hwasan_tag_mismatch_aarch64.S
! 17fae4a3e13b65d4b30bc49d7c0b4846  libsanitizer/hwasan/hwasan_thread.cpp
! 10a629cbb854905fbc283e9a6de688eb  libsanitizer/hwasan/hwasan_thread.h
! 8a277c2106a3322632345828ffd77237  libsanitizer/hwasan/hwasan_thread_list.cpp
! 61174c902f062d5420ad26a2d5cc11a1  libsanitizer/hwasan/hwasan_thread_list.h
! 27b02d0cf05eb6997418e27440efbaa9  libsanitizer/hwasan/hwasan_type_test.cpp
  c2d591f0e8a0a7d8a274ee310042f00c  libsanitizer/hwasan/libtool-version
  62164e6387eaa4f03566444e00018275  libsanitizer/include/sanitizer/allocator_interface.h
! d15385fa189a19d55a4dbab26ba7055b  libsanitizer/include/sanitizer/asan_interface.h
! 67fa207c563b03d0529149c3f2a9eccd  libsanitizer/include/sanitizer/common_interface_defs.h
  2473b60a7a21e100e8373bfe0d6b6aef  libsanitizer/include/sanitizer/coverage_interface.h
! 01b353fb748cf7fb72897f00d34922ce  libsanitizer/include/sanitizer/dfsan_interface.h
! b6b381c0cd9b86557889037633008dec  libsanitizer/include/sanitizer/hwasan_interface.h
! 32d69c8a8a4ee4a80e85f28148f58d53  libsanitizer/include/sanitizer/linux_syscall_hooks.h
  12eef8384005b7381e07c3fadcabbe1d  libsanitizer/include/sanitizer/lsan_interface.h
! dafda38ec4b5bf6106655b34f8d5998b  libsanitizer/include/sanitizer/memprof_interface.h
  3a84e0f703152591b105e71397ff5b61  libsanitizer/include/sanitizer/msan_interface.h
  8cfb31c202da51942d071d62333feafa  libsanitizer/include/sanitizer/netbsd_syscall_hooks.h
  0cd62c0e877b3674d128dc7d69440b19  libsanitizer/include/sanitizer/scudo_interface.h
! b8497d556c1eeff1ddc861e9ee7508b8  libsanitizer/include/sanitizer/tsan_interface.h
! c5941a599594f1b6244644c35900365a  libsanitizer/include/sanitizer/tsan_interface_atomic.h
  1d1427dc8a4b30396a8d300315cb10eb  libsanitizer/include/sanitizer/ubsan_interface.h
  c06732d7b90bf79a06f7aa44d08a1fbb  libsanitizer/include/system/asm/ptrace.h
  7b7bed50874b18703cfc3f3e9405dc93  libsanitizer/include/system/linux/aio_abi.h
--- 103849,103983 ----
  af84fa5118f4adec8393614994e1c4d6  libquadmath/strtod/strtoflt128.c
  d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
  12c73a846f7668d29de720bd79502bef  libquadmath/update-quadmath.py
! 8d5c11d063e59084f2a99d5da1686d01  libsanitizer/ChangeLog
  63916ba64a3cfa7ce2809fb46ab38597  libsanitizer/HOWTO_MERGE
  0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
! eb7d5a3897193a0675d10dd982bfae23  libsanitizer/LOCAL_PATCHES
! d31f7857c9103d4efd56a5160bd7cf55  libsanitizer/MERGE
! 843b9a7b22b34445ab6cc181f7afd30b  libsanitizer/Makefile.am
! 665697c55c3e2c6b0f0ff618a6c54112  libsanitizer/Makefile.in
  af677523339d9108ea25d6905226bf0a  libsanitizer/README.gcc
  9fefac8c0974bfaa97f7bd2eba2ecb55  libsanitizer/acinclude.m4
! 9157157843ddc468aad53af489d0645c  libsanitizer/aclocal.m4
! a17c4fac84d617d97a39525f0f8d4ba7  libsanitizer/asan/Makefile.am
! c3d2f18219c51f82f98f69f703a0a7f1  libsanitizer/asan/Makefile.in
  95fe7ddd3619047b1789dacbf0905dba  libsanitizer/asan/asan_activation.cpp
  49679f380cb38cd6671d4d18b3c103e2  libsanitizer/asan/asan_activation.h
  acd6633a0710d8be6454db6d024d7aa9  libsanitizer/asan/asan_activation_flags.inc
! 257883e851687416ad99606b20115bf4  libsanitizer/asan/asan_allocator.cpp
! 906603fd273bfab66c616ec5615f9f47  libsanitizer/asan/asan_allocator.h
! a23132af27a098da6aa946be3c784d92  libsanitizer/asan/asan_debugging.cpp
! bd111df4b0a5bd83d07d25db03525706  libsanitizer/asan/asan_descriptions.cpp
! 7b358db7fce5735bf54b9bd9ee5fea48  libsanitizer/asan/asan_descriptions.h
! ae3127346e2b634b1895df3d42d42d3a  libsanitizer/asan/asan_errors.cpp
  1d5de746827142d7ea1943556d298756  libsanitizer/asan/asan_errors.h
! e9ab848c34717c09758b2f66f3a4d122  libsanitizer/asan/asan_fake_stack.cpp
  a15f0895968debeada4576d3f50cd49f  libsanitizer/asan/asan_fake_stack.h
! d2fb98699ae8122864970332e38e2f44  libsanitizer/asan/asan_flags.cpp
  62bf4dd74e13c5de98bece330fca0dae  libsanitizer/asan/asan_flags.h
! c91953640148508c60ec898f284e5dcd  libsanitizer/asan/asan_flags.inc
! 73583f3f9f815fc5114ff82531c58399  libsanitizer/asan/asan_fuchsia.cpp
! b41b7686f508d11bbe8e7de0b71e9117  libsanitizer/asan/asan_globals.cpp
  6f0a3e5b544abc4a7e05109d94bc01f6  libsanitizer/asan/asan_globals_win.cpp
  70bdc70f05ca1bf6f615ea7609e3bf8c  libsanitizer/asan/asan_init_version.h
! 838c3698966bd06680179429b228f2c2  libsanitizer/asan/asan_interceptors.cpp
! dfc3478e79bdf3291e96c78fbc32d020  libsanitizer/asan/asan_interceptors.h
! 5cbebdef2336f3a275011ccd0c2c0c62  libsanitizer/asan/asan_interceptors_memintrinsics.cpp
  74aac85222c7e2a49a37c5d6d6eef525  libsanitizer/asan/asan_interceptors_memintrinsics.h
  0a948195ce48643ed8bf2a408f34139f  libsanitizer/asan/asan_interceptors_vfork.S
! 0ce06d4681f6d7ee274d714005a1e548  libsanitizer/asan/asan_interface.inc
  0ef4a03be11df9ef0907f857904612cd  libsanitizer/asan/asan_interface_internal.h
! ce9007db6a8966eb09faf0813ec360d2  libsanitizer/asan/asan_internal.h
! 7f3143a5fe1de60053e5999e38a4cbc2  libsanitizer/asan/asan_linux.cpp
  d41d8cd98f00b204e9800998ecf8427e  libsanitizer/asan/asan_lock.h
  0982c46c224d6935989e45d1745fab1e  libsanitizer/asan/asan_mac.cpp
! 6781e5f75e4e6ac39e557aabd9cb9b2f  libsanitizer/asan/asan_malloc_linux.cpp
  2bb6ed3c14824117e69719ed5be917f4  libsanitizer/asan/asan_malloc_mac.cpp
  ad791013449cae9daa0b4ec69efa1ab8  libsanitizer/asan/asan_malloc_win.cpp
! 97b4820bed8d819013e86ada4eb8593d  libsanitizer/asan/asan_mapping.h
  02919456959330f6eb64ef743f43f0c9  libsanitizer/asan/asan_mapping_sparc64.h
  1d6e119ce3ae5fb54b0de58087c07392  libsanitizer/asan/asan_memory_profile.cpp
! d079b449d7d80af78598e8ed838b9cfc  libsanitizer/asan/asan_new_delete.cpp
! 426b71a0ac53e3a893d525880b1c39f3  libsanitizer/asan/asan_poisoning.cpp
! 0128d0a616a5156b124abdc1b59074b5  libsanitizer/asan/asan_poisoning.h
! 75893e223daa67d0c01b512f4ea31681  libsanitizer/asan/asan_posix.cpp
  72bdf1b7e38d574b81f7eda5e24a7341  libsanitizer/asan/asan_preinit.cpp
  dafabda2dd9c06fc4a26b5dd8bf4717b  libsanitizer/asan/asan_premap_shadow.cpp
  a116a301835f4803dda6ba547a4efb13  libsanitizer/asan/asan_premap_shadow.h
! 3ba734872f1c4378af2f15dfeed2789f  libsanitizer/asan/asan_report.cpp
  446fa0a0c19f36c3e72a9b18c5aacc2d  libsanitizer/asan/asan_report.h
! 2f5f469f58c4551c627f5de30bae8a35  libsanitizer/asan/asan_rtl.cpp
  7a66ee99b1b671c738ca237415ef25b8  libsanitizer/asan/asan_scariness_score.h
! 8072d65a81c5968f332de2a2db8778f5  libsanitizer/asan/asan_shadow_setup.cpp
! aedac321d57b5a958de5489055d10e24  libsanitizer/asan/asan_stack.cpp
! ef2378d5d211f663586a3171848d1a25  libsanitizer/asan/asan_stack.h
! 74f53dd14917b359233d95b569e5fcd2  libsanitizer/asan/asan_stats.cpp
  89151303b3f73f562ecdcb3835396dee  libsanitizer/asan/asan_stats.h
  a2311345c440ff8eb171ae9fa30980b6  libsanitizer/asan/asan_suppressions.cpp
  8ab11db904fc944b69ba16601317c1c7  libsanitizer/asan/asan_suppressions.h
! 208d91edc7ba57d8e29f5d21ec899b47  libsanitizer/asan/asan_thread.cpp
! 652a05c118cd1b46774248730849bfb3  libsanitizer/asan/asan_thread.h
! d9f330cfc73dcdf38ae149ae5ba719ac  libsanitizer/asan/asan_win.cpp
  04f1f4ed8494f257b85b04acb5ba1429  libsanitizer/asan/asan_win_dll_thunk.cpp
  c38c4aad80d927b2557c5e1699d5ad04  libsanitizer/asan/asan_win_dynamic_runtime_thunk.cpp
  92464876ef7c58cb739f8dbb05e2f3a9  libsanitizer/asan/asan_win_weak_interception.cpp
! faf2a6ac3826446f8109f955fc331f15  libsanitizer/asan/libtool-version
! c50a89dac6948f41e92cfe2a810a13f8  libsanitizer/builtins/assembly.h
  4d6948c4912be5da16e30aac001b87d7  libsanitizer/config.h.in
! b6607b100de9062bd564f1643d34f4b1  libsanitizer/configure
! 2919fdc146a50db5046087746856bd0f  libsanitizer/configure.ac
! 60b96644243456152e202b3863d62262  libsanitizer/configure.tgt
! 67b34ddb7e381b476beabd5723cad66a  libsanitizer/hwasan/Makefile.am
! 86ee1b4ab68f16b6a2d0b2ed9efc94d4  libsanitizer/hwasan/Makefile.in
! cee328f472ec30601c33b88db78e99e9  libsanitizer/hwasan/hwasan.cpp
! da1b462113446b935a990b1e9564ade0  libsanitizer/hwasan/hwasan.h
! 0ad763c8a54a04f00c452466414ab5ad  libsanitizer/hwasan/hwasan_allocation_functions.cpp
! e5d104e172e7a48a92af01a8b8a75b2a  libsanitizer/hwasan/hwasan_allocator.cpp
! 3577e68fdedb30a2b018a8ad98a11f7e  libsanitizer/hwasan/hwasan_allocator.h
! c954372edba4d4ebf0f109fda4ca2862  libsanitizer/hwasan/hwasan_checks.h
! 4cf3a55f32e00047bdea18be105fee25  libsanitizer/hwasan/hwasan_dynamic_shadow.cpp
  d2c53fada53bfee78b11f99e297aed7b  libsanitizer/hwasan/hwasan_dynamic_shadow.h
! c2d26ecd91028632f638e416d9baa771  libsanitizer/hwasan/hwasan_exceptions.cpp
! 9750f099c8028db1b9c972cc7157280a  libsanitizer/hwasan/hwasan_flags.h
! 14db0e2504d76966ad8a11ffea633759  libsanitizer/hwasan/hwasan_flags.inc
! 54a7e02c883e4b024d1318fd9ba33369  libsanitizer/hwasan/hwasan_fuchsia.cpp
  8b0d27d2990e7a5abefa41c4b95a0b6f  libsanitizer/hwasan/hwasan_globals.cpp
  7050574c89f5706695578f62a6ead34e  libsanitizer/hwasan/hwasan_globals.h
! 978af06d0dc26b058530175059feb637  libsanitizer/hwasan/hwasan_interceptors.cpp
! 0ff1272e9d2ece4e771dfba1ecb0d538  libsanitizer/hwasan/hwasan_interceptors_vfork.S
! 0b5e158a5b163494b8bc1a952452eb34  libsanitizer/hwasan/hwasan_interface_internal.h
! ccf313429f143504a7dbde91539cbf80  libsanitizer/hwasan/hwasan_linux.cpp
  2ee3ae16d29b69720e9f2512908a45b5  libsanitizer/hwasan/hwasan_malloc_bisect.h
! 4390a795bf11c5cb596462234bb81e09  libsanitizer/hwasan/hwasan_mapping.h
! 9174b1c62030d599c546bc185df1cdd0  libsanitizer/hwasan/hwasan_memintrinsics.cpp
! 956b57e6395172a411be52bb9d1d4992  libsanitizer/hwasan/hwasan_new_delete.cpp
! 1a7f73da0601ac3a2513cdd5c3cc5127  libsanitizer/hwasan/hwasan_poisoning.cpp
  dbbf5a6219c3628eace17cf1d008c47a  libsanitizer/hwasan/hwasan_poisoning.h
! fcdf5d4ce26e89e8aba8613a526946f4  libsanitizer/hwasan/hwasan_report.cpp
  b654d3bf43a1885c15c7c532f2b80593  libsanitizer/hwasan/hwasan_report.h
! be6af72ba704df21216bd7b113e6c4a3  libsanitizer/hwasan/hwasan_setjmp_aarch64.S
! dcf47771e29a64885d5f4dbabb199b8a  libsanitizer/hwasan/hwasan_setjmp_x86_64.S
! e8316f0fda60b4f54b0b0e58cb239615  libsanitizer/hwasan/hwasan_tag_mismatch_aarch64.S
! 21cded2cd661c60ca2d08990f7ee68c0  libsanitizer/hwasan/hwasan_thread.cpp
! 1bf767f64cb604e1341cee21a7443a4d  libsanitizer/hwasan/hwasan_thread.h
! fcf1e6e0b38d0f6bfea54329fbf30801  libsanitizer/hwasan/hwasan_thread_list.cpp
! 589ca72122cfaf6ef9bb1f98cda7ca9f  libsanitizer/hwasan/hwasan_thread_list.h
! 0515919baf280afc79f60ae7056c0e36  libsanitizer/hwasan/hwasan_type_test.cpp
  c2d591f0e8a0a7d8a274ee310042f00c  libsanitizer/hwasan/libtool-version
  62164e6387eaa4f03566444e00018275  libsanitizer/include/sanitizer/allocator_interface.h
! cb6ab278769580386fbea1eebef0c212  libsanitizer/include/sanitizer/asan_interface.h
! 97a8f6da2dc1086b9b8a8eb168ac6d7f  libsanitizer/include/sanitizer/common_interface_defs.h
  2473b60a7a21e100e8373bfe0d6b6aef  libsanitizer/include/sanitizer/coverage_interface.h
! 0660d3ac4a2c1a982572577e93ce35b2  libsanitizer/include/sanitizer/dfsan_interface.h
! ac959f76745580707a6571ddb3b4892b  libsanitizer/include/sanitizer/hwasan_interface.h
! 4f395991a27a989d213dfa0c300a74c2  libsanitizer/include/sanitizer/linux_syscall_hooks.h
  12eef8384005b7381e07c3fadcabbe1d  libsanitizer/include/sanitizer/lsan_interface.h
! 8132b09a1d1fc1d4c9e18245d41a1da3  libsanitizer/include/sanitizer/memprof_interface.h
  3a84e0f703152591b105e71397ff5b61  libsanitizer/include/sanitizer/msan_interface.h
  8cfb31c202da51942d071d62333feafa  libsanitizer/include/sanitizer/netbsd_syscall_hooks.h
  0cd62c0e877b3674d128dc7d69440b19  libsanitizer/include/sanitizer/scudo_interface.h
! 2da2d961ae6336db717588ce48d4f785  libsanitizer/include/sanitizer/tsan_interface.h
! 0ab0814f62f1092d08d1ef2ef91356c3  libsanitizer/include/sanitizer/tsan_interface_atomic.h
  1d1427dc8a4b30396a8d300315cb10eb  libsanitizer/include/sanitizer/ubsan_interface.h
  c06732d7b90bf79a06f7aa44d08a1fbb  libsanitizer/include/system/asm/ptrace.h
  7b7bed50874b18703cfc3f3e9405dc93  libsanitizer/include/system/linux/aio_abi.h
*************** e0f26bb761d75b6aac187f2c8d755c0b  libsan
*** 97171,97396 ****
  52441feaf66ebf0ecf003bd66b0845a1  libsanitizer/include/system/linux/perf_event.h
  3de6060b4f9ff628820f60672dee5958  libsanitizer/include/system/linux/types.h
  177782c011eb97e4adc68bd2c39b6f84  libsanitizer/include/system/sys/ptrace.h
! 8f1bdadc9e93122c6df478bd1da061cd  libsanitizer/interception/Makefile.am
! b718e59dd1fded8100567fe56a7d4b44  libsanitizer/interception/Makefile.in
! e8b2f35d1d64cd4a827734af05650934  libsanitizer/interception/interception.h
! 74205e1673dbdc65c0674dd496a1e1ef  libsanitizer/interception/interception_linux.cpp
! 2eafdf3a12ed7bc09921982c68be3286  libsanitizer/interception/interception_linux.h
  eb28a680879815dcce016978cbf38c79  libsanitizer/interception/interception_mac.cpp
  fece49ff778064e81bdfc6ad6b84b2b4  libsanitizer/interception/interception_mac.h
  ee840b8af091f87e1b1712cf360ddb50  libsanitizer/interception/interception_type_test.cpp
! 613e3ac48bce41be6acc570d1e5c144c  libsanitizer/interception/interception_win.cpp
  d2397720fce56dc1634db6efb7d0eb22  libsanitizer/interception/interception_win.h
! cb37bab881f5414c69f9d3269d4aabfe  libsanitizer/libbacktrace/Makefile.am
! 922cb7a224e041442df5c82093f3b681  libsanitizer/libbacktrace/Makefile.in
  a998136ffc66ed3a32f65097fb86ec05  libsanitizer/libbacktrace/backtrace-rename.h
  ea35b83ff2eb2bff286f2781693b0cc7  libsanitizer/libbacktrace/backtrace-supported.h.in
  35b2978dd28dbb4048032ad8db998f5c  libsanitizer/libbacktrace/bridge.cc
  afbb83670aebea5034bc386604a01397  libsanitizer/libsanitizer.spec.in
! c4136e6e8ea505237b12759509ab4c2b  libsanitizer/lsan/Makefile.am
! 52171960b1dd2c1d6ce3ea28cb5909bd  libsanitizer/lsan/Makefile.in
  f2f51c768041ab63c956646fa5f7af5b  libsanitizer/lsan/libtool-version
! 8212b5c8ace8dd0aa2862af4f6254ede  libsanitizer/lsan/lsan.cpp
  57ec7ec9a0cc945ab4171610d016f526  libsanitizer/lsan/lsan.h
! 6ecac87c2f9cd69f3228bc7ee4e86cb9  libsanitizer/lsan/lsan_allocator.cpp
! 9c04ba0c9b2eaccfc9b767db73550e34  libsanitizer/lsan/lsan_allocator.h
! 4ac43c065f767c2816c97796160fe979  libsanitizer/lsan/lsan_common.cpp
! 4613ad4296960cd15c1d92590906413c  libsanitizer/lsan/lsan_common.h
! 29a76725191c2e6c8be6ab53fa0a684b  libsanitizer/lsan/lsan_common_fuchsia.cpp
  9b73d8a46a2371dd701e44646d18b37f  libsanitizer/lsan/lsan_common_linux.cpp
! e26831f9ce663d7fe7fa2a1731e20930  libsanitizer/lsan/lsan_common_mac.cpp
  6af587085d16319361de6f118714b293  libsanitizer/lsan/lsan_flags.inc
  e6a6122aacae53ce58e1e1580dafd6ff  libsanitizer/lsan/lsan_fuchsia.cpp
! b1405b2af5d96d313f8364c5af519be5  libsanitizer/lsan/lsan_fuchsia.h
! 264703701bad62012620d9954f125b4e  libsanitizer/lsan/lsan_interceptors.cpp
  112de5191cba37114a27b3c851b03637  libsanitizer/lsan/lsan_linux.cpp
  b02d5934dd8074a40824a4f503348bdc  libsanitizer/lsan/lsan_mac.cpp
  dfff917b961891644801b0380ed93384  libsanitizer/lsan/lsan_malloc_mac.cpp
! 5dbc6024a04d620b5d464635c0c98aee  libsanitizer/lsan/lsan_posix.cpp
  2d218702383904dd6ba0cbb97b0bfd82  libsanitizer/lsan/lsan_posix.h
  7d7a28d8f42ca368b3ffa1b674377b25  libsanitizer/lsan/lsan_preinit.cpp
! f905c006d315ddb1b29393bad2917557  libsanitizer/lsan/lsan_thread.cpp
  2552ec2134fe8c89a703e18b6216eaa2  libsanitizer/lsan/lsan_thread.h
  2f9987fde4c23efc1b95546e481fff85  libsanitizer/merge.sh
! e50e2249541db27cd30444f1c509d37c  libsanitizer/sanitizer_common/Makefile.am
! 283df6d30726fe2197f806a950ddb770  libsanitizer/sanitizer_common/Makefile.in
  d68aa097ee532430d26f11ec81234ed5  libsanitizer/sanitizer_common/sancov_flags.cpp
  1cee185b14a59f3bfc596ac9bf851f89  libsanitizer/sanitizer_common/sancov_flags.h
! a68d04c69558f46a8e18488b1baa260a  libsanitizer/sanitizer_common/sancov_flags.inc
! 6123b794b0b7a8e32fcceb1ab85263c0  libsanitizer/sanitizer_common/sanitizer_addrhashmap.h
! 3cc5bb5117d28744346d33e455f2ca32  libsanitizer/sanitizer_common/sanitizer_allocator.cpp
! 7299be72860678b792a48a98c7f47054  libsanitizer/sanitizer_common/sanitizer_allocator.h
! d2b4005593bbd33bab18f30a02442292  libsanitizer/sanitizer_common/sanitizer_allocator_bytemap.h
  58afe7ee0a8301bc2ee5e0495a5c3720  libsanitizer/sanitizer_common/sanitizer_allocator_checks.cpp
  4ee074df007bb212ba0e23ec75009eca  libsanitizer/sanitizer_common/sanitizer_allocator_checks.h
! d69cf99403562d2206fcfef6915f277c  libsanitizer/sanitizer_common/sanitizer_allocator_combined.h
  742b8a455904e57e1dc253cd94af8343  libsanitizer/sanitizer_common/sanitizer_allocator_interface.h
  239b2e57109dcb876b1522fa7d561e05  libsanitizer/sanitizer_common/sanitizer_allocator_internal.h
! a4d4ae7663608663ea43138c52235e09  libsanitizer/sanitizer_common/sanitizer_allocator_local_cache.h
! c9e4bac921f22bab61497ee61ae2c06a  libsanitizer/sanitizer_common/sanitizer_allocator_primary32.h
! 72e37513966cdf006f4a8073c59827a2  libsanitizer/sanitizer_common/sanitizer_allocator_primary64.h
  1f6d1b3f6f13be09e010540c91a420ff  libsanitizer/sanitizer_common/sanitizer_allocator_report.cpp
  5fca989318db3c792dfeea2a7a028c24  libsanitizer/sanitizer_common/sanitizer_allocator_report.h
! b7c066f10e6606476ba670fd678e0a77  libsanitizer/sanitizer_common/sanitizer_allocator_secondary.h
! 379630954de26a0d0e6f91e96035f372  libsanitizer/sanitizer_common/sanitizer_allocator_size_class_map.h
  a21ea81dbfc52981e1c446285eaf2981  libsanitizer/sanitizer_common/sanitizer_allocator_stats.h
! 605a2893bb09405ed90588fa97e3663d  libsanitizer/sanitizer_common/sanitizer_asm.h
  998bded7a554ef1499c0f9da7137fc8a  libsanitizer/sanitizer_common/sanitizer_atomic.h
! 3bf5070c74e1aecc4b00c5970aeb17c6  libsanitizer/sanitizer_common/sanitizer_atomic_clang.h
! bd0755e5d9a78e591a2c14b0a691088d  libsanitizer/sanitizer_common/sanitizer_atomic_clang_mips.h
  3686782bec0fb0a981c075ff25565e74  libsanitizer/sanitizer_common/sanitizer_atomic_clang_other.h
  53ca180c9d422d41817722cfdb7f6264  libsanitizer/sanitizer_common/sanitizer_atomic_clang_x86.h
  a086d2b579c91b2576f9c35c798b8b04  libsanitizer/sanitizer_common/sanitizer_atomic_msvc.h
  f652b6a1b7460128cccd6c016c4828c6  libsanitizer/sanitizer_common/sanitizer_bitvector.h
  2c60255aaee6514e73b7c326d2edbc51  libsanitizer/sanitizer_common/sanitizer_bvgraph.h
! 37fda67c0a241a3c958f663809161b55  libsanitizer/sanitizer_common/sanitizer_common.cpp
! 461795fb04c2da6f64a772dc73004848  libsanitizer/sanitizer_common/sanitizer_common.h
! c96de0113e10c8eab3e0a1869ec7957f  libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc
! 2f7d47202e9f6d50e6445e0a3c457a8d  libsanitizer/sanitizer_common/sanitizer_common_interceptors_format.inc
! 885355959681eb26e2e80da24e0b061f  libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
! 1a5adf613af41f9e4cc538f5d6e9bc59  libsanitizer/sanitizer_common/sanitizer_common_interceptors_netbsd_compat.inc
! 35c1671edb836194de169cd01c5e0757  libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S
  b4b4ed1f1a36cce44031fd0b4a1a141f  libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_arm.inc.S
! 6d1ff4bab107ed97a3e8eca57e12a3c7  libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S
  558231bbaa4fc2b256a4cf0851a6bd0b  libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_riscv64.inc.S
! a2d364a4f2335bbb464e9f03ece4a103  libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S
! 3403b50462f933580299f188870f146c  libsanitizer/sanitizer_common/sanitizer_common_interface.inc
  71dfbac2abdf5add380080b29aaf84c2  libsanitizer/sanitizer_common/sanitizer_common_interface_posix.inc
! 2db013e95c8d1e0bd546e36c7b807236  libsanitizer/sanitizer_common/sanitizer_common_libcdep.cpp
! dd89766d44d316a7ed5dc09829d3a612  libsanitizer/sanitizer_common/sanitizer_common_nolibc.cpp
! 39f0f93b74b051a34a6ac19987339b74  libsanitizer/sanitizer_common/sanitizer_common_syscalls.inc
! a1a40838ea1b9a5d29ce4248acd0e4af  libsanitizer/sanitizer_common/sanitizer_coverage_fuchsia.cpp
  fa4ab1b80686df69edafddefaf9111f2  libsanitizer/sanitizer_common/sanitizer_coverage_interface.inc
! 85a4f76b336bf5f5c730e14e7c4f3645  libsanitizer/sanitizer_common/sanitizer_coverage_libcdep_new.cpp
  f64c402c63e4fdccc3b91f46fa008563  libsanitizer/sanitizer_common/sanitizer_coverage_win_dll_thunk.cpp
  b23b66463d261a32c3e71eb67bdce1ea  libsanitizer/sanitizer_common/sanitizer_coverage_win_dynamic_runtime_thunk.cpp
  3f3a487b0f415ffaf2022c06c7e71af4  libsanitizer/sanitizer_common/sanitizer_coverage_win_sections.cpp
  ed3ef2b479c7d2116591b6f628dbce45  libsanitizer/sanitizer_common/sanitizer_coverage_win_weak_interception.cpp
  c24845d0d3c29b56170aa71091426359  libsanitizer/sanitizer_common/sanitizer_dbghelp.h
! 3d4bef29c7db4991f9e249a02d52bdec  libsanitizer/sanitizer_common/sanitizer_deadlock_detector.h
! 3375eabf5db48f245798ab91e6262ab6  libsanitizer/sanitizer_common/sanitizer_deadlock_detector1.cpp
! 31546c3def6d80a9c24960a47502bc25  libsanitizer/sanitizer_common/sanitizer_deadlock_detector2.cpp
  714375c2f0080364d3f9636fb365cb50  libsanitizer/sanitizer_common/sanitizer_deadlock_detector_interface.h
  dd71222889a46d09229b51c9a128a5aa  libsanitizer/sanitizer_common/sanitizer_errno.cpp
! f01d49004b9f4b111e1f255149dd726e  libsanitizer/sanitizer_common/sanitizer_errno.h
  569eef7f7a96f68658eb85aec7bd4bef  libsanitizer/sanitizer_common/sanitizer_errno_codes.h
! a3d6962149aebd140a99a33879461133  libsanitizer/sanitizer_common/sanitizer_file.cpp
! e40b71404b0ff7dd2fc45e15933f357e  libsanitizer/sanitizer_common/sanitizer_file.h
  603de04d166f3a49fa913a548ec80c21  libsanitizer/sanitizer_common/sanitizer_flag_parser.cpp
! a1cb25b30a7bf8a637161ecad7a66640  libsanitizer/sanitizer_common/sanitizer_flag_parser.h
! 3a7768a048aef85c7c717fd7cb2bffff  libsanitizer/sanitizer_common/sanitizer_flags.cpp
  50b07ed067f181e6df763aa0940acec1  libsanitizer/sanitizer_common/sanitizer_flags.h
! 9824734f05d90c553980db5a57e221df  libsanitizer/sanitizer_common/sanitizer_flags.inc
  3f779f66885b3027cad2a2af88a8a2f5  libsanitizer/sanitizer_common/sanitizer_freebsd.h
! 983a576cd3a2d0addf30751287a15300  libsanitizer/sanitizer_common/sanitizer_fuchsia.cpp
! 1a0e3555f149432989644866f738273a  libsanitizer/sanitizer_common/sanitizer_fuchsia.h
  1d8e62bbd8a595f6e44228e1dc7cbcd8  libsanitizer/sanitizer_common/sanitizer_getauxval.h
  f06be5c69a658d7ac5ebea616ebb001a  libsanitizer/sanitizer_common/sanitizer_glibc_version.h
! 5f4fe0d6b6354aae18a1cfcbeb1d2573  libsanitizer/sanitizer_common/sanitizer_hash.h
! 9a961d39984bfd2ce3ceb3ff41058df4  libsanitizer/sanitizer_common/sanitizer_interceptors_ioctl_netbsd.inc
! 9a4901a8406dcbd5200a7d5be9057978  libsanitizer/sanitizer_common/sanitizer_interface_internal.h
! 19d5dbdb889e123283b6bb4b5d342df5  libsanitizer/sanitizer_common/sanitizer_internal_defs.h
  5da7cbe05015b8a52342cd8a74fb0ad2  libsanitizer/sanitizer_common/sanitizer_lfstack.h
! 5971aab85335beb4f8ec1f37f6ec3e3f  libsanitizer/sanitizer_common/sanitizer_libc.cpp
! c61e68a25de38caf21a83188e6cd3818  libsanitizer/sanitizer_common/sanitizer_libc.h
! f7495cea9a190ee4681052e06fa592b9  libsanitizer/sanitizer_common/sanitizer_libignore.cpp
! 85b7de59b8c28ea298343b8a275f5943  libsanitizer/sanitizer_common/sanitizer_libignore.h
! 0ac9b5cf58824c5415a136be43a4cff7  libsanitizer/sanitizer_common/sanitizer_linux.cpp
! f84c1d5d99c579ab2feefa9c9feb0af0  libsanitizer/sanitizer_common/sanitizer_linux.h
! 1b5c9d1cdb93eab7235296a73d9a524a  libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp
  4c8636023e3eed320e3692dda7e88e1d  libsanitizer/sanitizer_common/sanitizer_linux_s390.cpp
  51d4c37472c1c2c6010e5d1eb5bf340f  libsanitizer/sanitizer_common/sanitizer_list.h
! d0b45512a07eac4f507b3b0f49965980  libsanitizer/sanitizer_common/sanitizer_local_address_space_view.h
! bbf9ffd9f009fe829fa0a64127885ebc  libsanitizer/sanitizer_common/sanitizer_mac.cpp
! 4035667225233503e07c2b73d3fd97ae  libsanitizer/sanitizer_common/sanitizer_mac.h
  9195d6bb30ce9845c5ecc617d3ccf7a2  libsanitizer/sanitizer_common/sanitizer_mac_libcdep.cpp
! 66161e6c5f3a0cd78dd80ed26b8bc9fe  libsanitizer/sanitizer_common/sanitizer_malloc_mac.inc
! c868e09e86d58bc45378287c5c44c316  libsanitizer/sanitizer_common/sanitizer_mutex.h
! f6cbfda6f1b7d7c7ee77b5d6cc554185  libsanitizer/sanitizer_common/sanitizer_netbsd.cpp
  d41d8cd98f00b204e9800998ecf8427e  libsanitizer/sanitizer_common/sanitizer_openbsd.cpp
! 696718e3b23e865cae08f0236c603e50  libsanitizer/sanitizer_common/sanitizer_persistent_allocator.cpp
! cdba436682d2c05dd25c8e0c3e611a14  libsanitizer/sanitizer_common/sanitizer_persistent_allocator.h
  b9966b23ae76d3ec9290c4a5e8c3d94c  libsanitizer/sanitizer_common/sanitizer_placement_new.h
! 459766877eb5895abed058d936693d0b  libsanitizer/sanitizer_common/sanitizer_platform.h
! a6690bc47fe2522c2f62aba9ec072074  libsanitizer/sanitizer_common/sanitizer_platform_interceptors.h
! 4e7d9d83a9b74f304cdfb186c925d633  libsanitizer/sanitizer_common/sanitizer_platform_limits_freebsd.cpp
! 7705c8e11c0aafaeb922a586edda5c26  libsanitizer/sanitizer_common/sanitizer_platform_limits_freebsd.h
! 719d41ca1e8b246ea668a5da852e43fe  libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cpp
! dfd8ca61572d533c9a5fef9d44521a89  libsanitizer/sanitizer_common/sanitizer_platform_limits_netbsd.cpp
! 51a6933c53085e75485e4b4c59f1e3e2  libsanitizer/sanitizer_common/sanitizer_platform_limits_netbsd.h
  d41d8cd98f00b204e9800998ecf8427e  libsanitizer/sanitizer_common/sanitizer_platform_limits_openbsd.cpp
  d41d8cd98f00b204e9800998ecf8427e  libsanitizer/sanitizer_common/sanitizer_platform_limits_openbsd.h
! 05a4270278b83d4569c32fecd5704e86  libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
! 7401184b97c53ec1f30593bc0174b15b  libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
! 6a600fe0b2f737602ab53034aaeaf443  libsanitizer/sanitizer_common/sanitizer_platform_limits_solaris.cpp
! 7e240cd8f027b06b432493422a3ffc45  libsanitizer/sanitizer_common/sanitizer_platform_limits_solaris.h
! 4ede10fee7725e1477a63ed897d3ee60  libsanitizer/sanitizer_common/sanitizer_posix.cpp
! 9d0b05768da256e8f92b97fda2deb252  libsanitizer/sanitizer_common/sanitizer_posix.h
! 4a6f184aca6085146e606db3db289eec  libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp
! 0e291c4a21a07dfe2ca6a59095a82c61  libsanitizer/sanitizer_common/sanitizer_printf.cpp
! d323176e3cc5255a315f5b1eeba97067  libsanitizer/sanitizer_common/sanitizer_procmaps.h
  9f49c09176556fe4c5863604acaa373e  libsanitizer/sanitizer_common/sanitizer_procmaps_bsd.cpp
! af53b891a8a2f66f1930a5671dea7dc7  libsanitizer/sanitizer_common/sanitizer_procmaps_common.cpp
  359d6e04536b11f84ee64fcc65fceff5  libsanitizer/sanitizer_common/sanitizer_procmaps_fuchsia.cpp
  cac752f7b42df7a26fc91e0aadc8aa36  libsanitizer/sanitizer_common/sanitizer_procmaps_linux.cpp
! b9719fe47fcd7dba224d7fc88eb1da99  libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp
! 8f37049b0c572e25e5497796eb8f924b  libsanitizer/sanitizer_common/sanitizer_procmaps_solaris.cpp
! c9937d34e01561a1dad54b76931a5fdf  libsanitizer/sanitizer_common/sanitizer_ptrauth.h
! fc7370f5a826d8e20cb887e540ef593b  libsanitizer/sanitizer_common/sanitizer_quarantine.h
  790117d4c85c98c499151ad830f99a49  libsanitizer/sanitizer_common/sanitizer_report_decorator.h
  b83c750f7315e3e874aea656d760be62  libsanitizer/sanitizer_common/sanitizer_ring_buffer.h
! 6a7070228fa1edbe54635120da5485c1  libsanitizer/sanitizer_common/sanitizer_rtems.cpp
! 2fa71eb71b2224dc69ba605af7fea5ce  libsanitizer/sanitizer_common/sanitizer_rtems.h
! d59f677c5a0e62a67f876840b8f56c8a  libsanitizer/sanitizer_common/sanitizer_signal_interceptors.inc
! 4a6942a20d64097418de985a12dbc548  libsanitizer/sanitizer_common/sanitizer_solaris.cpp
! 9bd8a9750d54e4ea412c8539b00706d0  libsanitizer/sanitizer_common/sanitizer_stackdepot.cpp
! b63e24b68004db3bdae2e31e443fe521  libsanitizer/sanitizer_common/sanitizer_stackdepot.h
! fd5135ec27f75815425f2b7bcc0c6559  libsanitizer/sanitizer_common/sanitizer_stackdepotbase.h
! 460c8082fec58bc00337634ea7efa6fb  libsanitizer/sanitizer_common/sanitizer_stacktrace.cpp
! 6c32eec16a975213f5aaad74da48558d  libsanitizer/sanitizer_common/sanitizer_stacktrace.h
! 893a6de837685da5b361e7481629a552  libsanitizer/sanitizer_common/sanitizer_stacktrace_libcdep.cpp
! 421ac15799ce1b208117cd3a04578e68  libsanitizer/sanitizer_common/sanitizer_stacktrace_printer.cpp
  48a3ae33d0047b239ce6108de3b21f01  libsanitizer/sanitizer_common/sanitizer_stacktrace_printer.h
! 670b449e6111903f6d125a767fa0dcdc  libsanitizer/sanitizer_common/sanitizer_stacktrace_sparc.cpp
  76324ac84f5eb512c3e2351dbfd9ce24  libsanitizer/sanitizer_common/sanitizer_stoptheworld.h
  c1faa837dd50d9ad2162751a200fa58b  libsanitizer/sanitizer_common/sanitizer_stoptheworld_fuchsia.cpp
  60c0888eff94b59773f87548c52f756a  libsanitizer/sanitizer_common/sanitizer_stoptheworld_fuchsia.h
! d0583a16195ac0f74ae4c5fe2d9c86c0  libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
  2ef561190d53b373c3fbcbc354775b87  libsanitizer/sanitizer_common/sanitizer_stoptheworld_mac.cpp
! 9e854f45be8f0397a82d3c766bfa91c2  libsanitizer/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp
! eb39444af2185c26905e505a935da3dc  libsanitizer/sanitizer_common/sanitizer_suppressions.cpp
  6dc05d23b94fb4783618dcd3cd4b1c9f  libsanitizer/sanitizer_common/sanitizer_suppressions.h
  cec284352a6e1650f96d4e6ed4c72ec3  libsanitizer/sanitizer_common/sanitizer_symbolizer.cpp
! 9b67549c15a9336724643313a9b57076  libsanitizer/sanitizer_common/sanitizer_symbolizer.h
  12fcc306e0ffc32a224b785eaec125a8  libsanitizer/sanitizer_common/sanitizer_symbolizer_fuchsia.h
! f5b2e7e1316c9d77c7724db34ee596a2  libsanitizer/sanitizer_common/sanitizer_symbolizer_internal.h
  bb131db68f565eae8a9dc5516f29326e  libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp
  57fad0f520b4b3e56bb19ce40a50676a  libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.h
! 257475d14f1a77ec762e342d61ced0dd  libsanitizer/sanitizer_common/sanitizer_symbolizer_libcdep.cpp
  31a79296e19ed6dfe94376a3a726bf14  libsanitizer/sanitizer_common/sanitizer_symbolizer_mac.cpp
  e3003592669953bc272f2de5f3e2dbbf  libsanitizer/sanitizer_common/sanitizer_symbolizer_mac.h
! bd8e335b7bb95233c994c9af58c16ca2  libsanitizer/sanitizer_common/sanitizer_symbolizer_markup.cpp
! 37b3f30605604d3349ee0518a9c51e3e  libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp
! ba37412ab5b90827d8ae139cbf61cbb2  libsanitizer/sanitizer_common/sanitizer_symbolizer_report.cpp
! bf1f33d4411f0b874ee25e8e906c3325  libsanitizer/sanitizer_common/sanitizer_symbolizer_rtems.h
! a5d028c603a77837e906b79479217fb7  libsanitizer/sanitizer_common/sanitizer_symbolizer_win.cpp
  034628d52b5ccccaeb8ab2d857599538  libsanitizer/sanitizer_common/sanitizer_syscall_generic.inc
  9546e0a896837e1fc30d0f1421f2b220  libsanitizer/sanitizer_common/sanitizer_syscall_linux_aarch64.inc
  0711f1c23e48efd357f77c0be4ab551c  libsanitizer/sanitizer_common/sanitizer_syscall_linux_arm.inc
  a14b05d5a122d962a0d8d477334c65e1  libsanitizer/sanitizer_common/sanitizer_syscall_linux_riscv64.inc
  e5a40190912f9655e972ed0025bf35f3  libsanitizer/sanitizer_common/sanitizer_syscall_linux_x86_64.inc
  eb5c24ff6468763e083b23c4491451f2  libsanitizer/sanitizer_common/sanitizer_syscalls_netbsd.inc
! 59c4265dc5b17f42ad6d52e4f044a691  libsanitizer/sanitizer_common/sanitizer_termination.cpp
! 1027484259ada5e402d64308fdd8512b  libsanitizer/sanitizer_common/sanitizer_thread_registry.cpp
! 047fce30927a184ecf1bb40fb7363a85  libsanitizer/sanitizer_common/sanitizer_thread_registry.h
! d0db7bb2e93125659a57d70f71d799bf  libsanitizer/sanitizer_common/sanitizer_tls_get_addr.cpp
! b8c609acff6402e7c8d1742ad1fcea1b  libsanitizer/sanitizer_common/sanitizer_tls_get_addr.h
  daf0a3ec50a14c09b41741865f11e807  libsanitizer/sanitizer_common/sanitizer_type_traits.cpp
  a951fc08e5b53c0d76a6a477883ad964  libsanitizer/sanitizer_common/sanitizer_type_traits.h
  e3cbe959db25a033713c3bba86c68b9e  libsanitizer/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp
! 5797e275b3326dd81c1d06fee61025ca  libsanitizer/sanitizer_common/sanitizer_unwind_win.cpp
  8d76e69157ad8d7f8c665105cb1b9358  libsanitizer/sanitizer_common/sanitizer_vector.h
! 81f3a92df6fbbc4c1eed2227bf16ae74  libsanitizer/sanitizer_common/sanitizer_win.cpp
  ca31c361d0d8cc286a9c2a79da57a3ed  libsanitizer/sanitizer_common/sanitizer_win.h
  3a867f4ebec3e726e51526c82c85c978  libsanitizer/sanitizer_common/sanitizer_win_defs.h
  192408cb784e2738287506aefa3d586d  libsanitizer/sanitizer_common/sanitizer_win_dll_thunk.cpp
--- 103986,104213 ----
  52441feaf66ebf0ecf003bd66b0845a1  libsanitizer/include/system/linux/perf_event.h
  3de6060b4f9ff628820f60672dee5958  libsanitizer/include/system/linux/types.h
  177782c011eb97e4adc68bd2c39b6f84  libsanitizer/include/system/sys/ptrace.h
! 40db3b02f9746026f830c315351258a5  libsanitizer/interception/Makefile.am
! cb37180177f08c96d13d128ad904e7f8  libsanitizer/interception/Makefile.in
! 95767bf2aa5a40d9860be7ebb844bfac  libsanitizer/interception/interception.h
! 795142e90608656433667c3105773995  libsanitizer/interception/interception_linux.cpp
! 3156a529b5f86c321caebcb94682a513  libsanitizer/interception/interception_linux.h
  eb28a680879815dcce016978cbf38c79  libsanitizer/interception/interception_mac.cpp
  fece49ff778064e81bdfc6ad6b84b2b4  libsanitizer/interception/interception_mac.h
  ee840b8af091f87e1b1712cf360ddb50  libsanitizer/interception/interception_type_test.cpp
! 56ace876b8189738cc8ee3929c427dbc  libsanitizer/interception/interception_win.cpp
  d2397720fce56dc1634db6efb7d0eb22  libsanitizer/interception/interception_win.h
! cfd38bf924773ba7ef25458c574394bd  libsanitizer/libbacktrace/Makefile.am
! 1a2b5796179e934de9ec34d701ccc94c  libsanitizer/libbacktrace/Makefile.in
  a998136ffc66ed3a32f65097fb86ec05  libsanitizer/libbacktrace/backtrace-rename.h
  ea35b83ff2eb2bff286f2781693b0cc7  libsanitizer/libbacktrace/backtrace-supported.h.in
  35b2978dd28dbb4048032ad8db998f5c  libsanitizer/libbacktrace/bridge.cc
  afbb83670aebea5034bc386604a01397  libsanitizer/libsanitizer.spec.in
! 6b33d1a041ee8709633d99deee5a977e  libsanitizer/lsan/Makefile.am
! 7ed481f2f0f7dea4415d5c4d19f1fb93  libsanitizer/lsan/Makefile.in
  f2f51c768041ab63c956646fa5f7af5b  libsanitizer/lsan/libtool-version
! ded76775f06b7bd0172a9257db34901a  libsanitizer/lsan/lsan.cpp
  57ec7ec9a0cc945ab4171610d016f526  libsanitizer/lsan/lsan.h
! 54e4a9890bc2ce19badb5c9becb968ac  libsanitizer/lsan/lsan_allocator.cpp
! 5ea4265cf36f219971fe0347abf5a432  libsanitizer/lsan/lsan_allocator.h
! dd5c01fdb061281b111b687567acb80b  libsanitizer/lsan/lsan_common.cpp
! e6715544f967755a28853f78603fbdac  libsanitizer/lsan/lsan_common.h
! 9e74acecca898b3bba0998a082bd9675  libsanitizer/lsan/lsan_common_fuchsia.cpp
  9b73d8a46a2371dd701e44646d18b37f  libsanitizer/lsan/lsan_common_linux.cpp
! 6bc5cc3c336c7f587d962682a87dd92a  libsanitizer/lsan/lsan_common_mac.cpp
  6af587085d16319361de6f118714b293  libsanitizer/lsan/lsan_flags.inc
  e6a6122aacae53ce58e1e1580dafd6ff  libsanitizer/lsan/lsan_fuchsia.cpp
! 0a42ef558db22ea416707423b4ee5313  libsanitizer/lsan/lsan_fuchsia.h
! 6c4f5c489721c8bee001efc44852fbc8  libsanitizer/lsan/lsan_interceptors.cpp
  112de5191cba37114a27b3c851b03637  libsanitizer/lsan/lsan_linux.cpp
  b02d5934dd8074a40824a4f503348bdc  libsanitizer/lsan/lsan_mac.cpp
  dfff917b961891644801b0380ed93384  libsanitizer/lsan/lsan_malloc_mac.cpp
! 410ac851384225606e1d07d4631c2af0  libsanitizer/lsan/lsan_posix.cpp
  2d218702383904dd6ba0cbb97b0bfd82  libsanitizer/lsan/lsan_posix.h
  7d7a28d8f42ca368b3ffa1b674377b25  libsanitizer/lsan/lsan_preinit.cpp
! b870c2253a19a4f5283ee8366e869413  libsanitizer/lsan/lsan_thread.cpp
  2552ec2134fe8c89a703e18b6216eaa2  libsanitizer/lsan/lsan_thread.h
  2f9987fde4c23efc1b95546e481fff85  libsanitizer/merge.sh
! 876b8564ceb2db414236979ec46b9596  libsanitizer/sanitizer_common/Makefile.am
! 9d2b1657b0b39b541196f0ea9a00fe1b  libsanitizer/sanitizer_common/Makefile.in
  d68aa097ee532430d26f11ec81234ed5  libsanitizer/sanitizer_common/sancov_flags.cpp
  1cee185b14a59f3bfc596ac9bf851f89  libsanitizer/sanitizer_common/sancov_flags.h
! 72bcafc00c57c1ae00e19cb2b2a48f9c  libsanitizer/sanitizer_common/sancov_flags.inc
! 1219e8927251e414f191a2dec4b292ef  libsanitizer/sanitizer_common/sanitizer_addrhashmap.h
! ca475798790624509c2b59d894f92621  libsanitizer/sanitizer_common/sanitizer_allocator.cpp
! be87fa113fc4b98aaa55d8234371048d  libsanitizer/sanitizer_common/sanitizer_allocator.h
  58afe7ee0a8301bc2ee5e0495a5c3720  libsanitizer/sanitizer_common/sanitizer_allocator_checks.cpp
  4ee074df007bb212ba0e23ec75009eca  libsanitizer/sanitizer_common/sanitizer_allocator_checks.h
! 074de014cca445d56e6643eac4f12606  libsanitizer/sanitizer_common/sanitizer_allocator_combined.h
! 96cb3d54c892bac183e5eea23d61a499  libsanitizer/sanitizer_common/sanitizer_allocator_dlsym.h
  742b8a455904e57e1dc253cd94af8343  libsanitizer/sanitizer_common/sanitizer_allocator_interface.h
  239b2e57109dcb876b1522fa7d561e05  libsanitizer/sanitizer_common/sanitizer_allocator_internal.h
! 077de40d6eda25e0f6b7713f2e9763f4  libsanitizer/sanitizer_common/sanitizer_allocator_local_cache.h
! 31a38a7dd7a1b2e8823f44bd81b9519e  libsanitizer/sanitizer_common/sanitizer_allocator_primary32.h
! 83c8f5a7b796f0f792d10bea4ac3d867  libsanitizer/sanitizer_common/sanitizer_allocator_primary64.h
  1f6d1b3f6f13be09e010540c91a420ff  libsanitizer/sanitizer_common/sanitizer_allocator_report.cpp
  5fca989318db3c792dfeea2a7a028c24  libsanitizer/sanitizer_common/sanitizer_allocator_report.h
! 24f8d9025bea087bef3143d03f435f23  libsanitizer/sanitizer_common/sanitizer_allocator_secondary.h
! 68dd334ff39cff58dd4c6138bc1b725f  libsanitizer/sanitizer_common/sanitizer_allocator_size_class_map.h
  a21ea81dbfc52981e1c446285eaf2981  libsanitizer/sanitizer_common/sanitizer_allocator_stats.h
! 281b37403fe2b407bcba79b06e897077  libsanitizer/sanitizer_common/sanitizer_asm.h
  998bded7a554ef1499c0f9da7137fc8a  libsanitizer/sanitizer_common/sanitizer_atomic.h
! ea2166d25ad4e67e595972eb414744a6  libsanitizer/sanitizer_common/sanitizer_atomic_clang.h
! 4628d0f9ff0c1cf2623aaa1a643234cb  libsanitizer/sanitizer_common/sanitizer_atomic_clang_mips.h
  3686782bec0fb0a981c075ff25565e74  libsanitizer/sanitizer_common/sanitizer_atomic_clang_other.h
  53ca180c9d422d41817722cfdb7f6264  libsanitizer/sanitizer_common/sanitizer_atomic_clang_x86.h
  a086d2b579c91b2576f9c35c798b8b04  libsanitizer/sanitizer_common/sanitizer_atomic_msvc.h
  f652b6a1b7460128cccd6c016c4828c6  libsanitizer/sanitizer_common/sanitizer_bitvector.h
  2c60255aaee6514e73b7c326d2edbc51  libsanitizer/sanitizer_common/sanitizer_bvgraph.h
! 968bcfcbeb933088bf4aae5112f0adbe  libsanitizer/sanitizer_common/sanitizer_chained_origin_depot.cpp
! f28cca27d520ead3efa11e05b7f07f3e  libsanitizer/sanitizer_common/sanitizer_chained_origin_depot.h
! 6dc8077deef78639222f0484ed271d1d  libsanitizer/sanitizer_common/sanitizer_common.cpp
! def41444ae429c8c5564f014a7eba3ca  libsanitizer/sanitizer_common/sanitizer_common.h
! 586d4ad4c1db17eaf4e6c6f808aed302  libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc
! 873ecc8932cb8410c4e2b06ea4fd99ff  libsanitizer/sanitizer_common/sanitizer_common_interceptors_format.inc
! 719df652c7fdab229eb324b721bde18c  libsanitizer/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
! c664d5fb1514c978d28a6a62b2040b53  libsanitizer/sanitizer_common/sanitizer_common_interceptors_netbsd_compat.inc
! fda3dee294d9edce69f269af077bbd80  libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S
  b4b4ed1f1a36cce44031fd0b4a1a141f  libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_arm.inc.S
! 4c7f0914b7dceaf1fe7b50d0ebcf30e4  libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S
  558231bbaa4fc2b256a4cf0851a6bd0b  libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_riscv64.inc.S
! 86445cfc93ff99267195b206bbfc5540  libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S
! df6c386b90d87972e769849f88bef68e  libsanitizer/sanitizer_common/sanitizer_common_interface.inc
  71dfbac2abdf5add380080b29aaf84c2  libsanitizer/sanitizer_common/sanitizer_common_interface_posix.inc
! baa8246febba912659397e4e0b80a051  libsanitizer/sanitizer_common/sanitizer_common_libcdep.cpp
! 3920b5e07b66c71bd65884a64631d698  libsanitizer/sanitizer_common/sanitizer_common_nolibc.cpp
! 1bcdb88c4731758cbfd6a8333dee0cc4  libsanitizer/sanitizer_common/sanitizer_common_syscalls.inc
! bea7ca535b878bbd243b1e23ddf91f86  libsanitizer/sanitizer_common/sanitizer_coverage_fuchsia.cpp
  fa4ab1b80686df69edafddefaf9111f2  libsanitizer/sanitizer_common/sanitizer_coverage_interface.inc
! f4486fff123931849e64ecb538efab1e  libsanitizer/sanitizer_common/sanitizer_coverage_libcdep_new.cpp
  f64c402c63e4fdccc3b91f46fa008563  libsanitizer/sanitizer_common/sanitizer_coverage_win_dll_thunk.cpp
  b23b66463d261a32c3e71eb67bdce1ea  libsanitizer/sanitizer_common/sanitizer_coverage_win_dynamic_runtime_thunk.cpp
  3f3a487b0f415ffaf2022c06c7e71af4  libsanitizer/sanitizer_common/sanitizer_coverage_win_sections.cpp
  ed3ef2b479c7d2116591b6f628dbce45  libsanitizer/sanitizer_common/sanitizer_coverage_win_weak_interception.cpp
  c24845d0d3c29b56170aa71091426359  libsanitizer/sanitizer_common/sanitizer_dbghelp.h
! 93c7f7cfe4584314922d85a50eb6f712  libsanitizer/sanitizer_common/sanitizer_deadlock_detector.h
! 60b82132d1e67e37257799273c024824  libsanitizer/sanitizer_common/sanitizer_deadlock_detector1.cpp
! 21a5fbc7da336c033aaaff3bf8de5f61  libsanitizer/sanitizer_common/sanitizer_deadlock_detector2.cpp
  714375c2f0080364d3f9636fb365cb50  libsanitizer/sanitizer_common/sanitizer_deadlock_detector_interface.h
  dd71222889a46d09229b51c9a128a5aa  libsanitizer/sanitizer_common/sanitizer_errno.cpp
! 83e5b23f25dc561b296ff5d57c9f2966  libsanitizer/sanitizer_common/sanitizer_errno.h
  569eef7f7a96f68658eb85aec7bd4bef  libsanitizer/sanitizer_common/sanitizer_errno_codes.h
! b031dd8a887c762d1b4c0598e956673f  libsanitizer/sanitizer_common/sanitizer_file.cpp
! f78633cce8bb070b9327be0907434ac0  libsanitizer/sanitizer_common/sanitizer_file.h
  603de04d166f3a49fa913a548ec80c21  libsanitizer/sanitizer_common/sanitizer_flag_parser.cpp
! 63e4e5a37078fa05cf9d854166d7f328  libsanitizer/sanitizer_common/sanitizer_flag_parser.h
! 132bd807dd8a0e8e2e84d52add1570f5  libsanitizer/sanitizer_common/sanitizer_flags.cpp
  50b07ed067f181e6df763aa0940acec1  libsanitizer/sanitizer_common/sanitizer_flags.h
! e2f3987c800e4668b87b73395fa8de05  libsanitizer/sanitizer_common/sanitizer_flags.inc
! 45792c1d5e035392c0f4d002ad22921d  libsanitizer/sanitizer_common/sanitizer_flat_map.h
  3f779f66885b3027cad2a2af88a8a2f5  libsanitizer/sanitizer_common/sanitizer_freebsd.h
! 43cb8733c2f00dc736269f01a5b88030  libsanitizer/sanitizer_common/sanitizer_fuchsia.cpp
! 286b7995698dbe20223e1a3c05933d6d  libsanitizer/sanitizer_common/sanitizer_fuchsia.h
  1d8e62bbd8a595f6e44228e1dc7cbcd8  libsanitizer/sanitizer_common/sanitizer_getauxval.h
  f06be5c69a658d7ac5ebea616ebb001a  libsanitizer/sanitizer_common/sanitizer_glibc_version.h
! 0106ca8c2ac52a690196a29c2fd63de6  libsanitizer/sanitizer_common/sanitizer_hash.h
! 6d41f95489dbae2330fd89aeaee5eedc  libsanitizer/sanitizer_common/sanitizer_interceptors_ioctl_netbsd.inc
! bc4124593bb0bdb91e15f9ac514d5481  libsanitizer/sanitizer_common/sanitizer_interface_internal.h
! 76fe2e1eef9139c5085a061332fb6ffa  libsanitizer/sanitizer_common/sanitizer_internal_defs.h
  5da7cbe05015b8a52342cd8a74fb0ad2  libsanitizer/sanitizer_common/sanitizer_lfstack.h
! 21de654ed7481dd33c2ed7ab1a29c2b7  libsanitizer/sanitizer_common/sanitizer_libc.cpp
! cce68947dc278b1a388eb87186550085  libsanitizer/sanitizer_common/sanitizer_libc.h
! a22a007306d53a02b901a2c5f8acb20a  libsanitizer/sanitizer_common/sanitizer_libignore.cpp
! 43841a8fb2414dc7836e2d07d6197776  libsanitizer/sanitizer_common/sanitizer_libignore.h
! 9464683364ae4a40dfb7cda6ea24e3df  libsanitizer/sanitizer_common/sanitizer_linux.cpp
! ec1b77dd7525604c1f84f6e3b8c0e312  libsanitizer/sanitizer_common/sanitizer_linux.h
! 17a8595586ca0e1e6f45113b8c0c8293  libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp
  4c8636023e3eed320e3692dda7e88e1d  libsanitizer/sanitizer_common/sanitizer_linux_s390.cpp
  51d4c37472c1c2c6010e5d1eb5bf340f  libsanitizer/sanitizer_common/sanitizer_list.h
! 15f5a30dda04b6f3bc49cb5206d92e7b  libsanitizer/sanitizer_common/sanitizer_local_address_space_view.h
! 3b432e341bb0a24d3c087089f7f67ef7  libsanitizer/sanitizer_common/sanitizer_mac.cpp
! c7dd1a51daebb1f6729f7934ac723eef  libsanitizer/sanitizer_common/sanitizer_mac.h
  9195d6bb30ce9845c5ecc617d3ccf7a2  libsanitizer/sanitizer_common/sanitizer_mac_libcdep.cpp
! 8d5539e23030557718b6406d22e7501b  libsanitizer/sanitizer_common/sanitizer_malloc_mac.inc
! 231790ca3e16e72faa2f393344107c51  libsanitizer/sanitizer_common/sanitizer_mutex.cpp
! ed2f8a37eb20d4fcceaa6d34098764d4  libsanitizer/sanitizer_common/sanitizer_mutex.h
! 3ec767742997468be9817fb2a5fe4c1f  libsanitizer/sanitizer_common/sanitizer_netbsd.cpp
  d41d8cd98f00b204e9800998ecf8427e  libsanitizer/sanitizer_common/sanitizer_openbsd.cpp
! 2f453e635e82524cb4091701e3e277cd  libsanitizer/sanitizer_common/sanitizer_persistent_allocator.h
  b9966b23ae76d3ec9290c4a5e8c3d94c  libsanitizer/sanitizer_common/sanitizer_placement_new.h
! c038885b30546e90c83646d8f5a3c174  libsanitizer/sanitizer_common/sanitizer_platform.h
! edcf4c8eb66f6768bae3b5879ab6ae99  libsanitizer/sanitizer_common/sanitizer_platform_interceptors.h
! 2485cad1bdc3396e0c2682f69efd62c9  libsanitizer/sanitizer_common/sanitizer_platform_limits_freebsd.cpp
! aa5e20b1c9b2a3c49eb257a0e00f05c6  libsanitizer/sanitizer_common/sanitizer_platform_limits_freebsd.h
! f0a17a663404f1bd05e9d84470e79dfd  libsanitizer/sanitizer_common/sanitizer_platform_limits_linux.cpp
! 11c0b5aadbb62e89480f919221bfeeb2  libsanitizer/sanitizer_common/sanitizer_platform_limits_netbsd.cpp
! 35d946cca7573e504ff717a32c559c34  libsanitizer/sanitizer_common/sanitizer_platform_limits_netbsd.h
  d41d8cd98f00b204e9800998ecf8427e  libsanitizer/sanitizer_common/sanitizer_platform_limits_openbsd.cpp
  d41d8cd98f00b204e9800998ecf8427e  libsanitizer/sanitizer_common/sanitizer_platform_limits_openbsd.h
! ec1f0eaa997ed8c5cd6327f00f908a6c  libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
! e8e9c3031b88e29339cb0881f517b85b  libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
! e3cadbfae9442c1ecf66a526cd625ce7  libsanitizer/sanitizer_common/sanitizer_platform_limits_solaris.cpp
! 849fc4ac5671b43efe4e3f11f87f00fb  libsanitizer/sanitizer_common/sanitizer_platform_limits_solaris.h
! 58e59a903f88f4a9f72f94073f268db8  libsanitizer/sanitizer_common/sanitizer_posix.cpp
! bc6ef1dfee4fa2ff2d761568e9b19ed0  libsanitizer/sanitizer_common/sanitizer_posix.h
! 2a29ff39266dbc10385298e35c6d8f2f  libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp
! cbe5b35a053bfa34f03cd77b9b556840  libsanitizer/sanitizer_common/sanitizer_printf.cpp
! 0068f44f90a6e6bb080501d01505b9f5  libsanitizer/sanitizer_common/sanitizer_procmaps.h
  9f49c09176556fe4c5863604acaa373e  libsanitizer/sanitizer_common/sanitizer_procmaps_bsd.cpp
! 4258109dfa024898ae2e8991e5268c59  libsanitizer/sanitizer_common/sanitizer_procmaps_common.cpp
  359d6e04536b11f84ee64fcc65fceff5  libsanitizer/sanitizer_common/sanitizer_procmaps_fuchsia.cpp
  cac752f7b42df7a26fc91e0aadc8aa36  libsanitizer/sanitizer_common/sanitizer_procmaps_linux.cpp
! 14699b621ce7a302d8a945b4c4a25778  libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp
! 852097c2e7396030af8f19d04bf9d0a9  libsanitizer/sanitizer_common/sanitizer_procmaps_solaris.cpp
! f35117287ec4a6a6d785ad92db83acd9  libsanitizer/sanitizer_common/sanitizer_ptrauth.h
! 27a2df90370f56197ada6ffec3ed78c2  libsanitizer/sanitizer_common/sanitizer_quarantine.h
  790117d4c85c98c499151ad830f99a49  libsanitizer/sanitizer_common/sanitizer_report_decorator.h
  b83c750f7315e3e874aea656d760be62  libsanitizer/sanitizer_common/sanitizer_ring_buffer.h
! 92eeb5433884af335db94ffb01770c2f  libsanitizer/sanitizer_common/sanitizer_signal_interceptors.inc
! d81628c1f3c14142bf5218228d6bdcc6  libsanitizer/sanitizer_common/sanitizer_solaris.cpp
! 1484463da0cb65279c641b7bd33511e4  libsanitizer/sanitizer_common/sanitizer_stackdepot.cpp
! ab69c994964518854d3c852549e7d968  libsanitizer/sanitizer_common/sanitizer_stackdepot.h
! 2e9c77f595e59b5fd833e23184556a92  libsanitizer/sanitizer_common/sanitizer_stackdepotbase.h
! fc9024bc0daedd3ddc2281cbb77c06eb  libsanitizer/sanitizer_common/sanitizer_stacktrace.cpp
! 4fa43f47ee802c3305e1665115e4f415  libsanitizer/sanitizer_common/sanitizer_stacktrace.h
! 00e5e0a40eb7c110e9c236cfe95b46ca  libsanitizer/sanitizer_common/sanitizer_stacktrace_libcdep.cpp
! 6a033576503618378bed56d0bf3c17e7  libsanitizer/sanitizer_common/sanitizer_stacktrace_printer.cpp
  48a3ae33d0047b239ce6108de3b21f01  libsanitizer/sanitizer_common/sanitizer_stacktrace_printer.h
! 3f54427e1b0f2a4b31b739360733f3e9  libsanitizer/sanitizer_common/sanitizer_stacktrace_sparc.cpp
  76324ac84f5eb512c3e2351dbfd9ce24  libsanitizer/sanitizer_common/sanitizer_stoptheworld.h
  c1faa837dd50d9ad2162751a200fa58b  libsanitizer/sanitizer_common/sanitizer_stoptheworld_fuchsia.cpp
  60c0888eff94b59773f87548c52f756a  libsanitizer/sanitizer_common/sanitizer_stoptheworld_fuchsia.h
! c1c11c9d3bd683239d37937574d5e21d  libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp
  2ef561190d53b373c3fbcbc354775b87  libsanitizer/sanitizer_common/sanitizer_stoptheworld_mac.cpp
! c037ff7568ea4e12399926fdbde8a8c1  libsanitizer/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp
! a4af335f21aab3f4c9445d6b7c4713ba  libsanitizer/sanitizer_common/sanitizer_suppressions.cpp
  6dc05d23b94fb4783618dcd3cd4b1c9f  libsanitizer/sanitizer_common/sanitizer_suppressions.h
  cec284352a6e1650f96d4e6ed4c72ec3  libsanitizer/sanitizer_common/sanitizer_symbolizer.cpp
! ed4528bc579161401556f6773d820d43  libsanitizer/sanitizer_common/sanitizer_symbolizer.h
  12fcc306e0ffc32a224b785eaec125a8  libsanitizer/sanitizer_common/sanitizer_symbolizer_fuchsia.h
! 6b3c2ba7295a71f74855a27974e6b06d  libsanitizer/sanitizer_common/sanitizer_symbolizer_internal.h
  bb131db68f565eae8a9dc5516f29326e  libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp
  57fad0f520b4b3e56bb19ce40a50676a  libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.h
! fe9ad16b3e285a44de8f67d0a62fd893  libsanitizer/sanitizer_common/sanitizer_symbolizer_libcdep.cpp
  31a79296e19ed6dfe94376a3a726bf14  libsanitizer/sanitizer_common/sanitizer_symbolizer_mac.cpp
  e3003592669953bc272f2de5f3e2dbbf  libsanitizer/sanitizer_common/sanitizer_symbolizer_mac.h
! f1a8419f9b0f3c2dfa95e3b516bc3144  libsanitizer/sanitizer_common/sanitizer_symbolizer_markup.cpp
! a2b01b70e7bc645bd7d878ef7867c572  libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp
! e8a4b56872029fe09b37459d6e628bdf  libsanitizer/sanitizer_common/sanitizer_symbolizer_report.cpp
! de478f939a3869ab532059067601e675  libsanitizer/sanitizer_common/sanitizer_symbolizer_win.cpp
  034628d52b5ccccaeb8ab2d857599538  libsanitizer/sanitizer_common/sanitizer_syscall_generic.inc
  9546e0a896837e1fc30d0f1421f2b220  libsanitizer/sanitizer_common/sanitizer_syscall_linux_aarch64.inc
  0711f1c23e48efd357f77c0be4ab551c  libsanitizer/sanitizer_common/sanitizer_syscall_linux_arm.inc
+ 6c6126aaba0563b4707f41f195586beb  libsanitizer/sanitizer_common/sanitizer_syscall_linux_hexagon.inc
  a14b05d5a122d962a0d8d477334c65e1  libsanitizer/sanitizer_common/sanitizer_syscall_linux_riscv64.inc
  e5a40190912f9655e972ed0025bf35f3  libsanitizer/sanitizer_common/sanitizer_syscall_linux_x86_64.inc
  eb5c24ff6468763e083b23c4491451f2  libsanitizer/sanitizer_common/sanitizer_syscalls_netbsd.inc
! dd3c422b6984d35ca7d0c2b990a064f7  libsanitizer/sanitizer_common/sanitizer_termination.cpp
! bc7f76b99c1609aaec6602bee904069b  libsanitizer/sanitizer_common/sanitizer_thread_registry.cpp
! c9391f87b7ff1b850063a5b714828a1d  libsanitizer/sanitizer_common/sanitizer_thread_registry.h
! 399b5db1f547968cc9fe8296bfda0fcb  libsanitizer/sanitizer_common/sanitizer_thread_safety.h
! 8af60b5c0568e3d3e9e590b73ec10db3  libsanitizer/sanitizer_common/sanitizer_tls_get_addr.cpp
! 067a90198acd4ef92494bee073c0e1bc  libsanitizer/sanitizer_common/sanitizer_tls_get_addr.h
  daf0a3ec50a14c09b41741865f11e807  libsanitizer/sanitizer_common/sanitizer_type_traits.cpp
  a951fc08e5b53c0d76a6a477883ad964  libsanitizer/sanitizer_common/sanitizer_type_traits.h
  e3cbe959db25a033713c3bba86c68b9e  libsanitizer/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp
! 4441344743596144549e3f13c767510d  libsanitizer/sanitizer_common/sanitizer_unwind_win.cpp
  8d76e69157ad8d7f8c665105cb1b9358  libsanitizer/sanitizer_common/sanitizer_vector.h
! f95944d7399b5fc95eb910a6633d0458  libsanitizer/sanitizer_common/sanitizer_win.cpp
  ca31c361d0d8cc286a9c2a79da57a3ed  libsanitizer/sanitizer_common/sanitizer_win.h
  3a867f4ebec3e726e51526c82c85c978  libsanitizer/sanitizer_common/sanitizer_win_defs.h
  192408cb784e2738287506aefa3d586d  libsanitizer/sanitizer_common/sanitizer_win_dll_thunk.cpp
*************** ca31c361d0d8cc286a9c2a79da57a3ed  libsan
*** 97398,97480 ****
  c8748a0184d2e5e1b50d9c106e5a45f1  libsanitizer/sanitizer_common/sanitizer_win_dynamic_runtime_thunk.cpp
  61159becd1bfb41004e8fef8a36ccc1c  libsanitizer/sanitizer_common/sanitizer_win_weak_interception.cpp
  eb330b64a368e29af662c65273f49815  libsanitizer/sanitizer_common/sanitizer_win_weak_interception.h
! 1cfcceecc6eeeae848b8c6902149e236  libsanitizer/tsan/Makefile.am
! d07f5fba43dc25a3502e9a50c92f1a0f  libsanitizer/tsan/Makefile.in
! fa3130229750a0a919b8e02b8f7ba7de  libsanitizer/tsan/libtool-version
! f5a6fd0eade721690ec33ba89dadc48c  libsanitizer/tsan/tsan_clock.cpp
! 1d56f0d4ebbc576628a066665605c625  libsanitizer/tsan/tsan_clock.h
! 198dd384e23f4083d7a366461294aabd  libsanitizer/tsan/tsan_debugging.cpp
! 33b141b62b30fcb86e5cf6d2cc074296  libsanitizer/tsan/tsan_defs.h
! e1d26b675f8475c414fab61865e226fd  libsanitizer/tsan/tsan_dense_alloc.h
  9a994c7cd167ddbaea5df65cb0e6e051  libsanitizer/tsan/tsan_dispatch_defs.h
! 2b523a85f62df928bb2a59c24854dc8c  libsanitizer/tsan/tsan_external.cpp
! b86a41b569932590f309c75e4cd7139d  libsanitizer/tsan/tsan_fd.cpp
! 86e32f67753dbc92efc697a97b1e38a7  libsanitizer/tsan/tsan_fd.h
! e77eb0d3639c52827e9f8753fe78b8a6  libsanitizer/tsan/tsan_flags.cpp
  9fcbcc17ace4216572d132c7f19980dd  libsanitizer/tsan/tsan_flags.h
! da24b3b72762d44cb7ee6a750981e19d  libsanitizer/tsan/tsan_flags.inc
! 3872bbcb0ac76748d47bccfb94743d99  libsanitizer/tsan/tsan_ignoreset.cpp
! 058ce7b802bf98df41675feb392e163c  libsanitizer/tsan/tsan_ignoreset.h
! e0d35aa3d6f65f90936a1641380d012d  libsanitizer/tsan/tsan_interceptors.h
  1b4ec7c176ae05e65095a6d2cdb0365c  libsanitizer/tsan/tsan_interceptors_libdispatch.cpp
! c7a11371b12f8ca00dcec6de27c7e1ae  libsanitizer/tsan/tsan_interceptors_mac.cpp
  a83781c196d253d2f7538367873b4d65  libsanitizer/tsan/tsan_interceptors_mach_vm.cpp
! 8da3fef3da6b5cfb77ef95e2c300ac88  libsanitizer/tsan/tsan_interceptors_posix.cpp
! a782403c2fec24598634a26efa94be0f  libsanitizer/tsan/tsan_interface.cpp
! 02a71dcd4e7816dc118a76c8e9717b63  libsanitizer/tsan/tsan_interface.h
! 36a60cd8cc05a70aea224f8255440fd8  libsanitizer/tsan/tsan_interface_ann.cpp
  85e02689af55fa1cc3f98b5cfe3043a1  libsanitizer/tsan/tsan_interface_ann.h
! 11d4fa995e7e99a76fdcd77cd64294b5  libsanitizer/tsan/tsan_interface_atomic.cpp
! f6342dc638e1620ba03b5fe0591fe268  libsanitizer/tsan/tsan_interface_inl.h
! 86ee073be4b8094d8eec986d9fbfe46b  libsanitizer/tsan/tsan_interface_java.cpp
  b6f28fd4519c6bc2e8cd9cdb820f72a8  libsanitizer/tsan/tsan_interface_java.h
  d4742ed564ebb24495bdd7764fb8eec9  libsanitizer/tsan/tsan_malloc_mac.cpp
  2ce89d665869a9e29509f68c3b093511  libsanitizer/tsan/tsan_md5.cpp
! 3e3c8579b0993293a810762f44475a8e  libsanitizer/tsan/tsan_mman.cpp
! 05b5b9617fecb78f5edf5111b06a8aa8  libsanitizer/tsan/tsan_mman.h
! 2dc2e6c4ec8ba2df319a0f8c054fb482  libsanitizer/tsan/tsan_mutex.cpp
! 059cd8fe825d9f4fd86516ec5b55c534  libsanitizer/tsan/tsan_mutex.h
! cf371605f25f8d576f1f035dc41e575d  libsanitizer/tsan/tsan_mutexset.cpp
! 4297e22dd9e18efcbc82b989a42b2ab7  libsanitizer/tsan/tsan_mutexset.h
  abb77573543b4ca2e18a84ae834d8ff7  libsanitizer/tsan/tsan_new_delete.cpp
! 913ec2300271ec9b2c984b6fdfb1789a  libsanitizer/tsan/tsan_platform.h
! 9ed026dfa307d67a7f713304f839ff27  libsanitizer/tsan/tsan_platform_linux.cpp
! 890260122ddd8e76d463cf588dfc0fe0  libsanitizer/tsan/tsan_platform_mac.cpp
! 55a41428796341ab07728b80b03ca2a1  libsanitizer/tsan/tsan_platform_posix.cpp
! e571fafbedfc5631ba9a65a021b3690c  libsanitizer/tsan/tsan_platform_windows.cpp
  52a08181bf0cebd537f6ff681e4201d2  libsanitizer/tsan/tsan_ppc_regs.h
  26e9eb9d1219608d4a3f8b5de755e6c7  libsanitizer/tsan/tsan_preinit.cpp
! 539e61cf68e10c91fc6a9ad3a8edae3a  libsanitizer/tsan/tsan_report.cpp
! 266790a202d1beb065d3cc6b67a3bf3f  libsanitizer/tsan/tsan_report.h
! 047e3f57f3c1fce96594799a62cc1c08  libsanitizer/tsan/tsan_rtl.cpp
! f035aa9034dae111f33e2e039aee6414  libsanitizer/tsan/tsan_rtl.h
  b07a5d2489d36192b3df5324b8591748  libsanitizer/tsan/tsan_rtl_aarch64.S
! ce5ee002d48ad3b4d06a80252d42c5a7  libsanitizer/tsan/tsan_rtl_amd64.S
  2e223da4b198b7996aa993b62da9470c  libsanitizer/tsan/tsan_rtl_mips64.S
! 797ca95e291b2ab1dae1c6506564ebeb  libsanitizer/tsan/tsan_rtl_mutex.cpp
  d771c907949512e86f6221398475c2c1  libsanitizer/tsan/tsan_rtl_ppc64.S
  90a9b217381a5220aa59007a40614de1  libsanitizer/tsan/tsan_rtl_proc.cpp
! 3080e03b50a8bf432037bf4eeb6f5bdd  libsanitizer/tsan/tsan_rtl_report.cpp
! 8a6e4cca762964493b1a4060f864c159  libsanitizer/tsan/tsan_rtl_thread.cpp
! 637c77a5937a7370cf3595223014c144  libsanitizer/tsan/tsan_stack_trace.cpp
  fcdf88c4922b4bf531859f5e19f37f19  libsanitizer/tsan/tsan_stack_trace.h
- 6615e70a417622568139e04a8b479a6c  libsanitizer/tsan/tsan_stat.cpp
- 385fc5624d45fb5abdec5321269e4ebd  libsanitizer/tsan/tsan_stat.h
  69f20cee78a054f26a59decf38be934b  libsanitizer/tsan/tsan_suppressions.cpp
  2158aca0f3a2d54057e8cd7895ef496c  libsanitizer/tsan/tsan_suppressions.h
! d32a18022d701573e6bde5eb24cce928  libsanitizer/tsan/tsan_symbolize.cpp
  339793c91cce47c39da05aab388a1d91  libsanitizer/tsan/tsan_symbolize.h
! ba92d7b136512f1cb411bd13ea779385  libsanitizer/tsan/tsan_sync.cpp
! f8c7ffb6db970f21de91cd68dbd5a786  libsanitizer/tsan/tsan_sync.h
! 788d8ec9c132710c6b8f4bc88d18c2d8  libsanitizer/tsan/tsan_trace.h
! b03734881e1f28d3f47413d49b4e8d0d  libsanitizer/tsan/tsan_update_shadow_word_inl.h
! 387c0b821641937f7c18b6f4b7ecf22d  libsanitizer/ubsan/Makefile.am
! fb38ef2356416d8375ebd44d98eab243  libsanitizer/ubsan/Makefile.in
  db0727716bbb494b5221fcab5517db23  libsanitizer/ubsan/libtool-version
  09adf5cec3b2e75084c18928b377c4f3  libsanitizer/ubsan/ubsan_checks.inc
! ebed06d61582a88d2a71b8d370a2f95f  libsanitizer/ubsan/ubsan_diag.cpp
  78ecfd51a2b4b88d4595bb54c66abc8a  libsanitizer/ubsan/ubsan_diag.h
! 8a33500618e07eac8c0c32849ab1deb0  libsanitizer/ubsan/ubsan_diag_standalone.cpp
  e3592cc9006c6b039a3cec6a3bf25efb  libsanitizer/ubsan/ubsan_flags.cpp
  c6447e64133bd56b1aa97dde6c16675f  libsanitizer/ubsan/ubsan_flags.h
  b27e02f11f51c44900f55d9f84490952  libsanitizer/ubsan/ubsan_flags.inc
--- 104215,104299 ----
  c8748a0184d2e5e1b50d9c106e5a45f1  libsanitizer/sanitizer_common/sanitizer_win_dynamic_runtime_thunk.cpp
  61159becd1bfb41004e8fef8a36ccc1c  libsanitizer/sanitizer_common/sanitizer_win_weak_interception.cpp
  eb330b64a368e29af662c65273f49815  libsanitizer/sanitizer_common/sanitizer_win_weak_interception.h
! b744403680f307828b8d68329076c5d6  libsanitizer/tsan/Makefile.am
! c955dbb554992c6d7012775198115606  libsanitizer/tsan/Makefile.in
! 4993c3783465efe7eb63dd3ae6611678  libsanitizer/tsan/libtool-version
! 2bb0ad1c40d55f9e4809469d6322ffac  libsanitizer/tsan/tsan_clock.cpp
! 37c59cfebad78055d9025674025971f3  libsanitizer/tsan/tsan_clock.h
! 4017a9425508acf7ccbfe981df1a1695  libsanitizer/tsan/tsan_debugging.cpp
! 4c19c4735ddd497ca7a0a9bcebbdeae5  libsanitizer/tsan/tsan_defs.h
! a8aea7639bdd4e9c42e6d224c247bd05  libsanitizer/tsan/tsan_dense_alloc.h
  9a994c7cd167ddbaea5df65cb0e6e051  libsanitizer/tsan/tsan_dispatch_defs.h
! 137a34ad34b3cad10e3d9c1f0f4d3c8f  libsanitizer/tsan/tsan_external.cpp
! 8e81c675ad9ffc8f59de9fa06dbc1c8a  libsanitizer/tsan/tsan_fd.cpp
! 71d9cec080517690b0361e105e633dd3  libsanitizer/tsan/tsan_fd.h
! 1995b12b15a33e2ba95075154d82c206  libsanitizer/tsan/tsan_flags.cpp
  9fcbcc17ace4216572d132c7f19980dd  libsanitizer/tsan/tsan_flags.h
! 0268d6b02d2c8dbb93b57958d601c3cf  libsanitizer/tsan/tsan_flags.inc
! 60bfaa19bc1c038d806e759abd03e869  libsanitizer/tsan/tsan_ignoreset.cpp
! d419772368c76a807ff66bafd0683028  libsanitizer/tsan/tsan_ignoreset.h
! 45bd7ec3e79167e3101e35f5ba81d51b  libsanitizer/tsan/tsan_ilist.h
! 9cf336e17de58829256556c845d8a9e6  libsanitizer/tsan/tsan_interceptors.h
  1b4ec7c176ae05e65095a6d2cdb0365c  libsanitizer/tsan/tsan_interceptors_libdispatch.cpp
! c8c7ab298129a9b512bcffce5cf17a1e  libsanitizer/tsan/tsan_interceptors_mac.cpp
  a83781c196d253d2f7538367873b4d65  libsanitizer/tsan/tsan_interceptors_mach_vm.cpp
! 7b47007e056d453067b46edcf39ba8a2  libsanitizer/tsan/tsan_interceptors_posix.cpp
! 9b7596940a24e22d58f840c8cde93add  libsanitizer/tsan/tsan_interface.cpp
! 07c438c76cb97e62fd20d38ea4cea264  libsanitizer/tsan/tsan_interface.h
! 9aaf965a64e65f2f6406a6d7042e54e8  libsanitizer/tsan/tsan_interface.inc
! dceedb94557d32f3adb2b1096f4759b6  libsanitizer/tsan/tsan_interface_ann.cpp
  85e02689af55fa1cc3f98b5cfe3043a1  libsanitizer/tsan/tsan_interface_ann.h
! 713d37bf38816f6398271686c70c584c  libsanitizer/tsan/tsan_interface_atomic.cpp
! 6059f955430c33ec37c4d0bc27a3bfdc  libsanitizer/tsan/tsan_interface_java.cpp
  b6f28fd4519c6bc2e8cd9cdb820f72a8  libsanitizer/tsan/tsan_interface_java.h
  d4742ed564ebb24495bdd7764fb8eec9  libsanitizer/tsan/tsan_malloc_mac.cpp
  2ce89d665869a9e29509f68c3b093511  libsanitizer/tsan/tsan_md5.cpp
! 24864979417b8cfc234226bea749f79a  libsanitizer/tsan/tsan_mman.cpp
! 43373dc2feda687e1f82646e040edddc  libsanitizer/tsan/tsan_mman.h
! e8f774b306c8449dc32ca14bb8bb2698  libsanitizer/tsan/tsan_mutexset.cpp
! a9a268e0f4ad3f8fd0a463675d721dc0  libsanitizer/tsan/tsan_mutexset.h
  abb77573543b4ca2e18a84ae834d8ff7  libsanitizer/tsan/tsan_new_delete.cpp
! 800374e3e4e162b535722101ae727d19  libsanitizer/tsan/tsan_platform.h
! 986fcd74513bc17028ee7f4329dc5900  libsanitizer/tsan/tsan_platform_linux.cpp
! 64748ceb81e58ba7fbacd6650bd142d1  libsanitizer/tsan/tsan_platform_mac.cpp
! 968b5e935beb2152415c67966a394dbd  libsanitizer/tsan/tsan_platform_posix.cpp
! 5af49aca7c8dc5df835388823a538642  libsanitizer/tsan/tsan_platform_windows.cpp
  52a08181bf0cebd537f6ff681e4201d2  libsanitizer/tsan/tsan_ppc_regs.h
  26e9eb9d1219608d4a3f8b5de755e6c7  libsanitizer/tsan/tsan_preinit.cpp
! 6140b19f32b4bcdd84abaacbc88c6211  libsanitizer/tsan/tsan_report.cpp
! 9c4ad53e86548b8b48e70950c506d44a  libsanitizer/tsan/tsan_report.h
! 90a8d73adc9445756ed90d5f8247ee30  libsanitizer/tsan/tsan_rtl.cpp
! 2954ab0754d754d75b531adefd279cfa  libsanitizer/tsan/tsan_rtl.h
  b07a5d2489d36192b3df5324b8591748  libsanitizer/tsan/tsan_rtl_aarch64.S
! e6c022b18dac5c3f36280710418a07b4  libsanitizer/tsan/tsan_rtl_access.cpp
! 6963ea78ffa74fc0b6288520196767ad  libsanitizer/tsan/tsan_rtl_amd64.S
  2e223da4b198b7996aa993b62da9470c  libsanitizer/tsan/tsan_rtl_mips64.S
! 6955bbfe44558e86db6598ef0dc82f35  libsanitizer/tsan/tsan_rtl_mutex.cpp
  d771c907949512e86f6221398475c2c1  libsanitizer/tsan/tsan_rtl_ppc64.S
  90a9b217381a5220aa59007a40614de1  libsanitizer/tsan/tsan_rtl_proc.cpp
! 592ed56d957efa1d438cfc66230bcfd0  libsanitizer/tsan/tsan_rtl_report.cpp
! 4124c8589213fcaddbe4e359e638e194  libsanitizer/tsan/tsan_rtl_s390x.S
! 41af8feb29d9a79aba4facc451e3777c  libsanitizer/tsan/tsan_rtl_thread.cpp
! 447c44310b9bce5b1f47e0f52761ba22  libsanitizer/tsan/tsan_shadow.h
! d927f16e28e5fd7b5a8c718f575d7a09  libsanitizer/tsan/tsan_stack_trace.cpp
  fcdf88c4922b4bf531859f5e19f37f19  libsanitizer/tsan/tsan_stack_trace.h
  69f20cee78a054f26a59decf38be934b  libsanitizer/tsan/tsan_suppressions.cpp
  2158aca0f3a2d54057e8cd7895ef496c  libsanitizer/tsan/tsan_suppressions.h
! 44bcdcf638df13751840900e2eb82315  libsanitizer/tsan/tsan_symbolize.cpp
  339793c91cce47c39da05aab388a1d91  libsanitizer/tsan/tsan_symbolize.h
! 08d2b82bc2a67ce4976e41e7452047dc  libsanitizer/tsan/tsan_sync.cpp
! 61f55c4b81c9e28005a772ca753d11c1  libsanitizer/tsan/tsan_sync.h
! d8079a801d1d7b29367f65fe0f6ed961  libsanitizer/tsan/tsan_trace.h
! 7fc4e39b835542b58a5475f7e15129bb  libsanitizer/tsan/tsan_update_shadow_word.inc
! 7043f9d2d6d55a4a9dad3179e81ac578  libsanitizer/tsan/tsan_vector_clock.cpp
! 5f66ec32201aa975081f4ec4905d1343  libsanitizer/tsan/tsan_vector_clock.h
! f6d1a5a4cab859262269889366adae69  libsanitizer/ubsan/Makefile.am
! 63724809de1c923e49642e14312087f0  libsanitizer/ubsan/Makefile.in
  db0727716bbb494b5221fcab5517db23  libsanitizer/ubsan/libtool-version
  09adf5cec3b2e75084c18928b377c4f3  libsanitizer/ubsan/ubsan_checks.inc
! d4f5e238e7bd3c6ed6c6bde4b8adf123  libsanitizer/ubsan/ubsan_diag.cpp
  78ecfd51a2b4b88d4595bb54c66abc8a  libsanitizer/ubsan/ubsan_diag.h
! e5abe4d439045c7ad13bf70bc237033f  libsanitizer/ubsan/ubsan_diag_standalone.cpp
  e3592cc9006c6b039a3cec6a3bf25efb  libsanitizer/ubsan/ubsan_flags.cpp
  c6447e64133bd56b1aa97dde6c16675f  libsanitizer/ubsan/ubsan_flags.h
  b27e02f11f51c44900f55d9f84490952  libsanitizer/ubsan/ubsan_flags.inc
*************** a457f4b0060070f9e92b5432f6629610  libsan
*** 97482,97495 ****
  f6fe1e866e950cd3658102fc9405e469  libsanitizer/ubsan/ubsan_handlers.h
  43ef0529b23d1faac6f1d00a3bb99c48  libsanitizer/ubsan/ubsan_handlers_cxx.cpp
  2d856feaefc2fa81a63e9be3a41ecc34  libsanitizer/ubsan/ubsan_handlers_cxx.h
! ec90595fe9a6426584202b6aa1aec310  libsanitizer/ubsan/ubsan_init.cpp
  6e2f838f2a1a00942ff6a510da152fac  libsanitizer/ubsan/ubsan_init.h
  6709b25bace5613d327e12057227eefc  libsanitizer/ubsan/ubsan_init_standalone.cpp
  8b7c4cd2bd1ad8759b5d13c230fffb54  libsanitizer/ubsan/ubsan_init_standalone_preinit.cpp
  a2661ff01d56abb8a41522539c5d3931  libsanitizer/ubsan/ubsan_interface.inc
! 6f773fa76726f275c5f2f9b0d1c9448e  libsanitizer/ubsan/ubsan_monitor.cpp
  7311068be7eacbc04a232416cd95a29d  libsanitizer/ubsan/ubsan_monitor.h
! 1749ce481b95c721f4fc685175cb8807  libsanitizer/ubsan/ubsan_platform.h
  c538b76dffda11b57555fde1324f6e80  libsanitizer/ubsan/ubsan_signals_standalone.cpp
  80d12dc787dd1f9c2aff6e99ccf028a3  libsanitizer/ubsan/ubsan_signals_standalone.h
  c334521cda7aa18f71d0584166e5ed32  libsanitizer/ubsan/ubsan_type_hash.cpp
--- 104301,104314 ----
  f6fe1e866e950cd3658102fc9405e469  libsanitizer/ubsan/ubsan_handlers.h
  43ef0529b23d1faac6f1d00a3bb99c48  libsanitizer/ubsan/ubsan_handlers_cxx.cpp
  2d856feaefc2fa81a63e9be3a41ecc34  libsanitizer/ubsan/ubsan_handlers_cxx.h
! b756c37595ed7a9b77e4103648b5bdd4  libsanitizer/ubsan/ubsan_init.cpp
  6e2f838f2a1a00942ff6a510da152fac  libsanitizer/ubsan/ubsan_init.h
  6709b25bace5613d327e12057227eefc  libsanitizer/ubsan/ubsan_init_standalone.cpp
  8b7c4cd2bd1ad8759b5d13c230fffb54  libsanitizer/ubsan/ubsan_init_standalone_preinit.cpp
  a2661ff01d56abb8a41522539c5d3931  libsanitizer/ubsan/ubsan_interface.inc
! 85f29febbb7472220e23c64c3329afe6  libsanitizer/ubsan/ubsan_monitor.cpp
  7311068be7eacbc04a232416cd95a29d  libsanitizer/ubsan/ubsan_monitor.h
! 10edc94e5e8978df9e90a2d71b857b1a  libsanitizer/ubsan/ubsan_platform.h
  c538b76dffda11b57555fde1324f6e80  libsanitizer/ubsan/ubsan_signals_standalone.cpp
  80d12dc787dd1f9c2aff6e99ccf028a3  libsanitizer/ubsan/ubsan_signals_standalone.h
  c334521cda7aa18f71d0584166e5ed32  libsanitizer/ubsan/ubsan_type_hash.cpp
*************** bd58abd803667b3373381b6bb1b68f1b  libsan
*** 97501,97536 ****
  545e91fffb8d4987ca5d1c0054aadd11  libsanitizer/ubsan/ubsan_win_dll_thunk.cpp
  e9c85349d92ab1a6b66d0872077acd3b  libsanitizer/ubsan/ubsan_win_dynamic_runtime_thunk.cpp
  72f297f487b6bb9db917cce361192c28  libsanitizer/ubsan/ubsan_win_weak_interception.cpp
! abb78e1fad31fd8ca1ab017d1c54d6d3  libssp/ChangeLog
! cf4ee646515263611d025bd12ba88148  libssp/Makefile.am
  b56958cdc5828ca811c35bbf479b3a09  libssp/Makefile.in
  f6f6c804e40e3a3ef407d3d13fafb6c0  libssp/aclocal.m4
  f4886e6dd0590caba717fd1bc96a6f50  libssp/config.h.in
  68e956231b19fc09cf5925e781fbf02c  libssp/configure
  add86bdb9a39ea186a4120d7e7b32438  libssp/configure.ac
! f237c287bd4088c9048ec62394d3ddc9  libssp/gets-chk.c
  0ac32b60459d1fdec670990324d7bdc6  libssp/libtool-version
! f641cf4cfbbb4dfc1ae33baa7836a5aa  libssp/memcpy-chk.c
! 5613c5dc1e4505774b8b01c003766209  libssp/memmove-chk.c
! fef85fdc21c8b5a5d314140e76b70f9c  libssp/mempcpy-chk.c
! ef7666cc4670d2fdd3ed6c6dd12bca7b  libssp/memset-chk.c
! 411dc0b87d1fc37eb44ef081cf9309d8  libssp/snprintf-chk.c
! 217a74c8cf9b8ec7f3fd487c204aa9d1  libssp/sprintf-chk.c
! eba1ff6ccf2fef1a4a36cf89159dfdae  libssp/ssp-local.c
! 8eefa25e6beb3ddc951cfc158306cef5  libssp/ssp.c
  a45e2fbfb70a8e0d68d726bb31ffe4cd  libssp/ssp.map
! 570abf6eea96f49b90c9570367f770d9  libssp/ssp/ssp.h.in
! df66ccf23f6b963bb290249d790ccb82  libssp/ssp/stdio.h
! 0bf976a219a5a86f2014e9b5a7b48e3d  libssp/ssp/string.h
! 3350c42e9933e35efe7108c1d1ae32b3  libssp/ssp/unistd.h
! 9ebda8eddf7c28758980c24a023cf62e  libssp/stpcpy-chk.c
! 96ca007503cad767a1ad9ac42b679d50  libssp/strcat-chk.c
! 3c882991a2d39aa8e4f89be554c29fa3  libssp/strcpy-chk.c
! 86d4871093d73da6a106b029236223e0  libssp/strncat-chk.c
! 0a9dff73d2333b2997da42b4615533fd  libssp/strncpy-chk.c
! 11c140b790d482decba4951f6508dd84  libssp/vsnprintf-chk.c
! 2ce510f683585f686681d926e3fafb82  libssp/vsprintf-chk.c
! 7611c7124f4f303e076c2155c0e67d22  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 104320,104355 ----
  545e91fffb8d4987ca5d1c0054aadd11  libsanitizer/ubsan/ubsan_win_dll_thunk.cpp
  e9c85349d92ab1a6b66d0872077acd3b  libsanitizer/ubsan/ubsan_win_dynamic_runtime_thunk.cpp
  72f297f487b6bb9db917cce361192c28  libsanitizer/ubsan/ubsan_win_weak_interception.cpp
! 54aad954287a8f9c1c2c167eab0b6e06  libssp/ChangeLog
! 6a01d14c2cd27212838caea837dc03f3  libssp/Makefile.am
  b56958cdc5828ca811c35bbf479b3a09  libssp/Makefile.in
  f6f6c804e40e3a3ef407d3d13fafb6c0  libssp/aclocal.m4
  f4886e6dd0590caba717fd1bc96a6f50  libssp/config.h.in
  68e956231b19fc09cf5925e781fbf02c  libssp/configure
  add86bdb9a39ea186a4120d7e7b32438  libssp/configure.ac
! 587b0d00594a1a26ed0ec96d2a14a5a4  libssp/gets-chk.c
  0ac32b60459d1fdec670990324d7bdc6  libssp/libtool-version
! a48934d0ce773f2ca00520ee09d91641  libssp/memcpy-chk.c
! 11d4ae778e22481f29935cd6f722edb8  libssp/memmove-chk.c
! 0c169ad946b66045428bf8af95723eab  libssp/mempcpy-chk.c
! 08de3803455b5f91a7cc232c38a7b592  libssp/memset-chk.c
! 6d69477e31134e7880f0fcfd641e0425  libssp/snprintf-chk.c
! b5d80d9efd5f41a5dac406f93998850f  libssp/sprintf-chk.c
! 363794c41f70e27967d805bb695efbf0  libssp/ssp-local.c
! d41d8710d8cefc388a7b712fe5cf046c  libssp/ssp.c
  a45e2fbfb70a8e0d68d726bb31ffe4cd  libssp/ssp.map
! 99bdda48f1ccf264e374a28eabbe2269  libssp/ssp/ssp.h.in
! 3259a26261f80403e836b6efb9af7bde  libssp/ssp/stdio.h
! f03664b0ca5384dd6f80bd05eb58b488  libssp/ssp/string.h
! 63b10b79751d845d35620b22dd4fed79  libssp/ssp/unistd.h
! 82d14d119725919af9e9f313f980827f  libssp/stpcpy-chk.c
! cafe7854da876a2d8a0236845e77873f  libssp/strcat-chk.c
! b7cf7ac9dd30a51c9de8919a232874a4  libssp/strcpy-chk.c
! 1293ccf0a91009d9392d212bc6e511cd  libssp/strncat-chk.c
! b81de192dda77932887ae66cf31cdd9e  libssp/strncpy-chk.c
! 5c71217c6b2a9d406fbc27d0fc6e8042  libssp/vsnprintf-chk.c
! caf814994c08b81abae4688b582bcaf4  libssp/vsprintf-chk.c
! 8745a30f0d59fa8c4d00353545cda50b  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** ced62eb7e4ae82690abb361aefcea876  libstd
*** 97554,97767 ****
  72cd87c288677791bf39ac8327b1cf25  libstdc++-v3/ChangeLog-2018
  a8f4290dba5b481ad426148a03c75dd0  libstdc++-v3/ChangeLog-2019
  0f81783bc492458ec96cea677852a49c  libstdc++-v3/ChangeLog-2020
! 008caca43b4e195eecb9c08bf29ba4d1  libstdc++-v3/Makefile.am
! 54e48e33eb9146948dff98aca20830c4  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! 9f6362760cb2f50e39da8d81855a408f  libstdc++-v3/acinclude.m4
  734c1cbc8791fbceb09b49c5d07d6966  libstdc++-v3/aclocal.m4
! 03206c41c4b2669881872e3465f2c926  libstdc++-v3/config.h.in
! b01fddf6d6bea14bdfb65dbd4c979845  libstdc++-v3/config/abi/compatibility.h
! 4dc0ed9711e1e8d1c3555df4a246013c  libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt
  730569c0ef38f6e6322b3c4ac65253ce  libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
  ad5f7ad17c209326dd45364406b5a992  libstdc++-v3/config/abi/post/hppa-linux-gnu/baseline_symbols.txt
  3564a8198041594b04f35e13701fdb53  libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt
! a3d616175c468c707a25b8abe6451940  libstdc++-v3/config/abi/post/i386-solaris/amd64/baseline_symbols.txt
! 9eb9f4479bb15ff4d341f401e0aa8122  libstdc++-v3/config/abi/post/i386-solaris/baseline_symbols.txt
! 3564a8198041594b04f35e13701fdb53  libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt
  01500b319bb297b4059106c465b92567  libstdc++-v3/config/abi/post/ia64-linux-gnu/baseline_symbols.txt
  145f9897a5e2606b2eefcbdde501b065  libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt
  61308215d393f11169ace76935f2b034  libstdc++-v3/config/abi/post/mips-linux-gnu/baseline_symbols.txt
  725325d7b24195d1e6374ce4e24afdb0  libstdc++-v3/config/abi/post/mips64-linux-gnu/32/baseline_symbols.txt
  907face03890009654193fc67fa4e427  libstdc++-v3/config/abi/post/mips64-linux-gnu/64/baseline_symbols.txt
  1a34bda2bb4c3a576335343c0a4a9377  libstdc++-v3/config/abi/post/mips64-linux-gnu/baseline_symbols.txt
! 95e879d2bc31a3b6883a980d43f1f98b  libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt
! 95e879d2bc31a3b6883a980d43f1f98b  libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt
! 1c11af4e80d072f12bfd8bea657897b5  libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt
  104287e40f1276a2b123d0a86f37d9b4  libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt
  3ec228e0d9301df0938cba4a7fb94374  libstdc++-v3/config/abi/post/s390-linux-gnu/baseline_symbols.txt
  3ec228e0d9301df0938cba4a7fb94374  libstdc++-v3/config/abi/post/s390x-linux-gnu/32/baseline_symbols.txt
! cc660aa62a7606e3ef49a2277901708f  libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt
  cc65678819ec7ff06eaeed8b1a5455eb  libstdc++-v3/config/abi/post/sparc-linux-gnu/baseline_symbols.txt
! fc368e920573dc50de5e047e4bccd412  libstdc++-v3/config/abi/post/sparc-solaris/baseline_symbols.txt
! bcd4e2e4e8201e542c8c4ca1034a0207  libstdc++-v3/config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt
  ebf1c408e326c18c0c1f337bc5108fae  libstdc++-v3/config/abi/post/sparc64-linux-gnu/32/baseline_symbols.txt
  c224a11f9b7b76848462bffd472b20c2  libstdc++-v3/config/abi/post/sparc64-linux-gnu/baseline_symbols.txt
! 3564a8198041594b04f35e13701fdb53  libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt
! 8e58b877f0b2e8f064748ca17e6792dc  libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt
  483a11b93ae0da31d1f2f6470d4e7578  libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
  5c4c38aeca254313c616b84337c937c3  libstdc++-v3/config/abi/pre/float128.ver
! f7eaad9998541112063ab39f4999e54d  libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
! 551b9890ec6be122f02a273558c9b4b8  libstdc++-v3/config/abi/pre/gnu.ver
  b01f8da8f4373070847fe317fe8a546e  libstdc++-v3/config/abi/pre/none.ver
! b69693893d1f7b107322d8438366923d  libstdc++-v3/config/allocator/bitmap_allocator_base.h
! 023aed977d9c5ba9e1f0819268c0b91e  libstdc++-v3/config/allocator/malloc_allocator_base.h
! 03d060c69c8950eeef775a4142352b74  libstdc++-v3/config/allocator/mt_allocator_base.h
! fcdcf111c9228da351f93cd81039e6d6  libstdc++-v3/config/allocator/new_allocator_base.h
! 0761028626c5e517f9ba74a4258af9a5  libstdc++-v3/config/allocator/pool_allocator_base.h
! 5b0a4c5516eaea4f31c0b1e7bc63bf6d  libstdc++-v3/config/cpu/aarch64/opt/bits/opt_random.h
! f0fe3568b8311b075734f96e9b8090b6  libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h
! b2aefc926c3ea38fd6487bae2de6c59e  libstdc++-v3/config/cpu/arm/cpu_defines.h
! 0c3862c71700bccd66a6bb29724c0d2f  libstdc++-v3/config/cpu/arm/cxxabi_tweaks.h
! 2b1931457915dac67f8f618739c03820  libstdc++-v3/config/cpu/cris/atomic_word.h
! ab83a22dccd07762a8b8098660450680  libstdc++-v3/config/cpu/cris/atomicity.h
! 1e8289689465816810a529017de58414  libstdc++-v3/config/cpu/generic/atomic_word.h
! f24af2a59ddfc915878446ff97688302  libstdc++-v3/config/cpu/generic/atomicity_builtins/atomicity.h
! b56751a4d193ebd7c21e533ca365909b  libstdc++-v3/config/cpu/generic/atomicity_mutex/atomicity.h
! cbd94f1c4cc370db3b537c26221d0a33  libstdc++-v3/config/cpu/generic/cpu_defines.h
! a175cc0b5e33b924739aaccc76749492  libstdc++-v3/config/cpu/generic/cxxabi_tweaks.h
! 8c1184756d8797cc7f2df9e10b73d7e0  libstdc++-v3/config/cpu/generic/opt/bits/opt_random.h
! d9e89f177bdbbf9720d88d808b3e36e0  libstdc++-v3/config/cpu/generic/opt/ext/opt_random.h
! 2ee572e94d5ddcd3454dd044c2879de8  libstdc++-v3/config/cpu/hppa/atomicity.h
! 6824fa34134069ff9e3e92c5b5bcfedb  libstdc++-v3/config/cpu/i386/atomicity.h
! e955cd36dfb9b8644707aab6203e4ca0  libstdc++-v3/config/cpu/i486/atomicity.h
! c30d8eb6198648c318bba293396f0d18  libstdc++-v3/config/cpu/i486/opt/bits/opt_random.h
! a145f8193500dfe89c46611831e7a56c  libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h
! 4cd31357d36aa72f5d6e7e68640f11cd  libstdc++-v3/config/cpu/m68k/atomicity.h
! b4c9ce8cc3ad255074673572be9f128a  libstdc++-v3/config/cpu/microblaze/cpu_defines.h
! b6eb737e4202479142250b8452f95480  libstdc++-v3/config/cpu/powerpc/cpu_defines.h
! 5c69a1641dbd9ac50625147ba7564eb1  libstdc++-v3/config/cpu/sh/atomicity.h
! bd302e8e3705d628b208d6541ef157b3  libstdc++-v3/config/cpu/sparc/atomic_word.h
! eb5be96f5a0cf5c10f6dd08072bf34c0  libstdc++-v3/config/cpu/sparc/atomicity.h
! 1bdb44d7c0267c1641088c2eff5f4170  libstdc++-v3/config/io/basic_file_stdio.cc
! 48ab156244c19bae78a4cb3e02d4c1c0  libstdc++-v3/config/io/basic_file_stdio.h
! abcc096dc907ecbc9e39655bb37a6c15  libstdc++-v3/config/io/c_io_stdio.h
! 31c16821352fc65fc31fd7b8af8f95bf  libstdc++-v3/config/locale/darwin/ctype_members.cc
! 3c6485c9fa1cd36908646e6a29084268  libstdc++-v3/config/locale/dragonfly/c_locale.cc
! bdb39998c54249aa2bbe1d8a7d9113e0  libstdc++-v3/config/locale/dragonfly/c_locale.h
! ba23dba0af7f9eb8e2703276d5830efb  libstdc++-v3/config/locale/dragonfly/codecvt_members.cc
! 81a1ec26795553f7d105b72734b8acc1  libstdc++-v3/config/locale/dragonfly/collate_members.cc
! 69ceb102c79692ddd787c931e4a9f69e  libstdc++-v3/config/locale/dragonfly/ctype_members.cc
! 58576c452c5095fde78406f149f1f513  libstdc++-v3/config/locale/dragonfly/monetary_members.cc
! 91bea296fb812b47214c3fd85a137eac  libstdc++-v3/config/locale/dragonfly/numeric_members.cc
! 3752dc3aac483b3d498ac93e16b6e446  libstdc++-v3/config/locale/dragonfly/time_members.cc
! e236d8764df2e10b3232b45c01b6647c  libstdc++-v3/config/locale/dragonfly/time_members.h
! edd7d76491a9ac45507933ec3f267b19  libstdc++-v3/config/locale/generic/c++locale_internal.h
! 0f490bdc1066c866b67ee9ce39e3ecff  libstdc++-v3/config/locale/generic/c_locale.cc
! 798bab72607ab12c33d75f77608c59a5  libstdc++-v3/config/locale/generic/c_locale.h
! e39bc2c58956ad6385c96816ce5a4a6b  libstdc++-v3/config/locale/generic/codecvt_members.cc
! 2e47923c2e1646eae5ea7f5d91d5d3c6  libstdc++-v3/config/locale/generic/collate_members.cc
! c50fb3eb8541c6040bd20991a159534b  libstdc++-v3/config/locale/generic/ctype_members.cc
! 164764f3d7079b336710c9575023ad88  libstdc++-v3/config/locale/generic/messages_members.cc
! 075ee9e75a61997c0841ea418e00f4ff  libstdc++-v3/config/locale/generic/messages_members.h
! 00b4c1e08f4d1435945b8c608a8dce0d  libstdc++-v3/config/locale/generic/monetary_members.cc
! dde8ce65414960886382af1f45a62b50  libstdc++-v3/config/locale/generic/numeric_members.cc
! 4a6e7b86431a7486f47a122fa2e429de  libstdc++-v3/config/locale/generic/time_members.cc
! f8763ab0b9b5e0a2724ff94e0cd88ab3  libstdc++-v3/config/locale/generic/time_members.h
! 451b2c2d87db61087d0018773d83e5fd  libstdc++-v3/config/locale/gnu/c++locale_internal.h
! aa1568d30650d78b49104b15ee3f7eeb  libstdc++-v3/config/locale/gnu/c_locale.cc
! 9c9d49b3755c740a857d3373548d02e4  libstdc++-v3/config/locale/gnu/c_locale.h
! 4827cfd6aeee201a315b5747ecffcf86  libstdc++-v3/config/locale/gnu/codecvt_members.cc
! 757b77385a197e7e2c16cf9cab2e6bc1  libstdc++-v3/config/locale/gnu/collate_members.cc
! 0c6e14e1f79bf1fb455b936359f1ffa3  libstdc++-v3/config/locale/gnu/ctype_members.cc
! 4de697d08762a46a8641121dd094a82a  libstdc++-v3/config/locale/gnu/messages_members.cc
! a8bf2cdd03ac04f9198eee377186b8ec  libstdc++-v3/config/locale/gnu/messages_members.h
! fbbd00d81da8dbaf733e77cd7d2537bd  libstdc++-v3/config/locale/gnu/monetary_members.cc
! 6f40f29b745a684a8f422e4e1c583ea4  libstdc++-v3/config/locale/gnu/numeric_members.cc
! 1b5d1a6664de5964e62fd5a3963aa930  libstdc++-v3/config/locale/gnu/time_members.cc
! 7d1470ee2722e7f5ee2eba7fb5954c8b  libstdc++-v3/config/locale/gnu/time_members.h
! e909229da85af1fe12546105e1200393  libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.cc
! 37e6b3f3f41540500a435af17625f242  libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.h
! f6f5f8ea691c3d436eaa4da5d9ccce08  libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.cc
! c0d342155fff6182328d5669b5b4dab0  libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.h
! e04a297f0b3696b14b5b58b4cdccd521  libstdc++-v3/config/locale/newlib/ctype_members.cc
! b0d17c0fcfd3407d6ec69337b8f36f5e  libstdc++-v3/config/os/aix/atomicity.h
! 787b4bc0e4ad81313fcabf39cbeb7034  libstdc++-v3/config/os/aix/ctype_base.h
! 73886695d0bba09b495be44138801960  libstdc++-v3/config/os/aix/ctype_configure_char.cc
! 235941859c59814ebcad236daf9df56f  libstdc++-v3/config/os/aix/ctype_inline.h
! 0892272137b1c94e18899bb7cd13f9d4  libstdc++-v3/config/os/aix/os_defines.h
  7d1373c31caa4fdc44bcb11af08b4ab3  libstdc++-v3/config/os/aix/t-aix
! e248e9ad18c224787c7ecd59ed1c1be5  libstdc++-v3/config/os/bionic/ctype_base.h
! df3e291ccd8afccf10ccb45fcea9e669  libstdc++-v3/config/os/bionic/ctype_configure_char.cc
! 9d4065be61eb4d5767515334e1c9bcbc  libstdc++-v3/config/os/bionic/ctype_inline.h
! a3baceaeccc8885f6c3a367c82ce462b  libstdc++-v3/config/os/bionic/os_defines.h
! f5a102b966ee58824caab09e7b92c5fa  libstdc++-v3/config/os/bsd/darwin/ctype_base.h
! 73886695d0bba09b495be44138801960  libstdc++-v3/config/os/bsd/darwin/ctype_configure_char.cc
! 8a4e43750fc88aac4b1290e0de5b1da5  libstdc++-v3/config/os/bsd/darwin/ctype_inline.h
! 7fb69cc175e0cc363fe16c65c04c695c  libstdc++-v3/config/os/bsd/darwin/os_defines.h
  9e91dfcb11e4c78744df0e1e0cf69b5b  libstdc++-v3/config/os/bsd/darwin/ppc-extra.ver
! 2db5914060fa8f5c79f8ecc010cb96e3  libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h
! e64fc983738f5792c9fbba8c238a4969  libstdc++-v3/config/os/bsd/dragonfly/ctype_configure_char.cc
! fa9e404808dac4ca18e81b063be826b6  libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h
! c8e496b609711c46f381d3b57a278abc  libstdc++-v3/config/os/bsd/dragonfly/os_defines.h
! d5c6493a6e71b421fe67f0a4393c61ee  libstdc++-v3/config/os/bsd/freebsd/ctype_base.h
! e64fc983738f5792c9fbba8c238a4969  libstdc++-v3/config/os/bsd/freebsd/ctype_configure_char.cc
! 8a4e43750fc88aac4b1290e0de5b1da5  libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h
! 3871865b552af9913778448e197a6381  libstdc++-v3/config/os/bsd/freebsd/os_defines.h
! f0895d3fdd3bd48a385aa843f3095bbb  libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
! f7ead843d195f22a21a451820b25b51f  libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc
! e08422e5af575115b4c16ddc9bba97f1  libstdc++-v3/config/os/bsd/netbsd/ctype_inline.h
! f5a486aeaa7c18874eb894995abf2c35  libstdc++-v3/config/os/bsd/netbsd/os_defines.h
! c4c1f9a8c37ac8327cad0ff43b6cafd7  libstdc++-v3/config/os/bsd/openbsd/ctype_base.h
! cc5678fcd9d64b25e9388cf40b13cfe8  libstdc++-v3/config/os/bsd/openbsd/ctype_configure_char.cc
! 9d4065be61eb4d5767515334e1c9bcbc  libstdc++-v3/config/os/bsd/openbsd/ctype_inline.h
! 38bc550b77385f69c9acae0ad2c04428  libstdc++-v3/config/os/bsd/openbsd/os_defines.h
! 1a11f458397c597d3295d3f1f996df42  libstdc++-v3/config/os/djgpp/ctype_base.h
! 8f03318cb69d0bec010262170bf91e82  libstdc++-v3/config/os/djgpp/ctype_configure_char.cc
! f4f2b26e27c3957ff5929b885646364f  libstdc++-v3/config/os/djgpp/ctype_inline.h
! 97769d925c6f39dc958a006c9ef4e956  libstdc++-v3/config/os/djgpp/error_constants.h
! 6d36646c13456c0ce99b64fd49a208be  libstdc++-v3/config/os/djgpp/os_defines.h
! bf2705404dd521ebcceeafe57468080d  libstdc++-v3/config/os/generic/ctype_base.h
! 73886695d0bba09b495be44138801960  libstdc++-v3/config/os/generic/ctype_configure_char.cc
! 48817692e8c606525ef9889af16b6269  libstdc++-v3/config/os/generic/ctype_inline.h
! 47fdd345f650cdcb509d00e47f36e44a  libstdc++-v3/config/os/generic/error_constants.h
! 431a6ecf06ba237be9373b2cb922d764  libstdc++-v3/config/os/generic/os_defines.h
  5b9a724ca8744a0e193a82f2ea8e9f5b  libstdc++-v3/config/os/gnu-linux/arm-eabi-extra.ver
! c99864811cb81795f882ee8d709a39f8  libstdc++-v3/config/os/gnu-linux/ctype_base.h
! 3c7ff25faf5e6a1988405d89f350a6a2  libstdc++-v3/config/os/gnu-linux/ctype_configure_char.cc
! 82fbb19a1614c44d6c3f0cb87465fcc6  libstdc++-v3/config/os/gnu-linux/ctype_inline.h
  df7b0a76ea127cef7009bec82b53dcee  libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver
! b44c419a58eaf15493ce8e0eaaf56e5a  libstdc++-v3/config/os/gnu-linux/ldbl-ieee128-extra.ver
! 7517023da174661af6e52fa85a802440  libstdc++-v3/config/os/gnu-linux/os_defines.h
! 959e3af95f997505166123d88fee00a0  libstdc++-v3/config/os/hpux/ctype_base.h
! 889db89ec247613e9652018bee43d6cb  libstdc++-v3/config/os/hpux/ctype_configure_char.cc
! 82fbb19a1614c44d6c3f0cb87465fcc6  libstdc++-v3/config/os/hpux/ctype_inline.h
! 3b501e43f53a75ac70f53bc4aad5d6e3  libstdc++-v3/config/os/hpux/os_defines.h
! 156a8e1620699112640e505cf15e26a5  libstdc++-v3/config/os/mingw32-w64/ctype_base.h
! 2c39cdce70f9febc74daf7b01798cdd0  libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc
! 33732f962d7ed1460f46312ef2dd27d3  libstdc++-v3/config/os/mingw32-w64/ctype_inline.h
! 45ed33e62334b04b28bae5d70bbd97ed  libstdc++-v3/config/os/mingw32-w64/error_constants.h
! dbcc08f425608c78c535e3c38bdd86d6  libstdc++-v3/config/os/mingw32-w64/os_defines.h
! 156a8e1620699112640e505cf15e26a5  libstdc++-v3/config/os/mingw32/ctype_base.h
! 2c39cdce70f9febc74daf7b01798cdd0  libstdc++-v3/config/os/mingw32/ctype_configure_char.cc
! 33732f962d7ed1460f46312ef2dd27d3  libstdc++-v3/config/os/mingw32/ctype_inline.h
! 1a66c862ca32e249d8d7b394d092bd69  libstdc++-v3/config/os/mingw32/error_constants.h
! 6970067bac107c5875f4a6a43eea7718  libstdc++-v3/config/os/mingw32/os_defines.h
! 364a7a506055c8d013ec87ba46e239b9  libstdc++-v3/config/os/newlib/ctype_base.h
! df3e291ccd8afccf10ccb45fcea9e669  libstdc++-v3/config/os/newlib/ctype_configure_char.cc
! 31bafa66fdbad23f4a4acafa374e5853  libstdc++-v3/config/os/newlib/ctype_inline.h
! 214bac3c44b72b39bb44d8032b334a5d  libstdc++-v3/config/os/newlib/os_defines.h
! ee33087222222912f28a34cd13868247  libstdc++-v3/config/os/qnx/qnx6.1/ctype_base.h
! 1dcd257abf8e277fbeac7e632e616378  libstdc++-v3/config/os/qnx/qnx6.1/ctype_configure_char.cc
! f8117032e3c3cb0c669168dbf609cdd6  libstdc++-v3/config/os/qnx/qnx6.1/ctype_inline.h
! 9ec2b8386ca13ba9428a86acb1849d74  libstdc++-v3/config/os/qnx/qnx6.1/os_defines.h
! b2000e2dc020a695a3a1489a4315fe2d  libstdc++-v3/config/os/solaris/ctype_base.h
! 7345b060e9a6c300bdced273ee4b1088  libstdc++-v3/config/os/solaris/ctype_configure_char.cc
! 82fbb19a1614c44d6c3f0cb87465fcc6  libstdc++-v3/config/os/solaris/ctype_inline.h
! 1f47d1ff1bbeac9d0382d81c0ebb1ca7  libstdc++-v3/config/os/solaris/os_defines.h
! 0c92f0a4c060de6ca262481e5cdf328f  libstdc++-v3/config/os/tpf/ctype_base.h
! d880bf6c95e32000add4194f7f9e953f  libstdc++-v3/config/os/tpf/ctype_configure_char.cc
! 1349579e5264a472591d110d2a124b7b  libstdc++-v3/config/os/tpf/ctype_inline.h
! 523c1749803da12f34d25c6eddedd49e  libstdc++-v3/config/os/tpf/os_defines.h
! f13814697af5c87d966915337eb157b4  libstdc++-v3/config/os/uclibc/ctype_base.h
! d00b9bfddb0e8397de2d35e76f678cf4  libstdc++-v3/config/os/uclibc/ctype_configure_char.cc
! 82fbb19a1614c44d6c3f0cb87465fcc6  libstdc++-v3/config/os/uclibc/ctype_inline.h
! 6c614f8a0b68218267f1985f75307b0f  libstdc++-v3/config/os/uclibc/os_defines.h
! 31378f9cda46a5d426ad717bfdf1b16a  libstdc++-v3/config/os/vxworks/ctype_base.h
! 233fbfff89917179ae9fc7fecbd37a4b  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
! 1b61257cbf79eed6c1465ccd5906ed98  libstdc++-v3/config/os/vxworks/ctype_inline.h
! cf270f423d6238158d5385095a7fc932  libstdc++-v3/config/os/vxworks/os_defines.h
! a69bbe50a3ebbd9d900f2fb44dc7fd53  libstdc++-v3/configure
! d3b5d9175c6f9f05ef6fc6392133a461  libstdc++-v3/configure.ac
  6f48d91af78c16e62f258e7bedec5125  libstdc++-v3/configure.host
! 1ad0555cf1f65702d35f5d19683b6a49  libstdc++-v3/crossconfig.m4
! cc745dd7b8642a37dd519d4df34943fc  libstdc++-v3/doc/Makefile.am
! 19e98b93076520aad66723240a8e6f6b  libstdc++-v3/doc/Makefile.in
  3f7ff07f68cc7610addc1921bc125548  libstdc++-v3/doc/doxygen/Intro.3
! 998d95ce2a84ce717d3c610d3bb7b391  libstdc++-v3/doc/doxygen/doxygroups.cc
  520db39aef0e2a59418132af88b897ed  libstdc++-v3/doc/doxygen/mainpage.html
! 3486d64b0aaa601908006a0e78395ca3  libstdc++-v3/doc/doxygen/stdheader.cc
  1273764cd133c402d2d3f22cf2913af5  libstdc++-v3/doc/doxygen/tables.html
! 094b7ada8fdae2bf6b49063199dddd20  libstdc++-v3/doc/doxygen/user.cfg.in
  66e139590a163a3e9d632f33fbe1d1b3  libstdc++-v3/doc/html/README
  c68ff21babfa14f20b98e36a2c808418  libstdc++-v3/doc/html/api.html
  fd168dc2b2d0c12b1e17b40ffec96390  libstdc++-v3/doc/html/bk02.html
--- 104373,104584 ----
  72cd87c288677791bf39ac8327b1cf25  libstdc++-v3/ChangeLog-2018
  a8f4290dba5b481ad426148a03c75dd0  libstdc++-v3/ChangeLog-2019
  0f81783bc492458ec96cea677852a49c  libstdc++-v3/ChangeLog-2020
! 80dfa9a5544b6411fbf1fb50c37abdaa  libstdc++-v3/ChangeLog-2021
! 6a380413ccbbfc2fdf8d8bc0138fbbd9  libstdc++-v3/Makefile.am
! 19c8cb7684c2596811789c770fbe79fc  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! 0ca457c35026dac5a17e7d2844a4d4ab  libstdc++-v3/acinclude.m4
  734c1cbc8791fbceb09b49c5d07d6966  libstdc++-v3/aclocal.m4
! 48863d00376e9e574b47dc1e7231dfb4  libstdc++-v3/config.h.in
! b321f08c525a980d5443810305bb4463  libstdc++-v3/config/abi/compatibility.h
! 1e503159ee7333dd5a3f9df292325d11  libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt
  730569c0ef38f6e6322b3c4ac65253ce  libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt
  ad5f7ad17c209326dd45364406b5a992  libstdc++-v3/config/abi/post/hppa-linux-gnu/baseline_symbols.txt
  3564a8198041594b04f35e13701fdb53  libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt
! f896eb5b97c15fc2c2822ebc5ed295e9  libstdc++-v3/config/abi/post/i386-solaris/amd64/baseline_symbols.txt
! a7b2a557cedd7844f4f9e74bce54ad58  libstdc++-v3/config/abi/post/i386-solaris/baseline_symbols.txt
! 34afe226d3b0ee9863254b19f64c31a0  libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt
  01500b319bb297b4059106c465b92567  libstdc++-v3/config/abi/post/ia64-linux-gnu/baseline_symbols.txt
  145f9897a5e2606b2eefcbdde501b065  libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt
  61308215d393f11169ace76935f2b034  libstdc++-v3/config/abi/post/mips-linux-gnu/baseline_symbols.txt
  725325d7b24195d1e6374ce4e24afdb0  libstdc++-v3/config/abi/post/mips64-linux-gnu/32/baseline_symbols.txt
  907face03890009654193fc67fa4e427  libstdc++-v3/config/abi/post/mips64-linux-gnu/64/baseline_symbols.txt
  1a34bda2bb4c3a576335343c0a4a9377  libstdc++-v3/config/abi/post/mips64-linux-gnu/baseline_symbols.txt
! 0fe1ef0ffda9bb3ad933875c2afb1354  libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt
! 0fe1ef0ffda9bb3ad933875c2afb1354  libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt
! 4eb853cd9faf4418cfd210d93d297c2b  libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt
  104287e40f1276a2b123d0a86f37d9b4  libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt
  3ec228e0d9301df0938cba4a7fb94374  libstdc++-v3/config/abi/post/s390-linux-gnu/baseline_symbols.txt
  3ec228e0d9301df0938cba4a7fb94374  libstdc++-v3/config/abi/post/s390x-linux-gnu/32/baseline_symbols.txt
! 2a9e7feffeee4d4d5be854c15a44e416  libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt
  cc65678819ec7ff06eaeed8b1a5455eb  libstdc++-v3/config/abi/post/sparc-linux-gnu/baseline_symbols.txt
! c8187db064d0536a9faf78019b01cdf4  libstdc++-v3/config/abi/post/sparc-solaris/baseline_symbols.txt
! cfbb215e4868f599080e4ba0acad37c0  libstdc++-v3/config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt
  ebf1c408e326c18c0c1f337bc5108fae  libstdc++-v3/config/abi/post/sparc64-linux-gnu/32/baseline_symbols.txt
  c224a11f9b7b76848462bffd472b20c2  libstdc++-v3/config/abi/post/sparc64-linux-gnu/baseline_symbols.txt
! 34afe226d3b0ee9863254b19f64c31a0  libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt
! 3558c96501c17b8ca30a6aa1c9fd9bb3  libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt
  483a11b93ae0da31d1f2f6470d4e7578  libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
  5c4c38aeca254313c616b84337c937c3  libstdc++-v3/config/abi/pre/float128.ver
! 66642d9e77eacb7c94cf969cf2b4812b  libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
! a14a1de5a21e02313f592ce822d03729  libstdc++-v3/config/abi/pre/gnu.ver
  b01f8da8f4373070847fe317fe8a546e  libstdc++-v3/config/abi/pre/none.ver
! 5b1437b6511efce579bf1da38fbf09e4  libstdc++-v3/config/allocator/malloc_allocator_base.h
! 3c43333b0e1372330d7f702387d162e2  libstdc++-v3/config/allocator/new_allocator_base.h
! dfce7276b58a154b2bc5e32da0857f53  libstdc++-v3/config/cpu/aarch64/opt/bits/opt_random.h
! ad78f8ccc8fa9d36e3fc3263e3339664  libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h
! 350ddc20b89951f58a8a3d3fdf5c81eb  libstdc++-v3/config/cpu/arm/cpu_defines.h
! f9af62f198176a5d26a4a86a0e193513  libstdc++-v3/config/cpu/arm/cxxabi_tweaks.h
! 266ad51a6746ccb33911a163130edc52  libstdc++-v3/config/cpu/cris/atomic_word.h
! 560006eb211b98d6e94638154c910b5e  libstdc++-v3/config/cpu/cris/atomicity.h
! 88c7abdbdfccd2c772c6a74529ed5e1a  libstdc++-v3/config/cpu/generic/atomic_word.h
! aeede4f24738ec48045ebdc1e6a3c376  libstdc++-v3/config/cpu/generic/atomicity_builtins/atomicity.h
! d57572b2813ca200b0446e18114c930c  libstdc++-v3/config/cpu/generic/atomicity_mutex/atomicity.h
! 4514282bedbc22196d1aaee061e6500c  libstdc++-v3/config/cpu/generic/cpu_defines.h
! 76d9ffdcc3f68973d1cd559ad4cf848e  libstdc++-v3/config/cpu/generic/cxxabi_tweaks.h
! fca90bac6c48ea9e6c561fc93fa7aee9  libstdc++-v3/config/cpu/generic/opt/bits/opt_random.h
! 8eed2cf1cf6c0807fdbcd11dd9483944  libstdc++-v3/config/cpu/generic/opt/ext/opt_random.h
! dc921efb4ef4ecc542a99fd9d527291c  libstdc++-v3/config/cpu/hppa/atomicity.h
! 931f8c1cbcad18bc14f13abb08939983  libstdc++-v3/config/cpu/i386/atomicity.h
! fcc15ae77a67ff213eba4cd4621e0b20  libstdc++-v3/config/cpu/i486/atomicity.h
! 926ba4b8455c31d3be5ce75d240029d9  libstdc++-v3/config/cpu/i486/opt/bits/opt_random.h
! a780b5a0bfe17f4d8aa7f1e93758516e  libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h
! a3c2eb1ba564b0d6216d7cedf0485645  libstdc++-v3/config/cpu/m68k/atomicity.h
! 92434f0f934aa4721185120ece27a79b  libstdc++-v3/config/cpu/microblaze/cpu_defines.h
! a26caf1cbae7ec64ae4fbb6f805c0a43  libstdc++-v3/config/cpu/powerpc/cpu_defines.h
! c975e13735ebb9be1461f2ad8ac4410d  libstdc++-v3/config/cpu/sh/atomicity.h
! ef2abdb7456c30a1284e9c584aa6c997  libstdc++-v3/config/cpu/sparc/atomic_word.h
! ad343c746c7e744633b4f289946e24e2  libstdc++-v3/config/cpu/sparc/atomicity.h
! cc22c8b1fb2381085637d59007445f35  libstdc++-v3/config/io/basic_file_stdio.cc
! 6cf1e4b1e947dc35dd4afd51c59dd19f  libstdc++-v3/config/io/basic_file_stdio.h
! a318b6ec50abc4d7950c4833d5b47e87  libstdc++-v3/config/io/c_io_stdio.h
! f56c983e3b553cbca607693455c506dc  libstdc++-v3/config/locale/darwin/ctype_members.cc
! ff103ad952be401b9119e3080f1aa8f4  libstdc++-v3/config/locale/dragonfly/c_locale.cc
! 08bc55fbed0a62158dc9f7a3eec86f18  libstdc++-v3/config/locale/dragonfly/c_locale.h
! 579a370aa0a9c02a97101e49dde3a5b1  libstdc++-v3/config/locale/dragonfly/codecvt_members.cc
! 948716d5c473223894b07a2cd1b46b55  libstdc++-v3/config/locale/dragonfly/collate_members.cc
! 294940c239188675f5812456391082d4  libstdc++-v3/config/locale/dragonfly/ctype_members.cc
! 3066cd64307439b89bca48a9ad0fcbd7  libstdc++-v3/config/locale/dragonfly/monetary_members.cc
! 758a8207907077dc47894deef87bb41b  libstdc++-v3/config/locale/dragonfly/numeric_members.cc
! 3afff48143d4d5328f25ce8d1a7be320  libstdc++-v3/config/locale/dragonfly/time_members.cc
! 532cdb9cdaa32b062e0b0fdc59048264  libstdc++-v3/config/locale/dragonfly/time_members.h
! 41b732bd6e956b75f4e72178083d51fc  libstdc++-v3/config/locale/generic/c++locale_internal.h
! 43be7b051ef90a4830367e8b09d5f30c  libstdc++-v3/config/locale/generic/c_locale.cc
! b17a3a851ba329b83b7df22d590e6d9e  libstdc++-v3/config/locale/generic/c_locale.h
! c64efe58391d29c315255303f31c5ae5  libstdc++-v3/config/locale/generic/codecvt_members.cc
! 0c0e50a388187a181297a9fc2271cfc8  libstdc++-v3/config/locale/generic/collate_members.cc
! 0e92b92eb7a6f0c1a5dfa7adc4c9efad  libstdc++-v3/config/locale/generic/ctype_members.cc
! 85891feda5d3efedfc0da27b06598d3a  libstdc++-v3/config/locale/generic/messages_members.cc
! 3f6721709652773dfe6df1221603bf1e  libstdc++-v3/config/locale/generic/messages_members.h
! 7a64055b1d4f7b942008c56aec778d49  libstdc++-v3/config/locale/generic/monetary_members.cc
! 25a008f8e619d330378f62bfda8a9b28  libstdc++-v3/config/locale/generic/numeric_members.cc
! 3fe34f21b478c5cb895bc5f59d660013  libstdc++-v3/config/locale/generic/time_members.cc
! fc8f0475018b2fe296a7151498b08f84  libstdc++-v3/config/locale/generic/time_members.h
! d649efaa1d67b6a32482457084340da4  libstdc++-v3/config/locale/gnu/c++locale_internal.h
! 63f7610e6ba3d0cb333f394ef10058b2  libstdc++-v3/config/locale/gnu/c_locale.cc
! 8b19e8b7a27abe174b4aa7000ff1d65f  libstdc++-v3/config/locale/gnu/c_locale.h
! e245187a00e704e402208137455fa34a  libstdc++-v3/config/locale/gnu/codecvt_members.cc
! 17be4220eb5be44fee029c648895c18b  libstdc++-v3/config/locale/gnu/collate_members.cc
! cd728212fe99943e83d5c1267b610102  libstdc++-v3/config/locale/gnu/ctype_members.cc
! e03478ba72077ae0708808cf00c3fdec  libstdc++-v3/config/locale/gnu/messages_members.cc
! 44ecc01a03f1a74193d533ea14c053dd  libstdc++-v3/config/locale/gnu/messages_members.h
! 0c5b03b4294e5571b920734130b4f562  libstdc++-v3/config/locale/gnu/monetary_members.cc
! c337c884eb47205c3757d258f47f41c8  libstdc++-v3/config/locale/gnu/numeric_members.cc
! f9081edfe6a524e64c43555fb9e81bac  libstdc++-v3/config/locale/gnu/time_members.cc
! 357a2e1c362c553bd778461ee19367f9  libstdc++-v3/config/locale/gnu/time_members.h
! 6a8fe8f970490b8e0ca6888b1ad9d754  libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.cc
! fcc1bd52d74d86c3f7dbff31f6bfc2b7  libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.h
! ad55696982153ce28c07b21e27720b80  libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.cc
! ae6ec26a8de3105b870d388295ee19fd  libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.h
! 618156d9e8f2fde151ce0786850be8c7  libstdc++-v3/config/locale/newlib/ctype_members.cc
! 5ac41324402c5781ad0ca304a1cc8ca8  libstdc++-v3/config/locale/vxworks/ctype_members.cc
! 52a674c71fdd1ed36c899e9e9662e339  libstdc++-v3/config/os/aix/ctype_base.h
! 98b61494bb0364dd62a284430d82b6f8  libstdc++-v3/config/os/aix/ctype_configure_char.cc
! 8af581c9ce59d1b8fe0bf21500723678  libstdc++-v3/config/os/aix/ctype_inline.h
! e5a34ef5217bac48e0b5e7414d7bb963  libstdc++-v3/config/os/aix/os_defines.h
  7d1373c31caa4fdc44bcb11af08b4ab3  libstdc++-v3/config/os/aix/t-aix
! 49e197f6c179a7ff24aa3b5d29f43af3  libstdc++-v3/config/os/bionic/ctype_base.h
! fb55b97b9c8b6664584b41cafc01014c  libstdc++-v3/config/os/bionic/ctype_configure_char.cc
! dc513f5198c5ffc2f13331b207a27767  libstdc++-v3/config/os/bionic/ctype_inline.h
! cf2c568c51de05c8c9ea4fc73cc4a7d1  libstdc++-v3/config/os/bionic/os_defines.h
! 4dba8f5fff21b944bc6c09b7476a0cbe  libstdc++-v3/config/os/bsd/darwin/ctype_base.h
! 98b61494bb0364dd62a284430d82b6f8  libstdc++-v3/config/os/bsd/darwin/ctype_configure_char.cc
! bea58f0b1462adb4715391585424c2f4  libstdc++-v3/config/os/bsd/darwin/ctype_inline.h
! 89a3b806f2477b51ebadc834cacf5569  libstdc++-v3/config/os/bsd/darwin/os_defines.h
  9e91dfcb11e4c78744df0e1e0cf69b5b  libstdc++-v3/config/os/bsd/darwin/ppc-extra.ver
! 0ce4b7914f00fd6af304f11efd7cfd30  libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h
! eec583ae69a4a2889d741f1943ff6d81  libstdc++-v3/config/os/bsd/dragonfly/ctype_configure_char.cc
! 13f254bb29960388cffae291a38ccf14  libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h
! 42f4856c71af72d24a2e65811918b310  libstdc++-v3/config/os/bsd/dragonfly/os_defines.h
! 52734718ac4b3f8c66060137b2b5816d  libstdc++-v3/config/os/bsd/freebsd/ctype_base.h
! eec583ae69a4a2889d741f1943ff6d81  libstdc++-v3/config/os/bsd/freebsd/ctype_configure_char.cc
! bea58f0b1462adb4715391585424c2f4  libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h
! 32f1874bd6f58a3696ffaf7e58af025a  libstdc++-v3/config/os/bsd/freebsd/os_defines.h
! c704a60fd34e71754a9e9247a2bfbf7f  libstdc++-v3/config/os/bsd/netbsd/ctype_base.h
! 78f7b96a098cd1794f44a1dca6c44c84  libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc
! 59d399725a409c40e829249c0e2d2c1c  libstdc++-v3/config/os/bsd/netbsd/ctype_inline.h
! 4c62671d3a3f99695a7e859d8c497e95  libstdc++-v3/config/os/bsd/netbsd/os_defines.h
! 15864face6a8885cf9973392677f50ac  libstdc++-v3/config/os/bsd/openbsd/ctype_base.h
! 64d678a41c0944584cc0702afdc290e9  libstdc++-v3/config/os/bsd/openbsd/ctype_configure_char.cc
! dc513f5198c5ffc2f13331b207a27767  libstdc++-v3/config/os/bsd/openbsd/ctype_inline.h
! 5b072d2d8fa54f60a8ba2704d77498d2  libstdc++-v3/config/os/bsd/openbsd/os_defines.h
! 998f13bd9217479f2b86a698716e4777  libstdc++-v3/config/os/djgpp/ctype_base.h
! 9475228f7f6e914a6f91b77d23392276  libstdc++-v3/config/os/djgpp/ctype_configure_char.cc
! 82a918d1548686f50665aab5fdb8be44  libstdc++-v3/config/os/djgpp/ctype_inline.h
! 472d5fa7cff0ab8ff16fb9bd2ceceb21  libstdc++-v3/config/os/djgpp/error_constants.h
! b53dc94450a6b15d945267fe1865110c  libstdc++-v3/config/os/djgpp/os_defines.h
! 816da92c709e934d0a9075cde98334d5  libstdc++-v3/config/os/generic/ctype_base.h
! 98b61494bb0364dd62a284430d82b6f8  libstdc++-v3/config/os/generic/ctype_configure_char.cc
! 1c805f2af6496182d0750fd53950deb3  libstdc++-v3/config/os/generic/ctype_inline.h
! 544690df535b8525ae1af3be66f624c3  libstdc++-v3/config/os/generic/error_constants.h
! f4e89b9b5c5711b2f1284c214cc37e0a  libstdc++-v3/config/os/generic/os_defines.h
  5b9a724ca8744a0e193a82f2ea8e9f5b  libstdc++-v3/config/os/gnu-linux/arm-eabi-extra.ver
! e32cb69000468d313fed385dac17c01f  libstdc++-v3/config/os/gnu-linux/ctype_base.h
! 3f263597a19976e44efd34d676a68297  libstdc++-v3/config/os/gnu-linux/ctype_configure_char.cc
! f7f2a9066ec503446c350e59c7bacc6d  libstdc++-v3/config/os/gnu-linux/ctype_inline.h
  df7b0a76ea127cef7009bec82b53dcee  libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver
! 172922859edc03edad69fc4bb48bd146  libstdc++-v3/config/os/gnu-linux/ldbl-ieee128-extra.ver
! 5d333ac3003c8be693a0f476335cae73  libstdc++-v3/config/os/gnu-linux/os_defines.h
! 6e1c8b6cb2de657d6e522c87825a9b62  libstdc++-v3/config/os/hpux/ctype_base.h
! 4c1c47b02937dd9780d2b9fbdc52daa2  libstdc++-v3/config/os/hpux/ctype_configure_char.cc
! f7f2a9066ec503446c350e59c7bacc6d  libstdc++-v3/config/os/hpux/ctype_inline.h
! 70a5d6b94e7e7be148f08122f979fc9d  libstdc++-v3/config/os/hpux/os_defines.h
! c9b3012b8b854342d757aa1ec1752120  libstdc++-v3/config/os/mingw32-w64/ctype_base.h
! 3686fb4a40ba6dfe23cfbcc66eaf8748  libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc
! efc8d6a9c6e8833c23d11fafead73511  libstdc++-v3/config/os/mingw32-w64/ctype_inline.h
! 9230b325aa823b2076d54053f472452a  libstdc++-v3/config/os/mingw32-w64/error_constants.h
! e1550f5d98b931bf358c796310003ef6  libstdc++-v3/config/os/mingw32-w64/os_defines.h
! c9b3012b8b854342d757aa1ec1752120  libstdc++-v3/config/os/mingw32/ctype_base.h
! 3686fb4a40ba6dfe23cfbcc66eaf8748  libstdc++-v3/config/os/mingw32/ctype_configure_char.cc
! efc8d6a9c6e8833c23d11fafead73511  libstdc++-v3/config/os/mingw32/ctype_inline.h
! 7d900463c44da7c0c01137a8c1392e1a  libstdc++-v3/config/os/mingw32/error_constants.h
! 279a16a8e97e72e5459c7dc45b955a46  libstdc++-v3/config/os/mingw32/os_defines.h
! cbc720fee3827788670b34ca5ee92af3  libstdc++-v3/config/os/newlib/ctype_base.h
! fb55b97b9c8b6664584b41cafc01014c  libstdc++-v3/config/os/newlib/ctype_configure_char.cc
! 1406fa63200b24031de77a0c5f752e54  libstdc++-v3/config/os/newlib/ctype_inline.h
! 2639d75fd3f8783a8e4fab238eca828c  libstdc++-v3/config/os/newlib/os_defines.h
! 37ddeb234613955c204a3381aa2a84fb  libstdc++-v3/config/os/qnx/qnx6.1/ctype_base.h
! dfb87ea53334b1d7b9751357ae5316b7  libstdc++-v3/config/os/qnx/qnx6.1/ctype_configure_char.cc
! ffc4ab91c485148808642f377ba5646c  libstdc++-v3/config/os/qnx/qnx6.1/ctype_inline.h
! f2664f68de636d8495797f645280c7bf  libstdc++-v3/config/os/qnx/qnx6.1/os_defines.h
! b39d90e3910dccf806db8fec4af5e98f  libstdc++-v3/config/os/solaris/ctype_base.h
! 6086f2ede06dc20d1c394acc5c7d6ba8  libstdc++-v3/config/os/solaris/ctype_configure_char.cc
! f7f2a9066ec503446c350e59c7bacc6d  libstdc++-v3/config/os/solaris/ctype_inline.h
! cf5b2c02adae407d7d05649198521974  libstdc++-v3/config/os/solaris/os_defines.h
! 1d48e86f0b8850c3cc2b4271250efd12  libstdc++-v3/config/os/tpf/ctype_base.h
! b4ac47d60af5e25c38d30270d0cd3943  libstdc++-v3/config/os/tpf/ctype_configure_char.cc
! 822f8e264142155aa1904225f05ff622  libstdc++-v3/config/os/tpf/ctype_inline.h
! d523cf05d2f866be3c82592e2570bd1e  libstdc++-v3/config/os/tpf/os_defines.h
! a49a68237544acb2c4b1f90a77482399  libstdc++-v3/config/os/uclibc/ctype_base.h
! 83b20fba707307731799c7796ad6946f  libstdc++-v3/config/os/uclibc/ctype_configure_char.cc
! f7f2a9066ec503446c350e59c7bacc6d  libstdc++-v3/config/os/uclibc/ctype_inline.h
! bf07a890aa6d276f0880e3e25ba8c7e2  libstdc++-v3/config/os/uclibc/os_defines.h
! b32b29daa3ac6240ae38f37366b0d4da  libstdc++-v3/config/os/vxworks/ctype_base.h
! 78d15556a78885c1221dbb429fd77a08  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
! 11c759cf4b750f149bca3052e251404d  libstdc++-v3/config/os/vxworks/ctype_inline.h
! a58306525e8e9363101bf5738db96b46  libstdc++-v3/config/os/vxworks/os_defines.h
! 33ae2defbe98d5c7854f643ff489dc68  libstdc++-v3/configure
! 66ce87efbc534ee0cded86eba4d48aeb  libstdc++-v3/configure.ac
  6f48d91af78c16e62f258e7bedec5125  libstdc++-v3/configure.host
! 584164974df7c169b96d93356371b4a7  libstdc++-v3/crossconfig.m4
! 894b6a88368e88c0d19c47645d774272  libstdc++-v3/doc/Makefile.am
! 7537e7f1f6147c676f1bdf9a3a3998c6  libstdc++-v3/doc/Makefile.in
  3f7ff07f68cc7610addc1921bc125548  libstdc++-v3/doc/doxygen/Intro.3
! c37369d9fe7e0c00db096144ce0a40ac  libstdc++-v3/doc/doxygen/doxygroups.cc
  520db39aef0e2a59418132af88b897ed  libstdc++-v3/doc/doxygen/mainpage.html
! f298475c719652bf6b563563d90f327a  libstdc++-v3/doc/doxygen/stdheader.cc
  1273764cd133c402d2d3f22cf2913af5  libstdc++-v3/doc/doxygen/tables.html
! b9e8e99e73cb66ebaed809352a24bc1f  libstdc++-v3/doc/doxygen/user.cfg.in
  66e139590a163a3e9d632f33fbe1d1b3  libstdc++-v3/doc/html/README
  c68ff21babfa14f20b98e36a2c808418  libstdc++-v3/doc/html/api.html
  fd168dc2b2d0c12b1e17b40ffec96390  libstdc++-v3/doc/html/bk02.html
*************** d7249eb4d31bd107d0b09ea3c80cb723  libstd
*** 97846,97875 ****
  1d86b338a316806c80b250eb132ac6dd  libstdc++-v3/doc/html/images/pbds_tree_text_lor_find.png
  33bc39e8f2d47f3d490d7ca7d4832b43  libstdc++-v3/doc/html/images/pbds_trie_node_updator_policy_cd.png
  df705f3839120dcb896e9839cf3404d0  libstdc++-v3/doc/html/images/pbds_update_seq_diagram.png
! c31c56e341c4377c8c4d0ab3861a0fce  libstdc++-v3/doc/html/index.html
! 24de5f936e90a1f57f037f166ff75004  libstdc++-v3/doc/html/manual/abi.html
  4ce10e27356ac31a5b7962aecbeb3638  libstdc++-v3/doc/html/manual/algorithms.html
! 70a5fa3916abe3de8650b93632b6914b  libstdc++-v3/doc/html/manual/api.html
! 7c6d43d50040fdcfce63d3ae3b6a56dc  libstdc++-v3/doc/html/manual/appendix.html
  9fecd7dab1bd0d46e97d36cded231ebe  libstdc++-v3/doc/html/manual/appendix_contributing.html
  23038a3eb57967596dd7dc4f944e55e6  libstdc++-v3/doc/html/manual/appendix_free.html
  7bedd2c8f6a4683546db552dc3e8261f  libstdc++-v3/doc/html/manual/appendix_gfdl.html
  502f9b7267830b21cb88745d060faacf  libstdc++-v3/doc/html/manual/appendix_gpl.html
! 464ade72999da1197a60a12548a37352  libstdc++-v3/doc/html/manual/appendix_porting.html
  88601e29445579d77cd6a3a88c8df909  libstdc++-v3/doc/html/manual/associative.html
  b8ac9fc2f2cfcaed0450c79e2fb01569  libstdc++-v3/doc/html/manual/atomics.html
  d30e8a474595941b24a6493ad08f78d9  libstdc++-v3/doc/html/manual/backwards.html
  c60c6ae778d5dedae24ac21abf948bdb  libstdc++-v3/doc/html/manual/bitmap_allocator.html
  3a3d01d1d9478286b8c505d1449531d4  libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
! f6f0410c2bcc234e2fa3a5dd8949e086  libstdc++-v3/doc/html/manual/bugs.html
  cc3700f2fde50987f186f23abf98a7b1  libstdc++-v3/doc/html/manual/concept_checking.html
  f3a54a6315d716742603d33f454f2c19  libstdc++-v3/doc/html/manual/concurrency.html
! 99088f38a5f288b88340a71d68f773eb  libstdc++-v3/doc/html/manual/configure.html
  af4e79b9e55fd023eeb0459df34a4a82  libstdc++-v3/doc/html/manual/containers.html
  c7e40c1085e414b3b4d5896db4013205  libstdc++-v3/doc/html/manual/containers_and_c.html
  f71d3ed5d8c1753572ba02518e3744a9  libstdc++-v3/doc/html/manual/debug.html
  1bd34529d162b6f3a08d5f2ea4943c6a  libstdc++-v3/doc/html/manual/debug_mode.html
! 1cdde24f16865575b93bcb86156f70e5  libstdc++-v3/doc/html/manual/debug_mode_design.html
  397ce9357678670b7c451c92eab7cb57  libstdc++-v3/doc/html/manual/debug_mode_semantics.html
  f94c6123cd922b92f4f2b6a80705ec16  libstdc++-v3/doc/html/manual/debug_mode_using.html
  7f6c5a9eb000f65ee1888d459beb9dd5  libstdc++-v3/doc/html/manual/diagnostics.html
--- 104663,104692 ----
  1d86b338a316806c80b250eb132ac6dd  libstdc++-v3/doc/html/images/pbds_tree_text_lor_find.png
  33bc39e8f2d47f3d490d7ca7d4832b43  libstdc++-v3/doc/html/images/pbds_trie_node_updator_policy_cd.png
  df705f3839120dcb896e9839cf3404d0  libstdc++-v3/doc/html/images/pbds_update_seq_diagram.png
! 51ebe5c3f1ceb9cabda23b72007d10d4  libstdc++-v3/doc/html/index.html
! a209ef6bf8db1505797bd1dc63bd3b61  libstdc++-v3/doc/html/manual/abi.html
  4ce10e27356ac31a5b7962aecbeb3638  libstdc++-v3/doc/html/manual/algorithms.html
! f733cdb9b83f2f9d3cb2218dd6c95ec9  libstdc++-v3/doc/html/manual/api.html
! 397d795e4bc3a6ce5274efcf5484209e  libstdc++-v3/doc/html/manual/appendix.html
  9fecd7dab1bd0d46e97d36cded231ebe  libstdc++-v3/doc/html/manual/appendix_contributing.html
  23038a3eb57967596dd7dc4f944e55e6  libstdc++-v3/doc/html/manual/appendix_free.html
  7bedd2c8f6a4683546db552dc3e8261f  libstdc++-v3/doc/html/manual/appendix_gfdl.html
  502f9b7267830b21cb88745d060faacf  libstdc++-v3/doc/html/manual/appendix_gpl.html
! 0a2d7fa79ca1803ba675257d54f5cdf2  libstdc++-v3/doc/html/manual/appendix_porting.html
  88601e29445579d77cd6a3a88c8df909  libstdc++-v3/doc/html/manual/associative.html
  b8ac9fc2f2cfcaed0450c79e2fb01569  libstdc++-v3/doc/html/manual/atomics.html
  d30e8a474595941b24a6493ad08f78d9  libstdc++-v3/doc/html/manual/backwards.html
  c60c6ae778d5dedae24ac21abf948bdb  libstdc++-v3/doc/html/manual/bitmap_allocator.html
  3a3d01d1d9478286b8c505d1449531d4  libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
! 2741fd04fa6be9e2916e02d218111692  libstdc++-v3/doc/html/manual/bugs.html
  cc3700f2fde50987f186f23abf98a7b1  libstdc++-v3/doc/html/manual/concept_checking.html
  f3a54a6315d716742603d33f454f2c19  libstdc++-v3/doc/html/manual/concurrency.html
! 3216f881771cf6846b27f28144bb32d9  libstdc++-v3/doc/html/manual/configure.html
  af4e79b9e55fd023eeb0459df34a4a82  libstdc++-v3/doc/html/manual/containers.html
  c7e40c1085e414b3b4d5896db4013205  libstdc++-v3/doc/html/manual/containers_and_c.html
  f71d3ed5d8c1753572ba02518e3744a9  libstdc++-v3/doc/html/manual/debug.html
  1bd34529d162b6f3a08d5f2ea4943c6a  libstdc++-v3/doc/html/manual/debug_mode.html
! 90b457b0d4240ee5b826a815bcd90912  libstdc++-v3/doc/html/manual/debug_mode_design.html
  397ce9357678670b7c451c92eab7cb57  libstdc++-v3/doc/html/manual/debug_mode_semantics.html
  f94c6123cd922b92f4f2b6a80705ec16  libstdc++-v3/doc/html/manual/debug_mode_using.html
  7f6c5a9eb000f65ee1888d459beb9dd5  libstdc++-v3/doc/html/manual/diagnostics.html
*************** afcc2751dae09e088abc1e3175cb94cc  libstd
*** 97890,97899 ****
  5632eb8ef681cd35b41be7eb7a3d7a98  libstdc++-v3/doc/html/manual/ext_sgi.html
  9b34310c7cb7faa4373ee6683678c457  libstdc++-v3/doc/html/manual/ext_utilities.html
  5c3d4b1da33055adb0a5fc9742fdbe19  libstdc++-v3/doc/html/manual/extensions.html
! 909760c7437c6622b56dcc4fb9ba89e8  libstdc++-v3/doc/html/manual/facets.html
  9b06f8b16b4ba69e1269f98bb22377f2  libstdc++-v3/doc/html/manual/fstreams.html
  b404abb1e78a27e8a8980eb14ec27bab  libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
! e39219ab2b0d00f3de0b1cbf5c06eeba  libstdc++-v3/doc/html/manual/index.html
  8687facb6d19ccc2a663efbc50e745a1  libstdc++-v3/doc/html/manual/internals.html
  29e0671531d99a27944e6d073ec62182  libstdc++-v3/doc/html/manual/intro.html
  46de5aefef02b8c599fc816bea53ae67  libstdc++-v3/doc/html/manual/io.html
--- 104707,104716 ----
  5632eb8ef681cd35b41be7eb7a3d7a98  libstdc++-v3/doc/html/manual/ext_sgi.html
  9b34310c7cb7faa4373ee6683678c457  libstdc++-v3/doc/html/manual/ext_utilities.html
  5c3d4b1da33055adb0a5fc9742fdbe19  libstdc++-v3/doc/html/manual/extensions.html
! 792387063cb26c7711919085d56706c2  libstdc++-v3/doc/html/manual/facets.html
  9b06f8b16b4ba69e1269f98bb22377f2  libstdc++-v3/doc/html/manual/fstreams.html
  b404abb1e78a27e8a8980eb14ec27bab  libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
! a1e023029c7387984bced1bb3a2cd058  libstdc++-v3/doc/html/manual/index.html
  8687facb6d19ccc2a663efbc50e745a1  libstdc++-v3/doc/html/manual/internals.html
  29e0671531d99a27944e6d073ec62182  libstdc++-v3/doc/html/manual/intro.html
  46de5aefef02b8c599fc816bea53ae67  libstdc++-v3/doc/html/manual/io.html
*************** e39219ab2b0d00f3de0b1cbf5c06eeba  libstd
*** 97902,97909 ****
  ae9b2e57903953c857a0a2314010036c  libstdc++-v3/doc/html/manual/license.html
  945f5ecd78f495a46c64b58665a37d69  libstdc++-v3/doc/html/manual/localization.html
  9d7282a3a92209b987a91b15973414af  libstdc++-v3/doc/html/manual/make.html
! 3e56835007ff137302fcc3decedc88ac  libstdc++-v3/doc/html/manual/memory.html
! 6049f5f1881d1fc5361f71d06342fd77  libstdc++-v3/doc/html/manual/mt_allocator.html
  4934caabf7eef9ff3618e9ac17acba49  libstdc++-v3/doc/html/manual/mt_allocator_design.html
  bdbb1ff20830123a43576a05081312f9  libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
  a40a3344663fbccc3184759981310047  libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
--- 104719,104726 ----
  ae9b2e57903953c857a0a2314010036c  libstdc++-v3/doc/html/manual/license.html
  945f5ecd78f495a46c64b58665a37d69  libstdc++-v3/doc/html/manual/localization.html
  9d7282a3a92209b987a91b15973414af  libstdc++-v3/doc/html/manual/make.html
! 79ce8b8c8a55f8294be3f213331e0f5e  libstdc++-v3/doc/html/manual/memory.html
! c40a00e2cba07156a6bd77b14cccc2e4  libstdc++-v3/doc/html/manual/mt_allocator.html
  4934caabf7eef9ff3618e9ac17acba49  libstdc++-v3/doc/html/manual/mt_allocator_design.html
  bdbb1ff20830123a43576a05081312f9  libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
  a40a3344663fbccc3184759981310047  libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
*************** d6e655afa90caf559aa77ae772faf5dc  libstd
*** 97928,97938 ****
  dc012f6bbeb24332ca023dc15d6da9cf  libstdc++-v3/doc/html/manual/profile_mode_devel.html
  d55e182adbf08772ec85b18d390b0dbb  libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
  0e9a02c563561ad32d5b24fd930bf8f5  libstdc++-v3/doc/html/manual/profile_mode_impl.html
! 30dc2d04c79d520f048c2759bf437b5b  libstdc++-v3/doc/html/manual/setup.html
  f82628740b7b95e95da49ce234a05bca  libstdc++-v3/doc/html/manual/source_code_style.html
  f875f3f4cddfe4fee6aff2308ccb4563  libstdc++-v3/doc/html/manual/source_design_notes.html
  391422dd4f4cdbd4d764a952a0f345e6  libstdc++-v3/doc/html/manual/source_organization.html
! 3b1206d3071580d56c6149d5ddf385a9  libstdc++-v3/doc/html/manual/status.html
  ea0c531c09fa230f346f8ba700961e4a  libstdc++-v3/doc/html/manual/std_contents.html
  dbb5f81a9e8864374fbb835eaa4e8b0d  libstdc++-v3/doc/html/manual/streambufs.html
  47e6a6ef4752e7c7e3ecb2a4948a7514  libstdc++-v3/doc/html/manual/strings.html
--- 104745,104755 ----
  dc012f6bbeb24332ca023dc15d6da9cf  libstdc++-v3/doc/html/manual/profile_mode_devel.html
  d55e182adbf08772ec85b18d390b0dbb  libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
  0e9a02c563561ad32d5b24fd930bf8f5  libstdc++-v3/doc/html/manual/profile_mode_impl.html
! 4f2e4707781ecd2fa65dd26ab1f38a15  libstdc++-v3/doc/html/manual/setup.html
  f82628740b7b95e95da49ce234a05bca  libstdc++-v3/doc/html/manual/source_code_style.html
  f875f3f4cddfe4fee6aff2308ccb4563  libstdc++-v3/doc/html/manual/source_design_notes.html
  391422dd4f4cdbd4d764a952a0f345e6  libstdc++-v3/doc/html/manual/source_organization.html
! 641ab265229fa439eef0f636ef8d4193  libstdc++-v3/doc/html/manual/status.html
  ea0c531c09fa230f346f8ba700961e4a  libstdc++-v3/doc/html/manual/std_contents.html
  dbb5f81a9e8864374fbb835eaa4e8b0d  libstdc++-v3/doc/html/manual/streambufs.html
  47e6a6ef4752e7c7e3ecb2a4948a7514  libstdc++-v3/doc/html/manual/strings.html
*************** a98d94ba8ccfb620e98ebfe01192e61e  libstd
*** 97948,97954 ****
  4868e3591133577974ca85a537dbd8a0  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
  b9abf80a75c223a9423b212d20240602  libstdc++-v3/doc/html/manual/using_exceptions.html
  8fc6625206a4feba33ced5fa38ab3af8  libstdc++-v3/doc/html/manual/using_headers.html
! 9633d55d0a80170c7115cdfd40bedcb4  libstdc++-v3/doc/html/manual/using_macros.html
  ccc3b1a320ccc49a977c80546610195b  libstdc++-v3/doc/html/manual/using_namespaces.html
  d881fcffb799c09a28d8174ccb1326a2  libstdc++-v3/doc/html/manual/utilities.html
  ccbc0492a648982f2dc225595bdbc567  libstdc++-v3/doc/xml/api.xml
--- 104765,104771 ----
  4868e3591133577974ca85a537dbd8a0  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
  b9abf80a75c223a9423b212d20240602  libstdc++-v3/doc/html/manual/using_exceptions.html
  8fc6625206a4feba33ced5fa38ab3af8  libstdc++-v3/doc/html/manual/using_headers.html
! 2286b8839a9804d12b64eba818f0269c  libstdc++-v3/doc/html/manual/using_macros.html
  ccc3b1a320ccc49a977c80546610195b  libstdc++-v3/doc/html/manual/using_namespaces.html
  d881fcffb799c09a28d8174ccb1326a2  libstdc++-v3/doc/html/manual/utilities.html
  ccbc0492a648982f2dc225595bdbc567  libstdc++-v3/doc/xml/api.xml
*************** cc132f90a00a3ca05f64b578f9e332aa  libstd
*** 98136,98144 ****
  f63bfdc03ba2b82c74864f02206d7c52  libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.svg
  33bc39e8f2d47f3d490d7ca7d4832b43  libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.png
  df705f3839120dcb896e9839cf3404d0  libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.png
! 88de4b5735be84dd96b4933de443860c  libstdc++-v3/doc/xml/manual/abi.xml
  c1d775ba87be90b85044162eab59a66c  libstdc++-v3/doc/xml/manual/algorithms.xml
! 9dab55417f1d5dd3fc88e61ad41e771e  libstdc++-v3/doc/xml/manual/allocator.xml
  955fe25d6d9b0ad80a7234695a81a794  libstdc++-v3/doc/xml/manual/appendix_contributing.xml
  11e0fd62db5b93db462f3c54750904ec  libstdc++-v3/doc/xml/manual/appendix_free.xml
  0e37b1b056c89ad8cd7ef98f9924284c  libstdc++-v3/doc/xml/manual/appendix_porting.xml
--- 104953,104961 ----
  f63bfdc03ba2b82c74864f02206d7c52  libstdc++-v3/doc/xml/images/pbds_tree_text_lor_find.svg
  33bc39e8f2d47f3d490d7ca7d4832b43  libstdc++-v3/doc/xml/images/pbds_trie_node_updator_policy_cd.png
  df705f3839120dcb896e9839cf3404d0  libstdc++-v3/doc/xml/images/pbds_update_seq_diagram.png
! d26e1f333b8bcda0e09acbed5b3475bf  libstdc++-v3/doc/xml/manual/abi.xml
  c1d775ba87be90b85044162eab59a66c  libstdc++-v3/doc/xml/manual/algorithms.xml
! 14c656cb14d8e0a60b8817d8934d7766  libstdc++-v3/doc/xml/manual/allocator.xml
  955fe25d6d9b0ad80a7234695a81a794  libstdc++-v3/doc/xml/manual/appendix_contributing.xml
  11e0fd62db5b93db462f3c54750904ec  libstdc++-v3/doc/xml/manual/appendix_free.xml
  0e37b1b056c89ad8cd7ef98f9924284c  libstdc++-v3/doc/xml/manual/appendix_porting.xml
*************** e184d827d7fb559037041e81118936cb  libstd
*** 98150,98865 ****
  8f13cae7ea80bc018b87b4ff8de7e3cf  libstdc++-v3/doc/xml/manual/codecvt.xml
  af3361d0d0af961859ec0346c38ac8c8  libstdc++-v3/doc/xml/manual/concurrency.xml
  86f27306f8b76aebd69ea92641fd2c94  libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
! 2a354bce3e662dd8b60d6ac5243e4e4b  libstdc++-v3/doc/xml/manual/configure.xml
  b7a892b2e432f52274c482549c3264a2  libstdc++-v3/doc/xml/manual/containers.xml
! a1ff7d876c3d43ddeea13056c5d8079b  libstdc++-v3/doc/xml/manual/ctype.xml
  1ef2d3bb759e6f6de762e1c79ff08030  libstdc++-v3/doc/xml/manual/debug.xml
! e3215d958bafd6fd02249dc5bab42f58  libstdc++-v3/doc/xml/manual/debug_mode.xml
  f320f25003678cca910f09ba54c923fc  libstdc++-v3/doc/xml/manual/diagnostics.xml
  561ce4bba87e35c92c47d95599ca9d9b  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
! a3b670e11d8db732a9352e2fbe236347  libstdc++-v3/doc/xml/manual/evolution.xml
  14742e66a2ac01343ef60e87d06d05ff  libstdc++-v3/doc/xml/manual/extensions.xml
  7f1864c7f3c3b2bfde84b7086be97ca7  libstdc++-v3/doc/xml/manual/internals.xml
! 3bb41abfa95c0595af0cde92765188a9  libstdc++-v3/doc/xml/manual/intro.xml
  93c3158fe28bdfbbf03dd039cc4e79a2  libstdc++-v3/doc/xml/manual/io.xml
  5ac71d67674ea22bcf1e54043bf8e99d  libstdc++-v3/doc/xml/manual/iterators.xml
  b9c8759ff9b60e09bd2875420a55cd31  libstdc++-v3/doc/xml/manual/locale.xml
  b00f98f125f6186c369ce588d795f978  libstdc++-v3/doc/xml/manual/localization.xml
  90cedee1e8e04d1ab87bbf41d47293ec  libstdc++-v3/doc/xml/manual/messages.xml
! 97e1a65bd62a0b553a1239ee0ab92cfa  libstdc++-v3/doc/xml/manual/mt_allocator.xml
  42b8355117a7bd9aa755048290e70d2c  libstdc++-v3/doc/xml/manual/numerics.xml
  7edd591e15a0bbc76d58e9edcb7c28d1  libstdc++-v3/doc/xml/manual/parallel_mode.xml
  b4f22a512ad29af70c76d4e459bdf2a8  libstdc++-v3/doc/xml/manual/policy_data_structures.xml
  d766137e6e226eaf2c354f95fd9c7274  libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml
! 2f4a4ec5c3f1beecb2e7e72f3b0d2958  libstdc++-v3/doc/xml/manual/prerequisites.xml
  cec5c5415c371a664adb0490e2571c3c  libstdc++-v3/doc/xml/manual/shared_ptr.xml
  9a8f1a85034e6fe72b02302051aa7af9  libstdc++-v3/doc/xml/manual/spine.xml
! 0bba6071dae55602cf351932ae6931d8  libstdc++-v3/doc/xml/manual/status_cxx1998.xml
! 7760eae3d9ab7cabae519904b3a5759e  libstdc++-v3/doc/xml/manual/status_cxx2011.xml
! d7679667c783a269bb7718eb5d95f435  libstdc++-v3/doc/xml/manual/status_cxx2014.xml
! 5bb9fe8fa9f85b6d25e0d01355973428  libstdc++-v3/doc/xml/manual/status_cxx2017.xml
! 0d8d3e572d69acd09396d06e8249808b  libstdc++-v3/doc/xml/manual/status_cxx2020.xml
! 3c72998c4574690fac280c058a0db757  libstdc++-v3/doc/xml/manual/status_cxxis29124.xml
! a3c830bf7580b2f5b61bb7806aa3f498  libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
! 716b0440e3bfb860e5ee262a17e4f11a  libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml
  49334f70b9df9a3f9b81e04a418e8066  libstdc++-v3/doc/xml/manual/strings.xml
  2b80feb1b53a8d0895a292620ec430b2  libstdc++-v3/doc/xml/manual/support.xml
  5a89da07906610f85971c9faa717428e  libstdc++-v3/doc/xml/manual/test.xml
  e2e099be3dd6a4b7a940a7232635ee2c  libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
! 93a43df46b9241c15a1d1a3116d9c792  libstdc++-v3/doc/xml/manual/using.xml
  30ec356feba73e85c6cef4c27dbb372e  libstdc++-v3/doc/xml/manual/using_exceptions.xml
  74a5acaa32b3d223bd413c1bb5b69ac6  libstdc++-v3/doc/xml/manual/utilities.xml
! 05d0e18187995e8ce64185beb05cd6ed  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
! 908772cdec680f1cf3d09ef32b451662  libstdc++-v3/include/Makefile.am
! 8460c7fbbd13ff4153eed9b078a3e453  libstdc++-v3/include/Makefile.in
! 83813d3bf45dd53bdc13d769af501845  libstdc++-v3/include/backward/auto_ptr.h
! 93f8180370b2b5df7b580ce625762260  libstdc++-v3/include/backward/backward_warning.h
! 3ba6b626499f6c5a1cf871734a77df07  libstdc++-v3/include/backward/binders.h
! 670f2693341c46749d2c5b6b54df41c5  libstdc++-v3/include/backward/hash_fun.h
! c67bdff0760417827f5a8cab3067b626  libstdc++-v3/include/backward/hash_map
! af8e9554e20f02102b5017a30f1e9eff  libstdc++-v3/include/backward/hash_set
! 4ae40666dc641c3f172087ed984f1e01  libstdc++-v3/include/backward/hashtable.h
! 73b62e0f113a7d8e63e0d13183419c1b  libstdc++-v3/include/backward/strstream
! f6791325ac8042a3d1825c0f1ae0765b  libstdc++-v3/include/bits/algorithmfwd.h
! 6b5ce7ffbf8ffbb2440a44894aee279a  libstdc++-v3/include/bits/align.h
! 937e9d7f00d3ed7cff7ec8fafeb8a8bc  libstdc++-v3/include/bits/alloc_traits.h
! 58ff381dfbb0c52b9ff69747242a3a8f  libstdc++-v3/include/bits/allocated_ptr.h
! 52abf05a7426983321ecef80fe4251be  libstdc++-v3/include/bits/allocator.h
! e3f9f74fba67d8b5e1538ec2829d6ccd  libstdc++-v3/include/bits/atomic_base.h
! adb82b0133e664d7a6d703cde2ee9b90  libstdc++-v3/include/bits/atomic_futex.h
! 56bd6a5d218c8ecad595a4d829f9b5b8  libstdc++-v3/include/bits/atomic_timed_wait.h
! eeec5baac9e782444495e4ff1d7010c4  libstdc++-v3/include/bits/atomic_wait.h
! 3a2158164dc155855b2c0175c5f3c80b  libstdc++-v3/include/bits/basic_ios.h
! bd6a297c732d4d1fc2db79f61e854e8c  libstdc++-v3/include/bits/basic_ios.tcc
! 7e5346b1ac8ec4f2b0e876ce53e4b6e1  libstdc++-v3/include/bits/basic_string.h
! cdec0fb14b071f72010a9b8c2d2e814d  libstdc++-v3/include/bits/basic_string.tcc
! 143f01f2ac09091fe6272d8d3d996dd4  libstdc++-v3/include/bits/boost_concept_check.h
! c48dd1724bfe2a240a2d017612ff109d  libstdc++-v3/include/bits/c++0x_warning.h
! ed7474f5ce169353ae9b6e98b9017872  libstdc++-v3/include/bits/c++config
! 1b63ee4eacac2ae94b9a1fc6a1b754f5  libstdc++-v3/include/bits/char_traits.h
! bc3afa551b214a1d9450c6798b21dc1c  libstdc++-v3/include/bits/charconv.h
! a143652aea71c3de835d07a5ca715a81  libstdc++-v3/include/bits/codecvt.h
! 0c7784a98f845682f7e0257592f53ed9  libstdc++-v3/include/bits/concept_check.h
! 8d0a413609fd69213697c57a2f7e6efc  libstdc++-v3/include/bits/cpp_type_traits.h
! 03562135ad3797f79dc88b04da763364  libstdc++-v3/include/bits/deque.tcc
! fe864b2a299875de978dcc610a835eb6  libstdc++-v3/include/bits/enable_special_members.h
! 00ebb6049dacf8ab023b15caf7b3a690  libstdc++-v3/include/bits/erase_if.h
! a7d5bb28720ccf51fe638410018fc593  libstdc++-v3/include/bits/forward_list.h
! 7ce3876e2c3546f4e3f7fb947e3479a7  libstdc++-v3/include/bits/forward_list.tcc
! 42e0fac7ef6d3d3217e48ce36672e534  libstdc++-v3/include/bits/fs_dir.h
! 70ce7389ec86c32b97e433d940247f4b  libstdc++-v3/include/bits/fs_fwd.h
! d486ec76d1eac079f1e5ed61ee50cc50  libstdc++-v3/include/bits/fs_ops.h
! 8877eb003169ec54e3ef21d88efdadbc  libstdc++-v3/include/bits/fs_path.h
! 1e083c1a36d484e25c40b96ad6699e4e  libstdc++-v3/include/bits/fstream.tcc
! dd8a128f529a9f6f73237a176e7299bc  libstdc++-v3/include/bits/functexcept.h
! 3854e123c62afb06ce8eff3213da177e  libstdc++-v3/include/bits/functional_hash.h
! 7e28c413fb2ff8f896ab6f4b81296589  libstdc++-v3/include/bits/gslice.h
! 6d64fcf711e66e1774782608ff3b5159  libstdc++-v3/include/bits/gslice_array.h
! 1b162c169c5c035be9f65e875ba43048  libstdc++-v3/include/bits/hashtable.h
! 985a1e281b3b291fa13c4044bfc48b31  libstdc++-v3/include/bits/hashtable_policy.h
! 94b514a53ce7d1816738c38c1e0655a8  libstdc++-v3/include/bits/indirect_array.h
! 70c7a436935136a62065871cf31e4943  libstdc++-v3/include/bits/invoke.h
! b81521437ef0ce936cef3eaef2df90db  libstdc++-v3/include/bits/ios_base.h
! 6605273dbd3b4a796727eff37aa712ed  libstdc++-v3/include/bits/istream.tcc
! 66ebf5810a684c1af0a71a8d8819b3eb  libstdc++-v3/include/bits/iterator_concepts.h
! 9c607b8172976c0554f82e593ebab6e7  libstdc++-v3/include/bits/list.tcc
! 9033c9a135c14cc8c1b25fb5774e57e7  libstdc++-v3/include/bits/locale_classes.h
! d9209b1a8387c8074c0b4dfa10383f2d  libstdc++-v3/include/bits/locale_classes.tcc
! b93ec8fb60ddfb747f6a4956d056226e  libstdc++-v3/include/bits/locale_conv.h
! 60086948f806696451f55032cdff69dc  libstdc++-v3/include/bits/locale_facets.h
! 20df9195fafbed780aca7f7a838399e3  libstdc++-v3/include/bits/locale_facets.tcc
! 40d368932a34a5a714551d5411431aed  libstdc++-v3/include/bits/locale_facets_nonio.h
! 05f284aca697735aea072159826db863  libstdc++-v3/include/bits/locale_facets_nonio.tcc
! bded7dc13b4cfa5d81cf5165cc84122a  libstdc++-v3/include/bits/localefwd.h
! 3f32eafc5a86b24ba1ddea1f2c791f2f  libstdc++-v3/include/bits/mask_array.h
! 3b99ebe899129f76e71b6a400b7ae599  libstdc++-v3/include/bits/max_size_type.h
! 3f6b104467902cda411d015a32d97cf1  libstdc++-v3/include/bits/memoryfwd.h
! 156ce13c58f77c44098165fa0e6b5efc  libstdc++-v3/include/bits/move.h
! 434b2342bf495fd191265b752a71fc44  libstdc++-v3/include/bits/node_handle.h
! 3877d17291319659d2c7ab82f127deeb  libstdc++-v3/include/bits/ostream.tcc
! c6baef5b0dbad526c4a7d462e52887b8  libstdc++-v3/include/bits/ostream_insert.h
! 518cd0ae140bee151205f0ccbbe7a9d2  libstdc++-v3/include/bits/parse_numbers.h
! e270c86004665d7c88cb0daea0668abd  libstdc++-v3/include/bits/postypes.h
! 1aa21e383abff8b98908de39896ac74d  libstdc++-v3/include/bits/predefined_ops.h
! e6a5e9764ebd755e32e991292611e659  libstdc++-v3/include/bits/ptr_traits.h
! bf73b2a247be8d104de523be716f61f4  libstdc++-v3/include/bits/quoted_string.h
! 470011eef0ce4aa0582e38f577095a5c  libstdc++-v3/include/bits/random.h
! 5f69bfbde6bf41c8001a80d38abd542a  libstdc++-v3/include/bits/random.tcc
! 8dad5e77e5e4bab2b7000771d297ea9a  libstdc++-v3/include/bits/range_access.h
! 0cfaa408ff48de2b121439f9f325d90c  libstdc++-v3/include/bits/ranges_algo.h
! e2df1ee55df6addd8c7b5d3bde579658  libstdc++-v3/include/bits/ranges_algobase.h
! e0904214b08e51aa4604c6df133c3bbb  libstdc++-v3/include/bits/ranges_base.h
! 52dfeae5cd28cdecf71c6362cd101927  libstdc++-v3/include/bits/ranges_cmp.h
! 920cfa2cb58c94bed4db10b0a892ca19  libstdc++-v3/include/bits/ranges_uninitialized.h
! a22ca821dd328be54106bfb299193706  libstdc++-v3/include/bits/ranges_util.h
! bafb49c6b1a65444216c071f25b43760  libstdc++-v3/include/bits/refwrap.h
! 843befce3c9575f43a5893d8dad4dc61  libstdc++-v3/include/bits/regex.h
! 98d3d51046b708d9220ef857b955650f  libstdc++-v3/include/bits/regex.tcc
! b8b0cf85c115bbd16b3256e7f86315c5  libstdc++-v3/include/bits/regex_automaton.h
! 1a0c43de6ed4d56e298516e81208096a  libstdc++-v3/include/bits/regex_automaton.tcc
! 9b98eca9adb64a3789d65233db362bf5  libstdc++-v3/include/bits/regex_compiler.h
! 04718138ae92de2ca5211b1127e6bdfb  libstdc++-v3/include/bits/regex_compiler.tcc
! 528eeb9a41f8fa2f75c7da93f3a87e51  libstdc++-v3/include/bits/regex_constants.h
! fa9fbe5b4b6b38cebc35d0a4f86d2aa2  libstdc++-v3/include/bits/regex_error.h
! bf2631da804338ebd183a2ab97e8fe71  libstdc++-v3/include/bits/regex_executor.h
! f419d75dd099ff83043ecee608bcbd0b  libstdc++-v3/include/bits/regex_executor.tcc
! 716607b7d27d47a176e82ac8130fdf31  libstdc++-v3/include/bits/regex_scanner.h
! 785e8171663dd2f0db22813a93c65ed9  libstdc++-v3/include/bits/regex_scanner.tcc
! d761f7d17cd87d90c96bcaa692fffffc  libstdc++-v3/include/bits/semaphore_base.h
! bae24842408b2172fbea488e17b09021  libstdc++-v3/include/bits/shared_ptr.h
! 007e220395413941831ec80cc4e916b7  libstdc++-v3/include/bits/shared_ptr_atomic.h
! 903a445df4ef3034a2163ac5a9adc8da  libstdc++-v3/include/bits/shared_ptr_base.h
! 76a4a29ee68e815ad238f784a66392d3  libstdc++-v3/include/bits/slice_array.h
! 82bbae243b362815baa11a73f83d2188  libstdc++-v3/include/bits/specfun.h
! 13dd655f9d33eef94922ec1a670c462c  libstdc++-v3/include/bits/sstream.tcc
! 0ca803a7f09755f05290802f0dd2b38c  libstdc++-v3/include/bits/std_abs.h
! 0c73b43d052808013e7562d398c72d7e  libstdc++-v3/include/bits/std_function.h
! c65174fff50fe5647fc68ed6f3ae1695  libstdc++-v3/include/bits/std_mutex.h
! f2a5652c1fba7b750bcb17f96dcc1a75  libstdc++-v3/include/bits/std_thread.h
! c661d981a881e8628863fac1295c261c  libstdc++-v3/include/bits/stl_algo.h
! c0e5fec159b35d2e970802869ef11db5  libstdc++-v3/include/bits/stl_algobase.h
! 98118948adc1b932091fb4e357a8762c  libstdc++-v3/include/bits/stl_bvector.h
! 6847fc10df4d7118742d961154d17bb9  libstdc++-v3/include/bits/stl_construct.h
! 030b82de595162b8288defee8ca51bc1  libstdc++-v3/include/bits/stl_deque.h
! 42c8c895e947368df44a306d292f341c  libstdc++-v3/include/bits/stl_function.h
! 9b5d138d0bfe5519552ee1fd50135555  libstdc++-v3/include/bits/stl_heap.h
! 42972cf6f6ba275d7ce1bc489a712015  libstdc++-v3/include/bits/stl_iterator.h
! 76a3280d9bb3ee6191804428721c4059  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
! 4c794f35830ab1d4f96e6d5dacb8ecc7  libstdc++-v3/include/bits/stl_iterator_base_types.h
! 98c11423a3f4c54610e2c3580faffbd7  libstdc++-v3/include/bits/stl_list.h
! aee57a8661ec66bcbd3d049a16df390e  libstdc++-v3/include/bits/stl_map.h
! b8cb58fbb28fca627fd75d308c3b79fa  libstdc++-v3/include/bits/stl_multimap.h
! f6c4537c41eed49ed99d69f857341edf  libstdc++-v3/include/bits/stl_multiset.h
! 23f50728106a7dd127f28bfa1e82e21d  libstdc++-v3/include/bits/stl_numeric.h
! 7f4523a2a9644730e7f1af988b6f398d  libstdc++-v3/include/bits/stl_pair.h
! 0ec5c2472e95a10fb800f78245c05300  libstdc++-v3/include/bits/stl_queue.h
! 9f4c41dd191035f1a70db333f988202b  libstdc++-v3/include/bits/stl_raw_storage_iter.h
! e519ad1037772e85daa706ffa7ea28da  libstdc++-v3/include/bits/stl_relops.h
! 93170ef391fdcbda38838ce3f8f4b861  libstdc++-v3/include/bits/stl_set.h
! ba0b8ae642f56a2b5ac0e0f6b5efdb5f  libstdc++-v3/include/bits/stl_stack.h
! cf3c9e963ec99beda2bb6c7db4a045f6  libstdc++-v3/include/bits/stl_tempbuf.h
! 02cdd04bbd0f99a11cf0f12d5a9b21a7  libstdc++-v3/include/bits/stl_tree.h
! e5b2dfda2795d428e8e4a9ac15177146  libstdc++-v3/include/bits/stl_uninitialized.h
! abcaf00227294b9790605822a1c03477  libstdc++-v3/include/bits/stl_vector.h
! 1e99e977ac1c11c7b57913dfa5041da9  libstdc++-v3/include/bits/stream_iterator.h
! e1046f3460e6b41c7e73808ecb83be4d  libstdc++-v3/include/bits/streambuf.tcc
! 68cf363b8a59975fef89e4a35f305aac  libstdc++-v3/include/bits/streambuf_iterator.h
! edfcae2473cc1997408a2778fd824b00  libstdc++-v3/include/bits/string_view.tcc
! dce486b4bf1d6d2797c477681a012b6b  libstdc++-v3/include/bits/stringfwd.h
! 36a5335258d3016e02f890395595a676  libstdc++-v3/include/bits/this_thread_sleep.h
! 13b7236ca3b4f48a897996d806dfcd78  libstdc++-v3/include/bits/uniform_int_dist.h
! f121bb0af76bb2def80cd57ec47a7a93  libstdc++-v3/include/bits/unique_lock.h
! 4b5ae66ad1eb2fe06e6955f59533f596  libstdc++-v3/include/bits/unique_ptr.h
! b23caecd2ad3808e9572b2051285a5ef  libstdc++-v3/include/bits/unordered_map.h
! 2b37ceccf2a7d7b2510b97d737feb425  libstdc++-v3/include/bits/unordered_set.h
! 3232586c3c5b827a38bfdd0f1cb692d3  libstdc++-v3/include/bits/uses_allocator.h
! 3ce8e46172f802fe63611201ceff37c3  libstdc++-v3/include/bits/uses_allocator_args.h
! 92ac9967aa8b4e7ebb4019d9e5fc2cf6  libstdc++-v3/include/bits/valarray_after.h
! 68516738753362c2db0a29a86a8e6264  libstdc++-v3/include/bits/valarray_array.h
! 164619db6e4fbc8072543c783e3b533e  libstdc++-v3/include/bits/valarray_array.tcc
! eec1e9f3ef9e5c255e124414bcf4c902  libstdc++-v3/include/bits/valarray_before.h
! e9a66096952709a84b1e05178c12ec5a  libstdc++-v3/include/bits/vector.tcc
! b1f8590e0971e6f4f03bdadbd17bdbbe  libstdc++-v3/include/c/cassert
! 464f65c3985036f2313f8dfd9e478cbf  libstdc++-v3/include/c/cctype
! e9f32ea9e1c02499c9120e1ba83e0563  libstdc++-v3/include/c/cerrno
! 49059898325ffa5d3852381f296cce62  libstdc++-v3/include/c/cfloat
! 00468aec7541431dec1166471a270532  libstdc++-v3/include/c/ciso646
! e8ef1969853763b12144e4dd715c90e5  libstdc++-v3/include/c/climits
! e1a4aede3764d463bfae88592d878ecb  libstdc++-v3/include/c/clocale
! 85e8da2891b0dc7e045e0926e095de4f  libstdc++-v3/include/c/cmath
! fc7e732a58106ddaf6357aefad544078  libstdc++-v3/include/c/csetjmp
! 12d2c09925adc565a7bbd2e2cce15a84  libstdc++-v3/include/c/csignal
! 229862a417590e4915e7d8ac106e3c02  libstdc++-v3/include/c/cstdarg
! 344d9612ac54bff89d173f76a16a53d2  libstdc++-v3/include/c/cstddef
! 823b7886bf4c12aaec87b8cf56faa7a3  libstdc++-v3/include/c/cstdio
! 639a2404cf486508a0d15eb8d802a1fe  libstdc++-v3/include/c/cstdlib
! e7e68f1d6d8c15caa4499b71244837bd  libstdc++-v3/include/c/cstring
! 4242ed7213a0d08fb8f52eb04a92933a  libstdc++-v3/include/c/ctime
! e9ec3faaff77297b7d5d35261a834639  libstdc++-v3/include/c/cuchar
! fc1a73954110ddf125e38ff51a57089a  libstdc++-v3/include/c/cwchar
! 4efd48773f6e8ad4773e54dc3cbb6bac  libstdc++-v3/include/c/cwctype
! e5b5bdccc2815f3267e111267e39b016  libstdc++-v3/include/c_compatibility/assert.h
! 99b685cb1a592724f5e8fc2a5a4e4751  libstdc++-v3/include/c_compatibility/complex.h
! d197fedbd5f799ee12cda48c134ba0b1  libstdc++-v3/include/c_compatibility/ctype.h
! 3020e8fdf2d791b3920bcc45a8780db9  libstdc++-v3/include/c_compatibility/errno.h
! 7b4b437b8b2ed6b3cbea8b170a70ced1  libstdc++-v3/include/c_compatibility/fenv.h
! e318cb8787c3331e8cb0c34450f8a67b  libstdc++-v3/include/c_compatibility/float.h
! 8b3f447d5672462770be96a803e5176d  libstdc++-v3/include/c_compatibility/inttypes.h
! 73be13f7d3ee850c677f85c03763c091  libstdc++-v3/include/c_compatibility/iso646.h
! d6a9983f2e702639cc764daed21ce749  libstdc++-v3/include/c_compatibility/limits.h
! d69ee5666bf05d5f616819e98bd338d2  libstdc++-v3/include/c_compatibility/locale.h
! a990cded20a6fb8dad866460b8c40922  libstdc++-v3/include/c_compatibility/math.h
! 09fa37a1accdb876179eee0c01ff791e  libstdc++-v3/include/c_compatibility/setjmp.h
! 5c9e19271f36b6925db08dda89551370  libstdc++-v3/include/c_compatibility/signal.h
! 80fc798516a43195d045438301c80d59  libstdc++-v3/include/c_compatibility/stdarg.h
! d9833ce64eb06173c41b1d061f75f4ee  libstdc++-v3/include/c_compatibility/stdbool.h
! 6bc9f5fdce0412bbd5a2b7196a51b5dd  libstdc++-v3/include/c_compatibility/stddef.h
! e27ee850642364e3c93882ec21b6bd9a  libstdc++-v3/include/c_compatibility/stdint.h
! f0a22d28ae70ac83038142747cc66504  libstdc++-v3/include/c_compatibility/stdio.h
! 0f5b773a303c24013fb112082e6d18a5  libstdc++-v3/include/c_compatibility/stdlib.h
! 5d1de6ef97a8769bda2562a92b64bbbf  libstdc++-v3/include/c_compatibility/string.h
! 43becd4bd5bc0592fac474c1e4ef4db0  libstdc++-v3/include/c_compatibility/tgmath.h
! f7ee4a99bedec3e3ada578d1c3bb1922  libstdc++-v3/include/c_compatibility/time.h
! efc875b05a446056ec6ad54333e46e73  libstdc++-v3/include/c_compatibility/uchar.h
! 470e782f9d7e1c028d1ec452844cdb85  libstdc++-v3/include/c_compatibility/wchar.h
! de615e8fe87c352a024f4e748554cc45  libstdc++-v3/include/c_compatibility/wctype.h
! b6cde66175354eaa0d2a3e34b0b8e37d  libstdc++-v3/include/c_global/cassert
! e6b814d83656748c24ca6c3bc56ecb62  libstdc++-v3/include/c_global/ccomplex
! b9ae7e30c55e034c52546e762f15837d  libstdc++-v3/include/c_global/cctype
! c23637eb3e55b3f86c5e85f5402312ca  libstdc++-v3/include/c_global/cerrno
! 30cbccd125005bbb4474b283e6a46470  libstdc++-v3/include/c_global/cfenv
! 55807a98bed8356f59d5bc440d445133  libstdc++-v3/include/c_global/cfloat
! 825ebe1c099d9e7d16d4dfe0aac6d77d  libstdc++-v3/include/c_global/cinttypes
! bea4736c30e19b7dbbb353d744ed95f8  libstdc++-v3/include/c_global/ciso646
! 05b0d3083d07e10954c5b39df656eaf7  libstdc++-v3/include/c_global/climits
! 6afe6dfb5f2274ccbf33ba43f6559ba4  libstdc++-v3/include/c_global/clocale
! ffaf8d3718dd333ea27a4a80ef91f2ca  libstdc++-v3/include/c_global/cmath
! 741102d213f2c21d9b2d2130b2e6e761  libstdc++-v3/include/c_global/csetjmp
! 4bb7695c936055e976e354b1f402bc4a  libstdc++-v3/include/c_global/csignal
! 46a63be570cb38caa5e9a9dbbb602cc7  libstdc++-v3/include/c_global/cstdalign
! 74c8c88b10906374a040dbdbdff64367  libstdc++-v3/include/c_global/cstdarg
! 50d2074e121e5079532c038fbffec30e  libstdc++-v3/include/c_global/cstdbool
! 6265732c237dbce60877696f72fb210b  libstdc++-v3/include/c_global/cstddef
! 3495a000699aeacc73362a939388c5d3  libstdc++-v3/include/c_global/cstdint
! a7ce4ac37bb51deeb3861d4cb6c8f260  libstdc++-v3/include/c_global/cstdio
! 5c22b21848d5ef9504ded4ba9ac0f5b0  libstdc++-v3/include/c_global/cstdlib
! 07e98ff970d37552eda7fb819617f66d  libstdc++-v3/include/c_global/cstring
! ee7b4a9a804e645ca62cdd946c0c2e51  libstdc++-v3/include/c_global/ctgmath
! 57b099868e5b48fb4ad6e35fa82da878  libstdc++-v3/include/c_global/ctime
! 2a1de3f771e2899f8708ee307eaef032  libstdc++-v3/include/c_global/cuchar
! 747b477dace554af9c9a6aa93d790308  libstdc++-v3/include/c_global/cwchar
! 86bb01bf423d68a9192df921187ad040  libstdc++-v3/include/c_global/cwctype
! 87f6fe4679044e4ea440001f1f3157ee  libstdc++-v3/include/c_std/cassert
! 1c626c074f7a55d84a99407d2aa29bbc  libstdc++-v3/include/c_std/cctype
! 4f9946f3aa7c4f2cfc65539e9706076c  libstdc++-v3/include/c_std/cerrno
! 81c658b963dd1c12c8903126a266c1b6  libstdc++-v3/include/c_std/cfloat
! 22f67d7fe74c8b79c55202e8a4d60c06  libstdc++-v3/include/c_std/ciso646
! 1b970426335cfd9b38e01ceb56acbec4  libstdc++-v3/include/c_std/climits
! 2a79f6a5a523b42d5ef1a8a7ea078b08  libstdc++-v3/include/c_std/clocale
! f691742455e574c0473929114fbc5c79  libstdc++-v3/include/c_std/cmath
! 5d187f9d4d030bb1dd7b639ebbee9143  libstdc++-v3/include/c_std/csetjmp
! 502db2f7efd5220c17d8395a1de99c4d  libstdc++-v3/include/c_std/csignal
! c5df2a6650b19fcbc7ea8337497c6b8a  libstdc++-v3/include/c_std/cstdarg
! 4e432b63175c3c537fb94af2abfcb6d7  libstdc++-v3/include/c_std/cstddef
! 9b264a53cbcc760048683004267958c6  libstdc++-v3/include/c_std/cstdio
! ce7b58db427116da62e9a4c7ddff7207  libstdc++-v3/include/c_std/cstdlib
! c6fc62e7d12600e5c129d2d2ad9a2662  libstdc++-v3/include/c_std/cstring
! 88cf029a233c4314e1339e6289fac230  libstdc++-v3/include/c_std/ctime
! 758a598e2606e6a21f171ef4fdb4c72a  libstdc++-v3/include/c_std/cuchar
! bcddf9c045520bcb631559376dc42835  libstdc++-v3/include/c_std/cwchar
! 0efb884ff8a189f77fd542dfb2fc5bd4  libstdc++-v3/include/c_std/cwctype
! c0c9bbb808e6bfe4153e5271f4d97b96  libstdc++-v3/include/debug/array
! 963865eb5322b6ffdddcd071272feba0  libstdc++-v3/include/debug/assertions.h
! 1d6ef299bacc09a55667272276c35d6c  libstdc++-v3/include/debug/bitset
! 982c0103e1e5f86b0818efdfc5273c3c  libstdc++-v3/include/debug/debug.h
! 788a61c46ffb08798088c93cd8b9b3a2  libstdc++-v3/include/debug/deque
! 292da4c038fc1dfe51b75788349b902b  libstdc++-v3/include/debug/formatter.h
! 4571687f4194f778feef507848a7fe95  libstdc++-v3/include/debug/forward_list
! b8d8c1f08472efae032f44026863678a  libstdc++-v3/include/debug/functions.h
! e0553720cdf0df02b776145b36a51a65  libstdc++-v3/include/debug/helper_functions.h
! 2d7e0e7fa5d73669881b080a2a599ad6  libstdc++-v3/include/debug/list
! 64eec174a9df5709488aaa20aea2180c  libstdc++-v3/include/debug/macros.h
! 52694538be445d5249d6d7f585cd45ce  libstdc++-v3/include/debug/map
! a860368b110d2e3a9b48548930534cea  libstdc++-v3/include/debug/map.h
! 3310eefcc964365c4995c10e87295cdd  libstdc++-v3/include/debug/multimap.h
! 0dded1f7e540e609d552b63a74ea43ae  libstdc++-v3/include/debug/multiset.h
! 8fc7f164cd47fa7cc795cd12a6fee97a  libstdc++-v3/include/debug/safe_base.h
! 7ab3483a2e0e07f1a655730909bba7c5  libstdc++-v3/include/debug/safe_container.h
! 964fd0767ce2a9bba6db6b479608ab98  libstdc++-v3/include/debug/safe_iterator.h
! c4aae7777a1ffacd1f63402616576d7c  libstdc++-v3/include/debug/safe_iterator.tcc
! b6b1edbd453c29daedb29dafb48d4ed6  libstdc++-v3/include/debug/safe_local_iterator.h
! b09b03b9dce9c9c1b2f2a7dd7536a6fb  libstdc++-v3/include/debug/safe_local_iterator.tcc
! 52876bad207210c63cbccff6760e4b8f  libstdc++-v3/include/debug/safe_sequence.h
! dee5de74a647471159287adfbac14498  libstdc++-v3/include/debug/safe_sequence.tcc
! 678091ae466c0fb9db85aedf2773166c  libstdc++-v3/include/debug/safe_unordered_base.h
! 2281122214d54628243d2fbbae5ebdd0  libstdc++-v3/include/debug/safe_unordered_container.h
! d8ae0f386b639951eabe29a57d2f68cb  libstdc++-v3/include/debug/safe_unordered_container.tcc
! f475c2504647d12ab0026b7c3f256f4d  libstdc++-v3/include/debug/set
! efd6533e84bfc436b900b80a7715e389  libstdc++-v3/include/debug/set.h
! bbaa39c68a8689f894b4d32d8a71a33e  libstdc++-v3/include/debug/stl_iterator.h
! 9338fa7bb61e6716eb79ad8ad9b3cc64  libstdc++-v3/include/debug/string
! fa95e8291a021fd8d54e739bfb36d8f4  libstdc++-v3/include/debug/unordered_map
! bbcb44f5d6a75be289854e78c50d6e0e  libstdc++-v3/include/debug/unordered_set
! 0418b9420a5bde11797588d2152dde26  libstdc++-v3/include/debug/vector
! 120f78076a2f681354fccdfa1c64f57f  libstdc++-v3/include/decimal/decimal
! 477587a4b4e34940758c5fbea090924c  libstdc++-v3/include/decimal/decimal.h
! a5dc946ed9ad5abaadf5484a8d94c35b  libstdc++-v3/include/experimental/algorithm
! fee23cd92a92d6bf2f6fdd3850d1ec1a  libstdc++-v3/include/experimental/any
! 51feabb5a9aff9c2650be847f563769d  libstdc++-v3/include/experimental/array
! 363feb942b9ed4fdcb8f065231501c85  libstdc++-v3/include/experimental/bits/fs_dir.h
! f5e02eb1311a467ce3d8138ce931f3eb  libstdc++-v3/include/experimental/bits/fs_fwd.h
! 52737c1e85c36fe263ef86630cece5a7  libstdc++-v3/include/experimental/bits/fs_ops.h
! 39c79598ce86e66f13b60c1891b17e80  libstdc++-v3/include/experimental/bits/fs_path.h
! f35b43a0d32627601d4bfe3ac24e84ff  libstdc++-v3/include/experimental/bits/lfts_config.h
! 6c96027917a74ba73627fb559e8bbeb7  libstdc++-v3/include/experimental/bits/net.h
! 19f9985a717ce911687aa7087349693d  libstdc++-v3/include/experimental/bits/numeric_traits.h
! 526bcbcdfb0acc96580ff835ceb38948  libstdc++-v3/include/experimental/bits/shared_ptr.h
! 2e2d3bbaa3bfc8f5b2865938517b4aa7  libstdc++-v3/include/experimental/bits/simd.h
! 77017778ba2d0d32457cec429d6d6977  libstdc++-v3/include/experimental/bits/simd_builtin.h
! 24126236d714fbf83db8ddc38457b246  libstdc++-v3/include/experimental/bits/simd_converter.h
! c7387f3f41d4df9d699e9b1336d67344  libstdc++-v3/include/experimental/bits/simd_detail.h
! eec02f44fcb5eba6ba668e810c146d8d  libstdc++-v3/include/experimental/bits/simd_fixed_size.h
! 847194b3fe1db090040fca784135ea40  libstdc++-v3/include/experimental/bits/simd_math.h
! 0bcac8d453d8e154e6ccb741b4519051  libstdc++-v3/include/experimental/bits/simd_neon.h
! 7b753c6c4038aa02447cf0318cdeb6ec  libstdc++-v3/include/experimental/bits/simd_ppc.h
! 5c1c0064d9b5bbd62fff9f3d0f78f5b6  libstdc++-v3/include/experimental/bits/simd_scalar.h
! b4b13543518a05fcce27741e6abddd5b  libstdc++-v3/include/experimental/bits/simd_x86.h
! a7070d3b5675c71011b2b53a091f1276  libstdc++-v3/include/experimental/bits/simd_x86_conversions.h
! 3a18bdda008c9ee7d00a7fe3df2978f7  libstdc++-v3/include/experimental/bits/string_view.tcc
! 854d9b5964314dea05a89721173b4da0  libstdc++-v3/include/experimental/buffer
! fcf9b359d9c5736dbd49ff2a3fde7951  libstdc++-v3/include/experimental/chrono
! 3c43d79f9cbc3238cf48255689f62349  libstdc++-v3/include/experimental/deque
! baeaf7b9b85bb476117d286653f6d6dd  libstdc++-v3/include/experimental/executor
! 7b2663037e13929b806bf614936012cd  libstdc++-v3/include/experimental/filesystem
! de12aef18178267fe21aaf85aa6b5d98  libstdc++-v3/include/experimental/forward_list
! 5dcfda8a1ea0023fdf730226a958f492  libstdc++-v3/include/experimental/functional
! 3123308f1adec058d0f6137b80537c97  libstdc++-v3/include/experimental/internet
! 91becacad368d2748dbba54d79e1d1d4  libstdc++-v3/include/experimental/io_context
! 4691bb9a4cbb032dd0b0bd7a07fa1867  libstdc++-v3/include/experimental/iterator
! 760aa8f9adda752006a29223129fb0e3  libstdc++-v3/include/experimental/list
! 4e6e0455f4851cba8c386f87fa7cffa5  libstdc++-v3/include/experimental/map
! 1b3a4936b1c0446679cab0c44bca7868  libstdc++-v3/include/experimental/memory
! 8d496ecdcd31004e5178103976818db7  libstdc++-v3/include/experimental/memory_resource
! 00e11abd45c1991e940e3cc0ce0ebe37  libstdc++-v3/include/experimental/net
! c37c4ab64b91d429eb61d78fdc4ae75e  libstdc++-v3/include/experimental/netfwd
! e9319e5893708aa04f34ad9d9a5782d8  libstdc++-v3/include/experimental/numeric
! 254db9903f2d7fb0c771809d3d79d4c9  libstdc++-v3/include/experimental/optional
! 88381df08a09b23c6f601a2631339c94  libstdc++-v3/include/experimental/propagate_const
! b9a97a912d958096564644bd8f9c49e6  libstdc++-v3/include/experimental/random
! bcc2870c86a9e3a62d9cc64e34919516  libstdc++-v3/include/experimental/ratio
! 7e0f9fbf12108027afd2e6248d9f5bda  libstdc++-v3/include/experimental/regex
! 645d538d0ba30fecafec0f1cd4f5b3f6  libstdc++-v3/include/experimental/set
! f9acd41f67303d72df67a5c63d75c3ef  libstdc++-v3/include/experimental/simd
! 0121e1989d70818afa551c07e6f37ef6  libstdc++-v3/include/experimental/socket
! 62e4341339e0537b4c003fc7af143bfb  libstdc++-v3/include/experimental/source_location
! b500d85d056b59344bda216ea50a8dc9  libstdc++-v3/include/experimental/string
! f52632f13e686838f3781d23288a2d7d  libstdc++-v3/include/experimental/string_view
! 97920d684395dfd6b6412ea10b98750d  libstdc++-v3/include/experimental/system_error
! 7f2b47081abbff883bb7b5742683f4fc  libstdc++-v3/include/experimental/timer
! 8f29cc85dfc3c0304ff4e631e71cc8b2  libstdc++-v3/include/experimental/tuple
! 93597de1ce4c3f08eaf5cdd0d3006c1c  libstdc++-v3/include/experimental/type_traits
! 5b6d031ea5e1e121f67d540682e7a32d  libstdc++-v3/include/experimental/unordered_map
! 838f25578044afb07fa073b5b64a49c5  libstdc++-v3/include/experimental/unordered_set
! 8df151efcb383fabc32af1d11c823c63  libstdc++-v3/include/experimental/utility
! c77947a8e5d56e9ec5bd632f54d9c2b7  libstdc++-v3/include/experimental/vector
! 40ff818bc651dcc4ddb2d6a89872b302  libstdc++-v3/include/ext/algorithm
! 355369213d3139cc065c981d8d38bc1a  libstdc++-v3/include/ext/aligned_buffer.h
! 2281be427d104b4f13880f90209a00bd  libstdc++-v3/include/ext/alloc_traits.h
! de910203c9add5dfa31e3da6958d6f0c  libstdc++-v3/include/ext/atomicity.h
! 9cc929c89e00f26b8d0b5569c3107b90  libstdc++-v3/include/ext/bitmap_allocator.h
! 19729e251044ebdf0b4f215af2ae3c3c  libstdc++-v3/include/ext/cast.h
! 79e3628c5c7e897b2b87644e7849b35d  libstdc++-v3/include/ext/cmath
! ea80a2ca9ca788adc2676ab1a43a771a  libstdc++-v3/include/ext/codecvt_specializations.h
! 79a69441ec59c5bcbfe76b4d54f72634  libstdc++-v3/include/ext/concurrence.h
! 2f8c74a3bcc7692b9ec445fb64c28b30  libstdc++-v3/include/ext/debug_allocator.h
! 4959107d48788e9bc120ece3dfd2705c  libstdc++-v3/include/ext/enc_filebuf.h
! ca86979549d87832de0291c84c1fa5f2  libstdc++-v3/include/ext/extptr_allocator.h
! eec31fad47ebb7d363bbebf67e556a13  libstdc++-v3/include/ext/functional
! 7a54c13e6e6f460d94b0b2ee2618eaf5  libstdc++-v3/include/ext/iterator
! e2309f02d17d9911b021d12cbf3a614b  libstdc++-v3/include/ext/malloc_allocator.h
! ad91354cb0b33f044a763a1341d79b13  libstdc++-v3/include/ext/memory
! 23f8158e09c74b18812664af55956d17  libstdc++-v3/include/ext/mt_allocator.h
! 4493add5a3fa57e0ec30b90cd4e81c11  libstdc++-v3/include/ext/new_allocator.h
! 1c72ce3ba84613550222ba3120839531  libstdc++-v3/include/ext/numeric
! 37fc3959e3cfa768c4b798e492e8d54a  libstdc++-v3/include/ext/numeric_traits.h
! ad479234abe388c6a0a929fbbd8eb19b  libstdc++-v3/include/ext/pb_ds/assoc_container.hpp
! b5ecdc803461ee4bd7273076fd9d8710  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
! 14ef728b4811e55adefde906c534f2f3  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
! b16f66629fa0c166116e554766c52b51  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
! e337b44c280fe8d18a65136118d04fb5  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
! f28f15957d7d8ad14ce8a9c8b5ce685e  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
! 7dfc82080f6c1aecd9dc8fe5f736dcbf  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp
! eb4c4cd3078034eb6dcb1567f5c4af3c  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
! 98d49268e822df8ccadc48dfea4e41a1  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
! 61e2b9d5c6478b135317ee2fe8fe97b3  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
! 1be9ec9e1b02bd173ad99ec2d88fd749  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
! 3a47526916910c5f256cf654f523ce73  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp
! 22696a6fd519c8c6eaf62edc9bbaa20b  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
! 3cda348df104dfc550d07d7da5285a1c  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
! a39069572c4d9bfb64fc739acc507353  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
! a4889cdd4db930162742e4bcbbc12a66  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/traits.hpp
! 1f882b8763b2e8a10a1ac5b544e679a5  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp
! efe026bf33b8bcc16ffa2d6ef293c074  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
! a7195eb92564ab1cc8ef9337c1e9f4d0  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp
! f23e01c89658de59fe28dd1656bb2804  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp
! 87c3b318b6ff64cef40e48bc75946190  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp
! 97359a698805169cb6b2d599e33345c6  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp
! f3b94702c8e63487ea87cc139bbb3aae  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp
! 85ba51a85fe93868f10a468c5fefd62e  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
! b4bea519772cb6effb02279575c4bbb0  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp
! f163b92c68f0c6c35b14176e43bfc6d5  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp
! 2a6c4d0e5828a47f212c032d921a7637  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp
! e86724a15bbe5fd3f34c261b88bc3ec7  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp
! 03a4630c32bbd764013b3c51ba3a7224  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp
! f8c5e0833baba8f9ef5ca02c8b191a71  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp
! 500d8ab23378e496713d81d68edc04b4  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
! a650c77a0d2abc1cf8962ab45f0b1a58  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp
! 9d771e6206ba47e43f4d51ba736f050e  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp
! 644efde23a617315dba8b4bf6abaee52  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp
! ad12a07847645e8af0c09908d92b98c3  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp
! bfe820f1bbdf855fb6a50f179a5b5848  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp
! 63683f14d851ce5daec56bb6594f6ca7  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
! cd0457a063efbf72878c6709ce495d75  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
! e47260ac135a89a3eae5d03090f176d0  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
! 6fd42aa2f8bcc97e597c30ca31646ddb  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
! d34a3f5c27fa8b5350930f76daf2b74e  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
! db79e79919dc4835979a6d522ae53d11  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
! 1d082595830bf228d156038b15d3c1ad  libstdc++-v3/include/ext/pb_ds/detail/branch_policy/branch_policy.hpp
! a6b7b529f57d96361a4b1d9ca86b928c  libstdc++-v3/include/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp
! 9b811e1c9d1d5518b44cb07697841b78  libstdc++-v3/include/ext/pb_ds/detail/branch_policy/traits.hpp
! 9efed4c41b8df83d186eb2b05a587ec6  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
! 49f56310317bea5ddf8f6b3f41853c62  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
! 9983e113f6bb2a0aef466a486527e096  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp
! ad6e771cd19bbf58daf086611791f4c3  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
! b58e119b4acfc8e2d3fce604df2b1196  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
! e85dd1d87f7203e687653cacc604a492  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
! b016c49ed2175bfa1598f7974f72dd07  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
! 587d30c32258c1838637bf537228edf3  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp
! e2282c3fa14b574b16617ebca381f62a  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp
! 37adfc3725868dc50877034c9394d2a6  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
! 5115f00d96c2423b11fd1db9fb975819  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
! b6c3f06eb4275cc88d77051104228bee  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
! b2bce54090e77f93371692301f2c8a30  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
! fbcd39f7a84f5d4d3559007606b8c081  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
! fa83632b16549584d077ff470fd128bc  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp
! 042c52b8a6595389c2c75f1cdce087d7  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
! 978ca57631acd616139f06b690217381  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp
! 6c7d95406459ae58720e075608727afa  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
! 2e57b352d128fc7e58fc8f8455276ff8  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
! f45b9be2d66e52a6439d519a2a7a0dd0  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp
! a9cc905357cd08b58355e9015c7eb8c7  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp
! 613874992423aa16b5f88a37d187c53b  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
! 90c81870268318035d7d00ea6a2a64b3  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp
! 8997dec36a09747842f08335f0728b81  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp
! c2016b48e5d5d47ef522e84b2870d534  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp
! f4f1fd19731f36d288ec567399b26fd5  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
! 905411b0d78f8d44ae988ad785f87873  libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp
! a46da4525215adcba236dce075b09522  libstdc++-v3/include/ext/pb_ds/detail/container_base_dispatch.hpp
! 52f9dc9b5cf832e00aacd8c967792ecd  libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp
! 154368cbaac4775713ba605f2174b764  libstdc++-v3/include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp
! 5caa92eb20e6157c21c9b34a823cec0b  libstdc++-v3/include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp
! dd418f7a1d5856a13131f6990500cbd6  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp
! e8af3b41a57c59eea71a8b30ef94883a  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
! 4bf0ef7f56976bcffa8309a03cb15eab  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
! c195dd6572bcdbd2d99209170342696a  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp
! 9c932aecd36cdf5dea9b9fa7800d8621  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp
! f6f0dc9868c64254333e61c5df4953a5  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp
! 70d5307701b5922ea7c6927fec35eb9d  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp
! 83670269fc2f1f3d9f7cba87014d9b68  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp
! d456903993c10e9e12efba8d469018f7  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp
! 93ad975c4e54e0daf71e30d92e1d7622  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
! 716ae1bb634edaeff82b7d998477a56d  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp
! 62a572dc018281a0c403bae7cd266417  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp
! d1f41635aa2761314a2e65a0a4995efd  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
! 3df1629c50017fad41567d9db6e62439  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp
! 63643f80cc5d5d62926c3b4b232c5a93  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp
! d6c81cfaf5b285726b2dba6b089a8f92  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp
! 2dd7d578518baa4a2fd97ce252522fca  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp
! 84c7a23aeb26fa542f9c0a3c6664da48  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp
! 3fc7fd54b44fb30d114fec063d7ce93f  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp
! a6f15a08dfd80581e058c3ff85c88195  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
! fb1c8d45c007f2498889c031a74f7559  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp
! 8c58c8aec59d002c441c75d23a685b0c  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp
! 7a6ed15e6d022682a4ba54c68610ef05  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp
! e18b9ce88b8f3395b3824e0422a2777f  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/direct_mask_range_hashing_imp.hpp
! 7eb1e861547c67b442c258418a0bf33d  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/direct_mod_range_hashing_imp.hpp
! 31cea736e34406f28d87dcb83197bbd0  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/linear_probe_fn_imp.hpp
! d2f1e5a43ec68fd2bac4e1d349675b77  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp
! b5c86f882f2925bceeee071250ffe170  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp
! 1aa4027556733398c871b412fcd9cce4  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp
! ea6cf192c0b780db8186cbf0f28b1b51  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/quadratic_probe_fn_imp.hpp
! 9b9d9eac26f7349f0cccefe419ff1d8f  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp
! de1974ff19320bd1c0a2377023e635fe  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp
! 46c50940b6eaeec14d53dcc22eda4f7b  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
! e5bdf8e625d00a9ab55f6096ab216eec  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
! 0e2ede302f61466effff69a3f07dc562  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
! d5ba5c7725a3efba9e424d0c7950004f  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
! babc1ee343f4c5c926141c544781e140  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
! e6a7865ef6f8e0a6be1b10920211a238  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
! 2d4a0e327cb73c5df9bec53179852fec  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
! ef34798d52847f04ba6f9af3bb8ad93d  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
! 3618e33fd7b127e0f56e472979be6275  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp
! b2cd562906d7c9ca4567ee9289ead3a5  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
! bbff46dfeb3a8bb47aae1128f704f746  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
! f5c6e1f9b97225dc3f2b65f05bb9b30a  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp
! 7e3dd766f8add31464a329c780cac3ad  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp
! 8c955c8e58b74b0a73a053d862bbaa65  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp
! 0f06806e1ac156a6f045656db9f6c91f  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp
! fc30da69640d46bc4145036d160228c8  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
! a3a2b59d0a72f09a9c9beca7a2ffb56a  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
! 1fa79bf1952526277e86ac7bda0cb22e  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp
! 687face4d02ddaecae828c156af38ebf  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp
! 5f7e53c94cfb88161694a38139db7ad5  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
! f56315318cdccad8633c73cc0b3c4b52  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
! 0e4d64b63ed79aed6c5008b0372f391d  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
! 40191f85f2dd3f579f8a4b058423b9a9  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
! 1b52b3bcc8f4f82955f5e47d50d5a5f8  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
! 77ae2491855cc65c73767d5546180266  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
! 7facbc3c4bfcc59cc17c259d0313ec6e  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
! 7540f6e7d22a339f64956a24f91878c5  libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp
! 5839f7563d92470cb8425c61688ca45f  libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp
! cc95cec3bd74e97bf6fc1a31eedd0ef5  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
! c5ff704d2a89b3896ebc1dcd15769fc6  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
! c224f2da5636ca9dd2311750bfe495cd  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
! ffb6b39fb1fbcbc7a6b1fa8478218e89  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp
! 1090f8b5a336597e9431675b49a1df61  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
! e39cc28020439e7db1c4de04b58adca5  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
! 39b024da4736ad5c91ead1772e056187  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
! 40879b245c4ff0ed5407aa6f2095b947  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp
! 34f78053d24f67676882ef2c401ef374  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp
! c42c03d05d413485b304d81217869931  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp
! bb9d6a8cf8e8a5a369287f9b5636c06b  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/traits.hpp
! 6ed85a6c92e52597ff7292ae3d8da74f  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp
! b0cddafd0cc77b3ed29fd0481f14d903  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
! b89fae38c99463a668570f5d538e78dc  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
! 09a02445aed4609acbd632d4712b210c  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp
! bc66e3df0ffa8a82ab47d5339a95a266  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
! d49aa89a7b0af415713635a53fbdda07  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp
! 9e43c285d67ce76b3f04bd139da60aa9  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
! d2f71162a9e727afd4e6a61ab00c28bb  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
! 5a4800b38cc0bd87ea79403cd5348885  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
! f1e7e7791b5ce0e929240b858c61a64d  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
! e3e31f4354b191e4b72248e62e345e4e  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
! dcbfa5f76c91aa14f8a9beb98ae9dd1a  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp
! 98c8ebb5dd52e44533d8302bea1feb42  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
! 77273bcb88457f87666084401e3df645  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
! d98b971e335323c7ba3b89e662d55f3f  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp
! 97456b7f8a293f095b690f40343d0a8e  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp
! f0197460faf1d545dbadcc1d97b6d40b  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp
! cbeb9bb9337e3327a61bb66328c63a4f  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
! ccf57b5c0a119ffcfd7799300f7455c7  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
! e70d7b55da93554bf057ae727128070e  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
! 6f45c2e310e6fe19a8f0911d89c60211  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp
! ba5c24cea18c5b89ce87551d8452dddd  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
! 60682ff94a1f606c13c900e78d1c5a83  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/traits.hpp
! c00515cb269db36761ac36b997d65e83  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
! 8906cc3074726c46cd2674aa6fa7f531  libstdc++-v3/include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp
! eb8f68e26e32ce84ed9422874482e2ec  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp
! 86f55b90ff3d84969b73ae77ee81f35d  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
! 483ef73d9c4714f6a322e608dba38961  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
! 66901e7cfdc3d36ee33c473406b0c772  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp
! 71c1a013e08ecaa0e28278ab6c411dfd  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
! ae42f784dfa9938423571156f71c06c7  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
! 540f31f22b4e8ca92b023d3bab7020ff  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/node.hpp
! 2910fa5c5065039e64d77832ded189c8  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp
! aa5a3b4beb9153bdcdb01c251e9fdbc7  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
! e10ec4618bcbb663a6bffcbb54466b59  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/traits.hpp
! 5024066b0bd8170ff18d70a9215615f0  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp
! b08f0923e18de31ad8296e0127dc374c  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
! 4defb7820f18b266cbe99653cd166395  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
! dd505d5812cda80b82e01c049a979352  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
! af3330f4d02ece3f64f9e35345ba94a0  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp
! 63b8b29280f96673ed65d4282d6ca4f0  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp
! 9b9cb0630bce76ba44c054f508fbdb24  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp
! a4e4231d7a65071737e1df96ac1d15c7  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp
! c0a26518209de29632141c60101da375  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/cc_hash_max_collision_check_resize_trigger_imp.hpp
! 95c10ad2afed06d0a291a48d6ab34215  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_exponential_size_policy_imp.hpp
! 626963fc919098d83698ed2bc71b0444  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
! e89ff88ff4b88ed52f1feb6d12c713f8  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp
! 06042821edb3bdec89fd371e90023a82  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp
! 8cb7309ea65bf25b170f111c55d6ea74  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_standard_resize_policy_imp.hpp
! 079799213d682172abfd1b11167087e9  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
! 6af7158d8d2389522146112e0bf8fb71  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
! 1a9c043cceac2cff9d65257da77e35dd  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
! 56141571787e57a9a075a62fda4acc4f  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp
! 53c527a1ae3d6e3771aba50608ae2174  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
! 16c333240b5a8b0b29fca03cf159db06  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
! 9e6686cf0907683723906647ed35df8b  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
! 2e7e1edcb05aec9a12e521b3ce65fddf  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp
! c0f32eff8a5a1b3deb136786b8cb9c0e  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
! 34ce93417507c52c6e4722965861aa81  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/node.hpp
! b10a5a861fa1451f118c355dee4fc5c6  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
! 98eac02334429cdf347f54b8ee75bb8a  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
! ec3ba32507633b0e5a51479647d6c0ea  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
! bbfd247fa78aef100dd725d4a127d091  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/traits.hpp
! 0bdd0980e5c4196de6cb70135aa18e63  libstdc++-v3/include/ext/pb_ds/detail/standard_policies.hpp
! 2554a8ee2cb766cf77112139b7279848  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
! 0711cf485567703cc4fd9279680358f6  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
! ac4b4f609286fc9b7b676d98a7755210  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
! e8d0884e3afdf43cf1ce648bb9682666  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
! 9c1b3b7dcde8f0cfc5939723b0c424aa  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
! f16b7ba04e16eb197ec47ee2c9e0235d  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
! 257b859537d6c4cb1b64967d535566d2  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp
! e3ab0b81e1c20e46f60bd506d75e458b  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp
! aefdd467af8f518e1695b8e35a91a5d3  libstdc++-v3/include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp
! ed5af815ac13fe93c54c946bd5366df5  libstdc++-v3/include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp
! d1281a35b943e4ff26dace1527161023  libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
! 5683a2cd5ace905ff3dda1b400e63543  libstdc++-v3/include/ext/pb_ds/detail/tree_trace_base.hpp
! 74c7e2b543e8e5c23138daacfdf5ce12  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp
! 867d24c28c8fe7fdb6f144e7c3312467  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
! 315ee32b0668dd1868b5c2ce5712268e  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp
! 36496659b342d867f5de921b15ca3086  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_access_traits.hpp
! 32dc3c6cb956a32364f6304b6f412a3c  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
! aab6daaaf9fdc34a5858c367e2c9b291  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp
! aabac38142cab3c97fc3325105675878  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp
! 9318ccfd33e6b92d79fc761a35318762  libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp
! 76116b516204d21c4042fcfcc9f147b0  libstdc++-v3/include/ext/pb_ds/detail/types_traits.hpp
! bcc699b9bb4d0c9782bf650469a0d993  libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
! 23ac5556f9d0cc47617203489eeb08b8  libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp
! 3edd992fc75b3f228a59d6df55903f79  libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp
! af014eba8ac7ae6e4c3cdef49136c435  libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
! a0d135e8273cc5a4f78db8db8cc4e4e3  libstdc++-v3/include/ext/pb_ds/exception.hpp
! a90c745471ac45bf8b4bc63a10cf8ccf  libstdc++-v3/include/ext/pb_ds/hash_policy.hpp
! eb1817a84574e0b31d4d1fdf19b571b2  libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp
! 93ca147405801205aae762414adb0609  libstdc++-v3/include/ext/pb_ds/priority_queue.hpp
! 06cb3e97c42cde03e07d5b7440926538  libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp
! f58fcc66bc26177e4d310e7c16cb90a8  libstdc++-v3/include/ext/pb_ds/tree_policy.hpp
! 0f6a593109978da483559b11aceab61a  libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
! c661917a06b6a7d48a5a39494e9b7526  libstdc++-v3/include/ext/pod_char_traits.h
! 734752624edaf9246873a38790ff55db  libstdc++-v3/include/ext/pointer.h
! befdb510ad6834ccd0df7a4136e3a1f8  libstdc++-v3/include/ext/pool_allocator.h
! ce69f1e624269a8721e5a954efb5dc04  libstdc++-v3/include/ext/random
! 6894d46827219ab4f87c99fa55747dbd  libstdc++-v3/include/ext/random.tcc
! 1f39dd2e3db99a24b96518fe96cce49d  libstdc++-v3/include/ext/rb_tree
! 887a8a6b63bed291b3c470540fcaaa4b  libstdc++-v3/include/ext/rc_string_base.h
! 82982d9fdfc18883e29743565f4c33e7  libstdc++-v3/include/ext/rope
! e4965077c58739b0417036394f07e39a  libstdc++-v3/include/ext/ropeimpl.h
! 99f5838816c6597df0e8558052f3a18b  libstdc++-v3/include/ext/slist
! e836b76f864ee40c6389f9f8a8590618  libstdc++-v3/include/ext/sso_string_base.h
! 03d4a2f17412d2df48b882b4e6dc2bcf  libstdc++-v3/include/ext/stdio_filebuf.h
! 31f63659be962213f41ca2361f8bc160  libstdc++-v3/include/ext/stdio_sync_filebuf.h
! ed7cad99ffe69538e5e6374fdde82f0f  libstdc++-v3/include/ext/string_conversions.h
! df82a6d35dad33b7cbe0dd6c58c05269  libstdc++-v3/include/ext/throw_allocator.h
! 1b52de57a3b6ca29ae3b6dce49a73ce8  libstdc++-v3/include/ext/type_traits.h
! 0c390cedd6d94b1522b17eb2daa34761  libstdc++-v3/include/ext/typelist.h
! a811c9fa07a8faa1f6de79e3cbb53ca4  libstdc++-v3/include/ext/vstring.h
! 78f99f23aa66db49d819b5d885de9431  libstdc++-v3/include/ext/vstring.tcc
! 92be499e5ce4a695bbff28406c7dbe1c  libstdc++-v3/include/ext/vstring_fwd.h
! 7926d142ee701043033d71612b8d2b40  libstdc++-v3/include/ext/vstring_util.h
! ccfe1ed0000536abf3a8da7a174017ad  libstdc++-v3/include/parallel/algo.h
! a3c968805d46e0b714696bc084c567c7  libstdc++-v3/include/parallel/algobase.h
! 74afd468ebb611ef3f46fcf13f8854af  libstdc++-v3/include/parallel/algorithm
! 26da122731388989750923bdd7196397  libstdc++-v3/include/parallel/algorithmfwd.h
! a17e92715be9355a3296ee0bfc0f8478  libstdc++-v3/include/parallel/balanced_quicksort.h
! c3ee8ce07a4ef3aef7e0dce64bc20d78  libstdc++-v3/include/parallel/base.h
! e487b1595ea07aec93caecaec43ed7da  libstdc++-v3/include/parallel/basic_iterator.h
! 5a113b075c415fdeb401b174757174ed  libstdc++-v3/include/parallel/checkers.h
! 5154327fecd36d32175075b4a256e11f  libstdc++-v3/include/parallel/compatibility.h
! c1efa3bb4b9c43de34eaa03f3fc39600  libstdc++-v3/include/parallel/compiletime_settings.h
! 410c96e00ac37ae9b3d1ad89df0dc80d  libstdc++-v3/include/parallel/equally_split.h
! dcc3f51d18bcf52ce7fbd302bc073cb7  libstdc++-v3/include/parallel/features.h
! c6e5524d06a3e93b9941e1add43c4cf2  libstdc++-v3/include/parallel/find.h
! 5c55fd0035f187d9fb3350c108a14450  libstdc++-v3/include/parallel/find_selectors.h
! fd82021161a7f521c9a0d3f6b7527d20  libstdc++-v3/include/parallel/for_each.h
! d071430d9b32db9584db227a0f747568  libstdc++-v3/include/parallel/for_each_selectors.h
! d154c2b598a08a9fe112fa473a778c9f  libstdc++-v3/include/parallel/iterator.h
! 4d381de7b31693c5fe2971235645229f  libstdc++-v3/include/parallel/list_partition.h
! d71f42da4eac530606f3910ee06b5da0  libstdc++-v3/include/parallel/losertree.h
! c35d6366cc38c17b62ad654aba47e4aa  libstdc++-v3/include/parallel/merge.h
! de9876f31845406c5bdaa090a1548051  libstdc++-v3/include/parallel/multiseq_selection.h
! 1d50f81ba1c9ece1dd12b7d44c6c53bd  libstdc++-v3/include/parallel/multiway_merge.h
! b6d54bf377b7afe92dfaf18ea289ecbe  libstdc++-v3/include/parallel/multiway_mergesort.h
! 272ba94a9512e470757e7119bfb9de9c  libstdc++-v3/include/parallel/numeric
! c0301f1a92b46d0a5f1c5f2e26ebc3dd  libstdc++-v3/include/parallel/numericfwd.h
! dbc06437a8aa29ebb32aa0b94cb1692f  libstdc++-v3/include/parallel/omp_loop.h
! 5dba1d5ecd7f23c8b74b61d300a31ee0  libstdc++-v3/include/parallel/omp_loop_static.h
! 021125ee59dc0f8a6709190f27a3b22d  libstdc++-v3/include/parallel/par_loop.h
! 5bcc58c2e262c9090c76263f91aa3e93  libstdc++-v3/include/parallel/parallel.h
! 774be5fa874366606944d7c3dcd94634  libstdc++-v3/include/parallel/partial_sum.h
! 7fe2d6c267507a30f30881b0a88f096a  libstdc++-v3/include/parallel/partition.h
! da0e9b4ea2fc6b53edff7253e2990f43  libstdc++-v3/include/parallel/queue.h
! 0baa9352fa5a061197fc42855c923d63  libstdc++-v3/include/parallel/quicksort.h
! 30f38a23c3aa9ee3c1926876bd0b7010  libstdc++-v3/include/parallel/random_number.h
! c9119bbdf284b8613164f64c330985de  libstdc++-v3/include/parallel/random_shuffle.h
! 16c2d7ceab9a93f58e7021db91be45a1  libstdc++-v3/include/parallel/search.h
! 3a19fe2f587c29163aa29142ac8c087d  libstdc++-v3/include/parallel/set_operations.h
! a0fbeae3ab958dc07d52fc40d6d129ec  libstdc++-v3/include/parallel/settings.h
! 353839eadc4ee268a845fa67ed641771  libstdc++-v3/include/parallel/sort.h
! 73e825077f0fa7d3bfb4cb962a6738e9  libstdc++-v3/include/parallel/tags.h
! 839b9e9924fdf46ae1cde7b763a969ba  libstdc++-v3/include/parallel/types.h
! 12146939fe237593b7b2cf5cbf5440b6  libstdc++-v3/include/parallel/unique_copy.h
! 55e88c33fc0ec1760e6a4409165d4bff  libstdc++-v3/include/parallel/workstealing.h
! 7c9a21563d39c8c0dd7895c83362c3bf  libstdc++-v3/include/precompiled/extc++.h
! f0dba626812ae0a0aea4c1f9bcb71628  libstdc++-v3/include/precompiled/stdc++.h
! 5ce82218fac10318f47135f243d29b7f  libstdc++-v3/include/precompiled/stdtr1c++.h
  75cfb36aeb3ed8672bb4e2957272203c  libstdc++-v3/include/pstl/LICENSE.txt
  12b7134f312d65f84a117c18a456d271  libstdc++-v3/include/pstl/algorithm_fwd.h
  74a0358aaa3f639ff58b225e142f615b  libstdc++-v3/include/pstl/algorithm_impl.h
  f6334ffc99f69354798bfc8024dc39f0  libstdc++-v3/include/pstl/execution_defs.h
  69ed2403525edbee720eaac531dfa979  libstdc++-v3/include/pstl/execution_impl.h
! f7c70190a8af4b3ee9cf149465acf15d  libstdc++-v3/include/pstl/glue_algorithm_defs.h
  afd65b5eade8cb9bde229048ab072fad  libstdc++-v3/include/pstl/glue_algorithm_impl.h
  dd6e851bc473b9ff23e81df89abe4fc7  libstdc++-v3/include/pstl/glue_execution_defs.h
  0b0a3983fbed012140824669c804e50a  libstdc++-v3/include/pstl/glue_memory_defs.h
--- 104967,105689 ----
  8f13cae7ea80bc018b87b4ff8de7e3cf  libstdc++-v3/doc/xml/manual/codecvt.xml
  af3361d0d0af961859ec0346c38ac8c8  libstdc++-v3/doc/xml/manual/concurrency.xml
  86f27306f8b76aebd69ea92641fd2c94  libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
! d46239fa5428398e5f3b540396f51e6b  libstdc++-v3/doc/xml/manual/configure.xml
  b7a892b2e432f52274c482549c3264a2  libstdc++-v3/doc/xml/manual/containers.xml
! 18a1ebf5d656fe7bf648dd0489546d33  libstdc++-v3/doc/xml/manual/ctype.xml
  1ef2d3bb759e6f6de762e1c79ff08030  libstdc++-v3/doc/xml/manual/debug.xml
! c7064e3c477845a150f6e575e6babf6e  libstdc++-v3/doc/xml/manual/debug_mode.xml
  f320f25003678cca910f09ba54c923fc  libstdc++-v3/doc/xml/manual/diagnostics.xml
  561ce4bba87e35c92c47d95599ca9d9b  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
! 7bcbf687f787f136ad31dd3f1982077d  libstdc++-v3/doc/xml/manual/evolution.xml
  14742e66a2ac01343ef60e87d06d05ff  libstdc++-v3/doc/xml/manual/extensions.xml
  7f1864c7f3c3b2bfde84b7086be97ca7  libstdc++-v3/doc/xml/manual/internals.xml
! c383c10a5873eb723b55066c595878a1  libstdc++-v3/doc/xml/manual/intro.xml
  93c3158fe28bdfbbf03dd039cc4e79a2  libstdc++-v3/doc/xml/manual/io.xml
  5ac71d67674ea22bcf1e54043bf8e99d  libstdc++-v3/doc/xml/manual/iterators.xml
  b9c8759ff9b60e09bd2875420a55cd31  libstdc++-v3/doc/xml/manual/locale.xml
  b00f98f125f6186c369ce588d795f978  libstdc++-v3/doc/xml/manual/localization.xml
  90cedee1e8e04d1ab87bbf41d47293ec  libstdc++-v3/doc/xml/manual/messages.xml
! cd6d12f87a30d3b85d80833476c19995  libstdc++-v3/doc/xml/manual/mt_allocator.xml
  42b8355117a7bd9aa755048290e70d2c  libstdc++-v3/doc/xml/manual/numerics.xml
  7edd591e15a0bbc76d58e9edcb7c28d1  libstdc++-v3/doc/xml/manual/parallel_mode.xml
  b4f22a512ad29af70c76d4e459bdf2a8  libstdc++-v3/doc/xml/manual/policy_data_structures.xml
  d766137e6e226eaf2c354f95fd9c7274  libstdc++-v3/doc/xml/manual/policy_data_structures_biblio.xml
! 27fd62fe45312310197416b7415333d0  libstdc++-v3/doc/xml/manual/prerequisites.xml
  cec5c5415c371a664adb0490e2571c3c  libstdc++-v3/doc/xml/manual/shared_ptr.xml
  9a8f1a85034e6fe72b02302051aa7af9  libstdc++-v3/doc/xml/manual/spine.xml
! 3a11d8e8ab3c584eff4a1db8c89ebb6c  libstdc++-v3/doc/xml/manual/status_cxx1998.xml
! 6ee153ca7e427e35886ef886036025a1  libstdc++-v3/doc/xml/manual/status_cxx2011.xml
! 25b84ee8640ad2ff1c31a6404175c003  libstdc++-v3/doc/xml/manual/status_cxx2014.xml
! 1d6d1225c31632fe76540e978d0ec065  libstdc++-v3/doc/xml/manual/status_cxx2017.xml
! 26d54fa91e5b4a1cc6a174fc5774fbf2  libstdc++-v3/doc/xml/manual/status_cxx2020.xml
! e12241b98a6c1e835b7b1d1bb31761ca  libstdc++-v3/doc/xml/manual/status_cxxis29124.xml
! 7ab71114868b2646704eea5f5e7b1006  libstdc++-v3/doc/xml/manual/status_cxxtr1.xml
! f12dd94d3ab272a7ed475798c7ce8a2d  libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml
  49334f70b9df9a3f9b81e04a418e8066  libstdc++-v3/doc/xml/manual/strings.xml
  2b80feb1b53a8d0895a292620ec430b2  libstdc++-v3/doc/xml/manual/support.xml
  5a89da07906610f85971c9faa717428e  libstdc++-v3/doc/xml/manual/test.xml
  e2e099be3dd6a4b7a940a7232635ee2c  libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
! 4755176d95bef79bf9412c63b1cdf395  libstdc++-v3/doc/xml/manual/using.xml
  30ec356feba73e85c6cef4c27dbb372e  libstdc++-v3/doc/xml/manual/using_exceptions.xml
  74a5acaa32b3d223bd413c1bb5b69ac6  libstdc++-v3/doc/xml/manual/utilities.xml
! bea338f191a4667e20c7800cc6e08c93  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
! 058535c6a461b16c6b2a0ec74877cdec  libstdc++-v3/include/Makefile.am
! 09532c1f2aebc0cdcfd9607df0eba8ec  libstdc++-v3/include/Makefile.in
! 890ccb6d9c249c324d5544704ac517fe  libstdc++-v3/include/backward/auto_ptr.h
! 7888a26e5e4a344cb3aee10fe9742d67  libstdc++-v3/include/backward/backward_warning.h
! 6b1e3f2a153145ca36e79c175901ed4a  libstdc++-v3/include/backward/binders.h
! 11289cccffdd5941fbc099dfde3bf5e7  libstdc++-v3/include/backward/hash_fun.h
! 48211d63fa9f0356563dddd234cc46f9  libstdc++-v3/include/backward/hash_map
! c182ef70f8140930d68b4febf211cd38  libstdc++-v3/include/backward/hash_set
! 0786c5fabbdc02e1b5d7f5941b1036f0  libstdc++-v3/include/backward/hashtable.h
! e87dd399a9a3274bd93b51404f64d0bf  libstdc++-v3/include/backward/strstream
! dd3f7f524033a844f5bb1056a873b4ff  libstdc++-v3/include/bits/algorithmfwd.h
! 7217663cbd5e0a5e2111f3fec04713c8  libstdc++-v3/include/bits/align.h
! fd441eaab0a8965f7012f98a3edcbb86  libstdc++-v3/include/bits/alloc_traits.h
! 6c08ea97cd0ca641b7c6a4e7a687cd0e  libstdc++-v3/include/bits/allocated_ptr.h
! 7001324130e21fb5fd33a1c2cde4c031  libstdc++-v3/include/bits/allocator.h
! a1f49462067f381335c5712907aac440  libstdc++-v3/include/bits/atomic_base.h
! 7d8c351bca946a7fab5426d823e9989f  libstdc++-v3/include/bits/atomic_futex.h
! 2bc333d129d557e353930e14487d1089  libstdc++-v3/include/bits/atomic_timed_wait.h
! 024cd2425df31f1f0cc6e28c60b0b423  libstdc++-v3/include/bits/atomic_wait.h
! 1e7a7ec7b70380fec2fae7859f444a62  libstdc++-v3/include/bits/basic_ios.h
! 5138e57b1c4bb47b788cf001a00d5e83  libstdc++-v3/include/bits/basic_ios.tcc
! 834ce8e9bc010c3d0ffbceacb21bdc36  libstdc++-v3/include/bits/basic_string.h
! 55116d4c1948fa70cbdfabfbe6155c2a  libstdc++-v3/include/bits/basic_string.tcc
! 29b717115b885d97e144509c7987d132  libstdc++-v3/include/bits/boost_concept_check.h
! b812f02d862ef0991e7444eeb075e24b  libstdc++-v3/include/bits/c++0x_warning.h
! 730a9760f569df98df8fd3fd78961745  libstdc++-v3/include/bits/c++config
! 4252edd3eb888fe8d8bdc2933cf1705a  libstdc++-v3/include/bits/char_traits.h
! 1e60fddeaaeb6880b640941bee6ce9ea  libstdc++-v3/include/bits/charconv.h
! 18c63235e04915c5a2d69229494f960e  libstdc++-v3/include/bits/chrono.h
! 3e9cf75ed9ed37659eac8d4ff38d8f97  libstdc++-v3/include/bits/codecvt.h
! 07d6e1893b90a983d593ee7fb21310ed  libstdc++-v3/include/bits/concept_check.h
! 7640df961ecae75b7513a70808bcd059  libstdc++-v3/include/bits/cow_string.h
! 834baaab8c868bfccd5bf4fd671ff55b  libstdc++-v3/include/bits/cpp_type_traits.h
! eedc4c8df05c6edc00d2429148559730  libstdc++-v3/include/bits/deque.tcc
! e2975f99f1320ed7aea974ab28e63548  libstdc++-v3/include/bits/enable_special_members.h
! 788dea7a6d93979a85a19851eabfdd18  libstdc++-v3/include/bits/erase_if.h
! d8fee3f5100fd27cac74eb8d143c125e  libstdc++-v3/include/bits/forward_list.h
! 6a9e63a5a5b9d8d66230e7498a13a8ac  libstdc++-v3/include/bits/forward_list.tcc
! 4228869b139d4cd463c5d2e53aa84cb4  libstdc++-v3/include/bits/fs_dir.h
! c754907ea8fca8ebfbbd704b0a111dd0  libstdc++-v3/include/bits/fs_fwd.h
! 45fcbb9c7afdd1bba169c26502c8decd  libstdc++-v3/include/bits/fs_ops.h
! b7f5a333df9e2418d926faf3df6009cb  libstdc++-v3/include/bits/fs_path.h
! 7907281755e6b0faa1dfdce636aaa01f  libstdc++-v3/include/bits/fstream.tcc
! a363406ed41198146320f1e077ba3f30  libstdc++-v3/include/bits/functexcept.h
! 69623b8458c64a8fc398295e296f4d44  libstdc++-v3/include/bits/functional_hash.h
! 3461cc1f731e7f5eab3dfae226db37ea  libstdc++-v3/include/bits/gslice.h
! 60fe073f9f69ebd21323b1be1c45bbda  libstdc++-v3/include/bits/gslice_array.h
! 56049fc2cf0ed4d73626ef4eef066b35  libstdc++-v3/include/bits/hashtable.h
! 59961ed7f1429c08f88a618de02b9d9e  libstdc++-v3/include/bits/hashtable_policy.h
! 84d05ba81a32deefa8dacfc3c9e0166f  libstdc++-v3/include/bits/indirect_array.h
! 36f0ed82567fccf4c612b30c6fb08084  libstdc++-v3/include/bits/invoke.h
! 8c219125e55e75a5d691820c3000dae0  libstdc++-v3/include/bits/ios_base.h
! f03c1a2c2fc0e1da425a2caed830e87f  libstdc++-v3/include/bits/istream.tcc
! 8e327d21f3bca1c90376c5b4fd9de3dc  libstdc++-v3/include/bits/iterator_concepts.h
! b4bd40923ef5db1adecc4c8cae565963  libstdc++-v3/include/bits/list.tcc
! a9565f66bcc3c46bbc030e0ef2ab1ed9  libstdc++-v3/include/bits/locale_classes.h
! 1bfd7e25c7d7f41c84a0c4b01b46e8a4  libstdc++-v3/include/bits/locale_classes.tcc
! 33034d2531967431e8e609ac63cd3573  libstdc++-v3/include/bits/locale_conv.h
! 369a81d30cd25cbb7659a9ec6d177e9f  libstdc++-v3/include/bits/locale_facets.h
! e93c291bfe4f08977cfa027347fc8b2b  libstdc++-v3/include/bits/locale_facets.tcc
! f1d8719a6bb6812811f48336b5ce7dd0  libstdc++-v3/include/bits/locale_facets_nonio.h
! 5478e278655cccf670a80d41a552244e  libstdc++-v3/include/bits/locale_facets_nonio.tcc
! 2ad3f645715b697f9f022b09b5fe7ede  libstdc++-v3/include/bits/localefwd.h
! 80f3e9f5844d45af4e2bf115e4bb5b7a  libstdc++-v3/include/bits/mask_array.h
! 1276100cbeda9fc3ee6dc1417c40a8db  libstdc++-v3/include/bits/max_size_type.h
! e7ba553e9ab184f5bd68cc7606d816d2  libstdc++-v3/include/bits/memoryfwd.h
! f56973290e9da4f67d61e176f8493a11  libstdc++-v3/include/bits/mofunc_impl.h
! 0c3876f398d8dc449bea393734a87ee1  libstdc++-v3/include/bits/move.h
! 6c3144ba196d4dbb3fabe7a3235678a8  libstdc++-v3/include/bits/move_only_function.h
! 699a8ff30fe671eed491b1757c32544c  libstdc++-v3/include/bits/new_allocator.h
! 27c968d51ee063ecd3245faa3a6a77b4  libstdc++-v3/include/bits/node_handle.h
! 5abcc928d2998fbddbfd8a2b8cd5da37  libstdc++-v3/include/bits/ostream.tcc
! 02068878ffa064cf4d81d74fcfa8706a  libstdc++-v3/include/bits/ostream_insert.h
! 0dd1b9e9caf16df51df5b5d72c3c5a88  libstdc++-v3/include/bits/parse_numbers.h
! 093924672c05904d8e0e1ca87cd021b0  libstdc++-v3/include/bits/postypes.h
! a42f8fd86dfe94e0818cf65d60c0c495  libstdc++-v3/include/bits/predefined_ops.h
! 9b5bf297da766c3f1b9b4657c4f62700  libstdc++-v3/include/bits/ptr_traits.h
! 0db2d39069ef28c3a38688814e808f30  libstdc++-v3/include/bits/quoted_string.h
! 2bc19f6eddd64dbdec7b425c2c54f1d7  libstdc++-v3/include/bits/random.h
! caaefe51364c1451b1e7964235f83cfd  libstdc++-v3/include/bits/random.tcc
! 1127c7558c4cba717dab561411781868  libstdc++-v3/include/bits/range_access.h
! a93916f72be5983f50e58dcf45bebc66  libstdc++-v3/include/bits/ranges_algo.h
! a07b56506a975fec3f54c795674825c6  libstdc++-v3/include/bits/ranges_algobase.h
! a45a0035a2ea36833ccd76f01c3674ca  libstdc++-v3/include/bits/ranges_base.h
! 82c550495df206d72b5fd7655144052f  libstdc++-v3/include/bits/ranges_cmp.h
! 154dfd0c70357290b292fa1de3b6b20d  libstdc++-v3/include/bits/ranges_uninitialized.h
! f64c8eee99550f162748196f92025465  libstdc++-v3/include/bits/ranges_util.h
! 45e14a741a7e9397f265a760cdd23240  libstdc++-v3/include/bits/refwrap.h
! 9ff8207cfeb01f595d69b4b91433743c  libstdc++-v3/include/bits/regex.h
! afdda3aa1dbf0e29afa3e1195f5b261f  libstdc++-v3/include/bits/regex.tcc
! ec2225300635dd05dcd43d4029bc15aa  libstdc++-v3/include/bits/regex_automaton.h
! 56f4b806c3e207e0d4d03ff274e75416  libstdc++-v3/include/bits/regex_automaton.tcc
! abc4868fa7fa69f1ec4bfe9357086f37  libstdc++-v3/include/bits/regex_compiler.h
! 77aa8cec8aa069c99dfafcdc3b0dd2db  libstdc++-v3/include/bits/regex_compiler.tcc
! 3adc887953dc0fe5a5bea29e5a6c58d0  libstdc++-v3/include/bits/regex_constants.h
! 6588fbd23b987a356107a822db1186a2  libstdc++-v3/include/bits/regex_error.h
! 9e790bedbc4477ba162c19583cac5d44  libstdc++-v3/include/bits/regex_executor.h
! fa2cbcf47f72200af80a8827b2ec5216  libstdc++-v3/include/bits/regex_executor.tcc
! aba82e3133a961d21651b1e236e83955  libstdc++-v3/include/bits/regex_scanner.h
! 84c97e63ca73478752f1837edd8be39e  libstdc++-v3/include/bits/regex_scanner.tcc
! 56efa2d600a18ebb013d6683df7d5139  libstdc++-v3/include/bits/semaphore_base.h
! 88e13dbb751546443834154ec05bc922  libstdc++-v3/include/bits/shared_ptr.h
! 0055e71b0787dcaf933281ad3214e716  libstdc++-v3/include/bits/shared_ptr_atomic.h
! e2b63a5b49d3c553c17b8b8d80272b6f  libstdc++-v3/include/bits/shared_ptr_base.h
! b830e239906baa21efc71bb6449baa83  libstdc++-v3/include/bits/slice_array.h
! ba8703462210c53c0fea444a0d04e75f  libstdc++-v3/include/bits/specfun.h
! a4f0ee46114c7eb871e66f07be86d815  libstdc++-v3/include/bits/sstream.tcc
! f9d284276be9b9f792be818fe5ee534e  libstdc++-v3/include/bits/std_abs.h
! 031acde85a8896c1ea19c4da889cae8c  libstdc++-v3/include/bits/std_function.h
! 0c1631ea9c6b77a42132f78e7028b526  libstdc++-v3/include/bits/std_mutex.h
! 00e5ff3818ba0c95af2ad1be864fe0fc  libstdc++-v3/include/bits/std_thread.h
! 1f80f17ff9e3b6ed9cc1dacee5649bef  libstdc++-v3/include/bits/stl_algo.h
! 1a6791fdba310103ceb325f334cf0b22  libstdc++-v3/include/bits/stl_algobase.h
! 7659d664f0aa080aa638ffb1531778da  libstdc++-v3/include/bits/stl_bvector.h
! ceba413818ae9b0f6742666be9b2ed67  libstdc++-v3/include/bits/stl_construct.h
! 3dc1cd32df14abc94da494258ef5ae60  libstdc++-v3/include/bits/stl_deque.h
! 63fc7573f04ccb8f515906b34e2fa890  libstdc++-v3/include/bits/stl_function.h
! 7428242e621ec1160ef15281aaf846b5  libstdc++-v3/include/bits/stl_heap.h
! bd1df035d57aba40e72f892638f1d7d3  libstdc++-v3/include/bits/stl_iterator.h
! 0781af8315a82973203708087fafaac1  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
! bce36b604a747a8f3a8ce8c38a7ac225  libstdc++-v3/include/bits/stl_iterator_base_types.h
! 73516b0fa035db1e298f5594effbdd24  libstdc++-v3/include/bits/stl_list.h
! f18c995445c8115b28fe5595fc6ef3fd  libstdc++-v3/include/bits/stl_map.h
! 77aa4b615a1562873ee78d8dd6ebcd56  libstdc++-v3/include/bits/stl_multimap.h
! 84946df670c054babd87fa8079a34db7  libstdc++-v3/include/bits/stl_multiset.h
! 36db7ae47394e395415a70ef7cf15fa3  libstdc++-v3/include/bits/stl_numeric.h
! f2351ea411e0407b28929ea2397f6e3f  libstdc++-v3/include/bits/stl_pair.h
! 7e6a9bfd3a1772b29829e5f721cfd888  libstdc++-v3/include/bits/stl_queue.h
! ca3e0abe0e9c127479cabae81f09acc0  libstdc++-v3/include/bits/stl_raw_storage_iter.h
! 0ec171924cece31342e93ace4c4449fa  libstdc++-v3/include/bits/stl_relops.h
! 4935a22000c5af7a654163249f54cba9  libstdc++-v3/include/bits/stl_set.h
! fe9061931e58eb13610622c957ad8bfe  libstdc++-v3/include/bits/stl_stack.h
! 469a3342893403dff08e484a26d87835  libstdc++-v3/include/bits/stl_tempbuf.h
! 5f5a8828bbc35607378dd2ff4fc2fcb0  libstdc++-v3/include/bits/stl_tree.h
! 76b804c7705a952d454f754eea890c01  libstdc++-v3/include/bits/stl_uninitialized.h
! 8db44c3d22440641ac1ba040d9370a58  libstdc++-v3/include/bits/stl_vector.h
! a04724c39d37f5ef63faf8eb2f98eb63  libstdc++-v3/include/bits/stream_iterator.h
! b0fcb882a7290e08ca43e14029ec35de  libstdc++-v3/include/bits/streambuf.tcc
! 0bc57a4d1e53acce822697a7a2af289e  libstdc++-v3/include/bits/streambuf_iterator.h
! 4b309c48dd81f69fe08fb04bf101abca  libstdc++-v3/include/bits/string_view.tcc
! 26f486326c4d6cb8b037baaec6a47af8  libstdc++-v3/include/bits/stringfwd.h
! 2a83d892a641f4d5d627db796cc45fe5  libstdc++-v3/include/bits/this_thread_sleep.h
! 1aa49350032bcc3a2864897c5791200a  libstdc++-v3/include/bits/uniform_int_dist.h
! fcb492cbf26ebf3de0d70188eeb44113  libstdc++-v3/include/bits/unique_lock.h
! 5afa5b43c03beeacf055d44cdc4bb0e6  libstdc++-v3/include/bits/unique_ptr.h
! 66681adabd3b1d78b8c1598cf4ef6582  libstdc++-v3/include/bits/unordered_map.h
! 2d0f973ffc37cccad521ff7eb0b346d0  libstdc++-v3/include/bits/unordered_set.h
! 8fb0bb8a0e08dbc54c6967e43841de9b  libstdc++-v3/include/bits/uses_allocator.h
! 60c259a954da69ce68d06a15ba7b2edb  libstdc++-v3/include/bits/uses_allocator_args.h
! d20155d53e8d300edc91710cd07f4498  libstdc++-v3/include/bits/utility.h
! 092d0d9f5c5948cb4e5d52b7a5f06923  libstdc++-v3/include/bits/valarray_after.h
! d1794ea86712506af9ad861dfbec9f9b  libstdc++-v3/include/bits/valarray_array.h
! 39a6066d7b092ff20a6731264df6ca7e  libstdc++-v3/include/bits/valarray_array.tcc
! 8c5f5a94b6e365602535c6de12c20595  libstdc++-v3/include/bits/valarray_before.h
! 702d153ab458d0b16d6f5b626a017649  libstdc++-v3/include/bits/vector.tcc
! 0775201d7ebadd93516a35c9004f0c37  libstdc++-v3/include/c/cassert
! 58cfd36e35d71475b967d7abe4ab0866  libstdc++-v3/include/c/cctype
! 2d0cb93589c640886a6d6df21d26cfc1  libstdc++-v3/include/c/cerrno
! 69553619fac907e21da92214bf22b3fc  libstdc++-v3/include/c/cfloat
! 8d6d33240ebdbe614286faf694359b48  libstdc++-v3/include/c/ciso646
! 8880b3aa727ea05e2d7445a7a30250a1  libstdc++-v3/include/c/climits
! ad3f65846920699d230f27104923146c  libstdc++-v3/include/c/clocale
! 072608f185270c81749ea86b1ac7b103  libstdc++-v3/include/c/cmath
! 0b2c50197e5998007759027669226a1f  libstdc++-v3/include/c/csetjmp
! 48c27720d9ce19c87a0816fd9dc36a1b  libstdc++-v3/include/c/csignal
! c3c2446be72aca91dd95206968b86194  libstdc++-v3/include/c/cstdarg
! f417f42efb251387f46d04a6fd5188b8  libstdc++-v3/include/c/cstddef
! 42b6c73ca7ac663c881a4b73a7df55d9  libstdc++-v3/include/c/cstdio
! ac61ddc96ea97476f50dbd43ce7a018e  libstdc++-v3/include/c/cstdlib
! c3a7d9f6edd7bcad1c8be1c22c340516  libstdc++-v3/include/c/cstring
! 433d7b96007ecfd25e8638e8bcffe06f  libstdc++-v3/include/c/ctime
! f1d671711824965bc344bcbb278f09f3  libstdc++-v3/include/c/cuchar
! c72a4fc592bcdc82b34d2778f84da595  libstdc++-v3/include/c/cwchar
! de48d970c9554f6e82878a48ff2ae3c3  libstdc++-v3/include/c/cwctype
! 7bdf8e15f2921f8b8331a6cffade64a6  libstdc++-v3/include/c_compatibility/assert.h
! de1af684b9abd7702eaeaca91206386f  libstdc++-v3/include/c_compatibility/complex.h
! 43c1f502541c256766c8e219be89885c  libstdc++-v3/include/c_compatibility/ctype.h
! b6bdf713874de65f1be356c63ba11be6  libstdc++-v3/include/c_compatibility/errno.h
! 72f0b29f8da560d60809fa72177261f5  libstdc++-v3/include/c_compatibility/fenv.h
! 873799eb92f60b0ea9b508afe831cd3a  libstdc++-v3/include/c_compatibility/float.h
! fb636bafa0f3f813553400c9aa71c727  libstdc++-v3/include/c_compatibility/inttypes.h
! 94dc2481c3cec21425eb73d339685a78  libstdc++-v3/include/c_compatibility/iso646.h
! 151c552e4c606155398fccbd8e351261  libstdc++-v3/include/c_compatibility/limits.h
! fc3d7e2f21d1ba56d5475ef36619c8c0  libstdc++-v3/include/c_compatibility/locale.h
! a14c9b34103c0dfcabf33d32bb27cfd4  libstdc++-v3/include/c_compatibility/math.h
! c24f5dfa5117af877db1109b2083979c  libstdc++-v3/include/c_compatibility/setjmp.h
! 0a9406c30f2d22947ee03ade629eaddf  libstdc++-v3/include/c_compatibility/signal.h
! 3a3cdac09cc64f488a51501161aae762  libstdc++-v3/include/c_compatibility/stdarg.h
! 63e0aaaa92ab093af3bc3d0c573fd44a  libstdc++-v3/include/c_compatibility/stdatomic.h
! 61825ec1880611b0c5247f84841de162  libstdc++-v3/include/c_compatibility/stdbool.h
! a43c73a6fc0b41ad32a1911efbfa66c0  libstdc++-v3/include/c_compatibility/stddef.h
! 4c9867ae5cab639decffabb4628c28f8  libstdc++-v3/include/c_compatibility/stdint.h
! 88c2d42b8436bb6eb763280204ec3932  libstdc++-v3/include/c_compatibility/stdio.h
! ce88caced6ed945413de73c65016f4c2  libstdc++-v3/include/c_compatibility/stdlib.h
! bddebd08d54b74aaa7faa8108eac010f  libstdc++-v3/include/c_compatibility/string.h
! 834d8bdd446cc36a35c9c8dc497cdef3  libstdc++-v3/include/c_compatibility/tgmath.h
! 1a30ac71e3922fc09f238e37250b0197  libstdc++-v3/include/c_compatibility/time.h
! ec31e9d74ebe1c8d9ff45db7f2692a7a  libstdc++-v3/include/c_compatibility/uchar.h
! 72ace9817f1db9c811e4826d328b5df3  libstdc++-v3/include/c_compatibility/wchar.h
! d3e5245863eda91e980c96b8879a7b35  libstdc++-v3/include/c_compatibility/wctype.h
! 3b4c45bef98f5afd47191ec6c1a8d440  libstdc++-v3/include/c_global/cassert
! d6496324dd78494caa39c268ad918b21  libstdc++-v3/include/c_global/ccomplex
! 710bd707b32af553a8f8b549b614b3df  libstdc++-v3/include/c_global/cctype
! 0c7919c7414a0ec5a4accafadc96375a  libstdc++-v3/include/c_global/cerrno
! 1a4c433c959ee64ce0392303ab53493f  libstdc++-v3/include/c_global/cfenv
! fb0b909c1f768ba82ee0041599f1a392  libstdc++-v3/include/c_global/cfloat
! bca0d438701497efb9ef31e7f3830434  libstdc++-v3/include/c_global/cinttypes
! 2235766cb2455d9058509b0a48bbb9aa  libstdc++-v3/include/c_global/ciso646
! 5db743a3aef6b76d5b093909ba55053a  libstdc++-v3/include/c_global/climits
! fc7e69f068d1ce8ef27dd06b139dcb1c  libstdc++-v3/include/c_global/clocale
! e2a6d0abf081874968eacbb632704d54  libstdc++-v3/include/c_global/cmath
! f137e449595902c3085bb4a36c348821  libstdc++-v3/include/c_global/csetjmp
! 5f88c7cbb404300324b310c752d0acc9  libstdc++-v3/include/c_global/csignal
! 493acbb7a891d3b9d1b1f0241b24e2c0  libstdc++-v3/include/c_global/cstdalign
! a139fbe6f91df6efa25aa994dba03fe6  libstdc++-v3/include/c_global/cstdarg
! f1e0234ea552da5fffc447097ac22c8f  libstdc++-v3/include/c_global/cstdbool
! b27b75676d5dab17dbe3e9b84dcd7de2  libstdc++-v3/include/c_global/cstddef
! 71b0a63580cffe7011c84df725cfbde5  libstdc++-v3/include/c_global/cstdint
! 20e2cc745bf3a085ad28291744beea78  libstdc++-v3/include/c_global/cstdio
! f9dd7451036bb23d465a69fad5d0d727  libstdc++-v3/include/c_global/cstdlib
! 116d7a7624cccfcc478f36e6851e4e57  libstdc++-v3/include/c_global/cstring
! c1a97d382288d0f782db3ecad0ed02f7  libstdc++-v3/include/c_global/ctgmath
! 99242ba84491c866d07eef83c33a5df6  libstdc++-v3/include/c_global/ctime
! 4f9dc4a0592c99f23670f43bf6eb831e  libstdc++-v3/include/c_global/cuchar
! 71f269a60adf0bff2473825da121953d  libstdc++-v3/include/c_global/cwchar
! b039fc1e057cdbe184c87a62b94ed7dd  libstdc++-v3/include/c_global/cwctype
! 94a6fbdfed4396199d8b11d76f81d945  libstdc++-v3/include/c_std/cassert
! 2cf89b8b5d9e695c0407c0e4049fc9c4  libstdc++-v3/include/c_std/cctype
! 4e7e4ed8ffa6c147420a0d7c036b3b8b  libstdc++-v3/include/c_std/cerrno
! 6fd3774feebc94445f66c93fd55de380  libstdc++-v3/include/c_std/cfloat
! 2bb6a7d9bddd559758543b80f82a7915  libstdc++-v3/include/c_std/ciso646
! 43479be04df3dfdb82bf3b1232bdb813  libstdc++-v3/include/c_std/climits
! c22b2207f6e50a7eea40dd414d2ded9d  libstdc++-v3/include/c_std/clocale
! bf9f29f9033bf47031ad15b394302d91  libstdc++-v3/include/c_std/cmath
! 8a5f4e9fdc5983c75d1bc15d6f1c378c  libstdc++-v3/include/c_std/csetjmp
! c1297a8d042d51ac9a9af0fc948eeeef  libstdc++-v3/include/c_std/csignal
! aacb2f6dcdcdebff1cb0ab7d1bd40aa8  libstdc++-v3/include/c_std/cstdarg
! 5b0e7b0fb98d227dcd3611b383937850  libstdc++-v3/include/c_std/cstddef
! 3a84449ac0187aab92a368b8dcd94302  libstdc++-v3/include/c_std/cstdio
! 79046e70334e056948378b5e5d2ccc13  libstdc++-v3/include/c_std/cstdlib
! c56a781951a6c809b688bcb81f2f395d  libstdc++-v3/include/c_std/cstring
! d5923cd604a1bcf708b50bc3510067ce  libstdc++-v3/include/c_std/ctime
! 9439556bb98eaaec365c5e3b15fd36ad  libstdc++-v3/include/c_std/cuchar
! 6d6f17f6cf57ce777025a9cbc67a3176  libstdc++-v3/include/c_std/cwchar
! 2fccc509c020c7f4d03d80181256933f  libstdc++-v3/include/c_std/cwctype
! 0e2e0b3615b9483f29329ad86d045235  libstdc++-v3/include/debug/array
! 72c36cebaf5b5288d1b74da291eee033  libstdc++-v3/include/debug/assertions.h
! 1a38737673becc8facf42786c35806cd  libstdc++-v3/include/debug/bitset
! 09fce61e0085ea92b4bd81d6cd4dcc16  libstdc++-v3/include/debug/debug.h
! 8243afb35d593488198b8c47cdd56211  libstdc++-v3/include/debug/deque
! 891f4b03a9d40c2b16d756043e4fcc6a  libstdc++-v3/include/debug/formatter.h
! 0917dd7d63843863fcf7c020c87fe90d  libstdc++-v3/include/debug/forward_list
! 53abc1b1108b12f79878f6a922b2cbfa  libstdc++-v3/include/debug/functions.h
! 9ff1feece89554410c0cedc20b16e12c  libstdc++-v3/include/debug/helper_functions.h
! f7885b345d1b9850b5398dfe5edb52af  libstdc++-v3/include/debug/list
! 8b86fb24b26db0419f2fab1b10923c1d  libstdc++-v3/include/debug/macros.h
! 7ec475183d161c06ce935b463882aa8e  libstdc++-v3/include/debug/map
! fbcb331a9250c6fcd73e9bd7c4380eca  libstdc++-v3/include/debug/map.h
! b347b9cf3d9486d07f0fbc31ca634888  libstdc++-v3/include/debug/multimap.h
! 571e91c31ea534607d788773c16571c4  libstdc++-v3/include/debug/multiset.h
! b81684e17e08d801471aa0eadb252736  libstdc++-v3/include/debug/safe_base.h
! e279803931b65da3b303504f9d84882b  libstdc++-v3/include/debug/safe_container.h
! 149b57b3bfbdae34d38de71cc35b9014  libstdc++-v3/include/debug/safe_iterator.h
! 36e986d237d1b3afb61b16f531979968  libstdc++-v3/include/debug/safe_iterator.tcc
! 657fb5bdd8edb1baf07fc4fa5d408b01  libstdc++-v3/include/debug/safe_local_iterator.h
! 725afcf267463fa0d138e72036b2910b  libstdc++-v3/include/debug/safe_local_iterator.tcc
! 164ee610eea89a7181654e5633eac41e  libstdc++-v3/include/debug/safe_sequence.h
! ef0e262ff10e6a4bedf2d570ad8a3cef  libstdc++-v3/include/debug/safe_sequence.tcc
! 4ac507024e2c381d0958cdae06d2ae59  libstdc++-v3/include/debug/safe_unordered_base.h
! 78b7df66590dbcbe3bfb2e991e904469  libstdc++-v3/include/debug/safe_unordered_container.h
! c0dd0aced7abb48cd221b984fed44596  libstdc++-v3/include/debug/safe_unordered_container.tcc
! ebd0bcc33de6a40385a8f73a48b74d09  libstdc++-v3/include/debug/set
! 98fe15aabb1ec82d88e7604b86b73144  libstdc++-v3/include/debug/set.h
! 0871838e070fbfdf4643d3b85606ec48  libstdc++-v3/include/debug/stl_iterator.h
! 8a9e91cfc73c80c31374169ca3035a09  libstdc++-v3/include/debug/string
! 4c5eff01566eef2ed88b2a221fef413f  libstdc++-v3/include/debug/unordered_map
! e2bf126743585e439df95a90462c6784  libstdc++-v3/include/debug/unordered_set
! b568a4a27c1d101ce47448c6cdccfd3d  libstdc++-v3/include/debug/vector
! dbe8455f94d8d7d08faca0de489d70f5  libstdc++-v3/include/decimal/decimal
! a76f8506a05bb00c10bff03eb4206cc8  libstdc++-v3/include/decimal/decimal.h
! 709cf440bacc06a3020dfbdc997986ab  libstdc++-v3/include/experimental/algorithm
! 1d40ed8b7aa0d5224a90695a698193ca  libstdc++-v3/include/experimental/any
! d1c85ab843e7786260a3593e711622d5  libstdc++-v3/include/experimental/array
! ce4d9d942c78c7a71a2f983bbd9a37d4  libstdc++-v3/include/experimental/bits/fs_dir.h
! 92829844a42af6748ed988249b7c2557  libstdc++-v3/include/experimental/bits/fs_fwd.h
! 6abc1f4a9bcdf00ba41b7a7a5e270a35  libstdc++-v3/include/experimental/bits/fs_ops.h
! f58785efb051f27e5adcc4fea7d77b15  libstdc++-v3/include/experimental/bits/fs_path.h
! f79062269672eb2b6195fcad7034e18b  libstdc++-v3/include/experimental/bits/lfts_config.h
! 85b50cb8925a5dcaa808980b5cb0d8f7  libstdc++-v3/include/experimental/bits/net.h
! 1c99b46217fbeb7cfcb4fe9fd60a5ac8  libstdc++-v3/include/experimental/bits/numeric_traits.h
! 1d457f0e71c47e01d107c0ca8609019c  libstdc++-v3/include/experimental/bits/shared_ptr.h
! 5a80322012c33778b809aedad975254b  libstdc++-v3/include/experimental/bits/simd.h
! bc3aaddff61234a8610b1ee193ef62ef  libstdc++-v3/include/experimental/bits/simd_builtin.h
! 893b969b5ded9ce2840356ae752d5063  libstdc++-v3/include/experimental/bits/simd_converter.h
! d6cdb6154029924e8256bb98913843ac  libstdc++-v3/include/experimental/bits/simd_detail.h
! 2f6dec5e93e6387b98ba68b2ed06426b  libstdc++-v3/include/experimental/bits/simd_fixed_size.h
! a8b1da7d2a6af4b90429628616a0a66e  libstdc++-v3/include/experimental/bits/simd_math.h
! e861ebcbafc444ea9eb01ac9c5b99979  libstdc++-v3/include/experimental/bits/simd_neon.h
! 9d8c9201675f2559be4096f8d152c694  libstdc++-v3/include/experimental/bits/simd_ppc.h
! 0f52ac4c09d5b301f2ea36edd4b54508  libstdc++-v3/include/experimental/bits/simd_scalar.h
! a9d554501f4c205a808e95ccaa069881  libstdc++-v3/include/experimental/bits/simd_x86.h
! 50722f04d8752d1fa4618f77cc80ed2f  libstdc++-v3/include/experimental/bits/simd_x86_conversions.h
! e1be8e54aaec8a34e1f682da217a9550  libstdc++-v3/include/experimental/bits/string_view.tcc
! b17463914bf45d86c8b27f74d4738c10  libstdc++-v3/include/experimental/buffer
! a94d9106d1f001915671ad4d626b21ff  libstdc++-v3/include/experimental/chrono
! 04a69db7b0ac197fc9a3f6ccb4e67f64  libstdc++-v3/include/experimental/deque
! f4f8da16d8133bfcb69eef49d797a1b3  libstdc++-v3/include/experimental/executor
! 174c0fa7105d71925dc0c7ab3376f07c  libstdc++-v3/include/experimental/filesystem
! 4cfd0865400c74397b111980a5b8f3ea  libstdc++-v3/include/experimental/forward_list
! ee6ba0e2ca753c4c038a9ebfb0805c4f  libstdc++-v3/include/experimental/functional
! dab5202bb88779e945a419918ae33338  libstdc++-v3/include/experimental/internet
! 2766d0b421163f93012e31499fd68480  libstdc++-v3/include/experimental/io_context
! abc318d32456e26882cc3fa419abe900  libstdc++-v3/include/experimental/iterator
! 89cd7b8a6b8c8fc54f2f5404abadc032  libstdc++-v3/include/experimental/list
! 2c1d62f69a866cdf10ffacad27b340c9  libstdc++-v3/include/experimental/map
! 7ac714ec4a36a7cf8d2732c4db113d4a  libstdc++-v3/include/experimental/memory
! c55914d74e73e58a605588e321105d3b  libstdc++-v3/include/experimental/memory_resource
! 50ae842a707510221c966a5e66dedae3  libstdc++-v3/include/experimental/net
! ed1d16c3daf011c46f5493c4d9ab0aa9  libstdc++-v3/include/experimental/netfwd
! f2b04dddf3a974d181c5582f18705ed5  libstdc++-v3/include/experimental/numeric
! 0b0aaaf33950ba64dd1c1ecd1440b071  libstdc++-v3/include/experimental/optional
! bc2b4daaa723b3d473234d83440e9184  libstdc++-v3/include/experimental/propagate_const
! 88deaa9bdbe1b37df6d9f1144ed140be  libstdc++-v3/include/experimental/random
! 0b49835ec315341fd40734dd199b3503  libstdc++-v3/include/experimental/ratio
! c8f2f4338129bb3d96c858c4ff42ea78  libstdc++-v3/include/experimental/regex
! 494e820bbbf810ae050299afd21b1f99  libstdc++-v3/include/experimental/set
! 05b55d9baafb18b02adcbb9fd18128df  libstdc++-v3/include/experimental/simd
! 96e50234a1e46a83c9d7e5eda7e9c827  libstdc++-v3/include/experimental/socket
! 70f4b0294f6e231e4010df68933744e9  libstdc++-v3/include/experimental/source_location
! 24e32b1f8dc16cba6959a8746bd7d75b  libstdc++-v3/include/experimental/string
! dafac68817c8f9475fc3bde566ed8902  libstdc++-v3/include/experimental/string_view
! 75b66c367e172042a1afedda1fab27e1  libstdc++-v3/include/experimental/system_error
! 5f1266d4d8133f022b78f98f0cdefbbf  libstdc++-v3/include/experimental/timer
! 718aeb28b4405dec4492366cf0eca27d  libstdc++-v3/include/experimental/tuple
! 84501e2955d71ce01f40c4b8ac8c97b2  libstdc++-v3/include/experimental/type_traits
! 399943e5b90e5b0f7717f60fcca4574f  libstdc++-v3/include/experimental/unordered_map
! 756cf4ca97ebd88baabd894c9acae92e  libstdc++-v3/include/experimental/unordered_set
! 18cdbc7f9c4eac37a520ae985047e727  libstdc++-v3/include/experimental/utility
! f919b31a9006febcd072bf64bd03c776  libstdc++-v3/include/experimental/vector
! 39c06b7dda7ed5df40293a04eea5bd8d  libstdc++-v3/include/ext/algorithm
! 438d1c06d8b2a2432599c77df78c4d66  libstdc++-v3/include/ext/aligned_buffer.h
! 31f7d0a2a02f50c83a5e79fe6db5fca2  libstdc++-v3/include/ext/alloc_traits.h
! 7a4eb583a7c8a21b5a7ba38118be2629  libstdc++-v3/include/ext/atomicity.h
! a77deacc890015a2572e4e21e3a9bf6b  libstdc++-v3/include/ext/bitmap_allocator.h
! 2e7c85a31e85111e67c8a03012d3c9ce  libstdc++-v3/include/ext/cast.h
! 22ac1681a153f502e005337134e553a3  libstdc++-v3/include/ext/cmath
! d6b4de322e3214124548bbd55aeb5088  libstdc++-v3/include/ext/codecvt_specializations.h
! e03c736a82a7640b89ddbcd41fc4df88  libstdc++-v3/include/ext/concurrence.h
! ebe0e740b47791e8a0d5fa704ca6db70  libstdc++-v3/include/ext/debug_allocator.h
! f6eb6b846fc6a602340bb94d9d462688  libstdc++-v3/include/ext/enc_filebuf.h
! a991657867364dcaf16d19671aaf643c  libstdc++-v3/include/ext/extptr_allocator.h
! 43c3089edbabbc7eae00a5c6facf7daa  libstdc++-v3/include/ext/functional
! 48f390fcfbb6a44e248facdb0ec14988  libstdc++-v3/include/ext/iterator
! 2e16613d6e384416903163c52f535d47  libstdc++-v3/include/ext/malloc_allocator.h
! 008b2229637eab3f9bc87596aa035239  libstdc++-v3/include/ext/memory
! 5a173e66ab05ee5c37fa416596420100  libstdc++-v3/include/ext/mt_allocator.h
! e1998e6fc2a8d3eb451025d3c021ceb3  libstdc++-v3/include/ext/new_allocator.h
! 9ae1e878156f72db62d7d94772f7dcb6  libstdc++-v3/include/ext/numeric
! 8bcaa226ce57469a87ed94febd6082f9  libstdc++-v3/include/ext/numeric_traits.h
! bd496b3b9a1ecb478f97715addaffe67  libstdc++-v3/include/ext/pb_ds/assoc_container.hpp
! 616478dd560c2735acf4515715147280  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
! 4c0fd7142e69ccbd463218fc78aff92a  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
! 883c994a6609cd03d8e21ce0f11008d4  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
! ed04a236e6d29645e2c983814ed215d8  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
! ba5ddbe6187e70f6f7b7e025ceb9c88b  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
! fedb6253996cb664fe5ff3a1b97eba21  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp
! a8072560192510b82a65affe16baccd9  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
! 7c1e64fd6513f32f34af29b5ddd71726  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
! c7af808b5393bb6e5b41960cd7190a41  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
! ec9a91467835248948b2f3148644124b  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
! 00285f98ec0f692112bcb4a56ad2b1e8  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp
! fffab1dcae5f088865bc513522001787  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
! f322c919bbbcc1970364630d0ea1874b  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
! 611e305fe17b066316fb4a1aeb566c4d  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
! 1110c274e8d06dc50e7b07ce212e4cf2  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/traits.hpp
! 04651284b3378070550481969decb342  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp
! 6f3c7af617654077c7e568df3b82c463  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
! a3b08e3cc3a5491b125df5bbed3cb276  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp
! 3d7fe507dcc81fbf4e5acd5e996f7293  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp
! 2399dfc557e3d9b1c1fedcae8f9018f8  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp
! e10c220d17dcafd54025c4905c85b3c0  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/entry_pred.hpp
! 3bb2477147299dc922a73eeb66e28128  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp
! 68da43ff3ca4473546c9005cfdf31106  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
! 08bcbaf4751f6e6f3fd279618b2b5294  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp
! bcf39ef397661a8285a9aa80bb0884b5  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp
! 5b2e010b13fa5c5b26efc37045a1d347  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp
! e271089c78adf910840b73285928e109  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp
! cfd24584fa42fc174791f2611ffe1ab6  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp
! ca1e302e87ad7df291b8774deb3c6f72  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/resize_policy.hpp
! 6f3de6b17dda3ca070bf8dd857d514ef  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
! df5886af5e2b066a797cc9cf81a4886f  libstdc++-v3/include/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp
! be8de9f0863812a79026e5ba677606fd  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp
! 4a175e7e574ed6db1321cc6655f4d6cc  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp
! 5a083f783ca3ab9eb51cb2ff2b5ae8ed  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp
! 29c544c899e4d4758d16d54e27cf7334  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp
! d574c19d8f1f3984ff475e6526321c2d  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
! 6be38912d9bf5afe5762f147a776348d  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
! d4bd3e0c8084e2a84a74da6e48584775  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
! 15df91b73524283e7f171c1f57971e38  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
! 3baaea52388bbaacdf63c0b51be73a8f  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
! aa1b9c235197b06abb3aed54b25f6c0b  libstdc++-v3/include/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
! bcd28ae25b711ef285dc06f5f336766b  libstdc++-v3/include/ext/pb_ds/detail/branch_policy/branch_policy.hpp
! 4e37e8becea01021f987b5d5f8daecd2  libstdc++-v3/include/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp
! a784c31143f739a5f89f9d1893be6882  libstdc++-v3/include/ext/pb_ds/detail/branch_policy/traits.hpp
! 97d810946533d74e64e5eb3d2271c1ca  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
! 92deb0ff30e5795ef856ad9ccba528c9  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
! 5bd5c2443d1b2b315f53b98a1d7d31d9  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp
! df2b3e4ed86de7db3c99b26d0196844a  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
! 098a652d22b5a6601dfe329f0d30d746  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
! cd20414bc18f2ed5e3a5aa87c28d2c34  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
! d618f15033c63f442211088649d2c381  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
! 94bf82394d2290193c725e73c1358f39  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp
! dfa558e0d81e783f262320b53f47a79f  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp
! 8e68b8a93efe2e9152b04dbd03fcaa15  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
! 6e010becfe2be74092b452636190e218  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
! 57f1bed9ee3420e6e166f559b35b6032  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
! 1fac33a0026b44a568926a0e374fe41d  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
! e7f7fdb9657455ab1008da1c74b1ad34  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
! cb2a90f1403d4b0e76224158ee250892  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp
! ad46f3f1b1aa9e4653520d013b3800af  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
! 271cc042f6d6d06d6b0bc1beeb5053c8  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp
! a3d29f6c0500a2190af9e77816f08ba6  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
! e59914c97cc5cb4ffc770a73c834dc62  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
! ef868cde117974a29fe5d220e1197cab  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp
! d270a2966ad5732afc8917fa540ff592  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp
! 6eb67b106b7e8b5fa9eff44e2ad34ad2  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
! 189664f493e9291aa856ae8dd8ce014d  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp
! 432dd1aeb91f3890d4e54af6f0b49942  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp
! 8f9fe24b6d1144045912493c66d4a905  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp
! 0383182a50d19d4e2144a9148224efef  libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
! e0899469b27ec0f0576a346838072e4c  libstdc++-v3/include/ext/pb_ds/detail/cond_dealtor.hpp
! fba85a8ebf453f418cc2c0eb9f65ed4d  libstdc++-v3/include/ext/pb_ds/detail/container_base_dispatch.hpp
! 516fe11dfd9c9cae2d1bbaccd9d9e6c5  libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp
! ee84e7c45998561204ae2022207c0266  libstdc++-v3/include/ext/pb_ds/detail/eq_fn/eq_by_less.hpp
! a7d453f421bfd98bc05a8b21dc9e0ef7  libstdc++-v3/include/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp
! e51ad404e5b63dfa5401f71d54faef97  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp
! 777e2022e2b9fbe500e65d1f620f5018  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
! 30c52d3eebc393c1afaa90f3d974fffd  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
! 1e26622d3ac3550c96825275c6986e79  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp
! 2e1a21757a007efb7919042e84a4a0d3  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp
! 447ab2a333dbed8ebcda2b6f6c57a5ef  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp
! db249b32fe9b3f8aa89bb1b3a92e2024  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp
! 7119758171d8962e92c751b190d613b7  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp
! e1a24667871d0f9dc16fbd93f6768e55  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp
! 7f34391a4d23d8b22f17611d096b2514  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
! e9627501f98432da74190ffef39463db  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp
! ead6709632b27f04a2fad9f85514265a  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp
! 8b9d33dcef9be7c712c559a129280ace  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
! 43ce1631fbf480de716c9b43462bc4a0  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp
! 4a72141d8de9d33f86a2835b62df4239  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp
! bf752e2f2ac29155dfe5e665d217b8f5  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp
! bc9fbd1a6466c82c73bb7fe4729ca6d3  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp
! b25e543eb1cbf2fcae0cdd264fe0f29d  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp
! 68300b53037db4659c560ecc14526a48  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp
! a6a7add7dd08331a5d67d2aa3f00d227  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
! c9158887a462e3bf079166db77326ee2  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp
! 925a121b7b69555d6f4c075bc77baa16  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp
! 2301a6529614172bf3a862b6c8100f8c  libstdc++-v3/include/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp
! b690b6c74be456e8c6486eaf0cf01537  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/direct_mask_range_hashing_imp.hpp
! c117eaa9652719d492120b291f3b2f25  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/direct_mod_range_hashing_imp.hpp
! 3ac06c7fa8d00bf86372cde47c007a0c  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/linear_probe_fn_imp.hpp
! 060f0826fad70dad7b744f75a709c780  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp
! f9cc7bc6a839375c428514fd9c652baf  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp
! 63124ef98766c7d0213d7afd02b19cdd  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp
! 73596568c5f4c4fe047649bad07c77de  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/quadratic_probe_fn_imp.hpp
! 934dafbc464002d93e542eb3bb5a8bd9  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp
! f2ed33483743ee8c516d35a52a2af83a  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp
! 41efaf35e8ef7079f348e3bb2476c70a  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
! fdde46aba4e90fbaa62b05febdf36302  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
! 827d1882b67a9afaa7fa94ae26890681  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
! 99ab79c808d9fbc77abdaf43b2f4a886  libstdc++-v3/include/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
! d961f2e8b8aaea638aed005d645f11f1  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
! 5fda01052914f4b920cc7c3a873daf5f  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
! 619028d8fb52ccaf204ba66691847b63  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
! a9619aacf6b86b30bf22c7eb110a61ec  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
! b45672b29bebd2cf365aedbb333f725f  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp
! d3abdf478caa7560625d2255330b6aab  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
! e3b60de3bd709ec34575374a0fd720f0  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
! 2173b419c56b3a56b48386b2265478c5  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp
! 6b480f6e9bd546db0ef8520a4edb1d71  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp
! 16454cccadbf1a32f259349421f06556  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp
! e31b411138f1d35c9aafa60f01e9c256  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp
! c28aaa0d15d4d6ea0b7c8a0a56d094b9  libstdc++-v3/include/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
! cbb8e85c8b37a07cad26760567be1fe0  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
! 01f4fbf4f2eaaadae3d5574b2d857ba3  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp
! 027959360712336789ef48c4821d711a  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp
! 40eb2bc43b592f704e1f255272671298  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
! ccea809620900a1e617f0d545cf528b3  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
! bddc8da2bd078ead2c1f90441c776cc3  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
! 2ff70de653fc91b6b3c1b3eee1f82c10  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
! 5861b31f348644674731f91b3f3700c4  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
! b994e35ff462b28ca70243a13aedb42d  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
! 2cd7c890328f83ad84c0e5bec5ebc9e1  libstdc++-v3/include/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
! 8480c8bfc4ba96a83f12307213bc9502  libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp
! 7a87fae8d4328c67079e7baa4f76a728  libstdc++-v3/include/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp
! f739565fc3f7777898c34b8bac9f901c  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
! 22ea472c60b7f6dfe29b75cf77dd3b3b  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
! 966ea6806bb3bf53d6ca4202ba371119  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
! 53a8109d9e30b5265dad4e0acd31a4b0  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp
! a502b1871fe4dd25e6fc6759a455ac62  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
! 1b492977c1c2325d49c60a2d9085c7c3  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
! c4d4b344f536ff70d2bddaade57127cc  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
! 56e7a32cc898ee904810819a4e48d469  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp
! 0420c5b82cdef8cf3df01b00ada79a8c  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp
! 2954f174449e5d38c79e32462b4f7b03  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp
! 93f76792e69cb021b7bc70478bcfceea  libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/traits.hpp
! 0ec6818ed36bc4318721f004fc4c0f4c  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp
! 0c4d07111b4ad6463b412401c53ce0a6  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
! 6e6c205b282480aa5f05a994fcbc4827  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
! a8fb156cc2fa0635dfe05629793bd992  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp
! 89b7acdbc58658222aceccf623335fbf  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
! 439c5810f6f938d0bd634330939df240  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp
! de6729afeda69c69cf0fd2ac4e66c5d2  libstdc++-v3/include/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
! 559639e4eb1a175e4f30147ce54c657c  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
! ec8029f93e18868a3e1a0c68cb22a7e1  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
! 1fa8809acece90d3de1e495689921476  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
! 0e823c70c8ef782138e98ef807120a85  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
! a87eb0b41b192114994d38468a48fd9d  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp
! 746529ca584df45d32b45d4b353b5f83  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
! 61e2bff655868af70396e5b4f9109325  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
! 9dda078a18acdae6977bfbb61b9c7a51  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp
! 7031d653c93a44947c51de3c6aa31518  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp
! 5cd1f5832ff2b870bf9a0819bedf45ed  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp
! edd99c7893d4711c0f9a178b0780ce29  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
! 517c983402feafcc6f7b2f191df0db8d  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
! b07cd755d40b09f0e32a9acc4a46678f  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
! 053d2feb3da6e928d4ef66d69dc19031  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp
! 171b47f33e0d5d72d9543abece49c030  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
! a5f0c83905dab041c8faa0c624f0343a  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/traits.hpp
! 1cdf9d8994cb9c7304ff287319563765  libstdc++-v3/include/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
! 79395865b7681fd517db9fc14a7c90e0  libstdc++-v3/include/ext/pb_ds/detail/priority_queue_base_dispatch.hpp
! 2478b7557adc37d0251e755e78fd6d57  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp
! be6975e35de4c9f78f918601abe3ada0  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
! fa2ad74bd7c843567e068fe5e6e8c6d1  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
! 1a55f39fc5a6d3c34affe8549c208c8a  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp
! fb1368449dfc26b3032a7a04c5e86bf7  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
! 88b2f1461a65080ac9d06d16f339f5ca  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
! 0dea620761c102a38b04c679e6f84297  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/node.hpp
! 6140f1029bba4e1e4acddac9be8dba52  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp
! 78cdc19f2d54b038d435a51dea86b1ba  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
! 1a9f8c896502af2e1f3fc3fcae79baef  libstdc++-v3/include/ext/pb_ds/detail/rb_tree_map_/traits.hpp
! fea676d8740bbec59c32924cdee2f9c3  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp
! 6906a05bb1309d2aa64cbe20fd1b944f  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
! 214704764a8cf1855a9c859e94868635  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
! 149ffc3e31bfbf30898509f2642f8370  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
! 55fff1dd1a04a3ebfcbc211b96f45116  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp
! 85ddb7c2aee866834e17d923dc1ae42b  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp
! 7b5cc2f132e71ecb9eaf0c0aa77d5764  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp
! fbf404d35ea210a7c4e1ea0aed9a323c  libstdc++-v3/include/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp
! d03a10379e152c57b7a11aa468575223  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/cc_hash_max_collision_check_resize_trigger_imp.hpp
! 5b11b9567bbb9d6cfe5e119a32c3a22b  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_exponential_size_policy_imp.hpp
! a43ca3600c1b0f67afb405e8ab58eeaa  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
! 88929dc45a59099399f81439f6160858  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp
! 25a455c02fc129358871e241a621d919  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp
! 84c04e9901f14d9c39ddbe77349dc3cb  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/hash_standard_resize_policy_imp.hpp
! 06f9cd3489d3ca38cb49983a8473f12d  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
! 23b7ef07c45cc35a667e17885424ee22  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
! 994da32283ecc1b7b0978e992f737427  libstdc++-v3/include/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
! 8825419cb0bbc9f78a6906a5e7f04b3e  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp
! 30c1c9022f80688b958c875d383c19b7  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
! b4e1eb4466c204697389ba9dc132c80b  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
! 9f5a6826133fbd16da24182bf86d5622  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
! 400ad50ca36f6fe390a3e23f6ceea3dd  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp
! 40c707e351b7c3500f40f113fb5318c0  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
! bcc4420f6b61c3b348c8d4d0a288730c  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/node.hpp
! 6791ef4fa324647520060ef51c401e3c  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
! 52e131ab6e5fd9d5044aab1396158794  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
! e4a7e81fe9f59cb57c3e69ed184568c7  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
! d2302f0e3478fa93e01166236da6019d  libstdc++-v3/include/ext/pb_ds/detail/splay_tree_/traits.hpp
! b029c57e6ed2120d4b5781ee7f2d5041  libstdc++-v3/include/ext/pb_ds/detail/standard_policies.hpp
! 6fca0557dea2515441b7024151760901  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
! 25c8fdd41bbecd0727b8eaef3365f0a0  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
! 9727a18023609e217c05f9c00b3e8684  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
! 4625aa8689fbf6a1a8ddf23608e0cb77  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
! 48def8145b1617e96dd09017de8fca0d  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
! c09e5cba09ed6b994e6476f9cace3772  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
! 456c77671d6fc2b719a50d4256185ee3  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp
! 70ebe6ebdd7a84044ab233bd8a5984ca  libstdc++-v3/include/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp
! 858ca5239372b57ec4c6e082ccb4322f  libstdc++-v3/include/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp
! 730ed47e10b89ec00c3c116450b7230c  libstdc++-v3/include/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp
! dff0b296230671ab40e56cffd107c981  libstdc++-v3/include/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
! 9d280e3627d089baa63004557b93bace  libstdc++-v3/include/ext/pb_ds/detail/tree_trace_base.hpp
! 8139d900dcdc5b55486a85d9c49cae6d  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp
! b6754a9627e9d5a9c6cc9afa85914dfc  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
! f33b1f1b03a645f78ce51b569f08df52  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp
! 0cab85d77ea6e0cf6de01011a4981202  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_access_traits.hpp
! 1225880fd2e472217fecc7a2d499dbfa  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
! 664d73deb23cc47161c6bd741ffbfccc  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp
! c3ee5b94c2c89400c3e0a7ecf870a169  libstdc++-v3/include/ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp
! 4268b92e369a757236cb5f528476006b  libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp
! 52d68a7bd601cf1108d46f5dbbc0f27a  libstdc++-v3/include/ext/pb_ds/detail/types_traits.hpp
! a0cdd8abefc67da87265ba0f49e2840d  libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
! 846bc4f45212513c313e01005b2bad6e  libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/iterator.hpp
! 9072955d9388e04b25b147ab831eb496  libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp
! 4e2de3ea4bbb2e396ac9af806343da71  libstdc++-v3/include/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
! 0a076de96fabaafcd5138ae1bd5b9ec2  libstdc++-v3/include/ext/pb_ds/exception.hpp
! e2244598d93911cc5493618b395d79cc  libstdc++-v3/include/ext/pb_ds/hash_policy.hpp
! 38891cc3ab82235ceca31de7d2d0e74d  libstdc++-v3/include/ext/pb_ds/list_update_policy.hpp
! 796cf15d999e29743d8d84b1d535b06c  libstdc++-v3/include/ext/pb_ds/priority_queue.hpp
! 9e0a8a8385e60619e404308bcbf71ee0  libstdc++-v3/include/ext/pb_ds/tag_and_trait.hpp
! 26d150aa543391eece36add521309c8f  libstdc++-v3/include/ext/pb_ds/tree_policy.hpp
! 6cfc52e940a41985b8c58b0059e621ea  libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
! 2ec876120ea6841bf1985953bef04f29  libstdc++-v3/include/ext/pod_char_traits.h
! fa68d52358cbde1fc3dbc11f12406f65  libstdc++-v3/include/ext/pointer.h
! 2ea20e4049f0c17f7b7233012f88f789  libstdc++-v3/include/ext/pool_allocator.h
! a0a6a2ec7ef2b8e6074b6defe6ef1a38  libstdc++-v3/include/ext/random
! 652ddf332170715fe1b553e21ad46e8f  libstdc++-v3/include/ext/random.tcc
! 3838558247b3915f71481a41747ccd7d  libstdc++-v3/include/ext/rb_tree
! 79ea1b7beb81dcf5dbd85d028761329f  libstdc++-v3/include/ext/rc_string_base.h
! 6f1fc8490d5c57067bbafa22a2aeaebf  libstdc++-v3/include/ext/rope
! 893611345d4bf3ef695d46122b622760  libstdc++-v3/include/ext/ropeimpl.h
! 9e669067b061253e032bc964420f1469  libstdc++-v3/include/ext/slist
! c49510b2e5e3bf82711eb4aba5ac8365  libstdc++-v3/include/ext/sso_string_base.h
! 177a45ba78eb9c3a0cb8e04c5d9124cb  libstdc++-v3/include/ext/stdio_filebuf.h
! f1ce74fcce7def3588a5d0e513779256  libstdc++-v3/include/ext/stdio_sync_filebuf.h
! 3b9e318bace7aced89d0899e97058cb9  libstdc++-v3/include/ext/string_conversions.h
! d79f5a97e97f1256a93216718c519334  libstdc++-v3/include/ext/throw_allocator.h
! 6044b9b06a16062aefb7106e5893598e  libstdc++-v3/include/ext/type_traits.h
! eeaf5b958c0668c8e15861bb2b4084ad  libstdc++-v3/include/ext/typelist.h
! 85737d1f3cc5c48116ba6d98ca4d592d  libstdc++-v3/include/ext/vstring.h
! 3b55a0e7304d58913ff7e4fcb6eca903  libstdc++-v3/include/ext/vstring.tcc
! bbcf6681c888eb025306326d3d1d612f  libstdc++-v3/include/ext/vstring_fwd.h
! fb066d175984ca51531eb92fdb43cb77  libstdc++-v3/include/ext/vstring_util.h
! 012563ba886dd7cc4063ab1de2348eb1  libstdc++-v3/include/parallel/algo.h
! de3279f93ddac20035e4b8bf5f7533c3  libstdc++-v3/include/parallel/algobase.h
! 33662c0283e0e0f0df4a44326a4c68dc  libstdc++-v3/include/parallel/algorithm
! 95a519529727b142b7a961bcb54e2794  libstdc++-v3/include/parallel/algorithmfwd.h
! cbe8fb0fea01538c0132b8e8a06911f2  libstdc++-v3/include/parallel/balanced_quicksort.h
! 7d7097761796267477511973e27a615d  libstdc++-v3/include/parallel/base.h
! 488c4cc93df8eb214c7a237e6ad8e42d  libstdc++-v3/include/parallel/basic_iterator.h
! 977655d7d233ea4d8b098cf88eca7b62  libstdc++-v3/include/parallel/checkers.h
! 03fb4625eca08b0290ecbd1ef76fa558  libstdc++-v3/include/parallel/compatibility.h
! 072b29c77efdb0be079dcb1820ff2f21  libstdc++-v3/include/parallel/compiletime_settings.h
! 87efb570a33993293d7e65df38f69e81  libstdc++-v3/include/parallel/equally_split.h
! 010ed786fabfb21da1dbe8d6d8acff0b  libstdc++-v3/include/parallel/features.h
! 5c5efc4cb5e85f393a37126974bdf36f  libstdc++-v3/include/parallel/find.h
! 1fdc9df7e8154ee5674a58579ef7ed11  libstdc++-v3/include/parallel/find_selectors.h
! 16a5c534fa71267b9bf05d9c0c22802e  libstdc++-v3/include/parallel/for_each.h
! c6e981c1f6579229f4f20f668c7452ea  libstdc++-v3/include/parallel/for_each_selectors.h
! 1f2dd777efce7778375290314bc646f6  libstdc++-v3/include/parallel/iterator.h
! 931cfa824e7de258a102899bdf93810e  libstdc++-v3/include/parallel/list_partition.h
! f2b6a0a3d2325eaa004b4f8774ade795  libstdc++-v3/include/parallel/losertree.h
! e98e062996f2bced816b10d264f10a74  libstdc++-v3/include/parallel/merge.h
! 3c47e48733f85aa5e3e8f614abe3de55  libstdc++-v3/include/parallel/multiseq_selection.h
! cabfa18ef07d47be9d8d5842a35ddf36  libstdc++-v3/include/parallel/multiway_merge.h
! d448268bff37c2dbc67c1bf1d7b36e1c  libstdc++-v3/include/parallel/multiway_mergesort.h
! c5f9829ad037a04283e2c66e4eb32101  libstdc++-v3/include/parallel/numeric
! f948538b72944763c8e14cb272531b0d  libstdc++-v3/include/parallel/numericfwd.h
! 0b018645b677516150ef5777583ec408  libstdc++-v3/include/parallel/omp_loop.h
! a73dd6d436be4d7d312ebc16190304ae  libstdc++-v3/include/parallel/omp_loop_static.h
! f79a2c8cca59a4c7fb2a5f8cf104058d  libstdc++-v3/include/parallel/par_loop.h
! 5cf48a6015b5b671ab294319b148a54e  libstdc++-v3/include/parallel/parallel.h
! 85b40456a17f7cb1ed24c149367cf3e1  libstdc++-v3/include/parallel/partial_sum.h
! 023971863590103ccccea2cda3b9a1c0  libstdc++-v3/include/parallel/partition.h
! 2ced73aca79eb566fe14533aefbf66bb  libstdc++-v3/include/parallel/queue.h
! 4d7d0154b42d3d41739ebeb90a55af46  libstdc++-v3/include/parallel/quicksort.h
! f2a01555b7ae5ad014f50680fb3878e2  libstdc++-v3/include/parallel/random_number.h
! 1f53883f57f34c0a68f8d077b6ce55cb  libstdc++-v3/include/parallel/random_shuffle.h
! fe603105badc87ea5215e8a9c76dae10  libstdc++-v3/include/parallel/search.h
! de7223e37e7ac081c3e42870142eb713  libstdc++-v3/include/parallel/set_operations.h
! 22539cd88aca17cf57d7c8f963154e18  libstdc++-v3/include/parallel/settings.h
! 82b58a365706e8eae6b9fe4ae4cf913b  libstdc++-v3/include/parallel/sort.h
! 78f2dacb455fbe3cab453200618eb5d6  libstdc++-v3/include/parallel/tags.h
! a55c4f4b05e7c063634b505449e9a310  libstdc++-v3/include/parallel/types.h
! 68178c93946e2787119bc3120060e001  libstdc++-v3/include/parallel/unique_copy.h
! ec083732e16ec4bd32dacdd3927991cf  libstdc++-v3/include/parallel/workstealing.h
! a43330266edd6671ed829ec9f7b829e8  libstdc++-v3/include/precompiled/extc++.h
! 552161a8a4fff86504324104afcca834  libstdc++-v3/include/precompiled/stdc++.h
! ac43294dffea100aa3cde8621f05f254  libstdc++-v3/include/precompiled/stdtr1c++.h
  75cfb36aeb3ed8672bb4e2957272203c  libstdc++-v3/include/pstl/LICENSE.txt
  12b7134f312d65f84a117c18a456d271  libstdc++-v3/include/pstl/algorithm_fwd.h
  74a0358aaa3f639ff58b225e142f615b  libstdc++-v3/include/pstl/algorithm_impl.h
  f6334ffc99f69354798bfc8024dc39f0  libstdc++-v3/include/pstl/execution_defs.h
  69ed2403525edbee720eaac531dfa979  libstdc++-v3/include/pstl/execution_impl.h
! 87b0d132d9a180f96cdd7cbbf15a9f57  libstdc++-v3/include/pstl/glue_algorithm_defs.h
  afd65b5eade8cb9bde229048ab072fad  libstdc++-v3/include/pstl/glue_algorithm_impl.h
  dd6e851bc473b9ff23e81df89abe4fc7  libstdc++-v3/include/pstl/glue_execution_defs.h
  0b0a3983fbed012140824669c804e50a  libstdc++-v3/include/pstl/glue_memory_defs.h
*************** e128e525f970f3948feec2f4750919a8  libstd
*** 98876,103976 ****
  d3d2812c60e828c1e822801f148c7630  libstdc++-v3/include/pstl/parallel_impl.h
  64e9a3bc96d1e3015387cb95106544cf  libstdc++-v3/include/pstl/pstl_config.h
  b156f0d597a2edae1a06e54aba071e41  libstdc++-v3/include/pstl/unseq_backend_simd.h
! 248e4a4c932ee32246a6216c3b58a482  libstdc++-v3/include/pstl/utils.h
! 6f7d40cef8f663c474dbafbd94db6d41  libstdc++-v3/include/std/algorithm
! 463aea90e2091f752c8b3d12848f07af  libstdc++-v3/include/std/any
! 1c0c57ef53ca4293de32b58ded42452f  libstdc++-v3/include/std/array
! 570573a00e531ffdecd17c4b451394a3  libstdc++-v3/include/std/atomic
! 113c8eb3a8d8b67c8404665c3eb0af4b  libstdc++-v3/include/std/barrier
! 0c9f83580f47735e5a15465796ce574b  libstdc++-v3/include/std/bit
! 92df508c8bd5ee1e5201893372265093  libstdc++-v3/include/std/bitset
! 22f4855f519d0c64e0fd08dd60af4544  libstdc++-v3/include/std/charconv
! 84f035b368ef2b37d7074a834881f74c  libstdc++-v3/include/std/chrono
! 9fc8010f8954d7f9d9b7b73480068af4  libstdc++-v3/include/std/codecvt
! 34ecc2d19af4343e2194a05671920bcf  libstdc++-v3/include/std/complex
! b27a8ffddfc035eda249b54de11167b3  libstdc++-v3/include/std/concepts
! fb6345dccc50a327805158467bdd0578  libstdc++-v3/include/std/condition_variable
! 0f8d495b0973573de96359f543a4b357  libstdc++-v3/include/std/coroutine
! 8b2773ff4157b0afe801622dc6da60ad  libstdc++-v3/include/std/deque
! 6f595687b79057f213583411ceb87649  libstdc++-v3/include/std/execution
! a237fb5e78eed942187e2c31d09781cd  libstdc++-v3/include/std/filesystem
! f5cdaa349c402ad3dc30fafc021795ed  libstdc++-v3/include/std/forward_list
! bb00f2ca62b1de81f535a88e31c1f5de  libstdc++-v3/include/std/fstream
! 58a2fdd72fd79ee358a1e9503125bf81  libstdc++-v3/include/std/functional
! d477bf4402a3b2bf03b9630bd82c16f4  libstdc++-v3/include/std/future
! 845b6c7d80f2571b48679fa2d1782e3c  libstdc++-v3/include/std/iomanip
! 7f2ddbbe088dd66d76a348a256dba943  libstdc++-v3/include/std/ios
! 3c26a7aac28e06bf5c15f34547dccfe2  libstdc++-v3/include/std/iosfwd
! cc9ef3d2217fc8c34ac467dc84040a1a  libstdc++-v3/include/std/iostream
! 0c8c5d6467ac30bab3d781a7a81604b8  libstdc++-v3/include/std/istream
! 18a3b1062d8afaac67497cf9e22a5001  libstdc++-v3/include/std/iterator
! 02e04305d111ee17f9c47d5be14bfde0  libstdc++-v3/include/std/latch
! 5db2105ed53cebe7e72b5aeade698f93  libstdc++-v3/include/std/limits
! 16c217a27a73a7f4aeeb27168b011a69  libstdc++-v3/include/std/list
! fdca44bb1137ac2dff5858d707a7d4bf  libstdc++-v3/include/std/locale
! f36de15c1f3b7e03051daa3f7c7472c5  libstdc++-v3/include/std/map
! 9c7bf4ea1e18b545d124ae2680b02ed9  libstdc++-v3/include/std/memory
! 09387c343cf665a54b81117127a6a648  libstdc++-v3/include/std/memory_resource
! 44c7dab7177844460c0d95f3b2c6d2dd  libstdc++-v3/include/std/mutex
! 0f98490a23012b0d475a6438918e05e8  libstdc++-v3/include/std/numbers
! c5ef47ada66192553fd8a6a03625d70e  libstdc++-v3/include/std/numeric
! c26f8f7af799f7f3a2830f1689b12757  libstdc++-v3/include/std/optional
! efcc2fdc15a99e21f2c4a97ee2924fce  libstdc++-v3/include/std/ostream
! 61b007baae14c52b13732aad82286815  libstdc++-v3/include/std/queue
! aad0b8c05c77db48c9ae1eddb9e0380d  libstdc++-v3/include/std/random
! 3064407113806c9e18b6e82819e298e2  libstdc++-v3/include/std/ranges
! 338a84095148e5196b391a7fdf949691  libstdc++-v3/include/std/ratio
! 52827264570402b0bccc80a3adb4bf59  libstdc++-v3/include/std/regex
! 7aa445d626fba3c86cea701c7db4db7c  libstdc++-v3/include/std/scoped_allocator
! 7ea9ab55b16bf212329fa852a89c8167  libstdc++-v3/include/std/semaphore
! 742567ce5079b72e691794c61cfb2af3  libstdc++-v3/include/std/set
! 91a9a4fa6c63c846408b4454d2c8f4b2  libstdc++-v3/include/std/shared_mutex
! e0c9f8627e498a77f31adb76a452b0b1  libstdc++-v3/include/std/source_location
! 357a7b4c1da8f56bcf0a40d239d6ecf5  libstdc++-v3/include/std/span
! 906b5423836b8b95366b23366f24b8c5  libstdc++-v3/include/std/sstream
! ed0009b64dfff30999a2182d0189ee7f  libstdc++-v3/include/std/stack
! 9d66312aa64c804c24a1e83155f4a200  libstdc++-v3/include/std/stdexcept
! 34c6da09a169cc099e8108f6af279a65  libstdc++-v3/include/std/stop_token
! 05c6cffed4833f117e386206af8f878e  libstdc++-v3/include/std/streambuf
! 8eccd3adbdc9f406ec98e5483acf9c01  libstdc++-v3/include/std/string
! 0a773ecf42b54e0084752df53c9771e9  libstdc++-v3/include/std/string_view
! 675010f60f0d3d515817ed986722981c  libstdc++-v3/include/std/syncstream
! 58f6c2eb152b2f7a05834ac1c4ebb1ed  libstdc++-v3/include/std/system_error
! 83a8f781edae2a22c67cf12b96568a03  libstdc++-v3/include/std/thread
! 987d70e3d16382cfa8a07dca96afab5e  libstdc++-v3/include/std/tuple
! c35bd8e7b58e4d200f7129541933ae7b  libstdc++-v3/include/std/type_traits
! 330d42fb74c13496f374d6b2cb3cbf7c  libstdc++-v3/include/std/typeindex
! 16ace88be8613b378b5fffc1958351a0  libstdc++-v3/include/std/unordered_map
! aeb2a92a3c9a2263f24568c8ece52a4c  libstdc++-v3/include/std/unordered_set
! d9438feb050100a59ccb2bd7e22fb8f6  libstdc++-v3/include/std/utility
! 54baaf5124374152e58dec3ec0861669  libstdc++-v3/include/std/valarray
! 93b603e7d4c481cb8e46ce989dab4dcf  libstdc++-v3/include/std/variant
! b2ab68817368c3805d64bb4978a6129d  libstdc++-v3/include/std/vector
! 6a729ab766e821a330853c5fd48bcca5  libstdc++-v3/include/std/version
! 7a3df4ee77f8051d9c8970f892588ef6  libstdc++-v3/include/tr1/array
! 79c7b722cf8e5135a96d12e1a660393b  libstdc++-v3/include/tr1/bessel_function.tcc
! 814be185cac0443c6e0933c450d9f912  libstdc++-v3/include/tr1/beta_function.tcc
! 9c043b3653c3325638cf3588fec7ece0  libstdc++-v3/include/tr1/ccomplex
! d3c3b6bac4b3d367e865b63aa2410ab6  libstdc++-v3/include/tr1/cctype
! ac405d7ea684a51838b86fda743e5aea  libstdc++-v3/include/tr1/cfenv
! 7c2b8ee6774495fde760c5c255355e08  libstdc++-v3/include/tr1/cfloat
! 33c94fadd343e910c935759b1f4c8f16  libstdc++-v3/include/tr1/cinttypes
! 320bcecaecad766ea012b7c6d19fc649  libstdc++-v3/include/tr1/climits
! ea3db4ebd386418c9efa0eb41f11cc0f  libstdc++-v3/include/tr1/cmath
! 00a6830845558bae2accc806f804731d  libstdc++-v3/include/tr1/complex
! 15a8c16694856707f076e6b4272257cb  libstdc++-v3/include/tr1/complex.h
! 28e9ba2bf6799d252c8ebdb24c2aff57  libstdc++-v3/include/tr1/cstdarg
! 845bbc8e3530d971f5e3163e7d822e98  libstdc++-v3/include/tr1/cstdbool
! a20fff5d7a096234f2043115d2fa71bc  libstdc++-v3/include/tr1/cstdint
! 4a6f5ebb14bc5ed0f4abc096ee1cf637  libstdc++-v3/include/tr1/cstdio
! ece87efbf632dc59fd8ea0b0a41dc202  libstdc++-v3/include/tr1/cstdlib
! 7db5e2872c87105112cb3829d666aede  libstdc++-v3/include/tr1/ctgmath
! 2581a315b1b5d125015ebc851302a726  libstdc++-v3/include/tr1/ctime
! 52e5edff6c3dad597cf93d8f39f24689  libstdc++-v3/include/tr1/ctype.h
! eb78e60638d9d09e2ad25fff2429d32e  libstdc++-v3/include/tr1/cwchar
! 04ebdcfc7a287e51e350188b0f6bbd78  libstdc++-v3/include/tr1/cwctype
! 9e16044d0ab10fb07690e646dcc6e01c  libstdc++-v3/include/tr1/ell_integral.tcc
! c2f619449b4893754a47a8879f5e9d16  libstdc++-v3/include/tr1/exp_integral.tcc
! c61ad09b738c3f7c469601f0d590ef9c  libstdc++-v3/include/tr1/fenv.h
! 4d54f4a2f728d5173ab2d9cc8b58fd1d  libstdc++-v3/include/tr1/float.h
! d07b9fd6078103f8da38a8d5ddc36e0e  libstdc++-v3/include/tr1/functional
! dbacb7c680c2cb72e6f1ffe632071bf7  libstdc++-v3/include/tr1/functional_hash.h
! e44cb108c0e4132dcc1aafc07abda044  libstdc++-v3/include/tr1/gamma.tcc
! 735207aced10426f7a63827db25346e9  libstdc++-v3/include/tr1/hashtable.h
! 1ba5fb2b2879e531b67e73884f1cf5a3  libstdc++-v3/include/tr1/hashtable_policy.h
! 9f8d8afd257c9238b3d56c40ebc6b78a  libstdc++-v3/include/tr1/hypergeometric.tcc
! b01c64ac85c3393fdfdc8476c3fa870b  libstdc++-v3/include/tr1/inttypes.h
! 33b21c370ed57f340e16b5f2759a310c  libstdc++-v3/include/tr1/legendre_function.tcc
! 5dbae440d3a1cadc9dc051750cb3baa0  libstdc++-v3/include/tr1/limits.h
! c731430cd17e9030ad549442f9f1d2d6  libstdc++-v3/include/tr1/math.h
! 8cda6a4a431de078da0a2e32d3e57e79  libstdc++-v3/include/tr1/memory
! f3bf2b60d401c5dde94dc8dcfc2100c1  libstdc++-v3/include/tr1/modified_bessel_func.tcc
! eb7fc33fd9e10d92696e565e2750c8fd  libstdc++-v3/include/tr1/poly_hermite.tcc
! 3931da06bfda41bb8ba16da3ba08b6bb  libstdc++-v3/include/tr1/poly_laguerre.tcc
! 714c6eabff1433666fa863172a30bf76  libstdc++-v3/include/tr1/random
! fab5f07b0f81755cf865053acb22bc4a  libstdc++-v3/include/tr1/random.h
! a9ffb1a996dd8625597e6c5bdde3b138  libstdc++-v3/include/tr1/random.tcc
! 55ae846c7d6dde6c50ebd2828bbf2d85  libstdc++-v3/include/tr1/regex
! 9de6e0514ae7563cfd9feecb58cfb627  libstdc++-v3/include/tr1/riemann_zeta.tcc
! b0fd9be2b3d41411acd55d8b102bd5a7  libstdc++-v3/include/tr1/shared_ptr.h
! 047869d2b4c577f4d413e00d4358c9b7  libstdc++-v3/include/tr1/special_function_util.h
! c8e598bceada47de7abae538c8db7d28  libstdc++-v3/include/tr1/stdarg.h
! 6aeed2ef9252c548d1bbb2a56e29c0f6  libstdc++-v3/include/tr1/stdbool.h
! 2aad58d794765ed990d32441691efe03  libstdc++-v3/include/tr1/stdint.h
! e385db7228cb54e30952ca4807167c33  libstdc++-v3/include/tr1/stdio.h
! 7616e777a00c9f421bad734f16daa35e  libstdc++-v3/include/tr1/stdlib.h
! 0cceda6185ac7bd62a4aba8371da3f7c  libstdc++-v3/include/tr1/tgmath.h
! cc426c89f657c59de43f7199aebc8ed2  libstdc++-v3/include/tr1/tuple
! ebc4cb09fa274d497ca333beb245ce63  libstdc++-v3/include/tr1/type_traits
! ced2e710e86bb56241f9f70e3608bf65  libstdc++-v3/include/tr1/unordered_map
! fd68a21fa3521f8301740b7740dccd2d  libstdc++-v3/include/tr1/unordered_map.h
! 17519ea92652f3bf96e8a691f6e8678a  libstdc++-v3/include/tr1/unordered_set
! 612fe16b974f7df0582bd10351eca6d6  libstdc++-v3/include/tr1/unordered_set.h
! bfb645994f10ceefcde0efdb634016ce  libstdc++-v3/include/tr1/utility
! 1653e12e4647b197f17abfb5fea8d7af  libstdc++-v3/include/tr1/wchar.h
! 1899d850ec32836322e010e0dcafb275  libstdc++-v3/include/tr1/wctype.h
! b89fa4c41849c6025ae19ba92b4a57ef  libstdc++-v3/include/tr2/bool_set
! a9b3b2678eaae70252b2a5a2246fcf27  libstdc++-v3/include/tr2/bool_set.tcc
! c89b275a194b7370f322c7128b243090  libstdc++-v3/include/tr2/dynamic_bitset
! cc2a0b62bf04cad951e0838fd4e29e3d  libstdc++-v3/include/tr2/dynamic_bitset.tcc
! 95f8128d43e4fa453bad55b8db6307bc  libstdc++-v3/include/tr2/ratio
! cb6ce365cf504ab2292795d611943c6e  libstdc++-v3/include/tr2/type_traits
! 5559362627331d7a7be957332eba7b9f  libstdc++-v3/libsupc++/Makefile.am
! 0e698fb2d933bed1c0fd85b86464a335  libstdc++-v3/libsupc++/Makefile.in
! b992d92f8e27c5837ac0932ebba6e786  libstdc++-v3/libsupc++/array_type_info.cc
! d773d7947ef6fa9dba87bc66d1556985  libstdc++-v3/libsupc++/atexit_arm.cc
! bcd2caa5d8bd8939dccd73056d9b9954  libstdc++-v3/libsupc++/atexit_thread.cc
! 27cb6b28cf79bb48f22b024c36a5f1e4  libstdc++-v3/libsupc++/atomic_lockfree_defines.h
! eb2bc7d97ecdf010f9361939f387092c  libstdc++-v3/libsupc++/bad_alloc.cc
! 2975254953042c9edb3c7722d5e30c91  libstdc++-v3/libsupc++/bad_array_length.cc
! 5096b0ba3cebdfffe51cada55dafb110  libstdc++-v3/libsupc++/bad_array_new.cc
! 8aa8dd4846aee0a32c74838ffe1a9b18  libstdc++-v3/libsupc++/bad_cast.cc
! 61fcac9976ceb3ce4d31eda2e568a7c6  libstdc++-v3/libsupc++/bad_typeid.cc
! 3192b4cce5548a08f659876a1332baa5  libstdc++-v3/libsupc++/class_type_info.cc
! 14e73bd8bc09c4dc3795d6fc07dbd662  libstdc++-v3/libsupc++/compare
! 782af6cf5da6b4aed7e6e655947c10c7  libstdc++-v3/libsupc++/cxxabi.h
! 134a2a7d6f57e9fed9432b11cf8bee41  libstdc++-v3/libsupc++/cxxabi_forced.h
! 0969b2aced8d0038ae64557f408773c9  libstdc++-v3/libsupc++/cxxabi_init_exception.h
! 9d7d9b6720047e04b62c81d60c19ab9f  libstdc++-v3/libsupc++/del_op.cc
! 71523ef966b19773108b8523a4bfd5e4  libstdc++-v3/libsupc++/del_opa.cc
! 6533e4a8be6bf3ad145990dcfcfa8a37  libstdc++-v3/libsupc++/del_opant.cc
! bc68a1f53f0ad3b3834933ceee2e252e  libstdc++-v3/libsupc++/del_opnt.cc
! 9fe62143520ee396c14bac9823f65e2a  libstdc++-v3/libsupc++/del_ops.cc
! 49b60af0ac3142e42430b239fd6a189d  libstdc++-v3/libsupc++/del_opsa.cc
! 30f647e60d5a21c572c21ea36154d671  libstdc++-v3/libsupc++/del_opv.cc
! 7749ae8e05a18802e8520da741df610b  libstdc++-v3/libsupc++/del_opva.cc
! 182fa330491b47e2b3004b2ae7cfac20  libstdc++-v3/libsupc++/del_opvant.cc
! a447e9889ed49c1a3e80bad3e04c0802  libstdc++-v3/libsupc++/del_opvnt.cc
! 5271762160e5a0b167d83294f21848e8  libstdc++-v3/libsupc++/del_opvs.cc
! 4f464f88bb1716c20b773822180ecca3  libstdc++-v3/libsupc++/del_opvsa.cc
! 49e6c7cbd8d13777d87f30a8ffd426bf  libstdc++-v3/libsupc++/dyncast.cc
! a02800140b28e1ad50fadb5273befc01  libstdc++-v3/libsupc++/eh_alloc.cc
! 00696f9d36a2ece784510c64a60ac5c1  libstdc++-v3/libsupc++/eh_arm.cc
! 4526fec3a911b9a1c8def297f051f9d9  libstdc++-v3/libsupc++/eh_atomics.h
! c020134520aeb4e1dbc6a22bfecc07fa  libstdc++-v3/libsupc++/eh_aux_runtime.cc
! 9b17fb096c41315af5a885974f69e1e9  libstdc++-v3/libsupc++/eh_call.cc
! 1f1b8c2bf4762b1428918c808f5ce011  libstdc++-v3/libsupc++/eh_catch.cc
! eb85b2d059eebd4bab2ddebf20f51fdd  libstdc++-v3/libsupc++/eh_exception.cc
! 7da469e1e44b59b30954cc615228a501  libstdc++-v3/libsupc++/eh_globals.cc
! fd215243989a8a4cd896f2dc9385a832  libstdc++-v3/libsupc++/eh_personality.cc
! 8a870bd6d2382f7592dc36a89d536aa8  libstdc++-v3/libsupc++/eh_ptr.cc
! 4402b39e94bf04e4d0f6205b518acdb4  libstdc++-v3/libsupc++/eh_term_handler.cc
! a859026b177a6ae9130ba67464cae66f  libstdc++-v3/libsupc++/eh_term_handler.h
! eeeaade1c899ee5f8ec1cb80459af466  libstdc++-v3/libsupc++/eh_terminate.cc
! 690ffcf5c0a0567b62bdd38797f9f6e0  libstdc++-v3/libsupc++/eh_throw.cc
! 2311b0aa098d49a979e28df504a3c8ce  libstdc++-v3/libsupc++/eh_tm.cc
! e419810c256cf4e3b9555eda630ea0ba  libstdc++-v3/libsupc++/eh_type.cc
! e5d56ce300f615cb191a91f63d15da7e  libstdc++-v3/libsupc++/eh_unex_handler.cc
! 4f2380b784e1ea9dad3f41d28513a543  libstdc++-v3/libsupc++/enum_type_info.cc
! 28e35b82a082f9320b2b53f7b14f339d  libstdc++-v3/libsupc++/exception
! 7ba24911a71cad798b8001a1fbee63d9  libstdc++-v3/libsupc++/exception.h
! 4f705d1748ddbd2ef4f9b4b7f7b30501  libstdc++-v3/libsupc++/exception_defines.h
! ed433011c81450fc2dabd9aa8a29a038  libstdc++-v3/libsupc++/exception_ptr.h
! 4b2020eec5a9266f030bc8e0a6b4b574  libstdc++-v3/libsupc++/function_type_info.cc
! f4c887793b010205b07a92b68684bfd8  libstdc++-v3/libsupc++/fundamental_type_info.cc
! 4eb0c7b938eeb3c75bcd6de3523f9589  libstdc++-v3/libsupc++/guard.cc
! 34f51c3e056cb362fbe48756a83264ef  libstdc++-v3/libsupc++/guard_error.cc
! a8f4b35fda7f213f31eb9a60d469ed5c  libstdc++-v3/libsupc++/hash_bytes.cc
! 8527b7e51734b3e98d31b07214213f4d  libstdc++-v3/libsupc++/hash_bytes.h
! 57fb932fc6d7fbe06dbbbaeba2e79e48  libstdc++-v3/libsupc++/initializer_list
! bec60cfb10a615ed3fb38cd41e15dde2  libstdc++-v3/libsupc++/nested_exception.cc
! 783152727522499ab2d59c9b7bcd3913  libstdc++-v3/libsupc++/nested_exception.h
! 5bf31ff50dc9c1389f350e48b92a6d19  libstdc++-v3/libsupc++/new
! 4a160d4c275c619668643c13998c3ae3  libstdc++-v3/libsupc++/new_handler.cc
! 95974f6dab8b4a9606bbbde0c079f0f3  libstdc++-v3/libsupc++/new_op.cc
! 3281d05c8f0b45f9e2f3c5a293027ec4  libstdc++-v3/libsupc++/new_opa.cc
! 00ba98d70ab72ac86de363238367712f  libstdc++-v3/libsupc++/new_opant.cc
! 7cf3f37d12584577c5edbc707e27ff74  libstdc++-v3/libsupc++/new_opnt.cc
! 79d65e52b01935d8953bc0de0c578f5b  libstdc++-v3/libsupc++/new_opv.cc
! a7f967ba52db1f70e1e6f8f98bb1042a  libstdc++-v3/libsupc++/new_opva.cc
! 1fe559ec50af74ab9da1aa7c5641e768  libstdc++-v3/libsupc++/new_opvant.cc
! 7633efc7a426a4954592f04d3ff7a644  libstdc++-v3/libsupc++/new_opvnt.cc
! 8752b9bcf738617bcb22a0c90925d082  libstdc++-v3/libsupc++/pbase_type_info.cc
! 4213855418b7bfcf910fd8b2a35061bc  libstdc++-v3/libsupc++/pmem_type_info.cc
! 55352e9434a3e5802a1cd1ccd3dd29bf  libstdc++-v3/libsupc++/pointer_type_info.cc
! 8916af2aaeb71abbe2022ddea75fedf3  libstdc++-v3/libsupc++/pure.cc
! 9e204e4c507b9cd4d3350d9cabcdb05d  libstdc++-v3/libsupc++/si_class_type_info.cc
! 49503fb5737ae6037800c7c08bc84912  libstdc++-v3/libsupc++/tinfo.cc
! b4c5eff9da2552a0441b442f8a56ecbc  libstdc++-v3/libsupc++/tinfo.h
! 40f16bf0b3beb5b31ac47a392ea517a6  libstdc++-v3/libsupc++/tinfo2.cc
! f97b6e79e4ebb4f5c69e54dbe29a3aed  libstdc++-v3/libsupc++/typeinfo
! 77e0a5871873d95f3233bf411845ce60  libstdc++-v3/libsupc++/unwind-cxx.h
! 429a9876b1a1a9b8bb8b7c39b269b98d  libstdc++-v3/libsupc++/vec.cc
! 33cbbc69d8e4a900ec9ed9ffc2a2c2bb  libstdc++-v3/libsupc++/vmi_class_type_info.cc
! ba2e29761befd05a6d89233e99f8346b  libstdc++-v3/libsupc++/vterminate.cc
! 366a883e72b3a7a3b78bd72abf7487e4  libstdc++-v3/libsupc++/vtv_stubs.cc
  6e1809e9ac8f237378ab1ebc1b99fb6a  libstdc++-v3/linkage.m4
! 5dad9b49f3f8615c2ea65e49d80a4efd  libstdc++-v3/po/Makefile.am
! 5f0ce98f30fb70b22b691abb9ef3c549  libstdc++-v3/po/Makefile.in
! a8b9b273f76ae07d9b348f0a5d810e19  libstdc++-v3/po/POTFILES.in
! 3e03898abf86f67331e09c1ed2c75cc2  libstdc++-v3/po/de.po
! 2863b152e6ea006828d931b909e65f0f  libstdc++-v3/po/fr.po
! 2c7616acffe8edae7935e283e7270ed0  libstdc++-v3/po/libstdc++.pot
! 4946e4d28c388353dc776bcae8af08f0  libstdc++-v3/po/string_literals.cc
! b21af20d19c1de40ba9cd41e413f6562  libstdc++-v3/python/Makefile.am
! 195cb449d45c19cb2ae56843d1bb8002  libstdc++-v3/python/Makefile.in
! ef60735f8655321222e620486f219e8d  libstdc++-v3/python/hook.in
  68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/python/libstdcxx/__init__.py
! 484cb11df73bf42227946114a89d29b5  libstdc++-v3/python/libstdcxx/v6/__init__.py
! 5c88121f75cb36f7f97e43dcedeace5c  libstdc++-v3/python/libstdcxx/v6/printers.py
! 9e215f5fde222b3fe8e836e3183e4404  libstdc++-v3/python/libstdcxx/v6/xmethods.py
  cdac7363b91e7d57b85f7b560f62f033  libstdc++-v3/scripts/check_compile
  a4c1d51bba293cee2307fc7f9dd090f7  libstdc++-v3/scripts/check_performance
  128d0fbc24e1d43d9ff93d14bd521aa6  libstdc++-v3/scripts/check_simd
  40f8ee10a4683f6c7f555f9450fcaa12  libstdc++-v3/scripts/create_testsuite_files
! d44f1280b2ae0e585a833bac86b35dc1  libstdc++-v3/scripts/extract_symvers.in
! cb00fad72fef0f33c2f74614710e6329  libstdc++-v3/scripts/extract_symvers.pl
  755b77f929d926f07f3257df2e802f2e  libstdc++-v3/scripts/gen_bind_includers.pl
  85378fa65bc3dc46ffe255374b304560  libstdc++-v3/scripts/gen_includers.pl
  f1a84a17158780aaa37927191db4463a  libstdc++-v3/scripts/gen_includers2.pl
! e8e7773bc629a008b2813ee507a0dab6  libstdc++-v3/scripts/make_exports.pl
  80b6ff44b325c6b6d113435d8eea4b76  libstdc++-v3/scripts/make_graph.py
! f614496940b16d8f5c8685d91a47903e  libstdc++-v3/scripts/run_doxygen
! 7579350b0ac0412cb42e9c354485ebd9  libstdc++-v3/scripts/testsuite_flags.in
! 90d9f3e1d4379ef148eff766138db885  libstdc++-v3/src/Makefile.am
! 3d242c79bb2931ab9442d67f04ec5292  libstdc++-v3/src/Makefile.in
! 000cfcfbee87b2cd6e095ada940b97be  libstdc++-v3/src/c++11/Makefile.am
! d7fac9138ce1d66a3a3bcb97a36bd4f7  libstdc++-v3/src/c++11/Makefile.in
! fdce91d6f0e0cb276b62993742bb7146  libstdc++-v3/src/c++11/chrono.cc
! 7ec3713834b6a0a9356d439a66579099  libstdc++-v3/src/c++11/codecvt.cc
! 2fbc29206c3ec26f5a499d1d8b01ea01  libstdc++-v3/src/c++11/compatibility-atomic-c++0x.cc
! 20622ccf2bba591552b35f31986affd8  libstdc++-v3/src/c++11/compatibility-c++0x.cc
! a9122c87521f59de28f5cb332637e5fd  libstdc++-v3/src/c++11/compatibility-chrono.cc
! 58d704fbd5d7285885ddbcf519c39b85  libstdc++-v3/src/c++11/compatibility-condvar.cc
! 13d8eb617ee09a49ddae147ced1116e1  libstdc++-v3/src/c++11/compatibility-ldbl-alt128-cxx11.cc
! 2c0c2b7d24e35933118507d044750127  libstdc++-v3/src/c++11/compatibility-ldbl-alt128.cc
! 2684f76d9a220ab6d41add8127f6ade0  libstdc++-v3/src/c++11/compatibility-ldbl-facets-aliases.h
! 70b5162172c80d0b9e539a8376d23cdf  libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc
! 67763c2722b1fecba6026d3a5e279186  libstdc++-v3/src/c++11/condition_variable.cc
! a4dbc4289865dcd160d4c3920de33abf  libstdc++-v3/src/c++11/cow-fstream-inst.cc
! 14b931173008b978537627c1155d8b5d  libstdc++-v3/src/c++11/cow-locale_init.cc
! ecef4303b2fe8614abdcdee8f5a97784  libstdc++-v3/src/c++11/cow-shim_facets.cc
! f0feb9b595b11812996f4df508fff346  libstdc++-v3/src/c++11/cow-sstream-inst.cc
! e03c620462e68a76e66e6041ec102c70  libstdc++-v3/src/c++11/cow-stdexcept.cc
! bcc8422f4892401dc0259597750a6103  libstdc++-v3/src/c++11/cow-string-inst.cc
! 8bb4ac2f38b17b2842534afee19f5710  libstdc++-v3/src/c++11/cow-string-io-inst.cc
! b1e311a760b7fc9f79f4c3e116d870ad  libstdc++-v3/src/c++11/cow-wstring-inst.cc
! 9c2da2f0e682809a7efdecfc6fa49934  libstdc++-v3/src/c++11/cow-wstring-io-inst.cc
! 30ddd0f9c87af440dc416afc40d57f44  libstdc++-v3/src/c++11/ctype.cc
! d63ad10cee99effce602ecfd86f2c6b3  libstdc++-v3/src/c++11/cxx11-hash_tr1.cc
! 333a9eec225a90ac835319896b494725  libstdc++-v3/src/c++11/cxx11-ios_failure.cc
! 3e4964b37cb4e0a7a3dabf39ce83038d  libstdc++-v3/src/c++11/cxx11-locale-inst.cc
! 83fbc2f04af1752e626ce5c04fc41021  libstdc++-v3/src/c++11/cxx11-shim_facets.cc
! 547060ebce06c57f1d36a3ebb230f6d1  libstdc++-v3/src/c++11/cxx11-stdexcept.cc
! e81f604b9243aa5f90328c1172c9e9bd  libstdc++-v3/src/c++11/cxx11-wlocale-inst.cc
! b17f6f7ac95e790c63dc4b307011484f  libstdc++-v3/src/c++11/debug.cc
! 928aeeb60a85a111ed4a0a6534151377  libstdc++-v3/src/c++11/ext11-inst.cc
! 0093bfa20464b3d436abcdc6d62059ce  libstdc++-v3/src/c++11/fstream-inst.cc
! a3e4eadf15f208dba5ae3f1a63d51220  libstdc++-v3/src/c++11/functexcept.cc
! 9a3c407f47856f2156a033d0c5ed9830  libstdc++-v3/src/c++11/functional.cc
! 03c63e35d2bfb3354ac527797632baf0  libstdc++-v3/src/c++11/futex.cc
! a779e1496a831a9e58dbfe0c2393a9e3  libstdc++-v3/src/c++11/future.cc
! a4701f7f549c0b1fd6c50e2e2b9cc9ed  libstdc++-v3/src/c++11/hash_c++0x.cc
! 7637f776a1c1ed11f452aa84d3d64491  libstdc++-v3/src/c++11/hashtable_c++0x.cc
! 21ef2783c98363b3c7027ae99e9a9471  libstdc++-v3/src/c++11/ios-inst.cc
! 1ab83951e761f829b2a568219ad1df26  libstdc++-v3/src/c++11/ios.cc
! 047218ea85f430a4c8b3d6ab04b8045c  libstdc++-v3/src/c++11/iostream-inst.cc
! e50f33dad04bda8c47dfabc758779fde  libstdc++-v3/src/c++11/istream-inst.cc
! 10ea1661070457646890d07d1d32fc82  libstdc++-v3/src/c++11/limits.cc
! f77f8a7ae8553f284cf026a0c69d2cd1  libstdc++-v3/src/c++11/locale-inst-monetary.h
! 38f8318be41e2263c9bf6879c635764d  libstdc++-v3/src/c++11/locale-inst-numeric.h
! a4ad998b432d02bb72aaf1d87d0acd8b  libstdc++-v3/src/c++11/locale-inst.cc
! 0e6e420840dd0745776976b2863c3215  libstdc++-v3/src/c++11/mutex.cc
! 4a9c69794963372e7cfe7a89a3c36fa5  libstdc++-v3/src/c++11/mutex_pool.h
! 6949bb94e5a7111191195d7c1509f2a1  libstdc++-v3/src/c++11/ostream-inst.cc
! 92279da6a43eb47f7355581a4a2a7631  libstdc++-v3/src/c++11/placeholders.cc
! 22dcc0914aa84993903fc88abdcf0df9  libstdc++-v3/src/c++11/random.cc
! b3f5a0e85916e3062a0f408f5c588e05  libstdc++-v3/src/c++11/regex.cc
! 6f5ac010c707f1b6b80de53cf1266a6b  libstdc++-v3/src/c++11/shared_ptr.cc
! a058c0b6cc7d0111a3e534392191bf7d  libstdc++-v3/src/c++11/snprintf_lite.cc
! 3a8d202675f9b8edcb4bf8625ea7273c  libstdc++-v3/src/c++11/sso_string.cc
! 7a0c80b802957763b9c5234927b32103  libstdc++-v3/src/c++11/sstream-inst.cc
! f719f4c27c082199cb4cc7bd224b1235  libstdc++-v3/src/c++11/streambuf-inst.cc
! 1956880dcf7cf135e21c20c27366d969  libstdc++-v3/src/c++11/string-inst.cc
! 918dca1dc0f88fdd6ea72120d506122a  libstdc++-v3/src/c++11/string-io-inst.cc
! 76ebfb5cb77b5f40609034aa4e6346f4  libstdc++-v3/src/c++11/system_error.cc
! 9381c68fea89c0b9811704782c8014d3  libstdc++-v3/src/c++11/thread.cc
! d0b105c1c7ce2890dc9ff2748affabbf  libstdc++-v3/src/c++11/wlocale-inst.cc
! dcfd2322c93dd48b11088455fc3beba2  libstdc++-v3/src/c++11/wstring-inst.cc
! 91c011938cc99078b2f3730c38065003  libstdc++-v3/src/c++11/wstring-io-inst.cc
! 5d7c052999afe69c983b4cae77355088  libstdc++-v3/src/c++17/Makefile.am
! 3f8a9f90ccd00d82f0c79c21d512281c  libstdc++-v3/src/c++17/Makefile.in
! 58788f91c44721baed47f7b56e0b9025  libstdc++-v3/src/c++17/cow-fs_dir.cc
! 52c93781a1a27322c5ccdf462d3b199d  libstdc++-v3/src/c++17/cow-fs_ops.cc
! 0732bbfdd57bfb7a0d6e33b50a9d479d  libstdc++-v3/src/c++17/cow-fs_path.cc
! fe48c009c5684613dd310097f544a115  libstdc++-v3/src/c++17/cow-string-inst.cc
  21e22ff1ddec6a91c7b379d6f6398649  libstdc++-v3/src/c++17/default_resource.h
! 242d9497f8938d611ecbc446bc541a5c  libstdc++-v3/src/c++17/floating_from_chars.cc
! 6c16689b0ed0520761730e22e879f4d8  libstdc++-v3/src/c++17/floating_to_chars.cc
! 85f8c336c16b7a6c978470d355cf20f1  libstdc++-v3/src/c++17/fs_dir.cc
! 7381544274fe7860efd69083895166df  libstdc++-v3/src/c++17/fs_ops.cc
! 8e13c63ce5c5f6b76072b2c38173c975  libstdc++-v3/src/c++17/fs_path.cc
! 875017e6a7576d4589b31911090cd940  libstdc++-v3/src/c++17/memory_resource.cc
! 6d9c0bef465f18c79af1f9a7af80b525  libstdc++-v3/src/c++17/ostream-inst.cc
  f7696e2f5518e5e873ced4beacb8d107  libstdc++-v3/src/c++17/ryu/LOCAL_PATCHES
! 47f52d4af05ab513a6a1ab62c5fdc086  libstdc++-v3/src/c++17/ryu/MERGE
  5c512389f4cbe0ea37ce2a8da0f070d6  libstdc++-v3/src/c++17/ryu/common.h
  68d17d3946647c70092348da5b4d2150  libstdc++-v3/src/c++17/ryu/d2fixed.c
  9a0ed5eccd5099079586be75b34d2936  libstdc++-v3/src/c++17/ryu/d2fixed_full_table.h
  0619e34c1de264dce5cbbe615f54e8e0  libstdc++-v3/src/c++17/ryu/d2s.c
  35c6da63cdf032dc7d6630d3a54ab8e7  libstdc++-v3/src/c++17/ryu/d2s_full_table.h
! e0d8ea3fabad3c5ae596aaaea19e35c4  libstdc++-v3/src/c++17/ryu/d2s_intrinsics.h
  ae01717fb9bc756d7dab7e93b33bb6dc  libstdc++-v3/src/c++17/ryu/digit_table.h
  cdfce2fa1d76af09cfdf0989501826ca  libstdc++-v3/src/c++17/ryu/f2s.c
  3c7632b8c46bbe9bb1c1cfad1b228818  libstdc++-v3/src/c++17/ryu/f2s_intrinsics.h
  74bc36f5cffd7626c78090061e4416a9  libstdc++-v3/src/c++17/ryu/generic_128.c
  fbb127f006c65ae37d591c627cc6235c  libstdc++-v3/src/c++17/ryu/generic_128.h
  85b9d2e407dc7113a97234b2c23e96dc  libstdc++-v3/src/c++17/ryu/ryu_generic_128.h
! 809d9cbbb4da2d3c37ae554cfe604cd3  libstdc++-v3/src/c++17/string-inst.cc
! 82231ef77687529627b4a19e5ba192a7  libstdc++-v3/src/c++17/uint128_t.h
! ac15faa3fb83593da9575905b1478902  libstdc++-v3/src/c++20/Makefile.am
! 94388664bad26272c36c8b4a277d2214  libstdc++-v3/src/c++20/Makefile.in
! edbcebd86d4459a054bf7300f4eb0860  libstdc++-v3/src/c++20/sstream-inst.cc
! 6802c325a00d0f72a28087f0e515b2cd  libstdc++-v3/src/c++98/Makefile.am
! 443653488d884dcd6503d401769cf71f  libstdc++-v3/src/c++98/Makefile.in
! 8c7f00d8db3289676db19dd406fdf1dd  libstdc++-v3/src/c++98/allocator-inst.cc
! 6ac27832df1381d70d82bed7d7147a11  libstdc++-v3/src/c++98/bitmap_allocator.cc
! 3366d53181b7628deb171706a52c0f13  libstdc++-v3/src/c++98/codecvt.cc
! 01c49a1a154bb05ac14b5d4a1e8571f9  libstdc++-v3/src/c++98/compatibility-debug_list-2.cc
! 195fda8daf4ea2046958325d2b345dc6  libstdc++-v3/src/c++98/compatibility-debug_list.cc
! e1f42955277b60bcd0175a0240d10290  libstdc++-v3/src/c++98/compatibility-ldbl.cc
! a87a7ad03820628310bb3cf663572368  libstdc++-v3/src/c++98/compatibility.cc
! 4139a07cbde17ce9977ebf5b30210b91  libstdc++-v3/src/c++98/complex_io.cc
! 12299f694abae0251fc2e70a053b07f3  libstdc++-v3/src/c++98/concept-inst.cc
! ddf43df3bd1ac307bc166565edfe3e12  libstdc++-v3/src/c++98/cow-istream-string.cc
! 88fbd02963e5450bb25ea282691900bd  libstdc++-v3/src/c++98/ext-inst.cc
! a8f35fa3e12ca074ba9803583169fe43  libstdc++-v3/src/c++98/globals_io.cc
! 7b1520b86e323fb9e9df76e28e2a61f6  libstdc++-v3/src/c++98/hash-long-double-tr1-aux.cc
! 191bb41590cb3e785eca366b2c4100b7  libstdc++-v3/src/c++98/hash_tr1.cc
! 048738a7e2444c5ab0e625ee46f188b9  libstdc++-v3/src/c++98/hashtable_tr1.cc
! d346a1050733dead9aa51be491ce819e  libstdc++-v3/src/c++98/ios_failure.cc
! d9dfe6c2bfa6c05b985911940d3cdb13  libstdc++-v3/src/c++98/ios_init.cc
! 05bcfb1e7fc816e411c7857e74da7aae  libstdc++-v3/src/c++98/ios_locale.cc
! e06fc71ef77a33e6415916cdca48dd83  libstdc++-v3/src/c++98/istream-string.cc
! b3e2e80a85e420cd6926e6fad3bab64e  libstdc++-v3/src/c++98/istream.cc
! 62b4de9e61ee72d1a936f2667174c4de  libstdc++-v3/src/c++98/list-aux-2.cc
! 28efaaf3e77eda8e5f02019edcbc7bae  libstdc++-v3/src/c++98/list-aux.cc
! a80c86ad1d57170d1afbe8f4d5e48eb6  libstdc++-v3/src/c++98/list.cc
! 0fd9eb2475138ec1f3ac9e27fa87fa11  libstdc++-v3/src/c++98/list_associated-2.cc
! 0cc33eaa1f68a7a738b5e69ab3c52aa8  libstdc++-v3/src/c++98/list_associated.cc
! 565eedf78ba4a333f364f43ee00b38cd  libstdc++-v3/src/c++98/locale.cc
! 4ccc39c4a18223534265abb85deb39ee  libstdc++-v3/src/c++98/locale_facets.cc
! ca7f4cc6cfae069a385712380c108be7  libstdc++-v3/src/c++98/locale_init.cc
! faadb0350388a0e095ddd63d283a1a42  libstdc++-v3/src/c++98/localename.cc
! f85110c16d99602f628c45e7352765c2  libstdc++-v3/src/c++98/math_stubs_float.cc
! 4c48a88afbe1084a9b79edaf6195dd52  libstdc++-v3/src/c++98/math_stubs_long_double.cc
! 82601237098cb6370fd147c0d34bd237  libstdc++-v3/src/c++98/misc-inst.cc
! a02321a13b74928e428912d1ab647c08  libstdc++-v3/src/c++98/mt_allocator.cc
! 85516d97e3e29b02a68a40ed5a2c3f90  libstdc++-v3/src/c++98/parallel_settings.cc
! 107f363f7bdea0aa7af7b5288a872732  libstdc++-v3/src/c++98/pool_allocator.cc
! d29ab284e569bbe343dddc20859c1ed9  libstdc++-v3/src/c++98/stdexcept.cc
! 0cb3406c39d1805139a8aaa7d144df17  libstdc++-v3/src/c++98/streambuf.cc
! fb15bb368e327c843383096ec55eaa00  libstdc++-v3/src/c++98/strstream.cc
! 4bf1e2e5f4db0ad68da4f34bcb15d667  libstdc++-v3/src/c++98/tree.cc
! b673220babee424d2b70a4dbda885118  libstdc++-v3/src/c++98/valarray.cc
! 46504b4bb10e4119c5d6831ad8b7b3d1  libstdc++-v3/src/filesystem/Makefile.am
! 6f56674012e49967fe0887a3dffbd67e  libstdc++-v3/src/filesystem/Makefile.in
! 0b7a43e506d04a83193b7dec27610ac1  libstdc++-v3/src/filesystem/cow-dir.cc
! d61e45b9d5e6a114646872dd2109583e  libstdc++-v3/src/filesystem/cow-ops.cc
! 1cec190567d6217eca7c91ba30fcac96  libstdc++-v3/src/filesystem/cow-path.cc
! c775a951bdee850a043193645b4b64bf  libstdc++-v3/src/filesystem/dir-common.h
! 637a51cfa86d128b5039c1da9a512c59  libstdc++-v3/src/filesystem/dir.cc
! f8ea984a816f949e86f29a00746cfeaf  libstdc++-v3/src/filesystem/ops-common.h
! 05f797c1c2984089a988357d16a253e9  libstdc++-v3/src/filesystem/ops.cc
! 35978d397a37f9c8652bddaca54e8f22  libstdc++-v3/src/filesystem/path.cc
! 4d050a72fe3bf6800e6b61c3d97b09ca  libstdc++-v3/src/shared/hashtable-aux.cc
! 269e3bac13e39e68daa7adab30401447  libstdc++-v3/testsuite/17_intro/badnames.cc
! 664bdcdc68f1dc65bafa053d9a6ac9f2  libstdc++-v3/testsuite/17_intro/freestanding.cc
  d5df5ddc3b7c5dba2e687798eaa28551  libstdc++-v3/testsuite/17_intro/headers/c++1998/103650.cc
! 92e341852c5d5b464d8c9ad3640dd9c7  libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc
! 01bb8f5cdc1f9caf4e7e44d58deb9297  libstdc++-v3/testsuite/17_intro/headers/c++1998/all.cc
! c6a7466079eb3c793145a13d89cb816c  libstdc++-v3/testsuite/17_intro/headers/c++1998/all_attributes.cc
! bd4a18481bfc51dffb0332a3b3f92585  libstdc++-v3/testsuite/17_intro/headers/c++1998/all_c++200x_compatibility.cc
! 632230dceae59f2654605508ae230044  libstdc++-v3/testsuite/17_intro/headers/c++1998/all_no_exceptions.cc
! 89d02ab5e9c016fb44174bd04b5f96d2  libstdc++-v3/testsuite/17_intro/headers/c++1998/all_no_rtti.cc
! 94f042a56a2ef7821accaba38f91de45  libstdc++-v3/testsuite/17_intro/headers/c++1998/all_pedantic_errors.cc
  b8a53b2b8da32d102d69cbedea3d2216  libstdc++-v3/testsuite/17_intro/headers/c++1998/charset.cc
! e9bf8bf07a179b66cf4fe16cd6a895c6  libstdc++-v3/testsuite/17_intro/headers/c++1998/complex.cc
! 421afccfc536742f58df78b415ec48c8  libstdc++-v3/testsuite/17_intro/headers/c++1998/operator_names.cc
! ab4f91dc1f2d1fd67d3e9a48d8f69755  libstdc++-v3/testsuite/17_intro/headers/c++1998/profile_mode.cc
! d991a9dd9b3f84358d2fe37694ba1194  libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++.cc
! 24b419747b1e18d06cbada64271f5d56  libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_assert_neg.cc
! 808d7a78d7565929bb476522605f3b8f  libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_multiple_inclusion.cc
! b613a517e0cba0f4d974b14b19a2f3a4  libstdc++-v3/testsuite/17_intro/headers/c++2011/42319.cc
! 1556033e8bc4256332da36fe9763e15e  libstdc++-v3/testsuite/17_intro/headers/c++2011/67309.cc
! 12466cc67169cd6d51c191530b8431ef  libstdc++-v3/testsuite/17_intro/headers/c++2011/all_attributes.cc
! f413084ac984250f3f4dfa1cb0603b2c  libstdc++-v3/testsuite/17_intro/headers/c++2011/all_no_exceptions.cc
! 8a29120704378c53bf664556f6e90229  libstdc++-v3/testsuite/17_intro/headers/c++2011/all_no_rtti.cc
! 2f9d06a4c0330e3468d0a29f8f246656  libstdc++-v3/testsuite/17_intro/headers/c++2011/all_pedantic_errors.cc
  b8a53b2b8da32d102d69cbedea3d2216  libstdc++-v3/testsuite/17_intro/headers/c++2011/charset.cc
! 0b0b6b3613a00a368e35186e93f9a3f4  libstdc++-v3/testsuite/17_intro/headers/c++2011/linkage.cc
! 13ad763ed600996d79c3a056e55e7433  libstdc++-v3/testsuite/17_intro/headers/c++2011/operator_names.cc
! eed818216dc9da652350d9ccf75a395f  libstdc++-v3/testsuite/17_intro/headers/c++2011/parallel_mode.cc
! e501bf5670fc19e734c453073d782a1a  libstdc++-v3/testsuite/17_intro/headers/c++2011/profile_mode.cc
! b4c9924b81e1e611449568298a2c2232  libstdc++-v3/testsuite/17_intro/headers/c++2011/stdc++.cc
! fdbdc5fd4fd5851895466f76b08653af  libstdc++-v3/testsuite/17_intro/headers/c++2011/stdc++_multiple_inclusion.cc
! b5f48c67405f471d2fcae682d616918f  libstdc++-v3/testsuite/17_intro/headers/c++2014/all_attributes.cc
! e38bb99ea5d7711f9c4d193da4b17fa0  libstdc++-v3/testsuite/17_intro/headers/c++2014/all_no_exceptions.cc
! aeb039c8a9cad0e1be56941e1386d9ff  libstdc++-v3/testsuite/17_intro/headers/c++2014/all_no_rtti.cc
! 140b286b00a0e72f68b10d296ace24a2  libstdc++-v3/testsuite/17_intro/headers/c++2014/all_pedantic_errors.cc
  b8a53b2b8da32d102d69cbedea3d2216  libstdc++-v3/testsuite/17_intro/headers/c++2014/charset.cc
! 9457b9d070c50084dbab5013a4587968  libstdc++-v3/testsuite/17_intro/headers/c++2014/operator_names.cc
! 5a852f1a3acf48c285dca72c33f5709f  libstdc++-v3/testsuite/17_intro/headers/c++2014/parallel_mode.cc
! 969fd0cff8b6ad7f0168d4117e539631  libstdc++-v3/testsuite/17_intro/headers/c++2014/stdc++.cc
! 38fd605d4063d997899c7a1081bb4302  libstdc++-v3/testsuite/17_intro/headers/c++2014/stdc++_multiple_inclusion.cc
! 14516fcb7feff16ecb0603a6e37344ee  libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc
! 6e945c815a7c33b78c9e9480149bbbac  libstdc++-v3/testsuite/17_intro/headers/c++2017/all_no_exceptions.cc
! c8be12e77122b59f5d07150379eac8dc  libstdc++-v3/testsuite/17_intro/headers/c++2017/all_no_rtti.cc
! ecd791eda7565132192e304f233c53e8  libstdc++-v3/testsuite/17_intro/headers/c++2017/all_pedantic_errors.cc
  b8a53b2b8da32d102d69cbedea3d2216  libstdc++-v3/testsuite/17_intro/headers/c++2017/charset.cc
! 63e50c4487b6562652132924ec8456d5  libstdc++-v3/testsuite/17_intro/headers/c++2017/operator_names.cc
! bb6a9be6c9f8c048e60c697472bec64b  libstdc++-v3/testsuite/17_intro/headers/c++2017/parallel_mode.cc
! cf78b008137ff95a56a8d3007b3407de  libstdc++-v3/testsuite/17_intro/headers/c++2017/stdc++.cc
! 5e6da048acd0875d8644dfaff14b8d31  libstdc++-v3/testsuite/17_intro/headers/c++2017/stdc++_multiple_inclusion.cc
! 27f9b89dadbfb32b890c4161a605f5e5  libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc
! dde81d585041d6394cb89544f656763e  libstdc++-v3/testsuite/17_intro/headers/c++2020/all_no_exceptions.cc
! b6df8729c3fcf5e92385a6ae4ebc33a9  libstdc++-v3/testsuite/17_intro/headers/c++2020/all_no_rtti.cc
! f79eda61083c2a5923bc86e97f849a8a  libstdc++-v3/testsuite/17_intro/headers/c++2020/all_pedantic_errors.cc
  b8a53b2b8da32d102d69cbedea3d2216  libstdc++-v3/testsuite/17_intro/headers/c++2020/charset.cc
! 8c11d848a50b34cc41e4f38457340ab0  libstdc++-v3/testsuite/17_intro/headers/c++2020/operator_names.cc
! 00f02d1595a0b4d76fa4c334f1d290c3  libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++.cc
! 9a503e9f7a4962b02dcf7af55a6ec225  libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++_multiple_inclusion.cc
! b69b7124207f01e2002aa803e816c2a7  libstdc++-v3/testsuite/17_intro/names.cc
! c8b92b0456cec060527cba3fcf483eb7  libstdc++-v3/testsuite/17_intro/shared_with_static_deps.cc
! 31f0502096c772d1e15fff55afb87ea4  libstdc++-v3/testsuite/17_intro/static.cc
! fb6074535e87c7e3a68810fb1d497360  libstdc++-v3/testsuite/17_intro/tag_type_explicit_ctor.cc
! 420c26a0ca0c9f6ab2030c5e1a1985b3  libstdc++-v3/testsuite/17_intro/using_namespace_std.cc
! 021af94fd3cdf3ab048710b5430f13d1  libstdc++-v3/testsuite/17_intro/using_namespace_std_exp_neg.cc
! 8cf2ca8bf2d938941d7b9682402a5fb2  libstdc++-v3/testsuite/17_intro/using_namespace_std_tr1_neg.cc
! 92607f3ca117f7dcf10d80aeb7a3a865  libstdc++-v3/testsuite/18_support/50594.cc
! 1300847b2383140b1542c3b357a52b53  libstdc++-v3/testsuite/18_support/51333.cc
! 4dd604a1f18d39eb191c1d61a7f80a48  libstdc++-v3/testsuite/18_support/96817.cc
! 42803aa600116172d32140ab88a0b228  libstdc++-v3/testsuite/18_support/aligned_alloc/aligned_alloc.cc
! a7ad15bb9b6e877b18a53157274af916  libstdc++-v3/testsuite/18_support/bad_alloc/cons_virtual_derivation.cc
! 44e345137f4e5677a3f2e1a9a8f5af53  libstdc++-v3/testsuite/18_support/bad_alloc/what.cc
! c8fbb66363e4aeaa645bcb1bc9a0463a  libstdc++-v3/testsuite/18_support/bad_cast/cons_virtual_derivation.cc
! b5720ae54a260e5bee08f619db37727d  libstdc++-v3/testsuite/18_support/bad_cast/what.cc
! 6d95345c4a83f4fa7b8e206abad7dad9  libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c
! 54ada7fd0e606bd7578cc5adf169d715  libstdc++-v3/testsuite/18_support/bad_exception/59392.cc
! 287ca9b3fbe9a1117c047a22543c441a  libstdc++-v3/testsuite/18_support/bad_exception/cons_virtual_derivation.cc
! 6bdf533b889a920dd85611a16e3e6c17  libstdc++-v3/testsuite/18_support/bad_exception/what.cc
! e73337cabdd6f41e42119e038f3a1cb3  libstdc++-v3/testsuite/18_support/bad_typeid/cons_virtual_derivation.cc
! 7b716c2654ed4bf662579bc9b201093c  libstdc++-v3/testsuite/18_support/bad_typeid/what.cc
! dacbebb5ee24817d79eefa606630804e  libstdc++-v3/testsuite/18_support/byte/81076.cc
! fef9dedbce0e628d1aeacb8768868504  libstdc++-v3/testsuite/18_support/byte/global_neg.cc
! 968d3c962a489bd0562ad25b6d71f49a  libstdc++-v3/testsuite/18_support/byte/ops.cc
! f514bfb5aa693323afcddc4f4ebd52a9  libstdc++-v3/testsuite/18_support/byte/requirements.cc
  b4c65970a3b96295ca66e5a7376e3d19  libstdc++-v3/testsuite/18_support/comparisons/algorithms/fallback.cc
! e13d96a11fabb13790e44c211cd92f3c  libstdc++-v3/testsuite/18_support/comparisons/algorithms/partial_order.cc
! 844ff72611c0d4c210c7cf7f79bf568e  libstdc++-v3/testsuite/18_support/comparisons/algorithms/strong_order.cc
! 2d8f835ce49787e2c60c236273484d23  libstdc++-v3/testsuite/18_support/comparisons/algorithms/weak_order.cc
! cdf18d0b4b9243989a14b6a9c697f5e7  libstdc++-v3/testsuite/18_support/comparisons/categories/94565.cc
! 89c8786a9c26f12f93b90ad30d23e7d2  libstdc++-v3/testsuite/18_support/comparisons/categories/partialord.cc
! 30df59bf8d24def6f2d84b18b6b75980  libstdc++-v3/testsuite/18_support/comparisons/categories/strongord.cc
! 370053ce16b298661d2a52d1ca7e31cc  libstdc++-v3/testsuite/18_support/comparisons/categories/weakord.cc
! 17463b197e8836f2f1cd601128a383b8  libstdc++-v3/testsuite/18_support/comparisons/categories/zero_neg.cc
! 41a5470b480d1c67cf3af77bc2b49946  libstdc++-v3/testsuite/18_support/comparisons/common/1.cc
! ae3c31a0d90d9cf87a3ce5ed3fe427f2  libstdc++-v3/testsuite/18_support/comparisons/object/93479.cc
! a79b1eca93cc35bcb8a1e55ef37b209d  libstdc++-v3/testsuite/18_support/comparisons/object/lwg3530.cc
! 7df1c9f269f12deb177e04cdc1d2518e  libstdc++-v3/testsuite/18_support/coroutines/95917.cc
! 0233b02f827166115656fc4ec2aa06ca  libstdc++-v3/testsuite/18_support/coroutines/lwg3460.cc
! 05fc58a5ef8c6782f4f073a0797dd286  libstdc++-v3/testsuite/18_support/cxa_vec.cc
! c2cfb457c65bc6c55bc3c0b2c638ce4b  libstdc++-v3/testsuite/18_support/destroying_delete.cc
! ce22e4735ecd95159c340e5186ba8266  libstdc++-v3/testsuite/18_support/exception/38732.cc
! cbbe9b0ecfe25e4d73c964b8e3aaba27  libstdc++-v3/testsuite/18_support/exception/what.cc
  8a3e4fc86620d59634749ffecd317237  libstdc++-v3/testsuite/18_support/exception_ptr/103630.cc
! a3a6b6c53e7f7962d0edf9b334e4f65b  libstdc++-v3/testsuite/18_support/exception_ptr/40296.cc
! 21198d97496aa2ba0cf3e0f58eefcaec  libstdc++-v3/testsuite/18_support/exception_ptr/60612-terminate.cc
! f53e2f19afb2fbaa0e374c404e2bf377  libstdc++-v3/testsuite/18_support/exception_ptr/60612-unexpected.cc
! f8ed24ce66067da2b340818c2e51a1f3  libstdc++-v3/testsuite/18_support/exception_ptr/62258.cc
! c87f66b9c23fd9309a97bc330c090766  libstdc++-v3/testsuite/18_support/exception_ptr/64241.cc
! bd38997c39abdcfa180b8c1310a14e70  libstdc++-v3/testsuite/18_support/exception_ptr/90295.cc
  8907da30a344e71f1227eec1fae72f2b  libstdc++-v3/testsuite/18_support/exception_ptr/96657.cc
! ed07787c03e35628440394ecd374df45  libstdc++-v3/testsuite/18_support/exception_ptr/current_exception.cc
! 74a2d32b0d782e296255ec3f1511d3fd  libstdc++-v3/testsuite/18_support/exception_ptr/lifespan.cc
! 53080fd8bd265a7b99def71a18886dae  libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr.cc
! f0e9366291cf987086a9252d2df708b0  libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr_2.cc
! d7e939db8f3d0b7755bd65d842ce448e  libstdc++-v3/testsuite/18_support/exception_ptr/move.cc
! 0331e82b95d41118ad69988b61c97a14  libstdc++-v3/testsuite/18_support/exception_ptr/requirements.cc
! 3b3b776a6204ff7a046d1f36c90c1054  libstdc++-v3/testsuite/18_support/exception_ptr/requirements_neg.cc
! 9542e21867d1714e16d9b5e6b1af6bca  libstdc++-v3/testsuite/18_support/exception_ptr/rethrow_exception.cc
! 39c163b51d265ffd1acbfc6872d5b6e7  libstdc++-v3/testsuite/18_support/free_eh_pool.cc
! a63c3e274aaac795583e5681b2f92ba4  libstdc++-v3/testsuite/18_support/headers/cfloat/values.cc
! 8510e45aee0dcfeeae5e096f857fac9e  libstdc++-v3/testsuite/18_support/headers/cfloat/values_c++17.cc
! 383e9c97714c9e856d07c331699d9c85  libstdc++-v3/testsuite/18_support/headers/climits/values.cc
! 0ec985236a0129db62dfaaa64a2a4ae1  libstdc++-v3/testsuite/18_support/headers/csetjmp/functions_std.cc
! 077367347a4f77fd310c7a89cd7ec329  libstdc++-v3/testsuite/18_support/headers/csetjmp/macros.cc
! 609f55522cd9597e25a6ce9eadc39814  libstdc++-v3/testsuite/18_support/headers/csetjmp/types_std.cc
! 5a88be7b16358cb4e0fbdec49e614a89  libstdc++-v3/testsuite/18_support/headers/csignal/functions_std.cc
! 3a86cdf74d02a9211b016b6f4f04af6c  libstdc++-v3/testsuite/18_support/headers/csignal/macros.cc
! 26e7937e131f3d6a5922f6df3e930a4a  libstdc++-v3/testsuite/18_support/headers/csignal/types_std.cc
! a18700647cd5d3fdbd32ade3e248a1a9  libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc
! bb836f31dd507d668dc91362105f7240  libstdc++-v3/testsuite/18_support/headers/cstdarg/macros.cc
! 2dc5ae015d981987f1bfe96468d3b7c8  libstdc++-v3/testsuite/18_support/headers/cstdarg/types_std.cc
! 592d78864ca42df1faf426bab9287bdf  libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc
! ddf7d0512acc6af3a76bce88df06d29c  libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc
! 89dfbd0f2705419482d8440a58277924  libstdc++-v3/testsuite/18_support/headers/cstddef/macros.cc
! 6581b728c879f4ff84fa1051fa24a1bc  libstdc++-v3/testsuite/18_support/headers/cstddef/types_std.cc
! a80a1f3451171c14f186521e77568ab8  libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc
! 1f98ebf38ddc7ed3b16516bddedfd170  libstdc++-v3/testsuite/18_support/headers/cstdint/types_std_c++0x.cc
! c885b5162a392c6bc031cbf9e9403541  libstdc++-v3/testsuite/18_support/headers/cstdlib/functions_std.cc
! d9a44a1c4e1e01bd8ab6dee950ed27c0  libstdc++-v3/testsuite/18_support/headers/cstdlib/macros.cc
! 0affc249f7261e08de2cfb0710915ffb  libstdc++-v3/testsuite/18_support/headers/ctime/functions_std.cc
! c8368fe45b6bb53f412d3f8e2a6a6f5f  libstdc++-v3/testsuite/18_support/headers/ctime/macros.cc
! 2c0b748e5de0118e3d29449ac2b8548f  libstdc++-v3/testsuite/18_support/headers/ctime/types_std.cc
! 41a32206e2e643e61bb41e2443467078  libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc
! 2c8559b4b84d7d1e1b149719bcf0bf46  libstdc++-v3/testsuite/18_support/headers/exception/types_std.cc
! 97500ef70ab3d61d8737b5d47d70c3de  libstdc++-v3/testsuite/18_support/headers/limits/synopsis.cc
! 379f0246fe0e335510c6ca56daea24c9  libstdc++-v3/testsuite/18_support/headers/new/synopsis.cc
! a4d41e9472da80aaf7b149d20259b3d3  libstdc++-v3/testsuite/18_support/headers/new/synopsis_cxx98.cc
! e9b662610d1a923f9e8d0a6ebd602aec  libstdc++-v3/testsuite/18_support/headers/new/types_std.cc
! dac07e37a521e1eef69e5cba1d87f832  libstdc++-v3/testsuite/18_support/headers/typeinfo/synopsis.cc
! d4d7a996af960ad82742bdce084965d6  libstdc++-v3/testsuite/18_support/headers/typeinfo/types_std.cc
! d1756458f919298faeaa0d9da2276041  libstdc++-v3/testsuite/18_support/headers/version/macros.cc
! 220a54ef199e142b7cbadb4dc5fa1181  libstdc++-v3/testsuite/18_support/initializer_list/constexpr.cc
! 93c0463851658ae75a785b347efa3ae6  libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc
! ac08d3abca83a09e4e62a730958356eb  libstdc++-v3/testsuite/18_support/initializer_list/requirements/constexpr_functions.cc
! 74cf20a675d71b3aef60ee9ddad11123  libstdc++-v3/testsuite/18_support/initializer_list/requirements/explicit_instantiation.cc
! c3acf192f4e72e0d6b8acd4a7da4a956  libstdc++-v3/testsuite/18_support/initializer_list/requirements/typedefs.cc
! 9f453a9993a5beae5ac6c3530841e0e2  libstdc++-v3/testsuite/18_support/launder/1.cc
! e4cbd81148f0cda43c89713e07c4b0ce  libstdc++-v3/testsuite/18_support/launder/nodiscard.cc
! b99386c97da1fafbc6beb83a10656393  libstdc++-v3/testsuite/18_support/launder/requirements.cc
! f8f1098bf7820a893bc6e7c2387ce32b  libstdc++-v3/testsuite/18_support/launder/requirements_neg.cc
! f2f9432ea90d2f18279f929c7512121e  libstdc++-v3/testsuite/18_support/max_align_t/requirements/1.cc
! 7f45a195482db0aa0d5277dd85dc1d47  libstdc++-v3/testsuite/18_support/max_align_t/requirements/2.cc
! 470fbaf501b4bee1ada8e8ad4a040010  libstdc++-v3/testsuite/18_support/nested_exception/51438.cc
! 9c02e5e4859e05fc95605cc66cd538df  libstdc++-v3/testsuite/18_support/nested_exception/62154.cc
! 80aba3daa4bf2852201517b659525ad0  libstdc++-v3/testsuite/18_support/nested_exception/68139.cc
! 5f31a58005c7950c4f0e51ec00e9e4c1  libstdc++-v3/testsuite/18_support/nested_exception/79114.cc
! 6acfa58114bcbe0a03fc75fcec321df5  libstdc++-v3/testsuite/18_support/nested_exception/cons.cc
! 1a9647d0ac837ee99fb921b41ef79078  libstdc++-v3/testsuite/18_support/nested_exception/nested_ptr.cc
! 4f1246b0b9ebba2670236d2593edadd5  libstdc++-v3/testsuite/18_support/nested_exception/rethrow_if_nested.cc
! 6a07ffbb65886d3a5bb489e426883e58  libstdc++-v3/testsuite/18_support/nested_exception/rethrow_nested.cc
! 6d526e3ce3dd11f9db744758aa93923a  libstdc++-v3/testsuite/18_support/nested_exception/throw_with_nested.cc
! 7d55306e891fb72c2498f6f95943faa2  libstdc++-v3/testsuite/18_support/new_aligned.cc
! 48091e828e76d75bb45e9235cc0d96b6  libstdc++-v3/testsuite/18_support/new_delete_placement.cc
! 6c65f11273efe08f2b4e8f0b09a84d77  libstdc++-v3/testsuite/18_support/new_handler.cc
! bc044f2d7f84ec708dc77fdd314a8add  libstdc++-v3/testsuite/18_support/new_nothrow.cc
! 39727df45cdb5327756ed448ab14e1b1  libstdc++-v3/testsuite/18_support/numeric_limits/29989.cc
! 05f68bb5858d20d7db17f197d431b3df  libstdc++-v3/testsuite/18_support/numeric_limits/40856.cc
! 316196ac4ff9d2323134010102d1c47f  libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
! 99629cab63d7854bafe8b077aab2a1e1  libstdc++-v3/testsuite/18_support/numeric_limits/char8_t.cc
! 18b1ef1a8d188e90ed95c6f7a924e8c9  libstdc++-v3/testsuite/18_support/numeric_limits/cons/default.cc
! 6cde3b831b5bb05d702aa2be5ab41a55  libstdc++-v3/testsuite/18_support/numeric_limits/cons/default_c++0x.cc
! 5ca0282daa756d74f4ece1257216cd89  libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc
! 4b07f840b5dbbb2d05a27bf97b71bef6  libstdc++-v3/testsuite/18_support/numeric_limits/digits10.cc
! 40107180994c7644f67a9d7450b149b7  libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
! b5c539c068b125034b423979f4678642  libstdc++-v3/testsuite/18_support/numeric_limits/epsilon.cc
! 09c32239e0ca321deb212076fe9e14c9  libstdc++-v3/testsuite/18_support/numeric_limits/infinity.cc
! f6b17cd6fa2d9704c1e4aa248b95e249  libstdc++-v3/testsuite/18_support/numeric_limits/is_iec559.cc
! 1b4007b2c7c9e6232cb3ee410f7cafcd  libstdc++-v3/testsuite/18_support/numeric_limits/is_signed.cc
! ee1f1ce10fa3597cda3fa109fa7ddf6b  libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc
! 8e3bd94db6ae3062f227f2df86161662  libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc
! e18bde0e66a2de5fd922f092e2312d4e  libstdc++-v3/testsuite/18_support/numeric_limits/min_max.cc
! 251c62443a88aca1cbf05c383cbe471c  libstdc++-v3/testsuite/18_support/numeric_limits/primary.cc
! fd59cc871f3ef0f8bcb3126d1a2a450b  libstdc++-v3/testsuite/18_support/numeric_limits/quiet_NaN.cc
! 8ea1898ae6b96f057a61cb2b89dbbdae  libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc
! 8798eba7239f6a9ce68c039b8560ac38  libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc
! 6ce7b327389b6029a27a8d128767a0f4  libstdc++-v3/testsuite/18_support/numeric_limits/requirements/explicit_instantiation/1.cc
! af0a12d99e817d1d4d9f01c347019b72  libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc
! 871be1d8a2ceccc26dd07e2a55c9cd07  libstdc++-v3/testsuite/18_support/numeric_limits/traps.cc
! 219c1d6379773582f62bab9ee1150457  libstdc++-v3/testsuite/18_support/pthread_guard.cc
! 4a2aa18ad09d4c53f99b74e649e1db31  libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc
! 1946dc49603ae38b4546fd2cdadfd0fc  libstdc++-v3/testsuite/18_support/set_terminate.cc
! 80d83582ba61dccd3d9d2284309c4c1f  libstdc++-v3/testsuite/18_support/set_unexpected.cc
! 7dc1f3315e779300cd9806130066a1f9  libstdc++-v3/testsuite/18_support/source_location/1.cc
! 506eaad43ab3325467ff2608e58d4bb0  libstdc++-v3/testsuite/18_support/source_location/consteval.cc
! d67d60cc69f922051b18b859d97b5983  libstdc++-v3/testsuite/18_support/source_location/srcloc.h
! a6b04424812557329cb78c9219a4f510  libstdc++-v3/testsuite/18_support/source_location/version.cc
! bd50cbf3b881fb7d4e8204d5ccbfe40e  libstdc++-v3/testsuite/18_support/terminate_handler.cc
  a4ea00becc0e698345c65728494c0afe  libstdc++-v3/testsuite/18_support/type_info/103240.cc
! 6ab8978b367ecd9639e833d4ea186069  libstdc++-v3/testsuite/18_support/type_info/52562.cc
! 29b689b2adaa6a8f785a22e7d7154e35  libstdc++-v3/testsuite/18_support/type_info/fundamental.cc
! 67985f91552cc45f084511dfeb5beb13  libstdc++-v3/testsuite/18_support/type_info/hash_code.cc
! d49ac9d58977743ccf78dc349ea9f902  libstdc++-v3/testsuite/18_support/uncaught_exception/14026.cc
! 2251b76ca9d1bf77641aff54abc2e69b  libstdc++-v3/testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc
! 8f403d1d96a3895da01fee88b5652481  libstdc++-v3/testsuite/18_support/unexpected_handler.cc
  e76078fa52225514dc89f9b1116c07ff  libstdc++-v3/testsuite/19_diagnostics/error_category/102425.cc
! c95c327e4680e772d0de1de3bad0ffb2  libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc
! 42d2c521cb78289c413f2d728a19e243  libstdc++-v3/testsuite/19_diagnostics/error_category/cons/default.cc
! 84e4ea0170f5d3de2b3338868d078a7b  libstdc++-v3/testsuite/19_diagnostics/error_category/generic_category.cc
! d42d3cc358a7e4f99a092cde1d28267f  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/equal.cc
! 2f7016e40ecf9f347abbac7810b3dac6  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/less.cc
! 7c37bf2e6c8ad7106740de6df763cc14  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/not_equal.cc
! de62118ebc45d3fff00ca4bf0fb388a6  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/three_way.cc
! a7f4f3e82f349fc304a2c025de0274dc  libstdc++-v3/testsuite/19_diagnostics/error_category/system_category.cc
! 4334201b31488915fcb0f2d0a61b2be5  libstdc++-v3/testsuite/19_diagnostics/error_code/cons/1.cc
! 0155fa7b3e6d4c61dc355d6ae065c957  libstdc++-v3/testsuite/19_diagnostics/error_code/cons/39882.cc
! a95106119137af1300b40855b06e58df  libstdc++-v3/testsuite/19_diagnostics/error_code/hash.cc
! 932d8224b6406dd6595842204941f084  libstdc++-v3/testsuite/19_diagnostics/error_code/is_error_code_v.cc
! cb9036756b525e4b1b211aa1f4c2249c  libstdc++-v3/testsuite/19_diagnostics/error_code/modifiers/39882.cc
! 03d1f8d14c1d670f3cad9ad9aad28763  libstdc++-v3/testsuite/19_diagnostics/error_code/operators/bool.cc
! 4be083923854f2ea2dc9e8291b47d375  libstdc++-v3/testsuite/19_diagnostics/error_code/operators/bool_neg.cc
! 2409e7e11ce84034c0e5e0e41c672961  libstdc++-v3/testsuite/19_diagnostics/error_code/operators/equal.cc
! fbe4e3c85ef21a7c6f0c48230a32f6da  libstdc++-v3/testsuite/19_diagnostics/error_code/operators/less.cc
! ce31af5c8b099f00930fa1de02aa1e80  libstdc++-v3/testsuite/19_diagnostics/error_code/operators/not_equal.cc
! 3573c1557839e8ad344d0512e2579676  libstdc++-v3/testsuite/19_diagnostics/error_code/operators/three_way.cc
! c75470d5530b5ae2eaa627e47c0eed69  libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/1.cc
! 79bbcafed481820fd162c1ad1b6c2a98  libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/39881.cc
! 804c6bf0bcc39937a723b1fe9cb75c85  libstdc++-v3/testsuite/19_diagnostics/error_condition/hash.cc
! c7bc411865275a3a44dc8d2b00b447e2  libstdc++-v3/testsuite/19_diagnostics/error_condition/modifiers/39881.cc
! fdafdf271cc77e0465f1f7894c92ca8a  libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/bool.cc
! fb679db786744670029626dcddf4a938  libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/bool_neg.cc
! 43e3d17b9c56a470d47e64d9b9f378cd  libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/equal.cc
! c12f7f0e71b5f59c60b4fa810cc4eeea  libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/less.cc
! 7826b27aa308e24dc8a8a0a18f6027c9  libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/not_equal.cc
! 79a154197eb4cb74b1eaf5e458e7310a  libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/three_way.cc
! 13c256a4dfe566194a489e5ff68f4fc2  libstdc++-v3/testsuite/19_diagnostics/headers/cassert/macros.cc
! 0982a03bbaaed34cd25637afd0bbe5b4  libstdc++-v3/testsuite/19_diagnostics/headers/cerrno/macros.cc
! 033e393caae24e730605735cca784fd8  libstdc++-v3/testsuite/19_diagnostics/headers/stdexcept/synopsis.cc
! 151f673b7788106642a49efcbb22de95  libstdc++-v3/testsuite/19_diagnostics/headers/stdexcept/types_std.cc
! 1ec0c010132206cd877710fb445c5f29  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/34538.cc
! 9c3a7f3566fe981536477c78ab9e70d7  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/93151.cc
! d663bcd885d0bbfd344cda6b0cb5297e  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc
! 0940ff9cb09d19d4a0c03d2f9128efae  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc
! 90f59b47f42f93035e6fe21bd0d1cd1e  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc
! 48ffe60543f5ab3697f2d3e1a79572e8  libstdc++-v3/testsuite/19_diagnostics/logic_error/cons_virtual_derivation.cc
! 3ef18ba3cee519f495d8f5b5e5f62e2a  libstdc++-v3/testsuite/19_diagnostics/logic_error/what-1.cc
! 0e4ee50fa51955ec1d9e02647a081ece  libstdc++-v3/testsuite/19_diagnostics/logic_error/what-2.cc
! 51d3d1376ad4041bf72cd1fe68a13716  libstdc++-v3/testsuite/19_diagnostics/logic_error/what-3.cc
! 75ee69dd4ca6f84652a2c23e4f01be95  libstdc++-v3/testsuite/19_diagnostics/logic_error/what-big.cc
! abb1dfd384144a9e8a3c8abcbbca424a  libstdc++-v3/testsuite/19_diagnostics/runtime_error/cons_virtual_derivation.cc
! 71ec7060a1c101c27468c81e9931a770  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-1.cc
! e86ec8d2ed640d1ec738b949c0b35654  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-2.cc
! 690800ba3f00da184e16f948f358d82d  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc
! 9603e23b21ade23013c90a748ed9bc50  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-big.cc
! 47f4f27ecf4bda087c5b0a3cd14a7c66  libstdc++-v3/testsuite/19_diagnostics/stdexcept.cc
! 2264c22a40011e311f857936e455ea01  libstdc++-v3/testsuite/19_diagnostics/system_error/39880.cc
! 6c5934a5df61fc5c08b17f85f553babc  libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc
! f50967809900e6d07ee02904a6e39903  libstdc++-v3/testsuite/19_diagnostics/system_error/cons_virtual_derivation.cc
! 4e7eceb75a1b5e9a861de98219de4b8e  libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc
! e78a2781f39a561579731ed4b960a801  libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc
! 923e5cbb03fb94147137928b28629f77  libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc
! fe49dba39d4e2edf0d63d26f4f713f87  libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc
! bed26b2c77450f72283773e024e692bb  libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc
! 4f19735cffc9501630786534d68c6427  libstdc++-v3/testsuite/20_util/add_const/requirements/alias_decl.cc
! 8f92a44b7cb21cf107313c756229f7f4  libstdc++-v3/testsuite/20_util/add_const/requirements/explicit_instantiation.cc
! cb55ed14c5cdb8d4e9810898e24228b2  libstdc++-v3/testsuite/20_util/add_const/value.cc
! 913f5de4ed07041603f36ce458832442  libstdc++-v3/testsuite/20_util/add_cv/requirements/alias_decl.cc
! b197ae5e27b8b9dc6ad44641892d362f  libstdc++-v3/testsuite/20_util/add_cv/requirements/explicit_instantiation.cc
! 11ac79e2160e61696bf899eae12e6f11  libstdc++-v3/testsuite/20_util/add_cv/value.cc
! fa44636f74d0a027af383518a8e65baa  libstdc++-v3/testsuite/20_util/add_lvalue_reference/requirements/alias_decl.cc
! 6e03b35b2b01e7e3dcd0f349693cbc0b  libstdc++-v3/testsuite/20_util/add_lvalue_reference/requirements/explicit_instantiation.cc
! f99cea9970b6620322741c8c29194efc  libstdc++-v3/testsuite/20_util/add_lvalue_reference/value.cc
! 44c68dc9c627cdb56f75074daacb2580  libstdc++-v3/testsuite/20_util/add_pointer/requirements/alias_decl.cc
! 7452b73813ef058566edf62b55373fec  libstdc++-v3/testsuite/20_util/add_pointer/requirements/explicit_instantiation.cc
! bbd0ece01a616e2e3dea7293772ebd2f  libstdc++-v3/testsuite/20_util/add_pointer/value.cc
! 3a85562cd33f2b758c9840b8b4714eac  libstdc++-v3/testsuite/20_util/add_rvalue_reference/requirements/alias_decl.cc
! c37f408d49515e3d8302032320f22243  libstdc++-v3/testsuite/20_util/add_rvalue_reference/requirements/explicit_instantiation.cc
! 5da2bb58c0387d516f42d6786ef20331  libstdc++-v3/testsuite/20_util/add_rvalue_reference/value.cc
! 7e76672a295d718baa546a5308131507  libstdc++-v3/testsuite/20_util/add_volatile/requirements/alias_decl.cc
! a1be84585d147cb512d2e5600111c20b  libstdc++-v3/testsuite/20_util/add_volatile/requirements/explicit_instantiation.cc
! 525c09575c9b0be3e098dc2ffffe9fe0  libstdc++-v3/testsuite/20_util/add_volatile/value.cc
! 42b2d083b6efc71db8762fafab12b26e  libstdc++-v3/testsuite/20_util/addressof/1.cc
! 1e5cd73e5138cbf82e500a5501a8f650  libstdc++-v3/testsuite/20_util/addressof/requirements/constexpr.cc
! a92ddd435a58948646acefb1070193e9  libstdc++-v3/testsuite/20_util/addressof/requirements/explicit_instantiation.cc
! 333e62334736d5afe100ed8342a442b0  libstdc++-v3/testsuite/20_util/align/1.cc
! 7307ec8be932ec7180f478ec6a18abc6  libstdc++-v3/testsuite/20_util/align/2.cc
! 6a977e1f50867d8029afa2458f109a5b  libstdc++-v3/testsuite/20_util/align/3.cc
! d1527c91a02c2ce5debc2cd6cd6f38aa  libstdc++-v3/testsuite/20_util/aligned_storage/requirements/alias_decl.cc
! 16b9eaa4c7e8392d525244803d7241de  libstdc++-v3/testsuite/20_util/aligned_storage/requirements/explicit_instantiation.cc
! 09fe4b42734b407d1f95928e6d4004e9  libstdc++-v3/testsuite/20_util/aligned_storage/value.cc
! c80d0777cc1b33430f063c5317b267f6  libstdc++-v3/testsuite/20_util/aligned_union/1.cc
! a7767d4c495812b3e8db102d3eb3011b  libstdc++-v3/testsuite/20_util/aligned_union/requirements/alias_decl.cc
! 626c33b94c32d159ffa50ce55a1ba702  libstdc++-v3/testsuite/20_util/alignment_of/requirements/explicit_instantiation.cc
! b5155793dcbf056ed0449d9e3c76a9dd  libstdc++-v3/testsuite/20_util/alignment_of/requirements/typedefs.cc
! 9825cfb0c04f9c220d8698371ff95025  libstdc++-v3/testsuite/20_util/alignment_of/value.cc
! 01ff9ce0bdd7f8d8502f564e43e3e7c7  libstdc++-v3/testsuite/20_util/allocator/1.cc
! 57a35a8bc4c54923fbf87d8606eb819e  libstdc++-v3/testsuite/20_util/allocator/10378.cc
! 14b137495952f9ee0b7461f051d189d2  libstdc++-v3/testsuite/20_util/allocator/14176.cc
! b2fc59f13d30b1a69ca9ad6675698f0e  libstdc++-v3/testsuite/20_util/allocator/33807.cc
! fe1d83fae3c0730ab91eb0a7e4dc07a8  libstdc++-v3/testsuite/20_util/allocator/8230.cc
! 606c92f5e0f9c00872de27ae733eaccc  libstdc++-v3/testsuite/20_util/allocator/89510.cc
! b00f036debbe09aaba5288e14cb68a7d  libstdc++-v3/testsuite/20_util/allocator/lwg3190.cc
! 77828de9d70ae8089f8b6700ce04dc32  libstdc++-v3/testsuite/20_util/allocator/overaligned.cc
! 58b5b645c8c7c7fdb40d0b8f10add64c  libstdc++-v3/testsuite/20_util/allocator/rebind_c++20.cc
! 93e69ac1bff3a29d98e0a18dbb736a35  libstdc++-v3/testsuite/20_util/allocator/requirements/constexpr.cc
! f00a16c69147887fb51ac87e69df3e28  libstdc++-v3/testsuite/20_util/allocator/requirements/explicit_instantiation/1.cc
! e2240bdcf9676c72c7c0c106e3126049  libstdc++-v3/testsuite/20_util/allocator/requirements/typedefs.cc
! e12608d86c78ef09146d4d23502dbcd1  libstdc++-v3/testsuite/20_util/allocator/requirements/typedefs_c++20.cc
! d2847864a51ba5ee6af63d8680746e17  libstdc++-v3/testsuite/20_util/allocator/void.cc
! d8d2792700c4256d6bafe5f823baa7e4  libstdc++-v3/testsuite/20_util/allocator_traits/header-2.cc
! 0caa10ed5d647c7934481bf543e1c544  libstdc++-v3/testsuite/20_util/allocator_traits/header.cc
! f21d13983b6538238c18e581209d3d0e  libstdc++-v3/testsuite/20_util/allocator_traits/members/92878_92947.cc
! 454b12b0e2a54715a29b56197e0b26ad  libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint.cc
! 8708d483e2ebc7d04fa5a83dad157381  libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint_nonpod.cc
! e2c1ff17157b913cca263133c3b45206  libstdc++-v3/testsuite/20_util/allocator_traits/members/construct.cc
! 73efaab81d4dce5380de65dc213c2a61  libstdc++-v3/testsuite/20_util/allocator_traits/members/destroy.cc
! 43d4c297d85ee3226fd6c9484547f399  libstdc++-v3/testsuite/20_util/allocator_traits/members/is_always_equal.cc
! 971d8de26d85df7190a005ae9df438de  libstdc++-v3/testsuite/20_util/allocator_traits/members/max_size.cc
! d1b2a49158dd7ef16d2c30963706204e  libstdc++-v3/testsuite/20_util/allocator_traits/members/pointers.cc
! bc3e5d18e81309aaa3663842c25793b1  libstdc++-v3/testsuite/20_util/allocator_traits/members/rebind_alloc.cc
! 87cf798e0bf4d1090354cb086b0c9dc8  libstdc++-v3/testsuite/20_util/allocator_traits/members/select.cc
! 9d0e77a130dabdb51cd3088966c097d3  libstdc++-v3/testsuite/20_util/allocator_traits/requirements/explicit_instantiation.cc
! 9a457d65594fa59471232b6fa4e55a96  libstdc++-v3/testsuite/20_util/allocator_traits/requirements/typedefs.cc
! 46f9d3e426c143207b8a20997f48fa46  libstdc++-v3/testsuite/20_util/allocator_traits/requirements/typedefs2.cc
  53d95c7e7934ce41b96d0a86033b6a99  libstdc++-v3/testsuite/20_util/any/102894.cc
! 087e793d39a431ce06e74ac37a277ddc  libstdc++-v3/testsuite/20_util/any/assign/1.cc
! e91f21b8c3cf4030795540a4c1fe12ca  libstdc++-v3/testsuite/20_util/any/assign/2.cc
! b23d8220c3c4e6866e0b70777d2b719f  libstdc++-v3/testsuite/20_util/any/assign/92878_92947.cc
! 128b5eeea919818a64289e096fa70f6f  libstdc++-v3/testsuite/20_util/any/assign/emplace.cc
! 37b1a96c5e3f992d434547e34ed06b47  libstdc++-v3/testsuite/20_util/any/assign/exception.cc
! ae5f2b511a8ac0e2f746944d5f364ecd  libstdc++-v3/testsuite/20_util/any/assign/self.cc
! 27618b256b3ff639d38c4846b3aaf998  libstdc++-v3/testsuite/20_util/any/cons/1.cc
  097d518046e23537949952c936ddfa1c  libstdc++-v3/testsuite/20_util/any/cons/101034.cc
! be1cb95da16161c56ff3fb401785ba4f  libstdc++-v3/testsuite/20_util/any/cons/2.cc
! 91f5cde4d51f2fd0f418f3728ed9fcfe  libstdc++-v3/testsuite/20_util/any/cons/90415.cc
! a29542e205fd4b7d8b4379d28281ee96  libstdc++-v3/testsuite/20_util/any/cons/92156.cc
! c5cfc6b55ebf507bc83fb83d29e4defc  libstdc++-v3/testsuite/20_util/any/cons/92878_92947.cc
! cb409b854a6bda5b477282ec0fc85a2c  libstdc++-v3/testsuite/20_util/any/cons/aligned.cc
! 038a0824e92fd41c13e03d943a58d3db  libstdc++-v3/testsuite/20_util/any/cons/explicit.cc
! ddc524e1e48ed9fc9a8bdd4989976742  libstdc++-v3/testsuite/20_util/any/cons/in_place.cc
! 112c7291252ca1199859c169caff26e3  libstdc++-v3/testsuite/20_util/any/cons/nontrivial.cc
! abec9daa55e4d3b2e27211a0b9f62ab6  libstdc++-v3/testsuite/20_util/any/make_any.cc
! df46d5152987937fa060dae820a14032  libstdc++-v3/testsuite/20_util/any/misc/any_cast.cc
! 228dae99b58a9f0231e0c2228805d0d9  libstdc++-v3/testsuite/20_util/any/misc/any_cast_neg.cc
! 5a0a18f4340c9ab41d1df807d2521555  libstdc++-v3/testsuite/20_util/any/misc/any_cast_no_rtti.cc
! 47079ded938af7e37c3bac9c1d8a499a  libstdc++-v3/testsuite/20_util/any/misc/swap.cc
! 1c584314624eec7dacb95d44ab8e75a3  libstdc++-v3/testsuite/20_util/any/modifiers/1.cc
! f8101158728dc40b817bd22c0181fd54  libstdc++-v3/testsuite/20_util/any/modifiers/83658.cc
! 39ac12e7a7f0ab1e421fab1692e64086  libstdc++-v3/testsuite/20_util/any/modifiers/92156.cc
! b1758a4337060ad2917770bea9c0dbf3  libstdc++-v3/testsuite/20_util/any/observers/type.cc
! 0ef90aadacd6570352796764a7e8934b  libstdc++-v3/testsuite/20_util/any/requirements.cc
! 21df42377cf3e6a8b5c315835c169547  libstdc++-v3/testsuite/20_util/any/typedefs.cc
! 72fec0de5667343651fabd876bcfac00  libstdc++-v3/testsuite/20_util/as_const/1.cc
! e2e60dbc704d7b14bdfcab5d7cec148a  libstdc++-v3/testsuite/20_util/as_const/rvalue_neg.cc
! ce9968392f2d9bd735d5819821f50ae5  libstdc++-v3/testsuite/20_util/assume_aligned/1.cc
! 97dfa7e9a41435ef613b11a1c68661d6  libstdc++-v3/testsuite/20_util/assume_aligned/2_neg.cc
! edc69b37db3e5aeb1ed18f8318dac7fc  libstdc++-v3/testsuite/20_util/assume_aligned/3.cc
! ac6e25340eaf5c0d405f288413c63556  libstdc++-v3/testsuite/20_util/assume_aligned/97132.cc
! 6d90adcd40c713c3480236ae12fc6459  libstdc++-v3/testsuite/20_util/auto_ptr/1.cc
! 8c4f5f49fc03586648a1585b1d4f5127  libstdc++-v3/testsuite/20_util/auto_ptr/2.cc
! e9ae26c706b935c512393ec66b92ce55  libstdc++-v3/testsuite/20_util/auto_ptr/3.cc
! 3112a4fe512789b5b37f1a080fcd4b53  libstdc++-v3/testsuite/20_util/auto_ptr/3946.cc
! b283c235da3a8dc4a108a91ab0d01171  libstdc++-v3/testsuite/20_util/auto_ptr/4.cc
! ae886cb6835f432eadd6736e364304c0  libstdc++-v3/testsuite/20_util/auto_ptr/5.cc
! c15e6b3d7c7bacb3de178861d8b19745  libstdc++-v3/testsuite/20_util/auto_ptr/6.cc
! c8eb159622af3379d80a7ff6dbfb413b  libstdc++-v3/testsuite/20_util/auto_ptr/7.cc
! 972c0ccc1f5427f943ab2251a7ae95ce  libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc
! abf81655129d7d4a3d171866cd91d462  libstdc++-v3/testsuite/20_util/auto_ptr/requirements/explicit_instantiation/1.cc
! 15f34bc9397ed65f726608db85010ae7  libstdc++-v3/testsuite/20_util/bad_function_call/cons_virtual_derivation.cc
! f4f03bafd83ce1cca00fe1a989a542fa  libstdc++-v3/testsuite/20_util/bad_function_call/what.cc
! 607cfeaeda2f05cee57f528d6499869a  libstdc++-v3/testsuite/20_util/bind/35569.cc
! 202b36ae45f2cfd9bef718595eaa6b1e  libstdc++-v3/testsuite/20_util/bind/38889.cc
! bde0bd273b76c8e3652f114367b06d6f  libstdc++-v3/testsuite/20_util/bind/42593.cc
! cb6a4b8ffe88a2602a4a8e6e057b43dc  libstdc++-v3/testsuite/20_util/bind/45924.cc
! 3becaf018fd3ab4214a1258ec060dca7  libstdc++-v3/testsuite/20_util/bind/48698.cc
! d83e730d914d2933411a07fb7203c4ba  libstdc++-v3/testsuite/20_util/bind/49058_1.cc
! 62904729df4475609daeed7a6b0cab4e  libstdc++-v3/testsuite/20_util/bind/49058_2.cc
! 2a99f3295a021e79dd7d88c890c3bc88  libstdc++-v3/testsuite/20_util/bind/57899.cc
! 9cb0e1022640d84357b24e1f70c0627f  libstdc++-v3/testsuite/20_util/bind/60497.cc
! b4cc4161a11ef2d134c29d8abb9d3b38  libstdc++-v3/testsuite/20_util/bind/68912.cc
! 6034d6ba545a17eac17c4ecd60b2cbaa  libstdc++-v3/testsuite/20_util/bind/79798.cc
! c3bc82c2a4c2942ab3197b02f41db153  libstdc++-v3/testsuite/20_util/bind/83427.cc
! be3327b5fb01863ef9a903e43ca66167  libstdc++-v3/testsuite/20_util/bind/91371.cc
! 9e783627172973c0d7ecea59a9dcc474  libstdc++-v3/testsuite/20_util/bind/all_bound.cc
! ef388a98c02b5f0512a8edc4131178d9  libstdc++-v3/testsuite/20_util/bind/constexpr.cc
! f24ef66222c5db60d8bba755c741805c  libstdc++-v3/testsuite/20_util/bind/conv_result.cc
! a09cc50b33219a28c9288fdf8a20e4a0  libstdc++-v3/testsuite/20_util/bind/cv_quals.cc
! 8fe6aa04c7f803409a60f51730852f87  libstdc++-v3/testsuite/20_util/bind/cv_quals_2.cc
! 63fc0d2fa25414d35f794262c7886281  libstdc++-v3/testsuite/20_util/bind/cv_quals_3.cc
! e51b8eba519218f9dd52a22d3ae960d0  libstdc++-v3/testsuite/20_util/bind/is_placeholder_v.cc
! f4229dee791b024bb8699da45f7ac896  libstdc++-v3/testsuite/20_util/bind/move.cc
! 1538c4b5cc1842245ae087bbdb9d3b84  libstdc++-v3/testsuite/20_util/bind/nested.cc
! 02afa4ecc1a1e5908804df3509d4cbc5  libstdc++-v3/testsuite/20_util/bind/placeholders.cc
! 4f61c4ea60eca64b5ea631b4db216aa0  libstdc++-v3/testsuite/20_util/bind/ref.cc
! b6621c31fb87afd1f3c5f9c87c7d7215  libstdc++-v3/testsuite/20_util/bind/ref2.cc
! 6aacb5aa912bc906c4d2963776aa9a69  libstdc++-v3/testsuite/20_util/bind/ref_neg.cc
! ad51f76f92115fec03463c69a2309e8d  libstdc++-v3/testsuite/20_util/bind/refqual.cc
! 9e14912bdc2a5bc1ab28c6ff4e4f7b24  libstdc++-v3/testsuite/20_util/bind/socket.cc
! 4661c17efebe292c3ff0f2bdfea74b87  libstdc++-v3/testsuite/20_util/bool_constant/requirements.cc
  7b45f3d65401a77e7c8feec605d0e13f  libstdc++-v3/testsuite/20_util/common_reference/100894.cc
! f622668a4c35fcef294e3caf26811077  libstdc++-v3/testsuite/20_util/common_reference/requirements/alias_decl.cc
! 415c9655ce786c9705ac1f2c679e8d1e  libstdc++-v3/testsuite/20_util/common_reference/requirements/explicit_instantiation.cc
! 26138a4790627b72ab13000211971d04  libstdc++-v3/testsuite/20_util/common_reference/requirements/typedefs.cc
! 999b246f0be8a98eefb40899b3d9f17b  libstdc++-v3/testsuite/20_util/common_type/requirements/alias_decl.cc
! ed4265d02bb9c8e183cb33cb5f3e3dad  libstdc++-v3/testsuite/20_util/common_type/requirements/explicit_instantiation.cc
! f01e0735d4b7c903731d82c5b7b7fb31  libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_1.cc
! b5845f5f6eef5d51e8300e8b9682b65f  libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_2.cc
! 6120970692baab7ea63065224096f8e5  libstdc++-v3/testsuite/20_util/common_type/requirements/typedefs-1.cc
! ec06534cb1d1b809fc74fddbfd797944  libstdc++-v3/testsuite/20_util/common_type/requirements/typedefs-2.cc
! 2ddbb3795eb1089cdebdbc8d8fd32fc4  libstdc++-v3/testsuite/20_util/conditional/requirements/alias_decl.cc
! d2a617b4f6e9127b790d34f60c1233a7  libstdc++-v3/testsuite/20_util/conditional/requirements/explicit_instantiation.cc
! 8882a65bfeb8c6c602fda3d3565414a1  libstdc++-v3/testsuite/20_util/conditional/requirements/typedefs.cc
! 96c275423771da8b3f8f2c9f921437fc  libstdc++-v3/testsuite/20_util/decay/requirements/alias_decl.cc
! 5afc8b5c0a04137ad4133adc1aad5c5c  libstdc++-v3/testsuite/20_util/decay/requirements/explicit_instantiation.cc
! f07e9d46dee6526fb9c0fa96a2836168  libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc
! 3996ae85c53cc3e31cf0b61d6e531b43  libstdc++-v3/testsuite/20_util/declval/requirements/1.cc
! 9a5210345be4dde7ba93cb65a10ea626  libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
! 549db046bb2b4c762f5beb02c954821e  libstdc++-v3/testsuite/20_util/default_delete/48631_neg.cc
! 121ed09f89185e50fef4223394c067b1  libstdc++-v3/testsuite/20_util/default_delete/cons/constexpr.cc
! ae540d904ec0b0edc3f254076a1607c7  libstdc++-v3/testsuite/20_util/default_delete/void_neg.cc
! c239e64c89b941c1031dcfb9c401a4aa  libstdc++-v3/testsuite/20_util/duration/arithmetic/1.cc
! bffcd48d0570eb9828adec392d4b3de6  libstdc++-v3/testsuite/20_util/duration/arithmetic/2.cc
! 14d102e42b49b11ef8bf98b7bc38162e  libstdc++-v3/testsuite/20_util/duration/arithmetic/58850.cc
! 04b379f2f557566a75d65ffd196c7f53  libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr.cc
! 282a6b6dcae66f60e07e764daadc69ef  libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr_c++17.cc
! 266a9d9d46ab67091ca0e2522782311d  libstdc++-v3/testsuite/20_util/duration/arithmetic/dr2020.cc
! f0bbd3d08b2c44e19c1c4c87f0fef4b8  libstdc++-v3/testsuite/20_util/duration/arithmetic/dr3050.cc
! 84262430168ce80e657434b0eca8d423  libstdc++-v3/testsuite/20_util/duration/arithmetic/dr934-1.cc
! 92a98cc859bc1725d87d77a866a8a1e1  libstdc++-v3/testsuite/20_util/duration/arithmetic/dr934-2.cc
! a3c2ded1903092dee22e4b128b2df43b  libstdc++-v3/testsuite/20_util/duration/comparison_operators/1.cc
! 57c8858ec45d47a186ddd86a2ae56b1a  libstdc++-v3/testsuite/20_util/duration/comparison_operators/constexpr.cc
! 4bdafa1349f1acf3bc15cf2dd3701228  libstdc++-v3/testsuite/20_util/duration/comparison_operators/three_way.cc
! 04f3aec8e9e5e83674e088bfd0878a6c  libstdc++-v3/testsuite/20_util/duration/cons/1.cc
! eec98ce001eaca337027457dcdd0abdf  libstdc++-v3/testsuite/20_util/duration/cons/1_neg.cc
! 78c5194acd523eb8bb70dc40bba37506  libstdc++-v3/testsuite/20_util/duration/cons/2.cc
! 4ba4a976138119dfa69c6a5c3089f6c1  libstdc++-v3/testsuite/20_util/duration/cons/54025.cc
! b5636d1084e16acd030ca0316edb164d  libstdc++-v3/testsuite/20_util/duration/cons/constexpr.cc
! 80b58ee6285a00cc18e17d9d9bc09157  libstdc++-v3/testsuite/20_util/duration/cons/dr1177.cc
! 6386077363bb13acfeaa0def08f6e5b4  libstdc++-v3/testsuite/20_util/duration/cons/dr2094.cc
! 8da81f3f1f280b59e97127162d8483b3  libstdc++-v3/testsuite/20_util/duration/cons/dr3050.cc
! 5584f0e1d3da88b18c3ff8d136283ec8  libstdc++-v3/testsuite/20_util/duration/cons/dr974_neg.cc
! c9b63103feccf037e6a9876be472eec7  libstdc++-v3/testsuite/20_util/duration/literals/61166.cc
! e7225cd5b5292c85be660357ec3ac331  libstdc++-v3/testsuite/20_util/duration/literals/65499.cc
! 825a87163e261d236e02ab50942422b9  libstdc++-v3/testsuite/20_util/duration/literals/84671.cc
  f11b5a7d64db419bf2305c0f433c638b  libstdc++-v3/testsuite/20_util/duration/literals/ns_detail.cc
! eae29a5fb5256d7ffc0d7020aaa72a1f  libstdc++-v3/testsuite/20_util/duration/literals/range_neg.cc
! 93c8e966a159421640cdd28884d2bc1b  libstdc++-v3/testsuite/20_util/duration/literals/types.cc
! 56e390ec9d076658ce04bbcb77002f61  libstdc++-v3/testsuite/20_util/duration/literals/values.cc
! cc36f23f1d73ca35deb65062c084b3c0  libstdc++-v3/testsuite/20_util/duration/requirements/constexpr_functions.cc
! 81e3e413f446af4bbd1ae9bbc7dba3c8  libstdc++-v3/testsuite/20_util/duration/requirements/explicit_instantiation/explicit_instantiation.cc
! 7708ba31c65f168972b1c954b266d902  libstdc++-v3/testsuite/20_util/duration/requirements/noexcept.cc
! fc9376cd50b39801c89800df02a371a8  libstdc++-v3/testsuite/20_util/duration/requirements/reduced_period.cc
! 135f2f9cdd11d9143fd92d1268887974  libstdc++-v3/testsuite/20_util/duration/requirements/sfinae_friendly_1.cc
! b51084424ab4cee0ae4c3f989b8fd1c0  libstdc++-v3/testsuite/20_util/duration/requirements/treat_as_floating_point_v.cc
! 166f4f1631c6c8abd84d685ad2d345c3  libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc
! cbdf7538c4361a2607d10881eeffffab  libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc
! 0b3d30ff1c47f0c5db9a136980aa4341  libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc
! 0170b1b215999e41103ceab614df8c0c  libstdc++-v3/testsuite/20_util/duration_cast/constexpr.cc
! e9e5ff98e41f51bc1a8f32d358f26719  libstdc++-v3/testsuite/20_util/duration_cast/rounding.cc
! baa1449ebd7de3243374edef2752f2f8  libstdc++-v3/testsuite/20_util/duration_cast/rounding_c++11.cc
! 09b4bf1c154d85c7232396978948be02  libstdc++-v3/testsuite/20_util/enable_if/requirements/alias_decl.cc
! 9131f0633e9205a6ee91e03c9bc0de2e  libstdc++-v3/testsuite/20_util/enable_if/requirements/explicit_instantiation.cc
! f4942d2e9f083015368156272559b2d2  libstdc++-v3/testsuite/20_util/enable_if/requirements/typedefs.cc
! 6e30493e480ac860a9c9e8f9ce482098  libstdc++-v3/testsuite/20_util/enable_if/requirements/typedefs_neg.cc
! a6443fdc397c92d0f7c64da1a0b3164c  libstdc++-v3/testsuite/20_util/enable_shared_from_this/56383.cc
! 75f8452f541e8afecae999457f7e6482  libstdc++-v3/testsuite/20_util/enable_shared_from_this/89303.cc
! 334def83be46190897f593f4fc370236  libstdc++-v3/testsuite/20_util/enable_shared_from_this/cons/constexpr.cc
! 1bf4f6e5aea3335b9b47df676a52020e  libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/assign.cc
! 526909794809b8b9360c6e026b499b62  libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/const.cc
! 6db677ea58ed3972f3dd1009de7cdf5b  libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/reinit.cc
! c59a49e8fd4d2841bf5fbb488af3cafe  libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/unique_ptr.cc
! e582090a1a9330b31279432062b5bd26  libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc
! d88931a7796d02c29a4b18b318135d67  libstdc++-v3/testsuite/20_util/enable_shared_from_this/requirements/explicit_instantiation.cc
! 6b3812890fa5008e9dca751a14d3a38e  libstdc++-v3/testsuite/20_util/exchange/1.cc
! 6e9b35718e888a33c12f78018e80b255  libstdc++-v3/testsuite/20_util/exchange/constexpr.cc
! 018dc5aa6ecda61289bae29b039caa32  libstdc++-v3/testsuite/20_util/extent/requirements/explicit_instantiation.cc
! daa117a2da905ad06c1deee104cacd3d  libstdc++-v3/testsuite/20_util/extent/requirements/typedefs.cc
! 298fc1c006982f40b9038dfa7a5a12f4  libstdc++-v3/testsuite/20_util/extent/value.cc
! 2082b529b20f461383fb2ea0b45910da  libstdc++-v3/testsuite/20_util/forward/1.cc
! b9ebb4b63e2d315728ec842428c698c7  libstdc++-v3/testsuite/20_util/forward/1_neg.cc
! 2d64e847c77b2d588a0ccd9bb45ce6dd  libstdc++-v3/testsuite/20_util/forward/a.cc
! d25215613f40955f5a7fd442fb131458  libstdc++-v3/testsuite/20_util/forward/b.cc
! 690dc828b482a82a00151560bc0f77b7  libstdc++-v3/testsuite/20_util/forward/c_neg.cc
! 51e689c4fa06db0a2cae228687363af2  libstdc++-v3/testsuite/20_util/forward/d.cc
! e3ad3ddb332d6e3943018f602b2bb29e  libstdc++-v3/testsuite/20_util/forward/e.cc
! 471d21c1cda8ebf7e5d14446f70300da  libstdc++-v3/testsuite/20_util/forward/f_neg.cc
! 6305321239f725beb7a0f5d4c13e2677  libstdc++-v3/testsuite/20_util/forward/requirements/explicit_instantiation.cc
! 119831d0cdee2eea498cb43e73c03fe9  libstdc++-v3/testsuite/20_util/from_chars/1.cc
! 89452d2c4edd9cf5ebef1e7b76e6cae9  libstdc++-v3/testsuite/20_util/from_chars/1_c++20_neg.cc
! 40813b675a8962c145ce6313c1044852  libstdc++-v3/testsuite/20_util/from_chars/1_neg.cc
! a6110c4b49ec7f62741f6522e32a6c6b  libstdc++-v3/testsuite/20_util/from_chars/2.cc
! 379a14c4cd58776231fa28677fddc4b6  libstdc++-v3/testsuite/20_util/from_chars/3.cc
! f3ccdf4af13dcd90b2d482870fb5c408  libstdc++-v3/testsuite/20_util/from_chars/4.cc
! 7c06b66f04ab4eec4b2c5fddbedb2ef7  libstdc++-v3/testsuite/20_util/from_chars/5.cc
! 876e65536f484bd6edb44cae8b8e1073  libstdc++-v3/testsuite/20_util/from_chars/6.cc
! f9142ca7542677ebcdbdfcd2a8c64199  libstdc++-v3/testsuite/20_util/from_chars/compare.cc
! a7e1719aa31ba0787fd23e6109145fbd  libstdc++-v3/testsuite/20_util/from_chars/requirements.cc
! e96c312728ed1f0052831242b1e0499c  libstdc++-v3/testsuite/20_util/function/1.cc
! 97923bb98b81c72f4e8849de83c22bd6  libstdc++-v3/testsuite/20_util/function/10.cc
! 2e2712ce9cea35684fcdd4fb124d4c84  libstdc++-v3/testsuite/20_util/function/2.cc
! ebdcbaf5bfbe4c58d5dc08a93e5c265b  libstdc++-v3/testsuite/20_util/function/3.cc
! c1111357f10cd79ce5dd15aa0c4d80e6  libstdc++-v3/testsuite/20_util/function/4.cc
! 83e4f96ccca027120fa657b1962be8e8  libstdc++-v3/testsuite/20_util/function/43397.cc
! 06bb5069518c591d03a1a249b8b25c83  libstdc++-v3/testsuite/20_util/function/48541.cc
! b67968a4c35ab94dfe33b5804fcaf014  libstdc++-v3/testsuite/20_util/function/5.cc
! 07e0e76d1c2180bb6bb73c087be9347c  libstdc++-v3/testsuite/20_util/function/58569.cc
! 6c3cd0e25c726b64ccd3b8628e7e8361  libstdc++-v3/testsuite/20_util/function/6.cc
! 273c34775cf9af081a47a8c88621ec5a  libstdc++-v3/testsuite/20_util/function/60594.cc
! 0460b6cd523c01656f5af8f3f0d0af52  libstdc++-v3/testsuite/20_util/function/63840.cc
! 42d4489439defd6a12af7fd81d36efe5  libstdc++-v3/testsuite/20_util/function/65760.cc
! b7659674575b55ae28ae26208c06f86c  libstdc++-v3/testsuite/20_util/function/68995.cc
! 217be4d5bfe07ce667024b28f4a014f5  libstdc++-v3/testsuite/20_util/function/69222.cc
! 03cfd8b6ffe676644b846fe73d51ee4b  libstdc++-v3/testsuite/20_util/function/7.cc
! 96d921c2408761c0a5516d6efaf8e961  libstdc++-v3/testsuite/20_util/function/77322.cc
! 80e67d1d6c88fdcced6ddcd4eb961b3b  libstdc++-v3/testsuite/20_util/function/8.cc
! cf62ca28be8b88a47b8cf971822d9144  libstdc++-v3/testsuite/20_util/function/9.cc
! 1b5585f1e65901b35b1ba1d00867ed46  libstdc++-v3/testsuite/20_util/function/91456.cc
! 850abcae89e2cf4bab20c24e79db157d  libstdc++-v3/testsuite/20_util/function/assign/move.cc
! a64ab80d842e951c373cd4d16df73af7  libstdc++-v3/testsuite/20_util/function/assign/move_target.cc
! f6e5afd1d31b7aff453bbbd6c2121329  libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc
! 3ef1d08e329263c96c8081c3d74f2eb9  libstdc++-v3/testsuite/20_util/function/cons/55320.cc
! eaa6839a699600b5a99bbaaa55f47556  libstdc++-v3/testsuite/20_util/function/cons/57465.cc
! 87a93fd6f2101578f52adefd5117dc12  libstdc++-v3/testsuite/20_util/function/cons/72820.cc
! 7c2add666c179c76abbcb6adde058817  libstdc++-v3/testsuite/20_util/function/cons/addressof.cc
! 5eb2163115862edede72379dd2ba154f  libstdc++-v3/testsuite/20_util/function/cons/callable.cc
! bc73f923afef33941b5cb37a6433d09a  libstdc++-v3/testsuite/20_util/function/cons/deduction.cc
  7e9deedb255c7113221019d32e10c6ab  libstdc++-v3/testsuite/20_util/function/cons/lwg2774.cc
! 664a5449951c8654f642774e8182b3a6  libstdc++-v3/testsuite/20_util/function/cons/move.cc
! 10dcfb92be128afd10ad0ceeb7b73968  libstdc++-v3/testsuite/20_util/function/cons/move_target.cc
  cc7847b76d24c16f35c869b3bb80868e  libstdc++-v3/testsuite/20_util/function/cons/noexcept.cc
! e59f93cab5834149979fdde2d9c80143  libstdc++-v3/testsuite/20_util/function/cons/non_copyconstructible.cc
! efa81f1461b098de8b83762b823f381f  libstdc++-v3/testsuite/20_util/function/cons/refqual.cc
! e0f31486735849e79af822e97c40f893  libstdc++-v3/testsuite/20_util/function/invoke/forwarding.cc
! 023b3c2803556f0dbb3d28831239ca31  libstdc++-v3/testsuite/20_util/function/invoke/move_only.cc
! de7da92782b74c2892a86aaa555b5a57  libstdc++-v3/testsuite/20_util/function/null_pointer_comparisons.cc
! e91fdb41a4e4cfa15e250db073ad94dc  libstdc++-v3/testsuite/20_util/function/requirements/explicit_instantiation.cc
! 27c59e84ea196d740361c1dc71d12cbb  libstdc++-v3/testsuite/20_util/function/target_no_rtti.cc
! a634e4e0d97820180efb0dbdec08ba8a  libstdc++-v3/testsuite/20_util/function_objects/83607.cc
! bdd68490d8c01e7aba32cace755ef834  libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc
! 585c90d0aa3c6acb937e3c62b2a92078  libstdc++-v3/testsuite/20_util/function_objects/bind_front/2.cc
! 92284f472595f939febbab9a06f513f0  libstdc++-v3/testsuite/20_util/function_objects/bind_front/97101.cc
! d54592ed6214e0579ec1b657ea19a610  libstdc++-v3/testsuite/20_util/function_objects/bind_front/constexpr.cc
! a75ed32b273893981943843dbf7adfbb  libstdc++-v3/testsuite/20_util/function_objects/binders/1.cc
! 592aa438ad4494b4f63adf67715ad169  libstdc++-v3/testsuite/20_util/function_objects/binders/3113.cc
! 39e42433878d8edf56dbd423b74839ad  libstdc++-v3/testsuite/20_util/function_objects/comparisons.cc
! a6c566307f7a75e5eb8c842e4860511c  libstdc++-v3/testsuite/20_util/function_objects/comparisons_pointer.cc
! 094efca80f1a00eebb8cc94bd4dfa5b4  libstdc++-v3/testsuite/20_util/function_objects/comparisons_void.cc
! 5224d4c1fb3c9d7c7161a3104d1ce983  libstdc++-v3/testsuite/20_util/function_objects/constexpr.cc
! 08b2d16cb1953b078f045ec12b74448f  libstdc++-v3/testsuite/20_util/function_objects/constexpr_searcher.cc
! b8c1a06744f48d117c2e1921698e0507  libstdc++-v3/testsuite/20_util/function_objects/dr660.cc
! 0defe7e29bd2adf3c7f84b179d848f90  libstdc++-v3/testsuite/20_util/function_objects/identity/1.cc
! 70d5f49ffeced59deaa267053d40a226  libstdc++-v3/testsuite/20_util/function_objects/invoke/1.cc
! de42b887f28be59d393364b56096ac18  libstdc++-v3/testsuite/20_util/function_objects/invoke/2.cc
! b3f17272b74d3475996d0e309dc78811  libstdc++-v3/testsuite/20_util/function_objects/invoke/3.cc
! 5a4c879d174c9414690358c56a0452d0  libstdc++-v3/testsuite/20_util/function_objects/invoke/59768.cc
! c46d1fd426e112f69e7f7461ec6d0f6d  libstdc++-v3/testsuite/20_util/function_objects/invoke/constexpr.cc
! 4af134ad86d10b999c48c68e2af9e88d  libstdc++-v3/testsuite/20_util/function_objects/invoke/ref_ext.cc
! 074ff619d4c22736e0e37a44b0a64a6f  libstdc++-v3/testsuite/20_util/function_objects/invoke/version.cc
! 104ddc7a70c5a18ccaabe002976813c5  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/55463.cc
! e983c2cdc73aefb22d54a74b6f256df3  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/55908.cc
! d6b7537c7aae06d6897baf21aa2ac6ef  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/68982.cc
! ef7013d75e389a4a76a614dd41cbe441  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/80478.cc
! 9c09ba5a0dfc93034d745d3b14fbe2bd  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/adl.cc
! 5ffde1c33bfc0c1df37ac473957bb6b1  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/constexpr.cc
! cabda01abc220c68522f774d2450a9c4  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/forward.cc
! 0aaab47ae61b2ed7a70e475ce6fd6270  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/refqual.cc
! d17cf275616a8c473722f11c2b130a69  libstdc++-v3/testsuite/20_util/function_objects/not_fn/1.cc
! 3afdfe9a2097cf01d3dae675d1c7ccf2  libstdc++-v3/testsuite/20_util/function_objects/not_fn/87538.cc
! c08880f96a757280025c19b18d0a8bec  libstdc++-v3/testsuite/20_util/function_objects/not_fn/constexpr.cc
! 37b75d811c487b2c61614abda594dd66  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/equal_to.cc
! c09d26239fcd60966e280ae6fa737a90  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/greater.cc
! ae13809717a755eaf6db3d1abc5c4d87  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/greater_equal.cc
! 52dff2dcccc9143e7536133d6691c3d5  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/less.cc
! bc3f83937a862e1b9bf726ad07eee7c6  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/less_equal.cc
! 36c7e25fd78fe269cdcacaa2a008ede5  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/lwg3530.cc
! 9ec1b800b9f8878cb5f185897018c8bb  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/not_equal_to.cc
! acaae8a51cf97ef4a65f07f563cac0d7  libstdc++-v3/testsuite/20_util/function_objects/searchers.cc
! 874b20fb79ba33c5aa90c30ce1ed8f51  libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/explicit_instantiation.cc
! 07a5bacd1665e832768cabf80f27737b  libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/typedefs.cc
! 3c4fc215903e9792eb699b3921d1b139  libstdc++-v3/testsuite/20_util/has_unique_object_representations/value.cc
! 18597d64826a9cefb5ef92b17a4983b6  libstdc++-v3/testsuite/20_util/has_virtual_destructor/requirements/explicit_instantiation.cc
! 43fb854986fbc39581d4f4655aee352e  libstdc++-v3/testsuite/20_util/has_virtual_destructor/requirements/typedefs.cc
! d3acb2eea307a47061e09ecceb689f6a  libstdc++-v3/testsuite/20_util/has_virtual_destructor/value.cc
! 2bc33347d129d51ff84ea5ed31f46e45  libstdc++-v3/testsuite/20_util/hash/52931.cc
! a797e93e073c1faf5fb3777e382fb9be  libstdc++-v3/testsuite/20_util/hash/60970.cc
! 37ef4ae91073e7316f2700c6c92a1963  libstdc++-v3/testsuite/20_util/hash/84998.cc
! 94aa7221a6366423784ae4ba316b98a3  libstdc++-v3/testsuite/20_util/hash/89629.cc
! 1f2615a9a7536859d65d7d20990baf7a  libstdc++-v3/testsuite/20_util/hash/chi2_q_bit_flip_set.cc
! 79cb3aa90d5a58d74c03c9370f6a25ac  libstdc++-v3/testsuite/20_util/hash/chi2_q_bit_string_set.cc
! ba6a4b1d958ad23f197d5af23dde5004  libstdc++-v3/testsuite/20_util/hash/chi2_q_document_words.cc
! 0b87205adddbbff000df100248e41004  libstdc++-v3/testsuite/20_util/hash/chi2_q_numeric_pattern_set.cc
! 0b4c7c5af7c55aa9758ea57ffd031577  libstdc++-v3/testsuite/20_util/hash/chi2_q_uniform_random.cc
! 228d05c65f665e4c3538f139fa3784f0  libstdc++-v3/testsuite/20_util/hash/chi2_quality.h
! f33f165c45dc0e5aa10e09bc62dafb50  libstdc++-v3/testsuite/20_util/hash/nullptr.cc
! 35c7e017fef650b83bd1fa4a888146d2  libstdc++-v3/testsuite/20_util/hash/operators/size_t.cc
! f4c925ad6a38f720cca03d646e99d3eb  libstdc++-v3/testsuite/20_util/hash/quality.cc
! a3b6d8ea33fca377de442091052fb3ad  libstdc++-v3/testsuite/20_util/hash/requirements/explicit_instantiation.cc
! a4dd7efa3df4b430e951c8f74b5685d4  libstdc++-v3/testsuite/20_util/headers/cstdlib/functions_std.cc
! 3cabefdd86312dd3fca6ceb68ed1f17c  libstdc++-v3/testsuite/20_util/headers/cstring/functions_std.cc
! 585129c451ae7eda763b895a4807d13a  libstdc++-v3/testsuite/20_util/headers/cstring/macros.cc
! e025f8ff19faaedbbdca0c9f69779c63  libstdc++-v3/testsuite/20_util/headers/cstring/types_std.cc
! 24e6d8853810feb667b33a4ed1d2962b  libstdc++-v3/testsuite/20_util/headers/ctime/functions_std.cc
! 799dbab23b9089855c633204a4915b61  libstdc++-v3/testsuite/20_util/headers/ctime/macros.cc
! dfffc1463479973ad1050023a528463d  libstdc++-v3/testsuite/20_util/headers/ctime/types_std.cc
! e3e73bb1107b41c31aa9811fb34f7053  libstdc++-v3/testsuite/20_util/headers/functional/synopsis.cc
! f7c14272401ed4e7a49ff0a38d31281d  libstdc++-v3/testsuite/20_util/headers/functional/types_std_c++0x.cc
! f492ac6e62ea38857c7acd31b9db6c00  libstdc++-v3/testsuite/20_util/headers/functional/using_namespace_std_placeholders.cc
! 777f1086a40f2e4283eeeff3f1d5f472  libstdc++-v3/testsuite/20_util/headers/memory/synopsis.cc
! 42c846f3a7e686424a9f70c0310b0ddb  libstdc++-v3/testsuite/20_util/headers/memory/types_std_c++0x.cc
! 8d345546532418c775d96a8365cef4f4  libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc
! 0706569a991d632238b138b5b1f963ec  libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x.cc
! 1c9da3a0e75a49c7a2885251c3535ce0  libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc
! 609c7892363e47fbcfc1b4d95de46ee4  libstdc++-v3/testsuite/20_util/headers/utility/synopsis.cc
! 7aa1ee38274adb91881b14bcf213f0eb  libstdc++-v3/testsuite/20_util/headers/utility/using_namespace_std_rel_ops.cc
! e3fe8e66404610f1b8b544429af452e4  libstdc++-v3/testsuite/20_util/in_place/requirements.cc
! d3cc1c441c25efc27fd036b387be9318  libstdc++-v3/testsuite/20_util/integer_comparisons/1.cc
! 42deea84c1e5f4bcb12dc3be5f94e559  libstdc++-v3/testsuite/20_util/integer_comparisons/2.cc
! d0d1654776dfccff0809ac830a8ed639  libstdc++-v3/testsuite/20_util/integer_comparisons/equal.cc
! 677741b8ec87de8ab0d685b43bb7ed8c  libstdc++-v3/testsuite/20_util/integer_comparisons/equal_neg.cc
  c6250601e3e7183f7bd3726fdd8c1203  libstdc++-v3/testsuite/20_util/integer_comparisons/greater.cc
! 5fd145478b104e494f38be141565346c  libstdc++-v3/testsuite/20_util/integer_comparisons/greater_equal.cc
! cc2c834d24fde49e9b39d5fdc21a1036  libstdc++-v3/testsuite/20_util/integer_comparisons/greater_equal_neg.cc
! 73941640eda6ad80833bff73ab600f99  libstdc++-v3/testsuite/20_util/integer_comparisons/greater_neg.cc
! 1ba63da49f446aa61ae4eece9dcdf0e4  libstdc++-v3/testsuite/20_util/integer_comparisons/in_range.cc
! 3a808b88ff8bc53eebb599b8846d8ca9  libstdc++-v3/testsuite/20_util/integer_comparisons/in_range_neg.cc
! 41f8e6faea974f81048b7e7b2703e87b  libstdc++-v3/testsuite/20_util/integer_comparisons/less.cc
! b8cc0f425b7279d2a7bb8dcff88e0079  libstdc++-v3/testsuite/20_util/integer_comparisons/less_equal.cc
! ebd1e27c1fabfae2ef9106e1af190bd0  libstdc++-v3/testsuite/20_util/integer_comparisons/less_equal_neg.cc
! fe02c44fa83bf1abd4e8e421763db1c3  libstdc++-v3/testsuite/20_util/integer_comparisons/less_neg.cc
! 838931508535aea3cd86c8c312864fc8  libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal.cc
! 677741b8ec87de8ab0d685b43bb7ed8c  libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal_neg.cc
! 40f5e1f8a5ca516f07c6130a54751e24  libstdc++-v3/testsuite/20_util/integer_sequence/intseq.cc
! 79f7cfe5881b0b28786f2b954c1f68b8  libstdc++-v3/testsuite/20_util/integer_sequence/requirements/typedefs.cc
! cb6a4a4c95418eeed0f87f65e932d1bc  libstdc++-v3/testsuite/20_util/integral_constant/call_operator.cc
! 5913c1f46d1efe34bc33bf1b27f30367  libstdc++-v3/testsuite/20_util/integral_constant/operator_value_type.cc
! 135c20ad21126813ff94e9edc51ec9a7  libstdc++-v3/testsuite/20_util/integral_constant/requirements/constexpr_data.cc
! 31a042c0c8c2a188c4259ec741064f7f  libstdc++-v3/testsuite/20_util/integral_constant/requirements/explicit_instantiation.cc
! 8ec56c794de8cb91acdbe94eadb1f0f8  libstdc++-v3/testsuite/20_util/integral_constant/requirements/typedefs.cc
! 3456d847976ccf71a49950615b183109  libstdc++-v3/testsuite/20_util/integral_constant/static_definition.cc
! 66f0408909da52ea8254c17cce80dab1  libstdc++-v3/testsuite/20_util/integral_constant/true_false_type_typedefs.cc
! 2abf8ca38836eb01ab96c862c15b121c  libstdc++-v3/testsuite/20_util/integral_constant/true_false_value.cc
! d987e0752db4242b8deedbd340a2baa4  libstdc++-v3/testsuite/20_util/invoke_result/incomplete_args_neg.cc
! b816ed53586535aeacadb58a470d345f  libstdc++-v3/testsuite/20_util/invoke_result/incomplete_neg.cc
! e2ac49a14d9055787d97bbec8f19c1d7  libstdc++-v3/testsuite/20_util/is_abstract/incomplete_neg.cc
! c133a9f27c9f4b66ad7e07480b31c3e8  libstdc++-v3/testsuite/20_util/is_abstract/requirements/explicit_instantiation.cc
! a00696fff4b9dd9c75881d1961aaafab  libstdc++-v3/testsuite/20_util/is_abstract/requirements/typedefs.cc
! 01471015cbc30f0d871b57c88515353e  libstdc++-v3/testsuite/20_util/is_abstract/value.cc
! 0c20f99c491a59fd68a0f881abbdafbb  libstdc++-v3/testsuite/20_util/is_aggregate/incomplete_neg.cc
! 8c76e9afb016d01b6b0fe40d8dbb05f5  libstdc++-v3/testsuite/20_util/is_aggregate/requirements/explicit_instantiation.cc
! 172792cfba35bdfbc6eeb0a6ed56b98d  libstdc++-v3/testsuite/20_util/is_aggregate/requirements/typedefs.cc
! 35309a5bd64aaa33f5e22821d8b4868d  libstdc++-v3/testsuite/20_util/is_aggregate/value.cc
! 568cf4a097460f24d44734c887791a95  libstdc++-v3/testsuite/20_util/is_arithmetic/requirements/explicit_instantiation.cc
! 2da0e9c41fd9198e3d898e9299eac935  libstdc++-v3/testsuite/20_util/is_arithmetic/requirements/typedefs.cc
! 7db964f97760195a4cd40bebc9e87b4f  libstdc++-v3/testsuite/20_util/is_arithmetic/value.cc
! d908d2f4087d72735c929f07493dbcad  libstdc++-v3/testsuite/20_util/is_array/requirements/explicit_instantiation.cc
! 3462215e2cc5f93af9d8353ceaeadbbf  libstdc++-v3/testsuite/20_util/is_array/requirements/typedefs.cc
! 5397c230a79eb970155ff09fbe5e4682  libstdc++-v3/testsuite/20_util/is_array/value.cc
! 7477619def9debbbf4bd1d75a9120c2a  libstdc++-v3/testsuite/20_util/is_assignable/requirements/explicit_instantiation.cc
! 36cc03ff6e196e2f5e183b25b6b712a0  libstdc++-v3/testsuite/20_util/is_assignable/requirements/typedefs.cc
! c3924aa586a12947174ea99d223117c0  libstdc++-v3/testsuite/20_util/is_assignable/value.cc
! 950f9d82a18ca813b2e8a96cfcb6f929  libstdc++-v3/testsuite/20_util/is_base_of/requirements/explicit_instantiation.cc
! 8ae040701d6f9b83fe2ef1eb61dd3433  libstdc++-v3/testsuite/20_util/is_base_of/requirements/typedefs.cc
! f6bcc0d1e40849728276b6e2a06222a7  libstdc++-v3/testsuite/20_util/is_base_of/value.cc
! 43dcd238d749ce7c74bb7c41d9fd3e85  libstdc++-v3/testsuite/20_util/is_bounded_array/requirements/explicit_instantiation.cc
! 10ab1d47587f043d9e83f51a74bfc9a0  libstdc++-v3/testsuite/20_util/is_bounded_array/requirements/typedefs.cc
! 4cc4c586b5a3f7d17b2d40be7beae7af  libstdc++-v3/testsuite/20_util/is_bounded_array/value.cc
! 1a44fd3c6474e8ac88f60c9ee6af33ea  libstdc++-v3/testsuite/20_util/is_class/requirements/explicit_instantiation.cc
! b114290626ed11a6aaaf5060a0f9a1f0  libstdc++-v3/testsuite/20_util/is_class/requirements/typedefs.cc
! 7c157502d03e4fbe8ac6cd41b72bcd8d  libstdc++-v3/testsuite/20_util/is_class/value.cc
! 5688998b3d261b1aa7220bd7b13845b2  libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization.cc
! d13e714d08bee05610a0afad0814017d  libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization_neg.cc
! 9bbf4e85fe787e32ac688b69c084e281  libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/value.cc
! 61f008a95b547beb30f400041e1ac8f1  libstdc++-v3/testsuite/20_util/is_compound/requirements/explicit_instantiation.cc
! 96e3db40bf65515b358d368cf204c537  libstdc++-v3/testsuite/20_util/is_compound/requirements/typedefs.cc
! add178a46e275d81fd5dd8fff41bddce  libstdc++-v3/testsuite/20_util/is_compound/value.cc
! 3024b1cfcfa1f2f7f6216ad5c90a8213  libstdc++-v3/testsuite/20_util/is_const/requirements/explicit_instantiation.cc
! d3543034c0d73b64d0b083ccffe41202  libstdc++-v3/testsuite/20_util/is_const/requirements/typedefs.cc
! 6636fdd743ad650dc91c07543db61037  libstdc++-v3/testsuite/20_util/is_const/value.cc
! d14e1da7e96c04319a714df3a8570d3f  libstdc++-v3/testsuite/20_util/is_constant_evaluated/1.cc
! db7314b434b36bd352c49d46a467ed1f  libstdc++-v3/testsuite/20_util/is_constant_evaluated/noexcept.cc
! b53225c5f7aacc064cf1cb505fde5a79  libstdc++-v3/testsuite/20_util/is_constructible/51185.cc
  a5e184714ddd867798fa94c2ebe2c9fe  libstdc++-v3/testsuite/20_util/is_constructible/68430.cc
! f0c3d97f1bd5fc0d99eb3547ee865ab4  libstdc++-v3/testsuite/20_util/is_constructible/77395.cc
! 2f6e2e772067bd15c048469fe605f60f  libstdc++-v3/testsuite/20_util/is_constructible/80812.cc
! 14549fb56b06be15f4491a2feb3befc1  libstdc++-v3/testsuite/20_util/is_constructible/92878_92947.cc
! 7f17a4fe3e8a8e93a780c68f75be0811  libstdc++-v3/testsuite/20_util/is_constructible/94003.cc
! f8e2f01bacd5202fd8447398178053d0  libstdc++-v3/testsuite/20_util/is_constructible/requirements/explicit_instantiation.cc
! 6a2aca156592d3d0def2e9721af9c6b6  libstdc++-v3/testsuite/20_util/is_constructible/requirements/typedefs.cc
! 64fa29b5a67a6785d1ed15e2924ea3e4  libstdc++-v3/testsuite/20_util/is_constructible/value-2.cc
! f175d6553187052e21ec3d75f07c330f  libstdc++-v3/testsuite/20_util/is_constructible/value.cc
! 851dd494a73121175709c4c6052aa5e4  libstdc++-v3/testsuite/20_util/is_convertible/requirements/explicit_instantiation.cc
! 70ca2d53054dc06008e4e1306941b28b  libstdc++-v3/testsuite/20_util/is_convertible/requirements/typedefs.cc
! f4ae51f94bfb78d99d2ce95a2e566f65  libstdc++-v3/testsuite/20_util/is_convertible/value.cc
! d8af19d35478f2e3c00727b7ed9c4b02  libstdc++-v3/testsuite/20_util/is_copy_assignable/requirements/explicit_instantiation.cc
! c47aa03faf2fc1dca533991c54230a2a  libstdc++-v3/testsuite/20_util/is_copy_assignable/requirements/typedefs.cc
! bccd1b72c610808fb34148e73c3ef4e1  libstdc++-v3/testsuite/20_util/is_copy_assignable/value.cc
! dbfb8737621b842d586c979a6f229ed5  libstdc++-v3/testsuite/20_util/is_copy_constructible/requirements/explicit_instantiation.cc
! 4eb8388c37b308561bb0569a91f2ff68  libstdc++-v3/testsuite/20_util/is_copy_constructible/requirements/typedefs.cc
! 7f0ba60a2ea0fa8cdab2176c48096634  libstdc++-v3/testsuite/20_util/is_copy_constructible/value.cc
! 888584fbabdc1e7070bf3519a6bc5794  libstdc++-v3/testsuite/20_util/is_default_constructible/requirements/explicit_instantiation.cc
! c7fc115a9ca5b78c2cc898a73706459f  libstdc++-v3/testsuite/20_util/is_default_constructible/requirements/typedefs.cc
! 38058d3d3fddb37ed85876e24020e049  libstdc++-v3/testsuite/20_util/is_default_constructible/value.cc
! 2c4726280d2579477ef9111d2e65dc9b  libstdc++-v3/testsuite/20_util/is_destructible/requirements/explicit_instantiation.cc
! 3518f81de0b0979e6fd8622eb00ca410  libstdc++-v3/testsuite/20_util/is_destructible/requirements/typedefs.cc
! 5e2dfe7ca3f0c204bde5b57693abe77b  libstdc++-v3/testsuite/20_util/is_destructible/value.cc
! 3d82c9e49478f8351fdd774d744ff154  libstdc++-v3/testsuite/20_util/is_empty/incomplete_neg.cc
! 322073c55866eca23760fe19d74dbeb4  libstdc++-v3/testsuite/20_util/is_empty/requirements/explicit_instantiation.cc
! f31c17d75d6cf12e892e397aa38a33f7  libstdc++-v3/testsuite/20_util/is_empty/requirements/typedefs.cc
! 6f8ad49bdb25cdd372269955d5537b46  libstdc++-v3/testsuite/20_util/is_empty/value.cc
! 1810f65a789aba89c8e899684f48c737  libstdc++-v3/testsuite/20_util/is_enum/requirements/explicit_instantiation.cc
! 7dc5e1d874ce45412ae50a39e10c051f  libstdc++-v3/testsuite/20_util/is_enum/requirements/typedefs.cc
! 9b8bcf76189636b45a22b84755bd23c6  libstdc++-v3/testsuite/20_util/is_enum/value.cc
! 94f85df88c5f1c4ce1c155181854f024  libstdc++-v3/testsuite/20_util/is_final/incomplete_neg.cc
! dede3e7c6beeccb6b102af703b6ab577  libstdc++-v3/testsuite/20_util/is_final/requirements/explicit_instantiation.cc
! 64429fbeb5c638d238179cea4d39d74d  libstdc++-v3/testsuite/20_util/is_final/requirements/typedefs.cc
! 406282a0b7f7fe8cf84bd938a9924a7f  libstdc++-v3/testsuite/20_util/is_final/value.cc
! 836a72a5669907b69520b7d6fcc11034  libstdc++-v3/testsuite/20_util/is_floating_point/requirements/explicit_instantiation.cc
! 172fe473dffb8e609d1a4afb60f2610d  libstdc++-v3/testsuite/20_util/is_floating_point/requirements/typedefs.cc
! 9633a5e698b0d652b10a41620b047a4c  libstdc++-v3/testsuite/20_util/is_floating_point/value.cc
! d818cf406068b80aa5d993a94484a62f  libstdc++-v3/testsuite/20_util/is_function/24808.cc
! 9cc7742c4312216735f755a2d9ccff49  libstdc++-v3/testsuite/20_util/is_function/35637.cc
! e08c547d50dbc01405b14edafd17b2f4  libstdc++-v3/testsuite/20_util/is_function/91371.cc
! fc6699f392a4eb194cf5f3725dc1be39  libstdc++-v3/testsuite/20_util/is_function/requirements/explicit_instantiation.cc
! a287286cbb900cf1e419a65b0782dfb8  libstdc++-v3/testsuite/20_util/is_function/requirements/typedefs.cc
! 482ffcd098dfe066a8e42ff4bdaee401  libstdc++-v3/testsuite/20_util/is_function/value.cc
! e3cfe687ecb032adb44a5c1ec8600633  libstdc++-v3/testsuite/20_util/is_fundamental/requirements/explicit_instantiation.cc
! 63275bf45066a9f7c5f4a566d29b4c0d  libstdc++-v3/testsuite/20_util/is_fundamental/requirements/typedefs.cc
! 27699a7db33a57dc65a297e1bb9374cf  libstdc++-v3/testsuite/20_util/is_fundamental/value.cc
! 191501a33966299b7302de500b2cd1e8  libstdc++-v3/testsuite/20_util/is_implicitly_default_constructible/requirements/explicit_instantiation.cc
! 2ba4deb21cf15ce26ce11d6ac4a4a6b3  libstdc++-v3/testsuite/20_util/is_implicitly_default_constructible/requirements/typedefs.cc
! 8f1b5f1e11b01797282a39033ecef8bf  libstdc++-v3/testsuite/20_util/is_implicitly_default_constructible/value.cc
! 74f45040e7ddffce123081bdf129a5f8  libstdc++-v3/testsuite/20_util/is_integral/requirements/explicit_instantiation.cc
! a5b78cd250b9a56c5581f8bf17809462  libstdc++-v3/testsuite/20_util/is_integral/requirements/typedefs.cc
! 1c3f51d0a99b345db8705ff7f76424f1  libstdc++-v3/testsuite/20_util/is_integral/value.cc
! 4ed89e749183c9a60947d68fed43fda8  libstdc++-v3/testsuite/20_util/is_invocable/83395.cc
! c0a77c24208627dc2d33d6232cbce867  libstdc++-v3/testsuite/20_util/is_invocable/91456.cc
! 72723e124fc7ddcdf9c72461445043e8  libstdc++-v3/testsuite/20_util/is_invocable/incomplete_args_neg.cc
! fc90f33c14b40f099b85b1242c8ca142  libstdc++-v3/testsuite/20_util/is_invocable/incomplete_neg.cc
! 92eea1a39914af9b127aaea8ae63f338  libstdc++-v3/testsuite/20_util/is_invocable/requirements/explicit_instantiation.cc
! c7ea9225a66aedaf32b754eddcaae048  libstdc++-v3/testsuite/20_util/is_invocable/requirements/explicit_instantiation_ext.cc
! c92f0042d3014d61066d8ca97922792b  libstdc++-v3/testsuite/20_util/is_invocable/requirements/typedefs.cc
! 047de45a905c3639f78c1b402f4db015  libstdc++-v3/testsuite/20_util/is_invocable/requirements/typedefs_ext.cc
! 3244875c037dff0764d9cb59d91da72a  libstdc++-v3/testsuite/20_util/is_invocable/value.cc
! 2920db4bb18b612fa13753f44da15dcd  libstdc++-v3/testsuite/20_util/is_invocable/value_ext.cc
! 0078589d62d4a1e32fb06cccf3d4171a  libstdc++-v3/testsuite/20_util/is_literal_type/deprecated-1z.cc
! b244acd7866c4c84996a7ffd5092a8bf  libstdc++-v3/testsuite/20_util/is_literal_type/requirements/explicit_instantiation.cc
! 170aea2ed3baec54943409def767b7fc  libstdc++-v3/testsuite/20_util/is_literal_type/requirements/typedefs.cc
! 645f9307a25bcc79fc6e6d466d3c4306  libstdc++-v3/testsuite/20_util/is_literal_type/value.cc
! 4fa718e26d42e6934ffd92be6aa90377  libstdc++-v3/testsuite/20_util/is_lvalue_reference/requirements/explicit_instantiation.cc
! a1506449ae205bbb49430051c47124da  libstdc++-v3/testsuite/20_util/is_lvalue_reference/requirements/typedefs.cc
! da1921caa23a43c12418dd0293b5291e  libstdc++-v3/testsuite/20_util/is_lvalue_reference/value.cc
! f5b104ea947e53fa99d54daa33894db2  libstdc++-v3/testsuite/20_util/is_member_function_pointer/91371.cc
! 355cf65fac2059a386dbc2a920d6de08  libstdc++-v3/testsuite/20_util/is_member_function_pointer/requirements/explicit_instantiation.cc
! 10dc743a9c00a7a686f0d5c038c32ff9  libstdc++-v3/testsuite/20_util/is_member_function_pointer/requirements/typedefs.cc
! 6c7317181ef533035dfdce638254ae67  libstdc++-v3/testsuite/20_util/is_member_function_pointer/value.cc
! 4fe06187f48e399dcc5cfb32a28d6a0b  libstdc++-v3/testsuite/20_util/is_member_object_pointer/requirements/explicit_instantiation.cc
! ae93fbf1e9d79d1ba0b2777c697f7f06  libstdc++-v3/testsuite/20_util/is_member_object_pointer/requirements/typedefs.cc
! 5600240438f7ffb8bd8761dc8eac626a  libstdc++-v3/testsuite/20_util/is_member_object_pointer/value.cc
! c100dd920a88b5e5772a991aec08ef42  libstdc++-v3/testsuite/20_util/is_member_pointer/requirements/explicit_instantiation.cc
! 14d9868f1f79dc4923c86a6e93c6fb6e  libstdc++-v3/testsuite/20_util/is_member_pointer/requirements/typedefs.cc
! 959446592c56005dc743ac05ebbfae29  libstdc++-v3/testsuite/20_util/is_member_pointer/value.cc
! f495f1ada6001587eaca39e64ac17fad  libstdc++-v3/testsuite/20_util/is_move_assignable/requirements/explicit_instantiation.cc
! 590bde4bea38f5266a08439865830a60  libstdc++-v3/testsuite/20_util/is_move_assignable/requirements/typedefs.cc
! 88e62c0b2b01e3377ba6f2fffee56a19  libstdc++-v3/testsuite/20_util/is_move_assignable/value.cc
! 4209b3de1bcf90a0b15501fd2bd813f8  libstdc++-v3/testsuite/20_util/is_move_constructible/incomplete_neg.cc
! 0b64a8805805c4a688e80b8aca00e01e  libstdc++-v3/testsuite/20_util/is_move_constructible/requirements/explicit_instantiation.cc
! d7f40810177cc3527fe1934303e3939d  libstdc++-v3/testsuite/20_util/is_move_constructible/requirements/typedefs.cc
! a5cbecb1f6fd9cd2a88f308955589136  libstdc++-v3/testsuite/20_util/is_move_constructible/value.cc
! d1d8477a1c8d2c653545136b672d90a1  libstdc++-v3/testsuite/20_util/is_nothrow_assignable/requirements/explicit_instantiation.cc
! 1ad4ebe78a82246eef4c39e5457f531c  libstdc++-v3/testsuite/20_util/is_nothrow_assignable/requirements/typedefs.cc
! 1a6d17022073e8af3f71ca1c5edbb404  libstdc++-v3/testsuite/20_util/is_nothrow_assignable/value.cc
! 0dc919ce4b29598d7f19a6d316f8a0c5  libstdc++-v3/testsuite/20_util/is_nothrow_constructible/94003.cc
! 5208df134b3cd819199f7f5c5c3df4cc  libstdc++-v3/testsuite/20_util/is_nothrow_constructible/requirements/explicit_instantiation.cc
! 63b1bfabb4689934197f449830a1a2dc  libstdc++-v3/testsuite/20_util/is_nothrow_constructible/requirements/typedefs.cc
! 7bf980463791b4c29536c3ce011abcb6  libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value.cc
! 1f0e13e56c2859c6f9d33d950145dd08  libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value_c++20.cc
! ccec019719d047b45fd7d533d6806083  libstdc++-v3/testsuite/20_util/is_nothrow_convertible/requirements/explicit_instantiation.cc
! 06f14c380966307810d78cfa21154eef  libstdc++-v3/testsuite/20_util/is_nothrow_convertible/requirements/typedefs.cc
! 8e8eeaf825cf5c5f267ace68da9e66f1  libstdc++-v3/testsuite/20_util/is_nothrow_convertible/value.cc
! fe1751d3b300ceb6b2a354ad1ab84ada  libstdc++-v3/testsuite/20_util/is_nothrow_convertible/value_ext.cc
! 92ff60ce1eaeb43657622a57f19538ca  libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/requirements/explicit_instantiation.cc
! a5cb728650f87108206e09da15430b55  libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/requirements/typedefs.cc
! a2fb959a92554bb25f85214c1e20e7d4  libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/value.cc
! 761b1ce263276076f7857915848da14b  libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/requirements/explicit_instantiation.cc
! 7eecf542f09422873e58f526f4ccefd8  libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/requirements/typedefs.cc
! b4da362fdf4c0ea8164dd5ceed8549af  libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/value.cc
! d97eca51e91248b7773ad138660a0c19  libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/requirements/explicit_instantiation.cc
! dbe93962d9e924eb50ec4118ad52e412  libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/requirements/typedefs.cc
! 89074684e73df92e75b2bcbabe8870d9  libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/value.cc
! af2b15dc0413fdf9d9d040d6274aeb49  libstdc++-v3/testsuite/20_util/is_nothrow_destructible/requirements/explicit_instantiation.cc
! 909b086f8ab07d0aaccf6a3bbefae04d  libstdc++-v3/testsuite/20_util/is_nothrow_destructible/requirements/typedefs.cc
! 1e59eeb1d22448a627913928912d6957  libstdc++-v3/testsuite/20_util/is_nothrow_destructible/value.cc
! 3be5b8ea44193cd44fbac61f1e3e1226  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/83395.cc
! 646fe798da0204d769fd7fcf06e2b587  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/incomplete_args_neg.cc
! 3361e0b4fb9e8c826cfdeb5a86cc15cb  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/incomplete_neg.cc
! 0bcbd1e272e4290024ec7bfdeb7eda96  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/requirements/explicit_instantiation.cc
! 9e0f90663288319b353fee68eea8790e  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/requirements/explicit_instantiation_ext.cc
! 8ea356b4e425143413036bf30ac88c35  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/requirements/typedefs.cc
! 72702ab138167cc60abc3e8dd4206021  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/requirements/typedefs_ext.cc
! 5e3dde3fbe9e28de282eba9b8f176ec6  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc
! 0e57d9ec32338e8203a50a4c7224563c  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value_ext.cc
! 17d7f9ce8fb514ae1daf26740b867c5b  libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/incomplete_neg.cc
! 144888873966c4754120b7f3d2da14c3  libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/requirements/explicit_instantiation.cc
! 1088fbb77970bc8deaa318aa56e446f1  libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/requirements/typedefs.cc
! 74974dce04216519a100082aea97dbac  libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/value.cc
! 2e4bef78ec7ed9ef37461ab5ac44db11  libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/requirements/explicit_instantiation.cc
! ba64211d25713ebbd33627846da4f465  libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/requirements/typedefs.cc
! 195a59ed30e917cf3327afef4a6c8f8c  libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/value.cc
! 9558437b39e428fa651e1eccdc9fab6e  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/incomplete_neg.cc
! 42af571ddb107e556b50088331b9c679  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/explicit_instantiation.cc
! 9701df95308c6be905cbe7d1e908a475  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/explicit_instantiation_ext.cc
! b7b3b52d872f176ce83e7b982622bd96  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/typedefs.cc
! d068ca637b3bb00afe65eeb8715f6c9d  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/typedefs_ext.cc
! ffd2920c2d2e3ff863925f2ec1557025  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value.cc
! c6fd3ef80234ffe6b0e639aed9560e27  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value.h
! c96433aa9d91a5495a878121b56c088b  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value_ext.cc
! f59a88f30dd2f5af8e66f4de61e7b358  libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/incomplete_neg.cc
! 42e58d6b0fadb35ad7a054abd25d5650  libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/requirements/explicit_instantiation.cc
! dbd33007e2a1d69c4267c9d7f2d42f65  libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/requirements/typedefs.cc
! d5f74b0081cef65a58c9e036e86f7e03  libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/value.cc
! 828dcf33887cf515d8a4b24757cfd884  libstdc++-v3/testsuite/20_util/is_null_pointer/requirements/explicit_instantiation.cc
! 64f4840c24673e4b59f0c82db86368d7  libstdc++-v3/testsuite/20_util/is_null_pointer/requirements/typedefs.cc
! 5064f0134cae2a4bb9acfe4d2686b6ab  libstdc++-v3/testsuite/20_util/is_null_pointer/value.cc
! 41e5756bd5cd70257a1f48d0cfe193ab  libstdc++-v3/testsuite/20_util/is_object/24808.cc
! e1e4f3bbdea1b1ef61cc053388f84988  libstdc++-v3/testsuite/20_util/is_object/91371.cc
! 0dc34b1ba68d2653e0a9ef182627408a  libstdc++-v3/testsuite/20_util/is_object/requirements/explicit_instantiation.cc
! 6ad9eee0775103cdce246b9aebb3b3a7  libstdc++-v3/testsuite/20_util/is_object/requirements/typedefs.cc
! 29ee73ba5922a32fe0f12b8ce1b5746a  libstdc++-v3/testsuite/20_util/is_object/value.cc
! 52741360f43c27307e2ef4eca62f8cde  libstdc++-v3/testsuite/20_util/is_pod/deprecated-2a.cc
! 29a069d10a8a8af3c98e37e446e1ae14  libstdc++-v3/testsuite/20_util/is_pod/requirements/explicit_instantiation.cc
! 8bf024d1728ab308bd1ce3ef9728b5c7  libstdc++-v3/testsuite/20_util/is_pod/requirements/typedefs.cc
! 2b2ed23d775f7f4e50a798bcbc4c8170  libstdc++-v3/testsuite/20_util/is_pod/value.cc
! 0dd40eedee2ab72b24aaf37c793f3a02  libstdc++-v3/testsuite/20_util/is_pointer/requirements/explicit_instantiation.cc
! 2d9a9affcd6c8f083de05e1450e29b73  libstdc++-v3/testsuite/20_util/is_pointer/value.cc
! a6981a1363b0d64f70a806f515c13dfb  libstdc++-v3/testsuite/20_util/is_polymorphic/incomplete_neg.cc
! 5e91ad356e09ab33d5765cac260451e7  libstdc++-v3/testsuite/20_util/is_polymorphic/requirements/explicit_instantiation.cc
! f615eaf042c3c52d9c665d4650031da9  libstdc++-v3/testsuite/20_util/is_polymorphic/requirements/typedefs.cc
! c90743a10ba8831b098b62196242ad90  libstdc++-v3/testsuite/20_util/is_polymorphic/value.cc
! 575894c7bcef8b8989f03ca25f60c8f9  libstdc++-v3/testsuite/20_util/is_reference/requirements/explicit_instantiation.cc
! 3d4c610430bd35934d0d29b02884b6f1  libstdc++-v3/testsuite/20_util/is_reference/requirements/typedefs.cc
! bcb670657645804b4ed30f33d09ea8d6  libstdc++-v3/testsuite/20_util/is_reference/value.cc
! e5202ac577048ce8235f8f9ff489d402  libstdc++-v3/testsuite/20_util/is_rvalue_reference/requirements/explicit_instantiation.cc
! b9299540650574503c800d8d83c1e951  libstdc++-v3/testsuite/20_util/is_rvalue_reference/requirements/typedefs.cc
! 38ed2cd2efe624a1b8317da624f83807  libstdc++-v3/testsuite/20_util/is_rvalue_reference/value.cc
! ba071fb9d7a09bad128e9d8c07c7cc56  libstdc++-v3/testsuite/20_util/is_same/requirements/explicit_instantiation.cc
! b51c430f3be2c573f138bf51419131e5  libstdc++-v3/testsuite/20_util/is_same/requirements/typedefs.cc
! 690572436667e945ccaaf59ec6ab4ef7  libstdc++-v3/testsuite/20_util/is_same/value.cc
! 22d884f141f914dcda1fa09f8bced5d1  libstdc++-v3/testsuite/20_util/is_scalar/requirements/explicit_instantiation.cc
! 4b0086abd09dd2c23acc94be14e8a06b  libstdc++-v3/testsuite/20_util/is_scalar/requirements/typedefs.cc
! 5566792833fd58362271b0c7508157db  libstdc++-v3/testsuite/20_util/is_scalar/value.cc
! c8c04454618a55587123eacac860513a  libstdc++-v3/testsuite/20_util/is_scoped_enum/value.cc
! a843c4b0043748404b4da3779418ab08  libstdc++-v3/testsuite/20_util/is_scoped_enum/version.cc
! 4778d0348e322bc78a7576c6baddb404  libstdc++-v3/testsuite/20_util/is_signed/requirements/explicit_instantiation.cc
! dcc9bc6d66ad1eb6ac0a9bb6a2beb720  libstdc++-v3/testsuite/20_util/is_signed/requirements/typedefs.cc
! 223661b27a9be585730ed9fe9153bef9  libstdc++-v3/testsuite/20_util/is_signed/value.cc
! 56f50e395ecf63b8cc8df865b3f8d1c5  libstdc++-v3/testsuite/20_util/is_standard_layout/requiremenents/explicit_instantiation.cc
! 604c0700c95106ec9000d14b1918529d  libstdc++-v3/testsuite/20_util/is_standard_layout/requiremenents/typedefs.cc
! 886575304da2d6a016d1d6ee00257ad1  libstdc++-v3/testsuite/20_util/is_standard_layout/value.cc
! b2f9e890d4c72cf9dc103f7073c60370  libstdc++-v3/testsuite/20_util/is_swappable/requirements/explicit_instantiation.cc
! c6fd9816824e4a8b41772865bacd1b3d  libstdc++-v3/testsuite/20_util/is_swappable/requirements/explicit_instantiation_ext.cc
! 90026c21e45a7b3d79fae01653d84c6a  libstdc++-v3/testsuite/20_util/is_swappable/requirements/typedefs.cc
! aa021dd4ee7626b47eb500398c5521a4  libstdc++-v3/testsuite/20_util/is_swappable/requirements/typedefs_ext.cc
! 6228d8b0017c3a041d37c47542551e6b  libstdc++-v3/testsuite/20_util/is_swappable/value.cc
! 2264a7c7e9646c3322143b5593325ce2  libstdc++-v3/testsuite/20_util/is_swappable/value.h
! 3a77dd200b134cecd63b7ad403ee31db  libstdc++-v3/testsuite/20_util/is_swappable/value_ext.cc
! e45d5dbb6f7f581467bac2fdbecc8665  libstdc++-v3/testsuite/20_util/is_swappable_with/incomplete_neg.cc
! 8cc966c8f8cc874769e7338041f268f8  libstdc++-v3/testsuite/20_util/is_swappable_with/requirements/explicit_instantiation.cc
! 46a5b99e27b90db34cac0945c81e86d9  libstdc++-v3/testsuite/20_util/is_swappable_with/requirements/typedefs.cc
! 1e6ef87804d884f8af9b898faafb5788  libstdc++-v3/testsuite/20_util/is_swappable_with/value.cc
! 367ffec31618a1fa76e95d3e073ef835  libstdc++-v3/testsuite/20_util/is_trivial/requirements/explicit_instantiation.cc
! e385fe8965c56be6a95fc5bd9f5cc5f7  libstdc++-v3/testsuite/20_util/is_trivial/requirements/typedefs.cc
! bb7d6d40fed4583a503135b4ffdb4a8d  libstdc++-v3/testsuite/20_util/is_trivial/value.cc
! a47d4818bba6741bb8841463cca0a94b  libstdc++-v3/testsuite/20_util/is_trivially_assignable/requirements/explicit_instantiation.cc
! 95f1e913038839a10e5b946e60a6e752  libstdc++-v3/testsuite/20_util/is_trivially_assignable/requirements/typedefs.cc
! 46431da89b0557131f1cdb42716df6cb  libstdc++-v3/testsuite/20_util/is_trivially_assignable/value.cc
! 8515a8322564ccb8c3849e7c6cf68956  libstdc++-v3/testsuite/20_util/is_trivially_constructible/requirements/explicit_instantiation.cc
! fd12b2af8b92737fee2e0da405cc6a1e  libstdc++-v3/testsuite/20_util/is_trivially_constructible/requirements/typedefs.cc
! e622f14bc7ba840ea37bb9df1412e2c2  libstdc++-v3/testsuite/20_util/is_trivially_constructible/value.cc
! 592664af2b923c73700a04fe92d504c3  libstdc++-v3/testsuite/20_util/is_trivially_copy_assignable/requirements/explicit_instantiation.cc
! a96bc80d18ee3947b79797d30b2c70b2  libstdc++-v3/testsuite/20_util/is_trivially_copy_assignable/requirements/typedefs.cc
! 2640d1af158cddc4cff25aec40eabc8d  libstdc++-v3/testsuite/20_util/is_trivially_copy_assignable/value.cc
! 09e248649e12d52579b10aa198288c4d  libstdc++-v3/testsuite/20_util/is_trivially_copy_constructible/requirements/explicit_instantiation.cc
! 6285585ef8b007323bd39b46c0e27f10  libstdc++-v3/testsuite/20_util/is_trivially_copy_constructible/requirements/typedefs.cc
! d894522c16a19442daf29912ef957278  libstdc++-v3/testsuite/20_util/is_trivially_copy_constructible/value.cc
! d1c519fed701127c847e7aede436b29e  libstdc++-v3/testsuite/20_util/is_trivially_copyable/requirements/explicit_instantiation.cc
! acd1f18ff23b09d2833639a93c84aeea  libstdc++-v3/testsuite/20_util/is_trivially_copyable/requirements/typedefs.cc
! e3a8cebfadaa0d5d9263604905b66e44  libstdc++-v3/testsuite/20_util/is_trivially_copyable/value.cc
! 287c80710c7da132a5f446b89b42d0c8  libstdc++-v3/testsuite/20_util/is_trivially_default_constructible/requirements/explicit_instantiation.cc
! 320079a0c396ec8fa9339cc005e9e8df  libstdc++-v3/testsuite/20_util/is_trivially_default_constructible/requirements/typedefs.cc
! 0c55d66132aba814b4ff83be9b7ea308  libstdc++-v3/testsuite/20_util/is_trivially_default_constructible/value.cc
! b4dae1358103dc9b51bc223987a42759  libstdc++-v3/testsuite/20_util/is_trivially_destructible/requirements/explicit_instantiation.cc
! f8e238ea24ade4b9c8e05fa1ec42ffc6  libstdc++-v3/testsuite/20_util/is_trivially_destructible/requirements/typedefs.cc
! a561be6383dd49fe4ee526e2bd404801  libstdc++-v3/testsuite/20_util/is_trivially_destructible/value.cc
! 32c73556a484f5c9ccddb3078d0889e7  libstdc++-v3/testsuite/20_util/is_trivially_move_assignable/requirements/explicit_instantiation.cc
! 9fff506f8a04c133ad35c879c6e0a586  libstdc++-v3/testsuite/20_util/is_trivially_move_assignable/requirements/typedefs.cc
! 3aa1940e27da5d2e93455f5c38dce3fa  libstdc++-v3/testsuite/20_util/is_trivially_move_assignable/value.cc
! 1b1a78aec6b0a34a77575ff71e96d1ff  libstdc++-v3/testsuite/20_util/is_trivially_move_constructible/requirements/explicit_instantiation.cc
! 3c23f589a2ff043f28ca783228578c59  libstdc++-v3/testsuite/20_util/is_trivially_move_constructible/requirements/typedefs.cc
! 52fd4db0ebac1fca1c771e57d396b826  libstdc++-v3/testsuite/20_util/is_trivially_move_constructible/value.cc
! a6e22cc3b4f3cfe1847e424b2cf7c900  libstdc++-v3/testsuite/20_util/is_unbounded_array/requirements/explicit_instantiation.cc
! 10ab1d47587f043d9e83f51a74bfc9a0  libstdc++-v3/testsuite/20_util/is_unbounded_array/requirements/typedefs.cc
! 7184580ace692746f39d3cad6e98b854  libstdc++-v3/testsuite/20_util/is_unbounded_array/value.cc
! fa6377290481f8e1b0bb028c9642ac1f  libstdc++-v3/testsuite/20_util/is_union/requirements/explicit_instantiation.cc
! e00c172136d3874b3b9659c704570e22  libstdc++-v3/testsuite/20_util/is_union/requirements/typedefs.cc
! d4b0f71d6e81bf7fb8bb7b1837246fd1  libstdc++-v3/testsuite/20_util/is_union/value.cc
! 12e99abbcc9ff6167c5d7100f0c61317  libstdc++-v3/testsuite/20_util/is_unsigned/requirements/explicit_instantiation.cc
! 52a3f94666041cbe5e4b9850986d84cf  libstdc++-v3/testsuite/20_util/is_unsigned/requirements/typedefs.cc
! 1163bffa0cd035ee8c82709445d69319  libstdc++-v3/testsuite/20_util/is_unsigned/value.cc
! 7093859af33397abb001ad0482bbc27a  libstdc++-v3/testsuite/20_util/is_void/requirements/explicit_instantiation.cc
! dade720c5034607a7fbdd7e0aab2f78f  libstdc++-v3/testsuite/20_util/is_void/requirements/typedefs.cc
! 13b7ffc9ea4ed94f9b0cba5438bffdab  libstdc++-v3/testsuite/20_util/is_void/value.cc
! 913bf2a86f02109fb793abcd42c4bb07  libstdc++-v3/testsuite/20_util/is_volatile/requirements/explicit_instantiation.cc
! af3bf89e7481b8a34a3edb98b21a8da6  libstdc++-v3/testsuite/20_util/is_volatile/requirements/typedefs.cc
! 4be69f46ebd04e1219af97a867a7ecd8  libstdc++-v3/testsuite/20_util/is_volatile/value.cc
! 7ff25a2d8ae5983ece0744c2724b2fe0  libstdc++-v3/testsuite/20_util/logical_traits/83134.cc
! 54fa80eb21459fb91bdfcdda78664ae1  libstdc++-v3/testsuite/20_util/logical_traits/requirements/explicit_instantiation.cc
! 791215f012fa9f112ef6e7670392ad37  libstdc++-v3/testsuite/20_util/logical_traits/requirements/typedefs.cc
! 2a164ad035cfdd03319c26d26f12efa6  libstdc++-v3/testsuite/20_util/logical_traits/value.cc
! f5f9ba741f4a91e21efb9bef0ca82ffe  libstdc++-v3/testsuite/20_util/make_signed/requirements/alias_decl.cc
! 2ceff88b404f936e4350c67018095f82  libstdc++-v3/testsuite/20_util/make_signed/requirements/explicit_instantiation.cc
! 6b8ba2584113e0c3fb6fc2a4e7cbccdf  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc
! 80dee8d32289a169c4dfefe5f6dfaf5b  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc
! b91194d57bd968046e51b369f86aef86  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-3.cc
! bc084107b24c429bf48018c4862abe6b  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc
! fc0092367458f75960ce5d9db4c0239e  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
! 1b6bf3e42e3acc695986f9bf50e3f670  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/alias_decl.cc
! ecd3e19c212af2a30aad633afedb15bd  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/explicit_instantiation.cc
! a5f43fbc0309ca53c59e5ad98675778a  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc
! 2b7f2a67748a8a2e0c2a9436509ff2db  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc
! ef0c6e9bae1e6df4b914524a245d22ee  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-3.cc
! 4cefdbe7e3bb06fc089f77de468c9895  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
! 50bf68a7427dd6d8eac3ac91b87def63  libstdc++-v3/testsuite/20_util/memory_resource/1.cc
! e39c1513cb91414e10fa2e58a219f5f4  libstdc++-v3/testsuite/20_util/memory_resource/2.cc
! 5d2ae94d53540a249feeefcaf009c6ee  libstdc++-v3/testsuite/20_util/monotonic_buffer_resource/1.cc
! 57f1a863ec911ebe90e06f1ad29dc0ba  libstdc++-v3/testsuite/20_util/monotonic_buffer_resource/93208.cc
! 9b7885adf866441bc83a9da6d2d12602  libstdc++-v3/testsuite/20_util/monotonic_buffer_resource/allocate.cc
! 282463af8ff2a1ba05d9b89cf8d69de4  libstdc++-v3/testsuite/20_util/monotonic_buffer_resource/deallocate.cc
! 3b660d19b8a810d3dc6e8528530fd296  libstdc++-v3/testsuite/20_util/monotonic_buffer_resource/release.cc
! 1f98394f63b151e05c53d2d8bff5c17a  libstdc++-v3/testsuite/20_util/monotonic_buffer_resource/upstream_resource.cc
! b73bf9f3918dcd5f532cb637f9e25b66  libstdc++-v3/testsuite/20_util/move/1.cc
! a5e367ba6ce34de49b78873061017800  libstdc++-v3/testsuite/20_util/move/requirements/explicit_instantiation.cc
! 5d533e56be8de18f98e6ca6d7cb1cbd4  libstdc++-v3/testsuite/20_util/move_if_noexcept/1.cc
! 84907eb0f575a17ebfc2b4f6f8317050  libstdc++-v3/testsuite/20_util/move_if_noexcept/constexpr.cc
! 0872c1b23716b1ac269b6a3da2a977a4  libstdc++-v3/testsuite/20_util/move_if_noexcept/requirements/explicit_instantiation.cc
! 82f389c7f1eeafd3a20a38a3ba2082c7  libstdc++-v3/testsuite/20_util/nonesuch/nonesuch.cc
! 468541a661b9077f8f95045ba799fb5a  libstdc++-v3/testsuite/20_util/optional/77288.cc
! bf46d153d35089098234bdaa8228c6f0  libstdc++-v3/testsuite/20_util/optional/84601.cc
! e69eba9d6f819fe03b7ea210f8706748  libstdc++-v3/testsuite/20_util/optional/assignment/1.cc
  5f2a36dc053d6d68a81135df84e7f4cb  libstdc++-v3/testsuite/20_util/optional/assignment/100982.cc
! a8ff328330493f48e535fe5e88dbe4a5  libstdc++-v3/testsuite/20_util/optional/assignment/2.cc
! 67e3cc48f308a09acb7815d88a995914  libstdc++-v3/testsuite/20_util/optional/assignment/3.cc
! 7f11785d089572094f3e24ae485e6ca6  libstdc++-v3/testsuite/20_util/optional/assignment/4.cc
! 00841dd745189467ca7201ea42eb6a37  libstdc++-v3/testsuite/20_util/optional/assignment/5.cc
! 6f02355d2250b022da7c4add6694fa74  libstdc++-v3/testsuite/20_util/optional/assignment/6.cc
! c8837cc3db12252817c63fe0305d7faa  libstdc++-v3/testsuite/20_util/optional/assignment/7.cc
! b64b3ce2f57ea38342eb0f417b525956  libstdc++-v3/testsuite/20_util/optional/assignment/8.cc
! aa084f057ec16b9bf2122e0f518160e6  libstdc++-v3/testsuite/20_util/optional/assignment/9.cc
! dcb74383e43c4de34f6a7bf973ba0ba1  libstdc++-v3/testsuite/20_util/optional/assignment/92878_92947.cc
! c28a8a0f77f0d9b7031df05630376c01  libstdc++-v3/testsuite/20_util/optional/assignment/noexcept.cc
! ccda2a74078c62b3285b6878ae320a0f  libstdc++-v3/testsuite/20_util/optional/bad_access.cc
! da412983abbd59c0c7e5977153160c65  libstdc++-v3/testsuite/20_util/optional/cons/77727.cc
! 84f894ecfb78f823b2f139104e9c7b26  libstdc++-v3/testsuite/20_util/optional/cons/85642.cc
! d40d58e55fea860d5c16965c578bd7b5  libstdc++-v3/testsuite/20_util/optional/cons/92878_92947.cc
! 797bcdfe4823e9ccbf8075469296b2ea  libstdc++-v3/testsuite/20_util/optional/cons/copy.cc
! 4499cd4086de1bc764c0b3137a243355  libstdc++-v3/testsuite/20_util/optional/cons/deduction.cc
! 3286a0026c8d31a89ec7c229d004d8b4  libstdc++-v3/testsuite/20_util/optional/cons/default.cc
! c767e57e849945b63d1a7ce99287d636  libstdc++-v3/testsuite/20_util/optional/cons/move.cc
! 0fbf0ce727a4e8950dbe0b46c05bfaff  libstdc++-v3/testsuite/20_util/optional/cons/noexcept.cc
! f1c7170ba04b4f18f13285f1492bc3e2  libstdc++-v3/testsuite/20_util/optional/cons/trivial.cc
! 06a73fda8343254c86b50406c1440762  libstdc++-v3/testsuite/20_util/optional/cons/value.cc
! ea143951c1719bddbfc7654ddff5ce79  libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc
  205153857e4103d66c67fae379d14a86  libstdc++-v3/testsuite/20_util/optional/constexpr/assign.cc
  52debc915496e85a8c7135a5baffe7b1  libstdc++-v3/testsuite/20_util/optional/constexpr/cons/conv.cc
! 9bb48e229f52923c5c682df0735acb5d  libstdc++-v3/testsuite/20_util/optional/constexpr/cons/default.cc
! e5084923798d0f9a33be7d299eddbe61  libstdc++-v3/testsuite/20_util/optional/constexpr/cons/value.cc
! 69434ce9e458090e1cc133f8b0398015  libstdc++-v3/testsuite/20_util/optional/constexpr/in_place.cc
! e8660831291ab0086c1566763d33d290  libstdc++-v3/testsuite/20_util/optional/constexpr/make_optional.cc
  1bd13d53c43f256f47a5c535cc903df1  libstdc++-v3/testsuite/20_util/optional/constexpr/modifiers.cc
! 8a0920facf000ada4d709bd0e9559a72  libstdc++-v3/testsuite/20_util/optional/constexpr/nullopt.cc
! 835ce903a15810ada0b0399d40ae44fc  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/1.cc
! ab2228a2d39b2b2839d0578a58744b0a  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/2.cc
! eb0ada6e9781f06c63fddfffaaf9f715  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/3.cc
! a6218ae646e3354e07f0059fd880bc38  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/4.cc
! b8390a3b45772f4fb926044b492ce909  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/5.cc
! a2a0e7810bcbae84b5e92430e4bc2d42  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/1.cc
! ac302c1cba23de21b5a5d99560414973  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/2.cc
! d5f58e9a4711928fb7997d6d47c3e0fa  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/3.cc
! 3f4d303b4c150439f37937f9f2809a4c  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/4.cc
! 93e7e136dd52029704dfb114ffc7c4bc  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/5.cc
! 95e3cd01c66db0f704ef8e93052568ed  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/6.cc
  1a6e6bdd2186983f8eb3e55976f3af73  libstdc++-v3/testsuite/20_util/optional/constexpr/swap.cc
! 1a95e4890891a6a7c6e308048bfc4085  libstdc++-v3/testsuite/20_util/optional/hash.cc
! 87b73565c4a73ff260ba1dea7584689e  libstdc++-v3/testsuite/20_util/optional/in_place.cc
! 91761354dfa32f98a1a8b7366b39f399  libstdc++-v3/testsuite/20_util/optional/make_optional-2.cc
! 3eb69740deb1cc7bfccbd97c1cbe6891  libstdc++-v3/testsuite/20_util/optional/make_optional.cc
! af0ff4061fde8a110a57b71297a6e672  libstdc++-v3/testsuite/20_util/optional/nullopt.cc
! bc6d2bbf0bcd31318330e91b1b056ee0  libstdc++-v3/testsuite/20_util/optional/observers/1.cc
! 69cf1e7d41b3333db197cb98fd75ef13  libstdc++-v3/testsuite/20_util/optional/observers/2.cc
! 15045965ab673146abb8c07b9466530f  libstdc++-v3/testsuite/20_util/optional/observers/3.cc
! 81769cd4326fd20d0c9d913142a78e64  libstdc++-v3/testsuite/20_util/optional/observers/4.cc
! 0f3cbdfcf310adf8a2062b3707a2c00d  libstdc++-v3/testsuite/20_util/optional/observers/5.cc
! 2e81d7ad50ea9f316654c390436dec79  libstdc++-v3/testsuite/20_util/optional/observers/6.cc
! 637314cfcf5e8a6eecf543eff0b5701b  libstdc++-v3/testsuite/20_util/optional/relops/1.cc
! 7d016ff53a538b7abde794687e94107d  libstdc++-v3/testsuite/20_util/optional/relops/2.cc
! 1f0d1aef6f0adb7ba9009254dd76901e  libstdc++-v3/testsuite/20_util/optional/relops/3.cc
! 80f54c69a118e2a0a1ad953cdacdc704  libstdc++-v3/testsuite/20_util/optional/relops/4.cc
! 482f9916d2e6b744f69dbb2c758c73c8  libstdc++-v3/testsuite/20_util/optional/relops/5.cc
! 937d8651062ebd7c5c50aeae3aa007cb  libstdc++-v3/testsuite/20_util/optional/relops/6.cc
! d6bf2a8d8327935011e701ef3797832a  libstdc++-v3/testsuite/20_util/optional/relops/7.cc
! b2c51e8c1d1f364214d8251552a757bf  libstdc++-v3/testsuite/20_util/optional/relops/96269.cc
! 48ab99e2b012972fd69983b89e1bfa44  libstdc++-v3/testsuite/20_util/optional/relops/three_way.cc
! 30b7a9446f97392a62e38017c5ab2fb3  libstdc++-v3/testsuite/20_util/optional/requirements.cc
! 8cd3d6905fd3038cadc63ee9422e033e  libstdc++-v3/testsuite/20_util/optional/swap/1.cc
! 31306121a40a0fdae6272167aa0d912d  libstdc++-v3/testsuite/20_util/optional/swap/2.cc
! 761eaf8dc7fdf5e7df98d4713fa6b143  libstdc++-v3/testsuite/20_util/optional/typedefs.cc
! 500c0b8083832304133ed53a65237837  libstdc++-v3/testsuite/20_util/optional/version.cc
! 0fd38f3f18cd193ab7d405b047fb100c  libstdc++-v3/testsuite/20_util/owner_less/cmp.cc
! cc042037588e24cb2ab9dcbf9e2e44f5  libstdc++-v3/testsuite/20_util/owner_less/noexcept.cc
! c509455451f4af770bde8922ac97fc5c  libstdc++-v3/testsuite/20_util/owner_less/void.cc
! f97a91b17a9a6a7c3250c558ca4f7663  libstdc++-v3/testsuite/20_util/pair/1.cc
! 615f251e0cb1e5dfa0de8c1f08f51250  libstdc++-v3/testsuite/20_util/pair/2.cc
! 4ae308ba1295e7d5ae993655cbac483a  libstdc++-v3/testsuite/20_util/pair/3.cc
! e1e3c6549e93ee9ef168e5bedecf8ca1  libstdc++-v3/testsuite/20_util/pair/4.cc
! f988fa69a9f6e22b5decedceb3f08fea  libstdc++-v3/testsuite/20_util/pair/40925.cc
! b8b29196cc04f848770700e61392427f  libstdc++-v3/testsuite/20_util/pair/44487.cc
! ac5c6e03a642c0de87325f1d1184af62  libstdc++-v3/testsuite/20_util/pair/70437.cc
! 7aa7f200a4253849e18546d0e0441fad  libstdc++-v3/testsuite/20_util/pair/79141.cc
! 4a4288aa4f6242ce1ff44327cd424c57  libstdc++-v3/testsuite/20_util/pair/86751.cc
! 165fa12714d95c9483f895d3ca62c164  libstdc++-v3/testsuite/20_util/pair/87822.cc
! 4bd036055d6c232e2091b7d7f8dbb4e9  libstdc++-v3/testsuite/20_util/pair/astuple/astuple.cc
! aaa15cfd6f26e0bdfdf36143e47db23a  libstdc++-v3/testsuite/20_util/pair/astuple/astuple_cpp14.cc
! d31c50d42649cc28417caaad7bf7347e  libstdc++-v3/testsuite/20_util/pair/astuple/constexpr_get.cc
! 49ecc83fbbfd3f602ba6befca13cf43a  libstdc++-v3/testsuite/20_util/pair/astuple/constexpr_get_by_type.cc
! fdd6f03cd47f5235fdefae4cde0e47e1  libstdc++-v3/testsuite/20_util/pair/astuple/get.cc
! 5061f9c8e10f9f13a90a6061857a3299  libstdc++-v3/testsuite/20_util/pair/astuple/get_by_type.cc
! 19a126d1e8148367c5ccbee544b9c89f  libstdc++-v3/testsuite/20_util/pair/astuple/get_by_type_neg.cc
! 4a0172ff0eea3449d4271d86c530ba4c  libstdc++-v3/testsuite/20_util/pair/astuple/get_neg.cc
! 7c9ec0a1fceef4c9092e17a56cbc667f  libstdc++-v3/testsuite/20_util/pair/comparison_operators/constexpr.cc
! 6867ac41b18b151afb9f207f8821a665  libstdc++-v3/testsuite/20_util/pair/comparison_operators/constexpr_c++20.cc
! a010f6ac09f4efd657c8ac7ebbdead8a  libstdc++-v3/testsuite/20_util/pair/cons/92878_92947.cc
! f4892e0f3783ebde2f9c599e4f7ed9f7  libstdc++-v3/testsuite/20_util/pair/cons/constexpr.cc
! 8a33117814364f738bcef9c6c01fd1a3  libstdc++-v3/testsuite/20_util/pair/cons/deduction.cc
! 20909d44a813fd647ac1797d3534d86a  libstdc++-v3/testsuite/20_util/pair/cons/explicit_construct.cc
! e10503ff10ec0c0b3d8789bba784766e  libstdc++-v3/testsuite/20_util/pair/cons/noexcept_move_construct.cc
! 99f4fe8ad4c4bac54670def56fdd55b0  libstdc++-v3/testsuite/20_util/pair/constexpr_assign.cc
! f0f8acb7e527f90e3d8193eca7a63b63  libstdc++-v3/testsuite/20_util/pair/constexpr_get.cc
! 289e0add62d0db8c9f7d8885071f8f0a  libstdc++-v3/testsuite/20_util/pair/constexpr_swap.cc
! 5aebc4daca8e03bcf2a03a9e8ead5648  libstdc++-v3/testsuite/20_util/pair/make_pair/constexpr.cc
! 703e38a39fcd1b19007ab1c7330883dd  libstdc++-v3/testsuite/20_util/pair/moveable.cc
! 2e3f5f58bac9400a61524cf9c79e0bfc  libstdc++-v3/testsuite/20_util/pair/noexcept_move_assign.cc
! 00daf5da8857a7f8a6f7426833e57b43  libstdc++-v3/testsuite/20_util/pair/noexcept_swap.cc
! 5ea19ebba0670654d4f5689c7c5268b3  libstdc++-v3/testsuite/20_util/pair/noncopyable.cc
! 90aca903ada3b8d618a21b94bfc70708  libstdc++-v3/testsuite/20_util/pair/piecewise.cc
! 2c9faa585f6b63441a685d608bead701  libstdc++-v3/testsuite/20_util/pair/piecewise2.cc
! bcd081e70bdbbe071e6f8a067b67b68e  libstdc++-v3/testsuite/20_util/pair/ref_assign.cc
! f55e4095f2577409871172f767d21ef3  libstdc++-v3/testsuite/20_util/pair/requirements/dr2367.cc
! 364927c425068d49426b2b4915d0c10d  libstdc++-v3/testsuite/20_util/pair/requirements/dr801.cc
! 6dabddddb5dd007ba2fffbf2164c99dd  libstdc++-v3/testsuite/20_util/pair/requirements/explicit_instantiation/1.cc
! e076b1ed48773b172c90e913d19df0fb  libstdc++-v3/testsuite/20_util/pair/swap.cc
! 3ffccf4293c2b6a5791b7e6c12d160b7  libstdc++-v3/testsuite/20_util/pair/swap_cxx17.cc
! fa1f4f902855db5777aa5754d89f16c0  libstdc++-v3/testsuite/20_util/pair/traits.cc
! 911314550ac1f2c8af9f32e810e4648c  libstdc++-v3/testsuite/20_util/pointer_safety/1.cc
! 8df203c1b76555b343a701c1dd622f7f  libstdc++-v3/testsuite/20_util/pointer_traits/lwg3545.cc
! 36ea3aa5eb2c0131e9f450515225f135  libstdc++-v3/testsuite/20_util/pointer_traits/pointer_to.cc
! 45fa8f660a3f66eb552f4c83ae08cfc8  libstdc++-v3/testsuite/20_util/pointer_traits/pointer_to_constexpr.cc
! cd28225270cad35df044d6daf22a90b9  libstdc++-v3/testsuite/20_util/pointer_traits/rebind.cc
! 89eb7dbac834de5a99b7be6f107dbb29  libstdc++-v3/testsuite/20_util/pointer_traits/requirements/explicit_instantiation.cc
! fe4ad8d9513dea873f47c4174a4bec72  libstdc++-v3/testsuite/20_util/pointer_traits/requirements/typedefs.cc
! 515b06de861d5410938536cb0f44763a  libstdc++-v3/testsuite/20_util/polymorphic_allocator/1.cc
! e911e6b695491b7cb9e1134e147caaff  libstdc++-v3/testsuite/20_util/polymorphic_allocator/allocate_object.cc
! 4621354fc1ad10271437806ec13b7c99  libstdc++-v3/testsuite/20_util/polymorphic_allocator/construct_c++2a.cc
! da028fdb412ef85528896c732a75f2dd  libstdc++-v3/testsuite/20_util/polymorphic_allocator/construct_pair.cc
! 9983fc2c9413f1b64594fe04a5e1b59c  libstdc++-v3/testsuite/20_util/polymorphic_allocator/lwg3237.cc
! bf45bffa6829e5818079b7c6f1e4d443  libstdc++-v3/testsuite/20_util/polymorphic_allocator/resource.cc
! 3ab4cabd4c7f96f591d5196628a3cdeb  libstdc++-v3/testsuite/20_util/polymorphic_allocator/select.cc
! 9589a7ea8ac2c87dfe02964a832ab6bf  libstdc++-v3/testsuite/20_util/rank/requirements/explicit_instantiation.cc
! e6182b66abc93c38a9dcfdb68e050345  libstdc++-v3/testsuite/20_util/rank/requirements/typedefs.cc
! e5c871259608ed18358a7cbc536e4aa7  libstdc++-v3/testsuite/20_util/rank/value.cc
! 207de37aa8dd1d0db2743d38dae921b4  libstdc++-v3/testsuite/20_util/ratio/comparisons/comp1.cc
! 199b1d369158d675bff3c92f5d011ca1  libstdc++-v3/testsuite/20_util/ratio/comparisons/comp2.cc
! d3dcd38bf870ae75a5a2f1502999310c  libstdc++-v3/testsuite/20_util/ratio/comparisons/comp3.cc
! 4de68cb784306f0cabff48b2c6cebc38  libstdc++-v3/testsuite/20_util/ratio/cons/cons1.cc
! 6ed06e234e3a903d8ecba26b19c301aa  libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc
! 4f74bb4f7db36474f77afe3c386772ca  libstdc++-v3/testsuite/20_util/ratio/operations/45866.cc
! 76c7c2f7b2f2e98312240ac187d40021  libstdc++-v3/testsuite/20_util/ratio/operations/47913.cc
! 3f446b2e8c04497cc2bf076d060d1a90  libstdc++-v3/testsuite/20_util/ratio/operations/53840.cc
! 3b7c9e327c25cf1de9276a2ccb1a8e58  libstdc++-v3/testsuite/20_util/ratio/operations/ops1.cc
! 20893ae55d35dc406c8987c68ecf509a  libstdc++-v3/testsuite/20_util/ratio/operations/ops2.cc
! d0e71b142804d7131ca91db4a47f94aa  libstdc++-v3/testsuite/20_util/ratio/operations/ops3.cc
! 3eb2600013772b46f08910dd36078e2c  libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc
! d8f550e346649a98e7b0e0ed13d30d1f  libstdc++-v3/testsuite/20_util/ratio/requirements/constexpr_data.cc
! 80cd6eb84534d97634701e6b3826631e  libstdc++-v3/testsuite/20_util/ratio/requirements/ratio_equal_v.cc
! e67b3868201079198e4bc3543f9083d1  libstdc++-v3/testsuite/20_util/raw_storage_iterator/base.cc
! da1754b1f3487a0120554b4f6c929720  libstdc++-v3/testsuite/20_util/raw_storage_iterator/dr2127.cc
! b81af6aab22484eac9c56285da3802d1  libstdc++-v3/testsuite/20_util/raw_storage_iterator/requirements/base_classes.cc
! dbc5d2ac2caab9c3c244b55297ed000b  libstdc++-v3/testsuite/20_util/raw_storage_iterator/requirements/explicit_instantiation/1.cc
! 5bc07bc46caa9f0c6c710d79fb35b0e5  libstdc++-v3/testsuite/20_util/raw_storage_iterator/requirements/typedefs.cc
! c2b47c89b97dd890d09439888fd669ab  libstdc++-v3/testsuite/20_util/reference_wrapper/24803.cc
! ab77b86fcdbc98cd4a292eb741e25831  libstdc++-v3/testsuite/20_util/reference_wrapper/41792.cc
! 064e04c23e0096793c11efdb4cb68335  libstdc++-v3/testsuite/20_util/reference_wrapper/80504.cc
! 6bbe15570ac54de797a68de8c89695fb  libstdc++-v3/testsuite/20_util/reference_wrapper/83427.cc
! efd01685cefdcc431904a6834c493177  libstdc++-v3/testsuite/20_util/reference_wrapper/constexpr.cc
! d095cb3f347b8cd8fe8daf65c964b83b  libstdc++-v3/testsuite/20_util/reference_wrapper/deduction.cc
! 47b2b4ef49d4cc8224b66532b15aaeea  libstdc++-v3/testsuite/20_util/reference_wrapper/incomplete.cc
! e05d362aaf20d9f796a178b28ffa5402  libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc
! bc2a9b5ddf521051836816a7f2631836  libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-3.cc
! d0c77ef75c79f4cfc8c59e17faaf8a67  libstdc++-v3/testsuite/20_util/reference_wrapper/invoke.cc
! 775f4f2fe6d37098d0472584f28cc629  libstdc++-v3/testsuite/20_util/reference_wrapper/lwg2993.cc
! d158176b7b0971e1da87c0c9bc978d8b  libstdc++-v3/testsuite/20_util/reference_wrapper/ref_neg.cc
! e14d574881d1fad5772ed0fb8fea47e0  libstdc++-v3/testsuite/20_util/reference_wrapper/requirements.cc
! deceeda0a4e0c5b466478af83b93c847  libstdc++-v3/testsuite/20_util/reference_wrapper/result_type.cc
! 3ae2e288002106655c82a15fdea6af45  libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-2.cc
! e426bc0889e49a71ee738cebe2751da7  libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc
! 9369d70b210633d518c12f2901855d6d  libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs.cc
! 137ad7dcd4e75da1261dcdb3a0d6d699  libstdc++-v3/testsuite/20_util/rel_ops.cc
! 895383f032004a5eb44400b23d7444ac  libstdc++-v3/testsuite/20_util/remove_all_extents/requirements/alias_decl.cc
! c08cc7f2e4b65eef3f29667fa29809e2  libstdc++-v3/testsuite/20_util/remove_all_extents/requirements/explicit_instantiation.cc
! d63b1e74502aa503e7d0bc04f2e325b6  libstdc++-v3/testsuite/20_util/remove_all_extents/value.cc
! 1b989c17a5f5a52bb0fc5bb776ee16d8  libstdc++-v3/testsuite/20_util/remove_const/requirements/alias_decl.cc
! 91bf6682dc9e296d9762a0f2cd6a8010  libstdc++-v3/testsuite/20_util/remove_const/requirements/explicit_instantiation.cc
! 8d47ffceb5b9cea363847b2c04e10b37  libstdc++-v3/testsuite/20_util/remove_const/value.cc
! c4e12519d35527275ec8bdedd7cff741  libstdc++-v3/testsuite/20_util/remove_cv/requirements/alias_decl.cc
! ddde96ed39a10a45b7e8d0db629563a1  libstdc++-v3/testsuite/20_util/remove_cv/requirements/explicit_instantiation.cc
! f943e353331fc3472c8313aacff1288a  libstdc++-v3/testsuite/20_util/remove_cv/value.cc
! 000d5fbe8e76853a436c170d3a58ab44  libstdc++-v3/testsuite/20_util/remove_cvref/requirements/alias_decl.cc
! dbd04d1cd5f3f2a45c96a19c82d4bf16  libstdc++-v3/testsuite/20_util/remove_cvref/requirements/explicit_instantiation.cc
! 52e5da6b2317c0a0789b324fc3a7aa40  libstdc++-v3/testsuite/20_util/remove_cvref/value.cc
! f16d280351ceaae46408b753e8188947  libstdc++-v3/testsuite/20_util/remove_cvref/value_ext.cc
! 5ecc97b65af677814fa75c32f9917ca8  libstdc++-v3/testsuite/20_util/remove_extent/requirements/alias_decl.cc
! 7c8752a44dde37e33d839f3ac8374767  libstdc++-v3/testsuite/20_util/remove_extent/requirements/explicit_instantiation.cc
! e437b1bf43c914e6f72d65841ac2962f  libstdc++-v3/testsuite/20_util/remove_extent/value.cc
! befd64d689b7a9521a9f0f1a5350383c  libstdc++-v3/testsuite/20_util/remove_pointer/requirements/alias_decl.cc
! 112c5677b3712fe2cbaa0491729db5cd  libstdc++-v3/testsuite/20_util/remove_pointer/requirements/explicit_instantiation.cc
! 265e10a4dd46f0b77863a2b9f93bc6ae  libstdc++-v3/testsuite/20_util/remove_pointer/value.cc
! acbc5177fd79f3604a537160329bc1e2  libstdc++-v3/testsuite/20_util/remove_reference/requirements/alias_decl.cc
! 6828dc651fb52bba0b29d327e319a1e0  libstdc++-v3/testsuite/20_util/remove_reference/requirements/explicit_instantiation.cc
! 8db0ecc19c8b23a4e532eeefd228bf2f  libstdc++-v3/testsuite/20_util/remove_reference/value.cc
! 50b926c5d3307a97a89bc3e0aa053b8f  libstdc++-v3/testsuite/20_util/remove_volatile/requirements/alias_decl.cc
! b52fa3cdb8dd4ad62023d2c76e0940e9  libstdc++-v3/testsuite/20_util/remove_volatile/requirements/explicit_instantiation.cc
! ade43f79e08e57b5bdc1f3f77df6cbf3  libstdc++-v3/testsuite/20_util/remove_volatile/value.cc
! 3f77a70769e288e53ecfe9ec63022b1b  libstdc++-v3/testsuite/20_util/result_of/1.cc
! b55afcc94d1a91a2a689c0587349d422  libstdc++-v3/testsuite/20_util/result_of/2.cc
! 1d608b2d0673bc2633ac82e8cdbda3ad  libstdc++-v3/testsuite/20_util/result_of/requirements/alias_decl.cc
! 7c4e6d61c93c97f2533c1cb31d44c529  libstdc++-v3/testsuite/20_util/result_of/sfinae_friendly_1.cc
! 3a68fb53cde5817cb58725200bd4a9b5  libstdc++-v3/testsuite/20_util/result_of/sfinae_friendly_2.cc
! d35d4db73c35b1943c77273ed173d9dc  libstdc++-v3/testsuite/20_util/scoped_allocator/1.cc
! b270f73ff97fa36792a6b0faf61b0191  libstdc++-v3/testsuite/20_util/scoped_allocator/2.cc
! 5b5b197c3784a132cf0b0a6fdf265089  libstdc++-v3/testsuite/20_util/scoped_allocator/3.cc
! 14237034a0ba21d271477e724c70175e  libstdc++-v3/testsuite/20_util/scoped_allocator/65279.cc
! 28c72b75147d6af75da8fd88b3a8da0c  libstdc++-v3/testsuite/20_util/scoped_allocator/69114.cc
! 7861e7bcfee6e23e2fce6837288c8959  libstdc++-v3/testsuite/20_util/scoped_allocator/69293_neg.cc
! e871a5df2eba2364ac02f4f035b3b4d8  libstdc++-v3/testsuite/20_util/scoped_allocator/construct_pair.cc
! a2b81f8017db634fc4f9df9fcf7234a8  libstdc++-v3/testsuite/20_util/scoped_allocator/construct_pair_c++2a.cc
! 96797cb015e75b0c6ccd87d7d7c54c06  libstdc++-v3/testsuite/20_util/scoped_allocator/dr2586.cc
! 6f53bb8f21ba1508b929b404b51a12f5  libstdc++-v3/testsuite/20_util/scoped_allocator/outermost.cc
! 542b24b2be4f8cf9c42f542a16bf6817  libstdc++-v3/testsuite/20_util/scoped_allocator/propagation.cc
! 2e6c7ccd36a707fc132e06aaebc44a52  libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/explicit_instantiation.cc
! a022741da66d6e865e81bb5edb9ca241  libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/typedefs.cc
! fddd9ead409305c0d86d42dbaaf7ca71  libstdc++-v3/testsuite/20_util/shared_ptr/assign/assign.cc
! ffcf22f1e384254e96d935330ddbeed2  libstdc++-v3/testsuite/20_util/shared_ptr/assign/auto_ptr.cc
! 64dfba068bcb5998c1654a5b194b8703  libstdc++-v3/testsuite/20_util/shared_ptr/assign/auto_ptr_neg.cc
! a9f1232fd44429cc829fcb6b1911b053  libstdc++-v3/testsuite/20_util/shared_ptr/assign/auto_ptr_rvalue.cc
! 695e771a81b6007eb9718d77d09e1974  libstdc++-v3/testsuite/20_util/shared_ptr/assign/dr541.cc
! 3ced8b22d431f17e36acdb3ce886d8e2  libstdc++-v3/testsuite/20_util/shared_ptr/assign/move.cc
! 24cfec31db8f4609621472804136a82f  libstdc++-v3/testsuite/20_util/shared_ptr/assign/sfinae.cc
! 083ddc1ed1b9d54d8595e19f8a92d44a  libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr.cc
! 895fb4cb352d8c0f78b311dc86d06707  libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc
! af87a7b6ae8525c5f56e39b3bc94de9b  libstdc++-v3/testsuite/20_util/shared_ptr/assign/unique_ptr_lvalue_neg.cc
! 04cafb9acaf56f130d1444e1e014cce5  libstdc++-v3/testsuite/20_util/shared_ptr/assign/unique_ptr_rvalue.cc
! a89246a82ca4c1e04ef904a11e75ff5d  libstdc++-v3/testsuite/20_util/shared_ptr/atomic/1.cc
! 8566bfdbc012478ea7001354b06af28d  libstdc++-v3/testsuite/20_util/shared_ptr/atomic/2.cc
! b36fb8ab16564f2c57c409b36a7c99be  libstdc++-v3/testsuite/20_util/shared_ptr/atomic/3.cc
! 78c6bea140e57a7ac3d1ff402a06ea79  libstdc++-v3/testsuite/20_util/shared_ptr/casts/1.cc
! 8e76028b47d5903d635bdd213f2dad68  libstdc++-v3/testsuite/20_util/shared_ptr/casts/reinterpret.cc
! c85df25a3c50788b00571489cbe36965  libstdc++-v3/testsuite/20_util/shared_ptr/casts/rval.cc
! f9e36171dfe090ea8c2e92c86ce1fe05  libstdc++-v3/testsuite/20_util/shared_ptr/comparison/42925.cc
! 44722d5233e174dc6aa2bf85c04913d7  libstdc++-v3/testsuite/20_util/shared_ptr/comparison/86537.cc
! e74b3811f85ee59d34bcfd68d77e3fcf  libstdc++-v3/testsuite/20_util/shared_ptr/comparison/cmp.cc
! 6da84a7994aca5f2499df0054102a0e1  libstdc++-v3/testsuite/20_util/shared_ptr/comparison/cmp_c++20.cc
! 9addda6c9019c775eb00b0c7470098d7  libstdc++-v3/testsuite/20_util/shared_ptr/comparison/dr1401.cc
! c15fa455a5ab532390deb84ee88dd987  libstdc++-v3/testsuite/20_util/shared_ptr/comparison/less.cc
! f91c97cfc73a0e6c0adb25e52e095ee1  libstdc++-v3/testsuite/20_util/shared_ptr/cons/39405.cc
! 3ae08cbf764ef99f84735904c7033f9a  libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc
! 4ff37289c296474efdad795e82ebccb4  libstdc++-v3/testsuite/20_util/shared_ptr/cons/46910.cc
! 5fedf92a9a8e562dc9b67cce62b69490  libstdc++-v3/testsuite/20_util/shared_ptr/cons/51365.cc
! af4f74573e43d20966241f947820ca67  libstdc++-v3/testsuite/20_util/shared_ptr/cons/52924.cc
! d07032503eef9e88e90c1474483353fe  libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc
! 4692329944218701aa2f1fb728f5fb0a  libstdc++-v3/testsuite/20_util/shared_ptr/cons/58659.cc
! f97b44a7dd91001540d6953b0e9b08e1  libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc
! 94236b69615b016685f41535954a1886  libstdc++-v3/testsuite/20_util/shared_ptr/cons/61036.cc
! d8d0eb72efc712dc53e80546121729cc  libstdc++-v3/testsuite/20_util/shared_ptr/cons/79467.cc
! 82badecf27726c99004a3ee2f2d1dde1  libstdc++-v3/testsuite/20_util/shared_ptr/cons/80229.cc
! 2a9c463ec319565bfd6427ff9c2fe004  libstdc++-v3/testsuite/20_util/shared_ptr/cons/alias-rval.cc
! 462478cbe2dd19256a55d96d5073b297  libstdc++-v3/testsuite/20_util/shared_ptr/cons/alias.cc
! 4f1c76cfd8d4ff9688b041dd0366a82e  libstdc++-v3/testsuite/20_util/shared_ptr/cons/alloc.cc
! e8dbdcb85ca5ebe787c56647fd263740  libstdc++-v3/testsuite/20_util/shared_ptr/cons/alloc_min.cc
! 24e42f8c48cbb1d828f843d157829ae3  libstdc++-v3/testsuite/20_util/shared_ptr/cons/array.cc
! 882b1d8899cb2adf8212069b0c65b07f  libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr.cc
! 45d72d66e2e985fc46e241ef0dac3a93  libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc
! 7bea3d3fe65621235ac24cc5a6996e5a  libstdc++-v3/testsuite/20_util/shared_ptr/cons/constexpr.cc
! 8878bf4def942692927a2dbeb6021c58  libstdc++-v3/testsuite/20_util/shared_ptr/cons/copy.cc
! d9ec71c941530aaf4028ade2bab21194  libstdc++-v3/testsuite/20_util/shared_ptr/cons/deduction.cc
! 8328a277ea83d87fb57c9d3df8d8efa4  libstdc++-v3/testsuite/20_util/shared_ptr/cons/default.cc
! 962d726032ceb5728bc20a6af100e5cf  libstdc++-v3/testsuite/20_util/shared_ptr/cons/lwg2802.cc
  6ee836f3d8446334ad0856f8f79f7c0c  libstdc++-v3/testsuite/20_util/shared_ptr/cons/lwg3548.cc
! f5ab5b4ba1935845e5729cc9245e5c04  libstdc++-v3/testsuite/20_util/shared_ptr/cons/move.cc
! e02b794e56d74c705350344dc2211fc8  libstdc++-v3/testsuite/20_util/shared_ptr/cons/noexcept_move_construct.cc
! 9ae2381bee0531e9c6ed265713b2ee20  libstdc++-v3/testsuite/20_util/shared_ptr/cons/nullptr.cc
! d0fb56e41f27126dd46380680b85ae2e  libstdc++-v3/testsuite/20_util/shared_ptr/cons/pointer.cc
! 9603381a835a5f290cbf4766aeb100f1  libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr.cc
! 644348b1e0c83416c8f1aa45cca897b5  libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_array.cc
! ffc9c0b00b4ea272dab6521a49196a1b  libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_deleter.cc
! bd96d8da0a14d98320c6bc6cc5950aba  libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_deleter_ref_1.cc
! be726562a07531b866b47d7ec0946d84  libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_deleter_ref_2.cc
! 580abbe777e8adce5ba9b1051d0b25be  libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_neg.cc
! fe5b77cea13fe526b01349726a395381  libstdc++-v3/testsuite/20_util/shared_ptr/cons/void_neg.cc
! 6e9a84ca4cda6930a4aa3b5250a82990  libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr.cc
! 1f441bf77297570a18e60ee06a22eb50  libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc
! cf3fc22a1af10aa50e949fac6f0903ac  libstdc++-v3/testsuite/20_util/shared_ptr/creation/36949.cc
! a575120adc93409d9d4a18dfef29a267  libstdc++-v3/testsuite/20_util/shared_ptr/creation/58594-no-rtti.cc
! 3d83a3250323b33c6205cd2ec624d11e  libstdc++-v3/testsuite/20_util/shared_ptr/creation/58594.cc
! 674686652879a51cfc201f881118d979  libstdc++-v3/testsuite/20_util/shared_ptr/creation/87278.cc
! a44d681603fac09689d6bbd6d9b3e1f0  libstdc++-v3/testsuite/20_util/shared_ptr/creation/92878_92947.cc
! 6620dd086dc407f56b904aacbc2e65f9  libstdc++-v3/testsuite/20_util/shared_ptr/creation/99006.cc
! fa48c04ffa8cd19ba4a57655812231bc  libstdc++-v3/testsuite/20_util/shared_ptr/creation/alloc.cc
! eaba0153f8cc432c016c670415e3b94e  libstdc++-v3/testsuite/20_util/shared_ptr/creation/alloc_min.cc
! 3bc63f8736fccb0c89ea5f4806a56782  libstdc++-v3/testsuite/20_util/shared_ptr/creation/dr402.cc
! eeb7fa84e489c2606d1bc0755785edd5  libstdc++-v3/testsuite/20_util/shared_ptr/creation/dr925.cc
! 19fb105da1e7decc32838063c4cae85b  libstdc++-v3/testsuite/20_util/shared_ptr/creation/make.cc
! e7f4d0aa877a2115bc97cb019042aea0  libstdc++-v3/testsuite/20_util/shared_ptr/creation/no_rtti.cc
! 5d56c4718a9c1d8740fe605b31e49216  libstdc++-v3/testsuite/20_util/shared_ptr/creation/private.cc
! f2f4f3a3136eb8789df2b60c2664566b  libstdc++-v3/testsuite/20_util/shared_ptr/creation/single_allocation.cc
! 56a134cf6bf97b90432b12363b5432e6  libstdc++-v3/testsuite/20_util/shared_ptr/creation/single_allocation_no_rtti.cc
! 9538b89003867ad9f92c7db3098808a0  libstdc++-v3/testsuite/20_util/shared_ptr/dest/dest.cc
! 00311464b332e334a4511d462f22f312  libstdc++-v3/testsuite/20_util/shared_ptr/hash/1.cc
! f7ab9cb255caa09854822628d9e872a4  libstdc++-v3/testsuite/20_util/shared_ptr/misc/24595.cc
! e205bf10f5648be15a143c5dd7679ff7  libstdc++-v3/testsuite/20_util/shared_ptr/misc/42019.cc
! ed2f425f843730641066bba6fdaa0b36  libstdc++-v3/testsuite/20_util/shared_ptr/misc/get_deleter.cc
! 48294efe2c206e3e5d1c8b4e5ae2005c  libstdc++-v3/testsuite/20_util/shared_ptr/misc/io.cc
! e88d4d15e04ded8fedd1da6ddceee6c7  libstdc++-v3/testsuite/20_util/shared_ptr/misc/swap.cc
! 7d98e99d7beeafcdd1da8ea52a6b968b  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/24805.cc
! 0da2848675af638b34039d2db515e895  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/reset.cc
! 4d9f0b7efd5924070ba1b9caa41e4413  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/reset_alloc.cc
! 7f70791ce1181c536952fbe84e5b2ddb  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/reset_neg.cc
! 12484ca015fed24dc965d2d9f79513ee  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/reset_sfinae.cc
! f79fa52b63ddf249d648427750d0384b  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/swap.cc
! f1c94af073c4a71fe39d5723a80add5e  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/swap_neg.cc
! 089d35eb2c8b60e51455ed6304d3ddf7  libstdc++-v3/testsuite/20_util/shared_ptr/observers/array.cc
! a1b13851c959354ad53194b6136cda8b  libstdc++-v3/testsuite/20_util/shared_ptr/observers/bool_conv.cc
! 5b4e9cec8799b330a7f4541ff95c7114  libstdc++-v3/testsuite/20_util/shared_ptr/observers/get.cc
! 66a7ba11ef75c6ccc85acb6e268e8654  libstdc++-v3/testsuite/20_util/shared_ptr/observers/owner_before.cc
! 76a18a2fa120928f2d9c86a5c6ab376c  libstdc++-v3/testsuite/20_util/shared_ptr/observers/unique.cc
! 9c2d44e746f4a94f2132a96d06deb76e  libstdc++-v3/testsuite/20_util/shared_ptr/observers/use_count.cc
! be5b9375a332dfd29787a73c8edb78e9  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc
! cf3f76846d23c3ec41ad12fc5d91d984  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/2.cc
! 1704edaef647a4c6cd4dd0be34ba1007  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/weak_type.cc
! 568456c7f61ea207d24342079865e087  libstdc++-v3/testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc
! dafef3355983ff2b3065b188a4692cca  libstdc++-v3/testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc
! 47a89ac44d7e3073ceeed94886d6bece  libstdc++-v3/testsuite/20_util/specialized_algorithms/construct_at/1.cc
! 01748aaab248cabfba4e0cc36a23e79a  libstdc++-v3/testsuite/20_util/specialized_algorithms/construct_at/92878_92947.cc
! e7e959199b5fd7f436d7e56d3d746f47  libstdc++-v3/testsuite/20_util/specialized_algorithms/construct_at/95788.cc
! 9db249b48dcdbd4713caafdd0302c240  libstdc++-v3/testsuite/20_util/specialized_algorithms/destroy/constrained.cc
! c5208b7d2e174823e89b053d932a8c0c  libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/1.cc
! 35adba1e3ca921dffc983766259cc1f3  libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc
  7e2d819342973c849d87437556e29d5c  libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_construct.cc
  681f3ec9c3b800b4e5258afc87a95231  libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_copy_move.cc
  7377989805a8e1aa7f8896037d2eefae  libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_fill_destroy.cc
! b52c8e7d9de32fdd0beff24aebe33b14  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/1.cc
! b415cb4f0a007ddf44206e69d5b79dee  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/58982.cc
! 24accae72f91389d5232078d3d931bc1  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/64476.cc
! 753b55ee1464abbda6a126a12a7e2b90  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/808590-cxx11.cc
! 07f32aef4ea49b8bcf850c0832438646  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/808590.cc
! 5b33206899648a142f0c8b1aa61d9524  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/89164.cc
! c8c01c0704ee7dd4a77c13968a3bdc98  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc
! 5558401fae56387639a4bdfc0a644af6  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
! 4655453bee4867113e6d9a78da03ff67  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/58982.cc
! 9ba71da77adf69c4afeaed3a351b8a11  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/89164.cc
! 5a7ce7ec6352468c45c413babba1a393  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc
! 103bba7ba3cb7f8b0af54a5d73f285d6  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_default/94540.cc
! 5d945de5c922092314f493ff7c5b9e31  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_default_construct/constrained.cc
! 59f9d791d1f1b71780d2e19f923542bb  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_default_n/94540.cc
! fbceb5bdc92fc40df91a86cef92fc287  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_default_n/sizes.cc
! 6be78fd32f4d4cbd39a83e755af00646  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/32158.cc
! b48a007fa01e34186ceed1e10a2c04ee  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/58982.cc
! b9476d6bce48e0dfb5c7800ee8dda94a  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/89164.cc
! 872da6aba200b53e7607df7ce326d848  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/94017.cc
! 039ca6b77153207af9c30c83eda86b58  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/constrained.cc
! f4bf22b0791f44d55d99afedd49a9593  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/16505.cc
! a1c838ed9f6349162054cfa13acfec1e  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/58982.cc
! b1b5c229b6bef4b78affc416ad9ade1c  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/89164.cc
! 27d366ce2bf0ef3f2b78b9ddc4d55d93  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/94017.cc
! 57da2bdb3bb3acc9dac4a5df1f258424  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/dr1339.cc
! d3c40097c0f5bd9745cdf077882bf917  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/sizes.cc
! 9e7a9c4c073ef17679ffcf3f97f1c72e  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc
! 6822b16c471f8bd6e4570f01adb064a7  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/94540.cc
! 1b7c08c58921121bee1e0bdeaff2cf5b  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/94831.cc
! 80546dd4bafa39b68ae120b565cbc09d  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/constrained.cc
! b0c257435c63a757616b9ddeb63b7760  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct_n/94540.cc
! e18275dc50cddd9dc2b844e79ee8916c  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct_n/sizes.cc
! d32fc942b7a7cb96a5ac2ed5d25b5448  libstdc++-v3/testsuite/20_util/steady_clock/constexpr_data.cc
! 030b9da52774fa6577aa0cf491a31818  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/allocate.cc
! 6a6b0baa7eb8f81ffb0df53cff332dea  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/allocate_single.cc
! 59373041f4252b73428697cc67b3e32a  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/cons.cc
! 6d847262707cddd97e61990cd84b3489  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/cons_single.cc
! 92c17b031016d4c7233d7d421964474c  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/is_equal.cc
! 3b43383d3cce4a20ee029be9ed74b9af  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/multithreaded.cc
! 61f29278fa55a40785a9114bf73985d6  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/options.cc
! 2d7f4d12fa7f4787c817e4101f9d1b1f  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/release.cc
! faf73a26c82a6c13065b1590b71c19c4  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/release_single.cc
! 03391880458b9e5b911ebe568267ef86  libstdc++-v3/testsuite/20_util/system_clock/1.cc
! b6edb24a8ef0f06b92ceeb16e9b362b1  libstdc++-v3/testsuite/20_util/system_clock/constexpr_data.cc
! e9337d40380c1b05c7822e278413b4f7  libstdc++-v3/testsuite/20_util/temporary_buffer.cc
! 11dba124c27fd44b7cc79e242e051a23  libstdc++-v3/testsuite/20_util/time_point/1.cc
! 785f5e24bcff749d46db13d3527ce1fd  libstdc++-v3/testsuite/20_util/time_point/2.cc
! 6f0d513fbde1697bb523b45ec0de2a65  libstdc++-v3/testsuite/20_util/time_point/3.cc
! 1a80b386386d435edb0cba9cdfb70b5d  libstdc++-v3/testsuite/20_util/time_point/4.cc
! cb9e8a997feb6041c56f1fdcf5531ae1  libstdc++-v3/testsuite/20_util/time_point/arithmetic/constexpr.cc
! c192c301f4b37e5e7dbe1de4a597484b  libstdc++-v3/testsuite/20_util/time_point/comparison_operators/constexpr.cc
! 9cb0f2b9cc5c427a6e5b65902f2d0cca  libstdc++-v3/testsuite/20_util/time_point/comparison_operators/three_way.cc
! b298b62ce8dc552d84daf7e7164d4187  libstdc++-v3/testsuite/20_util/time_point/cons/81468.cc
! 57792c225478218e30cace44b35e26a3  libstdc++-v3/testsuite/20_util/time_point/cons/constexpr.cc
! fa266b1e66906ad683bb8b78d84a6166  libstdc++-v3/testsuite/20_util/time_point/nonmember/constexpr.cc
! b990de4205cf8d74fcc3dfba7eadf370  libstdc++-v3/testsuite/20_util/time_point/requirements/constexpr_functions.cc
! 454047a743cdb7d32388e2ba483432eb  libstdc++-v3/testsuite/20_util/time_point/requirements/duration_neg.cc
! c355bfffa6d2ecab99f322b01dfc8a5a  libstdc++-v3/testsuite/20_util/time_point/requirements/explicit_instantiation/explicit_instantiation.cc
! 6d4dad896dbbd40d474ef7d6fc37140e  libstdc++-v3/testsuite/20_util/time_point/requirements/noexcept.cc
! b2316fab435a1f2d8520298d14805a9d  libstdc++-v3/testsuite/20_util/time_point_cast/constexpr.cc
! 70e4e6cf00f7581284a9be6f3802f4cd  libstdc++-v3/testsuite/20_util/time_point_cast/rounding.cc
! 2c5bd4b6508aec1f493e5d1a2cd8494c  libstdc++-v3/testsuite/20_util/to_address/1.cc
! 99ede23b3addcf42fe19db704d1d0d47  libstdc++-v3/testsuite/20_util/to_address/1_neg.cc
! 133fe12805e3256b9c431c4ba30e0622  libstdc++-v3/testsuite/20_util/to_address/debug.cc
  85bcd20ed1477c234831a1e857e38995  libstdc++-v3/testsuite/20_util/to_address/lwg3545.cc
! 8fb10a36f1bccc97501878ffd73ca157  libstdc++-v3/testsuite/20_util/to_chars/1.cc
  cf4f3947ea6ae8a691cad8b85ffb82b7  libstdc++-v3/testsuite/20_util/to_chars/103955.cc
! de7ebfc26e88acbc9d63fcfcabf0b382  libstdc++-v3/testsuite/20_util/to_chars/2.cc
! a7d21c6c8ad1480506c8df8d4857cb97  libstdc++-v3/testsuite/20_util/to_chars/3.cc
! b3ef106f247f5184dff53d7f83d2547c  libstdc++-v3/testsuite/20_util/to_chars/4.cc
! 8fe52dfaad2bd6b6d62754c4cd1939c5  libstdc++-v3/testsuite/20_util/to_chars/95851.cc
! b541346abe2d776367e622ddb4619e0f  libstdc++-v3/testsuite/20_util/to_chars/chars_format.cc
! 50b3c2a75acca0712b10b34a839020ab  libstdc++-v3/testsuite/20_util/to_chars/compare.cc
  5023f6c1a2d374e90adee1ec171efa98  libstdc++-v3/testsuite/20_util/to_chars/double.cc
  23ac211304a3685d878056005dca6369  libstdc++-v3/testsuite/20_util/to_chars/float.cc
! 9d8d47dfe50f3ceb88ff8447042f58e6  libstdc++-v3/testsuite/20_util/to_chars/long_double.cc
! a4a1c52d9bd460726f090ef34d4c2bbd  libstdc++-v3/testsuite/20_util/to_chars/lwg3266.cc
! 81afec037f5e4339a6bef27c917ab989  libstdc++-v3/testsuite/20_util/to_chars/requirements.cc
! 526c19d264780eb47e22a26b407f9e9b  libstdc++-v3/testsuite/20_util/to_underlying/1.cc
! 84e6ca1a28b37bb40918da03edff0d14  libstdc++-v3/testsuite/20_util/to_underlying/version.cc
! e99c678e5b67fe8c2095f4247a68aa82  libstdc++-v3/testsuite/20_util/tuple/48476.cc
! d566241f227e4e73bc1c36389e28718e  libstdc++-v3/testsuite/20_util/tuple/51365.cc
! e0457daadc13c74d943db9f55dc9bb0b  libstdc++-v3/testsuite/20_util/tuple/53648.cc
! eb69c33f8797fd1762720028f0c924c1  libstdc++-v3/testsuite/20_util/tuple/56785.cc
! d10e8c37983d12ee66458861314750ba  libstdc++-v3/testsuite/20_util/tuple/60497.cc
! 2785992c8a2531fef2fbf0b1bad1f5eb  libstdc++-v3/testsuite/20_util/tuple/61947.cc
! b4ee094e2e63ede558403cc895e896ee  libstdc++-v3/testsuite/20_util/tuple/67844.cc
! 6f141b823acf9318f18dd934dfe80f1d  libstdc++-v3/testsuite/20_util/tuple/77395.cc
! cc096e102c4e2e92bfad7ea3e3a8d663  libstdc++-v3/testsuite/20_util/tuple/77802.cc
! 90a850903490343105b2940b381d360e  libstdc++-v3/testsuite/20_util/tuple/78939.cc
! 85f1e2b08c27791850c43de4d880cd4e  libstdc++-v3/testsuite/20_util/tuple/apply/1.cc
! 7e0a8d45df0277c7f9e58bf632dc9955  libstdc++-v3/testsuite/20_util/tuple/apply/2.cc
! bc61feeb8d935a3aac751383ef085c55  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480_neg.cc
! f6b7a33203fa4099631dec37e15dcf3b  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/93147.cc
! d14f4b5e32eff50b207cc01fdea90213  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/comparisons.cc
! 5286da75b33de2dbd53bc25475bbecdd  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/constexpr.cc
! a29daf4250ec6836d29ee219cb6e3c24  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/overloaded.cc
! 1a535e0b93b4813fb9d5ce3c26d0d3fc  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/three_way.cc
  d23b1a747046dfeaadefce18d2c02b12  libstdc++-v3/testsuite/20_util/tuple/cons/101960.cc
  32c154912a091023741fdaa263538a86  libstdc++-v3/testsuite/20_util/tuple/cons/102270.cc
! e3566f9668d13eea0bc28024e1e60adc  libstdc++-v3/testsuite/20_util/tuple/cons/41530.cc
! b8b6f7aca02de3d0464000ca018da3ba  libstdc++-v3/testsuite/20_util/tuple/cons/44487.cc
! 521de308a3f68c36303b621ffb72195a  libstdc++-v3/testsuite/20_util/tuple/cons/45228.cc
! bce4ed9172dff691ac4b512a48d8dde3  libstdc++-v3/testsuite/20_util/tuple/cons/48476.cc
! 41b466da97ce935231421e5d64c46608  libstdc++-v3/testsuite/20_util/tuple/cons/66338.cc
! d99cccbe9da8c2e4b0c72f855176776b  libstdc++-v3/testsuite/20_util/tuple/cons/90700.cc
! cf0d796e3c59582ba024232a1427027b  libstdc++-v3/testsuite/20_util/tuple/cons/96592.cc
! aba82a3e912783f65a46815c1d73599a  libstdc++-v3/testsuite/20_util/tuple/cons/96803.cc
! 982be20bceca427f397f21e65d328ef4  libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc
! 112a8649ba08ed91d027648793df8242  libstdc++-v3/testsuite/20_util/tuple/cons/allocators.cc
! 867417757a7fa4209e2948844fb36542  libstdc++-v3/testsuite/20_util/tuple/cons/assignment.cc
! 3115bc52b27a5101595441e8f6e34cfe  libstdc++-v3/testsuite/20_util/tuple/cons/big_tuples.cc
! 8a37c959ace01c26597f68f1bcaaef5e  libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-2.cc
! 22e6a7f098c03a946151a2c21748fc93  libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-3.cc
! e87f74762d2bdea9865a9e8a3aa4fde1  libstdc++-v3/testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc
! a45c2c2dceecab2183b3d6cc6da5d499  libstdc++-v3/testsuite/20_util/tuple/cons/constructor.cc
! d613833f2851a12c297f1c3e812f1bd4  libstdc++-v3/testsuite/20_util/tuple/cons/converting.cc
! 60c1d109f7183bec1470c7ae9a017f14  libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc
! 1f2dce38e797ee00b3bed538d1379a8a  libstdc++-v3/testsuite/20_util/tuple/cons/element_accepts_anything_byval.cc
! 6ef33a7dc8a2f1bc0c3a3faab4fcff71  libstdc++-v3/testsuite/20_util/tuple/cons/explicit_construct.cc
! 040aea5e231d08b8bb79fcad595ab669  libstdc++-v3/testsuite/20_util/tuple/cons/nested_tuple_construct.cc
! 98e01b5536c80c2105656537bda875c5  libstdc++-v3/testsuite/20_util/tuple/cons/noexcept_move_construct.cc
! 2d231d34db3830d42820504dcbbba167  libstdc++-v3/testsuite/20_util/tuple/cons/noexcept_specs.cc
! aca809d8ed661a9cae0d7c44f1d9d96b  libstdc++-v3/testsuite/20_util/tuple/constexpr_swap.cc
! 268266ca9c3663bc003a98106fedb7bc  libstdc++-v3/testsuite/20_util/tuple/creation_functions/23978.cc
! 79c9d183318b6c2e8c2cccb0f7220f83  libstdc++-v3/testsuite/20_util/tuple/creation_functions/48476.cc
! dfe9708a0b7f880bad3ff2bec43c49da  libstdc++-v3/testsuite/20_util/tuple/creation_functions/55713.cc
! 9d4685f7638901221b72ab9b0315f7bc  libstdc++-v3/testsuite/20_util/tuple/creation_functions/constexpr.cc
! be90ce43ffea0b6e9c23abd1ccf5e4e5  libstdc++-v3/testsuite/20_util/tuple/creation_functions/constexpr_cpp14.cc
! 10226aa1f1eba829f003188f86dda194  libstdc++-v3/testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc
! e46f6755f4fb6b865573a96f7cd7923e  libstdc++-v3/testsuite/20_util/tuple/creation_functions/make_tuple.cc
! d46cb9d24e911bccc84df98314e4c462  libstdc++-v3/testsuite/20_util/tuple/creation_functions/tie.cc
! 42ce0c61e7ce0ed04f2b80472ba18b63  libstdc++-v3/testsuite/20_util/tuple/creation_functions/tie2.cc
! ad6f111f9867b13754a311adc6301377  libstdc++-v3/testsuite/20_util/tuple/creation_functions/tuple_cat.cc
! 0c7ec09c8b4aca267db72b2b9153f90f  libstdc++-v3/testsuite/20_util/tuple/cv_tuple_element.cc
! 93ba5ddbb9f6992dbfab73ff1098c592  libstdc++-v3/testsuite/20_util/tuple/cv_tuple_size.cc
! 3e8979b11f69a2d6617bb76fef39355e  libstdc++-v3/testsuite/20_util/tuple/cv_tuple_size_neg.cc
! 46adde7d7d256841c482dc16a18d1ea2  libstdc++-v3/testsuite/20_util/tuple/dr2729.cc
  5c4d5220d3eb9f735e8817b5ea562b55  libstdc++-v3/testsuite/20_util/tuple/element_access/101427.cc
! 41238d590ea4765b923c8788ab40c644  libstdc++-v3/testsuite/20_util/tuple/element_access/71096.cc
! 8284ee35cf319fed144438737344e7a0  libstdc++-v3/testsuite/20_util/tuple/element_access/constexpr_get.cc
! b68cf5416c2fe58417a5aa928142e9c0  libstdc++-v3/testsuite/20_util/tuple/element_access/constexpr_get_by_type.cc
! 1ab5d5135ed18826705090182d042b4f  libstdc++-v3/testsuite/20_util/tuple/element_access/get.cc
! 2664029df7afaf53b6185f17aedba134  libstdc++-v3/testsuite/20_util/tuple/element_access/get2.cc
! 8bb95bc3aa77e1f9d2214264bae0256d  libstdc++-v3/testsuite/20_util/tuple/element_access/get2_by_type.cc
! 92478d058d2368d1e740e28f8f3977c6  libstdc++-v3/testsuite/20_util/tuple/element_access/get_by_type.cc
! e5d049c687f87d432637e93af051b9cf  libstdc++-v3/testsuite/20_util/tuple/element_access/get_neg.cc
! ea30f3a53fabe68a786471629cf7f228  libstdc++-v3/testsuite/20_util/tuple/make_from_tuple/1.cc
! c6f5d6c81270a3f46f7b7faf2888c3f1  libstdc++-v3/testsuite/20_util/tuple/make_from_tuple/2.cc
! 517d115528944a2df1cf9e410fc0c1f9  libstdc++-v3/testsuite/20_util/tuple/moveable.cc
! 999bf853742ffaf04d98a854888e6366  libstdc++-v3/testsuite/20_util/tuple/moveable2.cc
! d98df0b309eca2ab7730157cd8d7a84a  libstdc++-v3/testsuite/20_util/tuple/noexcept_move_assign.cc
! 274787f9152451d3e7d659a5b5bfd701  libstdc++-v3/testsuite/20_util/tuple/noexcept_swap.cc
! cd6e87cc2bc277c9bd69063e8eea2817  libstdc++-v3/testsuite/20_util/tuple/requirements/dr2367.cc
! ca9ac6997faa284d081bf6a24d5a3da4  libstdc++-v3/testsuite/20_util/tuple/requirements/dr801.cc
! 43fedc385c7ce652a2826e88c4c18727  libstdc++-v3/testsuite/20_util/tuple/requirements/explicit_instantiation.cc
! 1ece695951a9c7644bcbd55d3c803bc1  libstdc++-v3/testsuite/20_util/tuple/swap.cc
! 62f03f71592fe0072c08b7b0092c29f1  libstdc++-v3/testsuite/20_util/tuple/swap_cxx17.cc
! 7233e6e7c83752f9e6c4efba32ed5ceb  libstdc++-v3/testsuite/20_util/tuple/tuple_element.cc
! c190385542e45d4575995a22902596b6  libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc
! e07c734adbd191f41dd01e0936d9cd60  libstdc++-v3/testsuite/20_util/tuple/tuple_size.cc
! 388eb1c9f0d0ecb6ae26b381456a666f  libstdc++-v3/testsuite/20_util/tuple/tuple_size_v.cc
! 16c775f8be368c4e00c34e7428404a81  libstdc++-v3/testsuite/20_util/type_identity/requirements/alias_decl.cc
! cb8ec3b0cb8af783cfbb1047a912958f  libstdc++-v3/testsuite/20_util/type_identity/requirements/explicit_instantiation.cc
! 9681ae174d527f82b7cd1a3e039f0056  libstdc++-v3/testsuite/20_util/type_identity/requirements/typedefs.cc
! 2cc88d466ef4d3076732c530273adee7  libstdc++-v3/testsuite/20_util/typeindex/comparison_operators.cc
! a314f2620e84bf2ee4b06b3054dd4d4d  libstdc++-v3/testsuite/20_util/typeindex/comparison_operators_c++20.cc
! e2fe633f1713bb0755a42d9191182fd4  libstdc++-v3/testsuite/20_util/typeindex/hash.cc
! 10220cafe427c3dc98b0c870324eeeb8  libstdc++-v3/testsuite/20_util/typeindex/hash_code.cc
! 1f39ad9bb88ffa3ea19dd6fbae259cb2  libstdc++-v3/testsuite/20_util/typeindex/name.cc
! 332d465ede6901d73bc527515622f41a  libstdc++-v3/testsuite/20_util/underlying_type/requirements/alias_decl.cc
! f2e5fbc7fd08b26aaf50462ad4a5cec0  libstdc++-v3/testsuite/20_util/underlying_type/requirements/explicit_instantiation.cc
! 597aa70f3c9155beacfe30645ef249bf  libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-1.cc
! 76b36855993c715d1829904f6e2dc247  libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-2.cc
! 1d026cddb6ddb5ad87666ec6dce86828  libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-3.cc
! 7f63843d9456fe020877f497f5dbde84  libstdc++-v3/testsuite/20_util/unique_ptr/54351.cc
! 26b79702d30cb1f90f5e324c2f8d48da  libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635.cc
! ce82913601675dfd1f0a1b80c85241e1  libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635_neg.cc
! b18de44d2d6352cd80f2944b1f4e0a42  libstdc++-v3/testsuite/20_util/unique_ptr/assign/91308.cc
! 3829e00f0101ec77a61f8c1f33c39dca  libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc
! ce7e4bd35f9c76632a9d67b846a0e187  libstdc++-v3/testsuite/20_util/unique_ptr/assign/cv_qual.cc
! 4b4076fab2a949c8b45ebcf1c808969a  libstdc++-v3/testsuite/20_util/unique_ptr/assign/move.cc
! d16ba6d172a62560e54389288770ca17  libstdc++-v3/testsuite/20_util/unique_ptr/assign/move_array.cc
! b7f1641e65317d69fd1f844a1e4fd3e0  libstdc++-v3/testsuite/20_util/unique_ptr/assign/nullptr.cc
! b105191dabe52ce217b77015a5bd6f91  libstdc++-v3/testsuite/20_util/unique_ptr/comparison/42925.cc
! 0e420b78b00e4126e4745533017b7cf1  libstdc++-v3/testsuite/20_util/unique_ptr/comparison/compare.cc
! 783e6835d21425ff44cb331cf457c30d  libstdc++-v3/testsuite/20_util/unique_ptr/comparison/compare_c++20.cc
! e18aa65583d794ba87bbe31f10746e55  libstdc++-v3/testsuite/20_util/unique_ptr/comparison/dr1401.cc
! 68186e3b2dc33bf455673b6fecb7c0ac  libstdc++-v3/testsuite/20_util/unique_ptr/cons/77990.cc
! a99f65d7c8a22a00d450421fda5fa7b9  libstdc++-v3/testsuite/20_util/unique_ptr/cons/array_convertible_neg.cc
! 2ecd2a758ac403244b58ed1f9c16cab1  libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr.cc
! c056a906426399063ddaf9c18975a3a7  libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc
! 78cbbded3a55b1554262ba8371cd2a80  libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr.cc
! cc06b8828762fb8c2b039574426940c5  libstdc++-v3/testsuite/20_util/unique_ptr/cons/convertible_neg.cc
! c4a83e5d09feec66437e000e529de09f  libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual.cc
! 122b6f61c7e72d348591e26485528b10  libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc
! 506ef353024ad1ff3592522938c181ea  libstdc++-v3/testsuite/20_util/unique_ptr/cons/deduction_neg.cc
! 111f8141ab6d41f65ef89264e0e5637d  libstdc++-v3/testsuite/20_util/unique_ptr/cons/default.cc
! 2b5a678678d4a565a450e60a4ea4269b  libstdc++-v3/testsuite/20_util/unique_ptr/cons/incomplete.cc
! e61cdeee0663f8f0d43904103cd838d8  libstdc++-v3/testsuite/20_util/unique_ptr/cons/lwg2905.cc
! 0b1d6e21221b45cf90a1f5f539ce2507  libstdc++-v3/testsuite/20_util/unique_ptr/cons/noexcept_move_construct.cc
! e835f38de4f7b60d1cf6175b11541982  libstdc++-v3/testsuite/20_util/unique_ptr/cons/nullptr.cc
! 5bd970db286dd1656af05b52e85ec113  libstdc++-v3/testsuite/20_util/unique_ptr/cons/pointer.cc
! 93d3c868dea9357e25cf54596bbfaa2e  libstdc++-v3/testsuite/20_util/unique_ptr/cons/pointer_array.cc
! 198be2118b99176a87db3183f1f01925  libstdc++-v3/testsuite/20_util/unique_ptr/cons/pointer_array_convertible_neg.cc
! bba09ab190e600361a239801c1252e26  libstdc++-v3/testsuite/20_util/unique_ptr/cons/ptr_deleter.cc
! 8cbe5f4af43267717ca297541c1d7a05  libstdc++-v3/testsuite/20_util/unique_ptr/cons/ptr_deleter_neg.cc
! ab926de12f928de6cc33af5fb9466ad1  libstdc++-v3/testsuite/20_util/unique_ptr/creation/92878_92947.cc
! 45e04bab9cc12c37f7ec630384c681bb  libstdc++-v3/testsuite/20_util/unique_ptr/creation/array.cc
! 9e089c530b4b41be00b0c9bf8903da83  libstdc++-v3/testsuite/20_util/unique_ptr/creation/array_neg.cc
! f0bf2b46453fc774435747a616c8c8fa  libstdc++-v3/testsuite/20_util/unique_ptr/creation/for_overwrite.cc
! 243ea5f4bab5135b6b21277a52803c65  libstdc++-v3/testsuite/20_util/unique_ptr/creation/for_overwrite__neg.cc
! e113ddb3c3c66c82ed2de7c0b26eec09  libstdc++-v3/testsuite/20_util/unique_ptr/creation/single.cc
! b68f8eae33065d18bb295963e5926d51  libstdc++-v3/testsuite/20_util/unique_ptr/dr2228.cc
! 00c863cc85fcf57fe5aed5bf46e48a77  libstdc++-v3/testsuite/20_util/unique_ptr/dr2899.cc
! d676ba1cdb2a65c0f373b53b172c00cf  libstdc++-v3/testsuite/20_util/unique_ptr/hash/1.cc
! 3777d2aafb415d44deff4278b3c6b5d6  libstdc++-v3/testsuite/20_util/unique_ptr/hash/90388.cc
! 823806fd077dffb75ddabe9381da6188  libstdc++-v3/testsuite/20_util/unique_ptr/io/lwg2948.cc
! 6548048ea96bb68ebd6023832472641e  libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/43183.cc
! 06cdb13cb41e17f6c590929ddbc1404d  libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/48398.cc
! fb3158f00250a1c4c7652045a063ec08  libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc
! 64050a33db19f1d1fe5cfb6e01f2bca9  libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/cv_qual.cc
! a438adfe84d541a91c9b7c768aa87c46  libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc
! 3bf797a02f6961e87528b7b94270c9e5  libstdc++-v3/testsuite/20_util/unique_ptr/requirements/explicit_instantiation/explicit_instantiation.cc
! 6713da41d47d96ba3618f3ae78c68c3e  libstdc++-v3/testsuite/20_util/unique_ptr/requirements/incomplete.cc
! 5ce2c7ff8ae05c486431d032b4ca314b  libstdc++-v3/testsuite/20_util/unique_ptr/requirements/pointer_type.cc
! c366b09cca0254eb576e5d20741489ea  libstdc++-v3/testsuite/20_util/unique_ptr/requirements/pointer_type_array.cc
! 6b06d5ab722540d13dc14d9118aa7a20  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/comparisons.cc
! 1eb460f041c572ac2216ada227542ffd  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/comparisons_array.cc
! 4a7cafdbbe65743044943fc950f31e26  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/swap.cc
! f2d15adcff80720680fa72562602c205  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/swap_cxx17.cc
! c3d3f31ade66cdbabe6b4061faf55eb4  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/allocate-max-chunks.cc
! 97955951344e8b8bc44a36e0c2088c42  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/allocate.cc
! 6494d5007d60a9aecfa0336e25e7376b  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/cons.cc
! a902ae49c2c7a151484df76bd06803df  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/is_equal.cc
! 04874e51f91ee5382ce597c953eee878  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/options.cc
! 507c6015a41cc1e9d6f6607b5859c1ac  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/release.cc
! 42405d0f76a86c7e2657f560a3101459  libstdc++-v3/testsuite/20_util/unwrap_reference/1.cc
! be823c67e5fc9db39f204a926648fa47  libstdc++-v3/testsuite/20_util/unwrap_reference/2.cc
! 66e487d92183b1af7085eb51e80ad173  libstdc++-v3/testsuite/20_util/unwrap_reference/3.cc
! 3f0703dde192948fd3710f4b6f522a6b  libstdc++-v3/testsuite/20_util/uses_allocator/69114.cc
! ad5da87905da76675c011cea122c63d0  libstdc++-v3/testsuite/20_util/uses_allocator/69293_neg.cc
! 94da979e26afd2b1ac9050756ced02a7  libstdc++-v3/testsuite/20_util/uses_allocator/92878_92947.cc
! 66c740424aabea47657522aa536816ba  libstdc++-v3/testsuite/20_util/uses_allocator/cons_neg.cc
! 2f6d8997cf3698510fbf6c9a880d7a7d  libstdc++-v3/testsuite/20_util/uses_allocator/construction.cc
! 8b23fa82c3cf4eb6bd0073777a8f351f  libstdc++-v3/testsuite/20_util/uses_allocator/make_obj.cc
! aae6d425bfd5346e2bfe0bdb42a12f6b  libstdc++-v3/testsuite/20_util/uses_allocator/requirements/explicit_instantiation.cc
! 99b710c9d615ca5cebaebad0a330f6aa  libstdc++-v3/testsuite/20_util/uses_allocator/requirements/typedefs.cc
! a3cfed57f33bae6aacc72ae3feddb321  libstdc++-v3/testsuite/20_util/uses_allocator/requirements/uses_allocator_v.cc
  841aff3ec9a5aa97b1e1e2e16d64dfb0  libstdc++-v3/testsuite/20_util/uses_allocator/uninitialized_construct.cc
! a34b6aa262d459f73e3788d23ad8b292  libstdc++-v3/testsuite/20_util/uses_allocator/value.cc
! b7b8b28e8523868bcc81675ea98f38be  libstdc++-v3/testsuite/20_util/variable_templates_for_traits.cc
  b9698b5e78dcefad507d6737875a6a1d  libstdc++-v3/testsuite/20_util/variant/100384.cc
  909e769606f79e2311fe65f425279584  libstdc++-v3/testsuite/20_util/variant/80165.cc
! 99f2558fcecdc164b77bdf51cd4842a6  libstdc++-v3/testsuite/20_util/variant/85183.cc
! db7ef73762714a323793bc56e3739ece  libstdc++-v3/testsuite/20_util/variant/86874.cc
! c3d0b04515ff3b7e3e6c1832d915405d  libstdc++-v3/testsuite/20_util/variant/87431.cc
! a321c5e0b4f87430a00f4dd4469c0fda  libstdc++-v3/testsuite/20_util/variant/87619.cc
! d7cc3d05d57e3f22f233ff5fb90ac525  libstdc++-v3/testsuite/20_util/variant/91807.cc
! 0fcd38de860b3197d359ef980881d0b3  libstdc++-v3/testsuite/20_util/variant/92878_92947.cc
! eebde6b588768281db7c77f74cb31057  libstdc++-v3/testsuite/20_util/variant/95915.cc
! 74f56d529dbb1c69c8447e2cf0c40f65  libstdc++-v3/testsuite/20_util/variant/any.cc
! 83529d2af0a07869d4a1677c8c36b0fe  libstdc++-v3/testsuite/20_util/variant/compile.cc
! bd926109610b524294a31f8b588ecdf3  libstdc++-v3/testsuite/20_util/variant/deduction.cc
! 1fae117acfc243666f94908e82433d14  libstdc++-v3/testsuite/20_util/variant/exception_safety.cc
! 643721405cfa4061df25e73b8e7c34e1  libstdc++-v3/testsuite/20_util/variant/hash.cc
! db6615334a6f62b43f4d68fe86977cbb  libstdc++-v3/testsuite/20_util/variant/index_type.cc
! e10f1ccdf1246cb98e4dab271cb80a36  libstdc++-v3/testsuite/20_util/variant/relops/89851.cc
! 6e572612abf329377c4cf424b11d2c04  libstdc++-v3/testsuite/20_util/variant/relops/90008.cc
! 6651742cfc1bb4258874bcc98a9449ec  libstdc++-v3/testsuite/20_util/variant/relops/three_way.cc
! e98ef570f66f699ad66991066054e81f  libstdc++-v3/testsuite/20_util/variant/run.cc
! 9de87a617372ed5d48895ae950b83711  libstdc++-v3/testsuite/20_util/variant/visit.cc
  271b1d4fa7c258bc0cfd32dff3784bd9  libstdc++-v3/testsuite/20_util/variant/visit_inherited.cc
! 9b0b50f6248ab97ece861beb2c58f5fe  libstdc++-v3/testsuite/20_util/variant/visit_neg.cc
! 1da351b220cb8d19528340fc313cc023  libstdc++-v3/testsuite/20_util/variant/visit_r.cc
! 6103ecc970c4fe0fd0606b9a48d4797c  libstdc++-v3/testsuite/20_util/void_t/1.cc
! f7dd4f87adde6cb2df536a32dd286087  libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
! 6f877b48fdad86c664b26edc2cbad29f  libstdc++-v3/testsuite/20_util/weak_ptr/cons/constexpr.cc
! 6214eef2cb17dd40487e55e95dad16a4  libstdc++-v3/testsuite/20_util/weak_ptr/cons/deduction.cc
! a1c3fc381e8b5cb07d7a81318b43580f  libstdc++-v3/testsuite/20_util/weak_ptr/cons/noexcept_move_construct.cc
! 88209dc54287543e8ca3b154854bd2e0  libstdc++-v3/testsuite/20_util/weak_ptr/lock/1.cc
! 4bc5d42bcaa8a672e738a30df3f40de3  libstdc++-v3/testsuite/20_util/weak_ptr/observers/owner_before.cc
! fb22e4bd606041e6c06feebce0991bcd  libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc
! 900670bd62a0a0d5de7e38cff27f814b  libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/2.cc
! fda318aff5ecc8249c4fffc1d77ddb1e  libstdc++-v3/testsuite/21_strings/basic_string/40160.cc
! b26f6587d783865d309df0276030e7be  libstdc++-v3/testsuite/21_strings/basic_string/56166.cc
! 0cc7e17e9838bbd05ee1e35810f52bc3  libstdc++-v3/testsuite/21_strings/basic_string/79162.cc
! 8b7ebdef0ddd3cb7458a67467e8bcf28  libstdc++-v3/testsuite/21_strings/basic_string/allocator/71964.cc
! eb69b3be78f012bbf339a1ad38777876  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy.cc
! 21c2ed8bd76cf2b5a6667c5b35ae96ae  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy_assign.cc
! dd5343d89c4d0a4877e62fef6209d9e4  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/lwg2788.cc
! 60279c8ace63a5941991f12d7eec1801  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/minimal.cc
! b356cd0bdf5a52f6165c51ba3a6128e9  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/move.cc
! 7025bdcefac7f969e204942e93aecb63  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/move_assign.cc
! 6716c8aa9879f372b0c1cf9248b07538  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/noexcept.cc
! 666b9ac9dad3db42edda9b821f762b63  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/operator_plus.cc
! 469ce7024728a73938798aaf9f84e677  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/swap.cc
! 8602234ae86c2decf54f441d29abf30c  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc
! 2d6c2eb95a1f967510f957e0581566b9  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc
! 8f9e5a2e1ba746a6ce4a21388c36081f  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/lwg2788.cc
! 2bbf7d6dee6a256a8f41bef34f58fb17  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc
! 6514f70370a4b973e539866460b9031a  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/move.cc
! e7718e0099152c5873f48651c53ab5e9  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc
! 8c367683a21bdd583ee674aa2068c6ca  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc
! eef614424bff140daeaeda93adcb1a3e  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/operator_plus.cc
! e1bf9b6aec1de5392f18a5970b224a95  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc
! fb0a7eb293077a5c14097619ab0ed3e9  libstdc++-v3/testsuite/21_strings/basic_string/capacity/1.cc
! d79a7be96bcb90a9e850d136ccda203a  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc
! 9de1c95fbbea1b80396e15821507b83c  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/18654.cc
! 54391128b33e4fff440cd65ef528c3e6  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/2.cc
! 6968e99dc019fe4212a3f31a39a785b2  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc
! dc8f8b694a1b11df2094357a08607e73  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc
! b679520743d93f7f5e54bb89c4334ed7  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/18654.cc
! 889399b8fd4c904cb47756768ff3f835  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/2.cc
! 77eff1beecc106314c1499985965e6bf  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc
! 5c3bbd344d395c35c38d9633fd81cf81  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/1.cc
  408950d5673e5a28433457ba820da161  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/103919.cc
! d91450c03e9686ad90713b26b78c5668  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/2.cc
! a6bdbb0a8131ceb7d4d05ad86274d320  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/3.cc
! eb495b43e9debfc95bcb6e8e5253e71f  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/4.cc
! b83bfb053075b49a56f896410ee1e17b  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/42261.cc
! 85601587f91d52548099b32a4a2e23cf  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/5.cc
! 58b87f0a8cb47029211e2aff61d28677  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/6.cc
! deadccd20fad8b2be84febf6ade337d3  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/64657.cc
! f384543feceee16e4c2f3dc67b08d6d3  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/65085.cc
! 891d02d384515a5d11fa5fc084de1457  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/69092.cc
! 81e983be14a8c2d5f4b69d963a8dc77c  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/7.cc
! 69894adc4829ad0b9f70b61767721e0b  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/79162.cc
! 1b23196114084546b56b35843187cc51  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/8.cc
! b091419044bc272594d866b19b81a4c9  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/86138.cc
! e55cad3ae1eca79dd5dbabda415b5195  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/9.cc
! 92d998193f9c95718e36fb8e744a98e6  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc
! 08c69b37f34e9fcc8004657dd22e98b5  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable.cc
! fdd720fde4d8b7e03f0978aeadcd81c3  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc
! be02a76b8f313965269535d0bb869e9a  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2_c++17.cc
! f5903ca34648b8e12d5d121053bbc2d7  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/noexcept_move_construct.cc
! 08f71bfd429fdb9ce8b4e68a45021bb7  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/self_move.cc
! e2d28362398397903a672439dced1e06  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/1.cc
! c32600bbb5b4e9cd5d23d77cf6dc7806  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/2.cc
! 95b74be50b66fbbdaa9a861f75f815af  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/3.cc
! cdf7609b5d4d99b28b7ab877f3272a5c  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/4.cc
! 9eb60aacc98e0fb0d03f62306fcfa93d  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/42261.cc
! bd155020710062e6eb1c79588ccf8f5e  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/5.cc
! a5ce919e795e3506b93d7dc1f6c248f1  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/6.cc
! bfe4ab2c78076a6e63350263a3e02c5a  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/7.cc
! 69894adc4829ad0b9f70b61767721e0b  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/79162.cc
! 430a0303d87f965e86d320828da98575  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/8.cc
! 70a190f25fff952cb4a3e38e573a84fe  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/86138.cc
! ad777f4a28de75bcc98d79112c231069  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/9.cc
! 9181213226b0db35785cd11bc02f5784  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc
! 3a8e67d81072d6e7ddb397a8390b21c6  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable.cc
! 6666500f25229c00ddddd5e871ccfb4d  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc
! bb81fab73b1288b3375cbe1bdcea490d  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2_c++17.cc
! 6fd0a02fa7e53162fe645c435849e895  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/noexcept_move_construct.cc
! 984584c2e1a06d29e600b9c58c438bb0  libstdc++-v3/testsuite/21_strings/basic_string/debug/1_neg.cc
! 94cf20eb5fea5595de99c508bda8999a  libstdc++-v3/testsuite/21_strings/basic_string/debug/2_neg.cc
! 42b3107f9d19768dc9f462e529fa76e0  libstdc++-v3/testsuite/21_strings/basic_string/dr2268.cc
! af4dca521a676d276346a998bde81080  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/1.cc
! 28e712e1eb5634b4ecb2b0afc1fd48ce  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/2.cc
! 7fbe1f463672d45c6be3d29704383510  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/21674.cc
! dbb7052e07262071ede4367744116cde  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/3.cc
! f63fa08305b045ab6869f7376b87eaca  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/4.cc
! 47c53e5a0d40d95360c89e6d2bb5c6b0  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/58163.cc
! fccfcfd6ac7e1dbe8aebbe8b14fafc5e  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/empty.cc
! dbc686f9969e5f55c2662c637fa15c72  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/front_back.cc
! a1fa73cbc8b510625fcc1d74ef9a0ae7  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/1.cc
! 03aabb83193b51ccbd961db3bcf94cae  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/2.cc
! 68856bb72f6e711f47ca1ccced78e369  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/21674.cc
! 91897a6271c678bd30d6f6a5836d4c4a  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/3.cc
! 436bcbeb673ede2f72d8019c44578540  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/4.cc
! 9005c4eb158ca32f57b61327bad5efd1  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/58163.cc
! aa40a4236f9cf555968baf9e7c4fe259  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/empty.cc
! 41b662eebc4ef5db15f5564d0c907499  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/front_back.cc
! deb70f6c3da16174684a54137e75a883  libstdc++-v3/testsuite/21_strings/basic_string/erasure.cc
! 3012363a00af878dad369c4a08363a6a  libstdc++-v3/testsuite/21_strings/basic_string/hash/debug.cc
! 6432cea26d8902f610820c7064658cf3  libstdc++-v3/testsuite/21_strings/basic_string/hash/hash.cc
! d86aaa9701b1086b41817dcdaafcb3c7  libstdc++-v3/testsuite/21_strings/basic_string/hash/hash_char8_t.cc
! d3b6c07e014a3c1cc58be3c72618a756  libstdc++-v3/testsuite/21_strings/basic_string/init-list.cc
! ffb6ab40920241497cda9d942a301d8d  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/1.cc
! 1e753145d04403aaba70438924d5205f  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/10.cc
! d7f57a807f330a4b95270154546a4b51  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/11.cc
! 745e49746a5556ff3e723017626dffee  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/12.cc
! b1bfb3244ef331083df98546101ee3b4  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/13.cc
! 54abbf948dcf4e6495eb84340683900e  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/28277.cc
! cd1eec58f11d968d7c45c549425071e3  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/4.cc
! f831f2f7030905a74239c4cdccdeb54d  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/5.cc
! 599095e980aa889cdb7af0d37c3aeb60  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/6.cc
! e0d81d4a4b28f10ccc6676ce3a5dbd80  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/7.cc
! 6c50e29e70aebd5ca76daba97ee481c5  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/8.cc
! 76896d64963ad6e80223bb9bda7864a3  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/9.cc
! 6f6206ddb02231fcad1fde14007bd609  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-in.cc
! 428e9cb6fa9e98f0202d805961ae0f75  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-out.cc
! 3b78a83c37713641cdc61cc7f8892c41  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/1.cc
! f51fe1c9232da0a55154aff53307ad44  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/10.cc
! 78120c1bf86b0ecc47d9e65a84ee7472  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/11.cc
! 42a61c117b877af50afbe0c021a71a26  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/12.cc
! 2d54425eb9db7ae679fa8000c55ca16e  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/13.cc
! 9f2c933d87e360210df843244de6f7f4  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/28277.cc
! d32cc629c846098ec5b3c26973505b10  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/4.cc
! 28a7ae56fb603b6fbbc4c4d96ba505bc  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/5.cc
! 5851a56d51d139691f9f3379e0a94974  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/6.cc
! 250378e6059a2602929a7e26f359dfc8  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/7.cc
! e5bfdf3ca2cf94ac55b2b45666b31c24  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/8.cc
! 6f2a874b7bd7c247a20dfc6643383c59  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/9.cc
! 781d150ba67e33d982014aaa1348fc01  libstdc++-v3/testsuite/21_strings/basic_string/literals/types-char8_t.cc
! f693c8dddff62abe438cc0b6e6cde342  libstdc++-v3/testsuite/21_strings/basic_string/literals/types.cc
! 321c8d3229149e0aff65826d18c2f948  libstdc++-v3/testsuite/21_strings/basic_string/literals/values-char8_t.cc
! 3fd4d233019981331d835f5c8fc6f8fd  libstdc++-v3/testsuite/21_strings/basic_string/literals/values.cc
! 34362d75ed3124324d5e1fa6d4dc0440  libstdc++-v3/testsuite/21_strings/basic_string/lwg2758.cc
! c23896d0ce9efe8c7aecada1c9711b4a  libstdc++-v3/testsuite/21_strings/basic_string/lwg2946.cc
! 57becbeac5d018b97a5102f806b732a4  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/64422.cc
! 1384b18661279c469f58c719386d5353  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/1.cc
! d89be2827f7b45ede9cf50874981ba8f  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/2.cc
! df725c56d95af34babbb2fa335ae2658  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/3.cc
! 24faf200254da8f20a735743169c6a78  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/4.cc
! 9a717cb274f2404c8f5f09e9fc3c37d4  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/1.cc
! d2d52386959b8439fc98e6cac2705f34  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/2.cc
! ca07b45f60c46d8f212cade82289f842  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/3.cc
! f1488a0e752e78c28122debde363023a  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/4.cc
! bf775781f97f27016a1de082b99cb066  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/1.cc
! 1281771a2e2423754e312527b5de0c6c  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/2.cc
! ac907d18580861af5e60a18f34b3dd0d  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/3.cc
! ee3a5c39dfcf1b03eb6687fdddb7deb0  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/4.cc
! 7689d4eb51835bbca85634cb4fc7d7c7  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/64657.cc
! 343fa5f220cddcff36445b1f4cc1a9cd  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/87749.cc
! 68016e73a14554996e92bb4751501d4a  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/move_assign.cc
! c4b97c6cc26415c9317d1a7fba5af004  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/move_assign_optim.cc
! 8315b2235343a4a4ccc5e159ba4221d4  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/1.cc
! 7511dd8946b7b1402f9dc0e42829779d  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/2.cc
! 010289dbc32b7bb4ed2607b561a1aa17  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/3.cc
! 95eb4713eab6d3b2f9ab2c9d04fa1acf  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/4.cc
! 02fb1795cd73633cb03926cf32bc9d33  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/87749.cc
! df8371a298515f69ab2ee268102ad750  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign.cc
! 43720ea349c982885e2a46621ad19ee8  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign_optim.cc
! cdb9ede449fb05842a36d19b3de84d3d  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/1.cc
! f6e8fe5bdaf4e95458a3b16d455b99bb  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/2.cc
! 4bc8a8087dd0778dc62fd96e000444e1  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/3.cc
! b51aa3f5ffa76ef946b0ba17e6066809  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/83328.cc
! 667161140259df75643dbe15298aa1e3  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/wchar_t/1.cc
! 3526329ec5e6d16b65ccaa5959d287f0  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/wchar_t/2.cc
! 242da04b92ae2483e79650d0c8573a47  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/wchar_t/3.cc
! a9c655e1f478bdc3d6a365cf10f35dcd  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/wchar_t/83328.cc
! 0fe484e38b288a79b1fff4c5f20dda5b  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/pop_back/char/1.cc
! f68925a356975d6c4a5603b796777dff  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/pop_back/wchar_t/1.cc
! efa11d3baaaebaec58feacd2bf439472  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/1.cc
! bbf06efd63ee8c50e3ae2a000cc00b0a  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/2.cc
! bd7e50cbdc086e3f74e1567542ff1e6a  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/3.cc
! 0f0a44700eeb4ba0f403b6a0d0d49223  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/4.cc
! 28bcd4565eb20bd6bbcbaeb4bfa9778c  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/5.cc
! c4146b41a6a68a5e2bcb2e50cb730b43  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/6.cc
! 2c5dcc5c10f11e8c5560d053bb42d29a  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/7.cc
! 66dcff5ab8d7538ff96bd57f1eb60f5d  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/1.cc
! d55b6e917016fda1f414bcdf063b6b43  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/2.cc
! 84fc5dd4a5d86d2d656351f2349d43ad  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/3.cc
! d6cfb46ef8c717ea44bbdac68d753b4f  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/4.cc
! 03d97a6f24128a333c8dd00b8526cfba  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/5.cc
! 25f8f586e4028339123067abbbcb82e2  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/6.cc
! 465e2e9ec3763c331e549d864c3a889a  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/7.cc
! b424ef069d48031ad9c9624f8fa7a286  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc
! 9a0793b215b28ba27e9682a529c69c64  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/errno.cc
! 8eb21f053802e2eec48fa2882e0a12ea  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stod.cc
! f147b096c66caaaf0201df0684500b88  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stof.cc
! 24d389f80b36ad69ece307c104f6b1f6  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc
! cfaf2227bdee07c04c92604d5db1d039  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc
! 938f26dad52bc1ae0bc2d8825d5aad4c  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stold.cc
! 3f1e08970f69be7e2d32a5109aa26034  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc
! 6f5e7d19069f3c07cb885ddf0dd1239f  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc
! 4426a1cb393e5a4c5f83f2e859004173  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoull.cc
! 67d8b155ab4c0baa4fff704712e34115  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string.cc
! 9fe25f119a8a4ba7a1dfe65375c7f33d  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string_int.cc
! 5ed6b95122a7cb1a6776b7bc5947ad65  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/dr1261.cc
! 5d7421493025543795b2a1af10be6088  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stod.cc
! 4e1466fee5a80a8933b933504884e96a  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stof.cc
! aebfcd5a73c59b91266e8b3dd633b8d4  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc
! 9ae04093f4aafcb2f3d1e4ef4ee46939  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc
! 19b03cc28dea3efbb84d91ed1432da61  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stold.cc
! 53f5950b7d14a777d083a71e5b0a966b  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc
! 8d37d3b52f71f3d6e83f34ae544433e3  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc
! 8518bfce96658b2cd9bbc73cd61bdb6b  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc
! 5ac54148d1d8e226b2a848b800e0569b  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/to_wstring.cc
! fa2a36a3b369e4a6f177f9b6704c7e69  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/1.cc
! 17c606d72b06231c7c13920c517402ce  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/13650.cc
! 099cc3f0bd43700081699d22cc34557c  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/2.cc
! 44eb16589412df9bd3aa57b0cad4b651  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/1.cc
! 8fd98f3ba0025dac3542dcc30821d7de  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/13650.cc
! 87ebe3fd0f8091147645e27dc4cb8ee0  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/2.cc
! f7fb8f147784f13a3e57e1ff26eff5c8  libstdc++-v3/testsuite/21_strings/basic_string/operations/contains/char/1.cc
! 499431f59c731a8d4da5bc04c759fc87  libstdc++-v3/testsuite/21_strings/basic_string/operations/contains/wchar_t/1.cc
  da3f700a53d22cd029a604673e059e11  libstdc++-v3/testsuite/21_strings/basic_string/operations/data/char/1.cc
  9ccbc06738d22d9f941b8f2b369c7915  libstdc++-v3/testsuite/21_strings/basic_string/operations/data/char/2.cc
  fabf5d00ed38687c6c74b03d67132fac  libstdc++-v3/testsuite/21_strings/basic_string/operations/data/char/86169.cc
  ca74682c72cb547cf309e380caad822d  libstdc++-v3/testsuite/21_strings/basic_string/operations/data/wchar_t/1.cc
  ebeb1bb794a93823182dc633b65b1594  libstdc++-v3/testsuite/21_strings/basic_string/operations/data/wchar_t/2.cc
! c160d3e4a0700da761a056e2fa9bd367  libstdc++-v3/testsuite/21_strings/basic_string/operations/ends_with/char/1.cc
! 8884ebafb4e16bffdd953d59bf14b7b0  libstdc++-v3/testsuite/21_strings/basic_string/operations/ends_with/wchar_t/1.cc
! e0ac309c64852ab5616e662af337e458  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/1.cc
! 027a39178ed5f00b7e95409f2963a170  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/2.cc
! 1ece88b3afea76aff35cee3649e8a94b  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/3.cc
! 25747975c211509fe80e544fee5d71e8  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/4.cc
! 742813bed392bc2099e16c9c2fe5b9e3  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/5.cc
! eb9038c33769ab6981ee1b1c86735d6a  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/6.cc
! b4fcb1a576b9fbb38e9f63916d3cb2b4  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/1.cc
! d949fe1757d965d711055e01110720f4  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/2.cc
! aba5fedb457fc2b025545981630ae36a  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/3.cc
! 1d9a134e755267f66018985a472a4f1c  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/4.cc
! d112b9690147b2889b36a3198465fd35  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/5.cc
! 5c57875d3a9397305ea02a701048da99  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/6.cc
! 4dee36dc3720409f6c155425e2017c5c  libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/1.cc
! 3351ee7a6bb4dc8101ed1502c850a48d  libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/2.cc
! 869697039258335d6861e4e2e35ddfe5  libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/3.cc
! 47c7bb43d94b1cf2a349b053805230e4  libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/wchar_t/1.cc
! db33d861ee2c2ba7e9d7860b58e2d2f8  libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/wchar_t/2.cc
! d018bd3c22925582a14300c6d2edde6f  libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/wchar_t/3.cc
! 3effded80c848974a3d83bf1f9fb61d0  libstdc++-v3/testsuite/21_strings/basic_string/operations/starts_with/char/1.cc
! aaddd573c4151c326ea72bc5788f294e  libstdc++-v3/testsuite/21_strings/basic_string/operations/starts_with/wchar_t/1.cc
! 611eda9da6975c32c7f8aa0722b80c17  libstdc++-v3/testsuite/21_strings/basic_string/operations/substr/char/1.cc
! 112db38fe5d55ec099021e71c7d62307  libstdc++-v3/testsuite/21_strings/basic_string/operations/substr/wchar_t/1.cc
! 12aa80f3b5bfa11d8964179422341ab8  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/1.cc
! ee93e8e4686d8c02b3cd35ebe2c14c73  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/2.cc
! 780157cf3d7f32a4ad7996341cb5078d  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/3.cc
! e172d4a435c7faeb83f02be3d79525b7  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/4.cc
! c871f347f108873e656392095116bc62  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/5.cc
! 4d61fa1c31a6bb3cfd4a1e220d2f0dcc  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/65630.cc
! 5c43a67ce93a6c007ad3d39db2e72bca  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/cmp_c++20.cc
! a65974b9d152480211f04dff880b8e9b  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/1.cc
! 5fda6133eaa600b609c0d3dddb4bece5  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/2.cc
! 1b11e94ef6bd70ab33b3497524728a97  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/3.cc
! 39ea08de583d46faae48fd3904807014  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/4.cc
! a3d351cc016f9d79f5ec0fe2ee08747f  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/5.cc
! 3e92c3c2f3393a787df8407412e05136  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/65630.cc
! b04766777458f2b7301a194e0c919549  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/cmp_c++20.cc
! 0eb83b04c15c8d202ced5340009538b0  libstdc++-v3/testsuite/21_strings/basic_string/pthread18185.cc
! 3545d1b03bd865ada27c5681eea3d6f2  libstdc++-v3/testsuite/21_strings/basic_string/pthread33394.cc
! 5ccaed78e80304b38cd361300ff604ed  libstdc++-v3/testsuite/21_strings/basic_string/pthread4.cc
! 1ede96c671ad519796003fbe0f079556  libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc
! cb5bf642b6ef0b0386471c45f438036a  libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc
! b24b354cea0f26b6e22689ec8d8331a3  libstdc++-v3/testsuite/21_strings/basic_string/requirements/citerators.cc
! 0a74136d79709b7dcf8baabf428fed5d  libstdc++-v3/testsuite/21_strings/basic_string/requirements/dr438/constructor.cc
! 4a4a7a9d9af8a3d252eb21f06d9cca69  libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/basic.cc
! 7aa56765bd1ba4a45ba275191f3d4273  libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/generation_prohibited.cc
! a3555e52bd4a0899b30cac0c203c47e9  libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/propagation_consistent.cc
! f473707ddcddca3025e5b3bc74027281  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/1.cc
! abc57ef8c3b9b6740de3c0c1b4effa84  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char/1.cc
! 3a6e7e31db8136b347fbf77aa84a80d8  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char16_t/1.cc
! 969ab3a2d353ee150aac09f629a6fe98  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char32_t/1.cc
! 76516a018d926f4fd1533753dc44f447  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char8_t/1.cc
! b426c4def62251ac3d24be08ee1bf64f  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/debug.cc
! 5e612d0f3334ae374c6d9b647f36c93a  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/wchar_t/1.cc
! 6a11edfc864a472816029448ebf436f7  libstdc++-v3/testsuite/21_strings/basic_string/requirements/typedefs.cc
! 6b1eb7b26573dd38d176c4ce7dd90ecf  libstdc++-v3/testsuite/21_strings/basic_string/types/1.cc
! 316dcb337c00d2fba2a343425cab8b62  libstdc++-v3/testsuite/21_strings/basic_string/types/23767.cc
! dd85ff7a2a0be273143159c865844bfa  libstdc++-v3/testsuite/21_strings/basic_string/types/pmr_typedefs.cc
! 0bc3f3ffade93d5be1d282f8239f04b1  libstdc++-v3/testsuite/21_strings/basic_string_view/capacity/1.cc
! f63eac1974b7fe35fabec71383a10747  libstdc++-v3/testsuite/21_strings/basic_string_view/capacity/empty_neg.cc
! 4fd21fe1dbcce7f3ade894f335a1133d  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/char/1.cc
! d68dab1b04d63dd4e3fceb08007d9e0b  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/char/2.cc
! 024bc13940db67bdbed4bd27adb64b24  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/char/3.cc
! 5975b3534ce70f6db979af8022d716d1  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/char/nonnull.cc
! cde4d3da0ea077f27241896801e8b62e  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/char/range.cc
! a4f9e3607774ef2331c5cd93f7845be6  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/char/range_c++20.cc
! 027619cd14c68144376f29ed00225b4a  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/wchar_t/1.cc
! 3be7fda5bae7081671a8b56eac758ac1  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/wchar_t/2.cc
! 890564180920737d396dfd75262eec0c  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/wchar_t/3.cc
! fc0038d9b5b16512e0fa693de683f05e  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/wchar_t/nonnull.cc
! 567dda958cc31c3a8e8b55db8f18cb9d  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/wchar_t/range_c++20.cc
! cc4a598b278b12478ef790a938f450bc  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/1.cc
! 0646c482e37e8424f332900e2d2c26c6  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/2.cc
! 0ed6d62ff4abdeab6a6da39da337b91b  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/back_constexpr_neg.cc
! 3ebe036aedace000f0dcef6f1d8e2cb3  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/constexpr.cc
! f7b9aac84f1ef0456989326bb7d9fe45  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/constexpr_neg.cc
! 8ee729efbc8cfafd28f456aa7aa76c21  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/empty.cc
! 866245df7ec426292eb7d0385f9b591d  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/front_back.cc
! 02da038ceae3aa90a1e56aebd2b01e96  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/front_back_constexpr.cc
! 6437fcf6357dedaf9f32c05a1dab2d36  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/front_constexpr_neg.cc
! ea47dff33e967ac6ba2d1dd2108a8304  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/1.cc
! 28b1a93d6ac417b28bb5271ec33db167  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/2.cc
! 8504042a9018fd0d640b3f2b30c54bf1  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/back_constexpr_neg.cc
! 1d75f381e14a726131ffc23710a831ab  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/constexpr.cc
! a64456ef06d589f9110f0280859dcc9e  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/constexpr_neg.cc
! ec4f46780620ebeb8c352e14e9ff483d  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/empty.cc
! 26ca19a7a484daab38e6325e95dea960  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/front_back.cc
! a773a1798ae0da10bc71774b4a84f27e  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/front_constexpr_neg.cc
! 80f3aa0b37b15650ffa9513b67d93a7b  libstdc++-v3/testsuite/21_strings/basic_string_view/include.cc
! 7cab6a4a04dc0fb9a659927b79d72a11  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/94051.cc
! 8572cad595f5bbd72245b4e3cbdd9d7c  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/char/1.cc
! 09777d3d65f8b8ed3fa2fddd89c36107  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/char/2.cc
! 6d2c05d5ad92f47625c55084eb38cf19  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/char/3.cc
! 2bd806a15266f20a64e1eade13d71499  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/pod/10081-out.cc
! 14468ede7c766197e22549e239ada658  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/wchar_t/1.cc
! 06712d1a025c961b8e1d3129c85a89ad  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/wchar_t/2.cc
! c0db9a3618df4c0efd73625dd02124e7  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/wchar_t/3.cc
! 8e1735a4bce37bef1ae3393dd864d8fe  libstdc++-v3/testsuite/21_strings/basic_string_view/literals/types-char8_t.cc
! ee58fb862feae3d2e5437a3162ad0907  libstdc++-v3/testsuite/21_strings/basic_string_view/literals/types.cc
! 1dfae14cd0546ce2c05ad629019edd83  libstdc++-v3/testsuite/21_strings/basic_string_view/literals/values-char8_t.cc
! f5762b9d721f3378d727068f209ad0d8  libstdc++-v3/testsuite/21_strings/basic_string_view/literals/values.cc
! d39abc44372d1e360778ec88d360319d  libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/char/1.cc
! 266ed8198a85e13d9a1b1373fcf255ff  libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc
! 1120045f4cf7d6af14f28d056f9e9ced  libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/char/1.cc
! 1826d293cf96efd29214f6db5b7d4f16  libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc
! 78409eaaaf815a0ac855279bbba4642a  libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc
! 7c9068c530aa7387a9b568fb4690865d  libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc
! 6e9a274a7ea5d83bf10060d62fbfeac8  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/1.cc
! d838a5844716a5673b8cf2a41bccf4bb  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/13650.cc
! ff29c56a28f50a58edac5a872ad4f10b  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/2.cc
! df848cba246046e3bf5488330cebf7e6  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc
! 256ccfd29712f56996a272d70658ed12  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/nonnull.cc
! ca6ef3567e2046a92639740cc0c17fcb  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/1.cc
! afcbd3529f006845df5b3db261d5399b  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/13650.cc
! e96c0904be90027e3dd04c4f36f4c148  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc
! 6865bd43ce41c5eb3ed32a10fe1d9979  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/char/1.cc
! 6a7d77f05002ba3cc85e75859fb211c1  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/char/2.cc
! 08434190dcd52439abb046b581e9a103  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/wchar_t/1.cc
! 210115794b6ece22afaff5cd96f17566  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/1.cc
! 058675fee9a617afcd68fcf62464dc83  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/2.cc
! eb02a4fa2890eb65be9983306367c835  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc
! 0e5f68ccfe3fbf6bcf807dbae4c652ac  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/wchar_t/1.cc
! ed356778358ec3db608c44a76b8ec21c  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/wchar_t/2.cc
! b92f0a6b615175785f7cd18ebaffcf62  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/wchar_t/constexpr.cc
  49684812d0e6e538d983a81cc02ea19b  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/data/char/1.cc
  3aca8654c80e2a1ffcc111b84f41adec  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/data/wchar_t/1.cc
! 88cd328cecbf8b5ba9ffd43638cd947e  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/ends_with/char/1.cc
! 8bf78d9c6b6d2ad80791ade9ddb8d084  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/ends_with/wchar_t/1.cc
! 2785c2ceba16c680d0a2bd0c668bea11  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/1.cc
! 030a8cc4a3f5c356f58cc5366b35a2bf  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/2.cc
! 20c00fc0040ade659fcce3b4c078f8c3  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/3.cc
! f1358b3dfa694f02eca58026fe7c03ff  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/4.cc
! 55b3e434f68705deab35dad0c98345f4  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/nonnull.cc
! 7756c36aed5546ae8272e34b305a4bf8  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/1.cc
! 8b95635082369316fba595c84f3fe285  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/2.cc
! 3ebaf65a2692b713dcd5ed0a5f90a1f1  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/3.cc
! 08e95ae62fdd2a63c5a3b9ae494271f2  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/4.cc
! 906166db46fd5d400e8f43c443056af5  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/char/1.cc
! aeb30a6bfb75107fd9641dd22b6240fd  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/char/2.cc
! e8f5d6a0bc58cbcadb4dae9e616f4b1e  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/char/3.cc
! 881735d142ae0142efe8239173793256  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/char/nonnull.cc
! 1e29137012522dae78fc01ed446a84e8  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/wchar_t/1.cc
! be3ef7e3cef023b3c128159641b5299b  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/wchar_t/2.cc
! c0511b8a85917c76b657e5281a565ad1  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/wchar_t/3.cc
! 24c61699ddf5729ea0ff064e7154ad51  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/starts_with/char/1.cc
! 959999bc23a6e4b0e798657bd523f4c6  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/starts_with/wchar_t/1.cc
! a863deb3779c026a2c77b7b5b7219cca  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/string_conversion/1.cc
! 0a24dc0440df4fb9257e32467249e85a  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/substr/char/1.cc
! e6dd9076d00bbbbfcb8e7348c27a2a5b  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/substr/char/83511.cc
! 5caaaf290b07f73ea0b579f5074c60ab  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/substr/wchar_t/1.cc
! fd370f82fb5dfb26ff6a6ad1df68ec48  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/substr/wchar_t/83511.cc
! 3e8619b4df1470066ff3a4efdf69d94f  libstdc++-v3/testsuite/21_strings/basic_string_view/operators/char/2.cc
! c40166c459af603cd27d676386a99bdd  libstdc++-v3/testsuite/21_strings/basic_string_view/operators/char/89446.cc
! 459d13bf929302da3021de0711b40d5c  libstdc++-v3/testsuite/21_strings/basic_string_view/operators/char/cmp_c++20.cc
! 65bfdb2ab4cfbb92f46583745b5b541f  libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/2.cc
! ba986cca7c83323bb7a6ebbbfaedb044  libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/89446.cc
! eb20dc849f8300277dcdf0be52639003  libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/cmp_c++20.cc
! bf52eb1343262cbcc6be41f862154b10  libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc
! c21a2e7305e5db476aa59fdcefad4406  libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc
! acf2b026de8e4981b9eec3ff02d819dd  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/constexpr_iter.cc
! b246730192e7c8a78eb83d42eb2068a2  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/explicit_instantiation/1.cc
! 961cc691b2cf054b0d03748f3e5938d2  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/explicit_instantiation/char/1.cc
! 3f269bfe969ce31707aea4fdbf7d9f22  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/explicit_instantiation/char16_t/1.cc
! 5b08f911017c0204446128a47288b2a7  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/explicit_instantiation/char32_t/1.cc
! 9f501e35b5793aee73245ed00b2d4d16  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/explicit_instantiation/char8_t/1.cc
! 93e1fe54de644d06e733d3311c304ec0  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/explicit_instantiation/wchar_t/1.cc
! c58e4a54f9812ca54a33f8bb9ab1eb7e  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/traits_neg.cc
  58947d8735c23b82574427ce2851e965  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/trivially_copyable.cc
! 2f04053c1d380c019bf497e3354e6272  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/typedefs.cc
! a005ecff2e5bae0e6776d87e235b2969  libstdc++-v3/testsuite/21_strings/basic_string_view/typedefs.cc
! e891c7552eefd52a28b6ae80efdcd720  libstdc++-v3/testsuite/21_strings/basic_string_view/types/1.cc
! e722bc26aff269db73e0bfe5f4f9531a  libstdc++-v3/testsuite/21_strings/c_strings/char/1.cc
! 127b326e94c3827778fd5f32ce64bc28  libstdc++-v3/testsuite/21_strings/c_strings/char/2.cc
! 008d75650596a9b88f36dbb86d66a5a7  libstdc++-v3/testsuite/21_strings/c_strings/char/3_neg.cc
! 6b386d4762ded5fc46ed4490a2587dd1  libstdc++-v3/testsuite/21_strings/c_strings/char/69626.cc
! 7ab22f1eca3d2163d70d1fca577eeba0  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/1.cc
! 8e5854a4d2dcb18a671fea463b6ae968  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc
! 76b748b7a5ae86f7ef64aa97533be47c  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/24559.cc
! 61273db84a24973d685dfa28f1dad4ef  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/3_neg.cc
! 08584669c547d9624598e6f249398912  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/1.cc
! c4aa40fef9e40133cdc0e07f8548d86a  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/57704.cc
! 2411e7b3a2c4912a831f9714f8452b02  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/65049.cc
! c1421f0831b72bffc843575f64539e06  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/99181.cc
! f4b616f53a91454dc4cc796789333411  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/typedefs.cc
! a7f3a15d3b510eea614d924bde4e90c2  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char16_t/65049.cc
! 88b16bcd976741b89b4fc2c8a63f4edb  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char16_t/eof.cc
! dc2163d3064f8b1cbb0e4a72a173e133  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char16_t/typedefs.cc
! 50ab8cc1d716b51a94c9558e0bd5e7a4  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char32_t/65049.cc
! 31801bd9a20aece427d39581d08be3d6  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char32_t/typedefs.cc
! 2fe66c87716622ba6e964e6b70bb6939  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char8_t/65049.cc
! 819f978a2dccb0bb94ee5d2edc454b72  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char8_t/typedefs.cc
! 40e9161139bad049915c7ae5a6ef2733  libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions.cc
! fdac26a07484a999f99f668d9f150453  libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc
! 5c41266953525b8f49738e1728468f0e  libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++20.cc
! 955438433acee1c100dba7c5172187cf  libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char/1.cc
! e36b81ed3e3c93bdebeba84eb99ea42b  libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char16_t/1.cc
! ccf11f05b5b84d95731c4d00bd6c49b9  libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char32_t/1.cc
! c3ca3d667f2a68a99aa3e39db9588829  libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char8_t/1.cc
! 8fe1711ff06b77388013f79820da23ca  libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/short/1.cc
! e48790d617942662612cb6c7223d76b1  libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/wchar_t/1.cc
! 75b338a953af76ec5dff9df7afa3b01d  libstdc++-v3/testsuite/21_strings/char_traits/requirements/short/1.cc
  5eb7812f69f414ef3a35a89be9d4dc1f  libstdc++-v3/testsuite/21_strings/char_traits/requirements/version.cc
! cbb955786cd9098c4d69e362a6a6ad6a  libstdc++-v3/testsuite/21_strings/char_traits/requirements/wchar_t/1.cc
! 516861afc8775ba070ffca8f2eca1129  libstdc++-v3/testsuite/21_strings/char_traits/requirements/wchar_t/65049.cc
! d5aacdee7411be410be37a365e721a64  libstdc++-v3/testsuite/21_strings/char_traits/requirements/wchar_t/typedefs.cc
! d9c885283c90755165497fdbfc3fc2ec  libstdc++-v3/testsuite/21_strings/debug/shrink_to_fit.cc
! 071cb1bcc966f2e9b26dd2b097edbce0  libstdc++-v3/testsuite/21_strings/headers/cctype/functions_std.cc
! 00cb7df1f595c0dff1cc99951782e6ed  libstdc++-v3/testsuite/21_strings/headers/cstdlib/functions_std.cc
! 585129c451ae7eda763b895a4807d13a  libstdc++-v3/testsuite/21_strings/headers/cstdlib/macros.cc
! afffcbae8d2a946ec972351290c411c6  libstdc++-v3/testsuite/21_strings/headers/cstring/functions_std.cc
! 585129c451ae7eda763b895a4807d13a  libstdc++-v3/testsuite/21_strings/headers/cstring/macros.cc
! e025f8ff19faaedbbdca0c9f69779c63  libstdc++-v3/testsuite/21_strings/headers/cstring/types_std.cc
! 51d39332b4350caad9fb12ccd5a8c6e7  libstdc++-v3/testsuite/21_strings/headers/cwchar/functions_std.cc
! d09c90f8cba887833440fe1183ed0f58  libstdc++-v3/testsuite/21_strings/headers/cwchar/macros.cc
! bad31a31a829dd02d1f7d1e403e323aa  libstdc++-v3/testsuite/21_strings/headers/cwchar/types_std.cc
! da02fb36b24ab2ab812135e8c1ce1a6f  libstdc++-v3/testsuite/21_strings/headers/cwctype/functions_std.cc
! 63ba231d26d73227a9ab4ad84a5d06d3  libstdc++-v3/testsuite/21_strings/headers/cwctype/macros.cc
! 9f3070cde97c439439c09865a9b17efe  libstdc++-v3/testsuite/21_strings/headers/cwctype/types_std.cc
! a67fccf8731b9033e35a6403c6af03f6  libstdc++-v3/testsuite/21_strings/headers/string/synopsis.cc
! 8863dd42d20617025cda9fadd61b4862  libstdc++-v3/testsuite/21_strings/headers/string/types_std.cc
! d236a616ca41e31e1749bcf646ca4da6  libstdc++-v3/testsuite/21_strings/headers/string/types_std_c++0x.cc
! eadd4e1f7c673d18943e6a3f2721cda0  libstdc++-v3/testsuite/22_locale/classification/isblank.cc
! 5e76f19c90a1dc863168dda88076d6a6  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_locale.cc
! 6495add60139a9dde9a12852ba2b5c66  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/1.cc
! a989a227555fb23467b29517fa1fcfdb  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc
! 9e5f11ade0e8e628be45fc883c9dbc79  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc
! 2d6331b0a3389c3566e5ba75912c852e  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_locale.cc
! 189cb0e4995ee8d88178db2a35411505  libstdc++-v3/testsuite/22_locale/codecvt/char16_t-char8_t.cc
! a4814acac1b17553b0b6ba8b2a8b3920  libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc
! 8c65750ebf8876197842506710051ffe  libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc
! 5981ae8d5e64e82d0dabc263ba2f1036  libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc
! 9278cc3909e5c4f59c757afbb1546c71  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/66417.cc
! 417f7f1ed521326a949252d879138363  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc
! c27bcde2e58845f8995d651f11d51043  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/80041.cc
! b06af525f6b154ecdf1a8fdc69d36614  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/members.cc
! 954a21bf082eed42b26919e5df8bbad2  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/misaligned.cc
! f583e2faab7d329f8f9daf4e7db7405b  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/requirements/1.cc
! 80ba0b6fd55d5cd10a0bed5eb3893a0a  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/69703.cc
! f31eb5cdc91083b0372b0bbc2ea8272d  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/79980.cc
! 0f6d22be6c963b83e22305ceb89a6fcc  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/members.cc
! 80c7dddade0fc4d503dd0ac8f79f6888  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/requirements/1.cc
! 62f0e02ea2082270f2bedde91361ee61  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/wchar_t/1.cc
! 16a4e8dc7d8df2d3d56a4a770a079308  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/66855.cc
! d23859cd1acead3dc7fae0bace79cb72  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc
! 922d55abc3f4cb5eb7904719b2393b45  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/members.cc
! 2bbbeb6961a1001fbd3a24f68ae8ebc0  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/requirements/1.cc
! 86fab0453dd31f032c06833a5f67579c  libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_locale.cc
! cd90df5bf0efda72cdc22055d5ede4f9  libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/1.cc
! fe73eaa7c31458c255b03430680295c4  libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/2.cc
! ec6366612f83a1ee6dfded6c209beda3  libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/3.cc
! 5f540c30feefbec18e17ec1ea1e360e0  libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/4.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_locale.cc
! 8edde82121bfb4f96ff1083d6ccb9fa7  libstdc++-v3/testsuite/22_locale/codecvt/in/char/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_locale.cc
! d31bffae8590100ec20c176dd23c7758  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/1.cc
! cb5ed3cfb6b56f1ab91a74c6f5009df7  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc
! 87f1ba38d96519ce4648f2167fee7c58  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc
! 833c87078129e6b7c3821c84d3e07633  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/4.cc
! 138d1e3c4a6f5fe6d6034cbf312f7194  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/5.cc
! 07049270968014a74d9aedcb014fa8b5  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/6.cc
! 023436d39494d9e66bb3aa795f2866ce  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/7.cc
! 7a3cb45cf624903af3fc691c43b358c3  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/8.cc
! 476fa318de5ddb3bf35e7509bdf1df65  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/9.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_locale.cc
! 99d74d3592f1a82e28bf3670f7fe79b4  libstdc++-v3/testsuite/22_locale/codecvt/length/char/1.cc
! f693b87ca2deee4fb1cf7a4d51d93e0f  libstdc++-v3/testsuite/22_locale/codecvt/length/char/2.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_locale.cc
! 5d393c84b1b75dcec0aac9a803d16d5e  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/1.cc
! aee875df3cce19eed3401ba3fcbc51ba  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/2.cc
! 1781d2bb1777f2bde2efa52a64bef6e5  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/3.cc
! a0fcfefebd1e1655e143ff5856305b03  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/4.cc
! ac80fa056067f2c931e05c6d66ea7ab5  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/5.cc
! 7511b0359adcc67551da97b7f1ac7276  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/6.cc
! 4177f6062642db982bcfc4e750de6043  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/7.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_locale.cc
! 4c039b2446bfba8e1d8b056a1f00acbb  libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_locale.cc
! 44bc41b17ea95b6ae90c1496e260ef75  libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/1.cc
! 4d12fbd650b1df0ce25cb6b17665e74f  libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc
! d2085ad209f62cb0951edeaaaf8b344d  libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc
! 6458ef988b346b5931682744d77d7f06  libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/4.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_locale.cc
! 8f5aab9bc322f96af4752afcac08300e  libstdc++-v3/testsuite/22_locale/codecvt/out/char/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_locale.cc
! 1dbbebbe1fea895c0c63a53a198e676f  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/1.cc
! 5839eb485e500d6bfe4eba8f27799838  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/2.cc
! 223a9a7fbf8b7f05928ae8ae7e53e5ca  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/3.cc
! 8686407217d585a6ec6d6f01c10764c9  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/4.cc
! 718df4a5e24c608f9a4cfd9ec4058ba1  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/5.cc
! cfab58089cbaedb09ab889f32b2668d4  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/6.cc
! 2c3761cee5d8db27e2b26cd841234077  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/7.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_locale.cc
! 57980882cd14fb10682a9ca2014122c7  libstdc++-v3/testsuite/22_locale/codecvt/requirements/base_classes.cc
! 005eb0c9e633f15ac8eb953e96ea865e  libstdc++-v3/testsuite/22_locale/codecvt/requirements/explicit_instantiation.cc
! 7d8730a8bed37799436902f1a75a82ab  libstdc++-v3/testsuite/22_locale/codecvt/requirements/typedefs.cc
! b3c0615863377d60ba49af9e23bce6cb  libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_locale.cc
! 65ed8c6b367c248be64c89ffc3f16a3b  libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/1.cc
! 05ba52bf978008211242ae36896bdf6a  libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/2.cc
! 8a228c45c60922c77617b4d858c6f25e  libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/3.cc
! c19445e3c9f35485c43cc9148891e822  libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/4.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_locale.cc
! b834a9fe8a0aa86aa6e5b8da194e03d5  libstdc++-v3/testsuite/22_locale/codecvt/utf8-char8_t.cc
! 9ce913d64dc44f046acecbc66b480114  libstdc++-v3/testsuite/22_locale/codecvt/utf8.cc
! 9a657d3ede0a4c01bf2558bf41d7d4cc  libstdc++-v3/testsuite/22_locale/codecvt_byname/1.cc
! 4aee8b4d9a20440e8026fa356776ea83  libstdc++-v3/testsuite/22_locale/codecvt_byname/50714.cc
! eeaca72bceca591a3912d756d3edae9f  libstdc++-v3/testsuite/22_locale/codecvt_byname/requirements/base_classes.cc
! da52e1de380c1445867363803440eb21  libstdc++-v3/testsuite/22_locale/codecvt_byname/requirements/explicit_instantiation.cc
! 86a7c4fdaf370a6e1654774bd4fbfdc2  libstdc++-v3/testsuite/22_locale/codecvt_byname/requirements/typedefs.cc
! 73986e52171d7eec4c9c7376cc24b011  libstdc++-v3/testsuite/22_locale/collate/compare/char/1.cc
! 07ce2202fbb73d42ff393f9d6e3a63a5  libstdc++-v3/testsuite/22_locale/collate/compare/char/2.cc
! d334b077adcc7ac2fb8abe6024fe57ef  libstdc++-v3/testsuite/22_locale/collate/compare/char/3.cc
! 938978ce3bb19c2f3d24444b8ef5999c  libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_env.cc
! 91788bac12d94fc92e9ee9fb1f270e6c  libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_locale.cc
! b7062f193457d9ea35a9406a54fb8f3c  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/1.cc
! ec162139a24040e2a66e6618b8c73022  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/2.cc
! ed918ff361a903deb6b95411d51af8ec  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/3.cc
! e237dfad7a9ed277f5189fbe61d6c189  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_env.cc
! fe1421dd95af34d121b176d0746317ef  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_locale.cc
! 5f76bf4895b89c7cb67d4dcc2b70fd64  libstdc++-v3/testsuite/22_locale/collate/hash/char/1.cc
! 09b78564ef6fe896c8bdeec3b58141a0  libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc
! 303b668812dba1c4eb85525fc3bb55aa  libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_env.cc
! 53c5f3cad2015aaa20f03187c7845dec  libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_locale.cc
! d8eb4415e9f6d90720ebed1b643f403f  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/1.cc
! 63e79483c7dde260486e22297688fd69  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/2.cc
! e237dfad7a9ed277f5189fbe61d6c189  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_env.cc
! fe1421dd95af34d121b176d0746317ef  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_locale.cc
! 90f4939dd47ae63c845629917a525148  libstdc++-v3/testsuite/22_locale/collate/requirements/base_classes.cc
! 7b9e295a39b84c9cb4e3aa568adf1464  libstdc++-v3/testsuite/22_locale/collate/requirements/explicit_instantiation.cc
! b5fd304aba897d4d79bd9074c98f7509  libstdc++-v3/testsuite/22_locale/collate/requirements/typedefs.cc
! bac894e6e420aa35618aba137835c9e0  libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc
! bf2006b3d432352548112f043edefe57  libstdc++-v3/testsuite/22_locale/collate/transform/char/28277.cc
! 25a740b506d02ab845903d6d039e56c5  libstdc++-v3/testsuite/22_locale/collate/transform/char/3.cc
! df43c2b2eb35ae8dbcc40c3bb862d992  libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_env.cc
! 8ec93ba64bd8a362a1f9eb610993f608  libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_locale.cc
! 1057d3fb39b68075d400c4decc80c041  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/2.cc
! 6490c729e6db988f7b1a9b3c66f0e05a  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/28277.cc
! 822dde7d14592d7293ee287258f45d76  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/3.cc
! 3c90cbf0427f46c1a181025e2fd22892  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_env.cc
! ed22ff4b1eec2dbe90a6bdf15bc5df13  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_locale.cc
! d5ba1516b2c6e1584944292235564ffd  libstdc++-v3/testsuite/22_locale/collate_byname/1.cc
! 227c1211fa6d68dc05a245d2dc0b8f24  libstdc++-v3/testsuite/22_locale/collate_byname/88681.cc
! 3f4e15619c729434888c3364f175e043  libstdc++-v3/testsuite/22_locale/collate_byname/named_equivalence.cc
! 5882b44b07072fcdd2309044a64d1c47  libstdc++-v3/testsuite/22_locale/collate_byname/requirements/base_classes.cc
! 073b64dd2f4a178fb55919ca62cc4083  libstdc++-v3/testsuite/22_locale/collate_byname/requirements/explicit_instantiation.cc
! e012e8d578332a6262fb03103c26f44a  libstdc++-v3/testsuite/22_locale/collate_byname/requirements/typedefs.cc
! e791c79c07f8dcba0f48323f13c7ada9  libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc
! 5b1d145c28df2348ab1963d53bb8cef1  libstdc++-v3/testsuite/22_locale/conversions/buffer/2.cc
! 1b9a464437113fa48b97f6891069b9e4  libstdc++-v3/testsuite/22_locale/conversions/buffer/3.cc
! 484651c08eb5e6c558869644f1db7bc9  libstdc++-v3/testsuite/22_locale/conversions/buffer/requirements/typedefs.cc
! 5edede5c75017125c998657f5b276a24  libstdc++-v3/testsuite/22_locale/conversions/string/1.cc
! bbbb5538b6a03dc3941332174ddab41a  libstdc++-v3/testsuite/22_locale/conversions/string/2.cc
! f041b60cc91283c2666db5fb5589d3fd  libstdc++-v3/testsuite/22_locale/conversions/string/3.cc
! 26ca10dc1c1f9ac375662f65e13d206d  libstdc++-v3/testsuite/22_locale/conversions/string/66441.cc
! d3c6d0edeff5981aaaedfccd116bcb09  libstdc++-v3/testsuite/22_locale/conversions/string/requirements/typedefs-2.cc
! f8ab858b2cfb3fc86fbf60cf55186941  libstdc++-v3/testsuite/22_locale/conversions/string/requirements/typedefs.cc
! 8a2e67d3b859f974bda00380a60cda4d  libstdc++-v3/testsuite/22_locale/ctype/2.cc
! 9ace2cda182fcbe82b0d2086b478dad6  libstdc++-v3/testsuite/22_locale/ctype/cons/char/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_locale.cc
! 1256d1545ed912c15626551fdf32c3a4  libstdc++-v3/testsuite/22_locale/ctype/dr695.cc
! 4244bc0e9831eeae763e6ae2747bd8e5  libstdc++-v3/testsuite/22_locale/ctype/is/char/1.cc
! aea1db4e4db8feb803ad24d95e92fd24  libstdc++-v3/testsuite/22_locale/ctype/is/char/2.cc
! e74ca0e6089192a78f6f1abcd363dfde  libstdc++-v3/testsuite/22_locale/ctype/is/char/3.cc
! 02406e64ec9e40bb6ec326e7990d6b51  libstdc++-v3/testsuite/22_locale/ctype/is/char/9858.cc
! 6f43545bbace76e02bf3a8a5a81d7f17  libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_env.cc
! a4ec0901c0534972bb5211197d794985  libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_locale.cc
! a06783e6066b8894e12fbc40d87bab0c  libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/1.cc
! ec95ba5d41117ac30ffe613145d26e6b  libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/11740.cc
! 7b07d0f18b7c48a38428fa69c51d6f4c  libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/2.cc
! 1bba72d19d6070e168cb7a9a87aa77b0  libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_env.cc
! cf17480e0c3f5659fa68035f2d7bf7f8  libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_locale.cc
! 36bb25326c2b87db0ad086f9cbdd89ce  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/1.cc
! ce76d6bf3c098651462df7bb44e5cfb2  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/19955.cc
! 4fe970a474e722d8a9ef16f21c8eca55  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/2.cc
! 1bba72d19d6070e168cb7a9a87aa77b0  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_env.cc
! 71f1820217aa5986cfd32b8bb1dc1599  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc
! bebceb2b00cdc14cf3a01c8e6467d894  libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/1.cc
! e79855a1ba1aa716b82947c6d70d49e9  libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/2.cc
! a90801099f8b5def81f37cbe69966cc4  libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc
! 1bba72d19d6070e168cb7a9a87aa77b0  libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_env.cc
! 71f1820217aa5986cfd32b8bb1dc1599  libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc
! c86d067f3f4f10daa0555d561948a5ab  libstdc++-v3/testsuite/22_locale/ctype/requirements/base_classes.cc
! c5d8b64df52f44f754ae6989a61ca0db  libstdc++-v3/testsuite/22_locale/ctype/requirements/explicit_instantiation.cc
! d69eba9d2f8afaf0e033f5ff6eed18e8  libstdc++-v3/testsuite/22_locale/ctype/requirements/typedefs.cc
! c459fbf8682ed428aaa97ed871fddcf6  libstdc++-v3/testsuite/22_locale/ctype/scan/char/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_locale.cc
! 5e3c227f3154b78b8524fd56bdb877c3  libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_locale.cc
! d19941ee2ad81e38586a1d8b8dfbf653  libstdc++-v3/testsuite/22_locale/ctype/to/char/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_locale.cc
! a79c2bfb96d51df238a5795ba58c92f0  libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_locale.cc
! cd677dbdeb5b6fe745e8974a90efebb6  libstdc++-v3/testsuite/22_locale/ctype/widen/char/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_locale.cc
! 9589c8f102151adbd507a57a5236b023  libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/1.cc
! c1a1216a874c1fb9eafe0a875b74e6bd  libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/2.cc
! 76c7447315b581c92322b496f1c05fd7  libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/3.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_locale.cc
! 2cbb6ec306cdf4f07f0c7ea3106517fb  libstdc++-v3/testsuite/22_locale/ctype_base/11844.cc
! 7d5df4c4b377cb6e6f007881169f546d  libstdc++-v3/testsuite/22_locale/ctype_base/53678.cc
! 67088f38ed02ed5a60d27d01f7b3e7fc  libstdc++-v3/testsuite/22_locale/ctype_base/blank.cc
! a3bf0f0a48ae03726d3cc941ad564932  libstdc++-v3/testsuite/22_locale/ctype_base/mask.cc
! d2861760bf7fe70f66822aff871d8afc  libstdc++-v3/testsuite/22_locale/ctype_byname/1.cc
! 8d49043316bf18675134c7ce7bf01cc2  libstdc++-v3/testsuite/22_locale/ctype_byname/2.cc
! 2f560f9e656749d6c2bda288c2df062f  libstdc++-v3/testsuite/22_locale/facet/1.cc
! 833119bca6fbd5ab104d20647711f05b  libstdc++-v3/testsuite/22_locale/facet/2.cc
! d2365f8bfc2e68b8d2e61ebefe51a46a  libstdc++-v3/testsuite/22_locale/facet/25421.cc
! eb5a742865efb9b764bc06a13ac46c8a  libstdc++-v3/testsuite/22_locale/global_templates/1.cc
! c20df550c4f7985684e7c982da98dcf6  libstdc++-v3/testsuite/22_locale/global_templates/standard_facet_hierarchies.cc
! 9e8090ae511679433e433703178d45fe  libstdc++-v3/testsuite/22_locale/global_templates/user_facet_hierarchies.cc
! 43211ffff7bb9f6a09c6c972d775a6e1  libstdc++-v3/testsuite/22_locale/headers/clocale/functions_std.cc
! cc4374a08775f617094139ebf3325ad8  libstdc++-v3/testsuite/22_locale/headers/clocale/macros.cc
! b6e8cd5ecb2401cbae0906f664d2a3e2  libstdc++-v3/testsuite/22_locale/headers/clocale/types_std.cc
! 9a286535516ee0465ddfd21358f5f73e  libstdc++-v3/testsuite/22_locale/headers/locale/synopsis.cc
! 2ff3489fe7976d8d9a021ca5129a61c5  libstdc++-v3/testsuite/22_locale/headers/locale/types_std.cc
! 98db97a47d275bc5d42accbeedf130e5  libstdc++-v3/testsuite/22_locale/locale/13630.cc
! 82ffcf4405bbc31ea61ab1710516d4e2  libstdc++-v3/testsuite/22_locale/locale/cons/1.cc
! 98914a00f0a5cafa32db10e3dee4bf26  libstdc++-v3/testsuite/22_locale/locale/cons/12352.cc
! b053172c4b34b4f3d64b019bd6dc888c  libstdc++-v3/testsuite/22_locale/locale/cons/12438.cc
! c293c75393102f63ec5ce93ed9926e79  libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-1.cc
! febd1830ab1538d7d136b6b9162c2622  libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-2.cc
! cbd7f496186be07205182aad38afbd33  libstdc++-v3/testsuite/22_locale/locale/cons/2.cc
! cb2da9a320dacdde384205cf90555d79  libstdc++-v3/testsuite/22_locale/locale/cons/29217.cc
! 25d8e698192a729d38cfa77350515c5a  libstdc++-v3/testsuite/22_locale/locale/cons/38365.cc
! 8a7a9d53559e0f9e5c6739543b2421fa  libstdc++-v3/testsuite/22_locale/locale/cons/38368.cc
! 99a152826e89f43245c1290615dda44f  libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
! 7d804f060c7605c22d891243293d9dda  libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc
! 631f4c7b0cb136b1fdccb2e876ca86fb  libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
! df847dc3ff7bf6ac5a8d383fe6ec4b1e  libstdc++-v3/testsuite/22_locale/locale/cons/6.cc
! 253ce58b211b0d51d7c60780b9af82f2  libstdc++-v3/testsuite/22_locale/locale/cons/7.cc
! 973ceaa57872a878a140d0b08994dcd9  libstdc++-v3/testsuite/22_locale/locale/cons/7222-c.cc
! fbf3f780557b7020949a040261f6699f  libstdc++-v3/testsuite/22_locale/locale/cons/7222-env.cc
! 402907f4d8aa5ffc2da3f460477867c6  libstdc++-v3/testsuite/22_locale/locale/cons/8.cc
! fe1ffefb63b9bae94124f6b635567eae  libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc
! afc78641213cd2937359735e85aa57d3  libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/1.cc
! 7302733b26b00ee978ccad3455a6d54d  libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/14071.cc
! bb7132662b3b96d7b0cc253dfdb6e657  libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/2.cc
! 265c1c3d84347ed0bdd8c5a0bf5b5a6e  libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/3.cc
! aabb9f50222e407c13fac44d3a253004  libstdc++-v3/testsuite/22_locale/locale/operations/1.cc
! c047585c7e83933910c18b2445f2bcbf  libstdc++-v3/testsuite/22_locale/locale/operations/2.cc
! 5df263157cac27b8a22e903460557de6  libstdc++-v3/testsuite/22_locale/messages/13631.cc
! 77bb35688ffdd190e6e0754ab1d61614  libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
! c96712058d9f619080b071eb4db26edf  libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
! 4aa848b2b9029b948cd1dcd2685bb69a  libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
! 593c427dde8d126d6a663aed35eb4653  libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc
! fce63ba1f3708709105fe000820eb5fd  libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc
! 6d4aa2f0954418a0bed050fe240a4eea  libstdc++-v3/testsuite/22_locale/messages/requirements/base_classes.cc
! 6994a9d0553ec6e57ce15ca671e8fb3f  libstdc++-v3/testsuite/22_locale/messages/requirements/explicit_instantiation.cc
! f46f11c1731268f3ba68e5990cc6578b  libstdc++-v3/testsuite/22_locale/messages/requirements/typedefs.cc
! d0170b38410b0ed2b2552fc13309bcb2  libstdc++-v3/testsuite/22_locale/messages_byname/1.cc
! eccff464aadc410f6ffa2c5944e3483d  libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc
! 686e7121bc8e0909f2a128aec66ce0e6  libstdc++-v3/testsuite/22_locale/messages_byname/requirements/base_classes.cc
! 1057f6c3b703bccfb52fc6c8871985a7  libstdc++-v3/testsuite/22_locale/messages_byname/requirements/explicit_instantiation.cc
! aa71b12b22a5359ae5a7fa78cf86aac9  libstdc++-v3/testsuite/22_locale/messages_byname/requirements/typedefs.cc
! fb414862bfba40ef50d9afd54a4b5799  libstdc++-v3/testsuite/22_locale/money_get/cons/3.cc
! fe0839e1c6625c3943fed238dd3d782f  libstdc++-v3/testsuite/22_locale/money_get/get/char/1.cc
! 7cae8c2837fa0d1abfa8469c820f36c2  libstdc++-v3/testsuite/22_locale/money_get/get/char/10.cc
! c7409b7d9ea5f36b5b83234e148c81d0  libstdc++-v3/testsuite/22_locale/money_get/get/char/11.cc
! bab3295b07ffa9f37e559fdb127d5cc0  libstdc++-v3/testsuite/22_locale/money_get/get/char/11528.cc
! 30d87c20f80b5f2e3bcfc0e3576ec9f2  libstdc++-v3/testsuite/22_locale/money_get/get/char/12.cc
! d6f11449e0da1da8e44684fdba81f3ed  libstdc++-v3/testsuite/22_locale/money_get/get/char/13.cc
! 3dfc03ca90e2a5fbab05a57b20a544e5  libstdc++-v3/testsuite/22_locale/money_get/get/char/14.cc
! cd3d6a0501726e74ad34af8cf3f6a6ba  libstdc++-v3/testsuite/22_locale/money_get/get/char/15.cc
! d835d4a89119e4dcf04d5175fbbc899d  libstdc++-v3/testsuite/22_locale/money_get/get/char/16.cc
! 224572847295080bbd0b925826d58670  libstdc++-v3/testsuite/22_locale/money_get/get/char/17.cc
! 015ec8457faab578dd92ec2780e529aa  libstdc++-v3/testsuite/22_locale/money_get/get/char/18.cc
! 07e837747123087c251f451c3bc826dc  libstdc++-v3/testsuite/22_locale/money_get/get/char/19.cc
! 9d40135bc9473e77e422120bfdf9b622  libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc
! e49375981f02ba633a6b3eb23af5414d  libstdc++-v3/testsuite/22_locale/money_get/get/char/22131.cc
! 0a9a218eb03a036e09933c882f081d82  libstdc++-v3/testsuite/22_locale/money_get/get/char/3.cc
! 512357964ffc4504f87f38e09eef3c25  libstdc++-v3/testsuite/22_locale/money_get/get/char/38399.cc
! 1f05e7f4cc9e9ccbf9208049657077a3  libstdc++-v3/testsuite/22_locale/money_get/get/char/39168.cc
! 1352e504d62b302d7d6249e3e8c274eb  libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc
! f561afce5d291524285ae1f0b366922d  libstdc++-v3/testsuite/22_locale/money_get/get/char/5.cc
! b114473b5b0346c0ff46ad46652844a7  libstdc++-v3/testsuite/22_locale/money_get/get/char/6.cc
! d4a2473d2268d7393e5cfe1078bf9afd  libstdc++-v3/testsuite/22_locale/money_get/get/char/7.cc
! 44d904466cd7a83efd3d1a3a1d4b6ef2  libstdc++-v3/testsuite/22_locale/money_get/get/char/8.cc
! 975a1c98f055fd6f2204b0c375b22039  libstdc++-v3/testsuite/22_locale/money_get/get/char/9.cc
! 6dfd55ee94f5156e0f28d98db13df960  libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_env.cc
! e63ab06f077278e1bcc9138b6010f3f0  libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_locale.cc
! 51e92284a5ff8f1b81c7e46b7b9a09fb  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/1.cc
! 19298404b6fae3317162c0c5e9fdf55e  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/10.cc
! 0d57ace80951af5c17ef99bb951e4d31  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11.cc
! 5262bd80f30c54077c14054e58da7f88  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11528.cc
! 59d2c309e860c294b954292ea2129777  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/12.cc
! e3ce9f06b7ca6cc71448e1b72f43e964  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/13.cc
! 8051d00808827d12e9f342fd51366de4  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/14.cc
! 2c72bd41558964a046394748293ae685  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/15.cc
! 3b5fb2b60c66b0858ad746642299090a  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/16.cc
! 6e9d0e2376b171cec223b714f37934d5  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/17.cc
! afae273fb6fc36f0f8950c730c4c4933  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/18.cc
! ef5a1fbfebc45f367f9e489ffa27756b  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/19.cc
! ef478cb3dc0bdb8b7dc8993ef8c41e9d  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/2.cc
! 1295b914e0fc6ce71422db9270cc77f7  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/22131.cc
! 1b4a249d6299ceed4f23d3a8fd602ef1  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/3.cc
! 595575876938cacd93cb1e5798dfe08e  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/38399.cc
! 1636253c5a61712970932a1857a14651  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/39168.cc
! 2eefdd30988e888faca942074f39f2e9  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/4.cc
! 8453a03f279eb0d0dc09e643ff26fae8  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/5.cc
! fc6fd55fb6eed42d48c59efb6df7c38e  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/6.cc
! b59f425e17b4e46a4dd45fd91b665f23  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/7.cc
! 0ada0aec17247f0d567eb50e434e3fed  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/8.cc
! 6df1e86ec65755c5a8f85bd3d98c551e  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/9.cc
! 6dfd55ee94f5156e0f28d98db13df960  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_env.cc
! e63ab06f077278e1bcc9138b6010f3f0  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_locale.cc
! 6f7fa83f8f48d2e4ee3974ca45811d9c  libstdc++-v3/testsuite/22_locale/money_get/requirements/base_classes.cc
! 138ae45bceb1a3427423069f7dae84da  libstdc++-v3/testsuite/22_locale/money_get/requirements/explicit_instantiation.cc
! 20a01f965dab4e7b2532ccf6df4b2ddb  libstdc++-v3/testsuite/22_locale/money_get/requirements/typedefs.cc
! 2641997a341bd4d6718273dcea75d134  libstdc++-v3/testsuite/22_locale/money_put/cons/3.cc
! 04e906e791e309330b46daea1b331d78  libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc
! 207298ff254fe974d1b8f7c005ae9692  libstdc++-v3/testsuite/22_locale/money_put/put/char/12971.cc
! 2fb846832dcc7988bf302246c40dfb3b  libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc
! 4e21f036c63881cfb5ace856709c7761  libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc
! 2ceb53d2b504bdd79b15252c49b6f4a6  libstdc++-v3/testsuite/22_locale/money_put/put/char/39168.cc
! 8a36092157aa1ac1fef25820ca13a24e  libstdc++-v3/testsuite/22_locale/money_put/put/char/4.cc
! a245a7ec8f88f3a4f0d203802854f0c7  libstdc++-v3/testsuite/22_locale/money_put/put/char/5.cc
! 9f6dfc48860efa57610bb5cccda80764  libstdc++-v3/testsuite/22_locale/money_put/put/char/6.cc
! 3080903ea535e2a683b7bd2ae53cd103  libstdc++-v3/testsuite/22_locale/money_put/put/char/9780-3.cc
! eb478911d7da1ec03d8c0c234d1dea02  libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc
! 942f6d5cb29aa1b525eb28e7b7497470  libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc
! 3a50804498371b45de05533766b426fb  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/1.cc
! d243049d139ee5189545af5a8e34c012  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/12971.cc
! 2a0b71158c4d4bc4a474c6ece1eaf269  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc
! 820c936ae2f9596b161fd21745ea65fb  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/3.cc
! aa0a0382e28348b93559a362ba77b52b  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/39168.cc
! c0ba46a3d892899e5e86cc6c0d117b53  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/4.cc
! 61f465a32b77499fc2b2de2b65f71511  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/5.cc
! b5977c617cd9b4462360bcbdc8086e9b  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/6.cc
! eb478911d7da1ec03d8c0c234d1dea02  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc
! 942f6d5cb29aa1b525eb28e7b7497470  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc
! 5ecc4ea9c3e45ec6eb6ff053f1de0551  libstdc++-v3/testsuite/22_locale/money_put/requirements/base_classes.cc
! 0ec4863d1729ea358c96c9fcfbb35a9e  libstdc++-v3/testsuite/22_locale/money_put/requirements/explicit_instantiation.cc
! 113d553662fbcffa6731ae92c5ed9985  libstdc++-v3/testsuite/22_locale/money_put/requirements/typedefs.cc
! e94c8899d9d62c5692a2b86cc04020e6  libstdc++-v3/testsuite/22_locale/moneypunct/40712.cc
! 0c09868d537d6437f40bf4b8f619deee  libstdc++-v3/testsuite/22_locale/moneypunct/members/char/1.cc
! 263310fd2fcec9eaf1d6bcd3f0f6ce0e  libstdc++-v3/testsuite/22_locale/moneypunct/members/char/2.cc
! 1bba72d19d6070e168cb7a9a87aa77b0  libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_env.cc
! 65a97ea4dece05e20fd7107671a01415  libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_locale.cc
! c7eedc1dc74cd6140b6be8caeedea929  libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/1.cc
! 403546bff86b30f282f601ef8533e2a6  libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/2.cc
! 1bba72d19d6070e168cb7a9a87aa77b0  libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_env.cc
! cf17480e0c3f5659fa68035f2d7bf7f8  libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_locale.cc
! ab0a87111bd614fcca243acd0d47edea  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/false/base_classes.cc
! c40854690c86cfaf337866f186212315  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/false/explicit_instantiation.cc
! 2324d57b45ba6a4cb2c7a411126f7356  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/false/intl.cc
! 4d99a3bd3ebaa9bcca2ab9933ab28729  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/false/typedefs.cc
! 0e2d7a25369d60fec03549ffedb962f3  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/true/base_classes.cc
! b149b1deff78706c44fe9769cd8b3a13  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/true/explicit_instantiation.cc
! 024b2947163248dfe09ead192a2495c8  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/true/intl.cc
! 69c1af0a735a1385b96785750b3ad57e  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/true/typedefs.cc
! 4d31f84befdf6174decc637dcb490b71  libstdc++-v3/testsuite/22_locale/moneypunct_byname/1.cc
! e67bc9a38a2cfea150f354e8f3aa541c  libstdc++-v3/testsuite/22_locale/moneypunct_byname/named_equivalence.cc
! 01f7f604ba061bfd7cda8987d413dc63  libstdc++-v3/testsuite/22_locale/moneypunct_byname/requirements/base_classes.cc
! cb4fe9de4f9f4cb029afa68a6c31acca  libstdc++-v3/testsuite/22_locale/moneypunct_byname/requirements/explicit_instantiation.cc
! a6ed5c20e6a3991177d906a12a232900  libstdc++-v3/testsuite/22_locale/moneypunct_byname/requirements/typedefs.cc
! c32a01a0a4a45182472de41799aafcb1  libstdc++-v3/testsuite/22_locale/num_get/cons/3.cc
! 02e9dc276d1cf6bff77e28ee7320ba97  libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc
! 7e025387a21acf91f7b41785119ab26a  libstdc++-v3/testsuite/22_locale/num_get/get/char/10.cc
! 0f7b73f8f52705e46721f51048e8491a  libstdc++-v3/testsuite/22_locale/num_get/get/char/11.cc
! 8762c24d8292bd1b3cb9ba7b7fbbe8fb  libstdc++-v3/testsuite/22_locale/num_get/get/char/12.cc
! cc1ae47235ac037159c05e680e21dacc  libstdc++-v3/testsuite/22_locale/num_get/get/char/13.cc
! 58bc4860168b051af5df9bdfe3a3d448  libstdc++-v3/testsuite/22_locale/num_get/get/char/14.cc
! 1332f1f49eb786cc384edd0afbaca822  libstdc++-v3/testsuite/22_locale/num_get/get/char/15.cc
! 147167c19352a51420a12c9ab8a0c7b0  libstdc++-v3/testsuite/22_locale/num_get/get/char/16.cc
! 8b9eb510b13281fe453609efea34751b  libstdc++-v3/testsuite/22_locale/num_get/get/char/2.cc
! 73508a355dab231f39baabfd53de5d84  libstdc++-v3/testsuite/22_locale/num_get/get/char/22131.cc
! b18f4230737c719a59703d4b65c212f5  libstdc++-v3/testsuite/22_locale/num_get/get/char/23953.cc
! 8e7f787434e681aac78c157d9da9847b  libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc
! ab8a89a66aaf56d47e03e24405f7b6cd  libstdc++-v3/testsuite/22_locale/num_get/get/char/37958.cc
! daafdd76f886db5605d39b77eb0ccc59  libstdc++-v3/testsuite/22_locale/num_get/get/char/39168.cc
! 8c1554b656909c6ec4431ae3704d2102  libstdc++-v3/testsuite/22_locale/num_get/get/char/39802.cc
! 2b8f1fc96c83056618d52b1347fb43fa  libstdc++-v3/testsuite/22_locale/num_get/get/char/4.cc
! 050aef3eff4856de0ebe40edf431f7b3  libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc
! 755205087b291038701368005189a5c3  libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc
! 444166f1209d1a35d14ea0132d7a3276  libstdc++-v3/testsuite/22_locale/num_get/get/char/7.cc
! d37bfef05e2c10de999b0b03d9619997  libstdc++-v3/testsuite/22_locale/num_get/get/char/8.cc
! 69c6d5e42369fc56f2ca77254f3bacdb  libstdc++-v3/testsuite/22_locale/num_get/get/char/9.cc
! 15810a1c208b4676a0f38a8ec9b308f0  libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_env.cc
! 942f6d5cb29aa1b525eb28e7b7497470  libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc
! 0552847a802969c3f56d8e1187ae8108  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/1.cc
! 551b6b540847ece1308eca0cc5d2aebd  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/10.cc
! 8e1cec44b13ff29a6622c19a96395f16  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/11.cc
! c1de62fc096f1eb4e4c3b8e7fe1d0dda  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/12.cc
! ea1a045eb2548470d61a5f1d28a85bba  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/13.cc
! d9bd022ab02098134950bb29a2479f36  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/14.cc
! d29a2d0ad668117d7b4c4ec62bc504cd  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/15.cc
! a799ef29a7ab43c1f6a6a6d6139665ba  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/16.cc
! f954f90a8810c1f81c11395ed8a62517  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/2.cc
! e666763dca74bccf548154908ed63834  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/22131.cc
! 60742614c7e8c61d071d206525069148  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/23953.cc
! e4de7d7a416840ab27a1cfc7be15637d  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/3.cc
! 4d99f8fb9275c20c1f54b1ac24be9d9a  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/37958.cc
! 5f0a9f6696dda70eb1c2ffeaa969584a  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/39168.cc
! 4346973e965fe9f852b3167d27a7a5c3  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/39802.cc
! 00cf9c40baef937bbb31755f89a8e9a3  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/4.cc
! 6962d1aea6d5dd42a4766b9572f100fd  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/5.cc
! c9424cb3f844bb4d93475557915462ad  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/6.cc
! 05c01fef89b9d34328b702943d4a3de1  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/7.cc
! 03f141fd9eb81b162a6254675d293230  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/8.cc
! 6018a47b5c0e16db4e90d5994cb2bb01  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/9.cc
! 15810a1c208b4676a0f38a8ec9b308f0  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_env.cc
! 942f6d5cb29aa1b525eb28e7b7497470  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc
! 8071003f230fa87790d0306799c0281c  libstdc++-v3/testsuite/22_locale/num_get/requirements/base_classes.cc
! 55561f09693f9f2972dc3d4328f4c95a  libstdc++-v3/testsuite/22_locale/num_get/requirements/explicit_instantiation.cc
! de63066d9c2d190b994e3a7bfd0f6385  libstdc++-v3/testsuite/22_locale/num_get/requirements/typedefs.cc
! 9bdffb58430894dd37a526edf0c459d8  libstdc++-v3/testsuite/22_locale/num_put/cons/3.cc
! d59444a7227321deab8b9f51cb16e315  libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc
! 6031e28965fd8a633622db64e60470b4  libstdc++-v3/testsuite/22_locale/num_put/put/char/10.cc
! e1b49183a92a645e50b0cc140e4a9f58  libstdc++-v3/testsuite/22_locale/num_put/put/char/11.cc
! 1b4e1bea897935117bbafce8f2b384f8  libstdc++-v3/testsuite/22_locale/num_put/put/char/12.cc
! cfef440e8d7491f8babbf935431847f4  libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc
! c314e642528285f034582926360f89ec  libstdc++-v3/testsuite/22_locale/num_put/put/char/15565.cc
! 0450a2f621cb8d9de6d9af3c62c32fe1  libstdc++-v3/testsuite/22_locale/num_put/put/char/2.cc
! d32bbe175151405232423ca6af2f9d4c  libstdc++-v3/testsuite/22_locale/num_put/put/char/20909.cc
! 82d010211972e2c72a8b88fb8af6240c  libstdc++-v3/testsuite/22_locale/num_put/put/char/20914.cc
! 7fc6330ef428aac3b032d2924934e7ca  libstdc++-v3/testsuite/22_locale/num_put/put/char/23953.cc
! 97aaa0433532a002610a0c074117f627  libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc
! 80ca90f5a009f4f3792b5452e60e8a10  libstdc++-v3/testsuite/22_locale/num_put/put/char/38196.cc
! f203c6c8330f1c96b4fb33bfe6e4c272  libstdc++-v3/testsuite/22_locale/num_put/put/char/38210.cc
! 76b518be4855fb3df673c84786611f0d  libstdc++-v3/testsuite/22_locale/num_put/put/char/4.cc
! bdfd7f0b94d59ced4038d959603706ae  libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc
! 71c14ea41263dffd9f6ecc759591ed9f  libstdc++-v3/testsuite/22_locale/num_put/put/char/6.cc
! dbb32ea6a239e9afcefa1585efdcd452  libstdc++-v3/testsuite/22_locale/num_put/put/char/7.cc
! 57e4f2e5fe10ec6243d1ef7cf68b6335  libstdc++-v3/testsuite/22_locale/num_put/put/char/8.cc
! 1d101fd90fdc388533526439a87fac96  libstdc++-v3/testsuite/22_locale/num_put/put/char/9.cc
! a78a821d9836bcceef53f6d1e14523c3  libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc
! a568b14659b37e68009ec456ddb3683c  libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_env.cc
! 3bc215161d98015198158ea76a0671e8  libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc
! 3c3bf672d3ee0318050d1238fcb28f97  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/1.cc
! 7d6047ed71b33b2cbeda52e22493a2e1  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/10.cc
! a14dcfdf52110d4f8a21ae8767645261  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/11.cc
! 65f2698ac8254670bb5545b3f8d8fb71  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/12.cc
! d309c3afd51e21ba6a6e23dde0b677e4  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc
! dc6d501665e65ba2f10f3ca3b48d576d  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/15565.cc
! 50964de993ebeb371ca66bd99267fce6  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/2.cc
! 19ab8146eafc80044b946863f7e1f292  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20909.cc
! f926c8e129aa34f1f2c57c496b0452e0  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20914.cc
! 90ca10500dd19955f72c2fe4626e0f7c  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/23953.cc
! 645aed4b4673eb77f43408bd02641974  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/3.cc
! 34a0fe906ca84e638bc2e04d53cf7825  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/38196.cc
! 4722195e1bd27f9137f43107559de60b  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/38210.cc
! ce288c60d2f2161dc1dece59d450bc2c  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/4.cc
! 5920637e4afcf621fe98922289a296b4  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/5.cc
! 4a2ca6a16b2c73e3016a33c1149c6ab6  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/6.cc
! 461683ae79c862c0a9433f8b458e395b  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/7.cc
! b957de5f2eb3b8174755ffb61f23f0c5  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/8.cc
! 7c6125495578c29be91533753eabc094  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/9.cc
! aeb23a6a61de6f7ae2a4d8b2bc2fddd1  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_env.cc
! f46f02c901ea3b3df5569d133b4de4d0  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc
! bc78fcf786b9f16596fef6c87d6d9db6  libstdc++-v3/testsuite/22_locale/num_put/requirements/base_classes.cc
! 5e0cdb9e3b275804dfab22d425b676d4  libstdc++-v3/testsuite/22_locale/num_put/requirements/explicit_instantiation.cc
! 6d4d6e33b2ecfb633ecfcc8612c94819  libstdc++-v3/testsuite/22_locale/num_put/requirements/typedefs.cc
! 59bd3ea13174217f6e5b5a45427bdc49  libstdc++-v3/testsuite/22_locale/numpunct/members/char/1.cc
! 68fc77e6bd9d705ebd12a40c808c61e2  libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc
! 3564fa06f415ef18c557a8a669af5d05  libstdc++-v3/testsuite/22_locale/numpunct/members/char/3.cc
! c45e70fa6b06d9e0d60147b0856dd0a0  libstdc++-v3/testsuite/22_locale/numpunct/members/char/cache_1.cc
! 50678960bc28f73a7eaa79be6224631e  libstdc++-v3/testsuite/22_locale/numpunct/members/char/cache_2.cc
! c76ca2a4689986eeb2bf1b3338e99884  libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_env.cc
! c30b6fd12eff8e2d830c5e4dc6d0271c  libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_locale.cc
! adfdf5eb419eebc07701a1b969dd16cf  libstdc++-v3/testsuite/22_locale/numpunct/members/pod/1.cc
! 4776b65f54b9e63b1aa1edb382b331e5  libstdc++-v3/testsuite/22_locale/numpunct/members/pod/2.cc
! e46b761d84f963bb735796d19b7ffdcf  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/1.cc
! 1de1a54a5d9e5e67f20ece803fcaadb6  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/2.cc
! a3d19bbfba2a99423e76b36f8e0a583c  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/cache_1.cc
! 44a8904ae48460ef37f2f1f031698fb4  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/cache_2.cc
! c76ca2a4689986eeb2bf1b3338e99884  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_env.cc
! c30b6fd12eff8e2d830c5e4dc6d0271c  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_locale.cc
! 25936b7ce2efcd88c8e42e0862db35dd  libstdc++-v3/testsuite/22_locale/numpunct/requirements/base_classes.cc
! c716f1a22a1a7825d2caf82775e292a0  libstdc++-v3/testsuite/22_locale/numpunct/requirements/explicit_instantiation.cc
! a0214e6df660137e60a97f073cb0626a  libstdc++-v3/testsuite/22_locale/numpunct/requirements/typedefs.cc
! 83582b8c8c66825d81640e4900226817  libstdc++-v3/testsuite/22_locale/numpunct_byname/1.cc
! 1174bbc20f86ccc3164adef15d185024  libstdc++-v3/testsuite/22_locale/numpunct_byname/named_equivalence.cc
! 9492dec3e411dc1b41f2be6ed5a45610  libstdc++-v3/testsuite/22_locale/numpunct_byname/requirements/base_classes.cc
! 1117392bad22e8460a8534afba659b40  libstdc++-v3/testsuite/22_locale/numpunct_byname/requirements/explicit_instantiation.cc
! 851f2ae38fb7352f6869b37a88515184  libstdc++-v3/testsuite/22_locale/numpunct_byname/requirements/typedefs.cc
! 4a22f1d1ed0ac4bc3674212578c1cac4  libstdc++-v3/testsuite/22_locale/time_get/date_order/char/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_locale.cc
! 5b51d02db9399c13cdc77c7f630f748f  libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/1.cc
! b04853c628b4bd309c57ab8e2cc26991  libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_env.cc
! 3096806591df2dca52c36a9d583f9917  libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_locale.cc
! 9fd1691b64a566f37779699a2c38aad5  libstdc++-v3/testsuite/22_locale/time_get/get/char/1.cc
! 48d55e6a40464178094d212cf82cad39  libstdc++-v3/testsuite/22_locale/time_get/get/char/2.cc
! 4b7123251969c5301cc0931ce1f21c66  libstdc++-v3/testsuite/22_locale/time_get/get/char/88681.cc
! fc82b67ddb3b03610cbf50ced427a0f2  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/1.cc
! 9b5f79cdd6eac3756c50798043447fc9  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/2.cc
! 9e0421aef4f801ae97ba68f97c3ee272  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/88681.cc
! ae83fe47d6120d17fb2dde6dca582f47  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/1.cc
! 1f781e81345d580b921fd631eaa67c1a  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12750.cc
! 3f734c893a3d832581f9756164f6ae52  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12791.cc
! 79a46d22a1883e9fdcc23a5fc191fec8  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc
! e1c0ef5f6e9a66b3025ffaeaa8370e35  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/26701.cc
! 140869ac6bed5c8fa2ce3567b697ba25  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/3.cc
! b76407da166b731ee540cf6a4a8928bc  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/5.cc
! 519af95ebfe0880934c929a335a4a05b  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_env.cc
! ca16e881cc35f9af7eda032a0fe0c722  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc
! a4a9590bedec349491d410bcff046774  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/1.cc
! 1b388745f66ee3bd24ab6ff917229386  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12750.cc
! 0cdd4adac071458deca4204a3fd2c3c2  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12791.cc
! 3d02f0c66375c42f14d5ffcbee0b3524  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/2.cc
! 14aaa074e4e35ca914412316ac001c2f  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/26701.cc
! cdbae8d344ea8e535b27027a6030522e  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/3.cc
! b23c49ca3632c8a377a6d5fd6cfc4b52  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc
! 8ec34f50bee08a87cba30f0993f9d984  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/5.cc
! 519af95ebfe0880934c929a335a4a05b  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_env.cc
! ca16e881cc35f9af7eda032a0fe0c722  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc
! d85f79f7c7e7583cd0866a0853e87483  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/1.cc
! 74517903ba66c89fca12d18f44ed34d0  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc
! cdcdee303e5453224ee894c6910cdbc1  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/3.cc
! dfd341fe60dfda2f14cf454a4a38a12d  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/4.cc
! 6cb7c8271f4849fc90708dca003af0b0  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/5.cc
! a5d0f9d61ed2a2e75408ffd08e018393  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/6.cc
! 519af95ebfe0880934c929a335a4a05b  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_env.cc
! ca16e881cc35f9af7eda032a0fe0c722  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc
! a75dc675eaf93027a4a054eb14bddc57  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/1.cc
! dfe0c39f9f3341cdd9f2e2106ea6489a  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/2.cc
! 8c40ae289013fa08755686ea28ce78f1  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/3.cc
! daedca901d0dc44f96de732b23b2b668  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/4.cc
! 1337ce4c2c41a06d24b2bdec6a0f4d87  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/5.cc
! 0f1552a0edb1387e325264a77f3149cc  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/6.cc
! 519af95ebfe0880934c929a335a4a05b  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_env.cc
! ca16e881cc35f9af7eda032a0fe0c722  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc
! a270312ab763e17cc74bddb16fd36bb9  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc
! 16a9b77f2171ec2a9cc14e0f99679859  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc
! e5c3e33a30cd72ba238eceb134c49342  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/3.cc
! 493121c99af57e0f7b382f2b9b68cd5c  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/4.cc
! 3e24d0c01d991a761199b3c865cb506b  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/5.cc
! 328f4b2b48da6351440e02693c0cee15  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/6.cc
! 519af95ebfe0880934c929a335a4a05b  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_env.cc
! ca16e881cc35f9af7eda032a0fe0c722  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc
! a9931fb070f1e328d3c01e1bde578043  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/1.cc
! bbce66b067ec528824125cadfe2610d4  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc
! 5907302d10a0482195612f691a4c0db0  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/3.cc
! f1f8436a4b534144b5526e8f027e254f  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/4.cc
! 783bf7c1b0aa18bab5d8427201a1f7d6  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/5.cc
! ff2b7dbebbee2dd2ef3d75513eac39d7  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/6.cc
! 519af95ebfe0880934c929a335a4a05b  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_env.cc
! ca16e881cc35f9af7eda032a0fe0c722  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc
! 8caa6832c070c973eb92c44f2ed28de0  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/1.cc
! 4500069c605880c703136875d16b5af2  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc
! 8d61b9a0420b8f988be5b3de0500b56c  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/3.cc
! 721bf3457b36fa5266b0ddb3ef5b7558  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-1.cc
! 18c62a0adb9e6dfb074173143d8f91bc  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-2.cc
! 5a90befdee434930db080e5e07cd0781  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/5.cc
! 02b4450499e6028c7b19663588c6110e  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/6.cc
! 519af95ebfe0880934c929a335a4a05b  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_env.cc
! ca16e881cc35f9af7eda032a0fe0c722  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc
! c64c292a7ac216f1496704d884145858  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/1.cc
! 09e2b343f74665c8905dbe1bf404754b  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/2.cc
! 2aff3eeae5a47632b65ea9c1bc73c16c  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/3.cc
! 18e3b28ead43d4c1dc1a03f8f69de280  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/5.cc
! 0d42016e273479aaf3e43beafe141f63  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/6.cc
! 9734298790fead68872db238660c04bc  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_env.cc
! 59c3bbe5ce6078c89d6904fc66a172bb  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc
! 46277cc152da45f4f96a8504279a33ad  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc
! 1af9e72d08ed4e19393b171fc735bd71  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/3.cc
! f98cb4ef1072f402700f5b1bfd6d909f  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/5.cc
! f703ece912fa429fbfaff3007b421b0a  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_env.cc
! 339893f8998536912273ef852ecb2dbd  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_locale.cc
! 0ff05f3fa0b40911382af8af29450ad0  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/1.cc
! cfce609044f005a6c8cc2823f29e0f0c  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/3.cc
! 7dda697c6926aaf5294044f2eb218a8c  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/5.cc
! f703ece912fa429fbfaff3007b421b0a  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_env.cc
! 339893f8998536912273ef852ecb2dbd  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_locale.cc
! c1e4e4bf86341f8e65ac7d6402a91664  libstdc++-v3/testsuite/22_locale/time_get/requirements/base_classes.cc
! d7625fafa001a353ea615a422f772d8d  libstdc++-v3/testsuite/22_locale/time_get/requirements/explicit_instantiation.cc
! 550e09a11db9b332a5333c3a81d155c4  libstdc++-v3/testsuite/22_locale/time_get/requirements/typedefs.cc
! 2a7e837dd6d988404ee4a4ac107849a7  libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc
! ceeb8ae62391089abd7040a44a8b2966  libstdc++-v3/testsuite/22_locale/time_put/put/char/10.cc
! f522a2b46d5508b7d172321c92afa582  libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc
! f3a62f014c29301e477dadcff118e51f  libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc
! 85fc8989b3daf0ca4fcabd5e5182215c  libstdc++-v3/testsuite/22_locale/time_put/put/char/17038.cc
! ad915a9960835d0f87f081fcc67459bb  libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc
! 0fe84037874d4ce6a870d670b77a2b6a  libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc
! 900b2b9fbe4f2fc1ace65b17f12a25d1  libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc
! 7f4df248f721ec2887bbc9aadb51f449  libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc
! 0043ea8119568381f11823f686eb3a7c  libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc
! 88d2710cacffffbb291d328ab5b86af1  libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc
! f86b2d002409a2a0aad901a9bb20ee3b  libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc
! 1a9c624372fc141eb6636bb3f46556a9  libstdc++-v3/testsuite/22_locale/time_put/put/char/9.cc
! df2a97a9ecca075bb7bf1a39bbc63b52  libstdc++-v3/testsuite/22_locale/time_put/put/char/9780-1.cc
! 137f52498dabd361b3c33019d2625f26  libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_env.cc
! 3433f33fc892eea36a73501003a719e0  libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc
! 8a62dc202f56c2d1a9dd5306e5fa6384  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/1.cc
! 107dbafcbe21974dac5445d184bf24f2  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/10.cc
! 34995691f27b2b89df5e0d6042a41ee3  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc
! 68d708f44e5f03e587e4ff11bfa48bde  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc
! b1c1e2dbc291c4dd4c863a26296a4bd7  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc
! 0e81c74c51e09d9042816c73d5f6c61b  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/17038.cc
! fcb6867922a3ba3a2f0249dc8c04ab7e  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/2.cc
! 9b8e4715377f00d1e305e67d2bf1a03f  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/3.cc
! 3def19603f56a73099eb5d45858ff657  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/4.cc
! 27d2eaadd797ed16e158a8bf31b292b1  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/5.cc
! 3f4a28195484ccde833ae9d93ef3a3ad  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/6.cc
! f95bd370b486e4b83847ce9742bf7c9a  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/7.cc
! f9d4ffb8603f026411ee14029c26da00  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/8.cc
! 0239d2b78fe2ed0676dc8ef15a9739cf  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/9.cc
! 137f52498dabd361b3c33019d2625f26  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_env.cc
! cb88cc02647f9ea76c8b1330cf3c1bba  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc
! 08874ba5b375c049bb922b8429151730  libstdc++-v3/testsuite/22_locale/time_put/requirements/base_classes.cc
! 20b0ec294554b42f96cfc36c16978d09  libstdc++-v3/testsuite/22_locale/time_put/requirements/explicit_instantiation.cc
! 7b47efb76a95ff45b6ab0b461ea67507  libstdc++-v3/testsuite/22_locale/time_put/requirements/typedefs.cc
! f068b23843318c17da7706f27d2f63df  libstdc++-v3/testsuite/23_containers/array/capacity/constexpr_functions.cc
! 673ffee43222f5e2bd7b96b226d10855  libstdc++-v3/testsuite/23_containers/array/capacity/empty.cc
! 714651530f0066e0f602ac557bc641ee  libstdc++-v3/testsuite/23_containers/array/capacity/max_size.cc
! d012a75ea4409d9eb629980126141ae5  libstdc++-v3/testsuite/23_containers/array/capacity/size.cc
! ee161adf8cac0a62cdaae778d6c5ad7f  libstdc++-v3/testsuite/23_containers/array/comparison_operators/96851.cc
! 4ad855d38b46aa536bab9ed6e559a9be  libstdc++-v3/testsuite/23_containers/array/comparison_operators/constexpr.cc
! 5ca077c8f374db1dafbeb6659dba2818  libstdc++-v3/testsuite/23_containers/array/comparison_operators/equal.cc
! 0a16dc96c15a1bb59efda1b912aa3bc7  libstdc++-v3/testsuite/23_containers/array/comparison_operators/greater.cc
! 93bb5de6ba3c8b80b5defbff3ba58b62  libstdc++-v3/testsuite/23_containers/array/comparison_operators/greater_or_equal.cc
! 3413a0c1cd1ce9083c180915ccf5bfdf  libstdc++-v3/testsuite/23_containers/array/comparison_operators/less.cc
! ae2a6dfbb8f82593be63eb1c17dc4b4e  libstdc++-v3/testsuite/23_containers/array/comparison_operators/less_or_equal.cc
! 06e2ca4d48ff9bf561e5276328558080  libstdc++-v3/testsuite/23_containers/array/comparison_operators/not_equal.cc
! 65dcaca11d5c4a55011720f900e68154  libstdc++-v3/testsuite/23_containers/array/cons/53361.cc
! b3c9e3af0f49a131973d6c4ac03b1a69  libstdc++-v3/testsuite/23_containers/array/cons/aggregate_initialization.cc
! 1b1e181106122b30a450ec8e7f99267d  libstdc++-v3/testsuite/23_containers/array/cons/deduction.cc
! ab27bad72c6bd3cea021b7abe8c50d05  libstdc++-v3/testsuite/23_containers/array/cons/deduction_neg.cc
! d2a212f2b8f6fdc5c0cfbd95e4c8c0d3  libstdc++-v3/testsuite/23_containers/array/creation/1.cc
! d5f4d148e3e8b228594162f3ef05c987  libstdc++-v3/testsuite/23_containers/array/creation/2.cc
! dcfec188e09b247823945c7fcfd7d096  libstdc++-v3/testsuite/23_containers/array/creation/3_neg.cc
! 1a5de8290102971098844454cfa49d9e  libstdc++-v3/testsuite/23_containers/array/debug/back1_neg.cc
! ca8138cfed1017518043355a360ae990  libstdc++-v3/testsuite/23_containers/array/debug/back2_neg.cc
! 449fcc9e36fd1b6635d3d7f0dfba53d2  libstdc++-v3/testsuite/23_containers/array/debug/constexpr_c++11.cc
! 29ab26e6827e0d958b369cc2743dbde2  libstdc++-v3/testsuite/23_containers/array/debug/front1_neg.cc
! b0d2e23aa91cf9d00a03fa12d9708b91  libstdc++-v3/testsuite/23_containers/array/debug/front2_neg.cc
! 6dc61c0b818d42a3ae7b12c0b375d217  libstdc++-v3/testsuite/23_containers/array/debug/square_brackets_operator1_neg.cc
! c389e2d3f01358756ffae3c5efd8b861  libstdc++-v3/testsuite/23_containers/array/debug/square_brackets_operator2_neg.cc
! adb867258c829b6eb6723cbf1ddb05cd  libstdc++-v3/testsuite/23_containers/array/element_access/54388.cc
! 9b5d77c7496c7f544043adbace42f9fa  libstdc++-v3/testsuite/23_containers/array/element_access/60497.cc
! f0ada280ac5c33ed8e4ff8204bca7866  libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc
! 475f361a533db81dcb51f5b5ff4daf17  libstdc++-v3/testsuite/23_containers/array/element_access/at_out_of_range.cc
! ae04f00435944482d8f2762c2dc70265  libstdc++-v3/testsuite/23_containers/array/element_access/back.cc
! c10cae9489f1bcf8ab0457dcb7e4c9b7  libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc
! aef8e21404e9f1d6682fd1b63acc7389  libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_element_access.cc
! 9261ffe7897065d1d176443946c9eea3  libstdc++-v3/testsuite/23_containers/array/element_access/data.cc
! 61fa35060643d4e3f1a5dd6bf4142997  libstdc++-v3/testsuite/23_containers/array/element_access/front.cc
! 1e3823eeb7280969624040c98cbb6cc5  libstdc++-v3/testsuite/23_containers/array/iterators/end_is_one_past.cc
! 3c7c1d167cc78ca91f17cd6b13c8a90e  libstdc++-v3/testsuite/23_containers/array/range_access.cc
! bb9b1ef86ffbe51abdab9960a32ddc76  libstdc++-v3/testsuite/23_containers/array/requirements/citerators.cc
! 5226ea58214e95acbab7115e1d580550  libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_fill.cc
! 27dd7112a8f68c128b315ee4152d8e00  libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc
! 47fc2e9ae1a3190da1f29e187418dcbb  libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_swap.cc
! 4abbf4e5ffce5dfbc38a2f55b8607cd1  libstdc++-v3/testsuite/23_containers/array/requirements/contiguous.cc
! 4f9a6b38b5ccd4db9a5b71a3dde3ad04  libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation/1.cc
! 00600face7e170213d275d8c513fa2b3  libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation/2.cc
! 8819cbeb66ca364b10a8f7f091630c0e  libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation/3.cc
! 81d7f525b528ceb06633d87621ea06f7  libstdc++-v3/testsuite/23_containers/array/requirements/fill.cc
! 6bac407845c5abce3982a78f53593c3d  libstdc++-v3/testsuite/23_containers/array/requirements/member_swap.cc
! ed17a67c69d9b1db665e81a60e39c410  libstdc++-v3/testsuite/23_containers/array/requirements/non_default_constructible.cc
! 07ca0a73dff5d274627af56f53e1ec8e  libstdc++-v3/testsuite/23_containers/array/requirements/typedefs.cc
! eaa50489f9229a225f79c52bcc220381  libstdc++-v3/testsuite/23_containers/array/requirements/zero_sized_arrays.cc
! 1db6cca519147c85ecfaaf8d2197cbda  libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap.cc
! cc21263ee56bcdce2876ce1a6eeab235  libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap_cxx17.cc
! 0046b08ffe5d34662b0ddf7216acf03d  libstdc++-v3/testsuite/23_containers/array/tuple_interface/constexpr_get.cc
! c38b8917a10f8c17c3fda5778917dc28  libstdc++-v3/testsuite/23_containers/array/tuple_interface/get.cc
! ab5174f2feb448c7ce179afe98876e62  libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc
! 2f6abedea25dd7d8ffb64bd4239ba5a1  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
! 4413b984845c5000ef44eaed41902b30  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_cpp14.cc
! 3b4f7bb2281ff6d7c4ebd6a6dce64559  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc
! 1ccc322b1290f4dfeebcf08c029ca447  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_size.cc
! 58044e8262d11211e164e1db321736d4  libstdc++-v3/testsuite/23_containers/bitset/18604.cc
! 312346734568fc408df3de0a14fe5e7e  libstdc++-v3/testsuite/23_containers/bitset/45713.cc
! 2215b8fae5200c1d44ef3ca82f160be7  libstdc++-v3/testsuite/23_containers/bitset/all/1.cc
! c01bf53053a7e46a9b1c0ed6fa967164  libstdc++-v3/testsuite/23_containers/bitset/cons/1.cc
! 5c5ea6cd12d6f7775a94d285b61e3905  libstdc++-v3/testsuite/23_containers/bitset/cons/16020.cc
! fee3cda11d6f96fa0ed14fe5248760e7  libstdc++-v3/testsuite/23_containers/bitset/cons/2.cc
! af737c1c0459553477686413c5f82046  libstdc++-v3/testsuite/23_containers/bitset/cons/3.cc
! c4f60b346ade5396d4451da4b43199f6  libstdc++-v3/testsuite/23_containers/bitset/cons/38244.cc
! 2e78a690dd99541e16ebc8f27f0eba63  libstdc++-v3/testsuite/23_containers/bitset/cons/50268.cc
! eef9ffa61f4cecc83abd1f2fd25533aa  libstdc++-v3/testsuite/23_containers/bitset/cons/6282.cc
! d9050e2a61ddddb57074c52f4c8b8058  libstdc++-v3/testsuite/23_containers/bitset/cons/constexpr.cc
! 371ae2ca407cae74eaced6efff100e10  libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-1.cc
! 9b80ccfae6feaaf23caf769e4ee79321  libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-2.cc
! 7138542dd2fb08309a45fa0198c153c1  libstdc++-v3/testsuite/23_containers/bitset/cons/dr396.cc
! 4afd2b2fca557b719a59f3a456b627b2  libstdc++-v3/testsuite/23_containers/bitset/count/6124.cc
! e9ac78dad69d31c9008e31d7aeed17f6  libstdc++-v3/testsuite/23_containers/bitset/debug/invalidation/1.cc
! a003cdbb5ddc13d3de02b41665b912e4  libstdc++-v3/testsuite/23_containers/bitset/ext/15361.cc
! c46f5bb8c90c0886547268016242f380  libstdc++-v3/testsuite/23_containers/bitset/hash/1.cc
! 71307eb055626576facb5e06fbdf4cca  libstdc++-v3/testsuite/23_containers/bitset/input/1.cc
! acc42a5d65041dcdc29d674fab9eb223  libstdc++-v3/testsuite/23_containers/bitset/operations/1.cc
! aabf8bf0c7f6da86839ce5fd9f6f55a5  libstdc++-v3/testsuite/23_containers/bitset/operations/13838.cc
! cf7bf33f3067784569c29224f16e932a  libstdc++-v3/testsuite/23_containers/bitset/operations/2.cc
! 0b3bbc46ddcc27706816abaf7e639725  libstdc++-v3/testsuite/23_containers/bitset/operations/96303.cc
! 55445760f613c7bffb9e165241977fbe  libstdc++-v3/testsuite/23_containers/bitset/operations/constexpr-2.cc
! 9e344633bfa39c0f453f3335ba58b83b  libstdc++-v3/testsuite/23_containers/bitset/operations/constexpr.cc
! ddc5647043bc48464b6c67a663e4e549  libstdc++-v3/testsuite/23_containers/bitset/requirements/constexpr_functions.cc
! 0661a15d62f061519df2710ed817cfb7  libstdc++-v3/testsuite/23_containers/bitset/requirements/explicit_instantiation/1.cc
! 9a409a91ab7177372ad2dcd990804cf4  libstdc++-v3/testsuite/23_containers/bitset/requirements/explicit_instantiation/1_c++0x.cc
! edaa004bb9eae943f183fcdc0f269808  libstdc++-v3/testsuite/23_containers/bitset/test/1.cc
! 5cdeb81ed8045b8b041a1506ee6c4c9f  libstdc++-v3/testsuite/23_containers/bitset/to_string/1.cc
! de56de001d169a4b8a691a41327fee47  libstdc++-v3/testsuite/23_containers/bitset/to_string/dr396.cc
! f57a4db11fe719ce3262a1977035e5cc  libstdc++-v3/testsuite/23_containers/bitset/to_ullong/1.cc
! 776ef9d76323c363dc5a78d1e9169e19  libstdc++-v3/testsuite/23_containers/bitset/to_ulong/1.cc
  ddf767067d4b89b063a9cdaf9a38233c  libstdc++-v3/testsuite/23_containers/deque/100516.cc
! b61080bacaa1f97ee4ffe96d40c8929c  libstdc++-v3/testsuite/23_containers/deque/14340.cc
! 19c3dab506c20712027bb8729ef87b57  libstdc++-v3/testsuite/23_containers/deque/18604.cc
! 193e02a35660ce434ac8d69fceaa8efa  libstdc++-v3/testsuite/23_containers/deque/48101-2_neg.cc
! f3ce531e896937b8009a2dd9dcec2da8  libstdc++-v3/testsuite/23_containers/deque/48101-3_neg.cc
! a571f454d0034057da52010e07b1058c  libstdc++-v3/testsuite/23_containers/deque/48101_neg.cc
! 1bfd7aaebd5dc094538cbc56c54bb430  libstdc++-v3/testsuite/23_containers/deque/58764.cc
! 5c0fa9880d0f0d1d1915bc00e58ffa21  libstdc++-v3/testsuite/23_containers/deque/70303.cc
! 846ecf14541802b66b4e773f971dace7  libstdc++-v3/testsuite/23_containers/deque/92124.cc
! ee2a48c4f0a92fcb3c174ab6d3b4893e  libstdc++-v3/testsuite/23_containers/deque/allocator/copy.cc
! b1323ee2dac97f66637e5a1606afb100  libstdc++-v3/testsuite/23_containers/deque/allocator/copy_assign.cc
! 0b056a7cfb10e89882c7f9725d54c131  libstdc++-v3/testsuite/23_containers/deque/allocator/default_init.cc
! b073ceeebf610bf180df7457fc1cc131  libstdc++-v3/testsuite/23_containers/deque/allocator/ext_ptr.cc
! 7a5f99c4228a188c47a84ae2acf7ec9a  libstdc++-v3/testsuite/23_containers/deque/allocator/minimal.cc
! caa6b562b5ea9fa9360b9e3eebf390e2  libstdc++-v3/testsuite/23_containers/deque/allocator/move-2.cc
! 7b7194515b015935812abfd00b4ab6b6  libstdc++-v3/testsuite/23_containers/deque/allocator/move.cc
! c7ffee6064a27839f78a8b49801088d3  libstdc++-v3/testsuite/23_containers/deque/allocator/move_assign-2.cc
! 3c779a710b94bb756c3a49600e50976a  libstdc++-v3/testsuite/23_containers/deque/allocator/move_assign.cc
! 2c4765c33d5d4c6cea2aa4138d956c99  libstdc++-v3/testsuite/23_containers/deque/allocator/noexcept.cc
! c035d485925673075108c416a4afe6fa  libstdc++-v3/testsuite/23_containers/deque/allocator/swap.cc
! f7af1096e81624465f69a9499f677ec1  libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc
! a4aafc1684ec9e9d925c0c105255e3ff  libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc
! 1a4beccb6926d317825c272acf5c941f  libstdc++-v3/testsuite/23_containers/deque/capacity/max_size.cc
! baccc794b8546722037101e5b07bd6c1  libstdc++-v3/testsuite/23_containers/deque/capacity/moveable.cc
! 1aa1d84d2c00f2e93b9e8d60def463ce  libstdc++-v3/testsuite/23_containers/deque/capacity/resize_size.cc
! f4d2d4f500709cd6bad16e7e8524bb18  libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc
! ee31417251056080fe0d1b45f9491430  libstdc++-v3/testsuite/23_containers/deque/check_construct_destroy.cc
! 55114d9071be2fe4efce536fba12334b  libstdc++-v3/testsuite/23_containers/deque/cons/1.cc
! 303e16ab156854fee80a8e02c051ea52  libstdc++-v3/testsuite/23_containers/deque/cons/2.cc
! e64522973a13bef3a3ab72ac5f1a3d3d  libstdc++-v3/testsuite/23_containers/deque/cons/55977.cc
! ef3dbe4ffca80ece40b19c57ae5a6aa4  libstdc++-v3/testsuite/23_containers/deque/cons/assign/1.cc
! 0a894c53d861bb7aa954f4f466ada93f  libstdc++-v3/testsuite/23_containers/deque/cons/clear_allocator.cc
! ef0e7856f98cb8873e435b8fe04d9cd3  libstdc++-v3/testsuite/23_containers/deque/cons/cons_size.cc
! 4adabac077615cb08f8994467b5caec1  libstdc++-v3/testsuite/23_containers/deque/cons/deduction.cc
! 9685f94855fd7399b464be8f52dbcf0f  libstdc++-v3/testsuite/23_containers/deque/cons/moveable.cc
! 571fd29645d669b02f18c779671abbc2  libstdc++-v3/testsuite/23_containers/deque/cons/moveable2.cc
! a1112a96cbac7144c3d11546501ccf93  libstdc++-v3/testsuite/23_containers/deque/cons/self_move.cc
! d6e37df153767c6ebc31de139d8701c9  libstdc++-v3/testsuite/23_containers/deque/debug/90102.cc
! 3caf04236f57a1ee301d7091396eb2d0  libstdc++-v3/testsuite/23_containers/deque/debug/98466.cc
! 65527d81972eb5888673636548527398  libstdc++-v3/testsuite/23_containers/deque/debug/assign1_neg.cc
! 2922121efcff92eb6e2307b05840cc0e  libstdc++-v3/testsuite/23_containers/deque/debug/assign2_neg.cc
! c46d2d6d6dc14fbbe30984d5784953e4  libstdc++-v3/testsuite/23_containers/deque/debug/assign3_neg.cc
! c351cbd2ddaef825a60635793de739d8  libstdc++-v3/testsuite/23_containers/deque/debug/assign4_neg.cc
! 9c5bd9a0406e2e46bda987a259140c1c  libstdc++-v3/testsuite/23_containers/deque/debug/construct1_neg.cc
! 80b7ed9cdd99a95f18938f554e2cb8e0  libstdc++-v3/testsuite/23_containers/deque/debug/construct2_neg.cc
! 2908ede2e2c736d30c66ea5fde1a234c  libstdc++-v3/testsuite/23_containers/deque/debug/construct3_neg.cc
! c8967f1a4b52f58c9cd9cec0f8d54d9c  libstdc++-v3/testsuite/23_containers/deque/debug/construct4_neg.cc
! 227f1cce69cf48f6bdde0942a2971564  libstdc++-v3/testsuite/23_containers/deque/debug/insert1_neg.cc
! 3b2e3db41a759bbc1d0aeaa0f34e93a2  libstdc++-v3/testsuite/23_containers/deque/debug/insert2_neg.cc
! 5ca330e27e6e1a667881ac9483405506  libstdc++-v3/testsuite/23_containers/deque/debug/insert3_neg.cc
! c6ec81f174919e2bf2676a08a595e675  libstdc++-v3/testsuite/23_containers/deque/debug/insert4_neg.cc
! b959a439f55e1def1b4989a983175876  libstdc++-v3/testsuite/23_containers/deque/debug/insert5_neg.cc
! 9b96ccac8331fe36b7cfccbdaefb1c88  libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/1.cc
! b1252f9ada735cc967091d234e0678b5  libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/2.cc
! 1e474cf499e356fe6c945a12bfa8190f  libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/3.cc
! 379606df033fd2d9f34abea0682075d9  libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/4.cc
! 784e358249d51931989789c4489e95e9  libstdc++-v3/testsuite/23_containers/deque/debug/shrink_to_fit.cc
! b77d33c27170bd5d12aadb975ae8eb67  libstdc++-v3/testsuite/23_containers/deque/erasure.cc
! a6e3a3e7f564bdea08d019eafab21650  libstdc++-v3/testsuite/23_containers/deque/init-list.cc
! fd3ff9a093fd2a40cb85db58fb0104b0  libstdc++-v3/testsuite/23_containers/deque/modifiers/assign/1.cc
! 72863504895f9aba7a5e4b83e0e368f7  libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/52799.cc
! 3ada7303d4561d2a469a666f8eab7962  libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/92878_92947.cc
! 362cf63a791fe50dcbb6d72d2bb94cb6  libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/const_iterator.cc
! 4b6eedf2b344bd5564c41e579c90389f  libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc
! a6b647a927e4f0d2037a29da43a72ee4  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/1.cc
! 02f849d36977140b5e69f2aed6d87c5d  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/2.cc
! dccdd5211a86a555c43ef3fa06ebff56  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/3.cc
! 481ad18ca44e70811e061e00be1a80c8  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/50529.cc
! 6fd99314ee258ec9d66dc0f73b078a0d  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/54577.cc
! e8e3cbda843a0962aa5a98ea7adef421  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/moveable.cc
! 94c1b3cb6651852c7a6414709b6ccf1c  libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/const_iterator.cc
! 945f23303929f36fe3c59e19f7ce6e00  libstdc++-v3/testsuite/23_containers/deque/modifiers/moveable.cc
! 38f92fcc31e50c0311e08cb8eefbb4a2  libstdc++-v3/testsuite/23_containers/deque/modifiers/push_back/49836.cc
! 138937a7c4140b0978edff69139702c1  libstdc++-v3/testsuite/23_containers/deque/modifiers/push_front/49836.cc
! 3a868a60305a426508c011383a6ee030  libstdc++-v3/testsuite/23_containers/deque/modifiers/swap/1.cc
! 58c35839fd3f87a4329b5e8429cc77f9  libstdc++-v3/testsuite/23_containers/deque/modifiers/swap/2.cc
! 4aeb4100a90ee997352d0e224b9ffa14  libstdc++-v3/testsuite/23_containers/deque/modifiers/swap/3.cc
! 08ee18c78bd1af9c4563e4e0555f2d21  libstdc++-v3/testsuite/23_containers/deque/operators/1.cc
! 4fd8841c69220e402587f33c58b82a61  libstdc++-v3/testsuite/23_containers/deque/operators/2.cc
! 9261cb95473bfd069461d96924a07534  libstdc++-v3/testsuite/23_containers/deque/operators/cmp_c++20.cc
! aa88cea08e5471e19eb1f93cad9f3a78  libstdc++-v3/testsuite/23_containers/deque/range_access.cc
! bf65d709970b858c543ec7e8d5398300  libstdc++-v3/testsuite/23_containers/deque/requirements/citerators.cc
! e1680199ceb80bccc838c9b33a5f9f46  libstdc++-v3/testsuite/23_containers/deque/requirements/do_the_right_thing.cc
! d8978fa80b6170b60061fd35df68f2c2  libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
! 692f3a3689f2c77334eddc9c72e0befb  libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor.cc
! 534d7fa9110e9b9c0fbae1f06cfab2b9  libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
! 4349a16229d414b2440e8d2cee53670f  libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
! e156a3bf461909084bd58a0a6d58724a  libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
! 13fa219a7615f3901912ec0f6f99621f  libstdc++-v3/testsuite/23_containers/deque/requirements/exception/basic.cc
! b2a96a60987990d64e2a950b86fe0264  libstdc++-v3/testsuite/23_containers/deque/requirements/exception/generation_prohibited.cc
! 098783ba91841d01609406c632f6a7f3  libstdc++-v3/testsuite/23_containers/deque/requirements/exception/propagation_consistent.cc
! b40ff7074efa24f9862e85e58e28bfc0  libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/1.cc
! 962ab29257d99c84e6eeb3128175fc73  libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/2.cc
! 5ddd510163fd99918ba2e3f19d045f41  libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/3.cc
! 00ff0ec7e1f8ad8edd6d6599621c68d8  libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/4.cc
! 7307f1b1bde0a9643f64b453944221ac  libstdc++-v3/testsuite/23_containers/deque/requirements/partial_specialization/1.cc
! c737595b0096bc543cda88b64f390a14  libstdc++-v3/testsuite/23_containers/deque/requirements/typedefs.cc
! e8f7b616dcd3af1aab6c53ccf4b4ae9d  libstdc++-v3/testsuite/23_containers/deque/types/1.cc
! 5386341b50f4baa27972d3e9b6f14e1b  libstdc++-v3/testsuite/23_containers/deque/types/92267.cc
! b04aeca325452c3a42f70675bc1c7f26  libstdc++-v3/testsuite/23_containers/deque/types/pmr_typedefs.cc
! 2c454ec8f7605a99c9897827fe45d015  libstdc++-v3/testsuite/23_containers/deque/types/pmr_typedefs_debug.cc
! 9e5e7bcc4c7ceb6d5c149927aea9a913  libstdc++-v3/testsuite/23_containers/forward_list/48101-2_neg.cc
! e14b7653f40437ebc3d3c33d10e1b021  libstdc++-v3/testsuite/23_containers/forward_list/48101-3_neg.cc
! 5aac40e4edc6404002166049ec53abb1  libstdc++-v3/testsuite/23_containers/forward_list/48101_neg.cc
! 4b7e56c38c70b549dcb4d1abd552be2f  libstdc++-v3/testsuite/23_containers/forward_list/92124.cc
! 1adef73aa977701765bdcd008a45551a  libstdc++-v3/testsuite/23_containers/forward_list/allocator/copy.cc
! fe1f11dd3fc5221ef07621fb36e42fff  libstdc++-v3/testsuite/23_containers/forward_list/allocator/copy_assign.cc
! 1891c529d36bd22b691b53caf3aec4e5  libstdc++-v3/testsuite/23_containers/forward_list/allocator/default_init.cc
! bfb5e300b139601f2207fc6fdb579133  libstdc++-v3/testsuite/23_containers/forward_list/allocator/ext_ptr.cc
! 9a69cd502231363bc87b9a303e2a0ea6  libstdc++-v3/testsuite/23_containers/forward_list/allocator/minimal.cc
! 46fc8d23448b7226e2e28bb0c17cce73  libstdc++-v3/testsuite/23_containers/forward_list/allocator/move.cc
! dcee5e3dd7ae41d09b4c790140aa069e  libstdc++-v3/testsuite/23_containers/forward_list/allocator/move_assign.cc
! 718cf0258538162fbfe4dba26821b880  libstdc++-v3/testsuite/23_containers/forward_list/allocator/noexcept.cc
! 4a77559b88bd7d2011486ba18f22b5f8  libstdc++-v3/testsuite/23_containers/forward_list/allocator/swap.cc
! 747a6f4c87e19c03af1b9a84769e0282  libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc
! 86f03db00edc2f97b3306d30b99eb328  libstdc++-v3/testsuite/23_containers/forward_list/capacity/resize_size.cc
! f2a4aec6fdbc3e2c0a10822d844fecda  libstdc++-v3/testsuite/23_containers/forward_list/cmp_c++20.cc
! 25e31bb20c3597b57a5b9792a87ef418  libstdc++-v3/testsuite/23_containers/forward_list/comparable.cc
! 4db2a77852701870abc90718e478da2e  libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc
! 581b5e48dd59d1507394c20bf0e9d972  libstdc++-v3/testsuite/23_containers/forward_list/cons/10.cc
! ea0efc71bcd91ec0094c94db3b63724d  libstdc++-v3/testsuite/23_containers/forward_list/cons/11.cc
! 2e4adfe606f877f827c0f920901b3cb7  libstdc++-v3/testsuite/23_containers/forward_list/cons/12.cc
! a50ba0459904028620065119ac4c5962  libstdc++-v3/testsuite/23_containers/forward_list/cons/13.cc
! 07036af6e50332204d30f8d16b72603c  libstdc++-v3/testsuite/23_containers/forward_list/cons/14.cc
! 16481a83449f576f7749192f36f84164  libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc
! be281bc97b6138a2262bcdac602a4eb1  libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc
! a286a0473ab733554ddd6a95de858a61  libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc
! 2c4806aff2cb91e6182da9b3b2c13608  libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc
! 8354804f937be2829045cfc1bf5548d6  libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc
! 8dbd0fc49f6bc66aff2492578ec76dd0  libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc
! 08d079258055ee6eadb97f356f04604f  libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc
! 9b57aba6f754f47803b254192a5fab2f  libstdc++-v3/testsuite/23_containers/forward_list/cons/87809.cc
! 0f7675761955eab72ffda0d252cd25fc  libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc
! 272e88d15b5c9642e9a664f249407064  libstdc++-v3/testsuite/23_containers/forward_list/cons/cons_size.cc
! c97dce5e2b792585eb3d19f5d9c7d14a  libstdc++-v3/testsuite/23_containers/forward_list/cons/deduction.cc
! 926f23ac144367b77b601454f9010ffd  libstdc++-v3/testsuite/23_containers/forward_list/cons/moveable.cc
! 99cb5ddd45e96bb7ebc62a4923c4ad4f  libstdc++-v3/testsuite/23_containers/forward_list/cons/noexcept_move_construct.cc
! c77871dd15acb504cef6c33836e471ae  libstdc++-v3/testsuite/23_containers/forward_list/cons/self_move.cc
! cf6cedae5c4b12dfada0354f8e86c35c  libstdc++-v3/testsuite/23_containers/forward_list/debug/60499.cc
! 30425d3b7ccd2a227468529cf86bf888  libstdc++-v3/testsuite/23_containers/forward_list/debug/90102.cc
! 13542a635adc3aa5f52dcbcd416d5160  libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc
! d7275a2851690c7430f7f6127f59d88c  libstdc++-v3/testsuite/23_containers/forward_list/debug/construct1_neg.cc
! 466c6c7e0cd03816e85c56a7fb471e9e  libstdc++-v3/testsuite/23_containers/forward_list/debug/construct2_neg.cc
! 41f03c4f307b5955961192ac7c13eb70  libstdc++-v3/testsuite/23_containers/forward_list/debug/construct3_neg.cc
! b3dca3a2dac1896e1aa2d9f72392bb8f  libstdc++-v3/testsuite/23_containers/forward_list/debug/construct4_neg.cc
! bdb29a71676a7895cd820014b6995427  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc
! 1db860c75f268ce28b30870bb6745a75  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc
! 8030d56bdce608b86fbfbd91982d93a7  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc
! 078a1eabb652126a5d728793fd3e28ef  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc
! 8c077c6096cbcdcef48b0ae6a49b8621  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc
! 4aa0bdb7c67a445013916dafa31a1beb  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc
! 1bf8c7fccc806cd4fd65394142a4b56d  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc
! ad9109c024f0266710651d12dad7f35b  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc
! d790504309b2890f142a83591c7a6723  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc
! d4819f6669c19632c555eab1ca85c8d5  libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc
! a816feeb6cfbcc859d14c9fa13026873  libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc
! 8226f87750c417f9582767fc07010589  libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc
! 64ac0145a3f5a4bbf041edce87c3eff4  libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after4_neg.cc
! ad1bccee687ffa4368decdbc1f0a34e4  libstdc++-v3/testsuite/23_containers/forward_list/debug/move_assign_neg.cc
! a92b559c08ab8bfc8f55f7287f54647d  libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc
! eac18a3bc627cdda2b645518997db9f8  libstdc++-v3/testsuite/23_containers/forward_list/debug/move_neg.cc
! dd228c7148b3d1b8eb38871692dbba8a  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc
! 060501058fa375fade8985b13417559b  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc
! 51893b0ea32b0cb1f42626880b0dcfc6  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc
! 5d80b2b1bc4bcf3b1dffee8209a2efbb  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc
! 1ed9874fd1acc174866ee48d792bc588  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc
! 1df3954449a0f40d52af876659253305  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after5_neg.cc
! a84273593d603daa464a8cebd69797e7  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after6_neg.cc
! e188e3e136da6b1b76fd5b9941afd63b  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after7_neg.cc
! da864c29eb5161d50dad3dd69b7136fa  libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc
! c29d55ded9ee57cf71999cbd35085a0f  libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc
! 6c748dc21648ad0525cff8007fa19d4d  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc
! c43703a47497de527ad141691ad45047  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc
! e4e0b18ebc47b0ca1198555f3cfebbb2  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc
! 03179eb6a900eee9738c78620738f52d  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc
! ee0ef131b9b98516f397a3bfd954abfc  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc
! 1649046ce335ff0fa97d1ab3200296ac  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc
! a3b6286b3b05a4ebb8e5e463411037e4  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/92878_92947.cc
! 7ddd892d2604eb9789d35adfa0452336  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/addressof.cc
! d971ca8b15c24129f9c1fbd3af9288a9  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/emplace_cxx17_return.cc
! e932d132a312eca22cfc0b32ed0fd67b  libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc
! 26b72626c5fbf82fab638353c35667de  libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc
! ea035fd1703043173c556b707d860944  libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc
! 3b3777771a8b4b7be9c037c058032a78  libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc
! 9eb8af5ee98d938db7ff497882ee01d1  libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc
! 29bb6fda74b943b2a3ccb12f6f5ce174  libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc
! 4a1d935a5b4ed56e471a36148934047a  libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc
! c64716f53aebf514c78d3418ea4238f0  libstdc++-v3/testsuite/23_containers/forward_list/operations/90105.cc
! 3e38365bc364038126ca0bf9ba41e0a9  libstdc++-v3/testsuite/23_containers/forward_list/operations/91620.cc
! ed1c990c0651d29ea22162cfd4492705  libstdc++-v3/testsuite/23_containers/forward_list/operations/remove_cxx20_return.cc
! 82dae48024b8b4efba3e01ab0e22b17d  libstdc++-v3/testsuite/23_containers/forward_list/operations/remove_freed.cc
! 34cd2f1d3b48d7452c36ff47bc070ca8  libstdc++-v3/testsuite/23_containers/forward_list/operations/unique_cxx20_return.cc
! 207f3ff4784b10de44612122b173bff4  libstdc++-v3/testsuite/23_containers/forward_list/pmr_typedefs.cc
! 9d055a76711f6929f061b27a6c0384b2  libstdc++-v3/testsuite/23_containers/forward_list/pmr_typedefs_debug.cc
! 58886117518898dfe7424e83c80225f2  libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc
! 50260bb1948e53ea37191a47b446b405  libstdc++-v3/testsuite/23_containers/forward_list/requirements/citerators.cc
! 64547249778c267abc8dabc03520f462  libstdc++-v3/testsuite/23_containers/forward_list/requirements/do_the_right_thing.cc
! 2ed4b1316ec11898d95adc2b883be0c8  libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc
! 6834fbfff7238877435dca85241e982e  libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor.cc
! 68a532ccc6a84043c75cea42432ff280  libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc
! 84b1b7468bb5085367859c1b361c2066  libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc
! 75973f6e1c51a1b7c0a9be805b7c01a8  libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc
! 521927f1840357d8dbd3929823952555  libstdc++-v3/testsuite/23_containers/forward_list/requirements/exception/basic.cc
! 678734cd499f712c65cdc6cbe8bf0c49  libstdc++-v3/testsuite/23_containers/forward_list/requirements/exception/generation_prohibited.cc
! 2c60d62ff8ec381fa7a4ec616ed5e352  libstdc++-v3/testsuite/23_containers/forward_list/requirements/exception/propagation_consistent.cc
! 7737d76ac742a639d6278684e7d21420  libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/1.cc
! 1569459c2c2a598fb37d94f0355c0415  libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/3.cc
! a65a3939e9446d8db0a461b0601c24da  libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/4.cc
! 4baf7e598a6b7ddd322e14070513b9cb  libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/5.cc
! fb4bf9a8d0c4967f1d2eaf12dd2554fd  libstdc++-v3/testsuite/23_containers/forward_list/requirements/typedefs.cc
! 1996b67e5722c1740d9eec227f48a31a  libstdc++-v3/testsuite/23_containers/forward_list/types/1.cc
! 65ef5d45e0666a688af890c11eca5fbe  libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc
! e6e3363f0e3a78768c6013e4882a3d40  libstdc++-v3/testsuite/23_containers/headers/bitset/synopsis.cc
! fa6d63f1d2222e0839870eb310d1e951  libstdc++-v3/testsuite/23_containers/headers/deque/synopsis.cc
! 94711f4197c65da59783842f40a29013  libstdc++-v3/testsuite/23_containers/headers/forward_list/synopsis.cc
! 5b77d2ca53398076973eb00efdec8fd7  libstdc++-v3/testsuite/23_containers/headers/list/synopsis.cc
! df9fce838f1adc185b0b49f7f68e572c  libstdc++-v3/testsuite/23_containers/headers/map/synopsis.cc
! 63c366011a21756af92f48464c38f7b3  libstdc++-v3/testsuite/23_containers/headers/queue/synopsis.cc
! 5f2cc2bbc79d7055ca6d3d2f31efcab7  libstdc++-v3/testsuite/23_containers/headers/set/synopsis.cc
! b14916aa0f07371033d85cd93ca20d84  libstdc++-v3/testsuite/23_containers/headers/stack/synopsis.cc
! cdd9d9e20ff558989422d32f9b4cc31c  libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc
! 10611e970e424cbf6b558c8470eca2c0  libstdc++-v3/testsuite/23_containers/headers/tuple/types_std_c++0x.cc
! 44fc48ca720fed03c9d07c44aeff548b  libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
! b86ba236be01f0387b4b239153a32ab2  libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
! 39240a2b706c12bdb54d58bdace339e6  libstdc++-v3/testsuite/23_containers/headers/vector/synopsis.cc
! 43f4f698f31e0a4a95e2cc95e8881f10  libstdc++-v3/testsuite/23_containers/list/14340.cc
! 9a2d2ebbadcb27112ea2d5e6d90b0df4  libstdc++-v3/testsuite/23_containers/list/18604.cc
! a2481c606e73ca95cecd64ef1274f784  libstdc++-v3/testsuite/23_containers/list/23781_neg.cc
! d3a926cb0d210427978dc7c0b804ffc5  libstdc++-v3/testsuite/23_containers/list/48101-2_neg.cc
! 2bf54e112397c8e897622beea4ca3557  libstdc++-v3/testsuite/23_containers/list/48101-3_neg.cc
! e2b496aa89288d633de62f88732489fa  libstdc++-v3/testsuite/23_containers/list/48101_neg.cc
! f5ec0a0da378e7f6663cedcceda9cf4b  libstdc++-v3/testsuite/23_containers/list/58764.cc
! f9d10ccf94e3c597c9b2542c258fe35c  libstdc++-v3/testsuite/23_containers/list/61347.cc
! fb3268278375d30190ac8078a8156384  libstdc++-v3/testsuite/23_containers/list/68222_neg.cc
! ace73e9f1431e80ae7b1dd906ad6a9f6  libstdc++-v3/testsuite/23_containers/list/92124.cc
! 5bfd2a976a20d1953113a9bf2a220a60  libstdc++-v3/testsuite/23_containers/list/allocator/copy.cc
! 707a4640467890e76359e3b74f44e34e  libstdc++-v3/testsuite/23_containers/list/allocator/copy_assign.cc
! c5c2633c7e4d240dc80f492d93886d11  libstdc++-v3/testsuite/23_containers/list/allocator/default_init.cc
! 4bc8a4ffe621fcfeeb01f726a978dfc0  libstdc++-v3/testsuite/23_containers/list/allocator/minimal.cc
! 73eba2fbbad8596548442a49ddeb9065  libstdc++-v3/testsuite/23_containers/list/allocator/move.cc
! ca59dabdbf7ccb6370fbceed7659fbf5  libstdc++-v3/testsuite/23_containers/list/allocator/move_assign.cc
! 41020714a8941f7e3c5a057d39858929  libstdc++-v3/testsuite/23_containers/list/allocator/noexcept.cc
! 4757bd50a586733b24a259bea0ae9148  libstdc++-v3/testsuite/23_containers/list/allocator/swap.cc
! 8f146a56e28816a2b69509020eea7675  libstdc++-v3/testsuite/23_containers/list/capacity/1.cc
! 124b11eef2c6d64631dfacaa2bf92ed9  libstdc++-v3/testsuite/23_containers/list/capacity/1.h
! f39983d5ac8f71725656b8814af00bbc  libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc
! a3069d2a2b9145201d3ee8a946218fb7  libstdc++-v3/testsuite/23_containers/list/capacity/resize_size.cc
! ffba54c67be5c4d3ff926ac46d566aaa  libstdc++-v3/testsuite/23_containers/list/check_construct_destroy.cc
! 33f653c660f7b51327c8628c9f6adfbf  libstdc++-v3/testsuite/23_containers/list/check_construct_destroy.h
! d250750617b3f07a0700df537ceb97df  libstdc++-v3/testsuite/23_containers/list/cmp_c++20.cc
! 0b26edcbacd226d55708f688361758b8  libstdc++-v3/testsuite/23_containers/list/cons/1.cc
! 768b2cb3fbdce182599f7864b7cb17a3  libstdc++-v3/testsuite/23_containers/list/cons/1.h
! c1eaf8cfd9fdcd490f943b4cab23c626  libstdc++-v3/testsuite/23_containers/list/cons/2.cc
! 5cd71e45088fb645dea4cc24c397a8d3  libstdc++-v3/testsuite/23_containers/list/cons/2.h
! 1c2eec2467c052a2d6ed428828e7978e  libstdc++-v3/testsuite/23_containers/list/cons/3.cc
! 1f37c4ff47fdf24c11959d1e31767a2a  libstdc++-v3/testsuite/23_containers/list/cons/3.h
! 5ddd9ba135e5e10a8aebe0db2e6d0603  libstdc++-v3/testsuite/23_containers/list/cons/4.cc
! a77708aefe74b980e21cdad1fc130735  libstdc++-v3/testsuite/23_containers/list/cons/4.h
! 6c3ea675098541703f18adf7856659f3  libstdc++-v3/testsuite/23_containers/list/cons/5.cc
! 937daee12924c7b205d7c9fc279ad924  libstdc++-v3/testsuite/23_containers/list/cons/5.h
! fb230a43b62a66f86df67f1c73fa9efd  libstdc++-v3/testsuite/23_containers/list/cons/55979.cc
! 537f01be7869cebac7e7f7091da65e0e  libstdc++-v3/testsuite/23_containers/list/cons/6.cc
! bec0f2c2814a1029b2748a2114c0d2eb  libstdc++-v3/testsuite/23_containers/list/cons/6.h
! 2282fe66772c3b95988b88b2f079524f  libstdc++-v3/testsuite/23_containers/list/cons/7.cc
! 46d818b116268a0c167478f519312c23  libstdc++-v3/testsuite/23_containers/list/cons/7.h
! 88efd32838fdd5bdc40322165e98d734  libstdc++-v3/testsuite/23_containers/list/cons/8.cc
! a161b2c48769b474171911b987acff5a  libstdc++-v3/testsuite/23_containers/list/cons/8.h
! b301bb362715c40e2330403c8e6ba0d8  libstdc++-v3/testsuite/23_containers/list/cons/87809.cc
! 2e2263130ae4792df53a59ba1a72eec1  libstdc++-v3/testsuite/23_containers/list/cons/9.cc
! bc4626c103548f257ef7c87a5d7754bb  libstdc++-v3/testsuite/23_containers/list/cons/9.h
! 4bc9fa6d64501c87fb209aa700e0f677  libstdc++-v3/testsuite/23_containers/list/cons/clear_allocator.cc
! f32a2317db8fc63347246d9c4ce2c932  libstdc++-v3/testsuite/23_containers/list/cons/clear_allocator.h
! 3cd8a8f24c42106d44e4b1a4239fa1ef  libstdc++-v3/testsuite/23_containers/list/cons/cons_size.cc
! c8f04ecebd76393d700b6f181c1f6549  libstdc++-v3/testsuite/23_containers/list/cons/deduction.cc
! 39d58e858dc9731f9267550152b7b206  libstdc++-v3/testsuite/23_containers/list/cons/moveable.cc
! 36c55f06260c073197f6efc6e2e9de53  libstdc++-v3/testsuite/23_containers/list/cons/moveable.h
! 2a03031ac92579b6c49326cbb7f4bb79  libstdc++-v3/testsuite/23_containers/list/cons/noexcept_move_construct.cc
! 01a222f4e66251e0d487cbd8aabe36f9  libstdc++-v3/testsuite/23_containers/list/cons/self_move.cc
! 0a3ff1f5f8ba40ee312f3c40f2613569  libstdc++-v3/testsuite/23_containers/list/debug/90102.cc
! d694217d89c21e062493a76083f00117  libstdc++-v3/testsuite/23_containers/list/debug/assign1_neg.cc
! fc60a9e3d26105001e843dfcc396f381  libstdc++-v3/testsuite/23_containers/list/debug/assign2_neg.cc
! 7a70cc8b1d20bb907f61d169dd2a6e28  libstdc++-v3/testsuite/23_containers/list/debug/assign3_neg.cc
! a54ff86f6e5dd1365d2cdd9e05e4aab3  libstdc++-v3/testsuite/23_containers/list/debug/assign4_neg.cc
! 2e598b3a2c41284ccbe437fe5e16d83e  libstdc++-v3/testsuite/23_containers/list/debug/construct1_neg.cc
! 58b7c4044248f67a4f0612678d2830d0  libstdc++-v3/testsuite/23_containers/list/debug/construct2_neg.cc
! c9794ba200e7997f0142915a863d99b4  libstdc++-v3/testsuite/23_containers/list/debug/construct3_neg.cc
! 0a4b49bdf31b6367a1d1b6e55baa8b3e  libstdc++-v3/testsuite/23_containers/list/debug/construct4_neg.cc
! 1bcb2b7a416c93d6dc6fb21f50b11c71  libstdc++-v3/testsuite/23_containers/list/debug/insert1_neg.cc
! dfaf7182587265e8e85a935457fb24fd  libstdc++-v3/testsuite/23_containers/list/debug/insert2_neg.cc
! 70906ab6d474c2773fd3ee76e6eda060  libstdc++-v3/testsuite/23_containers/list/debug/insert3_neg.cc
! 99594aec8aacaa90f672b18a63efc68f  libstdc++-v3/testsuite/23_containers/list/debug/insert4_neg.cc
! 20847cd19287333127d816c1208b9cdf  libstdc++-v3/testsuite/23_containers/list/debug/insert5_neg.cc
! 181ce3a3f86e82749e46c208d75f9b6f  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/1.cc
! 164de611013da68f541bc72470d7ae4a  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/2.cc
! bca70cb2cdc417780172f3a6e9f18570  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/3.cc
! 379c03719021b34f8f0ba0dfbeb06e37  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/4.cc
! 083f453a5cc6cd0b6cecfbf84150daa4  libstdc++-v3/testsuite/23_containers/list/erasure.cc
! 21715d76b24f03219a8f98405a59bb96  libstdc++-v3/testsuite/23_containers/list/init-list.cc
! b351a1d752944980878d175c2f7a0f4a  libstdc++-v3/testsuite/23_containers/list/init-list.h
! 75c6c9272d8d8a8f03facae951a08e70  libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc
! c23796abb59434ee98808240a6c6ef6e  libstdc++-v3/testsuite/23_containers/list/modifiers/1.h
! dd36bd930ad3cc624ea0499beca1cfbc  libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc
! da3a6deacac36bb8ecd85605b7714800  libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc
! a854242fc1c023ffb7a66b368dd62a64  libstdc++-v3/testsuite/23_containers/list/modifiers/2.h
! 4b3a210ffe320d54aa7c35fe3a137a39  libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc
! 7c2ae32885327f9a0971f15008cda79c  libstdc++-v3/testsuite/23_containers/list/modifiers/3.h
! 59da91b7b944fd8a31986bfb85c3ec1a  libstdc++-v3/testsuite/23_containers/list/modifiers/addressof.cc
! ee0ed7e93544eb6c66c57e5492425e77  libstdc++-v3/testsuite/23_containers/list/modifiers/assign/1.cc
! 15684f500c7ae3afff41d6618c925283  libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/52799.cc
! ebe5c7ead9b7e719333121b5dd2dfbaf  libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/92878_92947.cc
! 42421bf1ccd6e864319cc8315e06efb5  libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/const_iterator.cc
! b4f5a33edd155af4623eed98db1b2ae9  libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/cxx17_return.cc
! 04196a7acebf9308544557322d47d7c0  libstdc++-v3/testsuite/23_containers/list/modifiers/erase/54577.cc
! 73946a54ea45c2365ad995dcc9cffa1e  libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc
! ee7bd93bc463108ad1100f389e895801  libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h
! b5eacb261751f1b90344ce48c5835ff5  libstdc++-v3/testsuite/23_containers/list/modifiers/insert/const_iterator.cc
! 4a5910d697b9adcd6e231273a147bfb4  libstdc++-v3/testsuite/23_containers/list/modifiers/swap/1.cc
! 25a40f789fbec8865e35d8101becfdcb  libstdc++-v3/testsuite/23_containers/list/modifiers/swap/1.h
! b2651c980bbb768aa5425d721ae9da36  libstdc++-v3/testsuite/23_containers/list/modifiers/swap/2.cc
! 19fe706fbb4b90c0c118e37ecb7da56d  libstdc++-v3/testsuite/23_containers/list/modifiers/swap/2.h
! b08cf0a0a06e45a24a0a8658841ff6eb  libstdc++-v3/testsuite/23_containers/list/modifiers/swap/3.cc
! 5c1f39594d85d94a2355453873c7eb1f  libstdc++-v3/testsuite/23_containers/list/modifiers/swap/3.h
! c2f6fcdd3b77bdb1c4b1a50c9c0b6815  libstdc++-v3/testsuite/23_containers/list/operations/1.cc
! d0e2ac1926587c7c9eab0270407c0cdb  libstdc++-v3/testsuite/23_containers/list/operations/1.h
! fed69104010f19f63ce58c7b4afb2c86  libstdc++-v3/testsuite/23_containers/list/operations/2.cc
! f40cf5d2f1076cb9f65536f3cd497274  libstdc++-v3/testsuite/23_containers/list/operations/2.h
! 9c9f7df8c770051e2514ad24101cfbbe  libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc
! caf00eb589de131806a0932f60e49e96  libstdc++-v3/testsuite/23_containers/list/operations/3.cc
! fe2d4e7e468f843f524e0e9a1a439ad7  libstdc++-v3/testsuite/23_containers/list/operations/3.h
! e7524d557b12c2cf3f8c85959895af2f  libstdc++-v3/testsuite/23_containers/list/operations/35969.cc
! 6c6421af4953293ba99ce48df657f890  libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc
! fcc3fe0e77c8ec13cd344aaf176ef184  libstdc++-v3/testsuite/23_containers/list/operations/4.cc
! 448278b3b821614b48518fbaa9e5da20  libstdc++-v3/testsuite/23_containers/list/operations/4.h
! 0222a00e748d2c50cc5cfb994fe2ee40  libstdc++-v3/testsuite/23_containers/list/operations/42352.cc
! 475d2dc5e6dcae61ce087ddfa33ed7a0  libstdc++-v3/testsuite/23_containers/list/operations/78389.cc
! ff88c100c4488d6f7fe238a2c3b1594c  libstdc++-v3/testsuite/23_containers/list/operations/80034.cc
! 8023ad529f75d33be3e89a05b7284907  libstdc++-v3/testsuite/23_containers/list/operations/91620.cc
! 337364fe2640ed2e1cb06531c5a3ca5b  libstdc++-v3/testsuite/23_containers/list/operations/remove_cxx20_return.cc
! e5d6e3b75e3181c734c5a042b960b7fd  libstdc++-v3/testsuite/23_containers/list/operations/splice/const_iterator.cc
! fd2a08b6e18f44430871ce27a78f45da  libstdc++-v3/testsuite/23_containers/list/operations/unique_cxx20_return.cc
! 4570e7bce71d12d895d1bab0e6c18ea7  libstdc++-v3/testsuite/23_containers/list/pmr_typedefs.cc
! a27b2537688952c83968fa6da1214c7d  libstdc++-v3/testsuite/23_containers/list/pmr_typedefs_debug.cc
! a17c26e42ffa06c6f5ecf96920a6fdec  libstdc++-v3/testsuite/23_containers/list/pthread1.cc
! 2d788d77c34ba7ab92793a5c80f7735b  libstdc++-v3/testsuite/23_containers/list/pthread5.cc
! 21d430c5bdd24554f2965270632c5260  libstdc++-v3/testsuite/23_containers/list/range_access.cc
! d7185e9391025be00d7e1f0a64c3d363  libstdc++-v3/testsuite/23_containers/list/requirements/citerators.cc
! 8190ff4e54452e208b400b39c3085998  libstdc++-v3/testsuite/23_containers/list/requirements/do_the_right_thing.cc
! b3bb44d058f69cbc6253e300bca9cc32  libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
! 384193c0eee10bce00cf15012ce4fe4d  libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor.cc
! 0735e6112f57d162ca0fb0f4015f7732  libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
! eb642dc51beef0bd0ca4fdc966546a72  libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
! d184c457663a24c43657b15d3f34eb1e  libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
! e1897421d47ae79df732793eaf8a2e08  libstdc++-v3/testsuite/23_containers/list/requirements/exception/basic.cc
! bcc13ad53ada1eef135188c613642cb5  libstdc++-v3/testsuite/23_containers/list/requirements/exception/generation_prohibited.cc
! ad46ed9e6386a85d97546c7626d3676b  libstdc++-v3/testsuite/23_containers/list/requirements/exception/propagation_consistent.cc
! dc2f2ed3ef9711357df18684b4eb6b7a  libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/1.cc
! 50f0f490c6e4c0db6ebcfc1d555be564  libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/2.cc
! 71e3430194c684111eb072e865dad632  libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/3.cc
! 3d6e60a663945130e67b1e52639ab062  libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/4.cc
! c381ef61003545130531f9d12e48e765  libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/5.cc
! 7a695a3c9661796a161f3c0185ef08d7  libstdc++-v3/testsuite/23_containers/list/requirements/partial_specialization/1.cc
! 6848ba356dd43b5776adae4993107c99  libstdc++-v3/testsuite/23_containers/list/requirements/typedefs.cc
! fe64d91e8f821ce83f40268d8f669b3b  libstdc++-v3/testsuite/23_containers/list/types/1.cc
! b3d4b64959e32751a584025bfcc95812  libstdc++-v3/testsuite/23_containers/map/14340.cc
! ea0e4ed80a250e8f0d47bc8785a114f1  libstdc++-v3/testsuite/23_containers/map/18604.cc
! a9cfdd558fa441b09af3cbdf0c287b91  libstdc++-v3/testsuite/23_containers/map/23781_neg.cc
! 0851b3465e716fc568154531e551503a  libstdc++-v3/testsuite/23_containers/map/48101-2_neg.cc
! 01ee400dccea0c15b62cf152edb5086f  libstdc++-v3/testsuite/23_containers/map/48101-3_neg.cc
! 6450b2ed9665db5d20d9a293e893cb01  libstdc++-v3/testsuite/23_containers/map/48101_neg.cc
! 95bd1851c950ad65b34c05298f7e2753  libstdc++-v3/testsuite/23_containers/map/56613.cc
! 652203e40e8fdbbf603f28c953c9d38e  libstdc++-v3/testsuite/23_containers/map/58764.cc
! 3f315458c103641f9aa9556728c960b9  libstdc++-v3/testsuite/23_containers/map/59872.cc
! 6ff4012ee675cfdc90fd9e3045ac1ad2  libstdc++-v3/testsuite/23_containers/map/77334.cc
! ce0d1f559cfd762160b5364727f7a6ce  libstdc++-v3/testsuite/23_containers/map/92124.cc
! bbfee5262fbd858065be2e2b313f89ff  libstdc++-v3/testsuite/23_containers/map/allocator/copy.cc
! 559911e032094d786841b808528375ad  libstdc++-v3/testsuite/23_containers/map/allocator/copy_assign.cc
! f20722bb14b72ff7eead44b4b9459875  libstdc++-v3/testsuite/23_containers/map/allocator/default_init.cc
! 1367840a2e1f24a66925067416479be8  libstdc++-v3/testsuite/23_containers/map/allocator/init-list.cc
! 58d5bb66309e3f1b5ba7e26083547e03  libstdc++-v3/testsuite/23_containers/map/allocator/minimal.cc
! 4171a0a215116ede3a133a96ce344960  libstdc++-v3/testsuite/23_containers/map/allocator/move.cc
! b098552f6a68b66c8f97debe1d202cee  libstdc++-v3/testsuite/23_containers/map/allocator/move_assign.cc
! 43006f9b1a0b3a83871fa15d830ea9ac  libstdc++-v3/testsuite/23_containers/map/allocator/move_cons.cc
! 1ddd5b7d6ae939ae39b4a65729a9525f  libstdc++-v3/testsuite/23_containers/map/allocator/noexcept.cc
! 0defa0cdd60a41e995eafbb93d194bbe  libstdc++-v3/testsuite/23_containers/map/allocator/swap.cc
! 357711804fc62efa30d2159f97de6cd2  libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc
! 76b48dbf32891fbd6fe33bf8ca44e868  libstdc++-v3/testsuite/23_containers/map/cons/deduction.cc
! 3f0a619c5be9c669fa2d96fd9c7b2184  libstdc++-v3/testsuite/23_containers/map/cons/moveable.cc
! b6dfd05178c106513ee4389e7a90cf8c  libstdc++-v3/testsuite/23_containers/map/cons/noexcept_default_construct.cc
! 987917309405a5705e3e3f57498a3de6  libstdc++-v3/testsuite/23_containers/map/cons/noexcept_move_construct.cc
! 99e0f46ccf7cf7cac8879fc4ce35c897  libstdc++-v3/testsuite/23_containers/map/debug/60499.cc
! 070b0ec84ac3dc4829ccfb1fbeea6fb8  libstdc++-v3/testsuite/23_containers/map/debug/90102.cc
! 4dbe7de083acf90d303815f230abb2e0  libstdc++-v3/testsuite/23_containers/map/debug/construct1_neg.cc
! 40bdad179d20ffe21499cb11cd73a397  libstdc++-v3/testsuite/23_containers/map/debug/construct2_neg.cc
! a5a6f45e9cd0a06b5934df6ca38f3fe8  libstdc++-v3/testsuite/23_containers/map/debug/construct3_neg.cc
! 1a137817043c4a1a6a536643f62c243a  libstdc++-v3/testsuite/23_containers/map/debug/construct4_neg.cc
! 61d1506803edc9449880262b9d2b66bf  libstdc++-v3/testsuite/23_containers/map/debug/construct5_neg.cc
! 3b2037b33ea5b2c7e045a1a316fa7a5d  libstdc++-v3/testsuite/23_containers/map/debug/insert1_neg.cc
! 1aeaf4bebd5e700c04c8c7c04157c104  libstdc++-v3/testsuite/23_containers/map/debug/insert2_neg.cc
! bc3ea613dffa661ef8afc7579ced4d3a  libstdc++-v3/testsuite/23_containers/map/debug/insert3_neg.cc
! 52e7be45e9c133e2ed10b54f72f1ba36  libstdc++-v3/testsuite/23_containers/map/debug/insert4_neg.cc
! 19a1e058a07bbe679db6bbeef1d565b6  libstdc++-v3/testsuite/23_containers/map/debug/invalidation/1.cc
! b7bbac640d776065aee5f4f37a8985c2  libstdc++-v3/testsuite/23_containers/map/debug/invalidation/2.cc
! 18f03fa4514058985476fa17c9afeb1b  libstdc++-v3/testsuite/23_containers/map/debug/move_assign_neg.cc
! d01d8791ceddb9f305c71b983d3698be  libstdc++-v3/testsuite/23_containers/map/debug/move_neg.cc
! ffe5ad9eb2000cfc6d725352fbf211a5  libstdc++-v3/testsuite/23_containers/map/element_access/1.cc
! 4f6e5e4cdce638423aca161888b2fb4e  libstdc++-v3/testsuite/23_containers/map/element_access/2.cc
! 898e34c1eafc301748503cf17b40b412  libstdc++-v3/testsuite/23_containers/map/element_access/39901.cc
! 0ff82243d8a024a7601413f95d2cfc6b  libstdc++-v3/testsuite/23_containers/map/element_access/46148.cc
! f5bf9ecd9c515ee6ba597129e4d1f495  libstdc++-v3/testsuite/23_containers/map/erasure.cc
! 4dd400653eb2d00c5207552d3361b4fb  libstdc++-v3/testsuite/23_containers/map/init-list.cc
! 89a4b3d424cc011ec45a90f8f13b636f  libstdc++-v3/testsuite/23_containers/map/modifiers/dr130.cc
! 0858a592090660d7ec278ede0ad09fab  libstdc++-v3/testsuite/23_containers/map/modifiers/emplace/1.cc
! e3203ccc490c49997aaf2133585266c8  libstdc++-v3/testsuite/23_containers/map/modifiers/emplace/92878_92947.cc
! 20a3807664e426827aa899a7e74b4038  libstdc++-v3/testsuite/23_containers/map/modifiers/erase/47628.cc
! acf30d2f43703f27d92b83f66569f54a  libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc
! cee82d7247dd70b2c812dbb4ee42b9a5  libstdc++-v3/testsuite/23_containers/map/modifiers/erase/abi_tag.cc
! 02d9439143c57d282e1e5d413f8817c1  libstdc++-v3/testsuite/23_containers/map/modifiers/erase/dr130-linkage-check.cc
! 3f4d4ab35affff6dfb3bfd7c4f595e73  libstdc++-v3/testsuite/23_containers/map/modifiers/erase/end_neg.cc
! 8908782ea136535d77209c34878ce0d8  libstdc++-v3/testsuite/23_containers/map/modifiers/extract.cc
! b9b50aedc996f34e4ceeafed6cc0fbd2  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/1.cc
! f5b3692c435a07abbdaddb3bdb7d4185  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/16813.cc
! 00e65f7786cea0cebd91f6037ee11128  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/2.cc
! 96e79bfd0b392a2b0587d3dcc03c422d  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/3.cc
! 1b32f1c0daf7d2e9ead569a2b057ffce  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/4.cc
! 43e2d26a6d3172744a69f7e62385beb6  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/5.cc
! a6bc198c84bb65bd57f2ad60a6669c44  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/78595.cc
! ecfe2ae003f58713c6dfef2f7f8320b9  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/83226.cc
! 29e804507cac6190eac932aa0e152169  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/87194.cc
! 5e60d35c20bf659ea0fcff696750889b  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/dr2354.cc
! bb916d7c7a8999f750b2172050800050  libstdc++-v3/testsuite/23_containers/map/modifiers/insert_or_assign/1.cc
! 1446fef4c9cb52c44f0f48dc609018ad  libstdc++-v3/testsuite/23_containers/map/modifiers/merge.cc
! 9e5688a908a076583e4d53f7df90db8a  libstdc++-v3/testsuite/23_containers/map/modifiers/swap/1.cc
! 039cd9f853700fcedf374bf1c8e3e111  libstdc++-v3/testsuite/23_containers/map/modifiers/swap/2.cc
! 528de2dece5fcab0e43cee844512fcc2  libstdc++-v3/testsuite/23_containers/map/modifiers/swap/3.cc
! 16141c908b1fd956c7767bfebd6b5082  libstdc++-v3/testsuite/23_containers/map/modifiers/try_emplace/1.cc
! 5bfade7988997f9711bdb86ff477a965  libstdc++-v3/testsuite/23_containers/map/operations/1.cc
! c7f5eec8c238ba4e66744baaebfeb4ea  libstdc++-v3/testsuite/23_containers/map/operations/2.cc
! fc59711b0199bd97b0b48fef6ed288b8  libstdc++-v3/testsuite/23_containers/map/operations/31440.cc
! fd615451e4f76cb52bfd9e922225646b  libstdc++-v3/testsuite/23_containers/map/operations/contains.cc
! 5011624f560368f467b8f5a6678216ff  libstdc++-v3/testsuite/23_containers/map/operations/count.cc
! 6fd9a6aaf9ac04ec041a24b87de62235  libstdc++-v3/testsuite/23_containers/map/operators/1.cc
! c8cc7697a3f7d42227c89b56a187f63a  libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
! 22065bac8ef4291768b9da93547b9af2  libstdc++-v3/testsuite/23_containers/map/operators/2.cc
! 426cbf4c8e5ba1e3061044ea58f92749  libstdc++-v3/testsuite/23_containers/map/operators/cmp_c++20.cc
! 220b1379c5d162c5a757c8206fe575d9  libstdc++-v3/testsuite/23_containers/map/pmr_typedefs.cc
! 92e12d6e7f559850fa6b0dec57bd2f09  libstdc++-v3/testsuite/23_containers/map/pmr_typedefs_debug.cc
! f5f251600c32afa2956a5031682a67ee  libstdc++-v3/testsuite/23_containers/map/pthread6.cc
! f44740214a02cba8700ed5b0e815f3b0  libstdc++-v3/testsuite/23_containers/map/range_access.cc
! be0881914454b08377335394aecdd0ef  libstdc++-v3/testsuite/23_containers/map/requirements/citerators.cc
! 536dba34487453725c3c212f48a11c52  libstdc++-v3/testsuite/23_containers/map/requirements/exception/basic.cc
! 53f9c961397f4cf125ffc5df934f3fb3  libstdc++-v3/testsuite/23_containers/map/requirements/exception/generation_prohibited.cc
! 0f174743f45641f8d13bb94c65dadf65  libstdc++-v3/testsuite/23_containers/map/requirements/exception/propagation_consistent.cc
! 5747032d9e0d7f9e6aadc7d3d16080bf  libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/1.cc
! 26a26e0dd5054aeddde28a5d0973e8c6  libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/2.cc
! 2544ee257afcbfa6950b984f72518273  libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/3.cc
! 345bcb7ae088286e35e7883d5bc0618a  libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/4.cc
! b9f3acae3b57d2bbe91a2e26ca8dce2b  libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/5.cc
! 599c38a4979f4ccca3ede66407a2dcb3  libstdc++-v3/testsuite/23_containers/map/requirements/partial_specialization/1.cc
! 2daad626aea4bfe80567338c6b218c3e  libstdc++-v3/testsuite/23_containers/map/requirements/typedefs.cc
! 6eda861a4e6609a0ba349c68e14b9cc3  libstdc++-v3/testsuite/23_containers/multimap/14340.cc
! 756a509dc019390affb5cf4af84ceb9e  libstdc++-v3/testsuite/23_containers/multimap/23781_neg.cc
! 32bdddd59e8d4fec65feea94bfd0d094  libstdc++-v3/testsuite/23_containers/multimap/48101-2_neg.cc
! 2fe290e66958abdfe4b20913ad9d738a  libstdc++-v3/testsuite/23_containers/multimap/48101-3_neg.cc
! 1e50f85467ccd0284d26a080ab0cd083  libstdc++-v3/testsuite/23_containers/multimap/48101_neg.cc
! 9332d1e8b6b5e86206b0d15eefb861a9  libstdc++-v3/testsuite/23_containers/multimap/58764.cc
! 5dcf5bf73681870d3651cb28fa3f2e00  libstdc++-v3/testsuite/23_containers/multimap/allocator/copy.cc
! 677a2a46f953f12991db2a3742aca7c2  libstdc++-v3/testsuite/23_containers/multimap/allocator/copy_assign.cc
! 0723723812efce92c4a502babaea499b  libstdc++-v3/testsuite/23_containers/multimap/allocator/init-list.cc
! 81dc82eb4f7c6a33a40eb2435f62a729  libstdc++-v3/testsuite/23_containers/multimap/allocator/minimal.cc
! 3d85c2d41effd3f27ec86ca756bb1344  libstdc++-v3/testsuite/23_containers/multimap/allocator/move.cc
! a9a3716c2800d2ea1409624ca2f98792  libstdc++-v3/testsuite/23_containers/multimap/allocator/move_assign.cc
! 6b228284e36f939ee229675da47652f2  libstdc++-v3/testsuite/23_containers/multimap/allocator/move_cons.cc
! 5530aa8b58ba732be418bf447fbae3c7  libstdc++-v3/testsuite/23_containers/multimap/allocator/noexcept.cc
! 5c7fff2e50e66ba6a95992e668650076  libstdc++-v3/testsuite/23_containers/multimap/allocator/swap.cc
! 059305798e69806ca6be92cda9a07ec6  libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc
! abae787ba40ee1b8da955bc53230b25b  libstdc++-v3/testsuite/23_containers/multimap/cons/deduction.cc
! 7279408ac2d3845f2aff452c2cebd46d  libstdc++-v3/testsuite/23_containers/multimap/cons/moveable.cc
! 0f6cdac068552d528187f1bf7e36d5ab  libstdc++-v3/testsuite/23_containers/multimap/cons/noexcept_default_construct.cc
! 352e93645771fe73221eaf2b19544fa8  libstdc++-v3/testsuite/23_containers/multimap/cons/noexcept_move_construct.cc
! 9ebda5ebeb93647a4d5cd2c71686993f  libstdc++-v3/testsuite/23_containers/multimap/debug/60499.cc
! a08624393897b72351e1d0cf1471fb3a  libstdc++-v3/testsuite/23_containers/multimap/debug/90102.cc
! da854137fdc9cd3b48b7f4317ae476b4  libstdc++-v3/testsuite/23_containers/multimap/debug/construct1_neg.cc
! b2f72fd5d642195852288112254925d5  libstdc++-v3/testsuite/23_containers/multimap/debug/construct2_neg.cc
! 0dc84a62c5a5e38ea0764cc9c6b9a899  libstdc++-v3/testsuite/23_containers/multimap/debug/construct3_neg.cc
! f12085466e8ca832783ff66dfc1beee2  libstdc++-v3/testsuite/23_containers/multimap/debug/construct4_neg.cc
! 135af31e8676065e906916a69b4749a4  libstdc++-v3/testsuite/23_containers/multimap/debug/construct5_neg.cc
! f320ced7ad889ac7f860744165e78367  libstdc++-v3/testsuite/23_containers/multimap/debug/insert1_neg.cc
! a2ebfc3c59758d054a13a89f40a279de  libstdc++-v3/testsuite/23_containers/multimap/debug/insert2_neg.cc
! daa404c48b46883fdbab8282c2f47deb  libstdc++-v3/testsuite/23_containers/multimap/debug/insert3_neg.cc
! 65d8a2f6052b5dbe5349d9782ec715c1  libstdc++-v3/testsuite/23_containers/multimap/debug/insert4_neg.cc
! 4d2d0c435ec3be8c55fcedfee7946a15  libstdc++-v3/testsuite/23_containers/multimap/debug/invalidation/1.cc
! 56a316bf027a0f0ceeab030a22a2e6ee  libstdc++-v3/testsuite/23_containers/multimap/debug/invalidation/2.cc
! 3d191817bb7f0df6af59fc050349c4d5  libstdc++-v3/testsuite/23_containers/multimap/debug/move_assign_neg.cc
! 6ed65f62c246d8247edef2039894d368  libstdc++-v3/testsuite/23_containers/multimap/debug/move_neg.cc
! d0c3f5f2c360da9b5bf268b3e837a238  libstdc++-v3/testsuite/23_containers/multimap/init-list.cc
! 9f6d65c7c3f1c6124593028af225698b  libstdc++-v3/testsuite/23_containers/multimap/modifiers/dr130.cc
! af93ccb8fd2e1bd908a22eeb824aa0b0  libstdc++-v3/testsuite/23_containers/multimap/modifiers/emplace/1.cc
! 71a021d3ee5be585ce395e6b8f1f46dd  libstdc++-v3/testsuite/23_containers/multimap/modifiers/emplace/92878_92947.cc
! b86d0983304ac68fc3be4bbb4e05671f  libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/47628.cc
! b9a40804093799adc5db48994e1271bc  libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc
! cc08d4d3bad465eddbb2285ae6355c09  libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/abi_tag.cc
! 064ae979c2a53f9caf15082e7ef4d78b  libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/dr130-linkage-check.cc
! 0097e197c66f1ea9f15d8cd852e6e000  libstdc++-v3/testsuite/23_containers/multimap/modifiers/extract.cc
! 9f5ff7641d4d1ac2b3b476ca66e4fd89  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/1.cc
! a95f1476dbb5d72c65c06f7618d202c0  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/2.cc
! 3e7040c4267ab3dd17e613642db37822  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/22102.cc
! 7ac76a18a42e5a1fef92d36cabf083cf  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/3.cc
! c921f2301927f51298714ac883483a44  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/4.cc
! ce171f7d52888c7a3b953cd4a94797fa  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/78595.cc
! bc3fba064a932448c6a537a1b8284664  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/87194.cc
! 5051ab16cb9cd9c8b7d57468a7097c61  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/dr2354.cc
! 5ee3cef788f5aa259eb6d0b518e1000f  libstdc++-v3/testsuite/23_containers/multimap/modifiers/merge.cc
! 1525e830d8a1d248d0c6de675c1a2bd8  libstdc++-v3/testsuite/23_containers/multimap/modifiers/swap/1.cc
! 6012b777273671c8b3f30dfbb4925b06  libstdc++-v3/testsuite/23_containers/multimap/modifiers/swap/2.cc
! a27c3037c9650280778cb033fce27c05  libstdc++-v3/testsuite/23_containers/multimap/modifiers/swap/3.cc
! 8986eb5dc083e6db602f3e1fcd67162e  libstdc++-v3/testsuite/23_containers/multimap/operations/1.cc
! dacb16dc58286a4a773808693c2dd2d2  libstdc++-v3/testsuite/23_containers/multimap/operations/2.cc
! b14437087eb0da8bc5ce4cf46dc54b8c  libstdc++-v3/testsuite/23_containers/multimap/operations/contains.cc
! 5fe855f7b8100ce340955216cfbd8a21  libstdc++-v3/testsuite/23_containers/multimap/operations/count.cc
! 9c884300d99fd1b44bc8ab3a1b65944c  libstdc++-v3/testsuite/23_containers/multimap/operators/cmp_c++20.cc
! ce5ec990d49c5e8443d2129943952ef9  libstdc++-v3/testsuite/23_containers/multimap/pmr_typedefs.cc
! b12261a7e85d1367e8e6f0e04689c55b  libstdc++-v3/testsuite/23_containers/multimap/pmr_typedefs_debug.cc
! 09fd75f4efff5ddc7d0f276729a854bb  libstdc++-v3/testsuite/23_containers/multimap/range_access.cc
! 309b86e9f05e12ccf4919712ee340f5f  libstdc++-v3/testsuite/23_containers/multimap/requirements/citerators.cc
! 008d06791b5353d4359a9a22a716755c  libstdc++-v3/testsuite/23_containers/multimap/requirements/exception/basic.cc
! 3e8fc4a0cb7a94440046d284f3b65a83  libstdc++-v3/testsuite/23_containers/multimap/requirements/exception/generation_prohibited.cc
! 8119ad9c44fc8781fa8f7a61f078cd92  libstdc++-v3/testsuite/23_containers/multimap/requirements/exception/propagation_consistent.cc
! 43789fda27b5a37a3bb3d7eca1c4886c  libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/1.cc
! 2306d3f4aea847bea4fc9780e5f04a77  libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/2.cc
! 32fbff32d9c50067432fd662ce44be51  libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/3.cc
! 3e27540d016a6f89561ce0b6d11fbab3  libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/4.cc
! 6c8b40c49d3daf4b0a75a409d2ce02d1  libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/5.cc
! c47ed3ceea6e048b1775f0fe2ccacb6e  libstdc++-v3/testsuite/23_containers/multimap/requirements/partial_specialization/1.cc
! 6bc4f0fbe05b1b17b89f930d56af50ec  libstdc++-v3/testsuite/23_containers/multimap/requirements/typedefs.cc
! 947228412ba2d4355325f1c5a808ad1d  libstdc++-v3/testsuite/23_containers/multiset/14340.cc
! 09724938d70eb281acb3b3d59cdda964  libstdc++-v3/testsuite/23_containers/multiset/23781_neg.cc
! 7f1d74fe8bd04ce71cf4ebca772c32e6  libstdc++-v3/testsuite/23_containers/multiset/48101-2_neg.cc
! 66508613d0926be09ddf8ffaed67e610  libstdc++-v3/testsuite/23_containers/multiset/48101-3_neg.cc
! 9a2952adfbd6b854279119ebb540563b  libstdc++-v3/testsuite/23_containers/multiset/48101_neg.cc
! e11172304436ea41e0bc84faaa3cfdac  libstdc++-v3/testsuite/23_containers/multiset/58764.cc
  c599e48655ea2e75c592ab5a1cf5ae3c  libstdc++-v3/testsuite/23_containers/multiset/allocator/103501.cc
! 1144cc12d85a6c3e05bf629fbe0abb95  libstdc++-v3/testsuite/23_containers/multiset/allocator/copy.cc
! 5ce5479b9687060d924566d7fcfe4a02  libstdc++-v3/testsuite/23_containers/multiset/allocator/copy_assign.cc
! acdba075ab6eb7c80b362dd04b52165d  libstdc++-v3/testsuite/23_containers/multiset/allocator/init-list.cc
! 62204fc53b5687e97570ee39c2c2ddb4  libstdc++-v3/testsuite/23_containers/multiset/allocator/minimal.cc
! 4bdc6bbf57d24025580351052aac4888  libstdc++-v3/testsuite/23_containers/multiset/allocator/move.cc
! a061133d8a6d26e4fcc4fe7cafa680db  libstdc++-v3/testsuite/23_containers/multiset/allocator/move_assign.cc
! 2f71170abe54de386e7c963413a42e5a  libstdc++-v3/testsuite/23_containers/multiset/allocator/move_cons.cc
! 9ad8ad9082cb3b800c664a5badc8ff7c  libstdc++-v3/testsuite/23_containers/multiset/allocator/noexcept.cc
! 5f278132c7418a83af10128c69cec0ad  libstdc++-v3/testsuite/23_containers/multiset/allocator/swap.cc
! 169fc3f5dfdd87e28c0418f566d9f27d  libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc
! 8cd522ed80bef564c5b4a09dd24f586b  libstdc++-v3/testsuite/23_containers/multiset/cons/deduction.cc
! 8471a667b502a70913b89fe39b5ed35b  libstdc++-v3/testsuite/23_containers/multiset/cons/moveable.cc
! eaf6a2fdb28db324d0d477fd1f55a17d  libstdc++-v3/testsuite/23_containers/multiset/cons/noexcept_default_construct.cc
! 855d683992e941da82361710d4b5913a  libstdc++-v3/testsuite/23_containers/multiset/cons/noexcept_move_construct.cc
! e8cca5d4509afe48ec69099546eec4b7  libstdc++-v3/testsuite/23_containers/multiset/debug/60499.cc
! 54ab17100c158543937ce42d22a917bc  libstdc++-v3/testsuite/23_containers/multiset/debug/90102.cc
! 640a084f85a833662f421178518678e5  libstdc++-v3/testsuite/23_containers/multiset/debug/construct1_neg.cc
! 878e0a116d9174cbeab94e3b513fb171  libstdc++-v3/testsuite/23_containers/multiset/debug/construct2_neg.cc
! 90d04a1fac15a2438b4664a8ec81f50a  libstdc++-v3/testsuite/23_containers/multiset/debug/construct3_neg.cc
! 5345016fae380de3ad9792065bca834a  libstdc++-v3/testsuite/23_containers/multiset/debug/construct4_neg.cc
! 3c82843a9016935475137eb948330291  libstdc++-v3/testsuite/23_containers/multiset/debug/construct5_neg.cc
! 99957c3233db9435cd5b9eaddcd9ea7d  libstdc++-v3/testsuite/23_containers/multiset/debug/insert1_neg.cc
! 8e972872ba67b0ab0cc0b8821d6dbfd7  libstdc++-v3/testsuite/23_containers/multiset/debug/insert2_neg.cc
! 5076e7ddc9fc9a7f18e24a22d356fdc9  libstdc++-v3/testsuite/23_containers/multiset/debug/insert3_neg.cc
! 9ba599d835ffcabd7481dd0969ac64f3  libstdc++-v3/testsuite/23_containers/multiset/debug/insert4_neg.cc
! 727743994e25b0f78a1bd3a492791dd8  libstdc++-v3/testsuite/23_containers/multiset/debug/invalidation/1.cc
! 8d01e21b11fe770cdc099fda02f06ce9  libstdc++-v3/testsuite/23_containers/multiset/debug/invalidation/2.cc
! 551fd45774593c0c8d934bfaf2be92f6  libstdc++-v3/testsuite/23_containers/multiset/debug/move_assign_neg.cc
! e4d60375ddeb1bb67555d79d6f3bf551  libstdc++-v3/testsuite/23_containers/multiset/debug/move_neg.cc
! 88c561bccd85e62fadc7c43287e671cf  libstdc++-v3/testsuite/23_containers/multiset/init-list.cc
! 9fa7e3af060081b7d9cfad93a15fe4f9  libstdc++-v3/testsuite/23_containers/multiset/modifiers/dr130.cc
! dbaff1331137b71965546885e60d275b  libstdc++-v3/testsuite/23_containers/multiset/modifiers/emplace/1.cc
! 5b392904ec0c46196eb3eee21db0c5e7  libstdc++-v3/testsuite/23_containers/multiset/modifiers/emplace/92878_92947.cc
! eecee42bbd3b4b0e4b06b6fef7bbf532  libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc
! 3d6fddb09687e49735806538ce9fa37a  libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/abi_tag.cc
! 5e76ab8f911960f5e4308945264ef396  libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/dr130-linkage-check.cc
! ec69e5e71283bd1ed68dfa8ec1c51e21  libstdc++-v3/testsuite/23_containers/multiset/modifiers/extract.cc
! 5b2ed1cb5c6cf983557ed5fcca74b1ad  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/1.cc
! cb14356ef92492ef57e46f5cd7811527  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/2.cc
! ed805497b45f76225208f0e612342bc4  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/22102.cc
! 762ffb069b8d424fbbd995da08a66426  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/3.cc
! 13e12a717a07cc254f4fcbda89a5593d  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/4.cc
! e1c1ebb7b696adbb43bd4508b3ccae4b  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/87194.cc
! ceb40569d39510abe87eb844ffb3ea6a  libstdc++-v3/testsuite/23_containers/multiset/modifiers/merge.cc
! ef828511878ec9d8289e179ae7ac2c98  libstdc++-v3/testsuite/23_containers/multiset/modifiers/swap/1.cc
! 4cb191f9069817aedfcc11b29b0ddf7d  libstdc++-v3/testsuite/23_containers/multiset/modifiers/swap/2.cc
! 15520cd8e0c8f128c01f92ec3e293a2f  libstdc++-v3/testsuite/23_containers/multiset/modifiers/swap/3.cc
! f4934f2f71f90ca3a7dba7bfd2124f42  libstdc++-v3/testsuite/23_containers/multiset/operations/1.cc
! 7e73820f721707ea994d94988500e4ed  libstdc++-v3/testsuite/23_containers/multiset/operations/2.cc
! b9eb73bf77809a8692c59b508895db86  libstdc++-v3/testsuite/23_containers/multiset/operations/contains.cc
! 2a62c0692c66a8d1bfd0ba2a19578c60  libstdc++-v3/testsuite/23_containers/multiset/operations/count.cc
! 3575d08a252b4b0388ef12265aa823cb  libstdc++-v3/testsuite/23_containers/multiset/operators/cmp_c++20.cc
! df8ae0a4580b9d3fde8f3fb4267bfb0f  libstdc++-v3/testsuite/23_containers/multiset/pmr_typedefs.cc
! 62569fa7befc5a8ccc136c0620c0eab7  libstdc++-v3/testsuite/23_containers/multiset/pmr_typedefs_debug.cc
! 4eea081c385f10361dc5b9aad1ef969d  libstdc++-v3/testsuite/23_containers/multiset/range_access.cc
! b859c4c7cc439364239ed068fe763316  libstdc++-v3/testsuite/23_containers/multiset/requirements/citerators.cc
! 9f684fbc7e724fd819640979283608b7  libstdc++-v3/testsuite/23_containers/multiset/requirements/exception/basic.cc
! e6cac5c7a7eb94ecc9df666c48ce7280  libstdc++-v3/testsuite/23_containers/multiset/requirements/exception/generation_prohibited.cc
! d798e221664bb5f8ba1ee0bd8c240281  libstdc++-v3/testsuite/23_containers/multiset/requirements/exception/propagation_consistent.cc
! e7bb22dce227a047e15fe2806f863b31  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/1.cc
! 15bf95eb9982be048e5e1a844407c768  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/1_c++0x.cc
! a2d94469362c21eadf1926f8d105dbe4  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/2.cc
! eb0a86069c983f06f3c1c056da8458fd  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/3.cc
! 0b19e3947cbbc8a96a2f92ea948251e7  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/4.cc
! 30633f335d37e4675529dc95f04c6224  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5.cc
! b9a9c251048408c51141041b72e82451  libstdc++-v3/testsuite/23_containers/multiset/requirements/partial_specialization/1.cc
! 26391fe0d3c2522c949b92b30cedd493  libstdc++-v3/testsuite/23_containers/multiset/requirements/typedefs.cc
! 29f84ce3afe424cdb5c889bca950c72a  libstdc++-v3/testsuite/23_containers/priority_queue/67085.cc
! 04faf9a0ee19f71f5afbbaadf49280a5  libstdc++-v3/testsuite/23_containers/priority_queue/77528.cc
! 8b625aa3ba99081201549b4300933532  libstdc++-v3/testsuite/23_containers/priority_queue/92878_92947.cc
! 617247f1ea48067b44f8689c4974c86f  libstdc++-v3/testsuite/23_containers/priority_queue/allocator.cc
! 65142146250b2ff45a5eede27ae0a314  libstdc++-v3/testsuite/23_containers/priority_queue/deduction.cc
! e01bac4f77a920bdc836075483434529  libstdc++-v3/testsuite/23_containers/priority_queue/dr2537.cc
! ac3e64b8e0abbec18f503522a183089c  libstdc++-v3/testsuite/23_containers/priority_queue/members/7161.cc
! 20980e5963d74fc7f9c0a35de8f45c1e  libstdc++-v3/testsuite/23_containers/priority_queue/moveable.cc
! 97755355326b3cb407e7617d8c89e60d  libstdc++-v3/testsuite/23_containers/priority_queue/requirements/constructible.cc
! 6ecaa6e7a2ff5f3b3e6050a323bb0574  libstdc++-v3/testsuite/23_containers/priority_queue/requirements/explicit_instantiation/1.cc
! 9953e3e5341efdd34638d8f2585e557e  libstdc++-v3/testsuite/23_containers/priority_queue/requirements/explicit_instantiation/1_c++98.cc
! 7f45e9ac28eb894be4c3a9ee4a0f1257  libstdc++-v3/testsuite/23_containers/priority_queue/requirements/typedefs.cc
! e57a592ffd3b830a25733950eca13785  libstdc++-v3/testsuite/23_containers/priority_queue/requirements/uses_allocator.cc
! c186835ae380038c6e65c06c99426683  libstdc++-v3/testsuite/23_containers/queue/77528.cc
! d7307f392737ad6881e13785f631ab70  libstdc++-v3/testsuite/23_containers/queue/92878_92947.cc
! 8b60161c65e3899654bb49ddd1d19f07  libstdc++-v3/testsuite/23_containers/queue/cmp_c++20.cc
! 8cd3b96553861d417150805c74c31052  libstdc++-v3/testsuite/23_containers/queue/deduction.cc
! 2f9bff8973a16436e92988d2f90448dc  libstdc++-v3/testsuite/23_containers/queue/members/7157.cc
! 95058b68eb790b51cb3064f0246b25eb  libstdc++-v3/testsuite/23_containers/queue/members/emplace_cxx17_return.cc
! 5edeb4c2717776475b1016a4de6d4e0f  libstdc++-v3/testsuite/23_containers/queue/moveable.cc
! 1a6b5efcaece393533a89d763a8279ea  libstdc++-v3/testsuite/23_containers/queue/requirements/constructible.cc
! e9d6035d153c85c7201318a3f1ccbd4c  libstdc++-v3/testsuite/23_containers/queue/requirements/explicit_instantiation/1.cc
! 5bb76183ec7898aafba7f2d2c8339a36  libstdc++-v3/testsuite/23_containers/queue/requirements/explicit_instantiation/1_c++98.cc
! b59b8daf9478266eb577875bdcce9775  libstdc++-v3/testsuite/23_containers/queue/requirements/typedefs.cc
! e12365ba3e2d698bf9b1569716e17f5d  libstdc++-v3/testsuite/23_containers/queue/requirements/uses_allocator.cc
! f14476d70aca4fcca16080ebebef6c26  libstdc++-v3/testsuite/23_containers/set/14340.cc
! 02b99290a19ad6b5c13a7fa7645bdf32  libstdc++-v3/testsuite/23_containers/set/18604.cc
! c0ff72dd22e409065c498aee9cca2491  libstdc++-v3/testsuite/23_containers/set/23781_neg.cc
! 1fd7da66740556d365f7a74f148df555  libstdc++-v3/testsuite/23_containers/set/48101-2_neg.cc
! 55d2cb50976ab5d55384a429b5503d68  libstdc++-v3/testsuite/23_containers/set/48101-3_neg.cc
! d4508bbc7506891550849cc553384aee  libstdc++-v3/testsuite/23_containers/set/48101_neg.cc
! 1db057ca7542232a02eb263c696ece96  libstdc++-v3/testsuite/23_containers/set/58764.cc
! c7e69fd568faa54cc9b643b06113e5dd  libstdc++-v3/testsuite/23_containers/set/85965.cc
! 343d95b13459e294e5aa8fcc53339a4c  libstdc++-v3/testsuite/23_containers/set/92124.cc
  4934612c2b7203e0e300739be2067260  libstdc++-v3/testsuite/23_containers/set/allocator/103501.cc
! 1e765d37aacce269c491936d07f02c51  libstdc++-v3/testsuite/23_containers/set/allocator/71964.cc
! a11fe36ab5541bcb94de7cd50f51c240  libstdc++-v3/testsuite/23_containers/set/allocator/copy.cc
! 73fd3f9d7ecd631a66fba036209376b1  libstdc++-v3/testsuite/23_containers/set/allocator/copy_assign.cc
! 7d73290ab7c8bc3b6da4754a047681b8  libstdc++-v3/testsuite/23_containers/set/allocator/default_init.cc
! 45557c555307133303ef5aad6e900b82  libstdc++-v3/testsuite/23_containers/set/allocator/init-list.cc
! a67cfed97d6aaf337309f5193ac15848  libstdc++-v3/testsuite/23_containers/set/allocator/minimal.cc
! 2c19e9ed78ddefed5c81fd422d815b3a  libstdc++-v3/testsuite/23_containers/set/allocator/move.cc
! c2e2c043aa20e60c466cb24851b4cfd4  libstdc++-v3/testsuite/23_containers/set/allocator/move_assign.cc
! 5f6c8cc0fa61d7499a93ca54e5456a2d  libstdc++-v3/testsuite/23_containers/set/allocator/move_cons.cc
! 7f8b174e19cb368af00a919c186f00c0  libstdc++-v3/testsuite/23_containers/set/allocator/noexcept.cc
! ba584bcd90dd9e63198abc8d6dca0990  libstdc++-v3/testsuite/23_containers/set/allocator/swap.cc
! edfe881419f574e15299192cc7aefe7a  libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc
! 580e90bafd87cf7a4c1e7879d040cdae  libstdc++-v3/testsuite/23_containers/set/check_construct_destroy.cc
! 218e2e9e431840d723e8fff1af982e90  libstdc++-v3/testsuite/23_containers/set/cons/61023.cc
! 6b86a6dab3d4bdd453502925dc15a652  libstdc++-v3/testsuite/23_containers/set/cons/deduction.cc
! 08f85eb73976aecc4bf307ff6077e73d  libstdc++-v3/testsuite/23_containers/set/cons/moveable.cc
! d76bb7897d4a1c4139432b5f7ddfadba  libstdc++-v3/testsuite/23_containers/set/cons/noexcept_default_construct.cc
! b5c665ee18d244d9a03a7ca48c0d31dd  libstdc++-v3/testsuite/23_containers/set/cons/noexcept_move_construct.cc
! c01c1bf51a0fb4088558596f3e9c1871  libstdc++-v3/testsuite/23_containers/set/cons/self_move.cc
! 50fb28b893a2dcee37fec8f3bcae7135  libstdc++-v3/testsuite/23_containers/set/debug/60499.cc
! 03d7e20b418b123e2aa3e30da26116e8  libstdc++-v3/testsuite/23_containers/set/debug/90102.cc
! 8110e737b7d763454b5a96599abbd604  libstdc++-v3/testsuite/23_containers/set/debug/construct1_neg.cc
! 7d938502cf90f26967f2c523196be084  libstdc++-v3/testsuite/23_containers/set/debug/construct2_neg.cc
! 95facfd7b8b95a0256203aa0e21994e7  libstdc++-v3/testsuite/23_containers/set/debug/construct3_neg.cc
! ad97b13f4206a23571b0275fe4ca29e6  libstdc++-v3/testsuite/23_containers/set/debug/construct4_neg.cc
! dee6f5eddb90c4fa5e1c06af2274f685  libstdc++-v3/testsuite/23_containers/set/debug/construct5_neg.cc
! 431c96e72ce0075aa8c2c1049d0d7b20  libstdc++-v3/testsuite/23_containers/set/debug/insert1_neg.cc
! 5b785ec45d7f7e654b34976384ef8f8e  libstdc++-v3/testsuite/23_containers/set/debug/insert2_neg.cc
! d5af232ffc05ffb85a736c9233700338  libstdc++-v3/testsuite/23_containers/set/debug/insert3_neg.cc
! e2c21c14258866be76af1265de777a10  libstdc++-v3/testsuite/23_containers/set/debug/insert4_neg.cc
! e5338f80303163f6077c23d4945848a4  libstdc++-v3/testsuite/23_containers/set/debug/invalidation/1.cc
! c690c12f5e797697b490f7703bf9254c  libstdc++-v3/testsuite/23_containers/set/debug/invalidation/2.cc
! cd19f08a642afb80becf0268e6af9f98  libstdc++-v3/testsuite/23_containers/set/debug/move_assign_neg.cc
! 2d5cb9ca33e1afcd6502856d8bde1853  libstdc++-v3/testsuite/23_containers/set/debug/move_neg.cc
! cf914f74e1887effc611d4e59d596f43  libstdc++-v3/testsuite/23_containers/set/erasure.cc
! e7183d05aaab60e1babfca3603253809  libstdc++-v3/testsuite/23_containers/set/init-list.cc
! 337f1743c04fa5a6f80b4d012abea9ac  libstdc++-v3/testsuite/23_containers/set/modifiers/16728.cc
! 2634b21875a441cf53f4bfd7cfefec5c  libstdc++-v3/testsuite/23_containers/set/modifiers/17948.cc
! 67d274e8cb6fafff84fe2140ffac712c  libstdc++-v3/testsuite/23_containers/set/modifiers/dr130.cc
! 0270af6327e8180802b954a20fa473e6  libstdc++-v3/testsuite/23_containers/set/modifiers/emplace/1.cc
! cd7eae57dc6c9c17c7008ecec10cc0bb  libstdc++-v3/testsuite/23_containers/set/modifiers/emplace/92878_92947.cc
! 2900768f70968c22171edc8a7871c5f3  libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc
! 3baa8f4682d0cc550526211a836d22e8  libstdc++-v3/testsuite/23_containers/set/modifiers/erase/abi_tag.cc
! e11cf4f88b9e3ba4b91623a202605872  libstdc++-v3/testsuite/23_containers/set/modifiers/erase/dr130-linkage-check.cc
! bc8b16cd0b60acd10eab4f8cc5f30bb9  libstdc++-v3/testsuite/23_containers/set/modifiers/extract.cc
! 60a81a3a309105bd5f52ee49fb3b91bb  libstdc++-v3/testsuite/23_containers/set/modifiers/insert/1.cc
! 3a215244934a1e7f1a3a51b615af4c42  libstdc++-v3/testsuite/23_containers/set/modifiers/insert/2.cc
! 6e3b2dcade2b7d7ef36257cb5f8004ac  libstdc++-v3/testsuite/23_containers/set/modifiers/insert/3.cc
! 995b7268ef585ab7ed20b884ede94ae1  libstdc++-v3/testsuite/23_containers/set/modifiers/insert/87194.cc
! d5d587eac41af422589aa1679d112e07  libstdc++-v3/testsuite/23_containers/set/modifiers/merge.cc
! 92553a7f13a4db7267c5080047a6e6b1  libstdc++-v3/testsuite/23_containers/set/modifiers/node_swap.cc
! db54236e23aa37f2f0afd7d1ef3e08a2  libstdc++-v3/testsuite/23_containers/set/modifiers/swap/1.cc
! b338120d6a6169a0cb929c49f3c32221  libstdc++-v3/testsuite/23_containers/set/modifiers/swap/2.cc
! 57a650409e8ea45b679aec4aa33cd2b6  libstdc++-v3/testsuite/23_containers/set/modifiers/swap/3.cc
! 46b3c00bfea4b91835e917c6d9204876  libstdc++-v3/testsuite/23_containers/set/move_comparison.cc
! 1de72c1da1a27dacf8c4d11015915a1b  libstdc++-v3/testsuite/23_containers/set/operations/1.cc
! cdf30556c1686f1a3614b6b7ec072500  libstdc++-v3/testsuite/23_containers/set/operations/2.cc
! 6bd409f7616d0bb9dda1c672f54289ad  libstdc++-v3/testsuite/23_containers/set/operations/contains.cc
! 88816574542b19065a61b617285b57ca  libstdc++-v3/testsuite/23_containers/set/operations/count.cc
! 1b0ab5da00c7375eb5091f7ece0d952b  libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
! 3dc217a9196155c460e19a48676d5cea  libstdc++-v3/testsuite/23_containers/set/operators/cmp_c++20.cc
! d4da3ff3a97575fdd7a8d1b35a66258b  libstdc++-v3/testsuite/23_containers/set/pmr_typedefs.cc
! b0fade3306b90d8593254361fd44da75  libstdc++-v3/testsuite/23_containers/set/pmr_typedefs_debug.cc
! b103b72661edb40605fd943fced92708  libstdc++-v3/testsuite/23_containers/set/range_access.cc
! 53197e9ae15489610c96ae8231f0f3f3  libstdc++-v3/testsuite/23_containers/set/requirements/citerators.cc
! eef1f83cb9ef2ee41741e42042737680  libstdc++-v3/testsuite/23_containers/set/requirements/exception/basic.cc
! 1c315820e7c23c3b1492e1b75fe174ad  libstdc++-v3/testsuite/23_containers/set/requirements/exception/generation_prohibited.cc
! 9abb9430b060b8060beb70e0a968b5d2  libstdc++-v3/testsuite/23_containers/set/requirements/exception/propagation_consistent.cc
! 7beca85241ffd15402694915c560d3c6  libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/1.cc
! 708db8608209c637a378ef4e70289f99  libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/2.cc
! 0f91616e1ca6d40fd549ad0c876f8dbc  libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/3.cc
! 3aa73e6329d2b54a1b7269b30b752659  libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/4.cc
! eaf56db87c279e3f768df376fe5cace0  libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/5.cc
! 3765709f0785561b3686e9a3af773ecf  libstdc++-v3/testsuite/23_containers/set/requirements/partial_specialization/1.cc
! 4517ed5d9a541f6f64a4e209a48eb600  libstdc++-v3/testsuite/23_containers/set/requirements/typedefs.cc
! 494f02db53360d3809acece0240215ab  libstdc++-v3/testsuite/23_containers/span/1.cc
! aee401793709be9b3b9b38c2438cfb99  libstdc++-v3/testsuite/23_containers/span/101411.cc
! 667a066b8b8fdf35b62b2bad50b9da97  libstdc++-v3/testsuite/23_containers/span/2.cc
! feb06d52fa0653f7a0d0fffdcced5349  libstdc++-v3/testsuite/23_containers/span/back_assert_neg.cc
! cbe50960a97787cd389de8002df2c312  libstdc++-v3/testsuite/23_containers/span/back_neg.cc
  06a45501dcaec8e13d6ae1e6ee40d1b7  libstdc++-v3/testsuite/23_containers/span/cons_1_assert_neg.cc
  b500468357c8536c575705ba4a6c389f  libstdc++-v3/testsuite/23_containers/span/cons_2_assert_neg.cc
! 82c681641c14a8f789f3beec1a8883ac  libstdc++-v3/testsuite/23_containers/span/contiguous_range_neg.cc
! b7de4256573a64a27c5b02ee5b869f43  libstdc++-v3/testsuite/23_containers/span/deduction.cc
! 0fde7cf66dc5e3a6d4bc3e574b638e5a  libstdc++-v3/testsuite/23_containers/span/everything.cc
! cb565eb1d5d7587501ef67aec5bd343f  libstdc++-v3/testsuite/23_containers/span/explicit.cc
! 391b494a066eb015a515c68c3c693ce1  libstdc++-v3/testsuite/23_containers/span/first_2_assert_neg.cc
! 53b80f550f6fa6a17147da61d896f076  libstdc++-v3/testsuite/23_containers/span/first_assert_neg.cc
! e9b17ff195eb6a230f1d229962312656  libstdc++-v3/testsuite/23_containers/span/first_neg.cc
! 8b71b7f5714514d4bdb848035f31a262  libstdc++-v3/testsuite/23_containers/span/front_assert_neg.cc
! 1377c4d0e407dd24c4a926e9c25d28e2  libstdc++-v3/testsuite/23_containers/span/front_neg.cc
! ccaf09e55de87220352319614e9f1f6c  libstdc++-v3/testsuite/23_containers/span/index_op_assert_neg.cc
! 0ac85da15825cb7d18684bdadd824b18  libstdc++-v3/testsuite/23_containers/span/index_op_neg.cc
! 7caf02dcece7fa65542dc59197cfb63e  libstdc++-v3/testsuite/23_containers/span/last_2_assert_neg.cc
! b464e090bd63b9d2bff8cb12e442c943  libstdc++-v3/testsuite/23_containers/span/last_assert_neg.cc
! 02073e176bca2ba8516055863ec7d539  libstdc++-v3/testsuite/23_containers/span/last_neg.cc
! 5ece8a1475e8bbe2e4482ef2e7d79d1e  libstdc++-v3/testsuite/23_containers/span/layout_compat.cc
! 65ec538949c65a560310646479ace252  libstdc++-v3/testsuite/23_containers/span/lwg3255.cc
! 55cd85d7a566e3fd6de48ef83f6ba33f  libstdc++-v3/testsuite/23_containers/span/nothrow_cons.cc
! 8f0a3427520ac24e360b31dd4a31f22d  libstdc++-v3/testsuite/23_containers/span/subspan_2_assert_neg.cc
! 79ae430aa62576c7856f803aa90c38a3  libstdc++-v3/testsuite/23_containers/span/subspan_3_assert_neg.cc
! 9f2f25fa0b29ab02918046e444270fe6  libstdc++-v3/testsuite/23_containers/span/subspan_4_assert_neg.cc
! 6200572e9a62b325b76429aef5e5a9fd  libstdc++-v3/testsuite/23_containers/span/subspan_5_assert_neg.cc
! 2c3edf40601c9fd34867e991225c4ad1  libstdc++-v3/testsuite/23_containers/span/subspan_6_assert_neg.cc
! 916389ba013bf1efecaa2b405aa0e78e  libstdc++-v3/testsuite/23_containers/span/subspan_assert_neg.cc
! bd7ef95705213ddf1c5961f3283f045f  libstdc++-v3/testsuite/23_containers/span/subspan_neg.cc
  d19a170b5f7ab02157733005cb76fef1  libstdc++-v3/testsuite/23_containers/span/trivially_copyable.cc
! 4003c941d10299054e56ae86adec8559  libstdc++-v3/testsuite/23_containers/stack/77528.cc
! 489db74312a7cf9c9b536769ad1ce432  libstdc++-v3/testsuite/23_containers/stack/92878_92947.cc
! 0e845abe548a2afb362cc268894b1b61  libstdc++-v3/testsuite/23_containers/stack/cmp_c++20.cc
! be9df2eebd046585a03d292ab32899c1  libstdc++-v3/testsuite/23_containers/stack/deduction.cc
! 9774c2256e6c649df8861f18214ee790  libstdc++-v3/testsuite/23_containers/stack/members/7158.cc
! 10c2db711716a8b5f6cf08458fd505a5  libstdc++-v3/testsuite/23_containers/stack/members/emplace_cxx17_return.cc
! 0e7cc5dcf333f42a6d26ec88154c7d15  libstdc++-v3/testsuite/23_containers/stack/requirements/constructible.cc
! 292bd4d50780d7d0a65dd7f608323d57  libstdc++-v3/testsuite/23_containers/stack/requirements/explicit_instantiation/1.cc
! cb49242d74fe5378f9b25a6d949f090d  libstdc++-v3/testsuite/23_containers/stack/requirements/explicit_instantiation/1_c++98.cc
! 664d8d3db9683f6d02336eb38c1d2f7f  libstdc++-v3/testsuite/23_containers/stack/requirements/typedefs.cc
! dd354afd06fb1c384cd7126f6c3efddc  libstdc++-v3/testsuite/23_containers/stack/requirements/uses_allocator.cc
! 9545b0c83acfb1cde909cdbe8a6fadb9  libstdc++-v3/testsuite/23_containers/unordered_map/48101-2_neg.cc
! b8561195c978939ce400fd1853989cc2  libstdc++-v3/testsuite/23_containers/unordered_map/48101-3_neg.cc
! d36ae56fb777ed81c60a4b9cb4151fa9  libstdc++-v3/testsuite/23_containers/unordered_map/48101_neg.cc
! 2bfd46c35d7a842ac110423503acf56f  libstdc++-v3/testsuite/23_containers/unordered_map/55043.cc
! e404c6c29d86d00f6d12070e7de7b6c6  libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc
! e2c95422a77bac67fd24b5d4ea6c654b  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/copy.cc
! 04a1f33f59068eb1e9fbd622204dbc47  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/copy_assign.cc
! ecc802145482ce99db8c7f1562035f9d  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/default_init.cc
! 65280d7765625e94d70075f1efd74578  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/minimal.cc
! 8fb3743bdb6b9df9f6de5c8cb2e6c7a5  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/move.cc
! b34b514ea98b772fff11e0802fc7695f  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/move_assign.cc
! 3297ffc494d1ac7e651dd5fba6aec7ea  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/noexcept.cc
! e210463e69073327c4d2538d97b970ac  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/swap.cc
! 1c5c20f0082fe642a2ca766e27d9af4f  libstdc++-v3/testsuite/23_containers/unordered_map/cons/56112.cc
! 3c848cf85f1a5a153262c1f2937d7b58  libstdc++-v3/testsuite/23_containers/unordered_map/cons/66055.cc
! bb06d5e923e3d5d8bd84b4bfcb798aa2  libstdc++-v3/testsuite/23_containers/unordered_map/cons/81891.cc
! b67672059716a3393bb98f087a8b40ee  libstdc++-v3/testsuite/23_containers/unordered_map/cons/deduction.cc
  85f9f0cfc8a07ac716292470ac0bda11  libstdc++-v3/testsuite/23_containers/unordered_map/cons/default.cc
! 186eb09f0feeb412dd49047f612454d2  libstdc++-v3/testsuite/23_containers/unordered_map/cons/moveable.cc
! 4104335ace0c1004c988ee3252c86310  libstdc++-v3/testsuite/23_containers/unordered_map/cons/noexcept_default_construct.cc
! 729790d0d118599062d8f37ec85642af  libstdc++-v3/testsuite/23_containers/unordered_map/cons/noexcept_move_construct.cc
! 2ae8d48d09db6580c04f5ad5ebe2b6b6  libstdc++-v3/testsuite/23_containers/unordered_map/debug/60499.cc
! 025c569bd2b6548fce897d61f09e28e2  libstdc++-v3/testsuite/23_containers/unordered_map/debug/90102.cc
! 3acc75c89574fd3fe4e583896ac661c2  libstdc++-v3/testsuite/23_containers/unordered_map/debug/98466.cc
! f2b4742b4623aaf8fe63c74c84fec9f7  libstdc++-v3/testsuite/23_containers/unordered_map/debug/begin1_neg.cc
! 82ce1a2f61c79950ae64ee0477c439ed  libstdc++-v3/testsuite/23_containers/unordered_map/debug/begin2_neg.cc
! 110fc4562a5cf1814d9f48fa078d4830  libstdc++-v3/testsuite/23_containers/unordered_map/debug/bucket_size_neg.cc
! a60a1b4fe6093860a2a6e1e29c1c5158  libstdc++-v3/testsuite/23_containers/unordered_map/debug/cbegin_neg.cc
! c5fd03682d14c78d774240e8082309d4  libstdc++-v3/testsuite/23_containers/unordered_map/debug/cend_neg.cc
! d7c36f878d491568a2a3bdbb01673ff4  libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct1_neg.cc
! 6ab9e0d8c6f5eaa6f0d8043882f13b19  libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct2_neg.cc
! cc9fd40f47a5188ad045ccf6048eea54  libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct3_neg.cc
! 6ac2ae5c78e62fce7f8f1e5bed7bb6f2  libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct4_neg.cc
! 7cfbacb5bb26c433ee602eba32ff8567  libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct5_neg.cc
! 4b0cf5c36e50ed7d51ce836e11b253da  libstdc++-v3/testsuite/23_containers/unordered_map/debug/end1_neg.cc
! d92c7c04d88e525e1f58807414b5f92a  libstdc++-v3/testsuite/23_containers/unordered_map/debug/end2_neg.cc
! 970983f1b858692899ac86b2b3c81351  libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert1_neg.cc
! 2d0cac0fce3a1cd2c6a3adefb2c857cd  libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert2_neg.cc
! 8cf62055e3364decfd33af2f06318dae  libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert3_neg.cc
! 93c39da2a120722626981ec720b68e9d  libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert4_neg.cc
! 2da91295f75da5795d453cb31df42263  libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_compare_neg.cc
! 6dd2fa0dc8f6e58e14e195c509cc3eb5  libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_range_neg.cc
! 11f454d367c22213caa623c4d5325953  libstdc++-v3/testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc
! ddd6c05854efec8860d07e7b8665186d  libstdc++-v3/testsuite/23_containers/unordered_map/debug/move_assign_neg.cc
! 45aa91a3ecccde5cb0578523ade390b2  libstdc++-v3/testsuite/23_containers/unordered_map/debug/move_neg.cc
! f9cbb251430abfa3a1d72a93ea49fa06  libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_erased_local_iterator_neg.cc
! 497437401b3c43dc9082757d61b053eb  libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_invalid_iterator_neg.cc
! 0084ebb667078ec99d5b44eef6b967cc  libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_invalid_local_iterator_neg.cc
! 99f8165565f4a0b9de53bc9bdd4dc2e4  libstdc++-v3/testsuite/23_containers/unordered_map/dr761.cc
! 0358e172eec13fd578e6300c3c3917db  libstdc++-v3/testsuite/23_containers/unordered_map/dup_types.cc
! 907046bcfb9a72f1ee410e5bca434d47  libstdc++-v3/testsuite/23_containers/unordered_map/erase/1.cc
! e224d8333657932d47f7d76373eae737  libstdc++-v3/testsuite/23_containers/unordered_map/erase/24061-map.cc
! 2aa1ed0e355002ae9645e1aa741b132e  libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc
! 30e82beb3c6534317649f154cafebfb8  libstdc++-v3/testsuite/23_containers/unordered_map/erase/54276.cc
! a7f515a7ef00d0167d7b5b4bd1c4c610  libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc
! fd132d14ed59f38217c3255ffa11c35d  libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc
! 7b2df247ad156025a0015d63d803932f  libstdc++-v3/testsuite/23_containers/unordered_map/hash_policy/dr1189.cc
! 2044585f7bec2124c133976a7081ee51  libstdc++-v3/testsuite/23_containers/unordered_map/init-list.cc
! 099e127c1ad8c51aec72c5b75c0a643e  libstdc++-v3/testsuite/23_containers/unordered_map/insert/24061-map.cc
! 0f2f8ce91755af8b2ab7615aeb443c49  libstdc++-v3/testsuite/23_containers/unordered_map/insert/57619.cc
! abd676d2b9cc3adab87c3579f47a5b02  libstdc++-v3/testsuite/23_containers/unordered_map/insert/83709.cc
! 66a8e01b242e7844121c491d56de662e  libstdc++-v3/testsuite/23_containers/unordered_map/insert/array_syntax.cc
! e84b6afe22a624a4e0b74cd13f56c183  libstdc++-v3/testsuite/23_containers/unordered_map/insert/array_syntax_move.cc
! 8f5333ff387bed992d6d5c87204e8df2  libstdc++-v3/testsuite/23_containers/unordered_map/insert/dr2354.cc
! 0bb02232ee546044d92359303aa71ea2  libstdc++-v3/testsuite/23_containers/unordered_map/insert/map_range.cc
! 7e1ab0e068a8694be16cbffc0546be86  libstdc++-v3/testsuite/23_containers/unordered_map/insert/map_single.cc
! cfba2858d238ab31856d26660bd9b899  libstdc++-v3/testsuite/23_containers/unordered_map/insert/map_single_move-1.cc
! 83dbab85dda286376255b364c3909825  libstdc++-v3/testsuite/23_containers/unordered_map/insert/map_single_move-2.cc
! 178b64a3461b13835d647227d96822d4  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/61667.cc
! 8bf69845649ab50ae655b025b389db18  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/78595.cc
! cb90de7a4ebd751293a6dc72758ba2a7  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/92878_92947.cc
! aad182a7742254d80acf4d12d37c0ca4  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/emplace.cc
! 77fd0a322ff231b0bf633fb1b7b77abe  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/extract.cc
! bc573833b4c56014881767109b01c03c  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/insert_or_assign.cc
! 47680e3fd4b2375e2cb78bcac7c21900  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/merge.cc
! d7e9b0d7eb7f2c6ee4e411cc4e464743  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/move_assign.cc
! c17e4de260cd092f864e0801d51169e3  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc
! f72a8af25f497a4d362ac0192815d1fb  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/try_emplace.cc
! 2a052947e563d8b689012622bd308f8e  libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc
! 4c33fc0ffc5c001e415d84955fae5700  libstdc++-v3/testsuite/23_containers/unordered_map/operations/1.cc
! 822c8712dc03ef7a9d6752494cf0e402  libstdc++-v3/testsuite/23_containers/unordered_map/operations/contains.cc
! c97458d3a0f3e78df79ad7aa68a7040a  libstdc++-v3/testsuite/23_containers/unordered_map/operations/count.cc
! d57910bde07151a215121df720540168  libstdc++-v3/testsuite/23_containers/unordered_map/operators/1.cc
! 79f498889ca3b12c450efaa1b679bd1c  libstdc++-v3/testsuite/23_containers/unordered_map/operators/2.cc
! e439daebb0fb2368e464579569f4f603  libstdc++-v3/testsuite/23_containers/unordered_map/pmr_typedefs.cc
! 0aa78a1d888d1e31753acb26041e5def  libstdc++-v3/testsuite/23_containers/unordered_map/pmr_typedefs_debug.cc
  45f46b4cea5268d1bf8f903d79e3c350  libstdc++-v3/testsuite/23_containers/unordered_map/profile/hash_map.cc
  6bcaac31a8700749f12b90fa8913629b  libstdc++-v3/testsuite/23_containers/unordered_map/profile/unordered.cc
! 1aaacfa87133d783070ffb87ed75f6f6  libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc
! c7d9db0c0dc430aae2737cf246759bec  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc
! a79f8ec8ad6841febe6c5048a2897c3b  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc
! 8e8aa68011a3c573e158dda9e47056f6  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53339.cc
! ef366ef6c620f1ccab2a1ef6a3573439  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/citerators.cc
! dac8b2ee47cd8695131946d5ff6fb340  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/cliterators.cc
! 08ff09227b501426eff4edaa600f88cd  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/debug_container.cc
! 7e794532ab74a72d9e2a0db82cd21eef  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/debug_mode.cc
! a2bd085a273645550fabecdacc3e64cd  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/exception/basic.cc
! 5b1568578cb0c8a4cd8707c3ada62bdb  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/exception/generation_prohibited.cc
! a06d68aedd2401e57785c8c940cc3149  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/exception/propagation_consistent.cc
! fec3e6355240f84a155ed1724f414e1a  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/1.cc
! caa4114ef35daf8e9211fb069c8dbd92  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/2.cc
! 91a08c85ff334b949d025bd81157c41d  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/3.cc
! 64997bb85a60aa224560f6eda98a95dd  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/4.cc
! d9e9abeedd37c9817e1f85fddf5cf7c7  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/5.cc
! 4bfb39462c563644a9d656bbc05cda92  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/typedefs.cc
! 1ca99b26d994b0ce15f1f67a311fc25d  libstdc++-v3/testsuite/23_containers/unordered_multimap/48101-2_neg.cc
! b37215820564f374dc7c95310867f75c  libstdc++-v3/testsuite/23_containers/unordered_multimap/48101-3_neg.cc
! bf46653624427be070500de808a7149b  libstdc++-v3/testsuite/23_containers/unordered_multimap/48101_neg.cc
! 1edb74c10ff5e0f9867a6d8968d11f0d  libstdc++-v3/testsuite/23_containers/unordered_multimap/55043.cc
! 4b28941edd2857fe2c7e42ac04d99207  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/copy.cc
! 4f1a73831771fee02527b4136a9e87b3  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/copy_assign.cc
! 394e5dbdab175819fee604a517cd64da  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/minimal.cc
! 7e023b579f604c5aee2113dbd9658c84  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/move.cc
! 64ad1c128408a4edc9fa841ce8930ba7  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/move_assign.cc
! 66c0b383afcbc9f988e0fb895c3b036c  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/noexcept.cc
! 0c014247a54f91684130e8180157d7a1  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/swap.cc
! bf443c1b51a6c411bb0b50e16c9da609  libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/66055.cc
! a97d81d0e9072928468649729f9b98cb  libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/deduction.cc
! 82955a364e1aa7a59656c62222b9cfa2  libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/moveable.cc
! aa129fdc07e0df788c539d3c93122296  libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/noexcept_default_construct.cc
! 66d7f3c2e5577cd7f28c4204c90409b3  libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/noexcept_move_construct.cc
! 80228e618881cab7b336e370a02d314c  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/60499.cc
! 90bcb8988ebfe4fac285b1cd27142572  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/90102.cc
! 73964ad6e7a51fc2c8b263233a37ffbb  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/begin1_neg.cc
! 82ce1a2f61c79950ae64ee0477c439ed  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/begin2_neg.cc
! 110fc4562a5cf1814d9f48fa078d4830  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/bucket_size_neg.cc
! a60a1b4fe6093860a2a6e1e29c1c5158  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cbegin_neg.cc
! c5fd03682d14c78d774240e8082309d4  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cend_neg.cc
! 749d7680be4504347711f0c2eb85da05  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct1_neg.cc
! f6cab7dc35ab980f40f561c0d51fa7e4  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct2_neg.cc
! 93ea5efb4ce9f8a3554a897e25041470  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct3_neg.cc
! 223f29f5c928bbdfa3a5f8f11c828580  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct4_neg.cc
! 63ab1d4611278001eb48df1f656f5e1f  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct5_neg.cc
! 4b0cf5c36e50ed7d51ce836e11b253da  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end1_neg.cc
! d92c7c04d88e525e1f58807414b5f92a  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end2_neg.cc
! 1e4570d7e382561ef5e0c1dae7274df6  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert1_neg.cc
! eadb44738d46d8ff13affa63c64f6b0e  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert2_neg.cc
! 5dc9a259c7f5422e4ee87b16ee87d659  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert3_neg.cc
! ddf0d22ddb8b64faf758832a1a4d1f93  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert4_neg.cc
! ce869d27de0e75b8d5608938539ee006  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_compare_neg.cc
! 964d425b0984d86f0afdedc43c4a94e4  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_range_neg.cc
! 0ee44b03e999d0527475ca89e3275d37  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/max_load_factor_neg.cc
! 0ed18bc7716a20d789a0ccc98510d6d7  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/move_assign_neg.cc
! f74c25e25b92aedcba0c1b12362df28e  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/move_neg.cc
! f64329c2be0a96a3d71e71e2dcf02429  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_erased_local_iterator_neg.cc
! 4c99a82a3e57e05ff90a0736436aba4b  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_invalid_iterator_neg.cc
! f84793e1a0963a55579be21e8b74e26b  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_invalid_local_iterator_neg.cc
! ceaa3abccb07b85a4c8975c77ab6a44b  libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/1.cc
! f06d8be977a91e9dc5960f728c10ef72  libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/2.cc
! 55d1b9c01bcf0a9798504ef53cff6f9e  libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/24061-multimap.cc
! 3dadb53c0347f21434c43efef96e24ef  libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc
! 144aafec7b64db1489cd0686fde6b877  libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51845-multimap.cc
! 28c90cb6c47b1f376efd1aec4deca0aa  libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/54276.cc
! 09e1d7bf6a3f72cf254fba7154c19470  libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc
! 64e071eedccae41e2f302cb9f0140de7  libstdc++-v3/testsuite/23_containers/unordered_multimap/hash_policy/dr1189.cc
! bafbab37dae850462ac0c192f897544e  libstdc++-v3/testsuite/23_containers/unordered_multimap/init-list.cc
! 586f4e86c966dda6cb68546c152de795  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/24061-multimap.cc
! 491ec2d8e9836a82be2ca92d99ad529a  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/51866.cc
! 702d797b5f92aad6a33bc58cc2d8bf5d  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/52476.cc
! f683f6602d9ed8f53c91fc2111ca6777  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/53115.cc
! 77cda4823a627d81ff417c2b79de5005  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/55028-debug.cc
! 08c6eceb3649a02459a986557dd80162  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/57619.cc
! 3a196d8e028c324faf2717d7d97360b3  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/dr2354.cc
! 8c4d1aa98c3b17b8448c86c97394611e  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/hint.cc
! 41463ed441512d80db2901558471d97b  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/multimap_range.cc
! 7a7814b91b31f16965258d3f48d2c5f0  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/multimap_single.cc
! c2a1f76a29fde0634454e45d44d61552  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/multimap_single_move-1.cc
! 768593778f4605a24cb2d75dc5e23967  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/multimap_single_move-2.cc
! f3c37f7b11895b079af128c6ba6d29bb  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/78595.cc
! 9d4ba1ff9fae10e066ee0922481ec175  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/92878_92947.cc
! bb8801fbe3114b9485c2b58d9489cea0  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/emplace.cc
! 47ec36f03727a7e5b131a023c2e51839  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/extract.cc
! d70491004ad1f54c1bb261114774045e  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/merge.cc
! 63b3903591ef51d3680d3d2a52b5499a  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/reserve.cc
! 654e86ce7f19ea615a96b83617a60e5a  libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc
! d2ab1793b19b08bcfcb5763780685cfe  libstdc++-v3/testsuite/23_containers/unordered_multimap/operations/1.cc
! 4ae58350cb8529e94c918d47c1835954  libstdc++-v3/testsuite/23_containers/unordered_multimap/operations/contains.cc
! f75ebb0458951d649d86eaa84d600b0a  libstdc++-v3/testsuite/23_containers/unordered_multimap/operations/count.cc
! 4b6a9e1e914dc4daa22e238a15160a51  libstdc++-v3/testsuite/23_containers/unordered_multimap/operators/1.cc
! 719f2a47323dc26429c753eb42056d3b  libstdc++-v3/testsuite/23_containers/unordered_multimap/operators/2.cc
! 0a8ca1d5df468b947d1eed14d9eaa04d  libstdc++-v3/testsuite/23_containers/unordered_multimap/pmr_typedefs.cc
! 4f6122008564622ff145622988fc1a27  libstdc++-v3/testsuite/23_containers/unordered_multimap/pmr_typedefs_debug.cc
! 460184fe41d7b0640a0fc92bc6113107  libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc
! cf13650ca9d74844292174e4cbf6656f  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/53339.cc
! 0935770285ba876c696d26d03bc353db  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/citerators.cc
! 9c930d9c318d34163b0e218fc09c2166  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/cliterators.cc
! e3a27189bb12e2de1855db164d775503  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/debug.cc
! 17c206b22f2a5292ebb83baa0c446812  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/exception/basic.cc
! 228045e4ff427037f61f59f8757c1c85  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/exception/generation_prohibited.cc
! 5777a8e88172e6d7fb5718d76783622f  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/exception/propagation_consistent.cc
! e1390492325b876b355a1db3b0604924  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/1.cc
! fb23d5de87100ca5ad84ea7596adced4  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/2.cc
! 880c16813372aebd4427526804a24e51  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/3.cc
! 6165d685cacb97fa98f5130207e1bf66  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/4.cc
! 4e91b24a20b25cad6c6b91eb192caba1  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/5.cc
! dd6656cecc7941e9ab030816d181cb8c  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/typedefs.cc
! 340e92c3553eb7de11481f3f6e726a1d  libstdc++-v3/testsuite/23_containers/unordered_multiset/48101-2_neg.cc
! 3c6ea6a9c961ba41ffaf759ae7387de3  libstdc++-v3/testsuite/23_containers/unordered_multiset/48101-3_neg.cc
! 8234a8997922fc9a540184a8fbf96119  libstdc++-v3/testsuite/23_containers/unordered_multiset/48101_neg.cc
! 30649898f3435ba20ab67fcbab1cdbda  libstdc++-v3/testsuite/23_containers/unordered_multiset/55043.cc
! 32109ee74582f61e3347c51838eacdcf  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/copy.cc
! c052a423a5d46825a136f512e1cb6905  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/copy_assign.cc
! c364953606bdee7da4ec04853db6c82e  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/minimal.cc
! 9adc100959ed675240c0e79ddb89d86a  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/move.cc
! 5d3047a8a10af7b71acc7d83746aa086  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/move_assign.cc
! 9e8a3d27a9d4295a9dd0493d22966b71  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/noexcept.cc
! 6878fb73ac1058694369e8fc098ce689  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/swap.cc
! 4514faeeda29a9797671dc9ea2b58193  libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/66055.cc
! 02bd43203d61b881e3ba7277fd071b3e  libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/copy.cc
! 0c66b0145002c37fd2381a140c861dbb  libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/deduction.cc
! 37e7e2c08fb018d52648d9413859b141  libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/moveable.cc
! 47604493769a708694e580ef49d5cbb1  libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/noexcept_default_construct.cc
! 554c7b97ade2633dfa5e7c64a914d9f1  libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/noexcept_move_construct.cc
! b11a5fc9778b7c6bee84254c2bce1268  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/60499.cc
! 136b5678b06b2070f08cfacb8078e698  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/90102.cc
! 4eaa52d512eb51fa996a6326188f9aba  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/begin1_neg.cc
! 217e9adc5a81b83205fafd79fe3f38d2  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/begin2_neg.cc
! 53ff27d7af216b2fa89fd6227c382cbf  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/bucket_size_neg.cc
! 7127c1f24e6aec25574c7e598919c7a8  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/cbegin_neg.cc
! bf9d530cfbb57d53c0ae785dba149743  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/cend_neg.cc
! 37ccacaaf6658637ac655826ab7a09bb  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct1_neg.cc
! a7176ef0c481bc1c3321fbf9db962cc7  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct2_neg.cc
! 816ef1fc6ee126a9332331cda2e94ef8  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct3_neg.cc
! 4aef87f1b12e684889ca827382065f4e  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct4_neg.cc
! 024126666de94ea9939e3d0996c030bc  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct5_neg.cc
! 6581fceaa96e610464b37f86ec71821e  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/end1_neg.cc
! d54aeee4a97ec0d2bd9adb278bed93e3  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/end2_neg.cc
! a4ba508f319166723dc84ad4bb91887e  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert1_neg.cc
! fba60722daa5731f454c8bb12f56fa3c  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert2_neg.cc
! dfe709d5f4b2d02e2045414245abab70  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert3_neg.cc
! 6e47d36741100384cc524b71ba60fc9e  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert4_neg.cc
! 5840a52c39f9c2a14a4f74f9a04f1407  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_compare_neg.cc
! 677b3d8c615cae43687d66f61bd92cc5  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_range_neg.cc
! 79ea032af85c1c47cecd00d9f5727c30  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/max_load_factor_neg.cc
! a8b3c730ae73c253dc119870878f7e04  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/move_assign_neg.cc
! a801dc0441676dd2cd6b98c6700985e3  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/move_neg.cc
! 5a2316cb87d1608e60abfff6f1a3a78b  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_erased_local_iterator_neg.cc
! c7f096ef349c5266a707ffb5e20d73c0  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_invalid_iterator_neg.cc
! d81ea68a91930d7f94cf1b05ba59fa87  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_invalid_local_iterator_neg.cc
! 764753230510612b98daa144aeb4a7a4  libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/1.cc
! 030fc6d0505ad19d9782ff7a80c1a086  libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/2.cc
! 9706dcbb6b2290b863c2a984492b36fb  libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/24061-multiset.cc
! fc5fb9c0b3535fc1d94d181cbed0daa9  libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc
! d8cdb1de567b65e973012e30de887965  libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc
! 4825a617e790cee42373f0a39cf92894  libstdc++-v3/testsuite/23_containers/unordered_multiset/hash_policy/dr1189.cc
! a416f9020594ecd7d4034eb1aee43c44  libstdc++-v3/testsuite/23_containers/unordered_multiset/init-list.cc
! f825633a2b19de676693d228337b4aae  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/24061-multiset.cc
! cdd76bde17781ae347bed08c0757ea68  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/51866.cc
! 4a2df5267d3a067133bb34f955ba5b04  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/52476.cc
! 9b03bf7746843fe0da00c1d47240a6c8  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/53115.cc
! a391c6711d5a25e7aa133ccb1e4fcc6a  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/hash_policy.cc
! 2537293881e8cc49cb4a3ff428e1db74  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_range.cc
! 666d70c227528357e013bcdf7588657c  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single.cc
! 4ff0eb9e76e9c9c8f229c2529f983cdd  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single_move.cc
! c18c77ba1ace5ae23a8cfa8253228f14  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/92878_92947.cc
! 9e5e202c22d69db839959e7fb0677b73  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/emplace.cc
! e69cb7b7690f6e33fd730bc6b1e6aad5  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/extract.cc
! 8a493926c014d351c5d7ab7f24b9b609  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/merge.cc
! 343f829974a4e89e74832fe863582c05  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/reserve.cc
! 504c3d27067ddc9682051620c0c17ab7  libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc
! 5a231a3b1937cb77c62bc16ea22ea1e7  libstdc++-v3/testsuite/23_containers/unordered_multiset/operations/1.cc
! b75edae6f5b0c32bd5c610a2b756e5fc  libstdc++-v3/testsuite/23_containers/unordered_multiset/operations/contains.cc
! a6dcee028ce66c6dce1d16c8caf7ec69  libstdc++-v3/testsuite/23_containers/unordered_multiset/operations/count.cc
! bf134497e8d88c46aaac71ea26c80cd5  libstdc++-v3/testsuite/23_containers/unordered_multiset/operators/1.cc
! 86e5b6e88c7d83ef44549ebba7a608cc  libstdc++-v3/testsuite/23_containers/unordered_multiset/pmr_typedefs.cc
! f1e52cb696877d166d5400ab91dc652d  libstdc++-v3/testsuite/23_containers/unordered_multiset/pmr_typedefs_debug.cc
! 21730d02bdc6ca82c8489af39c456908  libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc
! 26dbe25325fa6ac4b85fd1dade8dc904  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/citerators.cc
! fcdb5d9acc1abb3cef7628fe18b1e081  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/cliterators.cc
! 4ec8cb31b546e97e6ff66bdbbdfd05cd  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/debug.cc
! 7e357a262ad103019c755efe33b5dd99  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/exception/basic.cc
! de996b2965ca201ffd425bc7c0a4edcc  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/exception/generation_prohibited.cc
! 057d8b6edfb3d0f1ef8dbc315f879216  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/exception/propagation_consistent.cc
! cabebd21f57b134c03235e46bb0ebc8f  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/1.cc
! 827129168e04f59f3acfdb4119b544e0  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/2.cc
! e4afa025ed499400fad5ddc50c119919  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/3.cc
! d5b1b8c8c288ab3f4cb02cf718243507  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/4.cc
! 5ef51322c5c908f6393d3231f1216416  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/5.cc
! 73b3c2a90e52e5ef08ab00c22b3e7370  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/typedefs.cc
! 897abd60a087d78ccc4af3fc25ed88bd  libstdc++-v3/testsuite/23_containers/unordered_set/48101-2_neg.cc
! 8473d2d7a02602b06a5ae26053fa17c1  libstdc++-v3/testsuite/23_containers/unordered_set/48101-3_neg.cc
! 850c1f5396abb30374a8842d2227f61a  libstdc++-v3/testsuite/23_containers/unordered_set/48101_neg.cc
! e2abbcffa7ee67d6fec32d6ebc057e79  libstdc++-v3/testsuite/23_containers/unordered_set/55043.cc
! 978cad34e053975a31370e0b08e98682  libstdc++-v3/testsuite/23_containers/unordered_set/56267-2.cc
! 653053026fc79d70ffc42476fff302f3  libstdc++-v3/testsuite/23_containers/unordered_set/56267.cc
! 83ad305b31bfd994db00331b90de829e  libstdc++-v3/testsuite/23_containers/unordered_set/56278.cc
! 78905d8a6cfb40be793d1687295d4e59  libstdc++-v3/testsuite/23_containers/unordered_set/61143.cc
! 7fa697c6e4d4cf5fffe80abd43a79c97  libstdc++-v3/testsuite/23_containers/unordered_set/63456.cc
! d56d6a3b11674c5ef5e08147bfad9f5b  libstdc++-v3/testsuite/23_containers/unordered_set/85965.cc
! 074652bfafd367dcf66ff4eb41f64fe7  libstdc++-v3/testsuite/23_containers/unordered_set/92124.cc
! 9ecb77bba4dd535fa5bf7951d935bdf8  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/copy.cc
! f42b7981043b0f2be2678785df364814  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/copy_assign.cc
! a00c1b1db86d071058816bba53eae88d  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/default_init.cc
! fd123093f7e5013ec2a5baefead534fe  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc
! e0d2a365a09b5636f6135bef123aca67  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/minimal.cc
! a0e7d6da59994b0dbb4dc0688ac4a143  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/move.cc
! b5832b3ba451d220de70edb42b963613  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/move_assign.cc
! f4244378734778d9b31dd6da27cf8d7f  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/noexcept.cc
! d7ecdf15bd51a2f6297bb4452ba0528d  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/swap.cc
! a65ba3d8e27655ddd0bc328ab73ada4c  libstdc++-v3/testsuite/23_containers/unordered_set/buckets/swap.cc
! 8664c586819b39f71f7c9cf87fdf8074  libstdc++-v3/testsuite/23_containers/unordered_set/cons/66055.cc
! 9d752eefc22b63ac38738f296f675279  libstdc++-v3/testsuite/23_containers/unordered_set/cons/99985.cc
! dbfc14e923792da5010ad03c34f624b0  libstdc++-v3/testsuite/23_containers/unordered_set/cons/bucket_hint.cc
! f9d6647c9d930a0dce774d25be921e17  libstdc++-v3/testsuite/23_containers/unordered_set/cons/deduction.cc
  247af40f0de6e07e87bdde64812f8659  libstdc++-v3/testsuite/23_containers/unordered_set/cons/default.cc
! b975a36e94bc20e855f45e5622c7e5a2  libstdc++-v3/testsuite/23_containers/unordered_set/cons/moveable.cc
! 9e6f87cb9a4da17b72ed4ff59c4ec009  libstdc++-v3/testsuite/23_containers/unordered_set/cons/noexcept_default_construct.cc
! 0e0a91bf1832ab1063c7388fdeec7fca  libstdc++-v3/testsuite/23_containers/unordered_set/cons/noexcept_move_construct.cc
! 4f845f7452843ba005d6c429af4220d6  libstdc++-v3/testsuite/23_containers/unordered_set/cons/self_move.cc
! a7d6f1c2e0e5e971edf626d099acb8b3  libstdc++-v3/testsuite/23_containers/unordered_set/debug/60499.cc
! 47f5f525e5b71e57b016c95d8c69f358  libstdc++-v3/testsuite/23_containers/unordered_set/debug/89608_neg.cc
! f97ccafb13fa977bb9788625931814f2  libstdc++-v3/testsuite/23_containers/unordered_set/debug/90102.cc
! 93098159bd75a6655eafcc0f3882ef5e  libstdc++-v3/testsuite/23_containers/unordered_set/debug/begin1_neg.cc
! 8085ae41b15a468fcc1416d815e767a9  libstdc++-v3/testsuite/23_containers/unordered_set/debug/begin2_neg.cc
! a5389b0c3f846534d67db11191db0257  libstdc++-v3/testsuite/23_containers/unordered_set/debug/bucket_size_neg.cc
! 98bbd0b94107ece4b5cdf9bea3f1adbc  libstdc++-v3/testsuite/23_containers/unordered_set/debug/cbegin_neg.cc
! b5726a5c367503ff6f2e0a1aec3d5acb  libstdc++-v3/testsuite/23_containers/unordered_set/debug/cend_neg.cc
! c3ddb6dc2ec9df65766476d037b2078d  libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct1_neg.cc
! 18102c962837ecb63eadbd977ff568b5  libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct2_neg.cc
! afe93b6777fe0f699a655e9aa76adb94  libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct3_neg.cc
! 52d36be5260d4026efd79ec5f6cca04c  libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct4_neg.cc
! fef21e0e5355b6c87e4c902448ea73c7  libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct5_neg.cc
! 493c5507fb7c332e99e562823a92769d  libstdc++-v3/testsuite/23_containers/unordered_set/debug/debug_functions.cc
! e76b270ec5bb52ee64e45ac7fd0ce9e9  libstdc++-v3/testsuite/23_containers/unordered_set/debug/end1_neg.cc
! d086b998333d864189b4375b7ab7b452  libstdc++-v3/testsuite/23_containers/unordered_set/debug/end2_neg.cc
! b3a1b916c15d0130c12ee66805f0d979  libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert1_neg.cc
! d9bf51d2ba0dbfc1f046f3da04655645  libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert2_neg.cc
! 365a485839ae125f94c8ab002bf5a1a1  libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert3_neg.cc
! c7f11eb9f82076dc9ad187074858894f  libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert4_neg.cc
! 74c20479e6807b08c8b146b32ea553f9  libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_compare_neg.cc
! e0cfa9bbcccc6a720e264fa33fe4a76e  libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_range_neg.cc
! 985fcca97a8e0d5467a21517058b762b  libstdc++-v3/testsuite/23_containers/unordered_set/debug/max_load_factor_neg.cc
! c9c7542a12eda902158ab8777c625e3c  libstdc++-v3/testsuite/23_containers/unordered_set/debug/move_assign_neg.cc
! c3d65c11e9b05927a4125df474775cdd  libstdc++-v3/testsuite/23_containers/unordered_set/debug/move_neg.cc
! 0972e4a001f234c0ca817cbc7bb67b4e  libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_erased_local_iterator_neg.cc
! 817370a746daa0bf6653242bf3613f97  libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_invalid_iterator_neg.cc
! 8770cc40a61b09ccfd1a714bf0245c79  libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_invalid_local_iterator_neg.cc
! 6e5ff9b3fbce8bf1757551a6030d2edb  libstdc++-v3/testsuite/23_containers/unordered_set/erase/1.cc
! 7397d859125f6b481fcc7781d79101f9  libstdc++-v3/testsuite/23_containers/unordered_set/erase/24061-set.cc
! 4063b22a46ca4fc6d7b4f1a7a3c30574  libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc
! b37ded9ee23c9b7b64a372e2c1551b93  libstdc++-v3/testsuite/23_containers/unordered_set/erasure.cc
! b4dfa4b72b2d6ef2d15c1378d9d36315  libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc
! 2769995c8aa3d2ea93549f2b1cfa7705  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/26132.cc
! 4c7f71f250a3e4ffe410ced10ed25b6f  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/71181.cc
! 09c35d67d24040058ec66ed2312f0712  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/dr1189.cc
! 29089d2693113c480cc483f34fff2a41  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/load_factor.cc
! 9cfacc58a473c09f2e47fb21e62f48e4  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/power2_rehash.cc
! 60f8b5068257cd7c12a149dc54f50063  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/prime_rehash.cc
! 6ecdc0028bd658c041ff08b27d68ed22  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/rehash.cc
! 624fe5c75d5d6d7e0ce6cef7180e4896  libstdc++-v3/testsuite/23_containers/unordered_set/init-list.cc
! 7acb45dfc35e318927f3da0d418c57f8  libstdc++-v3/testsuite/23_containers/unordered_set/insert/24061-set.cc
! 815790fc3e7c28a83b0b10dae9d2051c  libstdc++-v3/testsuite/23_containers/unordered_set/insert/83709.cc
! 15a7951457ac4d9625377fba511ef54a  libstdc++-v3/testsuite/23_containers/unordered_set/insert/hash_policy.cc
! 22425856d79e5bbc0cd54be56085c9d9  libstdc++-v3/testsuite/23_containers/unordered_set/insert/move_range.cc
! f9b36f93158a45b95505cc0b8d1214ca  libstdc++-v3/testsuite/23_containers/unordered_set/insert/set_range.cc
! 6587ebec9298d5f01a2d661a90f3c01f  libstdc++-v3/testsuite/23_containers/unordered_set/insert/set_single.cc
! a70fac297764bf83bc8bc857c756815d  libstdc++-v3/testsuite/23_containers/unordered_set/insert/set_single_move.cc
! 43438f8e1c5808890b21b18d32e3b2d2  libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc
! d7e3d76f83a4c549010b84ef2e211c1b  libstdc++-v3/testsuite/23_containers/unordered_set/max_load_factor/robustness.cc
! 5515806c64ef5269e6c55c5b517376ac  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/92878_92947.cc
! 69d96fa11ffafa089d5f551b31c705c8  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/emplace.cc
! 198a8e614d70827f189f8caf13975072  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/extract.cc
! bee72317d52ca6b2f334e8b574904d3a  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/insert.cc
! 0b77368bc6f6644e1c3fd0361cbb76b5  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/merge.cc
! ae2bd75da19a4298d3dd2e5ea87704c3  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc
! 9fb95a80ddadee28f00b8fe191f1920f  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/swap.cc
! 955cb43adac4b795a95901668015803b  libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc
! 5a62731f925d4d5387e056a0da80a64e  libstdc++-v3/testsuite/23_containers/unordered_set/operations/1.cc
! 914f46c915405883fe67950f431ec660  libstdc++-v3/testsuite/23_containers/unordered_set/operations/contains.cc
! fb1705d88e7e249367ba232fd54934eb  libstdc++-v3/testsuite/23_containers/unordered_set/operations/count.cc
! 650610fcbb1db0626275e5589897ea84  libstdc++-v3/testsuite/23_containers/unordered_set/operators/1.cc
! 6e0762cc036e56299ca8079c1103b842  libstdc++-v3/testsuite/23_containers/unordered_set/operators/52309.cc
! 2722d144fda97e779603c657f5a76712  libstdc++-v3/testsuite/23_containers/unordered_set/pmr_typedefs.cc
! 0cf665f612d6229e20a9ad70fb75efe3  libstdc++-v3/testsuite/23_containers/unordered_set/pmr_typedefs_debug.cc
! a14ec43f949209f502e3d92596637b09  libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc
! 764b2dfab343cdd77b5da90592d38a19  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc
! f39853d8d62df85248bf0b5a3fd439ac  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc
! cee7e722f5473eabbbd0df753a95ee76  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/citerators.cc
! 2709e624b519a812dbf923bfe06b7ad6  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/cliterators.cc
! b68b141e21e7ee92ab6ca812c0b33998  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/debug_container.cc
! ac1f07d67fc710540283b7882b45f0b6  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/debug_mode.cc
! 2b58b1fd05ad76fed775544fffd3e271  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/exception/basic.cc
! ffec224977623da08d2e8cb7676b10ae  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/exception/generation_prohibited.cc
! ec4f597a041c38657a877b8495842e6b  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/exception/propagation_consistent.cc
! e79a64f9c1a53474c493d87e4a13bba7  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/1.cc
! 4c6cde6c14f91ed71c6ae04af1ae64a4  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/2.cc
! e854168e38668988aa3dfdf9526402f9  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/3.cc
! 01260bc096a3e710b113b590b1e055fa  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/4.cc
! 442e8780f2f62dbaa3e7094558a9f79d  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/5.cc
! 53e9f9459b1645ffc1ab2d255991cdfe  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/typedefs.cc
! 02840d72f57055db53124c32a81dae01  libstdc++-v3/testsuite/23_containers/vector/14340.cc
! 32c2fe152d316290c5eb92da431d9cf2  libstdc++-v3/testsuite/23_containers/vector/15523.cc
! e43b29429c1c5a235e7435cc845e6954  libstdc++-v3/testsuite/23_containers/vector/18604.cc
! 5430c50c8c69b8e1b55c08626efcd9b4  libstdc++-v3/testsuite/23_containers/vector/26412-1.cc
! 24c4d4abef1a550a5d51812fc8979bb8  libstdc++-v3/testsuite/23_containers/vector/26412-2.cc
! d677f19c3f429dd9d15be2600379c217  libstdc++-v3/testsuite/23_containers/vector/40192.cc
! cd2c1a11874e20a5535175ff0d8e948c  libstdc++-v3/testsuite/23_containers/vector/48101-2_neg.cc
! 015d049ec76bf7c1a0724881349bb6f5  libstdc++-v3/testsuite/23_containers/vector/48101-3_neg.cc
! 36ae24e84ea0d141965614da9a41512b  libstdc++-v3/testsuite/23_containers/vector/48101_neg.cc
! 9abfdaae6e4748410327dbf6d73ceb55  libstdc++-v3/testsuite/23_containers/vector/52591.cc
! cdf2d940d0d7430ad7e84f3fc9f8f606  libstdc++-v3/testsuite/23_containers/vector/58764.cc
! bbb7dcf69edab2d3cbd7e0f474bb8ac6  libstdc++-v3/testsuite/23_containers/vector/59829.cc
! 011ff18d458c407ad8d558afab858923  libstdc++-v3/testsuite/23_containers/vector/63500.cc
! a990fbd034d1830cbe8175d95333d592  libstdc++-v3/testsuite/23_containers/vector/70303.cc
! 8292899cb22fed71c051ee4ee7bb931d  libstdc++-v3/testsuite/23_containers/vector/92124.cc
! b29b353bd57084f24eaa1a4870cb7493  libstdc++-v3/testsuite/23_containers/vector/allocator/construction.cc
! 2af8efe71f3f2ab5d2a5eec15d1ff76c  libstdc++-v3/testsuite/23_containers/vector/allocator/copy.cc
! 29498084e0b8ee0016c292de38944a57  libstdc++-v3/testsuite/23_containers/vector/allocator/copy_assign.cc
! eb7444140e19f13dad13361963e0418c  libstdc++-v3/testsuite/23_containers/vector/allocator/default_init.cc
! 1822c85386adf40f1ad01e5ed8886c5a  libstdc++-v3/testsuite/23_containers/vector/allocator/ext_ptr.cc
! 545e7613c48073137cb8a91b582314b4  libstdc++-v3/testsuite/23_containers/vector/allocator/minimal.cc
! 2ddf2181afd1fddb7be1ea734b4647d4  libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc
! a2ec1f247865e18a36a72b50b5326bed  libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
! ba015768718b09fdd976fc5fafd96a1a  libstdc++-v3/testsuite/23_containers/vector/allocator/noexcept.cc
! 0581439a0f33acd3b031e838a2ab069b  libstdc++-v3/testsuite/23_containers/vector/allocator/swap.cc
! ac4a7bb14f0b6c0007f3b32a8d02c908  libstdc++-v3/testsuite/23_containers/vector/bool/1.cc
! 3e67d42e24976071de1a05dbc2eb544c  libstdc++-v3/testsuite/23_containers/vector/bool/21244.cc
! d75df03344ac625e9565395b2dc4f2cf  libstdc++-v3/testsuite/23_containers/vector/bool/23632.cc
! f81c17598fbc2235f43daa78baf879fe  libstdc++-v3/testsuite/23_containers/vector/bool/6886.cc
! 6d70635c69167041a42f02485849748a  libstdc++-v3/testsuite/23_containers/vector/bool/72847.cc
! aca3f1e31129b81672b4821823745e11  libstdc++-v3/testsuite/23_containers/vector/bool/80893.cc
! 3afd5ee70451b44a6ae47d8a2895b667  libstdc++-v3/testsuite/23_containers/vector/bool/82558.cc
! b419b1a3d7d31632d9a5edda8611bb97  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/copy.cc
! 9fc52e6174b30204331dbe1c49b2c454  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/copy_assign.cc
! 0cb5b8baefc5220886a5d05911ae2f5a  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/default_init.cc
! c2980b76cbcbea76a0139f7327387fcc  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/ext_ptr.cc
! 8f3f4ce561f7d16da69e484cb74d4ade  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/minimal.cc
! 4bcf82f245d3b2c5e5b93f805360fa51  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/move.cc
! 8cf7842031a8ea29d02c568ea8c0eedd  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/move_assign.cc
! 612101a85984370821180461c2cc302a  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/noexcept.cc
! d1383159d742681c762a47615d0baa9a  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/swap.cc
! cef99bd3d675df834ebe5e2f59388e0f  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/1.cc
! b42d0243e22d7b6aa6b18fc8fa12677f  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc
! 63be2fbb79fe5ec6dbcff8d28083db01  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/shrink_to_fit.cc
! 2bcb82e579ba51ff1735836f9edfd086  libstdc++-v3/testsuite/23_containers/vector/bool/clear_allocator.cc
! e574ed46fcc7d5e7b8e4749b0024e4bf  libstdc++-v3/testsuite/23_containers/vector/bool/cmp_c++20.cc
! 5432b852b1ad3391da7d08abe6c70177  libstdc++-v3/testsuite/23_containers/vector/bool/cons/1.cc
! 94e2d0131aa6a4132ccb4800c5db865c  libstdc++-v3/testsuite/23_containers/vector/bool/cons/2.cc
! 798342a34a31057ef17a780ad90bdb4f  libstdc++-v3/testsuite/23_containers/vector/bool/cons/87809.cc
! d4d81bf57d000556af47b8302b6e2ac5  libstdc++-v3/testsuite/23_containers/vector/bool/cons/noexcept_move_construct.cc
! 92171b00a610caea0ea25d42a41eb5e0  libstdc++-v3/testsuite/23_containers/vector/bool/emplace.cc
! d6e04195a8009d3c213b406e16e683cb  libstdc++-v3/testsuite/23_containers/vector/bool/emplace_cxx17_return.cc
! 5a3c7598a39ee308a23dfeb71c5a6dc4  libstdc++-v3/testsuite/23_containers/vector/bool/hash/1.cc
! 20caa8d1060674d02fa9058cbe5fd543  libstdc++-v3/testsuite/23_containers/vector/bool/iterator_c++20.cc
! 53440f9078adf1cc88bb1c1b8cb7d3ef  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/assign/1.cc
! 85de6b56cc8e11a71e93ec8949fbfc5a  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/erase/1.cc
! 60e4d90addfbc4c458d3b27ffd769bfe  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/erase/54577.cc
! 53f86d064451bc50f64e2de3b4e0f868  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/1.cc
! 7d1fccee7c654bda0330e6e02dd2d5fa  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc
! 38102b08c752d23c871ecd428a61f489  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/const_iterator.cc
! cc1826a790dd5cddd4b9a01c369e5361  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/1.cc
! e40f53503c19e306371b58a308bb56f1  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/2.cc
! 3969848b5f0d6e3a99766f41da742992  libstdc++-v3/testsuite/23_containers/vector/bool/requirements/citerators.cc
! 5c9569c506b165c605ea60457ee7b756  libstdc++-v3/testsuite/23_containers/vector/bool/requirements/dr438/constructor.cc
! 1ca3a4c53021ac18283734167f0caf69  libstdc++-v3/testsuite/23_containers/vector/bool/swap.cc
! df3ab46873764a0ec71d5ef61fd6d76f  libstdc++-v3/testsuite/23_containers/vector/capacity/1.cc
! 656dfa9b76c536a5a69f02993e6c8546  libstdc++-v3/testsuite/23_containers/vector/capacity/2.cc
! c633d6c3358431264d0d95875784adca  libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc
! 28fc1b40b0ebe942ca4947dc36d213c7  libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc
! 429b17860d658d28d994a3677a2444c6  libstdc++-v3/testsuite/23_containers/vector/capacity/44190.cc
! 7f2cd16e478815ee1ee9cde8de3efcc5  libstdc++-v3/testsuite/23_containers/vector/capacity/8230.cc
! 6addaf5e8637e241609d37f7a98b9ae4  libstdc++-v3/testsuite/23_containers/vector/capacity/87544.cc
! 02f8d9dcc8ec5450ec98ff1324703051  libstdc++-v3/testsuite/23_containers/vector/capacity/max_size.cc
! e12b64593b524fd2a2820bc63847236a  libstdc++-v3/testsuite/23_containers/vector/capacity/reserve/moveable.cc
! 4a66bf891e3f94521682bce3a99ae9a6  libstdc++-v3/testsuite/23_containers/vector/capacity/reserve/moveable2.cc
! d832ee754c81ac2c45ef16e80abc39e3  libstdc++-v3/testsuite/23_containers/vector/capacity/resize/1.cc
! 0181243092e5b0dec387b7708092ab02  libstdc++-v3/testsuite/23_containers/vector/capacity/resize/moveable.cc
! ccf6f479b5e256008d0255822deb3794  libstdc++-v3/testsuite/23_containers/vector/capacity/resize/moveable2.cc
! 9bfa6a819d32a773080d3c23564bd29d  libstdc++-v3/testsuite/23_containers/vector/capacity/resize/resize_size.cc
! 61831db45f832a168796a3950959fb28  libstdc++-v3/testsuite/23_containers/vector/capacity/resize/strong_guarantee.cc
! a85d4fe1404f49889553d9c174b8afb1  libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc
! a2ed8464d53e5f675b21a2197a5af8fc  libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc
! a57a99172da30aee03cbb85a881de068  libstdc++-v3/testsuite/23_containers/vector/check_construct_destroy.cc
! a96f84aa8002282db8196daf1443564f  libstdc++-v3/testsuite/23_containers/vector/cmp_c++20.cc
! 13cf10ad1046503e754a6383f6d96ad6  libstdc++-v3/testsuite/23_containers/vector/cons/1.cc
! 30d83f47c41bfd6b1fc7d4e69f5037dd  libstdc++-v3/testsuite/23_containers/vector/cons/2.cc
! bb2dfa551fc1a50eb784eb2f2b2ad5d7  libstdc++-v3/testsuite/23_containers/vector/cons/3.cc
! bc7d32b07a54390854eb34b6498e82ae  libstdc++-v3/testsuite/23_containers/vector/cons/4.cc
! 60571a1a12807105b6ee06f52bc78e60  libstdc++-v3/testsuite/23_containers/vector/cons/55977.cc
! b87a7a3cd541605715bcc94ce9ffd309  libstdc++-v3/testsuite/23_containers/vector/cons/6513.cc
! 728db9cba9c08ad1ba6af3d6c541b503  libstdc++-v3/testsuite/23_containers/vector/cons/86292.cc
! 365e19dafafd4135a3d0450a61a3f1e0  libstdc++-v3/testsuite/23_containers/vector/cons/87809.cc
! aa02f2c43480108b00dac0de71bf1469  libstdc++-v3/testsuite/23_containers/vector/cons/89164.cc
! 434a93395b2a3da35e85c4088abe14d3  libstdc++-v3/testsuite/23_containers/vector/cons/89164_c++17.cc
! 0e21c66113eb26fc8738889b46359d29  libstdc++-v3/testsuite/23_containers/vector/cons/94540.cc
! 91077740ab7bf3bdee0226e442628f2d  libstdc++-v3/testsuite/23_containers/vector/cons/94831.cc
! 64603aa0c23f62ddd0f7822d614dee9f  libstdc++-v3/testsuite/23_containers/vector/cons/clear_allocator.cc
! 328073d94217d294f750da19ee6d0f30  libstdc++-v3/testsuite/23_containers/vector/cons/cons_size.cc
! 54c76f5da649ad544e5d843d4093b8fe  libstdc++-v3/testsuite/23_containers/vector/cons/deduction.cc
! 4f75096a24cb959dbff7093f990a8852  libstdc++-v3/testsuite/23_containers/vector/cons/destructible_debug_neg.cc
! 88a06c32c07a05b906612b8b6180031f  libstdc++-v3/testsuite/23_containers/vector/cons/destructible_neg.cc
! e9e18dc92dc482f39937bb8cbf4c7436  libstdc++-v3/testsuite/23_containers/vector/cons/moveable.cc
! 6edb022036b3345e26e610e2940666da  libstdc++-v3/testsuite/23_containers/vector/cons/moveable2.cc
! 8c49f3bb6291e56019a1f03d296fb711  libstdc++-v3/testsuite/23_containers/vector/cons/noexcept_move_construct.cc
! 9ea5eff4ad4f33a34892cc0bf92c7de2  libstdc++-v3/testsuite/23_containers/vector/cons/self_move.cc
! c1516efb1f474183cc992f59b2915e7b  libstdc++-v3/testsuite/23_containers/vector/data_access/1.cc
! 07f960c16b3626071f0f8d0c45b2bada  libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc
! e8e40973dd98ce4beb6e597c37ee64ac  libstdc++-v3/testsuite/23_containers/vector/debug/57779_neg.cc
! adc8b7c70fc4001378243f5970972278  libstdc++-v3/testsuite/23_containers/vector/debug/60499.cc
! 716a45f6828ca4e68f997c8dd8e7b232  libstdc++-v3/testsuite/23_containers/vector/debug/60587.cc
! c45ba0552909ec0464bb780e0ad3b465  libstdc++-v3/testsuite/23_containers/vector/debug/60587_neg.cc
! 102ef1a54784f4623591926db7e190cc  libstdc++-v3/testsuite/23_containers/vector/debug/90102.cc
! b099d3dcdf20b667caa06f06b53ab301  libstdc++-v3/testsuite/23_containers/vector/debug/alloc_prop.cc
! fdd87545a12b8c36e49ce59177f83cfa  libstdc++-v3/testsuite/23_containers/vector/debug/assign1_neg.cc
! 360b599475322529d749d2d73f2a628f  libstdc++-v3/testsuite/23_containers/vector/debug/assign2_neg.cc
! c70ef8492e25f8544f061c6b2e9eb6f4  libstdc++-v3/testsuite/23_containers/vector/debug/assign3_neg.cc
! 0d7a6dc3cf389a58dde1aaebb5058dc5  libstdc++-v3/testsuite/23_containers/vector/debug/assign4_neg.cc
! 941824b2440da594c00f49687d836d39  libstdc++-v3/testsuite/23_containers/vector/debug/bool/shrink_to_fit.cc
! 42fa00d52afa391b6e671fa380336d12  libstdc++-v3/testsuite/23_containers/vector/debug/construct1_neg.cc
! 7b2d33820dc762651c2d1d750e2bc6bb  libstdc++-v3/testsuite/23_containers/vector/debug/construct2_neg.cc
! 5644b537b6f6a93da4ebe6e62e8bb9e6  libstdc++-v3/testsuite/23_containers/vector/debug/construct3_neg.cc
! 8fa38eaed109536907916be78106cf34  libstdc++-v3/testsuite/23_containers/vector/debug/construct4_neg.cc
! cf77fce84f4563b81a89c0dd2a495d68  libstdc++-v3/testsuite/23_containers/vector/debug/debug_functions.cc
! 9a4d5e3ab117f3b75d51a82d1771eda8  libstdc++-v3/testsuite/23_containers/vector/debug/insert1_neg.cc
! 142989f0bd4a3fa1bb14024d5a562137  libstdc++-v3/testsuite/23_containers/vector/debug/insert2_neg.cc
! a927d92fae7ed940cc755b99f983f19f  libstdc++-v3/testsuite/23_containers/vector/debug/insert3_neg.cc
! 941c87b3a581a978e084d4dddd06bea7  libstdc++-v3/testsuite/23_containers/vector/debug/insert4_neg.cc
! a487ee8c4f53c8536cd5042aca122263  libstdc++-v3/testsuite/23_containers/vector/debug/insert5_neg.cc
! 24798920426ff6d0cafbb6f47732e8fc  libstdc++-v3/testsuite/23_containers/vector/debug/insert6_neg.cc
! 9d3b046493d337dc0e30b77494df99fc  libstdc++-v3/testsuite/23_containers/vector/debug/insert7_neg.cc
! 8e05bdb0c4a02307dc73d9e65933d20c  libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/1.cc
! dcaf0406e675b49fd2b3cd7c6b2efc8f  libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/2.cc
! 778a6e223e0d587269519ddbe2ef9bd2  libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/3.cc
! 9776da00390d590e77faa61f26f38734  libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/4.cc
! 3f9ecc3e555b30fb9e914ecb93286a06  libstdc++-v3/testsuite/23_containers/vector/debug/move_assign_neg.cc
! 273545ea0f15f6193436973d7885c2e8  libstdc++-v3/testsuite/23_containers/vector/debug/move_neg.cc
! bea2cede2013e6375a5aaed46627ad04  libstdc++-v3/testsuite/23_containers/vector/debug/multithreaded_swap.cc
! 14e74b2f2cd966170814d61472c39c37  libstdc++-v3/testsuite/23_containers/vector/debug/mutex_association.cc
! fcc6a23c25fed2323cec6ad30ac23888  libstdc++-v3/testsuite/23_containers/vector/debug/shrink_to_fit.cc
! 8c81657e28b61a3102a26e23c10cc07f  libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation-1.cc
! e8f7c410b9ee7fb0b84086f4cd1e1f9e  libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation-2.cc
! ea4bc683bfae758dd2818267e0ba84a8  libstdc++-v3/testsuite/23_containers/vector/element_access/1.cc
! 68741996e1671f2265741e4f18c874f0  libstdc++-v3/testsuite/23_containers/vector/erasure.cc
! 43f87785640cf0bdfbf41c9096d687fb  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/citerators.cc
! a451842314f44f73a1cbc0191d0e9569  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/data_access.cc
! 674efc7054ef3eb53fadec6abf5dd809  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/explicit_instantiation/1.cc
! 5a742778dbc77923017245cfab7522c2  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/explicit_instantiation/3.cc
! 916c7a5013dd26f214a9a4953267e770  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/modifiers/element.cc
! d1f901c3aa259904fbdc63d23dc8c2fc  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/modifiers/erase.cc
! f93510445e0abd38d0718337e47d0061  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/modifiers/insert.cc
! 8eb3bcc1d927dca5cca113f7d2aa8e6c  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/resize.cc
! 30e91a017fd7bb67dd3d007e20b4ad92  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/types/1.cc
! f5e979e29be0ede498967bf878030f8f  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/types/2.cc
! 58ddb4baafd7d6d70d676174e7b5b2a8  libstdc++-v3/testsuite/23_containers/vector/init-list.cc
! 1083bd2e76086711a778da0f6c50fd1f  libstdc++-v3/testsuite/23_containers/vector/modifiers/1.cc
! 1211a8bfd16cd7d661c7de8033e2c8ec  libstdc++-v3/testsuite/23_containers/vector/modifiers/2.cc
! 24db0703ed5f65e772374e48a53cb9da  libstdc++-v3/testsuite/23_containers/vector/modifiers/assign/1.cc
! ee0835ac70d6cde78bc4a0a5d658a257  libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/52799.cc
! b2d085beb6d3f253521b53e08fed53bf  libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/92878_92947.cc
! 64d1add61242c7cb736bb1274245a914  libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/const_iterator.cc
! 652fa138fecd69f37e3f7273715df558  libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/cxx17_return.cc
! b20fbbdd9ff0c2268fb99d0551e24b7c  libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/self_emplace.cc
! 33905742d0b0c96581d4f3e2e691716d  libstdc++-v3/testsuite/23_containers/vector/modifiers/erase/1.cc
! 655a01b7e6185cbd87cff45dc416f9fe  libstdc++-v3/testsuite/23_containers/vector/modifiers/erase/50529.cc
! 02c15c3bfa2235668e29a684c92c7bc3  libstdc++-v3/testsuite/23_containers/vector/modifiers/erase/54577.cc
! 9ed44db2bb99a3cad4e736cc261e4a0a  libstdc++-v3/testsuite/23_containers/vector/modifiers/erase/moveable.cc
! fd48e0e46446d15dcad4947a38602ca8  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/1.cc
! 3d0d5cb3c697eed01405572c583e16fb  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/58148.cc
! 19ec2a880d74bb94a1d8e83ac8889b19  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/aliasing.cc
! 1936c41d66cdae3bdbfa7513b2b558cc  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/const_iterator.cc
! 2cb6c63c15e3c221ac0702d59c5139f5  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/self_insert.cc
  8fb5c601f412e71f5977219b7d89f18d  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc
! 522e67715088c6bc25d2a87becea1f2e  libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable.cc
! cfa1ee73257bdbb7b03abdd50fdffc36  libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable2.cc
! cb8e9edd0041930c9424b43f761603e2  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/49836.cc
! dafa5e8020ab4a64f360785ed6176101  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/89130.cc
! f104b598ff5572a8dad417228ef454d2  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/89416.cc
! 52b8a3bbdbaf8857347b2e5807f485f1  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/strong_guarantee.cc
! 3c28ca41919fd5cecafaa8e37cb1385d  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/1.cc
! afc5e84b6e05491e60627214a8925d15  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/2.cc
! 55713e0ffbc98fc358e28d0003e61579  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/3.cc
! 0c53c25b67dfe7cb40bbb10fba58e746  libstdc++-v3/testsuite/23_containers/vector/pmr_typedefs.cc
  33db2bb591e55ad911ea124e372841ca  libstdc++-v3/testsuite/23_containers/vector/profile/vector.cc
! fb655a6a50f52dfd12fdfcd66eed3f7a  libstdc++-v3/testsuite/23_containers/vector/range_access.cc
! 7824d7e6f2df6a8062afc44f77fc580c  libstdc++-v3/testsuite/23_containers/vector/requirements/citerators.cc
! 049fd0b0d699095cc7ceb9ad34cfe6a6  libstdc++-v3/testsuite/23_containers/vector/requirements/do_the_right_thing.cc
! 256be79e9479dac22008b92650560ce0  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
! 7eedfc087eeb5b1b6519bbb4a408c15f  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor.cc
! 69e0e9bf77ce01deb71654de4e9fb156  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
! e545a327e2d262252f6d15a6d9ad16b4  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
! cfd6ed62afaa0fe860d6a70374650948  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
! 4f7c3654f1a6082888e249fd85c31d70  libstdc++-v3/testsuite/23_containers/vector/requirements/exception/basic.cc
! 9ebd34a9acdd96b98dd0dbdc27a3d04f  libstdc++-v3/testsuite/23_containers/vector/requirements/exception/generation_prohibited.cc
! 1e92fcb6689c9c6ae378a4e904b6952a  libstdc++-v3/testsuite/23_containers/vector/requirements/exception/propagation_consistent.cc
! f1d2dfe8bdde1711fe9c1f2e68ac54d6  libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/1.cc
! 85b4802f2ab6d298c7781f74bb8628a4  libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/1_c++0x.cc
! 99f29676f9c02dddac25e7f4d47495a1  libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/2.cc
! b00c6cc7b58325e8e853681e3f224138  libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/3.cc
! a0b98f6b70d2132065e7a01b465ab28a  libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/4.cc
! 8b5c5fb01d20b54a330850d9ff37a460  libstdc++-v3/testsuite/23_containers/vector/requirements/partial_specialization/1.cc
! 036d623aa14d6fcb341a4ec74318bbd0  libstdc++-v3/testsuite/23_containers/vector/requirements/typedefs.cc
! 32498175a4ac03b7038e7be403befb27  libstdc++-v3/testsuite/23_containers/vector/types/1.cc
! 9ace48b2c34943546511d27bd70404f5  libstdc++-v3/testsuite/23_containers/vector/types/23767.cc
! 3077fddcde252bfa3274fa9643c9f1db  libstdc++-v3/testsuite/23_containers/vector/types/pmr_typedefs_debug.cc
! d79ca12204738505a399aeff984ee255  libstdc++-v3/testsuite/23_containers/vector/zero_sized_allocations.cc
! 13db5aa30b43a040ef63c3c216b16e29  libstdc++-v3/testsuite/24_iterators/aliases.cc
! 199431a1580752ab5d2d52e6ea704493  libstdc++-v3/testsuite/24_iterators/associated_types/incrementable.traits.cc
! 7bd5596041cecabc5bd66ed4d40d7aac  libstdc++-v3/testsuite/24_iterators/associated_types/iterator.traits.cc
! 748639209be77fb79ac55feee234aba1  libstdc++-v3/testsuite/24_iterators/associated_types/readable.traits.cc
! 93ad746fac4b6ce91267df0e5907f50e  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/2.cc
! 4e80133a27c29a7d845e714bbbfd6360  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/constexpr.cc
! f8b0802e186351890c7fbf01bac3df02  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/pr93884.cc
! 8a622b0ae8025ffb99be5a2175f64184  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/requirements/base_classes.cc
! beeca7a8e5a68f05c55b5f036dfae41a  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/requirements/container.cc
! 8006dfff78337801564e5b6ab9d87a3d  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/requirements/explicit_instantiation.cc
! 1f090b3647a98de217dc36823829e05d  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/requirements/typedefs.cc
! 54b2766b9fbe73218d8470be531e0926  libstdc++-v3/testsuite/24_iterators/bidirectional/concept.cc
! c79d1f0e10c0a939f0c6401bc65db1e0  libstdc++-v3/testsuite/24_iterators/bidirectional/tag.cc
! 64a13a1fb43872055e33902203f05261  libstdc++-v3/testsuite/24_iterators/common_iterator/1.cc
! aeb31a80322253f628082c76be6b3455  libstdc++-v3/testsuite/24_iterators/common_iterator/2.cc
! fbb02ff8ea44647787a1d58b0af33694  libstdc++-v3/testsuite/24_iterators/container_access.cc
! 985edba23526581e2811581b195af9aa  libstdc++-v3/testsuite/24_iterators/contiguous/concept.cc
! d77d56d08a4417d44491163642da79fb  libstdc++-v3/testsuite/24_iterators/contiguous/tag.cc
! 260d0f9649b885323173c667220c0dcc  libstdc++-v3/testsuite/24_iterators/counted_iterator/1.cc
! a768c04fe288f140bd6cd57555e1895b  libstdc++-v3/testsuite/24_iterators/counted_iterator/lwg3389.cc
! da76f425f8371ea7d8b7b449a8aa177b  libstdc++-v3/testsuite/24_iterators/customization_points/92894.cc
! ea8a2e5202d41e63eb3eec79cfc06b0b  libstdc++-v3/testsuite/24_iterators/customization_points/iter_move.cc
! da2cbef76db54168f270e4b9335b069a  libstdc++-v3/testsuite/24_iterators/customization_points/iter_swap.cc
! 6a8eb88055b6d046a592451f7143bc27  libstdc++-v3/testsuite/24_iterators/customization_points/lwg3420.cc
! e744b3499cc089f085f4715e4304ff17  libstdc++-v3/testsuite/24_iterators/forward/concept.cc
! 0b13053e52641f945501a1e722e0dbe1  libstdc++-v3/testsuite/24_iterators/forward/tag.cc
! ca188cb6975c1cccf08e52d677b6a6ce  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/2.cc
! 655276cd71e80bd888a9416c2d3fe8b2  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/constexpr.cc
! 6163619db52120cdc96bf71ecebd16ba  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/pr93884.cc
! f543e08cb3adc70799dc5207027a7074  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/requirements/base_classes.cc
! 8dec5aebad79c6c64c9b8c5d6c238b17  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/requirements/container.cc
! d5937490b19817cd14cf51552e3c2681  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/requirements/explicit_instantiation.cc
! 8c4c274b78e6cc16e7f475ce24a10e06  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/requirements/typedefs.cc
! 332c93567e45045fc0fb3b887ff45476  libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++11.cc
! e0bc4e62ab3fd0e88e0a41f09145ddc6  libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++14.cc
! d967019eaa627b00acc8af6bc4f84062  libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++17.cc
! ce5875927d24851119506e0cd2a9fa4c  libstdc++-v3/testsuite/24_iterators/headers/iterator/synopsis.cc
! 7d4ecadd50879aeb5f55f38c90c65ea7  libstdc++-v3/testsuite/24_iterators/headers/iterator/synopsis_c++11.cc
! 098d7028c2dba5078caff7184df26aad  libstdc++-v3/testsuite/24_iterators/headers/iterator/synopsis_c++14.cc
! 350411c893358fa33761dda89f7c7d80  libstdc++-v3/testsuite/24_iterators/headers/iterator/synopsis_c++17.cc
! 7ce76c7a52b19519eaedf46592ff1028  libstdc++-v3/testsuite/24_iterators/headers/iterator/synopsis_c++20.cc
! ead7b347f3a84b38262546ce18206a07  libstdc++-v3/testsuite/24_iterators/headers/iterator/types_std.cc
! f25cd16c63db0eb06c20b51fc7f796e0  libstdc++-v3/testsuite/24_iterators/indirect_callable/92894.cc
! 91dfe14e4840b1461fe3aeade634c378  libstdc++-v3/testsuite/24_iterators/indirect_callable/projected.cc
! 578a9f922f0d38aaa181459c0e0882a3  libstdc++-v3/testsuite/24_iterators/input/concept.cc
! 8d23220366aee3df10c0bb582efe714f  libstdc++-v3/testsuite/24_iterators/input/tag.cc
! 9dc3e1da9c4150710274e8b9e8310e3c  libstdc++-v3/testsuite/24_iterators/insert_iterator/2.cc
! 213bd21bce21fee8f06a6a8f7dafd173  libstdc++-v3/testsuite/24_iterators/insert_iterator/constexpr.cc
! 78bab213b4f5e9d0e5cd9b39de333203  libstdc++-v3/testsuite/24_iterators/insert_iterator/dr561.cc
! 8446526fef270b820c8259ad604fa616  libstdc++-v3/testsuite/24_iterators/insert_iterator/requirements/base_classes.cc
! ac5be76e595ef097caab1e9668b5db28  libstdc++-v3/testsuite/24_iterators/insert_iterator/requirements/container.cc
! c6cb34dc6806fb03d64498552554a50a  libstdc++-v3/testsuite/24_iterators/insert_iterator/requirements/explicit_instantiation.cc
! 716f218665ed37e5d78917b36448e803  libstdc++-v3/testsuite/24_iterators/insert_iterator/requirements/typedefs.cc
! 1dd3c622d326432ea92ecd80d73f9019  libstdc++-v3/testsuite/24_iterators/istream_iterator/1.cc
! b5f85dc7dd3d5dcc3085616e68ef992e  libstdc++-v3/testsuite/24_iterators/istream_iterator/2.cc
! 134d93af7c8b518f644cebcb1b1dc7b3  libstdc++-v3/testsuite/24_iterators/istream_iterator/70766.cc
! 55f901c24fd53b962dc28f68bdad8b21  libstdc++-v3/testsuite/24_iterators/istream_iterator/cons/constexpr.cc
! 5500e13c2821b64d16dddbc6342dd79a  libstdc++-v3/testsuite/24_iterators/istream_iterator/cons/sentinel.cc
! 7597221603702411907820bd2b3c5ec3  libstdc++-v3/testsuite/24_iterators/istream_iterator/requirements/base_classes.cc
! baa16b6d9cfa9432ad7ceddc06ffc5ec  libstdc++-v3/testsuite/24_iterators/istream_iterator/requirements/explicit_instantiation.cc
! 012adae7d457295231ca80687e075453  libstdc++-v3/testsuite/24_iterators/istream_iterator/requirements/typedefs.cc
! d8d9e972fb3e36920db7c058b8a05fb6  libstdc++-v3/testsuite/24_iterators/istream_iterator/sentinel.cc
! da19f38b817739061b5fe43671683500  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/2.cc
! 187cfd5d51bccdff3179b32b71eb55d6  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/2627.cc
! cfa404bb764e5f4b59e3cb573d9fc4f5  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/92285.cc
! 9f126aebdf8cd5acf6cdd83471bf5704  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/cons/constexpr.cc
! 7fdfd6f0fb74ea7b7881462e526e793d  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/cons/sentinel.cc
! fcd3eafd85b5a87d33863baa868ed894  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/debug/1_neg.cc
! 63f9faddffe497ff63af8195d0d8fa98  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/debug/2_neg.cc
! 360d9e62de8ad0c906034d15bc6c493c  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/base_classes.cc
! 3b80c9880280f87195249b34d7bf9bba  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/dr445.cc
! fbfe93dbfb566414b75da9a9293f0a05  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/explicit_instantiation.cc
! e04d0bbe59fde133552ac637f60e0966  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/typedefs.cc
! a6ce33f817005fed6fde94ccae6196c3  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/sentinel.cc
! b83580062979fb7f9ca63ed95de103ca  libstdc++-v3/testsuite/24_iterators/move_iterator/cust.cc
! f1b3ed883beb84a0ab6a40680b3b8919  libstdc++-v3/testsuite/24_iterators/move_iterator/debug_neg.cc
! 616a547223c3716a41e85ec3fec50874  libstdc++-v3/testsuite/24_iterators/move_iterator/dr2061.cc
! bb690f467c25f63dba9533e5b3f90c56  libstdc++-v3/testsuite/24_iterators/move_iterator/dr2106.cc
! c4eb82f09dfdab955ee9beaa8c382aa3  libstdc++-v3/testsuite/24_iterators/move_iterator/dr3265.cc
! 1cc84b858963466af88283995dbedba2  libstdc++-v3/testsuite/24_iterators/move_iterator/dr3435.cc
! f61c9fca6266649673037a304f5087d1  libstdc++-v3/testsuite/24_iterators/move_iterator/greedy_ops.cc
! 0533536b91d1b8889bc0514c951db02e  libstdc++-v3/testsuite/24_iterators/move_iterator/input_iterator.cc
! 677f7e3442a1f49a2317e5d2e84aafbc  libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3390.cc
! c4da277c7c5ed43e70bfcf1d7f0988e8  libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3391.cc
! 159970e8940b0bda179e39132e46b6f7  libstdc++-v3/testsuite/24_iterators/move_iterator/move_only.cc
! fa15fa33472593185ffd5c4507ebd70a  libstdc++-v3/testsuite/24_iterators/move_iterator/rel_ops_c++20.cc
! 00713bae4b62792aaac5258e8985b3b4  libstdc++-v3/testsuite/24_iterators/move_iterator/sentinel.cc
! 7197efde86b8ed3ae703ab142f49bcf0  libstdc++-v3/testsuite/24_iterators/normal_iterator/58403.cc
! d4a585aaf65e0b5c63f72b7dfef6fb06  libstdc++-v3/testsuite/24_iterators/normal_iterator/cmp_c++20.cc
! c493bdcdf31b28125ae6f70bbca275d6  libstdc++-v3/testsuite/24_iterators/normal_iterator/debug_neg.cc
! f4094d814d12e4659302d41112dd550a  libstdc++-v3/testsuite/24_iterators/normal_iterator/greedy_ops.cc
! 12000340c1f9bfe32446a6a27f2ef092  libstdc++-v3/testsuite/24_iterators/operations/26020.cc
! 917541289d2626ad7a2ea1b13ffdd7e9  libstdc++-v3/testsuite/24_iterators/operations/40497.cc
  631af97d6c75b598ecf8901dc62067b2  libstdc++-v3/testsuite/24_iterators/operations/lwg2353.cc
! aae1372c23f5d8c02125e84667ce154b  libstdc++-v3/testsuite/24_iterators/operations/next.cc
! 38acf7e05fe7d6929219d063d2b2df92  libstdc++-v3/testsuite/24_iterators/operations/prev.cc
! abf62f2b7bd08b512cf4a63e83d62a39  libstdc++-v3/testsuite/24_iterators/operations/prev_neg.cc
! 6cf084d9a0808e4c9fc5c905fd5c1334  libstdc++-v3/testsuite/24_iterators/ostream_iterator/1.cc
! b1cd648fa0161dbd889af2da5840d9b2  libstdc++-v3/testsuite/24_iterators/ostream_iterator/70766.cc
! cf9e8dd00fa7b1dfc5adf36ce333a602  libstdc++-v3/testsuite/24_iterators/ostream_iterator/requirements/base_classes.cc
! 182b9a52d603abfe6f533d5f7a7f1335  libstdc++-v3/testsuite/24_iterators/ostream_iterator/requirements/constexpr.cc
! efe530e88822d35149a01acf1aa92090  libstdc++-v3/testsuite/24_iterators/ostream_iterator/requirements/explicit_instantiation.cc
! a09ba4e9746bfccb38de1a500ccdbee7  libstdc++-v3/testsuite/24_iterators/ostream_iterator/requirements/typedefs.cc
! 929912ebe8471b152d136c91bd447048  libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc
! 103b735c4056f05794239479a6c608e7  libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/requirements/base_classes.cc
! 208c39ece926ed4db5f88063aad210c4  libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/requirements/explicit_instantiation.cc
! 471f17cd91cfff659806305c80ef94c1  libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/requirements/typedefs.cc
! da420a856dc0c7c8f0bb6c46069d1e08  libstdc++-v3/testsuite/24_iterators/output/concept.cc
! 1cbec407a4e4e583d65d62c3f33811d1  libstdc++-v3/testsuite/24_iterators/output/tag.cc
! 5d9e6c455c33aca40789c39f35da21cd  libstdc++-v3/testsuite/24_iterators/random_access/concept.cc
! 05d3d24060565793f5d927f9e4e12a07  libstdc++-v3/testsuite/24_iterators/random_access/string_vector_iterators.cc
! aacad6819aab8553b0bf0a910b28e289  libstdc++-v3/testsuite/24_iterators/random_access/tag.cc
! fab46014937def539ea8644b0c5f010b  libstdc++-v3/testsuite/24_iterators/range_access/range_access.cc
! 4237dd63ffa7becd9dfb9a7984f56f50  libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp14.cc
! 7ab0794377b35f9de596b2575c08e285  libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp17.cc
! eeecef6511dbe7faed8ceedfb45bf6a2  libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp17_neg.cc
! 00993d52fb3fde3612b964bf044116bc  libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp20.cc
! 5d0d1075b02e1560aab2247c10a9ea3d  libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp20_neg.cc
! 00606ba56af13a3b035c586a3d9cf4cd  libstdc++-v3/testsuite/24_iterators/range_operations/100768.cc
! f106b0e20bbe5d07a7358692912006b9  libstdc++-v3/testsuite/24_iterators/range_operations/advance.cc
! 0801af026902ec25c1d5d62d2deba688  libstdc++-v3/testsuite/24_iterators/range_operations/advance_debug_neg.cc
! 2f4b9ccddd25fdf144f1acfd7e17410b  libstdc++-v3/testsuite/24_iterators/range_operations/distance.cc
! 8b27bbddfc1deb1ac2effc7160d22c2f  libstdc++-v3/testsuite/24_iterators/range_operations/next.cc
! 0ed9099160635d30a917767db4db3dae  libstdc++-v3/testsuite/24_iterators/range_operations/prev.cc
! 61dfe6716a18a602a8173f0831ed4381  libstdc++-v3/testsuite/24_iterators/reverse_iterator/100639.cc
! 98e36525858fd93320155eb672561949  libstdc++-v3/testsuite/24_iterators/reverse_iterator/11729.cc
! 89a77f061c69b5ec81b3988ddfada509  libstdc++-v3/testsuite/24_iterators/reverse_iterator/2.cc
! 60587bf48218c6927a7a995dca42e36a  libstdc++-v3/testsuite/24_iterators/reverse_iterator/3.cc
! de69d094b2ae892c5e4ae783c62c4030  libstdc++-v3/testsuite/24_iterators/reverse_iterator/71771.cc
! 9f32b003701f0cdecd68b77a67a63d74  libstdc++-v3/testsuite/24_iterators/reverse_iterator/cust.cc
! 8d12559bac04b35cf062198040c0ab53  libstdc++-v3/testsuite/24_iterators/reverse_iterator/debug_neg.cc
! 42456cdae645dc2ad60d5b7c84580afd  libstdc++-v3/testsuite/24_iterators/reverse_iterator/dr1052.cc
! ad3b3b2a842d4a5971ada1ec65915b33  libstdc++-v3/testsuite/24_iterators/reverse_iterator/dr2188.cc
! d0245acbf77ce3c391b673882d1fbe17  libstdc++-v3/testsuite/24_iterators/reverse_iterator/dr3435.cc
! 10a30093717f5364472d564ab8f3480c  libstdc++-v3/testsuite/24_iterators/reverse_iterator/greedy_ops.cc
! eacfd1e3ae08d0552c3f411b2f898c04  libstdc++-v3/testsuite/24_iterators/reverse_iterator/make.cc
! 176111d4588dbae7cb9892efdb60b435  libstdc++-v3/testsuite/24_iterators/reverse_iterator/rel_ops.cc
! 612d2ec6f0e7bc45cd380f0350a02678  libstdc++-v3/testsuite/24_iterators/reverse_iterator/rel_ops_c++20.cc
! 7ba2158f95def9dc4a0f44f1fd86a350  libstdc++-v3/testsuite/24_iterators/reverse_iterator/requirements/base_classes.cc
! db91076c73ca493e4569a0674f36e2b6  libstdc++-v3/testsuite/24_iterators/reverse_iterator/requirements/current.cc
! e4d89ef5e294aa6cb9a1f2452b5612ed  libstdc++-v3/testsuite/24_iterators/reverse_iterator/requirements/explicit_instantiation.cc
! 6466d8b6575a8178da5fb381e667e995  libstdc++-v3/testsuite/24_iterators/reverse_iterator/requirements/typedefs.cc
! 90bde308ab904cf28b3261adac937d35  libstdc++-v3/testsuite/25_algorithms/adjacent_find/1.cc
! 7e0360b366a2fea34d737a83910ba207  libstdc++-v3/testsuite/25_algorithms/adjacent_find/check_type.cc
! e95fe405d494b8ea40a447d35d0da1fa  libstdc++-v3/testsuite/25_algorithms/adjacent_find/constexpr.cc
! 384f1ea67496fa7c0dc304776612dcac  libstdc++-v3/testsuite/25_algorithms/adjacent_find/constrained.cc
! f13955c074d0f5382add2f59473dcee0  libstdc++-v3/testsuite/25_algorithms/adjacent_find/requirements/explicit_instantiation/2.cc
! 2292a02b47bc2061f3214971c3ab7e76  libstdc++-v3/testsuite/25_algorithms/adjacent_find/requirements/explicit_instantiation/pod.cc
! 8027d5f0245602b31634eb47843b94b6  libstdc++-v3/testsuite/25_algorithms/adjacent_find/vectorbool.cc
! 175f62e49d750cd9d5c0443ca0382548  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/char/1.cc
! 60ef4441a59bb6dd8e34241c6e27597b  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/char/1_neg.cc
! 845b6dc72dddb686a538e09b7d9a86a9  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/char/2.cc
! 3697facf76844e7c9c300da3fa0769b3  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/char/2_neg.cc
! d28f682c16aa496f90cc5b6379356ccc  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/char/3_neg.cc
! 8c9c0b346336799eae288e004e857357  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/1.cc
! 956d422b7a8b2cfe1b6640ee16fbf337  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/1_neg.cc
! 6c4f28bb24f17c377559fad93097e11a  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/2.cc
! 8955eafe5c747d940397494555dd2934  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/2_neg.cc
! 19a51fa8f69f54d1d9b167d4251af225  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/3_neg.cc
! 5ea8db904a294ec5717be5e387c6450a  libstdc++-v3/testsuite/25_algorithms/all_of/1.cc
! 8d4373be7f25dd9a5e47906ed8b2aad7  libstdc++-v3/testsuite/25_algorithms/all_of/check_type.cc
! f3243481f32e61e0a2fc77e5d5650b51  libstdc++-v3/testsuite/25_algorithms/all_of/constexpr.cc
! 6ba868ed03604bd2ec55c108cc992a72  libstdc++-v3/testsuite/25_algorithms/all_of/constrained.cc
! 5d3a339ce736751b99e64ade93cac3c9  libstdc++-v3/testsuite/25_algorithms/all_of/requirements/explicit_instantiation/2.cc
! f57a742d8d4ce9885374655f074e4e94  libstdc++-v3/testsuite/25_algorithms/all_of/requirements/explicit_instantiation/pod.cc
! eb759d69563f33a11a64664837f7284d  libstdc++-v3/testsuite/25_algorithms/any_of/1.cc
! d70b5eb5e59ac884a403b495680ceb9f  libstdc++-v3/testsuite/25_algorithms/any_of/check_type.cc
! df41a523540078cd2eed9ba96a5557c6  libstdc++-v3/testsuite/25_algorithms/any_of/constexpr.cc
! eb506d4669738f0c9abdd8cce4565a19  libstdc++-v3/testsuite/25_algorithms/any_of/constrained.cc
! aecaca3349660a397ada3716f5031372  libstdc++-v3/testsuite/25_algorithms/any_of/requirements/explicit_instantiation/2.cc
! da59ccce6ab8b24c444518f0e5c2ece1  libstdc++-v3/testsuite/25_algorithms/any_of/requirements/explicit_instantiation/pod.cc
! 1756d38fb678205d15e9c30ccda054dc  libstdc++-v3/testsuite/25_algorithms/binary_search/1.cc
! adc86017e88fac861ef17195fd4b019f  libstdc++-v3/testsuite/25_algorithms/binary_search/2.cc
! 01292b41dedc0cf41adec14035161781  libstdc++-v3/testsuite/25_algorithms/binary_search/check_type.cc
! 23dd9fae6176242a31f732f2181da4fb  libstdc++-v3/testsuite/25_algorithms/binary_search/constexpr.cc
! b050ef94cc2701cc1905a350732fa4a8  libstdc++-v3/testsuite/25_algorithms/binary_search/constrained.cc
! 088b7ce37745483e9d23f52090bf5abe  libstdc++-v3/testsuite/25_algorithms/binary_search/partitioned.cc
! 439b5c4d8065a991861c9267cf4e4ffc  libstdc++-v3/testsuite/25_algorithms/binary_search/requirements/explicit_instantiation/2.cc
! 6ca01ea21b924af144bb3293a1245446  libstdc++-v3/testsuite/25_algorithms/binary_search/requirements/explicit_instantiation/pod.cc
! 36c95eea74be99c517ef6b5ec5fbf713  libstdc++-v3/testsuite/25_algorithms/clamp/1.cc
! 2acf8e0f2f9b3dcbc7fff485d2b5181b  libstdc++-v3/testsuite/25_algorithms/clamp/2.cc
! 336f0ec21799b6d2817940532feb039b  libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc
! ea2e43d9ff46da21909b1c3e060d1926  libstdc++-v3/testsuite/25_algorithms/clamp/constrained.cc
! 9b3e74055f190a4f8ebb8209b2060296  libstdc++-v3/testsuite/25_algorithms/clamp/requirements/explicit_instantiation/1.cc
! 269e9aff5028de7be71ab2a0d8541b4f  libstdc++-v3/testsuite/25_algorithms/clamp/requirements/explicit_instantiation/pod.cc
! c6e8e7cdd4cdeb553597287ca39dc001  libstdc++-v3/testsuite/25_algorithms/constexpr_macro.cc
! 053e23e4178851270af265355239c823  libstdc++-v3/testsuite/25_algorithms/copy/1.cc
! dcca2e799b172b6ae7558afec256a1a4  libstdc++-v3/testsuite/25_algorithms/copy/2.cc
! 13c82658bb8ef4ccd96377e0ccd5692a  libstdc++-v3/testsuite/25_algorithms/copy/3.cc
! 21aa1c4c96a6fdf471e5633f95316382  libstdc++-v3/testsuite/25_algorithms/copy/34595.cc
! bd0fbcb5db9b9f8cd4dc55a21d39d8eb  libstdc++-v3/testsuite/25_algorithms/copy/4.cc
! 0ab408076b76ee456758b743f13236c0  libstdc++-v3/testsuite/25_algorithms/copy/58982.cc
! 879873f67941456c02e489257c811023  libstdc++-v3/testsuite/25_algorithms/copy/86658.cc
! 37092a5d667f0f28b7e935968d25aae8  libstdc++-v3/testsuite/25_algorithms/copy/94013.cc
! 45915ce0a8f26f04668919afa3a1813b  libstdc++-v3/testsuite/25_algorithms/copy/95578.cc
! 0c8ee5b6733184cae3f4d172c8c52482  libstdc++-v3/testsuite/25_algorithms/copy/constexpr.cc
! 44a89eac99ce0aa39d58b48bed7d32f0  libstdc++-v3/testsuite/25_algorithms/copy/constrained.cc
! 88c4528cea53c54b25e61640d60c4a0f  libstdc++-v3/testsuite/25_algorithms/copy/debug/1_neg.cc
! 13b2ddea0038c1efaabdac86c47114a4  libstdc++-v3/testsuite/25_algorithms/copy/debug/2_neg.cc
! 760427e630997a8203a7268ee08a95d0  libstdc++-v3/testsuite/25_algorithms/copy/debug/95289.cc
! 500cd85e3f2b7bb8d5a19bab3fb05cd3  libstdc++-v3/testsuite/25_algorithms/copy/debug/99402.cc
! 86b98b6a498de08a49a03a314bca1d35  libstdc++-v3/testsuite/25_algorithms/copy/debug/constexpr_neg.cc
  a4e3b919e921272cb082f7fa810f39d2  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc
! e743ffe0642314b6d9ca04036acacacb  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/2.cc
! 9bf93afe07f5e4ca802a9a5a9ec49e00  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/31.cc
! 65a953c4ce68c438f61c97c0a6c5257f  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/32.cc
! a696f1bee9e8885b71f3a383d4708836  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/33.cc
! 3c05075f6c4fcd4e4d76ea6c62046a5b  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/41.cc
! b96915e0b639c3059d258c328da12b96  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/42.cc
! b2ca47b38a5ee4b25be2011cdacc40e0  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/43.cc
! d632c0e6c0d77f23264739bb96299afb  libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc
! 2b3a99acaa8b94c3b201cf600df2e1b6  libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/69478.cc
! 82ff5026bab8cd037930900500de4ea5  libstdc++-v3/testsuite/25_algorithms/copy/requirements/explicit_instantiation/2.cc
! 044e24c19a1bb72860bb383b5badf25e  libstdc++-v3/testsuite/25_algorithms/copy/requirements/explicit_instantiation/pod.cc
! ddceebf534475c6e0b7d35e0af9b0656  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc
! 4a6cf9239d69a0c6ce132fdd6cf41178  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc
! 06c250c13204204e013c284fe9658223  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc
! 1f401ee324f0b1b2d3b328c6f4623c4d  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc
! be4ae6fd309901fa170f3dfd63010efa  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/debug/deque_neg.cc
! 6b692c9ade6d0bb9aa56f6d69fed96fd  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc
! 9090bcc90fa01efd343f5f5ef1b216b1  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc
! c8c9ba876e02f67cf14a0033428a2ec6  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc
! 0643bf41b1c740c1ef14d3be0df7cc1e  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc
! 25a06f48a57e215a75009f7bd3e744c4  libstdc++-v3/testsuite/25_algorithms/copy_backward/94013.cc
! a5ab4abb427020d773229fe079af886d  libstdc++-v3/testsuite/25_algorithms/copy_backward/95578.cc
! d95c001a40919a2726a61342f79e879e  libstdc++-v3/testsuite/25_algorithms/copy_backward/constexpr.cc
! af28e7652522eda92f1bd96e7a54ddd0  libstdc++-v3/testsuite/25_algorithms/copy_backward/constrained.cc
! 56e2a6805683f12a80025315e3c0a46b  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/1_neg.cc
! c083aca0a57f538f8dcaea229aed51a0  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/2_neg.cc
! bf447c73ef970e539424adaeb3d41c1d  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/3_neg.cc
! d01ceb434e7cad2480a385f124333a25  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/constexpr_neg.cc
  da1fb78d5a3cd469ddf537052865be96  libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc
! 03b332c9e78417ec5e7c4e41342fc8de  libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/2.cc
! 2a4d24be8e48cecc6d72468cb39d8a27  libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc
! 64b73d4fda9c87246d7971fba2b07d15  libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/69478.cc
! 7507237480711b7d9889f972a088cfb7  libstdc++-v3/testsuite/25_algorithms/copy_backward/requirements/explicit_instantiation/2.cc
! d3f47d6f7c7a9270106c4c166fbd361f  libstdc++-v3/testsuite/25_algorithms/copy_backward/requirements/explicit_instantiation/pod.cc
! 8b5620247bdabcf989e1a205a744ea8e  libstdc++-v3/testsuite/25_algorithms/copy_if/check_type.cc
! 78f28cb5245f7c3c579075f70d0d3ae4  libstdc++-v3/testsuite/25_algorithms/copy_if/constexpr.cc
! d6e2c0facef6fd370f275000cb87bcd6  libstdc++-v3/testsuite/25_algorithms/copy_if/constrained.cc
! 4e0435737cec973fe5414dbd24e2ef6e  libstdc++-v3/testsuite/25_algorithms/copy_if/requirements/explicit_instantiation/2.cc
! 227a2f6ebf375bd292c4971341a5cbb3  libstdc++-v3/testsuite/25_algorithms/copy_if/requirements/explicit_instantiation/pod.cc
! fd16aafe842baf16280cc5058fbf96a3  libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc
! 06b720ca86e3c150660272be1c20c686  libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc
! 3a85187302c43df0b5d7373d81783745  libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc
! 487138d29d457af64bf287c71b5ac498  libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc
! ff2f66de60b46a281fdf146958aa5cd8  libstdc++-v3/testsuite/25_algorithms/copy_n/5.cc
! e728334f59c842be79e5e1a9994779cb  libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc
! 11d5927a220ad115a5f463cf6033f290  libstdc++-v3/testsuite/25_algorithms/copy_n/58982.cc
! 0d94cb6fe4691c8c05c91e8327ff5114  libstdc++-v3/testsuite/25_algorithms/copy_n/constexpr.cc
! ef617eb959138f370f8d6d1f597d1d41  libstdc++-v3/testsuite/25_algorithms/copy_n/constrained.cc
! 7bb2930b1509d447255188a0124ca2c4  libstdc++-v3/testsuite/25_algorithms/copy_n/debug/1_neg.cc
! 4074e14bb2f9ca60a300fd6ce3b716b9  libstdc++-v3/testsuite/25_algorithms/copy_n/debug/2_neg.cc
! 4083c30fe908cd9660a67f06e9764604  libstdc++-v3/testsuite/25_algorithms/copy_n/debug/istreambuf_ite_deque_neg.cc
! 1f65e8f4b827390fb808bcdfc6436c23  libstdc++-v3/testsuite/25_algorithms/copy_n/istreambuf_iterator/1.cc
! ba1b0b6aa962c591f1626f71a674a306  libstdc++-v3/testsuite/25_algorithms/copy_n/istreambuf_iterator/1_neg.cc
! 4cb11f3da17c1caefcd564f3b736b1eb  libstdc++-v3/testsuite/25_algorithms/copy_n/istreambuf_iterator/2.cc
! ed49e2a091abb8074e4d57e0a81d1d1c  libstdc++-v3/testsuite/25_algorithms/copy_n/istreambuf_iterator/2_neg.cc
! 3078bd4de8a0d2ae4ee2674bd2a28735  libstdc++-v3/testsuite/25_algorithms/copy_n/istreambuf_iterator/deque.cc
! 6b28ead8a4d0259d5762445928676acd  libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc
! 4263c26f5dfc20e2ba7175ca30ac1ddf  libstdc++-v3/testsuite/25_algorithms/copy_n/requirements/explicit_instantiation/2.cc
! bddd8ec69103a1dba9efaac9f2271c2c  libstdc++-v3/testsuite/25_algorithms/copy_n/requirements/explicit_instantiation/pod.cc
! 78fb5d8414dbf2fb3b1bce60e1c8653f  libstdc++-v3/testsuite/25_algorithms/count/1.cc
! 4c06c9d29822cc0c501c0eb7946612da  libstdc++-v3/testsuite/25_algorithms/count/check_type.cc
! 0746e34348e64208f14d742a826241cc  libstdc++-v3/testsuite/25_algorithms/count/constexpr.cc
! a0501fc7a5f2d2b94faf80d3ca27740f  libstdc++-v3/testsuite/25_algorithms/count/constrained.cc
! 898318eefe35d54c37087ba3137a53c6  libstdc++-v3/testsuite/25_algorithms/count/requirements/explicit_instantiation/2.cc
! 75118fdfffdc8c0bffc5dfa47f4d9e7a  libstdc++-v3/testsuite/25_algorithms/count/requirements/explicit_instantiation/pod.cc
! 9f6dc81b3bd9e1fdc5cc88a604e232b5  libstdc++-v3/testsuite/25_algorithms/count_if/1.cc
! 4b953c74693ce4e96aecc91b1a8fd713  libstdc++-v3/testsuite/25_algorithms/count_if/check_type.cc
! 22d3b8b020412dbd37536a555b28f7bb  libstdc++-v3/testsuite/25_algorithms/count_if/constexpr.cc
! 13d3791d590e555690e6379ed6a980be  libstdc++-v3/testsuite/25_algorithms/count_if/constrained.cc
! f6acbf1a23fff6c855c2d9ec97b3fdc4  libstdc++-v3/testsuite/25_algorithms/count_if/requirements/explicit_instantiation/2.cc
! a53cc5e36503f375efe6d8d912baa583  libstdc++-v3/testsuite/25_algorithms/count_if/requirements/explicit_instantiation/pod.cc
! 3f91619d204ec0f1e175fc4bd222fbf6  libstdc++-v3/testsuite/25_algorithms/cpp_lib_constexpr.cc
! 4a2d972d68ab9087d2786be83e9d9cbb  libstdc++-v3/testsuite/25_algorithms/equal/1.cc
! c08fd15fb657b679b9a9cfb95e2a63b1  libstdc++-v3/testsuite/25_algorithms/equal/2.cc
! 75731329258ad0c61ed69568750fcea1  libstdc++-v3/testsuite/25_algorithms/equal/94013.cc
! 8c0bcc64648f6b0a62a1ea268f791e62  libstdc++-v3/testsuite/25_algorithms/equal/95578.cc
! 3d6fae1512b4e86079c1efce7c06e2d4  libstdc++-v3/testsuite/25_algorithms/equal/check_type.cc
! 172a0df6dc265dd889da56bf9baffe9e  libstdc++-v3/testsuite/25_algorithms/equal/check_type2.cc
! 321205ba65fe45207bfdea92466894a7  libstdc++-v3/testsuite/25_algorithms/equal/constexpr.cc
! 3cdbfb2bf2faf64f370a553e541651cc  libstdc++-v3/testsuite/25_algorithms/equal/constexpr_neg.cc
! bab5d550cc7c5262d25e78341d6442bb  libstdc++-v3/testsuite/25_algorithms/equal/constrained.cc
! e1a6cea037c01ec42b7d292e95c35490  libstdc++-v3/testsuite/25_algorithms/equal/debug/1_neg.cc
! 5b7f430a6ce4d843f465f8d1fbd74dec  libstdc++-v3/testsuite/25_algorithms/equal/debug/2_neg.cc
! e0b4f42e708e4b9dedb62dbdf622b8e2  libstdc++-v3/testsuite/25_algorithms/equal/debug/3_neg.cc
! b7f45fa25e8f49982f8c6c821d9f9c02  libstdc++-v3/testsuite/25_algorithms/equal/debug/constexpr_neg.cc
! 05b1de4284204b7162bf3b92b82acaa5  libstdc++-v3/testsuite/25_algorithms/equal/deque_iterators/1.cc
! ef0ed71ca0f466be1ed2af868761c94f  libstdc++-v3/testsuite/25_algorithms/equal/no_operator_ne.cc
! 28b5c14c58649ea2599978f8225a71e7  libstdc++-v3/testsuite/25_algorithms/equal/requirements/explicit_instantiation/2.cc
! c570619f12a1f5869836081070914df1  libstdc++-v3/testsuite/25_algorithms/equal/requirements/explicit_instantiation/pod.cc
! 627415a7fddcf23edd0aa8efa3f13c69  libstdc++-v3/testsuite/25_algorithms/equal_range/1.cc
! 69098dca74aa5a961b9a73e62497c673  libstdc++-v3/testsuite/25_algorithms/equal_range/2.cc
! d8425f87472f19a4f685823e26a94f1a  libstdc++-v3/testsuite/25_algorithms/equal_range/check_type.cc
! b4263f3ab20e116d569e29c3ecb4a525  libstdc++-v3/testsuite/25_algorithms/equal_range/constexpr.cc
! 447e8b1d50439e0b867b4d0dbc812de8  libstdc++-v3/testsuite/25_algorithms/equal_range/constrained.cc
! 4290d99693c401befdfbca118ea46dfa  libstdc++-v3/testsuite/25_algorithms/equal_range/partitioned.cc
! 569415f217ae94d5a24bd1b06d928337  libstdc++-v3/testsuite/25_algorithms/equal_range/requirements/explicit_instantiation/2.cc
! 096f5c3dadbe9feeb2293de3d94a3bdf  libstdc++-v3/testsuite/25_algorithms/equal_range/requirements/explicit_instantiation/pod.cc
! 6db4991f9bf2471dbdc3ae0945f9af66  libstdc++-v3/testsuite/25_algorithms/fill/1.cc
! fdadbd0508287a505eef916751ab6c74  libstdc++-v3/testsuite/25_algorithms/fill/2.cc
! 2834db5a53426ba7d8e2ea0f41c6c7c7  libstdc++-v3/testsuite/25_algorithms/fill/3.cc
! 7ce20b51c600f2b02df76fe99f3a6213  libstdc++-v3/testsuite/25_algorithms/fill/35725.cc
! 65dbbfd3045ddec5b13b829a58d8f545  libstdc++-v3/testsuite/25_algorithms/fill/4.cc
! 500766b6c0cf38b01c376501a147b0c3  libstdc++-v3/testsuite/25_algorithms/fill/94013.cc
! fd35a8637b2c05fc3606acfcdf14de7e  libstdc++-v3/testsuite/25_algorithms/fill/94017.cc
! ff880569cc92eb14b3b983472b24abe6  libstdc++-v3/testsuite/25_algorithms/fill/bvector/1.cc
! 7bc9bcd513486ad198e30af162b3d161  libstdc++-v3/testsuite/25_algorithms/fill/constexpr.cc
! 27fbe8ddda6735fca69178e8bc7bbb0b  libstdc++-v3/testsuite/25_algorithms/fill/constrained.cc
! 3e880deb41883c8ab4fdbcd03daea805  libstdc++-v3/testsuite/25_algorithms/fill/deque_iterators/1.cc
! 358000bba65216818ea4bc41b6ef55dd  libstdc++-v3/testsuite/25_algorithms/fill/requirements/explicit_instantiation/2.cc
! 560f8a06611fbcfc4b6d4e193a777ae3  libstdc++-v3/testsuite/25_algorithms/fill/requirements/explicit_instantiation/pod.cc
! 2805b5c74ef4afba2ef800f90a18e5d2  libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc
! 1f1cf231f8a6415d190b8ba3922a82a1  libstdc++-v3/testsuite/25_algorithms/fill_n/2.cc
! adb0f161f5e50502f44a4844e0556ada  libstdc++-v3/testsuite/25_algorithms/fill_n/25306.cc
! 542732f852db437171daa067e0dc5bc0  libstdc++-v3/testsuite/25_algorithms/fill_n/35725.cc
! 33e3f23eaff0f79ae4490be6d3c95d27  libstdc++-v3/testsuite/25_algorithms/fill_n/87982.cc
! bd12ad788a871ad7bc1200ce7ffffacf  libstdc++-v3/testsuite/25_algorithms/fill_n/87982_neg.cc
! 9cae8e7b121b221dd9e14d658a7926e1  libstdc++-v3/testsuite/25_algorithms/fill_n/94017.cc
! 2ef4dd995a04a06ddca0078ed51e41ce  libstdc++-v3/testsuite/25_algorithms/fill_n/constexpr.cc
! b4c841df5d024b63eea610c37d62e9dc  libstdc++-v3/testsuite/25_algorithms/fill_n/constrained.cc
! 7201a12995c263954600ba2f946368fc  libstdc++-v3/testsuite/25_algorithms/fill_n/debug/1_neg.cc
! c9442a86b817319cac8273413c0db9e6  libstdc++-v3/testsuite/25_algorithms/fill_n/debug/2_neg.cc
! 5d9cba9d7d7047d6049ed17de055f446  libstdc++-v3/testsuite/25_algorithms/fill_n/debug/3_neg.cc
! bcbc3c47d37a8361c9ea46307d78e738  libstdc++-v3/testsuite/25_algorithms/fill_n/debug/4_neg.cc
! e28d22a2d05b56763803a7aa51b76c32  libstdc++-v3/testsuite/25_algorithms/fill_n/dr426.cc
! 28b5c14c58649ea2599978f8225a71e7  libstdc++-v3/testsuite/25_algorithms/fill_n/requirements/explicit_instantiation/2.cc
! c570619f12a1f5869836081070914df1  libstdc++-v3/testsuite/25_algorithms/fill_n/requirements/explicit_instantiation/pod.cc
! 791fb196b1d8c152a846782bdd5ece4b  libstdc++-v3/testsuite/25_algorithms/find/1.cc
! 61988cb33dfd284eb880263ea660a1a0  libstdc++-v3/testsuite/25_algorithms/find/17441.cc
! 915febb8005e187d802557ef055a9ecd  libstdc++-v3/testsuite/25_algorithms/find/39546.cc
! 63f906013f7dfa9070fd549df3a2379d  libstdc++-v3/testsuite/25_algorithms/find/check_type.cc
! 4f28fc6481b5464d9ac60abf61077a87  libstdc++-v3/testsuite/25_algorithms/find/constexpr.cc
! db68a0ca6d066b6bdeb073d1cb05800c  libstdc++-v3/testsuite/25_algorithms/find/constrained.cc
! 6380837015b428e6505a3e9ef17b849b  libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc
! d6bf36d3178e04358be7357ed2e60182  libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc
! 9da4946f0681aad3fab7bfc36d537e62  libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc
! 0e46ab025c440695a18f6b8747861c6c  libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc
! eb2dafcd7ae58f1dce89b54d17951126  libstdc++-v3/testsuite/25_algorithms/find/requirements/explicit_instantiation/2.cc
! 7ced3ac6704bca5b576573177cc1e0e5  libstdc++-v3/testsuite/25_algorithms/find/requirements/explicit_instantiation/pod.cc
! d6292640a43273fcca5c196a4b8e183f  libstdc++-v3/testsuite/25_algorithms/find/vectorbool.cc
! 78be7d4f448b3828b2ec63e23165ce98  libstdc++-v3/testsuite/25_algorithms/find_end/1.cc
! d4458de1a78a2e1b19173033381cdba5  libstdc++-v3/testsuite/25_algorithms/find_end/check_type.cc
! a2468439b321fe1e207833ef63f8ac91  libstdc++-v3/testsuite/25_algorithms/find_end/constexpr.cc
! 6f2aa71b6b0fc2db61be52635ff2caa7  libstdc++-v3/testsuite/25_algorithms/find_end/constrained.cc
! f0a5c229e329cf6a37fb394388f27190  libstdc++-v3/testsuite/25_algorithms/find_end/requirements/explicit_instantiation/2.cc
! 34a5987d04f3e959c2949496d5114f15  libstdc++-v3/testsuite/25_algorithms/find_end/requirements/explicit_instantiation/pod.cc
! d17dbfe46956da4a6e8e1d8eae3ce843  libstdc++-v3/testsuite/25_algorithms/find_end/vectorbool.cc
! 59719357bf287fdc43a6639382c59337  libstdc++-v3/testsuite/25_algorithms/find_first_of/1.cc
! 3c42ffbcfd5a8f223c574c0af90f02cd  libstdc++-v3/testsuite/25_algorithms/find_first_of/check_type.cc
! 836853f736bff16daaa8a60bba9d8c35  libstdc++-v3/testsuite/25_algorithms/find_first_of/concept_check_1.cc
! e60ab11e378e6417c082cad077e73d74  libstdc++-v3/testsuite/25_algorithms/find_first_of/constexpr.cc
! 4c7505fc775129b5c836712b2bcb458c  libstdc++-v3/testsuite/25_algorithms/find_first_of/constrained.cc
! c7524bb80a1303a1edbe1bab53a5040f  libstdc++-v3/testsuite/25_algorithms/find_first_of/requirements/explicit_instantiation/2.cc
! 4d5c676e4f4eb9e3567bf7c3ae3b90d8  libstdc++-v3/testsuite/25_algorithms/find_first_of/requirements/explicit_instantiation/pod.cc
! 0a079a319bb43e5e09dc99a5efbc4d3c  libstdc++-v3/testsuite/25_algorithms/find_first_of/vectorbool.cc
! ef4ad5d97edd9b8cd38d2843a762cb00  libstdc++-v3/testsuite/25_algorithms/find_if/1.cc
! b698b7d8aa84e97482fb6a6512d28eed  libstdc++-v3/testsuite/25_algorithms/find_if/check_type.cc
! e976c5b413175600f2ffc12263d9854c  libstdc++-v3/testsuite/25_algorithms/find_if/constexpr.cc
! 55b3d80b873fa3ba8669ae1376f7071a  libstdc++-v3/testsuite/25_algorithms/find_if/constrained.cc
! 2126c05dbb4c95e8729dc67658867b32  libstdc++-v3/testsuite/25_algorithms/find_if/requirements/explicit_instantiation/2.cc
! e2c6bf90c0546c776c6de471828b8304  libstdc++-v3/testsuite/25_algorithms/find_if/requirements/explicit_instantiation/pod.cc
! d6292640a43273fcca5c196a4b8e183f  libstdc++-v3/testsuite/25_algorithms/find_if/vectorbool.cc
! 3527589ca665a67c6ea032c6ae08bbce  libstdc++-v3/testsuite/25_algorithms/find_if_not/1.cc
! 3a8fc358f33eb82139d1d330d57eede8  libstdc++-v3/testsuite/25_algorithms/find_if_not/check_type.cc
! 4b913152696a2f9d8a6a43abd5ef21bd  libstdc++-v3/testsuite/25_algorithms/find_if_not/constexpr.cc
! 073de63a574b7876419a75220c23b99f  libstdc++-v3/testsuite/25_algorithms/find_if_not/constrained.cc
! 73cb5981bb61a8932e24a61136d7c9af  libstdc++-v3/testsuite/25_algorithms/find_if_not/requirements/explicit_instantiation/2.cc
! a7f4c862382b5457479543595bbe994e  libstdc++-v3/testsuite/25_algorithms/find_if_not/requirements/explicit_instantiation/pod.cc
! c083b40b562b97966bc2ad1edf800426  libstdc++-v3/testsuite/25_algorithms/find_if_not/vectorbool.cc
! 02953c5b049327e2cbac0a2c4b9d1890  libstdc++-v3/testsuite/25_algorithms/for_each/1.cc
! d57c3ae09b652dbf086fa4472d042635  libstdc++-v3/testsuite/25_algorithms/for_each/constexpr.cc
! f1fdf0d44bfcbcfc709aeff60e0c6610  libstdc++-v3/testsuite/25_algorithms/for_each/constrained.cc
! d663f10b088f4a73c1797ce9e50530af  libstdc++-v3/testsuite/25_algorithms/for_each/for_each_n.cc
! 573cbc8c2e7af33d39e16f19f43851b4  libstdc++-v3/testsuite/25_algorithms/for_each/for_each_n_debug.cc
! bc54b4db5563053cbe133fca9a5b8c8b  libstdc++-v3/testsuite/25_algorithms/for_each/requirements/explicit_instantiation/2.cc
! 71d9fba1b5b0fd6d8fc0c46c55274290  libstdc++-v3/testsuite/25_algorithms/for_each/requirements/explicit_instantiation/pod.cc
! 7567ef8046ab3eda4d87559aedd7100e  libstdc++-v3/testsuite/25_algorithms/generate/constexpr.cc
! 533496860012d08333fac4fa5517f9e9  libstdc++-v3/testsuite/25_algorithms/generate/constrained.cc
! c8ca094e079fd3995e9d2f012eb78fee  libstdc++-v3/testsuite/25_algorithms/generate/requirements/explicit_instantiation/2.cc
! af8af84e0a0aadcd8d0a61b701e60d82  libstdc++-v3/testsuite/25_algorithms/generate/requirements/explicit_instantiation/pod.cc
! fa8ae2a0f2bd2faad156d10cff9d596a  libstdc++-v3/testsuite/25_algorithms/generate_n/1.cc
! 6f519547986882f698c2b764a5486610  libstdc++-v3/testsuite/25_algorithms/generate_n/25306.cc
! 60d6b1cb772c5a99b18b540e0964a8e2  libstdc++-v3/testsuite/25_algorithms/generate_n/87982.cc
! b057e5104e4bc874b02cec85799369f7  libstdc++-v3/testsuite/25_algorithms/generate_n/87982_neg.cc
! 253e2e1d9bf6cbb5827d7373c182a410  libstdc++-v3/testsuite/25_algorithms/generate_n/constexpr.cc
! 426f907837ad07214ccd85a7361e7464  libstdc++-v3/testsuite/25_algorithms/generate_n/constrained.cc
! 5f04efa2ba5a75d6311ddff6894a997a  libstdc++-v3/testsuite/25_algorithms/generate_n/dr426.cc
! ae29a3354b6387fb44db95c3ab76d096  libstdc++-v3/testsuite/25_algorithms/generate_n/requirements/explicit_instantiation/2.cc
! b7bc1216510e545404b388657eb769ce  libstdc++-v3/testsuite/25_algorithms/generate_n/requirements/explicit_instantiation/pod.cc
! ab8843182974e48c0eacea71898279f1  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/algorithm_parallel_mode.cc
! f781b3cd51ad89fd392338a3ad2ca53e  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm.cc
! 713c8854bac9001e6767129ce98ba46e  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_assert.cc
! a4295d74406f0076c94c68ce7393237f  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_assert2.cc
! 4d551bb62137c1f74896a20b2f17748a  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed1.cc
! 73a89692db4ac45ccd4083235b118444  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed2.cc
! a17588c37544b437d9a4b58f524e49a9  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/synopsis.cc
! fe357b5ddb22a61b4d529ba2261bcd64  libstdc++-v3/testsuite/25_algorithms/headers/cstdlib/functions_std.cc
! c553672d90e17cedf522e53041e82367  libstdc++-v3/testsuite/25_algorithms/heap/1.cc
! 4824d40e4857770b7c35f8d476b410a4  libstdc++-v3/testsuite/25_algorithms/heap/constrained.cc
! 76a2b9721a8cf2a58c835f1d175638f2  libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc
! f3c2dc94659ece550362b9e37eb8f730  libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc
! 9bdcc93d13934d182fc5e944c0a3fac2  libstdc++-v3/testsuite/25_algorithms/heap/vectorbool.cc
! f7ab5637fab5d76b5434e176f441605f  libstdc++-v3/testsuite/25_algorithms/includes/1.cc
! 8d4ee4addd69695a4e2fcffa82db6554  libstdc++-v3/testsuite/25_algorithms/includes/check_type.cc
! 209401088fe05e6cf1a0962153afa3d0  libstdc++-v3/testsuite/25_algorithms/includes/constrained.cc
! 730de0c7eb56de8bb7b4d349cc9a95e5  libstdc++-v3/testsuite/25_algorithms/includes/requirements/explicit_instantiation/2.cc
! b7c7a6abdcaae2ff75e01a0483e447f8  libstdc++-v3/testsuite/25_algorithms/includes/requirements/explicit_instantiation/pod.cc
! 8eedb00016ec8b3a0cb7bf7175c7516e  libstdc++-v3/testsuite/25_algorithms/inplace_merge/1.cc
! 27c4ce5b48eab4f5004df952a0a8ac03  libstdc++-v3/testsuite/25_algorithms/inplace_merge/49559.cc
! 5a0ecf991ebefb635862f95709a92632  libstdc++-v3/testsuite/25_algorithms/inplace_merge/check_type.cc
! ff9a546a83d866bc8a16bab65c3280b5  libstdc++-v3/testsuite/25_algorithms/inplace_merge/constrained.cc
! 2ee05f77956043657b5dc59ba3e26066  libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable.cc
! 1c6ca192cef4456e994d486800e162a2  libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable2.cc
! 8264beab8b9789d324ee71de5994c30d  libstdc++-v3/testsuite/25_algorithms/inplace_merge/requirements/explicit_instantiation/2.cc
! 8f0a148707a6d50625e9135b46c829fa  libstdc++-v3/testsuite/25_algorithms/inplace_merge/requirements/explicit_instantiation/pod.cc
! ab86276cb4d9ff7e077d3624aa1d286f  libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc
! 7efe10ff19c181b51b8368dd189cf909  libstdc++-v3/testsuite/25_algorithms/is_heap/constexpr.cc
! 6b899f05721c8cdd3416e3f544e30b3f  libstdc++-v3/testsuite/25_algorithms/is_heap/requirements/explicit_instantiation/2.cc
! af5e07be95e905e8fed0614934e3dd2a  libstdc++-v3/testsuite/25_algorithms/is_heap/requirements/explicit_instantiation/pod.cc
! 845394b8b2503d23855e2cff04d941e0  libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc
! a9e84df520a345f1fa913d0ffe9da26e  libstdc++-v3/testsuite/25_algorithms/is_heap_until/constexpr.cc
! 25700e1495d0038bc4eb799f198100ca  libstdc++-v3/testsuite/25_algorithms/is_heap_until/requirements/explicit_instantiation/2.cc
! 1ee546283ee5be0f713592d7dc749501  libstdc++-v3/testsuite/25_algorithms/is_heap_until/requirements/explicit_instantiation/pod.cc
! 0466924c76bf1ab717f5bd614d2855ab  libstdc++-v3/testsuite/25_algorithms/is_partitioned/1.cc
! dd0b2aca49bb7670c2ae78d31414441d  libstdc++-v3/testsuite/25_algorithms/is_partitioned/2.cc
! e0a10b226f45c3a9c39ab0cf55e1b893  libstdc++-v3/testsuite/25_algorithms/is_partitioned/check_type.cc
! 1cbfefa0f6e3070ffcbb7b73beeb7255  libstdc++-v3/testsuite/25_algorithms/is_partitioned/constexpr.cc
! df92f1850791a4b570bc0caf81b14dc0  libstdc++-v3/testsuite/25_algorithms/is_partitioned/constrained.cc
! 8b118095e31c63a13ec30f202389ed2f  libstdc++-v3/testsuite/25_algorithms/is_partitioned/requirements/explicit_instantiation/2.cc
! 6506c41f3ae28d97c1fc7d9b2cdc001b  libstdc++-v3/testsuite/25_algorithms/is_partitioned/requirements/explicit_instantiation/pod.cc
! f5bb5f715db38a2f535c7afc9df34ed8  libstdc++-v3/testsuite/25_algorithms/is_permutation/1.cc
! 4125f0168bb803df302c4adeb0483723  libstdc++-v3/testsuite/25_algorithms/is_permutation/2.cc
! 3e3b1d3a41e2a78ad719c161460c5037  libstdc++-v3/testsuite/25_algorithms/is_permutation/64646.cc
! 531ba80c472bd96de3ba4d54728eaaaa  libstdc++-v3/testsuite/25_algorithms/is_permutation/check_type.cc
! d4eb6bf76f91ff3174a4d69816cd866d  libstdc++-v3/testsuite/25_algorithms/is_permutation/check_type2.cc
! 67d43049bb9d99bdde74ea57394e5e96  libstdc++-v3/testsuite/25_algorithms/is_permutation/constexpr.cc
! 52a923bb59cb4ee07eba2458f7ce9ceb  libstdc++-v3/testsuite/25_algorithms/is_permutation/constrained.cc
! 20d230c38a0b1142163c4b79a0f6b5fb  libstdc++-v3/testsuite/25_algorithms/is_permutation/requirements/explicit_instantiation/2.cc
! fbb20a4f7a8b90203cdbaebc825668ed  libstdc++-v3/testsuite/25_algorithms/is_permutation/requirements/explicit_instantiation/pod.cc
! 74f1bb749020f13d841d51e77325824f  libstdc++-v3/testsuite/25_algorithms/is_permutation/vectorbool.cc
! 50083aaf403d774b682ee0979690e782  libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc
! 5b3099e32c6f585d1d746e5255b4140d  libstdc++-v3/testsuite/25_algorithms/is_sorted/constexpr.cc
! 169bd743975d02bd23591055df9e4fb9  libstdc++-v3/testsuite/25_algorithms/is_sorted/constrained.cc
! c6f500f00e44bbd96ff35487daf6d145  libstdc++-v3/testsuite/25_algorithms/is_sorted/requirements/explicit_instantiation/2.cc
! 53e42f5591be4ac8b982c2b9088ebbae  libstdc++-v3/testsuite/25_algorithms/is_sorted/requirements/explicit_instantiation/pod.cc
! 2e14a0d7001767d6a1fc6c04bf503862  libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc
! 442e943665e95ec06e1a4605c9a2ad1e  libstdc++-v3/testsuite/25_algorithms/is_sorted_until/constexpr.cc
! 9c078a277aa8da2a3f659a5045a40375  libstdc++-v3/testsuite/25_algorithms/is_sorted_until/constrained.cc
! 96b43f9e982cfd6b33897850be9e8e24  libstdc++-v3/testsuite/25_algorithms/is_sorted_until/requirements/explicit_instantiation/2.cc
! d8bbaa894499fca1c91a37928e5bb723  libstdc++-v3/testsuite/25_algorithms/is_sorted_until/requirements/explicit_instantiation/pod.cc
! 211a987128d1d427edbe066bb5fe6374  libstdc++-v3/testsuite/25_algorithms/iter_swap/20577.cc
! c286a2e2252d85d98049125fdafd4f26  libstdc++-v3/testsuite/25_algorithms/iter_swap/constexpr.cc
! d8ddd7801dcd57b02b7cc59b69d89c6f  libstdc++-v3/testsuite/25_algorithms/iter_swap/requirements/explicit_instantiation/2.cc
! 35413b292b9b0d672248a425a0683158  libstdc++-v3/testsuite/25_algorithms/iter_swap/requirements/explicit_instantiation/pod.cc
! b2f448255e54be9b4fac7edbf2143487  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/1.cc
! 9b76a42693f98445cdd65b810ace48e1  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc
! f427f9830493e633c3f13019712b70f1  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/93972.cc
! 5cd700af43bccab7a8b90a86a9b8ab3b  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/94013.cc
! 815c0bdc27100468d4090253b2c53d89  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/95578.cc
! 126e9692de96cfe9c31afe48af868580  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/check_type.cc
! 4819aa98066d478fce0ec878d586112a  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/constexpr.cc
! 5177aa792b200226e0caa89c78cc3851  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/constrained.cc
! 1a1a9a14d1238c80283819a69fce6d91  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/deque_iterators/1.cc
! 3b19786189f36f21b08bda28d4c855c8  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/requirements/explicit_instantiation/2.cc
! c49a93ba5f42ad7385af4b2d1ff4ba82  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/requirements/explicit_instantiation/pod.cc
! 640fc753c0c48c0dd3d8a547f2c2087c  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/uchar.cc
! b056a7493beddef63083d87f003f557e  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/1.cc
! 6dfb017270378eab34d0c7c47bc7a9aa  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/constexpr.cc
! 389a6a205e6be8d24ba5d6a93282ace6  libstdc++-v3/testsuite/25_algorithms/lower_bound/1.cc
! 94e4d1fb0c2e04394a67f27d5f0ebc9f  libstdc++-v3/testsuite/25_algorithms/lower_bound/2.cc
! a70a0c54e03727302f807b7f88e0601a  libstdc++-v3/testsuite/25_algorithms/lower_bound/33613.cc
! ef1832bb3742a1b2baf2dedb09fd4db9  libstdc++-v3/testsuite/25_algorithms/lower_bound/check_type.cc
! 2017a6634921053f0fdaf3bf3ecaa14c  libstdc++-v3/testsuite/25_algorithms/lower_bound/constexpr.cc
! 66fe5267a4b3627599610922d8d38f2e  libstdc++-v3/testsuite/25_algorithms/lower_bound/constrained.cc
! 0f94d514da809355db8e496ef2d4ca35  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_neg.cc
! 71a18d62448f75ca376a6a2bd0e7da09  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_pred_neg.cc
! 60055748c1534b9f6e1066160eb0c64e  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_valid_range_neg.cc
! 422e3fac25c6b0491659d070dbdd2ba5  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/irreflexive.cc
! d397292596b3ba88558d12f1310c26a3  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_neg.cc
! 9a50f0858fbee8c3e04175b275baac1a  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_pred_neg.cc
! 369bcbb0889ac20378667a89ecb1a9f4  libstdc++-v3/testsuite/25_algorithms/lower_bound/no_operator_ne.cc
! 639c9618ee56a2e8d1fee38f039ff18e  libstdc++-v3/testsuite/25_algorithms/lower_bound/partitioned.cc
! 5942004f9af89f2b297fc35b42536942  libstdc++-v3/testsuite/25_algorithms/lower_bound/requirements/explicit_instantiation/2.cc
! a25dd68d0df2cb1f2e20360c4c705b88  libstdc++-v3/testsuite/25_algorithms/lower_bound/requirements/explicit_instantiation/pod.cc
! b693c1309b4ecbd750b186c229f5e058  libstdc++-v3/testsuite/25_algorithms/make_heap/80064.cc
! 1aea4786f272c52f8069ebbba71776d9  libstdc++-v3/testsuite/25_algorithms/make_heap/complexity.cc
! 123d8fec445c2c76deb84b5facd9bd1b  libstdc++-v3/testsuite/25_algorithms/make_heap/constexpr.cc
! e89a91d12b8e2062970f4a4b0fea8830  libstdc++-v3/testsuite/25_algorithms/make_heap/movable.cc
! 53f9cbdc4bfdc082e58c27402725d8ba  libstdc++-v3/testsuite/25_algorithms/make_heap/requirements/explicit_instantiation/2.cc
! cbe779094674767f2d7b69a444a0702c  libstdc++-v3/testsuite/25_algorithms/make_heap/requirements/explicit_instantiation/pod.cc
! 18fbdbc66d65fbc8bc4f813b6b1d59be  libstdc++-v3/testsuite/25_algorithms/max/1.cc
! bf0b48755e930aa09ed55a3d7094ac47  libstdc++-v3/testsuite/25_algorithms/max/2.cc
! cf7a864782c702d1a69a1103072a49f4  libstdc++-v3/testsuite/25_algorithms/max/3.cc
! 7344367a957e8cce10e079234bc8b3e2  libstdc++-v3/testsuite/25_algorithms/max/37547.cc
! 92d28c4b55436defe5bebf8598abff13  libstdc++-v3/testsuite/25_algorithms/max/4.cc
! 5edbbed3052a03813f9f07b04b034d65  libstdc++-v3/testsuite/25_algorithms/max/constexpr.cc
! 7d22d9843a843a468aa44d720e2b07ad  libstdc++-v3/testsuite/25_algorithms/max/constrained.cc
! 7e8587683731274b994ffb5940353d06  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/2.cc
! 9983d129fe019aa822ea24b9843d8973  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/3.cc
! f969b6ac5aa260ff37801d578a1f0306  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/pod.cc
! 398562318aae4032823f28592d0b057f  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/pod2.cc
! c4a8ac0e249df133044e32e857c15a44  libstdc++-v3/testsuite/25_algorithms/max_element/1.cc
! d7f9be8ca50dee1477ede4ee50a33f23  libstdc++-v3/testsuite/25_algorithms/max_element/check_type.cc
! 4208984011e982432092948f1a7ca067  libstdc++-v3/testsuite/25_algorithms/max_element/constexpr.cc
! f36ea1dd6487e02afcf934f91693fe14  libstdc++-v3/testsuite/25_algorithms/max_element/constrained.cc
! e0bb1ea688398b5a8b665a0b6ed5f470  libstdc++-v3/testsuite/25_algorithms/max_element/requirements/explicit_instantiation/2.cc
! b67b077358d0e023f813392ca1c41da4  libstdc++-v3/testsuite/25_algorithms/max_element/requirements/explicit_instantiation/pod.cc
! 4ad53b6f4155f1d4e1a7d4d1a450d28a  libstdc++-v3/testsuite/25_algorithms/merge/1.cc
! a4826771d4aef1f7191e1aff4b11ebe0  libstdc++-v3/testsuite/25_algorithms/merge/check_type.cc
! 551eef27b7c1ef921cb11bb2e35c8648  libstdc++-v3/testsuite/25_algorithms/merge/constexpr.cc
! fb3b3bac331848766589b984b77ad42f  libstdc++-v3/testsuite/25_algorithms/merge/constrained.cc
! 584708968e11060244dfbf910669c5f8  libstdc++-v3/testsuite/25_algorithms/merge/requirements/explicit_instantiation/2.cc
! e5916ef842e1968ecfe19e333d2f3cad  libstdc++-v3/testsuite/25_algorithms/merge/requirements/explicit_instantiation/pod.cc
! 59effef56057d59e6865a7cd4a6c8cf1  libstdc++-v3/testsuite/25_algorithms/min/1.cc
! d8ad4a196cc241dc57a4723c5d67eb05  libstdc++-v3/testsuite/25_algorithms/min/2.cc
! 07d9a620b596942bb50b41b72c1c3196  libstdc++-v3/testsuite/25_algorithms/min/3.cc
! dbcddd5872e0f261ee8ef964af38ca1a  libstdc++-v3/testsuite/25_algorithms/min/37547.cc
! 1a532211c8bedf82ab07217537b96ad5  libstdc++-v3/testsuite/25_algorithms/min/4.cc
! 9984db5f621dcf9e1180349d1776f22b  libstdc++-v3/testsuite/25_algorithms/min/concept_checks.cc
! 83c7a536cd74207a392bc56ec48247b5  libstdc++-v3/testsuite/25_algorithms/min/constexpr.cc
! 7f1652eb05bbc4d86a02a16280f77ed0  libstdc++-v3/testsuite/25_algorithms/min/constrained.cc
! 14be8495ee1a32aec87992918a6e4c10  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/2.cc
! d465b2e1b504bd0fa7f35a536ab7e03b  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/3.cc
! 5886a218d4cd37c1af9155d9278680b8  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/pod.cc
! f5ce6278c3627b7625487bf88be7ea69  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/pod2.cc
! 46edb5c3ebdcb5db7024ebb70e78b502  libstdc++-v3/testsuite/25_algorithms/min_element/1.cc
! f4a81889495f0558fcc681508b69fc26  libstdc++-v3/testsuite/25_algorithms/min_element/check_type.cc
! 2ee375b4e131976993297c4ac5dc13b7  libstdc++-v3/testsuite/25_algorithms/min_element/constexpr.cc
! 60b6e4bb4de27abdec3143519cdebc6e  libstdc++-v3/testsuite/25_algorithms/min_element/constrained.cc
! 096ad87e8e95012294bd76acaadf1c79  libstdc++-v3/testsuite/25_algorithms/min_element/requirements/explicit_instantiation/2.cc
! 3a7ab26271072669095d1fc8b0b6b656  libstdc++-v3/testsuite/25_algorithms/min_element/requirements/explicit_instantiation/pod.cc
! 04d16949e3d9e5faf70d00783e872221  libstdc++-v3/testsuite/25_algorithms/minmax/1.cc
! 19526fb0e45100fc19779753d1c76a24  libstdc++-v3/testsuite/25_algorithms/minmax/2.cc
! 45a1b3c03a775fac98745f03d2ed8bdf  libstdc++-v3/testsuite/25_algorithms/minmax/3.cc
! 293067558fba9a70a64a4710dd94835c  libstdc++-v3/testsuite/25_algorithms/minmax/37547.cc
! 24f01081ff3ac5d333835c9dde39d846  libstdc++-v3/testsuite/25_algorithms/minmax/constexpr.cc
! 3cbb59fb29129c037adb6fdd48be7759  libstdc++-v3/testsuite/25_algorithms/minmax/constrained.cc
! 42b3601531899a7d9f65fc286f5a7ab6  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/2.cc
! 80815723e26d59dcf6f075698ae16fd8  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/3.cc
! 15440a38bc0046faef9d709982757cc1  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/pod.cc
! 8eae20ab5711fd0499542495839b9a19  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/pod2.cc
! 1dbe660dc6ef92e664b4cdde30af491e  libstdc++-v3/testsuite/25_algorithms/minmax_element/1.cc
! 59e201bc09d73893ef5b9b271ed388aa  libstdc++-v3/testsuite/25_algorithms/minmax_element/check_type.cc
! 7542fc4fbed293ccac58660be7c44702  libstdc++-v3/testsuite/25_algorithms/minmax_element/constexpr.cc
! 1052569ad55f5cc4f09c1bc571a6b5ad  libstdc++-v3/testsuite/25_algorithms/minmax_element/constrained.cc
! 9f3b9eb73d4e19d138467eb60a44c70c  libstdc++-v3/testsuite/25_algorithms/minmax_element/requirements/explicit_instantiation/2.cc
! fcd5f32b02ece62486f4aeda569f4b47  libstdc++-v3/testsuite/25_algorithms/minmax_element/requirements/explicit_instantiation/pod.cc
! 063d1309645d9b424c692fb67dbf21e6  libstdc++-v3/testsuite/25_algorithms/mismatch/1.cc
! b0a91d9cc835866b802fec64257c942b  libstdc++-v3/testsuite/25_algorithms/mismatch/2.cc
! 0a01553643b9e570282a76a0460d827d  libstdc++-v3/testsuite/25_algorithms/mismatch/check_type.cc
! 717dc9d0b53fa844695d211ce7203ab0  libstdc++-v3/testsuite/25_algorithms/mismatch/check_type2.cc
! 5bc1608c08a8a3bce3a3086989e37412  libstdc++-v3/testsuite/25_algorithms/mismatch/constexpr.cc
! 7eafbd685f151101bb7d72e8347e75c4  libstdc++-v3/testsuite/25_algorithms/mismatch/constrained.cc
! ce52165e7b64c4474cd7a4510b678819  libstdc++-v3/testsuite/25_algorithms/move/1.cc
! fe2d7d571db188f036d9f737a42d9631  libstdc++-v3/testsuite/25_algorithms/move/69478.cc
! 138597d597be1c7bb6bf760221951b1c  libstdc++-v3/testsuite/25_algorithms/move/93872.cc
! c481e5e926bd5482086f725fee988614  libstdc++-v3/testsuite/25_algorithms/move/94013.cc
! 7f4c47f2585231deb19c22a359d2abd4  libstdc++-v3/testsuite/25_algorithms/move/95578.cc
! 5d57a7c1d0519d60477b53cdbcb8e7bb  libstdc++-v3/testsuite/25_algorithms/move/constexpr.cc
! 51a03c07bbcbb89a9cf9412a4b64ce26  libstdc++-v3/testsuite/25_algorithms/move/constrained.cc
  c41fedc68e3cee79d652221a1c6b2c9a  libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc
! 7f90edf77fe9772f53a72430e8d69939  libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/2.cc
! a11b8b4d9f3bd35a40fe63156a9ae025  libstdc++-v3/testsuite/25_algorithms/move/requirements/explicit_instantiation/2.cc
! 24ea58a5dcb06858a17aeea27e49ad7b  libstdc++-v3/testsuite/25_algorithms/move/requirements/explicit_instantiation/pod.cc
! 025a568a748cea04ba976fa43f889dec  libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc
! 09bdf72b12f3bb192b13aae03c1edd0e  libstdc++-v3/testsuite/25_algorithms/move_backward/69478.cc
! 321a7966b5c778f6269bbc45ad2345bf  libstdc++-v3/testsuite/25_algorithms/move_backward/93872.cc
! ae7d0d9b0557e478afe1e1d9271f643a  libstdc++-v3/testsuite/25_algorithms/move_backward/94013.cc
! b4abdf61f07d3083da7ffd10b2088ff4  libstdc++-v3/testsuite/25_algorithms/move_backward/95578.cc
! 5d93bf59efb8d931dcb94e16418b2941  libstdc++-v3/testsuite/25_algorithms/move_backward/constrained.cc
  d798b4d62b339492aca582244b60767f  libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc
! 0c482a5205fb68027c67438d883cace4  libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/2.cc
! 8ddd7fd34b55d04e3fbf5e9d1c73ae0a  libstdc++-v3/testsuite/25_algorithms/move_backward/requirements/explicit_instantiation/2.cc
! 9390e9a096f634f2f272a8a8c0dc49cf  libstdc++-v3/testsuite/25_algorithms/move_backward/requirements/explicit_instantiation/pod.cc
! 04e4c27d889cd706327f80c07a4d90f3  libstdc++-v3/testsuite/25_algorithms/next_permutation/1.cc
! 2808fd168ac1c238e8bec3d66d769149  libstdc++-v3/testsuite/25_algorithms/next_permutation/check_type.cc
! 056a51d5b11f4b35c1f045a175a30f48  libstdc++-v3/testsuite/25_algorithms/next_permutation/constexpr.cc
! 45c2578ff44a26dca5dcf0c1abcbfe21  libstdc++-v3/testsuite/25_algorithms/next_permutation/constrained.cc
! 083a069f4d843d4ec37639f47bc8aa7e  libstdc++-v3/testsuite/25_algorithms/next_permutation/moveable.cc
! fbfc97eb5736112945600f348b1acb7b  libstdc++-v3/testsuite/25_algorithms/next_permutation/requirements/explicit_instantiation/2.cc
! e0c809e211f0884c2a391b630ed27aed  libstdc++-v3/testsuite/25_algorithms/next_permutation/requirements/explicit_instantiation/pod.cc
! 6743630dd87ecf7c775cad0839058d50  libstdc++-v3/testsuite/25_algorithms/none_of/1.cc
! fefbcb966089d87caddcf2b28f2c46b9  libstdc++-v3/testsuite/25_algorithms/none_of/check_type.cc
! 35068d82621a8305d59e1ffc09e907a1  libstdc++-v3/testsuite/25_algorithms/none_of/constexpr.cc
! 66587a58de677c02ea3ee053d7f3597e  libstdc++-v3/testsuite/25_algorithms/none_of/constrained.cc
! aafb3344f004007c7e81a42f8c42069c  libstdc++-v3/testsuite/25_algorithms/none_of/requirements/explicit_instantiation/2.cc
! 20f146fbc17cb0bfbc09fbcaae71b164  libstdc++-v3/testsuite/25_algorithms/none_of/requirements/explicit_instantiation/pod.cc
! 332b96ab552635aeee52560a7aa09df3  libstdc++-v3/testsuite/25_algorithms/nth_element/1.cc
! d902451c78f7e0837847f810a9b2e34e  libstdc++-v3/testsuite/25_algorithms/nth_element/2.cc
! d21db11f863c109a079c1ac7d6f37a0a  libstdc++-v3/testsuite/25_algorithms/nth_element/3.cc
! ddc621bf3b08ce2f28e7ff7ea3f6e68d  libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc
! 842afeb9aec3b749b45119b80d92bbbe  libstdc++-v3/testsuite/25_algorithms/nth_element/check_type.cc
! 458d8dd5f9a162640b657ef7a02b8ac8  libstdc++-v3/testsuite/25_algorithms/nth_element/constexpr.cc
! eae8f1e6f8506168cae8099ea1c2523d  libstdc++-v3/testsuite/25_algorithms/nth_element/constrained.cc
! b63739c78eb97c41affb0d33d8f03bc7  libstdc++-v3/testsuite/25_algorithms/nth_element/moveable.cc
! 32dbc34d16af5720a46bbff375f2d8e0  libstdc++-v3/testsuite/25_algorithms/nth_element/random_test.cc
! a65131c2340063dc457f9303d2c28ab3  libstdc++-v3/testsuite/25_algorithms/nth_element/requirements/explicit_instantiation/2.cc
! 4070161188ddc7e3bc90b38b617e44b8  libstdc++-v3/testsuite/25_algorithms/nth_element/requirements/explicit_instantiation/pod.cc
! 83e912b737610da11e7ea2ec588ba00b  libstdc++-v3/testsuite/25_algorithms/partial_sort/1.cc
! f3fe230ccdab027c278d713a83982839  libstdc++-v3/testsuite/25_algorithms/partial_sort/2.cc
! f3846a2c5c9257977dd12371715a6f20  libstdc++-v3/testsuite/25_algorithms/partial_sort/check_compare_by_value.cc
! 0e07b33a046dd6d05183540fb49a8dd5  libstdc++-v3/testsuite/25_algorithms/partial_sort/check_type.cc
! 4c5210d61264d8ea7ec5c23a60aa0f60  libstdc++-v3/testsuite/25_algorithms/partial_sort/constexpr.cc
! c2846111eb33b84a19e05354655f4cef  libstdc++-v3/testsuite/25_algorithms/partial_sort/constrained.cc
! 1314f6eb6523aff82e39cfc49167bfa7  libstdc++-v3/testsuite/25_algorithms/partial_sort/moveable.cc
! 0e328263cc6a4c8b46f4fd5c44bb0796  libstdc++-v3/testsuite/25_algorithms/partial_sort/random_test.cc
! b6a901a019e52c7531462855fb5e27c5  libstdc++-v3/testsuite/25_algorithms/partial_sort/requirements/explicit_instantiation/2.cc
! 5c1a12fd938a6b8c58ba93e5206caf61  libstdc++-v3/testsuite/25_algorithms/partial_sort/requirements/explicit_instantiation/pod.cc
! fa3f03089b402bffd19c3f5cca4e2122  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/1.cc
! fbbeedb720672a900d8f7aa63ab86097  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/2.cc
! 1a790e37ca71f7cb6b9dcf21e50f698e  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/check_type.cc
! fd27b855091f8dbfe49fcd9f26cef2d9  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/constexpr.cc
! 3236cfff4b4c691de54f935a0bc8a685  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/constrained.cc
! 571074709bd13a21cd1957333abaf7fe  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/debug/irreflexive_neg.cc
! 928eb7550c1b2aef523197c721b2824d  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/random_test.cc
! 00307f559e6c533634dcea019df3f7c0  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/requirements/explicit_instantiation/2.cc
! 4e384538655d783747fde1964ba015f7  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/requirements/explicit_instantiation/pod.cc
! 552346b0edf0083fe5c43248fc8a6b4e  libstdc++-v3/testsuite/25_algorithms/partition/1.cc
! c0ebf311f14acc6c9173e4061be5e356  libstdc++-v3/testsuite/25_algorithms/partition/constexpr.cc
! 8a773ee2083ba9cf52a59d157698542c  libstdc++-v3/testsuite/25_algorithms/partition/constrained.cc
! 96fd55fde76185f2572f3154768a3c93  libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc
! ad3db5f54c86675e0f815086cd486771  libstdc++-v3/testsuite/25_algorithms/partition/requirements/explicit_instantiation/2.cc
! 893c71c8fec9750fc79c576600ac260b  libstdc++-v3/testsuite/25_algorithms/partition/requirements/explicit_instantiation/pod.cc
! 6e11808f5e6dd8e22185386431fe7a0c  libstdc++-v3/testsuite/25_algorithms/partition_copy/1.cc
! e6ccfbc7c5e5d7b595c1f51bcddb1f5d  libstdc++-v3/testsuite/25_algorithms/partition_copy/check_type.cc
! 7c77f1320250fe1dab7a44db06a54cc5  libstdc++-v3/testsuite/25_algorithms/partition_copy/constexpr.cc
! ccf57ad69345ce9d98f80c171193ad9b  libstdc++-v3/testsuite/25_algorithms/partition_copy/constrained.cc
! 872c0d8c1ad238d2f1333690f7139ac4  libstdc++-v3/testsuite/25_algorithms/partition_copy/requirements/explicit_instantiation/2.cc
! fe496c02eb6b31f354379d256dfc5f85  libstdc++-v3/testsuite/25_algorithms/partition_copy/requirements/explicit_instantiation/pod.cc
! 6e5f9cce9368dc08d82af51041302132  libstdc++-v3/testsuite/25_algorithms/partition_point/1.cc
! 30dc5f2522f5802f440eda428db9df8b  libstdc++-v3/testsuite/25_algorithms/partition_point/check_type.cc
! 8f470f604e1d7a769cf51f59bf6ab1ce  libstdc++-v3/testsuite/25_algorithms/partition_point/constexpr.cc
! 0b93daad80bfc046a62978b009f70025  libstdc++-v3/testsuite/25_algorithms/partition_point/constrained.cc
! 7d9922bea52b37725568b31ee4417aaf  libstdc++-v3/testsuite/25_algorithms/partition_point/requirements/explicit_instantiation/2.cc
! afb0c124e56f3be82185077a28cc0e10  libstdc++-v3/testsuite/25_algorithms/partition_point/requirements/explicit_instantiation/pod.cc
! a55081721e7f1b8bccf30085e887e27b  libstdc++-v3/testsuite/25_algorithms/pop_heap/57010.cc
! 763e8ad9623c63e05d188bbd678ef5a9  libstdc++-v3/testsuite/25_algorithms/pop_heap/complexity.cc
! 879fc0581c1deb06dd2368ea5b1f0c30  libstdc++-v3/testsuite/25_algorithms/pop_heap/constexpr.cc
! 98ee8037c0f284b3ab67a4b0486f2e51  libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc
! f2593a79f9ad68a359c294c8ddf8ccac  libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc
! 06ac575ee15a9b4e20921714c6f7367f  libstdc++-v3/testsuite/25_algorithms/pop_heap/requirements/explicit_instantiation/2.cc
! 908b2bc8da94d046f99e94d5f48e34fd  libstdc++-v3/testsuite/25_algorithms/pop_heap/requirements/explicit_instantiation/pod.cc
! 04c6dc15f9a34d348ce288dba383fb1f  libstdc++-v3/testsuite/25_algorithms/prev_permutation/1.cc
! 608ef9b10fd7773b75d0e63a0ef56165  libstdc++-v3/testsuite/25_algorithms/prev_permutation/check_type.cc
! 1771ecaffbf0c4812f56d8cc885cd2b3  libstdc++-v3/testsuite/25_algorithms/prev_permutation/constexpr.cc
! 7ac887dbfd45febae7bd70fc4e68f053  libstdc++-v3/testsuite/25_algorithms/prev_permutation/constrained.cc
! 763c54dc488002f634bfeb55d377f2c3  libstdc++-v3/testsuite/25_algorithms/prev_permutation/moveable.cc
! 1dd951077f872d0750c05a1cc46e68e7  libstdc++-v3/testsuite/25_algorithms/prev_permutation/requirements/explicit_instantiation/2.cc
! 74ec3ac84be3c5d600a5d33c608f440d  libstdc++-v3/testsuite/25_algorithms/prev_permutation/requirements/explicit_instantiation/pod.cc
  98051b5d40a1c205d048db33e038c794  libstdc++-v3/testsuite/25_algorithms/pstl/alg_merge/inplace_merge.cc
  f73cdaa5ddf9a31b66aeb2163e20a984  libstdc++-v3/testsuite/25_algorithms/pstl/alg_merge/merge.cc
  905d47f4c72eacaf53a95bd14da1a0be  libstdc++-v3/testsuite/25_algorithms/pstl/alg_modifying_operations/copy_if.cc
--- 105700,110949 ----
  d3d2812c60e828c1e822801f148c7630  libstdc++-v3/include/pstl/parallel_impl.h
  64e9a3bc96d1e3015387cb95106544cf  libstdc++-v3/include/pstl/pstl_config.h
  b156f0d597a2edae1a06e54aba071e41  libstdc++-v3/include/pstl/unseq_backend_simd.h
! 16ecbf48b313f47955487be8fe668037  libstdc++-v3/include/pstl/utils.h
! 072481f1e7d96b55385089405f535dd4  libstdc++-v3/include/std/algorithm
! 570dea393806af64e854327a07eae25a  libstdc++-v3/include/std/any
! 88906e37f833d2f5a22c5438677c71cf  libstdc++-v3/include/std/array
! e3ab6ad1224727ab12cc98bacfb53ed1  libstdc++-v3/include/std/atomic
! 40a6f3b28cf45fedc0a741ed20598930  libstdc++-v3/include/std/barrier
! 6c4a00cca741ccc69d90f2c62c4bed21  libstdc++-v3/include/std/bit
! 1c7178da5eda9defcdff4edc4a890999  libstdc++-v3/include/std/bitset
! 3d9f7c4df0ea801b2eada47ffddd64dd  libstdc++-v3/include/std/charconv
! fb50f7f4caccb54720761030bc390207  libstdc++-v3/include/std/chrono
! ef0864942910987e7d7dc0c185bfe8a4  libstdc++-v3/include/std/codecvt
! be6c12b098d82e85b07d3672abe54bfe  libstdc++-v3/include/std/complex
! 16439135249b21db1105ff810c791cf3  libstdc++-v3/include/std/concepts
! 5f9d3f1270677d2a503aa58b9ea24b5d  libstdc++-v3/include/std/condition_variable
! 556e1e1bf1f273632cafe51f162826a4  libstdc++-v3/include/std/coroutine
! 6b89200406cc1ab389e7796857584f28  libstdc++-v3/include/std/deque
! b7b3e00d632ce3d8dab091194900a119  libstdc++-v3/include/std/execution
! 0fb030911329be23852d7ff707bebe0f  libstdc++-v3/include/std/expected
! 2591b4b2dfa65f0fae8dd4fdb5c06398  libstdc++-v3/include/std/filesystem
! a9c719562e9e02bb827652856f5a0411  libstdc++-v3/include/std/forward_list
! aad9a7ff99d2eb9e0ba45475cf6c9001  libstdc++-v3/include/std/fstream
! e41d5e167d29be8fbb3a62ec01220428  libstdc++-v3/include/std/functional
! 972a0c292c570c6ee445900ee005cd4b  libstdc++-v3/include/std/future
! d7e54ce63c756d943e981b79ad7b87b1  libstdc++-v3/include/std/iomanip
! 913326f95f00b67976b511c89ddf1668  libstdc++-v3/include/std/ios
! f1c6686f5f72cb50a754aacdc746b0aa  libstdc++-v3/include/std/iosfwd
! 7d4512e3f3a1b2cce6ebeeadfc5eb944  libstdc++-v3/include/std/iostream
! 0af9f29e460d627bb088eba46d9d9cc4  libstdc++-v3/include/std/istream
! d479c2c4f8009e121aec493d8b7ad36c  libstdc++-v3/include/std/iterator
! f6ccddf1e1d578eb6fe2b88c0d075040  libstdc++-v3/include/std/latch
! 6d03119fea141da6a85fd88481c923e1  libstdc++-v3/include/std/limits
! beb24c4055c34e1ca99669e732635eee  libstdc++-v3/include/std/list
! 0bfc184d3b61dd64372a51e3cec60045  libstdc++-v3/include/std/locale
! 3767a3595bdb50196b1ed2602c682a2d  libstdc++-v3/include/std/map
! 95160e90ba1e5991ad20ca031bda61c9  libstdc++-v3/include/std/memory
! 383bca1be062a73aea21fd137da6b3d9  libstdc++-v3/include/std/memory_resource
! 6185fa777de9d0ffd588b3b4f694533a  libstdc++-v3/include/std/mutex
! 258094736c1a9827ac9b532d460fea3c  libstdc++-v3/include/std/numbers
! c7fb6c5a77fc7306fd47a705ed58eebe  libstdc++-v3/include/std/numeric
! 0afe2c9e17818aafdf3bc07991995e14  libstdc++-v3/include/std/optional
! e21684775dfcf87b9059ad483189890c  libstdc++-v3/include/std/ostream
! 678ed5570fa228987b1bd4c3b2ab38a9  libstdc++-v3/include/std/queue
! ad0c4543d69f42e0e141d6c961148a3c  libstdc++-v3/include/std/random
! 06a6bced334803f14bfbb171e02c1a74  libstdc++-v3/include/std/ranges
! 83fe6e62c45e5cbeb03e474f78fb84dd  libstdc++-v3/include/std/ratio
! 3ad3827bf7257834ed886bfc875792f6  libstdc++-v3/include/std/regex
! a36ee050c2d5e66519638b914997e074  libstdc++-v3/include/std/scoped_allocator
! 4afcdb7beade1642d1f3b27ba5e2bfa3  libstdc++-v3/include/std/semaphore
! 532b334aa304488bba0306ceae791981  libstdc++-v3/include/std/set
! 6f5c8b5ac435bdf64613896b8cc6908a  libstdc++-v3/include/std/shared_mutex
! 88a3179695d69d9d5efe8967df5bb8c1  libstdc++-v3/include/std/source_location
! 692e0b2c06c5d19ac5338d286eb7e5d7  libstdc++-v3/include/std/span
! c64612df3461de8cd5fea69f67e69d37  libstdc++-v3/include/std/spanstream
! 69238d94e22c4a36eb6280b817e60f22  libstdc++-v3/include/std/sstream
! ddbf2edbc47249f513d1ec2ef82db9b7  libstdc++-v3/include/std/stack
! 557ff2dafcd251dac9916c9b9c963e68  libstdc++-v3/include/std/stacktrace
! 9a484d3a8b869e29b314e81780995cea  libstdc++-v3/include/std/stdexcept
! f609fb95e3bb7dc792c160642e325745  libstdc++-v3/include/std/stop_token
! 41d10501d4e6f65d267f4b3f86edf933  libstdc++-v3/include/std/streambuf
! 2050db70d23bce24c0db23f72bb7a5a4  libstdc++-v3/include/std/string
! 39cc6cfdb2f3250aad62f1129ca31d19  libstdc++-v3/include/std/string_view
! 50b2aaa55d4097bcc4b437f8be85b92a  libstdc++-v3/include/std/syncstream
! 5188da0659a253f7b9e43730cb950d43  libstdc++-v3/include/std/system_error
! 24eb77922c50d9b3b619bfc8385085b2  libstdc++-v3/include/std/thread
! ba850143aaf393fbbaec14b91f50a098  libstdc++-v3/include/std/tuple
! c38f612b4a612e05a89996bc4800c747  libstdc++-v3/include/std/type_traits
! 405de94a2049d47cf0dcc1e507c130c2  libstdc++-v3/include/std/typeindex
! e0d09909dcd7c11289f99688cf4d10ea  libstdc++-v3/include/std/unordered_map
! 5459f248f78edae0347566854a6618a0  libstdc++-v3/include/std/unordered_set
! fd851f22b27e7743e814a5b580b5bb9b  libstdc++-v3/include/std/utility
! 149c26b1435920f1d1b70abd61c6c8c0  libstdc++-v3/include/std/valarray
! c419fc1830efc966db8128b8a6396ea1  libstdc++-v3/include/std/variant
! 3a32d802d4e23e09e723dfe0459079e5  libstdc++-v3/include/std/vector
! 7143db0440df826e987ddbf162d7386b  libstdc++-v3/include/std/version
! 315a0c0dcb63f40cf8755bfeedce3f87  libstdc++-v3/include/tr1/array
! 139db14b8081c7badfbcd583df0ebeba  libstdc++-v3/include/tr1/bessel_function.tcc
! 3814625b72a63d974b4e152ce95a3100  libstdc++-v3/include/tr1/beta_function.tcc
! 650f965e10924a1710492d8236170a05  libstdc++-v3/include/tr1/ccomplex
! 88ceaeaccbd8481c7e2e175164240ee4  libstdc++-v3/include/tr1/cctype
! 0a5899c64e5fc704ec2d0c09d289db4d  libstdc++-v3/include/tr1/cfenv
! 1ca726d8789e1bd9da38b21503f75472  libstdc++-v3/include/tr1/cfloat
! a298af309d68732eab1a15da63c3f13f  libstdc++-v3/include/tr1/cinttypes
! 3494e8975f5a0ce2a4ff85d68ea1b68b  libstdc++-v3/include/tr1/climits
! 2cd91066447ad1fef79401fa718e8cfa  libstdc++-v3/include/tr1/cmath
! a39f95af7efa57f210cff2c2db6d1efa  libstdc++-v3/include/tr1/complex
! d5e9065a7517536e90301ba4e2cab91b  libstdc++-v3/include/tr1/complex.h
! 264a64aa0a03b4952408b75a56e01a60  libstdc++-v3/include/tr1/cstdarg
! ef9eb61ae80fd902df3041a146fa33da  libstdc++-v3/include/tr1/cstdbool
! 622698bc5a673f0bd15f9e36aff0b506  libstdc++-v3/include/tr1/cstdint
! 9774c1b9def0cfaeec80c9e9125bb5db  libstdc++-v3/include/tr1/cstdio
! 11611b5e80560071ae27cf7c60b3174e  libstdc++-v3/include/tr1/cstdlib
! af92a72bc2fc9bed8cc93d549e22de12  libstdc++-v3/include/tr1/ctgmath
! 064a2d87aec13d0c39ab53a27f8ad294  libstdc++-v3/include/tr1/ctime
! 05a26dec27ab4ddcb3db77e550ebeaf1  libstdc++-v3/include/tr1/ctype.h
! b261ef6aa59f3e5c693f9472b2a72fff  libstdc++-v3/include/tr1/cwchar
! 6de8080c153a3cef1f244decf5a4a1b5  libstdc++-v3/include/tr1/cwctype
! a50397713722d94f072e7e3543b3373a  libstdc++-v3/include/tr1/ell_integral.tcc
! 089355d058f95be4256b522be5de9e87  libstdc++-v3/include/tr1/exp_integral.tcc
! 7accd6675f01364bc4e7409041150968  libstdc++-v3/include/tr1/fenv.h
! 940fa62fcb26ace3d20b2d7e6e32a4df  libstdc++-v3/include/tr1/float.h
! fdba68af94a74366212fd084e7c7ddfa  libstdc++-v3/include/tr1/functional
! ba04ad61f5148ce1c76b5aaf239ce676  libstdc++-v3/include/tr1/functional_hash.h
! 33e4ea299d36ac46616535879605621f  libstdc++-v3/include/tr1/gamma.tcc
! f2180c33049fe10aef73cebedcaad3b7  libstdc++-v3/include/tr1/hashtable.h
! d71713308a795f46639f0f9e242936bd  libstdc++-v3/include/tr1/hashtable_policy.h
! ffa8ed275317754f07747730b1cfdac5  libstdc++-v3/include/tr1/hypergeometric.tcc
! dcc5ffc62531b57374f558509bfb63de  libstdc++-v3/include/tr1/inttypes.h
! ea6288fcbcc3648ffdca5a84beb29d99  libstdc++-v3/include/tr1/legendre_function.tcc
! 26f3aa82f228b84f57f23bf5962263c1  libstdc++-v3/include/tr1/limits.h
! 99840472637301bdbffc4f74cbe7ac77  libstdc++-v3/include/tr1/math.h
! 6cad79106d40dbe1ce33b2b390f24227  libstdc++-v3/include/tr1/memory
! c2b82f1ec26449e706bf42dbc423cce3  libstdc++-v3/include/tr1/modified_bessel_func.tcc
! 9e7fb24c26b7dc610d52b15fc8d962b0  libstdc++-v3/include/tr1/poly_hermite.tcc
! 3c7e16759b4b31a9fd9ab515fd534ba3  libstdc++-v3/include/tr1/poly_laguerre.tcc
! 5e30ae96813cfbec9bd48b56c3dfbc4f  libstdc++-v3/include/tr1/random
! e5543bf60423432951d5677d8927538c  libstdc++-v3/include/tr1/random.h
! 5cbe1c47667aabc8ad562a20251da4eb  libstdc++-v3/include/tr1/random.tcc
! 9c9c80d80e18bde4c10a70f604aa84ac  libstdc++-v3/include/tr1/regex
! b9e0b5ba8f9e359551ab9e576bb0c6f2  libstdc++-v3/include/tr1/riemann_zeta.tcc
! b94f798b5b544fdba86b8aa0b8738475  libstdc++-v3/include/tr1/shared_ptr.h
! 390bba75958dc6f086672901b3fa3972  libstdc++-v3/include/tr1/special_function_util.h
! efa507808063e166feef7139da7ced44  libstdc++-v3/include/tr1/stdarg.h
! 16784b4494d07cfbcf24f28748731a1c  libstdc++-v3/include/tr1/stdbool.h
! dc24d9387a29f5dc04e1e82265085b5b  libstdc++-v3/include/tr1/stdint.h
! da593b988cdf9c386b1413375904eab0  libstdc++-v3/include/tr1/stdio.h
! cbc403212a326838fcd58106c8cdd29a  libstdc++-v3/include/tr1/stdlib.h
! 55312ac976a5f619988a484d504ed0f1  libstdc++-v3/include/tr1/tgmath.h
! 07633ccdb2c37ee4a7c9355561d82ebd  libstdc++-v3/include/tr1/tuple
! c9d09147d012170310b67af0c6acc907  libstdc++-v3/include/tr1/type_traits
! bad1085cdb2d29c1f5c994a81c6b9caf  libstdc++-v3/include/tr1/unordered_map
! c930d4036922201099619257d25a2245  libstdc++-v3/include/tr1/unordered_map.h
! 0248969086d7c4e1fec393298cdd8851  libstdc++-v3/include/tr1/unordered_set
! 278c948bd86010862886d15bb523d196  libstdc++-v3/include/tr1/unordered_set.h
! 215d346485e8c9503987817648f81c02  libstdc++-v3/include/tr1/utility
! 64b3ee63e50594590c0634e40ed5f0a2  libstdc++-v3/include/tr1/wchar.h
! 064789c496f0f70ebb4edbc0b7e4a666  libstdc++-v3/include/tr1/wctype.h
! 27d05cea5b02463850117b8476f2ec42  libstdc++-v3/include/tr2/bool_set
! 917d83e0b0ee35850a1a637a3eee75c9  libstdc++-v3/include/tr2/bool_set.tcc
! 6170b319c367c15cc44b854b464396c2  libstdc++-v3/include/tr2/dynamic_bitset
! 4384700c62cb70a7774717710cac4c07  libstdc++-v3/include/tr2/dynamic_bitset.tcc
! 88ca2da6dd5700f0e05d5f58e8fa62ef  libstdc++-v3/include/tr2/ratio
! 632570c5614f68ebbbf25e6b74a12da2  libstdc++-v3/include/tr2/type_traits
! 4daa7113f4ebba675c4ef23b11602d2e  libstdc++-v3/libsupc++/Makefile.am
! ad30d9aa6fbfa82c6dcb69892d10681b  libstdc++-v3/libsupc++/Makefile.in
! 96d5d64fad06961ea529f30e07345f14  libstdc++-v3/libsupc++/array_type_info.cc
! dce6f8e3d6b965cd0fd40f034b78a74d  libstdc++-v3/libsupc++/atexit_arm.cc
! 64a51042a2c5073bdb6689e6239ef0ed  libstdc++-v3/libsupc++/atexit_thread.cc
! 777b08d4b2d3316b999e2d084b08be32  libstdc++-v3/libsupc++/atomic_lockfree_defines.h
! 11e2034b1a09f23263659e709d239a07  libstdc++-v3/libsupc++/bad_alloc.cc
! 71fb317aaa7b88832c691b2cfef56a68  libstdc++-v3/libsupc++/bad_array_length.cc
! a397502b691bf0d7a9c7b63f63454f98  libstdc++-v3/libsupc++/bad_array_new.cc
! 9621209250aecea504557e963c18f934  libstdc++-v3/libsupc++/bad_cast.cc
! 188845aff865b6e18ffa32ad7980fc9d  libstdc++-v3/libsupc++/bad_typeid.cc
! 906126d53d76811a79332da443119279  libstdc++-v3/libsupc++/class_type_info.cc
! 31f5ffc107b8635ae5c3c63e619e7c52  libstdc++-v3/libsupc++/compare
! a8ca959615041ec3243af356f4ecc624  libstdc++-v3/libsupc++/cxxabi.h
! ab128a36728911fa441f71f19397c91f  libstdc++-v3/libsupc++/cxxabi_forced.h
! c0c7802c5e0096ab182755f808164e5a  libstdc++-v3/libsupc++/cxxabi_init_exception.h
! 60bb4069fc06de12df9cb43ad21c79ae  libstdc++-v3/libsupc++/del_op.cc
! 7f855cd5f1f241ffab0d9ca14d2c3c5d  libstdc++-v3/libsupc++/del_opa.cc
! 8ef5bb06ac7b1dc1a42948ad7e78cdf9  libstdc++-v3/libsupc++/del_opant.cc
! 53eed11da7f2827888c25a3650a4b10e  libstdc++-v3/libsupc++/del_opnt.cc
! 0227c90ce95a0619a0edb2973679699b  libstdc++-v3/libsupc++/del_ops.cc
! 2fb1c76149deed5fcb79265cbad8d2a5  libstdc++-v3/libsupc++/del_opsa.cc
! b32cc935747c3f297faeb3662c022d45  libstdc++-v3/libsupc++/del_opv.cc
! 72a323dcbcc2ba323bc1b438d6a09849  libstdc++-v3/libsupc++/del_opva.cc
! 7c0ba418c387b7a41197971d819adc68  libstdc++-v3/libsupc++/del_opvant.cc
! d1fc9881a3db090a0f325f1c4a2798ea  libstdc++-v3/libsupc++/del_opvnt.cc
! a6523b87702e9a279ea3535cc67d1913  libstdc++-v3/libsupc++/del_opvs.cc
! 4553a5840fdaf44f797c75626357aa0d  libstdc++-v3/libsupc++/del_opvsa.cc
! 697bb5f4b6a7a8c00c03537caa5743d5  libstdc++-v3/libsupc++/dyncast.cc
! 76711f46ceb1893d1a6dc4b6b6c8334a  libstdc++-v3/libsupc++/eh_alloc.cc
! 60fbc2c9e1391ecd8b9c1dcad75beb25  libstdc++-v3/libsupc++/eh_arm.cc
! d9fad0164214a24429310b8e7c123505  libstdc++-v3/libsupc++/eh_atomics.h
! 892dd70e6e7efdbaab2ca082a7b4486f  libstdc++-v3/libsupc++/eh_aux_runtime.cc
! 2826e5c2de48542ba3ce264b3320d192  libstdc++-v3/libsupc++/eh_call.cc
! f9a2b6ce76ea27f40df988fb955d2de1  libstdc++-v3/libsupc++/eh_catch.cc
! 3da7f2c6cfa1995c8968405d9ee450b6  libstdc++-v3/libsupc++/eh_exception.cc
! 161e3e9137c07f746a75d728451c5710  libstdc++-v3/libsupc++/eh_globals.cc
! 7ccbc99cfaa5318038f64dbee140946b  libstdc++-v3/libsupc++/eh_personality.cc
! 1c54e24b64de6b013027e51c6377a701  libstdc++-v3/libsupc++/eh_ptr.cc
! d385138666c69cff7ca02656c9f9ed79  libstdc++-v3/libsupc++/eh_term_handler.cc
! 543912749d5213a6907d1bafadb3a0f3  libstdc++-v3/libsupc++/eh_term_handler.h
! 911784a6bbd6d231874a1951d1e67ae1  libstdc++-v3/libsupc++/eh_terminate.cc
! 0b5a95607cdc3334d0f81bd87dead1ed  libstdc++-v3/libsupc++/eh_throw.cc
! b5f52a829dccae720c13a2b8d74dbbf2  libstdc++-v3/libsupc++/eh_tm.cc
! 079841166bad124af7a0aa883becc30c  libstdc++-v3/libsupc++/eh_type.cc
! 0d94cfa31dfadf2483b422504b090d4b  libstdc++-v3/libsupc++/eh_unex_handler.cc
! dd79628835db55b2e3ac0f19e6d67f4b  libstdc++-v3/libsupc++/enum_type_info.cc
! 6b7e04711d0d81627261d8d8d19988de  libstdc++-v3/libsupc++/exception
! c63781c44ea62d41d540e3dc9df083ad  libstdc++-v3/libsupc++/exception.h
! 7831f52e348280d54cdefd954a8125ae  libstdc++-v3/libsupc++/exception_defines.h
! e8a32dcadc5d06d341e371fb480b7b44  libstdc++-v3/libsupc++/exception_ptr.h
! e9526cde45ad82aac1bdad78e48b77d9  libstdc++-v3/libsupc++/function_type_info.cc
! 19738f26bfd633c091434c2b3a705170  libstdc++-v3/libsupc++/fundamental_type_info.cc
! 2a200bb5c53b0893bf37016eaa025581  libstdc++-v3/libsupc++/guard.cc
! 06a221e91b546671efa1f24b49ccfe3c  libstdc++-v3/libsupc++/guard_error.cc
! 5e7a1898ab075ba01f71e5642c58fe6d  libstdc++-v3/libsupc++/hash_bytes.cc
! da625ab4397a07b2b30e11330b510592  libstdc++-v3/libsupc++/hash_bytes.h
! c94b94493253b00efeca143731e6bfbd  libstdc++-v3/libsupc++/initializer_list
! b736a3e0c3130311d7283d2e42b337ae  libstdc++-v3/libsupc++/nested_exception.cc
! 6755474390a686b5c656c90169fe7622  libstdc++-v3/libsupc++/nested_exception.h
! 008264d01c4067464408c9777e292ee3  libstdc++-v3/libsupc++/new
! 87c7167973517867f1dce7e6537f5493  libstdc++-v3/libsupc++/new_handler.cc
! a0242b24fe3d20508b195a569e213580  libstdc++-v3/libsupc++/new_op.cc
! 9147256faba7ae3d5c4e9400ed523a35  libstdc++-v3/libsupc++/new_opa.cc
! db5414821a05e8baefb055b0be852385  libstdc++-v3/libsupc++/new_opant.cc
! fd977844781418fe90162ecd1a5bdcbe  libstdc++-v3/libsupc++/new_opnt.cc
! 5bc9c32dd691fa3053c50c840c28112d  libstdc++-v3/libsupc++/new_opv.cc
! ce975f471cbdb866fe634e46032451c2  libstdc++-v3/libsupc++/new_opva.cc
! 7c2d8b04ea28b81f746a1ae9162821cd  libstdc++-v3/libsupc++/new_opvant.cc
! 136973bc814fe0676d13253d21a6ce15  libstdc++-v3/libsupc++/new_opvnt.cc
! 0f98af332a5a67ef6244234aed3b0034  libstdc++-v3/libsupc++/pbase_type_info.cc
! 48b73bc57692e0bc4fb9d2c4c5002374  libstdc++-v3/libsupc++/pmem_type_info.cc
! 04e00d54d3db15807429587a0114cd35  libstdc++-v3/libsupc++/pointer_type_info.cc
! ec14578ac4f5572b981b4350fe944edb  libstdc++-v3/libsupc++/pure.cc
! 0979a6148b92e59039718d6ff472e5d9  libstdc++-v3/libsupc++/si_class_type_info.cc
! 9ec42d9cdfccfc70832cc59949bcc663  libstdc++-v3/libsupc++/tinfo.cc
! 2454dc69bbe74c344cb484af1679cbb6  libstdc++-v3/libsupc++/tinfo.h
! 82146bc426a54e3b998490ee6a488e6e  libstdc++-v3/libsupc++/tinfo2.cc
! c8df4840cd2ad7a09e3698e0ef09336b  libstdc++-v3/libsupc++/typeinfo
! 1df8b124dae04bd0ff38bec0e131403d  libstdc++-v3/libsupc++/unwind-cxx.h
! a14ef77a81fadfd54e408d6498a9efc7  libstdc++-v3/libsupc++/vec.cc
! b44bc936a5d2b8d071a7aa6cdf382ae8  libstdc++-v3/libsupc++/vmi_class_type_info.cc
! 7b3ad23245ee78de0393c6605b3f6034  libstdc++-v3/libsupc++/vterminate.cc
! f9461feacc2d371610b57973002b4d61  libstdc++-v3/libsupc++/vtv_stubs.cc
  6e1809e9ac8f237378ab1ebc1b99fb6a  libstdc++-v3/linkage.m4
! 28d5d034cce163e814a577c4d5818e26  libstdc++-v3/po/Makefile.am
! 3be54961a3a3bbee9a88b4feec088d61  libstdc++-v3/po/Makefile.in
! a81684dce7540023c47bfe8af99fb4b1  libstdc++-v3/po/POTFILES.in
! 54d4e9197fb238458c8f08864c5b7e03  libstdc++-v3/po/de.po
! 8a705eb0cb1a3a35f0b97a5e0926513d  libstdc++-v3/po/fr.po
! 448166b6f30d75c39a5066be7c7045fe  libstdc++-v3/po/libstdc++.pot
! 8d45ec90fdb2b621a6e2d44ea3fde31a  libstdc++-v3/po/string_literals.cc
! c8cbca9ae8196cdff7586f9cd8784702  libstdc++-v3/python/Makefile.am
! 7dac9d0e9688e515fddb09dd28e478e6  libstdc++-v3/python/Makefile.in
! 99337a5a9c6351ae321ba8645b3981f0  libstdc++-v3/python/hook.in
  68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/python/libstdcxx/__init__.py
! 9b4aa298a5559f01a31b4252b2ca34c7  libstdc++-v3/python/libstdcxx/v6/__init__.py
! 5392fa6f73fb5a99fcc49e041a9df1e8  libstdc++-v3/python/libstdcxx/v6/printers.py
! 715a28ac117c1e22d8fa5710c31fb527  libstdc++-v3/python/libstdcxx/v6/xmethods.py
  cdac7363b91e7d57b85f7b560f62f033  libstdc++-v3/scripts/check_compile
  a4c1d51bba293cee2307fc7f9dd090f7  libstdc++-v3/scripts/check_performance
  128d0fbc24e1d43d9ff93d14bd521aa6  libstdc++-v3/scripts/check_simd
  40f8ee10a4683f6c7f555f9450fcaa12  libstdc++-v3/scripts/create_testsuite_files
! 03e2e969a118c4640e7ce5e696d6c36a  libstdc++-v3/scripts/extract_symvers.in
! e5254f12410a36e94ee38b08c1d35033  libstdc++-v3/scripts/extract_symvers.pl
  755b77f929d926f07f3257df2e802f2e  libstdc++-v3/scripts/gen_bind_includers.pl
  85378fa65bc3dc46ffe255374b304560  libstdc++-v3/scripts/gen_includers.pl
  f1a84a17158780aaa37927191db4463a  libstdc++-v3/scripts/gen_includers2.pl
! c3455b8d87dcefd65c7fdcd24e4ce3a4  libstdc++-v3/scripts/make_exports.pl
  80b6ff44b325c6b6d113435d8eea4b76  libstdc++-v3/scripts/make_graph.py
! 5ff227cd3c32bd4bc544e3cf53d77ccd  libstdc++-v3/scripts/run_doxygen
! b5c90557075248abb064905101257dda  libstdc++-v3/scripts/testsuite_flags.in
! 2800ac0fcda73864d0a7c766563eff44  libstdc++-v3/src/Makefile.am
! 29f868c8cffdab36350b47e3a9c36917  libstdc++-v3/src/Makefile.in
! a8ffe2ad24249db68c5a7ced143fe7f2  libstdc++-v3/src/c++11/Makefile.am
! 44f21e2ab368caf32eb97e02b83eb91d  libstdc++-v3/src/c++11/Makefile.in
! 1bac4c8b59f3d07015bc54141666c8dd  libstdc++-v3/src/c++11/chrono.cc
! ce82126cc7bbe2c763c5eff99de9a963  libstdc++-v3/src/c++11/codecvt.cc
! 6f4d4569f8ec67d46c6dcf972c0d8937  libstdc++-v3/src/c++11/compatibility-atomic-c++0x.cc
! 9653bdd9c763b1e15e1a47bd5d1e7402  libstdc++-v3/src/c++11/compatibility-c++0x.cc
! 822301c830c65bb2a495049efd0e0501  libstdc++-v3/src/c++11/compatibility-chrono.cc
! c55256a2404a751a9d0e91efa132e1c3  libstdc++-v3/src/c++11/compatibility-condvar.cc
! 706be41734f65fd49abdd4588859dea1  libstdc++-v3/src/c++11/compatibility-ldbl-alt128-cxx11.cc
! ba35560b9593674f94b8e5cc2fa5c6a6  libstdc++-v3/src/c++11/compatibility-ldbl-alt128.cc
! 8d462d7c234a7824f70c654a77fd0343  libstdc++-v3/src/c++11/compatibility-ldbl-facets-aliases.h
! 47fa47dc9800c7194df096036a780a5a  libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc
! 936c3c006efff078161dc4ea908eff51  libstdc++-v3/src/c++11/condition_variable.cc
! 0a2f98e6dce0f4843b63c6f18fed049b  libstdc++-v3/src/c++11/cow-fstream-inst.cc
! 8ef14c27c500b1c2ae8c88191aa07f4f  libstdc++-v3/src/c++11/cow-locale_init.cc
! 028e981121bf18b66ccca15805106043  libstdc++-v3/src/c++11/cow-shim_facets.cc
! 31472dd1bfdf8957e53874aed4f1dafb  libstdc++-v3/src/c++11/cow-sstream-inst.cc
! 1b3ae4c34ebbbfffc2251d4e64d0c361  libstdc++-v3/src/c++11/cow-stdexcept.cc
! c0ce22782698f527aa23c86081579318  libstdc++-v3/src/c++11/cow-string-inst.cc
! 154ddceb8ca986c0dc366a0812ef8ef3  libstdc++-v3/src/c++11/cow-string-io-inst.cc
! 11e79d32ca45f730b2fcf087bf707f27  libstdc++-v3/src/c++11/cow-wstring-inst.cc
! 34013ac6f0c009bdc4fc5d4d23116907  libstdc++-v3/src/c++11/cow-wstring-io-inst.cc
! 0ffe33e0294c73de4e1a1df88f8df7c0  libstdc++-v3/src/c++11/ctype.cc
! 48454e445176805f4a07c59b1c3c864a  libstdc++-v3/src/c++11/cxx11-hash_tr1.cc
! 5d07dfc71617ceedad624070f03c33ce  libstdc++-v3/src/c++11/cxx11-ios_failure.cc
! 83d245a049fa447bae2f2142800cf390  libstdc++-v3/src/c++11/cxx11-locale-inst.cc
! 1873f8363e67f6beac3a8f0cb4ea8b08  libstdc++-v3/src/c++11/cxx11-shim_facets.cc
! 077ed5dbaeb50d017644c6a26b19acf5  libstdc++-v3/src/c++11/cxx11-stdexcept.cc
! d13ab90d7b02d7fa901c3b5c1ec93519  libstdc++-v3/src/c++11/cxx11-wlocale-inst.cc
! 6f95f475b9b606e7e6585cfa7b4fb01e  libstdc++-v3/src/c++11/debug.cc
! ccc01b37e3b2bb8b326ea8036a900a13  libstdc++-v3/src/c++11/ext11-inst.cc
! 3a70dd8395391521505453d2cf8b6304  libstdc++-v3/src/c++11/fstream-inst.cc
! 809f713df54dbe4ce5d5840f7bf50c53  libstdc++-v3/src/c++11/functexcept.cc
! 2033bac48002d45217b1c077212a647e  libstdc++-v3/src/c++11/functional.cc
! d873396e67fe09a8445f0a77fd7ccace  libstdc++-v3/src/c++11/futex.cc
! 3a2d8455301f1d874223a36b2fbd4174  libstdc++-v3/src/c++11/future.cc
! 5d36b6e54dbcf6cdce5b1dc770358504  libstdc++-v3/src/c++11/hash_c++0x.cc
! a1c900a66bb1227423f75518c8dcc072  libstdc++-v3/src/c++11/hashtable_c++0x.cc
! 06f5ac68c59fec54e3165c27ce3b6359  libstdc++-v3/src/c++11/ios-inst.cc
! addfb1a881b92c043a73fea0c4d96d01  libstdc++-v3/src/c++11/ios.cc
! 2f05b820df2ee0450c5f389d39dffa14  libstdc++-v3/src/c++11/iostream-inst.cc
! b3031e98791762c5d41011e809a99ef4  libstdc++-v3/src/c++11/istream-inst.cc
! 6fbecc08d6d967423ef03c2b73ff91ff  libstdc++-v3/src/c++11/limits.cc
! e4833f512f645af1dbddd845514961ba  libstdc++-v3/src/c++11/locale-inst-monetary.h
! e5997c16440b356fb9bafa6b6b32d267  libstdc++-v3/src/c++11/locale-inst-numeric.h
! 0d082726ea4c799c9106352de89fa707  libstdc++-v3/src/c++11/locale-inst.cc
! 41f35b2b03d66226af80e09b20d45f21  libstdc++-v3/src/c++11/mutex.cc
! be6aa69410374ac46ce4ec6dbcb492d2  libstdc++-v3/src/c++11/mutex_pool.h
! 8d85eefdef153bc5d68edcabf4ea62e3  libstdc++-v3/src/c++11/ostream-inst.cc
! 52e628d1b81450210983ae64874e17cb  libstdc++-v3/src/c++11/placeholders.cc
! 7fa2db7f70b6057063f400f071505931  libstdc++-v3/src/c++11/random.cc
! d50a4fa18b606f7368ff64878f408362  libstdc++-v3/src/c++11/regex.cc
! 47755eae50647f183ee9af570473fcc1  libstdc++-v3/src/c++11/shared_ptr.cc
! 4c597de4f39e5d17dc60f245508e1d84  libstdc++-v3/src/c++11/snprintf_lite.cc
! ec9c72a5ee0ff6169c89816cd997fc7f  libstdc++-v3/src/c++11/sso_string.cc
! 4880fa9beb169f181fae91996b00b42b  libstdc++-v3/src/c++11/sstream-inst.cc
! 62d68a338d9d558342a64e3812f42370  libstdc++-v3/src/c++11/streambuf-inst.cc
! 3f5be41744a83869e79685eee51be75b  libstdc++-v3/src/c++11/string-inst.cc
! bfd5afa319b8c484af4d2d6a9c51d6cd  libstdc++-v3/src/c++11/string-io-inst.cc
! 717b2a0cb6ad2cc5a04c8d7488b8bf50  libstdc++-v3/src/c++11/system_error.cc
! e224dbd54286756dd3434a53e714ba2f  libstdc++-v3/src/c++11/thread.cc
! cfb4d4117b273737a07a71762eae15d1  libstdc++-v3/src/c++11/wlocale-inst.cc
! ef307f9cecfa67b64519d3c87e2d7cbf  libstdc++-v3/src/c++11/wstring-inst.cc
! 94cd38eec1560b83e468c502c5120b83  libstdc++-v3/src/c++11/wstring-io-inst.cc
! 48c443de8335aa0a19ad7c9e42d0e9ed  libstdc++-v3/src/c++17/Makefile.am
! 21cee0931b715ab952afbb0c00d47854  libstdc++-v3/src/c++17/Makefile.in
! ff90cd750b1d470087100e4c71bc23af  libstdc++-v3/src/c++17/cow-fs_dir.cc
! f5687fbe038eb77175fa205cf20d2cdf  libstdc++-v3/src/c++17/cow-fs_ops.cc
! fc4fa3c7ade9a0b45821c3daa9c158a0  libstdc++-v3/src/c++17/cow-fs_path.cc
! 21a327dfa8f9d7a81a99ca69aa3173f5  libstdc++-v3/src/c++17/cow-string-inst.cc
  21e22ff1ddec6a91c7b379d6f6398649  libstdc++-v3/src/c++17/default_resource.h
! 16094af6c43bdd857d998558fb1c3fae  libstdc++-v3/src/c++17/fast_float/LOCAL_PATCHES
! bccfdaafbb95c858e37317d0863bce04  libstdc++-v3/src/c++17/fast_float/MERGE
! 3729955dbdfb8c863ff576d8d2d1f92f  libstdc++-v3/src/c++17/fast_float/README.md
! 612ba04cddc690a17391308c09e57504  libstdc++-v3/src/c++17/fast_float/fast_float.h
! 42fa5107e3a16f591a97e479c9a16dc3  libstdc++-v3/src/c++17/floating_from_chars.cc
! 73812a0c249f1a107c6747054f47134b  libstdc++-v3/src/c++17/floating_to_chars.cc
! e53d518ccc211d148ab86fc81a4aa908  libstdc++-v3/src/c++17/fs_dir.cc
! f18914c2d87f1a345633186481c19e16  libstdc++-v3/src/c++17/fs_ops.cc
! 812bd82e07a364a666c3339a6a598e1b  libstdc++-v3/src/c++17/fs_path.cc
! 73c96fa75ba071e3d41297c549483c3f  libstdc++-v3/src/c++17/memory_resource.cc
! f986a48e2efed103402262a2315d1784  libstdc++-v3/src/c++17/ostream-inst.cc
  f7696e2f5518e5e873ced4beacb8d107  libstdc++-v3/src/c++17/ryu/LOCAL_PATCHES
! e225c39ccc4c6adc72a744687977d59d  libstdc++-v3/src/c++17/ryu/MERGE
  5c512389f4cbe0ea37ce2a8da0f070d6  libstdc++-v3/src/c++17/ryu/common.h
  68d17d3946647c70092348da5b4d2150  libstdc++-v3/src/c++17/ryu/d2fixed.c
  9a0ed5eccd5099079586be75b34d2936  libstdc++-v3/src/c++17/ryu/d2fixed_full_table.h
  0619e34c1de264dce5cbbe615f54e8e0  libstdc++-v3/src/c++17/ryu/d2s.c
  35c6da63cdf032dc7d6630d3a54ab8e7  libstdc++-v3/src/c++17/ryu/d2s_full_table.h
! c6d63bd9e3df2c9835132f94449f8258  libstdc++-v3/src/c++17/ryu/d2s_intrinsics.h
  ae01717fb9bc756d7dab7e93b33bb6dc  libstdc++-v3/src/c++17/ryu/digit_table.h
  cdfce2fa1d76af09cfdf0989501826ca  libstdc++-v3/src/c++17/ryu/f2s.c
  3c7632b8c46bbe9bb1c1cfad1b228818  libstdc++-v3/src/c++17/ryu/f2s_intrinsics.h
  74bc36f5cffd7626c78090061e4416a9  libstdc++-v3/src/c++17/ryu/generic_128.c
  fbb127f006c65ae37d591c627cc6235c  libstdc++-v3/src/c++17/ryu/generic_128.h
  85b9d2e407dc7113a97234b2c23e96dc  libstdc++-v3/src/c++17/ryu/ryu_generic_128.h
! c645b4526ffc084d20f1eca900f28d38  libstdc++-v3/src/c++17/string-inst.cc
! 191e711bd91d0823733583d0b49ddbee  libstdc++-v3/src/c++17/uint128_t.h
! ecd4d3340ce895b35cd15a00b48c0fa1  libstdc++-v3/src/c++20/Makefile.am
! 2033b325a511608dc1827e9b510eefe9  libstdc++-v3/src/c++20/Makefile.in
! 065be3f5fe1dcd6457f9b3a90652a5ca  libstdc++-v3/src/c++20/sstream-inst.cc
! a41eff0c0341a8ce9444319328df7c98  libstdc++-v3/src/c++98/Makefile.am
! 7abb3156a9e4cc11d009f9851281517b  libstdc++-v3/src/c++98/Makefile.in
! f20f891f15263a00ec44a6f0af72271a  libstdc++-v3/src/c++98/allocator-inst.cc
! d2b98514098452d051a51d0e9d7a4bbf  libstdc++-v3/src/c++98/bitmap_allocator.cc
! 6973db22f1c691c50329c18ca92f4c56  libstdc++-v3/src/c++98/codecvt.cc
! cac5f9cc31d81a5b178f751a420015c0  libstdc++-v3/src/c++98/compatibility-debug_list-2.cc
! 41a29b72ca29817eeabb24fb91c6058f  libstdc++-v3/src/c++98/compatibility-debug_list.cc
! 4ade19dfd769389abd31ea40b3babdc9  libstdc++-v3/src/c++98/compatibility-ldbl.cc
! 1cebd42cd88fa7064d63c1c35446d22f  libstdc++-v3/src/c++98/compatibility.cc
! ac641d5608529c2cd6be6fb96366f94f  libstdc++-v3/src/c++98/complex_io.cc
! 5537feb456c14cc70601a1e38ea7ff3f  libstdc++-v3/src/c++98/concept-inst.cc
! ab012206ac098fa74570935c94639f3d  libstdc++-v3/src/c++98/cow-istream-string.cc
! 20e1b729cb2df7d01848b45b5bb10f26  libstdc++-v3/src/c++98/ext-inst.cc
! 08b77625cf1b34e1f1a3e78018aa4303  libstdc++-v3/src/c++98/globals_io.cc
! 8a97eeffcd13d24231cd940639fcb598  libstdc++-v3/src/c++98/hash-long-double-tr1-aux.cc
! c829300d08f7d2c634a4496a70adb0db  libstdc++-v3/src/c++98/hash_tr1.cc
! 6ef4219a1ef8e7d3861feab8e0db4f0d  libstdc++-v3/src/c++98/hashtable_tr1.cc
! 619ac7fcd1b6ab8f610d5b15ac7589f4  libstdc++-v3/src/c++98/ios_failure.cc
! f4cb33993065f30cebe657441e1ba98b  libstdc++-v3/src/c++98/ios_init.cc
! 1bdea41f382e85b0d5631deac79b2ea6  libstdc++-v3/src/c++98/ios_locale.cc
! 67cdf2af2758b592e8a50d7355c92338  libstdc++-v3/src/c++98/istream-string.cc
! ea1d3cba52f54695f9a41bed98515c50  libstdc++-v3/src/c++98/istream.cc
! de3a3d0c5c9a6c342709a687fcbcab02  libstdc++-v3/src/c++98/list-aux-2.cc
! 139acef23be0650b05bc4081d1b23af0  libstdc++-v3/src/c++98/list-aux.cc
! 6a672c8f7a1968b710a0fa2cbdd99c2d  libstdc++-v3/src/c++98/list.cc
! 002f604a68a21a5ea5c29d35d2208780  libstdc++-v3/src/c++98/list_associated-2.cc
! f8e9b1b30aa85adff4df24aca0a6a1f9  libstdc++-v3/src/c++98/list_associated.cc
! 0ad199e77e44ee3bd5d6b5d820c86a7a  libstdc++-v3/src/c++98/locale.cc
! a83aec10dba6ae5c0cfe84dec785c70d  libstdc++-v3/src/c++98/locale_facets.cc
! 2c315180d786cebd4dbceedec94e21c6  libstdc++-v3/src/c++98/locale_init.cc
! 5f5c5bfc4adf2a48a4eea2e07d90c310  libstdc++-v3/src/c++98/localename.cc
! 6290413104cec287baa59248b768c01d  libstdc++-v3/src/c++98/math_stubs_float.cc
! cb12828e6043770cc9ccccefed0f6704  libstdc++-v3/src/c++98/math_stubs_long_double.cc
! fc271ec1b45cdd32584963da1033ad6f  libstdc++-v3/src/c++98/misc-inst.cc
! c0dd2a11be340e204f18b3efa8471698  libstdc++-v3/src/c++98/mt_allocator.cc
! 580f3abe7873fcced28ee397adedd0c9  libstdc++-v3/src/c++98/parallel_settings.cc
! 4cb4558b34b1bcd5c5603b9e05ad1419  libstdc++-v3/src/c++98/pool_allocator.cc
! be357672c5d62b69704f42e657c803af  libstdc++-v3/src/c++98/stdexcept.cc
! 215f19755044f0a5e1a04d9c5b579660  libstdc++-v3/src/c++98/streambuf.cc
! 74b18bdf7aea819d66224a06e44d7331  libstdc++-v3/src/c++98/strstream.cc
! 02e90781f86cc133d4ef654f8392a24e  libstdc++-v3/src/c++98/tree.cc
! 24e70b3195cb534238447376bf6ec526  libstdc++-v3/src/c++98/valarray.cc
! 5dddddb3d6e6a00e059e6b3c1eecadff  libstdc++-v3/src/filesystem/Makefile.am
! 17a3c04f609bc38c6deed71c73d6ff75  libstdc++-v3/src/filesystem/Makefile.in
! ce5be71e7e8cd53b30c2f5098afdf2f3  libstdc++-v3/src/filesystem/cow-dir.cc
! 29b3e93d216028819a4e3afc430e5273  libstdc++-v3/src/filesystem/cow-ops.cc
! c9755a27253724e51dc118d2832eec1c  libstdc++-v3/src/filesystem/cow-path.cc
! bab0cdd392b9d010b432d66f71c1492b  libstdc++-v3/src/filesystem/dir-common.h
! 275e222291218e0945df36ee0196bd23  libstdc++-v3/src/filesystem/dir.cc
! b9b6ffad8359d41703179cc825363690  libstdc++-v3/src/filesystem/ops-common.h
! 515d7fe09bb85775fd8fee703fadd58d  libstdc++-v3/src/filesystem/ops.cc
! 339d6d3eeddb51bb668748f19203420f  libstdc++-v3/src/filesystem/path.cc
! 363b12ab3b2dd386adec7aee648e7dd6  libstdc++-v3/src/libbacktrace/Makefile.am
! 775bfe992c7c40d0700e4fa9f00c9d83  libstdc++-v3/src/libbacktrace/Makefile.in
! ce4e38332339194e4192eb2ba07fcd41  libstdc++-v3/src/libbacktrace/backtrace-rename.h
! f1f9f4df2a1a6c954c5a09ac3f6238e8  libstdc++-v3/src/libbacktrace/backtrace-supported.h.in
! d80381bdd74336b121a4f087efc21dbb  libstdc++-v3/src/libbacktrace/config.h.in
! 2149b0702ec5ba25f34f15320f7193aa  libstdc++-v3/src/shared/hashtable-aux.cc
! 6b40c6a3a43f23ab00e64be34d341a9c  libstdc++-v3/testsuite/17_intro/badnames.cc
! 86965508e6ff66abe5479ba8457e5e19  libstdc++-v3/testsuite/17_intro/freestanding.cc
  d5df5ddc3b7c5dba2e687798eaa28551  libstdc++-v3/testsuite/17_intro/headers/c++1998/103650.cc
! 2c59f7c6df5154b1cc918b4a7b08f374  libstdc++-v3/testsuite/17_intro/headers/c++1998/49745.cc
! 90fbd0d2ef93c24fe0458849ed288646  libstdc++-v3/testsuite/17_intro/headers/c++1998/all.cc
! 02c8b56f96e9590e4d86c7516573f667  libstdc++-v3/testsuite/17_intro/headers/c++1998/all_attributes.cc
! 46f2590b5b7bb9c2f36cf2eaadf40cee  libstdc++-v3/testsuite/17_intro/headers/c++1998/all_c++200x_compatibility.cc
! 336c6bfe5511a7a50e74b265779f52db  libstdc++-v3/testsuite/17_intro/headers/c++1998/all_no_exceptions.cc
! ca1dd638ac8970e0aa4460c00f01e4b1  libstdc++-v3/testsuite/17_intro/headers/c++1998/all_no_rtti.cc
! 8ce60e38c9a3fe2126dc7eeeb3fad948  libstdc++-v3/testsuite/17_intro/headers/c++1998/all_pedantic_errors.cc
  b8a53b2b8da32d102d69cbedea3d2216  libstdc++-v3/testsuite/17_intro/headers/c++1998/charset.cc
! b313580b4a19990c1827d5c70dcc734b  libstdc++-v3/testsuite/17_intro/headers/c++1998/complex.cc
! 287e047fe6c89f875288affd008c0291  libstdc++-v3/testsuite/17_intro/headers/c++1998/operator_names.cc
! a20cd13773325e7df91e7386ab4d1774  libstdc++-v3/testsuite/17_intro/headers/c++1998/profile_mode.cc
! a6c8cd1fa536f2ecd02fc2ef199e379d  libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++.cc
! 7b2ab7680e7bd949a6698fcddde94212  libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_assert_neg.cc
! fd2459aa7afe821d76b821a26c5a47fc  libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_multiple_inclusion.cc
! 585f0cf8e0d24955bec36fc1d82cacda  libstdc++-v3/testsuite/17_intro/headers/c++2011/42319.cc
! 6b3d4880efc0d0fa6c8bb5462c7c392b  libstdc++-v3/testsuite/17_intro/headers/c++2011/67309.cc
! 7de8fa5e4e372d4b461e71b92fcead60  libstdc++-v3/testsuite/17_intro/headers/c++2011/all_attributes.cc
! 7c93abc09d62ddb6bdb52c1a3d5627e3  libstdc++-v3/testsuite/17_intro/headers/c++2011/all_no_exceptions.cc
! 7e6bb12e85292beec25b95d004c2553b  libstdc++-v3/testsuite/17_intro/headers/c++2011/all_no_rtti.cc
! fcbd0dd536fd82d494006c1adc330d58  libstdc++-v3/testsuite/17_intro/headers/c++2011/all_pedantic_errors.cc
  b8a53b2b8da32d102d69cbedea3d2216  libstdc++-v3/testsuite/17_intro/headers/c++2011/charset.cc
! 0d0e91eac473f2808fac51fdc91f259d  libstdc++-v3/testsuite/17_intro/headers/c++2011/linkage.cc
! 69bc3b3a598dde5c67f9bcfbb99d3b75  libstdc++-v3/testsuite/17_intro/headers/c++2011/operator_names.cc
! 7aa68916c94dc6c87e7f2369b4319ed4  libstdc++-v3/testsuite/17_intro/headers/c++2011/parallel_mode.cc
! dd6ca0f34926ae5e6f89c9ae1f8c30cf  libstdc++-v3/testsuite/17_intro/headers/c++2011/profile_mode.cc
! e8549de82db01dfe8e3a0355d8f2b33a  libstdc++-v3/testsuite/17_intro/headers/c++2011/stdc++.cc
! 5f9caa472a09014f73817189d4ae4dfd  libstdc++-v3/testsuite/17_intro/headers/c++2011/stdc++_multiple_inclusion.cc
! 5cd28cdfdde8c56480504850ffaa21e9  libstdc++-v3/testsuite/17_intro/headers/c++2014/all_attributes.cc
! da55ecc7cef99b36ef03364eae522033  libstdc++-v3/testsuite/17_intro/headers/c++2014/all_no_exceptions.cc
! 1684bcf54e6008c5021355e654ed8a46  libstdc++-v3/testsuite/17_intro/headers/c++2014/all_no_rtti.cc
! b03962e230b030ffcf62a1488e011f30  libstdc++-v3/testsuite/17_intro/headers/c++2014/all_pedantic_errors.cc
  b8a53b2b8da32d102d69cbedea3d2216  libstdc++-v3/testsuite/17_intro/headers/c++2014/charset.cc
! 228830cb92f261cd82ca3aa23c776c66  libstdc++-v3/testsuite/17_intro/headers/c++2014/operator_names.cc
! 84ca67545dffa7203620e34732eb7593  libstdc++-v3/testsuite/17_intro/headers/c++2014/parallel_mode.cc
! ae65032b38f314fef62f6f364d6c7157  libstdc++-v3/testsuite/17_intro/headers/c++2014/stdc++.cc
! 12a07aae6fa90bedb555c124d0f66120  libstdc++-v3/testsuite/17_intro/headers/c++2014/stdc++_multiple_inclusion.cc
! 6e7b3b8c7ffe8cdbd1c49616a0be2bb9  libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc
! c992084d535a90d896e5cb35807b8a00  libstdc++-v3/testsuite/17_intro/headers/c++2017/all_no_exceptions.cc
! c01792fffe6a147dc425ac224d13f816  libstdc++-v3/testsuite/17_intro/headers/c++2017/all_no_rtti.cc
! 5bd6e9913080aba9614ef52af4965754  libstdc++-v3/testsuite/17_intro/headers/c++2017/all_pedantic_errors.cc
  b8a53b2b8da32d102d69cbedea3d2216  libstdc++-v3/testsuite/17_intro/headers/c++2017/charset.cc
! 7aadf32cc1b68607223614fa5eca019c  libstdc++-v3/testsuite/17_intro/headers/c++2017/operator_names.cc
! cd5dffbc3aba8c16f85e02e70d552682  libstdc++-v3/testsuite/17_intro/headers/c++2017/parallel_mode.cc
! 7451602e14460df22d4dd28b103fe93c  libstdc++-v3/testsuite/17_intro/headers/c++2017/stdc++.cc
! 126070dc034554894eabc4f7089e4cab  libstdc++-v3/testsuite/17_intro/headers/c++2017/stdc++_multiple_inclusion.cc
! 948fe796bf7402369a51bd5702e4a02b  libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc
! d7a8d028db8fb32358e31f86016abb31  libstdc++-v3/testsuite/17_intro/headers/c++2020/all_no_exceptions.cc
! 01bcc54f6c296e8c69ef6d25a2067338  libstdc++-v3/testsuite/17_intro/headers/c++2020/all_no_rtti.cc
! 0dfaf32dbbdb356309bdfa030a6c4bda  libstdc++-v3/testsuite/17_intro/headers/c++2020/all_pedantic_errors.cc
  b8a53b2b8da32d102d69cbedea3d2216  libstdc++-v3/testsuite/17_intro/headers/c++2020/charset.cc
! 64f755290372eba3d8235278d6f5b8b7  libstdc++-v3/testsuite/17_intro/headers/c++2020/operator_names.cc
! 652e2a337bf38b3e3ca0c49c2bcdcca6  libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++.cc
! 9df22201175c827bee60b62e621e537b  libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++_multiple_inclusion.cc
! f11164ff458b5a76ab402a7f1bfb3783  libstdc++-v3/testsuite/17_intro/names.cc
! 44aea4dc1700d437c73f660156e02461  libstdc++-v3/testsuite/17_intro/shared_with_static_deps.cc
! ef83f2fe6df689b8cf96f8504ae113db  libstdc++-v3/testsuite/17_intro/static.cc
! dab68cc9b569ccb6c01e3bd633cc366b  libstdc++-v3/testsuite/17_intro/tag_type_explicit_ctor.cc
! 9906e3e6a3de09c92b7340611b01d59b  libstdc++-v3/testsuite/17_intro/using_namespace_std.cc
! f42116f51934d50c2e0d3652835c214b  libstdc++-v3/testsuite/17_intro/using_namespace_std_exp_neg.cc
! a4a5bd862fc6ca9e6d1b346402317c95  libstdc++-v3/testsuite/17_intro/using_namespace_std_tr1_neg.cc
! 7f028883a5cf77646f05ece226964c5b  libstdc++-v3/testsuite/18_support/50594.cc
! e2ab3ad5697eb22ff7c1fcd290afafe5  libstdc++-v3/testsuite/18_support/51333.cc
! 3ca78eb3b8e646fee2a81e66c8a294c8  libstdc++-v3/testsuite/18_support/96817.cc
! bd7bc0f2185898e63ff6157a9140875c  libstdc++-v3/testsuite/18_support/aligned_alloc/aligned_alloc.cc
! 41864497964e5c8c8c48c4058cc44ac3  libstdc++-v3/testsuite/18_support/bad_alloc/cons_virtual_derivation.cc
! 0bf052f40015bcc6b36dfe45b35cee10  libstdc++-v3/testsuite/18_support/bad_alloc/what.cc
! b25fe194d4118b2e9eec2b5934ee97ef  libstdc++-v3/testsuite/18_support/bad_cast/cons_virtual_derivation.cc
! cea1012feaa338d86d01b74d4f82b3b6  libstdc++-v3/testsuite/18_support/bad_cast/what.cc
! 9bed123847e8d5e214106e5acb26132c  libstdc++-v3/testsuite/18_support/bad_exception/23591_thread-1.c
! 958cdfa3627fd5014764524cba346ac5  libstdc++-v3/testsuite/18_support/bad_exception/59392.cc
! 9eec143f76fd0d4461a3c4bb32bcf815  libstdc++-v3/testsuite/18_support/bad_exception/cons_virtual_derivation.cc
! 26328a0d2c0965d50d626129fb28d639  libstdc++-v3/testsuite/18_support/bad_exception/what.cc
! 661056c805cabfb091f4d02744479308  libstdc++-v3/testsuite/18_support/bad_typeid/cons_virtual_derivation.cc
! 063c5ad559b990fa8885dbeba31336e8  libstdc++-v3/testsuite/18_support/bad_typeid/what.cc
! aee49984324ed3aab221b619ac4291c9  libstdc++-v3/testsuite/18_support/byte/81076.cc
! 1c2f7cf58532fd7b3323e682f3b4754a  libstdc++-v3/testsuite/18_support/byte/global_neg.cc
! 1f889c9e5de5660c8829baa2a1ee95d3  libstdc++-v3/testsuite/18_support/byte/ops.cc
! 381028d43987418cbde5ccbe8dbd1a1e  libstdc++-v3/testsuite/18_support/byte/requirements.cc
  b4c65970a3b96295ca66e5a7376e3d19  libstdc++-v3/testsuite/18_support/comparisons/algorithms/fallback.cc
! dc5634272f232f8b37646ae019421def  libstdc++-v3/testsuite/18_support/comparisons/algorithms/partial_order.cc
! 06d343004bb1c9141375fc7d841ac01b  libstdc++-v3/testsuite/18_support/comparisons/algorithms/strong_order.cc
! f4f086f988cf867097fb97b97bd5ca29  libstdc++-v3/testsuite/18_support/comparisons/algorithms/strong_order_floats.cc
! 498ad9e8f10412e2cfbfef37919b0224  libstdc++-v3/testsuite/18_support/comparisons/algorithms/weak_order.cc
! 5332e0ff583c86ceecd76e5cc16b16ba  libstdc++-v3/testsuite/18_support/comparisons/categories/94565.cc
! 3ff421d3ff11df1df886f4b7b70c4b19  libstdc++-v3/testsuite/18_support/comparisons/categories/partialord.cc
! 70e06816e437cdbc95f857a55e400e9e  libstdc++-v3/testsuite/18_support/comparisons/categories/strongord.cc
! 669effa4fe904ac8106e38f0d8d4937e  libstdc++-v3/testsuite/18_support/comparisons/categories/weakord.cc
! 7b3f559c2867ca6eb56004ce6f553e8e  libstdc++-v3/testsuite/18_support/comparisons/categories/zero_neg.cc
! 01e8757cc0cf2594f9450c1e11b995df  libstdc++-v3/testsuite/18_support/comparisons/common/1.cc
! 72a86799316f962cab45748795efd934  libstdc++-v3/testsuite/18_support/comparisons/object/93479.cc
! e6f0f32eb33f7116fe438c8f2902657b  libstdc++-v3/testsuite/18_support/comparisons/object/lwg3530.cc
! b3c02997c9f58784c7b7a1e2c24f479b  libstdc++-v3/testsuite/18_support/coroutines/95917.cc
! 655714524866e35bfd2069e26ddc8e92  libstdc++-v3/testsuite/18_support/coroutines/lwg3460.cc
! b8b157b42eb0f130d851ba69b2bed24b  libstdc++-v3/testsuite/18_support/cxa_vec.cc
! bf6c678b562c6747f18837c3f9664d05  libstdc++-v3/testsuite/18_support/destroying_delete.cc
! 6b20ad58a7469e773f51897adca1b1ba  libstdc++-v3/testsuite/18_support/exception/38732.cc
! 6dd717147717bd93f5e6bf34c266f52a  libstdc++-v3/testsuite/18_support/exception/what.cc
  8a3e4fc86620d59634749ffecd317237  libstdc++-v3/testsuite/18_support/exception_ptr/103630.cc
! 4ae6c9ff1173f8de07952e2c3033dbdc  libstdc++-v3/testsuite/18_support/exception_ptr/40296.cc
! c5d876ed3e039e83035364d2184dcb7d  libstdc++-v3/testsuite/18_support/exception_ptr/60612-terminate.cc
! 6dbe4af2151aa65119ef9df30e145d56  libstdc++-v3/testsuite/18_support/exception_ptr/60612-unexpected.cc
! e387e28de36895c01c664d10277bb0fc  libstdc++-v3/testsuite/18_support/exception_ptr/62258.cc
! e7eb5041cee86bc2bce203b1e422ed7e  libstdc++-v3/testsuite/18_support/exception_ptr/64241.cc
! 36fd9261c3859430f9ba3cac537bb7a8  libstdc++-v3/testsuite/18_support/exception_ptr/90295.cc
  8907da30a344e71f1227eec1fae72f2b  libstdc++-v3/testsuite/18_support/exception_ptr/96657.cc
! 3ba3ed11aea6aeaac34e5250048fc5b1  libstdc++-v3/testsuite/18_support/exception_ptr/current_exception.cc
! 65bcfe2d5500b5f5c5a323c6ead411ae  libstdc++-v3/testsuite/18_support/exception_ptr/lifespan.cc
! 45992fac20fc7b9ecae588e6d1790281  libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr.cc
! c5df8c7fc2568a8bb0152b73777056ed  libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr_2.cc
! 4f19c1ceff56336bedaff133db341553  libstdc++-v3/testsuite/18_support/exception_ptr/move.cc
! 3926df346622c6861a7af169b68a2f4d  libstdc++-v3/testsuite/18_support/exception_ptr/requirements.cc
! 37b5b9a0ef543d38de704ccda2f56605  libstdc++-v3/testsuite/18_support/exception_ptr/requirements_neg.cc
! 69c02ee2b0d71204648f57914242be1a  libstdc++-v3/testsuite/18_support/exception_ptr/rethrow_exception.cc
! 8408fe0a0376b3636c797c3e6b1deb07  libstdc++-v3/testsuite/18_support/free_eh_pool.cc
! 2d82a7cfa520da35181a392a0e115ffa  libstdc++-v3/testsuite/18_support/headers/cfloat/values.cc
! ca5c0c5d110560a910cae9a0b914959e  libstdc++-v3/testsuite/18_support/headers/cfloat/values_c++17.cc
! 4b214afd2993d28bc787489a23546014  libstdc++-v3/testsuite/18_support/headers/climits/values.cc
! c027e75bdc5cd57d743e65e326b12b8a  libstdc++-v3/testsuite/18_support/headers/csetjmp/functions_std.cc
! 6bcc201e82c5abaf969dc4778c8622c0  libstdc++-v3/testsuite/18_support/headers/csetjmp/macros.cc
! 5d66c10fbc4ea64e3eada882899b95ce  libstdc++-v3/testsuite/18_support/headers/csetjmp/types_std.cc
! 1774532592e947becfdb66c7a8ebc34d  libstdc++-v3/testsuite/18_support/headers/csignal/functions_std.cc
! 8a5f0a5c42130b41ae1df8c93222b02e  libstdc++-v3/testsuite/18_support/headers/csignal/macros.cc
! 120d4976a57c74f1a381241fe614da5b  libstdc++-v3/testsuite/18_support/headers/csignal/types_std.cc
! e29a610d3a731e8999fba7a298d44a6a  libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc
! 8e585c05c9aa78c867e5813c9a30669a  libstdc++-v3/testsuite/18_support/headers/cstdarg/macros.cc
! 177052e17ea5a6d3d739bb7e614451d2  libstdc++-v3/testsuite/18_support/headers/cstdarg/types_std.cc
! 1706a7692cc2e72df59a9d8e4b4197d3  libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc
! efd58a07884a1a2bea4feadbbf7920c5  libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc
! 9b20bef74f416918a0cf7da6b1c2bf31  libstdc++-v3/testsuite/18_support/headers/cstddef/macros.cc
! c403fc3994a109210d74ddd7d3d3d029  libstdc++-v3/testsuite/18_support/headers/cstddef/types_std.cc
! 55ce21b67991cbcd75097ce22008375c  libstdc++-v3/testsuite/18_support/headers/cstdint/std_c++0x_neg.cc
! f9bf2e94ee206df4afbf529823344233  libstdc++-v3/testsuite/18_support/headers/cstdint/types_std_c++0x.cc
! 4c2623bf6127742dad79fd15a99bce4e  libstdc++-v3/testsuite/18_support/headers/cstdlib/functions_std.cc
! 1de6359684783ed2df05ae153b9a9078  libstdc++-v3/testsuite/18_support/headers/cstdlib/macros.cc
! 8971e837c391d8e638027093c8a1769d  libstdc++-v3/testsuite/18_support/headers/ctime/functions_std.cc
! 9c1cd8f966d646dd3fe7d1d7f3123485  libstdc++-v3/testsuite/18_support/headers/ctime/macros.cc
! b565e98e9f12d54fafee18f658f59e1c  libstdc++-v3/testsuite/18_support/headers/ctime/types_std.cc
! 109e9213aff428f29ce8cdae0714c265  libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc
! bd22edef1cc4ecd23571f22a641e14c5  libstdc++-v3/testsuite/18_support/headers/exception/types_std.cc
! 1d3e04d64ea5f02e65df071e37aacfb9  libstdc++-v3/testsuite/18_support/headers/limits/synopsis.cc
! dc4b65b1dfdef10f19cb46327175339b  libstdc++-v3/testsuite/18_support/headers/new/synopsis.cc
! c923cbf30dc4b9c0df6d60baac7a7916  libstdc++-v3/testsuite/18_support/headers/new/synopsis_cxx98.cc
! 1a611f26745deca541d2233fab0a17a8  libstdc++-v3/testsuite/18_support/headers/new/types_std.cc
! 6eaac8b6193528e89c42c90811e089b2  libstdc++-v3/testsuite/18_support/headers/typeinfo/synopsis.cc
! f3b2f89326708a81202b451e210f8086  libstdc++-v3/testsuite/18_support/headers/typeinfo/types_std.cc
! bee7eebc169b60ec5f8498407975efae  libstdc++-v3/testsuite/18_support/headers/version/macros.cc
! e6611aa7c917222fe80743b01886d8e7  libstdc++-v3/testsuite/18_support/initializer_list/constexpr.cc
! a16298b97b68e9472d173a60c51fa0c6  libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc
! 93598ab7a68a759b7bed9823de7f739c  libstdc++-v3/testsuite/18_support/initializer_list/requirements/constexpr_functions.cc
! 0c308c7c7fbc2edb8559c9db16a0f373  libstdc++-v3/testsuite/18_support/initializer_list/requirements/explicit_instantiation.cc
! f624e33bdc02c77fb5778cb82d562e26  libstdc++-v3/testsuite/18_support/initializer_list/requirements/typedefs.cc
! d9494ebf763aaa427dff0cb1bad3c3ee  libstdc++-v3/testsuite/18_support/launder/1.cc
! 498a5c9e1f2f8ce0527d80b07a3df3e3  libstdc++-v3/testsuite/18_support/launder/nodiscard.cc
! a15834ba9d01e286f034b2ad489a3f40  libstdc++-v3/testsuite/18_support/launder/requirements.cc
! 354627543c4d847ee11cc89077346be9  libstdc++-v3/testsuite/18_support/launder/requirements_neg.cc
! 5db337751458aa1774af1adcd8d77c89  libstdc++-v3/testsuite/18_support/max_align_t/requirements/1.cc
! 3e38e5e8c5c62f78bb6f2b03ce86e149  libstdc++-v3/testsuite/18_support/max_align_t/requirements/2.cc
! dc40df5591308832205daabef2aa99f0  libstdc++-v3/testsuite/18_support/nested_exception/51438.cc
! a382f504e941a23d0797af2cf8f75988  libstdc++-v3/testsuite/18_support/nested_exception/62154.cc
! 698f8813963adb085ff38f9905be3dd9  libstdc++-v3/testsuite/18_support/nested_exception/68139.cc
! d5eced8168b2128d24bf93c3c0601b13  libstdc++-v3/testsuite/18_support/nested_exception/79114.cc
! 6b4b378c83a1a50e16f9747591e740f7  libstdc++-v3/testsuite/18_support/nested_exception/cons.cc
! 0995bc89d856dfbee4fdef032bf5be4b  libstdc++-v3/testsuite/18_support/nested_exception/nested_ptr.cc
! b9fd24dabd45aeb58f49d163159969e0  libstdc++-v3/testsuite/18_support/nested_exception/rethrow_if_nested.cc
! 824fa0cb158a489b7c1be6376696e2ec  libstdc++-v3/testsuite/18_support/nested_exception/rethrow_nested.cc
! 2ee56d99dbf0b1f1b90014a948892eea  libstdc++-v3/testsuite/18_support/nested_exception/throw_with_nested.cc
! eb0e3ec00478dd3f996bc89b1923586c  libstdc++-v3/testsuite/18_support/new_aligned.cc
! a48edfb14d283df63c79641898aa4146  libstdc++-v3/testsuite/18_support/new_delete_placement.cc
! 183f355142a2ebc660affd473c5471ab  libstdc++-v3/testsuite/18_support/new_handler.cc
! 2f1b95f9cf7dea1e3d5c5afef956866c  libstdc++-v3/testsuite/18_support/new_nothrow.cc
! 59ad3909f307e0747eab47ead4637928  libstdc++-v3/testsuite/18_support/numeric_limits/29989.cc
! 7ff8875ccb67e3edeb333989b1302c49  libstdc++-v3/testsuite/18_support/numeric_limits/40856.cc
! 792e5796ce23ed7ae896f901fe8e21e2  libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
! 755184e846ce6df66e9a08a3ff904ce6  libstdc++-v3/testsuite/18_support/numeric_limits/char8_t.cc
! 8fb305ba4a0ce2d2083008fbeded939f  libstdc++-v3/testsuite/18_support/numeric_limits/cons/default.cc
! b94d5d0ebd7d963ba90c5c1f87005389  libstdc++-v3/testsuite/18_support/numeric_limits/cons/default_c++0x.cc
! 9e76e2aaad403df910351476b2d1ce67  libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc
! 2ba889501f14225cf0f9b1c646ccff07  libstdc++-v3/testsuite/18_support/numeric_limits/digits10.cc
! 74e18b8325b886d7d5d0d9bba27b91eb  libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
! 363ceac27a0b5112aee20a9a9341373d  libstdc++-v3/testsuite/18_support/numeric_limits/epsilon.cc
! 534be28dbb4565126db60b9c982ab4f3  libstdc++-v3/testsuite/18_support/numeric_limits/infinity.cc
! 5ba14a1ae08c88837310032209eff956  libstdc++-v3/testsuite/18_support/numeric_limits/is_iec559.cc
! 58766bff78d16b47a523b238c0dad5f2  libstdc++-v3/testsuite/18_support/numeric_limits/is_signed.cc
! cc54e89e8c8d8ce4bdc106ff7cd06ad2  libstdc++-v3/testsuite/18_support/numeric_limits/lowest.cc
! 8ea155ecdeb17b8b99b84ba8e4c309e1  libstdc++-v3/testsuite/18_support/numeric_limits/max_digits10.cc
! 2cc640da7d8cc494dd4c158dcc74ef28  libstdc++-v3/testsuite/18_support/numeric_limits/min_max.cc
! 9941ac0b81ca36701fc5913e848921c7  libstdc++-v3/testsuite/18_support/numeric_limits/primary.cc
! 8310c189ace14efa52d708a76e1da3e5  libstdc++-v3/testsuite/18_support/numeric_limits/quiet_NaN.cc
! 9287de812553d2308bc380dc72802fa9  libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc
! 40e2542275aa390275afcacf2a9fd220  libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc
! e29e9f4eb348028999b4e3c020770efd  libstdc++-v3/testsuite/18_support/numeric_limits/requirements/explicit_instantiation/1.cc
! ff9150a9e00693c510bd868057bb3425  libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc
! 79c9da03c1d0f3940ab3d6e53eeaaf91  libstdc++-v3/testsuite/18_support/numeric_limits/traps.cc
! 8366fdc02f41d4c76e181903324da02d  libstdc++-v3/testsuite/18_support/pthread_guard.cc
! dd16b1d84319e38131e7507354897c76  libstdc++-v3/testsuite/18_support/quick_exit/quick_exit.cc
! 5fe07f8bf4e87340b7ffcf1376687e19  libstdc++-v3/testsuite/18_support/set_terminate.cc
! a099ed8465c2104c512f83439b4a5829  libstdc++-v3/testsuite/18_support/set_unexpected.cc
! e83ab6fcbea4f002d1b09461c1cb502c  libstdc++-v3/testsuite/18_support/source_location/1.cc
! 1b56a1c9e93efc536606b4a4626e8823  libstdc++-v3/testsuite/18_support/source_location/consteval.cc
! a9d8f7acb6e7be028dcaaace665beba3  libstdc++-v3/testsuite/18_support/source_location/srcloc.h
! 6d07e08104d920d70d081261d478cc07  libstdc++-v3/testsuite/18_support/source_location/version.cc
! e99074e35242ec6648381247f776f9a7  libstdc++-v3/testsuite/18_support/terminate_handler.cc
  a4ea00becc0e698345c65728494c0afe  libstdc++-v3/testsuite/18_support/type_info/103240.cc
! 6c2a3b66005913a1dc28fc600e569e41  libstdc++-v3/testsuite/18_support/type_info/52562.cc
! 7cc0fa5a242dc51c7245f1c2fc52e0a7  libstdc++-v3/testsuite/18_support/type_info/constexpr.cc
! 6ed1dc9ece8d4b1a6d4091f7cc9d5c2d  libstdc++-v3/testsuite/18_support/type_info/fundamental.cc
! 95486fdff7794f622f6bc62cae3db00f  libstdc++-v3/testsuite/18_support/type_info/hash_code.cc
! b4827c2ef0ad79890f3e7c66888fff3d  libstdc++-v3/testsuite/18_support/uncaught_exception/14026.cc
! 198ecbc46c52e5800b6607de94d5b7ed  libstdc++-v3/testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc
! 0e36a7cd5dc718d1cf090b296c4ae08f  libstdc++-v3/testsuite/18_support/unexpected_handler.cc
  e76078fa52225514dc89f9b1116c07ff  libstdc++-v3/testsuite/19_diagnostics/error_category/102425.cc
! 8e44f76952bcbb5cdc1c0a7cabe08b8e  libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc
! 907b9f6b78daf93f9905216bf3e6a151  libstdc++-v3/testsuite/19_diagnostics/error_category/cons/default.cc
! 5a980808013e81ba89f44977716b05d2  libstdc++-v3/testsuite/19_diagnostics/error_category/generic_category.cc
! 0a66d8bbf6fa03d3f76f4e2fdde4daf7  libstdc++-v3/testsuite/19_diagnostics/error_category/noexcept.cc
! 5de2967bc4784fcbb31f74be03611b3c  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/equal.cc
! e02a4609c356f585bb83fa7d5848fee5  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/less.cc
! 0b398a64b97525c4bc0743d9cd913270  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/not_equal.cc
! 92942d91124cce305b24b5388af050f5  libstdc++-v3/testsuite/19_diagnostics/error_category/operators/three_way.cc
! 4c92c827b47823e8bbf90db105d5956a  libstdc++-v3/testsuite/19_diagnostics/error_category/system_category.cc
! e8a86f7e9babfdaa4f57b3e02a368e52  libstdc++-v3/testsuite/19_diagnostics/error_code/cons/1.cc
! dbf3d1ded9e69273cc36d09366a230a2  libstdc++-v3/testsuite/19_diagnostics/error_code/cons/39882.cc
! 3757f17027560275424dfa2e7cab6d75  libstdc++-v3/testsuite/19_diagnostics/error_code/hash.cc
! 0a8a4ca6e2525f1d8259d28ad9570b83  libstdc++-v3/testsuite/19_diagnostics/error_code/is_error_code_v.cc
! 32b2e6d58d0bde6332960cd11770eb6d  libstdc++-v3/testsuite/19_diagnostics/error_code/modifiers/39882.cc
! 39e572b1724d58c70d2676bd179885a0  libstdc++-v3/testsuite/19_diagnostics/error_code/operators/bool.cc
! 3837a63b47cf00bc9ade0c02803a8eab  libstdc++-v3/testsuite/19_diagnostics/error_code/operators/bool_neg.cc
! f756971547470b6b0c4e64eda86642dd  libstdc++-v3/testsuite/19_diagnostics/error_code/operators/equal.cc
! d743aef406da8090931f00e68749819f  libstdc++-v3/testsuite/19_diagnostics/error_code/operators/less.cc
! 0f3ae68dc883fdc3d04dc8c66f48760c  libstdc++-v3/testsuite/19_diagnostics/error_code/operators/not_equal.cc
! 600a71610d6a36bc1ff25fc0e149e9f2  libstdc++-v3/testsuite/19_diagnostics/error_code/operators/three_way.cc
! 3766cb7420ed93c1b40dfe0c1c008199  libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/1.cc
! 6acb0a1e3f9c3b5c525fad53ac8ade8c  libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/39881.cc
! 02df04885e6d7db301ab42479cc5e12f  libstdc++-v3/testsuite/19_diagnostics/error_condition/hash.cc
! dfdbfd77693b69904ee1fc5dd622757f  libstdc++-v3/testsuite/19_diagnostics/error_condition/modifiers/39881.cc
! 83e154153521b2ab1021289ebf35437e  libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/bool.cc
! 6e7bf394af5a3f7d3e93764629163d64  libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/bool_neg.cc
! 917f474190a2a8b0f27e3d462b806f9c  libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/equal.cc
! cea0964fcfd078de581fd5180620f3c2  libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/less.cc
! a0113274a42da0cdfbdafcd49f96ec7f  libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/not_equal.cc
! 75bc8a8324a61f75264fdf3106900844  libstdc++-v3/testsuite/19_diagnostics/error_condition/operators/three_way.cc
! 2620cb6b03652a1f224a0e8a2cf24ac0  libstdc++-v3/testsuite/19_diagnostics/headers/cassert/macros.cc
! c29d3848edb1ba3bbe7dd5a27bf96d50  libstdc++-v3/testsuite/19_diagnostics/headers/cerrno/macros.cc
! 9ea5c5ac8a537f547d30cdff757cacb5  libstdc++-v3/testsuite/19_diagnostics/headers/stdexcept/synopsis.cc
! 030ad4e2c537fcd78eee3325449ad4f2  libstdc++-v3/testsuite/19_diagnostics/headers/stdexcept/types_std.cc
! 5a10d2f58d228e796967e53fb1a8e1ab  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/34538.cc
! 68155f8b66725f4d9c525f77e08cb913  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/93151.cc
! 0ad31d97c2d07686d6c08776dc7abe59  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc
! a08fc5ed0e922a671d330cf507f29a65  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc
! d3a549ebca10f7818f422a3ee10cb663  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc
! 8bd1ecc46b3ede2ff836a6cd183c9fa8  libstdc++-v3/testsuite/19_diagnostics/logic_error/cons_virtual_derivation.cc
! 7e55389300c1aaab0b0e20b8822d39e8  libstdc++-v3/testsuite/19_diagnostics/logic_error/what-1.cc
! 07c0847a1c903c2aa394272a5c891230  libstdc++-v3/testsuite/19_diagnostics/logic_error/what-2.cc
! 1101436d94a0406f3c083793af698bc1  libstdc++-v3/testsuite/19_diagnostics/logic_error/what-3.cc
! 64860bff9ab2fb5f9e9c4aa11aab800a  libstdc++-v3/testsuite/19_diagnostics/logic_error/what-big.cc
! 61ec58ea3248a0349e8f1c3b7b89f9ef  libstdc++-v3/testsuite/19_diagnostics/runtime_error/cons_virtual_derivation.cc
! c3be12d3ac585ad842285653ae25415c  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-1.cc
! caa4b4f4c683b1157677b400d96e5628  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-2.cc
! c06cd3372e5d237f3d664d174e69b38d  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc
! a6dcf6cbaf916e3c7f40ba4b651d42f3  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-big.cc
! a3f875cb81845cea6552ad2be474733b  libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc
! bcbe8956841ad8748b7d53b018a0f23b  libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc
! 489c2f3ec1b126c0f5cab03ec75198b5  libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc
! 5389798b2a4cec9e64b784cd036fa384  libstdc++-v3/testsuite/19_diagnostics/stacktrace/synopsis.cc
! 663e3dcea433a03255e7eed74d7d7f2f  libstdc++-v3/testsuite/19_diagnostics/stacktrace/version.cc
! 9ac8c5839182eed08ec20702277e2b20  libstdc++-v3/testsuite/19_diagnostics/stdexcept.cc
! 89321f4ec6dc6b4250f7fea9e24692a4  libstdc++-v3/testsuite/19_diagnostics/system_error/39880.cc
! 900854eeb0ddc478e3f0ec2f47445de1  libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc
! cd76bc8f6708934096b45e294e1a60a5  libstdc++-v3/testsuite/19_diagnostics/system_error/cons_virtual_derivation.cc
! b8fd5b3cc781e4351fcba88c19391352  libstdc++-v3/testsuite/19_diagnostics/system_error/noexcept.cc
! d937bb145e38369d7ca25eff4815af69  libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc
! acde8e1d6fef7f7d7667d9bddde520f1  libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc
! 9efa087b69730398229dbde2a0dc4254  libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc
! bcb5c724a50db36818bd3704402d6771  libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc
! e665668368611ac526a717dc5199ad92  libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc
! 2c8a59abd5cb06be9bb1e4ff7cefa04f  libstdc++-v3/testsuite/20_util/add_const/requirements/alias_decl.cc
! 0507fa70a962d2c91bc91e88af0e388f  libstdc++-v3/testsuite/20_util/add_const/requirements/explicit_instantiation.cc
! ee9ffd069ce97f4dc0348342e0d64b04  libstdc++-v3/testsuite/20_util/add_const/value.cc
! 09898d6fb64e1d7a2565f76fea73f583  libstdc++-v3/testsuite/20_util/add_cv/requirements/alias_decl.cc
! 331c2502a7ad934ff8d558e11ffe51a5  libstdc++-v3/testsuite/20_util/add_cv/requirements/explicit_instantiation.cc
! 805465673d8f9ada1eb17622ec153672  libstdc++-v3/testsuite/20_util/add_cv/value.cc
! f14a59e4fed0d8e7dcef5363e1fdf846  libstdc++-v3/testsuite/20_util/add_lvalue_reference/requirements/alias_decl.cc
! f13a56b4ddb140bc3ac0f3bab4290e35  libstdc++-v3/testsuite/20_util/add_lvalue_reference/requirements/explicit_instantiation.cc
! ee9f96417795fa7be9db694bd5bea92c  libstdc++-v3/testsuite/20_util/add_lvalue_reference/value.cc
! d51408ff7f29ccfe71f1393929433009  libstdc++-v3/testsuite/20_util/add_pointer/requirements/alias_decl.cc
! 069accf68bcfbc4f54a934da4b80709c  libstdc++-v3/testsuite/20_util/add_pointer/requirements/explicit_instantiation.cc
! f5d2cd33866f94db46a448d8e79f2968  libstdc++-v3/testsuite/20_util/add_pointer/value.cc
! d90be29d2b6cc081e57f87ec516d5dff  libstdc++-v3/testsuite/20_util/add_rvalue_reference/requirements/alias_decl.cc
! 7e8deb4987b63ecf63c8f043a8179611  libstdc++-v3/testsuite/20_util/add_rvalue_reference/requirements/explicit_instantiation.cc
! 694112e8cea1a83cf9d653701b1ee84c  libstdc++-v3/testsuite/20_util/add_rvalue_reference/value.cc
! b34e25f5ba7cdd9b98ed5cb4e85d7260  libstdc++-v3/testsuite/20_util/add_volatile/requirements/alias_decl.cc
! 1020c0e34f97b3c7ad2f3a6588338c2f  libstdc++-v3/testsuite/20_util/add_volatile/requirements/explicit_instantiation.cc
! 1ea38fbdc36585106b547cd49bd54115  libstdc++-v3/testsuite/20_util/add_volatile/value.cc
! fef1c5699ab3eab52a15c568fc63b420  libstdc++-v3/testsuite/20_util/addressof/1.cc
! 436c62872a6d21da72eea8608fafc6e3  libstdc++-v3/testsuite/20_util/addressof/requirements/constexpr.cc
! 0a44dbeb85562fbd27212f2257171a2a  libstdc++-v3/testsuite/20_util/addressof/requirements/explicit_instantiation.cc
! c197757f9e9a85ae832c47fc748f36bc  libstdc++-v3/testsuite/20_util/align/1.cc
! 0573087515fdac2ca4816b3d7f3d56bc  libstdc++-v3/testsuite/20_util/align/2.cc
! ac3a7e2817e394cfde3e9569b54b4299  libstdc++-v3/testsuite/20_util/align/3.cc
! 8a71c8801bc2b6bf1d3e8b62f255885c  libstdc++-v3/testsuite/20_util/aligned_storage/requirements/alias_decl.cc
! b187f7a0203f6ed554d8df052b66e3e1  libstdc++-v3/testsuite/20_util/aligned_storage/requirements/explicit_instantiation.cc
! bd25d04111dcc2ff97e24ce4bfe2372c  libstdc++-v3/testsuite/20_util/aligned_storage/value.cc
! 1d662241a21d232edcf761e23f982a25  libstdc++-v3/testsuite/20_util/aligned_union/1.cc
! b2ecbcee611664e7ff376187c0a6d0ea  libstdc++-v3/testsuite/20_util/aligned_union/requirements/alias_decl.cc
! 762e7015eaad553b3a2febee4548046d  libstdc++-v3/testsuite/20_util/alignment_of/requirements/explicit_instantiation.cc
! 091c44f2711c01b2758ae4182fb6bd7f  libstdc++-v3/testsuite/20_util/alignment_of/requirements/typedefs.cc
! 239411449419001e95ada86653301fb9  libstdc++-v3/testsuite/20_util/alignment_of/value.cc
! fd81eb930c1e63611dca1ed3e61bc3b5  libstdc++-v3/testsuite/20_util/allocator/1.cc
! d9ab0918c293e0ffd979e8429780bbc2  libstdc++-v3/testsuite/20_util/allocator/10378.cc
! cd1f3bc2900d0b1bf30a1a3b9b18981e  libstdc++-v3/testsuite/20_util/allocator/14176.cc
! df9fb752dd9cfca61bfb9cc4d5461c80  libstdc++-v3/testsuite/20_util/allocator/33807.cc
! 2a9480a8b9d6971528dbda03d3ace413  libstdc++-v3/testsuite/20_util/allocator/64135.cc
! 7206a88ede685e5ca4341c6b38862d9e  libstdc++-v3/testsuite/20_util/allocator/8230.cc
! ccfbcaa0db63936cedfc789440098404  libstdc++-v3/testsuite/20_util/allocator/89510.cc
! a468102be841368c9834794069e8c54e  libstdc++-v3/testsuite/20_util/allocator/lwg3190.cc
! 9aab9c25407a6dd599e6a63544f5f5b9  libstdc++-v3/testsuite/20_util/allocator/overaligned.cc
! 51e9cc513255c75bb370e5e512a524ef  libstdc++-v3/testsuite/20_util/allocator/rebind_c++20.cc
! 362b205afb20916ae0e35644e332f05d  libstdc++-v3/testsuite/20_util/allocator/requirements/constexpr.cc
! 207a368d70be4a6dfa51829affd5c102  libstdc++-v3/testsuite/20_util/allocator/requirements/explicit_instantiation/1.cc
! 865f0887c796e2894b68be59039e40ab  libstdc++-v3/testsuite/20_util/allocator/requirements/typedefs.cc
! ae9dd6b6bafa5716598d2226800964f7  libstdc++-v3/testsuite/20_util/allocator/requirements/typedefs_c++20.cc
! 703b9adda5f34f677512ceb29ce12169  libstdc++-v3/testsuite/20_util/allocator/void.cc
! 61a50e5a02cbf4ffd75ebd22f64455c8  libstdc++-v3/testsuite/20_util/allocator_traits/header-2.cc
! f9a36f30908b6e5d72f62fefd66afc25  libstdc++-v3/testsuite/20_util/allocator_traits/header.cc
! 62fbe886b445d4548001a499a09812bd  libstdc++-v3/testsuite/20_util/allocator_traits/members/92878_92947.cc
! 4861149514426929b475f27852bb204a  libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint.cc
! 8e4cafdf720a4d34fb37595bb9721998  libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint_nonpod.cc
! 299c5d3f693c2ed79694c7555898e71b  libstdc++-v3/testsuite/20_util/allocator_traits/members/construct.cc
! 1e4ec3afdbaad9a81154c2b79f91efc8  libstdc++-v3/testsuite/20_util/allocator_traits/members/destroy.cc
! 3c2c4f0d085eabcdd33f6743c8dbbfd7  libstdc++-v3/testsuite/20_util/allocator_traits/members/is_always_equal.cc
! d4108635fc8c04398c907f867d9cd8a3  libstdc++-v3/testsuite/20_util/allocator_traits/members/max_size.cc
! f6a01d9c9399b6dc528dd503cecee261  libstdc++-v3/testsuite/20_util/allocator_traits/members/pointers.cc
! db55532d731e8b6b5fd1ae92379d2dc6  libstdc++-v3/testsuite/20_util/allocator_traits/members/rebind_alloc.cc
! b38561a6935164feaa80598b6986b260  libstdc++-v3/testsuite/20_util/allocator_traits/members/select.cc
! e7cddef42fffa182ee5eb11cf0c12410  libstdc++-v3/testsuite/20_util/allocator_traits/requirements/explicit_instantiation.cc
! 652f2615f40be279a5cd24adc41ef4e4  libstdc++-v3/testsuite/20_util/allocator_traits/requirements/typedefs.cc
! 244659a117632263c8d872a4e519e2ab  libstdc++-v3/testsuite/20_util/allocator_traits/requirements/typedefs2.cc
  53d95c7e7934ce41b96d0a86033b6a99  libstdc++-v3/testsuite/20_util/any/102894.cc
! e2fca5e789f98d5dfef44ccc95bc9f76  libstdc++-v3/testsuite/20_util/any/assign/1.cc
! d01ba038607a0be8c0ebcbc0afc0fe04  libstdc++-v3/testsuite/20_util/any/assign/2.cc
! 79f02a03c4a640d650107f5c4258e0d0  libstdc++-v3/testsuite/20_util/any/assign/92878_92947.cc
! 7fcb19cf8dcd853d3c58c226441ffec0  libstdc++-v3/testsuite/20_util/any/assign/emplace.cc
! 37f258ee406070871e45127a8ca5a28d  libstdc++-v3/testsuite/20_util/any/assign/exception.cc
! 31fc37c63f7c75bbbcc37c27f024f79b  libstdc++-v3/testsuite/20_util/any/assign/self.cc
! 321f229028fd59b607c53f2d26d2eafd  libstdc++-v3/testsuite/20_util/any/cons/1.cc
  097d518046e23537949952c936ddfa1c  libstdc++-v3/testsuite/20_util/any/cons/101034.cc
! 335e5502fad2ac140247bdc170504f8f  libstdc++-v3/testsuite/20_util/any/cons/104242.cc
! 855e75aa8462203b5f87a24541db1952  libstdc++-v3/testsuite/20_util/any/cons/2.cc
! 826f185dc51f69a0ab8d1f2335986459  libstdc++-v3/testsuite/20_util/any/cons/90415.cc
! 5539553886e8ad6b2ba83893f0b569bd  libstdc++-v3/testsuite/20_util/any/cons/92156.cc
! cb739269f63b936a136e916b9d839d5f  libstdc++-v3/testsuite/20_util/any/cons/92878_92947.cc
! 1a0d7537907092a26f448a5c16ecf941  libstdc++-v3/testsuite/20_util/any/cons/aligned.cc
! c90b9951e6429a4b4ad2ef035e3cc857  libstdc++-v3/testsuite/20_util/any/cons/explicit.cc
! 684a586ea5463b5503da10c73259e437  libstdc++-v3/testsuite/20_util/any/cons/in_place.cc
! b22ee32c9747097bac566c9e1b138118  libstdc++-v3/testsuite/20_util/any/cons/nontrivial.cc
! eefd5cbd76e04f936c11d5b1df93489f  libstdc++-v3/testsuite/20_util/any/make_any.cc
! 1a0699fdec1384cee6e939332dfb0a74  libstdc++-v3/testsuite/20_util/any/misc/any_cast.cc
! 174b8cb46297a8c96c3df0f6397a83c7  libstdc++-v3/testsuite/20_util/any/misc/any_cast_neg.cc
! a04eac60519c81e4fdef0d442c07af11  libstdc++-v3/testsuite/20_util/any/misc/any_cast_no_rtti.cc
! 70a36e128b355c8a699ecd49ffdd7b3e  libstdc++-v3/testsuite/20_util/any/misc/swap.cc
! da19833eaea81e776688f755b0c0d7c6  libstdc++-v3/testsuite/20_util/any/modifiers/1.cc
! ffd841383afd9ceee535b6029825102a  libstdc++-v3/testsuite/20_util/any/modifiers/83658.cc
! 0b178f58fe2dc648c5ceadbb3843ace8  libstdc++-v3/testsuite/20_util/any/modifiers/92156.cc
! 8cf003e1ff241a7b0df478196794d384  libstdc++-v3/testsuite/20_util/any/observers/type.cc
! b965df8cef8c2d5831514ae10feef71d  libstdc++-v3/testsuite/20_util/any/requirements.cc
! ca32a2a3ed352918a9edce8c1128a596  libstdc++-v3/testsuite/20_util/any/typedefs.cc
! bc2b36c3203fe1eb61c3ec31161dedf1  libstdc++-v3/testsuite/20_util/as_const/1.cc
! 1ba0782c58c2eef88e8ca5a5c216a577  libstdc++-v3/testsuite/20_util/as_const/rvalue_neg.cc
! c9facc3ae52748d536b062531c637f52  libstdc++-v3/testsuite/20_util/assume_aligned/1.cc
! 4d4b3d3b7659f27e035248d3249bb113  libstdc++-v3/testsuite/20_util/assume_aligned/2_neg.cc
! d2baae4be9498c15e8a8379a7417edbe  libstdc++-v3/testsuite/20_util/assume_aligned/3.cc
! 381ea24ef8d842b8460f500b3911bed8  libstdc++-v3/testsuite/20_util/assume_aligned/97132.cc
! bfbab697da26fe72c0b40997e2388698  libstdc++-v3/testsuite/20_util/auto_ptr/1.cc
! bc9d199fff295e5f455e5463a62ce2d3  libstdc++-v3/testsuite/20_util/auto_ptr/2.cc
! 001e287f9d8f6ff39447cf216a5dbfe8  libstdc++-v3/testsuite/20_util/auto_ptr/3.cc
! e48dcad34a60e873fb2393185ed5fb82  libstdc++-v3/testsuite/20_util/auto_ptr/3946.cc
! fa1f746097ccf2e7dd917c61dda3ff2f  libstdc++-v3/testsuite/20_util/auto_ptr/4.cc
! 1cd6fc21fa252f387e8add9e0213f9be  libstdc++-v3/testsuite/20_util/auto_ptr/5.cc
! f23516450cb677e05d6d20e392c0eb7f  libstdc++-v3/testsuite/20_util/auto_ptr/6.cc
! 560486527bd972db8113145a746b5925  libstdc++-v3/testsuite/20_util/auto_ptr/7.cc
! a1b2c93a15d32de5e5db92e2b9e2ef61  libstdc++-v3/testsuite/20_util/auto_ptr/assign_neg.cc
! 01957d6a2dc97bb8c0c25b0766853cb6  libstdc++-v3/testsuite/20_util/auto_ptr/requirements/explicit_instantiation/1.cc
! c9d1c43af0768ca80c485c95a0cab95a  libstdc++-v3/testsuite/20_util/bad_function_call/cons_virtual_derivation.cc
! 17f352775596ef66d45c7b8bf5cc06db  libstdc++-v3/testsuite/20_util/bad_function_call/what.cc
! a6f1be7521c8c442803dfbf49940d5a0  libstdc++-v3/testsuite/20_util/bind/35569.cc
! 3753f515b80ec4a1485be8bf9e0e6727  libstdc++-v3/testsuite/20_util/bind/38889.cc
! a09fc8a4733d5649164015961a03ebf7  libstdc++-v3/testsuite/20_util/bind/42593.cc
! 38308d68e39c03461cae35ffd713d9d8  libstdc++-v3/testsuite/20_util/bind/45924.cc
! 093d1b9015cf3e7df1ab5f247438bdc3  libstdc++-v3/testsuite/20_util/bind/48698.cc
! 9e44ee8bffc0a0e0fda33f6adcf506af  libstdc++-v3/testsuite/20_util/bind/49058_1.cc
! f1fb1efd29ec407af3b40f12793da1d3  libstdc++-v3/testsuite/20_util/bind/49058_2.cc
! 1cdf789053971f11becd3ca41a49c580  libstdc++-v3/testsuite/20_util/bind/57899.cc
! eff9120bf4de07ef404b0214e169f9e3  libstdc++-v3/testsuite/20_util/bind/60497.cc
! 904ae554d84349a4aadedd3d6d4890eb  libstdc++-v3/testsuite/20_util/bind/68912.cc
! 6c17a377eeaf41755da7c7878585d6d2  libstdc++-v3/testsuite/20_util/bind/79798.cc
! 95e16aad1530581c1fe1838f1a5f63b8  libstdc++-v3/testsuite/20_util/bind/83427.cc
! 6d995700f65c5e7d105d5a4c5752ebbd  libstdc++-v3/testsuite/20_util/bind/91371.cc
! cd13eacefd0c62fb06c9a7a181b13746  libstdc++-v3/testsuite/20_util/bind/all_bound.cc
! 7ef889f9336fa4a278afca18697048c9  libstdc++-v3/testsuite/20_util/bind/constexpr.cc
! 2985d1a85a8548fc4bcac1e71e7054d3  libstdc++-v3/testsuite/20_util/bind/conv_result.cc
! f59f7c3f78518468975a9a0e4fcf90c0  libstdc++-v3/testsuite/20_util/bind/cv_quals.cc
! af3f3388c48655d385c6b243e928cabb  libstdc++-v3/testsuite/20_util/bind/cv_quals_2.cc
! a75956ff0ff66666e9b2375a3cf61007  libstdc++-v3/testsuite/20_util/bind/cv_quals_3.cc
! f7bc18618409e06e51dcd75094d89423  libstdc++-v3/testsuite/20_util/bind/is_placeholder_v.cc
! caa173d7eac2cdedf421a7e772771e7d  libstdc++-v3/testsuite/20_util/bind/move.cc
! 4bced4e9bd9c0fdbc5177b8f85a17417  libstdc++-v3/testsuite/20_util/bind/nested.cc
! 987621c6d63e976a5c265607f04b9fec  libstdc++-v3/testsuite/20_util/bind/placeholders.cc
! 2c74b90a9f5e7317309ff6deeb893c54  libstdc++-v3/testsuite/20_util/bind/ref.cc
! 07afc63f295d47db5a77d6e9ba97d424  libstdc++-v3/testsuite/20_util/bind/ref2.cc
! 11d099bc0b60ea7c478967161d50ef95  libstdc++-v3/testsuite/20_util/bind/ref_neg.cc
! 823bac204ecbc9d3c86971cbc0f7d319  libstdc++-v3/testsuite/20_util/bind/refqual.cc
! 07e47dde59d6c47f923b7e958fafe1d1  libstdc++-v3/testsuite/20_util/bind/socket.cc
! 6624f492729c70f083dfd591505ced89  libstdc++-v3/testsuite/20_util/bool_constant/requirements.cc
  7b45f3d65401a77e7c8feec605d0e13f  libstdc++-v3/testsuite/20_util/common_reference/100894.cc
! 204688249edc2f6623540e9d07029eab  libstdc++-v3/testsuite/20_util/common_reference/requirements/alias_decl.cc
! 87863e944e3b758eead75332333c3d70  libstdc++-v3/testsuite/20_util/common_reference/requirements/explicit_instantiation.cc
! 3275b1d74753eb4a08cd86066e9ee1da  libstdc++-v3/testsuite/20_util/common_reference/requirements/typedefs.cc
! 42cb067efc51b8fd2203eaefc8ffb740  libstdc++-v3/testsuite/20_util/common_type/requirements/alias_decl.cc
! a9b88ad64ad472811625085b2fbaac66  libstdc++-v3/testsuite/20_util/common_type/requirements/explicit_instantiation.cc
! 770223b7f0d40fd673bcc73df5732608  libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_1.cc
! 843f2c2771d898d6d896ad0688910841  libstdc++-v3/testsuite/20_util/common_type/requirements/sfinae_friendly_2.cc
! 566edcf38566e960b2ea57006cfd68d7  libstdc++-v3/testsuite/20_util/common_type/requirements/typedefs-1.cc
! 196bcd9392463652f4552bd915f3d070  libstdc++-v3/testsuite/20_util/common_type/requirements/typedefs-2.cc
! 9dfb9510aff77b45d5a4b6e16b0ad86b  libstdc++-v3/testsuite/20_util/conditional/requirements/alias_decl.cc
! f4ba705398b46a0a05fd8cc2b0441eea  libstdc++-v3/testsuite/20_util/conditional/requirements/explicit_instantiation.cc
! b6ef2b3ba6969cb60137145644fae054  libstdc++-v3/testsuite/20_util/conditional/requirements/typedefs.cc
! ddbdce46e2087b45c3aea6bfc6304cd5  libstdc++-v3/testsuite/20_util/decay/requirements/alias_decl.cc
! 6f8b59ae21485b93ec71e0a14660a1a3  libstdc++-v3/testsuite/20_util/decay/requirements/explicit_instantiation.cc
! a38ea2fa32cc4818228bb597203e3fe5  libstdc++-v3/testsuite/20_util/decay/requirements/typedefs.cc
! 8076711f0e9d518de899121da7bf6637  libstdc++-v3/testsuite/20_util/declval/requirements/1.cc
! 8795c34c783c151467f9d8c090c4a066  libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
! 510094f2352e00bc3c98d72c6e2d291a  libstdc++-v3/testsuite/20_util/default_delete/48631_neg.cc
! 9a7515be77eedd837ee73f5e0c54ead4  libstdc++-v3/testsuite/20_util/default_delete/cons/constexpr.cc
! 77aabc6b885a5e747f6090c1f8dd29e2  libstdc++-v3/testsuite/20_util/default_delete/void_neg.cc
! b3415c59024254394b532b647bc497f6  libstdc++-v3/testsuite/20_util/duration/arithmetic/1.cc
! e4b514e6ace9ea3f45a5559e581e68ac  libstdc++-v3/testsuite/20_util/duration/arithmetic/2.cc
! 27fb0edde4e6b353a82bda16d421e3b0  libstdc++-v3/testsuite/20_util/duration/arithmetic/58850.cc
! e96ae609834beabc0a724fbfff9019b8  libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr.cc
! 9a00bc7347bdf8d62296ce61ba43d4d1  libstdc++-v3/testsuite/20_util/duration/arithmetic/constexpr_c++17.cc
! ab685d6a71ab218e854e85267a0e0eb4  libstdc++-v3/testsuite/20_util/duration/arithmetic/dr2020.cc
! cb2eb591ce5115bc92d9daf1e1a04a65  libstdc++-v3/testsuite/20_util/duration/arithmetic/dr3050.cc
! 906b30014a4883e217e3f5de2e3f2779  libstdc++-v3/testsuite/20_util/duration/arithmetic/dr934-1.cc
! e078a67b4f69ad6bf18f1676223f8b78  libstdc++-v3/testsuite/20_util/duration/arithmetic/dr934-2.cc
! 434549d638824b15d16b46d44b1c1191  libstdc++-v3/testsuite/20_util/duration/comparison_operators/1.cc
! 7ae3c6ddc60595d3ac4855dcd07104e2  libstdc++-v3/testsuite/20_util/duration/comparison_operators/constexpr.cc
! d4df9605d6b67a702dbfdc83cdedac79  libstdc++-v3/testsuite/20_util/duration/comparison_operators/three_way.cc
! 9d0e3eca69ffc718ca67dc21e54b609c  libstdc++-v3/testsuite/20_util/duration/cons/1.cc
! b0c75b10f9c2bece657cfb947d410f3a  libstdc++-v3/testsuite/20_util/duration/cons/1_neg.cc
! a34c418eab7804b72b7ce02998b7c0a9  libstdc++-v3/testsuite/20_util/duration/cons/2.cc
! e34387b51089af246134e4592795910b  libstdc++-v3/testsuite/20_util/duration/cons/54025.cc
! fe64651719646b81a298da29f023120d  libstdc++-v3/testsuite/20_util/duration/cons/constexpr.cc
! b15cf3491a369ffb693fc876145b1f54  libstdc++-v3/testsuite/20_util/duration/cons/dr1177.cc
! 0d5ada53cba38741dbc5fa9d3a6315c0  libstdc++-v3/testsuite/20_util/duration/cons/dr2094.cc
! 638be4374c50c12cc249e8e4309b4475  libstdc++-v3/testsuite/20_util/duration/cons/dr3050.cc
! 12202fde9d6029d8f8bcc0046da5de0e  libstdc++-v3/testsuite/20_util/duration/cons/dr974_neg.cc
! 96a643f862f8810f956e524eede56834  libstdc++-v3/testsuite/20_util/duration/io.cc
! 1a0cbf338ddd5754783a33ab72a0ef0c  libstdc++-v3/testsuite/20_util/duration/literals/61166.cc
! 9ebbf395327b35cfc2d5b4ee87109ec8  libstdc++-v3/testsuite/20_util/duration/literals/65499.cc
! 6851d96534703e0dd1d9875c4dc73fbe  libstdc++-v3/testsuite/20_util/duration/literals/84671.cc
  f11b5a7d64db419bf2305c0f433c638b  libstdc++-v3/testsuite/20_util/duration/literals/ns_detail.cc
! 1923a47e9df6e2fb73eff37ffc9e91a4  libstdc++-v3/testsuite/20_util/duration/literals/range_neg.cc
! 338bcdc1547240d38da803b51eaaca25  libstdc++-v3/testsuite/20_util/duration/literals/types.cc
! 46d164454a774aedf0c8b668dbc9efd8  libstdc++-v3/testsuite/20_util/duration/literals/values.cc
! e80cdba765ebc45f35f3465225e219a8  libstdc++-v3/testsuite/20_util/duration/requirements/constexpr_functions.cc
! 06a0571f4509ae7527aa6bb8c2a8b7c1  libstdc++-v3/testsuite/20_util/duration/requirements/explicit_instantiation/explicit_instantiation.cc
! 0f23ae49fc63fbe5008e040c25bc3c82  libstdc++-v3/testsuite/20_util/duration/requirements/noexcept.cc
! 8c1b26686b749cf5ad365ff9d05a5737  libstdc++-v3/testsuite/20_util/duration/requirements/reduced_period.cc
! a972cfee7b783b7695dc85eba704d4b7  libstdc++-v3/testsuite/20_util/duration/requirements/sfinae_friendly_1.cc
! d32f2eb40ce86eb35d99e7d5df9e0b62  libstdc++-v3/testsuite/20_util/duration/requirements/treat_as_floating_point_v.cc
! b2e9238e5e4a5968dd04050cc7997254  libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg1.cc
! 25c9e12b261f6af449879ac690f3c996  libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg2.cc
! e71581e883eae422b1878ffd5c272074  libstdc++-v3/testsuite/20_util/duration/requirements/typedefs_neg3.cc
! d0208aa17f417e0adb70258de9ddfdb5  libstdc++-v3/testsuite/20_util/duration_cast/constexpr.cc
! f6f5a1d78824477356777d8d15b93c22  libstdc++-v3/testsuite/20_util/duration_cast/rounding.cc
! b2f11b793b229d0d5f50a090d5add2ba  libstdc++-v3/testsuite/20_util/duration_cast/rounding_c++11.cc
! 8f98b6aec82741012086933093bd53b3  libstdc++-v3/testsuite/20_util/enable_if/requirements/alias_decl.cc
! 5e4cc041daa5e49955588d536203b730  libstdc++-v3/testsuite/20_util/enable_if/requirements/explicit_instantiation.cc
! cc0c1ca4c01e58d35700df5d95f8b313  libstdc++-v3/testsuite/20_util/enable_if/requirements/typedefs.cc
! c7c0ae0904103b8cd5185834e6874f0a  libstdc++-v3/testsuite/20_util/enable_if/requirements/typedefs_neg.cc
! 5356942a393ff4ed5fd90e64c89f2dbf  libstdc++-v3/testsuite/20_util/enable_shared_from_this/56383.cc
! 4bef796ce6e6eadb09adae222674b5a9  libstdc++-v3/testsuite/20_util/enable_shared_from_this/89303.cc
! 3df956489f09459f27713bcc1fbced09  libstdc++-v3/testsuite/20_util/enable_shared_from_this/cons/constexpr.cc
! cae60a49d4d65b2deeb5d63ece94ae57  libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/assign.cc
! 0678b62218924a23e3e58f919dee7a94  libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/const.cc
! 0f3c9ad7b3c377e8a3d25e8781c00895  libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/reinit.cc
! e97254ce4fd08fa50a505c35d5316111  libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/unique_ptr.cc
! 72288a1f7e75afaa7f130333f81d1d98  libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc
! 6d65efb6f7e1e04dad4717a415d9674f  libstdc++-v3/testsuite/20_util/enable_shared_from_this/requirements/explicit_instantiation.cc
! 409664681669399d3364b74f0eb3146e  libstdc++-v3/testsuite/20_util/exchange/1.cc
! 0f5354206a79465581c921cc3f2cba78  libstdc++-v3/testsuite/20_util/exchange/constexpr.cc
! 5abbf6d20cd589946f4bdfcb28f02dd4  libstdc++-v3/testsuite/20_util/exchange/noexcept.cc
! da3718fa1e22fa960e90da076e9180db  libstdc++-v3/testsuite/20_util/expected/assign.cc
! 786012815e4d290200d001a0341260c1  libstdc++-v3/testsuite/20_util/expected/bad.cc
! 8187c0547d89a14b970b66cbef0b0194  libstdc++-v3/testsuite/20_util/expected/cons.cc
! d8e15a2aa05fc2310ec4008c41b7bf70  libstdc++-v3/testsuite/20_util/expected/illformed_neg.cc
! a85e37ee919658ed2c883de3ea791b5a  libstdc++-v3/testsuite/20_util/expected/observers.cc
! c58d809da0c46bd85f9a6e61760da9cc  libstdc++-v3/testsuite/20_util/expected/requirements.cc
! 18f96370d32ff9b5066cea57f854f30c  libstdc++-v3/testsuite/20_util/expected/swap.cc
! 67206f5aa286e705b8a5752d0b62de28  libstdc++-v3/testsuite/20_util/expected/synopsis.cc
! 2b4b5dfed3ca4c9e84d6937142de427d  libstdc++-v3/testsuite/20_util/expected/unexpected.cc
! 07922e9cc87ce93c2fe23ed181246df7  libstdc++-v3/testsuite/20_util/expected/version.cc
! d639cf26846d9bed4ed3455121ea5257  libstdc++-v3/testsuite/20_util/extent/requirements/explicit_instantiation.cc
! 938aca78950111b1e90937c38d7312ae  libstdc++-v3/testsuite/20_util/extent/requirements/typedefs.cc
! ff8cb3210daa0d48008dc738de0531f3  libstdc++-v3/testsuite/20_util/extent/value.cc
! 06f675ea3dc85784e1860402ae3f6b5a  libstdc++-v3/testsuite/20_util/forward/1.cc
! 700dce4152a94a58fb0223f67bfe3d54  libstdc++-v3/testsuite/20_util/forward/1_neg.cc
! b994bdcdd6b8a5844d369fff8715f5ef  libstdc++-v3/testsuite/20_util/forward/a.cc
! 40a87271bdd2a98f030f132f0d78cf38  libstdc++-v3/testsuite/20_util/forward/b.cc
! 2d565ee50b18c0f27f4244c51fc20d94  libstdc++-v3/testsuite/20_util/forward/c_neg.cc
! eb8a157d51aa9bec816a0c2041c71cc9  libstdc++-v3/testsuite/20_util/forward/d.cc
! 91068589391a9988c654bb427f5bcbba  libstdc++-v3/testsuite/20_util/forward/e.cc
! facca306a74fc06aa2cdfbc5acc80d3a  libstdc++-v3/testsuite/20_util/forward/f_neg.cc
! 4834cbd1c36ad3c44df892848eb8c773  libstdc++-v3/testsuite/20_util/forward/requirements/explicit_instantiation.cc
! f6f74dcbe5a117b1b9f3e5f47e0398ee  libstdc++-v3/testsuite/20_util/from_chars/1.cc
! a7024278402f6bfa44a39f55f6161294  libstdc++-v3/testsuite/20_util/from_chars/1_c++20_neg.cc
! 5e4098df3da50ef73e46d8ffdd46b39a  libstdc++-v3/testsuite/20_util/from_chars/1_neg.cc
! 527af2bc58c919e71583749ebf9cce55  libstdc++-v3/testsuite/20_util/from_chars/2.cc
! 4c743055fc43cb29857c73ad99c7c811  libstdc++-v3/testsuite/20_util/from_chars/3.cc
! c2ab56f0b74ffc53cfc5a5a3f5716de9  libstdc++-v3/testsuite/20_util/from_chars/4.cc
! afc5f2fb411348dbe627137f0be5c20f  libstdc++-v3/testsuite/20_util/from_chars/5.cc
! 173967c637a04148bcc75da2fef53af7  libstdc++-v3/testsuite/20_util/from_chars/6.cc
! 33cb1fba3bfa8508f23e78bc210ae25d  libstdc++-v3/testsuite/20_util/from_chars/7.cc
! 06b29b0491d578c305bd7e12e16144df  libstdc++-v3/testsuite/20_util/from_chars/compare.cc
! 0409d1edbc5394c00c6c6ad4005d8674  libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc
! 361d5dd41f4fcbf1f77f6de9802f9c2d  libstdc++-v3/testsuite/20_util/from_chars/requirements.cc
! 8b1e3084622c79534f8709130f6f4f18  libstdc++-v3/testsuite/20_util/function/1.cc
! 945e69686a507c07f58ac25ccfe59398  libstdc++-v3/testsuite/20_util/function/10.cc
! 3d1b0f2151d188e3a64a8430be6ed2b3  libstdc++-v3/testsuite/20_util/function/2.cc
! 078f903f2b879a2daad9b286f3e85648  libstdc++-v3/testsuite/20_util/function/3.cc
! c3b8a3dbadf6f82d713ee66550ba9a31  libstdc++-v3/testsuite/20_util/function/4.cc
! 2253018e50fe84e400ea97e1bc2ca342  libstdc++-v3/testsuite/20_util/function/43397.cc
! d2eaace242f7af16166a66adff07fe93  libstdc++-v3/testsuite/20_util/function/48541.cc
! 6f27588a7f58f1072549f0c68e1103fe  libstdc++-v3/testsuite/20_util/function/5.cc
! af5fa57b128be482b848f22fea54be61  libstdc++-v3/testsuite/20_util/function/58569.cc
! 4876ebbb59516792e0ada98df2ea88c1  libstdc++-v3/testsuite/20_util/function/6.cc
! b8c50a292865ad8de3e50d92095b15ee  libstdc++-v3/testsuite/20_util/function/60594.cc
! 2fa3e1260e10dc99da03446c80b0bf43  libstdc++-v3/testsuite/20_util/function/63840.cc
! 7807ebf55aff4a2c72b2ab1d0938a165  libstdc++-v3/testsuite/20_util/function/65760.cc
! 3edbdc8926798ae3f4191057659f77a9  libstdc++-v3/testsuite/20_util/function/68995.cc
! 703f20e5a49bf5eebbe5e192f1c28499  libstdc++-v3/testsuite/20_util/function/69222.cc
! be11a86422e1176d91870dad01d85dfc  libstdc++-v3/testsuite/20_util/function/7.cc
! c116ac03b2d51da01acff8e69fdcfa2b  libstdc++-v3/testsuite/20_util/function/77322.cc
! c2f147463674aa2efb390e93ffadc664  libstdc++-v3/testsuite/20_util/function/8.cc
! ed6a2a427de928cd611cfd30b3cfa591  libstdc++-v3/testsuite/20_util/function/9.cc
! 408cb1cd710a4ebb46633ada869c717f  libstdc++-v3/testsuite/20_util/function/91456.cc
! cfe529e02c182c7b885a02859d9dab26  libstdc++-v3/testsuite/20_util/function/assign/move.cc
! 5b2266057a814b2904440870d37bc09a  libstdc++-v3/testsuite/20_util/function/assign/move_target.cc
! 40e091f12bbb6212756387146e1158cc  libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc
! 84a990fa090bf2bacce76b3a17e3f204  libstdc++-v3/testsuite/20_util/function/cons/55320.cc
! c5f31150463a0cfae248849267a53d3f  libstdc++-v3/testsuite/20_util/function/cons/57465.cc
! f8f15577bb33e4549ba8f8e9e0b407a2  libstdc++-v3/testsuite/20_util/function/cons/72820.cc
! 348a7be910a8463a438916359203d99d  libstdc++-v3/testsuite/20_util/function/cons/addressof.cc
! c93810f90733a4f3875b98b0e79c1895  libstdc++-v3/testsuite/20_util/function/cons/callable.cc
! cea45ce4ddc511da2012ef698edab102  libstdc++-v3/testsuite/20_util/function/cons/deduction.cc
  7e9deedb255c7113221019d32e10c6ab  libstdc++-v3/testsuite/20_util/function/cons/lwg2774.cc
! 7f2d96fda18066570fcc1b56f3362d35  libstdc++-v3/testsuite/20_util/function/cons/move.cc
! 219fc1d6f8d23807a37efbe70be60283  libstdc++-v3/testsuite/20_util/function/cons/move_target.cc
  cc7847b76d24c16f35c869b3bb80868e  libstdc++-v3/testsuite/20_util/function/cons/noexcept.cc
! 30038748f86e6741b7dcb4c0ba500410  libstdc++-v3/testsuite/20_util/function/cons/non_copyconstructible.cc
! 49d2dcc1fc7c949936ca3b7d12016d69  libstdc++-v3/testsuite/20_util/function/cons/refqual.cc
! f696de5326f0e3380b153de80ee41e83  libstdc++-v3/testsuite/20_util/function/invoke/forwarding.cc
! 1706b43632b3955c99ad8e54600c8d6a  libstdc++-v3/testsuite/20_util/function/invoke/move_only.cc
! 057c55440f9ce93bcec644e66bcfade0  libstdc++-v3/testsuite/20_util/function/null_pointer_comparisons.cc
! 664382c87b6ec17fc4e62d4d403fd030  libstdc++-v3/testsuite/20_util/function/requirements/explicit_instantiation.cc
! c6f975f3ef8f0e515119df57ff6403ba  libstdc++-v3/testsuite/20_util/function/target_no_rtti.cc
! d5f1d2987ee873d8126c17537bd1f26d  libstdc++-v3/testsuite/20_util/function_objects/83607.cc
! 2fca65086f81abce4ed74beefcca483f  libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc
! d298b8e48c81ad5cf2d8c607e477af3d  libstdc++-v3/testsuite/20_util/function_objects/bind_front/2.cc
! a5ab1e8100c0b895cd83b902b7e1b30d  libstdc++-v3/testsuite/20_util/function_objects/bind_front/97101.cc
! c8806c62da96c47e88e2ceee82f7b8f1  libstdc++-v3/testsuite/20_util/function_objects/bind_front/constexpr.cc
! 981a306a18038881e960fb408e9d3c9c  libstdc++-v3/testsuite/20_util/function_objects/binders/1.cc
! 58df573948c4d852a7d009a6ad6c6e4f  libstdc++-v3/testsuite/20_util/function_objects/binders/3113.cc
! 5d5452d593130615f1dc4754c98b25c8  libstdc++-v3/testsuite/20_util/function_objects/comparisons.cc
! 738255bc3769c7899a769bb60b7fcda2  libstdc++-v3/testsuite/20_util/function_objects/comparisons_pointer.cc
! 48b443aee0a80ff0cf5982d1e205ed97  libstdc++-v3/testsuite/20_util/function_objects/comparisons_void.cc
! a0ea6ae3b83e671fff8688dedf0a823d  libstdc++-v3/testsuite/20_util/function_objects/constexpr.cc
! 441ca68f7e8d895c16ce9991d2dd235c  libstdc++-v3/testsuite/20_util/function_objects/constexpr_searcher.cc
! fd119b155e00754403e26ef3ae259c71  libstdc++-v3/testsuite/20_util/function_objects/dr660.cc
! d1f502008e35a39486514fdb10ab2f3a  libstdc++-v3/testsuite/20_util/function_objects/identity/1.cc
! 213b41e4dcf581f5d2722867e938084f  libstdc++-v3/testsuite/20_util/function_objects/invoke/1.cc
! 92dcaacbebc51fcc028f4744ef2bdf1c  libstdc++-v3/testsuite/20_util/function_objects/invoke/2.cc
! ea5d14d74f226a26d674df22ff54a8c8  libstdc++-v3/testsuite/20_util/function_objects/invoke/3.cc
! fd3b33760fbfa3ebd233ea8a3ebd0372  libstdc++-v3/testsuite/20_util/function_objects/invoke/4.cc
! 74fceb806cd0917a74aa4b83ae5f0cf9  libstdc++-v3/testsuite/20_util/function_objects/invoke/59768.cc
! b67d3dd4357d4a9a3aefea203d79e90b  libstdc++-v3/testsuite/20_util/function_objects/invoke/constexpr.cc
! 4caad9b1aab36b62f12e38ad512bba31  libstdc++-v3/testsuite/20_util/function_objects/invoke/ref_ext.cc
! c41a9b86fb8d5060d3191e4ba30b6151  libstdc++-v3/testsuite/20_util/function_objects/invoke/version.cc
! 626caf3759b9d65650bb1ae76909a933  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/55463.cc
! c752b65cdf406fb7ab6797069ad49b8d  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/55908.cc
! 7b5e76b666745a88fada1ec687fbcd90  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/68982.cc
! 24f90cced4e7b7e78764bcfe38490144  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/80478.cc
! b0b580d1c87fa9d93dbbf7117dfed0b6  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/adl.cc
! 66826d268859e08c52fedce5f60f0077  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/constexpr.cc
! 4c43c5ead83f410eafac0d94b98a0429  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/forward.cc
! a1df16ec7efd2dad0fc4048355d720b7  libstdc++-v3/testsuite/20_util/function_objects/mem_fn/refqual.cc
! bf1467c60343d439953e988af622c860  libstdc++-v3/testsuite/20_util/function_objects/not_fn/1.cc
! aeffd439bc16dae774b309a40308fab0  libstdc++-v3/testsuite/20_util/function_objects/not_fn/87538.cc
! 3f19d51df8cd841a58b0e84203bf06ee  libstdc++-v3/testsuite/20_util/function_objects/not_fn/constexpr.cc
! 1e94565006d23f5a05b4281a76de598d  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/equal_to.cc
! 79920cd9d3d67c94ea426ff64003284a  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/greater.cc
! 5b78f926ef8cf996d47b5ecdb41dffbc  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/greater_equal.cc
! 14a710665d8ab65ed4ac1ce074f49f50  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/less.cc
! ff1e0c5a0d89e5008c592cd7ecfa30f0  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/less_equal.cc
! 8f9c77272cc1eb1af1259c3b88304462  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/lwg3530.cc
! f04c5654ee10415318aa980110ca1c42  libstdc++-v3/testsuite/20_util/function_objects/range.cmp/not_equal_to.cc
! 633a60bd46008d8359e370c852e7f414  libstdc++-v3/testsuite/20_util/function_objects/searchers.cc
! 0bdaa5438b3fa1ee98a917193427caed  libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/explicit_instantiation.cc
! c9d9bf809b76da6287430ab5c26e87e3  libstdc++-v3/testsuite/20_util/has_unique_object_representations/requirements/typedefs.cc
! 7e928000c242aafbcfd2a381e718bbea  libstdc++-v3/testsuite/20_util/has_unique_object_representations/value.cc
! 28e696b7f8976443f0198d07165408fc  libstdc++-v3/testsuite/20_util/has_virtual_destructor/requirements/explicit_instantiation.cc
! ae35f507d8fab901339f02475036ab7f  libstdc++-v3/testsuite/20_util/has_virtual_destructor/requirements/typedefs.cc
! 20d7ecc07f9be692de728d8e01141c33  libstdc++-v3/testsuite/20_util/has_virtual_destructor/value.cc
! a86f53ea71624fbbb1f5e67b0fc4c480  libstdc++-v3/testsuite/20_util/hash/52931.cc
! 74b71b853aedc651f73ce7933ecc03cf  libstdc++-v3/testsuite/20_util/hash/60970.cc
! 7b16b114f33ee5d10c79c72037cc692d  libstdc++-v3/testsuite/20_util/hash/84998.cc
! 3d60f5b827fbf0f7b8384c781c5f3f3f  libstdc++-v3/testsuite/20_util/hash/89629.cc
! eb1875c8925e81e0d2850e4b1ce4fd7e  libstdc++-v3/testsuite/20_util/hash/chi2_q_bit_flip_set.cc
! ac4299ecf5727aa612db0b33136c4bd7  libstdc++-v3/testsuite/20_util/hash/chi2_q_bit_string_set.cc
! 1ddc27703bc4173ac44ab68c8137d155  libstdc++-v3/testsuite/20_util/hash/chi2_q_document_words.cc
! 6ec2e8a04e21c7bbb0a55fd5774bb7c6  libstdc++-v3/testsuite/20_util/hash/chi2_q_numeric_pattern_set.cc
! e7cc1536a77ef2d34e3356e98c839e9a  libstdc++-v3/testsuite/20_util/hash/chi2_q_uniform_random.cc
! 473bd1b4086fcaa7e43a73bf91462f1a  libstdc++-v3/testsuite/20_util/hash/chi2_quality.h
! 62122d48dfda9de8680e5dc4e65f59bc  libstdc++-v3/testsuite/20_util/hash/nullptr.cc
! 761805ce5c50493bc641e3dc2b71afe6  libstdc++-v3/testsuite/20_util/hash/operators/size_t.cc
! 08c7829fc5f68ab05f716d88e5eaa2c2  libstdc++-v3/testsuite/20_util/hash/quality.cc
! fecf07315a289923572653d6ef30b1c5  libstdc++-v3/testsuite/20_util/hash/requirements/explicit_instantiation.cc
! c39c2e91350339bd976750d0d47703ae  libstdc++-v3/testsuite/20_util/headers/cstdlib/functions_std.cc
! 6e7730a085e508cdda3508b1bd0917ce  libstdc++-v3/testsuite/20_util/headers/cstring/functions_std.cc
! 522a0b73ef1f58635f5ed975743f1913  libstdc++-v3/testsuite/20_util/headers/cstring/macros.cc
! 69b9227089a73c5292f236ffe75764b0  libstdc++-v3/testsuite/20_util/headers/cstring/types_std.cc
! 2b1fe70d5cd39cdbfd8cbb2b024fe3d7  libstdc++-v3/testsuite/20_util/headers/ctime/functions_std.cc
! 130e25d2a0c23c6d8b122221f302179e  libstdc++-v3/testsuite/20_util/headers/ctime/macros.cc
! fe9469f3df706448a4da3b435459235c  libstdc++-v3/testsuite/20_util/headers/ctime/types_std.cc
! f458ef6e28dd60e84def3afb83add43f  libstdc++-v3/testsuite/20_util/headers/functional/synopsis.cc
! b638d5a1436ae1ef82d64e143096673c  libstdc++-v3/testsuite/20_util/headers/functional/types_std_c++0x.cc
! e5037351f89d0c490f773de5e8663921  libstdc++-v3/testsuite/20_util/headers/functional/using_namespace_std_placeholders.cc
! 1ce043d1bf57756c331e317e1b9e515a  libstdc++-v3/testsuite/20_util/headers/memory/synopsis.cc
! f25a24c9881b0423d62f56322f00e192  libstdc++-v3/testsuite/20_util/headers/memory/types_std_c++0x.cc
! 029aa6a284914b0a9b1933208ee6d909  libstdc++-v3/testsuite/20_util/headers/type_traits/std_c++0x_neg.cc
! 8158b6cba3b9e34ee67ac99fb5984678  libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x.cc
! 39739136da77afd274c11e9d04b8b8c3  libstdc++-v3/testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc
! 71d0d9a3b1352f30bed8b3bceba0af7a  libstdc++-v3/testsuite/20_util/headers/utility/synopsis.cc
! 1da159f583cea854b7fcb92067fc12e6  libstdc++-v3/testsuite/20_util/headers/utility/using_namespace_std_rel_ops.cc
! 93248ca4fc4906833e0d5a1359696198  libstdc++-v3/testsuite/20_util/in_place/requirements.cc
! e6ed7f04cc9bd22bb4e912d0a93420af  libstdc++-v3/testsuite/20_util/integer_comparisons/1.cc
! d8e043cd3d086b9c49863b44a0c2288a  libstdc++-v3/testsuite/20_util/integer_comparisons/2.cc
! d3e237e62e64e75f69ad2fd8c0c62efd  libstdc++-v3/testsuite/20_util/integer_comparisons/equal.cc
! cff204fedb508acd88251e570815bd1e  libstdc++-v3/testsuite/20_util/integer_comparisons/equal_neg.cc
  c6250601e3e7183f7bd3726fdd8c1203  libstdc++-v3/testsuite/20_util/integer_comparisons/greater.cc
! c4c99d3079e12c0d250e763f16b35cc8  libstdc++-v3/testsuite/20_util/integer_comparisons/greater_equal.cc
! adb18721b68b6c8c2076f25dc497b756  libstdc++-v3/testsuite/20_util/integer_comparisons/greater_equal_neg.cc
! e4385750b44b9c9b15f0bcbbff7ff555  libstdc++-v3/testsuite/20_util/integer_comparisons/greater_neg.cc
! ae78d4e1f061aaf6556908dc649baabd  libstdc++-v3/testsuite/20_util/integer_comparisons/in_range.cc
! 1ac2424798886a2449d60656aef0f66d  libstdc++-v3/testsuite/20_util/integer_comparisons/in_range_neg.cc
! 8aab27fbd75a9d4fb1618d5c508f8c59  libstdc++-v3/testsuite/20_util/integer_comparisons/less.cc
! 76d73b729a2e310b6506fd91d652821b  libstdc++-v3/testsuite/20_util/integer_comparisons/less_equal.cc
! 2e37b95e83c3d734bea364016830e3ab  libstdc++-v3/testsuite/20_util/integer_comparisons/less_equal_neg.cc
! 1ef204a969d3f470c0de434d5a42dd20  libstdc++-v3/testsuite/20_util/integer_comparisons/less_neg.cc
! d40d281f67bbddfd8ee3afa09db84194  libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal.cc
! cff204fedb508acd88251e570815bd1e  libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal_neg.cc
! 77217a1a0be9e8752b771ab62615174e  libstdc++-v3/testsuite/20_util/integer_sequence/intseq.cc
! 159d3fde83605a05000ed1adee3483a5  libstdc++-v3/testsuite/20_util/integer_sequence/requirements/typedefs.cc
! d83f2a7f8162634068865ab00d86a66a  libstdc++-v3/testsuite/20_util/integral_constant/call_operator.cc
! 2447082448aab79905ba32b3aa79c2aa  libstdc++-v3/testsuite/20_util/integral_constant/operator_value_type.cc
! c4c851612615f62affcf7ffc94e37024  libstdc++-v3/testsuite/20_util/integral_constant/requirements/constexpr_data.cc
! f1722d0a0a03721d1bb1845e9e22ee98  libstdc++-v3/testsuite/20_util/integral_constant/requirements/explicit_instantiation.cc
! 975da464ce5cb71c6a75cf9f0e916d90  libstdc++-v3/testsuite/20_util/integral_constant/requirements/typedefs.cc
! 44b5401d04ad651dcb211f16b9831eff  libstdc++-v3/testsuite/20_util/integral_constant/static_definition.cc
! fb6e7693ac8ca4674d21d7f024f14de1  libstdc++-v3/testsuite/20_util/integral_constant/true_false_type_typedefs.cc
! c5783300148d21b9724a10c8ac026725  libstdc++-v3/testsuite/20_util/integral_constant/true_false_value.cc
! e0a44054e7c886c83059bd408a2b9042  libstdc++-v3/testsuite/20_util/invoke_result/incomplete_args_neg.cc
! 428c5205a079b8d3e849875a022aff08  libstdc++-v3/testsuite/20_util/invoke_result/incomplete_neg.cc
! 5b9ebeaab235e53f228d33b52831073a  libstdc++-v3/testsuite/20_util/is_abstract/incomplete_neg.cc
! c7f6b9c06dbceb4accdedf7ddee02211  libstdc++-v3/testsuite/20_util/is_abstract/requirements/explicit_instantiation.cc
! d9cba83f0861dbcc4efd91edba92db76  libstdc++-v3/testsuite/20_util/is_abstract/requirements/typedefs.cc
! f523d0a74481bb9c9b60918916782425  libstdc++-v3/testsuite/20_util/is_abstract/value.cc
! 1e412af4e87293854fe24db5460a88b5  libstdc++-v3/testsuite/20_util/is_aggregate/incomplete_neg.cc
! a15958335d3a6409dc89fad9e9616861  libstdc++-v3/testsuite/20_util/is_aggregate/requirements/explicit_instantiation.cc
! de853e83c4d216d4ecc1c640b988a100  libstdc++-v3/testsuite/20_util/is_aggregate/requirements/typedefs.cc
! 6408732e397a4b019fd0535f078f4739  libstdc++-v3/testsuite/20_util/is_aggregate/value.cc
! a090ea808504b3754fdb36e12980655c  libstdc++-v3/testsuite/20_util/is_arithmetic/requirements/explicit_instantiation.cc
! e31208438e789c80c4b34c27a59b051a  libstdc++-v3/testsuite/20_util/is_arithmetic/requirements/typedefs.cc
! 075ba9cfa6ccc00c73756a9e13e69f2b  libstdc++-v3/testsuite/20_util/is_arithmetic/value.cc
! 7dbfd03ab3d13fff771e4b5a616df1b6  libstdc++-v3/testsuite/20_util/is_array/requirements/explicit_instantiation.cc
! f3cd24fe2e7ca4777569e2a5c80359ce  libstdc++-v3/testsuite/20_util/is_array/requirements/typedefs.cc
! 3c09cfd2a34cc313655df1fe903012fc  libstdc++-v3/testsuite/20_util/is_array/value.cc
! eacb6e0e42d2316bb92fc9a0d17e18cd  libstdc++-v3/testsuite/20_util/is_assignable/requirements/explicit_instantiation.cc
! 4ce9887374c927faea34cf2081bbcc98  libstdc++-v3/testsuite/20_util/is_assignable/requirements/typedefs.cc
! 459bd854c92beb096b314ce7e4cc664e  libstdc++-v3/testsuite/20_util/is_assignable/value.cc
! a649b8fea3b53df8684c375729f4b8ed  libstdc++-v3/testsuite/20_util/is_base_of/requirements/explicit_instantiation.cc
! 3ae3e14ebd63bc01e30f12283e16562f  libstdc++-v3/testsuite/20_util/is_base_of/requirements/typedefs.cc
! 0ac71e577dbb7223bfca4a5f888807d6  libstdc++-v3/testsuite/20_util/is_base_of/value.cc
! 48cf785d51a0ea2127d318c56b2d881c  libstdc++-v3/testsuite/20_util/is_bounded_array/requirements/explicit_instantiation.cc
! 5c9d284c19e76340f3ed491fc46785e0  libstdc++-v3/testsuite/20_util/is_bounded_array/requirements/typedefs.cc
! 93f802c67e051bef55a09ec870d27845  libstdc++-v3/testsuite/20_util/is_bounded_array/value.cc
! a57b0e9eab0f6cf3c91b8ee03bd0fda4  libstdc++-v3/testsuite/20_util/is_class/requirements/explicit_instantiation.cc
! 8d841599f87a5e9ad43232fb33946066  libstdc++-v3/testsuite/20_util/is_class/requirements/typedefs.cc
! bc200612e026af407939606df1c74e73  libstdc++-v3/testsuite/20_util/is_class/value.cc
! fb9e6f6cbe8373ca6f5a8ad586120531  libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization.cc
! f4ae202b080c020e7770de64ed0759dc  libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/memoization_neg.cc
! 4844fefc5ae421db3a3ba58f508dd198  libstdc++-v3/testsuite/20_util/is_complete_or_unbounded/value.cc
! b130d5790fee37bea0d44b284fde73ef  libstdc++-v3/testsuite/20_util/is_compound/requirements/explicit_instantiation.cc
! c7758aa0a55d6f0c93789dc567154315  libstdc++-v3/testsuite/20_util/is_compound/requirements/typedefs.cc
! 7a6778f385bc0356431ca5d71fc77fe1  libstdc++-v3/testsuite/20_util/is_compound/value.cc
! 4e85bb93dd4090e8129edb0a142830fa  libstdc++-v3/testsuite/20_util/is_const/requirements/explicit_instantiation.cc
! 082451d06369bed55aed1ffe5ea36b4e  libstdc++-v3/testsuite/20_util/is_const/requirements/typedefs.cc
! c08b6522fc326795c72c43cb47add6da  libstdc++-v3/testsuite/20_util/is_const/value.cc
! 47840c6487779e6e90258bbba90bcbde  libstdc++-v3/testsuite/20_util/is_constant_evaluated/1.cc
! ffba54ed1714839db62974c88d145e32  libstdc++-v3/testsuite/20_util/is_constant_evaluated/noexcept.cc
! a8e81c847e2d1454c25875a3331e6031  libstdc++-v3/testsuite/20_util/is_constructible/51185.cc
  a5e184714ddd867798fa94c2ebe2c9fe  libstdc++-v3/testsuite/20_util/is_constructible/68430.cc
! 8923f7e3b68edc0f8e8f9e54fc1f8a52  libstdc++-v3/testsuite/20_util/is_constructible/77395.cc
! 28cbf965efa6ecd0a97fb6750167c18f  libstdc++-v3/testsuite/20_util/is_constructible/80812.cc
! 9f294247d12ba147426dbf684f53b31e  libstdc++-v3/testsuite/20_util/is_constructible/92878_92947.cc
! ab00d28f829182375ae56b8b038c53a1  libstdc++-v3/testsuite/20_util/is_constructible/94003.cc
! 5220d66553a42df1357ea42e481c2ce2  libstdc++-v3/testsuite/20_util/is_constructible/requirements/explicit_instantiation.cc
! 20b3bac908805a6f83445d000dcdc7fe  libstdc++-v3/testsuite/20_util/is_constructible/requirements/typedefs.cc
! f87932cd03b8ebc454f362e185d4e06c  libstdc++-v3/testsuite/20_util/is_constructible/value-2.cc
! 0040ea92d4aa9c05ec4d10c6277a3908  libstdc++-v3/testsuite/20_util/is_constructible/value.cc
! 212fe83dd442d83e3db12893bb23ae6a  libstdc++-v3/testsuite/20_util/is_convertible/requirements/explicit_instantiation.cc
! b46482eac85dc8802cded9e3154fe75b  libstdc++-v3/testsuite/20_util/is_convertible/requirements/typedefs.cc
! 7614abee2a7554b75ce916fa9f8191a9  libstdc++-v3/testsuite/20_util/is_convertible/value.cc
! 8a8af107b6bdb3633b0516153fcbdda9  libstdc++-v3/testsuite/20_util/is_copy_assignable/requirements/explicit_instantiation.cc
! 05f84862ef9a1dd074defb1470fc3c24  libstdc++-v3/testsuite/20_util/is_copy_assignable/requirements/typedefs.cc
! 11b9d5e0910484bae2435feab72d1754  libstdc++-v3/testsuite/20_util/is_copy_assignable/value.cc
! 1f61f47ef403238cc71ea6cc27663149  libstdc++-v3/testsuite/20_util/is_copy_constructible/requirements/explicit_instantiation.cc
! 9e98c0794477f14eeb3d2a24a66d216c  libstdc++-v3/testsuite/20_util/is_copy_constructible/requirements/typedefs.cc
! 5e90fc9c37bd7810e04fb3e47a51cc26  libstdc++-v3/testsuite/20_util/is_copy_constructible/value.cc
! 38b51e9f8aa164617ee4292f0a1773b1  libstdc++-v3/testsuite/20_util/is_default_constructible/requirements/explicit_instantiation.cc
! 819be2d7872cf694bbc64b7f2a6c78f7  libstdc++-v3/testsuite/20_util/is_default_constructible/requirements/typedefs.cc
! 151ece9b9a8b886377ad5d0fb6febc43  libstdc++-v3/testsuite/20_util/is_default_constructible/value.cc
! bbe8268ac509e5051d0d46d64cf6d6b4  libstdc++-v3/testsuite/20_util/is_destructible/requirements/explicit_instantiation.cc
! ed0e95624061f6bb83a3d426879ad5e2  libstdc++-v3/testsuite/20_util/is_destructible/requirements/typedefs.cc
! f57a27fbebb83e898fa57480ec8232d8  libstdc++-v3/testsuite/20_util/is_destructible/value.cc
! ca07a8f2d29ef100202e6d562c78cc92  libstdc++-v3/testsuite/20_util/is_empty/incomplete_neg.cc
! f336e5081e30fa05335f13990c6f7316  libstdc++-v3/testsuite/20_util/is_empty/requirements/explicit_instantiation.cc
! 91a2c68e605b153d5da04f5e727f4942  libstdc++-v3/testsuite/20_util/is_empty/requirements/typedefs.cc
! 8cfa432deb76c469411b2d6627e63c0c  libstdc++-v3/testsuite/20_util/is_empty/value.cc
! fa355f1d36cd85de05ef31d06ee7230b  libstdc++-v3/testsuite/20_util/is_enum/requirements/explicit_instantiation.cc
! 8f02c235e79d1811eb1e116ef4095ded  libstdc++-v3/testsuite/20_util/is_enum/requirements/typedefs.cc
! bc492cf12be3305f9fcad29941957820  libstdc++-v3/testsuite/20_util/is_enum/value.cc
! 7f7120c698ae2b5d902e5f53dd0fce4a  libstdc++-v3/testsuite/20_util/is_final/incomplete_neg.cc
! 17b1d2e94c364d0e278aa4af430b0474  libstdc++-v3/testsuite/20_util/is_final/requirements/explicit_instantiation.cc
! 8f6784e127bed4d67c7ea7b32c33b48a  libstdc++-v3/testsuite/20_util/is_final/requirements/typedefs.cc
! 433602359ba15958ba624f3a950e73af  libstdc++-v3/testsuite/20_util/is_final/value.cc
! 70e2d6013db6a203129c857c9d2c7a3f  libstdc++-v3/testsuite/20_util/is_floating_point/requirements/explicit_instantiation.cc
! e2748eac21078e6a2cbdca2a968bcf09  libstdc++-v3/testsuite/20_util/is_floating_point/requirements/typedefs.cc
! fe41f5f2ca31f29099dc3e8cfb437d84  libstdc++-v3/testsuite/20_util/is_floating_point/value.cc
! 22d988d651b8a92c6a7326202a590c66  libstdc++-v3/testsuite/20_util/is_function/24808.cc
! 3c2d7df80743813993f1afe627640492  libstdc++-v3/testsuite/20_util/is_function/35637.cc
! a825e2236375927b0fd55d1b9b5f65e5  libstdc++-v3/testsuite/20_util/is_function/91371.cc
! 4224757a24fab365493ec169bf93b13f  libstdc++-v3/testsuite/20_util/is_function/requirements/explicit_instantiation.cc
! d624b733f0e1010c39aa46a69346eee1  libstdc++-v3/testsuite/20_util/is_function/requirements/typedefs.cc
! 0d72b649dd7a7ead7ebc9da568e458c8  libstdc++-v3/testsuite/20_util/is_function/value.cc
! c69c0cadb258c507b277e334d0227df3  libstdc++-v3/testsuite/20_util/is_fundamental/requirements/explicit_instantiation.cc
! d0622bd669ef2d3921ac3ba1787fc775  libstdc++-v3/testsuite/20_util/is_fundamental/requirements/typedefs.cc
! 06f1f96779bef06199be4ed312458bc3  libstdc++-v3/testsuite/20_util/is_fundamental/value.cc
! 22b705c3a827bc4b615fd6374a0dfd02  libstdc++-v3/testsuite/20_util/is_implicitly_default_constructible/requirements/explicit_instantiation.cc
! c9ab100f5522cc06516b8a59fff19e5d  libstdc++-v3/testsuite/20_util/is_implicitly_default_constructible/requirements/typedefs.cc
! 2b10a3ec0af648dbd55f9cbf6e16436f  libstdc++-v3/testsuite/20_util/is_implicitly_default_constructible/value.cc
! 593bbfe441ffdac985c6d5a9cde1b4fc  libstdc++-v3/testsuite/20_util/is_integral/requirements/explicit_instantiation.cc
! 6faca9b89a5a78fb07538b2888c10d29  libstdc++-v3/testsuite/20_util/is_integral/requirements/typedefs.cc
! 2b94b240bab0b31b87383b19cc4acb74  libstdc++-v3/testsuite/20_util/is_integral/value.cc
! f48a2421f595fe09073ce0a17b97ede2  libstdc++-v3/testsuite/20_util/is_invocable/83395.cc
! 3f8734118b9905b899e7e53ab4436315  libstdc++-v3/testsuite/20_util/is_invocable/91456.cc
! 3758281612e168a6f0e3d4d8fc0e015d  libstdc++-v3/testsuite/20_util/is_invocable/incomplete_args_neg.cc
! 974d670d8692abbd044e0106e0df518f  libstdc++-v3/testsuite/20_util/is_invocable/incomplete_neg.cc
! c930d9399db071cefaac2528f9bb685b  libstdc++-v3/testsuite/20_util/is_invocable/requirements/explicit_instantiation.cc
! 4515fa84c0e05c39f3f8fd487dc10c85  libstdc++-v3/testsuite/20_util/is_invocable/requirements/explicit_instantiation_ext.cc
! e85264e65c6bcd388fab9716cfde1779  libstdc++-v3/testsuite/20_util/is_invocable/requirements/typedefs.cc
! 27d623203ec21cf9a43de46cc69390d4  libstdc++-v3/testsuite/20_util/is_invocable/requirements/typedefs_ext.cc
! 6e50880744eb855d4c83fa88f1bfcebd  libstdc++-v3/testsuite/20_util/is_invocable/value.cc
! 06fd6a6d2ec1cd34698516323394ee4f  libstdc++-v3/testsuite/20_util/is_invocable/value_ext.cc
! 843b0fa9f5021ba82bde4802ddebc754  libstdc++-v3/testsuite/20_util/is_layout_compatible/is_corresponding_member.cc
! ce6b607369dfd0496ef93c6da8cc6775  libstdc++-v3/testsuite/20_util/is_layout_compatible/value.cc
! ea3697d742d06b8a6935bb79b5249f62  libstdc++-v3/testsuite/20_util/is_layout_compatible/version.cc
! de7e26d89684a7be7dc7e649e4875b8b  libstdc++-v3/testsuite/20_util/is_literal_type/deprecated-1z.cc
! 17abf7c5347ea5379657d942b13da592  libstdc++-v3/testsuite/20_util/is_literal_type/requirements/explicit_instantiation.cc
! 7b3ae85413b4699eb96f56fd6a5840b3  libstdc++-v3/testsuite/20_util/is_literal_type/requirements/typedefs.cc
! 64c8d5954a04941a9fcf7828840490bc  libstdc++-v3/testsuite/20_util/is_literal_type/value.cc
! 0a61dcb7a1774de1028fa0fb692de502  libstdc++-v3/testsuite/20_util/is_lvalue_reference/requirements/explicit_instantiation.cc
! 207216c6d20c378228ed85150d0c6267  libstdc++-v3/testsuite/20_util/is_lvalue_reference/requirements/typedefs.cc
! 17a58284fd34c5d5b48596da317d46db  libstdc++-v3/testsuite/20_util/is_lvalue_reference/value.cc
! bbd659e74d5c953dd660c599c61edd1f  libstdc++-v3/testsuite/20_util/is_member_function_pointer/91371.cc
! ac8fee79024a214762e4f3f3687116ca  libstdc++-v3/testsuite/20_util/is_member_function_pointer/requirements/explicit_instantiation.cc
! 0f4e08ff300cace62b51b113a2a606af  libstdc++-v3/testsuite/20_util/is_member_function_pointer/requirements/typedefs.cc
! 3df8ccd46ccbba4c0ae6e614f695d294  libstdc++-v3/testsuite/20_util/is_member_function_pointer/value.cc
! da0f01cdada56ddb2c03d66c9caa7a7f  libstdc++-v3/testsuite/20_util/is_member_object_pointer/requirements/explicit_instantiation.cc
! a01817c351886a19aae7776bf7d32e2a  libstdc++-v3/testsuite/20_util/is_member_object_pointer/requirements/typedefs.cc
! 20431d0ade43e5f7ca7bb8050f13276d  libstdc++-v3/testsuite/20_util/is_member_object_pointer/value.cc
! 27fb862374facca84bbf25ed26bdd735  libstdc++-v3/testsuite/20_util/is_member_pointer/requirements/explicit_instantiation.cc
! f0c906e4264fe2d9f4d1e5d2c7adfe6c  libstdc++-v3/testsuite/20_util/is_member_pointer/requirements/typedefs.cc
! e91ad3ea0ff758fde3c83c1cc551c2c0  libstdc++-v3/testsuite/20_util/is_member_pointer/value.cc
! bb4936c64c877d7914bc6cb36cba5769  libstdc++-v3/testsuite/20_util/is_move_assignable/requirements/explicit_instantiation.cc
! 4369e9094d3dffc388ea306ab57f9ba4  libstdc++-v3/testsuite/20_util/is_move_assignable/requirements/typedefs.cc
! 1f221e1a85626e0d1eb0193363cff1e4  libstdc++-v3/testsuite/20_util/is_move_assignable/value.cc
! 73bec22a3df4214e9b56d1c13ca2674f  libstdc++-v3/testsuite/20_util/is_move_constructible/incomplete_neg.cc
! 4559970f2b471ffd71267aadd89c70a6  libstdc++-v3/testsuite/20_util/is_move_constructible/requirements/explicit_instantiation.cc
! d3036f6936afe0d00b287a2cc94ded3e  libstdc++-v3/testsuite/20_util/is_move_constructible/requirements/typedefs.cc
! be8434f8c87fdcb8c619052c946586f0  libstdc++-v3/testsuite/20_util/is_move_constructible/value.cc
! f79fca8be086a3f5423fab8e48263f86  libstdc++-v3/testsuite/20_util/is_nothrow_assignable/requirements/explicit_instantiation.cc
! a5778f715175d566d096c17c81b7021e  libstdc++-v3/testsuite/20_util/is_nothrow_assignable/requirements/typedefs.cc
! f0f1bde379c80faabc1f245b243d8b36  libstdc++-v3/testsuite/20_util/is_nothrow_assignable/value.cc
! e0143ea2c0499df6866cceb147e7de3c  libstdc++-v3/testsuite/20_util/is_nothrow_constructible/94003.cc
! 7a42adc6da59883e360591382d2ca8ba  libstdc++-v3/testsuite/20_util/is_nothrow_constructible/requirements/explicit_instantiation.cc
! 5483212b409daa6d878f2fe923596f3e  libstdc++-v3/testsuite/20_util/is_nothrow_constructible/requirements/typedefs.cc
! 6fc9ab2c9eaf002feaa99659378aa55e  libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value.cc
! 2275a301c82fbba46853d3b623127e1f  libstdc++-v3/testsuite/20_util/is_nothrow_constructible/value_c++20.cc
! 6da09fdb0e88c78ba76cd9e7eef8e56d  libstdc++-v3/testsuite/20_util/is_nothrow_convertible/requirements/explicit_instantiation.cc
! 6cb6437227f3e3ddb450f5874e37f162  libstdc++-v3/testsuite/20_util/is_nothrow_convertible/requirements/typedefs.cc
! 293a05ec5348abdf4ef2b1c3dd302e73  libstdc++-v3/testsuite/20_util/is_nothrow_convertible/value.cc
! 55436f1b8d5a7f12371c044aad594290  libstdc++-v3/testsuite/20_util/is_nothrow_convertible/value_ext.cc
! 560265c41ac1728ed851c2cd16f2697a  libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/requirements/explicit_instantiation.cc
! 093781bcddd7498c4706c370a4a10c67  libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/requirements/typedefs.cc
! 5d7696d584225a4acc43efd192437015  libstdc++-v3/testsuite/20_util/is_nothrow_copy_assignable/value.cc
! 6d4168b089bbd3106914880079391e23  libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/requirements/explicit_instantiation.cc
! 956bb98bb6f58005f5034d7ae94d53a2  libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/requirements/typedefs.cc
! d163edae24923553ac1215010d518818  libstdc++-v3/testsuite/20_util/is_nothrow_copy_constructible/value.cc
! cbe0ecb458ba4897b545a6441278972e  libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/requirements/explicit_instantiation.cc
! 0c5b8079f3e2f50fb4f79d8fac7e0929  libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/requirements/typedefs.cc
! e7183c8437e2bffe9052bf3bbb930221  libstdc++-v3/testsuite/20_util/is_nothrow_default_constructible/value.cc
! 269915b3862ea559f00507c8b43957e1  libstdc++-v3/testsuite/20_util/is_nothrow_destructible/requirements/explicit_instantiation.cc
! 573665818fc8cc2bcba1dd448d50c321  libstdc++-v3/testsuite/20_util/is_nothrow_destructible/requirements/typedefs.cc
! 0a642a6637ff99d817cd5a4ce39c9d06  libstdc++-v3/testsuite/20_util/is_nothrow_destructible/value.cc
! d761a67ad233c2b42f2aaef2c5100ed1  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/83395.cc
! a75b57e38ce51c8d65bffedaccc19048  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/incomplete_args_neg.cc
! 8a81f2e2fe8108661ef9aec6ae3ef947  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/incomplete_neg.cc
! 02677e6c15a0f6d2af647f908367989c  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/requirements/explicit_instantiation.cc
! 2e5cffa93f27b1721031d1552f64e85b  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/requirements/explicit_instantiation_ext.cc
! b28833572d6c86cbd0198f3f29ca580e  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/requirements/typedefs.cc
! 7aa877b0ab8caa720f2863f534e6340e  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/requirements/typedefs_ext.cc
! 0121c51335cf9f8c4b09b5f611fabf58  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc
! c3ae5a9e16214cd346e34841e137cd43  libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value_ext.cc
! 7929bd26643f3b856f769adf6fdd636d  libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/incomplete_neg.cc
! fdf35d35fd4819651088377b45bacb97  libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/requirements/explicit_instantiation.cc
! 818d5dd5bbe02fbbbb911de5afa7e08d  libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/requirements/typedefs.cc
! b2e79e908b2091ac019351ec5746e495  libstdc++-v3/testsuite/20_util/is_nothrow_move_assignable/value.cc
! e09195d61f1f26a40f2e585efee9d35b  libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/requirements/explicit_instantiation.cc
! 7557ab03fecce7b8dc9abdc6cb697d67  libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/requirements/typedefs.cc
! e922adcd22b0e8f7360f5d44dded8450  libstdc++-v3/testsuite/20_util/is_nothrow_move_constructible/value.cc
! e7e45ea43aff3ab8843a36176d60a7b9  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/incomplete_neg.cc
! b44471cde468706b7633e8c7c4293d3c  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/explicit_instantiation.cc
! e25f18776520ada5602dbf8f1d28eab8  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/explicit_instantiation_ext.cc
! 28efe634d2370bf6ef21615a3dc53435  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/typedefs.cc
! 85ce78cf1cc25ffac5692899afd059b0  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/requirements/typedefs_ext.cc
! 16be3da4521cfa34e4e8ebaf91ee1b51  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value.cc
! 0f5c9549043c9cc10628daa905ce3986  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value.h
! c6c594162cf96cf67a2a190f081438e5  libstdc++-v3/testsuite/20_util/is_nothrow_swappable/value_ext.cc
! 6fe2d129bb04cf6e5eeab9a245a7ab9e  libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/incomplete_neg.cc
! 750fd17c523d2f88c677df6715796d69  libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/requirements/explicit_instantiation.cc
! cfcd4a9c338dcec9144cfee595c818fa  libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/requirements/typedefs.cc
! 334f25db5e685eec83094cd1a8e10ee2  libstdc++-v3/testsuite/20_util/is_nothrow_swappable_with/value.cc
! 6a59e41acbebc5deb4c51b10906fe6a3  libstdc++-v3/testsuite/20_util/is_null_pointer/requirements/explicit_instantiation.cc
! 98c70e445ef28a7b2ff37b59b99edb22  libstdc++-v3/testsuite/20_util/is_null_pointer/requirements/typedefs.cc
! 414676443c7ac728d1c4fa0ec0e606dc  libstdc++-v3/testsuite/20_util/is_null_pointer/value.cc
! af5a37b81ff206bf3fadf24961ad930d  libstdc++-v3/testsuite/20_util/is_object/24808.cc
! a4a209f6ade49079c92c2f1186a4ee83  libstdc++-v3/testsuite/20_util/is_object/91371.cc
! ea17e22dcb55f04f6954180ed4690b6c  libstdc++-v3/testsuite/20_util/is_object/requirements/explicit_instantiation.cc
! f480d1f76654c1bcf0dfe98f68ba0392  libstdc++-v3/testsuite/20_util/is_object/requirements/typedefs.cc
! f38e2fc01acd0e4f0ed10765d038c061  libstdc++-v3/testsuite/20_util/is_object/value.cc
! c1fb6997e68818e8ef93b7751f67beef  libstdc++-v3/testsuite/20_util/is_pod/deprecated-2a.cc
! f29a6270188f879d49afef59fbe97a28  libstdc++-v3/testsuite/20_util/is_pod/requirements/explicit_instantiation.cc
! e950d7006c5a5378125bffef1883188f  libstdc++-v3/testsuite/20_util/is_pod/requirements/typedefs.cc
! 406de326440e9881e5f3b9629d3255f7  libstdc++-v3/testsuite/20_util/is_pod/value.cc
! 479794e44db7e80b212ba825ce36f8f6  libstdc++-v3/testsuite/20_util/is_pointer/requirements/explicit_instantiation.cc
! fdf789198d3081f7ee2975e738bf765b  libstdc++-v3/testsuite/20_util/is_pointer/value.cc
! 1311eb3e79c008b4f5aefa55f0640c39  libstdc++-v3/testsuite/20_util/is_pointer_interconvertible/value.cc
! d22a6be6a4a98d7bc8d0c9825a73698f  libstdc++-v3/testsuite/20_util/is_pointer_interconvertible/version.cc
! ffdb77710f31b58e88ff6a2dac113bd0  libstdc++-v3/testsuite/20_util/is_pointer_interconvertible/with_class.cc
! ede9095caab5577ae4737ce559bea518  libstdc++-v3/testsuite/20_util/is_polymorphic/incomplete_neg.cc
! 0cdcd6a33b73a5ad89595f03ffd3f85f  libstdc++-v3/testsuite/20_util/is_polymorphic/requirements/explicit_instantiation.cc
! 360a2e9209ef2bb8583da28f0f48cb13  libstdc++-v3/testsuite/20_util/is_polymorphic/requirements/typedefs.cc
! 6580f14f2b40ddae46fd8651098a0f5a  libstdc++-v3/testsuite/20_util/is_polymorphic/value.cc
! 3a790735325d55f9d4f0b619cc672e2e  libstdc++-v3/testsuite/20_util/is_reference/requirements/explicit_instantiation.cc
! 963610d737498ec03a97e207b49dadcc  libstdc++-v3/testsuite/20_util/is_reference/requirements/typedefs.cc
! e466fe952d2234f59db92e6366f5be7b  libstdc++-v3/testsuite/20_util/is_reference/value.cc
! 535156d9ee7a904f8840d5d0afdc14ab  libstdc++-v3/testsuite/20_util/is_rvalue_reference/requirements/explicit_instantiation.cc
! c5eb365cffbaef822ce50f912c386644  libstdc++-v3/testsuite/20_util/is_rvalue_reference/requirements/typedefs.cc
! bad0a64d7bc37c7019cbab926b8bb85e  libstdc++-v3/testsuite/20_util/is_rvalue_reference/value.cc
! fdbd576383ceb915399f6d74c31dd238  libstdc++-v3/testsuite/20_util/is_same/requirements/explicit_instantiation.cc
! 12b727f19012786b85ba308e1d584f56  libstdc++-v3/testsuite/20_util/is_same/requirements/typedefs.cc
! b362b6dda4760b7ff01c3d022139514c  libstdc++-v3/testsuite/20_util/is_same/value.cc
! c22b052b8629e802e54dda0d4cf9eb65  libstdc++-v3/testsuite/20_util/is_scalar/requirements/explicit_instantiation.cc
! 13acde82dc74df92542789723569faa9  libstdc++-v3/testsuite/20_util/is_scalar/requirements/typedefs.cc
! b5f0ba119e2306178251b692942b7914  libstdc++-v3/testsuite/20_util/is_scalar/value.cc
! 8b7e14bdc68f2a32781e83900ef65408  libstdc++-v3/testsuite/20_util/is_scoped_enum/value.cc
! 23b4feb6205c73849bf906e18a97f3ea  libstdc++-v3/testsuite/20_util/is_scoped_enum/version.cc
! 5847bc4854d1c3a9f759fe2e87136b1a  libstdc++-v3/testsuite/20_util/is_signed/requirements/explicit_instantiation.cc
! 0fd9cabc47e6cac47eb3a747fa1b1cbc  libstdc++-v3/testsuite/20_util/is_signed/requirements/typedefs.cc
! ae4e70f9c75cdfaf4f10d5fe447e4b98  libstdc++-v3/testsuite/20_util/is_signed/value.cc
! da7357fe254dc53898356253df9a2824  libstdc++-v3/testsuite/20_util/is_standard_layout/requiremenents/explicit_instantiation.cc
! 1eb4c6688bf7b975040eb4876a6bef3e  libstdc++-v3/testsuite/20_util/is_standard_layout/requiremenents/typedefs.cc
! 133396f1f0baadd9a66af3644d821800  libstdc++-v3/testsuite/20_util/is_standard_layout/value.cc
! b2835619ef273aac4629d82967524a19  libstdc++-v3/testsuite/20_util/is_swappable/requirements/explicit_instantiation.cc
! 375a1a75fc04c143b5783e20a5047800  libstdc++-v3/testsuite/20_util/is_swappable/requirements/explicit_instantiation_ext.cc
! 411535a1613705c68cc7fb082dd4a39e  libstdc++-v3/testsuite/20_util/is_swappable/requirements/typedefs.cc
! 1503756d59a5934228c094bd1aa4e33f  libstdc++-v3/testsuite/20_util/is_swappable/requirements/typedefs_ext.cc
! b5bb9f2031b1cdb2c248013c88f4e816  libstdc++-v3/testsuite/20_util/is_swappable/value.cc
! 4da4fe8506a122420ba602fa9955e28f  libstdc++-v3/testsuite/20_util/is_swappable/value.h
! 695e4aca539857b06bfb6a5f2e732c20  libstdc++-v3/testsuite/20_util/is_swappable/value_ext.cc
! 9348758baf039f388538f7e8a2f65837  libstdc++-v3/testsuite/20_util/is_swappable_with/incomplete_neg.cc
! 47ef2f63b179dd3c488e995549556c71  libstdc++-v3/testsuite/20_util/is_swappable_with/requirements/explicit_instantiation.cc
! 555964425383d0f6510c83b3920d0a27  libstdc++-v3/testsuite/20_util/is_swappable_with/requirements/typedefs.cc
! 392248af9100531978427b860be075ce  libstdc++-v3/testsuite/20_util/is_swappable_with/value.cc
! ca3aba0ee15c21c052214c3b9bd6b524  libstdc++-v3/testsuite/20_util/is_trivial/requirements/explicit_instantiation.cc
! 8bc72b719bafcd56eaabc4a99dc29112  libstdc++-v3/testsuite/20_util/is_trivial/requirements/typedefs.cc
! 29edcb69d110f569724232975e8b8eeb  libstdc++-v3/testsuite/20_util/is_trivial/value.cc
! 2377d75b875c584afab0a333cb089ffd  libstdc++-v3/testsuite/20_util/is_trivially_assignable/requirements/explicit_instantiation.cc
! 4b1a97987cbec65237832cd4e04516cc  libstdc++-v3/testsuite/20_util/is_trivially_assignable/requirements/typedefs.cc
! 39d66d3c6c9a9afa99d0acfcc9719fd8  libstdc++-v3/testsuite/20_util/is_trivially_assignable/value.cc
! be999b6905f64af7ab3bc593cb34d054  libstdc++-v3/testsuite/20_util/is_trivially_constructible/requirements/explicit_instantiation.cc
! 2b5519fde10c606eecd01e1e52bd9c80  libstdc++-v3/testsuite/20_util/is_trivially_constructible/requirements/typedefs.cc
! 56d7675e777ea240736ce28f830eb1c3  libstdc++-v3/testsuite/20_util/is_trivially_constructible/value.cc
! 991dd187aebdc425ca6870c7595d093c  libstdc++-v3/testsuite/20_util/is_trivially_copy_assignable/requirements/explicit_instantiation.cc
! 50d631a1d9b8d546495259d58a4f66f4  libstdc++-v3/testsuite/20_util/is_trivially_copy_assignable/requirements/typedefs.cc
! 7b1f28f448c9dc593f7ec6db0ecdd772  libstdc++-v3/testsuite/20_util/is_trivially_copy_assignable/value.cc
! 3719887f7ff4cad3f416410793403d3e  libstdc++-v3/testsuite/20_util/is_trivially_copy_constructible/requirements/explicit_instantiation.cc
! a3960a0b4a6ce3f077ef4d6b00756b9a  libstdc++-v3/testsuite/20_util/is_trivially_copy_constructible/requirements/typedefs.cc
! cf0bb414106cdd1805001fde02f84ef2  libstdc++-v3/testsuite/20_util/is_trivially_copy_constructible/value.cc
! 08b24005ce7f390fdac74495b03e2a66  libstdc++-v3/testsuite/20_util/is_trivially_copyable/requirements/explicit_instantiation.cc
! ab60a8e29f646454df1391a0811ea0cb  libstdc++-v3/testsuite/20_util/is_trivially_copyable/requirements/typedefs.cc
! 1083308915e25fe950e39da8538b6233  libstdc++-v3/testsuite/20_util/is_trivially_copyable/value.cc
! c4f77811f2c3ecdcd13cb509fccf6771  libstdc++-v3/testsuite/20_util/is_trivially_default_constructible/requirements/explicit_instantiation.cc
! 2060471164cceaa7c90d6e6100987944  libstdc++-v3/testsuite/20_util/is_trivially_default_constructible/requirements/typedefs.cc
! bd81e8945a8f1b4fb8f68274b9b4d00e  libstdc++-v3/testsuite/20_util/is_trivially_default_constructible/value.cc
! 85d1986f8374d1d98cc11641b0e27284  libstdc++-v3/testsuite/20_util/is_trivially_destructible/requirements/explicit_instantiation.cc
! 7fe2cefae5afcb3e056e44c26ddcab21  libstdc++-v3/testsuite/20_util/is_trivially_destructible/requirements/typedefs.cc
! b03220f9d59e10c0bb91b4bdc9c545fe  libstdc++-v3/testsuite/20_util/is_trivially_destructible/value.cc
! 1ac35fc0a5989c570d4587f6fab3e4ea  libstdc++-v3/testsuite/20_util/is_trivially_move_assignable/requirements/explicit_instantiation.cc
! 53cb7a45bb5f91a5e7a72488d2c0200f  libstdc++-v3/testsuite/20_util/is_trivially_move_assignable/requirements/typedefs.cc
! 9edff8333cb090394d9652ca60d13665  libstdc++-v3/testsuite/20_util/is_trivially_move_assignable/value.cc
! f21f32c73ee0ec299927dd16c83b013c  libstdc++-v3/testsuite/20_util/is_trivially_move_constructible/requirements/explicit_instantiation.cc
! acf97f17773695989981639580f77979  libstdc++-v3/testsuite/20_util/is_trivially_move_constructible/requirements/typedefs.cc
! 321f2327158cd1bd559b6407766c150b  libstdc++-v3/testsuite/20_util/is_trivially_move_constructible/value.cc
! d74b5beb5f84edbffca920ba6fe85cda  libstdc++-v3/testsuite/20_util/is_unbounded_array/requirements/explicit_instantiation.cc
! 5c9d284c19e76340f3ed491fc46785e0  libstdc++-v3/testsuite/20_util/is_unbounded_array/requirements/typedefs.cc
! 8d06c9dc64d6747123cf03be4ab1da54  libstdc++-v3/testsuite/20_util/is_unbounded_array/value.cc
! 6b74dec68fbf0fd4fb13ac3577917788  libstdc++-v3/testsuite/20_util/is_union/requirements/explicit_instantiation.cc
! 4ddaf473cc033f4b7ca919bccda9f69b  libstdc++-v3/testsuite/20_util/is_union/requirements/typedefs.cc
! 86e4705766154fccc39f0d0117d31371  libstdc++-v3/testsuite/20_util/is_union/value.cc
! ace8248cb4a3d0397d8133e78d4762b2  libstdc++-v3/testsuite/20_util/is_unsigned/requirements/explicit_instantiation.cc
! 521d523b209fb04cd431520901010808  libstdc++-v3/testsuite/20_util/is_unsigned/requirements/typedefs.cc
! 23ff58f1791c5a05103ee35ec24e784e  libstdc++-v3/testsuite/20_util/is_unsigned/value.cc
! ffb7daab45910f0c8dc26f26a7170aef  libstdc++-v3/testsuite/20_util/is_void/requirements/explicit_instantiation.cc
! 7b1f75968662d8813e59c3d6d942a3dc  libstdc++-v3/testsuite/20_util/is_void/requirements/typedefs.cc
! ed9047510c3fe4358120d5d29650f261  libstdc++-v3/testsuite/20_util/is_void/value.cc
! d9698f02436443fe403fb41d8b76a623  libstdc++-v3/testsuite/20_util/is_volatile/requirements/explicit_instantiation.cc
! 8d9221cd9d3ba9be6801d131ba10cfde  libstdc++-v3/testsuite/20_util/is_volatile/requirements/typedefs.cc
! 51118fa016220f69d989b33135a15e23  libstdc++-v3/testsuite/20_util/is_volatile/value.cc
! d71d3c7cb4aa95341622247e74cf1fac  libstdc++-v3/testsuite/20_util/logical_traits/83134.cc
! 0ea3a982570c3fa5e4811fb87f2b0235  libstdc++-v3/testsuite/20_util/logical_traits/requirements/explicit_instantiation.cc
! 2044305223aa0727cdbe67c76db8912b  libstdc++-v3/testsuite/20_util/logical_traits/requirements/typedefs.cc
! 91f4171e4deaf8c51b47dadce27927d3  libstdc++-v3/testsuite/20_util/logical_traits/value.cc
! f64a041d5749d3f355e5baa2dc26da62  libstdc++-v3/testsuite/20_util/make_signed/requirements/alias_decl.cc
! 91752b2f0f23ba43dfdcec5d4d989e76  libstdc++-v3/testsuite/20_util/make_signed/requirements/explicit_instantiation.cc
! 2415e4c6c6df4648752486384b56ac23  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc
! a8dfa81f948125af08c7fee3361a6200  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc
! a648c27d159a29e89a5ea4bfccefb4dc  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-3.cc
! 85f8d6edde7d336f95ad4dc865bec40d  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc
! 4e62d3eedbb97fbacfd968c41ced57eb  libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
! 9e5a3fa7291d25d0ea12711fe92b5927  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/alias_decl.cc
! 1b922096f38657533bc0db9f2a4e53c0  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/explicit_instantiation.cc
! e0ee476cf2aa9d6d3878bbfbe3e5d88d  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc
! 56cd5c22360302d486534af78e683df4  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc
! 1f041e4ec3d65375ba246a7fd6f1f091  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-3.cc
! e3183440b59cb858e543fc8a041cbdc0  libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
! bc483b6a27ccfde162cfc6554a96f850  libstdc++-v3/testsuite/20_util/memory_resource/1.cc
! c9a2d526afa2dc4e3f5bb830a216842a  libstdc++-v3/testsuite/20_util/memory_resource/2.cc
! d90517a5ca4ac53563222710207b6600  libstdc++-v3/testsuite/20_util/monotonic_buffer_resource/1.cc
! b0f5805f7bb18ac3252a1d3392f34683  libstdc++-v3/testsuite/20_util/monotonic_buffer_resource/93208.cc
! 4f7c2f7ba9a14a610bff818ee1ae3be7  libstdc++-v3/testsuite/20_util/monotonic_buffer_resource/allocate.cc
! c5c33134bf734a0c71098c741a3e1ca8  libstdc++-v3/testsuite/20_util/monotonic_buffer_resource/deallocate.cc
! 5eb8dea4d4492553bfcf356fbe0ede1b  libstdc++-v3/testsuite/20_util/monotonic_buffer_resource/release.cc
! 1958777111b9a051e4839a894965ae53  libstdc++-v3/testsuite/20_util/monotonic_buffer_resource/upstream_resource.cc
! bf74b76009dc032b1f1039ab9d4573ba  libstdc++-v3/testsuite/20_util/move/1.cc
! e168dac360aa86fe2af18df3567e7b4e  libstdc++-v3/testsuite/20_util/move/requirements/explicit_instantiation.cc
! 33805dcdcf0832c3bff017ee2fee613e  libstdc++-v3/testsuite/20_util/move_if_noexcept/1.cc
! 5fb242f36fb033e11d3419cabd7bb239  libstdc++-v3/testsuite/20_util/move_if_noexcept/constexpr.cc
! d775606c8fffd7ebcbd5cec6b1902825  libstdc++-v3/testsuite/20_util/move_if_noexcept/requirements/explicit_instantiation.cc
! e8c325f8e5f2eaf9f3c8c7cd2ab0812a  libstdc++-v3/testsuite/20_util/move_only_function/call.cc
! 48ee413c8f8eaee2afdfd3f2bf403469  libstdc++-v3/testsuite/20_util/move_only_function/cons.cc
! edd1af8bf683f6ccd07080569f74b3d7  libstdc++-v3/testsuite/20_util/move_only_function/move.cc
! 2c300060ea30eb01cb457aed1c7eb241  libstdc++-v3/testsuite/20_util/move_only_function/version.cc
! 5a06b4a7b08ace6aa7b04e9cbb67f82d  libstdc++-v3/testsuite/20_util/nonesuch/nonesuch.cc
! 5528f5e783c0d2948fb698b4a380117b  libstdc++-v3/testsuite/20_util/optional/77288.cc
! f669af40876c317318f47db8330b7058  libstdc++-v3/testsuite/20_util/optional/84601.cc
! e00c31137938963c2822b6d4d17c4103  libstdc++-v3/testsuite/20_util/optional/assignment/1.cc
  5f2a36dc053d6d68a81135df84e7f4cb  libstdc++-v3/testsuite/20_util/optional/assignment/100982.cc
! 3377cf3a33bf8a8bf34ef596af15a4c3  libstdc++-v3/testsuite/20_util/optional/assignment/2.cc
! 9bc72e34bf895432addb23ad7d3db9de  libstdc++-v3/testsuite/20_util/optional/assignment/3.cc
! cfffd43eb1c20b648e30710a39b82c89  libstdc++-v3/testsuite/20_util/optional/assignment/4.cc
! 417e6e7f46f62e93712b5793b603c6ef  libstdc++-v3/testsuite/20_util/optional/assignment/5.cc
! aa3f29932f8f02ae835f141f584742b9  libstdc++-v3/testsuite/20_util/optional/assignment/6.cc
! b4b10a6797710925c10da17b96caa9db  libstdc++-v3/testsuite/20_util/optional/assignment/7.cc
! 73114c2d139195da0e87c1fb9acb27d1  libstdc++-v3/testsuite/20_util/optional/assignment/8.cc
! 9306a08ce9e035993bb0da3e9c453169  libstdc++-v3/testsuite/20_util/optional/assignment/9.cc
! 004b48e3714c9ecd70221f23b1341493  libstdc++-v3/testsuite/20_util/optional/assignment/92878_92947.cc
! 4921fb1eaac4d84642a31a8c9b68d7a3  libstdc++-v3/testsuite/20_util/optional/assignment/noexcept.cc
! db1c02b27ac65edc1840163c15afa0ff  libstdc++-v3/testsuite/20_util/optional/bad_access.cc
! ffef18331eba2bb2e0d0b3a04889e98f  libstdc++-v3/testsuite/20_util/optional/cons/77727.cc
! f518ca18908f3b7f2c9d85000b72e8d6  libstdc++-v3/testsuite/20_util/optional/cons/85642.cc
! 9277981254b4f4e621e549274adeaf16  libstdc++-v3/testsuite/20_util/optional/cons/92878_92947.cc
! 9dec16e5ed38f0874552864772f00cf8  libstdc++-v3/testsuite/20_util/optional/cons/copy.cc
! 7f6483d39bb2f3c8e3fb7bb844dd0b7b  libstdc++-v3/testsuite/20_util/optional/cons/deduction.cc
! d482c6195340f43e84ac356bffbe110a  libstdc++-v3/testsuite/20_util/optional/cons/default.cc
! 45cc5553e183cb167e4ced5f96d668a6  libstdc++-v3/testsuite/20_util/optional/cons/move.cc
! db240d21c6d84400671ab0bf0ac6f791  libstdc++-v3/testsuite/20_util/optional/cons/noexcept.cc
! 8e573fccb757f8def8df541260f6ac2b  libstdc++-v3/testsuite/20_util/optional/cons/trivial.cc
! fd22981b7bf5355ee1cfa5feda624b7b  libstdc++-v3/testsuite/20_util/optional/cons/value.cc
! ed770dd92c445ad02fcee92380d91e3d  libstdc++-v3/testsuite/20_util/optional/cons/value_neg.cc
  205153857e4103d66c67fae379d14a86  libstdc++-v3/testsuite/20_util/optional/constexpr/assign.cc
  52debc915496e85a8c7135a5baffe7b1  libstdc++-v3/testsuite/20_util/optional/constexpr/cons/conv.cc
! 75c9ee134662535c683051c48b5d5e18  libstdc++-v3/testsuite/20_util/optional/constexpr/cons/default.cc
! ff53094abe8d53f484a05f08803a3e2a  libstdc++-v3/testsuite/20_util/optional/constexpr/cons/value.cc
! ac6169669eb2aaf50d2ba7722c468f66  libstdc++-v3/testsuite/20_util/optional/constexpr/in_place.cc
! c4fdd6c8a0b01239422b4408e56e3854  libstdc++-v3/testsuite/20_util/optional/constexpr/make_optional.cc
  1bd13d53c43f256f47a5c535cc903df1  libstdc++-v3/testsuite/20_util/optional/constexpr/modifiers.cc
! 2b51fa3e2f9ee1b798d46d5e6762b2fc  libstdc++-v3/testsuite/20_util/optional/constexpr/nullopt.cc
! 5f667634bcbab35a92cef9d2d3274d62  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/1.cc
! 84d8509bb476b3da1f4956a2b548382a  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/2.cc
! 62ff8d01b8c15726062a68fa378c639f  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/3.cc
! 19be70962dfa35d87c8a3fdc855dd986  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/4.cc
! 8924062f291729816fd9063cbe84c688  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/5.cc
! 9d72d00b6446455d0ac64c5fdfa00ca7  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/1.cc
! 386550c57735cfcea12c25411144c972  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/2.cc
! 66b4886b4d7aa0ebfdf3915be79a3d24  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/3.cc
! 2a00e771d355c284c19dd28c805d9728  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/4.cc
! 8f45fb78bbbd66c23510e6849c2a13f9  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/5.cc
! 52228f81819360d8cd81f10731b84283  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/6.cc
  1a6e6bdd2186983f8eb3e55976f3af73  libstdc++-v3/testsuite/20_util/optional/constexpr/swap.cc
! 133f4caac995b9fb8fd21f444b1ee4a7  libstdc++-v3/testsuite/20_util/optional/hash.cc
! 3fcc899310372872d012514cf03a782c  libstdc++-v3/testsuite/20_util/optional/in_place.cc
! 0cb796cf5a410e12c6ecd7e1acb04070  libstdc++-v3/testsuite/20_util/optional/make_optional-2.cc
! 8779ff484841f29f3bf8db9f3a7bfe5f  libstdc++-v3/testsuite/20_util/optional/make_optional.cc
! 5b939997ab0b925554c67ff456486490  libstdc++-v3/testsuite/20_util/optional/monadic/and_then.cc
! 1fb80e2a52e88cb6b62919fce0976800  libstdc++-v3/testsuite/20_util/optional/monadic/or_else.cc
! 79388e9c0a6e088bd396e51da861fa47  libstdc++-v3/testsuite/20_util/optional/monadic/or_else_neg.cc
! e73fd70677c9d505f949cef47d3131d8  libstdc++-v3/testsuite/20_util/optional/monadic/transform.cc
! 5fa3bb7eaf2cba4b834ac9c7120752fe  libstdc++-v3/testsuite/20_util/optional/nullopt.cc
! f266cd6919175ef85fb8723ecd34023c  libstdc++-v3/testsuite/20_util/optional/observers/1.cc
! 1374b724b434803cb695b3244d57b154  libstdc++-v3/testsuite/20_util/optional/observers/2.cc
! fdac64c9706de2fb27617b4f51f20594  libstdc++-v3/testsuite/20_util/optional/observers/3.cc
! bc10c4f4661301bda86688f88fa4779f  libstdc++-v3/testsuite/20_util/optional/observers/4.cc
! eb9bfe0027ea25f86df479187f2e2b51  libstdc++-v3/testsuite/20_util/optional/observers/5.cc
! 2e7aead929c8a20b8f4de6346cd95db7  libstdc++-v3/testsuite/20_util/optional/observers/6.cc
! d8af3640e7aabc8dd1960265b3ca5a27  libstdc++-v3/testsuite/20_util/optional/observers/lwg2762.cc
! 7c9d417a4b0745e80dc5d920811dd7c1  libstdc++-v3/testsuite/20_util/optional/relops/1.cc
! e7375870ac149e6fd0b61a1ce5c07e22  libstdc++-v3/testsuite/20_util/optional/relops/2.cc
! b82e5c7c2c813fea4e4e3c1e22106f9a  libstdc++-v3/testsuite/20_util/optional/relops/3.cc
! 3ac691fa9feebe1a9124e9dfe774cae8  libstdc++-v3/testsuite/20_util/optional/relops/4.cc
! c9aa9f9e406aba3a09851095aba45048  libstdc++-v3/testsuite/20_util/optional/relops/5.cc
! 71784fea48bffed48da31910f4e5d870  libstdc++-v3/testsuite/20_util/optional/relops/6.cc
! 6c68fe8f2cdc22b4eb85dad9d95582e9  libstdc++-v3/testsuite/20_util/optional/relops/7.cc
! c6f84d09fa0962de9171290c8ce708fb  libstdc++-v3/testsuite/20_util/optional/relops/96269.cc
! 30a0340ce1a71e672cca39f0080109f9  libstdc++-v3/testsuite/20_util/optional/relops/three_way.cc
! 9c52d59fe2419c436cc70b7a9998d6c5  libstdc++-v3/testsuite/20_util/optional/requirements.cc
! de2e63ee112921235a6d2e4f53691752  libstdc++-v3/testsuite/20_util/optional/swap/1.cc
! 1803a83df49d39134507ff5842b8da2d  libstdc++-v3/testsuite/20_util/optional/swap/2.cc
! f7200d2262962d5bf38ed7d75be225e5  libstdc++-v3/testsuite/20_util/optional/typedefs.cc
! 027c1d0d48df3e1ffe45b2c618f329e5  libstdc++-v3/testsuite/20_util/optional/version.cc
! cda02a0d71942a759d9f094568ffb3a6  libstdc++-v3/testsuite/20_util/owner_less/cmp.cc
! 089fec0bcef6668c3aa6423b12d015ca  libstdc++-v3/testsuite/20_util/owner_less/noexcept.cc
! ba95f642ccaf36e690be4d4c8df98b31  libstdc++-v3/testsuite/20_util/owner_less/void.cc
! f1ab4027c3e1e4280bfc736bc734544d  libstdc++-v3/testsuite/20_util/pair/1.cc
! 06bd7312a60884516160d523099fd60e  libstdc++-v3/testsuite/20_util/pair/2.cc
! f49b5d3ea98583309e042f0d3a7b4f4c  libstdc++-v3/testsuite/20_util/pair/3.cc
! f936bb950b39c520dd3c1b212ba389e5  libstdc++-v3/testsuite/20_util/pair/4.cc
! 63941851052bff9a98fcea5eafdfb4a9  libstdc++-v3/testsuite/20_util/pair/40925.cc
! f87db4771f77305f4347b141abafdfae  libstdc++-v3/testsuite/20_util/pair/44487.cc
! 42f1b4189ccf2d339694316ae926c836  libstdc++-v3/testsuite/20_util/pair/70437.cc
! fc0e451ac8fb347bced1bc025756e3e1  libstdc++-v3/testsuite/20_util/pair/79141.cc
! 8d79addc1b867357abf9121d717cd759  libstdc++-v3/testsuite/20_util/pair/86751.cc
! 0bf847c73ddad31dc81b1edc7513b621  libstdc++-v3/testsuite/20_util/pair/87822.cc
! 8d5e6a3b0760dce088360c5741261c31  libstdc++-v3/testsuite/20_util/pair/astuple/astuple.cc
! 19fa5c063efd41fdf23861a60d273ed8  libstdc++-v3/testsuite/20_util/pair/astuple/astuple_cpp14.cc
! 777f4add94ec31b0abaa941465c23776  libstdc++-v3/testsuite/20_util/pair/astuple/constexpr_get.cc
! 517c2277d79c47aca4f3087f6fb89f69  libstdc++-v3/testsuite/20_util/pair/astuple/constexpr_get_by_type.cc
! f971d9b59f621eaa1ffea94b69394afa  libstdc++-v3/testsuite/20_util/pair/astuple/get.cc
! c6ac610caf8bb08b9e6a7d4b922dc4e1  libstdc++-v3/testsuite/20_util/pair/astuple/get_by_type.cc
! 8c64be57a8e97ab19fd7c0af66267e70  libstdc++-v3/testsuite/20_util/pair/astuple/get_by_type_neg.cc
! 9a0f924a06b54c420edfdeed90fcfc36  libstdc++-v3/testsuite/20_util/pair/astuple/get_neg.cc
! e1533578a95c98b91d2ba6e19811ff74  libstdc++-v3/testsuite/20_util/pair/comparison_operators/constexpr.cc
! 13c0f8e2566fdb759442caa59520c56c  libstdc++-v3/testsuite/20_util/pair/comparison_operators/constexpr_c++20.cc
! 4cf2dd4fa6860a5d18a8822709f51d19  libstdc++-v3/testsuite/20_util/pair/cons/92878_92947.cc
! c5964cf74c99c86ce570bfdb15835bb8  libstdc++-v3/testsuite/20_util/pair/cons/99957.cc
! 70307d39ba4d8a999c8eb5b2e631a68a  libstdc++-v3/testsuite/20_util/pair/cons/constexpr.cc
! 44131e1a303ec19a2e633863c2e0e78a  libstdc++-v3/testsuite/20_util/pair/cons/deduction.cc
! 50bde0c6fe22b31c6b401d963cd9619b  libstdc++-v3/testsuite/20_util/pair/cons/explicit_construct.cc
! ff3cf176b809fc8dcbaa2d4c00cb3d83  libstdc++-v3/testsuite/20_util/pair/cons/noexcept_move_construct.cc
! 59078b4e1551add86e61a8575735df1a  libstdc++-v3/testsuite/20_util/pair/constexpr_assign.cc
! 8046c2c8fb9c1b530eed055c34ad4334  libstdc++-v3/testsuite/20_util/pair/constexpr_get.cc
! 50587765c0369578f80df0e46d5f4aea  libstdc++-v3/testsuite/20_util/pair/constexpr_swap.cc
! bda45620ccf8e34ee9c88417e78a1fbc  libstdc++-v3/testsuite/20_util/pair/make_pair/constexpr.cc
! 9bf43f9667f8af152e8ab7a1f1066b99  libstdc++-v3/testsuite/20_util/pair/moveable.cc
! 5f9ebee71fc6390267351c0cfbd49f97  libstdc++-v3/testsuite/20_util/pair/noexcept_move_assign.cc
! eb53fe3e89bcf14ae7603d18d72462ef  libstdc++-v3/testsuite/20_util/pair/noexcept_swap.cc
! 8108b06e98a499e2520af133aa11c5d8  libstdc++-v3/testsuite/20_util/pair/noncopyable.cc
! 53efdac56958ff7a07286b13a167c92c  libstdc++-v3/testsuite/20_util/pair/piecewise.cc
! f07c22f55b4672946cf788481eafb071  libstdc++-v3/testsuite/20_util/pair/piecewise2.cc
! e2a3ea63bdc2bab1dc7ce12e92fedf95  libstdc++-v3/testsuite/20_util/pair/ref_assign.cc
! 98c472c662693d2a51f995ca93a93c91  libstdc++-v3/testsuite/20_util/pair/requirements/dr2367.cc
! b3d5b6926128a21aa20e9917f3fcc8d9  libstdc++-v3/testsuite/20_util/pair/requirements/dr801.cc
! bf6fd13633b8f8fbe6c7034e65ca6bdc  libstdc++-v3/testsuite/20_util/pair/requirements/explicit_instantiation/1.cc
! 8099b36c756fc41e3bc9ee5b66294a57  libstdc++-v3/testsuite/20_util/pair/requirements/structural.cc
! f63763611d2f39c6364f5717ce8aabe0  libstdc++-v3/testsuite/20_util/pair/swap.cc
! 5caef850610155be9b6c2033eeeb4d30  libstdc++-v3/testsuite/20_util/pair/swap_cxx17.cc
! c5d2ad990f812ed47a8b071884c2320f  libstdc++-v3/testsuite/20_util/pair/traits.cc
! 4db5230edc60daf04deb5d886b7682e4  libstdc++-v3/testsuite/20_util/pointer_safety/1.cc
! 137193e221b043692c29a575c84f55f7  libstdc++-v3/testsuite/20_util/pointer_traits/lwg3545.cc
! 2975cb430bb44eb904c416b203f8ae5c  libstdc++-v3/testsuite/20_util/pointer_traits/pointer_to.cc
! f860bff45e1170370ba6fc13aea4b94f  libstdc++-v3/testsuite/20_util/pointer_traits/pointer_to_constexpr.cc
! 72a6d074e60a1b3b35cd824784faa89f  libstdc++-v3/testsuite/20_util/pointer_traits/rebind.cc
! c44bd5f14599888ffb9262ce326045b2  libstdc++-v3/testsuite/20_util/pointer_traits/requirements/explicit_instantiation.cc
! 9af182d53fd8e17cf8a716ec8b64e828  libstdc++-v3/testsuite/20_util/pointer_traits/requirements/typedefs.cc
! 6e3495d9ace1d3d42b636bbc7030fb6b  libstdc++-v3/testsuite/20_util/polymorphic_allocator/1.cc
! 9d4fb5022bcc07630ad3680822f46f84  libstdc++-v3/testsuite/20_util/polymorphic_allocator/allocate_object.cc
! 3ebbee604a2ea3a4f09dc4224c3692c3  libstdc++-v3/testsuite/20_util/polymorphic_allocator/construct_c++2a.cc
! d66f820a394001e342a4867b537cfd14  libstdc++-v3/testsuite/20_util/polymorphic_allocator/construct_pair.cc
! a15946667caafc7f0f0f6bc3fb588b62  libstdc++-v3/testsuite/20_util/polymorphic_allocator/lwg3237.cc
! 00f10cd8196f73646dfde826c1465b85  libstdc++-v3/testsuite/20_util/polymorphic_allocator/resource.cc
! 12ea8c4ca025f9025b3608da838b88c5  libstdc++-v3/testsuite/20_util/polymorphic_allocator/select.cc
! 00306a0dc0e3bcd38f687a536e881364  libstdc++-v3/testsuite/20_util/rank/requirements/explicit_instantiation.cc
! e87d11194d2182c3d0e852c7c88cf3c1  libstdc++-v3/testsuite/20_util/rank/requirements/typedefs.cc
! b7b716b3b95ad413531c0e75c636319e  libstdc++-v3/testsuite/20_util/rank/value.cc
! 9b0639db634a64f5a35b29ab2e384121  libstdc++-v3/testsuite/20_util/ratio/comparisons/comp1.cc
! 43b1ffeabb16200d4bee181e54528121  libstdc++-v3/testsuite/20_util/ratio/comparisons/comp2.cc
! ee06c841bb23b4293304a23ddb3e1b97  libstdc++-v3/testsuite/20_util/ratio/comparisons/comp3.cc
! 4ae7b4ac10ef9b54d85f5ca782a76fb2  libstdc++-v3/testsuite/20_util/ratio/cons/cons1.cc
! 84beaa42992b347288b7734bb520f0b7  libstdc++-v3/testsuite/20_util/ratio/cons/cons_overflow_neg.cc
! 1bc0033e665efdad5cf91d42f7731351  libstdc++-v3/testsuite/20_util/ratio/operations/45866.cc
! 613fbc4c42dce9ee800659a810bfb610  libstdc++-v3/testsuite/20_util/ratio/operations/47913.cc
! 3d0e376ed4e47d239867792b74e85904  libstdc++-v3/testsuite/20_util/ratio/operations/53840.cc
! 99e7fa9323c77ab442eaa31e3560d690  libstdc++-v3/testsuite/20_util/ratio/operations/ops1.cc
! 0525fae93abd4c9bb97c5a138db3c647  libstdc++-v3/testsuite/20_util/ratio/operations/ops2.cc
! 87c05b0407166fe339fe4e75cbdf652a  libstdc++-v3/testsuite/20_util/ratio/operations/ops3.cc
! 388c1b29064b2df244e9e89f3d18ae98  libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc
! 6785d8ad8eab79be32eb8a1acab31957  libstdc++-v3/testsuite/20_util/ratio/requirements/constexpr_data.cc
! fb3427c994513620f40b5feb9d0ca9bb  libstdc++-v3/testsuite/20_util/ratio/requirements/ratio_equal_v.cc
! adb5d68178006afea0a210c3b6d00b75  libstdc++-v3/testsuite/20_util/raw_storage_iterator/base.cc
! 349d560eb6fa81f631f92d67b31e6a52  libstdc++-v3/testsuite/20_util/raw_storage_iterator/dr2127.cc
! d9bd349f9dd045de18c630078b82944e  libstdc++-v3/testsuite/20_util/raw_storage_iterator/requirements/base_classes.cc
! 656a9f81905b713bd19fb81f0450e8f5  libstdc++-v3/testsuite/20_util/raw_storage_iterator/requirements/explicit_instantiation/1.cc
! 5d4f998f083490953e728b5935531447  libstdc++-v3/testsuite/20_util/raw_storage_iterator/requirements/typedefs.cc
! 1785ece6533a1e90e7c15dd95f788847  libstdc++-v3/testsuite/20_util/reference_wrapper/24803.cc
! 4200b2c12893211f42ca6fdb2feae655  libstdc++-v3/testsuite/20_util/reference_wrapper/41792.cc
! 64453bd3020b78077710cd20a540ea9d  libstdc++-v3/testsuite/20_util/reference_wrapper/80504.cc
! 002763f0887ddffec74d94fcff2454be  libstdc++-v3/testsuite/20_util/reference_wrapper/83427.cc
! 368e1b6a6ec682258c3948fd7dd04a5f  libstdc++-v3/testsuite/20_util/reference_wrapper/constexpr.cc
! f68cd229bd1c5364248f5081ad2e4161  libstdc++-v3/testsuite/20_util/reference_wrapper/deduction.cc
! 0223c9c8c582840ac6d3588e80b26b2a  libstdc++-v3/testsuite/20_util/reference_wrapper/incomplete.cc
! 25ee41a6ffaf213df84af8cddd97eb03  libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc
! ee97fc4a8b92d8f39543faba8c91644e  libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-3.cc
! 64ec45f53b44489e83d61c97020d00de  libstdc++-v3/testsuite/20_util/reference_wrapper/invoke.cc
! d35070ec2d5de79d74fb8a3c8d7b4295  libstdc++-v3/testsuite/20_util/reference_wrapper/lwg2993.cc
! 41afa1f94c0458ce9dac85913663bbc1  libstdc++-v3/testsuite/20_util/reference_wrapper/ref_neg.cc
! 67d5e69e8376a4507e0599a043d8b859  libstdc++-v3/testsuite/20_util/reference_wrapper/requirements.cc
! 6214196416b45706afc8858ccc286378  libstdc++-v3/testsuite/20_util/reference_wrapper/result_type.cc
! 65b7604a7eeffa15b2b4eb88d7c551d2  libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-2.cc
! 104e97b9ebeec5b986a732664330259d  libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc
! c1c79796cfde7b41fc3380f3dc16b705  libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs.cc
! e536cac83093358e8c95534b5356dc5b  libstdc++-v3/testsuite/20_util/rel_ops.cc
! 767977dc72ac52f7f63c951f3f52a5cd  libstdc++-v3/testsuite/20_util/remove_all_extents/requirements/alias_decl.cc
! 5e201f958b92dbc8b10dc81c2366109b  libstdc++-v3/testsuite/20_util/remove_all_extents/requirements/explicit_instantiation.cc
! 37cb65273c50f48fdfa35f468a58d463  libstdc++-v3/testsuite/20_util/remove_all_extents/value.cc
! 3177278a28ce9320cb2c9b544e358816  libstdc++-v3/testsuite/20_util/remove_const/requirements/alias_decl.cc
! c41f7a07a75aa07b4f2025494a74ecd4  libstdc++-v3/testsuite/20_util/remove_const/requirements/explicit_instantiation.cc
! eb52c1f168b5290e639ae1991c050325  libstdc++-v3/testsuite/20_util/remove_const/value.cc
! acd172ad86e7991d701815c6c5fddde5  libstdc++-v3/testsuite/20_util/remove_cv/requirements/alias_decl.cc
! 7c084225021106c113541c2d59eb2794  libstdc++-v3/testsuite/20_util/remove_cv/requirements/explicit_instantiation.cc
! e9f17854c8e14cb46d27cfefb55c89ad  libstdc++-v3/testsuite/20_util/remove_cv/value.cc
! f3b67c8418a79873f8150a30e8188429  libstdc++-v3/testsuite/20_util/remove_cvref/requirements/alias_decl.cc
! e6fad2ef8a6359e531d8f47e9e95be09  libstdc++-v3/testsuite/20_util/remove_cvref/requirements/explicit_instantiation.cc
! df5acada3ae361a7b2eae337890a0b33  libstdc++-v3/testsuite/20_util/remove_cvref/value.cc
! ac8a2359e4a819ceed8497c3840468b5  libstdc++-v3/testsuite/20_util/remove_cvref/value_ext.cc
! 393cc2b3bbe36dda92f29dd9ecb79a48  libstdc++-v3/testsuite/20_util/remove_extent/requirements/alias_decl.cc
! 48a7e84d78f3e58f11154318ad7ec38b  libstdc++-v3/testsuite/20_util/remove_extent/requirements/explicit_instantiation.cc
! efc10a92da1a4440ca4c3433d83de15d  libstdc++-v3/testsuite/20_util/remove_extent/value.cc
! d171d9323c6f53a360db4873aafbf36c  libstdc++-v3/testsuite/20_util/remove_pointer/requirements/alias_decl.cc
! 5589710812f59951b4bd58207b9c46ea  libstdc++-v3/testsuite/20_util/remove_pointer/requirements/explicit_instantiation.cc
! cc3c6cd6373449eefe7fde37cf760acf  libstdc++-v3/testsuite/20_util/remove_pointer/value.cc
! c9fb933ba47a18d0b4368307d4bcded7  libstdc++-v3/testsuite/20_util/remove_reference/requirements/alias_decl.cc
! 4b8d755b8a90a3508a43503a8f41e94b  libstdc++-v3/testsuite/20_util/remove_reference/requirements/explicit_instantiation.cc
! 06f441fd05977895279dac0f25201673  libstdc++-v3/testsuite/20_util/remove_reference/value.cc
! a3410b2e839be9757e2c56d39c0ceff5  libstdc++-v3/testsuite/20_util/remove_volatile/requirements/alias_decl.cc
! db8593f2b58c72484eaa473729d1ca6f  libstdc++-v3/testsuite/20_util/remove_volatile/requirements/explicit_instantiation.cc
! 8acfd01ce8b56e14164416c852adb65d  libstdc++-v3/testsuite/20_util/remove_volatile/value.cc
! 0c4a4e02021904ceb0f4447e5d9f5b36  libstdc++-v3/testsuite/20_util/result_of/1.cc
! 5e854909ff16416043a1c30966b8fe2d  libstdc++-v3/testsuite/20_util/result_of/2.cc
! 893120d3cf21f0614f1929947ef2e6c1  libstdc++-v3/testsuite/20_util/result_of/requirements/alias_decl.cc
! 3355472d715d4c9fcc82fa12ccdb8386  libstdc++-v3/testsuite/20_util/result_of/sfinae_friendly_1.cc
! fff354d95e6d074952bae6d497ce5c6a  libstdc++-v3/testsuite/20_util/result_of/sfinae_friendly_2.cc
! 000a77e1e66ecb7e51bb42c9d99a131d  libstdc++-v3/testsuite/20_util/scoped_allocator/1.cc
! 404e273b73d3c121b16cd1d99170a4ab  libstdc++-v3/testsuite/20_util/scoped_allocator/2.cc
! 4e2fa4c316dd48d50f87147ac122d0c6  libstdc++-v3/testsuite/20_util/scoped_allocator/3.cc
! e8fc3d33e2ddcb2b25c4659e68369f26  libstdc++-v3/testsuite/20_util/scoped_allocator/65279.cc
! a3e2460d6bfae92a75109fe32407b41e  libstdc++-v3/testsuite/20_util/scoped_allocator/69114.cc
! 93dcd4e9440cbc4fc328bdef60a4c577  libstdc++-v3/testsuite/20_util/scoped_allocator/69293_neg.cc
! 9cc69f57d4e8b0f5602b4ebbd25be92b  libstdc++-v3/testsuite/20_util/scoped_allocator/construct_pair.cc
! 0ae95cda47e71f65e553871b84de1398  libstdc++-v3/testsuite/20_util/scoped_allocator/construct_pair_c++2a.cc
! da4d65552940e65aa9d1b59f671421ca  libstdc++-v3/testsuite/20_util/scoped_allocator/dr2586.cc
! 2ca4dc91545f4fa74b0b77f0d54e2ff2  libstdc++-v3/testsuite/20_util/scoped_allocator/outermost.cc
! cf2b68a4f2e80d3601f099fa53008067  libstdc++-v3/testsuite/20_util/scoped_allocator/propagation.cc
! 11406f1cab3a7c7fd3f2a496454cc2ba  libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/explicit_instantiation.cc
! 84d3332cc1461cc546605eed842103b9  libstdc++-v3/testsuite/20_util/scoped_allocator/requirements/typedefs.cc
! 06aa6595475cfb15d7f201a2b84bb178  libstdc++-v3/testsuite/20_util/shared_ptr/assign/assign.cc
! 16ddc99928bab565fef29e42be8d3e0b  libstdc++-v3/testsuite/20_util/shared_ptr/assign/auto_ptr.cc
! 3dbaca4ca7113776710df0c735739c27  libstdc++-v3/testsuite/20_util/shared_ptr/assign/auto_ptr_neg.cc
! e0d496a64e15a0ea50e1ab57d13e28b0  libstdc++-v3/testsuite/20_util/shared_ptr/assign/auto_ptr_rvalue.cc
! 2f4f1d2adb88ee3c441b870ee2e42f24  libstdc++-v3/testsuite/20_util/shared_ptr/assign/dr541.cc
! b98408ed5a7825b8656b7f446ecd1c91  libstdc++-v3/testsuite/20_util/shared_ptr/assign/move.cc
! 042d1ac7d0e16c79dacea8a6d5adc850  libstdc++-v3/testsuite/20_util/shared_ptr/assign/sfinae.cc
! ae2a3d33af23785e7a915857cb90be15  libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr.cc
! 1f85e3f197c45aae2e3109e4b3dc6406  libstdc++-v3/testsuite/20_util/shared_ptr/assign/shared_ptr_neg.cc
! d5be8a8aed1f64036a574b9a028df13f  libstdc++-v3/testsuite/20_util/shared_ptr/assign/unique_ptr_lvalue_neg.cc
! 0ab6bd480bae45923e2703bea49111cb  libstdc++-v3/testsuite/20_util/shared_ptr/assign/unique_ptr_rvalue.cc
! 10534c5beec61a2a88629e9c792143d1  libstdc++-v3/testsuite/20_util/shared_ptr/atomic/1.cc
! 0e313c17fa65127b40907cfc134dd414  libstdc++-v3/testsuite/20_util/shared_ptr/atomic/2.cc
! 0439cbeb52689dd32da3a9bea0990506  libstdc++-v3/testsuite/20_util/shared_ptr/atomic/3.cc
! 431dd74159fc1fc3b6a15c112063c3d1  libstdc++-v3/testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc
! 4d5e6fd7e7388e4297202e27a77f9920  libstdc++-v3/testsuite/20_util/shared_ptr/casts/1.cc
! 198bd3b7c2cffecdb02bbc67b0abf968  libstdc++-v3/testsuite/20_util/shared_ptr/casts/reinterpret.cc
! 54e7ed03ddb9cab8656635f2f9fa580e  libstdc++-v3/testsuite/20_util/shared_ptr/casts/rval.cc
! bb01670fab6e769ee452d3e79d003f01  libstdc++-v3/testsuite/20_util/shared_ptr/comparison/42925.cc
! dd4ae81d862f45ce94f6d3fba6d5c863  libstdc++-v3/testsuite/20_util/shared_ptr/comparison/86537.cc
! 0b83c47610d299a865377b6e79c902e6  libstdc++-v3/testsuite/20_util/shared_ptr/comparison/cmp.cc
! 337eeab89188b163a00725b2dc3a1478  libstdc++-v3/testsuite/20_util/shared_ptr/comparison/cmp_c++20.cc
! cbba45875c2f7ce2404269f6e3c9ff00  libstdc++-v3/testsuite/20_util/shared_ptr/comparison/dr1401.cc
! 55bdf4ce5453e40a9fe18660a9d979ab  libstdc++-v3/testsuite/20_util/shared_ptr/comparison/less.cc
! ba7bb90314b7ea9d517dbcbf2224f1cb  libstdc++-v3/testsuite/20_util/shared_ptr/cons/39405.cc
! bf6e7652453c33f3d0b990cd9cea9f87  libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820_neg.cc
! b96b1f31e6a4e8b67f61e90ef68ae391  libstdc++-v3/testsuite/20_util/shared_ptr/cons/46910.cc
! 404fc3391b64c129dacc054fd47675c4  libstdc++-v3/testsuite/20_util/shared_ptr/cons/51365.cc
! 50d33a3b1c2c0699e986ba27ff91498d  libstdc++-v3/testsuite/20_util/shared_ptr/cons/52924.cc
! 26cf0376f5fcaf33f3cdabede300a6d0  libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc
! 4a623f357a1cabe8017f3f062ced458c  libstdc++-v3/testsuite/20_util/shared_ptr/cons/58659.cc
! 726246f5badd1f194db00b657f568608  libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc
! db9c05130650a12b6b553a5a771c808c  libstdc++-v3/testsuite/20_util/shared_ptr/cons/61036.cc
! c27f47696db9b6a46b69aa85085eec0e  libstdc++-v3/testsuite/20_util/shared_ptr/cons/79467.cc
! ba1f9a37361d387a90709b10feb1d1b0  libstdc++-v3/testsuite/20_util/shared_ptr/cons/80229.cc
! cc707812e11e2143579be78259edabe4  libstdc++-v3/testsuite/20_util/shared_ptr/cons/alias-rval.cc
! f5b5764475170abb4f8a83b804c65b98  libstdc++-v3/testsuite/20_util/shared_ptr/cons/alias.cc
! a00416073b74aff974ead6e07291a713  libstdc++-v3/testsuite/20_util/shared_ptr/cons/alloc.cc
! 69eda6d15d7060c19afb10cd4ce8af35  libstdc++-v3/testsuite/20_util/shared_ptr/cons/alloc_min.cc
! c7a5c0549d9390bad20765abe41cafe5  libstdc++-v3/testsuite/20_util/shared_ptr/cons/array.cc
! 8c756895dc26b75286292a89202b3a84  libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr.cc
! c33393045f6f992f03073e8833f89e71  libstdc++-v3/testsuite/20_util/shared_ptr/cons/auto_ptr_neg.cc
! 451cd273e5de7ad412cbbee40129aa49  libstdc++-v3/testsuite/20_util/shared_ptr/cons/constexpr.cc
! b66fbd996efced3347ff61e40b48f2c9  libstdc++-v3/testsuite/20_util/shared_ptr/cons/copy.cc
! aab7bf051c877d9ec11a91cf6cd674b7  libstdc++-v3/testsuite/20_util/shared_ptr/cons/deduction.cc
! 4e67a6f734a9c0c8ee64079ab63726d8  libstdc++-v3/testsuite/20_util/shared_ptr/cons/default.cc
! 15f1245c85be06c8b5748413e9c585d1  libstdc++-v3/testsuite/20_util/shared_ptr/cons/lwg2802.cc
  6ee836f3d8446334ad0856f8f79f7c0c  libstdc++-v3/testsuite/20_util/shared_ptr/cons/lwg3548.cc
! 9a4cbfa0d770b4056fdfd1bbebb4ddfe  libstdc++-v3/testsuite/20_util/shared_ptr/cons/move.cc
! 3b096a263c1eb5bd6025a68faee8ae26  libstdc++-v3/testsuite/20_util/shared_ptr/cons/noexcept_move_construct.cc
! 8898f20777e684711da4b24fe4f8c2e8  libstdc++-v3/testsuite/20_util/shared_ptr/cons/nullptr.cc
! 6bc6acb2070193596d1f18df61bcc1bd  libstdc++-v3/testsuite/20_util/shared_ptr/cons/pointer.cc
! 981df342aa447f268fbc876a811c36c4  libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr.cc
! e229d21ad28b17cf86e6023bb17532b6  libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_array.cc
! 007b71d08790ecde4ddd5b9fe9cf0e3b  libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_deleter.cc
! 54c06b1286f303cf4fd6c5ec441153d8  libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_deleter_ref_1.cc
! f33d1878b4dbc41ec42803e9f34d9eb5  libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_deleter_ref_2.cc
! 64521dae3f2aa23bd5aec6d59bc85edb  libstdc++-v3/testsuite/20_util/shared_ptr/cons/unique_ptr_neg.cc
! 7eaa4e5e65923584e56643495f1b5bce  libstdc++-v3/testsuite/20_util/shared_ptr/cons/void_neg.cc
! a528a67a2796e98f560c2ad59405ac7b  libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr.cc
! e447654b7496b7e56ebe484e788d4d77  libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc
! 0ac7da30cf3e24d402140edd73403a98  libstdc++-v3/testsuite/20_util/shared_ptr/creation/36949.cc
! 5bb6b51de77f1dbea165ff55d843e200  libstdc++-v3/testsuite/20_util/shared_ptr/creation/58594-no-rtti.cc
! d0a6f09bd1e3d3a74dcc45cbae043766  libstdc++-v3/testsuite/20_util/shared_ptr/creation/58594.cc
! cc30e8e38c28b29c7c07abed33c7660b  libstdc++-v3/testsuite/20_util/shared_ptr/creation/87278.cc
! 7eeb6f44ba22545976c8b9dcad2a0bca  libstdc++-v3/testsuite/20_util/shared_ptr/creation/92878_92947.cc
! 28538935b0036fb55b635f62c6c47373  libstdc++-v3/testsuite/20_util/shared_ptr/creation/99006.cc
! acd4abe6aeabd351d546ee67ca545dd2  libstdc++-v3/testsuite/20_util/shared_ptr/creation/alloc.cc
! 8ba639e230346f51b269d350fa166efc  libstdc++-v3/testsuite/20_util/shared_ptr/creation/alloc_min.cc
! 881f89da684fdd9ef282cd0ef7aac779  libstdc++-v3/testsuite/20_util/shared_ptr/creation/array.cc
! b69f4723582a7029804feb79fb8364fe  libstdc++-v3/testsuite/20_util/shared_ptr/creation/dr402.cc
! 87eb5e915373459b68195ffe4c8b9616  libstdc++-v3/testsuite/20_util/shared_ptr/creation/dr925.cc
! fd2605721c53a1b221ea23888af937e9  libstdc++-v3/testsuite/20_util/shared_ptr/creation/make.cc
! 494b49cd0f3c7bc8f766d51567d69652  libstdc++-v3/testsuite/20_util/shared_ptr/creation/no_rtti.cc
! 6b74df2972bf0e4b473cc1c1090afd3d  libstdc++-v3/testsuite/20_util/shared_ptr/creation/overwrite.cc
! 05091a9f7c09a07e7c150947ae64af28  libstdc++-v3/testsuite/20_util/shared_ptr/creation/private.cc
! 82bf03f59e21954a35c7b4f43409f3ae  libstdc++-v3/testsuite/20_util/shared_ptr/creation/single_allocation.cc
! e44541db5bcb7da8bb3d3b1ed54fd1f9  libstdc++-v3/testsuite/20_util/shared_ptr/creation/single_allocation_no_rtti.cc
! df243b1da02a9503c1a5e25f59707e99  libstdc++-v3/testsuite/20_util/shared_ptr/creation/version.cc
! cd68ee741cf9f15c27f043395881cb34  libstdc++-v3/testsuite/20_util/shared_ptr/dest/dest.cc
! b0dc40f050dd02cb46f9f7bcec08b900  libstdc++-v3/testsuite/20_util/shared_ptr/hash/1.cc
! 4c1484c3e33222d54790756cfd850dbb  libstdc++-v3/testsuite/20_util/shared_ptr/misc/24595.cc
! 86f05bc3f7e553654b576e2f313e8371  libstdc++-v3/testsuite/20_util/shared_ptr/misc/42019.cc
! 2df86cf76472e11d4d6c1ed6901128f7  libstdc++-v3/testsuite/20_util/shared_ptr/misc/get_deleter.cc
! 9aeaf0034e3c4a63a7ffd8077b8b2344  libstdc++-v3/testsuite/20_util/shared_ptr/misc/io.cc
! 968bcfe4ea6ef24f1d450795b9399a26  libstdc++-v3/testsuite/20_util/shared_ptr/misc/swap.cc
! ce540cc09f70e210be3ff64ac1fa85b0  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/24805.cc
! 9350f0cbf6d0b69a271d1372e13144c8  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/reset.cc
! 68efe9c22a2b63c496580efd643eed27  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/reset_alloc.cc
! 3a61b44fdcab4827d0cfc371e20b5414  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/reset_neg.cc
! f5bca709b463193edbdc430f415bcfa2  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/reset_sfinae.cc
! 917ffa2262abae872a32f514f0375272  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/swap.cc
! e96734eff5d52097d61cfc1c46e022d8  libstdc++-v3/testsuite/20_util/shared_ptr/modifiers/swap_neg.cc
! 76768246e2bfaeb861c0b053a56e1c43  libstdc++-v3/testsuite/20_util/shared_ptr/observers/array.cc
! b01220698369198294f04ccb7113a20b  libstdc++-v3/testsuite/20_util/shared_ptr/observers/bool_conv.cc
! 12dba3e031588fc33e2abb1a517e93c3  libstdc++-v3/testsuite/20_util/shared_ptr/observers/get.cc
! 4d24b4b1ce00ab044a3115beac4bc8d8  libstdc++-v3/testsuite/20_util/shared_ptr/observers/owner_before.cc
! 843d3ad412fc271389d2f5ecaad75645  libstdc++-v3/testsuite/20_util/shared_ptr/observers/unique.cc
! 1342880433ea22d6841d44c959e05568  libstdc++-v3/testsuite/20_util/shared_ptr/observers/use_count.cc
! 1db700ac187cc931037d7759881a71ea  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc
! 681ef75c1dc056c20fa44739ea290425  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/2.cc
! e09a08adb33faf39b264c68b35a8ade9  libstdc++-v3/testsuite/20_util/shared_ptr/requirements/weak_type.cc
! e393b8866fabfde4b24adaf54905a741  libstdc++-v3/testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc
! d0bad30411cafe4997a915d551685585  libstdc++-v3/testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc
! f0d75bfc4dff23dc8e10083273cfab6b  libstdc++-v3/testsuite/20_util/specialized_algorithms/construct_at/1.cc
! 3463c3651f8d3f45d9b73f49eb65c1c0  libstdc++-v3/testsuite/20_util/specialized_algorithms/construct_at/92878_92947.cc
! aa879cddb4f4bf2a3ca80ad8db4fbb79  libstdc++-v3/testsuite/20_util/specialized_algorithms/construct_at/95788.cc
! 2e0f464c8f366a7cb2d7f7a37f4b4736  libstdc++-v3/testsuite/20_util/specialized_algorithms/destroy/constrained.cc
! 6f06304cfa36cc58ba9310c3194cea40  libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/1.cc
! 0c5c17f41cf45b43b4782d8e2805accc  libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc
  7e2d819342973c849d87437556e29d5c  libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_construct.cc
  681f3ec9c3b800b4e5258afc87a95231  libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_copy_move.cc
  7377989805a8e1aa7f8896037d2eefae  libstdc++-v3/testsuite/20_util/specialized_algorithms/pstl/uninitialized_fill_destroy.cc
! 7fe4c4bfe777a8740f04451bfc26d5af  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/1.cc
! efb0b570168ffe84d6e2f37ece809386  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/102064.cc
! 8d8612d50934e41092baee49a31ad576  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/58982.cc
! 1b0d02cd9c3718f2c9f9d7d27899606d  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/64476.cc
! 6b507a51c89955f03a51d67d700fe79b  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/808590-cxx11.cc
! dfcd688638ddf02453a711f4639e2548  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/808590.cc
! a1be99e56cdb10f46debce9224771753  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/89164.cc
! 6e5da6b7318842e69609e8ef45558ea1  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc
! 72b98511ac386746135915f8f6d26ae8  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
! 9b3e4f319f44ee77ea0c657fdf58b9fc  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/102064.cc
! 01f5e9983a40038e759ea004472c37f6  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/58982.cc
! f141521515c23f91081f1e024a49f170  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/89164.cc
! 37d0cc06ed935620e421fbc3beaf202e  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc
! 49c3863e3152ecb5e406eff251628860  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_default/94540.cc
! 0455832f89d199d22410d01d2a6b69f7  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_default_construct/constrained.cc
! 0f62eb07e1e55614948a118c701cea6e  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_default_n/94540.cc
! beb0df06e972fe7d032af189fe7f40cf  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_default_n/sizes.cc
! b3a76cdacc3eabc45c217e3d5a8738a6  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/102064.cc
! db1a02556cc3ccdd9652cfc0a90ef18e  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/32158.cc
! a907d5e9ea850b064ee850ef2b86b856  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/58982.cc
! ba186b403d72918fa06399e95cc01e39  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/89164.cc
! d459afeaec3488ee3a113090c88b35c6  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/94017.cc
! 501cca7a23363349ff64ea661fa4af26  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/constrained.cc
! 2b8079d02ae431daa7c5a8e3743eb7a6  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/102064.cc
! 914534b4015de0a54f9d0a8bf73beefc  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/16505.cc
! 62aadc758af0080804572a5c029bf1c8  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/58982.cc
! f03427b9fd617f0a4ccc5e310c2d68c2  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/89164.cc
! 88541bc4fe1864b7ffbadda6a0f023e2  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/94017.cc
! 2f6fb2feb79895cad4f2780d63afbd48  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/dr1339.cc
! ddb944d483d0eeeec879693dc1d2aea8  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/sizes.cc
! 7213f7ea297a491de2b852fbe452be78  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc
! 713532442e2809030d364918b95439e0  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/94540.cc
! 58fa9c37d37dc672f536f2781a81e0e4  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/94831.cc
! cc0a4702b72316765f59e36eda025c41  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/constrained.cc
! 374f05ffe4253d79c04f83e29f8cefa4  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct_n/94540.cc
! f394e5903515c6d7fccd9a447f6c666b  libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct_n/sizes.cc
! 1c4e53e93afb5eed33bf22511582dabe  libstdc++-v3/testsuite/20_util/steady_clock/constexpr_data.cc
! ecda38dcbf2e1117917507283ba92165  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/allocate.cc
! 8d1e08c1b944f41c3ceed1df5644cd8f  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/allocate_single.cc
! 0900e469069ed035063a06ce1c1620b1  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/cons.cc
! efcb87653765d8dbd6461299cae29b13  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/cons_single.cc
! 2d8f17c651f770bf9bf3158a36e3574c  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/is_equal.cc
! 964b4b2bd413abc8dd20206422cb42e0  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/multithreaded.cc
! dcf10d9e855e20e92e46d88ca040e36d  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/options.cc
! c7473dbb10cdab8a93de0d093bb119f7  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/release.cc
! aa35850cde8fcc4bedc08728c6612f5e  libstdc++-v3/testsuite/20_util/synchronized_pool_resource/release_single.cc
! 422a35f8718904e2992ed392e4f4bd8f  libstdc++-v3/testsuite/20_util/system_clock/1.cc
! c814424b516f2825477da064e56a56d4  libstdc++-v3/testsuite/20_util/system_clock/constexpr_data.cc
! cf43ed6314eed0ae331439c216f6fbfb  libstdc++-v3/testsuite/20_util/temporary_buffer.cc
! 0d8a874b4f75bd08eb0ffda0e2a22243  libstdc++-v3/testsuite/20_util/time_point/1.cc
! dbf2559b2c395e42a906a8d409a73449  libstdc++-v3/testsuite/20_util/time_point/2.cc
! 9aebaa7e35009b9d13e4b2075aa9dbe9  libstdc++-v3/testsuite/20_util/time_point/3.cc
! 125a861dd6f2de0d14a011653282eecb  libstdc++-v3/testsuite/20_util/time_point/4.cc
! b81b48c064e787b43438bbfee0917bc7  libstdc++-v3/testsuite/20_util/time_point/arithmetic/constexpr.cc
! c172a31a31058fa0b8a0a6679a2c71f7  libstdc++-v3/testsuite/20_util/time_point/comparison_operators/constexpr.cc
! 054fa5e28822ecfce32cae1cecdf0e3e  libstdc++-v3/testsuite/20_util/time_point/comparison_operators/three_way.cc
! cd5032636afaa185f298c0d14ab9b695  libstdc++-v3/testsuite/20_util/time_point/cons/81468.cc
! 015b522fd8dc414305f9b69c4dc88f43  libstdc++-v3/testsuite/20_util/time_point/cons/constexpr.cc
! 4d8e94213b262e19f3ae4757e0b09201  libstdc++-v3/testsuite/20_util/time_point/nonmember/constexpr.cc
! d96074ef96b66cd6f4fb703bc891cb43  libstdc++-v3/testsuite/20_util/time_point/requirements/constexpr_functions.cc
! 26c7721f197b8c2afaed51654e10eec2  libstdc++-v3/testsuite/20_util/time_point/requirements/duration_neg.cc
! 0151c508b696548cb8bbe5b2ede24d32  libstdc++-v3/testsuite/20_util/time_point/requirements/explicit_instantiation/explicit_instantiation.cc
! 064d35984d27a1638d46e2bade74bc3a  libstdc++-v3/testsuite/20_util/time_point/requirements/noexcept.cc
! c0e7040561cbf3e0cc653c05e4b739d8  libstdc++-v3/testsuite/20_util/time_point_cast/constexpr.cc
! 539cc0bfa91a27018ba1156ded50f142  libstdc++-v3/testsuite/20_util/time_point_cast/rounding.cc
! 681b5a13c6a30d24fd0be6b62372a312  libstdc++-v3/testsuite/20_util/to_address/1.cc
! 5feb415690e12679f24685477a5a8ab0  libstdc++-v3/testsuite/20_util/to_address/1_neg.cc
! ebaa363c4ca730805aaf340c04e50314  libstdc++-v3/testsuite/20_util/to_address/debug.cc
  85bcd20ed1477c234831a1e857e38995  libstdc++-v3/testsuite/20_util/to_address/lwg3545.cc
! 5ad0dab0a987b897ae41cfb8e9b06ee9  libstdc++-v3/testsuite/20_util/to_chars/1.cc
  cf4f3947ea6ae8a691cad8b85ffb82b7  libstdc++-v3/testsuite/20_util/to_chars/103955.cc
! c70afbef43573b4aa7bc68320ec718e2  libstdc++-v3/testsuite/20_util/to_chars/2.cc
! 58331add5b8cc70928dd8afcbc39be32  libstdc++-v3/testsuite/20_util/to_chars/3.cc
! 8142705676dc09fbf3fe1231d49bbfb8  libstdc++-v3/testsuite/20_util/to_chars/4.cc
! 3ec9c5b1afb32d4f0cc995fae90c983d  libstdc++-v3/testsuite/20_util/to_chars/95851.cc
! a7b9f2532325aa2dbcb244a2b8858e6d  libstdc++-v3/testsuite/20_util/to_chars/chars_format.cc
! 224c36f900afc5ec2ad272b606f5f8d6  libstdc++-v3/testsuite/20_util/to_chars/compare.cc
  5023f6c1a2d374e90adee1ec171efa98  libstdc++-v3/testsuite/20_util/to_chars/double.cc
  23ac211304a3685d878056005dca6369  libstdc++-v3/testsuite/20_util/to_chars/float.cc
! 5d2a72f0b0bb14657b7d750212e5d8b2  libstdc++-v3/testsuite/20_util/to_chars/long_double.cc
! b7f24939aa37c4de46e365ee2377af7f  libstdc++-v3/testsuite/20_util/to_chars/lwg3266.cc
! c750e67c3f3c2a58166a927c07e4c2bc  libstdc++-v3/testsuite/20_util/to_chars/requirements.cc
! 05340145a7552fa3d7b9ef3667d9d88d  libstdc++-v3/testsuite/20_util/to_underlying/1.cc
! 8a6cf6cc7757121b079b650a3b016df3  libstdc++-v3/testsuite/20_util/to_underlying/version.cc
! 470bb4edb0de57381e37197d42b381db  libstdc++-v3/testsuite/20_util/tuple/48476.cc
! 433b29458e4b064aaa198a552f245980  libstdc++-v3/testsuite/20_util/tuple/51365.cc
! ae0e83622abe25be7c0242dfb4fff752  libstdc++-v3/testsuite/20_util/tuple/53648.cc
! 2fb20d2ac2dc29086b406744e2f3cc2a  libstdc++-v3/testsuite/20_util/tuple/56785.cc
! 700319cbe244a2d05f160411bcc79fb3  libstdc++-v3/testsuite/20_util/tuple/60497.cc
! 3f8824514dbf05c77032315ed14e1a7c  libstdc++-v3/testsuite/20_util/tuple/61947.cc
! e77fef6e8b1c8905e7301249bb7ccaa3  libstdc++-v3/testsuite/20_util/tuple/67844.cc
! ed174af4d547bd9f5f06969c43b1da89  libstdc++-v3/testsuite/20_util/tuple/77395.cc
! 1ba7cab641e6b5f71182b1ec351ae20b  libstdc++-v3/testsuite/20_util/tuple/77802.cc
! 5d9bf4a1e7bb1f0503cefde94eccbf0c  libstdc++-v3/testsuite/20_util/tuple/78939.cc
! 6b237cc033525a7d5f237d43c8bc8c32  libstdc++-v3/testsuite/20_util/tuple/apply/1.cc
! 46270ffa7fc71b2a7b0e2f2b77037365  libstdc++-v3/testsuite/20_util/tuple/apply/2.cc
! 2d00b67b184de7df9b3da08243fdd1b6  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480_neg.cc
! 50f5ef6c83ccab9c9b4a4eb19206f880  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/93147.cc
! b83ca0ac40ea70f2dca7e0fe2efae3d2  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/comparisons.cc
! 521142005a79761e332c80f3eb3fe143  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/constexpr.cc
! cbbdfb59b20fecf9c36e7976a7e7b591  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/overloaded.cc
! 43fd64b5ffaf960180292a2677ec2229  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/overloaded2.cc
! b63b11f3e0b7691716b7b97386098c37  libstdc++-v3/testsuite/20_util/tuple/comparison_operators/three_way.cc
  d23b1a747046dfeaadefce18d2c02b12  libstdc++-v3/testsuite/20_util/tuple/cons/101960.cc
  32c154912a091023741fdaa263538a86  libstdc++-v3/testsuite/20_util/tuple/cons/102270.cc
! d61a2574bb2f78ba189fb3d3d976b60f  libstdc++-v3/testsuite/20_util/tuple/cons/41530.cc
! f73a0d86bc346a26b596c982337a6ee4  libstdc++-v3/testsuite/20_util/tuple/cons/44487.cc
! 9a6caf96eceee35edd4509647bec7df7  libstdc++-v3/testsuite/20_util/tuple/cons/45228.cc
! 59c8f6d9ac2d9e7b653400a69b9f58b3  libstdc++-v3/testsuite/20_util/tuple/cons/48476.cc
! 04d5b016a951e64132e76e4a53fa0f53  libstdc++-v3/testsuite/20_util/tuple/cons/66338.cc
! 28aff53694501d8943a554469c0b332b  libstdc++-v3/testsuite/20_util/tuple/cons/90700.cc
! 4ff7f49ba2ee6d5f3dd695308cec0999  libstdc++-v3/testsuite/20_util/tuple/cons/96592.cc
! 261c55e5dc576d8ad689484da0a9d863  libstdc++-v3/testsuite/20_util/tuple/cons/96803.cc
! 14fe883a146f3fd0abbf504599bbd22c  libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc
! e6068e02f821093821d4daf922dd4ff6  libstdc++-v3/testsuite/20_util/tuple/cons/allocators.cc
! e544ad28b09aeb12792f38cd8c5eee52  libstdc++-v3/testsuite/20_util/tuple/cons/assignment.cc
! b3402961306a57281a98418d723ef711  libstdc++-v3/testsuite/20_util/tuple/cons/big_tuples.cc
! f913085369c5eeefb8ae3648ed8221a4  libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-2.cc
! 91c8726d89cadcee70b46ee392763094  libstdc++-v3/testsuite/20_util/tuple/cons/constexpr-3.cc
! fe962ff68bf371fcbb4d4f563bfc97fd  libstdc++-v3/testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc
! 19952d50a4aaf44626ca88697ab7d1d3  libstdc++-v3/testsuite/20_util/tuple/cons/constructor.cc
! eac2d4ef130b7db0eab037fe551fdb88  libstdc++-v3/testsuite/20_util/tuple/cons/converting.cc
! b1461e51a6e430651ac50d64fe40c6b8  libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc
! e38c1e9ef994a0f5c8d5acfc3e8d5208  libstdc++-v3/testsuite/20_util/tuple/cons/element_accepts_anything_byval.cc
! d7b2d467887c68acee74905c316e663c  libstdc++-v3/testsuite/20_util/tuple/cons/explicit_construct.cc
! 32aa03a9c1d3f1ded80ae5e5bdf0c5f5  libstdc++-v3/testsuite/20_util/tuple/cons/nested_tuple_construct.cc
! 6259b7eb006784010e9bd6ca88e2d535  libstdc++-v3/testsuite/20_util/tuple/cons/noexcept_move_construct.cc
! 54a66fe8959f2b96e6008d7e5c80966f  libstdc++-v3/testsuite/20_util/tuple/cons/noexcept_specs.cc
! 3823e2aa692a12fc88b600aab3a1411c  libstdc++-v3/testsuite/20_util/tuple/constexpr_swap.cc
! fb54fffd18d84328cf1560404e2ccc79  libstdc++-v3/testsuite/20_util/tuple/creation_functions/23978.cc
! 011e5b1558ac469a02d16aff21588e4b  libstdc++-v3/testsuite/20_util/tuple/creation_functions/48476.cc
! f02ca8e26606d6f4245a4dabfef306ee  libstdc++-v3/testsuite/20_util/tuple/creation_functions/55713.cc
! d69eb1003efac8161a03c5388b97fb57  libstdc++-v3/testsuite/20_util/tuple/creation_functions/constexpr.cc
! 6cf18437b6450e4358e7d2f39304a5e9  libstdc++-v3/testsuite/20_util/tuple/creation_functions/constexpr_cpp14.cc
! 49beda12b9229169771c953ae006198b  libstdc++-v3/testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc
! abb597a70c4148d699835c7f40995e76  libstdc++-v3/testsuite/20_util/tuple/creation_functions/make_tuple.cc
! 9712f49d4709f6a440fe2ce8c711dc07  libstdc++-v3/testsuite/20_util/tuple/creation_functions/tie.cc
! 42e4d2703a02f5e9d381ad1dcb7dfe67  libstdc++-v3/testsuite/20_util/tuple/creation_functions/tie2.cc
! e246d9cc15bcf0808f855860d7f005df  libstdc++-v3/testsuite/20_util/tuple/creation_functions/tuple_cat.cc
! 316e6f0e8bce43e2d4ed1fb0cbcdebaf  libstdc++-v3/testsuite/20_util/tuple/cv_tuple_element.cc
! 8a3cc761c59c3a86b92278068ebd6051  libstdc++-v3/testsuite/20_util/tuple/cv_tuple_size.cc
! 3610794909d9946e62b52f94944529a2  libstdc++-v3/testsuite/20_util/tuple/cv_tuple_size_neg.cc
! 3eb70caa37d96b8708ec8904b1a035f2  libstdc++-v3/testsuite/20_util/tuple/dr2729.cc
  5c4d5220d3eb9f735e8817b5ea562b55  libstdc++-v3/testsuite/20_util/tuple/element_access/101427.cc
! aa06387b458d4cc1dd54112ad6892b98  libstdc++-v3/testsuite/20_util/tuple/element_access/71096.cc
! cb66a80b71f2c78042468e798771a89a  libstdc++-v3/testsuite/20_util/tuple/element_access/constexpr_get.cc
! d78ce84b54aa4bd6e282e65f47a99741  libstdc++-v3/testsuite/20_util/tuple/element_access/constexpr_get_by_type.cc
! e4aad9834f08809112c2ba742ffc971e  libstdc++-v3/testsuite/20_util/tuple/element_access/get.cc
! 081e511d4129fb8b1e58ce2f0dd33dcb  libstdc++-v3/testsuite/20_util/tuple/element_access/get2.cc
! ebde24bf3b9f4ba3f05ae96413105c36  libstdc++-v3/testsuite/20_util/tuple/element_access/get2_by_type.cc
! d7ca445e92703459bbcb11b55acf5324  libstdc++-v3/testsuite/20_util/tuple/element_access/get_by_type.cc
! 335bd8d9f86eb1d35d370a966045686c  libstdc++-v3/testsuite/20_util/tuple/element_access/get_neg.cc
! 24158d5818cbb361e7bd8ce9d1d2e34c  libstdc++-v3/testsuite/20_util/tuple/make_from_tuple/1.cc
! b329a37e010bc6675740bf08f6ed332c  libstdc++-v3/testsuite/20_util/tuple/make_from_tuple/2.cc
! 8594ab7307ff0802bbb3f5b5f8c73b1b  libstdc++-v3/testsuite/20_util/tuple/moveable.cc
! cd983bb6220427fabb7de5a1eeeece1c  libstdc++-v3/testsuite/20_util/tuple/moveable2.cc
! 92cbe52b62db9d73d0b3130db91045aa  libstdc++-v3/testsuite/20_util/tuple/noexcept_move_assign.cc
! bc297c5da29f1bfe43915435b8651f1c  libstdc++-v3/testsuite/20_util/tuple/noexcept_swap.cc
! 80565b1ee0a27fa84bd404d712012f6a  libstdc++-v3/testsuite/20_util/tuple/requirements/dr2367.cc
! 443956df49e2060e568fb024dbd017b3  libstdc++-v3/testsuite/20_util/tuple/requirements/dr801.cc
! a054e6411cce1b09883b334052d9d073  libstdc++-v3/testsuite/20_util/tuple/requirements/explicit_instantiation.cc
! f63048a3c0d95229c0513a7dd3cde1c0  libstdc++-v3/testsuite/20_util/tuple/swap.cc
! e8b454e1d8b9b3f32998506b0ff9a8ea  libstdc++-v3/testsuite/20_util/tuple/swap_cxx17.cc
! b14c7d73e219263189c2926d38d532b8  libstdc++-v3/testsuite/20_util/tuple/tuple_element.cc
! 2cec4255d8c728daa7b53e140ff98578  libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc
! 4292080e35ce15a3291344cc421ba375  libstdc++-v3/testsuite/20_util/tuple/tuple_size.cc
! 958e6308082a42c0f790e17efba3155f  libstdc++-v3/testsuite/20_util/tuple/tuple_size_v.cc
! 2e8903d01c81e655d5388c7200491a9a  libstdc++-v3/testsuite/20_util/type_identity/requirements/alias_decl.cc
! 4548b17aeb30a659a51de691056512f4  libstdc++-v3/testsuite/20_util/type_identity/requirements/explicit_instantiation.cc
! d598b03175a1c40eb9fd20bc806aa765  libstdc++-v3/testsuite/20_util/type_identity/requirements/typedefs.cc
! ee48df09b9bf73835d8699dc68c865d7  libstdc++-v3/testsuite/20_util/typeindex/comparison_operators.cc
! 1fd0c557d72c7b2f4f0582c02591cb42  libstdc++-v3/testsuite/20_util/typeindex/comparison_operators_c++20.cc
! f039c8401d1c507fcd2d194bdac9bd23  libstdc++-v3/testsuite/20_util/typeindex/hash.cc
! 4da071a4344d6e0c2b9c11b333c4dc1a  libstdc++-v3/testsuite/20_util/typeindex/hash_code.cc
! 6b22bb0562426e795902efaa31f97538  libstdc++-v3/testsuite/20_util/typeindex/name.cc
! 028bb8243b4178ee02f35dfc9a30d6c0  libstdc++-v3/testsuite/20_util/underlying_type/requirements/alias_decl.cc
! 101b8b957f45b12722b505ac77a14aaa  libstdc++-v3/testsuite/20_util/underlying_type/requirements/explicit_instantiation.cc
! d9972e8bc8d5738448716c060deedcba  libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-1.cc
! 0827c4c84a626b47f655256f40297c9a  libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-2.cc
! 68e22403c5975585222254a6c39d7c58  libstdc++-v3/testsuite/20_util/underlying_type/requirements/typedefs-3.cc
! 270e7f9293f9dc29e06013f0194d2249  libstdc++-v3/testsuite/20_util/unique_ptr/101236.cc
! 6bc7dba37ecd36339c1e567ed62b6463  libstdc++-v3/testsuite/20_util/unique_ptr/54351.cc
! 4e787faeee2f609bedeae1763729c5c1  libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635.cc
! 7a4c0a86e73df7563a489363aa32bbcb  libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635_neg.cc
! 018b969247a1b09fc3578bb5e6e4a426  libstdc++-v3/testsuite/20_util/unique_ptr/assign/91308.cc
! 7f03cbcb5b1f45bf1c1aad0a4d2d8acf  libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc
! a766d0d5f6dc6dc464e72270fa1f0a04  libstdc++-v3/testsuite/20_util/unique_ptr/assign/constexpr.cc
! 0169cdcfce67720c223c59f41f4718e8  libstdc++-v3/testsuite/20_util/unique_ptr/assign/cv_qual.cc
! 252b24c05c48df8e6e004fc99eca8f07  libstdc++-v3/testsuite/20_util/unique_ptr/assign/move.cc
! d67369175da2a068d99e8c656a0b2ab2  libstdc++-v3/testsuite/20_util/unique_ptr/assign/move_array.cc
! 1a0a127ced54b6d06b993641ecf145e2  libstdc++-v3/testsuite/20_util/unique_ptr/assign/nullptr.cc
! 464ceb6af8688e2fac4b41f341ab9a55  libstdc++-v3/testsuite/20_util/unique_ptr/comparison/42925.cc
! 2af04f12a4a487cf1f6a50252b26e8bc  libstdc++-v3/testsuite/20_util/unique_ptr/comparison/compare.cc
! 8ba1845bea13ccf9b5fc4ccbb20e42de  libstdc++-v3/testsuite/20_util/unique_ptr/comparison/compare_c++20.cc
! 1b1aed9aa07f27577b5d897361aaef38  libstdc++-v3/testsuite/20_util/unique_ptr/comparison/constexpr.cc
! 5d2827b41f7ed03180a814973fba80e8  libstdc++-v3/testsuite/20_util/unique_ptr/comparison/dr1401.cc
! 6c100262767e0952ca38d432a350a56d  libstdc++-v3/testsuite/20_util/unique_ptr/cons/77990.cc
! ff2f38c84f1c7b714401d77b7e9a7338  libstdc++-v3/testsuite/20_util/unique_ptr/cons/array_convertible_neg.cc
! 39f7f911420cce0f55eb628f6b3de6d6  libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr.cc
! 1fc27654c466a15fbed1087aa7f85ee1  libstdc++-v3/testsuite/20_util/unique_ptr/cons/auto_ptr_neg.cc
! a81b5543d2edc514215ee89d8355a64c  libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr.cc
! 4a51fb5c91ad1f904f7ddd98e262afd8  libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc
! 78e8aa88acf1289d3aa0c836c9525bfe  libstdc++-v3/testsuite/20_util/unique_ptr/cons/convertible_neg.cc
! 3da35b766e62c11d7fd77de7b21e3ae5  libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual.cc
! 2afa460a3b6c67ea1e106f98867c9737  libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc
! 3b608b485d8bac2daf15d01a3d7047dd  libstdc++-v3/testsuite/20_util/unique_ptr/cons/deduction_neg.cc
! bd81031e8a80e98c13d5ff40c1c4f579  libstdc++-v3/testsuite/20_util/unique_ptr/cons/default.cc
! 826424a90d3b6b66a1717eb82f4a9995  libstdc++-v3/testsuite/20_util/unique_ptr/cons/incomplete.cc
! 2f9e6963ad5f99d6aa3c62baa92a2923  libstdc++-v3/testsuite/20_util/unique_ptr/cons/lwg2905.cc
! fe1c947c4dbe13a05bb97e1c94d8c42a  libstdc++-v3/testsuite/20_util/unique_ptr/cons/noexcept_move_construct.cc
! 757c288b883bdc41c79ad7851554ddfd  libstdc++-v3/testsuite/20_util/unique_ptr/cons/nullptr.cc
! 0f34fd4c60357b1f0fc97bdcd3bd8126  libstdc++-v3/testsuite/20_util/unique_ptr/cons/pointer.cc
! d9807d459cf6750402c8e90310cf7fed  libstdc++-v3/testsuite/20_util/unique_ptr/cons/pointer_array.cc
! a94c9ec97482f156169a1ed66d8a1620  libstdc++-v3/testsuite/20_util/unique_ptr/cons/pointer_array_convertible_neg.cc
! c0008301de9e135c5a0359614d2c9f6a  libstdc++-v3/testsuite/20_util/unique_ptr/cons/ptr_deleter.cc
! bbb7e8d91361816c5b935b7d6be7171f  libstdc++-v3/testsuite/20_util/unique_ptr/cons/ptr_deleter_neg.cc
! 278c3c79ece2f91dafcb61e18fd3f60f  libstdc++-v3/testsuite/20_util/unique_ptr/creation/92878_92947.cc
! c1cd4a3f6b5b59a88032dbf805303d25  libstdc++-v3/testsuite/20_util/unique_ptr/creation/array.cc
! 826674ffd67673c076a869791f2541b6  libstdc++-v3/testsuite/20_util/unique_ptr/creation/array_neg.cc
! 2792ef777902e600585d3d371995f27e  libstdc++-v3/testsuite/20_util/unique_ptr/creation/constexpr.cc
! 118eaf245c4bfe5b8fe9ec33499a7905  libstdc++-v3/testsuite/20_util/unique_ptr/creation/for_overwrite.cc
! 1c0ba278f2dc6c12ee8e5ba060feac89  libstdc++-v3/testsuite/20_util/unique_ptr/creation/for_overwrite__neg.cc
! d8442bac5982eadab8ea3614c54314f1  libstdc++-v3/testsuite/20_util/unique_ptr/creation/single.cc
! 885f41e25fd52834ab5f4aaedab6120b  libstdc++-v3/testsuite/20_util/unique_ptr/dr2228.cc
! b5023caf2a5da686f113537d42e19c69  libstdc++-v3/testsuite/20_util/unique_ptr/dr2899.cc
! 4a51a2afe3fff601821577bb600fbb90  libstdc++-v3/testsuite/20_util/unique_ptr/hash/1.cc
! 34bef987ca7e4c2f69a9cd3ec7f69167  libstdc++-v3/testsuite/20_util/unique_ptr/hash/90388.cc
! da040bcd94e2c6125d9e7b041ee54b18  libstdc++-v3/testsuite/20_util/unique_ptr/io/lwg2948.cc
! bb40414adb587ca6cdd1ffd17960c9e2  libstdc++-v3/testsuite/20_util/unique_ptr/lwg2762.cc
! fa6a27ab7bba08baca6207599d27f2ca  libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/43183.cc
! 617b7ddcde0f36471cb4e84b4324042d  libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/48398.cc
! 4dfd93299f9dfeaa11103cb4626a0f8f  libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc
! 1d95a3f0a6c651e10e0eb4266405addb  libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/constexpr.cc
! b5e85ce0c4eff30a4ee2d92e633aacc7  libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/cv_qual.cc
! c8dc85a918bde635a25685212aff73da  libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc
! 4772838d28da45fc107bf413e4b9f03d  libstdc++-v3/testsuite/20_util/unique_ptr/requirements/explicit_instantiation/explicit_instantiation.cc
! 648991d8d63af3bffd430a4fc1976cd1  libstdc++-v3/testsuite/20_util/unique_ptr/requirements/incomplete.cc
! e1414f2d12874f7ffc1c2869d63e8906  libstdc++-v3/testsuite/20_util/unique_ptr/requirements/pointer_type.cc
! 2fb681090c9e77e65cc56de98f3634bd  libstdc++-v3/testsuite/20_util/unique_ptr/requirements/pointer_type_array.cc
! 7a413d6d252d61d90fcc9593aba77188  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/comparisons.cc
! 4f10d307c459e6245f73d7a674968358  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/comparisons_array.cc
! b06d4bee43487cb46ceadf7135cb4db5  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/constexpr.cc
! 3aab85161c9aab2000fef947948cee02  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/swap.cc
! d4ee3d30ecf13f15512459f02094111c  libstdc++-v3/testsuite/20_util/unique_ptr/specialized_algorithms/swap_cxx17.cc
! 79ae7324ed01aba2f0a26aa803be147c  libstdc++-v3/testsuite/20_util/unreachable/1.cc
! 39e33d60fe45843188bb85ba28c7f355  libstdc++-v3/testsuite/20_util/unreachable/version.cc
! 187ca6fe7c7bc034fe9081d96150a7ec  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/allocate-max-chunks.cc
! 623875c968424602a5fb63d93cfeaddf  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/allocate.cc
! dfc431dde26376b1eb60039108b42198  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/cons.cc
! e6f04400b3dcb9267e0453dceade4443  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/is_equal.cc
! 5d28597d775c6525efc2d69a580866c9  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/options.cc
! b70e59f18a9d804442c7be8db192a582  libstdc++-v3/testsuite/20_util/unsynchronized_pool_resource/release.cc
! f16cf73bd1b7068fe9da70a67229399b  libstdc++-v3/testsuite/20_util/unwrap_reference/1.cc
! f817ae5488841d0bc1b6905fdcc3e3b7  libstdc++-v3/testsuite/20_util/unwrap_reference/2.cc
! 0a8b0b79a3b40f18cc2732ff0b283a61  libstdc++-v3/testsuite/20_util/unwrap_reference/3.cc
! 83fb98fc13878319afd7ecb4d708feb5  libstdc++-v3/testsuite/20_util/uses_allocator/69114.cc
! 9e22ffdf845bf79d45e01d1dc22fcd22  libstdc++-v3/testsuite/20_util/uses_allocator/69293_neg.cc
! b8b591b77ad686a588f294580f37722e  libstdc++-v3/testsuite/20_util/uses_allocator/92878_92947.cc
! fa36025aa6492e4a8dc51e3cd991170a  libstdc++-v3/testsuite/20_util/uses_allocator/cons_neg.cc
! 6774df652f9a7d59acb37890ae0069e3  libstdc++-v3/testsuite/20_util/uses_allocator/construction.cc
! 9ba22b64c06352261b4f4002bc4887e0  libstdc++-v3/testsuite/20_util/uses_allocator/make_obj.cc
! 00835a64d50ffbc9e1dd35e2581c3c1c  libstdc++-v3/testsuite/20_util/uses_allocator/requirements/explicit_instantiation.cc
! e7662366f5175c46e9442d12e7fa01b8  libstdc++-v3/testsuite/20_util/uses_allocator/requirements/typedefs.cc
! 6a7531ce1e2343cefa6c3d7a6794d8e8  libstdc++-v3/testsuite/20_util/uses_allocator/requirements/uses_allocator_v.cc
  841aff3ec9a5aa97b1e1e2e16d64dfb0  libstdc++-v3/testsuite/20_util/uses_allocator/uninitialized_construct.cc
! 8fa97f122a73373cf13f5a4e5f6ff32c  libstdc++-v3/testsuite/20_util/uses_allocator/value.cc
! 08b4d4bb66cb636f628a57f6fea1190e  libstdc++-v3/testsuite/20_util/variable_templates_for_traits.cc
  b9698b5e78dcefad507d6737875a6a1d  libstdc++-v3/testsuite/20_util/variant/100384.cc
+ 5ef3d7df10dd90d995e4c63bc62c39de  libstdc++-v3/testsuite/20_util/variant/102912.cc
  909e769606f79e2311fe65f425279584  libstdc++-v3/testsuite/20_util/variant/80165.cc
! b4f3f88d2333d5af30d68926c53f10fe  libstdc++-v3/testsuite/20_util/variant/85183.cc
! e8feff0797737119dfbf7d9172fdcd9e  libstdc++-v3/testsuite/20_util/variant/86874.cc
! 8d2430e8413dad0e593dafae334e9347  libstdc++-v3/testsuite/20_util/variant/87431.cc
! 0afcef90ac2011c17d4deec8be6fde5f  libstdc++-v3/testsuite/20_util/variant/87619.cc
! 375ba2c7d8b7cee53d83e9017cb12b88  libstdc++-v3/testsuite/20_util/variant/91807.cc
! 6e73de8c6e6f102c365e047b32405327  libstdc++-v3/testsuite/20_util/variant/92878_92947.cc
! f107341f5e4815050cb12ad177e014ce  libstdc++-v3/testsuite/20_util/variant/95915.cc
! 4476c93202425082f03e7478ef88099d  libstdc++-v3/testsuite/20_util/variant/any.cc
! d7776c3f15568804fa01b0080c382a37  libstdc++-v3/testsuite/20_util/variant/compile.cc
! 16902993e27490cf98e6e66c866b8de0  libstdc++-v3/testsuite/20_util/variant/constexpr.cc
! 10ab4f8f3fc093c7021a82bc5e3c46f3  libstdc++-v3/testsuite/20_util/variant/deduction.cc
! e136e17b927db6c3bda039c9aa164e1e  libstdc++-v3/testsuite/20_util/variant/exception_safety.cc
! 5624bdd9943b2ad0ae4d76c685809b63  libstdc++-v3/testsuite/20_util/variant/hash.cc
! 493865b6fc9ab944a00c6932c26ed6e5  libstdc++-v3/testsuite/20_util/variant/index_type.cc
! 4bbabcf0f2f9e5feb35bdd6e6b9c0d4e  libstdc++-v3/testsuite/20_util/variant/relops/89851.cc
! eaab82e4419226a60819aef32a14e661  libstdc++-v3/testsuite/20_util/variant/relops/90008.cc
! 05ff11aeaee8e9f4f47cf440827bbea2  libstdc++-v3/testsuite/20_util/variant/relops/three_way.cc
! a79b06c62712cbf135ba52345a1d3d7c  libstdc++-v3/testsuite/20_util/variant/run.cc
! b53ced7be024099d627a420130ddfae8  libstdc++-v3/testsuite/20_util/variant/version.cc
! a1b41e120f647f01b82b58b3a06161bb  libstdc++-v3/testsuite/20_util/variant/visit.cc
  271b1d4fa7c258bc0cfd32dff3784bd9  libstdc++-v3/testsuite/20_util/variant/visit_inherited.cc
! 29070ac324311538acd34bb4f5632260  libstdc++-v3/testsuite/20_util/variant/visit_neg.cc
! 94f929674b9aa5c0e7b7f96585b4b2e1  libstdc++-v3/testsuite/20_util/variant/visit_r.cc
! 8d9b6ac60824c56b6d0ed09346c3833d  libstdc++-v3/testsuite/20_util/void_t/1.cc
! 7b0d83ebbf92b543b6da8bb8354c8d7f  libstdc++-v3/testsuite/20_util/weak_ptr/atomic_weak_ptr.cc
! b2b0c6b9f86b1efcb39de1f46c135626  libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
! 062912af6cc2812770b9f3df078e2f9d  libstdc++-v3/testsuite/20_util/weak_ptr/cons/constexpr.cc
! a5b18b777dd65ca7630d04aa157ff6b4  libstdc++-v3/testsuite/20_util/weak_ptr/cons/deduction.cc
! 9b3fa66b4a5dc6f5f4f197cd9b003692  libstdc++-v3/testsuite/20_util/weak_ptr/cons/noexcept_move_construct.cc
! d6cb1337e6bbd1947766ec249aac7c21  libstdc++-v3/testsuite/20_util/weak_ptr/lock/1.cc
! 7d2e31f83947b9d059327be6985803ac  libstdc++-v3/testsuite/20_util/weak_ptr/observers/owner_before.cc
! 4ae446b5eec864c6117df0020c33be5f  libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc
! b7e19f90b8f12244a1a69e4a464ed93e  libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/2.cc
! 1853adc2a4cbfc16a08921ed39eaf00e  libstdc++-v3/testsuite/21_strings/basic_string/40160.cc
! 69bf974154f0966b52cb5f54aa8f45fc  libstdc++-v3/testsuite/21_strings/basic_string/56166.cc
! f60a4e9a0c842a326ed685b20dc20d06  libstdc++-v3/testsuite/21_strings/basic_string/79162.cc
! 9e066b35185191ac526612a564b6490e  libstdc++-v3/testsuite/21_strings/basic_string/allocator/71964.cc
! 144f0c8d5b2378811a85bf9b8a201878  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy.cc
! d22c0140436e7ce7f30ea817d5f56cef  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy_assign.cc
! 190c0fbfca7e8f946e06aff1388d9cba  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/lwg2788.cc
! f7587b47c43e466ccbe81f9b51a19b56  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/minimal.cc
! 0e868d69482da712aea5bad24a5e11dd  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/move.cc
! cf4f7a524ae1ce0df238fabf3703ee3b  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/move_assign.cc
! a07664a63002511db6a14429e0b40599  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/noexcept.cc
! 30671f125bcdb09bcafe31145a4c34fb  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/operator_plus.cc
! 17db85ad6ab04713edf7479ce1438bc8  libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/swap.cc
! 13afd8d5e7389d7307beb6c066e365da  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc
! 995087fcd2a2d47cf76fe34c142156a0  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc
! 03dca6d50c6589ff2251f142d6afd9c4  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/lwg2788.cc
! f718ca412a91d25d587881264af205e3  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc
! e02580471158751fca6a695ad1b697a9  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/move.cc
! 0ff7a5440d3efbc1251a9ad7e9007256  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc
! 5c9df4344cce95de3ecf0ebbba676150  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc
! 6ed9d253981202296319941405618584  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/operator_plus.cc
! 0188b0e7f1e3b6eb13720bca14b562f9  libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc
! f7d0f9129e0b14e1c3df4a90394eaa38  libstdc++-v3/testsuite/21_strings/basic_string/capacity/1.cc
! 47a30bf063796d65f2bb5f1e0d3bc7ac  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc
! e4b279a4f3b9abde058d6cb00a5c89ba  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/18654.cc
! f9a91331593aabe548c2fc0e48acb792  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/2.cc
! f3ba4193abdc2fa4d0bd35a950966823  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/resize_and_overwrite.cc
! 21a08162c432ecd45acdcf71514da2a5  libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc
! 6f776af274307bd76d3595e2bdead30e  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc
! 710c93966d68c68a3e2b4606a1cd55ed  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/18654.cc
! 5511ce6451d8fc11cd2177e28e767cdf  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/2.cc
! 33fbb68611c0d2796a632eb756426ff8  libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc
! bc8bf776e5ee41c9814d26072b74f552  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/1.cc
  408950d5673e5a28433457ba820da161  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/103919.cc
! 7cbb90b06fb23bfb46f181effd3fb1d1  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/2.cc
! c3f6121645f290dc77eaea7e494552e3  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/3.cc
! b55f5202d25f64999f504ec867819f59  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/4.cc
! 08ea83445747fc86833f1cf6cab44bb8  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/42261.cc
! 5f8c656638015bcbfa0db738e2f4cf5b  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/5.cc
! a37726f50548abd99a1a88cbfeb01368  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/6.cc
! 40712c1c92a5b6d8f0534814b60f6290  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/64657.cc
! e4e7eaba277df260cd63a10a5ccbd505  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/65085.cc
! 9dc47c4268c505108daeee75577db436  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/69092.cc
! ee8374f6ed4dff5562ce825d595134e8  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/7.cc
! 5e8c13b99c8e4f81d78e7bec3e7d7978  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/79162.cc
! d3765ecd368e4d4a7150782aca33c98b  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/8.cc
! 9923a4f6bff7ce03babefc5481d70c25  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/86138.cc
! fe701bf7e6db6090eb7a8d42c80cb7ad  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/9.cc
! 199b6e66970aa8aeb06608fc2f1749bb  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/constexpr.cc
! d8a8ae988f8dd15fd5cefbcc3ed939cb  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc
! 7edb18d383923cad26f0180d295cf52e  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable.cc
! cfe046ef0b14b2a250992f636129a827  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc
! cae96777ebcd9a16b4366e9b75766ae2  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2_c++17.cc
! 37acb0c9e0cbe022d140ff213f30ebf5  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/noexcept_move_construct.cc
! ca9ae628b034a9ec99cd3e60951cfecc  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/nullptr.cc
! 521f89e6188716a6c476b8b53f486dcf  libstdc++-v3/testsuite/21_strings/basic_string/cons/char/self_move.cc
! 48091b7b4822411279079316eb39f5e8  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/1.cc
! 08db2ffd68da7771e1b8eca01b74e844  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/2.cc
! 70a19b3d0aca713fae3eb4bda3f4cf4a  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/3.cc
! 0e61409fc897d7eec9fb27e10ad480bb  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/4.cc
! 056bdad291de458c53c8c5825168c1d9  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/42261.cc
! 00ea99a667f36d599258b381c19dd8f7  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/5.cc
! ca8ef9354f805bc5ef2f22c03ae07839  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/6.cc
! 8396fe750fc430e9b40ed0e456a31dd8  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/7.cc
! 5e8c13b99c8e4f81d78e7bec3e7d7978  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/79162.cc
! 6e782f62f20ff1205d5a50bd26ea2d07  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/8.cc
! 2e611fd9e0a0fbaba62214065506ef08  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/86138.cc
! ccbcffc367ad1001ee745757ea3e7f58  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/9.cc
! 09bcd6e3dcb9e2010d343ede95760d66  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/constexpr.cc
! bab1fb1147866a9580a5c497d4ecb129  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc
! f34383d9f137c7f91086e8ca7b33b53f  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable.cc
! 8824c21b868f81c6ab0b8e60cf3a4e8d  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc
! 3568e15bc4fc7cc3919a756b746adc9a  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2_c++17.cc
! e5d11a84955cbbd2a41d252e94728cbb  libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/noexcept_move_construct.cc
! fe8df34e7e956966d4ab05215898b7fa  libstdc++-v3/testsuite/21_strings/basic_string/debug/1_neg.cc
! 7d7db963d208ac9dbf82c8d4a060c8b7  libstdc++-v3/testsuite/21_strings/basic_string/debug/2_neg.cc
! 2efcfae48d0c739b1110d978a52c6825  libstdc++-v3/testsuite/21_strings/basic_string/dr2268.cc
! 48ec9c825af99e060847c5dad5484f93  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/1.cc
! 96342f06da20e07fa8c3a9f73a07e977  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/2.cc
! ec8af0546d04583db5b75c277b869622  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/21674.cc
! af5daa2183799aa244ad36c2f908d013  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/3.cc
! 9364367ae3f9951b1bb9b1d6404c4bf4  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/4.cc
! 27ec88443ee29db96d2fc3d06a7467a0  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/58163.cc
! 1dfa704fcc30764c6cf102cd1e2d5140  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/empty.cc
! d13f007709dc7920a88bb522336ca93e  libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/front_back.cc
! 7737d9357c44892ea004873e29c2a33c  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/1.cc
! 9b4b0ef2467240eaacfe9d4e48d1719a  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/2.cc
! 3e86106b4a24386a6ac33f7b93199d06  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/21674.cc
! 708358ca090eadb380cc8830663b2e1c  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/3.cc
! 739a344c53e36ba180d7776aa941e8be  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/4.cc
! 47e38805802a5604279026532ef8bd0c  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/58163.cc
! 9dea7f9ca1cb7e7a7860d9f287809709  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/empty.cc
! 9eb288fcaa8efe8e0315e8747420edfe  libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/front_back.cc
! 31a3ef960061ea1e91824c44f67a5234  libstdc++-v3/testsuite/21_strings/basic_string/erasure.cc
! 4deab1ecac0627f68a6c0ba1b87ffb0b  libstdc++-v3/testsuite/21_strings/basic_string/hash/debug.cc
! 7678de463e421250b97195a8b36e7612  libstdc++-v3/testsuite/21_strings/basic_string/hash/hash.cc
! 888022820b59a245fa242f989468256b  libstdc++-v3/testsuite/21_strings/basic_string/hash/hash_char8_t.cc
! 652c80cc7747728245ab2bf57bc4b785  libstdc++-v3/testsuite/21_strings/basic_string/init-list.cc
! 257fd28eeadc295699c3963cbfe8816d  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/1.cc
! 8570b487ec9eed0bfdb3b94b24d66732  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/10.cc
! d0a79f83ddc13b6663b8b1ca6ddb12d6  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/11.cc
! 42379973127e95ddea9ebe309164f35e  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/12.cc
! 3b0c2483649d4f12e723de5508a73b12  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/13.cc
! 18b9c31d5409afac4513835e31089b42  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/28277.cc
! 1f5e4c6d586e2556838b31082958cd1f  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/4.cc
! ab0301091aa34e122345ffdd88b5587c  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/5.cc
! 3a6e8f531fe8925439bc86bb8927a2a1  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/6.cc
! 8ae370e4dae12f54b9d6bd3a007f8f81  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/7.cc
! 0176efc9a47663fe9617d06b3fd35391  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/8.cc
! c485ddd2a1a5c416f5169e750a204589  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/9.cc
! a6f1f8c2a6e79c741b288b5b3e444840  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-in.cc
! 2327c19657753c58e10eba9f9cd97d5d  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-out.cc
! 18927d02a4431a9c3395c099b5a79cef  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/1.cc
! d1e23be6050b3eb9a5366f7480fc8762  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/10.cc
! 5d709916a8c151b9535caf9477ecfd13  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/11.cc
! e94075b098a1b8052ecab633ae36cd48  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/12.cc
! 5451d5d8b986b4c7ec823a616822aa9f  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/13.cc
! 5b5e377395d9070ce692f452c9b49682  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/28277.cc
! d9b7049d0bc281d4d6b997bcfb0cbd6c  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/4.cc
! 811a9ca93201a7db98c79d660f12e838  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/5.cc
! 690aaf3be0ff8193236a5d76daa9d8fe  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/6.cc
! 88bc9ff474bfbdbd0119c0f760cfe28f  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/7.cc
! 1d940d48a9d114ba40b01614d02a86ce  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/8.cc
! 15e349127cfe6c92904da29aafe8872b  libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/9.cc
! 29bc247b1aec33f010caa020c32d9c38  libstdc++-v3/testsuite/21_strings/basic_string/literals/constexpr.cc
! 440491af6df958599b0438cfd2262b3f  libstdc++-v3/testsuite/21_strings/basic_string/literals/types-char8_t.cc
! 818415665064f593c3b1ab257d5fb5d3  libstdc++-v3/testsuite/21_strings/basic_string/literals/types.cc
! 6e6e0b2897a9bb9dfdea0ffb1216899a  libstdc++-v3/testsuite/21_strings/basic_string/literals/values-char8_t.cc
! d1a6a0b3a6fdee2aa9509f877d5bf031  libstdc++-v3/testsuite/21_strings/basic_string/literals/values.cc
! 15e186e3bbb322d635a1c649a2ffc012  libstdc++-v3/testsuite/21_strings/basic_string/lwg2758.cc
! 79f6040a05e12b7c011b9a67e7b66fa7  libstdc++-v3/testsuite/21_strings/basic_string/lwg2946.cc
! ceac8fa55f42c38d927b80db87cdf018  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/64422.cc
! df8f64945b2195621d764881a7389053  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/1.cc
! 29deea3c7e88998abe5911ec5b68ed65  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/2.cc
! 197a8514f068b7b027e0284afe30a749  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/3.cc
! 168e80ca47b4986c0bd509003faf7c72  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/char/4.cc
! d7b639f98887f00296ff87e5fed31ba5  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/1.cc
! c58cbaf6f5033eef2e45aff2005f3c83  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/2.cc
! 515c32e545c0b3e6fcfb65cfdf829bff  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/3.cc
! 3d9a3bf0e81c8f0f6787c485c12459e1  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/append/wchar_t/4.cc
! ec93b90cc192af029c2c2aa9e5d013e2  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/1.cc
! efd612f944f5d8fa79683e5cb05e2f29  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/2.cc
! 721d97b0f157fedfcd221494341e68c4  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/3.cc
! 655baae64b87b6b61008669159d590af  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/4.cc
! 788efaae41e1882343d442828b84c33a  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/64657.cc
! ffd31ead883604d578c676dd52ab7d1c  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/87749.cc
! c2678d6e84c962fe7a53f818b92a2f44  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/move_assign.cc
! 197214ed7a2b7d134466dd89d56ab689  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/char/move_assign_optim.cc
! 2ef009b65ae256665f3efd1cee7bcbab  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/1.cc
! 44786e377044232201b3666ef0ed4e98  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/2.cc
! fb3d1413cb1ecbf1e5fc271b91ceaf00  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/3.cc
! 1ae370ef8943fffef4a82aceb5234a80  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/4.cc
! 450446de8a41ecac0ec61fd2599f96f8  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/87749.cc
! ea9dbc97c326f3e2b99d4041d3ded4e7  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign.cc
! e1421466000f40f3ad850ffe0dc218ec  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign_optim.cc
! ab5b8c708d26d53aaa55a1f2cabf99f7  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/constexpr.cc
! 9f5a3388207ebd75d04a0165d783e697  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/1.cc
! 8a8bf083277102fbb42ea6e931358cc1  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/2.cc
! 4e8f83a176ae80baa522dfd5bac67360  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/3.cc
! b228545ece908981c9ee2eaab981840c  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/char/83328.cc
! 2d5d1d68a49aa998fada002fad732da3  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/wchar_t/1.cc
! aa88106eaa31a4b62d8f93c2d91c538c  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/wchar_t/2.cc
! cce4cc5a6a439b40a2b0665fb09a973e  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/wchar_t/3.cc
! f68f70f8d6a345a5da0812e170824deb  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/insert/wchar_t/83328.cc
! 3ed1c5b36a88299edef5724de02ed161  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/pop_back/char/1.cc
! 124103f2d3f3554c4b9f9dd9cb9ea783  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/pop_back/wchar_t/1.cc
! 85f63f92c5b0de8b63db9f469b1632e5  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/1.cc
! 965616e15bfe4c1fdf8b1369ec8aef11  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/2.cc
! 527f1d0787919bc638ba9768d257c764  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/3.cc
! 184d9ea427df8ac2c7505755ae11ae9e  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/4.cc
! 94e7428b977f064121b544c1cb162cec  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/5.cc
! 163c810e23015c0bd2161f53c5edc388  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/6.cc
! 5b81180b3c4a8bd6e04e8e56259fc2dd  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/char/7.cc
! 298fc4a44910bd07742447f1654bed0a  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/1.cc
! 18d48c8befa9f02412d075e12e993d62  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/2.cc
! 108f27edab92972ef94b956421405d7f  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/3.cc
! 97895e8f21ab7db82e76ac48b793bb43  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/4.cc
! 87eb648260b89b7f8481b97a141a13b8  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/5.cc
! acdbbfbc23c50bde42d62e9047973e36  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/6.cc
! 8c03ba13f21aa989a64300bf1d1c87c2  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/replace/wchar_t/7.cc
! b6f0bc9dc3c3a1742183008805d55c76  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/swap/char/constexpr.cc
! 99d550ee8bc0db1851ce8b0c5391ea1e  libstdc++-v3/testsuite/21_strings/basic_string/modifiers/swap/wchar_t/constexpr.cc
! 2ba5e152137db3d56048f0b0d1bbae56  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc
! 2699185f38ede5070566dc2404139ee3  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/errno.cc
! 14e5c7978143e3398eb1338a05eb90c4  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stod.cc
! e3aced2bbf202d6c8e121279cd7a6005  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stof.cc
! cb0e4f4a92f6ffe89e501c58e39486f0  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc
! 6ad0336e457cfc99e2132f24e67423ea  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc
! bd37cc774d901f5aa4f552f4914d7b7b  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stold.cc
! da1fe661f16d4691b9afa761b56d6056  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc
! 71298b41c3c7aab6738bc70d06057a60  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc
! 2c273ce5a2f3f423ff17315760034c3b  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoull.cc
! 2c1cd09114dc9d2f752e5ec365243e64  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string.cc
! 3e91a39035b77b8684f936b086c3bcda  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string_int.cc
! a82c502e83331535417090ee3ff2c0eb  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/dr1261.cc
! 96682c3cebdac07a3ac0979262952753  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stod.cc
! adde10c79adcf1c86ebdd380ad21a456  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stof.cc
! 4b691e8451df8d3d5827eb3c49354ff0  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc
! 9bb138c761bf008bdfab43973e094898  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc
! fffcadb54cbf278db02d51ae9aa31b4e  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stold.cc
! df8be2644772937400026314302d7922  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc
! f6f3d94bcd9c6bd9ca7ec921539f0f5a  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc
! 551c1bb19a94b6ed80a0c433b21e2809  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc
! c25a5c2fbfe6b8cb7af3b1e8bd71cd1a  libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/to_wstring.cc
! 0359112c4f4fd84f6f4d17fa9f4d8fbc  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/1.cc
! fda51f980a2a2be7b062244360e316d4  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/13650.cc
! 44ec2afd9242e4396b77ee367dd5996a  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/2.cc
! d8ef5a311108ec7546ce37e40357afaa  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/1.cc
! 35d30f57622efd1f4e37da516881dc0b  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/13650.cc
! 58e3a6654a370f369ef326ea87e2d069  libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/2.cc
! 3ef1d98d026bbad63eebd9a4c834bf9f  libstdc++-v3/testsuite/21_strings/basic_string/operations/contains/char/1.cc
! 4037ffffa4864b64545a27dc8f1cf9b6  libstdc++-v3/testsuite/21_strings/basic_string/operations/contains/wchar_t/1.cc
  da3f700a53d22cd029a604673e059e11  libstdc++-v3/testsuite/21_strings/basic_string/operations/data/char/1.cc
  9ccbc06738d22d9f941b8f2b369c7915  libstdc++-v3/testsuite/21_strings/basic_string/operations/data/char/2.cc
  fabf5d00ed38687c6c74b03d67132fac  libstdc++-v3/testsuite/21_strings/basic_string/operations/data/char/86169.cc
  ca74682c72cb547cf309e380caad822d  libstdc++-v3/testsuite/21_strings/basic_string/operations/data/wchar_t/1.cc
  ebeb1bb794a93823182dc633b65b1594  libstdc++-v3/testsuite/21_strings/basic_string/operations/data/wchar_t/2.cc
! a54e339e340369ad1d09ca0228ce9b2e  libstdc++-v3/testsuite/21_strings/basic_string/operations/ends_with/char/1.cc
! 0163c21435bda1295a8b12edafa6f84e  libstdc++-v3/testsuite/21_strings/basic_string/operations/ends_with/wchar_t/1.cc
! 5c96a72f4498b236d96862b9036b44cf  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/1.cc
! 2f29aaa3f859e223e8146892c952fb63  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/2.cc
! 79b10aede950115fc9e2a9a84c72621e  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/3.cc
! b30398dd69d12fed6e8cc67a1b479651  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/4.cc
! ecb0354451bbb45b783a1d51625ce0de  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/5.cc
! c037b18f1dbb40dd926580060e494be7  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/6.cc
! 9274f916ca29cf27ccf5ab4da78bbe99  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/1.cc
! f428710447d9e9990d6828f774cb9b40  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/2.cc
! 64e800f452ac6d9cad2939d04b35433b  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/3.cc
! 0517a2ce1d8656b9c5fa02997b40561d  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/4.cc
! 94a2aca719103cebd758e2147e28076e  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/5.cc
! cba7c61eef9d30a6f1e447bf52df570f  libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/6.cc
! 97116681fb38a6f0a1a98adad8ecbc53  libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/1.cc
! 5f7548827ddce09b999bfb77f44b3ffc  libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/2.cc
! 3ff3679fabe9252b47b8a9a0d26428f2  libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/3.cc
! 5b2f9168206daa34505b141a7fbfd411  libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/wchar_t/1.cc
! 73ed9667363a49a2c1f8444899ff4ca3  libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/wchar_t/2.cc
! 895d6225183244ba267190dfed9c360d  libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/wchar_t/3.cc
! 0e7a8462d6f9f62da1dc647b8efa1532  libstdc++-v3/testsuite/21_strings/basic_string/operations/starts_with/char/1.cc
! ff81f1c744506e0bd414e6ae0b02d93e  libstdc++-v3/testsuite/21_strings/basic_string/operations/starts_with/wchar_t/1.cc
! cae5a283faf11838b8f853af07ee45fe  libstdc++-v3/testsuite/21_strings/basic_string/operations/substr/char/1.cc
! a7324bc2626c675bfdd12f2728dba6db  libstdc++-v3/testsuite/21_strings/basic_string/operations/substr/wchar_t/1.cc
! 32ff9b5c160a4d161932ffceedd2ea4f  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/1.cc
! 8939ad37542016d826054a5448ae681d  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/2.cc
! e26367425e460155dd06ad710bb01a48  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/3.cc
! fa039fe93bd5eccdf744381a010921ab  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/4.cc
! a6457c97b314a04d6b4bbf026acb73c5  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/5.cc
! 3313eff773debdab08ac090187cb6d55  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/65630.cc
! a8ca973c7eb07d7caeb7bf4adfc3cf0e  libstdc++-v3/testsuite/21_strings/basic_string/operators/char/cmp_c++20.cc
! 3e95f5f5d8cc2e5f1c2a21908d915afd  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/1.cc
! 08c445d3aac87030039a0b892ed10c4d  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/2.cc
! 148b7e58c71baea70c91bd6c5dbb82b8  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/3.cc
! 34073c0684bc8bbd11df67f81b47c06d  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/4.cc
! 42b51ec1c71ae9332435141ed6150e61  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/5.cc
! 6223ce4f6248b4e18fab4394984478a7  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/65630.cc
! 0fa640bb9cfa8f863ec030621d458c28  libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/cmp_c++20.cc
! 47ecddce081db7735cbe7355a00a707b  libstdc++-v3/testsuite/21_strings/basic_string/pthread18185.cc
! 31815062a7e578e2e1e58ddc91ec9bc2  libstdc++-v3/testsuite/21_strings/basic_string/pthread33394.cc
! 4184598d7ae173c45e7b3d24f81c77da  libstdc++-v3/testsuite/21_strings/basic_string/pthread4.cc
! 437c8bb19d15275ae12032e36490c469  libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc
! 2176a23234a3e630a03b436fa12fdaae  libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc
! 8df949bdf9e6838e84f38f22ee079d33  libstdc++-v3/testsuite/21_strings/basic_string/requirements/citerators.cc
! 242d46da5d22699131166292ef6ec3e5  libstdc++-v3/testsuite/21_strings/basic_string/requirements/dr438/constructor.cc
! 2b30eb52663f6613f2daab834b0e62ac  libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/basic.cc
! 149b6e902b093e426707dc3def7e0b5b  libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/generation_prohibited.cc
! b9639eceaebc9bf59f2dc965b72dc70e  libstdc++-v3/testsuite/21_strings/basic_string/requirements/exception/propagation_consistent.cc
! bb1aca407f28d0993775103ffbf7d8a5  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/1.cc
! 0653078acd27a89f055bd66481825b27  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char/1.cc
! 501badc7f9022d4c9f9ee9354f152eae  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char16_t/1.cc
! c9128e106c70899ba2e7a7c9df11cab6  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char32_t/1.cc
! 0c6aed5877c9e47a18e7a1c9e52da8c3  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/char8_t/1.cc
! 494aba950f130a1f3dcaf434fbacf926  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/debug.cc
! b96b3fc8e1b19c7c580b46d4fe07c3a4  libstdc++-v3/testsuite/21_strings/basic_string/requirements/explicit_instantiation/wchar_t/1.cc
! f034eca3ab9c13630d58814a21812a92  libstdc++-v3/testsuite/21_strings/basic_string/requirements/typedefs.cc
! 5130831e9e9477478ce842311f00e362  libstdc++-v3/testsuite/21_strings/basic_string/types/1.cc
! 9c434bb6875f4d87dc8d689b79d59712  libstdc++-v3/testsuite/21_strings/basic_string/types/23767.cc
! 170f992b703a68763bb2f006e16cb444  libstdc++-v3/testsuite/21_strings/basic_string/types/pmr_typedefs.cc
! 6f3523453ba64bcabcd98a4202a8d007  libstdc++-v3/testsuite/21_strings/basic_string/version.cc
! 9b15e2b31c1e1ba1f7fd03d39c018b54  libstdc++-v3/testsuite/21_strings/basic_string_view/capacity/1.cc
! e828c8674c0b07c502cde16c19c50db4  libstdc++-v3/testsuite/21_strings/basic_string_view/capacity/empty_neg.cc
! b11d0df57f224d847aa3d0cb18f8f4bb  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/char/1.cc
! 56ac7b0da9aa71ae7cb950b3bb4d7095  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/char/2.cc
! 3be6aa269cbd95b653b6ea8205b19c8d  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/char/3.cc
! 8a5aedc5a351256b6af8b9d145c6def8  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/char/nonnull.cc
! 0b6a2443178aa75da3ceb62696d49e66  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/char/range.cc
! 4ec9edf14cd7574bacd7d731dc336b5a  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/char/range_c++20.cc
! eb0cd7f4dc47b332e4b989164dbf3596  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/wchar_t/1.cc
! 19abc9659deed856b266404089b4a97f  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/wchar_t/2.cc
! 40bb94b540026ddf7f8657de7554ab2d  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/wchar_t/3.cc
! e26edf9d921a7ba6d7d719a5e60bd472  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/wchar_t/nonnull.cc
! 969d53cfeecdcd5e8830a950cb2ded4d  libstdc++-v3/testsuite/21_strings/basic_string_view/cons/wchar_t/range_c++20.cc
! 33a72c1b879b7f225bab2d6798ba53df  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/1.cc
! 82d6917465a3bdbb78d67ae494174910  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/2.cc
! f51217ab4eda42699b30463d9c64760f  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/back_constexpr_neg.cc
! b517e81b8090c5572f5b8dd1a95d9ab5  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/constexpr.cc
! 317524c6a4a2898b6dbce03e4fef9c91  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/constexpr_neg.cc
! 9a54200fd4208822f512da55b7edb9c3  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/empty.cc
! e0dd1418620154b48b2e1bbed292186d  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/front_back.cc
! f127cc9f0a496fd404233e1ce688ebf7  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/front_back_constexpr.cc
! 29385b5d159503396f56cab63ecc528d  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/char/front_constexpr_neg.cc
! 0a5b3fca71349b4ec5d4abf930366874  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/1.cc
! 50c1a8d4dd434adab29c8647c29779e4  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/2.cc
! 909b88f10e95e1e80f1f18ae29d1d7be  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/back_constexpr_neg.cc
! 088c6fa94474d219bf23b9b5c0745cef  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/constexpr.cc
! 5231d74ab051cc151021737e52358d27  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/constexpr_neg.cc
! 79d89b8f209d699cbb8e81ec408f72c0  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/empty.cc
! ef565e4ac8c1439340119c77f194ba70  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/front_back.cc
! b1974d7d29ec1f1f547839b1560a523e  libstdc++-v3/testsuite/21_strings/basic_string_view/element_access/wchar_t/front_constexpr_neg.cc
! 3816f75e5778de7bd67bc28f84eac803  libstdc++-v3/testsuite/21_strings/basic_string_view/include.cc
! b297f009b4cf7be2796f9e4e390b8186  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/94051.cc
! f45cf4cc3b763769aa5d9fb134db8ba4  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/char/1.cc
! 3170f7d21ee0aff7aa8dcfb67545b651  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/char/2.cc
! 66f50382b90e9b1792d53274b802a53d  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/char/3.cc
! e897e7c292a13ba34b11356824f812d1  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/pod/10081-out.cc
! 2b5c84ce6f19614762b0e00c102b664e  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/wchar_t/1.cc
! 8a9b9b1b865dfa1b8c59100a06a67850  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/wchar_t/2.cc
! de6a49060931c8fa2263121e5ea048aa  libstdc++-v3/testsuite/21_strings/basic_string_view/inserters/wchar_t/3.cc
! eb8cc4151dbb7c20fa8049925aa4c35c  libstdc++-v3/testsuite/21_strings/basic_string_view/literals/types-char8_t.cc
! cc2f020563c3847b68e798d098126ab4  libstdc++-v3/testsuite/21_strings/basic_string_view/literals/types.cc
! c49dc63272bc485aa7a87cfc078d3242  libstdc++-v3/testsuite/21_strings/basic_string_view/literals/values-char8_t.cc
! 7e6023e76cf2d41e8d67c2521c34f0b1  libstdc++-v3/testsuite/21_strings/basic_string_view/literals/values.cc
! ce32a948987ee0257f6c1c20759ae9ba  libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/char/1.cc
! 64971260c3c99f4bf03ef94b5547589b  libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc
! e83ee45f270b4b9df21249b1f4d6d528  libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/char/1.cc
! 6b382b94f0a3a85d2b7a04ebb5c95d80  libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc
! 29069c42f8ea2f8510d54827fb9ea605  libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc
! c212a698edf0c7104ba92da18834aece  libstdc++-v3/testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc
! 7b5d61eb13b32cb5ad6886786f1ecd7b  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/1.cc
! 3de12cf3ce843746022b71cbeb7b84eb  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/13650.cc
! 0d8c4eeaba71e98d7b38b0f525845d3d  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/2.cc
! f6f4fafe472ae846013760a73beccf13  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc
! 05e3d836f29a74307d2fc7e53ae94aab  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/char/nonnull.cc
! 7d2222ddf58a01ddfe30133bd1bf1878  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/1.cc
! 7d0ea0220922dd654f56906bb1b3e55b  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/13650.cc
! e3ccb8d06404b0889aea92cdc6ddb89a  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc
! dbca2e557dd4a2159221e1e56ea665b1  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/char/1.cc
! 30643050aafc25d86907d926f84424fe  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/char/2.cc
! 495bc351071e2a6ccabe5436fd74a6d2  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/contains/wchar_t/1.cc
! d3e0108353457d8918577d830f4dd803  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/1.cc
! 129485da60e5f466cfa2a7d45872c670  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/2.cc
! 857a6e3a8d037686d78b7c10d2382ca3  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc
! e9761e551064b1c12503db442864d619  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/wchar_t/1.cc
! cf13e61193a59f8f171e40395b496a84  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/wchar_t/2.cc
! 8849343a2f59180abaff8e0b1a764813  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/wchar_t/constexpr.cc
  49684812d0e6e538d983a81cc02ea19b  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/data/char/1.cc
  3aca8654c80e2a1ffcc111b84f41adec  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/data/wchar_t/1.cc
! e7fb613952549d5d2c1fa46b70cb0750  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/ends_with/char/1.cc
! 1f54fa5ce2ce97ac32379540789ab1c0  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/ends_with/wchar_t/1.cc
! 5bfeb4d47b713e40434e1d011dddf696  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/1.cc
! d8b589f412d99162c5a23fc9009352f1  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/2.cc
! b0b945b2e49fbd837e43141457f8528b  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/3.cc
! 0acf05c8df4abf359237c460babba2f0  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/4.cc
! 2cd44b28f266baddfe96323df48e9b61  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/char/nonnull.cc
! 7c1c57544bbf28253150def354d9e9b4  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/1.cc
! 28a8eaba5797e15a1643b5088f1a36c9  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/2.cc
! 1c8427310124c8f52b67ad6a3979ab75  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/3.cc
! 00c200887482bdf57602b76f81751def  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/find/wchar_t/4.cc
! af62296c05403a3cd9e6eec634834ec4  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/char/1.cc
! b5cffa7e647feddaa29af405aa61f632  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/char/2.cc
! 534c9b067caed180aecdb852c15bc29a  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/char/3.cc
! cf2271c72872f5c468d708e08b0161c6  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/char/nonnull.cc
! ab61ebbcee455a63dd6ec2c0736614dc  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/wchar_t/1.cc
! 16ae39b4b27870918e13f4e6ef11396e  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/wchar_t/2.cc
! 8decfb9b02bd633330d6331819bf77a7  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/rfind/wchar_t/3.cc
! 2c8a6e49c656a44ee95e754e5f037c91  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/starts_with/char/1.cc
! ae44b4fc126f804b9d4cd5806bd4cbc4  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/starts_with/wchar_t/1.cc
! e2430948464141d96e14ad2c6691a360  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/string_conversion/1.cc
! e849cbd4574e32b8c229d4a5d5659f18  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/substr/char/1.cc
! 456f60559e52b6096108678ade4617f0  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/substr/char/83511.cc
! 236fb4260be73e1542d3b6bfa4f5ddf3  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/substr/wchar_t/1.cc
! 6a0e82eeb22e26930b8c8a76f089e84b  libstdc++-v3/testsuite/21_strings/basic_string_view/operations/substr/wchar_t/83511.cc
! 42472cb1b8e9e26b3269bd168b3e6e96  libstdc++-v3/testsuite/21_strings/basic_string_view/operators/char/2.cc
! 8113071695893466c9b1ceb54c8dd0ba  libstdc++-v3/testsuite/21_strings/basic_string_view/operators/char/89446.cc
! 333d574b7c44681a162416268b67c42b  libstdc++-v3/testsuite/21_strings/basic_string_view/operators/char/cmp_c++20.cc
! 6f30a3b02c0959156fae18d5fee78dc6  libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/2.cc
! 632ba42f0e4b46ffbe281f8bb8757c62  libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/89446.cc
! cbe8dd34cb38d056b20592fe96d50940  libstdc++-v3/testsuite/21_strings/basic_string_view/operators/wchar_t/cmp_c++20.cc
! 87b091d917d49fa6803a86332978503b  libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc
! 59613cfff730ecff9fbe648806724a52  libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc
! 5488c0e01e7a8f718c28c80e78fc8bc9  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/constexpr_iter.cc
! 472109e766809cf9917850d6a3215919  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/explicit_instantiation/1.cc
! 9f15745891255540ddaa15d6166b9c46  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/explicit_instantiation/char/1.cc
! 0456267d6b8864d4a72e8f239cb5299c  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/explicit_instantiation/char16_t/1.cc
! 0c976497a58b07bf5c4b38892b163dec  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/explicit_instantiation/char32_t/1.cc
! 59f6a4af8028bc2c6c8092042f482af3  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/explicit_instantiation/char8_t/1.cc
! 9330ff7fb30c5dcd7f34ad6c9af9720d  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/explicit_instantiation/wchar_t/1.cc
! 315e59bf71624bfddd1704955e8f5026  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/traits_neg.cc
  58947d8735c23b82574427ce2851e965  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/trivially_copyable.cc
! aa743a3bf573499c0785c35cd42e85fb  libstdc++-v3/testsuite/21_strings/basic_string_view/requirements/typedefs.cc
! 847f86350f5eac76fe17cd432a64f4a5  libstdc++-v3/testsuite/21_strings/basic_string_view/typedefs.cc
! 2d9e8d751d3e458bf070d211d6afef49  libstdc++-v3/testsuite/21_strings/basic_string_view/types/1.cc
! b5684c275c956cee9f797a9f3ad5626a  libstdc++-v3/testsuite/21_strings/c_strings/char/1.cc
! f9218ebcfbd2487131e1696c75a12702  libstdc++-v3/testsuite/21_strings/c_strings/char/2.cc
! 8067ff693da58ea31b058b369ade3b79  libstdc++-v3/testsuite/21_strings/c_strings/char/3_neg.cc
! b585a1bbf03dd84e79127526e05b6b7a  libstdc++-v3/testsuite/21_strings/c_strings/char/69626.cc
! 247d397b669dbfeac318a02fab07a57e  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/1.cc
! f93ec43aa4dd8a420a7ece2440e0666b  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc
! 22bfc5ed265e4143ba00dd09c45ce88e  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/24559.cc
! 2ec63f6752702d324bcea6556ae1bfe5  libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/3_neg.cc
! 2b5c3fe3f4e29007d663c0c64a31ec6b  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/1.cc
! 6ba9605ad5b8901d814b619f3e486a3c  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/57704.cc
! 6ca3d966dbea1443e11d0455e8b8a6bd  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/65049.cc
! d9a168e90676d0cf9626ee87f9a83e00  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/99181.cc
! c95d8c8f73d096e8657eeaaf04eb9c43  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/typedefs.cc
! c0a0569fc3317b91b7c10a997192eeca  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char16_t/65049.cc
! d6291a760efeb181f4f018219363c895  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char16_t/eof.cc
! f7038044d6a5d36dab2f976e0a4102b0  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char16_t/typedefs.cc
! f0ba13df2f1066eef5307b68cb343f00  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char32_t/65049.cc
! 5db911ad0a6f3ca2cf7adabf363f391a  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char32_t/typedefs.cc
! 4084d5fb14ba0623e26679ae2e48d1e0  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char8_t/65049.cc
! dd8639279f9d4318034a734e8c0574ea  libstdc++-v3/testsuite/21_strings/char_traits/requirements/char8_t/typedefs.cc
! 4213c3edd1aeeef53c98db1425196f76  libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions.cc
! 278c18947d9dd6b63507eca2b33d2e27  libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc
! b78e512bdd889931d125be01d93dfe44  libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++20.cc
! 5cac6494aa866450642cb1dc96351ea0  libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char/1.cc
! 114cb82e16446ce03c6f3043c618f762  libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char16_t/1.cc
! 24e2a23e1d1129cb8b843c8bbfbe0db9  libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char32_t/1.cc
! ebaba349c41358bb17d61c75cd449410  libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/char8_t/1.cc
! c9253140e8550fd9921cc4ebd90925e0  libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/short/1.cc
! f51015e2d81d0c89d1f531b8210f5efb  libstdc++-v3/testsuite/21_strings/char_traits/requirements/explicit_instantiation/wchar_t/1.cc
! 7d86a29a874dbf68020f4247207b352e  libstdc++-v3/testsuite/21_strings/char_traits/requirements/short/1.cc
  5eb7812f69f414ef3a35a89be9d4dc1f  libstdc++-v3/testsuite/21_strings/char_traits/requirements/version.cc
! 0c6573642fd3e80d05adf2ae8916cb7d  libstdc++-v3/testsuite/21_strings/char_traits/requirements/wchar_t/1.cc
! cb534eeeeda4b08843416f81c4acd36c  libstdc++-v3/testsuite/21_strings/char_traits/requirements/wchar_t/65049.cc
! da9596c9e98fb88bdb3ba69e6a5c59e7  libstdc++-v3/testsuite/21_strings/char_traits/requirements/wchar_t/typedefs.cc
! 112defed60f1bbbca79e45090188e99d  libstdc++-v3/testsuite/21_strings/debug/shrink_to_fit.cc
! c2a11f02580776a6d9dee8d49892b719  libstdc++-v3/testsuite/21_strings/headers/cctype/functions_std.cc
! d23c60a2def8443a46a1f7d76ed9ca40  libstdc++-v3/testsuite/21_strings/headers/cstdlib/functions_std.cc
! 522a0b73ef1f58635f5ed975743f1913  libstdc++-v3/testsuite/21_strings/headers/cstdlib/macros.cc
! e1fabffa25a764659d7ee8a6a7419f68  libstdc++-v3/testsuite/21_strings/headers/cstring/functions_std.cc
! 522a0b73ef1f58635f5ed975743f1913  libstdc++-v3/testsuite/21_strings/headers/cstring/macros.cc
! 69b9227089a73c5292f236ffe75764b0  libstdc++-v3/testsuite/21_strings/headers/cstring/types_std.cc
! 1c6d34d6c23ccae8874ab2004b5561cd  libstdc++-v3/testsuite/21_strings/headers/cuchar/functions_std_cxx20.cc
! bf5af2094c9ef74f8a08d7d077043065  libstdc++-v3/testsuite/21_strings/headers/cuchar/functions_std_fchar8_t.cc
! 0b5dc2e5f44cf92225c2253f0a390b03  libstdc++-v3/testsuite/21_strings/headers/cwchar/functions_std.cc
! e3e3e47f2371c0345b295cf43164f392  libstdc++-v3/testsuite/21_strings/headers/cwchar/macros.cc
! dee88ef34c4a38e8151f828a44e859b9  libstdc++-v3/testsuite/21_strings/headers/cwchar/types_std.cc
! 0b68791b35c4994d6d0367aa85963293  libstdc++-v3/testsuite/21_strings/headers/cwctype/functions_std.cc
! d7d85aa9c02b9847e0abcf763327b206  libstdc++-v3/testsuite/21_strings/headers/cwctype/macros.cc
! 221f9f1b91bb17b2134076a18cd11397  libstdc++-v3/testsuite/21_strings/headers/cwctype/types_std.cc
! ee27fe4db9a08e2dd5674bb647c54361  libstdc++-v3/testsuite/21_strings/headers/string/synopsis.cc
! a9b3a7c45fd18a38bc7a5801f3c9ee87  libstdc++-v3/testsuite/21_strings/headers/string/types_std.cc
! ea8b0f17dbe83d0cea3b8873c0e54f49  libstdc++-v3/testsuite/21_strings/headers/string/types_std_c++0x.cc
! 6a761f12ec0c1a6b3d4df14401fc952e  libstdc++-v3/testsuite/22_locale/classification/isblank.cc
! b9401d45e8f0e60a0631fbfea8bd56b2  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_locale.cc
! 476ab925d0730e56c1bc3b83e51dc7a4  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/1.cc
! 7f6382d8024e826ccbc9834173b014cd  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc
! 6e8e231531ac5cc0e2143a01b10f537d  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc
! 3ab3220fd22df074097100ddea5a4ad6  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_locale.cc
! a8e6b7213cb563f803aabba9861cd5c1  libstdc++-v3/testsuite/22_locale/codecvt/char16_t-char8_t.cc
! d852212d2ead3d526429dcef2df15959  libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc
! 2178238c43cb9063edb4480912809fdb  libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc
! 03932ee68bfe475d06d1cf860be50b52  libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc
! 176b52905d389a9d85a771637808db33  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/66417.cc
! 18d58fc402135cc84f5023d5b9344936  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/79980.cc
! e604ead22a0915a67aca53d9e6c88142  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/80041.cc
! 7267469d4d80c1fd5bf98e0d9b5ff286  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/members.cc
! ae24aca6aeb744d1e4ce432f902e9819  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/misaligned.cc
! a3ad58f9bb677cd4a3bd9441a3bb47ba  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf16/requirements/1.cc
! e30b886584effa51289d0713da5df7bc  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/69703.cc
! fd60f055ec6550449ee1baa3334e1560  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/79980.cc
! 5fe72a028d04d236dde761b6227c7c1b  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/members.cc
! f0c5f67a904ed9bbcc959f54c306316a  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/requirements/1.cc
! 1b1a4328cda9fa902108a0136eb14b19  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8/wchar_t/1.cc
! d7157a6a5b0c08c300b76152de8e73ed  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/66855.cc
! bda6624cd62d7e0367293094350e86d6  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/79511.cc
! ffca930465fa2d25e2d19aef4fe7fa14  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/members.cc
! de984936a9f0ddacf30dc1a18ecd4959  libstdc++-v3/testsuite/22_locale/codecvt/codecvt_utf8_utf16/requirements/1.cc
! ed8959b016f091cfd79836ac45f74fdf  libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_locale.cc
! d10394434a33f070cf6e3bf3c3c7961b  libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/1.cc
! 674bf98ff92ba96abd4d7bcff0885c52  libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/2.cc
! 81894fbec3cd4fc18649518f4c25a260  libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/3.cc
! 828ecee7ea2430e608f1c1b12cce2ca3  libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/4.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_locale.cc
! 5550131f5877b5d657a0cb744df35cf6  libstdc++-v3/testsuite/22_locale/codecvt/in/char/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_locale.cc
! 4d46bdb87825e0d2e53e190f310089f9  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/1.cc
! 441e33a0dbd96e96bc1a9f30f3a4add3  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc
! 76d62d95264e5dce1920466e912e753d  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc
! 7d1593ae618c21eed2aee9e0e3e65612  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/4.cc
! 5773a63c88eeb9330cfe3057409ae8e6  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/5.cc
! 5af67aa2ba35914f540179b6143e9ebe  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/6.cc
! 5bbd7d598c99156e9eaa2bfad1d56a1e  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/7.cc
! 207ea7001e9d675b96c3f5049b4b9e1f  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/8.cc
! 0bbb007c1e2bdfadc6d5abc66a76f677  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/9.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_locale.cc
! be890a46331f0aed104126af6918d78e  libstdc++-v3/testsuite/22_locale/codecvt/length/char/1.cc
! e247c32008d5c8df449404dd51c35bc9  libstdc++-v3/testsuite/22_locale/codecvt/length/char/2.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_locale.cc
! 78ae7a251f87ad398d4b298e94c14e9c  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/1.cc
! 6f347ec5b175f6a846233c6c1c6cf818  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/2.cc
! 06ff829affd5dfc8b6e58bb128fbdcbe  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/3.cc
! 80ff02c46a5e00e68197c2bcecda8f1a  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/4.cc
! 74f87378b85c496c05a5a10cdcf98451  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/5.cc
! 5b7969fa61a13bef8ace1e79a5c30cb0  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/6.cc
! 0c887d294ce57bd8953ff1201d023e73  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/7.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_locale.cc
! 1a28942f6f712c12bcc992cfaf3b495e  libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_locale.cc
! 6babdebad70be6e1a4feb7c896a76906  libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/1.cc
! ad2d98deb348608d070dcc5a26ec7169  libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc
! 49468d8cbf7ba2c563556f1172136326  libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc
! 8fe294b517cbe1be26a24baec932ab73  libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/4.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_locale.cc
! e1fab64483201a88ed8ef3fc2353e5bc  libstdc++-v3/testsuite/22_locale/codecvt/out/char/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_locale.cc
! 520e6663815f6d95391c18dd5269562b  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/1.cc
! 535ae2a0a19a1afa98afbc2192455385  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/2.cc
! 04025bfb59c13df60ee809822a8c2bef  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/3.cc
! 7ba36d346746180ec58e4b8a9039a9da  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/4.cc
! 8b18d82af89c85f58df5bae65daaa829  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/5.cc
! 4859622fa39a944541a40c8402030b69  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/6.cc
! 504dde61cc8aff02060267d96a3a5421  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/7.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_locale.cc
! 9baea5c162ff63c345b252efc3a98e3e  libstdc++-v3/testsuite/22_locale/codecvt/requirements/base_classes.cc
! f5ceb4a6d3f8b75ebb58efe28c556d41  libstdc++-v3/testsuite/22_locale/codecvt/requirements/explicit_instantiation.cc
! 22a33f05cc758f6dfd59d280a2a6dfdc  libstdc++-v3/testsuite/22_locale/codecvt/requirements/typedefs.cc
! 3facffc940484923159e61a62930d2b1  libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_locale.cc
! b430822362fe6b634a6e00c81c469b6f  libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/1.cc
! d540d5a6a7f1b77e6f2366354e1f3bed  libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/2.cc
! f4adac336be3c7ed6d141eff0e9dcb58  libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/3.cc
! 5710258169683d13da6bf27e70c9fb2f  libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/4.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_locale.cc
! 1d9c8f44736fa579a2a551d7cda70427  libstdc++-v3/testsuite/22_locale/codecvt/utf8-char8_t.cc
! 7225769842e907099146c3233919e623  libstdc++-v3/testsuite/22_locale/codecvt/utf8.cc
! e46cf2527d67aa73ae6420a8cb6b7040  libstdc++-v3/testsuite/22_locale/codecvt_byname/1.cc
! 675d68282c7bca3c48d0d6d45bd1ee30  libstdc++-v3/testsuite/22_locale/codecvt_byname/50714.cc
! f275911c457f25117eb3e5b28d87dfa9  libstdc++-v3/testsuite/22_locale/codecvt_byname/requirements/base_classes.cc
! f223f962bb169b1ddcc3d9228761c1a8  libstdc++-v3/testsuite/22_locale/codecvt_byname/requirements/explicit_instantiation.cc
! 02963b0376286dc331313421fdcc4c35  libstdc++-v3/testsuite/22_locale/codecvt_byname/requirements/typedefs.cc
! 600911b573b9296e4d0826f70bf7e8e8  libstdc++-v3/testsuite/22_locale/collate/compare/char/1.cc
! b81034fed22d9d7bc150b67280947a52  libstdc++-v3/testsuite/22_locale/collate/compare/char/2.cc
! 48d3fee81ebae936fe41880e32229bf6  libstdc++-v3/testsuite/22_locale/collate/compare/char/3.cc
! d6573f896eff528a03b9046854a31e27  libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_env.cc
! 69a5be4b4ea00dbfea3482426eef24fb  libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_locale.cc
! 0e09d20e51720a18d00f3f9350d84ea4  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/1.cc
! dff4316bcba62c51344eb84d4599c529  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/2.cc
! 8c15d1bb1f1e4d472e46dd4040e46a4b  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/3.cc
! eb10add37cfa03256e8e9cf789b0c7c3  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_env.cc
! 496350be4ffeb33f40f89fff11c29350  libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_locale.cc
! 1dd19947012c9853207c9ca9478c0665  libstdc++-v3/testsuite/22_locale/collate/hash/char/1.cc
! f8f35f81db4a86208dc813f7109598e9  libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc
! 5a562c4921ab5f6a2892cfc0e1332453  libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_env.cc
! e24530e7f50ff1fcdf8b2b112d000137  libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_locale.cc
! b011c7ce566f36de6b442346416a4006  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/1.cc
! 4dfc346ae41eb6cfa49fe1a8bf00ff3b  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/2.cc
! eb10add37cfa03256e8e9cf789b0c7c3  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_env.cc
! 496350be4ffeb33f40f89fff11c29350  libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_locale.cc
! 5236def18f6f60548ad1da0a05868c06  libstdc++-v3/testsuite/22_locale/collate/requirements/base_classes.cc
! 86f5838df082ef0c6ec0877f44a2e935  libstdc++-v3/testsuite/22_locale/collate/requirements/explicit_instantiation.cc
! c437e6002dc66dfaf94966652d65acd1  libstdc++-v3/testsuite/22_locale/collate/requirements/typedefs.cc
! 5cc99f15663a791bf85b881beb67f12c  libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc
! 4750f44dd3dbb5c5d3ea0fc8c828ff30  libstdc++-v3/testsuite/22_locale/collate/transform/char/28277.cc
! 96e5d86112008d5028c1a440f4ad59e4  libstdc++-v3/testsuite/22_locale/collate/transform/char/3.cc
! 9814d411417d330e699963e1a531380e  libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_env.cc
! dee3690efb9083a6ef6d9cca4c9b9ced  libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_locale.cc
! 162aa0f31ed3bee5105afdde39117eb4  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/2.cc
! 488763add112227f27f79bca002bcf6a  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/28277.cc
! 870de7fc158721e1b109b9f3c65bb5ce  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/3.cc
! 35ea5745a9cf34866d1777b2d99f7ce3  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_env.cc
! decbc9218858d5eb9ad47c6f8a01e85c  libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_locale.cc
! cc0bfff0d45f9c5615e95f28fe0a0ef6  libstdc++-v3/testsuite/22_locale/collate_byname/1.cc
! 760eee3b8ce7948122913dfcd0ba7a3e  libstdc++-v3/testsuite/22_locale/collate_byname/88681.cc
! 052d4702f8fbb10c3e198655f230fd78  libstdc++-v3/testsuite/22_locale/collate_byname/named_equivalence.cc
! 819cda3e955d38a16cdd840f6dffc8bc  libstdc++-v3/testsuite/22_locale/collate_byname/requirements/base_classes.cc
! 85b0921dbaca55d0b7c39459a4643bee  libstdc++-v3/testsuite/22_locale/collate_byname/requirements/explicit_instantiation.cc
! f8e3fd5138a59dccbdcd6405a17d931b  libstdc++-v3/testsuite/22_locale/collate_byname/requirements/typedefs.cc
! 6930668bb273391d486c2296c7134b15  libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc
! 20c1ac439a88ce817c39dfcbdc0997a5  libstdc++-v3/testsuite/22_locale/conversions/buffer/2.cc
! 6b320f87313d3d4be744e3151238838d  libstdc++-v3/testsuite/22_locale/conversions/buffer/3.cc
! ad1e62feb33ebe3395ab3601aed08f4e  libstdc++-v3/testsuite/22_locale/conversions/buffer/requirements/typedefs.cc
! 2c2fe15109c163ebcd15c6d1ce8dc979  libstdc++-v3/testsuite/22_locale/conversions/string/1.cc
! 402575cf0697a901d8cf050147ab973e  libstdc++-v3/testsuite/22_locale/conversions/string/2.cc
! 3c8ec4188f84f6692bc34e09d929f3e4  libstdc++-v3/testsuite/22_locale/conversions/string/3.cc
! dc4662bc838b884c7d70865019c62298  libstdc++-v3/testsuite/22_locale/conversions/string/66441.cc
! 788bf04059ce661a1a4d3737e7727cb8  libstdc++-v3/testsuite/22_locale/conversions/string/requirements/typedefs-2.cc
! 4197002af0233917d6af629f44d03f71  libstdc++-v3/testsuite/22_locale/conversions/string/requirements/typedefs.cc
! efa0a12f7d93d6727a348883b0e6ceff  libstdc++-v3/testsuite/22_locale/ctype/2.cc
! a5f09a5fc9ce3f2ce45b9d15239803ef  libstdc++-v3/testsuite/22_locale/ctype/cons/char/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_locale.cc
! e1b531467bc85a411cea54868cce7442  libstdc++-v3/testsuite/22_locale/ctype/dr695.cc
! 6fbf0caffd38c5db3756c27c23773a97  libstdc++-v3/testsuite/22_locale/ctype/is/char/1.cc
! 9e44d15860a9dd74a5256daacce82593  libstdc++-v3/testsuite/22_locale/ctype/is/char/2.cc
! 8afc440be5c71d6015d780643e33c1c3  libstdc++-v3/testsuite/22_locale/ctype/is/char/3.cc
! 54e3381e681b980897f715f814dba2e1  libstdc++-v3/testsuite/22_locale/ctype/is/char/9858.cc
! a416c5a2ce6092deb8c849884b8d8cf3  libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_env.cc
! efbf9ace4fa3808506dfafbd0655ff2e  libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_locale.cc
! 31402df4d378d3910b2c20c6512ed9b5  libstdc++-v3/testsuite/22_locale/ctype/is/string/89728_neg.cc
! 30d7f3900500e3c6ac73128df613ec42  libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/1.cc
! ff9831ce7ac029725f8e8e759bf161e1  libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/11740.cc
! 102e32dd0265deae5bb51faeac325924  libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/2.cc
! eb7eac42b56515d52af21c285f6ddffa  libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_env.cc
! 6f084c185b912326f8fa50512f328e8b  libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_locale.cc
! 23fb645e2cf9b13e75c06575936c5c03  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/1.cc
! b992bf053579c6bd6930dcf2c0a77812  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/19955.cc
! 09035469e50c380a43249377886994be  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/2.cc
! eb7eac42b56515d52af21c285f6ddffa  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_env.cc
! 56ac25f8233ba0db6c2d8df5f0a3a491  libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc
! c669a11853c03937420903e5fc039e86  libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/1.cc
! 9dfa1776ab843c48464d990a5ac7fc8f  libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/2.cc
! 9a0209ef31aa38c0daad3cde2908c149  libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc
! eb7eac42b56515d52af21c285f6ddffa  libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_env.cc
! 56ac25f8233ba0db6c2d8df5f0a3a491  libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc
! a3e9baac27bed282659582a477761498  libstdc++-v3/testsuite/22_locale/ctype/requirements/base_classes.cc
! a3bb5626eff4fac09f379614b61309a8  libstdc++-v3/testsuite/22_locale/ctype/requirements/explicit_instantiation.cc
! 0857124b04b5135ec5c699d24de15ae4  libstdc++-v3/testsuite/22_locale/ctype/requirements/typedefs.cc
! 6b3dd0dc3c957fa09fa1b55e5d1cfc12  libstdc++-v3/testsuite/22_locale/ctype/scan/char/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_locale.cc
! 35d6e31eaa631dfaa7d015cc0e3ba92c  libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_locale.cc
! 11bd96b72fb7da1d0e28f77a496280a0  libstdc++-v3/testsuite/22_locale/ctype/to/char/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_locale.cc
! 29af4fbc13e23d164eaaae43db49f0da  libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_locale.cc
! 769c4e091762261f7b837641b5163bea  libstdc++-v3/testsuite/22_locale/ctype/widen/char/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_locale.cc
! 17d470a624126c5d2840db6ddc073304  libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/1.cc
! 6990ac35acd4817d6e10a5a3ad62d6ec  libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/2.cc
! ca3a8c717fbfe0fe82a2ef3c68434a26  libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/3.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_locale.cc
! bbc42c74215cb1c6f801b7a80a11d476  libstdc++-v3/testsuite/22_locale/ctype_base/11844.cc
! e05b061ab7aef9a87a65e21f75aaf155  libstdc++-v3/testsuite/22_locale/ctype_base/53678.cc
! 3100764712f663671741b91ed557128c  libstdc++-v3/testsuite/22_locale/ctype_base/blank.cc
! 0fc8a3850b686836303e6b0fbb63988f  libstdc++-v3/testsuite/22_locale/ctype_base/mask.cc
! ef3cb35e69090816a0455de122c4832f  libstdc++-v3/testsuite/22_locale/ctype_byname/1.cc
! e54f9700fb85bd0df80c317d408a6641  libstdc++-v3/testsuite/22_locale/ctype_byname/2.cc
! 0a36ce4f8f12d531acd52402e1e894fc  libstdc++-v3/testsuite/22_locale/facet/1.cc
! 746be1526ce7938627513526ac0c8718  libstdc++-v3/testsuite/22_locale/facet/2.cc
! 699c5db87a0ebcce364b486dbaf3b0ca  libstdc++-v3/testsuite/22_locale/facet/25421.cc
! d23dfb74a5b1e866e219ee6d2db5b1a4  libstdc++-v3/testsuite/22_locale/global_templates/1.cc
! 23c011a952ee8284321220967475ab15  libstdc++-v3/testsuite/22_locale/global_templates/standard_facet_hierarchies.cc
! af90959c37f18694badfd53060c9940a  libstdc++-v3/testsuite/22_locale/global_templates/user_facet_hierarchies.cc
! 9afb1b28999aaeb52a42d7f898a475bb  libstdc++-v3/testsuite/22_locale/headers/clocale/functions_std.cc
! 5b71c5784244c5acca32a00896e31359  libstdc++-v3/testsuite/22_locale/headers/clocale/macros.cc
! 218110d4c28857c4b3fd67c61e5264da  libstdc++-v3/testsuite/22_locale/headers/clocale/types_std.cc
! e8d66671b61fe8bfb26ca81324b8b956  libstdc++-v3/testsuite/22_locale/headers/locale/synopsis.cc
! d481b716a5d4b3c4803cf753ba156f92  libstdc++-v3/testsuite/22_locale/headers/locale/types_std.cc
! c23eb97748831e2d0e7009956e5a102e  libstdc++-v3/testsuite/22_locale/locale/13630.cc
! 922fac814bcf2bcd9772ca014489f390  libstdc++-v3/testsuite/22_locale/locale/cons/1.cc
! b74fecb0de001e375303b675c5dfe67a  libstdc++-v3/testsuite/22_locale/locale/cons/12352.cc
! 78c2429db7a87d25a520dd8200d80523  libstdc++-v3/testsuite/22_locale/locale/cons/12438.cc
! 4627ec989526e9b3bf3f009f6ed1c460  libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-1.cc
! 3d67bc941105510a2870526bbad45eae  libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-2.cc
! 351fe4d728d0249c086bf2226f532238  libstdc++-v3/testsuite/22_locale/locale/cons/2.cc
! ab53d88dbeb5170e7e245f9d77636c9a  libstdc++-v3/testsuite/22_locale/locale/cons/29217.cc
! 214b4d62f0704228ad023b8e17b7bf64  libstdc++-v3/testsuite/22_locale/locale/cons/38365.cc
! 96bdd64f08fddbca7ac269a765f1b182  libstdc++-v3/testsuite/22_locale/locale/cons/38368.cc
! b3061b9df6c88bd2c155f2d0dd4df7c4  libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
! 9140857bfbbd043fb3e76f55fb204e0c  libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc
! 783536f75df3667ea2e0a0360c0c7034  libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
! 512968d04b713f4d3b69f3b44ccfc09b  libstdc++-v3/testsuite/22_locale/locale/cons/6.cc
! 1cab779c8a876b1599ef8ac552d50426  libstdc++-v3/testsuite/22_locale/locale/cons/7.cc
! 9f4ec108c54abbd9c93334ee81611bef  libstdc++-v3/testsuite/22_locale/locale/cons/7222-c.cc
! fb29da815d360e27e10c07aecf6e6b4d  libstdc++-v3/testsuite/22_locale/locale/cons/7222-env.cc
! 904ab84e00d4923090475d2f39600876  libstdc++-v3/testsuite/22_locale/locale/cons/8.cc
! 1116a3aa240568bff3d431323bcf62ac  libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc
! 3576c4a8575e7ee06f80be4290dbf229  libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/1.cc
! cc244514f927ab9b54e1b1480b487595  libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/14071.cc
! e43f5f9b24d534fa36959333ab7c27e8  libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/2.cc
! c0681676f4639ea0285d1dda76d00a83  libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/3.cc
! 3acee708386ff3e0f79ef4519a9f8bb9  libstdc++-v3/testsuite/22_locale/locale/operations/1.cc
! d392432876a02d6202f6a4cc6fbbfe09  libstdc++-v3/testsuite/22_locale/locale/operations/2.cc
! 4ff01f6f15d0a57625642c43a849fb1b  libstdc++-v3/testsuite/22_locale/messages/13631.cc
! 0c159c1451d4705cc0d1939aaf07f7a8  libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
! 1ac35a4452a887b34001b610737234ab  libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
! d19ffe3eae39e6c3ef13dabf71a170fd  libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
! 7e5c4f7906a640d71ca0b53ec547fb0a  libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_env.cc
! 26650a853dc614906db7dd4237352095  libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc
! bd0a47bb882200113e499db2ec24a689  libstdc++-v3/testsuite/22_locale/messages/requirements/base_classes.cc
! d1c545504495dde3a7f8e0a1138c9bb9  libstdc++-v3/testsuite/22_locale/messages/requirements/explicit_instantiation.cc
! bfe8f10f59cd975d9f566e8fa09c9cae  libstdc++-v3/testsuite/22_locale/messages/requirements/typedefs.cc
! cb2a98705d42d1b0bc7adfd0d7ff2a89  libstdc++-v3/testsuite/22_locale/messages_byname/1.cc
! 826d8865de05c24769a386be5834822c  libstdc++-v3/testsuite/22_locale/messages_byname/named_equivalence.cc
! 7dbe3fe821c5d349bfb2715d3312c359  libstdc++-v3/testsuite/22_locale/messages_byname/requirements/base_classes.cc
! 356a1dbf205f5886d9920a065d503892  libstdc++-v3/testsuite/22_locale/messages_byname/requirements/explicit_instantiation.cc
! b309f01839d73e6aa79e59edcd6ef2b0  libstdc++-v3/testsuite/22_locale/messages_byname/requirements/typedefs.cc
! 31c8d9ca4c6cadf5da5f4122e6cfc36a  libstdc++-v3/testsuite/22_locale/money_get/cons/3.cc
! c6fdaf67e2bfacccbdef5a0dacddcc98  libstdc++-v3/testsuite/22_locale/money_get/get/char/1.cc
! f394c6a3d5562ce5a3fc939fb19fbfa4  libstdc++-v3/testsuite/22_locale/money_get/get/char/10.cc
! 49fd2cd80c283166341f0ac8b651d358  libstdc++-v3/testsuite/22_locale/money_get/get/char/11.cc
! dda9d44e95f0dc7e8b8e3ed5ade4b015  libstdc++-v3/testsuite/22_locale/money_get/get/char/11528.cc
! ce706a44196912952edaedc40881d357  libstdc++-v3/testsuite/22_locale/money_get/get/char/12.cc
! a918a98e848b690a44c3f783235ebaf4  libstdc++-v3/testsuite/22_locale/money_get/get/char/13.cc
! ea79bd808007e9cfc000b4a0c8c0fc17  libstdc++-v3/testsuite/22_locale/money_get/get/char/14.cc
! dfe5ca8b54f1f698cc488cc61d1f9c6c  libstdc++-v3/testsuite/22_locale/money_get/get/char/15.cc
! d7b918753beb83e67ee5d697a38141f0  libstdc++-v3/testsuite/22_locale/money_get/get/char/16.cc
! b5b8559c4c410650e2ff1eed0a5ee6b2  libstdc++-v3/testsuite/22_locale/money_get/get/char/17.cc
! 2f659ccddd593cf041f01ebf2698e10f  libstdc++-v3/testsuite/22_locale/money_get/get/char/18.cc
! 50a04a58f54acd1321e2b012c3a21f97  libstdc++-v3/testsuite/22_locale/money_get/get/char/19.cc
! c6cb5317ebb9de1d4da6bf971df32f40  libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc
! eb34fbb61846df04a623b4313843f980  libstdc++-v3/testsuite/22_locale/money_get/get/char/22131.cc
! 1f08e8cf999ea1b951f3f02e44596971  libstdc++-v3/testsuite/22_locale/money_get/get/char/3.cc
! 1077b5265b8436e8b8a3a785dcee626f  libstdc++-v3/testsuite/22_locale/money_get/get/char/38399.cc
! 8bea4329ef595c69898315c257c450bf  libstdc++-v3/testsuite/22_locale/money_get/get/char/39168.cc
! 7026ab5e24e68af2433a2b04a1d25b02  libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc
! 2cb1df8883129f8b61893ebe573fe647  libstdc++-v3/testsuite/22_locale/money_get/get/char/5.cc
! d423c2e8280421b38b739ffafecf7be6  libstdc++-v3/testsuite/22_locale/money_get/get/char/6.cc
! 26f1ad12e46f36c9abfa242b7a229d40  libstdc++-v3/testsuite/22_locale/money_get/get/char/7.cc
! 72950fb95a5316a908c04adf1e7496c9  libstdc++-v3/testsuite/22_locale/money_get/get/char/8.cc
! 288910e1981187c9bb1fc00b1e15d95f  libstdc++-v3/testsuite/22_locale/money_get/get/char/9.cc
! 3d36a87f0c668302b327ebab611bd3fa  libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_env.cc
! dadcfb2e86ba922a72ecddc8b4aef146  libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_locale.cc
! 06935958b206c69242cc8dd5c1dfd932  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/1.cc
! b9c0974295c53da1418ed5784e603fc5  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/10.cc
! 3b28394494d3b12096cc065e80810aa5  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11.cc
! fc202e978c8a68fa3c490366ee0b8fd5  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/11528.cc
! 8f867a390c3873fc03c0d4bc29f4774d  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/12.cc
! ae0c99205fe62d6ea98bb090d868dfa2  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/13.cc
! c4377f91956a1eef1378c896aa86a4df  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/14.cc
! 87c95cfd2eef5c7f08f055deec2de294  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/15.cc
! 95e03f7b693521ee3cfd3163cdd520c7  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/16.cc
! 4457a6b81adbecd64e9fea86ac258712  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/17.cc
! 66cf0ba16131206c2a8513650e93383f  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/18.cc
! 383bcf7153713dd2d02360529ee47c59  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/19.cc
! ba3ebec7c004848c196f9a1408b4128b  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/2.cc
! a6c331cb0981b32acca0f7421f15b73f  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/22131.cc
! 42a4996cb4e61ada1fd4b36d5dd56c73  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/3.cc
! dbe5941902fed67359448daed9a0c362  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/38399.cc
! 6147d75ae2c7659f9ba13a8e8e365319  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/39168.cc
! 35f5ef6414f3fc8154424ec5000d6586  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/4.cc
! b2edb121ebf02503eec8206c95a8a6bb  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/5.cc
! 37035db58434b1b9b67d7985c7ee0d86  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/6.cc
! 9928071a352363fabec0bc57f9ee17da  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/7.cc
! 418aba03a4c6c3bb718b81488eaa914e  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/8.cc
! 2063f5f2c8b3e2f41a303978bdd13ca2  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/9.cc
! 3d36a87f0c668302b327ebab611bd3fa  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_env.cc
! dadcfb2e86ba922a72ecddc8b4aef146  libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_locale.cc
! 226baf42db4a319200d852b9b2c4c044  libstdc++-v3/testsuite/22_locale/money_get/requirements/base_classes.cc
! 114c4b15e56c4f121e14d4b7b272e86a  libstdc++-v3/testsuite/22_locale/money_get/requirements/explicit_instantiation.cc
! c703d657922205d14fab6c90e6e72d30  libstdc++-v3/testsuite/22_locale/money_get/requirements/typedefs.cc
! 5ca34f8e6a751830dc25b4f6afd51b9b  libstdc++-v3/testsuite/22_locale/money_put/cons/3.cc
! 0e57eed19524df4c61ad5fa25b0f6b2b  libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc
! 2015b4f4460968df1beb2b119bc3a57c  libstdc++-v3/testsuite/22_locale/money_put/put/char/12971.cc
! b34462784b4a948c3d3c46d888681912  libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc
! 118f802ac4b8ef24d209129da3d189f1  libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc
! 0c43bce74085978194eed3cb26ac1cbb  libstdc++-v3/testsuite/22_locale/money_put/put/char/39168.cc
! eae32e9f97c36849155b5085de521a05  libstdc++-v3/testsuite/22_locale/money_put/put/char/4.cc
! 881c9a86c3bc0b18971f0f25b54d8b7e  libstdc++-v3/testsuite/22_locale/money_put/put/char/5.cc
! e1777ac48349e3e20fa8a3456a1e1889  libstdc++-v3/testsuite/22_locale/money_put/put/char/6.cc
! 9f095742529cb00f1406faad9218e0ae  libstdc++-v3/testsuite/22_locale/money_put/put/char/9780-3.cc
! 2c9ea7d047fa6bcf2a0b8795cddf5c3c  libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc
! 04fac6c481ed00005a94afe1e42d3803  libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc
! f480b5469854e6f66abcefc52e2563ea  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/1.cc
! 239a5e57d5715ec99bd3c0eccf51e043  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/12971.cc
! 274f142c2e18aed3033197f310778403  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc
! a5d115f5cd78e1d5f06c28603f9daad7  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/3.cc
! e1492bdae536f03a8884d1040467790c  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/39168.cc
! cd3acb900f5fee79882b3eed0618acf4  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/4.cc
! e58679690d805ca34b8158608401e70d  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/5.cc
! 0ce205dd3cbc5fda3daddc6e1aab97e7  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/6.cc
! 2c9ea7d047fa6bcf2a0b8795cddf5c3c  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc
! 04fac6c481ed00005a94afe1e42d3803  libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc
! 839bc966bb5c8fc67413f823b138d279  libstdc++-v3/testsuite/22_locale/money_put/requirements/base_classes.cc
! 4127b1f66f6bb28cfcb1f74720602481  libstdc++-v3/testsuite/22_locale/money_put/requirements/explicit_instantiation.cc
! 2a207057a155c69d3c38f5fc1cd7815d  libstdc++-v3/testsuite/22_locale/money_put/requirements/typedefs.cc
! c5fc44623c4fb2c6bbc93e8f10d0c1a6  libstdc++-v3/testsuite/22_locale/moneypunct/40712.cc
! 3093f795be1a4b4b1fafdb85368e1688  libstdc++-v3/testsuite/22_locale/moneypunct/members/char/1.cc
! 97d864d9a6d4f96e9f1c8d86d27be476  libstdc++-v3/testsuite/22_locale/moneypunct/members/char/2.cc
! eb7eac42b56515d52af21c285f6ddffa  libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_env.cc
! e6bd112a8263a7869f0264ad3ddf34d0  libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_locale.cc
! de54180c765da4ecb4b4f5ba888633bc  libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/1.cc
! 684280c1c9e8da1351f7327751f3d67d  libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/2.cc
! eb7eac42b56515d52af21c285f6ddffa  libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_env.cc
! 6f084c185b912326f8fa50512f328e8b  libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_locale.cc
! 734cce37a65990f323a62b20c324594f  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/false/base_classes.cc
! 3008a4199e4be151ca0905e6f4b575a8  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/false/explicit_instantiation.cc
! 673392899927182682529b42dcc0a616  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/false/intl.cc
! 600f4f2f86ea0b95e2c7ef1fa36afc18  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/false/typedefs.cc
! d0783a1c92b194c152048a940e9edfd8  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/true/base_classes.cc
! dd170e70afa611c68646e0b1552df4e6  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/true/explicit_instantiation.cc
! f3028799eb4e482634485c816470fac8  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/true/intl.cc
! 87a512e69165259b5cba1b2722fa9e6d  libstdc++-v3/testsuite/22_locale/moneypunct/requirements/true/typedefs.cc
! d84f09e568d0519f2077dc7620c57f65  libstdc++-v3/testsuite/22_locale/moneypunct_byname/1.cc
! b45aa97d86e7d7b674786c59d5dc5d7b  libstdc++-v3/testsuite/22_locale/moneypunct_byname/named_equivalence.cc
! b542d84d31757d330ddc6fefcd11f24e  libstdc++-v3/testsuite/22_locale/moneypunct_byname/requirements/base_classes.cc
! a27e173e43e59b297d1988526bb6742c  libstdc++-v3/testsuite/22_locale/moneypunct_byname/requirements/explicit_instantiation.cc
! a1ec5dfc92dd6cddbe24bef8c5f010e3  libstdc++-v3/testsuite/22_locale/moneypunct_byname/requirements/typedefs.cc
! 001c95cee57d7ca5125eada9388f232e  libstdc++-v3/testsuite/22_locale/num_get/cons/3.cc
! cce9e126d72a55ac035ed93df2e2445a  libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc
! c65cfb812aaf14647b0dd6883a14b9d8  libstdc++-v3/testsuite/22_locale/num_get/get/char/10.cc
! bbcf9b847fe3899afaab0ce39e1458b9  libstdc++-v3/testsuite/22_locale/num_get/get/char/11.cc
! c1e5fa3c639cdcf9e5dc761cb67754d4  libstdc++-v3/testsuite/22_locale/num_get/get/char/12.cc
! 7654ed629b1bac63cb019e9ec1e18c0a  libstdc++-v3/testsuite/22_locale/num_get/get/char/13.cc
! dfbe8ee4afe8962101198d47f685c7d8  libstdc++-v3/testsuite/22_locale/num_get/get/char/14.cc
! 3102c035dbe2893a39e78e858cca69de  libstdc++-v3/testsuite/22_locale/num_get/get/char/15.cc
! 28197d89e09ad485c0aa1ca8a39f43d2  libstdc++-v3/testsuite/22_locale/num_get/get/char/16.cc
! 54d06b00ff007322acdb85812341b95a  libstdc++-v3/testsuite/22_locale/num_get/get/char/2.cc
! 7df4f19c899dd7b9b4522f834b4cd74c  libstdc++-v3/testsuite/22_locale/num_get/get/char/22131.cc
! cd269d23c513a6ea52447e491a61987c  libstdc++-v3/testsuite/22_locale/num_get/get/char/23953.cc
! 10f4f002c1ca89c7fe41e405db2fcfbe  libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc
! 46d73977f0ee9b1b807fba1e79275c19  libstdc++-v3/testsuite/22_locale/num_get/get/char/37958.cc
! 9db754760f68ce94dd4970e83e5909de  libstdc++-v3/testsuite/22_locale/num_get/get/char/39168.cc
! 7d2c6305ffc7a968a5431b83c64cf140  libstdc++-v3/testsuite/22_locale/num_get/get/char/39802.cc
! 5b8d2890d91551727dc6d6748e85104e  libstdc++-v3/testsuite/22_locale/num_get/get/char/4.cc
! dc3a4b0c5cfd6d39bc0ef64d2e1dcb42  libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc
! e31331fa1a5326d326b2a69b52b5c89c  libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc
! 0083cb7b4f2818b06a44a229e6ac3fff  libstdc++-v3/testsuite/22_locale/num_get/get/char/7.cc
! 7f8119c844e6cce5b8e5b19a9046ce23  libstdc++-v3/testsuite/22_locale/num_get/get/char/8.cc
! 9be76e76e73221a48a72e979fbacc68c  libstdc++-v3/testsuite/22_locale/num_get/get/char/9.cc
! 3a7c185544541302fc3966238aefdb06  libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_env.cc
! 04fac6c481ed00005a94afe1e42d3803  libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc
! 414839a4882b7d45d5c747deeaeeac17  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/1.cc
! e240f0b1f6c758fac2e8c94fb633561b  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/10.cc
! fbe83740977de5ee991d1d4c7a3fea97  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/11.cc
! c0608a72e53b667b6838c9654d08ddbc  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/12.cc
! 99944bc6df3cfa643586e1c60b876e3f  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/13.cc
! c51d8d477fc9a373cd99c4b631a05961  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/14.cc
! 4cdfdd07ae8915eeed126710b75fea7b  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/15.cc
! 5f19d496f5ce4aac605400f00c98a0df  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/16.cc
! 6f6eb15188a280cb54f3509468f06a3a  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/2.cc
! 006776dfaf7d918354c8f7c6519342cf  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/22131.cc
! d75115269db13f05840bd69cd5a523a3  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/23953.cc
! 4c70b65888f351a7e51f063d65137b89  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/3.cc
! af434a533c8bee67392bcff48fa2bf81  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/37958.cc
! 69673b0bc07f0d15c16f709e9919fcfd  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/39168.cc
! 03b2073b2d3ead958d0900067550dd8b  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/39802.cc
! a765e55283b4739ffb7d5feb4eb3d5ce  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/4.cc
! 2e7aaee36bacff9ebc7cf37c77dae7d1  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/5.cc
! 309cd5731c646b56633eb531705c56db  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/6.cc
! a2ef03afe4477acef84e0f7a5ad47fbd  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/7.cc
! 5330e004ad7186409c15cfc8e5a4e30e  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/8.cc
! da528e239b7553010631bfb2976b0835  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/9.cc
! 3a7c185544541302fc3966238aefdb06  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_env.cc
! 04fac6c481ed00005a94afe1e42d3803  libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc
! b87ba08d5e951962ec3c3d68c4d6b68c  libstdc++-v3/testsuite/22_locale/num_get/requirements/base_classes.cc
! 9bc3e965af376729201fd22555163745  libstdc++-v3/testsuite/22_locale/num_get/requirements/explicit_instantiation.cc
! 86aa8c2baa8218bf2649070ea9bc046d  libstdc++-v3/testsuite/22_locale/num_get/requirements/typedefs.cc
! 8ac8031a745cdc8aefcd50b25bc40b65  libstdc++-v3/testsuite/22_locale/num_put/cons/3.cc
! 36fc093edaaf9afa7da84902915d2b48  libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc
! 48bda09b7a90c733b9585703554b0f81  libstdc++-v3/testsuite/22_locale/num_put/put/char/10.cc
! f3b10933a558f27908357b00dcc308a9  libstdc++-v3/testsuite/22_locale/num_put/put/char/11.cc
! 54e983b481a027da56eee0f430e1187f  libstdc++-v3/testsuite/22_locale/num_put/put/char/12.cc
! 45c5e5cdc56c10373d11e17cf29eac93  libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc
! 4a795509cab44278d674074bf999172e  libstdc++-v3/testsuite/22_locale/num_put/put/char/15565.cc
! 39c349a79ce71d940e3abb2b6f09a23e  libstdc++-v3/testsuite/22_locale/num_put/put/char/2.cc
! 1d41c090baeaab1334405395d20e2c24  libstdc++-v3/testsuite/22_locale/num_put/put/char/20909.cc
! feb39fa5e2cf8d9340ecdb669280e716  libstdc++-v3/testsuite/22_locale/num_put/put/char/20914.cc
! a0715189adfc8c9436e42ab7dd734e83  libstdc++-v3/testsuite/22_locale/num_put/put/char/23953.cc
! c0ee0b17957f8d3fb60eb58677567dc7  libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc
! 82bdf2b1cc870112e95e65d1d860bc2a  libstdc++-v3/testsuite/22_locale/num_put/put/char/38196.cc
! 62af987b5acfde444257eb0d7c9aa497  libstdc++-v3/testsuite/22_locale/num_put/put/char/38210.cc
! 85debb4df1402c74af208078ce24fc0f  libstdc++-v3/testsuite/22_locale/num_put/put/char/4.cc
! 69dd462d0a896ffb5d15d8301a230703  libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc
! f6779a6b7fd93f2bb16ad4589df0c06b  libstdc++-v3/testsuite/22_locale/num_put/put/char/6.cc
! 4020efbf0ec143f7b179014db9bdd457  libstdc++-v3/testsuite/22_locale/num_put/put/char/7.cc
! e8c79cee6eec882fcbc3018f45500ac2  libstdc++-v3/testsuite/22_locale/num_put/put/char/8.cc
! f10c15a36b4e4b7e926f8bd27f6e9c5a  libstdc++-v3/testsuite/22_locale/num_put/put/char/9.cc
! 782ddc8308e4691f21b2329bdfb24810  libstdc++-v3/testsuite/22_locale/num_put/put/char/9780-2.cc
! e0fb0ab2eaab8b6d4f0ffaaac09a4d33  libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_env.cc
! 28bcd5478ec375c2a1fd8b561079935d  libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc
! 1facf90676560ee9078cf25de9e03656  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/1.cc
! 28b5a1e2f50516a4f2f98b823a739de3  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/10.cc
! 5f2a45ec8bcc592304d7b656752ef8af  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/11.cc
! 2b666ba84a2f8c9202fc2d52318f3aa7  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/12.cc
! 805a8b38cd0b89d520c426ff8ce42e84  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/14220.cc
! 312b40a3e59991a3072e91c6e2f2b028  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/15565.cc
! 9bc526064ab751474c3e35f1f233fd74  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/2.cc
! 26fb6aa69cfe821c47ac69d756012591  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20909.cc
! de1f40c62d3db373c9db8d933d48849e  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20914.cc
! 88b0660b2427bd2979af6ea9d860ceae  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/23953.cc
! e2c32cf166caacc7f8829977460c25d3  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/3.cc
! 949ce3c528e41dd418aa69d57a94827c  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/38196.cc
! a5b1f88b58584f6de0897c488d2f0b00  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/38210.cc
! 76aef251c5804ae2ff8b3923ef794b17  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/4.cc
! a67e4f9feb5e50f0f42f93b8d4684c86  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/5.cc
! c9ea49cf6bb7e107da29b82138cdc954  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/6.cc
! 3c94a3e25f772edbe4185a2c2217447a  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/7.cc
! d528adbd8ae5f9be32f69bba2a2ffff9  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/8.cc
! fb91a0f20d1970152374c3ee89bc4a8c  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/9.cc
! 58cd7a50ecd8b77a45603e70b4429b6d  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_env.cc
! 81dffbde7f2ae461ca617fb9f3476559  libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc
! 8494aa7ed220d6566480fc552ed57dd5  libstdc++-v3/testsuite/22_locale/num_put/requirements/base_classes.cc
! 501cf7cbdbc509e1c992138d48fbdf3b  libstdc++-v3/testsuite/22_locale/num_put/requirements/explicit_instantiation.cc
! cc95ae97ea51eac6811b42ed194f128b  libstdc++-v3/testsuite/22_locale/num_put/requirements/typedefs.cc
! e47a3432d40b931f9a9b331771fc9e57  libstdc++-v3/testsuite/22_locale/numpunct/members/char/1.cc
! cc4ba5409724c18a215e37f97f2a2cde  libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc
! abd7f83b9c97f97ed857f92f4786544e  libstdc++-v3/testsuite/22_locale/numpunct/members/char/3.cc
! 0a46f5134506addc649cfec9befcc237  libstdc++-v3/testsuite/22_locale/numpunct/members/char/cache_1.cc
! 1e280e1fc073055f2156ad809d6d1b2f  libstdc++-v3/testsuite/22_locale/numpunct/members/char/cache_2.cc
! 295e272d25d70ec70247f40a888e8f49  libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_env.cc
! af696c492a03228bbec9bb4b2d40a50b  libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_locale.cc
! c9042db265534c4ff87e09ba0c025743  libstdc++-v3/testsuite/22_locale/numpunct/members/pod/1.cc
! 83925f0f3ceb1c9582bd22c58c382dd9  libstdc++-v3/testsuite/22_locale/numpunct/members/pod/2.cc
! b7577ca36922bf64a11624f2d7950523  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/1.cc
! ac84329bf31d5da70279a435ec9f7fb2  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/2.cc
! e85f482a2388b1da7854346cd585db36  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/cache_1.cc
! 552d82830ab8926bfd7668ce6df46610  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/cache_2.cc
! 295e272d25d70ec70247f40a888e8f49  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_env.cc
! af696c492a03228bbec9bb4b2d40a50b  libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_locale.cc
! 68446f420625aaff822c3977aeac7443  libstdc++-v3/testsuite/22_locale/numpunct/requirements/base_classes.cc
! 12902f7787d90fc29aeedab4e5451d79  libstdc++-v3/testsuite/22_locale/numpunct/requirements/explicit_instantiation.cc
! 8c76351126c11f9795701e06a07313b3  libstdc++-v3/testsuite/22_locale/numpunct/requirements/typedefs.cc
! 337b00e60795fcc94ddf816c028ab8c0  libstdc++-v3/testsuite/22_locale/numpunct_byname/1.cc
! 03990b2658a136fc973202954d492b46  libstdc++-v3/testsuite/22_locale/numpunct_byname/named_equivalence.cc
! 2f56d8d975185d3b810d84e6266f9bf3  libstdc++-v3/testsuite/22_locale/numpunct_byname/requirements/base_classes.cc
! b2154a86aeaf9f06e060f85701502186  libstdc++-v3/testsuite/22_locale/numpunct_byname/requirements/explicit_instantiation.cc
! 649b1ab1cebceb8308c8fa1fbf027893  libstdc++-v3/testsuite/22_locale/numpunct_byname/requirements/typedefs.cc
! c24152a2ecf331e6feff78e216f9bd47  libstdc++-v3/testsuite/22_locale/time_get/date_order/char/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_locale.cc
! 8d32103334d1e8756116eaffb52097e2  libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/1.cc
! 5a249060cbe15c4cbd017b92c8427f33  libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_env.cc
! d081940f9f2f2b97a88be0e7cd709e5a  libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_locale.cc
! eaa7123eaeb7c1d5889943ce74e5e446  libstdc++-v3/testsuite/22_locale/time_get/get/char/1.cc
! f0451c7a2eef1f97343452cd03b0b79f  libstdc++-v3/testsuite/22_locale/time_get/get/char/2.cc
! 0b0535c659ff67d1dee335f3e6f1fe38  libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc
! c74a933a3a6d6e010fcff2b84e6c5fa2  libstdc++-v3/testsuite/22_locale/time_get/get/char/4.cc
! 4e6f7d38d22ba95665782217ae6b7761  libstdc++-v3/testsuite/22_locale/time_get/get/char/71367.cc
! 180ffeba368c586ff632adf67428b187  libstdc++-v3/testsuite/22_locale/time_get/get/char/71557.cc
! 6b23034b4daea415bb316cc543b09de6  libstdc++-v3/testsuite/22_locale/time_get/get/char/88681.cc
! 80aea362d2b2a8fb0ff2453216427480  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/1.cc
! e4d68bf5e63fc6a06275ea0e5f4c8f8e  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/2.cc
! 13a3ae7dc4b5858e240db8cf1092c0b7  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc
! caa4f5b024375c137dd5b167729e51d0  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/4.cc
! 1182dea03a1822e14c19a8d1905aeb9e  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/71367.cc
! b079252432253d81fab92c5459f437e8  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/71557.cc
! c809646caa6265dec17a09ad001e39b0  libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/88681.cc
! 205a99840a9eb591ca7c0f29b31cb390  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/1.cc
! ca4fee184c1d17632706e28e411dfd61  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12750.cc
! 69e175e80f9ad7ed7f31f384c3577ad2  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12791.cc
! 6f99571a4abfa3341dc2e0080f6dc104  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc
! 9c735eaacc983bdeef67c4ce78a1c639  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/26701.cc
! 12d07fe97cd18543b20d90ea2568b18d  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/3.cc
! 2365039b838b7febdb7d6315908f4563  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/5.cc
! 6219d3c7ed027359b2e3f8cd8d6a3ad2  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_env.cc
! f495fd4fe4e1ff568688635a33d38147  libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc
! 74f4646add71455693f0f3235f41db23  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/1.cc
! 9c2d6cc7b6f209b4c505a08eb31d394d  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12750.cc
! ba1c60fd33e152ce0867e7a7432a93ba  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12791.cc
! 3370860381487285fbb57f058e10f593  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/2.cc
! 196622b5e5c7bb27d8755cafc8007580  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/26701.cc
! 3f27fcbe85b5746eec68e97fe56dd43d  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/3.cc
! 49b1b40c6564deaa5b02e5c8976f2160  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/4.cc
! 4db0bc471b6084e59a0558aa26786929  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/5.cc
! 6219d3c7ed027359b2e3f8cd8d6a3ad2  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_env.cc
! f495fd4fe4e1ff568688635a33d38147  libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc
! b876406753310d57a526de0baeabfed4  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/1.cc
! 909223a3f877dc2bb0b4897baff281d9  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc
! 53ca79921c17c746dee40188c9e6c42f  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/3.cc
! 668ea4865ac03680a13a3e0aacb3e3bf  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/4.cc
! cfaeb6c4e5bdbc3c02b5441437df6398  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/5.cc
! 0bfb845b5f6e0cd92e34303de75bf22e  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/6.cc
! 6219d3c7ed027359b2e3f8cd8d6a3ad2  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_env.cc
! f495fd4fe4e1ff568688635a33d38147  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc
! c5b3119d45804b8d11689a2fa9ac5d9d  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/1.cc
! aa22d7d717b8f135b77f1593edce85eb  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/2.cc
! 6242d1ff16808353d6c15dd9ed02722f  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/3.cc
! 033c3359683e7d5a03502b89c03638ae  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/4.cc
! b306e333b2766420f12763fdff98e189  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/5.cc
! ba097af5f60b5e04ded39599e8a40533  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/6.cc
! 6219d3c7ed027359b2e3f8cd8d6a3ad2  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_env.cc
! f495fd4fe4e1ff568688635a33d38147  libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc
! c330e06b7fa9b72a510977c5c7524617  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc
! 249c9b5faeb15bd32ecb40ce1c84b724  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc
! 8b52a36a01244032c2ebda49a7e7b155  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/3.cc
! ed5ad04aaa93845053f31f773de5a58a  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/4.cc
! 83c959025657a03df291a183ac7d09a8  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/5.cc
! c9f2b81a7c466b13f9214d0706cf3282  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/6.cc
! 6219d3c7ed027359b2e3f8cd8d6a3ad2  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_env.cc
! f495fd4fe4e1ff568688635a33d38147  libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc
! 6150623052ea3672c5d34e8c2e7b064c  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/1.cc
! 2ebe12f8edba6a0800ea4acbab7108fe  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc
! e164f817966f521c6bed2af63b5e829f  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/3.cc
! 0b888bdae44b02bf4a688607e5836561  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/4.cc
! 2e421c238d27d6dc5f36e55f46743210  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/5.cc
! a60f3e765c193317486efcc85b7873e3  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/6.cc
! 6219d3c7ed027359b2e3f8cd8d6a3ad2  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_env.cc
! f495fd4fe4e1ff568688635a33d38147  libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc
! c4b7fe050e5bfe256f351774ea55e540  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/1.cc
! a7eb7da69ff756ce9896614a6e69815a  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc
! 9f52b51a7e830a94f02a48dcfc2a4907  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/3.cc
! 5b9fae0fd5e573d8ab58aca85750487b  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-1.cc
! b6fd39ff6b64af2fa81d801925d94ba4  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-2.cc
! 7c44c2201c1b34c814f707837f963e9c  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/5.cc
! fee86623505f74f046dfb1fbac55c942  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/6.cc
! 6219d3c7ed027359b2e3f8cd8d6a3ad2  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_env.cc
! f495fd4fe4e1ff568688635a33d38147  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc
! 7066fab2355fd1ff0ced47ae4d8358e9  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/1.cc
! 7b3b45aec28416322abbee17caf8f248  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/2.cc
! 260f93d07884d5a921de057dd9c4f178  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/3.cc
! 2b9ea441301e1256b0bc75731919ba33  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/5.cc
! 153f30b706f2045747987fda08e05626  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/6.cc
! 2ae887cc7fc16ee2c7b1fa122a81abfd  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_env.cc
! 8ab98eacb1135a1f5a2f0a597897be2e  libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc
! fd073f26afa8ea7df8c381b7aebc6f2b  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc
! c27b61071c56708105f64063b74acc91  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/3.cc
! acbeeead5c1f208182e97a128a2a11f5  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/5.cc
! a6897bfa7ee9b82212f1532a02723455  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/6.cc
! f814451499d44c0df15744785d06623a  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_env.cc
! ebcde17a4efd0c2efc5b2a43190f0121  libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_locale.cc
! 2afe1391d59216d4dc8d6143a3389943  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/1.cc
! b397bb3546a10f03b0480e0225726b12  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/3.cc
! ec99b1ecd80e3a3476e01f8287e6f7a9  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/5.cc
! d9794efbf3cd2f71f42ae5b5be8646f4  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/6.cc
! f814451499d44c0df15744785d06623a  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_env.cc
! ebcde17a4efd0c2efc5b2a43190f0121  libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_locale.cc
! c7c56e4d67bbc34bf0160332064cbe5d  libstdc++-v3/testsuite/22_locale/time_get/requirements/base_classes.cc
! fc91368834e8f00d2639ff1222b15dfa  libstdc++-v3/testsuite/22_locale/time_get/requirements/explicit_instantiation.cc
! ee91569a5c6ad4d73115bfdc0b453a97  libstdc++-v3/testsuite/22_locale/time_get/requirements/typedefs.cc
! d0e5cbc83f32ceec464dd3f3d64be84e  libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc
! a7f195f5b9aa4733277d7af5c1325301  libstdc++-v3/testsuite/22_locale/time_put/put/char/10.cc
! d79b6ea5a9a96d8c379400cd732e39e9  libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_1.cc
! 17245bf6e2f0f4348890967a0ba5dbd6  libstdc++-v3/testsuite/22_locale/time_put/put/char/12439_3.cc
! f8ecdf6efe98823fe38dee867942e328  libstdc++-v3/testsuite/22_locale/time_put/put/char/17038.cc
! e610fd34eace1d8d3475564e93eadccf  libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc
! e1b8b7d57356a4d5f3353636ea777873  libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc
! ea57652c5d8c1e4957ee1d1099d82321  libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc
! 7fcb34ab03e2e5b3f00b2abe67c38966  libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc
! 9c6761693f52c43fe3c307536aed843c  libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc
! ad9bbecd0a5dfa8885b89b58082a4488  libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc
! 7a349e911397100e1ee8c3d3935047b8  libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc
! d552052891475a844a5002cdec8d8c21  libstdc++-v3/testsuite/22_locale/time_put/put/char/9.cc
! fd6d494721be311f156ffcf064a531cc  libstdc++-v3/testsuite/22_locale/time_put/put/char/9780-1.cc
! bce1a77db8a2fd9e262d4eca3f2016a8  libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_env.cc
! 8be92efb88cef990c08f5c0c9f3a6fef  libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc
! b735d426e3fa42c730ffbb507df91a0e  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/1.cc
! 701d30fded7153124847584f143876be  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/10.cc
! ea2e47ea45cd92a0567fa54d1110c6b0  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_1.cc
! 23cde4cdce317c1de3feeb6d0a3d1556  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_2.cc
! 7d19e5f2e6e013e2b8abd06501f57816  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/12439_3.cc
! 1ce9951884706b64566802cc0380e2f6  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/17038.cc
! ce42bdb07069647230619b2ec537dad5  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/2.cc
! fe158b5f94ef9f54d7061f737511b9b1  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/3.cc
! 43dcebccdbfd5149101338eed5efbe77  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/4.cc
! cb4bc92d794ccd5c36e444925ee50089  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/5.cc
! c12bb1cb43dd38d2c476dafa1f45b3e1  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/6.cc
! ad513ca0a2a23370a09e1b187c8a0e94  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/7.cc
! 5873cd498fb4430deb14980abff12573  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/8.cc
! 66a4769fcb664944fa7809d22c4e6894  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/9.cc
! bce1a77db8a2fd9e262d4eca3f2016a8  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_env.cc
! 477b51bbd1b398420c3f121aec1e9852  libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc
! 129d9ab60505168157b16a83bbdd1264  libstdc++-v3/testsuite/22_locale/time_put/requirements/base_classes.cc
! f724468861a772e87c74f0ddacebee25  libstdc++-v3/testsuite/22_locale/time_put/requirements/explicit_instantiation.cc
! 9039eabffbffca70b36ee3a48afe8dc3  libstdc++-v3/testsuite/22_locale/time_put/requirements/typedefs.cc
! 702f50f8ecc74c33aef525a7dcacbba9  libstdc++-v3/testsuite/23_containers/array/capacity/constexpr_functions.cc
! 6ac7672f30751a081ffd4422b6a2f0ad  libstdc++-v3/testsuite/23_containers/array/capacity/empty.cc
! d3b8ae48846783b68b0c7b15bb586428  libstdc++-v3/testsuite/23_containers/array/capacity/max_size.cc
! 2694b0aaee0471f587239599be5ee088  libstdc++-v3/testsuite/23_containers/array/capacity/size.cc
! decf036187e6c677bddc30f9564e05b8  libstdc++-v3/testsuite/23_containers/array/comparison_operators/96851.cc
! 65932f4ec195f18eda1ea4235219ed57  libstdc++-v3/testsuite/23_containers/array/comparison_operators/constexpr.cc
! 2440c8a5bc138688b549692220a7e202  libstdc++-v3/testsuite/23_containers/array/comparison_operators/equal.cc
! 8825bc1cd71d3588aa1766c781555bf5  libstdc++-v3/testsuite/23_containers/array/comparison_operators/greater.cc
! bd280f3ea3e5d9abf50dd2d5c3c1ea42  libstdc++-v3/testsuite/23_containers/array/comparison_operators/greater_or_equal.cc
! 221ebd973cb7cb80989e379791b5dbfe  libstdc++-v3/testsuite/23_containers/array/comparison_operators/less.cc
! 9d64c2f471629193f1be64077ce1dedd  libstdc++-v3/testsuite/23_containers/array/comparison_operators/less_or_equal.cc
! 05e3034c9d899a7205538a24c30e42a7  libstdc++-v3/testsuite/23_containers/array/comparison_operators/not_equal.cc
! 43acf2ecf2c61c21d36b7ebcb5745b81  libstdc++-v3/testsuite/23_containers/array/cons/53361.cc
! 891d03bc1650e5d9d3ad430f874d86cc  libstdc++-v3/testsuite/23_containers/array/cons/aggregate_initialization.cc
! 32ac54909221492a28e633b359888c7c  libstdc++-v3/testsuite/23_containers/array/cons/deduction.cc
! e7020060d3f451aafff35f4f5f1c45ed  libstdc++-v3/testsuite/23_containers/array/cons/deduction_neg.cc
! a0a4fd0ebb58bd078933f95239938034  libstdc++-v3/testsuite/23_containers/array/creation/1.cc
! aa17ba9d9b09772b44a183382127ba06  libstdc++-v3/testsuite/23_containers/array/creation/2.cc
! 3c3b42932a234b65502e903d67e8f2d8  libstdc++-v3/testsuite/23_containers/array/creation/3_neg.cc
! fe745a295fadf30b545b3d8d16e52a34  libstdc++-v3/testsuite/23_containers/array/debug/back1_neg.cc
! cc9596399588f73656970e95dc585197  libstdc++-v3/testsuite/23_containers/array/debug/back2_neg.cc
! 19fec4e51c58f209ef0667e2aabdc611  libstdc++-v3/testsuite/23_containers/array/debug/constexpr_c++11.cc
! f12045a59fc10fbaab29f19982545c3e  libstdc++-v3/testsuite/23_containers/array/debug/front1_neg.cc
! c11219166193857de0722d1594585132  libstdc++-v3/testsuite/23_containers/array/debug/front2_neg.cc
! 70ec43e71e9825629e7857075d2481a4  libstdc++-v3/testsuite/23_containers/array/debug/square_brackets_operator1_neg.cc
! 073dbb87b02f3716cc64b3a5ed42e82c  libstdc++-v3/testsuite/23_containers/array/debug/square_brackets_operator2_neg.cc
! dc37bcad141e13308b8d04d1b4083413  libstdc++-v3/testsuite/23_containers/array/element_access/54388.cc
! f8bdf910e5cb549e8992c06901ef5af0  libstdc++-v3/testsuite/23_containers/array/element_access/60497.cc
! c058716cf1e9ec5299e803f6dc3169ee  libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc
! af1e5b36ba419d2855e4d845e70c715b  libstdc++-v3/testsuite/23_containers/array/element_access/at_out_of_range.cc
! 46626195308dd08226ae0da9b0b386ce  libstdc++-v3/testsuite/23_containers/array/element_access/back.cc
! 2ef557c13908a7ca654dc95d8db8bee9  libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc
! e287954e91e8dd6bf5220e35a995f855  libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_element_access.cc
! 71ae1eaf20f465af3bec796d1bcc83a7  libstdc++-v3/testsuite/23_containers/array/element_access/data.cc
! cf08e9189f35d205fdd0791191c6c6e4  libstdc++-v3/testsuite/23_containers/array/element_access/front.cc
! 6a70864d40e873666241bcb5b4a33a61  libstdc++-v3/testsuite/23_containers/array/iterators/begin_end.cc
! 298ca5a34eefaa04aa4b50e4c67fa15e  libstdc++-v3/testsuite/23_containers/array/iterators/end_is_one_past.cc
! db3451be50364838bd45eec5bd08c3eb  libstdc++-v3/testsuite/23_containers/array/range_access.cc
! 546f8d9226878781bc095e79372d968c  libstdc++-v3/testsuite/23_containers/array/requirements/citerators.cc
! 767d80957b82ab802edf87c6be4448af  libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_fill.cc
! 6f97b81e56fe43fbec010590eb272f43  libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc
! 62c26b769412d10648dfae30cb2ba29a  libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_swap.cc
! 1ae02ae62661559b73ede19a72943d4b  libstdc++-v3/testsuite/23_containers/array/requirements/contiguous.cc
! 139b961822231d399f30be6baffc4a7e  libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation/1.cc
! 19dacdf60171df50bffb4a8277968c08  libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation/2.cc
! 64a3114ee5eb049e9d7147af7dea5113  libstdc++-v3/testsuite/23_containers/array/requirements/explicit_instantiation/3.cc
! ac614056f8e18412992414ba790d2253  libstdc++-v3/testsuite/23_containers/array/requirements/fill.cc
! 15c11a58bbabf5d398b0e676e9181a97  libstdc++-v3/testsuite/23_containers/array/requirements/member_swap.cc
! 572435ec4ee219fca4a103596df75b02  libstdc++-v3/testsuite/23_containers/array/requirements/non_default_constructible.cc
! 094a65740d93db3b51c5241ce75c7743  libstdc++-v3/testsuite/23_containers/array/requirements/typedefs.cc
! 9e3452ae9516fa0efb427f472f0e26cc  libstdc++-v3/testsuite/23_containers/array/requirements/zero_sized_arrays.cc
! 503ad9607e2b616c51cbc8a59c6b7f81  libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap.cc
! dcadb86dda331dee0cd7b179ebfc1d89  libstdc++-v3/testsuite/23_containers/array/specialized_algorithms/swap_cxx17.cc
! 69bd643913fee3e46c28dd059dfd58e5  libstdc++-v3/testsuite/23_containers/array/tuple_interface/constexpr_get.cc
! fc2aeb3a5d38ef75d7424710d94519e2  libstdc++-v3/testsuite/23_containers/array/tuple_interface/get.cc
! c75f5ec66b897f7a80ad5b3058adad79  libstdc++-v3/testsuite/23_containers/array/tuple_interface/get_neg.cc
! c5c4d364e1723386d33a0690480c0312  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
! 07d523f2bd4c66015b6cb22ea7f14042  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_cpp14.cc
! 0c3ee048f57543ff15c087b49215aa83  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc
! 2397713fa067b289ac436abb2e5aa66c  libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_size.cc
! cf7f4708c999a77d8e12a3c91190c759  libstdc++-v3/testsuite/23_containers/bitset/18604.cc
! a98ebbb8ac186b07d1ba9f0372b7079c  libstdc++-v3/testsuite/23_containers/bitset/45713.cc
! 25a383a36b736bf303e2de6d24fde999  libstdc++-v3/testsuite/23_containers/bitset/all/1.cc
! 813dfbdfb344f692ee62dd3c0d6ea4da  libstdc++-v3/testsuite/23_containers/bitset/cons/1.cc
! 8652c7106a2c6be12c53fb5e8111cc4a  libstdc++-v3/testsuite/23_containers/bitset/cons/16020.cc
! a1b487b491b16078b36c852a60a8548c  libstdc++-v3/testsuite/23_containers/bitset/cons/2.cc
! 0a662519369e2cc2bbd470ccd81be047  libstdc++-v3/testsuite/23_containers/bitset/cons/3.cc
! 3e26ec0dde94bc3e6f5dc53271253203  libstdc++-v3/testsuite/23_containers/bitset/cons/38244.cc
! 4020903576be1c78de1bc4246c8c6e0b  libstdc++-v3/testsuite/23_containers/bitset/cons/50268.cc
! a4f90245e1f561ada128b9899fd096c1  libstdc++-v3/testsuite/23_containers/bitset/cons/6282.cc
! 05fcf9cfa11cbad445540595a4d24258  libstdc++-v3/testsuite/23_containers/bitset/cons/constexpr.cc
! 850a5e341898226e800c2170429b572b  libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-1.cc
! dfdbbcc8924bef19aacdb83465c7ec4f  libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-2.cc
! 316fcc5ece1712eeb15dc55a3164a394  libstdc++-v3/testsuite/23_containers/bitset/cons/dr396.cc
! 63a91ac4fab2539103aff182ed7f2f7d  libstdc++-v3/testsuite/23_containers/bitset/count/6124.cc
! 344f35b49531b4281cef1b0561d832cb  libstdc++-v3/testsuite/23_containers/bitset/debug/invalidation/1.cc
! 3e7b9611f98c49749f547d1a138db337  libstdc++-v3/testsuite/23_containers/bitset/ext/15361.cc
! 5ee1cc233eba593ee1b703061f2e904e  libstdc++-v3/testsuite/23_containers/bitset/hash/1.cc
! 20266a82d03bd8730f5de6217c6d99d6  libstdc++-v3/testsuite/23_containers/bitset/input/1.cc
! 4d9f9f0027ec81f93e18f6968b29cfa7  libstdc++-v3/testsuite/23_containers/bitset/operations/1.cc
! 9e3336aca541b14fd33317b7b4ec137c  libstdc++-v3/testsuite/23_containers/bitset/operations/13838.cc
! f7cd9dd4e0a9eda138728ce60df7f324  libstdc++-v3/testsuite/23_containers/bitset/operations/2.cc
! e7a18e3ee2e629fa3605bfbc82e88404  libstdc++-v3/testsuite/23_containers/bitset/operations/96303.cc
! e6a428e0ff25d8808c82849aaf042386  libstdc++-v3/testsuite/23_containers/bitset/operations/constexpr-2.cc
! ee72cba9caf8bcacf5544a62f709c1c5  libstdc++-v3/testsuite/23_containers/bitset/operations/constexpr.cc
! 7d089279c86de67244a6e445b8367c09  libstdc++-v3/testsuite/23_containers/bitset/requirements/constexpr_functions.cc
! 3b252a71d44ed84b68f8db6055dd1566  libstdc++-v3/testsuite/23_containers/bitset/requirements/explicit_instantiation/1.cc
! 8bccb89954d09066b2def1abe3d7dd39  libstdc++-v3/testsuite/23_containers/bitset/requirements/explicit_instantiation/1_c++0x.cc
! e2dbcf554c85ff7509feda50f28ae4c6  libstdc++-v3/testsuite/23_containers/bitset/test/1.cc
! f61e9a8f588f813168ddeedfd9a9b13f  libstdc++-v3/testsuite/23_containers/bitset/to_string/1.cc
! 2d12191038012350aed4506446ea182b  libstdc++-v3/testsuite/23_containers/bitset/to_string/dr396.cc
! 41dcdc4e513bf59036318e4e9ac17291  libstdc++-v3/testsuite/23_containers/bitset/to_ullong/1.cc
! 968b43e6ff9344ee2627c3e63d0e6b01  libstdc++-v3/testsuite/23_containers/bitset/to_ulong/1.cc
  ddf767067d4b89b063a9cdaf9a38233c  libstdc++-v3/testsuite/23_containers/deque/100516.cc
! c0f385297b6a227b31a29a10a1d425b2  libstdc++-v3/testsuite/23_containers/deque/14340.cc
! dae721fc8687a905f4d7b913ba2ebed4  libstdc++-v3/testsuite/23_containers/deque/18604.cc
! aeb67ff1a150b531eef1eb160f6691f1  libstdc++-v3/testsuite/23_containers/deque/48101-2_neg.cc
! 0fb17d83036073d81a5259b6343c2ac4  libstdc++-v3/testsuite/23_containers/deque/48101-3_neg.cc
! 55f443b9733fa7940a7da9f94b015f2d  libstdc++-v3/testsuite/23_containers/deque/48101_neg.cc
! 5e75e4775bfeb6d33fe8bd9a247fe5b2  libstdc++-v3/testsuite/23_containers/deque/58764.cc
! 83ce2e900976931ba3ccba9258cbf523  libstdc++-v3/testsuite/23_containers/deque/70303.cc
! 5687ff85e46bfffba094d1fd9a44ee17  libstdc++-v3/testsuite/23_containers/deque/92124.cc
! 4c514bb13a581f4d698d099f0c2060e8  libstdc++-v3/testsuite/23_containers/deque/allocator/copy.cc
! a8527880a679ab11508ce8a74a9484da  libstdc++-v3/testsuite/23_containers/deque/allocator/copy_assign.cc
! b4104af88a55ee68df7d10935de16eb3  libstdc++-v3/testsuite/23_containers/deque/allocator/default_init.cc
! dc22ac304263f33f9797a624e0a7d248  libstdc++-v3/testsuite/23_containers/deque/allocator/ext_ptr.cc
! 45deb92801c35644adb5df9353a5a324  libstdc++-v3/testsuite/23_containers/deque/allocator/minimal.cc
! cea479c33cc52ff1f019cce73a9edbf2  libstdc++-v3/testsuite/23_containers/deque/allocator/move-2.cc
! 12a9e319b16bf94dfdfd3a540bc98a8c  libstdc++-v3/testsuite/23_containers/deque/allocator/move.cc
! c7926229b9e2ac45cdcab7fa0119971f  libstdc++-v3/testsuite/23_containers/deque/allocator/move_assign-2.cc
! f33d849acfa6a4d5fb0c02bfbff71869  libstdc++-v3/testsuite/23_containers/deque/allocator/move_assign.cc
! 253d8aa19f05b11e46d5bd5e547dcd37  libstdc++-v3/testsuite/23_containers/deque/allocator/noexcept.cc
! 9c97ccf3399afe4dd5491764d880aa05  libstdc++-v3/testsuite/23_containers/deque/allocator/swap.cc
! 3a63a657801415d45cc306e224545c20  libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc
! 6bd16a2c2f924a6abe2dabdcb963784e  libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc
! c603229af6ad867145a5b73afe786e51  libstdc++-v3/testsuite/23_containers/deque/capacity/max_size.cc
! 276db1e12db093453f4c8c6bd2b4587b  libstdc++-v3/testsuite/23_containers/deque/capacity/moveable.cc
! cf90786afd28001d3e46533bb3445e7b  libstdc++-v3/testsuite/23_containers/deque/capacity/resize_size.cc
! 671f97d5ff41ff3bf803b15d0894e9ed  libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc
! 35f48bd566ca0f52be51373f32b8a48e  libstdc++-v3/testsuite/23_containers/deque/check_construct_destroy.cc
! 490a3b84d03fcc8dc38df227d4082bc1  libstdc++-v3/testsuite/23_containers/deque/cons/1.cc
! 08ad7b63c0e50bb4355b7b23614b439d  libstdc++-v3/testsuite/23_containers/deque/cons/2.cc
! 31a1e942f6f1362f125e9d15d3e4f905  libstdc++-v3/testsuite/23_containers/deque/cons/55977.cc
! 89b8071a464810d27c08fc1cf246def4  libstdc++-v3/testsuite/23_containers/deque/cons/assign/1.cc
! 862deb24f1107f8d5e93731572bac60a  libstdc++-v3/testsuite/23_containers/deque/cons/clear_allocator.cc
! 105149464e50b48eef69ae2ef570750c  libstdc++-v3/testsuite/23_containers/deque/cons/cons_size.cc
! 152213e9eff690b06a4feb7b37d65108  libstdc++-v3/testsuite/23_containers/deque/cons/deduction.cc
! ab44631bec01e0d604e67a7282122ea8  libstdc++-v3/testsuite/23_containers/deque/cons/moveable.cc
! a4039b93ec4fee3e8cc8970056537419  libstdc++-v3/testsuite/23_containers/deque/cons/moveable2.cc
! ce8923dfa0fa9a5ad62e4b5ef5f23af2  libstdc++-v3/testsuite/23_containers/deque/cons/self_move.cc
! 9cf26ea9bb8cb8e0017d4877f80b27ae  libstdc++-v3/testsuite/23_containers/deque/debug/90102.cc
! 3b8322e60f81d388ffb558f0220f68ab  libstdc++-v3/testsuite/23_containers/deque/debug/98466.cc
! 69eab977ac917bb3a4fa074e09133aad  libstdc++-v3/testsuite/23_containers/deque/debug/assign1_neg.cc
! edd3735fb1e849c2f526261c2b58b36d  libstdc++-v3/testsuite/23_containers/deque/debug/assign2_neg.cc
! 39585abac429d61fc7814987459b99ef  libstdc++-v3/testsuite/23_containers/deque/debug/assign3_neg.cc
! ae7aa3fcaa91d6573b57ec64ce313b0c  libstdc++-v3/testsuite/23_containers/deque/debug/assign4_neg.cc
! 6577c255116c841b3b014ddcd0f49577  libstdc++-v3/testsuite/23_containers/deque/debug/construct1_neg.cc
! f677c4f1ac4f7219663454a9e2bdf6ad  libstdc++-v3/testsuite/23_containers/deque/debug/construct2_neg.cc
! 9d9b4d63e007fa9fbf43bd9100cf9db5  libstdc++-v3/testsuite/23_containers/deque/debug/construct3_neg.cc
! 7351e7e586a9d0eef79e881f9b6949de  libstdc++-v3/testsuite/23_containers/deque/debug/construct4_neg.cc
! 4f943c3e46b55d774240b37db9dd755a  libstdc++-v3/testsuite/23_containers/deque/debug/insert1_neg.cc
! e33ad2ffffa75bebc3cb85eb79a3acbe  libstdc++-v3/testsuite/23_containers/deque/debug/insert2_neg.cc
! 390e246b3b66539dbf3c2ba4eab245a2  libstdc++-v3/testsuite/23_containers/deque/debug/insert3_neg.cc
! 94cfc1a69110c3af66adf2abde0572d5  libstdc++-v3/testsuite/23_containers/deque/debug/insert4_neg.cc
! dbf02c6265ccbaa35c5136d591d0cb27  libstdc++-v3/testsuite/23_containers/deque/debug/insert5_neg.cc
! 0959bb5e3e027a9a9108e76c17b08c1c  libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/1.cc
! 6a2f1f69be11fe4214ad4b36a965496f  libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/2.cc
! 18aea1fedd0660a48cc17ab1ce862dd5  libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/3.cc
! e8114d1769d117c368830eb0c7e39b1e  libstdc++-v3/testsuite/23_containers/deque/debug/invalidation/4.cc
! 5db4ee39c1e4539358cd55457a411626  libstdc++-v3/testsuite/23_containers/deque/debug/shrink_to_fit.cc
! ae8b2280d05e29df06d36c98cdb105da  libstdc++-v3/testsuite/23_containers/deque/erasure.cc
! 49570c8f2526d4bcac96113389bcbe2f  libstdc++-v3/testsuite/23_containers/deque/init-list.cc
! 9d5278f518894accc9b8e1dc3c4dbbd2  libstdc++-v3/testsuite/23_containers/deque/modifiers/assign/1.cc
! 0034f5fd400c9cbb1bb7d78b34c39420  libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/52799.cc
! 1aa01e2edef2f76f4833d0c90ecd0014  libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/92878_92947.cc
! 06aba31d0af36c463b4d0a9939af86fc  libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/const_iterator.cc
! f3045ecf6b8921fc4cdc9c92900777f3  libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc
! 2c76f139cc33a06edc7644f522965188  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/1.cc
! 6b3511627daf465cc60fc8d69615cd04  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/2.cc
! 6aabb3dfcd5c0201d15df1de3dab75fd  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/3.cc
! 9cb03b2c2a58dc50adc5127073eff022  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/50529.cc
! 7016dc32ffe50486f2bd365aa940d99f  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/54577.cc
! 4870658537a3453d3831b00d7527d5d0  libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/moveable.cc
! 6ae31c27e5908cfa2d1f4c740096099b  libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/const_iterator.cc
! 3b9aa5a32bf67ab0042008fa6d8cc68d  libstdc++-v3/testsuite/23_containers/deque/modifiers/moveable.cc
! e8e166780f9b869b522a72016eef838a  libstdc++-v3/testsuite/23_containers/deque/modifiers/push_back/49836.cc
! 10a2fb5fc4d7c5b6c3e29018f4e726ea  libstdc++-v3/testsuite/23_containers/deque/modifiers/push_front/49836.cc
! e3982a48f666d986900b7ef58473d776  libstdc++-v3/testsuite/23_containers/deque/modifiers/swap/1.cc
! 2be557b31c48032bb73d84af23814fb7  libstdc++-v3/testsuite/23_containers/deque/modifiers/swap/2.cc
! ed1c3a8ee9fe0aef72793c50440bb0f8  libstdc++-v3/testsuite/23_containers/deque/modifiers/swap/3.cc
! 7623f70145468d29173070a7687b9316  libstdc++-v3/testsuite/23_containers/deque/operators/1.cc
! d4e0efd9ad0b35919ebd0be9463d4339  libstdc++-v3/testsuite/23_containers/deque/operators/2.cc
! ee1633bbd5b928968597493245d0672f  libstdc++-v3/testsuite/23_containers/deque/operators/cmp_c++20.cc
! 87414158c292729105522edb452d1b5f  libstdc++-v3/testsuite/23_containers/deque/range_access.cc
! effb08ed8e9a2b2646dffc71c80521d5  libstdc++-v3/testsuite/23_containers/deque/requirements/citerators.cc
! be9cf483fd89aa390778e544553e49ab  libstdc++-v3/testsuite/23_containers/deque/requirements/do_the_right_thing.cc
! c34f5e741fa199bafaa97ee322250827  libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
! fc9c7e2498ca05585e373d44a93fe549  libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor.cc
! 3f4cf43c41db47fe73ba8243413ac1f0  libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
! 2f5c18ad34e95908d637523fc8fe4109  libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
! ed2892f318d485995e96e8430dba8a36  libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
! 994ff5e02af9cb9534164748ff5ac63d  libstdc++-v3/testsuite/23_containers/deque/requirements/exception/basic.cc
! 75ed2ba14d19d47f8776942ef0e5f48a  libstdc++-v3/testsuite/23_containers/deque/requirements/exception/generation_prohibited.cc
! 624e01eed5f661813aa1aecb11d852cf  libstdc++-v3/testsuite/23_containers/deque/requirements/exception/propagation_consistent.cc
! 01802a6138819f3ecd7ca6a4014afc54  libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/1.cc
! 958709f16c6258da98fe66f88833cdbd  libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/2.cc
! f60ae2ee7d5f7ce57b0fa9f61c71f982  libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/3.cc
! 0ed21dd901635afb7098bd3c9d02946e  libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/4.cc
! c6eaf3afab891176b15d7592396d1b8a  libstdc++-v3/testsuite/23_containers/deque/requirements/partial_specialization/1.cc
! 7260a23cd7b3d786001010bc48de141a  libstdc++-v3/testsuite/23_containers/deque/requirements/typedefs.cc
! 2c422bbd0d4db129ceaa03936746c77d  libstdc++-v3/testsuite/23_containers/deque/types/1.cc
! f14be0eb982dbd998afbfc45b16bd619  libstdc++-v3/testsuite/23_containers/deque/types/92267.cc
! 865f3b7edb053f5d69c104e37898ca36  libstdc++-v3/testsuite/23_containers/deque/types/pmr_typedefs.cc
! 549ba2fdb27a614b894e430150575397  libstdc++-v3/testsuite/23_containers/deque/types/pmr_typedefs_debug.cc
! 9c97288bb681746812d32849b0425d90  libstdc++-v3/testsuite/23_containers/forward_list/48101-2_neg.cc
! d6e50e65756d9cf4a141e60f875be74e  libstdc++-v3/testsuite/23_containers/forward_list/48101-3_neg.cc
! 99457123e20a74c7241de132be18cc01  libstdc++-v3/testsuite/23_containers/forward_list/48101_neg.cc
! 9e8a4d977b62fc97e0b23ffc49758df3  libstdc++-v3/testsuite/23_containers/forward_list/92124.cc
! 8f826a12d68f1dfecbb878fe6f2bcfe9  libstdc++-v3/testsuite/23_containers/forward_list/allocator/copy.cc
! b8a4c6be7736e950bac8955b0acfef7e  libstdc++-v3/testsuite/23_containers/forward_list/allocator/copy_assign.cc
! 148750d55b1ee66feb47de2a4f92ca05  libstdc++-v3/testsuite/23_containers/forward_list/allocator/default_init.cc
! 018bc6cd1c86b7c8ee41433116f28499  libstdc++-v3/testsuite/23_containers/forward_list/allocator/ext_ptr.cc
! 416704d953187c08b8bf874307c57267  libstdc++-v3/testsuite/23_containers/forward_list/allocator/minimal.cc
! ad554d74f93166bddb7648ac20f0a8fb  libstdc++-v3/testsuite/23_containers/forward_list/allocator/move.cc
! 7de18852dbb2a583032ac29439856cb4  libstdc++-v3/testsuite/23_containers/forward_list/allocator/move_assign.cc
! cb94c5bd7a9570fa0bc104fc9ef8111f  libstdc++-v3/testsuite/23_containers/forward_list/allocator/noexcept.cc
! a4c9f302306bb7adcffe4650769b24a5  libstdc++-v3/testsuite/23_containers/forward_list/allocator/swap.cc
! c7b86712312e13b827cb6a11f6cc2278  libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc
! 5f91b7eb6c579f209ba1141a92cb02ea  libstdc++-v3/testsuite/23_containers/forward_list/capacity/resize_size.cc
! cdefa225674e23a83258abb493afad01  libstdc++-v3/testsuite/23_containers/forward_list/cmp_c++20.cc
! 35d688e9abc24058a71f974ec4c2e0ba  libstdc++-v3/testsuite/23_containers/forward_list/comparable.cc
! 1c9aaaf9ea62b6dd2c9e0236ccb3e531  libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc
! 60b3286c9f5fb91ae105e6c81dc9242b  libstdc++-v3/testsuite/23_containers/forward_list/cons/10.cc
! 226b0ee4aa45783134b35d070ec0c3f5  libstdc++-v3/testsuite/23_containers/forward_list/cons/11.cc
! 31544f546d8e7b6bef82a140300f8f45  libstdc++-v3/testsuite/23_containers/forward_list/cons/12.cc
! 3ad69cd64361f5c4be297876a8566849  libstdc++-v3/testsuite/23_containers/forward_list/cons/13.cc
! 9907a0c86b638ce3cec30c90738ff027  libstdc++-v3/testsuite/23_containers/forward_list/cons/14.cc
! e1ff70c70ed0494d4022a1c66ee32e62  libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc
! 66d243bc36679d4404b927c10c06dea0  libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc
! b7ce9708bda0174a2e3086b49944b0de  libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc
! f02debc11136deb4cb6f5c9dd6892c19  libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc
! 1af71c109acf1b96130a1520025f2d43  libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc
! 855c5d41d7a373852d0111b2f08cdf24  libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc
! be574e6c076603a0e38ef53e496deda6  libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc
! 0eba769951bc6194cca298688ad0f0ef  libstdc++-v3/testsuite/23_containers/forward_list/cons/87809.cc
! c551825e77fa2f212cd0a860cb7999bc  libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc
! 5492a6d753fda045422bc11eb0e2e0b4  libstdc++-v3/testsuite/23_containers/forward_list/cons/cons_size.cc
! f3c2992cdb559f7274edcdeff9a989f0  libstdc++-v3/testsuite/23_containers/forward_list/cons/deduction.cc
! a6a7e24c2165d4946985c9fe34c5169f  libstdc++-v3/testsuite/23_containers/forward_list/cons/moveable.cc
! 8dd1b5878ba86acc336fe2677a9056b1  libstdc++-v3/testsuite/23_containers/forward_list/cons/noexcept_move_construct.cc
! ecd5c63849fdf42735c1122ad8beac0d  libstdc++-v3/testsuite/23_containers/forward_list/cons/self_move.cc
! 5f33de8aaa8ad2bf2c9f9cde442d9dd9  libstdc++-v3/testsuite/23_containers/forward_list/debug/60499.cc
! f5d4297b5fcb50641e2c3592b6804341  libstdc++-v3/testsuite/23_containers/forward_list/debug/90102.cc
! dd47598b72b6d0b82b2c2faa5f229721  libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc
! 7e2365068cdc62df0f425f78fd56166f  libstdc++-v3/testsuite/23_containers/forward_list/debug/construct1_neg.cc
! ee783c1f5e660e7a7b51e522ce6676c2  libstdc++-v3/testsuite/23_containers/forward_list/debug/construct2_neg.cc
! 9045cea2423d58d36827ab799b6cb2af  libstdc++-v3/testsuite/23_containers/forward_list/debug/construct3_neg.cc
! d0632f06bac2bae8c892e076f6fae009  libstdc++-v3/testsuite/23_containers/forward_list/debug/construct4_neg.cc
! 9171f1e800a9a2d9dab61763dd356405  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc
! 503ed9448b5d67661df43998032293d7  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc
! 803d2bf06c25663890f06e70af6cd7ac  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc
! 9e8b84fef928b8182c6ce0b0d005e9b4  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc
! e9289d48de4ec866e9bb7f01f36330aa  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc
! 444961006cc6eaa6137893c1417af3b1  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc
! 056e6a11483ac34b157c1f0be9bef5df  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc
! 6944eac3f3e697e587ee21eea4070afb  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc
! f9fd38cf5b1a73ef70240611755bb6eb  libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc
! 7f3ddf3bad5508aa0ccb2c3da5153c23  libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc
! 878d29fc3b162503fad4982d53819b3c  libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc
! 36239112d39323d50028f4cc43849812  libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc
! 4bad329b6d98bb528ab1b4eb982fb7c8  libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after4_neg.cc
! 62a70645b2ff8b0dd17de9d69de8501b  libstdc++-v3/testsuite/23_containers/forward_list/debug/move_assign_neg.cc
! 604254f15303a364c676a87b2b9c8c07  libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc
! 1a79b52a986c86628e73c5e4505aac39  libstdc++-v3/testsuite/23_containers/forward_list/debug/move_neg.cc
! 4826ed3efdd5b66507ddc3de149b19a7  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc
! 4b133927c316ed7d4743bf4103fe255b  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc
! 0c598184b05a5ddd8891ccb8840061cc  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc
! f7b9c6a39aca6568ad5ce041c157ab2b  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc
! 9580a843ecc1f775b54874d8d9865ef1  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc
! 4050d1f3bc05ff205f5459201a26a3e3  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after5_neg.cc
! 740a7525de2b196f07ace45ffc0a2ec2  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after6_neg.cc
! c519b88c7d7a3ffbb3e6bb9e99bd030b  libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after7_neg.cc
! 9d4f734a134b2f544954eb3cae45dc8e  libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc
! e9f8fbd88bdb1cd95aba59362c5b0651  libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc
! 9f26bffb0409b248dcb46e1c76088bb5  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc
! f579e86f8e81f8fd3eba16a2f55608ac  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc
! 47c9b8c4118756f34c8c215b1d6025a7  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc
! 7334605697124e080853fc92cb1761e1  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc
! 378d8581d79cd961384b3bc9381af218  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc
! 9d189187ef6a3506c3efdf574e2549b8  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc
! 5d69fbb2d7726766939bb106b73f6892  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/92878_92947.cc
! 861fe8f118d704f0696739e40dd33995  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/addressof.cc
! 2afe466002cdfb6820c9b9018537e27c  libstdc++-v3/testsuite/23_containers/forward_list/modifiers/emplace_cxx17_return.cc
! 613dfaa2ae6b7157962e7c6ff357c351  libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc
! 347699af3ee67c8a99494b09db452765  libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc
! cf9366ce344a2b6248b3cf07ebed7947  libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc
! f3b8ef9f67afcf87d37d5144cf41100e  libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc
! 9c843db56bda900af4fec1eb5a1f82f4  libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc
! 79d38412b065121a13e31702db82103d  libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc
! e1e05f978b11c6f38cf1e9f135c80571  libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc
! 230cd321cd5dee402a4c98ac171f0291  libstdc++-v3/testsuite/23_containers/forward_list/operations/90105.cc
! 33914a8313fc69bab4eaf86cd6ff9275  libstdc++-v3/testsuite/23_containers/forward_list/operations/91620.cc
! 7a189e8b9d2375d727e2175b911806df  libstdc++-v3/testsuite/23_containers/forward_list/operations/merge.cc
! 7a0b2f5833b3d1419fd858ff4624d381  libstdc++-v3/testsuite/23_containers/forward_list/operations/remove_cxx20_return.cc
! a4e2d644c24de875a4d5eced18e247b7  libstdc++-v3/testsuite/23_containers/forward_list/operations/remove_freed.cc
! 20b8ab702dc299a2102af64e9414984c  libstdc++-v3/testsuite/23_containers/forward_list/operations/unique_cxx20_return.cc
! 0da72059dbe86f82893746da05cc7632  libstdc++-v3/testsuite/23_containers/forward_list/pmr_typedefs.cc
! 8f56e11c41500350dfc81e67c64d946a  libstdc++-v3/testsuite/23_containers/forward_list/pmr_typedefs_debug.cc
! 15e80a6298a3ff4da9e6705b846d56d3  libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc
! e90b1308bf7af05d2e385d8e48912322  libstdc++-v3/testsuite/23_containers/forward_list/requirements/citerators.cc
! 4fb31fd370671d00fa576aadcb0eaed0  libstdc++-v3/testsuite/23_containers/forward_list/requirements/do_the_right_thing.cc
! 292c61fe45e4543780cc5e82bf7ed832  libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/assign_neg.cc
! 0870c2bb2e46ee90b3377d1c61c107cf  libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor.cc
! 3bb51a69ceb59abe7a363256de9601a9  libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_1_neg.cc
! 9b288ea290b49ae74c6709e740d70644  libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/constructor_2_neg.cc
! 6ccc884e6463e572f9d6d6b0a258d515  libstdc++-v3/testsuite/23_containers/forward_list/requirements/dr438/insert_neg.cc
! 4d881e1c9c7c1afee3ac7f5cb39d20c5  libstdc++-v3/testsuite/23_containers/forward_list/requirements/exception/basic.cc
! 13fa91f88f38de3db52e2eeee9c162fc  libstdc++-v3/testsuite/23_containers/forward_list/requirements/exception/generation_prohibited.cc
! 48935e0fe58e9b7d8fc52db66d161eaa  libstdc++-v3/testsuite/23_containers/forward_list/requirements/exception/propagation_consistent.cc
! 974d52890613dca130a3cb17b6e73f78  libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/1.cc
! aae9eec28dcc33b59b6d21812d6e766e  libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/3.cc
! 7008b1858c9fdbbbf55bfb80b7828616  libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/4.cc
! 170318a3e3c5c548460b1d4d42396bac  libstdc++-v3/testsuite/23_containers/forward_list/requirements/explicit_instantiation/5.cc
! e0c3cfdd1643a6946265ae894f3dd68f  libstdc++-v3/testsuite/23_containers/forward_list/requirements/typedefs.cc
! 63b1256690d5bb10ec348c47aa289501  libstdc++-v3/testsuite/23_containers/forward_list/types/1.cc
! 4a85216ad77b019c87c27daf52614787  libstdc++-v3/testsuite/23_containers/headers/array/std_c++0x_neg.cc
! 81a9e48c3360681b84f1da69bbb26b06  libstdc++-v3/testsuite/23_containers/headers/bitset/synopsis.cc
! a16e54083f57025fac9c0b1dcc36ad23  libstdc++-v3/testsuite/23_containers/headers/deque/synopsis.cc
! 599104caee3623e02248c5278c3a16d2  libstdc++-v3/testsuite/23_containers/headers/forward_list/synopsis.cc
! 6725d1e4c8421954a07fea87b399bbb0  libstdc++-v3/testsuite/23_containers/headers/list/synopsis.cc
! cc77d4d6e6eb72580b3643b57e4dbe81  libstdc++-v3/testsuite/23_containers/headers/map/synopsis.cc
! 679f3fe1cd350d8a4ba8a0b38760117f  libstdc++-v3/testsuite/23_containers/headers/queue/synopsis.cc
! f2849d8273dc958145302df2a0c3a51a  libstdc++-v3/testsuite/23_containers/headers/set/synopsis.cc
! ee186d2c807289491bbe5ac69e246ef9  libstdc++-v3/testsuite/23_containers/headers/stack/synopsis.cc
! e39c4cdebadea8544734531321bb2bb9  libstdc++-v3/testsuite/23_containers/headers/tuple/std_c++0x_neg.cc
! 02817372bd23f9b9b9ef9b374d80239c  libstdc++-v3/testsuite/23_containers/headers/tuple/types_std_c++0x.cc
! 7d3f3f8045da989578748f1df41194d4  libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
! 55b3d250779f180e49ef3c1b1e25002d  libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
! c44f91621f9b7c1173bec22ba8778b28  libstdc++-v3/testsuite/23_containers/headers/vector/synopsis.cc
! 930f81f7a3add60320c1f2ccad383dd9  libstdc++-v3/testsuite/23_containers/list/14340.cc
! 40d9dd1a73eb43734cb8c68b44575ec8  libstdc++-v3/testsuite/23_containers/list/18604.cc
! b1accacea8a31aa330786bbcb251d6ba  libstdc++-v3/testsuite/23_containers/list/23781_neg.cc
! deb1e0d7d24baac41910aba58673bd47  libstdc++-v3/testsuite/23_containers/list/48101-2_neg.cc
! 42bc7f487be8829457c44359acac1311  libstdc++-v3/testsuite/23_containers/list/48101-3_neg.cc
! 66ddda20457d1468de1507e7e6130562  libstdc++-v3/testsuite/23_containers/list/48101_neg.cc
! ac8e8f5e48de1ad8e0d3ff7d33aefb30  libstdc++-v3/testsuite/23_containers/list/58764.cc
! ff2d9f3965c6ece512ad291104386fed  libstdc++-v3/testsuite/23_containers/list/61347.cc
! 23a415988a2a869d17431bc98aa5f920  libstdc++-v3/testsuite/23_containers/list/68222_neg.cc
! 71f201410ca7f149decfdd2dc84a3699  libstdc++-v3/testsuite/23_containers/list/92124.cc
! 9fc1eba631145dbd3460a5222e6e6c13  libstdc++-v3/testsuite/23_containers/list/allocator/copy.cc
! 9f39e6f83a64a9695d9dadffa0f7ba1f  libstdc++-v3/testsuite/23_containers/list/allocator/copy_assign.cc
! 78a9842caa0dd073ae39cb2f6956d12d  libstdc++-v3/testsuite/23_containers/list/allocator/default_init.cc
! 6b1338119642db11edc5d4d92cac18df  libstdc++-v3/testsuite/23_containers/list/allocator/minimal.cc
! a775bd3fbdfc7008cbcd8f9bd077b12d  libstdc++-v3/testsuite/23_containers/list/allocator/move.cc
! 1ccc54565e7fa600930e018113904ef6  libstdc++-v3/testsuite/23_containers/list/allocator/move_assign.cc
! 94e9d9157ba1a23f49217120bcc90bf0  libstdc++-v3/testsuite/23_containers/list/allocator/noexcept.cc
! f381b66cce77cede1d4558638c8cae08  libstdc++-v3/testsuite/23_containers/list/allocator/swap.cc
! 338144f378f464ed9378532d3b2d9879  libstdc++-v3/testsuite/23_containers/list/capacity/1.cc
! 40ca7ab81c84587353aa984c02ab9fbd  libstdc++-v3/testsuite/23_containers/list/capacity/1.h
! c4845203061c1985a84c4e6ef330fe83  libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc
! 7978bbe8e8fc448b558d835ba7742dd5  libstdc++-v3/testsuite/23_containers/list/capacity/resize_size.cc
! 80310223d3c0daf3c4430bb295b14e4f  libstdc++-v3/testsuite/23_containers/list/check_construct_destroy.cc
! 5cdcf331744824b77fc2a5c5a70e357b  libstdc++-v3/testsuite/23_containers/list/check_construct_destroy.h
! f247819a1fb57cb43eb25e26759f316c  libstdc++-v3/testsuite/23_containers/list/cmp_c++20.cc
! 008a83ca279382cf6d1bbf53b758e56c  libstdc++-v3/testsuite/23_containers/list/cons/1.cc
! afa640ad8a026078264b431c87b8cf16  libstdc++-v3/testsuite/23_containers/list/cons/1.h
! 99eec7f94ed9c0f4ec3bc855158a0a83  libstdc++-v3/testsuite/23_containers/list/cons/2.cc
! 8c53747beda1997e5f4d7744a8db5681  libstdc++-v3/testsuite/23_containers/list/cons/2.h
! d0d467d835f25127dd16c03090303fa3  libstdc++-v3/testsuite/23_containers/list/cons/3.cc
! b1f3fcea61fae2cab17c00a2efb01c3d  libstdc++-v3/testsuite/23_containers/list/cons/3.h
! d6888e24c06bf88ae603b603a99d3544  libstdc++-v3/testsuite/23_containers/list/cons/4.cc
! 64d1cc962060e5eecc8e2475dbb9821c  libstdc++-v3/testsuite/23_containers/list/cons/4.h
! 345748012a3baa53a6f1884d7a24f80a  libstdc++-v3/testsuite/23_containers/list/cons/5.cc
! 66878add39196cd53e576211ce86ee69  libstdc++-v3/testsuite/23_containers/list/cons/5.h
! 5de1f733d01213ef8a05d4c60dbde961  libstdc++-v3/testsuite/23_containers/list/cons/55979.cc
! 5c92a318d67a9e823ef3fee9a0a64814  libstdc++-v3/testsuite/23_containers/list/cons/6.cc
! a3f034eeb286f2dcc42cf01669477cc5  libstdc++-v3/testsuite/23_containers/list/cons/6.h
! e84eba8f374b43bf73f466f2756a82dc  libstdc++-v3/testsuite/23_containers/list/cons/7.cc
! efe43b46bd1f2824edf2cb85bb144568  libstdc++-v3/testsuite/23_containers/list/cons/7.h
! 7f88545e96577216408111798e904cb3  libstdc++-v3/testsuite/23_containers/list/cons/8.cc
! 84033eb3e31946e99700f4175a033d60  libstdc++-v3/testsuite/23_containers/list/cons/8.h
! 5b3d760983585a77ad84bb24f6316f4a  libstdc++-v3/testsuite/23_containers/list/cons/87809.cc
! 0bbd3da14f6c46682406e530dce7f03b  libstdc++-v3/testsuite/23_containers/list/cons/9.cc
! 542519a4be042001da5c4010edce1f07  libstdc++-v3/testsuite/23_containers/list/cons/9.h
! 818f7e18e50c808abb4190cdc4fbea48  libstdc++-v3/testsuite/23_containers/list/cons/clear_allocator.cc
! 0eed1b9aff1dbdfdd30315ac997018fb  libstdc++-v3/testsuite/23_containers/list/cons/clear_allocator.h
! f1b3f8cdc293c3931547a697503be10f  libstdc++-v3/testsuite/23_containers/list/cons/cons_size.cc
! cfa3a7441919eed344dba7f1e608fd24  libstdc++-v3/testsuite/23_containers/list/cons/deduction.cc
! 286b0ac2e582ad3581463da47dff9b6b  libstdc++-v3/testsuite/23_containers/list/cons/moveable.cc
! 49d90c175805b3a116f629784ef2435a  libstdc++-v3/testsuite/23_containers/list/cons/moveable.h
! cee25eaa15b30dff1221d6ca0ad378e3  libstdc++-v3/testsuite/23_containers/list/cons/noexcept_move_construct.cc
! bcc3ab2831190390d4d0323eefd4147e  libstdc++-v3/testsuite/23_containers/list/cons/self_move.cc
! 0f769592494bbc54f4be4d7396b2e517  libstdc++-v3/testsuite/23_containers/list/debug/90102.cc
! 45705bcb0bd05362ca804a8929f3d720  libstdc++-v3/testsuite/23_containers/list/debug/assign1_neg.cc
! 7cfb16b43e87f8d9ea61d4a11a010a54  libstdc++-v3/testsuite/23_containers/list/debug/assign2_neg.cc
! 328910c01b1d3e150b62e8e074687cd2  libstdc++-v3/testsuite/23_containers/list/debug/assign3_neg.cc
! b246ff5f3e828e1f7072a412f0c7a820  libstdc++-v3/testsuite/23_containers/list/debug/assign4_neg.cc
! cabb48f55bc3341a81cd4f3ca09688c3  libstdc++-v3/testsuite/23_containers/list/debug/construct1_neg.cc
! 8e02557592376391d421a583ef42f68a  libstdc++-v3/testsuite/23_containers/list/debug/construct2_neg.cc
! 8b2efa4088c8caad653fe673fbb9f2e1  libstdc++-v3/testsuite/23_containers/list/debug/construct3_neg.cc
! 5d7e58f9c8188cf213b36f0bc10c75db  libstdc++-v3/testsuite/23_containers/list/debug/construct4_neg.cc
! b7e17c264c79dc89b739005172bc5e1d  libstdc++-v3/testsuite/23_containers/list/debug/insert1_neg.cc
! ef8b6ab72f0fde983f0ba8c27da1b655  libstdc++-v3/testsuite/23_containers/list/debug/insert2_neg.cc
! d707f71fe439301bce1a901c045b9cde  libstdc++-v3/testsuite/23_containers/list/debug/insert3_neg.cc
! 4b29e60f7b05f4e7e20979d34cce6516  libstdc++-v3/testsuite/23_containers/list/debug/insert4_neg.cc
! c735636f00813e98d797d3855bcd0ac5  libstdc++-v3/testsuite/23_containers/list/debug/insert5_neg.cc
! 25724b0f92290bc6c47a0d8c69544e4c  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/1.cc
! b49d5839c92ded7599a59fd79440452e  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/2.cc
! a85668685dbc7276e21dadae742ea76e  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/3.cc
! fdb4eb4456c64c27835173a59e984d6f  libstdc++-v3/testsuite/23_containers/list/debug/invalidation/4.cc
! 9da390b7a623858a8f787b6c4e6d75f4  libstdc++-v3/testsuite/23_containers/list/erasure.cc
! d6d30d09d07170a6eb520dedc46c0d6b  libstdc++-v3/testsuite/23_containers/list/init-list.cc
! 6c051c03f20331f97bcaf3b6f4cd64a1  libstdc++-v3/testsuite/23_containers/list/init-list.h
! 35b83e15d872853cd57f5f39bf70d244  libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc
! d71acc9fb4c70a3d2e4a6b65aa0f8300  libstdc++-v3/testsuite/23_containers/list/modifiers/1.h
! 07e143811930eb5c77f594aff8b933d4  libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc
! 03c15f89033fd3956a005929cd956042  libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc
! 3de3b3e6d18f637761d05af9bfd1d852  libstdc++-v3/testsuite/23_containers/list/modifiers/2.h
! 4293ff0d1ce829326504f03301d921e9  libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc
! d25b6635b03255d71ed5c110eb9027b7  libstdc++-v3/testsuite/23_containers/list/modifiers/3.h
! 8afee581c66a68b2f94906125016a858  libstdc++-v3/testsuite/23_containers/list/modifiers/addressof.cc
! 92e3a603af90854c437499ef9b831a26  libstdc++-v3/testsuite/23_containers/list/modifiers/assign/1.cc
! 40e1a1753586a34c905bfb2d8eb0eb82  libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/52799.cc
! 12c057db25765d5edb053a225d78c40f  libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/92878_92947.cc
! 81639ee17c309ead699ddcc9cdb22b14  libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/const_iterator.cc
! 7152d3ca1891e71f501363f1b22e014b  libstdc++-v3/testsuite/23_containers/list/modifiers/emplace/cxx17_return.cc
! 13115fde4dfda8892f0fa9a8fb8ba354  libstdc++-v3/testsuite/23_containers/list/modifiers/erase/54577.cc
! df75c73238ff2c8a2da1f50a46746bda  libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc
! 9ec8e653b9006564d13a1540118dcd00  libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h
! 176aeef724ca0203e15e6bb801b42316  libstdc++-v3/testsuite/23_containers/list/modifiers/insert/const_iterator.cc
! 3015f2aa4fa79a21f65376aafa638df3  libstdc++-v3/testsuite/23_containers/list/modifiers/swap/1.cc
! 13bf69fe1b4fc091ff8a0d30b88b7718  libstdc++-v3/testsuite/23_containers/list/modifiers/swap/1.h
! 48b56bd1afeb69e42d30bc0a940003d5  libstdc++-v3/testsuite/23_containers/list/modifiers/swap/2.cc
! f36651dacc79c981b4c2411dc8426d00  libstdc++-v3/testsuite/23_containers/list/modifiers/swap/2.h
! c12432bc6aafca134ea94748704264ec  libstdc++-v3/testsuite/23_containers/list/modifiers/swap/3.cc
! dc8684dce75c872eeea2b965630d197c  libstdc++-v3/testsuite/23_containers/list/modifiers/swap/3.h
! ad7783503dcff3d387db3a367e6050a7  libstdc++-v3/testsuite/23_containers/list/operations/1.cc
! e8c8be29275c80df058e01fb2f675a53  libstdc++-v3/testsuite/23_containers/list/operations/1.h
! 62df4e077b37b2bee98cd3f396df5ffb  libstdc++-v3/testsuite/23_containers/list/operations/2.cc
! ed795bfdac5f702636e6fac9b6b51a56  libstdc++-v3/testsuite/23_containers/list/operations/2.h
! ed8ef745bf93534fb3850230be5d961f  libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc
! 3c9c338dbeb53fe487244a601ca0f1f5  libstdc++-v3/testsuite/23_containers/list/operations/3.cc
! 9d0d9ba2db22b91c34653bfbec618f5a  libstdc++-v3/testsuite/23_containers/list/operations/3.h
! 5a53af622dd64c6f4e892b3d318acf4f  libstdc++-v3/testsuite/23_containers/list/operations/35969.cc
! b476816ed492ab00c8ea931b407ae8fb  libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc
! 4f1ef28897a8f7e8fb3d3bbcbdb7e4f6  libstdc++-v3/testsuite/23_containers/list/operations/4.cc
! 1d23535fd5a2e969c7bef09545c28cf0  libstdc++-v3/testsuite/23_containers/list/operations/4.h
! 26502030bed54e414b572ee64ad6b313  libstdc++-v3/testsuite/23_containers/list/operations/42352.cc
! e9b09b08be9f79aee16cdfe50434376c  libstdc++-v3/testsuite/23_containers/list/operations/66742.cc
! 2585b4364860f9190843c33818d5007e  libstdc++-v3/testsuite/23_containers/list/operations/78389.cc
! 0fa45a87eb2cf2ffffe15ba7934094e0  libstdc++-v3/testsuite/23_containers/list/operations/80034.cc
! d7c154e77c0ff95e1991026a0d80e54d  libstdc++-v3/testsuite/23_containers/list/operations/91620.cc
! a3715d586683c1a293eebcb5c5fdb47a  libstdc++-v3/testsuite/23_containers/list/operations/remove_cxx20_return.cc
! d19f543dec5c766652365379dec094cd  libstdc++-v3/testsuite/23_containers/list/operations/splice/const_iterator.cc
! 3d65cecbab6364e3886dac6d02eb6a1c  libstdc++-v3/testsuite/23_containers/list/operations/unique_cxx20_return.cc
! 358d517d11c9818c013cf86a1feeb00b  libstdc++-v3/testsuite/23_containers/list/pmr_typedefs.cc
! c94cc33339ad0a54b650c11f59f0f5b7  libstdc++-v3/testsuite/23_containers/list/pmr_typedefs_debug.cc
! 505b55bd763c783edbceb7d97dec9d1d  libstdc++-v3/testsuite/23_containers/list/pthread1.cc
! 12e485990fdc9243f341ba47be725c45  libstdc++-v3/testsuite/23_containers/list/pthread5.cc
! 761c95f925a818e2119a49748bde15a4  libstdc++-v3/testsuite/23_containers/list/range_access.cc
! a66cc0c4b3a336a6b1a631b8a19cbc0f  libstdc++-v3/testsuite/23_containers/list/requirements/citerators.cc
! 6e8fd052ba24fa53a561392864999bbf  libstdc++-v3/testsuite/23_containers/list/requirements/do_the_right_thing.cc
! a2c843a22f5766c619561b83b1dba969  libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
! 65b66ca50dea8e336f4c305d01d3efab  libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor.cc
! 2e0a0d954a8a32b39859f32bb77944f9  libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
! ce2840f08707ef3568e19d14f6d74000  libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
! 4d8bd0f3616ade2c0d87f433412b6b6e  libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
! 9a2b9604cb0a25f9a16847cf6badb827  libstdc++-v3/testsuite/23_containers/list/requirements/exception/basic.cc
! cf4e58f2e1ff637485536ccf5b8e1bba  libstdc++-v3/testsuite/23_containers/list/requirements/exception/generation_prohibited.cc
! 5c014f80d351464110bb9a2f2cfab7dd  libstdc++-v3/testsuite/23_containers/list/requirements/exception/propagation_consistent.cc
! a23439ba2dfe1fdf592a3740b9514efa  libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/1.cc
! e1e791b81105f4808779ec8b6267c2d8  libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/2.cc
! eac0849f6d006d8c06554899953ddd3a  libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/3.cc
! e903b44a5d2f25d79b9b7888aeb02f68  libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/4.cc
! c64fd10ea645190498b7f2862b9db541  libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/5.cc
! 6223474f8257cbe7266063327fa42939  libstdc++-v3/testsuite/23_containers/list/requirements/partial_specialization/1.cc
! a76e6eb3c5955a052d651224c45da376  libstdc++-v3/testsuite/23_containers/list/requirements/typedefs.cc
! 6401d6147abecef7e5cd678e979c4a86  libstdc++-v3/testsuite/23_containers/list/types/1.cc
! 494fe2e357fead0d178620b3abd64eeb  libstdc++-v3/testsuite/23_containers/map/14340.cc
! 00501f2dd0c5bb9f5ba34690517bbf2f  libstdc++-v3/testsuite/23_containers/map/18604.cc
! 125853779db7cffe56f5aa14cd5baf0e  libstdc++-v3/testsuite/23_containers/map/23781_neg.cc
! 9cb34ca7d43a314960de2f1be54e7646  libstdc++-v3/testsuite/23_containers/map/48101-2_neg.cc
! cd47a2e09b1644b9a48217b6a3c8fc94  libstdc++-v3/testsuite/23_containers/map/48101-3_neg.cc
! ee8e8aa914816b09714c1177d16ef53a  libstdc++-v3/testsuite/23_containers/map/48101_neg.cc
! 81bc9872e681e9fc5accc7fc88a7594c  libstdc++-v3/testsuite/23_containers/map/56613.cc
! 8457bb5e8495e7d6aa2e97f5219b9166  libstdc++-v3/testsuite/23_containers/map/58764.cc
! 00379d4039376c2f0dff6c028fd1a385  libstdc++-v3/testsuite/23_containers/map/59872.cc
! ecb46854afdbffad8e5c9c9ad9a470ae  libstdc++-v3/testsuite/23_containers/map/77334.cc
! 3d16409612d6612f011c5f90260ada03  libstdc++-v3/testsuite/23_containers/map/92124.cc
! 5f50e2babefa527492191e293fc29c2e  libstdc++-v3/testsuite/23_containers/map/allocator/copy.cc
! ecafee5e05ad95e83c3a47d581d759b1  libstdc++-v3/testsuite/23_containers/map/allocator/copy_assign.cc
! 71eee9de0f67e92dc48eaef089940432  libstdc++-v3/testsuite/23_containers/map/allocator/default_init.cc
! 4d5e930e0fb4a5a89cc07b12b1a6f866  libstdc++-v3/testsuite/23_containers/map/allocator/init-list.cc
! 6d70d19d8933261b92aa8fc7435df9c6  libstdc++-v3/testsuite/23_containers/map/allocator/minimal.cc
! edc498ba6c92b4569a07a1cc364f18b5  libstdc++-v3/testsuite/23_containers/map/allocator/move.cc
! 72e5bd953e1911568882ad17eec9b3ff  libstdc++-v3/testsuite/23_containers/map/allocator/move_assign.cc
! 022bf20c3bf343d07d7069ee4d0cd2de  libstdc++-v3/testsuite/23_containers/map/allocator/move_cons.cc
! 135a0c7f49a72cfde1495db063244dd1  libstdc++-v3/testsuite/23_containers/map/allocator/noexcept.cc
! 1cccd65c79dac9d1adb7662e15b5663b  libstdc++-v3/testsuite/23_containers/map/allocator/swap.cc
! fe9ef0ee8f048f928cad19414e89c601  libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc
! 16c187179e9e1a4ff16cf122fb20804e  libstdc++-v3/testsuite/23_containers/map/cons/deduction.cc
! 1d6eaa25aec7a44b8fa5d32f771013e7  libstdc++-v3/testsuite/23_containers/map/cons/moveable.cc
! 1ed2b7972c8b95b1b139b0ee9dde88e4  libstdc++-v3/testsuite/23_containers/map/cons/noexcept_default_construct.cc
! d2a2427d8ef34121545944fd21f151bb  libstdc++-v3/testsuite/23_containers/map/cons/noexcept_move_construct.cc
! 556a51320ee1552e14705e7e4ecbb30c  libstdc++-v3/testsuite/23_containers/map/debug/60499.cc
! 64d3e1513485be7f8ab86c36632257ba  libstdc++-v3/testsuite/23_containers/map/debug/90102.cc
! 81c350c460847817abd9f2a165bda769  libstdc++-v3/testsuite/23_containers/map/debug/construct1_neg.cc
! d9fd3c65d63018c0d34f41faf6acf886  libstdc++-v3/testsuite/23_containers/map/debug/construct2_neg.cc
! 0b1214350205b4b5977e9fc28f3b08d1  libstdc++-v3/testsuite/23_containers/map/debug/construct3_neg.cc
! 61e47b8df304a171d909415448834fc0  libstdc++-v3/testsuite/23_containers/map/debug/construct4_neg.cc
! 8ab5e6ad3d4b0be250478ee5eed52a1c  libstdc++-v3/testsuite/23_containers/map/debug/construct5_neg.cc
! 6ad75542318ef84c4bcf62b713471bd0  libstdc++-v3/testsuite/23_containers/map/debug/insert1_neg.cc
! dafefb5d46e1977d9478380bdf146731  libstdc++-v3/testsuite/23_containers/map/debug/insert2_neg.cc
! aa3c81661cc5ffc42b490968753fe698  libstdc++-v3/testsuite/23_containers/map/debug/insert3_neg.cc
! 04d7c6b7fb6d0423ac4e0b3d282ff2e7  libstdc++-v3/testsuite/23_containers/map/debug/insert4_neg.cc
! 6dc1128bd2ea1015a82bbceb2fea2101  libstdc++-v3/testsuite/23_containers/map/debug/invalidation/1.cc
! f2cc2ca154a00b7221106bdacb59b974  libstdc++-v3/testsuite/23_containers/map/debug/invalidation/2.cc
! 932494b0d3c4f0fe9f6355c18e41df81  libstdc++-v3/testsuite/23_containers/map/debug/move_assign_neg.cc
! 17d6ea66c7b717f29682d85e29e5bc83  libstdc++-v3/testsuite/23_containers/map/debug/move_neg.cc
! 7a925328616259734d78a7a6c22e462d  libstdc++-v3/testsuite/23_containers/map/element_access/1.cc
! 2f07173af80daa806e12f3d2c893f30e  libstdc++-v3/testsuite/23_containers/map/element_access/2.cc
! 532ce445f79f205d04cbe593739b2b14  libstdc++-v3/testsuite/23_containers/map/element_access/39901.cc
! 3eb3aad27303280f76af3f03be7a40d3  libstdc++-v3/testsuite/23_containers/map/element_access/46148.cc
! 638e20728169750461f99f0007f7f08c  libstdc++-v3/testsuite/23_containers/map/erasure.cc
! 12c9e54bdb8b7bc3c2c6afea7d0d1724  libstdc++-v3/testsuite/23_containers/map/init-list.cc
! a2fa5a1d057fba63d0586996fd4e5f8b  libstdc++-v3/testsuite/23_containers/map/modifiers/dr130.cc
! 190ea7e44e5f498d530d5f384460db60  libstdc++-v3/testsuite/23_containers/map/modifiers/emplace/1.cc
! 65c93864ca531a2dafefb20331b9de6e  libstdc++-v3/testsuite/23_containers/map/modifiers/emplace/92300.cc
! 31f967a5bb275aefe7af35363b1a2390  libstdc++-v3/testsuite/23_containers/map/modifiers/emplace/92878_92947.cc
! 10c03d16c56c505b0d533a0231f9e320  libstdc++-v3/testsuite/23_containers/map/modifiers/erase/47628.cc
! 0abbd71a92f9993b46c8436b5fd00e90  libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc
! 1ee6c8863af5b68d7f5032cd8b4ca73e  libstdc++-v3/testsuite/23_containers/map/modifiers/erase/abi_tag.cc
! e4db5ac0791dd82fdcc342c56f52f2c4  libstdc++-v3/testsuite/23_containers/map/modifiers/erase/dr130-linkage-check.cc
! fe8fcc15776949f8e68e1373fac8fdd5  libstdc++-v3/testsuite/23_containers/map/modifiers/erase/end_neg.cc
! 837bcba71c4e37be32f962e54dbfafb6  libstdc++-v3/testsuite/23_containers/map/modifiers/extract.cc
! c9eebe1a85f17f814dc8ce039bb54f10  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/1.cc
! 87bb4a3177212a8443cebe0463e45ac7  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/16813.cc
! 95024265afd7d3ccf55340bd4ddedc5c  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/2.cc
! 697d918ba611c04422572788be79c875  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/3.cc
! bce5590dc4177d3794bcbc8141dc49c1  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/4.cc
! 76c7140eb2588c716dc82ae817237b2f  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/5.cc
! 16ee8a55b9ef14176dff7dd15960bce5  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/78595.cc
! c423b3f9feda6d2258e89ab2d974ead8  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/83226.cc
! 08d4c52d7b974928c7bf742b835f3474  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/87194.cc
! 0c90bbb89e71d8600d1700a29a8e6b52  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/92300.cc
! d9943e9761bc07a076f479c9b32f9c3b  libstdc++-v3/testsuite/23_containers/map/modifiers/insert/dr2354.cc
! d97a111c9e7b7487c26b2157acbaeaa9  libstdc++-v3/testsuite/23_containers/map/modifiers/insert_or_assign/1.cc
! eebc3dd165121b6a55acfd197e30b097  libstdc++-v3/testsuite/23_containers/map/modifiers/merge.cc
! 78d23c96e677100bc1ee44f5fa3613f8  libstdc++-v3/testsuite/23_containers/map/modifiers/swap/1.cc
! 6aa4f6cd7be1b45deeedc1ddda286d11  libstdc++-v3/testsuite/23_containers/map/modifiers/swap/2.cc
! fcfbdea21a25d24c300857719bda00c5  libstdc++-v3/testsuite/23_containers/map/modifiers/swap/3.cc
! a96fb2e589e24ddd67769d0cad14d278  libstdc++-v3/testsuite/23_containers/map/modifiers/try_emplace/1.cc
! 1778bf43bddefc44ffb69f73f7a387ad  libstdc++-v3/testsuite/23_containers/map/operations/1.cc
! a3e602637bc43439d7e1786726b05300  libstdc++-v3/testsuite/23_containers/map/operations/2.cc
! 52dafdb23671c48dea9c216e8dd54209  libstdc++-v3/testsuite/23_containers/map/operations/31440.cc
! 8bc10c1154d321a07fe57685e5a5e5c0  libstdc++-v3/testsuite/23_containers/map/operations/contains.cc
! 4b07d386dc6e62ed2d4429ac0ac8b56f  libstdc++-v3/testsuite/23_containers/map/operations/count.cc
! 53e300fc73e4feec385f9d517324982a  libstdc++-v3/testsuite/23_containers/map/operators/1.cc
! c0a4d0249d05bf95361554028761852d  libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
! c039c64bb8ed4b47947c12cd1126e4c1  libstdc++-v3/testsuite/23_containers/map/operators/2.cc
! 3d3ed296f5d7819433840097dd3a6a25  libstdc++-v3/testsuite/23_containers/map/operators/cmp_c++20.cc
! cdcfbf00bd8f4629b1a65e476800953f  libstdc++-v3/testsuite/23_containers/map/pmr_typedefs.cc
! f7f6eb2b8a1845658972adca0a53e043  libstdc++-v3/testsuite/23_containers/map/pmr_typedefs_debug.cc
! d64d0f7052213c148ca270854ca2884e  libstdc++-v3/testsuite/23_containers/map/pthread6.cc
! db4593e3b9936b354716e6c01dbdc970  libstdc++-v3/testsuite/23_containers/map/range_access.cc
! e561e7afed26b4cdd161c1d6bafc7fb3  libstdc++-v3/testsuite/23_containers/map/requirements/citerators.cc
! 49fcbc383d8e526c519e5182bb7c5da6  libstdc++-v3/testsuite/23_containers/map/requirements/exception/basic.cc
! 30c4b25ffee7b8b68cf159cb9efef8af  libstdc++-v3/testsuite/23_containers/map/requirements/exception/generation_prohibited.cc
! f866932d4c269fea6756762214279665  libstdc++-v3/testsuite/23_containers/map/requirements/exception/propagation_consistent.cc
! 6a67617ff445957c8ebe3dba2dd54ea1  libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/1.cc
! 067e2a358f4b21c7c2610e758c182b86  libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/2.cc
! 6541824f7a141fcabbdfd410d7f253ca  libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/3.cc
! 4876d975cbe5d572e93874cfdc5bcc1b  libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/4.cc
! 291f02e94d5ecd3b10f8cbe8a091ee63  libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/5.cc
! e3cbe40c29eb00c19c150bcfcb597f0e  libstdc++-v3/testsuite/23_containers/map/requirements/partial_specialization/1.cc
! 3fed3e0e965496462294ee7c37bcb0c7  libstdc++-v3/testsuite/23_containers/map/requirements/typedefs.cc
! 6efbd2a4eaeb3f85a01195f40ac2d315  libstdc++-v3/testsuite/23_containers/multimap/14340.cc
! f1972ddfd4947459abcd287f5159f78d  libstdc++-v3/testsuite/23_containers/multimap/23781_neg.cc
! 9623213fd1acdfa67c836a1ade9c0150  libstdc++-v3/testsuite/23_containers/multimap/48101-2_neg.cc
! 28c6d15851100bdfd49db4f78a6ccad7  libstdc++-v3/testsuite/23_containers/multimap/48101-3_neg.cc
! 775dcac567e5bf8bae1a0f871b910ea8  libstdc++-v3/testsuite/23_containers/multimap/48101_neg.cc
! b981d1079b882dc9d379e79c71f577d6  libstdc++-v3/testsuite/23_containers/multimap/58764.cc
! 934ae0d93257e30785c03318c7f44ba7  libstdc++-v3/testsuite/23_containers/multimap/allocator/copy.cc
! dfb688360bfafbc842db5a4258fea5b7  libstdc++-v3/testsuite/23_containers/multimap/allocator/copy_assign.cc
! aa85bd6a2141fda4960e00cfc5edb546  libstdc++-v3/testsuite/23_containers/multimap/allocator/init-list.cc
! 1eeaf39ae0c6328aec3d27e4255d5d5f  libstdc++-v3/testsuite/23_containers/multimap/allocator/minimal.cc
! b717175fd28cb2c9f27673012f328449  libstdc++-v3/testsuite/23_containers/multimap/allocator/move.cc
! 54c9ef971c5ae90a336d2b62453107e1  libstdc++-v3/testsuite/23_containers/multimap/allocator/move_assign.cc
! d7d638387c8e3ca35bec33964c7588cd  libstdc++-v3/testsuite/23_containers/multimap/allocator/move_cons.cc
! 09c233cdf8164ae39b11e674163b9723  libstdc++-v3/testsuite/23_containers/multimap/allocator/noexcept.cc
! c6979664ae7e0cb3b74008bc2fce993b  libstdc++-v3/testsuite/23_containers/multimap/allocator/swap.cc
! 6658ecd46790001e6eb545dec6bffd4e  libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc
! 9fc3989fb543a9b01e92a0c23926622f  libstdc++-v3/testsuite/23_containers/multimap/cons/deduction.cc
! 565a3e22b1af662140874162290c1150  libstdc++-v3/testsuite/23_containers/multimap/cons/moveable.cc
! dec1687cd332d1b5d0135cb8177511b0  libstdc++-v3/testsuite/23_containers/multimap/cons/noexcept_default_construct.cc
! 98498ab73b09b27368b105abd99f1b9b  libstdc++-v3/testsuite/23_containers/multimap/cons/noexcept_move_construct.cc
! ba8aca209aae5110729cd7b19d2effb8  libstdc++-v3/testsuite/23_containers/multimap/debug/60499.cc
! ca87378172a7cc075172a66db7a4015a  libstdc++-v3/testsuite/23_containers/multimap/debug/90102.cc
! 5c2eaf4517295d52ff083035a53e0469  libstdc++-v3/testsuite/23_containers/multimap/debug/construct1_neg.cc
! 20440a3d1b778652748c34f1f7864855  libstdc++-v3/testsuite/23_containers/multimap/debug/construct2_neg.cc
! 2edd8220a0ef3906e316a3c2e04710eb  libstdc++-v3/testsuite/23_containers/multimap/debug/construct3_neg.cc
! e35aec733968a64cd25899e6850d2559  libstdc++-v3/testsuite/23_containers/multimap/debug/construct4_neg.cc
! 697ab2fcce57f0ba58b9ea34d388ce36  libstdc++-v3/testsuite/23_containers/multimap/debug/construct5_neg.cc
! 9c0ecf4b74561e1463c5d5e393edbf83  libstdc++-v3/testsuite/23_containers/multimap/debug/insert1_neg.cc
! a704549bcc2a578aa78182b43f14f901  libstdc++-v3/testsuite/23_containers/multimap/debug/insert2_neg.cc
! 5508f65cb7d8cc30761c76c85fa1dd4e  libstdc++-v3/testsuite/23_containers/multimap/debug/insert3_neg.cc
! 5f6f55b2a05a696bd94bdfe32b65538e  libstdc++-v3/testsuite/23_containers/multimap/debug/insert4_neg.cc
! 3d89c7806064795f797c4245a6af7f29  libstdc++-v3/testsuite/23_containers/multimap/debug/invalidation/1.cc
! ccf6c1863135b0c7e8fea049ab0297e8  libstdc++-v3/testsuite/23_containers/multimap/debug/invalidation/2.cc
! 1bc4a768df95e56649b10b8e5e0dbd03  libstdc++-v3/testsuite/23_containers/multimap/debug/move_assign_neg.cc
! 3ed00f352114cd4646fc2d22b9360eb1  libstdc++-v3/testsuite/23_containers/multimap/debug/move_neg.cc
! 6c52c32ab22a589ef609bca48105672e  libstdc++-v3/testsuite/23_containers/multimap/init-list.cc
! b8c001335fb5eecf4a8a1aa612731129  libstdc++-v3/testsuite/23_containers/multimap/modifiers/dr130.cc
! 99b3e2020442ba04541a19fd70f3c11e  libstdc++-v3/testsuite/23_containers/multimap/modifiers/emplace/1.cc
! a8228808f4b41a0a11192645f77678d5  libstdc++-v3/testsuite/23_containers/multimap/modifiers/emplace/92878_92947.cc
! e5c14c8b333c4c8eb5ea2257286418eb  libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/47628.cc
! 7c4c8ee228450ba7b98dafc4e09aacac  libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc
! 86ca22d9393f26fe30ad1927aac5a4f8  libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/abi_tag.cc
! 25660b652ba6941b24a889d8e94896c3  libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/dr130-linkage-check.cc
! 7d338674b5c14a281c73c6c222d96b40  libstdc++-v3/testsuite/23_containers/multimap/modifiers/extract.cc
! 3e9869dd73b07e859afc5131701d7c3d  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/1.cc
! ce6c4a1807e5cbe3d08af01f5df45dbd  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/2.cc
! d92bcc2460784fd040eba9728c6a7539  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/22102.cc
! 6f6a983f9e5393f1d3c0fa6f304fe4be  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/3.cc
! f7e008bfd1b68a0c5bae1c24ce9ac5ae  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/4.cc
! 82e19096681fc9efdec8df794a42aaf6  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/78595.cc
! 6065ce930083f4dbfb6265d855131d87  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/87194.cc
! 273d5698aa368f273cce3dab9068b897  libstdc++-v3/testsuite/23_containers/multimap/modifiers/insert/dr2354.cc
! 174c4d60e5d8ef73788a3700e4b56f05  libstdc++-v3/testsuite/23_containers/multimap/modifiers/merge.cc
! b1b7bb0c4664e2e4c55db7252dcecd90  libstdc++-v3/testsuite/23_containers/multimap/modifiers/swap/1.cc
! 23e4447d97882141eeb51640b8178367  libstdc++-v3/testsuite/23_containers/multimap/modifiers/swap/2.cc
! 9b369a94561557e97e4a1960bd9774d6  libstdc++-v3/testsuite/23_containers/multimap/modifiers/swap/3.cc
! 55c269a1a883b8c74a41abe62622138d  libstdc++-v3/testsuite/23_containers/multimap/operations/1.cc
! c9433a77f3e5721f54e5628bdb1762b9  libstdc++-v3/testsuite/23_containers/multimap/operations/2.cc
! 1d2833ce9925f1f3d860c066ec1d1145  libstdc++-v3/testsuite/23_containers/multimap/operations/contains.cc
! 124889795e0daf969557756acf70ff4c  libstdc++-v3/testsuite/23_containers/multimap/operations/count.cc
! b4af03f00186000865db0c6e3d332a03  libstdc++-v3/testsuite/23_containers/multimap/operators/cmp_c++20.cc
! 340359a392d8968028a806825a94dc7a  libstdc++-v3/testsuite/23_containers/multimap/pmr_typedefs.cc
! de9070d834d7e882dee6d7aae32d0a3d  libstdc++-v3/testsuite/23_containers/multimap/pmr_typedefs_debug.cc
! 415433b4edb21d1c5e798823ef12c3a7  libstdc++-v3/testsuite/23_containers/multimap/range_access.cc
! 5eae4969f1d238fc5184105a1941bf59  libstdc++-v3/testsuite/23_containers/multimap/requirements/citerators.cc
! 977467e11a16e1993cbc10a6c23a4faf  libstdc++-v3/testsuite/23_containers/multimap/requirements/exception/basic.cc
! 77bd385a66228251c67b361ca9b51bde  libstdc++-v3/testsuite/23_containers/multimap/requirements/exception/generation_prohibited.cc
! a1ed4bf6f475f37362df4c913bce071e  libstdc++-v3/testsuite/23_containers/multimap/requirements/exception/propagation_consistent.cc
! 7a68c93765c540a6bc69b40b0b71f602  libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/1.cc
! b5027b550f8b8d3f56d5a33bb1808bc7  libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/2.cc
! 75ab90b204a296e9cb0956d56edb5edb  libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/3.cc
! 36253aba32bbc34adb453479021ce32d  libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/4.cc
! 4b1ebb3042956dfb7c885bb4a728f6a7  libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/5.cc
! 8a1a48abfd3212b8a477d978d9f98e17  libstdc++-v3/testsuite/23_containers/multimap/requirements/partial_specialization/1.cc
! 836aa73eedc584d61725aa9888524545  libstdc++-v3/testsuite/23_containers/multimap/requirements/typedefs.cc
! 75c9a2bd180e2ac64e3da7d53f5089c0  libstdc++-v3/testsuite/23_containers/multiset/14340.cc
! 5a403affa80a0cad781b064d6e90766e  libstdc++-v3/testsuite/23_containers/multiset/23781_neg.cc
! 369eab0a9ffc9726cf252f1f2a3b5d9f  libstdc++-v3/testsuite/23_containers/multiset/48101-2_neg.cc
! db60aa8daaf4ce7d0313056fc4ce2182  libstdc++-v3/testsuite/23_containers/multiset/48101-3_neg.cc
! 9f400468bd4ff07bc37130e40b4f61f6  libstdc++-v3/testsuite/23_containers/multiset/48101_neg.cc
! 6dffede4803e08576e34bb538d6cf059  libstdc++-v3/testsuite/23_containers/multiset/58764.cc
  c599e48655ea2e75c592ab5a1cf5ae3c  libstdc++-v3/testsuite/23_containers/multiset/allocator/103501.cc
! 9ffe491dee3d1dce5fe4bb22d83247c1  libstdc++-v3/testsuite/23_containers/multiset/allocator/copy.cc
! da8a0576f428ebf5238a9bd91f0ff890  libstdc++-v3/testsuite/23_containers/multiset/allocator/copy_assign.cc
! 1ccfa28e5145323020b613ddd52569d1  libstdc++-v3/testsuite/23_containers/multiset/allocator/init-list.cc
! f74287f6216b7c5597ce4f23d6dde1da  libstdc++-v3/testsuite/23_containers/multiset/allocator/minimal.cc
! a8a47918010954d3c72029deb163b6ca  libstdc++-v3/testsuite/23_containers/multiset/allocator/move.cc
! 1977973f4986962201a6a0d2729c35d4  libstdc++-v3/testsuite/23_containers/multiset/allocator/move_assign.cc
! a4e939e31401b1bac53bc2fa007ebe66  libstdc++-v3/testsuite/23_containers/multiset/allocator/move_cons.cc
! 916fcf5554ca884175d5a8c1bad6bc88  libstdc++-v3/testsuite/23_containers/multiset/allocator/noexcept.cc
! 4067258f678948ff3f959e7e7301235b  libstdc++-v3/testsuite/23_containers/multiset/allocator/swap.cc
! 86bac0a1d0574b964a682a9b54508e87  libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc
! bbb896871fd7c7c3f4be6d45db152294  libstdc++-v3/testsuite/23_containers/multiset/cons/deduction.cc
! 4c82c06c2ec2e26e18f6a33546fc7eff  libstdc++-v3/testsuite/23_containers/multiset/cons/moveable.cc
! 92811a4d0a2fe53dc530b101432e17c1  libstdc++-v3/testsuite/23_containers/multiset/cons/noexcept_default_construct.cc
! a04e7a0f3aa0f5cd21edd967b84fed96  libstdc++-v3/testsuite/23_containers/multiset/cons/noexcept_move_construct.cc
! fd30b20ddde91d1eb5adea9ce6fa2e1b  libstdc++-v3/testsuite/23_containers/multiset/debug/60499.cc
! cc500aa3a1786879d19a1e14896e3977  libstdc++-v3/testsuite/23_containers/multiset/debug/90102.cc
! 3a24e567146257062e47442dbe9b37d3  libstdc++-v3/testsuite/23_containers/multiset/debug/construct1_neg.cc
! 7cac63844bc3240c3d23449ab3a4bd8f  libstdc++-v3/testsuite/23_containers/multiset/debug/construct2_neg.cc
! 15ec2f3372fa2f6b84d1e72e4cc507b2  libstdc++-v3/testsuite/23_containers/multiset/debug/construct3_neg.cc
! 720192b3717a6a16cc333b78a285ce9f  libstdc++-v3/testsuite/23_containers/multiset/debug/construct4_neg.cc
! 2096c65158f1c0bb54c2dd277700768b  libstdc++-v3/testsuite/23_containers/multiset/debug/construct5_neg.cc
! a4e18d095c769ee8faa90342e9c807a3  libstdc++-v3/testsuite/23_containers/multiset/debug/insert1_neg.cc
! 249248c5e18e59207995c91d8ab709d0  libstdc++-v3/testsuite/23_containers/multiset/debug/insert2_neg.cc
! 178597ab84d3745e5d83c685fb86ed7c  libstdc++-v3/testsuite/23_containers/multiset/debug/insert3_neg.cc
! cf66d34b553d92499f465e4b20a68307  libstdc++-v3/testsuite/23_containers/multiset/debug/insert4_neg.cc
! b90033bf134172fa5857680599d4fb43  libstdc++-v3/testsuite/23_containers/multiset/debug/invalidation/1.cc
! 619536bf04cd33ef5e21b47d06d42f05  libstdc++-v3/testsuite/23_containers/multiset/debug/invalidation/2.cc
! 1f2057626117ba0f2fef313ab9121fa9  libstdc++-v3/testsuite/23_containers/multiset/debug/move_assign_neg.cc
! 8c45857d459b7057a803a299991cac30  libstdc++-v3/testsuite/23_containers/multiset/debug/move_neg.cc
! 1bdeadc0b50cc91e2151afcdb2371adf  libstdc++-v3/testsuite/23_containers/multiset/init-list.cc
! 4c36e202d6abd8306550ce348e12b0cd  libstdc++-v3/testsuite/23_containers/multiset/modifiers/dr130.cc
! cea6cf805e4009657d1c4634153f8ce3  libstdc++-v3/testsuite/23_containers/multiset/modifiers/emplace/1.cc
! 04dd6410ae9c4467847c20d2676d0459  libstdc++-v3/testsuite/23_containers/multiset/modifiers/emplace/92878_92947.cc
! 6cf6417fbaa74c1aedf488f0217ccd92  libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc
! edf55d4a874db3c57e79e2ea7378c34f  libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/abi_tag.cc
! 9a37b801ba4cbb3bc5568ec8203a9342  libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/dr130-linkage-check.cc
! 2c42a401dce06c4cb767ebba319c0a42  libstdc++-v3/testsuite/23_containers/multiset/modifiers/extract.cc
! 349776cb07cded000e47a5d33cca8761  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/1.cc
! 3bf7a5872b33c09c0cdce05a7b45bb5f  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/2.cc
! b96383198f4a6376f0987f38125f33c6  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/22102.cc
! c63a9cae80fdb9e99bd9162b7aa02d55  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/3.cc
! fdc18e98042667064b5d0292ad77ec10  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/4.cc
! f34268a376ec6e97b98994d334efe8d7  libstdc++-v3/testsuite/23_containers/multiset/modifiers/insert/87194.cc
! f21db464ef0c4c0675896ff98d9036c7  libstdc++-v3/testsuite/23_containers/multiset/modifiers/merge.cc
! 7a36a1366e8dce01719d3663aaa01c47  libstdc++-v3/testsuite/23_containers/multiset/modifiers/swap/1.cc
! d9d5a2676f2445884fb8b25f03df72a5  libstdc++-v3/testsuite/23_containers/multiset/modifiers/swap/2.cc
! ed9f0d05687daaabb207ef4785a28373  libstdc++-v3/testsuite/23_containers/multiset/modifiers/swap/3.cc
! 84f00a75bcd517d8d2713a7fc47b1bf4  libstdc++-v3/testsuite/23_containers/multiset/operations/1.cc
! 8be44dff1b02440e523eebdf69ebcf09  libstdc++-v3/testsuite/23_containers/multiset/operations/2.cc
! d98f280ea6a8854f780c80fe450997ce  libstdc++-v3/testsuite/23_containers/multiset/operations/contains.cc
! 65abbcbb0f7a9799a949ac0eba9eb3ff  libstdc++-v3/testsuite/23_containers/multiset/operations/count.cc
! 53f61ca3014c535b371ec0003be08a72  libstdc++-v3/testsuite/23_containers/multiset/operators/cmp_c++20.cc
! 5029dd460eca1b7bb3cec79a7153dcb4  libstdc++-v3/testsuite/23_containers/multiset/pmr_typedefs.cc
! 518695ff7e7f8940351d37e1209c9355  libstdc++-v3/testsuite/23_containers/multiset/pmr_typedefs_debug.cc
! 47748d9c811fb4cbc84778f2dff1bd76  libstdc++-v3/testsuite/23_containers/multiset/range_access.cc
! 281b4779e9a9a7cf895314c2ca705b84  libstdc++-v3/testsuite/23_containers/multiset/requirements/citerators.cc
! e9d3a58716eff963c2194f858bee9661  libstdc++-v3/testsuite/23_containers/multiset/requirements/exception/basic.cc
! dfff517accc762ef737bfec237587c20  libstdc++-v3/testsuite/23_containers/multiset/requirements/exception/generation_prohibited.cc
! d30c56e3bb91f40c89b68c3d617a53ad  libstdc++-v3/testsuite/23_containers/multiset/requirements/exception/propagation_consistent.cc
! 35433fecc647a2c8879e244f42575f2a  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/1.cc
! 87a2903f2679ed14ad9367bfbd6d5857  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/1_c++0x.cc
! c6fa183e0a4e72232ed33735de49c51e  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/2.cc
! 85ffdffd6e43c6106b799652ffea71b5  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/3.cc
! 49a756c6b6a9a0c8d65a6a8145d0d990  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/4.cc
! 59ec91045f74da6ae2395186939e0de0  libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/5.cc
! 575033997250687214cbd42e31afabbe  libstdc++-v3/testsuite/23_containers/multiset/requirements/partial_specialization/1.cc
! 51bc9e25c22f05d9257766c8e4e231d7  libstdc++-v3/testsuite/23_containers/multiset/requirements/typedefs.cc
! 4c7a5e78fc3ca1fb7cc5abe957ab0852  libstdc++-v3/testsuite/23_containers/priority_queue/67085.cc
! 5ef6644387d8d7992e528ad0fa7cdeee  libstdc++-v3/testsuite/23_containers/priority_queue/77528.cc
! 53d0d778dbf801f3ed5438c04100e95e  libstdc++-v3/testsuite/23_containers/priority_queue/92878_92947.cc
! 312751999b9ec770146dc234a76afdc2  libstdc++-v3/testsuite/23_containers/priority_queue/allocator.cc
! b58eb98c3e69effa35a5d8d7d066fbc1  libstdc++-v3/testsuite/23_containers/priority_queue/deduction.cc
! 28d0fa9892d646aac8d9787234f3b3a3  libstdc++-v3/testsuite/23_containers/priority_queue/dr2537.cc
! d28290e2547d3a24b7652041265d30c0  libstdc++-v3/testsuite/23_containers/priority_queue/lwg3506.cc
! 1b78335293495d23cdfab47884650bc1  libstdc++-v3/testsuite/23_containers/priority_queue/lwg3522.cc
! a0bec79150ce876cf8e27c12caf9e151  libstdc++-v3/testsuite/23_containers/priority_queue/lwg3529.cc
! 20888f2e028bfbc0a48c88035fcaed72  libstdc++-v3/testsuite/23_containers/priority_queue/members/7161.cc
! c7e0f8a4afacf0d22ca0254f1b4c5df7  libstdc++-v3/testsuite/23_containers/priority_queue/moveable.cc
! 4c165d6966a737c39c8e6f886adac197  libstdc++-v3/testsuite/23_containers/priority_queue/requirements/constructible.cc
! 805d5c52cfec20b4b02f24cd28f0cb7f  libstdc++-v3/testsuite/23_containers/priority_queue/requirements/explicit_instantiation/1.cc
! 4b526b02e2f291d075101128c676155b  libstdc++-v3/testsuite/23_containers/priority_queue/requirements/explicit_instantiation/1_c++98.cc
! c27bbd874b0c9adc1c08da96a51362f8  libstdc++-v3/testsuite/23_containers/priority_queue/requirements/typedefs.cc
! 07722d3d571442d492d923d0673eab3b  libstdc++-v3/testsuite/23_containers/priority_queue/requirements/uses_allocator.cc
! 49c2c33cd6ae9cf720b669298e0b04a0  libstdc++-v3/testsuite/23_containers/queue/77528.cc
! 1dac54f07d4c4c2f883dba1ff2ff2b0d  libstdc++-v3/testsuite/23_containers/queue/92878_92947.cc
! 9691fd542503499d1f7e9f041587cd5b  libstdc++-v3/testsuite/23_containers/queue/cmp_c++20.cc
! 636a9701d7b852e2fe759bb9418e24ee  libstdc++-v3/testsuite/23_containers/queue/cons_from_iters.cc
! 088e77eb0d6f6338362e617e125236cc  libstdc++-v3/testsuite/23_containers/queue/deduction.cc
! e3b6e5147cdfa1f86db2cb6d8a500331  libstdc++-v3/testsuite/23_containers/queue/members/7157.cc
! a19bb4c1d7d5e1f94114811f36107416  libstdc++-v3/testsuite/23_containers/queue/members/emplace_cxx17_return.cc
! e9ff8403bf68a662df70f8f04711aea5  libstdc++-v3/testsuite/23_containers/queue/moveable.cc
! 6ec90a84064d067812126c68016bd8e5  libstdc++-v3/testsuite/23_containers/queue/requirements/constructible.cc
! ce7f9d5a80890311cde59ebc5c2d968a  libstdc++-v3/testsuite/23_containers/queue/requirements/explicit_instantiation/1.cc
! de3acd0879efa9bfc1507891bc2c3594  libstdc++-v3/testsuite/23_containers/queue/requirements/explicit_instantiation/1_c++98.cc
! d37ced4e057711b82c5fa37aad071bfd  libstdc++-v3/testsuite/23_containers/queue/requirements/typedefs.cc
! 0512179f15bf56a5998a4509038d1880  libstdc++-v3/testsuite/23_containers/queue/requirements/uses_allocator.cc
! 22e8a76964f4085c923a2dc34ffaf1db  libstdc++-v3/testsuite/23_containers/set/14340.cc
! 82542a4d9914b47ffdf044ab0abfd482  libstdc++-v3/testsuite/23_containers/set/18604.cc
! e46001bc2bada14a2bc4ccf81da51b64  libstdc++-v3/testsuite/23_containers/set/23781_neg.cc
! aff828ba204169f5b6fac3bb81583a66  libstdc++-v3/testsuite/23_containers/set/48101-2_neg.cc
! 7cc2721dd9f8b9055a47fb4887462d13  libstdc++-v3/testsuite/23_containers/set/48101-3_neg.cc
! a4ae070b4b757202682fc8994b61029d  libstdc++-v3/testsuite/23_containers/set/48101_neg.cc
! 6311cfb06c258e3e0d59b68a03d8ffc9  libstdc++-v3/testsuite/23_containers/set/58764.cc
! 5658264318ee000b1bcab05ea88f4f35  libstdc++-v3/testsuite/23_containers/set/85965.cc
! 1555a7367285c5b1d6d1ca81c7d3b6dd  libstdc++-v3/testsuite/23_containers/set/92124.cc
  4934612c2b7203e0e300739be2067260  libstdc++-v3/testsuite/23_containers/set/allocator/103501.cc
! c677579d2b170768faafda6e67265d40  libstdc++-v3/testsuite/23_containers/set/allocator/71964.cc
! 200a3ec4f8ab1607385d325dd17c58de  libstdc++-v3/testsuite/23_containers/set/allocator/copy.cc
! db378957b377adce16d990444a55af7a  libstdc++-v3/testsuite/23_containers/set/allocator/copy_assign.cc
! 1698217b3a17b1feb905d0cf14464c03  libstdc++-v3/testsuite/23_containers/set/allocator/default_init.cc
! 848371f746b2fc8f386ba9c5a82a8031  libstdc++-v3/testsuite/23_containers/set/allocator/init-list.cc
! e15d5d2e18bbd1967f3eeaa04ded3bf7  libstdc++-v3/testsuite/23_containers/set/allocator/minimal.cc
! 0740c1899b416a8ba0db940e83c03db7  libstdc++-v3/testsuite/23_containers/set/allocator/move.cc
! 06d72faf7664c98fab73ba16b388c4fb  libstdc++-v3/testsuite/23_containers/set/allocator/move_assign.cc
! a49935fb238f5b7a78c10248cd5720b0  libstdc++-v3/testsuite/23_containers/set/allocator/move_cons.cc
! dd4ce99aa3f9c961ed4d6061d32552e9  libstdc++-v3/testsuite/23_containers/set/allocator/noexcept.cc
! 2990a4780cbbede7c4d465576e9e8e3d  libstdc++-v3/testsuite/23_containers/set/allocator/swap.cc
! 7e050b43e2bbf164d904cfcd4bd4ac03  libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc
! 895545eba9cafc20af99165f6759bf65  libstdc++-v3/testsuite/23_containers/set/check_construct_destroy.cc
! 5ea4a827bffbc972e19d7f9246fc55ff  libstdc++-v3/testsuite/23_containers/set/cons/61023.cc
! 481e4d5cd05c18aecc038aaa29dea042  libstdc++-v3/testsuite/23_containers/set/cons/deduction.cc
! de01351e7ab138ea2c833a03f34ebd8f  libstdc++-v3/testsuite/23_containers/set/cons/moveable.cc
! 2103836a1624ae56da522dd6904a82ed  libstdc++-v3/testsuite/23_containers/set/cons/noexcept_default_construct.cc
! 114cf068345b516b50d28afd936c6da7  libstdc++-v3/testsuite/23_containers/set/cons/noexcept_move_construct.cc
! 7fe972374e7fffaf967aebd200fc3655  libstdc++-v3/testsuite/23_containers/set/cons/self_move.cc
! 6186975b9eeb309a4b60c4ff15e2f9f9  libstdc++-v3/testsuite/23_containers/set/debug/60499.cc
! 6db14899579486ad5d31096337a4b9e6  libstdc++-v3/testsuite/23_containers/set/debug/90102.cc
! f9f2fa10085d459bdac16030cf2bf33c  libstdc++-v3/testsuite/23_containers/set/debug/construct1_neg.cc
! 99ad87ac484ef5f950b5ba1894b1e351  libstdc++-v3/testsuite/23_containers/set/debug/construct2_neg.cc
! 77d9445a105ebf72bb0319b968972509  libstdc++-v3/testsuite/23_containers/set/debug/construct3_neg.cc
! 1e25d87f296932f858c08adfc8d2f87c  libstdc++-v3/testsuite/23_containers/set/debug/construct4_neg.cc
! 35db01b165e00f7b99c6189916416477  libstdc++-v3/testsuite/23_containers/set/debug/construct5_neg.cc
! 055fe509d93f0683084981809e2d5b4e  libstdc++-v3/testsuite/23_containers/set/debug/insert1_neg.cc
! ac18099ff293e0ad5ddff785aa42ad2c  libstdc++-v3/testsuite/23_containers/set/debug/insert2_neg.cc
! 8d3960d3c895af35bba7cb478ecc98f4  libstdc++-v3/testsuite/23_containers/set/debug/insert3_neg.cc
! 73e2a2bd262d12356c1b51bb5380a82e  libstdc++-v3/testsuite/23_containers/set/debug/insert4_neg.cc
! a97381ea5bd9d71f1b2acb4fac3c8d3a  libstdc++-v3/testsuite/23_containers/set/debug/invalidation/1.cc
! 10d10c07c44421ef68c5bd8c2b4a2302  libstdc++-v3/testsuite/23_containers/set/debug/invalidation/2.cc
! 79b094c197eb2c4eb556ab442eedf5e0  libstdc++-v3/testsuite/23_containers/set/debug/move_assign_neg.cc
! eec660a30623e93c2c265aa52e826178  libstdc++-v3/testsuite/23_containers/set/debug/move_neg.cc
! 59200844b85aee3bc4abee6c07f31c7e  libstdc++-v3/testsuite/23_containers/set/erasure.cc
! 4378e383c4836188ab85292183733169  libstdc++-v3/testsuite/23_containers/set/init-list.cc
! ca83c2cd9ba50771210d79b9e9e26a9b  libstdc++-v3/testsuite/23_containers/set/modifiers/16728.cc
! 56efde33fea333b0aafe8a6d145a9d1a  libstdc++-v3/testsuite/23_containers/set/modifiers/17948.cc
! 9bf1d5e6b5c7ccdbe887e1aa22a6188d  libstdc++-v3/testsuite/23_containers/set/modifiers/dr130.cc
! 3766e702e05a1f872585924ed0fdcc80  libstdc++-v3/testsuite/23_containers/set/modifiers/emplace/1.cc
! 69a1a669fc493025f3825f3be61f714c  libstdc++-v3/testsuite/23_containers/set/modifiers/emplace/92878_92947.cc
! 5f75b5bd07e065984aa94f3c3538920e  libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc
! d381d4bdcb84fab98eb3147b812a9b40  libstdc++-v3/testsuite/23_containers/set/modifiers/erase/abi_tag.cc
! 8a9f0a9ecab138a5d7fccfc92df56070  libstdc++-v3/testsuite/23_containers/set/modifiers/erase/dr130-linkage-check.cc
! 31568341d3849d60ba302625b84947da  libstdc++-v3/testsuite/23_containers/set/modifiers/extract.cc
! 548a702b8144c97b061c44874c86d0f2  libstdc++-v3/testsuite/23_containers/set/modifiers/insert/1.cc
! 599b345e793e3ea3c8045f8acc961644  libstdc++-v3/testsuite/23_containers/set/modifiers/insert/2.cc
! f6f826f43a7cd9d863f377e1622fbc5f  libstdc++-v3/testsuite/23_containers/set/modifiers/insert/3.cc
! ef4a3c8268c369e2d7007fc94ff6f043  libstdc++-v3/testsuite/23_containers/set/modifiers/insert/87194.cc
! 7cb24c43334e439162f41e68b81d4a80  libstdc++-v3/testsuite/23_containers/set/modifiers/merge.cc
! f3125a81a2cade36503d845c5a143cf5  libstdc++-v3/testsuite/23_containers/set/modifiers/node_swap.cc
! bed5c55781fb945ccd60e15fee8bdbbe  libstdc++-v3/testsuite/23_containers/set/modifiers/swap/1.cc
! bd025158dd72ce8a1a3a768fcb931063  libstdc++-v3/testsuite/23_containers/set/modifiers/swap/2.cc
! 3294a4c45be4d807cbb334d45c604548  libstdc++-v3/testsuite/23_containers/set/modifiers/swap/3.cc
! 5bbe38e856607107b45c18a40672de62  libstdc++-v3/testsuite/23_containers/set/move_comparison.cc
! df63c0274d4dfa5820257ae12a458e21  libstdc++-v3/testsuite/23_containers/set/operations/1.cc
! ff104ca544f9a400383ea3f5cc7aaba4  libstdc++-v3/testsuite/23_containers/set/operations/2.cc
! 0b9ee1c22ce239c31584a6897a5c2e8c  libstdc++-v3/testsuite/23_containers/set/operations/contains.cc
! 54c9350e8677f40859ca2349625c5e07  libstdc++-v3/testsuite/23_containers/set/operations/count.cc
! 8f9aa9261333422c02358269d3d9ed38  libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
! 41558c5f85d79681ddc3148a1c8811b0  libstdc++-v3/testsuite/23_containers/set/operators/cmp_c++20.cc
! 93bae918875d775f8d5b633796f0519b  libstdc++-v3/testsuite/23_containers/set/pmr_typedefs.cc
! 391484995372b353c98a01f5ab728c2a  libstdc++-v3/testsuite/23_containers/set/pmr_typedefs_debug.cc
! eeb05c6d39e9bf3d513697da44cd3f7b  libstdc++-v3/testsuite/23_containers/set/range_access.cc
! 332dc27211ed6e16164e24a94ba266fc  libstdc++-v3/testsuite/23_containers/set/requirements/citerators.cc
! 6d20779bfcc2e21172300965b202d53c  libstdc++-v3/testsuite/23_containers/set/requirements/exception/basic.cc
! a82fe29e417f269fdd13e754f5696625  libstdc++-v3/testsuite/23_containers/set/requirements/exception/generation_prohibited.cc
! 3378622a2ddc4ba4588241b1822a8109  libstdc++-v3/testsuite/23_containers/set/requirements/exception/propagation_consistent.cc
! d1a69df3ff5af44b4fc379a35eed68f4  libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/1.cc
! 0b6a8639881c04184f436814d953d6a2  libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/2.cc
! 15ccc00db108869f02351fe598a83be5  libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/3.cc
! bf862897203f922e23e6e6f7c34eb488  libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/4.cc
! 4cffa661fb701c676f2c948482d8d0b0  libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/5.cc
! 5afd6557aa4e94aeafbccac635513312  libstdc++-v3/testsuite/23_containers/set/requirements/partial_specialization/1.cc
! d37b503527aad4f5ca7893f408e04af0  libstdc++-v3/testsuite/23_containers/set/requirements/typedefs.cc
! f14c16459ad476e5964d3cef75748e25  libstdc++-v3/testsuite/23_containers/span/1.cc
! 62d71e263b54ca463af9228fd31a5f0f  libstdc++-v3/testsuite/23_containers/span/101411.cc
! 75cfae1e2074f67939bd49cbd8b223f6  libstdc++-v3/testsuite/23_containers/span/2.cc
! cd56d2fbbac10823b34a63ab0afe0ae1  libstdc++-v3/testsuite/23_containers/span/back_assert_neg.cc
! 1715719f54d0cc8f96ee1d973758a9e0  libstdc++-v3/testsuite/23_containers/span/back_neg.cc
  06a45501dcaec8e13d6ae1e6ee40d1b7  libstdc++-v3/testsuite/23_containers/span/cons_1_assert_neg.cc
  b500468357c8536c575705ba4a6c389f  libstdc++-v3/testsuite/23_containers/span/cons_2_assert_neg.cc
! 82ff24ba854ff591a9683eee8c73620e  libstdc++-v3/testsuite/23_containers/span/contiguous_range_neg.cc
! 5b5d9aa1517fa244f6d69b9b813da667  libstdc++-v3/testsuite/23_containers/span/deduction.cc
! 1f4dac686d5d8b9cfe46d8a772954bb0  libstdc++-v3/testsuite/23_containers/span/everything.cc
! bc2074d437170093c73e9d473f5630a6  libstdc++-v3/testsuite/23_containers/span/explicit.cc
! 187585a5d2a2fec327e2004d794bcb4e  libstdc++-v3/testsuite/23_containers/span/first_2_assert_neg.cc
! 584c35be17f35242bc572fa2875df9a0  libstdc++-v3/testsuite/23_containers/span/first_assert_neg.cc
! e9ea80b420cf2fd67a41ba992d0444ba  libstdc++-v3/testsuite/23_containers/span/first_neg.cc
! 484856060a9da84e29b90e6d11bc482b  libstdc++-v3/testsuite/23_containers/span/front_assert_neg.cc
! 4d8381e3d6317423d9cb17d5a2188be2  libstdc++-v3/testsuite/23_containers/span/front_neg.cc
! 61c6bf4195462886063df5e0dcfb51b9  libstdc++-v3/testsuite/23_containers/span/index_op_assert_neg.cc
! ccd7c561ee656bc1ec975ed71de93d7e  libstdc++-v3/testsuite/23_containers/span/index_op_neg.cc
! 195b150e813a21fe7fbd40fecb3c0538  libstdc++-v3/testsuite/23_containers/span/last_2_assert_neg.cc
! 29542f518cdc1e6ae000dc39f39a96d9  libstdc++-v3/testsuite/23_containers/span/last_assert_neg.cc
! 94ba8093aff6de9eaecd36e5a15c9923  libstdc++-v3/testsuite/23_containers/span/last_neg.cc
! 055d1579166b694ba6f295dbb79abb20  libstdc++-v3/testsuite/23_containers/span/layout_compat.cc
! be264dec031af8977eb90af0c2a20da7  libstdc++-v3/testsuite/23_containers/span/lwg3255.cc
! e3b4fa7a646feb71f54687d5342d0083  libstdc++-v3/testsuite/23_containers/span/nothrow_cons.cc
! 81f88380790fc35a3bf062dd25574499  libstdc++-v3/testsuite/23_containers/span/subspan_2_assert_neg.cc
! eabb40ad7d4726f222d93dbce6eca01b  libstdc++-v3/testsuite/23_containers/span/subspan_3_assert_neg.cc
! d189681a5a19f4e590a217b0bb7079ee  libstdc++-v3/testsuite/23_containers/span/subspan_4_assert_neg.cc
! 89750abc0cbad04ddc294b819ee205c6  libstdc++-v3/testsuite/23_containers/span/subspan_5_assert_neg.cc
! c8923f5c17751805f7fd8007c81fa469  libstdc++-v3/testsuite/23_containers/span/subspan_6_assert_neg.cc
! 0d35f1610fb1676b14fcdb30919fca8a  libstdc++-v3/testsuite/23_containers/span/subspan_assert_neg.cc
! 781b6089219ff83f209d57fb1c5f9b80  libstdc++-v3/testsuite/23_containers/span/subspan_neg.cc
  d19a170b5f7ab02157733005cb76fef1  libstdc++-v3/testsuite/23_containers/span/trivially_copyable.cc
! 2882beb77aaf2f14a9b9d6504e3ab935  libstdc++-v3/testsuite/23_containers/stack/77528.cc
! 4aac612dc9eb65bf6d77a7b4b89922ee  libstdc++-v3/testsuite/23_containers/stack/92878_92947.cc
! 2babe9cecb26524afedb537784236adc  libstdc++-v3/testsuite/23_containers/stack/cmp_c++20.cc
! 21d2ff38f040f85a916fb18deec098ee  libstdc++-v3/testsuite/23_containers/stack/cons_from_iters.cc
! a09100a85ffcb4b082b6599350f413f3  libstdc++-v3/testsuite/23_containers/stack/deduction.cc
! 7f4a4b24940a4283db62042462a06ca1  libstdc++-v3/testsuite/23_containers/stack/members/7158.cc
! b836ee7dbaca69d874bff8f6e5aa6949  libstdc++-v3/testsuite/23_containers/stack/members/emplace_cxx17_return.cc
! 4b9fbc29472fe32bc64de2c5c344a426  libstdc++-v3/testsuite/23_containers/stack/requirements/constructible.cc
! b67bc31023d9643e4fbf5f93d061dc6e  libstdc++-v3/testsuite/23_containers/stack/requirements/explicit_instantiation/1.cc
! 645699a297d28ff7d55437af736cd23c  libstdc++-v3/testsuite/23_containers/stack/requirements/explicit_instantiation/1_c++98.cc
! 2b378072bc4f4196769298bd203ded4b  libstdc++-v3/testsuite/23_containers/stack/requirements/typedefs.cc
! 63f281bfad99e183bef12d3f9f4f6226  libstdc++-v3/testsuite/23_containers/stack/requirements/uses_allocator.cc
! 8095490ebaf0100077d254e713821ec0  libstdc++-v3/testsuite/23_containers/unordered_map/104174.cc
! 11fdb4f2310891c3f8e057f1918c0ba0  libstdc++-v3/testsuite/23_containers/unordered_map/48101-2_neg.cc
! 7d0e548912c2355c1c67637648acf0c5  libstdc++-v3/testsuite/23_containers/unordered_map/48101-3_neg.cc
! 4f43cf757e1493c5ca4327b5746d9a19  libstdc++-v3/testsuite/23_containers/unordered_map/48101_neg.cc
! 514922f740ddce4b0aab4e7747bbb9a0  libstdc++-v3/testsuite/23_containers/unordered_map/55043.cc
! f69c62ff84fe9bfbe7c626e485444cfe  libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc
! de14e2cb771b997aa14cda312541c014  libstdc++-v3/testsuite/23_containers/unordered_map/96088.cc
! 2fdd8df717b4168aab14ac6536f7f7ff  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/copy.cc
! bfc946af98468822c57baa626927817d  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/copy_assign.cc
! 4ffefe7a6df078a897b74a9729c6ef48  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/default_init.cc
! 88a2d93347832850cc533bf82eaba1be  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/minimal.cc
! 9563181990fb6995d6a1b61cb4176f14  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/move.cc
! 2e220ef8ce7953def55f6efba403f7fa  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/move_assign.cc
! c37144b0c6218455be531538cc7eb98b  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/noexcept.cc
! d7faf770e50c28fea4d589bcf71f67c7  libstdc++-v3/testsuite/23_containers/unordered_map/allocator/swap.cc
! 3453c440659cee9d02618d4267f9125b  libstdc++-v3/testsuite/23_containers/unordered_map/cons/56112.cc
! 133360941144ca167aec6c37079b7f3d  libstdc++-v3/testsuite/23_containers/unordered_map/cons/66055.cc
! 46a2b0558e3e9882d0ed62f4715e993f  libstdc++-v3/testsuite/23_containers/unordered_map/cons/81891.cc
! 85260b346a96810f495c68331eefcc0e  libstdc++-v3/testsuite/23_containers/unordered_map/cons/deduction.cc
  85f9f0cfc8a07ac716292470ac0bda11  libstdc++-v3/testsuite/23_containers/unordered_map/cons/default.cc
! ff57b6f277adf2f454862b11cd06ae33  libstdc++-v3/testsuite/23_containers/unordered_map/cons/moveable.cc
! ca66e91ff80dd78674c7632b39fc49af  libstdc++-v3/testsuite/23_containers/unordered_map/cons/noexcept_default_construct.cc
! 242367af907a344fa1c7e0b789fde113  libstdc++-v3/testsuite/23_containers/unordered_map/cons/noexcept_move_construct.cc
! 3cc3cf5d8bb08a2a03e27862b07401c5  libstdc++-v3/testsuite/23_containers/unordered_map/debug/60499.cc
! 25a3a5d044cd813453c78483fc91b441  libstdc++-v3/testsuite/23_containers/unordered_map/debug/90102.cc
! 50d03cfa42f60cda78cdcbef2a720895  libstdc++-v3/testsuite/23_containers/unordered_map/debug/98466.cc
! 9a0f06b3deb7f04037da8973956a819c  libstdc++-v3/testsuite/23_containers/unordered_map/debug/begin1_neg.cc
! 101634282b6287470c6370a25f7d3309  libstdc++-v3/testsuite/23_containers/unordered_map/debug/begin2_neg.cc
! 169216024adf7ba20cc11940342fcd47  libstdc++-v3/testsuite/23_containers/unordered_map/debug/bucket_size_neg.cc
! f3af5bec21cf32b7a8118f524a4068a5  libstdc++-v3/testsuite/23_containers/unordered_map/debug/cbegin_neg.cc
! 1fc897feda0e4f3bf416ee055c34a1de  libstdc++-v3/testsuite/23_containers/unordered_map/debug/cend_neg.cc
! 219c89a0b12ccae9d6374ff909f16b7b  libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct1_neg.cc
! 4f452716c7549f778b4fda8310898bed  libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct2_neg.cc
! 1d2dfa144ff4e49c851958e092d88d34  libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct3_neg.cc
! d5a77d96cfa740dc65151d107e9253ac  libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct4_neg.cc
! 9990a64f9beda15aeb9f8f6c0032ecc6  libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct5_neg.cc
! 84ddaa397e561d91887468443e145325  libstdc++-v3/testsuite/23_containers/unordered_map/debug/end1_neg.cc
! b48ff7668cc24ac4191742d2feb249c9  libstdc++-v3/testsuite/23_containers/unordered_map/debug/end2_neg.cc
! 700d94fe53b84a9941d5ff1f253114e1  libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert1_neg.cc
! 6b0f915bc9ea2d2c4a9ab1f8de9b5fce  libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert2_neg.cc
! 1661e81456d31e8b71156fdfe24a6573  libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert3_neg.cc
! 0142b4cbfc991ea924a6ffd66ae21d6a  libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert4_neg.cc
! 5959facebff9a795d3c1908e3ebfd01c  libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_compare_neg.cc
! 17ac19ceda556666007e745d2205cf3a  libstdc++-v3/testsuite/23_containers/unordered_map/debug/invalid_local_iterator_range_neg.cc
! 13e5bfd87c90a8f300e4a0c4c4103b84  libstdc++-v3/testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc
! ec5f25200eab229dcb114c539335f057  libstdc++-v3/testsuite/23_containers/unordered_map/debug/merge1_neg.cc
! 1b50fcbac0e81550e3f02766b2163b1e  libstdc++-v3/testsuite/23_containers/unordered_map/debug/merge2_neg.cc
! d54806c3c63e301a8ace90147e276428  libstdc++-v3/testsuite/23_containers/unordered_map/debug/merge3_neg.cc
! a6d92cb4a8083799e28f1557ec3dc5ea  libstdc++-v3/testsuite/23_containers/unordered_map/debug/merge4_neg.cc
! 4fe8f88af48577fe12e4a7a6f40afc2a  libstdc++-v3/testsuite/23_containers/unordered_map/debug/move_assign_neg.cc
! e81af9ab942e864263f6e7db9ff41dea  libstdc++-v3/testsuite/23_containers/unordered_map/debug/move_neg.cc
! 40485582e3b754dea23a81ee807149e5  libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_erased_local_iterator_neg.cc
! e6a1e5b7ed8d50518fe256117c15285a  libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_invalid_iterator_neg.cc
! a3b9674078c9e3f4a869930210c38084  libstdc++-v3/testsuite/23_containers/unordered_map/debug/use_invalid_local_iterator_neg.cc
! 141a07312a2a5b52019fc0a2ea2e8a3b  libstdc++-v3/testsuite/23_containers/unordered_map/dr761.cc
! c1cfe50c8d58cff8f021c705bb98c978  libstdc++-v3/testsuite/23_containers/unordered_map/dup_types.cc
! dd8fce973fba602171feef9cafee1de9  libstdc++-v3/testsuite/23_containers/unordered_map/erase/1.cc
! fed7825ec70acdc779f555408dbf7245  libstdc++-v3/testsuite/23_containers/unordered_map/erase/24061-map.cc
! 1e9e8f88390f91596cd89702ea804557  libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc
! 4e8103f919468f73cfcdc871a58dd24b  libstdc++-v3/testsuite/23_containers/unordered_map/erase/54276.cc
! f2ae44578a456fba8969027229d2054a  libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc
! 45d039b3add879a20c912c6d45ab6515  libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc
! 049afcdb1774c7f633f0bde462705e6b  libstdc++-v3/testsuite/23_containers/unordered_map/hash_policy/dr1189.cc
! 699bb48edf4637b47d545709b346838a  libstdc++-v3/testsuite/23_containers/unordered_map/init-list.cc
! 4d032a46e41f68aa097d71fd210767eb  libstdc++-v3/testsuite/23_containers/unordered_map/insert/24061-map.cc
! 8ff645d22d9ef3d597f8618823a86603  libstdc++-v3/testsuite/23_containers/unordered_map/insert/57619.cc
! b2dfcfaba91315116eb8d2c255879aa3  libstdc++-v3/testsuite/23_containers/unordered_map/insert/83709.cc
! d9528b07ada66a85b0018d924c1be9f5  libstdc++-v3/testsuite/23_containers/unordered_map/insert/array_syntax.cc
! f599f0b32ee2b1f152a964875701d81e  libstdc++-v3/testsuite/23_containers/unordered_map/insert/array_syntax_move.cc
! 8cafbfa92b97f1f84d86a41e00d02a81  libstdc++-v3/testsuite/23_containers/unordered_map/insert/dr2354.cc
! 68608d08059a1228558011244e2b6b98  libstdc++-v3/testsuite/23_containers/unordered_map/insert/map_range.cc
! f0399d7fd5903ed8043fb32c149bd594  libstdc++-v3/testsuite/23_containers/unordered_map/insert/map_single.cc
! ece79065f23f578994072c6dc8f62ab2  libstdc++-v3/testsuite/23_containers/unordered_map/insert/map_single_move-1.cc
! bb1e7bd4f05b7384300cd8d7bd794c0b  libstdc++-v3/testsuite/23_containers/unordered_map/insert/map_single_move-2.cc
! 06ff89c259cd10752f45e5be2694743a  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/61667.cc
! 02c31b8fce6c27afd518872a24a814f7  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/78595.cc
! f4993e60c966cbd7b7c00a8a0fa6a17b  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/92878_92947.cc
! 1e14e83ef4746bb9169430b1d5bd9a5a  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/emplace.cc
! b827d771e02de1a1f930ec7e5c7b6765  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/extract.cc
! 5c0c1ad89698c2805855fb0b70d10e6b  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/insert_or_assign.cc
! cab517ef1ca869f351a0cdd1cca03942  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/merge.cc
! c9846991c4ca0ce97b56c75dcce0fe88  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/move_assign.cc
! c31ead35490503b9cd3ca60543467c49  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc
! 5510fa6dbcd62dde70eb4fd314d91179  libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/try_emplace.cc
! 816f8540eb7d663172e123ee7133638b  libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc
! 6416174e8079c8901aef10b43d3554d0  libstdc++-v3/testsuite/23_containers/unordered_map/operations/1.cc
! a58c339e9e2cef10c4b15d7f87530a27  libstdc++-v3/testsuite/23_containers/unordered_map/operations/contains.cc
! ba9a8e637660ebfafc0118756b6ffe49  libstdc++-v3/testsuite/23_containers/unordered_map/operations/count.cc
! 59125382be2dc7ad0e7176032c126176  libstdc++-v3/testsuite/23_containers/unordered_map/operators/1.cc
! e5d70e391585952693604b192aa1fd64  libstdc++-v3/testsuite/23_containers/unordered_map/operators/2.cc
! 37878b197b905b8672effb4c6912d00e  libstdc++-v3/testsuite/23_containers/unordered_map/pmr_typedefs.cc
! f4ee57d0642f8b9e2115e04c7087d250  libstdc++-v3/testsuite/23_containers/unordered_map/pmr_typedefs_debug.cc
  45f46b4cea5268d1bf8f903d79e3c350  libstdc++-v3/testsuite/23_containers/unordered_map/profile/hash_map.cc
  6bcaac31a8700749f12b90fa8913629b  libstdc++-v3/testsuite/23_containers/unordered_map/profile/unordered.cc
! 09d7f800bccc83d9f60b6fa43777cd69  libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc
! a4b236b2339109c418a1be9074cd6056  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc
! 12f511a1138f541d7dba45b448b74a7f  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc
! 9244e85d44ea7dae1aac7e8cd2a7e4e6  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53339.cc
! 2b00a8d23ce25540b6874ef10d9e807a  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/citerators.cc
! 3f5a3a77c7d4cdacf35914a829f13736  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/cliterators.cc
! 6e598fad4cbc1021d3f6ff076fc3fcb5  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/debug_container.cc
! 31aad2c33a2f0ee664ce634988e1da66  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/debug_mode.cc
! d3ca5dc634fdb43e1576ec34f0f034c9  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/exception/basic.cc
! 897d2784f6914ff49bc0b18ada087ed6  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/exception/generation_prohibited.cc
! eb95b3909207502092af4aff286b24a8  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/exception/propagation_consistent.cc
! ab0a7d4f0c0a9c532b4e2dd1bb36b44d  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/1.cc
! bea3f6eff9b980227fb1b4270d88bc05  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/2.cc
! 14e1584e52df0faebf662a78da3ac4db  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/3.cc
! 114999c6813aa623e60b99052cb8ff6c  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/4.cc
! 0fd039dcf92fe559ef428a50eae8fc53  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/explicit_instantiation/5.cc
! 9fd83d63085bc1a9c5d0a4aeee85d776  libstdc++-v3/testsuite/23_containers/unordered_map/requirements/typedefs.cc
! 88035a99bb06dd8511df0521e37e649f  libstdc++-v3/testsuite/23_containers/unordered_multimap/48101-2_neg.cc
! 4b564070c6bb9f5649391ab8917e0ffa  libstdc++-v3/testsuite/23_containers/unordered_multimap/48101-3_neg.cc
! 12f07af2311c4e440077fbf1fd7c68ef  libstdc++-v3/testsuite/23_containers/unordered_multimap/48101_neg.cc
! d6dbb5c9ce758d0ef931f4b0c0b361cd  libstdc++-v3/testsuite/23_containers/unordered_multimap/55043.cc
! 16751efb4d7a855adef573c4da602977  libstdc++-v3/testsuite/23_containers/unordered_multimap/96088.cc
! 296c150355874c513cd6347d592ceaf0  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/copy.cc
! 78990714ae190367ad40f3612ebbcebe  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/copy_assign.cc
! 939aa922c4ae165f3f8895eba079a69c  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/minimal.cc
! a453b5ad7f4b9c3509d58339c5d71697  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/move.cc
! 72d8d4a8f406a90d09e5575f66089dbe  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/move_assign.cc
! 31d9999e1da391a41ca4fd575b8bab6d  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/noexcept.cc
! 0302a975fa2685e221f84653cbb80433  libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/swap.cc
! e6d681fdd33676d6059db9e645cb634f  libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/66055.cc
! 1339c52ecafcfc46a0f64547b8873082  libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/deduction.cc
! f8fbb369d9ad3cbf32d561ea6c1b3d95  libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/moveable.cc
! 9f3a2617f5f36e39a16a8d820af59e11  libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/noexcept_default_construct.cc
! c639ba054500cac98951b66aa5600450  libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/noexcept_move_construct.cc
! b5a64feb6bc93b47a83183ad434917a0  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/60499.cc
! f84e006a53c099da11fb01e645ffb861  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/90102.cc
! 372dc6d45eae7e98d25cd5934c9c6b5a  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/begin1_neg.cc
! 101634282b6287470c6370a25f7d3309  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/begin2_neg.cc
! 169216024adf7ba20cc11940342fcd47  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/bucket_size_neg.cc
! f3af5bec21cf32b7a8118f524a4068a5  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cbegin_neg.cc
! 1fc897feda0e4f3bf416ee055c34a1de  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/cend_neg.cc
! dace01b9e7a62b57f98bc07860138564  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct1_neg.cc
! bf6318151d0df7517ed3ef2b2a8a7403  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct2_neg.cc
! 510e552a79a004fe2e916d4a59eb020d  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct3_neg.cc
! dab03366fb9bc0f05b359c3f418e992a  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct4_neg.cc
! fdb8cf1a33f7289ad16333ec1f1ab72c  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct5_neg.cc
! 84ddaa397e561d91887468443e145325  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end1_neg.cc
! b48ff7668cc24ac4191742d2feb249c9  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/end2_neg.cc
! b710d14086812e251a80f1f633840db7  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert1_neg.cc
! 6ba542f3d0957127ee7ba609ddafc381  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert2_neg.cc
! ae6505d8a1b4a7024ce2155d169a5bbe  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert3_neg.cc
! b6a772fad6831099fff2e9a16b5131c0  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert4_neg.cc
! efe9220de02d7f67132a17ba980f6f3c  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_compare_neg.cc
! 71a7d9238608c34302a905ca4f709da0  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/invalid_local_iterator_range_neg.cc
! 5daf433ff5cec29f232e73db9bab9908  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/max_load_factor_neg.cc
! 4590d5159c6810e053d83e37afdfdccc  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/merge1_neg.cc
! 10748ae08ea59767c0dec11efeda3ecf  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/merge2_neg.cc
! 5711a56e85b25164885d87e3528b0d4e  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/merge3_neg.cc
! f30bce9979bec5403e8d4079e23bd752  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/merge4_neg.cc
! 809d552da851e75f3006ec1188373945  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/move_assign_neg.cc
! 1646cf2034df9cdd908a51834e591546  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/move_neg.cc
! a89a3d2b2b3a9ef3590bfb373ff767fb  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_erased_local_iterator_neg.cc
! 0f080a4ab13c97f5407630215f0555c8  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_invalid_iterator_neg.cc
! fa008e5572385f29e97e5b4ca72feb96  libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/use_invalid_local_iterator_neg.cc
! bc1ee1d83c151890698eb0f2e6118523  libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/1.cc
! 762c5249e65b4dc31b3f966948039bcd  libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/2.cc
! 0db5cc5c6fbf9002933009bd32402ea4  libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/24061-multimap.cc
! 14e8cee9c64dec600647d72db086c2a4  libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc
! 96f644636f29d06a985dd3a152fe3854  libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51845-multimap.cc
! 61c7c71dbdb43eaae2b48d92fa9952e8  libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/54276.cc
! cd4fcbefab18a291824b1fe0dca3eaff  libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc
! 219195d9571b21435c10a0a213fab151  libstdc++-v3/testsuite/23_containers/unordered_multimap/hash_policy/dr1189.cc
! 212be24c69c5b056e2526a09c94e89ec  libstdc++-v3/testsuite/23_containers/unordered_multimap/init-list.cc
! c047d882812987f8ef6511e28ca1bad2  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/24061-multimap.cc
! c30e5e518a3bad3da937cd6f10c8e65c  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/51866.cc
! e03280f2126a4b831abee78e7d08bafc  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/52476.cc
! ebba5ea536f17ec0fc3d871592bf6b14  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/53115.cc
! 5e146021490b8b2cdc35ea02899b6d57  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/55028-debug.cc
! 02588a553373997661ca83e3808fdb16  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/57619.cc
! 96419b2717c6e96bb29fb4416650d2ad  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/dr2354.cc
! bb7037c75592b4e315d0072ee0dd723a  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/hint.cc
! 6c67f7eb6c2839f62727045f401e83cc  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/multimap_range.cc
! 1ba361b0d3a19e12bb748f150bdca582  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/multimap_single.cc
! e9ea7a07d3cdd2a0bda5e28e1fc8347c  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/multimap_single_move-1.cc
! 4729df9dcd0d73a5af012e904f2d0064  libstdc++-v3/testsuite/23_containers/unordered_multimap/insert/multimap_single_move-2.cc
! 2b350cfb9d71848a9f0bad156163cd58  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/78595.cc
! ea0696443f7cff215ace4161ef2e4d75  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/92878_92947.cc
! 89fd8f9511d4f3eabe773b4f2d7fc6f5  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/emplace.cc
! d1614b908fa2de25da49ed98c3635013  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/extract.cc
! f75622587e00fa848de2e1c0c1bab491  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/merge.cc
! 1807fbb26d32585cfef4017d192143f3  libstdc++-v3/testsuite/23_containers/unordered_multimap/modifiers/reserve.cc
! d2faea1f63ccfec343b6737abc4c06b4  libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc
! c7d4deef6c79fa90f4334049a584d3e3  libstdc++-v3/testsuite/23_containers/unordered_multimap/operations/1.cc
! 3eb1e3317696520a4b61b78a9d33a236  libstdc++-v3/testsuite/23_containers/unordered_multimap/operations/contains.cc
! 1520d5c57f3f424589a14454c7a28845  libstdc++-v3/testsuite/23_containers/unordered_multimap/operations/count.cc
! 3b5d73afffaf211605142a41e536a2ad  libstdc++-v3/testsuite/23_containers/unordered_multimap/operators/1.cc
! 1af59491e9dec2cb2636f7f146be9a48  libstdc++-v3/testsuite/23_containers/unordered_multimap/operators/2.cc
! abc85726e6ea41160a66f2e596def257  libstdc++-v3/testsuite/23_containers/unordered_multimap/pmr_typedefs.cc
! 7cec0329e32a9de54a48e841df724b46  libstdc++-v3/testsuite/23_containers/unordered_multimap/pmr_typedefs_debug.cc
! b367164af85bb08a83a4a938d99ef3f6  libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc
! d9b64801293da09e724633f74d193e18  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/53339.cc
! d3d2219e8bda916e498972dc9cddbb88  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/citerators.cc
! 0cf68745b4876e92b0cb2523fb4e14db  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/cliterators.cc
! fb148d6bcfbf13d3399a573d8b447d3d  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/debug.cc
! 075af99a950a7c1adb0012620ec89a20  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/exception/basic.cc
! 0a9dfdbd54c0d7ccf5c8b85c229f9a54  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/exception/generation_prohibited.cc
! fc1831cc3f8832bb09d04665b7698f62  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/exception/propagation_consistent.cc
! 7f016b1c12024851587010189c67cead  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/1.cc
! 0ec1e1a595772ea73e2a6a4f5b17a22f  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/2.cc
! 63b3d395c75b62466de5c190dca5ffcd  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/3.cc
! fd72dba46881468d6f58a090f10ae567  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/4.cc
! 1f6f480ba5d7fcd50b3c6d6e565c628a  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/5.cc
! 04ebf45751f670bba301ec5fdc8283b7  libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/typedefs.cc
! 60f1df39cb88b5e32cf434accacae754  libstdc++-v3/testsuite/23_containers/unordered_multiset/48101-2_neg.cc
! 4cc4b53a21fe2b44a507e8fa8b97b2f7  libstdc++-v3/testsuite/23_containers/unordered_multiset/48101-3_neg.cc
! d50a9c2739b12898213e044a03e2e78b  libstdc++-v3/testsuite/23_containers/unordered_multiset/48101_neg.cc
! a6330059204412036e828449b11ccec4  libstdc++-v3/testsuite/23_containers/unordered_multiset/55043.cc
! b55025538cfc818dedde6c08f59d36c4  libstdc++-v3/testsuite/23_containers/unordered_multiset/96088.cc
! cacc3eee6ee816f0c07598ae81d54a46  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/copy.cc
! 091e94b82c25f5479de13364bd7ce758  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/copy_assign.cc
! a33682137e2c923907e38156947cc496  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/minimal.cc
! 2f0dc714e2709a5975c87770c8cb9a54  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/move.cc
! f04a3f189b49b00a5245af151fa0d79d  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/move_assign.cc
! d219e87e5b73b664d7e806948ce8015f  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/noexcept.cc
! a9528613d6005f3a77892b0b453552ec  libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/swap.cc
! 9fa74b4b0764e2c1c5f8ca51714533f3  libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/66055.cc
! a0a90666f700537b1f6bf31e795cd3d2  libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/copy.cc
! 23f594bcb112a45f141a57ae69a39c30  libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/deduction.cc
! baa02e34d312187a873168814bd512aa  libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/moveable.cc
! 3945348b7dadcc3a2265c55dbe5d913d  libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/noexcept_default_construct.cc
! 7f3b3a9e08849d61b1f47bb05c5fddc5  libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/noexcept_move_construct.cc
! a7140efa5724383d90a61a417adad358  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/60499.cc
! 0995effb9743fa4423c34a438183c228  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/90102.cc
! ed62ba009f767578f847f86e08f1ed84  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/begin1_neg.cc
! bf4ae0740613f8b97aca95a51ada2f63  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/begin2_neg.cc
! 1f17aa0e6bc70e79a8933460653657ff  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/bucket_size_neg.cc
! 0e441a1433d1f3458c381b13d752ee09  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/cbegin_neg.cc
! 952270f6abfca8e5b350044dd9c006e7  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/cend_neg.cc
! 9f69b4c5b646d2f7555c020211012c35  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct1_neg.cc
! e793f24394fae8d4f5df5963dc3eac36  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct2_neg.cc
! 040d299a2366e86f772e09cda7def1a4  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct3_neg.cc
! a71e46a52a803c9d67775582d2b6fdca  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct4_neg.cc
! 58fe12426cfe7630df60916250e6042c  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct5_neg.cc
! 5d2e0e1022383c59740decef43eb2352  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/end1_neg.cc
! f2b0d6ef2d59f8ef8eb32f1dad7753c1  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/end2_neg.cc
! 99bf3f8585b6224f95b6aa1e9924ae67  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert1_neg.cc
! 559d6b58f4edf1de2cef7433e8be3280  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert2_neg.cc
! 9de513d3abc1f0e3013e4eb2604edd12  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert3_neg.cc
! 582bf70d477d475c86a4ba4e3a3b62d3  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert4_neg.cc
! ed33a9f340e3f067b371c8e10a8ec595  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_compare_neg.cc
! 5aad150cc67516c93f3f9d7cea12c32f  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/invalid_local_iterator_range_neg.cc
! abb768609ba3e6943341c1e0183cac05  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/max_load_factor_neg.cc
! 57b376626504f59753991e34bc78237c  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/merge1_neg.cc
! 4780603df65da907f59b5dc2271c7d4b  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/merge2_neg.cc
! d1a56802059f8869425e49137d01db11  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/merge3_neg.cc
! ced06789a8924ce0bc694421897b8fc2  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/merge4_neg.cc
! 633c40898f209e587f3a66bb243bb1ef  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/move_assign_neg.cc
! e87e67f5e3bebfa13f9dc3363efeae60  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/move_neg.cc
! df6bb779d57443c430058fddafd0f166  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_erased_local_iterator_neg.cc
! 6d95e748f2e0e13a2f7d88e8a0552ff0  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_invalid_iterator_neg.cc
! e282cafc2d02f05083f93720a7d98a39  libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/use_invalid_local_iterator_neg.cc
! bdc8543745cd064b039d0665ae0bc9d5  libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/1.cc
! 969896438a77169cf30c4990b253a4f0  libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/2.cc
! 0f6ffbcc5bfaaddfaacf6ecf1ff33f48  libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/24061-multiset.cc
! 14fc8d37cdcbe3ef7095c9776dcef429  libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc
! 98cc84a84d1c42aa68964fa24dd2f439  libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc
! 5020d5164dedb2665f4d89543bb637b9  libstdc++-v3/testsuite/23_containers/unordered_multiset/hash_policy/dr1189.cc
! f492bf69b1e298379d8f4ce49e70522b  libstdc++-v3/testsuite/23_containers/unordered_multiset/init-list.cc
! 00be40db9962d120781902186f5b83f5  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/24061-multiset.cc
! 538b092803be19683ccb80ab2f274ed3  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/51866.cc
! e4f8f761815549c9655a1afa85c84621  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/52476.cc
! 1a21b3111b3b11ae7d9c641f50d02473  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/53115.cc
! 89033de94b10e37b54b03d06c9f04ecc  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/hash_policy.cc
! 2cbb0afd915083a5cabafa50f998d5c8  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_range.cc
! 25f6641c9b65591cfe0b8858e7b910b5  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single.cc
! c35b057960b073e57577f894c93abd5c  libstdc++-v3/testsuite/23_containers/unordered_multiset/insert/multiset_single_move.cc
! 1031b470e6127a252d2adced81d5dede  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/92878_92947.cc
! 1d40b8f180c16337816a13e75181ed5e  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/emplace.cc
! 6f1ad8e9a94be3b78fe3ef0ae9684c3d  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/extract.cc
! cd7d4abf4ce41d307e6974346da5cf21  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/merge.cc
! 66c113df7a16a8975feee03b3771cc8a  libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/reserve.cc
! c2ffd52238b34d2ceadd020d3179f161  libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc
! 443d9c8a3e59df26a0df1521dbd90a45  libstdc++-v3/testsuite/23_containers/unordered_multiset/operations/1.cc
! 0c3fcf81056064d793986f1fa5c5b181  libstdc++-v3/testsuite/23_containers/unordered_multiset/operations/contains.cc
! 63a4268f8d7cf972e8f3025184f880cf  libstdc++-v3/testsuite/23_containers/unordered_multiset/operations/count.cc
! fbe4d8f36f4df7a459af93bb37620eca  libstdc++-v3/testsuite/23_containers/unordered_multiset/operators/1.cc
! 7b45eff31f02cce7e3dc14b02d802755  libstdc++-v3/testsuite/23_containers/unordered_multiset/pmr_typedefs.cc
! 390498e79a614204395688ce09528dcd  libstdc++-v3/testsuite/23_containers/unordered_multiset/pmr_typedefs_debug.cc
! 1355ee45d88e20a75a6493c28e0cd4ed  libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc
! 9fa9baa60fff046077b56f22a7ddcf7b  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/citerators.cc
! a7756bf13ec9cfec0ad68c65a7a4efa5  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/cliterators.cc
! 6e30f1af88aa962c05f6b4e52828fa5e  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/debug.cc
! f24d3c630f58fd9f3c27ab6eca3cfbca  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/exception/basic.cc
! 85a44ba4593be50735f5605f4fd25551  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/exception/generation_prohibited.cc
! d2d9eed2b0306494dc0e80ced0bda5db  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/exception/propagation_consistent.cc
! fb58d0683c99c8e7b36bc053071b9dc3  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/1.cc
! fbd1bc1f491915cceb4377f62a4b0203  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/2.cc
! f1c49f65ee3355580378937224d637cb  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/3.cc
! 399d3c1504946dc663792b53664f2004  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/4.cc
! 865e2fcc45c5d3b1b123b128a10bdb06  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/5.cc
! 69652343ddb5c37a4110f50b336bd94d  libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/typedefs.cc
! db12a1ee358d37495eeff40a72c65299  libstdc++-v3/testsuite/23_containers/unordered_set/48101-2_neg.cc
! 1801d8580381c4f6b56d0a59629a1a14  libstdc++-v3/testsuite/23_containers/unordered_set/48101-3_neg.cc
! 42f45c4e7f7d02a96d62e9c56dee164d  libstdc++-v3/testsuite/23_containers/unordered_set/48101_neg.cc
! 240dd92e23b0ac55e4a99c044e2210a2  libstdc++-v3/testsuite/23_containers/unordered_set/55043.cc
! dc13721ae125ca02e2d0ece4134f6e02  libstdc++-v3/testsuite/23_containers/unordered_set/56267-2.cc
! 06c0ab77dfb9a02e4a912745caada948  libstdc++-v3/testsuite/23_containers/unordered_set/56267.cc
! 4523c42985f295b107e09dbc095b876d  libstdc++-v3/testsuite/23_containers/unordered_set/56278.cc
! b949603cc90ac7e1c891d4761410e053  libstdc++-v3/testsuite/23_containers/unordered_set/61143.cc
! a0282cdeaa692c94ac22e06b99caedcb  libstdc++-v3/testsuite/23_containers/unordered_set/63456.cc
! fa5d4317715635a08972c99407780d33  libstdc++-v3/testsuite/23_containers/unordered_set/85965.cc
! 1cee7ad397a587f302fe7af9307d5f07  libstdc++-v3/testsuite/23_containers/unordered_set/92124.cc
! 84073967fec818c1f7c37b57db7acf8d  libstdc++-v3/testsuite/23_containers/unordered_set/96088.cc
! 1c8c3d69a2ce24485b1afe4c94f0bdbb  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/copy.cc
! 7bd699f962fc8886bb0309ee9c622ade  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/copy_assign.cc
! c9bb3394afc512f681e23ff6f0d237e6  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/default_init.cc
! d1788d8bb3dc78d409ad984c4f52a5d4  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc
! 9b616c454a53592adfe53355e43bf6ca  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/minimal.cc
! d1be24d97ab9f3ca1c6a39886b1d11d4  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/move.cc
! db95a68adc1cc675cb46860495a6780e  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/move_assign.cc
! 97bdda0b5c934e8f35895d28306011c6  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/noexcept.cc
! 376d44fc8bd99cd901978d99467c8e32  libstdc++-v3/testsuite/23_containers/unordered_set/allocator/swap.cc
! 3d589d0945e45ad80268ac68dfba9a30  libstdc++-v3/testsuite/23_containers/unordered_set/buckets/swap.cc
! 541a90e28d25b27e700adf41be4d1288  libstdc++-v3/testsuite/23_containers/unordered_set/cons/66055.cc
! 3a438eed881a74b35c309c24c11c004d  libstdc++-v3/testsuite/23_containers/unordered_set/cons/99985.cc
! 98da1d199de4b42bab7acca7fa038089  libstdc++-v3/testsuite/23_containers/unordered_set/cons/bucket_hint.cc
! 50d3a4852641ffb5d38114a701a2047e  libstdc++-v3/testsuite/23_containers/unordered_set/cons/deduction.cc
  247af40f0de6e07e87bdde64812f8659  libstdc++-v3/testsuite/23_containers/unordered_set/cons/default.cc
! fdaf633d17a161bc656be6bb957031a2  libstdc++-v3/testsuite/23_containers/unordered_set/cons/moveable.cc
! a69b12ef88cc0380414cdddc3665cae3  libstdc++-v3/testsuite/23_containers/unordered_set/cons/noexcept_default_construct.cc
! 594f3fdc00041c8d57a4b5cb29ae92d9  libstdc++-v3/testsuite/23_containers/unordered_set/cons/noexcept_move_construct.cc
! b087df70a5e248f594f3d4cee983339f  libstdc++-v3/testsuite/23_containers/unordered_set/cons/self_move.cc
! 339e95023b2c79a28b80cf8baefa891c  libstdc++-v3/testsuite/23_containers/unordered_set/debug/60499.cc
! e9f2fcda8249c73a3fb8be9ee384c627  libstdc++-v3/testsuite/23_containers/unordered_set/debug/89608_neg.cc
! 298a0a52920fbd9c32325200c1c672b6  libstdc++-v3/testsuite/23_containers/unordered_set/debug/90102.cc
! b050d01c36449da3f207b893a21e4188  libstdc++-v3/testsuite/23_containers/unordered_set/debug/begin1_neg.cc
! a70c9d45c2897694ccf88ed327e01acc  libstdc++-v3/testsuite/23_containers/unordered_set/debug/begin2_neg.cc
! 2a87ff5fc25f8f333ba6d80dfcc7091d  libstdc++-v3/testsuite/23_containers/unordered_set/debug/bucket_size_neg.cc
! f30aef3a70c699c3be3dd5beeadd8bde  libstdc++-v3/testsuite/23_containers/unordered_set/debug/cbegin_neg.cc
! 5acf6af55704e95228ca39e559c009fb  libstdc++-v3/testsuite/23_containers/unordered_set/debug/cend_neg.cc
! 222921b00757f2071ba700c2eed24f70  libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct1_neg.cc
! 4a6bb46258ea572c0df9ed3c7813f2c7  libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct2_neg.cc
! 8bf72ba0680fec022f403760a1eb2584  libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct3_neg.cc
! ecf3a19f36df3ea1574873022322d3ff  libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct4_neg.cc
! af0c5851a5af93b91c53585d42f47343  libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct5_neg.cc
! 8a9acef0a1562d0d23cf94937cba371c  libstdc++-v3/testsuite/23_containers/unordered_set/debug/debug_functions.cc
! 2e3538a47740cb132bb11a8d9093c6ff  libstdc++-v3/testsuite/23_containers/unordered_set/debug/end1_neg.cc
! 3cd08f05e73bb5e82dbe10af200689f7  libstdc++-v3/testsuite/23_containers/unordered_set/debug/end2_neg.cc
! fd094c64826a3e831af3562c47fbde0d  libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert1_neg.cc
! fd83cb46467d34d25cde9f6a4f09d0c2  libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert2_neg.cc
! ac5a4ba9184632896768e9175b4acc42  libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert3_neg.cc
! 368ac9bbb405f1d9bcc5d3be0c9a91d5  libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert4_neg.cc
! 6c2a666d3cf02b3b48aabfbfe9cbf08a  libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_compare_neg.cc
! 6a910edf8de6ea6d05f441b1145e8d2b  libstdc++-v3/testsuite/23_containers/unordered_set/debug/invalid_local_iterator_range_neg.cc
! 9c305c474b9954b27cf7d2676be34356  libstdc++-v3/testsuite/23_containers/unordered_set/debug/max_load_factor_neg.cc
! 8121fd537a86b2d9c88f3a74d9dfd917  libstdc++-v3/testsuite/23_containers/unordered_set/debug/merge1_neg.cc
! 8abc555d1b878f2729647a5a9b417280  libstdc++-v3/testsuite/23_containers/unordered_set/debug/merge2_neg.cc
! fb91af2ae75ed5745c8773ed8318a311  libstdc++-v3/testsuite/23_containers/unordered_set/debug/merge3_neg.cc
! 00a3aa9959b3b6aa3847806d2fcccfb2  libstdc++-v3/testsuite/23_containers/unordered_set/debug/merge4_neg.cc
! e00b4a381bfd8d9df3b5465442f60c95  libstdc++-v3/testsuite/23_containers/unordered_set/debug/move_assign_neg.cc
! 6b7d7de7abd2df489d8ae5d887e38c44  libstdc++-v3/testsuite/23_containers/unordered_set/debug/move_neg.cc
! 505db138ad51729241fad52072baa659  libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_erased_local_iterator_neg.cc
! c28a135a0f9533c92b88640b5ceb0de0  libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_invalid_iterator_neg.cc
! 174880a0a72f94cb801c68377dd69499  libstdc++-v3/testsuite/23_containers/unordered_set/debug/use_invalid_local_iterator_neg.cc
! 6b4479622dafb36b13219f3df6829af9  libstdc++-v3/testsuite/23_containers/unordered_set/erase/1.cc
! 9de7dc4053744549757385f9669b342b  libstdc++-v3/testsuite/23_containers/unordered_set/erase/24061-set.cc
! fbf01acfce9b3026c6b4581d8efb584f  libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc
! a4517c8facd8d4bbd982a085a617ca2b  libstdc++-v3/testsuite/23_containers/unordered_set/erasure.cc
! 90c8bd4ec719faf7c9b79f52797f4407  libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc
! eeaff13bb556a026f26fd69417bd5ed3  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/26132.cc
! 889818d16bddeb8a7916854f346b8971  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/71181.cc
! 62cd499a31337c4c59e0262ea17172c6  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/dr1189.cc
! 8c50f3bd11a1c95b4b1ede5567666e43  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/load_factor.cc
! 2c09b5a2f51b9379f4889f4ec5ef7489  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/power2_rehash.cc
! 94ce4d7d3e8ebbd82e7619a2c151c435  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/prime_rehash.cc
! f00184f0b75407c26cabf6bd58ebb3c3  libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/rehash.cc
! 21e4300d8725268c311c3532900c4cc3  libstdc++-v3/testsuite/23_containers/unordered_set/init-list.cc
! b88fde42a97551fb09e2d43d3a821494  libstdc++-v3/testsuite/23_containers/unordered_set/insert/24061-set.cc
! 537dfac0add8be4562b88ee872a7b33a  libstdc++-v3/testsuite/23_containers/unordered_set/insert/83709.cc
! 9ff2e77fc264cd6cbdea2568b96f3f8a  libstdc++-v3/testsuite/23_containers/unordered_set/insert/hash_policy.cc
! 867a3cbc7dad2f586611a3fc0ab0093f  libstdc++-v3/testsuite/23_containers/unordered_set/insert/move_range.cc
! e0ca5e830e5b0abcf4f1b25b0e3cbeb1  libstdc++-v3/testsuite/23_containers/unordered_set/insert/set_range.cc
! 167f11aa1aabf785f58554b0f67b0615  libstdc++-v3/testsuite/23_containers/unordered_set/insert/set_single.cc
! 1a609ba18ef8455b0e135d1b507af9db  libstdc++-v3/testsuite/23_containers/unordered_set/insert/set_single_move.cc
! fc3c05a0cfa119fb13c4bf775be7275b  libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc
! 6b84d3217cde41a522d1df444f814a43  libstdc++-v3/testsuite/23_containers/unordered_set/max_load_factor/robustness.cc
! f672c3621e6e83f276d79caf6b626a78  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/92878_92947.cc
! 5ac8bb8d2bd7f9f285567564f37af02a  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/emplace.cc
! 53d7181bce16ac21267b0b21427167b3  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/extract.cc
! d7cccf5adb732f2799ddb844e77f3d5e  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/insert.cc
! 827ba5b60e701aab79c2dde3fe7568c1  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/merge.cc
! 0fab3e10c2997aa8597906a79a2704ef  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc
! e0f890574e071da178978f027ee69430  libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/swap.cc
! 55f0c944912c0f390c68fb80ebc678c8  libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc
! d96b5be7e348719d1b6cddd7c9f2523d  libstdc++-v3/testsuite/23_containers/unordered_set/operations/1.cc
! 35839004f26ded9912b30e3c5cb28865  libstdc++-v3/testsuite/23_containers/unordered_set/operations/contains.cc
! 17f6e3b12cb6c4c4737f75444b747e9c  libstdc++-v3/testsuite/23_containers/unordered_set/operations/count.cc
! 8721e1cfe6750c9bd65f6b62b1054734  libstdc++-v3/testsuite/23_containers/unordered_set/operators/1.cc
! a5375cdb0b473c5ea745af62959ee58f  libstdc++-v3/testsuite/23_containers/unordered_set/operators/52309.cc
! cebb99d7d3a8c715f09f198f1112c970  libstdc++-v3/testsuite/23_containers/unordered_set/pmr_typedefs.cc
! 5fc106f3056b6abc2ea774e536db914f  libstdc++-v3/testsuite/23_containers/unordered_set/pmr_typedefs_debug.cc
! 454a0219329e8710eb48d9ffdc77f84a  libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc
! ae82a93fe6523a92fedf60ccdfca5f55  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc
! db6da1c8fe4dceace4affa7026dfea4c  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc
! 937b2f3f1d0c1ca18c9b2762ca857250  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/citerators.cc
! ff2362741e57c843262bc1107cf9fafe  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/cliterators.cc
! 70e86fb96b67693a79c8995182ae3770  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/debug_container.cc
! 6d49ea018e9645a1027ae496edff9fe9  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/debug_mode.cc
! f689055d4095c9d294a36033599ce4f9  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/exception/basic.cc
! 4dab55ee9fffd79243c540677112cfce  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/exception/generation_prohibited.cc
! 122861514f4e6914221a3044d14f3410  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/exception/propagation_consistent.cc
! 96dab8bc314ddc55c70fafaf9767c654  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/1.cc
! 42c9d3a266f976c830fab98713c3ea11  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/2.cc
! 1715097572ae7d5e1b9293a2b48fe366  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/3.cc
! 74d10eaf0660c5686ae307c99f007fa6  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/4.cc
! e37dad4a7908cacf6d05e49d2ce6c785  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/explicit_instantiation/5.cc
! 3bfbc85f9967ba3bcb44d33489c4ebd5  libstdc++-v3/testsuite/23_containers/unordered_set/requirements/typedefs.cc
! 89711a3acde397e41cbf39ccc8a1378b  libstdc++-v3/testsuite/23_containers/vector/14340.cc
! 80d09ba801f2e30278cda5f8237931d1  libstdc++-v3/testsuite/23_containers/vector/15523.cc
! c8e9473bdb7dc205695a6f490568cde7  libstdc++-v3/testsuite/23_containers/vector/18604.cc
! 0d63938d539611be0d8cf86d0f9bcc78  libstdc++-v3/testsuite/23_containers/vector/26412-1.cc
! 744de9f8ec9929d92006fe6bd3584e63  libstdc++-v3/testsuite/23_containers/vector/26412-2.cc
! b4c059670040bcef1b5027a1271026d8  libstdc++-v3/testsuite/23_containers/vector/40192.cc
! 0983257b1e413965848d942fbf67a5bc  libstdc++-v3/testsuite/23_containers/vector/48101-2_neg.cc
! c5bf586081af6f65bd443e1ebe57a419  libstdc++-v3/testsuite/23_containers/vector/48101-3_neg.cc
! a1fd9061c9299a6b6cdc1b48ebaa2a1c  libstdc++-v3/testsuite/23_containers/vector/48101_neg.cc
! ef2559bebf8f7689646f7ebdd75717c7  libstdc++-v3/testsuite/23_containers/vector/52591.cc
! 73be32b027ad66867abe213a4c4aa9e7  libstdc++-v3/testsuite/23_containers/vector/58764.cc
! 9206d17898e2681447c5eee810963cfa  libstdc++-v3/testsuite/23_containers/vector/59829.cc
! 3929ca993f3e1bf3db9fd45e3ff60dd0  libstdc++-v3/testsuite/23_containers/vector/63500.cc
! 0f5fb9879de187052d8e2f639a8d308c  libstdc++-v3/testsuite/23_containers/vector/70303.cc
! cd6a5525bd502620e12440546ca7a6e6  libstdc++-v3/testsuite/23_containers/vector/92124.cc
! 809a859460c621be961f28c74d2221f7  libstdc++-v3/testsuite/23_containers/vector/allocator/construction.cc
! 2aa0c6e16bfd2e48fb7a406059efb16a  libstdc++-v3/testsuite/23_containers/vector/allocator/copy.cc
! 7cc4d8fe165404de52157e198bb0b632  libstdc++-v3/testsuite/23_containers/vector/allocator/copy_assign.cc
! 270929290d6817b90c91aed80ea229da  libstdc++-v3/testsuite/23_containers/vector/allocator/default_init.cc
! 0c90e3ba13c2bf11120871c329a38a14  libstdc++-v3/testsuite/23_containers/vector/allocator/ext_ptr.cc
! a752df8dfc4f4c2191375689517d93c4  libstdc++-v3/testsuite/23_containers/vector/allocator/minimal.cc
! 566ea9684552ee2b82d2c14a777af205  libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc
! 0b86777fc4d7d827f90debf4eed4bb58  libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
! a85b735ad41862af78848cbbc73dc7c5  libstdc++-v3/testsuite/23_containers/vector/allocator/noexcept.cc
! f7c5f73877a56bb8ae64939c75b6f468  libstdc++-v3/testsuite/23_containers/vector/allocator/swap.cc
! ad87a2ba2792acb13efee0252b4d6dda  libstdc++-v3/testsuite/23_containers/vector/bool/1.cc
! 203adc26c7908e21423fd1c0dbe75c17  libstdc++-v3/testsuite/23_containers/vector/bool/21244.cc
! 14a4b492022b5ecc2134d842edee65e2  libstdc++-v3/testsuite/23_containers/vector/bool/23632.cc
! ebdbfb93b5449c7b54a9a2a4b23f4b7d  libstdc++-v3/testsuite/23_containers/vector/bool/6886.cc
! 105b353a30d681faafcf42f172acf5d7  libstdc++-v3/testsuite/23_containers/vector/bool/72847.cc
! 99c2ce95af959825748b0ff9f8ac92ea  libstdc++-v3/testsuite/23_containers/vector/bool/80893.cc
! 5fa512e122bd8fabfc9cff0b607a6104  libstdc++-v3/testsuite/23_containers/vector/bool/82558.cc
! 2a79dc435b2d8b72ed25787cc54efe5c  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/copy.cc
! 6650893f588fccbfc5469b7fc5fca16a  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/copy_assign.cc
! 19f9377f17945e1bb54c039e2a91ab3a  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/default_init.cc
! 5ac3d2c5813bd83d7e673500c39d40f1  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/ext_ptr.cc
! 1313e63e96b72940b242788a679ef263  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/minimal.cc
! 574918103f22251a22ca6750b6254948  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/move.cc
! ca19f087405c235664ca86cda2305d4d  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/move_assign.cc
! 6f8469e729d813c1a2ab6c4216bb08e9  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/noexcept.cc
! e3e711d54da0bcf51a1fe1002f20150f  libstdc++-v3/testsuite/23_containers/vector/bool/allocator/swap.cc
! 4bc38211783849c81419e396569f9724  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/1.cc
! b8a657c1d74e7cf01aa40a735eff1c38  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc
! f3a53ae538351a02f5ec621190a341fc  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/constexpr.cc
! 6597cecdd83b59a1741c10af422f5438  libstdc++-v3/testsuite/23_containers/vector/bool/capacity/shrink_to_fit.cc
! 32e622e00e7c2835c3b0f7fc3c9b4c85  libstdc++-v3/testsuite/23_containers/vector/bool/clear_allocator.cc
! a03c1b68573b251cf136f022ae47327c  libstdc++-v3/testsuite/23_containers/vector/bool/cmp_c++20.cc
! e0351d5f32c7a1f7d57157b17b3aa875  libstdc++-v3/testsuite/23_containers/vector/bool/cons/1.cc
! 3b3379c2c31bdea22f73555d54440f96  libstdc++-v3/testsuite/23_containers/vector/bool/cons/2.cc
! bfacbc308cbc3c96784d0b61ca0635ee  libstdc++-v3/testsuite/23_containers/vector/bool/cons/87809.cc
! abb8e684b5198d2f43e773d47fbc26e7  libstdc++-v3/testsuite/23_containers/vector/bool/cons/constexpr.cc
! 1fa2fbd13ebc37a91ab50f754268fe88  libstdc++-v3/testsuite/23_containers/vector/bool/cons/noexcept_move_construct.cc
! 35e0cd4f42eda824bbba54df3a2bb017  libstdc++-v3/testsuite/23_containers/vector/bool/element_access/constexpr.cc
! 764e8c7844007e7073b8c5bb6c108991  libstdc++-v3/testsuite/23_containers/vector/bool/emplace.cc
! c763541bd89c0b1bc084d76b621240a9  libstdc++-v3/testsuite/23_containers/vector/bool/emplace_cxx17_return.cc
! c76409510f695572235c6c0914bb8116  libstdc++-v3/testsuite/23_containers/vector/bool/hash/1.cc
! 12e68c15a5f4bf87cead57d625bc3c9d  libstdc++-v3/testsuite/23_containers/vector/bool/iterator_c++20.cc
! 67b104ae3368abb6e9547a6c88c33a91  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/assign/1.cc
! 198e24e4b0447ebd1f59ee566c4f9ad6  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/assign/constexpr.cc
! da7f433cb57b9828232873e5f792cde2  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/constexpr.cc
! 74fb6b3cec9413f8435170b790b89a64  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/erase/1.cc
! e5527ddbe1c9258d22a14643f25359f9  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/erase/54577.cc
! ca7ccbc01f9c69bd8235a89af0332b96  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/1.cc
! 8411c535ec979be02e85103a2ce6a933  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/104559.cc
! 163da287fb57ee57c84ddf584c5f0605  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc
! 4a1f064c7b1aee5273403a6807c7f44b  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/const_iterator.cc
! 0aaa5f3186eaa9c1af3627bf8425d5bb  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/1.cc
! d63621ad13581451a3eeacbebd2886ee  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/2.cc
! 1611763e1d27a3886a180174309278ae  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/constexpr.cc
! e119b07fa1d360d5e48db258e09577b2  libstdc++-v3/testsuite/23_containers/vector/bool/requirements/citerators.cc
! 38ec1ad2ef867b0ef703a25843a3c5dd  libstdc++-v3/testsuite/23_containers/vector/bool/requirements/dr438/constructor.cc
! ee79a05ce8d7c5377876bfa3e5817059  libstdc++-v3/testsuite/23_containers/vector/bool/swap.cc
! e5562b6f546d071e48f497e02b938e7f  libstdc++-v3/testsuite/23_containers/vector/capacity/1.cc
! c8c8a49250851394b47191538f116ca9  libstdc++-v3/testsuite/23_containers/vector/capacity/2.cc
! d8f93ed6f8ae914c08c0ad73bc9ad78e  libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc
! 5646baf35182f7e4a8892e74a7bd42b4  libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc
! e40a3cf0a4b5813248c48825120a2e1b  libstdc++-v3/testsuite/23_containers/vector/capacity/44190.cc
! 1319800735a9fa2dd3460203ff32c432  libstdc++-v3/testsuite/23_containers/vector/capacity/8230.cc
! f73769ce30d379f3bfd8e42bd4a4e606  libstdc++-v3/testsuite/23_containers/vector/capacity/87544.cc
! 402ee0d2c16c5d03df6155b7cc99187d  libstdc++-v3/testsuite/23_containers/vector/capacity/constexpr.cc
! d36af7aedc5972d4f8e55c899d8f9d8a  libstdc++-v3/testsuite/23_containers/vector/capacity/max_size.cc
! 57720a91e173ae18c6298ba22946ab45  libstdc++-v3/testsuite/23_containers/vector/capacity/reserve/moveable.cc
! 8c378cd6532a184d389c2226a8f9dfef  libstdc++-v3/testsuite/23_containers/vector/capacity/reserve/moveable2.cc
! 30f9981b62fe9cc4900f8c4abd7c9c90  libstdc++-v3/testsuite/23_containers/vector/capacity/resize/1.cc
! 65a32d8a622a4b398c33e14bcfd97e86  libstdc++-v3/testsuite/23_containers/vector/capacity/resize/moveable.cc
! 0e8525c3bbba46409b678f62c126b357  libstdc++-v3/testsuite/23_containers/vector/capacity/resize/moveable2.cc
! 785fd76779970edad5e8fc4dbc43d2cf  libstdc++-v3/testsuite/23_containers/vector/capacity/resize/resize_size.cc
! fa0188ace09393aaf5e0e78a604fa88c  libstdc++-v3/testsuite/23_containers/vector/capacity/resize/strong_guarantee.cc
! fdf2860728bdfafc6c12e77d7fc34792  libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc
! c5326c872629b70a6cac112d7191eaaa  libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc
! e6b13a470d7dc09b7377ba8490051b14  libstdc++-v3/testsuite/23_containers/vector/check_construct_destroy.cc
! 254e5ffa57a194c950dae265767fb789  libstdc++-v3/testsuite/23_containers/vector/cmp_c++20.cc
! 85bdfc0576269a0e5205993301109c71  libstdc++-v3/testsuite/23_containers/vector/cons/1.cc
! 0a4c77f92fc3554026c38402a8698d27  libstdc++-v3/testsuite/23_containers/vector/cons/2.cc
! c66f9d033f7bdf121d5453fe8cdd24be  libstdc++-v3/testsuite/23_containers/vector/cons/3.cc
! f4b56cf638525a4ae9b58fb23cdcd034  libstdc++-v3/testsuite/23_containers/vector/cons/4.cc
! fddfcde7ec79ae045588b9be4480f533  libstdc++-v3/testsuite/23_containers/vector/cons/55977.cc
! 28c6851274bfe5c87f427fe41955f079  libstdc++-v3/testsuite/23_containers/vector/cons/6513.cc
! e51689d6f32e1f57b717ddee58bc76c3  libstdc++-v3/testsuite/23_containers/vector/cons/86292.cc
! 0be4693921b391e03192235cb5820dd3  libstdc++-v3/testsuite/23_containers/vector/cons/87809.cc
! dfe2de37d0eba6b6347817eb81355e84  libstdc++-v3/testsuite/23_containers/vector/cons/89164.cc
! 7febc12be2af7cc1de19414aaafc3353  libstdc++-v3/testsuite/23_containers/vector/cons/89164_c++17.cc
! 239f1bf167406b3f90bfa6ff36006fa0  libstdc++-v3/testsuite/23_containers/vector/cons/94540.cc
! f7e44bc5605d8dbaecbe9449d6f1ab65  libstdc++-v3/testsuite/23_containers/vector/cons/94831.cc
! 549cf9a1e8f8bc3ef61a519299e4e76f  libstdc++-v3/testsuite/23_containers/vector/cons/clear_allocator.cc
! 539f8a7a20b33d9116aa9937776fc40f  libstdc++-v3/testsuite/23_containers/vector/cons/cons_size.cc
! 1ce2272844a9da337ee743c345bec85b  libstdc++-v3/testsuite/23_containers/vector/cons/constexpr.cc
! 3bd45daa102290f1176d8405d7221143  libstdc++-v3/testsuite/23_containers/vector/cons/deduction.cc
! aba23da2c50408d320fee5821caad013  libstdc++-v3/testsuite/23_containers/vector/cons/destructible_debug_neg.cc
! 19f1c44c76dfb817df55800d837fa674  libstdc++-v3/testsuite/23_containers/vector/cons/destructible_neg.cc
! 55550ae8dde510aa5f780945c50e0dc9  libstdc++-v3/testsuite/23_containers/vector/cons/moveable.cc
! 76386102cae76d7f42b2b530988f9e0e  libstdc++-v3/testsuite/23_containers/vector/cons/moveable2.cc
! 256b18edd7b9d475d74867762585474c  libstdc++-v3/testsuite/23_containers/vector/cons/noexcept_move_construct.cc
! d06942a7df7fdbc8ad5ba368be44df54  libstdc++-v3/testsuite/23_containers/vector/cons/self_move.cc
! 1572ad51ac4cdf7ce97680d7ba95ca30  libstdc++-v3/testsuite/23_containers/vector/data_access/1.cc
! 2da738c5f0181f4d71a28da3da5b55cf  libstdc++-v3/testsuite/23_containers/vector/data_access/constexpr.cc
! 1d6cf04182a247f82924198d9a107bed  libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc
! d1f01c5e431ee8149b76c79b6afc4492  libstdc++-v3/testsuite/23_containers/vector/debug/57779_neg.cc
! 7a2b12d4e2411815cb8f203303cd1150  libstdc++-v3/testsuite/23_containers/vector/debug/60499.cc
! ab2c01702735b7eadb3f19ebc5bed7d2  libstdc++-v3/testsuite/23_containers/vector/debug/60587.cc
! dcd468b8f7c02e1fc711c2f8a4d93b73  libstdc++-v3/testsuite/23_containers/vector/debug/60587_neg.cc
! b61e17c3f3a3d0683631d9e9c7a7bfe2  libstdc++-v3/testsuite/23_containers/vector/debug/90102.cc
! aa8e83decc1f23487289cd8bd489b396  libstdc++-v3/testsuite/23_containers/vector/debug/alloc_prop.cc
! 2ad3b0ef36dd96c6984af4993cedd6c0  libstdc++-v3/testsuite/23_containers/vector/debug/assign1_neg.cc
! 19470451c86b44cc0305bdf6ee7b6760  libstdc++-v3/testsuite/23_containers/vector/debug/assign2_neg.cc
! a5209b79fda626a126a43a1e8b9dd736  libstdc++-v3/testsuite/23_containers/vector/debug/assign3_neg.cc
! e9eafb1f1c5a455c80bf4e0bfe8b3e0a  libstdc++-v3/testsuite/23_containers/vector/debug/assign4_neg.cc
! fee6f6c849253532cc42b248473c91c7  libstdc++-v3/testsuite/23_containers/vector/debug/bool/shrink_to_fit.cc
! a67caaf78aab4389dd327d0f1a8a1729  libstdc++-v3/testsuite/23_containers/vector/debug/construct1_neg.cc
! bbc444c398c8fa0a3ce573af2064d8fe  libstdc++-v3/testsuite/23_containers/vector/debug/construct2_neg.cc
! ab6ca28539f4a2d8580bd5effd897082  libstdc++-v3/testsuite/23_containers/vector/debug/construct3_neg.cc
! c4da53b2261abfcb0f41cbce222cd6db  libstdc++-v3/testsuite/23_containers/vector/debug/construct4_neg.cc
! e5de92f622f6dca0f665797b75716b1e  libstdc++-v3/testsuite/23_containers/vector/debug/debug_functions.cc
! f15a4fba42a92dbb0c55879f7e5c24eb  libstdc++-v3/testsuite/23_containers/vector/debug/insert1_neg.cc
! 49c1c9152b3d1e9f2d8363cb23f3125f  libstdc++-v3/testsuite/23_containers/vector/debug/insert2_neg.cc
! ed952a35d3d77626de775e012a2debaf  libstdc++-v3/testsuite/23_containers/vector/debug/insert3_neg.cc
! 8b37699c4dea0812cfcc3d62113036dd  libstdc++-v3/testsuite/23_containers/vector/debug/insert4_neg.cc
! 225c60034b4ac1a70469dfe4476a0272  libstdc++-v3/testsuite/23_containers/vector/debug/insert5_neg.cc
! 183bfc7e70f08accd0da3915d25555a9  libstdc++-v3/testsuite/23_containers/vector/debug/insert6_neg.cc
! da0101d780a767da07cb8e9da15862e8  libstdc++-v3/testsuite/23_containers/vector/debug/insert7_neg.cc
! 9ae82203c86881d09248ca255edb1a3d  libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/1.cc
! 4ff42222f4e43d1d81caf84fefc86e89  libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/2.cc
! a1673ae15e81315cff0036f533bb0325  libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/3.cc
! 591445bc7057560fcd11333475838175  libstdc++-v3/testsuite/23_containers/vector/debug/invalidation/4.cc
! 8aeaf423399677358ab423ec900e51ae  libstdc++-v3/testsuite/23_containers/vector/debug/move_assign_neg.cc
! 9f3fdbf318866a8b752287fe9ef8d902  libstdc++-v3/testsuite/23_containers/vector/debug/move_neg.cc
! 826d228396218bab7b5bead1e9b0f49c  libstdc++-v3/testsuite/23_containers/vector/debug/multithreaded_swap.cc
! 1e929a7440c835404b6f15dc245c5730  libstdc++-v3/testsuite/23_containers/vector/debug/mutex_association.cc
! 810b8b648b8da44e4b505ee59af3c95d  libstdc++-v3/testsuite/23_containers/vector/debug/shrink_to_fit.cc
! 7ccf5c4b6ebfe9f5492cc74b2420ce16  libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation-1.cc
! 030b76e905584ff835ef16199f07822b  libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation-2.cc
! 86dba5110dee7a48997e7755fd387710  libstdc++-v3/testsuite/23_containers/vector/element_access/1.cc
! 16aff27648691adf15bfc9b67a08656c  libstdc++-v3/testsuite/23_containers/vector/element_access/constexpr.cc
! 348e9bd7c2c0a2c3d4635f4511c67858  libstdc++-v3/testsuite/23_containers/vector/erasure.cc
! ebaef97a01190a8daefed90ee416a10b  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/citerators.cc
! 1ad9a459f7e4a8adea29a06013a74028  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/data_access.cc
! 2da5187fd01aca244e3b620341a41b66  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/explicit_instantiation/1.cc
! 781125c24c3957c26e504b6ddd82c7c5  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/explicit_instantiation/3.cc
! 74e0732a7f53013f857dab5f62b26506  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/modifiers/element.cc
! 0edfce8372b7549d0afa7af1fae30c1d  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/modifiers/erase.cc
! 39e3a6ff06f0c6d76adb31edf4051b7a  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/modifiers/insert.cc
! 87e013b534acd71fbac5c72d8d1afc88  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/resize.cc
! 769690aaf3335ffef31373b54c7b3404  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/types/1.cc
! 155c2c5c58fed1b592b1f665d3880849  libstdc++-v3/testsuite/23_containers/vector/ext_pointer/types/2.cc
! 8e4b07093021bcbc31cea1aa58d7ab0a  libstdc++-v3/testsuite/23_containers/vector/init-list.cc
! 1519cc19e7eadfc4fef8f575d964ee11  libstdc++-v3/testsuite/23_containers/vector/modifiers/1.cc
! eb2f20a71817b36711028ec1d3cb0cbb  libstdc++-v3/testsuite/23_containers/vector/modifiers/2.cc
! bd11fcf10b79647f8bc55f1d9471d13b  libstdc++-v3/testsuite/23_containers/vector/modifiers/assign/1.cc
! 3922aaba2a433c66301ae0e55030a827  libstdc++-v3/testsuite/23_containers/vector/modifiers/assign/constexpr.cc
! 79f9958e484b07409ba222ba2faa32b4  libstdc++-v3/testsuite/23_containers/vector/modifiers/constexpr.cc
! f0aa5bc2e6c7fda928a4a6e20b362e14  libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/52799.cc
! 75a5828dd1b791afd1e1e337538dde58  libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/92878_92947.cc
! 7ebe0a00c3c6232cfa8e3d1d2c4d17fb  libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/const_iterator.cc
! 2fd4bdf2964fcd6ec69e53c3ca4904ec  libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/cxx17_return.cc
! 265d83f0b170d2bdd58bbdf30702028f  libstdc++-v3/testsuite/23_containers/vector/modifiers/emplace/self_emplace.cc
! 0e0e6bf0f542ece2df9f9251623e336d  libstdc++-v3/testsuite/23_containers/vector/modifiers/erase/1.cc
! e85db7b279acdaac26a1dae23871747d  libstdc++-v3/testsuite/23_containers/vector/modifiers/erase/50529.cc
! d3e8515cac11f17d145d9d537da55aa4  libstdc++-v3/testsuite/23_containers/vector/modifiers/erase/54577.cc
! 31fc16343e678883cb12ad2b313c0847  libstdc++-v3/testsuite/23_containers/vector/modifiers/erase/moveable.cc
! 5c0108d280236dc6d7131c2da10e469b  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/1.cc
! 4ba5b22123f0fd1701b6ece1a1f834ed  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/58148.cc
! 81831c18183d31a96836cb1f31a0c9b5  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/aliasing.cc
! 85200afbea4686707963cab8e5a5abe8  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/const_iterator.cc
! 8ff9ac0d267e9584b17e115f7d60e802  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/self_insert.cc
  8fb5c601f412e71f5977219b7d89f18d  libstdc++-v3/testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc
! b10e6b436296b8e4302bcacb0523455e  libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable.cc
! 81f48fa654d8fe3f2e6934b59b97bb88  libstdc++-v3/testsuite/23_containers/vector/modifiers/moveable2.cc
! 047e21a6daf2aabe38c92b64939035d9  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/49836.cc
! 4864613ca0a378fa9ef87ec99b054743  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/89130.cc
! 1bdd93b38ca657bd899e0de1c377f7ab  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/89416.cc
! eb9fd459b37a8b3db4900833fcc6fb33  libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/strong_guarantee.cc
! 42c8871e85efb908dbe9115c4b97d0d2  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/1.cc
! 0a76871a37d86f32772b1964a841fcab  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/2.cc
! 710f0b80f22c66f92b1f7e895f355ebc  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/3.cc
! 60880bfb14632a4fa03a825957bdfead  libstdc++-v3/testsuite/23_containers/vector/modifiers/swap/constexpr.cc
! 8784bde3ecc820f3119d5bec460bdfc5  libstdc++-v3/testsuite/23_containers/vector/pmr_typedefs.cc
  33db2bb591e55ad911ea124e372841ca  libstdc++-v3/testsuite/23_containers/vector/profile/vector.cc
! 1e51076d5de5af5d3cd0c3153f3dc174  libstdc++-v3/testsuite/23_containers/vector/range_access.cc
! 91e2c7fa1039701114208754dc22d19c  libstdc++-v3/testsuite/23_containers/vector/requirements/citerators.cc
! fa0f4defffe531843efe3fe207464457  libstdc++-v3/testsuite/23_containers/vector/requirements/do_the_right_thing.cc
! 092c7d5e0103164a92538c4f9fad7b7a  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
! 0efacf32969a03705b9f2f4dd9549fcf  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor.cc
! f3d13efb590d3d7a454431649caaf9d1  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
! f3504b506a4b5a47b5d2e6425927c891  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
! e34e3fe9c1eb0d898f2832a65866f12a  libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
! 337ba5e55875e48f97ae18dc2857ae1d  libstdc++-v3/testsuite/23_containers/vector/requirements/exception/basic.cc
! e61f82c2dd072fa55e9ad84002b9bf7b  libstdc++-v3/testsuite/23_containers/vector/requirements/exception/generation_prohibited.cc
! 82a7d5e58e0ecd624d216e1e553371e9  libstdc++-v3/testsuite/23_containers/vector/requirements/exception/propagation_consistent.cc
! d3b1bb3f30141e8025dda63b2a0af67c  libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/1.cc
! 0c02c34e63f8ea7e30a0b3a60996ed01  libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/1_c++0x.cc
! 8970bdd1ec5e7004803c0ca69f0b3ffb  libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/2.cc
! 56be03ab31fe4a164614a6361bd3b9d0  libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/3.cc
! 8859b26c15b97cd2c1c92919c2604125  libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/4.cc
! 64d0bac668fb3285b9fa5172bcca023d  libstdc++-v3/testsuite/23_containers/vector/requirements/partial_specialization/1.cc
! e239e46d786cf5ecb880b21cde8ca8c3  libstdc++-v3/testsuite/23_containers/vector/requirements/typedefs.cc
! f6cad31d84b1847b98d87c952a149cae  libstdc++-v3/testsuite/23_containers/vector/requirements/version.cc
! 0cf78be8ae3544690e26c1d1bd9fa1ee  libstdc++-v3/testsuite/23_containers/vector/types/1.cc
! 01c110a914b62b33cb9aa89da47c749e  libstdc++-v3/testsuite/23_containers/vector/types/23767.cc
! 31f7f24f6064edc1f7c0b4b095df6dd2  libstdc++-v3/testsuite/23_containers/vector/types/pmr_typedefs_debug.cc
! c1cdbbdf1a51400ab55728b7febfb7a6  libstdc++-v3/testsuite/23_containers/vector/zero_sized_allocations.cc
! a97f6533d638836c8c739780ee3e989d  libstdc++-v3/testsuite/24_iterators/aliases.cc
! 88d481a664a1a1738c747c84e72d429c  libstdc++-v3/testsuite/24_iterators/associated_types/incrementable.traits.cc
! a143d04b198714ae7fe649e33efd11df  libstdc++-v3/testsuite/24_iterators/associated_types/iterator.traits.cc
! f979be40aae684d1e4c8d35c0ccd9d02  libstdc++-v3/testsuite/24_iterators/associated_types/readable.traits.cc
! a0fcd914846eb3e2c4731580c33f3ac8  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/2.cc
! 202e6b8cef2a98fe069a72735d92eb96  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/constexpr.cc
! 580bc6f8c951102c79b134a24acecf57  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/pr93884.cc
! f34c2ec2db7492da903c62aa0b26c9f0  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/requirements/base_classes.cc
! 63d8ab92f8edc66e9599dcb351771468  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/requirements/container.cc
! 0842b72525b296056bbe8d544437418e  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/requirements/explicit_instantiation.cc
! 3601dcb55f71d8d3035417dd1ca98db7  libstdc++-v3/testsuite/24_iterators/back_insert_iterator/requirements/typedefs.cc
! 095860a8fa15182674b189dbd0b97836  libstdc++-v3/testsuite/24_iterators/bidirectional/concept.cc
! ca1b45449fedd09c71729f49cef94e1d  libstdc++-v3/testsuite/24_iterators/bidirectional/tag.cc
! 446082f77451a81edc11c150e1a5cd57  libstdc++-v3/testsuite/24_iterators/common_iterator/1.cc
! 6af04a093cd4743a3b35ca59a125b54a  libstdc++-v3/testsuite/24_iterators/common_iterator/2.cc
! c528c0f00ffa28ae4f7abd0c70249d38  libstdc++-v3/testsuite/24_iterators/container_access.cc
! ba3437bf3b9a475b041b6f7ec501a429  libstdc++-v3/testsuite/24_iterators/contiguous/concept.cc
! 6070baf70924df52fe6764a2a1cdb59f  libstdc++-v3/testsuite/24_iterators/contiguous/tag.cc
! 8d5e705289624811662731658790b5d1  libstdc++-v3/testsuite/24_iterators/counted_iterator/1.cc
! 15e34e0add55b37257d995280fd518b8  libstdc++-v3/testsuite/24_iterators/counted_iterator/lwg3389.cc
! c1b3a7eb43a2aa86a3d5f962f76ac10b  libstdc++-v3/testsuite/24_iterators/customization_points/92894.cc
! 8b1b29b56d45c910c25ab1b66755416b  libstdc++-v3/testsuite/24_iterators/customization_points/iter_move.cc
! 37f18ede45e6e80fd24757df4ff8af87  libstdc++-v3/testsuite/24_iterators/customization_points/iter_swap.cc
! 946f335877ebbf9c953de443153a3b0c  libstdc++-v3/testsuite/24_iterators/customization_points/lwg3420.cc
! e0a166fd912eea9810b5854fadae7de3  libstdc++-v3/testsuite/24_iterators/forward/concept.cc
! 6053519af87005c1bbc4ea9e06847142  libstdc++-v3/testsuite/24_iterators/forward/tag.cc
! ac95878c4452746ba4ac767824bd5d79  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/2.cc
! 75564261b178970910cd262ce136e427  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/constexpr.cc
! 63bf581d5784cfd4423ac6c4d607088d  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/pr93884.cc
! d84b529a40c757abd3524ccd17747a1f  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/requirements/base_classes.cc
! 055fe071dfe8afc4f0581e1704f688fe  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/requirements/container.cc
! a8e15dd63097f29796c8e6d35e4fb176  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/requirements/explicit_instantiation.cc
! 1daa51ed33cd59caf57ef78ccc1e5f89  libstdc++-v3/testsuite/24_iterators/front_insert_iterator/requirements/typedefs.cc
! b35864c07a0d2473c948d6b42631346b  libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++11.cc
! 8f9dccdcc7e1170d21beb50e5c614c11  libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++14.cc
! 03ae70d18cc77b5d803349deef0eee0a  libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++17.cc
! b7f81759f38c65b81a7106df73b052e6  libstdc++-v3/testsuite/24_iterators/headers/iterator/synopsis.cc
! 437f58978002d1f6b31ac5fba75c9f23  libstdc++-v3/testsuite/24_iterators/headers/iterator/synopsis_c++11.cc
! f58ea44951638f75d41550335c618cd3  libstdc++-v3/testsuite/24_iterators/headers/iterator/synopsis_c++14.cc
! afbf134e563d12a5fdee23b5ba7b39d3  libstdc++-v3/testsuite/24_iterators/headers/iterator/synopsis_c++17.cc
! 01d084dbad05a1a482e18cecd2d4debd  libstdc++-v3/testsuite/24_iterators/headers/iterator/synopsis_c++20.cc
! 1dcb96ff6a51bd7f0490d0c5d9732d4c  libstdc++-v3/testsuite/24_iterators/headers/iterator/types_std.cc
! f254b1c37f106eebc5bc55470ab224a9  libstdc++-v3/testsuite/24_iterators/indirect_callable/92894.cc
! a4e27d523d01f0ad52fccda597bb1d05  libstdc++-v3/testsuite/24_iterators/indirect_callable/projected.cc
! a2e77fb2cdc3c2ea904787cd683ae6a1  libstdc++-v3/testsuite/24_iterators/input/concept.cc
! 8bdd4ba8221b12e6ff2107b4d22dea1c  libstdc++-v3/testsuite/24_iterators/input/tag.cc
! 92f521eca0a01695317b2a7acb0d5ea3  libstdc++-v3/testsuite/24_iterators/insert_iterator/2.cc
! bf4e40be5733cd492919cee461a8dd1b  libstdc++-v3/testsuite/24_iterators/insert_iterator/constexpr.cc
! 65e7775f33be9a04bf41f18eddc2fdce  libstdc++-v3/testsuite/24_iterators/insert_iterator/dr561.cc
! 11b43bf958fdf8f2f6690ecb3f983f6b  libstdc++-v3/testsuite/24_iterators/insert_iterator/requirements/base_classes.cc
! af2c49fb60582cd57a41359251d0f228  libstdc++-v3/testsuite/24_iterators/insert_iterator/requirements/container.cc
! e2776c4264f0886c90f5b2c3f53468b5  libstdc++-v3/testsuite/24_iterators/insert_iterator/requirements/explicit_instantiation.cc
! 63acb59c0c018d45f312a378b1dbf19d  libstdc++-v3/testsuite/24_iterators/insert_iterator/requirements/typedefs.cc
! b279b61963a1d2e6eec75dbce52bd7b3  libstdc++-v3/testsuite/24_iterators/istream_iterator/1.cc
! c62bf745fc97788888e1f31ef115a26f  libstdc++-v3/testsuite/24_iterators/istream_iterator/2.cc
! eaa85a1f451f792d507caed4f5c6b298  libstdc++-v3/testsuite/24_iterators/istream_iterator/70766.cc
! 9e4c847bd9730f86a57df5ea430391e8  libstdc++-v3/testsuite/24_iterators/istream_iterator/cons/constexpr.cc
! 8f4d1f0e10990bba5c4f9cbaeac79d02  libstdc++-v3/testsuite/24_iterators/istream_iterator/cons/sentinel.cc
! bb76c4afa6ebba73115fae68df6ed0e7  libstdc++-v3/testsuite/24_iterators/istream_iterator/requirements/base_classes.cc
! b6791eb89d7b366b6e8afc9da446020c  libstdc++-v3/testsuite/24_iterators/istream_iterator/requirements/explicit_instantiation.cc
! 5e930a6c11b3f178458e4a6643e81931  libstdc++-v3/testsuite/24_iterators/istream_iterator/requirements/typedefs.cc
! 92f4aed72d0b100191089f5875614d60  libstdc++-v3/testsuite/24_iterators/istream_iterator/sentinel.cc
! ad45ca3bf59c215a14c1052d222787f0  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/2.cc
! ebef1ad7b69f09dcab28796d3ab02ffd  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/2627.cc
! 0d6c142f5d52c9db23e05d52a85b7c3e  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/92285.cc
! b74357f86f7afdd8b2f77e06fc09d6d2  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/cons/constexpr.cc
! f74c8347113eb2e0f434c0d3ba9b56d0  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/cons/sentinel.cc
! 0c7c8eb7861b142cd37a53e3ad3f58bf  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/debug/1_neg.cc
! 0358039954e49d4c1b3c5e7bf7aa9013  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/debug/2_neg.cc
! 8d4887717254cdae2f79d25e02b7c19f  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/base_classes.cc
! d9b70955c2745f79161adbe3dfaec7be  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/dr445.cc
! 4779e2c526cfb83dc519465b13b4e81e  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/explicit_instantiation.cc
! f1d17450b4f81ab09a3882a88e70f9e6  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/typedefs.cc
! 9191b8a5225c61b243b832b5c3a2de0c  libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/sentinel.cc
! 9996cfe04de8964c0ec140ed409da8f4  libstdc++-v3/testsuite/24_iterators/move_iterator/cust.cc
! 3ea055c458a84874be1a7cfcfed21c8f  libstdc++-v3/testsuite/24_iterators/move_iterator/debug_neg.cc
! c5fa8c68cf1c4262ce44d30cc07ba32a  libstdc++-v3/testsuite/24_iterators/move_iterator/dr2061.cc
! 47a9e5d54d8823b402c4700ad36982b5  libstdc++-v3/testsuite/24_iterators/move_iterator/dr2106.cc
! 43326f9550f18957a2c23579d4cc7dbf  libstdc++-v3/testsuite/24_iterators/move_iterator/dr3265.cc
! bdf3295f6c66b5c49adc5a95d416ce43  libstdc++-v3/testsuite/24_iterators/move_iterator/dr3435.cc
! bf573abd4c405eefa9505bf4b62f8e90  libstdc++-v3/testsuite/24_iterators/move_iterator/greedy_ops.cc
! 52901cbcedd4ef40a871a6dc2ebb67a0  libstdc++-v3/testsuite/24_iterators/move_iterator/input_iterator.cc
! baaa1bcb430e3ccb9640b3f1b0d826e6  libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3390.cc
! 6c53301bf1243bf6ad110feba548e85d  libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3391.cc
! ff641ab002d07a9f0b9a43f9c70cf93a  libstdc++-v3/testsuite/24_iterators/move_iterator/move_only.cc
! 8a513df7ba82ad77cfd26c0adf5e4619  libstdc++-v3/testsuite/24_iterators/move_iterator/rel_ops_c++20.cc
! 7d9386e1e095a159011718fdf87b11e4  libstdc++-v3/testsuite/24_iterators/move_iterator/sentinel.cc
! fdf23f6931bf604d32a6f97319225760  libstdc++-v3/testsuite/24_iterators/normal_iterator/58403.cc
! d333cdfb79b1f92b5d1139adfd5d1edb  libstdc++-v3/testsuite/24_iterators/normal_iterator/cmp_c++20.cc
! 9fef6f40c987a710cff89a6c50cd6155  libstdc++-v3/testsuite/24_iterators/normal_iterator/debug_neg.cc
! a4687decd5f4a938833508f8451f9aaa  libstdc++-v3/testsuite/24_iterators/normal_iterator/greedy_ops.cc
! 4ff5db259d95f86dab8a3a9b2f91f78c  libstdc++-v3/testsuite/24_iterators/normal_iterator/to_address.cc
! 659cfa256e2941588923db423f6df485  libstdc++-v3/testsuite/24_iterators/operations/26020.cc
! b04a6c8059b9caebd2508da42fc983ec  libstdc++-v3/testsuite/24_iterators/operations/40497.cc
  631af97d6c75b598ecf8901dc62067b2  libstdc++-v3/testsuite/24_iterators/operations/lwg2353.cc
! 063eb0ed156d603d12ba6c66ea1f97a6  libstdc++-v3/testsuite/24_iterators/operations/next.cc
! 3eaa9d90218b9841dad634c8789145df  libstdc++-v3/testsuite/24_iterators/operations/prev.cc
! cf905e7311f0cc08836f1d37801501f5  libstdc++-v3/testsuite/24_iterators/operations/prev_neg.cc
! 11f5ce00e9def47e28eeff9532dd7cbe  libstdc++-v3/testsuite/24_iterators/ostream_iterator/1.cc
! 700c290583c97e30db861e5308b48616  libstdc++-v3/testsuite/24_iterators/ostream_iterator/70766.cc
! 02a499a97e10a5da9d4f56c728698d5f  libstdc++-v3/testsuite/24_iterators/ostream_iterator/requirements/base_classes.cc
! dd09c6f645a9ec91ef93858ff72900ff  libstdc++-v3/testsuite/24_iterators/ostream_iterator/requirements/explicit_instantiation.cc
! cccfed289324ef54b95446564ff1d5b6  libstdc++-v3/testsuite/24_iterators/ostream_iterator/requirements/typedefs.cc
! b8013d34adb1af20c15c8cca482a38c7  libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc
! ed4f6b4c64c6e0362d7634e835953545  libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/requirements/base_classes.cc
! 3337bde4b106c059878fb28e007d8931  libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/requirements/explicit_instantiation.cc
! 2e9b147c691370bd24960767ccb5f04d  libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/requirements/typedefs.cc
! 60f3ec8641a312a5db378b63e5917539  libstdc++-v3/testsuite/24_iterators/output/concept.cc
! 2a4b4beafbc4f7d9c5f905008904f07e  libstdc++-v3/testsuite/24_iterators/output/tag.cc
! bdea9a431f0294da7de0d3636f12bcdc  libstdc++-v3/testsuite/24_iterators/random_access/concept.cc
! e9990ad62e250ca51845e687c57161b3  libstdc++-v3/testsuite/24_iterators/random_access/string_vector_iterators.cc
! 9dd9b265d45d3e37512d4a2a27a2281f  libstdc++-v3/testsuite/24_iterators/random_access/tag.cc
! b9523a2d7aa91cb822efface44bf1a43  libstdc++-v3/testsuite/24_iterators/range_access/range_access.cc
! 09926d30afcffa8a74ca64b5f17338c9  libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp14.cc
! d5694960d1ad2526b07fb783f7e5d600  libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp17.cc
! 57a2a73e19a3503c9aaabcd5d16e3f5d  libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp17_neg.cc
! 2a3bf4d8cf4c400a2d9c0859074c9fec  libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp20.cc
! 90b5cab05718d53c555f40345ec02f5b  libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp20_neg.cc
! 31b664b2f73a70c179679648f2a849a8  libstdc++-v3/testsuite/24_iterators/range_operations/100768.cc
! fa4584b00964b0e173edaee95e223660  libstdc++-v3/testsuite/24_iterators/range_operations/advance.cc
! 11c18aa6cbc9ae026f4897986da946c6  libstdc++-v3/testsuite/24_iterators/range_operations/advance_debug_neg.cc
! 5dcff108eb2f62baa60bfa3a74d92304  libstdc++-v3/testsuite/24_iterators/range_operations/advance_overflow.cc
! 7ae6fd4e37dc783a9299a008699cb023  libstdc++-v3/testsuite/24_iterators/range_operations/distance.cc
! 3851ab6d95bc78163ba5186545dd9eb7  libstdc++-v3/testsuite/24_iterators/range_operations/lwg3392.cc
! 06879e8f0c036a6888ff075534a654b0  libstdc++-v3/testsuite/24_iterators/range_operations/next.cc
! cf6722fdbcd96fc9a88aa2e4b8ae0a81  libstdc++-v3/testsuite/24_iterators/range_operations/prev.cc
! 1cc7a2ce4fbd1378b403594b5255c701  libstdc++-v3/testsuite/24_iterators/reverse_iterator/100639.cc
! 04b8601a2a4c58bdf37e786b192babdb  libstdc++-v3/testsuite/24_iterators/reverse_iterator/11729.cc
! cc1079f7b7a173518b57403ed41156d9  libstdc++-v3/testsuite/24_iterators/reverse_iterator/2.cc
! ca785e2462c45e27ed61d6f252822d77  libstdc++-v3/testsuite/24_iterators/reverse_iterator/3.cc
! 2c66f7fe628a324cdac67a17a8ce8349  libstdc++-v3/testsuite/24_iterators/reverse_iterator/71771.cc
! 4c557c2f5ba38905c67721dbc6f2c9c3  libstdc++-v3/testsuite/24_iterators/reverse_iterator/cust.cc
! 6a0fa1374f52203c0c12258e659f1a59  libstdc++-v3/testsuite/24_iterators/reverse_iterator/debug_neg.cc
! c7501ac0591bc43aa99863e42892f648  libstdc++-v3/testsuite/24_iterators/reverse_iterator/dr1052.cc
! 4370eae629813606cece1c4a4798f35c  libstdc++-v3/testsuite/24_iterators/reverse_iterator/dr2188.cc
! 9756f17706f29fadbedfd64568f54b47  libstdc++-v3/testsuite/24_iterators/reverse_iterator/dr3435.cc
! 9064a47e1432a498062b3b5d9e2c1b0e  libstdc++-v3/testsuite/24_iterators/reverse_iterator/greedy_ops.cc
! 940b096e31623931f87604b5a83c82a3  libstdc++-v3/testsuite/24_iterators/reverse_iterator/make.cc
! b0c0208d50f550375365900191253233  libstdc++-v3/testsuite/24_iterators/reverse_iterator/noexcept.cc
! 364a404c9c75076b4c9cf26e22d0d643  libstdc++-v3/testsuite/24_iterators/reverse_iterator/rel_ops.cc
! 3aefa019ec5b7c6de8c7c8f3e569913a  libstdc++-v3/testsuite/24_iterators/reverse_iterator/rel_ops_c++20.cc
! fb2b2b974299e8158c417aed7fccddd5  libstdc++-v3/testsuite/24_iterators/reverse_iterator/requirements/base_classes.cc
! 1a208c9448695cd923030796401c1726  libstdc++-v3/testsuite/24_iterators/reverse_iterator/requirements/current.cc
! 457c0cc2aa85d1350420c2f9476ea267  libstdc++-v3/testsuite/24_iterators/reverse_iterator/requirements/explicit_instantiation.cc
! c63c4a887570255ecac25db719936703  libstdc++-v3/testsuite/24_iterators/reverse_iterator/requirements/typedefs.cc
! b35ee5ce3255b3730f130c00dc910f44  libstdc++-v3/testsuite/25_algorithms/adjacent_find/1.cc
! d0b1138b0c858f931121918c2a2da759  libstdc++-v3/testsuite/25_algorithms/adjacent_find/check_type.cc
! d5483c49cd8493d93336be3239619c9d  libstdc++-v3/testsuite/25_algorithms/adjacent_find/constexpr.cc
! 84f02101a2523b8064aeeea57faf75e7  libstdc++-v3/testsuite/25_algorithms/adjacent_find/constrained.cc
! 56a3e28b28351479663ff4932646609f  libstdc++-v3/testsuite/25_algorithms/adjacent_find/requirements/explicit_instantiation/2.cc
! 6f64f4ffc555cd8a41fa0286408816b1  libstdc++-v3/testsuite/25_algorithms/adjacent_find/requirements/explicit_instantiation/pod.cc
! 805ec9054fba7214aa58e0083db7ff7a  libstdc++-v3/testsuite/25_algorithms/adjacent_find/vectorbool.cc
! 3b458656936a26fa087d5dace01ed09f  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/char/1.cc
! 841904acb7122eccc6444f99c7480cc8  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/char/1_neg.cc
! d649bdf1720bca8431b461f16ad1a272  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/char/2.cc
! 974cace6de43d6070d1ff54b316d0d5a  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/char/2_neg.cc
! 37d24f0edd6ed6bdbd7caca8ff3f444d  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/char/3_neg.cc
! 50cab7c03bb3ae564f4ee82f7a27f169  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/1.cc
! 13284688b582f5616675e3c1ee79a84c  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/1_neg.cc
! a767a44133a485fb10cf2e697e2eeea6  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/2.cc
! f78be8d9cc83616a4c742d345eb11793  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/2_neg.cc
! 25badbf7278154728ee8b7c46f9e3fe9  libstdc++-v3/testsuite/25_algorithms/advance/istreambuf_iterators/wchar_t/3_neg.cc
! 8399be0b9b951c0265d31106c9fc9240  libstdc++-v3/testsuite/25_algorithms/all_of/1.cc
! e7989cf4a8230fce22c98eccce4d41b4  libstdc++-v3/testsuite/25_algorithms/all_of/check_type.cc
! 72e7c4cb2edea157c0ed4f9090714e09  libstdc++-v3/testsuite/25_algorithms/all_of/constexpr.cc
! 386f1b60096e8f9f492b711328645e8a  libstdc++-v3/testsuite/25_algorithms/all_of/constrained.cc
! f081371265342e5035e3c145f1915b9d  libstdc++-v3/testsuite/25_algorithms/all_of/requirements/explicit_instantiation/2.cc
! c6d367b084ab25b71977a0a974e0a7ea  libstdc++-v3/testsuite/25_algorithms/all_of/requirements/explicit_instantiation/pod.cc
! d849539b7bfcce332ca2eaded0091d13  libstdc++-v3/testsuite/25_algorithms/any_of/1.cc
! 473a333dac4ff889f2e0213cbabf7ce8  libstdc++-v3/testsuite/25_algorithms/any_of/check_type.cc
! 93911a12c7d8d5a39dec460a47efa100  libstdc++-v3/testsuite/25_algorithms/any_of/constexpr.cc
! 82c5a5b390d7cfee4d5c6a956b4a7490  libstdc++-v3/testsuite/25_algorithms/any_of/constrained.cc
! e5eef66d17b81af047b55eab09a15496  libstdc++-v3/testsuite/25_algorithms/any_of/requirements/explicit_instantiation/2.cc
! a637da7810f8d700a771778a43ffcc1e  libstdc++-v3/testsuite/25_algorithms/any_of/requirements/explicit_instantiation/pod.cc
! d04868cffaa2fff511136d82f80801fa  libstdc++-v3/testsuite/25_algorithms/binary_search/1.cc
! 9718a01f5b8f88db57177a92ed3ac74f  libstdc++-v3/testsuite/25_algorithms/binary_search/2.cc
! a8285a3f8c2a3a9ca0420a09a23b62d1  libstdc++-v3/testsuite/25_algorithms/binary_search/check_type.cc
! 588e749af4034bbc6f07502d1273c494  libstdc++-v3/testsuite/25_algorithms/binary_search/constexpr.cc
! 9753f87c84fac3bef103af7417374751  libstdc++-v3/testsuite/25_algorithms/binary_search/constrained.cc
! 1835fbddc6e22a8a89d1fae757e9f4b7  libstdc++-v3/testsuite/25_algorithms/binary_search/partitioned.cc
! 3bf43fd6cd7b909edc4461eab1735a01  libstdc++-v3/testsuite/25_algorithms/binary_search/requirements/explicit_instantiation/2.cc
! f325e296de2f5acdf84de83fe4141405  libstdc++-v3/testsuite/25_algorithms/binary_search/requirements/explicit_instantiation/pod.cc
! d7237434fd10f1bb199af09b602bf3a5  libstdc++-v3/testsuite/25_algorithms/clamp/1.cc
! e2784cb03091f8b8d64effbfc7a1d169  libstdc++-v3/testsuite/25_algorithms/clamp/2.cc
! 98988535003e8b1d6eeb1a5748a7f9c5  libstdc++-v3/testsuite/25_algorithms/clamp/constexpr.cc
! e2367337bb98389a3471640f1b6e863d  libstdc++-v3/testsuite/25_algorithms/clamp/constrained.cc
! 32260cc33973fa0849d6c81fa00e6389  libstdc++-v3/testsuite/25_algorithms/clamp/requirements/explicit_instantiation/1.cc
! 62f31809d63048366621060ff715781f  libstdc++-v3/testsuite/25_algorithms/clamp/requirements/explicit_instantiation/pod.cc
! b3550a8684d4888ff5c2e243087f628d  libstdc++-v3/testsuite/25_algorithms/constexpr_macro.cc
! 177cabfe6b30523bd1d1463d013f00b1  libstdc++-v3/testsuite/25_algorithms/copy/1.cc
! 01e966f44ac05073030b3ec0f2b362fa  libstdc++-v3/testsuite/25_algorithms/copy/2.cc
! 8bf89af26b056de869043ec9426b2d40  libstdc++-v3/testsuite/25_algorithms/copy/3.cc
! 841b22dcfcbdba02c358cf74d8bbb302  libstdc++-v3/testsuite/25_algorithms/copy/34595.cc
! 1e980173653871ab06a4c63955a79cde  libstdc++-v3/testsuite/25_algorithms/copy/4.cc
! 66fab69d5a133acc3f5e59ab0205d1a0  libstdc++-v3/testsuite/25_algorithms/copy/58982.cc
! e761431df8c0c7d88b0859d47688fa26  libstdc++-v3/testsuite/25_algorithms/copy/86658.cc
! c891424537b1c0ebcadf351402d045ff  libstdc++-v3/testsuite/25_algorithms/copy/94013.cc
! 72d1d72f3423105462a1e4c5744a1944  libstdc++-v3/testsuite/25_algorithms/copy/95578.cc
! 612d5107e38e2fd4d8addfe51a5c55b3  libstdc++-v3/testsuite/25_algorithms/copy/constexpr.cc
! 5e09099309189d9220bb8806540d6d43  libstdc++-v3/testsuite/25_algorithms/copy/constrained.cc
! 60b084323aca54b8b8fd5424ef0461ea  libstdc++-v3/testsuite/25_algorithms/copy/debug/1_neg.cc
! fe50ce88926e9d161ebbc0212fb0e78c  libstdc++-v3/testsuite/25_algorithms/copy/debug/2_neg.cc
! b2c7284211879325adb91cf51a36cd43  libstdc++-v3/testsuite/25_algorithms/copy/debug/95289.cc
! 0056b64df4361d9973ef4f09d518b7b4  libstdc++-v3/testsuite/25_algorithms/copy/debug/99402.cc
! 420fe390c4814697194e43caf4c15625  libstdc++-v3/testsuite/25_algorithms/copy/debug/constexpr_neg.cc
  a4e3b919e921272cb082f7fa810f39d2  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc
! a759ab5fe2234b1136659bf7a39187d5  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/2.cc
! bed428097249f8d19321154a00cd6570  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/31.cc
! 3f9d1f87d4696ea8390648b5ddc5f349  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/32.cc
! 8c7278d1f5c219cee132f279120e0e25  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/33.cc
! d5cc0151de40142dd0cc5e23f01bb9a6  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/41.cc
! 629867bf1aad2dc32ff57224cf05ee4a  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/42.cc
! 2889edd6b7d41873e3b1b334bfeb2116  libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/43.cc
! 4d7d1402823ab95ed69c8612ba5aac03  libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc
! 1033821660a7d352867f6f6cab940335  libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/69478.cc
! 55edd56af0215cdaa50d585ff4dca30b  libstdc++-v3/testsuite/25_algorithms/copy/requirements/explicit_instantiation/2.cc
! 9c0b6e18973013f3cf913f79092c18c1  libstdc++-v3/testsuite/25_algorithms/copy/requirements/explicit_instantiation/pod.cc
! 11d62f1b98a85fd2da71d11c66e85e87  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc
! 8bc3d57cdb306c1642cd5a5d69efee6b  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc
! df74350ddfbaa0af672780fe0a2cfb63  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc
! 8fc6a39514bd81a66ec54bb24b471c42  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc
! 28e273878e9a040265cfe302962d9b05  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/debug/deque_neg.cc
! d7ee23f823ccdda9564597c9865cb166  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc
! aa156cf9079c8e62d301d2af1dbf197b  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc
! c70aabf1b3087a6a7ed829d3143674d9  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc
! 8b592f8727d345917b4612cd259d628b  libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc
! cee1930285898de61a4be2751f2aeb4f  libstdc++-v3/testsuite/25_algorithms/copy_backward/94013.cc
! 1ab4159ef3b8b8cb55039235bdaa1e78  libstdc++-v3/testsuite/25_algorithms/copy_backward/95578.cc
! e03dbfa91278f6ec6f1557e001b7b025  libstdc++-v3/testsuite/25_algorithms/copy_backward/constexpr.cc
! 79368dea58eaf8096f58083469b409b0  libstdc++-v3/testsuite/25_algorithms/copy_backward/constrained.cc
! bcf8482b0557b6e2cce9fd1dc4e720cc  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/1_neg.cc
! 15dd7110587b380d80dfe8d3a88e5150  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/2_neg.cc
! 5977d56fc3cb1b6a9323510b9226f0b7  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/3_neg.cc
! 74508b71a223c7418646d4bc676d7a2d  libstdc++-v3/testsuite/25_algorithms/copy_backward/debug/constexpr_neg.cc
  da1fb78d5a3cd469ddf537052865be96  libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc
! 03cc3dc56feec672a1b3723533137cc5  libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/2.cc
! 08547362e731a33dc3c8440e95798475  libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc
! 0f81c254915b007e006c9907c905ef00  libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/69478.cc
! 39c4e068278b7050496d417c1d893c71  libstdc++-v3/testsuite/25_algorithms/copy_backward/requirements/explicit_instantiation/2.cc
! e5bed8e20df3fad20f903e7537508e3a  libstdc++-v3/testsuite/25_algorithms/copy_backward/requirements/explicit_instantiation/pod.cc
! 4512e7e12cb2c8ea9ae35d7ed7a3f4f5  libstdc++-v3/testsuite/25_algorithms/copy_if/check_type.cc
! 215b8599d0cce3edfe617cf7b3db015d  libstdc++-v3/testsuite/25_algorithms/copy_if/constexpr.cc
! 9bd8c33478c91f607726ce596ad99e0a  libstdc++-v3/testsuite/25_algorithms/copy_if/constrained.cc
! 3349ddaea4c2f3defa34e3ee7e617bbd  libstdc++-v3/testsuite/25_algorithms/copy_if/requirements/explicit_instantiation/2.cc
! 95589e4d187aff3fd4e2dbc6bf632a2b  libstdc++-v3/testsuite/25_algorithms/copy_if/requirements/explicit_instantiation/pod.cc
! a3e7222df69ad45f94c26a42c43f2335  libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc
! 60133f910aec11850b64fdbb10c453bd  libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc
! 0911dc705b29d38aea911a8c45926855  libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc
! bca0b6a846c7a12d3a8a06eb7cee0a11  libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc
! 087b08b3379d3f196099965bfc86db51  libstdc++-v3/testsuite/25_algorithms/copy_n/5.cc
! 63a4da9f47b50135ab63f45596f1d81a  libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc
! 0fe1a6d4fd025d4f35912a8634857183  libstdc++-v3/testsuite/25_algorithms/copy_n/58982.cc
! 560f00e8eedd3bc2774a2d1577f13a2d  libstdc++-v3/testsuite/25_algorithms/copy_n/constexpr.cc
! e772a2896896c2f4ff3bc59807e1dfba  libstdc++-v3/testsuite/25_algorithms/copy_n/constrained.cc
! 5cd374dd281daaa1a93ceb3a76f4308e  libstdc++-v3/testsuite/25_algorithms/copy_n/debug/1_neg.cc
! f0eaa78b3c00bbb26206a15798fc1ddd  libstdc++-v3/testsuite/25_algorithms/copy_n/debug/2_neg.cc
! 85b31e9ae49af915e0a7b04bf240e257  libstdc++-v3/testsuite/25_algorithms/copy_n/debug/istreambuf_ite_deque_neg.cc
! b181356ea2071380e344216f253ce759  libstdc++-v3/testsuite/25_algorithms/copy_n/istreambuf_iterator/1.cc
! 4a97012187c61bdf3c3fca9cb9eb505d  libstdc++-v3/testsuite/25_algorithms/copy_n/istreambuf_iterator/1_neg.cc
! 75d4ab96b8046b9199c412ae7e7db878  libstdc++-v3/testsuite/25_algorithms/copy_n/istreambuf_iterator/2.cc
! 84735b58cedad11e9bad78b99dc2febe  libstdc++-v3/testsuite/25_algorithms/copy_n/istreambuf_iterator/2_neg.cc
! b1d4a7c9e979d41f918d8c8811dbbb98  libstdc++-v3/testsuite/25_algorithms/copy_n/istreambuf_iterator/deque.cc
! 02b47faba8fdbd31c49d0010a19e2c93  libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc
! b22122efe242fb4402bdf30a6039da89  libstdc++-v3/testsuite/25_algorithms/copy_n/requirements/explicit_instantiation/2.cc
! dee2d7aa66bac9479b368cf813e746f6  libstdc++-v3/testsuite/25_algorithms/copy_n/requirements/explicit_instantiation/pod.cc
! 3230810f09462d12b4a9f8eed966ce55  libstdc++-v3/testsuite/25_algorithms/count/1.cc
! 8cf3f70029425876487a241a5859fd02  libstdc++-v3/testsuite/25_algorithms/count/check_type.cc
! 0f7b34bdd46bd19aab68e03ac4509883  libstdc++-v3/testsuite/25_algorithms/count/constexpr.cc
! 74e7f78a1ba33106b1314b079a68abdd  libstdc++-v3/testsuite/25_algorithms/count/constrained.cc
! efcf2bf88da2bf7b11217502efe79092  libstdc++-v3/testsuite/25_algorithms/count/requirements/explicit_instantiation/2.cc
! 92d8fb3984120317b8f0d6f67b5269a5  libstdc++-v3/testsuite/25_algorithms/count/requirements/explicit_instantiation/pod.cc
! 369068b2b511063c3c2ba2626b9df863  libstdc++-v3/testsuite/25_algorithms/count_if/1.cc
! 6763afe72aa9ec7c67ed183fee506d6f  libstdc++-v3/testsuite/25_algorithms/count_if/check_type.cc
! 5c7d9c6154476093f88885acf9d16d82  libstdc++-v3/testsuite/25_algorithms/count_if/constexpr.cc
! 1804350e1737ba988a8f015cea0f07a3  libstdc++-v3/testsuite/25_algorithms/count_if/constrained.cc
! 5a29512ae869c4583b3188c750e22e9d  libstdc++-v3/testsuite/25_algorithms/count_if/requirements/explicit_instantiation/2.cc
! 6280e57768fb0a1c32182acb8948bd6b  libstdc++-v3/testsuite/25_algorithms/count_if/requirements/explicit_instantiation/pod.cc
! e67c8c0d3a22d4acd86942968d668fc3  libstdc++-v3/testsuite/25_algorithms/cpp_lib_constexpr.cc
! ac54fc39121eaead364a3542ad099e7c  libstdc++-v3/testsuite/25_algorithms/equal/1.cc
! ecb95e887e08c690440aac3ea0aa7636  libstdc++-v3/testsuite/25_algorithms/equal/2.cc
! ed1eb16618fbe25b4887431e524816d6  libstdc++-v3/testsuite/25_algorithms/equal/94013.cc
! 5225b7b04b647f86ad57e0d823b7e94e  libstdc++-v3/testsuite/25_algorithms/equal/95578.cc
! e1060fbc973f9bfc655cc5f72c082709  libstdc++-v3/testsuite/25_algorithms/equal/check_type.cc
! ee3f509b48de1d6b21a95d0ab12af3ef  libstdc++-v3/testsuite/25_algorithms/equal/check_type2.cc
! 203aa0ede55da5b4af8c064ceffb33b1  libstdc++-v3/testsuite/25_algorithms/equal/constexpr.cc
! c2b7e18066fe524e1d3944595e555001  libstdc++-v3/testsuite/25_algorithms/equal/constexpr_neg.cc
! 2586de7804150ae767ef20c02f71abec  libstdc++-v3/testsuite/25_algorithms/equal/constrained.cc
! 0a63ea68265bee3405770075ac49a979  libstdc++-v3/testsuite/25_algorithms/equal/debug/1_neg.cc
! 31aba990c9b170bf02854415b4a92290  libstdc++-v3/testsuite/25_algorithms/equal/debug/2_neg.cc
! c65302052bd4059300003ff14d4b2e48  libstdc++-v3/testsuite/25_algorithms/equal/debug/3_neg.cc
! 43eee8f8785c557398cf0699c3e47664  libstdc++-v3/testsuite/25_algorithms/equal/debug/constexpr_neg.cc
! afd2f0bbfb1cf8527222f46b2a38cc9a  libstdc++-v3/testsuite/25_algorithms/equal/deque_iterators/1.cc
! bd31692c50df0792a6736e766f38b07e  libstdc++-v3/testsuite/25_algorithms/equal/no_operator_ne.cc
! 006717a207abc4b54e2a91ae4fc05290  libstdc++-v3/testsuite/25_algorithms/equal/requirements/explicit_instantiation/2.cc
! 9130a9791d352e9895a4c4b6ef52a4a6  libstdc++-v3/testsuite/25_algorithms/equal/requirements/explicit_instantiation/pod.cc
! a8bf1e440a3fdf728d0a169decc9bbfc  libstdc++-v3/testsuite/25_algorithms/equal_range/1.cc
! cc8ddc76892af02131f2542e11455341  libstdc++-v3/testsuite/25_algorithms/equal_range/2.cc
! be152ce0f675fea87010eddc4f1a8f01  libstdc++-v3/testsuite/25_algorithms/equal_range/check_type.cc
! 9837ce762a6da1302e98b5012c5b4550  libstdc++-v3/testsuite/25_algorithms/equal_range/constexpr.cc
! f9f23b3bc49005f21e89523af2c2fdd8  libstdc++-v3/testsuite/25_algorithms/equal_range/constrained.cc
! e062a619865343d5bb0a385ffe0ffe07  libstdc++-v3/testsuite/25_algorithms/equal_range/partitioned.cc
! 33f9aa1a8de323450a8e4cb079aa1d99  libstdc++-v3/testsuite/25_algorithms/equal_range/requirements/explicit_instantiation/2.cc
! 41169ac305038ae02eea0872f2988ea9  libstdc++-v3/testsuite/25_algorithms/equal_range/requirements/explicit_instantiation/pod.cc
! 188cc596b37525a251abe3742f2d91f8  libstdc++-v3/testsuite/25_algorithms/fill/1.cc
! 622f9647e2e83e6ba879b4ea8730d7c5  libstdc++-v3/testsuite/25_algorithms/fill/2.cc
! 37d1fff128cb02764ed8ef9312b51aca  libstdc++-v3/testsuite/25_algorithms/fill/3.cc
! 4ebfa9ea0b34480b34488e7ea20caaff  libstdc++-v3/testsuite/25_algorithms/fill/35725.cc
! 534e9b4593000a841aa964abdd6ad586  libstdc++-v3/testsuite/25_algorithms/fill/4.cc
! 513078934b15c96c422e36b8d45b6d60  libstdc++-v3/testsuite/25_algorithms/fill/94013.cc
! a65a9017aad93064f061a4185096925c  libstdc++-v3/testsuite/25_algorithms/fill/94017.cc
! 8a8352e9eb1982e76252b24a9a156969  libstdc++-v3/testsuite/25_algorithms/fill/bvector/1.cc
! d199d80bcce23caa7e53b5b96dba9600  libstdc++-v3/testsuite/25_algorithms/fill/constexpr.cc
! 12e5359a5906878ec3ee05b462d86e09  libstdc++-v3/testsuite/25_algorithms/fill/constrained.cc
! 7d4a05114fb1c5d5f77bab10a4659cb7  libstdc++-v3/testsuite/25_algorithms/fill/deque_iterators/1.cc
! 1786191429b3d7ab3f78554996902163  libstdc++-v3/testsuite/25_algorithms/fill/requirements/explicit_instantiation/2.cc
! 0c817d7ef666f5eacdfa23bfb2e374fc  libstdc++-v3/testsuite/25_algorithms/fill/requirements/explicit_instantiation/pod.cc
! 08e8f51a6791b3ae021c135769f1e0db  libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc
! 5378b080b481f0e7e7fb8fa9c5523ede  libstdc++-v3/testsuite/25_algorithms/fill_n/2.cc
! 66f1fb3a703897862b06d576fe7e1447  libstdc++-v3/testsuite/25_algorithms/fill_n/25306.cc
! dd4a7f1410642a835815632776ff746b  libstdc++-v3/testsuite/25_algorithms/fill_n/35725.cc
! f88595f13f04ef164c1e177bda52e024  libstdc++-v3/testsuite/25_algorithms/fill_n/87982.cc
! 4a332faf98c7b0377538e42ee3fdf4fc  libstdc++-v3/testsuite/25_algorithms/fill_n/87982_neg.cc
! 1ded870067b1c1e99517c657efe50ac5  libstdc++-v3/testsuite/25_algorithms/fill_n/94017.cc
! 251965c810329154ac499c6dd5bb4f40  libstdc++-v3/testsuite/25_algorithms/fill_n/constexpr.cc
! 3bbf0f160d987d34657918144fe8aaaf  libstdc++-v3/testsuite/25_algorithms/fill_n/constrained.cc
! 8c24a606409aa0e3a205e2784aea835d  libstdc++-v3/testsuite/25_algorithms/fill_n/debug/1_neg.cc
! 1a15392e14a60f1f3c2af68c96e56c78  libstdc++-v3/testsuite/25_algorithms/fill_n/debug/2_neg.cc
! 3853066fca0f032e0bcb983c012d33d8  libstdc++-v3/testsuite/25_algorithms/fill_n/debug/3_neg.cc
! 6ed9eab8f35dd1d619025cb8b2d1e966  libstdc++-v3/testsuite/25_algorithms/fill_n/debug/4_neg.cc
! 4f5184dddda094fe84b04bc195ec4853  libstdc++-v3/testsuite/25_algorithms/fill_n/dr426.cc
! 006717a207abc4b54e2a91ae4fc05290  libstdc++-v3/testsuite/25_algorithms/fill_n/requirements/explicit_instantiation/2.cc
! 9130a9791d352e9895a4c4b6ef52a4a6  libstdc++-v3/testsuite/25_algorithms/fill_n/requirements/explicit_instantiation/pod.cc
! a61ecb48e5c62054dc667ebf4c260fd1  libstdc++-v3/testsuite/25_algorithms/find/1.cc
! 18f4d191488660bb42c9b4cbf10d5aa3  libstdc++-v3/testsuite/25_algorithms/find/17441.cc
! 6a625e05156bcc6a4b9998d27890a4ea  libstdc++-v3/testsuite/25_algorithms/find/39546.cc
! a0a07beee540707d038360a181db402e  libstdc++-v3/testsuite/25_algorithms/find/check_type.cc
! 30f5e4993435ccc22a950bb4640005d4  libstdc++-v3/testsuite/25_algorithms/find/constexpr.cc
! 4e7fa7ee7d8a84900d6dbb0ff7ba00c6  libstdc++-v3/testsuite/25_algorithms/find/constrained.cc
! 64de9308a6eee5303eec42607cb013d0  libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc
! 2b005c6012a82116bf22bb3727eaf5b5  libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc
! 10349e16939e1622caed7d76b17f53af  libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc
! aeadaed7257f31b28b45768884878640  libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc
! 5054cfb8ad9143f3495ef273555d122c  libstdc++-v3/testsuite/25_algorithms/find/requirements/explicit_instantiation/2.cc
! 233da1ac56901c73e437ccdd1e63ffc4  libstdc++-v3/testsuite/25_algorithms/find/requirements/explicit_instantiation/pod.cc
! 8b6b580cecf7c7914bddd5bf2a6075a6  libstdc++-v3/testsuite/25_algorithms/find/vectorbool.cc
! 66eb986c23539f8c18fd158c54cbce96  libstdc++-v3/testsuite/25_algorithms/find_end/1.cc
! 3ff1af40bdccc86d0deee0ee37ff4539  libstdc++-v3/testsuite/25_algorithms/find_end/check_type.cc
! f2e5e602ead243b1326dd56b2d0f990f  libstdc++-v3/testsuite/25_algorithms/find_end/constexpr.cc
! be7d7d9ec0b7adb1e54b618d55f58ff6  libstdc++-v3/testsuite/25_algorithms/find_end/constrained.cc
! d73c96632dcce7e7305483a5bb8d5fdf  libstdc++-v3/testsuite/25_algorithms/find_end/requirements/explicit_instantiation/2.cc
! b5c708d2a90b2f5cee0d99dc04060542  libstdc++-v3/testsuite/25_algorithms/find_end/requirements/explicit_instantiation/pod.cc
! c04e3810b7101d41b4192d209c2c182d  libstdc++-v3/testsuite/25_algorithms/find_end/vectorbool.cc
! 807b1ce74925fdf0f1508f040ec0ddf1  libstdc++-v3/testsuite/25_algorithms/find_first_of/1.cc
! f192237a2f5274128e68a8d328815f6d  libstdc++-v3/testsuite/25_algorithms/find_first_of/check_type.cc
! 1bf534428cf8a17ab4df70e9d3c14c6b  libstdc++-v3/testsuite/25_algorithms/find_first_of/concept_check_1.cc
! 6bc9e7d1384ac2019c3ea5ea655d0798  libstdc++-v3/testsuite/25_algorithms/find_first_of/constexpr.cc
! b5c25fc04bcff4fd42c2ea1932ea66f2  libstdc++-v3/testsuite/25_algorithms/find_first_of/constrained.cc
! 7984c87acf51fb374db5526a0640c5f7  libstdc++-v3/testsuite/25_algorithms/find_first_of/requirements/explicit_instantiation/2.cc
! a7cbd613f27add2b809bd3a3704225c7  libstdc++-v3/testsuite/25_algorithms/find_first_of/requirements/explicit_instantiation/pod.cc
! 7b325985357a91b1a51bcdd82c3b0a92  libstdc++-v3/testsuite/25_algorithms/find_first_of/vectorbool.cc
! 4f34d495965a1d71f2a0b165f07f1f70  libstdc++-v3/testsuite/25_algorithms/find_if/1.cc
! 4e8ac68d6a27e0b62271c01370c2f7ca  libstdc++-v3/testsuite/25_algorithms/find_if/check_type.cc
! f8c6df837828d63c659464c84b089d8d  libstdc++-v3/testsuite/25_algorithms/find_if/constexpr.cc
! b7362a18a3460b8e7b892d70a8a7feed  libstdc++-v3/testsuite/25_algorithms/find_if/constrained.cc
! b1ce5b537a9335a3386de031bbdde09f  libstdc++-v3/testsuite/25_algorithms/find_if/requirements/explicit_instantiation/2.cc
! e0dd8669bf3276369c6292db39b69e1a  libstdc++-v3/testsuite/25_algorithms/find_if/requirements/explicit_instantiation/pod.cc
! 8b6b580cecf7c7914bddd5bf2a6075a6  libstdc++-v3/testsuite/25_algorithms/find_if/vectorbool.cc
! 328c5663ef3cd7aa9d4a288a260e8b67  libstdc++-v3/testsuite/25_algorithms/find_if_not/1.cc
! 1b94ef04bf187a5937a40de581eba7a3  libstdc++-v3/testsuite/25_algorithms/find_if_not/check_type.cc
! 626fad3038e74866738867fe6d5307d0  libstdc++-v3/testsuite/25_algorithms/find_if_not/constexpr.cc
! 3841862d06722e446a8b66f69c784353  libstdc++-v3/testsuite/25_algorithms/find_if_not/constrained.cc
! be121df10cae73f7d101a14acc9d88f4  libstdc++-v3/testsuite/25_algorithms/find_if_not/requirements/explicit_instantiation/2.cc
! 77921b43e402f4202df07f8a9beb4a9d  libstdc++-v3/testsuite/25_algorithms/find_if_not/requirements/explicit_instantiation/pod.cc
! 28811c5679956ad4c2ce1e2d2788f32b  libstdc++-v3/testsuite/25_algorithms/find_if_not/vectorbool.cc
! 534fc6b315d4064e76aff67b8c4c154e  libstdc++-v3/testsuite/25_algorithms/for_each/1.cc
! 7d09df220a9e9862490d0fc7ba49d1e9  libstdc++-v3/testsuite/25_algorithms/for_each/constexpr.cc
! d1f63920f6ed6c1ca19711c477f4f582  libstdc++-v3/testsuite/25_algorithms/for_each/constrained.cc
! 97677ae9634e0d8b19675faa9d89471f  libstdc++-v3/testsuite/25_algorithms/for_each/for_each_n.cc
! 80065d4ed9e5d028988a84b2d6c15b92  libstdc++-v3/testsuite/25_algorithms/for_each/for_each_n_debug.cc
! a1aacdfeb3e0d19bc959fba547afd443  libstdc++-v3/testsuite/25_algorithms/for_each/requirements/explicit_instantiation/2.cc
! 0a06c19118ca46a80bb74b7b71bed330  libstdc++-v3/testsuite/25_algorithms/for_each/requirements/explicit_instantiation/pod.cc
! 6b1cf2e97dbeee0a90043f1abe9044ef  libstdc++-v3/testsuite/25_algorithms/generate/constexpr.cc
! a81fc16e7f5ea2cd2aba2bfe960fe2d4  libstdc++-v3/testsuite/25_algorithms/generate/constrained.cc
! 92790b72bc011d70efcde33859597331  libstdc++-v3/testsuite/25_algorithms/generate/requirements/explicit_instantiation/2.cc
! 71e39e0ca445653e9476c9a22b68e95e  libstdc++-v3/testsuite/25_algorithms/generate/requirements/explicit_instantiation/pod.cc
! 452585d3164abe6036fd88aae0f20fa1  libstdc++-v3/testsuite/25_algorithms/generate_n/1.cc
! c17534ff872482e59b589ed0d79d84c7  libstdc++-v3/testsuite/25_algorithms/generate_n/25306.cc
! 98996018f2ba4d8c77c3c4de4ce4f8fa  libstdc++-v3/testsuite/25_algorithms/generate_n/87982.cc
! a02463b1f0f71b256c51d62221ce3af1  libstdc++-v3/testsuite/25_algorithms/generate_n/87982_neg.cc
! a691998610b25d1b8091ecffd6b44fb6  libstdc++-v3/testsuite/25_algorithms/generate_n/constexpr.cc
! 52d5e02cbce2f0922f2a60f2d6733c11  libstdc++-v3/testsuite/25_algorithms/generate_n/constrained.cc
! 65219fd4a42be05efdfe48001488ea84  libstdc++-v3/testsuite/25_algorithms/generate_n/dr426.cc
! ef03e229e954dfc69d96ba999753ca4f  libstdc++-v3/testsuite/25_algorithms/generate_n/requirements/explicit_instantiation/2.cc
! 1d91da3a245dc28b198c4f6cfc7a7f77  libstdc++-v3/testsuite/25_algorithms/generate_n/requirements/explicit_instantiation/pod.cc
! d2ae6c0cbb166f34ac109bd5281a7a84  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/algorithm_parallel_mode.cc
! d8ad4b823c26e79c817b5702a418e9b6  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm.cc
! 97bad822fb30d2159aaf2f038dea0d27  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_assert.cc
! 0886faadbae53d0b2f6609abc0700913  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_assert2.cc
! c8d3d51e6c415e269bc326f5de3f0e1c  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed1.cc
! 76746a93f45ba71536413614997e62b3  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed2.cc
! 340a26df20669f90b4f690810b1f58c1  libstdc++-v3/testsuite/25_algorithms/headers/algorithm/synopsis.cc
! 776b44dd53f4fe0b3f701aacd6eecac1  libstdc++-v3/testsuite/25_algorithms/headers/cstdlib/functions_std.cc
! 20c79f2e299a221eab20f57c14d053d5  libstdc++-v3/testsuite/25_algorithms/heap/1.cc
! 7b38e486700c491fe1fdb50697c14145  libstdc++-v3/testsuite/25_algorithms/heap/constrained.cc
! 5bd7d9ed6db030dd361b92898f1587a5  libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc
! 185584434cc43cdd57f64e461e99e1af  libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc
! 50cfc1b50f3c1fcb732d9829e5a4de94  libstdc++-v3/testsuite/25_algorithms/heap/vectorbool.cc
! b02d3711878fd27b7ce10e9f0341a43f  libstdc++-v3/testsuite/25_algorithms/includes/1.cc
! f5b6f3d5bbeb9d9af1370cb5e50db6ce  libstdc++-v3/testsuite/25_algorithms/includes/check_type.cc
! 586f89c797aee03d1a2e5b826564e496  libstdc++-v3/testsuite/25_algorithms/includes/constrained.cc
! f71b8d2812db1a69e4758b82becd1e48  libstdc++-v3/testsuite/25_algorithms/includes/requirements/explicit_instantiation/2.cc
! 0d3430a25b8d9a7d02cc16c09293bd30  libstdc++-v3/testsuite/25_algorithms/includes/requirements/explicit_instantiation/pod.cc
! 4328b648bddec1c2376e5ed53e6a0864  libstdc++-v3/testsuite/25_algorithms/inplace_merge/1.cc
! 7e975debb46baa3b7ac95b824b0cb776  libstdc++-v3/testsuite/25_algorithms/inplace_merge/49559.cc
! 102f7ab06f784172194eb20f98ba48e3  libstdc++-v3/testsuite/25_algorithms/inplace_merge/check_type.cc
! 26d74a0821ea0c5cc06c223c9ff2147a  libstdc++-v3/testsuite/25_algorithms/inplace_merge/constrained.cc
! 0541e2c6251b27dd383597b02d9a1d60  libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable.cc
! ad98c980d34d5489a508707e209f1d2a  libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable2.cc
! 6a9ce3b99198ed9630011d394023fca8  libstdc++-v3/testsuite/25_algorithms/inplace_merge/requirements/explicit_instantiation/2.cc
! 9734bce8ae4bd37a2c0b3138b8c0efd6  libstdc++-v3/testsuite/25_algorithms/inplace_merge/requirements/explicit_instantiation/pod.cc
! e62f5b11cde6142229be391133d9c4e8  libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc
! 1f2e749f666afb4b55690840ec100860  libstdc++-v3/testsuite/25_algorithms/is_heap/constexpr.cc
! e168a93af4175cb89b7d59bd22650510  libstdc++-v3/testsuite/25_algorithms/is_heap/requirements/explicit_instantiation/2.cc
! 637703aef65ca9386f672acba41c9aad  libstdc++-v3/testsuite/25_algorithms/is_heap/requirements/explicit_instantiation/pod.cc
! 0175f1fdc73b04ce1c70f8912ecd0e9d  libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc
! 1318f10ef6712befb98af078f9c41e3f  libstdc++-v3/testsuite/25_algorithms/is_heap_until/constexpr.cc
! 5730c765e92e3fffcd60a97e9a3ae8d3  libstdc++-v3/testsuite/25_algorithms/is_heap_until/requirements/explicit_instantiation/2.cc
! 6383661f6c25db9a4a541ae38677ec4b  libstdc++-v3/testsuite/25_algorithms/is_heap_until/requirements/explicit_instantiation/pod.cc
! 756f0f7c662b6da4c45d51b839ec3a7c  libstdc++-v3/testsuite/25_algorithms/is_partitioned/1.cc
! 8b45b0c4c4eeef6669768d36753adf61  libstdc++-v3/testsuite/25_algorithms/is_partitioned/2.cc
! 571c619ca85b6cfac6ee2e4f6ee15a4e  libstdc++-v3/testsuite/25_algorithms/is_partitioned/check_type.cc
! 8dddfa6e6f5ea3fd331356f5e1ec12af  libstdc++-v3/testsuite/25_algorithms/is_partitioned/constexpr.cc
! 6b1bc04346f26ec08028b9404fb1b725  libstdc++-v3/testsuite/25_algorithms/is_partitioned/constrained.cc
! cead898242e364bd0e53ddde43420b7f  libstdc++-v3/testsuite/25_algorithms/is_partitioned/requirements/explicit_instantiation/2.cc
! 18d4eaf0b50d06d3f70a17b58809b4f8  libstdc++-v3/testsuite/25_algorithms/is_partitioned/requirements/explicit_instantiation/pod.cc
! f853bd5855273e665fccd2974c87ebf3  libstdc++-v3/testsuite/25_algorithms/is_permutation/1.cc
! b84420825ebb670bb83c79a29453368c  libstdc++-v3/testsuite/25_algorithms/is_permutation/2.cc
! 54f161aa7d8a3b9ade7b964f32863e66  libstdc++-v3/testsuite/25_algorithms/is_permutation/64646.cc
! a90f60857b6bb884fc8740dacd282edc  libstdc++-v3/testsuite/25_algorithms/is_permutation/check_type.cc
! 4ff7f4e4df2227499533122946e4ab2f  libstdc++-v3/testsuite/25_algorithms/is_permutation/check_type2.cc
! b56f5399bcb446b686dee9754d0a8b6b  libstdc++-v3/testsuite/25_algorithms/is_permutation/constexpr.cc
! 34926fd54429a2c66a21a85de54ddc72  libstdc++-v3/testsuite/25_algorithms/is_permutation/constrained.cc
! d52b4d3944d90632f8f1db9fab0ddead  libstdc++-v3/testsuite/25_algorithms/is_permutation/requirements/explicit_instantiation/2.cc
! 1352e526cd60eda6be8f6c01ea487da0  libstdc++-v3/testsuite/25_algorithms/is_permutation/requirements/explicit_instantiation/pod.cc
! ffdf26cb11b4d11078fa1b3d09279b4d  libstdc++-v3/testsuite/25_algorithms/is_permutation/vectorbool.cc
! 6b12f012b28ce5d07702f93982ee1ee4  libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc
! ed3d4deaa7497c7a1263de5c43d0d4d7  libstdc++-v3/testsuite/25_algorithms/is_sorted/constexpr.cc
! 9ba02d4d460ecb25753f22c4ad2e47a6  libstdc++-v3/testsuite/25_algorithms/is_sorted/constrained.cc
! a4dae77f37c1cb17073c4a9f52b66be4  libstdc++-v3/testsuite/25_algorithms/is_sorted/requirements/explicit_instantiation/2.cc
! b0c196d5159b5b10db2cfe3dd7e75bec  libstdc++-v3/testsuite/25_algorithms/is_sorted/requirements/explicit_instantiation/pod.cc
! dfa25fb2226c3d6c61ac7fc5dab4be96  libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc
! 7ce1f2d7f1075110a8ae9eb202225da4  libstdc++-v3/testsuite/25_algorithms/is_sorted_until/constexpr.cc
! 4fe9d8c546a413edb4f314afd1052e9c  libstdc++-v3/testsuite/25_algorithms/is_sorted_until/constrained.cc
! 13d22c9fee3fba751c45498ca50a8426  libstdc++-v3/testsuite/25_algorithms/is_sorted_until/requirements/explicit_instantiation/2.cc
! b212623315d498a48a03733281b7c437  libstdc++-v3/testsuite/25_algorithms/is_sorted_until/requirements/explicit_instantiation/pod.cc
! 4e32a028bf871c652aae0c248cf491ea  libstdc++-v3/testsuite/25_algorithms/iter_swap/20577.cc
! a5d6b456486e8d8f3ae7aeb0b5a74891  libstdc++-v3/testsuite/25_algorithms/iter_swap/constexpr.cc
! 25546a32a3f4bbebf7087c8de9bd2fd8  libstdc++-v3/testsuite/25_algorithms/iter_swap/requirements/explicit_instantiation/2.cc
! ebee547455f1b5fb887e30911427ce7f  libstdc++-v3/testsuite/25_algorithms/iter_swap/requirements/explicit_instantiation/pod.cc
! b745356593134f6587ce5c7a944ad05a  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/1.cc
! e9930b44233507ccddf2b50440579c55  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc
! 84ddb5844741b29a85de3773ee6635de  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/93972.cc
! 0d2ea14687d058a9ba2ce28223a331ba  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/94013.cc
! 0c635234519858490b65711430a65714  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/95578.cc
! 61ef1cc5ec537b5cb112379718925c6b  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/check_type.cc
! 5c2654b41f0f0f32852df1ed90d521f3  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/constexpr.cc
! 8b899e964b9c667bb98e84a23c3ecb4b  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/constrained.cc
! 9a6736a7d02bef2c48a7d37c06194f4f  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/deque_iterators/1.cc
! 0760bb9f4bb7bf3e13995f9adbdb9934  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/requirements/explicit_instantiation/2.cc
! 0340568de491299dc209b19d24097878  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/requirements/explicit_instantiation/pod.cc
! b84123300f318db795b4127821d5ceef  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/uchar.cc
! 2bfaa67426aa29acae3e6aef04e0478e  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/1.cc
! b581325610de818749534c0d46aa3ce1  libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/constexpr.cc
! d8ab00fb36581eefbd51c9ce173c1dc2  libstdc++-v3/testsuite/25_algorithms/lower_bound/1.cc
! 3a4f9b5436955304a5ea1cf3d186618f  libstdc++-v3/testsuite/25_algorithms/lower_bound/2.cc
! 1a10f378cf1c09f273ec6c1e4bf407b4  libstdc++-v3/testsuite/25_algorithms/lower_bound/33613.cc
! eb6ff42ac983ee16f29d6407dbcb143b  libstdc++-v3/testsuite/25_algorithms/lower_bound/check_type.cc
! 0c6d0ccc797d66b10f246448bbebdd32  libstdc++-v3/testsuite/25_algorithms/lower_bound/constexpr.cc
! f13778027f1998932ba520a5858aa798  libstdc++-v3/testsuite/25_algorithms/lower_bound/constrained.cc
! 3dbd1359b799b7d60307417f9410ad16  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_neg.cc
! a69ff69dbdde1cebad272f7ac09f6ce5  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_partitioned_pred_neg.cc
! a6f47360731e36e2ae7a6f22dd45636d  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/constexpr_valid_range_neg.cc
! 5c9d1d92e03bd802c6928e504eaca8e6  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/irreflexive.cc
! 6e5d535c6b2a56d5189d2d79f4e2cfdb  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_neg.cc
! b642139a1d4361caf43610e0bb42a5e5  libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_pred_neg.cc
! 8f3034c7012d4e347a69ab4fd6d6f58d  libstdc++-v3/testsuite/25_algorithms/lower_bound/no_operator_ne.cc
! 5931c51ef6430c18f6674524f2e1c320  libstdc++-v3/testsuite/25_algorithms/lower_bound/partitioned.cc
! f02097b752043da330fc8e2f79e91228  libstdc++-v3/testsuite/25_algorithms/lower_bound/requirements/explicit_instantiation/2.cc
! 03ee3c1577ef60e21562aacb5ddffdee  libstdc++-v3/testsuite/25_algorithms/lower_bound/requirements/explicit_instantiation/pod.cc
! 3349b685462b370e3d9b60460b1ba1e3  libstdc++-v3/testsuite/25_algorithms/make_heap/80064.cc
! 0b4853b09cdf744a806a12a7d3f1246e  libstdc++-v3/testsuite/25_algorithms/make_heap/complexity.cc
! e41805aa0e4e7f91d663d350e60bfd15  libstdc++-v3/testsuite/25_algorithms/make_heap/constexpr.cc
! 197566030df8a7af5526d2b8ee6a77da  libstdc++-v3/testsuite/25_algorithms/make_heap/movable.cc
! cd7eeda49394d9f84ec038b8797af4b2  libstdc++-v3/testsuite/25_algorithms/make_heap/requirements/explicit_instantiation/2.cc
! 7e0105a5288e25e8ead13bf89f3687eb  libstdc++-v3/testsuite/25_algorithms/make_heap/requirements/explicit_instantiation/pod.cc
! aa9eb8f15d34d4ba17bbf51196822538  libstdc++-v3/testsuite/25_algorithms/max/1.cc
! 4c02cfaa500887fe079aaa49d6d0f777  libstdc++-v3/testsuite/25_algorithms/max/2.cc
! 51b458ca86e215ce57c385b30bf8faf3  libstdc++-v3/testsuite/25_algorithms/max/3.cc
! aa2965f7d90d1c3f751b6c0e200c1dab  libstdc++-v3/testsuite/25_algorithms/max/37547.cc
! 83bad99c36e5835cdc9453d53c9525af  libstdc++-v3/testsuite/25_algorithms/max/4.cc
! 5cfdab3839ce01954f7db81ce23534fe  libstdc++-v3/testsuite/25_algorithms/max/constexpr.cc
! 408e444d664f3bae373c33f22e12cfd8  libstdc++-v3/testsuite/25_algorithms/max/constrained.cc
! 19f1564ed0d678c69d71a01489dec7e5  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/2.cc
! f3b552112f56dec793a31c7fd2fda9b6  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/3.cc
! 8ad7a265e983c0b1dc5fca3129eafedd  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/pod.cc
! 0ba7d6cb678adc20915f45fdfeeb0c10  libstdc++-v3/testsuite/25_algorithms/max/requirements/explicit_instantiation/pod2.cc
! 157d348c9601dd4be5583d6ca744a982  libstdc++-v3/testsuite/25_algorithms/max_element/1.cc
! bd2dca22270e8de2b072c1ac5b72e837  libstdc++-v3/testsuite/25_algorithms/max_element/check_type.cc
! 681c1b6f1de64a2b5bd2ce3248896af5  libstdc++-v3/testsuite/25_algorithms/max_element/constexpr.cc
! 08686c16787e7f0c9bdb8b49be8c416a  libstdc++-v3/testsuite/25_algorithms/max_element/constrained.cc
! f4e938fc14396cbff648e5ad2f5962cc  libstdc++-v3/testsuite/25_algorithms/max_element/requirements/explicit_instantiation/2.cc
! b2aef2cdd46d24e2421d04d1c1553cd0  libstdc++-v3/testsuite/25_algorithms/max_element/requirements/explicit_instantiation/pod.cc
! d345914000499741d6f5e910815bb834  libstdc++-v3/testsuite/25_algorithms/merge/1.cc
! 93bfdaedbff61c4011cd6cb80e0c5aa4  libstdc++-v3/testsuite/25_algorithms/merge/check_type.cc
! 507af7f21af4b7c77f4058fb64924e63  libstdc++-v3/testsuite/25_algorithms/merge/constexpr.cc
! e435139b772664bfa0d4f657ef7deadf  libstdc++-v3/testsuite/25_algorithms/merge/constrained.cc
! 7344aff1aa537f8e7bb5a61e16455872  libstdc++-v3/testsuite/25_algorithms/merge/requirements/explicit_instantiation/2.cc
! 7f04c84a4c5983a47ad573c2aeab19a7  libstdc++-v3/testsuite/25_algorithms/merge/requirements/explicit_instantiation/pod.cc
! dd21faf67e01e9cad091a21e15c4b33f  libstdc++-v3/testsuite/25_algorithms/min/1.cc
! bf7044d2c51006bda6e065d6c60dd0db  libstdc++-v3/testsuite/25_algorithms/min/2.cc
! ceb70a133dcd97382e52b70410c6270a  libstdc++-v3/testsuite/25_algorithms/min/3.cc
! 959abce4b193b2daf9590dc4dcd43ffb  libstdc++-v3/testsuite/25_algorithms/min/37547.cc
! 7541c1c1ec6be648ee66e002e594b044  libstdc++-v3/testsuite/25_algorithms/min/4.cc
! fa6cc4336b47811895396eb9e2e968d6  libstdc++-v3/testsuite/25_algorithms/min/concept_checks.cc
! 66e87461e286f7b1aafc94328428b360  libstdc++-v3/testsuite/25_algorithms/min/constexpr.cc
! adf4ec835bb0ed39a3c242ff85b2241f  libstdc++-v3/testsuite/25_algorithms/min/constrained.cc
! 38d3d8f4ec18c2ead80eca298f3ed38f  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/2.cc
! 70517d81916bbf06a7df638b1671bb55  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/3.cc
! fb7837c7f0e1804f01867b5c18331469  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/pod.cc
! c3f299886e96b1e490a05ef1fcf32791  libstdc++-v3/testsuite/25_algorithms/min/requirements/explicit_instantiation/pod2.cc
! c9780182ab56c28775e35722331fc274  libstdc++-v3/testsuite/25_algorithms/min_element/1.cc
! e14b34e2f72a00e2bd323a78c54847d0  libstdc++-v3/testsuite/25_algorithms/min_element/check_type.cc
! b92cd829cad5955200c9f28c8d2734f9  libstdc++-v3/testsuite/25_algorithms/min_element/constexpr.cc
! 067ecaf41f4892000a3f52f74dc5f598  libstdc++-v3/testsuite/25_algorithms/min_element/constrained.cc
! 2513c085caf20a5de9e75f1db9aebbc7  libstdc++-v3/testsuite/25_algorithms/min_element/requirements/explicit_instantiation/2.cc
! a590aaef5546e84589096bd432ae9f53  libstdc++-v3/testsuite/25_algorithms/min_element/requirements/explicit_instantiation/pod.cc
! 5b3d430f44f27e6dbaee438a53d27877  libstdc++-v3/testsuite/25_algorithms/minmax/1.cc
! b0a0c72605df29dad3ae4ee1b92a3d60  libstdc++-v3/testsuite/25_algorithms/minmax/2.cc
! 86f87e2f65724df948c1de5e1c25e266  libstdc++-v3/testsuite/25_algorithms/minmax/3.cc
! 12cc5e9884aa40f11a9eeec37090b803  libstdc++-v3/testsuite/25_algorithms/minmax/37547.cc
! 478845b243123d9294d81eb993c99009  libstdc++-v3/testsuite/25_algorithms/minmax/constexpr.cc
! 9e1252831e625ed13064ebe544348c91  libstdc++-v3/testsuite/25_algorithms/minmax/constrained.cc
! 7831aeaf9cc63397a6e465e5f593726a  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/2.cc
! f3dd1323e1f0230f93b685ca44908f93  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/3.cc
! 595fc8fbd01d1134761e5f89228ad06f  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/pod.cc
! a82917748484c9cabae27b767b3e4f81  libstdc++-v3/testsuite/25_algorithms/minmax/requirements/explicit_instantiation/pod2.cc
! 59f9fc0c2156438c36dc8148e1a9eb78  libstdc++-v3/testsuite/25_algorithms/minmax_element/1.cc
! f4c93701666305471b6f68ec7e5bbb29  libstdc++-v3/testsuite/25_algorithms/minmax_element/check_type.cc
! 9b0e64cd8da48150b142071cca42071c  libstdc++-v3/testsuite/25_algorithms/minmax_element/constexpr.cc
! 53d8c2ae7e48e3bdcfa55ecdbc800aec  libstdc++-v3/testsuite/25_algorithms/minmax_element/constrained.cc
! 9911b769cc1df11dd491677bbeee6b63  libstdc++-v3/testsuite/25_algorithms/minmax_element/requirements/explicit_instantiation/2.cc
! 666c4160b2fed4438205947a346f9b6d  libstdc++-v3/testsuite/25_algorithms/minmax_element/requirements/explicit_instantiation/pod.cc
! 99db25aa1f1b5770209aa9fed4550793  libstdc++-v3/testsuite/25_algorithms/mismatch/1.cc
! 19daae3d0cf4ac572fadd2390ccaff29  libstdc++-v3/testsuite/25_algorithms/mismatch/2.cc
! e3353433ba9e10f9f12ef9f1a56a2233  libstdc++-v3/testsuite/25_algorithms/mismatch/check_type.cc
! 394c527ceee181a048e6c6e1f0237f5f  libstdc++-v3/testsuite/25_algorithms/mismatch/check_type2.cc
! 905fa5a20f2f6d4cd5968d4412484769  libstdc++-v3/testsuite/25_algorithms/mismatch/constexpr.cc
! 559baff14ba095ad0c40317946ecdef6  libstdc++-v3/testsuite/25_algorithms/mismatch/constrained.cc
! 3947a31b1187dd211ddfcfb8ec9afa9f  libstdc++-v3/testsuite/25_algorithms/move/1.cc
! 216d61467a92f257d9bb6c8b6e483530  libstdc++-v3/testsuite/25_algorithms/move/69478.cc
! 77435b71473117ed98d79dc854e89466  libstdc++-v3/testsuite/25_algorithms/move/93872.cc
! c29e4b7047b8296e74cbaf898bc2b7f5  libstdc++-v3/testsuite/25_algorithms/move/94013.cc
! 7f385f8560c11b150505d8e31858479a  libstdc++-v3/testsuite/25_algorithms/move/95578.cc
! 8a39c328d588445253bbfbd913a4260b  libstdc++-v3/testsuite/25_algorithms/move/constexpr.cc
! aa769949bf07054b6b1bdfcb0abbc9a9  libstdc++-v3/testsuite/25_algorithms/move/constrained.cc
  c41fedc68e3cee79d652221a1c6b2c9a  libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc
! 3d0700a426822e6c9a78ff7814c980e8  libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/2.cc
! a96504c7196ca10e6855d5546f616be9  libstdc++-v3/testsuite/25_algorithms/move/requirements/explicit_instantiation/2.cc
! cb5598cc3525c0016ef88275fcfebd94  libstdc++-v3/testsuite/25_algorithms/move/requirements/explicit_instantiation/pod.cc
! f087fba1f5a0577853286db5171184a0  libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc
! bd16770e040d8a0701e9fc2eca39c128  libstdc++-v3/testsuite/25_algorithms/move_backward/69478.cc
! d3b5eda6d7350468190f595c7c53c70c  libstdc++-v3/testsuite/25_algorithms/move_backward/93872.cc
! 278933c4e7ec97cbf8e0c09b50ced266  libstdc++-v3/testsuite/25_algorithms/move_backward/94013.cc
! a4dcf1bcc6c44a5fd32aeb76b957e346  libstdc++-v3/testsuite/25_algorithms/move_backward/95578.cc
! e1eea9015565d7b6a3ae656d2c0ed8f8  libstdc++-v3/testsuite/25_algorithms/move_backward/constrained.cc
  d798b4d62b339492aca582244b60767f  libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc
! a3bf9be8880c0e8b032dd36b4ca100f1  libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/2.cc
! 7e697011afa677481c1072e4ae105833  libstdc++-v3/testsuite/25_algorithms/move_backward/requirements/explicit_instantiation/2.cc
! 583683280b5605324d7ca201f7c76dda  libstdc++-v3/testsuite/25_algorithms/move_backward/requirements/explicit_instantiation/pod.cc
! 0e3325b665302938c8dffcd807af5cb9  libstdc++-v3/testsuite/25_algorithms/next_permutation/1.cc
! 5dd78cb6d171e2263552b569d2e28d92  libstdc++-v3/testsuite/25_algorithms/next_permutation/check_type.cc
! d6856ae5e26e6a2561ddc53ea524267b  libstdc++-v3/testsuite/25_algorithms/next_permutation/constexpr.cc
! 113a710e9b90205ea1544e2f4b58c117  libstdc++-v3/testsuite/25_algorithms/next_permutation/constrained.cc
! 1c2742d61b520d3817182d96df0d12f9  libstdc++-v3/testsuite/25_algorithms/next_permutation/moveable.cc
! 5d0974fb6d8c788cbc9181b4fa5d9bbd  libstdc++-v3/testsuite/25_algorithms/next_permutation/requirements/explicit_instantiation/2.cc
! 4a3859e204d628d9ecc823761ee841f5  libstdc++-v3/testsuite/25_algorithms/next_permutation/requirements/explicit_instantiation/pod.cc
! 5bc0adcb9b3b59f1fc07dd78a27ebcd4  libstdc++-v3/testsuite/25_algorithms/none_of/1.cc
! c4561f09efda9b5af35c305e7aa5e234  libstdc++-v3/testsuite/25_algorithms/none_of/check_type.cc
! b9b6fe1f5fb32fe9ebaf3066e6e4392d  libstdc++-v3/testsuite/25_algorithms/none_of/constexpr.cc
! a0359680cb49849b0609f73748f5d398  libstdc++-v3/testsuite/25_algorithms/none_of/constrained.cc
! eafdb81d5fda219dde0ebc06e24b7d24  libstdc++-v3/testsuite/25_algorithms/none_of/requirements/explicit_instantiation/2.cc
! 200b85b077bf88e979c7758079a60a5f  libstdc++-v3/testsuite/25_algorithms/none_of/requirements/explicit_instantiation/pod.cc
! 81833f7a098c1d8c09b847a765b07ec0  libstdc++-v3/testsuite/25_algorithms/nth_element/1.cc
! 9b727d4c468f54022e9034d12f31bde8  libstdc++-v3/testsuite/25_algorithms/nth_element/2.cc
! c9ad29d9270a0d08347844ec490ff808  libstdc++-v3/testsuite/25_algorithms/nth_element/3.cc
! e162d71c17aba05d479ce09028dc0c9b  libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc
! 4a106e2315c22ae0126bd10cbcad71fc  libstdc++-v3/testsuite/25_algorithms/nth_element/check_type.cc
! f8dd399a2440acbd534fe7ed8206ca19  libstdc++-v3/testsuite/25_algorithms/nth_element/constexpr.cc
! 9b8024d4fbbf38ed44a9e87f44239a0b  libstdc++-v3/testsuite/25_algorithms/nth_element/constrained.cc
! 5d2a687a2c5c211965417d95923bb4c0  libstdc++-v3/testsuite/25_algorithms/nth_element/moveable.cc
! cd829855a919bdf0775d13eed176fc23  libstdc++-v3/testsuite/25_algorithms/nth_element/random_test.cc
! 884087ff690fc8973071012a53568c0d  libstdc++-v3/testsuite/25_algorithms/nth_element/requirements/explicit_instantiation/2.cc
! 7f7424de33147f6d555a01a8b850aeb2  libstdc++-v3/testsuite/25_algorithms/nth_element/requirements/explicit_instantiation/pod.cc
! 64bf76855ad1bce24e1f5764525c4720  libstdc++-v3/testsuite/25_algorithms/partial_sort/1.cc
! 2ae3b3e56d57f6e2279d10f29f08f5d4  libstdc++-v3/testsuite/25_algorithms/partial_sort/2.cc
! f0a0dd0c5d15928efcfade1fe303b34f  libstdc++-v3/testsuite/25_algorithms/partial_sort/check_compare_by_value.cc
! 251c3cd69c4bac720898a40503b6ce8f  libstdc++-v3/testsuite/25_algorithms/partial_sort/check_type.cc
! 347a3e1bddfff3fed96dc9b18b3c5837  libstdc++-v3/testsuite/25_algorithms/partial_sort/constexpr.cc
! ae70adbb1ffcfd08f04fef9654167cf3  libstdc++-v3/testsuite/25_algorithms/partial_sort/constrained.cc
! 8d938f3147c2ccd1d941fa101e7e4e65  libstdc++-v3/testsuite/25_algorithms/partial_sort/moveable.cc
! d3db238117dd189b7441318391a99071  libstdc++-v3/testsuite/25_algorithms/partial_sort/random_test.cc
! 13b861ad9da956b81da9f2e75fbcd49b  libstdc++-v3/testsuite/25_algorithms/partial_sort/requirements/explicit_instantiation/2.cc
! 6e2a6f31217108159189603a5d5d07d4  libstdc++-v3/testsuite/25_algorithms/partial_sort/requirements/explicit_instantiation/pod.cc
! e7aa711d6b6ebff125c81c7f953be14b  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/1.cc
! 74171ea79076427c0a474cf9a0257475  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/2.cc
! 01404c5e73722b75d26cdfad23a3d96d  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/check_type.cc
! 97e1b0ad7cf25f4a9e7d880f064352a1  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/constexpr.cc
! 15bc1b77f1fdb984de89d3d7e47ccf6b  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/constrained.cc
! c12fb82066411b4f267402ba8d038d3a  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/debug/irreflexive_neg.cc
! 27d2446aa03e114fd1805f6439daff74  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/random_test.cc
! bb53783e46d9a09e4ec504e267ac470b  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/requirements/explicit_instantiation/2.cc
! 195902131a858d86803de00820827a48  libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/requirements/explicit_instantiation/pod.cc
! 4ab833053bff7469a4e4f4fcf12f65e9  libstdc++-v3/testsuite/25_algorithms/partition/1.cc
! 8ff54ecf87a81ca03d727b742daa0d95  libstdc++-v3/testsuite/25_algorithms/partition/constexpr.cc
! 937e2cc0cde62d83382e83a41710efc0  libstdc++-v3/testsuite/25_algorithms/partition/constrained.cc
! f9fc7b4d1ea9185138ed265d2ff417f3  libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc
! d6217ab98510fd121ecb19dc19a0e2f3  libstdc++-v3/testsuite/25_algorithms/partition/requirements/explicit_instantiation/2.cc
! cffab7b9b8bede4f2ab34e293be0c5c8  libstdc++-v3/testsuite/25_algorithms/partition/requirements/explicit_instantiation/pod.cc
! c37a9d21e10aeebdcfef41ad8369c809  libstdc++-v3/testsuite/25_algorithms/partition_copy/1.cc
! 86fe25dfc39b7366869ae25a27f5a637  libstdc++-v3/testsuite/25_algorithms/partition_copy/check_type.cc
! a0747ee6f3f26ff89701d6c1e38b6617  libstdc++-v3/testsuite/25_algorithms/partition_copy/constexpr.cc
! feee51d44921cc06683a6bf6ee08ed22  libstdc++-v3/testsuite/25_algorithms/partition_copy/constrained.cc
! 36a2c00801c7359d529fabb4ac0326bb  libstdc++-v3/testsuite/25_algorithms/partition_copy/requirements/explicit_instantiation/2.cc
! bce0e93ed9d0917874d6725331466e58  libstdc++-v3/testsuite/25_algorithms/partition_copy/requirements/explicit_instantiation/pod.cc
! f12c360eea3edd1db0c121381476e142  libstdc++-v3/testsuite/25_algorithms/partition_point/1.cc
! a3f001fa2b5af89afcc5d6cba45995f5  libstdc++-v3/testsuite/25_algorithms/partition_point/check_type.cc
! c8dca2016a07b7d4d2763e10a89b9951  libstdc++-v3/testsuite/25_algorithms/partition_point/constexpr.cc
! 6a8b87aac2b308d04880ebff34f6a334  libstdc++-v3/testsuite/25_algorithms/partition_point/constrained.cc
! e3793ba9e5a0df640385543a9a1dee07  libstdc++-v3/testsuite/25_algorithms/partition_point/requirements/explicit_instantiation/2.cc
! 381d2a2c85ec81dae5fc98dd6e8277df  libstdc++-v3/testsuite/25_algorithms/partition_point/requirements/explicit_instantiation/pod.cc
! 0e46241451bd05a65d976f04a9b5c567  libstdc++-v3/testsuite/25_algorithms/pop_heap/57010.cc
! a1b8838cd14d29aaef4c7aa2733f4890  libstdc++-v3/testsuite/25_algorithms/pop_heap/complexity.cc
! 3afaf696c97573d55c19d215690ee7db  libstdc++-v3/testsuite/25_algorithms/pop_heap/constexpr.cc
! 939d96a7871e86b140c4684130635434  libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc
! 90fa1b3f4a6fee8c406fad36314eeaae  libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc
! 558ccb789496ccec391544e4c57749d6  libstdc++-v3/testsuite/25_algorithms/pop_heap/requirements/explicit_instantiation/2.cc
! 7b1fc88ef975979431e7f98185c6455d  libstdc++-v3/testsuite/25_algorithms/pop_heap/requirements/explicit_instantiation/pod.cc
! 8b1aceb429a76205a69522d234f5cbc1  libstdc++-v3/testsuite/25_algorithms/prev_permutation/1.cc
! 23336d6bbd04b84efb2b6da1902f7af2  libstdc++-v3/testsuite/25_algorithms/prev_permutation/check_type.cc
! 85cd45899c90a29ae9ea295200699f5f  libstdc++-v3/testsuite/25_algorithms/prev_permutation/constexpr.cc
! c2633610ab87c942a5ac138dbd5a639b  libstdc++-v3/testsuite/25_algorithms/prev_permutation/constrained.cc
! 7ee1d4255f1edeaac2a20e30aa890d2d  libstdc++-v3/testsuite/25_algorithms/prev_permutation/moveable.cc
! 62a3b88a41df8c006cd3f2874c181b14  libstdc++-v3/testsuite/25_algorithms/prev_permutation/requirements/explicit_instantiation/2.cc
! dac35da9b9fa5ed8aba3cb5434c9eeb0  libstdc++-v3/testsuite/25_algorithms/prev_permutation/requirements/explicit_instantiation/pod.cc
  98051b5d40a1c205d048db33e038c794  libstdc++-v3/testsuite/25_algorithms/pstl/alg_merge/inplace_merge.cc
  f73cdaa5ddf9a31b66aeb2163e20a984  libstdc++-v3/testsuite/25_algorithms/pstl/alg_merge/merge.cc
  905d47f4c72eacaf53a95bd14da1a0be  libstdc++-v3/testsuite/25_algorithms/pstl/alg_modifying_operations/copy_if.cc
*************** ec07921cf1d219cc2dc3de14726143af  libstd
*** 104016,106548 ****
  e2baf706b6b8f858b41c7d0a9e5b08a9  libstdc++-v3/testsuite/25_algorithms/pstl/alg_sorting/partial_sort_copy.cc
  8af38b36f1e40e204ae2c21c405731a9  libstdc++-v3/testsuite/25_algorithms/pstl/alg_sorting/set.cc
  f0ac087e7a77dd84d45a6199d1b9a455  libstdc++-v3/testsuite/25_algorithms/pstl/alg_sorting/sort.cc
! 2de85da23b00eb43bba1ca1fe8faab7d  libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-2.cc
! 698a4c3d4abae44b739e8860779cc345  libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-3.cc
! 8ee67e09fa83ea50798785892f730201  libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-4.cc
! 5de51d4614d9ef6650b8686b0007b6f6  libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-5.cc
! 55a8256d8066b59477de25dced29f579  libstdc++-v3/testsuite/25_algorithms/pstl/feature_test.cc
! aa2cf638123b45579f850ffcdb743434  libstdc++-v3/testsuite/25_algorithms/push_heap/complexity.cc
! e382c0a0b5541ec705fe24da12501806  libstdc++-v3/testsuite/25_algorithms/push_heap/constexpr.cc
! f9aa74af106760820e52e05e99f34142  libstdc++-v3/testsuite/25_algorithms/push_heap/requirements/explicit_instantiation/2.cc
! e5142ad0129d7618e10129920ecfa856  libstdc++-v3/testsuite/25_algorithms/push_heap/requirements/explicit_instantiation/pod.cc
! e703a2caf9a19697fb6b881519d02ddf  libstdc++-v3/testsuite/25_algorithms/random_shuffle/1.cc
! a1aee581595c15caa9868408fd1c1e09  libstdc++-v3/testsuite/25_algorithms/random_shuffle/59603.cc
! 665b0c18f33f1ae73607838028e996d6  libstdc++-v3/testsuite/25_algorithms/random_shuffle/moveable.cc
! 357b7396d99f2341f62afecd98204f94  libstdc++-v3/testsuite/25_algorithms/random_shuffle/requirements/explicit_instantiation/2.cc
! 2c4dfd9d1290cc96219c45316139f4ff  libstdc++-v3/testsuite/25_algorithms/random_shuffle/requirements/explicit_instantiation/pod.cc
! 51c273cc82d5c3bb41cbb3489cbc8b18  libstdc++-v3/testsuite/25_algorithms/remove/1.cc
! b746c740f51d7121ba4e3a6f6b0c537f  libstdc++-v3/testsuite/25_algorithms/remove/check_type.cc
! 5a1746f60e7e68220c1841555450bf31  libstdc++-v3/testsuite/25_algorithms/remove/constexpr.cc
! e645a1e9c9baf17380fb3f69fde1120d  libstdc++-v3/testsuite/25_algorithms/remove/constrained.cc
! 43b98b9ee3d474a073209e32646752ad  libstdc++-v3/testsuite/25_algorithms/remove/moveable.cc
! cc7eb0b5b6e412c7d70233918657ccb5  libstdc++-v3/testsuite/25_algorithms/remove/requirements/explicit_instantiation/2.cc
! c30e64dfee49711dcc00b8b2a50a8c21  libstdc++-v3/testsuite/25_algorithms/remove/requirements/explicit_instantiation/pod.cc
! 5c42bd9a9628f52053b8b47862718a59  libstdc++-v3/testsuite/25_algorithms/remove_copy/constexpr.cc
! 0825e6999c3b9acb9e4c8c04e68a3ca7  libstdc++-v3/testsuite/25_algorithms/remove_copy/constrained.cc
! c95f20c579fb1cbea6e458fea3cfb9b4  libstdc++-v3/testsuite/25_algorithms/remove_copy/requirements/explicit_instantiation/2.cc
! 2cc843322bd0c2caaa20f116a71fd28b  libstdc++-v3/testsuite/25_algorithms/remove_copy/requirements/explicit_instantiation/pod.cc
! 347454a404669a93beadf724fff746c5  libstdc++-v3/testsuite/25_algorithms/remove_copy_if/check_type.cc
! 357a8b58d6dc49bb5588fcf535041619  libstdc++-v3/testsuite/25_algorithms/remove_copy_if/constexpr.cc
! 6b9ac40ec502d82d4003eebfdce85a58  libstdc++-v3/testsuite/25_algorithms/remove_copy_if/constrained.cc
! 78546e6e4d363dff682a040a54f888f6  libstdc++-v3/testsuite/25_algorithms/remove_copy_if/requirements/explicit_instantiation/2.cc
! 68ede50549ac3e0edd86fc67700c88d6  libstdc++-v3/testsuite/25_algorithms/remove_copy_if/requirements/explicit_instantiation/pod.cc
! 39990e433e6691e2c271a814874c0119  libstdc++-v3/testsuite/25_algorithms/remove_if/1.cc
! 85a604826f3cf96817c2d657248eaf79  libstdc++-v3/testsuite/25_algorithms/remove_if/check_type.cc
! f38b9597ae726c6f793bf16a192c67b0  libstdc++-v3/testsuite/25_algorithms/remove_if/constexpr.cc
! 140127ed096cfe963c4ca32e21a4b2d9  libstdc++-v3/testsuite/25_algorithms/remove_if/constrained.cc
! 261479190941c1dceb33c779ca629b5c  libstdc++-v3/testsuite/25_algorithms/remove_if/moveable.cc
! e63b444a156c9717f87c88880d6061fb  libstdc++-v3/testsuite/25_algorithms/remove_if/requirements/explicit_instantiation/2.cc
! 4a8809368db0c85e29448fc589aafc38  libstdc++-v3/testsuite/25_algorithms/remove_if/requirements/explicit_instantiation/pod.cc
! bc0c76817ef509c9b3853fb5e07b7d99  libstdc++-v3/testsuite/25_algorithms/replace/1.cc
! bdb98aefe29701c89745e13920078b5b  libstdc++-v3/testsuite/25_algorithms/replace/check_type.cc
! f53f6fed2f3487ab790f1c6b35ef4c68  libstdc++-v3/testsuite/25_algorithms/replace/constrained.cc
! e4f3562d2517f00d48c5f1903c49b118  libstdc++-v3/testsuite/25_algorithms/replace/requirements/explicit_instantiation/2.cc
! 5b4b48bd0b876e331a57f46abbeea485  libstdc++-v3/testsuite/25_algorithms/replace/requirements/explicit_instantiation/pod.cc
! 9b4f8e99a159ec7c363cc7cb76a6aea3  libstdc++-v3/testsuite/25_algorithms/replace_copy/1.cc
! 67368ae4beab11c62e4c4a4963f8294b  libstdc++-v3/testsuite/25_algorithms/replace_copy/check_type.cc
! 6cad4a32d56caf1a225d2682102169c8  libstdc++-v3/testsuite/25_algorithms/replace_copy/constexpr.cc
! 00ba77d52e66a23251b109303ab3f18e  libstdc++-v3/testsuite/25_algorithms/replace_copy/constrained.cc
! 88a69173e6736602422436a52ed3c9bd  libstdc++-v3/testsuite/25_algorithms/replace_copy/requirements/explicit_instantiation/2.cc
! 76c51c61c75ff7ace710358dd0d85cc0  libstdc++-v3/testsuite/25_algorithms/replace_copy/requirements/explicit_instantiation/pod.cc
! 10059a3fa065c36012c1b7255743ad14  libstdc++-v3/testsuite/25_algorithms/replace_copy_if/1.cc
! 23ed782de8f9ceb58643a9e7de0cc4bf  libstdc++-v3/testsuite/25_algorithms/replace_copy_if/check_type.cc
! 6d1d135134a47b4e7fdaf41c259eae3c  libstdc++-v3/testsuite/25_algorithms/replace_copy_if/constexpr.cc
! 956c5c68e22456e7eb9bf028552409d5  libstdc++-v3/testsuite/25_algorithms/replace_copy_if/constrained.cc
! 82eadbb1b3a0a5f6f0ccea3616bfa0b8  libstdc++-v3/testsuite/25_algorithms/replace_copy_if/requirements/explicit_instantiation/2.cc
! 3a111d1edd629d8401abc04ff9bf6792  libstdc++-v3/testsuite/25_algorithms/replace_copy_if/requirements/explicit_instantiation/pod.cc
! f4ceb67c59be4b369c8000315174bb11  libstdc++-v3/testsuite/25_algorithms/replace_if/1.cc
! cfc2f8ac927739646b1190fa312eff6c  libstdc++-v3/testsuite/25_algorithms/replace_if/check_type.cc
! 582bf2edd896df950e7e5f20a447a937  libstdc++-v3/testsuite/25_algorithms/replace_if/constexpr.cc
! 2d0a8c6ff47058b94cb0a8057cd51426  libstdc++-v3/testsuite/25_algorithms/replace_if/constrained.cc
! caac6aefddfbf76a24be5507370257d0  libstdc++-v3/testsuite/25_algorithms/replace_if/requirements/explicit_instantiation/2.cc
! 8dbc1d843b0256c1a5d8190f85d887cc  libstdc++-v3/testsuite/25_algorithms/replace_if/requirements/explicit_instantiation/pod.cc
  36f40bd4fda4eb8bb7b8c7178baddcb8  libstdc++-v3/testsuite/25_algorithms/reverse/constexpr.cc
! 5f4b6379bce7c1ecd821a72862cfac92  libstdc++-v3/testsuite/25_algorithms/reverse/constrained.cc
! 56909726754aad5cbd876aeee4b7f025  libstdc++-v3/testsuite/25_algorithms/reverse/moveable.cc
! 795bca5bb3ff2b937f5ec5fd2ff3e95c  libstdc++-v3/testsuite/25_algorithms/reverse/requirements/explicit_instantiation/2.cc
! 4cd0660489c92b95b0474b3dc1c568a1  libstdc++-v3/testsuite/25_algorithms/reverse/requirements/explicit_instantiation/pod.cc
! ad535923bfc460dcc3d29fcf19fa369b  libstdc++-v3/testsuite/25_algorithms/reverse_copy/constexpr.cc
! 1dedb721fc00d9f9d9ab9d671a974004  libstdc++-v3/testsuite/25_algorithms/reverse_copy/constrained.cc
! 4d8f694fee3cdad70f7fbf9a50e3d52b  libstdc++-v3/testsuite/25_algorithms/reverse_copy/explicit_instantiation/2.cc
! f9ea5604175eca20dce3f547ceb07d7b  libstdc++-v3/testsuite/25_algorithms/reverse_copy/explicit_instantiation/pod.cc
! 75c1d6a8139e19e43e96c9fd16bc4892  libstdc++-v3/testsuite/25_algorithms/rotate/1.cc
! 11cde29904c9a705eae6271345859cac  libstdc++-v3/testsuite/25_algorithms/rotate/90920.cc
! cc2589becfcab0788337afd8cd879875  libstdc++-v3/testsuite/25_algorithms/rotate/check_type.cc
  6e81a6e87bcee591a45269b5ef7edde0  libstdc++-v3/testsuite/25_algorithms/rotate/constexpr.cc
! 9b5ef7c907b2ead34984b92b5ba7a950  libstdc++-v3/testsuite/25_algorithms/rotate/constrained.cc
! 5134c7ddc207c04c0ffadfae67d22033  libstdc++-v3/testsuite/25_algorithms/rotate/dr488.cc
! 73e4a1a14c70144a5463a804ce7fd488  libstdc++-v3/testsuite/25_algorithms/rotate/moveable.cc
! 7da749f38b8bfd2b6f9e082b032282ca  libstdc++-v3/testsuite/25_algorithms/rotate/moveable2.cc
! 6c2b4b455b27a3bf05d5ec38c7654f7b  libstdc++-v3/testsuite/25_algorithms/rotate/requirements/explicit_instantiation/2.cc
! 5cd04590e89e8bbbbaad9e1f8b9ac147  libstdc++-v3/testsuite/25_algorithms/rotate/requirements/explicit_instantiation/pod.cc
! e54c835a33470af85cb84370c50e3edf  libstdc++-v3/testsuite/25_algorithms/rotate/rotate.cc
! 469eafca52ffd828fb4df213f45d075b  libstdc++-v3/testsuite/25_algorithms/rotate_copy/constexpr.cc
! c02cd0714e2d67802df87b143a2b1633  libstdc++-v3/testsuite/25_algorithms/rotate_copy/constrained.cc
! 1f77dc10b1d9f21b15d60a7f2fef0b70  libstdc++-v3/testsuite/25_algorithms/rotate_copy/requirements/explicit_instantiation/2.cc
! 802ca63b6370912ff42b456c64ffcfc3  libstdc++-v3/testsuite/25_algorithms/rotate_copy/requirements/explicit_instantiation/pod.cc
! ff9b22ed7a90920af0aa4bdbc43a53c2  libstdc++-v3/testsuite/25_algorithms/sample/1.cc
! c89c3d58089211d55a86409105db7e6e  libstdc++-v3/testsuite/25_algorithms/sample/2.cc
! 2d3a0a591372ba37e491dab05f802db8  libstdc++-v3/testsuite/25_algorithms/sample/3.cc
! 7ab44c966469604d8937716fd203561a  libstdc++-v3/testsuite/25_algorithms/sample/81221.cc
! 9659743c8c4ee8b3adb6dc579caba79c  libstdc++-v3/testsuite/25_algorithms/sample/constrained.cc
! 99b38e0d63f3c214fb34aabf92861ecf  libstdc++-v3/testsuite/25_algorithms/search/1.cc
! 5597f4d68765e49f6da0d42b81b87ada  libstdc++-v3/testsuite/25_algorithms/search/78346.cc
! d265d0614f1eaf077d24a5fbe8ff0428  libstdc++-v3/testsuite/25_algorithms/search/check_type.cc
! 14a11eaa0bf5ebbb0299ed46d93d237b  libstdc++-v3/testsuite/25_algorithms/search/constexpr.cc
! adb0f5c6244380fa9fa5bdcf26cf5d33  libstdc++-v3/testsuite/25_algorithms/search/constrained.cc
! 23fe34aad19d31ff7dd2bd3045545556  libstdc++-v3/testsuite/25_algorithms/search/requirements/explicit_instantiation/2.cc
! 1ad71461068c2504e4ed0402ee53fb85  libstdc++-v3/testsuite/25_algorithms/search/requirements/explicit_instantiation/pod.cc
! 70dddba37dcf8c0c6228a8e52f75736f  libstdc++-v3/testsuite/25_algorithms/search/searcher.cc
! 8f08b4b091e322bc69fcc52693d8b8c2  libstdc++-v3/testsuite/25_algorithms/search_n/11400.cc
! caa7585bd5020e717f12c629310bed48  libstdc++-v3/testsuite/25_algorithms/search_n/58358.cc
! 3a5ac59c16cbd0ef0b6f742aa66e0934  libstdc++-v3/testsuite/25_algorithms/search_n/97828.cc
! 4920d335fdf43ff5b5208fb97c57f686  libstdc++-v3/testsuite/25_algorithms/search_n/check_type.cc
! 6248630a5363023e8a40415d1808a75b  libstdc++-v3/testsuite/25_algorithms/search_n/constexpr.cc
! 7cedcd42aaa4a61ffdeaa8f7e15ca26e  libstdc++-v3/testsuite/25_algorithms/search_n/constrained.cc
! c100de43165f7eab5a5b5c155ff8b14d  libstdc++-v3/testsuite/25_algorithms/search_n/iterator.cc
! 82017f480609a11d16eafbf77cdcbf86  libstdc++-v3/testsuite/25_algorithms/search_n/requirements/explicit_instantiation/2.cc
! 873c458232a8c54635b14a93139997d2  libstdc++-v3/testsuite/25_algorithms/search_n/requirements/explicit_instantiation/pod.cc
! c1e311dbf0d46f384acbe1f96416fa54  libstdc++-v3/testsuite/25_algorithms/set_difference/1.cc
! edf9decac09c76a82889809b01319ce0  libstdc++-v3/testsuite/25_algorithms/set_difference/35541.cc
! 3198757b33a199dff2f258480a40f511  libstdc++-v3/testsuite/25_algorithms/set_difference/check_type.cc
! da2c9a65e9343a3170649449448ac7bb  libstdc++-v3/testsuite/25_algorithms/set_difference/constexpr.cc
! fd86cf93bb973150eb1b2fce172f4536  libstdc++-v3/testsuite/25_algorithms/set_difference/constrained.cc
! 5eb1070cb0e9116e8f0d5b65e6b4cbbb  libstdc++-v3/testsuite/25_algorithms/set_difference/requirements/explicit_instantiation/2.cc
! 7bfc58f3235f00312644640a43b4225e  libstdc++-v3/testsuite/25_algorithms/set_difference/requirements/explicit_instantiation/pod.cc
! 29dc8941a9850fa48b8bdef36e783f15  libstdc++-v3/testsuite/25_algorithms/set_intersection/1.cc
! 47198eab960b42ab1801dc9b52f06d1c  libstdc++-v3/testsuite/25_algorithms/set_intersection/34730.cc
! 00b6d897bca97503d590cc5e5c975e97  libstdc++-v3/testsuite/25_algorithms/set_intersection/check_type.cc
! 4641a23a1e41a6477b6b40fafe2c2958  libstdc++-v3/testsuite/25_algorithms/set_intersection/constexpr.cc
! 6bc05b08540c1f612d9a0f7ba6731ed9  libstdc++-v3/testsuite/25_algorithms/set_intersection/constrained.cc
! 0d3dfe3de18c0fe73894bdd8df2105b9  libstdc++-v3/testsuite/25_algorithms/set_intersection/requirements/explicit_instantiation/2.cc
! 26a5d23b69aed1a4040c84817563d4d0  libstdc++-v3/testsuite/25_algorithms/set_intersection/requirements/explicit_instantiation/pod.cc
! cbafa2e0f97070151a4eecda2f543d96  libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/1.cc
! bc713f928ff2d8b1317353b6fb819096  libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/check_type.cc
! 712d166766ac4ba3e4a35703fca03971  libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/constexpr.cc
! ae052c1e2f08553fb348da33b837c114  libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/constrained.cc
! 2da9b1c3694185866caecd9453429a1c  libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/requirements/explicit_instantiation/2.cc
! f39a043c02876f371ec2a8c15156d116  libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/requirements/explicit_instantiation/pod.cc
! 789bc0df46b05d1a3dc7a639f3583cff  libstdc++-v3/testsuite/25_algorithms/set_union/1.cc
! 9963bdfca94fded59680d561cf1cc2fb  libstdc++-v3/testsuite/25_algorithms/set_union/check_type.cc
! 7ec62b3e0d5a60905caa358a19d9700b  libstdc++-v3/testsuite/25_algorithms/set_union/constexpr.cc
! 2eb03f24e2064a2aca59613523792198  libstdc++-v3/testsuite/25_algorithms/set_union/constrained.cc
! da8e31d4aa55b535b1e8509c7a1e0514  libstdc++-v3/testsuite/25_algorithms/set_union/requirements/explicit_instantiation/2.cc
! b37a0badbda8e413deb39fa54f57d5ef  libstdc++-v3/testsuite/25_algorithms/set_union/requirements/explicit_instantiation/pod.cc
! 6e06f945fa8aa71af89c0729799dac71  libstdc++-v3/testsuite/25_algorithms/shift_left/1.cc
! 05d6815440e412c608c9a30df354b104  libstdc++-v3/testsuite/25_algorithms/shift_right/1.cc
! b3f9544da1365363d641b719129e1bd5  libstdc++-v3/testsuite/25_algorithms/shuffle/1.cc
! df1a3bad9a0691c9ae12a47c932935ad  libstdc++-v3/testsuite/25_algorithms/shuffle/constrained.cc
! 343f6b02f6da8d03be6f45a18f84f52d  libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/2.cc
! 0ae67daa1204cdd35153cd686671df37  libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/pod.cc
! 469775c20fee30f974440efd4c2a07f7  libstdc++-v3/testsuite/25_algorithms/sort/1.cc
! 7deab4baa92f9ab41085cca207346917  libstdc++-v3/testsuite/25_algorithms/sort/34095.cc
! 57db5b77a58abcf890f0b6eaa54ee540  libstdc++-v3/testsuite/25_algorithms/sort/34636.cc
! 1d0ee0dcd6b03427d0a1f48bfe152b80  libstdc++-v3/testsuite/25_algorithms/sort/35588.cc
! 69ec945c713fe8f7977a9221ee48ffc7  libstdc++-v3/testsuite/25_algorithms/sort/78991.cc
! 80674306c9f2fd4bff954693ed4f27b2  libstdc++-v3/testsuite/25_algorithms/sort/check_compare_by_value.cc
! fea3374377491f62c1b6dbc7c673ef96  libstdc++-v3/testsuite/25_algorithms/sort/constexpr.cc
! 6cf5808eb858f419e269ecf099adf177  libstdc++-v3/testsuite/25_algorithms/sort/constrained.cc
! c640b084b0831ccc7dbbb3c2b839d53b  libstdc++-v3/testsuite/25_algorithms/sort/moveable.cc
! c96d0ea364a335c31e6df3b63341d8ce  libstdc++-v3/testsuite/25_algorithms/sort/random_test.cc
! 9705af90607b0f6eb1422d0c035c35c3  libstdc++-v3/testsuite/25_algorithms/sort/requirements/explicit_instantiation/2.cc
! 8d405e4828d47b2f00bef20713a1633c  libstdc++-v3/testsuite/25_algorithms/sort/requirements/explicit_instantiation/pod.cc
! 038bf1f4cff1ae07dec093b0e2390dcc  libstdc++-v3/testsuite/25_algorithms/sort/vectorbool.cc
! f5b01b1ff1913bbe2e0e604f5b745402  libstdc++-v3/testsuite/25_algorithms/sort_heap/check_compare_by_value.cc
! 5548a73c39db7075190757188689bcd2  libstdc++-v3/testsuite/25_algorithms/sort_heap/complexity.cc
! b4f8c3549075551540d619053d7c646b  libstdc++-v3/testsuite/25_algorithms/sort_heap/constexpr.cc
! 0eb3a120446ef24f7041b4115cd4f165  libstdc++-v3/testsuite/25_algorithms/sort_heap/requirements/explicit_instantiation/2.cc
! 1a36ca041029e9c214e0fb242067fbba  libstdc++-v3/testsuite/25_algorithms/sort_heap/requirements/explicit_instantiation/pod.cc
! 50eba0a0b55628bfe923787aebf21252  libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc
! 596599825a7251c8204eb54f6a2def34  libstdc++-v3/testsuite/25_algorithms/stable_partition/constrained.cc
! 8671f742f008dd469f166de643d92fbe  libstdc++-v3/testsuite/25_algorithms/stable_partition/mem_check.cc
! dc88ec1982cea64f4e05d44c1753513c  libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc
! 11485fcddbffe3722cf584573d0e3fa3  libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc
! c5ea9e65458e14cd2064eb1439934ccf  libstdc++-v3/testsuite/25_algorithms/stable_partition/requirements/explicit_instantiation/2.cc
! d4df17815e9c69e380a1900f5bce114c  libstdc++-v3/testsuite/25_algorithms/stable_partition/requirements/explicit_instantiation/pod.cc
! 4f63c4a70a69dd9f0601efcb84e2e9ed  libstdc++-v3/testsuite/25_algorithms/stable_sort/1.cc
! 7a6bc484ef994a7fb14449fe8c9daedb  libstdc++-v3/testsuite/25_algorithms/stable_sort/2.cc
! 29e6ba84a32fd1b8326e7c4de1032321  libstdc++-v3/testsuite/25_algorithms/stable_sort/3.cc
! 1bc1997580d8ec3208983c6c7e1f4053  libstdc++-v3/testsuite/25_algorithms/stable_sort/49559.cc
! a1f0874767a0bb8f69c0485be9dc0d71  libstdc++-v3/testsuite/25_algorithms/stable_sort/check_compare_by_value.cc
! d5b4ad8da5e95de8f18cb6f2ce4b0ce7  libstdc++-v3/testsuite/25_algorithms/stable_sort/check_type.cc
! 5d8d485363c25e43e5b6066d1ed3a8f8  libstdc++-v3/testsuite/25_algorithms/stable_sort/constrained.cc
! 3a2237396fbd2f6056f6ce48dea50b79  libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc
! 2e1f4a94175698f7f91bcf97c33f76c7  libstdc++-v3/testsuite/25_algorithms/stable_sort/moveable.cc
! 0c4d0cdc84602d5d67060762633e24fb  libstdc++-v3/testsuite/25_algorithms/stable_sort/moveable2.cc
! 9259f005be49b75f321d6e4a8b9e37e7  libstdc++-v3/testsuite/25_algorithms/stable_sort/requirements/explicit_instantiation/2.cc
! f858b467f71294f0a19d89e9f6b7ab7b  libstdc++-v3/testsuite/25_algorithms/stable_sort/requirements/explicit_instantiation/pod.cc
! c3c2314c43af555e86aab8e3d9465a14  libstdc++-v3/testsuite/25_algorithms/swap/68877.cc
! 71c3ab58546b1c9def1a43069ded5ff7  libstdc++-v3/testsuite/25_algorithms/swap/constexpr.cc
! 8d280fd846c4aaafc1c6f2dcc2e22fe0  libstdc++-v3/testsuite/25_algorithms/swap/dr809.cc
! d0abf19fbcb6ff2a728416f9e642b4b0  libstdc++-v3/testsuite/25_algorithms/swap/noexcept.cc
! 3e8c1bc54d2276815a02dd193835ad5e  libstdc++-v3/testsuite/25_algorithms/swap/requirements/explicit_instantiation/2.cc
! 1014474c50a89a1d2202ebd6d77ab82c  libstdc++-v3/testsuite/25_algorithms/swap/requirements/explicit_instantiation/pod.cc
! 3dde41466a721ee0d137ac4e7896da07  libstdc++-v3/testsuite/25_algorithms/swap_ranges/1.cc
! d4b2c2097d261c9f92dee6f91c3d4878  libstdc++-v3/testsuite/25_algorithms/swap_ranges/check_type.cc
! f8fbcd10464bab847eac8092eebb8d96  libstdc++-v3/testsuite/25_algorithms/swap_ranges/constexpr.cc
! c0798313ab44f09a0e0fa02dceafa946  libstdc++-v3/testsuite/25_algorithms/swap_ranges/constrained.cc
! 65b50f3a0c759d6a54ffc555e46a90fc  libstdc++-v3/testsuite/25_algorithms/swap_ranges/moveable.cc
! 0fafef2f8de3ad59b0f5fff6f08ee466  libstdc++-v3/testsuite/25_algorithms/swap_ranges/requirements/explicit_instantiation/2.cc
! 32a1f55b202e87b07190e76125fd1348  libstdc++-v3/testsuite/25_algorithms/swap_ranges/requirements/explicit_instantiation/pod.cc
! 697d33810735703bf2e81312be52e309  libstdc++-v3/testsuite/25_algorithms/transform/constexpr.cc
! 4f3e8073d8207bcef43a45d2a39f453a  libstdc++-v3/testsuite/25_algorithms/transform/constrained.cc
! b705d4abc1b87078700dd70965010e9d  libstdc++-v3/testsuite/25_algorithms/transform/requirements/explicit_instantiation/2.cc
! 1d5716c65d18e05a01c9e92638b53c30  libstdc++-v3/testsuite/25_algorithms/transform/requirements/explicit_instantiation/pod.cc
! 928699325b2bd55ef0c298e3d9f92ae0  libstdc++-v3/testsuite/25_algorithms/unique/1.cc
! 913c2ec8bf684108ebc93011b0d69659  libstdc++-v3/testsuite/25_algorithms/unique/11480.cc
! c0482ca7b5b1c84280a1d7b04bdf0fbb  libstdc++-v3/testsuite/25_algorithms/unique/2.cc
! 35cae0a55f85700f1d0dfe2dd9865988  libstdc++-v3/testsuite/25_algorithms/unique/constexpr.cc
! d784b392abf2cdd46be8022ccadec9a8  libstdc++-v3/testsuite/25_algorithms/unique/constrained.cc
! 8d5e0b3679525f0ded75995109adffca  libstdc++-v3/testsuite/25_algorithms/unique/moveable.cc
! d9bc2986ed64b3316776541dc9629909  libstdc++-v3/testsuite/25_algorithms/unique/requirements/explicit_instantiation/2.cc
! ffecebbd7e0d5a957d7ab2aae85ae091  libstdc++-v3/testsuite/25_algorithms/unique/requirements/explicit_instantiation/pod.cc
! 145f03abfbea2f2e8a571f99cf9440fd  libstdc++-v3/testsuite/25_algorithms/unique_copy/1.cc
! 0f90bcd4239043452f7ae672684edbcd  libstdc++-v3/testsuite/25_algorithms/unique_copy/2.cc
! 2259b0969ae1b3cb85af5d3da6ec86e8  libstdc++-v3/testsuite/25_algorithms/unique_copy/26133.cc
! 5b54dca7565bec736e81c2d5007bdce4  libstdc++-v3/testsuite/25_algorithms/unique_copy/check_type.cc
! 376b78f6e0563c999a99f2f9e3fda694  libstdc++-v3/testsuite/25_algorithms/unique_copy/constexpr.cc
! e712e0c0079a12fa2d846f1dfca77a97  libstdc++-v3/testsuite/25_algorithms/unique_copy/constrained.cc
! c58103192e14bec81afabe1caca71907  libstdc++-v3/testsuite/25_algorithms/unique_copy/requirements/explicit_instantiation/2.cc
! ee7deee5c9ecdb96ca24874d0555a9ac  libstdc++-v3/testsuite/25_algorithms/unique_copy/requirements/explicit_instantiation/pod.cc
! e85db6e1b9ba7ee762003c8e94210e7b  libstdc++-v3/testsuite/25_algorithms/upper_bound/1.cc
! 05ea8db44ff7e8118794f8b334deea6e  libstdc++-v3/testsuite/25_algorithms/upper_bound/2.cc
! 0db5f0e5d50ffb51f70b8a5f4a7609a9  libstdc++-v3/testsuite/25_algorithms/upper_bound/33613.cc
! d7bdfcbb7fb9422ba118c56646532402  libstdc++-v3/testsuite/25_algorithms/upper_bound/check_type.cc
! ce924d1376d30067305244b55908cada  libstdc++-v3/testsuite/25_algorithms/upper_bound/constexpr.cc
! 25cb4b21256439a1f9f69f1035d2afe3  libstdc++-v3/testsuite/25_algorithms/upper_bound/constrained.cc
! 23d2107962b5ebd66a3b6f64f336d0c4  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_neg.cc
! 55b79544e139fd683e6fe5e351bd41bc  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_pred_neg.cc
! cdecd6e18b7a373b57e835dce5058c49  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_valid_range_neg.cc
! 9bdcc5ca358bf6b76376000dd224451e  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_neg.cc
! 2d58a1a83f3d1c156c665e5f1d2a6e10  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_pred_neg.cc
! 67a099578623b3f176c14e74c8e7a4e2  libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc
! 13fbdc73d1ffe7268b45ea05eba82000  libstdc++-v3/testsuite/25_algorithms/upper_bound/requirements/explicit_instantiation/2.cc
! 383bdba66ad2331033b3196f9a2cc37a  libstdc++-v3/testsuite/25_algorithms/upper_bound/requirements/explicit_instantiation/pod.cc
! 55f0586d47c8ecf214f8dba3a386b2ea  libstdc++-v3/testsuite/26_numerics/accumulate/1.cc
! 5ffea021a2bbaa54e4fbf6ba0a3c8d89  libstdc++-v3/testsuite/26_numerics/accumulate/48750.cc
! 9bb9933a5706ccb9813b4484146759d1  libstdc++-v3/testsuite/26_numerics/accumulate/constexpr.cc
! 4219323701b9baff5b1db531e21f0e9d  libstdc++-v3/testsuite/26_numerics/accumulate/lwg2055.cc
! 62c3f39d5b4701f21f95ebab92084462  libstdc++-v3/testsuite/26_numerics/accumulate/requirements/explicit_instantiation/2.cc
! d200b438cd4449a09f9c02216d78484b  libstdc++-v3/testsuite/26_numerics/accumulate/requirements/explicit_instantiation/pod.cc
! 97affa4fae7be80ccde6056df1261966  libstdc++-v3/testsuite/26_numerics/adjacent_difference/1.cc
! 67003249a4fca90ef2bc18aa9ada9e45  libstdc++-v3/testsuite/26_numerics/adjacent_difference/constexpr.cc
! 11003c01e27377b73f31127d8c1f91c2  libstdc++-v3/testsuite/26_numerics/adjacent_difference/lwg2055.cc
! 10fb53473b1eeeb631daa9cc8ce75c65  libstdc++-v3/testsuite/26_numerics/adjacent_difference/requirements/explicit_instantiation/2.cc
! 4b1e392a30b9eedc03d724df3ea1406a  libstdc++-v3/testsuite/26_numerics/adjacent_difference/requirements/explicit_instantiation/pod.cc
  874b969b1c6b476310e9a3d96f5b948c  libstdc++-v3/testsuite/26_numerics/bit/bit.cast/105027.cc
! c3daf66505f49b366e5a847ad6209e69  libstdc++-v3/testsuite/26_numerics/bit/bit.cast/bit_cast.cc
! e422aeec9141fb37d000e3c098fa5e49  libstdc++-v3/testsuite/26_numerics/bit/bit.cast/version.cc
! 98b086bb90a37bda0608b0683df69f67  libstdc++-v3/testsuite/26_numerics/bit/bit.count/countl_one.cc
! 996b5eca0500e0c55752c387c6ad487d  libstdc++-v3/testsuite/26_numerics/bit/bit.count/countl_zero.cc
! 0d0d4823126d8ed3e48028217aeef44d  libstdc++-v3/testsuite/26_numerics/bit/bit.count/countr_one.cc
! 83fab5197bf85cfd3c444ba76a142f33  libstdc++-v3/testsuite/26_numerics/bit/bit.count/countr_zero.cc
! 244aafe9c64ce335db48a4684e094d7e  libstdc++-v3/testsuite/26_numerics/bit/bit.count/popcount.cc
! 0b71913549d3f7ea2cc277b926f65d5e  libstdc++-v3/testsuite/26_numerics/bit/bit.pow.two/bit_ceil.cc
! 6840dabda70faa7939159cd77e668e7d  libstdc++-v3/testsuite/26_numerics/bit/bit.pow.two/bit_ceil_neg.cc
! f6224f4a61fce964dab597e336c4dd2e  libstdc++-v3/testsuite/26_numerics/bit/bit.pow.two/bit_floor.cc
! 4f8961437fbc77e4ed799ec439d5403f  libstdc++-v3/testsuite/26_numerics/bit/bit.pow.two/bit_width.cc
! bed78553e874a2ea42169bdf1d491044  libstdc++-v3/testsuite/26_numerics/bit/bit.pow.two/has_single_bit.cc
! 93b697fa6ce6c9e817ed1e74d3d7e4b2  libstdc++-v3/testsuite/26_numerics/bit/bit.rotate/rotl.cc
! 6b5de003c64db4e9c24d6c4ca4a1e029  libstdc++-v3/testsuite/26_numerics/bit/bit.rotate/rotr.cc
! 34e26fec7d2d016a76308514640bd5c2  libstdc++-v3/testsuite/26_numerics/bit/header-2.cc
! c0657bf36442d70dd5d0c3712718a34c  libstdc++-v3/testsuite/26_numerics/bit/header.cc
! a1c3327dbcb5f8a9e454370ce4bedf3d  libstdc++-v3/testsuite/26_numerics/complex/1.cc
! 9b94e9966f52e9d91d3c5791bae4387f  libstdc++-v3/testsuite/26_numerics/complex/13450.cc
! fb8d2e6d45d61ab72fd57d1d2502c31f  libstdc++-v3/testsuite/26_numerics/complex/2.cc
! 56356e8cd335d6e18dcae152c0f56c34  libstdc++-v3/testsuite/26_numerics/complex/50880.cc
! 663e5f1c1a0a0f33aafca3e828fc76fc  libstdc++-v3/testsuite/26_numerics/complex/51083.cc
! e908a32a571115c1659dbd7807127bb8  libstdc++-v3/testsuite/26_numerics/complex/56111.cc
  af7877b96aa74cdfc7f025c671e3d6c2  libstdc++-v3/testsuite/26_numerics/complex/abi_tag.cc
! 1a8538ec4fac700629ee6b7962414512  libstdc++-v3/testsuite/26_numerics/complex/buggy_complex.cc
! 04ca817f9a480211d406bf54ad5b10ac  libstdc++-v3/testsuite/26_numerics/complex/c99.cc
! 2322942fd111c0b9f41c506840cc82c4  libstdc++-v3/testsuite/26_numerics/complex/comparison_operators/constexpr.cc
! 2aef00910e870f64b1a536417ec41f45  libstdc++-v3/testsuite/26_numerics/complex/comparison_operators/more_constexpr.cc
! 0fbf470751323c93b405cd575f2d3728  libstdc++-v3/testsuite/26_numerics/complex/cons/48760.cc
! 327058dea3993932917c12715a644334  libstdc++-v3/testsuite/26_numerics/complex/cons/48760_c++0x.cc
! 32141ec59e504b49b65c8349ba9c9c51  libstdc++-v3/testsuite/26_numerics/complex/cons/constexpr.cc
! 05b122ba86eaf7d27f78382425d05fdb  libstdc++-v3/testsuite/26_numerics/complex/cons/constexpr_primary.cc
! 8aa9fbd6795bf290e15a5028d3e3d513  libstdc++-v3/testsuite/26_numerics/complex/dr387_2.cc
! d410af4f48b2457a4aba6d5572515aab  libstdc++-v3/testsuite/26_numerics/complex/dr781.cc
! 2ab785dfd278dad47998c0c8d1507bc8  libstdc++-v3/testsuite/26_numerics/complex/dr844.cc
! d158c4228b08ed5e48a6590f8421ecf1  libstdc++-v3/testsuite/26_numerics/complex/inserters_extractors/char/1.cc
! 275764f999efee1cfa78260eb0aa5346  libstdc++-v3/testsuite/26_numerics/complex/inserters_extractors/char/dr2714.cc
! 5cc4937a2121c9e55eda35b7f8ab6874  libstdc++-v3/testsuite/26_numerics/complex/inserters_extractors/wchar_t/1.cc
! 2e674c9c446b7fb1a73e19aed4ff80e9  libstdc++-v3/testsuite/26_numerics/complex/literals/types.cc
! dc0497efe0b28751848dfa68db5e13bf  libstdc++-v3/testsuite/26_numerics/complex/literals/values.cc
! 8b3aaee70fab28cb5a300554b8ba96d8  libstdc++-v3/testsuite/26_numerics/complex/operators/more_constexpr.cc
  906619ecf0877a7ff5302dd409c34714  libstdc++-v3/testsuite/26_numerics/complex/pow.cc
! 4f8a9a17cc9f23534e1f541f80313120  libstdc++-v3/testsuite/26_numerics/complex/proj.cc
! 9668daf0094a7981ce7c8104fa738953  libstdc++-v3/testsuite/26_numerics/complex/requirements/constexpr_functions.cc
! 17d6359a9ab80b973499c5ecb679d7ea  libstdc++-v3/testsuite/26_numerics/complex/requirements/more_constexpr.cc
! 5668582f0e5f7262003ff03f3a26f317  libstdc++-v3/testsuite/26_numerics/complex/value_operations/1.cc
! 0bea13288691faad2d7e765f836096f2  libstdc++-v3/testsuite/26_numerics/complex/value_operations/constexpr.cc
! 88eedc07e7e79f144837bb58210c0962  libstdc++-v3/testsuite/26_numerics/complex/value_operations/constexpr2.cc
! f9158751478d4248fc484baa0492f29c  libstdc++-v3/testsuite/26_numerics/complex/value_operations/dr387.cc
! fba5c9b61da9b76f8b9ae08c56640200  libstdc++-v3/testsuite/26_numerics/complex/value_operations/more_constexpr.cc
! 81d9093e0ae12a352e97c388bbe2b44a  libstdc++-v3/testsuite/26_numerics/complex/value_operations/pr88341.cc
! 700cd1e568abb76249c9e8438b9481df  libstdc++-v3/testsuite/26_numerics/endian/1.cc
! d6d738daa2fb7536d325bbab3bb41381  libstdc++-v3/testsuite/26_numerics/endian/2.cc
! 55ad6388b071810a1bba70cef1028b70  libstdc++-v3/testsuite/26_numerics/endian/3.cc
! 47a8a5e12346f7d0e07e9ae5763f82e7  libstdc++-v3/testsuite/26_numerics/endian/4.cc
! 3650d2216818f2ba57822b06cee66094  libstdc++-v3/testsuite/26_numerics/exclusive_scan/1.cc
! 18d6fd29ad28a49bce4185886e09e6b0  libstdc++-v3/testsuite/26_numerics/exclusive_scan/constexpr.cc
! 035f097a4cbac827b34920eee0ee8bf6  libstdc++-v3/testsuite/26_numerics/gcd/1.cc
! 8f690c236f5d680132daa280eab779da  libstdc++-v3/testsuite/26_numerics/gcd/2.cc
! e1eef8dcd54b6f8f7d0c889513032a89  libstdc++-v3/testsuite/26_numerics/gcd/92978.cc
! b2c1940a905dcd37f8efd5a51b0e152c  libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc
! 78a1257e886c15e45707eb67714de1ea  libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc
! 87fa325024fefcb4e09d2fc2dd6cd0e4  libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc
! ee5cb68763f5316db942768de7f63885  libstdc++-v3/testsuite/26_numerics/headers/cfenv/types_std_c++0x.cc
! db871729fe555012cfc831b30f8ce38f  libstdc++-v3/testsuite/26_numerics/headers/cmath/14608.cc
! cdc5b7fd8de49b5fe64525e38d3ad862  libstdc++-v3/testsuite/26_numerics/headers/cmath/19322.cc
! 597d5ea9e149658d7c66eecc55f4383b  libstdc++-v3/testsuite/26_numerics/headers/cmath/25913.cc
! 7f80368a20d8512d6a06c825c1d78049  libstdc++-v3/testsuite/26_numerics/headers/cmath/37582.cc
! 05dfd0641bdfa485f76e7862ed70d3d5  libstdc++-v3/testsuite/26_numerics/headers/cmath/48891.cc
! f160db7b2050650cb5b44c77570ffdff  libstdc++-v3/testsuite/26_numerics/headers/cmath/51083.cc
! 6e1b2c8390272ca951cb082121cfa37a  libstdc++-v3/testsuite/26_numerics/headers/cmath/53503.cc
! 8bc4535cba7b37418d8d5ceac5ae7f77  libstdc++-v3/testsuite/26_numerics/headers/cmath/60401.cc
! 9df939f7b5cfd12879e7dfb9453a3782  libstdc++-v3/testsuite/26_numerics/headers/cmath/60637.cc
! 854d4c6195bd5b9902cdb6c6a91fc8a7  libstdc++-v3/testsuite/26_numerics/headers/cmath/82644.cc
! 1da105626ac42ce04647f2cee86ac80a  libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++11.cc
! 8002edabda360bf7ba0e95611be63e64  libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++98.cc
! b29d44c20b404be63e815a6c6db8bdf3  libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc
! 6badb4cb6fca7c7a01b6ef23b35f37f2  libstdc++-v3/testsuite/26_numerics/headers/cmath/c_math.cc
! 8a024ec5b9cacac44475cdc609da79d1  libstdc++-v3/testsuite/26_numerics/headers/cmath/c_math_dynamic.cc
! 8294c9bd24374746c723b0f2ffcf1ff2  libstdc++-v3/testsuite/26_numerics/headers/cmath/dr2192.cc
! ff29cf6bc85acfc3102831f925a8ce29  libstdc++-v3/testsuite/26_numerics/headers/cmath/dr2192_neg.cc
! c620fc74f688e5171e72cf99eb792f09  libstdc++-v3/testsuite/26_numerics/headers/cmath/dr550.cc
! 5a8871b417f26d56d75265e35c687010  libstdc++-v3/testsuite/26_numerics/headers/cmath/fabs_inline.cc
! 7ed7322c826dc93f18ff9c7e53359be6  libstdc++-v3/testsuite/26_numerics/headers/cmath/functions_global.cc
! dbc56f03fe16990fe4b0af0e534c6847  libstdc++-v3/testsuite/26_numerics/headers/cmath/functions_std.cc
! 4ec999ffca323fa352ae067dc1715ffa  libstdc++-v3/testsuite/26_numerics/headers/cmath/functions_std_c++17.cc
! 18b504e33d6f388f243d6f53d416b001  libstdc++-v3/testsuite/26_numerics/headers/cmath/hypot.cc
! 1cb7dabb0ed79eb867d7e5c730adc752  libstdc++-v3/testsuite/26_numerics/headers/cmath/macros.cc
! 33c0e4115581ba6610e32a967781280a  libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads.cc
! bcc0048b8b2fe100930139889c5d9f84  libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc
! d19d29a1f55c472d5044a8df7e122f81  libstdc++-v3/testsuite/26_numerics/headers/cmath/powi.cc
! 14216052f16e7ae8dbcd336a9632bb2b  libstdc++-v3/testsuite/26_numerics/headers/cmath/special_functions_global.cc
! ded61177101ffdcee648e3b9dbe192c5  libstdc++-v3/testsuite/26_numerics/headers/cmath/types_std_c++0x.cc
! 2aa3665bf9f65119c324014efc7fafca  libstdc++-v3/testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc
! c49f71197c25f633497899be9854a691  libstdc++-v3/testsuite/26_numerics/headers/complex.h/std_c++11.h
! 25418acaa4da6a9a1fcce0c2aed169f5  libstdc++-v3/testsuite/26_numerics/headers/complex.h/std_c++98.h
! 52d89b4645dd5859f0750f45caa44370  libstdc++-v3/testsuite/26_numerics/headers/complex.h/std_gnu++11.h
! 0cf82a67ebe54d835bd9fc72f18e7b08  libstdc++-v3/testsuite/26_numerics/headers/complex/synopsis.cc
! 9a8b7b8501a729fda2e484143b9b319c  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/13943.cc
! 81fc2ddf06da7a6b18bb1f6938e11e95  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/2190.cc
! b4fc0ee9f10238460c6b467bf28c338d  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/54686.cc
! e38de5fdf5be137bcad8615a801b1317  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/60401.cc
! 00187b25150c84335fffc2ba9359fc43  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/dr2192.cc
! d8c1665518f8f9a53a2e48d04b67acd2  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/dr2192_neg.cc
! 7e1943950ddceba81886e6f9d2395f33  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/dr2735.cc
! 565f4b5042234425e350b418affdbd5e  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/functions_std.cc
! af0eb445e535ff820da155ad006af5fe  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/macros.cc
! 374df2e2be5edeeabca8ff1a01585d10  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/types_std.cc
! 912f2eadbce52fc8306f8f11c881e217  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/types_std_c++0x.cc
! f8e7aebd6c9125559e52eff0dd636890  libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc
! 6e934e32b1491c0beaedce39fe173170  libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc
! e9aceab437c7595c150ed85f8ca5e6ae  libstdc++-v3/testsuite/26_numerics/headers/numeric/numeric_parallel_mode.cc
! f2159025861693e0c5968d8dca92adab  libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric.cc
! 31cff3183c0df4b0bcafc5618d5088a5  libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed1.cc
! 3bf08f4938f38437527a3baa610853a4  libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed2.cc
! 0cf1125182263df47ceeb9162e131f9a  libstdc++-v3/testsuite/26_numerics/headers/numeric/synopsis.cc
! c7bd0b25114ff3bb93262025c105a24f  libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc
! 92e84db65979b9b07440972dcc042d9b  libstdc++-v3/testsuite/26_numerics/headers/random/types_std_c++0x.cc
! ca5644e14832bff5062d34c311aabb2b  libstdc++-v3/testsuite/26_numerics/headers/valarray/synopsis.cc
! 87dbac69f23453cfcc93539f350ec367  libstdc++-v3/testsuite/26_numerics/headers/valarray/types_std.cc
! 3dfd2d8bd5cf83d23426032add19d8ba  libstdc++-v3/testsuite/26_numerics/inclusive_scan/1.cc
! f3366198edcd6867c7b2b20c06b6bd2c  libstdc++-v3/testsuite/26_numerics/inclusive_scan/constexpr.cc
! da19b4fa74be848f3009f8768c385d32  libstdc++-v3/testsuite/26_numerics/inner_product/1.cc
! ca515eec6dcf95e4063fb3ab64a94bc5  libstdc++-v3/testsuite/26_numerics/inner_product/constexpr.cc
! 23d8053d576aed8aa9af2d18c129093d  libstdc++-v3/testsuite/26_numerics/inner_product/lwg2055.cc
! 849794f96a8711d5c0eb28a1e1447686  libstdc++-v3/testsuite/26_numerics/inner_product/requirements/explicit_instantiation/2.cc
! 6eb3f1df7a9f6eb01f614333026c1a1a  libstdc++-v3/testsuite/26_numerics/inner_product/requirements/explicit_instantiation/pod.cc
! 348fefa1acdcc3b911d6c1f25167eecb  libstdc++-v3/testsuite/26_numerics/iota/1.cc
! 8d6773f49818046e300da32e4fc51edc  libstdc++-v3/testsuite/26_numerics/iota/constexpr.cc
! 2b30c375f549fcebe2d9133babf8f1d3  libstdc++-v3/testsuite/26_numerics/iota/requirements/explicit_instantiation/2.cc
! 5e6025e1f61ad9a25692ba76600ad17e  libstdc++-v3/testsuite/26_numerics/iota/requirements/explicit_instantiation/pod.cc
! 78bc2f6a8af17b9da892c5cf84774e13  libstdc++-v3/testsuite/26_numerics/lcm/1.cc
! cc14972137ac3671e8a0b1bb4ba78a70  libstdc++-v3/testsuite/26_numerics/lcm/92978.cc
! d7f23f3da9d988332eb5ecfedb0fbc50  libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc
! 7bed10ce7f1644a8746230d5d1b477e5  libstdc++-v3/testsuite/26_numerics/lerp/1.cc
  f9ae973e3d6f85f4c35471e62402ba98  libstdc++-v3/testsuite/26_numerics/lerp/constexpr.cc
  198cb21048f5d36f6a9bf84a5b2dd536  libstdc++-v3/testsuite/26_numerics/lerp/version.cc
! 5c3cb58399e2e5694d833ea872daa960  libstdc++-v3/testsuite/26_numerics/midpoint/floating.cc
! 613c27e02a60ed80a5000411bf309e88  libstdc++-v3/testsuite/26_numerics/midpoint/integral.cc
! 20db8d956c35f7266748984112c6968b  libstdc++-v3/testsuite/26_numerics/midpoint/pointer.cc
! 0f66686e0b973e3acbd9f2d32d2ff305  libstdc++-v3/testsuite/26_numerics/midpoint/pointer_neg.cc
! a4ea28018a78a0aec405c335ab73f104  libstdc++-v3/testsuite/26_numerics/numbers/1.cc
! 3a78b3683e9fb2211ea245504cae53da  libstdc++-v3/testsuite/26_numerics/numbers/2.cc
! bbd24252a671099ae6d72bcb96e0b6fa  libstdc++-v3/testsuite/26_numerics/numbers/3.cc
! a9356263e51ae40c27107f91f0a1b0cc  libstdc++-v3/testsuite/26_numerics/numbers/float128.cc
! c41e31fa25de02510bfd8fd93f0d96f3  libstdc++-v3/testsuite/26_numerics/numbers/nonfloat_neg.cc
! 6b5ee014af5c1d57864dd2d471300a5a  libstdc++-v3/testsuite/26_numerics/partial_sum/1.cc
! 7eacf37e881ab31ac0601830e1538697  libstdc++-v3/testsuite/26_numerics/partial_sum/constexpr.cc
! a474b8b76d8f487b682b02fbbda0492b  libstdc++-v3/testsuite/26_numerics/partial_sum/lwg2055.cc
! e347465faccc2aedaaf7f520f2606d93  libstdc++-v3/testsuite/26_numerics/partial_sum/requirements/explicit_instantiation/2.cc
! 5232a4d6f2b3c02549f99586a246bfa7  libstdc++-v3/testsuite/26_numerics/partial_sum/requirements/explicit_instantiation/pod.cc
  862f4f439e8707b32a42b5fe736946a5  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/adjacent_difference.cc
  0553df89726830b7195d3dc76149d7b4  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/reduce.cc
  e7d03e915035104e8c34f0e1a253cea1  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/scan.cc
  371296694e234040b308e95ba965691b  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/transform_reduce.cc
  37a9d3638006b842a59994327880b85f  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/transform_scan.cc
! 77f6edf00856a1dc730f644f41ce6eab  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/cons/default.cc
! d61ad2a2a944506993b462d4ae5ba95b  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/cons/parms.cc
! eac34fcead0bbe6e2e5bd2f31a187624  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/operators/equal.cc
! fb053325bdba5fd3897a12a237ab619d  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/operators/inequal.cc
! 6d876d9d4707833c4588b6eba0bd6d0b  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/operators/serialize.cc
! 5e55ec50c1ebced85b63e63c8bf18dc7  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/operators/values.cc
! 3a2e9d979de3ce508413c8d578639cdd  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/requirements/typedefs.cc
! 9ae5b0a3e0ffed824e15b1c13b8a3a19  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/cons/default.cc
! 176594585b771a7c1c2a8a5f97a9d4d5  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/cons/parms.cc
! 5aba71c489efd6131a2772659d8880d5  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/equal.cc
! bb8e94d129b247288f858679e5eef788  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/inequal.cc
! 5f1691fde027d91c43634b9d892a1b22  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/serialize.cc
! 2ab9d80a3b158950cb26fe2fd64315b0  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values.cc
! 693e1d7f004e43e419d76825bbeb3916  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values2.cc
! cfc87da25a28225447e5f02737ec8544  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values3.cc
! 181f58793454a254642324fa9d5d1824  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values4.cc
! 557643c47138e4f65f370a88e6e8ed68  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values5.cc
! 59bf375c4476a0d579f1ab68bfc401e4  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/explicit_instantiation/1.cc
! 6e20d43bf75db1fd3bece747d9bd307c  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/typedefs.cc
! b7e8cb886ce829e59c1c431ab748f438  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/cons/default.cc
! 081c93f3faa86ea23196a5d78e65559c  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/cons/parms.cc
! 41e0c2acf55e20cb8e1f9043f97393b4  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/operators/equal.cc
! 9003e340219d3383124684f9db64b02e  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/operators/inequal.cc
! 27502602ce95d6ecea9a6fdce4205296  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/operators/serialize.cc
! dde6958d4acf3530cf8574f14d7a9800  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/explicit_instantiation/1.cc
! efc3730b1fc1d270977ef1ec0abc09ca  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/typedefs.cc
! 56235f2f814a68dc181eaeb4cc118027  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/83833.cc
! 73742fe56df65b18785ec61fcba8105c  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/cons/default.cc
! 52c3293973238991b7640838b39d8d84  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/cons/parms.cc
! e86e60bc1c4b2912cb97babd4792b8c8  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/operators/equal.cc
! 4130c4c512b9b0c91c027a02b51f9355  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/operators/inequal.cc
! 851dfbed0931afd53211482842601039  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/operators/serialize.cc
! 80be0611bd3ff27e399c3c8e9cafb6dc  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/explicit_instantiation/1.cc
! 366c3216f7cb94d8a5f9d8dd1a3be1b9  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/typedefs.cc
! 4647235f3ffc645c14edf599631d8e2a  libstdc++-v3/testsuite/26_numerics/random/concept.cc
! 9fc118666687265d101447099de38af6  libstdc++-v3/testsuite/26_numerics/random/default_random_engine.cc
! 1ab03a0e61302de32f26a7acacbcfc77  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/55215.cc
! a06908556a9318b8aac8c271fea424c1  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/base_copy.cc
! a2882c426dcb714f9092fe69c2995c97  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/base_move.cc
! d205876063b002ce7a1d70cc9dd12661  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/copy.cc
! b6d76041afee3564deb67fba473ad5cc  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/default.cc
! 55c7ea102d745569e63ed92d9e133bf1  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed1.cc
! e773f22d3e51fe722ee54bab4b96f6d9  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed2.cc
! c5808c2b11bad8ce67d6c4d3fd9360a9  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed_seq.cc
! e34ef43db7607f7231e897492ed3b788  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed_seq2.cc
! 1257175fde48089f2efa991092186a95  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/equal.cc
! 80f1417d56b720ec1ddb28ccca42823b  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/inequal.cc
! 090f6777fe0ca53f407cb106ee036648  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/serialize.cc
! 566830994b384a9e3c46b48162bc492d  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/requirements/constexpr_data.cc
! 96c763e863cf1be24b6febcc3dde7c7d  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/requirements/constexpr_functions.cc
! a0a58a53dba7a8cd07dc040e9851f2ae  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/requirements/typedefs.cc
! 7a389b9a1a10b680857e8e94f6676ee7  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/cons/default.cc
! a1043ad8812b65aa0a1de0d0d51a3991  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/cons/initlist.cc
! 3c67f74453e696deb6f4d2b88f843529  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/cons/num_xbound_fun.cc
! dc3794807cd80e0aed99ad680e29bab4  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/cons/range.cc
! 8c13f914c553da493756d073d6185807  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/call-default.cc
! 953cc82412ef8d9f2a2160c5f1f7ee53  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/equal.cc
! 6ae76e49a8a21cefe0afe10b30a082b9  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/inequal.cc
! 07d67aeff638d6c461ebfc6b7585feda  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/serialize.cc
! 8b9e29e3a0e1542a9147507722b7f5b6  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/values.cc
! 637982da00941ab0a69dc5177f5f9949  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/explicit_instantiation/1.cc
! 4d858137137bdcee3b7c41b3ac0f74aa  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/typedefs.cc
! 2de8645045f331e7d4dc077f929a278c  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/cons/default.cc
! b9607bcf1c96ad1323327ef3952ad73b  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/cons/parms.cc
! f30fdf3fd56ba3792420b60b74ba93b2  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/operators/equal.cc
! 6109da840b843c6db2620e5080123bb7  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/operators/inequal.cc
! e1fa6b30e4e0aab0026c01cf6478873b  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/operators/serialize.cc
! afe26b92a8233ac6fcba9545e6ef223a  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/explicit_instantiation/1.cc
! 4c0aa5a73f205b4cc783b27a4a052bd9  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/typedefs.cc
! f01855a89f96079cd6aec135b545fb0f  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/cons/default.cc
! 05f63dfc43a2807ebf539afef990edaf  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/cons/parms.cc
! 337b3810359185b9f73161d4015fff2b  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/operators/equal.cc
! 04a065d404afe2217b680083c0ba8d35  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/operators/inequal.cc
! e820d2944787c4709f42b4e4956ff335  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/operators/serialize.cc
! 7b3a6f097b49bfb0d2887bb9b47897dc  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/explicit_instantiation/1.cc
! 1137711c1cc300b1382e1605e9a253ab  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/typedefs.cc
! 524ede70503ec79e1cbf6e5292b5368e  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/cons/default.cc
! 564f35469fb3b6e0ade1059d67f4d075  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/cons/parms.cc
! 64e553f0d91581709ac969b95bd9a65e  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/operators/equal.cc
! 622e407c4da5d62eb679f9f2d1f434be  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/operators/inequal.cc
! 306b3b9e884c2b5b65c51202bad8ef16  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/operators/serialize.cc
! ac868f305d895d792e45b9d7125ffa9f  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/explicit_instantiation/1.cc
! ef2e12a536525b52f87de2ea650ffeac  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/typedefs.cc
! ac662f28c631de7c6ae21b4f5e9e5d9d  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/cons/default.cc
! 95e7ef9c2e34c940bbba9deee01bf70f  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/cons/parms.cc
! 62a26b5a009500c10fc6047dc6a4f4e5  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/operators/equal.cc
! 0abe1e0c7ff72e4f2ebcea383cb874a5  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/operators/inequal.cc
! b436617ec75fe42f324207c6cc7ba2cb  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/operators/serialize.cc
! 1a95f4d88084b47ce89f239fc819e02f  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/explicit_instantiation/1.cc
! fb291c4129e2e5e313198f8245b8e7f5  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/typedefs.cc
! 66c5a9fe5838eaf134e5de42148cf1b1  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/cons/default.cc
! 216fb8b592929c8abd0e09b41f105115  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/cons/parms.cc
! 9194cb1f8d6eb3cfac214eccbfcc5dd2  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/operators/equal.cc
! 82179febf08107c1f379dd2d39d4e420  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/operators/inequal.cc
! d14fe64dde8f4452e9f29375cc5bb038  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/operators/serialize.cc
! e0dfe56406172bd58c6d8b26c4224388  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/operators/values.cc
! 31ba0dba936ea0c04bcad413eed9d0c6  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/explicit_instantiation/1.cc
! 49875288f45bab372ae31d21990184e0  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/typedefs.cc
! e654ca10a17b8fa84d8404d3e6171416  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc
! 5848a72cc93ce1b95fab8e8d515c28f3  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/base_copy.cc
! 29d94466d46308b2489da8f0c7a2bfad  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/base_move.cc
! 022bbc0d78ae2f3d408d26a73c267ac5  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/copy.cc
! 3894a354503f7b45996472948ce9f47b  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/default.cc
! fa73310c785cb233a6492f2f1f60e624  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/seed1.cc
! 5a0231439e4df1558ba32a1bb968e710  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/seed2.cc
! e2222cc25925881bc3a69adf7d52c93a  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/seed_seq.cc
! 9173367522eebf36e2e282b87b67796a  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/seed_seq2.cc
! cd8ed6ea8ed1905c244d8196bb8cec4e  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/operators/equal.cc
! 1a5311709615d0330520af809dd86b64  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/operators/inequal.cc
! e4cc75f581a293b9d0fae6c5ffc7e96d  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/operators/serialize.cc
! c576932cf132cc76b9fd3a847ead850f  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/requirements/constexpr_functions.cc
! 405bc6d6a49e172fce5031dd1cba71a7  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/requirements/typedefs.cc
! f795e97ad4e5af5fcc2bf82bc257a72a  libstdc++-v3/testsuite/26_numerics/random/knuth_b.cc
! 06b9f92b0fee6d5cc3004560f68ac83b  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/55215.cc
! 41d1f5faf0e8f7f426b05c9a5d4d4770  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/copy.cc
! f77cb4f7badb848298b0bc0564c08d11  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/default.cc
! 6c57d7b734608908b7b17959bb5a8a1d  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/seed1.cc
! 59fd40427b2fa76e8dc24c132ed9bca9  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/seed2.cc
! c1c5ac429a5b1a74d2731bd019d153b2  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/seed_seq.cc
! 5cf6718f3769e20b988b809a6573f7cf  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/seed_seq2.cc
! eae3465f462dd84099a832373942caae  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/51795.cc
! 2e9246a10d36854924886490793e8984  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/call.cc
! 51ce54b4d508749e774b2320f47baa7a  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/equal.cc
! a8f126481315ae5993940e1577cb9edb  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/inequal.cc
! e7da765b790579400b76e8642a52a9ae  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/serialize.cc
! b5e823239076ac834174eb5c2deff4ed  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/constants.cc
! 8f7a47c3c12145520f4efe0c4af384a9  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/constexpr_data.cc
! f4ebeaf4bf36f4598ca545e2ccbf84ec  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/constexpr_functions.cc
! 008ff17e6629591e1020bb918abbae57  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/non_uint_neg.cc
! 66e33fa045c1a04100e93017e115a2cd  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/typedefs.cc
! c6da37b5bd797f09067c572ab0fd3e2a  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/cons/default.cc
! f8b3ca7a7ea6d03869b1ff06ae7e6b86  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/cons/parms.cc
! 58cb1b67132b8ea1e51bf7896e0622d8  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/operators/equal.cc
! 5f337919f99602cfb5d96866a80da730  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/operators/inequal.cc
! fcfa6260a427ddf9efa111ea59685d81  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/operators/serialize.cc
! 49cd3024fa11a2b2ea07f9f9567ed3d7  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/explicit_instantiation/1.cc
! 5fbbe2314c7b0ff5b5e669e6a6b05672  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/typedefs.cc
! b6cece301f662622174973d49c7e38e8  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc
! 8275dbaf2995648635c18d25fbafc604  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/copy.cc
! b4170c12cc7e82f18e89fdd54fb4ad9b  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/default.cc
! 6008e19d55d6ebd55c01fe773f606206  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/seed1.cc
! dc904abf06c781cddaea069fe223402c  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/seed2.cc
! 22055d61047b9d13af48a2599968f4f1  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/seed_seq.cc
! 8919303a94aa535de4bbd5de9c85f390  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/seed_seq2.cc
! 4560be42e8a58de516fd3dcebd966aa8  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/operators/equal.cc
! 7ca26142d78b5b434d3daf809a7c35bc  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/operators/inequal.cc
! 6b92acaf5fa3d7ee00bc168c7688c690  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/operators/serialize.cc
! c983435ae4d7be5946e25fa10d39c7ae  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/constants.cc
! b975fd2a97aeb24b7f55585290cf906f  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/constexpr_data.cc
! 54f159d9cc0cb28b3e7c1d130bade1a8  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/constexpr_functions.cc
! 2f9f7486a69b3cf508223ad35c4947ec  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/typedefs.cc
! 9648aee322fccb176c296e0d98f36df6  libstdc++-v3/testsuite/26_numerics/random/minstd_rand.cc
! 33b01f9cc1b23533cefe3e3605b2a4fb  libstdc++-v3/testsuite/26_numerics/random/minstd_rand0.cc
! f4ea07f588cbdd567b00d505fe5fbd13  libstdc++-v3/testsuite/26_numerics/random/mt19937.cc
! 0b9c70b7b18435b9666df5b22e9f5cf4  libstdc++-v3/testsuite/26_numerics/random/mt19937_64.cc
! b16bd70993b207f5c9f1aa649db75308  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/cons/default.cc
! 16dca638346cae9e53414e87f87f5e48  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/cons/parms.cc
! 4a9921e4bc758742d70485e54d0f7640  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/58302.cc
! 2d4b6eeb1c823d26a477decfdd57fb06  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/equal.cc
! 5adb014e9c6fe810952428ba5c6aa1f7  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/inequal.cc
! 54716ee37b08efac1b3abb330c2fe379  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/serialize.cc
! adb0f53c9750c0a92d17307b164124a0  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/values.cc
! 9c37bbd5c89630889f8779e3112ee1db  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/explicit_instantiation/1.cc
! a43b10f8eb0dc788d0db64136bf57cb9  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/typedefs.cc
! eaab8da52e90e6bed94b2407b5280e54  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/cons/default.cc
! 11ff35cec63419439a1fa833e3e90484  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/cons/parms.cc
! d0b1bdb8a940abd68cee45e678d7a03d  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/equal.cc
! d3822899f315bf452e87e8f0f76b5834  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/inequal.cc
! 6e4c6a254352409872aea8086bd3dda4  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/serialize.cc
! ece58a631cd3234ac4e27f65017c0235  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/explicit_instantiation/1.cc
! 6497a4d7ec2630e9fff27e5267299e74  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/typedefs.cc
! 40b72729a0e17d81cbefa6813ed07d79  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/default.cc
! 33a0f637d18bf9294b45687f4c2e76ff  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/initlist_fun.cc
! 9b1af20cc7bc078f433c6f5f6a5d8ad5  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/num_xbound_fun.cc
! 348b65a51a62ff0d662a83835b5a7a7d  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/range.cc
! d1f36ec89f72dc9abfd35924be1fdea0  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/call-default.cc
! 7f636ced1be112e0b3908689274281c9  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/equal.cc
! c67538df0e146a1b6bd9aeab6930171c  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/inequal.cc
! ef2cac2387502b0a3641b1bf38ac4317  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/serialize.cc
! 15055f6c667e267ea7e067486bb9e074  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/explicit_instantiation/1.cc
! 349e1194de4d8ef80f9e8ec0cc8b7040  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc
! fdce45f1b0005d12c02162fa9536c0cb  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/default.cc
! ed7308743961bef96b86c0b1a799b340  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/initlist_fun.cc
! 71b44e441f400d7c5db90f4fb6f8d744  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/num_xbound_fun.cc
! 217c35de0eaf7e121b2ed1a7972df46f  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/range.cc
! 78d89288a6db9eb74b0be0d747d10c6b  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/call-default.cc
! 0109e9bb8ed17fffef577da3b49a3f2f  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/equal.cc
! 511b2d6adf131e026d62643c8f380c4c  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/inequal.cc
! 44edd80481301ccd6df0a564f103bee4  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/serialize.cc
! c83afb389bf08e6076fd3222982628db  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/explicit_instantiation/1.cc
! 99ca183c319a5906be42645fe53a0fba  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/typedefs.cc
! 2f8fa0e22dea332d3395de50da8bb863  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/cons/default.cc
! 07bc7de8468714aab2801eed4c55211d  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/cons/parms.cc
! 3667951ecf69f472fbd3d1e2849ac834  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/operators/equal.cc
! 86330187c609e2f35e699c616414d08b  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/operators/inequal.cc
! 189b5b35a25960895aa40f3230c3c4e7  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/operators/serialize.cc
! 798a0ede1822385c5b3d02112b7d4ea9  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/operators/values.cc
! 83745b677a502ede915e5d886ff56b68  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/explicit_instantiation/1.cc
! 39e65e9ba15daa128aa1ed83e355378b  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/typedefs.cc
! e9b308d0c17e1980aba53c60f785ed6c  libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc
! 519076377db3532f5bb289e94d2b23f7  libstdc++-v3/testsuite/26_numerics/random/random_device/85494.cc
! 53f613d53dec98c0c3ea1b2c9bd23852  libstdc++-v3/testsuite/26_numerics/random/random_device/94087.cc
! 7617cf48983eaf0feeb5a976604fb817  libstdc++-v3/testsuite/26_numerics/random/random_device/cons/default-cow.cc
! 03dca1060007c62010df244ad646d221  libstdc++-v3/testsuite/26_numerics/random/random_device/cons/default.cc
! 9dde61b3add0487e92df91243de2e27c  libstdc++-v3/testsuite/26_numerics/random/random_device/cons/token.cc
! bdddbfad7bb717d0033a77400e031afb  libstdc++-v3/testsuite/26_numerics/random/random_device/requirements/typedefs.cc
! 9a99d76cf9b6ecbdb9689c72bf82d014  libstdc++-v3/testsuite/26_numerics/random/ranlux24.cc
! 07eacaf424acf875471501c88c953d1e  libstdc++-v3/testsuite/26_numerics/random/ranlux24_base.cc
! b9754b9aedfdb7aae949f8efdcb72f3d  libstdc++-v3/testsuite/26_numerics/random/ranlux48.cc
! dcbca3424cbe201b87c4585a4bc1418b  libstdc++-v3/testsuite/26_numerics/random/ranlux48_base.cc
! 0840114b85d9cd8e27fcaf3455a35e34  libstdc++-v3/testsuite/26_numerics/random/seed_seq/97311.cc
! b133b39d9342b4d84ee1e918eb58b9e7  libstdc++-v3/testsuite/26_numerics/random/seed_seq/cons/65631.cc
! c0a430584e59ee39ab8bf1641b537067  libstdc++-v3/testsuite/26_numerics/random/seed_seq/cons/default.cc
! 1e9c333a2e4700de3464cb3c3159e484  libstdc++-v3/testsuite/26_numerics/random/seed_seq/cons/initlist.cc
! c92cc9963ef8ae1f3b5b6a171feafc97  libstdc++-v3/testsuite/26_numerics/random/seed_seq/cons/range.cc
! 9794b3c48fa11d56acba14c5c58dfc07  libstdc++-v3/testsuite/26_numerics/random/seed_seq/requirements/typedefs.cc
! cb6a7aac1a61e1650565a6ee78875b84  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc
! f3495e4bc642cabd196b63c7b64dea95  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/base_copy.cc
! 70d3c75d2c434021b395cb801438b755  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/base_move.cc
! 650fcd190a3368b425954c147ac45eb3  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/copy.cc
! 0385efeca11274fa978859dff31a5371  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/default.cc
! d36cfe029f068d68e178b693670442ea  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/seed1.cc
! 6da00d06d96bba7edad4b348869550fa  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/seed2.cc
! 95c26b8ac2a0fa523ea159864f96a542  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/seed_seq.cc
! 3d1533cf0a3191c208a511711c60aa21  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/seed_seq2.cc
! 0b574a06c4637edb5e2c5a33f64d3edb  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/operators/equal.cc
! bc2df7c251b37aca51ef56b278f4ea89  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/operators/inequal.cc
! f8906d58897f0a9958a58031f60c7493  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/operators/serialize.cc
! 4433baf96c706166e822225b1a8ffd20  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constants.cc
! dfd2df10523753123990361419d0dac8  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constexpr_data.cc
! f1f0055d67a95e5eb28124f8edd7803f  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constexpr_functions.cc
! 4c3e4fb080cc77f2b7921a676246852f  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/typedefs.cc
! 5831995b036a21be74e407e5e94842ec  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/cons/default.cc
! 8f917310759508b5fd972a33f528db64  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/cons/parms.cc
! 9ad5d4e28637b72bed421a17ebda9fc0  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/operators/equal.cc
! 914ae1931e1d542b906043a983b217d2  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/operators/inequal.cc
! 642d2d119a136a0412ec436ce9880285  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/operators/serialize.cc
! 07a4da0df105b2a09bfe476bdd20e1ff  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/explicit_instantiation/1.cc
! ccb6d2f8d1288a7cae2c4126d48be9db  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/typedefs.cc
! c3aa17a487f3ee446abeb543095a2a8e  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/55215.cc
! b3bc025f1d65d79dd49ca78d29c17a93  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/copy.cc
! 3ffee4ef8d4c67e502e15449d62fbc5a  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/default.cc
! 3f823fed1387cf0dc45973682564d98d  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/seed1.cc
! f28187410b2d78e9ee0f14835bad97ee  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/seed2.cc
! 73fbf688666585ea369d11bbd9dfa5e3  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/seed_seq.cc
! f42c51aa5f2b100ed25f3aef5dbb05d2  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/seed_seq2.cc
! 3845833646cda1536457d7e4302458ce  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/operators/equal.cc
! 2b945b1eed4c12c4dcf2342fd507e2b7  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/operators/inequal.cc
! 270c04f7c4e48db1bd0fd109ded51663  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/operators/serialize.cc
! 46bf598b59cf1c53697aaa354ddd5258  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/constants.cc
! 5b2f155c6ae9dc00a36dcedd9a00e5d1  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/constexpr_data.cc
! 2b50956320f5bc21e26c54e8a3534b5c  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/constexpr_functions.cc
! 4b6e545a14380ab026648390e4c45a6e  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/typedefs.cc
! 3788e60b17e0b6492e48ff3e55fe5cf5  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/cons/default.cc
! 99130d1af9e4adc5fb2d14fc2a125943  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/cons/parms.cc
! fd8c69abfbbd23aab665540e3b63ae34  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/operators/equal.cc
! ab932d4eb799374bd4e7fee6bd899246  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/operators/inequal.cc
! 3d966a05737d0dfd631ab909550b4030  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/operators/serialize.cc
! e458ba5ec07e498ea309545b0cba9ff5  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/operators/values.cc
! ffa98c0e5c4890130bb436502b3e4bca  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/explicit_instantiation/1.cc
! 188d1ce4465b1bf152d4dda7606c4c5d  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/typedefs.cc
! c3d3b87088892e6e335e1147ff58f01b  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/cons/default.cc
! 60a16f7aeadf0dc72eb89a2b23f6a4e5  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/cons/parms.cc
! c6215e5c383b690a4427e1b77a9dacd2  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/64351.cc
! d98c03865f7d96933b57ffbbddd1bda7  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/equal.cc
! ee6ddb018e62f3666e3c7e9742c436ca  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/inequal.cc
! 29f2c5b50f8f08e51e4378d18df208a5  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/serialize.cc
! d8d92d3f7b6d20c31dfbb807ba784344  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/explicit_instantiation/1.cc
! d81694946d595ebb50eb05aa8c7bfdd4  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/typedefs.cc
! abd1b8a7c00cc09de700308407ec75a3  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/cons/default.cc
! 7ab826e1d6f855c475d3576b639309d0  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/cons/parms.cc
! cc3c2db68e4f74295d609efa140e2fe2  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/operators/equal.cc
! e1db785ea5fa777ec6d1ee8873280c88  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/operators/inequal.cc
! 6381f5fbf92e410b206664458bedb9ed  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/operators/serialize.cc
! fb9b6f4529138b931b4a039dfc0542dc  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/explicit_instantiation/1.cc
! cca309708b1c1127b31353e0ae625300  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/typedefs.cc
! 7e0dc264e225ec0758a3185343b866e4  libstdc++-v3/testsuite/26_numerics/reduce/1.cc
! 8a394b97355408d2235df88bfb58d07b  libstdc++-v3/testsuite/26_numerics/reduce/2.cc
  51f14806bbec80c2d5883800a91dfc2e  libstdc++-v3/testsuite/26_numerics/reduce/95833.cc
! 9775188e4216fec0dda14f9eac730956  libstdc++-v3/testsuite/26_numerics/reduce/constexpr.cc
! 92d5e9f956886f9fba02c71f534b5d6b  libstdc++-v3/testsuite/26_numerics/slice/1.cc
! 0c538886d0667618963436ec12491661  libstdc++-v3/testsuite/26_numerics/slice/compare.cc
! 9cea59603806012c9ba1b35022afc3f9  libstdc++-v3/testsuite/26_numerics/slice_array/array_assignment.cc
! 8ad0bac15aa248d1e7758a7b018e7916  libstdc++-v3/testsuite/26_numerics/slice_array/requirements/explicit_instantiation.cc
! 62a05492656968005ab7f3440eebe457  libstdc++-v3/testsuite/26_numerics/slice_array/requirements/typedefs.cc
! 748827a3277a5d14707fd9f7745ebf02  libstdc++-v3/testsuite/26_numerics/transform_exclusive_scan/1.cc
! f04d401170c90b5f8a09e4b2adedd5df  libstdc++-v3/testsuite/26_numerics/transform_exclusive_scan/constexpr.cc
! cad9cf3bd9be2c908812d01c7ac899ba  libstdc++-v3/testsuite/26_numerics/transform_inclusive_scan/1.cc
! 77ae80b6ca89bbb01ec55713b0dfd1ef  libstdc++-v3/testsuite/26_numerics/transform_inclusive_scan/constexpr.cc
! b261cf9e2877b1ce095acf434714ce68  libstdc++-v3/testsuite/26_numerics/transform_reduce/1.cc
! e64b7ea27aa7d7003509f9a5058d7756  libstdc++-v3/testsuite/26_numerics/transform_reduce/constexpr.cc
  525e5798867d708e7cc13551760f93c8  libstdc++-v3/testsuite/26_numerics/valarray/103022.cc
! 17472e54bed8a869a86d354d386261f1  libstdc++-v3/testsuite/26_numerics/valarray/27867.cc
! 6be43ef40afef800eec38a9c0d3af475  libstdc++-v3/testsuite/26_numerics/valarray/28277.cc
! 629302ab3718b1667cf68b2e2c03a543  libstdc++-v3/testsuite/26_numerics/valarray/30416.cc
! 571dcbd1b6c651f3b222947b4d3ca5ba  libstdc++-v3/testsuite/26_numerics/valarray/33084.cc
! 96990c8a70908a4cbba33c1b8a0a05f7  libstdc++-v3/testsuite/26_numerics/valarray/40691.cc
! 06e6013171253921d2e67067ebad37cc  libstdc++-v3/testsuite/26_numerics/valarray/69116.cc
! a92871e20e904ca167eba8ec10d164d4  libstdc++-v3/testsuite/26_numerics/valarray/83860.cc
! 592e61791a81302e3ef7a54946ffdca1  libstdc++-v3/testsuite/26_numerics/valarray/87641.cc
! ff59b525a762e0ec0946e89c5e8382ad  libstdc++-v3/testsuite/26_numerics/valarray/95592.cc
! 517333ece3443a0eaf5f4c848d773918  libstdc++-v3/testsuite/26_numerics/valarray/algo.cc
  3e191d68e11822f58de5e4bd15365ca5  libstdc++-v3/testsuite/26_numerics/valarray/binary_closure.cc
! 1bd1cc94b0f1bb18a989a5a8451b7aa5  libstdc++-v3/testsuite/26_numerics/valarray/const_bracket.cc
! e5ac2e92f512687e223255a8e1b59fa8  libstdc++-v3/testsuite/26_numerics/valarray/deduction.cc
! b639c93bc396efa0fd79057074fdbb3d  libstdc++-v3/testsuite/26_numerics/valarray/dr543.cc
! cf9a799688883d244898f9c13781775d  libstdc++-v3/testsuite/26_numerics/valarray/dr630-1.cc
! 2b7e67d87fc63933b3d6ae173e4a486a  libstdc++-v3/testsuite/26_numerics/valarray/dr630-2.cc
! 177b1d8aadf00d2f5d7bfb87d2c96974  libstdc++-v3/testsuite/26_numerics/valarray/dr630-3.cc
! cf93a6f65dd73b94bca78c5df440e9a4  libstdc++-v3/testsuite/26_numerics/valarray/init-list.cc
! f80244f8a99bbd30ee594052b1fcf705  libstdc++-v3/testsuite/26_numerics/valarray/moveable.cc
! 102dd42132d7f38a398f582933a20a68  libstdc++-v3/testsuite/26_numerics/valarray/name_lookup.cc
! f260f33a5cce7ab2c2c2ae71dc585cd6  libstdc++-v3/testsuite/26_numerics/valarray/noexcept_move_construct.cc
! 690fef110beb729488b0ce769e3e857f  libstdc++-v3/testsuite/26_numerics/valarray/operators.cc
! 8b55f3d705391ec4fec122e5a566fbbb  libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc
! efad8801c53981e407ded35f7ee78130  libstdc++-v3/testsuite/26_numerics/valarray/range_access2.cc
! 2c64a69255dbefcf3ef9f0b0dee7993a  libstdc++-v3/testsuite/26_numerics/valarray/requirements/explicit_instantiation.cc
! afb64b9faf6284dbc183031aa5e9f607  libstdc++-v3/testsuite/26_numerics/valarray/requirements/typedefs.cc
! d70f03fd601d2ae2cb8f58be9b54f030  libstdc++-v3/testsuite/26_numerics/valarray/subset_assignment.cc
! 911203830444a1ebf01100d8269b1515  libstdc++-v3/testsuite/26_numerics/valarray/swap.cc
! 2ca666f7c65e35487c9224dadcb18ee4  libstdc++-v3/testsuite/26_numerics/valarray/transcend.cc
! cb8d4bbac638420c6cee0cd45d91dfcd  libstdc++-v3/testsuite/27_io/basic_filebuf/close/12790-1.cc
! bc9d7bf28b4e0eddd3dba928a5b350f2  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/1.cc
! 6165e65fb13572310bf622f5d34fc798  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-1.cc
! 9ec12a46bef757c5e7f5ef48c58b58fd  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-2.cc
! f6e43d1734b3e0993ddc753c7ff541a9  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-3.cc
! dc950938049d61d8eb82c603c4821b02  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-4.cc
! 603b35243c942879524d3be9e7957206  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc
! 6c1c2d89ee92e19a4511a877fe6707da  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/3.cc
! 8355288ced4f480798b0d9c8ec410a5d  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4.cc
! 12c769681e9da5f34f800d6542bc68e5  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4879.cc
! fa5e55296db31153b523a477dd67e4e0  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/5.cc
! 89cfe3288bcd919646f12f43e9a3d940  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc
! 4f84420c93224be01fa7256fa033cadd  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-1.cc
! ec92ddfd8cd00708d61adc6f753c7cf1  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-2.cc
! 457f7758089d45e26c99e20c045e6da6  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-3.cc
! fe05159a89409c595988aa81aa072eb8  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-4.cc
! f6390c40bb6dce62163a20bc33f0a852  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/81256.cc
! 7c914b2fbc4d26cc1d7dfaa6ce261d97  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/2020.cc
! a5fa0ebe69484d5e978dac0a238ece23  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/char/1.cc
! a870f427841a033161ee9e3e5fe67469  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/char/copy_neg.cc
! bfcc7bf287efb954d3acbf34b70bc66a  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/wchar_t/1.cc
! 572918da29486e8561332c15093e92f0  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/wchar_t/10132-1.cc
! 1d4ad143fc553256b3946aafa441c288  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/12206.cc
! d3f316603a358c6ad01cb54dfc2f1e9e  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/1.cc
! d9be168fe1ebd31f4c270176637a6b7f  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13007.cc
! 5eb2a793b07cc5a9734abe73a9f0e6e9  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-1.cc
! a4739e47b6151e5861d801844efbf249  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc
! 2cc7a8d4d288150936a0630b9de4bb50  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-4.cc
! adca74825d09d094412c563a0d5b8a4c  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc
! ee786fc68f79cf31a3d655e8c5c37fcf  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/14975-1.cc
! edc937440bc5cadb9bc377e0ed8e2861  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/2.cc
! 5cdf6b9be6b84e3138fcea148b6b3e75  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/3.cc
! 18189c9ceaa1f3eefbe0217d7e3b7d0f  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/9322.cc
! 9784ab91acac3475e1be0dc70abe303e  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/1.cc
! 092898f8a8aebe082fe60df0474f620d  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/12868.cc
! 44e4ae7c375ce12e08b4834677fbd2a2  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13007.cc
! d2b4478d3a393edb741fa53fd239ae9d  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13171-3.cc
! c12ca1f2c929b73660bb6cf8367f8081  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc
! 6673820410513944e4f3b9946c27579c  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-3.cc
! 4738e6f968854f66a3d0c42199f2c96d  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc
! 2a29ad625074bef62e5ae8048322269a  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/2.cc
! 4aeafbe1115c8cd3a70ddde0f196e635  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/3.cc
! b0a558ea7067f37869dac84849ab5d3b  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/9322.cc
! 9795b8d7e7cbbf3dc25a5a043e500392  libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/1.cc
! ad0650bca52074fe264282a5cf25a122  libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/9701-3.cc
! f9215225b6799eebd862db15a3ae2e90  libstdc++-v3/testsuite/27_io/basic_filebuf/is_open/char/1.cc
! 5131f989329341c34ee34b346e2dd835  libstdc++-v3/testsuite/27_io/basic_filebuf/open/12790-1.cc
! faa483dae0094db273e0ed37bc0f9d30  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc
! 54e8d8a259d09620b35a106149d3a073  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc
! f33c47b4d3bd8b2160b1ad3cc20d7c38  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/3.cc
! a01dc292833ede20030de0c55f0e114c  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/4.cc
! 46f25a005f467fe43acdf463cf71035f  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/5.cc
! d49260e61a194d7ae33d01bc70f1cb3b  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/9507.cc
! 3436274a9c6b81282f33a7f6c33d511e  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/path.cc
! d8d643b58f5e3b3df382a909019845cc  libstdc++-v3/testsuite/27_io/basic_filebuf/open/wchar_t/1.cc
! 7a212c34aca5b38c6145bd27606c0874  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/1.cc
! c5ddb4cbaf03345d893b41020a1dddf9  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/13858.cc
! e2f25d3623cbae3855b0b6dec0d25a1d  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2-unbuf.cc
! 10e611fb5eb74779e951bc8f53f83c1a  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2.cc
! e8af280833e4b31a480853be3245dfa4  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/3599.cc
! 9e98c65b224726e8f0a9c358fa378a11  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9169.cc
! 351deca7ddda286881d461561f03c219  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9182-2.cc
! 4fa53f6898ed8907cf0c0a937f163956  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9988.cc
! 882d3b063ec91c029bc7c99535598fb1  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc
! d16daafc9a0eae5885e7b0d3cccdb4fe  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc
! cffdef61bdaf2e3c377b34c894438b7e  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc
! 71f86966bad40f41cf75e6692861e976  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc
! a16587e6a7c12bbb889860e21779aef7  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/13858.cc
! 7fec5a680febe4918268ad307db3c033  libstdc++-v3/testsuite/27_io/basic_filebuf/pbackfail/char/9761.cc
! f024a803e04b35f97fb29fb15bf62e0a  libstdc++-v3/testsuite/27_io/basic_filebuf/requirements/base_classes.cc
! 90e7e586b74be8d41ec738bca31ea53b  libstdc++-v3/testsuite/27_io/basic_filebuf/requirements/explicit_instantiation.cc
! 991780161f1ea4c21e0791f8473e5a5e  libstdc++-v3/testsuite/27_io/basic_filebuf/requirements/typedefs.cc
! 50e3c7374e4657ec91ce417277a44b2b  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-in.cc
! 73e8de25b939e4aca9df453618f5f516  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-io.cc
! 1901dc664bdfcbd60f1bb463ec086d68  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-out.cc
! 288a642574e38cfa36f4f323fe18f06e  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-in.cc
! aedced389bbbb72d435338510c5930cb  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-io.cc
! 59304673b88690de83788c620139372f  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-out.cc
! f6d24490b1ebe8a86a20c759ecd89394  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/9825.cc
! ba30c53342f2fc311ff012935f991f54  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/10132-2.cc
! fea7fceabc4386c1620a2093a7f5c59a  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-1.cc
! 7801a64a04f10b66c78ea5767df4f911  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-2.cc
! 784ef610639c0783f0407666f0bce04c  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-3.cc
! b306394214f64f174849b973706dae94  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc
! 88e03a1d0a3dc9a28c0366aabc64d475  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/45628-2.cc
! 4ca759d644f1693b57f486156d0ef418  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc
! 479fe33ae27fbafb2bc5959b427f4f5a  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc
! 2c032b50e9c2329be48db09403046ffe  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc
! de3e0b1c5a209689ffced28c79d2ad2c  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/11543.cc
! 9b7a47f9f05e2ad765bf83cf93f499de  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12232.cc
! 62a84d80581b36b4824a3a11f5970993  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-1.cc
! 7a63c83bf9dbff373ce2733cef1c410a  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-2.cc
! 26dd85355bfe8f5fddaf1bd8cf05c13a  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-3.cc
! 9f59d2d92099c32a64172e33bbe8c077  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-4.cc
! 1d6d0ccc906eee6892f258e82eedb1c5  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc
! b9ba4c8e7293620afbbb8113eaa94b4b  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc
! 8e4640936c1bef89e8145da7bdc47000  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc
! 2c1ac282c094f7e9fd362529c5a8e0aa  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/26777.cc
! f64219efe21b2c0f2a3a1e0be00e8d12  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-in.cc
! d71ac2f2dc435d07778c9587d5f014e4  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc
! c7fa361f7c690f804dd4ee11e0b306c9  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-out.cc
! b3cef22338d47698d0ab3fc45533bf13  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/4.cc
! 1968b138d32917a1a8d42da1427be596  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/45628-1.cc
! 66aebccac12173e8f300125d759c12d7  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/1.cc
! fa0c2b34bcf3aa22dba34562cc743fe3  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/11543.cc
! 163ff432297caf51b26c3bf0acf4e426  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/12790-1.cc
! fde79661862e92cde5bb8dd881d7c26e  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/12790-2.cc
! 847de4acec299b5b380efa8240e3fda7  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/12790-3.cc
! df89420effa5daac203f0b7578f8e52e  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/12790-4.cc
! f42094a2b2dc12fa0d647c8efca692b1  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/2.cc
! 3a755e563b0f44861861fa53e15d2eef  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/3.cc
! 32b60066c471f9e0756c33dcecf6d4e9  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc
! 79dbafd92fdf7f11c0b55c1b76100b82  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc
! eb50844aa93e19678b4a29b8c8e91cad  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/10132-3.cc
! ad1b733c6605e2974ff9ebd9c3db1bab  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-1.cc
! 63488e9b02ff1c107d8614208eb769e2  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-2.cc
! 5e2ec01456dc8a0ae1acc9859f737b0f  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-3.cc
! 39892cd5fc8a0a5558e3b060be378001  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-in.cc
! f6f7117b4e92037ca814468c974c0e9d  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-io.cc
! 40237faa251b79ab79c36d306e72629c  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-out.cc
! 627d30b77c3a4ed18f2800bf4ee1630d  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-1.cc
! 7d8fb7507fef748fd587a368c47aeb8b  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-2.cc
! 7996f864a1c968128b6792e20f3a8549  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-3.cc
! 88dd9018298b2fbb62f93c3cd5bb5625  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-4.cc
! ea06ccfe2877f3b19640dc4503ef14b6  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-in.cc
! 7565efd80db555687fdb58e028c552a3  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-io.cc
! ae448ee6b478fcf2c6a1cb6263c5bf34  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-out.cc
! ada2fac1051e128e2343d3a6b2128ae4  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-in.cc
! c92302174c37ecf3c5468a863744a21b  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc
! 8af06329b97422f993f9157acad3a630  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-out.cc
! f65739007c5d68e5f5e24a18bdfdf365  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/1.cc
! cb20c36dd98b0e4ea7964e5752973e5b  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/12790-1.cc
! b2c2da348aaa394fc096438e2c3cc6ff  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/12790-2.cc
! f5da8813681fb5aaa0157559a5300088  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/12790-3.cc
! 7bc3a7273dd4bbaa46ab639c5ff83ebf  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/12790-4.cc
! 1d908954346c680a573aa0d5ab9a469f  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9874.cc
! 7e83a473012cd534dca850ec4ddee57a  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc
! a5407781e2f89a387c9e39c29bc226bc  libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/1.cc
! 35c8f320b0ed3f782b085cb195ef8051  libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-1.cc
! c6043a83e74f6726d9df96f51db73e1b  libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc
! 5f79600a23b43353bb85904e1074df9f  libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/2.cc
! fb42d256fad62e865d34ae606f0fcbc6  libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/3.cc
! 67d23f6a152416e6b1b253d647122640  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-in.cc
! 8185091635f97cf836c65d0fba984b18  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-io.cc
! 64fcf14c471accd6822a849870079960  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-out.cc
! 0b1ba008f4aa43f36963ecca1c32d577  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-in.cc
! ad3276b96e50a3cd7d44136f66f41955  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-io.cc
! adc1b5686a0191850936c2a8056905e7  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-out.cc
! 1d4cb477f739da53354ebbb45ed128b3  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc
! 940da68bfee3963cea79fa88eb4566be  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc
! 52aa0287d7637114eb6ec3df90561d10  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-out.cc
! e33a9abaa25a254c28137ea65fe55322  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc
! 0c80771fc968891e1179914ea4adc157  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc
! e22e1b597f9c665d81a2da47b39ff771  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-out.cc
! 56bb4d1b1d0d01cb1c83bbe7a7332314  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/3.cc
! b40a250c9a6798a76675f8486a7d0061  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/81395.cc
! 7f5352630a452248ea956caf4cbe7a8c  libstdc++-v3/testsuite/27_io/basic_filebuf/showmanyc/char/9533-1.cc
! f9a3ea9f076f1c09344c43872362b614  libstdc++-v3/testsuite/27_io/basic_filebuf/showmanyc/char/9533-2.cc
! b0c4c422797a027dab7aafbb71147b92  libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-in.cc
! affdbe31253e67cfb1c7e6ff2755acb0  libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-io.cc
! e62c2e65616122a782c553867308c0b6  libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-out.cc
! a5f1e09ff26b71b3a48bd09f96cb518a  libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-in.cc
! f7dabc5e10a9ab8120895a1e2ce48053  libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-io.cc
! 733a683a36ccda4cb7591e5cd363387e  libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-out.cc
! ec15f49ab24f5cdfdbcc6e9c04fe2c74  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-in.cc
! db6790bc9fb3a6b062316fd0e6581140  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc
! 627f83219227db0d87a1025e1d532904  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-out.cc
! 2139d757745d6c11c0a03135ab94f348  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-in.cc
! 9e815c0d7f93b1f78d331af38ee5b92f  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc
! 616c29416788f4deb142dcfd40cd98c1  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-out.cc
! e789e210fb370154b5fa3a1abf508539  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/9425.cc
! d496f8e809ce5d62d17a0d260f4b5345  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-in.cc
! e92ceb724bd048ca69f610f77a0e380b  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-io.cc
! 3a01b0c569c90e03e5f2e2ee627ceb0a  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-out.cc
! a57a25ad31d6184a96997a235b782e2c  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1057.cc
! 905d032e867c92977566e2bd9ae88bac  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-in.cc
! de87c75e7f692a7e8e0e28585421b0e8  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-io.cc
! c48a0a2ee9e35b1a0ed2eb37d9534c05  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-out.cc
! 35c6c3f706b657693db914130caab2da  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/59427.cc
! 96b7d1a36eeaf41ede5850a80488edcb  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/9701-2.cc
! 37b292d06c7a3cb90483bf3879f2c1fe  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-in.cc
! 153a5027c58885329b17eb1d2629cdb3  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-io.cc
! 83d6c8f99c52588e0d66dd62ac4e9b1c  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-out.cc
! 1a7210abe3466b8f36745ed4d1aa373d  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1057.cc
! cde90f7c2aea0a5be06dc20fa5726819  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-in.cc
! 4e61d96ca2d762d184b05f5806126d9b  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-io.cc
! c8fb9eb1ee67f88c42262980d7455735  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-out.cc
! 4c9602547da5368e2bc94084ec068464  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/59427.cc
! 6b458a8d147963ed3b84e450c7da7ee5  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/9339.cc
! 8d737cd0993d3599cc225ff2e27b390b  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/9701-1.cc
! 2c4b8d0a9defe6248b2076df9a0f9a2f  libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-in.cc
! 2a9a05c59cc4ffa77c56b1b65e4ef9df  libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc
! af92a1fc6c59dc18f02103edfb62a0b4  libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-out.cc
! 9ab368948902b46bbd8fed0ad962bc91  libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-in.cc
! 51c0a9ac6a594d7f26d9c5e55e3416d1  libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc
! cf5643f95b4d777e80ce3b058f16cfbb  libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-out.cc
! a1be27b547ab28198c89dacbfd538f26  libstdc++-v3/testsuite/27_io/basic_filebuf/sync/char/1057.cc
! 775f640c9deefacb6dc0da327e8b0aca  libstdc++-v3/testsuite/27_io/basic_filebuf/sync/char/9182-1.cc
! 20edf3a9e8abd42639cb06da9a6b43aa  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/10096.cc
! c6babf6ebbe8173117d0366fc6f56980  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc
! 9ed2b1699a03a90b44bebbc348bfc074  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/10097.cc
! b9ed8eb3e9e2a3695d2469952e0a7f4c  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/2.cc
! fc8f09ed12e28acdecb0ee4bbd3f9fe7  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/3.cc
! 462e3dc6881b13f01cdabee12e775143  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/45841.cc
! ac9b7ac2ad0cd6da9d751975df2dacfb  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/9027.cc
! f60c9e43361990c2f54f9a9410a0ac79  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/1.cc
! e9e4ef5a28ee5df5216fb12ede252a6f  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-1.cc
! 32f44abf77772fc19dfaf39063e7022f  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-2.cc
! 76dd294381a88aee8b3413b86db3c33f  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-3.cc
! f659f04d17017f6c55701200f9229fa7  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-4.cc
! 318ce3841eefe7ceb4a6ba21c78e6512  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-1.cc
! 42245d77473a71a6a4f11a652432281f  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc
! 82bc74d59a0aeca542950654cc63dd82  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc
! 78830ac3c7d1c835ddebbe25cc61474a  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/2.cc
! 3ab7f17f3e607c015b8b997102c7f95f  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/3.cc
! 19b46c2bca3dd35094977193d28cd426  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/4.cc
! 5e88acb2c741d64033c8d5b988482f52  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/45841.cc
! 6cbf0e1f137e980243dcce4b2553fdfb  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/5.cc
! 1e687cc629c978d8b64e710ad585bdb2  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/9178.cc
! 178b8af5d27242da23e83d144a0d3120  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/9520.cc
! e99909f354fdf66bfc5db689c296689d  libstdc++-v3/testsuite/27_io/basic_fstream/53984.cc
! d68dc1f036b33dfcf5027a5dde8ffd26  libstdc++-v3/testsuite/27_io/basic_fstream/assign/1.cc
! 4d0f99262c5fc7ca64fcbdcae111d127  libstdc++-v3/testsuite/27_io/basic_fstream/cons/1.cc
! 8cf33c6d7d6569d07e542e12f9ec38f5  libstdc++-v3/testsuite/27_io/basic_fstream/cons/base.cc
! 817f87ce5450569e38191edb1473a72a  libstdc++-v3/testsuite/27_io/basic_fstream/cons/char/1.cc
! e776e39e625e537aec098bb7330c109b  libstdc++-v3/testsuite/27_io/basic_fstream/cons/char/path.cc
! 9f5d8d1e52bba1548588efd55c8b0b49  libstdc++-v3/testsuite/27_io/basic_fstream/cons/move.cc
! 016ad76732c99817db4176a7c72af3bb  libstdc++-v3/testsuite/27_io/basic_fstream/cons/wchar_t/1.cc
! 54c8c4566c9ebfc7f86d1a86ad89e8e1  libstdc++-v3/testsuite/27_io/basic_fstream/open/char/1.cc
! 612c8f11d7da36eed2f19e18219ae67a  libstdc++-v3/testsuite/27_io/basic_fstream/open/char/path.cc
! 6ad758380e05a5e465b96257adc3197f  libstdc++-v3/testsuite/27_io/basic_fstream/open/wchar_t/1.cc
! 61220082a4d937fa248cdbd130c76f03  libstdc++-v3/testsuite/27_io/basic_fstream/rdbuf/char/2832.cc
! 8911532cf4fbee7d823d88f353932ac5  libstdc++-v3/testsuite/27_io/basic_fstream/requirements/base_classes.cc
! c5eded8fb78c5edc0fcaa645f9333875  libstdc++-v3/testsuite/27_io/basic_fstream/requirements/explicit_instantiation.cc
! 1e5c6e50a431f50cba439fe55f449280  libstdc++-v3/testsuite/27_io/basic_fstream/requirements/typedefs.cc
! 8c9478ee61b766a82d8e56c11407b1df  libstdc++-v3/testsuite/27_io/basic_ifstream/assign/1.cc
! 64a620ddccea80be29f7bf6a87946712  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/2020.cc
! 62e5ab1bb0d2809a82982374d412a1a1  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/1.cc
! 98a1bc0f075269c8110a3150da04d7f3  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/2.cc
! 66c4bee70e48b81a3ac1816a9a0f76d4  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/path.cc
! 912c4d5db6bcfc32433c79e361e70a13  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/move.cc
! f4518eeab7f2886a12097effb12771dd  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/wchar_t/1.cc
! d9490651d5947e458ee9116c2fd6306b  libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/1.cc
! c777b62103abcef44682a931976255de  libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/2.cc
! 2ffdc7b7d8aff94821ee384e5554afad  libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/path.cc
! 738b5f734cf7a2e30454e975d3053a00  libstdc++-v3/testsuite/27_io/basic_ifstream/open/wchar_t/1.cc
! 3d0e82a5aac7cc45f8b0922cde0871cc  libstdc++-v3/testsuite/27_io/basic_ifstream/rdbuf/char/2832.cc
! b01d9813b17919d647f538c6a1f01077  libstdc++-v3/testsuite/27_io/basic_ifstream/requirements/base_classes.cc
! c23409ad51158418dce5a246cc36f8cf  libstdc++-v3/testsuite/27_io/basic_ifstream/requirements/explicit_instantiation.cc
! 034f9e55fa9c3d45d3e07d3a45d6f8f0  libstdc++-v3/testsuite/27_io/basic_ifstream/requirements/typedefs.cc
! a83cf509414725e5c0411cff6c4b83b0  libstdc++-v3/testsuite/27_io/basic_ios/clear/char/1.cc
! 76d2bc13e8f01ae5bdcfe6037a849c33  libstdc++-v3/testsuite/27_io/basic_ios/cons/2020.cc
! ecdfd7913fa2d73e0ba802d2389f0bd0  libstdc++-v3/testsuite/27_io/basic_ios/cons/char/1.cc
! 183e8fc21f248503558699c7cf3ec038  libstdc++-v3/testsuite/27_io/basic_ios/cons/char/2.cc
! 372c86c19b2dad41362ed3cd8186b1aa  libstdc++-v3/testsuite/27_io/basic_ios/cons/char/3.cc
! cf4dfb5a2edc148f9d2b6c0c13249aae  libstdc++-v3/testsuite/27_io/basic_ios/conv/bool.cc
! 0f2a62b356d10a2ab1fee6e071c1a8f8  libstdc++-v3/testsuite/27_io/basic_ios/conv/bool_neg.cc
! 51bd88e9977897814152b42036a85907  libstdc++-v3/testsuite/27_io/basic_ios/conv/voidptr.cc
! 6596fd2bc8e59b9e319a9620e5c6ae61  libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/1.cc
! 1f54a02e32d4143705299543b26239e1  libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/2.cc
! 4a3e8b6a7fbaa58a4cbbfe3ab3b4f8b7  libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/1.cc
! ca77dfca877593ef46b3e6f89cb2ef76  libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/2.cc
! 0011a0418983165d152dad9bbcf21e12  libstdc++-v3/testsuite/27_io/basic_ios/imbue/14072.cc
! 7e599ca6a637b04fa921c50159a2a452  libstdc++-v3/testsuite/27_io/basic_ios/locales/char/1.cc
! 4d69264655b2b2114b38fea8025eccce  libstdc++-v3/testsuite/27_io/basic_ios/requirements/base_classes.cc
! 1a16228459b9570280c3ddc18d439c90  libstdc++-v3/testsuite/27_io/basic_ios/requirements/explicit_instantiation.cc
! 3b1e2189c57b3e508b86d696a5480c31  libstdc++-v3/testsuite/27_io/basic_ios/requirements/typedefs.cc
! 0ce920d0ed5099fa350b4ae3915dde01  libstdc++-v3/testsuite/27_io/basic_iostream/cons/16251.cc
! 5ad82a7b86b0d99b961ee9d9df23ba8b  libstdc++-v3/testsuite/27_io/basic_iostream/cons/2020.cc
! 0c7d2ad945ad5c4861af6f2dc69c245d  libstdc++-v3/testsuite/27_io/basic_iostream/requirements/base_classes.cc
! 1068b1d604c2ab943511540eec4fb7f3  libstdc++-v3/testsuite/27_io/basic_iostream/requirements/explicit_instantiation.cc
! ac54e4ca26ea073b37b2b7a5fb06c231  libstdc++-v3/testsuite/27_io/basic_iostream/requirements/typedefs.cc
! 113198ae36aad80b46f2673c9d72a77b  libstdc++-v3/testsuite/27_io/basic_istream/cons/3.cc
! 1c7516edfd79f004c61d7dd2c076b3a8  libstdc++-v3/testsuite/27_io/basic_istream/exceptions/char/9561.cc
! 0542fb8417d9ea87de9c6634f4fca53b  libstdc++-v3/testsuite/27_io/basic_istream/exceptions/wchar_t/9561.cc
! e311ee1fd1f3078560a911cc98377df2  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/01.cc
! 344ca94fd218a72d421d10d510655a53  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/02.cc
! fc78f5223ffbfb24e1bec1ed8711d6d8  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/03.cc
! dbd0999c8bbdb22db9d4bdd0530ed7ee  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/06.cc
! e6d3a3c5aae6563a49429b1ade80423f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/07.cc
! a99651a7492b771de81b82558822efb2  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/08.cc
! 8c851b72e8521bc5a2f7284ffcf8b763  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/09.cc
! af141c909dc5bc8cd73af9e11e7d2476  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/10.cc
! 7a511d039f8e2b359cad6abd56851eb7  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/11.cc
! 47bad32262886fd96ac5a465da772e15  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc
! 1ea96146c0fe05ab9efb90cb75ae6a60  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc
! 7c89eeac7d143f73d922cb86aa4fcf26  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/9555-ia.cc
! 4c0c16830ed181e7566184d39f7b4d9b  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/dr696.cc
! 477ff884212a9226561410b9e01ad037  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc
! 2a796dcb75b7ff1c8a62047df7b732b9  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit.cc
! afcbcaee9005ef11ff7162d44c8d4421  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc
! dc4f12fa1364204007c7286d6fb17023  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc
! d335045ef78a687200559bdff5e788cb  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/01.cc
! cf7ed0c3a380fa6fb9b10197628b36cd  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/02.cc
! b90527db5d063e53a3900aeb51dcd016  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/03.cc
! b307812787b6e99b220ac8143debee6c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/06.cc
! a93f5e1826cc7f4d3f7342a83d747f9a  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/07.cc
! d7f620eee5b2d7e0baae7123e04118d7  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/08.cc
! 3829bc9168effb36f323102c09fc31b2  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/09.cc
! dc579eae24053fdbce423bd0bd325992  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/10.cc
! 29a36676630a18b95c53f7171105f3cf  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/11.cc
! 35771dd3c7ffc189638953a078321ddf  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc
! 4ae264391b596a02ee516bd900eeb705  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc
! aab4b7b828b773a0e58cc9f1b9601559  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/9555-ia.cc
! 6168f87ebb6d8e96648fc0b01b30484f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/dr696.cc
! 49943a2b9cc08d5a36a81ec1d192fb22  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_badbit_throw.cc
! 411c093559a6361dc97d80e4c5ac3391  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_failbit.cc
! 19cc94e59ba8a7457407b2afb2bfdd59  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_failbit_throw.cc
! f4981696c12f409e4c975bb1300014ee  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/1.cc
! 3afced9e77e3a58c283155b08317d1b7  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/11095-i.cc
! 38cac111e9117a084017fb52bbabec55  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/2.cc
! 0c20566a8434134e436280a687b7e09c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/3.cc
! 30a452bd387cea93dd0d9e59e79536c9  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/4.cc
! 834a2a4f7a94b5a080eee5455022bfbc  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/5.cc
! 474cee7ab40c0ab88ae07eb15bf7f2a8  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9555-ic.cc
! 53c9f9c583cf3ad793f2d32c932a7ef4  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9826.cc
! 12ea92388dbac4a0d7571d73b909bc2e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/lwg2499.cc
! 700a3afedeb412c5b26d5d35b37318bc  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/lwg2499_neg.cc
! f281f4ecb3e7ee43b16a03d632881397  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/overflow.cc
! 35eb903d910dbaef5b68c41b0f7f5af2  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc
! dc789e8232354508689ebfde38eed89e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/1.cc
! 4bb4834804bab4ed5a4b44f94828436a  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/11095-i.cc
! dbf0c4cc43383f02d3867387c97c3466  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/2.cc
! 57195bafa1d2591b0520b75724a9b27c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/3.cc
! 041d87cd5c839b1643eb833f813856f0  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/4.cc
! 8096b617180964173a49c25df21cc826  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/5.cc
! da9ebfbb4bdd82e8fba20813a5f22346  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/9555-ic.cc
! 9a1fd03041b42849289c07cf948296b8  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/lwg2499.cc
! fe3957370c20a94917b8c08635eda173  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/lwg2499_neg.cc
! a5b39100e3ef5d0b8229cac79538a976  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/overflow.cc
! 8b2e6695b44603c556ae9a9d546ea3ac  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/1.cc
! c1450feb66e172ffea2f025126b9ea42  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/2.cc
! 91395634320ab8fa7fb3a2b24ec13c19  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/26181.cc
! 735be119ae837ddb87b618b523ccaf08  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/3.cc
! 997c1e3f84e637f702fdaf3e5eb51ba5  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/4.cc
! 2854aaf2a63b6234aa16ce98106180cc  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/9318-in.cc
! 2e278c9a2c2d673be289cbdcfffaa0ca  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/9424-in.cc
! 089be149aebc1e3693b0147691676692  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/9555-io.cc
! 0befe2ccad3966f044bcc05075d95613  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/error_failbit.cc
! 3bd9effbc3daad5206ce5acbd32e73af  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_badbit_throw.cc
! 4113a45b7a5de954a3421881009ac040  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_failbit_throw.cc
! a3d4f83910550ce883bdae949883408b  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_null.cc
! c395fa0f0c03c7d5861315509ba48b9a  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc
! 9cba4567eca73d6932aa9d22a86ae3ef  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/1.cc
! 4c6f2966cce347d285b73ca3c26c7a95  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/2.cc
! ee35303f1f559fdc431aa5ba1c1b567d  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/26181.cc
! 80e6e5ba81d35da50a3b9aedeeba19f1  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/3.cc
! 589afbeea52ef4e6eae95b34b985dd67  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/4.cc
! 517cdfaae6262735e385895129562de0  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/9318-in.cc
! be79373bcc152f3c6dd806e6526f78ad  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/9424-in.cc
! 59743e78828fc01171e2ed61e6b9f95c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/9555-io.cc
! 32ade69323a901011ddd71db37a331e6  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/error_failbit.cc
! 0afd60baf4c905348cdd5fba58fa3f38  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_badbit_throw.cc
! 73b0884e6b9deaf0725ae1a1d66b9b35  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_failbit_throw.cc
! 3c7316a5da1399ffb0d25c9739df6f68  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_null.cc
! 019a93c1a3176971847704b57a44eca9  libstdc++-v3/testsuite/27_io/basic_istream/get/char/1.cc
! ba1b5274aa09142a12bad402d1e3f0f4  libstdc++-v3/testsuite/27_io/basic_istream/get/char/2.cc
! fa805408bb0b74a757f806dba867dd26  libstdc++-v3/testsuite/27_io/basic_istream/get/char/3.cc
! ec595c451a4dbdde7f08679ea30c2bcd  libstdc++-v3/testsuite/27_io/basic_istream/get/char/lwg3464.cc
! 3b69506e8bdaad12638d133c249465fe  libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/1.cc
! 66573ae4d7c30fcb0c369519952fabe4  libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/2.cc
! 1bac849e705f997e0a2fbc61cb861515  libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/3.cc
! a8a64567b06d6368e4ee8b08ae3818be  libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/lwg3464.cc
! 85da7c38fa6a88e5f9554f4d039360bf  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/1.cc
! 2f0ef79f88c0d1ce76ab7331c12e45a4  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/2.cc
! 9995c885e202dcaed035331ab0ce2abc  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/3.cc
! 567dbf6a890d484b90eba2588b0d8e1a  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/4.cc
! 33bd034c643e7810ed8b7f92d0ced4b3  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/5.cc
! 863533e08054b2c6d8a3339d2a794728  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/6.cc
! fe46f6e6835adca091bd6cf46ea67271  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/1.cc
! 1df70f2a81e89eba1a714477e837c55b  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/2.cc
! 7bf739cb3ecb794bb7679cc11fc84924  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/3.cc
! b1e70b96f303392e22a7ec267b5db813  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/4.cc
! 7e052bcedc5cd468d3f2e3ab39247c21  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/5.cc
! f0162ab128b14f2d25b912d8df9c90a1  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/6.cc
! 95c664e345da9e05389530605e1eb88b  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/1.cc
! cddd16714ccb83f2b4f0e1556dc41c75  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/2.cc
! 7c6764ced50aa6860a866aac145ec2d4  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/3.cc
! 8ca6af6ba457fb8c7573237389efb3c7  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/6360.cc
! 1a51039b17b876c9061e5280bb3e6b95  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/7220.cc
! 33412d33bdfdd6122e0a22ebd7a4fe97  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/94749.cc
! 9249bf9b16e58690fdd2ae54549a4dcb  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/96161.cc
! e42b24958defbbf38df5d3b4c6c9daae  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/1.cc
! 44e7de5754912979667de2c50f79811d  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/2.cc
! 990061c8d421500980cd08411f7ee951  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/3.cc
! 19eb900e45de6f12e362794aec9c8660  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/6360.cc
! 2a3cd1f412a9e2e0353010f909e7d1f6  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/7220.cc
! 57e9129a48629cf050e1a86c0f4ea3e6  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/94749.cc
! ef19e12c4284417e3e3586cf481d0224  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/96161.cc
! 89fe2824d89b1dd687d5debd35a21750  libstdc++-v3/testsuite/27_io/basic_istream/peek/char/1.cc
! 329409a3db014da23e4266f0dcb9583c  libstdc++-v3/testsuite/27_io/basic_istream/peek/char/12296.cc
! 6ab4ece1eb04323f00b2d5e0b4ea838a  libstdc++-v3/testsuite/27_io/basic_istream/peek/char/6414.cc
! 5517b6871bb9c530de539b99914d6f83  libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/1.cc
! db7567725e1e2bf421239b1ccd1d46ca  libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/12296.cc
! 0e2bb87a7400ba92b3c7ffbe74317760  libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/6414.cc
! 242a3e98b99894f27263d467a9f5f065  libstdc++-v3/testsuite/27_io/basic_istream/putback/char/1.cc
! 766d098d06c5f4e22ff6c9c87bf625b8  libstdc++-v3/testsuite/27_io/basic_istream/putback/wchar_t/1.cc
! 0fef1042c89f5280b8b73d18976ef14b  libstdc++-v3/testsuite/27_io/basic_istream/read/char/1.cc
! 783511d7d8ee53a68bd37d7305a17acd  libstdc++-v3/testsuite/27_io/basic_istream/read/char/2.cc
! 639eb71534c7ded72cdc42bc1910e277  libstdc++-v3/testsuite/27_io/basic_istream/read/char/3.cc
! 6a1e204221d6a57b77f72dbe84c5e588  libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/1.cc
! f648e4a2688f3a0d88c5005c4fad00fc  libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/2.cc
! 0ac9ed86677652a4be520d283b3e4991  libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/3.cc
! 85fb1dd12ab707b98272555fce97700f  libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-1.cc
! 61d87a0c42484354eea143bbd912b1e3  libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-2.cc
! 6bf13e823c927fc0e1295447696af41b  libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/8258.cc
! b59220fb69ff77273d57111e5767cead  libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-1.cc
! cee33b0038173da89fd43bb238a6a6c4  libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-2.cc
! a216368c82c6733bd2412512e7865c6f  libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/8258.cc
! d743689dfab19e1c41bd964a6dd68d4c  libstdc++-v3/testsuite/27_io/basic_istream/requirements/base_classes.cc
! 461ce5f75d50afef1eb4890f9b21e162  libstdc++-v3/testsuite/27_io/basic_istream/requirements/explicit_instantiation.cc
! 60f3aed78a16275ac3a44a706ffbb202  libstdc++-v3/testsuite/27_io/basic_istream/requirements/typedefs.cc
! 2e728ef6893e474e6d041b1b3b3dc1e1  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/2.cc
! 96027652cb091b0f805b4b7b6a1be6e1  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/26211.cc
! 43f8aea3ba6b1765ca05d5e184672196  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-1.cc
! 599173ab96d9d3290cd0059e57962fde  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc
! 409e6ec198221631035c78631b754817  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/exceptions_badbit_throw.cc
! 1e8fb8446e40d7d58182db4639eb10a9  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc
! 4757ec573efa257318f16c5cfe9062d3  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc
! 5d08666f67d2785385b228f6de003b5d  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/2.cc
! c1742625117104f24c8f2537286fc384  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/26211.cc
! 44d3f421e33a3db39893c60657eba022  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-1.cc
! 11f8027f5210297e264b764dc08b4c2d  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc
! 425734498894bda3544037811722dd00  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/exceptions_badbit_throw.cc
! 37cf4827786dbaed95d382d7bd858fd5  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc
! e20350ae537a07cb352179ac15954b3a  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/sstream.cc
! bd02daaa34d1a10eb5ae45b832b9fa7a  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/1.cc
! a6b915afd2c4d16520d5d4280fdb2cb8  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/12297.cc
! a1cbd4393d4fd0254e79096a1c298172  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/2.cc
! a139746c9254da484de2f5068a1cd324  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/3.cc
! cf6f1e8aff27153822e3d4e3b36166c7  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/53984.cc
! 8d7a8dced19257af218f42ab9ea92aaa  libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc
! 3f58501938c682d44cb401e6274ffba1  libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/1.cc
! 5209f4272678880d3e89d44fd6fca28a  libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/12297.cc
! 2f0be86384538ab81ea44bb3f63e9bc6  libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/2.cc
! 49a0ec5cb51b528b48462303b7283079  libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/3.cc
! f763fbbe7f27358485262a0a51ce0594  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/1.cc
! 8773a27209f8fa5f28020c42ab0006a5  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/2.cc
! c3d0dcc2649244a2be726b229dc096be  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/26211.cc
! 81707b669009e97cfb3f5cfabadd51b3  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/8348.cc
! fd4bf7eee750e574405ba745318dbb0f  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/exceptions_badbit_throw.cc
! 3fec8cb3d105eff1dbf8156865c4bafd  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/fstream.cc
! a526f042240cae66360ebecb3747a551  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/sstream.cc
! 271216eeae4e7b1576ec7332b56663a1  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/1.cc
! 87849b67c7c8df7932e468703a0ac6e1  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/2.cc
! a8f0e1d1fb66a7aa67931ed0aac93e0a  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/26211.cc
! e8682f70e34b67fdd0c5ae28fa8383c4  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/8348.cc
! f2f2060341bb73a667745248ac2e5a6b  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/exceptions_badbit_throw.cc
! 84362f8f505b9232afc3c1de9b5551d5  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/fstream.cc
! 6af5c3a65f98fe7f40d867985c7076ea  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/sstream.cc
! 136bd07059922a796777eb2c3fb97897  libstdc++-v3/testsuite/27_io/basic_istream/ws/char/1.cc
! a1bd13a84f1e60f6370c3919f9ae4c41  libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/1.cc
! f75201df9be421060b9fb4bcefa0e38c  libstdc++-v3/testsuite/27_io/basic_istringstream/assign/1.cc
! 7618100ca2cb8eccf758968f9a28e2cd  libstdc++-v3/testsuite/27_io/basic_istringstream/cons/2020.cc
! 3a554379b87940bf09b49e68d3e0cdd0  libstdc++-v3/testsuite/27_io/basic_istringstream/cons/char/1.cc
! 099e74fd950a34b99ccfe3358531356c  libstdc++-v3/testsuite/27_io/basic_istringstream/cons/default.cc
! 57409e90c20e37af300bf1db42c9b979  libstdc++-v3/testsuite/27_io/basic_istringstream/cons/move.cc
! 91943aee6ae949d9b76683fe23a7fd1d  libstdc++-v3/testsuite/27_io/basic_istringstream/cons/wchar_t/1.cc
! 68d4f440ed797bac0a31d4d37c6119b2  libstdc++-v3/testsuite/27_io/basic_istringstream/rdbuf/char/2832.cc
! 32e435a50c30937e973f415f1e59fe13  libstdc++-v3/testsuite/27_io/basic_istringstream/rdbuf/wchar_t/2832.cc
! 2f33d2d565a081fbc73f4d7dd287fea9  libstdc++-v3/testsuite/27_io/basic_istringstream/requirements/base_classes.cc
! 28d8a921e0958ea36bce5b43a8048fa4  libstdc++-v3/testsuite/27_io/basic_istringstream/requirements/explicit_instantiation.cc
! b755c755ef5d45a7fabe5e1ba00962fe  libstdc++-v3/testsuite/27_io/basic_istringstream/requirements/typedefs.cc
! 40cadca5b4438436901d646e24b96cb0  libstdc++-v3/testsuite/27_io/basic_istringstream/str/char/1.cc
! 11f13ac38d903d3bcdebce171f081ab8  libstdc++-v3/testsuite/27_io/basic_istringstream/str/char/2.cc
! a1406688188caf5c3f81b0ce3f87390c  libstdc++-v3/testsuite/27_io/basic_istringstream/str/wchar_t/1.cc
! 5f513ae9314194b142b98847b78cc823  libstdc++-v3/testsuite/27_io/basic_istringstream/str/wchar_t/2.cc
! f9874f6bb993273b1376f587529c7ae4  libstdc++-v3/testsuite/27_io/basic_istringstream/view/char/1.cc
! 3688fa1053c95b813053ac84ecaefcc6  libstdc++-v3/testsuite/27_io/basic_istringstream/view/wchar_t/1.cc
! 40890d4d327687cc576590b23e286a18  libstdc++-v3/testsuite/27_io/basic_ofstream/assign/1.cc
! 6d8885d72951ecb11cd763529e26ee1c  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/2020.cc
! e9b0721266a1fb14e708188f7fa85afd  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/1.cc
! be7d740b0c7e3bc48db46059243ec200  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/2.cc
! 1010d0d1eb4b34fb7f6fabfbccdbf587  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/path.cc
! 84749ff69b5f6694b24758737392c3f1  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/move.cc
! 23e4216c965a8a983edf4bed95712fb0  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/wchar_t/1.cc
! 842b9740f3fdd45315767b87c699b2a4  libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/1.cc
! 4349d4771068ef20b9abb40327817a59  libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/2.cc
! 76df05c78acc26f80a1593da175e4b5a  libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/path.cc
! 26e67b0b05aad969cf3e94ab0583f12f  libstdc++-v3/testsuite/27_io/basic_ofstream/open/wchar_t/1.cc
! 8d583b43a920b2d9a898cbc1310e9594  libstdc++-v3/testsuite/27_io/basic_ofstream/pthread2.cc
! 4d3e74019ef223bba8dcaec152afb329  libstdc++-v3/testsuite/27_io/basic_ofstream/rdbuf/char/2832.cc
! 1d12fcdba762fe9592c9fbd6a66e251e  libstdc++-v3/testsuite/27_io/basic_ofstream/requirements/base_classes.cc
! 1f2d0fba602cfbea0d5439ea7840c419  libstdc++-v3/testsuite/27_io/basic_ofstream/requirements/explicit_instantiation.cc
! 05a1a2d4deddae00cf15183ec1778636  libstdc++-v3/testsuite/27_io/basic_ofstream/requirements/typedefs.cc
! 64e9311fa2bf5dd54a5b7d1f96eb2044  libstdc++-v3/testsuite/27_io/basic_ostream/cons/2020.cc
! 2aaaadf0bb5d781ce781a83b5ba47b00  libstdc++-v3/testsuite/27_io/basic_ostream/cons/char/9827.cc
! fbb4458eb2089a04cb17725bd806830f  libstdc++-v3/testsuite/27_io/basic_ostream/cons/char/null.cc
! 97df24306b2c68e45f249ff32d6acba4  libstdc++-v3/testsuite/27_io/basic_ostream/cons/wchar_t/9827.cc
! 959f5200646b0ae3765318dd8030be6a  libstdc++-v3/testsuite/27_io/basic_ostream/emit/1.cc
! fc4d7a6a0f785795af97af9cef16e503  libstdc++-v3/testsuite/27_io/basic_ostream/endl/char/1.cc
! c8fcff1fdffe008637085402e3c53f6a  libstdc++-v3/testsuite/27_io/basic_ostream/endl/wchar_t/1.cc
! 2b0f00a080bea546d2ed1f2bd8053c81  libstdc++-v3/testsuite/27_io/basic_ostream/ends/char/1.cc
! 7838df230804d51eafea39e5e2d8003f  libstdc++-v3/testsuite/27_io/basic_ostream/ends/char/2.cc
! a0d8d6949382fff443431abbd49cebd4  libstdc++-v3/testsuite/27_io/basic_ostream/ends/wchar_t/1.cc
! a73ed98f10155a59e6193dcb40f8fefa  libstdc++-v3/testsuite/27_io/basic_ostream/ends/wchar_t/2.cc
! 5405653ac67c81813bbeede31b7ba14e  libstdc++-v3/testsuite/27_io/basic_ostream/exceptions/char/9561.cc
! 3793da249b3cd8d64875450eb1e2f94b  libstdc++-v3/testsuite/27_io/basic_ostream/exceptions/wchar_t/9561.cc
! 37dc42dcfcc92cbdd277e4c9cee3d671  libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/1.cc
! 9e5523fbbe2f7a20037fd1c3d08807e5  libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/2.cc
! f20f0547c23e8de3b8fa9464c08de251  libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/exceptions_badbit_throw.cc
! f226dda0d7f02208d86b315673af028f  libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/1.cc
! 534de7963bbfdb51c4ec1b77777c167b  libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/2.cc
! 4590320e85957a1c64a63cbfcd0428be  libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/exceptions_badbit_throw.cc
! 57da29349ba447818056caf17b96c8c5  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/1.cc
! 862af6898a5ba89d0a370b0e523c33be  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/2.cc
! ffdb1c216cc0a7205d16b7d15f035389  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/23871.cc
! 4b25200e481ad18b73fda63e7b7c68b3  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/3.cc
! 1085cbd81a8ab02bda7eea159b17aef5  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/31031.cc
! af3be1a517c7d15198371a54567916c9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/4.cc
! 3c1925c009ba1ceeb84009ced76c6a09  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/4402.cc
! 8281136243bfc881287afba7ad0d7a6b  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/5.cc
! f65e56577dcfc733674e1ec15bf1b2c9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/6.cc
! 80e726992fc054c6ee9e7c5cfd28850c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/7.cc
! 34f94e10bf1a1e79c86dd2cbebd00d6d  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/9555-oa.cc
! fb80c7f2dc3821724b4645650ff07156  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc
! f5229dba0e8afcc2a0a811966f1c76f1  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc
! 2b79d3f9d321f1944389003d24a91c0c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/hexfloat.cc
! c7a4e919c54c11e4cc432f87e2341d71  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/pod/23875.cc
! 36527234cf31c6844b3d4e35d40f3471  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/1.cc
! d1b0568b9b662e465b00060bb8356d5c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/2.cc
! 4f475744ac9af9f9221a1bf516491b72  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/3.cc
! ec511f46601048f5b09c9f71bea1abf4  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/31031.cc
! e5f835325f9555fd4d30c3f5af4de006  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4.cc
! 6236b12af5615fa9e84d619d7a0251b5  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4402.cc
! c38b4dc7914d796c4a8efd833701a7c8  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/5.cc
! 8d524929000b77660c3ac23f96415af3  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/6.cc
! ec6688327eace39b975a6635f234a0f2  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/7.cc
! 3c90362447fd36920930da26bc092107  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/9555-oa.cc
! 37c577ec265f5df535f8467002ac61c2  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/exceptions_badbit_throw.cc
! 7c2655df7a389a465dc97d3ab8549f49  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/exceptions_failbit_throw.cc
! 5a1dff4646f1cd5aa6215c45f449f8b9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/1.cc
! 2377bc5a190286f66db1825642e2bcc6  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/11095-oa.cc
! f36ba222b790a8529f1dd761c4d3a7e0  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/11095-ob.cc
! 697380bf1accaff9d868f5619419525e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/11095-oc.cc
! ca53af546b938f6db1e8a29ab3beab7b  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/2.cc
! 6ac7cde331370bddbc0eeb50fed4527d  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/28277-3.cc
! 06a2bb7bbb4689fc2fd3f119d02c85d5  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/28277-4.cc
! 733e5d59220cab7f74a535287269ab44  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/3.cc
! f28a96eb0d9eadb0ec3d13e0f95477fe  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/4.cc
! a8b365a8e49439f49d21bb45017aefe5  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/5.cc
! 9bc8c8b234e1470e8e3b0e42fc4efbd9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/6.cc
! ec161b93323942a3d4ae0153d46741a5  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/8.cc
! 19acbefd17726a07e884f20fef8a0f4e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/9555-oc.cc
! bde0147cdf07b79b5f8ac8d46b311bc8  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/deleted.cc
! be8c453a703320ac4487ac322710f6a4  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/1.cc
! 5a923be7b67eb7a2a75d018e052e7ec6  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/11095-od.cc
! d535272e6a19e4c636076d6994c1d560  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/11095-oe.cc
! 70e2e512274f180355df9ff84509c200  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/11095-of.cc
! 6737b6ce3ef6715e85f4edea7e3c46bf  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/2.cc
! ade475d77052499b2467a3f2167e1f42  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/28277-1.cc
! 8824bef953ae28bf2b8944a22189f8c2  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/28277-2.cc
! e6bf09b531f1acdc5cfe79635c305b87  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/28277-3.cc
! 84bb9563dcd0a1c7ad848771e643fd91  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/28277-4.cc
! 962c75eb9a9de90f337dddacaef4cb8c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/3.cc
! ff3ff2c74fcdd02a84085daeb89a44a7  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/4.cc
! 79f6f13cba64c08f7ae68c7c80196a12  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/5.cc
! d82d301c816d76f4ea4545911afea5a5  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/6.cc
! 9475b07f4037522ae787b118ec825e48  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/7.cc
! 60699c43555f4079959c0427a9be4bc2  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/8.cc
! b574778ae37b8439dacfadf6dbf1f30c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/9555-oc.cc
! 4f4ec628aaa55f106991d9094ef155dc  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/deleted.cc
! 7146d7730215c25eb293426ddc433d31  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc
! a95920567dde3aa4dc682940935c0fc0  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/2.cc
! 3975a64888e89d567856e4fb7c24f8a2  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/3.cc
! 4881bca340a00949264adcea76214b1c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/4.cc
! 7618d315fc7d044d496d197040aff5f5  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/5.cc
! 0b14ace22731fe7c91142944fe7d3674  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/6.cc
! df6d60199d2ffe5942a8ee2c1db875a5  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/9318-out.cc
! 398cda3f699e095d7af9d5df27616b7d  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/9424-out.cc
! a4d6412950830a03b9c6b5e9fbdfa149  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/9555-oo.cc
  d175b74cdf90be7b308276fabe9bfedc  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/99692.cc
! 32ff465979f1f3f61afc3e998e6d55f1  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc
! 5e43d4e5a98aa1009e2a60883e1d11db  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/error_failbit.cc
! 93a113b78e49ba88c9c97bd63dd54746  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_badbit_throw.cc
! 57dfad422c43a74ace1c461b72742c7e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_failbit_throw.cc
! 5e242aa2f65920bb3d0835bb85735cad  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_null.cc
  ebb7447c68529f67037c0007369c17ae  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/lwg2221.cc
! aae6bd298ff41ef5a8222549145319be  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/volatile_ptr.cc
! 786b69042a52dd688b8c3f7db7890245  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/1.cc
! 6f54824979f067e90bda62dd8f1c437f  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/2.cc
! 18a9b4c68e503aec5d3a9226d25c1584  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/3.cc
! 9dcf61925212d0d1ac1947e610a5ece5  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/4.cc
! 4d35a14b368b7d953d926ee1578fb55c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/5.cc
! f06edf95ec5fdf0df53a9befa385b618  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/6.cc
! b9bfec08c33806843fc1f2f830656d2d  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/9318-out.cc
! b2c9630a49e894244fe4c8247d2e55e2  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/9424-out.cc
! 9c2b28605fbfdd158b735b44d8ec3050  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/9555-oo.cc
! 4201a26e0c7030ad71b5453be8ae8a16  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc
! 1bf37e4299e9ca9ac64f5e965272ae53  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_failbit.cc
! cf82184db1b0ce24f703e43af695a0d7  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_badbit_throw.cc
! 36b8243008c7cc007710faf6b87da889  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_failbit_throw.cc
! 903bd425a938928e1c8393609f3ea21b  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_null.cc
! 1d08dbaba538795d77228ae4944fa513  libstdc++-v3/testsuite/27_io/basic_ostream/put/char/1.cc
! dd2dad15e333ec615a705cd5e326f849  libstdc++-v3/testsuite/27_io/basic_ostream/put/wchar_t/1.cc
! 6b600d5ed3181c88fb718be7055d2f05  libstdc++-v3/testsuite/27_io/basic_ostream/requirements/base_classes.cc
! 2282a3f9ba86ed6bf8bab49158575bf1  libstdc++-v3/testsuite/27_io/basic_ostream/requirements/explicit_instantiation.cc
! f39b4033b1d9d1a997bdbc8376424f4f  libstdc++-v3/testsuite/27_io/basic_ostream/requirements/typedefs.cc
! 6e68c318cb763048d45c7d1e5b103ba0  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-fstream.cc
! e6b6e214db6ac74560adaa777cf98a09  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-sstream.cc
! 70441bb79cdad41aca2a92b753ad5921  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/exceptions_badbit_throw.cc
! 4ff072b3ab2f3918bb2e7b5c341a17c7  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc
! 4f845d27f01efeb98bb82196cc557479  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-sstream.cc
! d7289608eda3a4eb2e31a73ebd431c1f  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/exceptions_badbit_throw.cc
! 1a60abb33bb7df8944b39228684df66a  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/char/1.cc
! 8e1ada348bd4606ac1b4625f06f5fd79  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/char/2.cc
! 19b14795532d3c4f53db148889db6a9b  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
! 2c2af5edc2230104fbcd3ca9f546b517  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/wchar_t/1.cc
! d6bd8ba6e70e2ef4c5d81673c9ed7343  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/wchar_t/2.cc
! 0d075de5f288f55e26f16a6a396dce89  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/1.cc
! d769282716348adca50b58072a235bb6  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/2.cc
! ed0ec66e3aa1d7a56a95ff8a9c853197  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/exceptions_badbit_throw.cc
! cbe1fc8bee5767b39f78d8d01eba364b  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/1.cc
! 3a8d01204c7a60f9832ddc43f271eff0  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/2.cc
! 3f9bab283b68ae003d8020d563537716  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/exceptions_badbit_throw.cc
! 95647b4fb9f68c5ac7304469410f6581  libstdc++-v3/testsuite/27_io/basic_ostream/write/char/1.cc
! 5b70b3dab9699023f078cc605f739d40  libstdc++-v3/testsuite/27_io/basic_ostream/write/wchar_t/1.cc
! 06013bc89460d127162daa2a27bfbc5e  libstdc++-v3/testsuite/27_io/basic_ostringstream/assign/1.cc
! 62d4fe9555d560cd7207fbd77bdd8f14  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/2020.cc
! 6de1d9b0567dac9bce73054924fce2cc  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/char/1.cc
! faf48f119bcbdc2e66bf408c2f3738f4  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/char/3.cc
! ca87f849b2d7cb932c5335eca71673bf  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/default.cc
! 6af14d345f40521870a42c51c32bc742  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/move.cc
! 8e17d87f7b5e498922ff8098b85811b2  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/wchar_t/1.cc
! c403e30debe966ebf33c6c3e2d4f6653  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/wchar_t/3.cc
! 0e64acc5d02b14bdd02bb1140dd98a9e  libstdc++-v3/testsuite/27_io/basic_ostringstream/pthread3.cc
! 93762c1319ccb31b192c7a45dbd341a3  libstdc++-v3/testsuite/27_io/basic_ostringstream/rdbuf/char/2832.cc
! dc602738dd45c71a6bb8a17a86e4de45  libstdc++-v3/testsuite/27_io/basic_ostringstream/rdbuf/wchar_t/2832.cc
! fb10c9992240dc2de31c3ed7442f8bee  libstdc++-v3/testsuite/27_io/basic_ostringstream/requirements/base_classes.cc
! 22d2aeaacc948750c68b2e2c6edd83b6  libstdc++-v3/testsuite/27_io/basic_ostringstream/requirements/explicit_instantiation.cc
! db74ceac28a530cdbb1e4a4035d80883  libstdc++-v3/testsuite/27_io/basic_ostringstream/requirements/typedefs.cc
! 71dd0b4ecfe9b524d2388f13334c6275  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/1.cc
! cb3104a123a5f199047400309beedc5e  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/2.cc
! 1965b656d438ef1c11b937aff17abf5a  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/3.cc
! 5c2259731550db794f7de1e534c6f6f6  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc
! 59c74b7bae675f692586d88ed46ffd8f  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/2.cc
! ba1a194d104cc0689b824982542ac94d  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/3.cc
! 4f59f09689cc741bfaa97c5fbb2238e6  libstdc++-v3/testsuite/27_io/basic_ostringstream/view/char/1.cc
! e039d8d12a324a2ec9f6335689167f2e  libstdc++-v3/testsuite/27_io/basic_ostringstream/view/wchar_t/1.cc
! 195a7c8031b11bcd46e29fe90b0a48f5  libstdc++-v3/testsuite/27_io/basic_streambuf/cons/2020.cc
! 973d0b2c439c26a8eb03d0d9526d4da2  libstdc++-v3/testsuite/27_io/basic_streambuf/cons/57394.cc
! 5a7d8f8a57ff2fefc27f9266f936c14b  libstdc++-v3/testsuite/27_io/basic_streambuf/cons/char/1.cc
! e7bb37a47985988850c45330a73c27dd  libstdc++-v3/testsuite/27_io/basic_streambuf/cons/wchar_t/1.cc
! 87f64d3e3f4683592b92ae251b37cb8e  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/1.cc
! 393f2a2ca9a11e6e96018ba6bce4fe16  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-1.cc
! f174eb810dd673e8ed0eee412234bd47  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-2.cc
! 2f4822a2aa8beb8b3f6e90ce3c6eed35  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/9322.cc
! 4ed7f0b149bbd82bf09e19cfe8bd9144  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/1.cc
! 2184ab60afe73f4a555a6c04867547ca  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-1.cc
! 9aa856c1b732a86ed6a31ca40e45bd4f  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-2.cc
! 65a4cca0d431723ffa10eda5761605bc  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/9322.cc
! cbf2516727e8959191e532b4f4c34f3d  libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/char/1.cc
! 55c5c0cebf9cf4e51103c87dfb343fbb  libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/wchar_t/1.cc
! 5b8bef72b5b13d83ded777cce6101260  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/1.cc
! a79025513f81c75321fa4e1eabdb9623  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/2.cc
! 859c9f551b5ea94078cdf9fd65338892  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/3599.cc
! 86ac10813418362cccb8b8f24d57f4cb  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/1.cc
! af153535ffddbc878a4e719038763f50  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/2.cc
! 9e781dbe85ef65e2193f00274b015e69  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/3599.cc
! aa53080be277e2fe58aef13e004ce964  libstdc++-v3/testsuite/27_io/basic_streambuf/requirements/base_classes.cc
! 688c42edf03012db691630eb77819e2d  libstdc++-v3/testsuite/27_io/basic_streambuf/requirements/typedefs.cc
! 8266a0fd878f0b73febfa02ede6a414b  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char/1.cc
! 09868c1b4467e03e2d156804e8bae527  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char16_t/80624.cc
! fe1fa8fbe3fea8d45d3f11dbd463a182  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/wchar_t/1.cc
! 155b7e9c7cddcdb5e2b41be427405380  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/char/1.cc
! 6dfb5e1c7b2a94e3f6f951d793b08b87  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/wchar_t/1.cc
! c62a838a9e5988e45a89b049e643107c  libstdc++-v3/testsuite/27_io/basic_streambuf/sputbackc/char/9538.cc
! a1131b9bb2e749082167af3e8dcd76a4  libstdc++-v3/testsuite/27_io/basic_streambuf/sputbackc/wchar_t/9538.cc
! 421942568b5f4b0bc05a646936609b8b  libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char/1057.cc
! 39153e93e0d619bc70aa482bef2bccb9  libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char16_t/80624.cc
! a9c4f0333472875afaca0569d47cc31b  libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/wchar_t/1057.cc
! c8e1c964afae44f4e10fa7cd98efe85c  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1.cc
! 528857b5f19111b3744b99cef08d4cbe  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1057.cc
! 679ee8d42aec428495727a83c697d4be  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1.cc
! 75b3e6525b911e197cbdfcd39f8e2913  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1057.cc
! 74d746605023fc0c9b3cf84b8ca1eb1c  libstdc++-v3/testsuite/27_io/basic_streambuf/sync/char/1057.cc
! 8074cc5b89f14adf20073d9459cda9f4  libstdc++-v3/testsuite/27_io/basic_streambuf/sync/wchar_t/1057.cc
! fb7f10dae55dd2a3a297568a707946f7  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/2020.cc
! 228a5951c943a52e52cc12c2f6a95469  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/81381.cc
! 4cc3e5653db81be435900fc1e48215c6  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/char/1.cc
! 76862187ddf90a33afb1b81af627576f  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/char/2.cc
! 34821995653cd447fe4bd05edb315bb5  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/char/default.cc
! 86e35166a6b3cb79faf381812ede1c4a  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/wchar_t/1.cc
! 3e8a2dedae090ba7d4fc3655aa11c16f  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/wchar_t/2.cc
! 8d0c195fcc546a21ad573ee1ec1f2eb2  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/wchar_t/default.cc
! 73bfe98de60496e11bf9b096e3182ce6  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/1.cc
! 375f4e54dced1daf9a2ffa07390a6ca1  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/9322.cc
! 69fb1acd355d304849ad7c3381ee6265  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/wchar_t/1.cc
! cf8b9cc487965f3901620613d0520122  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/wchar_t/9322.cc
! d89b5c256245a778bc6e6679e9020da6  libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/1.cc
! 3f1c87d6a36e21ec60640a4fe965d5f0  libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/21955.cc
! 19c76a19d45144c45b58b9bdb9bcacc7  libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/wchar_t/1.cc
! 5a192aaabd005ebe50f2f1976e46bfb2  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/1.cc
! eb1b267fdbaa4a01d07d92f54099113a  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/2.cc
! 6b3b7d92f7dbe43de296f8c8df2f9c47  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/26250.cc
! 6c08409227c467e91b8a2cd4865e775e  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/3599.cc
! 658f31ecc2953e0a2498f03ad662d414  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/9988.cc
! ab3a699e4f414beb6fe0581b5e6c93be  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/1.cc
! ea730f17cbd20e54831e8cecc9ddeaf3  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/2.cc
! f5c8ee827c03cc20fac787b045153423  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/26250.cc
! d89b357724aede6b98ded932ba813969  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/3599.cc
! 2ce85b32e1bd3c6d18e1d4f58067b801  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/9988.cc
! 4202ceac3a9a0714dffd5a6e58262976  libstdc++-v3/testsuite/27_io/basic_stringbuf/pbackfail/char/1.cc
! f0f6e8b8c6387cb248a92b03a17f6ffe  libstdc++-v3/testsuite/27_io/basic_stringbuf/pbackfail/char/2.cc
! 3a45cbdb6ab0b6ca9472c5e1144f2bb2  libstdc++-v3/testsuite/27_io/basic_stringbuf/pbackfail/wchar_t/1.cc
! cc65ca901ff93af62c0e3d8c993a3b34  libstdc++-v3/testsuite/27_io/basic_stringbuf/pbackfail/wchar_t/2.cc
! 51ec0b31da902aa0c4be323fe9d1d058  libstdc++-v3/testsuite/27_io/basic_stringbuf/requirements/base_classes.cc
! 731787b9f6f6f3839c2806c84bb6a98a  libstdc++-v3/testsuite/27_io/basic_stringbuf/requirements/explicit_instantiation/2.cc
! e65ba071ebee5fea3e8c6318898f87bc  libstdc++-v3/testsuite/27_io/basic_stringbuf/requirements/explicit_instantiation/4.cc
! 41c5d1f090ae12f4cdabcb332a9e4f4a  libstdc++-v3/testsuite/27_io/basic_stringbuf/requirements/typedefs.cc
! 83e65b526568512963fa42bf421cf7a8  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/1.cc
! 4e2fb218b2b73be2c2e18b6d5c16b9f8  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/9825.cc
! 4aa976a873d6418aaacc52e6d3b83826  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/1.cc
! dee415519d59db7f2447bfa0822823be  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/9825.cc
! f416ad0195cf3f25a0061f260387f28a  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/1.cc
! b45d17ee6b2f5709e49ee40a175caad0  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/10975.cc
! 117b8c67f0e76f4d630a0055fb54a8ff  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/16956.cc
! 89cd04d973b6b016fc25e10b7b2ac5c7  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/2.cc
! 0757faab59ac29f2d939c8f856c1ce72  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/1.cc
! fdb324627b9fd90afa87ac224d59c183  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/10975.cc
! 950f747c2669d48fedd562933ff97b14  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/16956.cc
! ae499394bb19e69132b3ca34f5df287c  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/2.cc
! d43ac9a0c7a50e8c000ce77c00f4c3bb  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/1.cc
! a69ff787f1efbe1928a57797a9232995  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/2.cc
! 6f1777f9adb768dc6cdd58b58db82431  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/29354.cc
! a17c37932ff7d5b5f83e6bf71b2fcf41  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/3.cc
! d9c6fa0f005b3df28cd13397f2a1c42b  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/1.cc
! 07888c29b0652a4f3c75cb246ccdcb30  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/2.cc
! 2d02c586218e714b4f33427d16fad70c  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/29354.cc
! 0787e7ec67c8645111ce3abbc8bfce51  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/3.cc
! e0e30a7057408a9d41a8cd70e385e6e2  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/1.cc
! ca5b9783329ec96f363aa62224d075fb  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/2.cc
! 65473cb0e6f898af8edf674f35a9afee  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/3.cc
! d2a7af8ba814610bb05a89e09099369c  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/4.cc
! 1a012b15712aaed48d1f0de693604b33  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/wchar_t/1.cc
! aaefc944d5b2e419ca0e79f9962a33d5  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/wchar_t/2.cc
! b55481101a5ac6be0831e6c4b195e54f  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/wchar_t/3.cc
! 1ca202eb7c3c29100ef232f436c959ba  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/wchar_t/4.cc
! 4843f034d951e657fbdd045e37482aa9  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/char/1.cc
! cf805a4c9ffad607c25edcb553a60ab9  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/wchar_t/1.cc
! 9a0dafc867041196a57118c647585d54  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/char/1.cc
! 007443e7fe99bee71c0740525e80ccc8  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/wchar_t/1.cc
! ca1eb1e5f868b1ec35d76bbb77ce8012  libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/char/1.cc
! 5295e340a015170b07a0f46d5aaadc7a  libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/wchar_t/1.cc
! 65d0c9fc776ef70ec67cea9c3174510d  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/1.cc
! 30b1e8444294e148a4258c8887305e16  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/9425.cc
! f9c79df7e63e93e75ba0d8f14d6b1cd4  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/wchar_t/1.cc
! 852cf9f9057ba5f62b32276b5e26dfbb  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/wchar_t/9425.cc
! 8e8f7dc03e63629f439adb5069c19af9  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1.cc
! 7b55681529cf80d725d1dbeda103e913  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1057.cc
! 927f324d168cc31c778877c6c5991882  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/9404-1.cc
! c166d065f2b68bf90414f699f0fba4d4  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/1.cc
! 1c1d675d73b894054c70c8d32f20ec5d  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/1057.cc
! 3da5dffb45b181fe6b3540774e6fe4b4  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/9404-1.cc
! dba4bdb2ecfc0d2db430684dbb3f5602  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1.cc
! 9738127fdbe8147e7bf6ec8de43c7e4a  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1057.cc
! 3faa40a572253528eb5ab5df810e7c55  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/9404-2.cc
! bb08d1e8e829bd8ee90fbbcd1db5d408  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/1.cc
! eb7fa59f91a75a6aa6554167e242ebec  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/1057.cc
! 288a804247ead36eb88861d9129f698f  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/9404-2.cc
! 0fe68c444a84f9b41450f460b64c0c02  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/1.cc
! 1bfa2157a2234e8f682d0c1b7f3fdf72  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/2.cc
! 25520c09cfe4c0336d0a3114794d3197  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/3.cc
! a30c642f58508c4a136289e23310dca2  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/3955.cc
! f108db007b8c5e2a6af4d96053317ab5  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/4.cc
! 9691c910314a90b2d15ab3d0c1d10bb1  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/1.cc
! 7b8f2ac363e4983e800c705f2a127f8e  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/2.cc
! b3b237681faf5e8bb89f05f1892d54a8  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/3.cc
! 147d507adeff80cb2fe9af6623d6476a  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/3955.cc
! eec82190f30f65f284201985cf443249  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/4.cc
! 0b9687236b93bf5ce96ceff39f7bf1ee  libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/char/1.cc
! 9be6dd1ced5daa1139a398805d89c3e0  libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/wchar_t/1.cc
! 894a9a3896e3249b58392a5bd4381dc6  libstdc++-v3/testsuite/27_io/basic_stringbuf/sync/char/1057.cc
! 1459380cd96dff048231c734c1103551  libstdc++-v3/testsuite/27_io/basic_stringbuf/sync/wchar_t/1057.cc
! 4619d39789fbf6faf0df41e5bdf70451  libstdc++-v3/testsuite/27_io/basic_stringbuf/view/char/1.cc
! 721c48a230fcdaa8a7818a132374e4f6  libstdc++-v3/testsuite/27_io/basic_stringbuf/view/wchar_t/1.cc
! 7ee8dea287d81c5fbcd63f7d288c1e5a  libstdc++-v3/testsuite/27_io/basic_stringstream/assign/1.cc
! ae2aab6049fc0fb74889c87578e34ee6  libstdc++-v3/testsuite/27_io/basic_stringstream/assign/81338.cc
! 493627d560d0c3407979586b696be486  libstdc++-v3/testsuite/27_io/basic_stringstream/cons/2020.cc
! 94729503beefcb5a181c78e6ac78063b  libstdc++-v3/testsuite/27_io/basic_stringstream/cons/char/1.cc
! f869623b4789482f9f015374b51be26a  libstdc++-v3/testsuite/27_io/basic_stringstream/cons/char/97719.cc
! d48edfda75651d6b0900e178427dbd0a  libstdc++-v3/testsuite/27_io/basic_stringstream/cons/default.cc
! ff45fb4b1f644b62e923359ce45e138d  libstdc++-v3/testsuite/27_io/basic_stringstream/cons/move.cc
! 91943aee6ae949d9b76683fe23a7fd1d  libstdc++-v3/testsuite/27_io/basic_stringstream/cons/wchar_t/1.cc
! 2a88671f08980a5443363269319ff3cd  libstdc++-v3/testsuite/27_io/basic_stringstream/rdbuf/char/2832.cc
! df282f58e6fc5b328a24ab5d5a1e6522  libstdc++-v3/testsuite/27_io/basic_stringstream/rdbuf/wchar_t/2832.cc
! eb27a6fd101db06099fe333a083c3389  libstdc++-v3/testsuite/27_io/basic_stringstream/requirements/base_classes.cc
! afcda5b61cb84b593bcba6cd9283ca27  libstdc++-v3/testsuite/27_io/basic_stringstream/requirements/explicit_instantiation.cc
! 9088e5561a69a369ae3fdd4f2d79b15d  libstdc++-v3/testsuite/27_io/basic_stringstream/requirements/typedefs.cc
! 55e762c8557ed40691bfccedabf1c3ca  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/1.cc
! 9f67ed99b0c5434605d10dadd47b8186  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/2.cc
! d8020e63ae19e74ec6ce551d10343472  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/3.cc
! 33b43019f9efab6ddb950b6ae620df48  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/4.cc
! 4618a44e6f98f8a23fc54fa7b9a0c67f  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/5.cc
! caec1f8a27a5d98d04e3472266e8bd76  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/1.cc
! 6254aaaaacb288b104d397ff78e7c2ab  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/2.cc
! b05bde7e80a3bbd3dfcd138a847c6bf4  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/3.cc
! 951d2ef5e5bc7ff2051a73e347c2588f  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/4.cc
! 2dd24155a5f9aa114ca0f7aff33c8803  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/5.cc.cc
! ed3f2b987a697fb73ed669e1a154b20f  libstdc++-v3/testsuite/27_io/basic_stringstream/view/char/1.cc
! 0d961494760b430db6ba8ec103c9a80e  libstdc++-v3/testsuite/27_io/basic_stringstream/view/wchar_t/1.cc
! 2a3d2fc8b88adf4fddfa1e0082770b72  libstdc++-v3/testsuite/27_io/basic_syncbuf/1.cc
! d31ae7959965838d80a29ea724f65872  libstdc++-v3/testsuite/27_io/basic_syncbuf/2.cc
! c218223ffbd12bf061e7d4614c8c7d95  libstdc++-v3/testsuite/27_io/basic_syncbuf/basic_ops/1.cc
! 651a3b252aec3e7a49846b8239025938  libstdc++-v3/testsuite/27_io/basic_syncbuf/requirements/types.cc
! 89a05c9ccfe4b7c4923719e774da4260  libstdc++-v3/testsuite/27_io/basic_syncbuf/sync_ops/1.cc
! 2a3d2fc8b88adf4fddfa1e0082770b72  libstdc++-v3/testsuite/27_io/basic_syncstream/1.cc
! d31ae7959965838d80a29ea724f65872  libstdc++-v3/testsuite/27_io/basic_syncstream/2.cc
! 37720cac49755019ad098c4bdd4a4300  libstdc++-v3/testsuite/27_io/basic_syncstream/basic_ops/1.cc
! 8fb6ad828250a6f6b335b44c65859c70  libstdc++-v3/testsuite/27_io/basic_syncstream/requirements/types.cc
! 9c5a59048934e76eee6db1c5df19d0ff  libstdc++-v3/testsuite/27_io/filesystem/directory_entry/86597.cc
! 94163431bed835b8ba3e50dde3d5c6b1  libstdc++-v3/testsuite/27_io/filesystem/directory_entry/lwg3171.cc
! cead5db9b01b01a53ce66c98bc2ccfa5  libstdc++-v3/testsuite/27_io/filesystem/file_status/1.cc
! 41561d8f83912896b48d6f92ea7dd704  libstdc++-v3/testsuite/27_io/filesystem/filesystem_error/cons.cc
! a8f08f12e07d34aced996f0ef16f7486  libstdc++-v3/testsuite/27_io/filesystem/filesystem_error/copy.cc
! 12c64f56a311b7479e97421eb4245118  libstdc++-v3/testsuite/27_io/filesystem/iterators/91067.cc
! 34a26bc8c96de0f7df3ee9dff5b80443  libstdc++-v3/testsuite/27_io/filesystem/iterators/caching.cc
! b74acfd30c0988b4096342e63e84e3ec  libstdc++-v3/testsuite/27_io/filesystem/iterators/directory_iterator.cc
  304b563b62625027227f0c89f75ae00b  libstdc++-v3/testsuite/27_io/filesystem/iterators/error_reporting.cc
! c2deb7759283eeb6e004fe49aa1cd137  libstdc++-v3/testsuite/27_io/filesystem/iterators/pop.cc
! 9707dd0737bc1e446ea08a7e91680c32  libstdc++-v3/testsuite/27_io/filesystem/iterators/recursion_pending.cc
! a8ce9a69761fe4c5e4eabb70aa80928d  libstdc++-v3/testsuite/27_io/filesystem/iterators/recursive_directory_iterator.cc
! 5d2ba944a9d67ae8792d4a32c0cb7a26  libstdc++-v3/testsuite/27_io/filesystem/operations/absolute.cc
! 1aaf48ba68cc2149c685314ed18f6b22  libstdc++-v3/testsuite/27_io/filesystem/operations/all.cc
! 3030b1e930d491aa14d2246d59419ca4  libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc
! 59018bb9bac4c1cb42ad0546e6c3eca9  libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
! cc24c97c2b68dd3bd3a716999460368c  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file.cc
! caa5518185a6665ae00783e8306f3cfb  libstdc++-v3/testsuite/27_io/filesystem/operations/create_directories.cc
! 6ef2f1971d171af530b49e925ba37121  libstdc++-v3/testsuite/27_io/filesystem/operations/create_directory.cc
! b8e28a052ae7850018fd3142c6df4392  libstdc++-v3/testsuite/27_io/filesystem/operations/create_symlink.cc
! 36128b43b7b5d2b93dcec2ec8c05d5cd  libstdc++-v3/testsuite/27_io/filesystem/operations/current_path.cc
! f9236910033867255d2c510f27adf9a3  libstdc++-v3/testsuite/27_io/filesystem/operations/equivalent.cc
! 7d673caf7ebae2eb3dddc940da5ff65d  libstdc++-v3/testsuite/27_io/filesystem/operations/exists.cc
! b2912abacd587768365c0d3110da9812  libstdc++-v3/testsuite/27_io/filesystem/operations/file_size.cc
! 530baf288f4ce86573fd862bbd2a88a7  libstdc++-v3/testsuite/27_io/filesystem/operations/is_empty.cc
! 7cb769255b1ae0ffa98623d5df1522e8  libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc
! a304bce858b100433ff63c9f1ab74199  libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc
! d472e0aaf3d65d72e01ee7e29c122aa4  libstdc++-v3/testsuite/27_io/filesystem/operations/proximate.cc
! c5a49bd0a1448743377e8a5874e43972  libstdc++-v3/testsuite/27_io/filesystem/operations/read_symlink.cc
! ead113c96fabb328faec60f304390d6d  libstdc++-v3/testsuite/27_io/filesystem/operations/relative.cc
! 0a68e427522322c3ffc6ea5f4207bd15  libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc
! c069bb2dcb9c020663acc7909e7f5b77  libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc
! b661ceb4844b789316d89e35b99b2100  libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc
! 7e15f2f4b6af8060c3bd89554d02f5d6  libstdc++-v3/testsuite/27_io/filesystem/operations/resize_file.cc
! 65c6d95957a44daffefdfccc0cc76722  libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc
! 90c27031cdbd3b50e1460fa272bc92c3  libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc
! dc6fff43af6f213cf7716f98fcde7623  libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc
! 208783c1814e704b7d946a5fc2a98879  libstdc++-v3/testsuite/27_io/filesystem/operations/temp_directory_path.cc
! 781339e8c95335b74ca33750fbad2e9b  libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc
! e5d73d0c8090549ef1d89888b19bea00  libstdc++-v3/testsuite/27_io/filesystem/path/append/path.cc
! e6bcd096eac06dd3fd04d064865847de  libstdc++-v3/testsuite/27_io/filesystem/path/append/source.cc
! e11c3c93b534813ee06118cf49897b83  libstdc++-v3/testsuite/27_io/filesystem/path/assign/assign.cc
! c4dc493e7fe9cae0bbfa9f50a1558593  libstdc++-v3/testsuite/27_io/filesystem/path/assign/copy.cc
! 9d5814ff2832cf933d781849d7a44524  libstdc++-v3/testsuite/27_io/filesystem/path/compare/compare.cc
! 3f8fdd73f57fcd06b642d5db2b4ba2b6  libstdc++-v3/testsuite/27_io/filesystem/path/compare/lwg2936.cc
! 31f25009d7bd1f8ac1aa3353d20448a4  libstdc++-v3/testsuite/27_io/filesystem/path/compare/path.cc
! 9fc3c4851dfa645d3e126c633671eea6  libstdc++-v3/testsuite/27_io/filesystem/path/compare/strings.cc
! 03dd589a90a3fa45ce6f53a9d6948a1a  libstdc++-v3/testsuite/27_io/filesystem/path/concat/92853.cc
! 7e8f7ae12bcc0a876eacc8db927e8246  libstdc++-v3/testsuite/27_io/filesystem/path/concat/94063.cc
! 4a3b69a82cac3eb4021adca3d24566dd  libstdc++-v3/testsuite/27_io/filesystem/path/concat/path.cc
! 84929b9df5d7d056727e7a6288d4c0ea  libstdc++-v3/testsuite/27_io/filesystem/path/concat/strings.cc
  a22e69eb2c027825b8fb3e0e6df6a97d  libstdc++-v3/testsuite/27_io/filesystem/path/construct/100630.cc
  3bc7c7fa91cdfae8b85e98c050b994cc  libstdc++-v3/testsuite/27_io/filesystem/path/construct/102592.cc
! f7519f418c9e3f8120af2f159eb4361c  libstdc++-v3/testsuite/27_io/filesystem/path/construct/80762.cc
! 6a8b9ad795e9531e42ff0e3afee721b3  libstdc++-v3/testsuite/27_io/filesystem/path/construct/90281.cc
! f09d25591d80f944624fffcdeff9a666  libstdc++-v3/testsuite/27_io/filesystem/path/construct/90634.cc
! 1fef6fcccb3ed4650d0ef626edfe0dc7  libstdc++-v3/testsuite/27_io/filesystem/path/construct/copy.cc
! c88e947c48c410c8d019b1f85cc7b44c  libstdc++-v3/testsuite/27_io/filesystem/path/construct/default.cc
! 2abd082ffbea2eed136e7c98ac008b72  libstdc++-v3/testsuite/27_io/filesystem/path/construct/format.cc
! 16dd713cdfea75639d408f7f1f4da2b7  libstdc++-v3/testsuite/27_io/filesystem/path/construct/locale.cc
! b16de399c1e055c9db1f7caae47dd2ec  libstdc++-v3/testsuite/27_io/filesystem/path/construct/range.cc
! fbc2bd0e5917b48b229a805257299470  libstdc++-v3/testsuite/27_io/filesystem/path/construct/string_view.cc
! 0854f6242af3ec3dc19e232fb42ca06c  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/extension.cc
! 40e0ae9926d5cf62852ab81e267af537  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/filename.cc
! 95c105344d1a8894817f14e1fb96b9c7  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/parent_path.cc
! bcd629378e334b76d019f6493e4d7e86  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/relative_path.cc
! 314f71b99b82e7b47c89fd412741e865  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_directory.cc
! 0f62f6512caf8ad9736ab1a25c1b24eb  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_name.cc
! 682eba9ebb023b1d3eaca513e78c83d3  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_path.cc
! 6117a115d62a78a823020ec470a3b7e5  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/stem.cc
! 2e18e70af2d955f43e2aa13d58bba226  libstdc++-v3/testsuite/27_io/filesystem/path/factory/u8path-char8_t.cc
! b3cac89d7f322e4471be6c749d58aa94  libstdc++-v3/testsuite/27_io/filesystem/path/factory/u8path.cc
! a206fad7676630029fe70a498c4af34d  libstdc++-v3/testsuite/27_io/filesystem/path/generation/normal.cc
! 634fe0d8baa51b55ce967bf0846a5a92  libstdc++-v3/testsuite/27_io/filesystem/path/generation/normal2.cc
! 5b655a0726278e1a5c67790e38f5e685  libstdc++-v3/testsuite/27_io/filesystem/path/generation/proximate.cc
! dda608d080ed0e564e44c78dc8f54089  libstdc++-v3/testsuite/27_io/filesystem/path/generation/relative.cc
! 16f63009cc2b1d0eeef4e74d768de315  libstdc++-v3/testsuite/27_io/filesystem/path/generic/94242.cc
! 10c4a0c5695159f75d68c3048d06129e  libstdc++-v3/testsuite/27_io/filesystem/path/generic/generic_string.cc
! 67870936a1225c5531f6e94d5dc84c64  libstdc++-v3/testsuite/27_io/filesystem/path/generic/utf.cc
! 051796112fe30bd3e5459c4d7cd9b656  libstdc++-v3/testsuite/27_io/filesystem/path/generic/wchar_t.cc
! 14f6e1c280d281ae8f5770594c458c9c  libstdc++-v3/testsuite/27_io/filesystem/path/io/dr2989.cc
! 2fafa1ec02786d6413fc19083899e5bb  libstdc++-v3/testsuite/27_io/filesystem/path/itr/components.cc
! 76f8c0e4054614a5689989a8cc4bcaa3  libstdc++-v3/testsuite/27_io/filesystem/path/itr/traversal.cc
! 77be7eec4417350299e5a013321f193f  libstdc++-v3/testsuite/27_io/filesystem/path/modifiers/clear.cc
! a69f7880bed9c1adccfe765e4437b38a  libstdc++-v3/testsuite/27_io/filesystem/path/modifiers/make_preferred.cc
! 271b87e803947d80db5e500ebe1648f3  libstdc++-v3/testsuite/27_io/filesystem/path/modifiers/remove_filename.cc
! 82261a3c7b53d49c27f77545ba004020  libstdc++-v3/testsuite/27_io/filesystem/path/modifiers/replace_extension.cc
! 20574e121e824a490fd965659ba4e88d  libstdc++-v3/testsuite/27_io/filesystem/path/modifiers/replace_filename.cc
! 3f653b8c4cb6aadac52441e03b4b8843  libstdc++-v3/testsuite/27_io/filesystem/path/modifiers/swap.cc
! 4b2c4f9ba4b9dbb56ba61fb0bd596e9e  libstdc++-v3/testsuite/27_io/filesystem/path/native/alloc.cc
  697f6ac048e02e33ef8e766bd5eecec9  libstdc++-v3/testsuite/27_io/filesystem/path/native/conv_c++23.cc
! 9ac07b6d5bd6915ed6e79a3859cee466  libstdc++-v3/testsuite/27_io/filesystem/path/native/string-char8_t.cc
! eb710086077188afe8c298ef512c841a  libstdc++-v3/testsuite/27_io/filesystem/path/native/string.cc
! 6371ba5fc358b85f322d4833001e4aa2  libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/append.cc
! 2d3db4b0d72aabef3c837ba6f52f0d85  libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/cmp.cc
! dec8c79a5bc2399d1595c9f061708800  libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/cmp_c++20.cc
! 2059565a12e2395f1e85979d4154cca5  libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/hash_value.cc
! 7851c3692ca7ff1bb4bff8b71d6f6e53  libstdc++-v3/testsuite/27_io/filesystem/path/query/empty.cc
! 7bcd60b1f9599198af56241824f50086  libstdc++-v3/testsuite/27_io/filesystem/path/query/empty_neg.cc
! 3d55fe07cc6ec8b390ae57c19fce6267  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_extension.cc
! 7bab50c2a578da8953343a0985aab497  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_filename.cc
! ef1ef1c5ac641614a79a8f752486ce34  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_parent_path.cc
! 0266448258aaa60145101b600534428d  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_relative_path.cc
! 7e3d9660fb18abe8cf28c791af268a0b  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_root_directory.cc
! bbae1471508e187f9248ac1ffaf55c26  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_root_name.cc
! d34b3e9912707abab2f982491ca2d751  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_root_path.cc
! e7e8b87fa2a0b6886153691f5dd56437  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_stem.cc
! 0337834f08788d2c9a29a6489f31eeb5  libstdc++-v3/testsuite/27_io/filesystem/path/query/is_absolute.cc
! c870e177fb891a8d95bb3dfbed6f5442  libstdc++-v3/testsuite/27_io/filesystem/path/query/is_relative.cc
! 880495c972b4d1e981767777e3483904  libstdc++-v3/testsuite/27_io/fpos/11450.cc
! 6f3a8e12d7eaa335c90a45ba009837e7  libstdc++-v3/testsuite/27_io/fpos/14252.cc
! 1a8c0730484fd79955669d0af34eeb7a  libstdc++-v3/testsuite/27_io/fpos/14320-1.cc
! c35ae92071f08aaabb88d9f4c852c758  libstdc++-v3/testsuite/27_io/fpos/14320-2.cc
! 83db5f07e64345278f2197b3c09511dd  libstdc++-v3/testsuite/27_io/fpos/14320-3.cc
! 853f148df8812998b2bf06383bb5da7f  libstdc++-v3/testsuite/27_io/fpos/14320-4.cc
! 74de413241769342365140a591555bf6  libstdc++-v3/testsuite/27_io/fpos/14320-5.cc
! 5dc360e0bf1967441eaf39f7caf9c3d6  libstdc++-v3/testsuite/27_io/fpos/14775.cc
! a57fcbc872b0bcb236db14608daa8c1d  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/1.cc
! c45f5c9e05e4807ee9aa7beafe7ae44f  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/12065.cc
! cdf26bf71700620217d193b452804851  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc
! 4bdf84ae39b33c714f2c13c4281c53bf  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc
! 90868ad18d9072907ab05497a6a8478e  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc
! 97e85bccbdb6c070c4ac154fa0b45238  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/5.cc
! 77c3f847eb285685652961605dd3dbdd  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/6.cc
! 7ea956d0e414f47b0d56a062bdb6b2a7  libstdc++-v3/testsuite/27_io/fpos/requirements/explicit_instantiation.cc
! aa0df80e353128c7b357fcbc594a79bd  libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc
! be33d4039cfa2cfc408e08a6a0421ef8  libstdc++-v3/testsuite/27_io/headers/cinttypes/types_std_c++0x.cc
! d3ed8d94f901ed90981053809a1fb678  libstdc++-v3/testsuite/27_io/headers/cstdio/functions_neg.cc
! 15d906a7c23eb746e352385449588545  libstdc++-v3/testsuite/27_io/headers/cstdio/functions_std.cc
! 2703504d9def4ebbf0853b10d40f08ab  libstdc++-v3/testsuite/27_io/headers/cstdio/macros.cc
! 167e4681701d68df2a25a53f90b46e2d  libstdc++-v3/testsuite/27_io/headers/cstdio/types_std.cc
! e8cc4dae77608ff4d667efe0f149fae0  libstdc++-v3/testsuite/27_io/headers/fstream/synopsis.cc
! bcd242b983b4c3e24ba8c01215ae68a3  libstdc++-v3/testsuite/27_io/headers/fstream/types_std.cc
! 2ae48016030e56632af746345c997ef6  libstdc++-v3/testsuite/27_io/headers/iomanip/synopsis.cc
! 24e616854fa5a99df5617964d8127773  libstdc++-v3/testsuite/27_io/headers/ios/synopsis.cc
! ee5b755d9b5f1badd148cdc44ae9b40d  libstdc++-v3/testsuite/27_io/headers/ios/types_std.cc
! cc423714502cc8b1d27d87b1a4f6f5fd  libstdc++-v3/testsuite/27_io/headers/iostream/synopsis.cc
! c00f679d7af39ec3ab7e04d771edb933  libstdc++-v3/testsuite/27_io/headers/iostream/types_std.cc
! c24a982bacd7d5216a5236223a64004b  libstdc++-v3/testsuite/27_io/headers/istream/synopsis.cc
! 68119ecbceaf399d19d0a949a76a899d  libstdc++-v3/testsuite/27_io/headers/istream/types_std.cc
! ea0f2fc59699ad75e9a051310ee63e3a  libstdc++-v3/testsuite/27_io/headers/ostream/synopsis.cc
! a09ff0c90377f134293db3a7f4f35d9e  libstdc++-v3/testsuite/27_io/headers/ostream/types_std.cc
! 4d86de8f28367eb07bd50796e0547397  libstdc++-v3/testsuite/27_io/headers/sstream/synopsis.cc
! aadc5245925c8fc945117ab89c53a664  libstdc++-v3/testsuite/27_io/headers/sstream/types_std.cc
! 30d43f3040c499716d77d1b370268fe5  libstdc++-v3/testsuite/27_io/headers/streambuf/synopsis.cc
! ade4c77fedf15034012cc8ef3c677eb0  libstdc++-v3/testsuite/27_io/headers/streambuf/types_std.cc
! 0e13b2fc2190317709d187b4a209ce66  libstdc++-v3/testsuite/27_io/ios_base/callbacks/1.cc
! f6efd48a63150972c519863161822428  libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
! 8723d83d6f5c9d91bea93af6dad05340  libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
! 6770fc435ea26ecc034945ad7add8b62  libstdc++-v3/testsuite/27_io/ios_base/failure/cons_virtual_derivation.cc
! 29f0108d4fbfc4ff0533974c074580b5  libstdc++-v3/testsuite/27_io/ios_base/failure/cxx11.cc
! 5005fde08f5b1e830d85fd819c40925f  libstdc++-v3/testsuite/27_io/ios_base/failure/dual_abi.cc
! dd958dbc11143c784bc37cc37b28f89c  libstdc++-v3/testsuite/27_io/ios_base/failure/error_code.cc
! ace689561d102e5cbde5cae96998dc33  libstdc++-v3/testsuite/27_io/ios_base/failure/what-1.cc
! 7307eb41a0104bc554a672db975e68f2  libstdc++-v3/testsuite/27_io/ios_base/failure/what-2.cc
! 594acf88d46cd27aef55dc2d4550d2ad  libstdc++-v3/testsuite/27_io/ios_base/failure/what-3.cc
! e8894be7a0ccc6eb27054069f36d38e7  libstdc++-v3/testsuite/27_io/ios_base/failure/what-big.cc
! e0f22e71eea4474db432e906669d6f38  libstdc++-v3/testsuite/27_io/ios_base/state/1.cc
! a651c689a134f0f677a80076efaf8043  libstdc++-v3/testsuite/27_io/ios_base/storage/1.cc
! dfa8136309071ceb1a0d1f11c35a75fb  libstdc++-v3/testsuite/27_io/ios_base/storage/11584.cc
! 7fbd785519273963efc459d23fe9d895  libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc
! 4da7a303a27e7948f6d33211f5dd910f  libstdc++-v3/testsuite/27_io/ios_base/storage/3.cc
! 96a8389786eba9ccf6c8fc6a9eaa7b9d  libstdc++-v3/testsuite/27_io/ios_base/storage/68197.cc
! aa763d9078f5f2e4ef00ad8b844c9822  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc
! 88efd5e0b221575a928f90a70a2d87e5  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/16959.cc
! a727046c14073e16cd96e883de72c39c  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/2.cc
! 9576e25463c4eac78fd3ee08739956dd  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/9523.cc
! 989ce07afafe2cbdd30912eae0f845a4  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/bitmask_operators.cc
! 583487e7900db2d294a9b99327781b46  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/case_label.cc
! 377979e7236d433e26d362bb75e47185  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/constexpr_operators.cc
! 6889b455caa130a1f8a9f887d8095766  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/bitmask_operators.cc
! 4b207cadf284f3471d169abfdd72671b  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/case_label.cc
! 9652e9e48b7d857af91d10e412f91855  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/constexpr_operators.cc
! 05a75160a0a8ef11413a955487fb69e8  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/bitmask_operators.cc
! 07a464fc278e431b2b6ce6f51036d803  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc
! 13093bef94a42d0307c42ef6c177763c  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/constexpr_operators.cc
! 4ab57087740e1454e237f1edf35c9bc3  libstdc++-v3/testsuite/27_io/ios_base/types/seekdir/case_label.cc
! b191e55114a6e6b0fd8d14ad13581829  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/char/1.cc
! ede0df7229151a59aecfd883f756c6e7  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/char/2.cc
! 37fc5d5d09b03b03cc14e294397faf3c  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/wchar_t/1.cc
! 75fcbca9940f5a04a196c935cf808688  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/wchar_t/2.cc
! ec11a1518f97db3befd837c6c0b006fb  libstdc++-v3/testsuite/27_io/manipulators/basefield/char/1.cc
! fd86a03ab21a2bcf20f06b87066627d7  libstdc++-v3/testsuite/27_io/manipulators/basefield/wchar_t/1.cc
! 6cc48c295ddea52b4939d2877f77cd0c  libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/1.cc
! 9194db1d0a3dec2019c74bbb1b49a618  libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/51288.cc
! 5f1bc36b519f3b2e321fbf49868360c9  libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/1.cc
! 92d66fc58baeebd6aab81b9e8060fe4e  libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/51288.cc
! 38564f02723d0956f83cf1e2c2e22f88  libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/char/1.cc
! 019ff37b6c22596cfa5d4175c823b0f0  libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/char/2.cc
! d3fed77e0d7ae8ccf10e8b13485366af  libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/wchar_t/1.cc
! 6e1da77bfe4d4206c337d61c1a4c0efb  libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/wchar_t/2.cc
! 55a9c49c8d0362e0a9bde13ebd95bf20  libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/1.cc
! d70181c89a8f691bcd2b9d7e12567016  libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/51288.cc
! 0e81d96a3b08b59390741e67f94793e8  libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/1.cc
! a9c2b70a4f64be30ae89b93debaf8828  libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/51288.cc
! 02d1a1826912e99d1d5f43f0c9efc878  libstdc++-v3/testsuite/27_io/manipulators/extended/put_time/char/1.cc
! 9622f13341311d8bac3797cecd42e2bb  libstdc++-v3/testsuite/27_io/manipulators/extended/put_time/char/2.cc
! a543c6792a636b881651164a97aa9351  libstdc++-v3/testsuite/27_io/manipulators/extended/put_time/wchar_t/1.cc
! 66d5b98c801b2487844af4f30406d780  libstdc++-v3/testsuite/27_io/manipulators/extended/put_time/wchar_t/2.cc
! 9ac1f2a9084cd60ae6296ede7d25871a  libstdc++-v3/testsuite/27_io/manipulators/standard/char/1.cc
! 36908fe099e3ac0d4d9abdb60d282eb1  libstdc++-v3/testsuite/27_io/manipulators/standard/char/2.cc
! 7eb35f21362288df56d21351e70feace  libstdc++-v3/testsuite/27_io/manipulators/standard/char/60270.cc
! d7c099ef4b24e8c6dd2ed78c37473972  libstdc++-v3/testsuite/27_io/manipulators/standard/char/dr2344.cc
! 0e322f3e3b30a68217812832aea5048f  libstdc++-v3/testsuite/27_io/manipulators/standard/char/quoted.cc
! 0b39fde0e1d139b28906ca445b3cdb65  libstdc++-v3/testsuite/27_io/manipulators/standard/char/quoted_sv.cc
! e912e0fe686f71d46428d0685ed5e54d  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/1.cc
! 451048426f1fe68533aecec7c43af019  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/2.cc
! 29413c0fff6a1af9c09296dc3853981f  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc
! 5298f8b01a7a54dc9c11fa30d2ef3248  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/quoted.cc
! b99ea5579b04885cef3386e2ef6ae57c  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/quoted_sv.cc
! 86afdc68bee7fdb1c8c6b9f431743e56  libstdc++-v3/testsuite/27_io/objects/char/1.cc
! 69622549e51884ba5976e19a54427a47  libstdc++-v3/testsuite/27_io/objects/char/10.cc
! 74b097d3c49b095c7ab529308e3863ac  libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc
! bbb282fafe980ee35bf74f5f09d56945  libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc
! bfe5218ead8462c862f243a61eed542f  libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc
! ba5c5f2ab8da94f5d31e8c14fd00eacb  libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc
! a3293baab345c693a93fc9af5bd35aa1  libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc
! 9155b69e10cef2d9da4038d93eee37c2  libstdc++-v3/testsuite/27_io/objects/char/2.cc
! 55607f3da8ddbce044ce41b788f945bc  libstdc++-v3/testsuite/27_io/objects/char/2523-1_xin.cc
  8c1b578bb2722053c950f2cf943baf83  libstdc++-v3/testsuite/27_io/objects/char/2523-1_xin.in
! 736581b9814d7a09b56392dcf596b892  libstdc++-v3/testsuite/27_io/objects/char/2523-2_xin.cc
  daa7a5fffcba8b5ec5ca1a8de7734416  libstdc++-v3/testsuite/27_io/objects/char/2523-2_xin.in
! 0ab3fd2504f115867e81d5a716e6a9e3  libstdc++-v3/testsuite/27_io/objects/char/3045.cc
! c82c84c60ff8c310c6cdcec0be7a8ac6  libstdc++-v3/testsuite/27_io/objects/char/3647.cc
! 4d158f10995f3175c74871a24f12c3d8  libstdc++-v3/testsuite/27_io/objects/char/3_xin.cc
  b715c45a6677f269807dab0bbcf0ee1d  libstdc++-v3/testsuite/27_io/objects/char/3_xin.in
! 99f47dfec856b01b91d50c0ea87fc8a3  libstdc++-v3/testsuite/27_io/objects/char/41037.cc
! 158fa71ff0cb40d89f6a21bfd3fa5b57  libstdc++-v3/testsuite/27_io/objects/char/4_xin.cc
  68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/testsuite/27_io/objects/char/4_xin.in
! 889c180530520d3b265340507cf9b219  libstdc++-v3/testsuite/27_io/objects/char/5.cc
! 0037b7c90917d2f02daae8f66e393099  libstdc++-v3/testsuite/27_io/objects/char/5268.cc
! 16b9049050a4d7e14dab8c838bfd1c42  libstdc++-v3/testsuite/27_io/objects/char/5280_xin.cc
  81dc9bdb52d04dc20036dbd8313ed055  libstdc++-v3/testsuite/27_io/objects/char/5280_xin.in
! 775c0295e74d52637dd7ce757d591739  libstdc++-v3/testsuite/27_io/objects/char/6.cc
! c9473f0a957752966f5364f1a50f9a68  libstdc++-v3/testsuite/27_io/objects/char/6548_xin.cc
  d8e8fca2dc0f896fd7cb4cb0031ba249  libstdc++-v3/testsuite/27_io/objects/char/6548_xin.in
! fce77b2aa96261ac95a052ed3e7c412c  libstdc++-v3/testsuite/27_io/objects/char/6648-1_xin.cc
  069d0b68d99275bb4412e90bd9d5c966  libstdc++-v3/testsuite/27_io/objects/char/6648-1_xin.in
! 8c97be82dbc3cd389e135cb539d4296f  libstdc++-v3/testsuite/27_io/objects/char/6648-2_xin.cc
  6b76e6feddcc145dc3499d8d123d9da7  libstdc++-v3/testsuite/27_io/objects/char/6648-2_xin.in
! 612450e0ddc8ea4480b49cdb9d4e7bfd  libstdc++-v3/testsuite/27_io/objects/char/7.cc
! 0dd6025f2105a800727aa6aa3a6d85ec  libstdc++-v3/testsuite/27_io/objects/char/7744_xin.cc
  0bee89b07a248e27c83fc3d5951213c1  libstdc++-v3/testsuite/27_io/objects/char/7744_xin.in
! c8e1187544f66355372bc60c335e82e7  libstdc++-v3/testsuite/27_io/objects/char/8.cc
! 700c65a31730f8a7c06a28c8284786ed  libstdc++-v3/testsuite/27_io/objects/char/9.cc
! 83b89a9626037450dce4b7b705b7c103  libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc
! c0ba14e87a9a8fe9321c17d0a4d1a7b5  libstdc++-v3/testsuite/27_io/objects/char/9661-2_xin.cc
  33ab658c3d687d1d73a0e92a596f725e  libstdc++-v3/testsuite/27_io/objects/char/9661-2_xin.in
! 216b1892344e688e28d0296f5dcd8fb3  libstdc++-v3/testsuite/27_io/objects/char/dr455.cc
! cce5e5fb02b37b324fc15b4aa3c78ff2  libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc
! d978a670d7b4cc658209d8d93717f4fd  libstdc++-v3/testsuite/27_io/objects/wchar_t/10.cc
! f7f00e9bfdddf0f569bb3d1dab219503  libstdc++-v3/testsuite/27_io/objects/wchar_t/11.cc
! cc20003b444caae79a044484952eadf5  libstdc++-v3/testsuite/27_io/objects/wchar_t/12.cc
! aca8a2589b4410aa282e9e8bd6f087df  libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-1.cc
! af4b27e30e6d1c250c456d1033287aed  libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-2.cc
! 2ac34302ce0310866d51a0452d64d1ae  libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-3.cc
! fc87c8f195727eff4ab8194073f07d13  libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-4.cc
! da6b267786e5e78fddf9b713c50805e6  libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-5.cc
! dbcc2e1bfef93bcc81cba6c5151c7f04  libstdc++-v3/testsuite/27_io/objects/wchar_t/13.cc
! 68a808f77d86be6e3abb711e5e0a0fe0  libstdc++-v3/testsuite/27_io/objects/wchar_t/13582-1_xin.cc
  d577273ff885c3f84dadb8578bb41399  libstdc++-v3/testsuite/27_io/objects/wchar_t/13582-1_xin.in
! c7e471769ca043382c7bcffe8b673edf  libstdc++-v3/testsuite/27_io/objects/wchar_t/2.cc
! d6424d388fe8e1cb6ec37c05c304b0ac  libstdc++-v3/testsuite/27_io/objects/wchar_t/2523-1_xin.cc
  8c1b578bb2722053c950f2cf943baf83  libstdc++-v3/testsuite/27_io/objects/wchar_t/2523-1_xin.in
! c34d2d3228eb18b116c69ca9ac783250  libstdc++-v3/testsuite/27_io/objects/wchar_t/2523-2_xin.cc
  daa7a5fffcba8b5ec5ca1a8de7734416  libstdc++-v3/testsuite/27_io/objects/wchar_t/2523-2_xin.in
! 6454324c705ddd36df99168825198286  libstdc++-v3/testsuite/27_io/objects/wchar_t/3045.cc
! b588041c7999ac56f2f76ce0f8d807ad  libstdc++-v3/testsuite/27_io/objects/wchar_t/3647.cc
! 65cbcd3de61c2819c56e8b739b39580d  libstdc++-v3/testsuite/27_io/objects/wchar_t/3_xin.cc
  b715c45a6677f269807dab0bbcf0ee1d  libstdc++-v3/testsuite/27_io/objects/wchar_t/3_xin.in
! dfb133a1baacfd90265bcd3a99c6e323  libstdc++-v3/testsuite/27_io/objects/wchar_t/41037.cc
! 4993f8691a364b64ad80fa6c9e0248bf  libstdc++-v3/testsuite/27_io/objects/wchar_t/4_xin.cc
  68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/testsuite/27_io/objects/wchar_t/4_xin.in
! d6ed50d9f2e6aaffd902fb556d325ea7  libstdc++-v3/testsuite/27_io/objects/wchar_t/5.cc
! 417af10e14c1b918e849f643e9049947  libstdc++-v3/testsuite/27_io/objects/wchar_t/5268.cc
! f7262965ccaed00a8ccbf3e08e8c8ae9  libstdc++-v3/testsuite/27_io/objects/wchar_t/5280_xin.cc
  e7df7cd2ca07f4f1ab415d457a6e1c13  libstdc++-v3/testsuite/27_io/objects/wchar_t/5280_xin.in
! f168b9cea481a5b2c1e782a134e4a73a  libstdc++-v3/testsuite/27_io/objects/wchar_t/6.cc
! dd827dfa4beab6f8115192c88dc9097f  libstdc++-v3/testsuite/27_io/objects/wchar_t/6548_xin.cc
  d8e8fca2dc0f896fd7cb4cb0031ba249  libstdc++-v3/testsuite/27_io/objects/wchar_t/6548_xin.in
! 678fb5cf7359f2799acb6e4663fb8e90  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-1_xin.cc
  069d0b68d99275bb4412e90bd9d5c966  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-1_xin.in
! 1734630799ea6ce7946e2982479717dd  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-2_xin.cc
  6b76e6feddcc145dc3499d8d123d9da7  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-2_xin.in
! 1faa132ac19b2887e21526274d25873e  libstdc++-v3/testsuite/27_io/objects/wchar_t/7.cc
! 0c433f5a0f9f09eeaa5b6f47b6504f24  libstdc++-v3/testsuite/27_io/objects/wchar_t/7744_xin.cc
  0bee89b07a248e27c83fc3d5951213c1  libstdc++-v3/testsuite/27_io/objects/wchar_t/7744_xin.in
! 9e4f81ef6c42a542848718705dde4e55  libstdc++-v3/testsuite/27_io/objects/wchar_t/8.cc
! e6e79168d665b8224885f4f977218a07  libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc
! 4854dd6ce5de826cf2d057b4f8155f30  libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc
! 0aa9b02ea6b7c4114b7ce90fe3f5a0d0  libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-2_xin.cc
  33ab658c3d687d1d73a0e92a596f725e  libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-2_xin.in
! f1ac47904cb063280d770ede1e3e158a  libstdc++-v3/testsuite/27_io/objects/wchar_t/9662.cc
! 48bc9b65d207efa2e30f7296cfc2badb  libstdc++-v3/testsuite/27_io/objects/wchar_t/9_xin.cc
  b715c45a6677f269807dab0bbcf0ee1d  libstdc++-v3/testsuite/27_io/objects/wchar_t/9_xin.in
! 804cf6932e98a0243903581f957a324b  libstdc++-v3/testsuite/27_io/objects/wchar_t/dr455.cc
! 92f94dd7e8ed08ad29fdba23e77f7633  libstdc++-v3/testsuite/27_io/rvalue_streams-2.cc
! c207900bdfcdc26c634e1b1eb0da0d97  libstdc++-v3/testsuite/27_io/rvalue_streams.cc
! 906faf2e05db9c0940f5662441b252be  libstdc++-v3/testsuite/27_io/types/1.cc
! 1f329badccf6f7e0f24321ef5064fdca  libstdc++-v3/testsuite/27_io/types/2.cc
! 426d3904a1a61d854723734268b6cb46  libstdc++-v3/testsuite/27_io/types/3.cc
! 2a7b85bb311a2e9f145397215025ba22  libstdc++-v3/testsuite/27_io/types/4.cc
! 27a6c5795bad5310f2b697972606dfa5  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/awk/cstring_01.cc
! 87793863d5523f9b727b0f745d52c16a  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/empty_range.cc
! e23926ff3ce8c8e5f63b0b0607735eb8  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_01.cc
! e48290eaf4730b6dfa0549c871907f51  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_00_03.cc
! 029c52ba7081721d4131a83aedcf864b  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_01_03.cc
! b48adc8a871e717a601f44ed994ad59b  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_02_03.cc
! 67b4bbc7c57e75164e1ca4630f93e03f  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/cstring_bracket_01.cc
! 603ffc3ff7281bd8f987155e80327817  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/dr2329_neg.cc
! ca3caca8ccf3ec184326c1f6110a2267  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/53622.cc
! 1fe83c47f1b08aa5b21645b4d2074273  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/57173.cc
! 90cfec004d65c181d4fff372caae2a3c  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/58576.cc
! 2bb441ae7dec10a189bdeb0d09da48ec  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/61601.cc
! a871d4b650271c21dcb861e123842352  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/68863.cc
! ff4cc42ce4c9a52dae6c458861926a09  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/anymatcher.cc
! 6510038a5e9c290d7bf59df8c7fa89d8  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/backref.cc
! 300b89ba6df2a13d56fb9a68fcf3275b  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/empty_range.cc
! a9e0a9c2e5877bd457c0610f9d0a4a84  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/emptygroup.cc
! a03e6a1ff6de0cda09d9537cc69f07fe  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/hex.cc
! e515abeb08d01499556d865c5cab7372  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc
! 4b05d6837df6bbe00c854428d4d2750b  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/ungreedy.cc
! 083d56c21772f416d3994d95ad9e8813  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/63199.cc
! f39df7cffbfa52a5d2d7bed8b768b83d  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/anymatcher.cc
! 17cadf3ac6a84289ffd5def65921afcc  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/cjk_match.cc
! a6ea373313f0636b266cea64c43a0c0a  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/hex.cc
! 147cc81f2db92d1f4fe4205abd4ba723  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_plus.cc
! 49f4c42333cfa7273a59d3254e1d40fa  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_questionmark.cc
! bff3011e0984d7370871a1c4c17b1744  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_range.cc
! e65813388418098d37bebdd83ad35e0c  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_any.cc
! a36db31d6ed097df55527d05b350dc07  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_00_03.cc
! 47e57eadf06286acd4053960605f2e8b  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_01_03.cc
! f315439939fc2e753fc01261bb617fae  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_02_03.cc
! b9702c5f60fe5a0094493d181372c1d3  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/wstring_locale.cc
! b9ddef6aca02b8171eb8e101802d88a1  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/51711.cc
! 3aba5539e381fd669c20b5df6fe03c80  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/basic_replace.cc
! ffffa6b84498fb75ac805ea386714767  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/dr2213.cc
! f17938aa8611a94c5965d42db91bcc03  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/pr83601.cc
! 4111231c816538fe9827ccb5cc385be9  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc
! 325fa5a55f7d9bcf82b2d4479bf6dfcf  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/wchar_t/pr83601.cc
! b83f7bb76920a69d2c72db2a474739a7  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/61424.cc
! 5f068b08a558f72de8c75d7d488393ae  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/61720.cc
! af4cab4848d07293dfe52fdd72f271c5  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/basic/string_01.cc
! 458daf871c2cf8d0b6a36dcb816afe84  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/dr2332_neg.cc
! d46d20e6ee1fbdfa35e83ebade887c8a  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/assertion.cc
! dceba1f156bfd90a9ac606de1f6f4321  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/flags.cc
! 0a5cfaaa97e508d606ffcd131b67256c  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/greedy.cc
! b4e38cc3b5a9fd64d5ffe9b9bdacbe6c  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/string_01.cc
! 82fbecca0f4aedc8a5a818619bc8bbc9  libstdc++-v3/testsuite/28_regex/basic_regex/85098.cc
! e0db0e1a4e3e3acb57279a005a712a48  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/cstring.cc
! 1af07bb16557f1660c4e11a52a380664  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/cstring_op.cc
! 4c1aba70e80fa4a18bad61859d62ec30  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/lwg3296.cc
! 2d13620909f7f3a24c529ee26ec720e5  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/moveable.cc
! efd2028c9762d2ea264af3600222530c  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/pstring.cc
! 60e0c6d395e9484e3305621573a0cd59  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/range.cc
! d44630e1b57c57648d832647baa3e62d  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/string.cc
! c80a3903527e42fc3636c63e6097124e  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/string_op.cc
! 5cbf3e7bd512cb1977969cbafa1ac532  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/cstring.cc
! 5fa5aa118f92c335e0243b24026b57c9  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/cstring_op.cc
! 5e4929d573c4209033439995b5dbb44d  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/lwg3296.cc
! 5384081ed2fff4ead55e39a7902b630e  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc
! eff4ddf0d5253620431773b4a7e4f3fb  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/range.cc
! e29651e3207ab49acee6c6f611c9c3aa  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/string.cc
! dc6486a338ed92c9d163913f89e9224c  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/string_op.cc
! 6d2bab49c888fd1e37e32fb1c9c877fe  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/47724.cc
! 82c6755c338ef2364d98d59bcefeddea  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/83598.cc
! 99b56078ab65b87abad38cb96cc53ae0  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/cstring.cc
! b9a1e1964145bbd65ccd8a00c6a306a9  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/default.cc
! 790fa5d489f08e4674e6c07e190855f7  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/iter.cc
! 05b7a7a590e963a003f58dcbdf4af7b9  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/pstring_char.cc
! 5c1033abc8dbe8e4752ee390bf731117  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/pstring_wchar_t.cc
! c3d46daa8586e26d358c6bd3674b625d  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/raw_string.cc
! 39c5dfe6fba1bd4aaba8f16389590c99  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/string_range_01_02_03.cc
! 849df45f956ed542f33eed7017f5d9f0  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/cstring.cc
! 1c630814467c45dde1bf606df99714ff  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/cstring_awk.cc
! df74943b49b48855ebc9aafd22769ac7  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/cstring_ecma.cc
! e362b0a0f56c0344de6acc1ea2adf5af  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/cstring_egrep.cc
! 59951f798a5f068ec5775a849c2963a4  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/cstring_grep.cc
! a5821571f17550b3574573f5458d6bd1  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/default.cc
! f45d6c2e9d073e50576f4096d2440cea  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/range.cc
! 6bd64861481a628b37f218551789741a  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/copy_char.cc
! 5c1d7050d71a0b6d741ec5181c84c06c  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/deduction.cc
! 0c50313b4bac3a5fc946d7f8f707db30  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/extended/cstring.cc
! cadc60cd5bc0f9efc2dfacbf9a4b6bb4  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/extended/string_range_01_02_03.cc
! 966067e7fd66c32ecb744b30b39f50d3  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/move_char.cc
! 71733dfea7bf6823b4247e68b8f3f6a2  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/string_char.cc
! adf8fed06001b5040fe0ab2f7bc6984c  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/string_wchar_t.cc
! a489d699a02ce606cab705201fc9cea6  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/wchar_t/cstring.cc
! a5bf1b81e5f8fe9e042114ef05d81ae1  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/wchar_t/default.cc
! d8121337fe298cc10d7199cf94068661  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/wchar_t/range.cc
! 3517a138133596765d5d49792f4c0a2d  libstdc++-v3/testsuite/28_regex/basic_regex/imbue/string.cc
! cb48cc3d864828da741e0c4564538b8b  libstdc++-v3/testsuite/28_regex/basic_regex/multiple_quantifiers.cc
! 8a7d35fb9fad9dc6ad7bd79f6847e2c0  libstdc++-v3/testsuite/28_regex/basic_regex/requirements/constexpr_data.cc
! 254d5e1af6bf061c815002f4e3269417  libstdc++-v3/testsuite/28_regex/constants/constexpr.cc
! 6981a6bdc543403136c772471a9844a6  libstdc++-v3/testsuite/28_regex/constants/error_type.cc
! a08c13a8d5e99007d70c9442632480df  libstdc++-v3/testsuite/28_regex/constants/match_flag_type.cc
! d156ae284beb29c972042a9e8dfedd3b  libstdc++-v3/testsuite/28_regex/constants/syntax_option_type.cc
! 90c4dd5cc08354f59a28035f82d6c07d  libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc
! f4f42f37e997aba9758a33ab6daec54f  libstdc++-v3/testsuite/28_regex/init-list.cc
! 262ce576d205c4863fb2df54604b6918  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/64140.cc
! dd4e567b817332bad9dbbf4a61480d6e  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/string_01.cc
! 3377a4f855b3aa0ce92a2269380f31ec  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/string_position_01.cc
! 686137c83db0493204468a10556e8e70  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/ctors/char/default.cc
! bb0f96b0bbe7f258e71915ee3ba53e45  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/ctors/char/dr2332_neg.cc
! 0e2395713a021c8db83163e3b518bdeb  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/ctors/wchar_t/default.cc
! 0608894f9a460dcc65b250cb47bbe254  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/typedefs.cc
! a456b8460d66510deeff03f155e17fef  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/wchar_t/string_01.cc
! bd2e2c2fd57ac565af6fbc715fed6435  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/wchar_t/string_02.cc
! e781afcc7944ac3bef0bc8812f1b341e  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/64303.cc
! 54799dccf71e2514a81186be287682b6  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/char/string_01.cc
! 1e43db82e9b0eca160a5c5801c393f8e  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/ctors/char/default.cc
! 3a633987f133ccf96c4cea667d56b26c  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/ctors/char/dr2332_neg.cc
! 1dc7ebda237bea76d3bd3fdc2b7f4ea4  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/ctors/wchar_t/default.cc
! 0cc80a403cad8e4e52104e8ccbba1576  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/typedefs.cc
! b57454612a4d974285bb908b705d9083  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/wchar_t/string_01.cc
! 6f1de6694bab4a2d8b193f1f1368d611  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/wchar_t/wstring_02.cc
! 9e61d1e19fd36f31ae0f5ec6a41b0d6a  libstdc++-v3/testsuite/28_regex/match_results/102667.cc
! 406c6e3793a245ef4ac8ce8399728640  libstdc++-v3/testsuite/28_regex/match_results/94627.cc
! 80db37d9a637c75bf0912e558e1b431e  libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
! 90fe7d75e0128796f3b434f31fb53cc6  libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc
! a2e33a5b5c0547c42c2071176860a8cb  libstdc++-v3/testsuite/28_regex/match_results/format.cc
! 5c8e6b3e23027bdb0dbc153ee05be0cc  libstdc++-v3/testsuite/28_regex/match_results/out_of_range_submatches.cc
! 805105ccf2d9dbdc069b0fd7e955fa4c  libstdc++-v3/testsuite/28_regex/match_results/pmr_typedefs.cc
! 837624fb3c40b562dce48d84e686bc34  libstdc++-v3/testsuite/28_regex/match_results/swap.cc
! 9a30984569d68daeb00cd11d252156f4  libstdc++-v3/testsuite/28_regex/match_results/typedefs.cc
! 950f18b09b3e47d85261ea31de5ac57d  libstdc++-v3/testsuite/28_regex/range_access.cc
! 813a556618d54f48be1066daef89e76b  libstdc++-v3/testsuite/28_regex/regex_error/base.cc
! 176665a55bcf492532036261a1acd254  libstdc++-v3/testsuite/28_regex/regex_error/regex_error.cc
! 89c46d0eec1c94ef2840f382f94c97f7  libstdc++-v3/testsuite/28_regex/regression.cc
! 76c0323c9023727331732a91ccf8f5f8  libstdc++-v3/testsuite/28_regex/requirements/typedefs.cc
! 251cefaa0c073810d16fc5cfb1d51cb7  libstdc++-v3/testsuite/28_regex/simple_c++11.cc
! 6271689ccf829656995d335938016b4e  libstdc++-v3/testsuite/28_regex/sub_match/cast_char.cc
! c18aa3e22011fd8be41f09876a8a8af5  libstdc++-v3/testsuite/28_regex/sub_match/cast_wchar_t.cc
! f33750e67a9d164202d48e4a299d2448  libstdc++-v3/testsuite/28_regex/sub_match/compare.cc
! 16cbfa4433455dbf29aaa5d26d32595d  libstdc++-v3/testsuite/28_regex/sub_match/compare_c++20.cc
! d2ecb5bf473732da532891ac2bb0228a  libstdc++-v3/testsuite/28_regex/sub_match/embedded_zeros_cmp.cc
! 209c228c5612ff2876930730954c94f5  libstdc++-v3/testsuite/28_regex/sub_match/length.cc
! e96112ab94f9e037cdaae4f285951a78  libstdc++-v3/testsuite/28_regex/sub_match/typedefs.cc
! 31055959b4d6db7c1bd0d55759a8d921  libstdc++-v3/testsuite/28_regex/traits/char/ctor.cc
! c32264c98d5fdbb5648d9975aba0e76d  libstdc++-v3/testsuite/28_regex/traits/char/icase.cc
! d3b35afc099c8aad742258fdb99a5997  libstdc++-v3/testsuite/28_regex/traits/char/isctype.cc
! b82c0254f8f2ee2c9dae24ee52ebd461  libstdc++-v3/testsuite/28_regex/traits/char/length.cc
! 81ec8acfe077d142b136c53675c96be1  libstdc++-v3/testsuite/28_regex/traits/char/lookup_classname.cc
! e3de5df359507e23ac716dce9f8b526d  libstdc++-v3/testsuite/28_regex/traits/char/lookup_collatename.cc
! cf1a05b383c586dc2c401c5457edd119  libstdc++-v3/testsuite/28_regex/traits/char/transform.cc
! ebfbb349fa2eb616cd49a1f061e2e3fb  libstdc++-v3/testsuite/28_regex/traits/char/transform_primary.cc
! bbeaa0b330dad217e8c7cfc214571736  libstdc++-v3/testsuite/28_regex/traits/char/translate.cc
! 82404210b4a69a90ca644db380e08021  libstdc++-v3/testsuite/28_regex/traits/char/translate_nocase.cc
! 8163a05630bff2f021ea4e70967c86ab  libstdc++-v3/testsuite/28_regex/traits/char/user_defined.cc
! 3ce0b6e3d22d3ccc5d5804dbe0e7765a  libstdc++-v3/testsuite/28_regex/traits/char/value.cc
! 72962db069c1f364bf1829e46489f3d0  libstdc++-v3/testsuite/28_regex/traits/wchar_t/ctor.cc
! e3832d180beb58755727d3914388cc35  libstdc++-v3/testsuite/28_regex/traits/wchar_t/isctype.cc
! cea5ceccfda73bd7ea529886ac6a5884  libstdc++-v3/testsuite/28_regex/traits/wchar_t/length.cc
! a46cef6b194b4ef249b88f0993fe7221  libstdc++-v3/testsuite/28_regex/traits/wchar_t/lookup_classname.cc
! 5a4fb22e4284cc8f90bec6b5f019dfd9  libstdc++-v3/testsuite/28_regex/traits/wchar_t/lookup_collatename.cc
! cb4186f7b4932cc41c265536d46126a3  libstdc++-v3/testsuite/28_regex/traits/wchar_t/transform.cc
! 6879d2e3fcebe9dd807cf9a5eccd0651  libstdc++-v3/testsuite/28_regex/traits/wchar_t/transform_primary.cc
! 4856c3e74091140957dae48656486b82  libstdc++-v3/testsuite/28_regex/traits/wchar_t/translate.cc
! 34a193b87fc5d4fdfcba2b417e4f080c  libstdc++-v3/testsuite/28_regex/traits/wchar_t/translate_nocase.cc
! d8f6c3b4313b60d40aefa39c23fe415c  libstdc++-v3/testsuite/28_regex/traits/wchar_t/user_defined.cc
! de987a4835eeec0557a9e227feb16689  libstdc++-v3/testsuite/28_regex/traits/wchar_t/value.cc
! 8392a5490028e9799172a8a00b9512ad  libstdc++-v3/testsuite/29_atomics/atomic/60658.cc
! 3047feae3b6b56bd206d04c7000defc4  libstdc++-v3/testsuite/29_atomics/atomic/60695.cc
! 07a5ca9cb0dd555b0d6960e193791e9d  libstdc++-v3/testsuite/29_atomics/atomic/62259.cc
! c04757c8b42762e783ec6f67bb314893  libstdc++-v3/testsuite/29_atomics/atomic/64658.cc
! 774785e253c6135b1533bed7cf9053d0  libstdc++-v3/testsuite/29_atomics/atomic/65147.cc
! 20d19cc71a787ba05745c9a15a1f339c  libstdc++-v3/testsuite/29_atomics/atomic/65913.cc
! 3b3620321b82ac71a11fa50772a78ac6  libstdc++-v3/testsuite/29_atomics/atomic/69301.cc
! b1277597712b48ce9bdf81c78c83dd40  libstdc++-v3/testsuite/29_atomics/atomic/69769.cc
! 820f7b794467356a7d8ba9d9f9041e4f  libstdc++-v3/testsuite/29_atomics/atomic/70766.cc
! 175a9b138ad78b553627ccfbe6386c2d  libstdc++-v3/testsuite/29_atomics/atomic/cons/49445.cc
! ff05a4c9a82e47b1893d2ab7b41b7b10  libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
! 91e48eb733f835fd0a644a4b33982852  libstdc++-v3/testsuite/29_atomics/atomic/cons/constexpr.cc
! 3bb440d6a72cb3f79566a10c2a2262c3  libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_list.cc
! a6895903b2d7913e7b2a7aa4d157f098  libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
! 1ddf69470009336d53bf56da545f26b1  libstdc++-v3/testsuite/29_atomics/atomic/cons/default.cc
! b3b3ee14ae71b79bd86c119de204abde  libstdc++-v3/testsuite/29_atomics/atomic/cons/direct_list.cc
! 45c1979f01455edb4abcf95c9ff6c21c  libstdc++-v3/testsuite/29_atomics/atomic/cons/single_value.cc
! ede3d84def5df840542541759477a876  libstdc++-v3/testsuite/29_atomics/atomic/cons/user_pod.cc
! 7be4b872919f03f9d67d9ce5b0379374  libstdc++-v3/testsuite/29_atomics/atomic/cons/value_init.cc
! 101e68f53a1b3b636fb1547c3b320daf  libstdc++-v3/testsuite/29_atomics/atomic/is_always_lock_free.cc
! 47ac1850b97210b2ae79f021d61f689f  libstdc++-v3/testsuite/29_atomics/atomic/nonmembers.cc
! 02e3a139f4e373b95538e5626ecf6ba2  libstdc++-v3/testsuite/29_atomics/atomic/operators/51811.cc
! cb4b41e3959401ed6b34f896071925f9  libstdc++-v3/testsuite/29_atomics/atomic/operators/56011.cc
! ba979953d707da5018ee836824493b32  libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_assignment.cc
! db479c67eca869e548fe48958b2ad4f1  libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_conversion.cc
! ef708bd440b18e01aff76f4dc5e70b03  libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc
! 2a96914c691e2348cf0980c499cc27d7  libstdc++-v3/testsuite/29_atomics/atomic/requirements/base_classes.cc
! 8bea3fc333a1ca3e04259c13dbb50422  libstdc++-v3/testsuite/29_atomics/atomic/requirements/compare_exchange_lowering.cc
! 771fa3515812bd0e48410441cfb5bbfe  libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc
! ce276607d5f33b3abd3e31a43e6dc24e  libstdc++-v3/testsuite/29_atomics/atomic/requirements/typedefs.cc
! e0f3d8128b70041b681f19ec11ab37ca  libstdc++-v3/testsuite/29_atomics/atomic/requirements/types_neg.cc
! 5aa0309b5d914737141c3abbfe367169  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/1.cc
! a3f60ba9129a461104d66a390c41284d  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/100334.cc
! 1bbd36fc668c5a21a5d73bd02a337603  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/102994.cc
! 87c1fa5601addba17bc52f62fa4d7397  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/2.cc
! 6861f8c4291859a3cc0ced46dd171977  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/bool.cc
! 169877172155fcd6f623a352404a6e62  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/generic.cc
! 37343949ee5abf4ebde723da5833422c  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/pointers.cc
! ee4caa61a7e8376bf720b39a3d0af9df  libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
! 8eaa8a7f256a22812a21c5b3972ed399  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc
! 6a018ed93a7744dffa49a6c7a3bc7131  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/56012.cc
! f97c082fdfaea713256eaf09e88cbc5e  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/aggregate.cc
! 62f7c8365fb48361c37421088d403f4c  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/assign_neg.cc
! 7a0b6661373dff35b3bddadd7e504755  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/copy_neg.cc
! 09903f0eb6dd39f975cba0ebd32d57c0  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/default.cc
! 4c8fb3d10cffcaa9312931748f1e1eb0  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/value_init.cc
! f57c8545237b34be34586de3d6bae59d  libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/standard_layout.cc
! dc5f67fd77b0f3b9aa2b2b3f80d02e3d  libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/trivial.cc
! edebfae8d52ad3d4f38eccb1edfe8dde  libstdc++-v3/testsuite/29_atomics/atomic_flag/test/explicit.cc
! 7fe30fbb7f68e1ea4ced380c8b5216e9  libstdc++-v3/testsuite/29_atomics/atomic_flag/test/implicit.cc
! fef3c8d588032f89270c5a40aa7a119f  libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit-hle.cc
! 63a4be6ae0476ff336478c9173e1730e  libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc
! 63a4be6ae0476ff336478c9173e1730e  libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc
! a700626b7e5354bdbc2ed57b70402d3d  libstdc++-v3/testsuite/29_atomics/atomic_flag/wait_notify/1.cc
! 45fdb3095e393b8e18c76282792a374f  libstdc++-v3/testsuite/29_atomics/atomic_float/1.cc
! 3b8bf408367b67adf4db171ae7239402  libstdc++-v3/testsuite/29_atomics/atomic_float/95282.cc
! 955ca2fe3232f00ac0432b334101f316  libstdc++-v3/testsuite/29_atomics/atomic_float/requirements.cc
! d8dccec53f55b08eb9dc59685847fae7  libstdc++-v3/testsuite/29_atomics/atomic_float/value_init.cc
! 650b45c42a6261c704203c4d691ea927  libstdc++-v3/testsuite/29_atomics/atomic_float/wait_notify.cc
! d0205df879aaa9e0880eaa543b48593c  libstdc++-v3/testsuite/29_atomics/atomic_integral/60940.cc
! 7ef98b2543407f43470bc8cd4f9d0eb0  libstdc++-v3/testsuite/29_atomics/atomic_integral/65147.cc
! f40b9332a64fc3b065a0ba05606ff9d1  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
! 14be6526f7225b46e4f1f6ebbcc1666b  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/constexpr.cc
! 6f80b6deeb029311570761358232d41a  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_list.cc
! 29cdb2750d0bc5771cc6af669cb8ad10  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
! 0f9a0afcc1895fdf6507df4681057d9a  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/default.cc
! c90813e39a8601202b16ef7fed13c23c  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/direct_list.cc
! 253463c9bd23de494888dd270f65e308  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/single_value.cc
! 27dab283d2df64c9eb062a977139436e  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/value_init.cc
! 73da782e0b874fbca985f052d2b844d8  libstdc++-v3/testsuite/29_atomics/atomic_integral/is_always_lock_free.cc
! 46d1cb5bce112058a4b120bcbeb170df  libstdc++-v3/testsuite/29_atomics/atomic_integral/nonmembers.cc
! 0050e7c91033ff04952fd9939d7cb8f7  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise.cc
! 763e4523b472c3e24d1419f8cafc9b8b  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
! 0049dabdcd8da79f4c24cdc019e60d0a  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement.cc
! 3e09dc3ad85ef0c77e9f9381db08da28  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
! 9fdb45c3307b38787abe2a059b0c5e6b  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment.cc
! f65817f880cc3699af13dd63799329a8  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
! e68bdc5a4c4e33b7345f7ca8f74b41d6  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/integral_assignment.cc
! 737819d2caf2e41016153af7983ffc8d  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/integral_conversion.cc
! 599465d639b9a338aeac6775cccca212  libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/standard_layout.cc
! 2c2b30a962eacc9d77c811092e3f1e13  libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/trivial.cc
! db07e54bdabacd5225304fc6bf807b54  libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/typedefs.cc
! 2d521aa2602bc3d888108b22b1515053  libstdc++-v3/testsuite/29_atomics/atomic_integral/wait_notify.cc
! 055edfd4b125329629789b321fef6bea  libstdc++-v3/testsuite/29_atomics/atomic_ref/deduction.cc
! 805828ca302abcbb0da52c6b4542db43  libstdc++-v3/testsuite/29_atomics/atomic_ref/float.cc
! 88d7ffa660b1c8062917263d1256c991  libstdc++-v3/testsuite/29_atomics/atomic_ref/generic.cc
! 82170b332fdf2017a2eae95bbb2f9dbe  libstdc++-v3/testsuite/29_atomics/atomic_ref/integral.cc
! 5cf2221c85adc15c9965a6c729a3ff55  libstdc++-v3/testsuite/29_atomics/atomic_ref/pointer.cc
! 701e175b8aa3ae2100a48c8384bd11f1  libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements.cc
! 3cf1e27aeaa6b1f13d28d353d15a6c37  libstdc++-v3/testsuite/29_atomics/atomic_ref/wait_notify.cc
! aa1f06a23500403a7a1ba5db62bc9e1b  libstdc++-v3/testsuite/29_atomics/headers/atomic/functions_std_c++0x.cc
! 65dd1beb8215c9dd5eebe8d3e4609ee9  libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc
! 26843023900e60251c2cf952a3562a6c  libstdc++-v3/testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc
! 98c7e8dcd98b6f397e3a3b1f90b1a15d  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x.cc
! 745d22e87f388e2ec3b2555134362ed8  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc
! 1e07ca6fed386311a2d4b57a95c40d49  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++20.cc
! cc1003e6bf23f4dc3c0b07de7f9de32c  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc
! 4dd53765013d344ab12c16eb49eeeb2e  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++2a.cc
! 0b9554d92746531f6352092073f9eed0  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++2a_neg.cc
! 2d869ecf21ea0185eacacd020b24228f  libstdc++-v3/testsuite/30_threads/async/42819.cc
! 3ea51df4c3cfccc42ff6a9b63ced1be6  libstdc++-v3/testsuite/30_threads/async/49668.cc
! 66d3331119a31123900cabf8cce73578  libstdc++-v3/testsuite/30_threads/async/54297.cc
! a89d46ff113669cfd1f19088d565caf7  libstdc++-v3/testsuite/30_threads/async/69724.cc
! 7f2456f66b07e1ef9fbb2d61d6a9bb0e  libstdc++-v3/testsuite/30_threads/async/84532.cc
! 46f72f28c6b814d2f4fd92194705bc7b  libstdc++-v3/testsuite/30_threads/async/any.cc
! 7fd548d046c16c18d6dda22d926e1471  libstdc++-v3/testsuite/30_threads/async/async.cc
! d4b27f478971972ad8474fef11ce4f48  libstdc++-v3/testsuite/30_threads/async/except.cc
! c6bb85887ceb6c8a984053f261504ab3  libstdc++-v3/testsuite/30_threads/async/forced_unwind.cc
! b5cea98f2a9f764273aa2d1b60b10ba9  libstdc++-v3/testsuite/30_threads/async/launch.cc
! 59c8d0b89ada2f2dd72263141046297d  libstdc++-v3/testsuite/30_threads/async/lwg2021.cc
! 9f675270ae1c337a93f476a4183ce0e6  libstdc++-v3/testsuite/30_threads/async/sync.cc
! 330fb60f9161432bae2a34a61799a930  libstdc++-v3/testsuite/30_threads/barrier/1.cc
! 0050cb5e6a188da702a03420d05c2990  libstdc++-v3/testsuite/30_threads/barrier/2.cc
! 120d0899928744349648c27f3e9e78c5  libstdc++-v3/testsuite/30_threads/barrier/arrive.cc
! 73c48ddc4cc8aac5307ea0e6cc662ee8  libstdc++-v3/testsuite/30_threads/barrier/arrive_and_drop.cc
! d3cfe86230868efec634a29ab8db7dca  libstdc++-v3/testsuite/30_threads/barrier/arrive_and_wait.cc
! f58537b42df4381c366fecf97a640249  libstdc++-v3/testsuite/30_threads/barrier/completion.cc
! 54fa35d0d951cf99290842c679bc3f19  libstdc++-v3/testsuite/30_threads/call_once/39909.cc
! 35eb2c377d3daf0d75f60a451844d990  libstdc++-v3/testsuite/30_threads/call_once/49668.cc
! 2dd5376818090a15b06a6969a643bf10  libstdc++-v3/testsuite/30_threads/call_once/60497.cc
! 0bab9e4f9f72ca74653a705bbea2fc66  libstdc++-v3/testsuite/30_threads/call_once/call_once1.cc
! 92d571ef5514ebe9a0777aa1a0689ee5  libstdc++-v3/testsuite/30_threads/call_once/dr2442.cc
! 9fb3abe4a50f180cba0c4eb7b4d15617  libstdc++-v3/testsuite/30_threads/call_once/once_flag.cc
! f0386e74058bca0b7bc1cbcb1a525353  libstdc++-v3/testsuite/30_threads/condition_variable/54185.cc
! 9ea2777a8b8c5fd3bae272074343ae28  libstdc++-v3/testsuite/30_threads/condition_variable/cons/1.cc
! e1f1a3b425e7a04adcfdd340c8976a12  libstdc++-v3/testsuite/30_threads/condition_variable/cons/assign_neg.cc
! 41c680ee6fd0e7e5c990a7d8a00399aa  libstdc++-v3/testsuite/30_threads/condition_variable/cons/copy_neg.cc
! 344519a5a86296b7b53a82a55d921689  libstdc++-v3/testsuite/30_threads/condition_variable/members/1.cc
! 8b8b9a7e0b6443f77bdc227a125244b5  libstdc++-v3/testsuite/30_threads/condition_variable/members/2.cc
! d6ce7dd1f38f005c85a359cfbba06acb  libstdc++-v3/testsuite/30_threads/condition_variable/members/3.cc
! 3bb430172b28eb59144ec5c2fee37293  libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc
! 921a74b9e18be7f4a87a908c87d30f67  libstdc++-v3/testsuite/30_threads/condition_variable/members/68519.cc
! 60251d0ad0287bd3ca6ff0b8b5fec55c  libstdc++-v3/testsuite/30_threads/condition_variable/members/clock_neg.cc
! 948407b6c5aedb4d146b2a15122887c8  libstdc++-v3/testsuite/30_threads/condition_variable/native_handle/typesizes.cc
! aec2f11d2d80fd5f569e0973996cef7f  libstdc++-v3/testsuite/30_threads/condition_variable/requirements/standard_layout.cc
! f475478ddf192243bec52837ef87be67  libstdc++-v3/testsuite/30_threads/condition_variable/requirements/typedefs.cc
! 27a4824d9373c1b46033e76fccdea6fb  libstdc++-v3/testsuite/30_threads/condition_variable_any/50862.cc
! d3521ac78c5ddf658de288ec210f4987  libstdc++-v3/testsuite/30_threads/condition_variable_any/53830.cc
! 1ad8252d2a74e59252d04785e72ef435  libstdc++-v3/testsuite/30_threads/condition_variable_any/cond.cc
! a123ce97c10e580b25090bacc9ce5677  libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/1.cc
! d09cbe2a62468d30eea0ca467f14de12  libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/assign_neg.cc
! 1393c013fb241023ff945f25e8808724  libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/copy_neg.cc
! cd8fd87be5567d03083606b613e9c07a  libstdc++-v3/testsuite/30_threads/condition_variable_any/members/1.cc
! 2f9d0606f9ebc507efc52dadacfcff6c  libstdc++-v3/testsuite/30_threads/condition_variable_any/members/2.cc
! 4bbc66bdb94cf1ff2d69734c3d4a3b4f  libstdc++-v3/testsuite/30_threads/condition_variable_any/members/clock_neg.cc
! 7e3d80e1dc193949277aba7b175bf753  libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/1.cc
! 90f6703498715aed309efdd1deb2038e  libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/2.cc
! 86b60f110ad98a582760d75c3a02934c  libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/wait_on.cc
! ec2370f25c0b92b36971e7b108e11f50  libstdc++-v3/testsuite/30_threads/future/cons/assign_neg.cc
! 0aae26b65dba5a9e0d1e363b17c94062  libstdc++-v3/testsuite/30_threads/future/cons/constexpr.cc
! 34fb25ccd407192dfcf4c55015d3c30b  libstdc++-v3/testsuite/30_threads/future/cons/copy_neg.cc
! 1920db5bdc8665cced549c8b596e6a4d  libstdc++-v3/testsuite/30_threads/future/cons/default.cc
! f5dff5534ead01d336889bf54f10b745  libstdc++-v3/testsuite/30_threads/future/cons/move.cc
! ed8076a2ba1777c9260da958fcf2db8d  libstdc++-v3/testsuite/30_threads/future/cons/move_assign.cc
! c8675dcdbe47bff423d8d7638ca439b7  libstdc++-v3/testsuite/30_threads/future/members/45133.cc
! 5aa2501d2f0e1395543a82bfcf0df2ba  libstdc++-v3/testsuite/30_threads/future/members/93456.cc
! 3af1b8739052401df1a32ce2a2935c4b  libstdc++-v3/testsuite/30_threads/future/members/clock_neg.cc
! 4cdb081408865da441cf49af8c9411d4  libstdc++-v3/testsuite/30_threads/future/members/get.cc
! a2712fc938e1be225e52ea1925f7fe1f  libstdc++-v3/testsuite/30_threads/future/members/get2.cc
! 6e415321aa308264a679c9e69901707e  libstdc++-v3/testsuite/30_threads/future/members/poll.cc
! 90cf77f209fefdd0ae8cee2b98f29051  libstdc++-v3/testsuite/30_threads/future/members/share.cc
! 6b93a1a6d47c283b3bb72ecfda2cd4fe  libstdc++-v3/testsuite/30_threads/future/members/valid.cc
! 8a0bdc3f72e91542f5a06890cbcf6d6f  libstdc++-v3/testsuite/30_threads/future/members/wait.cc
! fb01e0a8ed4f112ad6f8966bafc6987b  libstdc++-v3/testsuite/30_threads/future/members/wait_for.cc
! b0035c3aa8e72e02498c59a8edd66576  libstdc++-v3/testsuite/30_threads/future/members/wait_until.cc
! 02205833fb3149d930610a6020794076  libstdc++-v3/testsuite/30_threads/future/requirements/explicit_instantiation.cc
! a57e5890b1510f90265a75870f5cfad8  libstdc++-v3/testsuite/30_threads/future/requirements/lwg3458.cc
! fc1342307522d021878ebe4d8e646311  libstdc++-v3/testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc
! bc615b27e79bc26362e845c985454408  libstdc++-v3/testsuite/30_threads/headers/condition_variable/types_std_c++0x.cc
! f461a06417d46c96f28a406cb66bc15d  libstdc++-v3/testsuite/30_threads/headers/future/std_c++0x_neg.cc
! e7ad7693ab2c99f224ae6bafb13976af  libstdc++-v3/testsuite/30_threads/headers/future/types_std_c++0x.cc
! caa0a3f44b7d5382bd73269135d3bdea  libstdc++-v3/testsuite/30_threads/headers/mutex/std_c++0x_neg.cc
! a0c4df9445f31e2d46706d5512ccdc9e  libstdc++-v3/testsuite/30_threads/headers/mutex/types_std_c++0x.cc
! 2c6549f440c169fd98cebc7687976044  libstdc++-v3/testsuite/30_threads/headers/stop_token/synopsis.cc
! 474ce8072581779b1fe9460d6e3228b7  libstdc++-v3/testsuite/30_threads/headers/thread/std_c++0x_neg.cc
! df790c6555e5614b13f5b78410e62206  libstdc++-v3/testsuite/30_threads/headers/thread/types_std_c++0x.cc
! b5545bcc63db6280ef271128d4278f28  libstdc++-v3/testsuite/30_threads/headers/thread/types_std_c++20.cc
! e0ff88b27bd9df1b37b234dc508c1176  libstdc++-v3/testsuite/30_threads/jthread/1.cc
! 09517c25b4e747366e765547dca82531  libstdc++-v3/testsuite/30_threads/jthread/2.cc
! 2162ba96ad194c33b86e75408b55ff78  libstdc++-v3/testsuite/30_threads/jthread/3.cc
! 595e4a07f6f2f38c483aab4ea9ce7725  libstdc++-v3/testsuite/30_threads/jthread/95989.cc
! 3676ca6facedc8206b9562e7c02d2545  libstdc++-v3/testsuite/30_threads/jthread/jthread.cc
! 6014da560f8c212120ff3797e6fc2dc6  libstdc++-v3/testsuite/30_threads/latch/1.cc
! 72050f867f5737207717aac1c18eae40  libstdc++-v3/testsuite/30_threads/latch/2.cc
! a99ee3d1f9d0b8df08b5a6a20c99edf2  libstdc++-v3/testsuite/30_threads/latch/3.cc
! db4f3af5a39d025da0b286224415dc61  libstdc++-v3/testsuite/30_threads/lock/1.cc
! af966288504b651560724301eebe2a8e  libstdc++-v3/testsuite/30_threads/lock/2.cc
! e5ef638b849a375aafa5b20f6b91c770  libstdc++-v3/testsuite/30_threads/lock/3.cc
! 4021207c6041439779de77b6aeb076e3  libstdc++-v3/testsuite/30_threads/lock/4.cc
! 357382ebcc190fd5c8154229cd42c01b  libstdc++-v3/testsuite/30_threads/lock_guard/cons/1.cc
! c2b3defec8b0c651dce440541b4a1ec6  libstdc++-v3/testsuite/30_threads/lock_guard/cons/deduction.cc
! 4046e6f82fec395bab5d3a317baf56dd  libstdc++-v3/testsuite/30_threads/lock_guard/requirements/explicit_instantiation.cc
! 85a146ff3a0a7d5f50832ee01a5bbcd2  libstdc++-v3/testsuite/30_threads/lock_guard/requirements/typedefs.cc
! 147ddf39711f388926b51ff27acfa1c6  libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc
! c96c1f7098293e309ff1cc8f197444c6  libstdc++-v3/testsuite/30_threads/mutex/cons/assign_neg.cc
! 23cdf647238333039606370c8eb6ebf0  libstdc++-v3/testsuite/30_threads/mutex/cons/constexpr.cc
! 880b0a910a7a467e14ca8ca6871318b5  libstdc++-v3/testsuite/30_threads/mutex/cons/copy_neg.cc
! 264985032ff3aed2b15c90db8572a8c8  libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc
! 5a220ccfbc74dbff281f6e98b6536402  libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc
! 21899939ff86277938eabf09dea33f05  libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc
! 389104be6cfbf66fbfbbcc9ca3edb922  libstdc++-v3/testsuite/30_threads/mutex/native_handle/typesizes.cc
! 02584ad55c104f061633d04662511049  libstdc++-v3/testsuite/30_threads/mutex/requirements/standard_layout.cc
! 9e91f84b1e23638b30a4c7831ac6c242  libstdc++-v3/testsuite/30_threads/mutex/requirements/typedefs.cc
! 2b69d0c1d9dc2ec259e947beec383950  libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc
! 68b1f2b0b645d0adf5e9ace20d192d0b  libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc
! 4dd1133b8a3e6975669688ac2e342497  libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc
! 1c1b0d4898ad79ebe169b58049fba13c  libstdc++-v3/testsuite/30_threads/mutex/unlock/2.cc
! 10d0655c2800099349d57b85175c8ea2  libstdc++-v3/testsuite/30_threads/packaged_task/49668.cc
! 6bc80af54b133010698e67dc0198c750  libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc
! 7a51c8347e97573c669ea26bd39ba233  libstdc++-v3/testsuite/30_threads/packaged_task/79486.cc
! 7e70bf868cef061b1de4354ef7482777  libstdc++-v3/testsuite/30_threads/packaged_task/cons/1.cc
! 60a1ef4af6bf972a24bfb5a7c4143a91  libstdc++-v3/testsuite/30_threads/packaged_task/cons/2.cc
! 412ff16745f9e9926b1b746fe69d84af  libstdc++-v3/testsuite/30_threads/packaged_task/cons/3.cc
! 4f428e2b6c88d75e902d906345bb895b  libstdc++-v3/testsuite/30_threads/packaged_task/cons/56492.cc
! e3d5a64c59d8ac294a46db48f478907a  libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc
! 1cc7876bf9f4855dbae9bfcaeb1cc974  libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc2.cc
! c9aede0180240302f0365cdb6f9c3642  libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc_min.cc
! cc50eb6d42ef5dc2dea81fa3c8ee8e91  libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc
! d5fbdab65ffa2863f03ff37984fb2dfb  libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc
! 28c551b37db017eb02bdf1febc5d4feb  libstdc++-v3/testsuite/30_threads/packaged_task/cons/move.cc
! c56981c514cb7ac65fb8b15e6e318b3e  libstdc++-v3/testsuite/30_threads/packaged_task/cons/move_assign.cc
! 51eda418b9ac64743008bbd3fca9dc57  libstdc++-v3/testsuite/30_threads/packaged_task/forced_unwind.cc
! 558002bb124d08df5ff9dafd88cba690  libstdc++-v3/testsuite/30_threads/packaged_task/members/at_thread_exit.cc
! fce6713e5faf65734fa8748f38e5175b  libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future.cc
! 5f6997dd48c77902fcc6148692f8620e  libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future2.cc
! d7b552d1baed04db8378d8c19c09674c  libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke.cc
! 9e118c8774d8999de85f4cd5a284c8d3  libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke2.cc
! 78ef0e85f14b7f33fe5cff75f1982b8a  libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke3.cc
! 3387f674a6e6e5c84758c160415b732f  libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke4.cc
! 023190865f814be6f5ec4727aae93f96  libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke5.cc
! bff042775949c3c99f4accf4d4702c0b  libstdc++-v3/testsuite/30_threads/packaged_task/members/reset.cc
! 0618472a97d2d456f599036e8a88f0fa  libstdc++-v3/testsuite/30_threads/packaged_task/members/reset2.cc
! ff8db859d7ea211f3005b7235d4e4a78  libstdc++-v3/testsuite/30_threads/packaged_task/members/swap.cc
! ef987eaa76e39953cf9500ad51bf5d12  libstdc++-v3/testsuite/30_threads/packaged_task/members/valid.cc
! db1fc70f2639a67415cef52e2a38a9fa  libstdc++-v3/testsuite/30_threads/packaged_task/requirements/explicit_instantiation.cc
! f5a859ec3a6dc85602f171e69bc7e4e8  libstdc++-v3/testsuite/30_threads/packaged_task/uses_allocator.cc
! 3d0003f643dc63de8764b08eea2f1cbe  libstdc++-v3/testsuite/30_threads/promise/60966.cc
! b4eb6d03e85538a9924a13ede8d8781f  libstdc++-v3/testsuite/30_threads/promise/69106.cc
! 60c50a048c2fede9d7200476083d02d1  libstdc++-v3/testsuite/30_threads/promise/cons/1.cc
! 9d79f1d86ffd0d8c9e5a819e5f3dba3f  libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc
! 6cf871ae008b7e4453628f06810812c8  libstdc++-v3/testsuite/30_threads/promise/cons/alloc2.cc
! 05addfe3d84a660c363a7f300a0b1193  libstdc++-v3/testsuite/30_threads/promise/cons/alloc_min.cc
! bbad48c787dddc152c20933db334b24f  libstdc++-v3/testsuite/30_threads/promise/cons/assign_neg.cc
! 045d27b7636a8801abdcdeaf06581343  libstdc++-v3/testsuite/30_threads/promise/cons/copy_neg.cc
! 6272c0cb8bafd2f2f8709f51b20644ec  libstdc++-v3/testsuite/30_threads/promise/cons/move.cc
! cec77978b216f11c6a1b34a10d3313ce  libstdc++-v3/testsuite/30_threads/promise/cons/move_assign.cc
! b2674dea3cbacb3830aeb16506227b38  libstdc++-v3/testsuite/30_threads/promise/members/at_thread_exit.cc
! 365dccaddce0ca3f1926c3362dfef80e  libstdc++-v3/testsuite/30_threads/promise/members/at_thread_exit2.cc
! 99ccbeae4d47d75bafa7615db730f843  libstdc++-v3/testsuite/30_threads/promise/members/get_future.cc
! 72b976bc2c4356bbe1d3c578d4c8497a  libstdc++-v3/testsuite/30_threads/promise/members/get_future2.cc
! c23a4d633ef765da7322dc8bf9adfe81  libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc
! b0f749a73d11688b3eea330805f8215b  libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc
! 9be3896980ebc86a223421fd6233549b  libstdc++-v3/testsuite/30_threads/promise/members/set_value.cc
! 811c3810beeff1fecebc7d41c975540b  libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc
! c2c4ed34d85793372d1222982cfc3e8b  libstdc++-v3/testsuite/30_threads/promise/members/set_value3.cc
! fcb599c6009bcef7fa2343b230a5f5bf  libstdc++-v3/testsuite/30_threads/promise/members/swap.cc
! 1cbe947f83da20bb1cb9e3a0e88b1914  libstdc++-v3/testsuite/30_threads/promise/requirements/explicit_instantiation.cc
! d1c42b5fae0429f02201b0aaef8a6046  libstdc++-v3/testsuite/30_threads/promise/requirements/lwg3466.cc
! d7c17f2ae085f472048e1db863e0a3d7  libstdc++-v3/testsuite/30_threads/promise/uses_allocator.cc
! e89b76f4e0e866475bb8b9d06dd026e9  libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc
! 5dcf9ba25997bf6a071e7da0917f0b1c  libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/assign_neg.cc
! cbd43fac6dfdda119e68fffecfac260d  libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/copy_neg.cc
! f9e5ea2a22993d0f809124ed319a030a  libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc
! f55559a3ea5497cc68296bfcc7106dd5  libstdc++-v3/testsuite/30_threads/recursive_mutex/lock/1.cc
! 39f6eb1a1ffb73fc89f9492e453af94e  libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc
! fa32d7ba6655497c5c4ae8731690ad61  libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc
! 5d81d368888b7449e2e74a517e49b3ad  libstdc++-v3/testsuite/30_threads/recursive_mutex/requirements/standard_layout.cc
! 55cbdb50e5c05796fd10561e390d8907  libstdc++-v3/testsuite/30_threads/recursive_mutex/requirements/typedefs.cc
! e873e4d1dcf3477295ae1d3831a46c0e  libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/1.cc
! 38cfe39bd77185270a0477a60cc2c99f  libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/2.cc
! 825b0714bf9eb53e76a63809dc490cc0  libstdc++-v3/testsuite/30_threads/recursive_mutex/unlock/1.cc
! 6e821fdc4c002320bf426f6e362faade  libstdc++-v3/testsuite/30_threads/recursive_mutex/unlock/2.cc
! 980fb1fc8ae2d89badeffd1cb9d7ec47  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/1.cc
! a31efbf2bbdedd5c72c293a754b7b3d7  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc
! 3e7b70cb96e11ecfb07656a3407e82b4  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc
! a665a91d5937ecc8824ad4c4bad9280e  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc
! a2cb91aa66c5d8d6a3bffd41fd4f652b  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/1.cc
! 7cd23a9d09f7e6bffa40c6c163606a0b  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/2.cc
! e08ddfc1475936c28e88f01f05763944  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc
! 3d421d3c5c89fbc7333d5385ad59f54b  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc
! 356e9e974066784752769813bdf59c31  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/requirements/typedefs.cc
! d2875490c412f2da4b85e0dc91cf4e62  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc
! 93c373d8297affe52bb85817201f909b  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc
! ad11eae6ba0bf1357fadb4853f5efd5e  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc
! 0362665728273d89e59fecd69e3678e5  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc
! 2c0740b4e2d56a4f91764ab1f3cf08b1  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc
! d2875490c412f2da4b85e0dc91cf4e62  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc
! 8c5d3afe868924984671c2b782522107  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc
! ca4720ef01605ade5fecb07d2fd958e8  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/3.cc
! 9de9c6cd54a025ef6e00a75cb2072a97  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/clock_neg.cc
! 37c0dbc999dbeb73b3af69d1c49a58fb  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/unlock/1.cc
! f354005c5041a727787cc472054497f3  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/unlock/2.cc
! bd5d2277ebea670944ae9474cdb803bd  libstdc++-v3/testsuite/30_threads/scoped_lock/cons/1.cc
! 3f47442173eed8d986ab7dd7d9894fc9  libstdc++-v3/testsuite/30_threads/scoped_lock/cons/deduction.cc
! feb61047cf487fff5ce1c42486b1c4e1  libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/explicit_instantiation.cc
! 8d5233bf5ee551d05ddd2288c6021d4a  libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc
! e1e345ef8ee0dbb75badba3b3a1e5838  libstdc++-v3/testsuite/30_threads/semaphore/1.cc
  aa7e8d9c8ac0cac38e0e7e2928bb61b6  libstdc++-v3/testsuite/30_threads/semaphore/100806.cc
! b0d8a422821f56bc3b01bffcedab1ba6  libstdc++-v3/testsuite/30_threads/semaphore/2.cc
! 38eaaefe55716613bb8c037bd4d34653  libstdc++-v3/testsuite/30_threads/semaphore/least_max_value_neg.cc
! 7ef1affcfee69d908db4141b6a837bbe  libstdc++-v3/testsuite/30_threads/semaphore/try_acquire.cc
! 836a04348ecf466570e51d20686d02c2  libstdc++-v3/testsuite/30_threads/semaphore/try_acquire_for.cc
! 3de9971eaf96687e388db718494cc42e  libstdc++-v3/testsuite/30_threads/semaphore/try_acquire_posix.cc
! f7db5dcf8f4b4f720686ecbb8c528d5b  libstdc++-v3/testsuite/30_threads/semaphore/try_acquire_until.cc
! b6fee1b6252fa92506353be907ab406f  libstdc++-v3/testsuite/30_threads/shared_future/cons/assign.cc
! d391e802d1f81fac67953bdc9a427ae2  libstdc++-v3/testsuite/30_threads/shared_future/cons/constexpr.cc
! fddbce53bff6e1c42ebd98f78ec24c27  libstdc++-v3/testsuite/30_threads/shared_future/cons/copy.cc
! dd0fd8809d84a14a2b33c458e5fee683  libstdc++-v3/testsuite/30_threads/shared_future/cons/default.cc
! 9d379d8a1efefbe113f43c5cc68d31b4  libstdc++-v3/testsuite/30_threads/shared_future/cons/move.cc
! adac0982e89c6a08b23771abb4cdee1e  libstdc++-v3/testsuite/30_threads/shared_future/cons/move_assign.cc
! 6b5a0ca32aa946373784176c31a70a9f  libstdc++-v3/testsuite/30_threads/shared_future/members/45133.cc
! f91f3c7f5210d356cfe17314ed31a331  libstdc++-v3/testsuite/30_threads/shared_future/members/clock_neg.cc
! e8a90bd57f12e8066e43f81333116d26  libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc
! e4b6817951c8fa47f096c2ded43fea92  libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc
! 3f3fa9cdf115150b5d4b6a4d9f30f92a  libstdc++-v3/testsuite/30_threads/shared_future/members/valid.cc
! 4325f4318a36e838432b6262ed4c42bb  libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc
! da42a0da9f4778604c32077cd52cf6f8  libstdc++-v3/testsuite/30_threads/shared_future/members/wait_for.cc
! 7a96994052ef5b19b70b7e4f87f9d8ab  libstdc++-v3/testsuite/30_threads/shared_future/members/wait_until.cc
! afb59eb0ea06f27d506c264ecd3179d3  libstdc++-v3/testsuite/30_threads/shared_future/requirements/explicit_instantiation.cc
! 18e1d2983167ecb40989d51da8a11121  libstdc++-v3/testsuite/30_threads/shared_future/requirements/lwg3458.cc
! 809568add7d00bb9aab9a5429d078127  libstdc++-v3/testsuite/30_threads/shared_lock/70766.cc
! 85d521b9a5fef1f150b2759afc645019  libstdc++-v3/testsuite/30_threads/shared_lock/cons/1.cc
! be86d57343644006816c7d999d918fd7  libstdc++-v3/testsuite/30_threads/shared_lock/cons/2.cc
! 1ff60d8e6140e36fd8cc4cc6eddb30b8  libstdc++-v3/testsuite/30_threads/shared_lock/cons/3.cc
! 3ab107b1c63237e635491f61d7ad2fb1  libstdc++-v3/testsuite/30_threads/shared_lock/cons/4.cc
! b3eec799be49107d427afc03bfcb1534  libstdc++-v3/testsuite/30_threads/shared_lock/cons/5.cc
! 85f96195b972f0ddc18117ede233ab28  libstdc++-v3/testsuite/30_threads/shared_lock/cons/6.cc
! 95a22755bb8296d4a9cb200952115971  libstdc++-v3/testsuite/30_threads/shared_lock/locking/1.cc
! b3e3bc8750f50df7da52f7e770d70a2d  libstdc++-v3/testsuite/30_threads/shared_lock/locking/2.cc
! b8bef1acf2dbe3a553f7801403a76e87  libstdc++-v3/testsuite/30_threads/shared_lock/locking/3.cc
! b740da8152b91351511302670929ee25  libstdc++-v3/testsuite/30_threads/shared_lock/locking/4.cc
! 7ab43f461e0920ffab052da48215a87b  libstdc++-v3/testsuite/30_threads/shared_lock/locking/clock_neg.cc
! a51b3a9a9f8c4055fb06776896b0fdae  libstdc++-v3/testsuite/30_threads/shared_lock/modifiers/1.cc
! a7951924532272702c16334a660ecf86  libstdc++-v3/testsuite/30_threads/shared_lock/requirements/explicit_instantiation.cc
! 331727d6dde0772b6a9b47eb641d2b07  libstdc++-v3/testsuite/30_threads/shared_lock/requirements/typedefs.cc
! a173eb68a90f96eac90eae6eb3be6e55  libstdc++-v3/testsuite/30_threads/shared_mutex/cons/1.cc
! a1d2f36aeb1d8c82c46349fa1c1e306e  libstdc++-v3/testsuite/30_threads/shared_mutex/cons/assign_neg.cc
! 81eb55d0aee6ae6c5283881f5adbc50b  libstdc++-v3/testsuite/30_threads/shared_mutex/cons/copy_neg.cc
! b8200b9c6d26ca5d0dd6f21d877f871a  libstdc++-v3/testsuite/30_threads/shared_mutex/requirements/standard_layout.cc
! 27f55867622ddaed0ecdb54e2d99e1cc  libstdc++-v3/testsuite/30_threads/shared_mutex/try_lock/1.cc
! 7c0a6d64bb4471a6c9afdcf73358e157  libstdc++-v3/testsuite/30_threads/shared_mutex/try_lock/2.cc
! 640e3b65dc47efb98035810a2d5620f6  libstdc++-v3/testsuite/30_threads/shared_mutex/unlock/1.cc
! 6b6c320c195a67a38fa78626d85ed4e4  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/94069.cc
! 2c502fb045327d75d7210a9da03b999f  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/cons/1.cc
! 80f842e02972de6c0a25038d90f51277  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/cons/assign_neg.cc
! 1b3ca6c9df54fc9fba9050b638d7cfc9  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/cons/copy_neg.cc
! 2b51572bea661b1de44d75b9396096ef  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/requirements/standard_layout.cc
! 0f31161a86317084bd6851afe09e4f0a  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock/1.cc
! d5b3c30517b8a1b42e5ac008f173c3d4  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock/2.cc
! e0a515194c4674364474cc30689700df  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock/3.cc
! 2dac52a87faadddda19f429f2422eb2b  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock_until/1.cc
! 0dd750ac1f4467c00296e09a04abf8a0  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock_until/2.cc
! b0d5c16424ae92339daa83ba894a8b84  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock_until/clock_neg.cc
! cec079e01aeb96af42a0a5ffc86fdf89  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/unlock/1.cc
! e37810835b436d0d2189c85e68fa7420  libstdc++-v3/testsuite/30_threads/stop_token/1.cc
! 90f6703498715aed309efdd1deb2038e  libstdc++-v3/testsuite/30_threads/stop_token/2.cc
! 12ae7867b6cb796e2bd0bde077de5449  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback.cc
! 392e5d89ae2528adc6a5ae37d56bb5c1  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback/deadlock-mt.cc
! 1f1c92c70dd5eb6b5c6222d7e3871cb5  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback/deadlock.cc
! 93a1ece309b2bcb683d0772bf3066a4f  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback/destroy.cc
! da6399ffd7c583fedd8aa142b3c3b6d3  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback/destructible_neg.cc
! 6f890223eca99c441e1cb0746afa9db6  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback/invocable_neg.cc
! 3a07054493c89b956908d9b50194f314  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback/invoke.cc
! b607c88a513c271a60499e4357d066f5  libstdc++-v3/testsuite/30_threads/stop_token/stop_source.cc
! 40dcd4a9cc933342dace69dffbabb3d6  libstdc++-v3/testsuite/30_threads/stop_token/stop_source/assign.cc
! a201d97248354a77efd110e688722c89  libstdc++-v3/testsuite/30_threads/stop_token/stop_token.cc
! 8536c2b7579f85278a88f21d86bf5a99  libstdc++-v3/testsuite/30_threads/stop_token/stop_token/stop_possible.cc
! 9312f7ac04962ce9d93561234eab0b1a  libstdc++-v3/testsuite/30_threads/this_thread/1.cc
! f2148ba8da566f15e08e5ade2695b01e  libstdc++-v3/testsuite/30_threads/this_thread/57060.cc
! dfe91faf82812b1de2b8e68122780b56  libstdc++-v3/testsuite/30_threads/this_thread/58038.cc
! 7c1b425426b124f1a7f635a906f0a8e9  libstdc++-v3/testsuite/30_threads/this_thread/60421.cc
! 1024cc87189b4a9e59f24d1fbea1f8bd  libstdc++-v3/testsuite/30_threads/this_thread/95989.cc
! 6d1c7bd616b291afd6ab0bc8ac7bccf1  libstdc++-v3/testsuite/30_threads/this_thread/sleep_for-mt.cc
! 9185b7798d94810dcfd7c22b90c079e3  libstdc++-v3/testsuite/30_threads/this_thread/sleep_for.cc
! 20c5fe5c87220e29d0c83c65537066d5  libstdc++-v3/testsuite/30_threads/this_thread/sleep_until-mt.cc
! 8922c40e0f88b50ae642cf610cad5fac  libstdc++-v3/testsuite/30_threads/this_thread/sleep_until.cc
! 18d644acadc3b71fa6b3f7fffd26f272  libstdc++-v3/testsuite/30_threads/this_thread/yield.cc
! f51fe4810d0958a58eba10dd8751f263  libstdc++-v3/testsuite/30_threads/thread/70503.cc
! 343a2e5db5d85100ad7e19722057e55b  libstdc++-v3/testsuite/30_threads/thread/84532.cc
! a3ad5b01386b626105129aa34109ef1d  libstdc++-v3/testsuite/30_threads/thread/adl.cc
! c1272ed18bddf397fc909390aa905c76  libstdc++-v3/testsuite/30_threads/thread/cons/1.cc
! 5e32fa3b7f9c88369790bfc0a4278d5c  libstdc++-v3/testsuite/30_threads/thread/cons/2.cc
! f57235e7f6b360edb671f564f6cf678d  libstdc++-v3/testsuite/30_threads/thread/cons/3.cc
! 184dcc92569179caac57dccd7139ecc4  libstdc++-v3/testsuite/30_threads/thread/cons/4.cc
! 24feb8adcc51ab3425412cac5f28710b  libstdc++-v3/testsuite/30_threads/thread/cons/49668.cc
! 983c04445d5d6408dc10386b99cf1a3b  libstdc++-v3/testsuite/30_threads/thread/cons/5.cc
! 9de6d5953a97bf608a903d7bbdd13255  libstdc++-v3/testsuite/30_threads/thread/cons/6.cc
! 240c8b57e45e5bce27d8cb8044167bb9  libstdc++-v3/testsuite/30_threads/thread/cons/69724.cc
! d4c755a53530cbf8e677e0d2cd444245  libstdc++-v3/testsuite/30_threads/thread/cons/7.cc
! 44849215a98b1cc1772a4901b65268ce  libstdc++-v3/testsuite/30_threads/thread/cons/8.cc
! d168a5d1d9fcedd7ca31bfe4471bdcc6  libstdc++-v3/testsuite/30_threads/thread/cons/84535.cc
! 30ddc71744e51f72a392861c606ef096  libstdc++-v3/testsuite/30_threads/thread/cons/9.cc
! f12932159ec3e0f89758cd4f44321105  libstdc++-v3/testsuite/30_threads/thread/cons/assign_neg.cc
! 15ae0c769fd5b7f890736e52e30df99d  libstdc++-v3/testsuite/30_threads/thread/cons/copy_neg.cc
! be5293239295379728a14f260639488a  libstdc++-v3/testsuite/30_threads/thread/cons/lwg2097.cc
! 91adfc5791d663e0a4aab5fe767c4dde  libstdc++-v3/testsuite/30_threads/thread/cons/moveable.cc
! 1da8f4c63697e94a50242441210119e8  libstdc++-v3/testsuite/30_threads/thread/cons/terminate.cc
! be13982a3dd9cd39d0a5bae36175b024  libstdc++-v3/testsuite/30_threads/thread/id/70294.cc
! 056ae5c40ac09ac823c3e2d6d56d810d  libstdc++-v3/testsuite/30_threads/thread/id/hash.cc
! 6bb551503f9a0600bc942e1a4ee4cb23  libstdc++-v3/testsuite/30_threads/thread/id/operators.cc
! ead960966995a912e5c106524db6757a  libstdc++-v3/testsuite/30_threads/thread/id/operators_c++20.cc
! 546cc72251cca2e0ff5f5d243d3ab8a2  libstdc++-v3/testsuite/30_threads/thread/members/1.cc
! 7a8de73547709a68444c1380922b8709  libstdc++-v3/testsuite/30_threads/thread/members/2.cc
! 2b8082eb4d41a7a1c39365c1337ccdca  libstdc++-v3/testsuite/30_threads/thread/members/3.cc
! fbfc11e519094b287efe66a2187cea1f  libstdc++-v3/testsuite/30_threads/thread/members/4.cc
! 4e02b94309bb46dd15baca6fd9c71181  libstdc++-v3/testsuite/30_threads/thread/members/5.cc
! 4aebb104a4ab60b34c54971f1b895520  libstdc++-v3/testsuite/30_threads/thread/members/hardware_concurrency.cc
! 2c8a95690001246804a4e204be5e1bb8  libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc
! 1df1949a00af4701c9fa9c9b1a274fc8  libstdc++-v3/testsuite/30_threads/thread/native_handle/typesizes.cc
! 9dcc58d6d3e3113a991337dfe875e663  libstdc++-v3/testsuite/30_threads/thread/swap/1.cc
! 6928bfdbec35462a8e299d607268a7f8  libstdc++-v3/testsuite/30_threads/timed_mutex/cons/1.cc
! d40919de25579970b1ce24b26ef09eda  libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc
! 3817e07f7fdb955517896f09483d46a9  libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc
! efc126493dc9404c8cfd441ffd62457f  libstdc++-v3/testsuite/30_threads/timed_mutex/dest/destructor_locked.cc
! 853d9ab354611bfe9cffad5140dfb0a2  libstdc++-v3/testsuite/30_threads/timed_mutex/lock/1.cc
! 924b95b043f30590469c2b5b3f47124a  libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/1.cc
! 88c2732f1ff32f4fdb6d1fca7f253ed8  libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/typesizes.cc
! decb30f74d8f84e35469c35b6b1239e7  libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/standard_layout.cc
! 2a54cdce9bc91984cc1c1830dc0c6606  libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/typedefs.cc
! 464b2e4d2dcef5d8f54f4187c18af020  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/1.cc
! e2bb6f2cbcbddcb9cdb73a153a7e2753  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/2.cc
! eae7fb3a730587744a2a3287e0966cb0  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/1.cc
! 411d60ff6ec30bc8d2f9121e006c9ade  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/2.cc
! 2e8662826954bbccdfec474697f03e14  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/3.cc
! 464b2e4d2dcef5d8f54f4187c18af020  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/1.cc
! e2bb6f2cbcbddcb9cdb73a153a7e2753  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/2.cc
! 3acd3e65b59d1223dd3f92bc3586a16d  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/3.cc
! dba4ca3608322fc50b68a06630238d6b  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/4.cc
! 605c381f41c4657e547c68653b8563d3  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/57641.cc
! 4ec0347001aec69a18754de52efea431  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/clock_neg.cc
! 9ea8d6ee6e37db7563491cea2115f553  libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/1.cc
! 01a37d94f551420ea20f571dc73e05b9  libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/2.cc
! 553383dd4ea8dc05a07f9f2d2fcd62a0  libstdc++-v3/testsuite/30_threads/try_lock/1.cc
! c37c977429e14a718917ba05e6564de6  libstdc++-v3/testsuite/30_threads/try_lock/2.cc
! a6c8e0b48d45eef757ea87faec9de20c  libstdc++-v3/testsuite/30_threads/try_lock/3.cc
! 2dee4c7e3615c3f5de9d9dcfc286d08a  libstdc++-v3/testsuite/30_threads/try_lock/4.cc
! 651d67e5021fc97a576c5c29da195e11  libstdc++-v3/testsuite/30_threads/unique_lock/cons/1.cc
! 1c0123c869bcdc5119b9b6da48d414b2  libstdc++-v3/testsuite/30_threads/unique_lock/cons/2.cc
! e4b90f38b23be4e9d062d61fefc4a204  libstdc++-v3/testsuite/30_threads/unique_lock/cons/3.cc
! cc048b8d3e4792682ac4f68158b530a9  libstdc++-v3/testsuite/30_threads/unique_lock/cons/4.cc
! 175220ef2d2256975b5c46faaa662857  libstdc++-v3/testsuite/30_threads/unique_lock/cons/5.cc
! da747fca724fc57666a35add38e75594  libstdc++-v3/testsuite/30_threads/unique_lock/cons/6.cc
! 226bd4188f0b3fb1f38e8ed85f8869bd  libstdc++-v3/testsuite/30_threads/unique_lock/cons/60497.cc
! 73f05fb92d7778269aa887645df1309e  libstdc++-v3/testsuite/30_threads/unique_lock/cons/deduction.cc
! 9b8f2d37d8343fe95f86f883ed78b594  libstdc++-v3/testsuite/30_threads/unique_lock/locking/1.cc
! a6f3cf8d5367354cddd04db31a60296b  libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc
! a60f446a0f4597f35e481c3c5c5a142d  libstdc++-v3/testsuite/30_threads/unique_lock/locking/3.cc
! 6a5328ebf770efdf17aee2fa806735a8  libstdc++-v3/testsuite/30_threads/unique_lock/locking/4.cc
! 3ebe308deaea0e815df91ac2cd26affb  libstdc++-v3/testsuite/30_threads/unique_lock/locking/clock_neg.cc
! 511ee3015ec03df220771117077e9105  libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc
! 655ab2b56a1e0b0ba833dea4e1762c5b  libstdc++-v3/testsuite/30_threads/unique_lock/requirements/explicit_instantiation.cc
! 55c871a26f021533dbe0e966ad551d71  libstdc++-v3/testsuite/30_threads/unique_lock/requirements/typedefs.cc
! 3f99a3b0c92f031be7b4c1737d70728b  libstdc++-v3/testsuite/Makefile.am
! f3925e19d78cb581de7d6b60fecac7df  libstdc++-v3/testsuite/Makefile.in
! f39001cf8ea2b634da1b9350c09d9b72  libstdc++-v3/testsuite/abi/30586.cc
! 9ee6ff4de72f917289fc16b4d339d626  libstdc++-v3/testsuite/abi/cxx_runtime_only_linkage.cc
! 03081354776d529d3f91798dc4a26ebc  libstdc++-v3/testsuite/abi/demangle/abi_examples/01.cc
! 41004f5cb23f5a7a15d686cbfe59fcd0  libstdc++-v3/testsuite/abi/demangle/abi_examples/02.cc
! ef2a0933c9c4d368064bcd77b0264ec7  libstdc++-v3/testsuite/abi/demangle/abi_examples/03.cc
! 2f6b0095c6264a639b2eddf1a0fd01cb  libstdc++-v3/testsuite/abi/demangle/abi_examples/04.cc
! f789d7eaa7ee17e85a52f3bdbfa3550e  libstdc++-v3/testsuite/abi/demangle/abi_examples/05.cc
! 53dc1514ea3df905901916c4b87567c3  libstdc++-v3/testsuite/abi/demangle/abi_examples/06.cc
! 01ffe2b1696e9cfeedb75f111b72d7cc  libstdc++-v3/testsuite/abi/demangle/abi_examples/07.cc
! fdde23c4543b832b48549c0c9b5045eb  libstdc++-v3/testsuite/abi/demangle/abi_examples/08.cc
! 27b001b239cd98ab3a3d3068539f389d  libstdc++-v3/testsuite/abi/demangle/abi_examples/09.cc
! 5ab93e43993a770d4a8f87748b7b61d0  libstdc++-v3/testsuite/abi/demangle/abi_examples/10.cc
! c1bb0470aa24d8a55befc91f258d001a  libstdc++-v3/testsuite/abi/demangle/abi_examples/11.cc
! c0e433a7667c441390cdf3cea7dae604  libstdc++-v3/testsuite/abi/demangle/abi_examples/12.cc
! 558c7ffc0359bcf12020a83cc9f2e8cd  libstdc++-v3/testsuite/abi/demangle/abi_examples/13.cc
! 8019c974bf5144156e686310c4651e19  libstdc++-v3/testsuite/abi/demangle/abi_examples/14.cc
! 5ced014c8d4daed625d64d072a179de6  libstdc++-v3/testsuite/abi/demangle/abi_examples/15.cc
! 172b679ad4e2012d3ba49f9219697615  libstdc++-v3/testsuite/abi/demangle/abi_examples/16.cc
! 99ee07b8fc7b8a7d2627f605df5ad84e  libstdc++-v3/testsuite/abi/demangle/abi_examples/17.cc
! ac69b66317f21c1283c70ac6dba3e859  libstdc++-v3/testsuite/abi/demangle/abi_examples/18.cc
! 88954dc4349790b29cfaf15390670e71  libstdc++-v3/testsuite/abi/demangle/abi_examples/19.cc
! f80a73d2ad6f2d26df5417500267789f  libstdc++-v3/testsuite/abi/demangle/abi_examples/20.cc
! be34d75caec01aa992d668bc5c2e537c  libstdc++-v3/testsuite/abi/demangle/abi_examples/21.cc
! be34d75caec01aa992d668bc5c2e537c  libstdc++-v3/testsuite/abi/demangle/abi_examples/22.cc
! e3d583182d077ebed2bdbf4128f94a6d  libstdc++-v3/testsuite/abi/demangle/abi_examples/23.cc
! 1fbae9462577f2e20dd5e84e30dc3992  libstdc++-v3/testsuite/abi/demangle/abi_examples/24.cc
! d2fa0c50b3499fac2637a51fda2927fc  libstdc++-v3/testsuite/abi/demangle/abi_examples/25.cc
! 6deb1f471bbd394c5735d74e5a29d3d9  libstdc++-v3/testsuite/abi/demangle/abi_examples/26.cc
! 64bee34a40b8eb107778b9a91869cd7d  libstdc++-v3/testsuite/abi/demangle/abi_text/01.cc
! 816a2c752e41d4f1e00aea3935333e6e  libstdc++-v3/testsuite/abi/demangle/abi_text/02.cc
! 4841acd866689e16017f86ff186ac7e4  libstdc++-v3/testsuite/abi/demangle/abi_text/03.cc
! 5d345cabf574662e36561ce7684ac202  libstdc++-v3/testsuite/abi/demangle/abi_text/04.cc
! 6ad4833bbc2c85990962a84914ef00af  libstdc++-v3/testsuite/abi/demangle/abi_text/05.cc
! d65f7859f08e13aec560ad8fb9bf37d3  libstdc++-v3/testsuite/abi/demangle/abi_text/06.cc
! e84860ac17015c7e2078a168a81bde64  libstdc++-v3/testsuite/abi/demangle/abi_text/07.cc
! b80cd3a39942c5c5570a0db45ef80801  libstdc++-v3/testsuite/abi/demangle/abi_text/08.cc
! 47fa54dbfe0b04d2321dcff66bb6acd7  libstdc++-v3/testsuite/abi/demangle/abi_text/09.cc
! e6cc365c4b9af85a762ff6ed93262378  libstdc++-v3/testsuite/abi/demangle/abi_text/10.cc
! e5a76731ec0f48bc70c9cab5b6a5511a  libstdc++-v3/testsuite/abi/demangle/abi_text/11.cc
! 0eb5fbfc7f7ce2af406b439b914d14a5  libstdc++-v3/testsuite/abi/demangle/abi_text/12.cc
! f709bf3990d12268dcce24420227f802  libstdc++-v3/testsuite/abi/demangle/abi_text/13.cc
! db2212fe39852f8aa899a45b2ba07cb7  libstdc++-v3/testsuite/abi/demangle/abi_text/14.cc
! f70469b457cdc53d9b034497f1036dda  libstdc++-v3/testsuite/abi/demangle/cxx0x/rref.cc
! 96deb334cf3a6c93e98618f66b78cbb3  libstdc++-v3/testsuite/abi/demangle/regression/3111-1.cc
! f86cff84adbb33ea5e1f4960fc6a188c  libstdc++-v3/testsuite/abi/demangle/regression/3111-2.cc
! af6367b4b12e1f1ddf6d9c4d344fa64f  libstdc++-v3/testsuite/abi/demangle/regression/7986-01.cc
! d2f45d6380a11f4e4a56a8702f8cf70d  libstdc++-v3/testsuite/abi/demangle/regression/7986-02.cc
! 7762856bc629e6cedb0b746c19c500b3  libstdc++-v3/testsuite/abi/demangle/regression/7986-03.cc
! e08f5c7e04fc966a06607c8dccc731bd  libstdc++-v3/testsuite/abi/demangle/regression/7986-04.cc
! 21cfccda704b2a7480349470bf95e30c  libstdc++-v3/testsuite/abi/demangle/regression/7986-05.cc
! 42e82c03ac481401de1753ee567c5e5c  libstdc++-v3/testsuite/abi/demangle/regression/7986-06.cc
! 3067af5ada464a873bc6bcaeb84d66dc  libstdc++-v3/testsuite/abi/demangle/regression/7986-07.cc
! c15d864af337b32775032d9cb4ab0164  libstdc++-v3/testsuite/abi/demangle/regression/7986-08.cc
! b72910f87f6efea2b4dfe0ec543372a0  libstdc++-v3/testsuite/abi/demangle/regression/7986-09.cc
! 7e2c5e16633c26040becd80bba887240  libstdc++-v3/testsuite/abi/demangle/regression/7986-10.cc
! e88ee3076953e530b60c5700800129b0  libstdc++-v3/testsuite/abi/demangle/regression/7986-11.cc
! 65320d2b477fd2916ff42c618d693ce5  libstdc++-v3/testsuite/abi/demangle/regression/7986-12.cc
! f16da2302a49402aa5ca770058684825  libstdc++-v3/testsuite/abi/demangle/regression/7986.cc
! 1fb94c50826a53a3f452f8db4eee46ca  libstdc++-v3/testsuite/abi/demangle/regression/8897.cc
! bfab2e4839ced445ad2f36b5d137baac  libstdc++-v3/testsuite/abi/demangle/regression/cw-01.cc
! 27f655a490d6a96184ff4213d5372300  libstdc++-v3/testsuite/abi/demangle/regression/cw-02.cc
! d65d688cce53ca1cc0fabfbbd1fe354f  libstdc++-v3/testsuite/abi/demangle/regression/cw-03.cc
! b082e2b6654dcb5057dbd060d241433a  libstdc++-v3/testsuite/abi/demangle/regression/cw-04.cc
! 0e6337cb1da4968f2e0c80cda35b2096  libstdc++-v3/testsuite/abi/demangle/regression/cw-05.cc
! b0f89daac10098931b6a07e0fd2a15f2  libstdc++-v3/testsuite/abi/demangle/regression/cw-06.cc
! 3ff014678fdb80cd8a31dcb945652e4b  libstdc++-v3/testsuite/abi/demangle/regression/cw-07.cc
! 8ee4a91db497d6be4cdacfecd49e6c35  libstdc++-v3/testsuite/abi/demangle/regression/cw-08.cc
! 2ba511dc5d9c3dd65893bd586a903444  libstdc++-v3/testsuite/abi/demangle/regression/cw-09.cc
! 077e6440541818c15f899c7b591a5c14  libstdc++-v3/testsuite/abi/demangle/regression/cw-10.cc
! 938caf95d730b4e29e8cb1d621e79ebf  libstdc++-v3/testsuite/abi/demangle/regression/cw-11.cc
! cafb0596dcf76e108d4dfc17be217566  libstdc++-v3/testsuite/abi/demangle/regression/cw-12.cc
! 770db7f2432e0e42276454d3887614d4  libstdc++-v3/testsuite/abi/demangle/regression/cw-13.cc
! 153aa14cdc2da5c09e61e002fbb71353  libstdc++-v3/testsuite/abi/demangle/regression/cw-14.cc
! 665405aaadc9e30671679b8fe1f112ad  libstdc++-v3/testsuite/abi/demangle/regression/cw-15.cc
! 9841c3098271b478754ace905dcd7bc4  libstdc++-v3/testsuite/abi/demangle/regression/cw-16.cc
! 4184dd54b3856ce0a51c6db95656364e  libstdc++-v3/testsuite/abi/demangle/regression/old.cc
! b947484dbf3114c414361aaab6834320  libstdc++-v3/testsuite/abi/header_cxxabi.c
  ab0a5ca4ddac86490afd9342d4868589  libstdc++-v3/testsuite/abi/pr42230.cc
! f6f80c7b57aeb2501a8beb801566e15d  libstdc++-v3/testsuite/backward/11460.cc
! 30047aa93eccf2689e921ba76026aa6a  libstdc++-v3/testsuite/backward/hash_map/1.cc
! b6b41877e4ae60a822f4ee7331ebbcf7  libstdc++-v3/testsuite/backward/hash_map/14648.cc
! 906e7d462b46fa5b324bff4b95618f32  libstdc++-v3/testsuite/backward/hash_map/23528.cc
! 39a4eed4fc90eaa81e12ed4c1a262eae  libstdc++-v3/testsuite/backward/hash_map/25896.cc
! d77fcdacb0b0556d6a98fb60eeaf94ba  libstdc++-v3/testsuite/backward/hash_map/requirements/explicit_instantiation.cc
! cb4b9ae29a26854ff3ffb0f96ed6ed38  libstdc++-v3/testsuite/backward/hash_set/1.cc
! 9e3efbcc6a9dd30f2b536842dceaa638  libstdc++-v3/testsuite/backward/hash_set/25896.cc
  2c091597008357e678007f407f299a24  libstdc++-v3/testsuite/backward/hash_set/49060.cc
! 78754749a29dda56a56998b38d8edb13  libstdc++-v3/testsuite/backward/hash_set/check_construct_destroy.cc
! f2e66da0efbe57e3fafd3cc4a3fd962c  libstdc++-v3/testsuite/backward/hash_set/requirements/explicit_instantiation.cc
! 156f4ef7a51ee2dae0fffb4149d0202d  libstdc++-v3/testsuite/backward/strstream_members.cc
! 99f079fafcb565023c93181f025bc9d2  libstdc++-v3/testsuite/backward/strstream_move.cc
! e8ba4a29c286781e62254ac7fa472f39  libstdc++-v3/testsuite/config/default.exp
  e7df7cd2ca07f4f1ab415d457a6e1c13  libstdc++-v3/testsuite/data/cin_unget-1.txt
  d41d8cd98f00b204e9800998ecf8427e  libstdc++-v3/testsuite/data/filebuf_members-1.tst
  d41d8cd98f00b204e9800998ecf8427e  libstdc++-v3/testsuite/data/filebuf_members-1.txt
--- 110989,113549 ----
  e2baf706b6b8f858b41c7d0a9e5b08a9  libstdc++-v3/testsuite/25_algorithms/pstl/alg_sorting/partial_sort_copy.cc
  8af38b36f1e40e204ae2c21c405731a9  libstdc++-v3/testsuite/25_algorithms/pstl/alg_sorting/set.cc
  f0ac087e7a77dd84d45a6199d1b9a455  libstdc++-v3/testsuite/25_algorithms/pstl/alg_sorting/sort.cc
! 4c98d907db869747ace508e3249aa14a  libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-2.cc
! 16dc26c58f13df49b17afab4612e716a  libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-3.cc
! c8be0946566e983a0236d229704a1523  libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-4.cc
! be60fe758d82386ccaa966aafc76bb06  libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-5.cc
! 437c38c10b675bb24c5d9174bb9ffafd  libstdc++-v3/testsuite/25_algorithms/pstl/feature_test.cc
! 3eaecc84fa74fda7681ac9d5fa60ab80  libstdc++-v3/testsuite/25_algorithms/push_heap/complexity.cc
! 16ce09da94a728b6a6598b781fc5aa07  libstdc++-v3/testsuite/25_algorithms/push_heap/constexpr.cc
! 6c5db64e22a6d556f551d03092eafaa8  libstdc++-v3/testsuite/25_algorithms/push_heap/requirements/explicit_instantiation/2.cc
! 7b69dcdc35a76d124f79a50e8d897f18  libstdc++-v3/testsuite/25_algorithms/push_heap/requirements/explicit_instantiation/pod.cc
! e17f187a7d22403b9e51acc5d6560948  libstdc++-v3/testsuite/25_algorithms/random_shuffle/1.cc
! 95389f17583382590872e839f615c669  libstdc++-v3/testsuite/25_algorithms/random_shuffle/59603.cc
! 68eb66dda45ef787caf505cc37897414  libstdc++-v3/testsuite/25_algorithms/random_shuffle/moveable.cc
! 457bbbfb3a832042d307ad45f3813698  libstdc++-v3/testsuite/25_algorithms/random_shuffle/requirements/explicit_instantiation/2.cc
! e15292ccec7214c4903cf1450cb593ab  libstdc++-v3/testsuite/25_algorithms/random_shuffle/requirements/explicit_instantiation/pod.cc
! ae8319d0e7b82102015821d7b3ab7bb9  libstdc++-v3/testsuite/25_algorithms/remove/1.cc
! 855e2af98eeafa2e6aba7d41466bd8b2  libstdc++-v3/testsuite/25_algorithms/remove/check_type.cc
! d03a9a33e08aeacdc3a9840a5e7b2442  libstdc++-v3/testsuite/25_algorithms/remove/constexpr.cc
! 7e8b67fd687769fc12c8c768e48be6eb  libstdc++-v3/testsuite/25_algorithms/remove/constrained.cc
! 31fef993d0ae80cf1075438cf7f7b3ab  libstdc++-v3/testsuite/25_algorithms/remove/moveable.cc
! 2273c10c1834a03c489cace4c0d40702  libstdc++-v3/testsuite/25_algorithms/remove/requirements/explicit_instantiation/2.cc
! 799573ee63f643e193c0aee32dca55b1  libstdc++-v3/testsuite/25_algorithms/remove/requirements/explicit_instantiation/pod.cc
! 26b23a6228c61e17d1c8109c7de1a73f  libstdc++-v3/testsuite/25_algorithms/remove_copy/constexpr.cc
! c7ca33eb711e54ab80a88772e476327d  libstdc++-v3/testsuite/25_algorithms/remove_copy/constrained.cc
! 960db6ef31e8425bfbe9125633d77013  libstdc++-v3/testsuite/25_algorithms/remove_copy/requirements/explicit_instantiation/2.cc
! 22005e59a25504587b9bc00c57db2f74  libstdc++-v3/testsuite/25_algorithms/remove_copy/requirements/explicit_instantiation/pod.cc
! 37451a837e38200093816c8378bfd88a  libstdc++-v3/testsuite/25_algorithms/remove_copy_if/check_type.cc
! a0d7830d5297850b1468470c4dce2ed0  libstdc++-v3/testsuite/25_algorithms/remove_copy_if/constexpr.cc
! 6343db4bc30c416c8b4c2807f9aa970d  libstdc++-v3/testsuite/25_algorithms/remove_copy_if/constrained.cc
! ae8b07e1e8b37edb60f89852ec3cac2b  libstdc++-v3/testsuite/25_algorithms/remove_copy_if/requirements/explicit_instantiation/2.cc
! 22e8d84ec3926253c2b937271eba87fb  libstdc++-v3/testsuite/25_algorithms/remove_copy_if/requirements/explicit_instantiation/pod.cc
! 186744c79e2e473156fa29b9ff2d1ffa  libstdc++-v3/testsuite/25_algorithms/remove_if/1.cc
! d1739f12b365bceed63a82ef1eacbbaf  libstdc++-v3/testsuite/25_algorithms/remove_if/check_type.cc
! 358b2d573ee390e751b2252a4847ac9f  libstdc++-v3/testsuite/25_algorithms/remove_if/constexpr.cc
! e650c1bd99ec954d9e947acafc6656f5  libstdc++-v3/testsuite/25_algorithms/remove_if/constrained.cc
! 43256d0b0f4d01bd6c12bb30f92a5aa4  libstdc++-v3/testsuite/25_algorithms/remove_if/moveable.cc
! 986fec6a24d6f5560886efd788ed03ea  libstdc++-v3/testsuite/25_algorithms/remove_if/requirements/explicit_instantiation/2.cc
! 971560ef4f4483f2b0f54f1e7838b962  libstdc++-v3/testsuite/25_algorithms/remove_if/requirements/explicit_instantiation/pod.cc
! f849b55fa71445cd6887837b16a77afa  libstdc++-v3/testsuite/25_algorithms/replace/1.cc
! 6769e5eb30539783a1f3a18788dc558a  libstdc++-v3/testsuite/25_algorithms/replace/check_type.cc
! e5607202c18824b8a0526b2f99850138  libstdc++-v3/testsuite/25_algorithms/replace/constrained.cc
! 6287e50678cd6fe1d7f8e5b01eaa426b  libstdc++-v3/testsuite/25_algorithms/replace/requirements/explicit_instantiation/2.cc
! 9d05e2210225f57501be310ceec851dd  libstdc++-v3/testsuite/25_algorithms/replace/requirements/explicit_instantiation/pod.cc
! 7295f94a8cf734d98c39b19fd781a511  libstdc++-v3/testsuite/25_algorithms/replace_copy/1.cc
! c98324ec7c80ebdff381d476e63d5634  libstdc++-v3/testsuite/25_algorithms/replace_copy/check_type.cc
! 091f8c7fe4668007241f54aefd3e9a5d  libstdc++-v3/testsuite/25_algorithms/replace_copy/constexpr.cc
! ab528fb56c89f5a1b15564c2858607ea  libstdc++-v3/testsuite/25_algorithms/replace_copy/constrained.cc
! 843f4fb80b9ca6db1c41d191d0d6e4bd  libstdc++-v3/testsuite/25_algorithms/replace_copy/requirements/explicit_instantiation/2.cc
! 6f440ec581ec99dcec6c109f156fb29d  libstdc++-v3/testsuite/25_algorithms/replace_copy/requirements/explicit_instantiation/pod.cc
! ee0449f86ffe8b1f8bd5e8c31fa0cbd0  libstdc++-v3/testsuite/25_algorithms/replace_copy_if/1.cc
! f0f3aa6469bbc612f8d8d492fae23ea6  libstdc++-v3/testsuite/25_algorithms/replace_copy_if/check_type.cc
! bcfff11a08133684267bbe092929be0b  libstdc++-v3/testsuite/25_algorithms/replace_copy_if/constexpr.cc
! cc516084e2bbd1b283faa26184c44c92  libstdc++-v3/testsuite/25_algorithms/replace_copy_if/constrained.cc
! c8b36e56da7434be0f770b1dce995944  libstdc++-v3/testsuite/25_algorithms/replace_copy_if/requirements/explicit_instantiation/2.cc
! 57ee5885020aaf5020208782a05cbe5b  libstdc++-v3/testsuite/25_algorithms/replace_copy_if/requirements/explicit_instantiation/pod.cc
! aea9ade262fe804c456b3afc0259790a  libstdc++-v3/testsuite/25_algorithms/replace_if/1.cc
! a2aca85817193b0b02e6de86a807593d  libstdc++-v3/testsuite/25_algorithms/replace_if/check_type.cc
! 3aa2abb753acebd66320bab444939440  libstdc++-v3/testsuite/25_algorithms/replace_if/constexpr.cc
! 8bfe1ba58f19e48e83cdbaa06adc21f7  libstdc++-v3/testsuite/25_algorithms/replace_if/constrained.cc
! 73ef936f37d0b4f13e7d6b75f29f235b  libstdc++-v3/testsuite/25_algorithms/replace_if/requirements/explicit_instantiation/2.cc
! 8977bce78d80b88ac5b4ecb71e2aecd4  libstdc++-v3/testsuite/25_algorithms/replace_if/requirements/explicit_instantiation/pod.cc
  36f40bd4fda4eb8bb7b8c7178baddcb8  libstdc++-v3/testsuite/25_algorithms/reverse/constexpr.cc
! 94a81650bee5b243080a8b98d2e11e1e  libstdc++-v3/testsuite/25_algorithms/reverse/constrained.cc
! ab33202768fd6f2ab69613203f9a0ca7  libstdc++-v3/testsuite/25_algorithms/reverse/moveable.cc
! 89641cdab3d47245b85a2027081b5c0f  libstdc++-v3/testsuite/25_algorithms/reverse/requirements/explicit_instantiation/2.cc
! bb339d8466f5dac3b83e6689fd236b04  libstdc++-v3/testsuite/25_algorithms/reverse/requirements/explicit_instantiation/pod.cc
! 61c1bea18ff33d8294b457ac3adc3923  libstdc++-v3/testsuite/25_algorithms/reverse_copy/constexpr.cc
! 92e9c3e3367a9e6111915a9bf0e3e8c5  libstdc++-v3/testsuite/25_algorithms/reverse_copy/constrained.cc
! dc6fe18d401ff3bbb30502b948e213c4  libstdc++-v3/testsuite/25_algorithms/reverse_copy/explicit_instantiation/2.cc
! 8576c4db92f8d5367bf37a4e39b26721  libstdc++-v3/testsuite/25_algorithms/reverse_copy/explicit_instantiation/pod.cc
! af3bc354dccee8f2681bd9865e162008  libstdc++-v3/testsuite/25_algorithms/rotate/1.cc
! 47054952e142b5b82bfddfefb4f1c5c3  libstdc++-v3/testsuite/25_algorithms/rotate/90920.cc
! 4bccfbd5015fe8d9f792e0ddd015d078  libstdc++-v3/testsuite/25_algorithms/rotate/check_type.cc
  6e81a6e87bcee591a45269b5ef7edde0  libstdc++-v3/testsuite/25_algorithms/rotate/constexpr.cc
! 8d50780e6d19883a6958516a7bf2f0f0  libstdc++-v3/testsuite/25_algorithms/rotate/constrained.cc
! f88f381dcbe2ef09c89e025a24ab331b  libstdc++-v3/testsuite/25_algorithms/rotate/dr488.cc
! 7bf0b1b4eb9555c805b1a99e9cba0361  libstdc++-v3/testsuite/25_algorithms/rotate/moveable.cc
! a1d9792a11a1085021d0309dd530c562  libstdc++-v3/testsuite/25_algorithms/rotate/moveable2.cc
! 5121d18003f6ba2274684928f58bc295  libstdc++-v3/testsuite/25_algorithms/rotate/requirements/explicit_instantiation/2.cc
! eb261529973b0098c13cae0f7d88ce4a  libstdc++-v3/testsuite/25_algorithms/rotate/requirements/explicit_instantiation/pod.cc
! d96475bafc14929133ef20b894c942ef  libstdc++-v3/testsuite/25_algorithms/rotate/rotate.cc
! bf3d0fef2c5ccbddfc79a709b9d4dbe1  libstdc++-v3/testsuite/25_algorithms/rotate_copy/constexpr.cc
! 5e12b37d61cc0caf1a8e7cb338c0cb24  libstdc++-v3/testsuite/25_algorithms/rotate_copy/constrained.cc
! 7a4e9d93c8e6f0e22852382527715c86  libstdc++-v3/testsuite/25_algorithms/rotate_copy/requirements/explicit_instantiation/2.cc
! 0d2ac97cdc9c7291c5d4c8f25ce079ea  libstdc++-v3/testsuite/25_algorithms/rotate_copy/requirements/explicit_instantiation/pod.cc
! c287e04a147bc96f6455816bca2f1937  libstdc++-v3/testsuite/25_algorithms/sample/1.cc
! 79b9836193ff6671c78740b16b6974d6  libstdc++-v3/testsuite/25_algorithms/sample/2.cc
! 7bac2155f5eff701907ae632557e24c7  libstdc++-v3/testsuite/25_algorithms/sample/3.cc
! d9f3cf509d1ab20e284b8e41d429a62c  libstdc++-v3/testsuite/25_algorithms/sample/81221.cc
! f2f28d97bf1f5e654b619c0ccf64bf6e  libstdc++-v3/testsuite/25_algorithms/sample/constrained.cc
! 13a75b97ef710d30c1c16fc75a525164  libstdc++-v3/testsuite/25_algorithms/search/1.cc
! 96b32a8a5655a1c430b08d7de3b47cfa  libstdc++-v3/testsuite/25_algorithms/search/78346.cc
! 00b6a89b1f33a886518d3c4c5e73b9db  libstdc++-v3/testsuite/25_algorithms/search/check_type.cc
! 983512c01033f2b6f5cfaa7aa1d67ef5  libstdc++-v3/testsuite/25_algorithms/search/constexpr.cc
! ce98f109a2d711276200d89ef9a4e249  libstdc++-v3/testsuite/25_algorithms/search/constrained.cc
! 65698f0df96c603b020b79098b7fb9f0  libstdc++-v3/testsuite/25_algorithms/search/requirements/explicit_instantiation/2.cc
! 5c23badb26eb781d0ff8894cb83e88fa  libstdc++-v3/testsuite/25_algorithms/search/requirements/explicit_instantiation/pod.cc
! 58bc38bfdbf2ae5038450f312a783cf2  libstdc++-v3/testsuite/25_algorithms/search/searcher.cc
! e181a1497392826e519c55f351e04891  libstdc++-v3/testsuite/25_algorithms/search_n/11400.cc
! 04835f032f77cd9c855361aafb55a537  libstdc++-v3/testsuite/25_algorithms/search_n/58358.cc
! cd25dc0c7d1671458502fd6eeec0d0d5  libstdc++-v3/testsuite/25_algorithms/search_n/97828.cc
! 787ac590b6d82c91a5d3148e5fb849ec  libstdc++-v3/testsuite/25_algorithms/search_n/check_type.cc
! 8d77f5b267ceed85eb833aeedf6b87af  libstdc++-v3/testsuite/25_algorithms/search_n/constexpr.cc
! 2752a51c8a77c8828398a0c4ff165ec2  libstdc++-v3/testsuite/25_algorithms/search_n/constrained.cc
! 1ca7c4ff26ec62be51b1b048e0bc055e  libstdc++-v3/testsuite/25_algorithms/search_n/iterator.cc
! b59078b17120279105c0c21e5fa1770b  libstdc++-v3/testsuite/25_algorithms/search_n/requirements/explicit_instantiation/2.cc
! 6816e0877b18fabeebeebfef3505e886  libstdc++-v3/testsuite/25_algorithms/search_n/requirements/explicit_instantiation/pod.cc
! 431085ae88699f4f426b0845ce13934f  libstdc++-v3/testsuite/25_algorithms/set_difference/1.cc
! bdca662a9cf9a3b9804d7640fb45beb2  libstdc++-v3/testsuite/25_algorithms/set_difference/35541.cc
! 827e1beccee39269aedcbbc34a967a84  libstdc++-v3/testsuite/25_algorithms/set_difference/check_type.cc
! c3fd3713de04f459ee16120859882ce1  libstdc++-v3/testsuite/25_algorithms/set_difference/constexpr.cc
! dfad33995987f753d42f29a8b69bde14  libstdc++-v3/testsuite/25_algorithms/set_difference/constrained.cc
! 97a30d18ed9f4bb08821df3c725c4600  libstdc++-v3/testsuite/25_algorithms/set_difference/requirements/explicit_instantiation/2.cc
! 44eab1e42d83a08014ff50f94633e799  libstdc++-v3/testsuite/25_algorithms/set_difference/requirements/explicit_instantiation/pod.cc
! 4650275b408fb5dbddf9fd4f060bc2b6  libstdc++-v3/testsuite/25_algorithms/set_intersection/1.cc
! ffb04478770e1b03c93e91fcd6f9cc26  libstdc++-v3/testsuite/25_algorithms/set_intersection/34730.cc
! d4832c2d52dfbd22c6f3c5953faf5101  libstdc++-v3/testsuite/25_algorithms/set_intersection/check_type.cc
! c85e44413cd0a58467697e67bd9fffff  libstdc++-v3/testsuite/25_algorithms/set_intersection/constexpr.cc
! 98af89bf2e471034f2e1ca0d4708b66c  libstdc++-v3/testsuite/25_algorithms/set_intersection/constrained.cc
! 37598011f13383e733c7a30cf806f78d  libstdc++-v3/testsuite/25_algorithms/set_intersection/requirements/explicit_instantiation/2.cc
! bdca4cde5250e136ebf40f249521b360  libstdc++-v3/testsuite/25_algorithms/set_intersection/requirements/explicit_instantiation/pod.cc
! 605ae0dfc0cb9bf310bc8fa656b61b00  libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/1.cc
! f709cbe0db8909622af547339e03be31  libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/check_type.cc
! 59bb12a3c90fcf6a69e4d610879f6823  libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/constexpr.cc
! 719b2d529b3e3b5017789740199e4ddf  libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/constrained.cc
! 6b5ced96da1736a8b41ea60a392ea0d4  libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/requirements/explicit_instantiation/2.cc
! d320de99a307e04a4692611ce4e62bd3  libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/requirements/explicit_instantiation/pod.cc
! 753640ab9852c5f0954e10442ea388be  libstdc++-v3/testsuite/25_algorithms/set_union/1.cc
! 2eaa11193a691a3e9e46b61abc05ca29  libstdc++-v3/testsuite/25_algorithms/set_union/check_type.cc
! 9c8a5e4418dbc4b0b82f3dcf498d9384  libstdc++-v3/testsuite/25_algorithms/set_union/constexpr.cc
! b369c75bfc313dd46ecbf7012a84b9a5  libstdc++-v3/testsuite/25_algorithms/set_union/constrained.cc
! 44a5b5832723c19e207496da09f3ac0c  libstdc++-v3/testsuite/25_algorithms/set_union/requirements/explicit_instantiation/2.cc
! 11c04554dbe1ecbd9008fec5ad31f6cf  libstdc++-v3/testsuite/25_algorithms/set_union/requirements/explicit_instantiation/pod.cc
! 63e567d29addc2eea535750f51dcfeed  libstdc++-v3/testsuite/25_algorithms/shift_left/1.cc
! 7edfcebc514fa09cdb7ff24fe1e8ef21  libstdc++-v3/testsuite/25_algorithms/shift_right/1.cc
! 3dced834074b53159a37c1fc67cfbfef  libstdc++-v3/testsuite/25_algorithms/shuffle/1.cc
! 09a165472d7a6616851dbaefb87e88dc  libstdc++-v3/testsuite/25_algorithms/shuffle/constrained.cc
! 77cce96e1f29be3ecb148d35fa836e28  libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/2.cc
! 1273bcad4f7c8f78183b37c25976b91c  libstdc++-v3/testsuite/25_algorithms/shuffle/requirements/explicit_instantiation/pod.cc
! 489056a2543a47cefb03b23eb39507c4  libstdc++-v3/testsuite/25_algorithms/sort/1.cc
! 522aa222f7ec7088529793b2995d9e45  libstdc++-v3/testsuite/25_algorithms/sort/34095.cc
! 04710fcf83cb01edd6c1292ae0a7aab6  libstdc++-v3/testsuite/25_algorithms/sort/34636.cc
! b266ff3fbd0c06dd642e19507c0f3610  libstdc++-v3/testsuite/25_algorithms/sort/35588.cc
! 392a1b4ee77b8d75792152818ef41f6e  libstdc++-v3/testsuite/25_algorithms/sort/78991.cc
! e0b622c2b13c5ab4f69522e477e67b61  libstdc++-v3/testsuite/25_algorithms/sort/check_compare_by_value.cc
! c50b0329fed84585d65fbfff137074db  libstdc++-v3/testsuite/25_algorithms/sort/constexpr.cc
! 7b36035abdab3d972ba94a3d0a6d8bcc  libstdc++-v3/testsuite/25_algorithms/sort/constrained.cc
! 7590fb5812d8440966242ece4784c7dc  libstdc++-v3/testsuite/25_algorithms/sort/moveable.cc
! 7ddcb97c490f585f5e9a95b6165e6994  libstdc++-v3/testsuite/25_algorithms/sort/random_test.cc
! 4bc8250f999e612df23a73bd5914ffc5  libstdc++-v3/testsuite/25_algorithms/sort/requirements/explicit_instantiation/2.cc
! 1c61a0f8460c714ea216d31f216f7235  libstdc++-v3/testsuite/25_algorithms/sort/requirements/explicit_instantiation/pod.cc
! 2f26d24550c219b9a148c1fdb178c500  libstdc++-v3/testsuite/25_algorithms/sort/vectorbool.cc
! 4341946dbe5b33766f74dd637c42cfd3  libstdc++-v3/testsuite/25_algorithms/sort_heap/check_compare_by_value.cc
! 1c161bee79318a8a8390ab9940126f9b  libstdc++-v3/testsuite/25_algorithms/sort_heap/complexity.cc
! fe3c586739762fad3021d5973da79f89  libstdc++-v3/testsuite/25_algorithms/sort_heap/constexpr.cc
! 8c81ddd13e87d3e62402ad10502164e8  libstdc++-v3/testsuite/25_algorithms/sort_heap/requirements/explicit_instantiation/2.cc
! 8cc77d78b4137b09ada1ac6f1dcd2d45  libstdc++-v3/testsuite/25_algorithms/sort_heap/requirements/explicit_instantiation/pod.cc
! 734989569cf41cec587aa1c5c885c912  libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc
! 21054989d8583d49547af268e639f05c  libstdc++-v3/testsuite/25_algorithms/stable_partition/constrained.cc
! 5d7b32b441fa7f315b35789db7ee56c2  libstdc++-v3/testsuite/25_algorithms/stable_partition/mem_check.cc
! 89e4a636ebcd32cf92fe655251f4a822  libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc
! b9e1c1fb064c2b0a69498d03b48e8242  libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc
! 1e3f3dc33d2c5a07326547fa8a05a283  libstdc++-v3/testsuite/25_algorithms/stable_partition/requirements/explicit_instantiation/2.cc
! 637f5c18daa47fabc605b0b471c82db3  libstdc++-v3/testsuite/25_algorithms/stable_partition/requirements/explicit_instantiation/pod.cc
! 426edb31d0d30177871bf274a7b9a82b  libstdc++-v3/testsuite/25_algorithms/stable_sort/1.cc
! a40c1fd2c27ecb06f891fe85ef2e10c6  libstdc++-v3/testsuite/25_algorithms/stable_sort/2.cc
! eb6515bc820112a6921c46a85ea77634  libstdc++-v3/testsuite/25_algorithms/stable_sort/3.cc
! 2a0a614d21046e8d44fc4fd831ae4314  libstdc++-v3/testsuite/25_algorithms/stable_sort/49559.cc
! a43623d9c73c02dd17da3025d03e02d4  libstdc++-v3/testsuite/25_algorithms/stable_sort/check_compare_by_value.cc
! ab6bb215254ac520f1537c54c02a4655  libstdc++-v3/testsuite/25_algorithms/stable_sort/check_type.cc
! 84b8d2a3ef6c6d84d821505ac327e578  libstdc++-v3/testsuite/25_algorithms/stable_sort/constrained.cc
! 5827f55a30409d61bc0afad36d488e8c  libstdc++-v3/testsuite/25_algorithms/stable_sort/mem_check.cc
! 96bd8dd5e6bd4c29b1d5fea8036a63b4  libstdc++-v3/testsuite/25_algorithms/stable_sort/moveable.cc
! 341984adac2014c711d8a64ca3d46d81  libstdc++-v3/testsuite/25_algorithms/stable_sort/moveable2.cc
! e541183a6ea265e0eebfc75e4dbe8331  libstdc++-v3/testsuite/25_algorithms/stable_sort/requirements/explicit_instantiation/2.cc
! 13ee0f46ff5300fd7434cda36c2683a7  libstdc++-v3/testsuite/25_algorithms/stable_sort/requirements/explicit_instantiation/pod.cc
! f1dc82dab6603ae8f7f6fe6eb586334d  libstdc++-v3/testsuite/25_algorithms/swap/68877.cc
! 0376a4924eadc175574a449dfe38fd11  libstdc++-v3/testsuite/25_algorithms/swap/constexpr.cc
! 659e707feaa8aded77f9b9da0a6ccc4e  libstdc++-v3/testsuite/25_algorithms/swap/dr809.cc
! 716ac89421e8d95ed50fae79487981b5  libstdc++-v3/testsuite/25_algorithms/swap/noexcept.cc
! 8269670e8c3e8043db77542f25027f89  libstdc++-v3/testsuite/25_algorithms/swap/requirements/explicit_instantiation/2.cc
! 05e1543b737bae38bf8d1978452bb70c  libstdc++-v3/testsuite/25_algorithms/swap/requirements/explicit_instantiation/pod.cc
! d8a01c5a02300ed84711867b3f7d489f  libstdc++-v3/testsuite/25_algorithms/swap_ranges/1.cc
! f78d8dae4118a63486794e50f78b49be  libstdc++-v3/testsuite/25_algorithms/swap_ranges/check_type.cc
! deb6b96ddeb0cf81ed07e9e5719e0cf3  libstdc++-v3/testsuite/25_algorithms/swap_ranges/constexpr.cc
! 9dc3c742798466b53bf44ac151bb86dc  libstdc++-v3/testsuite/25_algorithms/swap_ranges/constrained.cc
! af53c53bf387165acf939860f3c65d4d  libstdc++-v3/testsuite/25_algorithms/swap_ranges/moveable.cc
! a37f7c96fd3fe23376645bf45f65fa42  libstdc++-v3/testsuite/25_algorithms/swap_ranges/requirements/explicit_instantiation/2.cc
! 69c90eed21052ae3f48d9c3ed9d0408d  libstdc++-v3/testsuite/25_algorithms/swap_ranges/requirements/explicit_instantiation/pod.cc
! 0ba789502311df3ce33cc061217652d0  libstdc++-v3/testsuite/25_algorithms/transform/constexpr.cc
! 98b96de2aca71662ffb47affa47fb109  libstdc++-v3/testsuite/25_algorithms/transform/constrained.cc
! ff76b2152c4cd0b1d4b06874f164bec4  libstdc++-v3/testsuite/25_algorithms/transform/requirements/explicit_instantiation/2.cc
! e559bb518032186ccee5548bc6f05c1d  libstdc++-v3/testsuite/25_algorithms/transform/requirements/explicit_instantiation/pod.cc
! c259994b35401046b2e9b654ce85906b  libstdc++-v3/testsuite/25_algorithms/unique/1.cc
! c71784f8189a89590c43bc7d8fef45c5  libstdc++-v3/testsuite/25_algorithms/unique/11480.cc
! 3e7bc9b74cc63e1cb6bf1bfb2fa763bb  libstdc++-v3/testsuite/25_algorithms/unique/2.cc
! 909b8d56e9fc4a56b4b6dbfaf7403c0d  libstdc++-v3/testsuite/25_algorithms/unique/constexpr.cc
! 73585eaf84054ddf9fdb06f13ce53237  libstdc++-v3/testsuite/25_algorithms/unique/constrained.cc
! d9c8820f92a77103e615f70f27e5b90d  libstdc++-v3/testsuite/25_algorithms/unique/moveable.cc
! 307410771063e8a92e6e1518b1b9be8c  libstdc++-v3/testsuite/25_algorithms/unique/requirements/explicit_instantiation/2.cc
! 2237a3f6225dc6ac1a54aed7820d1974  libstdc++-v3/testsuite/25_algorithms/unique/requirements/explicit_instantiation/pod.cc
! 4d66c670087c19a5dc403f4eb308fe2a  libstdc++-v3/testsuite/25_algorithms/unique_copy/1.cc
! ca2f0595824f45388564cb2bbe26610d  libstdc++-v3/testsuite/25_algorithms/unique_copy/2.cc
! 868c4cd0a8564879443ddc0e2f9f8278  libstdc++-v3/testsuite/25_algorithms/unique_copy/26133.cc
! 991504b3e0da45301b5703f3402f672d  libstdc++-v3/testsuite/25_algorithms/unique_copy/check_type.cc
! 48f8c9e4897d57959c89971ae8cf2779  libstdc++-v3/testsuite/25_algorithms/unique_copy/constexpr.cc
! de4bddd14275d7386232ef7b3832702b  libstdc++-v3/testsuite/25_algorithms/unique_copy/constrained.cc
! d0af0d454e7e36794f9664e395f1e894  libstdc++-v3/testsuite/25_algorithms/unique_copy/requirements/explicit_instantiation/2.cc
! 9557ed3d952b3e08023ae999d115e419  libstdc++-v3/testsuite/25_algorithms/unique_copy/requirements/explicit_instantiation/pod.cc
! 4ef521999be7c7e4332c19bd549f86d9  libstdc++-v3/testsuite/25_algorithms/upper_bound/1.cc
! bd693c10f6b44e105e417aaa38cd3d9e  libstdc++-v3/testsuite/25_algorithms/upper_bound/2.cc
! 359d9a605f32ee619e23d9c3b1e80f72  libstdc++-v3/testsuite/25_algorithms/upper_bound/33613.cc
! 39c093193d42667c692032cb753418b6  libstdc++-v3/testsuite/25_algorithms/upper_bound/check_type.cc
! c330e7512de7deb352251858a4d67f47  libstdc++-v3/testsuite/25_algorithms/upper_bound/constexpr.cc
! be7fa17b458901d2f5a6e009a6c14e58  libstdc++-v3/testsuite/25_algorithms/upper_bound/constrained.cc
! 599f2ec3134196e21e2ae5f2ed73047f  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_neg.cc
! 8909e1e7a10dd67a60386c4e4b6e4bf6  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_partitioned_pred_neg.cc
! a287e4246866f174a4670e66c680bb49  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/constexpr_valid_range_neg.cc
! 8829d38e91cbbed013aa904b59460824  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_neg.cc
! b0e46ed3342611a40f5a86f27c6eceea  libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_pred_neg.cc
! d4ce3ae9768fd0643c9d82dba0713e17  libstdc++-v3/testsuite/25_algorithms/upper_bound/partitioned.cc
! e0cc020fa772f9adeec70b420037a1f6  libstdc++-v3/testsuite/25_algorithms/upper_bound/requirements/explicit_instantiation/2.cc
! 54a78de1587310092bde1b2faa21cead  libstdc++-v3/testsuite/25_algorithms/upper_bound/requirements/explicit_instantiation/pod.cc
! 386b5b7d2d5f65c31f13b2342b835342  libstdc++-v3/testsuite/26_numerics/accumulate/1.cc
! 357d2b31800349a0a367015a7024ef18  libstdc++-v3/testsuite/26_numerics/accumulate/48750.cc
! 9c44befb20b25e5dc49b30c8664be374  libstdc++-v3/testsuite/26_numerics/accumulate/constexpr.cc
! c657965c617b82730b5f0fa1814f3751  libstdc++-v3/testsuite/26_numerics/accumulate/lwg2055.cc
! ccbf2e5cc23c2aa5f0d4d63a17820e35  libstdc++-v3/testsuite/26_numerics/accumulate/requirements/explicit_instantiation/2.cc
! 13650a564d61858100e81855d71161e0  libstdc++-v3/testsuite/26_numerics/accumulate/requirements/explicit_instantiation/pod.cc
! bd565e675e343fc3a7a050835c85232a  libstdc++-v3/testsuite/26_numerics/adjacent_difference/1.cc
! 9fb97983f736fac6b2bdb878bb42e4a9  libstdc++-v3/testsuite/26_numerics/adjacent_difference/constexpr.cc
! a3e6a999d687b8bb9f070f634c2ae01f  libstdc++-v3/testsuite/26_numerics/adjacent_difference/lwg2055.cc
! b80572101bfa4b1fd0cd3e67cc5f47d0  libstdc++-v3/testsuite/26_numerics/adjacent_difference/requirements/explicit_instantiation/2.cc
! eb4dd2d78e72fda37b3cf25f9bc378c8  libstdc++-v3/testsuite/26_numerics/adjacent_difference/requirements/explicit_instantiation/pod.cc
! 7c5ec3accdf008dd52a098a858e5d9cb  libstdc++-v3/testsuite/26_numerics/bit/bit.byteswap/byteswap.cc
! 272e494053910a3abb574594eb316854  libstdc++-v3/testsuite/26_numerics/bit/bit.byteswap/version.cc
  874b969b1c6b476310e9a3d96f5b948c  libstdc++-v3/testsuite/26_numerics/bit/bit.cast/105027.cc
! 36862c5948af15f954b8811846e256cf  libstdc++-v3/testsuite/26_numerics/bit/bit.cast/bit_cast.cc
! df2e03347fe8b5674d95768c9be2c687  libstdc++-v3/testsuite/26_numerics/bit/bit.cast/version.cc
! 158ce0c93e626851bd6f545573e3ca9d  libstdc++-v3/testsuite/26_numerics/bit/bit.count/countl_one.cc
! b96eaac2ab96e0042d825e612e5c26f1  libstdc++-v3/testsuite/26_numerics/bit/bit.count/countl_zero.cc
! 9a8b9ed67e66ea6e51c078e5451739d7  libstdc++-v3/testsuite/26_numerics/bit/bit.count/countr_one.cc
! f12f3f1aec1443265c55de2e9a37bd20  libstdc++-v3/testsuite/26_numerics/bit/bit.count/countr_zero.cc
! 42d969cfde890299518811955d0ae6ec  libstdc++-v3/testsuite/26_numerics/bit/bit.count/popcount.cc
! a9b559a81a1dcaf9c7691ff59966c666  libstdc++-v3/testsuite/26_numerics/bit/bit.pow.two/bit_ceil.cc
! 16609bcf3ebc847efc82355b5616fd9d  libstdc++-v3/testsuite/26_numerics/bit/bit.pow.two/bit_ceil_neg.cc
! 7ca1b3d015d5f4c3e2b3e02134dacd1a  libstdc++-v3/testsuite/26_numerics/bit/bit.pow.two/bit_floor.cc
! 0031f6d14d837ca76aa02490cab6d076  libstdc++-v3/testsuite/26_numerics/bit/bit.pow.two/bit_width.cc
! 249347481c7c62ad919c1672144d0b92  libstdc++-v3/testsuite/26_numerics/bit/bit.pow.two/has_single_bit.cc
! 08db6f1c252a96e34a6cf93c5aa2bb6b  libstdc++-v3/testsuite/26_numerics/bit/bit.rotate/rotl.cc
! e0500aa93da098589b21b84938353532  libstdc++-v3/testsuite/26_numerics/bit/bit.rotate/rotr.cc
! 0029a12251f0dc321754225aaae1bdee  libstdc++-v3/testsuite/26_numerics/bit/header-2.cc
! ab24341d27c3b6a76aa235a813b13e74  libstdc++-v3/testsuite/26_numerics/bit/header.cc
! dbf9e215ffc2fa593a80722718b119ce  libstdc++-v3/testsuite/26_numerics/complex/1.cc
! 1bf8dcd6d3b5f20e15e148ffc801fc45  libstdc++-v3/testsuite/26_numerics/complex/13450.cc
! 7adb22aa22e5eea0e35a0a7fad582597  libstdc++-v3/testsuite/26_numerics/complex/2.cc
! 0475c47ecc35f17fcf095dfba241c696  libstdc++-v3/testsuite/26_numerics/complex/50880.cc
! 01360db2a5ea66ee7c45467a9114b072  libstdc++-v3/testsuite/26_numerics/complex/51083.cc
! 30ca921f38f39bb7b602932745de223e  libstdc++-v3/testsuite/26_numerics/complex/56111.cc
  af7877b96aa74cdfc7f025c671e3d6c2  libstdc++-v3/testsuite/26_numerics/complex/abi_tag.cc
! 2e75ec5ddaf046bd93a5432893751e94  libstdc++-v3/testsuite/26_numerics/complex/buggy_complex.cc
! 7294d9309ea6f19c98563294fe4d726d  libstdc++-v3/testsuite/26_numerics/complex/c99.cc
! 578e5efdaeef1134072f8c491182f970  libstdc++-v3/testsuite/26_numerics/complex/comparison_operators/constexpr.cc
! 933be520472b5d6bdfba8aacd2410941  libstdc++-v3/testsuite/26_numerics/complex/comparison_operators/more_constexpr.cc
! 3ee175acfa6138b5ec35cbc8fede2ccc  libstdc++-v3/testsuite/26_numerics/complex/cons/48760.cc
! c3a640eb4a8e8c4738fe11f70c774fb1  libstdc++-v3/testsuite/26_numerics/complex/cons/48760_c++0x.cc
! 17a97ab6f29dd0cd7c2b620abfa6ba22  libstdc++-v3/testsuite/26_numerics/complex/cons/constexpr.cc
! a0c73a37bb821b24aa7aa0338e12fdf6  libstdc++-v3/testsuite/26_numerics/complex/cons/constexpr_primary.cc
! a2e7e3d757e87c3565db6d85edd0b357  libstdc++-v3/testsuite/26_numerics/complex/dr387_2.cc
! 446978363b218104f09bee9626cbc0f0  libstdc++-v3/testsuite/26_numerics/complex/dr781.cc
! cbee9dd99196127ae76d0425199e0241  libstdc++-v3/testsuite/26_numerics/complex/dr844.cc
! be396c2e02fb6394b04c0a0756b89a14  libstdc++-v3/testsuite/26_numerics/complex/inserters_extractors/char/1.cc
! 537f6dc95dfc99dd358c51597fe3695e  libstdc++-v3/testsuite/26_numerics/complex/inserters_extractors/char/dr2714.cc
! 2e1540dbaec62582d484f8055db67633  libstdc++-v3/testsuite/26_numerics/complex/inserters_extractors/wchar_t/1.cc
! 828e81cc55b3b8de5d7b140680c9ac73  libstdc++-v3/testsuite/26_numerics/complex/literals/types.cc
! 7e99a430f22f68827ee7e94a91253509  libstdc++-v3/testsuite/26_numerics/complex/literals/values.cc
! 282bf5cda5c68831f706d6ace601bd91  libstdc++-v3/testsuite/26_numerics/complex/operators/more_constexpr.cc
  906619ecf0877a7ff5302dd409c34714  libstdc++-v3/testsuite/26_numerics/complex/pow.cc
! bfd1c0a4378d1502e85445386ac57348  libstdc++-v3/testsuite/26_numerics/complex/proj.cc
! 1ca900790222f1ab2ab5e3e9cb090380  libstdc++-v3/testsuite/26_numerics/complex/requirements/constexpr_functions.cc
! f482433172bb26401e3e536b842c6174  libstdc++-v3/testsuite/26_numerics/complex/requirements/more_constexpr.cc
! c47ec3d1b7ec8c1b381b4a7f491fbe3e  libstdc++-v3/testsuite/26_numerics/complex/value_operations/1.cc
! 50261b91bce5a66099d3c269353bf33e  libstdc++-v3/testsuite/26_numerics/complex/value_operations/constexpr.cc
! 8c6eaecb6330c6664895043095e4cb0c  libstdc++-v3/testsuite/26_numerics/complex/value_operations/constexpr2.cc
! f502830eb979ad1638527290e002288c  libstdc++-v3/testsuite/26_numerics/complex/value_operations/dr387.cc
! cac2245cc8a6a89193003e3beec0866c  libstdc++-v3/testsuite/26_numerics/complex/value_operations/more_constexpr.cc
! baacc096079cb44331f4698912382da7  libstdc++-v3/testsuite/26_numerics/complex/value_operations/pr88341.cc
! 2675b5fd7b9bf6d893670e71ccbeb3d9  libstdc++-v3/testsuite/26_numerics/endian/1.cc
! 6a73b94307051b67394a74bdfbd1d3b0  libstdc++-v3/testsuite/26_numerics/endian/2.cc
! 047b929def8fa83abf5345aeb0d613a0  libstdc++-v3/testsuite/26_numerics/endian/3.cc
! d1b8bae261145f62ffa342475580a444  libstdc++-v3/testsuite/26_numerics/endian/4.cc
! 9fda068ec70c8d2089af90da3c51844c  libstdc++-v3/testsuite/26_numerics/exclusive_scan/1.cc
! cbaee11a2e976e9ff643fea0dd71394b  libstdc++-v3/testsuite/26_numerics/exclusive_scan/constexpr.cc
! c8c798942fd53ca258f383828adca8b2  libstdc++-v3/testsuite/26_numerics/gcd/1.cc
! 20f3774ba1aaf6e7a4b66b57040a4715  libstdc++-v3/testsuite/26_numerics/gcd/2.cc
! a0c745f1c47af2a2ec7553fcf4bda762  libstdc++-v3/testsuite/26_numerics/gcd/92978.cc
! 088d59e4bf9fad11fea939060c13fd99  libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc
! 8e56e75f786ab9ab2b33aa9fcf9ca243  libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc
! 87bce82be6d927c520d1e63ad8201d35  libstdc++-v3/testsuite/26_numerics/headers/cfenv/std_c++0x_neg.cc
! 0b98f8f9c557d52570ae7d3bd942e73d  libstdc++-v3/testsuite/26_numerics/headers/cfenv/types_std_c++0x.cc
! f53a33be373104096efc8d1ca2ecb454  libstdc++-v3/testsuite/26_numerics/headers/cmath/14608.cc
! 71eabdcab36bca2d627d3d4c095a9332  libstdc++-v3/testsuite/26_numerics/headers/cmath/19322.cc
! 7285381b30b10361b3c8acaf5850d5c0  libstdc++-v3/testsuite/26_numerics/headers/cmath/25913.cc
! da72600ab18109af51e953c960487975  libstdc++-v3/testsuite/26_numerics/headers/cmath/37582.cc
! cec2b8fb3753911b97a9f092753d2254  libstdc++-v3/testsuite/26_numerics/headers/cmath/48891.cc
! c0f369fa299114b391833bbe4d98726b  libstdc++-v3/testsuite/26_numerics/headers/cmath/51083.cc
! 8662602f0c9d798d7145836a37452f6f  libstdc++-v3/testsuite/26_numerics/headers/cmath/53503.cc
! 4952f3269f85c2cf16e33126543c008c  libstdc++-v3/testsuite/26_numerics/headers/cmath/60401.cc
! 9e6c9a11b754ad50d167bbd0d4dd18c0  libstdc++-v3/testsuite/26_numerics/headers/cmath/60637.cc
! 6e844330259f4b614fab136b5c0fa07f  libstdc++-v3/testsuite/26_numerics/headers/cmath/82644.cc
! e333c356f55f8a7bb1479053f01bbb41  libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++11.cc
! 245612e2d7ebc1471ed9f23b7e5b0282  libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c++98.cc
! 5517b274251d87eabb8bd589c68803cb  libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc
! dd5d287d01314347250823d1342b3989  libstdc++-v3/testsuite/26_numerics/headers/cmath/c_math.cc
! d3ba05dcbfa6fd68204c6437c4bb4c47  libstdc++-v3/testsuite/26_numerics/headers/cmath/c_math_dynamic.cc
! 797b44e5c81659cdd1457ac3bf4d72ac  libstdc++-v3/testsuite/26_numerics/headers/cmath/dr2192.cc
! 9ea933f9b646fd8ca3bc8527288be769  libstdc++-v3/testsuite/26_numerics/headers/cmath/dr2192_neg.cc
! d77d7a9ff7bbac4afa9327f1577561cd  libstdc++-v3/testsuite/26_numerics/headers/cmath/dr550.cc
! bc986b2bf9dc791ac63a39f00bd82fc3  libstdc++-v3/testsuite/26_numerics/headers/cmath/fabs_inline.cc
! 9f548eca518a04f135b14fdcab48ebf1  libstdc++-v3/testsuite/26_numerics/headers/cmath/functions_global.cc
! cf29953c8ee36712f76a9dd9fbf9c189  libstdc++-v3/testsuite/26_numerics/headers/cmath/functions_std.cc
! 0cf5ef3201027434825804b6d1ccfcb5  libstdc++-v3/testsuite/26_numerics/headers/cmath/functions_std_c++17.cc
! 27e426710dd09389fda8e552ead3e05c  libstdc++-v3/testsuite/26_numerics/headers/cmath/hypot.cc
! 9ec5137c2074f403a462dd29e0f1ba04  libstdc++-v3/testsuite/26_numerics/headers/cmath/macros.cc
! 17b32eb94b1231f12b1b5ad6de403367  libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads.cc
! 74867ea490331b4f3b144252611ee520  libstdc++-v3/testsuite/26_numerics/headers/cmath/overloads_c++0x_neg.cc
! 60a4f2b0797bc9ed950e19c5255709c9  libstdc++-v3/testsuite/26_numerics/headers/cmath/powi.cc
! 60d3e08f09fe8ccf6166d66d8faca008  libstdc++-v3/testsuite/26_numerics/headers/cmath/special_functions_global.cc
! 299655ae835f1a756ca425472a7dd541  libstdc++-v3/testsuite/26_numerics/headers/cmath/types_std_c++0x.cc
! 1e3de2169296ed149bbef0875f324ea8  libstdc++-v3/testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc
! 5fec9c425ddaba510b56666796de925e  libstdc++-v3/testsuite/26_numerics/headers/complex.h/std_c++11.h
! 9cc445810bd002c24e8448827eb6b8a4  libstdc++-v3/testsuite/26_numerics/headers/complex.h/std_c++98.h
! 610f7b3c8ac235008d5a62103ede0f3d  libstdc++-v3/testsuite/26_numerics/headers/complex.h/std_gnu++11.h
! d2a1864873297c34ab7ffae9b1f26cac  libstdc++-v3/testsuite/26_numerics/headers/complex/synopsis.cc
! ae46842408ada5bbfc162c40255a619e  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/13943.cc
! 784618f161904bbdd250565ea43188c8  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/2190.cc
! a93ca6134bead3c181690414b19a2b8f  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/54686.cc
! dbd10a42b5b922f2cf3c2efacf8cea91  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/60401.cc
! 0b012c8f7279914481999d551141be71  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/dr2192.cc
! 8a96f04c964bd942c29a7297a2138556  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/dr2192_neg.cc
! 3d5449f277f2eb014ab7741dc0566b1e  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/dr2735.cc
! d864aab8d54b4e5fba2a2f8f6ff779c2  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/functions_std.cc
! cf36370a9fe688c9270e588df7733576  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/macros.cc
! 536dd3420e891f0ba7f895802d0bbb85  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/types_std.cc
! 016e533beb0bff4a5243bd9ba34d2555  libstdc++-v3/testsuite/26_numerics/headers/cstdlib/types_std_c++0x.cc
! cb1b3bb9fc531f0e1f0106639f3e106c  libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc
! a653ebdcf810c39fe808aa9f3d9b6f22  libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc
! 8c68add672590a9846bd87d15a20242e  libstdc++-v3/testsuite/26_numerics/headers/numeric/numeric_parallel_mode.cc
! 3aa71cb8f996b3fe1d11cf57e027a781  libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric.cc
! 6272acf24bfb98c68bacc49b958fdf73  libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed1.cc
! 1c8c6cfb007015539bf5618d515591ba  libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed2.cc
! fe4eabf3c13462317e92d8c25e21c448  libstdc++-v3/testsuite/26_numerics/headers/numeric/synopsis.cc
! 7db8caf475bb28385b70273738a909f6  libstdc++-v3/testsuite/26_numerics/headers/random/std_c++0x_neg.cc
! e84e39d25eeff82ff832ff57205fb5df  libstdc++-v3/testsuite/26_numerics/headers/random/types_std_c++0x.cc
! 4540a095c52cf3dde7b50ecf22defb75  libstdc++-v3/testsuite/26_numerics/headers/valarray/synopsis.cc
! f837b36ad90c049519c732360e79b5d3  libstdc++-v3/testsuite/26_numerics/headers/valarray/types_std.cc
! ebaa4e28ac78226dd972d5754a6f4f1d  libstdc++-v3/testsuite/26_numerics/inclusive_scan/1.cc
! 048f17258d6977ff7403ade4449733f9  libstdc++-v3/testsuite/26_numerics/inclusive_scan/constexpr.cc
! c3e3be157befba058593d0c5d9d52875  libstdc++-v3/testsuite/26_numerics/inner_product/1.cc
! d81a287736a1cb6947a908ea5ab4851a  libstdc++-v3/testsuite/26_numerics/inner_product/constexpr.cc
! 87a026c698ee05ce17a133fba0ecf1c8  libstdc++-v3/testsuite/26_numerics/inner_product/lwg2055.cc
! b9eb6805b5a413f5c586ff050dc5ce64  libstdc++-v3/testsuite/26_numerics/inner_product/requirements/explicit_instantiation/2.cc
! c65357baf5f97cf4a144b1be1730a2a3  libstdc++-v3/testsuite/26_numerics/inner_product/requirements/explicit_instantiation/pod.cc
! debd49c88295fd8d3eb400453c6e6bf9  libstdc++-v3/testsuite/26_numerics/iota/1.cc
! af5434540c28b231aca67b9658d0c507  libstdc++-v3/testsuite/26_numerics/iota/constexpr.cc
! 763c28d0914ddd167593a643c01e91d7  libstdc++-v3/testsuite/26_numerics/iota/requirements/explicit_instantiation/2.cc
! c0e9d63e905b1657bef80e7a0dfbcbf5  libstdc++-v3/testsuite/26_numerics/iota/requirements/explicit_instantiation/pod.cc
! a792065c89c3e0e239f6126bc4ecf6af  libstdc++-v3/testsuite/26_numerics/lcm/1.cc
! 9dc6039e7c6a985fc9fe28fe389c010c  libstdc++-v3/testsuite/26_numerics/lcm/92978.cc
! 04f69ddcc085eb7f29b70e729476826f  libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc
! ce26eeb963a4a061af11ed25ee772bb7  libstdc++-v3/testsuite/26_numerics/lerp/1.cc
  f9ae973e3d6f85f4c35471e62402ba98  libstdc++-v3/testsuite/26_numerics/lerp/constexpr.cc
  198cb21048f5d36f6a9bf84a5b2dd536  libstdc++-v3/testsuite/26_numerics/lerp/version.cc
! 9ea41d39878f522ab6e4fc7858d0236f  libstdc++-v3/testsuite/26_numerics/midpoint/floating.cc
! d479336c3018dfc62c2b93201435e858  libstdc++-v3/testsuite/26_numerics/midpoint/integral.cc
! 375974e43bd673392cf67566507fa62f  libstdc++-v3/testsuite/26_numerics/midpoint/pointer.cc
! 193bbe0a5401e54397015a81108440a1  libstdc++-v3/testsuite/26_numerics/midpoint/pointer_neg.cc
! 198cb21048f5d36f6a9bf84a5b2dd536  libstdc++-v3/testsuite/26_numerics/midpoint/version.cc
! 028da2ea4a37977ed09461bfadf9f6cc  libstdc++-v3/testsuite/26_numerics/numbers/1.cc
! 303116a2844696fb5f4603b11307554b  libstdc++-v3/testsuite/26_numerics/numbers/2.cc
! ad5b4c6aa3381b0e2c0ada3f0f92ac1b  libstdc++-v3/testsuite/26_numerics/numbers/3.cc
! 8ee891e33b6c8b936bb263195fea62a6  libstdc++-v3/testsuite/26_numerics/numbers/float128.cc
! c99ce4228761dcf882dde310f46f1269  libstdc++-v3/testsuite/26_numerics/numbers/nonfloat_neg.cc
! 78dad66b28fe910561250aee74f47353  libstdc++-v3/testsuite/26_numerics/partial_sum/1.cc
! b399abc454137644463e6faaadf7d34d  libstdc++-v3/testsuite/26_numerics/partial_sum/constexpr.cc
! 0dc2524d4c58c5aac8078b347b5d43d8  libstdc++-v3/testsuite/26_numerics/partial_sum/lwg2055.cc
! bc07796e3dc71ee908b6cf1de3fb0243  libstdc++-v3/testsuite/26_numerics/partial_sum/requirements/explicit_instantiation/2.cc
! 1e2fe2c58bb2c27ff9e062a12fcabd9b  libstdc++-v3/testsuite/26_numerics/partial_sum/requirements/explicit_instantiation/pod.cc
  862f4f439e8707b32a42b5fe736946a5  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/adjacent_difference.cc
  0553df89726830b7195d3dc76149d7b4  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/reduce.cc
  e7d03e915035104e8c34f0e1a253cea1  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/scan.cc
  371296694e234040b308e95ba965691b  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/transform_reduce.cc
  37a9d3638006b842a59994327880b85f  libstdc++-v3/testsuite/26_numerics/pstl/numeric_ops/transform_scan.cc
! 2203e7f8542c0f2cb67b91452f9cf175  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/cons/default.cc
! 3e10f6694b66f03433216378f82c9671  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/cons/parms.cc
! e1bf80a338778b1fd8021c6b11da10ae  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/operators/equal.cc
! 5af0ecc5aace469cd6c0eb7a0c03fdb8  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/operators/inequal.cc
! b9ff898ef20784b6377f49a4d59b41a6  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/operators/serialize.cc
! 1185afc54e9f8d22ab7076ca5cf10b77  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/operators/values.cc
! 16b9633198c3d86aa670e0dd71c6cd44  libstdc++-v3/testsuite/26_numerics/random/bernoulli_distribution/requirements/typedefs.cc
! 52875fd9eae59363d5913f23adb00abb  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/cons/default.cc
! 3a3b0f3a56ffb11148ee1135661a15a8  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/cons/parms.cc
! 7093745def550fdfc5322966ccef382f  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/equal.cc
! 99dfa4432682bfbf18409fade8f7df70  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/inequal.cc
! e0a2cb3440c2988fcc22e86e69df44d1  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/serialize.cc
! 87f43b769b8f355820eea5e2f7038799  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values.cc
! f314b4be69aa5dd754c860cc35f3837d  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values2.cc
! 27ec5b03d3cb51804dc4172c7e51032e  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values3.cc
! f82da3bdd2fdd46b7a33696d4a1f9dc8  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values4.cc
! ac3dbc9ef40e1a103b829211826d4178  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/operators/values5.cc
! d48590dd54559ec9c4c8a6b3cca7c11e  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/explicit_instantiation/1.cc
! 9c2d251b7c8edc0dc7d1018089efbb27  libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/requirements/typedefs.cc
! d75641e432f995279f622cc53789cb65  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/cons/default.cc
! 335118bbb7195d6accbe6bc7573a1d4c  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/cons/parms.cc
! 4a933dcafd8be1e3f2f7f07b2a84bca5  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/operators/equal.cc
! 4f6bb6f3c27c60514556bdd40585ddff  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/operators/inequal.cc
! d4c45d17f6372e0c006c54cd49ba82ba  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/operators/serialize.cc
! fb62e1676c59c74e8de9e61635c64d26  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/explicit_instantiation/1.cc
! 5a3efee2feb921ca4cdfd1cce3ce5c6f  libstdc++-v3/testsuite/26_numerics/random/cauchy_distribution/requirements/typedefs.cc
! ea321047810909ee9700782e3c06d2de  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/83833.cc
! 1d778d8cfa631737c9707fc98c659bc6  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/cons/default.cc
! a3dd27c28de2f65ccdc09acde0202c67  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/cons/parms.cc
! a467028281a3ef9bc58e6722ff7a763e  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/operators/equal.cc
! 7dc4a5444410498fc9f53bb316c6171e  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/operators/inequal.cc
! c704a0cc08deb919168713401ed2a268  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/operators/serialize.cc
! a924b17324a440d5c4defc5601db4aed  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/explicit_instantiation/1.cc
! 27385bbd14212f30b5bfe59a2ee26d36  libstdc++-v3/testsuite/26_numerics/random/chi_squared_distribution/requirements/typedefs.cc
! 13cc273a96c92b617c2aa150b636760a  libstdc++-v3/testsuite/26_numerics/random/concept.cc
! 2f9e8499f05199ad2c6b413c97874bae  libstdc++-v3/testsuite/26_numerics/random/default_random_engine.cc
! 4de8f0c2278d1665bfcbed78202232c2  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/55215.cc
! e6b651b7b368d88bb81d91ffd9e238a4  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/base_copy.cc
! 58b6883ab9bf99a59320a86ef537aa30  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/base_move.cc
! 4fba0e8b35ffd9fb6b55380abef3390b  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/copy.cc
! 5e97a7d7448b5fa42730083af53289a8  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/default.cc
! 0ee1fce83742dd8b57fb4339a7dd6e41  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed1.cc
! 0be23929e99cf51299ecc58523167b54  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed2.cc
! 0e594f34cae8d50bcb221949b15e6e4f  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed_seq.cc
! 33a82f5a26fb28102494e4a04328b4a5  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed_seq2.cc
! fb9ef3b3809407a706b078b8003bc91e  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/equal.cc
! 578715308efb1ad96084bafd580fb7cb  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/inequal.cc
! e3eebedf4ff1789cd72c78ae336875e0  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/serialize.cc
! 0e069c82f5fdab9649c448fca405bd97  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/requirements/constexpr_data.cc
! 56860fe00d87ee050ba91533af166da9  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/requirements/constexpr_functions.cc
! 31978b18c0b0ee7bad9ef83324d44b05  libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/requirements/typedefs.cc
! b8a417e82ca014bed61ec5c65ff9a6b2  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/cons/default.cc
! c41e215d60fe029647bbf4494380014a  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/cons/initlist.cc
! 0f831d3bb84f5d7b5f8c2329d81895e8  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/cons/num_xbound_fun.cc
! fdfb7cc9d88816d6d961541bc0db16a3  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/cons/range.cc
! 4197241ef5d86bfdec7b0b9c88f959d9  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/call-default.cc
! e79b57740b8510754257efd968d25931  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/equal.cc
! b8c9068268ead40f7e01dfe6a66eb5a5  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/inequal.cc
! c9572f64380ffa02302588fe6239e684  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/serialize.cc
! f9e279de2e8c19ebcb8eb85c441fb5be  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/operators/values.cc
! 99438d81cc86ecc2e8b1a8fd9773205c  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/explicit_instantiation/1.cc
! fe5f184a0b38ef84b1087b8c2d65c251  libstdc++-v3/testsuite/26_numerics/random/discrete_distribution/requirements/typedefs.cc
! 2035a3969d616d54f5e945ae1e5d2a5e  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/cons/default.cc
! f842d93c8ee663bfd547a0b9a9ccdbe1  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/cons/parms.cc
! 53d8b46544c6fd3857bca886d6bdd8b1  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/operators/equal.cc
! a3ffc77bdac58fe7d4cfd6020490dc93  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/operators/inequal.cc
! 092acfd426ae67fa8ca5af3a7511c5bc  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/operators/serialize.cc
! a444a2152b9234f728189692c8fe0734  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/explicit_instantiation/1.cc
! ea3ff471edfd41ffc9312076b2ebdfe5  libstdc++-v3/testsuite/26_numerics/random/exponential_distribution/requirements/typedefs.cc
! 52722206d1950407fe6a6817f83b6301  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/cons/default.cc
! 76a5c0e8835dffdc9d26d78214aab380  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/cons/parms.cc
! fd3630826d049fc89557a681f55ab362  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/operators/equal.cc
! b5bf9685f4c542daea35552eb5fc3b80  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/operators/inequal.cc
! 0f6550634f29f81ba84eca73bf4c9f6e  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/operators/serialize.cc
! e333e408e17890a6d1fea2a93419bca4  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/explicit_instantiation/1.cc
! 094f8c39c5208c5461309977a09bb16a  libstdc++-v3/testsuite/26_numerics/random/extreme_value_distribution/requirements/typedefs.cc
! bcc4fdd99cd00f4079ad261c10559460  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/cons/default.cc
! ccd98d6e55928c46977c2fe49c0af81c  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/cons/parms.cc
! e2e365b5bd83f951f059ced8ac6a37cf  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/operators/equal.cc
! 48f9b5f3ee04302d556e407c6e9d19d1  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/operators/inequal.cc
! 7150730fb538eef2a29b4fd07d1d0cae  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/operators/serialize.cc
! fe8010c16088015a2d7b4750b11f2124  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/explicit_instantiation/1.cc
! 879c8e2ba33583c6c1639ef34252c5fa  libstdc++-v3/testsuite/26_numerics/random/fisher_f_distribution/requirements/typedefs.cc
! 753573cfa5dc2f87dce14835ae382112  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/cons/default.cc
! 699fe9bf87fde198af94aa229403656d  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/cons/parms.cc
! c1428344564eb0f06ff8441a74bfce68  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/operators/equal.cc
! 72aa8b7d3bcb0cb57c36f7f3baf160ab  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/operators/inequal.cc
! 9e6ee8421df403fa6916f85232028a03  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/operators/serialize.cc
! f15fe20e7a74052a8f2303304909f164  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/explicit_instantiation/1.cc
! 9c16d784e4fa10766a8519d754f2fd28  libstdc++-v3/testsuite/26_numerics/random/gamma_distribution/requirements/typedefs.cc
! f37209d3888ac687451bae8a697f9bdc  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/cons/default.cc
! d498bcdb8e937629b9dcbdda9105273b  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/cons/parms.cc
! 69d9a4fdf43398235e1332fbdfbd75c1  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/operators/equal.cc
! 7cbac679e21a60f2011eacb571225d53  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/operators/inequal.cc
! 4d8ab551a7012ad73912c1cbf91714d6  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/operators/serialize.cc
! 58e88eae3dbe4d8576891b245dc66c36  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/operators/values.cc
! 66808c982aa74e1d16c90204e9e8c102  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/explicit_instantiation/1.cc
! acd8e3aa04fe091d24629cf4efd0bfdc  libstdc++-v3/testsuite/26_numerics/random/geometric_distribution/requirements/typedefs.cc
! e2aabcccea890bd99d8f230218a5f111  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc
! d18d89768ea2ba05381ed0efe90a71e1  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/base_copy.cc
! 0b805d9101940dbb792cd76a626180a8  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/base_move.cc
! acb6c79209ead13b7c031180575497d5  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/copy.cc
! f557bcbd4ea6be25419dc890220d5ae3  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/default.cc
! 493634cead36c9ab41abb8d359de5ba0  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/seed1.cc
! de80b7d4566528b6bf81e2b8a9fe3a8c  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/seed2.cc
! ff42f141c09032507f959acdab10ae6c  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/seed_seq.cc
! 99a0885b7c343abe8569327c94f256b7  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/seed_seq2.cc
! 7dd3ba667e62d4df96fe8951db32358f  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/operators/equal.cc
! dd19065b622b35dfaa8ceb9f67f9e12c  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/operators/inequal.cc
! 007d0be2009f18cc2c23413a26e0c050  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/operators/serialize.cc
! 2d85d5246eaa3daa45f73b674b432f1d  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/requirements/constexpr_functions.cc
! 1a57a73280cf1cf71e3bad7618ad619f  libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/requirements/typedefs.cc
! 28df5a693e264b6e72b8799fa5e67187  libstdc++-v3/testsuite/26_numerics/random/knuth_b.cc
! f8d4b7fac8ef3f51b526eb2b6e4db1d2  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/55215.cc
! e774f978b2b20ca175dc02153eb6c5ee  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/copy.cc
! e3f6480ee15c49ef1482873d9e3870fe  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/default.cc
! d6db537c6745425aaf3c01539c399ba0  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/seed1.cc
! b506cde9abc9f18b4d066f7817315918  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/seed2.cc
! 2592ee5b48949d243f770f9971ee1cfd  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/seed_seq.cc
! 5179ac2055a92bfa4db17f4ae3f29134  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/seed_seq2.cc
! d1c996886122363ed66abe00f92d871a  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/51795.cc
! 05d045bb4fb52ab7cd86baa2ea8826a6  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/call.cc
! 834f19dadaa6b05ab9df8b5c3a110bbf  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/equal.cc
! 42d5265ac862255010f982ae1b1e6f17  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/inequal.cc
! 9a1b12c519af6b72a636880b71ef6555  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/serialize.cc
! 4ed68a91c07223ea051841db9fd5ad1a  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/constants.cc
! 407823a4daa50b9fa3585c96399a8617  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/constexpr_data.cc
! b09c093af58ed3214552f2d018d6c580  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/constexpr_functions.cc
! 0444410f1b08486824447b2d71400a22  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/non_uint_neg.cc
! 0f742a2c118b95fc81104065e415d271  libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/typedefs.cc
! 7a68433694ef7eb46c93b732d27b2eda  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/cons/default.cc
! cdcb90fbe41f576a992f106292af0790  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/cons/parms.cc
! e7a48ab129fb9b0e3e59a3dd1fed86bc  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/operators/equal.cc
! 5b2df7ba22e3c2b70b1abc788cb49207  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/operators/inequal.cc
! f83dac7ebcb753ecafbc93df81f2a65c  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/operators/serialize.cc
! 8da416fb621ffdc7f62d801101ae2b3b  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/explicit_instantiation/1.cc
! a1eda48915e12de60fa55a90b11dc788  libstdc++-v3/testsuite/26_numerics/random/lognormal_distribution/requirements/typedefs.cc
! c75dadf106776d9ae608023a9f9d8f1c  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc
! b7cb8f2e7b2452009fd2c208058af4d1  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/copy.cc
! 729b7873138775fb1d54dd237c42b75d  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/default.cc
! 7dd62c414134d02f0db6eb5e6175b886  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/seed1.cc
! 2a05023041e3d484969656fa1de09398  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/seed2.cc
! 517ba18fbb2cd6859237f06d980d3b61  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/seed_seq.cc
! 538d02ef18c6e3b184e7b26a06616f9c  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/seed_seq2.cc
! 52bf8120542494db5406baabecbc082e  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/operators/equal.cc
! 9a2ed3d6e06fa71e330a908de1b13e66  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/operators/inequal.cc
! 09fb3a41aa8995365356455dc3bb6db1  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/operators/serialize.cc
! d61cc277a82ee0aae9cb0094ec4d17c1  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/constants.cc
! bb3704c2facf6bba9dccf3a61494d643  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/constexpr_data.cc
! 09b350dc3689dcb2330a617cb98fb3d4  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/constexpr_functions.cc
! b813a044acba1e0a158eb8b5c92b6b06  libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/requirements/typedefs.cc
! 437693959913482742dfeeff5e3793a1  libstdc++-v3/testsuite/26_numerics/random/minstd_rand.cc
! 85ccffb4122f7b6163ae195e57ac85d9  libstdc++-v3/testsuite/26_numerics/random/minstd_rand0.cc
! 1d429536398ed96fe57101118c2c53c1  libstdc++-v3/testsuite/26_numerics/random/mt19937.cc
! ab9e8a13b99416670b857a3511f87488  libstdc++-v3/testsuite/26_numerics/random/mt19937_64.cc
! 7025468a726be461cd178f916bc034d8  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/cons/default.cc
! b16952e5f824371bbd88a7928c34ceb0  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/cons/parms.cc
! d1cf415fa95cd61679858b20a4c8893b  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/58302.cc
! fa86312b9e83d47b02e90cdb8722bb31  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/equal.cc
! 064e94739e1679aea0f97c50f6dc30ba  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/inequal.cc
! d05fc8f9d77e8607ecd166befecd5f95  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/serialize.cc
! 68e30a696766a480e07b87910eee9bd0  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/values.cc
! 13ad8a9d40700f2d2ed748471b228cd4  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/explicit_instantiation/1.cc
! 31628c2fae5befbcfdc03acb581d2518  libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/requirements/typedefs.cc
! 12939ec7d431154434031941275e6fc5  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/cons/default.cc
! dacd0751d0a1b7d6752bee82114c9baf  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/cons/parms.cc
! c7382b1899c3f691ab73c9d87259b5fe  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/equal.cc
! 8f10a4b4809da2884bfb1b6ff3402a1d  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/inequal.cc
! c571853ba130a571de17be26d339451a  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/operators/serialize.cc
! 54ef8c06abeafa7d50683beadb1ffad5  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/explicit_instantiation/1.cc
! 5553aa90c48de777ca4ffebdd264320d  libstdc++-v3/testsuite/26_numerics/random/normal_distribution/requirements/typedefs.cc
! 1d0f0658e15fc55118434c57d6d6b32b  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/default.cc
! 3989d147f87c57be8174f6665c57c393  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/initlist_fun.cc
! fd1105be2f773da0b5dd1a860c60826c  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/num_xbound_fun.cc
! 3bccf784a2ebfe4a83b3080297f1bf11  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/range.cc
! 7b71f135b2b792e4707639fb28978663  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/call-default.cc
! bf221caa77f2d463d521643681ea31fb  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/equal.cc
! b564585cfa037890820558a9c8971f5a  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/inequal.cc
! 3ad9b62619a7f5922071400de340a6e0  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/serialize.cc
! 5a148355c613b640bb59016bf8480f81  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/explicit_instantiation/1.cc
! a369a0c24b5031c29e44478a2169d352  libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/requirements/typedefs.cc
! 1ec2a72ceccba97e618bb7484a280062  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/default.cc
! 769d8f982fe31a890ce0311761f1431c  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/initlist_fun.cc
! add5584f4a049b29c494e3018f2f1f98  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/num_xbound_fun.cc
! 194c8d315176cff28b99f8a37fe2d6be  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/range.cc
! fd35a30659d18b4dfc6f69461d687867  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/call-default.cc
! 4f0e0941bf06e46eaf3b06200922faf1  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/equal.cc
! 83db96072b3ad503c071cf41b5efa8af  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/inequal.cc
! 285b9fbe6eb96b17128891366fa3ff44  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/serialize.cc
! 012a1e2bb69ccb307a6cc5fb0116da25  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/explicit_instantiation/1.cc
! 2385191d748d4ab0d4ec79db20ae2569  libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/requirements/typedefs.cc
! 1b250c089f41e042104ffd381b6e181b  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/cons/default.cc
! 7e7e1ad1f1411b367f81e5b895f204ad  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/cons/parms.cc
! 04d0617fce109e2c86ae311bf1f33b5d  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/operators/equal.cc
! 370e026290aa46df186a40a12a7f14b3  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/operators/inequal.cc
! 3adec1e2cc956a89aa0c22698050030b  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/operators/serialize.cc
! 5ca8d34240d50fee27f37ebc18217306  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/operators/values.cc
! b13057ea5e25d9bd21fadbf9a7a5901b  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/explicit_instantiation/1.cc
! 7f99ecaaf3374e5d961f96f2e1a4076c  libstdc++-v3/testsuite/26_numerics/random/poisson_distribution/requirements/typedefs.cc
! 42c2c0225a7158e51f7eac21fd146318  libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc
! fb8dc2f561a0616b43c81b8d8ce74c49  libstdc++-v3/testsuite/26_numerics/random/random_device/85494.cc
! 6acc7376afeb4884a1c2f760051d9637  libstdc++-v3/testsuite/26_numerics/random/random_device/94087.cc
! 13e7dadb883535e7c011e380914e549e  libstdc++-v3/testsuite/26_numerics/random/random_device/cons/default-cow.cc
! 05a9484f70c4470779d6194bc1c76db9  libstdc++-v3/testsuite/26_numerics/random/random_device/cons/default.cc
! 125898b68d93baa1bae55de48278ac76  libstdc++-v3/testsuite/26_numerics/random/random_device/cons/token.cc
! d7a4e5f0068168877eb20afb22153f8d  libstdc++-v3/testsuite/26_numerics/random/random_device/entropy.cc
! 45e102b8a6441648de3398dbd7bf50ef  libstdc++-v3/testsuite/26_numerics/random/random_device/requirements/typedefs.cc
! 60f0a90572951b86b06129fab6f29694  libstdc++-v3/testsuite/26_numerics/random/ranlux24.cc
! a888df873bcfe3492d8c1733796f0e8e  libstdc++-v3/testsuite/26_numerics/random/ranlux24_base.cc
! 1e90e7e1abd3ce1d47c5b022ea5fa143  libstdc++-v3/testsuite/26_numerics/random/ranlux48.cc
! 09419d77bbc9b9a3526af64e9ca3e358  libstdc++-v3/testsuite/26_numerics/random/ranlux48_base.cc
! 59b6f32d4babca2af906910fa385507b  libstdc++-v3/testsuite/26_numerics/random/seed_seq/97311.cc
! 27ac1d2405a360dd99f89e929fe3474d  libstdc++-v3/testsuite/26_numerics/random/seed_seq/cons/65631.cc
! 8adfd15af502c6dee5251675d6035529  libstdc++-v3/testsuite/26_numerics/random/seed_seq/cons/default.cc
! cad618433ca8b8ef6f8f21ffad4b57e7  libstdc++-v3/testsuite/26_numerics/random/seed_seq/cons/initlist.cc
! 7142e5303b04a87885cb4aeb005fba49  libstdc++-v3/testsuite/26_numerics/random/seed_seq/cons/range.cc
! 1effe940d941c909303d6d33607ebf30  libstdc++-v3/testsuite/26_numerics/random/seed_seq/requirements/typedefs.cc
! ccd244d16031aa7accf09d33f6332802  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc
! b2821bdfe2e080b61eea40c0dc686655  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/base_copy.cc
! caa80b30c751dddffad9309bdc409864  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/base_move.cc
! dcc0417213dfa19324765cc1e78cb450  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/copy.cc
! 546f89e27bede2b9f5ccb27e90b410ec  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/default.cc
! 485ed89c39e10dd223629e5cb36d6bac  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/seed1.cc
! caf4206684e2433ca123403e6e527d00  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/seed2.cc
! 46a6b7aaab67734e7c4c98f0102b6b9f  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/seed_seq.cc
! 55e3b3d3ba339407cbacc8c92a70f118  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/seed_seq2.cc
! 5c8e89030aa7d8070db4ad579c23612d  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/operators/equal.cc
! 64b4b26d7506bbdca8c3e2dec07ebd04  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/operators/inequal.cc
! 5534ad92e4b42e6bcae3d3d8a66703e1  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/operators/serialize.cc
! 3d75f31c93d6e9b1b0448b479e6a7fd0  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constants.cc
! 09e8329e6ab5bc084aa0702ec32017d5  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constexpr_data.cc
! dd357b9cfc019404c492ddfc0376db51  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/constexpr_functions.cc
! 5180236e861de3ceddbe4f76f918b87f  libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/requirements/typedefs.cc
! b1378a93c380048c8fafe08782a41f90  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/cons/default.cc
! f55c017555fb803b4c98cf15dfe17488  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/cons/parms.cc
! 20d25132e2100934c0b35a0b09b079bf  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/operators/equal.cc
! 2077455effc04763576c3b9a50f626e9  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/operators/inequal.cc
! ce14cd4e63e320814d2f98c9b2e3d47b  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/operators/serialize.cc
! 685eb43ae58a5620256e185b19f1a657  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/explicit_instantiation/1.cc
! 05bd77ea5b2caf1c741de43da3eff997  libstdc++-v3/testsuite/26_numerics/random/student_t_distribution/requirements/typedefs.cc
! cae9f40b3c36adf09ab9b7da36be9188  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/55215.cc
! 2ea596dd6e6b2bb562905a341572f854  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/copy.cc
! bfdc5dc97c05960cacae7929b0d95463  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/default.cc
! 22ce99a43c709f3b69bedea51fb0e19c  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/seed1.cc
! 8035cb25ca6db4ae2b1a24b338e42709  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/seed2.cc
! 50d353e4a40f0d30d9c999f73f6c8992  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/seed_seq.cc
! 30502daf5b732cd800a7c4485998a0de  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/seed_seq2.cc
! 0e75bdb8dc9e371e0f7cb73e3e5bb134  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/operators/equal.cc
! 1469c4c34392494908a3bc1e75442d9f  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/operators/inequal.cc
! a0695e290cfec642bdcb909dd48b4ab3  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/operators/serialize.cc
! 63da2d5a33e4fbfc85147c531b788546  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/constants.cc
! e11f018ca8022865587b9f9f1855bbb5  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/constexpr_data.cc
! 1f5ebb952e650cf672243231dde6c097  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/constexpr_functions.cc
! c251cef822a2c22ccb30b879ac847e47  libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/requirements/typedefs.cc
! ecc64e29efdd2fc68e92b184349630e5  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/cons/default.cc
! b0661c9681bbca302c2490c1993da049  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/cons/parms.cc
! 681b1b2994428e751ad58310baab4765  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/operators/equal.cc
! 05e6e9d2e2a36212e43a72d84d5a7e31  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/operators/inequal.cc
! 25e1e776d7812ccf5014dd03d5ce68fe  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/operators/serialize.cc
! a6c0dc4db2fceef6a7ba3e7076bf476f  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/operators/values.cc
! 0b06b5275f96e6620da5e427778009c0  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/explicit_instantiation/1.cc
! de8968c7affffbd954e94c2f6aee0ee1  libstdc++-v3/testsuite/26_numerics/random/uniform_int_distribution/requirements/typedefs.cc
! f7753c28cf98177b6cae13ab2bb5afa6  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/cons/default.cc
! 829efb5362c004eda5dca02d4de9a5d4  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/cons/parms.cc
! 0525dd96ef8cc1deccb9ecb99b0107db  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/64351.cc
! 177d4433d604b4de06bcae16656abbbc  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/equal.cc
! 056e074647234a3576e191b91f1e9ec7  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/inequal.cc
! 9b5d122a7d28fb10a1a7342f39d14f06  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/operators/serialize.cc
! 932bbe0ff4cd0c29fb3826a89f4c54e8  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/explicit_instantiation/1.cc
! a16fce135378c06fb9450ea1a9f23491  libstdc++-v3/testsuite/26_numerics/random/uniform_real_distribution/requirements/typedefs.cc
! 6ba9e573cbe5b5d8c67cd95fb0aa6c9d  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/cons/default.cc
! 5a2d2b16f7da22258f3d2233b283aa9e  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/cons/parms.cc
! e1eb2244e790685c23046b6fab8ea8cf  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/operators/equal.cc
! 65e6097a678a016a03b737e751eb4e57  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/operators/inequal.cc
! 26a5b085685116a29209f34ad7b6bc7e  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/operators/serialize.cc
! e606dac008a7b53aeba87d6b7c1d59a3  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/explicit_instantiation/1.cc
! 8df2556e29db9b50e432fa5aec294910  libstdc++-v3/testsuite/26_numerics/random/weibull_distribution/requirements/typedefs.cc
! 166d77ed21fa6c972eee049a4bf7a78a  libstdc++-v3/testsuite/26_numerics/reduce/1.cc
! 214f2aacf208ce8a0a1bb9287b9b5d6f  libstdc++-v3/testsuite/26_numerics/reduce/2.cc
  51f14806bbec80c2d5883800a91dfc2e  libstdc++-v3/testsuite/26_numerics/reduce/95833.cc
! 91e8211850517bcc7dc4acac76dbdd87  libstdc++-v3/testsuite/26_numerics/reduce/constexpr.cc
! 0749a02ea7b79c6edc85699c5619bf6f  libstdc++-v3/testsuite/26_numerics/slice/1.cc
! 2c23dde5d13613601b233ddd3953d246  libstdc++-v3/testsuite/26_numerics/slice/compare.cc
! cb2af1295021bc4e6ba50140f8d792aa  libstdc++-v3/testsuite/26_numerics/slice_array/array_assignment.cc
! a7c96163af1d4e05c4969f51820095f8  libstdc++-v3/testsuite/26_numerics/slice_array/requirements/explicit_instantiation.cc
! d78fe2d8156c57ae2d73145be404186b  libstdc++-v3/testsuite/26_numerics/slice_array/requirements/typedefs.cc
! 67e8a1088b527b27f85a3d6c1a6f9e1a  libstdc++-v3/testsuite/26_numerics/transform_exclusive_scan/1.cc
! 92fb123d695db25db41f0aa15958216b  libstdc++-v3/testsuite/26_numerics/transform_exclusive_scan/constexpr.cc
! 3e8da00550b01aef7693704d66b852bf  libstdc++-v3/testsuite/26_numerics/transform_inclusive_scan/1.cc
! df1d116789c084aade453bc604f719aa  libstdc++-v3/testsuite/26_numerics/transform_inclusive_scan/constexpr.cc
! 44895a4d43b0e584e64d6661a1a9761d  libstdc++-v3/testsuite/26_numerics/transform_reduce/1.cc
! 9c377c92aca6b4de8b3dd20514258168  libstdc++-v3/testsuite/26_numerics/transform_reduce/constexpr.cc
  525e5798867d708e7cc13551760f93c8  libstdc++-v3/testsuite/26_numerics/valarray/103022.cc
! 588d8f427f86680cb5c25808306a406c  libstdc++-v3/testsuite/26_numerics/valarray/27867.cc
! 54e2c6fbb7579ccc6bbbc142b3a1b594  libstdc++-v3/testsuite/26_numerics/valarray/28277.cc
! b8943257fe9d0ecc2dacaf6b047ab124  libstdc++-v3/testsuite/26_numerics/valarray/30416.cc
! 094c9f4d214524db10d0bae30118e644  libstdc++-v3/testsuite/26_numerics/valarray/33084.cc
! d9b47f0a1cc6d4fbadbff8d6b15e1708  libstdc++-v3/testsuite/26_numerics/valarray/40691.cc
! 404c6be2e1e2d8ef7bb5db3db165f5c9  libstdc++-v3/testsuite/26_numerics/valarray/69116.cc
! a4789a9fb7704ece09c857b419d7c0fe  libstdc++-v3/testsuite/26_numerics/valarray/83860.cc
! 9483d99a7e85848726c8b738918ea676  libstdc++-v3/testsuite/26_numerics/valarray/87641.cc
! e1a4872345d98ae74d7ba8742ebf9932  libstdc++-v3/testsuite/26_numerics/valarray/95592.cc
! 3cdc2530ed2058558cae975cd481912b  libstdc++-v3/testsuite/26_numerics/valarray/algo.cc
  3e191d68e11822f58de5e4bd15365ca5  libstdc++-v3/testsuite/26_numerics/valarray/binary_closure.cc
! a4a7b850b2356ad923a0898c81bcb239  libstdc++-v3/testsuite/26_numerics/valarray/const_bracket.cc
! 0eeebc304fac03fa7d99490122964403  libstdc++-v3/testsuite/26_numerics/valarray/deduction.cc
! a43772f8f4d027e524bde46af3f9fd56  libstdc++-v3/testsuite/26_numerics/valarray/dr543.cc
! 761bb939db85d0737486848b98476929  libstdc++-v3/testsuite/26_numerics/valarray/dr630-1.cc
! f641c8bcd7b52ed19afcee5274b448a1  libstdc++-v3/testsuite/26_numerics/valarray/dr630-2.cc
! 52f4453cbec25b45fc118aa9b0c86151  libstdc++-v3/testsuite/26_numerics/valarray/dr630-3.cc
! 63c09b03a03a966330d1c0e58e78c6a5  libstdc++-v3/testsuite/26_numerics/valarray/init-list.cc
! 4c90d21077b597b158af833fa3d4bc97  libstdc++-v3/testsuite/26_numerics/valarray/moveable.cc
! ee069954208354b2fd74976707790a99  libstdc++-v3/testsuite/26_numerics/valarray/name_lookup.cc
! d188859866ad0f3be26b28195147aa12  libstdc++-v3/testsuite/26_numerics/valarray/noexcept_move_construct.cc
! 08be79167aabc7dd4571710300bc3088  libstdc++-v3/testsuite/26_numerics/valarray/operators.cc
! 66795cfdd7bfa711852b5beada02f66c  libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc
! 65a46b4b153f44b483cd9aca3a414ae2  libstdc++-v3/testsuite/26_numerics/valarray/range_access2.cc
! 1965ca71768f88b9f8c09352095862ca  libstdc++-v3/testsuite/26_numerics/valarray/requirements/explicit_instantiation.cc
! f024e77ed417c8d055ad34f44102100e  libstdc++-v3/testsuite/26_numerics/valarray/requirements/typedefs.cc
! 8aab6c309c92a549161d5fad7ac5adde  libstdc++-v3/testsuite/26_numerics/valarray/subset_assignment.cc
! cdd509fe77fc0905df42d7d39316728c  libstdc++-v3/testsuite/26_numerics/valarray/swap.cc
! f054b5a1cc547dd766790e9415847555  libstdc++-v3/testsuite/26_numerics/valarray/transcend.cc
! 457d4423087cc030287160739eb07879  libstdc++-v3/testsuite/27_io/basic_filebuf/close/12790-1.cc
! d2ae459bc15ff91d27df12050cd9d344  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/1.cc
! 19c74bb5b9ff69dfc237696de6ed005a  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-1.cc
! 8967d1ab46c5a8aae5432354fabe475d  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-2.cc
! 6e4e2c349c170a3180b817234a3f9d4b  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-3.cc
! 07e24c9f862f0e7e62ee59e3937718a9  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/12790-4.cc
! 0a64cfbc7c59e11b0356478668332465  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/2.cc
! 2c238a87278bb7cdd43e971846dd538e  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/3.cc
! 42277b24d5c5ba40a332eaf3c4805d0a  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4.cc
! fef77b14589b9eb4dc04981d15613624  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/4879.cc
! 5efb63d9def6a8c700eaa7ef0d08e9cb  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/5.cc
! 2bae0cdc8f3b7966f7da49cc9ee046b0  libstdc++-v3/testsuite/27_io/basic_filebuf/close/char/9964.cc
! a441e8b7cbbc7dc3695e5bc6c17142aa  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-1.cc
! 07fa1f7272078814e4abb15f8480b180  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-2.cc
! 2f493a7929908dc76c24fd4246ee0f55  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-3.cc
! 0ad9a0c240740b1e3993436c1dd1a973  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/12790-4.cc
! 9bc71744f8430b7d1cdc69d7eb665eb8  libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/81256.cc
! c8bf5d093d2dec783296e37e642f4a55  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/2020.cc
! c65ac04baac0dd32ea03cbc3807b5ab6  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/char/1.cc
! a957854424c6001aef94ced8cbe36300  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/char/copy_neg.cc
! 49c4d282d44df945a2a63fff6efe5b12  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/wchar_t/1.cc
! 592a9fef012e87bd68635d611f39d10f  libstdc++-v3/testsuite/27_io/basic_filebuf/cons/wchar_t/10132-1.cc
! 895c6121986a20af02b2cb6cc22a08ee  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/12206.cc
! 0c102842e6a615d2313b4a6e7d200b02  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/1.cc
! 3bdc7defd5b5f32c30e1d64b4421460c  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13007.cc
! 591f1a69bdc31b1748d6bc1840f9196a  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-1.cc
! 60f5e09d4d185f11377b84e9aba533c2  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-2.cc
! 4a5c42e2100ec16ac909708f9ab8ef62  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13171-4.cc
! 7609971e91220ce873244929a0cc9afe  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/13582-2.cc
! f0ebbf6cb73d75b6fabcef2f5a04900d  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/14975-1.cc
! b47f6a98418ba2d7bc6a5a26fcf36d9a  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/2.cc
! c5730c91e940ff86ffc6bf741ff37b53  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/3.cc
! a760237ff6017488bc331b482e68d44b  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/char/9322.cc
! 50b3a7f024e54aedc8dceecc86482f16  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/1.cc
! 71e9a8ef29cac34f5462df3e6bf35a68  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/12868.cc
! 69195fa52f6afe3578f0ff845ac238b0  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13007.cc
! ad8dcc470107226d49a4d447aca8bc08  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13171-3.cc
! a94bc7fb9d21fdd2edc1d9ce1516a1bf  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-2.cc
! cd227355dd616d9e78e6d252dbbeaeb8  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/13582-3.cc
! 93d18b6dc91223ccf4485a70590fb306  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc
! 0bbebe7e4c808dcfac513bf7c0d78ac9  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/2.cc
! 38d0c62dbec1a5efcef56e9f487a1d3d  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/3.cc
! 57285510fe3a04ed126af7e13898599f  libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/9322.cc
! f606c163f454c6fa94b2ef78b041ded0  libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/1.cc
! fb049254ff8a3d01035f5c107e4a7c2d  libstdc++-v3/testsuite/27_io/basic_filebuf/in_avail/char/9701-3.cc
! 3ae30fdf98a45e0025aeae73992f4ef9  libstdc++-v3/testsuite/27_io/basic_filebuf/is_open/char/1.cc
! bb1250bb096213671cc3aaef445f3725  libstdc++-v3/testsuite/27_io/basic_filebuf/open/12790-1.cc
! ee9904d4437ba62a3fd740721bc07e0b  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/1.cc
! 1c72b673b55f75b98e19c0518c030646  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/2.cc
! 1f74bc55e17635c2d128eeee87ecba13  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/3.cc
! 650aa3bfb0b376e4a8247080dbcf6901  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/4.cc
! a105cfc6b475eba8d6e6772924a4a0bd  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/5.cc
! 94f8e430e15ba35f8d06ed7cdd0ea2ab  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/9507.cc
! c00c8a0a4cbd62716112dbbc9fd0a0f6  libstdc++-v3/testsuite/27_io/basic_filebuf/open/char/path.cc
! 7e913c01bc444aea542c391e158cf904  libstdc++-v3/testsuite/27_io/basic_filebuf/open/wchar_t/1.cc
! 994469cd586eb200d5ce0ad47c3dd14b  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/1.cc
! 95e95eaad3bdc4e51bace1b2fadca51a  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/13858.cc
! b68b157d2306eedea58e7a9b1225d9cc  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2-unbuf.cc
! e8a576e797e9c1a3fe56eb3f3e7550b8  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/2.cc
! 158eb0a1463051ce750826f0f1d135b7  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/3599.cc
! 25558f85e559a83bd4553d6b781e490c  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9169.cc
! a368267606bb4261376cd5342cf6f30a  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9182-2.cc
! 2323d72e8c3501b9b43e7854223d5a76  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/char/9988.cc
! cba882780f31cd2bca697cbca4f5f715  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-1.cc
! 69339db373b1b80b3027712b7c5b37aa  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-2.cc
! a2d6b9f428f291f5295cecf7e4e78422  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-3.cc
! 6b4bcf73a4a6bb46038a941e275bb27b  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/11305-4.cc
! 123df218236c8f506cf2ac9d5169cae0  libstdc++-v3/testsuite/27_io/basic_filebuf/overflow/wchar_t/13858.cc
! e9cb3f09bd6c0ffd88d9d040896e0e39  libstdc++-v3/testsuite/27_io/basic_filebuf/pbackfail/char/9761.cc
! 991b527ff7b56d887299980e249138f3  libstdc++-v3/testsuite/27_io/basic_filebuf/requirements/base_classes.cc
! 66b1c6fe1bebe6d13b5e8bda343a34fc  libstdc++-v3/testsuite/27_io/basic_filebuf/requirements/explicit_instantiation.cc
! 4ea91872961560b434e72a0ca4d907b2  libstdc++-v3/testsuite/27_io/basic_filebuf/requirements/typedefs.cc
! 3e94b2df07286dcc76ee11d4198e0d5e  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-in.cc
! d7ec87fdcf66d3f8a89cb4f212867953  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-io.cc
! 9aab1afe96e0a658434a78755c94c68e  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/1-out.cc
! d438f9b24f9ea81e1cfb6b4015261399  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-in.cc
! 52b7fb8b75695856f42009c6569995ea  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-io.cc
! 2db7d2035ca1068a022c43c9859e63b7  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/2-out.cc
! d6c97bd62c383a1604ab5bdce5f385ae  libstdc++-v3/testsuite/27_io/basic_filebuf/sbumpc/char/9825.cc
! cd8db3ab199e698f4b794e8ffdb9a36e  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/10132-2.cc
! 5c53d5329031eb8247f316471bdee79d  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-1.cc
! 60624380d1dd1296b371bd44cd767b2c  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-2.cc
! 04d6dc0e711ab098a3e214966a6db033  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-3.cc
! 7d021e7cacffb6309ae9e7cae3e87f34  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc
! 53550f51508e18ef424304f77ff518b3  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/45628-2.cc
! 9efd32698d0be4a4e80132a55302a3cb  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc
! 662695a1b7ea978d5f0307cee4b30ee5  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc
! fc1b19bff91b110287a9cb287e124a04  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc
! 615a5e9c814dfb1f28735f19edc1034f  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/11543.cc
! a6b0487298b537e83f61b8c6ecb7a26a  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12232.cc
! ae2861120cca4b4d3b622f033126aeea  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-1.cc
! 3df73fa19ca52803680207fa30221bee  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-2.cc
! eb14c7e9d2c6ab8477fa7dfed91a631c  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-3.cc
! a8979be1f009e906d4c946901599350d  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/12790-4.cc
! 09928508eb9ebcdcf16fe5112819600f  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc
! 153449d597f738b81c9e25b0c699de41  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc
! d18e4ca2b7acd755f2e547ded2db2b1f  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc
! 96e80aa33dd9fa0c54e50c1cc7b8f1a0  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/26777.cc
! 98f005dd6595cc37b6ed605a32af5df4  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-in.cc
! fdbf9c7d380f18d6669b38320d9b0235  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc
! 8355700c8e5e23c9227a5572cc5e857f  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-out.cc
! f7582bdf626ac18876b21ce2e8103e07  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/4.cc
! 36e9774d2b2e7a74c178b2475b654fb8  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/45628-1.cc
! 4f6da5986ded1e3bdb9a50438aa20fde  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/1.cc
! 984eae43ab4b1badea4dacc8434805c4  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/11543.cc
! 2862f4e24c53161e2545df40ff1d5b16  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/12790-1.cc
! a6fb97c0224be917683ac73f27f7f3ae  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/12790-2.cc
! 34ab52ee4300478720be5df5d77c9c4e  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/12790-3.cc
! f649c5adfd8f8381e8b037970e2914b0  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/12790-4.cc
! c0816e20e4595c9f6da195a27c62342d  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/2.cc
! a3df6341558e425498e4ea17dd09331c  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/3.cc
! ec3b76a35ee24c9ddf6038a2ac7f33e7  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc
! 816bf9ada81d7591b0b7533e5ab46a10  libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc
! c1632363e1a146da2cb671dde212dd94  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/10132-3.cc
! 8caa096f901656b357af07667a60166e  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-1.cc
! 361350a743d5f33319c0d7b3682cc63a  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-2.cc
! 4bee2d90b7cb0f02edbb27320502ba97  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-3.cc
! c8895087bb424bc99b7888e48d478df5  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-in.cc
! 38c8f659a3746ed582228d8575cec255  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-io.cc
! c54539c17454f0615ded65e092101e33  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1-out.cc
! 01d0e4edc6e4746ddc7e24b55ce4ebc1  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-1.cc
! d6dcb86baf9027ca86fa1e277576e1cc  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-2.cc
! afe2b95e62876bf0ae8339b1ad3963d0  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-3.cc
! e4947b4f37df091c2e60f42d0f6a4e3e  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/12790-4.cc
! d77f48ff5cfa999c1db37de9b923933f  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-in.cc
! 8d6dc30b14de228169809a079cdd7139  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-io.cc
! c16688ffe258a39375ad412b60cbd4c1  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/2-out.cc
! 6154506460d77ed4488d4f6a7550bf7d  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-in.cc
! 5c03279401a145b82fc4def5417582c9  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc
! 9e82aa2a02fc5653febc4088801c9970  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-out.cc
! dafefd52fcf0cdffa1ac129901c0612d  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/1.cc
! 66a8ae0b6e994d73280143253473e41f  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/12790-1.cc
! 438877ef879ae410b6fab9579400178f  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/12790-2.cc
! 08f8d799d7f699d23f6e706df6bcf9be  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/12790-3.cc
! 1f9558066962c245bd497b0390bacd45  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/12790-4.cc
! 2c29be5e147c2ea4887bd6441a07fd9d  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9874.cc
! 164219d1374e8f29ecdcf174299453d6  libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc
! 3f171ccbbd3a0a2912350405a8ee26eb  libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/1.cc
! 54f237e629e83f809ad92a93d1048b4c  libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-1.cc
! 3fd354eb71a23d45e7f402d6ab69cb93  libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/12875-2.cc
! e64cc7accc74b08a4c8596aa543be0b6  libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/2.cc
! acb1b3df78a959f1d21f9f1ee33bc134  libstdc++-v3/testsuite/27_io/basic_filebuf/setbuf/char/3.cc
! 8e86df164f5c950407e9664a1253fd56  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-in.cc
! df44488d859a2cc8e099a6fd2f82d480  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-io.cc
! 038b773335aa69c9188ba7dfcba83642  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/1-out.cc
! b03a1ee99d8ad20430cf197e6fd763cc  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-in.cc
! b7939c6700c368676486b216bacabec2  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-io.cc
! 6a660532bf570366360d2a04c75354d3  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetc/char/2-out.cc
! 14b11d50bd39e47d4920cf9413cf5b69  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-in.cc
! 90710cb4b9caf056c5dfa4cb72947f85  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-io.cc
! 10d246929743dcd205673f5381bba5ee  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/1-out.cc
! e02689b09d4625288b736eeb3c7b01c0  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-in.cc
! 2c62ffa0745399df43d9ddc43653e741  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-io.cc
! c85030e0035b2068b6c986648ddb9ce7  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/2-out.cc
! e145cf35fb7cc3a5a6317904e6d1991b  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/3.cc
! 59c3278bf0cd3137e93cd55f269a3c73  libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/81395.cc
! f851a408280da5e242ff1d157d2197c0  libstdc++-v3/testsuite/27_io/basic_filebuf/showmanyc/char/9533-1.cc
! 1a21e7523c0e8831017593bde3119a38  libstdc++-v3/testsuite/27_io/basic_filebuf/showmanyc/char/9533-2.cc
! 4a7fbb2754366af5d7bce9c724a287f1  libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-in.cc
! ce81db40b69b8253fdb87c5f02f5024f  libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-io.cc
! 7fb6dd29ac928a8685bfe74cb5ebcfec  libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/1-out.cc
! 8dc9f3bb4edd4b700848bf3005c2836b  libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-in.cc
! 401455e120f8ba6b7d675ee41c8b219a  libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-io.cc
! a4c90f1f9fadb1470a5b5090a9e94969  libstdc++-v3/testsuite/27_io/basic_filebuf/snextc/char/2-out.cc
! 3fc410859d565157e4213aa7be5c93a1  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-in.cc
! 32155c1cadb40aee44dc91339c7458d8  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc
! df3aa3803d036ee51a51983b7b4e310f  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-out.cc
! d8a28b6bc2ed401e23bddc662c435a8c  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-in.cc
! b3a01d07374de390c19520a7fd6f1a7a  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc
! 01f88e0e2e8aafe505da34baf4d8407e  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-out.cc
! 9df0cec034d87578ad13898705e0c30c  libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/9425.cc
! 32d64e77c755882be88faa26883da2c8  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-in.cc
! 934c3c9a40e679cc11f40f223d4bdd98  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-io.cc
! 3a0615716eecc85ba52607de913a2451  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1-out.cc
! de332b8ab930e2ec383aeccfbd5ee7d9  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/1057.cc
! dd36e6253e6fb1b72a217f10faf06f49  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-in.cc
! 8b2662c0a58ded310fdc509a4413340b  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-io.cc
! 682a9f4c80751d1019cbacdbcf17f1d8  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/2-out.cc
! 7bca9fc542d1a3050478ad122fafe05e  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/59427.cc
! e3a68da14af50ecc2c2618010380bdb6  libstdc++-v3/testsuite/27_io/basic_filebuf/sputc/char/9701-2.cc
! b5cd396cb59ac9c928c6bc48ec57b200  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-in.cc
! 33a4df7d1d7fcd0309f85f9d6ad39e48  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-io.cc
! d97d71588942a90456ee83529cbc3bee  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1-out.cc
! dd9fd5fbcdc320ae8c995732a41239d5  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/1057.cc
! 5c3f01366dd8f5f55fbb28ac8226670a  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-in.cc
! ec9bc67f6161e2342cce2db6b10ff41d  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-io.cc
! 8efd6c26cbc695c9a096bd815990ba70  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/2-out.cc
! c94d2976878a39cbe095f800f2be049d  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/59427.cc
! ccc5d929111bc16f8bdfd3162357bd23  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/9339.cc
! 4dec951bbd2645fa79672ad02d8cdef8  libstdc++-v3/testsuite/27_io/basic_filebuf/sputn/char/9701-1.cc
! 9802eaf56c937ad6b1c83877551e6b78  libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-in.cc
! 6b8768267f759368fbe80761863002f9  libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-io.cc
! 32f16ea185bf3daed7845a97514b3846  libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/1-out.cc
! f32f418dd3fee7f504d7bc5a8bb5b138  libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-in.cc
! 9f285f6727ffb62450ea39d06212dc2c  libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-io.cc
! 541af3f39da413961093fdab54bf4882  libstdc++-v3/testsuite/27_io/basic_filebuf/sungetc/char/2-out.cc
! a3486595181f7d4bc0b6d54cd89fa6b0  libstdc++-v3/testsuite/27_io/basic_filebuf/sync/char/1057.cc
! 5b298411e17d2b4ecb605bd74106803d  libstdc++-v3/testsuite/27_io/basic_filebuf/sync/char/9182-1.cc
! bd4d1d680b9f9c43b1ba30ad27ecf68b  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/10096.cc
! c7811a1c3b3163ebe5251ac7b4c707b2  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc
! 77542a2ced6665aa4f98a1b444eeddd4  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/10097.cc
! 5664cbd7fbd659a926acfa61dc85b84c  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/2.cc
! 8c6d596684fdeecc157f54b0ad4e3c07  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/3.cc
! 8cbcfef82b480bdfd439fb44636beadb  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/45841.cc
! d5b0124575ccbf70004cf64293482bff  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/9027.cc
! fca1de8b69d429e9ed1fb70db4a5ed97  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/1.cc
! f8d21973c68e8d9486a1cc60eac054d8  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-1.cc
! 39dadd7ed44c9045f4946dd57f5e9643  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-2.cc
! 0b3df663a24af7c1f9f970bf5fda4bd2  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-3.cc
! abb05499aa524519b9777913cf413895  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11389-4.cc
! b6e3822c954c5883dce2a41f05f56c29  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-1.cc
! e0d582fcbd76c838503060a6a5f4817d  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11544-2.cc
! 30fa12c60b046dec8a2e2352346f0d28  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc
! 59453bfdaeecdf3fb62290fc42e23197  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/2.cc
! 43ead71638b3af3fc25d6690ae7c702b  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/3.cc
! f54e426b360e624ae8986ab9d4c7a6fc  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/4.cc
! 26fafe48c3a313f8617e6ec0dc0e397e  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/45841.cc
! e0164bf4c2d0bbdb7b779435482845e9  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/5.cc
! fffc3fca110005323fdb1d8b0cfef9cc  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/9178.cc
! 94ca6a704b777692b468106cf94c63c2  libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/9520.cc
! 93696b984fdc7e4e615d8f693b05980a  libstdc++-v3/testsuite/27_io/basic_fstream/53984.cc
! 817ec6bab387b4dfc0fe3df3ccb8d6db  libstdc++-v3/testsuite/27_io/basic_fstream/assign/1.cc
! 42375f2e26a2e3f1d6e6ca2d51318276  libstdc++-v3/testsuite/27_io/basic_fstream/cons/1.cc
! e9809188a7ebaef2238da5c57103db80  libstdc++-v3/testsuite/27_io/basic_fstream/cons/base.cc
! 4a35c9a3c26fb00ae0f38096e4bd8af1  libstdc++-v3/testsuite/27_io/basic_fstream/cons/char/1.cc
! e45f3ac657d92c81e6921278869ded5d  libstdc++-v3/testsuite/27_io/basic_fstream/cons/char/path.cc
! 668ff091099b290522c8d8bbd4f08822  libstdc++-v3/testsuite/27_io/basic_fstream/cons/move.cc
! 126109e8dfd7aeb96e321a69d6f11eef  libstdc++-v3/testsuite/27_io/basic_fstream/cons/wchar_t/1.cc
! 8ce90b26e95b3d0d116d728158f2f12d  libstdc++-v3/testsuite/27_io/basic_fstream/open/char/1.cc
! 9176f01f6c433881f9df64b80baf07b5  libstdc++-v3/testsuite/27_io/basic_fstream/open/char/path.cc
! c4d513da3ae1d896b16681c95091c7e3  libstdc++-v3/testsuite/27_io/basic_fstream/open/wchar_t/1.cc
! 77b9d3f246c953072ca1579e01310d13  libstdc++-v3/testsuite/27_io/basic_fstream/rdbuf/char/2832.cc
! 724da0d1c7de2143bf3a3444c75cc25e  libstdc++-v3/testsuite/27_io/basic_fstream/requirements/base_classes.cc
! 11d65b09a8224aff3723ec1d8d6c5314  libstdc++-v3/testsuite/27_io/basic_fstream/requirements/explicit_instantiation.cc
! 07e661ff8ef5abfa2854b2f86f59ce5b  libstdc++-v3/testsuite/27_io/basic_fstream/requirements/typedefs.cc
! 5ef988846e6969b83cacfa82a1c7bb4c  libstdc++-v3/testsuite/27_io/basic_ifstream/assign/1.cc
! 9f9d57e650e0a4a28e73a027ed9eb6a4  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/2020.cc
! 57093202c280bb068f545e3f728eb036  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/1.cc
! 2cf474a58297e7d64ba450ffd155f81a  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/2.cc
! 4fff2f82430d175cf74d4765ab4a98e2  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/char/path.cc
! 8810814d384912152b0d29032be4458f  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/move.cc
! 1ca3cbb2b26273fec55731ef6886e116  libstdc++-v3/testsuite/27_io/basic_ifstream/cons/wchar_t/1.cc
! 5b1cc4698556cf7746ca18431d536c27  libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/1.cc
! 34bd44b36c2b062258a6123e4ba5684e  libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/2.cc
! 5ec37bfcca7636a07936403a9acd989b  libstdc++-v3/testsuite/27_io/basic_ifstream/open/char/path.cc
! a19cbb88c1df0ac376592f7966324c75  libstdc++-v3/testsuite/27_io/basic_ifstream/open/wchar_t/1.cc
! 975ed6556b3dbc16a9825a755210d532  libstdc++-v3/testsuite/27_io/basic_ifstream/rdbuf/char/2832.cc
! 4e6d2d88ff67b38946ac571e015aa3bd  libstdc++-v3/testsuite/27_io/basic_ifstream/requirements/base_classes.cc
! 7cb81a1b5e176d64a02f561fb8100203  libstdc++-v3/testsuite/27_io/basic_ifstream/requirements/explicit_instantiation.cc
! feebe8b6dcdadcffa095b02aeded0da9  libstdc++-v3/testsuite/27_io/basic_ifstream/requirements/typedefs.cc
! 31006df3165ab5dc97f41a6994d8d125  libstdc++-v3/testsuite/27_io/basic_ios/clear/char/1.cc
! a917f5e6504ba12c3602fa3d69f92085  libstdc++-v3/testsuite/27_io/basic_ios/cons/2020.cc
! befd36e4268f0b3b2f770d43c5441787  libstdc++-v3/testsuite/27_io/basic_ios/cons/char/1.cc
! 48d722b4978a4ae859d2bcf22268e1b6  libstdc++-v3/testsuite/27_io/basic_ios/cons/char/2.cc
! f1e512236aa616ac29191aee8e6de883  libstdc++-v3/testsuite/27_io/basic_ios/cons/char/3.cc
! dd7cb97cb249022a1510c2f73338cb95  libstdc++-v3/testsuite/27_io/basic_ios/conv/bool.cc
! 436c849dd0b218ffcd196dafec8abe39  libstdc++-v3/testsuite/27_io/basic_ios/conv/bool_neg.cc
! b13fcab06a3dfe2470dd32ba60ad0f3c  libstdc++-v3/testsuite/27_io/basic_ios/conv/voidptr.cc
! d5f349c2070a0a81d2aa008a0f63ff98  libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/1.cc
! fe96150a123507cd424d2720d33173b8  libstdc++-v3/testsuite/27_io/basic_ios/copyfmt/char/2.cc
! 857223f3f6309ef5e83b410eb1cd3a3d  libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/1.cc
! 6f7432a533f5f2b2a44eb38800097e6c  libstdc++-v3/testsuite/27_io/basic_ios/exceptions/char/2.cc
! 778825dcddef27c15977db77ee15cc89  libstdc++-v3/testsuite/27_io/basic_ios/imbue/14072.cc
! e77aa3b3ad4094853f10960afe7e0c4a  libstdc++-v3/testsuite/27_io/basic_ios/locales/char/1.cc
! 4b4231a3d162eb3c9f7ade4171637f5d  libstdc++-v3/testsuite/27_io/basic_ios/requirements/base_classes.cc
! 0707421b05f87fd45116f7838a1401ea  libstdc++-v3/testsuite/27_io/basic_ios/requirements/explicit_instantiation.cc
! b79006c5740a247a3e208ebd7b9b6503  libstdc++-v3/testsuite/27_io/basic_ios/requirements/typedefs.cc
! 334d2ebdc8388dcd8d29e2be5c0becf6  libstdc++-v3/testsuite/27_io/basic_iostream/cons/16251.cc
! 4f0743a70fb733c046608ab6f08d55a8  libstdc++-v3/testsuite/27_io/basic_iostream/cons/2020.cc
! beec5622c3883bf3d51f3ca23b2813e5  libstdc++-v3/testsuite/27_io/basic_iostream/requirements/base_classes.cc
! 4f992903af9fa41a6c77f2d245d7086e  libstdc++-v3/testsuite/27_io/basic_iostream/requirements/explicit_instantiation.cc
! 472c41e25187e85df70c3d644d09d73f  libstdc++-v3/testsuite/27_io/basic_iostream/requirements/typedefs.cc
! 139c0fae054256cf3d6a8507e9dceac5  libstdc++-v3/testsuite/27_io/basic_istream/cons/3.cc
! 4bdcfe9d6c143cde5d86af8f17a71d76  libstdc++-v3/testsuite/27_io/basic_istream/exceptions/char/9561.cc
! e191924cb4b1b7c58b93e2ffd8e50e2c  libstdc++-v3/testsuite/27_io/basic_istream/exceptions/wchar_t/9561.cc
! 627d06d5d0f457ddf42f805e52b95693  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/01.cc
! 612ec18cf6022b14203a55573da5e617  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/02.cc
! 1c8ed3ee57a15dd7a0e1de2d5d8dd1f4  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/03.cc
! 587a23a078f40174a2cfb9573589f1be  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/06.cc
! 456ea6840b8bbfe5045cbb2e2469cf0f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/07.cc
! 1600b72fc020b1d7759e4e5ad387dd20  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/08.cc
! 9c3c53955bc3567724430b0a4513dadc  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/09.cc
! 7e6645f4663da64cfc2f61fcb7131af8  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/10.cc
! b601be6da462376f3cd9c7dc207ac4eb  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/11.cc
! eb336495dfb3d8b9f436c89cce3e607f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc
! 2a6866fe5826070d07c1f5e2f62f4807  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc
! ede6bfaac6705259a996705a0ddda441  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/9555-ia.cc
! 87de9884fd979dece55a67bc9599de8b  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/dr696.cc
! eb67d40d84104467c4ff1481a49c0ea4  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc
! 3006889a21a9659da4d1b22e2570f603  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit.cc
! 8605a9744a6deb1b58129b07e34268ef  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc
! ff57d2b3c0a18de0650eee57ebf6fe13  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc
! 7e1e9e872c5014ace1faade168f01858  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/01.cc
! c1fc153f5a3f43dedf3a2b7b49c6ee06  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/02.cc
! fc14d4fee5a485a41ab79e64b152cb11  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/03.cc
! 5a3184d75a3ad03fd9964d37c2e00f07  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/06.cc
! 977cd438f930bc33a34719982de4709c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/07.cc
! 0ad1d285921eee037db47b06cdd22ec1  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/08.cc
! 71245e1c144f4d230ca75bda85c4a95e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/09.cc
! 7081ce2817dfc6fd12d172b612d9c64c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/10.cc
! 9ba793d07f2202396888152c3b0e95d6  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/11.cc
! 4cec34e02578b17342f1590fd5685603  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc
! cbaa523e096fa20f069f76594e695306  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc
! 8a820bc25105920072dc545a9d21c339  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/9555-ia.cc
! eb7f7203e9a3cec5f1963be85c082bc5  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/dr696.cc
! 378adff664649ea8b8b1dd501acd171c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_badbit_throw.cc
! 76410c38aa2a14a98a1f426602959bd5  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_failbit.cc
! 198b4d6a9b73208832f8234eb75d01b0  libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/exceptions_failbit_throw.cc
! 0142fc6099aabb4edf907c54e09cf7a7  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/1.cc
! 68d214de1357db04b3c35a869981b4fe  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/11095-i.cc
! 6f3242fd670e7407c5586e2f4bddcf27  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/2.cc
! b13e46de88788d5d7c6c3664285d9377  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/3.cc
! 29fecff089a75bee96490cffcfd333f5  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/4.cc
! 9257f85aa612925e3190a92f9c6c3347  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/5.cc
! 41f8d1daac05c9db30fc8e525bf381c9  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9555-ic.cc
! 07d44a502cdc8338233223748f13e7a1  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/9826.cc
! 064c40f1d21b8de85bf737a5f0b16547  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/lwg2499.cc
! 456f22632ad6a4350d0546c9c8d2247b  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/lwg2499_neg.cc
! 5871c32a2023b0f7478135f019156f8b  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/char/overflow.cc
! 4a723fff153f7200e37ba036bb6908a4  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc
! e504fe943b709b7c76dc9d1c9a086f1e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/1.cc
! 8629546d5baf995a315eaa2e23c8fa0f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/11095-i.cc
! 26c9c9222e69f95e578e2dbbc4245e19  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/2.cc
! 617ead89b390bbd02292d1db03ea798e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/3.cc
! 8bdc2d684f95b83b7b6ce20e99c775d4  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/4.cc
! 08254e161a8bade9b48cfdf703feff3c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/5.cc
! d306443e6f94c2e12bcd316dc57ffa4d  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/9555-ic.cc
! 9e20c526402ee3fba64851378749e49b  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/lwg2499.cc
! 40bae218dc9087a8fa49bd4108d3e4ab  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/lwg2499_neg.cc
! edb6928cb8182fdf4a6ca2a5727bd707  libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/wchar_t/overflow.cc
! 1ee522b50dd7e38ef4a5a6005352548c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/1.cc
! 9d4647fad27a938a13d7bc6b7a4d2dd0  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/2.cc
! 4b1247ce1839c419edd96d8f9ae87f0a  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/26181.cc
! 34d1ef488acc528dd6ed28fba5f585d9  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/3.cc
! 43cc6acf06f094b25a4cb41c8ba16e82  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/4.cc
! e29f3c673342acacd010f8f44764f10d  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/9318-in.cc
! 97aae995f055f922d84a94d8b8710da2  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/9424-in.cc
! d81bf1d05346caf285d9a887091bb77b  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/9555-io.cc
! a5863d44042b9fbea20256a4e2e35288  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/error_failbit.cc
! b3ed2c188bbf02bd8308be6638e7857e  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_badbit_throw.cc
! 2d541336d16784ee970430808efe1e6f  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_failbit_throw.cc
! 99a278bb216d02967f8265d26acb1f92  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/char/exceptions_null.cc
! 91d018c65e234b92bc6c2612ff4342d2  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc
! e11b58c8ea3d22bc5ed4927b333ae473  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/1.cc
! 42a02a3f0b703517629a7ac3b464e506  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/2.cc
! b85927add8be3629c7f1789865601ac8  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/26181.cc
! 763c355c8ab753c827efaf5e15bc1c43  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/3.cc
! 72ce7f10831793c484b7c2d287cd6f84  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/4.cc
! ddbce3252267c1665c9eba2908fbc960  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/9318-in.cc
! 22ede017bf2fed967517f3a38773990c  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/9424-in.cc
! 02ba0a6ef769d813a119c34320f949da  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/9555-io.cc
! 38c64c2f6afcdfde1386c059b055f8f9  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/error_failbit.cc
! 260d02f6c1c1cca8670fc5f576d7abc7  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_badbit_throw.cc
! 95e293337c06605c53d77e6e24d58f0d  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_failbit_throw.cc
! f8c59b4a94876e40a2f0ff5ca20d2a40  libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/wchar_t/exceptions_null.cc
! 0a32b6801804858aa047c47314b91ca0  libstdc++-v3/testsuite/27_io/basic_istream/get/char/1.cc
! 995469ae242cab8cecef5211b7da3c78  libstdc++-v3/testsuite/27_io/basic_istream/get/char/2.cc
! c55ea9df8a327c807b5e5977523b3d48  libstdc++-v3/testsuite/27_io/basic_istream/get/char/3.cc
! 3fd0c0a056957aa13f98cc2d5a878bd7  libstdc++-v3/testsuite/27_io/basic_istream/get/char/lwg3464.cc
! 5600d5e22d9c9b6582b95521316c06da  libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/1.cc
! 48088d38fb1ae2d8b7f773582a70c0b5  libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/2.cc
! fd5198b32216cadf812975d7f6b5c9bf  libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/3.cc
! a740390984b85b062939679722a5578b  libstdc++-v3/testsuite/27_io/basic_istream/get/wchar_t/lwg3464.cc
! bf5c7f37389aa263431c8abc66149ca1  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/1.cc
! fdb30224ab68f34d681b9cdca5714eb8  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/2.cc
! da38c6028b4610fc55451c5ee914658f  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/3.cc
! 97a71bc4a7fcdc420fb788d2a94071d3  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/4.cc
! b6e20951da8b2f5695d66154f9c52d16  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/5.cc
! 3e70c7645813d39187cef2ff6868eaa9  libstdc++-v3/testsuite/27_io/basic_istream/getline/char/6.cc
! 5cedc82d7c42e69d2f18a40cc3ab223e  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/1.cc
! fbf7008c23ab1d85ad1935c89f4671d1  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/2.cc
! 1c7bc9eb608c6cb36bbd8487612a731c  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/3.cc
! 1a282e003104d203aacb972c0127456c  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/4.cc
! fc642acb18754f8f9daa5dbd287f5758  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/5.cc
! c3e0991bdd71fd2c2fc091aaa454b743  libstdc++-v3/testsuite/27_io/basic_istream/getline/wchar_t/6.cc
! 42e63bbf88ac22de537417b855dc9a48  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/1.cc
! 1d9e87726c556727b14dc5c43ed883fe  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/2.cc
! bff997dc13d8e0bbabbf63a087098b0b  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/3.cc
! 9c4a8a6588461168df80f31452fa392d  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/6360.cc
! b5f88e5d0a6600e74ba726ef4eb27e72  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/7220.cc
! 2a024ff1c296c904b85f285ac826cc79  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/94749.cc
! 169112297bc6ba76ed6caf20136188ba  libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/96161.cc
! e623029e31578132e49e8e076eca5813  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/1.cc
! 44f1ae0149fc594947cf67fb719364ab  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/2.cc
! b97f42a704ce0534d8e35dc6de7e13ef  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/3.cc
! f3756e770f9b4dac9e6dff48f000c6a5  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/6360.cc
! cad33c950b4df50ff45b8247683e9f78  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/7220.cc
! cebed542a6e388fce6923fd9f0a25ce7  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/94749.cc
! 8cac0d93c3cbea4dedfecf43c3d542dd  libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/96161.cc
! c30a496857a9155183b65b2c178db05c  libstdc++-v3/testsuite/27_io/basic_istream/peek/char/1.cc
! bff9bbf0a09f645e32a454be68cb2434  libstdc++-v3/testsuite/27_io/basic_istream/peek/char/12296.cc
! be9e8e2835af73b8eeeb5090cea619ae  libstdc++-v3/testsuite/27_io/basic_istream/peek/char/6414.cc
! 985e136688a17f920844ef4e14ecf530  libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/1.cc
! b80837bcac493da245eb294be4433baa  libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/12296.cc
! 85f2953f10af8fe0b321701eccbeed23  libstdc++-v3/testsuite/27_io/basic_istream/peek/wchar_t/6414.cc
! eae2d04bd4a40aca1c3330f49cde3a11  libstdc++-v3/testsuite/27_io/basic_istream/putback/char/1.cc
! c44ffdbeafb7965112a009609272d789  libstdc++-v3/testsuite/27_io/basic_istream/putback/wchar_t/1.cc
! b3fb70c5f47f307c34b11aaa53156418  libstdc++-v3/testsuite/27_io/basic_istream/read/char/1.cc
! 7957185e1f3656b244acc6a49d1f5b90  libstdc++-v3/testsuite/27_io/basic_istream/read/char/2.cc
! db494c5ded8457d637eabbe2c74aca11  libstdc++-v3/testsuite/27_io/basic_istream/read/char/3.cc
! 0bebc6215883bfd73fa92b0c79484479  libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/1.cc
! 0ea85b23615e3313afcf0cc2e6c04023  libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/2.cc
! 143b0986b80a7a1d21f71a9ae6302493  libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/3.cc
! b3b00b99ac3b18667ba50071a72310ef  libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-1.cc
! 429bec5ef43dee658ea8490a9e8df960  libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/6746-2.cc
! bcda1d843e99e3bac4049c4b221db2b8  libstdc++-v3/testsuite/27_io/basic_istream/readsome/char/8258.cc
! 9f82cf8918f81b1db027ebd5631763e9  libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-1.cc
! 1893693d4d8c7de576b5f9a46b4d32fe  libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/6746-2.cc
! 71f083f098d913f729bb9e4d551a485b  libstdc++-v3/testsuite/27_io/basic_istream/readsome/wchar_t/8258.cc
! e0fb2d99deae17af2a6131c5a4c5b270  libstdc++-v3/testsuite/27_io/basic_istream/requirements/base_classes.cc
! 8310ac654b958c6469b0da3d8739a128  libstdc++-v3/testsuite/27_io/basic_istream/requirements/explicit_instantiation.cc
! 184667754d600d5b9719729931d0d5bc  libstdc++-v3/testsuite/27_io/basic_istream/requirements/typedefs.cc
! 084dad4078c6db5cea547674ac48a7cf  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/2.cc
! 8ef845cbaa51984d538a0aa87684d380  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/26211.cc
! 271042a72792b62b91e71f7f85c1dacc  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-1.cc
! 0b4ec3fc2a0a31837a6f0dbb1193696e  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc
! 9149faf2a89b98592f2192850f7567bd  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/exceptions_badbit_throw.cc
! beb24361590fadfa62a2429e391d3214  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc
! 848313b78191c497d0630c0bfa799d80  libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc
! c49e64a65188e9c3d9710357116eec5d  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/2.cc
! 2545af13fe8b6b07d01f8233a30c0180  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/26211.cc
! 7a71ae2413d6c8e6942b096e65f983ae  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-1.cc
! 478039629318338a75d1879042964666  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc
! 13f12f57422d0b131c90c15b06832414  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/exceptions_badbit_throw.cc
! 7c1df8206c0138674a835b430b50f8ef  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc
! 6eb708970d5c4970e53251e3c4db9774  libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/sstream.cc
! d3e2a5dff25be0d3f48b345a8d13fc47  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/1.cc
! dfba3cf8f55845cfde3fe68f1df70985  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/12297.cc
! 12aec6124a18645716d150bca0573388  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/2.cc
! c2410b8c87b2f137f35ce3d46b7cbde8  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/3.cc
! d29cfdae68ca0a65137312662ad3abc3  libstdc++-v3/testsuite/27_io/basic_istream/sentry/char/53984.cc
! 41859f8696a712f9b316ac16616dfd3e  libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc
! c5147441ba992dc4fc936422431e0efb  libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/1.cc
! 3fc0f27940ee9824b8ba6e08c202fb51  libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/12297.cc
! 96c2f33255c3d3654c4e36c78c71adbf  libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/2.cc
! 141ff1c18abd1c42a2b484bf55435e41  libstdc++-v3/testsuite/27_io/basic_istream/sentry/wchar_t/3.cc
! a75c0b779a183ea22c7712e1a46ae2d5  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/1.cc
! 3222bbb37d76aae89bb5ed2ab0992cbf  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/2.cc
! e4ec6b3c0cde1da33db3c71160aae6bb  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/26211.cc
! dc5b3dbea1ff040032ceaa744dc9127b  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/8348.cc
! 121475bccfa13f96771774e497e73b0d  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/exceptions_badbit_throw.cc
! 8fa80a4a22154593b5694635e9e8c672  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/fstream.cc
! b1d848dacf9e50da3c11fa40fc2446ad  libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/sstream.cc
! 2b36b0d02d6abf51a9d9840d5ea7e3ed  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/1.cc
! 00ee4c0e55576e0eeee12f749a47ce9f  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/2.cc
! 779aa80b1f11e69f3b3741d9ebfc1b24  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/26211.cc
! 368a7446d4e9c9ea36c7fc07a66244f4  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/8348.cc
! 8efdad44f25864ed721106da4a63d93a  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/exceptions_badbit_throw.cc
! bf79f8e5246ce8d9339ec54fd8847c61  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/fstream.cc
! e8b427e3eb86dd2664ae8a69d75a5f85  libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/sstream.cc
! fd5292eeb009a38b0eadaabe76f1a100  libstdc++-v3/testsuite/27_io/basic_istream/ws/char/1.cc
! f839f1109e54bd94ee7c87d858176de5  libstdc++-v3/testsuite/27_io/basic_istream/ws/char/lwg415.cc
! bc8e7c75e89aa04c400a53d8981d7aec  libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/1.cc
! b9907ab1fd112fa27bbaea52ca154a99  libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/lwg415.cc
! c1e50c66383c48c0cdcb2c894bd6961d  libstdc++-v3/testsuite/27_io/basic_istringstream/assign/1.cc
! ef59aeb83a9cb7dc4e8742cc23badc77  libstdc++-v3/testsuite/27_io/basic_istringstream/cons/2020.cc
! ad2e31c5b3788c7599cfd3a3c801aea4  libstdc++-v3/testsuite/27_io/basic_istringstream/cons/char/1.cc
! fab61aaf5cb79c7c4d1840612a784926  libstdc++-v3/testsuite/27_io/basic_istringstream/cons/default.cc
! 52dd24ee1c7301392b9fcb5588a21962  libstdc++-v3/testsuite/27_io/basic_istringstream/cons/move.cc
! 1d342cf4f479fd7e130581f0cacd16d8  libstdc++-v3/testsuite/27_io/basic_istringstream/cons/wchar_t/1.cc
! f3c710c1ea6f7a6c9458a87e27e9d718  libstdc++-v3/testsuite/27_io/basic_istringstream/rdbuf/char/2832.cc
! 80dff5ccc7265e9b1346d471a007105f  libstdc++-v3/testsuite/27_io/basic_istringstream/rdbuf/wchar_t/2832.cc
! 4f62c1e0f12d10135fd67a1d8cf46229  libstdc++-v3/testsuite/27_io/basic_istringstream/requirements/base_classes.cc
! 7e68a462441bcee0bae7257101a6da7a  libstdc++-v3/testsuite/27_io/basic_istringstream/requirements/explicit_instantiation.cc
! 241de085e939318f9a4b138708806f98  libstdc++-v3/testsuite/27_io/basic_istringstream/requirements/typedefs.cc
! b1eca1c88d29bc234531e91815621e81  libstdc++-v3/testsuite/27_io/basic_istringstream/str/char/1.cc
! 142f2542f5179f648b85f4b47db6520f  libstdc++-v3/testsuite/27_io/basic_istringstream/str/char/2.cc
! 83956b575c39066e9446320bb6790eb2  libstdc++-v3/testsuite/27_io/basic_istringstream/str/wchar_t/1.cc
! b298dfe137b0c993ff1fb78641f6af32  libstdc++-v3/testsuite/27_io/basic_istringstream/str/wchar_t/2.cc
! 57e5db4dec7d8c57a49b4062805acb76  libstdc++-v3/testsuite/27_io/basic_istringstream/view/char/1.cc
! 13b0232bc5d0b7f1734b813e3c560fb6  libstdc++-v3/testsuite/27_io/basic_istringstream/view/wchar_t/1.cc
! 8d47f37af787a3cbb3d3aef4eed85a63  libstdc++-v3/testsuite/27_io/basic_ofstream/assign/1.cc
! 6fbb41c2eb58a7c50f53cd5f0ee65f06  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/2020.cc
! 8956e5c5203ecf2c1c4a717bdb2f559e  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/1.cc
! 8839d07a3a8a94e1ce5aaeee68dc6600  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/2.cc
! 764085bd2969e85b3080e9af6873fa50  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/char/path.cc
! 40d6ca3d4385154576c50b2b707def2b  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/move.cc
! 03e71216ab965660fbfff5fc5b7f73d2  libstdc++-v3/testsuite/27_io/basic_ofstream/cons/wchar_t/1.cc
! 204f8a1fc52f241ed8733a51d7738b95  libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/1.cc
! f1c0d98e68be55987702c7b842171127  libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/2.cc
! b1f94ae4f0dba53f14749869e63d0db1  libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/noreplace.cc
! 8fb4f200b93bc37695bc23f68cf45b1d  libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/path.cc
! 5d3c3df9a5efcfa8383e8a983810d824  libstdc++-v3/testsuite/27_io/basic_ofstream/open/wchar_t/1.cc
! 4e0c279c91cf5123d8625c5edba5b77d  libstdc++-v3/testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc
! cfc8751ca0d9c3e19064836e33df9610  libstdc++-v3/testsuite/27_io/basic_ofstream/pthread2.cc
! 79c3a81dc8e7585e8bed67f87ad4f637  libstdc++-v3/testsuite/27_io/basic_ofstream/rdbuf/char/2832.cc
! 89c06b3722e83e1aadcd00100a55c13c  libstdc++-v3/testsuite/27_io/basic_ofstream/requirements/base_classes.cc
! cfe9ef296be4545dd57278690db6b031  libstdc++-v3/testsuite/27_io/basic_ofstream/requirements/explicit_instantiation.cc
! ddd676c9adcdda000cb49f3956d7abe7  libstdc++-v3/testsuite/27_io/basic_ofstream/requirements/typedefs.cc
! 0f70009b5c8194b3beb3b82fcd0eba7c  libstdc++-v3/testsuite/27_io/basic_ostream/cons/2020.cc
! 2b47a5426202bdd2fe1e17f022f9892a  libstdc++-v3/testsuite/27_io/basic_ostream/cons/char/9827.cc
! f84522e20a617e0c20f6f2c1da46a101  libstdc++-v3/testsuite/27_io/basic_ostream/cons/char/null.cc
! bca591e3173915676cfb699752a05900  libstdc++-v3/testsuite/27_io/basic_ostream/cons/wchar_t/9827.cc
! 96b735e1a7e1b477c03af66c3a0836c8  libstdc++-v3/testsuite/27_io/basic_ostream/emit/1.cc
! 1b069ab75dd38bef76dbf768ebff3f41  libstdc++-v3/testsuite/27_io/basic_ostream/endl/char/1.cc
! d17a83c920ef81180c1ae4371a272bdd  libstdc++-v3/testsuite/27_io/basic_ostream/endl/wchar_t/1.cc
! 95689bc962691d62fe9eb9560ea25654  libstdc++-v3/testsuite/27_io/basic_ostream/ends/char/1.cc
! c5a0d14bae279cb7e16d59e551401e2f  libstdc++-v3/testsuite/27_io/basic_ostream/ends/char/2.cc
! 871942f766fd719b18a95c737a493dd5  libstdc++-v3/testsuite/27_io/basic_ostream/ends/wchar_t/1.cc
! e186917d540167c730c721f973a7e2a0  libstdc++-v3/testsuite/27_io/basic_ostream/ends/wchar_t/2.cc
! 6cc9d802c74b04fc780b4f399a1af899  libstdc++-v3/testsuite/27_io/basic_ostream/exceptions/char/9561.cc
! 421a20c057bbaa74347bbd75781a3ba1  libstdc++-v3/testsuite/27_io/basic_ostream/exceptions/wchar_t/9561.cc
! aad575915b576cc4d35c5b1dd7b401a1  libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/1.cc
! f215982ecf86522302d05cecce54330d  libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/2.cc
! bc08da62e9c634570d4368ee7aaea7c0  libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/exceptions_badbit_throw.cc
! 440d78859e2d45d81ac42e8e40711eb0  libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/1.cc
! c7f2389d8fb40ea2baa9beb0b3cb490c  libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/2.cc
! 90298b4b841f5bbe86a057e86292249c  libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/exceptions_badbit_throw.cc
! 17e6151db7c8bfa0fbc2ce9077499828  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/1.cc
! b709218e7edb7931396ffc463cf0ae5c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/2.cc
! 3d5df0016b00174c2888289af90eb9d9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/23871.cc
! b9d8c8db3b2bf59dfd12bec1b88b9a9e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/3.cc
! 249af6da2560a1e82bdfb18a6538c809  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/31031.cc
! 755717524e2ed26d734dcb990cec4558  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/4.cc
! c94d7d392237a6a290ab9534788fe4b9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/4402.cc
! a6d8d885387cfc530b781efd83765b09  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/5.cc
! 792fc6233e5547ceb3d71d5302f1372d  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/6.cc
! 95c1376ce50bd3c8f3cbc61067dc8f1d  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/7.cc
! 9d5c2ed30a3f49d82be5c2f8c16a6813  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/9555-oa.cc
! 3bb0274c3c761e1850d0e76bd656cff4  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc
! bf47993a254af066b5bae9fa1f0fe910  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc
! ec91de954fc9c2789e221dacb4ffbca7  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/hexfloat.cc
! e441d28be479f14cde7469ef9eb05235  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/pod/23875.cc
! 27ed940a2d28ad572a1c205a16e517d5  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/1.cc
! 525ee54fbf5f6c0809f051bc3edfc2c3  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/2.cc
! e302795ec1444a0bb673a740caca6bc3  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/3.cc
! d96307cc148e685dd468694d00a828f8  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/31031.cc
! f01875f96c5ef73d5e3c172fd0c8c90f  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4.cc
! a73d76af7bbdfd6612c89e22b4776433  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4402.cc
! ac1a76055486d633a2c6b38671caf5eb  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/5.cc
! baa9c54dac98117260707721d02c4a79  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/6.cc
! ae4f8d7ab22a04ac0b320f0ad3ea4d67  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/7.cc
! cc71a06b4886db2421e59c429420c42d  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/9555-oa.cc
! b81d09207aaf3f12a682389fc525ed3b  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/exceptions_badbit_throw.cc
! 6e7abe8aacbeeb5e3aeea8a98b6e56d6  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/exceptions_failbit_throw.cc
! 075e701c8b505fa87403bf81be159d11  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/1.cc
! 971d7d53c2b17068355bde47523313ce  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/11095-oa.cc
! 9ec160ccf0e268c7966d87f31634f103  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/11095-ob.cc
! 6a187969ad39e339f5f35eef1508da23  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/11095-oc.cc
! cc62d22f51171da3dbe23761d125d84e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/2.cc
! 076b80e95f36609e3307f72f657cb785  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/28277-3.cc
! c42220db7231d9df7d62ece955641935  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/28277-4.cc
! 5ed764096a79013307abba04b241b762  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/3.cc
! 5fdc543face3254f94729bdf2e49a2c2  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/4.cc
! fd1d6352cba168915becb5f5d36d66f7  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/5.cc
! e59703aac552bfbe2450937bd39f16e9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/6.cc
! ad343b37449fc4f3e62ea2c5383baaf8  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/8.cc
! 3a8abf6c952716f83cbd34776dd41d47  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/9555-oc.cc
! d572c42a316d1e00ec8d3192b30b619d  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/deleted.cc
! b4a592d71565139b3f5d5ad58ac0857f  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/1.cc
! 3177773a902106edc72f42e3411f0650  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/11095-od.cc
! ba3bc46c731144f609394a18b02c83d8  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/11095-oe.cc
! 99bd891d48636301b3b0534f16da91e6  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/11095-of.cc
! 5229aa06cac433184fe6a440df671b5d  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/2.cc
! c1adf3c4c2ac2d2fbda161b90c930e12  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/28277-1.cc
! 8980acde24a9ff951840b432976edab7  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/28277-2.cc
! 59dd6d015b4b7dde0bc8bfa85db44b35  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/28277-3.cc
! 90c7cbea83dc5bcf5b13af79e762183c  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/28277-4.cc
! 899ed82ff637d7de23cee2a355e3868a  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/3.cc
! 2054f3c96671d33885575afa74785c76  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/4.cc
! f279981e83d731baad7269ca06bf36f8  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/5.cc
! 2da7441ce9166493f8ddafcbfb57baf0  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/6.cc
! a4217070d3cd61878bd0945e29aff75d  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/7.cc
! d09ccaec81c026b9d5f2cc200ea97c14  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/8.cc
! cacb136a30844112f1238ff291f004b6  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/9555-oc.cc
! 38404a2fa40e7ee1ec05020e8632d41f  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/deleted.cc
! 719ce1c43234fc395a2bb100d7adcff6  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/1.cc
! 662c27cb5bf474e451f40eea0c9c92ce  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/2.cc
! efb58cbc57a4636e95d8cfec6781ed4f  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/3.cc
! 69af563dee429fe96e226b061a65f173  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/4.cc
! a29915d8b0f9c81a850b9524dad304a6  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/5.cc
! da607cef52f097f5e9e969bd865fe990  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/6.cc
! 0e1692e4c4dd150ab9232a8fcd4e7e4a  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/9318-out.cc
! 50e8a5082d692e73a1afeccec7495bd9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/9424-out.cc
! 91908f464be700469d9b8baba2516fb9  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/9555-oo.cc
  d175b74cdf90be7b308276fabe9bfedc  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/99692.cc
! 84cc1d6d79807a6c066c48e37abaec3e  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc
! 2bb9c3d74176d414e8b213791fb65240  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/error_failbit.cc
! 8cb770fd386d8fbee4c967876fdb52d1  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_badbit_throw.cc
! b98a2eec6c5758a2fd44750ea6163c94  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_failbit_throw.cc
! b81373675c85aed03a4b9205cc5a920a  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/exceptions_null.cc
  ebb7447c68529f67037c0007369c17ae  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/lwg2221.cc
! f2e7cbd42cfa0407bf2ad4408fc38cc6  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/volatile_ptr.cc
! 8255ed13c4b2bc49a99d6b4ca17801a3  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/1.cc
! 0f284e07a98165a4097f843d6de4f82f  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/2.cc
! ac5ca71fbd2959d1bb843d5b70c05769  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/3.cc
! e9568368ca5d4da864595f16101165b7  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/4.cc
! 1b380b999e1f9a33e3847d4133c262cf  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/5.cc
! bfe003f137a92166ea5213dfbbe1df49  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/6.cc
! df277aec12efd3a337833498149cc34d  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/9318-out.cc
! 0c9cefff37a909d94313726ce9b32a78  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/9424-out.cc
! 8e8ddec8ac13ae14c130a6a7334d42a0  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/9555-oo.cc
! 88d5c5242f52b9eb90dd49757faca148  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc
! ab7eac68d352e03588b7230893beabc1  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_failbit.cc
! 8db7c5abfba0f452235e3a4a503f8766  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_badbit_throw.cc
! ae6226e58b71f435ace453800d1fa561  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_failbit_throw.cc
! c47bd8cd543b09a8bb08cae89904964f  libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/exceptions_null.cc
! ad5b29e3d910113aba3088f0ba9b7a15  libstdc++-v3/testsuite/27_io/basic_ostream/put/char/1.cc
! ea30a1ab4c684c3d0938716fcc60b567  libstdc++-v3/testsuite/27_io/basic_ostream/put/wchar_t/1.cc
! 3d61186c8982d877e93573995839a062  libstdc++-v3/testsuite/27_io/basic_ostream/requirements/base_classes.cc
! 7a8c77e4233c37162eb91ab1082c5e04  libstdc++-v3/testsuite/27_io/basic_ostream/requirements/explicit_instantiation.cc
! db45e56193fb89aa2dd4316297137440  libstdc++-v3/testsuite/27_io/basic_ostream/requirements/typedefs.cc
! a279d9875276a56fffc43175ce3e2bc4  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-fstream.cc
! c25029e7f5b93d55c22c3a28973ad1c6  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/2346-sstream.cc
! 7bc8008e6571a4ee84fb03d64fe87dac  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/exceptions_badbit_throw.cc
! 83ecf48decd6af498e926fc3a67f113b  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/n3168.cc
! e3451ea78c8476f4709820b549d83567  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-fstream.cc
! 3bd367a47258d1baaab05a09243c7932  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/2346-sstream.cc
! d939f7acfe76c019e1f41d99a5446ff0  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/exceptions_badbit_throw.cc
! 7ddb76aa072349435f647b2c8021dbd9  libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/n3168.cc
! e00b103e421c478884db40a9a656c37f  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/char/1.cc
! 23ec7d65096047c808857359f409c921  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/char/2.cc
! 8795d11d1f0aeefd49d2624fd4c1adb2  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
! 0c4011eab32ab8a3f28ad81b0246b562  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/wchar_t/1.cc
! 566795ea609f3f66a6baad9444c59d4f  libstdc++-v3/testsuite/27_io/basic_ostream/sentry/wchar_t/2.cc
! b008c1c5da9ba3a24392197c9912a4ba  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/1.cc
! a9aca17f716ccc0f65b84c3442c8e9e4  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/2.cc
! 3916b8e3a2dd1bb3c175b8e8915fe1d0  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/exceptions_badbit_throw.cc
! 34b746c25af9062ff603699f54f8417c  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/n3168.cc
! b8d72a0eecf4e8aae563afd525a2d565  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/1.cc
! 0ae73505f2526b6a9d27e5b3be9ad8a8  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/2.cc
! 61e027734089a17bfccc3890786a4988  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/exceptions_badbit_throw.cc
! 374b556b2a046b8a0b8b251715467b42  libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/n3168.cc
! f176b2b71785df5f09a22ae3a64400f2  libstdc++-v3/testsuite/27_io/basic_ostream/write/char/1.cc
! 8dca3285e0703cbe8490416363eff714  libstdc++-v3/testsuite/27_io/basic_ostream/write/wchar_t/1.cc
! b81c03c13e95cdec219e7b31f6b2c780  libstdc++-v3/testsuite/27_io/basic_ostringstream/assign/1.cc
! a203d2d1370c9347c38e79ab605043e6  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/2020.cc
! 00b0db47dab0c71e5fc1a9251a34016f  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/char/1.cc
! 59b23a9e72bb23f243d1f434fa71aee1  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/char/3.cc
! baa5dd5f5847d8024a01d6f8a22c06f8  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/default.cc
! ac411271039b9bd3ec6a60623ce81884  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/move.cc
! 05ed9c5b5d444d64baad6cbe8886ad8c  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/wchar_t/1.cc
! baaaa74e9f97776369eb3753837b79ad  libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/wchar_t/3.cc
! 83d8e24c2474f4226cac3a2f7a45b30a  libstdc++-v3/testsuite/27_io/basic_ostringstream/pthread3.cc
! 96a028d78cd7b870556aafc02ab56024  libstdc++-v3/testsuite/27_io/basic_ostringstream/rdbuf/char/2832.cc
! af06bff00ee757811ed3c57a4ec3d214  libstdc++-v3/testsuite/27_io/basic_ostringstream/rdbuf/wchar_t/2832.cc
! c23dda10bbd3ea018264b5761a7d3aa2  libstdc++-v3/testsuite/27_io/basic_ostringstream/requirements/base_classes.cc
! f63b05afab27e54f2190560ebbf3f417  libstdc++-v3/testsuite/27_io/basic_ostringstream/requirements/explicit_instantiation.cc
! 00c44b0d9e9cddb0b59f67daaaf1cff6  libstdc++-v3/testsuite/27_io/basic_ostringstream/requirements/typedefs.cc
! f15ed577eb16e1e558171ca370c1534a  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/1.cc
! b3573cd4a89996a4deb3e2c3ab1e4ae8  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/2.cc
! a270d7f7e7321001d328fd4753b77e28  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/char/3.cc
! 6ef2dcb6b7eaeb25bb778f0305135a83  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc
! 635cb7874c5ac3b558287ffaf302bf24  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/2.cc
! 03a7326c7d06aa3ab0c5f1f46c2798b2  libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/3.cc
! d02dc6dabff50fd9ee2aaa7cb87ac0c5  libstdc++-v3/testsuite/27_io/basic_ostringstream/view/char/1.cc
! 4861ce818104fe71ce507a1c0c565d60  libstdc++-v3/testsuite/27_io/basic_ostringstream/view/wchar_t/1.cc
! 6738b09da613713bc72fd5d0c9890f0e  libstdc++-v3/testsuite/27_io/basic_streambuf/cons/2020.cc
! dd99582200109b124dccf94e56382ff0  libstdc++-v3/testsuite/27_io/basic_streambuf/cons/57394.cc
! 2599b8946833c7fddbae6cfba0e351f9  libstdc++-v3/testsuite/27_io/basic_streambuf/cons/char/1.cc
! 7ab687d77b04a6b6fb353256e87afe51  libstdc++-v3/testsuite/27_io/basic_streambuf/cons/wchar_t/1.cc
! 72f8585e98c3fad0b33e2f1ac2d11211  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/1.cc
! 29eec708d2a03042798b4de58032a7b8  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-1.cc
! 6432892a33a32b84bc0f6c33b442bbb8  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/13007-2.cc
! 36cd8759ebf1ceb6951a24677d106d69  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/char/9322.cc
! b9adfd1e633baee2b9b0dcab613be036  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/1.cc
! 3c063ec382d6b78af8f726cce4a924ce  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-1.cc
! a55f03bbc4d32aa3a43942907abaa9d8  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/13007-2.cc
! d7df4ab35e891b26502c417e57defd0e  libstdc++-v3/testsuite/27_io/basic_streambuf/imbue/wchar_t/9322.cc
! 92b798c57be0479d0d848f7d9ff7130f  libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/char/1.cc
! a3f038ee44f7f50dcf841a4ff090e9ce  libstdc++-v3/testsuite/27_io/basic_streambuf/in_avail/wchar_t/1.cc
! 6bd4b483b1e648c06e4ffacdac2d5210  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/1.cc
! 677ee8dd5ed49d37f08674a8994a39bc  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/2.cc
! 278952f07f37ec3d55201770a4548710  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/char/3599.cc
! 870b71229c1bfc5850f615e88305b7aa  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/1.cc
! 409a1d9447cff67b8c71fc3fe55cc594  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/2.cc
! 772b227029d66c4153e5d22bef937162  libstdc++-v3/testsuite/27_io/basic_streambuf/overflow/wchar_t/3599.cc
! 22fee4858aca1908751c28399982826e  libstdc++-v3/testsuite/27_io/basic_streambuf/requirements/base_classes.cc
! a7da64a7b0bf23513334e2553e2f95cc  libstdc++-v3/testsuite/27_io/basic_streambuf/requirements/typedefs.cc
! e510dfcb3e28de8fd9731db336312d7b  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char/1.cc
! 1148b3e09352b61ac85f973f826325fa  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/char16_t/80624.cc
! 6380eed217c108744b19fca51c48cf50  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetc/wchar_t/1.cc
! 33f30b41ab2b63aa6a23d1fb9ce8cb24  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/char/1.cc
! 656f5c6ad8b8632c0a614f33a426d0e7  libstdc++-v3/testsuite/27_io/basic_streambuf/sgetn/wchar_t/1.cc
! feae618b10386367b4bb0d840cd256fc  libstdc++-v3/testsuite/27_io/basic_streambuf/sputbackc/char/9538.cc
! ea4a778eb3657d8e48b169e99389a96d  libstdc++-v3/testsuite/27_io/basic_streambuf/sputbackc/wchar_t/9538.cc
! 269b74229fc949f57a9020221844bd00  libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char/1057.cc
! 68c96965695b95dcf1ec97dc6d4be494  libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/char16_t/80624.cc
! 725469199f83c9e0d882e6b823b6e849  libstdc++-v3/testsuite/27_io/basic_streambuf/sputc/wchar_t/1057.cc
! 8707a0deee557362310d6134971f9311  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1.cc
! 3e17dc4073981e8ddce5fbaca6742e58  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/char/1057.cc
! 653981cc46e1efd2a0609b9117564af8  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1.cc
! 0ecf497f3263299d7b1d25447c73674d  libstdc++-v3/testsuite/27_io/basic_streambuf/sputn/wchar_t/1057.cc
! 2101dfd095e7c88df53610a134f29c55  libstdc++-v3/testsuite/27_io/basic_streambuf/sync/char/1057.cc
! 73a3b0f9812a0ce2a35321d29bdaff58  libstdc++-v3/testsuite/27_io/basic_streambuf/sync/wchar_t/1057.cc
! 0bd5fcf0be16f7b7f4bc13077fadbff8  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/2020.cc
! 685c15d9aebd227b749df84e91445953  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/81381.cc
! 6a603b18a92e0f9f4a676cf1f18c60fc  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/char/1.cc
! 0afb084657c4a3df4aea34ee0f943c31  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/char/2.cc
! b49cf1b28c5857874b2a930621b48c3c  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/char/default.cc
! 915c3b9208cc3b72aaa190853bf6e097  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/wchar_t/1.cc
! 689228acd2c8f29e414c4d9f24ae1493  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/wchar_t/2.cc
! 3222a3fc7865967f0da0bc1a5ba9544d  libstdc++-v3/testsuite/27_io/basic_stringbuf/cons/wchar_t/default.cc
! 4f7bf86bfdd74f797bb8066273426ba5  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/1.cc
! 0caed79b46de553311670a065635d985  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/char/9322.cc
! efb62548ed0ee1a4997cf0f7a661fce7  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/wchar_t/1.cc
! afb7f5626d6ccddee002e1557f4a6437  libstdc++-v3/testsuite/27_io/basic_stringbuf/imbue/wchar_t/9322.cc
! 4770e24a9e7d7545827bcbc72e1fd77e  libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/1.cc
! 57a5c55ae58307e4edf7f208830b6cb4  libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/char/21955.cc
! 938d9132d0944a2e965fc12af17e8fd6  libstdc++-v3/testsuite/27_io/basic_stringbuf/in_avail/wchar_t/1.cc
! ba166a7532d4934a958b69e455f7b5cd  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/1.cc
! ce19994f874810114102013850a4408d  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/2.cc
! 73a39296e84a971009e3d4ee742c32bb  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/26250.cc
! f36f07a5046e676c361cdd6c400a440a  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/3599.cc
! d34e6d6645ff6c5ca0f49e14786d7a24  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/char/9988.cc
! 141d39982b2b9da8cc8e3c1a6405dc85  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/1.cc
! 040457374c321567b09e8c369f6b533c  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/2.cc
! f45af5aa3a2af1ebb746e840bf9d254d  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/26250.cc
! 49d0b3f42aa2dc804722a1f10a1d495c  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/3599.cc
! 875941fd97bf1037fbe09e3ca65d86f0  libstdc++-v3/testsuite/27_io/basic_stringbuf/overflow/wchar_t/9988.cc
! 72ff6fabbce0e74319fffe14e7e03004  libstdc++-v3/testsuite/27_io/basic_stringbuf/pbackfail/char/1.cc
! fb746d8992ea98a3a153adbbab49af4b  libstdc++-v3/testsuite/27_io/basic_stringbuf/pbackfail/char/2.cc
! 4dfd25492a711e243862f8e33002c3f3  libstdc++-v3/testsuite/27_io/basic_stringbuf/pbackfail/wchar_t/1.cc
! 81bdea3deee43ca83e72f18cfe664f50  libstdc++-v3/testsuite/27_io/basic_stringbuf/pbackfail/wchar_t/2.cc
! 88f909d25d7b1cdba5e4b97ee38c460f  libstdc++-v3/testsuite/27_io/basic_stringbuf/requirements/base_classes.cc
! f6588b30c0d843267e3b06deb1044bb9  libstdc++-v3/testsuite/27_io/basic_stringbuf/requirements/explicit_instantiation/2.cc
! fe6490481b045fc4b6bdc748ded07431  libstdc++-v3/testsuite/27_io/basic_stringbuf/requirements/explicit_instantiation/4.cc
! 0f2211cae124429809e14fc85f28bd66  libstdc++-v3/testsuite/27_io/basic_stringbuf/requirements/typedefs.cc
! 5b9b53890487f14224715be61a7d6063  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/1.cc
! 10f94fafad25e596fc900587e80b5606  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/char/9825.cc
! f7ca3e79f272b41b1decfe047b80261b  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/1.cc
! 0fc7bd920119bc06b1a7c84f0a09cc1d  libstdc++-v3/testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/9825.cc
! a0e9e4988108204339430343069fae50  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/1.cc
! b5a51cef400e2c19787c19152fe7ef07  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/10975.cc
! fe2c4d254cf487ee9fffe37644a9c31e  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/16956.cc
! 9238fccc06fc7a26c6254ab0c06cd162  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/char/2.cc
! c0e978629085c19613c9c4d334a7356c  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/1.cc
! aa7d03a744a5d768b5a73f603d16f1bf  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/10975.cc
! d8bf4685adab0f6c920e82df4b19a6aa  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/16956.cc
! 2b6ba3b69d30b383c892378f38bb1113  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekoff/wchar_t/2.cc
! 0786b914a14d1dd3176536340ec57a38  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/1.cc
! e125edec5166c739b78343bbafa18258  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/2.cc
! 97e7845fbfec7d04099b7ec3ab74a53b  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/29354.cc
! 871ccd5cf5f64eb50bd6fccf71ef37ed  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/char/3.cc
! 3f9f75a6aabad8cfc99a5e1f900db963  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/1.cc
! a9b9ecb0043d9676f258c6f4f6fe0645  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/2.cc
! c781c36fdf2f80e08b7c54741e33cdcb  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/29354.cc
! 4fcd35bf5573df172674986586dfbff8  libstdc++-v3/testsuite/27_io/basic_stringbuf/seekpos/wchar_t/3.cc
! 9071a01a62952d72e2876f82148ee140  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/1.cc
! 6abdbfa9a9e07add4247006e3026cfcf  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/2.cc
! ce0604ac591c2749c9909a05f060e3e4  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/3.cc
! aaedf4fd1176f4d50c7f36684993f9ff  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/char/4.cc
! 297b4ca2f3650f05b20c5113c2970da9  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/wchar_t/1.cc
! 3f5466113add07e8955535dfc7730ba5  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/wchar_t/2.cc
! 846e037ced70fc576543754651e89ed2  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/wchar_t/3.cc
! f781766631f4f3c9089749d4f61a222c  libstdc++-v3/testsuite/27_io/basic_stringbuf/setbuf/wchar_t/4.cc
! bc4e334f965b3ade83edf929faa84fdb  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/char/1.cc
! 95472e70c51adf2506e2cb09045fa1e4  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetc/wchar_t/1.cc
! 8c57c5aa402dc50e3b210a8419afb859  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/char/1.cc
! d8b35f2719b26533ac987df84eeb7ed5  libstdc++-v3/testsuite/27_io/basic_stringbuf/sgetn/wchar_t/1.cc
! 4c67c9af834970ef284cac15a7acdd36  libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/char/1.cc
! ecd86b7e77989234cbd6ca13e99be61f  libstdc++-v3/testsuite/27_io/basic_stringbuf/snextc/wchar_t/1.cc
! 37849549fc50e22cc57a2fc677a31d3b  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/1.cc
! 4854d587a81fe006ad7072b4a425ddd4  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/char/9425.cc
! 6bbe408239166c9864b4df4fb4815f1d  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/wchar_t/1.cc
! eb0101ceeb568c92b7c2f52f61a2cacf  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputbackc/wchar_t/9425.cc
! cfcedd118b032750a0f94f108c2daed6  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1.cc
! c3be7d3ddf864eded0b6d9a3e300bc0f  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/1057.cc
! 59efb184edb30376835062c1a13247a9  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/char/9404-1.cc
! 8429dd9a6fd11a680f73ca47ca492f1f  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/1.cc
! a06bb902961e5bc46607daf6c0c5ed5b  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/1057.cc
! d65872e6b53deb87180a2323b1da4708  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputc/wchar_t/9404-1.cc
! 1af67890ec1959aa08989f677ba75e8b  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1.cc
! 58526f6477d50ef6fbed0c48c78b20c9  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/1057.cc
! dc0024eb74afdfc87ae14200580af518  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/char/9404-2.cc
! 42b3f460ace4556dc3878a59600a8929  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/1.cc
! 0bbfb4dcf512ff8a7605c624e741365a  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/1057.cc
! 9215e911bf8463746272670d9d6711f1  libstdc++-v3/testsuite/27_io/basic_stringbuf/sputn/wchar_t/9404-2.cc
! 7fabd46f1875b3cec8acc68fa5bd778e  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/1.cc
! 69dbe4171aa045f89c22fcab92c9af33  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/2.cc
! 8d969b8676ae99c7066e2569f9b430a1  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/3.cc
! 734505a71f63635c79c4af7eff5f05c8  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/3955.cc
! bebef79dc61ec177ebffd0b12528704b  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/char/4.cc
! 9be71207b0e7d61e73c1065aea5d2218  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/1.cc
! aa1e3ff6ec4f68089a6c08b253305e59  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/2.cc
! ddc548797c4828f248a20475ca9707aa  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/3.cc
! 188caf7b78391730a0145721385bbd01  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/3955.cc
! cc19e34c508508e7871dc192b34febf7  libstdc++-v3/testsuite/27_io/basic_stringbuf/str/wchar_t/4.cc
! 77a2efea65e231ea08f46230d92f76dc  libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/char/1.cc
! 4500f68678e664b104850c50d49cd34e  libstdc++-v3/testsuite/27_io/basic_stringbuf/sungetc/wchar_t/1.cc
! af584112212b193b47b4fd698367cd50  libstdc++-v3/testsuite/27_io/basic_stringbuf/sync/char/1057.cc
! 20b710eecc5d61ed3bf89b94e3c8bd57  libstdc++-v3/testsuite/27_io/basic_stringbuf/sync/wchar_t/1057.cc
! 14963b53d87b7f8320eb832bf172a50c  libstdc++-v3/testsuite/27_io/basic_stringbuf/view/char/1.cc
! 706390e349b308d626d70291389209e9  libstdc++-v3/testsuite/27_io/basic_stringbuf/view/wchar_t/1.cc
! 38ec6d891d6d4a47865a059e215ea0c8  libstdc++-v3/testsuite/27_io/basic_stringstream/assign/1.cc
! 5e8a8a93e5870b17031c24e2b4b199dd  libstdc++-v3/testsuite/27_io/basic_stringstream/assign/81338.cc
! 09501862893de29ea85b24bc560b9387  libstdc++-v3/testsuite/27_io/basic_stringstream/cons/2020.cc
! 08d6f873ad2dd2b33b54244f3422d83c  libstdc++-v3/testsuite/27_io/basic_stringstream/cons/char/1.cc
! 43191b87ba1a0a6a9c37f403ec580735  libstdc++-v3/testsuite/27_io/basic_stringstream/cons/char/97719.cc
! 73dc42f24fdcd0363a4d59c51e4a61e7  libstdc++-v3/testsuite/27_io/basic_stringstream/cons/default.cc
! 5ae9793bc0afb442af925719b9a39662  libstdc++-v3/testsuite/27_io/basic_stringstream/cons/move.cc
! a0bdc746922d2953b04c63a915b5cc4c  libstdc++-v3/testsuite/27_io/basic_stringstream/cons/wchar_t/1.cc
! 02556a146755991193644491657c09d8  libstdc++-v3/testsuite/27_io/basic_stringstream/rdbuf/char/2832.cc
! eede89e40b7fc6fc64e878488e4320cb  libstdc++-v3/testsuite/27_io/basic_stringstream/rdbuf/wchar_t/2832.cc
! 90fcf134371bdffa567cef6cf7b1e0c2  libstdc++-v3/testsuite/27_io/basic_stringstream/requirements/base_classes.cc
! 5e43fd1865232c249e047bb27cddb8e9  libstdc++-v3/testsuite/27_io/basic_stringstream/requirements/explicit_instantiation.cc
! c5d0e05ca381ea222df103273ec957ef  libstdc++-v3/testsuite/27_io/basic_stringstream/requirements/typedefs.cc
! 783eb9047cff5478c3062fe0dfe73e4f  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/1.cc
! f675c871e198a9426cb7dc4bc95005ad  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/2.cc
! 8408c2a389a511221203a56f1d9113ef  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/3.cc
! 2c59a435ed66439814e27d9c7884bd00  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/4.cc
! 15642f049f6eebf82de44144f74e613e  libstdc++-v3/testsuite/27_io/basic_stringstream/str/char/5.cc
! f1727bfc25740a222855408d6d4fb5f5  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/1.cc
! e8295924f4e5264f13e49f81c52134cf  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/2.cc
! d17c6253f2cedad22f109ac6f77e58fa  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/3.cc
! a8e0730088f40f414534c63fc8079003  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/4.cc
! b17ebd49a2351a5a06628f8c9d824a9c  libstdc++-v3/testsuite/27_io/basic_stringstream/str/wchar_t/5.cc.cc
! 88f4a448d7064c699e657f8b44faabd9  libstdc++-v3/testsuite/27_io/basic_stringstream/view/char/1.cc
! 1fac8ab5d0edb82b6e006b5e7204e2f4  libstdc++-v3/testsuite/27_io/basic_stringstream/view/wchar_t/1.cc
! fe0d2af1606d21205f2da67070530e99  libstdc++-v3/testsuite/27_io/basic_syncbuf/1.cc
! b380f141304ed16cac8d4d08c4342708  libstdc++-v3/testsuite/27_io/basic_syncbuf/2.cc
! 2f08d8d0fca981a79bbabf0cb7a1ece9  libstdc++-v3/testsuite/27_io/basic_syncbuf/basic_ops/1.cc
! dde98636ab5d5a16787100b1ffc87d2f  libstdc++-v3/testsuite/27_io/basic_syncbuf/requirements/types.cc
! 49b007252a72138dba9b8528000eb83a  libstdc++-v3/testsuite/27_io/basic_syncbuf/sync_ops/1.cc
! fe0d2af1606d21205f2da67070530e99  libstdc++-v3/testsuite/27_io/basic_syncstream/1.cc
! b380f141304ed16cac8d4d08c4342708  libstdc++-v3/testsuite/27_io/basic_syncstream/2.cc
! ebaee6f38a0486c639f3b9b67c61025b  libstdc++-v3/testsuite/27_io/basic_syncstream/basic_ops/1.cc
! fa3ee22fd6c3d238f7a3fa6d63f36769  libstdc++-v3/testsuite/27_io/basic_syncstream/requirements/types.cc
! 108a1d6928448520c88524b99fbe1f7a  libstdc++-v3/testsuite/27_io/filesystem/directory_entry/86597.cc
! 0f940f120ead5de385e820f2ed0e19ab  libstdc++-v3/testsuite/27_io/filesystem/directory_entry/lwg3171.cc
! 8102025532696a5441c7c8e965f86991  libstdc++-v3/testsuite/27_io/filesystem/file_status/1.cc
! bdf657cd22f124baf04ebab434af157a  libstdc++-v3/testsuite/27_io/filesystem/filesystem_error/cons.cc
! c428626c422fb88386fe757096872b03  libstdc++-v3/testsuite/27_io/filesystem/filesystem_error/copy.cc
! 3f5a48f1617fc98ae4a82b610c4dc644  libstdc++-v3/testsuite/27_io/filesystem/iterators/91067.cc
! 8776f2dbe03dc89e720cbdf2268f8787  libstdc++-v3/testsuite/27_io/filesystem/iterators/97731.cc
! 672bb0d85f1d113d39b89335fa803865  libstdc++-v3/testsuite/27_io/filesystem/iterators/caching.cc
! 217108d8c5d7ce9f47af17889236cbeb  libstdc++-v3/testsuite/27_io/filesystem/iterators/directory_iterator.cc
  304b563b62625027227f0c89f75ae00b  libstdc++-v3/testsuite/27_io/filesystem/iterators/error_reporting.cc
! 4563a721efa1a4d8061706a3d9d89f62  libstdc++-v3/testsuite/27_io/filesystem/iterators/pop.cc
! 459ce1752484ea23279e87e8433553d3  libstdc++-v3/testsuite/27_io/filesystem/iterators/recursion_pending.cc
! a4a432360a8ed2c0d9f582958d93cc62  libstdc++-v3/testsuite/27_io/filesystem/iterators/recursive_directory_iterator.cc
! a836511177d9412c6b0042b835c5b24b  libstdc++-v3/testsuite/27_io/filesystem/operations/absolute.cc
! 4682ae1027c4c9e735537c719cab6fc3  libstdc++-v3/testsuite/27_io/filesystem/operations/all.cc
! f994edcb997cf28e5888873bbdba951e  libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc
! 96e7a09ba65d743166089cae46676bd2  libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
! baf6585ecd9476c87e4659aa815018ec  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file.cc
! 8316659f617960cafa349695f2ac163e  libstdc++-v3/testsuite/27_io/filesystem/operations/create_directories.cc
! 1d1b529d3483bdbe217244e7f1cb0c1a  libstdc++-v3/testsuite/27_io/filesystem/operations/create_directory.cc
! 6742f3d96acb605f9150065bc1b9ed9d  libstdc++-v3/testsuite/27_io/filesystem/operations/create_symlink.cc
! 1a326be911f45be0260f9204216aa4d0  libstdc++-v3/testsuite/27_io/filesystem/operations/current_path.cc
! ef6741c85f460eca4314d164cc9ae618  libstdc++-v3/testsuite/27_io/filesystem/operations/equivalent.cc
! b763c7cb60dd21eb09490374f60d22de  libstdc++-v3/testsuite/27_io/filesystem/operations/exists.cc
! 841032b8606254bba1237d18bd980abc  libstdc++-v3/testsuite/27_io/filesystem/operations/file_size.cc
! 918d9769768cf1ce2377228b80f4c31d  libstdc++-v3/testsuite/27_io/filesystem/operations/is_empty.cc
! cf378f73181beaba7b1b39f333d62036  libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc
! 09ff834ce61133a2e492e50eb4d58eb8  libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc
! b18551a9814d5ac2a9fb185d5b157058  libstdc++-v3/testsuite/27_io/filesystem/operations/proximate.cc
! e1ff292511ce040474edcbdd2ac32116  libstdc++-v3/testsuite/27_io/filesystem/operations/read_symlink.cc
! f9430d083f31d78fe0f9232698671bfb  libstdc++-v3/testsuite/27_io/filesystem/operations/relative.cc
! c89316a65d51a35060511a7cff2f1ef7  libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc
! 5ea872676081d4938976d877017641de  libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc
! e24d44f581a05c8e683843dc9fc1a8f3  libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc
! 77c45eae58f617c212ac6f4b4df1ff9f  libstdc++-v3/testsuite/27_io/filesystem/operations/resize_file.cc
! 5c0a1c472ba09b475da811d8c00cc63b  libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc
! f2484f95e3d38d8e2652603390a69377  libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc
! 80c1f11b76d57d2c14142663ccc5f441  libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc
! bf12f896f3f6e92a4ef295694c967e39  libstdc++-v3/testsuite/27_io/filesystem/operations/temp_directory_path.cc
! 38dee53dd844f69a702bd8d79b5d671b  libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc
! bba1248fe386d1a1a21631e774815c65  libstdc++-v3/testsuite/27_io/filesystem/path/append/path.cc
! 28c0d37c0e2f90cf6a142915f8ff0700  libstdc++-v3/testsuite/27_io/filesystem/path/append/source.cc
! 349a648747f4bf9c0d342ff7c45920fb  libstdc++-v3/testsuite/27_io/filesystem/path/assign/assign.cc
! 20782bc69670339d607465cb18354265  libstdc++-v3/testsuite/27_io/filesystem/path/assign/copy.cc
! 861a6993ae26ded87963a346a049ff9d  libstdc++-v3/testsuite/27_io/filesystem/path/compare/compare.cc
! 9559b364cb25d3986b8143a17ec972eb  libstdc++-v3/testsuite/27_io/filesystem/path/compare/lwg2936.cc
! dfa134f23b3c0f4f81717047594185a2  libstdc++-v3/testsuite/27_io/filesystem/path/compare/path.cc
! 1e26aeed4daa792ea6b273b734028925  libstdc++-v3/testsuite/27_io/filesystem/path/compare/strings.cc
! c70adde96c3bbf3b5386cac0f9c522e9  libstdc++-v3/testsuite/27_io/filesystem/path/concat/92853.cc
! cb0cbf0971f6ee821acceb0d7d17e431  libstdc++-v3/testsuite/27_io/filesystem/path/concat/94063.cc
! d23486b1860ea855f9ad3ecf8f831449  libstdc++-v3/testsuite/27_io/filesystem/path/concat/path.cc
! 1404339a397379d82e324c049178cf57  libstdc++-v3/testsuite/27_io/filesystem/path/concat/strings.cc
  a22e69eb2c027825b8fb3e0e6df6a97d  libstdc++-v3/testsuite/27_io/filesystem/path/construct/100630.cc
  3bc7c7fa91cdfae8b85e98c050b994cc  libstdc++-v3/testsuite/27_io/filesystem/path/construct/102592.cc
! 62be85132974055d79ef2c66b9d5c87e  libstdc++-v3/testsuite/27_io/filesystem/path/construct/80762.cc
! 7ce3d0b79e41297664f123c1bf32d35a  libstdc++-v3/testsuite/27_io/filesystem/path/construct/90281.cc
! c64922a75e4fc4cacdce9eac39563b6c  libstdc++-v3/testsuite/27_io/filesystem/path/construct/90634.cc
! 3942fb1d3a926fec720c459d973c2f19  libstdc++-v3/testsuite/27_io/filesystem/path/construct/copy.cc
! a6934c3c16b2e54ddf466f543bb7f5a0  libstdc++-v3/testsuite/27_io/filesystem/path/construct/default.cc
! 38f0f98a3816f51d44b4c3a09093a1b1  libstdc++-v3/testsuite/27_io/filesystem/path/construct/format.cc
! 225c03c4b7e668b6c630147dc9e176c5  libstdc++-v3/testsuite/27_io/filesystem/path/construct/locale.cc
! 6879ad43df6b85e1a33aba7ae8859869  libstdc++-v3/testsuite/27_io/filesystem/path/construct/range.cc
! dee5328e9f295c49cc82294cfe99ec7d  libstdc++-v3/testsuite/27_io/filesystem/path/construct/string_view.cc
! a57b31062dc760dbc25bd0507ffea337  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/extension.cc
! 9553721092afd0023e807531a6d8524b  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/filename.cc
! c5ce986db76d6dce85145cb986ce140b  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/parent_path.cc
! 421848d53c89f679793e881b0c438d62  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/relative_path.cc
! f81ed5c323ccffa8c6490af8c4510e68  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_directory.cc
! b1b0d71c2291cd595ff8ddbaaf29a367  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_name.cc
! 6b5faa072ce24e7434e13c1b97edd182  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/root_path.cc
! 9924ca60dfa604f21796c74ea943cdd4  libstdc++-v3/testsuite/27_io/filesystem/path/decompose/stem.cc
! 92515cbbde50cb3a65da7bda800daacc  libstdc++-v3/testsuite/27_io/filesystem/path/factory/u8path-char8_t.cc
! f83fee9ef449da9b619c9df07054e0dc  libstdc++-v3/testsuite/27_io/filesystem/path/factory/u8path.cc
! 3d53e454ecc1796f6050ae1b74c67a65  libstdc++-v3/testsuite/27_io/filesystem/path/generation/normal.cc
! affceabc04d5853f57f1f2a92340a275  libstdc++-v3/testsuite/27_io/filesystem/path/generation/normal2.cc
! 49b5c009ba0d62caa658310cc5c1fc40  libstdc++-v3/testsuite/27_io/filesystem/path/generation/proximate.cc
! 29eebef77f32c19b96e6de239361105f  libstdc++-v3/testsuite/27_io/filesystem/path/generation/relative.cc
! 8d1bdbd3c139b1354108d47518d7189f  libstdc++-v3/testsuite/27_io/filesystem/path/generic/94242.cc
! 09105b641f781043674182217d95caf4  libstdc++-v3/testsuite/27_io/filesystem/path/generic/generic_string.cc
! d109e7d0c7a18da938635f2adf5c1018  libstdc++-v3/testsuite/27_io/filesystem/path/generic/utf.cc
! 67d7c68018e4234358477d54b8870d5a  libstdc++-v3/testsuite/27_io/filesystem/path/generic/wchar_t.cc
! 3f09ad4e87b65897e3d4f1240ece1139  libstdc++-v3/testsuite/27_io/filesystem/path/io/dr2989.cc
! 82d33aa0d3bd62ffcceb5620c90070a9  libstdc++-v3/testsuite/27_io/filesystem/path/itr/components.cc
! 2bdc938b9a862baa2808ddd0194e1f9f  libstdc++-v3/testsuite/27_io/filesystem/path/itr/traversal.cc
! 345c0bd7ffd3f75974bd0a60d098841c  libstdc++-v3/testsuite/27_io/filesystem/path/modifiers/clear.cc
! a62b340e31f76f99d5ba5040bb2b0a64  libstdc++-v3/testsuite/27_io/filesystem/path/modifiers/make_preferred.cc
! 5ce60b6ef4fd4f39550cc057cb2b23c8  libstdc++-v3/testsuite/27_io/filesystem/path/modifiers/remove_filename.cc
! a6c1841a0b8235e41a4c697ae6655b28  libstdc++-v3/testsuite/27_io/filesystem/path/modifiers/replace_extension.cc
! 96ad457a40f0452460446114f9150b48  libstdc++-v3/testsuite/27_io/filesystem/path/modifiers/replace_filename.cc
! 8ea6571ce0b5bfef552cd23b16ab596b  libstdc++-v3/testsuite/27_io/filesystem/path/modifiers/swap.cc
! 456d0143eb3afbe52ef95e867ca148ee  libstdc++-v3/testsuite/27_io/filesystem/path/native/alloc.cc
  697f6ac048e02e33ef8e766bd5eecec9  libstdc++-v3/testsuite/27_io/filesystem/path/native/conv_c++23.cc
! e7659f7979ea3419df97fac5ab117076  libstdc++-v3/testsuite/27_io/filesystem/path/native/string-char8_t.cc
! a4ef61f75875b4420164a45127abc39c  libstdc++-v3/testsuite/27_io/filesystem/path/native/string.cc
! 20a8841494b1422236a6b92d3b7d5ee2  libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/append.cc
! f04d0a36a0b3753731e560b886e7c770  libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/cmp.cc
! f52c7bbcb4cb8612baf34abf9dee9615  libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/cmp_c++20.cc
! 4f629fb732c65e0504c53df6c36ecdde  libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/hash_value.cc
! cf75a24fb08168b7cd20fb81659938a0  libstdc++-v3/testsuite/27_io/filesystem/path/query/empty.cc
! 2771b990dde391cb3a3f9f7106965461  libstdc++-v3/testsuite/27_io/filesystem/path/query/empty_neg.cc
! 6475f83b973eb09c723825735ce68a02  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_extension.cc
! 7dfa9e228b9c535d6ec7fabffcfd5a86  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_filename.cc
! e55538a4f92a813d8f22280539aa4446  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_parent_path.cc
! 19ed81d803f0f73c8641e18a31871b24  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_relative_path.cc
! aa421828209ea41c5e09507a95f9b8ca  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_root_directory.cc
! 2de92d16f05b76c9cdd012aa97ced668  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_root_name.cc
! 5e2404387ed930f8ebd0630db0610cff  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_root_path.cc
! 0d7dac43489a5bf1e10f8f1541b00c79  libstdc++-v3/testsuite/27_io/filesystem/path/query/has_stem.cc
! dc75bbce923c825ab47d0bd36dd7e8ad  libstdc++-v3/testsuite/27_io/filesystem/path/query/is_absolute.cc
! 75cb347cefaf380e32a47e6fc406c99b  libstdc++-v3/testsuite/27_io/filesystem/path/query/is_relative.cc
! 7b7c21742f4a85eb543b1ca39938c6d1  libstdc++-v3/testsuite/27_io/fpos/11450.cc
! 130ff151c8f42d44c9a66f3406885ab9  libstdc++-v3/testsuite/27_io/fpos/14252.cc
! 447968fe239b08c06134b4747cfcb755  libstdc++-v3/testsuite/27_io/fpos/14320-1.cc
! bfe447c586e93d81a45aa5607d30fb2e  libstdc++-v3/testsuite/27_io/fpos/14320-2.cc
! 54afad00bedae119a6d61c8c828e95d6  libstdc++-v3/testsuite/27_io/fpos/14320-3.cc
! c6f4743378d737a8d057330664222c1c  libstdc++-v3/testsuite/27_io/fpos/14320-4.cc
! 07b083be672fb992e93e55425d9340d4  libstdc++-v3/testsuite/27_io/fpos/14320-5.cc
! ba13a6033e2b2d114068b6966b9d2eb4  libstdc++-v3/testsuite/27_io/fpos/14775.cc
! eb468c65cc1590a850c8e1b28d7ecd38  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/1.cc
! 83854be104b582db07e51aaea07ab160  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/12065.cc
! dc58607b76e224364948e84a2b7669d4  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/2.cc
! 64e91fa679ddd3fff554cd0c42f833bc  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/3.cc
! fc2bfdc9e7cfdc0507754d889419d74c  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/4_neg.cc
! a2046578566e53503d113a3d69b525c4  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/5.cc
! 59cd1772458237e48afd0bd2c0d2e557  libstdc++-v3/testsuite/27_io/fpos/mbstate_t/6.cc
! 8ddefde16b72cdff55bab37b3d7dde5c  libstdc++-v3/testsuite/27_io/fpos/requirements/explicit_instantiation.cc
! b1b3eccdc0ab1bacee458737095b34f5  libstdc++-v3/testsuite/27_io/headers/cinttypes/std_c++0x_neg.cc
! 54f967af716c45de2096bfd0678a74b3  libstdc++-v3/testsuite/27_io/headers/cinttypes/types_std_c++0x.cc
! 1bb24776204549f06c8d4194219ff4e9  libstdc++-v3/testsuite/27_io/headers/cstdio/functions_neg.cc
! c5fcc2c4791914c98a1700d863cf30a9  libstdc++-v3/testsuite/27_io/headers/cstdio/functions_std.cc
! 83298d0f4c5d26ccf1c403ea87365989  libstdc++-v3/testsuite/27_io/headers/cstdio/macros.cc
! a33ce756206b59bb76fe79cb0b21824f  libstdc++-v3/testsuite/27_io/headers/cstdio/types_std.cc
! ca3419f1f41a5ca771dd1459e1085fa8  libstdc++-v3/testsuite/27_io/headers/fstream/synopsis.cc
! 0fbb67cf6a2b0820cf42e559aa1e633e  libstdc++-v3/testsuite/27_io/headers/fstream/types_std.cc
! f4a72ddd90329bd60ce6caccf4cc891a  libstdc++-v3/testsuite/27_io/headers/iomanip/synopsis.cc
! 807430e148e0a8eafafa878325b00e7b  libstdc++-v3/testsuite/27_io/headers/ios/synopsis.cc
! 0edf26734b767cce0abc080f0f224dd7  libstdc++-v3/testsuite/27_io/headers/ios/types_std.cc
! e93e5f7a98781c59be4a4bd0ecc9edd6  libstdc++-v3/testsuite/27_io/headers/iostream/synopsis.cc
! 173078627d3db553ce481d9eca7bd8ff  libstdc++-v3/testsuite/27_io/headers/iostream/types_std.cc
! 8e77589022c101822e7097f6265d510e  libstdc++-v3/testsuite/27_io/headers/istream/synopsis.cc
! 0580e402e5995d3183751d409d5d49ce  libstdc++-v3/testsuite/27_io/headers/istream/types_std.cc
! 86d5bfbe3874bc44e3a80b43e5d08217  libstdc++-v3/testsuite/27_io/headers/ostream/synopsis.cc
! e66d0e31dc8e02758b978d9c7a321488  libstdc++-v3/testsuite/27_io/headers/ostream/types_std.cc
! 83840713ec6ff488e477d9cf7bfd9392  libstdc++-v3/testsuite/27_io/headers/sstream/synopsis.cc
! ed203b31ab901730a17ebb906ac0d724  libstdc++-v3/testsuite/27_io/headers/sstream/types_std.cc
! fb2fc6abd722a2da2fa07cc7117bb6de  libstdc++-v3/testsuite/27_io/headers/streambuf/synopsis.cc
! 4261528481d7c990df514dda53d8efef  libstdc++-v3/testsuite/27_io/headers/streambuf/types_std.cc
! 8c741f9f1b22a47bbf653044e112b088  libstdc++-v3/testsuite/27_io/ios_base/callbacks/1.cc
! e028540e70d51db66b31c9ecac017248  libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
! b6118a7022916a762a0be814cb8029e9  libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
! cbf8d8d9203744e733258bc2795e1272  libstdc++-v3/testsuite/27_io/ios_base/failure/cons_virtual_derivation.cc
! 23dabe3a9bef6717e1704e4a7960acae  libstdc++-v3/testsuite/27_io/ios_base/failure/cxx11.cc
! 104b08e84582e184ec070c5508bc3d22  libstdc++-v3/testsuite/27_io/ios_base/failure/dual_abi.cc
! 3c2edb68c7b7daf6acdab196400f49eb  libstdc++-v3/testsuite/27_io/ios_base/failure/error_code.cc
! 2acfd89d5a41eddabdb4ef2bcea88b45  libstdc++-v3/testsuite/27_io/ios_base/failure/what-1.cc
! c33a1391be0a8c2b04cca623166d349f  libstdc++-v3/testsuite/27_io/ios_base/failure/what-2.cc
! bd86d5dfe602e41ee3f901b45241d315  libstdc++-v3/testsuite/27_io/ios_base/failure/what-3.cc
! 0e783d7c87883db956dee4b224b0b0cd  libstdc++-v3/testsuite/27_io/ios_base/failure/what-big.cc
! 5ad62a3715876889a4354becfe67650e  libstdc++-v3/testsuite/27_io/ios_base/state/1.cc
! cfd1711571abf36c510406072f87f228  libstdc++-v3/testsuite/27_io/ios_base/storage/1.cc
! 07126fe32428ece0d6d53dd99eb746ef  libstdc++-v3/testsuite/27_io/ios_base/storage/11584.cc
! 3540744bc044709931908307075d54d3  libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc
! 3c78da7fe7843470ee2c1358f032440b  libstdc++-v3/testsuite/27_io/ios_base/storage/3.cc
! 050225d768c53fef9c827807ebe171bc  libstdc++-v3/testsuite/27_io/ios_base/storage/68197.cc
! 0952eddacdcfa0d30116e92a39c86955  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/1.cc
! 77dc3188ee11eda5743eb8db4bb48319  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/16959.cc
! 5b0a769020d869a1115abf093676a558  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/2.cc
! 89dd00059553534be869fe2e4a7fb614  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/9523.cc
! 901d1e64962cbc33acfe594e2b438742  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/bitmask_operators.cc
! 566bdbbb13418726b86ae867c62b3147  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/case_label.cc
! 8e70846ac07560b7dff1ffbda579b32d  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/constexpr_operators.cc
! 91ccbfe8fb1b42858bda752f995a8636  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/bitmask_operators.cc
! 55bb3470095ed07a36174791b9b7b169  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/case_label.cc
! a7753ad217f6a9db04eda59ea1eedde0  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/constexpr_operators.cc
! d0ed05070d104246453cd2f75c50f53e  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/bitmask_operators.cc
! aca4affbfcef1968398515dce7b4fbd0  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc
! ca415fa238785d5e6aff773128dc287c  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/constexpr_operators.cc
! 6c4e7b384c9e288f7058f60bbed96d5d  libstdc++-v3/testsuite/27_io/ios_base/types/seekdir/case_label.cc
! 4a0a1281f68f9ce03e7bee96946ae3df  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/char/1.cc
! 985275516bb17cb2437cd1c0d9335208  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/char/2.cc
! d9c8631a9dcc3c24a5b1612226529daf  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/wchar_t/1.cc
! d437485229a7e0a95ebd24858341db97  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/wchar_t/2.cc
! ceeb63d65f89db72615c5541e22cc9e0  libstdc++-v3/testsuite/27_io/manipulators/basefield/char/1.cc
! ff06448329baa1c06328dea778ee6217  libstdc++-v3/testsuite/27_io/manipulators/basefield/wchar_t/1.cc
! 1db67b817840da392bb0abbc52519e51  libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/1.cc
! 53e332e2a022ca71ea030a255c442faa  libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/char/51288.cc
! 694e1a2dbd81fad828cb2f84907cb96f  libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/1.cc
! 4369b14d89f3ae467a4fc0adb5817a7c  libstdc++-v3/testsuite/27_io/manipulators/extended/get_money/wchar_t/51288.cc
! 57ea7a6e5d482b5441bd701a55e71bec  libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/char/1.cc
! 671f2124125a7d0169da9a4da18a5e8b  libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/char/2.cc
! fce483af0606714dcd2de7e74092938d  libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/wchar_t/1.cc
! 5ba95c9f75413e8ceb39c874e7281512  libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/wchar_t/2.cc
! cfe1b2401e3821ead0ca57e2cd6b2ef6  libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/1.cc
! ce0a7934057858623bdc0646ba9a3b38  libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/char/51288.cc
! 53be036d0c9b1d2699dc59fa1bf0ac79  libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/1.cc
! bd61fce6c1f1d1f7d744594e05ceef74  libstdc++-v3/testsuite/27_io/manipulators/extended/put_money/wchar_t/51288.cc
! 8d33200b10fe95d48f28a151ea5dbf3b  libstdc++-v3/testsuite/27_io/manipulators/extended/put_time/char/1.cc
! 5b4dba89d97417de71defcb48931de2d  libstdc++-v3/testsuite/27_io/manipulators/extended/put_time/char/2.cc
! e6b06c49449e8378e23830de5f9bf67d  libstdc++-v3/testsuite/27_io/manipulators/extended/put_time/wchar_t/1.cc
! ab77d7c9a74260d82a554de2b845ba38  libstdc++-v3/testsuite/27_io/manipulators/extended/put_time/wchar_t/2.cc
! 6afd90ac79bd9a6586035da628690e93  libstdc++-v3/testsuite/27_io/manipulators/standard/char/1.cc
! 8998224ec15903cbec28e9921bc03ff0  libstdc++-v3/testsuite/27_io/manipulators/standard/char/2.cc
! 48e9a13cbc4646d38c68dfcc1d29ed1a  libstdc++-v3/testsuite/27_io/manipulators/standard/char/60270.cc
! ef6b28bb244e689a9a059b181117ab35  libstdc++-v3/testsuite/27_io/manipulators/standard/char/dr2344.cc
! 2275dfe1bad01f56e5151dce689069d4  libstdc++-v3/testsuite/27_io/manipulators/standard/char/quoted.cc
! 68194be8d1df300736c207ed1da04aaa  libstdc++-v3/testsuite/27_io/manipulators/standard/char/quoted_sv.cc
! c1d6b67e0265b06cc8e7e24bdeb7745e  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/1.cc
! 3588884e1c856bc131ed5b184f4ad910  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/2.cc
! 2355c6efa1cb366aef70e6c1d13560b4  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc
! f8bfefbf414a855908f1f06a76ae7021  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/quoted.cc
! 63047d9a07fd5ad15b306335eb1c2600  libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/quoted_sv.cc
! 5ce406ccc6d033375ddb8b7b2eeaf655  libstdc++-v3/testsuite/27_io/objects/char/1.cc
! b102140282e40d0067deedc373b1bcee  libstdc++-v3/testsuite/27_io/objects/char/10.cc
! 49ae615a8ea534eec7d1bc8e29db80b6  libstdc++-v3/testsuite/27_io/objects/char/12048-1.cc
! a8421be87f6857ac7f4983dd64e5bf52  libstdc++-v3/testsuite/27_io/objects/char/12048-2.cc
! ff69878702deb3bda70499fc6625da07  libstdc++-v3/testsuite/27_io/objects/char/12048-3.cc
! 8fd63acbe9204d04979d3c2c47f9b7f4  libstdc++-v3/testsuite/27_io/objects/char/12048-4.cc
! 0d3cc85ef7ce8f9fe93fe8619e39bb04  libstdc++-v3/testsuite/27_io/objects/char/12048-5.cc
! a96de3a8a5bb7e6e9dbd2a2c2b526b98  libstdc++-v3/testsuite/27_io/objects/char/2.cc
! 25ca83d075620aaf9214b3246b13aa57  libstdc++-v3/testsuite/27_io/objects/char/2523-1_xin.cc
  8c1b578bb2722053c950f2cf943baf83  libstdc++-v3/testsuite/27_io/objects/char/2523-1_xin.in
! 224ef882ecc652a127a457c80c4ce32c  libstdc++-v3/testsuite/27_io/objects/char/2523-2_xin.cc
  daa7a5fffcba8b5ec5ca1a8de7734416  libstdc++-v3/testsuite/27_io/objects/char/2523-2_xin.in
! 8ecd5c01750f638bf135c102490a354c  libstdc++-v3/testsuite/27_io/objects/char/3045.cc
! 33d25a2bbd72204e170e39c962310b17  libstdc++-v3/testsuite/27_io/objects/char/3647.cc
! 7e4d87d966c2229ffa3c135ecc372628  libstdc++-v3/testsuite/27_io/objects/char/3_xin.cc
  b715c45a6677f269807dab0bbcf0ee1d  libstdc++-v3/testsuite/27_io/objects/char/3_xin.in
! 010a644a4fae8c4f049260d4c5bc7ff4  libstdc++-v3/testsuite/27_io/objects/char/41037.cc
! 548040c2f7b47302c744282c06e2cebc  libstdc++-v3/testsuite/27_io/objects/char/4_xin.cc
  68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/testsuite/27_io/objects/char/4_xin.in
! bbd4dadea8903f98de6bf789ecada030  libstdc++-v3/testsuite/27_io/objects/char/5.cc
! ac6214f71e93eb4baf556c32a8a926b7  libstdc++-v3/testsuite/27_io/objects/char/5268.cc
! 6dcd6b6c0e9b4dfed9e37146bf7e94d2  libstdc++-v3/testsuite/27_io/objects/char/5280_xin.cc
  81dc9bdb52d04dc20036dbd8313ed055  libstdc++-v3/testsuite/27_io/objects/char/5280_xin.in
! fe4d38625c8dac262fe2bc69265dabbb  libstdc++-v3/testsuite/27_io/objects/char/6.cc
! ac8bbd6c22eadcd956e7f577faf131c3  libstdc++-v3/testsuite/27_io/objects/char/6548_xin.cc
  d8e8fca2dc0f896fd7cb4cb0031ba249  libstdc++-v3/testsuite/27_io/objects/char/6548_xin.in
! de1b0d97ae2fe6962513a2231db51d6c  libstdc++-v3/testsuite/27_io/objects/char/6648-1_xin.cc
  069d0b68d99275bb4412e90bd9d5c966  libstdc++-v3/testsuite/27_io/objects/char/6648-1_xin.in
! ff5280ee0a73733749a80d095916ae78  libstdc++-v3/testsuite/27_io/objects/char/6648-2_xin.cc
  6b76e6feddcc145dc3499d8d123d9da7  libstdc++-v3/testsuite/27_io/objects/char/6648-2_xin.in
! 68134097eb6afa17db9b15a40bbf99b0  libstdc++-v3/testsuite/27_io/objects/char/7.cc
! 123a2edf46efbae4d2cfec399ae86c06  libstdc++-v3/testsuite/27_io/objects/char/7744_xin.cc
  0bee89b07a248e27c83fc3d5951213c1  libstdc++-v3/testsuite/27_io/objects/char/7744_xin.in
! dc01009b2a7a196cdd487de116e2ee17  libstdc++-v3/testsuite/27_io/objects/char/8.cc
! 8f86ffbf10f82edb8b711274d189b2c0  libstdc++-v3/testsuite/27_io/objects/char/9.cc
! a88daa402a113c2e456c24b6ab190152  libstdc++-v3/testsuite/27_io/objects/char/9661-1.cc
! d18040de6ec736125b1c2ca8b9a5cba7  libstdc++-v3/testsuite/27_io/objects/char/9661-2_xin.cc
  33ab658c3d687d1d73a0e92a596f725e  libstdc++-v3/testsuite/27_io/objects/char/9661-2_xin.in
! b69568014a6b1210e2b8d5e064c2e823  libstdc++-v3/testsuite/27_io/objects/char/dr455.cc
! 16a8f6010391db9d48faa10ba290fae3  libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc
! 1bc55d53b6fba6e3cc011c8ebff06105  libstdc++-v3/testsuite/27_io/objects/wchar_t/10.cc
! 50f28734137b80e1fcbe7c513dc6b2db  libstdc++-v3/testsuite/27_io/objects/wchar_t/11.cc
! 7a19dea6af4177c97688661e0534477f  libstdc++-v3/testsuite/27_io/objects/wchar_t/12.cc
! 38cfee9f2ceb5a617a0bc70345c07690  libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-1.cc
! 1cbd21d02506b9926046035257b83aa1  libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-2.cc
! 1900bfc38a06d38273d5e22245585669  libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-3.cc
! 7222ecac8262e8bc9acd746eab04aaad  libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-4.cc
! 5799ead1aaa8a3bb9c18d78db6d1082c  libstdc++-v3/testsuite/27_io/objects/wchar_t/12048-5.cc
! cf54b41541c7b8be7af3ad71b25d7b75  libstdc++-v3/testsuite/27_io/objects/wchar_t/13.cc
! 8892417ecdfb09b910a497b71c8628c3  libstdc++-v3/testsuite/27_io/objects/wchar_t/13582-1_xin.cc
  d577273ff885c3f84dadb8578bb41399  libstdc++-v3/testsuite/27_io/objects/wchar_t/13582-1_xin.in
! 4ac0a35863861821aa6f1bb6d2bff5ea  libstdc++-v3/testsuite/27_io/objects/wchar_t/2.cc
! 7e428089f5145cb0bc06a216cb245810  libstdc++-v3/testsuite/27_io/objects/wchar_t/2523-1_xin.cc
  8c1b578bb2722053c950f2cf943baf83  libstdc++-v3/testsuite/27_io/objects/wchar_t/2523-1_xin.in
! 169cb507d71795c708e440329a6b4061  libstdc++-v3/testsuite/27_io/objects/wchar_t/2523-2_xin.cc
  daa7a5fffcba8b5ec5ca1a8de7734416  libstdc++-v3/testsuite/27_io/objects/wchar_t/2523-2_xin.in
! 18af5d2a1d216b8f153aeeb72574cdeb  libstdc++-v3/testsuite/27_io/objects/wchar_t/3045.cc
! 124a2ce21f5128c8324307f4d055c0f2  libstdc++-v3/testsuite/27_io/objects/wchar_t/3647.cc
! 4d3e74e55f70ba2204730ee5bf6cb81c  libstdc++-v3/testsuite/27_io/objects/wchar_t/3_xin.cc
  b715c45a6677f269807dab0bbcf0ee1d  libstdc++-v3/testsuite/27_io/objects/wchar_t/3_xin.in
! 6504dcd0e1a6dd31bd764f018ff5ea14  libstdc++-v3/testsuite/27_io/objects/wchar_t/41037.cc
! 7ce06bad8ef07319c69adc8311f00bf3  libstdc++-v3/testsuite/27_io/objects/wchar_t/4_xin.cc
  68b329da9893e34099c7d8ad5cb9c940  libstdc++-v3/testsuite/27_io/objects/wchar_t/4_xin.in
! 02a893408e58eaa2cd65831707bcb677  libstdc++-v3/testsuite/27_io/objects/wchar_t/5.cc
! b16f4764375da58fc8725d2977c85f0c  libstdc++-v3/testsuite/27_io/objects/wchar_t/5268.cc
! c9b9b61152af528cc6a9847801e62677  libstdc++-v3/testsuite/27_io/objects/wchar_t/5280_xin.cc
  e7df7cd2ca07f4f1ab415d457a6e1c13  libstdc++-v3/testsuite/27_io/objects/wchar_t/5280_xin.in
! 34607acc6f6ac4fe8965d4ccb93cb136  libstdc++-v3/testsuite/27_io/objects/wchar_t/6.cc
! 08015ba11ff1f4d3b7012033f5ec39bb  libstdc++-v3/testsuite/27_io/objects/wchar_t/6548_xin.cc
  d8e8fca2dc0f896fd7cb4cb0031ba249  libstdc++-v3/testsuite/27_io/objects/wchar_t/6548_xin.in
! a34a7c48fc8e7fe27d4cafa580e1220e  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-1_xin.cc
  069d0b68d99275bb4412e90bd9d5c966  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-1_xin.in
! d09bba782678bbd755ae592648e22f41  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-2_xin.cc
  6b76e6feddcc145dc3499d8d123d9da7  libstdc++-v3/testsuite/27_io/objects/wchar_t/6648-2_xin.in
! 67d613239a22b0f102ef628646eae857  libstdc++-v3/testsuite/27_io/objects/wchar_t/7.cc
! 817f188112a3ddf3913d27b6e54f769c  libstdc++-v3/testsuite/27_io/objects/wchar_t/7744_xin.cc
  0bee89b07a248e27c83fc3d5951213c1  libstdc++-v3/testsuite/27_io/objects/wchar_t/7744_xin.in
! ea27b09bf681e34cb0d2ec607bd03017  libstdc++-v3/testsuite/27_io/objects/wchar_t/8.cc
! e7fdf994adde5c943203009987e96e90  libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc
! 0839f53595d179f51a77f4edd96c5b99  libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-1.cc
! 2b1717e3e059b5fdde295eb397792c13  libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-2_xin.cc
  33ab658c3d687d1d73a0e92a596f725e  libstdc++-v3/testsuite/27_io/objects/wchar_t/9661-2_xin.in
! 6b2b809a0339632804d4bb0396a7d145  libstdc++-v3/testsuite/27_io/objects/wchar_t/9662.cc
! 280a28825de131bf5c9a3865cd2f18fa  libstdc++-v3/testsuite/27_io/objects/wchar_t/9_xin.cc
  b715c45a6677f269807dab0bbcf0ee1d  libstdc++-v3/testsuite/27_io/objects/wchar_t/9_xin.in
! d0cde44e85017f24b167af61966352f2  libstdc++-v3/testsuite/27_io/objects/wchar_t/dr455.cc
! 720ff6f8ae373cb148e859da66f73a52  libstdc++-v3/testsuite/27_io/rvalue_streams-2.cc
! 8a8109e79feeb14172e6341a4230827b  libstdc++-v3/testsuite/27_io/rvalue_streams.cc
! fe40135327d86460d13b734f54db39ec  libstdc++-v3/testsuite/27_io/spanstream/1.cc
! 44feabe2b97157af832bd4b647727182  libstdc++-v3/testsuite/27_io/spanstream/2.cc
! 7b4979f7cac703bc8a45260b81e2fd43  libstdc++-v3/testsuite/27_io/spanstream/version.cc
! ebfba19d8a3fd6d3e27bb7b0a3577134  libstdc++-v3/testsuite/27_io/types/1.cc
! b06a0534dbed66ce7509c33dedb7fe0d  libstdc++-v3/testsuite/27_io/types/2.cc
! 98c43797dbb511da269fe5daf06f3c8d  libstdc++-v3/testsuite/27_io/types/3.cc
! 47c7f43bb6153743c7431f0c1c162142  libstdc++-v3/testsuite/27_io/types/4.cc
! ac17a08648e0976b0c7d6fdedfa3b873  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/awk/cstring_01.cc
! b4de49ecda034d158711adf6d15c8c16  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/empty_range.cc
! 80c695ed0ff87f3b529b00e4cfb3bac6  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_01.cc
! e8347ba03b7f5378d58b64d4e922c498  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_00_03.cc
! fbd79b13cd7aef5ecab357fd611ceddb  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_01_03.cc
! 32f14fe34dc2dd40d6d3d6a4b891f3df  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_02_03.cc
! 0937653336b347a906ba43cd94587acc  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/cstring_bracket_01.cc
! e274ba5050e2102a311fde96b3ce7b5d  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/dr2329_neg.cc
! 9983e99d52957755a613483612cf326f  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/53622.cc
! ff8182d14a432e985319ed4336aa9981  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/57173.cc
! 645ef0437066fb0e08a0cedac71058de  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/58576.cc
! 06fa934bf474857e0ba0f32eeb9690fc  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/61601.cc
! 6b8c928897563a940b7227d78631fbc1  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/68863.cc
! b0311e70fb6f446f4a6cec9e7f369a23  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/anymatcher.cc
! b3c88d81c73b16520e96fe8e8d6ece21  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/backref.cc
! 9cfe50ca41df6f9fbe5aa09d7ed5533b  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/empty_range.cc
! d8c997bf6115fa8c0e5c2b05d79d7314  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/emptygroup.cc
! cdeee8f209d889af85384de658b1bd16  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/hex.cc
! 8c67da8b417d116063a9d3e95031530b  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc
! 7d6b7590e51132196077e3704e4045d9  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/ungreedy.cc
! 55e2052bdbd994c17ce858656aa6a39b  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/63199.cc
! 02cfda3a505090ef5663594f178c9a67  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/anymatcher.cc
! 5f89e68dd3a252136755fc8aa506bd72  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/cjk_match.cc
! ffc9d3859cabc171a5c08fdc86388590  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/hex.cc
! f16ea0fccc236a616eb3de45deedb165  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_plus.cc
! 169988b204b1c2552c2010cbc0b05134  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_questionmark.cc
! 59891eac941f17f773b6a0c4fe8961af  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_range.cc
! 8a3fc4297f3e1247f1bdc8490ebd7c94  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_any.cc
! 1e803d3dcd7cf546f3cb2b4d984eb303  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_00_03.cc
! f20c36d62275c2e2c16acccfab982918  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_01_03.cc
! 3f35e30072b5103b4c271f60cd0f936f  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_02_03.cc
! 209884e5f36380bbcb6b2a976c99f5fc  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/wstring_locale.cc
! 738353c203eb8b056c97aefd696b8662  libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc
! 2b65ead41cca6c486af5b12cb9181709  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/103664.cc
! 3357e92ceadd3730f3898c7ed3935e4b  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/51711.cc
! 1decf72dc954b0b30b057123ec2d6e3a  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/basic_replace.cc
! 4dacd7cb18423e49e34fd5ff09a95bde  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/dr2213.cc
! 76803a92524aabfb29256da583280240  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/pr83601.cc
! e4f0b98d7633d7fa5169ada9c60b6d46  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc
! eb5d82166980050e50b28066cdae620e  libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/wchar_t/pr83601.cc
! 192dbc591a3f7e0de8c60afb8e5d44ff  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/61424.cc
! a8a7c2bc40c209a83f2fdcfa7efafff8  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/61720.cc
! 1dd66396fd980573aa8f3bdae642beb5  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/basic/string_01.cc
! f58c274ed3f1122ff170aaa04a827305  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/dr2332_neg.cc
! a49f6ecfa8fbac071d3e6bf19244f685  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/assertion.cc
! ebc3648862035cc00466203452c9254f  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/flags.cc
! a1bc01dcc801107ec3da084f4d0af073  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/greedy.cc
! 82d8b95d0386a90d8261f4c5541e2288  libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/string_01.cc
! be5036bc868f3f3488b30d40a412c9c5  libstdc++-v3/testsuite/28_regex/basic_regex/84110.cc
! 474984e9b4a0d71ca78599db5aa3d025  libstdc++-v3/testsuite/28_regex/basic_regex/85098.cc
! 133deac9e0fcb438e17191f596725c1d  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/cstring.cc
! 9494f381ee6ccd4befca29194dc8f0c0  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/cstring_op.cc
! 43935cef9a71dc7c3afe31c80c105184  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/lwg3296.cc
! d1f82037c575284f81d1276f1d689e02  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/moveable.cc
! 41d2264bf94546e471405f9c846bdefd  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/pstring.cc
! d04d421a07f5f9b2336e073148a0bf95  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/range.cc
! 6ad78708cefb6b3103d7868ad9ab0765  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/string.cc
! 7a94c2f5096a320fae0fd0f7771f580e  libstdc++-v3/testsuite/28_regex/basic_regex/assign/char/string_op.cc
! 195cadd08b447221da1077de685740f9  libstdc++-v3/testsuite/28_regex/basic_regex/assign/exception_safety.cc
! 8de75d1cab4a3a9ddf50cce0aaec0891  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/cstring.cc
! c0eb952f8942f59343eca8235bfcea02  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/cstring_op.cc
! e0abd274783b8c83fc8f3c0e2231cfc8  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/lwg3296.cc
! a52165d81016c17de6af831bafade3e7  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc
! f184d5a1271c4d250c53677a5b22ebf3  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/range.cc
! 92db27382f21c6fe1b4360b113055296  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/string.cc
! 3056f60db542b3d224e4819e80d50371  libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/string_op.cc
! 8476f093f1db5ed79bd854e4b06f5a6f  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/47724.cc
! e0d89fd67b747ceaa2e060416f261294  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/83598.cc
! ad2b2665c02881807d9dedfb0cd1bfb1  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/cstring.cc
! 0c86daf7206b7bceb1de2ad60cb847e8  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/default.cc
! ec99446e022c9f7032698b8fec448a3f  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/iter.cc
! 6bacb33a76925fd2917d35bd9b618190  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/pstring_char.cc
! dd54f8d5f5cba6767d08c1b6d7f7b30f  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/pstring_wchar_t.cc
! 7ba495cb5903423924009a3bf43a2ef4  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/raw_string.cc
! 9ca0da7c01dd241d9facd0dba099d29e  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/string_range_01_02_03.cc
! e77f3c2e6d67f6de3b5a8a4ec7842dde  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/cstring.cc
! 10aab32455c6f5d913d5f848a8d0f378  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/cstring_awk.cc
! 095a83fc1c745cc9cdf1bb6480466e9e  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/cstring_ecma.cc
! e4cba545a20786dac1d03223fca60f23  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/cstring_egrep.cc
! c2acf93308a61ca9aea965dc10efed5b  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/cstring_grep.cc
! 7ffb2f1e123d4bf64117d99e7d95f896  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/default.cc
! 9c80b6a78eb2b9bd9362289c681a9cfb  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/other.cc
! 2f505e10166a14a61bcbd7d9c8ef0d2c  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/char/range.cc
! fe06541ef57ec129c6696843097678a6  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/copy_char.cc
! 3594af62ef77a4937b0bb6fc4f80004a  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/deduction.cc
! df92a0818df04c647beb51f104933ccf  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/extended/cstring.cc
! 290972017bdcbb971e9633f1fa945f10  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/extended/string_range_01_02_03.cc
! 2e401c1bf8aabcb389e6eb25f1356cc9  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/grammar.cc
! a1cf335657462bf5cac1f16e8455081d  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/move_char.cc
! ae112cbe253b120959c93e4efd89b490  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/string_char.cc
! e85c55d89ee8849852b6577e09d46d3d  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/string_wchar_t.cc
! e85cb6613a54e615bf9b9750afed57d9  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/wchar_t/cstring.cc
! 2495c8f242548c513d8c41f4ece20cac  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/wchar_t/default.cc
! 51deca8d1bd023835deb2c8fa9ece80c  libstdc++-v3/testsuite/28_regex/basic_regex/ctors/wchar_t/range.cc
! 56434ba56a60dce62f39445010ee1e1b  libstdc++-v3/testsuite/28_regex/basic_regex/imbue/string.cc
! f3e8fbbfde8c1dcc4255bab7b6188530  libstdc++-v3/testsuite/28_regex/basic_regex/multiple_quantifiers.cc
! b69d497a208477c99bf51cf425a0d6fb  libstdc++-v3/testsuite/28_regex/basic_regex/requirements/constexpr_data.cc
! 729408a4620d7849cc01f90be551a668  libstdc++-v3/testsuite/28_regex/constants/constexpr.cc
! e5d03f3b75cb4adedff8cf122e42e49b  libstdc++-v3/testsuite/28_regex/constants/error_type.cc
! 94ab1bdb5049b6e4a01ee515a19ce178  libstdc++-v3/testsuite/28_regex/constants/match_flag_type.cc
! c2279432bf5a73eb5461037c3f89346f  libstdc++-v3/testsuite/28_regex/constants/syntax_option_type.cc
! c9310007288be7df70d690ac7cc7ba98  libstdc++-v3/testsuite/28_regex/headers/regex/std_c++0x_neg.cc
! 5868c349917882fbeaaa821d784f2e36  libstdc++-v3/testsuite/28_regex/init-list.cc
! 54334377bf719a86ac7bc16b4e475fbe  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/64140.cc
! 90f93d1adc2ce7796c56a407d693be50  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/string_01.cc
! a9e2bcac3406b1e01ab02234786ffad2  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/char/string_position_01.cc
! d2e20b19efb082b762cb41abbc295a11  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/ctors/char/default.cc
! a650d9282aad62752d7e816d382f6a09  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/ctors/char/dr2332_neg.cc
! c5194433aa15ea14c3b7a288b6be8cd5  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/ctors/wchar_t/default.cc
! b64e95a5b036730c67d9c01a8ba2f573  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/typedefs.cc
! 6cafd516c322fba7420dbcb8f83b4151  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/wchar_t/string_01.cc
! df6b5dc5e2cecaa0ff56ed828e39ac7c  libstdc++-v3/testsuite/28_regex/iterators/regex_iterator/wchar_t/string_02.cc
! 331f6c463db40f3488a36f51a2d9b6fb  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/64303.cc
! a6b34e765368b732dc9afa33a68c5bd5  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/char/string_01.cc
! cb5d94159405f721a4c23f6140829b1d  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/ctors/char/default.cc
! 201b9b7b1bbb531fdee62a9a6725c97c  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/ctors/char/dr2332_neg.cc
! 8cb85c9cdab780c9e8bf80aecf150de5  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/ctors/wchar_t/default.cc
! 4bc96d778a4efca2285ac8409c599951  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/typedefs.cc
! 276cba2341ae695ab974ee449996889f  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/wchar_t/string_01.cc
! 1346fd756cbbfa5fca18dc7e542b6835  libstdc++-v3/testsuite/28_regex/iterators/regex_token_iterator/wchar_t/wstring_02.cc
! e50868497a6eac9c6a7e389f3cda11ef  libstdc++-v3/testsuite/28_regex/match_results/102667.cc
! c0c620239c2efe0541afd787aae66d95  libstdc++-v3/testsuite/28_regex/match_results/94627.cc
! 523747fb6682da93512c29f0c3f84d96  libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
! 44e9dfbe7dc2fb0575e1461d15735094  libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc
! 943e9f2d23fb95391f8540b16cbf669c  libstdc++-v3/testsuite/28_regex/match_results/format.cc
! 2e43dc104fbcceb93622d74d81e245f4  libstdc++-v3/testsuite/28_regex/match_results/out_of_range_submatches.cc
! eaff09d5aac2fd9737983f9fa78b105a  libstdc++-v3/testsuite/28_regex/match_results/pmr_typedefs.cc
! e7b1ddf58a8848833e5de66f20f08ec8  libstdc++-v3/testsuite/28_regex/match_results/swap.cc
! b6fd9259eef9f82dcba035520e41bb87  libstdc++-v3/testsuite/28_regex/match_results/typedefs.cc
! f35f493d8d810f4f1f0b8321e7227972  libstdc++-v3/testsuite/28_regex/range_access.cc
! cdc54698f123d7e50bea9dc4b78122ff  libstdc++-v3/testsuite/28_regex/regex_error/base.cc
! 59df3e6a2f30c6ac801f55e528aa14d9  libstdc++-v3/testsuite/28_regex/regex_error/regex_error.cc
! 2a11325423901fdd4d2aa092058924d4  libstdc++-v3/testsuite/28_regex/regression.cc
! f22f00c58ea384f409081ff939be03cb  libstdc++-v3/testsuite/28_regex/requirements/typedefs.cc
! feb969c74033ad4008339f72fdccbced  libstdc++-v3/testsuite/28_regex/simple_c++11.cc
! 2ac64b862cd54358af2736bf93d50977  libstdc++-v3/testsuite/28_regex/sub_match/cast_char.cc
! 1eecbe299af4fc803c31bfdf45e0923e  libstdc++-v3/testsuite/28_regex/sub_match/cast_wchar_t.cc
! 44601f6ab0248eba2173fd50b4ab194a  libstdc++-v3/testsuite/28_regex/sub_match/compare.cc
! cfd16391df30a7db0e6ec16f18a644ad  libstdc++-v3/testsuite/28_regex/sub_match/compare_c++20.cc
! 240401b75545ef4a0fb86b6fd889ff4f  libstdc++-v3/testsuite/28_regex/sub_match/embedded_zeros_cmp.cc
! 77ffa99fca894db9a74baab375ab3bea  libstdc++-v3/testsuite/28_regex/sub_match/length.cc
! bef73fc3adc99f983abc11e9fc4e238a  libstdc++-v3/testsuite/28_regex/sub_match/typedefs.cc
! 5901a5eac9cf0a867501aa44517bf8a7  libstdc++-v3/testsuite/28_regex/traits/char/ctor.cc
! 3804fb1ad7cffa75d057635f8248632e  libstdc++-v3/testsuite/28_regex/traits/char/icase.cc
! 49466e174dd5a86631734b23588239f6  libstdc++-v3/testsuite/28_regex/traits/char/isctype.cc
! 8df1ad86c94a4b28227349e1682d020c  libstdc++-v3/testsuite/28_regex/traits/char/length.cc
! 0591f2ade82a98a9f6adab35306d2227  libstdc++-v3/testsuite/28_regex/traits/char/lookup_classname.cc
! 8bab2d3d03900d0e60862e7fa3724605  libstdc++-v3/testsuite/28_regex/traits/char/lookup_collatename.cc
! 0c0494bb6dcc76e8deea7fae76843c7c  libstdc++-v3/testsuite/28_regex/traits/char/transform.cc
! 9f7e68998a2663d262e0372dc2914b80  libstdc++-v3/testsuite/28_regex/traits/char/transform_primary.cc
! 5f7297af8db43ccc2e1cf35cf3725f6a  libstdc++-v3/testsuite/28_regex/traits/char/translate.cc
! 2d6d56baa3fa83d36d8031006561813d  libstdc++-v3/testsuite/28_regex/traits/char/translate_nocase.cc
! 4a1e0607461ae5649830a500f743eff0  libstdc++-v3/testsuite/28_regex/traits/char/user_defined.cc
! 729fd2bf23dc65612702e22c94db9f5b  libstdc++-v3/testsuite/28_regex/traits/char/value.cc
! 290acff0f31c3adb8f00f24b8de59089  libstdc++-v3/testsuite/28_regex/traits/wchar_t/ctor.cc
! ed92117f703a8d2f128c2d0a71c9c6d2  libstdc++-v3/testsuite/28_regex/traits/wchar_t/isctype.cc
! 82d390577b8f85d8bf2cab459430f227  libstdc++-v3/testsuite/28_regex/traits/wchar_t/length.cc
! fa8e8c344cacba2d37b10045002c80f9  libstdc++-v3/testsuite/28_regex/traits/wchar_t/lookup_classname.cc
! 738efc09ac4f8a6fcee85772f59586ee  libstdc++-v3/testsuite/28_regex/traits/wchar_t/lookup_collatename.cc
! 7013286aeded9118179710c4e565e4d5  libstdc++-v3/testsuite/28_regex/traits/wchar_t/transform.cc
! 892d008fb7eb9459888967c30f1a6c30  libstdc++-v3/testsuite/28_regex/traits/wchar_t/transform_primary.cc
! fa4cca39f8873aa5562b9f2135d0f17f  libstdc++-v3/testsuite/28_regex/traits/wchar_t/translate.cc
! 4504855e7542223d9d3f9fefb0d88918  libstdc++-v3/testsuite/28_regex/traits/wchar_t/translate_nocase.cc
! a81aafe3beec53e3963c7ccf65715512  libstdc++-v3/testsuite/28_regex/traits/wchar_t/user_defined.cc
! 1c39872a97096787ae8c55ffa7c3299c  libstdc++-v3/testsuite/28_regex/traits/wchar_t/value.cc
! 7dac9abc6654d61bcf88cf74d4982d83  libstdc++-v3/testsuite/29_atomics/atomic/60658.cc
! 1f0e5b1e0b71de930a8d2b53f15fb5a5  libstdc++-v3/testsuite/29_atomics/atomic/60695.cc
! 75c54bc5f05cef8672d1ac24cd7a3ad3  libstdc++-v3/testsuite/29_atomics/atomic/62259.cc
! d7d55d34f3db095a62d45482624abbe0  libstdc++-v3/testsuite/29_atomics/atomic/64658.cc
! 58693221c0b6100efb8a07f56b7bedfb  libstdc++-v3/testsuite/29_atomics/atomic/65147.cc
! d310f72e085b2cb6411ecb740db38611  libstdc++-v3/testsuite/29_atomics/atomic/65913.cc
! d6489faed85230dc9d6708463d682f44  libstdc++-v3/testsuite/29_atomics/atomic/69301.cc
! f984b42542dd2ac4d20456430bce2a00  libstdc++-v3/testsuite/29_atomics/atomic/69769.cc
! 4326089b54e21a1eb236d9769573fbfb  libstdc++-v3/testsuite/29_atomics/atomic/70766.cc
! 0badebcbf963a1d75c9d472f196c9248  libstdc++-v3/testsuite/29_atomics/atomic/cons/49445.cc
! 4fe53155186779595e4a0b7b60a7c02b  libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
! d713369f3c71cd215ff3c0953b04bae2  libstdc++-v3/testsuite/29_atomics/atomic/cons/constexpr.cc
! fef87a64526f22b839452f0efbdd4cdf  libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_list.cc
! 8fceb9c30ad700bc96dca0198991ac22  libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
! 9bc5ef411e16b9fcd2cc6817cfd31c3d  libstdc++-v3/testsuite/29_atomics/atomic/cons/default.cc
! 2bbf50c1cd21b846c15c78c9a20df276  libstdc++-v3/testsuite/29_atomics/atomic/cons/direct_list.cc
! 6d7282b4259d5ab24b107aebd74d0170  libstdc++-v3/testsuite/29_atomics/atomic/cons/single_value.cc
! 9da124879d1ef8f2305ede0c3f4db548  libstdc++-v3/testsuite/29_atomics/atomic/cons/user_pod.cc
! ac06185b79905e0a4fba519757c05672  libstdc++-v3/testsuite/29_atomics/atomic/cons/value_init.cc
! e9540f6bd9185d028fd135dd25eb7e6c  libstdc++-v3/testsuite/29_atomics/atomic/is_always_lock_free.cc
! 8cc4765f70d42bf14be1d801df259839  libstdc++-v3/testsuite/29_atomics/atomic/nonmembers.cc
! b729caf695c27dbc8d536839613c8d9a  libstdc++-v3/testsuite/29_atomics/atomic/operators/51811.cc
! 7f91b348514ac35776ad3e53448bd4dd  libstdc++-v3/testsuite/29_atomics/atomic/operators/56011.cc
! 2df0a81a641ae33d9cfd133dadcd39bd  libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_assignment.cc
! 0df4f70d5e97fcbf1c3acd06207fdcec  libstdc++-v3/testsuite/29_atomics/atomic/operators/integral_conversion.cc
! 7cb4964ae17d8bcfde308959b30abe0f  libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc
! 941f20241a55b6d78d9339d164c62788  libstdc++-v3/testsuite/29_atomics/atomic/requirements/base_classes.cc
! 4c8e19fa67427aa43bf996a402d62f21  libstdc++-v3/testsuite/29_atomics/atomic/requirements/compare_exchange_lowering.cc
! ea7d0a15ff1a6f72df7d4e2f29014825  libstdc++-v3/testsuite/29_atomics/atomic/requirements/explicit_instantiation/1.cc
! da994fdc19aa001d3e23f43514ef358a  libstdc++-v3/testsuite/29_atomics/atomic/requirements/typedefs.cc
! 68ee8872546ce9ede1d5569f56dc9399  libstdc++-v3/testsuite/29_atomics/atomic/requirements/types_neg.cc
! 623bb8006a31731b696c7699962aea0f  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/1.cc
! 54372cf74aa840c1cb7e2675682bf96e  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/100334.cc
! 2bdcb62d2982452b9993a032e812baa0  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/102994.cc
! 39b28214a1b360c8a4a8cb89cf5af097  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/2.cc
! 8a4a32387700ee04e625382ebc3b95f4  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/bool.cc
! 1b90057bcc52707e39d8b95e7e0a1309  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/generic.cc
! 286d1b8bcaaefcee79ed0066949b670d  libstdc++-v3/testsuite/29_atomics/atomic/wait_notify/pointers.cc
! 0b2337b9c78eb89682f20ed052bd910f  libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
! 0418446ec307ff03f0c2ef0ed907c0ee  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc
! 5387d3a4e450126bdccf49228a956c15  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/56012.cc
! 1594a38c70460f9d07f019b45bbbadf4  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/aggregate.cc
! 8a6720addc6b9ed56f53f9081721937d  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/assign_neg.cc
! 0fb657b6a0ddbd2cbe9bbaf00b0d4acd  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/copy_neg.cc
! 221f463ca1ed77ac50ca681b29486c30  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/default.cc
! 8596bae2e267db7fc38c89a6d36560a4  libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/value_init.cc
! 1d8c43b8f0ab924210971fe82357a6cb  libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/standard_layout.cc
! 19953cb5d1167a542d32d6a700b47e55  libstdc++-v3/testsuite/29_atomics/atomic_flag/requirements/trivial.cc
! 6120e54f4da75932615cad759ccbe716  libstdc++-v3/testsuite/29_atomics/atomic_flag/test/explicit.cc
! 6b54829de365186c83435bea6b57ef09  libstdc++-v3/testsuite/29_atomics/atomic_flag/test/implicit.cc
! 9ff8dd099694c57ed99ed9acef7fa559  libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit-hle.cc
! 11532dcbc4f6f7545b9c5d744ec05862  libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc
! 11532dcbc4f6f7545b9c5d744ec05862  libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc
! e71470acb0c754471a6608972392445c  libstdc++-v3/testsuite/29_atomics/atomic_flag/wait_notify/1.cc
! b31dc8d0e0bed12a3c992c9ed76bd8d8  libstdc++-v3/testsuite/29_atomics/atomic_float/1.cc
! 4249715f80a82c2b5ea3231842ecc6e3  libstdc++-v3/testsuite/29_atomics/atomic_float/95282.cc
! 8eed643d8fac17d811631ed45add934f  libstdc++-v3/testsuite/29_atomics/atomic_float/requirements.cc
! 9e7f7aeef2efd7e8a67a670326dbfd44  libstdc++-v3/testsuite/29_atomics/atomic_float/value_init.cc
! 7623eb98a59dcfa5cd284a55a16c9e0f  libstdc++-v3/testsuite/29_atomics/atomic_float/wait_notify.cc
! 0177f6365b0a8828bae44cfcb1b10826  libstdc++-v3/testsuite/29_atomics/atomic_integral/60940.cc
! 06f08caa19c4f895dbfb60a510b1a573  libstdc++-v3/testsuite/29_atomics/atomic_integral/65147.cc
! 3ae7675da89468b453a1b4ba79a99554  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
! 24701029a71c0d1d973901e52b05218f  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/constexpr.cc
! c7f92587c3fb4246b95def2d6c6bd9cd  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_list.cc
! fb759788350a8dba73a973173af082a1  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
! 1a9a40e535701af6e75fe8a63b3fdd0c  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/default.cc
! 5494f8c1360425ddc369e866a62c158a  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/direct_list.cc
! 694fc2764ee5f2d82f32869bf2b5420d  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/single_value.cc
! 04667ab98ed1da388f7fbf36efcdeda3  libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/value_init.cc
! 7c3e5a0fb84bfd173cbb746a92b3a74e  libstdc++-v3/testsuite/29_atomics/atomic_integral/is_always_lock_free.cc
! bf3e2c94447667a8a43ca60d7045c1ff  libstdc++-v3/testsuite/29_atomics/atomic_integral/nonmembers.cc
! 2d9de1aa2731016b05723633791ca72d  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise.cc
! a5e26d3eb9a46da7f6f50aad7e919ddb  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
! 52ca6fd86bdc3040208ffa6663808bc9  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement.cc
! a4aa252415a6f9813546e616fe37bab7  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
! 300c8fb5dbded71058a9589ecddcb291  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment.cc
! 5c26c9bdd4c71ef45bd51587aba08212  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
! 38827bdae1da2ce2188e7ad7a05132fd  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/integral_assignment.cc
! bdf02c939061c8d94f0b6784d8e4c56e  libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/integral_conversion.cc
! f6df1525afc809ddddb34a6bae138b3a  libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/standard_layout.cc
! 15b848145fcdf92227023ad55a9b4dc7  libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/trivial.cc
! 015c9ec55b26fa2ef8f7620cc24c9558  libstdc++-v3/testsuite/29_atomics/atomic_integral/requirements/typedefs.cc
! e56ed08785afa69e08251e342d1f395a  libstdc++-v3/testsuite/29_atomics/atomic_integral/wait_notify.cc
! cc05b74dce6bfaf7fa3af876ad057cd2  libstdc++-v3/testsuite/29_atomics/atomic_ref/deduction.cc
! 37be90ca598c788d8e5b02aa0b0ae53a  libstdc++-v3/testsuite/29_atomics/atomic_ref/float.cc
! 3a546059f2a6066139b35c14b6fa38c0  libstdc++-v3/testsuite/29_atomics/atomic_ref/generic.cc
! 12fb714a7fa8f39114511276358fd3a3  libstdc++-v3/testsuite/29_atomics/atomic_ref/integral.cc
! 7034bc3ae184c8958af1f3a11dfc17eb  libstdc++-v3/testsuite/29_atomics/atomic_ref/pointer.cc
! 27c01aff7ef28a3ed61754f2831e3f16  libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements.cc
! 10034a80f8f6b1940c4ecc0cece88608  libstdc++-v3/testsuite/29_atomics/atomic_ref/wait_notify.cc
! a72ff9c3924e912bc252345740699b25  libstdc++-v3/testsuite/29_atomics/headers/atomic/functions_std_c++0x.cc
! 34bd3a1a2b1023c5311e4989120343e6  libstdc++-v3/testsuite/29_atomics/headers/atomic/macros.cc
! b26b6c3ab4e65cef473338f210816faf  libstdc++-v3/testsuite/29_atomics/headers/atomic/std_c++0x_neg.cc
! 7db4662ddff4c7c62995e0de9f1e8405  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x.cc
! c815717d5bbf78e6f780e03503055dbc  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc
! cdebc11a8923fb6de3f03ea63cf74941  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++20.cc
! 55376992b20694d181d3725445caa52d  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc
! f23dfe29146108b528effe24f525589a  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++2a.cc
! 6e292417e714715b424197cf8c799dcc  libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++2a_neg.cc
! 8f793a0a8dcd336f7edd48cf780787d8  libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/c_compat.cc
! 662bfa6fa4113393d487978b4c67cf6f  libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/version.cc
! a573ce0b27e15d49e832b92d933409d5  libstdc++-v3/testsuite/30_threads/async/42819.cc
! f60982470922e3c57bc82f2b54f83006  libstdc++-v3/testsuite/30_threads/async/49668.cc
! 9d2f298fca504812dbd2863844b574ae  libstdc++-v3/testsuite/30_threads/async/54297.cc
! b4edbfe9282b736ac9fcdd47282be564  libstdc++-v3/testsuite/30_threads/async/69724.cc
! eafef75c594905f92f7f7f88ca906984  libstdc++-v3/testsuite/30_threads/async/84532.cc
! 64b90b9f7807c593bb69422bb01a5b56  libstdc++-v3/testsuite/30_threads/async/any.cc
! 8a1a0cf118b8007f1d4beecefde7c29d  libstdc++-v3/testsuite/30_threads/async/async.cc
! d59bc69847522a99bde178c5d22df433  libstdc++-v3/testsuite/30_threads/async/except.cc
! 2602053984261794238a5aecd803d835  libstdc++-v3/testsuite/30_threads/async/forced_unwind.cc
! bf7976b9249a071d6cab1ceb8f7185b0  libstdc++-v3/testsuite/30_threads/async/launch.cc
! c51d7e288f5f998353c29560e8040fa0  libstdc++-v3/testsuite/30_threads/async/lwg2021.cc
! 85ef27931acdb4564a76f841128d7b02  libstdc++-v3/testsuite/30_threads/async/sync.cc
! bedbb164a0ec54eb9ff32abd589bb3d2  libstdc++-v3/testsuite/30_threads/barrier/1.cc
! 46f3b209581878b53316ca67cef9762d  libstdc++-v3/testsuite/30_threads/barrier/2.cc
! d58d34a1127cd71d2444902a0fe4e986  libstdc++-v3/testsuite/30_threads/barrier/arrive.cc
! c637b582692127ee5367573a8547eaf3  libstdc++-v3/testsuite/30_threads/barrier/arrive_and_drop.cc
! df30ffd9dd34492ce09abc88ba0b9643  libstdc++-v3/testsuite/30_threads/barrier/arrive_and_wait.cc
! 37c7ac016f9b9d4ba57c337621e84bea  libstdc++-v3/testsuite/30_threads/barrier/completion.cc
! 06730d55e028a33b34cdf5df350cd521  libstdc++-v3/testsuite/30_threads/call_once/39909.cc
! 7eb5b007d4254b55e1026244a13e0dbc  libstdc++-v3/testsuite/30_threads/call_once/49668.cc
! 9af18a8f11ef0ab9ade20cfc392160b6  libstdc++-v3/testsuite/30_threads/call_once/60497.cc
! e203a77e277aa2c48fa36429557136e4  libstdc++-v3/testsuite/30_threads/call_once/call_once1.cc
! 0a72a90b0438241689f0c5b8907e5123  libstdc++-v3/testsuite/30_threads/call_once/dr2442.cc
! 5d1219a35c60bb5c3b5a50b6db56c6f7  libstdc++-v3/testsuite/30_threads/call_once/once_flag.cc
! e753c499cffd65588030d83135f18c26  libstdc++-v3/testsuite/30_threads/condition_variable/54185.cc
! 0edb1784a0d5e2bfb8eef8501c82944f  libstdc++-v3/testsuite/30_threads/condition_variable/cons/1.cc
! ac3e7825bde6cff7dc8783a0b5797e6a  libstdc++-v3/testsuite/30_threads/condition_variable/cons/assign_neg.cc
! b70743d0f7d91b05506124049ada21a3  libstdc++-v3/testsuite/30_threads/condition_variable/cons/copy_neg.cc
! a108050ff22f757d7206500c1d169c25  libstdc++-v3/testsuite/30_threads/condition_variable/members/1.cc
! a22ffec2ff77db41215e429fe83d58ac  libstdc++-v3/testsuite/30_threads/condition_variable/members/103382.cc
! 7e9aac5030f31c92ed98136af3aea449  libstdc++-v3/testsuite/30_threads/condition_variable/members/2.cc
! c35e94527df36468636ca46e761acee1  libstdc++-v3/testsuite/30_threads/condition_variable/members/3.cc
! 5764eeb710f921cc65f99477698b7c80  libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc
! 34baf365989004af765179e3ce052fca  libstdc++-v3/testsuite/30_threads/condition_variable/members/68519.cc
! b57252c860fbbc6aa79caae8d434e524  libstdc++-v3/testsuite/30_threads/condition_variable/members/clock_neg.cc
! 9d9a0a2e3f2912a7cee29b153fc9dd2e  libstdc++-v3/testsuite/30_threads/condition_variable/native_handle/typesizes.cc
! 06895f3c0a6c0ffdd729394807849325  libstdc++-v3/testsuite/30_threads/condition_variable/requirements/standard_layout.cc
! bc493e2c2d50ea086039db367acb2abc  libstdc++-v3/testsuite/30_threads/condition_variable/requirements/typedefs.cc
! 4fa09a4dc17493f888b031e5ee60e533  libstdc++-v3/testsuite/30_threads/condition_variable_any/50862.cc
! 7f5f4491a926403bc1b199bb9d587276  libstdc++-v3/testsuite/30_threads/condition_variable_any/53830.cc
! e5365f6c18ed79ac823f56b80729e0c6  libstdc++-v3/testsuite/30_threads/condition_variable_any/cond.cc
! 878f3e0dd7c9a7669616a714d2c0b432  libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/1.cc
! fae42175ccfa076ff954c392f01b04db  libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/assign_neg.cc
! f9a0b12530002fa30b03afa26d97cef7  libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/copy_neg.cc
! 6dceea1ed2c5a7cfca0a138fcc7b17a9  libstdc++-v3/testsuite/30_threads/condition_variable_any/members/1.cc
! 1230d225d0b75d796b6a5aca8b11f9ee  libstdc++-v3/testsuite/30_threads/condition_variable_any/members/2.cc
! 253c18c86a976843ff8c4b910fc19f07  libstdc++-v3/testsuite/30_threads/condition_variable_any/members/clock_neg.cc
! 6875279deb09f486b58f8c1d8ae616d1  libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/1.cc
! 3c8377bc76b4f213519fd55e486c3a65  libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/2.cc
! 9776c874ae9a4fc5e6cb4ff3440fb0be  libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/wait_on.cc
! ac3a66e8470b7f2b3dec945bbf0cbad2  libstdc++-v3/testsuite/30_threads/future/cons/assign_neg.cc
! 85ae18e723e3346044ec3ad30406eb3b  libstdc++-v3/testsuite/30_threads/future/cons/constexpr.cc
! 10ae7ca12c78b4600aef676c310b9d04  libstdc++-v3/testsuite/30_threads/future/cons/copy_neg.cc
! 3ac5cefcb3454c1f41835fe5ea4a19bf  libstdc++-v3/testsuite/30_threads/future/cons/default.cc
! 3eb06fdc1f829de86ac341208c4024de  libstdc++-v3/testsuite/30_threads/future/cons/move.cc
! ee41556c9052b9c6d04e5c2b9df97f83  libstdc++-v3/testsuite/30_threads/future/cons/move_assign.cc
! 6693b8d2a540fbe995f52f683b4a7129  libstdc++-v3/testsuite/30_threads/future/members/45133.cc
! af0975bd719408cac31c6ef952b7a2cd  libstdc++-v3/testsuite/30_threads/future/members/93456.cc
! 29ebfd1e201f5da8e562f639ec7bcef4  libstdc++-v3/testsuite/30_threads/future/members/clock_neg.cc
! 9736b82bb36026a3eda8001c222c6013  libstdc++-v3/testsuite/30_threads/future/members/get.cc
! 5c3fe324c426d8eb1e9f9a9de31188cf  libstdc++-v3/testsuite/30_threads/future/members/get2.cc
! 5bf4f45d8dcbe25a50a278bda7102e18  libstdc++-v3/testsuite/30_threads/future/members/poll.cc
! 255210b0d40a8747fefbb38f3dbb15aa  libstdc++-v3/testsuite/30_threads/future/members/share.cc
! 4265982113d7369f98db946764b9cb19  libstdc++-v3/testsuite/30_threads/future/members/valid.cc
! 0082487b5bcf0b6de0a477f38e10fa1e  libstdc++-v3/testsuite/30_threads/future/members/wait.cc
! 512b064b7be66a08f6e41d3178121c16  libstdc++-v3/testsuite/30_threads/future/members/wait_for.cc
! 6acefd19fb48245e4f59dea8bb7b8406  libstdc++-v3/testsuite/30_threads/future/members/wait_until.cc
! 4ea0f817201a4f1db79fafa624364acf  libstdc++-v3/testsuite/30_threads/future/requirements/explicit_instantiation.cc
! 89690ef5f7611bee1ef2c75d075c9b01  libstdc++-v3/testsuite/30_threads/future/requirements/lwg3458.cc
! 6ba91c862433dd3586ba4fb5ad80610c  libstdc++-v3/testsuite/30_threads/headers/condition_variable/std_c++0x_neg.cc
! 64bfd71916745240ecd0ea47c50231b1  libstdc++-v3/testsuite/30_threads/headers/condition_variable/types_std_c++0x.cc
! 8f44cc259abd2080daefd277c517f02c  libstdc++-v3/testsuite/30_threads/headers/future/std_c++0x_neg.cc
! 92523b7427f119ea0918938a39f7a0b6  libstdc++-v3/testsuite/30_threads/headers/future/types_std_c++0x.cc
! 4bb8757382bdc3ca828832a2d0d1efdb  libstdc++-v3/testsuite/30_threads/headers/mutex/std_c++0x_neg.cc
! f4d6bcedb1cc73dbe5416305cb73b5d7  libstdc++-v3/testsuite/30_threads/headers/mutex/types_std_c++0x.cc
! 461b50fbd909e4b2d5c849e57e9ec1b9  libstdc++-v3/testsuite/30_threads/headers/stop_token/synopsis.cc
! 92086cef61efb73f820e72d1a21331d2  libstdc++-v3/testsuite/30_threads/headers/thread/std_c++0x_neg.cc
! 170713a51007be0b6835d24485768df9  libstdc++-v3/testsuite/30_threads/headers/thread/types_std_c++0x.cc
! 1985675706eb892eadc812c514ae924d  libstdc++-v3/testsuite/30_threads/headers/thread/types_std_c++20.cc
! 1eb8c78baf61f672035a780d1bc7d36a  libstdc++-v3/testsuite/30_threads/jthread/1.cc
! 0e687b9098ebccb04a9238c84c6e0cac  libstdc++-v3/testsuite/30_threads/jthread/100612.cc
! 6edb5656faecde69343b23e3b3db1592  libstdc++-v3/testsuite/30_threads/jthread/3.cc
! 6a2c294320cdbdd573b3f93873d085da  libstdc++-v3/testsuite/30_threads/jthread/95989.cc
! b55c99deb63c02f39aa02fc66be64acd  libstdc++-v3/testsuite/30_threads/jthread/jthread.cc
! 0ad1343625e3788ede8ebb0ab8b38d4d  libstdc++-v3/testsuite/30_threads/jthread/version.cc
! 30971da68e375bf602cf480acadd4e96  libstdc++-v3/testsuite/30_threads/latch/1.cc
! 452e28b8c1be8afe227c9206fca7aefb  libstdc++-v3/testsuite/30_threads/latch/2.cc
! 4bb21af793afef30f3370d0b9039a2cd  libstdc++-v3/testsuite/30_threads/latch/3.cc
! d3295b584799cfab3400e4fa2c44e959  libstdc++-v3/testsuite/30_threads/lock/1.cc
! 8cb66893a8a5b47651007472847e8906  libstdc++-v3/testsuite/30_threads/lock/2.cc
! f0075efae50a9a94842fcb831a69f246  libstdc++-v3/testsuite/30_threads/lock/3.cc
! 664ae9b5e577a4ff67a4cfffe5f2e2d6  libstdc++-v3/testsuite/30_threads/lock/4.cc
! 3992738c1f3b9b5ce5f729bcd60b5a13  libstdc++-v3/testsuite/30_threads/lock_guard/cons/1.cc
! c8c63a457f6e094946ffa7f864db38db  libstdc++-v3/testsuite/30_threads/lock_guard/cons/deduction.cc
! f9d0f83e27a6847acac0c2b5b764a204  libstdc++-v3/testsuite/30_threads/lock_guard/requirements/explicit_instantiation.cc
! 6dcdec547ac918d8b2667ab296f04c4f  libstdc++-v3/testsuite/30_threads/lock_guard/requirements/typedefs.cc
! 46a1b44760656d072153818a913d9f41  libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc
! f135b1db6dc9edce6fe50de10e89a3c0  libstdc++-v3/testsuite/30_threads/mutex/cons/assign_neg.cc
! 318979bbdb76d29bd9d1861a5b8b7e37  libstdc++-v3/testsuite/30_threads/mutex/cons/constexpr.cc
! a960e12957e3f169668a84b50b9b1e7f  libstdc++-v3/testsuite/30_threads/mutex/cons/copy_neg.cc
! 9913afc2b6abf483241f79b4bb8d7407  libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc
! cda7d2420175a05cba6339c0a414d9ed  libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc
! 92b915f2672e17251e0a644aa79966d5  libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc
! 80161ff9bc396e7683ea03e899639a56  libstdc++-v3/testsuite/30_threads/mutex/native_handle/typesizes.cc
! 6a03a9e173aa6b0419c6e9fb48eda43f  libstdc++-v3/testsuite/30_threads/mutex/requirements/standard_layout.cc
! e035122fe11c72b9e6e7a87945b5b6b9  libstdc++-v3/testsuite/30_threads/mutex/requirements/typedefs.cc
! 795247f08bf865828bf3226a81d432c6  libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc
! ccb06e72f4500e9d7309e7c398bc5da8  libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc
! e3bc804b5dace33136207ffae27028b0  libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc
! 3fe82633598a7e8fc363e55553d84dc9  libstdc++-v3/testsuite/30_threads/mutex/unlock/2.cc
! 86001306ba43ef2838edac457485a07b  libstdc++-v3/testsuite/30_threads/packaged_task/49668.cc
! 4ddfb1188381783b95abe1cb04834ea2  libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc
! 144dbca905b4c4bd76992b9c8a0208d2  libstdc++-v3/testsuite/30_threads/packaged_task/79486.cc
! 59cd2b0744dcc3390e1532ee32b25f11  libstdc++-v3/testsuite/30_threads/packaged_task/cons/1.cc
! 03e3bb74f9e7e6e269f9218eadfe767e  libstdc++-v3/testsuite/30_threads/packaged_task/cons/2.cc
! e36b3ddc89f0799a70ecdcf5bd14c49f  libstdc++-v3/testsuite/30_threads/packaged_task/cons/3.cc
! 2f075fd1df8fcbb15277f121527945d5  libstdc++-v3/testsuite/30_threads/packaged_task/cons/56492.cc
! 44d379c14fdfd9ae4376fa4ed054ed50  libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc
! 0cef58f35b21865c508d48044bc9806d  libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc2.cc
! 58309f598b7122ec679a16b1d99c81ee  libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc_min.cc
! 2e947ea4521ba72581e24d7e913ca789  libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc
! 730349cf2c2bcc8ef505c31279a9d9b1  libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc
! 922f490a3c9acd1bc20db3ecb9146e9c  libstdc++-v3/testsuite/30_threads/packaged_task/cons/deduction.cc
! e5edd5813dedc4a7b9c7f78ab4cee436  libstdc++-v3/testsuite/30_threads/packaged_task/cons/move.cc
! 256b46a220ef577f7b70cd51b86419f0  libstdc++-v3/testsuite/30_threads/packaged_task/cons/move_assign.cc
! 3d77d111adc632e8d80efeca488a44af  libstdc++-v3/testsuite/30_threads/packaged_task/forced_unwind.cc
! 302e8a84a403cad05d4fdd9e016cb16b  libstdc++-v3/testsuite/30_threads/packaged_task/members/at_thread_exit.cc
! 15312aa18aa9ca501e805c7b809b5a37  libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future.cc
! 1f0c86c9f99838448a329ed69f7ef0f2  libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future2.cc
! 874dab2a2c94e8ef40f1dba12e3828a7  libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke.cc
! 7962fe59f1814569adc07dddc2ee1adb  libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke2.cc
! 22cbc67d3714bf3ee5a6ccdea49c6fcf  libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke3.cc
! cc7f505dc969821a9b3baa8bbd472b1f  libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke4.cc
! 21b239613c0a19fa378051f2e392a9ff  libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke5.cc
! 16785a884690e32cc6f8252fb0eb49ee  libstdc++-v3/testsuite/30_threads/packaged_task/members/reset.cc
! 0fa854be77399021a2837efb326964de  libstdc++-v3/testsuite/30_threads/packaged_task/members/reset2.cc
! af2c8627fa5705e904cfde8c1043ea95  libstdc++-v3/testsuite/30_threads/packaged_task/members/swap.cc
! 0d4d3be95bf19d824d31e3e82beca06c  libstdc++-v3/testsuite/30_threads/packaged_task/members/valid.cc
! 2dd118054bf60d4ea8d1132c244150ed  libstdc++-v3/testsuite/30_threads/packaged_task/requirements/explicit_instantiation.cc
! 455d96b002335974863c9f1f20932fee  libstdc++-v3/testsuite/30_threads/packaged_task/uses_allocator.cc
! ecc4f4cb3f765aa064f8632784b32275  libstdc++-v3/testsuite/30_threads/promise/60966.cc
! 12870a670fbdbc90729ffece78902aa6  libstdc++-v3/testsuite/30_threads/promise/69106.cc
! 62433919af149b82a83fbe2a7853d427  libstdc++-v3/testsuite/30_threads/promise/cons/1.cc
! f2defec367c2f1d27fe37be41015257b  libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc
! be835277446d67ade23ff4c3d04981b7  libstdc++-v3/testsuite/30_threads/promise/cons/alloc2.cc
! b07a78259f534d545e4f69cbace5e4f3  libstdc++-v3/testsuite/30_threads/promise/cons/alloc_min.cc
! 556ed72e8bd8b930cea9e7e31867232a  libstdc++-v3/testsuite/30_threads/promise/cons/assign_neg.cc
! fa5a46a8ccc49e5f787480bb7dc31896  libstdc++-v3/testsuite/30_threads/promise/cons/copy_neg.cc
! f5957a457b981bec19622b7e3a0f2559  libstdc++-v3/testsuite/30_threads/promise/cons/move.cc
! 5a6507a7efce69bc62047868d1b0078c  libstdc++-v3/testsuite/30_threads/promise/cons/move_assign.cc
! 4990fbd88746d69b09daee5e9a575fd2  libstdc++-v3/testsuite/30_threads/promise/members/at_thread_exit.cc
! f9a1f48a7b17b78a0fae189dc7473f8a  libstdc++-v3/testsuite/30_threads/promise/members/at_thread_exit2.cc
! b0bdd9c07ea14602c2e7f36edbad180c  libstdc++-v3/testsuite/30_threads/promise/members/get_future.cc
! 8778ebf8eca9bc4c3e03dad76545eabb  libstdc++-v3/testsuite/30_threads/promise/members/get_future2.cc
! a2ba32e375e37640c964e53f671832f5  libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc
! c826b669f5438d2e990d46efb4c87ceb  libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc
! 11f2d1af80c33c4dcb36535b14a51dd4  libstdc++-v3/testsuite/30_threads/promise/members/set_value.cc
! 878513458d573df3d48147452d2ae1f7  libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc
! 5f9f44221c16159b5bf8838b9c79d8de  libstdc++-v3/testsuite/30_threads/promise/members/set_value3.cc
! f9284f48a10245fde125973d9c5157be  libstdc++-v3/testsuite/30_threads/promise/members/swap.cc
! 098bfa504103484f902e505c2f4f1b7b  libstdc++-v3/testsuite/30_threads/promise/requirements/explicit_instantiation.cc
! ceaf89aac1d29a3d78b1f634114c2637  libstdc++-v3/testsuite/30_threads/promise/requirements/lwg3466.cc
! 5fbe7718c64fbba81f92d6e5849db5dc  libstdc++-v3/testsuite/30_threads/promise/uses_allocator.cc
! 104f138d3177b6396c0b449f0eef5425  libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc
! 8fa8feeed8e7a1f314f10062d778cb15  libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/assign_neg.cc
! 01fd17a09575346eb59c8f0b1373e201  libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/copy_neg.cc
! 06c5a8e4d4321a3066475071f3e6db28  libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc
! a1ac4d59d15710ba15e2ac93b51f2336  libstdc++-v3/testsuite/30_threads/recursive_mutex/lock/1.cc
! 8ac29fb41122a34b25c37bfe1397aaa3  libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc
! 537996677f010d11ccf97a2abd18a0c3  libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc
! bdb2334e37d9f3eda62844232b29b851  libstdc++-v3/testsuite/30_threads/recursive_mutex/requirements/standard_layout.cc
! 2027d324fefc80678d8e11e4ece6d815  libstdc++-v3/testsuite/30_threads/recursive_mutex/requirements/typedefs.cc
! 55f875902cb05ddb269e44d7682cb44b  libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/1.cc
! fa31b7b99c2e84b6d6715131c0a63091  libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/2.cc
! 1aca0361433740f7992273f0551f5f90  libstdc++-v3/testsuite/30_threads/recursive_mutex/unlock/1.cc
! c792d0b0b7866db94b65d716bc3fa563  libstdc++-v3/testsuite/30_threads/recursive_mutex/unlock/2.cc
! 461309f96bd1631aea0400973fe41618  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/1.cc
! 1a50ee26f6d88f767b078537e22e301c  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/assign_neg.cc
! 397be997c2ca1782f32c0d18d368e417  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/copy_neg.cc
! cf0909ca39bc25953fac15aa24e12c4f  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc
! fb8347af8e3113b9efc7f783b1440117  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/1.cc
! 076df16693eadc729c94fad9dfcc1a59  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/2.cc
! 6490d30f644812e89aff383a25b0ba4f  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc
! 9a3f5ae5172d1947afcc0db9570d261d  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc
! 9a96574b85d7286c8e37de43af3ca472  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/requirements/typedefs.cc
! 4a516bfae59dc40debb646c69423a920  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc
! ef93f3fb4594fddec5298d6b3f7bddff  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc
! 5b71c6a805a990c2e6de7d4535c71df9  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc
! dc78bb5e5421d44a29fd25276f10a244  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc
! 5e9a5959e13f9b7595a626181d03b451  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc
! 4a516bfae59dc40debb646c69423a920  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc
! 438c6cbd147ddaeb8abd5ecadfab4440  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc
! 71175c75b3f4a2645643a9879a24c080  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/3.cc
! 0d88ba935b9c5048df46bae8c4f9f7c0  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/clock_neg.cc
! a856463384204c47b460a9b13349db66  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/unlock/1.cc
! 2deeb17d7d251b0406919fccbe73663a  libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/unlock/2.cc
! d44969d71ec0db893081cb32765a711f  libstdc++-v3/testsuite/30_threads/scoped_lock/cons/1.cc
! 5384a0be71f5339845506598d5d8ad1e  libstdc++-v3/testsuite/30_threads/scoped_lock/cons/deduction.cc
! a83713b283ae67a92bbdb65d8ceca0e3  libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/explicit_instantiation.cc
! 78d52255c7f3239752729b9d0f9892ea  libstdc++-v3/testsuite/30_threads/scoped_lock/requirements/typedefs.cc
! f74a4cc8462ae932709cddfb2bf85b6a  libstdc++-v3/testsuite/30_threads/semaphore/1.cc
  aa7e8d9c8ac0cac38e0e7e2928bb61b6  libstdc++-v3/testsuite/30_threads/semaphore/100806.cc
! 8993974b066fb2ef7d734f46d28d8921  libstdc++-v3/testsuite/30_threads/semaphore/2.cc
! 61a7584211cd50f629a01edd222ab115  libstdc++-v3/testsuite/30_threads/semaphore/least_max_value_neg.cc
! c20051aec8da710a0084528d06672471  libstdc++-v3/testsuite/30_threads/semaphore/try_acquire.cc
! 309ce23d5262ee206fc3d285b9b9a618  libstdc++-v3/testsuite/30_threads/semaphore/try_acquire_for.cc
! 2577ea8a0768f92f2a8944a5582c0186  libstdc++-v3/testsuite/30_threads/semaphore/try_acquire_posix.cc
! d5414df49358e36c0205099c42fc7119  libstdc++-v3/testsuite/30_threads/semaphore/try_acquire_until.cc
! 97354aa5065410c5245f78ba2bd5fe44  libstdc++-v3/testsuite/30_threads/shared_future/cons/assign.cc
! 51d9a59dd2f3c6a4289b6ff8338694c4  libstdc++-v3/testsuite/30_threads/shared_future/cons/constexpr.cc
! d59d5888a5f757ac5d5e4b8621dd25fc  libstdc++-v3/testsuite/30_threads/shared_future/cons/copy.cc
! 8ee3a3fdbe0d2c40bf2cc887749a8aaa  libstdc++-v3/testsuite/30_threads/shared_future/cons/default.cc
! f786862d86f03fddd604973514f54a57  libstdc++-v3/testsuite/30_threads/shared_future/cons/move.cc
! 3b89e1ce28080cf6592332a952211f58  libstdc++-v3/testsuite/30_threads/shared_future/cons/move_assign.cc
! 6270508a5491faa4b1d104268f443e08  libstdc++-v3/testsuite/30_threads/shared_future/members/45133.cc
! c4682046ac482c294f112e5061d6b480  libstdc++-v3/testsuite/30_threads/shared_future/members/clock_neg.cc
! 6982e621dad39bfe0753246023538d5a  libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc
! cc999a3e0adcc9cfa4c96c00f617a603  libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc
! d8bc22e730707b4ce73ee77424edd375  libstdc++-v3/testsuite/30_threads/shared_future/members/valid.cc
! 71e3a6f9af0e620c44fa53dd3095f8ec  libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc
! 7d921ed861bf5f547d95088c28b92d0a  libstdc++-v3/testsuite/30_threads/shared_future/members/wait_for.cc
! e0687353a0260e1e61d1ae5f9d881858  libstdc++-v3/testsuite/30_threads/shared_future/members/wait_until.cc
! 9f7dedceb197e2883d1d3407c3e66c55  libstdc++-v3/testsuite/30_threads/shared_future/requirements/explicit_instantiation.cc
! be6f2558da97adb9fd11069e714aa638  libstdc++-v3/testsuite/30_threads/shared_future/requirements/lwg3458.cc
! 812c82db591dc870876b53530877c60f  libstdc++-v3/testsuite/30_threads/shared_lock/70766.cc
! 3effcb25b2e44b2ed6bf92dc8c240a39  libstdc++-v3/testsuite/30_threads/shared_lock/cons/1.cc
! 327dedd75b88ad177acf441188516124  libstdc++-v3/testsuite/30_threads/shared_lock/cons/2.cc
! 292878fe44555423bc437b2673e60aa6  libstdc++-v3/testsuite/30_threads/shared_lock/cons/3.cc
! 8c7a9d4199b18a4f908876a7e917c97a  libstdc++-v3/testsuite/30_threads/shared_lock/cons/4.cc
! 7e1bd6928d9af16b714bdcc3ab2676a7  libstdc++-v3/testsuite/30_threads/shared_lock/cons/5.cc
! 1eab13a914dbb5210e8fa29f8548f896  libstdc++-v3/testsuite/30_threads/shared_lock/cons/6.cc
! fdd5b9a72939ea484c451ecafd73ec65  libstdc++-v3/testsuite/30_threads/shared_lock/locking/1.cc
! ddb90abb5419839bf18eb9c5c56acde3  libstdc++-v3/testsuite/30_threads/shared_lock/locking/2.cc
! 9a932816d03780392dd3ea8a34345d91  libstdc++-v3/testsuite/30_threads/shared_lock/locking/3.cc
! ebaafc7818a24a7298485430455e3f32  libstdc++-v3/testsuite/30_threads/shared_lock/locking/4.cc
! 84f334f2f37007792bb768ddc86a6732  libstdc++-v3/testsuite/30_threads/shared_lock/locking/clock_neg.cc
! fa8d3f2057ef186fa68b2806729d1056  libstdc++-v3/testsuite/30_threads/shared_lock/modifiers/1.cc
! ab6e43ddb6a54edf98b05f2196cc7771  libstdc++-v3/testsuite/30_threads/shared_lock/requirements/explicit_instantiation.cc
! d2a4119c3e6818c27cac97168c2271e3  libstdc++-v3/testsuite/30_threads/shared_lock/requirements/typedefs.cc
! 2f34167279411da8867ea596d1b575e8  libstdc++-v3/testsuite/30_threads/shared_mutex/cons/1.cc
! 706a9d6638a829c7b7a946e00d4bff54  libstdc++-v3/testsuite/30_threads/shared_mutex/cons/assign_neg.cc
! e11cd4788441c96c5328519250ffb4c9  libstdc++-v3/testsuite/30_threads/shared_mutex/cons/copy_neg.cc
! 1dd5a5ac5c9213946d89a4e1851df1ca  libstdc++-v3/testsuite/30_threads/shared_mutex/requirements/standard_layout.cc
! 29164bff101b8f653e8ca668bcd68fbd  libstdc++-v3/testsuite/30_threads/shared_mutex/try_lock/1.cc
! befd027bbcc5380b5a83476b0703771d  libstdc++-v3/testsuite/30_threads/shared_mutex/try_lock/2.cc
! cf918640d4b58c8b4c6fd74bfb6f9466  libstdc++-v3/testsuite/30_threads/shared_mutex/unlock/1.cc
! f7bf34fe4d1808d4d60b358da7a34181  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/94069.cc
! 4ce2dd433f70cf84cb582f35697715d3  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/cons/1.cc
! 54e98e5dade8576a0559561aca91cb56  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/cons/assign_neg.cc
! 589f8529b59928a926cdeaad153fc93a  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/cons/copy_neg.cc
! 5111094108c7cc52b54788be50e4d89e  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/requirements/standard_layout.cc
! 624ec4bd65611dea7a6b1680b923fc9b  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock/1.cc
! bca0cd8c90e7103ddcef86808025a4c1  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock/2.cc
! 9118f60146ec640b1bb182cb9587670c  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock/3.cc
! e6a55c7c1195e820762357a542810f30  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock_until/1.cc
! a687e67b0f003e1dd82e13641e7b5390  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock_until/2.cc
! e35740bac5f1ed6067fa70df85b520ef  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/try_lock_until/clock_neg.cc
! 381bab1fe25aafd2d2ce79d180c3a38f  libstdc++-v3/testsuite/30_threads/shared_timed_mutex/unlock/1.cc
! 86b212c61a5c084a568e66b4880ff899  libstdc++-v3/testsuite/30_threads/stop_token/1.cc
! 3c8377bc76b4f213519fd55e486c3a65  libstdc++-v3/testsuite/30_threads/stop_token/2.cc
! f675a6a7fa898135d06cd8ccbfe8036d  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback.cc
! cc0f326d6e878c452d88c044dc0e123f  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback/deadlock-mt.cc
! 6f6aa9e3a615d961ae74f3310d7c9fd9  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback/deadlock.cc
! ae3d946a593d7203ca2f54ec0b19c177  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback/destroy.cc
! 86c1e858923fb41c09ffcec74f02d7cc  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback/destructible_neg.cc
! 7741cb256171a95dceaee3336bebff89  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback/invocable_neg.cc
! 22d09811d23809b69b0b73a4b51e7f82  libstdc++-v3/testsuite/30_threads/stop_token/stop_callback/invoke.cc
! df7560aa3ab4d9752ec2cb705371a4e9  libstdc++-v3/testsuite/30_threads/stop_token/stop_source.cc
! b270a2e542c83d58f4c77454dc9b56cd  libstdc++-v3/testsuite/30_threads/stop_token/stop_source/assign.cc
! 563efd4668f73c19e742b64d4aea2927  libstdc++-v3/testsuite/30_threads/stop_token/stop_token.cc
! b619e98c8af55662c325a22b4f69fc53  libstdc++-v3/testsuite/30_threads/stop_token/stop_token/stop_possible.cc
! 62b59efff7f716914e12efc3a62b7b19  libstdc++-v3/testsuite/30_threads/this_thread/1.cc
! 6d3846f6d161f840dbf73dc67a25ade4  libstdc++-v3/testsuite/30_threads/this_thread/57060.cc
! 93f9b6b3c3d8c2a5db4ee6a83f806484  libstdc++-v3/testsuite/30_threads/this_thread/58038.cc
! 93971936b6a874dae4f6dbe079d0fb39  libstdc++-v3/testsuite/30_threads/this_thread/60421.cc
! 3bb47d14509ceb00220df451695cca8f  libstdc++-v3/testsuite/30_threads/this_thread/95989.cc
! 3a96511c56e9e79a0ef3cf734f1bfcec  libstdc++-v3/testsuite/30_threads/this_thread/sleep_for-mt.cc
! e00581bbbbb8865c21fcc7f3a21c93ba  libstdc++-v3/testsuite/30_threads/this_thread/sleep_for.cc
! 9d220aa45e07cd65239b849e0b903fa0  libstdc++-v3/testsuite/30_threads/this_thread/sleep_until-mt.cc
! 68170811f5da3617128a2cdc113c885f  libstdc++-v3/testsuite/30_threads/this_thread/sleep_until.cc
! d9568394a9e9f11914f6354d82859abd  libstdc++-v3/testsuite/30_threads/this_thread/yield.cc
! 147dd1e304ab064796a1429459c295e7  libstdc++-v3/testsuite/30_threads/thread/70503.cc
! 880829395e3b0ae09a1cc39bc1eb7afc  libstdc++-v3/testsuite/30_threads/thread/84532.cc
! e078f539b54e94b810b2331abdba2321  libstdc++-v3/testsuite/30_threads/thread/adl.cc
! 2b1cff54a13705e20153d589b44d20d7  libstdc++-v3/testsuite/30_threads/thread/cons/1.cc
! 761bf29007fdd127d43b427a55bd4621  libstdc++-v3/testsuite/30_threads/thread/cons/2.cc
! bc75a4198cd5af1e88015690932f809e  libstdc++-v3/testsuite/30_threads/thread/cons/3.cc
! 81d411900f1cbee1f204c914eb96746f  libstdc++-v3/testsuite/30_threads/thread/cons/4.cc
! 92672ce69d3ef010c5a8bdf8998be2e9  libstdc++-v3/testsuite/30_threads/thread/cons/49668.cc
! b62626a922b7aa557416ef3b48a07805  libstdc++-v3/testsuite/30_threads/thread/cons/5.cc
! ce0693052a964cc753f6daa48d37eb62  libstdc++-v3/testsuite/30_threads/thread/cons/6.cc
! 79fb0a43fbea3c860bd2a923b4e921f1  libstdc++-v3/testsuite/30_threads/thread/cons/69724.cc
! 763fce698c6169d9af52c65dc41619fa  libstdc++-v3/testsuite/30_threads/thread/cons/7.cc
! bb076bb6f37cea99128a341702d4bcd6  libstdc++-v3/testsuite/30_threads/thread/cons/8.cc
! 788d2a35cdb37cbf4e1d52bf80249ff1  libstdc++-v3/testsuite/30_threads/thread/cons/84535.cc
! 8629d9891a491070f8055475887e3b27  libstdc++-v3/testsuite/30_threads/thread/cons/9.cc
! e0324c627d2d58afb491b3cce6619b01  libstdc++-v3/testsuite/30_threads/thread/cons/assign_neg.cc
! 355fa8b40fa2ec0259a46161201bb9af  libstdc++-v3/testsuite/30_threads/thread/cons/copy_neg.cc
! c138629dedb1b7854f47a61c935413f9  libstdc++-v3/testsuite/30_threads/thread/cons/lwg2097.cc
! f75224748cdaa3b5c29de10a870c151e  libstdc++-v3/testsuite/30_threads/thread/cons/moveable.cc
! 95e3f1e3fdf00318f70f2962d40cc9d8  libstdc++-v3/testsuite/30_threads/thread/cons/terminate.cc
! e041333912241cbbc86f3be5d12e922d  libstdc++-v3/testsuite/30_threads/thread/id/70294.cc
! 39bfb6a49bd0b0958ac99f1ec3f22f69  libstdc++-v3/testsuite/30_threads/thread/id/hash.cc
! 9d2f42131075d0404b96c8f8bef63ad8  libstdc++-v3/testsuite/30_threads/thread/id/operators.cc
! 82a6c3187556746fe8c7a17bfa622d23  libstdc++-v3/testsuite/30_threads/thread/id/operators_c++20.cc
! 71c44628316702a7f26e43774a2946ec  libstdc++-v3/testsuite/30_threads/thread/members/1.cc
! aa301214614fe164c3ef51650fa09b34  libstdc++-v3/testsuite/30_threads/thread/members/2.cc
! 8f132a7387a5e5059a4098e5ff74510f  libstdc++-v3/testsuite/30_threads/thread/members/3.cc
! 1e889e71565bcf76f26cfe7f0c2fe3ea  libstdc++-v3/testsuite/30_threads/thread/members/4.cc
! 42b3b99721f952e9ec54f26a482502c4  libstdc++-v3/testsuite/30_threads/thread/members/5.cc
! ac7a52716a75ed4f97a14285c6001fad  libstdc++-v3/testsuite/30_threads/thread/members/hardware_concurrency.cc
! ee55f7a53d8f43ee3c0bd8356dcd98b0  libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc
! d1a5842ee16f033d78ba09e9d75b8ae0  libstdc++-v3/testsuite/30_threads/thread/native_handle/typesizes.cc
! ef2da556e78b0f1ac3fa36f9de96445b  libstdc++-v3/testsuite/30_threads/thread/swap/1.cc
! 385f9f7d3db2cae88d9cee08f6ff10b4  libstdc++-v3/testsuite/30_threads/timed_mutex/cons/1.cc
! a221c8c8fd261d4d984f2881a94cb721  libstdc++-v3/testsuite/30_threads/timed_mutex/cons/assign_neg.cc
! 810463d58c94c800031b117d92e13489  libstdc++-v3/testsuite/30_threads/timed_mutex/cons/copy_neg.cc
! 88bb648e8386e9cd20df7f9d94a40517  libstdc++-v3/testsuite/30_threads/timed_mutex/dest/destructor_locked.cc
! 865c7672102017e72bb82a0c09dccb0c  libstdc++-v3/testsuite/30_threads/timed_mutex/lock/1.cc
! 1d8278ee756803b5ef8a210e7ed21e58  libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/1.cc
! 10362a9b178e5c0e67b0aded46322b15  libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/typesizes.cc
! adca16a5c95aa5460bb92fdba2f80a44  libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/standard_layout.cc
! 9f07e3570a10528c9e457f1887086af7  libstdc++-v3/testsuite/30_threads/timed_mutex/requirements/typedefs.cc
! 73dff51336e130fc12d194037e897a1b  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/1.cc
! 68c4a3ddca9b2dc27258ca2c907c3b4e  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/2.cc
! cc33bebc5d1867ad252519a7ec3b2551  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/1.cc
! e39eeda879067dd591ddf7d23d59e0bd  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/2.cc
! 954e65c14438ce2fc41b66a722b9c3a7  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/3.cc
! 73dff51336e130fc12d194037e897a1b  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/1.cc
! 68c4a3ddca9b2dc27258ca2c907c3b4e  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/2.cc
! eda04d512143268ada55b66f79bc7e45  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/3.cc
! e8812c97885148fc263a44551247f2a9  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/4.cc
! 4ca0dd910fe157eec4235177acce9471  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/57641.cc
! 43627fb36b523f91bdbda837def2014f  libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/clock_neg.cc
! 13e23a0542bb0ef708281bc1b4fa370d  libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/1.cc
! 76b2b864671e8241be9d6c8cc1a085b0  libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/2.cc
! f86322f6207e16a400fb4107e8a671f7  libstdc++-v3/testsuite/30_threads/try_lock/1.cc
! bde23f008c12ad2b92c6c8af48e5e46a  libstdc++-v3/testsuite/30_threads/try_lock/2.cc
! 4ba27e0d5839af727febe8748ba18fc9  libstdc++-v3/testsuite/30_threads/try_lock/3.cc
! 2825dc42c16b1ff0769468be9b0c1622  libstdc++-v3/testsuite/30_threads/try_lock/4.cc
! 84b7f4186aa09b29885c62c89d8b8d64  libstdc++-v3/testsuite/30_threads/try_lock/5.cc
! e7359b96a7faf86607fd69b172f76adc  libstdc++-v3/testsuite/30_threads/unique_lock/cons/1.cc
! 7155fc2034f43ac9f60f83f9f1d4f08d  libstdc++-v3/testsuite/30_threads/unique_lock/cons/2.cc
! 4569ac716eae2f7894a6c2db420a1be4  libstdc++-v3/testsuite/30_threads/unique_lock/cons/3.cc
! f713729bd4b3c71395a8659b730ba46f  libstdc++-v3/testsuite/30_threads/unique_lock/cons/4.cc
! 3e5e867d1723bfe5838fb745aaaf9fc7  libstdc++-v3/testsuite/30_threads/unique_lock/cons/5.cc
! 084ae8f2eaeb1253abddfb08fd25edfa  libstdc++-v3/testsuite/30_threads/unique_lock/cons/6.cc
! 4a741d3c34b1feb9b2b85862555ce8e6  libstdc++-v3/testsuite/30_threads/unique_lock/cons/60497.cc
! 88f009b5a9e326a7b3ed9f804bda3eaf  libstdc++-v3/testsuite/30_threads/unique_lock/cons/deduction.cc
! 5b961ed62c770bf8b7210bfdb42d61c3  libstdc++-v3/testsuite/30_threads/unique_lock/locking/1.cc
! fcf62f4cd5507c33e6a448606237fc0d  libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc
! c979c07150a4f54f69dec9219abc06db  libstdc++-v3/testsuite/30_threads/unique_lock/locking/3.cc
! c26467d5a1d2ca211064f1ab11435b20  libstdc++-v3/testsuite/30_threads/unique_lock/locking/4.cc
! a398358fc1514f3a954f513b96a88c17  libstdc++-v3/testsuite/30_threads/unique_lock/locking/clock_neg.cc
! 537a5742966bbe21961adf840790cb69  libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc
! 3b9c66c1e2cd2f70bac2c398d8d46aec  libstdc++-v3/testsuite/30_threads/unique_lock/requirements/explicit_instantiation.cc
! 6d46b57c8aa21f614c40e2a8c5bbce92  libstdc++-v3/testsuite/30_threads/unique_lock/requirements/typedefs.cc
! 8b7df1d9001186e28d907677de2f5f4d  libstdc++-v3/testsuite/Makefile.am
! 7bf006323a36cb035885c50fba6cc888  libstdc++-v3/testsuite/Makefile.in
! 27f20f3c619036926100f1ebb575938f  libstdc++-v3/testsuite/abi/30586.cc
! ee98955902155f28f3cc7c5e5f324d20  libstdc++-v3/testsuite/abi/cxx_runtime_only_linkage.cc
! b567de4d5f6e7c7687f5471092c429fb  libstdc++-v3/testsuite/abi/demangle/abi_examples/01.cc
! 98a69d0cc5c21b037a40815b2d73d80b  libstdc++-v3/testsuite/abi/demangle/abi_examples/02.cc
! 9584754526bed5e6b20d8ad5166dc9cf  libstdc++-v3/testsuite/abi/demangle/abi_examples/03.cc
! 8b8035bf23528df071f84ec46aedc6fe  libstdc++-v3/testsuite/abi/demangle/abi_examples/04.cc
! e88feb6ff166653b241a41a9848c6467  libstdc++-v3/testsuite/abi/demangle/abi_examples/05.cc
! 2ffced43e5cb2fbf148279a5fa455120  libstdc++-v3/testsuite/abi/demangle/abi_examples/06.cc
! d0bc9e549cc73c05f9288950f72d158e  libstdc++-v3/testsuite/abi/demangle/abi_examples/07.cc
! 17cebaef3afb868406d88a7212884f8c  libstdc++-v3/testsuite/abi/demangle/abi_examples/08.cc
! b5997876a8d3819df2424ebbb113b507  libstdc++-v3/testsuite/abi/demangle/abi_examples/09.cc
! f0feacaad40a1a5937a458dc860e0152  libstdc++-v3/testsuite/abi/demangle/abi_examples/10.cc
! 7a1ae8769b52e5f5ec635f97d27f4b64  libstdc++-v3/testsuite/abi/demangle/abi_examples/11.cc
! 4bb9c53c7de4cc6c5bbcbd99eaa78694  libstdc++-v3/testsuite/abi/demangle/abi_examples/12.cc
! 876f8964f1e5c0dcc8cb69aef7f1cca7  libstdc++-v3/testsuite/abi/demangle/abi_examples/13.cc
! 5d7c7984cd7f70057db8f5c60331c85f  libstdc++-v3/testsuite/abi/demangle/abi_examples/14.cc
! e6c2682798e08fd809548771c06ed530  libstdc++-v3/testsuite/abi/demangle/abi_examples/15.cc
! fafda2cfb22b83af7d09867c806bfdb1  libstdc++-v3/testsuite/abi/demangle/abi_examples/16.cc
! e75ad861e855657d914dddba1831a08b  libstdc++-v3/testsuite/abi/demangle/abi_examples/17.cc
! 78e24e6dc17157a5fb069b62bc6df751  libstdc++-v3/testsuite/abi/demangle/abi_examples/18.cc
! e6825b9d32e0f65e8aa345857517e0ba  libstdc++-v3/testsuite/abi/demangle/abi_examples/19.cc
! f487469355fe056f0bb7d03313565691  libstdc++-v3/testsuite/abi/demangle/abi_examples/20.cc
! 1b646ba9ec9f119f45c7c7656adba76a  libstdc++-v3/testsuite/abi/demangle/abi_examples/21.cc
! 1b646ba9ec9f119f45c7c7656adba76a  libstdc++-v3/testsuite/abi/demangle/abi_examples/22.cc
! 753d6c04e8ae3e7be6b416cc1599b9c8  libstdc++-v3/testsuite/abi/demangle/abi_examples/23.cc
! 08282754343c0750bb0f593e9cead4aa  libstdc++-v3/testsuite/abi/demangle/abi_examples/24.cc
! 352e4fa244882021f3358d69bc4a0f36  libstdc++-v3/testsuite/abi/demangle/abi_examples/25.cc
! 60c6abeba4f78122629a7079f6f5f171  libstdc++-v3/testsuite/abi/demangle/abi_examples/26.cc
! 705c4eb083a1c6418734453a643540c6  libstdc++-v3/testsuite/abi/demangle/abi_text/01.cc
! d8b4a8448972b31e9e83daff904fe52a  libstdc++-v3/testsuite/abi/demangle/abi_text/02.cc
! 996c5f8e9012073a7b495b82c2b4277a  libstdc++-v3/testsuite/abi/demangle/abi_text/03.cc
! afe494704f5838255ce50da332d3b4b7  libstdc++-v3/testsuite/abi/demangle/abi_text/04.cc
! 2c835aa1685de948e3896c5807522cf2  libstdc++-v3/testsuite/abi/demangle/abi_text/05.cc
! a2ac8734a4cb8aa5eab271116c005d91  libstdc++-v3/testsuite/abi/demangle/abi_text/06.cc
! 074ec589a049abec25122bf38c0a041b  libstdc++-v3/testsuite/abi/demangle/abi_text/07.cc
! 9c3228871c96c9f937e839b3fe70531f  libstdc++-v3/testsuite/abi/demangle/abi_text/08.cc
! f48940deb5d18bbadcf198abb387d81b  libstdc++-v3/testsuite/abi/demangle/abi_text/09.cc
! 30b0ecdc31bbbb784e8482fcedb5b2bc  libstdc++-v3/testsuite/abi/demangle/abi_text/10.cc
! fe3a9fbf3f1d896aed66baffca0791dd  libstdc++-v3/testsuite/abi/demangle/abi_text/11.cc
! 24ab78da972cda5090987c589669739c  libstdc++-v3/testsuite/abi/demangle/abi_text/12.cc
! 8a57f74a99d9dcde7365136b370b93e0  libstdc++-v3/testsuite/abi/demangle/abi_text/13.cc
! 7c8344f9b66ea7571751da3ad3b09104  libstdc++-v3/testsuite/abi/demangle/abi_text/14.cc
! e06c42726d0152d3282c4851ad3771cb  libstdc++-v3/testsuite/abi/demangle/cxx0x/rref.cc
! 01f7e3891af96455feba7c3f408647aa  libstdc++-v3/testsuite/abi/demangle/regression/3111-1.cc
! aaeeed9d7c347e8c5d443aef16174537  libstdc++-v3/testsuite/abi/demangle/regression/3111-2.cc
! fec7a4696a31d5a279d617f84172528e  libstdc++-v3/testsuite/abi/demangle/regression/7986-01.cc
! fba03cf331380ea4b0eab6ded9feb0f4  libstdc++-v3/testsuite/abi/demangle/regression/7986-02.cc
! b699fdeb6625457648cc4f2185ddbf0a  libstdc++-v3/testsuite/abi/demangle/regression/7986-03.cc
! 006b36b3864f6ad4c537c416e1d3f407  libstdc++-v3/testsuite/abi/demangle/regression/7986-04.cc
! 8476f0ac89e07cef35e6c1fe426a924a  libstdc++-v3/testsuite/abi/demangle/regression/7986-05.cc
! 645828367b7e2aae1d29125c5144cfe8  libstdc++-v3/testsuite/abi/demangle/regression/7986-06.cc
! 966ef1fbf4dbb92f7a403cd2c6e7c47f  libstdc++-v3/testsuite/abi/demangle/regression/7986-07.cc
! de69a8bf3e2a0d6cd2db35bd853da5a4  libstdc++-v3/testsuite/abi/demangle/regression/7986-08.cc
! 2cacb5cccf00610f7143449a08576d0f  libstdc++-v3/testsuite/abi/demangle/regression/7986-09.cc
! 357ac614f27ff7d7b35f1c4f1e96529f  libstdc++-v3/testsuite/abi/demangle/regression/7986-10.cc
! 2819b48717e9f7fd5f0a6dd06beff78f  libstdc++-v3/testsuite/abi/demangle/regression/7986-11.cc
! 9f4263206905055bbc1cdddbcb1cc3ef  libstdc++-v3/testsuite/abi/demangle/regression/7986-12.cc
! 231a5ebe568b8bc2e9b22cb47d215a71  libstdc++-v3/testsuite/abi/demangle/regression/7986.cc
! 283493989843a62e8809d755882cc7dc  libstdc++-v3/testsuite/abi/demangle/regression/8897.cc
! 646e984e9212b4f5be1015ac35286b01  libstdc++-v3/testsuite/abi/demangle/regression/cw-01.cc
! 2529b561908b11eb04e035a33b8bf833  libstdc++-v3/testsuite/abi/demangle/regression/cw-02.cc
! 775359cd834d9760dc2d84b4ab107cf1  libstdc++-v3/testsuite/abi/demangle/regression/cw-03.cc
! 6e7da12fb98ec9064cde69a354453340  libstdc++-v3/testsuite/abi/demangle/regression/cw-04.cc
! 725dfccec81c05b87b15d570e00ff8a9  libstdc++-v3/testsuite/abi/demangle/regression/cw-05.cc
! 979cb5c0203a2f3887a77356c43e7f7b  libstdc++-v3/testsuite/abi/demangle/regression/cw-06.cc
! ec37100f2a5463f2c310d4e0a7834203  libstdc++-v3/testsuite/abi/demangle/regression/cw-07.cc
! 2232f752e9556001b6fe8248aac83fec  libstdc++-v3/testsuite/abi/demangle/regression/cw-08.cc
! 41e78ff37810b9678eb8ae4980cd19a0  libstdc++-v3/testsuite/abi/demangle/regression/cw-09.cc
! cc445fc5113245572fdf7125c7e51369  libstdc++-v3/testsuite/abi/demangle/regression/cw-10.cc
! 5fcfb86a67ef7b5292ce10907ac1f5b7  libstdc++-v3/testsuite/abi/demangle/regression/cw-11.cc
! 4fb74fb12b84f4f0fe573e4f0a74fc95  libstdc++-v3/testsuite/abi/demangle/regression/cw-12.cc
! 2384974f0adda7df1cb015a271bfd877  libstdc++-v3/testsuite/abi/demangle/regression/cw-13.cc
! b91aa10332f232710dbd6bcc25f1c2a1  libstdc++-v3/testsuite/abi/demangle/regression/cw-14.cc
! 4bc3f54f39d384d4d49078e6f920a232  libstdc++-v3/testsuite/abi/demangle/regression/cw-15.cc
! d2372eb604736c37c6d2fa4d20772254  libstdc++-v3/testsuite/abi/demangle/regression/cw-16.cc
! d2986f46e4a1fac6763032fd569d517a  libstdc++-v3/testsuite/abi/demangle/regression/old.cc
! 832d341574cb975a416af91b9e9dddb7  libstdc++-v3/testsuite/abi/header_cxxabi.c
  ab0a5ca4ddac86490afd9342d4868589  libstdc++-v3/testsuite/abi/pr42230.cc
! e4665b21fe24cf66cfdbda544b693577  libstdc++-v3/testsuite/backward/11460.cc
! 8d8230578eae9dde269bcad1c407528d  libstdc++-v3/testsuite/backward/hash_map/1.cc
! f3b72e005cf8f2b369ad4959dfffa5fc  libstdc++-v3/testsuite/backward/hash_map/14648.cc
! 69dd3ed66a1602523800d9ab4188cd36  libstdc++-v3/testsuite/backward/hash_map/23528.cc
! 1feefe24ed2dd01daa91a213c4f164f8  libstdc++-v3/testsuite/backward/hash_map/25896.cc
! 22ddd44947d0eaf01a673ca69d5e31db  libstdc++-v3/testsuite/backward/hash_map/requirements/explicit_instantiation.cc
! 265955566caac76959cfaa9c547c42df  libstdc++-v3/testsuite/backward/hash_set/1.cc
! 3c7a0a6529acac03cdc8b32ff8c5702e  libstdc++-v3/testsuite/backward/hash_set/25896.cc
  2c091597008357e678007f407f299a24  libstdc++-v3/testsuite/backward/hash_set/49060.cc
! 71898436a23bb5cef72be0d02a1bd07c  libstdc++-v3/testsuite/backward/hash_set/check_construct_destroy.cc
! 4211b1ba78b41fe89a784af6b97713e3  libstdc++-v3/testsuite/backward/hash_set/requirements/explicit_instantiation.cc
! 5d4d15e54ab1e3b813b292718c462332  libstdc++-v3/testsuite/backward/strstream_members.cc
! 1684a4421264692bb75c66d05778b09a  libstdc++-v3/testsuite/backward/strstream_move.cc
! 839290fe90d6d98035edda152c863f6b  libstdc++-v3/testsuite/config/default.exp
  e7df7cd2ca07f4f1ab415d457a6e1c13  libstdc++-v3/testsuite/data/cin_unget-1.txt
  d41d8cd98f00b204e9800998ecf8427e  libstdc++-v3/testsuite/data/filebuf_members-1.tst
  d41d8cd98f00b204e9800998ecf8427e  libstdc++-v3/testsuite/data/filebuf_members-1.txt
*************** c301fea40cf8411c67e670f55107c746  libstd
*** 106595,108468 ****
  ccd8d09610bb1187b124063e4b7d62b2  libstdc++-v3/testsuite/data/wostream_inserter_other-1.tst
  ccd8d09610bb1187b124063e4b7d62b2  libstdc++-v3/testsuite/data/wostream_inserter_other-2.tst
  d41d8cd98f00b204e9800998ecf8427e  libstdc++-v3/testsuite/data/wostream_seeks-1.tst
! 7439d1c0718892471d63b53cbb1d38ad  libstdc++-v3/testsuite/decimal/binary-arith.cc
! 0bb37edfc124220ccea5f194fedf7cf9  libstdc++-v3/testsuite/decimal/cast_neg.cc
! 2b9d496d0ff178ec45de193fafaf7316  libstdc++-v3/testsuite/decimal/comparison.cc
! 2d6f3ac199c45bfc426c2e1d79ce66fd  libstdc++-v3/testsuite/decimal/compound-assignment-memfunc.cc
! 3330aed6abbe9cb074c7177d601eaf04  libstdc++-v3/testsuite/decimal/compound-assignment.cc
! 92d8f7b9463419e5f7f35bf300dfd100  libstdc++-v3/testsuite/decimal/conversion-from-float.cc
! c8b8f653eda9b6c38870737afbcb2787  libstdc++-v3/testsuite/decimal/conversion-from-integral.cc
! 27ecc7752dbc2b8d972105c8086a368c  libstdc++-v3/testsuite/decimal/conversion-to-generic-float.cc
! 8d57b847076187d8c077a1b7ec7c69a1  libstdc++-v3/testsuite/decimal/conversion-to-integral.cc
! 23b90650daf3bb6ede46c5402811a490  libstdc++-v3/testsuite/decimal/ctor.cc
! e2dcb2522b072f6d1ebe398d78064390  libstdc++-v3/testsuite/decimal/incdec-memfunc.cc
! 4430241d65761aa626f1ee75920cf042  libstdc++-v3/testsuite/decimal/incdec.cc
! c0b625cecc6e1e15f0b8bcfb4c762b3d  libstdc++-v3/testsuite/decimal/make-decimal.cc
! 2d677f1deeb3ac9f1df5d253827ace06  libstdc++-v3/testsuite/decimal/mixed-mode-arith_neg.cc
! 164ae6ef64829215541081aeac66bcb4  libstdc++-v3/testsuite/decimal/mixed-mode-cmp_neg.cc
! bfef39f98d925118930da5c52900fcf2  libstdc++-v3/testsuite/decimal/operator_neg.cc
! b308e9959c9d04b8fd8af64d6be157c8  libstdc++-v3/testsuite/decimal/pr54036-1.cc
! 953816bfd8830db3d759e059219c8ae9  libstdc++-v3/testsuite/decimal/pr54036-2.cc
! e815d33c577f09de55b9b838053ed8f9  libstdc++-v3/testsuite/decimal/pr54036-3.cc
! d65a09edd91e5a1e78db9856f309059e  libstdc++-v3/testsuite/decimal/pr58815.cc
! 0fee4e61aad9987c04ae4921b6dd14dd  libstdc++-v3/testsuite/decimal/unary-arith.cc
! 2615dd27306c48ff7b29a1ab8494a947  libstdc++-v3/testsuite/experimental/algorithm/sample-2.cc
! 3c9887c56a54a18b857b646ea0b7424f  libstdc++-v3/testsuite/experimental/algorithm/sample.cc
! 3d2dc801efc6b22124d648b688736740  libstdc++-v3/testsuite/experimental/algorithm/search.cc
! a88d659ffae0b344d7111b0498d6de98  libstdc++-v3/testsuite/experimental/algorithm/shuffle.cc
! d2bddf9d912574d9c57166803df0c8ab  libstdc++-v3/testsuite/experimental/any/assign/1.cc
! a1498b6914a843cf098e33a5f14d71ad  libstdc++-v3/testsuite/experimental/any/assign/2.cc
! d294cf4b33b5358aa3a5888924d429a6  libstdc++-v3/testsuite/experimental/any/assign/exception.cc
! ebaf1725a969a2efd07b432878ecf49f  libstdc++-v3/testsuite/experimental/any/assign/self.cc
! f5c6d6bdf878646aef4026d8f65542e5  libstdc++-v3/testsuite/experimental/any/cons/1.cc
! a5e9878ac91ffe7cbd98aa1e9820127f  libstdc++-v3/testsuite/experimental/any/cons/2.cc
! 074637c212498fc9a1540d566789e380  libstdc++-v3/testsuite/experimental/any/cons/aligned.cc
! e44302ba950cc69e8a4c00675eda1565  libstdc++-v3/testsuite/experimental/any/cons/nontrivial.cc
! a65233781279a8f5a9f14be0b2b2c787  libstdc++-v3/testsuite/experimental/any/misc/any_cast.cc
! 53e5fa8986b1c19dc0a720f30fc67202  libstdc++-v3/testsuite/experimental/any/misc/any_cast_neg.cc
! ab3137bd77812ec068eb748cb7ac594f  libstdc++-v3/testsuite/experimental/any/misc/any_cast_no_rtti.cc
! 5264120235009064b9131b4c035df319  libstdc++-v3/testsuite/experimental/any/misc/swap.cc
! 9b37cda59db7349a240b89d734e364a6  libstdc++-v3/testsuite/experimental/any/modifiers/1.cc
! b2736d71a06f2b4f42dd731e1125f9b7  libstdc++-v3/testsuite/experimental/any/observers/type.cc
! 05cabb194b8d371abf0e68cfcb556efc  libstdc++-v3/testsuite/experimental/any/typedefs.cc
! 5c89ce7d372adbd039f7ea61c1e88242  libstdc++-v3/testsuite/experimental/array/make_array.cc
! 7551439cce01615dbce001749eefbf81  libstdc++-v3/testsuite/experimental/array/neg.cc
! 518e386018ba01a5c6c43515e3e17143  libstdc++-v3/testsuite/experimental/chrono/value.cc
! b91680a21d02e30436633347dcafb0b6  libstdc++-v3/testsuite/experimental/deque/erasure.cc
  486c6490ca99880768c8a8d443ad1c02  libstdc++-v3/testsuite/experimental/feat-char8_t.cc
  02455db47de7f16c8e2d1f2af4839fc7  libstdc++-v3/testsuite/experimental/feat-cxx14.cc
  f754118861b851f83334813d834cb200  libstdc++-v3/testsuite/experimental/feat-lib-fund.cc
! 287f51d03bdfe6565dc842447c669a69  libstdc++-v3/testsuite/experimental/filesystem/file_status/1.cc
! 0be28e8a597f5f3524b05d382977857a  libstdc++-v3/testsuite/experimental/filesystem/filesystem_error/cons.cc
! e38807857185bfa4fa204e43c8d76017  libstdc++-v3/testsuite/experimental/filesystem/iterators/97731.cc
! a006bf4896a3ab51a977686eb5af2608  libstdc++-v3/testsuite/experimental/filesystem/iterators/directory_iterator.cc
  6800b111af867d1c5dc76da92647aa5f  libstdc++-v3/testsuite/experimental/filesystem/iterators/error_reporting.cc
! 80bbc9f1b2ea6c7f500e8644d05570a3  libstdc++-v3/testsuite/experimental/filesystem/iterators/pop.cc
! de6b07ec83a54c05b64ca4d6bff5757a  libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc
! 4bf5a178f6bbfd23a8d1f09e46377566  libstdc++-v3/testsuite/experimental/filesystem/operations/absolute.cc
! b6c97dcfa5875e35bd817ceef71106dc  libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc
! c979d08bc61ab33d1c6cda360f40c791  libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc
! fef1c8651e0cbfb01549c5b72aadbc39  libstdc++-v3/testsuite/experimental/filesystem/operations/copy_file.cc
! 1c06749732447770da445a16de413059  libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc
! 317f29c90d1d3057cd6b04a82da018fa  libstdc++-v3/testsuite/experimental/filesystem/operations/create_directory.cc
! 102afdecfff9639d959c908bf8ca4d24  libstdc++-v3/testsuite/experimental/filesystem/operations/create_symlink.cc
! f613a7a13aba7ff97f2dc5f334d5219d  libstdc++-v3/testsuite/experimental/filesystem/operations/current_path.cc
! b6f9f83cef2f2ba95a2192bcaf1f4864  libstdc++-v3/testsuite/experimental/filesystem/operations/equivalent.cc
! 3c93d6effedc549f4f047242502657dc  libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc
! 22c3881333e194d83327843ef3822453  libstdc++-v3/testsuite/experimental/filesystem/operations/file_size.cc
! c360883dd40ebb4911fbc402d5c81e26  libstdc++-v3/testsuite/experimental/filesystem/operations/is_empty.cc
! 2a9b90a7de6f905407da9ed34a374ed6  libstdc++-v3/testsuite/experimental/filesystem/operations/last_write_time.cc
! 7ec5c0f902c789196ebec7b7878cf8d1  libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc
! c212f31fe176502dcf5879b849cad120  libstdc++-v3/testsuite/experimental/filesystem/operations/read_symlink.cc
! b2434804edf60c4a00c9d2c1c59a5d45  libstdc++-v3/testsuite/experimental/filesystem/operations/remove.cc
! 929f7124480e1d5a90d315e22f7fb288  libstdc++-v3/testsuite/experimental/filesystem/operations/remove_all.cc
! d032a966b5c68f5f7ee9cc78de2ab201  libstdc++-v3/testsuite/experimental/filesystem/operations/rename.cc
! 7f64a5cd007797c662010bef0a36d653  libstdc++-v3/testsuite/experimental/filesystem/operations/space.cc
! 99989ba6e2f0b58f00abcc249759b5f5  libstdc++-v3/testsuite/experimental/filesystem/operations/status.cc
! d47b1af6f5fecaf7d0e2f34635e7faa7  libstdc++-v3/testsuite/experimental/filesystem/operations/temp_directory_path.cc
! 45702a06c1f1ce65575cf3d643ec9778  libstdc++-v3/testsuite/experimental/filesystem/path/append/path.cc
! 57259422207ece8ba121629f54f87323  libstdc++-v3/testsuite/experimental/filesystem/path/assign/assign.cc
! acd11e30150439c609f7b3127f4e669e  libstdc++-v3/testsuite/experimental/filesystem/path/assign/copy.cc
! 460951c2785be93645976d01272dce88  libstdc++-v3/testsuite/experimental/filesystem/path/compare/compare.cc
! 13adfe82707eeb9adb44b8b46dbbce9f  libstdc++-v3/testsuite/experimental/filesystem/path/compare/path.cc
! bed818ebc5c4ca43e0b999b351ebc160  libstdc++-v3/testsuite/experimental/filesystem/path/compare/strings.cc
! 4790f977745da9cd73e1bdac04274e01  libstdc++-v3/testsuite/experimental/filesystem/path/concat/path.cc
! b3ceec9dd7e62b26e2fd26943afef5f9  libstdc++-v3/testsuite/experimental/filesystem/path/concat/strings.cc
  c06b01e19066f0d4ffa4faa5202f4e3e  libstdc++-v3/testsuite/experimental/filesystem/path/construct/100630.cc
! 666ce8536a1d012f2ee912f2bc7b75d4  libstdc++-v3/testsuite/experimental/filesystem/path/construct/80762.cc
! 1ed54cf5b1c47566d1d83d4e7de0a095  libstdc++-v3/testsuite/experimental/filesystem/path/construct/90281.cc
! b777506554ae3816bf36f62dee7df96e  libstdc++-v3/testsuite/experimental/filesystem/path/construct/90634.cc
! 0b30494068df58ea8b093ca0e48b8446  libstdc++-v3/testsuite/experimental/filesystem/path/construct/copy.cc
! fb7624577970bd78022accc91341a06b  libstdc++-v3/testsuite/experimental/filesystem/path/construct/default.cc
! 2125ab42c3b94c829ffea078d2ba2a81  libstdc++-v3/testsuite/experimental/filesystem/path/construct/locale.cc
! a3a6b6a414b365f9cf1d1eeba7e6ea9b  libstdc++-v3/testsuite/experimental/filesystem/path/construct/range.cc
! cb1015b72d5c1f9f4281ccbfcd3c2911  libstdc++-v3/testsuite/experimental/filesystem/path/construct/string_view.cc
! 2d102bb97d5e8f347c372847026b1e07  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/extension.cc
! 20acf8e02f2d7bb62c0890d81fd910c4  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/filename.cc
! 1703702fbd062419beac1f473bf7547f  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/parent_path.cc
! 4fc19aa25b6afc1e531ad6ab3ccf31bc  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/relative_path.cc
! feefc832eb48194387f4126f8a791039  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/root_directory.cc
! bdca5b449a2866ee56b15878ca47b4d2  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/root_name.cc
! 62b38cbc32310db6e655939ec43d281c  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/root_path.cc
! 6fde203beaf28bdbe59e1f641cc9b14e  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/stem.cc
! 190335f80ebb2bf3fb729a09fd939d74  libstdc++-v3/testsuite/experimental/filesystem/path/factory/u8path-char8_t.cc
! f9492cf07e7026aaea955fa1e558f7f5  libstdc++-v3/testsuite/experimental/filesystem/path/factory/u8path.cc
! 0ad981125fc6016d35203b729cf1cbb2  libstdc++-v3/testsuite/experimental/filesystem/path/generic/generic_string.cc
! ffce0d11824874837afc295ef67274f7  libstdc++-v3/testsuite/experimental/filesystem/path/itr/traversal.cc
! 54eab7f1d86169097b5f84e186744b59  libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/clear.cc
! 5acb84c711c714b0edc23526d03967a4  libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/make_preferred.cc
! 8e1438fa928c456e80aa9593eccfa721  libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/remove_filename.cc
! d3a0993e01a866eee9daa4be4e2abf1a  libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/replace_extension.cc
! 8c01898d27ed29437b8d2495915e1842  libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/replace_filename.cc
! fd6f644d023cc2745afe68394005258d  libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/swap.cc
! 602e16654f417884aee4047a349fc149  libstdc++-v3/testsuite/experimental/filesystem/path/native/alloc.cc
  6972da7c2da200c073d985ccbd580534  libstdc++-v3/testsuite/experimental/filesystem/path/native/conv_c++23.cc
! 0bc4b2585d32714bd319e02d238619a5  libstdc++-v3/testsuite/experimental/filesystem/path/native/string-char8_t.cc
! 78bb553f4468218799dbbc46f83d1c98  libstdc++-v3/testsuite/experimental/filesystem/path/native/string.cc
! e0322e4af4639ba7782f71db9a36d5bf  libstdc++-v3/testsuite/experimental/filesystem/path/nonmember/hash_value.cc
! 59fca3faabd22effe0e0b5c627a50bc2  libstdc++-v3/testsuite/experimental/filesystem/path/preferred_separator.cc
! 16f3fd229dd6e05a61503c896964d850  libstdc++-v3/testsuite/experimental/filesystem/path/query/empty.cc
! fd869ba6c433a7d7f16ebaa5df54a314  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_extension.cc
! f0d2a80b3c338f5cf7e07b2196a28580  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_filename.cc
! 883c28f897ce4473b12211843ed162d2  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_parent_path.cc
! 5aac8e8aa5f40151c5ea2255a5e28cbc  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_relative_path.cc
! 8d08ce82f20730211731b13a6a02ad35  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_root_directory.cc
! 65945b7e5bfeef5eea303d6ee7ca2a0d  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_root_name.cc
! 895b5d822925fce1cacad66fd51466ac  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_root_path.cc
! 5ee0e62de35ab36fdcf653305c6cbe37  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_stem.cc
! 4f318541eda5c930acf928a90a36196e  libstdc++-v3/testsuite/experimental/filesystem/path/query/is_absolute.cc
! e0b9a39ccaafcd1cffb1f234dac3ae33  libstdc++-v3/testsuite/experimental/filesystem/path/query/is_relative.cc
! a6e7e800f733cc7d4500b9b59d5d3358  libstdc++-v3/testsuite/experimental/forward_list/erasure.cc
! 1907808faa1732a38f181eed317af860  libstdc++-v3/testsuite/experimental/functional/87538.cc
! 7e2351e04e256fb16aaa9e5b5a9361b4  libstdc++-v3/testsuite/experimental/functional/not_fn.cc
! d37401e3895457b1501eeaa41b1ebbc6  libstdc++-v3/testsuite/experimental/functional/searchers.cc
! 5ee9bffa3a7bbbd2e04f25faea4f7ce1  libstdc++-v3/testsuite/experimental/functional/value.cc
! 58813b96ae0a13cb3b6959d2d529e16e  libstdc++-v3/testsuite/experimental/iterator/make_ostream_joiner.cc
! 2410f283d3810b8ad67919b559cb93d9  libstdc++-v3/testsuite/experimental/iterator/ostream_joiner.cc
! c4bfd651c3da9f3dc171e453973b1b93  libstdc++-v3/testsuite/experimental/iterator/requirements.cc
! 525033b74697b609fade2dabab960af5  libstdc++-v3/testsuite/experimental/list/erasure.cc
! efe33f847c59f337d5126ecd3d799d44  libstdc++-v3/testsuite/experimental/map/erasure.cc
! c4e9c04412ffc5e4a8f1339bbe51f7a3  libstdc++-v3/testsuite/experimental/memory/observer_ptr/assignment/assign.cc
! 9882f549b826f2a31a56a1eae086918f  libstdc++-v3/testsuite/experimental/memory/observer_ptr/cons/cons.cc
! 0f5daa2be5c5da1fdab4e895d1d65deb  libstdc++-v3/testsuite/experimental/memory/observer_ptr/hash/hash.cc
! 682c6ac4b017e1bc76d598fac9bef48a  libstdc++-v3/testsuite/experimental/memory/observer_ptr/make_observer.cc
! f135d9527878be176b7231a20f2012b6  libstdc++-v3/testsuite/experimental/memory/observer_ptr/relops/relops.cc
! e51a5970c20851c5c3713a7fcb2a9957  libstdc++-v3/testsuite/experimental/memory/observer_ptr/requirements.cc
! 94bf2046bda5032eea88710c1eb4ab3d  libstdc++-v3/testsuite/experimental/memory/observer_ptr/swap/swap.cc
! 10263fb774c04794b0237bb7f1ddda80  libstdc++-v3/testsuite/experimental/memory/observer_ptr/typedefs.cc
! ca7baeb1fb5d1979545b95da23b67c0b  libstdc++-v3/testsuite/experimental/memory/shared_ptr/assign/assign.cc
! 5f1775d626102b78c5e739fa9638daf3  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cast/cast.cc
! cf41994c17f663671c82db2873494a19  libstdc++-v3/testsuite/experimental/memory/shared_ptr/comparison/comparison.cc
! 5c589d9b69a36dc60d6d7b74e8321cbe  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/alias_ctor.cc
! 7ac642b1dd7a02e6a6d595965985e51d  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/alloc_ctor.cc
! 7bfd5bfcf9dad1937aff27a635bd8e03  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/copy_ctor.cc
! 12539dacb32741d7e24f54aa68c0d0b8  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/copy_ctor_neg.cc
! 8b93baac620a07371c1d87d662ee693f  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/default_ctor.cc
! 1a0bfe93d32a7927b7c921b04c9e4d4d  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/enable_shared_from_this.cc
! aa8e0dd9d3eff91def1ef93d2e3bc274  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc
! 1ef580c9300e66d51cc4e7b63520a6d8  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/pointer_ctor.cc
! 60b203179193b87dade44037c9a1f907  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/pointer_ctor_neg.cc
! 6093716e2189c5d1cedc33cc82c566a0  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/torture.cc
! 4511a66d0909d070d98e14df02d4f02d  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/unique_ptr_ctor.cc
! 8e1864b8b927274fcae0baa35f97ff0c  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/weak_ptr_ctor.cc
! f9d8ff3bc5ab0ac702dcdca4f4de8df2  libstdc++-v3/testsuite/experimental/memory/shared_ptr/dest/dest.cc
! ad6d9c452d15e96c806a973ca406585a  libstdc++-v3/testsuite/experimental/memory/shared_ptr/modifiers/reset.cc
! 5cd36bb6a219e39377d0933705816735  libstdc++-v3/testsuite/experimental/memory/shared_ptr/modifiers/reset_neg.cc
! ae36186f759676d03b31dc5a0ba914b9  libstdc++-v3/testsuite/experimental/memory/shared_ptr/modifiers/swap.cc
! eafdcaca80e253cfddfec106f75ee0c0  libstdc++-v3/testsuite/experimental/memory/shared_ptr/observers/bool_conv.cc
! 4d173844794f3349b807f46593dd6fa9  libstdc++-v3/testsuite/experimental/memory/shared_ptr/observers/operators.cc
! 0d2de2b939b6f58af78eb503b7fa26d6  libstdc++-v3/testsuite/experimental/memory/shared_ptr/observers/owner_before.cc
! 5ea66c7280a0b814bef196c19f411052  libstdc++-v3/testsuite/experimental/memory/shared_ptr/observers/use_count.cc
! 8342088a7fa292f18e86c9da245f70b3  libstdc++-v3/testsuite/experimental/memory_resource/1.cc
! 8bb5e7d0b66470d08502a3942fa7209f  libstdc++-v3/testsuite/experimental/memory_resource/70966.cc
! 92f5fd37e0568c1845b897dcda0bc5a3  libstdc++-v3/testsuite/experimental/memory_resource/new_delete_resource.cc
! 5583c17ad297723cae5c621e7078b426  libstdc++-v3/testsuite/experimental/memory_resource/null_memory_resource.cc
! a422d5499edbc0b7825ece91e6fc9521  libstdc++-v3/testsuite/experimental/memory_resource/resource_adaptor.cc
! f426666722c2827fcd67261ea6cc21d1  libstdc++-v3/testsuite/experimental/names.cc
! 3c13b06d979c6145ca03e4345e3abcd1  libstdc++-v3/testsuite/experimental/net/buffer/arithmetic.cc
! 787d7c0e6d275eae7a1bfe31fce4f0e5  libstdc++-v3/testsuite/experimental/net/buffer/const.cc
! 879641eeb91845567cc918f5989ac265  libstdc++-v3/testsuite/experimental/net/buffer/creation.cc
! 43eb5ffcf952381b012680b36bb1357b  libstdc++-v3/testsuite/experimental/net/buffer/mutable.cc
! ca4831e80f764df13adf47bf2ff3b91b  libstdc++-v3/testsuite/experimental/net/buffer/size.cc
! 46c96326a567ff09aba83e9ff975f7b7  libstdc++-v3/testsuite/experimental/net/buffer/traits.cc
! 9ac152b91b347dd07bee3790a9227467  libstdc++-v3/testsuite/experimental/net/execution_context/make_service.cc
! 91b3f28e60bda017cb352b8f41c6af40  libstdc++-v3/testsuite/experimental/net/execution_context/use_service.cc
! 7dce05799b0c077110c335764cd8c92c  libstdc++-v3/testsuite/experimental/net/executor/1.cc
! b52f1020d5742e07ec0e66664e3c647b  libstdc++-v3/testsuite/experimental/net/headers.cc
! 55b56feb5f17da7b99d9125fc73e319c  libstdc++-v3/testsuite/experimental/net/internet/address/v4/comparisons.cc
! a4fefbd995a2a3c0a023baa2781bb452  libstdc++-v3/testsuite/experimental/net/internet/address/v4/cons.cc
! 53dbbd560a1c7d8280b28f5550ce19a9  libstdc++-v3/testsuite/experimental/net/internet/address/v4/creation.cc
! 9082b7fb3a2bafce4ebe6de7c4e5f7fb  libstdc++-v3/testsuite/experimental/net/internet/address/v4/members.cc
! 3410b243c8904f63374106e058b00203  libstdc++-v3/testsuite/experimental/net/internet/address/v6/members.cc
! fe4882ee3fc36b19b813e518eebb99ac  libstdc++-v3/testsuite/experimental/net/internet/resolver/base.cc
! 2bc8cc1bc13dcfc4e894eb18b6b00fc4  libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
! d18697c7075b4675ebcfeb2b2a2ef52b  libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
  760dec58bec2534cd56103a2710b1e16  libstdc++-v3/testsuite/experimental/net/internet/socket/opt.cc
  47ab303b0324b578953893e188a1c4e8  libstdc++-v3/testsuite/experimental/net/internet/tcp.cc
  31837180dee34f479c2c7eaafac7b04a  libstdc++-v3/testsuite/experimental/net/internet/udp.cc
! 95ed6ae9de6d0840055e17fa9a2b125b  libstdc++-v3/testsuite/experimental/net/socket/basic_socket.cc
! adecd78d67594befd2f753ec386eacc4  libstdc++-v3/testsuite/experimental/net/socket/socket_base.cc
! dff9f73f427973bef034446cd465c949  libstdc++-v3/testsuite/experimental/net/system_context/1.cc
! 58a298db4c46d09139a40339bfb676a7  libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc
! 1286e9bb26137b5a9ca36779262a518c  libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
! 4c094e06668f50a9f6bdd77df290c20d  libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
! 6a859691702df5d5252d0e231e444edf  libstdc++-v3/testsuite/experimental/numeric/77801.cc
! 980611c2b928256be62a3d53e42ca76a  libstdc++-v3/testsuite/experimental/numeric/92978.cc
! 6d94a0e8f7eb6bf360ee73b5b1d772a5  libstdc++-v3/testsuite/experimental/numeric/gcd.cc
! 8904db69c5d06442b0aae00306af1580  libstdc++-v3/testsuite/experimental/numeric/lcm.cc
! e29cd0b42e822b3c862200d2f41f39b9  libstdc++-v3/testsuite/experimental/optional/77288.cc
! ae4cbff3ede7d1374a12447b4e520a6f  libstdc++-v3/testsuite/experimental/optional/assignment/1.cc
! 3c8a9924cece001c8fb1613779973d4d  libstdc++-v3/testsuite/experimental/optional/assignment/2.cc
! e67374ab04039e6e011a5bac3f3b565b  libstdc++-v3/testsuite/experimental/optional/assignment/3.cc
! 1d14206f2fab09c73f87162ffda5c3b0  libstdc++-v3/testsuite/experimental/optional/assignment/4.cc
! 19db533aeace9fe7e9555c4efe8cd297  libstdc++-v3/testsuite/experimental/optional/assignment/5.cc
! 1f474bfc82387dcb88b1e1a7dc5c3c46  libstdc++-v3/testsuite/experimental/optional/assignment/6.cc
! 5e0eff31151cb8f4ab6e904cf6eccaf6  libstdc++-v3/testsuite/experimental/optional/cons/77727.cc
! 47227ebc663d22479f870756658eebb7  libstdc++-v3/testsuite/experimental/optional/cons/copy.cc
! 5406ef225d2e0367a892c0ab156b77c4  libstdc++-v3/testsuite/experimental/optional/cons/default.cc
! 0bac82402d6e2ad708db380f575db932  libstdc++-v3/testsuite/experimental/optional/cons/move.cc
! f227475b8bb49243700983350b28ea7a  libstdc++-v3/testsuite/experimental/optional/cons/value.cc
! 02954c776297d785eb516ff724d41991  libstdc++-v3/testsuite/experimental/optional/cons/value_neg.cc
! 9bb23167fc83be2f1215c55daf6b1a24  libstdc++-v3/testsuite/experimental/optional/constexpr/cons/default.cc
! 11a3c0a8b83a16044496066dc6411ef5  libstdc++-v3/testsuite/experimental/optional/constexpr/cons/value.cc
! 3f2cca36b4316513db36f732edd419fa  libstdc++-v3/testsuite/experimental/optional/constexpr/in_place.cc
! 8435ee56253c777062740a61052e3c76  libstdc++-v3/testsuite/experimental/optional/constexpr/make_optional.cc
! 60d7fb90435f2ccfc9ab1b0881fd2643  libstdc++-v3/testsuite/experimental/optional/constexpr/nullopt.cc
! 1069ff59c016aef3b8a6756bd03a12d6  libstdc++-v3/testsuite/experimental/optional/constexpr/observers/1.cc
! c86ff528cb0cda687b01c1d01a4d8704  libstdc++-v3/testsuite/experimental/optional/constexpr/observers/2.cc
! 40ed3188391d0082a06457fa8eaef33b  libstdc++-v3/testsuite/experimental/optional/constexpr/observers/3.cc
! 9a9b9a0c16dbf624f0dbd34ee2acf1f5  libstdc++-v3/testsuite/experimental/optional/constexpr/observers/4.cc
! 74c25f12e6a0996f4ac758bd1cefec0d  libstdc++-v3/testsuite/experimental/optional/constexpr/observers/5.cc
! c494b6faed0b6dd249c47d77024193f8  libstdc++-v3/testsuite/experimental/optional/constexpr/relops/1.cc
! 497e7da883de0c6c7f2c446cec803516  libstdc++-v3/testsuite/experimental/optional/constexpr/relops/2.cc
! 5349d37336eb4849729180df7ab9b25f  libstdc++-v3/testsuite/experimental/optional/constexpr/relops/3.cc
! 4b103dde5a4e6eba7553519e73e376ee  libstdc++-v3/testsuite/experimental/optional/constexpr/relops/4.cc
! 6e53966456cee462cfb86c32046f4151  libstdc++-v3/testsuite/experimental/optional/constexpr/relops/5.cc
! 137548a192fa6e7ec67d91904f715d81  libstdc++-v3/testsuite/experimental/optional/constexpr/relops/6.cc
! 5fdb40b033c5f4e329fcb245965781b6  libstdc++-v3/testsuite/experimental/optional/in_place.cc
! 3d1183e34245c0eb8584eb72921696ab  libstdc++-v3/testsuite/experimental/optional/make_optional.cc
! 6c7d4b9bc7eb6f4fcead3cba20d76816  libstdc++-v3/testsuite/experimental/optional/nullopt.cc
! 2fae6df9217300e20273a28f9a7d7d44  libstdc++-v3/testsuite/experimental/optional/observers/1.cc
! 6ee1380ae46ad9b87068a0edf264528d  libstdc++-v3/testsuite/experimental/optional/observers/2.cc
! eb80716205216bb5035235a962722fa5  libstdc++-v3/testsuite/experimental/optional/observers/3.cc
! 0857f027f2843d9ac9631c328693b0e0  libstdc++-v3/testsuite/experimental/optional/observers/4.cc
! 2eeed11ac4d30c8989542ab9f7ad6a04  libstdc++-v3/testsuite/experimental/optional/observers/5.cc
! 82fec25c1cae16190a387dd2c9e50d47  libstdc++-v3/testsuite/experimental/optional/relops/1.cc
! 9894e4fc099269de11aee97e76ad327c  libstdc++-v3/testsuite/experimental/optional/relops/2.cc
! 3681da0b542393b4eef93fdbebbde430  libstdc++-v3/testsuite/experimental/optional/relops/3.cc
! 803c2efcefb4860c2dcf0582c8b0c8f1  libstdc++-v3/testsuite/experimental/optional/relops/4.cc
! 54b156456a81e0f9e85ee75715747b71  libstdc++-v3/testsuite/experimental/optional/relops/5.cc
! b91cd828d1cc4910274daa6096d5a9da  libstdc++-v3/testsuite/experimental/optional/relops/6.cc
! 5516bbb3649d16f03be72ec04b5beba0  libstdc++-v3/testsuite/experimental/optional/requirements.cc
! a76ac86073488048caf2f05afa12b0fa  libstdc++-v3/testsuite/experimental/optional/swap/1.cc
! 220556a8f037b652a4d586f242cd05c2  libstdc++-v3/testsuite/experimental/optional/typedefs.cc
! bcf7b763547a1691ef6a8a2530583e51  libstdc++-v3/testsuite/experimental/polymorphic_allocator/1.cc
! 6d14a45421cf83e06b7cb521ac75e5d7  libstdc++-v3/testsuite/experimental/polymorphic_allocator/construct_pair.cc
! 8960a3162dffcb25a3feefc1c22c9548  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_deque.cc
! e39dbe15adff6a48709c015e1737f841  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_forward_list.cc
! 0fec1fef10a367ca49b10d7e819bf9d9  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_list.cc
! a65461dbdc0425a5a506050385b03262  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_map.cc
! 38a306e95792f6986b9338d87617cadd  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_match.cc
! 6d4f8a8ee0c600a61a298560ecfc0a9b  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_multimap.cc
! f769c26c7c36c1a7472da31ca6b46df4  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_multiset.cc
! 106f348fb2e83f8297c640d33f8fa714  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_set.cc
! 49fc415b0b3579e72b81dc476665ae94  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_string.cc
! a5cfccccc9f55f58c1ca53fefe18bd46  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_map.cc
! ee192f2d5f243b44bd819644bc434165  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_multimap.cc
! 06666f33bdf5d24d3cae3d7b7eaf2e1d  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_multiset.cc
! cad42beb1392f03c62f4acce0ba4d836  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_set.cc
! ca33dd2376b9e086791121cff4de439f  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_vector.cc
! fe915465f7dc88896f8d64f4bf6b3eec  libstdc++-v3/testsuite/experimental/propagate_const/assignment/copy.cc
! c80d1adf2bb1622b44e262f8e3aebad6  libstdc++-v3/testsuite/experimental/propagate_const/assignment/move.cc
! bc91c43523df8e3d2291e3dddc4d225f  libstdc++-v3/testsuite/experimental/propagate_const/assignment/move_neg.cc
! df66dcfb0e23f8c0161171a9c643035f  libstdc++-v3/testsuite/experimental/propagate_const/cons/copy.cc
! 247067d1c7c17a803a0d5e3542a31e7a  libstdc++-v3/testsuite/experimental/propagate_const/cons/default.cc
! da58de91c42d44da0940a05122c87cef  libstdc++-v3/testsuite/experimental/propagate_const/cons/move.cc
! 891cf580e7ec83f180732d2cfb4b9541  libstdc++-v3/testsuite/experimental/propagate_const/cons/move_neg.cc
! 828acf2158cd8ad689c8ed6fa95ec296  libstdc++-v3/testsuite/experimental/propagate_const/hash/1.cc
! 6445effc4bcbb3666bf89d21558dcf88  libstdc++-v3/testsuite/experimental/propagate_const/observers/1.cc
! e20c610a9c9701fba622e6a1555b9f79  libstdc++-v3/testsuite/experimental/propagate_const/relops/1.cc
! 2e297da3ca7f590c53476b6a8da8ef21  libstdc++-v3/testsuite/experimental/propagate_const/requirements1.cc
! d33849262494d8f9c5a099ae807f4d3b  libstdc++-v3/testsuite/experimental/propagate_const/requirements2.cc
! 2e87d6b8d660144af61f0f16a2591ada  libstdc++-v3/testsuite/experimental/propagate_const/requirements3.cc
! 1ec113aab8664cd00005583eeda998f1  libstdc++-v3/testsuite/experimental/propagate_const/requirements4.cc
! 47798fb9e37ef950335cde50041bb4d7  libstdc++-v3/testsuite/experimental/propagate_const/requirements5.cc
! 04b9e051ec2de1e077010713146435ac  libstdc++-v3/testsuite/experimental/propagate_const/swap/1.cc
  f622008c5ec7680a2ac920136d22446f  libstdc++-v3/testsuite/experimental/propagate_const/swap/lwg3413.cc
! 97e54b4a473f5119fde9f19e8bc77013  libstdc++-v3/testsuite/experimental/propagate_const/typedefs.cc
! b890a4bfa8d8cd009cb85b0163f0b1da  libstdc++-v3/testsuite/experimental/random/randint.cc
! d11b0cf5365cf27c6d9b1d7791b5032a  libstdc++-v3/testsuite/experimental/ratio/value.cc
! 6158ee68c53b1eb6668b2d3c43fb5fec  libstdc++-v3/testsuite/experimental/set/erasure.cc
! 95bdc242cfce24b906dbef7ece3f3c80  libstdc++-v3/testsuite/experimental/simd/driver.sh
! 81cb6163311a6d96c80beba0c32c1c2b  libstdc++-v3/testsuite/experimental/simd/generate_makefile.sh
! c9ff7f42a3440a4c43a3f282f1814dd9  libstdc++-v3/testsuite/experimental/simd/standard_abi_usable.cc
  8456d329f682f25f869aac367480356e  libstdc++-v3/testsuite/experimental/simd/standard_abi_usable_2.cc
! 5a175cd78dfff9373203c96c10e3955c  libstdc++-v3/testsuite/experimental/simd/tests/abs.cc
! 051e64dc184f7b404524e615ce36cba2  libstdc++-v3/testsuite/experimental/simd/tests/algorithms.cc
! 3e44aff903358ff79a1dde997f6a359b  libstdc++-v3/testsuite/experimental/simd/tests/bits/conversions.h
! b068e594aa7ad392d7f76415314f7019  libstdc++-v3/testsuite/experimental/simd/tests/bits/make_vec.h
! a8f1a36186768b2ee7fbf3a8e4b04bce  libstdc++-v3/testsuite/experimental/simd/tests/bits/mathreference.h
! f3c5c39d1408e1d33dabcdf445e2c782  libstdc++-v3/testsuite/experimental/simd/tests/bits/metahelpers.h
! 74ad34d6973b64b38024a394a01f1161  libstdc++-v3/testsuite/experimental/simd/tests/bits/simd_view.h
! 8de2d2aeb91e62ba589ada0576abb058  libstdc++-v3/testsuite/experimental/simd/tests/bits/test_values.h
! 65a6dd497514ee32b17e005140e09fda  libstdc++-v3/testsuite/experimental/simd/tests/bits/ulp.h
! 2032e011aacfd34f2d6b4783e4fc473d  libstdc++-v3/testsuite/experimental/simd/tests/bits/verify.h
! 9399282958998d0c420735d9e8bff5cb  libstdc++-v3/testsuite/experimental/simd/tests/broadcast.cc
! 977e5f8160480e0d84e8af0cd0bdf830  libstdc++-v3/testsuite/experimental/simd/tests/casts.cc
! f4a6d8335e1aa0a66b0c967770d88d8e  libstdc++-v3/testsuite/experimental/simd/tests/fpclassify.cc
! c5b05eea9fbf7b71c19cfa2a846d0279  libstdc++-v3/testsuite/experimental/simd/tests/frexp.cc
! 81582e24f42794a07f49e599a516681e  libstdc++-v3/testsuite/experimental/simd/tests/generator.cc
! adbc631eadb5370098f35704939b6974  libstdc++-v3/testsuite/experimental/simd/tests/hypot3_fma.cc
! 7e0b9ff5db5e0afb69c263a26cfa6f4d  libstdc++-v3/testsuite/experimental/simd/tests/integer_operators.cc
! 44803853cac67bc3e991b95bc4bfa630  libstdc++-v3/testsuite/experimental/simd/tests/ldexp_scalbn_scalbln_modf.cc
! 81528b3b70b7e95113ebc427718f8cfa  libstdc++-v3/testsuite/experimental/simd/tests/loadstore.cc
! 78e03703072fd862da2609d16e285553  libstdc++-v3/testsuite/experimental/simd/tests/logarithm.cc
! 1567e8d6e3e1dc9e9d9628193a061cbc  libstdc++-v3/testsuite/experimental/simd/tests/mask_broadcast.cc
! ee32cb3dc270cd9c5b142d8474c6d16b  libstdc++-v3/testsuite/experimental/simd/tests/mask_conversions.cc
! ba9b7aac3934b84324828d733a449d61  libstdc++-v3/testsuite/experimental/simd/tests/mask_implicit_cvt.cc
! ace50ff6c3ff75c22a8d59c0109bc1ae  libstdc++-v3/testsuite/experimental/simd/tests/mask_loadstore.cc
! 0bb7627c0d2f9158fb82a8728a537884  libstdc++-v3/testsuite/experimental/simd/tests/mask_operator_cvt.cc
! a56eeb3150825c9a4db053388474786f  libstdc++-v3/testsuite/experimental/simd/tests/mask_operators.cc
! 2e951eede60753f8c47d4b6fad76899d  libstdc++-v3/testsuite/experimental/simd/tests/mask_reductions.cc
! 05e6aa776ac3dde07f0f2ce945c4a544  libstdc++-v3/testsuite/experimental/simd/tests/math_1arg.cc
! f37dc37a1f2deeadb0848d5805880a2a  libstdc++-v3/testsuite/experimental/simd/tests/math_2arg.cc
! 1ade40b68adc65e1bad2fdf759d3fc1e  libstdc++-v3/testsuite/experimental/simd/tests/operator_cvt.cc
! 11e4094b7fc8e4030355ae2cb1d6b658  libstdc++-v3/testsuite/experimental/simd/tests/operators.cc
! 1348140447e84634e81a90837eb270d9  libstdc++-v3/testsuite/experimental/simd/tests/reductions.cc
! 0341be10ab6e8b1246b259c04a1afa0c  libstdc++-v3/testsuite/experimental/simd/tests/remqo.cc
! ba101bb407815a6b8b49859dbaaa00bb  libstdc++-v3/testsuite/experimental/simd/tests/simd.cc
! 6b6dbb3d4d3b7a56bf3570ed20eb16c8  libstdc++-v3/testsuite/experimental/simd/tests/sincos.cc
! 61a90382bc83c25a753e1480a048aaaa  libstdc++-v3/testsuite/experimental/simd/tests/split_concat.cc
! a6db162d1694878802870f025bf0ec8d  libstdc++-v3/testsuite/experimental/simd/tests/splits.cc
! 72907251a60264f03456e984af6e7bf7  libstdc++-v3/testsuite/experimental/simd/tests/trigonometric.cc
! 9695bfa73d592ed767dc526955d838a0  libstdc++-v3/testsuite/experimental/simd/tests/trunc_ceil_floor.cc
! d438fe157e89bb1710a4139d869d3465  libstdc++-v3/testsuite/experimental/simd/tests/where.cc
! 86d9256ca573b52ba687b1af3bbce55b  libstdc++-v3/testsuite/experimental/source_location/1.cc
! 4088567100341bbbfcb9418037f955d4  libstdc++-v3/testsuite/experimental/string/erasure.cc
! 5a6b826151c745e2c52a59e334dbb694  libstdc++-v3/testsuite/experimental/string_view/capacity/1.cc
! fad69c42893af4d6621d70360d20833f  libstdc++-v3/testsuite/experimental/string_view/cons/char/1.cc
! 5c304b1283231aa530adc1b68e78fef3  libstdc++-v3/testsuite/experimental/string_view/cons/char/2.cc
! 00038f3cbc9b29a87ce8af34309aa6dd  libstdc++-v3/testsuite/experimental/string_view/cons/char/3.cc
! e04047343068da23c7f2dda8dc94dafd  libstdc++-v3/testsuite/experimental/string_view/cons/wchar_t/1.cc
! a4f9062c2650dffd1f9e8a2bb3002e32  libstdc++-v3/testsuite/experimental/string_view/cons/wchar_t/2.cc
! 1ac10dbf4419d5e4206dced585994dc1  libstdc++-v3/testsuite/experimental/string_view/cons/wchar_t/3.cc
! 0cfbad95bad42550b456dfc47b370ec7  libstdc++-v3/testsuite/experimental/string_view/element_access/char/1.cc
! faab1d950d38f4cf18ebd2b2560f6796  libstdc++-v3/testsuite/experimental/string_view/element_access/char/2.cc
! 57f8169d2f4387a56d959e67e7e1bad8  libstdc++-v3/testsuite/experimental/string_view/element_access/char/empty.cc
! c93a89b980cd6f42d800f50efb8701a2  libstdc++-v3/testsuite/experimental/string_view/element_access/char/front_back.cc
! fabe7a9a44ff7e2bf9c902e433b7df20  libstdc++-v3/testsuite/experimental/string_view/element_access/wchar_t/1.cc
! 90e5e817f645f4fe8efe7c712114072a  libstdc++-v3/testsuite/experimental/string_view/element_access/wchar_t/2.cc
! ba5f1561fab78babf10cdcad2d1e7b45  libstdc++-v3/testsuite/experimental/string_view/element_access/wchar_t/empty.cc
! 026233a280780efcc2f3eb73f626007e  libstdc++-v3/testsuite/experimental/string_view/element_access/wchar_t/front_back.cc
! 1433b41ef8f9f912f44df3b6fae4f3c7  libstdc++-v3/testsuite/experimental/string_view/include.cc
! 161b7509408917e1a3716bdc4bf588f8  libstdc++-v3/testsuite/experimental/string_view/inserters/char/1.cc
! 314ba54d0de134f99f5a7ab2a64e8db5  libstdc++-v3/testsuite/experimental/string_view/inserters/char/2.cc
! 3039d29e467fceb4cffeee369aa5c154  libstdc++-v3/testsuite/experimental/string_view/inserters/char/3.cc
! c205cb53b0a440db7142164e54b0bb01  libstdc++-v3/testsuite/experimental/string_view/inserters/pod/10081-out.cc
! b7d7afba6a58905b126349f3d7d95230  libstdc++-v3/testsuite/experimental/string_view/inserters/wchar_t/1.cc
! 4b1ac61331f889d4ee953a0e6c47e0ae  libstdc++-v3/testsuite/experimental/string_view/inserters/wchar_t/2.cc
! d63bf4e9c4d4cba70039322d53b5854f  libstdc++-v3/testsuite/experimental/string_view/inserters/wchar_t/3.cc
! bbe8215453ffb0ec541a164cfff7aab6  libstdc++-v3/testsuite/experimental/string_view/literals/types-char8_t.cc
! fa4cca666d37f2ff69f812b333cc12ac  libstdc++-v3/testsuite/experimental/string_view/literals/types.cc
! 6f8d27d631b93c0a9dca78969d2d978d  libstdc++-v3/testsuite/experimental/string_view/literals/values-char8_t.cc
! f7bb3cff7827f1575fbdb98f967a2ab4  libstdc++-v3/testsuite/experimental/string_view/literals/values.cc
! 8d4433af068b8d423f800218e24df42e  libstdc++-v3/testsuite/experimental/string_view/modifiers/remove_prefix/char/1.cc
! 11635cb5ec657d33a9963a11148d0007  libstdc++-v3/testsuite/experimental/string_view/modifiers/remove_prefix/wchar_t/1.cc
! f27b100c73455c1b538621e7534b8867  libstdc++-v3/testsuite/experimental/string_view/modifiers/remove_suffix/char/1.cc
! 593cc4a87288cd6844e1d122c84ef3c8  libstdc++-v3/testsuite/experimental/string_view/modifiers/remove_suffix/wchar_t/1.cc
! 3cf9933194b837bfc68285243caf5480  libstdc++-v3/testsuite/experimental/string_view/operations/compare/char/1.cc
! 4bfc2e398a1af7fc8baa800ae3b77182  libstdc++-v3/testsuite/experimental/string_view/operations/compare/char/13650.cc
! 61bf9c835de89dcc49f8a8d3ee1ada9d  libstdc++-v3/testsuite/experimental/string_view/operations/compare/char/70483.cc
! 9f9dd6c338d643bc88e3f5a5283e5c32  libstdc++-v3/testsuite/experimental/string_view/operations/compare/wchar_t/1.cc
! f07f49be3fb63c60e70d9d0a0d7803f0  libstdc++-v3/testsuite/experimental/string_view/operations/compare/wchar_t/13650.cc
! 3312e625b8a0bc024b0b3452991d7cee  libstdc++-v3/testsuite/experimental/string_view/operations/copy/char/1.cc
! 4036d86c471ad16b144ae2b452d0d501  libstdc++-v3/testsuite/experimental/string_view/operations/copy/wchar_t/1.cc
  672cb4f94c8a852e6bdb846e926365f9  libstdc++-v3/testsuite/experimental/string_view/operations/data/char/1.cc
  3500b68ff8c9b68295a6f4a0a348e9d8  libstdc++-v3/testsuite/experimental/string_view/operations/data/wchar_t/1.cc
! 8d9e39f4a9aab8b97bafb07f944abe42  libstdc++-v3/testsuite/experimental/string_view/operations/find/char/1.cc
! 132bbb2a78a3bdf4cc44ecdfc4aa7cf6  libstdc++-v3/testsuite/experimental/string_view/operations/find/char/2.cc
! d1ad7c4ae1e2496c3797a64a6c1d9cb2  libstdc++-v3/testsuite/experimental/string_view/operations/find/char/3.cc
! 1d6132d5c1bbe568321e96c891c25d36  libstdc++-v3/testsuite/experimental/string_view/operations/find/char/4.cc
! 611e6ea27d07a661c24b4ac6995a6253  libstdc++-v3/testsuite/experimental/string_view/operations/find/wchar_t/1.cc
! 9fac86322f6c3e273716e3bd23eb2fd2  libstdc++-v3/testsuite/experimental/string_view/operations/find/wchar_t/2.cc
! b92ac87f19907f8c376bcbe11fd18344  libstdc++-v3/testsuite/experimental/string_view/operations/find/wchar_t/3.cc
! 119ba2c8cd24f85f82c1ea8d3179a3d3  libstdc++-v3/testsuite/experimental/string_view/operations/find/wchar_t/4.cc
! b45f47d4482e466adb159a9c5d59fcd7  libstdc++-v3/testsuite/experimental/string_view/operations/rfind/char/1.cc
! ba1aacc018813daea1ad6abe4a2c495f  libstdc++-v3/testsuite/experimental/string_view/operations/rfind/char/2.cc
! da0a60789128c17642a8f05400e8e354  libstdc++-v3/testsuite/experimental/string_view/operations/rfind/char/3.cc
! 8f3b725c0ec700545777345661fc9b66  libstdc++-v3/testsuite/experimental/string_view/operations/rfind/wchar_t/1.cc
! 4d1ac4e8f1979ef610be2952ffeff7f7  libstdc++-v3/testsuite/experimental/string_view/operations/rfind/wchar_t/2.cc
! 711e76eaa19eb90241c9b26aacdfb3bf  libstdc++-v3/testsuite/experimental/string_view/operations/rfind/wchar_t/3.cc
! 0ce855bc049a169bea87c15812e1b16e  libstdc++-v3/testsuite/experimental/string_view/operations/substr/char/1.cc
! 9eb712fff131d28fe652e5a8ce9e39dc  libstdc++-v3/testsuite/experimental/string_view/operations/substr/char/83511.cc
! 07061a979070f2f2aed5ea46fe3a35ae  libstdc++-v3/testsuite/experimental/string_view/operations/substr/wchar_t/1.cc
! ece91d35b2f77dee7dd115c575a303ef  libstdc++-v3/testsuite/experimental/string_view/operations/substr/wchar_t/83511.cc
! 85ccdbba2b343e89a783d03d8890c697  libstdc++-v3/testsuite/experimental/string_view/operations/to_string/1.cc
! 004b504f658bf92eadb0125484b2d7f8  libstdc++-v3/testsuite/experimental/string_view/operators/char/2.cc
! 2b79158cc58a4d4a99b8d2ee5e53c897  libstdc++-v3/testsuite/experimental/string_view/operators/wchar_t/2.cc
! f0d48a7387237b3e21144571c2582aea  libstdc++-v3/testsuite/experimental/string_view/range_access/char/1.cc
! 33dd9228606a1eb0a9fbe5af1518ad26  libstdc++-v3/testsuite/experimental/string_view/range_access/wchar_t/1.cc
! 28c923f3ae2700f11e9a023bce6d0de5  libstdc++-v3/testsuite/experimental/string_view/requirements/explicit_instantiation/1.cc
! 3d70d01fe3bde6252d388e5373da4e05  libstdc++-v3/testsuite/experimental/string_view/requirements/explicit_instantiation/char/1.cc
! 5dbdf6f75c91b917173fbbd588274505  libstdc++-v3/testsuite/experimental/string_view/requirements/explicit_instantiation/char16_t/1.cc
! 640b01cd6f506871a8d4444749746b49  libstdc++-v3/testsuite/experimental/string_view/requirements/explicit_instantiation/char32_t/1.cc
! aa6a472316af650d9431966da6a18054  libstdc++-v3/testsuite/experimental/string_view/requirements/explicit_instantiation/char8_t/1.cc
! 0c062dcf96fa8f76640c80b3b1c2408b  libstdc++-v3/testsuite/experimental/string_view/requirements/explicit_instantiation/wchar_t/1.cc
! 4a74af95d39122af3c15b9190a7bdac7  libstdc++-v3/testsuite/experimental/string_view/requirements/typedefs.cc
! dba5e9c88ebc96dedf2ff03a85d35ed9  libstdc++-v3/testsuite/experimental/string_view/typedefs.cc
! 6f16a76974f0dbe8077a867a3d617562  libstdc++-v3/testsuite/experimental/string_view/types/1.cc
! 8c594f51d79da30428193dd287bd935b  libstdc++-v3/testsuite/experimental/system_error/value.cc
! 3fe3ed02301f9021c7db5aab0270e017  libstdc++-v3/testsuite/experimental/tuple/apply.cc
! e46c56317abfd5b365b7c021a2fa616f  libstdc++-v3/testsuite/experimental/tuple/tuple_size.cc
! 382a9f6579ed8666d3099cedfdb0a374  libstdc++-v3/testsuite/experimental/type_erased_allocator/2.cc
! 6a05ca1b99a05767a4fbf692dfa24c86  libstdc++-v3/testsuite/experimental/type_erased_allocator/uses_allocator.cc
! 95750ce132d1dd8215741094345e0c2f  libstdc++-v3/testsuite/experimental/type_traits/detection.cc
! a76db81b8fc9423c86c1b0e63f4dee97  libstdc++-v3/testsuite/experimental/type_traits/nonesuch.cc
! 3c38de8340ae60871b28270346ebb7ed  libstdc++-v3/testsuite/experimental/type_traits/value.cc
! 847f1690a77208a1eee2e36d7d4d3007  libstdc++-v3/testsuite/experimental/unordered_map/erasure.cc
! 7dd03004f0ca28470cea5515f6461bd7  libstdc++-v3/testsuite/experimental/unordered_set/erasure.cc
! c134c2d15ac55bc08ee9f7da9635284a  libstdc++-v3/testsuite/experimental/vector/erasure.cc
! cfeb0932ebb0e0422e0ef27233190785  libstdc++-v3/testsuite/ext/bitmap_allocator/check_allocate_max_size.cc
! f74d6fce491d5bce589029cd1b8b4764  libstdc++-v3/testsuite/ext/bitmap_allocator/check_deallocate_null.cc
! 08ff4331855b787a8fac89345128e36e  libstdc++-v3/testsuite/ext/bitmap_allocator/check_delete.cc
! 84f92be2635c87d70cec59c6bc681b0e  libstdc++-v3/testsuite/ext/bitmap_allocator/check_new.cc
! 9b300b462cab372499d5610583043294  libstdc++-v3/testsuite/ext/bitmap_allocator/overaligned.cc
! aad50ac95276f866632b9560eb942758  libstdc++-v3/testsuite/ext/bitmap_allocator/variadic_construct.cc
  846dc8224edb857bb6953efa8b4cdb2d  libstdc++-v3/testsuite/ext/char8_t/atomic-1.cc
! 117362d3fad8e78aadc2be710c4092cd  libstdc++-v3/testsuite/ext/codecvt/1.cc
! 8ae1930174db4a7d7d32c853c208c119  libstdc++-v3/testsuite/ext/codecvt/char-1.cc
! 1997df58168bbbba6e118dde833f636f  libstdc++-v3/testsuite/ext/codecvt/char-2.cc
! ad5023fee26ba8283ccad93e5930cf36  libstdc++-v3/testsuite/ext/codecvt/wchar_t.cc
! a675c9b8e3f3ed4aa524486cbe310fb4  libstdc++-v3/testsuite/ext/concept_checks.cc
! b52b04a75e9cce3ee34553a2618efd60  libstdc++-v3/testsuite/ext/concurrence_lock_error/cons_virtual_derivation.cc
! f154241990e596b36a8dd2f19d91172c  libstdc++-v3/testsuite/ext/concurrence_unlock_error/cons_virtual_derivation.cc
! 926f7557f00c427e993a5c275584e507  libstdc++-v3/testsuite/ext/debug_allocator/56170.cc
! 98a0f9f168407630284a7a9599c3137f  libstdc++-v3/testsuite/ext/debug_allocator/check_deallocate_null.cc
! c968234b4a99d5418f10f4cee8760a98  libstdc++-v3/testsuite/ext/debug_allocator/check_delete.cc
! db3a2af4207f330ddfb3e89a5d8797e0  libstdc++-v3/testsuite/ext/debug_allocator/check_new.cc
! 042c19045513691347fe6b5bec8ea96f  libstdc++-v3/testsuite/ext/debug_allocator/eq.cc
! 12f6954c00c1166fbbfcf058fe9b153d  libstdc++-v3/testsuite/ext/debug_allocator/explicit_instantiation.cc
! 6ce65bad9513fa5657a31b44bc44b77a  libstdc++-v3/testsuite/ext/enc_filebuf/char/13189.cc
! e040f0b03001b940f2942fd8d4d97a6c  libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc
! 7c336caffd4f025da3b0bb9803d4d246  libstdc++-v3/testsuite/ext/enc_filebuf/wchar_t/13189.cc
! e065c66ca7c230125e71dc9c2943d641  libstdc++-v3/testsuite/ext/ext_pointer/1.cc
! ab16322360c115a3a39796c6c60f5e66  libstdc++-v3/testsuite/ext/ext_pointer/1_neg.cc
! e76673a059bac8977041f75985618ab4  libstdc++-v3/testsuite/ext/ext_pointer/alloc_eq.cc
! ca393ca360ce150a3532c319ff19ca7c  libstdc++-v3/testsuite/ext/forced_error/cons_virtual_derivation.cc
! 72758704c0605d83d27e7b117ce90585  libstdc++-v3/testsuite/ext/headers.cc
! 202e26dd93d409320bbb644b625b52cb  libstdc++-v3/testsuite/ext/iota/cxx0x.cc
! 1986f6bf79673423cddd8f81d9969e23  libstdc++-v3/testsuite/ext/is_heap/1.cc
! a7d61c277e8b1113df3e7bb9499d8f2c  libstdc++-v3/testsuite/ext/is_heap/47709.cc
! a59d7a927f10b55011ce2b5366655dfe  libstdc++-v3/testsuite/ext/is_heap/check_type.cc
! 9d7fdbb990433ad357590e0127edeb0b  libstdc++-v3/testsuite/ext/is_sorted/cxx0x.cc
! c9c4179265d4f6aa500562cdc362a2a4  libstdc++-v3/testsuite/ext/malloc_allocator/89510.cc
! a447fb9efab38122dfb280c4a40e94ec  libstdc++-v3/testsuite/ext/malloc_allocator/check_allocate_max_size.cc
! ca5eac0d02389b84c9b549b22632f32e  libstdc++-v3/testsuite/ext/malloc_allocator/check_deallocate_null.cc
! b2358a3bfd25d12d068981d243b88ec7  libstdc++-v3/testsuite/ext/malloc_allocator/check_delete.cc
! a665da7b6efb6b283ac5bb4023db2eea  libstdc++-v3/testsuite/ext/malloc_allocator/check_new.cc
! 0ff164f273843224dc7b34ccd1959a57  libstdc++-v3/testsuite/ext/malloc_allocator/deallocate_global.cc
! 7c6ea6963163140d89ecd67d25ffe067  libstdc++-v3/testsuite/ext/malloc_allocator/deallocate_local.cc
! e98d639fc2a3338a0192dff4d0906f88  libstdc++-v3/testsuite/ext/malloc_allocator/eq.cc
! 56209189fbaa14cd9863fe97a5e71d81  libstdc++-v3/testsuite/ext/malloc_allocator/explicit_instantiation.cc
! 4454f0d05cfcbb7eb602b9404061627b  libstdc++-v3/testsuite/ext/malloc_allocator/overaligned.cc
! 868d2fbf0b9aaae166632a344d1e2e79  libstdc++-v3/testsuite/ext/malloc_allocator/sanity.cc
! 5f1b093d8820495323d97a73c2760f9c  libstdc++-v3/testsuite/ext/malloc_allocator/variadic_construct.cc
! cd177ae796f5133fd283ddac02a197b4  libstdc++-v3/testsuite/ext/median.cc
! 6ff999ebff9bbc8ff67bd9c30923f34a  libstdc++-v3/testsuite/ext/mt_allocator/22309_thread.cc
! 5fbaf7e46700cf8feba1524061a13923  libstdc++-v3/testsuite/ext/mt_allocator/check_allocate_big_per_type.cc
! b7e796c87b77ecf4bc118f9858521c4a  libstdc++-v3/testsuite/ext/mt_allocator/check_allocate_max_size.cc
! f43e830a5269626d478bf3e342670cf3  libstdc++-v3/testsuite/ext/mt_allocator/check_deallocate_null.cc
! af87eab7c45bfcae78ea6ce803f34ed6  libstdc++-v3/testsuite/ext/mt_allocator/check_deallocate_null_thread.cc
! d4c13d8a8b0c68f80834cbb697806ebb  libstdc++-v3/testsuite/ext/mt_allocator/check_delete.cc
! 78c747b71133a9c98fde06c658fac8fc  libstdc++-v3/testsuite/ext/mt_allocator/check_new.cc
! 50aefcb3096d49fd48eaaa8395fc2b6c  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global-2.cc
! 787ee03565030e5c456f89166d165cd7  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global-4.cc
! f8f4e1345e83f9da7cba3ad2ff0cc052  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global_thread-1.cc
! 415e419671afd52457e64f150e0e83bd  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global_thread-3.cc
! fea3eb9ebc7d79d4bf1d8068d191b445  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-2.cc
! 9d7266aa6b98b40325b9cc06b34d756b  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-4.cc
! 811ebb2d60f7ff1b08a9d7d64c5ef607  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc
! 7b76321933a7a1973ace7f7b74466edc  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-8.cc
! c9caa13d1a3b51391ad5c08e5b58c8db  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-1.cc
! ec284375df940a3f39c050ad89d2601c  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-3.cc
! eabc5be3a94cb5b6fc90ae8ae96169c9  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-5.cc
! e7ea1bb2023f9c9948a7ea5427cb504c  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-7.cc
! faf7dd51c9c1e16edb01b2684070d24c  libstdc++-v3/testsuite/ext/mt_allocator/explicit_instantiation.cc
! a413feca9a7bc4cf02b3a5af780ace6c  libstdc++-v3/testsuite/ext/mt_allocator/overaligned.cc
! 9e0caa577f198993ec4881b4d704e95e  libstdc++-v3/testsuite/ext/mt_allocator/tune-1.cc
! 4de11944df95cfad7285c97eba449c23  libstdc++-v3/testsuite/ext/mt_allocator/tune-2.cc
! abc3057946cf4ad914fc4f0ea4b2d87f  libstdc++-v3/testsuite/ext/mt_allocator/tune-3.cc
! d0a2457402c1d7f9be6f1684ff66784a  libstdc++-v3/testsuite/ext/mt_allocator/tune-4.cc
! 079e37035160c108a833ee9e09c7b785  libstdc++-v3/testsuite/ext/mt_allocator/variadic_construct.cc
! 8de1e59e69db5b4be8a60cba3765208c  libstdc++-v3/testsuite/ext/new_allocator/89510.cc
! f6d130503ae6fb61b5aaecf828259457  libstdc++-v3/testsuite/ext/new_allocator/check_allocate_max_size.cc
! 178228266c958458ecfbeee2ac5b50ef  libstdc++-v3/testsuite/ext/new_allocator/check_deallocate_null.cc
! 3fa862dc99851bad576e0e8d37daf536  libstdc++-v3/testsuite/ext/new_allocator/check_delete.cc
! 425fc69637e6ca82daa9e46721cb5b32  libstdc++-v3/testsuite/ext/new_allocator/check_new.cc
! f29cca7d632f5d01c016dde0cdb1d030  libstdc++-v3/testsuite/ext/new_allocator/deallocate_global.cc
! 1b428e101e272ac47e694d4cce6bd24f  libstdc++-v3/testsuite/ext/new_allocator/deallocate_local.cc
! 48d5e5699df7cb469081e5197a529447  libstdc++-v3/testsuite/ext/new_allocator/eq.cc
! b2b72476a98313185b689a0814bf7b09  libstdc++-v3/testsuite/ext/new_allocator/instantiate.cc
! c6f09bffb0fe7b1a48d532cd7d795a01  libstdc++-v3/testsuite/ext/new_allocator/overaligned.cc
! 3380cf3801e6657a29ec34950bf6ae29  libstdc++-v3/testsuite/ext/new_allocator/variadic_construct.cc
! 1f281aa61fb51cd360c90d4dc0539a82  libstdc++-v3/testsuite/ext/numeric_traits/numeric_traits.cc
! 7cdd4422896f56834d4688f33b5ff9b7  libstdc++-v3/testsuite/ext/pb_ds/example/assoc_container_traits.cc
! 844a377ca5db06bb0080779a3827ca9e  libstdc++-v3/testsuite/ext/pb_ds/example/basic_map.cc
! 255726612564891e6361c4c27ca7caef  libstdc++-v3/testsuite/ext/pb_ds/example/basic_multimap.cc
! b340644a5a51819403ceeb785e086ff5  libstdc++-v3/testsuite/ext/pb_ds/example/basic_multiset.cc
! 7ab581fa11ad80aadf8b47c647ffe71a  libstdc++-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc
! 35f64fc149527d3199e4519f16716224  libstdc++-v3/testsuite/ext/pb_ds/example/basic_set.cc
! 153c5353b97c458934010ae3bf237520  libstdc++-v3/testsuite/ext/pb_ds/example/erase_if.cc
! 3eafe8fa9674e76cf9ff204e23c1e831  libstdc++-v3/testsuite/ext/pb_ds/example/hash_find_neg.cc
! d8b67ab69adf756bfb963ecb2d3e2944  libstdc++-v3/testsuite/ext/pb_ds/example/hash_illegal_resize.cc
! c573292c3eabd820a0b91a291b217539  libstdc++-v3/testsuite/ext/pb_ds/example/hash_initial_size.cc
! 6870323ec0360d52408448fd48b559ed  libstdc++-v3/testsuite/ext/pb_ds/example/hash_load_set_change.cc
! 03424a51032450d9a6604ee837b248e5  libstdc++-v3/testsuite/ext/pb_ds/example/hash_mod.cc
! 34885f605316b2eb7cfb5133c059ad6b  libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize.cc
! 9476d571d61c3deae942afe6f27c237d  libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc
! ed4b903491d9a796a36c16cbca1cc5c9  libstdc++-v3/testsuite/ext/pb_ds/example/hash_shift_mask.cc
! f80b2154758a38f23cc562045beabd03  libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_container_traits.cc
! 7d8c9330b45ecc4c0125ad4f9128fd53  libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_dijkstra.cc
! ff8ec3bf080e22f6bf30a53401fa44e1  libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_erase_if.cc
! a5c2980ff56742e38a7cc97fefd4ca54  libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_split_join.cc
! dd8b5c58e2a828313368f7b6c189e097  libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_xref.cc
! 3948d7c4a8a7ac8704b59c7437621236  libstdc++-v3/testsuite/ext/pb_ds/example/ranged_hash.cc
! 7f033630886857fc1f72711a1e88e595  libstdc++-v3/testsuite/ext/pb_ds/example/store_hash.cc
! 97a09f2a062a0b432601c59117f34780  libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc
! ca156de9b85fbeb6acf42c2fcc3fd255  libstdc++-v3/testsuite/ext/pb_ds/example/tree_join.cc
! 6bf712e95a34154006d673e175e40548  libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc
! 77498d0ec7e8cc8b4907a453987197b8  libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics_join.cc
! eaf7097dbc0e933adc9be65a785ebc2f  libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc
! a41315c5bfb135cebb3962ca86003fe7  libstdc++-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc
! 9d88a177372102e87599c3fa1910ea55  libstdc++-v3/testsuite/ext/pb_ds/example/trie_split.cc
! eb71f40eae0a4d915e26beb28cf721c8  libstdc++-v3/testsuite/ext/pb_ds/regression/associative_containers.cc
! a22a39f5384031a7a64dfe35b860efeb  libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand.cc
! 758cca94c18e62933e1642fdb297a9db  libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand_debug.cc
! eb63f5d07f96bd2b8b0e654c61edf39a  libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand.cc
! 438ab0a10228adb0e385b613977a2c89  libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand_debug.cc
! 5d84523c21000d96b94336847f6815ff  libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand.cc
! 7f5ca7001bc6b579ca70b973db13db6c  libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand_debug.cc
! f2e2239c0dfb79aded689ef6b7ea2d07  libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand.cc
! cca891e4a9efe99b6bd23ae018fb6914  libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand_debug.cc
! b5efc4b38c8f2190b8f61a886116d79a  libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_binary_heap-62045.cc
! 1f7eb6ec26545d05b1674b6caa9b8dd0  libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand.cc
! 5130dc89231934f31ade0471b22276e7  libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc
! 29d186fc85521a546ad19ea75972ef80  libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queues.cc
! 5cbf90d16dc8b5970580f1a87019c13c  libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand.cc
! 25c43e5cd430bc00f69d4701ef3c0a9b  libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand_debug.cc
! 10787592a35d277cbbbf04539f930d4c  libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand.cc
! 2aeb750c8b10a971d156a3e8a2e2efab  libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand_debug.cc
! 79577925be587154f35fc030892b516b  libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand.cc
! 1c43c0db1844e40e7a4dfc83a7764bd5  libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand_debug.cc
! 26964e147457388c0e4c107247de9b6a  libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand.cc
! 72df96fe340afbdf0d129fa4f1936cde  libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand_debug.cc
! 7ec3e3eac5c36cec9d9ea30d714b4a83  libstdc++-v3/testsuite/ext/pod_char_traits.cc
! eb330b24a05c6918cc8f3f28c4f98b23  libstdc++-v3/testsuite/ext/pool_allocator/allocate_chunk.cc
! 1659d6ce9e192a0d3e9d9984e3d4ed92  libstdc++-v3/testsuite/ext/pool_allocator/check_allocate_max_size.cc
! 59cb74ae32379f13ca14129c2acb4b56  libstdc++-v3/testsuite/ext/pool_allocator/check_deallocate_null.cc
! 29d924969a7a557f9dc19fc35d301d30  libstdc++-v3/testsuite/ext/pool_allocator/check_delete.cc
! 0ada942c0dde5a20f0ae4ffb5f4fb974  libstdc++-v3/testsuite/ext/pool_allocator/check_new.cc
! 2e2573d20feee8f133e3d3ead3a18c2c  libstdc++-v3/testsuite/ext/pool_allocator/explicit_instantiation.cc
! 10fcf971960e3ae9acfa158b2efc6e3d  libstdc++-v3/testsuite/ext/pool_allocator/overaligned.cc
! 7cb75682a90eb4b0aad20bcdc379e885  libstdc++-v3/testsuite/ext/pool_allocator/variadic_construct.cc
! 3c80ad4ef58be8f95479d8d60e161810  libstdc++-v3/testsuite/ext/random/arcsine_distribution/cons/default.cc
! 5bd29ee2acd58c86af0de2d1672e350e  libstdc++-v3/testsuite/ext/random/arcsine_distribution/cons/parms.cc
! e8eb191f69633b106d43e289edd30d31  libstdc++-v3/testsuite/ext/random/arcsine_distribution/operators/equal.cc
! 7a1e67ccdd4799a4d7120d78ae86fd0d  libstdc++-v3/testsuite/ext/random/arcsine_distribution/operators/inequal.cc
! 8c21a8157ae441adca37caaf2f9d4efc  libstdc++-v3/testsuite/ext/random/arcsine_distribution/operators/serialize.cc
! dd71bb94d15f6619699493a4474ec9e0  libstdc++-v3/testsuite/ext/random/arcsine_distribution/requirements/explicit_instantiation/1.cc
! 0593b8e14e2bd0f6328ef2bc5f558208  libstdc++-v3/testsuite/ext/random/arcsine_distribution/requirements/typedefs.cc
! bf5642fc594d390f677778e4a34438fd  libstdc++-v3/testsuite/ext/random/beta_distribution/cons/default.cc
! 0462653956909833b0ca538423b3d096  libstdc++-v3/testsuite/ext/random/beta_distribution/cons/parms.cc
! 20e839f875a9a10618d2d93ddff5ce0c  libstdc++-v3/testsuite/ext/random/beta_distribution/operators/equal.cc
! 0e89a8eee4072b55547a9ffb9e4331e2  libstdc++-v3/testsuite/ext/random/beta_distribution/operators/inequal.cc
! 66e70c5934cac8464d8b84ee31737b1c  libstdc++-v3/testsuite/ext/random/beta_distribution/operators/serialize.cc
! a73298cf3f1b2df542ceb30601bde608  libstdc++-v3/testsuite/ext/random/beta_distribution/requirements/explicit_instantiation/1.cc
! c6ff1af969747dd24b0300a26ae4a055  libstdc++-v3/testsuite/ext/random/beta_distribution/requirements/typedefs.cc
! 42064ef8e8bedfd90812db315a9199b3  libstdc++-v3/testsuite/ext/random/hoyt_distribution/cons/default.cc
! 529c7fed7ad0763d8ef6ac106a45ee42  libstdc++-v3/testsuite/ext/random/hoyt_distribution/cons/parms.cc
! 6b088cea1dcc8b8743dc274c4dcb2188  libstdc++-v3/testsuite/ext/random/hoyt_distribution/operators/equal.cc
! 1fe0188146941137193a2942deba3c0e  libstdc++-v3/testsuite/ext/random/hoyt_distribution/operators/inequal.cc
! ab221832c2ce1d40e580911e1e5b8c8e  libstdc++-v3/testsuite/ext/random/hoyt_distribution/operators/serialize.cc
! 8f8243301dd0b438045164d087d43ca3  libstdc++-v3/testsuite/ext/random/hoyt_distribution/requirements/explicit_instantiation/1.cc
! a63c13ac15ce98b5125c5c22eaa56e3e  libstdc++-v3/testsuite/ext/random/hoyt_distribution/requirements/typedefs.cc
! 6a236b9dea6a4b36eae2ceb08d0e10c8  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/cons/default.cc
! a7c05f9c0c70b615faffeaa49aee27e0  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/cons/parms.cc
! 2f804462041be85078675c84c0f9d935  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/operators/equal.cc
! e48d482bfddd892aeb048ee00f83b7d5  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/operators/inequal.cc
! cc8f054bb44023b5e8d6d660c2e8479c  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/operators/serialize.cc
! 551eff5a74acd05b7c9e820d4b9fb8c8  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/operators/values.cc
  5310d63384a16aab3ca0056f2cb3b3dc  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/pr60037.cc
! 64dfcfdeea7364979fcaad48a14f306a  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/requirements/explicit_instantiation/1.cc
! fd3c13b47f96985f16cb856cb8a0af6c  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/requirements/typedefs.cc
! fc3350baf87d63241ab4212d5160a80c  libstdc++-v3/testsuite/ext/random/k_distribution/cons/default.cc
! 3cea5ad2813b42d316f0f3bb93fbd3b6  libstdc++-v3/testsuite/ext/random/k_distribution/cons/parms.cc
! 6d487575a06897ab8a9bd980e64e4766  libstdc++-v3/testsuite/ext/random/k_distribution/operators/equal.cc
! 4086c502c4e05cc57edc27d17eb14fc0  libstdc++-v3/testsuite/ext/random/k_distribution/operators/inequal.cc
! 3f8b2720a76970b77f6c49216b894d2a  libstdc++-v3/testsuite/ext/random/k_distribution/operators/serialize.cc
! 916a5459159a465aa74af1982e53612a  libstdc++-v3/testsuite/ext/random/k_distribution/requirements/explicit_instantiation/1.cc
! a4e5aa4f5dfefe17bd69472c416ef58e  libstdc++-v3/testsuite/ext/random/k_distribution/requirements/typedefs.cc
! cf25129a971cbc7e680f26ba2f68ae32  libstdc++-v3/testsuite/ext/random/logistic_distribution/cons/default.cc
! eb71ce72eb68041910ea193a6cdffcbf  libstdc++-v3/testsuite/ext/random/logistic_distribution/cons/parms.cc
! b8cbe9e3c71e7132aa3a9629b0ad84a8  libstdc++-v3/testsuite/ext/random/logistic_distribution/operators/equal.cc
! 818cc92bd562aae0487a5f837b015410  libstdc++-v3/testsuite/ext/random/logistic_distribution/operators/inequal.cc
! 60886f2fbb0226c64ea79195eeb019da  libstdc++-v3/testsuite/ext/random/logistic_distribution/operators/serialize.cc
! 2cb382bd15ce1f06a900e1f26bf526b4  libstdc++-v3/testsuite/ext/random/logistic_distribution/requirements/typedefs.cc
! 5fcebf7c1263794bde716e14c992ebb5  libstdc++-v3/testsuite/ext/random/nakagami_distribution/cons/default.cc
! 69e60f5333354a2aa73075ee532052e5  libstdc++-v3/testsuite/ext/random/nakagami_distribution/cons/parms.cc
! 8ffb263b7f97835c1135a8fe70127f8e  libstdc++-v3/testsuite/ext/random/nakagami_distribution/operators/equal.cc
! 05fa913077c02f22415ff0836f8898e7  libstdc++-v3/testsuite/ext/random/nakagami_distribution/operators/inequal.cc
! 8c358a60fa4902b688f79a45007c1cb5  libstdc++-v3/testsuite/ext/random/nakagami_distribution/operators/serialize.cc
! de7065831e600028b5196c776a882656  libstdc++-v3/testsuite/ext/random/nakagami_distribution/requirements/explicit_instantiation/1.cc
! 14275a8afbb51950b8a1fa0a1d38d9c0  libstdc++-v3/testsuite/ext/random/nakagami_distribution/requirements/typedefs.cc
! c9db9be41537ae09870788a8e9edc1c9  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/cons/default.cc
! ee27aa9499d3be9f8fc7a235b05b2637  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/cons/parms.cc
! 9612d7925ad8ca7735e2ede6dc15b4e4  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/operators/equal.cc
! c5c9c1ea6acb276889dd60686d6903c7  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/operators/inequal.cc
! 8746ebeaf324b8dd72084e0150d8525a  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/operators/serialize.cc
! a5800bff182cdba1d37d8e1526e783c5  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/requirements/explicit_instantiation/1.cc
! d30b83c79bb5f56bf1a6846110cd682a  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/requirements/typedefs.cc
! 033006ea3b727abbdb1880b541e1fd66  libstdc++-v3/testsuite/ext/random/pareto_distribution/cons/default.cc
! 7967b51a5611fc7c157a493b3543f3a9  libstdc++-v3/testsuite/ext/random/pareto_distribution/cons/parms.cc
! 551881b567ebf87ece2069013034e7dc  libstdc++-v3/testsuite/ext/random/pareto_distribution/operators/equal.cc
! e0fcaea446adf561eb124c6cb6cc6f32  libstdc++-v3/testsuite/ext/random/pareto_distribution/operators/inequal.cc
! 788b5e378069f587e612e7a389a17230  libstdc++-v3/testsuite/ext/random/pareto_distribution/operators/serialize.cc
! cbfa29c22d8fef65cf4498e0ed35a93d  libstdc++-v3/testsuite/ext/random/pareto_distribution/requirements/explicit_instantiation/1.cc
! e7f4b1daf2949eaabd01dad0c65bbc17  libstdc++-v3/testsuite/ext/random/pareto_distribution/requirements/typedefs.cc
! 186803d8f8f5a19fe01c81aa358615e7  libstdc++-v3/testsuite/ext/random/rice_distribution/cons/default.cc
! 423489e872aa65340958a895e898b3c2  libstdc++-v3/testsuite/ext/random/rice_distribution/cons/parms.cc
! 599815eaab3bdf34948dcaf424993fab  libstdc++-v3/testsuite/ext/random/rice_distribution/operators/equal.cc
! c3e60e55dd5a08f6fad1dc47e7020318  libstdc++-v3/testsuite/ext/random/rice_distribution/operators/inequal.cc
! 63effb99622340fadef14fd7bb9500c1  libstdc++-v3/testsuite/ext/random/rice_distribution/operators/serialize.cc
! c139164abba796d298f61056b447cc84  libstdc++-v3/testsuite/ext/random/rice_distribution/requirements/explicit_instantiation/1.cc
! eae60b678ae0111c668f7ccae0fca808  libstdc++-v3/testsuite/ext/random/rice_distribution/requirements/typedefs.cc
! a634bc785e9a07ce139e0afec8c797d2  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/copy.cc
! 5693630abac45ed90ac2121236157547  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/default.cc
! 0597a80cb5af15b6f71ef26ac73573d3  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/seed1.cc
! d8718d1a2fcfb021ce180f3bf7465f88  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/seed2.cc
! 10c4c325c70d9b6af72190d4ee2564db  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/seed_seq.cc
! a5e63ae2ca7a5e89cc861252eda31fb8  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/seed_seq2.cc
! e0390d27a5978bd64f36d32bbb28911b  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/operators/equal.cc
! e7b2d81e7bef10cae2527ec1a70d4da3  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/operators/inequal.cc
! c4ab5e3750699208e0124fdae6143011  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/operators/serialize.cc
! 6a85995ba3011fe9e512a30b1d6ca26c  libstdc++-v3/testsuite/ext/random/triangular_distribution/cons/default.cc
! f69ac545f5e8b8e4f8424296292e0dc8  libstdc++-v3/testsuite/ext/random/triangular_distribution/cons/parms.cc
! 5c300d7c392d1e1296639da686e40924  libstdc++-v3/testsuite/ext/random/triangular_distribution/operators/equal.cc
! 72ec7ef56d7178bece37f11f2708ab71  libstdc++-v3/testsuite/ext/random/triangular_distribution/operators/inequal.cc
! 9d8040414d91f4f35ea13d08e43be129  libstdc++-v3/testsuite/ext/random/triangular_distribution/operators/serialize.cc
! a82a8909b1ab88e85b10d05c88dfca40  libstdc++-v3/testsuite/ext/random/triangular_distribution/requirements/explicit_instantiation/1.cc
! 005c20ac3230932e326a901e36848f45  libstdc++-v3/testsuite/ext/random/triangular_distribution/requirements/typedefs.cc
! 6b5b50e8d12956b49e8a8e783886b9fa  libstdc++-v3/testsuite/ext/random/uniform_inside_sphere_distribution/cons/default.cc
! add5aeba2f669b61de6e89d4889e6282  libstdc++-v3/testsuite/ext/random/uniform_inside_sphere_distribution/cons/parms.cc
! 0fdf8fd16f7abb001e85e7350b6910aa  libstdc++-v3/testsuite/ext/random/uniform_inside_sphere_distribution/operators/equal.cc
! ff2d060a9818f239cd5acbd442a507ba  libstdc++-v3/testsuite/ext/random/uniform_inside_sphere_distribution/operators/generate.cc
! aa744e45608e68227e57245f660ccf74  libstdc++-v3/testsuite/ext/random/uniform_inside_sphere_distribution/operators/inequal.cc
! 9df7ca949c5f4daebec2a4e187f2119d  libstdc++-v3/testsuite/ext/random/uniform_inside_sphere_distribution/operators/serialize.cc
! 08d61ceb37200d4fba5b8eac59bceba4  libstdc++-v3/testsuite/ext/random/uniform_on_sphere_distribution/cons/default.cc
! 80a3f1ae6116bb71f879916e26732c25  libstdc++-v3/testsuite/ext/random/uniform_on_sphere_distribution/operators/equal.cc
! c8cb99c18f1e95723445cd5375d0d819  libstdc++-v3/testsuite/ext/random/uniform_on_sphere_distribution/operators/generate.cc
! 4a27fad27f25d7b30a7af40c66fb488f  libstdc++-v3/testsuite/ext/random/uniform_on_sphere_distribution/operators/inequal.cc
! 68c5d29a514138795518204a00265dc4  libstdc++-v3/testsuite/ext/random/uniform_on_sphere_distribution/operators/serialize.cc
! 3103767e3c063d7d4f102b4f91560bd1  libstdc++-v3/testsuite/ext/random/von_mises_distribution/cons/default.cc
! b44c182a080d94c5bb7dff22e867df79  libstdc++-v3/testsuite/ext/random/von_mises_distribution/cons/parms.cc
! 63ac19e1b6da6459aac5aa80780ac5ab  libstdc++-v3/testsuite/ext/random/von_mises_distribution/operators/equal.cc
! 37fa32b26929d2bce297cb6ee227993c  libstdc++-v3/testsuite/ext/random/von_mises_distribution/operators/inequal.cc
! 528c0d0b2248c5daf9a456c2832fc799  libstdc++-v3/testsuite/ext/random/von_mises_distribution/operators/serialize.cc
! d010e51f7aab1cef56a343cdd7479024  libstdc++-v3/testsuite/ext/random/von_mises_distribution/requirements/explicit_instantiation/1.cc
! ef141363fac929705f7c1a1a94d4a3c6  libstdc++-v3/testsuite/ext/random/von_mises_distribution/requirements/typedefs.cc
! 34ce5f1b5e63e7b524f59c197ec7cc8b  libstdc++-v3/testsuite/ext/rope/1.cc
! 44aaa4eab00581339f018e25f618f1f8  libstdc++-v3/testsuite/ext/rope/2.cc
! 94d16e916ea0632b499b42a28207f8d0  libstdc++-v3/testsuite/ext/rope/3.cc
! 8a33a6b5d64f5513e2db31319d7bc7a0  libstdc++-v3/testsuite/ext/rope/36832.cc
! 000b71133a0780a0853a3c4f2da4595e  libstdc++-v3/testsuite/ext/rope/4.cc
! c393632c4f69d969fe8c5f293c44ded1  libstdc++-v3/testsuite/ext/rope/40299.cc
! 1b2489f0436fc1f6993b833d43c5952e  libstdc++-v3/testsuite/ext/rope/44708.cc
! d058f63a57471b1bac13c7472d829dfb  libstdc++-v3/testsuite/ext/rope/44963.cc
! 109d47bfcac37d824479652cebff73cd  libstdc++-v3/testsuite/ext/rope/5.cc
! efab101dad1dc6fc3744ad9169ad0d87  libstdc++-v3/testsuite/ext/rope/6.cc
! 542a3aa925925ee8b4f95674533b93d7  libstdc++-v3/testsuite/ext/rope/61946.cc
! a90a14bfbb1a36e332973061db685f1b  libstdc++-v3/testsuite/ext/rope/7.cc
! 0f434048b4adfa472afa6584c50d9d32  libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc
! 96c8b73b78b6f9b0e8b6a4f3e7861ac4  libstdc++-v3/testsuite/ext/shared_ptr/1.cc
! 854c4ad33c0c5b4ab1bd2daf3d63eb21  libstdc++-v3/testsuite/ext/slist/23781_neg.cc
! d08fb1c934171313d8d5caa0a16f501b  libstdc++-v3/testsuite/ext/slist/check_construct_destroy.cc
! d9e84f4e1f95caf436c3d1231b6d2721  libstdc++-v3/testsuite/ext/slist/requirements/explicit_instantiation.cc
! 2ccc0b67bb5bee754f2016c0267857f3  libstdc++-v3/testsuite/ext/special_functions/airy_ai/check_nan.cc
! b8713b22ee8f62f3cfc27df9e1f5c781  libstdc++-v3/testsuite/ext/special_functions/airy_ai/check_value.cc
! 0b5a578acec5e21b24a31d972db2527d  libstdc++-v3/testsuite/ext/special_functions/airy_ai/compile.cc
! 7b5077d7b5c01b07efa6cac7e92e109a  libstdc++-v3/testsuite/ext/special_functions/airy_bi/check_nan.cc
! e69b26b2f1415d5e1a19a5c7f612a8af  libstdc++-v3/testsuite/ext/special_functions/airy_bi/check_value.cc
! c21a8c80cda5ba826e12d82e60f284ee  libstdc++-v3/testsuite/ext/special_functions/airy_bi/compile.cc
! 6d6a9dc37a23adaadbb99acb6136ca37  libstdc++-v3/testsuite/ext/special_functions/conf_hyperg/check_nan.cc
! deab37f4343f58e8f1ae1efd98bcb82e  libstdc++-v3/testsuite/ext/special_functions/conf_hyperg/check_value.cc
! 00a837cab213432b9816d94d5c1e343e  libstdc++-v3/testsuite/ext/special_functions/conf_hyperg/compile.cc
! 88d0997713a5bba46d9185ded38abf5f  libstdc++-v3/testsuite/ext/special_functions/hyperg/check_nan.cc
! ba50db8e24aa47889f23679f4dab5cd7  libstdc++-v3/testsuite/ext/special_functions/hyperg/check_value.cc
! 16f11988fe94237eca3f3c62a12decf7  libstdc++-v3/testsuite/ext/special_functions/hyperg/compile.cc
! 987111abc34bee6dbbb2f6b33c112472  libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc
! 8fb939ee3d70824f3503dcc595c21a2b  libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc
! 902f5dc2d576d804f8dc6c127c458db4  libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-3.cc
! c6b4944d77abcf9947f290c402785318  libstdc++-v3/testsuite/ext/stdio_filebuf/char/2.cc
! e21657dbec8c301a9ed2c9c68dd77293  libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc
! 7fd8ac65c145a03148097bd2d3254be7  libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc
! 074bc405e8c8f1c8c08fccc4805c4dd0  libstdc++-v3/testsuite/ext/stdio_filebuf/requirements/explicit_instantiation.cc
! 42d51016a3a09895ca26c244d6d30c48  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc
! 7ae307db2b2d8739770b6c50f0e76eee  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-1.cc
! a21f6cfa47571a7a06e71d81ae6e23a0  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-2.cc
! 728c9f88049fdfd9f4c6b5feefa8ea01  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-3.cc
! 968bb0587ced55a1a2032aec709ef546  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-4.cc
! 238f8762406ad175b077e46c4ecaae35  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/35209.cc
! e9dd2326c2d725b88cd14824bb6a94ba  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc
! 5a5c54675cacd0bdad4bf3f0a002080c  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc
! 9a23b6666a37b69fa5932b77602a0589  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12948-1.cc
! 3958d437489cdb0ad520aaf0e1faef89  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12948-2.cc
! df8a04690c51cf63a8ff3a5cbbe5e066  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12948-3.cc
! e33986a38239883618ea696b278a1468  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12948-4.cc
! b64bcdde7cbc1912728399c41fa414ff  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/35209.cc
! ccbabcf3de80a105438a84d13d03518e  libstdc++-v3/testsuite/ext/throw_allocator/check_allocate_max_size.cc
! efc65da8a56c28febefae140f2f676b2  libstdc++-v3/testsuite/ext/throw_allocator/check_deallocate_null.cc
! 41b2c95af5412964fd7d44ddd480bae8  libstdc++-v3/testsuite/ext/throw_allocator/check_delete.cc
! 0660107df31c01ae385ac36a7bd122b8  libstdc++-v3/testsuite/ext/throw_allocator/check_new.cc
! 3628b93e8c1682881f5eca98c15a28f0  libstdc++-v3/testsuite/ext/throw_allocator/deallocate_global.cc
! 26b95ef8112bd57198d748f256cd76c8  libstdc++-v3/testsuite/ext/throw_allocator/deallocate_local.cc
! 2a7114808344ac3d6aded822c947106f  libstdc++-v3/testsuite/ext/throw_allocator/explicit_instantiation.cc
! 5158bf52024989cc689bb16d9392cd72  libstdc++-v3/testsuite/ext/throw_allocator/variadic_construct.cc
! 577742ed34aa26c3ace62746cab53a79  libstdc++-v3/testsuite/ext/throw_value/cons.cc
! 3eaaaca8f8322e269200076c1eaeae4d  libstdc++-v3/testsuite/ext/type_traits/add_unsigned.cc
! 7c29e61aecd925f5db62e19743d88d24  libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc
! b93406faf2d3e24d4045d0995a38e5bc  libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
! f985470869483266d549ebcd81adb7f3  libstdc++-v3/testsuite/ext/type_traits/remove_unsigned.cc
! b613ba10063fe26ff9907072274ec30c  libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
! 16b523b740717a3c4856c70b9bca5eff  libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
! 64f55bfe0aa41b7edbf7878a468ebb96  libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc
! 80d45bd96be8002977bcc78d84ef7a13  libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc
! 1f16ac5aa704d76c1bfcee8e13f1407b  libstdc++-v3/testsuite/ext/vstring/cons/58415-1.cc
! 4566bd2b388420b17715676371edab3b  libstdc++-v3/testsuite/ext/vstring/cons/58415-2.cc
! acec4385349ce6d44e830466ae496f9f  libstdc++-v3/testsuite/ext/vstring/cons/moveable.cc
! 7e244794848aa7c4227bf28e235c9c2d  libstdc++-v3/testsuite/ext/vstring/cons/noexcept_move_construct.cc
! efdd01e9bb4af8b0edb75b9e8d820fac  libstdc++-v3/testsuite/ext/vstring/element_access/char/58163.cc
! e5b86701c3df316786f76d1c4df8bf05  libstdc++-v3/testsuite/ext/vstring/element_access/char/front_back.cc
! 4160e56b67cdd4370417a7a128d8de23  libstdc++-v3/testsuite/ext/vstring/element_access/wchar_t/58163.cc
! 3c1a0a0d508dad459de960618946a07c  libstdc++-v3/testsuite/ext/vstring/element_access/wchar_t/front_back.cc
! 084f8442f9fcc8e0177c3c23cb3fd7dc  libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc
! 6b15b5312bb2185f075a5f1097e776c0  libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc
! ac124b4f5d426c6c6a3ba1d7bb3547f6  libstdc++-v3/testsuite/ext/vstring/init-list.cc
! f1f07cf78ed1e6deb36269b121400cda  libstdc++-v3/testsuite/ext/vstring/inserters_extractors/char/28277.cc
! 3703d5a718160ca7935ea1f0f1712036  libstdc++-v3/testsuite/ext/vstring/inserters_extractors/wchar_t/28277.cc
! f44f2812f273caa9a7bbf47d85aa31ba  libstdc++-v3/testsuite/ext/vstring/modifiers/assign/move_assign.cc
! 8ca610e993285c3edf3e30483267e6e0  libstdc++-v3/testsuite/ext/vstring/modifiers/clear/56166.cc
! 2e60844b06af4f8f07a73e3cadc287d1  libstdc++-v3/testsuite/ext/vstring/modifiers/erase/char/54577.cc
! 884d6a82b5cdecb94485f1f152732791  libstdc++-v3/testsuite/ext/vstring/modifiers/erase/wchar_t/54577.cc
! 621affbea5410dc6dadd93fa3245d4e8  libstdc++-v3/testsuite/ext/vstring/modifiers/insert/char/const_iterator.cc
! 7ec7cdbb74ce949781be9fc91a67073c  libstdc++-v3/testsuite/ext/vstring/modifiers/insert/wchar_t/const_iterator.cc
! c565379f1a3d2701749cee1cc0655041  libstdc++-v3/testsuite/ext/vstring/modifiers/pop_back/char/1.cc
! 73eb2234479a15da6fba75cd52c7fcdc  libstdc++-v3/testsuite/ext/vstring/modifiers/pop_back/wchar_t/1.cc
! 691e4ab545095d1f497d484749d0b8e7  libstdc++-v3/testsuite/ext/vstring/modifiers/replace/char/const_iterator.cc
! 24310a4ab2b2300ca243a1581d056aae  libstdc++-v3/testsuite/ext/vstring/modifiers/replace/wchar_t/const_iterator.cc
! 51217bb0d14f360078d1d96b2eabcc48  libstdc++-v3/testsuite/ext/vstring/operators/1.cc
! 227f87f8b0324605a80c67ad590df0f1  libstdc++-v3/testsuite/ext/vstring/operators/2.cc
! 5c702d48e5474cc4549ec1e6f9e53709  libstdc++-v3/testsuite/ext/vstring/range_access.cc
! 43cd4a1bf8ec89db906efdcf96507cbe  libstdc++-v3/testsuite/ext/vstring/requirements/citerators.cc
! b94e75968d609b00f03815979e651d27  libstdc++-v3/testsuite/ext/vstring/requirements/do_the_right_thing.cc
! d07229e5c6e53230bcf9e5cee7b1e9f0  libstdc++-v3/testsuite/ext/vstring/requirements/dr438/constructor.cc
! 0aed4ee7d0c49219d278cdd9b0cb4804  libstdc++-v3/testsuite/ext/vstring/requirements/exception/basic.cc
! 860a2e1ed657df7b405b9f37350b3482  libstdc++-v3/testsuite/ext/vstring/requirements/exception/generation_prohibited.cc
! 19c439b35f589677ad2f3c625cefde81  libstdc++-v3/testsuite/ext/vstring/requirements/exception/propagation_consistent.cc
! 49543ec15eb8e3fd3521fa338b24fa6a  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/1.cc
! ffd4d328ed3db14dab111a3eddab2930  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/2.cc
! 0944c7597859c8e4c0469665d9be9225  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char/1.cc
! 83585afb4d8a3fdef4f59527e0d6e1ac  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/1.cc
! 0999a57bef4c7b1a2ca128fc11ab31c8  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/1.cc
! f94bea1910070856d4cae7efca4beca3  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/wchar_t/1.cc
! 1888ed86914a7f7d2120635c05a1203c  libstdc++-v3/testsuite/ext/vstring/requirements/typedefs.cc
! b32547780ab0170daaf7ba32e51255b3  libstdc++-v3/testsuite/ext/vstring/types/23767.cc
! 6075d499921cafc9adbb1ee50a9ae4c9  libstdc++-v3/testsuite/lib/dg-options.exp
! 9d3360da3142060294f47a364bf5975b  libstdc++-v3/testsuite/lib/gdb-test.exp
! f9fcbd8dec04b924fd4e917ed3e5bc10  libstdc++-v3/testsuite/lib/libstdc++.exp
! d0c11fe8cb799b7e38c3d765c7786345  libstdc++-v3/testsuite/lib/prune.exp
! 6554148313affda6d0d8314d097b450d  libstdc++-v3/testsuite/libstdc++-abi/abi.exp
! 33cb7d617aef9ee6c04c69c0e91f20b6  libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
! 17358114f0793d43ab875182de659dde  libstdc++-v3/testsuite/libstdc++-prettyprinters/48362.cc
! 7a020d565ba8c8ed2f851550aef0e2b1  libstdc++-v3/testsuite/libstdc++-prettyprinters/59161.cc
! be2c942175f821c48748bb874e440b9b  libstdc++-v3/testsuite/libstdc++-prettyprinters/80276.cc
! 61687718a5859d72e3d508a3cff4951a  libstdc++-v3/testsuite/libstdc++-prettyprinters/91997.cc
! 3681a82bbc6871b4ee9416dc9f079e9c  libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc
! ebf226930e3a3280ab96a29d5aadbc4c  libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc
! 575c04012b89f3517818052495fa754b  libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc
! de4863975b6ff3936ee27e239a50c3fc  libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx20.cc
! 9db277893db6463f4a286e2e86d3ba23  libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc
! 6ee25bfa5657675a8107bc8df6359203  libstdc++-v3/testsuite/libstdc++-prettyprinters/debug_cxx11.cc
! 89bc588d761a075ad9da5943c19c1174  libstdc++-v3/testsuite/libstdc++-prettyprinters/filesystem-ts.cc
! 97daf640538dd54fb61e3414f8a90dd8  libstdc++-v3/testsuite/libstdc++-prettyprinters/libfundts.cc
! 9bdb95d75bf15d57c1f532c34c42a5c6  libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp
! 84dbf4276cdf8e8dc2259fc95a5804ba  libstdc++-v3/testsuite/libstdc++-prettyprinters/shared_ptr.cc
! 238d0804701db3c28b36b38d9dff3216  libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc
! 11daf7ce9653feb94cecf558504924f4  libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc
! 5fdc102918309dda0f2f514ff52850e1  libstdc++-v3/testsuite/libstdc++-prettyprinters/tr1.cc
! 4c9640c7acfd2400222f26a953489714  libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis.cc
! cc762851bcdba119feec0f3235e4468c  libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis2.cc
! 981266ed691c1072655ca68488588724  libstdc++-v3/testsuite/libstdc++-xmethods/array.cc
! 9b015a334512eb7b9cd10b23704d2064  libstdc++-v3/testsuite/libstdc++-xmethods/associative-containers.cc
! 2f1ee0a52144900994e38822ec0e06b5  libstdc++-v3/testsuite/libstdc++-xmethods/deque.cc
! 5727258a9a678c86a4dbb0202c47f702  libstdc++-v3/testsuite/libstdc++-xmethods/forwardlist.cc
! 00c6eeeddd7a873ee1bda17c477bcf4e  libstdc++-v3/testsuite/libstdc++-xmethods/list.cc
! 7783f7544a07c1bd618c4ea0a6defb19  libstdc++-v3/testsuite/libstdc++-xmethods/shared_ptr.cc
! 26407ff2a7db6873b71a3eb2107b6a56  libstdc++-v3/testsuite/libstdc++-xmethods/unique_ptr.cc
! 4e56f23a14a974605e4004e744b706d0  libstdc++-v3/testsuite/libstdc++-xmethods/vector.cc
! 98dc8dabc6d5bbb2cb89d6ed0664a043  libstdc++-v3/testsuite/libstdc++-xmethods/xmethods.exp
  af003639dee7c3edb68531616f1c3b8c  libstdc++-v3/testsuite/performance/20_util/memory_resource/pools.cc
! a3015c2fedfe5c0d21fe2e964c44df3a  libstdc++-v3/testsuite/performance/21_strings/append-1.cc
! 413645b123c9fb9ea29c99a307ce73b8  libstdc++-v3/testsuite/performance/21_strings/append-2.cc
! c7911c5fd49962fc6afe82248126a662  libstdc++-v3/testsuite/performance/21_strings/cons_input_iterator.cc
! b105ec8793fcc2922dc7ff765d7deb44  libstdc++-v3/testsuite/performance/21_strings/copy_cons_and_dest.cc
! ca89de509a18778419b9b8e5dbf1ae04  libstdc++-v3/testsuite/performance/21_strings/find.cc
  efa1608e1841a10bba94a6d4de361846  libstdc++-v3/testsuite/performance/21_strings/hash.cc
! 08a38be1f6a01f7ed2b13475256b3eb5  libstdc++-v3/testsuite/performance/22_locale/is_wchar_t.cc
! c2c2adfe56d8ea54ec7a15a2889e4adb  libstdc++-v3/testsuite/performance/22_locale/narrow_widen_char.cc
! 9f7d37e9743faa762cda18871022b05b  libstdc++-v3/testsuite/performance/22_locale/narrow_widen_wchar_t.cc
! 70471ed5198b08d9d027addbd830a1fd  libstdc++-v3/testsuite/performance/22_locale/wchar_t_in.cc
! e9e646c7f7f63b0a6fb671211d24d15b  libstdc++-v3/testsuite/performance/22_locale/wchar_t_length.cc
! 12a13155b0453b641f037b35d597f689  libstdc++-v3/testsuite/performance/22_locale/wchar_t_out.cc
! 69abbcdb5791ca310336552f0b2a7781  libstdc++-v3/testsuite/performance/23_containers/copy_construct/unordered_set.cc
! 8a5dd7f9229a845f821192aa81d69259  libstdc++-v3/testsuite/performance/23_containers/copy_construct/vector_bool.cc
! 3fc018c9392875e443da1e6bfb010cd1  libstdc++-v3/testsuite/performance/23_containers/create/map.cc
! e72277a99ed9ac77ed236acb5b8fe462  libstdc++-v3/testsuite/performance/23_containers/create_from_sorted/set.cc
! d40ef4e36601bba4a650d83152fa609b  libstdc++-v3/testsuite/performance/23_containers/create_sort/list.cc
! 1da4427535c280f9b400ca63608277cc  libstdc++-v3/testsuite/performance/23_containers/find/map.cc
! 269080f38f962553a16caf99893ad9ce  libstdc++-v3/testsuite/performance/23_containers/index/map.cc
! dfdd80c06d0a63dc58b866a8ec74c131  libstdc++-v3/testsuite/performance/23_containers/insert/54075.cc
! aea4d0338ac79855461c9df4e62c17cb  libstdc++-v3/testsuite/performance/23_containers/insert/81476.cc
! 45f96b0ff100067fe44e74ce2a97120b  libstdc++-v3/testsuite/performance/23_containers/insert/associative.cc
! 184f4e704095181a56171480411386a1  libstdc++-v3/testsuite/performance/23_containers/insert/sequence.cc
! 1433af3ac9ce1f5f2a7429f14ab83b8a  libstdc++-v3/testsuite/performance/23_containers/insert/unordered_map_array.cc
! df5f68754c32eeeee6501998587794f5  libstdc++-v3/testsuite/performance/23_containers/insert/unordered_multiset_hint.cc
! dfb8f9f657f7e8459349d398c7244802  libstdc++-v3/testsuite/performance/23_containers/insert/unordered_set.cc
! e1370bf0fa76d0c64a018ae695ac6b75  libstdc++-v3/testsuite/performance/23_containers/insert_erase/41975.cc
! a883a33861fa29a638808ae637e8f6f5  libstdc++-v3/testsuite/performance/23_containers/insert_erase/associative.cc
! a0f59c19103cca6a3b927be0ccf59820  libstdc++-v3/testsuite/performance/23_containers/insert_from_sorted/set.cc
! 70f5c084a15380e8b5219a64329e2bcc  libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc
! c101b004e7a9bca0e236dff5db99f0d2  libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc
! 2312954e9603359dccc179b662cafbe4  libstdc++-v3/testsuite/performance/23_containers/range_construct/deque_construct.cc
! f9b91693ca67cb945958004a93eb6dc3  libstdc++-v3/testsuite/performance/23_containers/range_construct/list_construct1.cc
! 6e997f821f7ed3012715d1d3126e9f10  libstdc++-v3/testsuite/performance/23_containers/range_construct/list_construct2.cc
! 23e88d3ce58e41412b96d5ad669a7b9f  libstdc++-v3/testsuite/performance/23_containers/range_construct/vector_construct.cc
! 66912a41fed5fb6acbf19cea13910cd0  libstdc++-v3/testsuite/performance/23_containers/resize/vector_bool.cc
! 74767342e8dfbe632544af7fe61feb4b  libstdc++-v3/testsuite/performance/23_containers/sort_search/list.cc
  9d1d6439b2e93ebc48779237c0969b25  libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc
  ab09b2da7335847dccf2fd63d8b8fd89  libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc
! 2a689c0558d9f0fb7caf236380ac86e5  libstdc++-v3/testsuite/performance/25_algorithms/copy_streambuf_iterators.cc
! 8d01b41354fe6478d746361f62685614  libstdc++-v3/testsuite/performance/25_algorithms/equal_deque_iterators.cc
! 73ab7cef0d2a3ecbd129da244b9cacd8  libstdc++-v3/testsuite/performance/25_algorithms/find_istreambuf_iterators.cc
! 45fcd99f82ae5aae15a5a23f65202a7b  libstdc++-v3/testsuite/performance/25_algorithms/inplace_merge.cc
! 3366ec5d08577945f60118bfe24db5c3  libstdc++-v3/testsuite/performance/25_algorithms/lexicographical_compare.cc
! 710f466d012ed4486db7573884e82502  libstdc++-v3/testsuite/performance/25_algorithms/nth_element_worst_case.cc
! 731c5f925c4a650da148f103c34bc3b5  libstdc++-v3/testsuite/performance/25_algorithms/search_n.cc
! a80e6c847aa3a616c8d4f4477e958618  libstdc++-v3/testsuite/performance/25_algorithms/sort.cc
! a3a8cd36fd149d701891954268950801  libstdc++-v3/testsuite/performance/25_algorithms/sort_heap.cc
! 8d1cf2183ec014bea842f15ad89f0822  libstdc++-v3/testsuite/performance/25_algorithms/stable_sort.cc
! 0abfceed783f6a4f128aadd785a16b0f  libstdc++-v3/testsuite/performance/26_numerics/complex_norm.cc
! 5fa04af34a8b93a3c4e4891d88b947c6  libstdc++-v3/testsuite/performance/26_numerics/random_dist.cc
! a742efc2a1843ba744bad8b4ac429dd1  libstdc++-v3/testsuite/performance/26_numerics/valarray_gslice_to_index.cc
! b9d582e24f279be2160e4d962a817e5a  libstdc++-v3/testsuite/performance/27_io/cout_insert_int.cc
! 4712508b0486d698cacbb026e41a2026  libstdc++-v3/testsuite/performance/27_io/filebuf_copy.cc
! c0b3993a2893662986034203df0a57c2  libstdc++-v3/testsuite/performance/27_io/filebuf_sgetn_unbuf.cc
! a7e81b92d5838d2bad5bd18977db091c  libstdc++-v3/testsuite/performance/27_io/filebuf_sputc.cc
! 3b207581b5bc15c8028d521ffcc2ba8c  libstdc++-v3/testsuite/performance/27_io/filebuf_sputn_unbuf.cc
! 21aa465b10796da2c47452008c7a3c7f  libstdc++-v3/testsuite/performance/27_io/fmtflags_manipulators.cc
! 9ef9dd3a502d6019553f113e219fd7e9  libstdc++-v3/testsuite/performance/27_io/fstream_seek_write.cc
! 051a5d97cd720f6b96e849813d396eff  libstdc++-v3/testsuite/performance/27_io/ifstream_extract_chars.cc
! 622495f9da0efdc60877aaa7c6414012  libstdc++-v3/testsuite/performance/27_io/ifstream_extract_float.cc
! 82894dce8b756ffaf116ef311d5a671c  libstdc++-v3/testsuite/performance/27_io/ifstream_extract_int.cc
! d0fa460448cf849062b4e12322e0b7b1  libstdc++-v3/testsuite/performance/27_io/ifstream_getline-2.cc
! 694a7e6aaa6a9d01fe2c884c21fd1a00  libstdc++-v3/testsuite/performance/27_io/ifstream_getline.cc
! 015a27bb76744101e623763de55d1fc0  libstdc++-v3/testsuite/performance/27_io/ofstream_insert_float.cc
! 468e9972ab1943ed688fd9c2a701563d  libstdc++-v3/testsuite/performance/27_io/ofstream_insert_int.cc
! abcfa2d56496c7b0675a6aad58db784b  libstdc++-v3/testsuite/performance/27_io/stringbuf_overflow.cc
! 478a9509a9dcf15e5dbab7438519cdba  libstdc++-v3/testsuite/performance/28_regex/range.cc
! 5c0025725f46db325086f0ff777c5c37  libstdc++-v3/testsuite/performance/28_regex/split.cc
! f9828291df7ccf521a14021e8e79742d  libstdc++-v3/testsuite/performance/28_regex/split.h
! f16665237e786f74ee26cc78612dd599  libstdc++-v3/testsuite/performance/28_regex/split_bfs.cc
! 4d2503c7d6bac468e193718904bb8bc1  libstdc++-v3/testsuite/performance/29_atomics/atomic_flag.cc
! f5c10182f558453574592cebe103f8e4  libstdc++-v3/testsuite/performance/30_threads/future/polling.cc
! 82579f1484cfe7361a40e3fba185c398  libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_find.cc
! 0492f116af2dadb43f56d405b1e1016a  libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_subscript_find.cc
! 33672096ab9f0bd375cf2c13829295d9  libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_subscript_insert.cc
! 9fa8069b721134a596bf7612ca154831  libstdc++-v3/testsuite/performance/ext/pb_ds/all_text_find.cc
! 3b586b1a131a67ce58b9f640b9c96609  libstdc++-v3/testsuite/performance/ext/pb_ds/hash_int_erase_mem.cc
! ca0caa09a4a6e14918f33097f291d068  libstdc++-v3/testsuite/performance/ext/pb_ds/hash_zlob_int_find.cc
! 076203b84cd4e7d17f6734a471d0135d  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find.hpp
! 63320c10f543666c84bf642e96e263e6  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_large.cc
! 5dbb06a3ddccdd6b0b7e64bb8c0cf67a  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_small.cc
! 3bc5b511d2f1aede3e0398247c510ac9  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert.hpp
! dece7627ed40f60eb3f77bb537137238  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_large.cc
! a2bd695b8e79699145576b597dbd3058  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem.hpp
! db48135b2f749afa166093695089820b  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_large.cc
! be10e96eed2bf4b37cc3e481b90da7db  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_small.cc
! dbf8dce19a78966ea7fc166ba8292b94  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_small.cc
! da48f56c36c4de83c2a6e3c83c541c71  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_int_push.cc
! 9f57eccae9d213a4fd2138271ac45749  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_int_push_pop.cc
! 7e4b181511561d45e46cb890dac4213f  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_join.cc
! 57b87079177d4ca583ef07a8d9dc5069  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify.hpp
! 2ebe3078d821eba1dd268988798a6586  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_down.cc
! 4cb088f361932c45b6aea07eae3a83a2  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_up.cc
! f90830c0a79b700c2ce1d5b1a3a62081  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem.cc
! 19dea0156a84a22a144a14b22cb13cd0  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push.cc
! 0b79e79d70a351f7be433d6d19783e8b  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_pop.cc
! 5748cf85056d39df98b0e4fc6e62cc2f  libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics.cc
! 62df851c556fdf0dc179581b822e362d  libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join.cc
! 4165c874077b0e8d95c1f335edfb53d0  libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_insert.cc
! cd7e1bbc2394e1a426cbdd2ce1be5571  libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_lor_find.cc
! f259817570c5d9e08019312efbc6a98a  libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/check_nan.cc
! ff539426c4992251ac0b33281463ab13  libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/check_value.cc
! 75e893f860323e4fd6a423ba37adfcea  libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/compile.cc
! edda30bc37f7d6e3b1b7fe5a7bbdb56e  libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/compile_2.cc
! 2b613ab046f48f865479d9a2e94dd4d1  libstdc++-v3/testsuite/special_functions/02_assoc_legendre/check_nan.cc
! ade317fb9891609b52ca5e784e2c39d4  libstdc++-v3/testsuite/special_functions/02_assoc_legendre/check_value.cc
! 703e2c5c8c9db5e8ecbc4a71836f0bee  libstdc++-v3/testsuite/special_functions/02_assoc_legendre/compile.cc
! 2fade8d5c26135999718e8a335eca5c3  libstdc++-v3/testsuite/special_functions/02_assoc_legendre/compile_2.cc
! 12f41103949b8200c23234da40a5abeb  libstdc++-v3/testsuite/special_functions/02_assoc_legendre/pr86655.cc
! ae2b5a661508a6a70d41e8ba9955f8fc  libstdc++-v3/testsuite/special_functions/03_beta/check_nan.cc
! 405d9f0b386bf3b8ae4ce166e2c510b4  libstdc++-v3/testsuite/special_functions/03_beta/check_value.cc
! 9fe652df995f443170c7f87365f5905f  libstdc++-v3/testsuite/special_functions/03_beta/compile.cc
! 52aff8f3d36cd8231decee87a2d88ab5  libstdc++-v3/testsuite/special_functions/03_beta/compile_2.cc
! c5811f120b2f656885d8b73b4aad411a  libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/check_nan.cc
! 9f46c25b7b46277eb37deacb7b0f2928  libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/check_value.cc
! 7356e6b3509a11db3651124852487001  libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/compile.cc
! 9c9b4be5c123de5b2827e35a1142b0db  libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/compile_2.cc
! 8443e879f1569a0d9b4c7d0b3315593a  libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/check_nan.cc
! 1ecf83948a1ca2ae4b4e3bfc2256cc12  libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/check_value.cc
! 491fcb59c3a729b0747cf2cc989b50f1  libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/compile.cc
! 13f8c5621c6f515436de06e510bdee8d  libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/compile_2.cc
! bac9e58ce3f7704653d5ad3828597a66  libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/check_nan.cc
! aa6193dddc5ef4950a4ff92f2bafd0d2  libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/check_value.cc
! c576868e74dd9810dda468524e577fba  libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/compile.cc
! 34e86986efb285b0c1fccf22db23d460  libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/compile_2.cc
  d40969d8e7a8973cde9b227f9ce95961  libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/pr66689.cc
! d347362cea1485a8837d1a0fa26e2507  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/check_nan.cc
! 4f372e5f01e646bbfabc481ec05167aa  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/check_value.cc
! 7dc5ff1f103c6dee93edb6622d10d07f  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/compile.cc
! 8927d07ad302b4d7dd4fb64ea56965bf  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/compile_2.cc
! 48d14394ec85f3e9d23a7535750cf1f7  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/pr56216.cc
! 9bc1bd88b63dfa3fc14987b438e38b52  libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_nan.cc
! 31db5a5318bfc18a5b2218a06526014c  libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_value.cc
! a175a9255920bb127e34f6c7b23978c9  libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/compile.cc
! b3021851e32624ee595f1e22911f919f  libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/compile_2.cc
! f0311348e1260dc09d4b688fcaf6d074  libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/check_nan.cc
! 0034dae9afa056a8f2779f5a25650e5a  libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/check_value.cc
! 12d97a5f1b0ed7b813c35e15b175a095  libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/compile.cc
! 14fcb1be1d438b6e078084dcaa496c70  libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/compile_2.cc
! ab47eb40fcd5774929cacba90e3e255d  libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_nan.cc
! 48bb6704561f368d3393ee04748cff42  libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_value.cc
! b18b7378d29d86f57a1d6828b2e9326d  libstdc++-v3/testsuite/special_functions/10_cyl_neumann/compile.cc
! 41e52d10d7f3e224f791c04bdac129eb  libstdc++-v3/testsuite/special_functions/10_cyl_neumann/compile_2.cc
! 13f02a98aa1fd5ff64df8b4ea10ecd80  libstdc++-v3/testsuite/special_functions/11_ellint_1/check_nan.cc
! b5746c9754f32c5237e95a0ceddb8688  libstdc++-v3/testsuite/special_functions/11_ellint_1/check_value.cc
! 9c550f621e9ac5c52949f064281831ec  libstdc++-v3/testsuite/special_functions/11_ellint_1/compile.cc
! c682809a56686e9c79b9858e69236e4c  libstdc++-v3/testsuite/special_functions/11_ellint_1/compile_2.cc
! 345668540617a19731d5692a394b9cec  libstdc++-v3/testsuite/special_functions/12_ellint_2/check_nan.cc
! 870cae888df5da1e15f41c02d43bc74a  libstdc++-v3/testsuite/special_functions/12_ellint_2/check_value.cc
! d12240acfc7e1bf4eb18ed73b52ce045  libstdc++-v3/testsuite/special_functions/12_ellint_2/compile.cc
! 519e124c31c1acceae89bfe5d02505b0  libstdc++-v3/testsuite/special_functions/12_ellint_2/compile_2.cc
! 23f9161af4655365ef0fdf8a974f36dc  libstdc++-v3/testsuite/special_functions/13_ellint_3/check_nan.cc
! a9ef0ce485705954ed1c1d2416d0b907  libstdc++-v3/testsuite/special_functions/13_ellint_3/check_value.cc
! 7919383b85cb9a9f6fd1d4bffe21697c  libstdc++-v3/testsuite/special_functions/13_ellint_3/compile.cc
! 49ca87e19ff141c2cde3fa885d9c3309  libstdc++-v3/testsuite/special_functions/13_ellint_3/compile_2.cc
  51586062b3eeaebd7af37c198695dc60  libstdc++-v3/testsuite/special_functions/13_ellint_3/pr66689.cc
! c5e457a8f0e388f4a3d345c5b0e909e8  libstdc++-v3/testsuite/special_functions/14_expint/check_nan.cc
! 1a20def4b5295fb99476d98685268cad  libstdc++-v3/testsuite/special_functions/14_expint/check_value.cc
! b77f7eaaf114449fa891a6e9600bbdf0  libstdc++-v3/testsuite/special_functions/14_expint/compile.cc
! ce52c0f0104dbb505ef65eb979e566d6  libstdc++-v3/testsuite/special_functions/14_expint/compile_2.cc
! 4b3554e76624cdd357d7405b957bef1c  libstdc++-v3/testsuite/special_functions/14_expint/pr68397.cc
! 2d7f0ed0728e977bf3a16c9d5dd37f30  libstdc++-v3/testsuite/special_functions/15_hermite/check_nan.cc
! 140d67a2c0986a6a61c36acfe1c37e3c  libstdc++-v3/testsuite/special_functions/15_hermite/check_value.cc
! 459f8558ed966eee9eb9f2bac3442f7d  libstdc++-v3/testsuite/special_functions/15_hermite/compile.cc
! ea563ba4fbf74ff41bf563b6d59504d5  libstdc++-v3/testsuite/special_functions/15_hermite/compile_2.cc
! dc06c5941fe4ac96d83f8bccdc0e0947  libstdc++-v3/testsuite/special_functions/16_laguerre/check_nan.cc
! b5c8b22da20548c7e12f29006594a3b4  libstdc++-v3/testsuite/special_functions/16_laguerre/check_value.cc
! 5907d4043bfd735ae41d46d661eaa3c9  libstdc++-v3/testsuite/special_functions/16_laguerre/compile.cc
! 4c1ac9a174d36cbf38940309d40acf4a  libstdc++-v3/testsuite/special_functions/16_laguerre/compile_2.cc
! 20f2cbeb6a88590f44f5580ae6d5e7db  libstdc++-v3/testsuite/special_functions/17_legendre/check_nan.cc
! c717c60a6b3226964da0cf69d23a490a  libstdc++-v3/testsuite/special_functions/17_legendre/check_value.cc
! 3a7c6b4ec87069038c3db64563099d7b  libstdc++-v3/testsuite/special_functions/17_legendre/compile.cc
! 99bf72f490d45e59b795ecae5ef996c8  libstdc++-v3/testsuite/special_functions/17_legendre/compile_2.cc
! 8fe116a72527e14499b7a46fa1114002  libstdc++-v3/testsuite/special_functions/18_riemann_zeta/check_nan.cc
! f54a18bbe60db2e2d404bb9ccb93fab6  libstdc++-v3/testsuite/special_functions/18_riemann_zeta/check_value.cc
! 066077f42e03a0e12cefbfc0e2f94af3  libstdc++-v3/testsuite/special_functions/18_riemann_zeta/compile.cc
! 23c63d77f182e7e9df1a8411d114147e  libstdc++-v3/testsuite/special_functions/18_riemann_zeta/compile_2.cc
! ef43ddb9d8c764d8ab57283c9655da29  libstdc++-v3/testsuite/special_functions/19_sph_bessel/check_nan.cc
! eae7e632c961dd37772c95b83329fb6b  libstdc++-v3/testsuite/special_functions/19_sph_bessel/check_value.cc
! 6946de3a708745bbc2e0463743b514a5  libstdc++-v3/testsuite/special_functions/19_sph_bessel/compile.cc
! 55f66d1d62f8ad4293a2aaf6f6457318  libstdc++-v3/testsuite/special_functions/19_sph_bessel/compile_2.cc
! 4f196889c4ce7d3785d369153f35e1c6  libstdc++-v3/testsuite/special_functions/20_sph_legendre/check_nan.cc
! ce4cf0b7b3bb5152df35c02e23a21e12  libstdc++-v3/testsuite/special_functions/20_sph_legendre/check_value.cc
! 84a6f9729c7d643321ad6fe05a57f6d7  libstdc++-v3/testsuite/special_functions/20_sph_legendre/compile.cc
! 510dacd33b7818dc8a894e08df6403ff  libstdc++-v3/testsuite/special_functions/20_sph_legendre/compile_2.cc
! 8c99de1b86d9456241e0437230560528  libstdc++-v3/testsuite/special_functions/20_sph_legendre/pr86655.cc
! 7863b227915ec19e8da759ec9b164f66  libstdc++-v3/testsuite/special_functions/21_sph_neumann/check_nan.cc
! 440d74e4e526c886ebc1017985a5cecc  libstdc++-v3/testsuite/special_functions/21_sph_neumann/check_value.cc
! c00431ca2194e37ebee1dd19cd4e42cb  libstdc++-v3/testsuite/special_functions/21_sph_neumann/compile.cc
! 6a46a0522d03d67aad878553d7ec3493  libstdc++-v3/testsuite/special_functions/21_sph_neumann/compile_2.cc
! e6ff7c66282e5df640690dfacd11b1dc  libstdc++-v3/testsuite/std/concepts/1.cc
! 954fb245f00bfe4b5daa9e88bb2221b7  libstdc++-v3/testsuite/std/concepts/2.cc
! 9b9b0a3ecb5dc7130e6919f28a057b84  libstdc++-v3/testsuite/std/concepts/concepts.callable/invocable.cc
! ddd9437ebeabe06fcc4ea0eee4627f29  libstdc++-v3/testsuite/std/concepts/concepts.callable/regular_invocable.cc
! 9d4b70dd8e2b6e3d4e04c494ec6b09d5  libstdc++-v3/testsuite/std/concepts/concepts.callable/relation.cc
! 23a55556a1a2466d437337f8bdfd6b98  libstdc++-v3/testsuite/std/concepts/concepts.callable/strictweakorder.cc
! d7b681b743d359309ce9454316c77d83  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.arithmetic/floating_point.cc
! 56cd00db34cfc75f68b88aacb987b37d  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.arithmetic/integral.cc
! c80d7c7a95f276266870c2b1dc3a79fe  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.arithmetic/signed_integral.cc
! 2da3a73a5b291ad9822b8069473e5844  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.arithmetic/unsigned_integral.cc
! a6eb6d58c672edef911451c3e4ba7a02  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.assignable/1.cc
! a976c675e6416000478b749c99482efc  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.common/1.cc
! 2357c5058ea214fbf40ea45baeec2b30  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.commonref/1.cc
! 26f7ff3a6d24b85ce952bc5254ba8a19  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.constructible/1.cc
! 88617dce4213a135c221c5449a391a4a  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.convertible/1.cc
! 64fad3599e665204949b2738853564a4  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.copyconstructible/1.cc
! 5b5aac0945e92588f742be5728d89b7c  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.defaultinitializable/1.cc
! 4e6b5615ef465b1c584143b7dd24fa04  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.defaultinitializable/lwg3149.cc
! e30b6b1eedb1119d37c97d61b59bfe40  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.derived/1.cc
! b95bcbe27865fa3b574b1be5e7f8381c  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.destructible/1.cc
! 9e79d86403ce083289b326e5c01eef36  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.moveconstructible/1.cc
! d89847c5ed98cf6dc5319eba2e06b51a  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.same/1.cc
! 3961e877ce4db124d330c22d95277cae  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.swappable/swap.cc
! d9303842b16503f09f41ed89dff9f6b2  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.swappable/swappable.cc
! 76f6a0f9fbf952db96440b5ec567af44  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.swappable/swappable_with.cc
! 05ba2122be233137a6c4b43cf41b591a  libstdc++-v3/testsuite/std/concepts/concepts.object/copyable.cc
! 729260af8e9d6b7641c61aacf1f06293  libstdc++-v3/testsuite/std/concepts/concepts.object/movable.cc
! edabfb3fdf4f334dc2aae1c5e88617cf  libstdc++-v3/testsuite/std/concepts/concepts.object/regular.cc
! d6a47138aa2bcd1389e0a2bc2cb9a916  libstdc++-v3/testsuite/std/concepts/concepts.object/semiregular.cc
! 73c89b1d1ffa6497af6738d0a10b09a4  libstdc++-v3/testsuite/std/ranges/97600.cc
! f6a29465f455b7a57593ae8a66caea26  libstdc++-v3/testsuite/std/ranges/access/begin.cc
! 5c19387e773a874288219ba90a36a8a4  libstdc++-v3/testsuite/std/ranges/access/begin_neg.cc
! 184149146b77a85ded94b8b7c5a64ff7  libstdc++-v3/testsuite/std/ranges/access/cbegin.cc
! fb23642a6893aed264528184e8b1e89a  libstdc++-v3/testsuite/std/ranges/access/cdata.cc
! 3f1a8f331a6b3763ca3a9960b9e843e0  libstdc++-v3/testsuite/std/ranges/access/cend.cc
! 56280017abf58c62b9c687eb8bc28689  libstdc++-v3/testsuite/std/ranges/access/crbegin.cc
! a6ad3007f5ce9824e90cfe812d1af68f  libstdc++-v3/testsuite/std/ranges/access/crend.cc
! e9101b23fdc293b8cfcd821e07082fff  libstdc++-v3/testsuite/std/ranges/access/data.cc
! f1da35bc31260221876bbf143ed35426  libstdc++-v3/testsuite/std/ranges/access/empty.cc
! e3d33360513687ab0dd3751b8de5a5a1  libstdc++-v3/testsuite/std/ranges/access/end.cc
! 135bbc0eb03e557ab88875ace9ee0980  libstdc++-v3/testsuite/std/ranges/access/end_neg.cc
! 53ebbeefa5ac21f1e668c4e6393441bb  libstdc++-v3/testsuite/std/ranges/access/lwg3467.cc
! 28d776d0c6464cb2f9bdea975133ab66  libstdc++-v3/testsuite/std/ranges/access/rbegin.cc
! b3cf9d2edb6c3e710065fa8dad5b03b7  libstdc++-v3/testsuite/std/ranges/access/rend.cc
! 8479881de6f7fe9c937c6d609beed49a  libstdc++-v3/testsuite/std/ranges/access/size.cc
! e4e886ed5e6b5c520951928e09843313  libstdc++-v3/testsuite/std/ranges/access/size_neg.cc
! e2ce9743a296b32f07cb1e8c4b8e2662  libstdc++-v3/testsuite/std/ranges/access/ssize.cc
! d6da6812cb88b3c7b35954344aa5d86d  libstdc++-v3/testsuite/std/ranges/adaptors/100479.cc
! c47523ac5b941c5ebb99ec71fa9fd031  libstdc++-v3/testsuite/std/ranges/adaptors/100577.cc
! 18db2c80e9edd807d8e894df57bfa625  libstdc++-v3/testsuite/std/ranges/adaptors/93978.cc
! 551333c56748ecbac1d26b7e4cccc989  libstdc++-v3/testsuite/std/ranges/adaptors/95322.cc
! fd10cb8fed0aa319ece5db612f3e92f4  libstdc++-v3/testsuite/std/ranges/adaptors/99433.cc
! 2942f66c2a0796f0059d6c62f4273cf7  libstdc++-v3/testsuite/std/ranges/adaptors/all.cc
! 70645e37b88d307dc15771cd6a6e26b8  libstdc++-v3/testsuite/std/ranges/adaptors/common.cc
! 81c8f862a1084443f4afec002edd9cfe  libstdc++-v3/testsuite/std/ranges/adaptors/conditionally_borrowed.cc
! bd219a8b5c7920e7e3d2276351044dac  libstdc++-v3/testsuite/std/ranges/adaptors/counted.cc
! f08026c124e2c6f228702d2ddd1bb3bb  libstdc++-v3/testsuite/std/ranges/adaptors/detail/copyable_box.cc
! 1f9c75d0ff4dcf1f0a325584c9a2c4f5  libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc
! 93a1ae3dea7b82345420d2bdaa1de02a  libstdc++-v3/testsuite/std/ranges/adaptors/drop_while.cc
! e6598408c942e63592533b0a8e862d95  libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc
! 34c74de0566311054836144ea4703423  libstdc++-v3/testsuite/std/ranges/adaptors/filter.cc
! 17aefaa1bae2e9814e2d4ed6d63d3301  libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
! e3185f7254676a8043d2594eb1e4500f  libstdc++-v3/testsuite/std/ranges/adaptors/lwg3286.cc
! b6253cd90778666795033228ba19116e  libstdc++-v3/testsuite/std/ranges/adaptors/lwg3313_neg.cc
! 2045ce6f1792467ba47ef569ef1c18e2  libstdc++-v3/testsuite/std/ranges/adaptors/lwg3325_neg.cc
! 0adff8eb311fb217892db3c3b5af480e  libstdc++-v3/testsuite/std/ranges/adaptors/lwg3406.cc
! 5ecca3a492a20bd850a7d8d2ad515ba4  libstdc++-v3/testsuite/std/ranges/adaptors/p2281.cc
! 1b5518231592bbac58eebcc24ed24ef2  libstdc++-v3/testsuite/std/ranges/adaptors/reverse.cc
! 9a3c66716d72856eb1b47891d66c6ec4  libstdc++-v3/testsuite/std/ranges/adaptors/sizeof.cc
! bcb1ec843cd81e5a86c13c7bf22d25da  libstdc++-v3/testsuite/std/ranges/adaptors/split.cc
! bd71e7bb235819e22086d8d4d339e23f  libstdc++-v3/testsuite/std/ranges/adaptors/split_neg.cc
! e0b2e6329f5a12a3bf25bb0e21723217  libstdc++-v3/testsuite/std/ranges/adaptors/take.cc
! b324814505dd6ba965f51745e6aa5722  libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc
! 964f8a07629931d7abd59fd673722f1c  libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc
! 2aad27e8e6dc8644876c7dcdaef7fa60  libstdc++-v3/testsuite/std/ranges/empty_view.cc
! abee4ec65cefb3600f85cec4913c7946  libstdc++-v3/testsuite/std/ranges/headers/ranges/synopsis.cc
! 121587a18e4c39b7ac2b978758f72268  libstdc++-v3/testsuite/std/ranges/iota/93267.cc
! 3832ba93e310422cc36e6a8a2484ddef  libstdc++-v3/testsuite/std/ranges/iota/96042.cc
! ccdc4ae1b41638162b9e60936a7f2e0e  libstdc++-v3/testsuite/std/ranges/iota/difference_type.cc
! 0819563613d6bc5f307077f94daf19a2  libstdc++-v3/testsuite/std/ranges/iota/iota_view.cc
! e75edf80cec13e421cd663c039d2ca93  libstdc++-v3/testsuite/std/ranges/iota/iterator.cc
! bd95f0058da01ae7c3f9a944b0cb2fba  libstdc++-v3/testsuite/std/ranges/iota/lwg3292_neg.cc
! f6414f7f1cce883d75748248ec104110  libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
! cfd013ee643ff8cc3c5e2e2b102bd24b  libstdc++-v3/testsuite/std/ranges/iota/size.cc
! a0d27a4084ead9098b776f82295f0a03  libstdc++-v3/testsuite/std/ranges/istream_view.cc
! 39a74ff1ef561d51b687d686060239c1  libstdc++-v3/testsuite/std/ranges/p2259.cc
! 1b1e5fd6e20b73c40efa996686a5be0c  libstdc++-v3/testsuite/std/ranges/p2325.cc
! 1a4f67e2431ce8671bfe15a68aa14003  libstdc++-v3/testsuite/std/ranges/p2367.cc
! e5d7757712fcb6070d35fb61bb9686ec  libstdc++-v3/testsuite/std/ranges/range.cc
! 64b49ff9679c02a817d8b8e1c304a977  libstdc++-v3/testsuite/std/ranges/refinements.cc
! 0f79f9d63bf7c793e2205c828bfc36c7  libstdc++-v3/testsuite/std/ranges/safe_range.cc
! 20083272df7fb4c144b0ed56e5f4d15a  libstdc++-v3/testsuite/std/ranges/safe_range_types.cc
! 81c56c40ccdc738086be3a3efd582003  libstdc++-v3/testsuite/std/ranges/single_view.cc
! e0aeb07435374f4671b8db98e1211c94  libstdc++-v3/testsuite/std/ranges/sized.cc
  3b43079628213bcfeda0d10685ba810f  libstdc++-v3/testsuite/std/ranges/subrange/1.cc
! a4e967aec4cc7a9ebd4c6debdbfd3cfd  libstdc++-v3/testsuite/std/ranges/subrange/96042.cc
! e8752b4f410857257c4def237d482bf7  libstdc++-v3/testsuite/std/ranges/subrange/97512.cc
  1296c3e0f2c2c6e1cbf08f5653d24b2d  libstdc++-v3/testsuite/std/ranges/subrange/constexpr.cc
! 72281201d29af7ace58d34efec40a22b  libstdc++-v3/testsuite/std/ranges/subrange/lwg3282_neg.cc
! 43946355b6933b31f7ca8df72fde5637  libstdc++-v3/testsuite/std/ranges/subrange/lwg3286.cc
! e289d02d97c864fdb013f2ae524cb77e  libstdc++-v3/testsuite/std/ranges/subrange/lwg3433.cc
! 81e267db1008e9c4480743002c9c5984  libstdc++-v3/testsuite/std/ranges/subrange/sizeof.cc
! 8f00f7d4ee3127deef32cd3ebddbbdf4  libstdc++-v3/testsuite/std/ranges/subrange/tuple_like.cc
! 8d54b32a188cfa580317a9a24886f4c4  libstdc++-v3/testsuite/std/ranges/view.cc
! ad173933fa56d91facb69d926ba4ed5b  libstdc++-v3/testsuite/std/time/clock/file/members.cc
! 582848e36bfa4eb0511742a823ef559b  libstdc++-v3/testsuite/std/time/clock/file/overview.cc
! 226feb67cc460aea99599c9f43c14726  libstdc++-v3/testsuite/std/time/day/1.cc
! 70a8581910f4aec7b4a69838e7e9b1fa  libstdc++-v3/testsuite/std/time/hh_mm_ss/1.cc
! fe183257d7a31933cdc3fb8c8bb5c957  libstdc++-v3/testsuite/std/time/is_am/1.cc
! 780a27d714b7130cce61c069e0c89cd4  libstdc++-v3/testsuite/std/time/is_pm/1.cc
! 9428d1f5fa2a4b0191dbbfce2d115137  libstdc++-v3/testsuite/std/time/make12/1.cc
! 1f249c0e31da727a260da951689e2063  libstdc++-v3/testsuite/std/time/make24/1.cc
! 6be903b3f3134eed76ad70b5835ac565  libstdc++-v3/testsuite/std/time/month/1.cc
! 7cfb8f66154b3ff83d5cce7572998891  libstdc++-v3/testsuite/std/time/month_day/1.cc
! 8d4aa89f218b2a8915b81774a72a5607  libstdc++-v3/testsuite/std/time/month_day_last/1.cc
! b60d5f696fd5b3575a7332882d6884cd  libstdc++-v3/testsuite/std/time/month_weekday/1.cc
! 235e6393f8bebe8f740ca5b5ab8acb73  libstdc++-v3/testsuite/std/time/month_weekday_last/1.cc
! c6e0c094056db16806a0cfdf2c18476b  libstdc++-v3/testsuite/std/time/syn_c++20.cc
! fea83aff8ac17db243a2ad96b4e573c2  libstdc++-v3/testsuite/std/time/traits/is_clock.cc
! b13fa8805225f3faea7254ea035b3658  libstdc++-v3/testsuite/std/time/weekday/1.cc
! d18d1148dec77296a2a4558ac5ada709  libstdc++-v3/testsuite/std/time/weekday_indexed/1.cc
! c499214ed2ec4ceb4f75cef342659f9d  libstdc++-v3/testsuite/std/time/weekday_last/1.cc
! 36073e542bc0abf497c7bba8748b2a74  libstdc++-v3/testsuite/std/time/year/1.cc
! 623bdcedbff400122b76282f0830218e  libstdc++-v3/testsuite/std/time/year/2.cc
! 602d41ce4d1d0c22bd2ed62023df4bb7  libstdc++-v3/testsuite/std/time/year_month/1.cc
! 31980bac28fc6fc21593e4a24d782bd6  libstdc++-v3/testsuite/std/time/year_month/2.cc
! 58c4b5bdf7738209234bdf15a54fb50f  libstdc++-v3/testsuite/std/time/year_month_day/1.cc
! 969e0a530499b344038f4970312429e1  libstdc++-v3/testsuite/std/time/year_month_day/2.cc
! 79a52720c1fbde13103fb1fd2a2965ad  libstdc++-v3/testsuite/std/time/year_month_day/3.cc
! bc65bcbad0889e08692a4831beb209e3  libstdc++-v3/testsuite/std/time/year_month_day/4.cc
! 88a6e3cd04cb131dca3f0271675f8e05  libstdc++-v3/testsuite/std/time/year_month_day_last/1.cc
! 0cfca3a3b11be5d419a8227d350415ae  libstdc++-v3/testsuite/std/time/year_month_day_last/2.cc
! 00c6bf3fe5f47ba81791c05969022c5f  libstdc++-v3/testsuite/std/time/year_month_weekday/1.cc
! ca49063a48e1d4b379aaa2276a736c9e  libstdc++-v3/testsuite/std/time/year_month_weekday/2.cc
! 4b0aef84fb2aa19d688321713947b9e4  libstdc++-v3/testsuite/std/time/year_month_weekday/3.cc
! 3f1f5131a80ec57a969fe4f2230318d4  libstdc++-v3/testsuite/std/time/year_month_weekday_last/1.cc
! f45acf2e04a4c542f6fc42daedebd4a6  libstdc++-v3/testsuite/std/time/year_month_weekday_last/2.cc
! 700c415478af6b75c92a2caf0b5456ed  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/1.cc
! 4774db37a492806f06a07c94eed67093  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/not_shared.cc
! dde4496e27b5f283507e0fb5e4d5685a  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/not_shared2.cc
! 9f4fdfedf03ed21b19017afeaefe9471  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/not_shared3.cc
! c3267ccc5be5c6eed9ac622be7e3c61e  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/requirements/explicit_instantiation/1.cc
! 6ec4f40c20d13e61c21bd999d993e4e7  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/shared.cc
! 663ab9fff3098bb35d08a2547c6038fb  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/still_shared.cc
! 3ce0f8b6ad14e3b5071cd779551ec78e  libstdc++-v3/testsuite/tr1/2_general_utilities/headers/functional/synopsis.cc
! 92a62ae64dd3f2caf3ff3b532bb711cb  libstdc++-v3/testsuite/tr1/2_general_utilities/headers/memory/synopsis.cc
! 9e1eb6a0baf7328e583c0522f3acb457  libstdc++-v3/testsuite/tr1/2_general_utilities/headers/memory/types_std_tr1.cc
! 7fd652675ed97c36009770f8eec167f9  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/assign.cc
! 02ccff60048256a58836ac5e4d92fdf8  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr.cc
! 3a88e9b1219ab379c28968b48e4323ca  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_neg.cc
! 531fb958e02d258ad493526b72013cc9  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_rvalue_neg.cc
! 51ab8dd5eb9cb56689d0dc859798f643  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/dr541.cc
! ad2de5edad973dce2ffbc4297d30736b  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr.cc
! 0b92409b66f6d3ac9d0cee3893d4353d  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr_neg.cc
! 33a7374a6893410804bf89407309d264  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/casts/1.cc
! 96fd4fd04c273a4fd28e13df3cffd96f  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/comparison/cmp.cc
! 442a2dbf42a920b150e234800b6bc371  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/39405.cc
! f3588f22990a11f1164248637bbe5e97  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc
! 684e225e8e790a635b385a579635e690  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/auto_ptr.cc
! 3385c6a5d4fa68aaa9a38b7c2db2ef66  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/auto_ptr_neg.cc
! 2e5deeeba0107bc890b92bf2e7d4d7ae  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/copy.cc
! 4de7d22a83907819b979d138b06d8416  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/default.cc
! aed7b18ee46129466b945f2a80e86305  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/pointer.cc
! 72d536e704d1badc7e16274e715393f6  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/weak_ptr.cc
! 147922ffd1b477bf3871ed70080c1426  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/weak_ptr_expired.cc
! 570ea1cf3975b256a7a132f97fa2e7a5  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/dest/dest.cc
! d0fc8c34319e3ea01fdc66dc51c8551b  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/misc/24595.cc
! 2d94a2c96a31ee21de331aa687f831d9  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/misc/42019.cc
! f0aba61d2816f1854a089d65d164b6ed  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/misc/io.cc
! af4ba590f512dbdd87e22bde688c1437  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/misc/swap.cc
! 0cbc3fa2cded9e0c255003efcde0acab  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/modifiers/24805.cc
! ddd60fe888e706d937055bbe22649355  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/modifiers/reset.cc
! 54b5d34c18383369749af637fefe69cc  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/modifiers/reset_neg.cc
! 2f4d2ae8917f824ac17f63594f687096  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/modifiers/swap.cc
! 66bca453eefa9dc676a4c1e85e77fd98  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/modifiers/swap_neg.cc
! 0e9408e09afb38f3a92630eeec7cbded  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/observers/bool_conv.cc
! 76698f785624a95fde081b7e8730e968  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/observers/get.cc
! a0754e87702dcb1647684390082ee10c  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/observers/unique.cc
! 3fdddfa5944e4fb9b6da08bbe1b0bf74  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/observers/use_count.cc
! 0a6527c3e89ab906e2d3123a10f2f122  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/requirements/explicit_instantiation/1.cc
! 781f969ca4e4f95f768c1937c538cd2f  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/requirements/explicit_instantiation/2.cc
! 1105e3d53988e17e96f4abeeb03c1b11  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc
! 78e1124db28773c07a809e556f083193  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc
! 1cea9cf6255186b29bf8aecbbb4fcadf  libstdc++-v3/testsuite/tr1/2_general_utilities/weak_ptr/lock/1.cc
! c5b290a7922d2244d8b8c94e6aed47c0  libstdc++-v3/testsuite/tr1/2_general_utilities/weak_ptr/requirements/explicit_instantiation/1.cc
! ba13ae65b918d1bc2555677c5906fdf7  libstdc++-v3/testsuite/tr1/2_general_utilities/weak_ptr/requirements/explicit_instantiation/2.cc
! c37625ad6886076a0ec4a74361dc94c2  libstdc++-v3/testsuite/tr1/3_function_objects/bind/all_bound.cc
! aa01607d04badf05347a2bf582df4983  libstdc++-v3/testsuite/tr1/3_function_objects/bind/cv_quals.cc
! f27b0d2ad47e6727c3caae403349e587  libstdc++-v3/testsuite/tr1/3_function_objects/bind/mixed.cc
! 11a151ad549d6ec9ed5c30618a4cbb60  libstdc++-v3/testsuite/tr1/3_function_objects/bind/nested.cc
! f024de75777b302e04e2ea803ed4295b  libstdc++-v3/testsuite/tr1/3_function_objects/bind/placeholders.cc
! e1007cadaaaad1a4053884629f60a04d  libstdc++-v3/testsuite/tr1/3_function_objects/bind/ref.cc
! 6a129578603877691b00413c86808e1f  libstdc++-v3/testsuite/tr1/3_function_objects/function/1.cc
! 57370d24ec30558ae79460d8baa20fa4  libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc
! 8e3b9b305600faad06444a707d5328fe  libstdc++-v3/testsuite/tr1/3_function_objects/function/2.cc
! 2eec310004e2a576aff0cc15f8964fa6  libstdc++-v3/testsuite/tr1/3_function_objects/function/3.cc
! 085d2d80169370ad0667bc6821136e61  libstdc++-v3/testsuite/tr1/3_function_objects/function/4.cc
! 2dfc943449ad0ed690ec690e3a642edc  libstdc++-v3/testsuite/tr1/3_function_objects/function/5.cc
! 2c8d32d726bbc2e9fae111769c04c8d2  libstdc++-v3/testsuite/tr1/3_function_objects/function/6.cc
! 581beb132e4445260198d4ca0f2b2e3e  libstdc++-v3/testsuite/tr1/3_function_objects/function/63840.cc
! 806c7816d592fdb1700fed435e827ee7  libstdc++-v3/testsuite/tr1/3_function_objects/function/7.cc
! 6ec856c2eb55bef030357615442a4ca1  libstdc++-v3/testsuite/tr1/3_function_objects/function/8.cc
! c4e6dfec26c9f19f02cdfda0fbcca71d  libstdc++-v3/testsuite/tr1/3_function_objects/function/9.cc
! dc616d1cacf6e4be84c54687139a9382  libstdc++-v3/testsuite/tr1/3_function_objects/headers/functional/synopsis.cc
! 54805ddcf0b4304ebca88ccfe60c0e80  libstdc++-v3/testsuite/tr1/3_function_objects/headers/functional/types_std_tr1.cc
! 64416d2db302856d1969fae09d15d04d  libstdc++-v3/testsuite/tr1/3_function_objects/headers/functional/using_namespace_std_tr1_placeholders.cc
! 1e594eba76d840db67e61cee0be95723  libstdc++-v3/testsuite/tr1/3_function_objects/mem_fn.cc
! 0b649d9e09ff2b7a15899bbda925909d  libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc
! 49ec5984d292e0e84cbc4b943962f470  libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/typedefs.cc
! 40df13cfd427a01d77c964819d1af9d1  libstdc++-v3/testsuite/tr1/3_function_objects/result_of.cc
! 04fc71b4313e0b925d4e9fef19b6ec01  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_const/requirements/explicit_instantiation.cc
! ad7cc197973bf93d2d46befb7f8ceb60  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_const/value.cc
! bffe6fc236870b917057132c54821969  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_cv/requirements/explicit_instantiation.cc
! 1338f5cc16902c064a104d8980b14364  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_cv/value.cc
! d014286d3ed33da069d761cde15d36ac  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_pointer/requirements/explicit_instantiation.cc
! 677548759fe0727541bc51a9a1dcb371  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_pointer/value.cc
! ec2a47cfbd3a06c95fb7ef07287326fe  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_reference/requirements/explicit_instantiation.cc
! 753e293473ced831dceb8a88c98cf3cd  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_reference/value.cc
! 03abdf0b46e5406b3558a5879c5e3ecb  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_volatile/requirements/explicit_instantiation.cc
! a8cbe143d819acd2448842aef4551a3e  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_volatile/value.cc
! b6a5542b0dd9675c070ea852550a1d2d  libstdc++-v3/testsuite/tr1/4_metaprogramming/aligned_storage/requirements/explicit_instantiation.cc
! d1e7fee267780a4b4cc34b55e5c251df  libstdc++-v3/testsuite/tr1/4_metaprogramming/aligned_storage/value.cc
! 41b9bc71e0123d01a10c405d0d95747c  libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/requirements/explicit_instantiation.cc
! b4f12d45edaf05491ee058def9173253  libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/requirements/typedefs.cc
! cc82aa6e894d14b0a843c63420261a5d  libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/value.cc
! be6c53bd8b76231318a24bbafe6eed9a  libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/requirements/explicit_instantiation.cc
! 80509948af9d2a7269e3aafdeae3de8f  libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/requirements/typedefs.cc
! e2687da8695195438b8088d38b6c9108  libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/value.cc
! 28a2c50e6b267cf5e45db0f1499ccdb4  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/requirements/explicit_instantiation.cc
! 1a9ff679c6d59dd626e977c1733ca60d  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/requirements/typedefs.cc
! 2276c9d86287431c73302643ad01438e  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/value.cc
! 417cac02d6417984c24eb6f889eb997a  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/requirements/explicit_instantiation.cc
! 79b69d2c8dff6cac5aa240377faaa349  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/requirements/typedefs.cc
! e7f68151d05813c25bbfd20ec534bd35  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/value.cc
! 2b497df8c495ea3773222fe2e44b4fe8  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/requirements/explicit_instantiation.cc
! f82905d620d414684877bb22fed0bcb8  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/requirements/typedefs.cc
! 3bff8e067ca22c772af9b4bfe848a8ef  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/value.cc
! 29d9f0a6c1a4efd6e0c377a764e8b24e  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/requirements/explicit_instantiation.cc
! 1ff3b6b5c9ffb4499331705c0f0dd68d  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/requirements/typedefs.cc
! e6faa533b48afe1821dd237d4eaada8c  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/value.cc
! 3dc7a9c7c5fa34d0a5209a401af726df  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/requirements/explicit_instantiation.cc
! 52564f4db2a0089503ec81dfdf5326c1  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/requirements/typedefs.cc
! f32ae7e42c39b42d7f40f8efc6743736  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/value.cc
! 3c8ee542ab30cbc2957c4d6e5016c9dc  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/requirements/explicit_instantiation.cc
! 66cb759ceff2a0dd7695b9be001364f5  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/requirements/typedefs.cc
! 68245037a9a9ae47d0645ed0ef90b4dd  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/value.cc
! fa732ea74a881abc34ed9fe398412f73  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/requirements/explicit_instantiation.cc
! 19479ab963ad8413cf748dd2c5d2bf0c  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/requirements/typedefs.cc
! 2e3759ebca02103b3f654c3bc566b21f  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/value.cc
! 8f48f0d41d35b0d1cdf0d9b3299d5e0d  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/requirements/explicit_instantiation.cc
! 60b229513a970316219663c25e8ae3ba  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/requirements/typedefs.cc
! c3014a85b259a8da779f205614c31600  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/value.cc
! ae847544d50ff1c7b4a690838e2012a7  libstdc++-v3/testsuite/tr1/4_metaprogramming/headers/type_traits/synopsis.cc
! 578ce12755e372664422b8572cd7a432  libstdc++-v3/testsuite/tr1/4_metaprogramming/headers/type_traits/types_std_tr1.cc
! 823fd3d332746bf5e03b5029a526a99a  libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/requirements/explicit_instantiation.cc
! 19718150bd0fa990eb60adf8c079421c  libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/requirements/typedefs.cc
! 9881e9a33f88515800676394f09b1765  libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/static_definition.cc
! 3134b9a18b8d5b3d8ab6fb85bfd54377  libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/true_false_type_typedefs.cc
! 09e223243fd743733c74756fc109681b  libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/true_false_value.cc
! dd56b4c6b51af0a111b15e7f485946d5  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/requirements/explicit_instantiation.cc
! fe4b45d9db058b3db8c56efdbdf03820  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/requirements/typedefs.cc
! 85ba0a87fb9137f11e1b2539abb0cf9e  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/value.cc
! bb0440289b262869dfa2ec2c6cd38bce  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/requirements/explicit_instantiation.cc
! 27d541965765437592873fa012d888f1  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/requirements/typedefs.cc
! dc253552d8e50f859cb0daa774867c72  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/value.cc
! fbd53c640163ab7757098300ddeb0432  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/requirements/explicit_instantiation.cc
! caae1cbdb8cf64aef843f43e9d4cad11  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/requirements/typedefs.cc
! 2eb0a5d4663739c481b5be567d9f8d04  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/value.cc
! d0a69eca018d4a3b80d7b80c93c6f38c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/requirements/explicit_instantiation.cc
! 08e237d9b1de43263847226ccbe22cd9  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/requirements/typedefs.cc
! 702421cc8867aad0a0569facb20845ae  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/value.cc
! 5f788700f3cf5c96447dea17e2191187  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/requirements/explicit_instantiation.cc
! 2516b5cc9ca4028a2c946c5696c7028f  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/requirements/typedefs.cc
! e3145002845185e26391c33dfbc40153  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/value.cc
! 1d9d7107d30c6029399fa6f31c52261e  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/requirements/explicit_instantiation.cc
! 52375a8866120b091df834e8993039a1  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/requirements/typedefs.cc
! e477ca48e8dd3ff9642d70011865c6ef  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/value.cc
! 62756588fa98ffa70f569f20d3d3c508  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/requirements/explicit_instantiation.cc
! e61aaac7ed537b35091b32e9e7a67c9a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/requirements/typedefs.cc
! 43f6154f595d09141d1aaacdec08ef43  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/value.cc
! 7ecbffb2f08740cf55fac6e3fca89102  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/requirements/explicit_instantiation.cc
! 571dd38b00eabcc54b8bda6a6d7da709  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/requirements/typedefs.cc
! caf45b61c1a038c77d0b6afcf90190c2  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/value.cc
! 3fca4f47c9bd26471748d307d9dd5e3c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/requirements/explicit_instantiation.cc
! 83ec3f5961c135c8a41a57cfb400284c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/requirements/typedefs.cc
! 613bc493ec2d208497d0042d1e5dd373  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/value.cc
! 759927223ca3245f8e8feb3d2d9eb035  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/24808.cc
! e79c0cdea6a5acc53c3be5d0af3f7a6a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/requirements/explicit_instantiation.cc
! 79f06ad4ff8281b50c9ecccabee7e44e  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/requirements/typedefs.cc
! 262e41e22d7bb6522973bce7e05f307c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/value.cc
! ee36adc7fbbe69698e2466f52b21200b  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/requirements/explicit_instantiation.cc
! 891f9297cace0aa75444ecd54a9eed5a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/requirements/typedefs.cc
! b5177a3423545c645576aa1275ce13e6  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/value.cc
! 36cd657567c8bfc2df65e84c6b6edb5e  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/24808.cc
! db4f31b1de197fccd3e94223693ba96a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/35637.cc
! cceec4c973838e97223548381b236559  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/requirements/explicit_instantiation.cc
! ee4c8526d0057943c75177e6294f3887  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/requirements/typedefs.cc
! f64acabf6863a0514351e6675f41bd2f  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/value.cc
! 43cccb7bacfe2651a1b0c3a8514729e6  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/requirements/explicit_instantiation.cc
! b5e768c302f0b7d2f3544ac62a480a78  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/requirements/typedefs.cc
! c554d67b721e10dec5e5498efbac6128  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/value.cc
! 55f6626796009f787cc73abb4304c345  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/requirements/explicit_instantiation.cc
! 2763a1cd43c0002e38efc5b7e1ddd49c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/requirements/typedefs.cc
! d15370662cc94c66864a0d67f3dc0932  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/value.cc
! 0b5e1b21cf53606063c231d16117ed37  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/requirements/explicit_instantiation.cc
! 47afcd6ebaa2f35b888954365c5bd90f  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/requirements/typedefs.cc
! 9224edc58d130146a5d850261b0b4983  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/value.cc
! a2878aaa6d099c91e38d984e14147653  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/requirements/explicit_instantiation.cc
! 4008756072aadd77fb7be17d8e5f76e3  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/requirements/typedefs.cc
! 10cd90a057be78f9327ce0ca452fa940  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/value.cc
! 36f30281917cc9dcf2b0b5cd9ed15a46  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/requirements/explicit_instantiation.cc
! 5bd84bb65f1c48d5b41245173bff199d  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/requirements/typedefs.cc
! f6f0d34afa26debf8f95831f0eaac66e  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/value.cc
! 49724d16caed2d3dcbd1bb0cbb74cf8f  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/24808.cc
! 1a57f857a9f8311aef77e4e6ce3761a4  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/requirements/explicit_instantiation.cc
! ed5824841c3624f37e2435a3117f8c6a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/requirements/typedefs.cc
! d55424a16a11f9b72bb10cf6d18dac5e  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/value.cc
! 1ae50100d1f3ff20f45f0f44d808c9cf  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/requirements/explicit_instantiation.cc
! 764b99ddb2a616817b783ed767ea1aee  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/requirements/typedefs.cc
! 196e441d188817bba4834e0c705d1018  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/value.cc
! ef52601228dc2d4964784ee2af65c184  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/requirements/explicit_instantiation.cc
! 2899db0fc6ce6ab5b13854acab413150  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/requirements/typedefs.cc
! e5c1e91864f2e097b76dabe1865b0034  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/value.cc
! 68258ace10a73f2fd29fbc089093b9ea  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/24809.cc
! 85b2ef4a9dad0a51e93134428f050f72  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/requirements/explicit_instantiation.cc
! ee9e35d6195f3e799a2dd2fe0a504bab  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/requirements/typedefs.cc
! 714279393340f1f956fb6c7ee51bfb73  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/value.cc
! a9093c0745100d2700241e9e75e7888d  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/requirements/explicit_instantiation.cc
! 870db0e5fe90fa787430f971e3f14c46  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/requirements/typedefs.cc
! 95145aa748e94df6b5d22d58c7edb60e  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/value.cc
! 3683b9bb5b98fbed858f4cb59ff102c3  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/requirements/explicit_instantiation.cc
! 5cf236e5a469a4fdd8eb7ed84a3f03c9  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/requirements/typedefs.cc
! 84b595709bcc9d9a44e6fc9039896d3d  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/value.cc
! cffc67a918cf4a4fee94f00cf013bdef  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/requirements/explicit_instantiation.cc
! 005213a705f28c922f32e13a2b5ef03e  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/requirements/typedefs.cc
! 4e99e45158fd32828f95a82808d1ee49  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/value.cc
! 15c95f04022e4efba6178056d874cab3  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/requirements/explicit_instantiation.cc
! 22e088286b1ba8969dff6601ccf87d39  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/requirements/typedefs.cc
! 4899c893b02b7a5da843dddf359a8b5a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/value.cc
! da94c7730ba77df13d3f1727a06bbc39  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/requirements/explicit_instantiation.cc
! 20c4411e271818ff79f89a209fa8bddc  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/requirements/typedefs.cc
! 2012096cb78ba2fe780193c1b2fc536a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/value.cc
! d9246afda58ab9c60bf3f166eeef2681  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/requirements/explicit_instantiation.cc
! cfbcd90058f2a06190121625d37ea088  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/requirements/typedefs.cc
! 65bd4c4858d50a2aa17f1c1dfe51114a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/value.cc
! a208f12123b79f9779c441764546a7f7  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/requirements/explicit_instantiation.cc
! 5e1f2d30821c58b970af6254e99a6564  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/requirements/typedefs.cc
! 9daedfb55a6a60ef4fea495c667e809b  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/value.cc
! 496e674cf1176028cba84773c0eb8d31  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/requirements/explicit_instantiation.cc
! 075596c1cba4085d3270e88f8e83a41c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/requirements/typedefs.cc
! 2b3e2994ab1cb9858241e18225b0162f  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/value.cc
! b83d0d9812ced1dc20863bea3f1b06c7  libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/requirements/explicit_instantiation.cc
! 3259b16d0419b8153678f04518d6f44c  libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/requirements/typedefs.cc
! 5fe7292fc3e859b36c239e5972b89065  libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/value.cc
! 3d7d02c6f317f68e8270a30ba7991c31  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_all_extents/requirements/explicit_instantiation.cc
! dea3bec66a3f91fec6d497fcd18f3126  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_all_extents/value.cc
! 41e8de2b5a875ccef99ce44260075c70  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_const/requirements/explicit_instantiation.cc
! e3e6aedffe1033192d82a4e335973c9d  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_const/value.cc
! 8021517af5e5f90a767e44507c66ad23  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_cv/requirements/explicit_instantiation.cc
! 49cda3ef005d95ba7aaf3e3aef38ed3f  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_cv/value.cc
! ef1078838b362fb792abc3bccb41ec35  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_extent/requirements/explicit_instantiation.cc
! 70b594a4ce631fce8094a0ad6de1f54e  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_extent/value.cc
! 197f0476363211313123b38cbf0cadc4  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_pointer/requirements/explicit_instantiation.cc
! 3c548b75734df86ce7b503cb3e43cca7  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_pointer/value.cc
! 4270a410365460f42c0e365b8ff597c8  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_reference/requirements/explicit_instantiation.cc
! fa347c9154b38f7b1112f489d829ff10  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_reference/value.cc
! 3cbc36879689fdc3f60ff07ef32504b9  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_volatile/requirements/explicit_instantiation.cc
! 7830339a6c54b84da3db255cfe8d96cd  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_volatile/value.cc
! cf86127e677a0d3d895077ed1de4cc3b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/headers/random/synopsis.cc
! f9fc8f9435c593711bbf850a616aa091  libstdc++-v3/testsuite/tr1/5_numerical_facilities/headers/random/types_std_tr1.cc
! 61dbf0f65a7d8abfce586e8ef4d9aae1  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/bernoulli_distribution/requirements/typedefs.cc
! 53c7b6b7650999ac3f2c4b6bab70eac8  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/binomial_distribution/requirements/typedefs.cc
! 3d0d572a45d55d4834f5c2c91cc838ba  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/operators/equal.cc
! 18a227ee6c3f62c8d6768748b137a217  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/operators/not_equal.cc
! d617f002d48ae1629e8e23836a6dbbc5  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/operators/serialize.cc
! c22ea2217a119c39b1c6707a255922e1  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/requirements/constants.cc
! 43836d6c5fe318c516f1089df825c93f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/requirements/typedefs.cc
! 6c4df6910d9778a734443188a84cefa8  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/exponential_distribution/requirements/typedefs.cc
! b994fcbfe304c674a342087574f72e89  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/gamma_distribution/requirements/typedefs.cc
! ba4f2dcbcda926a8ef7bbad8a71d504f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/geometric_distribution/requirements/typedefs.cc
! bc02236f24d3ab7833aa0352f0f8fdeb  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/default.cc
! 487fa3acdde76faddacf46eda55b9319  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/gen1.cc
! 403c328f5d0f722c8501c65e372cb680  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/seed1.cc
! c8c916bc16906f436d06d3a853750b03  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/seed2.cc
! 46b11d76bfa5bb8549ba58d0f5c24ece  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/operators/equal.cc
! 92320aca3ad5ac3f8927249641d31541  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/operators/not_equal.cc
! 86c870cdd322b6b27fae0196f2776946  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/operators/serialize.cc
! ee282932de07c67339031c7ffce201ea  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/constants.cc
! 8b5dda2655f9d6d843a6a611ceffd769  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/non_uint_neg.cc
! a785c92dbdf130de1fd8dec5ed2a3145  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/typedefs.cc
! cd195a052d38b0fbd59daa3cc907abee  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/default.cc
! 8e8ad638d3dbef81c5fb3fdefb14e50a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/gen1.cc
! 683b44a735b0221cbdbdb0f3f774e168  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/seed1.cc
! 1760c0bdba188096968a3b014b7f51e0  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/seed2.cc
! 9141c84ffb350bee745d796695f7df20  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/operators/equal.cc
! 827b3aff88caa51ee4eced6c752aae45  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/operators/not_equal.cc
! 0e844d8dcc6ea92adac427732497a9e8  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/operators/serialize.cc
! 4c1bfb8885c0cd8f55966aeb0623aeb3  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/requirements/constants.cc
! f48e446d5b0f4445d3c50a9b7191be7e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/requirements/typedefs.cc
! c2b2670738371ff8fe1d3c2b680b3d9f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/minstd_rand.cc
! ed79316916b037cd67b62b4da9177be4  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/minstd_rand0.cc
! 391ff19dd3dcfcfb258326429298c194  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mt19937.cc
! 594230141eae6e37b282aa5adc8812b5  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/normal_distribution/requirements/typedefs.cc
! e2f7fd2cf58aa9c58e93cf881ad8f57b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/poisson_distribution/requirements/typedefs.cc
! 261008f457d01b215e80a9a59dbe8162  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/random_device/cons/default.cc
! 904a82fb0eed59717b5130b439127908  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/random_device/cons/token.cc
! 321985c653f45c3cae2dd470fd809440  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/random_device/requirements/typedefs.cc
! c46053923d7f88a647d97460c705f8f8  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/ranlux3.cc
! 88f9e54cd768b3d2c6d0878dce2576b1  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/ranlux3_01.cc
! b205f5a88c0141d48d5886edd48d2871  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/ranlux4.cc
! 30c2260b6f7ef789dbca00748433f746  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/ranlux4_01.cc
! fa0793122ba7d52ff18d2d74f0665e78  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/default.cc
! 0043b8b1918cd5c473290d41ddfa1aa1  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/gen1.cc
! 15ea86bea2ee60721ef13dc092444803  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/seed1.cc
! 3a23951647501366e0c615338d8cbc0c  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/seed2.cc
! c6a308ee56aeae2fac82f105235ddf14  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/operators/equal.cc
! 014bb384fa5749ffc4d02f5e8b45805b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/operators/not_equal.cc
! bba92ba4d24754994159aaf538546fc9  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/operators/serialize.cc
! 1c07e744c3636008fd75e42fe3f39cdd  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/requirements/constants.cc
! 83b4431a5a20d41e806ebd50e1991f0e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/requirements/typedefs.cc
! 61f39e0c56c6ada7bc5dcb575586449a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/default.cc
! b8f7df0c2010030eebf7b2d14ad49e15  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/gen1.cc
! 8531b0125729a5dd09b74c7d6a7997f3  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/seed1.cc
! f3c24039f035897a2755a7d2a2c018ed  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/seed2.cc
! 0e48dadbb64a874db80b48643e9d1e50  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/operators/equal.cc
! 11319b2c817b977bc36f66b39229e17f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/operators/not_equal.cc
! 8072c4a684ed0ded432d76682ee0f20b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/operators/serialize.cc
! c6e43d944ca6be7e52a50892a2c46a97  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/requirements/constants.cc
! 4072f44d7029eedc6594b3f885e3cf69  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/requirements/typedefs.cc
! 89d2c2a6c0562845f632e1e2e397ad4e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_int/33128.cc
! 0752af21ff0673777271fde918c41127  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_int/cons/default.cc
! 000c0c693e19b670cd3a923d72a9955d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_int/cons/range.cc
! 4412cb4a797f4fd5e76ea5ad72e635d8  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_int/requirements/typedefs.cc
! ea875d669f66ea5858b7c13582234627  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_real/requirements/typedefs.cc
! af09902743f81d3e588201f478898774  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/variate_generator/37986.cc
! 08ec5a1d4db354bfc82530a1857440cf  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/variate_generator/requirements/typedefs.cc
! 664c0e07e2a46d8c71ff95b3580945d2  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/cons/default.cc
! ae1350243c0275b8495ea5c7c7e284ac  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/operators/equal.cc
! a09daaf9ac32f77304f832d004a1eeee  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/operators/not_equal.cc
! 79d6da3ea696290da373c29a9cf371d1  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/operators/serialize.cc
! 81a9c189ddd05495e2ef5cb1fab05f9b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/requirements/constants.cc
! f89e1caab36b540ecf7610ffc4019c4d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/requirements/typedefs.cc
! 073071b942d7e8ac17119fd3e4de5928  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/check_nan.cc
! 472c221b6058ca25e0927de74f0a7507  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/check_value.cc
! fdfc1f7a5a31639baecab294a7ac62ea  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/compile.cc
! 1206ec3dd4d990b041d213aec5a717fa  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/compile_2.cc
! 7619113199f712c4bf136731af1da8dc  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/check_nan.cc
! 6734fa7fb4c21e3ee5def189c00f6e5f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/check_value.cc
! 4b102bbb560a748487bae3f3f7263553  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/compile.cc
! 57eb59ee2334beda7872d8c9c1beb475  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/compile_2.cc
! 37f6df1328b2b251dca38c04855a6c28  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/pr86655.cc
! a77ddfebdc880d3f8ba671171c3facfa  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/03_beta/check_nan.cc
! 0f210bbca67ae853d2a924b2ad9eb747  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/03_beta/check_value.cc
! 8c439c8e54815a2e64ac9d9e2f6d3c7d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/03_beta/compile.cc
! 039ca61dd17c78327baa09a57c89ade8  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/03_beta/compile_2.cc
! 413bf9188ffdbdce71052833a1dc121e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/check_nan.cc
! ea3901ccb39a5fe83c388e9b2ea8cd2c  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/check_value.cc
! b8af522acc4cb0af20efa8befe582cbe  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/compile.cc
! e48c45db09402f83892cd905ebe0a72e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/compile_2.cc
! a658098ce0ad7b4101ad45a2a4c8b6b1  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/check_nan.cc
! cf44b1c953919bb8e7c77e0810f1a015  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/check_value.cc
! 7de3851be7c5ce08e68f984fe22b0020  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/compile.cc
! 8e489f8ee2c080589f2d77f5425f6620  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/compile_2.cc
! bbbd17c9a95ad0c45bf803feb4c8b4a8  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/check_nan.cc
! 217c29e9e0c06818f287da247133d067  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/check_value.cc
! fac157172a5c1771285c696f689e5b8f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/compile.cc
! c2467bf3b05e62b7bd8a194d87ebf0b2  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/compile_2.cc
  4618aff82312f2efbcdba760637d68b5  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/pr66689.cc
! bca141eb958b0ee3c2bcd2ad254d0ecf  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/check_nan.cc
! 86fdb216a60a2af9110b0f22695d2d47  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/check_value.cc
! a4779ac133f1a097569ca64f04ce89d8  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/compile.cc
! 7b4600593baef42c07e1d33c96c0543e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/compile_2.cc
! 1bf2ad58161e3cf3e2171f49a22ccd66  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/compile_cxx17.cc
! 9734a8553f6f33391b17dd35cd25646a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/check_nan.cc
! 415a69a0704830d2e8c097ab73516a09  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/check_value.cc
! b420377eaa51ecd9f54e946934d25f6b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/compile.cc
! dea6f78cac0f81dd3c775702134289fd  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/compile_2.cc
! bf139fa8f37043c542ab99974cd316fd  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/pr56216.cc
! ee30815cc23c5ffa49ca4f24f19a40c5  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_nan.cc
! bf25f0f9e83d3ec439ca875686ecf8df  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_value.cc
! 8fdaefa869f87922febaec31096eb133  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/compile.cc
! e15b369b1821abf78a71bd327634007f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/compile_2.cc
! 30911df4d38cd398f515e0229750d316  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/airy.cc
! 7a0e2485cf5b5deb68770d020ebb4d90  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/check_nan.cc
! 74f7b39c8c1974a7c8fd862310c2e887  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/check_value.cc
! 9425d2a006d795fd4d168a59efca7977  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/compile.cc
! b5cb6157a5a85b30b62a91f5b9309cf6  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/compile_2.cc
! 84857b689b93ff3ba5d7468b79ff4ba4  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_nan.cc
! ef3af80ab385cf0e1932016f0ddc70be  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_value.cc
! c4fbe4688c2db7a383966c049f97121a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/compile.cc
! a547ddeb48b61902cc806f6a85aeb379  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/compile_2.cc
! 21839fac9918d82946c60c9ad9959e3e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/check_nan.cc
! f12844d2c0f16293e226300140d8ca67  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/check_value.cc
! 4e4c858499a5c983aacf23d73a599e20  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/compile.cc
! c4997a9f9b510e31325b098125edd024  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/compile_2.cc
! e99cb5640807427b0bad61489e6383e8  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/check_nan.cc
! c6405f1a433153804631b83e732c9bfc  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/check_value.cc
! 309ed1d7514a87e23ae1c1d15f3b5ae0  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/compile.cc
! 134d238e5ef8513f0c5d225008405810  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/compile_2.cc
! 890fdadda2cccbcfb5b6799c728d27a1  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/check_nan.cc
! 5010b744c78a5314e084940268ea5277  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/check_value.cc
! e038f70aa5ffa9658b7732cac4dea9af  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/compile.cc
! fbb71f6479c051ba77d46d24f6b886e2  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/compile_2.cc
  b780a349356e83ff98346ea066a7c8c7  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/pr66689.cc
! 880cd3456727b13a95543ae5517ce8c7  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/check_nan.cc
! c628815a455d418259d04e13363d2d8d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/check_value_neg.cc
! 3d09d8db8dc75f179ecf79441fc0e73e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/check_value_pos.cc
! e16169e8c0dd818be227fd34d022c0bb  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/compile.cc
! 83273d5ed4682546ce1780a8ddaa89f3  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/compile_2.cc
! 00c8cdfb10a0a4a008664af648e38b22  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/pr68397.cc
! bdbb1825fae6e8bd18eae1da6f30f089  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/check_nan.cc
! 6853d664a945dff6f2a7b9d35400b0d4  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/check_value.cc
! 972e61c5bdd527d95270410d6a9a309e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/compile.cc
! 84dac87c2849aeeae8a1e4b89db8b1df  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/compile_2.cc
! 8861d33900226b76c7498961b13eb141  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/check_nan.cc
! 2e058fde3fb3c6e73290f9ed88066f5b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/check_value.cc
! 7d9dd4cbb9d06a5729749b2e4e012b30  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/compile.cc
! 142ccb979ebf7c1877b7d01bf59becef  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/compile_2.cc
! f0fb959f5c7a04c34b3ea702896881bb  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/compile_cxx17.cc
! 21cd60bc697a46a65f8b0e4c5d35687d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/check_nan.cc
! 4088c7710537db084d40a2999e71f1be  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/check_value.cc
! 476c6141ffe8cad422247163ad165fb5  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/compile.cc
! f70e7852db993b0ab27f52f6d90faac7  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/compile_2.cc
! 1392dbb0beca079e12b5fd6e24d9dadd  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/check_nan.cc
! b3dba2bf7fbe7805831d092ac74c86e9  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/check_value.cc
! 87f482899a082993300b4b25a98ecd1d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/compile.cc
! d50a9f02138a90f1a4cc2d81198e45f2  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/compile_2.cc
! b40b090b3b7beb35386b96683c78558d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/check_nan.cc
! fb358fabfd972698fd4d703a962e1b9b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/check_value_neg.cc
! c83b5a8145a2f215b3bf164a824379a2  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/check_value_pos.cc
! 9579ba0c1349f5e6bef5fecb6b639997  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/compile.cc
! 456632c8b830aa18a546d202a0497037  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/compile_2.cc
! 9c3882308157089454e3fea71be70a97  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/check_nan.cc
! b6e723626fd10ca422ccc9ca289b59ac  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/check_value.cc
! 5445cccff47ec8f28ac7b60c08e37527  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/compile.cc
! ec1a238e903cc9e0350f024871e2c2c9  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/compile_2.cc
! 55a2ddf1d1e262c0d2718d5b7bc29cac  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/check_nan.cc
! 70d7878dfe72a8c804564db71dcc35b6  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/check_value.cc
! 14334776ac634fbc211cfe8a452d799a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/compile.cc
! 4b1bdc58e18d107c6900aa8fcdfab4ca  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/compile_2.cc
! e1ea0652d09f51ba788cc476030b5360  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/pr86655.cc
! 3bc108b237690ed110cb980615d14819  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/check_nan.cc
! 60e4eee4228b33da63d0b14676e97ecb  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/check_value.cc
! b0043f17354a31a1923ea1a0db0ccf1b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/compile.cc
! 74d77bbc6ae1ed0f634362c1a78c4c54  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/compile_2.cc
! e4f46afd8301c90b412d655547a48067  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/testcase.h
! 5b8efa8053866a86631a7b2da67554db  libstdc++-v3/testsuite/tr1/6_containers/array/capacity/empty.cc
! bdbb80fe01ac252a580bf394cc582b58  libstdc++-v3/testsuite/tr1/6_containers/array/capacity/max_size.cc
! 00acf663e772f9b4e0ae21df5bb0b7fa  libstdc++-v3/testsuite/tr1/6_containers/array/capacity/size.cc
! 1e3bd5d3999d54edbbba93e5f88c6c45  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/equal.cc
! 7fccf0d6fd324728122493914aefd63d  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/greater.cc
! 0057ac48244bdcd3e4b827189b853491  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/greater_or_equal.cc
! 82449fdd18c86c81cd68f37d3abe5b69  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/less.cc
! bbba376cb0805a39b204932e81ef3cd1  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/less_or_equal.cc
! f6ff1570155fc1f714373979f49ef3e0  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/not_equal.cc
! 650b0bea25e160cd236abf2e224a29a9  libstdc++-v3/testsuite/tr1/6_containers/array/cons/aggregate_initialization.cc
! d404ecedc2f363417719b77869db803e  libstdc++-v3/testsuite/tr1/6_containers/array/element_access/at_out_of_range.cc
! 09f096ad5a00bbdd608c45a60a3f4ab6  libstdc++-v3/testsuite/tr1/6_containers/array/element_access/back.cc
! bc931747ba3684726ebd47a01f73f74c  libstdc++-v3/testsuite/tr1/6_containers/array/element_access/data.cc
! 01524e84fe5a166f7b6d92eebf0ced38  libstdc++-v3/testsuite/tr1/6_containers/array/element_access/front.cc
! 34038ba5d84039329804a10fd3fd2031  libstdc++-v3/testsuite/tr1/6_containers/array/iterators/end_is_one_past.cc
! 69d6c0253ff361d07424ad267f2414bc  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/assign.cc
! 3020fd91ca942fc11fb8a255b1f60db0  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/contiguous.cc
! 19baccbbc98ce5871ec5831d7f909f63  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/explicit_instantiation.cc
! 4d7f5558894671ea9ed3113e5415acef  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/member_swap.cc
! 238479f2fcaa9cba3aa2dcf3d0040d9b  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/typedefs.cc
! fc5a183b553611d2d564610348585148  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/zero_sized_arrays.cc
! 15bde2576e0afac76f87bc937b1c9243  libstdc++-v3/testsuite/tr1/6_containers/array/specialized_algorithms/swap.cc
! 4d8d6487ff1765ed0c151cef46090b7a  libstdc++-v3/testsuite/tr1/6_containers/array/tuple_interface/get.cc
! 3c514be49ef9dd91acc9db28d68f5ae2  libstdc++-v3/testsuite/tr1/6_containers/array/tuple_interface/tuple_element.cc
! 1a3f033851cc97378483700d7c6d4dd5  libstdc++-v3/testsuite/tr1/6_containers/array/tuple_interface/tuple_size.cc
! 2330a4ae3a927d7710dc7c3c628c4e9f  libstdc++-v3/testsuite/tr1/6_containers/hash/24799.cc
! e8d29e94a831ddd41ede9c66bb2b19db  libstdc++-v3/testsuite/tr1/6_containers/hash/operators/size_t.cc
! bcb0f8691d7502f9225a6f969e31ad95  libstdc++-v3/testsuite/tr1/6_containers/hash/requirements/base_classes.cc
! fba7238bdf74860300d0ba645c647aaf  libstdc++-v3/testsuite/tr1/6_containers/hash/requirements/explicit_instantiation.cc
! 05ff0dbf2702689ebcef54d691914424  libstdc++-v3/testsuite/tr1/6_containers/headers/array/synopsis.cc
! 0f3f758382184d47998ebccefe032729  libstdc++-v3/testsuite/tr1/6_containers/headers/functional/synopsis.cc
! ec474227048f890f15e5cd1e8a5b83b0  libstdc++-v3/testsuite/tr1/6_containers/headers/tuple/synopsis.cc
! 5ebeac0392f042ed40e60c74e214d176  libstdc++-v3/testsuite/tr1/6_containers/headers/tuple/types_std_tr1.cc
! 6eed2bcebe950ae5bb4f8ffbc729f36b  libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_map/synopsis.cc
! feaef726bc1f73d06cdd49d6dcb8e88e  libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_set/synopsis.cc
! c5cb242c5293532c569c34fe8d53e980  libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/35480_neg.cc
! d0a530a7dcaf3c69cbd274f2fddf217c  libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/comparisons.cc
! 22e41072715e60ec8c50c5142d447a14  libstdc++-v3/testsuite/tr1/6_containers/tuple/cons/assignment.cc
! 992c071fa69b237ee565e8081e27ffc4  libstdc++-v3/testsuite/tr1/6_containers/tuple/cons/big_tuples.cc
! 48261dc6d245ab8fe0e5a12cc023be08  libstdc++-v3/testsuite/tr1/6_containers/tuple/cons/constructor.cc
! 7bbdb973eb43824a810dac4db9ee3cf1  libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/23978.cc
! a431d772d740ab89647cb5626f2c72ba  libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc
! 2d9d5e87205dd18a277ba4ffd5fe1304  libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie.cc
! 7396edf302a814892bf6a445d2b5b1ab  libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc
! e2e161e4e554398f1c5f15a6a496ad5b  libstdc++-v3/testsuite/tr1/6_containers/tuple/element_access/get.cc
! 56f677229f2b848b74544acd517b741f  libstdc++-v3/testsuite/tr1/6_containers/tuple/requirements/explicit_instantiation.cc
! 4bd2fe7be88ed9ca2ae8a9d19c90d377  libstdc++-v3/testsuite/tr1/6_containers/tuple/tuple_element.cc
! 69ec40f990e95627ebe57af91f64d858  libstdc++-v3/testsuite/tr1/6_containers/tuple/tuple_size.cc
! 958663fedf53aca0b40857603722caad  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/24064.cc
! d751bc9d4cacbec4f39f1742a8fcb3a2  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc
! ab5e29f01dc4d550d26ea1ca1d7d2eea  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/erase/1.cc
! b93122cfb5d42b26335a1749bea60f52  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/erase/24061-map.cc
! 335b42934e3b35b21959ee891c8db7a3  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/find/map1.cc
! 9c61ceb598142157f608dddba0acefaf  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/insert/24061-map.cc
! 0bdd60186cde1d36e3cb6dd13b6aaf11  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/insert/array_syntax.cc
! cca11c092f2731292e12ccbba1a0fd6a  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/insert/map_range.cc
! 530de8627c2649b0b7f415586e908b90  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/insert/map_single.cc
! ca5d64e85279df49d6a18a9ba14e869d  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/explicit_instantiation.cc
! b4d5c55d39aec5032ab18b7fb89a1b67  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/iterator_neg.cc
! fa1c5d5db8d3b246abe8b69905959404  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/iterator_null_neg.cc
! dd824f8ea0f0d6d4e8367c0689b1bfbb  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/typedefs.cc
! 7e8c0be3157118056ffa298f2dbb754c  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/swap/1.cc
! bf972c1e5b9114892dee542ae57288e9  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/swap/2.cc
! cef8789cea0d9bc3be9196a7f34c66a4  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc
! 7b9dd3b42d51bb0063b699384b1b4d06  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/erase/1.cc
! ddf702856dfadf5faae7cb45b392ba4b  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/erase/24061-multimap.cc
! b3c10d94a919f17c50136d523bee9fe8  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/find/multimap1.cc
! a1b57f6a6fe9a02bf89e80d7799cb194  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/insert/24061-multimap.cc
! 6fa7f1a7beebdcec90c14a99994d8011  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/insert/multimap_range.cc
! f29141c63213a5f6095094d4a58059ec  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/insert/multimap_single.cc
! bf726ee0bac8b947dd394112ad286e7c  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/explicit_instantiation.cc
! 5443bbdeca34109a057b8a4f6838b3e1  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/iterator_neg.cc
! 2cedf8dd5bb7e5d49f3efb191e943ea2  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/iterator_null_neg.cc
! 8c503031b1b290ebe6a7150c0325c1b0  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/typedefs.cc
! ebc2a11c137fece99187a59dbdfa480e  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/swap/1.cc
! 05533720d82e6d4c3b70de338f88d735  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/swap/2.cc
! 217bdffab55945a6b4e517fece9502a9  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/24054.cc
! 32a9e6425756f5bd82dbab34cc11f955  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc
! 6cff91ecee643be4bcb8685720ab1685  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/erase/1.cc
! 70f1578fa4bd7dfc93d007ad5bbcb1cd  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/erase/24061-multiset.cc
! 5a96ccebd7cefb67f0294df6dfbbc3c3  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/find/multiset1.cc
! 3d8238e1e8ff107103b50ee6c380de8b  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/insert/24061-multiset.cc
! 30fc0bde3e177fa922510dc31be19315  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/insert/multiset_range.cc
! 8c028950c91b37d91e9c278618bcd002  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/insert/multiset_single.cc
! 662d30b7c46780b18e6328da0a8eb174  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/explicit_instantiation.cc
! e6d2fef22d29e79b63fe5091a61ee911  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/iterator_neg.cc
! 1b0ac2ab1008eb98ea79750aedbddbca  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/iterator_null_neg.cc
! f2df5673f6775ad630086f142d1e4655  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/typedefs.cc
! b8ebc7b8c6a69522ad70e2f4ad2727ea  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/swap/1.cc
! 5a865718e3aaff21e018d764cfb8ce40  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/swap/2.cc
! 61c3f375ef586c26838758f22e79cec4  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/23053.cc
! c2d9ed65c9651ff56d8789a94ef43d7e  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/23465.cc
! 3f9eadbfa4fbc58a7f5502ecb2ce3ad6  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/26127.cc
! 3af6b35283ea246cccea47d08f8539bd  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/26132.cc
! 9a7c2b993573fdfe8e3b72e77c05b8d6  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc
! af8b990acdea4f357cf5daeaccdec9d8  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/erase/1.cc
! cfb6b81d6e551c992eb9b1b5a5b526e7  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/erase/24061-set.cc
! 696fd5480a46361d23c7ef721b670ce1  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/find/set1.cc
! f6e22f27f17b0f7e4e1b91b9708e1261  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/insert/24061-set.cc
! cbeec6e86ae3d0e44d68c3e367c6d319  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/insert/set_range.cc
! 0a249483a512bc0d8f6390cd7d7352f5  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/insert/set_single.cc
! c82b915c1924c7c21e6f4f3ca0d12909  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/explicit_instantiation.cc
! 4212e867f4cefd96965eb600e5bc07fe  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/iterator_neg.cc
! 462c6d8a1326d30a75477421fb796a0b  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/iterator_null_neg.cc
! 684da9da155afeb9407bfba2094ac2b7  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/iterators_default_constructor.cc
! 89a839f408c666e34116a6480d08f3d3  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/typedefs.cc
! b0b6ed1d19e16d37c07d642976d4ba67  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/swap/1.cc
! d9a79105cd4c637e8dbabade3ee78215  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/swap/2.cc
! 70e90a1f1a24d2c99cf2f13c464371d3  libstdc++-v3/testsuite/tr1/6_containers/utility/19535.cc
! 3508afae24267bb72a9db65c775669ae  libstdc++-v3/testsuite/tr1/6_containers/utility/pair.cc
! ef6f71b3a80203880bd5c4792725c291  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/cstring.cc
! ebec773894985d9c0b44a171316a6345  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/cstring_op.cc
! 7426f639bab9000b37735abca68020ba  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/pstring.cc
! 0f379b6feccc5492a291d443933da8b5  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/range.cc
! fb3c05403b4b8eb186dbcd0a0cab87ec  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/string.cc
! a42fa0adb46d2abcb4d79ac3d4ad13d7  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/string_op.cc
! fcbe3dcdae4c56740c4774837144bc30  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/cstring.cc
! b1e15e0a6eb36b03b21fe60f30ec95cd  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/cstring_op.cc
! eb8091efa62dbcd00813d51f2972f43d  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/pstring.cc
! 954b95cb5fc8842210d3982d800ff73b  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/range.cc
! 085f6697db80f9f9962c68a681c7ce6f  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/string.cc
! d51ea56a64bac466f749df12fc6796de  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/string_op.cc
! b1a49bc4fca85363b7dffb953f37b3ec  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/cstring.cc
! 1f4045b842205e9011ea1d311910e88b  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/default.cc
! 5e5c9fdfbc5f67fdf6b93376daa06163  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/pstring.cc
! 6cbbeff22e26dab608c5c14abdc9aec4  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/range.cc
! 35424c83e4d1a7dac09282abd22fda4f  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/string.cc
! 9ed04f8c85f9dc72baa871b56f1a5122  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/cstring.cc
! 682d7055a30b2db0ce879f79f30a23cd  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/default.cc
! 47ada8514bb4543f7cf1b5eb03dd109f  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/pstring.cc
! c51aba7bf65a09b2e32a2bd22e834615  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/range.cc
! 21bef6eefa557b776ac55b0de2722f5f  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/string.cc
! 773e0964792c7bc00d555b05e7ea6129  libstdc++-v3/testsuite/tr1/7_regular_expressions/match_results/ctors/char/default.cc
! 73e214a5f63926622262aad3d5f266d3  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_awk.cc
! 6772a81147ba1baf28787426b0265783  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_basic.cc
! 20a84a76b64b85d1b688d58e5373e49f  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_ecma.cc
! 3120fe00f5f88eaf40f1adbc3adc4cbc  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_egrep.cc
! c5a4a78e41a01d6926284a551d8277ba  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_grep.cc
! 4d6fdbb629ea15e0a55261e7c109203d  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/default.cc
! cc408db6ed5e6f2a0c28f1125da119f3  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/ctor.cc
! 72e85a1641ea572f211d1abb9626d1d7  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/translate_nocase.cc
! 3d95125e38913b7e3ec2d40b5eb71a89  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/value.cc
! 7f40f7c1bea0e137bd9173221a2840e9  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/ctor.cc
! a99deb18941dfedcc753d227520aca94  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/translate_nocase.cc
! 3d95125e38913b7e3ec2d40b5eb71a89  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/value.cc
! 02ab8d9a89fd881d9598fb39a38b510d  libstdc++-v3/testsuite/tr1/8_c_compatibility/cctype/functions.cc
! 68ecf0aa587c4ac6ac4125bb61425bb7  libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/functions.cc
! 7369c4fe17d672fa54ebc9df858ce76d  libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/types_std_tr1.cc
! c6ad42ddc3636a6b97c396dce861d061  libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/functions.cc
! 2a5b2657594a4fd2985740af538eaa1c  libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/types_std_tr1.cc
! 73324f761e5acbecf9ce64e890278a28  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/51083.cc
! 6e82d908cab4395b7a94d2684517fe18  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/functions.cc
! cf3e21e6c73107c1e9f760462552b969  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/overloads.cc
! 7e83583fb1a62dcf253fc21a8f9f82d3  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/overloads_neg.cc
! 91b7375b7d25b4b98c81cf54908cf8b8  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/pow_cmath.cc
! 72ef99c03b3f3f16487b82c5e6445a0a  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/templates.cc
! 16957bbb897266d08b1fe23afb5f72ba  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/types_std_tr1.cc
! 357091e5811820e61447a50a513965e5  libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc
! 77aa6f964f7647194a7f85858392192a  libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/51083.cc
! 32f9c562dec4fd2c38301ed475e4563c  libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/functions.cc
! b472697eb58bc5dbe9e42aa65a798d67  libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/overloads_float.cc
! 5398ea792bd9bef6d57ad7fed966cecd  libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/overloads_int.cc
! 7e3377b516687f6ca4655aed371dce1a  libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdint/types_std_tr1.cc
! c943779acbb4064d671fe13195ea6150  libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdio/functions.cc
! 71e169ce1f7d106c8624b8734ebad5b4  libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/functions.cc
! 09f7e1882b87989ab4d101f3cf8cbcf8  libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/types_std_tr1.cc
! 52b3346039ee2164851f22da08b7721f  libstdc++-v3/testsuite/tr1/8_c_compatibility/cwchar/functions.cc
! c8a0c4dceadd15c4d6af6a728d25b350  libstdc++-v3/testsuite/tr1/8_c_compatibility/cwctype/functions.cc
! 61fa289d03c65bb4f0cda9d11caf090a  libstdc++-v3/testsuite/tr1/headers/all.cc
! 9ad6bcd8b44d87756069dac2dbca6e09  libstdc++-v3/testsuite/tr1/headers/c++200x/complex.cc
! 4caa91cd778db6272c9db25f1acb7916  libstdc++-v3/testsuite/tr1/headers/c++200x/math.cc
! 72620fa20222ca1409da29ae4206337e  libstdc++-v3/testsuite/tr1/headers/c++200x/using_namespace_std_tr1.cc
! fec8c25bb9edc90d022d262f9cb944b4  libstdc++-v3/testsuite/tr1/headers/using_namespace_std_tr1.cc
! eddcfd8d466e8f2fc2a89c50a27b159e  libstdc++-v3/testsuite/tr2/bases/requirements/explicit_instantiation.cc
! cf56baefbb90d5f81f0232b35ddd3ee2  libstdc++-v3/testsuite/tr2/bases/requirements/typedefs.cc
! b28a610276f7bca034f16cb6f00614f7  libstdc++-v3/testsuite/tr2/bases/value.cc
! 96461b031c43120004a5bd6b7d6a1b81  libstdc++-v3/testsuite/tr2/direct_bases/requirements/explicit_instantiation.cc
! d4e7157f0151be141fed1e3b70cefb2a  libstdc++-v3/testsuite/tr2/direct_bases/requirements/typedefs.cc
! 664a7a94eddb84271a0bf978f85762ba  libstdc++-v3/testsuite/tr2/direct_bases/value.cc
! 5a92e2e2697869bbcd3df257a29d2ea8  libstdc++-v3/testsuite/tr2/dynamic_bitset/cmp.cc
! dee858defcf51ee106ccac8f3fa3e9c4  libstdc++-v3/testsuite/tr2/dynamic_bitset/cons.cc
! 0eccfabb41ba4ef89c61b1716b174e37  libstdc++-v3/testsuite/tr2/dynamic_bitset/copy.cc
! e1cedf6b7d107e90aae14078e03b262e  libstdc++-v3/testsuite/tr2/dynamic_bitset/move.cc
! a498f81c4b62e962bb1156a0655d1fa6  libstdc++-v3/testsuite/tr2/dynamic_bitset/pr58729.cc
! ed55eb2c0d2a05e9509a2c465df1c374  libstdc++-v3/testsuite/tr2/dynamic_bitset/pr87784.cc
! 2ba595b67c85d57a4b4162fc6aac3654  libstdc++-v3/testsuite/tr2/dynamic_bitset/pr92059.cc
! 79cc1559296f786ea07a08f9f179f961  libstdc++-v3/testsuite/tr2/headers/all.cc
! 005b293236848da3df596a77df9e492d  libstdc++-v3/testsuite/tr2/headers/using_namespace_std_tr2.cc
! d975b498bc68d906c7c58d6e243db771  libstdc++-v3/testsuite/util/atomic/wait_notify_util.h
! c5ce4d0fb5756a0c085561a0661ff5fb  libstdc++-v3/testsuite/util/common_type/assoc/common_type.hpp
! 803bedea5dda87fff6b07a6062fe94c0  libstdc++-v3/testsuite/util/common_type/assoc/detail/comb_hash_fn_string_form.hpp
! e47d1b378e9fd3594b3d2ccde88a297b  libstdc++-v3/testsuite/util/common_type/assoc/detail/ds_string_form.hpp
! 29887265b225b0fac95e9ff375228ac6  libstdc++-v3/testsuite/util/common_type/assoc/detail/list_update_policy_string_form.hpp
! 077ddd19117bc989ae391855af3f227c  libstdc++-v3/testsuite/util/common_type/assoc/detail/probe_fn_string_form.hpp
! c93538e0511c74e3cbc77edc9e05bbbb  libstdc++-v3/testsuite/util/common_type/assoc/detail/resize_policy_string_form.hpp
! 9fc519051c36a9a58665d011975cb371  libstdc++-v3/testsuite/util/common_type/assoc/detail/size_policy_string_form.hpp
! 2ece31fce3fe23bf24091228f95058a5  libstdc++-v3/testsuite/util/common_type/assoc/detail/store_hash_string_form.hpp
! cfd14e8c81bdb6751f5e7f254c378137  libstdc++-v3/testsuite/util/common_type/assoc/detail/tree_supports_order_statistics.hpp
! 1990be8db967b1ec8515fd6bd1e04fda  libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_order_statistics.hpp
! cd146a451970eb1339af5352d00e7d3b  libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_prefix_search.hpp
! fca62e9113202819f26f5f8309c9bfaa  libstdc++-v3/testsuite/util/common_type/assoc/detail/trigger_policy_string_form.hpp
! 93e4e8f007ce5aa2488e3307352b20a7  libstdc++-v3/testsuite/util/common_type/assoc/native_set.hpp
! 825ccdaeb0efb4c3fd1f581823077bbb  libstdc++-v3/testsuite/util/common_type/assoc/string_form.hpp
! 635d1543fd90516137bd933b34b175dc  libstdc++-v3/testsuite/util/common_type/assoc/template_policy.hpp
! 5c291cfff88cab78ef372efa5b4c154e  libstdc++-v3/testsuite/util/common_type/priority_queue/common_type.hpp
! fdcbcf3cd09a96d1fc4259873993120c  libstdc++-v3/testsuite/util/common_type/priority_queue/detail/ds_string_form.hpp
! bf8e90d26c3c70a1b440ff8a2f606d6d  libstdc++-v3/testsuite/util/common_type/priority_queue/string_form.hpp
! e1db4521020eb6ad98661a6384ac05c9  libstdc++-v3/testsuite/util/debug/checks.h
! 4b75dd043ada615b09a7f9d1410df3d3  libstdc++-v3/testsuite/util/debug/unordered_checks.h
! 224482b0241c44e8d17c84a80d27cdf4  libstdc++-v3/testsuite/util/exception/safety.h
! 332a48d45589bffd014e504368ec9271  libstdc++-v3/testsuite/util/hash_fn/dna_str_limit.hpp
! e3c561e0b288d93e77ff4ffb9e0569ef  libstdc++-v3/testsuite/util/hash_fn/limit_string_hash_fn.hpp
! ab8c59c5ca46b53c648c3483be9275fa  libstdc++-v3/testsuite/util/hash_fn/string_hash_fn.hpp
! f1b00867ea02277a8a99374e0046189e  libstdc++-v3/testsuite/util/hash_fn/string_ranged_hash_fn.hpp
! 167fe553598c0aa1a8f0bcc69d379c47  libstdc++-v3/testsuite/util/hash_fn/string_ranged_probe_fn.hpp
! cfab9ffe4b47c3d388a06acbd6b08388  libstdc++-v3/testsuite/util/io/illegal_input_error.hpp
! c2cf90f977dfecc834733bbdf149eb1b  libstdc++-v3/testsuite/util/io/prog_bar.cc
! 63d6de09da47191c6425db4941cdea64  libstdc++-v3/testsuite/util/io/prog_bar.hpp
! 0b1372b3e6f9b87d872e98ca342515aa  libstdc++-v3/testsuite/util/io/text_populate.hpp
! 6cb4b8bec4a2954dbef59b80c5fc326d  libstdc++-v3/testsuite/util/io/verified_cmd_line_input.cc
! 5d9d9d0a370beb0d43bacdcf7cf2ef76  libstdc++-v3/testsuite/util/io/verified_cmd_line_input.hpp
! e1934a501bc6eb29bfe692b966265193  libstdc++-v3/testsuite/util/io/xml.hpp
! 42ad9dec65e80f57d5d0b9941f09069b  libstdc++-v3/testsuite/util/io/xml_test_formatter.hpp
! a08724c5d6e4b4365391a7d3e43c2201  libstdc++-v3/testsuite/util/native_type/native_hash_map.hpp
! b6ad925869d77c4a8a04f4b407cf0893  libstdc++-v3/testsuite/util/native_type/native_hash_multimap.hpp
! ba221ad4ceec75242d2e55b32f077fd4  libstdc++-v3/testsuite/util/native_type/native_hash_set.hpp
! b6fc35db46b338b7251e922225f119f4  libstdc++-v3/testsuite/util/native_type/native_hash_tag.hpp
! 96acced94d3406b22b7da1fac1f6014d  libstdc++-v3/testsuite/util/native_type/native_map.hpp
! ab09df4736c1ffa6200e95f318f695f7  libstdc++-v3/testsuite/util/native_type/native_multimap.hpp
! cedef0c52e2fc001b7c70f2b4274f989  libstdc++-v3/testsuite/util/native_type/native_priority_queue.hpp
! 098b791d84c69f255666caf4d774f970  libstdc++-v3/testsuite/util/native_type/native_set.hpp
! 708d298594f245ba9e6ee78b38cf977e  libstdc++-v3/testsuite/util/native_type/native_tree_tag.hpp
! 0a3a082a82f5a979b7f9a22edfeeca0f  libstdc++-v3/testsuite/util/performance/assoc/mem_usage/erase_test.hpp
! 38319db6ba9b5c2c15fc555ce3947d8f  libstdc++-v3/testsuite/util/performance/assoc/mem_usage/multimap_insert_test.hpp
! 6195a14c516614f6545860a9a748b631  libstdc++-v3/testsuite/util/performance/assoc/multimap_common_type.hpp
! e8693af8bbf4b8037da1196bf2fea935  libstdc++-v3/testsuite/util/performance/assoc/timing/common_type.hpp
! ff3b6535718fcdee9aed6e3d495957ec  libstdc++-v3/testsuite/util/performance/assoc/timing/find_test.hpp
! e400d5d306ca5ff59fe11b44af20d0b1  libstdc++-v3/testsuite/util/performance/assoc/timing/insert_test.hpp
! 5c8e7eea83632851ce253f35a0541500  libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp
! 1d001d280644b137df52a672ceca7193  libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_insert_test.hpp
! 9589378723527924e776a5445c77ade2  libstdc++-v3/testsuite/util/performance/assoc/timing/subscript_find_test.hpp
! 435dc6defad5fc5967013187b0032265  libstdc++-v3/testsuite/util/performance/assoc/timing/subscript_insert_test.hpp
! 2489d36d18c66c76a1ad7368d736784e  libstdc++-v3/testsuite/util/performance/assoc/timing/tree_order_statistics_test.hpp
! ca3f05473a8d97620e5c7396f7b8d124  libstdc++-v3/testsuite/util/performance/assoc/timing/tree_split_join_test.hpp
! 1917a409db6dda9d9f3576350f5d5b0e  libstdc++-v3/testsuite/util/performance/io/xml_formatter.hpp
! 552e189668f5fd98c7d35ed0c7398214  libstdc++-v3/testsuite/util/performance/priority_queue/mem_usage/pop_test.hpp
! ebc9bcbd0e6d5815a4a52964d236c135  libstdc++-v3/testsuite/util/performance/priority_queue/timing/join_test.hpp
! 394c09e7d6b474523e27c8e2cf08cc52  libstdc++-v3/testsuite/util/performance/priority_queue/timing/modify_test.hpp
! 6c6713b531b1d4acc629fef1e1495e73  libstdc++-v3/testsuite/util/performance/priority_queue/timing/push_pop_test.hpp
! 2898b73b579af95720810cba3b5e83d4  libstdc++-v3/testsuite/util/performance/priority_queue/timing/push_test.hpp
! 90e856db31989d3508e6bd6cdf55cddf  libstdc++-v3/testsuite/util/performance/time/elapsed_timer.cc
! 1ff0d74b48711bc77748d0b909800982  libstdc++-v3/testsuite/util/performance/time/elapsed_timer.hpp
! 3190c7174f6a02208176bbc5675fcc77  libstdc++-v3/testsuite/util/performance/time/timing_test_base.hpp
  f229f005fb6b0edfab2a25224f4aa670  libstdc++-v3/testsuite/util/pstl/pstl_test_config.h
  315ea42a1d905634a70b6bfebf2b60e4  libstdc++-v3/testsuite/util/pstl/test_utils.h
! 9ada98f8a1b102bb143bacf9cc3a8c7f  libstdc++-v3/testsuite/util/regression/basic_type.hpp
! c73349323ee0def05a3e98e9c56ad654  libstdc++-v3/testsuite/util/regression/common_type.hpp
! 71573e5f500982c301d54fe932412bc6  libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h
! 7d14115816421091068c920230c0c2e6  libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
! de6c07bb4ec2e74430cc172025587872  libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp
! 07b676056467de1ff07267b6af1f5144  libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.h
! af9845a28f0233407cc4601fd54d7728  libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
! 722aea15e859e7f9a94f1dc875e7363d  libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp
! ba08767a5589b3dbf4b5b501aa098837  libstdc++-v3/testsuite/util/regression/rand/xml_formatter.hpp
! ca6d2947e096ab49a1c6356640ac5b3c  libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_load_trait.hpp
! 5675935e7666a36077cfd83c9a2ce119  libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_loads_trait.hpp
! 92656ebdd0d0b2fea5e5c0ca45fd3e87  libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp
! 1b55372cf8df4394eb71ca803b1962ee  libstdc++-v3/testsuite/util/regression/trait/assoc/node_update_trait.hpp
! 36a38f2deff666e29999919737762bb1  libstdc++-v3/testsuite/util/regression/trait/assoc/resize_trait.hpp
! ccf6c77f1bc6b0c70182cd63b5ed842c  libstdc++-v3/testsuite/util/regression/trait/assoc/to_string.hpp
! bb1e810f78384f7f6da90c3dce63f341  libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp
! f3fde6bb9b546237057b02fe8d9a90a2  libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp
! 18712c28dc2a9d6c31ce3070ec5d69bb  libstdc++-v3/testsuite/util/regression/trait/erase_if_fn.hpp
! 10b6ecfbd8c13ea0393282648bd97534  libstdc++-v3/testsuite/util/regression/trait/priority_queue/trait.hpp
! 5fbf959b85b032a0b9a4962e8ef76503  libstdc++-v3/testsuite/util/replacement_memory_operators.h
! 708bbbe17ae49e47c0341a01a7e4cecf  libstdc++-v3/testsuite/util/slow_clock.h
! 0a01d60f83a38392e8e003a6eef7c85a  libstdc++-v3/testsuite/util/specfun_testcase.h
! 78d59ed52eae96cf183b987a4e100373  libstdc++-v3/testsuite/util/statistic/result_recorder.hpp
! 4d2b9acae8e7e8b6f93e915daf4d60d4  libstdc++-v3/testsuite/util/statistic/sample_mean.hpp
! 0be600a4c8597b5b2b92a4a43ab244c1  libstdc++-v3/testsuite/util/statistic/sample_mean_confidence_checker.hpp
! cc2f599df6e692aa861e62c443181317  libstdc++-v3/testsuite/util/statistic/sample_variance.hpp
! c19ea7d2b81b325fb60d02b8d489372a  libstdc++-v3/testsuite/util/testsuite_abi.cc
! 5f5f98f71fe68eb622af78e692168fe5  libstdc++-v3/testsuite/util/testsuite_abi.h
! 8e1f4e43f1dd4359c02159b94339b136  libstdc++-v3/testsuite/util/testsuite_abi_check.cc
! e961644701157db73d4cf2cc9171e468  libstdc++-v3/testsuite/util/testsuite_allocator.cc
! aee0d2978a0aca22621e8d3ff0aa7a90  libstdc++-v3/testsuite/util/testsuite_allocator.h
! a2f6445ffcf9d0cfe166fbc9acb26232  libstdc++-v3/testsuite/util/testsuite_api.h
! 695fd3a6c85e6721e0e1856cb391e5b0  libstdc++-v3/testsuite/util/testsuite_character.cc
! 45083d6138499a97076b79c8648b7cf4  libstdc++-v3/testsuite/util/testsuite_character.h
! a12526b8db17727cb81fc72e102327f1  libstdc++-v3/testsuite/util/testsuite_common_types.h
! 984197a9cc97d5843e07b08a9a1fc171  libstdc++-v3/testsuite/util/testsuite_container_traits.h
! 90db88e42f244f42ad35a897a9461b03  libstdc++-v3/testsuite/util/testsuite_containergen.h
! cadd3d87197d959d51e840cf34ad2697  libstdc++-v3/testsuite/util/testsuite_containers.h
! aeb39a2190eb48653793a7d8905eaae8  libstdc++-v3/testsuite/util/testsuite_counter_type.h
! ee607caf7aa5fd0472cd17cbad7b0bbc  libstdc++-v3/testsuite/util/testsuite_error.h
! b995b5167792ca47c05e7cb0e9a9cce7  libstdc++-v3/testsuite/util/testsuite_fs.h
! 107919fef8e90c0d358a971b89f16155  libstdc++-v3/testsuite/util/testsuite_greedy_ops.h
! 10f68fa333343c768f46d38ea805b39f  libstdc++-v3/testsuite/util/testsuite_hooks.cc
! 4f0f4d2b90ba61df04bae848fe2a33c7  libstdc++-v3/testsuite/util/testsuite_hooks.h
! 1a76def38110431282b928a61ec6119a  libstdc++-v3/testsuite/util/testsuite_io.h
! 92f08f3b55db9748eb24b10f4dae7615  libstdc++-v3/testsuite/util/testsuite_iterators.h
! 4ddebfe4cc094998e91f7fa0549cc59f  libstdc++-v3/testsuite/util/testsuite_new_operators.h
! ea911a831eeefa2e82c77ba84035d7c9  libstdc++-v3/testsuite/util/testsuite_performance.h
! a1640714fc4e3657cefdedd4db899838  libstdc++-v3/testsuite/util/testsuite_random.h
! 21750d2170aee6105ae28fc56a930fcd  libstdc++-v3/testsuite/util/testsuite_regex.h
! 063428f11af85289791b3fa97259d0ae  libstdc++-v3/testsuite/util/testsuite_rng.h
! 146a9ce05621e17b50494bb3f4feecd0  libstdc++-v3/testsuite/util/testsuite_rvalref.h
! 445bb5ae6548a30e1836e8b74c16adea  libstdc++-v3/testsuite/util/testsuite_shared.cc
! 3f43da4f3a13e674d6e64e19ebecd413  libstdc++-v3/testsuite/util/testsuite_tr1.h
! d7927f85e40de3823114f01b93b3bf21  libstdc++-v3/testsuite/util/thread/all.h
  b950d655469c477755252b1e18009596  libtool-ldflags
  1936a81f2a04a996ff99c7ebdebc5003  libtool.m4
! c42c43e38ace4356dd51127ac1bcb083  libvtv/ChangeLog
! 7ad6a0c753c219e31237f212c5854dd8  libvtv/Makefile.am
  b1170aae9472f26fdc8326737dc22aba  libvtv/Makefile.in
  3b765c4f4a0a0f606db1472bce2b8d29  libvtv/acinclude.m4
  84c8143a9310ea291315dcd0c276df5d  libvtv/aclocal.m4
  428060c62738810622a8865de9f9d1b0  libvtv/configure
  cc9f6a09cf2db980b7d7119fd0748406  libvtv/configure.ac
! e0985bd4dd2c46ce20d72dc14110055b  libvtv/configure.tgt
  2caccd848c579fcddd2a8c8106cfaff9  libvtv/scripts/run-testsuite.sh
  09a6150d1619f2508d7844f860b3382c  libvtv/scripts/sum-vtv-counts.c
  4835ec70e1fbcd9acd3c280c0060afa4  libvtv/testsuite/Makefile.am
  fda4739e0005be93900b671246d786ff  libvtv/testsuite/Makefile.in
! a0ef71c1583562599c6231db13e917a8  libvtv/testsuite/config/default.exp
  c3135c06118981205f468524e15716be  libvtv/testsuite/lib/libvtv-dg.exp
  b01596489f4e825c77d9429f5bd51424  libvtv/testsuite/lib/libvtv.exp
  dc26824f08dd227e0cba7e7ebc8f4d3a  libvtv/testsuite/libvtv.cc/bb_tests.cc
--- 113596,115475 ----
  ccd8d09610bb1187b124063e4b7d62b2  libstdc++-v3/testsuite/data/wostream_inserter_other-1.tst
  ccd8d09610bb1187b124063e4b7d62b2  libstdc++-v3/testsuite/data/wostream_inserter_other-2.tst
  d41d8cd98f00b204e9800998ecf8427e  libstdc++-v3/testsuite/data/wostream_seeks-1.tst
! 036a473589cdd7c155aa08967555a5f9  libstdc++-v3/testsuite/decimal/binary-arith.cc
! 4f7fc8195719dcd49d0e670916dbf936  libstdc++-v3/testsuite/decimal/cast_neg.cc
! 9cbc433f3125dba1914343d68aa4b114  libstdc++-v3/testsuite/decimal/comparison.cc
! 405dbce2caf9347a15eca6f69381ad9c  libstdc++-v3/testsuite/decimal/compound-assignment-memfunc.cc
! 7178b02fe90919f0cc44de4f984007e3  libstdc++-v3/testsuite/decimal/compound-assignment.cc
! 9e3a56337e2bd239e0c7fb447130e310  libstdc++-v3/testsuite/decimal/conversion-from-float.cc
! 1c6fc70c52a3ad0aad5b611769e73511  libstdc++-v3/testsuite/decimal/conversion-from-integral.cc
! 2ec4f8eb2d58af500129816f052ca166  libstdc++-v3/testsuite/decimal/conversion-to-generic-float.cc
! eddb202f5cf3548c8195fa77814454a8  libstdc++-v3/testsuite/decimal/conversion-to-integral.cc
! b30920114112f44019608b90fa01974b  libstdc++-v3/testsuite/decimal/ctor.cc
! 007f23909f0328f51e5f86040cb4ffae  libstdc++-v3/testsuite/decimal/incdec-memfunc.cc
! efc9674fd2af861cfe14804d5b48c3b8  libstdc++-v3/testsuite/decimal/incdec.cc
! a852675c952127611254b56f6d62af18  libstdc++-v3/testsuite/decimal/make-decimal.cc
! 7ecff23847713d6e62cfc1867d486de4  libstdc++-v3/testsuite/decimal/mixed-mode-arith_neg.cc
! 35fd1d16609e9afb62cc47c56e22d3d8  libstdc++-v3/testsuite/decimal/mixed-mode-cmp_neg.cc
! 3c00de99370a3a5e020b0fc7ffe967e0  libstdc++-v3/testsuite/decimal/operator_neg.cc
! fd0b733488110c2d3dbbc7de1e093c15  libstdc++-v3/testsuite/decimal/pr54036-1.cc
! 4c7233e836132fdf46a67e95426e2bf3  libstdc++-v3/testsuite/decimal/pr54036-2.cc
! ee6b58a866de844016b0a7ce5c41d258  libstdc++-v3/testsuite/decimal/pr54036-3.cc
! 4de55e35e6b1673933043def13b54a12  libstdc++-v3/testsuite/decimal/pr58815.cc
! 8fb3f682688a23dcafb58b16d7df8faf  libstdc++-v3/testsuite/decimal/unary-arith.cc
! 1855475c2a7e93a50ac633a4ca41569d  libstdc++-v3/testsuite/experimental/algorithm/sample-2.cc
! e66e3d0a8213f889e00693a20624b593  libstdc++-v3/testsuite/experimental/algorithm/sample.cc
! 4b5040a0f81ae4a0276d46cf10a08ec8  libstdc++-v3/testsuite/experimental/algorithm/search.cc
! 3b916c6cc18cb06aae23303f6b80a2f6  libstdc++-v3/testsuite/experimental/algorithm/shuffle.cc
! 60b153402496f35cee067ca1c627f7f1  libstdc++-v3/testsuite/experimental/any/assign/1.cc
! 15ac155fc8249cc0196f8baa6367c4c7  libstdc++-v3/testsuite/experimental/any/assign/2.cc
! 84b74d4c72e28335f4bb87d5f371eabd  libstdc++-v3/testsuite/experimental/any/assign/exception.cc
! 33b460f445f4a713f204d0ef62594569  libstdc++-v3/testsuite/experimental/any/assign/self.cc
! ad780d7f81cf7f7ccc845b99ed0beb9e  libstdc++-v3/testsuite/experimental/any/cons/1.cc
! 1dda3bdeb69971606b7c9e35ffc4263f  libstdc++-v3/testsuite/experimental/any/cons/2.cc
! d46b351954f82ebe1742e28195d9fc40  libstdc++-v3/testsuite/experimental/any/cons/aligned.cc
! 83d68e3753567dbdc35a87e0e251edde  libstdc++-v3/testsuite/experimental/any/cons/nontrivial.cc
! 836fe3bbe216f4091de1a0b4598e3728  libstdc++-v3/testsuite/experimental/any/misc/any_cast.cc
! 86a34a075f891503307ba7bf70845615  libstdc++-v3/testsuite/experimental/any/misc/any_cast_neg.cc
! 414012fe81873cad2d2957afd95404a1  libstdc++-v3/testsuite/experimental/any/misc/any_cast_no_rtti.cc
! bb6a21c3b983ca1e0f627b097b92d18c  libstdc++-v3/testsuite/experimental/any/misc/swap.cc
! 1b34e67c7efc9319e653ec29baaa5dd3  libstdc++-v3/testsuite/experimental/any/modifiers/1.cc
! 9aeb82007e5ce29ec7227d4d37f394d9  libstdc++-v3/testsuite/experimental/any/observers/type.cc
! 7e7d87fcb89af44411f3c4248a3f2dbc  libstdc++-v3/testsuite/experimental/any/typedefs.cc
! 3adc85a81e4ee80982c53d4fa3f45de9  libstdc++-v3/testsuite/experimental/array/make_array.cc
! 2c6d139700531f8a855705a75e0c293c  libstdc++-v3/testsuite/experimental/array/neg.cc
! eed4d160963378898dde2692dcea87d6  libstdc++-v3/testsuite/experimental/chrono/value.cc
! 5ed8a0dc031a8b99e196cc860447e1f8  libstdc++-v3/testsuite/experimental/deque/erasure.cc
  486c6490ca99880768c8a8d443ad1c02  libstdc++-v3/testsuite/experimental/feat-char8_t.cc
  02455db47de7f16c8e2d1f2af4839fc7  libstdc++-v3/testsuite/experimental/feat-cxx14.cc
  f754118861b851f83334813d834cb200  libstdc++-v3/testsuite/experimental/feat-lib-fund.cc
! b357baf6c5aabc7bc6a18b73a159c3f9  libstdc++-v3/testsuite/experimental/filesystem/file_status/1.cc
! 6fbf2560cc0f0331e3d9474af50277eb  libstdc++-v3/testsuite/experimental/filesystem/filesystem_error/cons.cc
! 31d7e0339aa1c55135ff715e3bdf5a40  libstdc++-v3/testsuite/experimental/filesystem/iterators/97731.cc
! 15d97adbea01f9ee987eb466a50852a0  libstdc++-v3/testsuite/experimental/filesystem/iterators/directory_iterator.cc
  6800b111af867d1c5dc76da92647aa5f  libstdc++-v3/testsuite/experimental/filesystem/iterators/error_reporting.cc
! 02567ec9ced57ac83a8e6c57e3f6d059  libstdc++-v3/testsuite/experimental/filesystem/iterators/pop.cc
! 766303c46328ef38a40e7068e2787755  libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc
! 615b030dd60bf2961229294935d0d4c0  libstdc++-v3/testsuite/experimental/filesystem/operations/absolute.cc
! afd5d6e234b5e3d46dda231356fe9da1  libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc
! b02025774f7094f0f6b7adfe93800788  libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc
! 1bdba62c51b854561a1b504d0e2e1247  libstdc++-v3/testsuite/experimental/filesystem/operations/copy_file.cc
! e7e8dcabc9ea03dbfe622f77cbdbee0d  libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc
! 0b6be655195128ee4c4a44059a79f483  libstdc++-v3/testsuite/experimental/filesystem/operations/create_directory.cc
! 86df7b64e4c303e0d8b514da3f6e2403  libstdc++-v3/testsuite/experimental/filesystem/operations/create_symlink.cc
! ad0e395725a0a7fd04d783fa3ecc9f9c  libstdc++-v3/testsuite/experimental/filesystem/operations/current_path.cc
! 4edc111e04a46ececccad8c8b357c98d  libstdc++-v3/testsuite/experimental/filesystem/operations/equivalent.cc
! e8b97e51c334d027e15f4d51549daea2  libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc
! 49e6da792986ffc12c1d8c07de270f8c  libstdc++-v3/testsuite/experimental/filesystem/operations/file_size.cc
! efaacfccda3d0d9c6582c64e4e841777  libstdc++-v3/testsuite/experimental/filesystem/operations/is_empty.cc
! 0f922a31779989a0ea876dd964fa65f7  libstdc++-v3/testsuite/experimental/filesystem/operations/last_write_time.cc
! c90e8c6e8bca9324266399bc7b90c67e  libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc
! 466de48bcb5a274872adc6aa76b9e8cf  libstdc++-v3/testsuite/experimental/filesystem/operations/read_symlink.cc
! 95a81a3477d2423081109698faa46551  libstdc++-v3/testsuite/experimental/filesystem/operations/remove.cc
! b4f37ca1a49ec5f581b82a11df7d16f5  libstdc++-v3/testsuite/experimental/filesystem/operations/remove_all.cc
! d9d8f528e26148b9e5ce25c2465d78a5  libstdc++-v3/testsuite/experimental/filesystem/operations/rename.cc
! 42fb26d4b1bfe4b2a82aafea0394fedf  libstdc++-v3/testsuite/experimental/filesystem/operations/space.cc
! 81ab8f91b46f67b697f511fdc43eff1b  libstdc++-v3/testsuite/experimental/filesystem/operations/status.cc
! 2ecdcfef8058478083a54f3d50b29709  libstdc++-v3/testsuite/experimental/filesystem/operations/temp_directory_path.cc
! 8ef651ed096892f69bd51e7a14ff658d  libstdc++-v3/testsuite/experimental/filesystem/path/append/path.cc
! af94bca4fb8ea7b8b6ee9f243aad2ceb  libstdc++-v3/testsuite/experimental/filesystem/path/assign/assign.cc
! 38780d6885c6b10bc581759b893962de  libstdc++-v3/testsuite/experimental/filesystem/path/assign/copy.cc
! cf30a87be5c57c8dab89752cec4deaa6  libstdc++-v3/testsuite/experimental/filesystem/path/compare/compare.cc
! de8358f5ac8739ce7fb8ec5b5755ef32  libstdc++-v3/testsuite/experimental/filesystem/path/compare/path.cc
! a1c99c4740a93297fdc15b05b1594464  libstdc++-v3/testsuite/experimental/filesystem/path/compare/strings.cc
! 3d42f4c68739acefd641e66e14a2a159  libstdc++-v3/testsuite/experimental/filesystem/path/concat/path.cc
! 7e0e17299eb53a2308c5c68339b0546c  libstdc++-v3/testsuite/experimental/filesystem/path/concat/strings.cc
  c06b01e19066f0d4ffa4faa5202f4e3e  libstdc++-v3/testsuite/experimental/filesystem/path/construct/100630.cc
! 0b9876d2dbc13ea170ce1e6f98c951a7  libstdc++-v3/testsuite/experimental/filesystem/path/construct/80762.cc
! f075500414fc6cbaf74c652ceabb379f  libstdc++-v3/testsuite/experimental/filesystem/path/construct/90281.cc
! abdd6f0c4be378f596d9eafe1d838cb4  libstdc++-v3/testsuite/experimental/filesystem/path/construct/90634.cc
! 117246a83e96fccd8c3b5aeac5882f9c  libstdc++-v3/testsuite/experimental/filesystem/path/construct/copy.cc
! 441fcf2bc3399ac3cc19178605716898  libstdc++-v3/testsuite/experimental/filesystem/path/construct/default.cc
! d9b9a772f9f82a1016a72762f2c923e4  libstdc++-v3/testsuite/experimental/filesystem/path/construct/locale.cc
! 49610b1008293080dfe2b412ce4d9dd8  libstdc++-v3/testsuite/experimental/filesystem/path/construct/range.cc
! d70f1369f2457c48cbb60aba36f43d85  libstdc++-v3/testsuite/experimental/filesystem/path/construct/string_view.cc
! a878fb4e4a44e83a9e5e4f07f255b753  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/extension.cc
! 73d81aa819bb39f7bea487957e3b5eb8  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/filename.cc
! 19a946507c9b04e3a88f4d1999b9118f  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/parent_path.cc
! 0578fff4471141c8de6245c1b6912dba  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/relative_path.cc
! c2432f587fdc2af76f51c5c2b8546c38  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/root_directory.cc
! 631455e35c6cf9a85f96dcbfb04c9438  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/root_name.cc
! e6a9356f67d4cb90c86d972230efe54d  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/root_path.cc
! 8079555d0ba670b7276ed1c75948b280  libstdc++-v3/testsuite/experimental/filesystem/path/decompose/stem.cc
! beb8514b7f89f1777825761d0c4dc55c  libstdc++-v3/testsuite/experimental/filesystem/path/factory/u8path-char8_t.cc
! 8161d3ca49a4fb1a12a9db97af4dad96  libstdc++-v3/testsuite/experimental/filesystem/path/factory/u8path.cc
! 613d77f20a83c5d1b688775b114b2ac2  libstdc++-v3/testsuite/experimental/filesystem/path/generic/generic_string.cc
! 753daca7a82baa95fe5a1969c4f32dd3  libstdc++-v3/testsuite/experimental/filesystem/path/itr/traversal.cc
! 26b5af9964e5f5f4118aa925b35c731e  libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/clear.cc
! f7e4e3a1e12199a4a0990676b79ed0a4  libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/make_preferred.cc
! b5bba3254ece204c89d1d5fc33574aa0  libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/remove_filename.cc
! acadc4b73522aa19262abfcae72cbaac  libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/replace_extension.cc
! 08776cf9a0f6d09f31341f050e957f08  libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/replace_filename.cc
! c290820fd2a73635dff594a3214ebbf6  libstdc++-v3/testsuite/experimental/filesystem/path/modifiers/swap.cc
! b4306216c0d704ad5816705b04bbfa75  libstdc++-v3/testsuite/experimental/filesystem/path/native/alloc.cc
  6972da7c2da200c073d985ccbd580534  libstdc++-v3/testsuite/experimental/filesystem/path/native/conv_c++23.cc
! 7f5d1f8dbae7d74be61d296a6ac8e21a  libstdc++-v3/testsuite/experimental/filesystem/path/native/string-char8_t.cc
! 9d03a9d580c99d61b8db0002bd2a4036  libstdc++-v3/testsuite/experimental/filesystem/path/native/string.cc
! e78162b8e8e4091a5e2b7b1804982d82  libstdc++-v3/testsuite/experimental/filesystem/path/nonmember/hash_value.cc
! 26762f8b3d13d800f40f66a079dcf456  libstdc++-v3/testsuite/experimental/filesystem/path/preferred_separator.cc
! ece31d32a7ede5bddf2425459c972620  libstdc++-v3/testsuite/experimental/filesystem/path/query/empty.cc
! 571ac5f34ce23460667ef3e66e98f8c3  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_extension.cc
! 155f99532041631c9984128bb6fbd218  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_filename.cc
! 81968ae6ebd754298afb3dde41931ec8  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_parent_path.cc
! 68d0c191f5181f4c010391b4200f1ba5  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_relative_path.cc
! 07ef744f0490a61d02dc851811a0455c  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_root_directory.cc
! 079111264c4765e70225b84def3608ca  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_root_name.cc
! 62dd5a7e447a4c2524f9d00358bf7b1d  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_root_path.cc
! 1d90f33934908b087b50454cb81180d9  libstdc++-v3/testsuite/experimental/filesystem/path/query/has_stem.cc
! 3bc4245cc7a298bc14295339ce760ad5  libstdc++-v3/testsuite/experimental/filesystem/path/query/is_absolute.cc
! 5024415e17040f8a1a7edc2df09b669f  libstdc++-v3/testsuite/experimental/filesystem/path/query/is_relative.cc
! 70857cb956fc639d1d8d79dcd9b62cb4  libstdc++-v3/testsuite/experimental/forward_list/erasure.cc
! 07713026fff9e9fa628e2ad7a0424adf  libstdc++-v3/testsuite/experimental/functional/87538.cc
! fc27917bfd06b0da39685726994ee558  libstdc++-v3/testsuite/experimental/functional/not_fn.cc
! c072813ca9d951bd5bf4d45d13f21795  libstdc++-v3/testsuite/experimental/functional/searchers.cc
! 9ddf02c730a9da6819b2fe33c51e2028  libstdc++-v3/testsuite/experimental/functional/value.cc
! b6951d2f024d046b08327415a64899b9  libstdc++-v3/testsuite/experimental/iterator/make_ostream_joiner.cc
! 284375aed621a96fcaaafdab8784748f  libstdc++-v3/testsuite/experimental/iterator/ostream_joiner.cc
! b65ef5917dcf69e9a0e6361f13ad1399  libstdc++-v3/testsuite/experimental/iterator/requirements.cc
! 5debec698f8b51e49a93032e0aae331c  libstdc++-v3/testsuite/experimental/list/erasure.cc
! 1edab0ea7a399c78a087ba7feb1fd716  libstdc++-v3/testsuite/experimental/map/erasure.cc
! f339b0ccf33940d6baa2b4b5aee63f3c  libstdc++-v3/testsuite/experimental/memory/observer_ptr/assignment/assign.cc
! 1cde77182e2d0a28a4ec3495724c86ae  libstdc++-v3/testsuite/experimental/memory/observer_ptr/cons/cons.cc
! 073abb012ce0920ae14056bac3384d97  libstdc++-v3/testsuite/experimental/memory/observer_ptr/hash/hash.cc
! 153de57941f42956f611f304857ca67c  libstdc++-v3/testsuite/experimental/memory/observer_ptr/make_observer.cc
! dbd522679361f5d031161b4aeee97d74  libstdc++-v3/testsuite/experimental/memory/observer_ptr/relops/relops.cc
! 08c9080c3a29f52b25dc3e40a438ae57  libstdc++-v3/testsuite/experimental/memory/observer_ptr/requirements.cc
! 7e5555ea1a6eda5b821f25d24eb3e0d8  libstdc++-v3/testsuite/experimental/memory/observer_ptr/swap/swap.cc
! 6609df5490406fa90811999592481907  libstdc++-v3/testsuite/experimental/memory/observer_ptr/typedefs.cc
! fbef30f472a59124ec1f08b490bbc8c0  libstdc++-v3/testsuite/experimental/memory/shared_ptr/assign/assign.cc
! c395bf88123732e5271e7f77d5157f75  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cast/cast.cc
! 80600a7e0ac40f1b96c3f86cc06f19df  libstdc++-v3/testsuite/experimental/memory/shared_ptr/comparison/comparison.cc
! 040bfaa811ab15cbd567757395b6ab73  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/alias_ctor.cc
! 40d0a2f9b4efdb6da3b0dd8fcf6410d1  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/alloc_ctor.cc
! effcf58a4acbc41eb6555035cc386678  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/copy_ctor.cc
! bab6d62d80c28132a999c2749b626485  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/copy_ctor_neg.cc
! 603481f9ef11a233ce355c1405f442b3  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/default_ctor.cc
! 1517f575f46e392d43a65b4f10eb58af  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/enable_shared_from_this.cc
! 8152b55ffa496d3b8310ec1fe9aa26b9  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc
! 5edf8db9fa81c8b68f9354c8acdef4cf  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/pointer_ctor.cc
! a84cf43fc76e8114c678f302ce886594  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/pointer_ctor_neg.cc
! a015dafa62614011fef1773bf60c4771  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/torture.cc
! 49166c21126fad3f8f0c67414b8a927a  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/unique_ptr_ctor.cc
! 5dd89af374c0136981734e20e1c87244  libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/weak_ptr_ctor.cc
! 1cff2bb2aaafdbbddd3776b781513e5d  libstdc++-v3/testsuite/experimental/memory/shared_ptr/dest/dest.cc
! 925af6fa787be1cc8be92d7bb439e8b3  libstdc++-v3/testsuite/experimental/memory/shared_ptr/modifiers/reset.cc
! 55821d0567cb3c7c683574bf07017d0d  libstdc++-v3/testsuite/experimental/memory/shared_ptr/modifiers/reset_neg.cc
! 1a146c21f13f4169078617848ba5b4d0  libstdc++-v3/testsuite/experimental/memory/shared_ptr/modifiers/swap.cc
! 98891a20e6b73a6318c713041cf89897  libstdc++-v3/testsuite/experimental/memory/shared_ptr/observers/bool_conv.cc
! debd2d8b9abb4ae30f662c2e2ca9bcaa  libstdc++-v3/testsuite/experimental/memory/shared_ptr/observers/operators.cc
! 23209525cf62d4bb65dd8f310d4d8207  libstdc++-v3/testsuite/experimental/memory/shared_ptr/observers/owner_before.cc
! b70e0a5172ec5f9f6728bebde90c594a  libstdc++-v3/testsuite/experimental/memory/shared_ptr/observers/use_count.cc
! 2e9d54f3ec5450219d742ff60b8603eb  libstdc++-v3/testsuite/experimental/memory_resource/1.cc
! f83c642c5cf8144608d9f3eef01da01a  libstdc++-v3/testsuite/experimental/memory_resource/70966.cc
! 7ec61e18aeca5ce48c00e102f01dc4b2  libstdc++-v3/testsuite/experimental/memory_resource/new_delete_resource.cc
! 34f81536645e5cb8f003255fc0a4dd0b  libstdc++-v3/testsuite/experimental/memory_resource/null_memory_resource.cc
! d0d4eb65f2c11a810c16b11ce85aabe2  libstdc++-v3/testsuite/experimental/memory_resource/resource_adaptor.cc
! 6e7ef302b1419f2ae59f3e578323da7b  libstdc++-v3/testsuite/experimental/names.cc
! 742614f6aeadfb12159e2c63231e4757  libstdc++-v3/testsuite/experimental/net/buffer/arithmetic.cc
! 74095c872cfe301d33bec81bd1c9218f  libstdc++-v3/testsuite/experimental/net/buffer/const.cc
! 3bcd6973e40545e1aa4d54bd34ebc470  libstdc++-v3/testsuite/experimental/net/buffer/creation.cc
! cbe71d9f99d136b7b879a353ea19e7e3  libstdc++-v3/testsuite/experimental/net/buffer/mutable.cc
! 1cf2efdcc2d9935ad243a2625457b0b5  libstdc++-v3/testsuite/experimental/net/buffer/size.cc
! b1613e2cdfd6911dd174f71b481b1d36  libstdc++-v3/testsuite/experimental/net/buffer/traits.cc
! 57c414ecc27f0068e20886584a1f7991  libstdc++-v3/testsuite/experimental/net/execution_context/make_service.cc
! 702230c85083af042ff07ccf77588a82  libstdc++-v3/testsuite/experimental/net/execution_context/use_service.cc
! 31a2bc56c340889cd57f503995766279  libstdc++-v3/testsuite/experimental/net/executor/1.cc
! 73aeabca49d57441263ca4936b1c8f20  libstdc++-v3/testsuite/experimental/net/headers.cc
! d3648d8a2ddc3c7201a4d5148ea0eabb  libstdc++-v3/testsuite/experimental/net/internet/address/v4/comparisons.cc
! 00506fb63688d25ff5f59cd4362c759c  libstdc++-v3/testsuite/experimental/net/internet/address/v4/cons.cc
! b82e376b28cf430be76d2adc2ffa231a  libstdc++-v3/testsuite/experimental/net/internet/address/v4/creation.cc
! 3a11c8807fab0d2f61e6dda6fc2fb3de  libstdc++-v3/testsuite/experimental/net/internet/address/v4/members.cc
! 2011063352328b4b10ea7578b6f6b968  libstdc++-v3/testsuite/experimental/net/internet/address/v6/members.cc
! e074bf09364a14b650e240651a0a47bc  libstdc++-v3/testsuite/experimental/net/internet/resolver/base.cc
! 4e3970ded3af166abeb3813088cc10ea  libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
! 8947f13760e616166e7059b1a52984f1  libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
  760dec58bec2534cd56103a2710b1e16  libstdc++-v3/testsuite/experimental/net/internet/socket/opt.cc
  47ab303b0324b578953893e188a1c4e8  libstdc++-v3/testsuite/experimental/net/internet/tcp.cc
  31837180dee34f479c2c7eaafac7b04a  libstdc++-v3/testsuite/experimental/net/internet/udp.cc
! 9502d974aff093bf40321c231d7c6fea  libstdc++-v3/testsuite/experimental/net/socket/basic_socket.cc
! 4b30167c6c8c0a400a010c1c68d65f97  libstdc++-v3/testsuite/experimental/net/socket/socket_base.cc
! b592429f76d9de3fe349632c83cb0fb8  libstdc++-v3/testsuite/experimental/net/system_context/1.cc
! 5c205abe6e67dfacaaf1729f73362535  libstdc++-v3/testsuite/experimental/net/timer/waitable/cons.cc
! aeffb14826f84ed208d44d4b7a16c544  libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
! 13ae5cf17310a1d26ad3d90ba8f0b04b  libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
! 08903c118915ea892f15b70e63714da5  libstdc++-v3/testsuite/experimental/numeric/77801.cc
! bf5f701c1a2d539150ee3bbb5fc4b4a6  libstdc++-v3/testsuite/experimental/numeric/92978.cc
! 0f916ff6e99923cabb3d611b3316c522  libstdc++-v3/testsuite/experimental/numeric/gcd.cc
! 55320d75a04e212a406f9e805f2b0e44  libstdc++-v3/testsuite/experimental/numeric/lcm.cc
! cbf3b6ab9b3e6bf39dd11942036c770b  libstdc++-v3/testsuite/experimental/optional/77288.cc
! 498dba80901367a5dd032711f1ef1906  libstdc++-v3/testsuite/experimental/optional/assignment/1.cc
! 4d4af65c8acdad8d68d39a1f67e542b7  libstdc++-v3/testsuite/experimental/optional/assignment/2.cc
! 9f2798466bbeeba5a6375af22e59f82a  libstdc++-v3/testsuite/experimental/optional/assignment/3.cc
! 0d4496b001da828b8e49d42094ede3fb  libstdc++-v3/testsuite/experimental/optional/assignment/4.cc
! d61a802c8674b42ffc8d09a5f2c6a729  libstdc++-v3/testsuite/experimental/optional/assignment/5.cc
! 554eceae07262a2d58e207ebd0346539  libstdc++-v3/testsuite/experimental/optional/assignment/6.cc
! e18963a619dead7f5bd227465fa922a7  libstdc++-v3/testsuite/experimental/optional/cons/77727.cc
! 2fb997c0431e536c0d6e2d2efa565127  libstdc++-v3/testsuite/experimental/optional/cons/copy.cc
! 70452a6bb21bad4cfd4ff36d9108b66d  libstdc++-v3/testsuite/experimental/optional/cons/default.cc
! f8bf594c84df583475bcc04b7677ff81  libstdc++-v3/testsuite/experimental/optional/cons/move.cc
! a6334ce9d75a464fd68d13e0d82786f3  libstdc++-v3/testsuite/experimental/optional/cons/value.cc
! 22bc7f36384edeefeda4a7f3acc1ef2f  libstdc++-v3/testsuite/experimental/optional/cons/value_neg.cc
! 69f463470db56f9889001867e2b68a18  libstdc++-v3/testsuite/experimental/optional/constexpr/cons/default.cc
! aa2fe21b181cb423099c36417a4825cd  libstdc++-v3/testsuite/experimental/optional/constexpr/cons/value.cc
! fd33ac5db4537a5a34a2c4f75d5452d7  libstdc++-v3/testsuite/experimental/optional/constexpr/in_place.cc
! 4df8e0cf6294c2aff91e143763febdab  libstdc++-v3/testsuite/experimental/optional/constexpr/make_optional.cc
! 2f33bc655bd4c7228447c0c5fa7e61f2  libstdc++-v3/testsuite/experimental/optional/constexpr/nullopt.cc
! 18ae26339adb3e014b579e88861048c1  libstdc++-v3/testsuite/experimental/optional/constexpr/observers/1.cc
! 669be693a439154e252817c14c189a6e  libstdc++-v3/testsuite/experimental/optional/constexpr/observers/2.cc
! 1db63bd3b22eb6c2251f0431789e5386  libstdc++-v3/testsuite/experimental/optional/constexpr/observers/3.cc
! 804e41cd1d6399ad4c878d32048b0c8c  libstdc++-v3/testsuite/experimental/optional/constexpr/observers/4.cc
! cf95aa7e80dcd055ae9ebf2ffaafef32  libstdc++-v3/testsuite/experimental/optional/constexpr/observers/5.cc
! de9ecacc421b4c8f101619b94b73e71a  libstdc++-v3/testsuite/experimental/optional/constexpr/relops/1.cc
! 94733be289d4ac4363a1ac35606ad45b  libstdc++-v3/testsuite/experimental/optional/constexpr/relops/2.cc
! 5c136aa5a6e46985eb3b041bfaad7e07  libstdc++-v3/testsuite/experimental/optional/constexpr/relops/3.cc
! 556212fd99a05532fd02ca97e171e385  libstdc++-v3/testsuite/experimental/optional/constexpr/relops/4.cc
! d762e9cf2b6b05c0ab43e5b68cf2590c  libstdc++-v3/testsuite/experimental/optional/constexpr/relops/5.cc
! 29055c41be1558ca88e355440246dff7  libstdc++-v3/testsuite/experimental/optional/constexpr/relops/6.cc
! 4d085a2ebe4f7d8d86bf73b92879955e  libstdc++-v3/testsuite/experimental/optional/in_place.cc
! eee3fc791af020b036598104052338d7  libstdc++-v3/testsuite/experimental/optional/make_optional.cc
! cc603ec60eda2842d25146d96e6c0b63  libstdc++-v3/testsuite/experimental/optional/nullopt.cc
! 8c51936c70ecc52b783dc933097467e0  libstdc++-v3/testsuite/experimental/optional/observers/1.cc
! 9dbb0842ba2aa8d4d1d4d5a4ed17292a  libstdc++-v3/testsuite/experimental/optional/observers/2.cc
! 21ba54057ff47de677e6f8f3757364ca  libstdc++-v3/testsuite/experimental/optional/observers/3.cc
! 69abf82fe9a65c23fcac29922cd88594  libstdc++-v3/testsuite/experimental/optional/observers/4.cc
! 57d959feb55fdfe89306c6f257daaa0f  libstdc++-v3/testsuite/experimental/optional/observers/5.cc
! c34f2371f080ac983c662437f8066b32  libstdc++-v3/testsuite/experimental/optional/relops/1.cc
! 340abc9ff2213c9927465d9a995ce99a  libstdc++-v3/testsuite/experimental/optional/relops/2.cc
! 5ef54265c1c7707b5d3b524fe5e33171  libstdc++-v3/testsuite/experimental/optional/relops/3.cc
! b4a65311dda5acc007f812d36cf114d9  libstdc++-v3/testsuite/experimental/optional/relops/4.cc
! ac7c1e6eaff8635448e5e802788f0818  libstdc++-v3/testsuite/experimental/optional/relops/5.cc
! 0270fb4f487c2e337bddb825ec1f0884  libstdc++-v3/testsuite/experimental/optional/relops/6.cc
! e67d12dbc273203ea4acbcdd4aae7916  libstdc++-v3/testsuite/experimental/optional/requirements.cc
! c4b0dc7bce21c2e3ecb4dbfff2a758c9  libstdc++-v3/testsuite/experimental/optional/swap/1.cc
! 9c69795afed13bd706237a9548e36896  libstdc++-v3/testsuite/experimental/optional/typedefs.cc
! c07cd2f2f33e506b170367ff2836dcc3  libstdc++-v3/testsuite/experimental/polymorphic_allocator/1.cc
! a5493b11a7a33289c55b6c04bf299d1d  libstdc++-v3/testsuite/experimental/polymorphic_allocator/construct_pair.cc
! 150b7158fe71628f707a67b3528dbb84  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_deque.cc
! 2b16144856ea7971258da6360bcccf51  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_forward_list.cc
! b0e71acff7a7efa49759b69151d1c0c9  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_list.cc
! 2ad6aab85843a1db0d4e3765636dc710  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_map.cc
! 844fbb99abb380987eb3fe110a65333f  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_match.cc
! dbba46837f7923f6c3a0a4aa08d90b65  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_multimap.cc
! 309a08e7711be3a0fa64c441e9d5fd5a  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_multiset.cc
! da4330ba3ab141027b843bcd0bdae7ea  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_set.cc
! 813b7b61a5bee7304250340507e6ef77  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_string.cc
! 803aaea936c2f816acfc6d60f1659228  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_map.cc
! 000beb19851d97668385bbfd5861065c  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_multimap.cc
! d07a6030018c02024b0ec8773bf46bd3  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_multiset.cc
! 2585a605e6f87f500e55010e8155d101  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_unordered_set.cc
! 976e1fdb48cbd3d110d16d90ff3ac299  libstdc++-v3/testsuite/experimental/polymorphic_allocator/pmr_typedefs_vector.cc
! fdcdb87b6de1f4d3386c58e40a533f2d  libstdc++-v3/testsuite/experimental/propagate_const/assignment/copy.cc
! e42fbbefa907d82a4298a5a225046553  libstdc++-v3/testsuite/experimental/propagate_const/assignment/move.cc
! c60f38c68698dec2918f543b1f1f8ebd  libstdc++-v3/testsuite/experimental/propagate_const/assignment/move_neg.cc
! 8e4cb818085d67670affc6197b4f9536  libstdc++-v3/testsuite/experimental/propagate_const/cons/copy.cc
! 1b85c47fe8a2a268c933beb5ef1632dc  libstdc++-v3/testsuite/experimental/propagate_const/cons/default.cc
! 86e56748c7d46a98183a9ab5ad3c2607  libstdc++-v3/testsuite/experimental/propagate_const/cons/move.cc
! b7914cd9230608e2ef135555ac0c003a  libstdc++-v3/testsuite/experimental/propagate_const/cons/move_neg.cc
! 7f95b85d845a1296abe11496ad0b84d4  libstdc++-v3/testsuite/experimental/propagate_const/hash/1.cc
! 269d1e7a6c5e595efa13640e01069b1c  libstdc++-v3/testsuite/experimental/propagate_const/observers/1.cc
! 20383fe554e0df7fcae4147a45126f4d  libstdc++-v3/testsuite/experimental/propagate_const/relops/1.cc
! f0cc6f3053907165e5178ef188855a76  libstdc++-v3/testsuite/experimental/propagate_const/requirements1.cc
! e3a4da97d92d477b401b0c580a719522  libstdc++-v3/testsuite/experimental/propagate_const/requirements2.cc
! 48da2319561fd0a15b1d8093c6d349a3  libstdc++-v3/testsuite/experimental/propagate_const/requirements3.cc
! 8b57bd85b145c4ef75df41ec27e0947a  libstdc++-v3/testsuite/experimental/propagate_const/requirements4.cc
! 1276d142c754403ddc75aee0971bd897  libstdc++-v3/testsuite/experimental/propagate_const/requirements5.cc
! 491d13032c524e7a81dcf0881b2ecdc7  libstdc++-v3/testsuite/experimental/propagate_const/swap/1.cc
  f622008c5ec7680a2ac920136d22446f  libstdc++-v3/testsuite/experimental/propagate_const/swap/lwg3413.cc
! b93e0710a0763b0ab478508778ecb7f6  libstdc++-v3/testsuite/experimental/propagate_const/typedefs.cc
! c23d8e205921a557cc24094816eebca2  libstdc++-v3/testsuite/experimental/random/randint.cc
! 8c22b80c2c591cedf3c470dc35296cd5  libstdc++-v3/testsuite/experimental/ratio/value.cc
! e76cacb547be6682c5bcb612e33f9848  libstdc++-v3/testsuite/experimental/set/erasure.cc
! 06f792c2a68c984e9373fbacc0395cc8  libstdc++-v3/testsuite/experimental/simd/README.md
! 2c666451450a60415a52ed94723ea1a6  libstdc++-v3/testsuite/experimental/simd/driver.sh
! 744a88ed80132268f2d29c9d5e586308  libstdc++-v3/testsuite/experimental/simd/generate_makefile.sh
! febb06982704a772da61d7b14e5795ee  libstdc++-v3/testsuite/experimental/simd/standard_abi_usable.cc
  8456d329f682f25f869aac367480356e  libstdc++-v3/testsuite/experimental/simd/standard_abi_usable_2.cc
! 59bc95299ad0d5ce1b19ecb4358e5c43  libstdc++-v3/testsuite/experimental/simd/tests/abs.cc
! 700103eee36be87672188553a6a091aa  libstdc++-v3/testsuite/experimental/simd/tests/algorithms.cc
! 1d729f1e1dac2912a372ba02170dc902  libstdc++-v3/testsuite/experimental/simd/tests/bits/conversions.h
! d8a900a4f4ddb43bc65700e3f26a5c70  libstdc++-v3/testsuite/experimental/simd/tests/bits/make_vec.h
! 2ec4807769a55c12f4ae2997b143f48c  libstdc++-v3/testsuite/experimental/simd/tests/bits/mathreference.h
! a67eb2ee0fc0b52a4ea80cc1a362c90e  libstdc++-v3/testsuite/experimental/simd/tests/bits/metahelpers.h
! 3e387e5066588d87ae63b7beedc53310  libstdc++-v3/testsuite/experimental/simd/tests/bits/simd_view.h
! 60391931cdc5301e68c13fbbd1054cbb  libstdc++-v3/testsuite/experimental/simd/tests/bits/test_values.h
! d32d57c818b064ed375165ea4754089f  libstdc++-v3/testsuite/experimental/simd/tests/bits/ulp.h
! 894d87f64667108934c51328d2a7572d  libstdc++-v3/testsuite/experimental/simd/tests/bits/verify.h
! 60407475679dc04e7d60bb1bc86dffdb  libstdc++-v3/testsuite/experimental/simd/tests/broadcast.cc
! ffc42372c02e90af242f59788399db5a  libstdc++-v3/testsuite/experimental/simd/tests/casts.cc
! 101a999bb7c646b579b4376416643895  libstdc++-v3/testsuite/experimental/simd/tests/fpclassify.cc
! 5c39c95d201f635a1de2535d53521fc9  libstdc++-v3/testsuite/experimental/simd/tests/frexp.cc
! af847d64df49c134727d3da5561a3723  libstdc++-v3/testsuite/experimental/simd/tests/generator.cc
! b234ef1901b5ba6d6ef358f2098f9475  libstdc++-v3/testsuite/experimental/simd/tests/hypot3_fma.cc
! 9002b5364b98cae972f0c9239f161205  libstdc++-v3/testsuite/experimental/simd/tests/integer_operators.cc
! e71a311524b3ac7dcc5fa6956e5b5a81  libstdc++-v3/testsuite/experimental/simd/tests/ldexp_scalbn_scalbln_modf.cc
! 2f4834e979867c7f1db242a3dc9e0f84  libstdc++-v3/testsuite/experimental/simd/tests/loadstore.cc
! 894e612c58b45d3a0a0664f507d404ce  libstdc++-v3/testsuite/experimental/simd/tests/logarithm.cc
! a0f7c3ca5a18f8542ba3a9915810f127  libstdc++-v3/testsuite/experimental/simd/tests/mask_broadcast.cc
! b107b97473b7c99530a8603cf2da2324  libstdc++-v3/testsuite/experimental/simd/tests/mask_conversions.cc
! 2b751bab06aaa71fa2b9053371d4f5be  libstdc++-v3/testsuite/experimental/simd/tests/mask_implicit_cvt.cc
! 95d080ad29a085069086bdaf167762f0  libstdc++-v3/testsuite/experimental/simd/tests/mask_loadstore.cc
! 876a2b4d92f48bf202eba82d0d91aa3c  libstdc++-v3/testsuite/experimental/simd/tests/mask_operator_cvt.cc
! 488d92ac97a21e8fec882e61337e223d  libstdc++-v3/testsuite/experimental/simd/tests/mask_operators.cc
! 9a3d07ed231ad4a8ac07b19bb4761b2b  libstdc++-v3/testsuite/experimental/simd/tests/mask_reductions.cc
! 951b947393323da0fd0bd090f8fc81d9  libstdc++-v3/testsuite/experimental/simd/tests/math_1arg.cc
! 1595c4b98dd21d21548e171ba5bb5a7a  libstdc++-v3/testsuite/experimental/simd/tests/math_2arg.cc
! d21cdbc7bc3b41b29957f4e2fd8e3357  libstdc++-v3/testsuite/experimental/simd/tests/operator_cvt.cc
! a1746f8466860ca904d500d2b9e03548  libstdc++-v3/testsuite/experimental/simd/tests/operators.cc
! dd671dbe35947377857f0f71337ea225  libstdc++-v3/testsuite/experimental/simd/tests/reductions.cc
! 602de48c0437c1eca409deac2c196c53  libstdc++-v3/testsuite/experimental/simd/tests/remqo.cc
! 2b03327b12708d313a4591a4fbb2f3e2  libstdc++-v3/testsuite/experimental/simd/tests/simd.cc
! 070b37e3ae10319ba1cdd6a15808e929  libstdc++-v3/testsuite/experimental/simd/tests/sincos.cc
! 2cb204227ac6a30742376b71c73ab773  libstdc++-v3/testsuite/experimental/simd/tests/split_concat.cc
! 08fa96bd646c4d617dfedb1436d00717  libstdc++-v3/testsuite/experimental/simd/tests/splits.cc
! 9bf3b6278fe2f036cc846a88df8ebcb3  libstdc++-v3/testsuite/experimental/simd/tests/trigonometric.cc
! 201affd1d9ed7afd66658b1f2f5701c0  libstdc++-v3/testsuite/experimental/simd/tests/trunc_ceil_floor.cc
! 2f197150877211119ac153f159dc1200  libstdc++-v3/testsuite/experimental/simd/tests/where.cc
! ebdd856dc1e0446c45236f494cddaefb  libstdc++-v3/testsuite/experimental/source_location/1.cc
! fccce21c04130e6b402d758f8e7e4de4  libstdc++-v3/testsuite/experimental/string/erasure.cc
! aae5c600f5554ad5c6eb779ebf0c4654  libstdc++-v3/testsuite/experimental/string_view/capacity/1.cc
! aa325a2cd2b797c594c78856d7828cce  libstdc++-v3/testsuite/experimental/string_view/cons/char/1.cc
! 57a9ad1d51b82b97e7488fa70eff2508  libstdc++-v3/testsuite/experimental/string_view/cons/char/2.cc
! 854e1a8e3952f3b5643bb686e11ee2ca  libstdc++-v3/testsuite/experimental/string_view/cons/char/3.cc
! a46936d2e14861ef3d5f44ed3edc4dd8  libstdc++-v3/testsuite/experimental/string_view/cons/wchar_t/1.cc
! d82484a2dcdfc601617c80f8c6cead43  libstdc++-v3/testsuite/experimental/string_view/cons/wchar_t/2.cc
! 2976b9a6cb3204ce473d013f818f8c3a  libstdc++-v3/testsuite/experimental/string_view/cons/wchar_t/3.cc
! 3218396a222d19dbb84abe44d2c3feab  libstdc++-v3/testsuite/experimental/string_view/element_access/char/1.cc
! 2848f2a414cf137cd63d6a25116054c3  libstdc++-v3/testsuite/experimental/string_view/element_access/char/2.cc
! 1d00e9dfd056a13229a7099b7982a60c  libstdc++-v3/testsuite/experimental/string_view/element_access/char/empty.cc
! d9be4d897203e2bc2cad8c4f747897e3  libstdc++-v3/testsuite/experimental/string_view/element_access/char/front_back.cc
! 9c639d3749c74361f5ec92c30c3e9849  libstdc++-v3/testsuite/experimental/string_view/element_access/wchar_t/1.cc
! 880d817ea80291e8396b959955b73d7d  libstdc++-v3/testsuite/experimental/string_view/element_access/wchar_t/2.cc
! d309ebf9476bcafc318a3379e715dabe  libstdc++-v3/testsuite/experimental/string_view/element_access/wchar_t/empty.cc
! 7a9b59c2b6026a82b280e44a997726da  libstdc++-v3/testsuite/experimental/string_view/element_access/wchar_t/front_back.cc
! 89ce11ae18e6b7ff683994ead9a083a1  libstdc++-v3/testsuite/experimental/string_view/include.cc
! eeff477514e10d629bedb1218424d391  libstdc++-v3/testsuite/experimental/string_view/inserters/char/1.cc
! 30719ff0712e1084d21d32d341291c9b  libstdc++-v3/testsuite/experimental/string_view/inserters/char/2.cc
! 7832808188c0d28458ca5df561e0310e  libstdc++-v3/testsuite/experimental/string_view/inserters/char/3.cc
! 3c4aec9b6ab894e097f4bdd6f88efa9a  libstdc++-v3/testsuite/experimental/string_view/inserters/pod/10081-out.cc
! 13e2a0b5efa4387bdaba4edaa0d41ed8  libstdc++-v3/testsuite/experimental/string_view/inserters/wchar_t/1.cc
! 9992c83cbc153043130f77bf2fa4870f  libstdc++-v3/testsuite/experimental/string_view/inserters/wchar_t/2.cc
! c120e7df7cadcf3886ed7f30071464f7  libstdc++-v3/testsuite/experimental/string_view/inserters/wchar_t/3.cc
! 5ea5cec91e23d758a3f275928fbd61ec  libstdc++-v3/testsuite/experimental/string_view/literals/types-char8_t.cc
! 6af7ac51b586ccec6c4cb1be6c930e1d  libstdc++-v3/testsuite/experimental/string_view/literals/types.cc
! 35752fcc7e5c14fc9f6a3678aacbc447  libstdc++-v3/testsuite/experimental/string_view/literals/values-char8_t.cc
! 11eac918b49b9d94b6baa9b69fb8f8ce  libstdc++-v3/testsuite/experimental/string_view/literals/values.cc
! c9a1780807cb0b1fbc9e9641bf97a4d4  libstdc++-v3/testsuite/experimental/string_view/modifiers/remove_prefix/char/1.cc
! 461d84d839ea79f42d526c0e8f2dfd49  libstdc++-v3/testsuite/experimental/string_view/modifiers/remove_prefix/wchar_t/1.cc
! 4229dbfb9caba704b76ba8cd6450d9ce  libstdc++-v3/testsuite/experimental/string_view/modifiers/remove_suffix/char/1.cc
! 640244a2e7ca42aae610da01531bd265  libstdc++-v3/testsuite/experimental/string_view/modifiers/remove_suffix/wchar_t/1.cc
! ac9383d635fbd5702d74980c6a5486b1  libstdc++-v3/testsuite/experimental/string_view/operations/compare/char/1.cc
! cbc5ec77b7022ed5116bedf42a097016  libstdc++-v3/testsuite/experimental/string_view/operations/compare/char/13650.cc
! 479cfe9051e33236ba6a896f3e05c91f  libstdc++-v3/testsuite/experimental/string_view/operations/compare/char/70483.cc
! e1716352c188f05917120902672a1152  libstdc++-v3/testsuite/experimental/string_view/operations/compare/wchar_t/1.cc
! bbc33c6474f73df6f17d3e8c1f11a3a3  libstdc++-v3/testsuite/experimental/string_view/operations/compare/wchar_t/13650.cc
! 9e3142c2677de6c80db7aba30ae44c61  libstdc++-v3/testsuite/experimental/string_view/operations/copy/char/1.cc
! 0ab0d0ee9d0b95a973ecbc32b59be288  libstdc++-v3/testsuite/experimental/string_view/operations/copy/wchar_t/1.cc
  672cb4f94c8a852e6bdb846e926365f9  libstdc++-v3/testsuite/experimental/string_view/operations/data/char/1.cc
  3500b68ff8c9b68295a6f4a0a348e9d8  libstdc++-v3/testsuite/experimental/string_view/operations/data/wchar_t/1.cc
! 4e76018e15e881d95c1911bf00a62689  libstdc++-v3/testsuite/experimental/string_view/operations/find/char/1.cc
! 7ca9b0a98c7e8c7cbc9b4330ac886944  libstdc++-v3/testsuite/experimental/string_view/operations/find/char/2.cc
! 22b75513f253903f5e6707e50a99ec16  libstdc++-v3/testsuite/experimental/string_view/operations/find/char/3.cc
! bea5e702142fb5e798fe09582e3995b6  libstdc++-v3/testsuite/experimental/string_view/operations/find/char/4.cc
! fd00f010cbd454522963b93ade751558  libstdc++-v3/testsuite/experimental/string_view/operations/find/wchar_t/1.cc
! ad2af0de869ebd7439e683729b8e7589  libstdc++-v3/testsuite/experimental/string_view/operations/find/wchar_t/2.cc
! e9872a1f58a6ce031176ca84076afad4  libstdc++-v3/testsuite/experimental/string_view/operations/find/wchar_t/3.cc
! 24f4b050ab109e7c951c9aa6ec4631d2  libstdc++-v3/testsuite/experimental/string_view/operations/find/wchar_t/4.cc
! 03a684210c29ba779cead9cd22d14b2c  libstdc++-v3/testsuite/experimental/string_view/operations/rfind/char/1.cc
! 577e7f44686aa9d0e7d6df6ba097016e  libstdc++-v3/testsuite/experimental/string_view/operations/rfind/char/2.cc
! 4b7e53eabdb892cf9b4f17e245f0994e  libstdc++-v3/testsuite/experimental/string_view/operations/rfind/char/3.cc
! a7f3602b98a02360a0d8a59364029297  libstdc++-v3/testsuite/experimental/string_view/operations/rfind/wchar_t/1.cc
! 9ef9d6bb140c7fbf50e08c83b2e39ad0  libstdc++-v3/testsuite/experimental/string_view/operations/rfind/wchar_t/2.cc
! 091e4831f66b2a9cb9af03cf21555fb7  libstdc++-v3/testsuite/experimental/string_view/operations/rfind/wchar_t/3.cc
! 86180322603ef254cd183cf50ff20a12  libstdc++-v3/testsuite/experimental/string_view/operations/substr/char/1.cc
! 1f1dac21c96c80f97dafaddb54fe11b6  libstdc++-v3/testsuite/experimental/string_view/operations/substr/char/83511.cc
! 3105ee8f20c2c7167a9cb0f816153f88  libstdc++-v3/testsuite/experimental/string_view/operations/substr/wchar_t/1.cc
! d81146368e64288a42280c2a0c9cd5b3  libstdc++-v3/testsuite/experimental/string_view/operations/substr/wchar_t/83511.cc
! 7a6f20cc2e6aa6d278360165fd0ff832  libstdc++-v3/testsuite/experimental/string_view/operations/to_string/1.cc
! ef908bfb2fecf09fde59037ef419a8e6  libstdc++-v3/testsuite/experimental/string_view/operators/char/2.cc
! e896e5c50053cf5d4e4d785c50853df9  libstdc++-v3/testsuite/experimental/string_view/operators/wchar_t/2.cc
! f744e0d2695656d9ccc11d666aeac5e2  libstdc++-v3/testsuite/experimental/string_view/range_access/char/1.cc
! 7f3c8f4679ba84a9703f67c6513446bd  libstdc++-v3/testsuite/experimental/string_view/range_access/wchar_t/1.cc
! 549d216ffc7a9cdd04ed17d6aa5e2dd2  libstdc++-v3/testsuite/experimental/string_view/requirements/explicit_instantiation/1.cc
! dd6759b40a7f7a797962e13433070128  libstdc++-v3/testsuite/experimental/string_view/requirements/explicit_instantiation/char/1.cc
! 8ef0d93163214696270c7e3eab0a0a0f  libstdc++-v3/testsuite/experimental/string_view/requirements/explicit_instantiation/char16_t/1.cc
! 998ba362b6e26056009d07044f85f301  libstdc++-v3/testsuite/experimental/string_view/requirements/explicit_instantiation/char32_t/1.cc
! c97bb58a0d698de4ac0963f0a2971db0  libstdc++-v3/testsuite/experimental/string_view/requirements/explicit_instantiation/char8_t/1.cc
! 2ea27c389fe9f2cdd56b517580289990  libstdc++-v3/testsuite/experimental/string_view/requirements/explicit_instantiation/wchar_t/1.cc
! 667094772a251d3a614c05b38a484ec2  libstdc++-v3/testsuite/experimental/string_view/requirements/typedefs.cc
! 082b55b5bcbe6779a39c54e959a5d9e3  libstdc++-v3/testsuite/experimental/string_view/typedefs.cc
! ebdd3bcc1466d8e7516c043bd77303d9  libstdc++-v3/testsuite/experimental/string_view/types/1.cc
! 44afa132fe15442f7cad19b625884b73  libstdc++-v3/testsuite/experimental/system_error/value.cc
! 5b0712bcc9e4658332efc1e4fadb2a47  libstdc++-v3/testsuite/experimental/tuple/apply.cc
! 3cea9014a306fa483a156f1b2dd46b40  libstdc++-v3/testsuite/experimental/tuple/tuple_size.cc
! 7ec34dcad065e7410f753722687fdd95  libstdc++-v3/testsuite/experimental/type_erased_allocator/2.cc
! 510d02a7d32b8c1922c962e50e0e1cc9  libstdc++-v3/testsuite/experimental/type_erased_allocator/uses_allocator.cc
! 1f0c05d43977c47719353a318e92dab5  libstdc++-v3/testsuite/experimental/type_traits/detection.cc
! 121a46c91c15d9ea4e57bd6384acc542  libstdc++-v3/testsuite/experimental/type_traits/nonesuch.cc
! 6ee6006782b89511f9be1fa348ff9ead  libstdc++-v3/testsuite/experimental/type_traits/value.cc
! 08ce3bc05e2f489fbd8f2d7fc80b9faa  libstdc++-v3/testsuite/experimental/unordered_map/erasure.cc
! 49114fa86650037d7e3f2468ca0d2d3f  libstdc++-v3/testsuite/experimental/unordered_set/erasure.cc
! 9a1cde2611fbb833c1498ffcecc35f5a  libstdc++-v3/testsuite/experimental/vector/erasure.cc
! afb41841e059f0f1a2784b31eb1faf21  libstdc++-v3/testsuite/ext/bitmap_allocator/check_allocate_max_size.cc
! bc5fc5513a879fb9937c7ab97c6f4f0a  libstdc++-v3/testsuite/ext/bitmap_allocator/check_deallocate_null.cc
! 5d289d1eccc3f0e365adaad8f42fca35  libstdc++-v3/testsuite/ext/bitmap_allocator/check_delete.cc
! cb792f0bca5e94b12e22db6855940365  libstdc++-v3/testsuite/ext/bitmap_allocator/check_new.cc
! 92588d4dd6ba9f4747eae4a70bbce806  libstdc++-v3/testsuite/ext/bitmap_allocator/overaligned.cc
! c2f072c2ef9ddea33c364364f9b72861  libstdc++-v3/testsuite/ext/bitmap_allocator/variadic_construct.cc
  846dc8224edb857bb6953efa8b4cdb2d  libstdc++-v3/testsuite/ext/char8_t/atomic-1.cc
! 6dc07c2d76a722ae7bfdd0c9428c9ad1  libstdc++-v3/testsuite/ext/codecvt/1.cc
! 8bdb6ea918a922d7bc9bdb422e9ed6e4  libstdc++-v3/testsuite/ext/codecvt/char-1.cc
! 53321c05f40e3329c7290ff079ffe4ac  libstdc++-v3/testsuite/ext/codecvt/char-2.cc
! 797cfffe75dcc502ab1d21823f8f670c  libstdc++-v3/testsuite/ext/codecvt/wchar_t.cc
! 70b4f4c7e814066d86c950dd703552ee  libstdc++-v3/testsuite/ext/concept_checks.cc
! 25f6fee79a64f933867e412061c1993c  libstdc++-v3/testsuite/ext/concurrence_lock_error/cons_virtual_derivation.cc
! 99f77273e3197089db305da24bd3ef3d  libstdc++-v3/testsuite/ext/concurrence_unlock_error/cons_virtual_derivation.cc
! 4ab0fe1ce21330185817e71442ac97b4  libstdc++-v3/testsuite/ext/debug_allocator/56170.cc
! 858d066014b03e7f7c7304a0e13ae823  libstdc++-v3/testsuite/ext/debug_allocator/check_deallocate_null.cc
! 04f95b2e88e51b954cd58ffeb5e44f13  libstdc++-v3/testsuite/ext/debug_allocator/check_delete.cc
! 26ee9c9085254a498e98ac62d70b7b97  libstdc++-v3/testsuite/ext/debug_allocator/check_new.cc
! 07db630e38d9e039e377647819d903d0  libstdc++-v3/testsuite/ext/debug_allocator/eq.cc
! fa0e3756509c18e311c7e62516c07caa  libstdc++-v3/testsuite/ext/debug_allocator/explicit_instantiation.cc
! 1afebb25df9f88ed107f3971720eaee1  libstdc++-v3/testsuite/ext/enc_filebuf/char/13189.cc
! 006af8fd0f485b55d4f1de209ea62dae  libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc
! 491154a08909cf3c788d84dc8a5b914b  libstdc++-v3/testsuite/ext/enc_filebuf/wchar_t/13189.cc
! f48386a66d77d4f9407cb8e267075ca4  libstdc++-v3/testsuite/ext/ext_pointer/1.cc
! 53ade0579dc0567de4488006c024b219  libstdc++-v3/testsuite/ext/ext_pointer/1_neg.cc
! 897da17a02f198339a4e1dd94c9a2b88  libstdc++-v3/testsuite/ext/ext_pointer/alloc_eq.cc
! 89742f480f56f219afbb62483341b1ee  libstdc++-v3/testsuite/ext/forced_error/cons_virtual_derivation.cc
! deffb618bdd60edebfb418e4bad25f08  libstdc++-v3/testsuite/ext/headers.cc
! 6203c20cb1331f64f792931de7fabf0d  libstdc++-v3/testsuite/ext/iota/cxx0x.cc
! 66ff98f7343e80884705d979e0690d82  libstdc++-v3/testsuite/ext/is_heap/1.cc
! a19df04f8dc1d45353334daab20fe78c  libstdc++-v3/testsuite/ext/is_heap/47709.cc
! 3935abd05cb1297b86ab7ce20ed9d851  libstdc++-v3/testsuite/ext/is_heap/check_type.cc
! fb2aa9e24ae354dee2367176d6085f9c  libstdc++-v3/testsuite/ext/is_sorted/cxx0x.cc
! 3dc4ab04e456ca17d9712b53b12642ff  libstdc++-v3/testsuite/ext/malloc_allocator/89510.cc
! 97e4cb9389b10f4708bcaf4c7179a37b  libstdc++-v3/testsuite/ext/malloc_allocator/check_allocate_max_size.cc
! d440c09c66e39778102e23b5446e1439  libstdc++-v3/testsuite/ext/malloc_allocator/check_deallocate_null.cc
! 6a8ee3a6bc124a86e1875be942e6a734  libstdc++-v3/testsuite/ext/malloc_allocator/check_delete.cc
! a499f8db9772a0e56a891f12a1b2e01a  libstdc++-v3/testsuite/ext/malloc_allocator/check_new.cc
! 1827fa3674dbfb8589a24a878fcd88fb  libstdc++-v3/testsuite/ext/malloc_allocator/deallocate_global.cc
! da7aaffbfb788268ed4b460f6768af8e  libstdc++-v3/testsuite/ext/malloc_allocator/deallocate_local.cc
! b3ad83c4f140270f1486b107bfbb8b52  libstdc++-v3/testsuite/ext/malloc_allocator/eq.cc
! db434f22ba49ee6a0195540f05ac280a  libstdc++-v3/testsuite/ext/malloc_allocator/explicit_instantiation.cc
! c6519d26ecb7fd5a6c2b0635c579bae0  libstdc++-v3/testsuite/ext/malloc_allocator/overaligned.cc
! a62cf823ac09848b8a20d30797c7e117  libstdc++-v3/testsuite/ext/malloc_allocator/sanity.cc
! cff911ad1b04b5554c9401573aaf9efa  libstdc++-v3/testsuite/ext/malloc_allocator/variadic_construct.cc
! ca224c75b0fa07aa9247e611b5dcb7af  libstdc++-v3/testsuite/ext/median.cc
! c2f0720a036520d598f05a180775986d  libstdc++-v3/testsuite/ext/mt_allocator/22309_thread.cc
! e8e56bc74ca0b9aa742b833618fc687b  libstdc++-v3/testsuite/ext/mt_allocator/check_allocate_big_per_type.cc
! cddd4443624c6a6a37f61cc851b9790a  libstdc++-v3/testsuite/ext/mt_allocator/check_allocate_max_size.cc
! a2ec8ffb6aaba066ce4296b5d985a1bf  libstdc++-v3/testsuite/ext/mt_allocator/check_deallocate_null.cc
! 2986780d26fe568392950ea319a7b791  libstdc++-v3/testsuite/ext/mt_allocator/check_deallocate_null_thread.cc
! c9ee93751ac0d944ff829a697d99dd58  libstdc++-v3/testsuite/ext/mt_allocator/check_delete.cc
! 88763a4e6428403afb9f152dd194fc30  libstdc++-v3/testsuite/ext/mt_allocator/check_new.cc
! edf67745d611ab0efce785419a1d73cb  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global-2.cc
! 5bf599d1d5ca847a7ddd27417458a550  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global-4.cc
! 2614a896f047508f411ccffde37021bb  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global_thread-1.cc
! a3e2e2e907a0fa5b2f5c12154b7d66bd  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_global_thread-3.cc
! db017a069ff772c8e3e9584c8bdce516  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-2.cc
! b6ee91b6d9be8e00a62b12d69eec59e1  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-4.cc
! 2122eff4d42eb4875f42a778599f106d  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc
! 68310c632b85d3cf546d09fdf5562fb7  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-8.cc
! 35dc1e42a94c4c414f0826728f44619e  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-1.cc
! bf2213d13f36a27292b36342ca50eea0  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-3.cc
! d2fbdbdcb0505a39dd0dcea72568472a  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-5.cc
! fbc6f4117b999741fe4d58dc6fe0db31  libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local_thread-7.cc
! 1f8af7a2452774dab1876b0718ae83eb  libstdc++-v3/testsuite/ext/mt_allocator/explicit_instantiation.cc
! d4fb5e557a12f8abac42ccb9802cdf46  libstdc++-v3/testsuite/ext/mt_allocator/overaligned.cc
! 51d56ba38bc42f445a5bb99a7b69077c  libstdc++-v3/testsuite/ext/mt_allocator/tune-1.cc
! c5ba8c65727e3f67591630562f03e896  libstdc++-v3/testsuite/ext/mt_allocator/tune-2.cc
! aadd4a5e3c3d9ec820f93ac76385c5ce  libstdc++-v3/testsuite/ext/mt_allocator/tune-3.cc
! 0bcbb02f149ece66eb4e4c41a9aa6bf1  libstdc++-v3/testsuite/ext/mt_allocator/tune-4.cc
! 6f564c6220b0bb6f363888f96f6e2342  libstdc++-v3/testsuite/ext/mt_allocator/variadic_construct.cc
! 68a0c353a6351a67f36cbd5bfcda92b4  libstdc++-v3/testsuite/ext/new_allocator/89510.cc
! 9ea551a5517ab73687d379399ca5349d  libstdc++-v3/testsuite/ext/new_allocator/check_allocate_max_size.cc
! 0b55cc1560efb8b140a557165a5778af  libstdc++-v3/testsuite/ext/new_allocator/check_deallocate_null.cc
! abef5b970199426c7e9374878f6eb19a  libstdc++-v3/testsuite/ext/new_allocator/check_delete.cc
! 46c9dca95e7d8ca97f3162e986366fd5  libstdc++-v3/testsuite/ext/new_allocator/check_new.cc
! 63d5f68b85aefa53d4fd243e6697a8b3  libstdc++-v3/testsuite/ext/new_allocator/deallocate_global.cc
! 2d41f12139ec61ee21576a70cacbd0d7  libstdc++-v3/testsuite/ext/new_allocator/deallocate_local.cc
! 40e95caabe5414f40a7c5752dafa87f3  libstdc++-v3/testsuite/ext/new_allocator/eq.cc
! a067b8eaee04dff484f73eb18147f825  libstdc++-v3/testsuite/ext/new_allocator/instantiate.cc
! 782dd98cac86264172a710d5e265a3a7  libstdc++-v3/testsuite/ext/new_allocator/overaligned.cc
! b13788827e01dcb27a3ecd0cc11e5f59  libstdc++-v3/testsuite/ext/new_allocator/variadic_construct.cc
! 673182ad5ed29ed7621c9cc2b7ad34c9  libstdc++-v3/testsuite/ext/numeric_traits/numeric_traits.cc
! 52c9157740b5bae4cd93f01c7fee7490  libstdc++-v3/testsuite/ext/pb_ds/example/assoc_container_traits.cc
! c201fc1fd3a96fd4cf2bd1254508a1f2  libstdc++-v3/testsuite/ext/pb_ds/example/basic_map.cc
! b04ad30b273175cf6e39173ea3e24c0c  libstdc++-v3/testsuite/ext/pb_ds/example/basic_multimap.cc
! c6272d3e336cacb5e0bfd110204f8e4e  libstdc++-v3/testsuite/ext/pb_ds/example/basic_multiset.cc
! f4a0eb223063f9de43e52852833737b1  libstdc++-v3/testsuite/ext/pb_ds/example/basic_priority_queue.cc
! f12ee66af05e5855448c11607c29e399  libstdc++-v3/testsuite/ext/pb_ds/example/basic_set.cc
! 33cdc0aab66d5c050a3e17ad3360a3ac  libstdc++-v3/testsuite/ext/pb_ds/example/erase_if.cc
! 83f03550acb30a5776e81657df442e98  libstdc++-v3/testsuite/ext/pb_ds/example/hash_find_neg.cc
! 564718f13d4b60237c4cf36d0ddc907c  libstdc++-v3/testsuite/ext/pb_ds/example/hash_illegal_resize.cc
! 4f6e0d740e2e995831a2298f5c6ce0b5  libstdc++-v3/testsuite/ext/pb_ds/example/hash_initial_size.cc
! e23c15a08f7200f6b776a472c67e1de2  libstdc++-v3/testsuite/ext/pb_ds/example/hash_load_set_change.cc
! a82786cd16908c4d0528f8b2820faf66  libstdc++-v3/testsuite/ext/pb_ds/example/hash_mod.cc
! 955e1b23e6630aff2d7274b44c5790d1  libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize.cc
! 9e5dcb40786a746f6d881a065afc0cfd  libstdc++-v3/testsuite/ext/pb_ds/example/hash_resize_neg.cc
! c06213e3256462c53a01e129a78c020a  libstdc++-v3/testsuite/ext/pb_ds/example/hash_shift_mask.cc
! 8534ed0a5adc65bd5b6260cf95b9c317  libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_container_traits.cc
! 4432e27b63b380e16275de44823d8bb0  libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_dijkstra.cc
! a7ccee64e1634c72eec1bbe51f7376f1  libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_erase_if.cc
! 06a95b75aa17e61717c255034902b236  libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_split_join.cc
! 3cf11b6c822577c59b63cc5f6319d85b  libstdc++-v3/testsuite/ext/pb_ds/example/priority_queue_xref.cc
! 7213f131cd39182bb917ef277a81815a  libstdc++-v3/testsuite/ext/pb_ds/example/ranged_hash.cc
! 218dd5f6da267a8b103f71ec2d0ea1d6  libstdc++-v3/testsuite/ext/pb_ds/example/store_hash.cc
! c9e262832a7b391090701f002ea1c806  libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc
! 52ccee13a7484472857b1fa6da420f42  libstdc++-v3/testsuite/ext/pb_ds/example/tree_join.cc
! 154474e384dca74a6712c323f0d29e46  libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics.cc
! 7ac218e789198433d88bbd13a53ca60a  libstdc++-v3/testsuite/ext/pb_ds/example/tree_order_statistics_join.cc
! dbf9713da86d73cd4034be53321b1745  libstdc++-v3/testsuite/ext/pb_ds/example/trie_dna.cc
! 48e14c956008507296402b21068a0021  libstdc++-v3/testsuite/ext/pb_ds/example/trie_prefix_search.cc
! 4f5798ae9315d4ce1a7b82b7e2d77ca5  libstdc++-v3/testsuite/ext/pb_ds/example/trie_split.cc
! dc2ba56d1e3aea6ff7e5617e3764cdab  libstdc++-v3/testsuite/ext/pb_ds/regression/associative_containers.cc
! 0423a666f2d5e3b1653875ccd58f467a  libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand.cc
! dbf005d800916c6075965289871a99d7  libstdc++-v3/testsuite/ext/pb_ds/regression/hash_map_rand_debug.cc
! 0fc4eaf341b2a36b2b07f9652293fadf  libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand.cc
! 6477e60ea4a626c8835380ec42d3a2f4  libstdc++-v3/testsuite/ext/pb_ds/regression/hash_set_rand_debug.cc
! 07b8a3d85fa949897abd530c42cc972a  libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand.cc
! 9617c869759b6f527d979559eab9615f  libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand_debug.cc
! c8fb97308dc020f6b35262ac8a262217  libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand.cc
! 4f46c7a0e722e49046414e6daed3dd21  libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_set_rand_debug.cc
! 8cf627b29ff79f4ecbce0bc0b7ef2fb9  libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_binary_heap-62045.cc
! 58d3fa331b23a47fb4cd59ae25343ee1  libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand.cc
! d655123bbddefc63db163042d9c7a39a  libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queue_rand_debug.cc
! 0d007ff15146aa76577fa166cf0406ea  libstdc++-v3/testsuite/ext/pb_ds/regression/priority_queues.cc
! 2217601055d6e9862ec0f7cdebde9396  libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand.cc
! c57afe281585fed41131b50bcf9893c8  libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand_debug.cc
! 70f446e5df16022dbf2450171ead5c69  libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand.cc
! 6d67dfd5e159801f5e66b2c4f259fb54  libstdc++-v3/testsuite/ext/pb_ds/regression/tree_set_rand_debug.cc
! 20f83bd4fddb56491739599a323d26d1  libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand.cc
! 905347ff5f645a06ed159c633efdfc71  libstdc++-v3/testsuite/ext/pb_ds/regression/trie_map_rand_debug.cc
! 1946f75da9042b621048d086a61c3fa6  libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand.cc
! 016430704500fcd1c274e097fb40856c  libstdc++-v3/testsuite/ext/pb_ds/regression/trie_set_rand_debug.cc
! 58c17e470b0eb8a46688af7afca54f3c  libstdc++-v3/testsuite/ext/pod_char_traits.cc
! 49f2f73e37a211031810b5d57370232e  libstdc++-v3/testsuite/ext/pool_allocator/allocate_chunk.cc
! 8e6788aa34fb901d980f96d1281a089c  libstdc++-v3/testsuite/ext/pool_allocator/check_allocate_max_size.cc
! 301d2f688706b5f0b396ad133c2c4986  libstdc++-v3/testsuite/ext/pool_allocator/check_deallocate_null.cc
! bc6fc6537de893becd31734529b42551  libstdc++-v3/testsuite/ext/pool_allocator/check_delete.cc
! a724e91c2d5608020db5b45d4c83148f  libstdc++-v3/testsuite/ext/pool_allocator/check_new.cc
! df9a672776d31b82ce686a13062fc605  libstdc++-v3/testsuite/ext/pool_allocator/explicit_instantiation.cc
! e8aa41c05fd979499c51f75e27337d3c  libstdc++-v3/testsuite/ext/pool_allocator/overaligned.cc
! 38a1d65e94afb80f60322db0aea62641  libstdc++-v3/testsuite/ext/pool_allocator/variadic_construct.cc
! 06d273bcb99e583e9d2121bb73ce3479  libstdc++-v3/testsuite/ext/random/arcsine_distribution/cons/default.cc
! 8444e9868b5c4cfead633754e7208fc6  libstdc++-v3/testsuite/ext/random/arcsine_distribution/cons/parms.cc
! a468aa0a397c8e79317db226f77b3a79  libstdc++-v3/testsuite/ext/random/arcsine_distribution/operators/equal.cc
! 8a2c578a4b9201d461ab63ec955de0ec  libstdc++-v3/testsuite/ext/random/arcsine_distribution/operators/inequal.cc
! 200f9e179255fa7f71ce4e96460db1a9  libstdc++-v3/testsuite/ext/random/arcsine_distribution/operators/serialize.cc
! 33287568aa1713b68312de32d614340a  libstdc++-v3/testsuite/ext/random/arcsine_distribution/requirements/explicit_instantiation/1.cc
! db6029d0add52acea8507e9545194041  libstdc++-v3/testsuite/ext/random/arcsine_distribution/requirements/typedefs.cc
! fbf7c22e418e2c4d48f4b66a07fae781  libstdc++-v3/testsuite/ext/random/beta_distribution/cons/default.cc
! 4dedd711d0fdb9b5ff1c34b1db010835  libstdc++-v3/testsuite/ext/random/beta_distribution/cons/parms.cc
! 37dc21f781ebecc183c20e46b64b7bd9  libstdc++-v3/testsuite/ext/random/beta_distribution/operators/equal.cc
! 9744a65ee152f9a75d945f3356963b57  libstdc++-v3/testsuite/ext/random/beta_distribution/operators/inequal.cc
! aa3ae78a84797ed3233ebfcba931f4fc  libstdc++-v3/testsuite/ext/random/beta_distribution/operators/serialize.cc
! 18562a2a4055db31d7e223ce947d80d3  libstdc++-v3/testsuite/ext/random/beta_distribution/requirements/explicit_instantiation/1.cc
! 7b4ab87abaf317c3a0811eb6d54494d0  libstdc++-v3/testsuite/ext/random/beta_distribution/requirements/typedefs.cc
! 2ee9bc3b110de057f29b2bde5a29e657  libstdc++-v3/testsuite/ext/random/hoyt_distribution/cons/default.cc
! da3c323d89c930cc585d8860890951f4  libstdc++-v3/testsuite/ext/random/hoyt_distribution/cons/parms.cc
! a18508a08d4bb95c6eab0b20647d8539  libstdc++-v3/testsuite/ext/random/hoyt_distribution/operators/equal.cc
! 61e96b71d51d003b1c99c1c11ea909c4  libstdc++-v3/testsuite/ext/random/hoyt_distribution/operators/inequal.cc
! 78c0dd80dbb420e4c8ca603712083a84  libstdc++-v3/testsuite/ext/random/hoyt_distribution/operators/serialize.cc
! e83ff14a4490b17ba6f05cef84006a79  libstdc++-v3/testsuite/ext/random/hoyt_distribution/requirements/explicit_instantiation/1.cc
! 648e764363194fb1bd832b028fe09271  libstdc++-v3/testsuite/ext/random/hoyt_distribution/requirements/typedefs.cc
! ee0693a7667168f9028ef32549a03e89  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/cons/default.cc
! 769869bde2721686cfb7514f39aa0ca4  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/cons/parms.cc
! 7e80fe69227adc9fe56b1c9d7a34ca2a  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/operators/equal.cc
! 07d384edb69fd9f7ef32a6091b59d9ca  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/operators/inequal.cc
! 20ce47df8ff45fa722378f7d97f47270  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/operators/serialize.cc
! 22e4e12f6788ea6739043437ff8345bd  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/operators/values.cc
  5310d63384a16aab3ca0056f2cb3b3dc  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/pr60037.cc
! c2cf071f0e94cbcfb4939af88135adc5  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/requirements/explicit_instantiation/1.cc
! 072b2036b3c02d3d24212ec876064da5  libstdc++-v3/testsuite/ext/random/hypergeometric_distribution/requirements/typedefs.cc
! ee62c33cd78c9c404539693636047800  libstdc++-v3/testsuite/ext/random/k_distribution/cons/default.cc
! 0148c9482dc78788b2559eadf50dc8af  libstdc++-v3/testsuite/ext/random/k_distribution/cons/parms.cc
! fd55f49796ccae505caa41047ac85161  libstdc++-v3/testsuite/ext/random/k_distribution/operators/equal.cc
! 0cb474640c72760ed893b5ad9428fa9a  libstdc++-v3/testsuite/ext/random/k_distribution/operators/inequal.cc
! b8bfd96777d2d0b7f8e2b40058e14385  libstdc++-v3/testsuite/ext/random/k_distribution/operators/serialize.cc
! 7d2e792c86dd2cc7719ea08452811217  libstdc++-v3/testsuite/ext/random/k_distribution/requirements/explicit_instantiation/1.cc
! f2b863cb522455dbf9f4399daee3fa57  libstdc++-v3/testsuite/ext/random/k_distribution/requirements/typedefs.cc
! 5e77e1d6ca890f2fb9701140da622261  libstdc++-v3/testsuite/ext/random/logistic_distribution/cons/default.cc
! 01f020f32e43a57c892ff3cd0ec6957d  libstdc++-v3/testsuite/ext/random/logistic_distribution/cons/parms.cc
! 15f3e49e1d8889a67af01af3efb51815  libstdc++-v3/testsuite/ext/random/logistic_distribution/operators/equal.cc
! be988a516ddbfc1e7d9528641a12c5b8  libstdc++-v3/testsuite/ext/random/logistic_distribution/operators/inequal.cc
! f5235f2d06c66dcf4add47f3450b37b0  libstdc++-v3/testsuite/ext/random/logistic_distribution/operators/serialize.cc
! 8b38f73733b9b49ad8d289cda24aa864  libstdc++-v3/testsuite/ext/random/logistic_distribution/requirements/typedefs.cc
! 3eb7a4771ff31f0934cdff5a0a7fc012  libstdc++-v3/testsuite/ext/random/nakagami_distribution/cons/default.cc
! 1aea1b2de2f6108293d7fcef4376e65d  libstdc++-v3/testsuite/ext/random/nakagami_distribution/cons/parms.cc
! 3bf039a6a9362d7e041b4f382c78915b  libstdc++-v3/testsuite/ext/random/nakagami_distribution/operators/equal.cc
! 78b03b5833c4ec7501298daca5d407e1  libstdc++-v3/testsuite/ext/random/nakagami_distribution/operators/inequal.cc
! 2f31314125ffa7b7918ea281ffb58cf2  libstdc++-v3/testsuite/ext/random/nakagami_distribution/operators/serialize.cc
! 9a8d87b8e69b668fb56ed704193853f2  libstdc++-v3/testsuite/ext/random/nakagami_distribution/requirements/explicit_instantiation/1.cc
! 2177f0c7b0cd38c8de268db0711a9b02  libstdc++-v3/testsuite/ext/random/nakagami_distribution/requirements/typedefs.cc
! 4c71ff346cb53415946f7c89d029ccfd  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/cons/default.cc
! 9feaf819cc17598d65bd7df94ba0bddc  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/cons/parms.cc
! 4682fdedd9072a3dd888a55d9404689e  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/operators/equal.cc
! 91230edb21ad770a8f7eec42f6c54302  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/operators/inequal.cc
! 974a9ae76a42679d3783475fe1497927  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/operators/serialize.cc
! a0353a91633e9f59391fd0cf141a723a  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/requirements/explicit_instantiation/1.cc
! 7b611a36f1686b74248b25e172d545d3  libstdc++-v3/testsuite/ext/random/normal_mv_distribution/requirements/typedefs.cc
! 28580f4fae1bbc608bce958cbcf8b2ea  libstdc++-v3/testsuite/ext/random/pareto_distribution/cons/default.cc
! 7c3f37ed8fe18cad5407a74cd58136fb  libstdc++-v3/testsuite/ext/random/pareto_distribution/cons/parms.cc
! 04cd7ecda2fd776475b2769801ab375e  libstdc++-v3/testsuite/ext/random/pareto_distribution/operators/equal.cc
! a34125e28598bf239b868683ebc58992  libstdc++-v3/testsuite/ext/random/pareto_distribution/operators/inequal.cc
! 083a4039d4291064162119b8bf0f50e6  libstdc++-v3/testsuite/ext/random/pareto_distribution/operators/serialize.cc
! 878b912a897ecab69ebe13e376203802  libstdc++-v3/testsuite/ext/random/pareto_distribution/requirements/explicit_instantiation/1.cc
! 9c88d764d498b5e3899ec54a8675c02f  libstdc++-v3/testsuite/ext/random/pareto_distribution/requirements/typedefs.cc
! 9e4e9c2bc9d63b73a3d8584aec63d1a6  libstdc++-v3/testsuite/ext/random/rice_distribution/cons/default.cc
! 9691b886f87ada4e09fad6c17585ab2f  libstdc++-v3/testsuite/ext/random/rice_distribution/cons/parms.cc
! c8e0e34ae376a111f79de7276fc7acef  libstdc++-v3/testsuite/ext/random/rice_distribution/operators/equal.cc
! 527757468c36fd185068e9dca498e073  libstdc++-v3/testsuite/ext/random/rice_distribution/operators/inequal.cc
! 528f8e4b58ed872cedbffbec04c6a31a  libstdc++-v3/testsuite/ext/random/rice_distribution/operators/serialize.cc
! 164e74b2c7d1e17061e6c431be2d3d05  libstdc++-v3/testsuite/ext/random/rice_distribution/requirements/explicit_instantiation/1.cc
! 1fd7aa45c33eb1a7e2159146429cab34  libstdc++-v3/testsuite/ext/random/rice_distribution/requirements/typedefs.cc
! 85f45dd5a28bb7a8435d8bba19d21d41  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/copy.cc
! 2fe03331344378182e87e858d6ca1a92  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/default.cc
! 3729d153fcc047a96983a72f53f1092c  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/seed1.cc
! c0c38c867f8d2668ce656657efe9ad98  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/seed2.cc
! 0901f2938ad6a9b9a1bd29ef839e08e3  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/seed_seq.cc
! d2a523f8c733c061464bf4a7da87eb9b  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/cons/seed_seq2.cc
! 5a6689e6057308d6319c8f7ee77d36ad  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/operators/equal.cc
! 8aeced71fbe624ea633bb80ecec4cb8c  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/operators/inequal.cc
! 323318cfb94cc38909b7dde1f60002e2  libstdc++-v3/testsuite/ext/random/simd_fast_mersenne_twister_engine/operators/serialize.cc
! c06a3ed8a5323eb9bac451ca0886beb1  libstdc++-v3/testsuite/ext/random/triangular_distribution/cons/default.cc
! 9ffcdb1cc8030426a0ac9cc64a0b295e  libstdc++-v3/testsuite/ext/random/triangular_distribution/cons/parms.cc
! 77d64737b3fb332a07c62f070a19a424  libstdc++-v3/testsuite/ext/random/triangular_distribution/operators/equal.cc
! 4a896645a8e3707042cde9c0cd72068c  libstdc++-v3/testsuite/ext/random/triangular_distribution/operators/inequal.cc
! 3a09b13240794947b77b881703a9b647  libstdc++-v3/testsuite/ext/random/triangular_distribution/operators/serialize.cc
! 8a2f857f670f6320d6a147fa6af53dfb  libstdc++-v3/testsuite/ext/random/triangular_distribution/requirements/explicit_instantiation/1.cc
! a5199043b316fd03e4b93f2c93932dd9  libstdc++-v3/testsuite/ext/random/triangular_distribution/requirements/typedefs.cc
! 812a0e8e16e5d5ff24eb4ec49511e37f  libstdc++-v3/testsuite/ext/random/uniform_inside_sphere_distribution/cons/default.cc
! c74bb6b14e1ae367edd723a079e76f40  libstdc++-v3/testsuite/ext/random/uniform_inside_sphere_distribution/cons/parms.cc
! 3ea40701c1c7a7c792c1fcb069d2f133  libstdc++-v3/testsuite/ext/random/uniform_inside_sphere_distribution/operators/equal.cc
! f5d6c763f775640c0d6444cfe23de20b  libstdc++-v3/testsuite/ext/random/uniform_inside_sphere_distribution/operators/generate.cc
! f2d0eb632c1c764f303b15457061092f  libstdc++-v3/testsuite/ext/random/uniform_inside_sphere_distribution/operators/inequal.cc
! 34effca4a5f47d2db6a51cf716292a87  libstdc++-v3/testsuite/ext/random/uniform_inside_sphere_distribution/operators/serialize.cc
! 1abe3e4c3754c91af118d83081f904b7  libstdc++-v3/testsuite/ext/random/uniform_on_sphere_distribution/cons/default.cc
! a00e60aeb2b87c1170073c8071cbc68d  libstdc++-v3/testsuite/ext/random/uniform_on_sphere_distribution/operators/equal.cc
! 3bffa4bcef108b69e35cb6508fece8da  libstdc++-v3/testsuite/ext/random/uniform_on_sphere_distribution/operators/generate.cc
! 8fc040b05ca3f2562436bd17fc99a0e3  libstdc++-v3/testsuite/ext/random/uniform_on_sphere_distribution/operators/inequal.cc
! a89b7ceec10dd50d2921c7e9679af942  libstdc++-v3/testsuite/ext/random/uniform_on_sphere_distribution/operators/serialize.cc
! 57fe7e4da4e8ea6056e49dc8f8b830ac  libstdc++-v3/testsuite/ext/random/von_mises_distribution/cons/default.cc
! f7504ebf894c69ff365d2badc562d2c1  libstdc++-v3/testsuite/ext/random/von_mises_distribution/cons/parms.cc
! c79c4cbbb6c984ae8893c180dde8754b  libstdc++-v3/testsuite/ext/random/von_mises_distribution/operators/equal.cc
! 8d4f2bc84916b7f318b6279bf40752f3  libstdc++-v3/testsuite/ext/random/von_mises_distribution/operators/inequal.cc
! 4f39910a9910668d61dc760735728dc8  libstdc++-v3/testsuite/ext/random/von_mises_distribution/operators/serialize.cc
! 8e99ef700d73d3f624c755ef5fb1a211  libstdc++-v3/testsuite/ext/random/von_mises_distribution/requirements/explicit_instantiation/1.cc
! d6c95acdd20d9cce4a40c39a9e71c986  libstdc++-v3/testsuite/ext/random/von_mises_distribution/requirements/typedefs.cc
! e6e38e4485ae0d8f1c46d217e82de8a2  libstdc++-v3/testsuite/ext/rope/1.cc
! 4b4043d9b7ee0d0043f2c34bac5eae23  libstdc++-v3/testsuite/ext/rope/101542.cc
! 18e897e65a44a16e5524ab9011f61c00  libstdc++-v3/testsuite/ext/rope/2.cc
! 1dfca6c387ef737509a2089ba8c97bea  libstdc++-v3/testsuite/ext/rope/3.cc
! 0e0d1c3a6bf11a76c95e08e9dee780bc  libstdc++-v3/testsuite/ext/rope/36832.cc
! b573e0cb5f6a9af37b90856b5864851a  libstdc++-v3/testsuite/ext/rope/4.cc
! 25a328cfc37b3e9fa9dfec63b52b7f5d  libstdc++-v3/testsuite/ext/rope/40299.cc
! 5adf524d78c40193777fa987eace5eef  libstdc++-v3/testsuite/ext/rope/44708.cc
! 051ca96f77f3ee5a744b85071bac8dc7  libstdc++-v3/testsuite/ext/rope/44963.cc
! ed7289967c2c9dda2bb7a1f5cbbc7dd5  libstdc++-v3/testsuite/ext/rope/5.cc
! 0b81b80288d732a069c6aeabb09e013c  libstdc++-v3/testsuite/ext/rope/6.cc
! cd456c4815a4912792d8540ef2dd9286  libstdc++-v3/testsuite/ext/rope/61946.cc
! 5963fb84e4e7b42568ccf0424ec95ff5  libstdc++-v3/testsuite/ext/rope/7.cc
! 137df6fb5897a851a552512b4ce1eefc  libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc
! ab357fbfd044246a931279bf8ac4cabb  libstdc++-v3/testsuite/ext/shared_ptr/1.cc
! cebfa9c21194fa77a62773454258538c  libstdc++-v3/testsuite/ext/slist/23781_neg.cc
! e1dcaff2eabb561bc1b043e471ed945f  libstdc++-v3/testsuite/ext/slist/check_construct_destroy.cc
! fdd605cc9b9819ae87ba2f8516621f8a  libstdc++-v3/testsuite/ext/slist/requirements/explicit_instantiation.cc
! 82d68a6dfd2d1f1440ed5be687cbd281  libstdc++-v3/testsuite/ext/special_functions/airy_ai/check_nan.cc
! 71878d9c827ac282bb8619007c777809  libstdc++-v3/testsuite/ext/special_functions/airy_ai/check_value.cc
! af51c0e12cc5fec7cc0c22ae1483e5eb  libstdc++-v3/testsuite/ext/special_functions/airy_ai/compile.cc
! d09ba3c3f2121e785e55fe839c539c0a  libstdc++-v3/testsuite/ext/special_functions/airy_bi/check_nan.cc
! 47d3b15e7a3012ee43e451025560cd2e  libstdc++-v3/testsuite/ext/special_functions/airy_bi/check_value.cc
! d4a0404dadce257ff8be413891e372ea  libstdc++-v3/testsuite/ext/special_functions/airy_bi/compile.cc
! 5aa3220ae5c22feaf81fed31e41ef915  libstdc++-v3/testsuite/ext/special_functions/conf_hyperg/check_nan.cc
! 6a15d8888f1ef4d0caefbf5fc4620444  libstdc++-v3/testsuite/ext/special_functions/conf_hyperg/check_value.cc
! 39c8b70425cb6d420a8407bad4545099  libstdc++-v3/testsuite/ext/special_functions/conf_hyperg/compile.cc
! 3fcbfe49aecde49e730411f4af62235f  libstdc++-v3/testsuite/ext/special_functions/hyperg/check_nan.cc
! bb554b563d50ddb47b38f51f56e8f1ef  libstdc++-v3/testsuite/ext/special_functions/hyperg/check_value.cc
! 1ae931fad63c215da8b08bc3e874522a  libstdc++-v3/testsuite/ext/special_functions/hyperg/compile.cc
! 039fa799b6961360ff8d1f8cf4fdf39f  libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc
! 94aad0252d88ec2f7bbea6d8a8fcc0d8  libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc
! 907a16d27cb7dd9248f9bd3bcfbbb9da  libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-3.cc
! dfb59bcfa988311a3de53058d8d900d9  libstdc++-v3/testsuite/ext/stdio_filebuf/char/2.cc
! 3a414cf1c63da6d0103c7ca0551af661  libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc
! 21ea51dbb4456212157c88c94ade2fe4  libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc
! 0411420b454402c0560023785394555a  libstdc++-v3/testsuite/ext/stdio_filebuf/requirements/explicit_instantiation.cc
! 938060c555384a951b6713b201e2033a  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/1.cc
! 5ca2effa064bd50ae3a0c45009ac721d  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-1.cc
! c3481ddf67385e9d4f12c85189f26509  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-2.cc
! 9f04a64bad56177c640ff3f07ccf7fbb  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-3.cc
! f670a5d057631b772b13b3732a0dbf9e  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/12048-4.cc
! b7d4bff233f472d12715898187b5f3b7  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/char/35209.cc
! 4315d349b58be2306a8037babff35079  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/1.cc
! acc4ba29917440fb555a9cc51805115f  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12077.cc
! 6a9338ef697aa6b548ff8b477a074100  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12948-1.cc
! fc8e9fd86a9d0e31e654f3a2b4b7b983  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12948-2.cc
! ce1f96f19a167d2fb0bd8e6afd3f0989  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12948-3.cc
! 8ffee4426c6efc76141db3416b0fe130  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/12948-4.cc
! ccda0901ff71570cdfcca73a48d3c07a  libstdc++-v3/testsuite/ext/stdio_sync_filebuf/wchar_t/35209.cc
! 6b4b7e68dd024e7f22287c0502b7d012  libstdc++-v3/testsuite/ext/throw_allocator/check_allocate_max_size.cc
! 20e8354059990234d0bbc80059eecbd3  libstdc++-v3/testsuite/ext/throw_allocator/check_deallocate_null.cc
! 8350db1e5c67a72414f6823b5a99b50a  libstdc++-v3/testsuite/ext/throw_allocator/check_delete.cc
! 687910143fb4339dcdde1edf7d950032  libstdc++-v3/testsuite/ext/throw_allocator/check_new.cc
! c1889b232158f2615ee60592e4f2b767  libstdc++-v3/testsuite/ext/throw_allocator/deallocate_global.cc
! 3df475defb68ad283af535c582919c04  libstdc++-v3/testsuite/ext/throw_allocator/deallocate_local.cc
! 699f2872b524f5d27da2e11e6abbbffb  libstdc++-v3/testsuite/ext/throw_allocator/explicit_instantiation.cc
! ea1c7908519173d4ca5fcc1fe03308aa  libstdc++-v3/testsuite/ext/throw_allocator/variadic_construct.cc
! 6b642c927172f604eed3a8582271eae7  libstdc++-v3/testsuite/ext/throw_value/cons.cc
! d24b4893f81ea66f8d52592421e9dad2  libstdc++-v3/testsuite/ext/type_traits/add_unsigned.cc
! 581b7973c2b5d2d4ba4cdca020156b11  libstdc++-v3/testsuite/ext/type_traits/add_unsigned_floating_neg.cc
! 2ba0001da1d74b43d2ef5bad2ffe8c1d  libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
! 2f245d1206915c08973977bc275e6aee  libstdc++-v3/testsuite/ext/type_traits/remove_unsigned.cc
! a0f78daeda1a5505716e63de09f34388  libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_floating_neg.cc
! 4c23b9981a50c121a8d34d4e6351ad73  libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
! c4e953706786f7b0073f69a476307193  libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc
! 64c8b240a7e01476b273da76221f505f  libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc
! 5127edec60c279c9fc9d6b4c8cd14aa0  libstdc++-v3/testsuite/ext/vstring/cons/58415-1.cc
! 8292a04f51bc954a5907292f2c412926  libstdc++-v3/testsuite/ext/vstring/cons/58415-2.cc
! e50f128cd73447c19179a5ce3c0b57fb  libstdc++-v3/testsuite/ext/vstring/cons/moveable.cc
! 91d354f2f5114ccbc52458208b21022c  libstdc++-v3/testsuite/ext/vstring/cons/noexcept_move_construct.cc
! 8c95302508f91695957e3fb804e3ec03  libstdc++-v3/testsuite/ext/vstring/element_access/char/58163.cc
! 9444c2126731bbb251f37afc8d31e546  libstdc++-v3/testsuite/ext/vstring/element_access/char/front_back.cc
! 08e6b59ac71878f5e239d3a8138e3a04  libstdc++-v3/testsuite/ext/vstring/element_access/wchar_t/58163.cc
! a324b2087f658a626496cdcb611cc0cb  libstdc++-v3/testsuite/ext/vstring/element_access/wchar_t/front_back.cc
! ce5d97141aa7f9250e715d7774affeca  libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc
! 0c27cd82f5507e8067fd591df7cd7be0  libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc
! 55555738e24ce7abe716eccceea95fdb  libstdc++-v3/testsuite/ext/vstring/init-list.cc
! 2956c6119241c02c732df6599680624c  libstdc++-v3/testsuite/ext/vstring/inserters_extractors/char/28277.cc
! 5c888a89bcb1bbe3184671c1c6cfc1e3  libstdc++-v3/testsuite/ext/vstring/inserters_extractors/wchar_t/28277.cc
! 65e0f23c49869365252ffc92436b219e  libstdc++-v3/testsuite/ext/vstring/modifiers/assign/move_assign.cc
! 59b9b0d163de902c30b79ffe26a450bd  libstdc++-v3/testsuite/ext/vstring/modifiers/clear/56166.cc
! 0075bbb5f972fb5fea8aae4cc1a273f3  libstdc++-v3/testsuite/ext/vstring/modifiers/erase/char/54577.cc
! 372fd1a09c77de687b6dabdcf3807e9c  libstdc++-v3/testsuite/ext/vstring/modifiers/erase/wchar_t/54577.cc
! 8a28b1d1bb157792f757e7d143f88793  libstdc++-v3/testsuite/ext/vstring/modifiers/insert/char/const_iterator.cc
! a7ae0b6a31653904f7f01aaabedbd6d8  libstdc++-v3/testsuite/ext/vstring/modifiers/insert/wchar_t/const_iterator.cc
! 11455b7a520a732e43639025bc5fb597  libstdc++-v3/testsuite/ext/vstring/modifiers/pop_back/char/1.cc
! e8116809f35af4ea65b37d1dead5d064  libstdc++-v3/testsuite/ext/vstring/modifiers/pop_back/wchar_t/1.cc
! 88faa963047b8f8e2646b415c96d865c  libstdc++-v3/testsuite/ext/vstring/modifiers/replace/char/const_iterator.cc
! fdeb2345f0012612aac81f3a531a52ca  libstdc++-v3/testsuite/ext/vstring/modifiers/replace/wchar_t/const_iterator.cc
! 336cdd74489ea372d486ba4edbf9cde8  libstdc++-v3/testsuite/ext/vstring/operators/1.cc
! 658bb78db02771d726f5a2d2e1189c5c  libstdc++-v3/testsuite/ext/vstring/operators/2.cc
! fda21324514b34d09fa193b3d6776cf1  libstdc++-v3/testsuite/ext/vstring/range_access.cc
! 7976baf13558ae6f5e5558f2a988e1ae  libstdc++-v3/testsuite/ext/vstring/requirements/citerators.cc
! be08eb92b826c8caf4dea84b836727db  libstdc++-v3/testsuite/ext/vstring/requirements/do_the_right_thing.cc
! e1fdb12181b3c382c844887fd858acc8  libstdc++-v3/testsuite/ext/vstring/requirements/dr438/constructor.cc
! b2617ed10c95d7ae886dcd2d4ffbff53  libstdc++-v3/testsuite/ext/vstring/requirements/exception/basic.cc
! cd0313fea79467b83d9afaf51ea7b6f8  libstdc++-v3/testsuite/ext/vstring/requirements/exception/generation_prohibited.cc
! 3b915c3553bf06ec18111733d9797712  libstdc++-v3/testsuite/ext/vstring/requirements/exception/propagation_consistent.cc
! 2617d6176714dbbae3ae5861961be912  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/1.cc
! 2c3010b18e43515c457b92120478714e  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/2.cc
! 0457f3441a86b4b8bb3f3ddf7ddb4921  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char/1.cc
! 08b8a728b3498f9dd67de66ebd79964d  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/1.cc
! 0f83ab3f5d88e6884f2ca36a9bea2005  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/1.cc
! efe80cd6fb09aa93d37114ed5340800c  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/wchar_t/1.cc
! 64b3206e033f99952dd1678871a15f2a  libstdc++-v3/testsuite/ext/vstring/requirements/typedefs.cc
! d30063403274e1065cc854085e116d6b  libstdc++-v3/testsuite/ext/vstring/types/23767.cc
! 4ab0eb3fb5aaffdf8091547947d6f98f  libstdc++-v3/testsuite/lib/dg-options.exp
! fc2503720aae2c77c00f195d8b6ba64e  libstdc++-v3/testsuite/lib/gdb-test.exp
! 4424f97ad0c4ff6ebfb5044d99e5a347  libstdc++-v3/testsuite/lib/libstdc++.exp
! 56632af45fd1ea0f618c2958d04755ae  libstdc++-v3/testsuite/lib/prune.exp
! 06e070e55f5a8385db00266af680f0eb  libstdc++-v3/testsuite/libstdc++-abi/abi.exp
! e49fd8c901c170534216585f66b1e045  libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
! 86156bce17a48111468fd14ff38f357f  libstdc++-v3/testsuite/libstdc++-prettyprinters/48362.cc
! c417b54472d07ec7aa6e7af1c3c6d896  libstdc++-v3/testsuite/libstdc++-prettyprinters/59161.cc
! 62a8caf50c8f70e57ba300230b08a955  libstdc++-v3/testsuite/libstdc++-prettyprinters/80276.cc
! b1281cbb5e95214d54adafdf2cf2b03f  libstdc++-v3/testsuite/libstdc++-prettyprinters/91997.cc
! 46e322fb900e091e5635c048b2623306  libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc
! a621e16465f591704a2e3250537aad0e  libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc
! f57b02db436cdf6d29f0a670a30ff8eb  libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx17.cc
! 8a7a1074cfc491af32881d81a2c24a91  libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx20.cc
! 9ec08e769d05c4e57a2216c17a47a794  libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc
! c465cd0c44eb881beb7c3b0e3f7dd7aa  libstdc++-v3/testsuite/libstdc++-prettyprinters/debug_cxx11.cc
! 1308cb256215fbac36d63474f1b67694  libstdc++-v3/testsuite/libstdc++-prettyprinters/filesystem-ts.cc
! 52dcc4b418e43960e5bf48331ff4c09e  libstdc++-v3/testsuite/libstdc++-prettyprinters/libfundts.cc
! da21b47c1e8f5b07b617afd5e85b70cd  libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp
! 3e499dc4b62feff7d90d894f5983b7e7  libstdc++-v3/testsuite/libstdc++-prettyprinters/shared_ptr.cc
! 62567c3c3821a4b87e0725f733bef72e  libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc
! 10d9e887e8b0bb9684de71e22e07a9a0  libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc
! a0fdef1654a7cce567c466178f2e4b29  libstdc++-v3/testsuite/libstdc++-prettyprinters/tr1.cc
! 23ad84030b9f4418009146e697f9f746  libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis.cc
! e62ddba2d5699b2da68d1bd242a3536c  libstdc++-v3/testsuite/libstdc++-prettyprinters/whatis2.cc
! bce8bb63953cd2f76e9429708e884949  libstdc++-v3/testsuite/libstdc++-xmethods/array.cc
! a0e7ce5b03ed560d49265aed37b12cc7  libstdc++-v3/testsuite/libstdc++-xmethods/associative-containers.cc
! 94a207eeede0afa31ca42f89a730dd1f  libstdc++-v3/testsuite/libstdc++-xmethods/deque.cc
! c2226029ecf5fdb125ac9a4771b762d6  libstdc++-v3/testsuite/libstdc++-xmethods/forwardlist.cc
! a100879d6e7ba579a0ad08cdbbc26eb0  libstdc++-v3/testsuite/libstdc++-xmethods/list.cc
! 086d94a9dd89827e92f18928f8bff556  libstdc++-v3/testsuite/libstdc++-xmethods/shared_ptr.cc
! 33ca044f8f8a2f62e24d95d7a748c4b1  libstdc++-v3/testsuite/libstdc++-xmethods/unique_ptr.cc
! 7daf2f515095edcd7f916bd56f261ece  libstdc++-v3/testsuite/libstdc++-xmethods/vector.cc
! 5a27c95f34c43a4877f22dedb79f24c8  libstdc++-v3/testsuite/libstdc++-xmethods/xmethods.exp
  af003639dee7c3edb68531616f1c3b8c  libstdc++-v3/testsuite/performance/20_util/memory_resource/pools.cc
! 840158fe75fc337b2a08cfaa4debc5a0  libstdc++-v3/testsuite/performance/21_strings/append-1.cc
! 0f90e89b37eed6be1534ae27f64b9091  libstdc++-v3/testsuite/performance/21_strings/append-2.cc
! 8ca4de3b12442750fe3ac8a1c9eb00e7  libstdc++-v3/testsuite/performance/21_strings/cons_input_iterator.cc
! d90f563b4c2a10f4fd18282f6760389a  libstdc++-v3/testsuite/performance/21_strings/copy_cons_and_dest.cc
! 28221ab498371ec933df807bb4f42bc4  libstdc++-v3/testsuite/performance/21_strings/find.cc
  efa1608e1841a10bba94a6d4de361846  libstdc++-v3/testsuite/performance/21_strings/hash.cc
! 0232521d4b3897b68f7d101657bdbb7d  libstdc++-v3/testsuite/performance/22_locale/is_wchar_t.cc
! 0240d23985670180b1fa7649b9a7ee18  libstdc++-v3/testsuite/performance/22_locale/narrow_widen_char.cc
! a6db46e7dccf17f491981b897c8c065d  libstdc++-v3/testsuite/performance/22_locale/narrow_widen_wchar_t.cc
! 6af1162e7e9626ff063427d96ea58487  libstdc++-v3/testsuite/performance/22_locale/wchar_t_in.cc
! e5b8c91a4c8fcdfcf032389773dd205c  libstdc++-v3/testsuite/performance/22_locale/wchar_t_length.cc
! e5db51d6387cbc56e9e82daa24acbd46  libstdc++-v3/testsuite/performance/22_locale/wchar_t_out.cc
! 892fc7aeb41c787373af42e4025e82cd  libstdc++-v3/testsuite/performance/23_containers/copy_construct/unordered_set.cc
! 52e019d2e3bf816dfc25e2b10e6de797  libstdc++-v3/testsuite/performance/23_containers/copy_construct/vector_bool.cc
! f0ce1c2ac19a534df9855486bb2e4bc0  libstdc++-v3/testsuite/performance/23_containers/create/map.cc
! 92fcf88b9359efb35a0fc75075d890d6  libstdc++-v3/testsuite/performance/23_containers/create_from_sorted/set.cc
! 7327f964a6f4823373902ea2e60c56c8  libstdc++-v3/testsuite/performance/23_containers/create_sort/list.cc
! 3e8c5d623da7eb276ca16fbe224017e9  libstdc++-v3/testsuite/performance/23_containers/find/map.cc
! 5e3ab89f5a9c227f64e188159d9dbd49  libstdc++-v3/testsuite/performance/23_containers/index/map.cc
! 9e493693af88d569be52a8bf38066dde  libstdc++-v3/testsuite/performance/23_containers/insert/54075.cc
! fc5fa43968d842a9fed89c228af39122  libstdc++-v3/testsuite/performance/23_containers/insert/81476.cc
! 3a2bba6a7ebff31cc5e7a830a12c88ec  libstdc++-v3/testsuite/performance/23_containers/insert/associative.cc
! baeea71dbaff6fcb0cd87e06995242f4  libstdc++-v3/testsuite/performance/23_containers/insert/sequence.cc
! 069de8194c7c8cad1ab0061d5aa9b6e9  libstdc++-v3/testsuite/performance/23_containers/insert/unordered_map_array.cc
! bc8e8c4cf6cf47653ef00de2fe002c7d  libstdc++-v3/testsuite/performance/23_containers/insert/unordered_multiset_hint.cc
! 1490bebc2b27d0759912190b77eb1e0f  libstdc++-v3/testsuite/performance/23_containers/insert/unordered_set.cc
! 44669bcfc5b18ab5a0ad77bb9a09725b  libstdc++-v3/testsuite/performance/23_containers/insert_erase/41975.cc
! 555e3fdf33b9771ff4a9b8d540cf70e7  libstdc++-v3/testsuite/performance/23_containers/insert_erase/associative.cc
! 2d981877480f3a695120834dad3e4505  libstdc++-v3/testsuite/performance/23_containers/insert_erase/unordered_small_size.cc
! b345ba276a133cae15233f18ea6e376b  libstdc++-v3/testsuite/performance/23_containers/insert_from_sorted/set.cc
! 49080df97db26ec6376a6f04467cc05a  libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc
! 0342801c357d361700770c7889acda58  libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc
! 9edd721f68ce8b515c368b762d6ce54f  libstdc++-v3/testsuite/performance/23_containers/range_construct/deque_construct.cc
! ced57e13993c309f131e0c866d901117  libstdc++-v3/testsuite/performance/23_containers/range_construct/list_construct1.cc
! 6faee9df250b773d6be1911bf46f772c  libstdc++-v3/testsuite/performance/23_containers/range_construct/list_construct2.cc
! 36303d06835040c34e16609e29656fb3  libstdc++-v3/testsuite/performance/23_containers/range_construct/vector_construct.cc
! 3259889edb565ebb894d046a07c80586  libstdc++-v3/testsuite/performance/23_containers/resize/vector_bool.cc
! 230ae533a2ba12e7ff920b0859c41eb5  libstdc++-v3/testsuite/performance/23_containers/sort_search/list.cc
  9d1d6439b2e93ebc48779237c0969b25  libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc
  ab09b2da7335847dccf2fd63d8b8fd89  libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc
! 56ae0d2b75190ab2a6f578c1e0bcc916  libstdc++-v3/testsuite/performance/25_algorithms/copy_streambuf_iterators.cc
! 8900da69c7c4bc84a3a44f0a173afb5e  libstdc++-v3/testsuite/performance/25_algorithms/equal_deque_iterators.cc
! d2f3183574fec1af723baba29bd7c3ef  libstdc++-v3/testsuite/performance/25_algorithms/find_istreambuf_iterators.cc
! ae28e2e5c2a33c5eff27c8f9380de9ce  libstdc++-v3/testsuite/performance/25_algorithms/inplace_merge.cc
! 9befcc7514d3ecfdfe3a583de77cc3bd  libstdc++-v3/testsuite/performance/25_algorithms/lexicographical_compare.cc
! 2caf30b525d927213b5f3d1694f2c026  libstdc++-v3/testsuite/performance/25_algorithms/nth_element_worst_case.cc
! bd8f2c4c6d3c014b47cda0bf28a8ce9a  libstdc++-v3/testsuite/performance/25_algorithms/search_n.cc
! e6e466dbe49f323657e4cba7f5db0924  libstdc++-v3/testsuite/performance/25_algorithms/sort.cc
! dddd7f2bd9dece73d897543afd25b24b  libstdc++-v3/testsuite/performance/25_algorithms/sort_heap.cc
! d0cd5fca960ff1dd6b4f400a623fedc5  libstdc++-v3/testsuite/performance/25_algorithms/stable_sort.cc
! f91154477c07b4ab38b9e749cd9ba7e6  libstdc++-v3/testsuite/performance/26_numerics/complex_norm.cc
! c9e8e8870eda90e9512f65d44febfa1c  libstdc++-v3/testsuite/performance/26_numerics/random_dist.cc
! 89a54dedb718c96f0b722e8738e1eb07  libstdc++-v3/testsuite/performance/26_numerics/valarray_gslice_to_index.cc
! 430d3442be6c9a5ba28327dcd406c442  libstdc++-v3/testsuite/performance/27_io/cout_insert_int.cc
! f57ab1675b6d34fc3ade8dafb548d1d8  libstdc++-v3/testsuite/performance/27_io/filebuf_copy.cc
! 9f522eda0ef793ef3770a348bc570de8  libstdc++-v3/testsuite/performance/27_io/filebuf_sgetn_unbuf.cc
! 06bc0e2ba6c84b5097297e1987e4c6f5  libstdc++-v3/testsuite/performance/27_io/filebuf_sputc.cc
! 3ac614335a4f0233831b40ba8cc86a10  libstdc++-v3/testsuite/performance/27_io/filebuf_sputn_unbuf.cc
! e32ce377a538fc89f606ffd8701cd6a0  libstdc++-v3/testsuite/performance/27_io/fmtflags_manipulators.cc
! 1888816ff8f38424a470b5d7dc4c62a2  libstdc++-v3/testsuite/performance/27_io/fstream_seek_write.cc
! 53b1fef96e11eaa2d463e087266b1841  libstdc++-v3/testsuite/performance/27_io/ifstream_extract_chars.cc
! 6c8739fffd7cadf72eb05a245355523f  libstdc++-v3/testsuite/performance/27_io/ifstream_extract_float.cc
! 7d1031ff11ac743250bdb359ad8bdcb4  libstdc++-v3/testsuite/performance/27_io/ifstream_extract_int.cc
! 8e2916078f30db8ca6d791c2c84722b8  libstdc++-v3/testsuite/performance/27_io/ifstream_getline-2.cc
! 00dc0aef4ed0926ad6354255e24d7c57  libstdc++-v3/testsuite/performance/27_io/ifstream_getline.cc
! eff4f4cd2cb4cc4a774d992168d9bde9  libstdc++-v3/testsuite/performance/27_io/ofstream_insert_float.cc
! 3ae09a8a783c2f2eb21817c268e78c5b  libstdc++-v3/testsuite/performance/27_io/ofstream_insert_int.cc
! f167ac1152a25ca75aaa60d8fac00b93  libstdc++-v3/testsuite/performance/27_io/stringbuf_overflow.cc
! 4eac95c4abf6c31e5b5c8ccdb5fabaed  libstdc++-v3/testsuite/performance/28_regex/range.cc
! 8138331270af00e396051166415f5129  libstdc++-v3/testsuite/performance/28_regex/split.cc
! cb646a4426607d8ad046c1b20c354622  libstdc++-v3/testsuite/performance/28_regex/split.h
! aecee09353783a3cc61c06aaea52500a  libstdc++-v3/testsuite/performance/28_regex/split_bfs.cc
! 9fde39f5be0f6fb478d9375295ef17bb  libstdc++-v3/testsuite/performance/29_atomics/atomic_flag.cc
! 5c6d200f5e376b4b8186dd0458aec16d  libstdc++-v3/testsuite/performance/30_threads/future/polling.cc
! a4be922ab69a858cf05c22e30bd0f13d  libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_find.cc
! 594e6b38e4a1f4552af21b5e245cad4d  libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_subscript_find.cc
! 9d11e0f98bd91d0ef693172e566abcc1  libstdc++-v3/testsuite/performance/ext/pb_ds/all_int_subscript_insert.cc
! dd758e3210dbf3256cd2bcc2952e7bf3  libstdc++-v3/testsuite/performance/ext/pb_ds/all_text_find.cc
! 99fa4b4ea32721edbacb489403a605cc  libstdc++-v3/testsuite/performance/ext/pb_ds/hash_int_erase_mem.cc
! a24dfe16479f5e605440aeb96726f5a6  libstdc++-v3/testsuite/performance/ext/pb_ds/hash_zlob_int_find.cc
! dc43e197e33ad868d37b7530821d7ec0  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find.hpp
! 9e1c8fb69782ae81710d0fb1e5d30815  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_large.cc
! 67f02c7c4c3a18ec4b2f014adceebb91  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_find_small.cc
! 0e5ffb832cb33439fa3f43451414622d  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert.hpp
! c4bd53cf514ddc4d33d11fdb6ecabe55  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_large.cc
! 19944cc3cf9e7753000d1c2a576f15d6  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem.hpp
! a7b4912068fd8a08cbb1844145d589d8  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_large.cc
! 42706092cfc63a82004b300b95a6d07c  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_mem_small.cc
! d29ad25cc99c5fb32910ef71a9beff6e  libstdc++-v3/testsuite/performance/ext/pb_ds/multimap_text_insert_small.cc
! b6c58e428c1a741f73c1ce8eeaff13dc  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_int_push.cc
! e24f9e0eeac1179394f0f1fbc24e90dd  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_int_push_pop.cc
! bc596f842e02fefc30152acd7545ae85  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_join.cc
! abc139d12ca0db54e9df65a181f56223  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify.hpp
! 80852d5bc518ad059f4b9a3eecc503e2  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_down.cc
! 83fc05d2875085e1ed7296736ef3ebd7  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_modify_up.cc
! 65f350d9b8133d6b4241b1353188bc55  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_pop_mem.cc
! fcb0af7993235a5d50a14adb0271ed8d  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push.cc
! 923c1c7f1c5b8a2a67df1bd610a17024  libstdc++-v3/testsuite/performance/ext/pb_ds/priority_queue_text_push_pop.cc
! eb2f4bdc74c8c08e0abaa77e09be6373  libstdc++-v3/testsuite/performance/ext/pb_ds/tree_order_statistics.cc
! d1965772374ee9edd31928228838a825  libstdc++-v3/testsuite/performance/ext/pb_ds/tree_split_join.cc
! 077adcf2fd08890ec77fff878e2c1c02  libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_insert.cc
! 34949b3d00914bb997c15f903c14aea6  libstdc++-v3/testsuite/performance/ext/pb_ds/tree_text_lor_find.cc
! f0fa94c8ceb518212339920b438f89a3  libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/check_nan.cc
! d3bc12bc51e748592fb61c2a4cf06da8  libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/check_value.cc
! 4a51cd826cb2a4fce1f4867885a6fc0b  libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/compile.cc
! 4840563717630dfd3165c1b581194ffe  libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/compile_2.cc
! e922cbcf3222b7a5c17557b242588cec  libstdc++-v3/testsuite/special_functions/02_assoc_legendre/check_nan.cc
! d2a4ae4a31cc7ac8f8a21faddcf8ac71  libstdc++-v3/testsuite/special_functions/02_assoc_legendre/check_value.cc
! d0790e874166688418441e012f3169d5  libstdc++-v3/testsuite/special_functions/02_assoc_legendre/compile.cc
! 619962e79925c93885ff239db1bd588d  libstdc++-v3/testsuite/special_functions/02_assoc_legendre/compile_2.cc
! 0fb1b5698197682b0ec3512061098467  libstdc++-v3/testsuite/special_functions/02_assoc_legendre/pr86655.cc
! e92fd7de3de09693ab522422bac10188  libstdc++-v3/testsuite/special_functions/03_beta/check_nan.cc
! b6d68b3d10672d0b60653dd0dab99120  libstdc++-v3/testsuite/special_functions/03_beta/check_value.cc
! e5a0c7da3ef3e2f94aced5ecec268f91  libstdc++-v3/testsuite/special_functions/03_beta/compile.cc
! 2226666fc211c2fe0448ef0a26005873  libstdc++-v3/testsuite/special_functions/03_beta/compile_2.cc
! c6f24ccad10b69021360c7448172576f  libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/check_nan.cc
! a4edeef2e420dbf8d7aa19e1445d10d8  libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/check_value.cc
! c7e39952e51e1cabbfbabce8533ffad8  libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/compile.cc
! 229cff9a570acc14a9ecab5ca9edb7d9  libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/compile_2.cc
! 803b9b1d4ffc969c8e4510c32661891b  libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/check_nan.cc
! 270b62859d22563f375701329cb40915  libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/check_value.cc
! ceea6e7b74615ed1b52bf18bb9906715  libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/compile.cc
! e8ec18e4084121f38eb7d6ad322db1a5  libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/compile_2.cc
! d97eb8de52316a8b010b152c296cb2e2  libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/check_nan.cc
! c0345812d3f2c5270c883e3355b139c0  libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/check_value.cc
! be357ef759d6d5e3bcb40f9bc6f21c54  libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/compile.cc
! 92d21cb737b26a0656de123b7dd3828b  libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/compile_2.cc
  d40969d8e7a8973cde9b227f9ce95961  libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/pr66689.cc
! 9a7ffade5f344c2a5fc71cbbcd2fcbdb  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/check_nan.cc
! 367b04753ee2219722c8bc7c832ac5de  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/check_value.cc
! 52c56b59ab7c556a7cf1658dce5f1fbd  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/compile.cc
! 753d710a63694b86796f03af45f1201f  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/compile_2.cc
! 3b54fd02a06dbad2b33780255914b04b  libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/pr56216.cc
! 829574c175c5fc8a725c9ad1eb35d5cc  libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_nan.cc
! 9738cd258bf50426e7812fd41360388a  libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_value.cc
! 7a62cf2a9144683217ddfbe0bf33c818  libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/compile.cc
! a2f47fec97b778dd7f35c7927414cf5f  libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/compile_2.cc
! 28bf63009a3641cb2fd3e28336152b73  libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/check_nan.cc
! 3851e99609fab6df9bcfaf60f01924ef  libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/check_value.cc
! 4db0196ec1ed2acccabb1f272049635a  libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/compile.cc
! bc24a84a27434194303c04ff659ec9aa  libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/compile_2.cc
! e1559a6d08f260dff83d56c263cd4625  libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_nan.cc
! 8c3a0e163b7d7b78f56ef7cdf64a2d87  libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_value.cc
! 3d233d46b5cd4297c6b0900d4e520cdf  libstdc++-v3/testsuite/special_functions/10_cyl_neumann/compile.cc
! 930176e229cf5b79145ffe994bee449c  libstdc++-v3/testsuite/special_functions/10_cyl_neumann/compile_2.cc
! daf3bbcd12755a0c42d444d3f364992f  libstdc++-v3/testsuite/special_functions/11_ellint_1/check_nan.cc
! f4ada7a13f50b17072689d2c819c512e  libstdc++-v3/testsuite/special_functions/11_ellint_1/check_value.cc
! 0855883a3f69690ec9d10bae22cbd8ed  libstdc++-v3/testsuite/special_functions/11_ellint_1/compile.cc
! c1fb3657371112ee9b96c47722497b43  libstdc++-v3/testsuite/special_functions/11_ellint_1/compile_2.cc
! 347ba0cbcf52af452a40ac8aecdc83e1  libstdc++-v3/testsuite/special_functions/12_ellint_2/check_nan.cc
! d110241fc0d6c28c924e61d097196b80  libstdc++-v3/testsuite/special_functions/12_ellint_2/check_value.cc
! ab9032b9b0173aa674b7804574c29321  libstdc++-v3/testsuite/special_functions/12_ellint_2/compile.cc
! ee699c19e8af87ff01ec2b6fec06f76d  libstdc++-v3/testsuite/special_functions/12_ellint_2/compile_2.cc
! d6fe06ea2e0f0041caa60884c37159b3  libstdc++-v3/testsuite/special_functions/13_ellint_3/check_nan.cc
! e0a49703cdef3609c248d2f39076918a  libstdc++-v3/testsuite/special_functions/13_ellint_3/check_value.cc
! 6f65f542e16193abea1610747763af4e  libstdc++-v3/testsuite/special_functions/13_ellint_3/compile.cc
! fdaa922dddbbfd22be7a1d158ac72bca  libstdc++-v3/testsuite/special_functions/13_ellint_3/compile_2.cc
  51586062b3eeaebd7af37c198695dc60  libstdc++-v3/testsuite/special_functions/13_ellint_3/pr66689.cc
! 0dd9159cd0ec6de83791fc70e4673784  libstdc++-v3/testsuite/special_functions/14_expint/check_nan.cc
! bfcdff51a527fa722d62a03e38bf4fde  libstdc++-v3/testsuite/special_functions/14_expint/check_value.cc
! 6b271845327ba066d5cb3870e7159a6f  libstdc++-v3/testsuite/special_functions/14_expint/compile.cc
! 23db074d97da7f8953944b88a8992760  libstdc++-v3/testsuite/special_functions/14_expint/compile_2.cc
! 321b74118220d7b0ea3b3de816eb5fb1  libstdc++-v3/testsuite/special_functions/14_expint/pr68397.cc
! 407eaf23202c91045e915add7ddeff43  libstdc++-v3/testsuite/special_functions/15_hermite/check_nan.cc
! 5448e654b0587ea2e2b0b3d08a408200  libstdc++-v3/testsuite/special_functions/15_hermite/check_value.cc
! f5bd62a92388d4707e6c4638b7e98a85  libstdc++-v3/testsuite/special_functions/15_hermite/compile.cc
! 2158996c1b4b3c5cbca264d71c73c7a6  libstdc++-v3/testsuite/special_functions/15_hermite/compile_2.cc
! 544aa478b5e4851475feb431bf6d9c0b  libstdc++-v3/testsuite/special_functions/16_laguerre/check_nan.cc
! b7cbdec006aa24ecb0e45f7660cbf53a  libstdc++-v3/testsuite/special_functions/16_laguerre/check_value.cc
! 8a8210125535a516ed82bec7326f6bd2  libstdc++-v3/testsuite/special_functions/16_laguerre/compile.cc
! 767a87ab56e0bac8ff435fd1da7b0fa6  libstdc++-v3/testsuite/special_functions/16_laguerre/compile_2.cc
! bedbe93808dc25430c46d65cb6c13914  libstdc++-v3/testsuite/special_functions/17_legendre/check_nan.cc
! 2a081ba71977b1b881c9718c84b22299  libstdc++-v3/testsuite/special_functions/17_legendre/check_value.cc
! 057a25251e79878c0a9ac21ad3088310  libstdc++-v3/testsuite/special_functions/17_legendre/compile.cc
! 0b4773f7af86b7a715ffdfab8e48e04b  libstdc++-v3/testsuite/special_functions/17_legendre/compile_2.cc
! bb97cc2f377fdd540ec4147b0223d4ad  libstdc++-v3/testsuite/special_functions/18_riemann_zeta/check_nan.cc
! 8fc4ae8e6e48bb89a75f245298acca47  libstdc++-v3/testsuite/special_functions/18_riemann_zeta/check_value.cc
! c310b0dac9ae8e66652d8921c27c03e8  libstdc++-v3/testsuite/special_functions/18_riemann_zeta/compile.cc
! 93e3d36aee6289d7538b09e5a4f868f5  libstdc++-v3/testsuite/special_functions/18_riemann_zeta/compile_2.cc
! 9808a28dfb6d02edadb6a0545ab1bd48  libstdc++-v3/testsuite/special_functions/19_sph_bessel/check_nan.cc
! 9f81b3220b5498e5184f14ecd054dccd  libstdc++-v3/testsuite/special_functions/19_sph_bessel/check_value.cc
! 70af3b58dae2eb3f3d4ca3805b5133fa  libstdc++-v3/testsuite/special_functions/19_sph_bessel/compile.cc
! 32aa6e3e80a641626a6e978dc06af8df  libstdc++-v3/testsuite/special_functions/19_sph_bessel/compile_2.cc
! cedee1f7997205878dda3714096bf688  libstdc++-v3/testsuite/special_functions/20_sph_legendre/check_nan.cc
! 5e96e196001d2d23119681d7b4916a3c  libstdc++-v3/testsuite/special_functions/20_sph_legendre/check_value.cc
! 6df251b010e5987884fec6bd58e3f23d  libstdc++-v3/testsuite/special_functions/20_sph_legendre/compile.cc
! 471dba9b6eb5953d29973efb067e71e9  libstdc++-v3/testsuite/special_functions/20_sph_legendre/compile_2.cc
! 80f0b9f8e27a3776341f5c6b66f4a7a2  libstdc++-v3/testsuite/special_functions/20_sph_legendre/pr86655.cc
! 88246cff35a7f6bfb9901c4272c6467a  libstdc++-v3/testsuite/special_functions/21_sph_neumann/check_nan.cc
! 70d8843f255475a00ba89b087bd1e67e  libstdc++-v3/testsuite/special_functions/21_sph_neumann/check_value.cc
! aa4fd4e736459b74e88d06697284a614  libstdc++-v3/testsuite/special_functions/21_sph_neumann/compile.cc
! 70195b319253f08e8c34a24e1278e459  libstdc++-v3/testsuite/special_functions/21_sph_neumann/compile_2.cc
! 27089c8555e0b1d01d423ba3435e8553  libstdc++-v3/testsuite/std/concepts/1.cc
! f59a107525cd5aa51b4d2fd35b42e414  libstdc++-v3/testsuite/std/concepts/2.cc
! a5034bed2fdef115a8a9140dfb5d9b2c  libstdc++-v3/testsuite/std/concepts/concepts.callable/invocable.cc
! 7d554b73704173ba68cc95a5852da200  libstdc++-v3/testsuite/std/concepts/concepts.callable/regular_invocable.cc
! 4a9fafc756db35a1144f86beb3af49ea  libstdc++-v3/testsuite/std/concepts/concepts.callable/relation.cc
! 5a0b0e7a6012b2050f76c2b03cc9fbad  libstdc++-v3/testsuite/std/concepts/concepts.callable/strictweakorder.cc
! ee26773d046d52f63e5556c6edb515a7  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.arithmetic/floating_point.cc
! 6ec6c5e948e079053097616e481918b2  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.arithmetic/integral.cc
! 9cb48942e864bab2aa052d92d77fbd22  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.arithmetic/signed_integral.cc
! b1778043d98f12700fd920276465016d  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.arithmetic/unsigned_integral.cc
! b57e21559c9a841ba9ced962c63b8373  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.assignable/1.cc
! 7d6528c6d2bad029e3f555efaf169aff  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.common/1.cc
! 204031a94647c173270237fe08d5d18b  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.commonref/1.cc
! d95676917ebf468840a3f4fc54dbd48f  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.constructible/1.cc
! ed78dc43441e56cbb80161cf45986144  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.convertible/1.cc
! 372b8a2e1609045297940302d89f64e5  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.copyconstructible/1.cc
! 3e514c31321c01052e0dcb48b75d2339  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.defaultinitializable/1.cc
! 13adf31db3d69eec787fe72b92ceb75c  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.defaultinitializable/lwg3149.cc
! df1cb5c9a7842e58b8184f0fc78bb821  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.derived/1.cc
! ffb50642f023acf55f46da47652380fc  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.destructible/1.cc
! 10c667a3fce5e7ffcb58185fac188fd4  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.moveconstructible/1.cc
! ee45a93bf868cf33bde3b6c0bf3bb216  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.same/1.cc
! ef528af0670fd6f125d93df195766752  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.swappable/swap.cc
! 43ce8f538e65587a027d3c82113c2667  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.swappable/swappable.cc
! 41b60b2c1b4961a03fa17425c4ac856a  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.swappable/swappable_with.cc
! 9e0c407f5e01a8013f0722549d860b12  libstdc++-v3/testsuite/std/concepts/concepts.object/copyable.cc
! 85b00e0e9dcc26dee8eac69c2950bf27  libstdc++-v3/testsuite/std/concepts/concepts.object/movable.cc
! 275c7f09aea91eda64d5f3ec0c92dd6f  libstdc++-v3/testsuite/std/concepts/concepts.object/regular.cc
! 201e3e18fce366a5318a892bb2f3a645  libstdc++-v3/testsuite/std/concepts/concepts.object/semiregular.cc
! 0b211118947d205d63fee1f1682151e6  libstdc++-v3/testsuite/std/ranges/97600.cc
! 098cf5ff316bfa8fe61f6c4ef6c78d37  libstdc++-v3/testsuite/std/ranges/access/101782.cc
! 11d4e98f4c22c10daf244feadd9b61b4  libstdc++-v3/testsuite/std/ranges/access/begin.cc
! 70ccf032f2be813dae11df45ac97cbab  libstdc++-v3/testsuite/std/ranges/access/begin_neg.cc
! 227de4722058e33146212dfdb4b69395  libstdc++-v3/testsuite/std/ranges/access/cbegin.cc
! 98d88903efc85f63e68d1d7d8e5b0fde  libstdc++-v3/testsuite/std/ranges/access/cdata.cc
! 2d3b106ea166984f98065f4b9e96edfc  libstdc++-v3/testsuite/std/ranges/access/cend.cc
! 6623f9d75a3c1ad34b7ebbf9c6da4a92  libstdc++-v3/testsuite/std/ranges/access/crbegin.cc
! 86c87340876c5fc4e71198ea4cfd442f  libstdc++-v3/testsuite/std/ranges/access/crend.cc
! 6f71f54829d2b434db5f571c3384564f  libstdc++-v3/testsuite/std/ranges/access/data.cc
! 245929736d8af05d600eef23beba6ccd  libstdc++-v3/testsuite/std/ranges/access/empty.cc
! 8c9b837380e1fe3976d3aa692ff3d58b  libstdc++-v3/testsuite/std/ranges/access/end.cc
! 4d42db77f4ac3c192ced37fdbdcd88a4  libstdc++-v3/testsuite/std/ranges/access/end_neg.cc
! 471ce08641a9a9644d49e764184cc090  libstdc++-v3/testsuite/std/ranges/access/lwg3467.cc
! 4089c15b150a2be4c152c24ba5bf102e  libstdc++-v3/testsuite/std/ranges/access/rbegin.cc
! 4f2b5b696882724df7ba88b93f5f8df8  libstdc++-v3/testsuite/std/ranges/access/rend.cc
! 7d0e49cf060ff379c667ae3c693e50f4  libstdc++-v3/testsuite/std/ranges/access/size.cc
! e6ab22866643daf0783f4834c36f6eb5  libstdc++-v3/testsuite/std/ranges/access/size_neg.cc
! 5948ed6d7980172c4dbadb7ae4fe60f4  libstdc++-v3/testsuite/std/ranges/access/ssize.cc
! 38fc3c7cae93b1cfb70ae161a286ee69  libstdc++-v3/testsuite/std/ranges/adaptors/100479.cc
! 64db7c48c2855a48395b173bb523f274  libstdc++-v3/testsuite/std/ranges/adaptors/100577.cc
! af701ad4d3eb35795c9255f86ab7a1d0  libstdc++-v3/testsuite/std/ranges/adaptors/93978.cc
! e0d0763bfd8fea442eb0ec6ddc2b8f6d  libstdc++-v3/testsuite/std/ranges/adaptors/95322.cc
! 5b715eff15e21d3d8015edb32206a336  libstdc++-v3/testsuite/std/ranges/adaptors/99433.cc
! 1a9c662295594e272c2529b2d0a522b0  libstdc++-v3/testsuite/std/ranges/adaptors/all.cc
! ade74e85e40fe4e74827e6a55a54c472  libstdc++-v3/testsuite/std/ranges/adaptors/common.cc
! 9f1126fcd877d223f83e414148cc58a0  libstdc++-v3/testsuite/std/ranges/adaptors/conditionally_borrowed.cc
! 188b1ccd4a00df68bd18c110aee5ae6b  libstdc++-v3/testsuite/std/ranges/adaptors/counted.cc
! 31eced1aac2c46b33c5b45da7b713cd5  libstdc++-v3/testsuite/std/ranges/adaptors/detail/copyable_box.cc
! 458981f708ae3f72dcb5c96fc82430d6  libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc
! 9649f880152a2754d4d7211ae40b27ba  libstdc++-v3/testsuite/std/ranges/adaptors/drop_while.cc
! 429f764e00f53f1b6faf611b7d9f7e61  libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc
! 586079e27579e276d0f94606f3718cb2  libstdc++-v3/testsuite/std/ranges/adaptors/filter.cc
! bcb28fda3ea96e1410ad1e762b6e7618  libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
! 9da12d2bf1312894566e35643ee68db2  libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc
! 15664cc9e041e6379d306b657aa0fce2  libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split_neg.cc
! f33f0ff8028ec4351d27db654581b0e0  libstdc++-v3/testsuite/std/ranges/adaptors/lwg3286.cc
! 50b9c2b5e70b727f80a7aae0f80558b0  libstdc++-v3/testsuite/std/ranges/adaptors/lwg3313_neg.cc
! 11a9b7d7b3fb4dc67a5d601307b8ee1b  libstdc++-v3/testsuite/std/ranges/adaptors/lwg3325_neg.cc
! 171a2dea44d61fd520f28b72e0f3cf64  libstdc++-v3/testsuite/std/ranges/adaptors/lwg3406.cc
! f5ae24ee88e019eb5b5539161769c4af  libstdc++-v3/testsuite/std/ranges/adaptors/p1739.cc
! 93ce663511ed6187f3dd639a711ea96c  libstdc++-v3/testsuite/std/ranges/adaptors/p2281.cc
! d4a65d83f8fb81ed89de3abf07e09df8  libstdc++-v3/testsuite/std/ranges/adaptors/reverse.cc
! 43975893eeb488fb663af307271b4b3c  libstdc++-v3/testsuite/std/ranges/adaptors/sizeof.cc
! 54633b4891f4d2f201533e9508340b5f  libstdc++-v3/testsuite/std/ranges/adaptors/split.cc
! a1a381a7aa2ef50b3e9c1bffc5982b6f  libstdc++-v3/testsuite/std/ranges/adaptors/take.cc
! 637b3a917e62ce61131671aec619637d  libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc
! 0e104dfc45d3db90ea2ad6df98bbf6aa  libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc
! baada0481c88624f94317003692679ae  libstdc++-v3/testsuite/std/ranges/empty_view.cc
! d92e49da207bf912ef96adc5011f6de0  libstdc++-v3/testsuite/std/ranges/headers/ranges/synopsis.cc
! 4bd8be9dc7806b28c3f799fa5be1009b  libstdc++-v3/testsuite/std/ranges/iota/93267.cc
! 21cf066db6826a68a1eeb59f0f6efb50  libstdc++-v3/testsuite/std/ranges/iota/96042.cc
! 44a329219112c82245e251f002370639  libstdc++-v3/testsuite/std/ranges/iota/difference_type.cc
! 369fd800c7c25ba032033459b8c80181  libstdc++-v3/testsuite/std/ranges/iota/iota_view.cc
! 0cd77770d34e5f400c9eea5fad4e8690  libstdc++-v3/testsuite/std/ranges/iota/iterator.cc
! 7209ad0c4afa72a98ff0d3cec4c9cabd  libstdc++-v3/testsuite/std/ranges/iota/lwg3292_neg.cc
! 4a26fb0b75c01a27f3b8a4a9354c1b33  libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
! 667b44b08d3b7ae9548298cfe6bcaa85  libstdc++-v3/testsuite/std/ranges/iota/size.cc
! f8a271101cf9af71b43008179a620898  libstdc++-v3/testsuite/std/ranges/istream_view.cc
! 64080a8eda23a51d5fb499026fa0dae4  libstdc++-v3/testsuite/std/ranges/p2259.cc
! 4cf68cd7abb86ba7ed0e8b0cf0a384ac  libstdc++-v3/testsuite/std/ranges/p2325.cc
! 16fbc1f2ba62d1f8a5ca3704229e260a  libstdc++-v3/testsuite/std/ranges/p2367.cc
! db2be538fdf63e8e2b979f1d3558303a  libstdc++-v3/testsuite/std/ranges/range.cc
! 4c3d6751099d0d95fd5672f66c2240d0  libstdc++-v3/testsuite/std/ranges/refinements.cc
! b872ceff7ae4687b841182860228ac44  libstdc++-v3/testsuite/std/ranges/safe_range.cc
! 178d485f98f4800b8a95f2892532b33d  libstdc++-v3/testsuite/std/ranges/safe_range_types.cc
! 77d3f5555493399f038d230948ba7e4e  libstdc++-v3/testsuite/std/ranges/single_view.cc
! 78470bc551bd2f05f73389f80623076b  libstdc++-v3/testsuite/std/ranges/sized.cc
  3b43079628213bcfeda0d10685ba810f  libstdc++-v3/testsuite/std/ranges/subrange/1.cc
! ff9341d3fc8d634252dfa6144b245bcf  libstdc++-v3/testsuite/std/ranges/subrange/96042.cc
! 770798a355aff7ee80ad4e3e1b476034  libstdc++-v3/testsuite/std/ranges/subrange/97512.cc
  1296c3e0f2c2c6e1cbf08f5653d24b2d  libstdc++-v3/testsuite/std/ranges/subrange/constexpr.cc
! c0552f16fe9d194ae45c8eafce38e26f  libstdc++-v3/testsuite/std/ranges/subrange/lwg3282_neg.cc
! 942db2f7873fbb64579dd1ed6140a816  libstdc++-v3/testsuite/std/ranges/subrange/lwg3286.cc
! a2978a38c494f041e027f77c6e9c0d5e  libstdc++-v3/testsuite/std/ranges/subrange/lwg3433.cc
! 2aabb4959bdc1057ac43a22d64e78f0d  libstdc++-v3/testsuite/std/ranges/subrange/sizeof.cc
! dd2f854e294a8fd03899c90ff2def40c  libstdc++-v3/testsuite/std/ranges/subrange/tuple_like.cc
! 9d24631451b9b2ca3eb84bcb5faa72b3  libstdc++-v3/testsuite/std/ranges/view.cc
! 0ec8b664484aad1aae4b7436806de90a  libstdc++-v3/testsuite/std/time/clock/file/members.cc
! afe90a21fe8f6c5a2a97cbe9fc1ae49a  libstdc++-v3/testsuite/std/time/clock/file/overview.cc
! 69b44a895bed5e70b9a45e5b932156c0  libstdc++-v3/testsuite/std/time/day/1.cc
! 9ab4131112fc85d10d5d415dbf693bd4  libstdc++-v3/testsuite/std/time/hh_mm_ss/1.cc
! 88d1a1e8ec0595743dc57b27557b3180  libstdc++-v3/testsuite/std/time/is_am/1.cc
! 6a2f0eb60479730d6b6f1b6d3436a913  libstdc++-v3/testsuite/std/time/is_pm/1.cc
! 11a1b0b0dc2f0bf45b2b9a7608bff871  libstdc++-v3/testsuite/std/time/make12/1.cc
! dbc4514c5003ed2d1442d0676cbc4a02  libstdc++-v3/testsuite/std/time/make24/1.cc
! 2cc4ffcc2e7118793e56e0b07507f0c8  libstdc++-v3/testsuite/std/time/month/1.cc
! e012fe1eb95d2291f6ad6c8c5f1fe041  libstdc++-v3/testsuite/std/time/month_day/1.cc
! 7f2aefa66b33b12663b816445f8e994a  libstdc++-v3/testsuite/std/time/month_day_last/1.cc
! dbb34b617244c645fd9bc32dcfb84663  libstdc++-v3/testsuite/std/time/month_weekday/1.cc
! cd3f90e806f2979c466207907984351b  libstdc++-v3/testsuite/std/time/month_weekday_last/1.cc
! 75e70bdabe3c07e0218b303a1f3ecf37  libstdc++-v3/testsuite/std/time/syn_c++20.cc
! 95fc10e252443f22e4022a1a82715453  libstdc++-v3/testsuite/std/time/traits/is_clock.cc
! 6cc3dff9098d0a0b4987232ffa4192a0  libstdc++-v3/testsuite/std/time/weekday/1.cc
! 07a6c4c70bcfd13350693a1ad65f00fa  libstdc++-v3/testsuite/std/time/weekday_indexed/1.cc
! f9bb2332633525b6b855cb92aee40380  libstdc++-v3/testsuite/std/time/weekday_last/1.cc
! feca06bff9fab60b776db8b63e94508f  libstdc++-v3/testsuite/std/time/year/1.cc
! f58f2afca4434df1bc2efbb3f7a90f4d  libstdc++-v3/testsuite/std/time/year/2.cc
! 0154fe01882b3a6cbdb82b8167f50fe0  libstdc++-v3/testsuite/std/time/year_month/1.cc
! d41a278bb4a34d2e0a30e3e9a106c8b5  libstdc++-v3/testsuite/std/time/year_month/2.cc
! 4a115f48ccaa6769e5cea3b38e192f7a  libstdc++-v3/testsuite/std/time/year_month_day/1.cc
! 39e02422c489d23422fcafb956f6ba11  libstdc++-v3/testsuite/std/time/year_month_day/2.cc
! cdc0080c14263fc056a048b45f2e05cc  libstdc++-v3/testsuite/std/time/year_month_day/3.cc
! afdc042dcb68000829070220dbcf92bf  libstdc++-v3/testsuite/std/time/year_month_day/4.cc
! 79895f2e71520425cbf4e2a52fd56dab  libstdc++-v3/testsuite/std/time/year_month_day_last/1.cc
! 901cd02e168de9e479bdb85e7d19db20  libstdc++-v3/testsuite/std/time/year_month_day_last/2.cc
! e603368dc519db6f40f992bdd9d8ffee  libstdc++-v3/testsuite/std/time/year_month_weekday/1.cc
! 419a5d03d96039530c3719a708015912  libstdc++-v3/testsuite/std/time/year_month_weekday/2.cc
! c141b5c69f9adb9ef155310eb8e222c8  libstdc++-v3/testsuite/std/time/year_month_weekday/3.cc
! f454f20c75a791f7574d54e57cf00730  libstdc++-v3/testsuite/std/time/year_month_weekday_last/1.cc
! 3d98328e10e83186f073b6cfa52d54e0  libstdc++-v3/testsuite/std/time/year_month_weekday_last/2.cc
! e764b79621a4fd6439a4bbc2944b4220  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/1.cc
! 8f0004b3441501cf1a397b5e800305a1  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/not_shared.cc
! 0b3602a198b89bdc879c6c9009bb8c41  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/not_shared2.cc
! baef133f789cdbf374797e090961e920  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/not_shared3.cc
! ecf6da09d6729605012f9920fad0d496  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/requirements/explicit_instantiation/1.cc
! 73bdc12bfd90445ecf5943a6ec206109  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/shared.cc
! 8ac95b18fccaccf87970f062b2633720  libstdc++-v3/testsuite/tr1/2_general_utilities/enable_shared_from_this/still_shared.cc
! 29cc2956cc2bf0f4b40dc452e588e53f  libstdc++-v3/testsuite/tr1/2_general_utilities/headers/functional/synopsis.cc
! c4ffb624345f250e543e4400a4d539c2  libstdc++-v3/testsuite/tr1/2_general_utilities/headers/memory/synopsis.cc
! 39c5a5aff7f68881f8a1d7e2e2c8a11a  libstdc++-v3/testsuite/tr1/2_general_utilities/headers/memory/types_std_tr1.cc
! 3924b43829109d774e3bafb81c198b9f  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/assign.cc
! b2c2e9b8d6988d33fd1d8fe4ddd5770d  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr.cc
! d037bf844736c482f1232d8b6a5e869c  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_neg.cc
! 745f5146a8fb3fcb5f9543b120680698  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/auto_ptr_rvalue_neg.cc
! 8e0982d2513a8725d18235ec0b6141b9  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/dr541.cc
! 2cfd7222cef3e7b9e960ebbe27bab8b0  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr.cc
! 4a4529f6bfb7131e90bfc60972994520  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/assign/shared_ptr_neg.cc
! c8badff1655d8b6f22baf793b0e4eaf1  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/casts/1.cc
! 9bd2d9dc8d587c9d483525df6713d821  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/comparison/cmp.cc
! 10fa49be494d61a7fce16d34ce31d9e3  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/39405.cc
! b7d5a45970bc890118d4a430df93c912  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/43820_neg.cc
! f03daf1c9eebd1073821836d24227c93  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/auto_ptr.cc
! 756ab91284db8a0ca20626e967d197e9  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/auto_ptr_neg.cc
! ba6589dd135ead972a5a9794bd1326b6  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/copy.cc
! cb77a2efa279542d4dc7a93542f4d628  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/default.cc
! 8b8c24b9bce90098d8a153a4660484ab  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/pointer.cc
! 0e94497875cce9283db88389d2174cfc  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/weak_ptr.cc
! 0c8164452be9a1169c11ac2099788c04  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/cons/weak_ptr_expired.cc
! 7a2c5f1d1c7682ff65646ba27fc7abd0  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/dest/dest.cc
! 062468e5ec8e5719863e4bf94653bcd7  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/misc/24595.cc
! 0a11ffee97fbd99457f21346790baf16  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/misc/42019.cc
! f56000d1041020d02a433442895726c7  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/misc/io.cc
! f0d9de2620d3243d24ba51b0c692bf1d  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/misc/swap.cc
! bc55ada7b1ef634d22a88008cd819ef2  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/modifiers/24805.cc
! fd82eb215600eee8511028be62aa4cf1  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/modifiers/reset.cc
! 7b35cdb2e2a2f66baed9a4cc8812fc17  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/modifiers/reset_neg.cc
! 1e09d1ca6890842ca03e97549b3786d0  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/modifiers/swap.cc
! 4f5ea1ed8790df2ea8c2390420e93144  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/modifiers/swap_neg.cc
! 0c33fb619c4f4038dcc377ae2be08df3  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/observers/bool_conv.cc
! 24c4cf0322ea77b88651d140f570210c  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/observers/get.cc
! 46bd0f4757aeb79ae46a7cc6e6d0f64c  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/observers/unique.cc
! 89cdf317672f782f175c254fe96fe453  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/observers/use_count.cc
! af0b5bae3692f9da8f39a49124c22809  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/requirements/explicit_instantiation/1.cc
! 32a9561cd2245c249f6bf7898e26d199  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/requirements/explicit_instantiation/2.cc
! 43e898bc0a60fccbb5b33d1264eb1442  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc
! 6d1f6ae10f95615635a3221aa67b76b4  libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc
! d35df346a339ae7d8339bcc0422b05c1  libstdc++-v3/testsuite/tr1/2_general_utilities/weak_ptr/lock/1.cc
! 8f5edc3d3222353d4b2e50bece206c43  libstdc++-v3/testsuite/tr1/2_general_utilities/weak_ptr/requirements/explicit_instantiation/1.cc
! a6ad1ef3e9e19c941c51ce1f8f0e757e  libstdc++-v3/testsuite/tr1/2_general_utilities/weak_ptr/requirements/explicit_instantiation/2.cc
! 03cd50d8c93985ba8dd72dba927dde4d  libstdc++-v3/testsuite/tr1/3_function_objects/bind/all_bound.cc
! f0116766f2824da5ae6677e0d66ba591  libstdc++-v3/testsuite/tr1/3_function_objects/bind/cv_quals.cc
! f669b5648b5660d89748965c45e43be0  libstdc++-v3/testsuite/tr1/3_function_objects/bind/mixed.cc
! 593902801c51406c9af7186050f4a2a0  libstdc++-v3/testsuite/tr1/3_function_objects/bind/nested.cc
! 2c321051ca4b5a7996cb69b68a2a5c62  libstdc++-v3/testsuite/tr1/3_function_objects/bind/placeholders.cc
! e043a20e7bd919cc5f358017906d475b  libstdc++-v3/testsuite/tr1/3_function_objects/bind/ref.cc
! f8e8fd22f1d3d3378bef68663bf8af27  libstdc++-v3/testsuite/tr1/3_function_objects/function/1.cc
! 4998413ed2c0deee97dc2519a5f6f0e9  libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc
! ab93db6d0d5bfc52e3d8acada1ae4d93  libstdc++-v3/testsuite/tr1/3_function_objects/function/2.cc
! 32a8a4df335bd4283d62b67c0ef8d7aa  libstdc++-v3/testsuite/tr1/3_function_objects/function/3.cc
! 30c475475f127a3054cea66df9c4c099  libstdc++-v3/testsuite/tr1/3_function_objects/function/4.cc
! d919df6cb54f9ee4805d55b30cf81080  libstdc++-v3/testsuite/tr1/3_function_objects/function/5.cc
! e8d8b8dd67990e599908bb0b4a336c0a  libstdc++-v3/testsuite/tr1/3_function_objects/function/6.cc
! fcfefd4e53c68d8afe7ade9dff71304c  libstdc++-v3/testsuite/tr1/3_function_objects/function/63840.cc
! 26368fbb87f9d7860462439962b19440  libstdc++-v3/testsuite/tr1/3_function_objects/function/7.cc
! bc8cfd7d5dcb2d326e932731641d6179  libstdc++-v3/testsuite/tr1/3_function_objects/function/8.cc
! 7fd46092820e7eb49976323ebad3ae8d  libstdc++-v3/testsuite/tr1/3_function_objects/function/9.cc
! 792c35f2c3a4ad4a9415aa54ae7f3102  libstdc++-v3/testsuite/tr1/3_function_objects/headers/functional/synopsis.cc
! 446fb443f5dc4b9d997102761a1428cd  libstdc++-v3/testsuite/tr1/3_function_objects/headers/functional/types_std_tr1.cc
! 6641e220f658d259782fc829e37c4daf  libstdc++-v3/testsuite/tr1/3_function_objects/headers/functional/using_namespace_std_tr1_placeholders.cc
! 68267c3076fd4f222b12af5cbb25a8a8  libstdc++-v3/testsuite/tr1/3_function_objects/mem_fn.cc
! 3491a1bb9d9eb614aed32b5425ea5657  libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc
! 05735e34fbd3535a2abe699c92a125c3  libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/typedefs.cc
! b0f3df440afabc95c8bb474485de67b7  libstdc++-v3/testsuite/tr1/3_function_objects/result_of.cc
! d945fd7846023f1268496e071646303f  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_const/requirements/explicit_instantiation.cc
! 5156ebaca919744b33cc693b0c74d984  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_const/value.cc
! 59a904a4d042311d26a5014a0655f8a2  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_cv/requirements/explicit_instantiation.cc
! fe0d79786a05e20c436f893646594671  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_cv/value.cc
! 8a9935e6abc8bcce0d5f4ac503ef4fb8  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_pointer/requirements/explicit_instantiation.cc
! 5ec6d745ba06d7bb7d2f75ca447d0a7b  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_pointer/value.cc
! 4bac38f2bd841661a4a75c3f83e247d3  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_reference/requirements/explicit_instantiation.cc
! d441aab504acff37b789e034b053a46c  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_reference/value.cc
! 98705f64a4fbb7aed2c834598f337f94  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_volatile/requirements/explicit_instantiation.cc
! e5e477ddc4fb1a14490e082c66b2e56b  libstdc++-v3/testsuite/tr1/4_metaprogramming/add_volatile/value.cc
! 996c8d87fa979d6323822870be404e12  libstdc++-v3/testsuite/tr1/4_metaprogramming/aligned_storage/requirements/explicit_instantiation.cc
! 62d55fdca59c09cb47da35afdb4a9786  libstdc++-v3/testsuite/tr1/4_metaprogramming/aligned_storage/value.cc
! beed9bf3db92afc85cda94bdb3e03d78  libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/requirements/explicit_instantiation.cc
! 643dcb40c53dde213f2c7a167b34e5ec  libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/requirements/typedefs.cc
! 8a50130b82a60e0cfd1c0b38c88e0d04  libstdc++-v3/testsuite/tr1/4_metaprogramming/alignment_of/value.cc
! 2999e5f17a3ad32515e0051968799cc6  libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/requirements/explicit_instantiation.cc
! 56f1f34a16db91a69420258244cac03c  libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/requirements/typedefs.cc
! 8b42e8d42812f6fd7c50d3b953e8aa7d  libstdc++-v3/testsuite/tr1/4_metaprogramming/extent/value.cc
! 0b579c26fe29a1c47befab5131f43fb5  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/requirements/explicit_instantiation.cc
! ef65b119298290a29efb9985de64503e  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/requirements/typedefs.cc
! bbbb644da7e75cee4ca0931f2030771b  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_assign/value.cc
! ae53db4f2616c1d488ee1e15ee40eadd  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/requirements/explicit_instantiation.cc
! 21e9bae83232560f71dbd0afe6fde7dd  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/requirements/typedefs.cc
! 638e881dbb264c2c8e0145eacaf964df  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_constructor/value.cc
! d9dcd1d154e97275d79949374afe81e6  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/requirements/explicit_instantiation.cc
! 54e0621dc03f45d3dc3aa6f4cf0b8e5c  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/requirements/typedefs.cc
! 736e2234408a0e289f63be4eee34ff50  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_nothrow_copy/value.cc
! 7388b73d88e1d3848a0e56aa5981cc56  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/requirements/explicit_instantiation.cc
! bc6e72dc797a488db9e084674d341380  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/requirements/typedefs.cc
! 0d9b8a66a3f47c2f48379b786f2246e3  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_assign/value.cc
! 2bf44c32666d74512f9cada0f5c5f8cb  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/requirements/explicit_instantiation.cc
! 518ffad56db44178be508fe0fd2b02f3  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/requirements/typedefs.cc
! efe722ccac8c1409a799ec0ba72e8f63  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_constructor/value.cc
! 6b5b9c9b920e786e5e7c330a2c3ee942  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/requirements/explicit_instantiation.cc
! b3bc42ac4f9ae84f0f7a199bd26c4bcf  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/requirements/typedefs.cc
! d2122f7a9716b1c9dfc4d61209ac23f9  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_copy/value.cc
! 4b62aea8830fcc70f34cf15924198b72  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/requirements/explicit_instantiation.cc
! fcf5419d16166f4f0b775d102bf8fd3c  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/requirements/typedefs.cc
! d51a842786eaae1ee442d79986b56023  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_trivial_destructor/value.cc
! a4f788721d75f680e2929a531bebd24e  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/requirements/explicit_instantiation.cc
! c61e19b324d81faaaad741329e047bc4  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/requirements/typedefs.cc
! bff23804570dce49ae445332d8772a58  libstdc++-v3/testsuite/tr1/4_metaprogramming/has_virtual_destructor/value.cc
! 11b28997c20a150ed430ce679ff3b311  libstdc++-v3/testsuite/tr1/4_metaprogramming/headers/type_traits/synopsis.cc
! 90bcaa77a0575f5e6d45cd9601afb6bd  libstdc++-v3/testsuite/tr1/4_metaprogramming/headers/type_traits/types_std_tr1.cc
! 4d8cca5f0095141d6da3e25105fbcbd2  libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/requirements/explicit_instantiation.cc
! 14ec9312a9561fca5b143a8deb32168f  libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/requirements/typedefs.cc
! 78d382be72ffbf7fa919d2c5b9c7361a  libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/static_definition.cc
! bd7967e44263cf6712d172e8f8bc75d8  libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/true_false_type_typedefs.cc
! d3d745bb6379b54bc38b88c0aa4f966f  libstdc++-v3/testsuite/tr1/4_metaprogramming/integral_constant/true_false_value.cc
! e6de18eaaf4bfcf272d7ab8fd7bff09f  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/requirements/explicit_instantiation.cc
! 9acd8651c077ce11a3d532146e0db7ed  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/requirements/typedefs.cc
! 5bb8b8a7e42d45ddb5c857e021fd27af  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_abstract/value.cc
! a767915e8bf307bf56122e918037dc86  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/requirements/explicit_instantiation.cc
! 1ee7991eaba30b4ae48481c1966f9c11  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/requirements/typedefs.cc
! d67db921819fb4805c6276ccf3e85bbe  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_arithmetic/value.cc
! d7ebd02dea29833eb620019adae1647c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/requirements/explicit_instantiation.cc
! c77f561d38bef18d5623e252ea5822d9  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/requirements/typedefs.cc
! 9ef76ed166491d58a394c224acc97117  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_array/value.cc
! 21156c1f8cef26fa7df1bf5006168389  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/requirements/explicit_instantiation.cc
! 9d4590eb30adde707e91a8064fadc450  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/requirements/typedefs.cc
! 7a1a49e1aeed9d66f9aa9ec7599bb464  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_base_of/value.cc
! 6adb54ef2166a1aa3ff153a6b0638c84  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/requirements/explicit_instantiation.cc
! 5215682e1881a5d9f417a360354b6a7c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/requirements/typedefs.cc
! 02aedb37806d85d2d803bc2aefc22ff6  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_class/value.cc
! e15065cce388a785b1a3ccd9f728cf94  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/requirements/explicit_instantiation.cc
! 47cfe43c4e9e8430221f397d24bbebde  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/requirements/typedefs.cc
! 917518cc37bb059b1368b98b2b040d40  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_compound/value.cc
! 36c9673934310bed5c7735458bc4525c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/requirements/explicit_instantiation.cc
! d3750c139b20e6773052f218432798cf  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/requirements/typedefs.cc
! 01ba86339c0723a23790d2a355eb3c56  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_const/value.cc
! 0fdea551d88fa603c19a85802ea93482  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/requirements/explicit_instantiation.cc
! 797dae3ff57945ee32f6b0d227f97ae7  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/requirements/typedefs.cc
! 55b2525e8d835bb4e73451d71d5709c5  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_convertible/value.cc
! 98424e1fb8580eb8add5c0489f9c648e  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/requirements/explicit_instantiation.cc
! ecc9e41f3e9a92d9022464278a2b36af  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/requirements/typedefs.cc
! 192b898bbf036164e978c91e394a1ede  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_empty/value.cc
! 03a9004e5f33ed56a7a8f066e4249b7a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/24808.cc
! 8398f1d58aaec0387ad19b924a3c033b  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/requirements/explicit_instantiation.cc
! 5476507cf0824684a08826bee91aee46  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/requirements/typedefs.cc
! 0af096d2c50790103434b7267a05c52f  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_enum/value.cc
! edd38ba63db502b248c3213e45dcd50f  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/requirements/explicit_instantiation.cc
! 553f918226602286bc191eef8a4d233b  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/requirements/typedefs.cc
! ec818d7d275e69f5d1522c5c314a7a4a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_floating_point/value.cc
! ed8f299daf8adf3abbef7beb67fa5575  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/24808.cc
! ce21c283f576dc40be7478867d2d3bf8  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/35637.cc
! 408b3f7ca7da451e81b75277fe15799a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/requirements/explicit_instantiation.cc
! 11cd04c59f7d3f03776c1fc85edf93d6  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/requirements/typedefs.cc
! dbb064d769b73b49fc94d2622d886c0f  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_function/value.cc
! 6c85b68150e9af2e863ed4610cbcc48a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/requirements/explicit_instantiation.cc
! 5607d9331ed77cf334e77c79c770b64a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/requirements/typedefs.cc
! db9939dfafc2fed438dc9b16204eacd8  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_fundamental/value.cc
! da34c83e661b785609566086d5daeabe  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/requirements/explicit_instantiation.cc
! dc8108cd001f9ec405307a2ec0745681  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/requirements/typedefs.cc
! 0267433f5c692190bdc01b559554d120  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_integral/value.cc
! a10fdcc698b1eedc6fad544615d88b8e  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/requirements/explicit_instantiation.cc
! 1966f87b21005e05b51538a1f61c1aa9  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/requirements/typedefs.cc
! 083e64f038e54016000ba602c98789a0  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_function_pointer/value.cc
! 668168fadde52df9dc4f860407a72e44  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/requirements/explicit_instantiation.cc
! 35db426ad84ec94fa55ad5ab0f17d682  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/requirements/typedefs.cc
! 8854d9e4f0fcd09d0940096521d82b9c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_object_pointer/value.cc
! 8fd4992f186355595122de2ae8b811a7  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/requirements/explicit_instantiation.cc
! 4ce76206d6df7288c827131ce2e1ad5a  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/requirements/typedefs.cc
! f7f765476b22803c15f8c05e5c208273  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_member_pointer/value.cc
! 23fce649cd73ccd253816ee6b74b84ee  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/24808.cc
! 73f9d42281b0f277873536f4c3205843  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/requirements/explicit_instantiation.cc
! 57823b91e6e29244045301443306bacc  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/requirements/typedefs.cc
! bae2b654e65bd34c5739529efce9bac7  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_object/value.cc
! 18d2909bc562d70a2106ba914a3db695  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/requirements/explicit_instantiation.cc
! ec55b04652d433d6be5487d51604a181  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/requirements/typedefs.cc
! 8a60f4a3f417334e01d69f921c251f6d  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pod/value.cc
! 1288353f086b16083537066b64f4b30d  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/requirements/explicit_instantiation.cc
! 5a5ebddfbf0d3350259e0249ed569eb4  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/requirements/typedefs.cc
! 21eec2901341425ed7aa1e1bdc8c0e33  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_pointer/value.cc
! c0cb73591129b7eae263ce67b79df8e2  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/24809.cc
! a08f9054494c44a5a24c253408d8d3ce  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/requirements/explicit_instantiation.cc
! 8cff6d86e9361b6b02c9feca200776c9  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/requirements/typedefs.cc
! 4852bd3305bc4f1ce3616daebff1833b  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_polymorphic/value.cc
! 1e807e0713e1c7260d3b8bc0458b4ce8  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/requirements/explicit_instantiation.cc
! 24f5f56f76ad1387267a332578200f0c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/requirements/typedefs.cc
! ceeb65187bdfaf7adb1e1ef8e9db1468  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_reference/value.cc
! 770625b208dd758bb0eb99151a8f6338  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/requirements/explicit_instantiation.cc
! a538ab2dd470460247990e45a2ff153c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/requirements/typedefs.cc
! b709294f0fe6d2e3336a5280bd459df4  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_same/value.cc
! 847553c5e0c2d77a1c4038e1ba329e50  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/requirements/explicit_instantiation.cc
! 9d3bc31ac0b95b2163fb718492aea58e  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/requirements/typedefs.cc
! c7c29c57ef33fb4bb46d2370e30c9557  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_scalar/value.cc
! 339cbeb781b4c81931a8fd76c916a0d2  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/requirements/explicit_instantiation.cc
! 82fbe9a0a4c34353e1da70f755b87651  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/requirements/typedefs.cc
! 12406d6d55f4856000a0c1911d40768b  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_signed/value.cc
! 6af0d0625cd971ad946b8aa6b269b196  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/requirements/explicit_instantiation.cc
! a7d8cbdf33e311f8437b8f7443d3d815  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/requirements/typedefs.cc
! 946d056b7ee24e45333fa35e9aeadaf6  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_union/value.cc
! 0e7b4497ba04ebdd257f7f4c61da351d  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/requirements/explicit_instantiation.cc
! 03a44f0f14fca6daa344bf4aaab05246  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/requirements/typedefs.cc
! 79ea356c2ce6c2e8d8c46ee90ddf3002  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_unsigned/value.cc
! 0cafbb435dbbf5b49454a7d4da278a5d  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/requirements/explicit_instantiation.cc
! f26783af7d933e7c7f6a0ff983544388  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/requirements/typedefs.cc
! 1d6523ceea62faf383dc6f0e5e3d759f  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_void/value.cc
! 30bb4186bb92718eb2ddb591fa7845e5  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/requirements/explicit_instantiation.cc
! 3f0671a10867125f5eb0d6570ef7acab  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/requirements/typedefs.cc
! c19e62b5ec156498909e7ab7855ceb9c  libstdc++-v3/testsuite/tr1/4_metaprogramming/is_volatile/value.cc
! 94e2befd7a81c8eb04ad0a406dd21e7c  libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/requirements/explicit_instantiation.cc
! b451934f0ea4dcd3709abba85542fb5b  libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/requirements/typedefs.cc
! db9ec9d858fd28d1746f494a4ff0aa16  libstdc++-v3/testsuite/tr1/4_metaprogramming/rank/value.cc
! 334d495f5ddfd0ed56c219501f435219  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_all_extents/requirements/explicit_instantiation.cc
! ccb5a59d6589bbe2b0cb0cf3876a6893  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_all_extents/value.cc
! 9f144be88570d95699dc136d70e769e1  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_const/requirements/explicit_instantiation.cc
! ae7769bd3e32a57155779a734d1d0520  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_const/value.cc
! d55af8b9be1d8232ee1474ef884976ed  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_cv/requirements/explicit_instantiation.cc
! 8aafab5652c67828c7ef1b0c442b257d  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_cv/value.cc
! af3915c8e995ab6b03a6603132de7320  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_extent/requirements/explicit_instantiation.cc
! b157d2246ef53541550a3a70e054d495  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_extent/value.cc
! 9c3b0f376775e04c0197c7fdda26527c  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_pointer/requirements/explicit_instantiation.cc
! dec0f168b28c19d4a123ab850efed63a  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_pointer/value.cc
! 2345c334dbfe981735b71a75b1255b1e  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_reference/requirements/explicit_instantiation.cc
! fe0ff6cfc9432cb569ba560d361654e5  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_reference/value.cc
! 913a43ee26ee7061c9f2e24e466f0e67  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_volatile/requirements/explicit_instantiation.cc
! 57131de8813e1987bdfe77138c7e706e  libstdc++-v3/testsuite/tr1/4_metaprogramming/remove_volatile/value.cc
! 91d076636ed822c4a37ac9b27b67651f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/headers/random/synopsis.cc
! cb8a0bbc8edaf0dfc29e04f3fc6b1e40  libstdc++-v3/testsuite/tr1/5_numerical_facilities/headers/random/types_std_tr1.cc
! b967759e2fb0a86eb990c8a619515f9b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/bernoulli_distribution/requirements/typedefs.cc
! 9e3e23f91b24826d6919fe822bed89e3  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/binomial_distribution/requirements/typedefs.cc
! 2ca1c84b773111fdfb63fc9024b3fbcf  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/operators/equal.cc
! b35128d06e7a12281353878e2287048b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/operators/not_equal.cc
! af26aca3090eef95276af1690d5dbb7c  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/operators/serialize.cc
! eac27828deff435f6751f04744037b13  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/requirements/constants.cc
! c54b4f3b3429c9b5841b25c7b63dbe6f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/discard_block/requirements/typedefs.cc
! e4cde838e78849d8772d230218792937  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/exponential_distribution/requirements/typedefs.cc
! a6530f0861147f876a71cc6fd0633943  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/gamma_distribution/requirements/typedefs.cc
! b61161d4157306a91cdc73d973f34997  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/geometric_distribution/requirements/typedefs.cc
! 22bc78b57f64658303696ec737f63b0c  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/default.cc
! a95da908458b7e8bfb594554e42ada31  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/gen1.cc
! 5524fd26caaa5b5687c816ee251ee5d4  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/seed1.cc
! d6976149885d71054fcb00402111877f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/cons/seed2.cc
! c4bfb05e27d76ef239cbaa6d5322f1f6  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/operators/equal.cc
! 2cbb4abd0e909c5c2c85e3497e26b7f0  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/operators/not_equal.cc
! be22650e73d910246cd0f494f33df982  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/operators/serialize.cc
! ea2f006757d21359ad45a777103f08b2  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/constants.cc
! d86b79baa8d4e7f57d27ce1b9e7c47b1  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/non_uint_neg.cc
! 9c600e9262c23f09703a01225442a018  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/linear_congruential/requirements/typedefs.cc
! 3fb217ae0686bbffa1885f36e290f49e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/default.cc
! 1011232e53c99f6acef68f618d3d4e79  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/gen1.cc
! bdffa611016bc79ee7f1ca176664e5b0  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/seed1.cc
! 39d0df46e8675bb6e76cc594fe41a9c0  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/cons/seed2.cc
! 73845e98390d7b43e4422fd908694788  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/operators/equal.cc
! eeec2a2f473bc3bd259d4ebb0670b44d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/operators/not_equal.cc
! b116834f947a4bf742de3c6c8377fe61  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/operators/serialize.cc
! 92ce1ada5c5a76b3e7bcd4f99dd6d916  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/requirements/constants.cc
! c4a80b6a58ff8bd434109f04606ab48c  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mersenne_twister/requirements/typedefs.cc
! c057f3e3a75f00f2b8fdde42881b979e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/minstd_rand.cc
! 17906d70641b93539b7d3c92c9e8d516  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/minstd_rand0.cc
! 031b420091bea9e6c0ed0e4cfc72b713  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/mt19937.cc
! 2b6033796dcaf22da46dd246d31dfc24  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/normal_distribution/requirements/typedefs.cc
! 747a31296fb8c6d63cdb3209c08f7ae0  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/poisson_distribution/requirements/typedefs.cc
! d838c768977d1703cc60b3f92433338c  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/random_device/cons/default.cc
! ca705e56bfd19aec3547260c2cea87fc  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/random_device/cons/token.cc
! da503a95560ed5dc3244819fbf4ffbda  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/random_device/requirements/typedefs.cc
! 56c5514590816a087941d562e7bda6c6  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/ranlux3.cc
! ac4ec9bd0ddb08d69e7a0d1603539e3a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/ranlux3_01.cc
! 00dbee9459005e0ce734f95bc5602733  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/ranlux4.cc
! 7a19eb1d3e909fcb64647796ff9aceae  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/ranlux4_01.cc
! e41f9b04b7cf394718f4a06abe227588  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/default.cc
! 286fac774250b47d056b2a192d0c504d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/gen1.cc
! ffcfa2195e9e5d69d094493740806498  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/seed1.cc
! 75bfde67b6ffeeeefed1bb2bc60b6536  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/cons/seed2.cc
! 21ba7aaf2aeaa2c478ef72eb0e8faf17  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/operators/equal.cc
! 25d8a0005d3299ecf7aa527476042966  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/operators/not_equal.cc
! bceb0590f2cb06875c63df28e798b2a4  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/operators/serialize.cc
! 0ee80be10682c9e53bc0dd342335e573  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/requirements/constants.cc
! 7d9028ad2aba5f1a98069ca7548c254b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry/requirements/typedefs.cc
! 472df618f50b8c622686dd8e3a7691a4  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/default.cc
! 9fa9b1a842ce97dbd3e01efd23627037  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/gen1.cc
! 593456ee0fd48fd3eef4f820a6dba3a4  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/seed1.cc
! 8f940e69c84d86ebc520e0bd3b528641  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/cons/seed2.cc
! 9eadf63833d5df4e79572f6cf93abd27  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/operators/equal.cc
! 80fbc1a17468bca561b840d30ad8949b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/operators/not_equal.cc
! 205614320272e9193586f6548895f4d5  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/operators/serialize.cc
! 9b0a7c6ba6198cb1acb00d55064bfb4f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/requirements/constants.cc
! 3120720f6a095f423a120f156b09b40a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/subtract_with_carry_01/requirements/typedefs.cc
! 78113d02c23656a6faac3b8698775fea  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_int/33128.cc
! 0c0eab3e69298f023c7dc8202d3ba612  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_int/cons/default.cc
! 8a40053f312ee24cdf430b576f41352d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_int/cons/range.cc
! 60b55e7dc86f9e522fbe87aab6ca79a4  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_int/requirements/typedefs.cc
! 4ad8d675c5f98ee5a89c4fdf8d150780  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/uniform_real/requirements/typedefs.cc
! e27cbf84cfa05d112ebba885772427b3  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/variate_generator/37986.cc
! 17bbda6202ff4d1a5f53593c04071cfd  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/variate_generator/requirements/typedefs.cc
! 1515dcb4937183601a5071111173b269  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/cons/default.cc
! d12a0440b10c3d60404b708f37bbc555  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/operators/equal.cc
! 3ae839e4e924ef13f0ee27c337ca2542  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/operators/not_equal.cc
! 9cfa17fd914051b8509dda1814100fac  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/operators/serialize.cc
! 68df3f5c7ef7d23205a45ef27e821588  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/requirements/constants.cc
! f671ad926bea9cc4e89a45a4d9502303  libstdc++-v3/testsuite/tr1/5_numerical_facilities/random/xor_combine/requirements/typedefs.cc
! 56139802567721fcb5202e3ab0105e2a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/check_nan.cc
! aa2272ab058783c32d0ad97444281927  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/check_value.cc
! 4edf555913028984bc184df28769c392  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/compile.cc
! c051b91bd021468ab5a7c5145acf2672  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/compile_2.cc
! d109e789dbedddc631bab9eb98d6b9b3  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/check_nan.cc
! 0518ee780cc85f3bc85d6ef5541c313b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/check_value.cc
! 5a36aa0f74544db8c77ac5b64c4ea10d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/compile.cc
! 33fa4aa692156c8c4502b4edc2e501ca  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/compile_2.cc
! 9b1c1c47d4fc8fb109f2da222a7d5668  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/pr86655.cc
! 6b0726f27640dffea4f342eea2be7a2e  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/03_beta/check_nan.cc
! bd42c734ca3b0d76e99d8467e869ce68  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/03_beta/check_value.cc
! 92950921ed5d98b8ea38bd657b40c01a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/03_beta/compile.cc
! 037dd12538587cf72b0c4034911f984a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/03_beta/compile_2.cc
! 80b7a8894b8953d876ce3e0abd7110cb  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/check_nan.cc
! 374b5f3566d85a3e5477a771e2a2feed  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/check_value.cc
! f8a2af4b99644723969afdbad8d369c3  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/compile.cc
! 70e120f6a887d5d0df38c7269e838e48  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/compile_2.cc
! f1c60e372b5e9075df576bfda5b7024c  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/check_nan.cc
! d10d112d2e97be1f1e76ec02d61743ee  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/check_value.cc
! 0973cc3bd8c4b548ce239d4632fbff61  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/compile.cc
! 939aef64dd2e1070e8586d18f6403386  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/compile_2.cc
! de1213c0571835bca385d94c41f8482b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/check_nan.cc
! 599a1db11f017014512ea34abc9ba934  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/check_value.cc
! 0063b209d17e40f72ec5e742937a0598  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/compile.cc
! f882944e9c0581a6572c783d5dbea105  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/compile_2.cc
  4618aff82312f2efbcdba760637d68b5  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/pr66689.cc
! 58576980df8b9d0f5c3cb091edc10c11  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/check_nan.cc
! 6739cb7921c6343fd6a4c87381bdf159  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/check_value.cc
! f4f49d61fc4cabe22a7829108ef1f9fb  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/compile.cc
! 893b95af2afefe42dafc896d6406971a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/compile_2.cc
! 8e7f2aeeacda26c0c65adf2c67e5cc51  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/compile_cxx17.cc
! 98b1a49d71a2c405cef7a2587b7c57ad  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/check_nan.cc
! 381aa3d3bab2f00f64e97b2d8b36b9ff  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/check_value.cc
! 159d78b9f67401ef7e724b302abfaaf7  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/compile.cc
! d6c26617e13e3df01306d34ea3a191b1  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/compile_2.cc
! acd7a3bec945c431cd9d343ebc2f6bf8  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/pr56216.cc
! edf6220b5b8fb542a7d770b0cfb76e46  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_nan.cc
! c23bd7414b3a9dfc4beb18831449697f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_value.cc
! 46aeb2c337bd797b8f00bf91dd3bbf24  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/compile.cc
! 77b41abf4b51da6647185f896a33b284  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/compile_2.cc
! 6945ddda54e0b9892d42bf945207038f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/airy.cc
! 3f90bf0a324b195c310f372aff2fdbce  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/check_nan.cc
! b01a2e0923a56127e74fb72ddeb89277  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/check_value.cc
! af8ee0e024e2fa9527e8294299fcc397  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/compile.cc
! 3ef5179cf5a4046fa0450e76b84635c0  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/compile_2.cc
! 15b18296a24d2aa39fc1752176b13af8  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_nan.cc
! 7e96fa73f91e54d881654f6684ca1a63  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_value.cc
! 79d904def10b365e825cda4f4debf65b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/compile.cc
! 233ad0c261b262539c24056f1bbc208b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/compile_2.cc
! 458f3f3970a189746cc8d32c7e11784d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/check_nan.cc
! 559b0ca7ce0bc6073e5fb80da8a4a9db  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/check_value.cc
! eff78ea225ebaebf862db29bc87c76d9  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/compile.cc
! 127446df260134a75ebb30f71634b599  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/compile_2.cc
! d1199d7989e3e445994dccff2230d656  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/check_nan.cc
! d793973af63f82ae4bab551301d227f0  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/check_value.cc
! f53fc3d21f193714a76b7a296d918c53  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/compile.cc
! c8bb89fb1166e453d7ee531fbc28205a  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/compile_2.cc
! b8be53e36f20a1437252e8ec5fb58aba  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/check_nan.cc
! 1d190b1ca14197f922081a66e88370cd  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/check_value.cc
! 55fb31391c8bdba642e9ded17479f234  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/compile.cc
! a5c0aa14bd17ebfa4e3706441ac7b463  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/compile_2.cc
  b780a349356e83ff98346ea066a7c8c7  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/pr66689.cc
! 9a8cae5ece073841abb0b292941a6309  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/check_nan.cc
! 1adfe0f6131f8a99d8cb527dbdcf08f2  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/check_value_neg.cc
! 18ffcfd5a49a02fe911eaf0f7d19baf4  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/check_value_pos.cc
! decdfa3b3f2c7698b25112c7451b001b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/compile.cc
! 66198d83ce4d13da80f8a58b1ad66872  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/compile_2.cc
! 869e55dacc0590600f154bbd751ab592  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/15_expint/pr68397.cc
! bd31ab5f4d3d84909bba5ee0d63c7667  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/check_nan.cc
! d32e8ac7f4e39dc1a8db5e62e1a470ba  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/check_value.cc
! 20c933a1b9d3d2b07f679993b03aecbd  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/compile.cc
! 516988f776e7e9ee3537d78d6b27bdb6  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/compile_2.cc
! 1d9b67493fa9783698cafbcae92073b7  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/check_nan.cc
! 62cf54cd37a05a2e2f608e438330fa33  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/check_value.cc
! 87babcd3a613ef57747046449a820662  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/compile.cc
! 6cd21a27efcf9e232f051ecc0b2053e5  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/compile_2.cc
! f41234e640a9135c127e032073a92d02  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/compile_cxx17.cc
! 387c0fe7be298891615e3404adba4082  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/check_nan.cc
! 61ad5961e6793ec1d956655927e7a56f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/check_value.cc
! 1e5cf0a0f9632ba89f07f2838107c79b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/compile.cc
! 1e510aee24663730c8755ea42e1cbe41  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/compile_2.cc
! 6a71f1161d0d53028bd1b7f9e73b5d74  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/check_nan.cc
! 0390df5f16f5915cbd17b0e507d799fe  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/check_value.cc
! a3f6129d24bd2967c79f028b30eb45d4  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/compile.cc
! 80afbaea088741481df9ba336398474d  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/compile_2.cc
! e1f61da5eba22f6f57ed93e07da96681  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/check_nan.cc
! 783f5aaaf513f5fc9b97bfdbedffd4e4  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/check_value_neg.cc
! dacac369de917ec3d1596d96634229d0  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/check_value_pos.cc
! 7b8ced629d5f5e619a7ba4d540f19136  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/compile.cc
! 431c31c7c66005539b5aa99f67a078d5  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/compile_2.cc
! 272feeb813ca101c5971be38f4699968  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/check_nan.cc
! 288cb7cda11684a7e0d3bbd0caa49950  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/check_value.cc
! 58cd4bfd58b5e68c0420604d0386580b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/compile.cc
! 8235e6b8109272632dc2e8a514a4bde0  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/compile_2.cc
! 44fb931f6afb2d7bde36b0eaae13a7f4  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/check_nan.cc
! 1b655127b4c73ac771ce21729a980c7b  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/check_value.cc
! 1ce819b9dc1d2650fb2177b4e2bf797f  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/compile.cc
! a743d761ca38ffb4627781753630ade2  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/compile_2.cc
! fa4ec8234aae6419ec04d2b2cf375baa  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/pr86655.cc
! b73d059048f7f08175ca2ac2a441d5e5  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/check_nan.cc
! b62f71dc8de7f935661170a09c563802  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/check_value.cc
! ba92e65987c9a851c01b1fe8e6ef3f13  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/compile.cc
! 0e21cae8458f1123f75f48dd5d21fe26  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/compile_2.cc
! dc0bc3b734a41e53bdf7089e378fcf21  libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/testcase.h
! 5e5047aac495e5512b23aa55e3b76e80  libstdc++-v3/testsuite/tr1/6_containers/array/capacity/empty.cc
! 23bbb3b6674653ea49fa16646e80714d  libstdc++-v3/testsuite/tr1/6_containers/array/capacity/max_size.cc
! f601745fb51b41a46238e83205552aa1  libstdc++-v3/testsuite/tr1/6_containers/array/capacity/size.cc
! cd50162ff2344b776daae72b7fb93be1  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/equal.cc
! 40c8fd27e08199a1279df22e50e61db8  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/greater.cc
! a359772a2b838bd148ccdf004c766b94  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/greater_or_equal.cc
! 84780c11a47b3e3c65dd7079aff51746  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/less.cc
! 05722e1e96db6ef0a4583bc7394ccd54  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/less_or_equal.cc
! 5348e9ed9fb00306965fc868a78508ec  libstdc++-v3/testsuite/tr1/6_containers/array/comparison_operators/not_equal.cc
! 4a6cbb13773919bb756bc861199b1374  libstdc++-v3/testsuite/tr1/6_containers/array/cons/aggregate_initialization.cc
! 4a3ee2475354265a8cc63c8f638d1f33  libstdc++-v3/testsuite/tr1/6_containers/array/element_access/at_out_of_range.cc
! fbbf2614c8c95fc47b4e85be9956f3bd  libstdc++-v3/testsuite/tr1/6_containers/array/element_access/back.cc
! c0b3c99c611056dfa8ee2a5ec64a8223  libstdc++-v3/testsuite/tr1/6_containers/array/element_access/data.cc
! c7de78b5f45c712124e8e2f327bf6a26  libstdc++-v3/testsuite/tr1/6_containers/array/element_access/front.cc
! b0a8ced3f563d1965be370ce89313966  libstdc++-v3/testsuite/tr1/6_containers/array/iterators/end_is_one_past.cc
! 99567f90b2d4833a9b301c99c639f8a2  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/assign.cc
! ef44ec024e147061592453b2afd4b39e  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/contiguous.cc
! d2529711decaa40bb6af32392beed480  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/explicit_instantiation.cc
! dd0cfcbb640a76085153b9498769e2be  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/member_swap.cc
! 2809c6b0bacbc37b44fce34ec94e6428  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/typedefs.cc
! ed5ef0780dcbaa6b487d3a7d66da6deb  libstdc++-v3/testsuite/tr1/6_containers/array/requirements/zero_sized_arrays.cc
! 45db4bd0d931f2849fed6f7c61a54a39  libstdc++-v3/testsuite/tr1/6_containers/array/specialized_algorithms/swap.cc
! 594cee63ecfc7365bb2f02f2cc561032  libstdc++-v3/testsuite/tr1/6_containers/array/tuple_interface/get.cc
! de052282b211fd875c2dc2ddfedb8bce  libstdc++-v3/testsuite/tr1/6_containers/array/tuple_interface/tuple_element.cc
! 26a232c811b5148a2665274015878fa0  libstdc++-v3/testsuite/tr1/6_containers/array/tuple_interface/tuple_size.cc
! 708135639196c673431dbc6a7b61c4d5  libstdc++-v3/testsuite/tr1/6_containers/hash/24799.cc
! d2228484f24baae309880d989b137768  libstdc++-v3/testsuite/tr1/6_containers/hash/operators/size_t.cc
! 9cb8ba3435c84bccb77335a95df7ddc2  libstdc++-v3/testsuite/tr1/6_containers/hash/requirements/base_classes.cc
! 5479b2c32c2010de68271c05b9950510  libstdc++-v3/testsuite/tr1/6_containers/hash/requirements/explicit_instantiation.cc
! bfe65632a5b821269f3b8f79c8032070  libstdc++-v3/testsuite/tr1/6_containers/headers/array/synopsis.cc
! 762b17c0b132ee883735bfd4c11994d9  libstdc++-v3/testsuite/tr1/6_containers/headers/functional/synopsis.cc
! 2d001f41baf7bc2be498e23e31d1c0d2  libstdc++-v3/testsuite/tr1/6_containers/headers/tuple/synopsis.cc
! c7f1af98d8813f02aae3acfe89d5f7f3  libstdc++-v3/testsuite/tr1/6_containers/headers/tuple/types_std_tr1.cc
! aebad39896bd708a6395dba696784af3  libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_map/synopsis.cc
! bec0b1b71a3a67b1ae547c0c9e821af9  libstdc++-v3/testsuite/tr1/6_containers/headers/unordered_set/synopsis.cc
! 7edb12cdd6e30f13ccedae20c4a3d50e  libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/35480_neg.cc
! 4e85ff0458bf56a63310fabaa68bddc3  libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/comparisons.cc
! 515ad5f22cb4e847bf10edaef1a30e59  libstdc++-v3/testsuite/tr1/6_containers/tuple/cons/assignment.cc
! 4aa299f5de4c59f21be49cfc0c7a9342  libstdc++-v3/testsuite/tr1/6_containers/tuple/cons/big_tuples.cc
! b1b12c48ea1eb94795d464dd28ab37f7  libstdc++-v3/testsuite/tr1/6_containers/tuple/cons/constructor.cc
! c31e0b66d7935ba344aab6272eb552e7  libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/23978.cc
! fc125595a719b1d9387237d5d2b94d3f  libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc
! 67f890578f576608adac50fa86a83f1d  libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie.cc
! f6f4514b34375e28647ec595990d2d53  libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc
! 6ac0be4d669091b594c6dd0c46e11861  libstdc++-v3/testsuite/tr1/6_containers/tuple/element_access/get.cc
! b91f53b7fc4dd90140602fcde3b02ada  libstdc++-v3/testsuite/tr1/6_containers/tuple/requirements/explicit_instantiation.cc
! 2973437a3cdf10deb778cf7216f7eed0  libstdc++-v3/testsuite/tr1/6_containers/tuple/tuple_element.cc
! b39d0b835a7c67016da3555ecd4ccc57  libstdc++-v3/testsuite/tr1/6_containers/tuple/tuple_size.cc
! d25d69388e50b35d0ddb859b3e0f6603  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/24064.cc
! cda438d415a2684336781d69dc985cd8  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc
! e1da6552a7fb851dd56a253cc804bbd4  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/erase/1.cc
! 57592db53117207d77e005dec51f4b41  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/erase/24061-map.cc
! 918ba266eaa314e072afc06f7b8d2476  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/find/map1.cc
! b5e3628f87fa292410abba2639e00c54  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/insert/24061-map.cc
! c748848b659e65accf10de2eee1aab22  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/insert/array_syntax.cc
! 9632039de67f49d695c8f9c93d348215  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/insert/map_range.cc
! 22b329766f37c3af7c5563a6a1d6f219  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/insert/map_single.cc
! de3f057ada2402fee6312d292b0a11e7  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/explicit_instantiation.cc
! 4424e03fcefd290bbe1ff65e7f41c704  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/iterator_neg.cc
! c2a33af6a593c18730eb12f5cccac3e4  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/iterator_null_neg.cc
! 31dfbf40e89bdf30139b4e440bc0d947  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/typedefs.cc
! a6d95dd72c9660799edf9a8e8a3f58e8  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/swap/1.cc
! 2ec14ca7d2fd88b4b99ec463f8162f99  libstdc++-v3/testsuite/tr1/6_containers/unordered_map/swap/2.cc
! fef16a065b033abdcc7e78c28b1dc9aa  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc
! 0cdc76dcf3d3528d0ae82d9cc64578a5  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/erase/1.cc
! 5cce82d028bd4ddc50abcd5331d8af25  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/erase/24061-multimap.cc
! 398bbc3739d84306a78cba8a06f5df90  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/find/multimap1.cc
! 2c600ff11568b61a165fd9bfff7e674c  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/insert/24061-multimap.cc
! 260218415517834944a69f948a130548  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/insert/multimap_range.cc
! 11cf351eab4acb293b195eb1c87d3b07  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/insert/multimap_single.cc
! abea58cbf65147393a9062d37764dcb3  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/explicit_instantiation.cc
! c02255a700b9742099a0367cc13ae64c  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/iterator_neg.cc
! ca6cc04e41cecbe6b1b2a573b0a0cc47  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/iterator_null_neg.cc
! d4c14d29b22bb95cf0909838c6433ac1  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/requirements/typedefs.cc
! a0e13773416c7f74f8d8a61f21130d00  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/swap/1.cc
! 93662e5a13e05fedd291c272d0c9498c  libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/swap/2.cc
! 734f51dcbaf30187e23ea8baf8f7871b  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/24054.cc
! 09625314806fd155d48e262fb430a839  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc
! 67391d0175960c8b864356614783565c  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/erase/1.cc
! 3b615065b6c0c229dbb5ef69eab1582f  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/erase/24061-multiset.cc
! 911cfcc3529354782dc10f931c2a563c  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/find/multiset1.cc
! 4ec76dafc3f3ece1dffe2c1d6fb0d001  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/insert/24061-multiset.cc
! 75218ac6bc10f13227a28c8f790b0a43  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/insert/multiset_range.cc
! b0db528a9a58c453de60e6cfbbea40d9  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/insert/multiset_single.cc
! 5b739d14ec395173ccc13922cf572967  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/explicit_instantiation.cc
! dcfa7032cf0777dba4700a15d30b9605  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/iterator_neg.cc
! e5eb9bdd227359d3d19f2c24cd1da362  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/iterator_null_neg.cc
! 8320683afd92f5c91e1bb73dec63e57a  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/requirements/typedefs.cc
! 9df74106692068b045b0837dc47936a3  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/swap/1.cc
! 354690059301978d7570d2648987e3d7  libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/swap/2.cc
! c576b7c6c20844be080e4964d0c99f1c  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/23053.cc
! 9893a42157cdd2b0d4727729102f0480  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/23465.cc
! 1432b4384f8f47b91ed7296a286f06a8  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/26127.cc
! 4a5f8b47d86bd6338fd26a78bca4f342  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/26132.cc
! 9f49e487632bd76cf9cc57a37dc25c64  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc
! 1d411df18756226a05a1cae2ab749fed  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/erase/1.cc
! aded5a12d1e484e4663dfc955ed693c1  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/erase/24061-set.cc
! 1eb9b48b3c4dccbb15653a4248582633  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/find/set1.cc
! 7a6d947dd47218d4511f4ad53e82af11  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/insert/24061-set.cc
! 77bd670a7175d0f369332527ddebc451  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/insert/set_range.cc
! 0d92464b59ac57425302d71b2bb96ef5  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/insert/set_single.cc
! 54bf37164209ef8fc75cb65860f19cfd  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/explicit_instantiation.cc
! 6608a4fbccb85145826082c43632be9a  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/iterator_neg.cc
! f97fb6d2632220b084633f188b4ad89b  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/iterator_null_neg.cc
! 932a488c885a0f204b85dbdee5927ffa  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/iterators_default_constructor.cc
! 3f9e6e34c2a352896744baf12f2b08bd  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/typedefs.cc
! 91ed3ec0936d852fd8c4c19a9321dcd9  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/swap/1.cc
! b0cf65e062a65872f93daf8e33eeec50  libstdc++-v3/testsuite/tr1/6_containers/unordered_set/swap/2.cc
! 831738b54b6a93c2bd8407495500e748  libstdc++-v3/testsuite/tr1/6_containers/utility/19535.cc
! eaaf6964a85ba04d5688640da4f62f5d  libstdc++-v3/testsuite/tr1/6_containers/utility/pair.cc
! 7b422f509be8bedfc2a1f4652aa289c5  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/cstring.cc
! 2ce755b9d379e52b73670dc26884b4ac  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/cstring_op.cc
! c0e2fe3b586d53161d425edf55794cb4  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/pstring.cc
! 6d71cc427bb44dc8ca7491efba5274af  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/range.cc
! 49adfbb7d3e4e12372b4dab73d1ae669  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/string.cc
! ba1b5993bfa1f2c4ea8b5da1e2463ed0  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/char/string_op.cc
! 490e7e0ccc47f44c4cd46a38ed56cabf  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/cstring.cc
! 917d885505b949f7cbde88f2183d3f92  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/cstring_op.cc
! 74640dde9ba78778200289f94621e16d  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/pstring.cc
! c8bf93ff24c5cca67d9188d46b62ce1b  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/range.cc
! 1ef439126e77844e9d13f538dc9b0bfc  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/string.cc
! e33b3683678c5af380ec98e2a3334300  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/string_op.cc
! 375bdaddb283d13b343e43efa4f0f1dc  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/cstring.cc
! 625ecc57b87bf7cccaec6fc81a1c8929  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/default.cc
! 2a77e3b87af05ea8019a5b375fe6f893  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/pstring.cc
! fd81524e5da1d58793b2673ffed16ee0  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/range.cc
! 8a5e5147cc97730c76144a8c7c82395e  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/string.cc
! 676cd20da7149a539ce9d8145a1e7a6f  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/cstring.cc
! 313f843d5f666ecb6fdf193cc6b36519  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/default.cc
! 75057b9bdfc238d391b68e8c7b336343  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/pstring.cc
! 4209acc8ecd432b2b7bbe9218bc5e469  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/range.cc
! cbfe93cee30197e4d036af6b0214ef8c  libstdc++-v3/testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/string.cc
! f1831c427af9ddf9679d4b7e7cbcaf98  libstdc++-v3/testsuite/tr1/7_regular_expressions/match_results/ctors/char/default.cc
! beef8e67b62a317fb8992f93e727984a  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_awk.cc
! a30b369d732fa4c58ff79eb139c6db11  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_basic.cc
! eed665aef0f523a686e3a00f5b0716e5  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_ecma.cc
! 4674e837f601d5fc5836500a78c3e592  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_egrep.cc
! 5e8b5132f7a3be6cb568892e5ad1d630  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/c_string_grep.cc
! b90ed2d3c7211162ff0c168ab183120f  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex/cons/char/default.cc
! c8ad95226ebe1ce33cc2b4a17398775e  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/ctor.cc
! 643b359610784d5de97b1359c0cbbebd  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/translate_nocase.cc
! e64c74a46cd8bb2f84ab2bc4e1d84cd1  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/char/value.cc
! f3a6c3621fa019175f308108702ff0d6  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/ctor.cc
! 64098a4df024c022f7f670ef61903d26  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/translate_nocase.cc
! e64c74a46cd8bb2f84ab2bc4e1d84cd1  libstdc++-v3/testsuite/tr1/7_regular_expressions/regex_traits/wchar_t/value.cc
! b534c5e17723cdeae8b6ff5ac4a85737  libstdc++-v3/testsuite/tr1/8_c_compatibility/cctype/functions.cc
! 2d1c40b4969209cdcb897203d1760829  libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/functions.cc
! 2b13c5bf924bb8f5704df62e38345918  libstdc++-v3/testsuite/tr1/8_c_compatibility/cfenv/types_std_tr1.cc
! 8d6f2eaa13a606086431cd202c00f27b  libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/functions.cc
! 31fb0a22277fdbf0c96ea66817dc8cb0  libstdc++-v3/testsuite/tr1/8_c_compatibility/cinttypes/types_std_tr1.cc
! 3d93b4a27c71be070ec59406640d097b  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/51083.cc
! 55b2e7bda8280c8bcff8297f1028a5b1  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/functions.cc
! 7f9d8cad94cca64c3ff538d31fcc7007  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/overloads.cc
! c7002eb0a175a7b2cd4933e0f6a18c65  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/overloads_neg.cc
! b18c31cb843562c142167d89b1d63878  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/pow_cmath.cc
! 28f3a7798c6daa14baf47f1cd133eac0  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/templates.cc
! 8cbd0da7e93b0a87cdab2776e744d24c  libstdc++-v3/testsuite/tr1/8_c_compatibility/cmath/types_std_tr1.cc
! 8ed1d97d33505b3ceeaf0ba31b491226  libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc
! c0e7787505810892e7e7fe4914196545  libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/51083.cc
! c2a97eca3a90bb49f2ca88521206e5d9  libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/functions.cc
! d14e66c94eaa24942df81154214ce8cb  libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/overloads_float.cc
! bad82e60eaf42f633348637ad6af882f  libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/overloads_int.cc
! c2853e3ee835fcea365cd724ea5f2cdd  libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdint/types_std_tr1.cc
! 3836874d6428ebe546651be55a1a15ec  libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdio/functions.cc
! 61f1a85f64525693cb564ca7e09a9927  libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/functions.cc
! c603793d94afa72f146a44405619126c  libstdc++-v3/testsuite/tr1/8_c_compatibility/cstdlib/types_std_tr1.cc
! 9f136149c3baef1fd7e1cbc98e5000d2  libstdc++-v3/testsuite/tr1/8_c_compatibility/cwchar/functions.cc
! db0e9942bd6d90868055ae7e838b0a21  libstdc++-v3/testsuite/tr1/8_c_compatibility/cwctype/functions.cc
! d9e471422e6ce045cb7591717d3deaac  libstdc++-v3/testsuite/tr1/headers/all.cc
! 41ab99c3159e620c64444c0ff4619850  libstdc++-v3/testsuite/tr1/headers/c++200x/complex.cc
! ecdd7acab6804116d728b0628cfb26d5  libstdc++-v3/testsuite/tr1/headers/c++200x/math.cc
! 283682ab5955b4455c36935547ff337b  libstdc++-v3/testsuite/tr1/headers/c++200x/using_namespace_std_tr1.cc
! 08e84065ddb399c786023dfceabd38bb  libstdc++-v3/testsuite/tr1/headers/using_namespace_std_tr1.cc
! 0f655dd00e69e04a5dd1379bb2f7b96b  libstdc++-v3/testsuite/tr2/bases/requirements/explicit_instantiation.cc
! f6ec53db66467a31f4154e781b7128c0  libstdc++-v3/testsuite/tr2/bases/requirements/typedefs.cc
! 03d049df9b1bcc0238e0fad100c93d33  libstdc++-v3/testsuite/tr2/bases/value.cc
! 2c874dd61b95446aa05e4a061d050575  libstdc++-v3/testsuite/tr2/direct_bases/requirements/explicit_instantiation.cc
! b226566903adec5f02e8ec7c2fc70785  libstdc++-v3/testsuite/tr2/direct_bases/requirements/typedefs.cc
! 0901f5b456de6e1ef8e459acb2c8129b  libstdc++-v3/testsuite/tr2/direct_bases/value.cc
! 106d6aa0ebf199cecdb1aab195ad5263  libstdc++-v3/testsuite/tr2/dynamic_bitset/cmp.cc
! 85793974afc61df8fbe6e2f4592d068c  libstdc++-v3/testsuite/tr2/dynamic_bitset/cons.cc
! 25335d256c3d74b842a21bf0d1b44df3  libstdc++-v3/testsuite/tr2/dynamic_bitset/copy.cc
! f11ef991bc17262fc656f24489ad5bc2  libstdc++-v3/testsuite/tr2/dynamic_bitset/move.cc
! 2b4a18798ec59ec0ccb42b1b6dfeda0a  libstdc++-v3/testsuite/tr2/dynamic_bitset/pr58729.cc
! 03f730c3136672f8cd1226742b5abe63  libstdc++-v3/testsuite/tr2/dynamic_bitset/pr87784.cc
! e3b7410ecb9a7c465b9bb748d97e0a49  libstdc++-v3/testsuite/tr2/dynamic_bitset/pr92059.cc
! e38724df984f6f323ea00f7a077fec36  libstdc++-v3/testsuite/tr2/headers/all.cc
! 6854641b62882de184c8f0cad1cafbad  libstdc++-v3/testsuite/tr2/headers/using_namespace_std_tr2.cc
! 4b5b900d3ee66e7ce3cf094c41c8888c  libstdc++-v3/testsuite/util/atomic/wait_notify_util.h
! 290c8b28b5b8146111f554541a6a96a7  libstdc++-v3/testsuite/util/common_type/assoc/common_type.hpp
! 883e41892d51217acddb30e5a3d6d10c  libstdc++-v3/testsuite/util/common_type/assoc/detail/comb_hash_fn_string_form.hpp
! 7cacabd088ea79d3ecff0ed15ab7fa1b  libstdc++-v3/testsuite/util/common_type/assoc/detail/ds_string_form.hpp
! e259c256f0f1396e7df49b7de2379442  libstdc++-v3/testsuite/util/common_type/assoc/detail/list_update_policy_string_form.hpp
! e7c525d8b14d9b31308160e7a5b0f469  libstdc++-v3/testsuite/util/common_type/assoc/detail/probe_fn_string_form.hpp
! b07c422519fc7a248a3848940214c028  libstdc++-v3/testsuite/util/common_type/assoc/detail/resize_policy_string_form.hpp
! 9c9a48debc9505e9c4218f259640577e  libstdc++-v3/testsuite/util/common_type/assoc/detail/size_policy_string_form.hpp
! fa387aaa4df93265ab6ee00e51934c83  libstdc++-v3/testsuite/util/common_type/assoc/detail/store_hash_string_form.hpp
! a692f4a3c96da2728fb855d6dfe61da4  libstdc++-v3/testsuite/util/common_type/assoc/detail/tree_supports_order_statistics.hpp
! 3b669aa2e5a4c4395d88caa93349503d  libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_order_statistics.hpp
! 7f91b1bcbdb80cf8cb0c834e2b095e2c  libstdc++-v3/testsuite/util/common_type/assoc/detail/trie_supports_prefix_search.hpp
! 463d1ce7413da04dabcee7bd9b239243  libstdc++-v3/testsuite/util/common_type/assoc/detail/trigger_policy_string_form.hpp
! 51304a79f118f6df70caadfda6372299  libstdc++-v3/testsuite/util/common_type/assoc/native_set.hpp
! 00a1ea5a2d23f741778e1fa5fe3c4f7b  libstdc++-v3/testsuite/util/common_type/assoc/string_form.hpp
! 8bfacb84268b4decd0396fe209d6e43c  libstdc++-v3/testsuite/util/common_type/assoc/template_policy.hpp
! 06afc6e766061142bac5c1c22f7c31eb  libstdc++-v3/testsuite/util/common_type/priority_queue/common_type.hpp
! ecb91d285dd06d24c02f08c26bb05012  libstdc++-v3/testsuite/util/common_type/priority_queue/detail/ds_string_form.hpp
! 0999a9f8724830c7bd4974ed26f0ffaa  libstdc++-v3/testsuite/util/common_type/priority_queue/string_form.hpp
! fde51f75aadb0bb5715284f74c8642d3  libstdc++-v3/testsuite/util/debug/checks.h
! 25fbba0ad63955fde2a8332efa77a12b  libstdc++-v3/testsuite/util/debug/unordered_checks.h
! fa244db7e60d062ea101425361eaba58  libstdc++-v3/testsuite/util/exception/safety.h
! 4936203f8509351a185b7d8d04686a27  libstdc++-v3/testsuite/util/hash_fn/dna_str_limit.hpp
! 58e6c1c788f9c7d6251c6916142a5fe9  libstdc++-v3/testsuite/util/hash_fn/limit_string_hash_fn.hpp
! 4aa2b640e9457b183669e5b09e5505d4  libstdc++-v3/testsuite/util/hash_fn/string_hash_fn.hpp
! 6bc7d86de387c5d5e1b1a8d80302d0b5  libstdc++-v3/testsuite/util/hash_fn/string_ranged_hash_fn.hpp
! c80cab0725b74bb5b994e8e76f3f0372  libstdc++-v3/testsuite/util/hash_fn/string_ranged_probe_fn.hpp
! 3d1fbe11aa7a0f70cee933b14910b277  libstdc++-v3/testsuite/util/io/illegal_input_error.hpp
! 00e33f41410d28a92e7322e2871c4385  libstdc++-v3/testsuite/util/io/prog_bar.cc
! 3cef72073b43140ff9317f4dad257a00  libstdc++-v3/testsuite/util/io/prog_bar.hpp
! fae3d8dbc973a9be9fc1052a467b477e  libstdc++-v3/testsuite/util/io/text_populate.hpp
! fddf68a287679a3a6c25b5f2a53a1a49  libstdc++-v3/testsuite/util/io/verified_cmd_line_input.cc
! db5ab836701fa68737dafb144256a666  libstdc++-v3/testsuite/util/io/verified_cmd_line_input.hpp
! 69e0ee221cd7df9993f054f52438f091  libstdc++-v3/testsuite/util/io/xml.hpp
! d0f39ed8c0c7a52f7b3a91a9f5881459  libstdc++-v3/testsuite/util/io/xml_test_formatter.hpp
! 57423b6de37a4b27f458a11fbab749f2  libstdc++-v3/testsuite/util/native_type/native_hash_map.hpp
! 89ff4bc8fbf2d44cef3d43c6930e43e9  libstdc++-v3/testsuite/util/native_type/native_hash_multimap.hpp
! bc97df77bb4559c9849e123f2641eb95  libstdc++-v3/testsuite/util/native_type/native_hash_set.hpp
! 9fddea3631f0f85f196b4e45fb041b52  libstdc++-v3/testsuite/util/native_type/native_hash_tag.hpp
! afdd03333a978f2e62864306718c8bb3  libstdc++-v3/testsuite/util/native_type/native_map.hpp
! 95358d6563b644e73e5ecb47e1d187f7  libstdc++-v3/testsuite/util/native_type/native_multimap.hpp
! 34a132d8e8c107dfefa1788445ca0c28  libstdc++-v3/testsuite/util/native_type/native_priority_queue.hpp
! 82be8cbb89d119cc40352f640ea4b40d  libstdc++-v3/testsuite/util/native_type/native_set.hpp
! ea3ffe4012f2e54c62b9b3b7045aaf79  libstdc++-v3/testsuite/util/native_type/native_tree_tag.hpp
! c054caa235862935627744effe0bb88b  libstdc++-v3/testsuite/util/performance/assoc/mem_usage/erase_test.hpp
! c8a92941ff1e209c85f85c6311e13878  libstdc++-v3/testsuite/util/performance/assoc/mem_usage/multimap_insert_test.hpp
! 934d452d40e92046747c86705cbaf3e2  libstdc++-v3/testsuite/util/performance/assoc/multimap_common_type.hpp
! 6b13fd5fc3ebb364399a19072b53ccd4  libstdc++-v3/testsuite/util/performance/assoc/timing/common_type.hpp
! 548ea6d3f97f6691543b0220c664c028  libstdc++-v3/testsuite/util/performance/assoc/timing/find_test.hpp
! 6e67710d7d5268f7a7c99e5561cc7075  libstdc++-v3/testsuite/util/performance/assoc/timing/insert_test.hpp
! 11c9d87562219dac9a4dd5545b76b42d  libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_find_test.hpp
! e91bdf3f6cc5ed0f56a1700f26d798bd  libstdc++-v3/testsuite/util/performance/assoc/timing/multimap_insert_test.hpp
! ed00b69d6d2509f313fee81d725c6c2b  libstdc++-v3/testsuite/util/performance/assoc/timing/subscript_find_test.hpp
! edda61a217e4ae4a0396da3d30539c4e  libstdc++-v3/testsuite/util/performance/assoc/timing/subscript_insert_test.hpp
! 1d16062f9da096280e5981c37cdc5d34  libstdc++-v3/testsuite/util/performance/assoc/timing/tree_order_statistics_test.hpp
! 57a996b9612dce5232a9afeec7bb0879  libstdc++-v3/testsuite/util/performance/assoc/timing/tree_split_join_test.hpp
! e7d5f77a9502136b76649f684199ef70  libstdc++-v3/testsuite/util/performance/io/xml_formatter.hpp
! 95275499000a17fc5f381fb33e15711f  libstdc++-v3/testsuite/util/performance/priority_queue/mem_usage/pop_test.hpp
! 17a62813df69507b3c53433b239f8df0  libstdc++-v3/testsuite/util/performance/priority_queue/timing/join_test.hpp
! 37c9335d0426ed79f08a6ccb7e81e497  libstdc++-v3/testsuite/util/performance/priority_queue/timing/modify_test.hpp
! 903c861f13a72781b952fc7e15b9daeb  libstdc++-v3/testsuite/util/performance/priority_queue/timing/push_pop_test.hpp
! 1c553354d1c3ecb0678541f688d80f22  libstdc++-v3/testsuite/util/performance/priority_queue/timing/push_test.hpp
! 3b4248c28a03b2dca106070fb46ddf46  libstdc++-v3/testsuite/util/performance/time/elapsed_timer.cc
! 4a9a9063a97988791213102aa96d7632  libstdc++-v3/testsuite/util/performance/time/elapsed_timer.hpp
! a5c6a20d7e5bf02bb86fe0dbf6cf4884  libstdc++-v3/testsuite/util/performance/time/timing_test_base.hpp
  f229f005fb6b0edfab2a25224f4aa670  libstdc++-v3/testsuite/util/pstl/pstl_test_config.h
  315ea42a1d905634a70b6bfebf2b60e4  libstdc++-v3/testsuite/util/pstl/test_utils.h
! 5dfc09db3b2617d5c19c9eaec6f64d67  libstdc++-v3/testsuite/util/regression/basic_type.hpp
! 6eadb86a02b8dc5e99f6258f3034b19b  libstdc++-v3/testsuite/util/regression/common_type.hpp
! a31d5aa6650e7d3ba8be115d978a0d62  libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h
! 49086292936fd06a13cf6cb56cb37b91  libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
! 787a2e9c0d903f48d5275ca64787bfb5  libstdc++-v3/testsuite/util/regression/rand/assoc/rand_regression_test.hpp
! e9c2131eeba7c1d5a3a199e722186f46  libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.h
! 603345bec70107a147910c9fed9f1b17  libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
! 1d25938094a016949b8c50b7932a4cb5  libstdc++-v3/testsuite/util/regression/rand/priority_queue/rand_regression_test.hpp
! b20d861005ed22ee8ef1755f36b5afaf  libstdc++-v3/testsuite/util/regression/rand/xml_formatter.hpp
! 0b845069feb9c06b2c71f2c65c713c27  libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_load_trait.hpp
! c1dc5a81e2db5521c0b6960328d89298  libstdc++-v3/testsuite/util/regression/trait/assoc/get_set_loads_trait.hpp
! d8ea88057f4c529e4f475e9b4b60a723  libstdc++-v3/testsuite/util/regression/trait/assoc/native_type_trait.hpp
! 550eb567fb9449d19bb805770e097167  libstdc++-v3/testsuite/util/regression/trait/assoc/node_update_trait.hpp
! 1573afd941326ace1d90640271112422  libstdc++-v3/testsuite/util/regression/trait/assoc/resize_trait.hpp
! a94e7e675c237c57aa288164fab8d092  libstdc++-v3/testsuite/util/regression/trait/assoc/to_string.hpp
! 3addf2ff8fc639640cea5fc0203e7be7  libstdc++-v3/testsuite/util/regression/trait/assoc/trait.hpp
! 61445413b0be2764c6cd3b371a223675  libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp
! afe66d04750a7c497342f33b8ad02fcd  libstdc++-v3/testsuite/util/regression/trait/erase_if_fn.hpp
! bb6dd9d60504f8a79873fc870e193f24  libstdc++-v3/testsuite/util/regression/trait/priority_queue/trait.hpp
! d63d3f2842d4068f851534a5364e15b8  libstdc++-v3/testsuite/util/replacement_memory_operators.h
! 83bf828131c74fde691a7acfec89fb8c  libstdc++-v3/testsuite/util/slow_clock.h
! 8ac18dc6c9f5dda633f017d5c5779d7d  libstdc++-v3/testsuite/util/specfun_testcase.h
! 15443d8a9c9c2c31a9ff96c2a819c907  libstdc++-v3/testsuite/util/statistic/result_recorder.hpp
! 12332fafc6d36cbb20b6c876b866d8ad  libstdc++-v3/testsuite/util/statistic/sample_mean.hpp
! 3c3b89f4827bc63c2520e03271a89532  libstdc++-v3/testsuite/util/statistic/sample_mean_confidence_checker.hpp
! b1dbe55b9edd1c63e213a5d77d4daa77  libstdc++-v3/testsuite/util/statistic/sample_variance.hpp
! 02eb37fb48c881d4915847d538015cfc  libstdc++-v3/testsuite/util/testsuite_abi.cc
! b6512138575fef873fceae65f127e888  libstdc++-v3/testsuite/util/testsuite_abi.h
! 890a2ba99fd019bde86026b30a2431e6  libstdc++-v3/testsuite/util/testsuite_abi_check.cc
! 6e266b277968cb27c93329a4b5ba47de  libstdc++-v3/testsuite/util/testsuite_allocator.cc
! 76bce70903547f6b2805d51a82152975  libstdc++-v3/testsuite/util/testsuite_allocator.h
! 73cbff69a4a3732bb760848ce25110bf  libstdc++-v3/testsuite/util/testsuite_api.h
! 5ed09a09458ce0f5233885ea4ff0c00a  libstdc++-v3/testsuite/util/testsuite_character.cc
! 27d746bda1ad2167a2f4b476782ac174  libstdc++-v3/testsuite/util/testsuite_character.h
! 95e2ffb9ceeff72953c9cf22a335c371  libstdc++-v3/testsuite/util/testsuite_common_types.h
! bee14ff555a8382320b92c0a71b87d0a  libstdc++-v3/testsuite/util/testsuite_container_traits.h
! a5f860c3b445b0669390aa254fa79dec  libstdc++-v3/testsuite/util/testsuite_containergen.h
! e643ffcc916155f89f82edba4e4d862e  libstdc++-v3/testsuite/util/testsuite_containers.h
! 722f8d04778395b63ee57225dce0e1db  libstdc++-v3/testsuite/util/testsuite_counter_type.h
! 6152acfa78346d08667e148930fcd7ff  libstdc++-v3/testsuite/util/testsuite_error.h
! 34c79aa98bc354586730d42927512981  libstdc++-v3/testsuite/util/testsuite_fs.h
! 7a4d70a5115cff8029d017d51a43fe79  libstdc++-v3/testsuite/util/testsuite_greedy_ops.h
! 9c1be3917c2ce4af456872222408b8e9  libstdc++-v3/testsuite/util/testsuite_hooks.cc
! e84e2cc087a496a74ee6be1f84ba7df1  libstdc++-v3/testsuite/util/testsuite_hooks.h
! 70a10382a37f32af299fef6dbbc8b53d  libstdc++-v3/testsuite/util/testsuite_io.h
! 4d0a80e9fa6ca4ba2d3c4ecffc172a17  libstdc++-v3/testsuite/util/testsuite_iterators.h
! b85105397d6ead792d8b5f531070d296  libstdc++-v3/testsuite/util/testsuite_new_operators.h
! 05b2c2eb3d34ac12578a5e2d64489cad  libstdc++-v3/testsuite/util/testsuite_performance.h
! 46bc93da0c39cea97ec2b150c67a3eab  libstdc++-v3/testsuite/util/testsuite_random.h
! 48846b86249f81b09fb82bdde95c1af8  libstdc++-v3/testsuite/util/testsuite_regex.h
! ca2564710e56b23cb143e402f71d7d4f  libstdc++-v3/testsuite/util/testsuite_rng.h
! e3b7b7b18b2aa34a0f1580e45e47a9b3  libstdc++-v3/testsuite/util/testsuite_rvalref.h
! 7c8dfb8da422b5bd056d455d8a8f25f8  libstdc++-v3/testsuite/util/testsuite_shared.cc
! a412686870425c5fb3e383ec59146426  libstdc++-v3/testsuite/util/testsuite_tr1.h
! 039fb71c0474e0e873b0c17058f6787e  libstdc++-v3/testsuite/util/thread/all.h
  b950d655469c477755252b1e18009596  libtool-ldflags
  1936a81f2a04a996ff99c7ebdebc5003  libtool.m4
! 9d5c2286db0f7afd5bc5333f8aeb90c9  libvtv/ChangeLog
! ba2573e6811220314686b082dc2e0204  libvtv/Makefile.am
  b1170aae9472f26fdc8326737dc22aba  libvtv/Makefile.in
  3b765c4f4a0a0f606db1472bce2b8d29  libvtv/acinclude.m4
  84c8143a9310ea291315dcd0c276df5d  libvtv/aclocal.m4
  428060c62738810622a8865de9f9d1b0  libvtv/configure
  cc9f6a09cf2db980b7d7119fd0748406  libvtv/configure.ac
! 71860a94561fd4852262efcf401140e6  libvtv/configure.tgt
  2caccd848c579fcddd2a8c8106cfaff9  libvtv/scripts/run-testsuite.sh
  09a6150d1619f2508d7844f860b3382c  libvtv/scripts/sum-vtv-counts.c
  4835ec70e1fbcd9acd3c280c0060afa4  libvtv/testsuite/Makefile.am
  fda4739e0005be93900b671246d786ff  libvtv/testsuite/Makefile.in
! 45cf79604ff1dacc5cb467b2547c4d0d  libvtv/testsuite/config/default.exp
  c3135c06118981205f468524e15716be  libvtv/testsuite/lib/libvtv-dg.exp
  b01596489f4e825c77d9429f5bd51424  libvtv/testsuite/lib/libvtv.exp
  dc26824f08dd227e0cba7e7ebc8f4d3a  libvtv/testsuite/libvtv.cc/bb_tests.cc
*************** e18c427700b2de867318b8dfb4ccdc4e  libvtv
*** 108498,108504 ****
  1af090cb318f05dcac1de1af35049bf3  libvtv/testsuite/libvtv.cc/thunk.cc
  4342d1f35d7a127cbf072aea14c40ca4  libvtv/testsuite/libvtv.cc/thunk_vtable_map_attack.cc
  af622745e9d1ebd1a80806c6a477adda  libvtv/testsuite/libvtv.cc/v8-test-2.cc
! 162e3fc8dffcce7a1f8a3b2511922976  libvtv/testsuite/libvtv.cc/virtfunc-test.cc
  02687d81e25b3d8b61f75737f0a618a9  libvtv/testsuite/libvtv.cc/virtual_inheritance.cc
  85e4bee8e57399ebf8c098da2a829dd0  libvtv/testsuite/libvtv.cc/vtv.exp
  85942493419912cb30bceeaf62d53da8  libvtv/testsuite/libvtv.cc/xlan-test.cc
--- 115505,115511 ----
  1af090cb318f05dcac1de1af35049bf3  libvtv/testsuite/libvtv.cc/thunk.cc
  4342d1f35d7a127cbf072aea14c40ca4  libvtv/testsuite/libvtv.cc/thunk_vtable_map_attack.cc
  af622745e9d1ebd1a80806c6a477adda  libvtv/testsuite/libvtv.cc/v8-test-2.cc
! 797da78728f8f7dad49d5d1b398cfae6  libvtv/testsuite/libvtv.cc/virtfunc-test.cc
  02687d81e25b3d8b61f75737f0a618a9  libvtv/testsuite/libvtv.cc/virtual_inheritance.cc
  85e4bee8e57399ebf8c098da2a829dd0  libvtv/testsuite/libvtv.cc/vtv.exp
  85942493419912cb30bceeaf62d53da8  libvtv/testsuite/libvtv.cc/xlan-test.cc
*************** dc2332c7582cf3d236d0ee930f63eca3  libvtv
*** 108508,108514 ****
  8ef0aa7efe1764eeb6f68dbd51e6d4b5  libvtv/testsuite/libvtv.mt.cc/mt.exp
  bb4ece037690dc6ecdd0c04662562123  libvtv/testsuite/libvtv.mt.cc/register_set_pair_inserts_mt.cc
  4028191848aead5f1025ef6d51d6460e  libvtv/testsuite/libvtv.mt.cc/register_set_pair_mt.cc
! baf7fc71c95661906995119aa74b27a4  libvtv/testsuite/other-tests/Makefile.am
  481aa959d973aa72ca282a2b6db129e3  libvtv/testsuite/other-tests/Makefile.in
  ed7bc4ea169d6384a32fd76063d7af7f  libvtv/testsuite/other-tests/README
  32bbdc8e2683c298b41d8d68281dd6ea  libvtv/testsuite/other-tests/dlopen.cc
--- 115515,115521 ----
  8ef0aa7efe1764eeb6f68dbd51e6d4b5  libvtv/testsuite/libvtv.mt.cc/mt.exp
  bb4ece037690dc6ecdd0c04662562123  libvtv/testsuite/libvtv.mt.cc/register_set_pair_inserts_mt.cc
  4028191848aead5f1025ef6d51d6460e  libvtv/testsuite/libvtv.mt.cc/register_set_pair_mt.cc
! 36c253d5d2ea7fe4f15c15a8bbe572de  libvtv/testsuite/other-tests/Makefile.am
  481aa959d973aa72ca282a2b6db129e3  libvtv/testsuite/other-tests/Makefile.in
  ed7bc4ea169d6384a32fd76063d7af7f  libvtv/testsuite/other-tests/README
  32bbdc8e2683c298b41d8d68281dd6ea  libvtv/testsuite/other-tests/dlopen.cc
*************** a39c1926ca0a1bac2ffa3e5389fe2eb2  libvtv
*** 108521,108555 ****
  fd1ee5c194e5759320643df81103775d  libvtv/testsuite/other-tests/temp_deriv.cc
  a28f0d44162e9d978de21ea4c82b411e  libvtv/testsuite/other-tests/temp_deriv2.cc
  fd44dfd4ba421163f0a14a74988ea97a  libvtv/testsuite/other-tests/temp_deriv3.cc
! ecdefc62cb0184c7c041b48dd96090d6  libvtv/vtv_fail.cc
! 7f46dbdf4c734b0bb0d805294a165f55  libvtv/vtv_fail.h
! f26a766617283a0b973649a93d352c03  libvtv/vtv_malloc.cc
! 3a3d96cdd1296fc9284d4df01beea848  libvtv/vtv_malloc.h
! 2b674fa79440c0dd1732a540d471f607  libvtv/vtv_map.h
! d1ed87927171e03c12de5a77660c86c2  libvtv/vtv_rts.cc
! a0b60ab66c6f30687976addf58306c30  libvtv/vtv_rts.h
! fd301005dc07375a9b1b26c1df04e576  libvtv/vtv_set.h
! 16d5bd4299ad6f7905764e7c3dc63e28  libvtv/vtv_utils.cc
! 4a2d91c71136af55b12e42fa84195778  libvtv/vtv_utils.h
  247597a3fcc5b5aa8bd923351c59d853  ltgcc.m4
  06c2854f9cfe5864b2885e0d0e9c512f  ltmain.sh
! 6629ad5e60bca469141a23bf6213c635  lto-plugin/ChangeLog
! b4172d0962c2ec3a954d98e768b4995e  lto-plugin/Makefile.am
! 93fe746c6f1d54ade83e13d65096fe9f  lto-plugin/Makefile.in
  75fc65b35d0a47ac098f7a278d37060b  lto-plugin/aclocal.m4
  de4c999b99ec1e3d1bcb8a340bd8d5fd  lto-plugin/config.h.in
! 7e3bb792a40841dadcac04d9301acb6e  lto-plugin/configure
! 94b1550691bec5ce21db143723d02984  lto-plugin/configure.ac
! c3f7d906d1fe36c0be97624f53dc9e59  lto-plugin/lto-plugin.c
  dee72a6a60e99528b0d17bf3ff9a1e15  ltoptions.m4
  bc2f6032c98896249eadb56177c7d357  ltsugar.m4
  c30cd33c496505f13d9fbdb6970c7c33  ltversion.m4
  293853a13b7e218e3a4342cf85fbbf25  lt~obsolete.m4
! 12c098389400306ad713eee79dfba903  maintainer-scripts/ChangeLog
  33c7bc2d2c55956dfac85a05d8a80eff  maintainer-scripts/README
  507e832af5f2d63b8a78eef217c807a7  maintainer-scripts/branch_changer.py
  c819510f0d438149c1518bda7b165ac4  maintainer-scripts/bugzilla-close-candidate.py
! 4e68221d8bed06d740127a5f6e7519a4  maintainer-scripts/crontab
  1777fbf3e6a3232bd6898ce857cdf2fd  maintainer-scripts/gcc_release
  262d529ab10d5bd398f14fc1ec9fed1a  maintainer-scripts/generate_libstdcxx_web_docs
  33d97164a8610c7abf67eff7d28f47ff  maintainer-scripts/maintainer-addresses
--- 115528,115563 ----
  fd1ee5c194e5759320643df81103775d  libvtv/testsuite/other-tests/temp_deriv.cc
  a28f0d44162e9d978de21ea4c82b411e  libvtv/testsuite/other-tests/temp_deriv2.cc
  fd44dfd4ba421163f0a14a74988ea97a  libvtv/testsuite/other-tests/temp_deriv3.cc
! 6d3d219647c2af528f25eb4c6ece5cb3  libvtv/vtv_fail.cc
! 3d6d684c9c1631b9f4d40e3dbee99e4d  libvtv/vtv_fail.h
! 9f48f1e0ace562461811b244c80506b7  libvtv/vtv_malloc.cc
! 4645c109981a04794f5548b3b0ac108d  libvtv/vtv_malloc.h
! e0e7ee6d9ede75d9d8822ab3b88d5080  libvtv/vtv_map.h
! 6a007090c9f255da1bbfe06c9c4d3c68  libvtv/vtv_rts.cc
! 6f92b0b55f5b6665099adb36e849c981  libvtv/vtv_rts.h
! 0f50a258dbf2fc7f38e2c0a34646d031  libvtv/vtv_set.h
! 8a044b736ea3a7b598abf7d415f80bec  libvtv/vtv_utils.cc
! 05b984c47b23470a9bac686f5d51249e  libvtv/vtv_utils.h
  247597a3fcc5b5aa8bd923351c59d853  ltgcc.m4
  06c2854f9cfe5864b2885e0d0e9c512f  ltmain.sh
! 39661682c6802ca6e5fd5716f86fb027  lto-plugin/ChangeLog
! 50806c6aac4ef6d8e689dfe596507a3a  lto-plugin/Makefile.am
! 5d97b067df8959a09d2d9392fca6774b  lto-plugin/Makefile.in
  75fc65b35d0a47ac098f7a278d37060b  lto-plugin/aclocal.m4
  de4c999b99ec1e3d1bcb8a340bd8d5fd  lto-plugin/config.h.in
! 14b329aa831d988ba879a1652a1a1b5e  lto-plugin/configure
! a98ab06a32845d7ac64c1e578c9fa80c  lto-plugin/configure.ac
! a6f617f31fa0491e4cce1b4623dfd7d5  lto-plugin/lto-plugin.c
! d00a1ca9cd8ba450f1a1028fd3e60dc3  lto-plugin/lto-plugin.map
  dee72a6a60e99528b0d17bf3ff9a1e15  ltoptions.m4
  bc2f6032c98896249eadb56177c7d357  ltsugar.m4
  c30cd33c496505f13d9fbdb6970c7c33  ltversion.m4
  293853a13b7e218e3a4342cf85fbbf25  lt~obsolete.m4
! 1628af21f5658ed028f4cde83fdeec8c  maintainer-scripts/ChangeLog
  33c7bc2d2c55956dfac85a05d8a80eff  maintainer-scripts/README
  507e832af5f2d63b8a78eef217c807a7  maintainer-scripts/branch_changer.py
  c819510f0d438149c1518bda7b165ac4  maintainer-scripts/bugzilla-close-candidate.py
! 7bf6e11216c28982ec5170f9e098a7f7  maintainer-scripts/crontab
  1777fbf3e6a3232bd6898ce857cdf2fd  maintainer-scripts/gcc_release
  262d529ab10d5bd398f14fc1ec9fed1a  maintainer-scripts/generate_libstdcxx_web_docs
  33d97164a8610c7abf67eff7d28f47ff  maintainer-scripts/maintainer-addresses
*************** cf2baa0854f564a7785307e79f155efc  symlin
*** 108566,108572 ****
  40bb1f4ce4a60a36d1ec50d66aeed4d1  test-driver
  cb06c1be6a41d68b0a65e0c1a91752bc  ylwrap
  03bf3ba8089f4bf475ef4035cf316a47  zlib/CMakeLists.txt
! d05ebeb2d657084004f404597a7bcef4  zlib/ChangeLog
  f10e5e9394787b288e91fed29533720a  zlib/ChangeLog.gcj
  0e9a37be8e3b85cc0ccf60504064c297  zlib/ChangeLog.jit
  b7a1991f01daea3efe108a215c5514a5  zlib/FAQ
--- 115574,115580 ----
  40bb1f4ce4a60a36d1ec50d66aeed4d1  test-driver
  cb06c1be6a41d68b0a65e0c1a91752bc  ylwrap
  03bf3ba8089f4bf475ef4035cf316a47  zlib/CMakeLists.txt
! fba24ccd06f424a8c7ca6a83ec7e658b  zlib/ChangeLog
  f10e5e9394787b288e91fed29533720a  zlib/ChangeLog.gcj
  0e9a37be8e3b85cc0ccf60504064c297  zlib/ChangeLog.jit
  b7a1991f01daea3efe108a215c5514a5  zlib/FAQ
diff -Nrcpad gcc-11.3.0/Makefile.def gcc-12.1.0/Makefile.def
*** gcc-11.3.0/Makefile.def	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/Makefile.def	Fri May  6 07:30:56 2022
*************** AutoGen definitions Makefile.tpl;
*** 4,10 ****
  // Makefile.in is generated from Makefile.tpl by 'autogen Makefile.def'.
  // This file was originally written by Nathanael Nerode.
  //
! //   Copyright 2002-2019 Free Software Foundation
  //
  // This file is free software; you can redistribute it and/or modify
  // it under the terms of the GNU General Public License as published by
--- 4,10 ----
  // Makefile.in is generated from Makefile.tpl by 'autogen Makefile.def'.
  // This file was originally written by Nathanael Nerode.
  //
! //   Copyright 2002-2021 Free Software Foundation
  //
  // This file is free software; you can redistribute it and/or modify
  // it under the terms of the GNU General Public License as published by
*************** host_modules= { module= dejagnu; };
*** 42,48 ****
  host_modules= { module= etc; };
  host_modules= { module= fastjar; no_check_cross= true; };
  host_modules= { module= fixincludes; bootstrap=true;
! 		missing= TAGS; };
  host_modules= { module= flex; no_check_cross= true; };
  host_modules= { module= gas; bootstrap=true; };
  host_modules= { module= gcc; bootstrap=true; 
--- 42,49 ----
  host_modules= { module= etc; };
  host_modules= { module= fastjar; no_check_cross= true; };
  host_modules= { module= fixincludes; bootstrap=true;
! 		missing= TAGS;
! 		missing= install-dvi; };
  host_modules= { module= flex; no_check_cross= true; };
  host_modules= { module= gas; bootstrap=true; };
  host_modules= { module= gcc; bootstrap=true; 
*************** host_modules= { module= libcody; bootstr
*** 87,96 ****
  		missing= pdf;
  		missing= html;
  		missing= info;
  		missing= install-pdf;
  		missing= install-html;
! 		missing= install-info; };
! host_modules= { module= libdecnumber; bootstrap=true; };
  host_modules= { module= libgui; };
  host_modules= { module= libiberty; bootstrap=true;
  	        extra_configure_flags='@extra_host_libiberty_configure_flags@';};
--- 88,101 ----
  		missing= pdf;
  		missing= html;
  		missing= info;
+ 		missing= dvi;
  		missing= install-pdf;
  		missing= install-html;
! 		missing= install-info;
! 		missing= install-dvi;
! 		missing=TAGS; };
! host_modules= { module= libdecnumber; bootstrap=true;
! 		missing=TAGS; };
  host_modules= { module= libgui; };
  host_modules= { module= libiberty; bootstrap=true;
  	        extra_configure_flags='@extra_host_libiberty_configure_flags@';};
*************** host_modules= { module= libtermcap; no_c
*** 134,140 ****
                  missing=distclean;
                  missing=maintainer-clean; };
  host_modules= { module= utils; no_check=true; };
! host_modules= { module= c++tools; };
  host_modules= { module= gnattools; };
  host_modules= { module= lto-plugin; bootstrap=true;
  		extra_configure_flags='--enable-shared @extra_linker_plugin_flags@ @extra_linker_plugin_configure_flags@';
--- 139,146 ----
                  missing=distclean;
                  missing=maintainer-clean; };
  host_modules= { module= utils; no_check=true; };
! host_modules= { module= c++tools;
!                 missing=TAGS; };
  host_modules= { module= gnattools; };
  host_modules= { module= lto-plugin; bootstrap=true;
  		extra_configure_flags='--enable-shared @extra_linker_plugin_flags@ @extra_linker_plugin_configure_flags@';
*************** target_modules = { module= liboffloadmic
*** 160,173 ****
  		   extra_configure_flags='@extra_liboffloadmic_configure_flags@'; };
  target_modules = { module= libssp; lib_path=.libs; };
  target_modules = { module= newlib; };
! target_modules = { module= libgcc; bootstrap=true; no_check=true; };
! target_modules = { module= libbacktrace; };
  target_modules = { module= libquadmath; };
  target_modules = { module= libgfortran; };
! target_modules = { module= libobjc; };
  target_modules = { module= libgo; };
! target_modules = { module= libhsail-rt; };
! target_modules = { module= libphobos;
  		   lib_path=src/.libs; };
  target_modules = { module= libtermcap; no_check=true;
                     missing=mostlyclean;
--- 166,182 ----
  		   extra_configure_flags='@extra_liboffloadmic_configure_flags@'; };
  target_modules = { module= libssp; lib_path=.libs; };
  target_modules = { module= newlib; };
! target_modules = { module= libgcc; bootstrap=true; no_check=true;
! 		  missing=TAGS;
! 		  missing=install-dvi; };
! target_modules = { module= libbacktrace; bootstrap=true; };
  target_modules = { module= libquadmath; };
  target_modules = { module= libgfortran; };
! target_modules = { module= libobjc;
! 		  missing=TAGS;
! 		  missing=install-dvi; };
  target_modules = { module= libgo; };
! target_modules = { module= libphobos; bootstrap=true;
  		   lib_path=src/.libs; };
  target_modules = { module= libtermcap; no_check=true;
                     missing=mostlyclean;
*************** target_modules = { module= libtermcap; n
*** 177,188 ****
  target_modules = { module= winsup; };
  target_modules = { module= libgloss; no_check=true; };
  target_modules = { module= libffi; no_install=true; };
! target_modules = { module= zlib; };
  target_modules = { module= rda; };
  target_modules = { module= libada; };
  target_modules = { module= libgomp; bootstrap= true; lib_path=.libs; };
  target_modules = { module= libitm; lib_path=.libs; };
! target_modules = { module= libatomic; lib_path=.libs; };
  
  // These are (some of) the make targets to be done in each subdirectory.
  // Not all; these are the ones which don't have special options.
--- 186,197 ----
  target_modules = { module= winsup; };
  target_modules = { module= libgloss; no_check=true; };
  target_modules = { module= libffi; no_install=true; };
! target_modules = { module= zlib; bootstrap=true; };
  target_modules = { module= rda; };
  target_modules = { module= libada; };
  target_modules = { module= libgomp; bootstrap= true; lib_path=.libs; };
  target_modules = { module= libitm; lib_path=.libs; };
! target_modules = { module= libatomic; bootstrap=true; lib_path=.libs; };
  
  // These are (some of) the make targets to be done in each subdirectory.
  // Not all; these are the ones which don't have special options.
*************** recursive_targets = { make_target= TAGS;
*** 201,206 ****
--- 210,218 ----
  recursive_targets = { make_target= install-info; 
                        depend=configure;
                        depend=info; };
+ recursive_targets = { make_target= install-dvi;
+                       depend=configure;
+                       depend=dvi; };
  recursive_targets = { make_target= install-pdf; 
                        depend=configure;
                        depend=pdf; };
*************** dependencies = { module=all-gdb; on=all-
*** 424,429 ****
--- 436,442 ----
  dependencies = { module=all-gdb; on=all-libdecnumber; };
  dependencies = { module=all-gdb; on=all-libtermcap; };
  dependencies = { module=all-gdb; on=all-libctf; };
+ dependencies = { module=all-gdb; on=all-libbacktrace; };
  
  // Host modules specific to gdbserver.
  dependencies = { module=configure-gdbserver; on=all-gnulib; };
*************** dependencies = { module=all-ld; on=all-l
*** 471,477 ****
--- 484,499 ----
  dependencies = { module=install-binutils; on=install-opcodes; };
  dependencies = { module=install-strip-binutils; on=install-strip-opcodes; };
  
+ // Likewise for ld, libctf, and bfd.
+ dependencies = { module=install-libctf; on=install-bfd; };
+ dependencies = { module=install-ld; on=install-bfd; };
+ dependencies = { module=install-ld; on=install-libctf; };
+ dependencies = { module=install-strip-libctf; on=install-strip-bfd; };
+ dependencies = { module=install-strip-ld; on=install-strip-bfd; };
+ dependencies = { module=install-strip-ld; on=install-strip-libctf; };
+ 
  // libopcodes depends on libbfd
+ dependencies = { module=configure-opcodes; on=configure-bfd; hard=true; };
  dependencies = { module=install-opcodes; on=install-bfd; };
  dependencies = { module=install-strip-opcodes; on=install-strip-bfd; };
  
*************** dependencies = { module=install-strip-si
*** 542,553 ****
  dependencies = { module=install-sid; on=install-tk; };
  dependencies = { module=install-strip-sid; on=install-strip-tk; };
  
  dependencies = { module=configure-sim; on=configure-intl; };
  dependencies = { module=all-sim; on=all-intl; };
  dependencies = { module=all-sim; on=all-libiberty; };
  dependencies = { module=all-sim; on=all-bfd; };
  dependencies = { module=all-sim; on=all-opcodes; };
! dependencies = { module=all-sim; on=all-readline; };
  
  // Other host modules.
  dependencies = { module=all-fastjar; on=all-zlib; };
--- 564,576 ----
  dependencies = { module=install-sid; on=install-tk; };
  dependencies = { module=install-strip-sid; on=install-strip-tk; };
  
+ dependencies = { module=configure-sim; on=all-gnulib; };
  dependencies = { module=configure-sim; on=configure-intl; };
  dependencies = { module=all-sim; on=all-intl; };
  dependencies = { module=all-sim; on=all-libiberty; };
  dependencies = { module=all-sim; on=all-bfd; };
  dependencies = { module=all-sim; on=all-opcodes; };
! dependencies = { module=configure-sim; on=all-readline; };
  
  // Other host modules.
  dependencies = { module=all-fastjar; on=all-zlib; };
*************** dependencies = { module=configure-libctf
*** 563,568 ****
--- 586,597 ----
  dependencies = { module=configure-libctf; on=all-libiconv; };
  dependencies = { module=check-libctf; on=all-ld; };
  
+ // The Makefiles in gdb and gdbserver pull in a file that configure
+ // generates in the gnulib directory, so distclean gnulib only after
+ // gdb and gdbserver.
+ dependencies = { module=distclean-gnulib; on=distclean-gdb; };
+ dependencies = { module=distclean-gnulib; on=distclean-gdbserver; };
+ 
  // Warning, these are not well tested.
  dependencies = { module=all-bison; on=all-intl; };
  dependencies = { module=all-bison; on=all-build-texinfo; };
*************** languages = { language=obj-c++;	gcc-chec
*** 652,661 ****
  languages = { language=go;	gcc-check-target=check-go;
  				lib-check-target=check-target-libgo;
  				lib-check-target=check-gotools; };
- languages = { language=brig;	gcc-check-target=check-brig;
- 				lib-check-target=check-target-libhsail-rt; };
  languages = { language=d;	gcc-check-target=check-d;
  				lib-check-target=check-target-libphobos; };
  
  // Toplevel bootstrap
  bootstrap_stage = { id=1 ; };
--- 681,689 ----
  languages = { language=go;	gcc-check-target=check-go;
  				lib-check-target=check-target-libgo;
  				lib-check-target=check-gotools; };
  languages = { language=d;	gcc-check-target=check-d;
  				lib-check-target=check-target-libphobos; };
+ languages = { language=jit;	gcc-check-target=check-jit; };
  
  // Toplevel bootstrap
  bootstrap_stage = { id=1 ; };
diff -Nrcpad gcc-11.3.0/Makefile.in gcc-12.1.0/Makefile.in
*** gcc-11.3.0/Makefile.in	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/Makefile.in	Fri May  6 07:31:19 2022
*************** BUILD_EXPORTS = \
*** 154,159 ****
--- 154,161 ----
  	CC="$(CC_FOR_BUILD)"; export CC; \
  	CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
  	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ 	CPP="$(CPP_FOR_BUILD)"; export CPP; \
+ 	CPPFLAGS="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS; \
  	CXX="$(CXX_FOR_BUILD)"; export CXX; \
  	CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
  	GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
*************** HOST_EXPORTS = \
*** 202,207 ****
--- 204,211 ----
  	AR="$(AR)"; export AR; \
  	AS="$(AS)"; export AS; \
  	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
+ 	CPP_FOR_BUILD="$(CPP_FOR_BUILD)"; export CPP_FOR_BUILD; \
+ 	CPPFLAGS_FOR_BUILD="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS_FOR_BUILD; \
  	CXX_FOR_BUILD="$(CXX_FOR_BUILD)"; export CXX_FOR_BUILD; \
  	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
  	DSYMUTIL="$(DSYMUTIL)"; export DSYMUTIL; \
*************** POSTSTAGE1_HOST_EXPORTS = \
*** 269,279 ****
  	$(POSTSTAGE1_CXX_EXPORT) \
  	$(LTO_EXPORTS) \
  	GDC="$$r/$(HOST_SUBDIR)/prev-gcc/gdc$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/ \
! 	  -B$(build_tooldir)/bin/ $(GDC_FLAGS_FOR_TARGET) \
  	  -B$$r/prev-$(TARGET_SUBDIR)/libphobos/src \
  	  -I$$r/prev-$(TARGET_SUBDIR)/libphobos/libdruntime -I$$s/libphobos/libdruntime \
  	  -L$$r/prev-$(TARGET_SUBDIR)/libphobos/src/.libs \
! 	  -L$$r/prev-$(TARGET_SUBDIR)/libphobos/libdruntime/.libs"; \
  	export GDC; \
  	GDC_FOR_BUILD="$$GDC"; export GDC_FOR_BUILD; \
  	GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \
--- 273,286 ----
  	$(POSTSTAGE1_CXX_EXPORT) \
  	$(LTO_EXPORTS) \
  	GDC="$$r/$(HOST_SUBDIR)/prev-gcc/gdc$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/ \
! 	  -B$(build_tooldir)/bin/ $(GDCFLAGS_FOR_TARGET) \
! 	  -B$$r/prev-$(TARGET_SUBDIR)/libphobos/libdruntime/gcc \
  	  -B$$r/prev-$(TARGET_SUBDIR)/libphobos/src \
+ 	  -B$$r/prev-$(TARGET_SUBDIR)/libphobos/src/.libs \
  	  -I$$r/prev-$(TARGET_SUBDIR)/libphobos/libdruntime -I$$s/libphobos/libdruntime \
  	  -L$$r/prev-$(TARGET_SUBDIR)/libphobos/src/.libs \
! 	  -B$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \
! 	  -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs"; \
  	export GDC; \
  	GDC_FOR_BUILD="$$GDC"; export GDC_FOR_BUILD; \
  	GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \
*************** AR_FOR_BUILD = @AR_FOR_BUILD@
*** 360,365 ****
--- 367,374 ----
  AS_FOR_BUILD = @AS_FOR_BUILD@
  CC_FOR_BUILD = @CC_FOR_BUILD@
  CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+ CPP_FOR_BUILD = @CPP_FOR_BUILD@
+ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
  CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
  CXX_FOR_BUILD = @CXX_FOR_BUILD@
  DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
*************** LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-
*** 438,443 ****
--- 447,495 ----
  GOCFLAGS = $(CFLAGS)
  GDCFLAGS = $(CFLAGS)
  
+ # Pass additional PGO and LTO compiler options to the PGO build.
+ BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS)
+ override CFLAGS += $(BUILD_CFLAGS)
+ override CXXFLAGS += $(BUILD_CFLAGS)
+ 
+ # Additional PGO and LTO compiler options to generate profiling data
+ # for the PGO build.
+ PGO_BUILD_GEN_FLAGS_TO_PASS = \
+ 	PGO_BUILD_CFLAGS="@PGO_BUILD_GEN_CFLAGS@" \
+ 	PGO_BUILD_LTO_CFLAGS="@PGO_BUILD_LTO_CFLAGS@"
+ 
+ # NB: Filter out any compiler options which may fail PGO training runs.
+ PGO_BUILD_TRAINING_CFLAGS:= \
+ 	$(filter-out -Werror=%,$(CFLAGS))
+ PGO_BUILD_TRAINING_CXXFLAGS:=\
+ 	$(filter-out -Werror=%,$(CXXFLAGS))
+ PGO_BUILD_TRAINING_CFLAGS:= \
+ 	$(filter-out -Wall,$(PGO_BUILD_TRAINING_CFLAGS))
+ PGO_BUILD_TRAINING_CXXFLAGS:= \
+ 	$(filter-out -Wall,$(PGO_BUILD_TRAINING_CXXFLAGS))
+ PGO_BUILD_TRAINING_CFLAGS:= \
+ 	$(filter-out -specs=%,$(PGO_BUILD_TRAINING_CFLAGS))
+ PGO_BUILD_TRAINING_CXXFLAGS:= \
+ 	$(filter-out -specs=%,$(PGO_BUILD_TRAINING_CXXFLAGS))
+ PGO_BUILD_TRAINING_FLAGS_TO_PASS = \
+ 	PGO_BUILD_TRAINING=yes \
+ 	CFLAGS_FOR_TARGET="$(PGO_BUILD_TRAINING_CFLAGS)" \
+ 	CXXFLAGS_FOR_TARGET="$(PGO_BUILD_TRAINING_CXXFLAGS)"
+ 
+ # Ignore "make check" errors in PGO training runs.
+ PGO_BUILD_TRAINING_MFLAGS = -i
+ 
+ # Additional PGO and LTO compiler options to use profiling data for the
+ # PGO build.
+ PGO_BUILD_USE_FLAGS_TO_PASS = \
+ 	PGO_BUILD_CFLAGS="@PGO_BUILD_USE_CFLAGS@" \
+ 	PGO_BUILD_LTO_CFLAGS="@PGO_BUILD_LTO_CFLAGS@"
+ 
+ # PGO training targets for the PGO build.  FIXME: Add gold tests to
+ # training.
+ PGO-TRAINING-TARGETS = binutils gas gdb ld sim
+ PGO_BUILD_TRAINING = $(addprefix maybe-check-,$(PGO-TRAINING-TARGETS))
+ 
  CREATE_GCOV = create_gcov
  
  TFLAGS =
*************** STAGE1_CONFIGURE_FLAGS = --disable-inter
*** 558,563 ****
--- 610,620 ----
  	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \
  	  --disable-build-format-warnings
  
+ @if target-libphobos-bootstrap
+ STAGE1_CONFIGURE_FLAGS += --with-libphobos-druntime-only
+ STAGE2_CONFIGURE_FLAGS += --with-libphobos-druntime-only
+ @endif target-libphobos-bootstrap
+ 
  # When using the slow stage1 compiler disable IL verification and forcefully
  # enable it when using the stage2 compiler instead.  As we later compare
  # stage2 and stage3 we are merely avoid doing redundant work, plus we apply
*************** configure-target:  \
*** 1071,1077 ****
      maybe-configure-target-libgfortran \
      maybe-configure-target-libobjc \
      maybe-configure-target-libgo \
-     maybe-configure-target-libhsail-rt \
      maybe-configure-target-libphobos \
      maybe-configure-target-libtermcap \
      maybe-configure-target-winsup \
--- 1128,1133 ----
*************** configure-target:  \
*** 1086,1091 ****
--- 1142,1153 ----
  
  # The target built for a native non-bootstrap build.
  .PHONY: all
+ 
+ # --enable-pgo-build enables the PGO build.
+ # 1. First build with -fprofile-generate.
+ # 2. Use "make maybe-check-*" to generate profiling data.
+ # 3. Use "make clean" to remove the previous build.
+ # 4. Rebuild with -fprofile-use.
  all:
  @if gcc-bootstrap
  	[ -f stage_final ] || echo stage3 > stage_final
*************** all:
*** 1094,1100 ****
  	$(MAKE) $(RECURSE_FLAGS_TO_PASS) `cat stage_final`-bubble
  @endif gcc-bootstrap
  	@: $(MAKE); $(unstage)
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  @if gcc-bootstrap
  	if [ -f stage_last ]; then \
--- 1156,1162 ----
  	$(MAKE) $(RECURSE_FLAGS_TO_PASS) `cat stage_final`-bubble
  @endif gcc-bootstrap
  	@: $(MAKE); $(unstage)
! 	+@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  @if gcc-bootstrap
  	if [ -f stage_last ]; then \
*************** all:
*** 1102,1108 ****
  	  $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \
  	else \
  @endif gcc-bootstrap
! 	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target \
  @if gcc-bootstrap
  	    ; \
  	fi \
--- 1164,1180 ----
  	  $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \
  	else \
  @endif gcc-bootstrap
! 	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) \
! 		$(PGO_BUILD_GEN_FLAGS_TO_PASS) all-host all-target \
! @if pgo-build
! 	&& $(MAKE) $(RECURSE_FLAGS_TO_PASS) \
! 		$(PGO_BUILD_TRAINING_MFLAGS) \
! 		$(PGO_BUILD_TRAINING_FLAGS_TO_PASS) \
! 		$(PGO_BUILD_TRAINING) \
! 	&& $(MAKE) $(RECURSE_FLAGS_TO_PASS) clean \
! 	&& $(MAKE) $(RECURSE_FLAGS_TO_PASS) \
! 		$(PGO_BUILD_USE_FLAGS_TO_PASS) all-host all-target \
! @endif pgo-build
  @if gcc-bootstrap
  	    ; \
  	fi \
*************** all-target: maybe-all-target-newlib
*** 1239,1263 ****
  @if target-libgcc-no-bootstrap
  all-target: maybe-all-target-libgcc
  @endif target-libgcc-no-bootstrap
  all-target: maybe-all-target-libbacktrace
  all-target: maybe-all-target-libquadmath
  all-target: maybe-all-target-libgfortran
  all-target: maybe-all-target-libobjc
  all-target: maybe-all-target-libgo
! all-target: maybe-all-target-libhsail-rt
  all-target: maybe-all-target-libphobos
  all-target: maybe-all-target-libtermcap
  all-target: maybe-all-target-winsup
  all-target: maybe-all-target-libgloss
  all-target: maybe-all-target-libffi
  all-target: maybe-all-target-zlib
  all-target: maybe-all-target-rda
  all-target: maybe-all-target-libada
  @if target-libgomp-no-bootstrap
  all-target: maybe-all-target-libgomp
  @endif target-libgomp-no-bootstrap
  all-target: maybe-all-target-libitm
  all-target: maybe-all-target-libatomic
  
  # Do a target for all the subdirectories.  A ``make do-X'' will do a
  # ``make X'' in all subdirectories (because, in general, there is a
--- 1311,1342 ----
  @if target-libgcc-no-bootstrap
  all-target: maybe-all-target-libgcc
  @endif target-libgcc-no-bootstrap
+ @if target-libbacktrace-no-bootstrap
  all-target: maybe-all-target-libbacktrace
+ @endif target-libbacktrace-no-bootstrap
  all-target: maybe-all-target-libquadmath
  all-target: maybe-all-target-libgfortran
  all-target: maybe-all-target-libobjc
  all-target: maybe-all-target-libgo
! @if target-libphobos-no-bootstrap
  all-target: maybe-all-target-libphobos
+ @endif target-libphobos-no-bootstrap
  all-target: maybe-all-target-libtermcap
  all-target: maybe-all-target-winsup
  all-target: maybe-all-target-libgloss
  all-target: maybe-all-target-libffi
+ @if target-zlib-no-bootstrap
  all-target: maybe-all-target-zlib
+ @endif target-zlib-no-bootstrap
  all-target: maybe-all-target-rda
  all-target: maybe-all-target-libada
  @if target-libgomp-no-bootstrap
  all-target: maybe-all-target-libgomp
  @endif target-libgomp-no-bootstrap
  all-target: maybe-all-target-libitm
+ @if target-libatomic-no-bootstrap
  all-target: maybe-all-target-libatomic
+ @endif target-libatomic-no-bootstrap
  
  # Do a target for all the subdirectories.  A ``make do-X'' will do a
  # ``make X'' in all subdirectories (because, in general, there is a
*************** info-target: maybe-info-target-libquadma
*** 1342,1348 ****
  info-target: maybe-info-target-libgfortran
  info-target: maybe-info-target-libobjc
  info-target: maybe-info-target-libgo
- info-target: maybe-info-target-libhsail-rt
  info-target: maybe-info-target-libphobos
  info-target: maybe-info-target-libtermcap
  info-target: maybe-info-target-winsup
--- 1421,1426 ----
*************** dvi-target: maybe-dvi-target-libquadmath
*** 1433,1439 ****
  dvi-target: maybe-dvi-target-libgfortran
  dvi-target: maybe-dvi-target-libobjc
  dvi-target: maybe-dvi-target-libgo
- dvi-target: maybe-dvi-target-libhsail-rt
  dvi-target: maybe-dvi-target-libphobos
  dvi-target: maybe-dvi-target-libtermcap
  dvi-target: maybe-dvi-target-winsup
--- 1511,1516 ----
*************** pdf-target: maybe-pdf-target-libquadmath
*** 1524,1530 ****
  pdf-target: maybe-pdf-target-libgfortran
  pdf-target: maybe-pdf-target-libobjc
  pdf-target: maybe-pdf-target-libgo
- pdf-target: maybe-pdf-target-libhsail-rt
  pdf-target: maybe-pdf-target-libphobos
  pdf-target: maybe-pdf-target-libtermcap
  pdf-target: maybe-pdf-target-winsup
--- 1601,1606 ----
*************** html-target: maybe-html-target-libquadma
*** 1615,1621 ****
  html-target: maybe-html-target-libgfortran
  html-target: maybe-html-target-libobjc
  html-target: maybe-html-target-libgo
- html-target: maybe-html-target-libhsail-rt
  html-target: maybe-html-target-libphobos
  html-target: maybe-html-target-libtermcap
  html-target: maybe-html-target-winsup
--- 1691,1696 ----
*************** TAGS-target: maybe-TAGS-target-libquadma
*** 1706,1712 ****
  TAGS-target: maybe-TAGS-target-libgfortran
  TAGS-target: maybe-TAGS-target-libobjc
  TAGS-target: maybe-TAGS-target-libgo
- TAGS-target: maybe-TAGS-target-libhsail-rt
  TAGS-target: maybe-TAGS-target-libphobos
  TAGS-target: maybe-TAGS-target-libtermcap
  TAGS-target: maybe-TAGS-target-winsup
--- 1781,1786 ----
*************** install-info-target: maybe-install-info-
*** 1797,1803 ****
  install-info-target: maybe-install-info-target-libgfortran
  install-info-target: maybe-install-info-target-libobjc
  install-info-target: maybe-install-info-target-libgo
- install-info-target: maybe-install-info-target-libhsail-rt
  install-info-target: maybe-install-info-target-libphobos
  install-info-target: maybe-install-info-target-libtermcap
  install-info-target: maybe-install-info-target-winsup
--- 1871,1876 ----
*************** install-info-target: maybe-install-info-
*** 1810,1815 ****
--- 1883,1978 ----
  install-info-target: maybe-install-info-target-libitm
  install-info-target: maybe-install-info-target-libatomic
  
+ .PHONY: do-install-dvi
+ do-install-dvi:
+ 	@: $(MAKE); $(unstage)
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(MAKE) $(RECURSE_FLAGS_TO_PASS) install-dvi-host \
+ 	  install-dvi-target
+ 
+ 
+ .PHONY: install-dvi-host
+ 
+ install-dvi-host: maybe-install-dvi-bfd
+ install-dvi-host: maybe-install-dvi-opcodes
+ install-dvi-host: maybe-install-dvi-binutils
+ install-dvi-host: maybe-install-dvi-bison
+ install-dvi-host: maybe-install-dvi-cgen
+ install-dvi-host: maybe-install-dvi-dejagnu
+ install-dvi-host: maybe-install-dvi-etc
+ install-dvi-host: maybe-install-dvi-fastjar
+ install-dvi-host: maybe-install-dvi-fixincludes
+ install-dvi-host: maybe-install-dvi-flex
+ install-dvi-host: maybe-install-dvi-gas
+ install-dvi-host: maybe-install-dvi-gcc
+ install-dvi-host: maybe-install-dvi-gmp
+ install-dvi-host: maybe-install-dvi-mpfr
+ install-dvi-host: maybe-install-dvi-mpc
+ install-dvi-host: maybe-install-dvi-isl
+ install-dvi-host: maybe-install-dvi-libelf
+ install-dvi-host: maybe-install-dvi-gold
+ install-dvi-host: maybe-install-dvi-gprof
+ install-dvi-host: maybe-install-dvi-intl
+ install-dvi-host: maybe-install-dvi-tcl
+ install-dvi-host: maybe-install-dvi-itcl
+ install-dvi-host: maybe-install-dvi-ld
+ install-dvi-host: maybe-install-dvi-libbacktrace
+ install-dvi-host: maybe-install-dvi-libcpp
+ install-dvi-host: maybe-install-dvi-libcody
+ install-dvi-host: maybe-install-dvi-libdecnumber
+ install-dvi-host: maybe-install-dvi-libgui
+ install-dvi-host: maybe-install-dvi-libiberty
+ install-dvi-host: maybe-install-dvi-libiberty-linker-plugin
+ install-dvi-host: maybe-install-dvi-libiconv
+ install-dvi-host: maybe-install-dvi-m4
+ install-dvi-host: maybe-install-dvi-readline
+ install-dvi-host: maybe-install-dvi-sid
+ install-dvi-host: maybe-install-dvi-sim
+ install-dvi-host: maybe-install-dvi-texinfo
+ install-dvi-host: maybe-install-dvi-zlib
+ install-dvi-host: maybe-install-dvi-gnulib
+ install-dvi-host: maybe-install-dvi-gdbsupport
+ install-dvi-host: maybe-install-dvi-gdbserver
+ install-dvi-host: maybe-install-dvi-gdb
+ install-dvi-host: maybe-install-dvi-expect
+ install-dvi-host: maybe-install-dvi-guile
+ install-dvi-host: maybe-install-dvi-tk
+ install-dvi-host: maybe-install-dvi-libtermcap
+ install-dvi-host: maybe-install-dvi-utils
+ install-dvi-host: maybe-install-dvi-c++tools
+ install-dvi-host: maybe-install-dvi-gnattools
+ install-dvi-host: maybe-install-dvi-lto-plugin
+ install-dvi-host: maybe-install-dvi-libcc1
+ install-dvi-host: maybe-install-dvi-gotools
+ install-dvi-host: maybe-install-dvi-libctf
+ 
+ .PHONY: install-dvi-target
+ 
+ install-dvi-target: maybe-install-dvi-target-libstdc++-v3
+ install-dvi-target: maybe-install-dvi-target-libsanitizer
+ install-dvi-target: maybe-install-dvi-target-libvtv
+ install-dvi-target: maybe-install-dvi-target-liboffloadmic
+ install-dvi-target: maybe-install-dvi-target-libssp
+ install-dvi-target: maybe-install-dvi-target-newlib
+ install-dvi-target: maybe-install-dvi-target-libgcc
+ install-dvi-target: maybe-install-dvi-target-libbacktrace
+ install-dvi-target: maybe-install-dvi-target-libquadmath
+ install-dvi-target: maybe-install-dvi-target-libgfortran
+ install-dvi-target: maybe-install-dvi-target-libobjc
+ install-dvi-target: maybe-install-dvi-target-libgo
+ install-dvi-target: maybe-install-dvi-target-libphobos
+ install-dvi-target: maybe-install-dvi-target-libtermcap
+ install-dvi-target: maybe-install-dvi-target-winsup
+ install-dvi-target: maybe-install-dvi-target-libgloss
+ install-dvi-target: maybe-install-dvi-target-libffi
+ install-dvi-target: maybe-install-dvi-target-zlib
+ install-dvi-target: maybe-install-dvi-target-rda
+ install-dvi-target: maybe-install-dvi-target-libada
+ install-dvi-target: maybe-install-dvi-target-libgomp
+ install-dvi-target: maybe-install-dvi-target-libitm
+ install-dvi-target: maybe-install-dvi-target-libatomic
+ 
  .PHONY: do-install-pdf
  do-install-pdf:
  	@: $(MAKE); $(unstage)
*************** install-pdf-target: maybe-install-pdf-ta
*** 1888,1894 ****
  install-pdf-target: maybe-install-pdf-target-libgfortran
  install-pdf-target: maybe-install-pdf-target-libobjc
  install-pdf-target: maybe-install-pdf-target-libgo
- install-pdf-target: maybe-install-pdf-target-libhsail-rt
  install-pdf-target: maybe-install-pdf-target-libphobos
  install-pdf-target: maybe-install-pdf-target-libtermcap
  install-pdf-target: maybe-install-pdf-target-winsup
--- 2051,2056 ----
*************** install-html-target: maybe-install-html-
*** 1979,1985 ****
  install-html-target: maybe-install-html-target-libgfortran
  install-html-target: maybe-install-html-target-libobjc
  install-html-target: maybe-install-html-target-libgo
- install-html-target: maybe-install-html-target-libhsail-rt
  install-html-target: maybe-install-html-target-libphobos
  install-html-target: maybe-install-html-target-libtermcap
  install-html-target: maybe-install-html-target-winsup
--- 2141,2146 ----
*************** installcheck-target: maybe-installcheck-
*** 2070,2076 ****
  installcheck-target: maybe-installcheck-target-libgfortran
  installcheck-target: maybe-installcheck-target-libobjc
  installcheck-target: maybe-installcheck-target-libgo
- installcheck-target: maybe-installcheck-target-libhsail-rt
  installcheck-target: maybe-installcheck-target-libphobos
  installcheck-target: maybe-installcheck-target-libtermcap
  installcheck-target: maybe-installcheck-target-winsup
--- 2231,2236 ----
*************** mostlyclean-target: maybe-mostlyclean-ta
*** 2161,2167 ****
  mostlyclean-target: maybe-mostlyclean-target-libgfortran
  mostlyclean-target: maybe-mostlyclean-target-libobjc
  mostlyclean-target: maybe-mostlyclean-target-libgo
- mostlyclean-target: maybe-mostlyclean-target-libhsail-rt
  mostlyclean-target: maybe-mostlyclean-target-libphobos
  mostlyclean-target: maybe-mostlyclean-target-libtermcap
  mostlyclean-target: maybe-mostlyclean-target-winsup
--- 2321,2326 ----
*************** clean-target: maybe-clean-target-libquad
*** 2252,2258 ****
  clean-target: maybe-clean-target-libgfortran
  clean-target: maybe-clean-target-libobjc
  clean-target: maybe-clean-target-libgo
- clean-target: maybe-clean-target-libhsail-rt
  clean-target: maybe-clean-target-libphobos
  clean-target: maybe-clean-target-libtermcap
  clean-target: maybe-clean-target-winsup
--- 2411,2416 ----
*************** distclean-target: maybe-distclean-target
*** 2343,2349 ****
  distclean-target: maybe-distclean-target-libgfortran
  distclean-target: maybe-distclean-target-libobjc
  distclean-target: maybe-distclean-target-libgo
- distclean-target: maybe-distclean-target-libhsail-rt
  distclean-target: maybe-distclean-target-libphobos
  distclean-target: maybe-distclean-target-libtermcap
  distclean-target: maybe-distclean-target-winsup
--- 2501,2506 ----
*************** maintainer-clean-target: maybe-maintaine
*** 2434,2440 ****
  maintainer-clean-target: maybe-maintainer-clean-target-libgfortran
  maintainer-clean-target: maybe-maintainer-clean-target-libobjc
  maintainer-clean-target: maybe-maintainer-clean-target-libgo
- maintainer-clean-target: maybe-maintainer-clean-target-libhsail-rt
  maintainer-clean-target: maybe-maintainer-clean-target-libphobos
  maintainer-clean-target: maybe-maintainer-clean-target-libtermcap
  maintainer-clean-target: maybe-maintainer-clean-target-winsup
--- 2591,2596 ----
*************** maintainer-clean-target: maybe-maintaine
*** 2451,2457 ****
  # Here are the targets which correspond to the do-X targets.
  
  .PHONY: info installcheck dvi pdf html
! .PHONY: install-info install-pdf install-html
  .PHONY: clean distclean mostlyclean maintainer-clean realclean
  .PHONY: local-clean local-distclean local-maintainer-clean
  info: do-info
--- 2607,2613 ----
  # Here are the targets which correspond to the do-X targets.
  
  .PHONY: info installcheck dvi pdf html
! .PHONY: install-info install-dvi install-pdf install-html
  .PHONY: clean distclean mostlyclean maintainer-clean realclean
  .PHONY: local-clean local-distclean local-maintainer-clean
  info: do-info
*************** install-info: do-install-info dir.info
*** 2470,2475 ****
--- 2626,2633 ----
  	  $(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info; \
  	else true; fi
  
+ install-dvi: do-install-dvi
+ 
  install-pdf: do-install-pdf
  
  install-html: do-install-html
*************** check-target:  \
*** 2581,2587 ****
      maybe-check-target-libgfortran \
      maybe-check-target-libobjc \
      maybe-check-target-libgo \
-     maybe-check-target-libhsail-rt \
      maybe-check-target-libphobos \
      maybe-check-target-libtermcap \
      maybe-check-target-winsup \
--- 2739,2744 ----
*************** install-target:  \
*** 2774,2780 ****
      maybe-install-target-libgfortran \
      maybe-install-target-libobjc \
      maybe-install-target-libgo \
-     maybe-install-target-libhsail-rt \
      maybe-install-target-libphobos \
      maybe-install-target-libtermcap \
      maybe-install-target-winsup \
--- 2931,2936 ----
*************** install-strip-target:  \
*** 2885,2891 ****
      maybe-install-strip-target-libgfortran \
      maybe-install-strip-target-libobjc \
      maybe-install-strip-target-libgo \
-     maybe-install-strip-target-libhsail-rt \
      maybe-install-strip-target-libphobos \
      maybe-install-strip-target-libtermcap \
      maybe-install-strip-target-winsup \
--- 3041,3046 ----
*************** install-info-bfd: \
*** 4285,4290 ****
--- 4440,4471 ----
  
  @endif bfd
  
+ .PHONY: maybe-install-dvi-bfd install-dvi-bfd
+ maybe-install-dvi-bfd:
+ @if bfd
+ maybe-install-dvi-bfd: install-dvi-bfd
+ 
+ install-dvi-bfd: \
+     configure-bfd \
+     dvi-bfd 
+ 	@[ -f ./bfd/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in bfd"; \
+ 	(cd $(HOST_SUBDIR)/bfd && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif bfd
+ 
  .PHONY: maybe-install-pdf-bfd install-pdf-bfd
  maybe-install-pdf-bfd:
  @if bfd
*************** install-info-opcodes: \
*** 5399,5404 ****
--- 5580,5611 ----
  
  @endif opcodes
  
+ .PHONY: maybe-install-dvi-opcodes install-dvi-opcodes
+ maybe-install-dvi-opcodes:
+ @if opcodes
+ maybe-install-dvi-opcodes: install-dvi-opcodes
+ 
+ install-dvi-opcodes: \
+     configure-opcodes \
+     dvi-opcodes 
+ 	@[ -f ./opcodes/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in opcodes"; \
+ 	(cd $(HOST_SUBDIR)/opcodes && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif opcodes
+ 
  .PHONY: maybe-install-pdf-opcodes install-pdf-opcodes
  maybe-install-pdf-opcodes:
  @if opcodes
*************** install-info-binutils: \
*** 6513,6518 ****
--- 6720,6751 ----
  
  @endif binutils
  
+ .PHONY: maybe-install-dvi-binutils install-dvi-binutils
+ maybe-install-dvi-binutils:
+ @if binutils
+ maybe-install-dvi-binutils: install-dvi-binutils
+ 
+ install-dvi-binutils: \
+     configure-binutils \
+     dvi-binutils 
+ 	@[ -f ./binutils/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in binutils"; \
+ 	(cd $(HOST_SUBDIR)/binutils && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif binutils
+ 
  .PHONY: maybe-install-pdf-binutils install-pdf-binutils
  maybe-install-pdf-binutils:
  @if binutils
*************** install-info-bison: \
*** 6950,6955 ****
--- 7183,7215 ----
  
  @endif bison
  
+ .PHONY: maybe-install-dvi-bison install-dvi-bison
+ maybe-install-dvi-bison:
+ @if bison
+ maybe-install-dvi-bison: install-dvi-bison
+ 
+ install-dvi-bison: \
+     configure-bison \
+     dvi-bison 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./bison/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in bison"; \
+ 	(cd $(HOST_SUBDIR)/bison && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif bison
+ 
  .PHONY: maybe-install-pdf-bison install-pdf-bison
  maybe-install-pdf-bison:
  @if bison
*************** install-info-cgen: \
*** 7391,7396 ****
--- 7651,7683 ----
  
  @endif cgen
  
+ .PHONY: maybe-install-dvi-cgen install-dvi-cgen
+ maybe-install-dvi-cgen:
+ @if cgen
+ maybe-install-dvi-cgen: install-dvi-cgen
+ 
+ install-dvi-cgen: \
+     configure-cgen \
+     dvi-cgen 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./cgen/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in cgen"; \
+ 	(cd $(HOST_SUBDIR)/cgen && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif cgen
+ 
  .PHONY: maybe-install-pdf-cgen install-pdf-cgen
  maybe-install-pdf-cgen:
  @if cgen
*************** install-info-dejagnu: \
*** 7832,7837 ****
--- 8119,8151 ----
  
  @endif dejagnu
  
+ .PHONY: maybe-install-dvi-dejagnu install-dvi-dejagnu
+ maybe-install-dvi-dejagnu:
+ @if dejagnu
+ maybe-install-dvi-dejagnu: install-dvi-dejagnu
+ 
+ install-dvi-dejagnu: \
+     configure-dejagnu \
+     dvi-dejagnu 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./dejagnu/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in dejagnu"; \
+ 	(cd $(HOST_SUBDIR)/dejagnu && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif dejagnu
+ 
  .PHONY: maybe-install-pdf-dejagnu install-pdf-dejagnu
  maybe-install-pdf-dejagnu:
  @if dejagnu
*************** install-info-etc: \
*** 8273,8278 ****
--- 8587,8619 ----
  
  @endif etc
  
+ .PHONY: maybe-install-dvi-etc install-dvi-etc
+ maybe-install-dvi-etc:
+ @if etc
+ maybe-install-dvi-etc: install-dvi-etc
+ 
+ install-dvi-etc: \
+     configure-etc \
+     dvi-etc 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./etc/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in etc"; \
+ 	(cd $(HOST_SUBDIR)/etc && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif etc
+ 
  .PHONY: maybe-install-pdf-etc install-pdf-etc
  maybe-install-pdf-etc:
  @if etc
*************** install-info-fastjar: \
*** 8717,8722 ****
--- 9058,9090 ----
  
  @endif fastjar
  
+ .PHONY: maybe-install-dvi-fastjar install-dvi-fastjar
+ maybe-install-dvi-fastjar:
+ @if fastjar
+ maybe-install-dvi-fastjar: install-dvi-fastjar
+ 
+ install-dvi-fastjar: \
+     configure-fastjar \
+     dvi-fastjar 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./fastjar/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in fastjar"; \
+ 	(cd $(HOST_SUBDIR)/fastjar && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif fastjar
+ 
  .PHONY: maybe-install-pdf-fastjar install-pdf-fastjar
  maybe-install-pdf-fastjar:
  @if fastjar
*************** install-info-fixincludes: \
*** 9823,9828 ****
--- 10191,10206 ----
  
  @endif fixincludes
  
+ .PHONY: maybe-install-dvi-fixincludes install-dvi-fixincludes
+ maybe-install-dvi-fixincludes:
+ @if fixincludes
+ maybe-install-dvi-fixincludes: install-dvi-fixincludes
+ 
+ # fixincludes doesn't support install-dvi.
+ install-dvi-fixincludes:
+ 
+ @endif fixincludes
+ 
  .PHONY: maybe-install-pdf-fixincludes install-pdf-fixincludes
  maybe-install-pdf-fixincludes:
  @if fixincludes
*************** install-info-flex: \
*** 10260,10265 ****
--- 10638,10670 ----
  
  @endif flex
  
+ .PHONY: maybe-install-dvi-flex install-dvi-flex
+ maybe-install-dvi-flex:
+ @if flex
+ maybe-install-dvi-flex: install-dvi-flex
+ 
+ install-dvi-flex: \
+     configure-flex \
+     dvi-flex 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./flex/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in flex"; \
+ 	(cd $(HOST_SUBDIR)/flex && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif flex
+ 
  .PHONY: maybe-install-pdf-flex install-pdf-flex
  maybe-install-pdf-flex:
  @if flex
*************** install-info-gas: \
*** 11381,11386 ****
--- 11786,11817 ----
  
  @endif gas
  
+ .PHONY: maybe-install-dvi-gas install-dvi-gas
+ maybe-install-dvi-gas:
+ @if gas
+ maybe-install-dvi-gas: install-dvi-gas
+ 
+ install-dvi-gas: \
+     configure-gas \
+     dvi-gas 
+ 	@[ -f ./gas/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in gas"; \
+ 	(cd $(HOST_SUBDIR)/gas && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif gas
+ 
  .PHONY: maybe-install-pdf-gas install-pdf-gas
  maybe-install-pdf-gas:
  @if gas
*************** install-info-gcc: \
*** 12495,12500 ****
--- 12926,12957 ----
  
  @endif gcc
  
+ .PHONY: maybe-install-dvi-gcc install-dvi-gcc
+ maybe-install-dvi-gcc:
+ @if gcc
+ maybe-install-dvi-gcc: install-dvi-gcc
+ 
+ install-dvi-gcc: \
+     configure-gcc \
+     dvi-gcc 
+ 	@[ -f ./gcc/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in gcc"; \
+ 	(cd $(HOST_SUBDIR)/gcc && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif gcc
+ 
  .PHONY: maybe-install-pdf-gcc install-pdf-gcc
  maybe-install-pdf-gcc:
  @if gcc
*************** install-info-gmp: \
*** 13606,13611 ****
--- 14063,14094 ----
  
  @endif gmp
  
+ .PHONY: maybe-install-dvi-gmp install-dvi-gmp
+ maybe-install-dvi-gmp:
+ @if gmp
+ maybe-install-dvi-gmp: install-dvi-gmp
+ 
+ install-dvi-gmp: \
+     configure-gmp \
+     dvi-gmp 
+ 	@[ -f ./gmp/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) AM_CFLAGS="-DNO_ASM"; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in gmp"; \
+ 	(cd $(HOST_SUBDIR)/gmp && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif gmp
+ 
  .PHONY: maybe-install-pdf-gmp install-pdf-gmp
  maybe-install-pdf-gmp:
  @if gmp
*************** install-info-mpfr: \
*** 14717,14722 ****
--- 15200,15231 ----
  
  @endif mpfr
  
+ .PHONY: maybe-install-dvi-mpfr install-dvi-mpfr
+ maybe-install-dvi-mpfr:
+ @if mpfr
+ maybe-install-dvi-mpfr: install-dvi-mpfr
+ 
+ install-dvi-mpfr: \
+     configure-mpfr \
+     dvi-mpfr 
+ 	@[ -f ./mpfr/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) AM_CFLAGS="-DNO_ASM"; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in mpfr"; \
+ 	(cd $(HOST_SUBDIR)/mpfr && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif mpfr
+ 
  .PHONY: maybe-install-pdf-mpfr install-pdf-mpfr
  maybe-install-pdf-mpfr:
  @if mpfr
*************** install-info-mpc: \
*** 15828,15833 ****
--- 16337,16368 ----
  
  @endif mpc
  
+ .PHONY: maybe-install-dvi-mpc install-dvi-mpc
+ maybe-install-dvi-mpc:
+ @if mpc
+ maybe-install-dvi-mpc: install-dvi-mpc
+ 
+ install-dvi-mpc: \
+     configure-mpc \
+     dvi-mpc 
+ 	@[ -f ./mpc/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in mpc"; \
+ 	(cd $(HOST_SUBDIR)/mpc && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif mpc
+ 
  .PHONY: maybe-install-pdf-mpc install-pdf-mpc
  maybe-install-pdf-mpc:
  @if mpc
*************** install-info-isl: \
*** 16939,16944 ****
--- 17474,17505 ----
  
  @endif isl
  
+ .PHONY: maybe-install-dvi-isl install-dvi-isl
+ maybe-install-dvi-isl:
+ @if isl
+ maybe-install-dvi-isl: install-dvi-isl
+ 
+ install-dvi-isl: \
+     configure-isl \
+     dvi-isl 
+ 	@[ -f ./isl/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) V=1; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in isl"; \
+ 	(cd $(HOST_SUBDIR)/isl && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif isl
+ 
  .PHONY: maybe-install-pdf-isl install-pdf-isl
  maybe-install-pdf-isl:
  @if isl
*************** install-info-libelf: \
*** 18050,18055 ****
--- 18611,18642 ----
  
  @endif libelf
  
+ .PHONY: maybe-install-dvi-libelf install-dvi-libelf
+ maybe-install-dvi-libelf:
+ @if libelf
+ maybe-install-dvi-libelf: install-dvi-libelf
+ 
+ install-dvi-libelf: \
+     configure-libelf \
+     dvi-libelf 
+ 	@[ -f ./libelf/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in libelf"; \
+ 	(cd $(HOST_SUBDIR)/libelf && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif libelf
+ 
  .PHONY: maybe-install-pdf-libelf install-pdf-libelf
  maybe-install-pdf-libelf:
  @if libelf
*************** install-info-gold: \
*** 19164,19169 ****
--- 19751,19782 ----
  
  @endif gold
  
+ .PHONY: maybe-install-dvi-gold install-dvi-gold
+ maybe-install-dvi-gold:
+ @if gold
+ maybe-install-dvi-gold: install-dvi-gold
+ 
+ install-dvi-gold: \
+     configure-gold \
+     dvi-gold 
+ 	@[ -f ./gold/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in gold"; \
+ 	(cd $(HOST_SUBDIR)/gold && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif gold
+ 
  .PHONY: maybe-install-pdf-gold install-pdf-gold
  maybe-install-pdf-gold:
  @if gold
*************** install-info-gprof: \
*** 19598,19603 ****
--- 20211,20243 ----
  
  @endif gprof
  
+ .PHONY: maybe-install-dvi-gprof install-dvi-gprof
+ maybe-install-dvi-gprof:
+ @if gprof
+ maybe-install-dvi-gprof: install-dvi-gprof
+ 
+ install-dvi-gprof: \
+     configure-gprof \
+     dvi-gprof 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./gprof/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in gprof"; \
+ 	(cd $(HOST_SUBDIR)/gprof && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif gprof
+ 
  .PHONY: maybe-install-pdf-gprof install-pdf-gprof
  maybe-install-pdf-gprof:
  @if gprof
*************** install-info-intl: \
*** 20719,20724 ****
--- 21359,21390 ----
  
  @endif intl
  
+ .PHONY: maybe-install-dvi-intl install-dvi-intl
+ maybe-install-dvi-intl:
+ @if intl
+ maybe-install-dvi-intl: install-dvi-intl
+ 
+ install-dvi-intl: \
+     configure-intl \
+     dvi-intl 
+ 	@[ -f ./intl/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in intl"; \
+ 	(cd $(HOST_SUBDIR)/intl && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif intl
+ 
  .PHONY: maybe-install-pdf-intl install-pdf-intl
  maybe-install-pdf-intl:
  @if intl
*************** install-info-tcl: \
*** 21153,21158 ****
--- 21819,21851 ----
  
  @endif tcl
  
+ .PHONY: maybe-install-dvi-tcl install-dvi-tcl
+ maybe-install-dvi-tcl:
+ @if tcl
+ maybe-install-dvi-tcl: install-dvi-tcl
+ 
+ install-dvi-tcl: \
+     configure-tcl \
+     dvi-tcl 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./tcl/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in tcl"; \
+ 	(cd $(HOST_SUBDIR)/tcl && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif tcl
+ 
  .PHONY: maybe-install-pdf-tcl install-pdf-tcl
  maybe-install-pdf-tcl:
  @if tcl
*************** install-info-itcl: \
*** 21579,21584 ****
--- 22272,22304 ----
  
  @endif itcl
  
+ .PHONY: maybe-install-dvi-itcl install-dvi-itcl
+ maybe-install-dvi-itcl:
+ @if itcl
+ maybe-install-dvi-itcl: install-dvi-itcl
+ 
+ install-dvi-itcl: \
+     configure-itcl \
+     dvi-itcl 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./itcl/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in itcl"; \
+ 	(cd $(HOST_SUBDIR)/itcl && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif itcl
+ 
  .PHONY: maybe-install-pdf-itcl install-pdf-itcl
  maybe-install-pdf-itcl:
  @if itcl
*************** install-info-ld: \
*** 22700,22705 ****
--- 23420,23451 ----
  
  @endif ld
  
+ .PHONY: maybe-install-dvi-ld install-dvi-ld
+ maybe-install-dvi-ld:
+ @if ld
+ maybe-install-dvi-ld: install-dvi-ld
+ 
+ install-dvi-ld: \
+     configure-ld \
+     dvi-ld 
+ 	@[ -f ./ld/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in ld"; \
+ 	(cd $(HOST_SUBDIR)/ld && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif ld
+ 
  .PHONY: maybe-install-pdf-ld install-pdf-ld
  maybe-install-pdf-ld:
  @if ld
*************** install-info-libbacktrace: \
*** 23814,23819 ****
--- 24560,24591 ----
  
  @endif libbacktrace
  
+ .PHONY: maybe-install-dvi-libbacktrace install-dvi-libbacktrace
+ maybe-install-dvi-libbacktrace:
+ @if libbacktrace
+ maybe-install-dvi-libbacktrace: install-dvi-libbacktrace
+ 
+ install-dvi-libbacktrace: \
+     configure-libbacktrace \
+     dvi-libbacktrace 
+ 	@[ -f ./libbacktrace/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in libbacktrace"; \
+ 	(cd $(HOST_SUBDIR)/libbacktrace && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif libbacktrace
+ 
  .PHONY: maybe-install-pdf-libbacktrace install-pdf-libbacktrace
  maybe-install-pdf-libbacktrace:
  @if libbacktrace
*************** install-info-libcpp: \
*** 24928,24933 ****
--- 25700,25731 ----
  
  @endif libcpp
  
+ .PHONY: maybe-install-dvi-libcpp install-dvi-libcpp
+ maybe-install-dvi-libcpp:
+ @if libcpp
+ maybe-install-dvi-libcpp: install-dvi-libcpp
+ 
+ install-dvi-libcpp: \
+     configure-libcpp \
+     dvi-libcpp 
+ 	@[ -f ./libcpp/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in libcpp"; \
+ 	(cd $(HOST_SUBDIR)/libcpp && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif libcpp
+ 
  .PHONY: maybe-install-pdf-libcpp install-pdf-libcpp
  maybe-install-pdf-libcpp:
  @if libcpp
*************** maybe-dvi-libcody:
*** 25894,25916 ****
  @if libcody
  maybe-dvi-libcody: dvi-libcody
  
! dvi-libcody: \
!     configure-libcody 
! 	@[ -f ./libcody/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing dvi in libcody"; \
! 	(cd $(HOST_SUBDIR)/libcody && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	          dvi) \
! 	  || exit 1
  
  @endif libcody
  
--- 26692,26699 ----
  @if libcody
  maybe-dvi-libcody: dvi-libcody
  
! # libcody doesn't support dvi.
! dvi-libcody:
  
  @endif libcody
  
*************** maybe-TAGS-libcody:
*** 25939,25961 ****
  @if libcody
  maybe-TAGS-libcody: TAGS-libcody
  
! TAGS-libcody: \
!     configure-libcody 
! 	@[ -f ./libcody/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(HOST_EXPORTS) \
! 	for flag in $(EXTRA_HOST_FLAGS) ; do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	echo "Doing TAGS in libcody"; \
! 	(cd $(HOST_SUBDIR)/libcody && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	          TAGS) \
! 	  || exit 1
  
  @endif libcody
  
--- 26722,26729 ----
  @if libcody
  maybe-TAGS-libcody: TAGS-libcody
  
! # libcody doesn't support TAGS.
! TAGS-libcody:
  
  @endif libcody
  
*************** install-info-libcody:
*** 25969,25974 ****
--- 26737,26752 ----
  
  @endif libcody
  
+ .PHONY: maybe-install-dvi-libcody install-dvi-libcody
+ maybe-install-dvi-libcody:
+ @if libcody
+ maybe-install-dvi-libcody: install-dvi-libcody
+ 
+ # libcody doesn't support install-dvi.
+ install-dvi-libcody:
+ 
+ @endif libcody
+ 
  .PHONY: maybe-install-pdf-libcody install-pdf-libcody
  maybe-install-pdf-libcody:
  @if libcody
*************** maybe-TAGS-libdecnumber:
*** 27005,27012 ****
  @if libdecnumber
  maybe-TAGS-libdecnumber: TAGS-libdecnumber
  
! TAGS-libdecnumber: \
!     configure-libdecnumber 
  	@[ -f ./libdecnumber/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
--- 27783,27801 ----
  @if libdecnumber
  maybe-TAGS-libdecnumber: TAGS-libdecnumber
  
! # libdecnumber doesn't support TAGS.
! TAGS-libdecnumber:
! 
! @endif libdecnumber
! 
! .PHONY: maybe-install-info-libdecnumber install-info-libdecnumber
! maybe-install-info-libdecnumber:
! @if libdecnumber
! maybe-install-info-libdecnumber: install-info-libdecnumber
! 
! install-info-libdecnumber: \
!     configure-libdecnumber \
!     info-libdecnumber 
  	@[ -f ./libdecnumber/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
*************** TAGS-libdecnumber: \
*** 27014,27038 ****
  	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in libdecnumber"; \
  	(cd $(HOST_SUBDIR)/libdecnumber && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	          TAGS) \
  	  || exit 1
  
  @endif libdecnumber
  
! .PHONY: maybe-install-info-libdecnumber install-info-libdecnumber
! maybe-install-info-libdecnumber:
  @if libdecnumber
! maybe-install-info-libdecnumber: install-info-libdecnumber
  
! install-info-libdecnumber: \
      configure-libdecnumber \
!     info-libdecnumber 
  	@[ -f ./libdecnumber/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
--- 27803,27827 ----
  	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in libdecnumber"; \
  	(cd $(HOST_SUBDIR)/libdecnumber && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	          install-info) \
  	  || exit 1
  
  @endif libdecnumber
  
! .PHONY: maybe-install-dvi-libdecnumber install-dvi-libdecnumber
! maybe-install-dvi-libdecnumber:
  @if libdecnumber
! maybe-install-dvi-libdecnumber: install-dvi-libdecnumber
  
! install-dvi-libdecnumber: \
      configure-libdecnumber \
!     dvi-libdecnumber 
  	@[ -f ./libdecnumber/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
*************** install-info-libdecnumber: \
*** 27040,27052 ****
  	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in libdecnumber"; \
  	(cd $(HOST_SUBDIR)/libdecnumber && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	          install-info) \
  	  || exit 1
  
  @endif libdecnumber
--- 27829,27841 ----
  	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-dvi in libdecnumber"; \
  	(cd $(HOST_SUBDIR)/libdecnumber && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	          install-dvi) \
  	  || exit 1
  
  @endif libdecnumber
*************** install-info-libgui: \
*** 27485,27490 ****
--- 28274,28306 ----
  
  @endif libgui
  
+ .PHONY: maybe-install-dvi-libgui install-dvi-libgui
+ maybe-install-dvi-libgui:
+ @if libgui
+ maybe-install-dvi-libgui: install-dvi-libgui
+ 
+ install-dvi-libgui: \
+     configure-libgui \
+     dvi-libgui 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./libgui/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in libgui"; \
+ 	(cd $(HOST_SUBDIR)/libgui && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif libgui
+ 
  .PHONY: maybe-install-pdf-libgui install-pdf-libgui
  maybe-install-pdf-libgui:
  @if libgui
*************** install-info-libiberty: \
*** 28615,28620 ****
--- 29431,29462 ----
  
  @endif libiberty
  
+ .PHONY: maybe-install-dvi-libiberty install-dvi-libiberty
+ maybe-install-dvi-libiberty:
+ @if libiberty
+ maybe-install-dvi-libiberty: install-dvi-libiberty
+ 
+ install-dvi-libiberty: \
+     configure-libiberty \
+     dvi-libiberty 
+ 	@[ -f ./libiberty/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in libiberty"; \
+ 	(cd $(HOST_SUBDIR)/libiberty && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif libiberty
+ 
  .PHONY: maybe-install-pdf-libiberty install-pdf-libiberty
  maybe-install-pdf-libiberty:
  @if libiberty
*************** install-info-libiberty-linker-plugin: \
*** 29738,29743 ****
--- 30580,30611 ----
  
  @endif libiberty-linker-plugin
  
+ .PHONY: maybe-install-dvi-libiberty-linker-plugin install-dvi-libiberty-linker-plugin
+ maybe-install-dvi-libiberty-linker-plugin:
+ @if libiberty-linker-plugin
+ maybe-install-dvi-libiberty-linker-plugin: install-dvi-libiberty-linker-plugin
+ 
+ install-dvi-libiberty-linker-plugin: \
+     configure-libiberty-linker-plugin \
+     dvi-libiberty-linker-plugin 
+ 	@[ -f ./libiberty-linker-plugin/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) @extra_linker_plugin_flags@; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in libiberty-linker-plugin"; \
+ 	(cd $(HOST_SUBDIR)/libiberty-linker-plugin && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif libiberty-linker-plugin
+ 
  .PHONY: maybe-install-pdf-libiberty-linker-plugin install-pdf-libiberty-linker-plugin
  maybe-install-pdf-libiberty-linker-plugin:
  @if libiberty-linker-plugin
*************** install-info-libiconv:
*** 30788,30793 ****
--- 31656,31687 ----
  
  @endif libiconv
  
+ .PHONY: maybe-install-dvi-libiconv install-dvi-libiconv
+ maybe-install-dvi-libiconv:
+ @if libiconv
+ maybe-install-dvi-libiconv: install-dvi-libiconv
+ 
+ install-dvi-libiconv: \
+     configure-libiconv \
+     dvi-libiconv 
+ 	@[ -f ./libiconv/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in libiconv"; \
+ 	(cd $(HOST_SUBDIR)/libiconv && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif libiconv
+ 
  .PHONY: maybe-install-pdf-libiconv install-pdf-libiconv
  maybe-install-pdf-libiconv:
  @if libiconv
*************** install-info-m4: \
*** 31190,31195 ****
--- 32084,32116 ----
  
  @endif m4
  
+ .PHONY: maybe-install-dvi-m4 install-dvi-m4
+ maybe-install-dvi-m4:
+ @if m4
+ maybe-install-dvi-m4: install-dvi-m4
+ 
+ install-dvi-m4: \
+     configure-m4 \
+     dvi-m4 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./m4/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in m4"; \
+ 	(cd $(HOST_SUBDIR)/m4 && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif m4
+ 
  .PHONY: maybe-install-pdf-m4 install-pdf-m4
  maybe-install-pdf-m4:
  @if m4
*************** install-info-readline: \
*** 31631,31636 ****
--- 32552,32584 ----
  
  @endif readline
  
+ .PHONY: maybe-install-dvi-readline install-dvi-readline
+ maybe-install-dvi-readline:
+ @if readline
+ maybe-install-dvi-readline: install-dvi-readline
+ 
+ install-dvi-readline: \
+     configure-readline \
+     dvi-readline 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./readline/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in readline"; \
+ 	(cd $(HOST_SUBDIR)/readline && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif readline
+ 
  .PHONY: maybe-install-pdf-readline install-pdf-readline
  maybe-install-pdf-readline:
  @if readline
*************** install-info-sid: \
*** 32072,32077 ****
--- 33020,33052 ----
  
  @endif sid
  
+ .PHONY: maybe-install-dvi-sid install-dvi-sid
+ maybe-install-dvi-sid:
+ @if sid
+ maybe-install-dvi-sid: install-dvi-sid
+ 
+ install-dvi-sid: \
+     configure-sid \
+     dvi-sid 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./sid/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in sid"; \
+ 	(cd $(HOST_SUBDIR)/sid && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif sid
+ 
  .PHONY: maybe-install-pdf-sid install-pdf-sid
  maybe-install-pdf-sid:
  @if sid
*************** install-info-sim: \
*** 32513,32518 ****
--- 33488,33520 ----
  
  @endif sim
  
+ .PHONY: maybe-install-dvi-sim install-dvi-sim
+ maybe-install-dvi-sim:
+ @if sim
+ maybe-install-dvi-sim: install-dvi-sim
+ 
+ install-dvi-sim: \
+     configure-sim \
+     dvi-sim 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./sim/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in sim"; \
+ 	(cd $(HOST_SUBDIR)/sim && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif sim
+ 
  .PHONY: maybe-install-pdf-sim install-pdf-sim
  maybe-install-pdf-sim:
  @if sim
*************** install-info-texinfo: \
*** 32942,32947 ****
--- 33944,33976 ----
  
  @endif texinfo
  
+ .PHONY: maybe-install-dvi-texinfo install-dvi-texinfo
+ maybe-install-dvi-texinfo:
+ @if texinfo
+ maybe-install-dvi-texinfo: install-dvi-texinfo
+ 
+ install-dvi-texinfo: \
+     configure-texinfo \
+     dvi-texinfo 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./texinfo/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in texinfo"; \
+ 	(cd $(HOST_SUBDIR)/texinfo && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif texinfo
+ 
  .PHONY: maybe-install-pdf-texinfo install-pdf-texinfo
  maybe-install-pdf-texinfo:
  @if texinfo
*************** install-info-zlib: \
*** 34054,34059 ****
--- 35083,35114 ----
  
  @endif zlib
  
+ .PHONY: maybe-install-dvi-zlib install-dvi-zlib
+ maybe-install-dvi-zlib:
+ @if zlib
+ maybe-install-dvi-zlib: install-dvi-zlib
+ 
+ install-dvi-zlib: \
+     configure-zlib \
+     dvi-zlib 
+ 	@[ -f ./zlib/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in zlib"; \
+ 	(cd $(HOST_SUBDIR)/zlib && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif zlib
+ 
  .PHONY: maybe-install-pdf-zlib install-pdf-zlib
  maybe-install-pdf-zlib:
  @if zlib
*************** install-info-gnulib: \
*** 34488,34493 ****
--- 35543,35575 ----
  
  @endif gnulib
  
+ .PHONY: maybe-install-dvi-gnulib install-dvi-gnulib
+ maybe-install-dvi-gnulib:
+ @if gnulib
+ maybe-install-dvi-gnulib: install-dvi-gnulib
+ 
+ install-dvi-gnulib: \
+     configure-gnulib \
+     dvi-gnulib 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./gnulib/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in gnulib"; \
+ 	(cd $(HOST_SUBDIR)/gnulib && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif gnulib
+ 
  .PHONY: maybe-install-pdf-gnulib install-pdf-gnulib
  maybe-install-pdf-gnulib:
  @if gnulib
*************** install-info-gdbsupport: \
*** 34929,34934 ****
--- 36011,36043 ----
  
  @endif gdbsupport
  
+ .PHONY: maybe-install-dvi-gdbsupport install-dvi-gdbsupport
+ maybe-install-dvi-gdbsupport:
+ @if gdbsupport
+ maybe-install-dvi-gdbsupport: install-dvi-gdbsupport
+ 
+ install-dvi-gdbsupport: \
+     configure-gdbsupport \
+     dvi-gdbsupport 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./gdbsupport/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in gdbsupport"; \
+ 	(cd $(HOST_SUBDIR)/gdbsupport && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif gdbsupport
+ 
  .PHONY: maybe-install-pdf-gdbsupport install-pdf-gdbsupport
  maybe-install-pdf-gdbsupport:
  @if gdbsupport
*************** install-info-gdbserver: \
*** 35370,35375 ****
--- 36479,36511 ----
  
  @endif gdbserver
  
+ .PHONY: maybe-install-dvi-gdbserver install-dvi-gdbserver
+ maybe-install-dvi-gdbserver:
+ @if gdbserver
+ maybe-install-dvi-gdbserver: install-dvi-gdbserver
+ 
+ install-dvi-gdbserver: \
+     configure-gdbserver \
+     dvi-gdbserver 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./gdbserver/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in gdbserver"; \
+ 	(cd $(HOST_SUBDIR)/gdbserver && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif gdbserver
+ 
  .PHONY: maybe-install-pdf-gdbserver install-pdf-gdbserver
  maybe-install-pdf-gdbserver:
  @if gdbserver
*************** install-info-gdb: \
*** 35811,35816 ****
--- 36947,36979 ----
  
  @endif gdb
  
+ .PHONY: maybe-install-dvi-gdb install-dvi-gdb
+ maybe-install-dvi-gdb:
+ @if gdb
+ maybe-install-dvi-gdb: install-dvi-gdb
+ 
+ install-dvi-gdb: \
+     configure-gdb \
+     dvi-gdb 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./gdb/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in gdb"; \
+ 	(cd $(HOST_SUBDIR)/gdb && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif gdb
+ 
  .PHONY: maybe-install-pdf-gdb install-pdf-gdb
  maybe-install-pdf-gdb:
  @if gdb
*************** install-info-expect: \
*** 36252,36257 ****
--- 37415,37447 ----
  
  @endif expect
  
+ .PHONY: maybe-install-dvi-expect install-dvi-expect
+ maybe-install-dvi-expect:
+ @if expect
+ maybe-install-dvi-expect: install-dvi-expect
+ 
+ install-dvi-expect: \
+     configure-expect \
+     dvi-expect 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./expect/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in expect"; \
+ 	(cd $(HOST_SUBDIR)/expect && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif expect
+ 
  .PHONY: maybe-install-pdf-expect install-pdf-expect
  maybe-install-pdf-expect:
  @if expect
*************** install-info-guile: \
*** 36693,36698 ****
--- 37883,37915 ----
  
  @endif guile
  
+ .PHONY: maybe-install-dvi-guile install-dvi-guile
+ maybe-install-dvi-guile:
+ @if guile
+ maybe-install-dvi-guile: install-dvi-guile
+ 
+ install-dvi-guile: \
+     configure-guile \
+     dvi-guile 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./guile/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in guile"; \
+ 	(cd $(HOST_SUBDIR)/guile && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif guile
+ 
  .PHONY: maybe-install-pdf-guile install-pdf-guile
  maybe-install-pdf-guile:
  @if guile
*************** install-info-tk: \
*** 37134,37139 ****
--- 38351,38383 ----
  
  @endif tk
  
+ .PHONY: maybe-install-dvi-tk install-dvi-tk
+ maybe-install-dvi-tk:
+ @if tk
+ maybe-install-dvi-tk: install-dvi-tk
+ 
+ install-dvi-tk: \
+     configure-tk \
+     dvi-tk 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./tk/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in tk"; \
+ 	(cd $(HOST_SUBDIR)/tk && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif tk
+ 
  .PHONY: maybe-install-pdf-tk install-pdf-tk
  maybe-install-pdf-tk:
  @if tk
*************** install-info-libtermcap: \
*** 37569,37574 ****
--- 38813,38845 ----
  
  @endif libtermcap
  
+ .PHONY: maybe-install-dvi-libtermcap install-dvi-libtermcap
+ maybe-install-dvi-libtermcap:
+ @if libtermcap
+ maybe-install-dvi-libtermcap: install-dvi-libtermcap
+ 
+ install-dvi-libtermcap: \
+     configure-libtermcap \
+     dvi-libtermcap 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./libtermcap/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in libtermcap"; \
+ 	(cd $(HOST_SUBDIR)/libtermcap && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif libtermcap
+ 
  .PHONY: maybe-install-pdf-libtermcap install-pdf-libtermcap
  maybe-install-pdf-libtermcap:
  @if libtermcap
*************** install-info-utils: \
*** 37944,37949 ****
--- 39215,39247 ----
  
  @endif utils
  
+ .PHONY: maybe-install-dvi-utils install-dvi-utils
+ maybe-install-dvi-utils:
+ @if utils
+ maybe-install-dvi-utils: install-dvi-utils
+ 
+ install-dvi-utils: \
+     configure-utils \
+     dvi-utils 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./utils/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in utils"; \
+ 	(cd $(HOST_SUBDIR)/utils && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif utils
+ 
  .PHONY: maybe-install-pdf-utils install-pdf-utils
  maybe-install-pdf-utils:
  @if utils
*************** maybe-TAGS-c++tools:
*** 38337,38344 ****
  @if c++tools
  maybe-TAGS-c++tools: TAGS-c++tools
  
! TAGS-c++tools: \
!     configure-c++tools 
  	@: $(MAKE); $(unstage)
  	@[ -f ./c++tools/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
--- 39635,39653 ----
  @if c++tools
  maybe-TAGS-c++tools: TAGS-c++tools
  
! # c++tools doesn't support TAGS.
! TAGS-c++tools:
! 
! @endif c++tools
! 
! .PHONY: maybe-install-info-c++tools install-info-c++tools
! maybe-install-info-c++tools:
! @if c++tools
! maybe-install-info-c++tools: install-info-c++tools
! 
! install-info-c++tools: \
!     configure-c++tools \
!     info-c++tools 
  	@: $(MAKE); $(unstage)
  	@[ -f ./c++tools/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
*************** TAGS-c++tools: \
*** 38347,38371 ****
  	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing TAGS in c++tools"; \
  	(cd $(HOST_SUBDIR)/c++tools && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	          TAGS) \
  	  || exit 1
  
  @endif c++tools
  
! .PHONY: maybe-install-info-c++tools install-info-c++tools
! maybe-install-info-c++tools:
  @if c++tools
! maybe-install-info-c++tools: install-info-c++tools
  
! install-info-c++tools: \
      configure-c++tools \
!     info-c++tools 
  	@: $(MAKE); $(unstage)
  	@[ -f ./c++tools/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
--- 39656,39680 ----
  	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in c++tools"; \
  	(cd $(HOST_SUBDIR)/c++tools && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	          install-info) \
  	  || exit 1
  
  @endif c++tools
  
! .PHONY: maybe-install-dvi-c++tools install-dvi-c++tools
! maybe-install-dvi-c++tools:
  @if c++tools
! maybe-install-dvi-c++tools: install-dvi-c++tools
  
! install-dvi-c++tools: \
      configure-c++tools \
!     dvi-c++tools 
  	@: $(MAKE); $(unstage)
  	@[ -f ./c++tools/Makefile ] || exit 0; \
  	r=`${PWD_COMMAND}`; export r; \
*************** install-info-c++tools: \
*** 38374,38386 ****
  	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-info in c++tools"; \
  	(cd $(HOST_SUBDIR)/c++tools && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	          install-info) \
  	  || exit 1
  
  @endif c++tools
--- 39683,39695 ----
  	for flag in $(EXTRA_HOST_FLAGS) ; do \
  	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
  	done; \
! 	echo "Doing install-dvi in c++tools"; \
  	(cd $(HOST_SUBDIR)/c++tools && \
  	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
  	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
  	          "RANLIB=$${RANLIB}" \
  	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	          install-dvi) \
  	  || exit 1
  
  @endif c++tools
*************** install-info-gnattools: \
*** 38826,38831 ****
--- 40135,40167 ----
  
  @endif gnattools
  
+ .PHONY: maybe-install-dvi-gnattools install-dvi-gnattools
+ maybe-install-dvi-gnattools:
+ @if gnattools
+ maybe-install-dvi-gnattools: install-dvi-gnattools
+ 
+ install-dvi-gnattools: \
+     configure-gnattools \
+     dvi-gnattools 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./gnattools/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in gnattools"; \
+ 	(cd $(HOST_SUBDIR)/gnattools && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif gnattools
+ 
  .PHONY: maybe-install-pdf-gnattools install-pdf-gnattools
  maybe-install-pdf-gnattools:
  @if gnattools
*************** install-info-lto-plugin: \
*** 39956,39961 ****
--- 41292,41323 ----
  
  @endif lto-plugin
  
+ .PHONY: maybe-install-dvi-lto-plugin install-dvi-lto-plugin
+ maybe-install-dvi-lto-plugin:
+ @if lto-plugin
+ maybe-install-dvi-lto-plugin: install-dvi-lto-plugin
+ 
+ install-dvi-lto-plugin: \
+     configure-lto-plugin \
+     dvi-lto-plugin 
+ 	@[ -f ./lto-plugin/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) @extra_linker_plugin_flags@; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in lto-plugin"; \
+ 	(cd $(HOST_SUBDIR)/lto-plugin && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif lto-plugin
+ 
  .PHONY: maybe-install-pdf-lto-plugin install-pdf-lto-plugin
  maybe-install-pdf-lto-plugin:
  @if lto-plugin
*************** install-info-libcc1: \
*** 40390,40395 ****
--- 41752,41784 ----
  
  @endif libcc1
  
+ .PHONY: maybe-install-dvi-libcc1 install-dvi-libcc1
+ maybe-install-dvi-libcc1:
+ @if libcc1
+ maybe-install-dvi-libcc1: install-dvi-libcc1
+ 
+ install-dvi-libcc1: \
+     configure-libcc1 \
+     dvi-libcc1 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./libcc1/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in libcc1"; \
+ 	(cd $(HOST_SUBDIR)/libcc1 && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif libcc1
+ 
  .PHONY: maybe-install-pdf-libcc1 install-pdf-libcc1
  maybe-install-pdf-libcc1:
  @if libcc1
*************** install-info-gotools: \
*** 40831,40836 ****
--- 42220,42252 ----
  
  @endif gotools
  
+ .PHONY: maybe-install-dvi-gotools install-dvi-gotools
+ maybe-install-dvi-gotools:
+ @if gotools
+ maybe-install-dvi-gotools: install-dvi-gotools
+ 
+ install-dvi-gotools: \
+     configure-gotools \
+     dvi-gotools 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f ./gotools/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in gotools"; \
+ 	(cd $(HOST_SUBDIR)/gotools && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif gotools
+ 
  .PHONY: maybe-install-pdf-gotools install-pdf-gotools
  maybe-install-pdf-gotools:
  @if gotools
*************** install-info-libctf: \
*** 41952,41957 ****
--- 43368,43399 ----
  
  @endif libctf
  
+ .PHONY: maybe-install-dvi-libctf install-dvi-libctf
+ maybe-install-dvi-libctf:
+ @if libctf
+ maybe-install-dvi-libctf: install-dvi-libctf
+ 
+ install-dvi-libctf: \
+     configure-libctf \
+     dvi-libctf 
+ 	@[ -f ./libctf/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	for flag in $(EXTRA_HOST_FLAGS) ; do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	echo "Doing install-dvi in libctf"; \
+ 	(cd $(HOST_SUBDIR)/libctf && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	          install-dvi) \
+ 	  || exit 1
+ 
+ @endif libctf
+ 
  .PHONY: maybe-install-pdf-libctf install-pdf-libctf
  maybe-install-pdf-libctf:
  @if libctf
*************** install-info-target-libstdc++-v3: \
*** 43193,43198 ****
--- 44635,44667 ----
  
  @endif target-libstdc++-v3
  
+ .PHONY: maybe-install-dvi-target-libstdc++-v3 install-dvi-target-libstdc++-v3
+ maybe-install-dvi-target-libstdc++-v3:
+ @if target-libstdc++-v3
+ maybe-install-dvi-target-libstdc++-v3: install-dvi-target-libstdc++-v3
+ 
+ install-dvi-target-libstdc++-v3: \
+     configure-target-libstdc++-v3 \
+     dvi-target-libstdc++-v3 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(RAW_CXX_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libstdc++-v3"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libstdc++-v3 && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libstdc++-v3
+ 
  .PHONY: maybe-install-pdf-target-libstdc++-v3 install-pdf-target-libstdc++-v3
  maybe-install-pdf-target-libstdc++-v3:
  @if target-libstdc++-v3
*************** install-info-target-libsanitizer: \
*** 44436,44441 ****
--- 45905,45937 ----
  
  @endif target-libsanitizer
  
+ .PHONY: maybe-install-dvi-target-libsanitizer install-dvi-target-libsanitizer
+ maybe-install-dvi-target-libsanitizer:
+ @if target-libsanitizer
+ maybe-install-dvi-target-libsanitizer: install-dvi-target-libsanitizer
+ 
+ install-dvi-target-libsanitizer: \
+     configure-target-libsanitizer \
+     dvi-target-libsanitizer 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libsanitizer/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(RAW_CXX_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libsanitizer"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libsanitizer && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libsanitizer
+ 
  .PHONY: maybe-install-pdf-target-libsanitizer install-pdf-target-libsanitizer
  maybe-install-pdf-target-libsanitizer:
  @if target-libsanitizer
*************** install-info-target-libvtv: \
*** 45679,45684 ****
--- 47175,47207 ----
  
  @endif target-libvtv
  
+ .PHONY: maybe-install-dvi-target-libvtv install-dvi-target-libvtv
+ maybe-install-dvi-target-libvtv:
+ @if target-libvtv
+ maybe-install-dvi-target-libvtv: install-dvi-target-libvtv
+ 
+ install-dvi-target-libvtv: \
+     configure-target-libvtv \
+     dvi-target-libvtv 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libvtv/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(RAW_CXX_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libvtv"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libvtv && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libvtv
+ 
  .PHONY: maybe-install-pdf-target-libvtv install-pdf-target-libvtv
  maybe-install-pdf-target-libvtv:
  @if target-libvtv
*************** install-info-target-liboffloadmic: \
*** 46137,46142 ****
--- 47660,47692 ----
  
  @endif target-liboffloadmic
  
+ .PHONY: maybe-install-dvi-target-liboffloadmic install-dvi-target-liboffloadmic
+ maybe-install-dvi-target-liboffloadmic:
+ @if target-liboffloadmic
+ maybe-install-dvi-target-liboffloadmic: install-dvi-target-liboffloadmic
+ 
+ install-dvi-target-liboffloadmic: \
+     configure-target-liboffloadmic \
+     dvi-target-liboffloadmic 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/liboffloadmic/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/liboffloadmic"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/liboffloadmic && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-liboffloadmic
+ 
  .PHONY: maybe-install-pdf-target-liboffloadmic install-pdf-target-liboffloadmic
  maybe-install-pdf-target-liboffloadmic:
  @if target-liboffloadmic
*************** install-info-target-libssp: \
*** 46595,46600 ****
--- 48145,48177 ----
  
  @endif target-libssp
  
+ .PHONY: maybe-install-dvi-target-libssp install-dvi-target-libssp
+ maybe-install-dvi-target-libssp:
+ @if target-libssp
+ maybe-install-dvi-target-libssp: install-dvi-target-libssp
+ 
+ install-dvi-target-libssp: \
+     configure-target-libssp \
+     dvi-target-libssp 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libssp/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libssp"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libssp && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libssp
+ 
  .PHONY: maybe-install-pdf-target-libssp install-pdf-target-libssp
  maybe-install-pdf-target-libssp:
  @if target-libssp
*************** install-info-target-newlib: \
*** 47053,47058 ****
--- 48630,48662 ----
  
  @endif target-newlib
  
+ .PHONY: maybe-install-dvi-target-newlib install-dvi-target-newlib
+ maybe-install-dvi-target-newlib:
+ @if target-newlib
+ maybe-install-dvi-target-newlib: install-dvi-target-newlib
+ 
+ install-dvi-target-newlib: \
+     configure-target-newlib \
+     dvi-target-newlib 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/newlib/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/newlib"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/newlib && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-newlib
+ 
  .PHONY: maybe-install-pdf-target-newlib install-pdf-target-newlib
  maybe-install-pdf-target-newlib:
  @if target-newlib
*************** maybe-TAGS-target-libgcc:
*** 48243,48266 ****
  @if target-libgcc
  maybe-TAGS-target-libgcc: TAGS-target-libgcc
  
! TAGS-target-libgcc: \
!     configure-target-libgcc 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libgcc/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libgcc"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libgcc && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           TAGS) \
! 	  || exit 1
  
  @endif target-libgcc
  
--- 49847,49854 ----
  @if target-libgcc
  maybe-TAGS-target-libgcc: TAGS-target-libgcc
  
! # libgcc doesn't support TAGS.
! TAGS-target-libgcc:
  
  @endif target-libgcc
  
*************** install-info-target-libgcc: \
*** 48291,48296 ****
--- 49879,49894 ----
  
  @endif target-libgcc
  
+ .PHONY: maybe-install-dvi-target-libgcc install-dvi-target-libgcc
+ maybe-install-dvi-target-libgcc:
+ @if target-libgcc
+ maybe-install-dvi-target-libgcc: install-dvi-target-libgcc
+ 
+ # libgcc doesn't support install-dvi.
+ install-dvi-target-libgcc:
+ 
+ @endif target-libgcc
+ 
  .PHONY: maybe-install-pdf-target-libgcc install-pdf-target-libgcc
  maybe-install-pdf-target-libgcc:
  @if target-libgcc
*************** configure-target-libbacktrace: stage_cur
*** 48483,48489 ****
  @if target-libbacktrace
  maybe-configure-target-libbacktrace: configure-target-libbacktrace
  configure-target-libbacktrace: 
- 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	echo "Checking multilib configuration for libbacktrace..."; \
--- 50081,50086 ----
*************** configure-target-libbacktrace:
*** 48521,48526 ****
--- 50118,50529 ----
  
  
  
+ .PHONY: configure-stage1-target-libbacktrace maybe-configure-stage1-target-libbacktrace
+ maybe-configure-stage1-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-configure-stage1-target-libbacktrace: configure-stage1-target-libbacktrace
+ configure-stage1-target-libbacktrace:
+ 	@[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE1_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libbacktrace..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libbacktrace/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libbacktrace/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage 1 in $(TARGET_SUBDIR)/libbacktrace; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libbacktrace/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libbacktrace; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	   \
+ 	  $(STAGE1_CONFIGURE_FLAGS)
+ @endif target-libbacktrace-bootstrap
+ 
+ .PHONY: configure-stage2-target-libbacktrace maybe-configure-stage2-target-libbacktrace
+ maybe-configure-stage2-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-configure-stage2-target-libbacktrace: configure-stage2-target-libbacktrace
+ configure-stage2-target-libbacktrace:
+ 	@[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE2_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libbacktrace..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libbacktrace/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libbacktrace/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage 2 in $(TARGET_SUBDIR)/libbacktrace; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libbacktrace/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libbacktrace; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGE2_CONFIGURE_FLAGS)
+ @endif target-libbacktrace-bootstrap
+ 
+ .PHONY: configure-stage3-target-libbacktrace maybe-configure-stage3-target-libbacktrace
+ maybe-configure-stage3-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-configure-stage3-target-libbacktrace: configure-stage3-target-libbacktrace
+ configure-stage3-target-libbacktrace:
+ 	@[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE3_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libbacktrace..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libbacktrace/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libbacktrace/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage 3 in $(TARGET_SUBDIR)/libbacktrace; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libbacktrace/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libbacktrace; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGE3_CONFIGURE_FLAGS)
+ @endif target-libbacktrace-bootstrap
+ 
+ .PHONY: configure-stage4-target-libbacktrace maybe-configure-stage4-target-libbacktrace
+ maybe-configure-stage4-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-configure-stage4-target-libbacktrace: configure-stage4-target-libbacktrace
+ configure-stage4-target-libbacktrace:
+ 	@[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE4_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libbacktrace..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libbacktrace/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libbacktrace/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage 4 in $(TARGET_SUBDIR)/libbacktrace; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libbacktrace/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libbacktrace; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGE4_CONFIGURE_FLAGS)
+ @endif target-libbacktrace-bootstrap
+ 
+ .PHONY: configure-stageprofile-target-libbacktrace maybe-configure-stageprofile-target-libbacktrace
+ maybe-configure-stageprofile-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-configure-stageprofile-target-libbacktrace: configure-stageprofile-target-libbacktrace
+ configure-stageprofile-target-libbacktrace:
+ 	@[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEprofile_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libbacktrace..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libbacktrace/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libbacktrace/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage profile in $(TARGET_SUBDIR)/libbacktrace; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libbacktrace/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libbacktrace; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEprofile_CONFIGURE_FLAGS)
+ @endif target-libbacktrace-bootstrap
+ 
+ .PHONY: configure-stagetrain-target-libbacktrace maybe-configure-stagetrain-target-libbacktrace
+ maybe-configure-stagetrain-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-configure-stagetrain-target-libbacktrace: configure-stagetrain-target-libbacktrace
+ configure-stagetrain-target-libbacktrace:
+ 	@[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEtrain_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libbacktrace..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libbacktrace/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libbacktrace/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage train in $(TARGET_SUBDIR)/libbacktrace; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libbacktrace/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libbacktrace; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEtrain_CONFIGURE_FLAGS)
+ @endif target-libbacktrace-bootstrap
+ 
+ .PHONY: configure-stagefeedback-target-libbacktrace maybe-configure-stagefeedback-target-libbacktrace
+ maybe-configure-stagefeedback-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-configure-stagefeedback-target-libbacktrace: configure-stagefeedback-target-libbacktrace
+ configure-stagefeedback-target-libbacktrace:
+ 	@[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEfeedback_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libbacktrace..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libbacktrace/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libbacktrace/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage feedback in $(TARGET_SUBDIR)/libbacktrace; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libbacktrace/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libbacktrace; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEfeedback_CONFIGURE_FLAGS)
+ @endif target-libbacktrace-bootstrap
+ 
+ .PHONY: configure-stageautoprofile-target-libbacktrace maybe-configure-stageautoprofile-target-libbacktrace
+ maybe-configure-stageautoprofile-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-configure-stageautoprofile-target-libbacktrace: configure-stageautoprofile-target-libbacktrace
+ configure-stageautoprofile-target-libbacktrace:
+ 	@[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautoprofile_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libbacktrace..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libbacktrace/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libbacktrace/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage autoprofile in $(TARGET_SUBDIR)/libbacktrace; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libbacktrace/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libbacktrace; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEautoprofile_CONFIGURE_FLAGS)
+ @endif target-libbacktrace-bootstrap
+ 
+ .PHONY: configure-stageautofeedback-target-libbacktrace maybe-configure-stageautofeedback-target-libbacktrace
+ maybe-configure-stageautofeedback-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-configure-stageautofeedback-target-libbacktrace: configure-stageautofeedback-target-libbacktrace
+ configure-stageautofeedback-target-libbacktrace:
+ 	@[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautofeedback_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libbacktrace..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libbacktrace/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libbacktrace/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libbacktrace/multilib.tmp $(TARGET_SUBDIR)/libbacktrace/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libbacktrace/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage autofeedback in $(TARGET_SUBDIR)/libbacktrace; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libbacktrace; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libbacktrace/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libbacktrace; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEautofeedback_CONFIGURE_FLAGS)
+ @endif target-libbacktrace-bootstrap
+ 
+ 
+ 
  
  
  .PHONY: all-target-libbacktrace maybe-all-target-libbacktrace
*************** all-target-libbacktrace: stage_current
*** 48532,48538 ****
  TARGET-target-libbacktrace=all
  maybe-all-target-libbacktrace: all-target-libbacktrace
  all-target-libbacktrace: configure-target-libbacktrace
- 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS)  \
--- 50535,50540 ----
*************** all-target-libbacktrace: configure-targe
*** 48543,48548 ****
--- 50545,50931 ----
  
  
  
+ .PHONY: all-stage1-target-libbacktrace maybe-all-stage1-target-libbacktrace
+ .PHONY: clean-stage1-target-libbacktrace maybe-clean-stage1-target-libbacktrace
+ maybe-all-stage1-target-libbacktrace:
+ maybe-clean-stage1-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-all-stage1-target-libbacktrace: all-stage1-target-libbacktrace
+ all-stage1: all-stage1-target-libbacktrace
+ TARGET-stage1-target-libbacktrace = $(TARGET-target-libbacktrace)
+ all-stage1-target-libbacktrace: configure-stage1-target-libbacktrace
+ 	@[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE1_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS)  \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)  \
+ 		  \
+ 		TFLAGS="$(STAGE1_TFLAGS)"  \
+ 		$(TARGET-stage1-target-libbacktrace)
+ 
+ maybe-clean-stage1-target-libbacktrace: clean-stage1-target-libbacktrace
+ clean-stage1: clean-stage1-target-libbacktrace
+ clean-stage1-target-libbacktrace:
+ 	@if [ $(current_stage) = stage1 ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stage1-libbacktrace/Makefile ] || exit 0; \
+ 	  $(MAKE) stage1-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)  \
+ 	  clean
+ @endif target-libbacktrace-bootstrap
+ 
+ 
+ .PHONY: all-stage2-target-libbacktrace maybe-all-stage2-target-libbacktrace
+ .PHONY: clean-stage2-target-libbacktrace maybe-clean-stage2-target-libbacktrace
+ maybe-all-stage2-target-libbacktrace:
+ maybe-clean-stage2-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-all-stage2-target-libbacktrace: all-stage2-target-libbacktrace
+ all-stage2: all-stage2-target-libbacktrace
+ TARGET-stage2-target-libbacktrace = $(TARGET-target-libbacktrace)
+ all-stage2-target-libbacktrace: configure-stage2-target-libbacktrace
+ 	@[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE2_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGE2_TFLAGS)"  \
+ 		$(TARGET-stage2-target-libbacktrace)
+ 
+ maybe-clean-stage2-target-libbacktrace: clean-stage2-target-libbacktrace
+ clean-stage2: clean-stage2-target-libbacktrace
+ clean-stage2-target-libbacktrace:
+ 	@if [ $(current_stage) = stage2 ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stage2-libbacktrace/Makefile ] || exit 0; \
+ 	  $(MAKE) stage2-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libbacktrace-bootstrap
+ 
+ 
+ .PHONY: all-stage3-target-libbacktrace maybe-all-stage3-target-libbacktrace
+ .PHONY: clean-stage3-target-libbacktrace maybe-clean-stage3-target-libbacktrace
+ maybe-all-stage3-target-libbacktrace:
+ maybe-clean-stage3-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-all-stage3-target-libbacktrace: all-stage3-target-libbacktrace
+ all-stage3: all-stage3-target-libbacktrace
+ TARGET-stage3-target-libbacktrace = $(TARGET-target-libbacktrace)
+ all-stage3-target-libbacktrace: configure-stage3-target-libbacktrace
+ 	@[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE3_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGE3_TFLAGS)"  \
+ 		$(TARGET-stage3-target-libbacktrace)
+ 
+ maybe-clean-stage3-target-libbacktrace: clean-stage3-target-libbacktrace
+ clean-stage3: clean-stage3-target-libbacktrace
+ clean-stage3-target-libbacktrace:
+ 	@if [ $(current_stage) = stage3 ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stage3-libbacktrace/Makefile ] || exit 0; \
+ 	  $(MAKE) stage3-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libbacktrace-bootstrap
+ 
+ 
+ .PHONY: all-stage4-target-libbacktrace maybe-all-stage4-target-libbacktrace
+ .PHONY: clean-stage4-target-libbacktrace maybe-clean-stage4-target-libbacktrace
+ maybe-all-stage4-target-libbacktrace:
+ maybe-clean-stage4-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-all-stage4-target-libbacktrace: all-stage4-target-libbacktrace
+ all-stage4: all-stage4-target-libbacktrace
+ TARGET-stage4-target-libbacktrace = $(TARGET-target-libbacktrace)
+ all-stage4-target-libbacktrace: configure-stage4-target-libbacktrace
+ 	@[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE4_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGE4_TFLAGS)"  \
+ 		$(TARGET-stage4-target-libbacktrace)
+ 
+ maybe-clean-stage4-target-libbacktrace: clean-stage4-target-libbacktrace
+ clean-stage4: clean-stage4-target-libbacktrace
+ clean-stage4-target-libbacktrace:
+ 	@if [ $(current_stage) = stage4 ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stage4-libbacktrace/Makefile ] || exit 0; \
+ 	  $(MAKE) stage4-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libbacktrace-bootstrap
+ 
+ 
+ .PHONY: all-stageprofile-target-libbacktrace maybe-all-stageprofile-target-libbacktrace
+ .PHONY: clean-stageprofile-target-libbacktrace maybe-clean-stageprofile-target-libbacktrace
+ maybe-all-stageprofile-target-libbacktrace:
+ maybe-clean-stageprofile-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-all-stageprofile-target-libbacktrace: all-stageprofile-target-libbacktrace
+ all-stageprofile: all-stageprofile-target-libbacktrace
+ TARGET-stageprofile-target-libbacktrace = $(TARGET-target-libbacktrace)
+ all-stageprofile-target-libbacktrace: configure-stageprofile-target-libbacktrace
+ 	@[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEprofile_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEprofile_TFLAGS)"  \
+ 		$(TARGET-stageprofile-target-libbacktrace)
+ 
+ maybe-clean-stageprofile-target-libbacktrace: clean-stageprofile-target-libbacktrace
+ clean-stageprofile: clean-stageprofile-target-libbacktrace
+ clean-stageprofile-target-libbacktrace:
+ 	@if [ $(current_stage) = stageprofile ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stageprofile-libbacktrace/Makefile ] || exit 0; \
+ 	  $(MAKE) stageprofile-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libbacktrace-bootstrap
+ 
+ 
+ .PHONY: all-stagetrain-target-libbacktrace maybe-all-stagetrain-target-libbacktrace
+ .PHONY: clean-stagetrain-target-libbacktrace maybe-clean-stagetrain-target-libbacktrace
+ maybe-all-stagetrain-target-libbacktrace:
+ maybe-clean-stagetrain-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-all-stagetrain-target-libbacktrace: all-stagetrain-target-libbacktrace
+ all-stagetrain: all-stagetrain-target-libbacktrace
+ TARGET-stagetrain-target-libbacktrace = $(TARGET-target-libbacktrace)
+ all-stagetrain-target-libbacktrace: configure-stagetrain-target-libbacktrace
+ 	@[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEtrain_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEtrain_TFLAGS)"  \
+ 		$(TARGET-stagetrain-target-libbacktrace)
+ 
+ maybe-clean-stagetrain-target-libbacktrace: clean-stagetrain-target-libbacktrace
+ clean-stagetrain: clean-stagetrain-target-libbacktrace
+ clean-stagetrain-target-libbacktrace:
+ 	@if [ $(current_stage) = stagetrain ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stagetrain-libbacktrace/Makefile ] || exit 0; \
+ 	  $(MAKE) stagetrain-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libbacktrace-bootstrap
+ 
+ 
+ .PHONY: all-stagefeedback-target-libbacktrace maybe-all-stagefeedback-target-libbacktrace
+ .PHONY: clean-stagefeedback-target-libbacktrace maybe-clean-stagefeedback-target-libbacktrace
+ maybe-all-stagefeedback-target-libbacktrace:
+ maybe-clean-stagefeedback-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-all-stagefeedback-target-libbacktrace: all-stagefeedback-target-libbacktrace
+ all-stagefeedback: all-stagefeedback-target-libbacktrace
+ TARGET-stagefeedback-target-libbacktrace = $(TARGET-target-libbacktrace)
+ all-stagefeedback-target-libbacktrace: configure-stagefeedback-target-libbacktrace
+ 	@[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEfeedback_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEfeedback_TFLAGS)"  \
+ 		$(TARGET-stagefeedback-target-libbacktrace)
+ 
+ maybe-clean-stagefeedback-target-libbacktrace: clean-stagefeedback-target-libbacktrace
+ clean-stagefeedback: clean-stagefeedback-target-libbacktrace
+ clean-stagefeedback-target-libbacktrace:
+ 	@if [ $(current_stage) = stagefeedback ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stagefeedback-libbacktrace/Makefile ] || exit 0; \
+ 	  $(MAKE) stagefeedback-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libbacktrace-bootstrap
+ 
+ 
+ .PHONY: all-stageautoprofile-target-libbacktrace maybe-all-stageautoprofile-target-libbacktrace
+ .PHONY: clean-stageautoprofile-target-libbacktrace maybe-clean-stageautoprofile-target-libbacktrace
+ maybe-all-stageautoprofile-target-libbacktrace:
+ maybe-clean-stageautoprofile-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-all-stageautoprofile-target-libbacktrace: all-stageautoprofile-target-libbacktrace
+ all-stageautoprofile: all-stageautoprofile-target-libbacktrace
+ TARGET-stageautoprofile-target-libbacktrace = $(TARGET-target-libbacktrace)
+ all-stageautoprofile-target-libbacktrace: configure-stageautoprofile-target-libbacktrace
+ 	@[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautoprofile_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	$$s/gcc/config/i386/$(AUTO_PROFILE) \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEautoprofile_TFLAGS)"  \
+ 		$(TARGET-stageautoprofile-target-libbacktrace)
+ 
+ maybe-clean-stageautoprofile-target-libbacktrace: clean-stageautoprofile-target-libbacktrace
+ clean-stageautoprofile: clean-stageautoprofile-target-libbacktrace
+ clean-stageautoprofile-target-libbacktrace:
+ 	@if [ $(current_stage) = stageautoprofile ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stageautoprofile-libbacktrace/Makefile ] || exit 0; \
+ 	  $(MAKE) stageautoprofile-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libbacktrace-bootstrap
+ 
+ 
+ .PHONY: all-stageautofeedback-target-libbacktrace maybe-all-stageautofeedback-target-libbacktrace
+ .PHONY: clean-stageautofeedback-target-libbacktrace maybe-clean-stageautofeedback-target-libbacktrace
+ maybe-all-stageautofeedback-target-libbacktrace:
+ maybe-clean-stageautofeedback-target-libbacktrace:
+ @if target-libbacktrace-bootstrap
+ maybe-all-stageautofeedback-target-libbacktrace: all-stageautofeedback-target-libbacktrace
+ all-stageautofeedback: all-stageautofeedback-target-libbacktrace
+ TARGET-stageautofeedback-target-libbacktrace = $(TARGET-target-libbacktrace)
+ all-stageautofeedback-target-libbacktrace: configure-stageautofeedback-target-libbacktrace
+ 	@[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautofeedback_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \
+ 		$(TARGET-stageautofeedback-target-libbacktrace)
+ 
+ maybe-clean-stageautofeedback-target-libbacktrace: clean-stageautofeedback-target-libbacktrace
+ clean-stageautofeedback: clean-stageautofeedback-target-libbacktrace
+ clean-stageautofeedback-target-libbacktrace:
+ 	@if [ $(current_stage) = stageautofeedback ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stageautofeedback-libbacktrace/Makefile ] || exit 0; \
+ 	  $(MAKE) stageautofeedback-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libbacktrace-bootstrap
+ 
+ 
+ 
+ 
  
  
  .PHONY: check-target-libbacktrace maybe-check-target-libbacktrace
*************** install-info-target-libbacktrace: \
*** 48749,48754 ****
--- 51132,51164 ----
  
  @endif target-libbacktrace
  
+ .PHONY: maybe-install-dvi-target-libbacktrace install-dvi-target-libbacktrace
+ maybe-install-dvi-target-libbacktrace:
+ @if target-libbacktrace
+ maybe-install-dvi-target-libbacktrace: install-dvi-target-libbacktrace
+ 
+ install-dvi-target-libbacktrace: \
+     configure-target-libbacktrace \
+     dvi-target-libbacktrace 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libbacktrace/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libbacktrace"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libbacktrace && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libbacktrace
+ 
  .PHONY: maybe-install-pdf-target-libbacktrace install-pdf-target-libbacktrace
  maybe-install-pdf-target-libbacktrace:
  @if target-libbacktrace
*************** install-info-target-libquadmath: \
*** 49207,49212 ****
--- 51617,51649 ----
  
  @endif target-libquadmath
  
+ .PHONY: maybe-install-dvi-target-libquadmath install-dvi-target-libquadmath
+ maybe-install-dvi-target-libquadmath:
+ @if target-libquadmath
+ maybe-install-dvi-target-libquadmath: install-dvi-target-libquadmath
+ 
+ install-dvi-target-libquadmath: \
+     configure-target-libquadmath \
+     dvi-target-libquadmath 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libquadmath/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libquadmath"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libquadmath && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libquadmath
+ 
  .PHONY: maybe-install-pdf-target-libquadmath install-pdf-target-libquadmath
  maybe-install-pdf-target-libquadmath:
  @if target-libquadmath
*************** install-info-target-libgfortran: \
*** 49665,49670 ****
--- 52102,52134 ----
  
  @endif target-libgfortran
  
+ .PHONY: maybe-install-dvi-target-libgfortran install-dvi-target-libgfortran
+ maybe-install-dvi-target-libgfortran:
+ @if target-libgfortran
+ maybe-install-dvi-target-libgfortran: install-dvi-target-libgfortran
+ 
+ install-dvi-target-libgfortran: \
+     configure-target-libgfortran \
+     dvi-target-libgfortran 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libgfortran/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libgfortran"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libgfortran && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libgfortran
+ 
  .PHONY: maybe-install-pdf-target-libgfortran install-pdf-target-libgfortran
  maybe-install-pdf-target-libgfortran:
  @if target-libgfortran
*************** maybe-TAGS-target-libobjc:
*** 50075,50098 ****
  @if target-libobjc
  maybe-TAGS-target-libobjc: TAGS-target-libobjc
  
! TAGS-target-libobjc: \
!     configure-target-libobjc 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libobjc/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
! 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libobjc"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libobjc && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           TAGS) \
! 	  || exit 1
  
  @endif target-libobjc
  
--- 52539,52546 ----
  @if target-libobjc
  maybe-TAGS-target-libobjc: TAGS-target-libobjc
  
! # libobjc doesn't support TAGS.
! TAGS-target-libobjc:
  
  @endif target-libobjc
  
*************** install-info-target-libobjc: \
*** 50123,50128 ****
--- 52571,52586 ----
  
  @endif target-libobjc
  
+ .PHONY: maybe-install-dvi-target-libobjc install-dvi-target-libobjc
+ maybe-install-dvi-target-libobjc:
+ @if target-libobjc
+ maybe-install-dvi-target-libobjc: install-dvi-target-libobjc
+ 
+ # libobjc doesn't support install-dvi.
+ install-dvi-target-libobjc:
+ 
+ @endif target-libobjc
+ 
  .PHONY: maybe-install-pdf-target-libobjc install-pdf-target-libobjc
  maybe-install-pdf-target-libobjc:
  @if target-libobjc
*************** install-info-target-libgo: \
*** 50581,50586 ****
--- 53039,53071 ----
  
  @endif target-libgo
  
+ .PHONY: maybe-install-dvi-target-libgo install-dvi-target-libgo
+ maybe-install-dvi-target-libgo:
+ @if target-libgo
+ maybe-install-dvi-target-libgo: install-dvi-target-libgo
+ 
+ install-dvi-target-libgo: \
+     configure-target-libgo \
+     dvi-target-libgo 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libgo/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libgo"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libgo && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libgo
+ 
  .PHONY: maybe-install-pdf-target-libgo install-pdf-target-libgo
  maybe-install-pdf-target-libgo:
  @if target-libgo
*************** maintainer-clean-target-libgo:
*** 50765,50805 ****
  
  
  
! .PHONY: configure-target-libhsail-rt maybe-configure-target-libhsail-rt
! maybe-configure-target-libhsail-rt:
  @if gcc-bootstrap
! configure-target-libhsail-rt: stage_current
  @endif gcc-bootstrap
! @if target-libhsail-rt
! maybe-configure-target-libhsail-rt: configure-target-libhsail-rt
! configure-target-libhsail-rt: 
! 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	echo "Checking multilib configuration for libhsail-rt..."; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libhsail-rt; \
! 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libhsail-rt/multilib.tmp 2> /dev/null; \
! 	if test -r $(TARGET_SUBDIR)/libhsail-rt/multilib.out; then \
! 	  if cmp -s $(TARGET_SUBDIR)/libhsail-rt/multilib.tmp $(TARGET_SUBDIR)/libhsail-rt/multilib.out; then \
! 	    rm -f $(TARGET_SUBDIR)/libhsail-rt/multilib.tmp; \
  	  else \
! 	    rm -f $(TARGET_SUBDIR)/libhsail-rt/Makefile; \
! 	    mv $(TARGET_SUBDIR)/libhsail-rt/multilib.tmp $(TARGET_SUBDIR)/libhsail-rt/multilib.out; \
  	  fi; \
  	else \
! 	  mv $(TARGET_SUBDIR)/libhsail-rt/multilib.tmp $(TARGET_SUBDIR)/libhsail-rt/multilib.out; \
  	fi; \
! 	test ! -f $(TARGET_SUBDIR)/libhsail-rt/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libhsail-rt; \
  	$(NORMAL_TARGET_EXPORTS)  \
! 	echo Configuring in $(TARGET_SUBDIR)/libhsail-rt; \
! 	cd "$(TARGET_SUBDIR)/libhsail-rt" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
! 	  *) topdir=`echo $(TARGET_SUBDIR)/libhsail-rt/ | \
  		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
  	esac; \
! 	module_srcdir=libhsail-rt; \
  	rm -f no-such-file || : ; \
  	CONFIG_SITE=no-such-file $(SHELL) \
  	  $$s/$$module_srcdir/configure \
--- 53250,53289 ----
  
  
  
! .PHONY: configure-target-libphobos maybe-configure-target-libphobos
! maybe-configure-target-libphobos:
  @if gcc-bootstrap
! configure-target-libphobos: stage_current
  @endif gcc-bootstrap
! @if target-libphobos
! maybe-configure-target-libphobos: configure-target-libphobos
! configure-target-libphobos: 
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	echo "Checking multilib configuration for libphobos..."; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
! 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null; \
! 	if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
! 	  if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
! 	    rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
  	  else \
! 	    rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
! 	    mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
  	  fi; \
  	else \
! 	  mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
  	fi; \
! 	test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
  	$(NORMAL_TARGET_EXPORTS)  \
! 	echo Configuring in $(TARGET_SUBDIR)/libphobos; \
! 	cd "$(TARGET_SUBDIR)/libphobos" || exit 1; \
  	case $(srcdir) in \
  	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
! 	  *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
  		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
  	esac; \
! 	module_srcdir=libphobos; \
  	rm -f no-such-file || : ; \
  	CONFIG_SITE=no-such-file $(SHELL) \
  	  $$s/$$module_srcdir/configure \
*************** configure-target-libhsail-rt:
*** 50807,51293 ****
  	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
  	  --target=${target_alias}  \
  	  || exit 1
! @endif target-libhsail-rt
! 
! 
  
  
  
! .PHONY: all-target-libhsail-rt maybe-all-target-libhsail-rt
! maybe-all-target-libhsail-rt:
! @if gcc-bootstrap
! all-target-libhsail-rt: stage_current
! @endif gcc-bootstrap
! @if target-libhsail-rt
! TARGET-target-libhsail-rt=all
! maybe-all-target-libhsail-rt: all-target-libhsail-rt
! all-target-libhsail-rt: configure-target-libhsail-rt
! 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(NORMAL_TARGET_EXPORTS)  \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS)   \
! 		$(TARGET-target-libhsail-rt))
! @endif target-libhsail-rt
! 
! 
! 
! 
! 
! .PHONY: check-target-libhsail-rt maybe-check-target-libhsail-rt
! maybe-check-target-libhsail-rt:
! @if target-libhsail-rt
! maybe-check-target-libhsail-rt: check-target-libhsail-rt
  
! check-target-libhsail-rt:
! 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)   check)
! 
! @endif target-libhsail-rt
! 
! .PHONY: install-target-libhsail-rt maybe-install-target-libhsail-rt
! maybe-install-target-libhsail-rt:
! @if target-libhsail-rt
! maybe-install-target-libhsail-rt: install-target-libhsail-rt
  
! install-target-libhsail-rt: installdirs
! 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install)
! 
! @endif target-libhsail-rt
! 
! .PHONY: install-strip-target-libhsail-rt maybe-install-strip-target-libhsail-rt
! maybe-install-strip-target-libhsail-rt:
! @if target-libhsail-rt
! maybe-install-strip-target-libhsail-rt: install-strip-target-libhsail-rt
  
! install-strip-target-libhsail-rt: installdirs
! 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(TARGET_FLAGS_TO_PASS)  install-strip)
! 
! @endif target-libhsail-rt
! 
! # Other targets (info, dvi, pdf, etc.)
! 
! .PHONY: maybe-info-target-libhsail-rt info-target-libhsail-rt
! maybe-info-target-libhsail-rt:
! @if target-libhsail-rt
! maybe-info-target-libhsail-rt: info-target-libhsail-rt
  
! info-target-libhsail-rt: \
!     configure-target-libhsail-rt 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing info in $(TARGET_SUBDIR)/libhsail-rt"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           info) \
! 	  || exit 1
! 
! @endif target-libhsail-rt
! 
! .PHONY: maybe-dvi-target-libhsail-rt dvi-target-libhsail-rt
! maybe-dvi-target-libhsail-rt:
! @if target-libhsail-rt
! maybe-dvi-target-libhsail-rt: dvi-target-libhsail-rt
  
! dvi-target-libhsail-rt: \
!     configure-target-libhsail-rt 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing dvi in $(TARGET_SUBDIR)/libhsail-rt"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           dvi) \
! 	  || exit 1
! 
! @endif target-libhsail-rt
! 
! .PHONY: maybe-pdf-target-libhsail-rt pdf-target-libhsail-rt
! maybe-pdf-target-libhsail-rt:
! @if target-libhsail-rt
! maybe-pdf-target-libhsail-rt: pdf-target-libhsail-rt
  
! pdf-target-libhsail-rt: \
!     configure-target-libhsail-rt 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing pdf in $(TARGET_SUBDIR)/libhsail-rt"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           pdf) \
! 	  || exit 1
! 
! @endif target-libhsail-rt
! 
! .PHONY: maybe-html-target-libhsail-rt html-target-libhsail-rt
! maybe-html-target-libhsail-rt:
! @if target-libhsail-rt
! maybe-html-target-libhsail-rt: html-target-libhsail-rt
  
! html-target-libhsail-rt: \
!     configure-target-libhsail-rt 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing html in $(TARGET_SUBDIR)/libhsail-rt"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           html) \
! 	  || exit 1
! 
! @endif target-libhsail-rt
! 
! .PHONY: maybe-TAGS-target-libhsail-rt TAGS-target-libhsail-rt
! maybe-TAGS-target-libhsail-rt:
! @if target-libhsail-rt
! maybe-TAGS-target-libhsail-rt: TAGS-target-libhsail-rt
  
! TAGS-target-libhsail-rt: \
!     configure-target-libhsail-rt 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing TAGS in $(TARGET_SUBDIR)/libhsail-rt"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           TAGS) \
! 	  || exit 1
! 
! @endif target-libhsail-rt
  
- .PHONY: maybe-install-info-target-libhsail-rt install-info-target-libhsail-rt
- maybe-install-info-target-libhsail-rt:
- @if target-libhsail-rt
- maybe-install-info-target-libhsail-rt: install-info-target-libhsail-rt
  
- install-info-target-libhsail-rt: \
-     configure-target-libhsail-rt \
-     info-target-libhsail-rt 
- 	@: $(MAKE); $(unstage)
- 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
- 	r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(NORMAL_TARGET_EXPORTS) \
- 	echo "Doing install-info in $(TARGET_SUBDIR)/libhsail-rt"; \
- 	for flag in $(EXTRA_TARGET_FLAGS); do \
- 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
- 	done; \
- 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
- 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
- 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- 	          "RANLIB=$${RANLIB}" \
- 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
- 	           install-info) \
- 	  || exit 1
  
- @endif target-libhsail-rt
  
- .PHONY: maybe-install-pdf-target-libhsail-rt install-pdf-target-libhsail-rt
- maybe-install-pdf-target-libhsail-rt:
- @if target-libhsail-rt
- maybe-install-pdf-target-libhsail-rt: install-pdf-target-libhsail-rt
  
! install-pdf-target-libhsail-rt: \
!     configure-target-libhsail-rt \
!     pdf-target-libhsail-rt 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-pdf in $(TARGET_SUBDIR)/libhsail-rt"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           install-pdf) \
! 	  || exit 1
  
- @endif target-libhsail-rt
  
- .PHONY: maybe-install-html-target-libhsail-rt install-html-target-libhsail-rt
- maybe-install-html-target-libhsail-rt:
- @if target-libhsail-rt
- maybe-install-html-target-libhsail-rt: install-html-target-libhsail-rt
  
! install-html-target-libhsail-rt: \
!     configure-target-libhsail-rt \
!     html-target-libhsail-rt 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing install-html in $(TARGET_SUBDIR)/libhsail-rt"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           install-html) \
! 	  || exit 1
  
! @endif target-libhsail-rt
  
- .PHONY: maybe-installcheck-target-libhsail-rt installcheck-target-libhsail-rt
- maybe-installcheck-target-libhsail-rt:
- @if target-libhsail-rt
- maybe-installcheck-target-libhsail-rt: installcheck-target-libhsail-rt
  
! installcheck-target-libhsail-rt: \
!     configure-target-libhsail-rt 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing installcheck in $(TARGET_SUBDIR)/libhsail-rt"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           installcheck) \
! 	  || exit 1
  
! @endif target-libhsail-rt
  
- .PHONY: maybe-mostlyclean-target-libhsail-rt mostlyclean-target-libhsail-rt
- maybe-mostlyclean-target-libhsail-rt:
- @if target-libhsail-rt
- maybe-mostlyclean-target-libhsail-rt: mostlyclean-target-libhsail-rt
  
! mostlyclean-target-libhsail-rt: 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing mostlyclean in $(TARGET_SUBDIR)/libhsail-rt"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           mostlyclean) \
! 	  || exit 1
  
! @endif target-libhsail-rt
  
- .PHONY: maybe-clean-target-libhsail-rt clean-target-libhsail-rt
- maybe-clean-target-libhsail-rt:
- @if target-libhsail-rt
- maybe-clean-target-libhsail-rt: clean-target-libhsail-rt
  
! clean-target-libhsail-rt: 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing clean in $(TARGET_SUBDIR)/libhsail-rt"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           clean) \
! 	  || exit 1
  
! @endif target-libhsail-rt
  
- .PHONY: maybe-distclean-target-libhsail-rt distclean-target-libhsail-rt
- maybe-distclean-target-libhsail-rt:
- @if target-libhsail-rt
- maybe-distclean-target-libhsail-rt: distclean-target-libhsail-rt
  
! distclean-target-libhsail-rt: 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing distclean in $(TARGET_SUBDIR)/libhsail-rt"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           distclean) \
! 	  || exit 1
  
! @endif target-libhsail-rt
  
- .PHONY: maybe-maintainer-clean-target-libhsail-rt maintainer-clean-target-libhsail-rt
- maybe-maintainer-clean-target-libhsail-rt:
- @if target-libhsail-rt
- maybe-maintainer-clean-target-libhsail-rt: maintainer-clean-target-libhsail-rt
  
! maintainer-clean-target-libhsail-rt: 
! 	@: $(MAKE); $(unstage)
! 	@[ -f $(TARGET_SUBDIR)/libhsail-rt/Makefile ] || exit 0; \
! 	r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	echo "Doing maintainer-clean in $(TARGET_SUBDIR)/libhsail-rt"; \
! 	for flag in $(EXTRA_TARGET_FLAGS); do \
! 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
! 	done; \
! 	(cd $(TARGET_SUBDIR)/libhsail-rt && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
! 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
! 	          "RANLIB=$${RANLIB}" \
! 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
! 	           maintainer-clean) \
! 	  || exit 1
! 
! @endif target-libhsail-rt
! 
! 
  
  
  
! .PHONY: configure-target-libphobos maybe-configure-target-libphobos
! maybe-configure-target-libphobos:
! @if gcc-bootstrap
! configure-target-libphobos: stage_current
! @endif gcc-bootstrap
! @if target-libphobos
! maybe-configure-target-libphobos: configure-target-libphobos
! configure-target-libphobos: 
! 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	echo "Checking multilib configuration for libphobos..."; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
! 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null; \
! 	if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
! 	  if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
! 	    rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
! 	  else \
! 	    rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
! 	    mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
! 	  fi; \
  	else \
! 	  mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
  	fi; \
! 	test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
! 	$(NORMAL_TARGET_EXPORTS)  \
! 	echo Configuring in $(TARGET_SUBDIR)/libphobos; \
! 	cd "$(TARGET_SUBDIR)/libphobos" || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
! 	  *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
! 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
! 	esac; \
! 	module_srcdir=libphobos; \
! 	rm -f no-such-file || : ; \
! 	CONFIG_SITE=no-such-file $(SHELL) \
! 	  $$s/$$module_srcdir/configure \
! 	  --srcdir=$${topdir}/$$module_srcdir \
! 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
! 	  --target=${target_alias}  \
! 	  || exit 1
! @endif target-libphobos
  
  
  
  
  
! .PHONY: all-target-libphobos maybe-all-target-libphobos
! maybe-all-target-libphobos:
! @if gcc-bootstrap
! all-target-libphobos: stage_current
! @endif gcc-bootstrap
! @if target-libphobos
! TARGET-target-libphobos=all
! maybe-all-target-libphobos: all-target-libphobos
! all-target-libphobos: configure-target-libphobos
! 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(NORMAL_TARGET_EXPORTS)  \
! 	(cd $(TARGET_SUBDIR)/libphobos && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS)   \
! 		$(TARGET-target-libphobos))
! @endif target-libphobos
  
  
  
--- 53291,54105 ----
  	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
  	  --target=${target_alias}  \
  	  || exit 1
! @endif target-libphobos
  
  
  
! .PHONY: configure-stage1-target-libphobos maybe-configure-stage1-target-libphobos
! maybe-configure-stage1-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-configure-stage1-target-libphobos: configure-stage1-target-libphobos
! configure-stage1-target-libphobos:
! 	@[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
! 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	TFLAGS="$(STAGE1_TFLAGS)"; \
! 	echo "Checking multilib configuration for libphobos..."; \
! 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null; \
! 	if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
! 	  if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
! 	    rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
! 	  else \
! 	    rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
! 	    mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
! 	  fi; \
! 	else \
! 	  mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
! 	fi; \
! 	test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
! 	echo Configuring stage 1 in $(TARGET_SUBDIR)/libphobos; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
! 	cd $(TARGET_SUBDIR)/libphobos || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
! 	  *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
! 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
! 	esac; \
! 	module_srcdir=libphobos; \
! 	$(SHELL) $$s/$$module_srcdir/configure \
! 	  --srcdir=$${topdir}/$$module_srcdir \
! 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
! 	  --target=${target_alias} \
! 	   \
! 	  $(STAGE1_CONFIGURE_FLAGS)
! @endif target-libphobos-bootstrap
  
! .PHONY: configure-stage2-target-libphobos maybe-configure-stage2-target-libphobos
! maybe-configure-stage2-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-configure-stage2-target-libphobos: configure-stage2-target-libphobos
! configure-stage2-target-libphobos:
! 	@[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
! 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE2_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libphobos..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	 \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
! 	echo Configuring stage 2 in $(TARGET_SUBDIR)/libphobos; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
! 	cd $(TARGET_SUBDIR)/libphobos || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
! 	  *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
! 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
! 	esac; \
! 	module_srcdir=libphobos; \
! 	$(SHELL) $$s/$$module_srcdir/configure \
! 	  --srcdir=$${topdir}/$$module_srcdir \
! 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
! 	  --target=${target_alias} \
! 	  --with-build-libsubdir=$(HOST_SUBDIR) \
! 	  $(STAGE2_CONFIGURE_FLAGS)
! @endif target-libphobos-bootstrap
  
! .PHONY: configure-stage3-target-libphobos maybe-configure-stage3-target-libphobos
! maybe-configure-stage3-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-configure-stage3-target-libphobos: configure-stage3-target-libphobos
! configure-stage3-target-libphobos:
! 	@[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
! 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE3_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libphobos..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	 \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
! 	echo Configuring stage 3 in $(TARGET_SUBDIR)/libphobos; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
! 	cd $(TARGET_SUBDIR)/libphobos || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
! 	  *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
! 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
! 	esac; \
! 	module_srcdir=libphobos; \
! 	$(SHELL) $$s/$$module_srcdir/configure \
! 	  --srcdir=$${topdir}/$$module_srcdir \
! 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
! 	  --target=${target_alias} \
! 	  --with-build-libsubdir=$(HOST_SUBDIR) \
! 	  $(STAGE3_CONFIGURE_FLAGS)
! @endif target-libphobos-bootstrap
  
! .PHONY: configure-stage4-target-libphobos maybe-configure-stage4-target-libphobos
! maybe-configure-stage4-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-configure-stage4-target-libphobos: configure-stage4-target-libphobos
! configure-stage4-target-libphobos:
! 	@[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
! 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE4_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libphobos..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	 \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
! 	echo Configuring stage 4 in $(TARGET_SUBDIR)/libphobos; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
! 	cd $(TARGET_SUBDIR)/libphobos || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
! 	  *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
! 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
! 	esac; \
! 	module_srcdir=libphobos; \
! 	$(SHELL) $$s/$$module_srcdir/configure \
! 	  --srcdir=$${topdir}/$$module_srcdir \
! 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
! 	  --target=${target_alias} \
! 	  --with-build-libsubdir=$(HOST_SUBDIR) \
! 	  $(STAGE4_CONFIGURE_FLAGS)
! @endif target-libphobos-bootstrap
  
! .PHONY: configure-stageprofile-target-libphobos maybe-configure-stageprofile-target-libphobos
! maybe-configure-stageprofile-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-configure-stageprofile-target-libphobos: configure-stageprofile-target-libphobos
! configure-stageprofile-target-libphobos:
! 	@[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
! 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEprofile_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libphobos..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	 \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
! 	echo Configuring stage profile in $(TARGET_SUBDIR)/libphobos; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
! 	cd $(TARGET_SUBDIR)/libphobos || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
! 	  *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
! 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
! 	esac; \
! 	module_srcdir=libphobos; \
! 	$(SHELL) $$s/$$module_srcdir/configure \
! 	  --srcdir=$${topdir}/$$module_srcdir \
! 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
! 	  --target=${target_alias} \
! 	  --with-build-libsubdir=$(HOST_SUBDIR) \
! 	  $(STAGEprofile_CONFIGURE_FLAGS)
! @endif target-libphobos-bootstrap
  
! .PHONY: configure-stagetrain-target-libphobos maybe-configure-stagetrain-target-libphobos
! maybe-configure-stagetrain-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-configure-stagetrain-target-libphobos: configure-stagetrain-target-libphobos
! configure-stagetrain-target-libphobos:
! 	@[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start
! 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEtrain_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libphobos..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	 \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
! 	echo Configuring stage train in $(TARGET_SUBDIR)/libphobos; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
! 	cd $(TARGET_SUBDIR)/libphobos || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
! 	  *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
! 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
! 	esac; \
! 	module_srcdir=libphobos; \
! 	$(SHELL) $$s/$$module_srcdir/configure \
! 	  --srcdir=$${topdir}/$$module_srcdir \
! 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
! 	  --target=${target_alias} \
! 	  --with-build-libsubdir=$(HOST_SUBDIR) \
! 	  $(STAGEtrain_CONFIGURE_FLAGS)
! @endif target-libphobos-bootstrap
  
! .PHONY: configure-stagefeedback-target-libphobos maybe-configure-stagefeedback-target-libphobos
! maybe-configure-stagefeedback-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-configure-stagefeedback-target-libphobos: configure-stagefeedback-target-libphobos
! configure-stagefeedback-target-libphobos:
! 	@[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
! 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEfeedback_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libphobos..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	 \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
! 	echo Configuring stage feedback in $(TARGET_SUBDIR)/libphobos; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
! 	cd $(TARGET_SUBDIR)/libphobos || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
! 	  *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
! 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
! 	esac; \
! 	module_srcdir=libphobos; \
! 	$(SHELL) $$s/$$module_srcdir/configure \
! 	  --srcdir=$${topdir}/$$module_srcdir \
! 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
! 	  --target=${target_alias} \
! 	  --with-build-libsubdir=$(HOST_SUBDIR) \
! 	  $(STAGEfeedback_CONFIGURE_FLAGS)
! @endif target-libphobos-bootstrap
  
! .PHONY: configure-stageautoprofile-target-libphobos maybe-configure-stageautoprofile-target-libphobos
! maybe-configure-stageautoprofile-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-configure-stageautoprofile-target-libphobos: configure-stageautoprofile-target-libphobos
! configure-stageautoprofile-target-libphobos:
! 	@[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start
! 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautoprofile_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libphobos..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	 \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
! 	echo Configuring stage autoprofile in $(TARGET_SUBDIR)/libphobos; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
! 	cd $(TARGET_SUBDIR)/libphobos || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
! 	  *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
! 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
! 	esac; \
! 	module_srcdir=libphobos; \
! 	$(SHELL) $$s/$$module_srcdir/configure \
! 	  --srcdir=$${topdir}/$$module_srcdir \
! 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
! 	  --target=${target_alias} \
! 	  --with-build-libsubdir=$(HOST_SUBDIR) \
! 	  $(STAGEautoprofile_CONFIGURE_FLAGS)
! @endif target-libphobos-bootstrap
  
! .PHONY: configure-stageautofeedback-target-libphobos maybe-configure-stageautofeedback-target-libphobos
! maybe-configure-stageautofeedback-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-configure-stageautofeedback-target-libphobos: configure-stageautofeedback-target-libphobos
! configure-stageautofeedback-target-libphobos:
! 	@[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start
! 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautofeedback_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libphobos..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libphobos/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libphobos/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libphobos/multilib.tmp $(TARGET_SUBDIR)/libphobos/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libphobos/Makefile || exit 0; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	 \
! 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
! 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
! 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
! 	echo Configuring stage autofeedback in $(TARGET_SUBDIR)/libphobos; \
! 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libphobos; \
! 	cd $(TARGET_SUBDIR)/libphobos || exit 1; \
! 	case $(srcdir) in \
! 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
! 	  *) topdir=`echo $(TARGET_SUBDIR)/libphobos/ | \
! 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
! 	esac; \
! 	module_srcdir=libphobos; \
! 	$(SHELL) $$s/$$module_srcdir/configure \
! 	  --srcdir=$${topdir}/$$module_srcdir \
! 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
! 	  --target=${target_alias} \
! 	  --with-build-libsubdir=$(HOST_SUBDIR) \
! 	  $(STAGEautofeedback_CONFIGURE_FLAGS)
! @endif target-libphobos-bootstrap
  
  
  
  
  
! .PHONY: all-target-libphobos maybe-all-target-libphobos
! maybe-all-target-libphobos:
! @if gcc-bootstrap
! all-target-libphobos: stage_current
! @endif gcc-bootstrap
! @if target-libphobos
! TARGET-target-libphobos=all
! maybe-all-target-libphobos: all-target-libphobos
! all-target-libphobos: configure-target-libphobos
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	$(NORMAL_TARGET_EXPORTS)  \
! 	(cd $(TARGET_SUBDIR)/libphobos && \
! 	  $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS)   \
! 		$(TARGET-target-libphobos))
! @endif target-libphobos
  
  
  
! .PHONY: all-stage1-target-libphobos maybe-all-stage1-target-libphobos
! .PHONY: clean-stage1-target-libphobos maybe-clean-stage1-target-libphobos
! maybe-all-stage1-target-libphobos:
! maybe-clean-stage1-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-all-stage1-target-libphobos: all-stage1-target-libphobos
! all-stage1: all-stage1-target-libphobos
! TARGET-stage1-target-libphobos = $(TARGET-target-libphobos)
! all-stage1-target-libphobos: configure-stage1-target-libphobos
! 	@[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	TFLAGS="$(STAGE1_TFLAGS)"; \
! 	$(NORMAL_TARGET_EXPORTS)  \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	 \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
! 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
! 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
! 		$(EXTRA_TARGET_FLAGS)  \
! 		  \
! 		TFLAGS="$(STAGE1_TFLAGS)"  \
! 		$(TARGET-stage1-target-libphobos)
  
! maybe-clean-stage1-target-libphobos: clean-stage1-target-libphobos
! clean-stage1: clean-stage1-target-libphobos
! clean-stage1-target-libphobos:
! 	@if [ $(current_stage) = stage1 ]; then \
! 	  [ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \
! 	else \
! 	  [ -f $(TARGET_SUBDIR)/stage1-libphobos/Makefile ] || exit 0; \
! 	  $(MAKE) stage1-start; \
! 	fi; \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	$(MAKE) $(EXTRA_TARGET_FLAGS)  \
! 	  clean
! @endif target-libphobos-bootstrap
  
  
! .PHONY: all-stage2-target-libphobos maybe-all-stage2-target-libphobos
! .PHONY: clean-stage2-target-libphobos maybe-clean-stage2-target-libphobos
! maybe-all-stage2-target-libphobos:
! maybe-clean-stage2-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-all-stage2-target-libphobos: all-stage2-target-libphobos
! all-stage2: all-stage2-target-libphobos
! TARGET-stage2-target-libphobos = $(TARGET-target-libphobos)
! all-stage2-target-libphobos: configure-stage2-target-libphobos
! 	@[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE2_TFLAGS)"; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	  \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	 \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
! 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
! 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
! 		$(EXTRA_TARGET_FLAGS)   \
! 		TFLAGS="$(STAGE2_TFLAGS)"  \
! 		$(TARGET-stage2-target-libphobos)
  
! maybe-clean-stage2-target-libphobos: clean-stage2-target-libphobos
! clean-stage2: clean-stage2-target-libphobos
! clean-stage2-target-libphobos:
! 	@if [ $(current_stage) = stage2 ]; then \
! 	  [ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \
! 	else \
! 	  [ -f $(TARGET_SUBDIR)/stage2-libphobos/Makefile ] || exit 0; \
! 	  $(MAKE) stage2-start; \
! 	fi; \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
! @endif target-libphobos-bootstrap
  
  
! .PHONY: all-stage3-target-libphobos maybe-all-stage3-target-libphobos
! .PHONY: clean-stage3-target-libphobos maybe-clean-stage3-target-libphobos
! maybe-all-stage3-target-libphobos:
! maybe-clean-stage3-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-all-stage3-target-libphobos: all-stage3-target-libphobos
! all-stage3: all-stage3-target-libphobos
! TARGET-stage3-target-libphobos = $(TARGET-target-libphobos)
! all-stage3-target-libphobos: configure-stage3-target-libphobos
! 	@[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE3_TFLAGS)"; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	  \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	 \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
! 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
! 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
! 		$(EXTRA_TARGET_FLAGS)   \
! 		TFLAGS="$(STAGE3_TFLAGS)"  \
! 		$(TARGET-stage3-target-libphobos)
  
! maybe-clean-stage3-target-libphobos: clean-stage3-target-libphobos
! clean-stage3: clean-stage3-target-libphobos
! clean-stage3-target-libphobos:
! 	@if [ $(current_stage) = stage3 ]; then \
! 	  [ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \
! 	else \
! 	  [ -f $(TARGET_SUBDIR)/stage3-libphobos/Makefile ] || exit 0; \
! 	  $(MAKE) stage3-start; \
! 	fi; \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
! @endif target-libphobos-bootstrap
  
  
! .PHONY: all-stage4-target-libphobos maybe-all-stage4-target-libphobos
! .PHONY: clean-stage4-target-libphobos maybe-clean-stage4-target-libphobos
! maybe-all-stage4-target-libphobos:
! maybe-clean-stage4-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-all-stage4-target-libphobos: all-stage4-target-libphobos
! all-stage4: all-stage4-target-libphobos
! TARGET-stage4-target-libphobos = $(TARGET-target-libphobos)
! all-stage4-target-libphobos: configure-stage4-target-libphobos
! 	@[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE4_TFLAGS)"; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	  \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	 \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
! 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
! 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
! 		$(EXTRA_TARGET_FLAGS)   \
! 		TFLAGS="$(STAGE4_TFLAGS)"  \
! 		$(TARGET-stage4-target-libphobos)
  
! maybe-clean-stage4-target-libphobos: clean-stage4-target-libphobos
! clean-stage4: clean-stage4-target-libphobos
! clean-stage4-target-libphobos:
! 	@if [ $(current_stage) = stage4 ]; then \
! 	  [ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \
! 	else \
! 	  [ -f $(TARGET_SUBDIR)/stage4-libphobos/Makefile ] || exit 0; \
! 	  $(MAKE) stage4-start; \
! 	fi; \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
! @endif target-libphobos-bootstrap
  
  
! .PHONY: all-stageprofile-target-libphobos maybe-all-stageprofile-target-libphobos
! .PHONY: clean-stageprofile-target-libphobos maybe-clean-stageprofile-target-libphobos
! maybe-all-stageprofile-target-libphobos:
! maybe-clean-stageprofile-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-all-stageprofile-target-libphobos: all-stageprofile-target-libphobos
! all-stageprofile: all-stageprofile-target-libphobos
! TARGET-stageprofile-target-libphobos = $(TARGET-target-libphobos)
! all-stageprofile-target-libphobos: configure-stageprofile-target-libphobos
! 	@[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEprofile_TFLAGS)"; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	  \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	 \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
! 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
! 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
! 		$(EXTRA_TARGET_FLAGS)   \
! 		TFLAGS="$(STAGEprofile_TFLAGS)"  \
! 		$(TARGET-stageprofile-target-libphobos)
  
! maybe-clean-stageprofile-target-libphobos: clean-stageprofile-target-libphobos
! clean-stageprofile: clean-stageprofile-target-libphobos
! clean-stageprofile-target-libphobos:
! 	@if [ $(current_stage) = stageprofile ]; then \
! 	  [ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \
! 	else \
! 	  [ -f $(TARGET_SUBDIR)/stageprofile-libphobos/Makefile ] || exit 0; \
! 	  $(MAKE) stageprofile-start; \
! 	fi; \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
! @endif target-libphobos-bootstrap
  
  
! .PHONY: all-stagetrain-target-libphobos maybe-all-stagetrain-target-libphobos
! .PHONY: clean-stagetrain-target-libphobos maybe-clean-stagetrain-target-libphobos
! maybe-all-stagetrain-target-libphobos:
! maybe-clean-stagetrain-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-all-stagetrain-target-libphobos: all-stagetrain-target-libphobos
! all-stagetrain: all-stagetrain-target-libphobos
! TARGET-stagetrain-target-libphobos = $(TARGET-target-libphobos)
! all-stagetrain-target-libphobos: configure-stagetrain-target-libphobos
! 	@[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEtrain_TFLAGS)"; \
  	$(NORMAL_TARGET_EXPORTS) \
! 	  \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	 \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
! 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
! 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
! 		$(EXTRA_TARGET_FLAGS)   \
! 		TFLAGS="$(STAGEtrain_TFLAGS)"  \
! 		$(TARGET-stagetrain-target-libphobos)
  
+ maybe-clean-stagetrain-target-libphobos: clean-stagetrain-target-libphobos
+ clean-stagetrain: clean-stagetrain-target-libphobos
+ clean-stagetrain-target-libphobos:
+ 	@if [ $(current_stage) = stagetrain ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stagetrain-libphobos/Makefile ] || exit 0; \
+ 	  $(MAKE) stagetrain-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libphobos && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libphobos-bootstrap
  
  
! .PHONY: all-stagefeedback-target-libphobos maybe-all-stagefeedback-target-libphobos
! .PHONY: clean-stagefeedback-target-libphobos maybe-clean-stagefeedback-target-libphobos
! maybe-all-stagefeedback-target-libphobos:
! maybe-clean-stagefeedback-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-all-stagefeedback-target-libphobos: all-stagefeedback-target-libphobos
! all-stagefeedback: all-stagefeedback-target-libphobos
! TARGET-stagefeedback-target-libphobos = $(TARGET-target-libphobos)
! all-stagefeedback-target-libphobos: configure-stagefeedback-target-libphobos
! 	@[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	TFLAGS="$(STAGEfeedback_TFLAGS)"; \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	  \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	 \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
! 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
! 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
! 		$(EXTRA_TARGET_FLAGS)   \
! 		TFLAGS="$(STAGEfeedback_TFLAGS)"  \
! 		$(TARGET-stagefeedback-target-libphobos)
! 
! maybe-clean-stagefeedback-target-libphobos: clean-stagefeedback-target-libphobos
! clean-stagefeedback: clean-stagefeedback-target-libphobos
! clean-stagefeedback-target-libphobos:
! 	@if [ $(current_stage) = stagefeedback ]; then \
! 	  [ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \
  	else \
! 	  [ -f $(TARGET_SUBDIR)/stagefeedback-libphobos/Makefile ] || exit 0; \
! 	  $(MAKE) stagefeedback-start; \
  	fi; \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
! @endif target-libphobos-bootstrap
  
  
+ .PHONY: all-stageautoprofile-target-libphobos maybe-all-stageautoprofile-target-libphobos
+ .PHONY: clean-stageautoprofile-target-libphobos maybe-clean-stageautoprofile-target-libphobos
+ maybe-all-stageautoprofile-target-libphobos:
+ maybe-clean-stageautoprofile-target-libphobos:
+ @if target-libphobos-bootstrap
+ maybe-all-stageautoprofile-target-libphobos: all-stageautoprofile-target-libphobos
+ all-stageautoprofile: all-stageautoprofile-target-libphobos
+ TARGET-stageautoprofile-target-libphobos = $(TARGET-target-libphobos)
+ all-stageautoprofile-target-libphobos: configure-stageautoprofile-target-libphobos
+ 	@[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautoprofile_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libphobos && \
+ 	$$s/gcc/config/i386/$(AUTO_PROFILE) \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEautoprofile_TFLAGS)"  \
+ 		$(TARGET-stageautoprofile-target-libphobos)
  
+ maybe-clean-stageautoprofile-target-libphobos: clean-stageautoprofile-target-libphobos
+ clean-stageautoprofile: clean-stageautoprofile-target-libphobos
+ clean-stageautoprofile-target-libphobos:
+ 	@if [ $(current_stage) = stageautoprofile ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stageautoprofile-libphobos/Makefile ] || exit 0; \
+ 	  $(MAKE) stageautoprofile-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libphobos && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libphobos-bootstrap
  
  
! .PHONY: all-stageautofeedback-target-libphobos maybe-all-stageautofeedback-target-libphobos
! .PHONY: clean-stageautofeedback-target-libphobos maybe-clean-stageautofeedback-target-libphobos
! maybe-all-stageautofeedback-target-libphobos:
! maybe-clean-stageautofeedback-target-libphobos:
! @if target-libphobos-bootstrap
! maybe-all-stageautofeedback-target-libphobos: all-stageautofeedback-target-libphobos
! all-stageautofeedback: all-stageautofeedback-target-libphobos
! TARGET-stageautofeedback-target-libphobos = $(TARGET-target-libphobos)
! all-stageautofeedback-target-libphobos: configure-stageautofeedback-target-libphobos
! 	@[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
! 	TFLAGS="$(STAGEautofeedback_TFLAGS)"; \
! 	$(NORMAL_TARGET_EXPORTS) \
! 	  \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	 \
! 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
! 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
! 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
! 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
! 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
! 		$(EXTRA_TARGET_FLAGS)   \
! 		TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \
! 		$(TARGET-stageautofeedback-target-libphobos)
! 
! maybe-clean-stageautofeedback-target-libphobos: clean-stageautofeedback-target-libphobos
! clean-stageautofeedback: clean-stageautofeedback-target-libphobos
! clean-stageautofeedback-target-libphobos:
! 	@if [ $(current_stage) = stageautofeedback ]; then \
! 	  [ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \
! 	else \
! 	  [ -f $(TARGET_SUBDIR)/stageautofeedback-libphobos/Makefile ] || exit 0; \
! 	  $(MAKE) stageautofeedback-start; \
! 	fi; \
! 	cd $(TARGET_SUBDIR)/libphobos && \
! 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
! @endif target-libphobos-bootstrap
! 
  
  
  
*************** install-info-target-libphobos: \
*** 51497,51502 ****
--- 54309,54341 ----
  
  @endif target-libphobos
  
+ .PHONY: maybe-install-dvi-target-libphobos install-dvi-target-libphobos
+ maybe-install-dvi-target-libphobos:
+ @if target-libphobos
+ maybe-install-dvi-target-libphobos: install-dvi-target-libphobos
+ 
+ install-dvi-target-libphobos: \
+     configure-target-libphobos \
+     dvi-target-libphobos 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libphobos/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libphobos"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libphobos && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libphobos
+ 
  .PHONY: maybe-install-pdf-target-libphobos install-pdf-target-libphobos
  maybe-install-pdf-target-libphobos:
  @if target-libphobos
*************** install-info-target-libtermcap: \
*** 51950,51955 ****
--- 54789,54821 ----
  
  @endif target-libtermcap
  
+ .PHONY: maybe-install-dvi-target-libtermcap install-dvi-target-libtermcap
+ maybe-install-dvi-target-libtermcap:
+ @if target-libtermcap
+ maybe-install-dvi-target-libtermcap: install-dvi-target-libtermcap
+ 
+ install-dvi-target-libtermcap: \
+     configure-target-libtermcap \
+     dvi-target-libtermcap 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libtermcap/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libtermcap"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libtermcap && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libtermcap
+ 
  .PHONY: maybe-install-pdf-target-libtermcap install-pdf-target-libtermcap
  maybe-install-pdf-target-libtermcap:
  @if target-libtermcap
*************** install-info-target-winsup: \
*** 52348,52353 ****
--- 55214,55246 ----
  
  @endif target-winsup
  
+ .PHONY: maybe-install-dvi-target-winsup install-dvi-target-winsup
+ maybe-install-dvi-target-winsup:
+ @if target-winsup
+ maybe-install-dvi-target-winsup: install-dvi-target-winsup
+ 
+ install-dvi-target-winsup: \
+     configure-target-winsup \
+     dvi-target-winsup 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/winsup/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/winsup"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/winsup && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-winsup
+ 
  .PHONY: maybe-install-pdf-target-winsup install-pdf-target-winsup
  maybe-install-pdf-target-winsup:
  @if target-winsup
*************** install-info-target-libgloss: \
*** 52801,52806 ****
--- 55694,55726 ----
  
  @endif target-libgloss
  
+ .PHONY: maybe-install-dvi-target-libgloss install-dvi-target-libgloss
+ maybe-install-dvi-target-libgloss:
+ @if target-libgloss
+ maybe-install-dvi-target-libgloss: install-dvi-target-libgloss
+ 
+ install-dvi-target-libgloss: \
+     configure-target-libgloss \
+     dvi-target-libgloss 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libgloss/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libgloss"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libgloss && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libgloss
+ 
  .PHONY: maybe-install-pdf-target-libgloss install-pdf-target-libgloss
  maybe-install-pdf-target-libgloss:
  @if target-libgloss
*************** install-info-target-libffi: \
*** 53249,53254 ****
--- 56169,56201 ----
  
  @endif target-libffi
  
+ .PHONY: maybe-install-dvi-target-libffi install-dvi-target-libffi
+ maybe-install-dvi-target-libffi:
+ @if target-libffi
+ maybe-install-dvi-target-libffi: install-dvi-target-libffi
+ 
+ install-dvi-target-libffi: \
+     configure-target-libffi \
+     dvi-target-libffi 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libffi/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libffi"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libffi && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libffi
+ 
  .PHONY: maybe-install-pdf-target-libffi install-pdf-target-libffi
  maybe-install-pdf-target-libffi:
  @if target-libffi
*************** configure-target-zlib: stage_current
*** 53441,53447 ****
  @if target-zlib
  maybe-configure-target-zlib: configure-target-zlib
  configure-target-zlib: 
- 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	echo "Checking multilib configuration for zlib..."; \
--- 56388,56393 ----
*************** configure-target-zlib:
*** 53479,53484 ****
--- 56425,56836 ----
  
  
  
+ .PHONY: configure-stage1-target-zlib maybe-configure-stage1-target-zlib
+ maybe-configure-stage1-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-configure-stage1-target-zlib: configure-stage1-target-zlib
+ configure-stage1-target-zlib:
+ 	@[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE1_TFLAGS)"; \
+ 	echo "Checking multilib configuration for zlib..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/zlib/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/zlib/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage 1 in $(TARGET_SUBDIR)/zlib; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib; \
+ 	cd $(TARGET_SUBDIR)/zlib || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/zlib/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=zlib; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	   \
+ 	  $(STAGE1_CONFIGURE_FLAGS)
+ @endif target-zlib-bootstrap
+ 
+ .PHONY: configure-stage2-target-zlib maybe-configure-stage2-target-zlib
+ maybe-configure-stage2-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-configure-stage2-target-zlib: configure-stage2-target-zlib
+ configure-stage2-target-zlib:
+ 	@[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE2_TFLAGS)"; \
+ 	echo "Checking multilib configuration for zlib..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/zlib/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/zlib/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage 2 in $(TARGET_SUBDIR)/zlib; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib; \
+ 	cd $(TARGET_SUBDIR)/zlib || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/zlib/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=zlib; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGE2_CONFIGURE_FLAGS)
+ @endif target-zlib-bootstrap
+ 
+ .PHONY: configure-stage3-target-zlib maybe-configure-stage3-target-zlib
+ maybe-configure-stage3-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-configure-stage3-target-zlib: configure-stage3-target-zlib
+ configure-stage3-target-zlib:
+ 	@[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE3_TFLAGS)"; \
+ 	echo "Checking multilib configuration for zlib..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/zlib/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/zlib/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage 3 in $(TARGET_SUBDIR)/zlib; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib; \
+ 	cd $(TARGET_SUBDIR)/zlib || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/zlib/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=zlib; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGE3_CONFIGURE_FLAGS)
+ @endif target-zlib-bootstrap
+ 
+ .PHONY: configure-stage4-target-zlib maybe-configure-stage4-target-zlib
+ maybe-configure-stage4-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-configure-stage4-target-zlib: configure-stage4-target-zlib
+ configure-stage4-target-zlib:
+ 	@[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE4_TFLAGS)"; \
+ 	echo "Checking multilib configuration for zlib..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/zlib/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/zlib/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage 4 in $(TARGET_SUBDIR)/zlib; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib; \
+ 	cd $(TARGET_SUBDIR)/zlib || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/zlib/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=zlib; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGE4_CONFIGURE_FLAGS)
+ @endif target-zlib-bootstrap
+ 
+ .PHONY: configure-stageprofile-target-zlib maybe-configure-stageprofile-target-zlib
+ maybe-configure-stageprofile-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-configure-stageprofile-target-zlib: configure-stageprofile-target-zlib
+ configure-stageprofile-target-zlib:
+ 	@[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEprofile_TFLAGS)"; \
+ 	echo "Checking multilib configuration for zlib..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/zlib/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/zlib/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage profile in $(TARGET_SUBDIR)/zlib; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib; \
+ 	cd $(TARGET_SUBDIR)/zlib || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/zlib/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=zlib; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEprofile_CONFIGURE_FLAGS)
+ @endif target-zlib-bootstrap
+ 
+ .PHONY: configure-stagetrain-target-zlib maybe-configure-stagetrain-target-zlib
+ maybe-configure-stagetrain-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-configure-stagetrain-target-zlib: configure-stagetrain-target-zlib
+ configure-stagetrain-target-zlib:
+ 	@[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEtrain_TFLAGS)"; \
+ 	echo "Checking multilib configuration for zlib..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/zlib/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/zlib/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage train in $(TARGET_SUBDIR)/zlib; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib; \
+ 	cd $(TARGET_SUBDIR)/zlib || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/zlib/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=zlib; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEtrain_CONFIGURE_FLAGS)
+ @endif target-zlib-bootstrap
+ 
+ .PHONY: configure-stagefeedback-target-zlib maybe-configure-stagefeedback-target-zlib
+ maybe-configure-stagefeedback-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-configure-stagefeedback-target-zlib: configure-stagefeedback-target-zlib
+ configure-stagefeedback-target-zlib:
+ 	@[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEfeedback_TFLAGS)"; \
+ 	echo "Checking multilib configuration for zlib..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/zlib/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/zlib/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage feedback in $(TARGET_SUBDIR)/zlib; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib; \
+ 	cd $(TARGET_SUBDIR)/zlib || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/zlib/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=zlib; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEfeedback_CONFIGURE_FLAGS)
+ @endif target-zlib-bootstrap
+ 
+ .PHONY: configure-stageautoprofile-target-zlib maybe-configure-stageautoprofile-target-zlib
+ maybe-configure-stageautoprofile-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-configure-stageautoprofile-target-zlib: configure-stageautoprofile-target-zlib
+ configure-stageautoprofile-target-zlib:
+ 	@[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautoprofile_TFLAGS)"; \
+ 	echo "Checking multilib configuration for zlib..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/zlib/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/zlib/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage autoprofile in $(TARGET_SUBDIR)/zlib; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib; \
+ 	cd $(TARGET_SUBDIR)/zlib || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/zlib/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=zlib; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEautoprofile_CONFIGURE_FLAGS)
+ @endif target-zlib-bootstrap
+ 
+ .PHONY: configure-stageautofeedback-target-zlib maybe-configure-stageautofeedback-target-zlib
+ maybe-configure-stageautofeedback-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-configure-stageautofeedback-target-zlib: configure-stageautofeedback-target-zlib
+ configure-stageautofeedback-target-zlib:
+ 	@[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautofeedback_TFLAGS)"; \
+ 	echo "Checking multilib configuration for zlib..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/zlib/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/zlib/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/zlib/multilib.tmp $(TARGET_SUBDIR)/zlib/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/zlib/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage autofeedback in $(TARGET_SUBDIR)/zlib; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/zlib; \
+ 	cd $(TARGET_SUBDIR)/zlib || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/zlib/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=zlib; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEautofeedback_CONFIGURE_FLAGS)
+ @endif target-zlib-bootstrap
+ 
+ 
+ 
  
  
  .PHONY: all-target-zlib maybe-all-target-zlib
*************** all-target-zlib: stage_current
*** 53490,53496 ****
  TARGET-target-zlib=all
  maybe-all-target-zlib: all-target-zlib
  all-target-zlib: configure-target-zlib
- 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS)  \
--- 56842,56847 ----
*************** all-target-zlib: configure-target-zlib
*** 53501,53506 ****
--- 56852,57238 ----
  
  
  
+ .PHONY: all-stage1-target-zlib maybe-all-stage1-target-zlib
+ .PHONY: clean-stage1-target-zlib maybe-clean-stage1-target-zlib
+ maybe-all-stage1-target-zlib:
+ maybe-clean-stage1-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-all-stage1-target-zlib: all-stage1-target-zlib
+ all-stage1: all-stage1-target-zlib
+ TARGET-stage1-target-zlib = $(TARGET-target-zlib)
+ all-stage1-target-zlib: configure-stage1-target-zlib
+ 	@[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE1_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS)  \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)  \
+ 		  \
+ 		TFLAGS="$(STAGE1_TFLAGS)"  \
+ 		$(TARGET-stage1-target-zlib)
+ 
+ maybe-clean-stage1-target-zlib: clean-stage1-target-zlib
+ clean-stage1: clean-stage1-target-zlib
+ clean-stage1-target-zlib:
+ 	@if [ $(current_stage) = stage1 ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stage1-zlib/Makefile ] || exit 0; \
+ 	  $(MAKE) stage1-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)  \
+ 	  clean
+ @endif target-zlib-bootstrap
+ 
+ 
+ .PHONY: all-stage2-target-zlib maybe-all-stage2-target-zlib
+ .PHONY: clean-stage2-target-zlib maybe-clean-stage2-target-zlib
+ maybe-all-stage2-target-zlib:
+ maybe-clean-stage2-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-all-stage2-target-zlib: all-stage2-target-zlib
+ all-stage2: all-stage2-target-zlib
+ TARGET-stage2-target-zlib = $(TARGET-target-zlib)
+ all-stage2-target-zlib: configure-stage2-target-zlib
+ 	@[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE2_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGE2_TFLAGS)"  \
+ 		$(TARGET-stage2-target-zlib)
+ 
+ maybe-clean-stage2-target-zlib: clean-stage2-target-zlib
+ clean-stage2: clean-stage2-target-zlib
+ clean-stage2-target-zlib:
+ 	@if [ $(current_stage) = stage2 ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stage2-zlib/Makefile ] || exit 0; \
+ 	  $(MAKE) stage2-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-zlib-bootstrap
+ 
+ 
+ .PHONY: all-stage3-target-zlib maybe-all-stage3-target-zlib
+ .PHONY: clean-stage3-target-zlib maybe-clean-stage3-target-zlib
+ maybe-all-stage3-target-zlib:
+ maybe-clean-stage3-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-all-stage3-target-zlib: all-stage3-target-zlib
+ all-stage3: all-stage3-target-zlib
+ TARGET-stage3-target-zlib = $(TARGET-target-zlib)
+ all-stage3-target-zlib: configure-stage3-target-zlib
+ 	@[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE3_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGE3_TFLAGS)"  \
+ 		$(TARGET-stage3-target-zlib)
+ 
+ maybe-clean-stage3-target-zlib: clean-stage3-target-zlib
+ clean-stage3: clean-stage3-target-zlib
+ clean-stage3-target-zlib:
+ 	@if [ $(current_stage) = stage3 ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stage3-zlib/Makefile ] || exit 0; \
+ 	  $(MAKE) stage3-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-zlib-bootstrap
+ 
+ 
+ .PHONY: all-stage4-target-zlib maybe-all-stage4-target-zlib
+ .PHONY: clean-stage4-target-zlib maybe-clean-stage4-target-zlib
+ maybe-all-stage4-target-zlib:
+ maybe-clean-stage4-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-all-stage4-target-zlib: all-stage4-target-zlib
+ all-stage4: all-stage4-target-zlib
+ TARGET-stage4-target-zlib = $(TARGET-target-zlib)
+ all-stage4-target-zlib: configure-stage4-target-zlib
+ 	@[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE4_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGE4_TFLAGS)"  \
+ 		$(TARGET-stage4-target-zlib)
+ 
+ maybe-clean-stage4-target-zlib: clean-stage4-target-zlib
+ clean-stage4: clean-stage4-target-zlib
+ clean-stage4-target-zlib:
+ 	@if [ $(current_stage) = stage4 ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stage4-zlib/Makefile ] || exit 0; \
+ 	  $(MAKE) stage4-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-zlib-bootstrap
+ 
+ 
+ .PHONY: all-stageprofile-target-zlib maybe-all-stageprofile-target-zlib
+ .PHONY: clean-stageprofile-target-zlib maybe-clean-stageprofile-target-zlib
+ maybe-all-stageprofile-target-zlib:
+ maybe-clean-stageprofile-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-all-stageprofile-target-zlib: all-stageprofile-target-zlib
+ all-stageprofile: all-stageprofile-target-zlib
+ TARGET-stageprofile-target-zlib = $(TARGET-target-zlib)
+ all-stageprofile-target-zlib: configure-stageprofile-target-zlib
+ 	@[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEprofile_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEprofile_TFLAGS)"  \
+ 		$(TARGET-stageprofile-target-zlib)
+ 
+ maybe-clean-stageprofile-target-zlib: clean-stageprofile-target-zlib
+ clean-stageprofile: clean-stageprofile-target-zlib
+ clean-stageprofile-target-zlib:
+ 	@if [ $(current_stage) = stageprofile ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stageprofile-zlib/Makefile ] || exit 0; \
+ 	  $(MAKE) stageprofile-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-zlib-bootstrap
+ 
+ 
+ .PHONY: all-stagetrain-target-zlib maybe-all-stagetrain-target-zlib
+ .PHONY: clean-stagetrain-target-zlib maybe-clean-stagetrain-target-zlib
+ maybe-all-stagetrain-target-zlib:
+ maybe-clean-stagetrain-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-all-stagetrain-target-zlib: all-stagetrain-target-zlib
+ all-stagetrain: all-stagetrain-target-zlib
+ TARGET-stagetrain-target-zlib = $(TARGET-target-zlib)
+ all-stagetrain-target-zlib: configure-stagetrain-target-zlib
+ 	@[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEtrain_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEtrain_TFLAGS)"  \
+ 		$(TARGET-stagetrain-target-zlib)
+ 
+ maybe-clean-stagetrain-target-zlib: clean-stagetrain-target-zlib
+ clean-stagetrain: clean-stagetrain-target-zlib
+ clean-stagetrain-target-zlib:
+ 	@if [ $(current_stage) = stagetrain ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stagetrain-zlib/Makefile ] || exit 0; \
+ 	  $(MAKE) stagetrain-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-zlib-bootstrap
+ 
+ 
+ .PHONY: all-stagefeedback-target-zlib maybe-all-stagefeedback-target-zlib
+ .PHONY: clean-stagefeedback-target-zlib maybe-clean-stagefeedback-target-zlib
+ maybe-all-stagefeedback-target-zlib:
+ maybe-clean-stagefeedback-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-all-stagefeedback-target-zlib: all-stagefeedback-target-zlib
+ all-stagefeedback: all-stagefeedback-target-zlib
+ TARGET-stagefeedback-target-zlib = $(TARGET-target-zlib)
+ all-stagefeedback-target-zlib: configure-stagefeedback-target-zlib
+ 	@[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEfeedback_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEfeedback_TFLAGS)"  \
+ 		$(TARGET-stagefeedback-target-zlib)
+ 
+ maybe-clean-stagefeedback-target-zlib: clean-stagefeedback-target-zlib
+ clean-stagefeedback: clean-stagefeedback-target-zlib
+ clean-stagefeedback-target-zlib:
+ 	@if [ $(current_stage) = stagefeedback ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stagefeedback-zlib/Makefile ] || exit 0; \
+ 	  $(MAKE) stagefeedback-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-zlib-bootstrap
+ 
+ 
+ .PHONY: all-stageautoprofile-target-zlib maybe-all-stageautoprofile-target-zlib
+ .PHONY: clean-stageautoprofile-target-zlib maybe-clean-stageautoprofile-target-zlib
+ maybe-all-stageautoprofile-target-zlib:
+ maybe-clean-stageautoprofile-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-all-stageautoprofile-target-zlib: all-stageautoprofile-target-zlib
+ all-stageautoprofile: all-stageautoprofile-target-zlib
+ TARGET-stageautoprofile-target-zlib = $(TARGET-target-zlib)
+ all-stageautoprofile-target-zlib: configure-stageautoprofile-target-zlib
+ 	@[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautoprofile_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	$$s/gcc/config/i386/$(AUTO_PROFILE) \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEautoprofile_TFLAGS)"  \
+ 		$(TARGET-stageautoprofile-target-zlib)
+ 
+ maybe-clean-stageautoprofile-target-zlib: clean-stageautoprofile-target-zlib
+ clean-stageautoprofile: clean-stageautoprofile-target-zlib
+ clean-stageautoprofile-target-zlib:
+ 	@if [ $(current_stage) = stageautoprofile ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stageautoprofile-zlib/Makefile ] || exit 0; \
+ 	  $(MAKE) stageautoprofile-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-zlib-bootstrap
+ 
+ 
+ .PHONY: all-stageautofeedback-target-zlib maybe-all-stageautofeedback-target-zlib
+ .PHONY: clean-stageautofeedback-target-zlib maybe-clean-stageautofeedback-target-zlib
+ maybe-all-stageautofeedback-target-zlib:
+ maybe-clean-stageautofeedback-target-zlib:
+ @if target-zlib-bootstrap
+ maybe-all-stageautofeedback-target-zlib: all-stageautofeedback-target-zlib
+ all-stageautofeedback: all-stageautofeedback-target-zlib
+ TARGET-stageautofeedback-target-zlib = $(TARGET-target-zlib)
+ all-stageautofeedback-target-zlib: configure-stageautofeedback-target-zlib
+ 	@[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautofeedback_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \
+ 		$(TARGET-stageautofeedback-target-zlib)
+ 
+ maybe-clean-stageautofeedback-target-zlib: clean-stageautofeedback-target-zlib
+ clean-stageautofeedback: clean-stageautofeedback-target-zlib
+ clean-stageautofeedback-target-zlib:
+ 	@if [ $(current_stage) = stageautofeedback ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stageautofeedback-zlib/Makefile ] || exit 0; \
+ 	  $(MAKE) stageautofeedback-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/zlib && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-zlib-bootstrap
+ 
+ 
+ 
+ 
  
  
  .PHONY: check-target-zlib maybe-check-target-zlib
*************** install-info-target-zlib: \
*** 53707,53712 ****
--- 57439,57471 ----
  
  @endif target-zlib
  
+ .PHONY: maybe-install-dvi-target-zlib install-dvi-target-zlib
+ maybe-install-dvi-target-zlib:
+ @if target-zlib
+ maybe-install-dvi-target-zlib: install-dvi-target-zlib
+ 
+ install-dvi-target-zlib: \
+     configure-target-zlib \
+     dvi-target-zlib 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/zlib/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/zlib"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/zlib && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-zlib
+ 
  .PHONY: maybe-install-pdf-target-zlib install-pdf-target-zlib
  maybe-install-pdf-target-zlib:
  @if target-zlib
*************** install-info-target-rda: \
*** 54165,54170 ****
--- 57924,57956 ----
  
  @endif target-rda
  
+ .PHONY: maybe-install-dvi-target-rda install-dvi-target-rda
+ maybe-install-dvi-target-rda:
+ @if target-rda
+ maybe-install-dvi-target-rda: install-dvi-target-rda
+ 
+ install-dvi-target-rda: \
+     configure-target-rda \
+     dvi-target-rda 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/rda/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/rda"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/rda && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-rda
+ 
  .PHONY: maybe-install-pdf-target-rda install-pdf-target-rda
  maybe-install-pdf-target-rda:
  @if target-rda
*************** install-info-target-libada: \
*** 54623,54628 ****
--- 58409,58441 ----
  
  @endif target-libada
  
+ .PHONY: maybe-install-dvi-target-libada install-dvi-target-libada
+ maybe-install-dvi-target-libada:
+ @if target-libada
+ maybe-install-dvi-target-libada: install-dvi-target-libada
+ 
+ install-dvi-target-libada: \
+     configure-target-libada \
+     dvi-target-libada 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libada/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libada"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libada && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libada
+ 
  .PHONY: maybe-install-pdf-target-libada install-pdf-target-libada
  maybe-install-pdf-target-libada:
  @if target-libada
*************** install-info-target-libgomp: \
*** 55866,55871 ****
--- 59679,59711 ----
  
  @endif target-libgomp
  
+ .PHONY: maybe-install-dvi-target-libgomp install-dvi-target-libgomp
+ maybe-install-dvi-target-libgomp:
+ @if target-libgomp
+ maybe-install-dvi-target-libgomp: install-dvi-target-libgomp
+ 
+ install-dvi-target-libgomp: \
+     configure-target-libgomp \
+     dvi-target-libgomp 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libgomp/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libgomp"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libgomp && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libgomp
+ 
  .PHONY: maybe-install-pdf-target-libgomp install-pdf-target-libgomp
  maybe-install-pdf-target-libgomp:
  @if target-libgomp
*************** install-info-target-libitm: \
*** 56324,56329 ****
--- 60164,60196 ----
  
  @endif target-libitm
  
+ .PHONY: maybe-install-dvi-target-libitm install-dvi-target-libitm
+ maybe-install-dvi-target-libitm:
+ @if target-libitm
+ maybe-install-dvi-target-libitm: install-dvi-target-libitm
+ 
+ install-dvi-target-libitm: \
+     configure-target-libitm \
+     dvi-target-libitm 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libitm/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libitm"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libitm && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libitm
+ 
  .PHONY: maybe-install-pdf-target-libitm install-pdf-target-libitm
  maybe-install-pdf-target-libitm:
  @if target-libitm
*************** configure-target-libatomic: stage_curren
*** 56516,56522 ****
  @if target-libatomic
  maybe-configure-target-libatomic: configure-target-libatomic
  configure-target-libatomic: 
- 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	echo "Checking multilib configuration for libatomic..."; \
--- 60383,60388 ----
*************** configure-target-libatomic:
*** 56554,56559 ****
--- 60420,60831 ----
  
  
  
+ .PHONY: configure-stage1-target-libatomic maybe-configure-stage1-target-libatomic
+ maybe-configure-stage1-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-configure-stage1-target-libatomic: configure-stage1-target-libatomic
+ configure-stage1-target-libatomic:
+ 	@[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE1_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libatomic..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libatomic/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libatomic/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage 1 in $(TARGET_SUBDIR)/libatomic; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic; \
+ 	cd $(TARGET_SUBDIR)/libatomic || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libatomic/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libatomic; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	   \
+ 	  $(STAGE1_CONFIGURE_FLAGS)
+ @endif target-libatomic-bootstrap
+ 
+ .PHONY: configure-stage2-target-libatomic maybe-configure-stage2-target-libatomic
+ maybe-configure-stage2-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-configure-stage2-target-libatomic: configure-stage2-target-libatomic
+ configure-stage2-target-libatomic:
+ 	@[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE2_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libatomic..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libatomic/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libatomic/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage 2 in $(TARGET_SUBDIR)/libatomic; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic; \
+ 	cd $(TARGET_SUBDIR)/libatomic || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libatomic/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libatomic; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGE2_CONFIGURE_FLAGS)
+ @endif target-libatomic-bootstrap
+ 
+ .PHONY: configure-stage3-target-libatomic maybe-configure-stage3-target-libatomic
+ maybe-configure-stage3-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-configure-stage3-target-libatomic: configure-stage3-target-libatomic
+ configure-stage3-target-libatomic:
+ 	@[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE3_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libatomic..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libatomic/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libatomic/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage 3 in $(TARGET_SUBDIR)/libatomic; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic; \
+ 	cd $(TARGET_SUBDIR)/libatomic || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libatomic/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libatomic; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGE3_CONFIGURE_FLAGS)
+ @endif target-libatomic-bootstrap
+ 
+ .PHONY: configure-stage4-target-libatomic maybe-configure-stage4-target-libatomic
+ maybe-configure-stage4-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-configure-stage4-target-libatomic: configure-stage4-target-libatomic
+ configure-stage4-target-libatomic:
+ 	@[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE4_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libatomic..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libatomic/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libatomic/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage 4 in $(TARGET_SUBDIR)/libatomic; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic; \
+ 	cd $(TARGET_SUBDIR)/libatomic || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libatomic/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libatomic; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGE4_CONFIGURE_FLAGS)
+ @endif target-libatomic-bootstrap
+ 
+ .PHONY: configure-stageprofile-target-libatomic maybe-configure-stageprofile-target-libatomic
+ maybe-configure-stageprofile-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-configure-stageprofile-target-libatomic: configure-stageprofile-target-libatomic
+ configure-stageprofile-target-libatomic:
+ 	@[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEprofile_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libatomic..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libatomic/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libatomic/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage profile in $(TARGET_SUBDIR)/libatomic; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic; \
+ 	cd $(TARGET_SUBDIR)/libatomic || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libatomic/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libatomic; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEprofile_CONFIGURE_FLAGS)
+ @endif target-libatomic-bootstrap
+ 
+ .PHONY: configure-stagetrain-target-libatomic maybe-configure-stagetrain-target-libatomic
+ maybe-configure-stagetrain-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-configure-stagetrain-target-libatomic: configure-stagetrain-target-libatomic
+ configure-stagetrain-target-libatomic:
+ 	@[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEtrain_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libatomic..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libatomic/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libatomic/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage train in $(TARGET_SUBDIR)/libatomic; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic; \
+ 	cd $(TARGET_SUBDIR)/libatomic || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libatomic/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libatomic; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEtrain_CONFIGURE_FLAGS)
+ @endif target-libatomic-bootstrap
+ 
+ .PHONY: configure-stagefeedback-target-libatomic maybe-configure-stagefeedback-target-libatomic
+ maybe-configure-stagefeedback-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-configure-stagefeedback-target-libatomic: configure-stagefeedback-target-libatomic
+ configure-stagefeedback-target-libatomic:
+ 	@[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEfeedback_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libatomic..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libatomic/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libatomic/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage feedback in $(TARGET_SUBDIR)/libatomic; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic; \
+ 	cd $(TARGET_SUBDIR)/libatomic || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libatomic/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libatomic; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEfeedback_CONFIGURE_FLAGS)
+ @endif target-libatomic-bootstrap
+ 
+ .PHONY: configure-stageautoprofile-target-libatomic maybe-configure-stageautoprofile-target-libatomic
+ maybe-configure-stageautoprofile-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-configure-stageautoprofile-target-libatomic: configure-stageautoprofile-target-libatomic
+ configure-stageautoprofile-target-libatomic:
+ 	@[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautoprofile_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libatomic..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libatomic/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libatomic/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage autoprofile in $(TARGET_SUBDIR)/libatomic; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic; \
+ 	cd $(TARGET_SUBDIR)/libatomic || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libatomic/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libatomic; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEautoprofile_CONFIGURE_FLAGS)
+ @endif target-libatomic-bootstrap
+ 
+ .PHONY: configure-stageautofeedback-target-libatomic maybe-configure-stageautofeedback-target-libatomic
+ maybe-configure-stageautofeedback-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-configure-stageautofeedback-target-libatomic: configure-stageautofeedback-target-libatomic
+ configure-stageautofeedback-target-libatomic:
+ 	@[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start
+ 	@$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautofeedback_TFLAGS)"; \
+ 	echo "Checking multilib configuration for libatomic..."; \
+ 	$(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libatomic/multilib.tmp 2> /dev/null; \
+ 	if test -r $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	  if cmp -s $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; then \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/multilib.tmp; \
+ 	  else \
+ 	    rm -f $(TARGET_SUBDIR)/libatomic/Makefile; \
+ 	    mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	  fi; \
+ 	else \
+ 	  mv $(TARGET_SUBDIR)/libatomic/multilib.tmp $(TARGET_SUBDIR)/libatomic/multilib.out; \
+ 	fi; \
+ 	test ! -f $(TARGET_SUBDIR)/libatomic/Makefile || exit 0; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	 \
+ 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
+ 	echo Configuring stage autofeedback in $(TARGET_SUBDIR)/libatomic; \
+ 	$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libatomic; \
+ 	cd $(TARGET_SUBDIR)/libatomic || exit 1; \
+ 	case $(srcdir) in \
+ 	  /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+ 	  *) topdir=`echo $(TARGET_SUBDIR)/libatomic/ | \
+ 		sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+ 	esac; \
+ 	module_srcdir=libatomic; \
+ 	$(SHELL) $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
+ 	  --target=${target_alias} \
+ 	  --with-build-libsubdir=$(HOST_SUBDIR) \
+ 	  $(STAGEautofeedback_CONFIGURE_FLAGS)
+ @endif target-libatomic-bootstrap
+ 
+ 
+ 
  
  
  .PHONY: all-target-libatomic maybe-all-target-libatomic
*************** all-target-libatomic: stage_current
*** 56565,56571 ****
  TARGET-target-libatomic=all
  maybe-all-target-libatomic: all-target-libatomic
  all-target-libatomic: configure-target-libatomic
- 	@: $(MAKE); $(unstage)
  	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	$(NORMAL_TARGET_EXPORTS)  \
--- 60837,60842 ----
*************** all-target-libatomic: configure-target-l
*** 56576,56581 ****
--- 60847,61233 ----
  
  
  
+ .PHONY: all-stage1-target-libatomic maybe-all-stage1-target-libatomic
+ .PHONY: clean-stage1-target-libatomic maybe-clean-stage1-target-libatomic
+ maybe-all-stage1-target-libatomic:
+ maybe-clean-stage1-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-all-stage1-target-libatomic: all-stage1-target-libatomic
+ all-stage1: all-stage1-target-libatomic
+ TARGET-stage1-target-libatomic = $(TARGET-target-libatomic)
+ all-stage1-target-libatomic: configure-stage1-target-libatomic
+ 	@[ $(current_stage) = stage1 ] || $(MAKE) stage1-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE1_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS)  \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)  \
+ 		  \
+ 		TFLAGS="$(STAGE1_TFLAGS)"  \
+ 		$(TARGET-stage1-target-libatomic)
+ 
+ maybe-clean-stage1-target-libatomic: clean-stage1-target-libatomic
+ clean-stage1: clean-stage1-target-libatomic
+ clean-stage1-target-libatomic:
+ 	@if [ $(current_stage) = stage1 ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stage1-libatomic/Makefile ] || exit 0; \
+ 	  $(MAKE) stage1-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)  \
+ 	  clean
+ @endif target-libatomic-bootstrap
+ 
+ 
+ .PHONY: all-stage2-target-libatomic maybe-all-stage2-target-libatomic
+ .PHONY: clean-stage2-target-libatomic maybe-clean-stage2-target-libatomic
+ maybe-all-stage2-target-libatomic:
+ maybe-clean-stage2-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-all-stage2-target-libatomic: all-stage2-target-libatomic
+ all-stage2: all-stage2-target-libatomic
+ TARGET-stage2-target-libatomic = $(TARGET-target-libatomic)
+ all-stage2-target-libatomic: configure-stage2-target-libatomic
+ 	@[ $(current_stage) = stage2 ] || $(MAKE) stage2-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE2_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGE2_TFLAGS)"  \
+ 		$(TARGET-stage2-target-libatomic)
+ 
+ maybe-clean-stage2-target-libatomic: clean-stage2-target-libatomic
+ clean-stage2: clean-stage2-target-libatomic
+ clean-stage2-target-libatomic:
+ 	@if [ $(current_stage) = stage2 ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stage2-libatomic/Makefile ] || exit 0; \
+ 	  $(MAKE) stage2-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libatomic-bootstrap
+ 
+ 
+ .PHONY: all-stage3-target-libatomic maybe-all-stage3-target-libatomic
+ .PHONY: clean-stage3-target-libatomic maybe-clean-stage3-target-libatomic
+ maybe-all-stage3-target-libatomic:
+ maybe-clean-stage3-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-all-stage3-target-libatomic: all-stage3-target-libatomic
+ all-stage3: all-stage3-target-libatomic
+ TARGET-stage3-target-libatomic = $(TARGET-target-libatomic)
+ all-stage3-target-libatomic: configure-stage3-target-libatomic
+ 	@[ $(current_stage) = stage3 ] || $(MAKE) stage3-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE3_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGE3_TFLAGS)"  \
+ 		$(TARGET-stage3-target-libatomic)
+ 
+ maybe-clean-stage3-target-libatomic: clean-stage3-target-libatomic
+ clean-stage3: clean-stage3-target-libatomic
+ clean-stage3-target-libatomic:
+ 	@if [ $(current_stage) = stage3 ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stage3-libatomic/Makefile ] || exit 0; \
+ 	  $(MAKE) stage3-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libatomic-bootstrap
+ 
+ 
+ .PHONY: all-stage4-target-libatomic maybe-all-stage4-target-libatomic
+ .PHONY: clean-stage4-target-libatomic maybe-clean-stage4-target-libatomic
+ maybe-all-stage4-target-libatomic:
+ maybe-clean-stage4-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-all-stage4-target-libatomic: all-stage4-target-libatomic
+ all-stage4: all-stage4-target-libatomic
+ TARGET-stage4-target-libatomic = $(TARGET-target-libatomic)
+ all-stage4-target-libatomic: configure-stage4-target-libatomic
+ 	@[ $(current_stage) = stage4 ] || $(MAKE) stage4-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGE4_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGE4_TFLAGS)"  \
+ 		$(TARGET-stage4-target-libatomic)
+ 
+ maybe-clean-stage4-target-libatomic: clean-stage4-target-libatomic
+ clean-stage4: clean-stage4-target-libatomic
+ clean-stage4-target-libatomic:
+ 	@if [ $(current_stage) = stage4 ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stage4-libatomic/Makefile ] || exit 0; \
+ 	  $(MAKE) stage4-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libatomic-bootstrap
+ 
+ 
+ .PHONY: all-stageprofile-target-libatomic maybe-all-stageprofile-target-libatomic
+ .PHONY: clean-stageprofile-target-libatomic maybe-clean-stageprofile-target-libatomic
+ maybe-all-stageprofile-target-libatomic:
+ maybe-clean-stageprofile-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-all-stageprofile-target-libatomic: all-stageprofile-target-libatomic
+ all-stageprofile: all-stageprofile-target-libatomic
+ TARGET-stageprofile-target-libatomic = $(TARGET-target-libatomic)
+ all-stageprofile-target-libatomic: configure-stageprofile-target-libatomic
+ 	@[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEprofile_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEprofile_TFLAGS)"  \
+ 		$(TARGET-stageprofile-target-libatomic)
+ 
+ maybe-clean-stageprofile-target-libatomic: clean-stageprofile-target-libatomic
+ clean-stageprofile: clean-stageprofile-target-libatomic
+ clean-stageprofile-target-libatomic:
+ 	@if [ $(current_stage) = stageprofile ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stageprofile-libatomic/Makefile ] || exit 0; \
+ 	  $(MAKE) stageprofile-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libatomic-bootstrap
+ 
+ 
+ .PHONY: all-stagetrain-target-libatomic maybe-all-stagetrain-target-libatomic
+ .PHONY: clean-stagetrain-target-libatomic maybe-clean-stagetrain-target-libatomic
+ maybe-all-stagetrain-target-libatomic:
+ maybe-clean-stagetrain-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-all-stagetrain-target-libatomic: all-stagetrain-target-libatomic
+ all-stagetrain: all-stagetrain-target-libatomic
+ TARGET-stagetrain-target-libatomic = $(TARGET-target-libatomic)
+ all-stagetrain-target-libatomic: configure-stagetrain-target-libatomic
+ 	@[ $(current_stage) = stagetrain ] || $(MAKE) stagetrain-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEtrain_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEtrain_TFLAGS)"  \
+ 		$(TARGET-stagetrain-target-libatomic)
+ 
+ maybe-clean-stagetrain-target-libatomic: clean-stagetrain-target-libatomic
+ clean-stagetrain: clean-stagetrain-target-libatomic
+ clean-stagetrain-target-libatomic:
+ 	@if [ $(current_stage) = stagetrain ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stagetrain-libatomic/Makefile ] || exit 0; \
+ 	  $(MAKE) stagetrain-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libatomic-bootstrap
+ 
+ 
+ .PHONY: all-stagefeedback-target-libatomic maybe-all-stagefeedback-target-libatomic
+ .PHONY: clean-stagefeedback-target-libatomic maybe-clean-stagefeedback-target-libatomic
+ maybe-all-stagefeedback-target-libatomic:
+ maybe-clean-stagefeedback-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-all-stagefeedback-target-libatomic: all-stagefeedback-target-libatomic
+ all-stagefeedback: all-stagefeedback-target-libatomic
+ TARGET-stagefeedback-target-libatomic = $(TARGET-target-libatomic)
+ all-stagefeedback-target-libatomic: configure-stagefeedback-target-libatomic
+ 	@[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEfeedback_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEfeedback_TFLAGS)"  \
+ 		$(TARGET-stagefeedback-target-libatomic)
+ 
+ maybe-clean-stagefeedback-target-libatomic: clean-stagefeedback-target-libatomic
+ clean-stagefeedback: clean-stagefeedback-target-libatomic
+ clean-stagefeedback-target-libatomic:
+ 	@if [ $(current_stage) = stagefeedback ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stagefeedback-libatomic/Makefile ] || exit 0; \
+ 	  $(MAKE) stagefeedback-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libatomic-bootstrap
+ 
+ 
+ .PHONY: all-stageautoprofile-target-libatomic maybe-all-stageautoprofile-target-libatomic
+ .PHONY: clean-stageautoprofile-target-libatomic maybe-clean-stageautoprofile-target-libatomic
+ maybe-all-stageautoprofile-target-libatomic:
+ maybe-clean-stageautoprofile-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-all-stageautoprofile-target-libatomic: all-stageautoprofile-target-libatomic
+ all-stageautoprofile: all-stageautoprofile-target-libatomic
+ TARGET-stageautoprofile-target-libatomic = $(TARGET-target-libatomic)
+ all-stageautoprofile-target-libatomic: configure-stageautoprofile-target-libatomic
+ 	@[ $(current_stage) = stageautoprofile ] || $(MAKE) stageautoprofile-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautoprofile_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	$$s/gcc/config/i386/$(AUTO_PROFILE) \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEautoprofile_TFLAGS)"  \
+ 		$(TARGET-stageautoprofile-target-libatomic)
+ 
+ maybe-clean-stageautoprofile-target-libatomic: clean-stageautoprofile-target-libatomic
+ clean-stageautoprofile: clean-stageautoprofile-target-libatomic
+ clean-stageautoprofile-target-libatomic:
+ 	@if [ $(current_stage) = stageautoprofile ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stageautoprofile-libatomic/Makefile ] || exit 0; \
+ 	  $(MAKE) stageautoprofile-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libatomic-bootstrap
+ 
+ 
+ .PHONY: all-stageautofeedback-target-libatomic maybe-all-stageautofeedback-target-libatomic
+ .PHONY: clean-stageautofeedback-target-libatomic maybe-clean-stageautofeedback-target-libatomic
+ maybe-all-stageautofeedback-target-libatomic:
+ maybe-clean-stageautofeedback-target-libatomic:
+ @if target-libatomic-bootstrap
+ maybe-all-stageautofeedback-target-libatomic: all-stageautofeedback-target-libatomic
+ all-stageautofeedback: all-stageautofeedback-target-libatomic
+ TARGET-stageautofeedback-target-libatomic = $(TARGET-target-libatomic)
+ all-stageautofeedback-target-libatomic: configure-stageautofeedback-target-libatomic
+ 	@[ $(current_stage) = stageautofeedback ] || $(MAKE) stageautofeedback-start
+ 	@r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	TFLAGS="$(STAGEautofeedback_TFLAGS)"; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	  \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	 \
+ 	$(MAKE) $(BASE_FLAGS_TO_PASS) \
+ 		CFLAGS="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \
+ 		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
+ 		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
+ 		LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
+ 		$(EXTRA_TARGET_FLAGS)   \
+ 		TFLAGS="$(STAGEautofeedback_TFLAGS)" PERF_DATA=perf.data \
+ 		$(TARGET-stageautofeedback-target-libatomic)
+ 
+ maybe-clean-stageautofeedback-target-libatomic: clean-stageautofeedback-target-libatomic
+ clean-stageautofeedback: clean-stageautofeedback-target-libatomic
+ clean-stageautofeedback-target-libatomic:
+ 	@if [ $(current_stage) = stageautofeedback ]; then \
+ 	  [ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \
+ 	else \
+ 	  [ -f $(TARGET_SUBDIR)/stageautofeedback-libatomic/Makefile ] || exit 0; \
+ 	  $(MAKE) stageautofeedback-start; \
+ 	fi; \
+ 	cd $(TARGET_SUBDIR)/libatomic && \
+ 	$(MAKE) $(EXTRA_TARGET_FLAGS)   clean
+ @endif target-libatomic-bootstrap
+ 
+ 
+ 
+ 
  
  
  .PHONY: check-target-libatomic maybe-check-target-libatomic
*************** install-info-target-libatomic: \
*** 56782,56787 ****
--- 61434,61466 ----
  
  @endif target-libatomic
  
+ .PHONY: maybe-install-dvi-target-libatomic install-dvi-target-libatomic
+ maybe-install-dvi-target-libatomic:
+ @if target-libatomic
+ maybe-install-dvi-target-libatomic: install-dvi-target-libatomic
+ 
+ install-dvi-target-libatomic: \
+     configure-target-libatomic \
+     dvi-target-libatomic 
+ 	@: $(MAKE); $(unstage)
+ 	@[ -f $(TARGET_SUBDIR)/libatomic/Makefile ] || exit 0; \
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(NORMAL_TARGET_EXPORTS) \
+ 	echo "Doing install-dvi in $(TARGET_SUBDIR)/libatomic"; \
+ 	for flag in $(EXTRA_TARGET_FLAGS); do \
+ 	  eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
+ 	done; \
+ 	(cd $(TARGET_SUBDIR)/libatomic && \
+ 	  $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
+ 	          "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
+ 	          "RANLIB=$${RANLIB}" \
+ 	          "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
+ 	           install-dvi) \
+ 	  || exit 1
+ 
+ @endif target-libatomic
+ 
  .PHONY: maybe-install-pdf-target-libatomic install-pdf-target-libatomic
  maybe-install-pdf-target-libatomic:
  @if target-libatomic
*************** check-gcc-go:
*** 57058,57071 ****
  	(cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-go);
  check-go: check-gcc-go check-target-libgo check-gotools
  
- .PHONY: check-gcc-brig check-brig
- check-gcc-brig:
- 	r=`${PWD_COMMAND}`; export r; \
- 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
- 	$(HOST_EXPORTS) \
- 	(cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-brig);
- check-brig: check-gcc-brig check-target-libhsail-rt
- 
  .PHONY: check-gcc-d check-d
  check-gcc-d:
  	r=`${PWD_COMMAND}`; export r; \
--- 61737,61742 ----
*************** check-gcc-d:
*** 57074,57079 ****
--- 61745,61758 ----
  	(cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-d);
  check-d: check-gcc-d check-target-libphobos
  
+ .PHONY: check-gcc-jit check-jit
+ check-gcc-jit:
+ 	r=`${PWD_COMMAND}`; export r; \
+ 	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ 	$(HOST_EXPORTS) \
+ 	(cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-jit);
+ check-jit: check-gcc-jit
+ 
  
  # The gcc part of install-no-fixedincludes, which relies on an intimate
  # knowledge of how a number of gcc internal targets (inter)operate.  Delegate.
*************** configure-stagetrain-target-libgcc: mayb
*** 60472,60489 ****
  configure-stagefeedback-target-libgcc: maybe-all-stagefeedback-gcc
  configure-stageautoprofile-target-libgcc: maybe-all-stageautoprofile-gcc
  configure-stageautofeedback-target-libgcc: maybe-all-stageautofeedback-gcc
! configure-target-libbacktrace: stage_last
  configure-target-libquadmath: stage_last
  configure-target-libgfortran: stage_last
  configure-target-libobjc: stage_last
  configure-target-libgo: stage_last
! configure-target-libhsail-rt: stage_last
! configure-target-libphobos: stage_last
  configure-target-libtermcap: stage_last
  configure-target-winsup: stage_last
  configure-target-libgloss: stage_last
  configure-target-libffi: stage_last
! configure-target-zlib: stage_last
  configure-target-rda: stage_last
  configure-target-libada: stage_last
  configure-stage1-target-libgomp: maybe-all-stage1-gcc
--- 65151,65191 ----
  configure-stagefeedback-target-libgcc: maybe-all-stagefeedback-gcc
  configure-stageautoprofile-target-libgcc: maybe-all-stageautoprofile-gcc
  configure-stageautofeedback-target-libgcc: maybe-all-stageautofeedback-gcc
! configure-stage1-target-libbacktrace: maybe-all-stage1-gcc
! configure-stage2-target-libbacktrace: maybe-all-stage2-gcc
! configure-stage3-target-libbacktrace: maybe-all-stage3-gcc
! configure-stage4-target-libbacktrace: maybe-all-stage4-gcc
! configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-gcc
! configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-gcc
! configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-gcc
! configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-gcc
! configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-gcc
  configure-target-libquadmath: stage_last
  configure-target-libgfortran: stage_last
  configure-target-libobjc: stage_last
  configure-target-libgo: stage_last
! configure-stage1-target-libphobos: maybe-all-stage1-gcc
! configure-stage2-target-libphobos: maybe-all-stage2-gcc
! configure-stage3-target-libphobos: maybe-all-stage3-gcc
! configure-stage4-target-libphobos: maybe-all-stage4-gcc
! configure-stageprofile-target-libphobos: maybe-all-stageprofile-gcc
! configure-stagetrain-target-libphobos: maybe-all-stagetrain-gcc
! configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-gcc
! configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-gcc
! configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-gcc
  configure-target-libtermcap: stage_last
  configure-target-winsup: stage_last
  configure-target-libgloss: stage_last
  configure-target-libffi: stage_last
! configure-stage1-target-zlib: maybe-all-stage1-gcc
! configure-stage2-target-zlib: maybe-all-stage2-gcc
! configure-stage3-target-zlib: maybe-all-stage3-gcc
! configure-stage4-target-zlib: maybe-all-stage4-gcc
! configure-stageprofile-target-zlib: maybe-all-stageprofile-gcc
! configure-stagetrain-target-zlib: maybe-all-stagetrain-gcc
! configure-stagefeedback-target-zlib: maybe-all-stagefeedback-gcc
! configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-gcc
! configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-gcc
  configure-target-rda: stage_last
  configure-target-libada: stage_last
  configure-stage1-target-libgomp: maybe-all-stage1-gcc
*************** configure-stagefeedback-target-libgomp:
*** 60496,60502 ****
  configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-gcc
  configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-gcc
  configure-target-libitm: stage_last
! configure-target-libatomic: stage_last
  @endif gcc-bootstrap
  
  @if gcc-no-bootstrap
--- 65198,65212 ----
  configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-gcc
  configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-gcc
  configure-target-libitm: stage_last
! configure-stage1-target-libatomic: maybe-all-stage1-gcc
! configure-stage2-target-libatomic: maybe-all-stage2-gcc
! configure-stage3-target-libatomic: maybe-all-stage3-gcc
! configure-stage4-target-libatomic: maybe-all-stage4-gcc
! configure-stageprofile-target-libatomic: maybe-all-stageprofile-gcc
! configure-stagetrain-target-libatomic: maybe-all-stagetrain-gcc
! configure-stagefeedback-target-libatomic: maybe-all-stagefeedback-gcc
! configure-stageautoprofile-target-libatomic: maybe-all-stageautoprofile-gcc
! configure-stageautofeedback-target-libatomic: maybe-all-stageautofeedback-gcc
  @endif gcc-bootstrap
  
  @if gcc-no-bootstrap
*************** configure-target-libquadmath: maybe-all-
*** 60512,60518 ****
  configure-target-libgfortran: maybe-all-gcc
  configure-target-libobjc: maybe-all-gcc
  configure-target-libgo: maybe-all-gcc
- configure-target-libhsail-rt: maybe-all-gcc
  configure-target-libphobos: maybe-all-gcc
  configure-target-libtermcap: maybe-all-gcc
  configure-target-winsup: maybe-all-gcc
--- 65222,65227 ----
*************** all-stageautoprofile-ld: maybe-all-stage
*** 61249,61254 ****
--- 65958,65979 ----
  all-stageautofeedback-ld: maybe-all-stageautofeedback-libctf
  install-binutils: maybe-install-opcodes
  install-strip-binutils: maybe-install-strip-opcodes
+ install-libctf: maybe-install-bfd
+ install-ld: maybe-install-bfd
+ install-ld: maybe-install-libctf
+ install-strip-libctf: maybe-install-strip-bfd
+ install-strip-ld: maybe-install-strip-bfd
+ install-strip-ld: maybe-install-strip-libctf
+ configure-opcodes: configure-bfd
+ configure-stage1-opcodes: configure-stage1-bfd
+ configure-stage2-opcodes: configure-stage2-bfd
+ configure-stage3-opcodes: configure-stage3-bfd
+ configure-stage4-opcodes: configure-stage4-bfd
+ configure-stageprofile-opcodes: configure-stageprofile-bfd
+ configure-stagetrain-opcodes: configure-stagetrain-bfd
+ configure-stagefeedback-opcodes: configure-stagefeedback-bfd
+ configure-stageautoprofile-opcodes: configure-stageautoprofile-bfd
+ configure-stageautofeedback-opcodes: configure-stageautofeedback-bfd
  install-opcodes: maybe-install-bfd
  install-strip-opcodes: maybe-install-strip-bfd
  configure-gas: maybe-configure-intl
*************** install-sid: maybe-install-tcl
*** 61534,61540 ****
  install-strip-sid: maybe-install-strip-tcl
  install-sid: maybe-install-tk
  install-strip-sid: maybe-install-strip-tk
! all-sim: maybe-all-readline
  all-fastjar: maybe-all-build-texinfo
  all-libctf: all-libiberty
  all-stage1-libctf: all-stage1-libiberty
--- 66259,66266 ----
  install-strip-sid: maybe-install-strip-tcl
  install-sid: maybe-install-tk
  install-strip-sid: maybe-install-strip-tk
! configure-sim: maybe-all-gnulib
! configure-sim: maybe-all-readline
  all-fastjar: maybe-all-build-texinfo
  all-libctf: all-libiberty
  all-stage1-libctf: all-stage1-libiberty
*************** check-stagetrain-libctf: maybe-all-stage
*** 61616,61637 ****
  check-stagefeedback-libctf: maybe-all-stagefeedback-ld
  check-stageautoprofile-libctf: maybe-all-stageautoprofile-ld
  check-stageautofeedback-libctf: maybe-all-stageautofeedback-ld
  all-bison: maybe-all-build-texinfo
  all-flex: maybe-all-build-bison
  all-flex: maybe-all-m4
  all-flex: maybe-all-build-texinfo
  all-m4: maybe-all-build-texinfo
- configure-target-fastjar: maybe-configure-target-zlib
- all-target-fastjar: maybe-all-target-zlib
  configure-target-libgo: maybe-configure-target-libffi
- all-target-libgo: maybe-all-target-libbacktrace
  all-target-libgo: maybe-all-target-libffi
- all-target-libgo: maybe-all-target-libatomic
  configure-target-libphobos: maybe-configure-target-libbacktrace
  configure-target-libphobos: maybe-configure-target-zlib
  all-target-libphobos: maybe-all-target-libbacktrace
  all-target-libphobos: maybe-all-target-zlib
  all-target-libphobos: maybe-all-target-libatomic
  configure-target-libstdc++-v3: maybe-configure-target-libgomp
  configure-stage1-target-libstdc++-v3: maybe-configure-stage1-target-libgomp
  configure-stage2-target-libstdc++-v3: maybe-configure-stage2-target-libgomp
--- 66342,66406 ----
  check-stagefeedback-libctf: maybe-all-stagefeedback-ld
  check-stageautoprofile-libctf: maybe-all-stageautoprofile-ld
  check-stageautofeedback-libctf: maybe-all-stageautofeedback-ld
+ distclean-gnulib: maybe-distclean-gdb
+ distclean-gnulib: maybe-distclean-gdbserver
  all-bison: maybe-all-build-texinfo
  all-flex: maybe-all-build-bison
  all-flex: maybe-all-m4
  all-flex: maybe-all-build-texinfo
  all-m4: maybe-all-build-texinfo
  configure-target-libgo: maybe-configure-target-libffi
  all-target-libgo: maybe-all-target-libffi
  configure-target-libphobos: maybe-configure-target-libbacktrace
+ configure-stage1-target-libphobos: maybe-configure-stage1-target-libbacktrace
+ configure-stage2-target-libphobos: maybe-configure-stage2-target-libbacktrace
+ configure-stage3-target-libphobos: maybe-configure-stage3-target-libbacktrace
+ configure-stage4-target-libphobos: maybe-configure-stage4-target-libbacktrace
+ configure-stageprofile-target-libphobos: maybe-configure-stageprofile-target-libbacktrace
+ configure-stagetrain-target-libphobos: maybe-configure-stagetrain-target-libbacktrace
+ configure-stagefeedback-target-libphobos: maybe-configure-stagefeedback-target-libbacktrace
+ configure-stageautoprofile-target-libphobos: maybe-configure-stageautoprofile-target-libbacktrace
+ configure-stageautofeedback-target-libphobos: maybe-configure-stageautofeedback-target-libbacktrace
  configure-target-libphobos: maybe-configure-target-zlib
+ configure-stage1-target-libphobos: maybe-configure-stage1-target-zlib
+ configure-stage2-target-libphobos: maybe-configure-stage2-target-zlib
+ configure-stage3-target-libphobos: maybe-configure-stage3-target-zlib
+ configure-stage4-target-libphobos: maybe-configure-stage4-target-zlib
+ configure-stageprofile-target-libphobos: maybe-configure-stageprofile-target-zlib
+ configure-stagetrain-target-libphobos: maybe-configure-stagetrain-target-zlib
+ configure-stagefeedback-target-libphobos: maybe-configure-stagefeedback-target-zlib
+ configure-stageautoprofile-target-libphobos: maybe-configure-stageautoprofile-target-zlib
+ configure-stageautofeedback-target-libphobos: maybe-configure-stageautofeedback-target-zlib
  all-target-libphobos: maybe-all-target-libbacktrace
+ all-stage1-target-libphobos: maybe-all-stage1-target-libbacktrace
+ all-stage2-target-libphobos: maybe-all-stage2-target-libbacktrace
+ all-stage3-target-libphobos: maybe-all-stage3-target-libbacktrace
+ all-stage4-target-libphobos: maybe-all-stage4-target-libbacktrace
+ all-stageprofile-target-libphobos: maybe-all-stageprofile-target-libbacktrace
+ all-stagetrain-target-libphobos: maybe-all-stagetrain-target-libbacktrace
+ all-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libbacktrace
+ all-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libbacktrace
+ all-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libbacktrace
  all-target-libphobos: maybe-all-target-zlib
+ all-stage1-target-libphobos: maybe-all-stage1-target-zlib
+ all-stage2-target-libphobos: maybe-all-stage2-target-zlib
+ all-stage3-target-libphobos: maybe-all-stage3-target-zlib
+ all-stage4-target-libphobos: maybe-all-stage4-target-zlib
+ all-stageprofile-target-libphobos: maybe-all-stageprofile-target-zlib
+ all-stagetrain-target-libphobos: maybe-all-stagetrain-target-zlib
+ all-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-zlib
+ all-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-zlib
+ all-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-zlib
  all-target-libphobos: maybe-all-target-libatomic
+ all-stage1-target-libphobos: maybe-all-stage1-target-libatomic
+ all-stage2-target-libphobos: maybe-all-stage2-target-libatomic
+ all-stage3-target-libphobos: maybe-all-stage3-target-libatomic
+ all-stage4-target-libphobos: maybe-all-stage4-target-libatomic
+ all-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic
+ all-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic
+ all-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic
+ all-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic
+ all-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic
  configure-target-libstdc++-v3: maybe-configure-target-libgomp
  configure-stage1-target-libstdc++-v3: maybe-configure-stage1-target-libgomp
  configure-stage2-target-libstdc++-v3: maybe-configure-stage2-target-libgomp
*************** install-target-libstdc++-v3: maybe-insta
*** 61688,61694 ****
  all-target-libgloss: maybe-all-target-newlib
  all-target-winsup: maybe-all-target-libtermcap
  configure-target-libgfortran: maybe-all-target-libquadmath
- configure-target-libgfortran: maybe-all-target-libbacktrace
  
  
  @if gcc-bootstrap
--- 66457,66462 ----
*************** all-gdb: maybe-all-libiconv
*** 61722,61727 ****
--- 66490,66496 ----
  all-gdb: maybe-all-opcodes
  all-gdb: maybe-all-libdecnumber
  all-gdb: maybe-all-libctf
+ all-gdb: maybe-all-libbacktrace
  all-gdbserver: maybe-all-libiberty
  configure-gdbsupport: maybe-configure-intl
  all-gdbsupport: maybe-all-intl
*************** all-fastjar: maybe-all-libiberty
*** 61744,61754 ****
--- 66513,66528 ----
  all-bison: maybe-all-intl
  all-flex: maybe-all-intl
  all-m4: maybe-all-intl
+ configure-target-fastjar: maybe-configure-target-zlib
+ all-target-fastjar: maybe-all-target-zlib
  configure-target-libgo: maybe-all-target-libstdc++-v3
+ all-target-libgo: maybe-all-target-libbacktrace
+ all-target-libgo: maybe-all-target-libatomic
  configure-target-liboffloadmic: maybe-configure-target-libgomp
  all-target-liboffloadmic: maybe-all-target-libgomp
  configure-target-newlib: maybe-all-binutils
  configure-target-newlib: maybe-all-ld
+ configure-target-libgfortran: maybe-all-target-libbacktrace
  @endunless gcc-bootstrap
  
  # Dependencies for target modules on other target modules are
*************** configure-stagetrain-target-libvtv: mayb
*** 61784,61789 ****
--- 66558,66590 ----
  configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libgcc
  configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libgcc
  configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libgcc
+ configure-stage1-target-libbacktrace: maybe-all-stage1-target-libgcc
+ configure-stage2-target-libbacktrace: maybe-all-stage2-target-libgcc
+ configure-stage3-target-libbacktrace: maybe-all-stage3-target-libgcc
+ configure-stage4-target-libbacktrace: maybe-all-stage4-target-libgcc
+ configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libgcc
+ configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libgcc
+ configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libgcc
+ configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libgcc
+ configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libgcc
+ configure-stage1-target-libphobos: maybe-all-stage1-target-libgcc
+ configure-stage2-target-libphobos: maybe-all-stage2-target-libgcc
+ configure-stage3-target-libphobos: maybe-all-stage3-target-libgcc
+ configure-stage4-target-libphobos: maybe-all-stage4-target-libgcc
+ configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libgcc
+ configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libgcc
+ configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libgcc
+ configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libgcc
+ configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libgcc
+ configure-stage1-target-zlib: maybe-all-stage1-target-libgcc
+ configure-stage2-target-zlib: maybe-all-stage2-target-libgcc
+ configure-stage3-target-zlib: maybe-all-stage3-target-libgcc
+ configure-stage4-target-zlib: maybe-all-stage4-target-libgcc
+ configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libgcc
+ configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libgcc
+ configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libgcc
+ configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libgcc
+ configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libgcc
  configure-stage1-target-libgomp: maybe-all-stage1-target-libgcc
  configure-stage2-target-libgomp: maybe-all-stage2-target-libgcc
  configure-stage3-target-libgomp: maybe-all-stage3-target-libgcc
*************** configure-stagetrain-target-libgomp: may
*** 61793,61798 ****
--- 66594,66608 ----
  configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libgcc
  configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libgcc
  configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libgcc
+ configure-stage1-target-libatomic: maybe-all-stage1-target-libgcc
+ configure-stage2-target-libatomic: maybe-all-stage2-target-libgcc
+ configure-stage3-target-libatomic: maybe-all-stage3-target-libgcc
+ configure-stage4-target-libatomic: maybe-all-stage4-target-libgcc
+ configure-stageprofile-target-libatomic: maybe-all-stageprofile-target-libgcc
+ configure-stagetrain-target-libatomic: maybe-all-stagetrain-target-libgcc
+ configure-stagefeedback-target-libatomic: maybe-all-stagefeedback-target-libgcc
+ configure-stageautoprofile-target-libatomic: maybe-all-stageautoprofile-target-libgcc
+ configure-stageautofeedback-target-libatomic: maybe-all-stageautofeedback-target-libgcc
  @endif gcc-bootstrap
  
  @if gcc-no-bootstrap
*************** configure-target-libquadmath: maybe-all-
*** 61807,61813 ****
  configure-target-libgfortran: maybe-all-target-libgcc
  configure-target-libobjc: maybe-all-target-libgcc
  configure-target-libgo: maybe-all-target-libgcc
- configure-target-libhsail-rt: maybe-all-target-libgcc
  configure-target-libphobos: maybe-all-target-libgcc
  configure-target-libtermcap: maybe-all-target-libgcc
  configure-target-winsup: maybe-all-target-libgcc
--- 66617,66622 ----
*************** configure-target-libobjc: maybe-all-targ
*** 61845,61852 ****
  
  configure-target-libgo: maybe-all-target-newlib maybe-all-target-libgloss
  
- configure-target-libhsail-rt: maybe-all-target-newlib maybe-all-target-libgloss
- 
  configure-target-libphobos: maybe-all-target-newlib maybe-all-target-libgloss
  
  configure-target-libtermcap: maybe-all-target-newlib maybe-all-target-libgloss
--- 66654,66659 ----
diff -Nrcpad gcc-11.3.0/Makefile.tpl gcc-12.1.0/Makefile.tpl
*** gcc-11.3.0/Makefile.tpl	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/Makefile.tpl	Fri May  6 07:30:56 2022
*************** BUILD_EXPORTS = \
*** 157,162 ****
--- 157,164 ----
  	CC="$(CC_FOR_BUILD)"; export CC; \
  	CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
  	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ 	CPP="$(CPP_FOR_BUILD)"; export CPP; \
+ 	CPPFLAGS="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS; \
  	CXX="$(CXX_FOR_BUILD)"; export CXX; \
  	CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
  	GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
*************** HOST_EXPORTS = \
*** 205,210 ****
--- 207,214 ----
  	AR="$(AR)"; export AR; \
  	AS="$(AS)"; export AS; \
  	CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
+ 	CPP_FOR_BUILD="$(CPP_FOR_BUILD)"; export CPP_FOR_BUILD; \
+ 	CPPFLAGS_FOR_BUILD="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS_FOR_BUILD; \
  	CXX_FOR_BUILD="$(CXX_FOR_BUILD)"; export CXX_FOR_BUILD; \
  	DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
  	DSYMUTIL="$(DSYMUTIL)"; export DSYMUTIL; \
*************** POSTSTAGE1_HOST_EXPORTS = \
*** 272,282 ****
  	$(POSTSTAGE1_CXX_EXPORT) \
  	$(LTO_EXPORTS) \
  	GDC="$$r/$(HOST_SUBDIR)/prev-gcc/gdc$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/ \
! 	  -B$(build_tooldir)/bin/ $(GDC_FLAGS_FOR_TARGET) \
  	  -B$$r/prev-$(TARGET_SUBDIR)/libphobos/src \
  	  -I$$r/prev-$(TARGET_SUBDIR)/libphobos/libdruntime -I$$s/libphobos/libdruntime \
  	  -L$$r/prev-$(TARGET_SUBDIR)/libphobos/src/.libs \
! 	  -L$$r/prev-$(TARGET_SUBDIR)/libphobos/libdruntime/.libs"; \
  	export GDC; \
  	GDC_FOR_BUILD="$$GDC"; export GDC_FOR_BUILD; \
  	GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \
--- 276,289 ----
  	$(POSTSTAGE1_CXX_EXPORT) \
  	$(LTO_EXPORTS) \
  	GDC="$$r/$(HOST_SUBDIR)/prev-gcc/gdc$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/ \
! 	  -B$(build_tooldir)/bin/ $(GDCFLAGS_FOR_TARGET) \
! 	  -B$$r/prev-$(TARGET_SUBDIR)/libphobos/libdruntime/gcc \
  	  -B$$r/prev-$(TARGET_SUBDIR)/libphobos/src \
+ 	  -B$$r/prev-$(TARGET_SUBDIR)/libphobos/src/.libs \
  	  -I$$r/prev-$(TARGET_SUBDIR)/libphobos/libdruntime -I$$s/libphobos/libdruntime \
  	  -L$$r/prev-$(TARGET_SUBDIR)/libphobos/src/.libs \
! 	  -B$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \
! 	  -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs"; \
  	export GDC; \
  	GDC_FOR_BUILD="$$GDC"; export GDC_FOR_BUILD; \
  	GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \
*************** AR_FOR_BUILD = @AR_FOR_BUILD@
*** 363,368 ****
--- 370,377 ----
  AS_FOR_BUILD = @AS_FOR_BUILD@
  CC_FOR_BUILD = @CC_FOR_BUILD@
  CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+ CPP_FOR_BUILD = @CPP_FOR_BUILD@
+ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
  CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
  CXX_FOR_BUILD = @CXX_FOR_BUILD@
  DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
*************** LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-
*** 441,446 ****
--- 450,498 ----
  GOCFLAGS = $(CFLAGS)
  GDCFLAGS = $(CFLAGS)
  
+ # Pass additional PGO and LTO compiler options to the PGO build.
+ BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS)
+ override CFLAGS += $(BUILD_CFLAGS)
+ override CXXFLAGS += $(BUILD_CFLAGS)
+ 
+ # Additional PGO and LTO compiler options to generate profiling data
+ # for the PGO build.
+ PGO_BUILD_GEN_FLAGS_TO_PASS = \
+ 	PGO_BUILD_CFLAGS="@PGO_BUILD_GEN_CFLAGS@" \
+ 	PGO_BUILD_LTO_CFLAGS="@PGO_BUILD_LTO_CFLAGS@"
+ 
+ # NB: Filter out any compiler options which may fail PGO training runs.
+ PGO_BUILD_TRAINING_CFLAGS:= \
+ 	$(filter-out -Werror=%,$(CFLAGS))
+ PGO_BUILD_TRAINING_CXXFLAGS:=\
+ 	$(filter-out -Werror=%,$(CXXFLAGS))
+ PGO_BUILD_TRAINING_CFLAGS:= \
+ 	$(filter-out -Wall,$(PGO_BUILD_TRAINING_CFLAGS))
+ PGO_BUILD_TRAINING_CXXFLAGS:= \
+ 	$(filter-out -Wall,$(PGO_BUILD_TRAINING_CXXFLAGS))
+ PGO_BUILD_TRAINING_CFLAGS:= \
+ 	$(filter-out -specs=%,$(PGO_BUILD_TRAINING_CFLAGS))
+ PGO_BUILD_TRAINING_CXXFLAGS:= \
+ 	$(filter-out -specs=%,$(PGO_BUILD_TRAINING_CXXFLAGS))
+ PGO_BUILD_TRAINING_FLAGS_TO_PASS = \
+ 	PGO_BUILD_TRAINING=yes \
+ 	CFLAGS_FOR_TARGET="$(PGO_BUILD_TRAINING_CFLAGS)" \
+ 	CXXFLAGS_FOR_TARGET="$(PGO_BUILD_TRAINING_CXXFLAGS)"
+ 
+ # Ignore "make check" errors in PGO training runs.
+ PGO_BUILD_TRAINING_MFLAGS = -i
+ 
+ # Additional PGO and LTO compiler options to use profiling data for the
+ # PGO build.
+ PGO_BUILD_USE_FLAGS_TO_PASS = \
+ 	PGO_BUILD_CFLAGS="@PGO_BUILD_USE_CFLAGS@" \
+ 	PGO_BUILD_LTO_CFLAGS="@PGO_BUILD_LTO_CFLAGS@"
+ 
+ # PGO training targets for the PGO build.  FIXME: Add gold tests to
+ # training.
+ PGO-TRAINING-TARGETS = binutils gas gdb ld sim
+ PGO_BUILD_TRAINING = $(addprefix maybe-check-,$(PGO-TRAINING-TARGETS))
+ 
  CREATE_GCOV = create_gcov
  
  TFLAGS =
*************** STAGE1_CONFIGURE_FLAGS = --disable-inter
*** 481,486 ****
--- 533,543 ----
  	  --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \
  	  --disable-build-format-warnings
  
+ @if target-libphobos-bootstrap
+ STAGE1_CONFIGURE_FLAGS += --with-libphobos-druntime-only
+ STAGE2_CONFIGURE_FLAGS += --with-libphobos-druntime-only
+ @endif target-libphobos-bootstrap
+ 
  # When using the slow stage1 compiler disable IL verification and forcefully
  # enable it when using the stage2 compiler instead.  As we later compare
  # stage2 and stage3 we are merely avoid doing redundant work, plus we apply
*************** configure-target: [+
*** 770,775 ****
--- 827,838 ----
  
  # The target built for a native non-bootstrap build.
  .PHONY: all
+ 
+ # --enable-pgo-build enables the PGO build.
+ # 1. First build with -fprofile-generate.
+ # 2. Use "make maybe-check-*" to generate profiling data.
+ # 3. Use "make clean" to remove the previous build.
+ # 4. Rebuild with -fprofile-use.
  all:
  @if gcc-bootstrap
  	[ -f stage_final ] || echo stage3 > stage_final
*************** all:
*** 778,784 ****
  	$(MAKE) $(RECURSE_FLAGS_TO_PASS) `cat stage_final`-bubble
  @endif gcc-bootstrap
  	@: $(MAKE); $(unstage)
! 	@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  @if gcc-bootstrap
  	if [ -f stage_last ]; then \
--- 841,847 ----
  	$(MAKE) $(RECURSE_FLAGS_TO_PASS) `cat stage_final`-bubble
  @endif gcc-bootstrap
  	@: $(MAKE); $(unstage)
! 	+@r=`${PWD_COMMAND}`; export r; \
  	s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  @if gcc-bootstrap
  	if [ -f stage_last ]; then \
*************** all:
*** 786,792 ****
  	  $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \
  	else \
  @endif gcc-bootstrap
! 	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target \
  @if gcc-bootstrap
  	    ; \
  	fi \
--- 849,865 ----
  	  $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \
  	else \
  @endif gcc-bootstrap
! 	  $(MAKE) $(RECURSE_FLAGS_TO_PASS) \
! 		$(PGO_BUILD_GEN_FLAGS_TO_PASS) all-host all-target \
! @if pgo-build
! 	&& $(MAKE) $(RECURSE_FLAGS_TO_PASS) \
! 		$(PGO_BUILD_TRAINING_MFLAGS) \
! 		$(PGO_BUILD_TRAINING_FLAGS_TO_PASS) \
! 		$(PGO_BUILD_TRAINING) \
! 	&& $(MAKE) $(RECURSE_FLAGS_TO_PASS) clean \
! 	&& $(MAKE) $(RECURSE_FLAGS_TO_PASS) \
! 		$(PGO_BUILD_USE_FLAGS_TO_PASS) all-host all-target \
! @endif pgo-build
  @if gcc-bootstrap
  	    ; \
  	fi \
*************** do-[+make_target+]:
*** 836,842 ****
  # Here are the targets which correspond to the do-X targets.
  
  .PHONY: info installcheck dvi pdf html
! .PHONY: install-info install-pdf install-html
  .PHONY: clean distclean mostlyclean maintainer-clean realclean
  .PHONY: local-clean local-distclean local-maintainer-clean
  info: do-info
--- 909,915 ----
  # Here are the targets which correspond to the do-X targets.
  
  .PHONY: info installcheck dvi pdf html
! .PHONY: install-info install-dvi install-pdf install-html
  .PHONY: clean distclean mostlyclean maintainer-clean realclean
  .PHONY: local-clean local-distclean local-maintainer-clean
  info: do-info
*************** install-info: do-install-info dir.info
*** 855,860 ****
--- 928,935 ----
  	  $(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info; \
  	else true; fi
  
+ install-dvi: do-install-dvi
+ 
  install-pdf: do-install-pdf
  
  install-html: do-install-html
diff -Nrcpad gcc-11.3.0/NEWS gcc-12.1.0/NEWS
*** gcc-11.3.0/NEWS	Thu Apr 21 07:59:58 2022
--- gcc-12.1.0/NEWS	Fri May  6 07:31:41 2022
*************** that led to GCC 3. For information on GC
*** 5,12 ****
  see ONEWS.
  
  ======================================================================
! http://gcc.gnu.org/gcc-11/index.html
  
                               GCC 11 Release Series
  
     April 21, 2022
--- 5,864 ----
  see ONEWS.
  
  ======================================================================
! http://gcc.gnu.org/gcc-12/index.html
!                              GCC 12 Release Series
! 
!    May 6, 2022
! 
!    The GCC developers are pleased to announce the release of GCC 12.1.
! 
!    This release is a major release, containing new features (as well as
!    many other improvements) relative to GCC 11.x.
! 
! Release History
! 
!    GCC 12.1
!           May 6, 2022 ([1]changes, [2]documentation)
! 
! References and Acknowledgements
! 
!    GCC used to stand for the GNU C Compiler, but since the compiler
!    supports several other languages aside from C, it now stands for the
!    GNU Compiler Collection.
! 
!    A list of [3]successful builds is updated as new information becomes
!    available.
! 
!    The GCC developers would like to thank the numerous people that have
!    contributed new features, improvements, bug fixes, and other changes as
!    well as test results to GCC. This [4]amazing group of volunteers is
!    what makes GCC successful.
! 
!    For additional information about GCC please refer to the [5]GCC project
!    web site or contact the [6]GCC development mailing list.
! 
!    To obtain GCC please use [7]our mirror sites or [8]our version control
!    system.
! 
! 
!     For questions related to the use of GCC, please consult these web
!     pages and the [9]GCC manuals. If that fails, the
!     [10]gcc-help@gcc.gnu.org mailing list might help. Comments on these
!     web pages and the development of GCC are welcome on our developer
!     list at [11]gcc@gcc.gnu.org. All of [12]our lists have public
!     archives.
! 
!    Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
!    distribution of this entire article is permitted in any medium,
!    provided this notice is preserved.
! 
!    These pages are [14]maintained by the GCC team. Last modified
!    2022-05-06[15].
! 
! References
! 
!    1. http://gcc.gnu.org/gcc-12/changes.html
!    2. http://gcc.gnu.org/onlinedocs/12.1.0/
!    3. http://gcc.gnu.org/gcc-12/buildstat.html
!    4. http://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Contributors.html
!    5. http://gcc.gnu.org/index.html
!    6. mailto:gcc@gcc.gnu.org
!    7. http://gcc.gnu.org/mirrors.html
!    8. http://gcc.gnu.org/git.html
!    9. https://gcc.gnu.org/onlinedocs/
!   10. mailto:gcc-help@gcc.gnu.org
!   11. mailto:gcc@gcc.gnu.org
!   12. https://gcc.gnu.org/lists.html
!   13. https://www.fsf.org/
!   14. https://gcc.gnu.org/about.html
!   15. http://validator.w3.org/check/referer
! ======================================================================
! http://gcc.gnu.org/gcc-12/changes.html
!                              GCC 12 Release Series
!                         Changes, New Features, and Fixes
! 
!    This page is a "brief" summary of some of the huge number of
!    improvements in GCC 12. You may also want to check out our [1]Porting
!    to GCC 12 page and the [2]full GCC documentation.
! 
! Caveats
! 
!      * An ABI incompatibility between C and C++ when passing or returning
!        by value certain aggregates containing zero width bit-fields has
!        been discovered on various targets. As mentioned in [3]PR102024,
!        since the [4]PR42217 fix in GCC 4.5 the C++ front-end has been
!        removing zero width bit-fields from the internal representation of
!        the aggregates after the layout of those aggregates, but the C
!        front-end kept them, so passing e.g. struct S { float a; int : 0;
!        float b; } or struct T { float c; int : 0; } by value could differ
!        between C and C++. Starting with GCC 12 the C++ front-end no longer
!        removes those bit-fields from the internal representation and per
!        clarified psABI some targets have been changed, so that they either
!        ignore those bit-fields in the argument passing by value decisions
!        in both C and C++, or they always take them into account. x86-64,
!        ARM and AArch64 will always ignore them (so there is a C ABI
!        incompatibility between GCC 11 and earlier with GCC 12 or later),
!        PowerPC64 ELFv2 and S/390 always take them into account (so there
!        is a C++ ABI incompatibility, GCC 4.4 and earlier compatible with
!        GCC 12 or later, incompatible with GCC 4.5 through GCC 11). RISC-V
!        has changed the handling of these already starting with GCC 10. As
!        the ABI requires, MIPS takes them into account handling function
!        return values so there is a C++ ABI incompatibility with GCC 4.5
!        through 11. For function arguments on MIPS, refer to [5]the MIPS
!        specific entry. GCC 12 on the above targets will report such
!        incompatibilities as warnings or other diagnostics unless
!        -Wno-psabi is used.
!      * C: Computed gotos require a pointer type now.
!      * C++: Two non-standard std::pair constructors have been deprecated.
!        These allowed the use of an rvalue and a literal 0 to construct a
!        pair containing a move-only type and a pointer. The nullptr keyword
!        should be used to initialize the pointer member instead of a
!        literal 0, as this is portable to other C++ implementations.
!      * The configuration option --enable-libstdcxx-allocator no longer
!        supports the bitmap, mt, and pool arguments. Those configurations
!        had been broken for some time.
!      * Fortran: OpenMP code using the omp_lib.h include file can no longer
!        be compiled with -std=f95 but now requires at least -std=f2003.
!        Alternatively, use the omp_lib module, which still supports
!        -std=f95 and is recommended to be used instead in general.
!      * OpenMP offloading to Intel MIC has been deprecated and will be
!        removed in a future release.
!      * The cr16 target with the cr16-*-* configuration has been obsoleted
!        and will be removed in a future release.
!      * The hppa[12]*-*-hpux10* and hppa[12]*-*-hpux11* configurations
!        targeting 32-bit PA-RISC with HP-UX have been obsoleted and will be
!        removed in a future release.
!      * The m32c*-*-rtems* configuration has been obsoleted and will be
!        removed in a future release.
!      * The support for the m32r-*-linux*, m32rle-*-linux*,
!        m68k*-*-openbsd* and vax-*-openbsd* configurations has been
!        removed.
!      * STABS: Support for emitting the STABS debugging format is
!        deprecated and will be removed in the next release. All ports now
!        default to emit DWARF (version 2 or later) debugging info or are
!        obsoleted.
!      * The optimization level -Ofast now implies
!        -fno-semantic-interposition.
! 
! General Improvements
! 
!      * Vectorization is enabled at -O2 which is now equivalent to the
!        original -O2 -ftree-vectorize -fvect-cost-model=very-cheap. Note
!        that default vectorizer cost model has been changed which used to
!        behave as -fvect-cost-model=cheap were specified.
!      * GCC now supports the [6]ShadowCallStack sanitizer, which can be
!        enabled using the command-line option
!        [7]-fsanitize=shadow-call-stack. This sanitizer currently only
!        works on AArch64 targets and it requires an environment in which
!        all code has been compiled with -ffixed-r18. Its primary initial
!        user is the Linux kernel.
! 
! New Languages and Language specific improvements
! 
!      * OpenMP
!           + OpenMP 5.0 support has been extended: The close map modifier
!             and the affinity clause are now supported. In addition Fortran
!             gained additionally the following features which were
!             available in C and C++ before: declare variant is now
!             available, depobj, mutexinoutset and iterator can now also be
!             used with the depend clause, defaultmap has been updated for
!             OpenMP 5.0, and the loop directive and combined directives
!             involving the master directive have been added.
!           + The following OpenMP 5.1 features have been added: support for
!             expressing OpenMP directives as C++ 11 attributes, the masked
!             and scope construct, the nothing and error directives, and
!             using primary with the proc_bind clause and OMP_PROC_BIND
!             environment variable, the reproducible and unconstrained
!             modifiers to the order clause, and, for C/C++ only, the align
!             and allocator modifiers to the allocate clause and the atomic
!             extensions are now available. The OMP_PLACE environment
!             variable supports the OpenMP 5.1 features. In addition the
!             OMP_NUM_TEAMS and OMP_TEAMS_THREAD_LIMIT environment variables
!             and their associated API routines are now supported as well as
!             the memory-allocation routines added for Fortran and extended
!             for C/C++ in OpenMP 5.1. In Fortran code, strictly structured
!             blocks can be used.
!           + The [8]OpenMP Implementation Status can be found in the
!             libgomp manual.
!      * The new warning flag -Wopenacc-parallelism was added for OpenACC.
!        It warns about potentially suboptimal choices related to OpenACC
!        parallelism.
!      * The offload target code generation for OpenMP and OpenACC can now
!        be better adjusted using the new [9]-foffload-options= flag and the
!        pre-existing but now documented [10]-foffload= flag.
! 
!   Ada
! 
!      * Ada 2022
!           + Added the -gnat2022 flag to indicate strict Ada 2022
!             compliance. The old -gnat2020 flag is now deprecated.
!           + Support for Big Numbers (Annex G) has seen continuous
!             improvements. It is now considered complete. It is compatible
!             with SPARK, i.e. can be used from SPARK code.
!           + Continuous improvements to the Ada 2022 standard since GCC 11.
!           + Greatly improved compile time support. More functions can now
!             have the with Static aspect and can be used in more contexts.
!      * Ada 2022 extensions. The use of the -gnatX flag is necessary to
!        access these features as they are not considered stable or
!        standard.
!           + Fixed lower bound for unconstrained arrays.
!                o type Matrix is array (Natural range 0 .. <>, Natural
!                  range 0 .. <>) of Integer; is now valid.
!                o Subtypes can also specify a lower bound: subtype String_1
!                  is String (1 .. <>);. Boundaries from slices will "slide"
!                  to the correct lower bound of the subtype.
!           + Generalized Object.Operand notation. The follwing code is now
!             valid V.Add_Element(42);, with V being a vector, for example.
!           + Additional when constructs. Keywords return, goto and raise
!             can now use when in addition to the existing exit when. The
!             following expression is therefore now valid raise
!             Constraint_Error with "Element is null" when Element = null;
!           + Pattern matching
!                o The case statement has been extended to cover records and
!                  arrays as well as finer grained casing on scalar types.
!                  In the future it is expected to provide more compile time
!                  guarantees when accessing discriminated fields. Case
!                  exhaustion is supported for pattern matching. An example
!                  would be
! type Sign is (Neg, Zero, Pos);
  
+ function Multiply (S1, S2 : Sign) return Sign is
+   (case (S1, S2) is
+      when (Neg, Neg) | (Pos, Pos) => Pos,
+      when (Zero, <>) | (<>, Zero) => Zero,
+      when (Neg, Pos) | (Pos, Neg) => Neg);
+ 
+      * gnatfind and gnatxref, which were already deprecated, have been
+        removed.
+      * Greatly expanded code covered by contracts. Thanks to this work,
+        there are now several Ada standard libraries fully proven in SPARK
+        which means they have no runtime nor logical errors. They are
+        mostly numeric and string handling libraries.
+      * Enable return-slot optimization for Pure functions.
+      * General optimizations, improvements and additions to the standard
+        library. Performance, correctness and in some cases stability was
+        improved. Memory pools have also seen some minor enhancements.
+      * Improvements to embedded-RTOS targets such as RTEMS, VxWorks and
+        QNX. Older targets were removed or cleaned.
+      * Added some [11]hardening features.
+ 
+   C family
+ 
+      * Support for __builtin_shufflevector compatible with the clang
+        language extension was added.
+      * Support for attribute unavailable was added.
+      * A new built-in function, __builtin_assoc_barrier, was added. It can
+        be used to inhibit re-association of floating-point expressions.
+      * Support for __builtin_dynamic_object_size compatible with the clang
+        language extension was added.
+      * New warnings:
+           + [12]-Wbidi-chars warns about potentially misleading UTF-8
+             bidirectional control characters. The default is
+             -Wbidi-chars=unpaired ([13]PR103026)
+           + [14]-Warray-compare warns about comparisons between two
+             operands of array type ([15]PR97573)
+      * Enhancements to existing warnings:
+           + [16]-Wattributes has been extended so that it's possible to
+             use -Wno-attributes=ns::attr or -Wno-attributes=ns:: to
+             suppress warnings about unknown scoped attributes (in C++11
+             and C2X). Similarly, #pragma GCC diagnostic ignored_attributes
+             "vendor::attr" can be used to achieve the same effect
+             ([17]PR101940)
+ 
+   C
+ 
+      * Some new features from the upcoming C2X revision of the ISO C
+        standard are supported with -std=c2x and -std=gnu2x. Some of these
+        features are also supported as extensions when compiling for older
+        language versions. In addition to the features listed, some
+        features previously supported as extensions and now added to the C
+        standard are enabled by default in C2X mode and not diagnosed with
+        -std=c2x -Wpedantic.
+           + Digit separators (as in C++) are supported for C2X.
+           + The #elifdef and #elifndef preprocessing directives are now
+             supported.
+           + The printf and scanf format checking with [18]-Wformat now
+             supports the %b format specified by C2X for binary integers,
+             and the %B format recommended by C2X for printf.
+ 
+   C++
+ 
+      * Several C++23 features have been implemented:
+           + [19]P1938R3, if consteval ([20]PR100974)
+           + [21]P0849R8, auto(x): decay-copy in the language
+             ([22]PR103049)
+           + [23]P2242R3, Non-literal variables (and labels and gotos) in
+             constexpr functions ([24]PR102612)
+           + [25]P2334R1, Support for preprocessing directives elifdef and
+             elifndef ([26]PR102616)
+           + [27]P2360R0, Extend init-statement to allow alias-declaration
+             ([28]PR102617)
+           + [29]P2128R6, Multidimensional subscript operator
+           + [30]DR 2397, auto specifier for pointers and references to
+             arrays ([31]PR100975)
+      * Several C++ Defect Reports have been resolved, e.g.:
+           + [32]DR 960, Covariant functions and lvalue/rvalue references
+           + [33]DR 1227, Mixing immediate and non-immediate contexts in
+             deduction failure
+           + [34]DR 1315, Restrictions on non-type template arguments in
+             partial specializations
+           + [35]DR 2082, Referring to parameters in unevaluated operands
+             of default arguments
+           + [36]DR 2351, void{}
+           + [37]DR 2374, Overly permissive specification of enum
+             direct-list-initialization
+           + [38]DR 2397, auto specifier for pointers and references to
+             arrays
+           + [39]DR 2446, Questionable type-dependency of concept-ids
+      * New command-line option -fimplicit-constexpr can be used to make
+        inline functions implicitly constexpr ([40]git)
+      * New command-line option -ffold-simple-inlines can be used to fold
+        calls to certain trivial inline functions (currently std::move,
+        std::forward, std::addressof and std::as_const). In contrast to
+        inlining such calls, folding means that no intermediate code or
+        debug information will be generated for them; this minimizes the
+        abstraction penalty incurred for using these functions versus using
+        the fundamental operations from which they're defined (e.g.
+        std::move versus static_cast). This flag is enabled by default when
+        -fno-inline is not active.
+      * Deduction guides can be declared at class scope ([41]PR79501)
+      * [42]-Wuninitialized warns about using uninitialized variables in
+        member initializer lists ([43]PR19808)
+      * [44]-Wint-in-bool-context is now disabled when instantiating a
+        template ([45]git)
+      * Stricter checking of attributes on friend declarations: if a friend
+        declaration has an attribute, that declaration must be a
+        definition. Moreover, a C++11 attribute cannot appear in the middle
+        of the decl-specifier-seq. ([46]PR99032)
+      * New warning options for C++ language mismatches:
+        -Wc++11-extensions, -Wc++14-extensions, -Wc++17-extensions,
+        -Wc++20-extensions, and -Wc++23-extensions. They are enabled by
+        default and can be used to control existing pedwarns about
+        occurrences of new C++ constructs in code using an old C++ standard
+        dialect.
+      * New warning [47]-Wmissing-requires warns about missing requires
+        ([48]git)
+      * The existing std::is_constant_evaluated in if warning was extended
+        to warn in more cases ([49]PR100995)
+      * [50]-Waddress has been enhanced so that it now warns about, for
+        instance, comparing the address of a nonstatic member function to
+        null ([51]PR102103)
+      * Errors about narrowing are no longer hidden if they occur in system
+        headers
+      * Ordered comparison of null pointers is now rejected ([52]PR99701)
+      * Anonymous structs with bases are now rejected ([53]git)
+      * The compiler rejects taking the address of an immediate member
+        function ([54]PR102753)
+      * The compiler has support for C++20
+        __cpp_lib_is_pointer_interconvertible and
+        __cpp_lib_is_layout_compatible to help the C++ library implement
+        [55]P0466, Layout-compatibility and Pointer-interconvertibility
+        Traits ([56]PR101539)
+      * Memory usage of constraint subsumption has been improved
+        ([57]PR100828)
+      * constinit thread_local variables are optimized better
+        ([58]PR101786)
+      * Support for C++17 std::hardware_destructive_interference_size was
+        added, along with the [59]-Winterference-size warning ([60]git)
+      * Many bugs in the CTAD handling have been fixed ([61]PR101344,
+        [62]PR101883, [63]PR89062, [64]PR101233, [65]PR88252, [66]PR86439,
+        [67]PR98832, [68]PR102933 ...)
+      * Two-stage name lookup for dependent operator expressions has been
+        corrected ([69]PR51577)
+      * Several issues with constrained variable templates have been fixed
+        ([70]PR98486)
+      * The compiler performs less instantiating when doing speculative
+        constant evaluation ([71]git)
+      * Various diagnostic improvements; e.g., a more precise caret
+        location for pointer-to-member expressions
+      * The new -fconstexpr-fp-except flag allows IEC559 floating point
+        exceptions in constant-expressions.
+ 
+     Runtime Library (libstdc++)
+ 
+      * Improved experimental C++20 support, including:
+           + std::vector, std::basic_string, std::optional, and
+             std::variant can be used in constexpr functions.
+           + std::make_shared for arrays with default initialization, and
+             std::atomic<std::shared_ptr<T>>.
+           + Layout-compatibility and pointer-interconvertibility traits.
+      * Improved experimental C++23 support, including:
+           + Monadic operations for std::optional.
+           + std::move_only_function
+           + <spanstream>
+           + std::basic_string::resize_and_overwrite
+           + std::unique_ptr can be used in constexpr functions.
+           + <stacktrace> (not built by default, requires linking to an
+             extra library).
+           + <stdatomic.h>
+           + std::invoke_r
+           + constexpr std::type_info::operator==
+ 
+   Fortran
+ 
+      * WG5/N1942, "TS 29113 Further Interoperability of Fortran with C",
+        is now fully supported. In addition to implementing previously
+        missing functionality, such as support for character arguments of
+        length greater than one in functions marked bind(c) and gaps in the
+        handling for assumed-rank arrays, numerous other bugs have been
+        fixed, and an extensive set of new conformance test cases has been
+        added.
+      * GCC 12 now uses OPERATION as the name of the function to the
+        CO_REDUCE intrinsic for the pairwise reduction, thus conforming to
+        the Fortran 2018 standard. Previous versions used OPERATOR which
+        conforms to TS 18508.
+      * On POWER systems which support it, the -mabi=ieeelongdouble option
+        now selects the IEEE 128-bit floating point format for
+        REAL(KIND=16). R16_IBM and R16_IEEE have been added to the
+        -fconvert option, the CONVERT specifyer of the OPEN statement and
+        the GFORTRAN_CONVERT_UNIT environment variable.
+ 
+ libgccjit
+ 
+      * The libgccjit API gained 30 new entry points:
+           + 17 new "reflection" entrypoints for querying functions and
+             types ([72]LIBGCCJIT_ABI_16)
+           + [73]gcc_jit_lvalue_set_tls_model for supporting thread-local
+             variables ([74]LIBGCCJIT_ABI_17)
+           + [75]gcc_jit_lvalue_set_link_section for setting the link
+             section of global variables, analogous to
+             [76]__attribute__((section(".section")))
+             ([77]LIBGCCJIT_ABI_18)
+           + 4 new entrypoints for initializing global variables and
+             creating constructors for rvalues ([78]LIBGCCJIT_ABI_19)
+           + Support for sized integer types, including 128-bit integers
+             and helper functions for such types ([79]LIBGCCJIT_ABI_20)
+           + [80]gcc_jit_context_new_bitcast for reinterpreting the bits of
+             an rvalue as a different type ([81]LIBGCCJIT_ABI_21)
+           + [82]gcc_jit_lvalue_set_register_name for setting a specific
+             register for a variable ([83]LIBGCCJIT_ABI_22)
+           + [84]gcc_jit_context_set_bool_print_errors_to_stderr
+             ([85]LIBGCCJIT_ABI_23)
+           + 2 new entrypoints for setting the alignment of a variable
+             ([86]LIBGCCJIT_ABI_24)
+      * libgccjit has gained support for the use of various atomic builtins
+        ([87]PR96066, [88]PR96067)
+      * [89]gcc_jit_context_new_cast is now able to handle truncation and
+        extension between different integer types ([90]PR95498)
+ 
+ New Targets and Target Specific Improvements
+ 
+   AArch64 & arm
+ 
+      * Newer revisions of the Arm Architecture are supported as arguments
+        to the -march option: armv8.7-a, armv8.8-a, armv9-a.
+      * The Arm Cortex-A510 CPU is now supported through the cortex-a510
+        argument to the -mcpu and -mtune options.
+      * GCC can now auto-vectorize operations performing sign-differing
+        dot-product operations, taking advantage of instructions in the
+        Advanced SIMD (AArch64/AArch32) and SVE (AArch64) instruction sets.
+ 
+   AArch64
+ 
+      * A number of new CPUs are supported through the -mcpu and -mtune
+        options (GCC identifiers in parentheses).
+           + Ampere-1 (ampere1).
+           + Arm Cortex-A710 (cortex-a710).
+           + Arm Cortex-X2 (cortex-x2).
+      * The 64-byte atomic load/store intrinsics to accelerator memory from
+        the [91]2020 Arm Architecture extensions are supported through the
+        +ls64 option extension.
+      * Initial code generation support is supported for hardware
+        instructions used to accelerate the memcpy,memmove and memset
+        standard functions. These instructions can be generated when
+        compiling with the +mopsoption extension.
+      * The ACLE Advanced SIMD intrinsics accessible through the arm_neon.h
+        header have been significantly reimplemented and generate
+        higher-performing code than previous GCC versions.
+      * The option -mtune=neoverse-512tvb is added to tune for Arm Neoverse
+        cores that have a total vector bandwidth of 512 bits. Please refer
+        to the documentation for more details.
+ 
+   AMD Radeon (GCN)
+ 
+      * Debug experience with ROCGDB has been improved.
+      * Support for the type __int128_t/integer(kind=16) was added.
+      * For offloading, the limitation of using only one wavefront per
+        compute unit (CU) has been lifted. Up to 40 workgroups per CU and
+        16 wavefronts per workgroup are supported (up to a limit of 40
+        wavefronts in total, per CU). Additionally, the number of used
+        wavefronts and workgroups was tuned for performance.
+ 
+   arm
+ 
+      * Support is added for accessing the stack canary value via the TLS
+        register through the -fstack-protector-guard=tls and
+        -mstack-protector-guard-offset= options. This intended for use in
+        Linux kernel development. Please refer to the documentation for
+        more details.
+ 
+   BPF
+ 
+      * Support for CO-RE (compile-once, run-everywhere) has been added to
+        the BPF backend. CO-RE allows to compile portable BPF programs that
+        are able to run among different versions of the Linux kernel.
+ 
+   IA-32/x86-64
+ 
+      * New ISA extension support for Intel AVX512-FP16 was added.
+        AVX512FP16 intrinsics are available via the -mavx512fp16 compiler
+        switch.
+      * For both C and C++ the _Float16 type is supported on x86 systems
+        with SSE2 enabled. Without {-mavx512fp16}, all operations will be
+        emulated in software and float instructions.
+      * Mitigation against straight line speculation (SLS) for function
+        return and indirect jump is supported via
+        -mharden-sls=[none|all|return|indirect-jmp].
+      * Add CS prefix to call and jmp to indirect thunk with branch target
+        in r8-r15 registers via -mindirect-branch-cs-prefix.
+      * Always use global offset table (GOT) to access external data and
+        function symbols when the new -mno-direct-extern-access
+        command-line option is specified.
+ 
+   MIPS
+ 
+      * The ABI passing arguments containing zero-width fields (for
+        example, C/C++ zero-width bit-fields, GNU C/C++ zero-length arrays,
+        and GNU C empty structs) has changed. Now a zero-width field will
+        not prevent an aligned 64-bit floating-point field next to it from
+        being passed through FPR. This is compatible with LLVM, but
+        incompatible with previous GCC releases. GCC 12 on MIPS will report
+        such incompatibilities as an inform unless -Wno-psabi is used.
+      * The ABI returning values containing C++17 empty bases has changed.
+        Now an empty base will not prevent an aggregate containing only one
+        or two floating-point fields from being returned through FPR. This
+        is compatible with GCC 6 and earlier, but incompatible with GCC 7
+        through 11. GCC 12 on MIPS will report such incompatibilities as an
+        inform unless -Wno-psabi is used.
+ 
+   NVPTX
+ 
+      * The -march flag has been added. The -misa flag is now considered an
+        alias of the -march flag.
+      * Support for PTX ISA target architectures sm_53, sm_70, sm_75 and
+        sm_80 has been added. These can be specified using the -march flag.
+      * The default PTX ISA target architecture has been set back to sm_30,
+        to fix support for sm_30 boards.
+      * The -march-map flag has been added. The -march-map value will be
+        mapped to an valid -march flag value. For instance,
+        -march-map=sm_50 maps to -march=sm_35. This can be used to specify
+        that generated code is to be executed on a board with at least some
+        specific compute capability, without having to know the valid
+        values for the -march flag.
+      * The -mptx flag has been added to specify the PTX ISA version for
+        the generated code; permitted values are 3.1 (matches previous GCC
+        versions), 6.0, 6.3, and 7.0. If not specified, the used version is
+        the minimal version required for -march but at least 6.0.
+      * An mptx-3.1 multilib was added. This allows using older drivers
+        which do not support PTX ISA version 6.0.
+      * The new __PTX_SM__ predefined macro allows code to check the PTX
+        ISA target architecture being targeted by the compiler.
+      * The new __PTX_ISA_VERSION_MAJOR__ and __PTX_ISA_VERSION_MINOR__
+        predefined macros allows code to check the PTX ISA version being
+        targeted by the compiler.
+ 
+   PowerPC / PowerPC64 / RS6000
+ 
+      * The internal implementation of Power's target-specific built-in
+        functions has been rewritten to be easier and less error-prone to
+        maintain. Every attempt has been made to ensure that the new
+        behavior matches the old behavior, but inevitably some bugs can be
+        expected. Please report any problems via [92]GCC Bugzilla.
+      * The built-in functions __builtin_get_texasr, __builtin_get_texasru,
+        __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr,
+        __builtin_set_texasru, __builtin_set_tfhar, and __builtin_set_tfiar
+        now behave as documented in all supported configurations. On prior
+        releases, the arguments and return values of these functions were
+        treated as unsigned long long instead of as unsigned long, when the
+        options -m32 -mpowerpc64 were in effect.
+      * The overloaded built-in functions vec_cntlz_lsbb and vec_cnttz_lsbb
+        now behave as documented. On prior releases, these built-in
+        functions had incorrect semantics on little-endian targets.
+ 
+   PRU
+ 
+      * The [93]__regio_symbol variable qualifier has been added. It allows
+        easier access in C programs to the __R30 and __R31 CPU I/O
+        registers.
+ 
+   RISC-V
+ 
+      * Default ISA spec version was bump to 20191213, more detail see this
+        [94]announcement
+      * New ISA extension support for zba, zbb, zbc, zbs was added.
+      * New ISA extension support for vector and scalar crypto was added,
+        only support architecture testing marco and -march= parsing.
+      * The option -mtune=thead-c906 is added to tune for T-HEAD c906
+        cores.
+ 
+ Operating Systems
+ 
+ Improvements to Static Analyzer
+ 
+      * The analyzer has gained a [95]-Wanalyzer-use-of-uninitialized-value
+        warning, similar to [96]-Wuninitialized and
+        [97]-Wmaybe-uninitialized, but based on an interprocedural
+        path-sensitive analysis ([98]PR95006).
+        Such warnings are not disabled by the new
+        [99]-ftrivial-auto-var-init (see below), as the latter is
+        considered a mitigation option.
+      * [100]-Wanalyzer-write-to-const and
+        [101]-Wanalyzer-write-to-string-literal will now check for
+        [102]__attribute__ ((access, ....)) on calls to externally-defined
+        functions, and complain about read-only regions pointed to by
+        arguments marked with a write_only or read_write attribute
+        ([103]PR104793).
+      * The analyzer's "taint" mode, activated by
+        [104]-fanalyzer-checker=taint (in addition to [105]-fanalyzer), has
+        gained four new taint-based warnings:
+           + [106]-Wanalyzer-tainted-allocation-size for e.g.
+             attacker-controlled malloc and alloca,
+           + [107]-Wanalyzer-tainted-divisor for detecting where an
+             attacker can inject a divide-by-zero,
+           + [108]-Wanalyzer-tainted-offset for attacker-controlled pointer
+             offsets,
+           + [109]-Wanalyzer-tainted-size for attacker-controlled values
+             being used as a size parameter to calls to memset or to
+             functions marked with [110]__attribute__ ((access, ....)).
+        The existing [111]-Wanalyzer-tainted-array-index has been reworded
+        to talk about "attacker-controlled" rather than "tainted" values,
+        for consistency with the new warnings.
+        A new [112]__attribute__ ((tainted_args)) has been added to the C
+        and C++ frontends, usable on functions, and on function pointer
+        callback fields in structs. The analyzer's taint mode will treat
+        all parameters and buffers pointed to by parameters of such
+        functions as being attacked-controlled, such as for annotating
+        system calls in an operating system kernel as being an "attack
+        surface".
+      * The analyzer now respects [113]__attribute__((const)): it will
+        treat such functions as returning the same value when given the
+        same inputs ([114]PR104434), and as having no side effects
+        ([115]PR104576).
+      * The analyzer is now able to split its analysis into multiple
+        execution paths in places where there isn't a split in the control
+        flow graph. For example, it now handles realloc calls by splitting
+        the execution path into three possible outcomes for the call:
+           + failure, returning NULL
+           + success, growing the buffer in-place without moving it
+           + success, allocating a new buffer, copying the content of the
+             old buffer to it, and freeing the old buffer
+      * The analyzer's interprocedural path exploration logic is now able
+        to track calls through function pointers.
+      * The analyzer now makes the assumption that if we know PTR is
+        non-NULL, then (PTR + OFFSET) is also non-NULL. This isn't strictly
+        true, but eliminates false positives in practice ([116]PR101962).
+      * The analyzer has gained some initial support for inline assembler
+        code. This is extremely limited, and is purely to help suppress
+        false positives when analyzing the Linux kernel, which makes heavy
+        use of inline assembler ([117]PR101570).
+      * The way the analyzer tracks the state of memory along an execution
+        path has been improved in various ways for GCC 12:
+           + An optimization for representing bulk updates to memory (e.g.
+             zero fills) has been removed as it never worked well. In GCC
+             12 it has been replaced with a simpler and more accurate
+             approach, eliminating many false positives ([118]PR95006).
+           + Various optimizations have been added, speeding up the
+             analysis on a particularly problematic source file from 4
+             minutes down to 17 seconds ([119]PR104943, [120]PR104954, and
+             [121]PR104955).
+           + The analyzer now tracks the sizes of dynamically-allocated
+             regions, both on the heap (via malloc etc) and stack (via
+             alloca), though none of the analyzer warnings make use of this
+             yet in GCC 12.
+      * The analyzer's handling of switch statements has been rewritten,
+        fixing various bugs.
+ 
+ Other significant improvements
+ 
+   Eliminating uninitialized variables
+ 
+      * GCC can now [122]initialize all stack variables implicitly,
+        including padding. This is intended to eliminate all classes of
+        uninitialized stack variable flaws. Lack of explicit initialization
+        will still warn when [123]-Wuninitialized is active. For best
+        debugging, use of the new command-line option
+        [124]-ftrivial-auto-var-init=pattern can be used to fill variables
+        with a repeated 0xFE pattern, which tends to illuminate many bugs
+        (e.g. pointers receive invalid addresses, sizes and indices are
+        very large). For best production results, the new command-line
+        option [125]-ftrivial-auto-var-init=zero can be used to fill
+        variables with 0x00, which tends to provide a safer state for bugs
+        (e.g. pointers are NULL, strings are NUL filled, and sizes and
+        indices are 0).
+ 
+   Debugging formats
+ 
+      * GCC can now generate debugging information in [126]CTF, a
+        lightweight debugging format that provides information about C
+        types and the association between functions and data symbols and
+        types. This format is designed to be embedded in ELF files and to
+        be very compact and simple. A new command-line option -gctf enables
+        the generation of CTF.
+      * GCC can now generate debugging information in BTF. This is a
+        debugging format mainly used in BPF programs and the Linux kernel.
+        The compiler can generate BTF for any target, when enabled with the
+        command-line option -gbtf
+ 
+ GCC 12.1
+ 
+    This is the [127]list of problem reports (PRs) from GCC's bug tracking
+    system that are known to be fixed in the 12.1 release. This list might
+    not be complete (that is, it is possible that some PRs that have been
+    fixed are not listed here).
+ 
+ 
+     For questions related to the use of GCC, please consult these web
+     pages and the [128]GCC manuals. If that fails, the
+     [129]gcc-help@gcc.gnu.org mailing list might help. Comments on these
+     web pages and the development of GCC are welcome on our developer
+     list at [130]gcc@gcc.gnu.org. All of [131]our lists have public
+     archives.
+ 
+    Copyright (C) [132]Free Software Foundation, Inc. Verbatim copying and
+    distribution of this entire article is permitted in any medium,
+    provided this notice is preserved.
+ 
+    These pages are [133]maintained by the GCC team. Last modified
+    2022-05-06[134].
+ 
+ References
+ 
+    1. http://gcc.gnu.org/gcc-12/porting_to.html
+    2. http://gcc.gnu.org/onlinedocs/index.html#current
+    3. https://gcc.gnu.org/PR102024
+    4. https://gcc.gnu.org/PR42217
+    5. http://gcc.gnu.org/gcc-12/changes.html#mips_zero_width_fields
+    6. https://clang.llvm.org/docs/ShadowCallStack.html
+    7. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Instrumentation-Options.html#index-fsanitize_003dshadow-call-stack
+    8. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/OpenMP-Implementation-Status.html
+    9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload-options
+   10. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload
+   11. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gnat_rm/Security-Hardening-Features.html#Security-Hardening-Features
+   12. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wbidi-chars
+   13. https://gcc.gnu.org/PR103026
+   14. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Warray-compare
+   15. https://gcc.gnu.org/PR97573
+   16. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wattributes
+   17. https://gcc.gnu.org/PR101940
+   18. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wformat
+   19. https://wg21.link/p1938
+   20. https://gcc.gnu.org/PR100974
+   21. https://wg21.link/p0849
+   22. https://gcc.gnu.org/PR103049
+   23. https://wg21.link/p2242
+   24. https://gcc.gnu.org/PR102612
+   25. https://wg21.link/p2334
+   26. https://gcc.gnu.org/PR102616
+   27. https://wg21.link/p2360
+   28. https://gcc.gnu.org/PR102617
+   29. https://wg21.link/p2128
+   30. https://wg21.link/cwg2397
+   31. https://gcc.gnu.org/PR100975
+   32. https://wg21.link/cwg960
+   33. https://wg21.link/cwg1227
+   34. https://wg21.link/cwg1315
+   35. https://wg21.link/cwg2082
+   36. https://wg21.link/cwg2351
+   37. https://wg21.link/cwg2374
+   38. https://wg21.link/cwg2397
+   39. https://wg21.link/cwg2446
+   40. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=87c2080b
+   41. https://gcc.gnu.org/PR79501
+   42. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
+   43. https://gcc.gnu.org/PR19808
+   44. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wint-in-bool-context
+   45. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a2b12bc
+   46. https://gcc.gnu.org/PR99032
+   47. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmissing-requires
+   48. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e18e56c7
+   49. https://gcc.gnu.org/PR100995
+   50. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Waddress
+   51. https://gcc.gnu.org/PR102103
+   52. https://gcc.gnu.org/PR99701
+   53. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3ead06c1
+   54. https://gcc.gnu.org/PR102753
+   55. https://wg21.link/p0466
+   56. https://gcc.gnu.org/PR101539
+   57. https://gcc.gnu.org/PR100828
+   58. https://gcc.gnu.org/PR101786
+   59. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Winterference-size
+   60. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=76b75018
+   61. https://gcc.gnu.org/PR101344
+   62. https://gcc.gnu.org/PR101883
+   63. https://gcc.gnu.org/PR89062
+   64. https://gcc.gnu.org/PR101233
+   65. https://gcc.gnu.org/PR88252
+   66. https://gcc.gnu.org/PR86439
+   67. https://gcc.gnu.org/PR98832
+   68. https://gcc.gnu.org/PR102933
+   69. https://gcc.gnu.org/PR51577
+   70. https://gcc.gnu.org/PR98486
+   71. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=1595fe44
+   72. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-16
+   73. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_tls_model
+   74. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-17
+   75. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_link_section
+   76. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Variable-Attributes.html#index-section-variable-attribute
+   77. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-18
+   78. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-19
+   79. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-20
+   80. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_bitcast
+   81. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-21
+   82. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_register_name
+   83. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-22
+   84. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/contexts.html#c.gcc_jit_context_set_bool_print_errors_to_stderr
+   85. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-23
+   86. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-24
+   87. https://gcc.gnu.org/PR96066
+   88. https://gcc.gnu.org/PR96067
+   89. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_cast
+   90. https://gcc.gnu.org/PR95498
+   91. https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2020
+   92. https://gcc.gnu.org/bugzilla/
+   93. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Named-Address-Spaces.html#PRU-Named-Address-Spaces
+   94. https://groups.google.com/a/groups.riscv.org/g/sw-dev/c/aE1ZeHHCYf4
+   95. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value
+   96. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
+   97. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
+   98. https://gcc.gnu.org/PR95006
+   99. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
+  100. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
+  101. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
+  102. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
+  103. https://gcc.gnu.org/PR104793
+  104. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer-checker
+  105. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
+  106. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size
+  107. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor
+  108. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset
+  109. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size
+  110. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
+  111. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index
+  112. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-tainted_005fargs-function-attribute
+  113. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-const-function-attribute
+  114. https://gcc.gnu.org/PR104434
+  115. https://gcc.gnu.org/PR104576
+  116. https://gcc.gnu.org/PR101962
+  117. https://gcc.gnu.org/PR101570
+  118. https://gcc.gnu.org/PR95006
+  119. https://gcc.gnu.org/PR104943
+  120. https://gcc.gnu.org/PR104954
+  121. https://gcc.gnu.org/PR104955
+  122. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
+  123. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
+  124. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
+  125. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
+  126. https://ctfstd.org/
+  127. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.0
+  128. https://gcc.gnu.org/onlinedocs/
+  129. mailto:gcc-help@gcc.gnu.org
+  130. mailto:gcc@gcc.gnu.org
+  131. https://gcc.gnu.org/lists.html
+  132. https://www.fsf.org/
+  133. https://gcc.gnu.org/about.html
+  134. http://validator.w3.org/check/referer
+ ======================================================================
+ http://gcc.gnu.org/gcc-11/index.html
                               GCC 11 Release Series
  
     April 21, 2022
*************** References
*** 85,91 ****
    19. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-11/changes.html
- 
                               GCC 11 Release Series
                          Changes, New Features, and Fixes
  
--- 937,942 ----
*************** General Improvements
*** 138,147 ****
              and
            + multicolumn characters (requiring more than one column to
              display in a monospace font)
!        For example, the character p ("GREEK SMALL LETTER PI (U+03C0)")
         occupies one column, and its UTF-8 encoding requires two bytes; the
!        character &#x1F642; ("SLIGHTLY SMILING FACE (U+1F642)") occupies
!        two columns, and its UTF-8 encoding requires four bytes.
         In GCC 11 the column numbers default to being column numbers,
         respecting multi-column characters. The old behavior can be
         restored using a new option [7]-fdiagnostics-column-unit=byte.
--- 989,998 ----
              and
            + multicolumn characters (requiring more than one column to
              display in a monospace font)
!        For example, the character π ("GREEK SMALL LETTER PI (U+03C0)")
         occupies one column, and its UTF-8 encoding requires two bytes; the
!        character 🙂 ("SLIGHTLY SMILING FACE (U+1F642)") occupies two
!        columns, and its UTF-8 encoding requires four bytes.
         In GCC 11 the column numbers default to being column numbers,
         respecting multi-column characters. The old behavior can be
         restored using a new option [7]-fdiagnostics-column-unit=byte.
*************** References
*** 835,841 ****
    18. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fprofile-values
    19. https://www.openmp.org/specifications/
    20. https://www.openacc.org/
!   21. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-11
    22. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/libgomp/Enabling-OpenACC.html
    23. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute
    24. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
--- 1686,1692 ----
    18. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fprofile-values
    19. https://www.openmp.org/specifications/
    20. https://www.openacc.org/
!   21. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-11
    22. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/libgomp/Enabling-OpenACC.html
    23. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute
    24. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
*************** References
*** 893,899 ****
    76. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-10/index.html
- 
                               GCC 10 Release Series
  
     April 8, 2021
--- 1744,1749 ----
*************** References
*** 974,980 ****
    20. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-10/changes.html
- 
                               GCC 10 Release Series
                          Changes, New Features, and Fixes
  
--- 1824,1829 ----
*************** New Languages and Language-Specific Impr
*** 1142,1150 ****
         the input encoding (UTF-8, by default), in addition to the UCN
         syntax (\uNNNN or \UNNNNNNNN) that is already supported:
  
! static const int p = 3;
! int get_na�ve_pi() {
!   return p;
  }
  
    C
--- 1991,1999 ----
         the input encoding (UTF-8, by default), in addition to the UCN
         syntax (\uNNNN or \UNNNNNNNN) that is already supported:
  
! static const int π = 3;
! int get_naïve_pi() {
!   return π;
  }
  
    C
*************** typedef svbool_t pred512 __attribute__((
*** 1424,1430 ****
              one. Previously it would always use SVE if possible.
            + If a vector loop uses Advanced SIMD rather than SVE, the
              vectorizer now considers using SVE to vectorize the left-over
!             elements (the "scalar tail" or "epilog").
            + Besides these specific points, there have been many general
              improvements to the way that the vectorizer uses SVE.
       * The -mbranch-protection=pac-ret option now accepts the optional
--- 2273,2279 ----
              one. Previously it would always use SVE if possible.
            + If a vector loop uses Advanced SIMD rather than SVE, the
              vectorizer now considers using SVE to vectorize the left-over
!             elements (the “scalar tail” or “epilog”).
            + Besides these specific points, there have been many general
              improvements to the way that the vectorizer uses SVE.
       * The -mbranch-protection=pac-ret option now accepts the optional
*************** References
*** 1742,1748 ****
    15. https://facebook.github.io/zstd/
    16. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-values
    17. https://www.openacc.org/
!   18. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-10
    19. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/libgomp/#toc-Enabling-OpenACC-1
    20. https://www.openmp.org/specifications/
    21. https://gcc.gnu.org/wiki/Offloading
--- 2591,2597 ----
    15. https://facebook.github.io/zstd/
    16. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-values
    17. https://www.openacc.org/
!   18. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-10
    19. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/libgomp/#toc-Enabling-OpenACC-1
    20. https://www.openmp.org/specifications/
    21. https://gcc.gnu.org/wiki/Offloading
*************** References
*** 1793,1799 ****
    66. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-9/index.html
- 
                                GCC 9 Release Series
  
     June 1, 2021
--- 2642,2647 ----
*************** References
*** 1879,1885 ****
    22. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-9/changes.html
- 
                                GCC 9 Release Series
                          Changes, New Features, and Fixes
  
--- 2727,2732 ----
*************** References
*** 2689,2695 ****
    33. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-loop-distribution
    34. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-Gcov.html#Invoking-Gcov
    35. https://www.openacc.org/
!   36. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-9
    37. https://www.openmp.org/specifications/
    38. https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00628.html
    39. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Vector-Extensions.html#index-_005f_005fbuiltin_005fconvertvector
--- 3536,3542 ----
    33. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-loop-distribution
    34. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-Gcov.html#Invoking-Gcov
    35. https://www.openacc.org/
!   36. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-9
    37. https://www.openmp.org/specifications/
    38. https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00628.html
    39. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Vector-Extensions.html#index-_005f_005fbuiltin_005fconvertvector
*************** References
*** 2731,2737 ****
    75. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-8/index.html
- 
                                GCC 8 Release Series
  
     May 14, 2021
--- 3578,3583 ----
*************** References
*** 2822,2828 ****
    24. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-8/changes.html
- 
                                GCC 8 Release Series
                          Changes, New Features, and Fixes
  
--- 3668,3673 ----
*************** void copy (const char *s)
*** 3107,3113 ****
  {
      char buf[80];
      strncpy (buf, s, sizeof buf);
!     ...
  }
  warning: 'strncpy' specified bound 80 equals destination size [-Wstringop-trunca
  tion]
--- 3952,3958 ----
  {
      char buf[80];
      strncpy (buf, s, sizeof buf);
!     …
  }
  warning: 'strncpy' specified bound 80 equals destination size [-Wstringop-trunca
  tion]
*************** void f (void)
*** 3180,3186 ****
  {
      char a[] = "abcd1234";
      strcpy (a, a + 4);
!     ...
  }
  warning: 'strcpy' accessing 5 bytes at offsets 0 and 4 overlaps 1 byte at offset
   4 [-Wrestrict]
--- 4025,4031 ----
  {
      char a[] = "abcd1234";
      strcpy (a, a + 4);
!     …
  }
  warning: 'strcpy' accessing 5 bytes at offsets 0 and 4 overlaps 1 byte at offset
   4 [-Wrestrict]
*************** References
*** 3953,3959 ****
    45. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-7/index.html
- 
                                GCC 7 Release Series
  
     Nov 14, 2019
--- 4798,4803 ----
*************** References
*** 4044,4050 ****
    24. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-7/changes.html
- 
                                GCC 7 Release Series
                          Changes, New Features, and Fixes
  
--- 4888,4893 ----
*************** void f (int n)
*** 4413,4419 ****
      d = alloca (n);
    else
      d = malloc (n);
!   ...
  }
  
  warning: argument to 'alloca may be too large due to conversion from 'int' to 'l
--- 5256,5262 ----
      d = alloca (n);
    else
      d = malloc (n);
!   …
  }
  
  warning: argument to 'alloca may be too large due to conversion from 'int' to 'l
*************** ong unsigned int' [-Walloca-larger-than=
*** 4426,4432 ****
  void f (size_t n)
  {
    char *d = alloca (n);
!   ...
  }
  
  warning: unbounded use of 'alloca' [-Walloca-larger-than=]
--- 5269,5275 ----
  void f (size_t n)
  {
    char *d = alloca (n);
!   …
  }
  
  warning: unbounded use of 'alloca' [-Walloca-larger-than=]
*************** void f (unsigned x)
*** 4474,4480 ****
  {
    char d[4];
    snprintf (d, sizeof d, "%#02x", x & 0xff);
!   ...
  }
  
  warning: 'snprintf' output may be truncated before the last format character [-W
--- 5317,5323 ----
  {
    char d[4];
    snprintf (d, sizeof d, "%#02x", x & 0xff);
!   …
  }
  
  warning: 'snprintf' output may be truncated before the last format character [-W
*************** void f (const char *fname)
*** 4502,4508 ****
    char d[8];
    strncpy (d, "/tmp/", sizeof d);
    strncat (d, fname, sizeof d);
!   ...
  }
  
  warning: specified bound 8 equals the size of the destination [-Wstringop-overfl
--- 5345,5351 ----
    char d[8];
    strncpy (d, "/tmp/", sizeof d);
    strncat (d, fname, sizeof d);
!   …
  }
  
  warning: specified bound 8 equals the size of the destination [-Wstringop-overfl
*************** test.cc:4:11: error: expected ';' after
*** 4640,4649 ****
            + std::as_const, std::not_fn,
              std::has_unique_object_representations, constexpr
              std::addressof.
!        Thanks to Daniel Kr�gler, Tim Shen, Edward Smith-Rowland, and Ville
         Voutilainen for work on the C++17 support.
       * A new power-of-two rehashing policy for use with the _Hashtable
!        internals, thanks to Fran�ois Dumont.
  
    Fortran
  
--- 5483,5492 ----
            + std::as_const, std::not_fn,
              std::has_unique_object_representations, constexpr
              std::addressof.
!        Thanks to Daniel Krügler, Tim Shen, Edward Smith-Rowland, and Ville
         Voutilainen for work on the C++17 support.
       * A new power-of-two rehashing policy for use with the _Hashtable
!        internals, thanks to François Dumont.
  
    Fortran
  
*************** const int* get_address (unsigned idx)
*** 4813,4819 ****
  }
  
       * A new command-line option -Wmisspelled-isr has been added. It turns
!        off -- or turns into errors -- warnings that are reported for
         interrupt service routines (ISRs) which don't follow AVR-LibC's
         naming convention of prefixing ISR names with __vector.
       * __builtin_avr_nops(n) is a new [17]built-in function that inserts n
--- 5656,5662 ----
  }
  
       * A new command-line option -Wmisspelled-isr has been added. It turns
!        off — or turns into errors — warnings that are reported for
         interrupt service routines (ISRs) which don't follow AVR-LibC's
         naming convention of prefixing ISR names with __vector.
       * __builtin_avr_nops(n) is a new [17]built-in function that inserts n
*************** References
*** 5152,5158 ****
    34. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-6/index.html
- 
                                GCC 6 Release Series
  
     (This release series is no longer supported.)
--- 5995,6000 ----
*************** References
*** 5245,5251 ****
    24. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-6/changes.html
- 
                                GCC 6 Release Series
                          Changes, New Features, and Fixes
  
--- 6087,6092 ----
*************** References
*** 5993,5999 ****
    33. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-5/index.html
- 
                                GCC 5 Release Series
  
     (This release series is no longer supported.)
--- 6834,6839 ----
*************** References
*** 6086,6092 ****
    24. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-5/changes.html
- 
                                GCC 5 Release Series
                          Changes, New Features, and Fixes
  
--- 6926,6931 ----
*************** References
*** 6973,6979 ****
     1. http://gcc.gnu.org/gcc-5/changes.html#libstdcxx
     2. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
     3. https://savannah.nongnu.org/bugs/?44574
!    4. https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler
     5. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.pdf
     6. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.Examples.pdf
     7. https://gcc.gnu.org/wiki/OpenACC
--- 7812,7818 ----
     1. http://gcc.gnu.org/gcc-5/changes.html#libstdcxx
     2. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
     3. https://savannah.nongnu.org/bugs/?44574
!    4. https://gcc.gnu.org/wiki/Intel MPX support in the GCC compiler
     5. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.pdf
     6. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.Examples.pdf
     7. https://gcc.gnu.org/wiki/OpenACC
*************** References
*** 7022,7028 ****
    50. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.9/index.html
- 
                               GCC 4.9 Release Series
  
     (This release series is no longer supported.)
--- 7861,7866 ----
*************** References
*** 7115,7121 ****
    24. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.9/changes.html
- 
                               GCC 4.9 Release Series
                          Changes, New Features, and Fixes
  
--- 7953,7958 ----
*************** New Languages and Language specific impr
*** 7229,7249 ****
         -fdiagnostics-color=never.
         Sample diagnostics output:
      $ g++ -fdiagnostics-color=always -S -Wall test.C
!     test.C: In function `int foo()':
      test.C:1:14: warning: no return statement in function returning non-void [-W
  return-type]
       int foo () { }
                    ^
      test.C:2:46: error: template instantiation depth exceeds maximum of 900 (use
!  -ftemplate-depth= to increase the maximum) instantiating `struct X<100>'
       template <int N> struct X { static const int value = X<N-1>::value; }; temp
  late struct X<1000>;
                                                    ^
!     test.C:2:46:   recursively required from `const int X<999>::value'
!     test.C:2:46:   required from `const int X<1000>::value'
      test.C:2:88:   required from here
  
!     test.C:2:46: error: incomplete type `X<100>' used in nested name specifier
  
       * With the new [7]#pragma GCC ivdep, the user can assert that there
         are no loop-carried dependencies which would prevent concurrent
--- 8066,8086 ----
         -fdiagnostics-color=never.
         Sample diagnostics output:
      $ g++ -fdiagnostics-color=always -S -Wall test.C
!     test.C: In function ‘int foo()’:
      test.C:1:14: warning: no return statement in function returning non-void [-W
  return-type]
       int foo () { }
                    ^
      test.C:2:46: error: template instantiation depth exceeds maximum of 900 (use
!  -ftemplate-depth= to increase the maximum) instantiating ‘struct X<100>’
       template <int N> struct X { static const int value = X<N-1>::value; }; temp
  late struct X<1000>;
                                                    ^
!     test.C:2:46:   recursively required from ‘const int X<999>::value’
!     test.C:2:46:   required from ‘const int X<1000>::value’
      test.C:2:88:   required from here
  
!     test.C:2:46: error: incomplete type ‘X<100>’ used in nested name specifier
  
       * With the new [7]#pragma GCC ivdep, the user can assert that there
         are no loop-carried dependencies which would prevent concurrent
*************** auto incr = [](auto x) { return x++; };
*** 7348,7355 ****
  // a functional object that will add two like-type objects
  auto add = [] <typename T> (T a, T b) { return a + b; };
  
!      * G++ supports unconstrained generic functions as specified by �4.1.2
!        and �5.1.1 of [15]N3889: Concepts Lite Specification. Briefly, auto
         may be used as a type-specifier in a parameter declaration of any
         function declarator in order to introduce an implicit function
         template parameter, akin to generic lambdas.
--- 8185,8192 ----
  // a functional object that will add two like-type objects
  auto add = [] <typename T> (T a, T b) { return a + b; };
  
!      * G++ supports unconstrained generic functions as specified by §4.1.2
!        and §5.1.1 of [15]N3889: Concepts Lite Specification. Briefly, auto
         may be used as a type-specifier in a parameter declaration of any
         function declarator in order to introduce an implicit function
         template parameter, akin to generic lambdas.
*************** auto incr(T x) { return x++; }
*** 7442,7448 ****
         be used as argument to ISO_C_BINDING's C_LOC and as actual argument
         to another NO_ARG_CHECK dummy argument; also the other constraints
         of TYPE(*) apply. The dummy arguments should be declared as scalar
!        or assumed-size variable of type type(*) (recommended) - or of type
         integer, real, complex or logical. With NO_ARG_CHECK, a pointer to
         the data without further type or shape information is passed,
         similar to C's void*. Note that also TS 29113's
--- 8279,8285 ----
         be used as argument to ISO_C_BINDING's C_LOC and as actual argument
         to another NO_ARG_CHECK dummy argument; also the other constraints
         of TYPE(*) apply. The dummy arguments should be declared as scalar
!        or assumed-size variable of type type(*) (recommended) – or of type
         integer, real, complex or logical. With NO_ARG_CHECK, a pointer to
         the data without further type or shape information is passed,
         similar to C's void*. Note that also TS 29113's
*************** References
*** 7765,7771 ****
    34. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.8/index.html
- 
                               GCC 4.8 Release Series
  
     (This release series is no longer supported.)
--- 8602,8607 ----
*************** References
*** 7863,7869 ****
    26. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.8/changes.html
- 
                               GCC 4.8 Release Series
                          Changes, New Features, and Fixes
  
--- 8699,8704 ----
*************** New Languages and Language specific impr
*** 7992,7999 ****
         diagnostics. Combined with the caret information, an example
         diagnostic showing these two features is:
  
! t.c:1:94: error: invalid operands to binary < (have `struct mystruct' and `float
! ')
   #define MYMAX(A,B)    __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) _
  _b = (B); __a < __b ? __b : __a; })
  
--- 8827,8834 ----
         diagnostics. Combined with the caret information, an example
         diagnostic showing these two features is:
  
! t.c:1:94: error: invalid operands to binary < (have ‘struct mystruct’ and ‘float
! ’)
   #define MYMAX(A,B)    __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) _
  _b = (B); __a < __b ? __b : __a; })
  
*************** int i = A().f();  // error, f() requires
*** 8117,8124 ****
              older versions except as noted below.
            + ABI: Some internal names (used in the assembler/object file)
              have changed for symbols declared in the specification part of
!             a module. If an affected module - or a file using it via use
!             association - is recompiled, the module and all files which
              directly use such symbols have to be recompiled as well. This
              change only affects the following kind of module symbols:
                 o Procedure pointers. Note: C-interoperable function
--- 8952,8959 ----
              older versions except as noted below.
            + ABI: Some internal names (used in the assembler/object file)
              have changed for symbols declared in the specification part of
!             a module. If an affected module – or a file using it via use
!             association – is recompiled, the module and all files which
              directly use such symbols have to be recompiled as well. This
              change only affects the following kind of module symbols:
                 o Procedure pointers. Note: C-interoperable function
*************** int i = A().f();  // error, f() requires
*** 8145,8151 ****
       * The [21]-Wcompare-reals command-line option has been added. When
         this is set, warnings are issued when comparing REAL or COMPLEX
         types for equality and inequality; consider replacing a == b by
!        abs(a-b) < eps with a suitable eps. -Wcompare-reals is enabled by
         -Wextra.
       * The [22]-Wtarget-lifetime command-line option has been added
         (enabled with -Wall), which warns if the pointer in a pointer
--- 8980,8986 ----
       * The [21]-Wcompare-reals command-line option has been added. When
         this is set, warnings are issued when comparing REAL or COMPLEX
         types for equality and inequality; consider replacing a == b by
!        abs(a−b) < eps with a suitable eps. -Wcompare-reals is enabled by
         -Wextra.
       * The [22]-Wtarget-lifetime command-line option has been added
         (enabled with -Wall), which warns if the pointer in a pointer
*************** int i = A().f();  // error, f() requires
*** 8157,8163 ****
         4.0e0).
         (For Fortran source code, consider replacing the "q" in
         floating-point literals by a kind parameter (e.g. 4.0e0_qp with a
!        suitable qp). Note that - in Fortran source code - replacing "q" by
         a simple "e" is not equivalent.)
       * The GFORTRAN_TMPDIR environment variable for specifying a
         non-default directory for files opened with STATUS="SCRATCH", is
--- 8992,8998 ----
         4.0e0).
         (For Fortran source code, consider replacing the "q" in
         floating-point literals by a kind parameter (e.g. 4.0e0_qp with a
!        suitable qp). Note that – in Fortran source code – replacing "q" by
         a simple "e" is not equivalent.)
       * The GFORTRAN_TMPDIR environment variable for specifying a
         non-default directory for files opened with STATUS="SCRATCH", is
*************** New Targets and Target Specific Improvem
*** 8252,8259 ****
      }
         The inline assembler in this example will generate code like
      mov r24, 8+7
!        provided c is allocated to R24 and val is allocated to R8...R15.
!        This works because the GNU assembler accepts plain register numbers
         without register prefix.
       * Static initializers with 3-byte symbols are supported now:
      extern const __memx char foo;
--- 9087,9094 ----
      }
         The inline assembler in this example will generate code like
      mov r24, 8+7
!        provided c is allocated to R24 and val is allocated to R8…R15. This
!        works because the GNU assembler accepts plain register numbers
         without register prefix.
       * Static initializers with 3-byte symbols are supported now:
      extern const __memx char foo;
*************** References
*** 8637,8643 ****
    44. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.7/index.html
- 
                               GCC 4.7 Release Series
  
     (This release series is no longer supported.)
--- 9472,9477 ----
*************** References
*** 8730,8736 ****
    24. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.7/changes.html
- 
                               GCC 4.7 Release Series
                          Changes, New Features, and Fixes
  
--- 9564,9569 ----
*************** long double pi = 180.0_degrees;
*** 9061,9067 ****
  template <class T> using Ptr = T*;
  Ptr<int> ip;  // decltype(ip) is int*
  
!      * Thanks to Ville Voutilainen and Pedro Lamar�o, G++ now implements
         [12]C++11 delegating constructors.
  
  struct A {
--- 9894,9900 ----
  template <class T> using Ptr = T*;
  Ptr<int> ip;  // decltype(ip) is int*
  
!      * Thanks to Ville Voutilainen and Pedro Lamarão, G++ now implements
         [12]C++11 delegating constructors.
  
  struct A {
*************** New Targets and Target Specific Improvem
*** 9255,9261 ****
  
       * GCC now supports the XMEGA architecture. This requires GNU binutils
         2.22 or later.
!      * Support for the [35]named address spaces __flash, __flash1, ...,
         __flash5 and __memx has been added. These address spaces locate
         read-only data in flash memory and allow reading from flash memory
         by means of ordinary C code, i.e. without the need of (inline)
--- 10088,10094 ----
  
       * GCC now supports the XMEGA architecture. This requires GNU binutils
         2.22 or later.
!      * Support for the [35]named address spaces __flash, __flash1, …,
         __flash5 and __memx has been added. These address spaces locate
         read-only data in flash memory and allow reading from flash memory
         by means of ordinary C code, i.e. without the need of (inline)
*************** void set_portb (uint8_t value)
*** 9299,9305 ****
         suitable to be used as operand in an I/O command. The address must
         be a constant integer known at compile time.
       * The inline assembler constraint "R" to represent integers in the
!        range -6 ... 5 has been removed without replacement.
       * Many optimizations to:
            + 64-bit integer arithmetic
            + Widening multiplication
--- 10132,10138 ----
         suitable to be used as operand in an I/O command. The address must
         be a constant integer known at compile time.
       * The inline assembler constraint "R" to represent integers in the
!        range −6 … 5 has been removed without replacement.
       * Many optimizations to:
            + 64-bit integer arithmetic
            + Widening multiplication
*************** void set_portb (uint8_t value)
*** 9311,9317 ****
            + If-else decision trees generated by switch instructions
            + Merging of data located in flash memory
            + New libgcc variants for devices with 8-bit wide stack pointer
!           + ...
       * Better documentation:
            + Handling of EIND and indirect jumps on devices with more than
              128 KiB of program memory.
--- 10144,10150 ----
            + If-else decision trees generated by switch instructions
            + Merging of data located in flash memory
            + New libgcc variants for devices with 8-bit wide stack pointer
!           + …
       * Better documentation:
            + Handling of EIND and indirect jumps on devices with more than
              128 KiB of program memory.
*************** References
*** 9563,9569 ****
    35. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
    36. http://www.nongnu.org/avr-libc/
    37. https://gcc.gnu.org/PR54461
!   38. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built%5f002din-Functions.html
    39. https://sites.google.com/site/x32abi/
    40. https://www.dwarfstd.org/ShowIssue.php?issue=100909.1
    41. https://www.dwarfstd.org/ShowIssue.php?issue=100909.2
--- 10396,10402 ----
    35. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
    36. http://www.nongnu.org/avr-libc/
    37. https://gcc.gnu.org/PR54461
!   38. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built_002din-Functions.html
    39. https://sites.google.com/site/x32abi/
    40. https://www.dwarfstd.org/ShowIssue.php?issue=100909.1
    41. https://www.dwarfstd.org/ShowIssue.php?issue=100909.2
*************** References
*** 9583,9589 ****
    55. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.6/index.html
- 
                               GCC 4.6 Release Series
  
     (This release series is no longer supported.)
--- 10416,10421 ----
*************** References
*** 9676,9682 ****
    24. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.6/changes.html
- 
                               GCC 4.6 Release Series
                          Changes, New Features, and Fixes
  
--- 10508,10513 ----
*************** New Languages and Language specific impr
*** 10016,10022 ****
  
       * [12]Improved experimental support for the upcoming ISO C++
         standard, C++0x, including using constexpr and nullptr.
!      * Performance improvements to the [13]Debug Mode, thanks to Fran�ois
         Dumont.
       * Atomic operations used for reference-counting are annotated so that
         they can be understood by race detectors such as Helgrind, see
--- 10847,10853 ----
  
       * [12]Improved experimental support for the upcoming ISO C++
         standard, C++0x, including using constexpr and nullptr.
!      * Performance improvements to the [13]Debug Mode, thanks to François
         Dumont.
       * Atomic operations used for reference-counting are annotated so that
         they can be understood by race detectors such as Helgrind, see
*************** New Languages and Language specific impr
*** 10071,10077 ****
              allocated (if unallocated) or reallocated (if the shape or
              type parameter is different). To avoid the small performance
              penalty, you can use a(:) = ... instead of a = ... for arrays
!             and character strings - or disable the feature using -std=f95
              or -fno-realloc-lhs.
            + Deferred type parameter: For scalar allocatable and pointer
              variables the character length can be deferred.
--- 10902,10908 ----
              allocated (if unallocated) or reallocated (if the shape or
              type parameter is different). To avoid the small performance
              penalty, you can use a(:) = ... instead of a = ... for arrays
!             and character strings – or disable the feature using -std=f95
              or -fno-realloc-lhs.
            + Deferred type parameter: For scalar allocatable and pointer
              variables the character length can be deferred.
*************** New Languages and Language specific impr
*** 10126,10132 ****
              be declared in a single PROCEDURE statement; implied-shape
              arrays are supported for named constants (PARAMETER). The
              transformational, three argument versions of BESSEL_JN and
!             BESSEL_YN were added - the elemental, two-argument version had
              been added in GCC 4.4; note that the transformational
              functions use a recurrence algorithm.
  
--- 10957,10963 ----
              be declared in a single PROCEDURE statement; implied-shape
              arrays are supported for named constants (PARAMETER). The
              transformational, three argument versions of BESSEL_JN and
!             BESSEL_YN were added – the elemental, two-argument version had
              been added in GCC 4.4; note that the transformational
              functions use a recurrence algorithm.
  
*************** References
*** 10606,10612 ****
    29. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.5/index.html
- 
                               GCC 4.5 Release Series
  
     (This release series is no longer supported.)
--- 11437,11442 ----
*************** References
*** 10694,10700 ****
    19. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.5/changes.html
- 
                               GCC 4.5 Release Series
                          Changes, New Features, and Fixes
  
--- 11524,11529 ----
*************** New Languages and Language specific impr
*** 10931,10937 ****
         defined ([12]DR 757).
       * Labels may now have attributes, as has been permitted for a while
         in C. This is only permitted when the label definition and the
!        attribute specifier is followed by a semicolon--i.e., the label
         applies to an empty statement. The only useful attribute for a
         label is unused.
       * G++ now implements [13]DR 176. Previously G++ did not support using
--- 11760,11766 ----
         defined ([12]DR 757).
       * Labels may now have attributes, as has been permitted for a while
         in C. This is only permitted when the label definition and the
!        attribute specifier is followed by a semicolon—i.e., the label
         applies to an empty statement. The only useful attribute for a
         label is unused.
       * G++ now implements [13]DR 176. Previously G++ did not support using
*************** vector-size: improvement = 3: call stack
*** 11013,11019 ****
  
    Fortran
  
!      * The COMMON default padding has been changed - instead of adding the
         padding before a variable it is now added afterwards, which
         increases the compatibility with other vendors and helps to obtain
         the correct output in some cases. Cf. also the -falign-commons
--- 11842,11848 ----
  
    Fortran
  
!      * The COMMON default padding has been changed – instead of adding the
         padding before a variable it is now added afterwards, which
         increases the compatibility with other vendors and helps to obtain
         the correct output in some cases. Cf. also the -falign-commons
*************** References
*** 11381,11387 ****
    33. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.4/index.html
- 
                               GCC 4.4 Release Series
  
     This release series is no longer maintained.
--- 12210,12215 ----
*************** References
*** 11481,11487 ****
    22. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.4/changes.html
- 
                               GCC 4.4 Release Series
                          Changes, New Features, and Fixes
  
--- 12309,12314 ----
*************** References
*** 12114,12120 ****
    24. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.3/index.html
- 
                               GCC 4.3 Release Series
  
     (This release series is no longer supported.)
--- 12941,12946 ----
*************** References
*** 12210,12216 ****
    21. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.3/changes.html
- 
                               GCC 4.3 Release Series
                          Changes, New Features, and Fixes
  
--- 13036,13041 ----
*************** References
*** 13026,13032 ****
    31. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.2/index.html
- 
                               GCC 4.2 Release Series
  
     (This release series is no longer supported.)
--- 13851,13856 ----
*************** References
*** 13114,13120 ****
    19. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.2/changes.html
- 
                               GCC 4.2 Release Series
                          Changes, New Features, and Fixes
  
--- 13938,13943 ----
*************** References
*** 13436,13442 ****
    12. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.1/index.html
- 
                               GCC 4.1 Release Series
  
     (This release series is no longer supported.)
--- 14259,14264 ----
*************** References
*** 13516,13522 ****
    17. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.1/changes.html
- 
                               GCC 4.1 Release Series
                          Changes, New Features, and Fixes
  
--- 14338,14343 ----
*************** References
*** 14071,14077 ****
    12. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.0/index.html
- 
                               GCC 4.0 Release Series
  
     (This release series is no longer supported.)
--- 14892,14897 ----
*************** References
*** 14159,14165 ****
    19. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-4.0/changes.html
- 
                               GCC 4.0 Release Series
                          Changes, New Features, and Fixes
  
--- 14979,14984 ----
*************** References
*** 14689,14695 ****
    22. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.4/index.html
- 
                               GCC 3.4 Release Series
  
     (This release series is no longer supported.)
--- 15508,15513 ----
*************** References
*** 14792,14798 ****
    23. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.4/changes.html
- 
                               GCC 3.4 Release Series
                          Changes, New Features, and Fixes
  
--- 15610,15615 ----
*************** References
*** 16565,16571 ****
     7. https://www.boost.org/
     8. https://gcc.gnu.org/PR11953
     9. https://gcc.gnu.org/PR8361
!   10. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other%20Builtins
    11. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209
    12. http://gcc.gnu.org/bugs/#cxx_rvalbind
    13. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
--- 17382,17388 ----
     7. https://www.boost.org/
     8. https://gcc.gnu.org/PR11953
     9. https://gcc.gnu.org/PR8361
!   10. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other Builtins
    11. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209
    12. http://gcc.gnu.org/bugs/#cxx_rvalbind
    13. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
*************** References
*** 16581,16587 ****
    23. http://gcc.gnu.org/gcc-3.4/mips-abi.html
    24. http://gcc.gnu.org/gcc-3.4/powerpc-abi.html
    25. http://gcc.gnu.org/gcc-3.4/sparc-abi.html
!   26. https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=%5C%5B3%5C.4.*%5BRr%5Degression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED
    27. https://gcc.gnu.org/PR10129
    28. https://gcc.gnu.org/PR14576
    29. https://gcc.gnu.org/PR14760
--- 17398,17404 ----
    23. http://gcc.gnu.org/gcc-3.4/mips-abi.html
    24. http://gcc.gnu.org/gcc-3.4/powerpc-abi.html
    25. http://gcc.gnu.org/gcc-3.4/sparc-abi.html
!   26. https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=\[3\.4.*[Rr]egression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED
    27. https://gcc.gnu.org/PR10129
    28. https://gcc.gnu.org/PR14576
    29. https://gcc.gnu.org/PR14760
*************** References
*** 16975,16981 ****
   417. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.3/index.html
- 
                               GCC 3.3 Release Series
  
     (This release series is no longer supported.)
--- 17792,17797 ----
*************** References
*** 17077,17083 ****
    22. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.3/changes.html
- 
                               GCC 3.3 Release Series
                          Changes, New Features, and Fixes
  
--- 17893,17898 ----
*************** References
*** 18988,18994 ****
   557. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.2/index.html
- 
                               GCC 3.2 Release Series
  
     (This release series is no longer supported.)
--- 19803,19808 ----
*************** References
*** 19080,19086 ****
    18. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.2/changes.html
- 
                               GCC 3.2 Release Series
                          Changes, New Features, and Fixes
  
--- 19894,19899 ----
*************** References
*** 19938,19944 ****
   252. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.1/index.html
- 
                                      GCC 3.1
  
     (This release series is no longer supported.)
--- 20751,20756 ----
*************** References
*** 20007,20013 ****
    15. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.1/changes.html
- 
                               GCC 3.1 Release Series
                          Changes, New Features, and Fixes
  
--- 20819,20824 ----
*************** New Targets and Target Specific Improvem
*** 20225,20231 ****
            + For those targets that support it, -mfpmath=sse will cause the
              compiler to generate SSE/SSE2 instructions for floating point
              math instead of x87 instructions. Usually, this will lead to
!             quicker code -- especially on the Pentium 4. Note that only
              scalar floating point instructions are used and GCC does not
              exploit SIMD features yet.
            + Prefetch support has been added to the Pentium III, Pentium 4,
--- 21036,21042 ----
            + For those targets that support it, -mfpmath=sse will cause the
              compiler to generate SSE/SSE2 instructions for floating point
              math instead of x87 instructions. Usually, this will lead to
!             quicker code — especially on the Pentium 4. Note that only
              scalar floating point instructions are used and GCC does not
              exploit SIMD features yet.
            + Prefetch support has been added to the Pentium III, Pentium 4,
*************** References
*** 20361,20367 ****
    14. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.0/index.html
- 
                                     GCC 3.0.4
  
     (This release series is no longer supported.)
--- 21172,21177 ----
*************** References
*** 20437,20443 ****
    15. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.0/features.html
- 
                                GCC 3.0 New Features
  
  Additional changes in GCC 3.0.4
--- 21247,21252 ----
*************** References
*** 20633,20639 ****
    19. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-3.0/caveats.html
- 
                                  GCC 3.0 Caveats
  
       * -fstrict-aliasing is now part of -O2 and higher optimization
--- 21442,21447 ----
*************** References
*** 20694,20700 ****
     8. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-2.95/index.html
- 
                                      GCC 2.95
  
     (This release series is no longer supported.)
--- 21502,21507 ----
*************** References
*** 20785,20791 ****
    16. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-2.95/features.html
- 
                               GCC 2.95 New Features
  
       * General Optimizer Improvements:
--- 21592,21597 ----
*************** References
*** 21058,21064 ****
    23. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/gcc-2.95/caveats.html
- 
                                  GCC 2.95 Caveats
  
       * GCC 2.95 will issue an error for invalid asm statements that had
--- 21864,21869 ----
*************** References
*** 21127,21133 ****
     8. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/egcs-1.1/index.html
- 
                                      EGCS 1.1
  
     September 3, 1998: We are pleased to announce the release of EGCS 1.1.
--- 21932,21937 ----
*************** References
*** 21357,21363 ****
    16. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/egcs-1.1/features.html
- 
                               EGCS 1.1 new features
  
       * Integrated GNU Fortran (g77) compiler and runtime library with
--- 22161,22166 ----
*************** References
*** 21452,21458 ****
    11. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/egcs-1.1/caveats.html
- 
                                  EGCS 1.1 Caveats
  
       * EGCS has an integrated libstdc++, but does not have an integrated
--- 22255,22260 ----
*************** References
*** 21503,21509 ****
     7. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/egcs-1.0/index.html
- 
                                      EGCS 1.0
  
     December 3, 1997: We are pleased to announce the release of EGCS 1.0.
--- 22305,22310 ----
*************** References
*** 21704,21710 ****
    11. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/egcs-1.0/features.html
- 
                                 EGCS 1.0 features
  
       * Core compiler is based on the gcc2 development tree from Aug 2,
--- 22505,22510 ----
*************** References
*** 21769,21775 ****
     9. http://validator.w3.org/check/referer
  ======================================================================
  http://gcc.gnu.org/egcs-1.0/caveats.html
- 
                                  EGCS 1.0 Caveats
  
       * EGCS has an integrated libstdc++, but does not have an integrated
--- 22569,22574 ----
diff -Nrcpad gcc-11.3.0/c++tools/ChangeLog gcc-12.1.0/c++tools/ChangeLog
*** gcc-11.3.0/c++tools/ChangeLog	Thu Apr 21 07:59:16 2022
--- gcc-12.1.0/c++tools/ChangeLog	Fri May  6 07:30:56 2022
***************
*** 1,15 ****
! 2022-04-21  Release Manager
  
! 	* GCC 11.3.0 released.
  
! 2021-07-28  Release Manager
  
! 	* GCC 11.2.0 released.
  
! 2021-05-31  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-05-25  Jakub Jelinek  <jakub@redhat.com>
  
  	PR bootstrap/100731
  	* server.cc: Include <cstdlib>.
--- 1,42 ----
! 2022-05-06  Release Manager
  
! 	* GCC 12.1.0 released.
  
! 2022-03-18  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* server.cc (accept_from): Use "1" as the dummy port number.
  
! 2021-10-26  Jonathan Wakely  <jwakely@redhat.com>
  
! 	* resolver.cc (module_resolver::read_tuple_file): Use unique_ptr
! 	to ensure memory is freed before returning.
! 
! 2021-10-22  Eric Gallager  <egallager@gcc.gnu.org>
! 
! 	PR other/102663
! 	* Makefile.in: Add dummy install-dvi target.
! 
! 2021-09-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* resolver.cc (module_resolver::ModuleCompiledRequest):
! 	Add a simple handler.
! 	* resolver.h: Declare handler for ModuleCompiledRequest.
! 
! 2021-07-21  Iain Sandoe  <iain@sandoe.co.uk>
! 	    Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR c++/98821
! 	* config.h.in: Regenerate.
! 	* configure: Regenerate.
! 	* configure.ac: Configure using C++.  Pull logic to
! 	detect enabled checking modes; default to release
! 	checking.
! 	* server.cc (AI_NUMERICSERV): Define a fallback value.
! 	(gcc_assert): New.
! 	(gcc_unreachable): New.
! 	(fancy_abort): Only build when checking is enabled.
! 
! 2021-05-25  Jakub Jelinek  <jakub@redhat.com>
  
  	PR bootstrap/100731
  	* server.cc: Include <cstdlib>.
***************
*** 19,27 ****
  	* configure.ac (--enable-maintainer-mode): Fix typo and weird syntax.
  	* configure: Regenerate.
  
! 2021-04-27  Release Manager
  
! 	* GCC 11.1.0 released.
  
  2021-04-01  Iain Sandoe  <iain@sandoe.co.uk>
  
--- 46,63 ----
  	* configure.ac (--enable-maintainer-mode): Fix typo and weird syntax.
  	* configure: Regenerate.
  
! 2021-05-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	* Makefile.in: Update copyright year.
! 	* configure.ac: Likewise.
! 	* resolver.cc: Likewise.
! 	* resolver.h: Likewise.
! 	* server.cc: Likewise.
! 	(print_version): Update copyright notice date.
! 
! 2021-05-10  Martin Liska  <mliska@suse.cz>
! 
! 	* Makefile.in: Include also ../gcc folder.
  
  2021-04-01  Iain Sandoe  <iain@sandoe.co.uk>
  
***************
*** 106,112 ****
  	* server.cc: New.
  
  
! Copyright (C) 2020-2021 Free Software Foundation, Inc.
  
  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
--- 142,148 ----
  	* server.cc: New.
  
  
! Copyright (C) 2020-2022 Free Software Foundation, Inc.
  
  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
diff -Nrcpad gcc-11.3.0/c++tools/Makefile.in gcc-12.1.0/c++tools/Makefile.in
*** gcc-11.3.0/c++tools/Makefile.in	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/c++tools/Makefile.in	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  # Makefile for c++tools
! #   Copyright 2020 Free Software Foundation, Inc.
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 1,5 ----
  # Makefile for c++tools
! #   Copyright (C) 2020-2022 Free Software Foundation, Inc.
  #
  # This file is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** html::
*** 59,64 ****
--- 59,65 ----
  info::
  install-info::
  install-pdf::
+ install-dvi::
  install-man::
  install-html::
  
*************** all::g++-mapper-server$(exeext)
*** 89,97 ****
  
  MAPPER.O := server.o resolver.o
  CODYLIB = ../libcody/libcody.a
! CXXINC += -I$(srcdir)/../libcody -I$(srcdir)/../include -I$(srcdir)/../gcc -I.
  g++-mapper-server$(exeext): $(MAPPER.O) $(CODYLIB)
! 	+$(CXX) $(LDFLAGS) $(PIEFLAG) -o $@ $^ $(VERSION.O) $(LIBIBERTY) $(NETLIBS)
  
  # copy to gcc dir so tests there can run
  all::../gcc/g++-mapper-server$(exeext)
--- 90,98 ----
  
  MAPPER.O := server.o resolver.o
  CODYLIB = ../libcody/libcody.a
! CXXINC += -I$(srcdir)/../libcody -I$(srcdir)/../include -I$(srcdir)/../gcc -I. -I../gcc
  g++-mapper-server$(exeext): $(MAPPER.O) $(CODYLIB)
! 	+$(CXX) $(LDFLAGS) $(PIEFLAG) -o $@ $^ $(LIBIBERTY) $(NETLIBS)
  
  # copy to gcc dir so tests there can run
  all::../gcc/g++-mapper-server$(exeext)
diff -Nrcpad gcc-11.3.0/c++tools/config.h.in gcc-12.1.0/c++tools/config.h.in
*** gcc-11.3.0/c++tools/config.h.in	Thu Apr 21 07:59:35 2022
--- gcc-12.1.0/c++tools/config.h.in	Fri May  6 07:31:19 2022
***************
*** 1,5 ****
--- 1,8 ----
  /* config.h.in.  Generated from configure.ac by autoheader.  */
  
+ /* Define if you want assertions enabled. This is a cheap check. */
+ #undef ENABLE_ASSERT_CHECKING
+ 
  /* Define if accept4 provided. */
  #undef HAVE_ACCEPT4
  
diff -Nrcpad gcc-11.3.0/c++tools/configure gcc-12.1.0/c++tools/configure
*** gcc-11.3.0/c++tools/configure	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/c++tools/configure	Fri May  6 07:30:56 2022
*************** NETLIBS
*** 626,635 ****
  get_gcc_base_ver
  EGREP
  GREP
! CPP
! ac_ct_CC
! CFLAGS
! CC
  PIEFLAG
  MAINTAINER
  CXX_AUX_TOOLS
--- 626,632 ----
  get_gcc_base_ver
  EGREP
  GREP
! CXXCPP
  PIEFLAG
  MAINTAINER
  CXX_AUX_TOOLS
*************** ac_user_opts='
*** 701,706 ****
--- 698,704 ----
  enable_option_checking
  enable_c___tools
  enable_maintainer_mode
+ enable_checking
  enable_default_pie
  with_gcc_major_version_only
  '
*************** LDFLAGS
*** 713,721 ****
  LIBS
  CPPFLAGS
  CCC
! CC
! CFLAGS
! CPP'
  
  
  # Initialize some variables set by options.
--- 711,717 ----
  LIBS
  CPPFLAGS
  CCC
! CXXCPP'
  
  
  # Initialize some variables set by options.
*************** Optional Features:
*** 1332,1337 ****
--- 1328,1337 ----
    --enable-maintainer-mode
                            enable maintainer mode. Add rules to rebuild
                            configurey bits
+   --enable-checking[=LIST]
+                           enable expensive run-time checks. With LIST, enable
+                           only specific categories of checks. Categories are:
+                           yes,no,all,none,release.
    --enable-default-pie    enable Position Independent Executable as default
  
  Optional Packages:
*************** Some influential environment variables:
*** 1348,1356 ****
    LIBS        libraries to pass to the linker, e.g. -l<library>
    CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
                you have headers in a nonstandard directory <include dir>
!   CC          C compiler command
!   CFLAGS      C compiler flags
!   CPP         C preprocessor
  
  Use these variables to override the choices made by `configure' or to help
  it to find libraries and programs with nonstandard names/locations.
--- 1348,1354 ----
    LIBS        libraries to pass to the linker, e.g. -l<library>
    CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
                you have headers in a nonstandard directory <include dir>
!   CXXCPP      C++ preprocessor
  
  Use these variables to override the choices made by `configure' or to help
  it to find libraries and programs with nonstandard names/locations.
*************** fi
*** 1470,1517 ****
  
  } # ac_fn_cxx_try_compile
  
! # ac_fn_c_try_compile LINENO
! # --------------------------
! # Try to compile conftest.$ac_ext, and return whether this succeeded.
! ac_fn_c_try_compile ()
! {
!   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
!   rm -f conftest.$ac_objext
!   if { { ac_try="$ac_compile"
! case "(($ac_try" in
!   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
!   *) ac_try_echo=$ac_try;;
! esac
! eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
! $as_echo "$ac_try_echo"; } >&5
!   (eval "$ac_compile") 2>conftest.err
!   ac_status=$?
!   if test -s conftest.err; then
!     grep -v '^ *+' conftest.err >conftest.er1
!     cat conftest.er1 >&5
!     mv -f conftest.er1 conftest.err
!   fi
!   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
!   test $ac_status = 0; } && {
! 	 test -z "$ac_c_werror_flag" ||
! 	 test ! -s conftest.err
!        } && test -s conftest.$ac_objext; then :
!   ac_retval=0
! else
!   $as_echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
! 
! 	ac_retval=1
! fi
!   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
!   as_fn_set_status $ac_retval
! 
! } # ac_fn_c_try_compile
! 
! # ac_fn_c_try_cpp LINENO
! # ----------------------
  # Try to preprocess conftest.$ac_ext, and return whether this succeeded.
! ac_fn_c_try_cpp ()
  {
    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    if { { ac_try="$ac_cpp conftest.$ac_ext"
--- 1468,1477 ----
  
  } # ac_fn_cxx_try_compile
  
! # ac_fn_cxx_try_cpp LINENO
! # ------------------------
  # Try to preprocess conftest.$ac_ext, and return whether this succeeded.
! ac_fn_cxx_try_cpp ()
  {
    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    if { { ac_try="$ac_cpp conftest.$ac_ext"
*************** $as_echo "$ac_try_echo"; } >&5
*** 1530,1536 ****
    fi
    $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    test $ac_status = 0; } > conftest.i && {
! 	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
  	 test ! -s conftest.err
         }; then :
    ac_retval=0
--- 1490,1496 ----
    fi
    $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    test $ac_status = 0; } > conftest.i && {
! 	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
  	 test ! -s conftest.err
         }; then :
    ac_retval=0
*************** fi
*** 1543,1556 ****
    eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
    as_fn_set_status $ac_retval
  
! } # ac_fn_c_try_cpp
  
! # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
! # -------------------------------------------------------
  # Tests whether HEADER exists, giving a warning if it cannot be compiled using
  # the include files in INCLUDES and setting the cache variable VAR
  # accordingly.
! ac_fn_c_check_header_mongrel ()
  {
    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    if eval \${$3+:} false; then :
--- 1503,1516 ----
    eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
    as_fn_set_status $ac_retval
  
! } # ac_fn_cxx_try_cpp
  
! # ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES
! # ---------------------------------------------------------
  # Tests whether HEADER exists, giving a warning if it cannot be compiled using
  # the include files in INCLUDES and setting the cache variable VAR
  # accordingly.
! ac_fn_cxx_check_header_mongrel ()
  {
    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    if eval \${$3+:} false; then :
*************** cat confdefs.h - <<_ACEOF >conftest.$ac_
*** 1571,1577 ****
  $4
  #include <$2>
  _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
    ac_header_compiler=yes
  else
    ac_header_compiler=no
--- 1531,1537 ----
  $4
  #include <$2>
  _ACEOF
! if ac_fn_cxx_try_compile "$LINENO"; then :
    ac_header_compiler=yes
  else
    ac_header_compiler=no
*************** cat confdefs.h - <<_ACEOF >conftest.$ac_
*** 1587,1593 ****
  /* end confdefs.h.  */
  #include <$2>
  _ACEOF
! if ac_fn_c_try_cpp "$LINENO"; then :
    ac_header_preproc=yes
  else
    ac_header_preproc=no
--- 1547,1553 ----
  /* end confdefs.h.  */
  #include <$2>
  _ACEOF
! if ac_fn_cxx_try_cpp "$LINENO"; then :
    ac_header_preproc=yes
  else
    ac_header_preproc=no
*************** rm -f conftest.err conftest.i conftest.$
*** 1597,1603 ****
  $as_echo "$ac_header_preproc" >&6; }
  
  # So?  What about this header?
! case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
    yes:no: )
      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
  $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
--- 1557,1563 ----
  $as_echo "$ac_header_preproc" >&6; }
  
  # So?  What about this header?
! case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #((
    yes:no: )
      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
  $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
*************** $as_echo "$ac_res" >&6; }
*** 1630,1642 ****
  fi
    eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
  
! } # ac_fn_c_check_header_mongrel
  
! # ac_fn_c_try_run LINENO
! # ----------------------
  # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
  # that executables *can* be run.
! ac_fn_c_try_run ()
  {
    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    if { { ac_try="$ac_link"
--- 1590,1602 ----
  fi
    eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
  
! } # ac_fn_cxx_check_header_mongrel
  
! # ac_fn_cxx_try_run LINENO
! # ------------------------
  # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
  # that executables *can* be run.
! ac_fn_cxx_try_run ()
  {
    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    if { { ac_try="$ac_link"
*************** fi
*** 1672,1684 ****
    eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
    as_fn_set_status $ac_retval
  
! } # ac_fn_c_try_run
  
! # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
! # -------------------------------------------------------
  # Tests whether HEADER exists and can be compiled using the include files in
  # INCLUDES, setting the cache variable VAR accordingly.
! ac_fn_c_check_header_compile ()
  {
    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
--- 1632,1644 ----
    eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
    as_fn_set_status $ac_retval
  
! } # ac_fn_cxx_try_run
  
! # ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES
! # ---------------------------------------------------------
  # Tests whether HEADER exists and can be compiled using the include files in
  # INCLUDES, setting the cache variable VAR accordingly.
! ac_fn_cxx_check_header_compile ()
  {
    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
*************** else
*** 1691,1697 ****
  $4
  #include <$2>
  _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
    eval "$3=yes"
  else
    eval "$3=no"
--- 1651,1657 ----
  $4
  #include <$2>
  _ACEOF
! if ac_fn_cxx_try_compile "$LINENO"; then :
    eval "$3=yes"
  else
    eval "$3=no"
*************** eval ac_res=\$$3
*** 1703,1714 ****
  $as_echo "$ac_res" >&6; }
    eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
  
! } # ac_fn_c_check_header_compile
  
! # ac_fn_c_try_link LINENO
! # -----------------------
  # Try to link conftest.$ac_ext, and return whether this succeeded.
! ac_fn_c_try_link ()
  {
    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    rm -f conftest.$ac_objext conftest$ac_exeext
--- 1663,1674 ----
  $as_echo "$ac_res" >&6; }
    eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
  
! } # ac_fn_cxx_check_header_compile
  
! # ac_fn_cxx_try_link LINENO
! # -------------------------
  # Try to link conftest.$ac_ext, and return whether this succeeded.
! ac_fn_cxx_try_link ()
  {
    as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    rm -f conftest.$ac_objext conftest$ac_exeext
*************** $as_echo "$ac_try_echo"; } >&5
*** 1728,1734 ****
    fi
    $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    test $ac_status = 0; } && {
! 	 test -z "$ac_c_werror_flag" ||
  	 test ! -s conftest.err
         } && test -s conftest$ac_exeext && {
  	 test "$cross_compiling" = yes ||
--- 1688,1694 ----
    fi
    $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
    test $ac_status = 0; } && {
! 	 test -z "$ac_cxx_werror_flag" ||
  	 test ! -s conftest.err
         } && test -s conftest$ac_exeext && {
  	 test "$cross_compiling" = yes ||
*************** fi
*** 1749,1755 ****
    eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
    as_fn_set_status $ac_retval
  
! } # ac_fn_c_try_link
  cat >config.log <<_ACEOF
  This file contains any messages produced by compilers while
  running configure, to aid debugging if configure makes a mistake.
--- 1709,1715 ----
    eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
    as_fn_set_status $ac_retval
  
! } # ac_fn_cxx_try_link
  cat >config.log <<_ACEOF
  This file contains any messages produced by compilers while
  running configure, to aid debugging if configure makes a mistake.
*************** done
*** 2955,2960 ****
--- 2915,2927 ----
  test -n "$AUTOHEADER" || AUTOHEADER="$MISSING autoheader"
  
  
+ ac_ext=cpp
+ ac_cpp='$CXXCPP $CPPFLAGS'
+ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ 
+ 
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build C++ tools" >&5
  $as_echo_n "checking whether to build C++ tools... " >&6; }
    # Check whether --enable-c++-tools was given.
*************** $as_echo "$maintainer_mode" >&6; }
*** 2989,3544 ****
  test "$maintainer_mode" = yes && MAINTAINER=yes
  
  
! # Check whether --enable-default-pie was given.
! # Check whether --enable-default-pie was given.
! if test "${enable_default_pie+set}" = set; then :
!   enableval=$enable_default_pie; PIEFLAG=-fPIE
! else
!   PIEFLAG=
! fi
! 
! 
! 
! # Check if O_CLOEXEC is defined by fcntl
! ac_ext=c
! ac_cpp='$CPP $CPPFLAGS'
! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_c_compiler_gnu
! if test -n "$ac_tool_prefix"; then
!   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
! set dummy ${ac_tool_prefix}gcc; ac_word=$2
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
! $as_echo_n "checking for $ac_word... " >&6; }
! if ${ac_cv_prog_CC+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!     for ac_exec_ext in '' $ac_executable_extensions; do
!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_CC="${ac_tool_prefix}gcc"
!     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
!   done
! IFS=$as_save_IFS
! 
! fi
! fi
! CC=$ac_cv_prog_CC
! if test -n "$CC"; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
! $as_echo "$CC" >&6; }
! else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
! fi
! 
! 
! fi
! if test -z "$ac_cv_prog_CC"; then
!   ac_ct_CC=$CC
!   # Extract the first word of "gcc", so it can be a program name with args.
! set dummy gcc; ac_word=$2
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
! $as_echo_n "checking for $ac_word... " >&6; }
! if ${ac_cv_prog_ac_ct_CC+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
!   if test -n "$ac_ct_CC"; then
!   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!     for ac_exec_ext in '' $ac_executable_extensions; do
!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_ac_ct_CC="gcc"
!     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
!   done
! IFS=$as_save_IFS
! 
! fi
! fi
! ac_ct_CC=$ac_cv_prog_ac_ct_CC
! if test -n "$ac_ct_CC"; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
! $as_echo "$ac_ct_CC" >&6; }
! else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
! fi
! 
!   if test "x$ac_ct_CC" = x; then
!     CC=""
!   else
!     case $cross_compiling:$ac_tool_warned in
! yes:)
! { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
! $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
! ac_tool_warned=yes ;;
! esac
!     CC=$ac_ct_CC
!   fi
! else
!   CC="$ac_cv_prog_CC"
! fi
! 
! if test -z "$CC"; then
!           if test -n "$ac_tool_prefix"; then
!     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
! set dummy ${ac_tool_prefix}cc; ac_word=$2
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
! $as_echo_n "checking for $ac_word... " >&6; }
! if ${ac_cv_prog_CC+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!     for ac_exec_ext in '' $ac_executable_extensions; do
!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_CC="${ac_tool_prefix}cc"
!     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
!   done
! IFS=$as_save_IFS
! 
! fi
! fi
! CC=$ac_cv_prog_CC
! if test -n "$CC"; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
! $as_echo "$CC" >&6; }
! else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
! fi
! 
! 
!   fi
! fi
! if test -z "$CC"; then
!   # Extract the first word of "cc", so it can be a program name with args.
! set dummy cc; ac_word=$2
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
! $as_echo_n "checking for $ac_word... " >&6; }
! if ${ac_cv_prog_CC+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
! else
!   ac_prog_rejected=no
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!     for ac_exec_ext in '' $ac_executable_extensions; do
!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
!        ac_prog_rejected=yes
!        continue
!      fi
!     ac_cv_prog_CC="cc"
!     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
!   done
! IFS=$as_save_IFS
  
! if test $ac_prog_rejected = yes; then
!   # We found a bogon in the path, so make sure we never use it.
!   set dummy $ac_cv_prog_CC
!   shift
!   if test $# != 0; then
!     # We chose a different compiler from the bogus one.
!     # However, it has the same basename, so the bogon will be chosen
!     # first if we set CC to just the basename; use the full file name.
!     shift
!     ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
!   fi
! fi
! fi
! fi
! CC=$ac_cv_prog_CC
! if test -n "$CC"; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
! $as_echo "$CC" >&6; }
  else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
- $as_echo "no" >&6; }
- fi
- 
  
! fi
! if test -z "$CC"; then
!   if test -n "$ac_tool_prefix"; then
!   for ac_prog in cl.exe
!   do
!     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
! set dummy $ac_tool_prefix$ac_prog; ac_word=$2
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
! $as_echo_n "checking for $ac_word... " >&6; }
! if ${ac_cv_prog_CC+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
!   if test -n "$CC"; then
!   ac_cv_prog_CC="$CC" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
! do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!     for ac_exec_ext in '' $ac_executable_extensions; do
!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
!     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
!   done
! IFS=$as_save_IFS
  
  fi
- fi
- CC=$ac_cv_prog_CC
- if test -n "$CC"; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
- $as_echo "$CC" >&6; }
- else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
- $as_echo "no" >&6; }
- fi
  
! 
!     test -n "$CC" && break
!   done
! fi
! if test -z "$CC"; then
!   ac_ct_CC=$CC
!   for ac_prog in cl.exe
! do
!   # Extract the first word of "$ac_prog", so it can be a program name with args.
! set dummy $ac_prog; ac_word=$2
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
! $as_echo_n "checking for $ac_word... " >&6; }
! if ${ac_cv_prog_ac_ct_CC+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
!   if test -n "$ac_ct_CC"; then
!   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
! else
! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
! for as_dir in $PATH
  do
!   IFS=$as_save_IFS
!   test -z "$as_dir" && as_dir=.
!     for ac_exec_ext in '' $ac_executable_extensions; do
!   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
!     ac_cv_prog_ac_ct_CC="$ac_prog"
!     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
!     break 2
!   fi
! done
!   done
! IFS=$as_save_IFS
! 
! fi
! fi
! ac_ct_CC=$ac_cv_prog_ac_ct_CC
! if test -n "$ac_ct_CC"; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
! $as_echo "$ac_ct_CC" >&6; }
! else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
! fi
! 
! 
!   test -n "$ac_ct_CC" && break
! done
! 
!   if test "x$ac_ct_CC" = x; then
!     CC=""
!   else
!     case $cross_compiling:$ac_tool_warned in
! yes:)
! { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
! $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
! ac_tool_warned=yes ;;
! esac
!     CC=$ac_ct_CC
!   fi
! fi
! 
! fi
! 
! 
! test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
! $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
! as_fn_error $? "no acceptable C compiler found in \$PATH
! See \`config.log' for more details" "$LINENO" 5; }
! 
! # Provide some information about the compiler.
! $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
! set X $ac_compile
! ac_compiler=$2
! for ac_option in --version -v -V -qversion; do
!   { { ac_try="$ac_compiler $ac_option >&5"
! case "(($ac_try" in
!   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
!   *) ac_try_echo=$ac_try;;
! esac
! eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
! $as_echo "$ac_try_echo"; } >&5
!   (eval "$ac_compiler $ac_option >&5") 2>conftest.err
!   ac_status=$?
!   if test -s conftest.err; then
!     sed '10a\
! ... rest of stderr output deleted ...
!          10q' conftest.err >conftest.er1
!     cat conftest.er1 >&5
!   fi
!   rm -f conftest.er1 conftest.err
!   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
!   test $ac_status = 0; }
  done
  
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
! $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
! if ${ac_cv_c_compiler_gnu+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
!   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h.  */
! 
! int
! main ()
! {
! #ifndef __GNUC__
!        choke me
! #endif
  
!   ;
!   return 0;
! }
! _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
!   ac_compiler_gnu=yes
! else
!   ac_compiler_gnu=no
! fi
! rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
! ac_cv_c_compiler_gnu=$ac_compiler_gnu
  
  fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
- $as_echo "$ac_cv_c_compiler_gnu" >&6; }
- if test $ac_compiler_gnu = yes; then
-   GCC=yes
- else
-   GCC=
- fi
- ac_test_CFLAGS=${CFLAGS+set}
- ac_save_CFLAGS=$CFLAGS
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
- $as_echo_n "checking whether $CC accepts -g... " >&6; }
- if ${ac_cv_prog_cc_g+:} false; then :
-   $as_echo_n "(cached) " >&6
- else
-   ac_save_c_werror_flag=$ac_c_werror_flag
-    ac_c_werror_flag=yes
-    ac_cv_prog_cc_g=no
-    CFLAGS="-g"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
- 
- int
- main ()
- {
  
!   ;
!   return 0;
! }
! _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
!   ac_cv_prog_cc_g=yes
! else
!   CFLAGS=""
!       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h.  */
! 
! int
! main ()
! {
! 
!   ;
!   return 0;
! }
! _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
! 
! else
!   ac_c_werror_flag=$ac_save_c_werror_flag
! 	 CFLAGS="-g"
! 	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h.  */
! 
! int
! main ()
! {
! 
!   ;
!   return 0;
! }
! _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
!   ac_cv_prog_cc_g=yes
! fi
! rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
! fi
! rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
! fi
! rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
!    ac_c_werror_flag=$ac_save_c_werror_flag
! fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
! $as_echo "$ac_cv_prog_cc_g" >&6; }
! if test "$ac_test_CFLAGS" = set; then
!   CFLAGS=$ac_save_CFLAGS
! elif test $ac_cv_prog_cc_g = yes; then
!   if test "$GCC" = yes; then
!     CFLAGS="-g -O2"
!   else
!     CFLAGS="-g"
!   fi
! else
!   if test "$GCC" = yes; then
!     CFLAGS="-O2"
!   else
!     CFLAGS=
!   fi
! fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
! $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
! if ${ac_cv_prog_cc_c89+:} false; then :
!   $as_echo_n "(cached) " >&6
  else
!   ac_cv_prog_cc_c89=no
! ac_save_CC=$CC
! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
! /* end confdefs.h.  */
! #include <stdarg.h>
! #include <stdio.h>
! struct stat;
! /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
! struct buf { int x; };
! FILE * (*rcsopen) (struct buf *, struct stat *, int);
! static char *e (p, i)
!      char **p;
!      int i;
! {
!   return p[i];
! }
! static char *f (char * (*g) (char **, int), char **p, ...)
! {
!   char *s;
!   va_list v;
!   va_start (v,p);
!   s = g (p, va_arg (v,int));
!   va_end (v);
!   return s;
! }
! 
! /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
!    function prototypes and stuff, but not '\xHH' hex character constants.
!    These don't provoke an error unfortunately, instead are silently treated
!    as 'x'.  The following induces an error, until -std is added to get
!    proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
!    array size at least.  It's necessary to write '\x00'==0 to get something
!    that's true only with -std.  */
! int osf4_cc_array ['\x00' == 0 ? 1 : -1];
! 
! /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
!    inside strings and character constants.  */
! #define FOO(x) 'x'
! int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
! 
! int test (int i, double x);
! struct s1 {int (*f) (int a);};
! struct s2 {int (*f) (double a);};
! int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
! int argc;
! char **argv;
! int
! main ()
! {
! return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
!   ;
!   return 0;
! }
! _ACEOF
! for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
! 	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
! do
!   CC="$ac_save_CC $ac_arg"
!   if ac_fn_c_try_compile "$LINENO"; then :
!   ac_cv_prog_cc_c89=$ac_arg
! fi
! rm -f core conftest.err conftest.$ac_objext
!   test "x$ac_cv_prog_cc_c89" != "xno" && break
! done
! rm -f conftest.$ac_ext
! CC=$ac_save_CC
! 
  fi
- # AC_CACHE_VAL
- case "x$ac_cv_prog_cc_c89" in
-   x)
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
- $as_echo "none needed" >&6; } ;;
-   xno)
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
- $as_echo "unsupported" >&6; } ;;
-   *)
-     CC="$CC $ac_cv_prog_cc_c89"
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
- $as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
- esac
- if test "x$ac_cv_prog_cc_c89" != xno; then :
  
- fi
  
- ac_ext=c
- ac_cpp='$CPP $CPPFLAGS'
- ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
- ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
- ac_compiler_gnu=$ac_cv_c_compiler_gnu
  
  
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for O_CLOEXEC" >&5
  $as_echo_n "checking for O_CLOEXEC... " >&6; }
--- 2956,3003 ----
  test "$maintainer_mode" = yes && MAINTAINER=yes
  
  
! # Handle configuration of checking; for the tools in this directory we
! # default to release checking and stricter checks do not change this.
  
! # Check whether --enable-checking was given.
! if test "${enable_checking+set}" = set; then :
!   enableval=$enable_checking; ac_checking_flags="${enableval}"
  else
  
! # Default to checking.
! ac_checking_flags=yes
  
  fi
  
! IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS="$IFS,"
! for check in release $ac_checking_flags
  do
! 	case $check in
! 	# these set all the flags to specific states
! 	yes|all|release|assert) ac_assert_checking=1 ; ;;
! 	no|none) ac_assert_checking= ; ;;
! 	*) ;;
! 	esac
  done
+ IFS="$ac_save_IFS"
  
! if test x$ac_assert_checking != x ; then
  
! $as_echo "#define ENABLE_ASSERT_CHECKING 1" >>confdefs.h
  
  fi
  
! # Check whether --enable-default-pie was given.
! # Check whether --enable-default-pie was given.
! if test "${enable_default_pie+set}" = set; then :
!   enableval=$enable_default_pie; PIEFLAG=-fPIE
  else
!   PIEFLAG=
  fi
  
  
  
+ # Check if O_CLOEXEC is defined by fcntl
  
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for O_CLOEXEC" >&5
  $as_echo_n "checking for O_CLOEXEC... " >&6; }
*************** return open ("/dev/null", O_RDONLY | O_C
*** 3559,3565 ****
    return 0;
  }
  _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
    ac_cv_o_cloexec=yes
  else
    ac_cv_o_cloexec=no
--- 3018,3024 ----
    return 0;
  }
  _ACEOF
! if ac_fn_cxx_try_compile "$LINENO"; then :
    ac_cv_o_cloexec=yes
  else
    ac_cv_o_cloexec=no
*************** $as_echo "#define HOST_HAS_O_CLOEXEC 1"
*** 3574,3599 ****
  
  fi
  
! ac_ext=c
! ac_cpp='$CPP $CPPFLAGS'
! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_c_compiler_gnu
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
! $as_echo_n "checking how to run the C preprocessor... " >&6; }
! # On Suns, sometimes $CPP names a directory.
! if test -n "$CPP" && test -d "$CPP"; then
!   CPP=
! fi
! if test -z "$CPP"; then
!   if ${ac_cv_prog_CPP+:} false; then :
    $as_echo_n "(cached) " >&6
  else
!       # Double quotes because CPP needs to be expanded
!     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
      do
        ac_preproc_ok=false
! for ac_c_preproc_warn_flag in '' yes
  do
    # Use a header file that comes with gcc, so configuring glibc
    # with a fresh cross-compiler works.
--- 3033,3054 ----
  
  fi
  
! ac_ext=cpp
! ac_cpp='$CXXCPP $CPPFLAGS'
! ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
! $as_echo_n "checking how to run the C++ preprocessor... " >&6; }
! if test -z "$CXXCPP"; then
!   if ${ac_cv_prog_CXXCPP+:} false; then :
    $as_echo_n "(cached) " >&6
  else
!       # Double quotes because CXXCPP needs to be expanded
!     for CXXCPP in "$CXX -E" "/lib/cpp"
      do
        ac_preproc_ok=false
! for ac_cxx_preproc_warn_flag in '' yes
  do
    # Use a header file that comes with gcc, so configuring glibc
    # with a fresh cross-compiler works.
*************** do
*** 3610,3616 ****
  #endif
  		     Syntax error
  _ACEOF
! if ac_fn_c_try_cpp "$LINENO"; then :
  
  else
    # Broken: fails on valid input.
--- 3065,3071 ----
  #endif
  		     Syntax error
  _ACEOF
! if ac_fn_cxx_try_cpp "$LINENO"; then :
  
  else
    # Broken: fails on valid input.
*************** rm -f conftest.err conftest.i conftest.$
*** 3624,3630 ****
  /* end confdefs.h.  */
  #include <ac_nonexistent.h>
  _ACEOF
! if ac_fn_c_try_cpp "$LINENO"; then :
    # Broken: success on invalid input.
  continue
  else
--- 3079,3085 ----
  /* end confdefs.h.  */
  #include <ac_nonexistent.h>
  _ACEOF
! if ac_fn_cxx_try_cpp "$LINENO"; then :
    # Broken: success on invalid input.
  continue
  else
*************** if $ac_preproc_ok; then :
*** 3642,3658 ****
  fi
  
      done
!     ac_cv_prog_CPP=$CPP
  
  fi
!   CPP=$ac_cv_prog_CPP
  else
!   ac_cv_prog_CPP=$CPP
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
! $as_echo "$CPP" >&6; }
  ac_preproc_ok=false
! for ac_c_preproc_warn_flag in '' yes
  do
    # Use a header file that comes with gcc, so configuring glibc
    # with a fresh cross-compiler works.
--- 3097,3113 ----
  fi
  
      done
!     ac_cv_prog_CXXCPP=$CXXCPP
  
  fi
!   CXXCPP=$ac_cv_prog_CXXCPP
  else
!   ac_cv_prog_CXXCPP=$CXXCPP
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
! $as_echo "$CXXCPP" >&6; }
  ac_preproc_ok=false
! for ac_cxx_preproc_warn_flag in '' yes
  do
    # Use a header file that comes with gcc, so configuring glibc
    # with a fresh cross-compiler works.
*************** do
*** 3669,3675 ****
  #endif
  		     Syntax error
  _ACEOF
! if ac_fn_c_try_cpp "$LINENO"; then :
  
  else
    # Broken: fails on valid input.
--- 3124,3130 ----
  #endif
  		     Syntax error
  _ACEOF
! if ac_fn_cxx_try_cpp "$LINENO"; then :
  
  else
    # Broken: fails on valid input.
*************** rm -f conftest.err conftest.i conftest.$
*** 3683,3689 ****
  /* end confdefs.h.  */
  #include <ac_nonexistent.h>
  _ACEOF
! if ac_fn_c_try_cpp "$LINENO"; then :
    # Broken: success on invalid input.
  continue
  else
--- 3138,3144 ----
  /* end confdefs.h.  */
  #include <ac_nonexistent.h>
  _ACEOF
! if ac_fn_cxx_try_cpp "$LINENO"; then :
    # Broken: success on invalid input.
  continue
  else
*************** if $ac_preproc_ok; then :
*** 3701,3715 ****
  else
    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
! as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
  See \`config.log' for more details" "$LINENO" 5; }
  fi
  
! ac_ext=c
! ac_cpp='$CPP $CPPFLAGS'
! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_c_compiler_gnu
  
  
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
--- 3156,3170 ----
  else
    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
  $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
! as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
  See \`config.log' for more details" "$LINENO" 5; }
  fi
  
! ac_ext=cpp
! ac_cpp='$CXXCPP $CPPFLAGS'
! ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
! ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
! ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
  
  
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
*************** main ()
*** 3862,3868 ****
    return 0;
  }
  _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
    ac_cv_header_stdc=yes
  else
    ac_cv_header_stdc=no
--- 3317,3323 ----
    return 0;
  }
  _ACEOF
! if ac_fn_cxx_try_compile "$LINENO"; then :
    ac_cv_header_stdc=yes
  else
    ac_cv_header_stdc=no
*************** main ()
*** 3935,3941 ****
    return 0;
  }
  _ACEOF
! if ac_fn_c_try_run "$LINENO"; then :
  
  else
    ac_cv_header_stdc=no
--- 3390,3396 ----
    return 0;
  }
  _ACEOF
! if ac_fn_cxx_try_run "$LINENO"; then :
  
  else
    ac_cv_header_stdc=no
*************** for ac_header in sys/types.h sys/stat.h
*** 3959,3965 ****
  		  inttypes.h stdint.h unistd.h
  do :
    as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
! ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
  "
  if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
    cat >>confdefs.h <<_ACEOF
--- 3414,3420 ----
  		  inttypes.h stdint.h unistd.h
  do :
    as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
! ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
  "
  if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
    cat >>confdefs.h <<_ACEOF
*************** done
*** 3973,3979 ****
  
  for ac_header in sys/mman.h
  do :
!   ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
  if test "x$ac_cv_header_sys_mman_h" = xyes; then :
    cat >>confdefs.h <<_ACEOF
  #define HAVE_SYS_MMAN_H 1
--- 3428,3434 ----
  
  for ac_header in sys/mman.h
  do :
!   ac_fn_cxx_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
  if test "x$ac_cv_header_sys_mman_h" = xyes; then :
    cat >>confdefs.h <<_ACEOF
  #define HAVE_SYS_MMAN_H 1
*************** connect (fd, (sockaddr *)&un, sizeof (un
*** 4016,4022 ****
    return 0;
  }
  _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
    ac_cv_af_unix=yes
  else
    ac_cv_af_unix=no
--- 3471,3477 ----
    return 0;
  }
  _ACEOF
! if ac_fn_cxx_try_compile "$LINENO"; then :
    ac_cv_af_unix=yes
  else
    ac_cv_af_unix=no
*************** connect (fd, (sockaddr *)&in6, sizeof (i
*** 4070,4076 ****
    return 0;
  }
  _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
    ac_cv_af_inet6=yes
  else
    ac_cv_af_inet6=no
--- 3525,3531 ----
    return 0;
  }
  _ACEOF
! if ac_fn_cxx_try_compile "$LINENO"; then :
    ac_cv_af_inet6=yes
  else
    ac_cv_af_inet6=no
*************** epoll_pwait (fd, 0, 0, -1, 0);
*** 4111,4117 ****
    return 0;
  }
  _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
    ac_cv_epoll=yes
  else
    ac_cv_epoll=no
--- 3566,3572 ----
    return 0;
  }
  _ACEOF
! if ac_fn_cxx_try_compile "$LINENO"; then :
    ac_cv_epoll=yes
  else
    ac_cv_epoll=no
*************** pselect (0, 0, 0, 0, 0, 0);
*** 4147,4153 ****
    return 0;
  }
  _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
    ac_cv_pselect=yes
  else
    ac_cv_pselect=no
--- 3602,3608 ----
    return 0;
  }
  _ACEOF
! if ac_fn_cxx_try_compile "$LINENO"; then :
    ac_cv_pselect=yes
  else
    ac_cv_pselect=no
*************** select (0, 0, 0, 0, 0);
*** 4184,4190 ****
    return 0;
  }
  _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
    ac_cv_select=yes
  else
    ac_cv_select=no
--- 3639,3645 ----
    return 0;
  }
  _ACEOF
! if ac_fn_cxx_try_compile "$LINENO"; then :
    ac_cv_select=yes
  else
    ac_cv_select=no
*************** int err = accept4 (1, 0, 0, SOCK_NONBLOC
*** 4220,4226 ****
    return 0;
  }
  _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
    ac_cv_accept4=yes
  else
    ac_cv_accept4=no
--- 3675,3681 ----
    return 0;
  }
  _ACEOF
! if ac_fn_cxx_try_compile "$LINENO"; then :
    ac_cv_accept4=yes
  else
    ac_cv_accept4=no
*************** const char *str = inet_ntop (AF_INET6, &
*** 4259,4265 ****
    return 0;
  }
  _ACEOF
! if ac_fn_c_try_compile "$LINENO"; then :
    ac_cv_inet_ntop=yes
  else
    ac_cv_inet_ntop=no
--- 3714,3720 ----
    return 0;
  }
  _ACEOF
! if ac_fn_cxx_try_compile "$LINENO"; then :
    ac_cv_inet_ntop=yes
  else
    ac_cv_inet_ntop=no
*************** for ac_lib in '' nsl; do
*** 4325,4331 ****
      ac_res=-l$ac_lib
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
    fi
!   if ac_fn_c_try_link "$LINENO"; then :
    ac_cv_search_gethostbyname=$ac_res
  fi
  rm -f core conftest.err conftest.$ac_objext \
--- 3780,3786 ----
      ac_res=-l$ac_lib
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
    fi
!   if ac_fn_cxx_try_link "$LINENO"; then :
    ac_cv_search_gethostbyname=$ac_res
  fi
  rm -f core conftest.err conftest.$ac_objext \
*************** for ac_lib in '' socket; do
*** 4381,4387 ****
      ac_res=-l$ac_lib
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
    fi
!   if ac_fn_c_try_link "$LINENO"; then :
    ac_cv_search_socket=$ac_res
  fi
  rm -f core conftest.err conftest.$ac_objext \
--- 3836,3842 ----
      ac_res=-l$ac_lib
      LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
    fi
!   if ac_fn_cxx_try_link "$LINENO"; then :
    ac_cv_search_socket=$ac_res
  fi
  rm -f core conftest.err conftest.$ac_objext \
*************** return socket ();
*** 4431,4437 ****
    return 0;
  }
  _ACEOF
! if ac_fn_c_try_link "$LINENO"; then :
    ac_cv_lib_socket_socket=yes
  else
    ac_cv_lib_socket_socket=no
--- 3886,3892 ----
    return 0;
  }
  _ACEOF
! if ac_fn_cxx_try_link "$LINENO"; then :
    ac_cv_lib_socket_socket=yes
  else
    ac_cv_lib_socket_socket=no
diff -Nrcpad gcc-11.3.0/c++tools/configure.ac gcc-12.1.0/c++tools/configure.ac
*** gcc-11.3.0/c++tools/configure.ac	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/c++tools/configure.ac	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  # Configure script for c++tools
! #   Copyright (C) 2020 Free Software Foundation, Inc.
  #   Written by Nathan Sidwell <nathan@acm.org> while at FaceBook
  #
  # This file is free software; you can redistribute it and/or modify it
--- 1,5 ----
  # Configure script for c++tools
! #   Copyright (C) 2020-2022 Free Software Foundation, Inc.
  #   Written by Nathan Sidwell <nathan@acm.org> while at FaceBook
  #
  # This file is free software; you can redistribute it and/or modify it
*************** MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}
*** 41,46 ****
--- 41,48 ----
  AC_CHECK_PROGS([AUTOCONF], [autoconf], [$MISSING autoconf])
  AC_CHECK_PROGS([AUTOHEADER], [autoheader], [$MISSING autoheader])
  
+ AC_LANG(C++)
+ 
  dnl Enabled by default
  AC_MSG_CHECKING([whether to build C++ tools])
    AC_ARG_ENABLE(c++-tools, 
*************** AC_MSG_RESULT([$maintainer_mode])
*** 67,72 ****
--- 69,103 ----
  test "$maintainer_mode" = yes && MAINTAINER=yes
  AC_SUBST(MAINTAINER)
  
+ # Handle configuration of checking; for the tools in this directory we
+ # default to release checking and stricter checks do not change this.
+ 
+ AC_ARG_ENABLE(checking,
+ [AS_HELP_STRING([[--enable-checking[=LIST]]],
+ 		[enable expensive run-time checks.  With LIST,
+ 		 enable only specific categories of checks.
+ 		 Categories are: yes,no,all,none,release.])],
+ [ac_checking_flags="${enableval}"],[
+ # Default to checking.
+ ac_checking_flags=yes
+ ])
+ IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS="$IFS,"
+ for check in release $ac_checking_flags
+ do
+ 	case $check in
+ 	# these set all the flags to specific states
+ 	yes|all|release|assert) ac_assert_checking=1 ; ;;
+ 	no|none) ac_assert_checking= ; ;;
+ 	*) ;;
+ 	esac
+ done
+ IFS="$ac_save_IFS"
+ 
+ if test x$ac_assert_checking != x ; then
+   AC_DEFINE(ENABLE_ASSERT_CHECKING, 1,
+ [Define if you want assertions enabled.  This is a cheap check.])
+ fi
+ 
  # Check whether --enable-default-pie was given.
  AC_ARG_ENABLE(default-pie,
  [AS_HELP_STRING([--enable-default-pie],
diff -Nrcpad gcc-11.3.0/c++tools/resolver.cc gcc-12.1.0/c++tools/resolver.cc
*** gcc-11.3.0/c++tools/resolver.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/c++tools/resolver.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* C++ modules.  Experimental!	-*- c++ -*-
!    Copyright (C) 2017-2020 Free Software Foundation, Inc.
     Written by Nathan Sidwell <nathan@acm.org> while at FaceBook
  
     This file is part of GCC.
--- 1,5 ----
  /* C++ modules.  Experimental!	-*- c++ -*-
!    Copyright (C) 2017-2022 Free Software Foundation, Inc.
     Written by Nathan Sidwell <nathan@acm.org> while at FaceBook
  
     This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 23,28 ****
--- 23,29 ----
  #include "resolver.h"
  // C++
  #include <algorithm>
+ #include <memory>
  // C
  #include <cstring>
  // OS
*************** module_resolver::read_tuple_file (int fd
*** 114,123 ****
--- 115,131 ----
    buffer = mmap (nullptr, stat.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
    if (buffer == MAP_FAILED)
      return -errno;
+   struct Deleter {
+     void operator()(void* p) const { munmap(p, size); }
+     size_t size;
+   };
+   std::unique_ptr<void, Deleter> guard(buffer, Deleter{(size_t)stat.st_size});
  #else
    buffer = xmalloc (stat.st_size);
    if (!buffer)
      return -errno;
+   struct Deleter { void operator()(void* p) const { free(p); } };
+   std::unique_ptr<void, Deleter> guard(buffer);
    if (read (fd, buffer, stat.st_size) != stat.st_size)
      return -errno;
  #endif
*************** module_resolver::read_tuple_file (int fd
*** 179,190 ****
  	}
      }
  
- #if MAPPED_READING
-   munmap (buffer, stat.st_size);
- #else
-   free (buffer);
- #endif
- 
    return 0;
  }
  
--- 187,192 ----
*************** module_resolver::IncludeTranslateRequest
*** 307,309 ****
--- 309,322 ----
    return 0;
  }
  
+ /* This handles a client notification to the server that a CMI has been
+    produced for a module.  For this simplified server, we just accept
+    the transaction and respond with "OK".  */
+ 
+ int
+ module_resolver::ModuleCompiledRequest (Cody::Server *s, Cody::Flags,
+ 				      std::string &)
+ {
+   s->OKResponse();
+   return 0;
+ }
diff -Nrcpad gcc-11.3.0/c++tools/resolver.h gcc-12.1.0/c++tools/resolver.h
*** gcc-11.3.0/c++tools/resolver.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/c++tools/resolver.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* C++ modules.  Experimental!	-*- c++ -*-
!    Copyright (C) 2017-2020 Free Software Foundation, Inc.
     Written by Nathan Sidwell <nathan@acm.org> while at FaceBook
  
     This file is part of GCC.
--- 1,5 ----
  /* C++ modules.  Experimental!	-*- c++ -*-
!    Copyright (C) 2017-2022 Free Software Foundation, Inc.
     Written by Nathan Sidwell <nathan@acm.org> while at FaceBook
  
     This file is part of GCC.
*************** public:
*** 96,101 ****
--- 96,105 ----
  				       std::string &include)
      override;
  
+   using parent::ModuleCompiledRequest;
+   virtual int ModuleCompiledRequest (Cody::Server *s, Cody::Flags Flags,
+ 				     std::string &Module) override;
+ 
  private:
    using parent::GetCMISuffix;
    virtual char const *GetCMISuffix () override;
diff -Nrcpad gcc-11.3.0/c++tools/server.cc gcc-12.1.0/c++tools/server.cc
*** gcc-11.3.0/c++tools/server.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/c++tools/server.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* C++ modules.  Experimental!
!    Copyright (C) 2018-2020 Free Software Foundation, Inc.
     Written by Nathan Sidwell <nathan@acm.org> while at FaceBook
  
     This file is part of GCC.
--- 1,5 ----
  /* C++ modules.  Experimental!
!    Copyright (C) 2018-2022 Free Software Foundation, Inc.
     Written by Nathan Sidwell <nathan@acm.org> while at FaceBook
  
     This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 61,66 ****
--- 61,70 ----
  # define gai_strerror(X) ""
  #endif
  
+ #ifndef AI_NUMERICSERV
+ #define AI_NUMERICSERV 0
+ #endif
+ 
  #include <getopt.h>
  
  // Select or epoll
*************** along with GCC; see the file COPYING3.
*** 92,97 ****
--- 96,123 ----
  #define DIR_SEPARATOR '/'
  #endif
  
+ /* Imported from libcpp/system.h
+    Use gcc_assert(EXPR) to test invariants.  */
+ #if ENABLE_ASSERT_CHECKING
+ #define gcc_assert(EXPR)                                                \
+    ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0))
+ #elif (GCC_VERSION >= 4005)
+ #define gcc_assert(EXPR)                                                \
+   ((void)(__builtin_expect (!(EXPR), 0) ? __builtin_unreachable (), 0 : 0))
+ #else
+ /* Include EXPR, so that unused variable warnings do not occur.  */
+ #define gcc_assert(EXPR) ((void)(0 && (EXPR)))
+ #endif
+ 
+ /* Use gcc_unreachable() to mark unreachable locations (like an
+    unreachable default case of a switch.  Do not use gcc_assert(0).  */
+ #if (GCC_VERSION >= 4005) && !ENABLE_ASSERT_CHECKING
+ #define gcc_unreachable() __builtin_unreachable ()
+ #else
+ #define gcc_unreachable() (fancy_abort (__FILE__, __LINE__, __FUNCTION__))
+ #endif
+ 
+ 
  #if NETWORKING
  struct netmask {
    in6_addr addr;
*************** internal_error (const char *fmt, ...)
*** 202,212 ****
--- 228,240 ----
  
  /* Hooked to from gcc_assert & gcc_unreachable.  */
  
+ #if ENABLE_ASSERT_CHECKING
  void ATTRIBUTE_NORETURN ATTRIBUTE_COLD
  fancy_abort (const char *file, int line, const char *func)
  {
    internal_error ("in %s, at %s:%d", func, trim_src_file (file), line);
  }
+ #endif
  
  /* Exploded on a signal.  */
  
*************** static void ATTRIBUTE_NORETURN
*** 291,297 ****
  print_version (void)
  {
    fnotice (stdout, "%s %s%s\n", progname, pkgversion_string, version_string);
!   fprintf (stdout, "Copyright %s 2018-2020 Free Software Foundation, Inc.\n",
  	   ("(C)"));
    fnotice (stdout,
  	   ("This is free software; see the source for copying conditions.\n"
--- 319,325 ----
  print_version (void)
  {
    fnotice (stdout, "%s %s%s\n", progname, pkgversion_string, version_string);
!   fprintf (stdout, "Copyright %s 2018-2022 Free Software Foundation, Inc.\n",
  	   ("(C)"));
    fnotice (stdout,
  	   ("This is free software; see the source for copying conditions.\n"
*************** accept_from (char *arg ATTRIBUTE_UNUSED)
*** 332,338 ****
    hints.ai_next = NULL;
  
    struct addrinfo *addrs = NULL;
!   if (int e = getaddrinfo (slash == arg ? NULL : arg, "0", &hints, &addrs))
      {
        noisy ("cannot resolve '%s': %s", arg, gai_strerror (e));
        ok = false;
--- 360,370 ----
    hints.ai_next = NULL;
  
    struct addrinfo *addrs = NULL;
!   /* getaddrinfo requires either hostname or servname to be non-null, so that we must
!      set a port number (to cover the case that the string passed contains just /NN).
!      Use an arbitrary in-range port number, but avoiding "0" which triggers a bug on
!      some BSD variants.  */
!   if (int e = getaddrinfo (slash == arg ? NULL : arg, "1", &hints, &addrs))
      {
        noisy ("cannot resolve '%s': %s", arg, gai_strerror (e));
        ok = false;
diff -Nrcpad gcc-11.3.0/config/ChangeLog gcc-12.1.0/config/ChangeLog
*** gcc-11.3.0/config/ChangeLog	Thu Apr 21 07:59:16 2022
--- gcc-12.1.0/config/ChangeLog	Fri May  6 07:30:56 2022
***************
*** 1,30 ****
! 2022-04-21  Release Manager
  
! 	* GCC 11.3.0 released.
  
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	Backported from master:
! 	2021-08-18  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* mh-darwin: Require a non-shared host configuration to
  	enable  mdynamic-no-pic where that is supported.
  
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	Backported from master:
! 	2021-07-09  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* mh-darwin: Make this specific to handling the
  	mdynamic-no-pic case.
  
! 2021-07-28  Release Manager
  
! 	* GCC 11.2.0 released.
  
! 2021-04-27  Release Manager
  
! 	* GCC 11.1.0 released.
  
  2021-04-13  Martin Storsjö  <martin@martin.st>
  
--- 1,68 ----
! 2022-05-06  Release Manager
  
! 	* GCC 12.1.0 released.
  
! 2022-03-29  Chenghua Xu  <xuchenghua@loongson.cn>
! 	    Lulu Cheng  <chenglulu@loongson.cn>
  
! 	* picflag.m4: Default add build option '-fpic' for LoongArch.
! 
! 2021-12-21  Iain Buclaw  <ibuclaw@gdcproject.org>
! 
! 	PR d/103528
! 	* acx.m4 (ACX_PROG_GDC): Add check whether D compiler works.
! 
! 2021-12-16  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Revert:
! 	2021-12-16  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	* gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.
! 
! 2021-12-15  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	* gcc-plugin.m4 (GCC_PLUGIN_OPTION): New.
! 
! 2021-12-15  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* gcc-plugin.m4: Save and process CXXFLAGS.
! 
! 2021-11-30  Iain Buclaw  <ibuclaw@gdcproject.org>
! 
! 	* acx.m4 (ACX_PROG_GDC): New m4 function.
! 
! 2021-09-19  Andrew Pinski  <apinski@marvell.com>
! 
! 	PR bootstrap/102389
! 	* bootstrap-lto-lean.mk: Handle NM like RANLIB AND AR.
! 	* bootstrap-lto.mk: Likewise.
! 
! 2021-08-18  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* mh-darwin: Require a non-shared host configuration to
  	enable  mdynamic-no-pic where that is supported.
  
! 2021-07-09  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* mh-darwin: Make this specific to handling the
  	mdynamic-no-pic case.
  
! 2021-06-14  Michael Forney  <mforney@mforney.org>
  
! 	* gettext.m4 (AM_GNU_GETTEXT): Skip checks for the internal
! 	symbols _nl_msg_cat_cntr, _nl_domain_bindings, and
! 	_nl_expand_alias, if __GNU_GETTEXT_SUPPORTED_REVISION is defined.
! 	Backport of gettext serial 68 patch.
  
! 2021-05-18  Mike Frysinger  <vapier@gentoo.org>
  
! 	* acinclude.m4 (CYG_AC_PATH_SIM, CYG_AC_PATH_DEVO): Delete.
! 
! 2021-05-03  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR bootstrap/99703
! 	* cet.m4 (GCC_CET_HOST_FLAGS): Check if host supports multi-byte
! 	NOPs.
  
  2021-04-13  Martin Storsjö  <martin@martin.st>
  
diff -Nrcpad gcc-11.3.0/config/acinclude.m4 gcc-12.1.0/config/acinclude.m4
*** gcc-11.3.0/config/acinclude.m4	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/config/acinclude.m4	Fri May  6 07:30:56 2022
*************** AC_SUBST(INTLLIB)
*** 374,461 ****
  ])
  
  dnl ====================================================================
- dnl Find the simulator library.
- AC_DEFUN([CYG_AC_PATH_SIM], [
- dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.. ../../../../../../../../../.."
- case "$target_cpu" in
-     powerpc)	target_dir=ppc ;;
-     sparc*)	target_dir=erc32 ;;
-     mips*)	target_dir=mips ;;
-     *)		target_dir=$target_cpu ;;
- esac
- dnl First look for the header file
- AC_MSG_CHECKING(for the simulator header file)
- AC_CACHE_VAL(ac_cv_c_simh,[
- for i in $dirlist; do
-     if test -f "${srcdir}/$i/include/remote-sim.h" ; then
- 	ac_cv_c_simh=`(cd ${srcdir}/$i/include; ${PWDCMD-pwd})`
- 	break
-     fi
- done
- ])
- if test x"${ac_cv_c_simh}" != x; then
-     SIMHDIR="-I${ac_cv_c_simh}"
-     AC_MSG_RESULT(${ac_cv_c_simh})
- else
-     AC_MSG_RESULT(none)
- fi
- AC_SUBST(SIMHDIR)
- 
- dnl See whether it's a devo or Foundry branch simulator
- AC_MSG_CHECKING(Whether this is a devo simulator )
- AC_CACHE_VAL(ac_cv_c_simdevo,[
-     CPPFLAGS="$CPPFLAGS $SIMHDIR"
-     AC_EGREP_HEADER([SIM_DESC sim_open.*struct _bfd], remote-sim.h,
-         ac_cv_c_simdevo=yes,
-         ac_cv_c_simdevo=no)
- ])
- if test x"$ac_cv_c_simdevo" = x"yes" ; then
-     AC_DEFINE(HAVE_DEVO_SIM)
- fi
- AC_MSG_RESULT(${ac_cv_c_simdevo})
- AC_SUBST(HAVE_DEVO_SIM)
- 
- dnl Next look for the library
- AC_MSG_CHECKING(for the simulator library)
- AC_CACHE_VAL(ac_cv_c_simlib,[
- for i in $dirlist; do
-     if test -f "$i/sim/$target_dir/Makefile" ; then
- 	ac_cv_c_simlib=`(cd $i/sim/$target_dir; ${PWDCMD-pwd})`
-     fi
- done
- ])
- if test x"${ac_cv_c_simlib}" != x; then
-     SIMLIB="-L${ac_cv_c_simlib}"
- else
-     AC_MSG_RESULT(none)
-     dnl FIXME: this is kinda bogus, cause umtimately the TM will build
-     dnl all the libraries for several architectures. But for now, this
-     dnl will work till then.
- dnl     AC_MSG_CHECKING(for the simulator installed with the compiler libraries)
-     dnl Transform the name of the compiler to it's cross variant, unless
-     dnl CXX is set. This is also what CXX gets set to in the generated
-     dnl Makefile.
-     CROSS_GCC=`echo gcc | sed -e "s/^/$target/"`
- 
-     dnl Get G++'s full path to libgcc.a
- changequote(,)
-     gccpath=`${CROSS_GCC} --print-libgcc | sed -e 's:[a-z0-9A-Z\.\-]*/libgcc.a::' -e 's:lib/gcc-lib/::'`lib
- changequote([,])
-     if test -f $gccpath/libsim.a -o -f $gccpath/libsim.so ; then
-         ac_cv_c_simlib="$gccpath/"
-         SIMLIB="-L${ac_cv_c_simlib}"
- 	AC_MSG_RESULT(${ac_cv_c_simlib})
-     else
-         AM_CONDITIONAL(PSIM, test x$psim = xno)
- 	SIMLIB=""
- 	AC_MSG_RESULT(none)
- dnl         ac_cv_c_simlib=none
-     fi
- fi
- AC_SUBST(SIMLIB)
- ])
- 
- dnl ====================================================================
  dnl Find the libiberty library.
  AC_DEFUN([CYG_AC_PATH_LIBIBERTY], [
  AC_MSG_CHECKING(for the libiberty library in the build tree)
--- 374,379 ----
*************** AC_SUBST(LIBIBERTY)
*** 477,502 ****
  ])
  
  dnl ====================================================================
- AC_DEFUN([CYG_AC_PATH_DEVO], [
- AC_MSG_CHECKING(for devo headers in the source tree)
- dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.."
- AC_CACHE_VAL(ac_cv_c_devoh,[
- for i in $dirlist; do
-     if test -f "${srcdir}/$i/include/remote-sim.h" ; then
- 	ac_cv_c_devoh=`(cd ${srcdir}/$i/include; ${PWDCMD-pwd})`
-     fi
- done
- ])
- if test x"${ac_cv_c_devoh}" != x; then
-     DEVOHDIR="-I${ac_cv_c_devoh}"
-     AC_MSG_RESULT(${ac_cv_c_devoh})
- else
-     AC_MSG_RESULT(none)
- fi
- AC_SUBST(DEVOHDIR)
- ])
- 
- dnl ====================================================================
  dnl Find all the ILU headers and libraries
  AC_DEFUN([CYG_AC_PATH_ILU], [
  AC_MSG_CHECKING(for ILU kernel headers in the source tree)
--- 395,400 ----
diff -Nrcpad gcc-11.3.0/config/acx.m4 gcc-12.1.0/config/acx.m4
*** gcc-11.3.0/config/acx.m4	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/config/acx.m4	Fri May  6 07:30:56 2022
*************** else
*** 420,425 ****
--- 420,450 ----
  fi
  ])
  
+ # Test for D.
+ AC_DEFUN([ACX_PROG_GDC],
+ [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_CHECK_TOOL(GDC, gdc, no)
+ AC_CACHE_CHECK([whether the D compiler works],
+ 		 acx_cv_d_compiler_works,
+ [cat >conftest.d <<EOF
+ module conftest; int main() { return 0; }
+ EOF
+ acx_cv_d_compiler_works=no
+ if test "x$GDC" != xno; then
+   errors=`(${GDC} $1[]m4_ifval([$1], [ ])-c conftest.d) 2>&1 || echo failure`
+   if test x"$errors" = x && test -f conftest.$ac_objext; then
+     acx_cv_d_compiler_works=yes
+   fi
+   rm -f conftest.*
+ fi])
+ if test "x$GDC" != xno && test x$acx_cv_d_compiler_works != xno; then
+   have_gdc=yes
+ else
+   have_gdc=no
+ fi
+ ])
+ 
  dnl 'make compare' can be significantly faster, if cmp itself can
  dnl skip bytes instead of using tail.  The test being performed is
  dnl "if cmp --ignore-initial=2 t1 t2 && ! cmp --ignore-initial=1 t1 t2"
diff -Nrcpad gcc-11.3.0/config/bootstrap-lto-lean.mk gcc-12.1.0/config/bootstrap-lto-lean.mk
*** gcc-11.3.0/config/bootstrap-lto-lean.mk	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/config/bootstrap-lto-lean.mk	Fri May  6 07:30:56 2022
*************** STAGEfeedback_CFLAGS += -flto=jobserver
*** 9,17 ****
  # assumes the host supports the linker plugin
  LTO_AR = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ar$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
  LTO_RANLIB = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ranlib$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
  
  LTO_EXPORTS = AR="$(LTO_AR)"; export AR; \
! 	      RANLIB="$(LTO_RANLIB)"; export RANLIB;
! LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)"
  
  do-compare = /bin/true
--- 9,19 ----
  # assumes the host supports the linker plugin
  LTO_AR = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ar$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
  LTO_RANLIB = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ranlib$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
+ LTO_NM = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-nm$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
  
  LTO_EXPORTS = AR="$(LTO_AR)"; export AR; \
! 	      RANLIB="$(LTO_RANLIB)"; export RANLIB; \
! 	      NM="$(LTO_NM)"; export NM;
! LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)" NM="$(LTO_NM)"
  
  do-compare = /bin/true
diff -Nrcpad gcc-11.3.0/config/bootstrap-lto.mk gcc-12.1.0/config/bootstrap-lto.mk
*** gcc-11.3.0/config/bootstrap-lto.mk	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/config/bootstrap-lto.mk	Fri May  6 07:30:56 2022
*************** STAGEfeedback_CFLAGS += -flto=jobserver
*** 9,18 ****
  # assumes the host supports the linker plugin
  LTO_AR = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ar$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
  LTO_RANLIB = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ranlib$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
  
  LTO_EXPORTS = AR="$(LTO_AR)"; export AR; \
! 	      RANLIB="$(LTO_RANLIB)"; export RANLIB;
! LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)"
  
  do-compare = $(SHELL) $(srcdir)/contrib/compare-lto $$f1 $$f2
  extra-compare = gcc/lto1$(exeext)
--- 9,20 ----
  # assumes the host supports the linker plugin
  LTO_AR = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ar$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
  LTO_RANLIB = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ranlib$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
+ LTO_NM = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-nm$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/
  
  LTO_EXPORTS = AR="$(LTO_AR)"; export AR; \
! 	      RANLIB="$(LTO_RANLIB)"; export RANLIB; \
! 	      NM="$(LTO_NM)"; export NM;
! LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)" NM="$(LTO_NM)"
  
  do-compare = $(SHELL) $(srcdir)/contrib/compare-lto $$f1 $$f2
  extra-compare = gcc/lto1$(exeext)
diff -Nrcpad gcc-11.3.0/config/cet.m4 gcc-12.1.0/config/cet.m4
*** gcc-11.3.0/config/cet.m4	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/config/cet.m4	Fri May  6 07:30:56 2022
*************** fi
*** 130,135 ****
--- 130,147 ----
  if test x$may_have_cet = xyes; then
    if test x$cross_compiling = xno; then
      AC_TRY_RUN([
+ int
+ main ()
+ {
+   asm ("endbr32");
+   return 0;
+ }
+     ],
+     [have_multi_byte_nop=yes],
+     [have_multi_byte_nop=no])
+     have_cet=no
+     if test x$have_multi_byte_nop = xyes; then
+       AC_TRY_RUN([
  static void
  foo (void)
  {
*************** main ()
*** 155,163 ****
    bar ();
    return 0;
  }
!     ],
!     [have_cet=no],
!     [have_cet=yes])
      if test x$enable_cet = xno -a x$have_cet = xyes; then
        AC_MSG_ERROR([Intel CET must be enabled on Intel CET enabled host])
      fi
--- 167,176 ----
    bar ();
    return 0;
  }
!       ],
!       [have_cet=no],
!       [have_cet=yes])
!     fi
      if test x$enable_cet = xno -a x$have_cet = xyes; then
        AC_MSG_ERROR([Intel CET must be enabled on Intel CET enabled host])
      fi
diff -Nrcpad gcc-11.3.0/config/gcc-plugin.m4 gcc-12.1.0/config/gcc-plugin.m4
*** gcc-11.3.0/config/gcc-plugin.m4	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/config/gcc-plugin.m4	Fri May  6 07:30:56 2022
*************** AC_DEFUN([GCC_ENABLE_PLUGINS],
*** 91,104 ****
--- 91,108 ----
       # Check that we can build shared objects with -fPIC -shared
       saved_LDFLAGS="$LDFLAGS"
       saved_CFLAGS="$CFLAGS"
+      saved_CXXFLAGS="$CXXFLAGS"
       case "${host}" in
         *-*-darwin*)
  	 CFLAGS=`echo $CFLAGS | sed s/-mdynamic-no-pic//g`
  	 CFLAGS="$CFLAGS -fPIC"
+ 	 CXXFLAGS=`echo $CXXFLAGS | sed s/-mdynamic-no-pic//g`
+ 	 CXXFLAGS="$CXXFLAGS -fPIC"
  	 LDFLAGS="$LDFLAGS -shared -undefined dynamic_lookup"
         ;;
         *)
  	 CFLAGS="$CFLAGS -fPIC"
+ 	 CXXFLAGS="$CXXFLAGS -fPIC"
  	 LDFLAGS="$LDFLAGS -fPIC -shared"
         ;;
       esac
*************** AC_DEFUN([GCC_ENABLE_PLUGINS],
*** 113,118 ****
--- 117,123 ----
       fi
       LDFLAGS="$saved_LDFLAGS"
       CFLAGS="$saved_CFLAGS"
+      CXXFLAGS="$saved_CXXFLAGS"
  
       # If plugin support had been requested but not available, fail.
       if test x"$enable_plugin" = x"no" ; then
diff -Nrcpad gcc-11.3.0/config/gettext.m4 gcc-12.1.0/config/gettext.m4
*** gcc-11.3.0/config/gettext.m4	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/config/gettext.m4	Fri May  6 07:30:56 2022
*************** AC_DEFUN([AM_GNU_GETTEXT],
*** 128,133 ****
--- 128,140 ----
  
          AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
           [AC_TRY_LINK([#include <libintl.h>
+ #ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+ extern int _nl_msg_cat_cntr;
+ extern int *_nl_domain_bindings;
+ #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings)
+ #else
+ #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+ #endif
  ]ifelse([$2], [need-formatstring-macros],
  [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
  #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
*************** AC_DEFUN([AM_GNU_GETTEXT],
*** 135,144 ****
  changequote(,)dnl
  typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
  changequote([,])dnl
! ], [])[extern int _nl_msg_cat_cntr;
! extern int *_nl_domain_bindings;],
              [bindtextdomain ("", "");
! return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
              gt_cv_func_gnugettext_libc=yes,
              gt_cv_func_gnugettext_libc=no)])
  
--- 142,150 ----
  changequote(,)dnl
  typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
  changequote([,])dnl
! ], []),
              [bindtextdomain ("", "");
! return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + __GNU_GETTEXT_SYMBOL_EXPRESSION],
              gt_cv_func_gnugettext_libc=yes,
              gt_cv_func_gnugettext_libc=no)])
  
*************** return (int) gettext ("")]ifelse([$2], [
*** 160,165 ****
--- 166,182 ----
              LIBS="$LIBS $LIBINTL"
              dnl Now see whether libintl exists and does not depend on libiconv.
              AC_TRY_LINK([#include <libintl.h>
+ #ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+ extern int _nl_msg_cat_cntr;
+ extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ const char *_nl_expand_alias ();
+ #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (0))
+ #else
+ #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+ #endif
  ]ifelse([$2], [need-formatstring-macros],
  [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
  #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
*************** return (int) gettext ("")]ifelse([$2], [
*** 167,186 ****
  changequote(,)dnl
  typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
  changequote([,])dnl
! ], [])[extern int _nl_msg_cat_cntr;
! extern
! #ifdef __cplusplus
! "C"
! #endif
! const char *_nl_expand_alias ();],
                [bindtextdomain ("", "");
! return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
                gt_cv_func_gnugettext_libintl=yes,
                gt_cv_func_gnugettext_libintl=no)
              dnl Now see whether libintl exists and depends on libiconv.
              if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
                LIBS="$LIBS $LIBICONV"
                AC_TRY_LINK([#include <libintl.h>
  ]ifelse([$2], [need-formatstring-macros],
  [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
  #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
--- 184,209 ----
  changequote(,)dnl
  typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
  changequote([,])dnl
! ], []),
                [bindtextdomain ("", "");
! return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + __GNU_GETTEXT_SYMBOL_EXPRESSION],
                gt_cv_func_gnugettext_libintl=yes,
                gt_cv_func_gnugettext_libintl=no)
              dnl Now see whether libintl exists and depends on libiconv.
              if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
                LIBS="$LIBS $LIBICONV"
                AC_TRY_LINK([#include <libintl.h>
+ #ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+ extern int _nl_msg_cat_cntr;
+ extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ const char *_nl_expand_alias ();
+ #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (0))
+ #else
+ #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+ #endif
  ]ifelse([$2], [need-formatstring-macros],
  [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
  #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
*************** return (int) gettext ("")]ifelse([$2], [
*** 188,201 ****
  changequote(,)dnl
  typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
  changequote([,])dnl
! ], [])[extern int _nl_msg_cat_cntr;
! extern
! #ifdef __cplusplus
! "C"
! #endif
! const char *_nl_expand_alias ();],
                  [bindtextdomain ("", "");
! return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
                 [LIBINTL="$LIBINTL $LIBICONV"
                  LTLIBINTL="$LTLIBINTL $LTLIBICONV"
                  gt_cv_func_gnugettext_libintl=yes
--- 211,219 ----
  changequote(,)dnl
  typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
  changequote([,])dnl
! ], []),
                  [bindtextdomain ("", "");
! return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + __GNU_GETTEXT_SYMBOL_EXPRESSION],
                 [LIBINTL="$LIBINTL $LIBICONV"
                  LTLIBINTL="$LTLIBINTL $LTLIBICONV"
                  gt_cv_func_gnugettext_libintl=yes
diff -Nrcpad gcc-11.3.0/config/picflag.m4 gcc-12.1.0/config/picflag.m4
*** gcc-11.3.0/config/picflag.m4	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/config/picflag.m4	Fri May  6 07:30:56 2022
*************** case "${$2}" in
*** 44,49 ****
--- 44,52 ----
  	# sets the default TLS model and affects inlining.
  	$1=-fPIC
  	;;
+     loongarch*-*-*)
+ 	$1=-fpic
+ 	;;
      mips-sgi-irix6*)
  	# PIC is the default.
  	;;
diff -Nrcpad gcc-11.3.0/config.sub gcc-12.1.0/config.sub
*** gcc-11.3.0/config.sub	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/config.sub	Fri May  6 07:30:56 2022
***************
*** 2,8 ****
  # Configuration validation subroutine script.
  #   Copyright 1992-2021 Free Software Foundation, Inc.
  
! timestamp='2021-01-08'
  
  # This file is free software; you can redistribute it and/or modify it
  # under the terms of the GNU General Public License as published by
--- 2,10 ----
  # Configuration validation subroutine script.
  #   Copyright 1992-2021 Free Software Foundation, Inc.
  
! # shellcheck disable=SC2006,SC2268 # see below for rationale
! 
! timestamp='2021-10-27'
  
  # This file is free software; you can redistribute it and/or modify it
  # under the terms of the GNU General Public License as published by
*************** timestamp='2021-01-08'
*** 50,56 ****
  #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
  # It is wrong to echo any other type of specification.
  
! me=$(echo "$0" | sed -e 's,.*/,,')
  
  usage="\
  Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
--- 52,65 ----
  #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
  # It is wrong to echo any other type of specification.
  
! # The "shellcheck disable" line above the timestamp inhibits complaints
! # about features and limitations of the classic Bourne shell that were
! # superseded or lifted in POSIX.  However, this script identifies a wide
! # variety of pre-POSIX systems that do not have POSIX shells at all, and
! # even some reasonably current systems (Solaris 10 as case-in-point) still
! # have a pre-POSIX /bin/sh.
! 
! me=`echo "$0" | sed -e 's,.*/,,'`
  
  usage="\
  Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
*************** esac
*** 112,120 ****
--- 121,131 ----
  
  # Split fields of configuration type
  # shellcheck disable=SC2162
+ saved_IFS=$IFS
  IFS="-" read field1 field2 field3 field4 <<EOF
  $1
  EOF
+ IFS=$saved_IFS
  
  # Separate into logical components for further validation
  case $1 in
*************** case $1 in
*** 163,168 ****
--- 174,183 ----
  						basic_machine=$field1
  						basic_os=$field2
  						;;
+ 					zephyr*)
+ 						basic_machine=$field1-unknown
+ 						basic_os=$field2
+ 						;;
  					# Manufacturers
  					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
  					| att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
*************** case $basic_machine in
*** 769,790 ****
  		vendor=hp
  		;;
  	i*86v32)
! 		cpu=$(echo "$1" | sed -e 's/86.*/86/')
  		vendor=pc
  		basic_os=sysv32
  		;;
  	i*86v4*)
! 		cpu=$(echo "$1" | sed -e 's/86.*/86/')
  		vendor=pc
  		basic_os=sysv4
  		;;
  	i*86v)
! 		cpu=$(echo "$1" | sed -e 's/86.*/86/')
  		vendor=pc
  		basic_os=sysv
  		;;
  	i*86sol2)
! 		cpu=$(echo "$1" | sed -e 's/86.*/86/')
  		vendor=pc
  		basic_os=solaris2
  		;;
--- 784,805 ----
  		vendor=hp
  		;;
  	i*86v32)
! 		cpu=`echo "$1" | sed -e 's/86.*/86/'`
  		vendor=pc
  		basic_os=sysv32
  		;;
  	i*86v4*)
! 		cpu=`echo "$1" | sed -e 's/86.*/86/'`
  		vendor=pc
  		basic_os=sysv4
  		;;
  	i*86v)
! 		cpu=`echo "$1" | sed -e 's/86.*/86/'`
  		vendor=pc
  		basic_os=sysv
  		;;
  	i*86sol2)
! 		cpu=`echo "$1" | sed -e 's/86.*/86/'`
  		vendor=pc
  		basic_os=solaris2
  		;;
*************** case $basic_machine in
*** 917,930 ****
  		;;
  	leon-*|leon[3-9]-*)
  		cpu=sparc
! 		vendor=$(echo "$basic_machine" | sed 's/-.*//')
  		;;
  
  	*-*)
  		# shellcheck disable=SC2162
  		IFS="-" read cpu vendor <<EOF
  $basic_machine
  EOF
  		;;
  	# We use `pc' rather than `unknown'
  	# because (1) that's what they normally are, and
--- 932,947 ----
  		;;
  	leon-*|leon[3-9]-*)
  		cpu=sparc
! 		vendor=`echo "$basic_machine" | sed 's/-.*//'`
  		;;
  
  	*-*)
  		# shellcheck disable=SC2162
+ 		saved_IFS=$IFS
  		IFS="-" read cpu vendor <<EOF
  $basic_machine
  EOF
+ 		IFS=$saved_IFS
  		;;
  	# We use `pc' rather than `unknown'
  	# because (1) that's what they normally are, and
*************** case $cpu-$vendor in
*** 1084,1090 ****
  		cpu=mipsisa64sb1el
  		;;
  	sh5e[lb]-*)
! 		cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/')
  		;;
  	spur-*)
  		cpu=spur
--- 1101,1107 ----
  		cpu=mipsisa64sb1el
  		;;
  	sh5e[lb]-*)
! 		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
  		;;
  	spur-*)
  		cpu=spur
*************** case $cpu-$vendor in
*** 1102,1108 ****
  		cpu=x86_64
  		;;
  	xscale-* | xscalee[bl]-*)
! 		cpu=$(echo "$cpu" | sed 's/^xscale/arm/')
  		;;
  	arm64-*)
  		cpu=aarch64
--- 1119,1125 ----
  		cpu=x86_64
  		;;
  	xscale-* | xscalee[bl]-*)
! 		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
  		;;
  	arm64-*)
  		cpu=aarch64
*************** case $cpu-$vendor in
*** 1165,1171 ****
  			| alphapca5[67] | alpha64pca5[67] \
  			| am33_2.0 \
  			| amdgcn \
! 			| arc | arceb \
  			| arm | arm[lb]e | arme[lb] | armv* \
  			| avr | avr32 \
  			| asmjs \
--- 1182,1188 ----
  			| alphapca5[67] | alpha64pca5[67] \
  			| am33_2.0 \
  			| amdgcn \
! 			| arc | arceb | arc32 | arc64 \
  			| arm | arm[lb]e | arme[lb] | armv* \
  			| avr | avr32 \
  			| asmjs \
*************** case $cpu-$vendor in
*** 1204,1212 ****
--- 1221,1233 ----
  			| mips64vr5900 | mips64vr5900el \
  			| mipsisa32 | mipsisa32el \
  			| mipsisa32r2 | mipsisa32r2el \
+ 			| mipsisa32r3 | mipsisa32r3el \
+ 			| mipsisa32r5 | mipsisa32r5el \
  			| mipsisa32r6 | mipsisa32r6el \
  			| mipsisa64 | mipsisa64el \
  			| mipsisa64r2 | mipsisa64r2el \
+ 			| mipsisa64r3 | mipsisa64r3el \
+ 			| mipsisa64r5 | mipsisa64r5el \
  			| mipsisa64r6 | mipsisa64r6el \
  			| mipsisa64sb1 | mipsisa64sb1el \
  			| mipsisa64sr71k | mipsisa64sr71kel \
*************** esac
*** 1283,1317 ****
  if test x$basic_os != x
  then
  
! # First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
  # set os.
  case $basic_os in
  	gnu/linux*)
  		kernel=linux
! 		os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|')
  		;;
  	os2-emx)
  		kernel=os2
! 		os=$(echo $basic_os | sed -e 's|os2-emx|emx|')
  		;;
  	nto-qnx*)
  		kernel=nto
! 		os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|')
  		;;
  	*-*)
  		# shellcheck disable=SC2162
  		IFS="-" read kernel os <<EOF
  $basic_os
  EOF
  		;;
  	# Default OS when just kernel was specified
  	nto*)
  		kernel=nto
! 		os=$(echo $basic_os | sed -e 's|nto|qnx|')
  		;;
  	linux*)
  		kernel=linux
! 		os=$(echo $basic_os | sed -e 's|linux|gnu|')
  		;;
  	*)
  		kernel=
--- 1304,1340 ----
  if test x$basic_os != x
  then
  
! # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
  # set os.
  case $basic_os in
  	gnu/linux*)
  		kernel=linux
! 		os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
  		;;
  	os2-emx)
  		kernel=os2
! 		os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
  		;;
  	nto-qnx*)
  		kernel=nto
! 		os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
  		;;
  	*-*)
  		# shellcheck disable=SC2162
+ 		saved_IFS=$IFS
  		IFS="-" read kernel os <<EOF
  $basic_os
  EOF
+ 		IFS=$saved_IFS
  		;;
  	# Default OS when just kernel was specified
  	nto*)
  		kernel=nto
! 		os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
  		;;
  	linux*)
  		kernel=linux
! 		os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
  		;;
  	*)
  		kernel=
*************** case $os in
*** 1332,1338 ****
  		os=cnk
  		;;
  	solaris1 | solaris1.*)
! 		os=$(echo $os | sed -e 's|solaris1|sunos4|')
  		;;
  	solaris)
  		os=solaris2
--- 1355,1361 ----
  		os=cnk
  		;;
  	solaris1 | solaris1.*)
! 		os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
  		;;
  	solaris)
  		os=solaris2
*************** case $os in
*** 1361,1367 ****
  		os=sco3.2v4
  		;;
  	sco3.2.[4-9]*)
! 		os=$(echo $os | sed -e 's/sco3.2./sco3.2v/')
  		;;
  	sco*v* | scout)
  		# Don't match below
--- 1384,1390 ----
  		os=sco3.2v4
  		;;
  	sco3.2.[4-9]*)
! 		os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
  		;;
  	sco*v* | scout)
  		# Don't match below
*************** case $os in
*** 1391,1397 ****
  		os=lynxos
  		;;
  	mac[0-9]*)
! 		os=$(echo "$os" | sed -e 's|mac|macos|')
  		;;
  	opened*)
  		os=openedition
--- 1414,1420 ----
  		os=lynxos
  		;;
  	mac[0-9]*)
! 		os=`echo "$os" | sed -e 's|mac|macos|'`
  		;;
  	opened*)
  		os=openedition
*************** case $os in
*** 1400,1409 ****
  		os=os400
  		;;
  	sunos5*)
! 		os=$(echo "$os" | sed -e 's|sunos5|solaris2|')
  		;;
  	sunos6*)
! 		os=$(echo "$os" | sed -e 's|sunos6|solaris3|')
  		;;
  	wince*)
  		os=wince
--- 1423,1432 ----
  		os=os400
  		;;
  	sunos5*)
! 		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
  		;;
  	sunos6*)
! 		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
  		;;
  	wince*)
  		os=wince
*************** case $os in
*** 1437,1443 ****
  		;;
  	# Preserve the version number of sinix5.
  	sinix5.*)
! 		os=$(echo $os | sed -e 's|sinix|sysv|')
  		;;
  	sinix*)
  		os=sysv4
--- 1460,1466 ----
  		;;
  	# Preserve the version number of sinix5.
  	sinix5.*)
! 		os=`echo "$os" | sed -e 's|sinix|sysv|'`
  		;;
  	sinix*)
  		os=sysv4
*************** fi
*** 1684,1690 ****
  # Now, validate our (potentially fixed-up) OS.
  case $os in
  	# Sometimes we do "kernel-libc", so those need to count as OSes.
! 	musl* | newlib* | uclibc*)
  		;;
  	# Likewise for "kernel-abi"
  	eabi* | gnueabi*)
--- 1707,1713 ----
  # Now, validate our (potentially fixed-up) OS.
  case $os in
  	# Sometimes we do "kernel-libc", so those need to count as OSes.
! 	musl* | newlib* | relibc* | uclibc*)
  		;;
  	# Likewise for "kernel-abi"
  	eabi* | gnueabi*)
*************** case $os in
*** 1707,1718 ****
  	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
  	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
  	     | mirbsd* | netbsd* | dicos* | openedition* | ose* \
! 	     | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
  	     | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
  	     | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
  	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
  	     | udi* | lites* | ieee* | go32* | aux* | hcos* \
! 	     | chorusrdb* | cegcc* | glidix* \
  	     | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
  	     | midipix* | mingw32* | mingw64* | mint* \
  	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
--- 1730,1741 ----
  	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
  	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
  	     | mirbsd* | netbsd* | dicos* | openedition* | ose* \
! 	     | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
  	     | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
  	     | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
  	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
  	     | udi* | lites* | ieee* | go32* | aux* | hcos* \
! 	     | chorusrdb* | cegcc* | glidix* | serenity* \
  	     | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
  	     | midipix* | mingw32* | mingw64* | mint* \
  	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
*************** case $os in
*** 1725,1731 ****
  	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
  	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
  	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
! 	     | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*)
  		;;
  	# This one is extra strict with allowed versions
  	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
--- 1748,1755 ----
  	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
  	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
  	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
! 	     | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
! 	     | fiwix* )
  		;;
  	# This one is extra strict with allowed versions
  	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
*************** esac
*** 1742,1752 ****
  # As a final step for OS-related things, validate the OS-kernel combination
  # (given a valid OS), if there is a kernel.
  case $kernel-$os in
! 	linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
  		;;
  	uclinux-uclibc* )
  		;;
! 	-dietlibc* | -newlib* | -musl* | -uclibc* )
  		# These are just libc implementations, not actual OSes, and thus
  		# require a kernel.
  		echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
--- 1766,1777 ----
  # As a final step for OS-related things, validate the OS-kernel combination
  # (given a valid OS), if there is a kernel.
  case $kernel-$os in
! 	linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
! 		   | linux-musl* | linux-relibc* | linux-uclibc* )
  		;;
  	uclinux-uclibc* )
  		;;
! 	-dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
  		# These are just libc implementations, not actual OSes, and thus
  		# require a kernel.
  		echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
diff -Nrcpad gcc-11.3.0/configure gcc-12.1.0/configure
*** gcc-11.3.0/configure	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/configure	Fri May  6 07:31:19 2022
*************** GFORTRAN_FOR_TARGET
*** 619,624 ****
--- 619,625 ----
  GCC_FOR_TARGET
  CXX_FOR_TARGET
  CC_FOR_TARGET
+ GDCFLAGS
  READELF
  OTOOL
  OBJDUMP
*************** DSYMUTIL_FOR_BUILD
*** 655,660 ****
--- 656,663 ----
  DLLTOOL_FOR_BUILD
  CXX_FOR_BUILD
  CXXFLAGS_FOR_BUILD
+ CPPFLAGS_FOR_BUILD
+ CPP_FOR_BUILD
  CFLAGS_FOR_BUILD
  CC_FOR_BUILD
  AS_FOR_BUILD
*************** extra_mpc_gmp_configure_flags
*** 697,705 ****
--- 700,712 ----
  extra_mpfr_configure_flags
  gmpinc
  gmplibs
+ PGO_BUILD_LTO_CFLAGS
+ PGO_BUILD_USE_CFLAGS
+ PGO_BUILD_GEN_CFLAGS
  HAVE_CXX11_FOR_BUILD
  HAVE_CXX11
  do_compare
+ GDC
  GNATMAKE
  GNATBIND
  ac_ct_CXX
*************** with_build_libsubdir
*** 789,794 ****
--- 796,802 ----
  with_system_zlib
  enable_as_accelerator_for
  enable_offload_targets
+ enable_offload_defaulted
  enable_gold
  enable_ld
  enable_compressed_debug_sections
*************** enable_libssp
*** 799,812 ****
  enable_libstdcxx
  enable_liboffloadmic
  enable_bootstrap
  with_mpc
  with_mpc_include
  with_mpc_lib
- with_mpfr_dir
  with_mpfr
  with_mpfr_include
  with_mpfr_lib
- with_gmp_dir
  with_gmp
  with_gmp_include
  with_gmp_lib
--- 807,819 ----
  enable_libstdcxx
  enable_liboffloadmic
  enable_bootstrap
+ enable_pgo_build
  with_mpc
  with_mpc_include
  with_mpc_lib
  with_mpfr
  with_mpfr_include
  with_mpfr_lib
  with_gmp
  with_gmp_include
  with_gmp_lib
*************** Optional Features:
*** 1520,1525 ****
--- 1527,1537 ----
                            enable offloading to devices from comma-separated
                            LIST of TARGET[=DIR]. Use optional path to find
                            offload target compiler during the build
+   --enable-offload-defaulted
+ 		If enabled, configured but not installed offload compilers and
+ 		libgomp plugins are silently ignored.  Useful for distribution
+ 		compilers where those are in separate optional packages.
+ 
    --enable-gold[=ARG]     build gold [ARG={default,yes,no}]
    --enable-ld[=ARG]       build ld [ARG={default,yes,no}]
    --enable-compressed-debug-sections={all,gas,gold,ld,none}
*************** Optional Features:
*** 1534,1539 ****
--- 1546,1553 ----
    --enable-liboffloadmic=ARG
                            build liboffloadmic [ARG={no,host,target}]
    --enable-bootstrap      enable bootstrapping [yes if native build]
+   --enable-pgo-build[=lto]
+                           enable the PGO build
    --disable-isl-version-check
                            disable check for isl version
    --enable-lto            enable link time optimization support
*************** Optional Packages:
*** 1572,1585 ****
                            --with-mpc-lib=PATH/lib
    --with-mpc-include=PATH specify directory for installed MPC include files
    --with-mpc-lib=PATH     specify directory for the installed MPC library
-   --with-mpfr-dir=PATH    this option has been REMOVED
    --with-mpfr=PATH        specify prefix directory for installed MPFR package.
                            Equivalent to --with-mpfr-include=PATH/include plus
                            --with-mpfr-lib=PATH/lib
    --with-mpfr-include=PATH
                            specify directory for installed MPFR include files
    --with-mpfr-lib=PATH    specify directory for the installed MPFR library
-   --with-gmp-dir=PATH     this option has been REMOVED
    --with-gmp=PATH         specify prefix directory for the installed GMP
                            package. Equivalent to
                            --with-gmp-include=PATH/include plus
--- 1586,1597 ----
*************** target_libraries="target-libgcc \
*** 2814,2820 ****
  		target-newlib \
  		target-libgomp \
  		target-liboffloadmic \
- 		target-libhsail-rt \
  		target-libatomic \
  		target-libitm \
  		target-libstdc++-v3 \
--- 2826,2831 ----
*************** else
*** 2989,2994 ****
--- 3000,3013 ----
  fi
  
  
+ # Check whether --enable-offload-defaulted was given.
+ if test "${enable_offload_defaulted+set}" = set; then :
+   enableval=$enable_offload_defaulted; enable_offload_defaulted=$enableval
+ else
+   enable_offload_defaulted=
+ fi
+ 
+ 
  # Handle --enable-gold, --enable-ld.
  # --disable-gold [--enable-ld]
  #     Build only ld.  Default option.
*************** case "${ENABLE_GOLD}" in
*** 3037,3043 ****
        # Check for target supported by gold.
        case "${target}" in
          i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
!         | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*)
  	  configdirs="$configdirs gold"
  	  if test x${ENABLE_GOLD} = xdefault; then
  	    default_ld=gold
--- 3056,3062 ----
        # Check for target supported by gold.
        case "${target}" in
          i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
!         | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-* | loongarch*-*-*)
  	  configdirs="$configdirs gold"
  	  if test x${ENABLE_GOLD} = xdefault; then
  	    default_ld=gold
*************** $as_echo "yes" >&6; }
*** 3326,3354 ****
      fi
  fi
  
- 
- # Disable libhsail-rt on unsupported systems.
- if test -d ${srcdir}/libhsail-rt; then
-     if test x$enable_libhsail_rt = x; then
-         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libhsail-rt support" >&5
- $as_echo_n "checking for libhsail-rt support... " >&6; }
-         if (srcdir=${srcdir}/libhsail-rt; \
-                 . ${srcdir}/configure.tgt; \
-                 test -n "$UNSUPPORTED")
-         then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
- $as_echo "no" >&6; }
-             unsupported_languages="$unsupported_languages brig"
-             # This implicitly disables also target-libhsail-rt as it won't
-             # get added to the build without BRIG FE.
-         else
-             { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
- $as_echo "yes" >&6; }
-         fi
-     fi
- fi
- 
- 
  # Disable libquadmath for some systems.
  case "${target}" in
    avr-*-*)
--- 3345,3350 ----
*************** case "${target}" in
*** 3390,3396 ****
  esac
  
  # Disable libstdc++-v3 for some systems.
! # Allow user to override this if they pass --enable-libstdc++-v3
  if test "${ENABLE_LIBSTDCXX}" = "default" ; then
    case "${target}" in
      *-*-vxworks*)
--- 3386,3392 ----
  esac
  
  # Disable libstdc++-v3 for some systems.
! # Allow user to override this if they pass --enable-libstdcxx
  if test "${ENABLE_LIBSTDCXX}" = "default" ; then
    case "${target}" in
      *-*-vxworks*)
*************** case "${target}" in
*** 3646,3651 ****
--- 3642,3650 ----
    i[3456789]86-*-*)
      libgloss_dir=i386
      ;;
+   loongarch*-*-*)
+     libgloss_dir=loongarch
+     ;;
    m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
      libgloss_dir=m68hc11
      ;;
*************** case "${target}" in
*** 3768,3774 ****
    *-*-dragonfly*)
      ;;
    *-*-freebsd*)
!     if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
  	&& ! test -d ${srcdir}/gmp \
  	&& test -f /usr/local/include/gmp.h; then
        with_gmp=/usr/local
--- 3767,3773 ----
    *-*-dragonfly*)
      ;;
    *-*-freebsd*)
!     if test "x$with_gmp" = x \
  	&& ! test -d ${srcdir}/gmp \
  	&& test -f /usr/local/include/gmp.h; then
        with_gmp=/usr/local
*************** case "${target}" in
*** 4030,4035 ****
--- 4029,4039 ----
    wasm32-*-*)
      noconfigdirs="$noconfigdirs ld"
      ;;
+   loongarch*-*-linux*)
+     ;;
+   loongarch*-*-*)
+     noconfigdirs="$noconfigdirs gprof"
+     ;;
  esac
  
  # If we aren't building newlib, then don't build libgloss, since libgloss
*************** if test "${build}" != "${host}" ; then
*** 4100,4105 ****
--- 4104,4110 ----
    AR_FOR_BUILD=${AR_FOR_BUILD-ar}
    AS_FOR_BUILD=${AS_FOR_BUILD-as}
    CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
+   CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CC_FOR_BUILD) -E}"
    CXX_FOR_BUILD=${CXX_FOR_BUILD-g++}
    DSYMUTIL_FOR_BUILD=${DSYMUTIL_FOR_BUILD-dsymutil}
    GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran}
*************** ac_compile='$CC -c $CFLAGS $CPPFLAGS con
*** 4917,4922 ****
--- 4922,5104 ----
  ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
  ac_compiler_gnu=$ac_cv_c_compiler_gnu
  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
+ $as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
+ if ${ac_cv_prog_cc_c99+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_cv_prog_cc_c99=no
+ ac_save_CC=$CC
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <stdarg.h>
+ #include <stdbool.h>
+ #include <stdlib.h>
+ #include <wchar.h>
+ #include <stdio.h>
+ 
+ // Check varargs macros.  These examples are taken from C99 6.10.3.5.
+ #define debug(...) fprintf (stderr, __VA_ARGS__)
+ #define showlist(...) puts (#__VA_ARGS__)
+ #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+ static void
+ test_varargs_macros (void)
+ {
+   int x = 1234;
+   int y = 5678;
+   debug ("Flag");
+   debug ("X = %d\n", x);
+   showlist (The first, second, and third items.);
+   report (x>y, "x is %d but y is %d", x, y);
+ }
+ 
+ // Check long long types.
+ #define BIG64 18446744073709551615ull
+ #define BIG32 4294967295ul
+ #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+ #if !BIG_OK
+   your preprocessor is broken;
+ #endif
+ #if BIG_OK
+ #else
+   your preprocessor is broken;
+ #endif
+ static long long int bignum = -9223372036854775807LL;
+ static unsigned long long int ubignum = BIG64;
+ 
+ struct incomplete_array
+ {
+   int datasize;
+   double data[];
+ };
+ 
+ struct named_init {
+   int number;
+   const wchar_t *name;
+   double average;
+ };
+ 
+ typedef const char *ccp;
+ 
+ static inline int
+ test_restrict (ccp restrict text)
+ {
+   // See if C++-style comments work.
+   // Iterate through items via the restricted pointer.
+   // Also check for declarations in for loops.
+   for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+     continue;
+   return 0;
+ }
+ 
+ // Check varargs and va_copy.
+ static void
+ test_varargs (const char *format, ...)
+ {
+   va_list args;
+   va_start (args, format);
+   va_list args_copy;
+   va_copy (args_copy, args);
+ 
+   const char *str;
+   int number;
+   float fnumber;
+ 
+   while (*format)
+     {
+       switch (*format++)
+ 	{
+ 	case 's': // string
+ 	  str = va_arg (args_copy, const char *);
+ 	  break;
+ 	case 'd': // int
+ 	  number = va_arg (args_copy, int);
+ 	  break;
+ 	case 'f': // float
+ 	  fnumber = va_arg (args_copy, double);
+ 	  break;
+ 	default:
+ 	  break;
+ 	}
+     }
+   va_end (args_copy);
+   va_end (args);
+ }
+ 
+ int
+ main ()
+ {
+ 
+   // Check bool.
+   _Bool success = false;
+ 
+   // Check restrict.
+   if (test_restrict ("String literal") == 0)
+     success = true;
+   char *restrict newvar = "Another string";
+ 
+   // Check varargs.
+   test_varargs ("s, d' f .", "string", 65, 34.234);
+   test_varargs_macros ();
+ 
+   // Check flexible array members.
+   struct incomplete_array *ia =
+     malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+   ia->datasize = 10;
+   for (int i = 0; i < ia->datasize; ++i)
+     ia->data[i] = i * 1.234;
+ 
+   // Check named initializers.
+   struct named_init ni = {
+     .number = 34,
+     .name = L"Test wide string",
+     .average = 543.34343,
+   };
+ 
+   ni.number = 58;
+ 
+   int dynamic_array[ni.number];
+   dynamic_array[ni.number - 1] = 543;
+ 
+   // work around unused variable warnings
+   return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+ 	  || dynamic_array[ni.number - 1] != 543);
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
+ do
+   CC="$ac_save_CC $ac_arg"
+   if ac_fn_c_try_compile "$LINENO"; then :
+   ac_cv_prog_cc_c99=$ac_arg
+ fi
+ rm -f core conftest.err conftest.$ac_objext
+   test "x$ac_cv_prog_cc_c99" != "xno" && break
+ done
+ rm -f conftest.$ac_ext
+ CC=$ac_save_CC
+ 
+ fi
+ # AC_CACHE_VAL
+ case "x$ac_cv_prog_cc_c99" in
+   x)
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+ $as_echo "none needed" >&6; } ;;
+   xno)
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+ $as_echo "unsupported" >&6; } ;;
+   *)
+     CC="$CC $ac_cv_prog_cc_c99"
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+ $as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
+ esac
+ if test "x$ac_cv_prog_cc_c99" != xno; then :
+ 
+ fi
+ 
+ 
  ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
*************** else
*** 5455,5460 ****
--- 5637,5761 ----
    have_gnat=no
  fi
  
+ 
+ 
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}gdc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}gdc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_GDC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$GDC"; then
+   ac_cv_prog_GDC="$GDC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_GDC="${ac_tool_prefix}gdc"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+ fi
+ fi
+ GDC=$ac_cv_prog_GDC
+ if test -n "$GDC"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDC" >&5
+ $as_echo "$GDC" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+ 
+ 
+ fi
+ if test -z "$ac_cv_prog_GDC"; then
+   ac_ct_GDC=$GDC
+   # Extract the first word of "gdc", so it can be a program name with args.
+ set dummy gdc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if ${ac_cv_prog_ac_ct_GDC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_GDC"; then
+   ac_cv_prog_ac_ct_GDC="$ac_ct_GDC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_exec_ext in '' $ac_executable_extensions; do
+   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+     ac_cv_prog_ac_ct_GDC="gdc"
+     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+     break 2
+   fi
+ done
+   done
+ IFS=$as_save_IFS
+ 
+ fi
+ fi
+ ac_ct_GDC=$ac_cv_prog_ac_ct_GDC
+ if test -n "$ac_ct_GDC"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GDC" >&5
+ $as_echo "$ac_ct_GDC" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ fi
+ 
+   if test "x$ac_ct_GDC" = x; then
+     GDC="no"
+   else
+     case $cross_compiling:$ac_tool_warned in
+ yes:)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ ac_tool_warned=yes ;;
+ esac
+     GDC=$ac_ct_GDC
+   fi
+ else
+   GDC="$ac_cv_prog_GDC"
+ fi
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the D compiler works" >&5
+ $as_echo_n "checking whether the D compiler works... " >&6; }
+ if ${acx_cv_d_compiler_works+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat >conftest.d <<EOF
+ module conftest; int main() { return 0; }
+ EOF
+ acx_cv_d_compiler_works=no
+ if test "x$GDC" != xno; then
+   errors=`(${GDC} -c conftest.d) 2>&1 || echo failure`
+   if test x"$errors" = x && test -f conftest.$ac_objext; then
+     acx_cv_d_compiler_works=yes
+   fi
+   rm -f conftest.*
+ fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_d_compiler_works" >&5
+ $as_echo "$acx_cv_d_compiler_works" >&6; }
+ if test "x$GDC" != xno && test x$acx_cv_d_compiler_works != xno; then
+   have_gdc=yes
+ else
+   have_gdc=no
+ fi
+ 
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to compare bootstrapped objects" >&5
  $as_echo_n "checking how to compare bootstrapped objects... " >&6; }
  if ${gcc_cv_prog_cmp_skip+:} false; then :
*************** $as_echo "#define HAVE_CXX11_FOR_BUILD 1
*** 7538,7543 ****
--- 7839,7929 ----
    fi
  fi
  
+ # Check whether --enable-pgo-build was given.
+ if test "${enable_pgo_build+set}" = set; then :
+   enableval=$enable_pgo_build; enable_pgo_build=$enableval
+ else
+   enable_pgo_build=no
+ fi
+ 
+ 
+ # Issue errors and warnings for invalid/strange PGO build combinations.
+ case "$have_compiler:$host:$target:$enable_pgo_build" in
+   *:*:*:no) ;;
+ 
+   # Allow the PGO build only if we aren't building a compiler and
+   # we are in a native configuration.
+   no:$build:$build:yes | no:$build:$build:lto) ;;
+ 
+   # Disallow the PGO bootstrap if we are building a compiler.
+   yes:*:*:yes | yes:*:*:lto)
+     as_fn_error $? "cannot perform the PGO bootstrap when building a compiler" "$LINENO" 5 ;;
+ 
+   *)
+     as_fn_error $? "invalid option for --enable-pgo-build" "$LINENO" 5
+     ;;
+ esac
+ 
+ if test "$enable_pgo_build" != "no"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fprofile-generate" >&5
+ $as_echo_n "checking whether the compiler supports -fprofile-generate... " >&6; }
+   old_CFLAGS="$CFLAGS"
+   PGO_BUILD_GEN_CFLAGS="-fprofile-generate"
+   CFLAGS="$CFLAGS $PGO_BUILD_CFLAGS"
+ 
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ int foo;
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+ 
+ else
+   PGO_BUILD_GEN_CFLAGS=
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   CFLAGS="$old_CFLAGS"
+   if test -n "$PGO_BUILD_GEN_CFLAGS"; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+     PGO_BUILD_USE_CFLAGS="-fprofile-use"
+   else
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+     as_fn_error $? "cannot perform the PGO build without -fprofile-generate" "$LINENO" 5
+   fi
+ 
+   if test "$enable_pgo_build" = "lto"; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -flto=jobserver -ffat-lto-objects" >&5
+ $as_echo_n "checking whether the compiler supports -flto=jobserver -ffat-lto-objects... " >&6; }
+     old_CFLAGS="$CFLAGS"
+     PGO_BUILD_LTO_CFLAGS="-flto=jobserver -ffat-lto-objects"
+     CFLAGS="$CFLAGS $PGO_BUILD_LTO_CFLAGS"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ int foo;
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+ 
+ else
+   PGO_BUILD_LTO_CFLAGS=
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     CFLAGS="$old_CFLAGS"
+     if test -n "$PGO_BUILD_LTO_CFLAGS"; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: LTO is disabled for the PGO build" >&5
+ $as_echo "$as_me: WARNING: LTO is disabled for the PGO build" >&2;}
+     fi
+   fi
+ fi
+ 
+ 
+ 
+ 
  # Used for setting $lt_cv_objdir
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
  $as_echo_n "checking for objdir... " >&6; }
*************** fi
*** 7617,7630 ****
  # Specify a location for mpfr
  # check for this first so it ends up on the link line before gmp.
  
- # Check whether --with-mpfr-dir was given.
- if test "${with_mpfr_dir+set}" = set; then :
-   withval=$with_mpfr_dir; as_fn_error $? "The --with-mpfr-dir=PATH option has been removed.
- Use --with-mpfr=PATH or --with-mpfr-include=PATH plus --with-mpfr-lib=PATH" "$LINENO" 5
- fi
- 
- 
- 
  # Check whether --with-mpfr was given.
  if test "${with_mpfr+set}" = set; then :
    withval=$with_mpfr;
--- 8003,8008 ----
*************** fi
*** 7670,7683 ****
  
  # Specify a location for gmp
  
- # Check whether --with-gmp-dir was given.
- if test "${with_gmp_dir+set}" = set; then :
-   withval=$with_gmp_dir; as_fn_error $? "The --with-gmp-dir=PATH option has been removed.
- Use --with-gmp=PATH or --with-gmp-include=PATH plus --with-gmp-lib=PATH" "$LINENO" 5
- fi
- 
- 
- 
  # Check whether --with-gmp was given.
  if test "${with_gmp+set}" = set; then :
    withval=$with_gmp;
--- 8048,8053 ----
*************** if test -d ${srcdir}/gcc && test "x$have
*** 7727,7734 ****
    # Check for the recommended and required versions of GMP.
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the correct version of gmp.h" >&5
  $as_echo_n "checking for the correct version of gmp.h... " >&6; }
! 
! cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  #include "gmp.h"
  int
--- 8097,8103 ----
    # Check for the recommended and required versions of GMP.
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the correct version of gmp.h" >&5
  $as_echo_n "checking for the correct version of gmp.h... " >&6; }
!   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  #include "gmp.h"
  int
*************** $as_echo "$as_me: WARNING: GNAT is requi
*** 8509,8514 ****
--- 8878,8900 ----
              ;;
          esac
  
+         # Disable D if no preexisting GDC is available.
+         case ${add_this_lang}:${language}:${have_gdc} in
+           yes:d:no)
+             # Specifically requested language; tell them.
+             as_fn_error $? "GDC is required to build $language" "$LINENO" 5
+            ;;
+           all:d:no)
+             { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GDC is required to build $language" >&5
+ $as_echo "$as_me: WARNING: GDC is required to build $language" >&2;}
+             add_this_lang=unsupported
+             ;;
+           *:d:no)
+             # Silently disable.
+             add_this_lang=unsupported
+             ;;
+         esac
+ 
          # Disable jit if -enable-host-shared not specified
          # but not if building for Mingw. All code in Windows
          # is position independent code (PIC).
*************** $as_echo "$as_me: WARNING: ${language} n
*** 8578,8584 ****
  		  *) stage1_languages="${stage1_languages}${language}," ;;
  		esac
  		# We need to bootstrap any supporting libraries.
! 		bootstrap_target_libs="${bootstrap_target_libs}${target_libs},"
  		;;
  	    esac
  	    ;;
--- 8964,8970 ----
  		  *) stage1_languages="${stage1_languages}${language}," ;;
  		esac
  		# We need to bootstrap any supporting libraries.
! 		bootstrap_target_libs=`echo "${bootstrap_target_libs}${target_libs}," | sed "s/ /,/g"`
  		;;
  	    esac
  	    ;;
*************** case ,${enable_languages}, in
*** 8719,8724 ****
--- 9105,9120 ----
      ;;
  esac
  
+ # If gcc/ is not in the source tree then we'll not be building a
+ # target compiler, assume in that case we don't want to build any
+ # target libraries or tools.
+ #
+ # This was added primarily for the benefit for binutils-gdb who reuse
+ # this configure script, but don't always have target tools available.
+ if test ! -d ${srcdir}/gcc; then
+    skipdirs="${skipdirs} ${target_configdirs}"
+ fi
+ 
  # Remove the entries in $skipdirs and $noconfigdirs from $configdirs,
  # $build_configdirs and $target_configdirs.
  # If we have the source for $noconfigdirs entries, add them to $notsupp.
*************** if echo " ${target_configdirs} " | grep
*** 9337,9342 ****
--- 9733,9748 ----
    bootstrap_target_libs=${bootstrap_target_libs}target-libvtv,
  fi
  
+ # If we are building libatomic and the list of enabled languages includes the
+ # D frontend, bootstrap it.
+ if echo " ${target_configdirs} " | grep " libatomic " > /dev/null 2>&1; then
+   case ,${enable_languages}, in
+     *,d,*)
+       bootstrap_target_libs=${bootstrap_target_libs}target-libatomic,
+       ;;
+   esac
+ fi
+ 
  # Determine whether gdb needs tk/tcl or not.
  # Use 'maybe' since enable_gdbtk might be true even if tk isn't available
  # and in that case we want gdb to be built without tk.  Ugh!
*************** case " ${configdirs} " in
*** 9375,9380 ****
--- 9781,9789 ----
    *\ gdbserver\ *)
      configdirs="${configdirs} gnulib gdbsupport"
      ;;
+   *\ sim\ *)
+     configdirs="${configdirs} gnulib"
+     ;;
  esac
  
  # Strip out unwanted targets.
*************** extrasub_target="$extrasub_target
*** 9466,9471 ****
--- 9875,9886 ----
  /^@unless /d
  /^@endunless /d"
  
+ if test "$enable_pgo_build" != "no"; then
+   extrasub_build="$extrasub_build
+ /^@if pgo-build\$/d
+ /^@endif pgo-build\$/d"
+ fi
+ 
  # Create the serialization dependencies.  This uses a temporary file.
  
  # Check whether --enable-serial-configure was given.
*************** esac
*** 9831,9836 ****
--- 10246,10252 ----
  # our build compiler if desired.
  if test x"${build}" = x"${host}" ; then
    CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
+   CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${CPPFLAGS}}
    CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}}
    LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}}
  fi
*************** fi
*** 12427,12432 ****
--- 12843,12850 ----
  
  
  
+ 
+ 
  
  
  
diff -Nrcpad gcc-11.3.0/configure.ac gcc-12.1.0/configure.ac
*** gcc-11.3.0/configure.ac	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/configure.ac	Fri May  6 07:30:56 2022
***************
*** 1,6 ****
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
  #   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
! #   2014, 2015, 2016, 2019 Free Software Foundation, Inc.
  #
  # This file is free software; you can redistribute it and/or modify it
  # under the terms of the GNU General Public License as published by
--- 1,6 ----
  #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
  #   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
! #   2014, 2015, 2016, 2019, 2022 Free Software Foundation, Inc.
  #
  # This file is free software; you can redistribute it and/or modify it
  # under the terms of the GNU General Public License as published by
*************** target_libraries="target-libgcc \
*** 151,157 ****
  		target-newlib \
  		target-libgomp \
  		target-liboffloadmic \
- 		target-libhsail-rt \
  		target-libatomic \
  		target-libitm \
  		target-libstdc++-v3 \
--- 151,156 ----
*************** AC_ARG_ENABLE(offload-targets,
*** 300,305 ****
--- 299,312 ----
    fi
  ], [enable_offload_targets=])
  
+ AC_ARG_ENABLE(offload-defaulted,
+ [AS_HELP_STRING([--enable-offload-defaulted]
+ 		[If enabled, configured but not installed offload compilers and
+ 		libgomp plugins are silently ignored.  Useful for distribution
+ 		compilers where those are in separate optional packages.])],
+ [enable_offload_defaulted=$enableval],
+ [enable_offload_defaulted=])
+ 
  # Handle --enable-gold, --enable-ld.
  # --disable-gold [--enable-ld]
  #     Build only ld.  Default option.
*************** case "${ENABLE_GOLD}" in
*** 346,352 ****
        # Check for target supported by gold.
        case "${target}" in
          i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
!         | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*)
  	  configdirs="$configdirs gold"
  	  if test x${ENABLE_GOLD} = xdefault; then
  	    default_ld=gold
--- 353,359 ----
        # Check for target supported by gold.
        case "${target}" in
          i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
!         | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-* | loongarch*-*-*)
  	  configdirs="$configdirs gold"
  	  if test x${ENABLE_GOLD} = xdefault; then
  	    default_ld=gold
*************** if test -d ${srcdir}/libvtv; then
*** 601,626 ****
      fi
  fi
  
- 
- # Disable libhsail-rt on unsupported systems.
- if test -d ${srcdir}/libhsail-rt; then
-     if test x$enable_libhsail_rt = x; then
-         AC_MSG_CHECKING([for libhsail-rt support])
-         if (srcdir=${srcdir}/libhsail-rt; \
-                 . ${srcdir}/configure.tgt; \
-                 test -n "$UNSUPPORTED")
-         then
-             AC_MSG_RESULT([no])
-             unsupported_languages="$unsupported_languages brig"
-             # This implicitly disables also target-libhsail-rt as it won't
-             # get added to the build without BRIG FE.
-         else
-             AC_MSG_RESULT([yes])
-         fi
-     fi
- fi
- 
- 
  # Disable libquadmath for some systems.
  case "${target}" in
    avr-*-*)
--- 608,613 ----
*************** case "${target}" in
*** 662,668 ****
  esac
  
  # Disable libstdc++-v3 for some systems.
! # Allow user to override this if they pass --enable-libstdc++-v3
  if test "${ENABLE_LIBSTDCXX}" = "default" ; then
    case "${target}" in
      *-*-vxworks*)
--- 649,655 ----
  esac
  
  # Disable libstdc++-v3 for some systems.
! # Allow user to override this if they pass --enable-libstdcxx
  if test "${ENABLE_LIBSTDCXX}" = "default" ; then
    case "${target}" in
      *-*-vxworks*)
*************** case "${target}" in
*** 912,917 ****
--- 899,907 ----
    i[[3456789]]86-*-*)
      libgloss_dir=i386
      ;;
+   loongarch*-*-*)
+     libgloss_dir=loongarch
+     ;;
    m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
      libgloss_dir=m68hc11
      ;;
*************** case "${target}" in
*** 1034,1040 ****
    *-*-dragonfly*)
      ;;
    *-*-freebsd*)
!     if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
  	&& ! test -d ${srcdir}/gmp \
  	&& test -f /usr/local/include/gmp.h; then
        with_gmp=/usr/local
--- 1024,1030 ----
    *-*-dragonfly*)
      ;;
    *-*-freebsd*)
!     if test "x$with_gmp" = x \
  	&& ! test -d ${srcdir}/gmp \
  	&& test -f /usr/local/include/gmp.h; then
        with_gmp=/usr/local
*************** case "${target}" in
*** 1296,1301 ****
--- 1286,1296 ----
    wasm32-*-*)
      noconfigdirs="$noconfigdirs ld"
      ;;
+   loongarch*-*-linux*)
+     ;;
+   loongarch*-*-*)
+     noconfigdirs="$noconfigdirs gprof"
+     ;;
  esac
  
  # If we aren't building newlib, then don't build libgloss, since libgloss
*************** if test "${build}" != "${host}" ; then
*** 1347,1352 ****
--- 1342,1348 ----
    AR_FOR_BUILD=${AR_FOR_BUILD-ar}
    AS_FOR_BUILD=${AS_FOR_BUILD-as}
    CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
+   CPP_FOR_BUILD="${CPP_FOR_BUILD-\$(CC_FOR_BUILD) -E}"
    CXX_FOR_BUILD=${CXX_FOR_BUILD-g++}
    DSYMUTIL_FOR_BUILD=${DSYMUTIL_FOR_BUILD-dsymutil}
    GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran}
*************** else
*** 1375,1381 ****
    WINDMC_FOR_BUILD="\$(WINDMC)"
  fi
  
! AC_PROG_CC
  AC_PROG_CXX
  
  # We must set the default linker to the linker used by gcc for the correct
--- 1371,1377 ----
    WINDMC_FOR_BUILD="\$(WINDMC)"
  fi
  
! AC_PROG_CC_C99
  AC_PROG_CXX
  
  # We must set the default linker to the linker used by gcc for the correct
*************** int main() {}])],
*** 1418,1423 ****
--- 1414,1420 ----
  fi
  
  ACX_PROG_GNAT
+ ACX_PROG_GDC
  ACX_PROG_CMP_IGNORE_INITIAL
  
  AC_ARG_ENABLE([bootstrap],
*************** elif test "$have_compiler" = yes; then
*** 1476,1481 ****
--- 1473,1537 ----
    fi
  fi
  
+ AC_ARG_ENABLE([pgo-build],
+ [AS_HELP_STRING([--enable-pgo-build[[=lto]]],
+ 		[enable the PGO build])],
+ [enable_pgo_build=$enableval],
+ [enable_pgo_build=no])
+ 
+ # Issue errors and warnings for invalid/strange PGO build combinations.
+ case "$have_compiler:$host:$target:$enable_pgo_build" in
+   *:*:*:no) ;;
+ 
+   # Allow the PGO build only if we aren't building a compiler and
+   # we are in a native configuration.
+   no:$build:$build:yes | no:$build:$build:lto) ;;
+ 
+   # Disallow the PGO bootstrap if we are building a compiler.
+   yes:*:*:yes | yes:*:*:lto)
+     AC_MSG_ERROR([cannot perform the PGO bootstrap when building a compiler]) ;;
+ 
+   *)
+     AC_MSG_ERROR([invalid option for --enable-pgo-build])
+     ;;
+ esac
+ 
+ if test "$enable_pgo_build" != "no"; then
+   AC_MSG_CHECKING([whether the compiler supports -fprofile-generate])
+   old_CFLAGS="$CFLAGS"
+   PGO_BUILD_GEN_CFLAGS="-fprofile-generate"
+   CFLAGS="$CFLAGS $PGO_BUILD_CFLAGS"
+   AC_COMPILE_IFELSE([AC_LANG_SOURCE([int foo;])],,
+ 		    [PGO_BUILD_GEN_CFLAGS=])
+   CFLAGS="$old_CFLAGS"
+   if test -n "$PGO_BUILD_GEN_CFLAGS"; then
+     AC_MSG_RESULT([yes])
+     PGO_BUILD_USE_CFLAGS="-fprofile-use"
+   else
+     AC_MSG_RESULT([no])
+     AC_MSG_ERROR([cannot perform the PGO build without -fprofile-generate])
+   fi
+ 
+   if test "$enable_pgo_build" = "lto"; then
+     AC_MSG_CHECKING([whether the compiler supports -flto=jobserver -ffat-lto-objects])
+     old_CFLAGS="$CFLAGS"
+     PGO_BUILD_LTO_CFLAGS="-flto=jobserver -ffat-lto-objects"
+     CFLAGS="$CFLAGS $PGO_BUILD_LTO_CFLAGS"
+     AC_COMPILE_IFELSE([AC_LANG_SOURCE([int foo;])],,
+ 		      [PGO_BUILD_LTO_CFLAGS=])
+     CFLAGS="$old_CFLAGS"
+     if test -n "$PGO_BUILD_LTO_CFLAGS"; then
+       AC_MSG_RESULT([yes])
+     else
+       AC_MSG_RESULT([no])
+       AC_MSG_WARN([LTO is disabled for the PGO build])
+     fi
+   fi
+ fi
+ AC_SUBST(PGO_BUILD_GEN_CFLAGS)
+ AC_SUBST(PGO_BUILD_USE_CFLAGS)
+ AC_SUBST(PGO_BUILD_LTO_CFLAGS)
+ 
  # Used for setting $lt_cv_objdir
  _LT_CHECK_OBJDIR
  
*************** fi
*** 1520,1530 ****
  
  # Specify a location for mpfr
  # check for this first so it ends up on the link line before gmp.
- AC_ARG_WITH(mpfr-dir,
- [AS_HELP_STRING([--with-mpfr-dir=PATH], [this option has been REMOVED])],
- [AC_MSG_ERROR([The --with-mpfr-dir=PATH option has been removed.
- Use --with-mpfr=PATH or --with-mpfr-include=PATH plus --with-mpfr-lib=PATH])])
- 
  AC_ARG_WITH(mpfr,
  [AS_HELP_STRING([--with-mpfr=PATH],
  		[specify prefix directory for installed MPFR package.
--- 1576,1581 ----
*************** Building GCC with MPFR in the source tre
*** 1564,1574 ****
  fi
  
  # Specify a location for gmp
- AC_ARG_WITH(gmp-dir,
- [AS_HELP_STRING([--with-gmp-dir=PATH], [this option has been REMOVED])],
- [AC_MSG_ERROR([The --with-gmp-dir=PATH option has been removed.
- Use --with-gmp=PATH or --with-gmp-include=PATH plus --with-gmp-lib=PATH])])
- 
  AC_ARG_WITH(gmp,
  [AS_HELP_STRING([--with-gmp=PATH],
  		[specify prefix directory for the installed GMP package.
--- 1615,1620 ----
*************** if test -d ${srcdir}/gcc; then
*** 2099,2104 ****
--- 2145,2166 ----
              ;;
          esac
  
+         # Disable D if no preexisting GDC is available.
+         case ${add_this_lang}:${language}:${have_gdc} in
+           yes:d:no)
+             # Specifically requested language; tell them.
+             AC_MSG_ERROR([GDC is required to build $language])
+            ;;
+           all:d:no)
+             AC_MSG_WARN([GDC is required to build $language])
+             add_this_lang=unsupported
+             ;;
+           *:d:no)
+             # Silently disable.
+             add_this_lang=unsupported
+             ;;
+         esac
+ 
          # Disable jit if -enable-host-shared not specified
          # but not if building for Mingw. All code in Windows
          # is position independent code (PIC).
*************** directories, to avoid imposing the perfo
*** 2166,2172 ****
  		  *) stage1_languages="${stage1_languages}${language}," ;;
  		esac
  		# We need to bootstrap any supporting libraries.
! 		bootstrap_target_libs="${bootstrap_target_libs}${target_libs},"
  		;;
  	    esac
  	    ;;
--- 2228,2234 ----
  		  *) stage1_languages="${stage1_languages}${language}," ;;
  		esac
  		# We need to bootstrap any supporting libraries.
! 		bootstrap_target_libs=`echo "${bootstrap_target_libs}${target_libs}," | sed "s/ /,/g"`
  		;;
  	    esac
  	    ;;
*************** case ,${enable_languages}, in
*** 2298,2303 ****
--- 2360,2375 ----
      ;;
  esac
  
+ # If gcc/ is not in the source tree then we'll not be building a
+ # target compiler, assume in that case we don't want to build any
+ # target libraries or tools.
+ #
+ # This was added primarily for the benefit for binutils-gdb who reuse
+ # this configure script, but don't always have target tools available.
+ if test ! -d ${srcdir}/gcc; then
+    skipdirs="${skipdirs} ${target_configdirs}"
+ fi
+ 
  # Remove the entries in $skipdirs and $noconfigdirs from $configdirs,
  # $build_configdirs and $target_configdirs.
  # If we have the source for $noconfigdirs entries, add them to $notsupp.
*************** if echo " ${target_configdirs} " | grep
*** 2839,2844 ****
--- 2911,2926 ----
    bootstrap_target_libs=${bootstrap_target_libs}target-libvtv,
  fi
  
+ # If we are building libatomic and the list of enabled languages includes the
+ # D frontend, bootstrap it.
+ if echo " ${target_configdirs} " | grep " libatomic " > /dev/null 2>&1; then
+   case ,${enable_languages}, in
+     *,d,*)
+       bootstrap_target_libs=${bootstrap_target_libs}target-libatomic,
+       ;;
+   esac
+ fi
+ 
  # Determine whether gdb needs tk/tcl or not.
  # Use 'maybe' since enable_gdbtk might be true even if tk isn't available
  # and in that case we want gdb to be built without tk.  Ugh!
*************** case " ${configdirs} " in
*** 2877,2882 ****
--- 2959,2967 ----
    *\ gdbserver\ *)
      configdirs="${configdirs} gnulib gdbsupport"
      ;;
+   *\ sim\ *)
+     configdirs="${configdirs} gnulib"
+     ;;
  esac
  
  # Strip out unwanted targets.
*************** extrasub_target="$extrasub_target
*** 2968,2973 ****
--- 3053,3064 ----
  /^@unless /d
  /^@endunless /d"
  
+ if test "$enable_pgo_build" != "no"; then
+   extrasub_build="$extrasub_build
+ /^@if pgo-build\$/d
+ /^@endif pgo-build\$/d"
+ fi
+ 
  # Create the serialization dependencies.  This uses a temporary file.
  
  AC_ARG_ENABLE([serial-configure],
*************** esac
*** 3336,3341 ****
--- 3427,3433 ----
  # our build compiler if desired.
  if test x"${build}" = x"${host}" ; then
    CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
+   CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${CPPFLAGS}}
    CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}}
    LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}}
  fi
*************** AC_SUBST(AR_FOR_BUILD)
*** 3402,3407 ****
--- 3494,3501 ----
  AC_SUBST(AS_FOR_BUILD)
  AC_SUBST(CC_FOR_BUILD)
  AC_SUBST(CFLAGS_FOR_BUILD)
+ AC_SUBST(CPP_FOR_BUILD)
+ AC_SUBST(CPPFLAGS_FOR_BUILD)
  AC_SUBST(CXXFLAGS_FOR_BUILD)
  AC_SUBST(CXX_FOR_BUILD)
  AC_SUBST(DLLTOOL_FOR_BUILD)
*************** AC_SUBST(CC)
*** 3501,3506 ****
--- 3595,3602 ----
  AC_SUBST(CXX)
  AC_SUBST(CFLAGS)
  AC_SUBST(CXXFLAGS)
+ AC_SUBST(GDC)
+ AC_SUBST(GDCFLAGS)
  
  # Target tools.
  AC_ARG_WITH([build-time-tools], 
diff -Nrcpad gcc-11.3.0/contrib/ChangeLog gcc-12.1.0/contrib/ChangeLog
*** gcc-11.3.0/contrib/ChangeLog	Thu Apr 21 07:59:16 2022
--- gcc-12.1.0/contrib/ChangeLog	Fri May  6 07:30:56 2022
***************
*** 1,49 ****
! 2022-04-21  Release Manager
  
! 	* GCC 11.3.0 released.
  
  2022-01-27  Martin Liska  <mliska@suse.cz>
  
! 	* gcc-git-customization.sh: Sync from master.
  	* git-descr.sh: New file.
  	* git-undescr.sh: New file.
  
  2022-01-24  Martin Liska  <mliska@suse.cz>
  
! 	* gcc-changelog/git_commit.py: Sync from master.
! 	* gcc-changelog/test_email.py: Likewise.
! 	* gcc-changelog/test_patches.txt: Likewise.
  
  2022-01-19  Martin Liska  <mliska@suse.cz>
  
! 	* git-backport.py: Sync from master.
! 	* git-commit-mklog.py: Likewise.
  	* git-fix-changelog.py: New file.
  
  2022-01-17  Martin Liska  <mliska@suse.cz>
  
- 	Backported from master:
- 	2022-01-17  Martin Liska  <mliska@suse.cz>
- 
  	* git-backport.py: Support renaming of .cc files.
  
! 2021-11-08  Martin Liska  <mliska@suse.cz>
  
! 	* gcc-changelog/git_check_commit.py: Sync from master.
! 	* gcc-changelog/git_commit.py: Likewise.
! 	* gcc-changelog/git_email.py: Likewise.
! 	* gcc-changelog/git_update_version.py: Likewise.
! 	* gcc-changelog/test_email.py: Likewise.
  	* gcc-changelog/test_patches.txt: Likewise.
  
! 2021-07-28  Release Manager
  
! 	* GCC 11.2.0 released.
  
! 2021-06-23  Martin Liska  <mliska@suse.cz>
  
! 	* mklog.py: Sync.
! 	* test_mklog.py: Likewise.
  
  2021-06-23  Martin Liska  <mliska@suse.cz>
  
--- 1,288 ----
! 2022-05-06  Release Manager
  
! 	* GCC 12.1.0 released.
! 
! 2022-04-25  Martin Liska  <mliska@suse.cz>
! 
! 	* filter-clang-warnings.py: Filter out
! 	-Wc++20-attribute-extensions in lex.cc.
! 
! 2022-04-25  Martin Liska  <mliska@suse.cz>
! 
! 	* filter-clang-warnings.py: Filter out
! 	-Wbitwise-instead-of-logical.
! 
! 2022-04-04  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_update_version.py: Ignore the revision.
! 
! 2022-03-31  Jakub Jelinek  <jakub@redhat.com>
! 	    Joseph Myers  <joseph@codesourcery.com>
! 
! 	PR other/105114
! 	* gcc_update: Fix up spelling of
! 	gcc/config/loongarch/genopts/loongarch-strings dependency.
! 
! 2022-03-29  Chenghua Xu  <xuchenghua@loongson.cn>
! 	    Lulu Cheng  <chenglulu@loongson.cn>
! 
! 	* config-list.mk: Add LoongArch triplet.
! 
! 2022-03-29  Chenghua Xu  <xuchenghua@loongson.cn>
! 	    Lulu Cheng  <chenglulu@loongson.cn>
! 
! 	* gcc_update (files_and_dependencies): Add
! 	  config/loongarch/loongarch.opt and config/loongarch/loongarch-str.h.
! 
! 2022-03-28  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_commit.py: Match trailing dot literally.
! 
! 2022-03-28  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_commit.py: Make the parsing stricter.
! 
! 2022-03-26  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* gcc-changelog/git_update_version.py: Add
! 	3ab5c8cd03d92bf4ec41e351820349d92fbc40c4 to ignored commits.
! 
! 2022-03-10  Jonathan Wakely  <jwakely@redhat.com>
! 
! 	PR other/102664
! 	* gcc-git-customization.sh: Fix non-portable commands.
! 
! 2022-03-10  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR other/102664
! 	* git-descr.sh: Replace all [1-9] occurrences with [0-9].
! 	* git-undescr.sh: Likewise.
! 
! 2022-03-09  Jonathan Wakely  <jwakely@redhat.com>
! 
! 	PR other/102664
! 	* git-descr.sh: Use portable sed commands.
! 	* git-undescr.sh: Likewise.
! 
! 2022-03-08  Jonathan Wakely  <jwakely@redhat.com>
! 
! 	PR other/102664
! 	* git-descr.sh: Use portable form of expr match.
! 
! 2022-01-31  Martin Liska  <mliska@suse.cz>
! 
! 	* analyze_brprob.py: Support more formatted predict.def file.
! 	* analyze_brprob_spec.py: Improve output and documentation.
  
  2022-01-27  Martin Liska  <mliska@suse.cz>
  
! 	* git-undescr.sh: Support full output of git-descr.sh.
! 
! 2022-01-27  Martin Liska  <mliska@suse.cz>
! 	    Martin Jambor  <mjambor@suse.cz>
! 
  	* git-descr.sh: New file.
  	* git-undescr.sh: New file.
+ 	Support optional arguments --long, --short and default
+ 	to 14 characters of git hash.
+ 	* gcc-git-customization.sh: Use the created files.
  
  2022-01-24  Martin Liska  <mliska@suse.cz>
  
! 	* gcc-changelog/git_commit.py: New files in toplev must
! 	be explicitly marked as "New file".
! 	* gcc-changelog/test_email.py: Test.
! 	* gcc-changelog/test_patches.txt: Add test.
! 
! 2022-01-23  Martin Liska  <mliska@suse.cz>
! 
! 	* filter-clang-warnings.py: Filter out one another warning
! 	for sse.md.
  
  2022-01-19  Martin Liska  <mliska@suse.cz>
  
! 	* check_GNU_style_lib.py: Skip Python files.
! 
! 2022-01-19  Martin Liska  <mliska@suse.cz>
! 
! 	* git-backport.py: Use it.
  	* git-fix-changelog.py: New file.
+ 	* gcc-git-customization.sh: Add new alias git gcc-fix-changelog.
  
  2022-01-17  Martin Liska  <mliska@suse.cz>
  
  	* git-backport.py: Support renaming of .cc files.
  
! 2022-01-17  Martin Liska  <mliska@suse.cz>
  
! 	* filter-clang-warnings.py: Rename .c names to .cc.
! 	* gcc_update: Likewise.
! 	* paranoia.cc: Likewise.
! 
! 2022-01-17  Martin Liska  <mliska@suse.cz>
! 
! 	* maintainers-verify.sh: Removed.
! 
! 2022-01-13  Martin Liska  <mliska@suse.cz>
! 
! 	* git-backport.py: Simplify the script as pre-auto-ChangeLog era
! 	is 14 months old.
! 
! 2022-01-11  Martin Liska  <mliska@suse.cz>
! 
! 	* check-MAINTAINERS.py: Use sys.argv[1] as path to MAINTAINERS.
! 
! 2022-01-11  Martin Liska  <mliska@suse.cz>
! 
! 	* check-MAINTAINERS.py: New file.
! 
! 2022-01-03  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* update-copyright.py: Add University of Illinois as external author.
! 
! 2021-12-16  Xionghu Luo  <luoxhu@linux.ibm.com>
! 
! 	* analyze_brprob_spec.py: Add verbose argument.
! 
! 2021-12-06  Martin Liska  <mliska@suse.cz>
! 
! 	* filter-clang-warnings.py: Filter out one warning.
! 
! 2021-11-24  Tobias Burnus  <tobias@codesourcery.com>
! 
! 	* download_prerequisites: Update to gmp-6.2.1, mpfr-4.1.0,
! 	mpc-1.2.1 and isl-0.24.
! 	* prerequisites.md5: Update hash.
! 	* prerequisites.sha512: Likewise.
! 
! 2021-11-23  Martin Liska  <mliska@suse.cz>
! 
! 	* filter-clang-warnings.py: Filter -Wc++20-extensions as it does
! 	not respect proper attribute detection.
! 
! 2021-11-23  Martin Liska  <mliska@suse.cz>
! 
! 	* check-params-in-docs.py: Support @itemx in param documentation
! 	and support multi-line documentation for parameters.
! 
! 2021-11-08  Thomas Schwinge  <thomas@codesourcery.com>
! 
! 	* update-copyright.py (class BadYear): Derive from 'Exception'.
! 
! 2021-11-05  Bernhard Reutner-Fischer  <aldot@gcc.gnu.org>
! 
! 	* testsuite-management/validate_failures.py: 2to3
! 
! 2021-11-04  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_check_commit.py: Add -v option.
! 	* gcc-changelog/git_commit.py: Print verbose diff for wrong
! 	filename.
! 
! 2021-11-02  Martin Liska  <mliska@suse.cz>
! 
! 	* check-internal-format-escaping.py: Fix flake8 errors.
! 
! 2021-11-01  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* unicode/utf8-dump.py: New file.
! 
! 2021-10-20  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	* gcc-changelog/git_commit.py (ignored_prefixes): Add libffi/.
! 
! 2021-10-18  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_commit.py: Update location of
! 	'bad parentheses wrapping'.
! 	* gcc-changelog/test_email.py: Test it.
! 
! 2021-10-02  Martin Liska  <mliska@suse.cz>
! 
! 	* filter-clang-warnings.py: Filter out -Wtautological-compare
! 	for the file.
! 
! 2021-09-20  Richard Biener  <rguenther@suse.de>
! 
! 	* config-list.mk: --enable-obsolete for hppa2.0-hpux10.1 and
! 	hppa2.0-hpux11.9.
! 
! 2021-09-15  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_commit.py: Add FIXME note.
! 
! 2021-09-15  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_commit.py: Check commit email.
! 	* gcc-changelog/test_email.py: Add new test.
  	* gcc-changelog/test_patches.txt: Likewise.
  
! 2021-09-15  Richard Biener  <rguenther@suse.de>
  
! 	* config-list.mk: Remove vax-openbsd.
  
! 2021-09-15  Richard Biener  <rguenther@suse.de>
  
! 	* config-list.mk: Remove m68k-openbsd.
! 
! 2021-09-13  Andrew Pinski  <apinski@marvell.com>
! 
! 	* config-list.mk: Remove m32r-linux and m32rle-linux
! 	from the list.
! 
! 2021-09-13  Jan-Benedict Glaw  <jbglaw@lug-owl.de>
! 
! 	* config-list.mk (LIST): --enable-obsolete for cr16-elf.
! 
! 2021-09-06  Serge Belyshev  <belyshev@depni.sinp.msu.ru>
! 
! 	* gcc_update: Derive human readable name for HEAD using git describe
! 	like "git gcc-descr" with short commit hash.  Drop "revision" from
! 	gcc/REVISION.
! 
! 2021-08-30  Andrew Pinski  <apinski@marvell.com>
! 
! 	* download_prerequisites (md5_check): Replace == inside
! 	test with = to be more portable.
! 
! 2021-08-26  Martin Liska  <mliska@suse.cz>
! 
! 	* mklog.py: Use file.{source,target}_file for proper rename
! 	handling.
! 
! 2021-08-24  Andrew Pinski  <apinski@marvell.com>
! 
! 	PR other/82704
! 	* download_prerequisites: Fix issues with --md5 and
! 	--sha512 options.
! 
! 2021-08-18  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-git-customization.sh: Wrap $@ in quotes.
! 	* git-commit-mklog.py: Add new argument --co.
! 	* mklog.py: Skip the Co-Authored-By lines.
! 
! 2021-08-10  Martin Liska  <mliska@suse.cz>
! 
! 	* mklog.py: Support additional PRs without PR prefix.
! 
! 2021-08-03  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_update_version.py: Ignore problematic
! 	  commit.
! 
! 2021-07-20  Richard Earnshaw  <rearnsha@arm.com>
! 
! 	* vimrc (textwidth): Change non-gitcommit length to 79.
! 
! 2021-07-02  Eugene Rozenfeld  <erozen@microsoft.com>
! 
! 	* gen_autofdo_event.py: handle stepping, non-working PEBS
! 
! 2021-06-28  Martin Liska  <mliska@suse.cz>
! 
! 	* mklog.py: Handle correctly long lines.
! 	* test_mklog.py: Test it.
  
  2021-06-23  Martin Liska  <mliska@suse.cz>
  
***************
*** 51,92 ****
  	* git-commit-mklog.py: New file.
  	* prepare-commit-msg: Support GCC_MKLOG_ARGS.
  
! 2021-05-18  Jonathan Wakely  <jwakely@redhat.com>
  
! 	Backported from master:
! 	2021-05-18  Jonathan Wakely  <jwakely@redhat.com>
  
  	* gcc-changelog/git_email.py: Remove use of non-strict mode.
  
  2021-05-17  Richard Biener  <rguenther@suse.de>
  
- 	Backported from master:
- 	2021-05-17  Richard Biener  <rguenther@suse.de>
- 
  	* download_prerequisites: Update mpfr version to 3.1.6.
  	* prerequisites.md5: Update.
  	* prerequisites.sha512: Likewise.
  
  2021-05-14  Martin Liska  <mliska@suse.cz>
  
! 	* gcc-changelog/git_check_commit.py: Sync from master.
! 	* gcc-changelog/git_commit.py: Likewise.
  	* gcc-changelog/git_email.py: Likewise.
  	* gcc-changelog/git_repository.py: Likewise.
- 	* gcc-changelog/git_update_version.py: Likewise.
  	* gcc-changelog/test_email.py: Likewise.
! 	* gcc-changelog/test_patches.txt: Likewise.
  
! 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
  	* gennews (files): Add files for GCC 10 and GCC 11.
  
! 2021-04-27  Release Manager
  
! 	* GCC 11.1.0 released.
  
  2021-04-12  Martin Liska  <mliska@suse.cz>
  
--- 290,459 ----
  	* git-commit-mklog.py: New file.
  	* prepare-commit-msg: Support GCC_MKLOG_ARGS.
  
! 2021-06-22  Martin Liska  <mliska@suse.cz>
  
! 	* mklog.py: Fix flake8 issue.
! 
! 2021-06-21  Tobias Burnus  <tobias@codesourcery.com>
! 	    Martin Sebor  <msebor@redhat.com>
! 
! 	* mklog.py (bugzilla_url): Fetch also component.
! 	(pr_filename_regex): New.
! 	(get_pr_titles): Update PR string with correct format and component.
! 	(generate_changelog): Take additional PRs; extract PR from the
! 	filename.
! 	(__main__): Add -b/--pr-numbers argument.
! 	* test_mklog.py (EXPECTED4): Update to expect a PR for the new file.
! 
! 2021-06-17  Jason Merrill  <jason@redhat.com>
! 
! 	* mklog.py: Add an initial component: [PRnnnnn] line when
! 	we have a PR.
! 
! 2021-06-13  Tobias Burnus  <tobias@codesourcery.com>
! 
! 	* gcc-changelog/git_commit.py (pr_regex): Add ?P<pr> for group('pr').
! 	(subject_pr_regex, subject_pr2_regex): New.
! 	(GitInfo.__init__, GitCommit.parse_changelog): Check subject PRs.
! 	* gcc-changelog/git_email.py (SUBJECT_PREFIX, subject_patch_regex): New.
! 	(GitEmail.__init__): Parse 'Subject:' and pass it to GitInfo.
! 	* gcc-changelog/test_email.py (test_pr_only_in_subject,
! 	test_wrong_pr_comp_in_subject, test_copyright_years): New.
! 	* gcc-changelog/test_patches.txt (0030-PR-c-92746, pr-check1.patch):
! 	Update to avoid triggering the new check.
! 	(0001-rs6000-Support-doubleword, pr-wrong-comp.patch,
! 	copyright-years.patch): New.
! 
! 2021-06-11  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_update_version.py: Ignore commit that
! 	violates rules and was somehow pushed.
! 
! 2021-05-25  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* update-copyright.py: Add c++tools.
! 
! 2021-05-24  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_commit.py: Add note that ChangeLog entries
! 	are added automatically.
! 	* gcc-changelog/test_email.py: Update test.
! 
! 2021-05-18  Jonathan Wakely  <jwakely@redhat.com>
  
  	* gcc-changelog/git_email.py: Remove use of non-strict mode.
  
  2021-05-17  Richard Biener  <rguenther@suse.de>
  
  	* download_prerequisites: Update mpfr version to 3.1.6.
  	* prerequisites.md5: Update.
  	* prerequisites.sha512: Likewise.
  
+ 2021-05-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	Revert:
+ 	2021-05-14  Martin Liska  <mliska@suse.cz>
+ 
+ 	* download_prerequisites: Use version 4.1.0.
+ 
  2021-05-14  Martin Liska  <mliska@suse.cz>
  
! 	* download_prerequisites: Use version 4.1.0.
! 
! 2021-05-14  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* gcc-changelog/git_update_version.py: Remove releases/gcc-8 from
! 	active_refs.
! 
! 2021-05-14  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_commit.py: Support Co-Authored-By before
! 	a first ChangeLog entry.
! 
! 2021-05-13  Martin Liska  <mliska@suse.cz>
! 
! 	* mklog.py: Put PR entries before all ChangeLog entries
! 	(will be added to all ChangeLog locations by Daily bump script).
! 	* test_mklog.py: Test the new behavior.
! 
! 2021-05-12  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_commit.py: Simplify needle lookup.
! 	* gcc-changelog/git_update_version.py: Pass ref_name to
! 	parse_git_revisions.
! 
! 2021-05-11  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc_update: Remove libhsail-rt folder.
! 	* update-copyright.py: Likewise.
! 
! 2021-05-11  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_check_commit.py: Remove --non-strict-mode.
! 	* gcc-changelog/git_commit.py: Remove strict mode.
  	* gcc-changelog/git_email.py: Likewise.
  	* gcc-changelog/git_repository.py: Likewise.
  	* gcc-changelog/test_email.py: Likewise.
! 	* gcc-changelog/test_patches.txt: Update patches so that they
! 	don't contain a ChangeLog file changes.
  
! 2021-05-11  Martin Liska  <mliska@suse.cz>
  
! 	* gcc-changelog/git_commit.py: Remove ChangeLog locations
! 	based on ref_name.
! 	* gcc-changelog/git_repository.py: Likewise.
! 
! 2021-05-10  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_email.py: Remove newlines when --help
! 	is used.
! 
! 2021-05-10  Tobias Burnus  <tobias@codesourcery.com>
! 
! 	* gcc-changelog/git_check_commit.py (__Main__): State in --help
! 	the default value for 'revisions'.
! 	* gcc-changelog/git_email.py (show_help): Add.
! 	(__main__): Handle -h and --help.
! 
! 2021-05-10  Tobias Burnus  <tobias@codesourcery.com>
! 
! 	* gcc-changelog/git_commit.py (Error.__repr__): Add space after the colon.
! 	(GitCommit.check_mentioned_files): Check whether the same file has been
! 	specified multiple times.
! 	* gcc-changelog/test_email.py (TestGccChangelog.test_multi_same_file): New.
! 	* gcc-changelog/test_patches.txt (0001-OpenMP-Fix-SIMT): New test.
! 
! 2021-05-10  Martin Liska  <mliska@suse.cz>
! 
! 	Revert:
! 	2021-05-10  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_commit.py: Remove components that will be
! 	removed.
! 
! 2021-05-10  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc_update: Start using reload.c instead of version.c.
! 
! 2021-05-10  Martin Liska  <mliska@suse.cz>
! 
! 	* gcc-changelog/git_commit.py: Remove components that will be
! 	removed.
! 
! 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
  	* gennews (files): Add files for GCC 10 and GCC 11.
  
! 2021-04-22  David Edelsohn  <dje.gcc@gmail.com>
  
! 	* config-list.mk: Remove rs6000-ibm-aix6.1.
! 	Rename rs6000-ibm-aix7.1 to powerpc-ibm-aix7.1.
! 	Add powerpc-ibm-aix7.2.
! 
! 2021-04-20  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* gcc-changelog/git_update_version.py (active_refs): Add
! 	releases/gcc-11.
  
  2021-04-12  Martin Liska  <mliska@suse.cz>
  
diff -Nrcpad gcc-11.3.0/contrib/analyze_brprob.py gcc-12.1.0/contrib/analyze_brprob.py
*** gcc-11.3.0/contrib/analyze_brprob.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/analyze_brprob.py	Fri May  6 07:30:56 2022
*************** class PredictDefFile:
*** 101,108 ****
  
          p = None
          modified_lines = []
!         for l in lines:
              if l.startswith('DEF_PREDICTOR'):
                  m = re.match('.*"(.*)".*', l)
                  p = m.group(1)
              elif l == '':
--- 101,111 ----
  
          p = None
          modified_lines = []
!         for i, l in enumerate(lines):
              if l.startswith('DEF_PREDICTOR'):
+                 next_line = lines[i + 1]
+                 if l.endswith(','):
+                     l += next_line
                  m = re.match('.*"(.*)".*', l)
                  p = m.group(1)
              elif l == '':
diff -Nrcpad gcc-11.3.0/contrib/analyze_brprob_spec.py gcc-12.1.0/contrib/analyze_brprob_spec.py
*** gcc-11.3.0/contrib/analyze_brprob_spec.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/analyze_brprob_spec.py	Fri May  6 07:30:56 2022
*************** script_location = os.path.realpath(__fil
*** 26,36 ****
  
  parser = argparse.ArgumentParser()
  parser.add_argument('location', metavar = 'dump_file',
!     help = 'Location with SPEC benchmarks')
  parser.add_argument('-s', '--sorting', dest = 'sorting',
      choices = ['branches', 'branch-hitrate', 'hitrate', 'coverage', 'name'],
      default = 'branches')
  parser.add_argument('-d', '--def-file', help = 'path to predict.def')
  
  args = parser.parse_args()
  
--- 26,37 ----
  
  parser = argparse.ArgumentParser()
  parser.add_argument('location', metavar = 'dump_file',
!     help = 'Sub-folder with SPEC benchmarks (e.g. Programming/cpu2017/benchspec/CPU)')
  parser.add_argument('-s', '--sorting', dest = 'sorting',
      choices = ['branches', 'branch-hitrate', 'hitrate', 'coverage', 'name'],
      default = 'branches')
  parser.add_argument('-d', '--def-file', help = 'path to predict.def')
+ parser.add_argument('-v', '--verbose', action = 'store_true', help = 'Print verbose informations')
  
  args = parser.parse_args()
  
*************** for b in sorted(benchmarks):
*** 53,64 ****
      temp.close()
  
      print()
!     print(b)
      sys.stdout.flush()
      p = [os.path.join(os.path.dirname(script_location), 'analyze_brprob.py'),
          temp.name, '--sorting', args.sorting]
!     if args.def_file != None:
          p += ['-d', args.def_file]
  
      p = subprocess.check_call(p)
      sys.stdout.flush()
--- 54,67 ----
      temp.close()
  
      print()
!     print(f' {b} '.center(160, '='))
      sys.stdout.flush()
      p = [os.path.join(os.path.dirname(script_location), 'analyze_brprob.py'),
          temp.name, '--sorting', args.sorting]
!     if args.def_file:
          p += ['-d', args.def_file]
+     if args.verbose:
+         p.append('-v')
  
      p = subprocess.check_call(p)
      sys.stdout.flush()
diff -Nrcpad gcc-11.3.0/contrib/check-MAINTAINERS.py gcc-12.1.0/contrib/check-MAINTAINERS.py
*** gcc-11.3.0/contrib/check-MAINTAINERS.py	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/contrib/check-MAINTAINERS.py	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,113 ----
+ #!/usr/bin/env python3
+ 
+ # Copyright (C) 2022 Free Software Foundation, Inc.
+ #
+ # This file is part of GCC.
+ #
+ # GCC is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 3, or (at your option)
+ # any later version.
+ #
+ # GCC is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with GCC; see the file COPYING.  If not, write to
+ # the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ # Boston, MA 02110-1301, USA.
+ 
+ # Check that names in the file are sorted
+ # alphabetically by surname.
+ 
+ import locale
+ import sys
+ from difflib import ndiff
+ from itertools import dropwhile, takewhile
+ 
+ import unidecode
+ 
+ locale.setlocale(locale.LC_ALL, 'en_US.utf8')
+ 
+ exit_code = 0
+ 
+ if len(sys.argv) != 2:
+     print('Usage: ./check-MAINTAINERS.py path-to/MAINTAINERS')
+     sys.exit(1)
+ 
+ 
+ def sort_by_surname(line):
+     name = line.split('\t')[0]
+     parts = name.split()
+     surname = parts[-1]
+ 
+     # Special-case some names
+     if name == 'Stefan Schulze Frielinghaus':
+         surname = parts[1]
+     elif name == 'Kris Van Hees':
+         surname = parts[1]
+     elif surname == "d'Humieres":
+         surname = 'Humieres'
+ 
+     # Remove accents
+     return (unidecode.unidecode(surname), line)
+ 
+ 
+ def has_tab(line):
+     return '\t' in line
+ 
+ 
+ def is_empty(line):
+     return line
+ 
+ 
+ def check_group(name, lines):
+     global exit_code
+ 
+     for line in lines:
+         if line.startswith(' '):
+             print(f'Line should not start with space: "{line}"')
+             exit_code = 2
+ 
+     lines = [line + '\n' for line in lines]
+     sorted_lines = sorted(lines, key=sort_by_surname)
+     if lines != sorted_lines:
+         exit_code = 1
+         diff = ndiff(lines, sorted_lines)
+         print(f'Wrong order for {name}:\n')
+         print(''.join(diff))
+     else:
+         print(f'{name} are fine!')
+ 
+ 
+ lines = open(sys.argv[1]).read().splitlines()
+ 
+ needle = 'Global Reviewers'
+ lines = list(dropwhile(lambda x: x.strip() != needle, lines))
+ lines = lines[2:]
+ 
+ chunk = list(takewhile(is_empty, lines))
+ check_group(needle, chunk)
+ 
+ needle = 'Write After Approval'
+ lines = list(dropwhile(lambda x: needle not in x, lines))
+ lines = lines[2:]
+ 
+ chunk = list(takewhile(is_empty, lines))
+ check_group(needle, chunk)
+ 
+ needle = 'Bug database only accounts'
+ lines = list(dropwhile(lambda x: needle not in x, lines))
+ lines = lines[2:]
+ 
+ chunk = list(takewhile(is_empty, lines))
+ check_group(needle, chunk)
+ 
+ needle = 'Contributing under the DCO'
+ lines = list(dropwhile(lambda x: needle not in x, lines))[1:]
+ lines = list(dropwhile(lambda x: not has_tab(x), lines))
+ check_group(needle, lines)
+ 
+ sys.exit(exit_code)
diff -Nrcpad gcc-11.3.0/contrib/check-internal-format-escaping.py gcc-12.1.0/contrib/check-internal-format-escaping.py
*** gcc-11.3.0/contrib/check-internal-format-escaping.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/check-internal-format-escaping.py	Fri May  6 07:30:56 2022
*************** def lint_gcc_internal_format(msg: polib.
*** 66,72 ****
  
      def outside_quotes(m: Match[str]):
          before = msgid[:m.start(0)]
!         return before.count("%<") == before.count("%>")
  
      def lint_matching_placeholders():
          """
--- 66,72 ----
  
      def outside_quotes(m: Match[str]):
          before = msgid[:m.start(0)]
!         return before.count('%<') == before.count('%>')
  
      def lint_matching_placeholders():
          """
*************** def lint_gcc_internal_format(msg: polib.
*** 127,133 ****
          to separate the words.
          """
  
!         for match in re.finditer("(.?[a-zA-Z0-9])%<", msgid):
              if match.group(1) != '%s':
                  warn(msg,
                       'no-space-before-quote',
--- 127,133 ----
          to separate the words.
          """
  
!         for match in re.finditer('(.?[a-zA-Z0-9])%<', msgid):
              if match.group(1) != '%s':
                  warn(msg,
                       'no-space-before-quote',
*************** def lint_gcc_internal_format(msg: polib.
*** 143,149 ****
          * static_cast and the like (which are legitimate)
          """
  
!         for match in re.finditer("_", msgid):
              if outside_quotes(match):
                  warn(msg,
                       'underscore-outside-quotes',
--- 143,149 ----
          * static_cast and the like (which are legitimate)
          """
  
!         for match in re.finditer('_', msgid):
              if outside_quotes(match):
                  warn(msg,
                       'underscore-outside-quotes',
*************** def lint_gcc_internal_format(msg: polib.
*** 163,175 ****
                   'the term "may not" is ambiguous')
  
      def lint_unbalanced_quotes():
!         if msgid.count("%<") != msgid.count("%>"):
              warn(msg,
                   'unbalanced-quotes',
                   'unbalanced %< and %> quotes')
  
          if msg.translated():
!             if msg.msgstr.count("%<") != msg.msgstr.count("%>"):
                  warn(msg,
                       'unbalanced-quotes',
                       'unbalanced %< and %> quotes')
--- 163,175 ----
                   'the term "may not" is ambiguous')
  
      def lint_unbalanced_quotes():
!         if msgid.count('%<') != msgid.count('%>'):
              warn(msg,
                   'unbalanced-quotes',
                   'unbalanced %< and %> quotes')
  
          if msg.translated():
!             if msg.msgstr.count('%<') != msg.msgstr.count('%>'):
                  warn(msg,
                       'unbalanced-quotes',
                       'unbalanced %< and %> quotes')
diff -Nrcpad gcc-11.3.0/contrib/check-params-in-docs.py gcc-12.1.0/contrib/check-params-in-docs.py
*** gcc-11.3.0/contrib/check-params-in-docs.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/check-params-in-docs.py	Fri May  6 07:30:56 2022
*************** ignored = {'logical-op-non-short-circuit
*** 47,53 ****
  params = {}
  
  for line in open(args.params_output).readlines():
!     if line.startswith('  '):
          r = get_param_tuple(line)
          params[r[0]] = r[1]
  
--- 47,53 ----
  params = {}
  
  for line in open(args.params_output).readlines():
!     if line.startswith(' ' * 2) and not line.startswith(' ' * 8):
          r = get_param_tuple(line)
          params[r[0]] = r[1]
  
*************** texi = dropwhile(lambda x: 'item --param
*** 57,71 ****
  texi = takewhile(lambda x: '@node Instrumentation Options' not in x, texi)
  texi = list(texi)[1:]
  
! token = '@item '
! texi = [x[len(token):] for x in texi if x.startswith(token)]
  # skip digits
! texi = [x for x in texi if not x[0].isdigit()]
  # skip aarch64 params
! texi = [x for x in texi if not x.startswith('aarch64')]
! sorted_texi = sorted(texi)
  
! texi_set = set(texi) - ignored
  params_set = set(params.keys()) - ignored
  
  success = True
--- 57,76 ----
  texi = takewhile(lambda x: '@node Instrumentation Options' not in x, texi)
  texi = list(texi)[1:]
  
! texi_params = []
! for line in texi:
!     for token in ('@item ', '@itemx '):
!         if line.startswith(token):
!             texi_params.append(line[len(token):])
!             break
! 
  # skip digits
! texi_params = [x for x in texi_params if not x[0].isdigit()]
  # skip aarch64 params
! texi_params = [x for x in texi_params if not x.startswith('aarch64')]
! sorted_params = sorted(texi_params)
  
! texi_set = set(texi_params) - ignored
  params_set = set(params.keys()) - ignored
  
  success = True
*************** if len(missing):
*** 84,90 ****
          print()
      success = False
  
- if texi != sorted_texi:
-     print('WARNING: not sorted alphabetically!')
- 
  sys.exit(0 if success else 1)
--- 89,92 ----
diff -Nrcpad gcc-11.3.0/contrib/check_GNU_style_lib.py gcc-12.1.0/contrib/check_GNU_style_lib.py
*** gcc-11.3.0/contrib/check_GNU_style_lib.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/check_GNU_style_lib.py	Fri May  6 07:30:56 2022
*************** def check_GNU_style_file(file, file_enco
*** 276,282 ****
      for pfile in patch.added_files + patch.modified_files:
          t = pfile.target_file.lstrip('b/')
          # Skip testsuite files
!         if 'testsuite' in t:
              continue
  
          for hunk in pfile:
--- 276,282 ----
      for pfile in patch.added_files + patch.modified_files:
          t = pfile.target_file.lstrip('b/')
          # Skip testsuite files
!         if 'testsuite' in t or t.endswith('.py'):
              continue
  
          for hunk in pfile:
diff -Nrcpad gcc-11.3.0/contrib/config-list.mk gcc-12.1.0/contrib/config-list.mk
*** gcc-11.3.0/contrib/config-list.mk	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/config-list.mk	Fri May  6 07:30:56 2022
*************** LIST = aarch64-elf aarch64-linux-gnu aar
*** 40,52 ****
    arm-symbianelf avr-elf \
    bfin-elf bfin-uclinux bfin-linux-uclibc bfin-rtems bfin-openbsd \
    bpf-unknown-none \
!   c6x-elf c6x-uclinux cr16-elf cris-elf \
    csky-elf csky-linux-gnu \
    epiphany-elf epiphany-elfOPT-with-stack-offset=16 fido-elf \
    fr30-elf frv-elf frv-linux ft32-elf h8300-elf hppa-linux-gnu \
    hppa-linux-gnuOPT-enable-sjlj-exceptions=yes hppa64-linux-gnu \
!   hppa2.0-hpux10.1 hppa64-hpux11.3 \
!   hppa64-hpux11.0OPT-enable-sjlj-exceptions=yes hppa2.0-hpux11.9 \
    i686-pc-linux-gnu i686-apple-darwin i686-apple-darwin9 i686-apple-darwin10 \
    i486-freebsd4 i686-freebsd6 i686-kfreebsd-gnu \
    i686-netbsdelf9 \
--- 40,53 ----
    arm-symbianelf avr-elf \
    bfin-elf bfin-uclinux bfin-linux-uclibc bfin-rtems bfin-openbsd \
    bpf-unknown-none \
!   c6x-elf c6x-uclinux cr16-elfOPT-enable-obsolete cris-elf \
    csky-elf csky-linux-gnu \
    epiphany-elf epiphany-elfOPT-with-stack-offset=16 fido-elf \
    fr30-elf frv-elf frv-linux ft32-elf h8300-elf hppa-linux-gnu \
    hppa-linux-gnuOPT-enable-sjlj-exceptions=yes hppa64-linux-gnu \
!   hppa2.0-hpux10.1OPT-enable-obsolete hppa64-hpux11.3 \
!   hppa64-hpux11.0OPT-enable-sjlj-exceptions=yes \
!   hppa2.0-hpux11.9OPT-enable-obsolete \
    i686-pc-linux-gnu i686-apple-darwin i686-apple-darwin9 i686-apple-darwin10 \
    i486-freebsd4 i686-freebsd6 i686-kfreebsd-gnu \
    i686-netbsdelf9 \
*************** LIST = aarch64-elf aarch64-linux-gnu aar
*** 56,64 ****
    i686-wrs-vxworksae \
    i686-cygwinOPT-enable-threads=yes i686-mingw32crt ia64-elf \
    ia64-freebsd6 ia64-linux ia64-hpux ia64-hp-vms iq2000-elf lm32-elf \
!   lm32-rtems lm32-uclinux m32c-rtems m32c-elf m32r-elf m32rle-elf \
!   m32r-linux m32rle-linux m68k-elf m68k-netbsdelf \
!   m68k-openbsd m68k-uclinux m68k-linux m68k-rtems \
    mcore-elf microblaze-linux microblaze-elf \
    mips-netbsd \
    mips64el-st-linux-gnu mips64octeon-linux mipsisa64r2-linux \
--- 57,67 ----
    i686-wrs-vxworksae \
    i686-cygwinOPT-enable-threads=yes i686-mingw32crt ia64-elf \
    ia64-freebsd6 ia64-linux ia64-hpux ia64-hp-vms iq2000-elf lm32-elf \
!   lm32-rtems lm32-uclinux \
!   loongarch64-linux-gnuf64 loongarch64-linux-gnuf32 loongarch64-linux-gnusf \
!   m32c-rtems m32c-elf m32r-elf m32rle-elf \
!   m68k-elf m68k-netbsdelf \
!   m68k-uclinux m68k-linux m68k-rtems \
    mcore-elf microblaze-linux microblaze-elf \
    mips-netbsd \
    mips64el-st-linux-gnu mips64octeon-linux mipsisa64r2-linux \
*************** LIST = aarch64-elf aarch64-linux-gnu aar
*** 84,90 ****
    powerpcle-eabisim powerpcle-eabi \
    pru-elf \
    riscv32-unknown-linux-gnu riscv64-unknown-linux-gnu \
!   rs6000-ibm-aix6.1 rs6000-ibm-aix7.1 \
    rl78-elf rx-elf s390-linux-gnu s390x-linux-gnu s390x-ibm-tpf sh-elf \
    shle-linux sh-netbsdelf sh-superh-elf \
    sh-rtems sh-wrs-vxworks sparc-elf \
--- 87,93 ----
    powerpcle-eabisim powerpcle-eabi \
    pru-elf \
    riscv32-unknown-linux-gnu riscv64-unknown-linux-gnu \
!   powerpc-ibm-aix7.1 powerpc-ibm-aix7.2 \
    rl78-elf rx-elf s390-linux-gnu s390x-linux-gnu s390x-ibm-tpf sh-elf \
    shle-linux sh-netbsdelf sh-superh-elf \
    sh-rtems sh-wrs-vxworks sparc-elf \
*************** LIST = aarch64-elf aarch64-linux-gnu aar
*** 96,102 ****
    tilegx-linux-gnuOPT-enable-obsolete tilegxbe-linux-gnuOPT-enable-obsolete \
    tilepro-linux-gnuOPT-enable-obsolete \
    v850e1-elf v850e-elf v850-elf v850-rtems vax-linux-gnu \
!   vax-netbsdelf vax-openbsd visium-elf x86_64-apple-darwin \
    x86_64-pc-linux-gnuOPT-with-fpmath=avx \
    x86_64-elfOPT-with-fpmath=sse x86_64-freebsd6 x86_64-netbsd \
    x86_64-w64-mingw32 \
--- 99,105 ----
    tilegx-linux-gnuOPT-enable-obsolete tilegxbe-linux-gnuOPT-enable-obsolete \
    tilepro-linux-gnuOPT-enable-obsolete \
    v850e1-elf v850e-elf v850-elf v850-rtems vax-linux-gnu \
!   vax-netbsdelf visium-elf x86_64-apple-darwin \
    x86_64-pc-linux-gnuOPT-with-fpmath=avx \
    x86_64-elfOPT-with-fpmath=sse x86_64-freebsd6 x86_64-netbsd \
    x86_64-w64-mingw32 \
diff -Nrcpad gcc-11.3.0/contrib/download_prerequisites gcc-12.1.0/contrib/download_prerequisites
*** gcc-11.3.0/contrib/download_prerequisites	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/download_prerequisites	Fri May  6 07:30:56 2022
***************
*** 5,11 ****
  # Run this from the top level of the GCC source tree and the GCC build will do
  # the right thing.  Run it with the `--help` option for more information.
  #
! # (C) 2010-2016 Free Software Foundation
  #
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 5,11 ----
  # Run this from the top level of the GCC source tree and the GCC build will do
  # the right thing.  Run it with the `--help` option for more information.
  #
! # (C) 2010-2021 Free Software Foundation
  #
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** version='(unversioned)'
*** 27,36 ****
  # remember to also update the files `contrib/prerequisites.sha512` and
  # `contrib/prerequisites.md5` with the new checksums.
  
! gmp='gmp-6.1.0.tar.bz2'
! mpfr='mpfr-3.1.6.tar.bz2'
! mpc='mpc-1.0.3.tar.gz'
! isl='isl-0.18.tar.bz2'
  
  base_url='http://gcc.gnu.org/pub/gcc/infrastructure/'
  
--- 27,36 ----
  # remember to also update the files `contrib/prerequisites.sha512` and
  # `contrib/prerequisites.md5` with the new checksums.
  
! gmp='gmp-6.2.1.tar.bz2'
! mpfr='mpfr-4.1.0.tar.bz2'
! mpc='mpc-1.2.1.tar.gz'
! isl='isl-0.24.tar.bz2'
  
  base_url='http://gcc.gnu.org/pub/gcc/infrastructure/'
  
*************** verify=1
*** 46,63 ****
  force=0
  OS=$(uname)
  
- case $OS in
-   "Darwin"|"FreeBSD"|"DragonFly"|"AIX")
-     chksum='shasum -a 512 --check'
-   ;;
-   "OpenBSD")
-     chksum='sha512 -c'
-   ;;
-   *)
-     chksum='sha512sum -c'
-   ;;
- esac
- 
  if type wget > /dev/null ; then
    fetch='wget'
  else
--- 46,51 ----
*************** The following options are available:
*** 89,95 ****
  "
  
  versiontext="${program} ${version}
! Copyright (C) 2016 Free Software Foundation, Inc.
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  
--- 77,83 ----
  "
  
  versiontext="${program} ${version}
! Copyright (C) 2016-2021 Free Software Foundation, Inc.
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  
*************** do
*** 113,119 ****
  done
  unset arg
  
! # Emulate Linux's 'md5 --check' on macOS
  md5_check() {
    # Store the standard input: a line from contrib/prerequisites.md5:
    md5_checksum_line=$(cat -)
--- 101,107 ----
  done
  unset arg
  
! # Emulate Linux's 'md5sum --check' on macOS
  md5_check() {
    # Store the standard input: a line from contrib/prerequisites.md5:
    md5_checksum_line=$(cat -)
*************** md5_check() {
*** 125,131 ****
    md5_checksum_output=$(md5 -r "${file_to_check}")
    # Grab the text before the first space
    md5_checksum_detected="${md5_checksum_output%% *}"
!   [ "${md5_checksum_expected}" == "${md5_checksum_detected}" ] \
      || die "Cannot verify integrity of possibly corrupted file ${file_to_check}"
    echo "${file_to_check}: OK"
  }
--- 113,119 ----
    md5_checksum_output=$(md5 -r "${file_to_check}")
    # Grab the text before the first space
    md5_checksum_detected="${md5_checksum_output%% *}"
!   [ "${md5_checksum_expected}" = "${md5_checksum_detected}" ] \
      || die "Cannot verify integrity of possibly corrupted file ${file_to_check}"
    echo "${file_to_check}: OK"
  }
*************** do
*** 162,187 ****
                  verify=0
                  ;;
              --sha512)
-                 case $OS in
-                   "Darwin")
-                     chksum='shasum -a 512 --check'
-                   ;;
-                   *)
-                     chksum='sha512sum --check'
-                   ;;
-                 esac
                  chksum_extension='sha512'
                  verify=1
                  ;;
              --md5)
-                 case $OS in
-                   "Darwin")
-                     chksum='md5_check'
-                   ;;
-                   *)
-                     chksum='md5 --check'
-                   ;;
-                 esac
                  chksum_extension='md5'
                  verify=1
                  ;;
--- 150,159 ----
*************** done
*** 212,217 ****
--- 184,218 ----
  [ "x${argnext}" = x ] || die "Missing argument for option --${argnext}"
  unset arg argnext
  
+ case $chksum_extension in
+   sha512)
+     case $OS in
+       "Darwin"|"FreeBSD"|"DragonFly"|"AIX")
+         chksum='shasum -a 512 --check'
+       ;;
+       "OpenBSD")
+         chksum='sha512 -c'
+       ;;
+       *)
+         chksum='sha512sum -c'
+       ;;
+     esac
+   ;;
+   md5)
+     case $OS in
+       "Darwin")
+         chksum='md5_check'
+       ;;
+       *)
+         chksum='md5sum -c'
+       ;;
+     esac
+     ;;
+   *)
+     die "Unkown checksum $chksum_extension"
+   ;;
+ esac
+ 
  [ -e ./gcc/BASE-VER ]                                                         \
      || die "You must run this script in the top-level GCC source directory"
  
diff -Nrcpad gcc-11.3.0/contrib/filter-clang-warnings.py gcc-12.1.0/contrib/filter-clang-warnings.py
*** gcc-11.3.0/contrib/filter-clang-warnings.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/filter-clang-warnings.py	Fri May  6 07:30:56 2022
*************** def skip_warning(filename, message):
*** 38,55 ****
                   'when in C++ mode, this behavior is deprecated',
                   '-Wignored-attributes', '-Wgnu-zero-variadic-macro-arguments',
                   '-Wformat-security', '-Wundefined-internal',
!                  '-Wunknown-warning-option'],
!             'insn-modes.c': ['-Wshift-count-overflow'],
!             'insn-emit.c': ['-Wtautological-compare'],
!             'insn-attrtab.c': ['-Wparentheses-equality'],
!             'gimple-match.c': ['-Wunused-', '-Wtautological-compare'],
!             'generic-match.c': ['-Wunused-', '-Wtautological-compare'],
              'i386.md': ['-Wparentheses-equality', '-Wtautological-compare',
                          '-Wtautological-overlap-compare'],
!             'sse.md': ['-Wparentheses-equality', '-Wtautological-compare'],
!             'genautomata.c': ['-Wstring-plus-int'],
              'gfortran.texi': [''],
!             'libtool': ['']
      }
  
      for name, ignores in ignores.items():
--- 38,60 ----
                   'when in C++ mode, this behavior is deprecated',
                   '-Wignored-attributes', '-Wgnu-zero-variadic-macro-arguments',
                   '-Wformat-security', '-Wundefined-internal',
!                  '-Wunknown-warning-option', '-Wc++20-extensions',
!                  '-Wbitwise-instead-of-logical'],
!             'insn-modes.cc': ['-Wshift-count-overflow'],
!             'insn-emit.cc': ['-Wtautological-compare'],
!             'insn-attrtab.cc': ['-Wparentheses-equality'],
!             'gimple-match.cc': ['-Wunused-', '-Wtautological-compare'],
!             'generic-match.cc': ['-Wunused-', '-Wtautological-compare'],
              'i386.md': ['-Wparentheses-equality', '-Wtautological-compare',
                          '-Wtautological-overlap-compare'],
!             'sse.md': ['-Wparentheses-equality', '-Wtautological-compare',
!                        '-Wconstant-logical-operand'],
!             'mmx.md': ['-Wtautological-compare'],
!             'genautomata.cc': ['-Wstring-plus-int'],
!             'fold-const-call.cc': ['-Wreturn-type'],
              'gfortran.texi': [''],
!             'libtool': [''],
!             'lex.cc': ['-Wc++20-attribute-extensions'],
      }
  
      for name, ignores in ignores.items():
diff -Nrcpad gcc-11.3.0/contrib/gcc-changelog/git_commit.py gcc-12.1.0/contrib/gcc-changelog/git_commit.py
*** gcc-11.3.0/contrib/gcc-changelog/git_commit.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/gcc-changelog/git_commit.py	Fri May  6 07:30:56 2022
*************** star_prefix_regex = re.compile(r'\t\*(?P
*** 165,171 ****
  end_of_location_regex = re.compile(r'[\[<(:]')
  item_empty_regex = re.compile(r'\t(\* \S+ )?\(\S+\):\s*$')
  item_parenthesis_regex = re.compile(r'\t(\*|\(\S+\):)')
! revert_regex = re.compile(r'This reverts commit (?P<hash>\w+).$')
  cherry_pick_regex = re.compile(r'cherry picked from commit (?P<hash>\w+)')
  
  LINE_LIMIT = 100
--- 165,171 ----
  end_of_location_regex = re.compile(r'[\[<(:]')
  item_empty_regex = re.compile(r'\t(\* \S+ )?\(\S+\):\s*$')
  item_parenthesis_regex = re.compile(r'\t(\*|\(\S+\):)')
! revert_regex = re.compile(r'This reverts commit (?P<hash>[0-9a-f]+)\.$')
  cherry_pick_regex = re.compile(r'cherry picked from commit (?P<hash>\w+)')
  
  LINE_LIMIT = 100
*************** class GitCommit:
*** 317,323 ****
  
          # Identify first if the commit is a Revert commit
          for line in self.info.lines:
!             m = revert_regex.match(line)
              if m:
                  self.revert_commit = m.group('hash')
                  break
--- 317,323 ----
  
          # Identify first if the commit is a Revert commit
          for line in self.info.lines:
!             m = revert_regex.fullmatch(line)
              if m:
                  self.revert_commit = m.group('hash')
                  break
diff -Nrcpad gcc-11.3.0/contrib/gcc-changelog/git_update_version.py gcc-12.1.0/contrib/gcc-changelog/git_update_version.py
*** gcc-11.3.0/contrib/gcc-changelog/git_update_version.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/gcc-changelog/git_update_version.py	Fri May  6 07:30:56 2022
*************** current_timestamp = datetime.datetime.no
*** 30,36 ****
  IGNORED_COMMITS = (
          'c2be82058fb40f3ae891c68d185ff53e07f14f45',
          '04a040d907a83af54e0a98bdba5bfabc0ef4f700',
!         '2e96b5f14e4025691b57d2301d71aa6092ed44bc')
  
  
  def read_timestamp(path):
--- 30,38 ----
  IGNORED_COMMITS = (
          'c2be82058fb40f3ae891c68d185ff53e07f14f45',
          '04a040d907a83af54e0a98bdba5bfabc0ef4f700',
!         '2e96b5f14e4025691b57d2301d71aa6092ed44bc',
!         '3ab5c8cd03d92bf4ec41e351820349d92fbc40c4',
!         '86d8e0c0652ef5236a460b75c25e4f7093cc0651')
  
  
  def read_timestamp(path):
diff -Nrcpad gcc-11.3.0/contrib/gcc-git-customization.sh gcc-12.1.0/contrib/gcc-git-customization.sh
*** gcc-11.3.0/contrib/gcc-git-customization.sh	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/gcc-git-customization.sh	Fri May  6 07:30:56 2022
*************** ask () {
*** 7,13 ****
      question=$1
      default=$2
      var=$3
!     echo -n $question "["$default"]? "
      read answer
      if [ "x$answer" = "x" ]
      then
--- 7,13 ----
      question=$1
      default=$2
      var=$3
!     printf "%s [%s]? " "$question" "$default"
      read answer
      if [ "x$answer" = "x" ]
      then
*************** then
*** 110,116 ****
  	# This is a pure guess, but for many people it might be OK.
  	remote_id=$(whoami)
      else
! 	remote_id=$(echo $url | sed -r "s|^.*ssh://(.+)@gcc.gnu.org.*$|\1|")
  	if [ x$remote_id = x$url ]
  	then
  	    remote_id=$(whoami)
--- 110,116 ----
  	# This is a pure guess, but for many people it might be OK.
  	remote_id=$(whoami)
      else
! 	remote_id=$(echo $url | sed 's|^.*ssh://\(..*\)@gcc.gnu.org.*$|\1|')
  	if [ x$remote_id = x$url ]
  	then
  	    remote_id=$(whoami)
*************** then
*** 118,124 ****
      fi
  fi
  
! ask "Account name on gcc.gnu.org (for your personal branches area)" $remote_id remote_id
  git config "gcc-config.user" "$remote_id"
  
  old_pfx=$(git config --get "gcc-config.userpfx")
--- 118,124 ----
      fi
  fi
  
! ask "Account name on gcc.gnu.org (for your personal branches area)" "$remote_id" remote_id
  git config "gcc-config.user" "$remote_id"
  
  old_pfx=$(git config --get "gcc-config.userpfx")
*************** git config "gcc-config.userpfx" "$new_pf
*** 135,150 ****
  echo
  ask "Install prepare-commit-msg git hook for 'git commit-mklog' alias" yes dohook
  if [ "x$dohook" = xyes ]; then
!     hookdir=`git rev-parse --git-path hooks`
!     if [ -f "$hookdir/prepare-commit-msg" ]; then
! 	echo " Moving existing prepare-commit-msg hook to prepare-commit-msg.bak"
! 	mv "$hookdir/prepare-commit-msg" "$hookdir/prepare-commit-msg.bak"
      fi
-     install -c "`git rev-parse --show-toplevel`/contrib/prepare-commit-msg" "$hookdir"
  fi
  
  # Scan the existing settings to see if there are any we need to rewrite.
! vendors=$(git config --get-all "remote.${upstream}.fetch" "refs/vendors/" | sed -r "s:.*refs/vendors/([^/]+)/.*:\1:" | sort | uniq)
  url=$(git config --get "remote.${upstream}.url")
  pushurl=$(git config --get "remote.${upstream}.pushurl")
  for v in $vendors
--- 135,154 ----
  echo
  ask "Install prepare-commit-msg git hook for 'git commit-mklog' alias" yes dohook
  if [ "x$dohook" = xyes ]; then
!     hookdir=`git rev-parse --git-path hooks 2>/dev/null`
!     if [ $? -eq 0 ]; then
! 	if [ -f "$hookdir/prepare-commit-msg" ]; then
! 	    echo " Moving existing prepare-commit-msg hook to prepare-commit-msg.bak"
! 	    mv "$hookdir/prepare-commit-msg" "$hookdir/prepare-commit-msg.bak"
! 	fi
! 	install -c "`git rev-parse --show-toplevel`/contrib/prepare-commit-msg" "$hookdir"
!     else
! 	echo " `git --version` is too old, cannot find hooks dir"
      fi
  fi
  
  # Scan the existing settings to see if there are any we need to rewrite.
! vendors=$(git config --get-all "remote.${upstream}.fetch" "refs/vendors/" | sed 's:.*refs/vendors/\([^/][^/]*\)/.*:\1:' | sort | uniq)
  url=$(git config --get "remote.${upstream}.url")
  pushurl=$(git config --get "remote.${upstream}.pushurl")
  for v in $vendors
diff -Nrcpad gcc-11.3.0/contrib/gcc_update gcc-12.1.0/contrib/gcc_update
*** gcc-11.3.0/contrib/gcc_update	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/gcc_update	Fri May  6 07:30:56 2022
*************** gcc/config/arm/arm-tables.opt: gcc/confi
*** 86,97 ****
  gcc/config/c6x/c6x-tables.opt: gcc/config/c6x/c6x-isas.def gcc/config/c6x/genopt.sh
  gcc/config/c6x/c6x-sched.md: gcc/config/c6x/c6x-sched.md.in gcc/config/c6x/gensched.sh
  gcc/config/c6x/c6x-mult.md: gcc/config/c6x/c6x-mult.md.in gcc/config/c6x/genmult.sh
  gcc/config/m68k/m68k-tables.opt: gcc/config/m68k/m68k-devices.def gcc/config/m68k/m68k-isas.def gcc/config/m68k/m68k-microarchs.def gcc/config/m68k/genopt.sh
  gcc/config/mips/mips-tables.opt: gcc/config/mips/mips-cpus.def gcc/config/mips/genopt.sh
  gcc/config/rs6000/rs6000-tables.opt: gcc/config/rs6000/rs6000-cpus.def gcc/config/rs6000/genopt.sh
  gcc/config/rs6000/fusion.md: gcc/config/rs6000/genfusion.pl
! gcc/config/tilegx/mul-tables.c: gcc/config/tilepro/gen-mul-tables.cc
! gcc/config/tilepro/mul-tables.c: gcc/config/tilepro/gen-mul-tables.cc
  # And then, language-specific files
  gcc/cp/cfns.h: gcc/cp/cfns.gperf
  # testsuite
--- 86,99 ----
  gcc/config/c6x/c6x-tables.opt: gcc/config/c6x/c6x-isas.def gcc/config/c6x/genopt.sh
  gcc/config/c6x/c6x-sched.md: gcc/config/c6x/c6x-sched.md.in gcc/config/c6x/gensched.sh
  gcc/config/c6x/c6x-mult.md: gcc/config/c6x/c6x-mult.md.in gcc/config/c6x/genmult.sh
+ gcc/config/loongarch/loongarch-str.h: gcc/config/loongarch/genopts/genstr.sh gcc/config/loongarch/genopts/loongarch-strings
+ gcc/config/loongarch/loongarch.opt: gcc/config/loongarch/genopts/genstr.sh gcc/config/loongarch/genopts/loongarch.opt.in
  gcc/config/m68k/m68k-tables.opt: gcc/config/m68k/m68k-devices.def gcc/config/m68k/m68k-isas.def gcc/config/m68k/m68k-microarchs.def gcc/config/m68k/genopt.sh
  gcc/config/mips/mips-tables.opt: gcc/config/mips/mips-cpus.def gcc/config/mips/genopt.sh
  gcc/config/rs6000/rs6000-tables.opt: gcc/config/rs6000/rs6000-cpus.def gcc/config/rs6000/genopt.sh
  gcc/config/rs6000/fusion.md: gcc/config/rs6000/genfusion.pl
! gcc/config/tilegx/mul-tables.cc: gcc/config/tilepro/gen-mul-tables.cc
! gcc/config/tilepro/mul-tables.cc: gcc/config/tilepro/gen-mul-tables.cc
  # And then, language-specific files
  gcc/cp/cfns.h: gcc/cp/cfns.gperf
  # testsuite
*************** libgomp/testsuite/Makefile.in: libgomp/t
*** 141,150 ****
  libgomp/configure.ac: libgomp/plugin/configfrag.ac
  libgomp/configure: libgomp/configure.ac libgomp/aclocal.m4
  libgomp/config.h.in: libgomp/configure.ac libgomp/aclocal.m4
- libhsail-rt/aclocal.m4: libhsail-rt/configure.ac
- libhsail-rt/Makefile.in: libhsail-rt/Makefile.am libhsail-rt/aclocal.m4
- libhsail-rt/configure: libhsail-rt/configure.ac libhsail-rt/aclocal.m4
- libhsail-rt/target-config.h.in: libhsail-rt/configure.ac libhsail-rt/aclocal.m4
  libitm/aclocal.m4: libitm/configure.ac libitm/acinclude.m4
  libitm/Makefile.in: libitm/Makefile.am libitm/aclocal.m4
  libitm/testsuite/Makefile.in: libitm/testsuite/Makefile.am libitm/aclocal.m4
--- 143,148 ----
*************** apply_patch () {
*** 243,249 ****
  }
  
  # Check whether this indeed looks like a local tree.
! if [ ! -f gcc/version.c ]; then
      echo "This does not seem to be a GCC tree!"
      exit
  fi
--- 241,247 ----
  }
  
  # Check whether this indeed looks like a local tree.
! if [ ! -f gcc/reload.cc ]; then
      echo "This does not seem to be a GCC tree!"
      exit
  fi
*************** case $vcs_type in
*** 336,342 ****
              exit 1
  	fi
  
! 	revision=`$GCC_GIT log -n1 --pretty=tformat:%p:%t:%H`
  	branch=`$GCC_GIT name-rev --name-only HEAD || :`
  	;;    
  
--- 334,355 ----
              exit 1
  	fi
  
! 	# Open-coded version of "git gcc-descr" from contrib/gcc-git-customization.sh
! 	revision=`$GCC_GIT log -n1 --pretty=tformat:%h`
! 	r=`$GCC_GIT describe --all --match 'basepoints/gcc-[0-9]*' HEAD \
! 	   | sed -n 's,^\(tags/\)\?basepoints/gcc-\([0-9]\+\)-\([0-9]\+\)-g[0-9a-f]*$,r\2-\3,p;s,^\(tags/\)\?basepoints/gcc-\([0-9]\+\)$,r\2-0,p'`;
! 	if test -n $r; then
! 		o=`$GCC_GIT config --get gcc-config.upstream`;
! 		rr=`echo $r | sed -n 's,^r\([0-9]\+\)-[0-9]\+\(-g[0-9a-f]\+\)\?$,\1,p'`;
! 		if $GCC_GIT rev-parse --verify --quiet ${o:-origin}/releases/gcc-$rr >/dev/null; then
! 			m=releases/gcc-$rr;
! 		else
! 			m=master;
! 		fi;
! 		if $GCC_GIT merge-base --is-ancestor HEAD ${o:-origin}/$m; then
! 			revision=${r}-g${revision};
! 		fi
! 	fi
  	branch=`$GCC_GIT name-rev --name-only HEAD || :`
  	;;    
  
*************** rm -f LAST_UPDATED gcc/REVISION
*** 418,423 ****
      date
      echo "`TZ=UTC date` (revision $revision)"
  } > LAST_UPDATED
! echo "[$branch revision $revision]" > gcc/REVISION
  
  touch_files_reexec
--- 431,436 ----
      date
      echo "`TZ=UTC date` (revision $revision)"
  } > LAST_UPDATED
! echo "[$branch $revision]" > gcc/REVISION
  
  touch_files_reexec
diff -Nrcpad gcc-11.3.0/contrib/gen_autofdo_event.py gcc-12.1.0/contrib/gen_autofdo_event.py
*** gcc-11.3.0/contrib/gen_autofdo_event.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/gen_autofdo_event.py	Fri May  6 07:30:56 2022
*************** args = ap.parse_args()
*** 46,65 ****
  
  eventmap = collections.defaultdict(list)
  
! def get_cpu_str():
!     with open('/proc/cpuinfo', 'r') as c:
!         vendor, fam, model = None, None, None
!         for j in c:
!             n = j.split()
!             if n[0] == 'vendor_id':
!                 vendor = n[2]
!             elif n[0] == 'model' and n[1] == ':':
!                 model = int(n[2])
!             elif n[0] == 'cpu' and n[1] == 'family':
!                 fam = int(n[3])
!             if vendor and fam and model:
!                 return "%s-%d-%X" % (vendor, fam, model), model
!     return None, None
  
  def find_event(eventurl, model):
      print >>sys.stderr, "Downloading", eventurl
--- 46,74 ----
  
  eventmap = collections.defaultdict(list)
  
! def get_cpustr():
!     cpuinfo = os.getenv("CPUINFO")
!     if cpuinfo is None:
!         cpuinfo = '/proc/cpuinfo'
!     f = open(cpuinfo, 'r')
!     cpu = [None, None, None, None]
!     for j in f:
!         n = j.split()
!         if n[0] == 'vendor_id':
!             cpu[0] = n[2]
!         elif n[0] == 'model' and n[1] == ':':
!             cpu[2] = int(n[2])
!         elif n[0] == 'cpu' and n[1] == 'family':
!             cpu[1] = int(n[3])
!         elif n[0] == 'stepping' and n[1] == ':':
!             cpu[3] = int(n[2])
!         if all(v is not None for v in cpu):
!             break
!     # stepping for SKX only
!     stepping = cpu[0] == "GenuineIntel" and cpu[1] == 6 and cpu[2] == 0x55
!     if stepping:
!         return "%s-%d-%X-%X" % tuple(cpu)
!     return "%s-%d-%X" % tuple(cpu)[:3]
  
  def find_event(eventurl, model):
      print >>sys.stderr, "Downloading", eventurl
*************** def find_event(eventurl, model):
*** 81,87 ****
      return found
  
  if not args.all:
!     cpu, model = get_cpu_str()
      if not cpu:
          sys.exit("Unknown CPU type")
  
--- 90,96 ----
      return found
  
  if not args.all:
!     cpu = get_cpu_str()
      if not cpu:
          sys.exit("Unknown CPU type")
  
*************** for j in u:
*** 94,100 ****
      n = j.rstrip().split(',')
      if len(n) >= 4 and (args.all or n[0] == cpu) and n[3] == "core":
          if args.all:
!             vendor, fam, model = n[0].split("-")
              model = int(model, 16)
          cpufound += 1
          found += find_event(baseurl + n[2], model)
--- 103,110 ----
      n = j.rstrip().split(',')
      if len(n) >= 4 and (args.all or n[0] == cpu) and n[3] == "core":
          if args.all:
!             components = n[0].split("-")
!             model = components[2]
              model = int(model, 16)
          cpufound += 1
          found += find_event(baseurl + n[2], model)
*************** case `egrep -q "^cpu family\s*: 6" /proc
*** 146,152 ****
  echo >&2 "Unknown CPU. Run contrib/gen_autofdo_event.py --all --script to update script."
  	exit 1 ;;'''
      print "esac"
!     print 'exec perf record -e $E -b "$@"'
  
  if cpufound == 0 and not args.all:
      sys.exit('CPU %s not found' % cpu)
--- 156,172 ----
  echo >&2 "Unknown CPU. Run contrib/gen_autofdo_event.py --all --script to update script."
  	exit 1 ;;'''
      print "esac"
!     print "set -x"
!     print 'if ! perf record -e $E -b "$@" ; then'
!     print '  # PEBS may not actually be working even if the processor supports it'
!     print '  # (e.g., in a virtual machine). Trying to run without /p.'
!     print '  set +x'
!     print '  echo >&2 "Retrying without /p."'
!     print '  E="$(echo "${E}" | sed -e \'s/\/p/\//\')"'
!     print '  set -x'
!     print '  exec perf record -e $E -b "$@"'
!     print ' set +x'
!     print 'fi'
  
  if cpufound == 0 and not args.all:
      sys.exit('CPU %s not found' % cpu)
diff -Nrcpad gcc-11.3.0/contrib/gennews gcc-12.1.0/contrib/gennews
*** gcc-11.3.0/contrib/gennews	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/gennews	Fri May  6 07:30:56 2022
***************
*** 3,9 ****
  # Script to generate the NEWS file from online release notes.
  # Contributed by Joseph Myers <jsm28@cam.ac.uk>.
  #
! # Copyright (C) 2000-2021 Free Software Foundation, Inc.
  # This file is part of GCC.
  #
  # GCC is free software; you can redistribute it and/or modify
--- 3,9 ----
  # Script to generate the NEWS file from online release notes.
  # Contributed by Joseph Myers <jsm28@cam.ac.uk>.
  #
! # Copyright (C) 2000-2022 Free Software Foundation, Inc.
  # This file is part of GCC.
  #
  # GCC is free software; you can redistribute it and/or modify
***************
*** 23,28 ****
--- 23,29 ----
  
  website=http://gcc.gnu.org/
  files="
+     gcc-12/index.html gcc-12/changes.html
      gcc-11/index.html gcc-11/changes.html
      gcc-10/index.html gcc-10/changes.html
      gcc-9/index.html gcc-9/changes.html
diff -Nrcpad gcc-11.3.0/contrib/git-descr.sh gcc-12.1.0/contrib/git-descr.sh
*** gcc-11.3.0/contrib/git-descr.sh	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/git-descr.sh	Fri May  6 07:30:56 2022
*************** do
*** 18,29 ****
  done
  
  if test x$short = xyes; then
!     r=$(git describe --all --match 'basepoints/gcc-[0-9]*' $c | sed -n 's,^\(tags/\)\?basepoints/gcc-\([0-9]\+\)-\([0-9]\+\)-g[0-9a-f]*$,r\2-\3,p;s,^\(tags/\)\?basepoints/gcc-\([0-9]\+\)$,r\2-0,p');
  elif test x$long = xyes; then
!     r=$(git describe --all --abbrev=40 --match 'basepoints/gcc-[0-9]*' $c | sed -n 's,^\(tags/\)\?basepoints/gcc-,r,p')
  else
!     r=$(git describe --all --abbrev=14 --match 'basepoints/gcc-[0-9]*' $c | sed -n 's,^\(tags/\)\?basepoints/gcc-,r,p');
!     expr match ${r:-no} 'r[0-9]\+$' >/dev/null && r=${r}-0-g$(git rev-parse $c);
  fi;
  if test -n $r; then
      o=$(git config --get gcc-config.upstream);
--- 18,29 ----
  done
  
  if test x$short = xyes; then
!     r=$(git describe --all --match 'basepoints/gcc-[0-9]*' $c | sed -n 's,^tags/,,;s,^basepoints/gcc-\([0-9][0-9]*\)-\([0-9][0-9]*\)-g[0-9a-f]*$,r\1-\2,p;s,^basepoints/gcc-\([0-9][0-9]*\)$,r\1-0,p');
  elif test x$long = xyes; then
!     r=$(git describe --all --abbrev=40 --match 'basepoints/gcc-[0-9]*' $c | sed -n 's,^tags/,,;s,^basepoints/gcc-,r,p')
  else
!     r=$(git describe --all --abbrev=14 --match 'basepoints/gcc-[0-9]*' $c | sed -n 's,^tags/,,;s,^basepoints/gcc-,r,p')
!     expr ${r:-no} : 'r[0-9]\+$' >/dev/null && r=${r}-0-g$(git rev-parse $c);
  fi;
  if test -n $r; then
      o=$(git config --get gcc-config.upstream);
diff -Nrcpad gcc-11.3.0/contrib/git-undescr.sh gcc-12.1.0/contrib/git-undescr.sh
*** gcc-11.3.0/contrib/git-undescr.sh	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/git-undescr.sh	Fri May  6 07:30:56 2022
***************
*** 3,13 ****
  # Script to undescribe a GCC revision
  
  o=$(git config --get gcc-config.upstream);
! r=$(echo $1 | sed -n 's,^r\([0-9]\+\)-[0-9]\+\(-g[0-9a-f]\+\)\?$,\1,p');
! n=$(echo $1 | sed -n 's,^r[0-9]\+-\([0-9]\+\)\(-g[0-9a-f]\+\)\?$,\1,p');
  
  test -z $r && echo Invalid id $1 && exit 1;
  h=$(git rev-parse --verify --quiet ${o:-origin}/releases/gcc-$r);
  test -z $h && h=$(git rev-parse --verify --quiet ${o:-origin}/master);
! p=$(git describe --all --match 'basepoints/gcc-'$r $h | sed -n 's,^\(tags/\)\?basepoints/gcc-[0-9]\+-\([0-9]\+\)-g[0-9a-f]*$,\2,p;s,^\(tags/\)\?basepoints/gcc-[0-9]\+$,0,p');
  git rev-parse --verify $h~$(expr $p - $n);
--- 3,13 ----
  # Script to undescribe a GCC revision
  
  o=$(git config --get gcc-config.upstream);
! r=$(echo $1 | sed -n 's,^r\([0-9][0-9]*\)-[0-9][0-9]*\(-g[0-9a-f]*\)*$,\1,p');
! n=$(echo $1 | sed -n 's,^r[0-9][0-9]*-\([0-9][0-9]*\)\(-g[0-9a-f]*\)*$,\1,p');
  
  test -z $r && echo Invalid id $1 && exit 1;
  h=$(git rev-parse --verify --quiet ${o:-origin}/releases/gcc-$r);
  test -z $h && h=$(git rev-parse --verify --quiet ${o:-origin}/master);
! p=$(git describe --all --match 'basepoints/gcc-'$r $h | sed -n 's,^tags/,,;s,^basepoints/gcc-[0-9][0-9]*-\([0-9][0-9]*\)-g[0-9a-f]*$,\1,p;s,^basepoints/gcc-[0-9][0-9]*$,0,p');
  git rev-parse --verify $h~$(expr $p - $n);
diff -Nrcpad gcc-11.3.0/contrib/header-tools/ChangeLog gcc-12.1.0/contrib/header-tools/ChangeLog
*** gcc-11.3.0/contrib/header-tools/ChangeLog	Thu Apr 21 07:59:16 2022
--- gcc-12.1.0/contrib/header-tools/ChangeLog	Fri May  6 07:30:56 2022
***************
*** 1,14 ****
! 2022-04-21  Release Manager
! 
! 	* GCC 11.3.0 released.
! 
! 2021-07-28  Release Manager
  
! 	* GCC 11.2.0 released.
  
! 2021-04-27  Release Manager
  
! 	* GCC 11.1.0 released.
  
  2019-09-03  Ulrich Weigand  <uweigand@de.ibm.com>
  
--- 1,10 ----
! 2022-05-06  Release Manager
  
! 	* GCC 12.1.0 released.
  
! 2022-01-17  Martin Liska  <mliska@suse.cz>
  
! 	* README: Rename .c names to .cc.
  
  2019-09-03  Ulrich Weigand  <uweigand@de.ibm.com>
  
diff -Nrcpad gcc-11.3.0/contrib/header-tools/README gcc-12.1.0/contrib/header-tools/README
*** gcc-11.3.0/contrib/header-tools/README	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/header-tools/README	Fri May  6 07:30:56 2022
*************** ie.:     tool -lfilename.h  target.h
*** 14,20 ****
  containing coretypes.h.  Typically that is in gcc/gcc from a source checkout.
  For these tools to work on files not in this directory, their path needs to be
  specified on the command line.
! ie.:     tool c/c-decl.c  lto/lto.c
  
  - options can be intermixed with filenames anywhere on the command line
  ie.   tool ssa.h rtl.h -a   is equivalent to 
--- 14,20 ----
  containing coretypes.h.  Typically that is in gcc/gcc from a source checkout.
  For these tools to work on files not in this directory, their path needs to be
  specified on the command line.
! ie.:     tool c/c-decl.cc  lto/lto.cc
  
  - options can be intermixed with filenames anywhere on the command line
  ie.   tool ssa.h rtl.h -a   is equivalent to 
*************** gcc-order-headers
*** 39,45 ****
    Any files which are changed are output, and the original is saved with a
    .bak extention.
  
!   ex.:     gcc-order-headers tree-ssa.c c/c-decl.c
  
    -s will list all of the known headers in their canonical order. It does not
    show which of those headers include other headers, just the final canonical
--- 39,45 ----
    Any files which are changed are output, and the original is saved with a
    .bak extention.
  
!   ex.:     gcc-order-headers tree-ssa.cc c/c-decl.cc
  
    -s will list all of the known headers in their canonical order. It does not
    show which of those headers include other headers, just the final canonical
*************** show-headers
*** 67,74 ****
  
    This tool must be run in the core gcc source directory.
  
!   ex.: show-headers -sansidecl.h tree-ssa.c
! 	tree-ssa.c
  	  config.h
  	    auto-host.h
  	    ansidecl.h  (1)               <<-------
--- 67,74 ----
  
    This tool must be run in the core gcc source directory.
  
!   ex.: show-headers -sansidecl.h tree-ssa.cc
! 	tree-ssa.cc
  	  config.h
  	    auto-host.h
  	    ansidecl.h  (1)               <<-------
*************** included-by
*** 124,136 ****
       check rather than performing the much slower find command.
  
    ex: included-by tree-vectorizer.h
! 	config/aarch64/aarch64.c
! 	config/i386/i386.c
! 	config/rs6000/rs6000.c
! 	tree-loop-distribution.c
! 	tree-parloops.c
! 	tree-ssa-loop-ivopts.c
! 	tree-ssa-loop.c
  
  
  
--- 124,136 ----
       check rather than performing the much slower find command.
  
    ex: included-by tree-vectorizer.h
! 	config/aarch64/aarch64.cc
! 	config/i386/i386.cc
! 	config/rs6000/rs6000.cc
! 	tree-loop-distribution.cc
! 	tree-parloops.cc
! 	tree-ssa-loop-ivopts.cc
! 	tree-ssa-loop.cc
  
  
  
*************** reduce-headers
*** 219,226 ****
    reduce-headers -b../../build -t../../targets -falias.h -fexpr.h tree*.c  (1)
         #  This will attempt to remove only alias.h and expr.h from tree*.c
  
!   reduce-headers -b../../build -t../../targets tree-ssa-live.c
!        #  This will attempt to remove all header files from tree-ssa-live.c
    
  
    the tool will generate a number of log files:
--- 219,226 ----
    reduce-headers -b../../build -t../../targets -falias.h -fexpr.h tree*.c  (1)
         #  This will attempt to remove only alias.h and expr.h from tree*.c
  
!   reduce-headers -b../../build -t../../targets tree-ssa-live.cc
!        #  This will attempt to remove all header files from tree-ssa-live.cc
    
  
    the tool will generate a number of log files:
*************** reduce-headers
*** 240,253 ****
      $header.h.log: The same log is put into the relevant header log as well.
  
  
! a sample output from ira.c.log:
  
  Compilation failed:
   for shrink-wrap.h:
  
   ============================================
!  /gcc/2015-09-09/gcc/gcc/ira.c: In function ‘bool split_live_ranges_for_shrink_wrap()’:
!  /gcc/2015-09-09/gcc/gcc/ira.c:4839:8: error: ‘SHRINK_WRAPPING_ENABLED’ was not declared in this scope
      if (!SHRINK_WRAPPING_ENABLED)
              ^
  	    make: *** [ira.o] Error 1
--- 240,253 ----
      $header.h.log: The same log is put into the relevant header log as well.
  
  
! a sample output from ira.cc.log:
  
  Compilation failed:
   for shrink-wrap.h:
  
   ============================================
!  /gcc/2015-09-09/gcc/gcc/ira.cc: In function ‘bool split_live_ranges_for_shrink_wrap()’:
!  /gcc/2015-09-09/gcc/gcc/ira.cc:4839:8: error: ‘SHRINK_WRAPPING_ENABLED’ was not declared in this scope
      if (!SHRINK_WRAPPING_ENABLED)
              ^
  	    make: *** [ira.o] Error 1
*************** graph-include-web
*** 280,283 ****
    useful for finding cycles and redundancies, or simply to see what a single
    file looks like.
  
!   ex.: graph-include-web tree.c
--- 280,283 ----
    useful for finding cycles and redundancies, or simply to see what a single
    file looks like.
  
!   ex.: graph-include-web tree.cc
diff -Nrcpad gcc-11.3.0/contrib/maintainers-verify.sh gcc-12.1.0/contrib/maintainers-verify.sh
*** gcc-11.3.0/contrib/maintainers-verify.sh	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/maintainers-verify.sh	Thu Jan  1 00:00:00 1970
***************
*** 1,45 ****
- #!/bin/sh
- 
- # Copyright (C) 2018 Free Software Foundation, Inc.
- #
- # This file is part of GCC.
- #
- # GCC is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 3, or (at your option)
- # any later version.
- #
- # GCC is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with GCC; see the file COPYING.  If not, write to
- # the Free Software Foundation, 51 Franklin Street, Fifth Floor,
- # Boston, MA 02110-1301, USA.
- 
- if [ "$1" != "" ]; then
-     f="$1"
- else
-     f=./MAINTAINERS
- fi
- 
- grep @ $f \
-     | sed 's/[\t][\t]*/\t/g' \
-     | awk -F '\t' \
- 	  "
- {
-   if (NF == 2) {
-     name=\$1
-     email=\$2
-     if (names[name] == 1) {
-         printf \"Redundant in write approval: %s\n\", name
-     }
-   } else if (NF == 3 ) {
-     name=\$2
-     email=\$3
-     names[name] = 1
-   }
- }
- "
--- 0 ----
diff -Nrcpad gcc-11.3.0/contrib/mklog.py gcc-12.1.0/contrib/mklog.py
*** gcc-11.3.0/contrib/mklog.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/mklog.py	Fri May  6 07:30:56 2022
*************** import requests
*** 38,43 ****
--- 38,47 ----
  
  from unidiff import PatchSet
  
+ LINE_LIMIT = 100
+ TAB_WIDTH = 8
+ CO_AUTHORED_BY_PREFIX = 'co-authored-by: '
+ 
  pr_regex = re.compile(r'(\/(\/|\*)|[Cc*!])\s+(?P<pr>PR [a-z+-]+\/[0-9]+)')
  prnum_regex = re.compile(r'PR (?P<comp>[a-z+-]+)/(?P<num>[0-9]+)')
  dr_regex = re.compile(r'(\/(\/|\*)|[Cc*!])\s+(?P<dr>DR [0-9]+)')
*************** def get_pr_titles(prs):
*** 134,139 ****
--- 138,160 ----
      return '\n'.join(output)
  
  
+ def append_changelog_line(out, relative_path, text):
+     line = f'\t* {relative_path}:'
+     if len(line.replace('\t', ' ' * TAB_WIDTH) + ' ' + text) <= LINE_LIMIT:
+         out += f'{line} {text}\n'
+     else:
+         out += f'{line}\n'
+         out += f'\t{text}\n'
+     return out
+ 
+ 
+ def get_rel_path_if_prefixed(path, folder):
+     if path.startswith(folder):
+         return path[len(folder):].lstrip('/')
+     else:
+         return path
+ 
+ 
  def generate_changelog(data, no_functions=False, fill_pr_titles=False,
                         additional_prs=None):
      changelogs = {}
*************** def generate_changelog(data, no_function
*** 144,150 ****
      global firstpr
  
      if additional_prs:
!         prs = [pr for pr in additional_prs if pr not in prs]
      for file in diff:
          # skip files that can't be parsed
          if file.path == '/dev/null':
--- 165,175 ----
      global firstpr
  
      if additional_prs:
!         for apr in additional_prs:
!             if not apr.startswith('PR ') and '/' in apr:
!                 apr = 'PR ' + apr
!             if apr not in prs:
!                 prs.append(apr)
      for file in diff:
          # skip files that can't be parsed
          if file.path == '/dev/null':
*************** def generate_changelog(data, no_function
*** 210,232 ****
          for file in sorted(files, key=sort_changelog_files):
              assert file.path.startswith(changelog)
              in_tests = 'testsuite' in changelog or 'testsuite' in file.path
!             relative_path = file.path[len(changelog):].lstrip('/')
              functions = []
              if file.is_added_file:
!                 msg = 'New test' if in_tests else 'New file'
!                 out += '\t* %s: %s.\n' % (relative_path, msg)
              elif file.is_removed_file:
!                 out += '\t* %s: Removed.\n' % (relative_path)
              elif hasattr(file, 'is_rename') and file.is_rename:
-                 out += '\t* %s: Moved to...\n' % (relative_path)
-                 new_path = file.target_file[2:]
                  # A file can be theoretically moved to a location that
                  # belongs to a different ChangeLog.  Let user fix it.
!                 if new_path.startswith(changelog):
!                     new_path = new_path[len(changelog):].lstrip('/')
!                 out += '\t* %s: ...here.\n' % (new_path)
              elif os.path.basename(file.path) in generated_files:
                  out += '\t* %s: Regenerate.\n' % (relative_path)
              else:
                  if not no_functions:
                      for hunk in file:
--- 235,262 ----
          for file in sorted(files, key=sort_changelog_files):
              assert file.path.startswith(changelog)
              in_tests = 'testsuite' in changelog or 'testsuite' in file.path
!             relative_path = get_rel_path_if_prefixed(file.path, changelog)
              functions = []
              if file.is_added_file:
!                 msg = 'New test.' if in_tests else 'New file.'
!                 out = append_changelog_line(out, relative_path, msg)
              elif file.is_removed_file:
!                 out = append_changelog_line(out, relative_path, 'Removed.')
              elif hasattr(file, 'is_rename') and file.is_rename:
                  # A file can be theoretically moved to a location that
                  # belongs to a different ChangeLog.  Let user fix it.
!                 #
!                 # Since unidiff 0.7.0, path.file == path.target_file[2:],
!                 # it used to be path.source_file[2:]
!                 relative_path = get_rel_path_if_prefixed(file.source_file[2:],
!                                                          changelog)
!                 out = append_changelog_line(out, relative_path, 'Moved to...')
!                 new_path = get_rel_path_if_prefixed(file.target_file[2:],
!                                                     changelog)
!                 out += f'\t* {new_path}: ...here.\n'
              elif os.path.basename(file.path) in generated_files:
                  out += '\t* %s: Regenerate.\n' % (relative_path)
+                 append_changelog_line(out, relative_path, 'Regenerate.')
              else:
                  if not no_functions:
                      for hunk in file:
*************** def update_copyright(data):
*** 299,304 ****
--- 329,340 ----
                  f.write(content)
  
  
+ def skip_line_in_changelog(line):
+     if line.lower().startswith(CO_AUTHORED_BY_PREFIX) or line.startswith('#'):
+         return False
+     return True
+ 
+ 
  if __name__ == '__main__':
      parser = argparse.ArgumentParser(description=help_message)
      parser.add_argument('input', nargs='?',
*************** if __name__ == '__main__':
*** 332,338 ****
                                      args.fill_up_bug_titles, args.pr_numbers)
          if args.changelog:
              lines = open(args.changelog).read().split('\n')
!             start = list(takewhile(lambda l: not l.startswith('#'), lines))
              end = lines[len(start):]
              with open(args.changelog, 'w') as f:
                  if not start or not start[0]:
--- 368,374 ----
                                      args.fill_up_bug_titles, args.pr_numbers)
          if args.changelog:
              lines = open(args.changelog).read().split('\n')
!             start = list(takewhile(skip_line_in_changelog, lines))
              end = lines[len(start):]
              with open(args.changelog, 'w') as f:
                  if not start or not start[0]:
diff -Nrcpad gcc-11.3.0/contrib/paranoia.cc gcc-12.1.0/contrib/paranoia.cc
*** gcc-11.3.0/contrib/paranoia.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/paranoia.cc	Fri May  6 07:30:56 2022
*************** static int verbose_index = 0;
*** 185,191 ****
  
  /* ====================================================================== */
  /* The implementation of the abstract floating point class based on gcc's
!    real.c.  I.e. the object of this exercise.  Templated so that we can
     all fp sizes.  */
  
  class real_c_float
--- 185,191 ----
  
  /* ====================================================================== */
  /* The implementation of the abstract floating point class based on gcc's
!    real.cc.  I.e. the object of this exercise.  Templated so that we can
     all fp sizes.  */
  
  class real_c_float
diff -Nrcpad gcc-11.3.0/contrib/prerequisites.md5 gcc-12.1.0/contrib/prerequisites.md5
*** gcc-11.3.0/contrib/prerequisites.md5	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/prerequisites.md5	Fri May  6 07:30:56 2022
***************
*** 1,4 ****
! 86ee6e54ebfc4a90b643a65e402c4048  gmp-6.1.0.tar.bz2
! 320c28198def956aeacdb240b46b8969  mpfr-3.1.6.tar.bz2
! d6a1d5f8ddea3abd2cc3e98f58352d26  mpc-1.0.3.tar.gz
! 11436d6b205e516635b666090b94ab32  isl-0.18.tar.bz2
--- 1,4 ----
! 28971fc21cf028042d4897f02fd355ea  gmp-6.2.1.tar.bz2
! 44b892bc5a45bafb4294d134e13aad1d  mpfr-4.1.0.tar.bz2
! 9f16c976c25bb0f76b50be749cd7a3a8  mpc-1.2.1.tar.gz
! dd2f7b78e118c25bd96134a52aae7f4d  isl-0.24.tar.bz2
diff -Nrcpad gcc-11.3.0/contrib/prerequisites.sha512 gcc-12.1.0/contrib/prerequisites.sha512
*** gcc-11.3.0/contrib/prerequisites.sha512	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/prerequisites.sha512	Fri May  6 07:30:56 2022
***************
*** 1,4 ****
! 3c82aeab9c1596d4da8afac2eec38e429e84f3211e1a572cf8fd2b546493c44c039b922a1133eaaa48bd7f3e11dbe795a384e21ed95cbe3ecc58d7ac02246117  gmp-6.1.0.tar.bz2
! 0c310dd7956be527884f8059c195a5aca1042b089d0927ac6341e6310b1250a7059bc61aaaab4dfb76c6ab8b67e440878ca203f72674529bbcb46770ed9b6885  mpfr-3.1.6.tar.bz2
! 0028b76df130720c1fad7de937a0d041224806ce5ef76589f19c7b49d956071a683e2f20d154c192a231e69756b19e48208f2889b0c13950ceb7b3cfaf059a43  mpc-1.0.3.tar.gz
! 85d0b40f4dbf14cb99d17aa07048cdcab2dc3eb527d2fbb1e84c41b2de5f351025370e57448b63b2b8a8cf8a0843a089c3263f9baee1542d5c2e1cb37ed39d94  isl-0.18.tar.bz2
--- 1,4 ----
! 8904334a3bcc5c896ececabc75cda9dec642e401fb5397c4992c4fabea5e962c9ce8bd44e8e4233c34e55c8010cc28db0545f5f750cbdbb5f00af538dc763be9  gmp-6.2.1.tar.bz2
! 410208ee0d48474c1c10d3d4a59decd2dfa187064183b09358ec4c4666e34d74383128436b404123b831e585d81a9176b24c7ced9d913967c5fce35d4040a0b4  mpfr-4.1.0.tar.bz2
! 3279f813ab37f47fdcc800e4ac5f306417d07f539593ca715876e43e04896e1d5bceccfb288ef2908a3f24b760747d0dbd0392a24b9b341bc3e12082e5c836ee  mpc-1.2.1.tar.gz
! aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95  isl-0.24.tar.bz2
diff -Nrcpad gcc-11.3.0/contrib/reghunt/ChangeLog gcc-12.1.0/contrib/reghunt/ChangeLog
*** gcc-11.3.0/contrib/reghunt/ChangeLog	Thu Apr 21 07:59:16 2022
--- gcc-12.1.0/contrib/reghunt/ChangeLog	Fri May  6 07:30:56 2022
***************
*** 1,14 ****
! 2022-04-21  Release Manager
! 
! 	* GCC 11.3.0 released.
! 
! 2021-07-28  Release Manager
! 
! 	* GCC 11.2.0 released.
! 
! 2021-04-27  Release Manager
  
! 	* GCC 11.1.0 released.
  
  2010-06-27  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
  
--- 1,6 ----
! 2022-05-06  Release Manager
  
! 	* GCC 12.1.0 released.
  
  2010-06-27  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
  
diff -Nrcpad gcc-11.3.0/contrib/regression/ChangeLog gcc-12.1.0/contrib/regression/ChangeLog
*** gcc-11.3.0/contrib/regression/ChangeLog	Thu Apr 21 07:59:16 2022
--- gcc-12.1.0/contrib/regression/ChangeLog	Fri May  6 07:30:56 2022
***************
*** 1,14 ****
! 2022-04-21  Release Manager
! 
! 	* GCC 11.3.0 released.
! 
! 2021-07-28  Release Manager
! 
! 	* GCC 11.2.0 released.
! 
! 2021-04-27  Release Manager
  
! 	* GCC 11.1.0 released.
  
  2012-08-26  Hans-Peter Nilsson  <hp@axis.com>
  
--- 1,6 ----
! 2022-05-06  Release Manager
  
! 	* GCC 12.1.0 released.
  
  2012-08-26  Hans-Peter Nilsson  <hp@axis.com>
  
diff -Nrcpad gcc-11.3.0/contrib/test_mklog.py gcc-12.1.0/contrib/test_mklog.py
*** gcc-11.3.0/contrib/test_mklog.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/test_mklog.py	Fri May  6 07:30:56 2022
*************** gcc/ChangeLog:
*** 443,448 ****
--- 443,469 ----
  
  '''
  
+ PATCH10 = '''\
+ diff --git a/libgomp/doc/the-libgomp-abi/implementing-firstprivate-lastprivate-copyin-and-copyprivate-clauses.rst b/libgomp/doc/the-libgomp-abi/implementing-firstprivate-lastprivate-copyin-and-copyprivate-clauses.rst
+ new file mode 100644
+ index 00000000000..ad3c6d856fc
+ --- /dev/null
+ +++ b/libgomp/doc/the-libgomp-abi/implementing-firstprivate-lastprivate-copyin-and-copyprivate-clauses.rst
+ @@ -0,0 +1,3 @@
+ +
+ +
+ +
+ 
+ '''
+ 
+ EXPECTED10 = '''\
+ libgomp/ChangeLog:
+ 
+ 	* doc/the-libgomp-abi/implementing-firstprivate-lastprivate-copyin-and-copyprivate-clauses.rst:
+ 	New file.
+ 
+ '''
+ 
  class TestMklog(unittest.TestCase):
      def test_macro_definition(self):
          changelog = generate_changelog(PATCH1)
*************** class TestMklog(unittest.TestCase):
*** 485,487 ****
--- 506,512 ----
      def test_define_macro_parsing(self):
          changelog = generate_changelog(PATCH9)
          assert changelog == EXPECTED9
+ 
+     def test_long_filenames(self):
+         changelog = generate_changelog(PATCH10)
+         assert changelog == EXPECTED10
diff -Nrcpad gcc-11.3.0/contrib/testsuite-management/validate_failures.py gcc-12.1.0/contrib/testsuite-management/validate_failures.py
*** gcc-11.3.0/contrib/testsuite-management/validate_failures.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/testsuite-management/validate_failures.py	Fri May  6 07:30:56 2022
***************
*** 1,11 ****
! #!/usr/bin/python
  
  # Script to compare testsuite failures against a list of known-to-fail
  # tests.
- #
- # NOTE: This script is used in installations that are running Python 2.4.
- #       Please stick to syntax features available in 2.4 and earlier
- #       versions.
  
  # Contributed by Diego Novillo <dnovillo@google.com>
  #
--- 1,7 ----
! #!/usr/bin/env python3
  
  # Script to compare testsuite failures against a list of known-to-fail
  # tests.
  
  # Contributed by Diego Novillo <dnovillo@google.com>
  #
*************** _MANIFEST_PATH_PATTERN = '%s/%s/%s.xfail
*** 82,88 ****
  _OPTIONS = None
  
  def Error(msg):
!   print >>sys.stderr, 'error: %s' % msg
    sys.exit(1)
  
  
--- 78,84 ----
  _OPTIONS = None
  
  def Error(msg):
!   print('error: %s' % msg, file=sys.stderr)
    sys.exit(1)
  
  
*************** class TestResult(object):
*** 126,132 ****
           self.description) = re.match(r'([A-Z]+):\s*(\S+)\s*(.*)',
                                        summary_line).groups()
        except:
!         print 'Failed to parse summary line: "%s"' % summary_line
          raise
        self.ordinal = ordinal
      except ValueError:
--- 122,128 ----
           self.description) = re.match(r'([A-Z]+):\s*(\S+)\s*(.*)',
                                        summary_line).groups()
        except:
!         print('Failed to parse summary line: "%s"' % summary_line)
          raise
        self.ordinal = ordinal
      except ValueError:
*************** class TestResult(object):
*** 180,186 ****
  
  def GetMakefileValue(makefile_name, value_name):
    if os.path.exists(makefile_name):
!     makefile = open(makefile_name)
      for line in makefile:
        if line.startswith(value_name):
          (_, value) = line.split('=', 1)
--- 176,182 ----
  
  def GetMakefileValue(makefile_name, value_name):
    if os.path.exists(makefile_name):
!     makefile = open(makefile_name, encoding='latin-1', mode='r')
      for line in makefile:
        if line.startswith(value_name):
          (_, value) = line.split('=', 1)
*************** def GetNegativeResult(line):
*** 246,253 ****
  def ParseManifestWorker(result_set, manifest_path):
    """Read manifest_path, adding the contents to result_set."""
    if _OPTIONS.verbosity >= 1:
!     print 'Parsing manifest file %s.' % manifest_path
!   manifest_file = open(manifest_path)
    for line in manifest_file:
      line = line.strip()
      if line == "":
--- 242,249 ----
  def ParseManifestWorker(result_set, manifest_path):
    """Read manifest_path, adding the contents to result_set."""
    if _OPTIONS.verbosity >= 1:
!     print('Parsing manifest file %s.' % manifest_path)
!   manifest_file = open(manifest_path, encoding='latin-1', mode='r')
    for line in manifest_file:
      line = line.strip()
      if line == "":
*************** def ParseSummary(sum_fname):
*** 278,284 ****
    # ordinal is used when sorting the results so that tests within each
    # .exp file are kept sorted.
    ordinal=0
!   sum_file = open(sum_fname)
    for line in sum_file:
      if IsInterestingResult(line):
        result = TestResult(line, ordinal)
--- 274,280 ----
    # ordinal is used when sorting the results so that tests within each
    # .exp file are kept sorted.
    ordinal=0
!   sum_file = open(sum_fname, encoding='latin-1', mode='r')
    for line in sum_file:
      if IsInterestingResult(line):
        result = TestResult(line, ordinal)
*************** def ParseSummary(sum_fname):
*** 287,293 ****
          # Tests that have expired are not added to the set of expected
          # results. If they are still present in the set of actual results,
          # they will cause an error to be reported.
!         print 'WARNING: Expected failure "%s" has expired.' % line.strip()
          continue
        result_set.add(result)
    sum_file.close()
--- 283,289 ----
          # Tests that have expired are not added to the set of expected
          # results. If they are still present in the set of actual results,
          # they will cause an error to be reported.
!         print('WARNING: Expected failure "%s" has expired.' % line.strip())
          continue
        result_set.add(result)
    sum_file.close()
*************** def GetResults(sum_files):
*** 324,330 ****
    """Collect all the test results from the given .sum files."""
    build_results = set()
    for sum_fname in sum_files:
!     print '\t%s' % sum_fname
      build_results |= ParseSummary(sum_fname)
    return build_results
  
--- 320,326 ----
    """Collect all the test results from the given .sum files."""
    build_results = set()
    for sum_fname in sum_files:
!     print('\t%s' % sum_fname)
      build_results |= ParseSummary(sum_fname)
    return build_results
  
*************** def GetBuildData():
*** 387,409 ****
        return None, None
    srcdir = GetMakefileValue('%s/Makefile' % _OPTIONS.build_dir, 'srcdir =')
    target = GetMakefileValue('%s/Makefile' % _OPTIONS.build_dir, 'target_alias=')
!   print 'Source directory: %s' % srcdir
!   print 'Build target:     %s' % target
    return srcdir, target
  
  
  def PrintSummary(msg, summary):
!   print '\n\n%s' % msg
    for result in sorted(summary):
!     print result
  
  
  def GetSumFiles(results, build_dir):
    if not results:
!     print 'Getting actual results from build directory %s' % build_dir
      sum_files = CollectSumFiles(build_dir)
    else:
!     print 'Getting actual results from user-provided results'
      sum_files = results.split()
    return sum_files
  
--- 383,405 ----
        return None, None
    srcdir = GetMakefileValue('%s/Makefile' % _OPTIONS.build_dir, 'srcdir =')
    target = GetMakefileValue('%s/Makefile' % _OPTIONS.build_dir, 'target_alias=')
!   print('Source directory: %s' % srcdir)
!   print('Build target:     %s' % target)
    return srcdir, target
  
  
  def PrintSummary(msg, summary):
!   print('\n\n%s' % msg)
    for result in sorted(summary):
!     print(result)
  
  
  def GetSumFiles(results, build_dir):
    if not results:
!     print('Getting actual results from build directory %s' % build_dir)
      sum_files = CollectSumFiles(build_dir)
    else:
!     print('Getting actual results from user-provided results')
      sum_files = results.split()
    return sum_files
  
*************** def PerformComparison(expected, actual,
*** 425,431 ****
                   expected_vs_actual)
  
    if tests_ok:
!     print '\nSUCCESS: No unexpected failures.'
  
    return tests_ok
  
--- 421,427 ----
                   expected_vs_actual)
  
    if tests_ok:
!     print('\nSUCCESS: No unexpected failures.')
  
    return tests_ok
  
*************** def PerformComparison(expected, actual,
*** 433,439 ****
  def CheckExpectedResults():
    srcdir, target = GetBuildData()
    manifest_path = GetManifestPath(srcdir, target, True)
!   print 'Manifest:         %s' % manifest_path
    manifest = GetManifest(manifest_path)
    sum_files = GetSumFiles(_OPTIONS.results, _OPTIONS.build_dir)
    actual = GetResults(sum_files)
--- 429,435 ----
  def CheckExpectedResults():
    srcdir, target = GetBuildData()
    manifest_path = GetManifestPath(srcdir, target, True)
!   print('Manifest:         %s' % manifest_path)
    manifest = GetManifest(manifest_path)
    sum_files = GetSumFiles(_OPTIONS.results, _OPTIONS.build_dir)
    actual = GetResults(sum_files)
*************** def CheckExpectedResults():
*** 448,463 ****
  def ProduceManifest():
    (srcdir, target) = GetBuildData()
    manifest_path = GetManifestPath(srcdir, target, False)
!   print 'Manifest:         %s' % manifest_path
    if os.path.exists(manifest_path) and not _OPTIONS.force:
      Error('Manifest file %s already exists.\nUse --force to overwrite.' %
            manifest_path)
  
    sum_files = GetSumFiles(_OPTIONS.results, _OPTIONS.build_dir)
    actual = GetResults(sum_files)
!   manifest_file = open(manifest_path, 'w')
    for result in sorted(actual):
!     print result
      manifest_file.write('%s\n' % result)
    manifest_file.close()
  
--- 444,459 ----
  def ProduceManifest():
    (srcdir, target) = GetBuildData()
    manifest_path = GetManifestPath(srcdir, target, False)
!   print('Manifest:         %s' % manifest_path)
    if os.path.exists(manifest_path) and not _OPTIONS.force:
      Error('Manifest file %s already exists.\nUse --force to overwrite.' %
            manifest_path)
  
    sum_files = GetSumFiles(_OPTIONS.results, _OPTIONS.build_dir)
    actual = GetResults(sum_files)
!   manifest_file = open(manifest_path, encoding='latin-1', mode='w')
    for result in sorted(actual):
!     print(result)
      manifest_file.write('%s\n' % result)
    manifest_file.close()
  
diff -Nrcpad gcc-11.3.0/contrib/unicode/utf8-dump.py gcc-12.1.0/contrib/unicode/utf8-dump.py
*** gcc-11.3.0/contrib/unicode/utf8-dump.py	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/contrib/unicode/utf8-dump.py	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,69 ----
+ #!/usr/bin/env python3
+ #
+ # Script to dump a UTF-8 file as a list of numbered lines (mimicking GCC's
+ # diagnostic output format), interleaved with lines per character showing
+ # the Unicode codepoints, the UTF-8 encoding bytes, the name of the
+ # character, and, where printable, the characters themselves.
+ # The lines are printed in logical order, which may help the reader to grok
+ # the relationship between visual and logical ordering in bi-di files.
+ #
+ # SPDX-License-Identifier: MIT
+ #
+ # Copyright (C) 2021 David Malcolm <dmalcolm@redhat.com>.
+ #
+ # Permission is hereby granted, free of charge, to any person obtaining a
+ # copy of this software and associated documentation files (the "Software"),
+ # to deal in the Software without restriction, including without limitation
+ # the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ # and/or sell copies of the Software, and to permit persons to whom the
+ # Software is furnished to do so, subject to the following conditions:
+ #
+ # The above copyright notice and this permission notice shall be included
+ # in all copies or substantial portions of the Software.
+ #
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
+ # OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ 
+ import sys
+ import unicodedata
+ 
+ 
+ def get_name(ch):
+     try:
+         return unicodedata.name(ch)
+     except ValueError:
+         if ch == '\n':
+             return 'LINE FEED (LF)'
+         return '(unknown)'
+ 
+ 
+ def get_printable(ch):
+     cat = unicodedata.category(ch)
+     if cat == 'Cc':
+         return '(control character)'
+     elif cat == 'Cf':
+         return '(format control)'
+     elif cat[0] == 'Z':
+         return '(separator)'
+     return ch
+ 
+ 
+ def dump_file(f_in):
+     line_num = 1
+     for line in f_in:
+         print('%4i | %s' % (line_num, line.rstrip()))
+         for ch in line:
+             utf8_desc = '%15s' % (' '.join(['0x%02x' % b
+                                             for b in ch.encode('utf-8')]))
+             print('%4s |   U+%04X %s %40s %s'
+                   % ('', ord(ch), utf8_desc, get_name(ch), get_printable(ch)))
+         line_num += 1
+ 
+ 
+ with open(sys.argv[1], mode='r') as f_in:
+     dump_file(f_in)
diff -Nrcpad gcc-11.3.0/contrib/update-copyright.py gcc-12.1.0/contrib/update-copyright.py
*** gcc-11.3.0/contrib/update-copyright.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/update-copyright.py	Fri May  6 07:30:56 2022
***************
*** 1,6 ****
  #!/usr/bin/env python3
  #
! # Copyright (C) 2013-2020 Free Software Foundation, Inc.
  #
  # This script is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
--- 1,6 ----
  #!/usr/bin/env python3
  #
! # Copyright (C) 2013-2022 Free Software Foundation, Inc.
  #
  # This script is free software; you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
*************** class Copyright:
*** 233,239 ****
      def add_external_author (self, holder):
          self.holders[holder] = None
  
!     class BadYear():
          def __init__ (self, year):
              self.year = year
  
--- 233,239 ----
      def add_external_author (self, holder):
          self.holders[holder] = None
  
!     class BadYear (Exception):
          def __init__ (self, year):
              self.year = year
  
*************** class GCCCopyright (Copyright):
*** 726,731 ****
--- 726,732 ----
          self.add_external_author ('The Regents of the University of California.')
          self.add_external_author ('Ulf Adams')
          self.add_external_author ('Unicode, Inc.')
+         self.add_external_author ('University of Illinois at Urbana-Champaign.')
          self.add_external_author ('University of Toronto.')
          self.add_external_author ('Yoshinori Sato')
  
*************** class GCCCmdLine (CmdLine):
*** 735,740 ****
--- 736,742 ----
  
          self.add_dir ('.', TopLevelFilter())
          # boehm-gc is imported from upstream.
+         self.add_dir ('c++tools')
          self.add_dir ('config', ConfigFilter())
          # contrib isn't really part of GCC.
          self.add_dir ('fixincludes')
*************** class GCCCmdLine (CmdLine):
*** 755,761 ****
          self.add_dir ('libgfortran')
          # libgo is imported from upstream.
          self.add_dir ('libgomp')
-         self.add_dir ('libhsail-rt')
          self.add_dir ('libiberty')
          self.add_dir ('libitm')
          self.add_dir ('libobjc')
--- 757,762 ----
*************** class GCCCmdLine (CmdLine):
*** 771,776 ****
--- 772,778 ----
          # zlib is imported from upstream.
  
          self.default_dirs = [
+             'c++tools',
              'gcc',
              'include',
              'libada',
*************** class GCCCmdLine (CmdLine):
*** 782,788 ****
              'libgcc',
              'libgfortran',
              'libgomp',
-             'libhsail-rt',
              'libiberty',
              'libitm',
              'libobjc',
--- 784,789 ----
diff -Nrcpad gcc-11.3.0/contrib/vimrc gcc-12.1.0/contrib/vimrc
*** gcc-11.3.0/contrib/vimrc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/contrib/vimrc	Fri May  6 07:30:56 2022
*************** function! SetStyle()
*** 42,48 ****
    if &filetype == "gitcommit"
      setlocal textwidth=72
    else
!     setlocal textwidth=80
    endif
    setlocal formatoptions-=ro formatoptions+=cqlt
    if index(l:c_exts, l:ext) != -1 || &filetype == "c" || &filetype == "cpp"
--- 42,48 ----
    if &filetype == "gitcommit"
      setlocal textwidth=72
    else
!     setlocal textwidth=79
    endif
    setlocal formatoptions-=ro formatoptions+=cqlt
    if index(l:c_exts, l:ext) != -1 || &filetype == "c" || &filetype == "cpp"
diff -Nrcpad gcc-11.3.0/fixincludes/ChangeLog gcc-12.1.0/fixincludes/ChangeLog
*** gcc-11.3.0/fixincludes/ChangeLog	Thu Apr 21 07:59:16 2022
--- gcc-12.1.0/fixincludes/ChangeLog	Fri May  6 07:30:56 2022
***************
*** 1,23 ****
! 2022-04-21  Release Manager
  
! 	* GCC 11.3.0 released.
  
! 2021-07-28  Release Manager
  
! 	* GCC 11.2.0 released.
  
! 2021-07-08  Clément Chigot  <clement.chigot@atos.net>
  
! 	Backported from master:
! 	2021-07-06  Clément Chigot  <clement.chigot@atos.net>
  
  	* inclhack.def (aix_externcpp1): Improve select regexp.
  	* fixincl.x: Regenerate.
  	* tests/base/sys/socket.h: Update.
  
! 2021-04-27  Release Manager
  
! 	* GCC 11.1.0 released.
  
  2020-12-14  Ilya Leoshkevich  <iii@linux.ibm.com>
  
--- 1,91 ----
! 2022-05-06  Release Manager
  
! 	* GCC 12.1.0 released.
  
! 2022-02-27  John David Anglin  <danglin@gcc.gnu.org>
  
! 	* inclhack.def (hpux_math_constexpr): New hack.
! 	* fixincl.x: Regenerate.
! 	* tests/base/math.h: Update.
  
! 2022-02-04  Martin Liska  <mliska@suse.cz>
  
! 	* fixinc.in: Use cd OLDDIR instead of cd .. .
! 
! 2022-02-03  Martin Liska  <mliska@suse.cz>
! 
! 	* fixinc.in: Use mkdir -p rather that a loop.
! 
! 2022-01-16  Olivier Hainque  <hainque@adacore.com>
! 
! 	* inclhack.def (vxworks_posix_open): New hack.
! 	* tests/base/fcntl.h: Update.
! 	* fixincl.x: Regenerate.
! 
! 2022-01-16  Olivier Hainque  <hainque@adacore.com>
! 
! 	* inclhack.def (vxworks_time_h_syslib): New hack.
! 	* tests/base/time.h: Update.
! 	* fixincl.x: Regenerate.
! 
! 2022-01-16  Olivier Hainque  <hainque@adacore.com>
! 
! 	* inclhack.def (vxworks_math_h_fp_c99): New hack.
! 	* tests/base/math.h: Update.
! 	* fixincl.x: Regenerate.
! 
! 2022-01-06  Olivier Hainque  <hainque@adacore.com>
! 
! 	* inclhack.def (vxworks_next_yvals): New hack.
! 	* tests/base/yvals.h: New expected test result.
! 	* fixincl.x: Regenerate.
! 
! 2022-01-04  Olivier Hainque  <hainque@adacore.com>
! 
! 	* inclhack.def (vxworks_posix_mkdir): Refine to expose a
! 	varargs interface.
! 	* tests/base/sys/stat.h: Update expected results.
! 	* fixincl.x: Regenerate.
! 
! 2022-01-01  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
! 
! 	* inclhack.def: Add new fix on darwin.
! 	* fixincl.x: Regenerate.
! 	* tests/base/math.h: Regenerate.
! 
! 2021-11-23  Xi Ruoyao  <xry111@mengyan1223.wang>
! 
! 	PR bootstrap/103306
! 	* fixincl.c (process): Don't call abort().
! 
! 2021-11-13  Xi Ruoyao  <xry111@mengyan1223.wang>
! 
! 	PR other/21823
! 	PR bootstrap/80047
! 	* fixincl.c (process): Simplify the handling for highly
! 	  unlikely access() failure, to avoid using non-standard
! 	  extensions.
! 
! 2021-08-30  John David Anglin  <danglin@gcc.gnu.org>
! 
! 	* inclhack.def (hpux_c99_inttypes5): New hack to define PRIdPTR, etc.
! 	* fixincl.x: Regenerate.
! 	* tests/base/inttypes.h: Update.
! 
! 2021-07-06  Clément Chigot  <clement.chigot@atos.net>
  
  	* inclhack.def (aix_externcpp1): Improve select regexp.
  	* fixincl.x: Regenerate.
  	* tests/base/sys/socket.h: Update.
  
! 2021-06-30  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	PR other/91085
! 	* fixfixes.c (check_has_inc): New static function.
! 	  (machine_name_fix): Don't replace header names in
! 	  __has_include(...).
! 	* inclhack.def (machine_name): Adjust test.
! 	* tests/base/testing.h: Update.
  
  2020-12-14  Ilya Leoshkevich  <iii@linux.ibm.com>
  
diff -Nrcpad gcc-11.3.0/fixincludes/fixfixes.c gcc-12.1.0/fixincludes/fixfixes.c
*** gcc-11.3.0/fixincludes/fixfixes.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/fixincludes/fixfixes.c	Fri May  6 07:30:56 2022
*************** FIX_PROC_HEAD( char_macro_def_fix )
*** 477,482 ****
--- 477,515 ----
    fputs (text, stdout);
  }
  
+ /* Check if the pattern at pos is actually in a "__has_include(...)"
+    directive.  Return the pointer to the ')' of this
+    "__has_include(...)" if it is, NULL otherwise.  */
+ static const char *
+ check_has_inc (const char *begin, const char *pos, const char *end)
+ {
+   static const char has_inc[] = "__has_include";
+   const size_t has_inc_len = sizeof (has_inc) - 1;
+   const char *p;
+ 
+   for (p = memmem (begin, pos - begin, has_inc, has_inc_len);
+        p != NULL;
+        p = memmem (p, pos - p, has_inc, has_inc_len))
+     {
+       p += has_inc_len;
+       while (p < end && ISSPACE (*p))
+         p++;
+ 
+       /* "__has_include" may appear as "defined(__has_include)",
+          search for the next appearance then.  */
+       if (*p != '(')
+         continue;
+ 
+       /* To avoid too much complexity, just hope there is never a
+          ')' in a header name.  */
+       p = memchr (p, ')', end - p);
+       if (p == NULL || p > pos)
+         return p;
+     }
+ 
+   return NULL;
+ }
+ 
  /* Fix for machine name #ifdefs that are not in the namespace reserved
     by the C standard.  They won't be defined if compiling with -ansi,
     and the headers will break.  We go to some trouble to only change
*************** FIX_PROC_HEAD( machine_name_fix )
*** 524,530 ****
        /* If the 'name_pat' matches in between base and limit, we have
           a bogon.  It is not worth the hassle of excluding comments
           because comments on #if/#ifdef lines are rare, and strings on
!          such lines are illegal.
  
           REG_NOTBOL means 'base' is not at the beginning of a line, which
           shouldn't matter since the name_re has no ^ anchor, but let's
--- 557,563 ----
        /* If the 'name_pat' matches in between base and limit, we have
           a bogon.  It is not worth the hassle of excluding comments
           because comments on #if/#ifdef lines are rare, and strings on
!          such lines are only legal in a "__has_include" directive.
  
           REG_NOTBOL means 'base' is not at the beginning of a line, which
           shouldn't matter since the name_re has no ^ anchor, but let's
*************** FIX_PROC_HEAD( machine_name_fix )
*** 544,551 ****
              break;
  
            p = base + match[0].rm_so;
-           base += match[0].rm_eo;
  
            /* One more test: if on the same line we have the same string
               with the appropriate underscores, then leave it alone.
               We want exactly two leading and trailing underscores.  */
--- 577,592 ----
              break;
  
            p = base + match[0].rm_so;
  
+           /* Check if the match is in __has_include(...) (PR 91085). */
+           q = check_has_inc (base, p, limit);
+           if (q) 
+             {
+               base = q + 1;
+               goto again;
+             }
+ 
+           base += match[0].rm_eo;
            /* One more test: if on the same line we have the same string
               with the appropriate underscores, then leave it alone.
               We want exactly two leading and trailing underscores.  */
diff -Nrcpad gcc-11.3.0/fixincludes/fixinc.in gcc-12.1.0/fixincludes/fixinc.in
*** gcc-11.3.0/fixincludes/fixinc.in	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/fixincludes/fixinc.in	Fri May  6 07:30:56 2022
*************** then echo "All directories (including li
*** 258,269 ****
       echo $all_dirs
  fi
  
! for file in $all_dirs; do
!   rm -rf $LIB/$file
!   if [ ! -d $LIB/$file ]
!   then mkdir $LIB/$file
!   fi
! done
  mkdir $LIB/root
  
  # # # # # # # # # # # # # # # # # # # # #
--- 258,268 ----
       echo $all_dirs
  fi
  
! OLDDIR=`${PWDCMD}`
! cd $LIB
! echo "$all_dirs" | xargs mkdir -p
! cd ${OLDDIR}
! 
  mkdir $LIB/root
  
  # # # # # # # # # # # # # # # # # # # # #
diff -Nrcpad gcc-11.3.0/fixincludes/fixincl.c gcc-12.1.0/fixincludes/fixincl.c
*** gcc-11.3.0/fixincludes/fixincl.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/fixincludes/fixincl.c	Fri May  6 07:30:56 2022
*************** process (void)
*** 1352,1361 ****
  
    if (access (pz_curr_file, R_OK) != 0)
      {
!       int erno = errno;
!       fprintf (stderr, "Cannot access %s from %s\n\terror %d (%s)\n",
!                pz_curr_file, getcwd ((char *) NULL, MAXPATHLEN),
!                erno, xstrerror (erno));
        return;
      }
  
--- 1352,1369 ----
  
    if (access (pz_curr_file, R_OK) != 0)
      {
!       /* It may happens if for e. g. the distro ships some broken symlinks
! 	 in /usr/include.  */
! 
!       /* "INPUT" is exported in fixinc.sh, which is the pwd where fixincl
! 	 runs.  It's used instead of getcwd to avoid allocating a buffer
! 	 with unknown length.  */
!       const char *cwd = getenv ("INPUT");
!       if (!cwd)
! 	cwd = "the working directory";
! 
!       fprintf (stderr, "Cannot access %s from %s: %s\n", pz_curr_file, cwd,
! 	       xstrerror (errno));
        return;
      }
  
diff -Nrcpad gcc-11.3.0/fixincludes/fixincl.x gcc-12.1.0/fixincludes/fixincl.x
*** gcc-11.3.0/fixincludes/fixincl.x	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/fixincludes/fixincl.x	Fri May  6 07:30:56 2022
***************
*** 2,12 ****
   *
   * DO NOT EDIT THIS FILE   (fixincl.x)
   *
!  * It has been AutoGen-ed  July  1, 2021 at 03:44:46 PM by AutoGen 5.18.7
   * From the definitions    inclhack.def
   * and the template file   fixincl
   */
! /* DO NOT SVN-MERGE THIS FILE, EITHER Thu Jul  1 15:44:46 CEST 2021
   *
   * You must regenerate it.  Use the ./genfixes script.
   *
--- 2,12 ----
   *
   * DO NOT EDIT THIS FILE   (fixincl.x)
   *
!  * It has been AutoGen-ed  February 27, 2022 at 07:47:03 PM by AutoGen 5.18.16
   * From the definitions    inclhack.def
   * and the template file   fixincl
   */
! /* DO NOT SVN-MERGE THIS FILE, EITHER Sun Feb 27 19:47:03 UTC 2022
   *
   * You must regenerate it.  Use the ./genfixes script.
   *
***************
*** 15,21 ****
   * certain ANSI-incompatible system header files which are fixed to work
   * correctly with ANSI C and placed in a directory that GNU C will search.
   *
!  * This file contains 260 fixup descriptions.
   *
   * See README for more information.
   *
--- 15,21 ----
   * certain ANSI-incompatible system header files which are fixed to work
   * correctly with ANSI C and placed in a directory that GNU C will search.
   *
!  * This file contains 267 fixup descriptions.
   *
   * See README for more information.
   *
*************** static const char* apzDarwin_Ucred__Atom
*** 3566,3571 ****
--- 3566,3608 ----
  
  /* * * * * * * * * * * * * * * * * * * * * * * * * *
   *
+  *  Description of Darwin_Flt_Eval_Method fix
+  */
+ tSCC zDarwin_Flt_Eval_MethodName[] =
+      "darwin_flt_eval_method";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zDarwin_Flt_Eval_MethodList[] =
+   "math.h\0";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzDarwin_Flt_Eval_MethodMachs[] = {
+         "*-*-darwin*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zDarwin_Flt_Eval_MethodSelect0[] =
+        "^#if __FLT_EVAL_METHOD__ == 0$";
+ 
+ #define    DARWIN_FLT_EVAL_METHOD_TEST_CT  1
+ static tTestDesc aDarwin_Flt_Eval_MethodTests[] = {
+   { TT_EGREP,    zDarwin_Flt_Eval_MethodSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Darwin_Flt_Eval_Method
+  */
+ static const char* apzDarwin_Flt_Eval_MethodPatch[] = {
+     "format",
+     "#if __FLT_EVAL_METHOD__ == 0 || __FLT_EVAL_METHOD__ == 16",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
   *  Description of Dec_Intern_Asm fix
   */
  tSCC zDec_Intern_AsmName[] =
*************** static const char* apzHpux11_Cpp_Pow_Inl
*** 4481,4486 ****
--- 4518,4553 ----
  
  /* * * * * * * * * * * * * * * * * * * * * * * * * *
   *
+  *  Description of Hpux_Math_Constexpr fix
+  */
+ tSCC zHpux_Math_ConstexprName[] =
+      "hpux_math_constexpr";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux_Math_ConstexprList[] =
+   "math.h\0";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzHpux_Math_ConstexprMachs[] = {
+         "*-hp-hpux11*",
+         (const char*)NULL };
+ #define HPUX_MATH_CONSTEXPR_TEST_CT  0
+ #define aHpux_Math_ConstexprTests   (tTestDesc*)NULL
+ 
+ /*
+  *  Fix Command Arguments for Hpux_Math_Constexpr
+  */
+ static const char* apzHpux_Math_ConstexprPatch[] = { sed_cmd_z,
+     "-e", "s@^[ \t]*extern[ \t]*const[ \t]*double[ \t]*_DINFINITY;[ \t]*$@#  define _DINFINITY (__builtin_inf ())@",
+     "-e", "s@^[ \t]*extern[ \t]*const[ \t]*float[ \t]*_SINFINITY;[ \t]*$@#    define _SINFINITY (__builtin_inff ())@",
+     "-e", "s@^[ \t]*extern[ \t]*const[ \t]*float[ \t]*_SQNAN;[ \t]*$@#    define _SQNAN (__builtin_nanf (\\\"\\\"))@",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
   *  Description of Hpux10_Ctype_Declarations1 fix
   */
  tSCC zHpux10_Ctype_Declarations1Name[] =
*************** static const char* apzHpux_C99_Inttypes4
*** 5313,5318 ****
--- 5380,5437 ----
  
  /* * * * * * * * * * * * * * * * * * * * * * * * * *
   *
+  *  Description of Hpux_C99_Inttypes5 fix
+  */
+ tSCC zHpux_C99_Inttypes5Name[] =
+      "hpux_c99_inttypes5";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zHpux_C99_Inttypes5List[] =
+   "inttypes.h\0";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzHpux_C99_Inttypes5Machs[] = {
+         "hppa*-hp-hpux11.[01]*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zHpux_C99_Inttypes5Select0[] =
+        "#ifndef[ \t]_KERNEL[ \t]*\n";
+ 
+ #define    HPUX_C99_INTTYPES5_TEST_CT  1
+ static tTestDesc aHpux_C99_Inttypes5Tests[] = {
+   { TT_EGREP,    zHpux_C99_Inttypes5Select0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Hpux_C99_Inttypes5
+  */
+ static const char* apzHpux_C99_Inttypes5Patch[] = {
+     "format",
+     "#ifndef __LP64__\n\
+ #define PRIdPTR\t\tPRId32\n\
+ #define PRIiPTR\t\tPRIi32\n\
+ #define PRIoPTR\t\tPRIo32\n\
+ #define PRIuPTR\t\tPRIu32\n\
+ #define PRIxPTR\t\tPRIx32\n\
+ #define PRIXPTR\t\tPRIX32\n\
+ #else\n\
+ #define PRIdPTR\t\tPRId64\n\
+ #define PRIiPTR\t\tPRIi64\n\
+ #define PRIoPTR\t\tPRIo64\n\
+ #define PRIuPTR\t\tPRIu64\n\
+ #define PRIxPTR\t\tPRIx64\n\
+ #define PRIXPTR\t\tPRIX64\n\
+ #endif\n\n\
+ #ifndef _KERNEL\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
   *  Description of Hpux_Ctype_Macros fix
   */
  tSCC zHpux_Ctype_MacrosName[] =
*************** static const char* apzVxworks_Ioctl_Macr
*** 10125,10156 ****
  
  /* * * * * * * * * * * * * * * * * * * * * * * * * *
   *
!  *  Description of Vxworks_Mkdir_Macro fix
   */
! tSCC zVxworks_Mkdir_MacroName[] =
!      "vxworks_mkdir_macro";
  
  /*
   *  File name selection pattern
   */
! tSCC zVxworks_Mkdir_MacroList[] =
    "sys/stat.h\0";
  /*
   *  Machine/OS name selection pattern
   */
! tSCC* apzVxworks_Mkdir_MacroMachs[] = {
          "*-*-vxworks*",
          (const char*)NULL };
! #define VXWORKS_MKDIR_MACRO_TEST_CT  0
! #define aVxworks_Mkdir_MacroTests   (tTestDesc*)NULL
  
  /*
!  *  Fix Command Arguments for Vxworks_Mkdir_Macro
   */
! static const char* apzVxworks_Mkdir_MacroPatch[] = {
      "format",
!     "%0\n\
! #define mkdir(dir, ...) ((void)0, ##__VA_ARGS__, (mkdir)(dir))\n",
      "extern[\t ]+STATUS[\t ]+mkdir[\t ]*\\([\t ]*const[\t ]+char[\t ]*\\*[\t ]*(|[_[:alpha:]][_[:alnum:]]*)\\)[\t ]*;",
      (char*)NULL };
  
--- 10244,10340 ----
  
  /* * * * * * * * * * * * * * * * * * * * * * * * * *
   *
!  *  Description of Vxworks_Math_H_Fp_C99 fix
   */
! tSCC zVxworks_Math_H_Fp_C99Name[] =
!      "vxworks_math_h_fp_c99";
  
  /*
   *  File name selection pattern
   */
! tSCC zVxworks_Math_H_Fp_C99List[] =
!   "math.h\0";
! /*
!  *  Machine/OS name selection pattern
!  */
! tSCC* apzVxworks_Math_H_Fp_C99Machs[] = {
!         "*-*-vxworks*",
!         (const char*)NULL };
! 
! /*
!  *  content selection pattern - do fix if pattern found
!  */
! tSCC zVxworks_Math_H_Fp_C99Select0[] =
!        "#define HUGE_VAL[ \t]*_ARCH.*";
! 
! /*
!  *  content bypass pattern - skip fix if pattern found
!  */
! tSCC zVxworks_Math_H_Fp_C99Bypass0[] =
!        "#define[ \t]+FP_INFINITE";
! 
! #define    VXWORKS_MATH_H_FP_C99_TEST_CT  2
! static tTestDesc aVxworks_Math_H_Fp_C99Tests[] = {
!   { TT_NEGREP,   zVxworks_Math_H_Fp_C99Bypass0, (regex_t*)NULL },
!   { TT_EGREP,    zVxworks_Math_H_Fp_C99Select0, (regex_t*)NULL }, };
! 
! /*
!  *  Fix Command Arguments for Vxworks_Math_H_Fp_C99
!  */
! static const char* apzVxworks_Math_H_Fp_C99Patch[] = {
!     "format",
!     "\n\
! %0\n\n\
! #if _C99\n\n\
! #define FP_INFINITE  1\n\
! #define FP_NAN       2\n\
! #define FP_NORMAL    (-1)\n\
! #define FP_SUBNORMAL (-2)\n\
! #define FP_ZERO      0\n\n\
! #define fpclassify(x) \\\n\
!   __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, \\\n\
! \t\t       FP_SUBNORMAL, FP_ZERO, (x))\n\n\
! #define signbit(x) __builtin_signbit(x)\n\
! #define isfinite(x) __builtin_isfinite(x)\n\
! #define isnormal(x) __builtin_isnormal(x)\n\
! #define isnan(x) __builtin_isnan(x)\n\
! #define isinf(x) __builtin_isinf(x)\n\n\
! #define isgreater(x, y) __builtin_isgreater((x),(y))\n\
! #define isgreaterequal(x, y) __builtin_isgreaterequal((x),(y))\n\
! #define isless(x, y) __builtin_isless((x),(y))\n\
! #define islessequal(x, y) __builtin_islessequal((x),(y))\n\
! #define islessgreater(x, y) __builtin_islessgreater((x),(y))\n\
! #define isunordered(x, y) __builtin_isunordered((x),(y))\n\n\
! #endif /* _C99 */\n",
!     (char*)NULL };
! 
! /* * * * * * * * * * * * * * * * * * * * * * * * * *
!  *
!  *  Description of Vxworks_Posix_Mkdir fix
!  */
! tSCC zVxworks_Posix_MkdirName[] =
!      "vxworks_posix_mkdir";
! 
! /*
!  *  File name selection pattern
!  */
! tSCC zVxworks_Posix_MkdirList[] =
    "sys/stat.h\0";
  /*
   *  Machine/OS name selection pattern
   */
! tSCC* apzVxworks_Posix_MkdirMachs[] = {
          "*-*-vxworks*",
          (const char*)NULL };
! #define VXWORKS_POSIX_MKDIR_TEST_CT  0
! #define aVxworks_Posix_MkdirTests   (tTestDesc*)NULL
  
  /*
!  *  Fix Command Arguments for Vxworks_Posix_Mkdir
   */
! static const char* apzVxworks_Posix_MkdirPatch[] = {
      "format",
!     "extern STATUS mkdir(const char *dir, ...);",
      "extern[\t ]+STATUS[\t ]+mkdir[\t ]*\\([\t ]*const[\t ]+char[\t ]*\\*[\t ]*(|[_[:alpha:]][_[:alnum:]]*)\\)[\t ]*;",
      (char*)NULL };
  
*************** static const char* apzVxworks_Needs_Vxwo
*** 10239,10244 ****
--- 10423,10470 ----
  
  /* * * * * * * * * * * * * * * * * * * * * * * * * *
   *
+  *  Description of Vxworks_Next_Yvals fix
+  */
+ tSCC zVxworks_Next_YvalsName[] =
+      "vxworks_next_yvals";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zVxworks_Next_YvalsList[] =
+   "yvals.h\0";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzVxworks_Next_YvalsMachs[] = {
+         "*-*-vxworks*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zVxworks_Next_YvalsSelect0[] =
+        "#include_next <yvals.h>";
+ 
+ #define    VXWORKS_NEXT_YVALS_TEST_CT  1
+ static tTestDesc aVxworks_Next_YvalsTests[] = {
+   { TT_EGREP,    zVxworks_Next_YvalsSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Vxworks_Next_Yvals
+  */
+ static const char* apzVxworks_Next_YvalsPatch[] = {
+     "format",
+     "#if 0 /* GCC does not provide yvals.h.  */\n\
+ %1",
+     "#if .*\n\
+ /\\* .*\n\
+ (#include_next <yvals.h>\n\
+ )",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
   *  Description of Vxworks_Regs fix
   */
  tSCC zVxworks_RegsName[] =
*************** static const char* apzVxworks_RegsPatch[
*** 10275,10280 ****
--- 10501,10553 ----
  
  /* * * * * * * * * * * * * * * * * * * * * * * * * *
   *
+  *  Description of Vxworks_Posix_Open fix
+  */
+ tSCC zVxworks_Posix_OpenName[] =
+      "vxworks_posix_open";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zVxworks_Posix_OpenList[] =
+   "fcntl.h\0";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzVxworks_Posix_OpenMachs[] = {
+         "*-*-vxworks*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zVxworks_Posix_OpenSelect0[] =
+        "extern int.*open \\(const char \\*[ a-z]*, int[ a-z]*, int[ a-z]*\\);";
+ 
+ #define    VXWORKS_POSIX_OPEN_TEST_CT  1
+ static tTestDesc aVxworks_Posix_OpenTests[] = {
+   { TT_EGREP,    zVxworks_Posix_OpenSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Vxworks_Posix_Open
+  */
+ static const char* apzVxworks_Posix_OpenPatch[] = {
+     "format",
+     "%0\n\n\
+ #if defined(__cplusplus)\n\
+ extern \"C++\" {\n\
+   inline int open (const char *, int) __attribute__((__always_inline__));\n\n\
+   inline int\n\
+   open (const char *name, int flags)\n\
+   {\n\
+     return open (name, flags, 0);\n\
+   }\n\
+ }\n\
+ #endif\n",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
   *  Description of Vxworks_Time fix
   */
  tSCC zVxworks_TimeName[] =
*************** static const char* apzVxworks_Iolib_Incl
*** 10392,10397 ****
--- 10665,10709 ----
  
  /* * * * * * * * * * * * * * * * * * * * * * * * * *
   *
+  *  Description of Vxworks_Time_H_Syslib fix
+  */
+ tSCC zVxworks_Time_H_SyslibName[] =
+      "vxworks_time_h_syslib";
+ 
+ /*
+  *  File name selection pattern
+  */
+ tSCC zVxworks_Time_H_SyslibList[] =
+   "time.h\0";
+ /*
+  *  Machine/OS name selection pattern
+  */
+ tSCC* apzVxworks_Time_H_SyslibMachs[] = {
+         "*-*-vxworks*",
+         (const char*)NULL };
+ 
+ /*
+  *  content selection pattern - do fix if pattern found
+  */
+ tSCC zVxworks_Time_H_SyslibSelect0[] =
+        "[ \t]*#define[ \t]+CLOCKS_PER_SEC[ \t]+sysClkRateGet.*";
+ 
+ #define    VXWORKS_TIME_H_SYSLIB_TEST_CT  1
+ static tTestDesc aVxworks_Time_H_SyslibTests[] = {
+   { TT_EGREP,    zVxworks_Time_H_SyslibSelect0, (regex_t*)NULL }, };
+ 
+ /*
+  *  Fix Command Arguments for Vxworks_Time_H_Syslib
+  */
+ static const char* apzVxworks_Time_H_SyslibPatch[] = {
+     "format",
+     "%0\n\
+ #include <sysLib.h>",
+     "#include <vxWorks.h>|#endif.* _YVALS.*",
+     (char*)NULL };
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+  *
   *  Description of X11_Class fix
   */
  tSCC zX11_ClassName[] =
*************** static const char* apzX11_SprintfPatch[]
*** 10560,10568 ****
   *
   *  List of all fixes
   */
! #define REGEX_COUNT          298
  #define MACH_LIST_SIZE_LIMIT 187
! #define FIX_COUNT            260
  
  /*
   *  Enumerate the fixes
--- 10872,10880 ----
   *
   *  List of all fixes
   */
! #define REGEX_COUNT          305
  #define MACH_LIST_SIZE_LIMIT 187
! #define FIX_COUNT            267
  
  /*
   *  Enumerate the fixes
*************** typedef enum {
*** 10652,10657 ****
--- 10964,10970 ----
      DARWIN_STDINT_6_FIXIDX,
      DARWIN_STDINT_7_FIXIDX,
      DARWIN_UCRED__ATOMIC_FIXIDX,
+     DARWIN_FLT_EVAL_METHOD_FIXIDX,
      DEC_INTERN_ASM_FIXIDX,
      DJGPP_WCHAR_H_FIXIDX,
      ECD_CURSOR_FIXIDX,
*************** typedef enum {
*** 10674,10679 ****
--- 10987,10993 ----
      HPPA_HPUX_FP_MACROS_FIXIDX,
      HPUX10_CPP_POW_INLINE_FIXIDX,
      HPUX11_CPP_POW_INLINE_FIXIDX,
+     HPUX_MATH_CONSTEXPR_FIXIDX,
      HPUX10_CTYPE_DECLARATIONS1_FIXIDX,
      HPUX10_CTYPE_DECLARATIONS2_FIXIDX,
      HPUX10_STDIO_DECLARATIONS_FIXIDX,
*************** typedef enum {
*** 10695,10700 ****
--- 11009,11015 ----
      HPUX_C99_INTTYPES2_FIXIDX,
      HPUX_C99_INTTYPES3_FIXIDX,
      HPUX_C99_INTTYPES4_FIXIDX,
+     HPUX_C99_INTTYPES5_FIXIDX,
      HPUX_CTYPE_MACROS_FIXIDX,
      HPUX_EXTERN_ERRNO_FIXIDX,
      HPUX_HTONL_FIXIDX,
*************** typedef enum {
*** 10817,10829 ****
      VOID_NULL_FIXIDX,
      VXWORKS_GCC_PROBLEM_FIXIDX,
      VXWORKS_IOCTL_MACRO_FIXIDX,
!     VXWORKS_MKDIR_MACRO_FIXIDX,
      VXWORKS_NEEDS_VXTYPES_FIXIDX,
      VXWORKS_NEEDS_VXWORKS_FIXIDX,
      VXWORKS_REGS_FIXIDX,
      VXWORKS_TIME_FIXIDX,
      VXWORKS_WRITE_CONST_FIXIDX,
      VXWORKS_IOLIB_INCLUDE_UNISTD_FIXIDX,
      X11_CLASS_FIXIDX,
      X11_CLASS_USAGE_FIXIDX,
      X11_NEW_FIXIDX,
--- 11132,11148 ----
      VOID_NULL_FIXIDX,
      VXWORKS_GCC_PROBLEM_FIXIDX,
      VXWORKS_IOCTL_MACRO_FIXIDX,
!     VXWORKS_MATH_H_FP_C99_FIXIDX,
!     VXWORKS_POSIX_MKDIR_FIXIDX,
      VXWORKS_NEEDS_VXTYPES_FIXIDX,
      VXWORKS_NEEDS_VXWORKS_FIXIDX,
+     VXWORKS_NEXT_YVALS_FIXIDX,
      VXWORKS_REGS_FIXIDX,
+     VXWORKS_POSIX_OPEN_FIXIDX,
      VXWORKS_TIME_FIXIDX,
      VXWORKS_WRITE_CONST_FIXIDX,
      VXWORKS_IOLIB_INCLUDE_UNISTD_FIXIDX,
+     VXWORKS_TIME_H_SYSLIB_FIXIDX,
      X11_CLASS_FIXIDX,
      X11_CLASS_USAGE_FIXIDX,
      X11_NEW_FIXIDX,
*************** tFixDesc fixDescList[ FIX_COUNT ] = {
*** 11251,11256 ****
--- 11570,11580 ----
       DARWIN_UCRED__ATOMIC_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
       aDarwin_Ucred__AtomicTests,   apzDarwin_Ucred__AtomicPatch, 0 },
  
+   {  zDarwin_Flt_Eval_MethodName,    zDarwin_Flt_Eval_MethodList,
+      apzDarwin_Flt_Eval_MethodMachs,
+      DARWIN_FLT_EVAL_METHOD_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aDarwin_Flt_Eval_MethodTests,   apzDarwin_Flt_Eval_MethodPatch, 0 },
+ 
    {  zDec_Intern_AsmName,    zDec_Intern_AsmList,
       apzDec_Intern_AsmMachs,
       DEC_INTERN_ASM_TEST_CT, FD_MACH_ONLY,
*************** tFixDesc fixDescList[ FIX_COUNT ] = {
*** 11361,11366 ****
--- 11685,11695 ----
       HPUX11_CPP_POW_INLINE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
       aHpux11_Cpp_Pow_InlineTests,   apzHpux11_Cpp_Pow_InlinePatch, 0 },
  
+   {  zHpux_Math_ConstexprName,    zHpux_Math_ConstexprList,
+      apzHpux_Math_ConstexprMachs,
+      HPUX_MATH_CONSTEXPR_TEST_CT, FD_MACH_ONLY,
+      aHpux_Math_ConstexprTests,   apzHpux_Math_ConstexprPatch, 0 },
+ 
    {  zHpux10_Ctype_Declarations1Name,    zHpux10_Ctype_Declarations1List,
       apzHpux10_Ctype_Declarations1Machs,
       HPUX10_CTYPE_DECLARATIONS1_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
*************** tFixDesc fixDescList[ FIX_COUNT ] = {
*** 11466,11471 ****
--- 11795,11805 ----
       HPUX_C99_INTTYPES4_TEST_CT, FD_MACH_ONLY,
       aHpux_C99_Inttypes4Tests,   apzHpux_C99_Inttypes4Patch, 0 },
  
+   {  zHpux_C99_Inttypes5Name,    zHpux_C99_Inttypes5List,
+      apzHpux_C99_Inttypes5Machs,
+      HPUX_C99_INTTYPES5_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aHpux_C99_Inttypes5Tests,   apzHpux_C99_Inttypes5Patch, 0 },
+ 
    {  zHpux_Ctype_MacrosName,    zHpux_Ctype_MacrosList,
       apzHpux_Ctype_MacrosMachs,
       HPUX_CTYPE_MACROS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
*************** tFixDesc fixDescList[ FIX_COUNT ] = {
*** 12076,12085 ****
       VXWORKS_IOCTL_MACRO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
       aVxworks_Ioctl_MacroTests,   apzVxworks_Ioctl_MacroPatch, 0 },
  
!   {  zVxworks_Mkdir_MacroName,    zVxworks_Mkdir_MacroList,
!      apzVxworks_Mkdir_MacroMachs,
!      VXWORKS_MKDIR_MACRO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
!      aVxworks_Mkdir_MacroTests,   apzVxworks_Mkdir_MacroPatch, 0 },
  
    {  zVxworks_Needs_VxtypesName,    zVxworks_Needs_VxtypesList,
       apzVxworks_Needs_VxtypesMachs,
--- 12410,12424 ----
       VXWORKS_IOCTL_MACRO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
       aVxworks_Ioctl_MacroTests,   apzVxworks_Ioctl_MacroPatch, 0 },
  
!   {  zVxworks_Math_H_Fp_C99Name,    zVxworks_Math_H_Fp_C99List,
!      apzVxworks_Math_H_Fp_C99Machs,
!      VXWORKS_MATH_H_FP_C99_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
!      aVxworks_Math_H_Fp_C99Tests,   apzVxworks_Math_H_Fp_C99Patch, 0 },
! 
!   {  zVxworks_Posix_MkdirName,    zVxworks_Posix_MkdirList,
!      apzVxworks_Posix_MkdirMachs,
!      VXWORKS_POSIX_MKDIR_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
!      aVxworks_Posix_MkdirTests,   apzVxworks_Posix_MkdirPatch, 0 },
  
    {  zVxworks_Needs_VxtypesName,    zVxworks_Needs_VxtypesList,
       apzVxworks_Needs_VxtypesMachs,
*************** tFixDesc fixDescList[ FIX_COUNT ] = {
*** 12091,12101 ****
--- 12430,12450 ----
       VXWORKS_NEEDS_VXWORKS_TEST_CT, FD_MACH_ONLY,
       aVxworks_Needs_VxworksTests,   apzVxworks_Needs_VxworksPatch, 0 },
  
+   {  zVxworks_Next_YvalsName,    zVxworks_Next_YvalsList,
+      apzVxworks_Next_YvalsMachs,
+      VXWORKS_NEXT_YVALS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aVxworks_Next_YvalsTests,   apzVxworks_Next_YvalsPatch, 0 },
+ 
    {  zVxworks_RegsName,    zVxworks_RegsList,
       apzVxworks_RegsMachs,
       VXWORKS_REGS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
       aVxworks_RegsTests,   apzVxworks_RegsPatch, 0 },
  
+   {  zVxworks_Posix_OpenName,    zVxworks_Posix_OpenList,
+      apzVxworks_Posix_OpenMachs,
+      VXWORKS_POSIX_OPEN_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aVxworks_Posix_OpenTests,   apzVxworks_Posix_OpenPatch, 0 },
+ 
    {  zVxworks_TimeName,    zVxworks_TimeList,
       apzVxworks_TimeMachs,
       VXWORKS_TIME_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
*************** tFixDesc fixDescList[ FIX_COUNT ] = {
*** 12111,12116 ****
--- 12460,12470 ----
       VXWORKS_IOLIB_INCLUDE_UNISTD_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
       aVxworks_Iolib_Include_UnistdTests,   apzVxworks_Iolib_Include_UnistdPatch, 0 },
  
+   {  zVxworks_Time_H_SyslibName,    zVxworks_Time_H_SyslibList,
+      apzVxworks_Time_H_SyslibMachs,
+      VXWORKS_TIME_H_SYSLIB_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+      aVxworks_Time_H_SyslibTests,   apzVxworks_Time_H_SyslibPatch, 0 },
+ 
    {  zX11_ClassName,    zX11_ClassList,
       apzX11_ClassMachs,
       X11_CLASS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
diff -Nrcpad gcc-11.3.0/fixincludes/inclhack.def gcc-12.1.0/fixincludes/inclhack.def
*** gcc-11.3.0/fixincludes/inclhack.def	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/fixincludes/inclhack.def	Fri May  6 07:30:56 2022
*************** fix = {
*** 1767,1772 ****
--- 1767,1783 ----
      test_text = ""; /* Don't provide this for wrap fixes.  */
  };
  
+ /*  The darwin headers don't accept __FLT_EVAL_METHOD__ == 16.  */
+ fix = {
+     hackname  = darwin_flt_eval_method;
+     mach      = "*-*-darwin*";
+     files     = math.h;
+     select    = "^#if __FLT_EVAL_METHOD__ == 0$";
+     c_fix     = format;
+     c_fix_arg = "#if __FLT_EVAL_METHOD__ == 0 || __FLT_EVAL_METHOD__ == 16";
+     test_text = "#if __FLT_EVAL_METHOD__ == 0";
+ };
+ 
  /*
   *  Fix <c_asm.h> on Digital UNIX V4.0:
   *  It contains a prototype for a DEC C internal asm() function,
*************** fix = {
*** 2272,2277 ****
--- 2283,2306 ----
  };
  
  /*
+  * This hack fixes the declarations of _DINFINITY, _SINFINITY and _SQNAN.
+  */
+ fix = {
+     hackname  = hpux_math_constexpr;
+     mach      = "*-hp-hpux11*";
+     files     = math.h;
+     sed       = "s@^[ \t]*extern[ \t]*const[ \t]*double[ \t]*_DINFINITY;"
+ 	"[ \t]*$@#  define _DINFINITY (__builtin_inf ())@";
+     sed       = "s@^[ \t]*extern[ \t]*const[ \t]*float[ \t]*_SINFINITY;"
+ 	"[ \t]*$@#    define _SINFINITY (__builtin_inff ())@";
+     sed       = "s@^[ \t]*extern[ \t]*const[ \t]*float[ \t]*_SQNAN;"
+ 	"[ \t]*$@#    define _SQNAN (__builtin_nanf (\\\"\\\"))@";
+     test_text = "  extern const double _DINFINITY;\n"
+ 		"  extern const float _SINFINITY;\n"
+ 		"  extern const float _SQNAN;";
+ };
+ 
+ /*
   *  Fix hpux 10.X missing ctype declarations 1
   */
  fix = {
*************** fix = {
*** 2669,2674 ****
--- 2698,2731 ----
  };
  
  /*
+  * Fix missing PRIdPTR defines in inttypes.h
+  */
+ fix = {
+     hackname  = hpux_c99_inttypes5;
+     mach      = "hppa*-hp-hpux11.[01]*";
+     files     = inttypes.h;
+     select    = "#ifndef[ \t]_KERNEL[ \t]*\n";
+     c_fix     = format;
+     c_fix_arg = "#ifndef __LP64__\n"
+ 		"#define PRIdPTR\t\tPRId32\n"
+ 		"#define PRIiPTR\t\tPRIi32\n"
+ 		"#define PRIoPTR\t\tPRIo32\n"
+ 		"#define PRIuPTR\t\tPRIu32\n"
+ 		"#define PRIxPTR\t\tPRIx32\n"
+ 		"#define PRIXPTR\t\tPRIX32\n"
+ 		"#else\n"
+ 		"#define PRIdPTR\t\tPRId64\n"
+ 		"#define PRIiPTR\t\tPRIi64\n"
+ 		"#define PRIoPTR\t\tPRIo64\n"
+ 		"#define PRIuPTR\t\tPRIu64\n"
+ 		"#define PRIxPTR\t\tPRIx64\n"
+ 		"#define PRIXPTR\t\tPRIX64\n"
+ 		"#endif\n\n"
+ 		"#ifndef _KERNEL\n";
+     test_text = "#ifndef _KERNEL\n";
+ };
+ 
+ /*
   *  Fix hpux broken ctype macros
   */
  fix = {
*************** fix = {
*** 3154,3160 ****
      c_fix     = machine_name;
  
      test_text = "/* MACH_DIFF: */\n"
!     "#if defined( i386 ) || defined( sparc ) || defined( vax )"
      "\n/* no uniform test, so be careful  :-) */";
  };
  
--- 3211,3218 ----
      c_fix     = machine_name;
  
      test_text = "/* MACH_DIFF: */\n"
!     "#if defined( i386 ) || defined( sparc ) || defined( vax ) || "
!     "defined( linux ) || __has_include ( <linux.h> )"
      "\n/* no uniform test, so be careful  :-) */";
  };
  
*************** fix = {
*** 5117,5139 ****
          
      test_text   = "extern int ioctl ( int asdf1234, int jkl , int qwerty ) ;";
  };
  
  /*
!  *  Wrap VxWorks mkdir to be posix compliant
   */
  fix = {
!     hackname    = vxworks_mkdir_macro;
      files       = sys/stat.h;
      mach        = "*-*-vxworks*";
  
      c_fix       = format;
!     c_fix_arg   = "%0\n"
!                 "#define mkdir(dir, ...) ((void)0, ##__VA_ARGS__, (mkdir)(dir))\n";
      c_fix_arg   = "extern[\t ]+STATUS[\t ]+mkdir[\t ]*"
                  "\\([\t ]*const[\t ]+char[\t ]*\\*[\t ]*" /* arg type */
                  "(|[_[:alpha:]][_[:alnum:]]*)" /* arg name (optional) */
                  "\\)[\t ]*;";
!         
      test_text   = "extern STATUS mkdir (const char * _qwerty) ;";
  };
  
--- 5175,5249 ----
          
      test_text   = "extern int ioctl ( int asdf1234, int jkl , int qwerty ) ;";
  };
+  
+ /*
+  * Provide C99 FP classification support in VxWorks math.h if
+  * not already there. Note the strict expectation on #define without
+  * whitespaces in the bypass expression, which "works" for
+  * the system headers we have met and doesn't match test texts for
+  * other hacks, found in the test baseline.
+  */
+ fix = {
+     hackname  = vxworks_math_h_fp_c99;
+     mach      = "*-*-vxworks*";
+     files     = math.h;
+     bypass    = "#define[ \t]+FP_INFINITE";
+     select    = "#define HUGE_VAL[ \t]*_ARCH.*";
+     c_fix     = format;
+     c_fix_arg = << _EOArg_
+ 
+ %0
+ 
+ #if _C99
+ 
+ #define FP_INFINITE  1
+ #define FP_NAN       2
+ #define FP_NORMAL    (-1)
+ #define FP_SUBNORMAL (-2)
+ #define FP_ZERO      0
+ 
+ #define fpclassify(x) \
+   __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, \
+ 		       FP_SUBNORMAL, FP_ZERO, (x))
+ 
+ #define signbit(x) __builtin_signbit(x)
+ #define isfinite(x) __builtin_isfinite(x)
+ #define isnormal(x) __builtin_isnormal(x)
+ #define isnan(x) __builtin_isnan(x)
+ #define isinf(x) __builtin_isinf(x)
+ 
+ #define isgreater(x, y) __builtin_isgreater((x),(y))
+ #define isgreaterequal(x, y) __builtin_isgreaterequal((x),(y))
+ #define isless(x, y) __builtin_isless((x),(y))
+ #define islessequal(x, y) __builtin_islessequal((x),(y))
+ #define islessgreater(x, y) __builtin_islessgreater((x),(y))
+ #define isunordered(x, y) __builtin_isunordered((x),(y))
+ 
+ #endif /* _C99 */
+ 
+ _EOArg_;
+ 
+     test_text  = "#define HUGE_VAL _ARCH_HUGH_VAL";
+ };
  
  /*
!  *  mkdir's posix interface expects two arguments.  While the RTP VxWorks
!  *  API is fine, the kernel version handles only one.  We used to expose
!  *  a macro and this didn't play nice with uses such as posix:mkdir(x, y)
!  *  in libstdc++, so we expose a vararg prototype instead.
   */
  fix = {
!     hackname    = vxworks_posix_mkdir;
      files       = sys/stat.h;
      mach        = "*-*-vxworks*";
  
      c_fix       = format;
!     c_fix_arg   = "extern STATUS mkdir(const char *dir, ...);";
      c_fix_arg   = "extern[\t ]+STATUS[\t ]+mkdir[\t ]*"
                  "\\([\t ]*const[\t ]+char[\t ]*\\*[\t ]*" /* arg type */
                  "(|[_[:alpha:]][_[:alnum:]]*)" /* arg name (optional) */
                  "\\)[\t ]*;";
! 
      test_text   = "extern STATUS mkdir (const char * _qwerty) ;";
  };
  
*************** fix = {
*** 5169,5174 ****
--- 5279,5306 ----
  };
  
  /*
+  * yvals.h on VxWorks-6 expects the toolchain to provide its own
+  * version of the header, which we don't do.  Arrange to fallback
+  * on the system definition.
+  */
+ fix = {
+     hackname  = vxworks_next_yvals;
+     mach      = "*-*-vxworks*";
+     files     = yvals.h;
+     select    = "#include_next <yvals.h>";
+     c_fix     = format;
+     c_fix_arg = "#if 0 /* GCC does not provide yvals.h.  */\n%1";
+     c_fix_arg = "#if .*\n"
+                 "/\\* .*\n"
+                 "(#include_next <yvals.h>\n)";
+ 
+     test_text = "#if (defined(__cplusplus) && defined(__GNUC__))\n"
+                 "/* GCC C++ has it's own yvals.h */\n"
+                 "#include_next <yvals.h>\n"
+                 "#else\n";
+ };
+ 
+ /*
   *  Make it so VxWorks does not include gcc/regs.h accidentally
   */
  fix = {
*************** fix = {
*** 5183,5188 ****
--- 5315,5361 ----
  };
  
  /*
+  * Likewise, open's posix interface allows two or three arguments and
+  * some VxWorks headers expose only a strict 3 arguments version.  Merely
+  * changing the prototype into a varargs one is risky as the implementation
+  * would receive garbage in the third arg for calls providing only two,
+  * which libstdc++ does.  We simply provide an always inline overload for C++
+  * instead.
+  *
+  * Both fcntl.h and ioLib.h might "feature" such a prototype for _WRS_KERNEL.
+  * The latter #includes the former though (since 1992 according to the embedded
+  * log), so just leave ioLib.h alone.
+  */
+ fix = {
+     hackname    = vxworks_posix_open;
+     mach        = "*-*-vxworks*";
+     files       = fcntl.h;
+ 
+     select      = "extern int.*open \\(const char \\*[ a-z]*, int[ a-z]*, int[ a-z]*\\);";
+     c_fix       = format;
+     c_fix_arg = << _EOArg_
+ %0
+ 
+ #if defined(__cplusplus)
+ extern "C++" {
+   inline int open (const char *, int) __attribute__((__always_inline__));
+ 
+   inline int
+   open (const char *name, int flags)
+   {
+     return open (name, flags, 0);
+   }
+ }
+ #endif
+ 
+ _EOArg_;
+ 
+     test_text   =
+       "extern int open (const char *, int, int);\n"
+       "extern int open (const char *name, int flags, int mode );\n";
+ };
+ 
+ /*
   *  Another bad dependency in VxWorks 5.2 <time.h>.
   */
  fix = {
*************** fix = {
*** 5243,5248 ****
--- 5416,5453 ----
  };
  
  /*
+  *  Make sure there is a visible prototype of sysClkRateGet() when
+  *  CLOCKS_PER_SEC is #defined to that in time.h for VxWorks.  This would
+  *  typically be provided by sysLib.h.
+  *
+  *  The new #include has to come after the one for vxWorks.h in kernel headers
+  *  and vxWorks.h is typically not #included in RTP headers. yvals.h is
+  *  conditionally included in the latter, instead, and new #include are better
+  *  inserted after that.
+  */
+ fix = {
+     hackname    = vxworks_time_h_syslib;
+     files       = time.h;
+     mach        = "*-*-vxworks*";
+     select      = "[ \t]*#define[ \t]+CLOCKS_PER_SEC[ \t]+sysClkRateGet.*";
+ 
+     c_fix       = format;
+     c_fix_arg   = "%0\n#include <sysLib.h>";
+     c_fix_arg   = "#include <vxWorks.h>|#endif.* _YVALS.*";
+ 
+     test_text   =
+     "/* kernel header pattern:  */\n"
+     "#include <vxWorks.h>\n"
+     "\n"
+     "/* rtp header pattern:  */\n"
+     "#ifndef _YVALS\n"
+     "#include <yvals.h>\n"
+     "#endif /* _YVALS */\n"
+     "\n"
+     "#define CLOCKS_PER_SEC  sysClkRateGet()";
+ };
+ 
+ /*
   *  There are several name conflicts with C++ reserved words in X11 header
   *  files.  These are fixed in some versions, so don't do the fixes if
   *  we find __cplusplus in the file.  These were found on the RS/6000.
diff -Nrcpad gcc-11.3.0/fixincludes/tests/base/fcntl.h gcc-12.1.0/fixincludes/tests/base/fcntl.h
*** gcc-11.3.0/fixincludes/tests/base/fcntl.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/fixincludes/tests/base/fcntl.h	Fri May  6 07:30:56 2022
*************** extern "C" {
*** 18,23 ****
--- 18,56 ----
  #if defined( AAB_AIX_FCNTL_CHECK )
  
  #endif  /* AAB_AIX_FCNTL_CHECK */
+ 
+ 
+ #if defined( VXWORKS_POSIX_OPEN_CHECK )
+ extern int open (const char *, int, int);
+ 
+ #if defined(__cplusplus)
+ extern "C++" {
+   inline int open (const char *, int) __attribute__((__always_inline__));
+ 
+   inline int
+   open (const char *name, int flags)
+   {
+     return open (name, flags, 0);
+   }
+ }
+ #endif
+ 
+ extern int open (const char *name, int flags, int mode );
+ 
+ #if defined(__cplusplus)
+ extern "C++" {
+   inline int open (const char *, int) __attribute__((__always_inline__));
+ 
+   inline int
+   open (const char *name, int flags)
+   {
+     return open (name, flags, 0);
+   }
+ }
+ #endif
+ 
+ 
+ #endif  /* VXWORKS_POSIX_OPEN_CHECK */
  #ifdef __cplusplus
  }
  #endif
diff -Nrcpad gcc-11.3.0/fixincludes/tests/base/inttypes.h gcc-12.1.0/fixincludes/tests/base/inttypes.h
*** gcc-11.3.0/fixincludes/tests/base/inttypes.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/fixincludes/tests/base/inttypes.h	Fri May  6 07:30:56 2022
***************
*** 42,44 ****
--- 42,66 ----
  #define SCNuMAX 	 SCNu32
  
  #endif  /* HPUX_C99_INTTYPES4_CHECK */
+ 
+ 
+ #if defined( HPUX_C99_INTTYPES5_CHECK )
+ #ifndef __LP64__
+ #define PRIdPTR		PRId32
+ #define PRIiPTR		PRIi32
+ #define PRIoPTR		PRIo32
+ #define PRIuPTR		PRIu32
+ #define PRIxPTR		PRIx32
+ #define PRIXPTR		PRIX32
+ #else
+ #define PRIdPTR		PRId64
+ #define PRIiPTR		PRIi64
+ #define PRIoPTR		PRIo64
+ #define PRIuPTR		PRIu64
+ #define PRIxPTR		PRIx64
+ #define PRIXPTR		PRIX64
+ #endif
+ 
+ #ifndef _KERNEL
+ 
+ #endif  /* HPUX_C99_INTTYPES5_CHECK */
diff -Nrcpad gcc-11.3.0/fixincludes/tests/base/math.h gcc-12.1.0/fixincludes/tests/base/math.h
*** gcc-11.3.0/fixincludes/tests/base/math.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/fixincludes/tests/base/math.h	Fri May  6 07:30:56 2022
***************
*** 30,35 ****
--- 30,40 ----
  #endif  /* DARWIN_9_LONG_DOUBLE_FUNCS_2_CHECK */
  
  
+ #if defined( DARWIN_FLT_EVAL_METHOD_CHECK )
+ #if __FLT_EVAL_METHOD__ == 0 || __FLT_EVAL_METHOD__ == 16
+ #endif  /* DARWIN_FLT_EVAL_METHOD_CHECK */
+ 
+ 
  #if defined( HPPA_HPUX_FP_MACROS_CHECK )
  #endif /* _INCLUDE_HPUX_SOURCE */
  
***************
*** 52,57 ****
--- 57,69 ----
  #endif  /* HPUX11_CPP_POW_INLINE_CHECK */
  
  
+ #if defined( HPUX_MATH_CONSTEXPR_CHECK )
+ #  define _DINFINITY (__builtin_inf ())
+ #    define _SINFINITY (__builtin_inff ())
+ #    define _SQNAN (__builtin_nanf (""))
+ #endif  /* HPUX_MATH_CONSTEXPR_CHECK */
+ 
+ 
  #if defined( HPUX11_FABSF_CHECK )
  #ifdef _PA_RISC
  #ifndef __cplusplus
*************** extern int class();
*** 99,104 ****
--- 111,150 ----
  int foo;
  #endif
  #endif  /* STRICT_ANSI_NOT_CTD_CHECK */
+ 
+ 
+ #if defined( VXWORKS_MATH_H_FP_C99_CHECK )
+ 
+ #define HUGE_VAL _ARCH_HUGH_VAL
+ 
+ #if _C99
+ 
+ #define FP_INFINITE  1
+ #define FP_NAN       2
+ #define FP_NORMAL    (-1)
+ #define FP_SUBNORMAL (-2)
+ #define FP_ZERO      0
+ 
+ #define fpclassify(x) \
+   __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, \
+ 		       FP_SUBNORMAL, FP_ZERO, (x))
+ 
+ #define signbit(x) __builtin_signbit(x)
+ #define isfinite(x) __builtin_isfinite(x)
+ #define isnormal(x) __builtin_isnormal(x)
+ #define isnan(x) __builtin_isnan(x)
+ #define isinf(x) __builtin_isinf(x)
+ 
+ #define isgreater(x, y) __builtin_isgreater((x),(y))
+ #define isgreaterequal(x, y) __builtin_isgreaterequal((x),(y))
+ #define isless(x, y) __builtin_isless((x),(y))
+ #define islessequal(x, y) __builtin_islessequal((x),(y))
+ #define islessgreater(x, y) __builtin_islessgreater((x),(y))
+ #define isunordered(x, y) __builtin_isunordered((x),(y))
+ 
+ #endif /* _C99 */
+ 
+ #endif  /* VXWORKS_MATH_H_FP_C99_CHECK */
  #ifdef __cplusplus
  #undef exception
  #endif
diff -Nrcpad gcc-11.3.0/fixincludes/tests/base/sys/stat.h gcc-12.1.0/fixincludes/tests/base/sys/stat.h
*** gcc-11.3.0/fixincludes/tests/base/sys/stat.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/fixincludes/tests/base/sys/stat.h	Fri May  6 07:30:56 2022
*************** extern int fchmod(int, mode_t);
*** 28,38 ****
  #endif  /* RS6000_FCHMOD_CHECK */
  
  
! #if defined( VXWORKS_MKDIR_MACRO_CHECK )
! extern STATUS mkdir (const char * _qwerty) ;
! #define mkdir(dir, ...) ((void)0, ##__VA_ARGS__, (mkdir)(dir))
! 
! #endif  /* VXWORKS_MKDIR_MACRO_CHECK */
  
  
  #if defined( VXWORKS_NEEDS_VXWORKS_CHECK )
--- 28,36 ----
  #endif  /* RS6000_FCHMOD_CHECK */
  
  
! #if defined( VXWORKS_POSIX_MKDIR_CHECK )
! extern STATUS mkdir(const char *dir, ...);
! #endif  /* VXWORKS_POSIX_MKDIR_CHECK */
  
  
  #if defined( VXWORKS_NEEDS_VXWORKS_CHECK )
diff -Nrcpad gcc-11.3.0/fixincludes/tests/base/testing.h gcc-12.1.0/fixincludes/tests/base/testing.h
*** gcc-11.3.0/fixincludes/tests/base/testing.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/fixincludes/tests/base/testing.h	Fri May  6 07:30:56 2022
*************** BSD43__IOWR('T', 1) /* Some are multi-li
*** 64,70 ****
  
  #if defined( MACHINE_NAME_CHECK )
  /* MACH_DIFF: */
! #if defined( i386 ) || defined( sparc ) || defined( vax )
  /* no uniform test, so be careful  :-) */
  #endif  /* MACHINE_NAME_CHECK */
  
--- 64,70 ----
  
  #if defined( MACHINE_NAME_CHECK )
  /* MACH_DIFF: */
! #if defined( i386 ) || defined( sparc ) || defined( vax ) || defined( linux ) || __has_include ( <linux.h> )
  /* no uniform test, so be careful  :-) */
  #endif  /* MACHINE_NAME_CHECK */
  
diff -Nrcpad gcc-11.3.0/fixincludes/tests/base/time.h gcc-12.1.0/fixincludes/tests/base/time.h
*** gcc-11.3.0/fixincludes/tests/base/time.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/fixincludes/tests/base/time.h	Fri May  6 07:30:56 2022
*************** typedef void (*__gcc_VOIDFUNCPTR) ();
*** 25,27 ****
--- 25,42 ----
  #endif
  #define VOIDFUNCPTR __gcc_VOIDFUNCPTR
  #endif  /* VXWORKS_TIME_CHECK */
+ 
+ 
+ #if defined( VXWORKS_TIME_H_SYSLIB_CHECK )
+ /* kernel header pattern:  */
+ #include <vxWorks.h>
+ #include <sysLib.h>
+ 
+ /* rtp header pattern:  */
+ #ifndef _YVALS
+ #include <yvals.h>
+ #endif /* _YVALS */
+ #include <sysLib.h>
+ 
+ #define CLOCKS_PER_SEC  sysClkRateGet()
+ #endif  /* VXWORKS_TIME_H_SYSLIB_CHECK */
diff -Nrcpad gcc-11.3.0/fixincludes/tests/base/yvals.h gcc-12.1.0/fixincludes/tests/base/yvals.h
*** gcc-11.3.0/fixincludes/tests/base/yvals.h	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/fixincludes/tests/base/yvals.h	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,17 ----
+ /*  DO NOT EDIT THIS FILE.
+ 
+     It has been auto-edited by fixincludes from:
+ 
+ 	"fixinc/tests/inc/yvals.h"
+ 
+     This had to be done to correct non-standard usages in the
+     original, manufacturer supplied header file.  */
+ 
+ 
+ 
+ #if defined( VXWORKS_NEXT_YVALS_CHECK )
+ #if 0 /* GCC does not provide yvals.h.  */
+ #include_next <yvals.h>
+ #else
+ 
+ #endif  /* VXWORKS_NEXT_YVALS_CHECK */
diff -Nrcpad gcc-11.3.0/gcc/ABOUT-GCC-NLS gcc-12.1.0/gcc/ABOUT-GCC-NLS
*** gcc-11.3.0/gcc/ABOUT-GCC-NLS	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ABOUT-GCC-NLS	Fri May  6 07:30:56 2022
*************** configure GCC with --enable-maintainer-m
*** 49,55 ****
  rebuilt.
  
  
! Copyright (C) 1998-2021 Free Software Foundation, Inc.
  
  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
--- 49,55 ----
  rebuilt.
  
  
! Copyright (C) 1998-2022 Free Software Foundation, Inc.
  
  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
diff -Nrcpad gcc-11.3.0/gcc/BASE-VER gcc-12.1.0/gcc/BASE-VER
*** gcc-11.3.0/gcc/BASE-VER	Thu Apr 21 07:59:17 2022
--- gcc-12.1.0/gcc/BASE-VER	Fri May  6 07:30:56 2022
***************
*** 1 ****
! 11.3.0
--- 1 ----
! 12.1.0
diff -Nrcpad gcc-11.3.0/gcc/ChangeLog gcc-12.1.0/gcc/ChangeLog
*** gcc-11.3.0/gcc/ChangeLog	Thu Apr 21 07:59:16 2022
--- gcc-12.1.0/gcc/ChangeLog	Fri May  6 07:30:56 2022
***************
*** 1,11276 ****
! 2022-04-21  Release Manager
! 
! 	* GCC 11.3.0 released.
! 
! 2022-04-19  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	Backported from master:
! 	2022-04-18  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	* doc/install.texi <CRIS>: Remove references to removed websites and
! 	adjust for cris-*-elf being the only remaining toolchain.
! 
! 2022-04-19  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	Backported from master:
! 	2022-04-18  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	* doc/invoke.texi <CRIS>: Remove references to options for removed
! 	subtarget cris-axis-linux-gnu and tweak wording accordingly.
! 
! 2022-04-14  Andreas Krebbel  <krebbel@linux.ibm.com>
! 
! 	Backported from master:
! 	2022-04-12  Andreas Krebbel  <krebbel@linux.ibm.com>
! 
! 	* common/config/s390/s390-common.c: Rename PF_ARCH14 to PF_Z16.
! 	* config.gcc: Add z16 as march/mtune switch.
! 	* config/s390/driver-native.c (s390_host_detect_local_cpu):
! 	Recognize z16 with -march=native.
! 	* config/s390/s390-opts.h (enum processor_type): Rename
! 	PROCESSOR_ARCH14 to PROCESSOR_3931_Z16.
! 	* config/s390/s390.c (PROCESSOR_ARCH14): Rename to ...
! 	(PROCESSOR_3931_Z16): ... throughout the file.
! 	(s390_processor processor_table): Add z16 as cpu string.
! 	* config/s390/s390.h (enum processor_flags): Rename PF_ARCH14 to
! 	PF_Z16.
! 	(TARGET_CPU_ARCH14): Rename to ...
! 	(TARGET_CPU_Z16): ... this.
! 	(TARGET_CPU_ARCH14_P): Rename to ...
! 	(TARGET_CPU_Z16_P): ... this.
! 	(TARGET_ARCH14): Rename to ...
! 	(TARGET_Z16): ... this.
! 	(TARGET_ARCH14_P): Rename to ...
! 	(TARGET_Z16_P): ... this.
! 	* config/s390/s390.md (cpu_facility): Rename arch14 to z16 and
! 	check TARGET_Z16 instead of TARGET_ARCH14.
! 	* config/s390/s390.opt: Add z16 to processor_type.
! 	* doc/invoke.texi: Document z16 and arch14.
! 
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 	    Vladimir Makarov  <vmakarov@redhat.com>
! 
! 	PR target/104117
! 	* config/rs6000/rs6000.c (darwin_rs6000_legitimate_lo_sum_const_p):
! 	Check for UNSPEC_MACHOPIC_OFFSET wrappers on symbolic addresses when
! 	emitting PIC code.
! 	(legitimate_lo_sum_address_p): Likewise.
! 	(rs6000_legitimize_address): Do not apply the TLS processing to
! 	Darwin.
! 	* config/rs6000/darwin.md (@machopic_high_<mode>): New.
! 	(@machopic_low_<mode>): New.
! 	* config/rs6000/predicates.md (macho_pic_address): New.
! 
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	PR target/80556
! 	* config/darwin-driver.c (darwin_driver_init): Handle exported
! 	symbols and symbol lists (suppress automatic export of the TLS
! 	symbols).
! 	* config/darwin.c (darwin_rename_builtins): Remove workaround.
! 	* config/darwin.h (LINK_GCC_C_SEQUENCE_SPEC): Likewise.
! 	(REAL_LIBGCC_SPEC): Handle revised library uses.
! 	* config/darwin.opt (nodefaultexport): New.
! 	* config/i386/darwin.h (PR80556_WORKAROUND): Remove.
! 	* config/i386/darwin32-biarch.h (PR80556_WORKAROUND): Likewise.
! 	* config/i386/darwin64-biarch.h (PR80556_WORKAROUND): Likewise.
! 
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* config/darwin-driver.c (darwin_driver_init): Revise comments, handle
! 	filelist and framework options in specs instead of code. Exit from the
! 	option handling early if the command line is definitely enpty.
! 	* config/darwin.h (SUBTARGET_DRIVER_SELF_SPECS): Update to handle link
! 	specs that are really driver ones. Remove setting for the default content
! 	of weak_reference_mismatches
! 	(DARWIN_CC1_SPEC): Likewise.
! 	(CPP_SPEC): Likewise.
! 	(SYSROOT_SPEC): Append space.
! 	(LINK_SYSROOT_SPEC): Remove most driver link specs.
! 	(STANDARD_STARTFILE_PREFIX_2): Update link-related specs.
! 	(STARTFILE_SPEC): Likewise.
! 	(ASM_MMACOSX_VERSION_MIN_SPEC): Fix line wrap.
! 	(ASM_SPEC): Update driver-related specs.
! 	(ASM_FINAL_SPEC): Likewise.
! 	(LINK_COMMAND_SPEC_A): Update 'r' handling to skip gomp and itm when r
! 	or nodefaultlibs is given.
! 	(DSYMUTIL_SPEC): Do not call dsymutil for '-r' link lines.
! 	Update ordering of exclusions, remove duplicate 'v' addition
! 	(collect2 will add this from the main command line).
! 	* config/darwin.opt: Remove now unused option aliases.
! 	* config/i386/darwin.h (EXTRA_ASM_OPTS): Ensure space after opt.
! 	(ASM_SPEC): Update driver-related specs.
! 
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	Backported from master:
! 	2021-11-15  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	PR fortran/102992
! 	* config/darwin.h (TARGET_DTORS_FROM_CXA_ATEXIT): New.
! 	* doc/tm.texi: Regenerated.
! 	* doc/tm.texi.in: Add TARGET_DTORS_FROM_CXA_ATEXIT hook.
! 	* ipa.c (cgraph_build_static_cdtor_1): Return the built
! 	function decl.
! 	(build_cxa_atexit_decl): New.
! 	(build_dso_handle_decl): New.
! 	(build_cxa_dtor_registrations): New.
! 	(compare_cdtor_tu_order): New.
! 	(build_cxa_atexit_fns): New.
! 	(ipa_cdtor_merge): If dtors_from_cxa_atexit is set,
! 	process the DTORs/CTORs accordingly.
! 	(pass_ipa_cdtor_merge::gate): Also run if
! 	dtors_from_cxa_atexit is set.
! 	* target.def (dtors_from_cxa_atexit): New hook.
! 
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	Backported from master:
! 	2021-11-05  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* config/darwin.h (ASM_GENERATE_INTERNAL_LABEL): Add LTRAMP
! 	to the list of symbol prefixes that must be made linker-
! 	visible.
! 
! 2022-04-14  Saagar Jha  <saagar@saagarjha.com>
! 
! 	* config.gcc: Adjust for Darwin21.
! 	* config/darwin-c.c (macosx_version_as_macro): Likewise.
! 	* config/darwin-driver.c (validate_macosx_version_min):
! 	Likewise.
! 	(darwin_find_version_from_kernel): Likewise.
! 
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	Backported from master:
! 	2021-10-13  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* collect2.c (is_lto_object_file): Release simple-object
! 	resources, close files.
! 
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	Backported from master:
! 	2021-09-28  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* config/rs6000/darwin.h (FIXED_R13): Add for PPC64.
! 	(FIRST_SAVED_GP_REGNO): Save from R13 even when it is one
! 	of the fixed regs.
! 
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	Backported from master:
! 	2021-09-19  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* config/darwin.h (LINK_COMMAND_SPEC_A): Use Darwin10
! 	unwinder shim as a convenience library.
! 
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	Backported from master:
! 	2021-09-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* Makefile.in: Remove variables related to applying no-PIE
! 	to the exes on $build.
! 	* configure: Regenerate.
! 	* configure.ac: Remove configuration related to applying
! 	no-PIE to the exes on $build.
! 
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	Backported from master:
! 	2021-08-27  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* config/darwin.c (finalize_ctors): Add a section-start linker-
! 	visible symbol.
! 	(finalize_dtors): Likewise.
! 	* config/darwin.h (MIN_LD64_INIT_TERM_START_LABELS): New.
! 
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	Backported from master:
! 	2021-08-17  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* config/darwin.c (darwin_file_end): Reset and reclaim the
! 	section names table at the end of compile.
! 
! 2022-04-14  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	* configure.ac: Handle --with-dsymutil in the same way as we
! 	do for the assembler and linker.  (DEFAULT_DSYMUTIL): New.
! 	Extract the type and version for the dsymutil configured or
! 	found by the default searches.
! 	* config.in: Regenerated.
! 	* configure: Regenerated.
! 	* collect2.c (do_dsymutil): Handle locating dsymutil in the
! 	same way as for the assembler and  linker.
! 	* config/darwin.h (DSYMUTIL): Delete.
! 	* gcc.c: Report a configured dsymutil correctly.
! 	* exec-tool.in: Allow for dsymutil.
! 	* doc/install.texi: Document --with-dsymutil.
! 
! 2022-04-13  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-04-12  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/105214
! 	* config/i386/i386-expand.c (ix86_emit_i387_log1p): Call
! 	do_pending_stack_adjust.
! 
! 2022-04-13  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-04-12  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR rtl-optimization/105211
! 	* builtins.c (expand_builtin_int_roundingfn_2): If mathfn_built_in_1
! 	fails for TREE_TYPE (arg), retry it with
! 	TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (fndecl))) and if even that
! 	fails, emit call normally.
! 
! 2022-04-13  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-04-08  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/105189
! 	* fold-const.c (make_range_step): Fix up handling of
! 	(unsigned) x +[low, -] ranges for signed x if low fits into
! 	typeof (x).
! 
! 2022-04-13  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-04-06  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR rtl-optimization/104985
! 	* combine.c (struct undo): Add where.regno member.
! 	(do_SUBST_MODE): Rename to ...
! 	(subst_mode): ... this.  Change first argument from rtx * into int,
! 	operate on regno_reg_rtx[regno] and save regno into where.regno.
! 	(SUBST_MODE): Remove.
! 	(try_combine): Use subst_mode instead of SUBST_MODE, change first
! 	argument from regno_reg_rtx[whatever] to whatever.  For UNDO_MODE, use
! 	regno_reg_rtx[undo->where.regno] instead of *undo->where.r.
! 	(undo_to_marker): For UNDO_MODE, use regno_reg_rtx[undo->where.regno]
! 	instead of *undo->where.r.
! 	(simplify_set): Use subst_mode instead of SUBST_MODE, change first
! 	argument from regno_reg_rtx[whatever] to whatever.
! 
! 2022-04-12  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	Backported from master:
! 	2022-04-11  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	PR target/104894
! 	* config/rs6000/rs6000.c (rs6000_sibcall_aix): Handle pcrel sibcalls
! 	to longcall functions.
! 
! 2022-04-12  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2022-04-12  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/105235
! 	* tree-ssa-math-opts.c (execute_cse_conv_1): Clean EH and
! 	return whether the CFG changed.
! 	(execute_cse_sincos_1): Adjust.
! 
! 2022-04-12  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2022-04-12  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/105232
! 	* tree.c (component_ref_size): Bail out for too large
! 	or non-constant sizes.
! 
! 2022-04-12  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2022-04-12  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/105226
! 	* tree-vect-loop-manip.c (vect_loop_versioning): Verify
! 	we can split the exit of an outer loop we choose to version.
! 
! 2022-04-11  Kito Cheng  <kito.cheng@sifive.com>
! 
! 	Backported from master:
! 	2022-04-11  Kito Cheng  <kito.cheng@sifive.com>
  
! 	PR target/104853
! 	* config.gcc: Pass -misa-spec to arch-canonicalize and
! 	multilib-generator.
! 	* config/riscv/arch-canonicalize: Adding -misa-spec option.
! 	(SUPPORTED_ISA_SPEC): New.
! 	(arch_canonicalize): New argument `isa_spec`.
! 	Handle multiple ISA spec versions.
! 	* config/riscv/multilib-generator: Adding -misa-spec option.
  
! 2022-04-11  Kito Cheng  <kito.cheng@sifive.com>
  
  	Backported from master:
! 	2021-08-16  Kito Cheng  <kito.cheng@sifive.com>
! 
! 	* config/riscv/multilib-generator: Support code model option for
! 	multi-lib.
! 	* doc/install.texi: Add document of new option for
! 	--with-multilib-generator.
! 
! 2022-04-08  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2022-04-08  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105198
! 	* tree-predcom.c (find_looparound_phi): Check whether
! 	the found memory location of the entry value is clobbered
! 	inbetween the value we want to use and loop entry.
  
! 2022-04-07  Jan Hubicka  <jh@suse.cz>
  
! 	Backported from master:
! 	2021-11-26  Jan Hubicka  <jh@suse.cz>
  
! 	PR ipa/103432
! 	* ipa-modref.c (update_escape_summary_1): Fix handling of min_flags.
  
! 2022-04-07  Jan Hubicka  <jh@suse.cz>
  
! 	Backported from master:
! 	2021-08-11  Jan Hubicka  <hubicka@ucw.cz>
! 		    Alexandre Oliva  <oliva@adacore.com>
  
! 	* ipa-modref.c (modref_lattice::dump): Fix escape_point's min_flags
! 	dumping.
! 	(modref_lattice::merge_deref): Fix handling of indirect scape points.
! 	(update_escape_summary_1): Likewise.
! 	(update_escape_summary): Likewise.
! 	(ipa_merge_modref_summary_after_inlining): Likewise.
  
! 2022-04-07  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/99121
! 	* gimple-array-bounds.cc (array_bounds_checker::check_mem_ref):
! 	Bail out for non-constant type size.
  
! 2022-04-07  Bernd Edlinger  <bernd.edlinger@hotmail.de>
  
! 	Backported from master:
! 	2021-04-27  Bernd Edlinger  <bernd.edlinger@hotmail.de>
  
! 	PR target/100106
! 	* simplify-rtx.c (simplify_context::simplify_subreg): Check the
! 	memory alignment for the outer mode.
  
! 2022-04-07  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/104497
! 	* gimplify.c (gimplify_compound_lval): Make sure the
! 	base is a non-register if needed and possible.
  
! 2022-04-07  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105053
! 	* tree-vect-loop.c (vect_create_epilog_for_reduction): Pick
! 	the correct live-out stmt for a reduction chain.
  
! 2022-04-07  Andrew Pinski  <apinski@marvell.com>
  
! 	Backported from master:
! 	2022-02-10  Andrew Pinski  <apinski@marvell.com>
  
! 	PR target/104474
! 	* config/aarch64/aarch64.c
! 	(aarch64_sve_expand_vector_init_handle_trailing_constants):
! 	Use CONST0_RTX instead of const0_rtx for the non-constant elements.
  
! 2022-04-07  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2022-03-28  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105070
! 	* tree-switch-conversion.h
! 	(bit_test_cluster::hoist_edge_and_branch_if_true): Add location
! 	argument.
! 	* tree-switch-conversion.c
! 	(bit_test_cluster::hoist_edge_and_branch_if_true): Annotate
! 	cond with location.
! 	(bit_test_cluster::emit): Annotate all generated expressions
! 	with location.
  
! 2022-04-07  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2022-03-23  Richard Biener  <rguenther@suse.de>
  
! 	PR rtl-optimization/105028
! 	* ira-color.c (form_threads_from_copies): Remove unnecessary
! 	copying of the sorted_copies tail.
  
! 2022-04-07  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2022-03-11  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104880
! 	* tree-ssa.c (execute_update_address_taken): Remember if we
! 	optimistically made something not addressable and
! 	prepare to undo it.
  
! 2022-04-07  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2022-04-07  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/105165
! 	* tree-complex.c (expand_complex_asm): Sorry for asm goto
! 	_Complex outputs.
  
! 2022-04-04  Martin Jambor  <mjambor@suse.cz>
  
! 	Backported from master:
! 	2022-03-31  Martin Jambor  <mjambor@suse.cz>
  
! 	PR ipa/103083
! 	* ipa-prop.h (ipa_ancestor_jf_data): New flag keep_null;
! 	(ipa_get_jf_ancestor_keep_null): New function.
! 	* ipa-prop.c (ipa_set_ancestor_jf): Initialize keep_null field of the
! 	ancestor function.
! 	(compute_complex_assign_jump_func): Pass false to keep_null
! 	parameter of ipa_set_ancestor_jf.
! 	(compute_complex_ancestor_jump_func): Pass true to keep_null
! 	parameter of ipa_set_ancestor_jf.
! 	(update_jump_functions_after_inlining): Carry over keep_null from the
! 	original ancestor jump-function or merge them.
! 	(ipa_write_jump_function): Stream keep_null flag.
! 	(ipa_read_jump_function): Likewise.
! 	(ipa_print_node_jump_functions_for_edge): Print the new flag.
! 	* ipa-cp.c (class ipcp_bits_lattice): Make various getters const.  New
! 	member function known_nonzero_p.
! 	(ipcp_bits_lattice::known_nonzero_p): New.
! 	(ipcp_bits_lattice::meet_with_1): New parameter drop_all_ones,
! 	observe it.
! 	(ipcp_bits_lattice::meet_with): Likewise.
! 	(propagate_bits_across_jump_function): Simplify.  Pass true in
! 	drop_all_ones when it is necessary.
! 	(propagate_aggs_across_jump_function): Take care of keep_null
! 	flag.
! 	(ipa_get_jf_ancestor_result): Propagate NULL accross keep_null
! 	jump functions.
  
! 2022-04-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2022-04-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/105123
! 	* config/i386/i386-expand.c (ix86_expand_vector_init_general): Avoid
! 	using word as target for expand_simple_binop when doing ASHIFT and
! 	IOR.
  
! 2022-04-01  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR middle-end/105032
! 	* lra-assigns.c (find_reload_regno_insns): Modify loop condition.
  
! 2022-03-30  H.J. Lu  <hjl.tools@gmail.com>
  
! 	Backported from master:
! 	2022-03-28  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/105068
! 	* config/i386/sse.md (*ssse3_pshufbv8qi3): Also replace "Yv" with
! 	"Yw" in clobber.
  
! 2022-03-30  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* config.gcc (riscv*-*-*): Set right default isa spec.
  
! 2022-03-30  Kito Cheng  <kito.cheng@sifive.com>
  
! 	Backported from master:
! 	2021-10-28  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* config/riscv/arch-canonicalize (CANONICAL_ORDER): Add `i` to
! 	CANONICAL_ORDER.
  
! 2022-03-30  Maciej W. Rozycki  <macro@embecosm.com>
  
! 	Backported from master:
! 	2021-11-03  Maciej W. Rozycki  <macro@embecosm.com>
  
! 	* config/riscv/riscv.c (riscv_class_max_nregs): Swap the
! 	arguments to `reg_class_subset_p'.
  
! 2022-03-30  Kito Cheng  <kito.cheng@sifive.com>
  
! 	Backported from master:
! 	2021-11-11  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* common/config/riscv/riscv-common.c (riscv_subset_list::to_string): Fix
! 	wrong marco checking.
  
! 2022-03-30  Maciej W. Rozycki  <macro@embecosm.com>
  
! 	Backported from master:
! 	2022-01-18  Maciej W. Rozycki  <macro@embecosm.com>
  
! 	* common/config/riscv/riscv-common.c
! 	(riscv_subset_list::parse_multiletter_ext): Move pointer
! 	arithmetic ahead of `free'.
  
! 2022-03-30  Kito Cheng  <kito.cheng@sifive.com>
  
! 	Backported from master:
! 	2022-01-24  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* common/config/riscv/riscv-common.c (riscv_subset_list::to_string):
! 	Skip zicsr and zifencei if I-ext is 2.0.
  
! 2022-03-30  Kito Cheng  <kito.cheng@sifive.com>
  
! 	Backported from master:
! 	2022-02-05  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* configure.ac: Fix detection for zifencei support.
  	* configure: Regenerate.
  
! 2022-03-30  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-03-30  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR sanitizer/105093
! 	* ubsan.c (instrument_object_size): If t is equal to inner and
! 	is a decl other than global var, punt.  When emitting call to
! 	UBSAN_OBJECT_SIZE ifn, make sure base is addressable.
! 
! 2022-03-30  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-03-30  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/105094
! 	* gimple-ssa-store-merging.c (mem_valid_for_store_merging): Punt if
! 	bitsize <= 0 rather than just == 0.
! 
! 2022-03-30  Martin Liska  <mliska@suse.cz>
! 
! 	* lto-streamer.h (LTO_minor_version): Bump it.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-03-24  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR c++/105035
! 	* fold-const.c (operand_equal_p) <case COMPONENT_REF>: If either
! 	field0 or field1 is not a FIELD_DECL, return false.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-03-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/104971
! 	* config/i386/i386-expand.c
! 	(ix86_expand_builtin) <case IX86_BUILTIN_READ_FLAGS>: If ignore,
! 	don't push/pop anything and just return const0_rtx.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-03-18  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/99578
! 	PR middle-end/100680
! 	PR tree-optimization/100834
! 	* params.opt (--param=min-pagesize=): New parameter.
! 	* builtins.c (compute_objsize_r) <case INTEGER_CST>: Use maximum
! 	object size instead of zero for pointer constants equal or larger
! 	than min-pagesize.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-03-16  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/104910
! 	* config/aarch64/aarch64.c (aarch64_load_symref_appropriately): Copy
! 	imm rtx.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-03-15  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR rtl-optimization/104814
! 	* ifcvt.c (find_if_case_1, find_if_case_2): Punt if test_bb doesn't
! 	end with onlyjump_p.  Assume BB_END (test_bb) is always non-NULL.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-03-09  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR c/104711
! 	* doc/invoke.texi (-Wextra): Document that -Wshift-negative-value
! 	is enabled by it only for C++11 to C++17 rather than for C++03 or
! 	later.
! 	(-Wshift-negative-value): Similarly (except here we stated
! 	that it is enabled for C++11 or later).
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-03-07  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/104775
! 	* config/s390/s390.md (*cmp_and_trap_unsigned_int<mode>): Use
! 	S constraint instead of T in the last alternative.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-03-02  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR rtl-optimization/104589
! 	* cfgrtl.c (fixup_reorder_chain): Use loc_equal instead of direct
! 	INSN_LOCATION comparison with goto_locus.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-25  Jakub Jelinek  <jakub@redhat.com>
! 		    Marc Glisse  <marc.glisse@inria.fr>
! 
! 	PR tree-optimization/104675
! 	* match.pd (t * 2U / 2 -> t & (~0 / 2), t / 2U * 2 -> t & ~1):
! 	Restrict simplifications to INTEGRAL_TYPE_P.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-25  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/104681
! 	* config/rs6000/vector.md (movmisalign<mode>): Use rs6000_emit_move.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-25  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/104674
! 	* config/i386/i386.h (enum ix86_stack_slot): Add SLOT_FLOATxFDI_387.
! 	* config/i386/i386.md (splitter to floatdi<mode>2_i387_with_xmm): Use
! 	SLOT_FLOATxFDI_387 rather than SLOT_TEMP.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-25  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/104675
! 	* match.pd (-A - 1 -> ~A, -1 - A -> ~A): Don't simplify for
! 	COMPLEX_TYPE.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-24  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/104601
! 	* tree-ssa-sccvn.c (visit_reference_op_call): For calls with
! 	non-SSA_NAME lhs value number vdef to itself instead of e.g. the
! 	vuse value number.
! 
! 2022-03-29  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR sanitizer/102656
! 	* asan.c (instrument_derefs): If inner is a RESULT_DECL and access is
! 	known to be within bounds, treat it like automatic variables.
! 	If instrumenting access and inner is {VAR,PARM,RESULT}_DECL from
! 	current function and !TREE_STATIC which is not TREE_ADDRESSABLE, mark
! 	it addressable.
! 
! 2022-03-28  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Backported from master:
! 	2022-03-27  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/105068
! 	* config/i386/sse.md (*ssse3_pshufbv8qi3): Replace "Yv" with
! 	"Yw".
! 
! 2022-03-28  Kito Cheng  <kito.cheng@sifive.com>
! 
! 	Backported from master:
! 	2021-11-09  Kito Cheng  <kito.cheng@sifive.com>
! 
! 	PR target/102957
! 	* common/config/riscv/riscv-common.c (multi_letter_subset_rank): Remove
! 	assertion for Z*-ext.
! 
! 2022-03-28  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/99754
! 	* config/i386/emmintrin.h (_mm_loadu_si32): Put loaded value into
! 	first 	rather than last element of the vector, use __m32_u to do
! 	a really unaligned load, use just 0 instead of (int)0.
! 	(_mm_loadu_si16): Put loaded value into first rather than last
! 	element of the vector, use __m16_u to do a really unaligned load,
! 	use just 0 instead of (short)0.
! 
! 2022-03-26  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Backported from master:
! 	2022-03-26  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/105058
! 	* config/i386/sse.md (loadiwkey): Replace "v" with "x".
! 	(aes<aesklvariant>u8): Likewise.
! 
! 2022-03-26  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Backported from master:
! 	2022-03-26  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/105052
! 	* config/i386/sse.md (ssse3_ph<plusminus_mnemonic>wv4hi3):
! 	Replace "Yv" with "x".
! 	(ssse3_ph<plusminus_mnemonic>dv2si3): Likewise.
! 	(ssse3_psign<mode>3): Likewise.
! 
! 2022-03-23  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/101636
! 	PR tree-optimization/104782
! 	* tree-vect-slp.c (vect_slp_analyze_operations): Make sure
! 	the CTOR is vectorized with an expected type.
! 
! 2022-03-23  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/104931
! 	* match.pd ((ptr) (x p+ y) p+ z -> (ptr) (x p+ (y + z))): New GENERIC
! 	simplification.
! 
! 2022-03-22  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Backported from master:
! 	2022-03-21  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/105000
! 	* common/config/i386/i386-common.c
! 	(OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET): Replace
! 	OPTION_MASK_ISA2_AVX512F_UNSET with OPTION_MASK_ISA2_SSE_UNSET.
! 
! 2022-03-22  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Backported from master:
! 	2022-03-16  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/104890
! 	* config/i386/x86gprintrin.h: Also check _SOFT_FLOAT before
! 	pushing target("general-regs-only").
! 
! 2022-03-22  Jason Merrill  <jason@redhat.com>
! 
! 	* tree.h (struct tree_vec_map_cache_hasher): Move from...
! 	* tree.c (struct tree_vec_map_cache_hasher): ...here.
! 
! 2022-03-21  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Backported from master:
! 	2022-03-21  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/104998
! 	* common/config/i386/cpuinfo.h (get_available_features): Pass
! 	0x19 to __cpuid for bit_AESKLE.  Enable FEATURE_AESKLE only if
! 	bit_AESKLE is set.
! 
! 2022-03-18  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	Backported from master:
! 	2022-03-15  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	PR target/104923
! 	* config/rs6000/predicates.md (mma_disassemble_output_operand): Restrict
! 	acceptable MEM addresses.
! 
! 2022-03-18  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	Backported from master:
! 	2022-03-04  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	PR target/87496
! 	PR target/104208
! 	* config/rs6000/rs6000.c (rs6000_option_override_internal): Make the
! 	ISA 2.06 requirement for -mabi=ieeelongdouble conditional on
! 	-mlong-double-128.
! 	Move the -mabi=ieeelongdouble and -mabi=ibmlongdouble error checking
! 	from here...
! 	* common/config/rs6000/rs6000-common.c (rs6000_handle_option):
! 	... to here.
! 
! 2022-03-18  Cui,Lili  <lili.cui@intel.com>
! 
! 	PR target/104963
! 	* config/i386/i386.h (PTA_SAPPHIRERAPIDS): change it to base on ICX.
! 	* doc/invoke.texi: Update documents for Intel sapphirerapids.
! 
! 2022-03-16  Qing Zhao  <qing.zhao@oracle.com>
! 
! 	PR middle-end/100775
! 	* function.c (gen_call_used_regs_seq): Call
! 	df_update_exit_block_uses when updating df.
! 
! 2022-03-16  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2022-03-09  Richard Biener  <rguenther@suse.de>
! 
! 	PR middle-end/104786
! 	* cfgexpand.c (expand_asm_stmt): Do not generate a copy
! 	for VLAs without an upper size bound.
! 
! 2022-03-16  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2022-02-14  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/104511
! 	* tree-ssa-forwprop.c (simplify_vector_constructor): Avoid
! 	touching DFP <-> FP conversions.
! 
! 2022-03-16  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2022-02-09  Richard Biener  <rguenther@suse.de>
! 
! 	PR target/104453
! 	* config/i386/i386.c (ix86_gimple_fold_builtin): Guard shift
! 	folding for NULL LHS.
! 
! 2022-03-16  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2022-02-07  Richard Biener  <rguenther@suse.de>
! 
! 	PR middle-end/104402
! 	* gimple-expr.c (is_gimple_condexpr): _Complex typed
! 	compares are not valid.
! 	* tree-cfg.c (verify_gimple_assign_ternary): For COND_EXPR
! 	check is_gimple_condexpr.
! 
! 2022-03-16  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2022-02-03  Richard Biener  <rguenther@suse.de>
! 
! 	PR debug/104337
! 	* tree-nrv.c (pass_nrv::execute): Remove tieing result and found
! 	together via DECL_ABSTRACT_ORIGIN.
! 
! 2022-03-16  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2022-02-04  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/103641
! 	* tree-vect-patterns.c (vect_synth_mult_by_constant):
! 	Pass the vector mode to choose_mult_variant.
! 
! 2022-03-11  Michael Meissner  <meissner@the-meissners.org>
! 
! 	PR target/99708
! 	* config/rs6000/rs6000-c.c: Revert patch from 2022-03-05.
! 
! 2022-03-10  Marek Polacek  <polacek@redhat.com>
! 
! 	Backported from master:
! 	2022-03-08  Marek Polacek  <polacek@redhat.com>
! 
! 	PR rtl-optimization/104777
! 	* rtl.c (classify_insn): For ASM_OPERANDS, return JUMP_INSN only if
! 	ASM_OPERANDS_LABEL_VEC has at least one element.
! 
! 2022-03-09  Kito Cheng  <kito.cheng@sifive.com>
! 
! 	Backported from master:
! 	2022-02-05  Kito Cheng  <kito.cheng@sifive.com>
! 
! 	PR target/104219
! 	* config.gcc (riscv*-*-*): Normalize the with_isa_spec value.
! 	(all_defaults): Add isa_spec.
! 	* config/riscv/riscv.h (OPTION_DEFAULT_SPECS): Add isa_spec.
! 
! 2022-03-05  Michael Meissner  <meissner@the-meissners.org>
! 
! 	PR target/99708
! 	* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Define
! 	__SIZEOF_IBM128__ if the IBM 128-bit long double type is created.
! 	Define __SIZEOF_FLOAT128__ if the IEEE 128-bit floating point type
! 	is created.  Backport change made to the master branch on
! 	2022-02-17.
! 
! 2022-03-05  Michael Meissner  <meissner@the-meissners.org>
! 
! 	PR target/104253
! 	* config/rs6000/rs6000.c (init_float128_ibm): Update the
! 	conversion functions used to convert IFmode types.  Backport
! 	change from 2022-02-14 made on the master branch.
! 
! 2022-03-01  Tamar Christina  <tamar.christina@arm.com>
! 
! 	* tree-vect-slp-patterns.c (vect_validate_multiplication): Correctly
! 	detect conjugate cases.
! 	(complex_mul_pattern::matches): Likewise.
! 	(complex_fma_pattern::matches): Move accumulator last as expected.
! 	(complex_fma_pattern::build): Likewise.
! 	(complex_fms_pattern::matches): Handle different conjugate form.
! 
! 2022-02-25  Tamar Christina  <tamar.christina@arm.com>
! 
! 	* config/arm/arm_neon.h (vdot_laneq_u32, vdotq_laneq_u32,
! 	vdot_laneq_s32, vdotq_laneq_s32): New.
! 	* config/arm/arm_neon_builtins.def (sdot_laneq, udot_laneq): New.
! 	* config/arm/neon.md (neon_<sup>dot<vsi2qi>): New.
! 	(<sup>dot_prod<vsi2qi>): Re-order rtl.
! 	(neon_<sup>dot_lane<vsi2qi>): Fix rtl order and endiannes.
! 	(neon_<sup>dot_laneq<vsi2qi>): New.
! 
! 2022-02-25  Tamar Christina  <tamar.christina@arm.com>
! 
! 	* config/arm/arm_neon.h (vusdotq_s32, vusdot_laneq_s32,
! 	vusdotq_laneq_s32, vsudot_laneq_s32, vsudotq_laneq_s32): New
! 	* config/arm/arm_neon_builtins.def (usdot): Add V16QI.
! 	(usdot_laneq, sudot_laneq): New.
! 	* config/arm/neon.md (neon_<sup>dot_laneq<vsi2qi>): New.
! 	(neon_<sup>dot_lane<vsi2qi>): Remote unneeded code.
! 
! 2022-02-25  Tamar Christina  <tamar.christina@arm.com>
! 
! 	PR tree-optimization/102819
! 	PR tree-optimization/103169
! 	* config/arm/vec-common.md (cml<fcmac1><conj_op><mode>4): Use
! 	canonical order.
! 
! 2022-02-25  Tamar Christina  <tamar.christina@arm.com>
! 
! 	PR tree-optimization/102819
! 	PR tree-optimization/103169
! 	* config/aarch64/aarch64-simd.md (cml<fcmac1><conj_op><mode>4): Use
! 	canonical order.
! 	* config/aarch64/aarch64-sve.md (cml<fcmac1><conj_op><mode>4): Likewise.
! 
! 2022-02-25  Tamar Christina  <tamar.christina@arm.com>
! 
! 	PR tree-optimization/102819
! 	PR tree-optimization/103169
! 	* gimple.h (gimple_num_args, gimple_arg): New.
! 	* doc/md.texi: Update docs for cfms, cfma.
! 	* tree-data-ref.h (same_data_refs): Accept optional offset.
! 	* tree-vect-slp-patterns.c (is_linear_load_p): Fix issue with repeating
! 	patterns.
! 	(vect_normalize_conj_loc): Remove.
! 	(is_eq_or_top): Change to take two nodes.
! 	(enum _conj_status, compatible_complex_nodes_p,
! 	vect_validate_multiplication): New.
! 	(class complex_add_pattern, complex_add_pattern::matches,
! 	complex_add_pattern::recognize, class complex_mul_pattern,
! 	complex_mul_pattern::recognize, class complex_fms_pattern,
! 	complex_fms_pattern::recognize,, class complex_fma_pattern,
! 	complex_fma_pattern::recognize, class complex_operations_pattern,
! 	complex_operations_pattern::recognize, addsub_pattern::recognize): Pass
! 	new cache.
! 	(complex_fms_pattern::matches, complex_fma_pattern::matches,
! 	complex_mul_pattern::matches): Pass new cache and use new validation
! 	code.
! 	* tree-vect-slp.c (vect_match_slp_patterns_2, vect_match_slp_patterns,
! 	vect_analyze_slp): Pass along cache.
! 	(compatible_calls_p): Expose.
! 	* tree-vectorizer.h (compatible_calls_p, slp_node_hash,
! 	slp_compat_nodes_map_t): New.
! 	(class vect_pattern): Update signatures include new cache.
! 
! 2022-02-21  Pat Haugen  <pthaugen@linux.ibm.com>
! 
! 	* config/rs6000/rs6000.opt (mpower10-fusion): Mark Undocumented.
! 	(mpower10-fusion-ld-cmpi, mpower10-fusion-2logical,
! 	mpower10-fusion-logical-add, mpower10-fusion-add-logical,
! 	mpower10-fusion-2add, mpower10-fusion-2store): Remove.
! 	* config/rs6000/rs6000-cpus.def (ISA_3_1_MASKS_SERVER,
! 	OTHER_P9_VECTOR_MASKS): Remove Power10 fusion sub-options.
! 	* config/rs6000/rs6000.c (rs6000_option_override_internal,
! 	power10_sched_reorder): Likewise.
! 	* config/rs6000/genfusion.pl (gen_ld_cmpi_p10, gen_logical_addsubf,
! 	gen_addadd): Likewise
! 	* config/rs6000/fusion.md: Regenerate.
! 
! 2022-02-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-17  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR debug/104557
! 	* valtrack.c (debug_lowpart_subreg): Don't call gen_rtx_raw_SUBREG
! 	if expr has VOIDmode.
! 
! 2022-02-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-16  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR rtl-optimization/104544
! 	* combine.c (try_combine): When looking for insn whose links
! 	should be updated from i3 to i2, don't stop on debug insns, instead
! 	skip over them.
! 
! 2022-02-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-15  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR debug/104517
! 	* omp-low.c (task_cpyfns): New variable.
! 	(delete_omp_context): Don't call finalize_task_copyfn from here.
! 	(create_task_copyfn): Push task_stmt into task_cpyfns.
! 	(execute_lower_omp): Call finalize_task_copyfn here on entries from
! 	task_cpyfns vector and release the vector.
! 
! 2022-02-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-12  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR sanitizer/104449
! 	* asan.c: Include tree-eh.h.
! 	(handle_builtin_alloca): Handle the case when __builtin_alloca or
! 	__builtin_alloca_with_align can throw.
! 
! 2022-02-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-12  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/104502
! 	* config/i386/i386.md (cvtsd2ss splitter): If operands[1] is xmm16+
! 	and AVX512VL isn't available, move operands[1] to operands[0] first.
! 
! 2022-02-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-11  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/104446
! 	* combine.c (subst): Don't substitute CONST_INTs into RTX_AUTOINC
! 	operands.
! 
! 2022-02-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-08  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/102140
! 	* config/rs6000/rs6000.c (vspltis_shifted): Return false also if
! 	split1 pass has finished already.
! 
! 2022-02-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-02-01  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/104307
! 	* tree-vect-generic.c (expand_vector_comparison): Don't push debug
! 	stmts to uses vector, just set vec_cond_expr_only to false for
! 	non-VEC_COND_EXPRs instead of pushing them into uses.  Treat
! 	VEC_COND_EXPRs that use lhs not just in rhs1, but rhs2 or rhs3 too
! 	like non-VEC_COND_EXPRs.
! 
! 2022-02-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-01-28  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/104263
! 	* gimple-ssa-store-merging.c (get_status_for_store_merging): For
! 	cfun->can_throw_non_call_exceptions && cfun->eh test whether
! 	last non-debug stmt in the bb is store_valid_for_store_merging_p
! 	rather than last stmt.
! 
! 2022-02-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2022-01-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR lto/104237
! 	* cfgrtl.c (loc_equal): New function.
! 	(unique_locus_on_edge_between_p): Use it.
  
! 2022-02-18  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-05-10  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/100464
! 	PR c++/100468
! 	* gimple-fold.c (canonicalize_constructor_val): Do not set
! 	TREE_ADDRESSABLE.
  
! 2022-02-17  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-10-22  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/102893
! 	* tree-ssa-dce.c (find_obviously_necessary_stmts): Fix the
! 	test for an exit edge.
  
! 2022-02-17  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-08-27  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/45178
! 	* tree-ssa-dce.c (find_obviously_necessary_stmts): For
! 	infinite loops without exit do not mark control dependent
! 	edges of the latch necessary.
  
! 2022-02-17  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2022-01-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103864
! 	PR tree-optimization/103544
! 	* tree-vect-slp.c (vect_analyze_slp_instance): Exclude
! 	reductions wrapped in conversions from SLP handling.
! 	(vect_analyze_slp): Revert PR103544 change.
  
! 2022-02-17  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-12-06  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103544
! 	* tree-vect-slp.c (vect_analyze_slp): Only add a SLP reduction
! 	opportunity if the stmt in question is the reduction root.
  
! 2022-02-17  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-11-23  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103361
! 	* gimple-loop-jam.c (adjust_unroll_factor): Use lambda_int
! 	for the dependence distance.
! 	* tree-data-ref.c (print_lambda_vector): Properly print a lambda_int.
  
! 2022-02-17  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2022-01-20  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/100786
! 	* gimple-fold.c (get_symbol_constant_value): Only return
! 	values of compatible type to the symbol.
  
! 2022-02-17  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2022-01-20  Richard Biener  <rguenther@suse.de>
  
! 	PR target/100784
! 	* config/i386/i386.c (ix86_gimple_fold_builtin): Check for
! 	LHS before folding __builtin_ia32_shufpd and friends.
  
! 2022-02-16  H.J. Lu  <hjl.tools@gmail.com>
  
! 	Backported from master:
! 	2022-01-06  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/103925
! 	* config/i386/i386.c (ix86_output_indirect_function_return):
! 	Generate INT3 after indirect jmp for -mharden-sls=indirect-jmp.
  
! 2022-02-16  H.J. Lu  <hjl.tools@gmail.com>
  
! 	Backported from master:
! 	2022-01-06  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/102952
! 	* config/i386/i386-opts.h (harden_sls): Replace
! 	harden_sls_indirect_branch with harden_sls_indirect_jmp.
! 	* config/i386/i386.c (ix86_output_jmp_thunk_or_indirect):
  	Likewise.
! 	(ix86_output_indirect_jmp): Likewise.
! 	(ix86_output_call_insn): Likewise.
! 	* config/i386/i386.opt: Replace indirect-branch with
! 	indirect-jmp.  Replace harden_sls_indirect_branch with
! 	harden_sls_indirect_jmp.
! 	* doc/invoke.texi (-harden-sls=): Replace indirect-branch with
! 	indirect-jmp.
! 
! 2022-02-16  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Backported from master:
! 	2021-11-18  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/102952
! 	* config/i386/i386.c (ix86_output_jmp_thunk_or_indirect): Emit
! 	CS prefix for -mindirect-branch-cs-prefix.
! 	(ix86_output_indirect_branch_via_reg): Likewise.
! 	* config/i386/i386.opt: Add -mindirect-branch-cs-prefix.
! 	* doc/invoke.texi: Document -mindirect-branch-cs-prefix.
! 
! 2022-02-16  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Backported from master:
! 	2021-11-17  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/102952
! 	* config/i386/i386-opts.h (harden_sls): New enum.
! 	* config/i386/i386.c (output_indirect_thunk): Mitigate against
! 	SLS for function return.
! 	(ix86_output_function_return): Likewise.
! 	(ix86_output_jmp_thunk_or_indirect): Mitigate against indirect
! 	branch.
! 	(ix86_output_indirect_jmp): Likewise.
! 	(ix86_output_call_insn): Likewise.
! 	* config/i386/i386.opt: Add -mharden-sls=.
! 	* doc/invoke.texi: Document -mharden-sls=.
! 
! 2022-02-16  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Backported from master:
! 	2021-11-17  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/103307
! 	* config/i386/i386.c (ix86_code_end): Remove "%!" before ret.
! 	(ix86_output_function_return): Likewise.
! 	* config/i386/i386.md (simple_return_pop_internal): Likewise.
  
! 2022-02-15  Kewen Lin  <linkw@linux.ibm.com>
  
! 	Backported from master:
! 	2022-02-07  Kewen Lin  <linkw@linux.ibm.com>
  
! 	PR target/103627
! 	* config/rs6000/rs6000.c (rs6000_option_override_internal): Move the
! 	hunk affecting VSX and ALTIVEC to appropriate place.
  
! 2022-02-15  Kewen Lin  <linkw@linux.ibm.com>
  
! 	Backported from master:
! 	2022-02-07  Kewen Lin  <linkw@linux.ibm.com>
  
! 	PR target/103627
! 	* config/rs6000/rs6000.c (rs6000_option_override_internal): Disable
! 	MMA if !TARGET_VSX.
  
! 2022-02-14  Maciej W. Rozycki  <macro@embecosm.com>
  
! 	Backported from master:
! 	2022-02-08  Maciej W. Rozycki  <macro@embecosm.com>
  
! 	* config/riscv/t-riscv (riscv-sr.o): Add $(TM_H) dependency.
  
! 2022-02-13  Uros Bizjak  <ubizjak@gmail.com>
  
! 	Backported from master:
! 	2022-02-12  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/79754
! 	* config/i386/i386.c (type_natural_mode):
! 	Skip decimal float vector modes.
  
! 2022-02-11  Martin Liska  <mliska@suse.cz>
  
! 	Backported from master:
! 	2021-12-03  Martin Liska  <mliska@suse.cz>
! 		    Peter Bergner  <bergner@linux.ibm.com>
  
! 	PR target/101324
! 	* config/rs6000/rs6000.c (rs6000_option_override_internal): Move the
! 	disabling of shrink-wrapping when using -mrop-protect from here...
! 	(rs6000_override_options_after_change): ...to here.
  
! 2022-02-10  Uros Bizjak  <ubizjak@gmail.com>
  
! 	Backported from master:
! 	2022-02-10  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/104469
! 	* config/i386/sse.md (vec_unpacks_float_lo_v4si):
! 	Change operand 1 constraint to register_operand.
  
! 2022-02-09  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/104462
! 	* common/config/i386/i386-common.c (OPTION_MASK_ISA2_XSAVE_UNSET):
! 	Also include OPTION_MASK_ISA2_AVX2_UNSET.
  
! 2022-02-09  Uros Bizjak  <ubizjak@gmail.com>
  
! 	Backported from master:
! 	2022-02-09  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/104458
! 	* config/i386/i386-expand.c (ix86_split_idivmod):
! 	Force operands[2] and operands[3] into a register..
  
! 2022-02-09  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/104451
! 	* config/i386/sse.md (<insn><mode>3): lowpart_subreg
! 	operands[2] from SImode to QImode.
  
! 2022-02-08  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/104288
! 	* gimple-range-cache.cc (ssa_range_in_bb): Only use non-null from the
! 	dominator entry ranges.
! 	* gimple-range.cc (gimple_ranger::range_of_expr): Ditto.
  
! 2022-02-03  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/104362
! 	* config/i386/i386.c (find_drap_reg): For 32bit targets
! 	return DI_REG if function uses __builtin_eh_return.
  
! 2022-02-02  Sebastian Huber  <sebastian.huber@embedded-brains.de>
  
! 	PR target/104090
! 	* config/rs6000/rs6000.c (rs6000_machine_from_flags): Use also
! 	rs6000_cpu.
  
! 2022-02-02  Ilya Leoshkevich  <iii@linux.ibm.com>
  
! 	Backported from master:
! 	2022-02-01  Ilya Leoshkevich  <iii@linux.ibm.com>
  
! 	* config/s390/s390.c (s390_code_end): Do not switch back to
! 	code section.
  
! 2022-02-02  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	Backported from master:
! 	2022-02-01  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	PR middle-end/95115
! 	* fold-const.c (const_binop): Do not fold NaN result from
! 	  non-NaN operands.
  
! 2022-01-28  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-12-07  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103596
! 	* tree-ssa-sccvn.c (eliminate_dom_walker::eliminate_stmt):
! 	Note we are not propagating into a PHI argument to may_propagate_copy.
! 	* tree-ssa-propagate.h (may_propagate_copy): Add
! 	argument specifying whether we propagate into a PHI arg.
! 	* tree-ssa-propagate.c (may_propagate_copy): Likewise.
! 	When not doing so we can replace an abnormal with
! 	something else.
! 	(may_propagate_into_stmt): Update may_propagate_copy calls.
! 	(replace_exp_1): Move propagation checking code to
! 	propagate_value and rename to ...
! 	(replace_exp): ... this and elide previous wrapper.
! 	(propagate_value): Perform checking with adjusted
! 	may_propagate_copy call and dispatch to replace_exp.
  
! 2022-01-28  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-11-30  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103489
! 	* tree-vect-loop.c (vectorizable_phi): Verify argument
! 	vector type compatibility to mitigate bool pattern recog
! 	bug.
  
! 2022-01-26  Andrew Pinski  <apinski@marvell.com>
  
! 	Backported from master:
! 	2021-11-10  Andrew Pinski  <apinski@marvell.com>
  
! 	PR target/101529
! 	* config/aarch64/aarch64.c (aarch64_evpc_ins): Don't use target
! 	as an input, use original one.
  
! 2022-01-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2022-01-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104172
! 	* config/rs6000/rs6000-internal.h (rs6000_passes_ieee128): Don't
! 	declare.
! 	* config/rs6000/rs6000.c (rs6000_passes_ieee128,
! 	ieee128_mangling_gcc_8_1): Remove.
! 	(TARGET_ASM_GLOBALIZE_DECL_NAME): Don't redefine.
! 	(rs6000_mangle_type): Return "u9__ieee128" instead of
! 	ieee128_mangling_gcc_8_1 ? "U10__float128" : "u9__ieee128".
! 	(rs6000_globalize_decl_name): Remove.
! 	* config/rs6000/rs6000-call.c (init_cumulative_args,
! 	rs6000_function_arg_advance_1): Don't set rs6000_passes_ieee128.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2022-01-21  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/102478
! 	* optabs.c (prepare_cmp_insn): If !can_create_pseudo_p (), don't
! 	force_reg constants and for -fnon-call-exceptions fail if copy_to_reg
! 	would be needed.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2022-01-20  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/103874
! 	* dwarf2out.c (index_rnglists): For !HAVE_AS_LEB128 and
! 	block_num > 0, index entry even if !have_multiple_function_sections.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2022-01-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/102860
! 	* match.pd (x %[fl] y -> x % y): New simplification for
! 	unsigned integral types.
! 	* optabs-tree.c (optab_for_tree_code): Return unknown_optab
! 	for {CEIL,FLOOR,ROUND}_{DIV,MOD}_EXPR with VECTOR_TYPE.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2022-01-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/i386/sse.md (*aes<aeswideklvariant>u*): Use %0 instead of
! 	{%0}.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2022-01-06  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/103908
! 	* ifcvt.c (bb_valid_for_noce_process_p): Punt on bbs ending with
! 	asm goto.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-12-30  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/103012
! 	* config/i386/i386-c.c (ix86_pragma_target_parse): Perform
! 	cpp_define/cpp_undef calls with forced token locations
! 	BUILTINS_LOCATION.
! 	* config/arm/arm-c.c (arm_pragma_target_parse): Likewise.
! 	* config/aarch64/aarch64-c.c (aarch64_pragma_target_parse): Likewise.
! 	* config/s390/s390-c.c (s390_pragma_target_parse): Likewise.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-12-30  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/103860
! 	* shrink-wrap.c (try_shrink_wrapping): Make sure can_get_prologue is
! 	called on pro even if nothing further is pushed into vec.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-12-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/103813
! 	* fold-const.c (fold_truth_andor_1): Punt of const_binop LSHIFT_EXPR
! 	or RSHIFT_EXPR returns NULL.  Formatting fix.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-12-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/103837
! 	* loop-invariant.c (can_move_invariant_reg): Ignore DEBUG_INSNs in
! 	the decisions whether to return false or continue and right before
! 	returning true reset those debug insns that previously caused
! 	returning false.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-12-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/103838
! 	* optabs.c (expand_doubleword_mod, expand_doubleword_divmod): Only
! 	check newly added insns for CALL_P, not the last insn of previous
! 	code.
  
! 2022-01-24  H.J. Lu  <hjl.tools@gmail.com>
  
! 	Backported from master:
! 	2022-01-24  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/104188
! 	* config/i386/predicates.md (bcst_mem_operand): Also check mode
! 	of memory broadcast.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	Backported from master:
! 	2021-08-13  Martin Liska  <mliska@suse.cz>
  
! 	PR ipa/101354
! 	* attribs.c (decl_attributes): Make naked functions "noipa"
! 	  functions.
  
! 2022-01-14  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* ipa-param-manipulation.c (ipa_dump_adjusted_parameters): Dump
! 	reverse flag as "reverse" for the sake of consistency.
! 	* ipa-sra.c: Fix copyright year.
! 	(ipa_sra_function_summaries::duplicate): Copy the reverse flag.
! 	(dump_isra_access): Tweak dump line.
! 	(isra_write_node_summary): Write the reverse flag.
! 	(isra_read_node_info): Read it.
! 	(pull_accesses_from_callee): Test its consistency and copy it.
  
! 2022-01-13  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101615
! 	PR tree-optimization/103995
! 	* tree-vect-slp.c (vect_optimize_slp): Materialize permutes
! 	at CTOR SLP graph entries.
  
! 2022-01-12  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/98348
! 	* config/i386/sse.md (*<avx512>_ucmp<mode>3_1): Change from
! 	define_split to define_insn_and_split.
! 	(*avx2_eq<mode>3): Removed.
! 	(<avx512>_eq<mode>3<mask_scalar_merge_name>): Adjust pattern
! 	(<avx512>_eq<mode>3<mask_scalar_merge_name>_1): Rename to ..
! 	(*<avx512>_eq<mode>3<mask_scalar_merge_name>_1): .. this, and
! 	adjust pattern.
! 	(*avx2_gt<mode>3): Removed.
! 	(<avx512>_gt<mode>3<mask_scalar_merge_name>): Change from
! 	define_insn to define_expand, and adjust pattern.
! 	(UNSPEC_MASKED_EQ, UNSPEC_MASKED_GT): Removed.
  
! 2022-01-11  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/103603
! 	* gimple-range.cc (gimple_ranger::gimple_ranger): Create stmt stack.
! 	(gimple_ranger::~gimple_ranger): New.
! 	(gimple_ranger::range_of_stmt): Process dependencies if they have no
! 	global cache entry.
! 	(gimple_ranger::prefill_name): New.
! 	(gimple_ranger::prefill_stmt_dependencies): New.
! 	* gimple-range.h (class gimple_ranger): Add prototypes.
  
! 2022-01-10  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR target/103465
! 	* coretypes.h (unwind_info_type): Swap UI_SEH and UI_TARGET.
  
! 2022-01-02  John David Anglin  <danglin@gcc.gnu.org>
  
! 	* config/pa/pa.md (atomic_storeq): Use optab_libfunc to access
! 	sync_lock_test_and_set libfunc. Call convert_memory_address to
! 	convert memory address to Pmode.
! 	(atomic_storehi, atomic_storesi, atomic_storedi): Likewise.
  
! 2021-12-27  John David Anglin  <danglin@gcc.gnu.org>
  
! 	* config/pa/pa-protos.h: Delete
! 	pa_maybe_emit_compare_and_swap_exchange_loop() declaration.
! 	* config/pa/pa.c (pa_expand_compare_and_swap_loop): Delete.
! 	(pa_maybe_emit_compare_and_swap_exchange_loop): Delete.
! 	* config/pa/pa.md (atomic_storeq): Use __sync_lock_test_and_set
! 	instead of pa_maybe_emit_compare_and_swap_exchange_loop.
! 	(atomic_storehi, atomic_storesi, atomic_storedi): Likewise.
  
! 2021-12-16  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/101751
! 	* doc/extend.texi (attribute access): Adjust.
! 	* calls.c (maybe_warn_rdwr_sizes): Treat access mode none on a void*
! 	argument as expecting as few as zero bytes.
  
! 2021-12-16  Martin Sebor  <msebor@redhat.com>
  
! 	PR c/101289
! 	PR c/97548
! 	* fold-const.c (operand_compare::operand_equal_p): Handle OEP_DECL_NAME.
! 	(operand_compare::verify_hash_value): Same.
! 	* tree-core.h (OEP_DECL_NAME): New.
  
! 2021-12-16  Martin Liska  <mliska@suse.cz>
  
! 	Backported from master:
! 	2021-12-15  Martin Liska  <mliska@suse.cz>
  
! 	PR target/103661
! 	* config/i386/i386-builtins.c (fold_builtin_cpu): Compare to 0
! 	as API expects that non-zero values are returned (do that
! 	it mask == 31).
! 	For "avx512vbmi2" argument, we return now 1 << 31, which is a
! 	negative integer value.
  
! 2021-12-15  Kewen Lin  <linkw@linux.ibm.com>
  
! 	Backported from master:
! 	2021-11-30  Kewen Lin  <linkw@linux.ibm.com>
  
! 	PR target/102347
! 	* config/rs6000/rs6000-call.c (rs6000_builtin_decl): Remove builtin mask
! 	check.
  
! 2021-12-14  Joel Hutton  <joel.hutton@arm.com>
  
! 	PR bootstrap/103688
! 	* tree-vect-loop.c (vectorizable_induction): Rework to avoid
! 	directly_supported_p.
  
! 2021-12-13  Joel Hutton  <joel.hutton@arm.com>
  
! 	PR tree-optimization/103523
! 	* tree-vect-loop.c (vectorizable_induction): Check for
! 	PLUS_EXPR/MINUS_EXPR support.
  
! 2021-12-02  Rasmus Villemoes  <rasmus.villemoes@prevas.dk>
  
! 	Backported from master:
! 	2021-12-02  Rasmus Villemoes  <rasmus.villemoes@prevas.dk>
  
! 	* config/vxworks.h (LTO_PLUGIN_SPEC): Adapt to corrected
! 	spelling of -linker-output-auto-nolto-rel.
  
! 2021-12-01  Martin Jambor  <mjambor@suse.cz>
  
! 	Backported from master:
! 	2021-11-30  Martin Jambor  <mjambor@suse.cz>
  
! 	PR ipa/103267
! 	* ipa-sra.c (scan_function): Also check ECF_LOOPING_CONST_OR_PURE flag.
  
! 2021-12-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-12-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/102356
! 	* rtl.h (simplify_context): Add assoc_count member and
! 	max_assoc_count static member.
! 	* simplify-rtx.c (simplify_associative_operation): Don't reassociate
! 	more than max_assoc_count times within one outermost simplify_* call.
  
! 2021-11-30  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR target/103274
! 	* config/i386/i386.c (ix86_output_call_insn): Beef up comment about
! 	nops emitted with SEH.
! 	* config/i386/winnt.c (i386_pe_seh_unwind_emit): When switching to
! 	the cold section, emit a nop before the directive if the previous
! 	active instruction is a call.
  
! 2021-11-29  Peter Bergner  <bergner@linux.ibm.com>
  
! 	Backported from master:
! 	2021-11-16  Peter Bergner  <bergner@linux.ibm.com>
  
! 	PR target/102976
! 	* config/rs6000/mma.md (*vsx_assemble_pair): Add early-clobber for
! 	output operand.
! 	(*mma_assemble_acc): Likewise.
  
! 2021-11-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-11-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/103435
! 	* gimple-ssa-store-merging.c (find_bswap_or_nop_finalize): Avoid UB if
! 	n->range - rsize == 8, just clear both *cmpnop and *cmpxchg in that
! 	case.
  
! 2021-11-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-11-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/103384
! 	* omp-general.c (omp_context_selector_matches): For ACCEL_COMPILER,
! 	return 0 for kind(host) and continue for kind(nohost).
  
! 2021-11-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-11-23  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/102431
! 	* gimplify.c (replace_reduction_placeholders): Remove.
! 	(note_no_context_vars): New function.
! 	(gimplify_omp_loop): For OMP_PARALLEL's BIND_EXPR create a new
! 	BLOCK.  Use copy_tree_body_r with walk_tree instead of unshare_expr
! 	and replace_reduction_placeholders for duplication of
! 	OMP_CLAUSE_REDUCTION_{INIT,MERGE} expressions.  Ensure all mentioned
! 	automatic vars have DECL_CONTEXT set to non-NULL before doing so
! 	and reset it afterwards for those vars and their corresponding
! 	vars.
  
! 2021-11-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-11-17  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/103192
! 	* tree-ssa-loop-im.c (move_computations_worker): Use
! 	reset_flow_sensitive_info instead of manually clearing
! 	SSA_NAME_RANGE_INFO and do it for all SSA_NAMEs, not just ones
! 	with integral types.
  
! 2021-11-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-11-17  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/103255
! 	* gimple-range.cc (fold_using_range::range_of_address): Return
! 	range_nonzero rather than unadjusted base's range.  Formatting fixes.
  
! 2021-11-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-11-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/103205
! 	* config/i386/sync.md (atomic_bit_test_and_set<mode>,
! 	atomic_bit_test_and_complement<mode>,
! 	atomic_bit_test_and_reset<mode>): Use OPTAB_WIDEN instead of
! 	OPTAB_DIRECT.
  
! 2021-11-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-11-11  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/101378
! 	* dwarf2out.c (field_byte_offset): Do the PCC_BITFIELD_TYPE_MATTERS
! 	handling only for DECL_BIT_FIELD_TYPE decls.
  
! 2021-11-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-11-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR bootstrap/100246
! 	* config/i386/i386.h
! 	(stringop_algs::stringop_strategy::stringop_strategy): Make the ctor
! 	constexpr.
  
! 2021-11-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-11-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/103046
! 	* dwarf2out.c (add_const_value_attribute): Add MODE argument, use it
! 	in CONST_WIDE_INT handling.  Adjust recursive calls.
! 	(add_location_or_const_value_attribute): Pass DECL_MODE (decl) to
! 	new add_const_value_attribute argument.
! 	(tree_add_const_value_attribute): Pass TYPE_MODE (type) to new
! 	add_const_value_attribute argument.
  
! 2021-11-25  Jan Hubicka  <jh@suse.cz>
  
! 	Backported from master:
! 	2021-11-20  Jan Hubicka  <hubicka@ucw.cz>
  
! 	PR ipa/103052
! 	* ipa-pure-const.c (propagate_pure_const): Fix merging of loping flag.
  
! 2021-11-24  Maciej W. Rozycki  <macro@embecosm.com>
  
! 	Backported from master:
! 	2021-11-24  Maciej W. Rozycki  <macro@embecosm.com>
  
! 	PR middle-end/103059
! 	* reload.c (find_reloads_address_1): Also accept the ASHIFT form
! 	of indexed addressing.
! 	(find_reloads): Adjust accordingly.
  
! 2021-11-23  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	PR target/101985
! 	* config/rs6000/altivec.h (vec_cpsgn): Swap operand order.
  
! 2021-11-22  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
  
! 	Backported from master:
! 	2021-11-19  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
  
! 	* config/s390/s390.md (define_peephole2): Variable insn points
! 	to the first matched insn.  Use peep2_next_insn(1) to refer to
! 	the second matched insn.
  
! 2021-11-22  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-11-15  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103237
! 	* tree-vect-loop.c (vect_is_simple_reduction): Fail for
! 	double reductions with multiple inner loop LC PHI nodes.
  
! 2021-11-22  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-11-12  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103204
! 	* tree-ssa-sccvn.c (valueize_refs_1): Re-valueize the
! 	top operand after folding in an address.
  
! 2021-11-22  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/103181
! 	PR middle-end/103248
! 	* tree-eh.c (operation_could_trap_helper_p): Properly
! 	check vector constants for a zero element for integer
! 	division.  Separate floating point and integer division code.
! 	Properly handle fixed-point RDIV_EXPR.
  
! 2021-11-22  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-11-03  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/102970
! 	* tree-ssa-pre.c (phi_translate_1): Drop clique and base
! 	when translating a MEM_REF over a backedge.
  
! 2021-11-22  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/103275
! 	* config/i386/constraints.md (Bk): New
! 	define_memory_constraint.
! 	* config/i386/i386-protos.h (ix86_gpr_tls_address_pattern_p):
! 	Declare.
! 	* config/i386/i386.c (ix86_gpr_tls_address_pattern_p): New
! 	function.
! 	* config/i386/i386.md (*movsi_internal): Don't allow
! 	mask/sse/mmx move in TLS code sequences.
! 	(*movdi_internal): Ditto.
  
! 2021-11-19  Giuliano Belinassi  <gbelinassi@suse.de>
  
! 	* gcc.c (process_command): Skip dumpdir override if file is a
! 	not_actual_file_p.
! 	* doc/invoke.texi: Update -dumpdir documentation.
  
! 2021-11-18  Jan Hubicka  <jh@suse.cz>
  
! 	Backported from master:
! 	2021-11-17  Jan Hubicka  <hubicka@ucw.cz>
  
! 	PR ipa/103246
! 	* ipa-modref.c (read_modref_records): Fix streaminig in of every_access
  	flag.
  
! 2021-11-18  Jan Hubicka  <jh@suse.cz>
! 
! 	* ipa-modref.c (ipa_merge_modref_summary_after_inlining): Fix
! 	handling of ignore_stores.
! 
! 2021-11-18  David Edelsohn  <dje.gcc@gmail.com>
! 
! 	Backported from master:
! 	2021-11-18  David Edelsohn  <dje.gcc@gmail.com>
! 
! 	* config/rs6000/driver-rs6000.c (detect_processor_aix): Add
! 	power10.
! 
! 2021-11-16  Philipp Tomsich  <philipp.tomsich@vrull.eu>
! 
! 	Backported from master:
! 	2021-11-03  Philipp Tomsich  <philipp.tomsich@vrull.eu>
! 
! 	* config/aarch64/aarch64-cores.def (AARCH64_CORE): New Ampere-1
! 	core.
! 	* config/aarch64/aarch64-tune.md: Regenerate.
! 	* config/aarch64/aarch64-cost-tables.h: Add extra costs for
! 	Ampere-1.
! 	* config/aarch64/aarch64.c: Add tuning structures for Ampere-1.
! 	* doc/invoke.texi: Add documentation for Ampere-1 core.
! 
! 2021-11-15  Kewen Lin  <linkw@linux.ibm.com>
! 
! 	Backported from master:
! 	2021-11-11  Kewen Lin  <linkw@linux.ibm.com>
! 
! 	* doc/invoke.texi: Change references to "future cpu" to "power10",
! 	"-mcpu=future" to "-mcpu=power10".  Adjust words for float128.
! 
! 2021-11-09  Xionghu Luo  <luoxhu@linux.ibm.com>
! 
! 	Backported from master:
! 	2021-11-05  Xionghu Luo  <luoxhu@linux.ibm.com>
! 
! 	PR target/102991
! 	* config/rs6000/fusion.md: Regenerate.
! 	* config/rs6000/genfusion.pl: Fix incorrect clobber constraint.
! 
! 2021-11-08  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/102798
! 	* tree-vect-data-refs.c (vect_create_addr_base_for_vector_ref):
! 	Only copy points-to info to newly generated SSA names.
! 
! 2021-11-08  Richard Biener  <rguenther@suse.de>
! 
! 	PR middle-end/102518
! 	* tree-inline.c (setup_one_parameter): Avoid substituting
! 	an invariant into contexts where a GIMPLE register is not valid.
! 
! 2021-11-08  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2021-10-18  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/102788
! 	* tree-vect-patterns.c (vect_init_pattern_stmt): Allow
! 	a NULL vectype.
! 	(vect_pattern_recog_1): Likewise.
! 	(vect_recog_bool_pattern): Continue matching the pattern
! 	even if we do not have a vector type for a conversion
! 	result.
! 
! 2021-11-08  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2021-10-15  Richard Biener  <rguenther@suse.de>
! 
! 	PR ipa/102762
! 	* tree-inline.c (copy_bb): Avoid underflowing nargs.
! 
! 2021-11-08  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2021-10-12  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/102572
! 	* tree-vect-stmts.c (vect_build_gather_load_calls): When
! 	gathering the vectorized defs for the mask pass in the
! 	desired mask vector type so invariants will be handled
! 	correctly.
! 
! 2021-11-08  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2021-09-01  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/102139
! 	* tree-vectorizer.h (vec_base_alignments): Adjust hash-map
! 	type to record a std::pair of the stmt-info and the innermost
! 	loop behavior.
! 	(dr_vec_info::group): New member.
! 	* tree-vect-data-refs.c (vect_record_base_alignment): Adjust.
! 	(vect_compute_data_ref_alignment): Verify the recorded
! 	base alignment can be used.
! 	(data_ref_pair): Remove.
! 	(dr_group_sort_cmp): Adjust.
! 	(vect_analyze_data_ref_accesses): Store the group-ID in the
! 	dr_vec_info and operate on a vector of dr_vec_infos.
! 
! 2021-11-08  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2021-08-20  Richard Biener  <rguenther@suse.de>
! 
! 	* tree-vect-data-refs.c (dr_group_sort_cmp): Do not compare
! 	BBs.
! 	(vect_analyze_data_ref_accesses): Likewise.  Assign the BB
! 	index as group_id when dataref_groups were not computed.
! 	* tree-vect-slp.c (vect_slp_bbs): Bump current_group when
! 	we advace to the next BB.
! 
! 2021-11-08  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2021-10-11  Richard Biener  <rguenther@suse.de>
! 
! 	PR middle-end/101480
! 	* gimple.c (gimple_call_fnspec): Do not mark operator new/delete
! 	as const.
! 
! 2021-11-08  Martin Liska  <mliska@suse.cz>
! 
! 	Backported from master:
! 	2021-11-08  Martin Liska  <mliska@suse.cz>
! 
! 	PR gcov-profile/100520
! 	* coverage.c (coverage_compute_profile_id): Strip .gk when
! 	compare debug is used.
! 	* system.h (endswith): New function.
! 
! 2021-11-08  Kewen Lin  <linkw@linux.ibm.com>
! 
! 	Backported from master:
! 	2021-10-26  Kewen Lin  <linkw@linux.ibm.com>
! 
! 	PR tree-optimization/102789
! 	* tree-vect-loop-manip.c (vect_update_inits_of_drs): Do not
! 	update inits of simd_lane_access.
! 
! 2021-11-05  John David Anglin  <danglin@gcc.gnu.org>
! 
! 	PR libgomp/96661
! 	* config/pa/pa-modes.def: Add OImode integer type.
! 	* config/pa/pa.c (pa_scalar_mode_supported_p): Allow TImode
! 	for TARGET_64BIT.
! 	* config/pa/pa.h (MIN_UNITS_PER_WORD) Define to MIN_UNITS_PER_WORD
! 	to UNITS_PER_WORD if IN_LIBGCC2.
! 	* config/pa/pa.md (addti3, addvti3, subti3, subvti3, negti2,
! 	negvti2, ashlti3, shrpd_internal): New patterns.
! 	Change some multi instruction types to multi.
! 
! 2021-11-05  Martin Liska  <mliska@suse.cz>
! 
! 	Backported from master:
! 	2021-08-16  Martin Liska  <mliska@suse.cz>
! 
! 	PR tree-optimization/100393
! 	* tree-switch-conversion.c (group_cluster::dump): Use
! 	  get_comparison_count.
! 	(jump_table_cluster::find_jump_tables): Pre-compute number of
! 	comparisons and then decrement it. Cache also max_ratio.
! 	(jump_table_cluster::can_be_handled): Change signature.
! 	* tree-switch-conversion.h (get_comparison_count): New.
! 
! 2021-11-05  Rasmus Villemoes  <rasmus.villemoes@prevas.dk>
! 
! 	Backported from master:
! 	2021-11-05  Rasmus Villemoes  <rasmus.villemoes@prevas.dk>
! 
! 	* config/vx-common.h: Test value of TARGET_VXWORKS7 rather
! 	than definedness.
! 
! 2021-11-04  Hongyu Wang  <hongyu.wang@intel.com>
! 
! 	* config/i386/amxtileintrin.h (_tile_loadd_internal): Add
! 	parentheses to base and stride.
! 	(_tile_stream_loadd_internal): Likewise.
! 	(_tile_stored_internal): Likewise.
! 
! 2021-11-03  Maciej W. Rozycki  <macro@embecosm.com>
! 
! 	* gimple-range-cache.cc (ranger_cache::push_poor_value): Mark
! 	parameters unused.
! 
! 2021-11-03  Vladimir N. Makarov  <vmakarov@redhat.com>
! 
! 	PR rtl-optimization/102842
! 	* lra-constraints.c (match_reload): Ignore out in checking values
! 	of outs.
! 	(curr_insn_transform): Collect outputs before doing reloads of operands.
! 
! 2021-11-03  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2021-10-13  Richard Biener  <rguenther@suse.de>
! 
! 	PR ipa/102714
! 	* ipa-sra.c (ptr_parm_has_nonarg_uses): Fix volatileness
! 	check.
! 
! 2021-10-28  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	* doc/invoke.texi (%X): Remove obsolete reference to -Wl.
! 
! 2021-10-27  Martin Jambor  <mjambor@suse.cz>
! 
! 	Backported from master:
! 	2021-10-21  Martin Jambor  <mjambor@suse.cz>
! 
! 	PR tree-optimization/102505
! 	* tree-sra.c (totally_scalarize_subtree): Check that the
! 	encountered field fits within the acces we would like to put it
! 	in.
! 
! 2021-10-26  Piotr Kubaj  <pkubaj@FreeBSD.org>
! 
! 	Backported from master:
! 	2021-10-16  Piotr Kubaj  <pkubaj@FreeBSD.org>
! 
! 	* configure.ac: Treat powerpc64*-*-freebsd* the same as
! 	powerpc64-*-freebsd*.
! 	* configure: Regenerate.
! 
! 2021-10-24  John David Anglin  <danglin@gcc.gnu.org>
! 
! 	* config/pa/pa-d.c (pa_d_handle_target_float_abi): Don't check
! 	TARGET_DISABLE_FPREGS.
! 	* config/pa/pa.c (fix_range): Use MASK_SOFT_FLOAT instead of
! 	MASK_DISABLE_FPREGS.
! 	(hppa_rtx_costs): Don't check TARGET_DISABLE_FPREGS.  Adjust
! 	cost of hardware integer multiplication.
! 	(pa_conditional_register_usage): Don't check TARGET_DISABLE_FPREGS.
! 	* config/pa/pa.h (INT14_OK_STRICT): Likewise.
! 	* config/pa/pa.md: Don't check TARGET_DISABLE_FPREGS. Check
! 	TARGET_SOFT_FLOAT in patterns that use xmpyu instruction.
! 	* config/pa/pa.opt (mdisable-fpregs): Change target mask to
! 	SOFT_FLOAT.  Revise comment.
! 	(msoft-float): New option.
! 
! 2021-10-24  John David Anglin  <danglin@gcc.gnu.org>
! 
! 	* config/pa/pa.md: Don't use 'G' constraint in integer move patterns.
! 
! 2021-10-21  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Backported from master:
! 	2021-10-21  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/98667
! 	* doc/invoke.texi: Document -fcf-protection requires i686 or
! 	new.
! 
! 2021-10-18  Uroš Bizjak  <ubizjak@gmail.com>
! 
! 	PR target/102761
! 	* config/i386/i386.c (ix86_print_operand_address):
! 	Error out for non-address_operand asm operands.
! 
! 2021-10-18  Kito Cheng  <kito.cheng@sifive.com>
! 
! 	Backported from master:
! 	2021-10-11  Kito Cheng  <kito.cheng@sifive.com>
! 
! 	PR target/100316
! 	* builtins.c (maybe_emit_call_builtin___clear_cache): Allow
! 	CONST_INT for BEGIN and END, and use gcc_assert rather than
! 	error.
! 
! 2021-10-18  Andrew Stubbs  <ams@codesourcery.com>
! 
! 	Backported from master:
! 	2021-10-15  Andrew Stubbs  <ams@codesourcery.com>
! 
! 	* config/gcn/gcn-hsa.h (S_FIJI): Set unconditionally.
! 	(S_900): Likewise.
! 	(S_906): Likewise.
! 	* config/gcn/gcn.c: Hard code SRAM ECC settings for old architectures.
! 	* config/gcn/mkoffload.c (ELFABIVERSION_AMDGPU_HSA): Rename to ...
! 	(ELFABIVERSION_AMDGPU_HSA_V3): ... this.
! 	(ELFABIVERSION_AMDGPU_HSA_V4): New.
! 	(SET_SRAM_ECC_UNSUPPORTED): New.
! 	(copy_early_debug_info): Create elf flags to match the other objects.
! 	(main): Just let the attribute flags pass through.
! 
! 2021-10-18  Andrew Stubbs  <ams@codesourcery.com>
! 
! 	Backported from master:
! 	2021-10-07  Andrew Stubbs  <ams@codesourcery.com>
! 
! 	* config/gcn/gcn-valu.md (gather<mode>_insn_2offsets<exec>): Apply
! 	HAVE_GCN_ASM_GLOBAL_LOAD_FIXED.
! 	(scatter<mode>_insn_2offsets<exec_scatter>): Likewise.
! 
! 2021-10-18  Andrew Stubbs  <ams@codesourcery.com>
! 
! 	Backported from master:
! 	2021-10-07  Andrew Stubbs  <ams@codesourcery.com>
! 
! 	* config/gcn/gcn-hsa.h (SRAMOPT): Include the whole option string.
! 	Adjust for new -msram-ecc=any behaviour.
! 	(ASM_SPEC): Adjust -mxnack and -msram-ecc usage.
! 	* config/gcn/gcn.c (output_file_start): Implement -msram-ecc=any.
! 	* config/gcn/mkoffload.c (EF_AMDGPU_XNACK): Rename to ...
! 	(EF_AMDGPU_XNACK_V3): ... this.
! 	(EF_AMDGPU_SRAM_ECC): Rename to ...
! 	(EF_AMDGPU_SRAM_ECC_V3): ... this.
! 	(EF_AMDGPU_FEATURE_XNACK_V4): New.
! 	(EF_AMDGPU_FEATURE_XNACK_UNSUPPORTED_V4): New.
! 	(EF_AMDGPU_FEATURE_XNACK_ANY_V4): New.
! 	(EF_AMDGPU_FEATURE_XNACK_OFF_V4): New.
! 	(EF_AMDGPU_FEATURE_XNACK_ON_V4): New.
! 	(EF_AMDGPU_FEATURE_SRAMECC_V4): New.
! 	(EF_AMDGPU_FEATURE_SRAMECC_UNSUPPORTED_V4): New.
! 	(EF_AMDGPU_FEATURE_SRAMECC_ANY_V4): New.
! 	(EF_AMDGPU_FEATURE_SRAMECC_OFF_V4): New.
! 	(EF_AMDGPU_FEATURE_SRAMECC_ON_V4): New.
! 	(SET_XNACK_ON): New.
! 	(SET_XNACK_OFF): New.
! 	(TEST_XNACK): New.
! 	(SET_SRAM_ECC_ON): New.
! 	(SET_SRAM_ECC_ANY): New.
! 	(SET_SRAM_ECC_OFF): New.
! 	(TEST_SRAM_ECC_ANY): New.
! 	(TEST_SRAM_ECC_ON): New.
! 	(main): Implement HSACOv4 and -msram-ecc=any.
! 
! 2021-10-18  Andrew Stubbs  <ams@codesourcery.com>
! 
! 	Backported from master:
! 	2021-10-07  Andrew Stubbs  <ams@codesourcery.com>
! 
! 	* config.in: Regenerate.
! 	* config/gcn/gcn-hsa.h (X_FIJI): New macro.
! 	(X_900): New macro.
! 	(X_906): New macro.
! 	(X_908): New macro.
! 	(A_FIJI): Rename to ...
! 	(S_FIJI): ... this.
! 	(A_900): Rename to ...
! 	(S_900): ... this.
! 	(A_906): Rename to ...
! 	(S_906): ... this.
! 	(A_908): Rename to ...
! 	(S_908): ... this.
! 	(SRAMOPT): New macro.
! 	(ASM_SPEC): Adjust xnack option usage.
! 	* config/gcn/gcn.c (output_file_start): Adjust amdgcn_target usage.
! 	* configure: Regenerate.
! 	* configure.ac: Detect LLVM assembler dialect.
! 
! 2021-10-18  Julian Brown  <julian@codesourcery.com>
! 
! 	Backported from master:
! 	2021-06-29  Julian Brown  <julian@codesourcery.com>
  
! 	* config/gcn/gcn.md (mulsi3): Make s_mulk_i32 variant clobber SCC.
  
! 2021-10-18  Andrew Stubbs  <ams@codesourcery.com>
  
! 	PR target/100208
! 	* config.in: Regenerate.
! 	* config/gcn/gcn-hsa.h (A_FIJI): New define.
! 	(A_900): New define.
! 	(A_906): New define.
! 	(A_908): New define.
! 	(ASM_SPEC): Use A_FIJI, A_900, A_906 and A_908.
! 	* config/gcn/gcn.c (output_file_start): Adjust attributes according
! 	to the assembler capabilities.
! 	* config/gcn/mkoffload.c (main): Likewise.
! 	* configure: Regenerate.
! 	* configure.ac: Add tests for LLVM assembler attribute features.
  
! 2021-10-18  Andrew Stubbs  <ams@codesourcery.com>
  
! 	Backported from master:
! 	2021-07-19  Andrew Stubbs  <ams@codesourcery.com>
  
! 	PR target/100208
! 	* config/gcn/gcn-hsa.h (DRIVER_SELF_SPECS): New.
! 	(ASM_SPEC): Set -mattr for xnack and sram-ecc.
! 	* config/gcn/gcn-opts.h (enum sram_ecc_type): New.
! 	* config/gcn/gcn-valu.md: Add a warning comment.
! 	* config/gcn/gcn.c (gcn_option_override): Add "sorry" for -mxnack.
! 	(output_file_start): Add xnack and sram-ecc state to ".amdgcn_target".
! 	* config/gcn/gcn.md: Add a warning comment.
! 	* config/gcn/gcn.opt: Add -mxnack and -msram-ecc.
! 	* config/gcn/mkoffload.c (EF_AMDGPU_MACH_AMDGCN_GFX908): Remove
! 	SRAM-ECC flag.
! 	(EF_AMDGPU_XNACK): New.
! 	(EF_AMDGPU_SRAM_ECC): New.
! 	(elf_flags): New.
! 	(copy_early_debug_info): Use elf_flags.
! 	(main): Handle -mxnack and -msram-ecc options.
! 	* doc/invoke.texi: Document -mxnack and -msram-ecc.
  
! 2021-10-18  Marcel Vollweiler  <marcel@codesourcery.com>
  
! 	Backported from master:
! 	2021-06-18  Marcel Vollweiler  <marcel@codesourcery.com>
  
! 	* config.in: Regenerate.
! 	* config/gcn/gcn.c (print_operand_address): Fix for global_load assembler
! 	functions.
! 	* configure: Regenerate.
! 	* configure.ac: Fix for global_load assembler functions.
  
! 2021-10-15  John David Anglin  <danglin@gcc.gnu.org>
  
! 	* config/pa/pa.md: Consistently use "rG" constraint for copy
! 	instruction in move patterns.
  
! 2021-10-14  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR rtl-optimization/102627
! 	* lra-constraints.c (split_reg): Use at least natural mode of hard reg.
  
! 2021-10-14  John David Anglin  <danglin@gcc.gnu.org>
  
! 	* config/pa/pa.md (cbranchsf4): Disable if TARGET_SOFT_FLOAT.
! 	(cbranchdf4): Likewise.
! 	Add missing move patterns for TARGET_SOFT_FLOAT.
  
! 2021-10-13  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	Backported from master:
! 	2021-08-17  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	PR target/100340
! 	* config.in: Regenerate.
! 	* config/i386/darwin.h (EXTRA_ASM_OPTS): New
! 	(ASM_SPEC): Pass options to disable branch shortening where
! 	needed.
! 	* configure: Regenerate.
! 	* configure.ac: Detect versions of 'as' that support the
! 	optimisation which has the bug.
  
! 2021-10-13  John David Anglin  <danglin@gcc.gnu.org>
  
! 	* config/pa/pa.md (muldi3): Add support for inlining 64-bit
! 	multiplication on 32-bit PA 1.1 and 2.0 targets.
  
! 2021-10-12  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR target/102588
! 	* config/sparc/sparc-modes.def (OI): New integer mode.
  
! 2021-10-11  Diane Meirowitz  <diane.meirowitz@oracle.com>
  
! 	Backported from master:
! 	2021-10-11  Diane Meirowitz  <diane.meirowitz@oracle.com>
  
! 	* doc/invoke.texi: Add link to UndefinedBehaviorSanitizer
! 	documentation, mention UBSAN_OPTIONS, similar to what is done
! 	for AddressSanitizer.
  
! 2021-10-10  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-10-10  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/102441
! 	* var-tracking.c (add_stores): For cselib_sp_derived_value_p values
! 	use MO_VAL_SET if loc is not sp.
  
! 2021-10-06  Patrick Palka  <ppalka@redhat.com>
  
! 	Backported from master:
! 	2021-09-24  Patrick Palka  <ppalka@redhat.com>
  
! 	PR c++/98216
! 	PR c++/91292
! 	* real.c (encode_ieee_double): Avoid unwanted sign extension.
! 	(encode_ieee_quad): Likewise.
  
! 2021-10-05  Ilya Leoshkevich  <iii@linux.ibm.com>
  
! 	Backported from master:
! 	2021-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>
  
! 	* config/s390/predicates.md (bras_sym_operand): Accept all
! 	functions in 64-bit mode, use UNSPEC_PLT31.
! 	(larl_operand): Use UNSPEC_PLT31.
! 	* config/s390/s390.c (s390_loadrelative_operand_p): Likewise.
! 	(legitimize_pic_address): Likewise.
! 	(s390_emit_tls_call_insn): Mark __tls_get_offset as function,
! 	use UNSPEC_PLT31.
! 	(s390_delegitimize_address): Use UNSPEC_PLT31.
! 	(s390_output_addr_const_extra): Likewise.
! 	(print_operand): Add @PLT to TLS calls, handle %K.
! 	(s390_function_profiler): Mark __fentry__/_mcount as function,
! 	use %K, use UNSPEC_PLT31.
! 	(s390_output_mi_thunk): Use only UNSPEC_GOT, use %K.
! 	(s390_emit_call): Use UNSPEC_PLT31.
! 	(s390_emit_tpf_eh_return): Mark __tpf_eh_return as function.
! 	* config/s390/s390.md (UNSPEC_PLT31): Rename from UNSPEC_PLT.
! 	(*movdi_64): Use %K.
! 	(reload_base_64): Likewise.
! 	(*sibcall_brc): Likewise.
! 	(*sibcall_brcl): Likewise.
! 	(*sibcall_value_brc): Likewise.
! 	(*sibcall_value_brcl): Likewise.
! 	(*bras): Likewise.
! 	(*brasl): Likewise.
! 	(*bras_r): Likewise.
! 	(*brasl_r): Likewise.
! 	(*bras_tls): Likewise.
! 	(*brasl_tls): Likewise.
! 	(main_base_64): Likewise.
! 	(reload_base_64): Likewise.
! 	(@split_stack_call<mode>): Likewise.
  
! 2021-10-05  Ilya Leoshkevich  <iii@linux.ibm.com>
  
! 	Backported from master:
! 	2021-06-24  Ilya Leoshkevich  <iii@linux.ibm.com>
  
! 	* config/s390/s390.c (s390_function_profiler): Ignore labelno
! 	parameter.
! 	* config/s390/s390.h (NO_PROFILE_COUNTERS): Define.
  
! 2021-10-04  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* config/rs6000/vxworks.h (TARGET_INIT_LIBFUNCS): Delete.
  
! 2021-10-01  John David Anglin  <danglin@gcc.gnu.org>
  
! 	PR debug/102373
! 	* config/pa/pa.c (pa_option_override): Default to dwarf version 4
! 	on hppa64-hpux.
  
! 2021-10-01  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* explow.c: Include langhooks.h.
! 	(set_stack_check_libfunc): Build a proper function type.
  
! 2021-10-01  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR c++/64697
! 	* config/i386/i386.c (legitimate_pic_address_disp_p): For PE-COFF do
! 	not return true for external weak function symbols in medium model.
  
! 2021-09-29  Peter Bergner  <bergner@linux.ibm.com>
  
! 	Backported from master:
! 	2021-09-14  Peter Bergner  <bergner@linux.ibm.com>
  
! 	* config/rs6000/mma.md (unspec): Delete UNSPEC_MMA_XXSETACCZ.
! 	(unspecv): Add UNSPECV_MMA_XXSETACCZ.
! 	(*mma_xxsetaccz): Delete.
! 	(mma_xxsetaccz): Change to define_insn.  Remove operand 1.
! 	Use UNSPECV_MMA_XXSETACCZ.  Update comment.
! 	* config/rs6000/rs6000.c (rs6000_rtx_costs): Use UNSPECV_MMA_XXSETACCZ.
  
! 2021-09-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-09-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/102498
! 	* config/i386/i386.c (standard_80387_constant_p): Don't recognize
! 	special 80387 instruction XFmode constants if flag_rounding_math.
  
! 2021-09-24  Feng Xue  <fxue@os.amperecomputing.com>
  
! 	PR tree-optimization/102400
! 	* tree-ssa-sccvn.c (vn_reference_insert_pieces): Initialize
! 	result_vdef to zero value.
  
! 2021-09-24  Feng Xue  <fxue@os.amperecomputing.com>
  
! 	PR tree-optimization/102451
! 	* tree-ssa-dse.c (delete_dead_or_redundant_call): Record bb of stmt
! 	before removal.
  
! 2021-09-22  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	Backported from master:
! 	2021-09-22  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	* config/s390/tpf.md (prologue_tpf, epilogue_tpf): Add cc clobber.
  
! 2021-09-22  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	Backported from master:
! 	2021-09-22  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	PR target/102222
! 	* config/s390/s390.c (s390_expand_insv): Emit a normal move if it
! 	is actually a full copy of the source operand into the target.
! 	Don't emit a strict low part move if source and target mode match.
  
! 2021-09-22  Kewen Lin  <linkw@linux.ibm.com>
  
! 	* ipa-fnsummary.c (inline_read_section): Unpack a dummy bit
! 	to keep consistent with the side of streaming out.
  
! 2021-09-21  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	Backported from master:
! 	2021-09-08  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	PR target/102107
! 	* config/rs6000/rs6000-logue.c (rs6000_emit_epilogue): For ELFv2 use
! 	r11 instead of r12 for restoring CR.
  
! 2021-09-21  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	Backported from master:
! 	2021-09-03  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	PR target/102107
! 	* config/rs6000/rs6000-logue.c (rs6000_emit_prologue): On ELFv2 use r11
! 	instead of r12 for CR save, in all cases.
  
! 2021-09-17  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR rtl-optimization/102306
! 	* combine.c (try_combine): Abort the combination if we are about to
! 	duplicate volatile references.
  
! 2021-09-16  Daniel Cederman  <cederman@gaisler.com>
  
! 	* config/sparc/sparc-opts.h (enum sparc_processor_type): Add LEON5
! 	* config/sparc/sparc.c (struct processor_costs): Add LEON5 costs
! 	(leon5_adjust_cost): Increase cost of store with data dependency
! 	on ALU instruction and FPU anti-dependencies.
! 	(sparc_option_override): Add LEON5 costs
! 	(sparc_adjust_cost): Add LEON5 cost adjustments
! 	* config/sparc/sparc.h: Add LEON5
! 	* config/sparc/sparc.md: Include LEON5 scheduling information
! 	* config/sparc/sparc.opt: Add LEON5
! 	* doc/invoke.texi: Add LEON5
! 	* config/sparc/leon5.md: New file.
  
! 2021-09-16  Daniel Cederman  <cederman@gaisler.com>
  
! 	* config/sparc/sparc.md (stack_protect_setsi): Add NOP to prevent
! 	sensitive sequence for B2BST errata workaround.
  
! 2021-09-16  Daniel Cederman  <cederman@gaisler.com>
  
! 	* config/sparc/sparc.c (sparc_do_work_around_errata): Do not begin
! 	functions with atomic instruction in the UT700 errata workaround.
  
! 2021-09-16  Daniel Cederman  <cederman@gaisler.com>
  
! 	* config/sparc/sparc.c (next_active_non_empty_insn): New function
! 	that returns next active non empty assembly instruction.
! 	(sparc_do_work_around_errata): Use new function.
  
! 2021-09-16  Daniel Cederman  <cederman@gaisler.com>
  
! 	* config/sparc/sparc.c (store_insn_p): Add predicate for store
! 	attributes.
! 	(load_insn_p): Add predicate for load attributes.
! 	(sparc_do_work_around_errata): Use new predicates.
  
! 2021-09-16  Andreas Larsson  <andreas@gaisler.com>
  
! 	* config/sparc/sparc.c (dump_target_flag_bits): Print bit names for
! 	LEON and LEON3.
  
! 2021-09-16  Andrew Pinski  <apinski@marvell.com>
  
! 	Backported from master:
! 	2021-09-01  Andrew Pinski  <apinski@marvell.com>
  
! 	PR target/101934
! 	* config/aarch64/aarch64.c (aarch64_expand_setmem):
! 	Check STRICT_ALIGNMENT before creating an overlapping
! 	store.
  
! 2021-09-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-09-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/88578
! 	PR c++/102295
! 	* varasm.c (output_constructor_regular_field): Instead of assertion
! 	that array_size_for_constructor result is equal to size of
! 	TREE_TYPE (local->val) in bytes, assert that the type size is greater
! 	or equal to array_size_for_constructor result and use type size as
! 	fieldsize.
  
! 2021-09-15  Pat Haugen  <pthaugen@linux.ibm.com>
  
! 	* config/rs6000/rs6000-cpus.def (ISA_3_1_MASKS_SERVER): Add
! 	OPTION_MASK_P10_FUSION_2STORE.
! 	(POWERPC_MASKS): Likewise.
! 	* config/rs6000/rs6000.c (rs6000_option_override_internal): Enable
! 	store fusion for Power10.
! 	(is_fusable_store): New.
! 	(power10_sched_reorder): Likewise.
! 	(rs6000_sched_reorder): Do Power10 specific reordering.
! 	(rs6000_sched_reorder2): Likewise.
! 	* config/rs6000/rs6000.opt: Add new option.
  
! 2021-09-15  Peter Bergner  <bergner@linux.ibm.com>
  
! 	Backported from master:
! 	2021-07-14  Peter Bergner  <bergner@linux.ibm.com>
  
! 	* config/rs6000/rs6000.c (adjacent_mem_locations): Return the lower
! 	addressed memory rtx, if any.
! 	(rs6000_split_multireg_move): Fix code formatting.
! 	Handle MMA build built-ins with operands in adjacent memory locations.
  
! 2021-09-15  Peter Bergner  <bergner@linux.ibm.com>
  
! 	Backported from master:
! 	2021-07-14  Peter Bergner  <bergner@linux.ibm.com>
  
! 	* config/rs6000/rs6000.c (rs6000_split_multireg_move): Move to later
! 	in the file.
  
! 2021-09-14  Pat Haugen  <pthaugen@linux.ibm.com>
  
! 	* config/rs6000/rs6000.c (is_load_insn1): Verify destination is a
! 	register.
! 	(is_store_insn1): Verify source is a register.
  
! 2021-09-14  Xionghu Luo  <luoxhu@linux.ibm.com>
  
! 	PR target/97142
! 	* config/rs6000/rs6000.md (fmod<mode>3): New define_expand.
! 	(remainder<mode>3): Likewise.
  
! 2021-09-08  Jonathan Wakely  <jwakely@redhat.com>
  
! 	Backported from master:
! 	2021-09-08  Jonathan Wakely  <jwakely@redhat.com>
  
! 	PR c++/60318
! 	* doc/trouble.texi (Copy Assignment): Fix description of
! 	behaviour and fix code in example.
  
! 2021-09-08  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-09-08  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/102224
! 	* config/i386/i386.md (xorsign<mode>3): If operands[1] is equal to
! 	operands[2], emit abs<mode>2 instead.
! 	(@xorsign<mode>3_1): Add early-clobber for output operand.
  
! 2021-09-07  Max Filippov  <jcmvbkbc@gmail.com>
  
! 	Backported from master:
! 	2021-09-07  Takayuki 'January June' Suwa  <jjsuwa_sys3175@yahoo.co.jp>
  
! 	PR target/102115
! 	* config/xtensa/xtensa.c (xtensa_emit_move_sequence): Add
! 	'CONST_INT_P (src)' to the condition of the block that tries to
! 	eliminate literal when loading integer contant.
  
! 2021-09-06  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-08-25  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/102046
! 	* tree-vect-slp.c (vect_build_slp_tree_2): Conservatively
! 	update ->any_pattern when swapping operands.
  
! 2021-09-06  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-08-17  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101925
! 	* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Set
! 	reverse on COMPONENT_REF and ARRAY_REF according to
! 	what reverse_storage_order_for_component_p does.
! 	(vn_reference_eq): Compare reversed on reference ops.
! 	(reverse_storage_order_for_component_p): New overload.
! 	(vn_reference_lookup_3): Check reverse_storage_order_for_component_p
! 	on the reference looked up.
  
! 2021-09-06  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-08-10  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/101824
! 	* tree-nested.c (get_frame_field): Mark the COMPONENT_REF as
! 	volatile in case the variable was.
  
! 2021-09-03  Michael Meissner  <meissner@linux.ibm.com>
  
! 	* config/rs6000/altivec.md (UNSPEC_XXSPLTIDP): Rename from
! 	UNSPEC_XXSPLTID.
! 	(xxspltidp_v2df): Likewise.
! 	(xxspltidp_v2df_inst): Likewise.
  
! 2021-09-03  Michael Meissner  <meissner@linux.ibm.com>
  
! 	* config/rs6000/altivec.md (xxspltiw_v4si): Use vecperm type
! 	attribute.  Backport from master, 2021-08-24.
! 	(xxspltiw_v4si_inst): Likewise.
! 	(xxspltiw_v4sf_inst): Likewise.
! 	(xxspltidp_v2df): Likewise.
! 	(xxspltidp_v2df_inst): Likewise.
! 	(xxsplti32dx_v4si): Likewise.
! 	(xxsplti32dx_v4si_inst): Likewise.
! 	(xxsplti32dx_v4sf_inst): Likewise.
! 	(xxblend_<mode>): Likewise.
! 	(xxpermx): Likewise.
! 	(xxpermx_inst): Likewise.
! 	(xxeval): Likewise.
  
! 2021-09-03  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/102166
! 	* config/i386/amxbf16intrin.h : Remove macro check for __AMX_BF16__.
! 	* config/i386/amxint8intrin.h : Remove macro check for __AMX_INT8__.
! 	* config/i386/amxtileintrin.h : Remove macro check for __AMX_TILE__.
  
! 2021-09-02  Peter Bergner  <bergner@linux.ibm.com>
  
! 	Backported from master:
! 	2021-08-19  Peter Bergner  <bergner@linux.ibm.com>
  
! 	PR target/101849
! 	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_mma_builtin): Cast
! 	pointer to __vector_pair *.
  
! 2021-09-01  Marek Polacek  <polacek@redhat.com>
! 	    Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/101592
! 	* fold-const.c (make_range_step): Return NULL_TREE for NULLPTR_TYPE.
  
! 2021-09-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-09-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/102124
! 	* tree-vect-patterns.c (vect_recog_widen_op_pattern): For ORIG_CODE
! 	MINUS_EXPR, if itype is unsigned with smaller precision than type,
! 	add an extra cast to signed variant of itype to ensure sign-extension.
  
! 2021-08-31  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	Backported from master:
! 	2021-08-31  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	* tree.c (walk_tree_1) <OMP_CLAUSE_TILE>: Handle three operands.
  
! 2021-08-30  Haochen Gui  <guihaoc@gcc.gnu.org>
  
! 	Backported from master:
! 	2021-06-04  Haochen Gui  <guihaoc@gcc.gnu.org>
  
! 	* config/rs6000/rs6000-call.c (rs6000_promote_function_mode):
! 	Replace PROMOTE_MODE marco with its content.
  
! 2021-08-30  Haochen Gui  <guihaoc@gcc.gnu.org>
  
! 	Backported from master:
! 	2021-06-04  Haochen Gui  <guihaoc@gcc.gnu.org>
  
! 	* config/rs6000/rs6000.h (PROMOTE_MODE): Remove.
  
! 2021-08-27  konglin1  <lingling.kong@intel.com>
  
! 	PR target/101472
! 	* config/i386/sse.md: (<avx512>scattersi<mode>): Add mask operand to
! 	UNSPEC_VSIBADDR.
! 	(<avx512>scattersi<mode>): Likewise.
! 	(*avx512f_scattersi<VI48F:mode>): Merge mask operand to set_dest.
! 	(*avx512f_scatterdi<VI48F:mode>): Likewise
  
! 2021-08-25  H.J. Lu  <hjl.tools@gmail.com>
  
! 	Backported from master:
! 	2021-08-05  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/99744
! 	* config/i386/i386.c (ix86_can_inline_p): Ignore MASK_80387 if
! 	callee only uses GPRs.
! 	* config/i386/ia32intrin.h: Revert commit 5463cee2770.
! 	* config/i386/serializeintrin.h: Revert commit 71958f740f1.
! 	* config/i386/x86gprintrin.h: Add
! 	#pragma GCC target("general-regs-only") and #pragma GCC pop_options
! 	to disable non-GPR ISAs.
  
! 2021-08-25  H.J. Lu  <hjl.tools@gmail.com>
  
! 	Backported from master:
! 	2021-07-18  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/101492
! 	* common/config/i386/i386-common.c (ix86_handle_option): For
! 	-mgeneral-regs-only, enable the GPR only instructions which are
! 	enabled implicitly by SSE ISAs unless they have been disabled
! 	explicitly.
  
! 2021-08-25  H.J. Lu  <hjl.tools@gmail.com>
  
! 	Backported from master:
! 	2021-07-21  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/101549
! 	* config/i386/i386-builtin.def: Remove OPTION_MASK_ISA_SSE4_2
! 	from CRC32 _builtin functions.
  
! 2021-08-25  H.J. Lu  <hjl.tools@gmail.com>
  
! 	Backported from master:
! 	2021-04-20  H.J. Lu  <hjl.tools@gmail.com>
  
! 	* config/i386/i386-c.c (ix86_target_macros_internal): Define
! 	__CRC32__ for -mcrc32.
! 	* config/i386/i386-options.c (ix86_option_override_internal):
! 	Enable crc32 instruction for -msse4.2.
! 	* config/i386/i386.md (sse4_2_crc32<mode>): Remove TARGET_SSE4_2
! 	check.
! 	(sse4_2_crc32di): Likewise.
! 	* config/i386/ia32intrin.h: Use crc32 target option for CRC32
! 	intrinsics.
  
! 2021-08-25  H.J. Lu  <hjl.tools@gmail.com>
  
! 	Backported from master:
! 	2021-04-21  H.J. Lu  <hjl.tools@gmail.com>
  
! 	* config.gcc: Install mwaitintrin.h for i[34567]86-*-* and
! 	x86_64-*-* targets.
! 	* lto-streamer.h (LTO_minor_version): Bump.
! 	* common/config/i386/i386-common.c (OPTION_MASK_ISA2_MWAIT_SET):
! 	New.
! 	(OPTION_MASK_ISA2_MWAIT_UNSET): Likewise.
! 	(ix86_handle_option): Handle -mmwait.
! 	* config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
! 	Replace OPTION_MASK_ISA_SSE3 with OPTION_MASK_ISA2_MWAIT on
! 	__builtin_ia32_monitor and __builtin_ia32_mwait.
! 	* config/i386/i386-options.c (isa2_opts): Add -mmwait.
! 	(ix86_valid_target_attribute_inner_p): Likewise.
! 	(ix86_option_override_internal): Enable mwait/monitor
! 	instructions for -msse3.
! 	* config/i386/i386.h (TARGET_MWAIT): New.
! 	(TARGET_MWAIT_P): Likewise.
! 	* config/i386/i386.opt: Add -mmwait.
! 	* config/i386/mwaitintrin.h: New file.
! 	* config/i386/pmmintrin.h: Include <mwaitintrin.h>.
! 	* config/i386/sse.md (sse3_mwait): Replace TARGET_SSE3 with
! 	TARGET_MWAIT.
! 	(@sse3_monitor_<mode>): Likewise.
! 	* config/i386/x86gprintrin.h: Include <mwaitintrin.h>.
! 	* doc/extend.texi: Document mwait target attribute.
! 	* doc/invoke.texi: Document -mmwait.
  
! 2021-08-25  konglin1  <lingling.kong@intel.com>
  
! 	PR target/101471
! 	* config/i386/avx512dqintrin.h (_mm512_fpclass_ps_mask): Fix
! 	macro define in O0.
! 	(_mm512_mask_fpclass_ps_mask): Ditto.
  
! 2021-08-24  Richard Earnshaw  <rearnsha@arm.com>
  
! 	Backported from master:
! 	2021-08-24  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/102035
! 	* config/arm/arm.md (attribute arch): Add fix_vlldm.
! 	(arch_enabled): Use it.
! 	* config/arm/vfp.md (lazy_store_multiple_insn): Add alternative to
! 	use when erratum mitigation is needed.
  
! 2021-08-24  Richard Earnshaw  <rearnsha@arm.com>
  
! 	Backported from master:
! 	2021-08-24  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/102035
! 	* config/arm/arm.opt (mfix-cmse-cve-2021-35465): New option.
! 	* doc/invoke.texi (Arm Options): Document it.
! 	* config/arm/arm-cpus.in (quirk_vlldm): New feature bit.
! 	(ALL_QUIRKS): Add quirk_vlldm.
! 	(cortex-m33): Add quirk_vlldm.
! 	(cortex-m35p, cortex-m55): Likewise.
! 	* config/arm/arm.c (arm_option_override): Enable fix_vlldm if
! 	targetting an affected CPU and not explicitly controlled on
! 	the command line.
  
! 2021-08-24  Richard Earnshaw  <rearnsha@arm.com>
  
! 	Backported from master:
! 	2021-08-24  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* config/arm/vfp.md (lazy_store_multiple_insn): Rewrite as valid RTL.
! 	(lazy_load_multiple_insn): Likewise.
  
! 2021-08-24  Jan Hubicka  <hubicka@ucw.cz>
  
! 	Backported from master:
! 	2021-08-23  Jan Hubicka  <hubicka@ucw.cz>
  
! 	PR middle-end/101949
! 	* ipa-modref.c (analyze_ssa_name_flags): Fix merging of
! 	EAF_NOCLOBBER
  
! 2021-08-24  Jan Hubicka  <jh@suse.cz>
  
! 	Backported from master:
! 	2021-08-22  Jan Hubicka  <hubicka@ucw.cz>
! 		    Martin Liska  <mliska@suse.cz>
  
! 	PR middle-end/101949
! 	* ipa-modref.c (analyze_ssa_name_flags): Indirect call implies
! 	~EAF_NOCLOBBER.
  
! 2021-08-24  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-08-23  Richard Biener  <rguenther@suse.de>
  
! 	PR ipa/97565
! 	* tree-ssa-structalias.c (ipa_pta_execute): Check in_other_partition
! 	in addition to has_gimple_body.
  
! 2021-08-23  Christophe Lyon  <christophe.lyon@foss.st.com>
  
! 	Backported from master:
! 	2021-08-23  Christophe Lyon  <christophe.lyon@foss.st.com>
  
! 	* config/arm/arm_mve.h: Fix __arm_vctp16q return type.
  
! 2021-08-23  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-08-23  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/101905
! 	* dwarf2out.c (gen_variable_die): Add DW_AT_location for global
! 	register variables already during early_dwarf if possible.
  
! 2021-08-23  Martin Liska  <mliska@suse.cz>
  
! 	Backported from master:
! 	2021-08-20  Martin Liska  <mliska@suse.cz>
  
! 	PR gcov-profile/89961
! 	* gcov.c (make_gcov_file_name): Rewrite using std::string.
! 	(mangle_name): Simplify, do not used the second argument.
! 	(strip_extention): New function.
! 	(get_md5sum): Likewise.
! 	(get_gcov_intermediate_filename): Handle properly -p and -x
! 	options.
! 	(output_gcov_file): Use string type.
! 	(generate_results): Likewise.
! 	(md5sum_to_hex): Remove.
  
! 2021-08-18  Richard Earnshaw  <rearnsha@arm.com>
  
! 	Backported from master:
! 	2021-08-05  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/101723
! 	* config/arm/arm-cpus.in (generic-armv7-a): Add quirk to suppress
! 	writing .cpu directive in asm output.
! 	* config/arm/arm.c (arm_identify_fpu_from_isa): New variable.
! 	(arm_last_printed_arch_string): Delete.
! 	(arm_last-printed_fpu_string): Delete.
! 	(arm_configure_build_target): If use of floating-point/SIMD is
! 	disabled, remove all fp/simd related features from the target ISA.
! 	(last_arm_targ_options): New variable.
! 	(arm_print_asm_arch_directives): Add new parameters.  Change order
! 	of emitted directives and handle all cases here.
! 	(arm_file_start): Always call arm_print_asm_arch_directives, move
! 	all generation of .arch/.arch_extension here.
! 	(arm_file_end): Call arm_print_asm_arch.
! 	(arm_declare_function_name): Call arm_print_asm_arch_directives
! 	instead of printing .arch/.fpu directives directly.
  
! 2021-08-18  Richard Earnshaw  <rearnsha@arm.com>
  
! 	Backported from master:
! 	2021-08-05  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* config/arm/arm.c (arm_configure_build_target): Don't call
! 	arm_option_reconfigure_globals.
! 	(arm_option_restore): Call arm_option_reconfigure_globals after
! 	reconfiguring the target.
! 	* config/arm/arm-c.c (arm_pragma_target_parse): Likewise.
  
! 2021-08-18  Richard Earnshaw  <rearnsha@arm.com>
  
! 	Backported from master:
! 	2021-08-05  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* config/arm/arm.c (arm_configure_build_target): Ensure the target's
! 	arch_name is always set.
  
! 2021-08-17  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101373
! 	PR tree-optimization/101868
! 	* tree-ssa-pre.c (prune_clobbered_mems): Also prune trapping
! 	references when the BB may not return.
  
! 2021-08-16  Eric Botcazou  <ebotcazou@gcc.gnu.org>
  
! 	* dwarf2out.c (add_scalar_info): Deal with DW_AT_data_bit_offset.
  
! 2021-08-16  Martin Liska  <mliska@suse.cz>
  
! 	PR ipa/100600
! 	* ipa-icf-gimple.c (func_checker::compare_ssa_name): Do not
! 	  consider equal SSA_NAMEs when one is a param.
  
! 2021-08-16  Martin Liska  <mliska@suse.cz>
  
! 	PR ipa/101261
! 	* symtab.c (symtab_node::noninterposable_alias): Do not create
! 	  local aliases for target_clone functions as the clonning pass
! 	  rejects aliases.
  
! 2021-08-16  Martin Liska  <mliska@suse.cz>
  
! 	PR ipa/101726
! 	* multiple_target.c (create_dispatcher_calls): Make default
! 	  function local only if it is a definition.
  
! 2021-08-16  Martin Liska  <mliska@suse.cz>
  
! 	PR c/100150
! 	* lto-streamer.h (LTO_minor_version): Bump.
  
! 2021-08-13  Martin Liska  <mliska@suse.cz>
  
! 	PR gcov-profile/100788
! 	* coverage.c (coverage_begin_function): Update function
! 	  beginning when #line macro is used.
  
! 2021-08-12  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-07-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/101624
! 	* ubsan.c (maybe_instrument_pointer_overflow,
! 	instrument_object_size): Only test DECL_REGISTER on VAR_DECLs,
! 	PARM_DECLs or RESULT_DECLs.
! 	* sanopt.c (maybe_optimize_ubsan_ptr_ifn): Likewise.
  
! 2021-08-12  Eric Botcazou  <ebotcazou@gcc.gnu.org>
  
! 	* configure.ac (PE linker --disable-dynamicbase support): New check.
! 	* configure: Regenerate.
! 	* config.in: Likewise.
! 	* config/i386/mingw32.h (LINK_SPEC_DISABLE_DYNAMICBASE): New define.
! 	(LINK_SPEC): Use it.
! 	* config/i386/mingw-w64.h (LINK_SPEC_DISABLE_DYNAMICBASE): Likewise.
! 	(LINK_SPEC): Likewise.
  
! 2021-08-06  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	Backported from master:
! 	2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* doc/invoke.texi: Document -mtune=neoverse-512tvb and
! 	-mcpu=neoverse-512tvb.
! 	* config/aarch64/aarch64-cores.def (neoverse-512tvb): New entry.
! 	* config/aarch64/aarch64-tune.md: Regenerate.
! 	* config/aarch64/aarch64.c (neoverse512tvb_sve_vector_cost)
! 	(neoverse512tvb_sve_issue_info, neoverse512tvb_vec_issue_info)
! 	(neoverse512tvb_vector_cost, neoverse512tvb_tunings): New structures.
! 	(aarch64_adjust_body_cost_sve): Handle -mtune=neoverse-512tvb.
! 	(aarch64_adjust_body_cost): Likewise.
  
! 2021-08-06  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	Backported from master:
! 	2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64.c (aarch64_add_stmt_cost): Only
! 	record issue information for operations that occur in the
! 	innermost loop.
  
! 2021-08-06  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	Backported from master:
! 	2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64.c (aarch64_multiply_add_p): Add a vec_flags
! 	parameter.  Detect cases in which an Advanced SIMD MLA would almost
! 	certainly require a MOV.
! 	(aarch64_count_ops): Update accordingly.
  
! 2021-08-06  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	Backported from master:
! 	2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64.c (aarch64_is_store_elt_extraction): New
! 	function, split out from...
! 	(aarch64_detect_vector_stmt_subtype): ...here.
! 	(aarch64_add_stmt_cost): Treat extracting element 0 as free.
  
! 2021-08-06  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	Backported from master:
! 	2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64-protos.h (sve_vec_cost):
! 	Add gather_load_x32_cost and gather_load_x64_cost.
! 	* config/aarch64/aarch64.c (generic_sve_vector_cost)
! 	(a64fx_sve_vector_cost, neoversev1_sve_vector_cost): Update
! 	accordingly, using the values given by the scalar_load * number
! 	of elements calculation that we used previously.
! 	(aarch64_detect_vector_stmt_subtype): Use the new fields.
  
! 2021-08-06  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	Backported from master:
! 	2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64.c (aarch64_adjust_body_cost_sve): New
! 	function, split out from...
! 	(aarch64_adjust_body_cost): ...here.
  
! 2021-08-06  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	Backported from master:
! 	2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/fractional-cost.h: New file.
! 	* config/aarch64/aarch64.c: Include <algorithm> (indirectly)
! 	and cost_fraction.h.
! 	(vec_cost_fraction): New typedef.
! 	(aarch64_detect_scalar_stmt_subtype): Use it for statement costs.
! 	(aarch64_detect_vector_stmt_subtype): Likewise.
! 	(aarch64_sve_adjust_stmt_cost, aarch64_adjust_stmt_cost): Likewise.
! 	(aarch64_estimate_min_cycles_per_iter): Use vec_cost_fraction
! 	for cycle counts.
! 	(aarch64_adjust_body_cost): Likewise.
! 	(aarch64_test_cost_fraction): New function.
! 	(aarch64_run_selftests): Call it.
  
! 2021-08-06  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	Backported from master:
! 	2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64-protos.h (tune_params::sve_width): Turn
! 	into a bitmask.
! 	* config/aarch64/aarch64.c (aarch64_cmp_autovec_modes): Update
! 	accordingly.
! 	(aarch64_estimated_poly_value): Likewise.  Use the least significant
! 	set bit for the minimum and likely values.  Use the most significant
! 	set bit for the maximum value.
  
! 2021-08-06  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-07-19  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101505
! 	* tree-vect-patterns.c (vect_determine_precisions): Walk
! 	PHIs also for loop vectorization.
  
! 2021-08-02  Haochen Gui  <guihaoc@gcc.gnu.org>
  
! 	Backported from master:
! 	2021-07-23  Haochen Gui  <guihaoc@gcc.gnu.org>
  
! 	PR target/100952
! 	* config/rs6000/rs6000.md (cstore<mode>4): Fix wrong fall through.
  
! 2021-07-30  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	Backported from master:
! 	2021-07-30  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	PR target/94780
! 	* config/mips/mips.c (mips_atomic_assign_expand_fenv): Use
! 	  TARGET_EXPR instead of MODIFY_EXPR.
  
! 2021-07-30  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	Backported from master:
! 	2021-07-30  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	PR target/101132
! 	* config/mips/mips-protos.h (mips_expand_vec_cmp_expr): Declare.
! 	* config/mips/mips.c (mips_expand_vec_cmp_expr): New function.
! 	* config/mips/mips-msa.md (vec_cmp<MSA:mode><mode_i>): New
! 	  expander.
! 	  (vec_cmpu<IMSA:mode><mode_i>): New expander.
  
! 2021-07-28  Martin Uecker  <muecker@gwdg.de>
  
! 	* calls.c (maybe_warn_rdwr_sizes): Correct argument
! 	numbers in warning that were switched.
  
! 2021-07-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-07-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/101586
! 	* gimple-fold.c (clear_padding_type): Ignore FIELD_DECLs with byte
! 	positions above or equal to sz except for diagnostics of flexible
! 	array members.
  
! 2021-07-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-07-23  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/101562
! 	* expmed.c (store_integral_bit_field): Only use movstrict_optab
! 	if the operand isn't paradoxical.
  
! 2021-07-28  Release Manager
  
! 	* GCC 11.2.0 released.
  
! 2021-07-21  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-07-21  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/101535
! 	* gimplify.c (omp_check_private): Properly skip ORT_TARGET_DATA
! 	contexts in which decl isn't privatized and for ORT_TARGET return
! 	false if decl is mapped.
  
! 2021-07-20  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/101384
! 	* config/rs6000/rs6000.c (vspltis_constant): Accept EASY_VECTOR_MSB
! 	only if step and copies are equal to 1.
  
! 2021-07-20  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	Backported from master:
! 	2021-07-06  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	PR bootstrap/100246
! 	* config/i386/i386.h (struct stringop_algs): Define a CTOR for
! 	this type.
  
! 2021-07-20  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	Backported from master:
! 	2021-07-09  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	PR target/100152
! 	* config/i386/i386-expand.c (ix86_expand_call): If a call is
! 	to a non-local-binding, or local but to a public symbol, then
! 	assume that it might be indirected via the lazy symbol binder.
! 	Mark R10 and R10 as clobbered in that case.
  
! 2021-07-20  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/100182
! 	* config/i386/sync.md (define_peephole2 atomic_storedi_fpu):
! 	Remove.
! 	(define_peephole2 atomic_loaddi_fpu): Ditto.
  
! 2021-07-19  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	PR target/101129
! 	* config/rs6000/rs6000-p8swap.c (has_part_mult): New.
! 	(rs6000_analyze_swaps): Insns containing a subreg of a mult are
! 	not swappable.
  
! 2021-07-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-07-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/94366
! 	* omp-low.c (lower_rec_input_clauses): Rename is_fp_and_or to
! 	is_truth_op, set it for TRUTH_*IF_EXPR regardless of new_var's type,
! 	use boolean_type_node instead of integer_type_node as NE_EXPR type.
! 	(lower_reduction_clauses): Likewise.
  
! 2021-07-18  Tobias Burnus  <tobias@codesourcery.com>
  
! 	Backported from master:
! 	2021-05-04  Tobias Burnus  <tobias@codesourcery.com>
  
! 	* omp-low.c (lower_rec_input_clauses, lower_reduction_clauses): Handle
! 	&& and || with floating-point and complex arguments.
  
! 2021-07-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-07-14  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR go/101407
! 	* godump.c (godump_str_hash): New type.
! 	(godump_container::pot_dummy_types): Use string_hash instead of
! 	ptr_hash in the hash_set.
  
! 2021-07-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-07-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/101266
! 	* dwarf2out.c (loc_list_from_tree_1): Handle COMPOUND_LITERAL_EXPR.
  
! 2021-07-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-06-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/101210
! 	* match.pd ((intptr_t)x eq/ne CST to x eq/ne (typeof x) CST): Don't
! 	perform the optimization in GENERIC when sanitizing and x has a
! 	reference type.
  
! 2021-07-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-06-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/101172
! 	* stor-layout.c (finish_bitfield_representative): If nextf has
! 	error_mark_node type, set repr type to error_mark_node too.
  
! 2021-07-15  H.J. Lu  <hjl.tools@gmail.com>
  
! 	Backported from master:
! 	2021-06-13  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/101023
! 	* config/i386/i386.c (ix86_expand_prologue): Set red_zone_used
! 	to true if red zone is used.
! 	(ix86_output_indirect_jmp): Replace ix86_red_zone_size with
! 	ix86_red_zone_used.
! 	* config/i386/i386.h (machine_function): Add red_zone_used.
! 	(ix86_red_zone_size): Removed.
! 	(ix86_red_zone_used): New.
! 	* config/i386/i386.md (peephole2 patterns): Replace
! 	ix86_red_zone_size with ix86_red_zone_used.
  
! 2021-07-15  H.J. Lu  <hjl.tools@gmail.com>
  
! 	Backported from master:
! 	2021-07-14  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/101395
! 	* config/i386/driver-i386.c (host_detect_local_cpu): Check
! 	"arch [32|64]" and "tune [32|64]" for 32-bit and 64-bit codegen.
! 	Enable UINTR only for 64-bit codegen.
! 	* config/i386/i386-options.c
! 	(ix86_option_override_internal::DEF_PTA): Skip PTA_UINTR if not
! 	in 64-bit mode.
! 	* config/i386/i386.h (ARCH_ARG): New.
! 	(CC1_CPU_SPEC): Pass "[arch|tune] 32" for 32-bit codegen and
! 	"[arch|tune] 64" for 64-bit codegen.
  
! 2021-07-15  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-07-15  Richard Biener  <rguenther@suse.de>
  
! 	PR driver/101383
! 	* gcc.c (process_command): Process -gtoggle like process_options
! 	would after parsing options.
  
! 2021-07-14  Andrew MacLeod  <amacleod@redhat.com>
  
! 	Backported from master:
! 	2021-07-02  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/101223
! 	* range-op.cc (build_lt): Add -1 for signed values.
! 	(built_gt): Subtract -1 for signed values.
  
! 2021-07-14  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/101148
! 	PR tree-optimization/101014
! 	* gimple-range-cache.cc (ranger_cache::ranger_cache): Adjust.
! 	(ranger_cache::~ranger_cache): Adjust.
! 	(ranger_cache::block_range): Check if propagation disallowed.
! 	(ranger_cache::propagate_cache): Disallow propagation if new value
! 	can't be stored properly.
! 	* gimple-range-cache.h (ranger_cache::m_propfail): New member.
  
! 2021-07-14  Andrew MacLeod  <amacleod@redhat.com>
  
! 	* gimple-range-cache.cc (class ssa_block_ranges): Adjust prototype.
! 	(sbr_vector::set_bb_range): Return true.
! 	(class sbr_sparse_bitmap): Adjust.
! 	(sbr_sparse_bitmap::set_bb_range): Return value.
! 	(block_range_cache::set_bb_range): Return value.
! 	(ranger_cache::propagate_cache): Use return value to print msg.
! 	* gimple-range-cache.h (class block_range_cache): Adjust.
  
! 2021-07-14  Andrew MacLeod  <amacleod@redhat.com>
  
! 	* gimple-range-cache.cc (ranger_cache::push_poor_value): Disable
! 	poor value processing.
  
! 2021-07-14  Andrew MacLeod  <amacleod@redhat.com>
  
! 	* gimple-range.cc (gimple_ranger::range_of_expr): Treat debug statments
! 	as contextless queries to avoid additional lookups.
  
! 2021-07-14  Andrew MacLeod  <amacleod@redhat.com>
  
! 	Backported from master:
! 	2021-06-07  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/100299
! 	* gimple-range-cache.cc (class sbr_sparse_bitmap): New.
! 	(sbr_sparse_bitmap::sbr_sparse_bitmap): New.
! 	(sbr_sparse_bitmap::bitmap_set_quad): New.
! 	(sbr_sparse_bitmap::bitmap_get_quad): New.
! 	(sbr_sparse_bitmap::set_bb_range): New.
! 	(sbr_sparse_bitmap::get_bb_range): New.
! 	(sbr_sparse_bitmap::bb_range_p): New.
! 	(block_range_cache::block_range_cache): initialize bitmap obstack.
! 	(block_range_cache::~block_range_cache): Destruct obstack.
! 	(block_range_cache::set_bb_range): Decide when to utilze the
! 	sparse on entry cache.
! 	* gimple-range-cache.h (block_range_cache): Add bitmap obstack.
! 	* params.opt (-param=evrp-sparse-threshold): New.
  
! 2021-07-14  Andrew MacLeod  <amacleod@redhat.com>
  
! 	Backported from master:
! 	2021-06-07  Andrew MacLeod  <amacleod@redhat.com>
  
! 	* bitmap.c (bitmap_set_aligned_chunk): New.
! 	(bitmap_get_aligned_chunk): New.
! 	(test_aligned_chunk): New.
! 	(bitmap_c_tests): Call test_aligned_chunk.
! 	* bitmap.h (bitmap_set_aligned_chunk, bitmap_get_aligned_chunk): New.
  
! 2021-07-14  Andrew MacLeod  <amacleod@redhat.com>
  
! 	Backported from master:
! 	2021-05-07  Andrew MacLeod  <amacleod@redhat.com>
  
! 	* gimple-range-cache.cc (ssa_block_ranges): Virtualize.
! 	(sbr_vector): Renamed from ssa_block_cache.
! 	(sbr_vector::sbr_vector): Allocate from obstack abd initialize.
! 	(ssa_block_ranges::~ssa_block_ranges): Remove.
! 	(sbr_vector::set_bb_range): Use varying and undefined cached values.
! 	(ssa_block_ranges::set_bb_varying): Remove.
! 	(sbr_vector::get_bb_range): Adjust assert.
! 	(sbr_vector::bb_range_p): Adjust assert.
! 	(~block_range_cache): No freeing loop required.
! 	(block_range_cache::get_block_ranges): Remove.
! 	(block_range_cache::set_bb_range): Inline get_block_ranges.
! 	(block_range_cache::set_bb_varying): Remove.
! 	* gimple-range-cache.h (set_bb_varying): Remove prototype.
! 	* value-range.h (irange_allocator::get_memory): New.
  
! 2021-07-14  Michael Meissner  <meissner@linux.ibm.com>
  
! 	PR target/100809
! 	* config/rs6000/rs6000.md (udivti3): New insn.
! 	(divti3): New insn.
! 	(umodti3): New insn.
! 	(modti3): New insn.
  
! 2021-07-14  Alexandre Oliva  <oliva@adacore.com>
  
! 	Backported from master:
! 	2021-07-14  Alexandre Oliva  <oliva@adacore.com>
  
! 	* tree-ssa-alias.c (attr_fnspec::verify): Fix index in
! 	non-'t'-sized arg check.
  
! 2021-07-14  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/101185
! 	* config/i386/i386.c (x86_order_regs_for_local_alloc):
! 	Revert r12-1669.
  
! 2021-07-14  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/101142
! 	* config/i386/i386.md: (*anddi_1): Disparage slightly the mask
! 	register alternative.
! 	(*and<mode>_1): Ditto.
! 	(*andqi_1): Ditto.
! 	(*andn<mode>_1): Ditto.
! 	(*<code><mode>_1): Ditto.
! 	(*<code>qi_1): Ditto.
! 	(*one_cmpl<mode>2_1): Ditto.
! 	(*one_cmplsi2_1_zext): Ditto.
! 	(*one_cmplqi2_1): Ditto.
! 	* config/i386/i386.c (x86_order_regs_for_local_alloc): Change
! 	the order of mask registers to be before general registers.
  
! 2021-07-14  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-07-14  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101445
! 	* tree-vect-stmts.c (vectorizable_load): Do the gap adjustment
! 	of the IV in the correct direction for negative stride
! 	accesses.
  
! 2021-07-13  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-07-05  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/101291
! 	* cfgloopmanip.c (loop_version): Set the loop copy of the
! 	versioned loop to the new loop.
  
! 2021-07-13  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-07-12  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101394
! 	* tree-ssa-pre.c (do_pre_regular_insertion): Avoid inserting
! 	copies from abnormals for a full redundancy.
  
! 2021-07-13  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-07-12  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/101423
! 	* gimple.c (gimple_could_trap_p_1): Internal function calls
! 	do not trap.
! 	* tree-eh.c (tree_could_trap_p): Likewise.
  
! 2021-07-13  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-07-01  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100778
! 	* tree-vect-slp.c (vect_schedule_slp_node): Do not place trapping
! 	vectorized ops ahead of their scalar BB.
  
! 2021-07-13  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-05-28  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100778
! 	* tree-vect-slp.c (vect_build_slp_tree_1): Prevent possibly
! 	trapping ops in different BBs.
  
! 2021-07-09  Martin Jambor  <mjambor@suse.cz>
  
! 	Backported from master:
! 	2021-07-08  Martin Jambor  <mjambor@suse.cz>
  
! 	PR ipa/101066
! 	* ipa-sra.c (class isra_call_summary): New member
! 	m_before_any_store, initialize it in the constructor.
! 	(isra_call_summary::dump): Dump the new field.
! 	(ipa_sra_call_summaries::duplicate): Copy it.
! 	(process_scan_results): Set it.
! 	(isra_write_edge_summary): Stream it.
! 	(isra_read_edge_summary): Likewise.
! 	(param_splitting_across_edge): Only override
! 	safe_to_import_accesses if m_before_any_store is set.
  
! 2021-07-09  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR target/101377
! 	* gcc.c (ASM_DEBUG_DWARF_OPTION): Set again to --gdwarf2 in
! 	the case where HAVE_AS_WORKING_DWARF_N_FLAG is not defined
! 	and HAVE_LD_BROKEN_PE_DWARF5 is defined.
  
! 2021-07-07  Peter Bergner  <bergner@linux.ibm.com>
  
! 	Backported from master:
! 	2021-07-07  Peter Bergner  <bergner@linux.ibm.com>
  
! 	* config/rs6000/rs6000-call.c (mma_init_builtins): Use VSX_BUILTIN_LXVP
! 	and VSX_BUILTIN_STXVP.
  
! 2021-07-07  Peter Bergner  <bergner@linux.ibm.com>
  
! 	Backported from master:
! 	2021-07-02  Peter Bergner  <bergner@linux.ibm.com>
  
! 	* config/rs6000/rs6000-builtin.def (BU_MMA_PAIR_LD, BU_MMA_PAIR_ST):
! 	New macros.
! 	(__builtin_vsx_lxvp, __builtin_vsx_stxvp): New built-ins.
! 	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_mma_builtin): Expand
! 	lxvp and stxvp built-ins.
! 	(mma_init_builtins): Handle lxvp and stxvp built-ins.
! 	(builtin_function_type): Likewise.
! 	* doc/extend.texi (__builtin_vsx_lxvp, __builtin_mma_stxvp): Document.
  
! 2021-07-07  Michael Meissner  <meissner@linux.ibm.com>
! 	    2021-07-01 Michael Meissner  <meissner@linux.ibm.com>
  
! 	* config/rs6000/rs6000.c (rs6000_maybe_emit_fp_cmove): Add IEEE
! 	128-bit floating point conditional move support.
! 	(have_compare_and_set_mask): Add IEEE 128-bit floating point
! 	types.
! 	* config/rs6000/rs6000.md (mov<mode>cc, IEEE128 iterator): New insn.
! 	(mov<mode>cc_p10, IEEE128 iterator): New insn.
! 	(mov<mode>cc_invert_p10, IEEE128 iterator): New insn.
! 	(fpmask<mode>, IEEE128 iterator): New insn.
! 	(xxsel<mode>, IEEE128 iterator): New insn.
! 	Backported from master:
  
! 2021-07-07  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-06-28  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101229
! 	* gimple-walk.c (gimple_walk_op): Handle PHIs.
  
! 2021-07-07  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101173
! 	PR tree-optimization/101280
! 	* gimple-loop-interchange.cc
! 	(tree_loop_interchange::valid_data_dependences): Properly
! 	guard all dependence checks with DDR_REVERSED_P or its
! 	inverse.
  
! 2021-07-07  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-06-22  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/101156
! 	* gimplify.c (gimplify_expr): Remove premature incorrect
! 	optimization.
  
! 2021-07-07  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-06-08  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100923
! 	* tree-ssa-sccvn.c (valueize_refs_1): Take a pointer to
! 	the operand vector to be valueized.
! 	(valueize_refs): Likewise.
! 	(valueize_shared_reference_ops_from_ref): Adjust.
! 	(valueize_shared_reference_ops_from_call): Likewise.
! 	(vn_reference_lookup_3): Likewise.
! 	(vn_reference_lookup_pieces): Likewise.  Re-valueize
! 	with honoring availability when we are about to create
! 	the ao_ref and valueized before.
! 	(vn_reference_lookup): Likewise.
! 	(vn_reference_insert_pieces): Adjust.
  
! 2021-07-07  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-06-16  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101088
! 	* tree-ssa-loop-im.c (sm_seq_valid_bb): Only look for
! 	supported refs on edges.  Do not assert same ref but
! 	different kind stores are unsuported but mark them so.
! 	(hoist_memory_references): Only look for supported refs
! 	on exits.
  
! 2021-07-07  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-06-11  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101025
! 	* tree-ssa-loop-im.c (sm_seq_valid_bb): Make sure to process
! 	all refs that require dependence checking.
  
! 2021-07-06  Clément Chigot  <clement.chigot@atos.net>
  
! 	Backported from master:
! 	2021-06-10  Clement Chigot  <clement.chigot@atos.net>
  
! 	* config/rs6000/aix71.h (ASM_CPU_SPEC): Add Power10 directive.
! 	* config/rs6000/aix72.h (ASM_CPU_SPEC): Likewise.
  
! 2021-07-06  David Edelsohn  <dje.gcc@gmail.com>
  
! 	Backported from master:
! 	2021-05-20  Clement Chigot  <clement.chigot@atos.net>
! 		    David Edelsohn  <dje.gcc@gmail.com>
  
! 	* collect2.c (scan_prog_file): Issue non-fatal warning for
! 	non-COFF files.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
! 	* diagnostic-show-locus.c (diagnostic_show_locus): Don't reject
! 	printing the same location twice if there are fix-it hints,
! 	multiple locations, or a label.
  
! 2021-07-02  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* config/i386/i386.c (asm_preferred_eh_data_format): Always use the
! 	PIC encodings for PE-COFF targets.
  
! 2021-06-30  Pat Haugen  <pthaugen@linux.ibm.com>
  
! 	* config/rs6000/power10.md (power10-fused-load, power10-fused-store,
! 	power10-fused_alu, power10-fused-vec, power10-fused-branch): New.
  
! 2021-06-25  Richard Biener  <rguenther@suse.de>
  
! 	* tree-vect-slp.c (vect_optimize_slp): Do not propagate
! 	across operations that have different semantics on different
! 	lanes.
  
! 2021-06-25  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-06-22  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101158
! 	* tree-vect-slp.c (vect_build_slp_tree_1): Move same operand
! 	checking after checking for matching operation.
  
! 2021-06-25  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-06-22  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101151
! 	* tree-ssa-sink.c (statement_sink_location): Expand irreducible
! 	region check.
  
! 2021-06-25  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-06-24  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101105
! 	* tree-vect-data-refs.c (vect_prune_runtime_alias_test_list):
! 	Only ignore steps when they are equal or scalar order is preserved.
  
! 2021-06-25  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-05-19  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/100672
! 	* fold-const.c (fold_negate_expr_1): Use element_precision.
! 	(negate_expr_p): Likewise.
  
! 2021-06-24  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* dwarf2out.c (dwarf2out_assembly_start): Emit .file 0 marker here..
! 	(dwarf2out_finish): ...instead of here.
  
! 2021-06-24  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* configure.ac (--gdwarf-5 option): Use objdump instead of readelf.
! 	(working --gdwarf-4/--gdwarf-5 for all sources): Likewise.
! 	(--gdwarf-4 not refusing generated .debug_line): Adjust for Windows.
  	* configure: Regenerate.
  
! 2021-06-23  Aaron Sawdey  <acsawdey@linux.ibm.com>
! 
! 	Backported from master:
! 	2021-06-23  Aaron Sawdey  <acsawdey@linux.ibm.com>
! 
! 	* config/rs6000/rs6000-cpus.def: Take OPTION_MASK_PCREL_OPT out
! 	of OTHER_POWER10_MASKS so it will not be enabled by default.
! 
! 2021-06-23  Michael Meissner  <meissner@linux.ibm.com>
! 
! 	* config/rs6000/rs6000.c (rs6000_emit_minmax): Add support for ISA
! 	3.1 IEEE 128-bit floating point xsmaxcqp/xsmincqp instructions.
! 	* config/rs6000/rs6000.md (s<minmax><mode>3, IEEE128 iterator):
! 	New insns.
! 
! 2021-06-23  Uros Bizjak  <ubizjak@gmail.com>
! 
! 	Backported from master:
! 	2021-06-23  Uroš Bizjak  <ubizjak@gmail.com>
! 
! 	PR target/101175
! 	* config/i386/i386.md (bsr_rex64): Add zero-flag setting RTX.
! 	(bsr): Ditto.
! 	(*bsrhi): Remove.
! 	(clz<mode>2): Update RTX pattern for additions.
! 
! 2021-06-23  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2021-06-23  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/101167
! 	* omp-low.c (lower_omp_regimplify_p): Regimplify also PARM_DECLs
! 	and RESULT_DECLs that have DECL_HAS_VALUE_EXPR_P set.
! 
! 2021-06-23  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2021-06-21  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR inline-asm/100785
! 	* cfgexpand.c (expand_asm_stmt): If errors are emitted,
! 	remove all inputs, outputs and clobbers from the asm and
! 	set template to "".
! 
! 2021-06-22  liuhongt  <hongtao.liu@intel.com>
! 
! 	PR target/100310
! 	* config/i386/i386-expand.c
! 	(ix86_expand_special_args_builtin): Keep constm1_operand only
! 	if it satisfies insn's operand predicate.
! 
! 2021-06-21  Carl Love  <cel@us.ibm.com>
! 
! 	* config/rs6000/altivec.h (vec_signextll, vec_signexti, vec_signextq):
! 	Add define for new builtins.
! 	* config/rs6000/altivec.md(altivec_vreveti2): Add define_expand.
! 	* config/rs6000/rs6000-builtin.def (VSIGNEXTI, VSIGNEXTLL):  Add
! 	overloaded builtin definitions.
! 	(VSIGNEXTSB2W, VSIGNEXTSH2W, VSIGNEXTSB2D, VSIGNEXTSH2D,VSIGNEXTSW2D,
! 	VSIGNEXTSD2Q):	Add builtin expansions.
! 	(SIGNEXT): Add P10 overload definition.
! 	* config/rs6000/rs6000-call.c (P9V_BUILTIN_VEC_VSIGNEXTI,
! 	P9V_BUILTIN_VEC_VSIGNEXTLL, P10_BUILTIN_VEC_SIGNEXT): Add
! 	overloaded argument definitions.
! 	* config/rs6000/vsx.md (vsx_sign_extend_v2di_v1ti): Add define_insn.
! 	(vsignextend_v2di_v1ti, vsignextend_qi_<mode>, vsignextend_hi_<mode>,
! 	vsignextend_si_v2di)[VIlong]: Add define_expand.
! 	Make define_insn vsx_sign_extend_si_v2di visible.
! 	* doc/extend.texi:  Add documentation for the vec_signexti,
! 	vec_signextll builtins and vec_signextq.
! 
! 2021-06-21  Carl Love  <cel@us.ibm.com>
! 
! 	* config/rs6000/rs6000.c (__fixkfti, __fixunskfti, __floattikf,
! 	__floatuntikf): Names changed to __fixkfti_sw, __fixunskfti_sw,
! 	__floattikf_sw, __floatuntikf_sw respectively.
! 	* config/rs6000/rs6000.md (floatti<mode>2, floatunsti<mode>2,
! 	fix_trunc<mode>ti2, fixuns_trunc<mode>ti2): Add
! 	define_insn for mode IEEE 128.
! 
! 2021-06-21  Carl Love  <cel@us.ibm.com>
! 
! 	* config/rs6000/altivec.md (altivec_vslq, altivec_vsrq):
! 	Rename to altivec_vslq_<mode>, altivec_vsrq_<mode>, mode VEC_TI.
! 	* config/rs6000/vector.md (VEC_TI): Was named VSX_TI in vsx.md.
! 	(vashlv1ti3): Change to vashl<mode>3, mode VEC_TI.
! 	(vlshrv1ti3): Change to vlshr<mode>3, mode VEC_TI.
! 	* config/rs6000/vsx.md (VSX_TI): Remove define_mode_iterator. Update
! 	uses of VSX_TI to VEC_TI.
! 
! 2021-06-21  Carl Love  <cel@us.ibm.com>
! 
! 	* config/rs6000/dfp.md (floattitd2, fixtdti2): New define_insns.
! 
! 2021-06-21  Carl Love  <cel@us.ibm.com>
! 
! 	* config/rs6000/altivec.h (vec_dive, vec_mod): Add define for new
! 	builtins.
! 	* config/rs6000/altivec.md (UNSPEC_VMULEUD, UNSPEC_VMULESD,
! 	UNSPEC_VMULOUD, UNSPEC_VMULOSD): New unspecs.
! 	(altivec_eqv1ti, altivec_gtv1ti, altivec_gtuv1ti, altivec_vmuleud,
! 	altivec_vmuloud, altivec_vmulesd, altivec_vmulosd, altivec_vrlq,
! 	altivec_vrlqmi, altivec_vrlqmi_inst, altivec_vrlqnm,
! 	altivec_vrlqnm_inst, altivec_vslq, altivec_vsrq, altivec_vsraq,
! 	altivec_vcmpequt_p, altivec_vcmpgtst_p, altivec_vcmpgtut_p): New
! 	define_insn.
! 	(vec_widen_umult_even_v2di, vec_widen_smult_even_v2di,
! 	vec_widen_umult_odd_v2di, vec_widen_smult_odd_v2di, altivec_vrlqmi,
! 	altivec_vrlqnm): New define_expands.
! 	* config/rs6000/rs6000-builtin.def (VCMPEQUT_P, VCMPGTST_P,
! 	VCMPGTUT_P): Add macro expansions.
! 	(BU_P10V_AV_P): Add builtin predicate definition.
! 	(VCMPGTUT, VCMPGTST, VCMPEQUT, CMPNET, CMPGE_1TI,
! 	CMPGE_U1TI, CMPLE_1TI, CMPLE_U1TI, VNOR_V1TI_UNS, VNOR_V1TI, VCMPNET_P,
! 	VCMPAET_P, VMULEUD, VMULESD, VMULOUD, VMULOSD, VRLQ,
! 	VSLQ, VSRQ, VSRAQ, VRLQNM, DIV_V1TI, UDIV_V1TI, DIVES_V1TI, DIVEU_V1TI,
! 	MODS_V1TI, MODU_V1TI, VRLQMI): New macro expansions.
! 	(VRLQ, VSLQ, VSRQ, VSRAQ, DIVE, MOD): New overload expansions.
! 	* config/rs6000/rs6000-call.c (P10_BUILTIN_VCMPEQUT,
! 	P10V_BUILTIN_CMPGE_1TI, P10V_BUILTIN_CMPGE_U1TI,
! 	P10V_BUILTIN_VCMPGTUT, P10V_BUILTIN_VCMPGTST,
! 	P10V_BUILTIN_CMPLE_1TI, P10V_BUILTIN_VCMPLE_U1TI,
! 	P10V_BUILTIN_DIV_V1TI, P10V_BUILTIN_UDIV_V1TI,
! 	P10V_BUILTIN_VMULESD, P10V_BUILTIN_VMULEUD,
! 	P10V_BUILTIN_VMULOSD, P10V_BUILTIN_VMULOUD,
! 	P10V_BUILTIN_VNOR_V1TI, P10V_BUILTIN_VNOR_V1TI_UNS,
! 	P10V_BUILTIN_VRLQ, P10V_BUILTIN_VRLQMI,
! 	P10V_BUILTIN_VRLQNM, P10V_BUILTIN_VSLQ,
! 	P10V_BUILTIN_VSRQ, P10V_BUILTIN_VSRAQ,
! 	P10V_BUILTIN_VCMPGTUT_P, P10V_BUILTIN_VCMPGTST_P,
! 	P10V_BUILTIN_VCMPEQUT_P, P10V_BUILTIN_VCMPGTUT_P,
! 	P10V_BUILTIN_VCMPGTST_P, P10V_BUILTIN_CMPNET,
! 	P10V_BUILTIN_VCMPNET_P, P10V_BUILTIN_VCMPAET_P,
! 	P10V_BUILTIN_DIVES_V1TI, P10V_BUILTIN_MODS_V1TI,
! 	P10V_BUILTIN_MODU_V1TI):
! 	New overloaded definitions.
! 	(rs6000_gimple_fold_builtin) [P10V_BUILTIN_VCMPEQUT,
! 	P10V_BUILTIN_CMPNET, P10V_BUILTIN_CMPGE_1TI,
! 	P10V_BUILTIN_CMPGE_U1TI, P10V_BUILTIN_VCMPGTUT,
! 	P10V_BUILTIN_VCMPGTST, P10V_BUILTIN_CMPLE_1TI,
! 	P10V_BUILTIN_CMPLE_U1TI]: New case statements.
! 	(rs6000_init_builtins) [bool_V1TI_type_node, int_ftype_int_v1ti_v1ti]:
! 	New assignments.
! 	(altivec_init_builtins): New E_V1TImode case statement.
! 	(builtin_function_type)[P10_BUILTIN_128BIT_VMULEUD,
! 	P10_BUILTIN_128BIT_VMULOUD, P10_BUILTIN_128BIT_DIVEU_V1TI,
! 	P10_BUILTIN_128BIT_MODU_V1TI, P10_BUILTIN_CMPGE_U1TI,
! 	P10_BUILTIN_VCMPGTUT, P10_BUILTIN_VCMPEQUT]: New case statements.
! 	* config/rs6000/rs6000.c (rs6000_handle_altivec_attribute) [E_TImode,
! 	E_V1TImode]: New case statements.
! 	* config/rs6000/rs6000.h (rs6000_builtin_type_index): New enum
! 	value RS6000_BTI_bool_V1TI.
! 	* config/rs6000/vector.md (vector_gtv1ti,vector_nltv1ti,
! 	vector_gtuv1ti, vector_nltuv1ti, vector_ngtv1ti, vector_ngtuv1ti,
! 	vector_eq_v1ti_p, vector_ne_v1ti_p, vector_ae_v1ti_p,
! 	vector_gt_v1ti_p, vector_gtu_v1ti_p, vrotlv1ti3, vashlv1ti3,
! 	vlshrv1ti3, vashrv1ti3): New define_expands.
! 	* config/rs6000/vsx.md (UNSPEC_VSX_DIVSQ, UNSPEC_VSX_DIVUQ,
! 	UNSPEC_VSX_DIVESQ, UNSPEC_VSX_DIVEUQ, UNSPEC_VSX_MODSQ,
! 	UNSPEC_VSX_MODUQ): New unspecs.
! 	(mulv2di3, vsx_div_v1ti, vsx_udiv_v1ti, vsx_dives_v1ti,
! 	vsx_diveu_v1ti,	vsx_mods_v1ti, vsx_modu_v1ti, xxswapd_v1ti): New
! 	define_insns.
! 	(vcmpnet): New define_expand.
! 	* doc/extend.texi: Add documentation for the new builtins vec_rl,
! 	vec_rlmi, vec_rlnm, vec_sl, vec_sr, vec_sra, vec_mule, vec_mulo,
! 	vec_div, vec_dive, vec_mod, vec_cmpeq, vec_cmpne, vec_cmpgt, vec_cmplt,
! 	vec_cmpge, vec_cmple, vec_all_eq, vec_all_ne, vec_all_gt, vec_all_lt,
! 	vec_all_ge, vec_all_le, vec_any_eq, vec_any_ne, vec_any_gt, vec_any_lt,
! 	vec_any_ge, vec_any_le.
! 
! 2021-06-21  Carl Love  <cel@us.ibm.com>
! 
! 	* config/rs6000/altivec.md (altivec_vrl<VI_char>mi): Fix
! 	bug in argument generation.
! 
! 2021-06-18  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
! 
! 	Backported from master:
! 	2021-06-18  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
! 
! 	PR target/100856
! 	* common/config/arm/arm-common.c (arm_canon_arch_option_1): New function
! 	derived from arm_canon_arch.
! 	(arm_canon_arch_option): Call it.
! 	(arm_canon_arch_multilib_option): New function.
! 	* config/arm/arm-cpus.in (IGNORE_FOR_MULTILIB): New fgroup.
! 	* config/arm/arm.h (arm_canon_arch_multilib_option): New prototype.
! 	(CANON_ARCH_MULTILIB_SPEC_FUNCTION): New macro.
! 	(MULTILIB_ARCH_CANONICAL_SPECS): New macro.
! 	(DRIVER_SELF_SPECS): Add MULTILIB_ARCH_CANONICAL_SPECS.
! 	* config/arm/arm.opt (mlibarch): New option.
! 	* config/arm/t-rmprofile (MULTILIB_MATCHES): For armv8*-m, replace use
! 	of march on RHS with mlibarch.
! 
! 2021-06-18  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
! 
! 	Backported from master:
! 	2021-06-11  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
! 
! 	PR target/101016
! 	* config/arm/arm_mve.h (__arm_vld1q): Change __ARM_mve_coerce(p0,
! 	int8_t const *) to __ARM_mve_coerce1(p0, int8_t *) in the argument for
! 	the polymorphic variants matching code.
! 	(__arm_vld1q_z): Likewise.
! 	(__arm_vld2q): Likewise.
! 	(__arm_vld4q): Likewise.
! 	(__arm_vldrbq_gather_offset): Likewise.
! 	(__arm_vldrbq_gather_offset_z): Likewise.
! 
! 2021-06-18  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/101062
! 	* stor-layout.c (finish_bitfield_layout): Don't add bitfield
! 	representatives in QUAL_UNION_TYPE.
! 
! 2021-06-18  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2021-06-16  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/101062
! 	* stor-layout.c (finish_bitfield_representative): For fields in unions
! 	assume nextf is always NULL.
! 	(finish_bitfield_layout): Compute bit field representatives also in
! 	unions, but handle it as if each bitfield was the only field in the
! 	aggregate.
! 
! 2021-06-17  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	Backported from master:
! 	2021-06-14  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	PR target/100777
! 	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_mma_builtin): Use
! 	create_tmp_reg_or_ssa_name().
! 
! 2021-06-17  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	Backported from master:
! 	2021-06-10  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	* config/rs6000/rs6000-builtin.def (build_pair): New built-in.
! 	(build_acc): Likewise.
! 	* config/rs6000/rs6000-call.c (mma_expand_builtin): Swap assemble
! 	source operands in little-endian mode.
! 	(rs6000_gimple_fold_mma_builtin): Handle VSX_BUILTIN_BUILD_PAIR.
! 	(mma_init_builtins): Likewise.
! 	* config/rs6000/rs6000.c (rs6000_split_multireg_move): Handle endianness
! 	ordering for the MMA assemble and build source operands.
! 	* doc/extend.texi (__builtin_vsx_build_acc, __builtin_mma_build_pair):
! 	Document.
! 	(__builtin_mma_assemble_acc, __builtin_mma_assemble_pair): Remove
! 	documentation.
! 
! 2021-06-17  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	Backported from master:
! 	2021-05-31  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	PR target/99842
! 	* config/rs6000/predicates.md(mma_assemble_input_operand): Allow
! 	indexed form addresses.
! 
! 2021-06-17  Martin Sebor  <msebor@redhat.com>
! 
! 	PR middle-end/100876
! 	* builtins.c: (gimple_call_return_array): Account for size_t
! 	mangling as either unsigned int or unsigned long
! 
! 2021-06-17  Martin Sebor  <msebor@redhat.com>
! 
! 	PR c++/100876
! 	* builtins.c (gimple_call_return_array): Check for attribute fn spec.
! 	Handle calls to placement new.
! 	(ndecl_dealloc_argno): Avoid placement delete.
! 
! 2021-06-17  Martin Sebor  <msebor@redhat.com>
! 
! 	PR middle-end/100732
! 	* gimple-fold.c (gimple_fold_builtin_sprintf): Avoid folding calls
! 	with either source or destination argument of invalid type.
! 	* tree-ssa-uninit.c (maybe_warn_pass_by_reference): Avoid checking
! 	calls with arguments of invalid type.
! 
! 2021-06-17  Martin Sebor  <msebor@redhat.com>
! 
! 	PR middle-end/100684
! 	* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Handle C++ lambda.
! 
! 2021-06-17  Martin Sebor  <msebor@redhat.com>
! 
! 	PR middle-end/100574
! 	* builtins.c (access_ref::get_ref): Improve detection of PHIs with
! 	all null arguments.
! 
! 2021-06-17  Martin Sebor  <msebor@redhat.com>
! 
! 	PR middle-end/100307
! 	* builtins.c (compute_objsize_r): Clear base0 for pointers.
! 
! 2021-06-17  Martin Sebor  <msebor@redhat.com>
! 
! 	PR middle-end/100250
! 	* attribs.c (attr_access::array_as_string): Avoid dereferencing
! 	a pointer when it's null.
! 
! 2021-06-17  Aaron Sawdey  <acsawdey@linux.ibm.com>
! 
! 	* config/rs6000/genfusion.pl (gen_logical_addsubf): Refactor to
! 	add generation of logical-add and add-logical fusion pairs.  Add
! 	earlyclobber to alts 0/1.
! 	(gen_addadd): Add earlyclobber to alts 0/1.
! 	* config/rs6000/rs6000-cpus.def: Add new fusion to ISA 3.1 mask
! 	and powerpc mask.
! 	* config/rs6000/rs6000.c (rs6000_option_override_internal): Turn on
! 	logical-add and add-logical fusion by default.
! 	* config/rs6000/rs6000.opt: Add -mpower10-fusion-logical-add and
! 	-mpower10-fusion-add-logical options.
! 	* config/rs6000/fusion.md: Regenerate file.
! 
! 2021-06-17  Marius Hillenbrand  <mhillen@linux.ibm.com>
! 
! 	Backported from master:
! 	2021-06-17  Marius Hillenbrand  <mhillen@linux.ibm.com>
! 
! 	PR target/100871
! 	* config/s390/vecintrin.h (vec_doublee): Fix to use
! 	  __builtin_s390_vflls.
! 	(vec_floate): Fix to use __builtin_s390_vflrd.
! 
! 2021-06-17  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2021-06-15  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/101046
! 	* expr.c (expand_expr_real_2) <case VEC_PACK_FIX_TRUNC_EXPR,
! 	case VEC_PACK_TRUNC_EXPR>: Clear subtarget when changing mode.
! 
! 2021-06-17  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2021-06-11  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR rtl-optimization/101008
! 	* simplify-rtx.c (relational_result): New function.
! 	(simplify_logical_relational_operation,
! 	simplify_relational_operation): Use it.
! 
! 2021-06-17  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2021-06-10  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR debug/100852
! 	* ifcvt.c (noce_get_alt_condition, noce_try_abs): Use
! 	prev_nonnote_nondebug_insn instead of prev_nonnote_insn.
! 
! 2021-06-17  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2021-06-07  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/100887
! 	* fold-const.c (fold_read_from_vector): Return NULL if trying to
! 	read from a CONSTRUCTOR with vector type elements.
! 
! 2021-06-17  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2021-06-07  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/100898
! 	* tree-inline.c (copy_bb): Only use gimple_call_arg_ptr if memcpy
! 	should copy any arguments.  Don't call gimple_call_num_args
! 	on id->call_stmt or call_stmt more than once.
! 
! 2021-06-17  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2021-06-04  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/100887
! 	* config/i386/i386-expand.c (ix86_expand_vector_init): Handle
! 	concatenation from half-sized modes with TImode elements.
! 
! 2021-06-16  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2021-06-11  Richard Biener  <rguenther@suse.de>
! 
! 	PR middle-end/101009
! 	* tree-data-ref.c (build_classic_dist_vector_1): Make sure
! 	to set *init_b to true when we encounter a constant equal
! 	index pair.
! 	(compute_affine_dependence): Also dump the actual DR_REF.
! 
! 2021-06-16  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/100981
! 	* tree-vect-loop.c (vect_create_epilog_for_reduction): Use
! 	gimple_get_lhs to also handle calls.
! 	* tree-vect-slp-patterns.c (complex_pattern::build): Transfer
! 	reduction info.
! 
! 2021-06-16  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-06-14  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100934
! 	* tree-ssa-dom.c (pass_dominator::execute): Properly
! 	mark irreducible regions.
  
! 2021-06-16  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-05-28  Richard Biener  <rguenther@suse.de>
  
! 	PR ipa/100791
! 	* tree-inline.c (copy_bb): When processing __builtin_va_arg_pack
! 	copy fntype from original call.
  
! 2021-06-14  Aaron Sawdey  <acsawdey@linux.ibm.com>
  
! 	* config/rs6000/genfusion.pl (gen_addadd): New function.
! 	* config/rs6000/fusion.md: Regenerate file.
! 	* config/rs6000/rs6000-cpus.def: Add
! 	OPTION_MASK_P10_FUSION_2ADD to masks.
! 	* config/rs6000/rs6000.c (rs6000_option_override_internal):
! 	Handle default value of OPTION_MASK_P10_FUSION_2ADD.
! 	* config/rs6000/rs6000.opt: Add -mpower10-fusion-2add.
  
! 2021-06-11  Aaron Sawdey  <acsawdey@linux.ibm.com>
  
! 	* config/rs6000/rs6000.md (define_attr "type"): Add types for fusion.
! 	* config/rs6000/genfusion.pl (gen_ld_cmpi_p10): Use new fusion types.
! 	(gen_2logical): Use new fusion types.
! 	* config/rs6000/fusion.md: Regenerate.
  
! 2021-06-09  Claudiu Zissulescu  <claziss@synopsys.com>
  
! 	Backported from master:
! 	2021-06-09  Claudiu Zissulescu  <claziss@synopsys.com>
  
! 	* config/arc/arc.md (loop_end): Change it to
! 	define_insn_and_split.
  
! 2021-06-09  Claudiu Zissulescu  <claziss@synopsys.com>
  
! 	Backported from master:
! 	2021-06-09  Claudiu Zissulescu  <claziss@synopsys.com>
  
! 	* config/arc/arc.md (maddhisi4): Use VMAC2H instruction.
! 	(machi): New pattern.
! 	(umaddhisi4): Use VMAC2HU instruction.
! 	(umachi): New pattern.
  
! 2021-06-09  Claudiu Zissulescu  <claziss@synopsys.com>
  
! 	Backported from master:
! 	2021-06-09  Claudiu Zissulescu  <claziss@synopsys.com>
  
! 	* config/arc/arc-protos.h (arc_split_move_p): New prototype.
! 	* config/arc/arc.c (arc_split_move_p): New function.
! 	(arc_split_move): Clean up.
! 	* config/arc/arc.md (movdi_insn): Clean up, use arc_split_move_p.
! 	(movdf_insn): Likewise.
! 	* config/arc/simdext.md (mov<VWH>_insn): Likewise.
  
! 2021-06-08  Pat Haugen  <pthaugen@linux.ibm.com>
  
! 	* config/rs6000/rs6000-logue.c (rs6000_emit_prologue): Use
! 	gen_frame_store.
  
! 2021-06-07  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/100885
! 	* config/i386/sse.md (*sse4_1_zero_extendv8qiv8hi2_3): Refine
! 	constraints.
! 	(<insn>v4siv4di2): Delete constraints for define_expand.
  
! 2021-06-03  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR ipa/99122
! 	* tree-inline.c (inline_forbidden_p): Remove test on return type.
  
! 2021-06-03  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* range-op.cc (get_bool_state): Adjust head comment.
! 	(operator_not_equal::op1_range): Fix comment.
! 	(operator_bitwise_xor::op1_range): Remove call to gcc_unreachable.
  
! 2021-06-03  Alex Coplan  <alex.coplan@arm.com>
  
! 	Backported from master:
! 	2021-05-19  Alex Coplan  <alex.coplan@arm.com>
  
! 	PR target/100333
! 	* config/arm/arm.md (nonsecure_call_internal): Always ensure
! 	callee's address is in a register.
  
! 2021-06-03  Claudiu Zissulescu  <claziss@synopsys.com>
  
! 	Backported from master:
! 	2021-06-02  Vineet Gupta  <vgupta@synopsys.com>
  
! 	* config/arc/arc.h (TARGET_CPU_DEFAULT): Change to hs38_linux.
  
! 2021-06-02  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	* config/i386/sse.md (abs<MMXMODEI:mode>2):
! 	Change define_insn to define_expand.
  
! 2021-06-02  Uros Bizjak  <ubizjak@gmail.com>
  
! 	Backported from master:
! 	2021-05-18  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	* config/i386/sse.md (<any_extend:insn>v4qiv4di2):
! 	Fix a mode mismatch with operand 1.
  
! 2021-06-01  Jason Merrill  <jason@redhat.com>
  
! 	PR c++/91859
! 	* tree.h (CALL_FROM_NEW_OR_DELETE_P): Adjust comment.
  
! 2021-05-31  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-05-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/100576
! 	* builtins.c (check_read_access): Convert bound to size_type_node if
! 	non-NULL.
  
! 2021-05-31  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-05-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/100590
! 	* regcprop.c (copyprop_hardreg_forward_1): Only DCE dead sets if
! 	they are NONJUMP_INSN_P.
  
! 2021-05-31  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-05-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/100580
! 	* function.c (push_dummy_function): Set DECL_ARTIFICIAL and
! 	DECL_ASSEMBLER_NAME on the fn_decl.
  
! 2021-05-31  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-05-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/100342
! 	* regcprop.c (copy_value): When copying a source reg in a wider
! 	mode than it has recorded for the value, adjust recorded destination
! 	mode too or punt if !REG_CAN_CHANGE_MODE_P.
  
! 2021-05-28  David Edelsohn  <dje.gcc@gmail.com>
  
! 	PR target/94177
! 	* calls.c (precompute_register_parameters): Additionally test
! 	targetm.precompute_tls_p to pre-compute argument.
! 	* config/rs6000/aix.h (TARGET_PRECOMPUTE_TLS_P): Define.
! 	* config/rs6000/rs6000.c (rs6000_aix_precompute_tls_p): New.
! 	* target.def (precompute_tls_p): New.
! 	* doc/tm.texi.in (TARGET_PRECOMPUTE_TLS_P): Add hook documentation.
! 	* doc/tm.texi: Regenerated.
! 	(cherry-picked from commit a21b399708175f6fc0ac723a0cebc127da421c60)
  
! 2021-05-27  Richard Earnshaw  <rearnsha@arm.com>
  
! 	Backported from master:
! 	2021-05-27  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/100767
! 	* config/arm/arm.c (arm_configure_build_target): Remove parameter
! 	opts_set, directly check opts parameters for being non-null.
! 	(arm_option_restore): Update call to arm_configure_build_target.
! 	(arm_option_override): Likewise.
! 	(arm_can_inline_p): Likewise.
! 	(arm_valid_target_attribute_tree): Likewise.
! 	* config/arm/arm-c.c (arm_pragma_target_parse): Likewise.
! 	* config/arm/arm-protos.h (arm_configure_build_target): Adjust
! 	prototype.
  
! 2021-05-27  Alex Coplan  <alex.coplan@arm.com>
  
! 	Backported from master:
! 	2021-05-11  Alex Coplan  <alex.coplan@arm.com>
  
! 	PR target/99725
! 	* config/arm/arm.c (cmse_nonsecure_call_inline_register_clear):
! 	Avoid emitting CFA adjusts on the sp if we have the fp.
  
! 2021-05-25  Uros Bizjak  <ubizjak@gmail.com>
  
! 	Backported from master:
! 	2021-05-18  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/100626
! 	* config/i386/i386-expand.c (split_double_mode): Return
! 	temporary register when simplify_gen_subreg fails with
! 	the high half od the paradoxical subreg.
  
! 2021-05-25  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-05-12  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100519
! 	* tree-ssa-reassoc.c (can_associate_p): Split into...
! 	(can_associate_op_p): ... this
! 	(can_associate_type_p): ... and this.
! 	(is_reassociable_op): Call can_associate_op_p.
! 	(break_up_subtract_bb): Call the appropriate predicates.
! 	(reassociate_bb): Likewise.
  
! 2021-05-25  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-05-11  Richard Biener  <rguenther@suse.de>
  
! 	PR ipa/100513
! 	* ipa-param-manipulation.c
! 	(ipa_param_body_adjustments::modify_call_stmt): Avoid
! 	altering SSA_NAME_DEF_STMT by adjusting the calls LHS
! 	via gimple_call_lhs_ptr.
  
! 2021-05-25  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-05-11  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/100509
! 	* gimple-fold.c (fold_gimple_assign): Only call
! 	get_symbol_constant_value on register type symbols.
  
! 2021-05-25  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-05-10  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100492
! 	* tree-loop-distribution.c (find_seed_stmts_for_distribution):
! 	Find nothing when the loop contains an irreducible region.
  
! 2021-05-24  Alex Coplan  <alex.coplan@arm.com>
  
! 	Backported from master:
! 	2021-05-10  Alex Coplan  <alex.coplan@arm.com>
  
! 	PR target/99960
! 	* config/arm/mve.md (*mve_mov<mode>): Simplify output code. Use
! 	vldrw.u32 and vstrw.32 for V2D[IF]mode loads and stores.
  
! 2021-05-20  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	Backported from master:
! 	2021-05-18  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	PR c++/100281
! 	* tree.c (build_reference_type_for_mode)
! 	(build_pointer_type_for_mode): Pick pointer mode if MODE argument
! 	is VOIDmode.
! 	(build_reference_type, build_pointer_type): Invoke
! 	build_*_type_for_mode with VOIDmode.
  
! 2021-05-19  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	* config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Define
! 	__ROP_PROTECT__ if -mrop-protect is selected.
  
! 2021-05-19  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	* config/rs6000/rs6000-internal.h (rs6000_stack): Add
! 	rop_hash_save_offset and rop_hash_size.
! 	* config/rs6000/rs6000-logue.c (rs6000_stack_info): Compute
! 	rop_hash_size and rop_hash_save_offset.
! 	(debug_stack_info): Dump rop_hash_save_offset and rop_hash_size.
! 	(rs6000_emit_prologue): Emit hashst[p] in prologue.
! 	(rs6000_emit_epilogue): Emit hashchk[p] in epilogue.
! 	* config/rs6000/rs6000.md (unspec): Add UNSPEC_HASHST and
! 	UNSPEC_HASHCHK.
! 	(hashst): New define_insn.
! 	(hashchk): Likewise.
  
! 2021-05-19  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	* config/rs6000/rs6000.c (rs6000_option_override_internal):
! 	Disable shrink wrap when inserting ROP-protect instructions.
! 	* config/rs6000/rs6000.opt (mrop-protect): New option.
! 	(mprivileged): Likewise.
! 	* doc/invoke.texi: Document mrop-protect and mprivileged.
  
! 2021-05-19  Jonathan Wakely  <jwakely@redhat.com>
  
! 	Backported from master:
! 	2021-05-19  Jonathan Wakely  <jwakely@redhat.com>
  
! 	* doc/cpp.texi (Common Predefined Macros): Update documentation
! 	for the __GXX_EXPERIMENTAL_CXX0X__ macro.
  
! 2021-05-17  Alex Coplan  <alex.coplan@arm.com>
  
! 	Backported from master:
! 	2021-04-27  Alex Coplan  <alex.coplan@arm.com>
  
! 	PR target/99977
! 	* config/arm/arm.c (arm_split_compare_and_swap): Fix up codegen
! 	with negative immediates: ensure we expand cbranchsi4_scratch
! 	correctly and ensure we satisfy its constraints.
! 	* config/arm/sync.md
! 	(@atomic_compare_and_swap<CCSI:arch><NARROW:mode>_1): Don't
! 	attempt to tie two output operands together with constraints;
! 	collapse two alternatives.
! 	(@atomic_compare_and_swap<CCSI:arch><SIDI:mode>_1): Likewise.
! 	* config/arm/thumb1.md (cbranchsi4_neg_late): New.
  
! 2021-05-17  Marius Hillenbrand  <mhillen@linux.ibm.com>
  
! 	Backported from master:
! 	2021-05-17  Marius Hillenbrand  <mhillen@linux.ibm.com>
  
! 	PR bootstrap/100552
! 	* configure.ac: Replace pattern substitution with call to sed.
  	* configure: Regenerate.
  
! 2021-05-13  Tobias Burnus  <tobias@codesourcery.com>
! 
! 	Backported from master:
! 	2021-05-12  Tobias Burnus  <tobias@codesourcery.com>
! 
! 	* omp-low.c (finish_taskreg_scan): Use the proper detach decl.
! 
! 2021-05-13  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
! 
! 	Backported from master:
! 	2021-05-11  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
! 		    Joe Ramsay   <joe.ramsay@arm.com>
! 
! 	PR target/100419
! 	* config/arm/arm_mve.h (__arm_vstrwq_scatter_offset): Fix wrong arguments.
! 	(__arm_vcmpneq): Remove duplicate definition.
! 	(__arm_vstrwq_scatter_offset_p): Likewise.
! 	(__arm_vmaxq_x): Likewise.
! 	(__arm_vmlsdavaq): Likewise.
! 	(__arm_vmlsdavaxq): Likewise.
! 	(__arm_vmlsdavq_p): Likewise.
! 	(__arm_vmlsdavxq_p): Likewise.
! 	(__arm_vrmlaldavhaq): Likewise.
! 	(__arm_vstrbq_p): Likewise.
! 	(__arm_vstrbq_scatter_offset): Likewise.
! 	(__arm_vstrbq_scatter_offset_p): Likewise.
! 	(__arm_vstrdq_scatter_offset): Likewise.
! 	(__arm_vstrdq_scatter_offset_p): Likewise.
! 	(__arm_vstrdq_scatter_shifted_offset): Likewise.
! 	(__arm_vstrdq_scatter_shifted_offset_p): Likewise.
! 
! 2021-05-13  Richard Earnshaw  <rearnsha@arm.com>
! 
! 	PR target/100563
! 	* config/arm/arm.c (arm_canonicalize_comparison): Correctly
! 	canonicalize DImode inequality comparisons against the
! 	maximum integral value.
! 
! 2021-05-12  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2021-05-12  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/100566
! 	* tree-ssa-sccvn.c (dominated_by_p_w_unex): Properly handle
! 	allow_back for all edge queries.
! 
! 2021-05-12  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2021-05-12  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/100508
! 	* cfgexpand.c (expand_debug_expr): For DEBUG_EXPR_DECL with vector
! 	type, don't reuse DECL_RTL if it has different mode, instead force
! 	creation of a new DEBUG_EXPR.
! 
! 2021-05-12  Jakub Jelinek  <jakub@redhat.com>
! 
! 	Backported from master:
! 	2021-05-11  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/100471
! 	* omp-low.c (lower_omp_task_reductions): For OMP_TASKLOOP, if data
! 	is 0, bypass the reduction loop including
! 	GOMP_taskgroup_reduction_unregister call.
! 
! 2021-05-12  Geng Qi  <gengqi@linux.alibaba.com>
! 
! 	Backported from master:
! 	2021-04-30  Geng Qi  <gengqi@linux.alibaba.com>
! 
! 	* config/riscv/riscv.opt (march=,mabi=): Negative itself.
! 
! 2021-05-11  Alex Coplan  <alex.coplan@arm.com>
! 
! 	PR target/99988
! 	* config/aarch64/aarch64-bti-insert.c (aarch64_bti_j_insn_p): New.
! 	(rest_of_insert_bti): Avoid inserting duplicate bti j insns for
! 	jump table targets.
! 
! 2021-05-06  Marius Hillenbrand  <mhillen@linux.ibm.com>
! 
! 	Backported from master:
! 	2021-05-06  Marius Hillenbrand  <mhillen@linux.ibm.com>
! 
! 	* config/s390/s390-builtins.def (O_M5, O1_M5, ...): Remove unused macros.
! 	(s390_vec_permi_s64, s390_vec_permi_b64, s390_vec_permi_u64)
! 	(s390_vec_permi_dbl, s390_vpdi): Use the O3_U2 type for the immediate
! 	operand.
! 	* config/s390/s390.c (s390_const_operand_ok): Remove unused
! 	values.
! 
! 2021-05-06  Roman Zhuykov  <zhroma@ispras.ru>
! 
! 	Backported from master:
! 	2021-04-30  Roman Zhuykov  <zhroma@ispras.ru>
! 
! 	PR rtl-optimization/100225
! 	PR rtl-optimization/84878
! 	* modulo-sched.c (sms_schedule): Use note_stores to skip loops
! 	where we have an instruction which touches (writes) any hard
! 	register from df->regular_block_artificial_uses set.
! 	Allow not-single-set instruction only right before basic block
! 	tail.
! 
! 2021-05-06  Ilya Leoshkevich  <iii@linux.ibm.com>
! 
! 	PR target/100217
! 	* config/s390/s390.c (s390_hard_fp_reg_p): New function.
! 	(s390_md_asm_adjust): Handle hard registers.
! 
! 2021-05-05  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	PR target/100402
! 	* config/i386/i386.c (ix86_compute_frame_layout): For a SEH target,
! 	always return the establisher frame for __builtin_frame_address (0).
! 
! 2021-05-05  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
! 
! 	Backported from master:
! 	2021-05-05  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
! 
! 	PR rtl-optimization/100263
! 	* postreload.c (move2add_valid_value_p): Ensure register can
! 	change mode.
! 
! 2021-05-05  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	PR rtl-optimization/100411
! 	* cfgcleanup.c (try_crossjump_to_edge): Also skip end of prologue
! 	and beginning of function markers.
! 
! 2021-05-05  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2021-04-29  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/100253
! 	* tree-vect-stmts.c (vectorizable_load): Do not assume
! 	element alignment when DR_MISALIGNMENT is -1.
! 	(vectorizable_store): Likewise.
! 
! 2021-05-05  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2021-04-27  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100278
! 	* tree-ssa-pre.c (compute_avail): Give up when we cannot
! 	adjust TBAA beacuse of mismatching bases.
  
! 2021-05-05  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-04-29  Richard Biener  <rguenther@suse.de>
  
! 	PR ipa/100308
! 	* ipa-prop.c (ipcp_modif_dom_walker::before_dom_children):
! 	Track blocks to cleanup EH in new m_need_eh_cleanup.
! 	(ipcp_modif_dom_walker::cleanup_eh): New.
! 	(ipcp_transform_function): Release dominator info before
! 	doing EH cleanup.
  
! 2021-05-05  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-05-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100414
! 	* tree-ssa-phiopt.c (get_non_trapping): Do not compute dominance
! 	info here.
! 	(tree_ssa_phiopt_worker): But unconditionally here.
  
! 2021-05-05  Richard Biener  <rguenther@suse.de>
  
! 	Backported from master:
! 	2021-05-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100329
! 	* tree-ssa-reassoc.c (can_reassociate_p): Do not reassociate
! 	asm goto defs.
! 	(insert_stmt_after): Assert we're not running into asm goto.
  
! 2021-05-04  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-05-02  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/100375
! 	* config/nvptx/nvptx.c (nvptx_sese_pseudo): Use nullptr instead of 0
! 	as first argument of pseudo_node_t constructors.
  
! 2021-05-01  Maciej W. Rozycki  <macro@orcam.me.uk>
  
! 	Backported from master:
! 	2021-04-27  Maciej W. Rozycki  <macro@orcam.me.uk>
  
! 	* config/vax/vax.c (print_operand_address, vax_address_cost_1)
! 	(index_term_p): Handle ASHIFT too.
  
! 2021-04-30  David Edelsohn  <dje.gcc@gmail.com>
  
! 	Backported from master:
! 	2021-04-27  David Edelsohn  <dje.gcc@gmail.com>
  
! 	* config/rs6000/aix.h (SUBTARGET_DRIVER_SELF_SPECS): New.
! 	* config/rs6000/aix64.opt (m64): New.
! 	(m32): New.
  
! 2021-04-30  Alex Coplan  <alex.coplan@arm.com>
  
! 	Backported from master:
! 	2021-04-23  Alex Coplan  <alex.coplan@arm.com>
  
! 	PR rtl-optimization/100230
! 	* early-remat.c (early_remat::sort_candidates): Use delete[]
! 	instead of delete for array allocated with new[].
  
! 2021-04-29  Richard Earnshaw  <rearnsha@arm.com>
  
! 	Backported from master:
! 	2021-04-28  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/100311
! 	* config/arm/arm.c (arm_hard_regno_mode_ok): Only allow VPR to be
! 	used in HImode.
  
! 2021-04-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-04-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/100302
! 	* config/aarch64/aarch64.c (aarch64_add_offset_1_temporaries): Use
! 	absu_hwi instead of abs_hwi.
  
! 2021-04-29  Tom de Vries  <tdevries@suse.de>
  
! 	Backported from master:
! 	2021-04-29  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/100232
! 	* internal-fn.c (expand_GOMP_SIMT_ENTER_ALLOC)
! 	(expand_GOMP_SIMT_LAST_LANE, expand_GOMP_SIMT_ORDERED_PRED)
! 	(expand_GOMP_SIMT_VOTE_ANY, expand_GOMP_SIMT_XCHG_BFLY)
! 	(expand_GOMP_SIMT_XCHG_IDX): Ensure target is assigned to.
  
! 2021-04-29  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	Backported from master:
! 	2021-04-28  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/100305
! 	* config/aarch64/constraints.md (Utq): Require the address to
! 	be valid for both the element mode and for V2DImode.
  
! 2021-04-29  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	Backported from master:
! 	2021-04-27  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/100270
! 	* config/aarch64/aarch64.c (aarch64_comp_type_attributes): Handle
! 	SVE attributes.
  
! 2021-04-28  YiFei Zhu  <zhuyifei1999@gmail.com>
  
! 	Backported from master:
! 	2021-04-23  YiFei Zhu  <zhuyifei1999@gmail.com>
  
! 	* config/bpf/bpf.h (ASM_OUTPUT_ALIGNED_BSS): Use .type and .lcomm.
  
! 2021-04-28  YiFei Zhu  <zhuyifei1999@gmail.com>
  
! 	Backported from master:
! 	2021-04-23  YiFei Zhu  <zhuyifei1999@gmail.com>
  
! 	* config/bpf/bpf.h (FUNCTION_BOUNDARY): Set to 64.
  
! 2021-04-28  Richard Earnshaw  <rearnsha@arm.com>
  
! 	Backported from master:
! 	2021-04-27  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/100236
! 	* config/arm/arm.c (THUMB2_WORK_REGS): Check PIC_OFFSET_TABLE_REGNUM
! 	is valid before including it in the mask.
  
! 2021-04-28  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/100182
! 	* config/i386/sync.md (FILD_ATOMIC/FIST_ATOMIC FP load peephole2):
! 	Copy operand 3 to operand 4.  Use sse_reg_operand
! 	as operand 3 predicate.
! 	(FILD_ATOMIC/FIST_ATOMIC FP load peephole2 with mem blockage): Ditto.
! 	(LDX_ATOMIC/STX_ATOMIC FP load peephole2): Ditto.
! 	(LDX_ATOMIC/LDX_ATOMIC FP load peephole2 with mem blockage): Ditto.
! 	(FILD_ATOMIC/FIST_ATOMIC FP store peephole2):
! 	Copy operand 1 to operand 0.
! 	(FILD_ATOMIC/FIST_ATOMIC FP store peephole2 with mem blockage): Ditto.
! 	(LDX_ATOMIC/STX_ATOMIC FP store peephole2): Ditto.
! 	(LDX_ATOMIC/LDX_ATOMIC FP store peephole2 with mem blockage): Ditto.
  
! 2021-04-28  Cui,Lili  <lili.cui@intel.com>
  
! 	* common/config/i386/i386-common.c (processor_names):
! 	Sync processor_names with processor_type.
! 	* config/i386/i386-options.c (processor_cost_table):
! 	Sync processor_cost_table with processor_type.
  
! 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/100200
! 	* config/aarch64/aarch64.c (aarch64_print_operand): Cast -UINTVAL
! 	back to HOST_WIDE_INT.
  
! 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/100200
! 	* config/aarch64/predicates.md (aarch64_sub_immediate,
! 	aarch64_plus_immediate): Use -UINTVAL instead of -INTVAL.
! 	* config/aarch64/aarch64.md (casesi, rotl<mode>3): Likewise.
! 	* config/aarch64/aarch64.c (aarch64_print_operand,
! 	aarch64_split_atomic_op, aarch64_expand_subvti): Likewise.
  
! 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/100239
! 	* tree-vect-generic.c (lower_vec_perm): Don't accept constant
! 	permutations with all indices from the first zero element as vec_shl.
  
! 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/100254
! 	* cfgcleanup.c (outgoing_edges_match): Check REG_EH_REGION on
! 	last1 and last2 insns rather than BB_END (bb1) and BB_END (bb2) insns.
  
! 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-04-26  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/100255
! 	* vmsdbgout.c (ASM_OUTPUT_DEBUG_STRING, vmsdbgout_begin_block,
! 	vmsdbgout_end_block, lookup_filename, vmsdbgout_source_line): Remove
! 	register keywords.
  
! 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	Backported from master:
! 	2021-04-21  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/100148
! 	* cprop.c (constprop_register): Use next_nondebug_insn instead of
! 	NEXT_INSN.
  
! 2021-04-27  Release Manager
  
! 	* GCC 11.1.0 released.
  
! 2021-04-20  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	Backported from master:
! 	2021-04-20  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	PR target/100108
! 	* config/rs6000/rs6000.c (rs6000_machine_from_flags): Do not consider
! 	OPTION_MASK_ISEL.
  
! 2021-04-20  Martin Liska  <mliska@suse.cz>
  
! 	* lto-streamer.h (LTO_major_version): Bump to 11.
  
! 2021-04-20  Martin Liska  <mliska@suse.cz>
  
! 	Backported from master:
! 	2021-04-20  Martin Liska  <mliska@suse.cz>
  
! 	* doc/invoke.texi: Fix typo.
! 	* params.opt: Likewise.
  
! 2021-04-20  Martin Liska  <mliska@suse.cz>
  
! 	Backported from master:
! 	2021-04-20  Martin Liska  <mliska@suse.cz>
  
! 	* doc/invoke.texi: Document new param.
  
! 2021-04-19  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/100081
! 	* gimple-range-cache.h (ranger_cache): Inherit from gori_compute
! 	rather than gori_compute_cache.
! 	* gimple-range-gori.cc (is_gimple_logical_p): Move to top of file.
! 	(range_def_chain::m_logical_depth): New member.
! 	(range_def_chain::range_def_chain): Initialize m_logical_depth.
! 	(range_def_chain::get_def_chain): Don't build defchains through more
! 	than LOGICAL_LIMIT logical expressions.
! 	* params.opt (param_ranger_logical_depth): New.
  
! 2021-04-19  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/100067
! 	* config/arm/arm.c (arm_configure_build_target): Do not strip
! 	extended FPU/SIMD feature bits from the target ISA when -mfpu
! 	is specified (partial revert of r11-8168).
  
! 2021-04-19  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	* params.opt (-param=openacc-kernels=): Add.
! 	* omp-oacc-kernels-decompose.cc
! 	(pass_omp_oacc_kernels_decompose::gate): Use it.
! 	* doc/invoke.texi (-fopenacc-kernels=@var{mode}): Move...
! 	(--param): ... here, 'openacc-kernels'.
  
! 2021-04-19  Martin Liska  <mliska@suse.cz>
  
! 	PR c/100143
! 	* gengtype.c (finish_root_table): Align function arguments
! 	in between declaration and definition.
  
! 2021-04-19  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* config/i386/winnt.c (i386_pe_seh_cold_init): Properly deal with
! 	frames larger than the SEH maximum frame size.
  
! 2021-04-18  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	PR rtl-optimization/99927
! 	* combine.c (distribute_notes) [REG_UNUSED]: If the register already
! 	is dead, just drop it.
  
! 2021-04-17  Iain Buclaw  <ibuclaw@gdcproject.org>
  
! 	PR d/99914
! 	* config/i386/winnt-d.c (TARGET_D_TEMPLATES_ALWAYS_COMDAT): Define.
! 	* doc/tm.texi: Regenerate.
! 	* doc/tm.texi.in (D language and ABI): Add @hook for
! 	TARGET_D_TEMPLATES_ALWAYS_COMDAT.
  
! 2021-04-17  Iain Buclaw  <ibuclaw@gdcproject.org>
  
! 	* config/darwin-d.c (darwin_d_handle_target_object_format): New
! 	function.
! 	(darwin_d_register_target_info): New function.
! 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
! 	* config/dragonfly-d.c (dragonfly_d_handle_target_object_format): New
! 	function.
! 	(dragonfly_d_register_target_info): New function.
! 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
! 	* config/freebsd-d.c (freebsd_d_handle_target_object_format): New
! 	function.
! 	(freebsd_d_register_target_info): New function.
! 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
! 	* config/glibc-d.c (glibc_d_handle_target_object_format): New
! 	function.
! 	(glibc_d_register_target_info): New function.
! 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
! 	* config/i386/i386-d.c (ix86_d_handle_target_object_format): New
! 	function.
! 	(ix86_d_register_target_info): Add ix86_d_handle_target_object_format
! 	as handler for objectFormat key.
! 	* config/i386/winnt-d.c (winnt_d_handle_target_object_format): New
! 	function.
! 	(winnt_d_register_target_info): New function.
! 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
! 	* config/netbsd-d.c (netbsd_d_handle_target_object_format): New
! 	function.
! 	(netbsd_d_register_target_info): New function.
! 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
! 	* config/openbsd-d.c (openbsd_d_handle_target_object_format): New
! 	function.
! 	(openbsd_d_register_target_info): New function.
! 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
! 	* config/pa/pa-d.c (pa_d_handle_target_object_format): New function.
! 	(pa_d_register_target_info): Add pa_d_handle_target_object_format as
! 	handler for objectFormat key.
! 	* config/rs6000/rs6000-d.c (rs6000_d_handle_target_object_format): New
! 	function.
! 	(rs6000_d_register_target_info): Add
! 	rs6000_d_handle_target_object_format as handler for objectFormat key.
! 	* config/sol2-d.c (solaris_d_handle_target_object_format): New
! 	function.
! 	(solaris_d_register_target_info): New function.
! 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
  
! 2021-04-16  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/91710
! 	* config/aarch64/aarch64.c (aarch64_function_arg_alignment): Change
! 	abi_break argument from bool * to unsigned *, store there the pre-GCC 9
! 	alignment.
! 	(aarch64_layout_arg, aarch64_gimplify_va_arg_expr): Adjust callers.
! 	(aarch64_function_arg_regno_p): Likewise.  Only emit -Wpsabi note if
! 	the old and new alignment after applying MIN/MAX to it is different.
  
! 2021-04-16  Tamar Christina  <tamar.christina@arm.com>
  
! 	PR target/100048
! 	* config/aarch64/aarch64-sve.md (@aarch64_sve_trn1_conv<mode>): New.
! 	* config/aarch64/aarch64.c (aarch64_expand_sve_const_pred_trn): Use new
! 	TRN optab.
! 	* config/aarch64/iterators.md (UNSPEC_TRN1_CONV): New.
  
! 2021-04-16  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	* doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions): Revise
! 	this section and its subsections.
  
! 2021-04-16  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/100075
! 	* config/aarch64/aarch64.md (*neg_asr_si2_extr, *extrsi5_insn_di): New
! 	define_insn patterns.
  
! 2021-04-16  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/98689
! 	* reg-notes.def (UNTYPED_CALL): New note.
! 	* combine.c (distribute_notes): Handle it.
! 	* emit-rtl.c (try_split): Likewise.
! 	* rtlanal.c (rtx_properties::try_to_add_insn): Likewise.  Assume
! 	that calls with the note implicitly set all return value registers.
! 	* builtins.c (expand_builtin_apply): Add a REG_UNTYPED_CALL
! 	to untyped_calls.
  
! 2021-04-16  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/99596
! 	* rtlanal.c (rtx_properties::try_to_add_insn): Don't add global
! 	register accesses for const calls.  Assume that pure functions
! 	can only read from global registers.  Ignore cases in which
! 	the stack pointer has been marked global.
  
! 2021-04-16  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99767
! 	* tree-vect-loop.c (vect_transform_loop): Don't remove just
! 	dead scalar .MASK_LOAD calls, but also dead .COND_* calls - replace
! 	them by their last argument.
  
! 2021-04-15  Martin Liska  <mliska@suse.cz>
  
! 	* doc/invoke.texi: Other params don't use it, remove it.
  
! 2021-04-15  Richard Biener  <rguenther@suse.de>
  
! 	* gimple-builder.h: Add deprecation note.
  
! 2021-04-15  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR c++/98852
! 	* attribs.h (restrict_type_identity_attributes_to): Declare.
! 	* attribs.c (restrict_type_identity_attributes_to): New function.
  
! 2021-04-15  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR c/98852
! 	* attribs.h (affects_type_identity_attributes): Declare.
! 	* attribs.c (remove_attributes_matching): New function.
! 	(affects_type_identity_attributes): Likewise.
  
! 2021-04-15  Jakub Jelinek  <jakub@redhat.com>
  
  	PR target/100056
! 	* config/aarch64/aarch64.md (*<LOGICAL:optab>_<SHIFT:optab><mode>3):
! 	Add combine splitters for *<LOGICAL:optab>_ashl<mode>3 with
! 	ZERO_EXTEND, SIGN_EXTEND or AND.
! 
! 2021-04-14  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	PR rtl-optimization/99929
! 	* rtl.h (same_vector_encodings_p): New function.
! 	* cse.c (exp_equiv_p): Check that CONST_VECTORs have the same encoding.
! 	* cselib.c (rtx_equal_for_cselib_1): Likewise.
! 	* jump.c (rtx_renumbered_equal_p): Likewise.
! 	* lra-constraints.c (operands_match_p): Likewise.
! 	* reload.c (operands_match_p): Likewise.
! 	* rtl.c (rtx_equal_p_cb, rtx_equal_p): Likewise.
! 
! 2021-04-14  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* print-rtl.c (rtx_writer::print_rtx_operand_codes_E_and_V): Print
! 	more information about variable-length CONST_VECTORs.
! 
! 2021-04-14  Vladimir N. Makarov  <vmakarov@redhat.com>
! 
! 	PR rtl-optimization/100066
! 	* lra-constraints.c (split_reg): Check paradoxical_subreg_p for
! 	ordered modes when choosing splitting mode for hard reg.
! 
! 2021-04-14  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	PR target/99246
! 	* config/aarch64/aarch64.c (aarch64_expand_sve_const_vector_sel):
! 	New function.
! 	(aarch64_expand_sve_const_vector): Use it for nelts_per_pattern==2.
! 
! 2021-04-14  Andreas Krebbel  <krebbel@linux.ibm.com>
! 
! 	* config/s390/s390-builtins.def (O_M5, O_M12, ...): Add new macros
! 	for mask operand types.
! 	(s390_vec_permi_s64, s390_vec_permi_b64, s390_vec_permi_u64)
! 	(s390_vec_permi_dbl, s390_vpdi): Use the M5 type for the immediate
! 	operand.
! 	(s390_vec_msum_u128, s390_vmslg): Use the M12 type for the
! 	immediate operand.
! 	* config/s390/s390.c (s390_const_operand_ok): Check the new
! 	operand types and generate a list of valid values.
  
! 2021-04-14  Iain Buclaw  <ibuclaw@gdcproject.org>
  
! 	* doc/tm.texi: Regenerate.
! 	* doc/tm.texi.in (D language and ABI): Add @hook for
! 	TARGET_D_REGISTER_OS_TARGET_INFO.
  
! 2021-04-14  Iain Buclaw  <ibuclaw@gdcproject.org>
  
! 	* config/aarch64/aarch64-d.c (aarch64_d_handle_target_float_abi): New
! 	function.
! 	(aarch64_d_register_target_info): New function.
! 	* config/aarch64/aarch64-protos.h (aarch64_d_register_target_info):
! 	Declare.
! 	* config/aarch64/aarch64.h (TARGET_D_REGISTER_CPU_TARGET_INFO):
! 	Define.
! 	* config/arm/arm-d.c (arm_d_handle_target_float_abi): New function.
! 	(arm_d_register_target_info): New function.
! 	* config/arm/arm-protos.h (arm_d_register_target_info): Declare.
! 	* config/arm/arm.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
! 	* config/i386/i386-d.c (ix86_d_handle_target_float_abi): New function.
! 	(ix86_d_register_target_info): New function.
! 	* config/i386/i386-protos.h (ix86_d_register_target_info): Declare.
! 	* config/i386/i386.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
! 	* config/mips/mips-d.c (mips_d_handle_target_float_abi): New function.
! 	(mips_d_register_target_info): New function.
! 	* config/mips/mips-protos.h (mips_d_register_target_info): Declare.
! 	* config/mips/mips.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
! 	* config/pa/pa-d.c (pa_d_handle_target_float_abi): New function.
! 	(pa_d_register_target_info): New function.
! 	* config/pa/pa-protos.h (pa_d_register_target_info): Declare.
! 	* config/pa/pa.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
! 	* config/riscv/riscv-d.c (riscv_d_handle_target_float_abi): New
! 	function.
! 	(riscv_d_register_target_info): New function.
! 	* config/riscv/riscv-protos.h (riscv_d_register_target_info): Declare.
! 	* config/riscv/riscv.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
! 	* config/rs6000/rs6000-d.c (rs6000_d_handle_target_float_abi): New
! 	function.
! 	(rs6000_d_register_target_info): New function.
! 	* config/rs6000/rs6000-protos.h (rs6000_d_register_target_info):
  	Declare.
! 	* config/rs6000/rs6000.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
! 	* config/s390/s390-d.c (s390_d_handle_target_float_abi): New function.
! 	(s390_d_register_target_info): New function.
! 	* config/s390/s390-protos.h (s390_d_register_target_info): Declare.
! 	* config/s390/s390.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
! 	* config/sparc/sparc-d.c (sparc_d_handle_target_float_abi): New
! 	function.
! 	(sparc_d_register_target_info): New function.
! 	* config/sparc/sparc-protos.h (sparc_d_register_target_info): Declare.
! 	* config/sparc/sparc.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
! 	* doc/tm.texi: Regenerate.
! 	* doc/tm.texi.in (D language and ABI): Add @hook for
! 	TARGET_D_REGISTER_CPU_TARGET_INFO.
! 
! 2021-04-14  Iain Buclaw  <ibuclaw@gdcproject.org>
! 
! 	* config/i386/i386-d.c (ix86_d_has_stdcall_convention): New function.
! 	* config/i386/i386-protos.h (ix86_d_has_stdcall_convention): Declare.
! 	* config/i386/i386.h (TARGET_D_HAS_STDCALL_CONVENTION): Define.
! 	* doc/tm.texi: Regenerate.
! 	* doc/tm.texi.in (D language and ABI): Add @hook for
! 	TARGET_D_HAS_STDCALL_CONVENTION.
! 
! 2021-04-14  Richard Biener  <rguenther@suse.de>
! 
! 	* tree-cfg.c (verify_gimple_assign_ternary): Verify that
! 	VEC_COND_EXPRs have a gimple_val condition.
! 	* tree-ssa-propagate.c (valid_gimple_rhs_p): VEC_COND_EXPR
! 	can no longer have a GENERIC condition.
! 
! 2021-04-14  Richard Earnshaw  <rearnsha@arm.com>
! 
! 	PR target/100067
! 	* config/arm/arm.c (arm_configure_build_target): Strip isa_all_fpbits
! 	from the isa_delta when -mfpu has been used.
! 	(arm_options_perform_arch_sanity_checks): It's the architecture that
! 	lacks an FPU not the processor.
! 
! 2021-04-13  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/100053
! 	* tree-ssa-sccvn.c (vn_nary_op_get_predicated_value): Do
! 	not use optimistic dominance queries for backedges to validate
! 	predicated values.
! 	(dominated_by_p_w_unex): Add parameter to ignore executable
! 	state on backedges.
! 	(rpo_elim::eliminate_avail): Adjust.
! 
! 2021-04-13  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/100028
! 	* config/aarch64/aarch64.md (*aarch64_bfxil<mode>_extr,
! 	*aarch64_bfxilsi_extrdi): New define_insn patterns.
! 
! 2021-04-13  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/99648
! 	* simplify-rtx.c (simplify_immed_subreg): For MODE_COMPOSITE_P
! 	outermode, return NULL if the result doesn't encode back to the
! 	original byte sequence.
! 	(simplify_gen_subreg): Don't create SUBREGs from constants to
! 	MODE_COMPOSITE_P outermode.
! 
! 2021-04-12  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR rtl-optimization/99905
! 	* combine.c (expand_compound_operation): If pos + len > modewidth,
! 	perform the right shift by pos in inner_mode and then convert to mode,
! 	instead of trying to simplify a shift of rtx with inner_mode by pos
! 	as if it was a shift in mode.
! 
! 2021-04-12  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR debug/99830
! 	* combine.c (simplify_and_const_int_1): Don't optimize varop
! 	away if it has side-effects.
! 
! 2021-04-12  Martin Liska  <mliska@suse.cz>
! 
! 	* doc/extend.texi: Escape @smallexample content.
! 
! 2021-04-12  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
! 
! 	* config/s390/s390.md ("*movdi_31", "*movdi_64"): Add
! 	  alternative in order to load a DFP zero.
! 
! 2021-04-12  Martin Liska  <mliska@suse.cz>
! 
! 	* doc/extend.texi: Be more precise in documentation
! 	of symver attribute.
! 
! 2021-04-12  Martin Liska  <mliska@suse.cz>
! 
! 	PR sanitizer/99877
! 	* gimplify.c (gimplify_expr): Right now, we unpoison all
! 	variables before a goto <dest>. We should not do it if we are
! 	in a omp context.
! 
! 2021-04-12  Cui,Lili  <lili.cui@intel.com>
! 
! 	* common/config/i386/cpuinfo.h (get_intel_cpu): Handle
! 	rocketlake.
! 	* common/config/i386/i386-common.c (processor_names): Add
! 	rocketlake.
! 	(processor_alias_table): Add rocketlake.
! 	* common/config/i386/i386-cpuinfo.h (processor_subtypes): Add
! 	INTEL_COREI7_ROCKETLAKE.
! 	* config.gcc: Add -march=rocketlake.
! 	* config/i386/i386-c.c (ix86_target_macros_internal): Handle
! 	rocketlake.
! 	* config/i386/i386-options.c (m_ROCKETLAKE)  : Define.
! 	(processor_cost_table): Add rocketlake cost.
! 	* config/i386/i386.h (ix86_size_cost) : Define
! 	TARGET_ROCKETLAKE.
! 	(processor_type) : Add PROCESSOR_ROCKETLAKE.
! 	(PTA_ROCKETLAKE): Ditto.
! 	* doc/extend.texi: Add rocketlake.
! 	* doc/invoke.texi: Add rocketlake.
! 
! 2021-04-12  Cui,Lili  <lili.cui@intel.com>
! 
! 	* config/i386/i386.h (PTA_ALDERLAKE): Change alderlake ISA list.
! 	* config/i386/i386-options.c (m_CORE_AVX2): Add m_ALDERLAKE.
! 	* common/config/i386/cpuinfo.h (get_intel_cpu): Add AlderLake model.
! 	* doc/invoke.texi: Change alderlake ISA list.
! 
! 2021-04-11  Hafiz Abid Qadeer  <abidh@codesourcery.com>
! 
! 	PR middle-end/98088
! 	* omp-expand.c (expand_oacc_collapse_init): Update condition in
! 	a gcc_assert.
! 
! 2021-04-10  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/99744
! 	* config/i386/serializeintrin.h (_serialize): Defined as macro.
! 
! 2021-04-10  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR lto/99849
! 	* expr.c (expand_expr_addr_expr_1): Test is_global_var rather than
! 	just TREE_STATIC on COMPOUND_LITERAL_EXPR_DECLs.
! 
! 2021-04-10  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/99989
! 	* gimple-ssa-warn-alloca.c
! 	(alloca_type_and_limit::alloca_type_and_limit): Initialize limit to
! 	0 with integer precision unconditionally.
! 
! 2021-04-10  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR rtl-optimization/98601
! 	* rtlanal.c (rtx_addr_can_trap_p_1): Allow in assert unknown size
! 	not just for BLKmode, but also for VOIDmode.  For STRICT_ALIGNMENT
! 	unaligned_mems handle VOIDmode like BLKmode.
! 
! 2021-04-10  Jan Hubicka  <hubicka@ucw.cz>
! 
! 	PR lto/99857
! 	* tree.c (free_lang_data_in_decl): Do not release body of
! 	declare_variant_alt.
! 
! 2021-04-09  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64.c (aarch64_option_restore): If the
! 	architecture was specified explicitly and the tuning wasn't,
! 	tune for the architecture rather than the configured default CPU.
! 
! 2021-04-09  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64.md (tlsdesc_small_sve_<mode>): Use X30
! 	as the temporary register.
! 
! 2021-04-09  Martin Liska  <mliska@suse.cz>
! 
! 	* doc/extend.texi: Move non-target attributes on the top level.
! 
! 2021-04-09  Martin Liska  <mliska@suse.cz>
! 
! 	* doc/invoke.texi: Document minimum and maximum value of the
! 	argument for both supported compression algorithms.
! 
! 2021-04-08  David Edelsohn  <dje.gcc@gmail.com>
! 
! 	* config/rs6000/rs6000.c (rs6000_xcoff_select_section): Select
! 	TLS BSS before TLS data.
! 	* config/rs6000/xcoff.h (ASM_OUTPUT_TLS_COMMON): Use .comm.
! 
! 2021-04-08  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* doc/sourcebuild.texi (stdint_types_mbig_endian): Document.
! 
! 2021-04-08  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* match.pd: Extend vec_cond folds to handle shifts.
! 
! 2021-04-08  Maciej W. Rozycki  <macro@orcam.me.uk>
! 
! 	* config/vax/vax.md: Fix comment for `*bit<mode>' pattern's
! 	peephole.
! 
! 2021-04-08  Alex Coplan  <alex.coplan@arm.com>
! 
! 	PR target/99647
! 	* config/arm/iterators.md (MVE_vecs): New.
! 	(V_elem): Also handle V2DF.
! 	* config/arm/mve.md (*mve_mov<mode>): Rename to ...
! 	(*mve_vdup<mode>): ... this. Remove second alternative since
! 	vec_duplicate of const_int is not canonical RTL, and we don't
! 	want to match symbol_refs.
! 	(*mve_vec_duplicate<mode>): Delete (pattern is redundant).
! 
! 2021-04-08  Xionghu Luo  <luoxhu@linux.ibm.com>
! 
! 	* fold-const.c (fold_single_bit_test): Fix typo.
! 	* print-rtl.c (print_rtx_insn_vec): Call print_rtl_single
! 	instead.
! 
! 2021-04-07  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	PR tree-optimization/97513
! 	* tree-vect-slp.c (vect_add_slp_permutation): New function,
! 	split out from...
! 	(vectorizable_slp_permutation): ...here.  Detect cases in which
! 	all VEC_PERM_EXPRs are guaranteed to have the same stepped
! 	permute vector and only generate one permute vector for that case.
! 	Extend that case to handle variable-length vectors.
  
! 2021-04-07  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR tree-optimization/99873
! 	* tree-vect-slp.c (vect_slp_prefer_store_lanes_p): New function.
! 	(vect_build_slp_instance): Don't split store groups that could
! 	use IFN_STORE_LANES.
  
! 2021-04-07  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99872
! 	* varasm.c (output_constant_pool_contents): Don't strip name encoding
! 	from XSTR (desc->sym, 0) or from label before passing those to
! 	ASM_OUTPUT_DEF.
  
! 2021-04-07  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/99954
! 	* tree-loop-distribution.c: Include tree-affine.h.
! 	(generate_memcpy_builtin): Try using tree-affine to prove
! 	non-overlap.
! 	(loop_distribution::classify_builtin_ldst): Always classify
! 	as PKIND_MEMMOVE.
  
! 2021-04-07  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/99947
! 	* tree-vect-loop.c (vectorizable_induction): Pre-allocate
! 	steps vector to avoid pushing elements from the reallocated
! 	vector.
  
! 2021-04-07  Richard Biener  <rguenther@suse.de>
  
! 	* tree-ssa-sccvn.h (print_vn_reference_ops): Declare.
! 	* tree-ssa-pre.c (print_pre_expr): Factor out VN reference operand
! 	printing...
! 	* tree-ssa-sccvn.c (print_vn_reference_ops): ... into this new
! 	function.
! 	(debug_vn_reference_ops): New.
  
! 2021-04-07  Bin Cheng  <bin.cheng@linux.alibaba.com>
  
! 	PR tree-optimization/98736
! 	* tree-loop-distribution.c
! 	* (loop_distribution::bb_top_order_init):
! 	Compute RPO with programing order preserved by calling function
! 	rev_post_order_and_mark_dfs_back_seme.
  
! 2021-04-06  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR target/99781
! 	* lra-constraints.c (split_reg): Don't check paradoxical_subreg_p.
! 	* lra-lives.c (clear_sparseset_regnos, regnos_in_sparseset_p): New
! 	functions.
! 	(process_bb_lives): Don't update biggest mode of hard reg for
! 	implicit in multi-register group.  Use the new functions for
! 	updating dead_set and unused_set by register notes.
  
! 2021-04-06  Xianmiao Qu  <xianmiao_qu@c-sky.com>
  
! 	* config/csky/csky_pipeline_ck802.md : Use insn reservation name
! 	instead of *.
  
! 2021-04-06  H.J. Lu  <hjl.tools@gmail.com>
  
! 	* config/i386/x86-tune-costs.h (skylake_memcpy): Updated.
! 	(skylake_memset): Likewise.
! 	(skylake_cost): Change CLEAR_RATIO to 17.
! 	* config/i386/x86-tune.def (X86_TUNE_PREFER_KNOWN_REP_MOVSB_STOSB):
! 	Replace m_CANNONLAKE, m_ICELAKE_CLIENT, m_ICELAKE_SERVER,
! 	m_TIGERLAKE and m_SAPPHIRERAPIDS with m_SKYLAKE and m_CORE_AVX512.
  
! 2021-04-06  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/99880
! 	* tree-vect-loop.c (maybe_set_vectorized_backedge_value): Only
! 	set vectorized defs of relevant PHIs.
  
! 2021-04-06  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/99924
! 	* tree-vect-slp.c (vect_bb_partition_graph_r): Do not mark
! 	nodes w/o scalar stmts as visited.
  
! 2021-04-06  Alex Coplan  <alex.coplan@arm.com>
  
! 	PR target/99748
! 	* config/arm/arm.c (arm_libcall_uses_aapcs_base): Also use base
! 	PCS for [su]fix_optab.
  
! 2021-04-03  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config/darwin.c (machopic_legitimize_pic_address): Check
! 	that the current pic register is one of the hard reg set
! 	before setting liveness.
  
! 2021-04-03  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config/darwin.c (machopic_legitimize_pic_address): Fix
! 	whitespace, remove unused code.
  
! 2021-04-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/99882
! 	* gimple-ssa-store-merging.c (bswap_view_convert): Handle val with
! 	pointer type.
  
! 2021-04-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/99863
! 	* dse.c (replace_read): Drop regs_live argument.  Instead of
! 	regs_live, use store_insn->fixed_regs_live if non-NULL,
! 	otherwise punt if insns sequence clobbers or sets any hard
! 	registers.
  
! 2021-04-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR testsuite/98125
! 	* targhooks.h (default_print_patchable_function_entry_1): Declare.
! 	* targhooks.c (default_print_patchable_function_entry_1): New function,
! 	copied from default_print_patchable_function_entry with an added flags
! 	argument.
! 	(default_print_patchable_function_entry): Rewritten into a small
! 	wrapper around default_print_patchable_function_entry_1.
! 	* config/rs6000/rs6000.c (TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY):
! 	Redefine.
! 	(rs6000_print_patchable_function_entry): New function.
  
! 2021-04-02  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* doc/invoke.texi (fdelete-dead-exceptions): Minor tweak.
  
! 2021-04-01  Jason Merrill  <jason@redhat.com>
  
! 	PR c++/98481
! 	* common.opt: Document v15 and v16.
  
! 2021-04-01  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/99863
! 	* gimplify.c (gimplify_init_constructor): Recompute vector
! 	constructor flags.
  
! 2021-04-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	* doc/extend.texi (symver attribute): Fix up syntax errors
! 	in the examples.
  
! 2021-04-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/96573
! 	* gimple-ssa-store-merging.c (init_symbolic_number): Handle
! 	also pointer types.
  
! 2021-04-01  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/99856
! 	* tree-vect-patterns.c (vect_recog_over_widening_pattern): Promote
! 	precision to vector element precision.
  
! 2021-04-01  Martin Jambor  <mjambor@suse.cz>
  
! 	PR tree-optimization/97009
! 	* tree-sra.c (access_or_its_child_written): New function.
! 	(propagate_subaccesses_from_rhs): Use it instead of a simple grp_write
! 	test.
  
! 2021-03-31  Jan Hubicka  <hubicka@ucw.cz>
  
! 	PR ipa/98265
! 	* cif-code.def (USES_COMDAT_LOCAL): Make CIF_FINAL_NORMAL.
  
! 2021-03-31  Pat Haugen  <pthaugen@linux.ibm.com>
  
! 	PR target/99133
! 	* config/rs6000/altivec.md (xxspltiw_v4si, xxspltiw_v4sf_inst,
! 	xxspltidp_v2df_inst, xxsplti32dx_v4si_inst, xxsplti32dx_v4sf_inst,
! 	xxblend_<mode>, xxpermx_inst, xxeval): Mark prefixed.
! 	* config/rs6000/mma.md (mma_<vvi4i4i8>, mma_<avvi4i4i8>,
! 	mma_<vvi4i4i2>, mma_<avvi4i4i2>, mma_<vvi4i4>, mma_<avvi4i4>,
! 	mma_<pvi4i2>, mma_<apvi4i2>, mma_<vvi4i4i4>, mma_<avvi4i4i4>):
! 	Likewise.
! 	* config/rs6000/rs6000.c (rs6000_final_prescan_insn): Adjust test.
! 	* config/rs6000/rs6000.md (define_attr "maybe_prefixed"): New.
! 	(define_attr "prefixed"): Update initializer.
  
! 2021-03-31  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/99490
! 	* dwarf2out.c (debug_ranges_dwo_section): New variable.
! 	(DW_RANGES_IDX_SKELETON): Define.
! 	(struct dw_ranges): Add begin_entry and end_entry members.
! 	(DEBUG_DWO_RNGLISTS_SECTION): Define.
! 	(add_ranges_num): Adjust r initializer for addition of *_entry
! 	members.
! 	(add_ranges_by_labels): For -gsplit-dwarf and force_direct,
! 	set idx to DW_RANGES_IDX_SKELETON.
! 	(use_distinct_base_address_for_range): New function.
! 	(index_rnglists): Don't set r->idx if it is equal to
! 	DW_RANGES_IDX_SKELETON.  Initialize r->begin_entry and
! 	r->end_entry for -gsplit-dwarf if those will be needed by
! 	output_rnglists.
! 	(output_rnglists): Add DWO argument.  If true, switch to
! 	debug_ranges_dwo_section rather than debug_ranges_section.
! 	Adjust l1/l2 label indexes.  Only output the offset table when
! 	dwo is true and don't include in there the skeleton range
! 	entry if present.  For -gsplit-dwarf, skip ranges that belong
! 	to the other rnglists section.  Change return type from void
! 	to bool and return true if there are any range entries for
! 	the other section.  For dwarf_split_debug_info use
! 	DW_RLE_startx_endx, DW_RLE_startx_length and DW_RLE_base_addressx
! 	entries instead of DW_RLE_start_end, DW_RLE_start_length and
! 	DW_RLE_base_address.  Use use_distinct_base_address_for_range.
! 	(init_sections_and_labels): Initialize debug_ranges_dwo_section
! 	if -gsplit-dwarf and DWARF >= 5.  Adjust ranges_section_label
! 	and range_base_label indexes.
! 	(dwarf2out_finish): Call index_rnglists earlier before finalizing
! 	.debug_addr.  Never emit DW_AT_rnglists_base attribute.  For
! 	-gsplit-dwarf and DWARF >= 5 call output_rnglists up to twice
! 	with different dwo arguments.
! 	(dwarf2out_c_finalize): Clear debug_ranges_dwo_section.
  
! 2021-03-31  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR tree-optimization/98268
! 	* gimple-fold.c (maybe_canonicalize_mem_ref_addr): Call
! 	recompute_tree_invariant_for_addr_expr after successfully
! 	folding a TARGET_MEM_REF that occurs inside an ADDR_EXPR.
  
! 2021-03-31  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR tree-optimization/99726
! 	* tree-data-ref.c (create_intersect_range_checks_index): Bail
! 	out if there is more than one access function SCEV for the loop
! 	being versioned.
  
! 2021-03-31  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/97141
! 	PR rtl-optimization/98726
! 	* emit-rtl.c (valid_for_const_vector_p): Return true for
! 	CONST_POLY_INT_P.
! 	* rtx-vector-builder.h (rtx_vector_builder::step): Return a
! 	poly_wide_int instead of a wide_int.
! 	(rtx_vector_builder::apply_set): Take a poly_wide_int instead
! 	of a wide_int.
! 	* rtx-vector-builder.c (rtx_vector_builder::apply_set): Likewise.
! 	* config/aarch64/aarch64.c (aarch64_legitimate_constant_p): Return
! 	false for CONST_VECTORs that cannot be forced to memory.
! 	* config/aarch64/aarch64-simd.md (mov<mode>): If a CONST_VECTOR
! 	is too complex to force to memory, build it up from individual
! 	elements instead.
  
! 2021-03-31  Jan Hubicka  <jh@suse.cz>
  
! 	PR lto/99447
! 	* cgraph.c (cgraph_node::release_body): Fix overactive check.
  
! 2021-03-31  Christophe Lyon  <christophe.lyon@linaro.org>
  
! 	PR target/99786
! 	* config/arm/vec-common.md (mul<mode>3): Disable on iwMMXT, expect
! 	for V4HI and V2SI.
  
! 2021-03-31  H.J. Lu  <hjl.tools@gmail.com>
  
! 	* config/i386/i386-expand.c (expand_set_or_cpymem_via_rep):
! 	For TARGET_PREFER_KNOWN_REP_MOVSB_STOSB, don't convert QImode
! 	to SImode.
! 	(decide_alg): For TARGET_PREFER_KNOWN_REP_MOVSB_STOSB, use
! 	"rep movsb/stosb" only for known sizes.
! 	* config/i386/i386-options.c (processor_cost_table): Use Ice
! 	Lake cost for Cannon Lake, Ice Lake, Tiger Lake, Sapphire
! 	Rapids and Alder Lake.
! 	* config/i386/i386.h (TARGET_PREFER_KNOWN_REP_MOVSB_STOSB): New.
! 	* config/i386/x86-tune-costs.h (icelake_memcpy): New.
! 	(icelake_memset): Likewise.
! 	(icelake_cost): Likewise.
! 	* config/i386/x86-tune.def (X86_TUNE_PREFER_KNOWN_REP_MOVSB_STOSB):
! 	New.
  
! 2021-03-31  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/98119
! 	* config/aarch64/aarch64.c
! 	(aarch64_vectorize_preferred_vector_alignment): Query the size
! 	of the provided SVE vector; do not assume that all SVE vectors
! 	have the same size.
  
! 2021-03-31  Jan Hubicka  <jh@suse.cz>
  
! 	PR lto/99447
! 	* cgraph.c (cgraph_node::release_body): Remove all callers and
! 	references.
! 	* cgraphclones.c (cgraph_node::materialize_clone): Do not do it here.
! 	* cgraphunit.c (cgraph_node::expand): And here.
  
! 2021-03-31  Martin Liska  <mliska@suse.cz>
  
! 	* ipa-modref.c (analyze_ssa_name_flags): Fix coding style
! 	and one negated condition.
  
! 2021-03-31  Jakub Jelinek  <jakub@redhat.com>
! 	    Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/99813
! 	* config/aarch64/aarch64.md (*add<mode>3_poly_1): Swap Uai and Uav
! 	constraints on operands[2] and similarly 0 and rk constraints
! 	on operands[1] corresponding to that.
  
! 2021-03-31  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR bootstrap/98860
! 	* configure.ac (HAVE_LD_BROKEN_PE_DWARF5): New AC_DEFINE if PECOFF
! 	linker doesn't support DWARF sections new in DWARF5.
! 	* config/i386/i386-options.c (ix86_option_override_internal): Default
! 	to dwarf_version 4 if HAVE_LD_BROKEN_PE_DWARF5 for TARGET_PECOFF
! 	targets.
! 	* config.in: Regenerated.
! 	* configure: Regenerated.
  
! 2021-03-30  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	PR target/99820
! 	* config/aarch64/aarch64.c (aarch64_analyze_loop_vinfo): Check for
! 	available issue_info before using it.
  
! 2021-03-30  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	PR target/99822
! 	* config/aarch64/aarch64.md (sub<mode>3_compare1_imm): Do not allow zero
! 	in operand 1.
  
! 2021-03-30  Xionghu Luo  <luoxhu@linux.ibm.com>
  
! 	PR target/99718
! 	* config/rs6000/altivec.md (altivec_lvsl_reg): Change to ...
! 	(altivec_lvsl_reg_<mode>): ... this.
! 	(altivec_lvsr_reg): Change to ...
! 	(altivec_lvsr_reg_<mode>): ... this.
! 	* config/rs6000/predicates.md (vec_set_index_operand): New.
! 	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
! 	Enable 32bit variable vec_insert for all TARGET_VSX.
! 	* config/rs6000/rs6000.c (rs6000_expand_vector_set_var_p9):
! 	Enable 32bit variable vec_insert for p9 and above.
! 	(rs6000_expand_vector_set_var_p8): Rename to ...
! 	(rs6000_expand_vector_set_var_p7): ... this.
! 	(rs6000_expand_vector_set): Use TARGET_VSX and adjust assert
! 	position.
! 	* config/rs6000/vector.md (vec_set<mode>): Use vec_set_index_operand.
! 	* config/rs6000/vsx.md (xl_len_r): Use gen_altivec_lvsl_reg_di and
! 	gen_altivec_lvsr_reg_di.
  
! 2021-03-30  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/99744
! 	* config/i386/ia32intrin.h (__rdtsc): Defined as macro.
! 	(__rdtscp): Likewise.
  
! 2021-03-30  Tamar Christina  <tamar.christina@arm.com>
  
! 	PR tree-optimization/99825
! 	* tree-vect-slp-patterns.c (vect_check_evenodd_blend):
! 	Reject non-mult 2 lanes.
  
! 2021-03-30  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/99773
! 	* config/arm/arm.c (arm_file_start): Fix emission of
! 	Tag_ABI_VFP_args attribute.
  
! 2021-03-30  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/99824
! 	* stor-layout.c (set_min_and_max_values_for_integral_type):
! 	Assert the precision is within the bounds of
! 	WIDE_INT_MAX_PRECISION.
! 	* tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Use
! 	the outermost component ref only to lower the access size
! 	and initialize that from the access type.
  
! 2021-03-30  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/98136
! 	* config/aarch64/aarch64.md (mov<mode>): Pass multi-instruction
! 	CONST_INTs to aarch64_expand_mov_immediate when called after RA.
  
! 2021-03-30  Mihailo Stojanovic  <mihailo.stojanovic@typhoon-hil.com>
  
! 	* config/aarch64/aarch64.md
! 	(<optab>_trunc<fcvt_target><GPI:mode>2): Set the "arch"
! 	attribute to disambiguate between SIMD and FP variants of the
! 	instruction.
  
! 2021-03-29  Jan Hubicka  <hubicka@ucw.cz>
  
! 	* ipa-modref.c (merge_call_lhs_flags): Correct handling of deref.
! 	(analyze_ssa_name_flags): Fix typo in comment.
  
! 2021-03-29  Alex Coplan  <alex.coplan@arm.com>
  
! 	PR target/99216
! 	* config/aarch64/aarch64-sve-builtins.cc
! 	(function_builder::add_function): Add placeholder_p argument, use
! 	placeholder decls if this is set.
! 	(function_builder::add_unique_function): Instead of conditionally adding
! 	direct overloads, unconditionally add either a direct overload or a
! 	placeholder.
! 	(function_builder::add_overloaded_function): Set placeholder_p if we're
! 	using C++ overloads. Use the obstack for string storage instead
! 	of relying on the tree nodes.
! 	(function_builder::add_overloaded_functions): Don't return early for
! 	m_direct_overloads: we need to add placeholders.
! 	* config/aarch64/aarch64-sve-builtins.h
! 	(function_builder::add_function): Add placeholder_p argument.
  
! 2021-03-29  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/99807
! 	* tree-vect-slp.c (vect_slp_analyze_node_operations_1): Move
! 	assert below VEC_PERM handling.
  
! 2021-03-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	PR target/99037
! 	* config/aarch64/aarch64-simd.md (move_lo_quad_internal_<mode>): Use
! 	aarch64_simd_or_scalar_imm_zero to match zeroes.  Remove pattern
! 	matching const_int 0.
! 	(move_lo_quad_internal_be_<mode>): Likewise.
! 	(move_lo_quad_<mode>): Update for the above.
! 	* config/aarch64/iterators.md (VQ_2E): Delete.
  
! 2021-03-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/99777
! 	* fold-const.c (extract_muldiv_1): For conversions, punt on casts from
! 	types other than scalar integral types.
  
! 2021-03-28  David Edelsohn  <dje.gcc@gmail.com>
  
! 	* config/rs6000/rs6000.c (rs6000_output_dwarf_dtprel): Do not add
! 	XCOFF TLS reloc decorations.
  
! 2021-03-28  Gerald Pfeifer  <gerald@pfeifer.com>
  
! 	* doc/analyzer.texi (Analyzer Internals): Update link to
! 	"A Memory Model for Static Analysis of C Programs".
  
! 2021-03-26  David Edelsohn  <dje.gcc@gmail.com>
  
! 	* config/rs6000/aix.h (ADJUST_FIELD_ALIGN): Call function.
! 	* config/rs6000/rs6000-protos.h (rs6000_special_adjust_field_align):
  	Declare.
! 	* config/rs6000/rs6000.c (rs6000_special_adjust_field_align): New.
! 	(rs6000_special_round_type_align): Recursively check innermost first
! 	field.
! 
! 2021-03-26  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR debug/99334
! 	* dwarf2out.h (struct dw_fde_node): Add rule18 member.
! 	* dwarf2cfi.c (dwarf2out_frame_debug_expr): When handling (set hfp sp)
! 	assignment with drap_reg active, queue reg save for hfp with offset 0
! 	and flush queued reg saves.  When handling a push with rule18,
! 	defer queueing reg save for hfp and just assert the offset is 0.
! 	(scan_trace): Assert that fde->rule18 is false.
! 
! 2021-03-26  Vladimir Makarov  <vmakarov@redhat.com>
! 
! 	PR target/99766
! 	* ira-costs.c (record_reg_classes): Put case with
! 	CT_RELAXED_MEMORY adjacent to one with CT_MEMORY.
! 	* ira.c (ira_setup_alts): Ditto.
! 	* lra-constraints.c (process_alt_operands): Ditto.
! 	* recog.c (asm_operand_ok): Ditto.
! 	* reload.c (find_reloads): Ditto.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-protos.h
! 	(cpu_addrcost_table::post_modify_ld3_st3): New member variable.
! 	(cpu_addrcost_table::post_modify_ld4_st4): Likewise.
! 	* config/aarch64/aarch64.c (generic_addrcost_table): Update
! 	accordingly, using the same costs as for post_modify.
! 	(exynosm1_addrcost_table, xgene1_addrcost_table): Likewise.
! 	(thunderx2t99_addrcost_table, thunderx3t110_addrcost_table):
! 	(tsv110_addrcost_table, qdf24xx_addrcost_table): Likewise.
! 	(a64fx_addrcost_table): Likewise.
! 	(neoversev1_addrcost_table): New.
! 	(neoversev1_tunings): Use neoversev1_addrcost_table.
! 	(aarch64_address_cost): Use the new post_modify costs for CImode
! 	and XImode.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64.opt
! 	(-param=aarch64-loop-vect-issue-rate-niters=): New parameter.
! 	* doc/invoke.texi: Document it.
! 	* config/aarch64/aarch64-protos.h (aarch64_base_vec_issue_info)
! 	(aarch64_scalar_vec_issue_info, aarch64_simd_vec_issue_info)
! 	(aarch64_advsimd_vec_issue_info, aarch64_sve_vec_issue_info)
! 	(aarch64_vec_issue_info): New structures.
! 	(cpu_vector_cost): Write comments above the variables rather
! 	than to the side.
! 	(cpu_vector_cost::issue_info): New member variable.
! 	* config/aarch64/aarch64.c: Include gimple-pretty-print.h
! 	and tree-ssa-loop-niter.h.
! 	(generic_vector_cost, a64fx_vector_cost, qdf24xx_vector_cost)
! 	(thunderx_vector_cost, tsv110_vector_cost, cortexa57_vector_cost)
! 	(exynosm1_vector_cost, xgene1_vector_cost, thunderx2t99_vector_cost)
! 	(thunderx3t110_vector_cost): Initialize issue_info to null.
! 	(neoversev1_scalar_issue_info, neoversev1_advsimd_issue_info)
! 	(neoversev1_sve_issue_info, neoversev1_vec_issue_info): New structures.
! 	(neoversev1_vector_cost): Use them.
! 	(aarch64_vec_op_count, aarch64_sve_op_count): New structures.
! 	(aarch64_vector_costs::saw_sve_only_op): New member variable.
! 	(aarch64_vector_costs::num_vector_iterations): Likewise.
! 	(aarch64_vector_costs::scalar_ops): Likewise.
! 	(aarch64_vector_costs::advsimd_ops): Likewise.
! 	(aarch64_vector_costs::sve_ops): Likewise.
! 	(aarch64_vector_costs::seen_loads): Likewise.
! 	(aarch64_simd_vec_costs_for_flags): New function.
! 	(aarch64_analyze_loop_vinfo): Initialize num_vector_iterations.
! 	Count the number of predicate operations required by SVE WHILE
! 	instructions.
! 	(aarch64_comparison_type, aarch64_multiply_add_p): New functions.
! 	(aarch64_sve_only_stmt_p, aarch64_in_loop_reduction_latency): Likewise.
! 	(aarch64_count_ops): Likewise.
! 	(aarch64_add_stmt_cost): Record whether see an SVE operation
! 	that cannot currently be implementing using Advanced SIMD.
! 	Record issue information about the scalar, Advanced SIMD
! 	and (where relevant) SVE versions of a loop.
! 	(aarch64_vec_op_count::dump): New function.
! 	(aarch64_sve_op_count::dump): Likewise.
! 	(aarch64_estimate_min_cycles_per_iter): Likewise.
! 	(aarch64_adjust_body_cost): If issue information is available,
! 	try to compare the issue rates of the various loop implementations
! 	and increase or decrease the vector body cost accordingly.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64.c (aarch64_detect_vector_stmt_subtype):
! 	Assume a zero cost for induction phis.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64.c (aarch64_embedded_comparison_type): New
! 	function.
! 	(aarch64_adjust_stmt_cost): Add the costs of embedded scalar and
! 	vector comparisons.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64.c (aarch64_detect_scalar_stmt_subtype):
! 	New function.
! 	(aarch64_add_stmt_cost): Call it.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-tuning-flags.def (matched_vector_throughput):
! 	New tuning parameter.
! 	* config/aarch64/aarch64.c (neoversev1_tunings): Use it.
! 	(aarch64_estimated_sve_vq): New function.
! 	(aarch64_vector_costs::analyzed_vinfo): New member variable.
! 	(aarch64_vector_costs::is_loop): Likewise.
! 	(aarch64_vector_costs::unrolled_advsimd_niters): Likewise.
! 	(aarch64_vector_costs::unrolled_advsimd_stmts): Likewise.
! 	(aarch64_record_potential_advsimd_unrolling): New function.
! 	(aarch64_analyze_loop_vinfo, aarch64_analyze_bb_vinfo): Likewise.
! 	(aarch64_add_stmt_cost): Call aarch64_analyze_loop_vinfo or
! 	aarch64_analyze_bb_vinfo on the first use of a costs structure.
! 	Detect whether we're vectorizing a loop for SVE that might be
! 	completely unrolled if it used Advanced SIMD instead.
! 	(aarch64_adjust_body_cost_for_latency): New function.
! 	(aarch64_finish_cost): Call it.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64.c (aarch64_vector_costs): New structure.
! 	(aarch64_init_cost): New function.
! 	(aarch64_add_stmt_cost): Use aarch64_vector_costs instead of
! 	the default unsigned[3].
! 	(aarch64_finish_cost, aarch64_destroy_cost_data): New functions.
! 	(TARGET_VECTORIZE_INIT_COST): Override.
! 	(TARGET_VECTORIZE_FINISH_COST): Likewise.
! 	(TARGET_VECTORIZE_DESTROY_COST_DATA): Likewise.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64.c (neoversev1_advsimd_vector_cost)
! 	(neoversev1_sve_vector_cost): New cost structures.
! 	(neoversev1_vector_cost): Likewise.
! 	(neoversev1_tunings): Use them.  Enable use_new_vector_costs.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-protos.h
! 	(sve_vec_cost::scatter_store_elt_cost): New member variable.
! 	* config/aarch64/aarch64.c (generic_sve_vector_cost): Update
! 	accordingly, taking the cost from the cost of a scalar_store.
! 	(a64fx_sve_vector_cost): Likewise.
! 	(aarch64_detect_vector_stmt_subtype): Detect scatter stores.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-protos.h
! 	(simd_vec_cost::store_elt_extra_cost): New member variable.
! 	* config/aarch64/aarch64.c (generic_advsimd_vector_cost): Update
! 	accordingly, using the vec_to_scalar cost for the new field.
! 	(generic_sve_vector_cost, a64fx_advsimd_vector_cost): Likewise.
! 	(a64fx_sve_vector_cost, qdf24xx_advsimd_vector_cost): Likewise.
! 	(thunderx_advsimd_vector_cost, tsv110_advsimd_vector_cost): Likewise.
! 	(cortexa57_advsimd_vector_cost, exynosm1_advsimd_vector_cost)
! 	(xgene1_advsimd_vector_cost, thunderx2t99_advsimd_vector_cost)
! 	(thunderx3t110_advsimd_vector_cost): Likewise.
! 	(aarch64_detect_vector_stmt_subtype): Detect single-element stores.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-protos.h (simd_vec_cost::ld2_st2_permute_cost)
! 	(simd_vec_cost::ld3_st3_permute_cost): New member variables.
! 	(simd_vec_cost::ld4_st4_permute_cost): Likewise.
! 	* config/aarch64/aarch64.c (generic_advsimd_vector_cost): Update
! 	accordingly, using zero for the new costs.
! 	(generic_sve_vector_cost, a64fx_advsimd_vector_cost): Likewise.
! 	(a64fx_sve_vector_cost, qdf24xx_advsimd_vector_cost): Likewise.
! 	(thunderx_advsimd_vector_cost, tsv110_advsimd_vector_cost): Likewise.
! 	(cortexa57_advsimd_vector_cost, exynosm1_advsimd_vector_cost)
! 	(xgene1_advsimd_vector_cost, thunderx2t99_advsimd_vector_cost)
! 	(thunderx3t110_advsimd_vector_cost): Likewise.
! 	(aarch64_ld234_st234_vectors): New function.
! 	(aarch64_adjust_stmt_cost): Likewise.
! 	(aarch64_add_stmt_cost): Call aarch64_adjust_stmt_cost if using
! 	the new vector costs.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-protos.h (sve_vec_cost): Turn into a
! 	derived class of simd_vec_cost.  Add information about CLAST[AB]
! 	and FADDA instructions.
! 	* config/aarch64/aarch64.c (generic_sve_vector_cost): Update
! 	accordingly, using the vec_to_scalar costs for the new fields.
! 	(a64fx_sve_vector_cost): Likewise.
! 	(aarch64_reduc_type): New function.
! 	(aarch64_sve_in_loop_reduction_latency): Likewise.
! 	(aarch64_detect_vector_stmt_subtype): Take a vinfo parameter.
! 	Use aarch64_sve_in_loop_reduction_latency to handle SVE reductions
! 	that occur in the loop body.
! 	(aarch64_add_stmt_cost): Update call accordingly.
! 
! 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-tuning-flags.def (use_new_vector_costs):
! 	New tuning flag.
! 	* config/aarch64/aarch64-protos.h (simd_vec_cost): Put comments
! 	above the fields rather than to the right.
! 	(simd_vec_cost::reduc_i8_cost): New member variable.
! 	(simd_vec_cost::reduc_i16_cost): Likewise.
! 	(simd_vec_cost::reduc_i32_cost): Likewise.
! 	(simd_vec_cost::reduc_i64_cost): Likewise.
! 	(simd_vec_cost::reduc_f16_cost): Likewise.
! 	(simd_vec_cost::reduc_f32_cost): Likewise.
! 	(simd_vec_cost::reduc_f64_cost): Likewise.
! 	* config/aarch64/aarch64.c (generic_advsimd_vector_cost): Update
! 	accordingly, using the vec_to_scalar_cost for the new fields.
! 	(generic_sve_vector_cost, a64fx_advsimd_vector_cost): Likewise.
! 	(a64fx_sve_vector_cost, qdf24xx_advsimd_vector_cost): Likewise.
! 	(thunderx_advsimd_vector_cost, tsv110_advsimd_vector_cost): Likewise.
! 	(cortexa57_advsimd_vector_cost, exynosm1_advsimd_vector_cost)
! 	(xgene1_advsimd_vector_cost, thunderx2t99_advsimd_vector_cost)
! 	(thunderx3t110_advsimd_vector_cost): Likewise.
! 	(aarch64_use_new_vector_costs_p): New function.
! 	(aarch64_simd_vec_costs): New function, split out from...
! 	(aarch64_builtin_vectorization_cost): ...here.
! 	(aarch64_is_reduction): New function.
! 	(aarch64_detect_vector_stmt_subtype): Likewise.
! 	(aarch64_add_stmt_cost): Call aarch64_detect_vector_stmt_subtype if
! 	using the new vector costs.
! 
! 2021-03-26  Iain Buclaw  <ibuclaw@gdcproject.org>
! 
! 	PR ipa/99466
! 	* tree-emutls.c (get_emutls_init_templ_addr): Mark initializer of weak
! 	TLS declarations as public.
! 
! 2021-03-26  Iain Buclaw  <ibuclaw@gdcproject.org>
! 
! 	* config/aarch64/aarch64-d.c (IN_TARGET_CODE): Define.
! 	* config/arm/arm-d.c (IN_TARGET_CODE): Likewise.
! 	* config/i386/i386-d.c (IN_TARGET_CODE): Likewise.
! 	* config/mips/mips-d.c (IN_TARGET_CODE): Likewise.
! 	* config/pa/pa-d.c (IN_TARGET_CODE): Likewise.
! 	* config/riscv/riscv-d.c (IN_TARGET_CODE): Likewise.
! 	* config/rs6000/rs6000-d.c (IN_TARGET_CODE): Likewise.
! 	* config/s390/s390-d.c (IN_TARGET_CODE): Likewise.
! 	* config/sparc/sparc-d.c (IN_TARGET_CODE): Likewise.
! 
! 2021-03-26  Iain Buclaw  <ibuclaw@gdcproject.org>
! 
! 	PR d/91595
! 	* config.gcc (*-*-cygwin*): Add winnt-d.o
! 	(*-*-mingw*): Likewise.
! 	* config/i386/cygwin.h (EXTRA_TARGET_D_OS_VERSIONS): New macro.
! 	* config/i386/mingw32.h (EXTRA_TARGET_D_OS_VERSIONS): Likewise.
! 	* config/i386/t-cygming: Add winnt-d.o.
! 	* config/i386/winnt-d.c: New file.
! 
! 2021-03-26  Iain Buclaw  <ibuclaw@gdcproject.org>
! 
! 	* config/freebsd-d.c: Include memmodel.h.
! 
! 2021-03-26  Iain Buclaw  <ibuclaw@gdcproject.org>
! 
! 	PR d/99691
! 	* config.gcc (*-*-openbsd*): Add openbsd-d.o.
! 	* config/t-openbsd: Add openbsd-d.o.
! 	* config/openbsd-d.c: New file.
! 
! 2021-03-25  Stam Markianos-Wright  <stam.markianos-wright@arm.com>
! 
! 	PR tree-optimization/96974
! 	* tree-vect-stmts.c (vect_get_vector_types_for_stmt): Replace assert
! 	with graceful exit.
! 
! 2021-03-25  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	Revert:
! 	2021-03-25  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/98209
! 	PR target/99744
! 	* config/i386/i386.c (ix86_can_inline_p): Don't check ISA for
! 	always_inline in system headers.
! 
! 2021-03-25  Kewen Lin  <linkw@linux.ibm.com>
! 
! 	* tree-vect-loop.c (vect_model_reduction_cost): Init inside_cost.
! 
! 2021-03-25  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR c++/99565
! 	* tree-core.h (enum operand_equal_flag): Add OEP_ADDRESS_OF_SAME_FIELD.
! 	* fold-const.c (operand_compare::operand_equal_p): Don't compare
! 	field offsets if OEP_ADDRESS_OF_SAME_FIELD.
! 
! 2021-03-25  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/98209
! 	PR target/99744
! 	* config/i386/i386.c (ix86_can_inline_p): Don't check ISA for
! 	always_inline in system headers.
! 
! 2021-03-25  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/99746
! 	* tree-vect-slp-patterns.c (complex_pattern::build): Do not mark
! 	the scalar stmt as patterned.  Instead set up required things
! 	manually.
! 
! 2021-03-25  Xionghu Luo  <luoxhu@linux.ibm.com>
! 
! 	* config/rs6000/rs6000.c (power8_costs): Change l2 cache
! 	from 256 to 512.
! 
! 2021-03-24  Martin Liska  <mliska@suse.cz>
! 
! 	PR target/99753
! 	* common/config/i386/i386-common.c (ARRAY_SIZE): Fix off-by-one
! 	error.
! 	* config/i386/i386-options.c (ix86_option_override_internal):
! 	Add run-time assert.
! 
! 2021-03-24  Martin Jambor  <mjambor@suse.cz>
! 
! 	PR ipa/99122
! 	* ipa-cp.c (initialize_node_lattices): Mark as bottom all
! 	parameters with unknown type.
! 	(ipacp_value_safe_for_type): New function.
! 	(propagate_vals_across_arith_jfunc): Verify that the constant type
! 	can be used for a type of the formal parameter.
! 	(propagate_vals_across_ancestor): Likewise.
! 	(propagate_scalar_across_jump_function): Likewise.  Pass the type
! 	also to propagate_vals_across_ancestor.
! 
! 2021-03-24  Christophe Lyon  <christophe.lyon@linaro.org>
! 
! 	PR target/99727
! 	* config/arm/mve.md (movmisalign<mode>_mve_store): Use Ux
! 	constraint.
! 	(movmisalign<mode>_mve_load): Likewise.
! 
! 2021-03-24  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/99724
! 	* config/arm/vec-common.md (one_cmpl<mode>2, neg<mode>2,
! 	movmisalign<mode>): Disable expanders for TARGET_REALLY_IWMMXT.
! 
! 2021-03-24  Alexandre Oliva  <oliva@adacore.com>
! 
! 	* doc/sourcebuild.texi (sysconf): New effective target.
! 
! 2021-03-24  Alexandre Oliva  <oliva@adacore.com>
! 
! 	* config/i386/predicates.md (reg_or_const_vec_operand): New.
! 	* config/i386/sse.md (ssse3_pshufbv8qi3): Add an expander for
! 	the now *-prefixed insn_and_split, turn the splitter const vec
! 	into an input for the insn, making it an ignored immediate for
! 	non-split cases, and loaded into the scratch register
! 	otherwise.
! 
! 2021-03-23  Vladimir N. Makarov  <vmakarov@redhat.com>
! 
! 	PR target/99581
! 	* config/aarch64/constraints.md (Utq, UOb, UOh, UOw, UOd, UOty):
! 	Use define_relaxed_memory_constraint for them.
! 
! 2021-03-23  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	PR target/99733
! 	* config/host-darwin.c (darwin_gt_pch_use_address): Add a
! 	colon to the diagnostic message.
! 
! 2021-03-23  Ilya Leoshkevich  <iii@linux.ibm.com>
! 
! 	* fwprop.c (fwprop_propagation::fwprop_propagation): Look at
! 	set_info's uses.
! 	(try_fwprop_subst_note): Use set_info instead of insn_info.
! 	(try_fwprop_subst_pattern): Likewise.
! 	(try_fwprop_subst_notes): Likewise.
! 	(try_fwprop_subst): Likewise.
! 	(forward_propagate_subreg): Likewise.
! 	(forward_propagate_and_simplify): Likewise.
! 	(forward_propagate_into): Likewise.
! 	* rtl-ssa/accesses.h (set_info::single_nondebug_use) New
! 	method.
! 	(set_info::single_nondebug_insn_use): Likewise.
! 	(set_info::single_phi_use): Likewise.
! 	* rtl-ssa/member-fns.inl (set_info::single_nondebug_use) New
! 	method.
! 	(set_info::single_nondebug_insn_use): Likewise.
! 	(set_info::single_phi_use): Likewise.
! 
! 2021-03-23  Christophe Lyon  <christophe.lyon@linaro.org>
! 
! 	* doc/sourcebuild.texi (arm_dsp_ok, arm_dsp): Document.
! 
! 2021-03-23  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/99540
! 	* config/aarch64/aarch64.c (aarch64_add_offset): Tell
! 	expand_mult to perform an unsigned rather than a signed
! 	multiplication.
! 
! 2021-03-23  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/99704
! 	* config/i386/cpuid.h (__cpuid): Add __volatile__.
! 	(__cpuid_count): Likewise.
! 
! 2021-03-23  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/99721
! 	* tree-vect-slp.c (vect_slp_analyze_node_operations):
! 	Make sure we can schedule the node.
! 
! 2021-03-23  Marcus Comstedt  <marcus@mc.pp.se>
! 
! 	* config/riscv/riscv.c (riscv_subword): Take endianness into
! 	account when calculating the byte offset.
! 
! 2021-03-23  Marcus Comstedt  <marcus@mc.pp.se>
! 
! 	* config/riscv/predicates.md (subreg_lowpart_operator): New predicate
! 	* config/riscv/riscv.md (*addsi3_extended2, *subsi3_extended2)
! 	(*negsi2_extended2, *mulsi3_extended2, *<optab>si3_mask)
! 	(*<optab>si3_mask_1, *<optab>di3_mask, *<optab>di3_mask_1)
! 	(*<optab>si3_extend_mask, *<optab>si3_extend_mask_1): Use
! 	new predicate "subreg_lowpart_operator"
! 
! 2021-03-23  Marcus Comstedt  <marcus@mc.pp.se>
! 
! 	* config/riscv/riscv.c (riscv_swap_instruction): New function
! 	to byteswap an SImode rtx containing an instruction.
! 	(riscv_trampoline_init): Byteswap the generated instructions
! 	when needed.
! 
! 2021-03-23  Marcus Comstedt  <marcus@mc.pp.se>
! 
! 	* common/config/riscv/riscv-common.c
! 	(TARGET_DEFAULT_TARGET_FLAGS): Set default endianness.
! 	* config.gcc (riscv32be-*, riscv64be-*): Set
! 	TARGET_BIG_ENDIAN_DEFAULT to 1.
! 	* config/riscv/elf.h (LINK_SPEC): Change -melf* value
! 	depending on default endianness.
! 	* config/riscv/freebsd.h (LINK_SPEC): Likewise.
! 	* config/riscv/linux.h (LINK_SPEC): Likewise.
! 	* config/riscv/riscv.c (TARGET_DEFAULT_TARGET_FLAGS): Set
! 	default endianness.
! 	* config/riscv/riscv.h (DEFAULT_ENDIAN_SPEC): New macro.
! 
! 2021-03-23  Marcus Comstedt  <marcus@mc.pp.se>
! 
! 	* config/riscv/elf.h (LINK_SPEC): Pass linker endianness flag.
! 	* config/riscv/freebsd.h (LINK_SPEC): Likewise.
! 	* config/riscv/linux.h (LINK_SPEC): Likewise.
! 	* config/riscv/riscv.h (ASM_SPEC): Pass -mbig-endian and
! 	-mlittle-endian.
! 	(BYTES_BIG_ENDIAN): Handle big endian.
! 	(WORDS_BIG_ENDIAN): Define to BYTES_BIG_ENDIAN.
! 	* config/riscv/riscv.opt (-mbig-endian, -mlittle-endian): New
! 	options.
! 	* doc/invoke.texi (-mbig-endian, -mlittle-endian): Document.
! 
! 2021-03-23  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
! 
! 	* regcprop.c (find_oldest_value_reg): Ask target whether
! 	  different mode is fine for replacement register.
! 
! 2021-03-23  Aldy Hernandez  <aldyh@redhat.com>
! 
! 	PR tree-optimization/99296
! 	* value-range.cc (irange::irange_set_1bit_anti_range): New.
! 	(irange::irange_set_anti_range): Call irange_set_1bit_anti_range
! 	* value-range.h (irange::irange_set_1bit_anti_range): New.
! 
! 2021-03-22  Vladimir N. Makarov  <vmakarov@redhat.com>
! 
! 	PR target/99581
! 	* config/aarch64/constraints.md (UtQ): Use
! 	define_relaxed_memory_constraint for it.
! 	* doc/md.texi (define_relaxed_memory_constraint): Describe it.
! 	* genoutput.c (main): Process DEFINE_RELAXED_MEMORY_CONSTRAINT.
! 	* genpreds.c (constraint_data): Add bitfield is_relaxed_memory.
! 	(have_relaxed_memory_constraints): New static var.
! 	(relaxed_memory_start, relaxed_memory_end): Ditto.
! 	(add_constraint): Add arg is_relaxed_memory.  Check name for
! 	relaxed memory.  Set up is_relaxed_memory in constraint_data and
! 	have_relaxed_memory_constraints.  Adjust calls.
! 	(choose_enum_order): Process relaxed memory.
! 	(write_tm_preds_h): Ditto.
! 	(main): Process DEFINE_RELAXED_MEMORY_CONSTRAINT.
! 	* gensupport.c (process_rtx): Process DEFINE_RELAXED_MEMORY_CONSTRAINT.
! 	* ira-costs.c (record_reg_classes): Process CT_RELAXED_MEMORY.
! 	* ira-lives.c (single_reg_class): Use
! 	insn_extra_relaxed_memory_constraint.
! 	* ira.c (ira_setup_alts): CT_RELAXED_MEMORY.
! 	* lra-constraints.c (valid_address_p): Use
! 	insn_extra_relaxed_memory_constraint instead of other memory
! 	constraints.
! 	(process_alt_operands): Process CT_RELAXED_MEMORY.
! 	(curr_insn_transform): Use insn_extra_relaxed_memory_constraint.
! 	* recog.c (asm_operand_ok, preprocess_constraints): Process
! 	CT_RELAXED_MEMORY.
! 	* reload.c (find_reloads): Ditto.
! 	* rtl.def (DEFINE_RELAXED_MEMORY_CONSTRAINT): New.
! 	* stmt.c (parse_input_constraint): Use
! 	insn_extra_relaxed_memory_constraint.
! 
! 2021-03-22  Segher Boessenkool  <segher@kernel.crashing.org>
! 
! 	PR target/97926
! 	* ubsan.c (ubsan_instrument_float_cast): Don't test for unordered if
! 	there are no NaNs.
! 
! 2021-03-22  Alex Coplan  <alex.coplan@arm.com>
! 
! 	PR target/97252
! 	* config/arm/arm-protos.h (neon_make_constant): Add generate
! 	argument to guard emitting insns, default to true.
! 	* config/arm/arm.c (arm_legitimate_constant_p_1): Reject
! 	CONST_VECTORs which neon_make_constant can't handle.
! 	(neon_vdup_constant): Add generate argument, avoid emitting
! 	insns if it's not set.
! 	(neon_make_constant): Plumb new generate argument through.
! 	* config/arm/constraints.md (Ui): New. Use it...
! 	* config/arm/mve.md (*mve_mov<mode>): ... here.
! 	* config/arm/vec-common.md (movv8hf): Use neon_make_constant to
! 	synthesize constants.
! 
! 2021-03-22  Richard Biener  <rguenther@suse.de>
! 
! 	* debug.h: Add deprecation warning.
! 
! 2021-03-22  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/99694
! 	* tree-ssa-sccvn.c (visit_phi): Ignore edges with the
! 	PHI result.
! 
! 2021-03-22  Kito Cheng  <kito.cheng@sifive.com>
! 
! 	PR target/99702
! 	* config/riscv/riscv.c (riscv_expand_block_move): Get RTL value
! 	after type checking.
! 
! 2021-03-22  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR debug/99562
! 	PR debug/66728
! 	* dwarf2out.c (get_full_len): Use get_precision rather than
! 	min_precision.
! 	(add_const_value_attribute): Make sure add_AT_wide argument has
! 	precision prec rather than some very wide one.
! 
! 2021-03-22  Kewen Lin  <linkw@linux.ibm.com>
! 
! 	* config/rs6000/rs6000.md (*rotldi3_insert_sf,
! 	*mov<SFDF:mode><SFDF2:mode>cc_p9, floatsi<mode>2_lfiwax,
! 	floatsi<mode>2_lfiwax_mem, floatunssi<mode>2_lfiwzx,
! 	floatunssi<mode>2_lfiwzx_mem, *floatsidf2_internal,
! 	*floatunssidf2_internal, fix_trunc<mode>si2_stfiwx,
! 	fix_trunc<mode>si2_internal, fixuns_trunc<mode>si2_stfiwx,
! 	*round32<mode>2_fprs, *roundu32<mode>2_fprs,
! 	*fix_trunc<mode>si2_internal): Fix empty split condition.
! 	* config/rs6000/vsx.md (*vsx_le_undo_permute_<mode>,
! 	vsx_reduc_<VEC_reduc_name>_v2df, vsx_reduc_<VEC_reduc_name>_v4sf,
! 	*vsx_reduc_<VEC_reduc_name>_v2df_scalar,
! 	*vsx_reduc_<VEC_reduc_name>_v4sf_scalar): Likewise.
! 
! 2021-03-22  Xionghu Luo  <luoxhu@linux.ibm.com>
! 
! 	PR target/98914
! 	* config/rs6000/rs6000.c (rs6000_expand_vector_set_var_p9):
! 	Convert idx to DImode.
! 	(rs6000_expand_vector_set_var_p8): Likewise.
! 
! 2021-03-21  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR debug/99388
! 	* dwarf2out.c (insert_float): Change return type from void to
! 	unsigned, handle GET_MODE_SIZE (mode) == 2 and return element size.
! 	(mem_loc_descriptor, loc_descriptor, add_const_value_attribute):
! 	Adjust callers.
! 
! 2021-03-20  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/99679
! 	* config/i386/i386.c (construct_container): Check cfun != NULL
! 	before accessing silent_p.
! 
! 2021-03-20  Ahamed Husni  <ahamedhusni73@gmail.com>
! 
! 	* asan.c: Fix typos in comments.
! 
! 2021-03-20  Vladimir N. Makarov  <vmakarov@redhat.com>
! 
! 	PR rtl-optimization/99680
! 	* lra-constraints.c (skip_contraint_modifiers): Rename to skip_constraint_modifiers.
! 	(process_address_1): Check empty constraint before using
! 	CONSTRAINT_LEN.
! 
! 2021-03-19  Pat Haugen  <pthaugen@linux.ibm.com>
! 
! 	* config/rs6000/rs6000.c (power10_cost): New.
! 	(rs6000_option_override_internal): Set Power10 costs.
! 	(rs6000_issue_rate): Set Power10 issue rate.
! 	* config/rs6000/power10.md: Rewrite for Power10.
! 
! 2021-03-19  Vladimir N. Makarov  <vmakarov@redhat.com>
! 
! 	PR target/99663
! 	* lra-constraints.c (process_address_1): Don't use unknown
! 	constraint for address constraint.
! 
! 2021-03-19  Iain Sandoe  <iain@sandoe.co.uk>
! 
! 	PR target/99661
! 	* config.gcc (powerpc-*-darwin8): Delete the reference to
! 	the now removed darwin8.h.
! 
! 2021-03-19  Olivier Hainque  <hainque@adacore.com>
! 
! 	PR target/99660
! 	* config/vxworksae.h (VX_CPU_PREFIX): Define.
! 
! 2021-03-19  John David Anglin  <danglin@gcc.gnu.org>
! 
! 	* config/pa/pa.c (import_milli): Use memcpy instead of strncpy.
! 
! 2021-03-19  Tamar Christina  <tamar.christina@arm.com>
! 
! 	PR tree-optimization/99656
! 	* tree-vect-slp-patterns.c (linear_loads_p,
! 	complex_add_pattern::matches, is_eq_or_top,
! 	vect_validate_multiplication, complex_mul_pattern::matches,
! 	complex_fms_pattern::matches): Remove complex_perm_kinds_t.
! 	* tree-vectorizer.h: (complex_load_perm_t): Removed.
! 	(slp_tree_to_load_perm_map_t): Use complex_perm_kinds_t instead of
! 	complex_load_perm_t.
! 
! 2021-03-19  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/99652
! 	* config/i386/i386-options.c (ix86_init_machine_status): Set
! 	silent_p to true.
! 	* config/i386/i386.c (init_cumulative_args): Set silent_p to
! 	false.
! 	(construct_container): Return early for return and argument
! 	errors if silent_p is true.
! 	* config/i386/i386.h (machine_function): Add silent_p.
! 
! 2021-03-19  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/99593
! 	* config/arm/constraints.md (Ds): New constraint.
! 	* config/arm/vec-common.md (mve_vshlq_<supf><mode>): Use w,Ds
! 	constraint instead of w,Dm.
! 
! 2021-03-19  Andrew Stubbs  <ams@codesourcery.com>
! 
! 	* config/gcn/gcn.c (gcn_parse_amdgpu_hsa_kernel_attribute): Fix quotes
! 	in error message.
! 
! 2021-03-19  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	PR middle-end/99641
! 	* fold-const.c (native_encode_initializer) <CONSTRUCTOR>: For an
! 	array type, do the computation of the current position in sizetype.
! 
! 2021-03-18  Vladimir N. Makarov  <vmakarov@redhat.com>
! 
! 	PR target/99422
! 	* lra-constraints.c (process_address_1): Use lookup_constraint
! 	only for a single constraint.
! 
! 2021-03-18  Martin Sebor  <msebor@redhat.com>
! 
! 	PR middle-end/99502
! 	* gimple-array-bounds.cc (inbounds_vbase_memaccess_p): Rename...
! 	(inbounds_memaccess_p): ...to this.  Check the ending offset of
! 	the accessed member.
! 
! 2021-03-18  Andrew Stubbs  <ams@codesourcery.com>
! 
! 	* config/gcn/gcn.c (gcn_parse_amdgpu_hsa_kernel_attribute): Add %< and
! 	  %> quote markers to error messages.
! 	(gcn_goacc_validate_dims): Likewise.
! 	(gcn_conditional_register_usage): Remove exclaimation mark from error
! 	message.
! 	(gcn_vectorize_vec_perm_const): Ensure perm is fully uninitialized.
! 
! 2021-03-18  Jan Hubicka  <hubicka@ucw.cz>
! 
! 	* config/i386/x86-tune-costs.h (struct processor_costs): Fix costs of
! 	integer divides1.
! 
! 2021-03-18  Sinan Lin  <sinan@isrc.iscas.ac.cn>
! 	    Kito Cheng  <kito.cheng@sifive.com>
! 
! 	* config/riscv/riscv.c (riscv_block_move_straight): Change type
! 	to unsigned HOST_WIDE_INT for parameter and local variable with
! 	HOST_WIDE_INT type.
! 	(riscv_adjust_block_mem): Ditto.
! 	(riscv_block_move_loop): Ditto.
! 	(riscv_expand_block_move): Ditto.
! 
! 2021-03-18  Nick Clifton  <nickc@redhat.com>
! 
! 	* config/v850/v850.c (construct_restore_jr): Increase static
! 	 buffer size.
! 	(construct_save_jarl): Likewise.
! 	* config/v850/v850.h (DWARF2_DEBUGGING_INFO): Define.
! 
! 2021-03-18  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64.c (aarch64_adjust_generic_arch_tuning): Define.
! 	(aarch64_override_options_internal): Use it.
! 	(generic_tunings): Add AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS to
! 	tune_flags.
! 
! 2021-03-17  Sandra Loosemore  <sandra@codesourcery.com>
! 
! 	* config/nios2/nios2.c (nios2_custom_check_insns): Clean up
! 	error message format issues.
! 	(nios2_option_override): Likewise.
! 	(nios2_expand_fpu_builtin): Likewise.
! 	(nios2_init_custom_builtins): Adjust to avoid bogus strncpy
! 	truncation warning.
! 	(nios2_expand_custom_builtin): More error message format fixes.
! 	(nios2_expand_rdwrctl_builtin): Likewise.
! 	(nios2_expand_rdprs_builtin): Likewise.
! 	(nios2_expand_eni_builtin): Likewise.
! 	(nios2_expand_builtin): Likewise.
! 	(nios2_register_custom_code): Likewise.
! 	(nios2_valid_target_attribute_rec): Likewise.
! 	(nios2_add_insn_asm): Fix uninitialized variable warning.
! 
! 2021-03-17  Jan Hubicka  <jh@suse.cz>
! 
! 	* config/i386/x86-tune-costs.h (struct processor_costs): Update costs
! 	of gather to match reality.
! 	* config/i386/x86-tune.def (X86_TUNE_USE_GATHER): Enable for znver3.
  
! 2021-03-17  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/aarch64-builtins.c (aarch64_expand_rng_builtin): Use EQ
! 	to compare against CC_REG rather than NE.
  
! 2021-03-17  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/99504
! 	* config/i386/i386.c (ix86_force_load_from_GOT_p): Support
! 	inline assembly statements.
! 	(ix86_print_operand): Update 'P' handling for -fno-plt.
  
! 2021-03-17  Tamar Christina  <tamar.christina@arm.com>
  
! 	PR target/99542
! 	* config/aarch64/aarch64.c
! 	(aarch64_simd_clone_compute_vecsize_and_simdlen): Remove unused var.
  
! 2021-03-16  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	PR target/98092
! 	* config/rs6000/predicates.md (branch_comparison_operator): Allow
! 	ordered and unordered for CCFPmode, if flag_finite_math_only.
  
! 2021-03-16  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99600
! 	* config/i386/i386-expand.c (ix86_split_lea_for_addr): Emit a MULT
! 	rather than ASHIFT.
! 	* config/i386/i386.md (mult by 1248 into ashift): New splitter.
  
! 2021-03-16  Martin Liska  <mliska@suse.cz>
  
! 	PR target/99592
! 	* optc-save-gen.awk: Add flag_ipa_ra to exceptions for
! 	cl_optimization_compare function.
  
! 2021-03-16  Ilya Leoshkevich  <iii@linux.ibm.com>
  
! 	* config/s390/s390.c (f_constraint_p): Treat "fv" constraints
! 	as "v".
  
! 2021-03-16  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99563
! 	* config/i386/i386.h (struct machine_function): Add
! 	has_explicit_vzeroupper bitfield.
! 	* config/i386/i386-expand.c (ix86_expand_builtin): Set
! 	cfun->machine->has_explicit_vzeroupper when expanding
! 	IX86_BUILTIN_VZEROUPPER.
! 	* config/i386/i386-features.c (rest_of_handle_insert_vzeroupper):
! 	Do the mode switching only when TARGET_VZEROUPPER, expensive
! 	optimizations turned on and not optimizing for size.
! 	(pass_insert_vzeroupper::gate): Enable even when
! 	cfun->machine->has_explicit_vzeroupper is set.
  
! 2021-03-16  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99542
! 	* config/aarch64/aarch64.c
! 	(aarch64_simd_clone_compute_vecsize_and_simdlen): If not a function
! 	definition, walk TYPE_ARG_TYPES list if non-NULL for argument types
! 	instead of DECL_ARGUMENTS.  Ignore types for uniform arguments.
  
! 2021-03-15  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98834
! 	* tree-ssa-sccvn.c (vn_reference_lookup_3): Handle missing
! 	subsetting by truncating the access size.
  
! 2021-03-15  Jan Hubicka  <hubicka@ucw.cz>
  
! 	* config/i386/i386-options.c (processor_cost_table): Add znver3_cost.
! 	* config/i386/x86-tune-costs.h (znver3_cost): New gobal variable; copy
! 	of znver2_cost.
  
! 2021-03-15  Martin Liska  <mliska@suse.cz>
  
! 	* spellcheck.c: Add missing comma in initialization.
  
! 2021-03-14  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	* config/i386/sse.md (*vec_extract<mode>): Merge alternative 0 with
! 	alternative 2 and alternative 1 with alternative 3 using
! 	YW register constraint.
! 	(*vec_extract<PEXTR_MODE12:mode>_zext): Merge alternatives
! 	using YW register constraint.
! 	(*vec_extractv16qi_zext): Ditto.
! 	(*vec_extractv4si): Merge alternatives 4 and 5
! 	using Yw register constraint.
! 	(*ssse3_palignr<mode>_perm): Use Yw instead of v for alternative 3.
  
! 2021-03-13  Martin Sebor  <msebor@redhat.com>
  
! 	PR tree-optimization/99489
! 	* builtins.c (gimple_call_alloc_size): Fail gracefully when argument
! 	is not a call statement.
  
! 2021-03-13  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/99544
! 	* match.pd (X + (X << C) -> X * (1 + (1 << C))): Don't simplify
! 	if for vector types multiplication can't be done in type's mode.
  
! 2021-03-12  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR target/99422
! 	* config/sparc/constraints.md (w): Rename to...
! 	(W): ... this and ditch previous implementation.
! 	* config/sparc/sparc.md (*movdi_insn_sp64): Replace W with m.
! 	(*movdf_insn_sp64): Likewise.
! 	(*mov<VM64:mode>_insn_sp64): Likewise.
! 	* config/sparc/sync.md (*atomic_compare_and_swap<mode>_1): Replace
! 	w with W.
! 	(atomic_compare_and_swap_leon3_1): Likewise.
! 	(*atomic_compare_and_swapdi_v8plus): Likewise.
! 	* config/sparc/sparc.c (memory_ok_for_ldd): Remove useless test on
! 	architecture and add missing address validity check during LRA.
  
! 2021-03-12  Tobias Burnus  <tobias@codesourcery.com>
  
! 	PR fortran/98858
! 	* gimplify.c (omp_add_variable): Handle NULL_TREE as size
! 	occuring for assumed-size arrays in use_device_{ptr,addr}.
  
! 2021-03-12  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99321
! 	* config/i386/constraints.md (YW): New internal constraint.
! 	* config/i386/sse.md (v_Yw): Add V4TI, V2TI, V1TI and TI cases.
! 	(*<sse2_avx2>_<insn><mode>3<mask_name>,
! 	*<sse2_avx2>_uavg<mode>3<mask_name>, *abs<mode>2,
! 	*<s>mul<mode>3_highpart<mask_name>): Use <v_Yw> instead of v in
! 	constraints.
! 	(<sse2_avx2>_psadbw): Use YW instead of v in constraints.
! 	(*avx2_pmaddwd, *sse2_pmaddwd, *<code>v8hi3, *<code>v16qi3,
! 	avx2_pmaddubsw256, ssse3_pmaddubsw128): Merge last two alternatives
! 	into one, use Yw instead of former x,v.
! 	(ashr<mode>3, <insn><mode>3): Use <v_Yw> instead of x in constraints of
! 	the last alternative.
! 	(<sse2_avx2>_packsswb<mask_name>, <sse2_avx2>_packssdw<mask_name>,
! 	<sse2_avx2>_packuswb<mask_name>, <sse4_1_avx2>_packusdw<mask_name>,
! 	*<ssse3_avx2>_pmulhrsw<mode>3<mask_name>, <ssse3_avx2>_palignr<mode>,
! 	<ssse3_avx2>_pshufb<mode>3<mask_name>): Merge last two alternatives
! 	into one, use <v_Yw> instead of former x,v.
! 	(avx2_interleave_highv32qi<mask_name>,
! 	vec_interleave_highv16qi<mask_name>): Use Yw instead of v in
! 	constraints.  Add && <mask_avx512bw_condition> to condition.
! 	(avx2_interleave_lowv32qi<mask_name>,
! 	vec_interleave_lowv16qi<mask_name>,
! 	avx2_interleave_highv16hi<mask_name>,
! 	vec_interleave_highv8hi<mask_name>,
! 	avx2_interleave_lowv16hi<mask_name>, vec_interleave_lowv8hi<mask_name>,
! 	avx2_pshuflw_1<mask_name>, sse2_pshuflw_1<mask_name>,
! 	avx2_pshufhw_1<mask_name>, sse2_pshufhw_1<mask_name>,
! 	avx2_<code>v16qiv16hi2<mask_name>, sse4_1_<code>v8qiv8hi2<mask_name>,
! 	*sse4_1_<code>v8qiv8hi2<mask_name>_1, <sse2_avx2>_<insn><mode>3): Use
! 	Yw instead of v in constraints.
! 	* config/i386/mmx.md (Yv_Yw): New define_mode_attr.
! 	(*mmx_<insn><mode>3, mmx_ashr<mode>3, mmx_<insn><mode>3): Use <Yv_Yw>
! 	instead of Yv in constraints.
! 	(*mmx_<insn><mode>3, *mmx_mulv4hi3, *mmx_smulv4hi3_highpart,
! 	*mmx_umulv4hi3_highpart, *mmx_pmaddwd, *mmx_<code>v4hi3,
! 	*mmx_<code>v8qi3, mmx_pack<s_trunsuffix>swb, mmx_packssdw,
! 	mmx_punpckhbw, mmx_punpcklbw, mmx_punpckhwd, mmx_punpcklwd,
! 	*mmx_uavgv8qi3, *mmx_uavgv4hi3, mmx_psadbw): Use Yw instead of Yv in
! 	constraints.
! 	(*mmx_pinsrw, *mmx_pinsrb, *mmx_pextrw, *mmx_pextrw_zext, *mmx_pextrb,
! 	*mmx_pextrb_zext): Use YW instead of Yv in constraints.
! 	(*mmx_eq<mode>3, mmx_gt<mode>3): Use x instead of Yv in constraints.
! 	(mmx_andnot<mode>3, *mmx_<code><mode>3): Split last alternative into
! 	two, one with just x, another isa avx512vl with v.
  
! 2021-03-12  Martin Liska  <mliska@suse.cz>
  
! 	* doc/invoke.texi: Add missing param documentation.
  
! 2021-03-11  David Malcolm  <dmalcolm@redhat.com>
  
! 	PR analyzer/96374
! 	* Makefile.in (ANALYZER_OBJS): Add analyzer/feasible-graph.o and
! 	analyzer/trimmed-graph.o.
! 	* doc/analyzer.texi (Analyzer Paths): Rewrite description of
! 	feasibility checking to reflect new implementation.
! 	* doc/invoke.texi (-fdump-analyzer-feasibility): Document new
  	option.
! 	* shortest-paths.h (shortest_paths::get_shortest_distance): New.
! 
! 2021-03-11  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* digraph.cc (selftest::test_shortest_paths): Update
! 	shortest_paths init for new param.  Add test of
! 	SPS_TO_GIVEN_TARGET.
! 	* shortest-paths.h (enum shortest_path_sense): New.
! 	(shortest_paths::shortest_paths): Add "sense" param.
! 	Update for renamings.  Generalize to use "sense" param.
! 	(shortest_paths::get_shortest_path): Rename param.
! 	(shortest_paths::m_sense): New field.
! 	(shortest_paths::m_prev): Rename...
! 	(shortest_paths::m_best_edge): ...to this.
! 	(shortest_paths::get_shortest_path): Update for renamings.
! 	Conditionalize flipping of path on sense of traversal.
! 
! 2021-03-11  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* digraph.cc (selftest::test_shortest_paths): Add test coverage
! 	for paths from B and C.
! 	* shortest-paths.h (shortest_paths::shortest_paths): Handle
! 	unreachable nodes, rather than asserting.
! 
! 2021-03-11  David Edelsohn  <dje.gcc@gmail.com>
! 
! 	PR target/99094
! 	* config/rs6000/rs6000.c (rs6000_xcoff_file_start): Don't create
! 	xcoff_tbss_section_name.
! 	* config/rs6000/xcoff.h (ASM_OUTPUT_TLS_COMMON): Use .lcomm.
! 	* xcoffout.c (xcoff_tbss_section_name): Delete.
! 	* xcoffout.h (xcoff_tbss_section_name): Delete.
! 
! 2021-03-11  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/99523
! 	* tree-cfg.c (dump_function_to_file): Dump SSA names
! 	w/o identifier to the decls section as well, not only those
! 	without a VAR_DECL.
! 
! 2021-03-11  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR ipa/99517
! 	* ipa-icf-gimple.c (func_checker::compare_gimple_call): For internal
! 	function calls with lhs fail if the lhs don't have compatible types.
! 
! 2021-03-11  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	* config/cris/cris.h (HARD_FRAME_POINTER_REGNUM): Define.
! 	Change FRAME_POINTER_REGNUM to correspond to a new faked
! 	register faked_fp, part of GENNONACR_REGS like faked_ap.
! 	(CRIS_FAKED_REGS_CONTENTS): New helper macro.
! 	(FIRST_PSEUDO_REGISTER, FIXED_REGISTERS, CALL_USED_REGISTERS):
! 	(REG_ALLOC_ORDER, REG_CLASS_CONTENTS, REGNO_OK_FOR_BASE_P)
! 	(ELIMINABLE_REGS, REGISTER_NAMES): Adjust accordingly.
! 	* config/cris/cris.md (CRIS_FP_REGNUM): Renumber to new faked
! 	register.
! 	(CRIS_REAL_FP_REGNUM): New constant.
! 	* config/cris/cris.c (cris_reg_saved_in_regsave_area): Check
! 	for HARD_FRAME_POINTER_REGNUM instead of FRAME_POINTER_REGNUM.
! 	(cris_initial_elimination_offset): Handle elimination changes
! 	to HARD_FRAME_POINTER_REGNUM instead of FRAME_POINTER_REGNUM
! 	and add one from FRAME_POINTER_REGNUM to
! 	HARD_FRAME_POINTER_REGNUM.
! 	(cris_expand_prologue, cris_expand_epilogue): Emit code for
! 	hard_frame_pointer_rtx instead of frame_pointer_rtx.
! 
! 2021-03-10  David Edelsohn  <dje.gcc@gmail.com>
! 
! 	PR target/99492
! 	* config/rs6000/aix.h (ADJUST_FIELD_ALIGN): Add check for DCmode.
! 	* config/rs6000/rs6000.c (rs6000_special_round_type_align): Same.
! 
! 2021-03-10  Vladimir N. Makarov  <vmakarov@redhat.com>
! 
! 	PR target/99422
! 	* lra-constraints.c (process_address_1): Don't check unknown
! 	constraint, use X for empty constraint.
! 
! 2021-03-10  Alex Coplan  <alex.coplan@arm.com>
! 
! 	* config/aarch64/aarch64.c (aarch64_vfp_is_call_or_return_candidate):
! 	Fix typo in comment describing "is_ha" argument.
! 
! 2021-03-10  John David Anglin  <danglin@gcc.gnu.org>
! 
! 	* doc/sourcebuild.texi: Document LRA target selector.
! 
! 2021-03-10  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* doc/ux.texi: Add subsection contrasting interactive versus
! 	batch usage of GCC.
! 
! 2021-03-10  Joel Hutton  <joel.hutton@arm.com>
! 
! 	PR target/99102
! 	* tree-vect-stmts.c (vectorizable_store): Fix scatter store mask
! 	check condition.
! 	(vectorizable_load): Fix gather load mask check condition.
! 
! 2021-03-10  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/99510
! 	* tree.c (check_aligned_type): Check that the candidate
! 	has TYPE_USER_ALIGN set instead of matching with the
! 	original type.
! 
! 2021-03-10  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	* config/sparc/sparc.c (sparc_regmode_natural_size): Return 4 for
! 	float and vector integer modes only if the mode is not larger.
! 
! 2021-03-10  Hans-Peter Nilsson  <hp@axis.com>
! 
! 	* config/cris/cris.h (DWARF_FRAME_REGISTERS): Define.
! 
! 2021-03-09  Vladimir N. Makarov  <vmakarov@redhat.com>
! 
! 	* ira.c (ira_setup_alts, ira_get_dup_out_num): Process digital
! 	constraints > 9.
! 	* ira-lives.c (single_reg_class): Ditto.
  
! 2021-03-09  Sebastian Huber  <sebastian.huber@embedded-brains.de>
  
! 	* config.gcc (aarch64-*-rtems*): Include general rtems.h after
! 	the architecture-specific rtems.h.
! 	(aarch64-*-rtems*): Likewise.
! 	(arm*-*-rtems*): Likewise.
! 	(epiphany-*-rtems*): Likewise.
! 	(riscv*-*-rtems*): Likewise.
  
! 2021-03-09  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/99305
! 	* tree-ssa-phiopt.c (conditional_replacement): Test integer_pow2p
! 	before integer_all_onesp instead of vice versa.
  
! 2021-03-09  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* common/config/arm/arm-common.c (arm_config_default): Change type
! 	of 'i' to unsigned.
  
! 2021-03-09  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR target/99454
! 	* lra-constraints.c (process_address_1): Process constraint 'g'
! 	separately and digital constraints containing more one digit.
  
! 2021-03-09  Nick Clifton  <nickc@redhat.com>
  
! 	* config/rx/rx.h (DBX_DEBUGGING_INFO): Define.
! 	(DWARF"_DEBUGGING_INFO): Define.
  
! 2021-03-09  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR c++/90448
! 	* calls.c (initialize_argument_information): When the argument
! 	is passed by reference, do not make a copy in a thunk only if
! 	the argument is already in memory.  Remove redundant test for
! 	the case of callee copy.
  
! 2021-03-09  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR target/99454
! 	* lra-constraints.c (process_address_1): Process 0..9 constraints
! 	in process_address_1.
  
! 2021-03-09  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	* config/s390/s390.c (struct s390_processor processor_table):
! 	Binutils name string must not be empty.
  
! 2021-03-09  Claudiu Zissulescu  <claziss@synopsys.com>
  
! 	* config/arc/arc.c (arc_attr_type): Remove function.
  
! 2021-03-09  Martin Liska  <mliska@suse.cz>
  
! 	PR target/99464
! 	* config/i386/i386-options.c (ix86_option_override_internal):
! 	Set isa_flags for OPTS argument and not for the global
! 	global_options.
  
! 2021-03-09  Aaron Sawdey  <acsawdey@linux.ibm.com>
  
! 	* config/rs6000/predicates.md (ds_form_mem_operand): Check
! 	in correct code.
  
! 2021-03-09  Aaron Sawdey  <acsawdey@linux.ibm.com>
  
! 	PR target/99070
! 	* config/rs6000/predicates.md (ds_form_mem_operand) New
! 	predicate.
! 	* config/rs6000/genfusion.pl (gen_ld_cmpi_p10) Use
! 	ds_form_mem_operand in ld/lwa patterns.
! 	* config/rs6000/fusion.md: Regenerate file.
  
! 2021-03-08  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/98266
! 	* gimple-array-bounds.cc (inbounds_vbase_memaccess_p): New function.
! 	(array_bounds_checker::check_array_bounds): Call it.
  
! 2021-03-08  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/97631
! 	* tree-ssa-strlen.c (maybe_warn_overflow): Test rawmem.
! 	(handle_builtin_stxncpy_strncat): Rename locals.  Determine
! 	destination size from allocation calls.  Issue a more appropriate
! 	kind of warning.
! 	(handle_builtin_memcpy): Pass true as rawmem to maybe_warn_overflow.
! 	(handle_builtin_memset): Same.
  
! 2021-03-08  Peter Bergner  <bergner@linux.ibm.com>
  
! 	PR target/98959
! 	* config/rs6000/rs6000.c (rs6000_emit_le_vsx_permute): Add an assert
! 	to ensure we do not have an Altivec style address.
! 	* config/rs6000/vsx.md (*vsx_le_perm_load_<mode>): Disable if passed
! 	an Altivec style address.
! 	(*vsx_le_perm_store_<mode>): Likewise.
! 	(splitters after *vsx_le_perm_store_<mode>): Likewise.
! 	(vsx_load_<mode>): Disable special expander if passed an Altivec
! 	style address.
! 	(vsx_store_<mode>): Likewise.
  
! 2021-03-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	PR target/99437
! 	* config/aarch64/predicates.md (aarch64_simd_shift_imm_vec_qi): Define.
! 	(aarch64_simd_shift_imm_vec_hi): Likewise.
! 	(aarch64_simd_shift_imm_vec_si): Likewise.
! 	(aarch64_simd_shift_imm_vec_di): Likewise.
! 	* config/aarch64/aarch64-simd.md (aarch64_shrn<mode>_insn_le): Use
! 	predicate from above.
! 	(aarch64_shrn<mode>_insn_be): Likewise.
! 	(aarch64_rshrn<mode>_insn_le): Likewise.
! 	(aarch64_rshrn<mode>_insn_be): Likewise.
! 	(aarch64_shrn2<mode>_insn_le): Likewise.
! 	(aarch64_shrn2<mode>_insn_be): Likewise.
! 	(aarch64_rshrn2<mode>_insn_le): Likewise.
! 	(aarch64_rshrn2<mode>_insn_be): Likewise.
  
! 2021-03-08  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR target/99422
! 	* lra-constraints.c (skip_contraint_modifiers): New function.
! 	(process_address_1): Use it before lookup_constraint call.
  
! 2021-03-08  Martin Liska  <mliska@suse.cz>
  
! 	PR target/99463
! 	* config/i386/i386-options.c (ix86_option_override_internal):
! 	Enable UINTR and HRESET for -march that supports it.
  
! 2021-03-08  Ilya Leoshkevich  <iii@linux.ibm.com>
  
! 	* config/s390/s390.c (f_constraint_p): New function.
! 	(s390_md_asm_adjust): Implement TARGET_MD_ASM_ADJUST.
! 	(TARGET_MD_ASM_ADJUST): Likewise.
  
! 2021-03-08  Tobias Burnus  <tobias@codesourcery.com>
  
! 	PR fortran/97927
! 	* tree-nested.c (convert_local_reference_stmt): Avoid calling
! 	lookup_field_for_decl for Fortran module (= namespace context).
  
! 2021-03-08  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	* config/s390/s390.c (s390_expand_vec_compare): Implement <0
! 	comparison with arithmetic right shift.
! 	(s390_expand_vcond): No need for a force_reg anymore.
! 	s390_vec_compare will do it.
! 	* config/s390/vector.md ("vec_cmp<mode><tointvec>"): Accept also
! 	immediate operands.
  
! 2021-03-07  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99321
! 	* config/i386/constraints.md (Yw): Use SSE_REGS if TARGET_SSE
! 	but TARGET_AVX512BW or TARGET_AVX512VL is not set.  Adjust description
! 	and comment.
! 	* config/i386/sse.md (v_Yw): New define_mode_attr.
! 	(*<insn><mode>3, *mul<mode>3<mask_name>, *avx2_<code><mode>3,
! 	*sse4_1_<code><mode>3<mask_name>): Use <v_Yw> instead of v
! 	in constraints.
! 	* config/i386/mmx.md (mmx_pshufw_1, *vec_dupv4hi): Use Yw instead of
! 	xYw in constraints.
  
! 2021-03-06  Julian Brown  <julian@codesourcery.com>
  
! 	* tree-pretty-print.c (dump_generic_node): Emit non-generic
! 	address space info for aggregates.
  
! 2021-03-06  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/cris.h (MAX_FIXED_MODE_SIZE): Don't define.
  
! 2021-03-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/99322
! 	* tree-cfg.c (bb_to_omp_idx): New variable.
! 	(execute_build_cfg): Release the bb_to_omp_idx vector after
! 	cleanup_tree_cfg returns.
! 	(handle_abnormal_edges): Remove bb_to_omp_idx argument, adjust
! 	for bb_to_omp_idx being a vec<int> instead of pointer to array
! 	of ints.
! 	(make_edges): Remove bb_to_omp_idx local variable, don't pass
! 	it to handle_abnormal_edges, adjust for bb_to_omp_idx being a
! 	vec<int> instead of pointer to array of ints and don't free/release
! 	it at the end.
! 	(remove_bb): When removing a bb and placing forced label somewhere
! 	else, ensure it is put into the same OpenMP region during cfg
! 	pass if possible or to entry successor as fallback.  Unregister
! 	bb from bb_to_omp_idx.
  
! 2021-03-05  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR target/99378
! 	* lra-constraints.c (process_address_1): Skip decomposing address
! 	for asm insn operand with unknown constraint.
  
! 2021-03-05  Martin Jambor  <mjambor@suse.cz>
  
! 	PR ipa/98078
! 	* cgraph.c (cgraph_edge::set_call_stmt): Do not update all
! 	corresponding speculative edges if we are about to resolve
! 	sepculation.  Make edge direct (and so resolve speculations) before
! 	removing it from call_site_hash.
! 	(cgraph_edge::make_direct): Relax the initial assert to allow calling
! 	the function on speculative direct edges.
  
! 2021-03-05  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR rtl-optimization/99376
! 	* rtlanal.c (nonzero_bits1) <arithmetic operators>: If the number
! 	of low-order zero bits is too large, set the result to 0 directly.
  
! 2021-03-04  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/93235
! 	* expmed.c (store_bit_field_using_insv): Return false of xop0 is a
! 	SUBREG and a SUBREG to op_mode can't be created.
  
! 2021-03-04  Alex Coplan  <alex.coplan@arm.com>
  
! 	PR target/99381
! 	* config/aarch64/aarch64-sve-builtins.cc
! 	(function_resolver::require_vector_type): Handle error_mark_node.
  
! 2021-03-04  Ilya Leoshkevich  <iii@linux.ibm.com>
  
! 	* cfgexpand.c (expand_asm_loc): Pass new parameter.
! 	(expand_asm_stmt): Likewise.
! 	* config/arm/aarch-common-protos.h (arm_md_asm_adjust): Add new
! 	parameter.
! 	* config/arm/aarch-common.c (arm_md_asm_adjust): Likewise.
! 	* config/arm/arm.c (thumb1_md_asm_adjust): Likewise.
! 	* config/cris/cris.c (cris_md_asm_adjust): Likewise.
! 	* config/i386/i386.c (ix86_md_asm_adjust): Likewise.
! 	* config/mn10300/mn10300.c (mn10300_md_asm_adjust): Likewise.
! 	* config/nds32/nds32.c (nds32_md_asm_adjust): Likewise.
! 	* config/pdp11/pdp11.c (pdp11_md_asm_adjust): Likewise.
! 	* config/rs6000/rs6000.c (rs6000_md_asm_adjust): Likewise.
! 	* config/vax/vax.c (vax_md_asm_adjust): Likewise.
! 	* config/visium/visium.c (visium_md_asm_adjust): Likewise.
! 	* doc/tm.texi (md_asm_adjust): Likewise.
! 	* target.def (md_asm_adjust): Likewise.
  
! 2021-03-04  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/97855
! 	* tree-pretty-print.c: Poison pp_printf.
! 	(dump_decl_name): Avoid use of pp_printf.
! 	(dump_block_node): Likewise.
! 	(dump_generic_node): Likewise.
  
! 2021-03-04  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/96963
! 	PR middle-end/94655
! 	* builtins.c (handle_array_ref): New helper.
! 	(handle_mem_ref): New helper.
! 	(compute_objsize_r): Factor out ARRAY_REF and MEM_REF handling
! 	into new helper functions.  Correct a workaround for vectorized
! 	assignments.
  
! 2021-03-03  Pat Haugen  <pthaugen@linux.ibm.com>
  
! 	* config/rs6000/dfp.md (extendddtd2, trunctddd2, *cmp<mode>_internal1,
! 	floatditd2, ftrunc<mode>2, fix<mode>di2, dfp_ddedpd_<mode>,
! 	dfp_denbcd_<mode>, dfp_dxex_<mode>, dfp_diex_<mode>,
! 	*dfp_sgnfcnc_<mode>, dfp_dscli_<mode>, dfp_dscri_<mode>): Update size
! 	attribute for Power10.
! 	* config/rs6000/mma.md (*movoo): Likewise.
! 	* config/rs6000/rs6000.md (define_attr "size"): Add 256.
! 	(define_mode_attr bits): Add DD/TD modes.
! 	* config/rs6000/sync.md (load_quadpti, store_quadpti, load_lockedpti,
! 	store_conditionalpti): Update size attribute for Power10.
  
! 2021-03-03  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
  
! 	PR bootstrap/92002
! 	* config/sparc/t-sparc (tree-ssanames.o-warn): Don't error for
! 	-Wuninitialized, -Wmaybe-uninitialized.
! 	(wide-int.o-warn): Likewise.
  
! 2021-03-03  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* common/config/arm/arm-common.c: Include configargs.h.
! 	(arm_config_default): New function.
! 	(arm_target_mode): Renamed from arm_target_thumb_only.  Handle
! 	processors that do not support Thumb.  Take into account the
! 	--with-mode configuration setting for selecting the default.
! 	* config/arm/arm.h (OPTION_DEFAULT_SPECS): Remove entry for 'mode'.
! 	(TARGET_MODE_SPEC_FUNCTIONS): Update for function name change.
  
! 2021-03-03  Martin Liska  <mliska@suse.cz>
  
! 	PR gcov-profile/97461
! 	* gcov-io.h (GCOV_PREALLOCATED_KVP): Remove.
  
! 2021-03-03  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR target/99234
! 	* config/i386/i386.c (ix86_compute_frame_layout): For a SEH target,
! 	point back the hard frame pointer to its default location when the
! 	frame is larger than SEH_MAX_FRAME_SIZE.
  
! 2021-03-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99321
! 	* config/i386/predicates.md (logic_operator): New define_predicate.
! 	* config/i386/i386.md (mov + mem using comm arith peephole2):
! 	Punt if operands[1] is EXT_REX_SSE_REGNO_P, AVX512BW is not enabled
! 	and the inner mode is [QH]Imode.
  
! 2021-03-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/99090
! 	* dwarf2out.c (dw_loc_list_struct): Add end_entry member.
! 	(new_loc_list): Clear end_entry.
! 	(output_loc_list): Only use DW_LLE_startx_length for -gsplit-dwarf
! 	if HAVE_AS_LEB128, otherwise use DW_LLE_startx_endx.  Fix comment
! 	typo.
! 	(index_location_lists): For dwarf_version >= 5 without HAVE_AS_LEB128,
! 	initialize also end_entry.
  
! 2021-03-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99085
! 	* cfgrtl.c (fixup_partitions): When changing some bbs from hot to cold
! 	partitions, if in non-layout mode after reorder_blocks also move
! 	affected blocks to ensure a single partition transition.
  
! 2021-03-03  Jason Merrill  <jason@redhat.com>
  
! 	PR c++/96078
! 	* cgraphunit.c (process_function_and_variable_attributes): Don't
! 	warn about flatten on an alias if the target also has it.
! 	* cgraph.h (symtab_node::get_alias_target_tree): New.
  
! 2021-03-02  David Edelsohn  <dje.gcc@gmail.com>
  
! 	* config/rs6000/rs6000.md (tls_get_tpointer_internal): Prepend
! 	period to symbol name.
! 	(tls_get_addr_internal<mode>): Same.
  
! 2021-03-02  David Malcolm  <dmalcolm@redhat.com>
  
! 	PR c/99323
! 	* diagnostic-show-locus.c
! 	(selftest::test_one_liner_many_fixits_2): Fix accidental usage of
! 	column 0.
  
! 2021-03-02  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/99276
! 	* builtins.c (warn_for_access): Remove stray warning text.
  
! 2021-03-02  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/99295
! 	* doc/extend.texi (attribute malloc): Reword and clarify nonaliasing
! 	property.
  
! 2021-03-02  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/99319
! 	* dwarf2out.c (output_macinfo_op): Use DW_MACRO_*_str* even with
! 	-gdwarf-5 -gstrict-dwarf.  For -gsplit-dwarf -gdwarf-5 use
! 	DW_MACRO_*_strx instead of DW_MACRO_*_strp.  Handle
! 	DW_MACRO_define_strx and DW_MACRO_undef_strx.
! 	(save_macinfo_strings): Use DW_MACRO_*_str* even with
! 	-gdwarf-5 -gstrict-dwarf.  Handle DW_MACRO_define_strx and
! 	DW_MACRO_undef_strx.
  
! 2021-03-02  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	* config/s390/s390-builtin-types.def (BT_FN_V4SF_V8HI_UINT): New
! 	builtin signature.
! 	(BT_FN_V8HI_V8HI_UINT): Likewise.
! 	(BT_FN_V8HI_V4SF_V4SF_UINT): Likewise.
! 	* config/s390/s390-builtins.def (B_NNPA): New macro definition.
! 	(s390_vclfnhs, s390_vclfnls, s390_vcrnfs, s390_vcfn, s390_vcnf):
! 	New builtin definitions.
! 	* config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Bump
! 	vector extension version.
! 	* config/s390/s390.c (s390_expand_builtin): Check if builtins are
! 	available with current -march level.
! 	* config/s390/s390.md (UNSPEC_NNPA_VCLFNHS_V8HI)
! 	(UNSPEC_NNPA_VCLFNLS_V8HI, UNSPEC_NNPA_VCRNFS_V8HI)
! 	(UNSPEC_NNPA_VCFN_V8HI, UNSPEC_NNPA_VCNF_V8HI): New constants.
! 	* config/s390/vecintrin.h (vec_extend_to_fp32_hi): New macro.
! 	(vec_extend_to_fp32_lo): Likewise.
! 	(vec_round_from_fp32): Likewise.
! 	(vec_convert_to_fp16): Likewise.
! 	(vec_convert_from_fp16): Likewise.
! 	* config/s390/vx-builtins.md (vclfnhs_v8hi): New insn pattern.
! 	(vclfnls_v8hi): Likewise.
! 	(vcrnfs_v8hi): Likewise.
! 	(vcfn_v8hi): Likewise.
! 	(vcnf_v8hi): Likewise.
  
! 2021-03-02  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	* common/config/s390/s390-common.c (processor_flags_table): New entry.
! 	* config.gcc: Enable arch14 for --with-arch and --with-tune.
! 	* config/s390/driver-native.c (s390_host_detect_local_cpu): Pick
! 	arch14 for unknown CPU models.
! 	* config/s390/s390-opts.h (enum processor_type): Add PROCESSOR_ARCH14.
! 	* config/s390/s390.c (s390_issue_rate): Add case for PROCESSOR_ARCH14.
! 	(s390_get_sched_attrmask): Likewise.
! 	(s390_get_unit_mask): Likewise.
! 	* config/s390/s390.h (enum processor_flags): Add PF_NNPA and PF_ARCH14.
! 	(TARGET_CPU_ARCH14, TARGET_CPU_ARCH14_P, TARGET_CPU_NNPA)
! 	(TARGET_CPU_NNPA_P, TARGET_ARCH14, TARGET_ARCH14_P, TARGET_NNPA)
! 	(TARGET_NNPA_P): New macro definitions.
! 	* config/s390/s390.md ("cpu_facility", "enabled"): Add arch14 and nnpa.
! 	* config/s390/s390.opt: Add PROCESSOR_ARCH14.
  
! 2021-03-02  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/95757
! 	* tree-vrp.c (register_edge_assert_for): Remove superfluous ()s around
! 	condition.  Call register_edge_assert_for_1 for == 0, != 0, == 1 and
! 	!= 1 comparisons if name is lhs of a comparison.
  
! 2021-03-01  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	PR target/44107
! 	PR target/48097
! 	* config/darwin-protos.h (darwin_should_restore_cfa_state): New.
! 	* config/darwin.c (darwin_should_restore_cfa_state): New.
! 	* config/darwin.h (TARGET_ASM_SHOULD_RESTORE_CFA_STATE): New.
! 	* doc/tm.texi: Regenerated.
! 	* doc/tm.texi.in: Document TARGET_ASM_SHOULD_RESTORE_CFA_STATE.
! 	* dwarf2cfi.c (connect_traces): If the target requests, restore
! 	the CFA expression after a DW_CFA_restore.
! 	* target.def (TARGET_ASM_SHOULD_RESTORE_CFA_STATE): New hook.
  
! 2021-03-01  Martin Liska  <mliska@suse.cz>
  
! 	PR target/99313
! 	* optc-save-gen.awk: Add 4 more exceptions.
  
! 2021-03-01  Nathan Sidwell  <nathan@acm.org>
  
! 	PR c++/99294
! 	* tree.h (TYPE_ALIGN_RAW): New accessor.
! 	(TYPE_ALIGN): Use it.
  
! 2021-03-01  Jan Hubicka  <jh@suse.cz>
  
! 	PR ipa/98338
! 	* ipa-fnsummary.c (compute_fn_summary): Fix sanity check.
  
! 2021-03-01  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR target/99234
! 	* config/i386/i386.c (ix86_compute_frame_layout): For a SEH target,
! 	point the hard frame pointer to the SSE register save area instead
! 	of the general register save area.  Perform only minimal adjustment
! 	for small frames if it is initially not correctly aligned.
! 	(ix86_expand_prologue): Remove early saves for a SEH target.
! 	* config/i386/winnt.c (struct seh_frame_state): Document constraint.
  
! 2021-02-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c/99304
! 	* ipa.c (symbol_table::remove_unreachable_nodes): Fix a comment
! 	typo - referneced -> referenced.
! 	* tree.c (component_ref_size): Fix comment typo -
! 	refernce -> reference.
! 	* tree-ssa-alias.c (access_path_may_continue_p): Fix comment typo -
! 	traling -> trailing.
! 	(aliasing_component_refs_p): Fix comment typos -
! 	refernce -> reference and refernece -> reference and
! 	traling -> trailing.
! 	(nonoverlapping_refs_since_match_p): Fix comment typo -
! 	referneces -> references.
! 	* doc/invoke.texi (--param modref-max-bases): Fix a typo -
! 	referneces -> references.
  
! 2021-02-27  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config/host-darwin.c (darwin_gt_pch_use_address): Modify
! 	diagnostic message to avoid use of a contraction and format
! 	warning.
  
! 2021-02-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR other/99288
! 	* gcse.c (gcse_or_cprop_is_too_expensive): Use %wu instead of
! 	HOST_WIDE_INT_PRINT_UNSIGNED in warning format string.
! 	* ipa-devirt.c (ipa_odr_read_section): Use %wd instead of
! 	HOST_WIDE_INT_PRINT_DEC in inform format string.  Fix comment
! 	typos.
  
! 2021-02-26  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/99281
! 	* expr.c (store_field): For calls with return-slot optimization
! 	and addressable return type expand the store directly.
  
! 2021-02-26  Richard Biener  <rguenther@suse.de>
  
! 	PR c/99275
! 	* builtins.c (warn_string_no_nul): Fix diagnostic formatting.
  
! 2021-02-26  Peter Bergner  <bergner@linux.ibm.com>
  
! 	PR target/99279
! 	* config/rs6000/rs6000-call.c (rs6000_init_builtins): Replace assert
! 	with an "if" test.
  
! 2021-02-26  Aaron Sawdey  <acsawdey@linux.ibm.com>
  
! 	* config.gcc: Add rs6000-pcrel-opt.o.
! 	* config/rs6000/rs6000-pcrel-opt.c: New file.
! 	* config/rs6000/pcrel-opt.md: New file.
! 	* config/rs6000/predicates.md: Add d_form_memory predicate.
! 	* config/rs6000/rs6000-cpus.def: Add OPTION_MASK_PCREL_OPT.
! 	* config/rs6000/rs6000-passes.def: Add pass_pcrel_opt.
! 	* config/rs6000/rs6000-protos.h: Add reg_to_non_prefixed(),
! 	pcrel_opt_valid_mem_p(), output_pcrel_opt_reloc(),
! 	and make_pass_pcrel_opt().
! 	* config/rs6000/rs6000.c (reg_to_non_prefixed): Make global.
! 	(rs6000_option_override_internal): Add pcrel-opt.
! 	(rs6000_delegitimize_address): Support pcrel-opt.
! 	(rs6000_opt_masks): Add pcrel-opt.
! 	(pcrel_opt_valid_mem_p): New function.
! 	(reg_to_non_prefixed): Make global.
! 	(rs6000_asm_output_opcode): Reset prepend_p_to_next_insn.
! 	(output_pcrel_opt_reloc): New function.
! 	* config/rs6000/rs6000.md (loads_extern_addr): New attr.
! 	(pcrel_extern_addr): Set loads_extern_addr.
! 	Add include for pcrel-opt.md.
! 	* config/rs6000/rs6000.opt: Add -mpcrel-opt.
! 	* config/rs6000/t-rs6000: Add rules for pcrel-opt.c and
! 	pcrel-opt.md.
  
! 2021-02-26  YunQiang Su  <yunqiang.su@cipunited.com>
  
! 	PR target/98996
! 	* config/mips/mips.c (mips_expand_ext_as_unaligned_load):
! 	If TARGET_64BIT and dest is SUBREG, we check the width, if it
! 	equal to SImode, we use SImode operation, just like what we are
! 	doing for REG one.
  
! 2021-02-26  Marek Polacek  <polacek@redhat.com>
  
! 	* builtins.c (warn_for_access): Fix typos.
  
! 2021-02-25  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config/aarch64/aarch64.md (<optab>_rol<mode>3): Add a '#'
! 	mark in front of the immediate quantity.
! 	(<optab>_rolsi3_uxtw): Likewise.
  
! 2021-02-25  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/99271
! 	* config/arm/thumb2.md (nonsecure_call_reg_thumb2_fpcxt): New pattern.
! 	(nonsecure_call_value_reg_thumb2_fpcxt): Likewise.
! 	(nonsecure_call_reg_thumb2): Restrict to using r4 for the callee
! 	address and disable when the FPCXT is not available.
! 	(nonsecure_call_value_reg_thumb2): Likewise.
  
! 2021-02-25  Nathan Sidwell  <nathan@acm.org>
  
! 	PR c++/99166
! 	* doc/invoke.texi (flang-info-module-cmi): Renamed option.
  
! 2021-02-25  Tamar Christina  <tamar.christina@arm.com>
  
! 	* tree-vect-slp.c (optimize_load_redistribution_1): Abort on NULL nodes.
  
! 2021-02-25  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/99253
! 	* tree-vect-loop.c (check_reduction_path): First compute
! 	code, then verify out-of-loop uses.
  
! 2021-02-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/95798
! 	* match.pd ((T)(A) + CST -> (T)(A + CST)): Add :s to convert.
  
! 2021-02-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/80635
! 	* tree-vrp.c (vrp_simplify_cond_using_ranges): Also handle
! 	VIEW_CONVERT_EXPR if modes are the same, innerop is integral and
! 	has mode precision.
  
! 2021-02-25  Richard Biener  <rguenther@suse.de>
  
! 	* tree-vect-slp.c (optimize_load_redistribution_1): Delay
! 	load_map population.
! 	(vect_match_slp_patterns_2): Revert part of last change.
! 	(vect_analyze_slp): Do not interleave optimize_load_redistribution
! 	with pattern detection but do it afterwards.  Dump the
! 	whole SLP graph after pattern recognition and load
! 	redistribution optimization finished.
  
! 2021-02-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR fortran/99226
! 	* omp-low.c (struct omp_context): Add teams_nested_p and
! 	nonteams_nested_p members.
! 	(scan_omp_target): Diagnose teams nested inside of target with other
! 	directives strictly nested inside of the same target.
! 	(check_omp_nesting_restrictions): Set ctx->teams_nested_p or
! 	ctx->nonteams_nested_p as needed.
  
! 2021-02-24  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR inline-asm/99123
! 	* lra-constraints.c (uses_hard_regs_p): Don't use decompose_mem_address.
  
! 2021-02-24  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/cris.c (cris_expand_prologue): Set
! 	current_function_static_stack_size, if flag_stack_usage_info.
  
! 2021-02-24  Pat Haugen  <pthaugen@linux.ibm.com>
  
! 	* config/rs6000/rs6000.c (next_insn_prefixed_p): Rename.
! 	(rs6000_final_prescan_insn): Adjust.
! 	(rs6000_asm_output_opcode): Likewise.
  
! 2021-02-24  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/97172
! 	* attribs.c (attr_access::free_lang_data): Clear attribute arg spec
! 	from function arguments.
  
! 2021-02-24  Tamar Christina  <tamar.christina@arm.com>
  
! 	PR tree-optimization/99220
! 	* tree-vect-slp.c (optimize_load_redistribution_1): Remove
! 	node from cache when it's about to be deleted.
  
! 2021-02-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/99225
! 	* fold-const.c (fold_binary_loc) <case NE_EXPR>: In (x & (1 << y)) != 0
! 	to ((x >> y) & 1) != 0 simplifications use build_one_cst instead of
! 	build_int_cst (..., 1).  Formatting fixes.
  
! 2021-02-24  Tamar Christina  <tamar.christina@arm.com>
  
! 	PR tree-optimization/99149
! 	* tree-vect-slp-patterns.c (vect_detect_pair_op): Don't recreate the
! 	buffer.
! 	(vect_slp_reset_pattern): Remove.
! 	(complex_fma_pattern::matches): Remove call to vect_slp_reset_pattern.
! 	(complex_mul_pattern::build, complex_fma_pattern::build,
! 	complex_fms_pattern::build): Fix ref counts.
! 	* tree-vect-slp.c (vect_free_slp_tree): Undo SLP only pattern relevancy
! 	when node is being deleted.
! 	(vect_match_slp_patterns_2): Correct result of cache hit on patterns.
! 	(vect_schedule_slp): Invalidate SLP_TREE_REPRESENTATIVE of removed
! 	stores.
! 	* tree-vectorizer.c (vec_info::new_stmt_vec_info): Initialize value.
  
! 2021-02-24  Matthias Klose  <doko@ubuntu.com>
  
! 	Revert:
! 	2020-12-07  Matthias Klose  <doko@ubuntu.com>
  
! 	* genextract.c (print_header): Undefine ENABLE_RTL_CHECKING
! 	and ENABLE_RTL_FLAG_CHECKING.
  
! 2021-02-24  Richard Biener  <rguenther@suse.de>
  
! 	PR c/99224
! 	* builtins.c (fold_builtin_next_arg): Avoid NULL arg.
  
! 2021-02-23  Peter Bergner  <bergner@linux.ibm.com>
  
! 	* config/rs6000/mma.md (mma_assemble_pair): Rename from this...
! 	(vsx_assemble_pair): ...to this.
! 	(*mma_assemble_pair): Rename from this...
! 	(*vsx_assemble_pair): ...to this.
! 	(mma_disassemble_pair): Rename from this...
! 	(vsx_disassemble_pair): ...to this.
! 	(*mma_disassemble_pair): Rename from this...
! 	(*vsx_disassemble_pair): ...to this.
! 	* config/rs6000/rs6000-builtin.def (BU_MMA_V2, BU_MMA_V3,
! 	BU_COMPAT): New macros.
! 	(mma_assemble_pair): Rename from this...
! 	(vsx_assemble_pair): ...to this.
! 	(mma_disassemble_pair): Rename from this...
! 	(vsx_disassemble_pair): ...to this.
! 	(mma_assemble_pair): New compatibility built-in.
! 	(mma_disassemble_pair): Likewise.
! 	* config/rs6000/rs6000-call.c (struct builtin_compatibility): New.
! 	(RS6000_BUILTIN_COMPAT): Define.
! 	(bdesc_compat): New.
! 	(mma_expand_builtin): Use VSX_BUILTIN_DISASSEMBLE_PAIR_INTERNAL.
! 	(rs6000_gimple_fold_mma_builtin): Use MMA_BUILTIN_DISASSEMBLE_PAIR
! 	and VSX_BUILTIN_ASSEMBLE_PAIR.
! 	(rs6000_init_builtins): Register compatibility built-ins.
! 	(mma_init_builtins): Use VSX_BUILTIN_ASSEMBLE_PAIR,
! 	VSX_BUILTIN_ASSEMBLE_PAIR_INTERNAL, VSX_BUILTIN_DISASSEMBLE_PAIR and
! 	VSX_BUILTIN_DISASSEMBLE_PAIR_INTERNAL.
! 	* doc/extend.texi (__builtin_mma_assemble_pair): Rename from this...
! 	(__builtin_vsx_assemble_pair): ...to this.
! 	(__builtin_mma_disassemble_pair): Rename from this...
! 	(__builtin_vsx_disassemble_pair): ...to this.
  
! 2021-02-23  Martin Liska  <mliska@suse.cz>
  
! 	PR sanitizer/99168
! 	* ipa-icf.c (sem_variable::merge): Do not merge 2 variables
! 	with different alignment. That leads to an invalid red zone
! 	size allocated in runtime.
  
! 2021-02-23  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/99204
! 	* fold-const.c (fold_read_from_constant_string): Check that
! 	tree_fits_uhwi_p (index) rather than just that index is INTEGER_CST.
  
! 2021-02-23  Segher Boessenkool  <segher@kernel.crashing.org>
! 	    Kewen Lin  <linkw@gcc.gnu.org>
  
! 	* config/rs6000/rs6000.md (*rotl<mode>3_insert_3): Renamed to...
! 	(rotl<mode>3_insert_3): ...this.
! 	(plus_ior_xor): New code_iterator.
! 	(define_split for GPR rl*imi): New splitter.
! 	* config/rs6000/vsx.md (vsx_init_v4si): Use gen_rotldi3_insert_3
! 	for integer merging.
  
! 2021-02-22  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/aarch64-tuning-flags.def (cse_sve_vl_constants):
! 	Define.
! 	* config/aarch64/aarch64.md (add<mode>3): Force CONST_POLY_INT immediates
! 	into a register when the above is enabled.
! 	* config/aarch64/aarch64.c (neoversev1_tunings):
! 	AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS.
! 	(aarch64_rtx_costs): Use AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS.
  
! 2021-02-22  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/cris.c (cris_print_operand) <'T'>: Change
! 	valid operand from is now an addi mult-value to shift-value.
! 	* config/cris/cris.md (*addi): Change expression of scaled
! 	operand from mult to ashift.
! 	* config/cris/cris.md (*addi_reload): New insn_and_split.
  
! 2021-02-22  John David Anglin  <danglin@gcc.gnu.org>
  
! 	PR target/85074
! 	* config/pa/pa.c (TARGET_ASM_CAN_OUTPUT_MI_THUNK): Define as
! 	hook_bool_const_tree_hwi_hwi_const_tree_true.
! 	(pa_asm_output_mi_thunk): Add support for nonzero vcall_offset.
  
! 2021-02-22  Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	PR rtl-optimization/98791
! 	* ira-conflicts.c (process_regs_for_copy): Don't create allocno copies
! 	for unordered modes.
  
! 2021-02-22  Martin Liska  <mliska@suse.cz>
  
! 	* tree-inline.c (inline_forbidden_p): Set
! 	inline_forbidden_reason.
  
! 2021-02-22  Richard Biener  <rguenther@suse.de>
  
! 	* tree-vect-slp.c (vect_bb_vectorization_profitable_p): Dump
! 	costed subgraph.
  
! 2021-02-22  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/99165
! 	* gimple-ssa-store-merging.c (pass_store_merging::process_store):
! 	Accumulate changed to ret.
  
! 2021-02-21  Uros Bizjak  <ubizjak@gmail.com>
  
! 	Revert:
! 	2020-12-09  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	* config/i386/i386.h (REG_ALLOC_ORDER): Remove
  
! 2021-02-20  Ilya Leoshkevich  <iii@linux.ibm.com>
  
! 	PR target/99134
! 	* config/s390/vector.md (trunctf<DFP_ALL:mode>2_vr): New
! 	pattern.
! 	(trunctf<DFP_ALL:mode>2): Likewise.
! 	(trunctdtf2_vr): Likewise.
! 	(trunctdtf2): Likewise.
! 	(extend<DFP_ALL:mode>tf2_vr): Likewise.
! 	(extend<DFP_ALL:mode>tf2): Likewise.
! 	(extendtftd2_vr): Likewise.
! 	(extendtftd2): Likewise.
  
! 2021-02-20  Ilya Leoshkevich  <iii@linux.ibm.com>
  
! 	* config/s390/vector.md (*fprx2_to_tf): Rename to fprx2_to_tf,
! 	add memory alternative.
! 	(tf_to_fprx2): New pattern.
  
! 2021-02-19  Martin Sebor  <msebor@redhat.com>
  
! 	PR c/97172
! 	* attribs.c (init_attr_rdwr_indices): Guard vblist use.
! 	(attr_access::free_lang_data): Remove a spurious test.
  
! 2021-02-19  Nathan Sidwell  <nathan@acm.org>
  
! 	* doc/invoke.texi (flang-info-module-read): Document.
  
! 2021-02-19  Martin Liska  <mliska@suse.cz>
  
! 	PR translation/99167
! 	* params.opt: Fix typo.
  
! 2021-02-19  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/99122
! 	* tree-inline.c (inline_forbidden_p): Do not inline functions
! 	with VLA arguments or return value.
  
! 2021-02-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/98998
! 	* config/arm/arm.md (*stack_protect_combined_set_insn,
! 	*stack_protect_combined_test_insn): If force_const_mem result
! 	is not valid general operand, force its address into the destination
! 	register first.
  
! 2021-02-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR ipa/99034
! 	* tree-cfg.c (gimple_merge_blocks): If bb a starts with eh landing
! 	pad or non-local label, put FORCED_LABELs from bb b after that label
! 	rather than before it.
  
! 2021-02-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	PR target/98657
! 	* config/aarch64/aarch64-sve.md (<ASHIFT:optab><mode>3): Use
! 	expand_vector_broadcast' to emit the vec_duplicate operand.
  
! 2021-02-18  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR rtl-optimization/96264
! 	* lra-remat.c (reg_overlap_for_remat_p): Check also output insn
! 	hard regs.
  
! 2021-02-18  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/99113
! 	* varasm.c (get_section): Replace SUPPORTS_SHF_GNU_RETAIN with
! 	looking up the retain attribute.
! 	(resolve_unique_section): Likewise.
! 	(get_variable_section): Likewise.
! 	(switch_to_section): Likewise.  Warn when a symbol without the
! 	retain attribute and a symbol with the retain attribute are
! 	placed in the section with the same name, instead of the used
! 	attribute.
! 	* doc/extend.texi: Document the "retain" attribute.
  
! 2021-02-18  Nathan Sidwell  <nathan@acm.org>
  
! 	PR c++/99023
! 	* doc/invoke.texi (flang-info-include-translate): Document header
! 	lookup behaviour.
  
! 2021-02-18  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/99122
! 	* ipa-fnsummary.c (analyze_function_body): Set
! 	CIF_FUNCTION_NOT_INLINABLE for VLA parameter calls.
! 	* tree-inline.c (insert_init_debug_bind): Pass NULL for
! 	error_mark_node values.
! 	(force_value_to_type): Do not build V_C_Es for WITH_SIZE_EXPR
! 	values.
! 	(setup_one_parameter): Delay force_value_to_type until when
! 	it's needed.
  
! 2021-02-18  Hans-Peter Nilsson  <hp@axis.com>
  
! 	PR tree-optimization/99142
! 	* match.pd (clz cmp 0): Gate replacement on single_use of clz result.
  
! 2021-02-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	* wide-int-bitmask.h (wide_int_bitmask::wide_int_bitmask (),
! 	wide_int_bitmask::wide_int_bitmask (uint64_t),
! 	wide_int_bitmask::wide_int_bitmask (uint64_t, uint64_t),
! 	wide_int_bitmask::operator ~ () const,
! 	wide_int_bitmask::operator | (wide_int_bitmask) const,
! 	wide_int_bitmask::operator & (wide_int_bitmask) const): Use constexpr
! 	instead of inline.
! 	* config/i386/i386.h (PTA_3DNOW, PTA_3DNOW_A, PTA_64BIT, PTA_ABM,
! 	PTA_AES, PTA_AVX, PTA_BMI, PTA_CX16, PTA_F16C, PTA_FMA, PTA_FMA4,
! 	PTA_FSGSBASE, PTA_LWP, PTA_LZCNT, PTA_MMX, PTA_MOVBE, PTA_NO_SAHF,
! 	PTA_PCLMUL, PTA_POPCNT, PTA_PREFETCH_SSE, PTA_RDRND, PTA_SSE, PTA_SSE2,
! 	PTA_SSE3, PTA_SSE4_1, PTA_SSE4_2, PTA_SSE4A, PTA_SSSE3, PTA_TBM,
! 	PTA_XOP, PTA_AVX2, PTA_BMI2, PTA_RTM, PTA_HLE, PTA_PRFCHW, PTA_RDSEED,
! 	PTA_ADX, PTA_FXSR, PTA_XSAVE, PTA_XSAVEOPT, PTA_AVX512F, PTA_AVX512ER,
! 	PTA_AVX512PF, PTA_AVX512CD, PTA_NO_TUNE, PTA_SHA, PTA_PREFETCHWT1,
! 	PTA_CLFLUSHOPT, PTA_XSAVEC, PTA_XSAVES, PTA_AVX512DQ, PTA_AVX512BW,
! 	PTA_AVX512VL, PTA_AVX512IFMA, PTA_AVX512VBMI, PTA_CLWB, PTA_MWAITX,
! 	PTA_CLZERO, PTA_NO_80387, PTA_PKU, PTA_AVX5124VNNIW, PTA_AVX5124FMAPS,
! 	PTA_AVX512VPOPCNTDQ, PTA_SGX, PTA_AVX512VNNI, PTA_GFNI, PTA_VAES,
! 	PTA_AVX512VBMI2, PTA_VPCLMULQDQ, PTA_AVX512BITALG, PTA_RDPID,
! 	PTA_PCONFIG, PTA_WBNOINVD, PTA_AVX512VP2INTERSECT, PTA_PTWRITE,
! 	PTA_AVX512BF16, PTA_WAITPKG, PTA_MOVDIRI, PTA_MOVDIR64B, PTA_ENQCMD,
! 	PTA_CLDEMOTE, PTA_SERIALIZE, PTA_TSXLDTRK, PTA_AMX_TILE, PTA_AMX_INT8,
! 	PTA_AMX_BF16, PTA_UINTR, PTA_HRESET, PTA_KL, PTA_WIDEKL, PTA_AVXVNNI,
! 	PTA_X86_64_BASELINE, PTA_X86_64_V2, PTA_X86_64_V3, PTA_X86_64_V4,
! 	PTA_CORE2, PTA_NEHALEM, PTA_WESTMERE, PTA_SANDYBRIDGE, PTA_IVYBRIDGE,
! 	PTA_HASWELL, PTA_BROADWELL, PTA_SKYLAKE, PTA_SKYLAKE_AVX512,
! 	PTA_CASCADELAKE, PTA_COOPERLAKE, PTA_CANNONLAKE, PTA_ICELAKE_CLIENT,
! 	PTA_ICELAKE_SERVER, PTA_TIGERLAKE, PTA_SAPPHIRERAPIDS, PTA_ALDERLAKE,
! 	PTA_KNL, PTA_BONNELL, PTA_SILVERMONT, PTA_GOLDMONT, PTA_GOLDMONT_PLUS,
! 	PTA_TREMONT, PTA_KNM): Use constexpr instead of const.
  
! 2021-02-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/99109
! 	* gimple-array-bounds.cc (build_zero_elt_array_type): Rename to ...
! 	(build_printable_array_type): ... this.  Add nelts argument.  For
! 	overaligned eltype, use TYPE_MAIN_VARIANT (eltype) instead.  If
! 	nelts, call build_array_type_nelts.
! 	(array_bounds_checker::check_mem_ref): Use build_printable_array_type
! 	instead of build_zero_elt_array_type and build_array_type_nelts.
  
! 2021-02-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99104
! 	* config/i386/i386.c (distance_non_agu_define): Don't call
! 	extract_insn_cached here.
! 	(ix86_lea_outperforms): Save and restore recog_data around call
! 	to distance_non_agu_define and distance_agu_use.
! 	(ix86_ok_to_clobber_flags): Remove.
! 	(ix86_avoid_lea_for_add): Don't call ix86_ok_to_clobber_flags.
! 	(ix86_avoid_lea_for_addr): Likewise.  Adjust function comment.
! 	* config/i386/i386.md (*lea<mode>): Change from define_insn_and_split
! 	into define_insn.  Move the splitting to define_peephole2 and
! 	check there using peep2_regno_dead_p if FLAGS_REG is dead.
  
! 2021-02-17  Julian Brown  <julian@codesourcery.com>
  
! 	* gimplify.c (gimplify_scan_omp_clauses): Handle ATTACH_DETACH
! 	for non-decls.
  
! 2021-02-17  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	PR target/98491
! 	* config/mips/mips.c (mips_symbol_insns): Do not use
! 	MSA_SUPPORTED_MODE_P if mode is MAX_MACHINE_MODE.
  
! 2021-02-16  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR inline-asm/98096
! 	* stmt.c (resolve_operand_name_1): Take inout operands into account
! 	for access to labels by names.
! 	* doc/extend.texi: Describe counting operands for accessing labels.
  
! 2021-02-16  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/38474
! 	* tree-ssa-structalias.c (variable_info::address_taken): New.
! 	(new_var_info): Initialize address_taken.
! 	(process_constraint): Set address_taken.
! 	(solve_constraints): Use the new address_taken flag rather
! 	than is_reg_var for sorting variables.
! 	(dump_constraint): Dump the variable number if the name
! 	is just NULL.
  
! 2021-02-16  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99100
! 	* tree-vect-stmts.c (vectorizable_simd_clone_call): For num_calls != 1
! 	multiply by 4096 and for inbranch by 8192.
! 	* config/i386/i386.c (ix86_simd_clone_usable): For TARGET_AVX512F,
! 	return 3, 2 or 1 for mangle letters 'b', 'c' or 'd'.
  
! 2021-02-15  Maya Rashish  <coypu@sdf.org>
  
! 	* config/aarch64/aarch64.c (aarch64_init_builtins):
! 	Call SUBTARGET_INIT_BUILTINS.
  
! 2021-02-15  Peter Bergner  <bergner@linux.ibm.com>
  
! 	PR rtl-optimization/98872
! 	* init-regs.c (initialize_uninitialized_regs): Skip initialization
! 	if CONST0_RTX is NULL.
  
! 2021-02-15  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/98863
! 	* rtl-ssa/functions.h (function_info::bb_live_out_info): Delete.
! 	(function_info::build_info): Turn into a declaration, moving the
! 	definition to internals.h.
! 	(function_info::bb_walker): Declare.
! 	(function_info::create_reg_use): Likewise.
! 	(function_info::calculate_potential_phi_regs): Take a build_info
! 	parameter.
! 	(function_info::place_phis, function_info::create_ebbs): Declare.
! 	(function_info::calculate_ebb_live_in_for_debug): Likewise.
! 	(function_info::populate_backedge_phis): Delete.
! 	(function_info::start_block, function_info::end_block): Declare.
! 	(function_info::populate_phi_inputs): Delete.
! 	(function_info::m_potential_phi_regs): Move information to build_info.
! 	* rtl-ssa/internals.h: New file.
! 	(function_info::bb_phi_info): New class.
! 	(function_info::build_info): Moved from functions.h.
! 	Add a constructor and destructor.
! 	(function_info::build_info::ebb_use): Delete.
! 	(function_info::build_info::ebb_def): Likewise.
! 	(function_info::build_info::bb_live_out): Likewise.
! 	(function_info::build_info::tmp_ebb_live_in_for_debug): New variable.
! 	(function_info::build_info::potential_phi_regs): Likewise.
! 	(function_info::build_info::potential_phi_regs_for_debug): Likewise.
! 	(function_info::build_info::ebb_def_regs): Likewise.
! 	(function_info::build_info::bb_phis): Likewise.
! 	(function_info::build_info::bb_mem_live_out): Likewise.
! 	(function_info::build_info::bb_to_rpo): Likewise.
! 	(function_info::build_info::def_stack): Likewise.
! 	(function_info::build_info::old_def_stack_limit): Likewise.
! 	* rtl-ssa/internals.inl (function_info::build_info::record_reg_def):
! 	Remove the regno argument.  Push the previous definition onto the
! 	definition stack where necessary.
! 	* rtl-ssa/accesses.cc: Include internals.h.
! 	* rtl-ssa/changes.cc: Likewise.
! 	* rtl-ssa/blocks.cc: Likewise.
! 	(function_info::build_info::build_info): Define.
! 	(function_info::build_info::~build_info): Likewise.
! 	(function_info::bb_walker): New class.
! 	(function_info::bb_walker::bb_walker): Define.
! 	(function_info::add_live_out_use): Convert a logarithmic-complexity
! 	test into a linear one.  Allow the same definition to be passed
! 	multiple times.
! 	(function_info::calculate_potential_phi_regs): Moved from
! 	functions.cc.  Take a build_info parameter and store the
! 	information there instead.
! 	(function_info::place_phis): New function.
! 	(function_info::add_entry_block_defs): Update call to record_reg_def.
! 	(function_info::calculate_ebb_live_in_for_debug): New function.
! 	(function_info::add_phi_nodes): Use bb_phis to decide which
! 	registers need phi nodes and initialize ebb_def_regs accordingly.
! 	Do not add degenerate phis here.
! 	(function_info::add_artificial_accesses): Use create_reg_use.
! 	Assert that all definitions are listed in the DF LR sets.
! 	Update call to record_reg_def.
! 	(function_info::record_block_live_out): Record live-out register
! 	values in the phis of successor blocks.  Use the live-out set
! 	when processing the last block in an EBB, instead of always
! 	using the live-in sets of successor blocks.  AND the live sets
! 	with the set of registers that have been defined in the EBB,
! 	rather than with all potential phi registers.  Cope correctly
! 	with branches back to the start of the current EBB.
! 	(function_info::start_block): New function.
! 	(function_info::end_block): Likewise.
! 	(function_info::populate_phi_inputs): Likewise.
! 	(function_info::create_ebbs): Likewise.
! 	(function_info::process_all_blocks): Rewrite into a multi-phase
! 	process.
! 	* rtl-ssa/functions.cc: Include internals.h.
! 	(function_info::calculate_potential_phi_regs): Move to blocks.cc.
! 	(function_info::init_function_data): Remove caller.
! 	* rtl-ssa/insns.cc: Include internals.h
! 	(function_info::create_reg_use): New function.  Lazily any
! 	degenerate phis needed by the linear RPO view.
! 	(function_info::record_use): Use create_reg_use.  When processing
! 	debug uses, use potential_phi_regs and test it before checking
! 	whether the register is live on entry to the current EBB.  Lazily
! 	calculate ebb_live_in_for_debug.
! 	(function_info::record_call_clobbers): Update call to record_reg_def.
! 	(function_info::record_def): Likewise.
  
! 2021-02-15  Martin Liska  <mliska@suse.cz>
  
! 	* toplev.c (init_asm_output): Free output of
! 	gen_command_line_string function.
! 	(process_options): Likewise.
  
! 2021-02-15  Martin Liska  <mliska@suse.cz>
  
! 	* params.opt: Add 2 missing Param keywords.
  
! 2021-02-15  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* df-core.c (df_worklist_dataflow_doublequeue): Use proper cast.
  
! 2021-02-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/99079
! 	* match.pd (A % (pow2pcst << N) -> A & ((pow2pcst << N) - 1)): Remove
! 	useless tree_nop_conversion_p (type, TREE_TYPE (@3)) check.  Instead
! 	require both type and TREE_TYPE (@1) to be integral types and either
! 	type having smaller or equal precision, or TREE_TYPE (@1) being
! 	unsigned type, or type being signed type.  If TREE_TYPE (@1)
! 	doesn't have wrapping overflow, perform the subtraction of one in
! 	unsigned type.
  
! 2021-02-14  Jan Hubicka  <hubicka@ucw.cz>
! 	    Richard Biener  <rguether@suse.de>
  
! 	PR ipa/97346
! 	* ipa-reference.c (ipa_init): Only conditinally initialize
! 	reference_vars_to_consider.
! 	(propagate): Conditionally deninitialize reference_vars_to_consider.
! 	(ipa_reference_write_optimization_summary): Sanity check that
! 	reference_vars_to_consider is not allocated.
  
! 2021-02-13  Levy Hsu  <admin@levyhsu.com>
  
! 	PR target/97417
! 	* config/riscv/riscv-shorten-memrefs.c (pass_shorten_memrefs): Add
! 	extend parameter to get_si_mem_base_reg declaration.
! 	(get_si_mem_base_reg): Add extend parameter.  Set it.
! 	(analyze): Pass extend arg to get_si_mem_base_reg.
! 	(transform): Likewise.  Use it when rewriting mems.
! 	* config/riscv/riscv.c (riscv_legitimize_move): Check for subword
! 	loads and emit sign/zero extending load followed by subreg move.
  
! 2021-02-13  Jim Wilson  <jimw@sifive.com>
  
! 	PR target/97417
! 	* config/riscv/riscv.c (riscv_compressed_lw_address_p): Drop early
! 	exit when !reload_completed.  Only perform check for compressed reg
! 	if reload_completed.
! 	(riscv_rtx_costs): In MEM case, when optimizing	for size and
! 	shorten memrefs, if not compressible, then increase cost.
  
! 2021-02-13  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/98439
! 	* recog.c (pass_split_before_regstack::gate): Enable even when
! 	pass_split_before_sched2 is enabled if -fselective-scheduling2 is
! 	on.
  
! 2021-02-13  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/96166
! 	* config/i386/mmx.md (*mmx_pshufd_1): Add a combine splitter for
! 	swap of V2SImode elements in memory into DImode memory rotate by 32.
  
! 2021-02-12  Martin Sebor  <msebor@redhat.com>
  
! 	* tree-pretty-print.c (print_generic_expr_to_str): Update comment.
  
! 2021-02-12  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* rtl-ssa/accesses.cc (function_info::make_use_available): Use
! 	m_temp_obstack rather than m_obstack to allocate the temporary use.
  
! 2021-02-12  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* df-problems.c (df_lr_bb_local_compute): Treat partial definitions
! 	as read-modify operations.
  
! 2021-02-12  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/38474
! 	* ipa-fnsummary.c (unmodified_parm_1): Only walk when
! 	fbi->aa_walk_budget is bigger than zero.  Update
! 	fbi->aa_walk_budget.
! 	(param_change_prob): Likewise.
! 	* ipa-prop.c (detect_type_change_from_memory_writes):
! 	Properly account walk_aliased_vdefs.
! 	(parm_preserved_before_stmt_p): Canonicalize updates.
! 	(parm_ref_data_preserved_p): Likewise.
! 	(parm_ref_data_pass_through_p): Likewise.
! 	(determine_known_aggregate_parts): Account own alias queries.
  
! 2021-02-12  Martin Liska  <mliska@suse.cz>
  
! 	* opts-common.c (decode_cmdline_option): Release werror_arg.
! 	* opts.c (gen_producer_string): Release output of
! 	gen_command_line_string.
  
! 2021-02-12  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/38474
! 	* params.opt (-param=max-store-chains-to-track=): New param.
! 	(-param=max-stores-to-track=): Likewise.
! 	* doc/invoke.texi (max-store-chains-to-track): Document.
! 	(max-stores-to-track): Likewise.
! 	* gimple-ssa-store-merging.c (pass_store_merging::m_n_chains):
  	New.
! 	(pass_store_merging::m_n_stores): Likewise.
! 	(pass_store_merging::terminate_and_process_chain): Update
! 	m_n_stores and m_n_chains.
! 	(pass_store_merging::process_store): Likewise.   Terminate
! 	oldest chains if the number of stores or chains get too large.
! 	(imm_store_chain_info::terminate_and_process_chain): Dump
! 	chain length.
! 
! 2021-02-11  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	* config/i386/winnt.c (i386_pe_seh_unwind_emit): When switching to
! 	the cold section, emit a nop before the directive if the previous
! 	active instruction can throw.
! 
! 2021-02-11  Peter Bergner  <bergner@linux.ibm.com>
! 
! 	PR target/99041
! 	* config/rs6000/predicates.md (mma_assemble_input_operand): Restrict
! 	memory addresses that are legal for quad word accesses.
! 
! 2021-02-11  Andrea Corallo  <andrea.corallo@arm.com>
! 
! 	PR target/98931
! 	* config/arm/thumb2.md (*doloop_end_internal): Generate
! 	alternative sequence to handle long range branches.
! 
! 2021-02-11  Joel Hutton  <joel.hutton@arm.com>
! 
! 	PR tree-optimization/98772
! 	* optabs-tree.c (supportable_half_widening_operation): New function
! 	to check for supportable V8QI->V8HI widening patterns.
! 	* optabs-tree.h (supportable_half_widening_operation): New function.
! 	* tree-vect-stmts.c (vect_create_half_widening_stmts): New function
! 	to create promotion stmts for V8QI->V8HI widening patterns.
! 	(vectorizable_conversion): Add case for V8QI->V8HI.
! 
! 2021-02-11  Richard Biener  <rguenther@suse.de>
! 
! 	* sparseset.h (SPARSESET_ELT_BITS): Remove.
! 	(SPARSESET_ELT_TYPE): Use unsigned int.
! 	* fwprop.c: Do not include sparseset.h.
! 
! 2021-02-10  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR c++/99035
! 	* varasm.c (declare_weak): For -fsyntax-only, allow even
! 	TREE_ASM_WRITTEN function decls.
! 
! 2021-02-10  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/99025
! 	* config/i386/sse.md (fix<fixunssuffix>_truncv2sfv2di2,
! 	<insn>v8qiv8hi2, <insn>v8qiv8si2, <insn>v4qiv4si2, <insn>v4hiv4si2,
! 	<insn>v8qiv8di2, <insn>v4qiv4di2, <insn>v2qiv2di2, <insn>v4hiv4di2,
! 	<insn>v2hiv2di2, <insn>v2siv2di2): Force operands[1] into REG before
! 	calling simplify_gen_subreg on it.
! 
! 2021-02-10  Martin Liska  <mliska@suse.cz>
! 
! 	* config/nvptx/nvptx.c (nvptx_option_override): Use
! 	flag_patchable_function_entry instead of the removed
! 	function_entry_patch_area_size.
! 
! 2021-02-10  Martin Liska  <mliska@suse.cz>
! 
! 	PR tree-optimization/99002
! 	PR tree-optimization/99026
! 	* gimple-if-to-switch.cc (if_chain::is_beneficial): Fix memory
! 	leak when adjacent cases are merged.
! 	* tree-switch-conversion.c (switch_decision_tree::analyze_switch_statement): Use
! 	release_clusters.
! 	(make_pass_lower_switch): Remove trailing whitespace.
! 	* tree-switch-conversion.h (release_clusters): New.
! 
! 2021-02-10  Richard Biener  <rguenther@suse.de>
! 
! 	PR rtl-optimization/99054
! 	* cfgrtl.c (rtl-optimization/99054): Return an auto_vec.
! 	(fixup_partitions): Adjust.
! 	(rtl_verify_edges): Likewise.
! 
! 2021-02-10  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/99007
! 	* gimplify.c (gimplify_scan_omp_clauses): For MEM_REF on reductions,
! 	temporarily disable gimplify_ctxp->into_ssa around gimplify_expr
! 	calls.
! 
! 2021-02-10  Richard Biener  <rguenther@suse.de>
! 
! 	PR ipa/99029
! 	* ipa-pure-const.c (propagate_malloc): Use an auto_vec<>
! 	for callees.
! 
! 2021-02-10  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/99024
! 	* tree-vect-loop.c (_loop_vec_info::~_loop_vec_info): Only
! 	clear loop->aux if it is associated with the destroyed loop_vinfo.
! 
! 2021-02-10  Martin Liska  <mliska@suse.cz>
! 
! 	PR tree-optimization/99002
! 	* gimple-if-to-switch.cc (find_conditions): Fix memory leak
! 	in the function.
! 
! 2021-02-10  Martin Liska  <mliska@suse.cz>
! 
! 	PR ipa/99003
! 	* ipa-icf.c (sem_item::add_reference): Fix memory leak when
! 	a reference exists.
! 
! 2021-02-10  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR debug/98755
! 	* dwarf2out.c (prune_unused_types_walk): Mark DW_TAG_variable DIEs
! 	at class scope for DWARF5+.
! 
! 2021-02-09  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	PR rtl-optimization/96015
! 	* reorg.c (skip_consecutive_labels): Minor comment tweaks.
! 	(relax_delay_slots): When deleting a jump to the next active
! 	instruction over a barrier, first delete the barrier if the
! 	jump is the only way to reach the target label.
! 
! 2021-02-09  Andre Vieira  <andre.simoesdiasvieira@arm.com>
! 
! 	* config/aarch64/aarch64-cost-tables.h: Add entries for vect.mul.
! 	* config/aarch64/aarch64.c (aarch64_rtx_mult_cost): Use vect.mul for
! 	vector multiplies and vect.alu for SSRA.
! 	* config/arm/aarch-common-protos.h (struct vector_cost_table): Define
! 	vect.mul cost field.
! 	* config/arm/aarch-cost-tables.h: Add entries for vect.mul.
! 	* config/arm/arm.c: Likewise.
! 
! 2021-02-09  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/98863
! 	* tree-ssa-sccvn.h (vn_avail::next_undo): Add.
! 	* tree-ssa-sccvn.c (last_pushed_avail): New global.
! 	(rpo_elim::eliminate_push_avail): Chain pushed avails.
! 	(unwind_state::avail_top): Add.
! 	(do_unwind): Rewrite unwinding of avail entries.
! 	(do_rpo_vn): Initialize last_pushed_avail and
! 	avail_top of the undo state.
! 
! 2021-02-09  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/99004
! 	* calls.c (maybe_warn_rdwr_sizes): Change s0 and s1 type from
! 	const char * to char * and free those pointers after use.
! 
! 2021-02-09  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/99017
! 	* tree-vect-slp.c (vect_bb_vectorization_profitable_p): Allow
! 	zero vector cost entries.
! 
! 2021-02-08  Andre Vieira  <andre.simoesdiasvieira@arm.com>
! 
! 	PR middle-end/98974
! 	* tree-vect-stmts.c (vectorizable_condition): Remove shadow vec_num
! 	parameter in vectorizable_condition.
! 
! 2021-02-08  Richard Biener  <rguenther@suse.de>
! 
! 	PR lto/96591
! 	* tree.c (walk_tree_1): Walk VECTOR_CST elements.
! 
! 2021-02-08  Martin Liska  <mliska@suse.cz>
! 
! 	PR lto/98971
! 	* cfgexpand.c (pass_expand::execute): Parse per-function option
! 	flag_patchable_function_entry and use it.
! 	* common.opt: Remove function_entry_patch_area_size and
! 	function_entry_patch_area_start global variables.
! 	* opts.c (parse_and_check_patch_area): New function.
! 	(common_handle_option): Use it.
! 	* opts.h (parse_and_check_patch_area): New function.
! 	* toplev.c (process_options): Parse and use
! 	function_entry_patch_area_size.
! 
! 2021-02-08  Martin Sebor  <msebor@redhat.com>
! 
! 	* doc/extend.texi (attribute malloc): Correct typos.
! 
! 2021-02-05  Nathan Sidwell  <nathan@acm.org>
! 
! 	PR driver/98943
! 	* gcc.c (driver::maybe_run_linker): Check for input file
! 	accessibility if not linking.
! 
! 2021-02-05  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/98855
! 	* tree-vectorizer.h (add_stmt_cost): New overload.
! 	* tree-vect-slp.c (li_cost_vec_cmp): New.
! 	(vect_bb_slp_scalar_cost): Cost individual loop regions
! 	separately.  Account for the scalar instance root stmt.
! 
! 2021-02-05  Tom de Vries  <tdevries@suse.de>
! 
! 	PR debug/98656
! 	* tree-switch-conversion.c (jump_table_cluster::emit): Add loc
! 	argument.
! 	(bit_test_cluster::emit): Reuse location_t for newly created
! 	gswitch statement.
! 	(switch_decision_tree::try_switch_expansion): Preserve
! 	location_t.
! 	* tree-switch-conversion.h: Change function signatures.
! 
! 2021-02-05  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/98957
! 	* config/i386/i386-options.c (m_NONE, m_ALL): Define.
! 	* config/i386/x86-tune.def (X86_TUNE_BRANCH_PREDICTION_HINTS,
! 	X86_TUNE_PROMOTE_QI_REGS): Use m_NONE instead of 0U.
! 	(X86_TUNE_QIMODE_MATH): Use m_ALL instead of ~0U.
! 
! 2021-02-05  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def (get_high): Define builtin.
! 	* config/aarch64/aarch64-simd.md (aarch64_get_high<mode>): Define.
! 	* config/aarch64/arm_neon.h (__GET_HIGH): Delete.
! 	(vget_high_f16): Reimplement using new builtin.
! 	(vget_high_f32): Likewise.
! 	(vget_high_f64): Likewise.
! 	(vget_high_p8): Likewise.
! 	(vget_high_p16): Likewise.
! 	(vget_high_p64): Likewise.
! 	(vget_high_s8): Likewise.
! 	(vget_high_s16): Likewise.
! 	(vget_high_s32): Likewise.
! 	(vget_high_s64): Likewise.
! 	(vget_high_u8): Likewise.
! 	(vget_high_u16): Likewise.
! 	(vget_high_u32): Likewise.
! 	(vget_high_u64): Likewise.
! 
! 2021-02-05  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def (get_low): Define builtin.
! 	* config/aarch64/aarch64-simd.md (aarch64_get_low<mode>): Define.
! 	* config/aarch64/arm_neon.h (__GET_LOW): Delete.
! 	(vget_low_f16): Reimplement using new builtin.
! 	(vget_low_f32): Likewise.
! 	(vget_low_f64): Likewise.
! 	(vget_low_p8): Likewise.
! 	(vget_low_p16): Likewise.
! 	(vget_low_p64): Likewise.
! 	(vget_low_s8): Likewise.
! 	(vget_low_s16): Likewise.
! 	(vget_low_s32): Likewise.
! 	(vget_low_s64): Likewise.
! 	(vget_low_u8): Likewise.
! 	(vget_low_u16): Likewise.
! 	(vget_low_u32): Likewise.
! 	(vget_low_u64): Likewise.
! 
! 2021-02-05  Kito Cheng  <kito.cheng@sifive.com>
! 
! 	* gcc.c (print_multilib_info): Check all required argument is provided
! 	by default arg.
! 
! 2021-02-05  liuhongt  <hongtao.liu@intel.com>
! 
! 	PR target/98537
! 	* config/i386/i386-expand.c (ix86_expand_sse_cmp): Don't
! 	generate integer mask comparison for 128/256-bits vector when
! 	op_true/op_false is NULL_RTX or CONSTM1_RTX/CONST0_RTX. Also
! 	delete redundant !maskcmp condition.
! 	(ix86_expand_int_vec_cmp): Ditto but no redundant deletion
! 	here.
! 	(ix86_expand_sse_movcc): Delete definition of maskcmp, add the
! 	condition directly to if (maskcmp), add extra check for
! 	cmpmode, it should be MODE_INT.
! 	(ix86_expand_fp_vec_cmp): Pass NULL to ix86_expand_sse_cmp's
! 	parameters op_true/op_false.
! 	(ix86_use_mask_cmp_p): New.
! 
! 2021-02-05  liuhongt  <hongtao.liu@intel.com>
! 
! 	PR target/98172
! 	* config/i386/x86-tune.def (X86_TUNE_AVX256_UNALIGNED_LOAD_OPTIMAL):
! 	Remove m_GENERIC from ~list.
! 	(X86_TUNE_AVX256_UNALIGNED_STORE_OPTIMAL): Ditto.
! 
! 2021-02-04  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR c/97932
! 	* diagnostic-show-locus.c (compatible_locations_p): Require
! 	locations in the same macro map to be either both from the
! 	macro definition, or both from the macro arguments.
! 
! 2021-02-04  Jonathan Wright  <jonathan.wright@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def: Add
! 	[su]mull_hi_lane[q] builtin generator macros.
! 	* config/aarch64/aarch64-simd.md
! 	(aarch64_<su>mull_hi_lane<mode>_insn): Define.
! 	(aarch64_<su>mull_hi_lane<mode>): Define.
! 	(aarch64_<su>mull_hi_laneq<mode>_insn): Define.
! 	(aarch64_<su>mull_hi_laneq<mode>): Define.
! 	* config/aarch64/arm_neon.h (vmull_high_lane_s16): Use RTL
! 	builtin instead of inline asm.
! 	(vmull_high_lane_s32): Likewise.
! 	(vmull_high_lane_u16): Likewise.
! 	(vmull_high_lane_u32): Likewise.
! 	(vmull_high_laneq_s16): Likewise.
! 	(vmull_high_laneq_s32): Likewise.
! 	(vmull_high_laneq_u16): Likewise.
! 	(vmull_high_laneq_u32): Liekwise.
! 
! 2021-02-04  Jonathan Wright  <jonathan.wright@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mull_hi_n
! 	builtin generator macros.
! 	* config/aarch64/aarch64-simd.md
! 	(aarch64_<su>mull_hi_n<mode>_insn): Define.
! 	(aarch64_<su>mull_hi_n<mode>): Define.
! 	* config/aarch64/arm_neon.h (vmull_high_n_s16): Use RTL builtin
! 	instead of inline asm.
! 	(vmull_high_n_s32): Likewise.
! 	(vmull_high_n_u16): Likewise.
! 	(vmull_high_n_u32): Likewise.
! 
! 2021-02-04  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/98855
! 	* tree-vect-loop.c (vectorizable_phi): Do not cost
! 	single-argument PHIs.
! 	* tree-vect-slp.c (vect_bb_slp_scalar_cost): Likewise.
! 	* tree-vect-stmts.c (vectorizable_bswap): Also perform
! 	costing for SLP operation.
! 
! 2021-02-04  Martin Liska  <mliska@suse.cz>
! 
! 	* doc/extend.texi: Mention -mprefer-vector-width in target
! 	attributes.
! 
! 2021-02-03  Martin Sebor  <msebor@redhat.com>
! 
! 	PR tree-optimization/98937
! 	* tree-ssa-strlen.c (strlen_dom_walker::~strlen_dom_walker): Define.
! 	Flush pointer_query cache.
! 
! 2021-02-03  Aaron Sawdey  <acsawdey@linux.ibm.com>
! 
! 	* config/rs6000/genfusion.pl (gen_2logical): Add missing
! 	fixes based on patch review.
! 	* config/rs6000/fusion.md: Regenerate file.
! 
! 2021-02-03  Aaron Sawdey  <acsawdey@linux.ibm.com>
! 
! 	* config/rs6000/t-rs6000: Comment out auto generation of
! 	fusion.md for now.
! 
! 2021-02-03  Andrew Stubbs  <ams@codesourcery.com>
! 
! 	* config/gcn/gcn-opts.h (enum processor_type): Add PROCESSOR_GFX908.
! 	* config/gcn/gcn.c (gcn_omp_device_kind_arch_isa): Add gfx908.
! 	(output_file_start): Add gfx908.
! 	* config/gcn/gcn.opt (gpu_type): Add gfx908.
! 	* config/gcn/t-gcn-hsa (MULTILIB_OPTIONS): Add march=gfx908.
! 	(MULTILIB_DIRNAMES): Add gfx908.
! 	* config/gcn/mkoffload.c (EF_AMDGPU_MACH_AMDGCN_GFX908): New define.
! 	(main): Recognize gfx908.
! 	* config/gcn/t-omp-device: Add gfx908.
! 
! 2021-02-03  Jonathan Wright  <jonathan.wright@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def: Add
! 	[su]mlsl_hi_lane[q] builtin macro generators.
! 	* config/aarch64/aarch64-simd.md
! 	(aarch64_<su>mlsl_hi_lane<mode>_insn): Define.
! 	(aarch64_<su>mlsl_hi_lane<mode>): Define.
! 	(aarch64_<su>mlsl_hi_laneq<mode>_insn): Define.
! 	(aarch64_<su>mlsl_hi_laneq<mode>): Define.
! 	* config/aarch64/arm_neon.h (vmlsl_high_lane_s16): Use RTL
! 	builtin instead of inline asm.
! 	(vmlsl_high_lane_s32): Likewise.
! 	(vmlsl_high_lane_u16): Likewise.
! 	(vmlsl_high_lane_u32): Likewise.
! 	(vmlsl_high_laneq_s16): Likewise.
! 	(vmlsl_high_laneq_s32): Likewise.
! 	(vmlsl_high_laneq_u16): Likewise.
! 	(vmlsl_high_laneq_u32): Likewise.
! 	(vmlal_high_laneq_u32): Likewise.
! 
! 2021-02-03  Jonathan Wright  <jonathan.wright@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def: Add
! 	[su]mlal_hi_lane[q] builtin generator macros.
! 	* config/aarch64/aarch64-simd.md
! 	(aarch64_<su>mlal_hi_lane<mode>_insn): Define.
! 	(aarch64_<su>mlal_hi_lane<mode>): Define.
! 	(aarch64_<su>mlal_hi_laneq<mode>_insn): Define.
! 	(aarch64_<su>mlal_hi_laneq<mode>): Define.
! 	* config/aarch64/arm_neon.h (vmlal_high_lane_s16): Use RTL
! 	builtin instead of inline asm.
! 	(vmlal_high_lane_s32): Likewise.
! 	(vmlal_high_lane_u16): Likewise.
! 	(vmlal_high_lane_u32): Likewise.
! 	(vmlal_high_laneq_s16): Likewise.
! 	(vmlal_high_laneq_s32): Likewise.
! 	(vmlal_high_laneq_u16): Likewise.
! 	(vmlal_high_laneq_u32): Likewise.
! 
! 2021-02-03  Jonathan Wright  <jonathan.wright@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mlsl_hi_n
! 	builtin generator macros.
! 	* config/aarch64/aarch64-simd.md (aarch64_<su>mlsl_hi_n<mode>_insn):
! 	Define.
! 	(aarch64_<su>mlsl_hi_n<mode>): Define.
! 	* config/aarch64/arm_neon.h (vmlsl_high_n_s16): Use RTL builtin
! 	instead of inline asm.
! 	(vmlsl_high_n_s32): Likewise.
! 	(vmlsl_high_n_u16): Likewise.
! 	(vmlsl_high_n_u32): Likewise.
! 
! 2021-02-03  Jonathan Wright  <jonathan.wright@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mlal_hi_n
! 	builtin generator macros.
! 	* config/aarch64/aarch64-simd.md (aarch64_<su>mlal_hi_n<mode>_insn):
! 	Define.
! 	(aarch64_<su>mlal_hi_n<mode>): Define.
! 	* config/aarch64/arm_neon.h (vmlal_high_n_s16): Use RTL builtin
! 	instead of inline asm.
! 	(vmlal_high_n_s32): Likewise.
! 	(vmlal_high_n_u16): Likewise.
! 	(vmlal_high_n_u32): Likewise.
! 
! 2021-02-03  Jonathan Wright  <jonathan.wright@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def: Add RTL builtin
! 	generator macros.
! 	* config/aarch64/aarch64-simd.md (*aarch64_<su>mlal_hi<mode>):
! 	Rename to...
! 	(aarch64_<su>mlal_hi<mode>_insn): This.
! 	(aarch64_<su>mlal_hi<mode>): Define.
! 	* config/aarch64/arm_neon.h (vmlal_high_s8): Use RTL builtin
! 	instead of inline asm.
! 	(vmlal_high_s16): Likewise.
! 	(vmlal_high_s32): Likewise.
! 	(vmlal_high_u8): Likewise.
! 	(vmlal_high_u16): Likewise.
! 	(vmlal_high_u32): Likewise.
! 
! 2021-02-03  Ilya Leoshkevich  <iii@linux.ibm.com>
! 
! 	* lra-spills.c (remove_pseudos): Call lra_update_insn_recog_data()
! 	after calling alter_subreg() on a (mem).
! 
! 2021-02-03  Martin Liska  <mliska@suse.cz>
! 
! 	PR lto/98912
! 	* lto-streamer-out.c (produce_lto_section): Fill up missing
! 	padding.
! 	* lto-streamer.h (struct lto_section): Add _padding field.
! 
! 2021-02-03  Richard Biener  <rguenther@suse.de>
! 
! 	* lto-streamer.c (lto_get_section_name): Free temporary
! 	buffer.
! 	* tree-loop-distribution.c
! 	(loop_distribution::merge_dep_scc_partitions): Free edge data.
! 
! 2021-02-03  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/97487
! 	* ifcvt.c (noce_can_force_operand): New function.
! 	(noce_emit_move_insn): Use it.
! 	(noce_try_sign_mask): Likewise.  Formatting fix.
! 
! 2021-02-03  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR middle-end/97971
! 	* lra-constraints.c (process_alt_operands): For inline asm, don't call
! 	fatal_insn, but instead return false.
! 
! 2021-02-03  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/98287
! 	* config/i386/mmx.md (<insn><mode>3): For shifts don't enable expander
! 	for V1DImode.
! 
! 2021-02-03  Tamar Christina  <tamar.christina@arm.com>
! 
! 	PR tree-optimization/98928
! 	* tree-vect-loop.c (vect_analyze_loop_2): Change
! 	STMT_VINFO_SLP_VECT_ONLY to STMT_VINFO_SLP_VECT_ONLY_PATTERN.
! 	* tree-vect-slp-patterns.c (complex_pattern::build): Likewise.
! 	* tree-vectorizer.h (STMT_VINFO_SLP_VECT_ONLY_PATTERN): New.
! 	(class _stmt_vec_info): Add slp_vect_pattern_only_p.
! 
! 2021-02-02  Richard Biener  <rguenther@suse.de>
! 
! 	* gimple-loop-interchange.cc (prepare_data_references):
! 	Release vectors.
! 	* gimple-loop-jam.c (tree_loop_unroll_and_jam): Likewise.
! 	* tree-ssa-loop-im.c (hoist_memory_references): Likewise.
! 	* tree-vect-stmts.c (vectorizable_condition): Do not
! 	allocate vectors.
! 	(vectorizable_comparison): Likewise.
! 
! 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def (ursqrte): Define builtin.
! 	* config/aarch64/aarch64-simd.md (aarch64_ursqrte<mode>): New pattern.
! 	* config/aarch64/arm_neon.h (vrsqrte_u32): Reimplement using builtin.
! 	(vrsqrteq_u32): Likewise.
! 
! 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def (sqxtun2): Define builtin.
! 	* config/aarch64/aarch64-simd.md (aarch64_sqxtun2<mode>_le): Define.
! 	(aarch64_sqxtun2<mode>_be): Likewise.
! 	(aarch64_sqxtun2<mode>): Likewise.
! 	* config/aarch64/arm_neon.h (vqmovun_high_s16): Reimplement using builtin.
! 	(vqmovun_high_s32): Likewise.
! 	(vqmovun_high_s64): Likewise.
! 	* config/aarch64/iterators.md (UNSPEC_SQXTUN2): Define.
! 
! 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def (bfdot_lane, bfdot_laneq): Use
! 	AUTO_FP flags.
! 	(bfmlalb_lane, bfmlalt_lane, bfmlalb_lane_q, bfmlalt_lane_q): Use FP flags.
! 
! 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def (fcmla_lane0, fcmla_lane90,
! 	fcmla_lane180, fcmla_lane270, fcmlaq_lane0, fcmlaq_lane90, fcmlaq_lane180,
! 	fcmlaq_lane270, scvtf, ucvtf, fcvtzs, fcvtzu, scvtfsi, scvtfdi, ucvtfsi,
! 	ucvtfdi, fcvtzshf, fcvtzuhf, fmlal_lane_low, fmlsl_lane_low,
! 	fmlal_laneq_low, fmlsl_laneq_low, fmlalq_lane_low, fmlslq_lane_low,
! 	fmlalq_laneq_low, fmlslq_laneq_low, fmlal_lane_high, fmlsl_lane_high,
! 	fmlal_laneq_high, fmlsl_laneq_high, fmlalq_lane_high, fmlslq_lane_high,
! 	fmlalq_laneq_high, fmlslq_laneq_high): Use FP flags.
! 
! 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-builtins.c (FLAG_LOAD): Define.
! 	* config/aarch64/aarch64-simd-builtins.def (ld1x2, ld2, ld3, ld4, ld2r,
! 	ld3r, ld4r, ld1, ld1x3, ld1x4): Use LOAD flags.
! 
! 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def (combine, zip1, zip2,
! 	uzp1, uzp2, trn1, trn2, simd_bsl): Use AUTO_FP flags.
! 
! 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def (clrsb, clz, ctz, popcount,
! 	vec_smult_lane_, vec_smlal_lane_, vec_smult_laneq_, vec_smlal_laneq_,
! 	vec_umult_lane_, vec_umlal_lane_, vec_umult_laneq_, vec_umlal_laneq_,
! 	ashl, sshl, ushl, srshl, urshl, sdot_lane, udot_lane, sdot_laneq,
! 	udot_laneq, usdot_lane, usdot_laneq, sudot_lane, sudot_laneq, ashr,
! 	ashr_simd, lshr, lshr_simd, srshr_n, urshr_n, ssra_n, usra_n, srsra_n,
! 	ursra_n, sshll_n, ushll_n, sshll2_n, ushll2_n, ssri_n, usri_n, ssli_n,
! 	ssli_n, usli_n, bswap, rbit, simd_bsl, eor3q, rax1q, xarq, bcaxq): Use
! 	NONE builtin flags.
! 
! 2021-02-02  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/98848
! 	* tree-vect-patterns.c (vect_recog_over_widening_pattern): Punt if
! 	STMT_VINFO_DEF_TYPE (last_stmt_info) is vect_reduction_def.
! 
! 2021-02-02  Kito Cheng  <kito.cheng@sifive.com>
! 
! 	PR target/98743
! 	* expr.c: Check mode before calling store_expr.
! 
! 2021-02-02  Christophe Lyon  <christophe.lyon@linaro.org>
! 
! 	* config/arm/iterators.md (supf): Remove VORNQ_S and VORNQ_U.
! 	(VORNQ): Remove.
! 	* config/arm/mve.md (mve_vornq_s<mode>): New entry for vorn
! 	instruction using expression ior.
! 	(mve_vornq_u<mode>): New expander.
! 	(mve_vornq_f<mode>): Use ior code instead of unspec.
! 	* config/arm/unspecs.md (VORNQ_S, VORNQ_U, VORNQ_F): Remove.
! 
! 2021-02-02  Alexandre Oliva  <oliva@adacore.com>
! 
! 	* tree-nested.c (convert_nonlocal_reference_op): Move
! 	current_function_decl restore after re-gimplification.
! 	(convert_local_reference_op): Likewise.
! 
! 2021-02-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def (rshrn, rshrn2):
! 	Define builtins.
! 	* config/aarch64/aarch64-simd.md (aarch64_rshrn<mode>_insn_le):
! 	Define.
! 	(aarch64_rshrn<mode>_insn_be): Likewise.
! 	(aarch64_rshrn<mode>): Likewise.
! 	(aarch64_rshrn2<mode>_insn_le): Likewise.
! 	(aarch64_rshrn2<mode>_insn_be): Likewise.
! 	(aarch64_rshrn2<mode>): Likewise.
! 	* config/aarch64/aarch64.md (unspec): Add UNSPEC_RSHRN.
! 	* config/aarch64/arm_neon.h (vrshrn_high_n_s16): Reimplement
! 	using builtin.
! 	(vrshrn_high_n_s32): Likewise.
! 	(vrshrn_high_n_s64): Likewise.
! 	(vrshrn_high_n_u16): Likewise.
! 	(vrshrn_high_n_u32): Likewise.
! 	(vrshrn_high_n_u64): Likewise.
! 	(vrshrn_n_s16): Likewise.
! 	(vrshrn_n_s32): Likewise.
! 	(vrshrn_n_s64): Likewise.
! 	(vrshrn_n_u16): Likewise.
! 	(vrshrn_n_u32): Likewise.
! 	(vrshrn_n_u64): Likewise.
! 
! 2021-02-01  Sergei Trofimovich  <siarheit@google.com>
! 
! 	PR tree-optimization/98499
! 	* ipa-modref.c (analyze_ssa_name_flags): treat RVO
! 	conservatively and assume all possible side-effects.
! 
! 2021-02-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def (vec_unpacks_hi,
! 	vec_unpacku_hi_): Define builtins.
! 	* config/aarch64/arm_neon.h (vmovl_high_s8): Reimplement using
! 	builtin.
! 	(vmovl_high_s16): Likewise.
! 	(vmovl_high_s32): Likewise.
! 	(vmovl_high_u8): Likewise.
! 	(vmovl_high_u16): Likewise.
! 	(vmovl_high_u32): Likewise.
! 
! 2021-02-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def (sabdl, uabdl):
! 	Define builtins.
! 	* config/aarch64/aarch64-simd.md (aarch64_<sur>abdl<mode>): New
! 	pattern.
! 	* config/aarch64/aarch64.md (unspec): Define UNSPEC_SABDL,
! 	UNSPEC_UABDL.
! 	* config/aarch64/arm_neon.h (vabdl_s8): Reimplemet using
! 	builtin.
! 	(vabdl_s16): Likewise.
! 	(vabdl_s32): Likewise.
! 	(vabdl_u8): Likewise.
! 	(vabdl_u16): Likewise.
! 	(vabdl_u32): Likewise.
! 	* config/aarch64/iterators.md (ABDL): New int iterator.
! 	(sur): Handle UNSPEC_SABDL, UNSPEC_UABDL.
! 
! 2021-02-01  Martin Sebor  <msebor@redhat.com>
! 
! 	* tree.h (BLOCK_VARS): Add comment.
! 	(BLOCK_SUBBLOCKS): Same.
! 	(BLOCK_SUPERCONTEXT): Same.
! 	(BLOCK_ABSTRACT_ORIGIN): Same.
! 	(inlined_function_outer_scope_p): Same.
! 
! 2021-02-01  Martin Sebor  <msebor@redhat.com>
! 
! 	PR middle-end/97172
! 	* attribs.c (attr_access::free_lang_data): Define new function.
! 	* attribs.h (attr_access::free_lang_data): Declare new function.
! 
! 2021-02-01  Richard Biener  <rguenther@suse.de>
! 
! 	* vec.h (auto_vec::auto_vec): Add memory stat parameters
! 	and pass them on.
! 	* bitmap.h (auto_bitmap::auto_bitmap): Likewise.
  
! 2021-02-01  Tamar Christina  <tamar.christina@arm.com>
  
! 	* config/aarch64/aarch64-simd.md (aarch64_<su>mlal_n<mode>,
! 	aarch64_<su>mlsl<mode>, aarch64_<su>mlsl_n<mode>): Flip mult operands.
  
! 2021-02-01  Richard Biener  <rguenther@suse.de>
  
! 	PR rtl-optimization/98863
! 	* config/i386/i386-features.c (convert_scalars_to_vector):
! 	Set DF_RD_PRUNE_DEAD_DEFS.
  
! 2021-01-31  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* system.h (SIZE_MAX): Define if not already defined.
  
! 2021-01-30  Aaron Sawdey  <acsawdey@linux.ibm.com>
  
! 	* config/rs6000/genfusion.pl (gen_2logical): New function to
! 	generate patterns for logical-logical fusion.
! 	* config/rs6000/fusion.md: Regenerated patterns.
! 	* config/rs6000/rs6000-cpus.def: Add
! 	OPTION_MASK_P10_FUSION_2LOGICAL.
! 	* config/rs6000/rs6000.c (rs6000_option_override_internal):
! 	Enable logical-logical fusion for p10.
! 	* config/rs6000/rs6000.opt: Add -mpower10-fusion-2logical.
  
! 2021-01-30  David Edelsohn  <dje.gcc@gmail.com>
  
! 	* config/rs6000/rs6000.opt: Add periods to new AIX options.
  
! 2021-01-30  David Edelsohn  <dje.gcc@gmail.com>
  
! 	* config/rs6000/rs6000.opt (mabi=vec-extabi): New.
! 	(mabi=vec-default): New.
! 	* config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Define
! 	__EXTABI__ for AIX Vector extended ABI.
! 	* config/rs6000/rs6000.c (rs6000_debug_reg_global): Print AIX Vector
! 	extabi info.
! 	(conditional_register_usage): If AIX vec_extabi enabled, vs20-vs31
! 	are non-volatile.
! 	* doc/invoke.texi (PowerPC mabi): Add AIX vec-extabi and vec-default.
  
! 2021-01-30  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/i386/i386-features.c (remove_partial_avx_dependency): Clear
! 	DF_DEFER_INSN_RESCAN after calling df_process_deferred_rescans.
  
! 2021-01-29  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR target/97701
! 	* lra-constraints.c (in_class_p): Don't narrow class only for REG
! 	or MEM.
  
! 2021-01-29  Will Schmidt  <will_schmidt@vnet.ibm.com>
  
! 	* config/rs6000/rs6000-call.c (rs6000_expand_binup_builtin): Add
! 	clauses for CODE_FOR_vsx_xvcvuxddp_scale and
! 	CODE_FOR_vsx_xvcvsxddp_scale to the parameter checking code.
  
! 2021-01-29  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/98866
! 	* gimple-range-gori.h (gori_compute:set_range_invariant): New.
! 	* gimple-range-gori.cc (gori_map::set_range_invariant): New.
! 	(gori_map::m_maybe_invariant): Rename from all_outgoing.
! 	(gori_map::gori_map): Rename all_outgoing to m_maybe_invariant.
! 	(gori_map::is_export_p): Ditto.
! 	(gori_map::calculate_gori): Ditto.
! 	(gori_compute::set_range_invariant): New.
! 	* gimple-range.cc (gimple_ranger::range_of_stmt): Set range
! 	invariant for pointers evaluating to [1, +INF].
  
! 2021-01-29  Richard Biener  <rguenther@suse.de>
  
! 	PR rtl-optimization/98863
! 	* config/i386/i386-features.c (remove_partial_avx_dependency):
! 	Do not perform DF analysis.
! 	(pass_data_remove_partial_avx_dependency): Remove
! 	TODO_df_finish.
  
! 2021-01-29  Jonathan Wright  <jonathan.wright@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mull_n
! 	builtin generator macros.
! 	* config/aarch64/aarch64-simd.md (aarch64_<su>mull_n<mode>):
! 	Define.
! 	* config/aarch64/arm_neon.h (vmull_n_s16): Use RTL builtin
! 	instead of inline asm.
! 	(vmull_n_s32): Likewise.
! 	(vmull_n_u16): Likewise.
! 	(vmull_n_u32): Likewise.
  
! 2021-01-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def (sabdl2, uabdl2):
! 	Define builtins.
! 	* config/aarch64/aarch64-simd.md (aarch64_<sur>abdl2<mode>_3):
! 	Rename to...
! 	(aarch64_<sur>abdl2<mode>): ... This.
! 	(<sur>sadv16qi): Adjust use of above.
! 	* config/aarch64/arm_neon.h (vabdl_high_s8): Reimplement using
! 	builtin.
! 	(vabdl_high_s16): Likewise.
! 	(vabdl_high_s32): Likewise.
! 	(vabdl_high_u8): Likewise.
! 	(vabdl_high_u16): Likewise.
! 	(vabdl_high_u32): Likewise.
  
! 2021-01-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def (sabal2): Define
! 	builtin.
! 	(uabal2): Likewise.
! 	* config/aarch64/aarch64-simd.md (aarch64_<sur>abal2<mode>): New
! 	pattern.
! 	* config/aarch64/aarch64.md (unspec): Add UNSPEC_SABAL2 and
! 	UNSPEC_UABAL2.
! 	* config/aarch64/arm_neon.h (vabal_high_s8): Reimplement using
! 	builtin.
! 	(vabal_high_s16): Likewise.
! 	(vabal_high_s32): Likewise.
! 	(vabal_high_u8): Likewise.
! 	(vabal_high_u16): Likewise.
! 	(vabal_high_u32): Likewise.
! 	* config/aarch64/iterators.md (ABAL2): New mode iterator.
! 	(sur): Handle UNSPEC_SABAL2, UNSPEC_UABAL2.
  
! 2021-01-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def (sabal): Define
! 	builtin.
! 	(uabal): Likewise.
! 	* config/aarch64/aarch64-simd.md (aarch64_<sur>abal<mode>_4):
! 	Rename to...
! 	(aarch64_<sur>abal<mode>): ... This
! 	(<sur>sadv16qi): Adust use of the above.
! 	* config/aarch64/arm_neon.h (vabal_s8): Reimplement using
! 	builtin.
! 	(vabal_s16): Likewise.
! 	(vabal_s32): Likewise.
! 	(vabal_u8): Likewise.
! 	(vabal_u16): Likewise.
! 	(vabal_u32): Likewise.
  
! 2021-01-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def (saddlv, uaddlv):
! 	Define builtins.
! 	* config/aarch64/aarch64-simd.md (aarch64_<su>addlv<mode>):
! 	Define.
! 	* config/aarch64/arm_neon.h (vaddlv_s8): Reimplement using
! 	builtin.
! 	(vaddlv_s16): Likewise.
! 	(vaddlv_u8): Likewise.
! 	(vaddlv_u16): Likewise.
! 	(vaddlvq_s8): Likewise.
! 	(vaddlvq_s16): Likewise.
! 	(vaddlvq_s32): Likewise.
! 	(vaddlvq_u8): Likewise.
! 	(vaddlvq_u16): Likewise.
! 	(vaddlvq_u32): Likewise.
! 	(vaddlv_s32): Likewise.
! 	(vaddlv_u32): Likewise.
! 	* config/aarch64/iterators.md (VDQV_L): New mode iterator.
! 	(unspec): Add UNSPEC_SADDLV, UNSPEC_UADDLV.
! 	(Vwstype): New mode attribute.
! 	(Vwsuf): Likewise.
! 	(VWIDE_S): Likewise.
! 	(USADDLV): New int iterator.
! 	(su): Handle UNSPEC_SADDLV, UNSPEC_UADDLV.
  
! 2021-01-29  Jonathan Wright  <jonathan.wright@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mlsl_lane[q]
! 	builtin generator macros.
! 	* config/aarch64/aarch64-simd.md (aarch64_vec_<su>mlsl_lane<Qlane>):
! 	Define.
! 	* config/aarch64/arm_neon.h (vmlsl_lane_s16): Use RTL builtin
! 	instead of inline asm.
! 	(vmlsl_lane_s32): Likewise.
! 	(vmlsl_lane_u16): Likewise.
! 	(vmlsl_lane_u32): Likewise.
! 	(vmlsl_laneq_s16): Likewise.
! 	(vmlsl_laneq_s32): Likewise.
! 	(vmlsl_laneq_u16): Likewise.
! 	(vmlsl_laneq_u32): Likewise.
  
! 2021-01-29  Richard Biener  <rguenther@suse.de>
  
! 	* doc/invoke.texi (--param max-gcse-memory): Document unit
! 	of size.
! 	* gcse.c (gcse_or_cprop_is_too_expensive): Adjust.
! 	* params.opt (--param max-gcse-memory): Adjust default and
! 	document unit of size.
  
! 2021-01-29  Richard Biener  <rguenther@suse.de>
  
! 	PR rtl-optimization/98863
! 	* gcse.c (gcse_or_cprop_is_too_expensive): Use unsigned
! 	HOST_WIDE_INT for the memory estimate.
  
! 2021-01-29  Bin Cheng  <bin.cheng@linux.alibaba.com>
! 	    Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/97627
! 	* tree-ssa-loop-niter.c (number_of_iterations_exit_assumptions):
! 	Do not analyze fake edges.
  
! 2021-01-29  Richard Biener  <rguenther@suse.de>
  
! 	PR rtl-optimization/98144
! 	* df.h (df_mir_bb_info): Add con_visited member.
! 	* df-problems.c (df_mir_alloc): Initialize con_visited,
! 	do not fully populate IN and OUT.
! 	(df_mir_reset): Likewise.
! 	(df_mir_confluence_0): Set con_visited.
! 	(df_mir_confluence_n): Properly handle implicitely
! 	fully populated IN and OUT as designated by con_visited
! 	and update con_visited accordingly.
  
! 2021-01-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/98849
! 	* config/arm/vec-common.md (mve_vshlq_<supf><mode>,
! 	vashl<mode>3, vashr<mode>3, vlshr<mode>3): Add
! 	&& !TARGET_REALLY_IWMMXT to conditions.
  
! 2021-01-29  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/98331
! 	* cfgbuild.c (find_bb_boundaries): Reset debug_insn when seeing
! 	a BARRIER.
  
! 2021-01-28  Marek Polacek  <polacek@redhat.com>
  
! 	PR c++/94775
! 	* stor-layout.c (finalize_type_size): If we reset TYPE_USER_ALIGN in
! 	the main variant, maybe reset it in its variants too.
! 	* tree.c (check_base_type): Return true only if TYPE_USER_ALIGN match.
! 	(check_aligned_type): Check if TYPE_USER_ALIGN match.
  
! 2021-01-28  Christophe Lyon  <christophe.lyon@linaro.org>
  
! 	PR target/98730
! 	* config/arm/arm.c (arm_rtx_costs_internal): Adjust cost of vector
! 	of constant zero for comparisons.
  
! 2021-01-28  Michael Meissner  <meissner@linux.ibm.com>
  
! 	* config/rs6000/rs6000.c (rs6000_mangle_decl_assembler_name): Add
! 	support for mapping built-in function names for long double
! 	built-in functions if long double is IEEE 128-bit.
  
! 2021-01-28  Jonathan Wright  <jonathan.wright@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mlsl_n
! 	builtin generator macros.
! 	* config/aarch64/aarch64-simd.md (aarch64_<su>mlsl_n<mode>):
! 	Define.
! 	* config/aarch64/arm_neon.h (vmlsl_n_s16): Use RTL builtin
! 	instead of inline asm.
! 	(vmlsl_n_s32): Likewise.
! 	(vmlsl_n_u16): Likewise.
! 	(vmlsl_n_u32): Likewise.
  
! 2021-01-28  Jonathan Wright  <jonathan.wright@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mlal_n
! 	builtin generator macros.
! 	* config/aarch64/aarch64-simd.md (aarch64_<su>mlal_n<mode>):
! 	Define.
! 	* config/aarch64/arm_neon.h (vmlal_n_s16): Use RTL builtin
! 	instead of inline asm.
! 	(vmlal_n_s32): Likewise.
! 	(vmlal_n_u16): Likewise.
! 	(vmlal_n_u32): Likewise.
  
! 2021-01-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def (shrn2): Define
! 	builtin.
! 	* config/aarch64/aarch64-simd.md (aarch64_shrn2<mode>_insn_le):
! 	Define.
! 	(aarch64_shrn2<mode>_insn_be): Likewise.
! 	(aarch64_shrn2<mode>): Likewise.
! 	* config/aarch64/arm_neon.h (vshrn_high_n_s16): Reimlplement
! 	using builtins.
! 	(vshrn_high_n_s32): Likewise.
! 	(vshrn_high_n_s64): Likewise.
! 	(vshrn_high_n_u16): Likewise.
! 	(vshrn_high_n_u32): Likewise.
! 	(vshrn_high_n_u64): Likewise.
  
! 2021-01-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def (shrn): Define
! 	builtin.
! 	* config/aarch64/aarch64-simd.md (aarch64_shrn<mode>_insn_le):
! 	Define.
! 	(aarch64_shrn<mode>_insn_be): Likewise.
! 	(aarch64_shrn<mode>): Likewise.
! 	* config/aarch64/arm_neon.h (vshrn_n_s16): Reimplement using
! 	builtins.
! 	(vshrn_n_s32): Likewise.
! 	(vshrn_n_s64): Likewise.
! 	(vshrn_n_u16): Likewise.
! 	(vshrn_n_u32): Likewise.
! 	(vshrn_n_u64): Likewise.
! 	* config/aarch64/iterators.md (vn_mode): New mode attribute.
  
! 2021-01-28  Richard Biener  <rguenther@suse.de>
  
! 	PR rtl-optimization/80960
! 	* dse.c (check_mem_read_rtx): Call get_addr on the
! 	offsetted address.
  
! 2021-01-28  Xionghu Luo  <luoxhu@linux.ibm.com>
! 	    David Edelsohn  <dje.gcc@gmail.com>
  
! 	PR target/98799
! 	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
! 	Don't generate VIEW_CONVERT_EXPR for fcode ALTIVEC_BUILTIN_VEC_INSERT
! 	when -m32.
! 	* config/rs6000/rs6000-protos.h (rs6000_expand_vector_set_var):
! 	Delete.
! 	* config/rs6000/rs6000.c (rs6000_expand_vector_set): Remove the
! 	wrapper call rs6000_expand_vector_set_var for cleanup.  Call
! 	rs6000_expand_vector_set_var_p9 and rs6000_expand_vector_set_var_p8
! 	directly.
! 	(rs6000_expand_vector_set_var): Delete.
! 	(rs6000_expand_vector_set_var_p9): Make static.
! 	(rs6000_expand_vector_set_var_p8): Make static.
  
! 2021-01-28  Xing GUO  <higuoxing@gmail.com>
  
! 	* common/config/riscv/riscv-common.c
! 	(riscv_subset_list::parsing_subset_version): Fix -march option parsing
! 	when `p` extension exists.
  
! 2021-01-27  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR rtl-optimization/97684
! 	* ira.c (ira): Call ira_set_pseudo_classes before
! 	update_equiv_regs when it is necessary.
  
! 2021-01-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/98853
! 	* config/aarch64/aarch64.md (*aarch64_bfxilsi_uxtw): Use
! 	%w0, %w1 and %2 instead of %0, %1 and %2.
  
! 2021-01-27  Aaron Sawdey  <acsawdey@linux.ibm.com>
  
! 	* config/rs6000/genfusion.pl: New script to generate
! 	define_insn_and_split patterns so combine can arrange fused
! 	instructions next to each other.
! 	* config/rs6000/fusion.md: New file, generated fused instruction
! 	patterns for combine.
! 	* config/rs6000/predicates.md (const_m1_to_1_operand): New predicate.
! 	(non_update_memory_operand): New predicate.
! 	* config/rs6000/rs6000-cpus.def: Add OPTION_MASK_P10_FUSION and
! 	OPTION_MASK_P10_FUSION_LD_CMPI to ISA_3_1_MASKS_SERVER and
! 	POWERPC_MASKS.
! 	* config/rs6000/rs6000-protos.h (address_is_non_pfx_d_or_x): Add
! 	prototype.
! 	* config/rs6000/rs6000.c (rs6000_option_override_internal):
! 	Automatically set OPTION_MASK_P10_FUSION and
! 	OPTION_MASK_P10_FUSION_LD_CMPI if target is power10.
! 	(rs600_opt_masks): Allow -mpower10-fusion
! 	in function attributes.
! 	(address_is_non_pfx_d_or_x): New function.
! 	* config/rs6000/rs6000.h: Add MASK_P10_FUSION.
! 	* config/rs6000/rs6000.md: Include fusion.md.
! 	* config/rs6000/rs6000.opt: Add -mpower10-fusion
! 	and -mpower10-fusion-ld-cmpi.
! 	* config/rs6000/t-rs6000: Add dependencies involving fusion.md.
  
! 2021-01-27  Jonathan Wright  <jonathan.wright@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mlal
! 	builtin generator macros.
! 	* config/aarch64/aarch64-simd.md (*aarch64_<su>mlal<mode>):
! 	Rename to...
! 	(aarch64_<su>mlal<mode>): This.
! 	* config/aarch64/arm_neon.h (vmlal_s8): Use RTL builtin
! 	instead of inline asm.
! 	(vmlal_s16): Likewise.
! 	(vmlal_s32): Likewise.
! 	(vmlal_u8): Likewise.
! 	(vmlal_u16): Likewise.
! 	(vmlal_u32): Likewise.
  
! 2021-01-27  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98854
! 	* tree-vect-slp.c (vect_build_slp_tree_2): Also build
! 	PHIs from scalars when the number of CTORs matches the
! 	number of children.
  
! 2021-01-27  Jonathan Wright  <jonathan.wright@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def: Add mls_n builtin
! 	generator macro.
! 	* config/aarch64/aarch64-simd.md (*aarch64_mls_elt_merge<mode>):
! 	Rename to...
! 	(aarch64_mls_n<mode>): This.
! 	* config/aarch64/arm_neon.h (vmls_n_s16): Use RTL builtin
! 	instead of asm.
! 	(vmls_n_s32): Likewise.
! 	(vmls_n_u16): Likewise.
! 	(vmls_n_u32): Likewise.
! 	(vmlsq_n_s16): Likewise.
! 	(vmlsq_n_s32): Likewise.
! 	(vmlsq_n_u16): Likewise.
! 	(vmlsq_n_u32): Likewise.
  
! 2021-01-27  Jonathan Wright  <jonathan.wright@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def: Add mls builtin
! 	generator macro.
! 	* config/aarch64/arm_neon.h (vmls_s8): Use RTL builtin rather
! 	than asm.
! 	(vmls_s16): Likewise.
! 	(vmls_s32): Likewise.
! 	(vmls_u8): Likewise.
! 	(vmls_u16): Likewise.
! 	(vmls_u32): Likewise.
! 	(vmlsq_s8): Likewise.
! 	(vmlsq_s16): Likewise.
! 	(vmlsq_s32): Likewise.
! 	(vmlsq_u8): Likewise.
! 	(vmlsq_u16): Likewise.
! 	(vmlsq_u32): Likewise.
  
! 2021-01-27  Jonathan Wright  <jonathan.wright@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def: Add mla_n builtin
! 	generator macro.
! 	* config/aarch64/aarch64-simd.md (*aarch64_mla_elt_merge<mode>):
! 	Rename to...
! 	(aarch64_mla_n<mode>): This.
! 	* config/aarch64/arm_neon.h (vmla_n_s16): Use RTL builtin
! 	instead of asm.
! 	(vmla_n_s32): Likewise.
! 	(vmla_n_u16): Likewise.
! 	(vmla_n_u32): Likewise.
! 	(vmlaq_n_s16): Likewise.
! 	(vmlaq_n_s32): Likewise.
! 	(vmlaq_n_u16): Likewise.
! 	(vmlaq_n_u32): Likewise.
  
! 2021-01-27  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/98833
! 	* config/i386/sse.md (sse2_gt<mode>3): Drop !TARGET_XOP in condition.
! 	(*sse2_eq<mode>3): Ditto.
  
! 2021-01-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	* tree-pass.h (PROP_trees): Rename to ...
! 	(PROP_gimple): ... this.
! 	* cfgexpand.c (pass_data_expand): Replace PROP_trees with PROP_gimple.
! 	* passes.c (execute_function_dump, execute_function_todo,
! 	execute_one_ipa_transform_pass, execute_one_pass): Likewise.
! 	* varpool.c (ctor_for_folding): Likewise.
  
! 2021-01-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/97260
! 	* varpool.c: Include tree-pass.h.
! 	(ctor_for_folding): In GENERIC return DECL_INITIAL for TREE_READONLY
! 	non-TREE_SIDE_EFFECTS automatic variables.
  
! 2021-01-26  Paul Fee  <paul.f.fee@gmail.com>
  
! 	* doc/cpp.texi (__cplusplus): Document value for -std=c++23
! 	or -std=gnu++23.
! 	* doc/invoke.texi: Document -std=c++23 and -std=gnu++23.
! 	* dwarf2out.c (highest_c_language): Recognise C++20 and C++23.
! 	(gen_compile_unit_die): Recognise C++23.
  
! 2021-01-26  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR bootstrap/98839
! 	* dwarf2asm.c (dw2_assemble_integer): Cast DWARF2_ADDR_SIZE to int
! 	in comparison.
  
! 2021-01-26  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/98681
! 	* config/aarch64/aarch64.c (aarch64_mask_and_shift_for_ubfiz_p):
! 	Use UINTVAL (shft_amnt) and UINTVAL (mask) instead of INTVAL (shft_amnt)
! 	and INTVAL (mask).  Add && INTVAL (mask) > 0 condition.
  
! 2021-01-26  Richard Biener  <rguenther@suse.de>
  
! 	* gimple-pretty-print.c (dump_binary_rhs): Handle
! 	VEC_WIDEN_{PLUS,MINUS}_{LO,HI}_EXPR.
  
! 2021-01-26  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/98726
! 	* tree.h (vector_cst_int_elt): Remove.
! 	* tree.c (vector_cst_int_elt): Use poly_wide_int for computations,
! 	make static.
  
! 2021-01-26  Andrew Stubbs  <ams@codesourcery.com>
  
! 	* config/gcn/gcn.c (gcn_expand_reduc_scalar): Use move instructions
! 	for V64DFmode min/max reductions.
  
! 2021-01-26  Jakub Jelinek  <jakub@redhat.com>
  
! 	* dwarf2asm.c (dw2_assemble_integer): Handle size twice as large
! 	as DWARF2_ADDR_SIZE if x is not a scalar int by emitting it as
! 	two halves, one with x and the other with const0_rtx, ordered
! 	depending on endianity.
  
! 2021-01-26  Alexandre Oliva  <oliva@adacore.com>
  
! 	* gimplify.c (gimplify_decl_expr): Skip asan marking calls for
! 	temporaries not seen in binding block, and not about to be
! 	added as gimple variables.
  
! 2021-01-25  Martin Sebor  <msebor@redhat.com>
  
! 	PR c++/98646
! 	* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Adjust warning text.
  
! 2021-01-25  Martin Liska  <mliska@suse.cz>
  
! 	* value-prof.c (get_nth_most_common_value): Use %s instead
! 	of %qs string.
  
! 2021-01-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/98811
! 	* configure.ac (HAVE_AS_GDWARF_5_DEBUG_FLAG): Only define if
! 	readelf -wi is able to read the emitted .debug_info back.
! 	* configure: Regenerated.
  
! 2021-01-25  Martin Liska  <mliska@suse.cz>
  
! 	PR gcov-profile/98739
! 	* common.opt: Add missing sign symbol.
! 	* value-prof.c (get_nth_most_common_value): Restore handling
! 	of PROFILE_REPRODUCIBILITY_PARALLEL_RUNS and
! 	PROFILE_REPRODUCIBILITY_MULTITHREADED.
  
! 2021-01-25  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/98807
! 	* tree.c (vector_element_bits): Always use precision of
! 	the element type for boolean vectors.
  
! 2021-01-25  Sebastian Huber  <sebastian.huber@embedded-brains.de>
  
! 	* config/rtems.h (STARTFILE_SPEC): Remove qnolinkcmds.
! 	(ENDFILE_SPEC): Evaluate qnolinkcmds.
  
! 2021-01-25  Sebastian Huber  <sebastian.huber@embedded-brains.de>
  
! 	* config/rtems.h (STARTFILE_SPEC): Remove nostdlib and
! 	nostartfiles handling since this is already done by
! 	LINK_COMMAND_SPEC.  Evaluate qnolinkcmds.
! 	(ENDFILE_SPEC): Remove nostdlib and nostartfiles handling since this
! 	is already done by LINK_COMMAND_SPEC.
! 	(LIB_SPECS): Remove nostdlib and nodefaultlibs handling since
! 	this is already done by LINK_COMMAND_SPEC.  Remove qnolinkcmds
! 	evaluation.
  
! 2021-01-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR testsuite/98771
! 	* fold-const-call.c (host_size_t_cst_p): Renamed to ...
! 	(size_t_cst_p): ... this.  Check and store unsigned HOST_WIDE_INT
! 	value rather than host size_t.
! 	(fold_const_call): Change type of s2 from size_t to
! 	unsigned HOST_WIDE_INT.  Use size_t_cst_p instead of
! 	host_size_t_cst_p.  For strncmp calls, pass MIN (s2, SIZE_MAX)
! 	instead of s2 as last argument.
  
! 2021-01-25  Tamar Christina  <tamar.christina@arm.com>
  
! 	* config/arm/iterators.md (rotsplit1, rotsplit2, conj_op, fcmac1,
! 	VCMLA_OP, VCMUL_OP): New.
! 	* config/arm/mve.md (mve_vcmlaq<mve_rot><mode>): Support vec_dup 0.
! 	* config/arm/neon.md (cmul<conj_op><mode>3): New.
! 	* config/arm/unspecs.md (UNSPEC_VCMLA_CONJ, UNSPEC_VCMLA180_CONJ,
! 	UNSPEC_VCMUL_CONJ): New.
! 	* config/arm/vec-common.md (cmul<conj_op><mode>3, arm_vcmla<rot><mode>,
! 	cml<fcmac1><conj_op><mode>4): New.
  
! 2021-01-23  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR testsuite/97301
! 	* config/rs6000/mmintrin.h (__m64): Add __may_alias__ attribute.
  
! 2021-01-22  Jonathan Wright  <jonathan.wright@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def: Add mla builtin
! 	generator macro.
! 	* config/aarch64/arm_neon.h (vmla_s8): Use RTL builtin rather
! 	than asm.
! 	(vmla_s16): Likewise.
! 	(vmla_s32): Likewise.
! 	(vmla_u8): Likewise.
! 	(vmla_u16): Likewise.
! 	(vmla_u32): Likewise.
! 	(vmlaq_s8): Likewise.
! 	(vmlaq_s16): Likewise.
! 	(vmlaq_s32): Likewise.
! 	(vmlaq_u8): Likewise.
! 	(vmlaq_u16): Likewise.
! 	(vmlaq_u32): Likewise.
  
! 2021-01-22  David Malcolm  <dmalcolm@redhat.com>
  
! 	* doc/invoke.texi (GCC_EXTRA_DIAGNOSTIC_OUTPUT): Add @findex
! 	directive.
  
! 2021-01-22  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/98796
! 	* dwarf2out.c (output_file_names): For -gdwarf-5, if there are no
! 	filenames to emit, still emit the required 0 index directory and
! 	filename entries that match DW_AT_comp_dir and DW_AT_name of the
! 	compilation unit.
  
! 2021-01-22  Marek Polacek  <polacek@redhat.com>
  
! 	PR c++/98545
! 	* doc/invoke.texi: Update C++ ABI Version 15 description.
  
! 2021-01-22  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	PR tree-optimization/98766
! 	* tree-ssa-math-opts.c (convert_mult_to_fma): Use maybe_le when
! 	comparing against type size with param_avoid_fma_max_bits.
  
! 2021-01-22  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/98793
! 	* tree.c (vector_element_bits): Key single-bit bool vector on
! 	integer mode rather than not vector mode.
  
! 2021-01-22  Xionghu Luo  <luoxhu@linux.ibm.com>
  
! 	PR target/98093
! 	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
! 	Generate ARRAY_REF(VIEW_CONVERT_EXPR) for P8 and later
! 	platforms.
! 	* config/rs6000/rs6000.c (rs6000_expand_vector_set_var): Update
! 	to call different path for P8 and P9.
! 	(rs6000_expand_vector_set_var_p9): New function.
! 	(rs6000_expand_vector_set_var_p8): New function.
  
! 2021-01-22  Xionghu Luo  <luoxhu@linux.ibm.com>
  
! 	PR target/79251
! 	PR target/98065
! 	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
! 	Ajdust variable index vec_insert from address dereference to
! 	ARRAY_REF(VIEW_CONVERT_EXPR) tree expression.
! 	* config/rs6000/rs6000-protos.h (rs6000_expand_vector_set_var):
! 	New declaration.
! 	* config/rs6000/rs6000.c (rs6000_expand_vector_set_var): New function.
  
! 2021-01-22  Martin Liska  <mliska@suse.cz>
  
! 	PR gcov-profile/98739
! 	* profile.c (compute_value_histograms): Drop time profile for
! 	-fprofile-reproducible=multithreaded.
  
! 2021-01-22  Nathan Sidwell  <nathan@acm.org>
  
! 	* gcc.c (process_command): Don't check OPT_SPECIAL_input_file
! 	existence here.
  
! 2021-01-22  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/98773
! 	* tree-data-ref.c (initalize_matrix_A): Revert previous
! 	change, retaining failing on HOST_WIDE_INT_MIN CHREC_RIGHT.
  
! 2021-01-22  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/90248
! 	* match.pd (X cmp 0.0 ? 1.0 : -1.0 -> copysign(1, +-X),
! 	X cmp 0.0 ? -1.0 : +1.0 -> copysign(1, -+X)): Remove
! 	simplifications.
! 	(X * (X cmp 0.0 ? 1.0 : -1.0) -> +-abs(X),
! 	X * (X cmp 0.0 ? -1.0 : 1.0) -> +-abs(X)): New simplifications.
  
! 2021-01-22  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/98255
! 	* tree-dfa.c (get_ref_base_and_extent): For ARRAY_REFs, sign
! 	extend index - low_bound from sizetype's precision rather than index
! 	precision.
! 	(get_addr_base_and_unit_offset_1): Likewise.
! 	* tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Likewise.
! 	* gimple-fold.c (fold_const_aggregate_ref_1): Likewise.
  
! 2021-01-22  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98786
! 	* tree-ssa-phiopt.c (factor_out_conditional_conversion): Avoid
! 	adding new uses of abnormals.  Verify we deal with a conditional
! 	conversion.
  
! 2021-01-22  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
  
! 	PR target/98636
! 	* optc-save-gen.awk: Add arm_fp16_format to checked_options.
  
! 2021-01-22  liuhongt  <hongtao.liu@intel.com>
  
- 	PR target/96891
- 	PR target/98348
- 	* config/i386/sse.md (VI_128_256): New mode iterator.
- 	(*avx_cmp<mode>3_1, *avx_cmp<mode>3_2, *avx_cmp<mode>3_3,
- 	 *avx_cmp<mode>3_4, *avx2_eq<mode>3, *avx2_pcmp<mode>3_1,
- 	 *avx2_pcmp<mode>3_2, *avx2_gt<mode>3): New
- 	define_insn_and_split to lower avx512 vector comparison to avx
- 	version when dest is vector.
- 	(*<avx512>_cmp<mode>3,*<avx512>_cmp<mode>3,*<avx512>_ucmp<mode>3):
- 	define_insn_and_split for negating the comparison result.
- 	* config/i386/predicates.md (float_vector_all_ones_operand):
- 	New predicate.
  	* config/i386/i386-expand.c (ix86_expand_sse_movcc): Use
! 	general NOT operator without UNSPEC_MASKOP.
! 
! 2021-01-21  Vladimir N. Makarov  <vmakarov@redhat.com>
! 
! 	PR rtl-optimization/98777
! 	* lra-int.h (lra_pmode_pseudo): New extern.
! 	* lra.c (lra_pmode_pseudo): New global.
! 	(lra): Set it up.
! 	* lra-eliminations.c (eliminate_regs_in_insn): Use it.
! 
! 2021-01-21  Ilya Leoshkevich  <iii@linux.ibm.com>
! 
! 	* fwprop.c (fwprop_propagation::classify_result): Allow
! 	(subreg (mem)) simplifications.
! 
! 2021-01-21  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd.md (aarch64_sqdml<SBINQOPS:as>l<mode>):
! 	Split into...
! 	(aarch64_sqdmlal<mode>): ... This...
! 	(aarch64_sqdmlsl<mode>): ... And this.
! 	(aarch64_sqdml<SBINQOPS:as>l_lane<mode>): Split into...
! 	(aarch64_sqdmlal_lane<mode>): ... This...
! 	(aarch64_sqdmlsl_lane<mode>): ... And this.
! 	(aarch64_sqdml<SBINQOPS:as>l_laneq<mode>): Split into...
! 	(aarch64_sqdmlsl_laneq<mode>): ... This...
! 	(aarch64_sqdmlal_laneq<mode>):  ... And this.
! 	(aarch64_sqdml<SBINQOPS:as>l_n<mode>): Split into...
! 	(aarch64_sqdmlsl_n<mode>): ... This...
! 	(aarch64_sqdmlal_n<mode>): ... And this.
! 	(aarch64_sqdml<SBINQOPS:as>l2<mode>_internal): Split into...
! 	(aarch64_sqdmlal2<mode>_internal): ... This...
! 	(aarch64_sqdmlsl2<mode>_internal): ... And this.
! 
! 2021-01-21  Christophe Lyon  <christophe.lyon@linaro.org>
! 
! 	* config/arm/arm_mve.h (__arm_vcmpneq_s8): Fix return type.
! 
! 2021-01-21  Andrea Corallo  <andrea.corallo@arm.com>
! 
! 	PR target/96372
! 	* doc/sourcebuild.texi (arm_thumb2_no_arm_v8_1_lob): Document.
! 
! 2021-01-21  liuhongt  <hongtao.liu@intel.com>
! 
! 	PR rtl-optimization/98694
! 	* regcprop.c (copy_value): If SRC had been assigned a mode
! 	narrower than the copy, we can't link DEST into the chain even
! 	they have same hard_regno_nregs(i.e. HImode/SImode in i386
! 	backend).
! 
! 2021-01-20  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd.md (aarch64_get_lane<mode>):
! 	Convert to define_insn_and_split.  Split into simple move when moving
! 	bottom element.
! 
! 2021-01-20  Segher Boessenkool  <segher@kernel.crashing.org>
! 
! 	* config/rs6000/rs6000.c (rs6000_emit_le_vsx_store): Change assert.
! 	Adjust comment.  Simplify code.
! 
! 2021-01-20  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR debug/98765
! 	* dwarf2out.c (reset_indirect_string): Also reset indirect strings
! 	with DW_FORM_line_strp form.
! 	(prune_unused_types_update_strings): Don't add into debug_str_hash
! 	indirect strings with DW_FORM_line_strp form.
! 	(adjust_name_comp_dir): New function.
! 	(dwarf2out_finish): Call it on CU DIEs after resetting
! 	debug_line_str_hash.
! 
! 2021-01-20  Vladimir N. Makarov  <vmakarov@redhat.com>
! 
! 	PR rtl-optimization/98722
! 	* lra-eliminations.c (eliminate_regs_in_insn): Check that target
! 	has no 3-op add insn to transform insns containing two pluses.
! 
! 2021-01-20  Richard Biener  <rguenther@suse.de>
! 
! 	* hwint.h (add_hwi): New function.
! 	(mul_hwi): Likewise.
! 	* tree-data-ref.c (initialize_matrix_A): Properly translate
! 	tree constants and avoid HOST_WIDE_INT_MIN.
! 	(lambda_matrix_row_add): Avoid undefined integer overflow
! 	and return true on such overflow.
! 	(lambda_matrix_right_hermite): Handle overflow from
! 	lambda_matrix_row_add gracefully.  Simplify previous fix.
! 	(analyze_subscript_affine_affine): Likewise.
! 
! 2021-01-20  Eugene Rozenfeld  <erozen@microsoft.com>
! 
! 	PR tree-optimization/96674
! 	* match.pd: New patterns: x < y || y == XXX_MIN --> x <= y - 1
! 	x >= y && y != XXX_MIN --> x > y - 1
! 
! 2021-01-20  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	PR tree-optimization/98535
! 	* tree-vect-slp.c (duplicate_and_interleave): Use quick_grow_cleared.
! 	If the high and low permutes are the same, remove the high permutes
! 	from the working set and only continue with the low ones.
! 
! 2021-01-20  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/98721
! 	* builtins.c (access_ref::inform_access): Don't assume
! 	SSA_NAME_IDENTIFIER must be non-NULL.  Print messages about
! 	object whenever allocfn is NULL, rather than only when DECL_P
! 	is true.  Use %qE instead of %qD for that.  Formatting fixes.
! 
! 2021-01-20  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/98758
! 	* tree-data-ref.c (int_divides_p): Use lambda_int arguments.
! 	(lambda_matrix_right_hermite): Avoid undefinedness with
! 	signed integer abs and multiplication.
! 	(analyze_subscript_affine_affine): Use lambda_int.
! 
! 2021-01-20  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR debug/98751
! 	* dwarf2out.c (output_line_info): Rename static variable
! 	"generation", moving it out of the function to...
! 	(output_line_info_generation): New.
! 	(init_sections_and_labels): Likewise, renaming the variable to...
! 	(init_sections_and_labels_generation): New.
! 	(dwarf2out_c_finalize): Reset the new variables.
! 
! 2021-01-19  Martin Sebor  <msebor@redhat.com>
! 
! 	PR middle-end/98664
! 	* tree-ssa-live.c (remove_unused_scope_block_p): Keep scopes for
! 	all functions, even if they're not declared artificial or inline.
! 	* tree.c (tree_inlined_location): Use macro expansion location
! 	only if scope traversal fails to expose one.
! 
! 2021-01-19  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	PR rtl-optimization/92294
! 	* alias.c (compare_base_symbol_refs): Take an extra parameter
! 	and add the distance between two symbols to it.  Enshrine in
! 	comments that -1 means "either 0 or 1, but we can't tell
! 	which at compile time".
! 	(memrefs_conflict_p): Update call accordingly.
! 	(rtx_equal_for_memref_p): Likewise.  Take the distance between symbols
! 	into account.
! 
! 2021-01-19  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd-builtins.def (sqshl, uqshl,
! 	sqrshl, uqrshl, sqadd, uqadd, sqsub, uqsub, suqadd, usqadd, sqmovn,
! 	uqmovn, sqxtn2, uqxtn2, sqabs, sqneg, sqdmlal, sqdmlsl, sqdmlal_lane,
! 	sqdmlsl_lane, sqdmlal_laneq, sqdmlsl_laneq, sqdmlal_n, sqdmlsl_n,
! 	sqdmlal2, sqdmlsl2, sqdmlal2_lane, sqdmlsl2_lane, sqdmlal2_laneq,
! 	sqdmlsl2_laneq, sqdmlal2_n, sqdmlsl2_n, sqdmull, sqdmull_lane,
! 	sqdmull_laneq, sqdmull_n, sqdmull2, sqdmull2_lane, sqdmull2_laneq,
! 	sqdmull2_n, sqdmulh, sqrdmulh, sqdmulh_lane, sqdmulh_laneq,
! 	sqrdmulh_lane, sqrdmulh_laneq, sqshrun_n, sqrshrun_n, sqshrn_n,
! 	uqshrn_n, sqrshrn_n, uqrshrn_n, sqshlu_n, sqshl_n, uqshl_n, sqrdmlah,
! 	sqrdmlsh, sqrdmlah_lane, sqrdmlsh_lane, sqrdmlah_laneq, sqrdmlsh_laneq,
! 	sqmovun): Use NONE flags.
! 
! 2021-01-19  Richard Biener  <rguenther@suse.de>
! 
! 	PR ipa/98330
! 	* ipa-modref.c (analyze_stmt): Only record a summary for a
! 	direct call.
! 
! 2021-01-19  Richard Biener  <rguenther@suse.de>
! 
! 	PR middle-end/98638
! 	* tree-ssanames.c (fini_ssanames): Zero SSA_NAME_DEF_STMT.
! 
! 2021-01-19  Daniel Hellstrom  <daniel@gaisler.com>
! 
! 	* config/sparc/rtemself.h (TARGET_OS_CPP_BUILTINS): Add
! 	built-in define __FIX_LEON3FT_TN0018.
! 
! 2021-01-19  Richard Biener  <rguenther@suse.de>
! 
! 	PR ipa/97673
! 	* tree-inline.c (tree_function_versioning): Set input_location
! 	to UNKNOWN_LOCATION throughout the function.
! 
! 2021-01-19  Tobias Burnus  <tobias@codesourcery.com>
! 
! 	PR fortran/98476
! 	* omp-low.c (lower_omp_target): Handle nonpointer is_device_ptr.
! 
! 2021-01-19  Martin Jambor  <mjambor@suse.cz>
! 
! 	PR ipa/98690
! 	* ipa-sra.c (ssa_name_only_returned_p): New parameter fun.  Check
! 	whether non-call exceptions allow removal of a statement.
! 	(isra_analyze_call): Pass the appropriate function to
! 	ssa_name_only_returned_p.
! 
! 2021-01-19  Geng Qi  <gengqi@linux.alibaba.com>
! 
! 	* config/riscv/arch-canonicalize (longext_sort): New function for
! 	 sorting 'multi-letter'.
! 	* config/riscv/multilib-generator: Adjusting the loop of 'alt' in
! 	'alts'.	The 'arch' may not be the first of 'alts'.
! 	(_expand_combination): Add underline for the 'ext' without '*'.
! 	This is because, a single-letter extension can always be treated well
! 	with a '_' prefix, but it cannot be separated out if it is appended
! 	to a multi-letter.
! 
! 2021-01-18  Vladimir N. Makarov  <vmakarov@redhat.com>
! 
! 	PR target/97847
! 	* ira.c (ira): Skip abnormal critical edge splitting.
! 
! 2021-01-18  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/98727
! 	* tree-ssa-math-opts.c (match_arith_overflow): Fix up computation of
! 	second .MUL_OVERFLOW operand for signed multiplication with overflow
! 	checking if the second operand of multiplication is not constant.
! 
! 2021-01-18  David Edelsohn  <dje.gcc@gmail.com>
! 
! 	* doc/invoke.texi (-gdwarf): TPF defaults to version 2 and AIX
! 	defaults to version 4.
! 
! 2021-01-18  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* attribs.h (fndecl_dealloc_argno): New decl.
! 	* builtins.c (call_dealloc_argno): Split out second half of
! 	function into...
! 	(fndecl_dealloc_argno): New.
! 	* doc/extend.texi (Common Function Attributes): Document the
! 	interaction between the analyzer and the malloc attribute.
! 	* doc/invoke.texi (Static Analyzer Options): Likewise.
! 
! 2021-01-17  David Edelsohn  <dje.gcc@gmail.com>
! 
! 	* config/rs6000/aix71.h (SUBTARGET_OVERRIDE_OPTIONS): Override
! 	dwarf_version to 4.
! 	* config/rs6000/aix72.h (SUBTARGET_OVERRIDE_OPTIONS): Same.
! 
! 2021-01-17  Martin Jambor  <mjambor@suse.cz>
! 
! 	PR ipa/98222
! 	* cgraph.c (clone_of_p): Check also former_clone_of as we climb
! 	the clone tree.
! 
! 2021-01-17  Mark Wielaard  <mark@klomp.org>
! 
! 	* common.opt (gdwarf-): Init(5).
! 	* doc/invoke.texi (-gdwarf): Document default to 5.
! 
! 2021-01-16  Kwok Cheung Yeung  <kcy@codesourcery.com>
! 
! 	* builtin-types.def
! 	(BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT): Rename
! 	to...
! 	(BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT_PTR):
! 	...this.  Add extra argument.
! 	* gimplify.c (omp_default_clause): Ensure that event handle is
! 	firstprivate in a task region.
! 	(gimplify_scan_omp_clauses): Handle OMP_CLAUSE_DETACH.
! 	(gimplify_adjust_omp_clauses): Likewise.
! 	* omp-builtins.def (BUILT_IN_GOMP_TASK): Change function type to
! 	BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT_PTR.
! 	* omp-expand.c (expand_task_call): Add GOMP_TASK_FLAG_DETACH to flags
! 	if detach clause specified.  Add detach argument when generating
! 	call to	GOMP_task.
! 	* omp-low.c (scan_sharing_clauses): Setup data environment for detach
! 	clause.
! 	(finish_taskreg_scan): Move field for variable containing the event
! 	handle to the front of the struct.
! 	* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_DETACH.  Fix
! 	ordering.
! 	* tree-nested.c (convert_nonlocal_omp_clauses): Handle
! 	OMP_CLAUSE_DETACH clause.
! 	(convert_local_omp_clauses): Handle OMP_CLAUSE_DETACH clause.
! 	* tree-pretty-print.c (dump_omp_clause): Handle OMP_CLAUSE_DETACH.
! 	* tree.c (omp_clause_num_ops): Add entry for OMP_CLAUSE_DETACH.
! 	Fix ordering.
! 	(omp_clause_code_name): Add entry for OMP_CLAUSE_DETACH.  Fix
! 	ordering.
! 	(walk_tree_1): Handle OMP_CLAUSE_DETACH.
! 
! 2021-01-16  Sebastian Huber  <sebastian.huber@embedded-brains.de>
  
! 	* config/nios2/t-rtems: Reset all MULTILIB_* variables.  Shorten
! 	multilib directory names.  Use MULTILIB_REQUIRED instead of
! 	MULTILIB_EXCEPTIONS.  Add -mhw-mul -mhw-mulx -mhw-div
! 	-mcustom-fpu-cfg=fph2 multilib.
  
! 2021-01-16  Sebastian Huber  <sebastian.huber@embedded-brains.de>
  
! 	* config/nios2/nios2.c (NIOS2_FPU_CONFIG_NUM): Adjust value.
! 	(nios2_init_fpu_configs): Provide register values for new
! 	-mcustom-fpu-cfg=fph2 option variant.
! 	* doc/invoke.texi (-mcustom-fpu-cfg=fph2): Document new option
! 	variant.
  
! 2021-01-16  Sebastian Huber  <sebastian.huber@embedded-brains.de>
  
! 	* config/nios2/nios2.c (nios2_custom_check_insns): Remove
! 	custom instruction warnings.
  
! 2021-01-16  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/96669
! 	* match.pd ((CST << x) & 1 -> x == 0): New simplification.
  
! 2021-01-16  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/96271
! 	* passes.def: Pass false argument to first two pass_cd_dce
! 	instances and true to last instance.  Add comment that
! 	last instance rewrites no longer addressed locals.
! 	* tree-ssa-dce.c (pass_cd_dce): Add update_address_taken_p member and
! 	initialize it.
! 	(pass_cd_dce::set_pass_param): New method.
! 	(pass_cd_dce::execute): Return TODO_update_address_taken from
! 	last cd_dce instance.
  
! 2021-01-15  Carl Love  <cel@us.ibm.com>
  
! 	* config/rs6000/altivec.h (vec_mulh, vec_div, vec_dive, vec_mod):
! 	New defines.
! 	* config/rs6000/altivec.md (VIlong): Move define to file vsx.md.
! 	* config/rs6000/rs6000-builtin.def (DIVES_V4SI, DIVES_V2DI,
! 	DIVEU_V4SI, DIVEU_V2DI, DIVS_V4SI, DIVS_V2DI, DIVU_V4SI,
! 	DIVU_V2DI, MODS_V2DI, MODS_V4SI, MODU_V2DI, MODU_V4SI,
! 	MULHS_V2DI, MULHS_V4SI, MULHU_V2DI, MULHU_V4SI, MULLD_V2DI):
! 	Add builtin define.
! 	(MULH, DIVE, MOD):  Add new BU_P10_OVERLOAD_2 definitions.
! 	* config/rs6000/rs6000-call.c (VSX_BUILTIN_VEC_DIV,
! 	VSX_BUILTIN_VEC_DIVE, P10_BUILTIN_VEC_MOD, P10_BUILTIN_VEC_MULH):
! 	New overloaded definitions.
! 	(builtin_function_type) [P10V_BUILTIN_DIVEU_V4SI,
! 	P10V_BUILTIN_DIVEU_V2DI, P10V_BUILTIN_DIVU_V4SI,
! 	P10V_BUILTIN_DIVU_V2DI, P10V_BUILTIN_MODU_V2DI,
! 	P10V_BUILTIN_MODU_V4SI, P10V_BUILTIN_MULHU_V2DI,
! 	P10V_BUILTIN_MULHU_V4SI]: Add case
! 	statement for builtins.
! 	* config/rs6000/rs6000.md (bits): Add new attribute sizes V4SI, V2DI.
! 	* config/rs6000/vsx.md (VIlong): Moved from config/rs6000/altivec.md.
! 	(UNSPEC_VDIVES, UNSPEC_VDIVEU): New unspec definitions.
! 	(vsx_mul_v2di): Add if TARGET_POWER10 statement.
! 	(vsx_udiv_v2di): Add if TARGET_POWER10 statement.
! 	(dives_<mode>, diveu_<mode>, div<mode>3, uvdiv<mode>3,
! 	mods_<mode>, modu_<mode>, mulhs_<mode>, mulhu_<mode>, mulv2di3):
! 	Add define_insn, mode is VIlong.
! 	* doc/extend.texi (vec_mulh, vec_mul, vec_div, vec_dive, vec_mod):
! 	Add builtin descriptions.
  
! 2021-01-15  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* final.c (final_start_function_1): Reset force_source_line.
  
! 2021-01-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/96669
! 	* match.pd (((1 << A) & 1) != 0 -> A == 0,
! 	((1 << A) & 1) == 0 -> A != 0): Generalize for 1s replaced by
! 	possibly different power of two constants and to right shift too.
  
! 2021-01-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/96681
! 	* match.pd ((x < 0) ^ (y < 0) to (x ^ y) < 0): New simplification.
! 	((x >= 0) ^ (y >= 0) to (x ^ y) < 0): Likewise.
! 	((x < 0) ^ (y >= 0) to (x ^ y) >= 0): Likewise.
! 	((x >= 0) ^ (y < 0) to (x ^ y) >= 0): Likewise.
  
! 2021-01-15  Alexandre Oliva  <oliva@adacore.com>
  
! 	* opts.c (gen_command_line_string): Exclude -dumpbase-ext.
  
! 2021-01-15  Tamar Christina  <tamar.christina@arm.com>
  
! 	* config/aarch64/aarch64-simd.md (cml<fcmac1><conj_op><mode>4,
! 	cmul<conj_op><mode>3): New.
! 	* config/aarch64/iterators.md (UNSPEC_FCMUL,
! 	UNSPEC_FCMUL180, UNSPEC_FCMLA_CONJ, UNSPEC_FCMLA180_CONJ,
! 	UNSPEC_CMLA_CONJ, UNSPEC_CMLA180_CONJ, UNSPEC_CMUL, UNSPEC_CMUL180,
! 	FCMLA_OP, FCMUL_OP, conj_op, rotsplit1, rotsplit2, fcmac1, sve_rot1,
! 	sve_rot2, SVE2_INT_CMLA_OP, SVE2_INT_CMUL_OP, SVE2_INT_CADD_OP): New.
! 	(rot): Add UNSPEC_FCMUL, UNSPEC_FCMUL180.
! 	(rot_op): Renamed to conj_op.
! 	* config/aarch64/aarch64-sve.md (cml<fcmac1><conj_op><mode>4,
! 	cmul<conj_op><mode>3): New.
! 	* config/aarch64/aarch64-sve2.md (cml<fcmac1><conj_op><mode>4,
! 	cmul<conj_op><mode>3): New.
  
! 2021-01-15  David Malcolm  <dmalcolm@redhat.com>
  
! 	PR bootstrap/98696
! 	* diagnostic.c
! 	(selftest::test_print_parseable_fixits_bytes_vs_display_columns):
! 	Escape the tempfile name when constructing the expected output.
  
! 2021-01-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/aarch64-simd.md (*aarch64_<su>mlsl_hi<mode>):
! 	Rename to...
! 	(aarch64_<su>mlsl_hi<mode>): ... This.
! 	(aarch64_<su>mlsl_hi<mode>): Define.
! 	(*aarch64_<su>mlsl<mode): Rename to...
! 	(aarch64_<su>mlsl<mode): ... This.
! 	* config/aarch64/aarch64-simd-builtins.def (smlsl, umlsl,
! 	smlsl_hi, umlsl_hi): Define builtins.
! 	* config/aarch64/arm_neon.h (vmlsl_high_s8, vmlsl_high_s16,
! 	vmlsl_high_s32, vmlsl_high_u8, vmlsl_high_u16, vmlsl_high_u32,
! 	vmlsl_s8, vmlsl_s16, vmlsl_s32, vmlsl_u8,
! 	vmlsl_u16, vmlsl_u32): Reimplement with builtins.
  
! 2021-01-15  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	* config/i386/i386-c.c (ix86_target_macros):
! 	Use cpp_define_formatted for __SIZEOF_FLOAT80__ definition.
  
! 2021-01-15  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/88836
! 	* config.gcc (aarch64*-*-*): Add aarch64-cc-fusion.o to extra_objs.
! 	* Makefile.in (RTL_SSA_H): New variable.
! 	* config/aarch64/t-aarch64 (aarch64-cc-fusion.o): New rule.
! 	* config/aarch64/aarch64-protos.h (make_pass_cc_fusion): Declare.
! 	* config/aarch64/aarch64-passes.def: Add pass_cc_fusion after
! 	pass_combine.
! 	* config/aarch64/aarch64-cc-fusion.cc: New file.
  
! 2021-01-15  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* recog.h (insn_change_watermark::~insn_change_watermark): Avoid
! 	calling cancel_changes for changes that no longer exist.
  
! 2021-01-15  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* rtl-ssa/functions.h (function_info::ref_defs): Rename to...
! 	(function_info::reg_defs): ...this.
! 	* rtl-ssa/member-fns.inl (function_info::ref_defs): Rename to...
! 	(function_info::reg_defs): ...this.
  
! 2021-01-15  Christophe Lyon  <christophe.lyon@linaro.org>
  
! 	PR target/71233
! 	* config/arm/arm_neon.h (vceqz_p64, vceqq_p64, vceqzq_p64): New.
  
! 2021-01-15  Christophe Lyon  <christophe.lyon@linaro.org>
  
! 	Revert:
! 	2021-01-15  Christophe Lyon  <christophe.lyon@linaro.org>
  
! 	PR target/71233
! 	* config/arm/arm_neon.h (vceqz_p64, vceqq_p64, vceqzq_p64): New.
  
! 2021-01-15  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/96376
! 	* tree-vect-stmts.c (get_load_store_type): Disregard alignment
! 	for VMAT_INVARIANT.
  
! 2021-01-15  Martin Liska  <mliska@suse.cz>
  
! 	* doc/install.texi: Document that some tests need pytest module.
! 	* doc/sourcebuild.texi: Likewise.
  
! 2021-01-15  Christophe Lyon  <christophe.lyon@linaro.org>
  
! 	PR target/71233
! 	* config/arm/arm_neon.h (vceqz_p64, vceqq_p64, vceqzq_p64): New.
  
! 2021-01-15  Christophe Lyon  <christophe.lyon@linaro.org>
  
! 	* config/arm/mve.md (mve_vshrq_n_s<mode>_imm): New entry.
! 	(mve_vshrq_n_u<mode>_imm): Likewise.
! 	* config/arm/neon.md (vashr<mode>3, vlshr<mode>3): Move to ...
! 	* config/arm/vec-common.md: ... here.
  
! 2021-01-15  Christophe Lyon  <christophe.lyon@linaro.org>
  
! 	* config/arm/mve.md (mve_vshlq_<supf><mode>): Move to
! 	vec-commond.md.
! 	* config/arm/neon.md (vashl<mode>3): Delete.
! 	* config/arm/vec-common.md (mve_vshlq_<supf><mode>): New.
! 	(vasl<mode>3): New expander.
  
! 2021-01-15  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98685
! 	* tree-vect-slp.c (vect_schedule_slp_node): Refactor handling
! 	of vector extern defs.
  
! 2021-01-14  David Malcolm  <dmalcolm@redhat.com>
  
! 	PR jit/98586
! 	* diagnostic.c (diagnostic_kind_text): Break out this array
! 	from...
! 	(diagnostic_build_prefix): ...here.
! 	(fancy_abort): Detect when diagnostic_initialize has not yet been
! 	called and fall back to a minimal implementation of printing the
! 	ICE, rather than segfaulting in internal_error.
  
! 2021-01-14  David Malcolm  <dmalcolm@redhat.com>
  
! 	* diagnostic.c (diagnostic_initialize): Eliminate
! 	parseable_fixits_p in favor of initializing extra_output_kind from
! 	GCC_EXTRA_DIAGNOSTIC_OUTPUT.
! 	(convert_column_unit): New function, split out from...
! 	(diagnostic_converted_column): ...this.
! 	(print_parseable_fixits): Add "column_unit" and "tabstop" params.
! 	Use them to call convert_column_unit on the column values.
! 	(diagnostic_report_diagnostic): Eliminate conditional on
! 	parseable_fixits_p in favor of a switch statement on
! 	extra_output_kind, passing the appropriate values to the new
! 	params of print_parseable_fixits.
! 	(selftest::test_print_parseable_fixits_none): Update for new
! 	params of print_parseable_fixits.
! 	(selftest::test_print_parseable_fixits_insert): Likewise.
! 	(selftest::test_print_parseable_fixits_remove): Likewise.
! 	(selftest::test_print_parseable_fixits_replace): Likewise.
! 	(selftest::test_print_parseable_fixits_bytes_vs_display_columns):
! 	New.
! 	(selftest::diagnostic_c_tests): Call it.
! 	* diagnostic.h (enum diagnostics_extra_output_kind): New.
! 	(diagnostic_context::parseable_fixits_p): Delete field in favor
  	of...
! 	(diagnostic_context::extra_output_kind): ...this new field.
! 	* doc/invoke.texi (Environment Variables): Add
! 	GCC_EXTRA_DIAGNOSTIC_OUTPUT.
! 	* opts.c (common_handle_option): Update handling of
! 	OPT_fdiagnostics_parseable_fixits for change to diagnostic_context
! 	fields.
! 
! 2021-01-14  Tamar Christina  <tamar.christina@arm.com>
! 
! 	* tree-vect-slp-patterns.c (class complex_operations_pattern,
! 	complex_operations_pattern::matches,
! 	complex_operations_pattern::recognize,
! 	complex_operations_pattern::build): New.
! 	(slp_patterns): Use it.
! 
! 2021-01-14  Tamar Christina  <tamar.christina@arm.com>
! 
! 	* internal-fn.def (COMPLEX_FMS, COMPLEX_FMS_CONJ): New.
! 	* optabs.def (cmls_optab, cmls_conj_optab): New.
! 	* doc/md.texi: Document them.
! 	* tree-vect-slp-patterns.c (class complex_fms_pattern,
! 	complex_fms_pattern::matches, complex_fms_pattern::recognize,
! 	complex_fms_pattern::build): New.
! 
! 2021-01-14  Tamar Christina  <tamar.christina@arm.com>
! 
! 	* internal-fn.def (COMPLEX_FMA, COMPLEX_FMA_CONJ): New.
! 	* optabs.def (cmla_optab, cmla_conj_optab): New.
! 	* doc/md.texi: Document them.
! 	* tree-vect-slp-patterns.c (vect_match_call_p,
! 	class complex_fma_pattern, vect_slp_reset_pattern,
! 	complex_fma_pattern::matches, complex_fma_pattern::recognize,
! 	complex_fma_pattern::build): New.
! 
! 2021-01-14  Tamar Christina  <tamar.christina@arm.com>
! 
! 	* internal-fn.def (COMPLEX_MUL, COMPLEX_MUL_CONJ): New.
! 	* optabs.def (cmul_optab, cmul_conj_optab): New.
! 	* doc/md.texi: Document them.
! 	* tree-vect-slp-patterns.c (vect_match_call_complex_mla,
! 	vect_normalize_conj_loc, is_eq_or_top, vect_validate_multiplication,
! 	vect_build_combine_node, class complex_mul_pattern,
! 	complex_mul_pattern::matches, complex_mul_pattern::recognize,
! 	complex_mul_pattern::build): New.
! 
! 2021-01-14  Tamar Christina  <tamar.christina@arm.com>
! 
! 	* tree-vect-slp.c (optimize_load_redistribution_1): New.
! 	(optimize_load_redistribution, vect_is_slp_load_node): New.
! 	(vect_match_slp_patterns): Use it.
! 
! 2021-01-14  Tamar Christina  <tamar.christina@arm.com>
! 
! 	* tree-vect-slp-patterns.c (complex_add_pattern::build):
! 	Elide nodes.
! 
! 2021-01-14  Thomas Schwinge  <thomas@codesourcery.com>
! 
! 	* config/gcn/mkoffload.c (main): Create an offload image only in
! 	64-bit configurations.
! 
! 2021-01-14  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/98667
! 	* config/i386/i386-options.c (ix86_option_override_internal):
! 	Issue an error for -fcf-protection with CF_BRANCH when compiling
! 	for 32-bit non-TARGET_CMOV targets.
! 
! 2021-01-14  Uroš Bizjak  <ubizjak@gmail.com>
! 
! 	PR target/98671
! 	* config/i386/i386-options.c (ix86_valid_target_attribute_inner_p):
! 	Remove declaration and initialization of shadow variable "ret".
! 	(ix86_option_override_internal): Remove delcaration of
! 	shadow variable "i".  Redeclare shadowed variable to unsigned.
! 	* common/config/i386/i386-common.c (pta_size): Redeclare to unsigned.
! 	* config/i386/i386-builtins.c (get_builtin_code_for_version):
! 	Update for redeclaration.
! 	* config/i386/i386.h (pta_size): Ditto.
! 
! 2021-01-14  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/98674
! 	* tree-data-ref.c (base_supports_access_fn_components_p): New.
! 	(initialize_data_dependence_relation): For two bases without
! 	possible access fns resort to type size equality when determining
! 	shape compatibility.
! 
! 2021-01-14  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
! 
! 	PR target/66791
! 	* config/arm/arm_neon.h: Replace calls to __builtin_vcge* by
! 	<=, >= operators in vcle and vcge intrinsics respectively.
! 	* config/arm/arm_neon_builtins.def: Remove entry for
! 	vcge and vcgeu.
! 
! 2021-01-14  Uroš Bizjak  <ubizjak@gmail.com>
! 
! 	PR target/98671
! 	* config/i386/i386-options.c (ix86_function_specific_save):
! 	Remove redundant assignment to opts->x_ix86_branch_cost.
! 	* config/i386/i386.c (ix86_prefetch_sse):
! 	Rename from x86_prefetch_sse.  Update all uses.
! 	* config/i386/i386.h: Update for rename.
! 	* config/i386/i386-options.h: Ditto.
! 
! 2021-01-14  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/98670
! 	* config/i386/sse.md (*sse4_1_zero_extendv8qiv8hi2_3,
! 	*sse4_1_zero_extendv4hiv4si2_3, *sse4_1_zero_extendv2siv2di2_3):
! 	Use Bm instead of m for non-avx.  Add isa attribute.
! 
! 2021-01-14  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/96688
! 	* match.pd (~(X >> Y) -> ~X >> Y): New simplification if
! 	~X can be simplified.
! 
! 2021-01-14  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* tree-vect-stmts.c (vect_model_load_cost): Account for unused
! 	IFN_LOAD_LANES results.
! 
! 2021-01-14  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd.md (aarch64_<su>xtl<mode>):
! 	Define.
! 	(aarch64_xtn<mode>): Likewise.
! 	* config/aarch64/aarch64-simd-builtins.def (sxtl, uxtl, xtn):
! 	Define
! 	builtins.
! 	* config/aarch64/arm_neon.h (vmovl_s8): Reimplement using
! 	builtin.
! 	(vmovl_s16): Likewise.
! 	(vmovl_s32): Likewise.
! 	(vmovl_u8): Likewise.
! 	(vmovl_u16): Likewise.
! 	(vmovl_u32): Likewise.
! 	(vmovn_s16): Likewise.
! 	(vmovn_s32): Likewise.
! 	(vmovn_s64): Likewise.
! 	(vmovn_u16): Likewise.
! 	(vmovn_u32): Likewise.
! 	(vmovn_u64): Likewise.
! 
! 2021-01-14  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd.md (aarch64_<su>qxtn2<mode>_le):
! 	Define.
! 	(aarch64_<su>qxtn2<mode>_be): Likewise.
! 	(aarch64_<su>qxtn2<mode>): Likewise.
! 	* config/aarch64/aarch64-simd-builtins.def (sqxtn2, uqxtn2):
! 	Define builtins.
! 	* config/aarch64/iterators.md (SAT_TRUNC): Define code_iterator.
! 	(su): Handle ss_truncate and us_truncate.
! 	* config/aarch64/arm_neon.h (vqmovn_high_s16): Reimplement using
! 	builtin.
! 	(vqmovn_high_s32): Likewise.
! 	(vqmovn_high_s64): Likewise.
! 	(vqmovn_high_u16): Likewise.
! 	(vqmovn_high_u32): Likewise.
! 	(vqmovn_high_u64): Likewise.
! 
! 2021-01-14  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/aarch64-simd.md (aarch64_xtn2<mode>_le):
! 	Define.
! 	(aarch64_xtn2<mode>_be): Likewise.
! 	(aarch64_xtn2<mode>): Likewise.
! 	* config/aarch64/aarch64-simd-builtins.def (xtn2): Define
! 	builtins.
! 	* config/aarch64/arm_neon.h (vmovn_high_s16): Reimplement using
! 	builtins.
! 	(vmovn_high_s32): Likewise.
! 	(vmovn_high_s64): Likewise.
! 	(vmovn_high_u16): Likewise.
! 	(vmovn_high_u32): Likewise.
! 	(vmovn_high_u64): Likewise.
! 
! 2021-01-13  Stafford Horne  <shorne@gmail.com>
! 
! 	* config/or1k/or1k.h (ASM_PREFERRED_EH_DATA_FORMAT): New macro.
! 
! 2021-01-13  Stafford Horne  <shorne@gmail.com>
! 
! 	* config/or1k/linux.h (TARGET_ASM_FILE_END): Define macro.
! 
! 2021-01-13  Stafford Horne  <shorne@gmail.com>
! 
! 	* config/or1k/or1k.h (TARGET_CPU_CPP_BUILTINS): Add builtin
! 	  define for __or1k_hard_float__.
! 
! 2021-01-13  Stafford Horne  <shorne@gmail.com>
! 
! 	* config/or1k/or1k.h (NO_PROFILE_COUNTERS): Define as 1.
! 	(PROFILE_HOOK): Define to call _mcount.
! 	(FUNCTION_PROFILER): Change from abort to no-op.
! 
! 2021-01-13  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/96691
! 	* match.pd ((~X | C) ^ D -> (X | C) ^ (~D ^ C),
! 	(~X & C) ^ D -> (X & C) ^ (D ^ C)): New simplifications if
! 	(~D ^ C) or (D ^ C) can be simplified.
! 
! 2021-01-13  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/92645
! 	* match.pd (BIT_FIELD_REF to conversion): Delay canonicalization
! 	until after vector lowering.
! 
! 2021-01-13  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-sve.md (fnma<mode>4): Extend from SVE_FULL_I
! 	to SVE_I.
! 	(@aarch64_pred_fnma<mode>, cond_fnma<mode>, *cond_fnma<mode>_2)
! 	(*cond_fnma<mode>_4, *cond_fnma<mode>_any): Likewise.
  
! 2021-01-13  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64-sve.md (fma<mode>4): Extend from SVE_FULL_I
! 	to SVE_I.
! 	(@aarch64_pred_fma<mode>, cond_fma<mode>, *cond_fma<mode>_2)
! 	(*cond_fma<mode>_4, *cond_fma<mode>_any): Likewise.
  
! 2021-01-13  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/92645
! 	* tree-vect-slp.c (vect_build_slp_tree_1): Relax supported
! 	BIT_FIELD_REF argument.
! 	(vect_build_slp_tree_2): Record the desired vector type
! 	on the external vector def.
! 	(vectorizable_slp_permutation): Handle required punning
! 	of existing vector defs.
  
! 2021-01-13  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* rtl-ssa/accesses.h (def_lookup): Fix order of comparison results.
  
! 2021-01-13  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/sh/sh.md (movsf_ie): Remove operands[2] test.
  
! 2021-01-13  Samuel Thibault  <samuel.thibault@ens-lyon.org>
  
! 	* config.gcc [$target == *-*-gnu*]: Enable
! 	'default_gnu_indirect_function'.
  
! 2021-01-13  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/95905
! 	* optabs.c (expand_vec_perm_const): Don't force v0 and v1 into
! 	registers before calling targetm.vectorize.vec_perm_const, only after
! 	that.
! 	* config/i386/i386-expand.c (ix86_vectorize_vec_perm_const): Handle
! 	two argument permutation when one operand is zero vector and only
! 	after that force operands into registers.
! 	* config/i386/sse.md (*avx2_zero_extendv16qiv16hi2_1): New
! 	define_insn_and_split pattern.
! 	(*avx512bw_zero_extendv32qiv32hi2_1): Likewise.
! 	(*avx512f_zero_extendv16hiv16si2_1): Likewise.
! 	(*avx2_zero_extendv8hiv8si2_1): Likewise.
! 	(*avx512f_zero_extendv8siv8di2_1): Likewise.
! 	(*avx2_zero_extendv4siv4di2_1): Likewise.
! 	* config/mips/mips.c (mips_vectorize_vec_perm_const): Force operands
! 	into registers.
! 	* config/arm/arm.c (arm_vectorize_vec_perm_const): Likewise.
! 	* config/sparc/sparc.c (sparc_vectorize_vec_perm_const): Likewise.
! 	* config/ia64/ia64.c (ia64_vectorize_vec_perm_const): Likewise.
! 	* config/aarch64/aarch64.c (aarch64_vectorize_vec_perm_const): Likewise.
! 	* config/rs6000/rs6000.c (rs6000_vectorize_vec_perm_const): Likewise.
! 	* config/gcn/gcn.c (gcn_vectorize_vec_perm_const): Likewise.  Use std::swap.
  
! 2021-01-13  Martin Liska  <mliska@suse.cz>
  
! 	PR tree-optimization/98455
! 	* gimple-if-to-switch.cc (condition_info::record_phi_mapping):
! 	Record also virtual PHIs.
! 	(pass_if_to_switch::execute): Return TODO_cleanup_cfg only
! 	conditionally.
  
! 2021-01-13  Jonathan Wakely  <jwakely@redhat.com>
  
! 	* doc/invoke.texi (C++ Modules): Fix typos.
  
! 2021-01-13  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98640
! 	* tree-ssa-sccvn.c (visit_nary_op): Do not try to
! 	handle plus or minus from a truncated operand to be
! 	sign-extended.
  
! 2021-01-13  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/96938
! 	* config/i386/i386.md (*btr<mode>_1, *btr<mode>_2): New
! 	define_insn_and_split patterns.
! 	(splitter after *btr<mode>_2): New splitter.
  
! 2021-01-13  Martin Liska  <mliska@suse.cz>
  
! 	PR ipa/98652
! 	* cgraphunit.c (analyze_functions): Remove dead code.
  
! 2021-01-13  Qian Jianhua  <qianjh@cn.fujitsu.com>
  
! 	* config/aarch64/aarch64-cost-tables.h (a64fx_extra_costs): New.
! 	* config/aarch64/aarch64.c (a64fx_addrcost_table): New.
! 	(a64fx_regmove_cost, a64fx_vector_cost): New.
! 	(a64fx_tunings): Use the new added cost tables.
  
! 2021-01-13  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/95905
! 	* config/i386/predicates.md (pmovzx_parallel): New predicate.
! 	* config/i386/sse.md (*sse4_1_zero_extendv8qiv8hi2_3): New
! 	define_insn_and_split pattern.
! 	(*sse4_1_zero_extendv4hiv4si2_3): Likewise.
! 	(*sse4_1_zero_extendv2siv2di2_3): Likewise.
  
! 2021-01-13  Julian Brown  <julian@codesourcery.com>
  
! 	* config/gcn/gcn.c (gcn_conditional_register_usage): Remove dead code
! 	to fix v0 register.
  
! 2021-01-13  Julian Brown  <julian@codesourcery.com>
  
! 	* config/gcn/gcn.c (gcn_md_reorg): Fix case where EXEC reg is live
! 	on entry to a BB.
  
! 2021-01-13  Julian Brown  <julian@codesourcery.com>
  
! 	* config/gcn/gcn-valu.md (recip<mode>2<exec>, recip<mode>2): Use unspec
! 	for reciprocal-approximation instructions.
! 	(div<mode>3): Use fused multiply-accumulate operations for reciprocal
! 	refinement and division result.
! 	* config/gcn/gcn.md (UNSPEC_RCP): New unspec constant.
  
! 2021-01-13  Julian Brown  <julian@codesourcery.com>
  
! 	* config/gcn/gcn-valu.md (subdf): Rename to...
! 	(subdf3): This.
  
! 2021-01-12  Martin Liska  <mliska@suse.cz>
  
! 	* gcov.c (source_info::debug): Fix printf format for 32-bit hosts.
  
! 2021-01-12  Andrea Corallo  <andrea.corallo@arm.com>
  
! 	* function-abi.h: Fix typo.
  
! 2021-01-12  Christophe Lyon  <christophe.lyon@linaro.org>
  
! 	PR target/97875
! 	PR target/97875
! 	* config/arm/arm.h (ARM_HAVE_NEON_V8QI_LDST): New macro.
! 	(ARM_HAVE_NEON_V16QI_LDST, ARM_HAVE_NEON_V4HI_LDST): Likewise.
! 	(ARM_HAVE_NEON_V8HI_LDST, ARM_HAVE_NEON_V2SI_LDST): Likewise.
! 	(ARM_HAVE_NEON_V4SI_LDST, ARM_HAVE_NEON_V4HF_LDST): Likewise.
! 	(ARM_HAVE_NEON_V8HF_LDST, ARM_HAVE_NEON_V4BF_LDST): Likewise.
! 	(ARM_HAVE_NEON_V8BF_LDST, ARM_HAVE_NEON_V2SF_LDST): Likewise.
! 	(ARM_HAVE_NEON_V4SF_LDST, ARM_HAVE_NEON_DI_LDST): Likewise.
! 	(ARM_HAVE_NEON_V2DI_LDST): Likewise.
! 	(ARM_HAVE_V8QI_LDST, ARM_HAVE_V16QI_LDST): Likewise.
! 	(ARM_HAVE_V4HI_LDST, ARM_HAVE_V8HI_LDST): Likewise.
! 	(ARM_HAVE_V2SI_LDST, ARM_HAVE_V4SI_LDST, ARM_HAVE_V4HF_LDST): Likewise.
! 	(ARM_HAVE_V8HF_LDST, ARM_HAVE_V4BF_LDST, ARM_HAVE_V8BF_LDST): Likewise.
! 	(ARM_HAVE_V2SF_LDST, ARM_HAVE_V4SF_LDST, ARM_HAVE_DI_LDST): Likewise.
! 	(ARM_HAVE_V2DI_LDST): Likewise.
! 	* config/arm/mve.md (*movmisalign<mode>_mve_store): New pattern.
! 	(*movmisalign<mode>_mve_load): New pattern.
! 	* config/arm/neon.md (movmisalign<mode>): Move to ...
! 	* config/arm/vec-common.md: ... here.
  
! 2021-01-12  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR target/97969
! 	* lra-eliminations.c (eliminate_regs_in_insn): Add transformation
! 	of pattern 'plus (plus (hard reg, const), pseudo)'.
  
! 2021-01-12  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98550
! 	* tree-vect-slp.c (vect_record_max_nunits): Check whether
! 	the group size is a multiple of the vector element count.
! 	(vect_build_slp_tree_1): When we need to fail because
! 	the vector type choosen causes unrolling do so lazily
! 	without affecting matches only at the end to guide group splitting.
  
! 2021-01-12  Martin Liska  <mliska@suse.cz>
  
! 	PR c++/97284
! 	* optc-save-gen.awk: Compare also n_target_save vars with
! 	strcmp.
  
! 2021-01-12  Martin Liska  <mliska@suse.cz>
  
! 	* gcov.c (source_info::debug): New.
! 	(print_usage): Add --debug (-D) option.
! 	(process_args): Likewise.
! 	(generate_results): Call src->debug after
! 	accumulate_line_counts.
! 	(read_graph_file): Properly assign id for EXIT_BLOCK.
! 	* profile.c (branch_prob): Dump function body before it is
! 	instrumented.
  
! 2021-01-12  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/98629
! 	* tree-ssa-math-opts.c (arith_overflow_check_p): Don't update use_stmt
! 	unless returning non-zero.
  
! 2021-01-12  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/95731
! 	* tree-ssa-reassoc.c (optimize_range_tests_cmp_bitwise): Also optimize
! 	x < 0 && y < 0 && z < 0 into (x | y | z) < 0 for signed x, y, z.
! 	(optimize_range_tests): Call optimize_range_tests_cmp_bitwise
! 	only after optimize_range_tests_var_bound.
  
! 2021-01-12  Jakub Jelinek  <jakub@redhat.com>
  
! 	* configure.ac: Ensure c/Make-lang.in comes first in @all_lang_makefrags@.
! 	* configure: Regenerated.
  
! 2021-01-12  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/98612
! 	* config/i386/i386-builtins.h (BUILTIN_DESC_SWAP_OPERANDS):
! 	Deleted.
! 	* config/i386/i386-expand.c (ix86_expand_sse_comi): Delete
! 	dead code.
  
! 2021-01-12  Alexandre Oliva  <oliva@adacore.com>
  
! 	* ssa-iterators.h (end_imm_use_stmt_traverse): Forward
  	declare.
! 	(auto_end_imm_use_stmt_traverse): New struct.
! 	(FOR_EACH_IMM_USE_STMT): Use it.
! 	(BREAK_FROM_IMM_USE_STMT, RETURN_FROM_IMM_USE_STMT): Remove,
! 	along with uses...
! 	* gimple-ssa-strength-reduction.c: ... here, ...
! 	* graphite-scop-detection.c: ... here, ...
! 	* ipa-modref.c, ipa-pure-const.c, ipa-sra.c: ... here, ...
! 	* tree-predcom.c, tree-ssa-ccp.c: ... here, ...
! 	* tree-ssa-dce.c, tree-ssa-dse.c: ... here, ...
! 	* tree-ssa-loop-ivopts.c, tree-ssa-math-opts.c: ... here, ...
! 	* tree-ssa-phiprop.c, tree-ssa.c: ... here, ...
! 	* tree-vect-slp.c: ... and here, ...
! 	* doc/tree-ssa.texi: ... and the example here.
! 
! 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-sve.md (sdiv_pow2<mode>3): Extend from
! 	SVE_FULL_I to SVE_I.  Generate an UNSPEC_PRED_X.
! 	(*sdiv_pow2<mode>3): New pattern.
! 	(@cond_<sve_int_op><mode>): Extend from SVE_FULL_I to SVE_I.
! 	Wrap the ASRD in an UNSPEC_PRED_X.
! 	(*cond_<sve_int_op><mode>_2): Likewise.  Replace the UNSPEC_PRED_X
! 	predicate with a constant PTRUE, if it isn't already.
! 	(*cond_<sve_int_op><mode>_z): Replace with...
! 	(*cond_<sve_int_op><mode>_any): ...this new pattern.
! 
! 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-sve.md (*cond_bic<mode>_2): Extend from
! 	SVE_FULL_I to SVE_I.
! 	(*cond_bic<mode>_any): Likewise.
! 
! 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-sve.md (<su>mul<mode>3_highpart)
! 	(@aarch64_pred_<MUL_HIGHPART:optab><mode>): Extend from SVE_FULL_I
! 	to SVE_I.
! 
! 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-sve.md (<su>abd<mode>_3): Extend from
! 	SVE_FULL_I to SVE_I.
! 	(*aarch64_cond_<su>abd<mode>_2): Likewise.
! 	(*aarch64_cond_<su>abd<mode>_any): Likewise.
! 	(@aarch64_pred_<su>abd<mode>): Likewise.  Use UNSPEC_PRED_X
! 	for the max and min but not for the minus.
! 	(*aarch64_cond_<su>abd<mode>_3): New pattern.
! 
! 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/iterators.md (SVE_24I): New iterator.
! 	* config/aarch64/aarch64-sve.md (*aarch64_adr<mode>_shift): Extend from
! 	SVE_FULL_SDI to SVE_24I.  Use containers rather than elements.
! 
! 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-sve.md (@cond_<SVE_INT_BINARY:optab><mode>)
! 	(*cond_<SVE_INT_BINARY:optab><mode>_2): Extend from SVE_FULL_I
! 	to SVE_I.
! 	(*cond_<SVE_INT_BINARY:optab><mode>_3): Likewise.
! 	(*cond_<SVE_INT_BINARY:optab><mode>_any): Likewise.
! 	(*cond_<SVE_INT_BINARY:optab><mode>_2_const): Likewise.
! 	(*cond_<SVE_INT_BINARY:optab><mode>_any_const): Likewise.
! 
! 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-sve.md (<SVE_INT_BINARY_IMM:optab><mode>3)
! 	(@aarch64_pred_<SVE_INT_BINARY_IMM:optab><mode>)
! 	(*post_ra_<SVE_INT_BINARY_IMM:optab><mode>3): Extend from SVE_FULL_I
! 	to SVE_I.
! 
! 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-sve.md (<ASHIFT:optab><mode>3)
! 	(v<ASHIFT:optab><mode>3, @aarch64_pred_<optab><mode>)
! 	(*post_ra_v<ASHIFT:optab><mode>3): Extend from SVE_FULL_I to SVE_I.
! 
! 2021-01-11  Martin Liska  <mliska@suse.cz>
! 
! 	PR jit/98615
! 	* symtab-clones.h (clone_info::release): Release
! 	symtab::m_clones with ggc_delete as it's a GGC memory.
! 
! 2021-01-11  Matthias Klose  <doko@ubuntu.com>
! 
! 	* Makefile.in (LINK_PROGRESS): Show the link target.
! 
! 2021-01-11  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/91403
! 	* tree-vect-data-refs.c (vect_analyze_group_access_1): Cap
! 	single-element interleaving group size at 4096 elements.
! 
! 2021-01-11  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/98526
! 	* tree-vect-loop.c (vect_model_reduction_cost): Remove costing
! 	of the actual reduction op for the regular case.
! 	(vectorizable_reduction): Cost the stmts
! 	vect_transform_reduction produces here.
! 
! 2021-01-11  Andreas Krebbel  <krebbel@linux.ibm.com>
! 
! 	* tree-ssa-forwprop.c (simplify_vector_constructor): For
! 	big-endian, use UNPACK[_FLOAT]_HI.
! 
! 2021-01-11  Tamar Christina  <tamar.christina@arm.com>
! 
! 	* tree-vect-slp-patterns.c (class complex_pattern,
! 	class complex_add_pattern): Add parameters to matches.
! 	(complex_add_pattern::build): Free memory.
! 	(complex_add_pattern::matches): Move validation end of match.
! 	(complex_add_pattern::recognize): Likewise.
! 
! 2021-01-11  Tamar Christina  <tamar.christina@arm.com>
! 
! 	* tree-vect-slp-patterns.c (linear_loads_p): Fix externals.
! 
! 2021-01-11  Tamar Christina  <tamar.christina@arm.com>
! 
! 	* tree-vect-slp-patterns.c (is_linear_load_p): Fix ambiguity.
! 
! 2021-01-11  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/95867
! 	* tree-ssa-math-opts.h: New header.
! 	* tree-ssa-math-opts.c: Include tree-ssa-math-opts.h.
! 	(powi_as_mults): No longer static.  Use build_one_cst instead of
! 	build_real.  Formatting fix.
! 	* tree-ssa-reassoc.c: Include tree-ssa-math-opts.h.
! 	(attempt_builtin_powi): Handle multiplication reassociation without
! 	powi_fndecl using powi_as_mults.
! 	(reassociate_bb): For integral types don't require
! 	-funsafe-math-optimizations to call attempt_builtin_powi.
! 
! 2021-01-11  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/95852
! 	* tree-ssa-math-opts.c (maybe_optimize_guarding_check): Change
! 	mul_stmts parameter type to vec<gimple *> &.  Before cond_stmt
! 	allow in the bb any of the stmts in that vector, div_stmt and
! 	up to 3 cast stmts.
! 	(arith_cast_equal_p): New function.
! 	(arith_overflow_check_p): Add cast_stmt argument, handle signed
! 	multiply overflow checks.
! 	(match_arith_overflow): Adjust caller.  Handle signed multiply
! 	overflow checks.
! 
! 2021-01-11  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR tree-optimization/95852
! 	* tree-ssa-math-opts.c (maybe_optimize_guarding_check): New function.
! 	(uaddsub_overflow_check_p): Renamed to ...
! 	(arith_overflow_check_p): ... this.  Handle also multiplication
! 	with overflow check.
! 	(match_uaddsub_overflow): Renamed to ...
! 	(match_arith_overflow): ... this.  Add cfg_changed argument.  Handle
! 	also multiplication with overflow check.  Adjust function comment.
! 	(math_opts_dom_walker::after_dom_children): Adjust callers.  Call
! 	match_arith_overflow also for MULT_EXPR.
! 
! 2021-01-11  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
! 
! 	* config/aarch64/arm_neon.h (vmovl_s8): Reimplement using
! 	__builtin_convertvector.
! 	(vmovl_s16): Likewise.
! 	(vmovl_s32): Likewise.
! 	(vmovl_u8): Likewise.
! 	(vmovl_u16): Likewise.
! 	(vmovl_u32): Likewise.
! 	(vmovn_s16): Likewise.
! 	(vmovn_s32): Likewise.
! 	(vmovn_s64): Likewise.
! 	(vmovn_u16): Likewise.
! 	(vmovn_u32): Likewise.
! 	(vmovn_u64): Likewise.
! 
! 2021-01-11  Martin Liska  <mliska@suse.cz>
! 
! 	* gimple-if-to-switch.cc (struct condition_info): Use auto_var.
! 	(if_chain::is_beneficial): Delete clusters
! 	(find_conditions): Make second argument of conditions_in_bbs a
! 	pointer so that we control over it's lifetime.
! 	(pass_if_to_switch::execute): Delete them.
! 
! 2021-01-11  Kewen Lin  <linkw@linux.ibm.com>
! 
! 	* ira.c (move_unallocated_pseudos): Check other_reg and skip if
! 	it isn't set.
! 
! 2021-01-09  Maciej W. Rozycki  <macro@linux-mips.org>
! 
! 	* config/vax/vax.md (cc): Remove mode attribute.
! 	(subst_<cc>, subst_f<cc>): Rename to...
! 	(subst_<mode>, subst_f<VAXccnz:mode>): ... these respectively.
! 	(*cbranch<VAXint:mode>4_<VAXcc:mode>): Update for `cc' removal.
! 	(*cbranch<VAXfp:mode>4_<VAXccnz:mode>): Likewise.
! 	(*branch_<mode>, *branch_<mode>_reversed): Likewise.
! 
! 2021-01-09  Maciej W. Rozycki  <macro@linux-mips.org>
! 
! 	* config/vax/vax.md (subst_f<cc>): Add mode to operands and
! 	`const_double_zero'.
! 
! 2021-01-09  Maciej W. Rozycki  <macro@linux-mips.org>
! 
! 	* config/pdp11/pdp11.md (PDPfp): New mode iterator.
! 	(fcc_cc, fcc_ccnz): Use it.  Add mode to `const_double_zero' and
! 	operands.
! 
! 2021-01-09  Maciej W. Rozycki  <macro@linux-mips.org>
! 
! 	* genemit.c (gen_exp) <CONST_DOUBLE>: Handle `const_double_zero'
! 	rtx.
! 	* read-rtl.c (rtx_reader::read_rtx_code): Handle machine mode
! 	with `const_double_zero'.
! 	* doc/rtl.texi (Constant Expression Types): Document it.
! 
! 2021-01-09  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR c++/98556
! 	* tree-cfg.c (verify_gimple_assign_binary): Allow lhs of
! 	POINTER_DIFF_EXPR to be any integral type.
! 
! 2021-01-09  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR rtl-optimization/98603
! 	* function.c (instantiate_virtual_regs_in_insn): For asm goto
! 	with impossible constraints, drop all SETs, CLOBBERs, drop PARALLEL
! 	if any, set ASM_OPERANDS mode to VOIDmode and change
! 	ASM_OPERANDS_OUTPUT_CONSTRAINT and ASM_OPERANDS_OUTPUT_IDX.
! 
! 2021-01-09  Alexandre Oliva  <oliva@gnu.org>
! 
! 	PR debug/97714
! 	* final.c (notice_source_line): Narrow down the condition to
! 	skip a line-0 marker.
! 
! 2021-01-08  Sergei Trofimovich  <siarheit@google.com>
! 
! 	* ipa-modref.c (merge_call_side_effects): Fix
! 	linebreak split by reordering two print calls.
! 
! 2021-01-08  Ilya Leoshkevich  <iii@linux.ibm.com>
! 
! 	* config/s390/vector.md (*tf_to_fprx2_0): Rename from
! 	"*mov_tf_to_fprx2_0" for consistency, fix constraint.
! 	(*tf_to_fprx2_1): Rename from "*mov_tf_to_fprx2_1" for
! 	consistency, fix constraint.
! 
! 2021-01-08  Ilya Leoshkevich  <iii@linux.ibm.com>
! 
! 	* config/s390/s390-c.c (s390_def_or_undef_macro): Accept
! 	callables instead of mask values.
! 	(struct target_flag_set_p): New predicate.
! 	(s390_cpu_cpp_builtins_internal): Define or undefine
! 	__LONG_DOUBLE_VX__ macro.
! 
! 2021-01-08  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/98482
! 	* config/i386/i386.c (x86_function_profiler): Use R10 and R11
! 	to call mcount in large model with PIC for NO_PROFILE_COUNTERS
! 	targets.
! 
! 2021-01-08  Richard Biener  <rguenther@suse.de>
! 
! 	* tree-ssa-sccvn.c (pass_fre::execute): Reset the SCEV hash table.
! 
! 2021-01-08  Richard Biener  <rguenther@suse.de>
! 
! 	* tree-vect-slp.c (scalar_stmts_to_slp_tree_map_t): Fix.
! 	(vect_build_slp_tree): On cache hit release the matched
! 	scalar stmts vector.
! 	* tree-vect-stmts.c (vectorizable_store): Properly free
! 	vec_oprnds before possibly gathering them again.
! 
! 2021-01-08  Richard Biener  <rguenther@suse.de>
! 
! 	PR tree-optimization/98544
! 	* tree-vect-slp.c (vect_optimize_slp): Always materialize
! 	permutes at a permute node.
! 
! 2021-01-08  H.J. Lu  <hjl.tools@gmail.com>
! 
! 	PR target/98482
! 	* config/i386/i386.c (x86_function_profiler): Use R10 to call
! 	mcount in large model.  Sorry for large model with PIC.
! 
! 2021-01-08  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR target/98585
! 	* config/i386/i386.opt (ix86_cmodel, ix86_incoming_stack_boundary_arg,
! 	ix86_pmode, ix86_preferred_stack_boundary_arg, ix86_regparm,
! 	ix86_veclibabi_type): Remove x_ prefix, use TargetVariable instead of
! 	TargetSave and initialize for variables with enum types.
! 	(mfentry, mstack-protector-guard-reg=, mstack-protector-guard-offset=,
! 	mstack-protector-guard-symbol=): Add Save.
! 	* config/i386/i386-options.c (ix86_function_specific_save,
! 	ix86_function_specific_restore): Don't save or restore x_ix86_cmodel,
! 	x_ix86_incoming_stack_boundary_arg, x_ix86_pmode,
! 	x_ix86_preferred_stack_boundary_arg, x_ix86_regparm,
! 	x_ix86_veclibabi_type.
! 
! 2021-01-08  Richard Sandiford  <richard.sandiford@arm.com>
! 
! 	* config/aarch64/aarch64-sve.md (*cnot<mode>): Extend from
! 	SVE_FULL_I to SVE_I.
! 	(*cond_cnot<mode>_2, *cond_cnot<mode>_any): Likewise.
! 
! 2021-01-08  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64-sve.md (*cond_uxt<mode>_2): Extend from
! 	SVE_FULL_I to SVE_I.
! 	(*cond_uxt<mode>_any): Likewise.
  
! 2021-01-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/iterators.md (Vwhalf): New iterator.
! 	* config/aarch64/aarch64-simd.md (aarch64_<sur>adalp<mode>_3):
! 	Rename to...
! 	(aarch64_<sur>adalp<mode>): ... This.  Make more
! 	builtin-friendly.
! 	(<sur>sadv16qi): Adjust callsite of the above.
! 	* config/aarch64/aarch64-simd-builtins.def (sadalp, uadalp): New
! 	builtins.
! 	* config/aarch64/arm_neon.h (vpadal_s8): Reimplement using
! 	builtins.
! 	(vpadal_s16): Likewise.
! 	(vpadal_u8): Likewise.
! 	(vpadal_u16): Likewise.
! 	(vpadalq_s8): Likewise.
! 	(vpadalq_s16): Likewise.
! 	(vpadalq_s32): Likewise.
! 	(vpadalq_u8): Likewise.
! 	(vpadalq_u16): Likewise.
! 	(vpadalq_u32): Likewise.
  
! 2021-01-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/aarch64-simd.md (aarch64_<su>abd<mode>_3):
! 	Rename to...
! 	(aarch64_<su>abd<mode>): ... This.
! 	(<sur>sadv16qi): Adjust callsite of the above.
! 	* config/aarch64/aarch64-simd-builtins.def (sabd, uabd): Define
! 	builtins.
! 	* config/aarch64/arm_neon.h (vabd_s8): Reimplement using
! 	builtin.
! 	(vabd_s16): Likewise.
! 	(vabd_s32): Likewise.
! 	(vabd_u8): Likewise.
! 	(vabd_u16): Likewise.
! 	(vabd_u32): Likewise.
! 	(vabdq_s8): Likewise.
! 	(vabdq_s16): Likewise.
! 	(vabdq_s32): Likewise.
! 	(vabdq_u8): Likewise.
! 	(vabdq_u16): Likewise.
! 	(vabdq_u32): Likewise.
  
! 2021-01-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/aarch64-simd-builtins.def (saba, uaba): Define
! 	builtins.
! 	* config/aarch64/arm_neon.h (vaba_s8): Implement using builtin.
! 	(vaba_s16): Likewise.
! 	(vaba_s32): Likewise.
! 	(vaba_u8): Likewise.
! 	(vaba_u16): Likewise.
! 	(vaba_u32): Likewise.
! 	(vabaq_s8): Likewise.
! 	(vabaq_s16): Likewise.
! 	(vabaq_s32): Likewise.
! 	(vabaq_u8): Likewise.
! 	(vabaq_u16): Likewise.
! 	(vabaq_u32): Likewise.
  
! 2021-01-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
  
! 	* config/aarch64/aarch64-simd.md (aba<mode>_3): Rename to...
! 	(aarch64_<su>aba<mode>): ... This.  Handle uaba as well.
! 	Change RTL pattern to match.
  
! 2021-01-08  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* common/config/riscv/riscv-common.c (riscv_current_subset_list): New.
! 	* config/riscv/riscv-c.c (riscv-subset.h): New.
! 	(INCLUDE_STRING): Define.
! 	(riscv_cpu_cpp_builtins): Add new style architecture extension
! 	test macros.
! 	* config/riscv/riscv-subset.h (riscv_subset_list::begin): New.
! 	(riscv_subset_list::end): New.
! 	(riscv_current_subset_list): New.
  
! 2021-01-08  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* common/config/riscv/riscv-common.c (RISCV_DONT_CARE_VERSION):
! 	Move to riscv-subset.h.
! 	(struct riscv_subset_t): Ditto.
! 	(class riscv_subset_list): Ditto.
! 	* config/riscv/riscv-subset.h (RISCV_DONT_CARE_VERSION): Move
! 	from riscv-common.c.
! 	(struct riscv_subset_t): Ditto.
! 	(class riscv_subset_list): Ditto.
! 	* config/riscv/t-riscv ($(common_out_file)): Add file
! 	dependency.
  
! 2021-01-07  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/98567
! 	* config/i386/i386.md (*bmi_blsi_<mode>_cmp, *bmi_blsi_<mode>_ccno):
! 	New define_insn patterns.
  
! 2021-01-07  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64-sve.md (@cond_<SVE_INT_UNARY:optab><mode>)
! 	(*cond_<SVE_INT_UNARY:optab><mode>_2): Extend from SVE_FULL_I to SVE_I.
! 	(*cond_<SVE_INT_UNARY:optab><mode>_any): Likewise.
  
! 2021-01-07  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR tree-optimization/98560
! 	* internal-fn.def (IFN_VCONDU, IFN_VCONDEQ): Use type vec_cond.
! 	* internal-fn.c (vec_cond_mask_direct): Get the data mode from
! 	argument 1.
! 	(vec_cond_direct): Likewise argument 2.
! 	(vec_condu_direct, vec_condeq_direct): Delete.
! 	(expand_vect_cond_optab_fn): Rename to...
! 	(expand_vec_cond_optab_fn): ...this, replacing old macro.
! 	(expand_vec_condu_optab_fn, expand_vec_condeq_optab_fn): Delete.
! 	(expand_vect_cond_mask_optab_fn): Rename to...
! 	(expand_vec_cond_mask_optab_fn): ...this, replacing old macro.
! 	(direct_vec_cond_mask_optab_supported_p): Treat the optab as a
! 	convert optab.
! 	(direct_vec_cond_optab_supported_p): Likewise.
! 	(direct_vec_condu_optab_supported_p): Delete.
! 	(direct_vec_condeq_optab_supported_p): Delete.
! 	* gimple-isel.cc: Include internal-fn.h.
! 	(gimple_expand_vec_cond_expr): Check that IFN_VCONDEQ is supported
! 	before using it.
  
! 2021-01-07  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR tree-optimization/98560
! 	* gimple-isel.cc (gimple_expand_vec_cond_expr): If we fail to use
! 	IFN_VCOND{,U,EQ}, fall back on IFN_VCOND_MASK.
  
! 2021-01-07  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	* config/i386/i386.md (insn): Merge from plusminus_insn, shift_insn,
! 	rotate_insn and optab code attributes.
! 	Update all uses to merged code attribute.
! 	* config/i386/sse.md: Update all uses to merged code attribute.
! 	* config/i386/mmx.md: Update all uses to merged code attribute.
  
! 2021-01-07  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/98568
! 	* gimple-ssa-store-merging.c (bswap_view_convert): New function.
! 	(bswap_replace): Use it.
  
! 2021-01-06  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR rtl-optimization/97978
! 	* lra-int.h (lra_hard_reg_split_p): New external.
! 	* lra.c (lra_hard_reg_split_p): New global.
! 	(lra): Set up lra_hard_reg_split_p after splitting a hard reg.
! 	* lra-assigns.c (lra_assign): Don't check allocation correctness
! 	after hard reg splitting.
  
! 2021-01-06  Martin Sebor  <msebor@redhat.com>
  
! 	PR c++/98305
! 	* builtins.c (new_delete_mismatch_p): New overload.
! 	(new_delete_mismatch_p (tree, tree)): Call it.
  
! 2021-01-06  Alexandre Oliva  <oliva@adacore.com>
  
! 	* Makefile.in (T_GLIMITS_H): New.
! 	(stmp-int-hdrs): Depend on it, use it.
! 	* config/t-vxworks (T_GLIMITS_H): Override it.
! 	(vxw-glimits.h): New.
  
! 2021-01-06  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98513
! 	* value-range.cc (intersect_ranges): Compare the upper bounds
! 	for the expected relation.
  
! 2021-01-06  Gerald Pfeifer  <gerald@pfeifer.com>
  
! 	Revert:
! 	2020-12-28  Gerald Pfeifer  <gerald@pfeifer.com>
  
! 	* doc/standards.texi (HSAIL): Remove section.
  
! 2021-01-05  Samuel Thibault  <samuel.thibault@ens-lyon.org>
  
! 	* configure: Re-generate.
  
! 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	* doc/invoke.texi (-std=c++20): Adjust for the publication of
! 	ISO 14882:2020 standard.
! 	* doc/standards.texi: Likewise.
  
! 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/94802
! 	* expr.h (maybe_optimize_sub_cmp_0): Declare.
! 	* expr.c: Include tree-pretty-print.h and flags.h.
! 	(maybe_optimize_sub_cmp_0): New function.
! 	(do_store_flag): Use it.
! 	* cfgexpand.c (expand_gimple_cond): Likewise.
  
! 2021-01-05  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* mux-utils.h (pointer_mux::m_ptr): Tweak description of contents.
! 	* rtlanal.c (simple_regno_set): Tweak description to clarify the
! 	RMW condition.
  
! 2021-01-05  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98516
! 	* tree-vect-slp.c (vect_optimize_slp): Permute the incoming
! 	lanes when materializing on a VEC_PERM node.
! 	(vectorizable_slp_permutation): Dump the permute properly.
  
! 2021-01-05  Richard Biener  <rguenther@suse.de>
  
! 	* tree-vect-slp.c (vect_slp_region): Move debug counter
! 	to cover individual subgraphs.
  
! 2021-01-05  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98428
! 	* tree-vect-slp.c (vect_build_slp_tree_1): Properly reject
! 	vector lane extracts for loop vectorization.
  
! 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/98514
! 	* tree-ssa-reassoc.c (bb_rank): Change type from long * to
! 	int64_t *.
! 	(operand_rank): Change type from hash_map<tree, long> to
! 	hash_map<tree, int64_t>.
! 	(phi_rank): Change return type from long to int64_t.
! 	(loop_carried_phi): Change block_rank variable type from long to
! 	int64_t.
! 	(propagate_rank): Change return type, rank parameter type and
! 	op_rank variable type from long to int64_t.
! 	(find_operand_rank): Change return type from long to int64_t
! 	and change slot variable type from long * to int64_t *.
! 	(insert_operand_rank): Change rank parameter type from long to
! 	int64_t.
! 	(get_rank): Change return type and rank variable type from long to
! 	int64_t.  Use PRId64 instead of ld to print the rank.
! 	(init_reassoc): Change rank variable type from long to int64_t
! 	and adjust correspondingly bb_rank and operand_rank initialization.
  
! 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/96928
! 	* tree-ssa-phiopt.c (xor_replacement): New function.
! 	(tree_ssa_phiopt_worker): Call it.
  
! 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/96930
! 	* match.pd ((A / (1 << B)) -> (A >> B)): If A is extended
! 	from narrower value which has the same type as 1 << B, perform
! 	the right shift on the narrower value followed by extension.
  
! 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/96239
! 	* gimple-ssa-store-merging.c (maybe_optimize_vector_constructor): New
! 	function.
! 	(get_status_for_store_merging): Don't return BB_INVALID for blocks
! 	with potential bswap optimizable CONSTRUCTORs.
! 	(pass_store_merging::execute): Optimize vector CONSTRUCTORs with bswap
! 	if possible.
  
! 2021-01-05  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98381
! 	* tree.c (vector_element_bits): Properly compute bool vector
! 	element size.
! 	* tree-vect-loop.c (vectorizable_live_operation): Properly
! 	compute the last lane bit offset.
  
! 2021-01-05  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/98522
! 	* config/i386/sse.md (sse_cvtps2pi): Redefine as define_insn_and_split.
! 	Clear the top 64 bytes of the input XMM register.
! 	(sse_cvttps2pi): Ditto.
  
! 2021-01-05  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/98521
! 	* config/i386/xopintrin.h (_mm256_cmov_si256): New.
  
! 2021-01-05  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/98495
! 	* config/i386/xmmintrin.h (_mm_extract_pi16): Cast to unsigned
! 	short first.
  
! 2021-01-05  Claudiu Zissulescu  <claziss@synopsys.com>
  
! 	* config/arc/arc.md (maddsidi4_split): Use ACC_REG_FIRST.
! 	(umaddsidi4_split): Likewise.
  
! 2021-01-05  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/98461
! 	* config/i386/sse.md (*sse2_pmovskb_zexthisi): New
! 	define_insn_and_split for zero_extend of subreg HI of pmovskb
! 	result.
! 	(*sse2_pmovskb_zexthisi): Add new combine splitters for
! 	zero_extend of not of subreg HI of pmovskb result.
  
! 2021-01-05  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/97269
! 	* explow.c (convert_memory_address_addr_space_1): Handle UNSPECs
! 	nested in CONSTs.
! 	* config/aarch64/aarch64.c (aarch64_expand_mov_immediate): Use
! 	convert_memory_address to convert symbolic immediates to ptr_mode
! 	before forcing them to memory.
  
! 2021-01-05  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/97144
! 	* recog.c (constrain_operands): Initialize matching_operand
! 	for each alternative, rather than only doing it once.
  
! 2021-01-05  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/98403
! 	* rtl-ssa/changes.cc (function_info::finalize_new_accesses): Explain
! 	why we don't remove call clobbers.
! 	(function_info::apply_changes_to_insn): Don't attempt to add
! 	call clobbers here.
  
! 2021-01-05  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR tree-optimization/98371
! 	* tree-vect-loop.c (vect_reanalyze_as_main_loop): New function.
! 	(vect_analyze_loop): If an epilogue loop appears to be cheaper
! 	than the main loop, re-analyze it as a main loop before adopting
! 	it as a main loop.
  
! 2021-01-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
  
! 	PR c++/98316
! 	* configure.ac (NETLIBS): Determine using AX_LIB_SOCKET_NSL.
! 	* aclocal.m4, configure: Regenerate.
! 	* Makefile.in (NETLIBS): Define.
! 	(BACKEND): Remove $(CODYLIB).
  
! 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/98334
! 	* simplify-rtx.c (simplify_context::simplify_binary_operation_1):
! 	Optimize (X - 1) * Y + Y to X * Y or (X + 1) * Y - Y to X * Y.
  
! 2021-01-05  Bernd Edlinger  <bernd.edlinger@hotmail.de>
  
! 	* tree-inline.c (expand_call_inline): Restore input_location.
! 	Return result from recursive call.
  
! 2021-01-04  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR tree-optimization/95401
! 	* config/aarch64/aarch64-sve-builtins.cc
! 	(gimple_folder::load_store_cookie): Use bits rather than bytes
! 	for the alignment argument to IFN_MASK_LOAD and IFN_MASK_STORE.
! 	* gimple-fold.c (gimple_fold_mask_load_store_mem_ref): Likewise.
! 	* tree-vect-stmts.c (vectorizable_store): Likewise.
! 	(vectorizable_load): Likewise.
  
! 2021-01-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98308
! 	* tree-vect-stmts.c (vectorizable_load): Set invariant mask
! 	SLP vectype.
  
! 2021-01-04  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/95771
! 	* tree-ssa-loop-niter.c (number_of_iterations_popcount): Handle types
! 	with precision smaller than int's precision and types with precision
! 	twice as large as long long.  Formatting fixes.
  
! 2021-01-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98464
! 	* tree-ssa-sccvn.c (vn_valueize_for_srt): Rename from ...
! 	(vn_valueize_wrapper): ... this.  Temporarily adjust vn_context_bb.
! 	(process_bb): Adjust.
  
! 2021-01-04  Matthew Malcomson  <matthew.malcomson@arm.com>
  
! 	PR other/98437
! 	* doc/invoke.texi (-fsanitize=address): Fix wording describing
! 	clash with -fsanitize=hwaddress.
  
! 2021-01-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98282
! 	* tree-ssa-sccvn.c (vn_get_stmt_kind): Classify tcc_reference on
! 	invariants as VN_NARY.
  
! 2021-01-04  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/89057
! 	* config/aarch64/aarch64-simd.md (aarch64_combine<mode>): Accept
! 	aarch64_simd_reg_or_zero for operand 2.  Use the combinez patterns
! 	to handle zero operands.
  
! 2021-01-04  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64.c (offset_6bit_signed_scaled_p): New function.
! 	(offset_6bit_unsigned_scaled_p): Fix typo in comment.
! 	(aarch64_sve_prefetch_operand_p): Accept MUL VLs in the range
! 	[-32, 31].
  
! 2021-01-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98393
! 	* tree-vect-slp.c (vect_build_slp_tree): Properly zero matches
! 	when hitting the limit.
  
! 2021-01-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98291
! 	* tree-vect-loop.c (vectorizable_reduction): Bypass
! 	associativity check for SLP reductions with VF 1.
  
! 2021-01-04  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/96782
! 	* match.pd (x == ~x -> false, x != ~x -> true): New simplifications.
  
! 2021-01-04  Bernd Edlinger  <bernd.edlinger@hotmail.de>
  
! 	* collect-utils.c (collect_execute): Check dumppfx.
! 	* collect2.c (maybe_run_lto_and_relink, do_link): Pass atsuffix
! 	to collect_execute.
! 	(do_link): Add new parameter atsuffix.
! 	(main): Handle -dumpdir option.  Skip one argument for
! 	-o, -isystem and -B options.
! 	* gcc.c (make_at_file): New helper function.
! 	(close_at_file): Use it.
  
! 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config/darwin.h (MIN_LD64_NO_COAL_SECTS): Adjust.
! 	Amend handling for LD64_VERSION fallback defaults.
  
! 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config.gcc: Compute default version information
! 	from the configured target.  Likewise defaults for
! 	ld64.
! 	* config/darwin10.h: Removed.
! 	* config/darwin12.h: Removed.
! 	* config/darwin9.h: Removed.
! 	* config/rs6000/darwin8.h: Removed.
  
! 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config/darwin9.h (ASM_OUTPUT_ALIGNED_COMMON): Delete.
  
! 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config/darwin9.h (STACK_CHECK_STATIC_BUILTIN): Move from here..
! 	* config/darwin.h (STACK_CHECK_STATIC_BUILTIN): .. to here.
  
! 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Move from
! 	here...
! 	* config/darwin.h (LINK_GCC_C_SEQUENCE_SPEC): ... to here.
  
! 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Move the spec
! 	for the Darwin10 unwinder stub from here ...
! 	* config/darwin.h (LINK_COMMAND_SPEC_A): ... to here.
  
! 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config/darwin.h (DSYMUTIL_SPEC): Default to DWARF
! 	(ASM_DEBUG_SPEC):Only define if the assembler supports
! 	stabs.
! 	(PREFERRED_DEBUGGING_TYPE): Default to DWARF.
! 	(DARWIN_PREFER_DWARF): Define.
! 	* config/darwin9.h (PREFERRED_DEBUGGING_TYPE): Remove.
! 	(DARWIN_PREFER_DWARF): Likewise
! 	(DSYMUTIL_SPEC): Likewise.
! 	(COLLECT_RUN_DSYMUTIL): Likewise.
! 	(ASM_DEBUG_SPEC): Likewise.
! 	(ASM_DEBUG_OPTION_SPEC): Likewise.
  
! 2021-01-02  Jan Hubicka  <jh@suse.cz>
  
! 	* cfg.c (free_block): ggc_free bb.
  
! 2021-01-01  Jakub Jelinek  <jakub@redhat.com>
  
  	* gcc.c (process_command): Update copyright notice dates.
  	* gcov-dump.c (print_version): Ditto.
--- 1,10043 ----
! 2022-05-06  Release Manager
  
! 	* GCC 12.1.0 released.
  
! 2022-05-02  Jakub Jelinek  <jakub@redhat.com>
  
  	Backported from master:
! 	2022-05-02  Jakub Jelinek  <jakub@redhat.com>
  
! 	* system.h: Include initializer_list.
  
! 2022-04-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR lto/105399
! 	* cgraph.cc (cgraph_node::verify_node): Don't verify
! 	semantic_interposition flag against
! 	opt_for_fn (decl, flag_semantic_interposition) for aliases in lto1.
  
! 2022-04-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/105331
! 	* config/i386/i386.cc (ix86_gimplify_va_arg): Mark va_arg_tmp
! 	temporary TREE_ADDRESSABLE before trying to gimplify ADDR_EXPR
! 	of it.
  
! 2022-04-28  Jonathan Wakely  <jwakely@redhat.com>
  
! 	* doc/install.texi (Configuration): Remove misleading text
! 	around LE PowerPC Linux multilibs.
  
! 2022-04-28  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
  
! 	PR d/103528
! 	* doc/install.texi (Tools/packages necessary for building GCC)
! 	(GDC): Document libphobos requirement.
! 	(Host/target specific installation notes for GCC, *-*-solaris2*):
! 	Document libphobos and GDC specifics.
  
! 2022-04-28  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105219
! 	* tree-vect-loop.cc (vect_transform_loop): Disable
! 	special code narrowing the vectorized epilogue max
! 	iterations when peeling for alignment or gaps was in effect.
  
! 2022-04-28  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	* config/loongarch/loongarch.cc
! 	(loongarch_flatten_aggregate_field): Ignore empty fields for
! 	RECORD_TYPE.
  
! 2022-04-27  Lulu Cheng  <chenglulu@loongson.cn>
  
! 	* config/loongarch/loongarch.md: Add fdiv define_expand template,
! 	then generate floating-point division and floating-point reciprocal
! 	instructions.
  
! 2022-04-27  Lulu Cheng  <chenglulu@loongson.cn>
  
! 	* config/loongarch/loongarch.md: Add '(clobber (mem:BLK (scratch)))'
! 	to PLV instruction templates.
  
! 2022-04-27  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/104492
! 	* gimple-ssa-warn-access.cc
! 	(pass_waccess::warn_invalid_pointer): Exclude equality compare
! 	diagnostics for all kind of invalidations.
! 	(pass_waccess::check_dangling_uses): Fix post-dominator query.
! 	(pass_waccess::check_pointer_uses): Likewise.
  
! 2022-04-27  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	PR target/102024
! 	* config/s390/s390-protos.h (s390_function_arg_vector): Remove
! 	prototype.
! 	* config/s390/s390.cc (s390_single_field_struct_p): New function.
! 	(s390_function_arg_vector): Invoke s390_single_field_struct_p.
! 	(s390_function_arg_float): Likewise.
  
! 2022-04-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR sanitizer/105396
! 	* asan.cc (asan_redzone_buffer::emit_redzone_byte): Handle the case
! 	where offset is bigger than off but smaller than m_prev_offset + 32
! 	bits by pushing one or more 0 bytes.  Sink the
! 	m_shadow_bytes.safe_push (value); flush_if_full (); statements from
! 	all cases to the end of the function.
  
! 2022-04-27  Kewen Lin  <linkw@linux.ibm.com>
  
! 	PR target/105271
! 	* config/rs6000/rs6000-builtins.def (NEG_V2DI): Move to [power8-vector]
! 	stanza.
  
! 2022-04-26  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	* config/gcn/gcn.cc (gcn_print_lds_decl): Make "gang-private
! 	data-share memory exhausted" error more verbose.
  
! 2022-04-26  Martin Liska  <mliska@suse.cz>
  
! 	PR lto/105364
! 	* lto-wrapper.cc (print_lto_docs_link): Use global_dc.
! 	(run_gcc): Parse OPT_fdiagnostics_urls_.
! 	(main): Initialize global_dc.
  
! 2022-04-26  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/105314
! 	* ifcvt.cc (noce_try_store_flag_mask): Don't require that the non-zero
! 	operand is equal to if_info->x, instead use the non-zero operand
! 	as one of the operands of AND with if_info->x as target.
  
! 2022-04-26  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/105374
! 	* tree-ssa-reassoc.cc (eliminate_redundant_comparison): Punt if
! 	!fold_convertible_p rather than assuming fold_convert must succeed.
  
! 2022-04-26  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/105367
! 	* config/i386/i386.cc (ix86_veclibabi_svml, ix86_veclibabi_acml): Pass
! 	el_mode == DFmode ? double_type_node : float_type_node instead of
! 	TREE_TYPE (type_in) as first arguments to mathfn_built_in.
  
! 2022-04-25  David Malcolm  <dmalcolm@redhat.com>
  
! 	PR analyzer/104308
! 	* gimple-fold.cc (gimple_fold_builtin_memory_op): Explicitly set
! 	the location of new_stmt in all places that don't already set it,
! 	whether explicitly, or via a call to gsi_replace.
  
! 2022-04-25  Paul A. Clarke  <pc@us.ibm.com>
  
! 	* doc/extend.texi (Other Builtins): Correct reference to 'modff'.
  
! 2022-04-25  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/105276
! 	* gimple-range.cc (gimple_ranger::prefill_stmt_dependencies): Include
! 	existing global range with calculated value.
  
! 2022-04-25  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105368
! 	* tree-ssa-math-opts.cc (powi_cost): Use absu_hwi.
  
! 2022-04-25  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100810
! 	* tree-ssa-loop-ivopts.cc (struct iv_cand): Add involves_undefs flag.
! 	(find_ssa_undef): New function.
! 	(add_candidate_1): Avoid adding derived candidates with
! 	undefined SSA names and mark the original ones.
! 	(determine_group_iv_cost_generic): Reject rewriting
! 	uses with a different IV when that involves undefined SSA names.
  
! 2022-04-25  Steven G. Kargl  <kargl@gcc.gnu.org>
  
! 	PR target/89125
! 	* config/freebsd.h: Define TARGET_LIBC_HAS_FUNCTION to be
! 	bsd_libc_has_function.
! 	* targhooks.cc (bsd_libc_has_function): New function.
! 	Expand the supported math functions to inclue C99 libm.
! 	* targhooks.h (bsd_libc_has_function): New Prototype.
  
! 2022-04-25  Richard Biener  <rguenther@suse.de>
  
! 	PR rtl-optimization/105231
! 	* combine.cc (distribute_notes): Assert that a REG_EH_REGION
! 	with landing pad > 0 is from i3.  Put any REG_EH_REGION note
! 	on i3 or drop it if the insn can not trap.
! 	(try_combine): Ensure that we can merge REG_EH_REGION notes
! 	with non-call exceptions.  Ensure we are not splitting a
! 	trapping part of an insn with non-call exceptions when there
! 	is any REG_EH_REGION note to preserve.
  
! 2022-04-25  Hongyu Wang  <hongyu.wang@intel.com>
  
! 	PR target/105339
! 	* config/i386/avx512fintrin.h (_mm512_scalef_round_pd):
! 	Add parentheses for parameters and djust format.
! 	(_mm512_mask_scalef_round_pd): Ditto.
! 	(_mm512_maskz_scalef_round_pd): Ditto.
! 	(_mm512_scalef_round_ps): Ditto.
! 	(_mm512_mask_scalef_round_ps): Ditto.
! 	(_mm512_maskz_scalef_round_ps): Ditto.
! 	(_mm_scalef_round_sd): Use _mm_undefined_pd.
! 	(_mm_scalef_round_ss): Use _mm_undefined_ps.
! 	(_mm_mask_scalef_round_sd): New macro.
! 	(_mm_mask_scalef_round_ss): Ditto.
! 	(_mm_maskz_scalef_round_sd): Ditto.
! 	(_mm_maskz_scalef_round_ss): Ditto.
  
! 2022-04-23  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/105338
! 	* config/i386/i386-expand.cc (ix86_expand_int_movcc): Handle
! 	op0 == cst1 ? op0 : op3 like op0 == cst1 ? cst1 : op3 for the non-cmov
! 	cases.
  
! 2022-04-22  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	PR target/105334
! 	* config/rs6000/rs6000.md (pack<mode> for FMOVE128): New expander.
! 	(pack<mode> for FMOVE128): Rename and split the insn_and_split to...
! 	(pack<mode>_hard for FMOVE128): ... this...
! 	(pack<mode>_soft for FMOVE128): ... and this.
  
! 2022-04-22  Paul A. Clarke  <pc@us.ibm.com>
  
! 	* doc/extend.texi: Correct "This" to "These".
  
! 2022-04-22  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/105333
! 	* rtlanal.cc (replace_rtx): Use simplify_subreg or
! 	simplify_unary_operation if CONST_SCALAR_INT_P rather than just
! 	CONST_INT_P.
  
! 2022-04-21  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	PR target/103197
! 	PR target/102146
! 	* config/rs6000/rs6000.md (zero_extendqi<mode>2 for EXTQI): Disparage
! 	the "Z" alternatives in {l,st}{f,xs}iwzx.
! 	(zero_extendhi<mode>2 for EXTHI): Ditto.
! 	(zero_extendsi<mode>2 for EXTSI): Ditto.
! 	(*movsi_internal1): Ditto.
! 	(*mov<mode>_internal1 for QHI): Ditto.
! 	(movsd_hardfloat): Ditto.
  
! 2022-04-21  Martin Liska  <mliska@suse.cz>
  
! 	* configure.ac: Enable compressed debug sections for mold
! 	linker.
  	* configure: Regenerate.
  
! 2022-04-21  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/105203
! 	* emit-rtl.cc (emit_copy_of_insn_after): Don't call mark_jump_label
! 	on DEBUG_INSNs.
  
! 2022-04-20  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104912
! 	* tree-vect-loop-manip.cc (vect_loop_versioning): Split
! 	the cost model check to a separate BB to make sure it is
! 	checked first and not combined with other version checks.
  
! 2022-04-20  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105312
! 	* gimple-isel.cc (gimple_expand_vec_cond_expr): Query both
! 	VCOND and VCONDU for EQ and NE.
  
! 2022-04-20  Jan Hubicka  <hubicka@ucw.cz>
  
! 	PR ipa/103818
! 	* ipa-modref-tree.cc (modref_access_node::closer_pair_p): Use
! 	poly_offset_int to avoid overflow.
! 	(modref_access_node::update2): likewise.
  
! 2022-04-20  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR ipa/105306
! 	* cgraph.cc (cgraph_node::create): Set node->semantic_interposition
! 	to opt_for_fn (decl, flag_semantic_interposition).
! 	* cgraphclones.cc (cgraph_node::create_clone): Copy over
! 	semantic_interposition flag.
  
! 2022-04-19  Sergei Trofimovich  <siarheit@google.com>
  
! 	PR gcov-profile/105282
! 	* value-prof.cc (stream_out_histogram_value): Allow negative counts
! 	on HIST_TYPE_INDIR_CALL.
  
! 2022-04-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/105257
! 	* config/sparc/sparc.cc (epilogue_renumber): If ORIGINAL_REGNO,
! 	use gen_raw_REG instead of gen_rtx_REG and copy over also
! 	ORIGINAL_REGNO.  Use return 0; instead of /* fallthrough */.
  
! 2022-04-19  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104010
! 	PR tree-optimization/103941
! 	* tree-vect-slp.cc (vect_bb_slp_scalar_cost): When
! 	we run into stmts in patterns continue walking those
! 	for uses outside of the vectorized region instead of
! 	marking the lane live.
  
! 2022-04-18  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* doc/install.texi <CRIS>: Remove references to removed websites and
! 	adjust for cris-*-elf being the only remaining toolchain.
  
! 2022-04-18  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* doc/invoke.texi <CRIS>: Remove references to options for removed
! 	subtarget cris-axis-linux-gnu and tweak wording accordingly.
  
! 2022-04-16  Gerald Pfeifer  <gerald@pfeifer.com>
  
! 	* doc/install.texi (Specific): Adjust mingw-w64 download link.
  
! 2022-04-15  Hongyu Wang  <hongyu.wang@intel.com>
  
! 	* config/i386/smmintrin.h: Correct target pragma from sse4.1
! 	and sse4.2 to crc32 for crc32 intrinsics.
  
! 2022-04-14  Indu Bhagat  <indu.bhagat@oracle.com>
  
! 	PR debug/105089
! 	* ctfc.cc (ctf_dvd_ignore_insert): New function.
! 	(ctf_dvd_ignore_lookup): Likewise.
! 	(ctf_add_variable): Keep track of non-defining decl DIEs.
! 	(new_ctf_container): Initialize the new hash-table.
! 	(ctfc_delete_container): Empty hash-table.
! 	* ctfc.h (struct ctf_container): Add new hash-table.
! 	(ctf_dvd_ignore_lookup): New declaration.
! 	(ctf_add_variable): Add additional argument.
! 	* ctfout.cc (ctf_dvd_preprocess_cb): Skip adding CTF variable
! 	record for non-defining decl for which a defining decl exists
! 	in the same TU.
! 	(ctf_preprocess): Defer updating the number of global objts
! 	until here.
! 	(output_ctf_header): Use ctfc_vars_list_count as some CTF
! 	variables may not make it to the final output.
! 	(output_ctf_vars): Likewise.
! 	* dwarf2ctf.cc (gen_ctf_variable): Skip generating CTF variable
! 	if this is known to be a non-defining decl DIE.
  
! 2022-04-14  Indu Bhagat  <indu.bhagat@oracle.com>
  
! 	* ctfc.h (struct ctf_container): Introduce a new member.
! 	* ctfout.cc (ctf_list_add_ctf_vars): Use it instead of static
! 	variable.
  
! 2022-04-14  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/105247
! 	* simplify-rtx.cc (simplify_const_binary_operation): For shifts
! 	or rotates by VOIDmode constant integer shift count use word_mode
! 	for the operand if int_mode is narrower than word.
  
! 2022-04-14  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	* config/s390/s390.cc (s390_get_sched_attrmask): Add z16.
! 	(s390_get_unit_mask): Likewise.
! 	(s390_is_fpd): Likewise.
! 	(s390_is_fxd): Likewise.
! 	* config/s390/s390.h (s390_tune_attr): Set max tune level to z16.
! 	* config/s390/s390.md (z900,z990,z9_109,z9_ec,z10,z196,zEC12,z13,z14,z15):
! 	Add z16.
! 	(z900,z990,z9_109,z9_ec,z10,z196,zEC12,z13,z14,z15,z16):
  	Likewise.
! 	* config/s390/3931.md: New file.
  
! 2022-04-13  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR tree-optimization/105254
! 	* config/aarch64/aarch64.cc
! 	(aarch64_vector_costs::determine_suggested_unroll_factor): Take a
! 	loop_vec_info as argument.  Restrict the unroll factor to values
! 	that divide the VF.
! 	(aarch64_vector_costs::finish_cost): Update call accordingly.
  
! 2022-04-13  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105263
! 	* tree-ssa-reassoc.cc (try_special_add_to_ops): Do not consume
! 	negates in multiplication chains with DFP.
  
! 2022-04-13  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/105253
! 	* tree.cc (tree_builtin_call_types_compatible_p): If PROP_gimple,
! 	use useless_type_conversion_p checks instead of TYPE_MAIN_VARIANT
! 	comparisons or tree_nop_conversion_p checks.
  
! 2022-04-13  Hongyu Wang  <hongyu.wang@intel.com>
  
! 	PR target/103069
! 	* config/i386/i386-expand.cc (ix86_expand_cmpxchg_loop):
! 	  Add missing set to target_val at pause label.
  
! 2022-04-13  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/105234
! 	* attribs.cc (decl_attributes): Don't set
! 	DECL_FUNCTION_SPECIFIC_TARGET if target_option_default_node is
! 	NULL.
  
! 2022-04-13  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105250
! 	* fold-const.cc (fold_convertible_p): Revert
! 	r12-7979-geaaf77dd85c333, instead check for size equality
! 	of the vector types involved.
  
! 2022-04-13  Richard Biener  <rguenther@suse.de>
  
! 	Revert:
! 	2022-04-13  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104912
! 	* tree-vect-loop-manip.cc (vect_loop_versioning): Split
! 	the cost model check to a separate BB to make sure it is
! 	checked first and not combined with other version checks.
  
! 2022-04-13  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104912
! 	* tree-vect-loop-manip.cc (vect_loop_versioning): Split
! 	the cost model check to a separate BB to make sure it is
! 	checked first and not combined with other version checks.
  
! 2022-04-13  Jakub Jelinek  <jakub@redhat.com>
  
! 	* tree-scalar-evolution.cc (expression_expensive_p): Fix a comment typo.
  
! 2022-04-12  Antoni Boucher  <bouanto@zoho.com>
  
! 	PR jit/104072
! 	* reginfo.cc: New functions (clear_global_regs_cache,
! 	reginfo_cc_finalize) to avoid an issue where compiling the same
! 	code multiple times gives an error about assigning the same
! 	register to 2 global variables.
! 	* rtl.h: New function (reginfo_cc_finalize).
! 	* toplev.cc: Call it.
  
! 2022-04-12  Antoni Boucher  <bouanto@zoho.com>
  
! 	PR jit/104071
! 	* toplev.cc: Call the new function tree_cc_finalize in
! 	toplev::finalize.
! 	* tree.cc: New functions (clear_nonstandard_integer_type_cache
! 	and tree_cc_finalize) to clear the cache of non-standard integer
! 	types to avoid having issues with some optimizations of
! 	bitcast where the SSA_NAME will have a size of a cached
! 	integer type that should have been invalidated, causing a
! 	comparison of integer constant to fail.
! 	* tree.h: New function (tree_cc_finalize).
  
! 2022-04-12  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	PR target/97348
! 	* config/nvptx/nvptx.h (ASM_SPEC): Don't set.
! 	* config/nvptx/nvptx.opt (misa): Adjust comment.
  
! 2022-04-12  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	Revert:
! 	2022-03-03  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.h (ASM_SPEC): Add %{misa=sm_30:--no-verify}.
  
! 2022-04-12  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	Revert:
! 	2022-03-31  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.h (ASM_SPEC): Use "-m sm_35" for -misa=sm_30.
  
! 2022-04-12  Richard Biener  <rguenther@suse.de>
  
! 	PR ipa/104303
! 	* tree-ssa-dce.cc (mark_stmt_if_obviously_necessary): Do not
! 	include local escaped memory as obviously necessary stores.
  
! 2022-04-12  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105235
! 	* tree-ssa-math-opts.cc (execute_cse_conv_1): Clean EH and
! 	return whether the CFG changed.
! 	(execute_cse_sincos_1): Adjust.
  
! 2022-04-12  Przemyslaw Wirkus  <Przemyslaw.Wirkus@arm.com>
  
! 	PR target/104144
! 	* config/arm/t-aprofile (MULTI_ARCH_OPTS_A): Remove Armv9-a options.
! 	(MULTI_ARCH_DIRS_A): Remove Armv9-a diretories.
! 	(MULTILIB_REQUIRED): Don't require Armv9-a libraries.
! 	(MULTILIB_MATCHES): Treat Armv9-a as equivalent to Armv8-a.
! 	(MULTILIB_REUSE): Remove remap rules for Armv9-a.
! 	* config/arm/t-multilib (v9_a_nosimd_variants): Delete.
! 	(MULTILIB_MATCHES): Remove mappings for v9_a_nosimd_variants.
  
! 2022-04-12  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105232
! 	* tree.cc (component_ref_size): Bail out for too large
! 	or non-constant sizes.
  
! 2022-04-12  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105226
! 	* tree-vect-loop-manip.cc (vect_loop_versioning): Verify
! 	we can split the exit of an outer loop we choose to version.
  
! 2022-04-12  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/i386/i386-expand.cc (ix86_emit_i387_sinh, ix86_emit_i387_cosh,
! 	ix86_emit_i387_tanh, ix86_emit_i387_asinh, ix86_emit_i387_acosh,
! 	ix86_emit_i387_atanh, ix86_emit_i387_log1p, ix86_emit_i387_round,
! 	ix86_emit_swdivsf, ix86_emit_swsqrtsf,
! 	ix86_expand_atomic_fetch_op_loop, ix86_expand_cmpxchg_loop):
! 	Formatting fix.
! 	* config/i386/i386.cc (warn_once_call_ms2sysv_xlogues): Likewise.
  
! 2022-04-12  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/105214
! 	* config/i386/i386-expand.cc (ix86_emit_i387_log1p): Call
! 	do_pending_stack_adjust.
  
! 2022-04-12  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/105211
! 	* builtins.cc (expand_builtin_int_roundingfn_2): If mathfn_built_in_1
! 	fails for TREE_TYPE (arg), retry it with
! 	TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (fndecl))) and if even that
! 	fails, emit call normally.
  
! 2022-04-12  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	* common/config/s390/s390-common.cc: Rename PF_ARCH14 to PF_Z16.
! 	* config.gcc: Add z16 as march/mtune switch.
! 	* config/s390/driver-native.cc (s390_host_detect_local_cpu):
! 	Recognize z16 with -march=native.
! 	* config/s390/s390-opts.h (enum processor_type): Rename
! 	PROCESSOR_ARCH14 to PROCESSOR_3931_Z16.
! 	* config/s390/s390.cc (PROCESSOR_ARCH14): Rename to ...
! 	(PROCESSOR_3931_Z16): ... throughout the file.
! 	(s390_processor processor_table): Add z16 as cpu string.
! 	* config/s390/s390.h (enum processor_flags): Rename PF_ARCH14 to
! 	PF_Z16.
! 	(TARGET_CPU_ARCH14): Rename to ...
! 	(TARGET_CPU_Z16): ... this.
! 	(TARGET_CPU_ARCH14_P): Rename to ...
! 	(TARGET_CPU_Z16_P): ... this.
! 	(TARGET_ARCH14): Rename to ...
! 	(TARGET_Z16): ... this.
! 	(TARGET_ARCH14_P): Rename to ...
! 	(TARGET_Z16_P): ... this.
! 	* config/s390/s390.md (cpu_facility): Rename arch14 to z16 and
! 	check TARGET_Z16 instead of TARGET_ARCH14.
! 	* config/s390/s390.opt: Add z16 to processor_type.
! 	* doc/invoke.texi: Document z16 and arch14.
  
! 2022-04-12  chenglulu  <chenglulu@loongson.cn>
  
! 	* config/loongarch/loongarch.cc: Fix bug for
! 	tmpdir-g++.dg-struct-layout-1/t033.
  
! 2022-04-11  Peter Bergner  <bergner@linux.ibm.com>
  
! 	PR target/104894
! 	* config/rs6000/rs6000.cc (rs6000_sibcall_aix): Handle pcrel sibcalls
! 	to longcall functions.
  
! 2022-04-11  Jason Merrill  <jason@redhat.com>
  
! 	* ipa-free-lang-data.cc (free_lang_data_in_decl): Fix typos.
  
! 2022-04-11  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	PR target/105213
! 	PR target/103623
! 	* config/rs6000/rs6000.md (unpack<mode>_nodm): Add m,r,i alternative.
  
! 2022-04-11  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/105218
! 	* tree-ssa-phiopt.cc (value_replacement): If middle_bb has
! 	more than one predecessor or phi's bb more than 2 predecessors,
! 	reset phi result uses instead of adding a debug temp.
  
! 2022-04-11  Kito Cheng  <kito.cheng@sifive.com>
  
! 	PR target/104853
! 	* config.gcc: Pass -misa-spec to arch-canonicalize and
! 	multilib-generator.
! 	* config/riscv/arch-canonicalize: Adding -misa-spec option.
! 	(SUPPORTED_ISA_SPEC): New.
! 	(arch_canonicalize): New argument `isa_spec`.
! 	Handle multiple ISA spec versions.
! 	* config/riscv/multilib-generator: Adding -misa-spec option.
  
! 2022-04-11  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* config/riscv/arch-canonicalize: Add TODO item.
! 	(IMPLIED_EXT): Sync.
! 	(arch_canonicalize): Checking until no change.
  
! 2022-04-11  Tamar Christina  <tamar.christina@arm.com>
  
! 	PR target/105197
! 	* tree-vect-stmts.cc (vectorizable_condition): Prevent cond swap when
! 	not masked.
  
! 2022-04-11  Jason Merrill  <jason@redhat.com>
  
! 	PR c++/100370
! 	* pointer-query.cc (compute_objsize_r) [POINTER_PLUS_EXPR]: Require
! 	deref == -1.
  
! 2022-04-11  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/104639
! 	* tree-ssa-phiopt.cc: Include tree-ssa-propagate.h.
! 	(value_replacement): Optimize (x != cst1 ? x : cst2) != cst3
! 	into x != cst3.
  
! 2022-04-11  Jeff Law  <jeffreyalaw@gmail.com>
  
! 	* config/bfin/bfin.md (rol_one): Fix pattern to indicate the
! 	sign bit of the source ends up in CC.
  
! 2022-04-09  Jan Hubicka  <hubicka@ucw.cz>
  
! 	PR ipa/103376
! 	* cgraphunit.cc (cgraph_node::analyze): update semantic_interposition
! 	flag.
  
! 2022-04-09  Jan Hubicka  <hubicka@ucw.cz>
  
! 	* ipa-modref.cc (ipa_merge_modref_summary_after_inlining): Propagate
! 	nondeterministic and side_effects flags.
  
! 2022-04-08  Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	PR target/105157
! 	* config.gcc: Shift ext_mask by TARGET_CPU_NBITS.
! 	* config/aarch64/aarch64.h (TARGET_CPU_NBITS): New macro.
! 	(TARGET_CPU_MASK): Likewise.
! 	(TARGET_CPU_DEFAULT): Use TARGET_CPU_NBITS.
! 	* config/aarch64/aarch64.cc (aarch64_get_tune_cpu): Use TARGET_CPU_MASK.
! 	(aarch64_get_arch): Likewise.
! 	(aarch64_override_options): Use TARGET_CPU_NBITS.
  
! 2022-04-08  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105198
! 	* tree-predcom.cc (find_looparound_phi): Check whether
! 	the found memory location of the entry value is clobbered
! 	inbetween the value we want to use and loop entry.
  
! 2022-04-08  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/105189
! 	* fold-const.cc (make_range_step): Fix up handling of
! 	(unsigned) x +[low, -] ranges for signed x if low fits into
! 	typeof (x).
  
! 2022-04-08  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105175
! 	* tree-vect-stmts.cc (vectorizable_operation): Suppress
! 	-Wvector-operation-performance if using emulated vectors.
! 	* tree-vect-generic.cc (expand_vector_piecewise): Do not diagnose
! 	-Wvector-operation-performance when suppressed.
! 	(expand_vector_parallel): Likewise.
! 	(expand_vector_comparison): Likewise.
! 	(expand_vector_condition): Likewise.
! 	(lower_vec_perm): Likewise.
! 	(expand_vector_conversion): Likewise.
  
! 2022-04-07  Tamar Christina  <tamar.christina@arm.com>
  
! 	PR target/104409
! 	* config/aarch64/aarch64-builtins.cc (handle_arm_acle_h): New.
! 	(aarch64_general_init_builtins): Move LS64 code.
! 	* config/aarch64/aarch64-c.cc (aarch64_pragma_aarch64): Support
! 	arm_acle.h
! 	* config/aarch64/aarch64-protos.h (handle_arm_acle_h): New.
! 	* config/aarch64/arm_acle.h: Add pragma GCC aarch64 "arm_acle.h".
  
! 2022-04-07  Richard Biener  <rguenther@suse.de>
! 	    Jan Hubicka  <hubicka@ucw.cz>
  
! 	PR ipa/104303
! 	* tree-ssa-alias.h (ptr_deref_may_alias_global_p,
! 	ref_may_alias_global_p, ref_may_alias_global_p,
! 	stmt_may_clobber_global_p, pt_solution_includes_global): Add
! 	bool parameters indicating whether escaped locals should be
! 	considered global.
! 	* tree-ssa-structalias.cc (pt_solution_includes_global):
! 	When the new escaped_nonlocal_p flag is true also consider
! 	pt->vars_contains_escaped.
! 	* tree-ssa-alias.cc (ptr_deref_may_alias_global_p):
! 	Pass down new escaped_nonlocal_p flag.
! 	(ref_may_alias_global_p): Likewise.
! 	(stmt_may_clobber_global_p): Likewise.
! 	(ref_may_alias_global_p_1): Likewise.  For decls also
! 	query the escaped solution if true.
! 	(ref_may_access_global_memory_p): Remove.
! 	(modref_may_conflict): Use ref_may_alias_global_p with
! 	escaped locals considered global.
! 	(ref_maybe_used_by_stmt_p): Adjust.
! 	* ipa-fnsummary.cc (points_to_local_or_readonly_memory_p):
! 	Likewise.
! 	* tree-ssa-dse.cc (dse_classify_store): Likewise.
! 	* trans-mem.cc (thread_private_new_memory): Likewise, but
! 	consider escaped locals global.
! 	* tree-ssa-dce.cc (mark_stmt_if_obviously_necessary): Likewise.
  
! 2022-04-07  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105185
! 	* tree-ssa-sccvn.cc (visit_reference_op_call): Simplify
! 	modref query again.
  
! 2022-04-07  Tamar Christina  <tamar.christina@arm.com>
  
! 	PR target/104049
! 	* config/aarch64/aarch64-simd.md
! 	(aarch64_reduc_plus_internal<mode>): Fix RTL and rename to...
! 	(reduc_plus_scal_<mode>): ... This.
! 	(reduc_plus_scal_v4sf): Moved.
! 	(aarch64_reduc_plus_internalv2si): Fix RTL and rename to...
! 	(reduc_plus_scal_v2si): ... This.
  
! 2022-04-07  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/102586
! 	* langhooks.h (struct lang_hooks_for_types): Add classtype_as_base
! 	langhook.
! 	* langhooks-def.h (LANG_HOOKS_CLASSTYPE_AS_BASE): Define.
! 	(LANG_HOOKS_FOR_TYPES_INITIALIZER): Add it.
! 	* gimple-fold.cc (clear_padding_type): Use ftype instead of
! 	TREE_TYPE (field) some more.  For artificial FIELD_DECLs without
! 	name try the lang_hooks.types.classtype_as_base langhook and
! 	if it returns non-NULL, use that instead of ftype for recursive call.
  
! 2022-04-07  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/105150
! 	* tree.cc (tree_builtin_call_types_compatible_p): New function.
! 	(get_call_combined_fn): Use it.
  
! 2022-04-07  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/105165
! 	* tree-complex.cc (expand_complex_asm): Sorry for asm goto
! 	_Complex outputs.
  
! 2022-04-07  liuhongt  <hongtao.liu@intel.com>
  
! 	* config/i386/sse.md (<sse2_avx2>_andnot<mode>3_mask):
! 	Removed.
! 	(<sse>_andnot<mode>3<mask_name>): Disable V*HFmode patterns
! 	for mask_applied.
! 	(<code><mode>3<mask_name>): Ditto.
! 	(*<code><mode>3<mask_name>): Ditto.
! 	(VFB_128_256): Adjust condition of V8HF/V16HFmode according to
! 	real instruction.
! 	(VFB_512): Ditto.
! 	(VFB): Ditto.
  
! 2022-04-06  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/104985
! 	* combine.cc (struct undo): Add where.regno member.
! 	(do_SUBST_MODE): Rename to ...
! 	(subst_mode): ... this.  Change first argument from rtx * into int,
! 	operate on regno_reg_rtx[regno] and save regno into where.regno.
! 	(SUBST_MODE): Remove.
! 	(try_combine): Use subst_mode instead of SUBST_MODE, change first
! 	argument from regno_reg_rtx[whatever] to whatever.  For UNDO_MODE, use
! 	regno_reg_rtx[undo->where.regno] instead of *undo->where.r.
! 	(undo_to_marker): For UNDO_MODE, use regno_reg_rtx[undo->where.regno]
! 	instead of *undo->where.r.
! 	(simplify_set): Use subst_mode instead of SUBST_MODE, change first
! 	argument from regno_reg_rtx[whatever] to whatever.
  
! 2022-04-06  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/105069
! 	* config/sh/sh.opt (mdiv=): Add Save.
  
! 2022-04-06  Martin Liska  <mliska@suse.cz>
  
! 	PR driver/105096
! 	* common.opt: Document properly based on what it does.
! 	* gcc.cc (display_help): Unify with what we have in common.opt.
! 	* opts.cc (common_handle_option): Do not print undocumented
! 	options.
  
! 2022-04-06  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	* config/mips/mips.cc (mips_fpr_return_fields): Ignore
! 	cxx17_empty_base_field_p fields and set an indicator.
! 	(mips_return_in_msb): Adjust for mips_fpr_return_fields change.
! 	(mips_function_value_1): Inform psABI change about C++17 empty
! 	bases.
  
! 2022-04-06  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/105150
! 	* gimple.cc (gimple_builtin_call_types_compatible_p): Use
! 	builtin_decl_explicit here...
! 	(gimple_call_builtin_p, gimple_call_combined_fn): ... rather than
! 	here.
  
! 2022-04-06  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105173
! 	* tree-ssa-reassoc.cc (find_insert_point): Get extra
! 	insert_before output argument and compute it.
! 	(insert_stmt_before_use): Adjust.
! 	(rewrite_expr_tree): Likewise.
  
! 2022-04-06  Richard Biener  <rguenther@suse.de>
  
! 	PR ipa/105166
! 	* ipa-modref-tree.cc (modref_access_node::get_ao_ref ): Bail
! 	out for non-pointer arguments.
  
! 2022-04-06  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105163
! 	* tree-ssa-reassoc.cc (repropagate_negates): Avoid propagating
! 	negated abnormals.
  
! 2022-04-06  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/105150
! 	* gimple.cc (gimple_call_builtin_p, gimple_call_combined_fn):
! 	For BUILT_IN_NORMAL calls, call gimple_builtin_call_types_compatible_p
! 	preferrably on builtin_decl_explicit decl rather than fndecl.
! 	* tree-ssa-strlen.cc (valid_builtin_call): Don't call
! 	gimple_builtin_call_types_compatible_p here.
  
! 2022-04-06  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR tree-optimization/103761
! 	* tree-vect-stmts.cc (check_load_store_for_partial_vectors): Replace
! 	the ncopies parameter with an slp_node parameter.  Calculate the
! 	number of vectors based on it and vectype.  Rename lambda to
! 	group_memory_nvectors.
! 	(vectorizable_store, vectorizable_load): Update calls accordingly.
  
! 2022-04-06  Martin Liska  <mliska@suse.cz>
  
! 	* doc/invoke.texi: Document it.
  
! 2022-04-06  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105148
! 	* tree-ssa-loop-ivopts.cc (idx_record_use): Walk raw operands
! 	2 and 3 of ARRAY_REFs.
  
! 2022-04-06  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	* config/i386/sse.md (ANDNOT_MODE): New mode iterator for TF and V1TI.
! 	(*andnottf3): Replace with...
! 	(*andnot<mode>3): New define_insn using ANDNOT_MODE.
  
! 2022-04-06  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105142
! 	* gimple-fold.h (maybe_fold_and_comparisons): Add defaulted
! 	basic-block parameter.
! 	(maybe_fold_or_comparisons): Likewise.
! 	* gimple-fold.cc (follow_outer_ssa_edges): New.
! 	(maybe_fold_comparisons_from_match_pd): Use follow_outer_ssa_edges
! 	when an outer condition basic-block is specified.
! 	(and_comparisons_1, and_var_with_comparison,
! 	and_var_with_comparison_1, or_comparisons_1,
! 	or_var_with_comparison, or_var_with_comparison_1): Receive and pass
! 	down the outer condition basic-block.
! 	* tree-ssa-ifcombine.cc (ifcombine_ifandif): Pass down the
! 	basic-block of the outer condition.
  
! 2022-04-06  Kewen Lin  <linkw@linux.ibm.com>
  
! 	PR target/105002
! 	* config/rs6000/rs6000.cc (rs6000_maybe_emit_maxc_minc): Support more
! 	comparison codes UNLT/UNLE/UNGT/UNGE.
  
! 2022-04-05  David Malcolm  <dmalcolm@redhat.com>
  
! 	* doc/extend.texi (Common Function Attributes): Document that
! 	'access' does not imply 'nonnull'.
  
! 2022-04-05  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/105139
! 	* config/i386/mmx.md (*movv2qi_internal):
! 	Change insn mode of alternative 5 to HF for TARGET_AVX512FP16.
  
! 2022-04-05  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64.md (aarch64_cpymemdi): Turn into a
! 	define_expand and turn operands 0 and 1 from REGs to MEMs.
! 	(*aarch64_cpymemdi): New pattern.
! 	(aarch64_setmemdi): Turn into a define_expand and turn operand 0
! 	from a REG to a MEM.
! 	(*aarch64_setmemdi): New pattern.
! 	* config/aarch64/aarch64.cc (aarch64_expand_cpymem_mops): Use
! 	copy_to_mode_reg on all three registers.  Replace the original
! 	MEM addresses rather than creating wild reads and writes.
! 	(aarch64_expand_setmem_mops): Likewise for the size and for the
! 	destination memory and address.
  
! 2022-04-05  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/103147
! 	* config/aarch64/aarch64-protos.h (aarch64_simd_switcher): New class.
! 	* config/aarch64/aarch64-sve-builtins.h (sve_switcher): Inherit
! 	from aarch64_simd_switcher.
! 	* config/aarch64/aarch64-builtins.cc (aarch64_simd_tuple_modes):
! 	New variable.
! 	(aarch64_lookup_simd_builtin_type): Use it instead of TYPE_MODE.
! 	(register_tuple_type): Add more asserts.  Expect the alignment
! 	of the structure to be subject to flag_pack_struct and
! 	maximum_field_alignment.  Set aarch64_simd_tuple_modes.
! 	(aarch64_simd_switcher::aarch64_simd_switcher): New function.
! 	(aarch64_simd_switcher::~aarch64_simd_switcher): Likewise.
! 	(handle_arm_neon_h): Hold an aarch64_simd_switcher throughout.
! 	(aarch64_general_init_builtins): Hold an aarch64_simd_switcher
! 	while calling aarch64_init_simd_builtins.
! 	* config/aarch64/aarch64-sve-builtins.cc (sve_switcher::sve_switcher)
! 	(sve_switcher::~sve_switcher): Remove code now performed by
! 	aarch64_simd_switcher.
  
! 2022-04-05  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/104897
! 	* config/aarch64/aarch64-sve-builtins.cc
! 	(function_resolver::infer_vector_or_tuple_type): Use error_n
! 	for "%d vectors" messages.
  
! 2022-04-05  Chung-Lin Tang  <cltang@codesourcery.com>
  
! 	* omp-low.cc (lower_omp_target): Use outer context looked-up 'var' as
! 	argument to lang_hooks.decls.omp_array_data, instead of 'ovar' from
! 	current clause.
  
! 2022-04-05  Richard Biener  <rguenther@suse.de>
  
! 	PR c/105151
! 	* passes.def (pass_walloca): Move early instance into
! 	pass_build_ssa_passes to make SSA form available.
  
! 2022-04-05  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/101908
! 	* config/i386/i386.cc (ix86_split_stlf_stall_load): New
! 	function
! 	(ix86_reorg): Call ix86_split_stlf_stall_load.
! 	* config/i386/i386.opt (-param=x86-stlf-window-ninsns=): New
! 	param.
  
! 2022-04-05  Alexandre Oliva  <oliva@adacore.com>
  
! 	* targhooks.cc (default_zero_call_used_regs): Attempt to group
! 	regs that the target refuses to use in their natural modes.
! 	(zcur_select_mode_rtx): New.
! 	* regs.h (struct target_regs): Add x_hard_regno_max_nregs.
! 	(hard_regno_max_nregs): Define.
! 	* reginfo.cc (init_reg_modes_target): Set hard_regno_max_nregs.
  
! 2022-04-04  Alex Coplan  <alex.coplan@arm.com>
  
! 	* doc/match-and-simplify.texi: Fix typos.
  
! 2022-04-04  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/105144
! 	* config/aarch64/t-aarch64 (s-aarch64-tune-md): Do move-if-change
! 	only if configured with --enable-maintainer-mode, otherwise compare
! 	tmp-aarch64-tune.md with $(srcdir)/config/aarch64/aarch64-tune.md and
! 	if they differ, emit a message and fail.
  
! 2022-04-04  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/105144
! 	* config/aarch64/t-aarch64 (s-mddeps): Depend on s-aarch64-tune-md.
! 	* config/aarch64/aarch64-tune.md: Regenerated.
  
! 2022-04-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105132
! 	* tree-vect-stmts.cc (vectorizable_operation): Check that
! 	the input vectors have the same number of elements.
  
! 2022-04-04  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/105140
! 	* fold-const.cc (fold_convertible_p): Allow a TYPE_P arg.
  
! 2022-04-03  Jeff Law  <jeffreyalaw@gmail.com>
  
! 	PR target/104987
! 	* config/iq2000/iq2000.md (bbi): New attribute,  default to no.
! 	(delay slot descripts): Use different delay slot description when
! 	the insn as the "bbi" attribute.
! 	(bbi, bbin patterns): Set the bbi attribute to yes.
  
! 2022-04-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/105123
! 	* config/i386/i386-expand.cc (ix86_expand_vector_init_general): Avoid
! 	using word as target for expand_simple_binop when doing ASHIFT and
! 	IOR.
  
! 2022-04-02  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	* config/mips/mips.cc (mips_function_arg): Check if DECL_SIZE is
! 	NULL before dereferencing it.
  
! 2022-04-01  Qing Zhao  <qing.zhao@oracle.com>
  
! 	* config/i386/i386.cc (zero_all_st_registers): Return the value of
! 	num_of_st.
! 	(ix86_zero_call_used_regs): Update zeroed_hardregs set according to
! 	the return value of zero_all_st_registers.
! 	* doc/tm.texi: Update the documentation of TARGET_ZERO_CALL_USED_REGS.
! 	* function.cc (gen_call_used_regs_seq): Add an assertion.
! 	* target.def: Update the documentation of TARGET_ZERO_CALL_USED_REGS.
  
! 2022-04-01  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	PR target/102024
! 	* config/mips/mips.cc (mips_function_arg): Ignore zero-width
! 	fields, and inform if it causes a psABI change.
  
! 2022-04-01  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	PR target/102024
! 	* config/mips/mips.cc (mips_fpr_return_fields): Detect C++
! 	zero-width bit-fields and set up an indicator.
! 	(mips_return_in_msb): Adapt for mips_fpr_return_fields change.
! 	(mips_function_value_1): Diagnose when the presense of a C++
! 	zero-width bit-field changes function returning in GCC 12.
  
! 2022-04-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/104645
! 	* tree-ssa-phiopt.cc (value_replacement): If assign has
! 	CONVERT_EXPR_CODE_P rhs_code, treat it like a preparation
! 	statement with constant evaluation.
  
! 2022-04-01  YunQiang Su  <yunqiang.su@cipunited.com>
  
! 	* config/mips/mips.cc (mips_expand_prologue):
! 	  IPL is 8bit for MCU ASE.
  
! 2022-03-31  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	PR target/104004
! 	* config/rs6000/rs6000-builtins.def (MFFSL): Mark nosoft.
! 	(MTFSB0): Likewise.
! 	(MTFSB1): Likewise.
! 	(SET_FPSCR_RN): Likewise.
! 	(SET_FPSCR_DRN): Mark nosoft and no32bit.
  
! 2022-03-31  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	* doc/options.texi (Option file format): Clarifications around
! 	option definition records' help texts.
  
! 2022-03-31  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	* optc-gen.awk <END>: Fix "Multiple different help strings" error
! 	diagnostic.
  
! 2022-03-31  Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	* config/aarch64/aarch64.cc (aarch64_vector_costs): Define
! 	determine_suggested_unroll_factor and m_has_avg.
! 	(determine_suggested_unroll_factor): New function.
! 	(aarch64_vector_costs::add_stmt_cost): Check for a qualifying pattern
! 	to set m_nosve_pattern.
! 	(aarch64_vector_costs::finish_costs): Use
! 	determine_suggested_unroll_factor.
! 	* config/aarch64/aarch64.opt (aarch64-vect-unroll-limit): New.
! 	* doc/invoke.texi: (aarch64-vect-unroll-limit): Document new option.
  
! 2022-03-31  Martin Jambor  <mjambor@suse.cz>
  
! 	PR ipa/103083
! 	* ipa-prop.h (ipa_ancestor_jf_data): New flag keep_null;
! 	(ipa_get_jf_ancestor_keep_null): New function.
! 	* ipa-prop.cc (ipa_set_ancestor_jf): Initialize keep_null field of the
! 	ancestor function.
! 	(compute_complex_assign_jump_func): Pass false to keep_null
! 	parameter of ipa_set_ancestor_jf.
! 	(compute_complex_ancestor_jump_func): Pass true to keep_null
! 	parameter of ipa_set_ancestor_jf.
! 	(update_jump_functions_after_inlining): Carry over keep_null from the
! 	original ancestor jump-function or merge them.
! 	(ipa_write_jump_function): Stream keep_null flag.
! 	(ipa_read_jump_function): Likewise.
! 	(ipa_print_node_jump_functions_for_edge): Print the new flag.
! 	* ipa-cp.cc (class ipcp_bits_lattice): Make various getters const.  New
! 	member function known_nonzero_p.
! 	(ipcp_bits_lattice::known_nonzero_p): New.
! 	(ipcp_bits_lattice::meet_with_1): New parameter drop_all_ones,
! 	observe it.
! 	(ipcp_bits_lattice::meet_with): Likewise.
! 	(propagate_bits_across_jump_function): Simplify.  Pass true in
! 	drop_all_ones when it is necessary.
! 	(propagate_aggs_across_jump_function): Take care of keep_null
  	flag.
+ 	(ipa_get_jf_ancestor_result): Propagate NULL accross keep_null
+ 	jump functions.
  
! 2022-03-31  Martin Jambor  <mjambor@suse.cz>
  
! 	PR ipa/102513
! 	* ipa-cp.cc (decide_whether_version_node): Skip scalar values
! 	which do not fit the known value_range.
  
! 2022-03-31  Martin Jambor  <mjambor@suse.cz>
  
! 	PR ipa/103171
! 	* ipa-prop.cc (propagate_controlled_uses): Add a LOAD reference
! 	always when an ADDR_EXPR constant is known to reach a load because
! 	of inlining, not just when removing an ADDR reference.
  
! 2022-03-31  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105109
! 	* tree-ssa.cc (execute_update_addresses_taken): Suppress
! 	diagnostics on the load of the other complex component.
  
! 2022-03-31  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.h (ASM_SPEC): Use "-m sm_35" for -misa=sm_30.
  
! 2022-03-31  Richard Biener  <rguenther@suse.de>
  
! 	PR rtl-optimization/105091
! 	* gimple-expr.cc (mark_addressable): Handle TARGET_MEM_REF
! 	bases.
  
! 2022-03-31  Richard Biener  <rguenther@suse.de>
  
! 	Revert:
! 	2021-09-13  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/102125
! 	* gimple-fold.c (gimple_fold_builtin_memory_op): Allow folding
! 	memcpy if the size is not more than MOVE_MAX * MOVE_RATIO.
  
! 2022-03-31  Sebastian Huber  <sebastian.huber@embedded-brains.de>
  
! 	* gcov-io.cc (gcov_read_string): Reword documentation comment.
  
! 2022-03-30  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	* config/rs6000/rs6000-builtins.def (NEG_V16QI): Move to [altivec]
! 	stanza.
! 	(NEG_V4SF): Likewise.
! 	(NEG_V4SI): Likewise.
! 	(NEG_V8HI): Likewise.
! 	(NEG_V2DF): Move to [vsx] stanza.
! 	(NEG_V2DI): Likewise.
  
! 2022-03-30  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR middle-end/105032
! 	* lra-assigns.cc (find_reload_regno_insns): Modify loop condition.
  
! 2022-03-30  Tom de Vries  <tdevries@suse.de>
! 	    Tobias Burnus  <tobias@codesourcery.com>
  
! 	* doc/invoke.texi (march): Document __PTX_SM__.
! 	 (mptx): Document __PTX_ISA_VERSION_MAJOR__ and
! 	 __PTX_ISA_VERSION_MINOR__.
  
! 2022-03-30  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR sanitizer/105093
! 	* ubsan.cc (instrument_object_size): If t is equal to inner and
! 	is a decl other than global var, punt.  When emitting call to
! 	UBSAN_OBJECT_SIZE ifn, make sure base is addressable.
  
! 2022-03-30  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/105094
! 	* gimple-ssa-store-merging.cc (mem_valid_for_store_merging): Punt if
! 	bitsize <= 0 rather than just == 0.
  
! 2022-03-30  Tom de Vries  <tdevries@suse.de>
  
! 	* doc/invoke.texi (misa, mptx): Update.
! 	(march, march-map): Add.
  
! 2022-03-30  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	* opt-functions.awk (n_args): New function.
! 	(lang_enabled_by): Merge function into...
! 	* optc-gen.awk <END>: ... sole user here.
! 	Improve diagnostics.
  
! 2022-03-29  Marek Polacek  <polacek@redhat.com>
! 	    Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/103597
! 	* gimplify.cc (collect_fallthrough_labels): Don't push UNUSED_LABEL_Ps
! 	into labels.  Maybe set prev to the statement preceding UNUSED_LABEL_P.
! 	(gimplify_cond_expr): Set UNUSED_LABEL_P.
! 	* tree.h (UNUSED_LABEL_P): New.
  
! 2022-03-29   Michael Meissner  <meissner@linux.ibm.com>
  
! 	* config/rs6000/vsx.md (vsx_extract_<mode>): Allow destination to
! 	be any VSX register.
  
! 2022-03-29  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/102024
! 	* config/aarch64/aarch64.cc (aapcs_vfp_sub_candidate): Handle
! 	zero-sized bit-fields.  Detect cases where a warning may be needed.
! 	(aarch64_vfp_is_call_or_return_candidate): Emit a note if a
! 	zero-sized bit-field has caused parameter passing to change.
  
! 2022-03-29  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/102024
! 	* config/arm/arm.cc (aapcs_vfp_sub_candidate): Handle zero-sized
! 	bit-fields.  Detect cases where a warning may be needed.
! 	(aapcs_vfp_is_call_or_return_candidate): Emit a note if
! 	a zero-sized bit-field has caused parameter passing to change.
  
! 2022-03-29  Richard Earnshaw  <rearnsha@arm.com>
  
! 	PR target/96882
! 	* config/arm/arm.cc (arm_get_pcs_model): Disable selection of
! 	ARM_PCS_AAPCS_LOCAL.
  
! 2022-03-29  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104857
! 	* config/nvptx/nvptx-c.cc (nvptx_cpu_cpp_builtins): Emit
! 	__PTX_ISA_VERSION_MAJOR__ and __PTX_ISA_VERSION_MINOR__.
! 	* config/nvptx/nvptx.cc (ptx_version_to_number): New function.
! 	* config/nvptx/nvptx-protos.h (ptx_version_to_number): Declare.
  
! 2022-03-29  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.opt (m64): Update help text to reflect that it
! 	is ignored.
  
! 2022-03-29  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104714
! 	* config/nvptx/nvptx.opt (march-map=*): Add aliases.
  
! 2022-03-29  Jan Hubicka  <hubicka@ucw.cz>
  
! 	* config/i386/i386-builtins.cc (ix86_vectorize_builtin_gather): Test
! 	TARGET_USE_GATHER_2PARTS and TARGET_USE_GATHER_4PARTS.
! 	* config/i386/i386.h (TARGET_USE_GATHER_2PARTS): New macro.
! 	(TARGET_USE_GATHER_4PARTS): New macro.
! 	* config/i386/x86-tune.def (X86_TUNE_USE_GATHER_2PARTS): New tune
! 	(X86_TUNE_USE_GATHER_4PARTS): New tune
  
! 2022-03-29  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.opt (march): Add alias of misa.
  
! 2022-03-29  Chenghua Xu  <xuchenghua@loongson.cn>
! 	    Lulu Cheng  <chenglulu@loongson.cn>
  
! 	* doc/install.texi: Add LoongArch options section.
! 	* doc/invoke.texi: Add LoongArch options section.
! 	* doc/md.texi: Add LoongArch options section.
  
! 2022-03-29  Chenghua Xu  <xuchenghua@loongson.cn>
! 	    Lulu Cheng  <chenglulu@loongson.cn>
  
! 	* config/loongarch/loongarch-c.cc
  
! 2022-03-29  Chenghua Xu  <xuchenghua@loongson.cn>
! 	    Lulu Cheng  <chenglulu@loongson.cn>
  
! 	* config/loongarch/larchintrin.h: New file.
! 	* config/loongarch/loongarch-builtins.cc: New file.
  
! 2022-03-29  Chenghua Xu  <xuchenghua@loongson.cn>
! 	    Lulu Cheng  <chenglulu@loongson.cn>
  
! 	* config/host-linux.cc: Add LoongArch support.
! 	* config/loongarch/loongarch-protos.h: New file.
! 	* config/loongarch/loongarch-tune.h: Likewise.
! 	* config/loongarch/loongarch.cc: Likewise.
! 	* config/loongarch/loongarch.h: Likewise.
  
! 2022-03-29  Chenghua Xu  <xuchenghua@loongson.cn>
! 	    Lulu Cheng  <chenglulu@loongson.cn>
  
! 	* config/loongarch/constraints.md: New file.
! 	* config/loongarch/generic.md: New file.
! 	* config/loongarch/la464.md: New file.
! 	* config/loongarch/loongarch-ftypes.def: New file.
! 	* config/loongarch/loongarch-modes.def: New file.
! 	* config/loongarch/loongarch.md: New file.
! 	* config/loongarch/predicates.md: New file.
! 	* config/loongarch/sync.md: New file.
  
! 2022-03-29  Chenghua Xu  <xuchenghua@loongson.cn>
! 	    Lulu Cheng  <chenglulu@loongson.cn>
  
! 	* configure: Regenerate file.
  
! 2022-03-29  Chenghua Xu  <xuchenghua@loongson.cn>
! 	    Lulu Cheng  <chenglulu@loongson.cn>
  
! 	* common/config/loongarch/loongarch-common.cc: New file.
! 	* config/loongarch/genopts/genstr.sh: New file.
! 	* config/loongarch/genopts/loongarch-strings: New file.
! 	* config/loongarch/genopts/loongarch.opt.in: New file.
! 	* config/loongarch/loongarch-str.h: New file.
! 	* config/loongarch/gnu-user.h: New file.
! 	* config/loongarch/linux.h: New file.
! 	* config/loongarch/loongarch-cpu.cc: New file.
! 	* config/loongarch/loongarch-cpu.h: New file.
! 	* config/loongarch/loongarch-def.c: New file.
! 	* config/loongarch/loongarch-def.h: New file.
! 	* config/loongarch/loongarch-driver.cc: New file.
! 	* config/loongarch/loongarch-driver.h: New file.
! 	* config/loongarch/loongarch-opts.cc: New file.
! 	* config/loongarch/loongarch-opts.h: New file.
! 	* config/loongarch/loongarch.opt: New file.
! 	* config/loongarch/t-linux: New file.
! 	* config/loongarch/t-loongarch: New file.
! 	* config.gcc: Add LoongArch support.
! 	* configure.ac: Add LoongArch support.
  
! 2022-03-29  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	* opt-functions.awk (lang_enabled_by): Fix 'enabledby_negargs'
! 	typo.
  
! 2022-03-29  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105080
! 	* tree-ssa-strlen.cc (printf_strlen_execute): Always init
! 	loops and SCEV.
  
! 2022-03-28  Indu Bhagat  <indu.bhagat@oracle.com>
  
! 	* ctfout.cc (ctf_preprocess): Use ctfc_get_num_ctf_vars instead.
! 	(output_ctf_vars): Likewise.
  
! 2022-03-28  Jason Merrill  <jason@redhat.com>
  
! 	PR c++/59426
! 	* doc/extend.texi: Refer to __is_trivial instead of __is_pod.
  
! 2022-03-28  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/105068
! 	* config/i386/sse.md (*ssse3_pshufbv8qi3): Also replace "Yv" with
! 	"Yw" in clobber.
  
! 2022-03-28  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104818
! 	* config/nvptx/gen-opt.sh (ptx_isa): Improve help text.
! 	* config/nvptx/nvptx-gen.opt: Regenerate.
! 	* config/nvptx/nvptx.opt (misa, mptx, ptx_version): Improve help text.
! 	* config/nvptx/t-nvptx (s-nvptx-gen-opt): Add missing dependency on
! 	gen-opt.sh.
  
! 2022-03-28  David Malcolm  <dmalcolm@redhat.com>
  
! 	PR analyzer/104308
! 	* gimple-fold.cc (gimple_fold_builtin_memory_op): When optimizing
! 	to loads then stores, set the location of the new load stmt.
  
! 2022-03-28  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105070
! 	* tree-switch-conversion.h
! 	(bit_test_cluster::hoist_edge_and_branch_if_true): Add location
! 	argument.
! 	* tree-switch-conversion.cc
! 	(bit_test_cluster::hoist_edge_and_branch_if_true): Annotate
! 	cond with location.
! 	(bit_test_cluster::emit): Annotate all generated expressions
! 	with location.
  
! 2022-03-28  Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	* config/aarch64/aarch64-cores.def: Update Neoverse N2 core entry.
  
! 2022-03-28  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/105066
! 	* config/i386/sse.md (vec_set<mode>_0): Change attr "isa" of
! 	alternative 4 from sse4_noavx to noavx.
  
! 2022-03-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/105056
! 	* tree-predcom.cc (component::component): Initialize also comp_step.
  
! 2022-03-27  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/105068
! 	* config/i386/sse.md (*ssse3_pshufbv8qi3): Replace "Yv" with
! 	"Yw".
  
! 2022-03-26  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	PR middle-end/104885
! 	* calls.cc (mark_stack_region_used): Check that the region
! 	is within the allocated size of stack_usage_map.
  
! 2022-03-26  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/103775
! 	* recog.cc (check_invalid_inc_dec): New function.
! 	(insn_invalid_p): Return 1 if REG_INC operand overlaps
! 	any stored REGs.
  
! 2022-03-26  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/105058
! 	* config/i386/sse.md (loadiwkey): Replace "v" with "x".
! 	(aes<aesklvariant>u8): Likewise.
  
! 2022-03-26  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/105052
! 	* config/i386/sse.md (ssse3_ph<plusminus_mnemonic>wv4hi3):
! 	Replace "Yv" with "x".
! 	(ssse3_ph<plusminus_mnemonic>dv2si3): Likewise.
! 	(ssse3_psign<mode>3): Likewise.
  
! 2022-03-26  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* reload.cc (find_reloads): Align comment with code where
! 	considering the intersection of register classes then tweaking the
! 	regclass for the current alternative or rejecting it.
  
! 2022-03-25  Christophe Lyon  <christohe.lyon@arm.com>
  
! 	PR target/104882
! 	Revert
! 	2021-06-11  Christophe Lyon  <christophe.lyon@linaro.org>
  
! 	* config/arm/mve.md (mve_vec_unpack<US>_lo_<mode>): Delete.
! 	(mve_vec_unpack<US>_hi_<mode>): Delete.
! 	(@mve_vec_pack_trunc_lo_<mode>): Delete.
! 	(mve_vmovntq_<supf><mode>): Remove '@' prefix.
! 	* config/arm/neon.md (vec_unpack<US>_hi_<mode>): Move back
! 	from vec-common.md.
! 	(vec_unpack<US>_lo_<mode>): Likewise.
! 	(vec_pack_trunc_<mode>): Rename from
! 	neon_quad_vec_pack_trunc_<mode>.
! 	* config/arm/vec-common.md (vec_unpack<US>_hi_<mode>): Delete.
! 	(vec_unpack<US>_lo_<mode>): Delete.
! 	(vec_pack_trunc_<mode>): Delete.
  
! 2022-03-25  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR middle-end/104971
! 	* lra-lives.cc (process_bb_lives): Check hard_regs_live for hard
! 	regs to clear remove_p flag.
  
! 2022-03-25  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105053
! 	* tree-vect-loop.cc (vect_create_epilog_for_reduction): Pick
! 	the correct live-out stmt for a reduction chain.
  
! 2022-03-25  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/105049
! 	* tree.cc (uniform_vector_p): Recurse for VECTOR_CST or
! 	CONSTRUCTOR first elements.
  
! 2022-03-25  Tobias Burnus  <tobias@codesourcery.com>
  
! 	PR analyzer/103533
! 	* doc/invoke.texi (Static Analyzer Options): Move
! 	@ignore block after @gccoptlist's '}' for 'make pdf'.
  
! 2022-03-25  David Malcolm  <dmalcolm@redhat.com>
  
! 	PR analyzer/104954
! 	* doc/invoke.texi (Static Analyzer Options): Add
! 	-fdump-analyzer-untracked.
  
! 2022-03-25  Avinash Sonawane  <rootkea@gmail.com>
  
! 	PR analyzer/103533
! 	* doc/invoke.texi: Document that enabling taint analyzer
! 	checker disables some warnings from `-fanalyzer`.
  
! 2022-03-24  Alexandre Oliva  <oliva@adacore.com>
  
! 	PR debug/104564
! 	* gimple-harden-conditionals.cc (detach_value): Keep temps
! 	anonymous.
  
! 2022-03-24  Alexandre Oliva  <oliva@adacore.com>
  
! 	PR middle-end/104975
! 	* gimple-harden-conditionals.cc
! 	(pass_harden_compares::execute): Force split in case of
! 	multiple edges.
  
! 2022-03-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/105035
! 	* fold-const.cc (operand_equal_p) <case COMPONENT_REF>: If either
! 	field0 or field1 is not a FIELD_DECL, return false.
  
! 2022-03-24  Richard Biener  <rguenther@suse.de>
  
! 	* tree-predcom.cc (chain::chain): Add CTOR.
! 	(component::component): Likewise.
! 	(pcom_worker::release_chain): Use delete.
! 	(release_components): Likewise.
! 	(pcom_worker::filter_suitable_components): Likewise.
! 	(pcom_worker::split_data_refs_to_components): Use new.
! 	(make_invariant_chain): Likewise.
! 	(make_rooted_chain): Likewise.
! 	(pcom_worker::combine_chains): Likewise.
! 	* tree-vect-loop.cc (vect_create_epilog_for_reduction):
! 	Make sure to release previously constructed scalar_results.
! 	* tree-vect-stmts.cc (vectorizable_load): Use auto_vec
! 	for vec_offsets.
! 	* vr-values.cc (simplify_using_ranges::~simplify_using_ranges):
! 	Release m_flag_set_edges.
  
! 2022-03-24  Siddhesh Poyarekar  <siddhesh@gotplt.org>
  
! 	PR tree-optimization/104970
! 	* tree-object-size.cc (parm_object_size): Restrict size
! 	computation scenarios to explicit access attributes.
  
! 2022-03-24  Kewen Lin  <linkw@linux.ibm.com>
  
! 	PR target/104967
! 	* config/rs6000/rs6000-c.cc (find_instance): Skip instances with null
! 	function types.
  
! 2022-03-23  Richard Biener  <rguenther@suse.de>
  
! 	PR target/102125
! 	* gimple-fold.cc (gimple_fold_builtin_memory_op): Allow the
! 	use of movmisalign when either the source or destination
! 	decl is properly aligned.
  
! 2022-03-23  Richard Biener  <rguenther@suse.de>
  
! 	PR rtl-optimization/105028
! 	* ira-color.cc (form_threads_from_copies): Remove unnecessary
! 	copying of the sorted_copies tail.
  
! 2022-03-23  Martin Liska  <mliska@suse.cz>
  
! 	* config/rs6000/rs6000-c.cc (altivec_resolve_overloaded_builtin):
! 	Use %qs in format.
! 	* config/rs6000/rs6000.cc (rs6000_option_override_internal):
! 	Reword the error message.
  
! 2022-03-23  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/104976
! 	* config/i386/sse.md (ssePSmodelower): New.
! 	(*avx_cmp<mode>3_ltint_not): Force_reg operand before
! 	lowpart_subreg to avoid NULL_RTX.
! 	(<avx512>_fmaddc_<mode>_mask1<round_expand_name>,
! 	<avx512>_fcmaddc_<mode>_mask1<round_expand_name>,
! 	fma_<mode>_fmaddc_bcst, fma_<mode>_fcmaddc_bcst,
! 	<avx512>_<complexopname>_<mode>_mask<round_name>,
! 	avx512fp16_fcmaddcsh_v8hf_mask1<round_expand_name>,
! 	avx512fp16_fcmaddcsh_v8hf_mask3<round_expand_name>,
! 	avx512fp16_fmaddcsh_v8hf_mask3<round_expand_name>,
! 	avx512fp16_fmaddcsh_v8hf_mask3<round_expand_name>,
! 	float<floatunssuffix><mode>v4hf2,
! 	float<floatunssuffix>v2div2hf2,
! 	fix<fixunssuffix>_truncv4hf<mode>2,
! 	fix<fixunssuffix>_truncv2hfv2di2, extendv4hf<mode>2,
! 	extendv2hfv2df2,
! 	trunc<mode>v4hf2,truncv2dfv2hf2,
! 	*avx512bw_permvar_truncv16siv16hi_1,
! 	*avx512bw_permvar_truncv16siv16hi_1_hf,
! 	*avx512f_permvar_truncv8siv8hi_1,
! 	*avx512f_permvar_truncv8siv8hi_1_hf,
! 	*avx512f_vpermvar_truncv8div8si_1,
! 	*avx512f_permvar_truncv32hiv32qi_1,
! 	*avx512f_permvar_truncv16hiv16qi_1,
! 	*avx512f_permvar_truncv4div4si_1,
! 	*avx512f_pshufb_truncv8hiv8qi_1,
! 	*avx512f_pshufb_truncv4siv4hi_1,
! 	*avx512f_pshufd_truncv2div2si_1,
! 	sdot_prod<mode>, avx2_pblend<ssemodesuffix>_1,
! 	ashrv2di3,ashrv2di3,usdot_prod<mode>): Ditto.
  
! 2022-03-22  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104925
! 	* config/nvptx/nvptx.md (define_insn "nvptx_uniform_warp_check"):
! 	Use % as register prefix.
  
! 2022-03-22  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.cc (nvptx_scalar_mode_supported_p)
! 	(nvptx_libgcc_floating_mode_supported_p): Only enable HFmode for
! 	mexperimental.
  
! 2022-03-22  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.opt (mexperimental): New option.
  
! 2022-03-22  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104957
! 	* config/nvptx/nvptx-protos.h (nvptx_asm_output_def_from_decls): Declare.
! 	* config/nvptx/nvptx.cc (write_fn_proto_1): Don't add function marker
! 	for alias.
! 	(SET_ASM_OP, NVPTX_ASM_OUTPUT_DEF): New macro def.
! 	(nvptx_asm_output_def_from_decls): New function.
! 	* config/nvptx/nvptx.h (ASM_OUTPUT_DEF): New macro def, define to
! 	gcc_unreachable ().
! 	(ASM_OUTPUT_DEF_FROM_DECLS): New macro def, define to
! 	nvptx_asm_output_def_from_decls.
! 	* config/nvptx/nvptx.opt (malias): New opt.
  
! 2022-03-22  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104916
! 	PR target/104783
! 	* config/nvptx/nvptx.md (define_expand "omp_simt_exit"): Emit warp
! 	sync (or uniform warp check for mptx < 6.0).
  
! 2022-03-22  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/105012
! 	* tree-if-conv.cc (ifcvt_local_dce): Only call
! 	dse_classify_store when we have a VDEF.
  
! 2022-03-22  Martin Liska  <mliska@suse.cz>
  
! 	PR target/104902
! 	* config/nvptx/nvptx.cc (handle_ptx_version_option):
! 	Fix option wrapping in an error message.
  
! 2022-03-22  Martin Liska  <mliska@suse.cz>
  
! 	PR target/104903
! 	* config/rs6000/rs6000-c.cc (altivec_resolve_overloaded_builtin):
! 	Wrap const keyword.
  
! 2022-03-22  Martin Liska  <mliska@suse.cz>
  
! 	* config/v850/v850-c.cc (pop_data_area): Fix typo in pragma
! 	name.
  
! 2022-03-22  Martin Liska  <mliska@suse.cz>
  
! 	PR target/104898
! 	* config/rs6000/rs6000.cc (rs6000_option_override_internal):
! 	Use %qs instead of (%qs).
  
! 2022-03-22  Martin Liska  <mliska@suse.cz>
  
! 	PR target/104898
! 	* config/i386/i386-options.cc (ix86_option_override_internal):
! 	  Use '%qs' instead of '(%qs)'.
  
! 2022-03-22  Martin Liska  <mliska@suse.cz>
  
! 	PR target/104898
! 	* config/aarch64/aarch64.cc (aarch64_handle_attr_arch):
! 	Use 'qs' and remove usage '(%qs)'.
! 	(aarch64_handle_attr_cpu): Likewise.
! 	(aarch64_handle_attr_tune): Likewise.
! 	(aarch64_handle_attr_isa_flags): Likewise.
  
! 2022-03-22  Tamar Christina  <tamar.christina@arm.com>
! 	    Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	* config/aarch64/aarch64.cc (neoversev1_regmove_cost): New tuning
! 	struct.
! 	(neoversev1_tunings): Use neoversev1_regmove_cost and update store_int
! 	cost.
! 	(neoverse512tvb_tunings): Likewise.
  
! 2022-03-22  Tamar Christina  <tamar.christina@arm.com>
! 	    Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	* config/aarch64/aarch64.cc (demeter_addrcost_table,
! 	demeter_regmove_cost, demeter_advsimd_vector_cost,
! 	demeter_sve_vector_cost, demeter_scalar_issue_info,
! 	demeter_advsimd_issue_info, demeter_sve_issue_info,
! 	demeter_vec_issue_info, demeter_vector_cost,
! 	demeter_tunings): New tuning structs.
! 	(aarch64_ve_op_count::rename_cycles_per_iter): Enable for demeter
! 	tuning.
! 	* config/aarch64/aarch64-cores.def: Add entry for demeter.
! 	* config/aarch64/aarch64-tune.md (tune): Add demeter to list.
  
! 2022-03-22  Tamar Christina  <tamar.christina@arm.com>
! 	    Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	* config/aarch64/aarch64-protos.h (struct cpu_memmov_cost): New struct.
! 	(struct tune_params): Change type of memmov_cost to use cpu_memmov_cost.
! 	* config/aarch64/aarch64.cc (aarch64_memory_move_cost): Update all
! 	tunings to use cpu_memmov_cost struct.
  
! 2022-03-22  Tamar Christina  <tamar.christina@arm.com>
! 	    Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	* config/aarch64/aarch64.cc (neoversen2_addrcost_table,
! 	neoversen2_regmove_cost, neoversen2_advsimd_vector_cost,
! 	neoversen2_sve_vector_cost, neoversen2_scalar_issue_info,
! 	neoversen2_advsimd_issue_info, neoversen2_sve_issue_info,
! 	neoversen2_vec_issue_info, neoversen2_tunings): New structs.
! 	(neoversen2_tunings): Use new structs and update tuning flags.
! 	(aarch64_vec_op_count::rename_cycles_per_iter): Enable for neoversen2
! 	tuning.
  
! 2022-03-22  Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	* config/aarch64/aarch64.h (AARCH64_FL_FOR_ARCH9): Add FP16 feature
! 	bit.
  
! 2022-03-22  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/104982
! 	* config/i386/i386.md (*jcc_bt<mode>_mask): Extend the
! 	following splitter to reversed condition.
  
! 2022-03-22  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/104989
! 	* calls.cc (expand_call): Don't set ECF_NORETURN in flags after
! 	sorry for passing too large argument, instead set sibcall_failure
! 	for pass == 0, or a new normal_failure flag otherwise.  If
! 	normal_failure is set, don't assert all stack has been deallocated
! 	at the end and throw away the whole insn sequence.
  
! 2022-03-22  Qian Jianhua  <qianjh@cn.fujitsu.com>
  
! 	* print-tree.cc: Change array length
  
! 2022-03-22  Hongyu Wang  <hongyu.wang@intel.com>
  
! 	PR target/104978
! 	* config/i386/sse.md
! 	(avx512fp16_fmaddcsh_v8hf_mask1<round_expand_name):
! 	Use avx512f_movsf_mask instead of vmovaps or vblend, and
! 	force_reg before lowpart_subreg.
! 	(avx512fp16_fcmaddcsh_v8hf_mask1<round_expand_name): Likewise.
  
! 2022-03-21  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/105000
! 	* common/config/i386/i386-common.cc
! 	(OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET): Replace
! 	OPTION_MASK_ISA2_AVX512F_UNSET with OPTION_MASK_ISA2_SSE_UNSET.
  
! 2022-03-21  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/104998
! 	* common/config/i386/cpuinfo.h (get_available_features): Pass
! 	0x19 to __cpuid for bit_AESKLE.  Enable FEATURE_AESKLE only if
! 	bit_AESKLE is set.
  
! 2022-03-21  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR middle-end/104869
! 	* rtl-ssa/accesses.h (clobber_group::prev_clobber): Declare.
! 	(clobber_group::next_clobber): Likewise.
! 	(def_lookup::prev_def): Rename to...
! 	(def_lookup::last_def_of_prev_group): ...this.
! 	(def_lookup::next_def): Rename to...
! 	(def_lookup::first_def_of_next_group): ...this.
! 	(def_lookup::matching_or_prev_def): Rename to...
! 	(def_lookup::matching_set_or_last_def_of_prev_group): ...this.
! 	(def_lookup::matching_or_next_def): Rename to...
! 	(def_lookup::matching_set_or_first_def_of_next_group): ...this.
! 	(def_lookup::prev_def): New function, taking the lookup insn as
! 	argument.
! 	(def_lookup::next_def): Likewise.
! 	* rtl-ssa/member-fns.inl (def_lookup::prev_def): Rename to...
! 	(def_lookup::last_def_of_prev_group): ...this.
! 	(def_lookup::next_def): Rename to...
! 	(def_lookup::first_def_of_next_group): ...this.
! 	(def_lookup::matching_or_prev_def): Rename to...
! 	(def_lookup::matching_set_or_last_def_of_prev_group): ...this.
! 	(def_lookup::matching_or_next_def): Rename to...
! 	(def_lookup::matching_set_or_first_def_of_next_group): ...this.
! 	* rtl-ssa/movement.h (restrict_movement_for_dead_range): Update after
! 	above renaming.
! 	* rtl-ssa/accesses.cc (clobber_group::prev_clobber): New function.
! 	(clobber_group::next_clobber): Likewise.
! 	(def_lookup::prev_def): Likewise.
! 	(def_lookup::next_def): Likewise.
! 	(function_info::make_use_available): Pass the lookup insn to
! 	def_lookup::prev_def and def_lookup::next_def.
  
! 2022-03-21  Martin Liska  <mliska@suse.cz>
  
! 	* doc/invoke.texi: Document min-pagesize parameter.
  
! 2022-03-21  Richard Biener  <rguenther@suse.de>
  
! 	* tree-ssa-loop-niter.cc (estimate_numbers_of_iterations): Dump
! 	we are estimating niter of loop.
  
! 2022-03-21  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* common/config/riscv/riscv-common.cc (riscv_ext_flag_table):
! 	Update flag name and mask name.
! 	* config/riscv/riscv-c.cc (riscv_cpu_cpp_builtins): Define
! 	misc macro for vector extensions.
! 	* config/riscv/riscv-opts.h (MASK_VECTOR_EEW_32): Rename to ...
! 	(MASK_VECTOR_ELEN_32): ... this.
! 	(MASK_VECTOR_EEW_64): Rename to ...
! 	(MASK_VECTOR_ELEN_64): ... this.
! 	(MASK_VECTOR_EEW_FP_32): Rename to ...
! 	(MASK_VECTOR_ELEN_FP_32): ... this.
! 	(MASK_VECTOR_EEW_FP_64): Rename to ...
! 	(MASK_VECTOR_ELEN_FP_64): ... this.
! 	(TARGET_VECTOR_ELEN_32): New.
! 	(TARGET_VECTOR_ELEN_64): Ditto.
! 	(TARGET_VECTOR_ELEN_FP_32): Ditto.
! 	(TARGET_VECTOR_ELEN_FP_64): Ditto.
! 	(TARGET_MIN_VLEN): Ditto.
! 	* config/riscv/riscv.opt (riscv_vector_eew_flags): Rename to ...
! 	(riscv_vector_elen_flags): ... this.
  
! 2022-03-21  Hongyu Wang  <hongyu.wang@intel.com>
  
! 	PR target/104977
! 	* config/i386/sse.md
! 	(avx512fp16_fma<complexopname>sh_v8hf<mask_scalarcz_name><round_scalarcz_name>):
! 	Correct round operand for intel dialect.
  
! 2022-03-19  Arthur Cohen  <arthur.cohen@embecosm.com>
  
! 	* diagnostic.cc (diagnostic_cc_tests): Rename to...
! 	(c_diagnostic_cc_tests): ...this.
! 	* opt-problem.cc (opt_problem_cc_tests): Rename to...
! 	(c_opt_problem_cc_tests): ...this.
! 	* selftest-run-tests.cc (selftest::run_tests): No longer run
! 	opt_problem_cc_tests or diagnostic_cc_tests.
! 	* selftest.h (diagnostic_cc_tests): Remove declaration.
! 	(opt_problem_cc_tests): Likewise.
  
! 2022-03-19  Marc Nieper-Wißkirchen  <marc@nieper-wisskirchen.de>
  
! 	PR jit/63854
! 	* hash-traits.h (struct typed_const_free_remove): New.
! 	(struct free_string_hash): New.
! 	* pass_manager.h: Use free_string_hash.
! 	* passes.cc (pass_manager::register_pass_name): Use free_string_hash.
! 	(pass_manager::~pass_manager): Delete allocated m_name_to_pass_map.
  
! 2022-03-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/104971
! 	* config/i386/i386-expand.cc
! 	(ix86_expand_builtin) <case IX86_BUILTIN_READ_FLAGS>: If ignore,
! 	don't push/pop anything and just return const0_rtx.
  
! 2022-03-18  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR rtl-optimization/104961
! 	* lra-assigns.cc (find_reload_regno_insns): Process reload pseudo clobber.
  
! 2022-03-18  Jason Merrill  <jason@redhat.com>
  
! 	* tree.h (IDENTIFIER_LENGTH): Add comment.
  
! 2022-03-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/99578
! 	PR middle-end/100680
! 	PR tree-optimization/100834
! 	* params.opt (--param=min-pagesize=): New parameter.
! 	* pointer-query.cc
! 	(compute_objsize_r) <case ARRAY_REF>: Formatting fix.
! 	(compute_objsize_r) <case INTEGER_CST>: Use maximum object size instead
! 	of zero for pointer constants equal or larger than min-pagesize.
  
! 2022-03-18  Tom de Vries  <tdevries@suse.de>
  
! 	* gimplify.cc (gimplify_omp_for): Set location using 'input_location'.
! 	Set gfor location only when dealing with a OMP_TASKLOOP.
  
! 2022-03-18  Tom de Vries  <tdevries@suse.de>
  
! 	* gimplify.cc (gimplify_omp_for): Set taskloop location.
  
! 2022-03-18  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104952
! 	* omp-low.cc (lower_rec_input_clauses): Make sure GOMP_SIMT_XCHG_BFLY
! 	is executed unconditionally.
  
! 2022-03-18  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/104974
! 	* config/i386/i386.md (*movhi_internal): Set attr type from HI
! 	to HF for alternative 12 under TARGET_AVX512FP16.
  
! 2022-03-18  Cui,Lili  <lili.cui@intel.com>
  
! 	PR target/104963
! 	* config/i386/i386.h (PTA_SAPPHIRERAPIDS): change it to base on ICX.
! 	* doc/invoke.texi: Update documents for Intel sapphirerapids.
  
! 2022-03-17  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	PR target/86722
! 	PR tree-optimization/90356
! 	* config/i386/i386.md (*movtf_internal): Don't guard
! 	standard_sse_constant_p clause by optimize_function_for_size_p.
! 	(*movdf_internal): Likewise.
! 	(*movsf_internal): Likewise.
  
! 2022-03-17  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/102943
! 	* gimple-range-cache.cc (ranger_cache::range_from_dom): Find range via
! 	dominators and apply intermediary outgoing edge ranges.
  
! 2022-03-17  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104960
! 	* passes.def: Add pass parameter to pass_sink_code, mark
! 	last one to unsplit edges.
! 	* tree-ssa-sink.cc (pass_sink_code::set_pass_param): New.
! 	(pass_sink_code::execute): Always execute TODO_cleanup_cfg
! 	when we need to unsplit edges.
  
! 2022-03-17  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/103984
! 	* gimplify.cc (gimplify_target_expr): Gimplify type sizes and
! 	TARGET_EXPR_INITIAL into a temporary sequence, then push clobbers
! 	and asan unpoisioning, then append the temporary sequence and
! 	finally the TARGET_EXPR_CLEANUP clobbers.
  
! 2022-03-16  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	* config/i386/sse.md: Delete corrupt character/typo.
  
! 2022-03-16  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	PR target/94680
! 	* config/i386/sse.md (sse2_movq128): New define_expand to
! 	preserve previous named instruction.
! 	(*sse2_movq128_<mode>): Renamed from sse2_movq128, and
! 	generalized to VI8F_128 (both V2DI and V2DF).
  
! 2022-03-16  Siddhesh Poyarekar  <siddhesh@gotplt.org>
  
! 	PR tree-optimization/104941
! 	* tree-object-size.cc (size_for_offset): Make useless conversion
! 	check lighter and assign result of fold_convert to OFFSET.
  
! 2022-03-16  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/104890
! 	* config/i386/x86gprintrin.h: Also check _SOFT_FLOAT before
! 	pushing target("general-regs-only").
  
! 2022-03-16  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* common/config/riscv/riscv-common.cc (riscv_ext_version_table):
! 	Add version info for zk, zks and zkn.
  
! 2022-03-16  LiaoShihua  <shihua@iscas.ac.cn>
  
! 	* common/config/riscv/riscv-common.cc
! 	(riscv_combine_info): New.
! 	(riscv_subset_list::handle_combine_ext): Combine back into zk to
! 	maintain the canonical order in isa strings.
! 	(riscv_subset_list::parse): Ditto.
! 	* config/riscv/riscv-subset.h (handle_combine_ext): New.
  
! 2022-03-16  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/102008
! 	* passes.def: Move the added code sinking pass before the
! 	preceeding phiopt pass.
  
! 2022-03-16  Patrick Palka  <ppalka@redhat.com>
  
! 	PR c++/96780
! 	* doc/invoke.texi (C++ Dialect Options): Document
! 	-ffold-simple-inlines.
  
! 2022-03-16  Siddhesh Poyarekar  <siddhesh@gotplt.org>
  
! 	PR tree-optimization/104942
! 	* tree-object-size.cc (alloc_object_size): Remove STRIP_NOPS.
  
! 2022-03-16  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104910
! 	* config/aarch64/aarch64.cc (aarch64_load_symref_appropriately): Copy
! 	imm rtx.
  
! 2022-03-16  Roger Sayle  <roger@nextmovesoftware.com>
! 	    Richard Biener  <rguenther@suse.de>
  
! 	* gimple-match-head.cc (single_use): Implement inline using a
! 	single loop.
  
! 2022-03-16  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	* match.pd (X CMP X -> true): Test tree_expr_maybe_nan_p
! 	instead of HONOR_NANS.
! 	(X LTGT X -> false): Enable if X is not tree_expr_maybe_nan_p, as
! 	this can't trap/signal.
  
! 2022-03-16  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/104946
! 	* config/i386/i386-builtin.def (BDESC): Add
! 	CODE_FOR_sse4_1_blendvpd for IX86_BUILTIN_BLENDVPD.
! 	* config/i386/i386.cc (ix86_gimple_fold_builtin): Don't fold
! 	__builtin_ia32_blendvpd w/o sse4.2
  
! 2022-03-15  Peter Bergner  <bergner@linux.ibm.com>
  
! 	PR target/104923
! 	* config/rs6000/predicates.md (mma_disassemble_output_operand): Restrict
! 	acceptable MEM addresses.
  
! 2022-03-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/91229
! 	* config/riscv/riscv.cc (riscv_pass_aggregate_in_fpr_pair_p,
! 	riscv_pass_aggregate_in_fpr_and_gpr_p): Pass OPT_Wpsabi instead of 0
! 	to warning calls.
  
! 2022-03-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104890
! 	* config/i386/i386.h (LIBGCC2_UNWIND_ATTRIBUTE): Use no-mmx,no-sse
! 	instead of general-regs-only.
  
! 2022-03-15  Roger Sayle  <roger@nextmovesoftware.com>
! 	    Marc Glisse  <marc.glisse@inria.fr>
! 	    Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101895
! 	* match.pd (vec_same_elem_p): Handle CONSTRUCTOR_EXPR def.
! 	(plus (vec_perm (mult ...) ...) ...): New reordering simplification.
  
! 2022-03-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/104814
! 	* ifcvt.cc (find_if_case_1, find_if_case_2): Punt if test_bb doesn't
! 	end with onlyjump_p.  Assume BB_END (test_bb) is always non-NULL.
  
! 2022-03-15  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/104436
! 	* gimple-ssa-warn-access.cc (pass_waccess::check_dangling_stores):
! 	Check for warning suppression.  Avoid by-value arguments transformed
! 	into by-transparent-reference.
  
! 2022-03-14  Roger Sayle  <roger@nextmovesoftware.com>
! 	    Uroš Bizjak  <ubizjak@gmail.com>
  
! 	* config/i386/i386.md (peephole2 xorl;movb -> movzbl): Disable
! 	transformation when *zero_extend<mode>si2 is not available.
  
! 2022-03-14  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	* config/mips/mips.h (SUBTARGET_SHADOW_OFFSET): Define.
! 	* config/mips/mips.cc (mips_option_override): Make
! 	-fsanitize=address imply -fasynchronous-unwind-tables.  This is
! 	needed by libasan for stack backtrace on MIPS.
! 	(mips_asan_shadow_offset): Return SUBTARGET_SHADOW_OFFSET.
  
! 2022-03-14  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/104778
! 	* lra.cc (lra_substitute_pseudo): For debug_p mode, simplify
! 	SUBREG, ZERO_EXTEND, SIGN_EXTEND, FLOAT or UNSIGNED_FLOAT if recursive
! 	call simplified the first operand into VOIDmode constant.
  
! 2022-03-14  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/102586
! 	* doc/extend.texi (__builtin_clear_padding): Clearify that for C++
! 	argument type should be pointer to trivially-copyable type unless it
! 	is address of a variable or parameter.
  
! 2022-03-14  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99754
! 	* config/i386/emmintrin.h (_mm_loadu_si32): Put loaded value into
! 	first 	rather than last element of the vector, use __m32_u to do
! 	a really unaligned load, use just 0 instead of (int)0.
! 	(_mm_loadu_si16): Put loaded value into first rather than last
! 	element of the vector, use __m16_u to do a really unaligned load,
! 	use just 0 instead of (short)0.
  
! 2022-03-14  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR other/104899
! 	* config/bfin/bfin.cc (bfin_handle_longcall_attribute): Fix a typo
! 	in diagnostic message - cannott -> cannot.  Use %< and %> around
! 	names of attribute.  Avoid too long line.
! 	* range-op.cc (operator_logical_and::op1_range): Fix up a typo
! 	in comment - cannott -> cannot.  Use 2 spaces after . instead of one.
  
! 2022-03-14  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/104666
! 	* config/i386/i386-expand.cc
! 	(ix86_check_builtin_isa_match):	New func.
! 	(ix86_expand_builtin): Move code to
! 	ix86_check_builtin_isa_match and call it.
! 	* config/i386/i386-protos.h
! 	(ix86_check_builtin_isa_match): Declare.
! 	* config/i386/i386.cc (ix86_gimple_fold_builtin): Don't fold
! 	builtin into gimple when isa mismatches.
  
! 2022-03-13  Tobias Burnus  <tobias@codesourcery.com>
  
! 	* doc/invoke.texi: Fix typos.
! 	* doc/tm.texi.in: Remove duplicated word.
! 	* doc/tm.texi: Regenerate.
  
! 2022-03-12  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	PR target/104829
! 	* config/rs6000/rs6000.cc (rs6000_machine_from_flags): Don't output
! 	"ppc" and "ppc64" based on rs6000_cpu.
  
! 2022-03-12  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	PR middle-end/100280
! 	PR middle-end/104892
! 	* omp-oacc-kernels-decompose.cc (omp_oacc_kernels_decompose_1):
! 	Remove special handling of 'GOMP_MAP_FORCE_TOFROM'.
  
! 2022-03-12  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	PR middle-end/100280
! 	PR middle-end/104086
! 	* omp-oacc-kernels-decompose.cc (omp_oacc_kernels_decompose_1):
! 	Mark variables used in 'present' clauses as addressable.
! 	* omp-low.cc (scan_sharing_clauses) <OMP_CLAUSE_MAP>: Gracefully
! 	handle duplicate 'OMP_CLAUSE_MAP_DECL_MAKE_ADDRESSABLE'.
  
! 2022-03-12  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	PR other/65095
! 	* tree-core.h (user_omp_claus_code_name): Declare function.
! 	* tree.cc (user_omp_clause_code_name): New function.
  
! 2022-03-12  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	PR middle-end/98420
! 	* match.pd (minus @0 @0): Additional checks for -fno-rounding-math
! 	(the defaut) or -fno-signed-zeros.
  
! 2022-03-12   Michael Meissner  <meissner@linux.ibm.com>
  
! 	PR target/104868
! 	* config/rs6000/vsx.md (extendditi2): Use a 'b' constraint when
! 	moving from a GPR register to an Altivec register.
  
! 2022-03-11  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	PR tree-optimization/98335
! 	* config/i386/i386.md (peephole2): Eliminate redundant insv.
! 	Combine movl followed by movb.  Transform xorl followed by
! 	a suitable movb or movw into the equivalent movz[bw]l.
  
! 2022-03-11  Roger Sayle  <roger@nextmovesoftware.com>
! 	    Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/98335
! 	* builtins.cc (get_object_alignment_2): Export.
! 	* builtins.h (get_object_alignment_2): Likewise.
! 	* tree-ssa-alias.cc (ao_ref_alignment): New.
! 	* tree-ssa-alias.h (ao_ref_alignment): Declare.
! 	* tree-ssa-dse.cc (compute_trims): Improve logic deciding whether
! 	to align head/tail, writing more bytes but using fewer store insns.
  
! 2022-03-11  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104880
! 	* tree-ssa.cc (execute_update_address_taken): Remember if we
! 	optimistically made something not addressable and
! 	prepare to undo it.
  
! 2022-03-11  Richard Biener  <rguenther@suse.de>
  
! 	PR target/104762
! 	* config/i386/i386.cc (ix86_builtin_vectorization_cost): Do not
! 	cost the first lane of SSE pieces as inserts for vec_construct.
  
! 2022-03-10  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	PR c++/84964
! 	* calls.cc (expand_call): Ignore stack adjustments after sorry.
  
! 2022-03-10  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR target/103074
! 	* lra-constraints.cc (split_reg): Set up
! 	check_and_force_assignment_correctness_p when splitting hard
! 	register live range.
  
! 2022-03-10  Martin Jambor  <mjambor@suse.cz>
  
! 	PR ipa/104813
! 	* ipa-cp.cc (create_specialized_node): Move removal of
! 	self-recursive calls from callers vector before refrence
! 	adjustments.
  
! 2022-03-10  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/102943
! 	* gimple-range-cache.cc (sbr_sparse_bitmap::bitvec):
! 	Make a bitmap_head.
! 	(sbr_sparse_bitmap::sbr_sparse_bitmap): Adjust and switch
! 	to tree view.
! 	(sbr_sparse_bitmap::set_bb_range): Adjust.
! 	(sbr_sparse_bitmap::get_bb_range): Likewise.
  
! 2022-03-10  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/102943
! 	* tree-ssa-dom.cc (back_propagate_equivalences): Only
! 	populate the dominance bitmap if fast queries are not
! 	available.  Use a tree view bitmap.
! 	(record_temporary_equivalences): Cache the dominance bitmap
! 	across all equivalences on the edge.
  
! 2022-03-10  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104840
! 	* config/nvptx/nvptx.md (define_attr "predicable"): Use no,yes instead
! 	of false,true.
  
! 2022-03-10  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104783
! 	* config/nvptx/nvptx.cc (nvptx_init_unisimt_predicate)
! 	(nvptx_output_unisimt_switch): Handle unisimt_outside_simt_predicate.
! 	(nvptx_get_unisimt_outside_simt_predicate): New function.
! 	(predicate_insn): New function, factored out of ...
! 	(nvptx_reorg_uniform_simt): ... here.  Predicate all emitted insns.
! 	* config/nvptx/nvptx.h (struct machine_function): Add
! 	unisimt_outside_simt_predicate field.
! 	* config/nvptx/nvptx.md (define_insn "nvptx_warpsync")
! 	(define_insn "nvptx_uniform_warp_check"): Make predicable.
  
! 2022-03-10  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.cc (nvptx_unisimt_handle_set): Handle unused
! 	result.
  
! 2022-03-10  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104815
! 	* config/nvptx/nvptx.cc (nvptx_print_operand): Handle 'x' operand
! 	modifier.
! 	* config/nvptx/nvptx.md: Use %x0 destination operand in atom insns.
  
! 2022-03-10  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.md (define_insn "atomic_fetch_<logic><mode>"):
! 	Emit atom.and.b64 instead of atom.b64.and.
  
! 2022-03-10  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/t-nvptx (MULTILIB_EXTRA_OPTS): Move mptx=3.1 ...
! 	(MULTILIB_OPTIONS): ... here.
  
! 2022-03-10  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104758
! 	* config/nvptx/nvptx.opt (misa): Set default to sm_30.
! 	* config/nvptx/t-nvptx (MULTILIB_EXTRA_OPTS): Remove misa=sm_30.
  
! 2022-03-10  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	PR middle-end/90115
! 	PR middle-end/102330
! 	PR middle-end/104774
! 	* omp-low.cc (oacc_privatization_candidate_p)
! 	(oacc_privatization_scan_clause_chain)
! 	(oacc_privatization_scan_decl_chain, lower_oacc_private_marker):
! 	Analyze 'lookup_decl'-translated DECL.
  
! 2022-03-10  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/99708
! 	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Remove
! 	RS6000_BTI_ptr_ieee128_float and RS6000_BTI_ptr_ibm128_float.
! 	(ptr_ieee128_float_type_node, ptr_ibm128_float_type_node): Remove.
! 	* config/rs6000/rs6000-builtin.cc (rs6000_type_string): Return
! 	"**NULL**" if type_node is NULL first.  Handle
! 	ieee128_float_type_node.
! 	(rs6000_init_builtins): Don't initialize ptr_ieee128_float_type_node
! 	and ptr_ibm128_float_type_node.  Set ibm128_float_type_node and
! 	ieee128_float_type_node to NULL rather than long_double_type_node if
! 	they aren't supported.  Do support __ibm128 even if
! 	!TARGET_FLOAT128_TYPE when long double is double double.
! 	(rs6000_expand_builtin): Error if bif_is_ibm128 and
! 	!ibm128_float_type_node.  Remap RS6000_BIF_{,UN}PACK_IF to
! 	RS6000_BIF_{,UN}PACK_TF much earlier and only use bif_is_ibm128 check
! 	for it.
! 	* config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Define
! 	__SIZEOF_FLOAT128__ here and only iff __float128 macro is defined.
! 	(rs6000_cpu_cpp_builtins): Don't define __SIZEOF_FLOAT128__ here.
! 	Define __SIZEOF_IBM128__=16 if ieee128_float_type_node is non-NULL.
! 	Formatting fix.
! 	* config/rs6000/rs6000-gen-builtins.cc: Document ibm128 attribute.
! 	(struct attrinfo): Add isibm128 member.
! 	(TYPE_MAP_SIZE): Remove.
! 	(type_map): Use [] instead of [TYPE_MAP_SIZE].  For "if" use
! 	ibm128_float_type_node only if it is non-NULL, otherwise fall back
! 	to long_double_type_node.  Remove "pif" entry.
! 	(parse_bif_attrs): Handle ibm128 attribute and print it for debugging.
! 	(write_decls): Output bif_ibm128_bit and bif_is_ibm128.
! 	(write_type_node): Use sizeof type_map / sizeof type_map[0]
! 	instead of TYPE_MAP_SIZE.
! 	(write_bif_static_init): Handle isibm128.
! 	* config/rs6000/rs6000-builtins.def: Document ibm128 attribute.
! 	(__builtin_pack_ibm128, __builtin_unpack_ibm128): Add ibm128
! 	attribute.
  
! 2022-03-09  Richard Biener  <rguenther@suse.de>
  
! 	* cfgexpand.cc (expand_gimple_asm): Special-case MEM_REF
! 	with non-decl operand, avoiding a copy.
  
! 2022-03-09  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104781
! 	* config/i386/i386.h (LIBGCC2_UNWIND_ATTRIBUTE): Define for ia32.
  
! 2022-03-09  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/104786
! 	* cfgexpand.cc (expand_asm_stmt): Do not generate a copy
! 	for VLAs without an upper size bound.
  
! 2022-03-09  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	PR tree-optimization/104851
! 	* optabs-query.cc (supports_vec_convert_optab_p): Fix off-by-one
! 	error.
  
! 2022-03-09  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c/104711
! 	* doc/invoke.texi (-Wextra): Document that -Wshift-negative-value
! 	is enabled by it only for C++11 to C++17 rather than for C++03 or
! 	later.
! 	(-Wshift-negative-value): Similarly (except here we stated
! 	that it is enabled for C++11 or later).
  
! 2022-03-09  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/104839
! 	* simplify-rtx.cc (simplify_unary_operation_1) <case SIGN_EXTEND>:
! 	Use SRP_SIGNED instead of incorrect 1 in SUBREG_PROMOTED_SET.
! 	(simplify_unary_operation_1) <case ZERO_EXTEND>: Use SRP_UNSIGNED
! 	instead of incorrect 0 in SUBREG_PROMOTED_SET.
  
! 2022-03-09  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	PR target/104842
! 	* config/mips/mips.h (LUI_OPERAND): Cast the input to an unsigned
! 	value before adding an offset.
  
! 2022-03-08  Christophe Lyon  <christophe.lyon@arm.com>
  
! 	* config/arm/arm-builtins.cc
! 	(arm_binop_none_none_unone_qualifiers): Delete.
! 	(BINOP_NONE_NONE_UNONE_QUALIFIERS): Delete.
  
! 2022-03-08  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	PR translation/104552
! 	* config/host-darwin.cc (darwin_gt_pch_get_address): Amend
! 	the PCH out of memory error message punctuation and wording.
  
! 2022-03-08  Marek Polacek  <polacek@redhat.com>
  
! 	PR rtl-optimization/104777
! 	* rtl.cc (classify_insn): For ASM_OPERANDS, return JUMP_INSN only if
! 	ASM_OPERANDS_LABEL_VEC has at least one element.
  
! 2022-03-08  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/104781
! 	* config/i386/i386.cc (ix86_expand_epilogue): Sorry if there is
! 	stack realignment or regparm nested function with EH return.
  
! 2022-03-08  Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	PR target/104790
! 	* config/arm/arm.h (MVE_STN_LDW_MODE): New MACRO.
! 	* config/arm/arm.cc (mve_vector_mem_operand): Relax constraint on base
! 	register for non widening loads or narrowing stores.
  
! 2022-03-08  Eric Gallager  <egallager@gcc.gnu.org>
  
! 	PR translation/104552
! 	* params.opt: Fix typo.
  
! 2022-03-08  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/84201
! 	* params.opt (-param=vect-induction-float): Add.
! 	* doc/invoke.texi (vect-induction-float): Document.
! 	* tree-vect-loop.cc (vectorizable_induction): Honor
! 	param_vect_induction_float.
  
! 2022-03-08  Martin Jambor  <mjambor@suse.cz>
  
! 	PR translation/104552
! 	* params.opt (ipa-cp-recursive-freq-factor): Remove repeated word
! 	"that" in the description.
  
! 2022-03-08  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104825
! 	* tree-ssa-sccvn.cc (visit_reference_op_call): Properly
! 	guard modref get_ao_ref on a pointer typed argument.
  
! 2022-03-08  liuhongt  <hongtao.liu@intel.com>
  
! 	* config/i386/sse.md (*vec_dupv4si): Disable memory operand
! 	for !TARGET_INTER_UNIT_MOVES_TO_VEC when prefer_for_speed.
  
! 2022-03-07  Jonathan Wakely  <jwakely@redhat.com>
  
! 	* doc/invoke.texi (C++ Modules): Remove anachronism.
  
! 2022-03-07  Martin Liska  <mliska@suse.cz>
  
! 	PR middle-end/104381
! 	* opts.cc (finish_options): If debug info is disabled
! 	(debug_info_level) and -fvar-tracking is unset, disable it.
  
! 2022-03-07  Jakub Jelinek  <jakub@redhat.com>
  
! 	* tree-ssa-propagate.cc: Fix up duplicated word issue in a comment.
! 	* config/riscv/riscv.cc: Likewise.
! 	* config/darwin.h: Likewise.
! 	* config/i386/i386.cc: Likewise.
! 	* config/aarch64/thunderx3t110.md: Likewise.
! 	* config/aarch64/fractional-cost.h: Likewise.
! 	* config/vax/vax.cc: Likewise.
! 	* config/rs6000/pcrel-opt.md: Likewise.
! 	* config/rs6000/predicates.md: Likewise.
! 	* ctfc.h: Likewise.
! 	* tree-ssa-uninit.cc: Likewise.
! 	* value-relation.h: Likewise.
! 	* gimple-range-gori.cc: Likewise.
! 	* ipa-polymorphic-call.cc: Likewise.
! 	* pointer-query.cc: Likewise.
! 	* ipa-sra.cc: Likewise.
! 	* internal-fn.cc: Likewise.
! 	* varasm.cc: Likewise.
! 	* gimple-ssa-warn-access.cc: Likewise.
  
! 2022-03-07  Martin Liska  <mliska@suse.cz>
  
! 	PR target/104794
! 	* config/arm/arm.cc (arm_option_override_internal): Add missing
! 	space.
  
! 2022-03-07  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104782
! 	* tree-vect-slp.cc (vectorize_slp_instance_root_stmt):
! 	Re-instantiate r10-5979 fix, add comment.
  
! 2022-03-07  Martin Liska  <mliska@suse.cz>
  
! 	PR target/104797
! 	* config/msp430/msp430.cc (msp430_expand_delay_cycles): Remove
! 	parenthesis from built-in name.
  
! 2022-03-07  Martin Liska  <mliska@suse.cz>
  
! 	PR target/104794
! 	* config/arm/arm.cc (arm_option_override_internal): Fix quoting
! 	of options in error messages.
! 	(arm_option_reconfigure_globals): Likewise.
  
! 2022-03-07  Martin Liska  <mliska@suse.cz>
  
! 	PR target/104794
! 	* config/arm/arm-builtins.cc (arm_expand_builtin): Reuse error
! 	message.  Fix ARM_BUILTIN_WRORHI and ARM_BUILTIN_WRORH that can
! 	have only range [0,32].
  
! 2022-03-07  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104775
! 	* config/s390/s390.md (*cmp_and_trap_unsigned_int<mode>): Use
! 	S constraint instead of T in the last alternative.
  
! 2022-03-07  Martin Liska  <mliska@suse.cz>
  
! 	* plugin.cc (default_plugin_dir_name): Remove <dir> from error
! 	message.
  
! 2022-03-07  Martin Liska  <mliska@suse.cz>
  
! 	PR translation/90148
! 	* config/rs6000/rs6000.cc (rs6000_linux64_override_options): Put
! 	quote to a proper place.
! 	* plugin.cc (default_plugin_dir_name): Likewise.
  
! 2022-03-07  Martin Liska  <mliska@suse.cz>
  
! 	PR target/99297
! 	* config/rx/rx.cc (rx_expand_builtin_mvtc): Fix translation
! 	string.
  
! 2022-03-07  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104779
! 	* config/i386/sse.md (avx512dq_mul<mode>3<mask_name>): New
! 	define_expand pattern.  Rename define_insn to ...
! 	(*avx512dq_mul<mode>3<mask_name>): ... this.
! 	(<code><mode>3_mask): New any_logic define_expand pattern.
! 	(<mask_codefor><code><mode>3<mask_name>): Rename to ...
! 	(*<code><mode>3<mask_name>): ... this.
  
! 2022-03-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	* gimple-ssa-warn-access.cc (pass_waccess::use_after_inval_p): Remove
! 	visited bitmap and its use.  Also punt on EDGE_ABNORMAL edges.
  
! 2022-03-05  Roger Sayle  <roger@nextmovesoftware.com>
! 	    Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR testsuite/104732
! 	* config/i386/i386.md (SWIM1248x): Renamed from SWIM1248s.
! 	Include DI mode unconditionally.
! 	(*anddi3_doubleword): Remove && TARGET_STV && TARGET_SSE2 condition,
! 	i.e. always split on !TARGET_64BIT.
! 	(*<any_or>di3_doubleword): Likewise.
! 	(*one_cmpldi2_doubleword): Likewise.
! 	(and<mode>3 expander): Update to use SWIM1248x from SWIM1248s.
! 	(<any_or><mode>3 expander): Likewise.
! 	(one_cmpl<mode>2 expander): Likewise.
  
! 2022-03-05   Michael Meissner  <meissner@linux.ibm.com>
  
! 	PR target/104698
! 	* config/rs6000/vsx.md (UNSPEC_MTVSRD_DITI_W1): Delete.
! 	(mtvsrdd_diti_w1): Delete.
! 	(extendditi2): Convert from define_expand to
! 	define_insn_and_split.  Replace with code to deal with both GPR
! 	registers and with altivec registers.
  
! 2022-03-04  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	* config/rs6000/rs6000.cc (rs6000_machine_from_flags): Restructure a
! 	bit.  Handle most older CPUs.
  
! 2022-03-04  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config/darwin.cc (darwin_fold_builtin): Make fcode an int to
! 	avoid a mismatch with DECL_MD_FUNCTION_CODE().
  
! 2022-03-04  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	PR target/104117
! 	* config/rs6000/darwin.md (@machopic_high_<mode>): New.
! 	(@machopic_low_<mode>): New.
! 	* config/rs6000/predicates.md (macho_pic_address): New.
! 	* config/rs6000/rs6000.cc (rs6000_legitimize_address): Do not
! 	apply the TLS processing to Darwin.
! 	* lra-constraints.cc (process_address_1): Revert the changes
! 	in r12-7209.
  
! 2022-03-04  Peter Bergner  <bergner@linux.ibm.com>
  
! 	PR target/87496
! 	PR target/104208
! 	* config/rs6000/rs6000.cc (rs6000_option_override_internal): Make the
! 	ISA 2.06 requirement for -mabi=ieeelongdouble conditional on
! 	-mlong-double-128.
! 	Move the -mabi=ieeelongdouble and -mabi=ibmlongdouble error checking
! 	from here...
! 	* common/config/rs6000/rs6000-common.cc (rs6000_handle_option):
! 	... to here.
  
! 2022-03-04  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/104529
! 	* gimplify.cc (gimplify_init_constructor): Clear TREE_READONLY
! 	on automatic objects which will be runtime initialized.
  
! 2022-03-04  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	PR middle-end/100280
! 	PR middle-end/104132
! 	PR middle-end/104133
! 	* omp-low.cc (task_shared_vars): Rename to
! 	'make_addressable_vars'.  Adjust all users.
! 	(scan_sharing_clauses) <OMP_CLAUSE_MAP> Use it for
! 	'OMP_CLAUSE_MAP_DECL_MAKE_ADDRESSABLE' DECLs, too.
  
! 2022-03-04  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	PR middle-end/100280
! 	* tree.h (OMP_CLAUSE_MAP_DECL_MAKE_ADDRESSABLE): New.
! 	* tree-core.h: Document it.
! 	* omp-low.cc (scan_sharing_clauses) <OMP_CLAUSE_MAP>: Handle
! 	'OMP_CLAUSE_MAP_DECL_MAKE_ADDRESSABLE'.
! 	* omp-oacc-kernels-decompose.cc (maybe_build_inner_data_region):
! 	Set 'OMP_CLAUSE_MAP_DECL_MAKE_ADDRESSABLE' instead of
! 	'TREE_ADDRESSABLE'.
  
! 2022-03-04  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	PR middle-end/100280
! 	* omp-oacc-kernels-decompose.cc (maybe_build_inner_data_region):
! 	Add diagnostic: "note: OpenACC 'kernels' decomposition: variable
! 	'[...]' declared in block made addressable".
  
! 2022-03-04  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	PR middle-end/100400
! 	PR middle-end/103836
! 	PR middle-end/104061
! 	* omp-oacc-kernels-decompose.cc (decompose_kernels_region_body):
! 	Catch 'GIMPLE_DEBUG'.
  
! 2022-03-04  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c/104627
! 	* tree.cc (warn_deprecated_use): For types prefer to use node
! 	and only use TYPE_MAIN_VARIANT (node) if TYPE_STUB_DECL (node) is
! 	NULL.
  
! 2022-03-04  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/104704
! 	* config/i386/i386.cc (ix86_gen_scratch_sse_rtx): Always return
! 	a pseudo register.
  
! 2022-03-03  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/104761
! 	* gimple-ssa-warn-access.cc (pass_waccess::execute): Call
! 	mark_dfs_back_edges.
  
! 2022-03-03  Martin Liska  <mliska@suse.cz>
  
! 	* configure.ac: Use linker plug-in by default.
  	* configure: Regenerate.
  
! 2022-03-03  Martin Liska  <mliska@suse.cz>
  
! 	* configure.ac: Now ld.mold support LTO plugin API, use it.
! 	* configure: Regenerate.
  
! 2022-03-03  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/t-nvptx (MULTILIB_EXTRA_OPTS): Add mptx=3.1.
  
! 2022-03-03  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104758
! 	* config/nvptx/t-nvptx (MULTILIB_EXTRA_OPTS): Add misa=sm_30.
  
! 2022-03-03  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.h (ASM_SPEC): Add %{misa=sm_30:--no-verify}.
  
! 2022-03-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/104757
! 	* gimplify.cc (gimplify_omp_loop): Call gimplify_expr rather than
! 	gimplify_omp_for.
! 	(gimplify_expr) <case OMP_SIMD>: Temporarily disable
! 	gimplify_ctxp->into_ssa around call to gimplify_omp_for.
  
! 2022-03-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/104558
! 	* calls.cc (store_one_arg): When not calling emit_push_insn
! 	because size_rtx is const0_rtx, call at least anti_adjust_stack
! 	on arg->locate.alignment_pad if !argblock and the alignment might
! 	be non-zero.
  
! 2022-03-02  Alexandre Oliva  <oliva@adacore.com>
  
! 	* lra-constraints.cc (undo_optional_reloads): Recognize and
! 	drop insns of multi-word move sequences, tolerate removal
! 	iteration on an already-removed clobber, and refuse to
! 	substitute original pseudos into clobbers.
  
! 2022-03-02  Qing Zhao  <qing.zhao@oracle.com>
  
! 	PR middle-end/102276
! 	* common.opt (-Wtrivial-auto-var-init): New option.
! 	* doc/invoke.texi (-Wtrivial-auto-var-init): Document new option.
! 	(-ftrivial-auto-var-init): Update option;
! 	* gimplify.cc (emit_warn_switch_unreachable): New function.
! 	(warn_switch_unreachable_r): Rename to ...
! 	(warn_switch_unreachable_and_auto_init_r): This.
! 	(maybe_warn_switch_unreachable): Rename to ...
! 	(maybe_warn_switch_unreachable_and_auto_init): This.
! 	(gimplify_switch_expr): Update calls to renamed function.
  
! 2022-03-02  Richard Biener  <rguenther@suse.de>
  
! 	PR rtl-optimization/104686
! 	* ira-color.cc (object_conflicts_with_allocno_p): New function
! 	using a bitvector test instead of iterating when possible.
! 	(allocnos_conflict_p): Choose the best allocno to iterate over
! 	object conflicts.
! 	(update_conflict_hard_regno_costs): Do allocnos_conflict_p test
! 	last.
  
! 2022-03-02  Jakub Jelinek  <jakub@redhat.com>
  
! 	* cfg.cc (dump_edge_info): Dump goto_locus if present.
  
! 2022-03-02  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/104589
! 	* cfgrtl.cc (fixup_reorder_chain): Use loc_equal instead of direct
! 	INSN_LOCATION comparison with goto_locus.
  
! 2022-03-02  Jakub Jelinek  <jakub@redhat.com>
  
! 	* tree-ssa-strlen.cc (strlen_pass::handle_assign,
! 	strlen_pass::before_dom_children): Comment spelling fixes.
  
! 2022-03-02  Jakub Jelinek  <jakub@redhat.com>
  
! 	* ipa-modref-tree.cc (modref_access_node::contains,
! 	modref_access_node::closer_pair_p, modref_access_node::insert,
! 	modref_access_node::insert_kill): Comment spelling fixes.
! 	* ipa-modref.cc: Likewise.
! 	(modref_summary::finalize, ignore_nondeterminism_p,
! 	class modref_access_analysis,
! 	modref_access_analysis::set_side_effects,
! 	modref_access_analysis::set_nondeterministic,
! 	modref_access_analysis::record_global_memory_load,
! 	modref_access_analysis::propagate, modref_access_analysis::analyze,
! 	struct escape_point, class modref_lattice, modref_lattice::merge,
! 	modref_lattice::merge_deref, class modref_eaf_analysis,
! 	modref_eaf_analysis::merge_call_lhs_flags,
! 	modref_eaf_analysis::analyze_ssa_name, modref_eaf_analysis::propagate,
! 	modref_eaf_analysis::record_escape_points, remap_kills,
! 	update_escape_summary, remove_useless_summaries,
! 	ipa_merge_modref_summary_after_inlining, pass_ipa_modref::execute):
! 	Likewise.
! 	* ipa-modref.h (struct modref_summary, interposable_eaf_flags):
! 	Likewise.
! 	* ipa-modref-tree.h (enum modref_special_parms,
! 	struct modref_access_node): Likewise.
  
! 2022-03-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/104715
! 	* gimple-ssa-warn-access.cc (pass_waccess::check_pointer_uses): Don't
! 	unnecessarily test if ptr is a SSA_NAME, it has to be.  Only push lhs
! 	of a call if gimple_call_return_arg is equal to ptr, not just when it
! 	is non-NULL.
  
! 2022-03-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	* gimple-ssa-warn-access.cc (warn_string_no_nul,
! 	maybe_warn_nonstring_arg, fndecl_alloc_p, new_delete_mismatch_p,
! 	matching_alloc_calls_p, maybe_warn_alloc_args_overflow,
! 	pass_waccess::check_alloca, pass_waccess::check_strcat,
! 	memmodel_to_uhwi, fntype_argno_type,
! 	pass_waccess::maybe_check_access_sizes,
! 	pass_waccess::check_call_access,
! 	pass_waccess::maybe_check_dealloc_call, pass_waccess::check_stmt):
! 	Comment spelling fixes.
  
! 2022-03-01  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104716
! 	* tree-loop-distribution.cc (find_seed_stmts_for_distribution):
! 	Check if we can copy the loop.
  
! 2022-03-01  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR middle-end/104721
! 	* cfgexpand.cc (expand_gimple_basic_block): Clear
! 	currently_expanding_gimple_stmt when returning inside the loop.
  
! 2022-03-01  Martin Liska  <mliska@suse.cz>
  
! 	PR ipa/104533
! 	* multiple_target.cc (get_attr_len): Move to tree.c.
! 	(expand_target_clones): Remove single value checking.
! 	* tree.cc (get_target_clone_attr_len): New fn.
! 	* tree.h (get_target_clone_attr_len): Likewise.
  
! 2022-03-01  Martin Liska  <mliska@suse.cz>
  
! 	PR gcov-profile/104677
! 	* doc/invoke.texi: Document more .gcda file name generation.
  
! 2022-03-01  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/102429
! 	* config/nvptx/nvptx.cc (nvptx_gen_shuffle): Handle DCmode and CDImode.
! 	* config/nvptx/nvptx.md
! 	(define_predicate "nvptx_register_or_complex_di_df_register_operand"):
! 	New predicate.
! 	(define_expand "omp_simt_xchg_bfly", define_expand "omp_simt_xchg_idx"):
! 	Use nvptx_register_or_complex_di_df_register_operand.
  
! 2022-03-01  Tom de Vries  <tdevries@suse.de>
  
! 	* config.gcc (nvptx*-*-*): Add nvptx/nvptx-gen.opt to extra_options.
! 	* config/nvptx/gen-copyright.sh: New file.
! 	* config/nvptx/gen-h.sh: New file.
! 	* config/nvptx/gen-opt.sh: New file.
! 	* config/nvptx/nvptx.h (TARGET_SM35, TARGET_SM53, TARGET_SM70)
! 	(TARGET_SM75, TARGET_SM80): Move ...
! 	* config/nvptx/nvptx-gen.h: ... here.  New file, generate.
! 	* config/nvptx/nvptx.opt (Enum ptx_isa): Move ...
! 	* config/nvptx/nvptx-gen.opt: ... here.  New file, generate.
! 	* config/nvptx/t-nvptx ($(srcdir)/config/nvptx/nvptx-gen.h)
! 	($(srcdir)/config/nvptx/nvptx-gen.opt): New make target.
  
! 2022-03-01  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/gen-omp-device-properties.sh: New file.
! 	* config/nvptx/t-omp-device: Use gen-omp-device-properties.sh.
  
! 2022-03-01  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx-sm.def: New file.
! 	* config/nvptx/nvptx-c.cc (nvptx_cpu_cpp_builtins): Use nvptx-sm.def.
! 	* config/nvptx/nvptx-opts.h (enum ptx_isa): Same.
! 	* config/nvptx/nvptx.cc (sm_version_to_string)
! 	(nvptx_omp_device_kind_arch_isa): Same.
  
! 2022-03-01  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	PR rtl-optimization/104154
! 	* config/arc/arc.cc (gen_compare_reg):  Return the CC-mode
! 	comparison ifcvt passed us.
  
! 2022-03-01  Hongyu Wang  <hongyu.wang@intel.com>
  
! 	PR target/104664
! 	* config/i386/i386-expand.cc (ix86_expand_vector_init_duplicate):
! 	  Use vec_setv8hf_0 for HF to V8HFmode move instead of subreg.
  
! 2022-02-28  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	PR tree-optimization/91384
! 	* config/i386/i386.md (peephole2): Eliminate final testl insn
! 	from the sequence *movsi_internal, *negsi_1, *cmpsi_ccno_1 by
! 	transforming using *negsi_2 for the negation.
  
! 2022-02-28  Roger Sayle  <roger@nextmovesoftware.com>
! 	    Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR middle-end/80270
! 	* expmed.cc (extract_integral_bit_field): If OP0 is a hard
! 	register, copy it to a pseudo before calling simplify_gen_subreg.
  
! 2022-02-28  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR rtl-optimization/104637
! 	* lra-assigns.cc (lra_split_hard_reg_for): Split hard regs as many
! 	as possible on one subpass.
  
! 2022-02-28  Qing Zhao  <qing.zhao@oracle.com>
  
! 	PR middle-end/104550
! 	* gimple-fold.cc (clear_padding_flush): Suppress warnings for new
! 	created uses.
  
! 2022-02-28  Martin Liska  <mliska@suse.cz>
  
! 	PR ipa/104648
! 	* main.cc (main): Use flag_checking instead of CHECKING_P
! 	and run toplev::finalize only if there is not error seen.
  
! 2022-02-28  Richard Biener  <rguenther@suse.de>
  
! 	* tree-ssa-pre.cc (compute_avail): Revert part of last change.
  
! 2022-02-28  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104700
! 	* tree-ssa-pre.cc (get_or_alloc_expr_for): Remove and inline
! 	into ...
! 	(find_or_generate_expression): ... here, simplifying code.
  
! 2022-02-28  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx-opts.h (enum ptx_version): Add
! 	PTX_VERSION_default.
! 	* config/nvptx/nvptx.cc (handle_ptx_version_option): Handle
! 	PTX_VERSION_default.
! 	* config/nvptx/nvptx.opt: Add EnumValue "_" / PTX_VERSION_default.
  
! 2022-02-28  Richard Biener  <rguenther@suse.de>
  
! 	PR rtl-optimization/104686
! 	* ira-int.h (minmax_set_iter_cond): Use ctz_hwi to elide loop
! 	skipping bits that are zero.
! 	(ira_object_conflict_iter_cond): Likewise.
  
! 2022-02-28  Hongyu Wang  <hongyu.wang@intel.com>
  
! 	* config/i386/avx512fintrin.h (_MM_TERNLOG_ENUM): New enum.
! 	(_mm512_ternarylogic_epi64): Truncate imm to unsigned
! 	char to avoid error when using ~enum as parameter.
! 	(_mm512_mask_ternarylogic_epi64): Likewise.
! 	(_mm512_maskz_ternarylogic_epi64): Likewise.
! 	(_mm512_ternarylogic_epi32): Likewise.
! 	(_mm512_mask_ternarylogic_epi32): Likewise.
! 	(_mm512_maskz_ternarylogic_epi32): Likewise.
! 	* config/i386/avx512vlintrin.h (_mm256_ternarylogic_epi64):
! 	Adjust imm param type to unsigned char.
! 	(_mm256_mask_ternarylogic_epi64): Likewise.
! 	(_mm256_maskz_ternarylogic_epi64): Likewise.
! 	(_mm256_ternarylogic_epi32): Likewise.
! 	(_mm256_mask_ternarylogic_epi32): Likewise.
! 	(_mm256_maskz_ternarylogic_epi32): Likewise.
! 	(_mm_ternarylogic_epi64): Likewise.
! 	(_mm_mask_ternarylogic_epi64): Likewise.
! 	(_mm_maskz_ternarylogic_epi64): Likewise.
! 	(_mm_ternarylogic_epi32): Likewise.
! 	(_mm_mask_ternarylogic_epi32): Likewise.
! 	(_mm_maskz_ternarylogic_epi32): Likewise.
  
! 2022-02-25  Jakub Jelinek  <jakub@redhat.com>
! 	    Marc Glisse  <marc.glisse@inria.fr>
  
! 	PR tree-optimization/104675
! 	* match.pd (t * 2U / 2 -> t & (~0 / 2), t / 2U * 2 -> t & ~1):
! 	Restrict simplifications to INTEGRAL_TYPE_P.
  
! 2022-02-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104681
! 	* config/rs6000/vector.md (movmisalign<mode>): Use rs6000_emit_move.
  
! 2022-02-25  Claudiu Zissulescu  <claziss@synopsys.com>
  
! 	* config/arc/arc.cc (gen_compare_reg): Return NULL_RTX if the
! 	comparison is not valid.
! 	* config/arc/arc.md (movsicc): Fail if comparison is not valid.
! 	(movdicc): Likewise.
! 	(movsfcc): Likewise.
! 	(movdfcc): Likewise.
  
! 2022-02-25  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103037
! 	* tree-ssa-sccvn.h (alloc_vn_nary_op_noinit): Declare.
! 	(vn_nary_length_from_stmt): Likewise.
! 	(init_vn_nary_op_from_stmt): Likewise.
! 	(vn_nary_op_compute_hash): Likewise.
! 	* tree-ssa-sccvn.cc (alloc_vn_nary_op_noinit): Export.
! 	(vn_nary_length_from_stmt): Likewise.
! 	(init_vn_nary_op_from_stmt): Likewise.
! 	(vn_nary_op_compute_hash): Likewise.
! 	* tree-ssa-pre.cc (pre_expr_obstack): New obstack.
! 	(get_or_alloc_expr_for_nary): Pass in the value-id to use,
! 	(re-)compute the hash value and if the expression is not
! 	found allocate it from pre_expr_obstack.
! 	(phi_translate_1): Do not insert the NARY found in the
! 	VN tables but build a PRE expression from the valueized
! 	NARY with the value-id we eventually found.
! 	(find_or_generate_expression): Assert we have an entry
! 	for constant values.
! 	(compute_avail): Insert not valueized expressions into
! 	EXP_GEN using the value-id from the VN tables.
! 	(init_pre): Allocate pre_expr_obstack.
! 	(fini_pre): Free pre_expr_obstack.
  
! 2022-02-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104674
! 	* config/i386/i386.h (enum ix86_stack_slot): Add SLOT_FLOATxFDI_387.
! 	* config/i386/i386.md (splitter to floatdi<mode>2_i387_with_xmm): Use
! 	SLOT_FLOATxFDI_387 rather than SLOT_TEMP.
  
! 2022-02-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	* warning-control.cc (get_nowarn_spec): Comment spelling fix.
  
! 2022-02-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/104679
! 	* internal-fn.cc (expand_SPACESHIP): Call do_pending_stack_adjust.
  
! 2022-02-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/104675
! 	* match.pd (-A - 1 -> ~A, -1 - A -> ~A): Don't simplify for
! 	COMPLEX_TYPE.
  
! 2022-02-25  Alexandre Oliva  <oliva@adacore.com>
  
! 	PR target/104121
! 	PR target/103302
! 	* expr.cc (emit_move_multi_word): Restore clobbers during LRA.
  
! 2022-02-25  Alexandre Oliva  <oliva@adacore.com>
  
! 	PR middle-end/104540
! 	* dwarf2cfi.cc (cfi_oprnd_equal_p): Cope with NULL
! 	dw_cfi_cfa_loc.
  
! 2022-02-25  Alexandre Oliva  <oliva@adacore.com>
  
! 	PR tree-optimization/103856
! 	* gimple-harden-conditionals.cc (non_eh_succ_edge): Enable the
! 	eh edge to be requested through an extra parameter.
! 	(pass_harden_compares::execute): Copy PHI args in the EH dest
! 	block for the new EH edge added for the inverted compare.
  
! 2022-02-24  Palmer Dabbelt  <palmer@rivosinc.com>
  
! 	* doc/invoke.texi (RISC-V -mcmodel=medany): Document the degree
! 	of position independence that -mcmodel=medany affords.
  
! 2022-02-24  Jose E. Marchesi  <jose.marchesi@oracle.com>
  
! 	PR target/104656
! 	* configure.ac: --disable-gcov if targetting bpf-*.
  	* configure: Regenerate.
  
! 2022-02-24  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104676
! 	* tree-loop-distribution.cc (loop_distribution::execute):
! 	Do a full scev_reset.
  
! 2022-02-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/104601
! 	* tree-ssa-sccvn.cc (visit_reference_op_call): For calls with
! 	non-SSA_NAME lhs value number vdef to itself instead of e.g. the
! 	vuse value number.
  
! 2022-02-24  Tom de Vries  <tdevries@suse.de>
! 	    Tobias Burnus  <tobias@codesourcery.com>
  
! 	* config/nvptx/nvptx.cc (nvptx_omp_device_kind_arch_isa): Handle
! 	sm_70, sm_75 and sm_80.
! 	* config/nvptx/t-omp-device: Add sm_53, sm_70, sm_75 and sm_80.
  
! 2022-02-24  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.md (define_insn "rotlsi3", define_insn
! 	"rotrsi3"): New define_insn.
  
! 2022-02-24  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.cc (gen_comment): Use
! 	DECL_SOURCE_LOCATION (cfun->decl) instead of cfun->function_start_locus.
  
! 2022-02-24  liuhongt  <hongtao.liu@intel.com>
  
! 	* config/i386/sse.md (<code>v1ti3): Add suffix and replace
! 	isa attr of alternative 2 from avx to avx512vl.
  
! 2022-02-23  Richard Biener  <rguenther@suse.de>
! 	    Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/104644
! 	* doc/match-and-simplify.texi: Amend ! documentation.
! 	* genmatch.cc (expr::gen_transform): Code-generate ! support
! 	for GENERIC.
! 	(parser::parse_expr): Allow ! for GENERIC.
! 	* match.pd (cmp (bswap @0) INTEGER_CST@1): Use ! modifier on
! 	bswap.
  
! 2022-02-23  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/101636
! 	* tree-vect-slp.cc (vect_print_slp_tree): Dump the
! 	vector type of the node.
! 	(vect_slp_analyze_operations): Make sure the CTOR
! 	is vectorized with an expected type.
! 	(vectorize_slp_instance_root_stmt): Revert r10-5979 fix.
  
! 2022-02-23  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c/104633
! 	* gimple-warn-recursion.cc (pass_warn_recursion::find_function_exit):
! 	Don't warn about calls to corresponding builtin from extern inline
! 	gnu_inline wrappers.
  
! 2022-02-23  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	PR target/104489
! 	* config/nvptx/nvptx.md (*movhf_insn): Add subregs_ok attribute.
  
! 2022-02-23  Christophe Lyon  <christophe.lyon@arm.com>
  
! 	PR target/100757
! 	PR target/101325
! 	* config/arm/vfp.md (thumb2_movhi_vfp, thumb2_movhi_fp16): Fix
! 	typo.
  
! 2022-02-23  Cui,Lili  <lili.cui@intel.com>
  
! 	* doc/invoke.texi: Update documents for Intel architectures.
  
! 2022-02-22  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	* config/i386/i386-expand.cc (ix86_expand_cmpxchg_loop): Restore
! 	bootstrap.
  
! 2022-02-22  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	* omp-low.cc (omp_build_component_ref): Move function...
! 	* omp-general.cc (omp_build_component_ref): ... here.  Remove
! 	'static'.
! 	* omp-general.h (omp_build_component_ref): Declare function.
! 	* omp-oacc-neuter-broadcast.cc (oacc_build_component_ref): Remove
! 	function.
! 	(build_receiver_ref, build_sender_ref): Call
! 	'omp_build_component_ref' instead.
  
! 2022-02-22  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	* omp-oacc-neuter-broadcast.cc (record_field_map_t): Further
! 	simplify.  Adjust all users.
  
! 2022-02-22  Segher Boessenkool  <segher@kernel.crashing.org>
  
! 	PR target/88134
! 	* config/rs6000/rs6000.cc (atomic_hold_decl, atomic_clear_decl,
! 	atomic_update_decl): Add GTY markup.
  
! 2022-02-22  Christophe Lyon  <christophe.lyon@arm.com>
  
! 	* config/arm/arm.h (REG_CLASS_CONTENTS): Add VPR_REG to ALL_REGS.
  
! 2022-02-22  Christophe Lyon  <christophe.lyon@arm.com>
  
! 	PR target/100757
! 	PR target/101325
! 	* config/arm/arm-builtins.cc (CX_UNARY_UNONE_QUALIFIERS): Use
! 	predicate.
! 	(CX_BINARY_UNONE_QUALIFIERS): Likewise.
! 	(CX_TERNARY_UNONE_QUALIFIERS): Likewise.
! 	(TERNOP_NONE_NONE_NONE_UNONE_QUALIFIERS): Delete.
! 	(QUADOP_NONE_NONE_NONE_NONE_UNONE_QUALIFIERS): Delete.
! 	(QUADOP_UNONE_UNONE_UNONE_UNONE_UNONE_QUALIFIERS): Delete.
! 	* config/arm/arm_mve_builtins.def: Use predicated qualifiers.
! 	* config/arm/mve.md: Use VxBI instead of HI.
  
! 2022-02-22  Christophe Lyon  <christophe.lyon@arm.com>
  
! 	PR target/100757
! 	PR target/101325
! 	* config/arm/arm-builtins.cc (STRSBS_P_QUALIFIERS): Use predicate
! 	qualifier.
! 	(STRSBU_P_QUALIFIERS): Likewise.
! 	(LDRGBS_Z_QUALIFIERS): Likewise.
! 	(LDRGBU_Z_QUALIFIERS): Likewise.
! 	(LDRGBWBXU_Z_QUALIFIERS): Likewise.
! 	(LDRGBWBS_Z_QUALIFIERS): Likewise.
! 	(LDRGBWBU_Z_QUALIFIERS): Likewise.
! 	(STRSBWBS_P_QUALIFIERS): Likewise.
! 	(STRSBWBU_P_QUALIFIERS): Likewise.
! 	* config/arm/mve.md: Use VxBI instead of HI.
  
! 2022-02-22  Christophe Lyon  <christophe.lyon@arm.com>
  
! 	PR target/100757
! 	PR target/101325
! 	* config/arm/arm-builtins.cc (TERNOP_UNONE_UNONE_NONE_UNONE_QUALIFIERS): Change to ...
! 	(TERNOP_UNONE_UNONE_NONE_PRED_QUALIFIERS): ... this.
! 	(TERNOP_UNONE_UNONE_IMM_UNONE_QUALIFIERS): Change to ...
! 	(TERNOP_UNONE_UNONE_IMM_PRED_QUALIFIERS): ... this.
! 	(TERNOP_NONE_NONE_IMM_UNONE_QUALIFIERS): Change to ...
! 	(TERNOP_NONE_NONE_IMM_PRED_QUALIFIERS): ... this.
! 	(TERNOP_NONE_NONE_UNONE_UNONE_QUALIFIERS): Change to ...
! 	(TERNOP_NONE_NONE_UNONE_PRED_QUALIFIERS): ... this.
! 	(QUADOP_UNONE_UNONE_NONE_NONE_UNONE_QUALIFIERS): Change to ...
! 	(QUADOP_UNONE_UNONE_NONE_NONE_PRED_QUALIFIERS): ... this.
! 	(QUADOP_NONE_NONE_NONE_NONE_PRED_QUALIFIERS): New.
! 	(QUADOP_NONE_NONE_NONE_IMM_UNONE_QUALIFIERS): Change to ...
! 	(QUADOP_NONE_NONE_NONE_IMM_PRED_QUALIFIERS): ... this.
! 	(QUADOP_UNONE_UNONE_UNONE_UNONE_PRED_QUALIFIERS): New.
! 	(QUADOP_UNONE_UNONE_NONE_IMM_UNONE_QUALIFIERS): Change to ...
! 	(QUADOP_UNONE_UNONE_NONE_IMM_PRED_QUALIFIERS): ... this.
! 	(QUADOP_NONE_NONE_UNONE_IMM_UNONE_QUALIFIERS): Change to ...
! 	(QUADOP_NONE_NONE_UNONE_IMM_PRED_QUALIFIERS): ... this.
! 	(QUADOP_UNONE_UNONE_UNONE_IMM_UNONE_QUALIFIERS): Change to ...
! 	(QUADOP_UNONE_UNONE_UNONE_IMM_PRED_QUALIFIERS): ... this.
! 	(QUADOP_UNONE_UNONE_UNONE_NONE_UNONE_QUALIFIERS): Change to ...
! 	(QUADOP_UNONE_UNONE_UNONE_NONE_PRED_QUALIFIERS): ... this.
! 	(STRS_P_QUALIFIERS): Use predicate qualifier.
! 	(STRU_P_QUALIFIERS): Likewise.
! 	(STRSU_P_QUALIFIERS): Likewise.
! 	(STRSS_P_QUALIFIERS): Likewise.
! 	(LDRGS_Z_QUALIFIERS): Likewise.
! 	(LDRGU_Z_QUALIFIERS): Likewise.
! 	(LDRS_Z_QUALIFIERS): Likewise.
! 	(LDRU_Z_QUALIFIERS): Likewise.
! 	(QUINOP_UNONE_UNONE_UNONE_UNONE_IMM_UNONE_QUALIFIERS): Change to ...
! 	(QUINOP_UNONE_UNONE_UNONE_UNONE_IMM_PRED_QUALIFIERS): ... this.
! 	(BINOP_NONE_NONE_PRED_QUALIFIERS): New.
! 	(BINOP_UNONE_UNONE_PRED_QUALIFIERS): New.
! 	* config/arm/arm_mve_builtins.def: Use new predicated qualifiers.
! 	* config/arm/mve.md: Use MVE_VPRED instead of HI.
  
! 2022-02-22  Christophe Lyon  <christophe.lyon@arm.com>
  
! 	PR target/100757
! 	PR target/101325
! 	* config/arm/arm-builtins.cc (BINOP_UNONE_NONE_NONE_QUALIFIERS):
! 	Delete.
! 	(TERNOP_UNONE_NONE_NONE_UNONE_QUALIFIERS): Change to ...
! 	(TERNOP_PRED_NONE_NONE_PRED_QUALIFIERS): ... this.
! 	(TERNOP_PRED_UNONE_UNONE_PRED_QUALIFIERS): New.
! 	* config/arm/arm_mve_builtins.def (vcmp*q_n_, vcmp*q_m_f): Use new
! 	predicated qualifiers.
! 	* config/arm/mve.md (mve_vcmp<mve_cmp_op>q_n_<mode>)
! 	(mve_vcmp*q_m_f<mode>): Use MVE_VPRED instead of HI.
  
! 2022-02-22  Christophe Lyon  <christophe.lyon@arm.com>
  
! 	PR target/100757
! 	* config/arm/arm-protos.h (arm_get_mask_mode): New prototype.
! 	(arm_expand_vector_compare): Update prototype.
! 	* config/arm/arm.cc (TARGET_VECTORIZE_GET_MASK_MODE): New.
! 	(arm_vector_mode_supported_p): Add support for VxBI modes.
! 	(arm_expand_vector_compare): Remove useless generation of vpsel.
! 	(arm_expand_vcond): Fix select operands.
! 	(arm_get_mask_mode): New.
! 	* config/arm/mve.md (vec_cmp<mode><MVE_vpred>): New.
! 	(vec_cmpu<mode><MVE_vpred>): New.
! 	(vcond_mask_<mode><MVE_vpred>): New.
! 	* config/arm/vec-common.md (vec_cmp<mode><v_cmp_result>)
! 	(vec_cmpu<mode><mode, vcond_mask_<mode><v_cmp_result>): Move to ...
! 	* config/arm/neon.md (vec_cmp<mode><v_cmp_result>)
! 	(vec_cmpu<mode><mode, vcond_mask_<mode><v_cmp_result>): ... here
! 	and disable for MVE.
! 	* doc/sourcebuild.texi (arm_mve): Document new effective-target.
  
! 2022-02-22  Christophe Lyon  <christophe.lyon@arm.com>
  
! 	PR target/100757
! 	PR target/101325
! 	* config/arm/arm-builtins.cc (BINOP_PRED_UNONE_UNONE_QUALIFIERS)
! 	(BINOP_PRED_NONE_NONE_QUALIFIERS)
! 	(TERNOP_NONE_NONE_NONE_PRED_QUALIFIERS)
! 	(TERNOP_UNONE_UNONE_UNONE_PRED_QUALIFIERS): New.
! 	* config/arm/arm-protos.h (mve_bool_vec_to_const): New.
! 	* config/arm/arm.cc (arm_hard_regno_mode_ok): Handle new VxBI
! 	modes.
! 	(arm_mode_to_pred_mode): New.
! 	(arm_expand_vector_compare): Use the right VxBI mode instead of
! 	HI.
! 	(arm_expand_vcond): Likewise.
! 	(simd_valid_immediate): Handle MODE_VECTOR_BOOL.
! 	(mve_bool_vec_to_const): New.
! 	(neon_make_constant): Call mve_bool_vec_to_const when needed.
! 	* config/arm/arm_mve_builtins.def (vcmpneq_, vcmphiq_, vcmpcsq_)
! 	(vcmpltq_, vcmpleq_, vcmpgtq_, vcmpgeq_, vcmpeqq_, vcmpneq_f)
! 	(vcmpltq_f, vcmpleq_f, vcmpgtq_f, vcmpgeq_f, vcmpeqq_f, vpselq_u)
! 	(vpselq_s, vpselq_f): Use new predicated qualifiers.
! 	* config/arm/constraints.md (DB): New.
! 	* config/arm/iterators.md (MVE_7, MVE_7_HI): New mode iterators.
! 	(MVE_VPRED, MVE_vpred): New attribute iterators.
! 	* config/arm/mve.md (@mve_vcmp<mve_cmp_op>q_<mode>)
! 	(@mve_vcmp<mve_cmp_op>q_f<mode>, @mve_vpselq_<supf><mode>)
! 	(@mve_vpselq_f<mode>): Use MVE_VPRED instead of HI.
! 	(@mve_vpselq_<supf>v2di): Define separately.
! 	(mov<mode>): New expander for VxBI modes.
! 	* config/arm/vfp.md (thumb2_movhi_vfp, thumb2_movhi_fp16): Use
! 	MVE_7_HI iterator and add support for DB constraint.
  
! 2022-02-22  Christophe Lyon  <christophe.lyon@arm.com>
! 	    Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/100757
! 	PR target/101325
! 	* config/aarch64/aarch64-modes.def (VNx16BI, VNx8BI, VNx4BI,
! 	VNx2BI): Update definition.
! 	* config/arm/arm-builtins.cc (arm_init_simd_builtin_types): Add new
! 	simd types.
! 	(arm_init_builtin): Map predicate vectors arguments to HImode.
! 	(arm_expand_builtin_args): Move HImode predicate arguments to VxBI
! 	rtx. Move return value to HImode rtx.
! 	* config/arm/arm-builtins.h (arm_type_qualifiers): Add qualifier_predicate.
! 	* config/arm/arm-modes.def (B2I, B4I, V16BI, V8BI, V4BI): New modes.
! 	* config/arm/arm-simd-builtin-types.def (Pred1x16_t,
! 	Pred2x8_t,Pred4x4_t): New.
! 	* emit-rtl.cc (init_emit_once): Handle all boolean modes.
! 	* genmodes.cc (mode_data): Add boolean field.
! 	(blank_mode): Initialize it.
! 	(make_complex_modes): Fix handling of boolean modes.
! 	(make_vector_modes): Likewise.
! 	(VECTOR_BOOL_MODE): Use new COMPONENT parameter.
! 	(make_vector_bool_mode): Likewise.
! 	(BOOL_MODE): New.
! 	(make_bool_mode): New.
! 	(emit_insn_modes_h): Fix generation of boolean modes.
! 	(emit_class_narrowest_mode): Likewise.
! 	* machmode.def: (VECTOR_BOOL_MODE): Document new COMPONENT
! 	parameter.  Use new BOOL_MODE instead of FRACTIONAL_INT_MODE to
! 	define BImode.
! 	* rtx-vector-builder.cc (rtx_vector_builder::find_cached_value):
! 	Fix handling of constm1_rtx for VECTOR_BOOL.
! 	* simplify-rtx.cc (native_encode_rtx): Fix support for VECTOR_BOOL.
! 	(native_decode_vector_rtx): Likewise.
! 	(test_vector_ops_duplicate): Skip vec_merge test
! 	with vectors of booleans.
! 	* varasm.cc (output_constant_pool_2): Likewise.
  
! 2022-02-22  Christophe Lyon  <christophe.lyon@arm.com>
  
! 	* config/arm/mve.md (mve_vmvnq_n_<supf><mode>): Use V_elem mode
! 	for operand 1.
  
! 2022-02-22  Christophe Lyon  <christophe.lyon@arm.com>
  
! 	* config/arm/arm.cc (arm_class_likely_spilled_p): Handle VPR_REG.
  
! 2022-02-22  Christophe Lyon  <christophe.lyon@arm.com>
  
! 	* config/arm/arm.h (reg_class): Add GENERAL_AND_VPR_REGS.
! 	(REG_CLASS_NAMES): Likewise.
! 	(REG_CLASS_CONTENTS): Likewise.
! 	(CLASS_MAX_NREGS): Handle VPR.
! 	* config/arm/arm.cc (arm_hard_regno_nregs): Handle VPR.
  
! 2022-02-22  Tobias Burnus  <tobias@codesourcery.com>
! 	    Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx-c.cc (nvptx_cpu_cpp_builtins): Handle SM70.
! 	* config/nvptx/nvptx.cc (first_ptx_version_supporting_sm):
! 	Likewise.
! 	* config/nvptx/nvptx.opt (misa): Add sm_70 alias PTX_ISA_SM70.
  
! 2022-02-22  Tobias Burnus  <tobias@codesourcery.com>
! 	    Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.opt (mptx): Add 6.0 alias PTX_VERSION_6_0.
! 	* doc/invoke.texi (-mptx): Update for new values and defaults.
  
! 2022-02-22  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.cc (gen_comment): New function.
! 	(workaround_uninit_method_1, workaround_uninit_method_2)
! 	(workaround_uninit_method_3): : Use gen_comment.
! 	* config/nvptx/nvptx.opt (mptx-comment): New option.
  
! 2022-02-22  Richard Biener  <rguenther@suse.de>
  
! 	* tree-vect-slp.cc (vect_build_slp_tree_2): Dump the def used
! 	for a splat.
  
! 2022-02-22  Roger Sayle  <roger@nextmovesoftware.com>
! 	    Richard Biener  <rguenther@suse.de>
  
! 	* fold-const.cc (ctor_single_nonzero_element): New function to
! 	return the single non-zero element of a (vector) constructor.
! 	* fold-const.h (ctor_single_nonzero_element): Prototype here.
! 	* match.pd (reduc (constructor@0)): Simplify reductions of a
! 	constructor containing a single non-zero element.
! 	(reduc (@0 op VECTOR_CST) ->  (reduc @0) op CONST): Simplify
! 	reductions of vector operations of the same operator with
! 	constant vector operands.
  
! 2022-02-22  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/104604
! 	* gimple-range-fold.cc (adjust_imagpart_expr, adjust_realpart_expr):
! 	Only check if gimple_assign_rhs1 is COMPLEX_CST if
! 	gimple_assign_rhs_code is COMPLEX_CST.
  
! 2022-02-22  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104612
! 	* config/i386/i386-expand.cc (ix86_expand_copysign): Call force_reg
! 	on input operands before calling lowpart_subreg on it.  For output
! 	operand, use a vmode pseudo as destination and then move its lowpart
! 	subreg into operands[0] if lowpart_subreg fails on dest.
! 	(ix86_expand_xorsign): Likewise.
  
! 2022-02-22  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104582
! 	PR target/99881
! 	* config/i386/i386.cc (ix86_vector_costs::add_stmt_cost):
! 	Cost GPR to vector register moves for integer vector construction.
  
! 2022-02-22  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104582
! 	* tree-vectorizer.h (stmt_info_for_cost::node): New field.
! 	(vector_costs::add_stmt_cost): Add SLP node parameter.
! 	(dump_stmt_cost): Likewise.
! 	(add_stmt_cost): Likewise, new overload and adjust.
! 	(add_stmt_costs): Adjust.
! 	(record_stmt_cost): New overload.
! 	* tree-vectorizer.cc (dump_stmt_cost): Dump the SLP node.
! 	(vector_costs::add_stmt_cost): Adjust.
! 	* tree-vect-loop.cc (vect_estimate_min_profitable_iters):
! 	Adjust.
! 	* tree-vect-slp.cc (vect_prologue_cost_for_slp): Record
! 	the SLP node for costing.
! 	(vectorizable_slp_permutation): Likewise.
! 	* tree-vect-stmts.cc (record_stmt_cost): Adjust and add
! 	new overloads.
! 	* config/i386/i386.cc (ix86_vector_costs::add_stmt_cost):
! 	Adjust.
! 	* config/aarch64/aarch64.cc (aarch64_vector_costs::add_stmt_cost):
! 	Adjust.
! 	* config/rs6000/rs6000.cc (rs6000_vector_costs::add_stmt_cost):
! 	Adjust.
! 	(rs6000_cost_data::adjust_vect_cost_per_loop): Likewise.
  
! 2022-02-22  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104582
! 	* tree-vectorizer.h (add_stmt_cost): New overload.
! 	(record_stmt_cost): Likewise.
! 	* tree-vect-loop.cc (vect_compute_single_scalar_iteration_cost):
! 	Use add_stmt_costs.
! 	(vect_get_known_peeling_cost): Use new overloads.
! 	(vect_estimate_min_profitable_iters): Likewise.  Consistently
! 	use scalar_stmt for costing versioning checks.
! 	* tree-vect-stmts.cc (record_stmt_cost): New overload.
  
! 2022-02-22  Hongyu Wang  <hongyu.wang@intel.com>
  
! 	PR target/103069
! 	* config/i386/i386-expand.cc (ix86_expand_atomic_fetch_op_loop):
! 	Split atomic fetch and loop part.
! 	(ix86_expand_cmpxchg_loop): New expander for cmpxchg loop.
! 	* config/i386/i386-protos.h (ix86_expand_cmpxchg_loop): New
! 	prototype.
! 	* config/i386/sync.md (atomic_compare_and_swap<mode>): Call new
! 	expander under TARGET_RELAX_CMPXCHG_LOOP.
! 	(atomic_compare_and_swap<mode>): Likewise for doubleword modes.
  
! 2022-02-21  Dan Li  <ashimida@linux.alibaba.com>
  
! 	* config/aarch64/aarch64.cc (SLOT_REQUIRED):
! 	Change wb_candidate[12] to wb_push_candidate[12].
! 	(aarch64_layout_frame): Likewise, and
! 	change callee_adjust when scs is enabled.
! 	(aarch64_save_callee_saves):
! 	Change wb_candidate[12] to wb_push_candidate[12].
! 	(aarch64_restore_callee_saves):
! 	Change wb_candidate[12] to wb_pop_candidate[12].
! 	(aarch64_get_separate_components):
! 	Change wb_candidate[12] to wb_push_candidate[12].
! 	(aarch64_expand_prologue): Push x30 onto SCS before it's
! 	pushed onto stack.
! 	(aarch64_expand_epilogue): Pop x30 frome SCS, while
! 	preventing it from being popped from the regular stack again.
! 	(aarch64_override_options_internal): Add SCS compile option check.
! 	(TARGET_HAVE_SHADOW_CALL_STACK): New hook.
! 	* config/aarch64/aarch64.h (struct GTY): Add is_scs_enabled,
! 	wb_pop_candidate[12], and rename wb_candidate[12] to
! 	wb_push_candidate[12].
! 	* config/aarch64/aarch64.md (scs_push): New template.
! 	(scs_pop): Likewise.
! 	* doc/invoke.texi: Document -fsanitize=shadow-call-stack.
! 	* doc/tm.texi: Regenerate.
! 	* doc/tm.texi.in: Add hook have_shadow_call_stack.
! 	* flag-types.h (enum sanitize_code):
! 	Add SANITIZE_SHADOW_CALL_STACK.
! 	* opts.cc (parse_sanitizer_options): Add shadow-call-stack
! 	and exclude SANITIZE_SHADOW_CALL_STACK.
! 	* target.def: New hook.
! 	* toplev.cc (process_options): Add SCS compile option check.
! 	* ubsan.cc (ubsan_expand_null_ifn): Enum type conversion.
  
! 2022-02-21  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104440
! 	* config/nvptx/nvptx.cc (workaround_uninit_method_1)
! 	(workaround_uninit_method_2, workaround_uninit_method_3)
! 	(workaround_uninit): New function.
! 	(nvptx_reorg): Use workaround_uninit.
! 	* config/nvptx/nvptx.opt (minit-regs): New option.
  
! 2022-02-21  Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	PR rtl-optimization/104498
! 	* alias.cc (compare_base_symbol_refs): Correct distance computation
! 	when swapping x and y.
  
! 2022-02-21  Andrew Pinski  <apinski@marvell.com>
  
! 	PR c/104506
! 	* tree-ssa.cc (tree_ssa_useless_type_conversion):
! 	Check the inner type before calling useless_type_conversion_p.
  
! 2022-02-19  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.cc (nvptx_reorg_uniform_simt): Handle SET insn.
! 	* config/nvptx/nvptx.md
! 	(define_insn "nvptx_atomic_store<mode>"): Rename to ...
! 	(define_insn "nvptx_atomic_store_sm70<mode>"): This.
! 	(define_insn "nvptx_atomic_store<mode>"): New define_insn.
! 	(define_expand "atomic_store<mode>"): Handle rename.  Use
! 	nvptx_atomic_store instead of atomic_exchange.
  
! 2022-02-19  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.cc (nvptx_reorg_uniform_simt): Handle all
! 	insns with atomic attribute.  Assert that all handled insns are
! 	PARALLELs.
! 	* config/nvptx/nvptx.md (define_insn "nvptx_atomic_store<mode>"):
! 	Set atomic attribute to false.
  
! 2022-02-19  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.cc (nvptx_unisimt_handle_set): Change return
! 	type to bool.
! 	(nvptx_reorg_uniform_simt): Insert nvptx_uniform_warp_check or
! 	nvptx_warpsync, if necessary.
  
! 2022-02-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR sanitizer/102656
! 	* asan.cc (instrument_derefs): If inner is a RESULT_DECL and access is
! 	known to be within bounds, treat it like automatic variables.
! 	If instrumenting access and inner is {VAR,PARM,RESULT}_DECL from
! 	current function and !TREE_STATIC which is not TREE_ADDRESSABLE, mark
! 	it addressable.
  
! 2022-02-18  Pat Haugen  <pthaugen@linux.ibm.com>
  
! 	* config/rs6000/rs6000.opt (mpower10-fusion): Mark Undocumented.
! 	(mpower10-fusion-ld-cmpi, mpower10-fusion-2logical,
! 	mpower10-fusion-logical-add, mpower10-fusion-add-logical,
! 	mpower10-fusion-2add, mpower10-fusion-2store): Remove.
! 	* config/rs6000/rs6000-cpus.def (ISA_3_1_MASKS_SERVER,
! 	OTHER_P9_VECTOR_MASKS): Remove Power10 fusion sub-options.
! 	* config/rs6000/rs6000.cc (rs6000_option_override_internal,
! 	power10_sched_reorder): Likewise.
! 	* config/rs6000/genfusion.pl (gen_ld_cmpi_p10, gen_logical_addsubf,
! 	gen_addadd): Likewise
! 	* config/rs6000/fusion.md: Regenerate.
  
! 2022-02-18  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104257
! 	PR target/104598
! 	* config/rs6000/mm_malloc.h (_mm_malloc): Call posix_memalign
! 	rather than __posix_memalign.
  
! 2022-02-18  Richard Biener  <rguenther@suse.de>
  
! 	PR target/104581
! 	* config/i386/i386.cc (ix86_avx_u128_mode_source): Remove.
! 	(ix86_avx_u128_mode_needed): Return AVX_U128_DIRTY instead
! 	of calling ix86_avx_u128_mode_source which would eventually
! 	have returned AVX_U128_ANY in some very special case.
  
! 2022-02-18  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/96881
! 	* tree-ssa-dce.cc (mark_stmt_if_obviously_necessary): Comment
! 	CLOBBER handling.
! 	(control_parents_preserved_p): New function.
! 	(eliminate_unnecessary_stmts): Check that we preserved control
! 	parents before retaining a CLOBBER.
! 	(perform_tree_ssa_dce): Pass down aggressive flag
! 	to eliminate_unnecessary_stmts.
  
! 2022-02-17  Jason Merrill  <jason@redhat.com>
  
! 	* tree.cc (warn_deprecated_use): Look for TYPE_STUB_DECL
! 	on TYPE_MAIN_VARIANT.
  
! 2022-02-17  Paul A. Clarke  <pc@us.ibm.com>
  
! 	PR target/104257
! 	* config/rs6000/bmi2intrin.h: Uglify local variables.
! 	* config/rs6000/emmintrin.h: Likewise.
! 	* config/rs6000/mm_malloc.h: Likewise.
! 	* config/rs6000/mmintrin.h: Likewise.
! 	* config/rs6000/pmmintrin.h: Likewise.
! 	* config/rs6000/smmintrin.h: Likewise.
! 	* config/rs6000/tmmintrin.h: Likewise.
! 	* config/rs6000/xmmintrin.h: Likewise.
  
! 2022-02-17  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	PR target/104335
! 	* config/rs6000/rs6000.cc (rs6000_emit_int_cmove): Return false
! 	if the expected comparison's first operand is of mode MODE_CC.
  
! 2022-02-17  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR rtl-optimization/104447
! 	* lra-constraints.cc (spill_hard_reg_in_range): Initiate ignore
! 	hard reg set by lra_no_alloc_regs.
  
! 2022-02-17  liuhongt  <hongtao.liu@intel.com>
  
! 	PR tree-optimization/104551
! 	PR tree-optimization/103771
! 	* match.pd (cond_expr_convert_p): Add types_match check when
! 	convert is extension.
! 	* tree-vect-patterns.cc
! 	(gimple_cond_expr_convert_p): Adjust comments.
! 	(vect_recog_cond_expr_convert_pattern): Ditto.
  
! 2022-02-17  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/104557
! 	* valtrack.cc (debug_lowpart_subreg): Don't call gen_rtx_raw_SUBREG
! 	if expr has VOIDmode.
  
! 2022-02-17  liuhongt  <hongtao.liu@intel.com>
  
! 	* config/i386/cpuid.h (bit_MPX): Removed.
! 	(bit_BNDREGS): Ditto.
! 	(bit_BNDCSR): Ditto.
  
! 2022-02-17  Michael Meissner  <meissner@the-meissners.org>
  
! 	PR target/99708
! 	* config/rs6000/rs6000-c.cc (rs6000_cpu_cpp_builtins): Define
! 	__SIZEOF_IBM128__ if the IBM 128-bit long double type is created.
! 	Define __SIZEOF_FLOAT128__ if the IEEE 128-bit floating point type
! 	is created.
  
! 2022-02-16  Andrew MacLeod  <amacleod@redhat.com>
  
! 	* gimple-range-gori.cc (gori_compute::condexpr_adjust): Use
! 	range_compatible_p instead of direct type comparison.
  
! 2022-02-16  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/104544
! 	* combine.cc (try_combine): When looking for insn whose links
! 	should be updated from i3 to i2, don't stop on debug insns, instead
! 	skip over them.
  
! 2022-02-16  Richard Sandiford  <richard.sandiford@arm.com>
  
  	PR target/100056
! 	* config/aarch64/iterators.md (LOGICAL_OR_PLUS): New iterator.
! 	* config/aarch64/aarch64.md: Extend the PR100056 patterns
! 	to handle plus in the same way as ior, if the operands have
! 	no set bits in common.
  
! 2022-02-15  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/104526
! 	* gimple-range-fold.cc (fold_using_range::range_of_cond_expr): Call
! 	new routine.
! 	* gimple-range-gori.cc (range_def_chain::get_def_chain): Force a build
! 	of dependency chain if there isn't one.
! 	(gori_compute::condexpr_adjust): New.
! 	* gimple-range-gori.h (class gori_compute): New prototype.
  
! 2022-02-15  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/100874
! 	* config/aarch64/aarch64-protos.h (aarch64_maxmin_plus_const):
  	Declare.
! 	* config/aarch64/aarch64.cc (aarch64_maxmin_plus_const): New function.
! 	* config/aarch64/aarch64.md (*aarch64_minmax_plus): New pattern.
  
! 2022-02-15  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* tree-vectorizer.h (vect_scalar_ops_slice): New struct.
! 	(vect_scalar_ops_slice_hash): Likewise.
! 	(vect_scalar_ops_slice::op): New function.
! 	* tree-vect-slp.cc (vect_scalar_ops_slice::all_same_p): New function.
! 	(vect_scalar_ops_slice_hash::hash): Likewise.
! 	(vect_scalar_ops_slice_hash::equal): Likewise.
! 	(vect_prologue_cost_for_slp): Check for duplicate vectors.
! 	* config/aarch64/aarch64.cc
! 	(aarch64_vector_costs::m_stp_sequence_cost): New member variable.
! 	(aarch64_aligned_constant_offset_p): New function.
! 	(aarch64_stp_sequence_cost): Likewise.
! 	(aarch64_vector_costs::add_stmt_cost): Handle new STP heuristic.
! 	(aarch64_vector_costs::finish_cost): Likewise.
  
! 2022-02-15  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* tree-vect-slp.cc (vect_bb_vectorization_profitable_p): Fix
! 	use after free.
  
! 2022-02-15  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104543
! 	* gimple-loop-jam.cc (unroll_jam_possible_p): Check outer loop exits
! 	come after the inner loop.
  
! 2022-02-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104536
! 	* config/i386/host-cygwin.cc (cygwin_gt_pch_get_address): Use
! 	cannot instead of can%'t in diagnostics.  Formatting fixes.
  
! 2022-02-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/104522
! 	* fold-const.h (native_interpret_real): Declare.
! 	* fold-const.cc (native_interpret_real): No longer static.  Don't
! 	perform MODE_COMPOSITE_P verification here.
! 	(native_interpret_expr) <case REAL_TYPE>: But perform it here instead
! 	for all modes.
! 	* gimple-fold.cc (clear_padding_type): Call native_interpret_real
! 	instead of native_interpret_expr.
! 	* simplify-rtx.cc (simplify_immed_subreg): Perform the native_encode_rtx
! 	and comparison verification for all FLOAT_MODE_P modes, not just
! 	MODE_COMPOSITE_P.
  
! 2022-02-15  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104519
! 	* fold-const.cc (multiple_of_p): Remove never true condition.
! 	* tree-ssa-loop-niter.cc (number_of_iterations_ne): Use
! 	the appropriate types for determining whether the difference
! 	of final and base is a multiple of the step.
  
! 2022-02-15  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/104517
! 	* omp-low.cc (task_cpyfns): New variable.
! 	(delete_omp_context): Don't call finalize_task_copyfn from here.
! 	(create_task_copyfn): Push task_stmt into task_cpyfns.
! 	(execute_lower_omp): Call finalize_task_copyfn here on entries from
! 	task_cpyfns vector and release the vector.
  
! 2022-02-14  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/104355
! 	* doc/invoke.texi (-Warray-bounds): Update documentation.
  
! 2022-02-14  Michael Meissner  <meissner@the-meissners.org>
  
! 	PR target/104253
! 	* config/rs6000/rs6000.cc (init_float128_ibm): Update the
! 	conversion functions used to convert IFmode types.
  
! 2022-02-14  Andrew Stubbs  <ams@codesourcery.com>
  
! 	* config/gcn/gcn.cc (gcn_expand_reduc_scalar): Use force_reg.
  
! 2022-02-14  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104528
! 	* tree-ssa.h (find_released_ssa_name): Declare.
! 	* tree-ssa.cc (find_released_ssa_name): Export.
! 	* cfgloop.cc (verify_loop_structure): Look for released
! 	SSA names in loops nb_iterations.
! 	* tree-ssa-dse.cc (pass_dse::execute): Release number of iteration
! 	estimates.
  
! 2022-02-14  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104511
! 	* tree-ssa-forwprop.cc (simplify_vector_constructor): Avoid
! 	touching DFP <-> FP conversions.
  
! 2022-02-14  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/104497
! 	* gimplify.cc (gimplify_compound_lval): Make sure the
! 	base is a non-register if needed and possible.
  
! 2022-02-13  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/103771
! 	* match.pd (cond_expr_convert_p): New match.
! 	* tree-vect-patterns.cc (gimple_cond_expr_convert_p): Declare.
! 	(vect_recog_cond_expr_convert_pattern): New.
  
! 2022-02-12  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR sanitizer/104449
! 	* asan.cc: Include tree-eh.h.
! 	(handle_builtin_alloca): Handle the case when __builtin_alloca or
! 	__builtin_alloca_with_align can throw.
  
! 2022-02-12  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104502
! 	* config/i386/i386.md (cvtsd2ss splitter): If operands[1] is xmm16+
! 	and AVX512VL isn't available, move operands[1] to operands[0] first.
  
! 2022-02-12  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/79754
! 	* config/i386/i386.cc (type_natural_mode):
! 	Skip decimal float vector modes.
  
! 2022-02-11  Iain Sandoe  <iain@sandoe.co.uk>
! 	    Vladimir Makarov  <vmakarov@redhat.com>
  
! 	PR target/104117
! 	* config/rs6000/rs6000.cc (darwin_rs6000_legitimate_lo_sum_const_p):
! 	Check for UNSPEC_MACHOPIC_OFFSET wrappers on symbolic addresses when
! 	emitting PIC code.
! 	(legitimate_lo_sum_address_p): Likewise.
! 	* lra-constraints.cc (process_address_1): Do not attempt to emit a reg
! 	load from an invalid lo_sum address.
  
! 2022-02-11  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/104499
! 	* match.pd ((X & Y) CMP 0 -> X CMP2 ~Y): Use view_convert instead
! 	of convert.
  
! 2022-02-11  Jakub Jelinek  <jakub@redhat.com>
  
! 	* tree.cc (build_common_builtin_nodes): Fix up formatting in
! 	__builtin_clear_padding decl creation.
! 	* gimplify.cc (gimple_add_padding_init_for_auto_var): Encode
! 	for_auto_init in the value of 2nd BUILT_IN_CLEAR_PADDING
! 	argument rather than in 3rd argument.
! 	(gimplify_call_expr): Likewise.  Fix up comment formatting.
! 	* gimple-fold.cc (gimple_fold_builtin_clear_padding): Expect
! 	2 arguments instead of 3, take for_auto_init from the value
! 	of 2nd argument.
  
! 2022-02-11  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR rtl-optimization/104400
! 	* lra-constraints.cc (process_alt_operands): Don't make union of
! 	this_alternative_exclude_start_hard_regs when reg class in insn
! 	alternative covers other reg classes in the same alternative.
  
! 2022-02-11  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/104446
! 	* combine.cc (subst): Don't substitute CONST_INTs into RTX_AUTOINC
! 	operands.
  
! 2022-02-11  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/104496
! 	* internal-fn.cc (vectorized_internal_fn_supported_p):
! 	Bail out for integer mode vector types.
  
! 2022-02-11  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/104459
! 	* df-scan.cc (df_insn_change_bb): Don't call df_set_bb_dirty when
! 	moving DEBUG_INSNs between bbs.
  
! 2022-02-11  liuhongt  <hongtao.liu@intel.com>
  
! 	PR tree-optimization/104479
! 	* match.pd (uncond_op + vec_cond -> cond_op): Add single_use
! 	for the dest of uncond_op.
  
! 2022-02-11  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104456
! 	* config/nvptx/nvptx.cc (prevent_branch_around_nothing): Handle asm
! 	insn.
  
! 2022-02-10  Qing Zhao  <qing.zhao@oracle.com>
  
! 	PR middle-end/100775
! 	* function.cc (gen_call_used_regs_seq): Call
! 	df_update_exit_block_uses when updating df.
  
! 2022-02-10  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/104469
! 	* config/i386/sse.md (vec_unpacks_float_lo_v4si):
! 	Change operand 1 constraint to register_operand.
  
! 2022-02-10  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104373
! 	* tree-ssa-sccvn.h (do_rpo_vn): New export exposing the
! 	walk kind.
! 	* tree-ssa-sccvn.cc (do_rpo_vn): Export, get the default
! 	walk kind as argument.
! 	(run_rpo_vn): Adjust.
! 	(pass_fre::execute): Likewise.
! 	* tree-ssa-uninit.cc (warn_uninitialized_vars): Skip
! 	blocks not reachable.
! 	(execute_late_warn_uninitialized): Mark all edges as
! 	executable.
! 	(execute_early_warn_uninitialized): Use VN to compute
! 	executable edges.
! 	(pass_data_early_warn_uninitialized): Enable a dump file,
! 	change dump name to warn_uninit.
  
! 2022-02-10  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/104467
! 	* match.pd (vector extract simplification): Multiply the
! 	number of CTOR elements with the number of element elements.
  
! 2022-02-10  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104466
! 	* tree-ssa-alias.cc (refs_may_alias_p_2): Use rbase1/rbase2
! 	for the MR_DEPENDENCE checks as intended.
  
! 2022-02-10  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.md (define_insn "nvptx_atomic_store<mode>"): New
! 	define_insn.
! 	(define_expand "atomic_store<mode>"): Use nvptx_atomic_store<mode> for
! 	TARGET_SM70.
! 	(define_c_enum "unspecv"): Add UNSPECV_ST.
  
! 2022-02-10  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx-protos.h (nvptx_mem_maybe_shared_p): Declare.
! 	* config/nvptx/nvptx.cc (nvptx_mem_data_area): New static function.
! 	(nvptx_mem_maybe_shared_p): New function.
! 	* config/nvptx/nvptx.md (define_expand "atomic_store<mode>"): New
! 	define_expand.
  
! 2022-02-10  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/97005
! 	* config/nvptx/nvptx.md (define_insn "sub<mode>3"): Workaround
! 	driver JIT bug by using sub.s16 instead of sub.u16.
  
! 2022-02-10  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	* config/nvptx/nvptx.md (copysign<mode>3): Allow immediate
! 	floating point constants as operands 1 and/or 2.
  
! 2022-02-10  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	PR target/104345
! 	* config/nvptx/nvptx.md (sel_true<mode>): Fix indentation.
! 	(sel_false<mode>): Likewise.
! 	(define_code_iterator eqne): New code iterator for EQ and NE.
! 	(*selp<mode>_neg_<code>): New define_insn_and_split to optimize
! 	the negation of a selp instruction.
! 	(*selp<mode>_not_<code>): New define_insn_and_split to optimize
! 	the bitwise not of a selp instruction.
! 	(*setcc_int<mode>): Use set instruction for neg:SI of a selp.
  
! 2022-02-10  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	* config/nvptx/nvptx.md (any_logic): Move code iterator earlier
! 	in machine description.
! 	(logic): Move code attribute earlier in machine description.
! 	(ilogic): New code attribute, like logic but "ior" for IOR.
! 	(and<mode>3, ior<mode>3, xor<mode>3): Delete. Replace with...
! 	(<ilogic><mode>3): New define_insn for HSDIM logic operations.
! 	(<ilogic>bi3): New define_insn for BI mode logic operations.
! 	(define_split): Lower logic operations from integer modes to
! 	BI mode predicate operations.
  
! 2022-02-10  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	* config/nvptx/nvptx.md (UNSPEC_ISINF): New UNSPEC.
! 	(one_cmplbi2): New define_insn for not.pred.
! 	(mulditi3): New define_expand for signed widening multiply.
! 	(umulditi3): New define_expand for unsigned widening multiply.
! 	(smul<mode>3_highpart): New define_insn for signed highpart mult.
! 	(umul<mode>3_highpart): New define_insn for unsigned highpart mult.
! 	(*smulhi3_highpart_2): Renamed from smulhi3_highpart.
! 	(*smulsi3_highpart_2): Renamed from smulsi3_highpart.
! 	(*umulhi3_highpart_2): Renamed from umulhi3_highpart.
! 	(*umulsi3_highpart_2): Renamed from umulsi3_highpart.
! 	(*setcc<mode>_from_not_bi): New define_insn.
! 	(*setcc_isinf<mode>): New define_insn for testp.infinite.
! 	(isinf<mode>2): New define_expand.
  
! 2022-02-10  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	* config/nvptx/nvptx.md (cmp<mode>): Renamed from *cmp<mode>.
! 	(setcc<mode>_from_bi): Additionally support QImode.
! 	(extendbi<mode>2): Additionally support QImode.
! 	(zero_extendbi<mode>2): Additionally support QImode.
! 	(any_sbinary, any_ubinary, any_sunary, any_uunary): New code
! 	iterators for signed and unsigned, binary and unary operations.
! 	(<sbinary>qi3, <ubinary>qi3, <sunary>qi2, <uunary>qi2): New
! 	expanders to perform QImode operations using SImode instructions.
! 	(cstoreqi4): New define_expand.
! 	(*ext_truncsi2_qi): New define_insn.
! 	(*zext_truncsi2_qi): New define_insn.
  
! 2022-02-10  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	* config/nvptx/nvptx.md (*cmpf): New define_insn.
! 	(cstorehf4): New define_expand.
! 	(fmahf4): New define_insn.
! 	(neghf2): New define_insn.
! 	(abshf2): New define_insn.
  
! 2022-02-10  Gerald Pfeifer  <gerald@pfeifer.com>
  
! 	* doc/install.texi (Specific): Change the www.bitwizard.nl
! 	reference to use https.
  
! 2022-02-10  Marcel Vollweiler  <marcel@codesourcery.com>
  
! 	* gimplify.cc (gimplify_scan_omp_clauses): Added cases for
! 	OMP_CLAUSE_HAS_DEVICE_ADDR
! 	and handle array sections.
! 	(gimplify_adjust_omp_clauses): Added OMP_CLAUSE_HAS_DEVICE_ADDR case.
! 	* omp-low.cc (scan_sharing_clauses): Handle OMP_CLAUSE_HAS_DEVICE_ADDR.
! 	(lower_omp_target): Same.
! 	* tree-core.h (enum omp_clause_code): Same.
! 	* tree-nested.cc (convert_nonlocal_omp_clauses): Same.
! 	(convert_local_omp_clauses): Same.
! 	* tree-pretty-print.cc (dump_omp_clause): Same.
! 	* tree.cc: Same.
  
! 2022-02-10  Eugene Rozenfeld  <erozen@microsoft.com>
  
! 	* auto-profile.cc (afdo_indirect_call): Don't attempt to promote indirect calls
! 	that will result in direct recursive calls.
  
! 2022-02-10  Andrew Pinski  <apinski@marvell.com>
  
! 	PR target/104474
! 	* config/aarch64/aarch64.cc
! 	(aarch64_sve_expand_vector_init_handle_trailing_constants):
! 	Use CONST0_RTX instead of const0_rtx for the non-constant elements.
  
! 2022-02-09  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/104462
! 	* common/config/i386/i386-common.cc (OPTION_MASK_ISA2_XSAVE_UNSET):
! 	Also include OPTION_MASK_ISA2_AVX2_UNSET.
  
! 2022-02-09  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/104458
! 	* config/i386/i386-expand.cc (ix86_split_idivmod):
! 	Force operands[2] and operands[3] into a register..
  
! 2022-02-09  Jeff Law  <jeffreyalaw@gmail.com>
  
! 	PR target/97040
! 	* config/v850/v850.md (*v850_fnmasf4): Renamed from fnmasf4.
! 	(*v850_fnmssf4): Renamed from fnmssf4
  
! 2022-02-09  Ian Lance Taylor  <iant@golang.org>
  
! 	* godump.cc (go_force_record_alignment): Really name the alignment
! 	field "_" (complete 2021-12-29 change).
  
! 2022-02-09  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	* config/rs6000/rs6000-builtins.def (VREPLACE_UN_UV2DI): Change
! 	function prototype.
! 	(VREPLACE_UN_UV4SI): Likewise.
! 	(VREPLACE_UN_V2DF): Likewise.
! 	(VREPLACE_UN_V2DI): Likewise.
! 	(VREPLACE_UN_V4SF): Likewise.
! 	(VREPLACE_UN_V4SI): Likewise.
! 	* config/rs6000/rs6000-overload.def (VEC_REPLACE_UN): Change all
! 	function prototypes.
! 	* config/rs6000/vsx.md (vreplace_un_<mode>): Remove define_expand.
! 	(vreplace_un_<mode>): New define_insn.
  
! 2022-02-09  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/iterators.md (VDCSIF): New mode iterator.
! 	(VDBL): Handle SF.
! 	(single_wx, single_type, single_dtype, dblq): New mode attributes.
! 	* config/aarch64/aarch64-simd.md (load_pair_lanes<mode>): Extend
! 	from VDC to VDCSIF.
! 	(store_pair_lanes<mode>): Likewise.
! 	(*aarch64_combine_internal<mode>): Likewise.
! 	(*aarch64_combine_internal_be<mode>): Likewise.
! 	(*aarch64_combinez<mode>): Likewise.
! 	(*aarch64_combinez_be<mode>): Likewise.
! 	* config/aarch64/aarch64.cc (aarch64_classify_address): Handle
! 	8-byte modes for ADDR_QUERY_LDP_STP_N.
! 	(aarch64_print_operand): Likewise for %y.
  
! 2022-02-09  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64-simd.md (@aarch64_split_simd_mov<mode>):
! 	Use aarch64_combine instead of move_lo/hi_quad.  Tabify.
! 	(move_lo_quad_<mode>, aarch64_simd_move_hi_quad_<mode>): Delete.
! 	(aarch64_simd_move_hi_quad_be_<mode>, move_hi_quad_<mode>): Delete.
! 	(vec_pack_trunc_<mode>): Take general_operand elements and use
! 	aarch64_combine rather than move_lo/hi_quad to combine them.
! 	(vec_pack_trunc_df): Likewise.
  
! 2022-02-09  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64-protos.h (aarch64_split_simd_combine):
! 	Delete.
! 	* config/aarch64/aarch64-simd.md (@aarch64_combinez<mode>): Rename
! 	to...
! 	(*aarch64_combinez<mode>): ...this.
! 	(@aarch64_combinez_be<mode>): Rename to...
! 	(*aarch64_combinez_be<mode>): ...this.
! 	(@aarch64_vec_concat<mode>): New expander.
! 	(aarch64_combine<mode>): Use it.
! 	(@aarch64_simd_combine<mode>): Delete.
! 	* config/aarch64/aarch64.cc (aarch64_split_simd_combine): Delete.
! 	(aarch64_expand_vector_init): Use aarch64_vec_concat.
  
! 2022-02-09  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/predicates.md (aarch64_reg_or_mem_pair_operand):
! 	New predicate.
! 	* config/aarch64/aarch64-simd.md (*aarch64_combine_internal<mode>)
! 	(*aarch64_combine_internal_be<mode>): New patterns.
  
! 2022-02-09  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64-simd.md (move_lo_quad_internal_<mode>)
! 	(move_lo_quad_internal_be_<mode>): Delete.
! 	(move_lo_quad_<mode>): Use aarch64_combine<Vhalf> instead of the above.
  
! 2022-02-09  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64-protos.h (aarch64_mergeable_load_pair_p):
  	Declare.
! 	* config/aarch64/aarch64-simd.md (load_pair_lanes<mode>): Use
! 	aarch64_mergeable_load_pair_p instead of inline check.
! 	* config/aarch64/aarch64.cc (aarch64_expand_vector_init): Likewise.
! 	(aarch64_check_consecutive_mems): Allow the reversed parameter
! 	to be null.
! 	(aarch64_mergeable_load_pair_p): New function.
  
! 2022-02-09  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64-simd.md (vec_set<mode>): Allow the
! 	element to be an aarch64_simd_nonimmediate_operand.
  
! 2022-02-09  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64-simd.md (aarch64_simd_vec_set<mode>): Use
! 	aarch64_simd_nonimmediate_operand instead of
! 	aarch64_simd_general_operand.
! 	(@aarch64_combinez<mode>): Use nonimmediate_operand instead of
! 	general_operand.
! 	(@aarch64_combinez_be<mode>): Likewise.
  
! 2022-02-09  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/104464
! 	* gimple-isel.cc (gimple_expand_vec_cond_expr): Postpone
! 	throwing check to after unproblematic replacement.
  
! 2022-02-09  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	PR tree-optimization/104420
! 	* match.pd (mult @0 real_zerop): Tweak conditions for constant
! 	folding X*0.0 (or X*-0.0) to HONOR_SIGNED_ZEROS when appropriate.
  
! 2022-02-09  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/104407
! 	* dwarf2out.cc (mangle_referenced_decls): New function.
! 	(tree_add_const_value_attribute): Don't call rtl_for_decl_init if
! 	early_dwarf.  Instead walk the initializer and try to mangle vars or
! 	functions referenced from it.
  
! 2022-02-09  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/104288
! 	* gimple-range-cache.cc (non_null_ref::set_nonnull): New.
! 	(non_null_ref::adjust_range): Move to header.
! 	(ranger_cache::range_of_def): Don't check non-null.
! 	(ranger_cache::entry_range): Don't check non-null.
! 	(ranger_cache::range_on_edge): Check for nonnull on normal edges.
! 	(ranger_cache::update_to_nonnull): New.
! 	(non_null_loadstore): New.
! 	(ranger_cache::block_apply_nonnull): New.
! 	* gimple-range-cache.h (class non_null_ref): Update prototypes.
! 	(non_null_ref::adjust_range): Move to here and inline.
! 	(class ranger_cache): Update prototypes.
! 	* gimple-range-path.cc (path_range_query::range_defined_in_block): Do
! 	not search dominators.
! 	(path_range_query::adjust_for_non_null_uses): Ditto.
! 	* gimple-range.cc (gimple_ranger::range_of_expr): Check on-entry for
! 	def overrides.  Do not check nonnull.
! 	(gimple_ranger::range_on_entry): Check dominators for nonnull.
! 	(gimple_ranger::range_on_edge): Check for nonnull on normal edges..
! 	(gimple_ranger::register_side_effects): New.
! 	* gimple-range.h (gimple_ranger::register_side_effects): New.
! 	* tree-vrp.cc (rvrp_folder::fold_stmt): Call register_side_effects.
  
! 2022-02-09  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104445
! 	PR tree-optimization/102832
! 	* optabs-query.h (can_vec_extract): New.
! 	* optabs-query.cc (can_vec_extract): Likewise.
! 	* tree-vect-loop.cc (vect_find_reusable_accumulator): Check
! 	we can extract a hi/lo part from the larger vector, rework
! 	check iteration from larger to smaller sizes.
  
! 2022-02-09  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/35513
! 	PR target/100593
! 	* config/i386/gnu-property.cc: Include "i386-protos.h".
! 	(file_end_indicate_exec_stack_and_gnu_property): Generate
! 	a GNU_PROPERTY_1_NEEDED note for -mno-direct-extern-access or
! 	nodirect_extern_access attribute.
! 	* config/i386/i386-options.cc
! 	(handle_nodirect_extern_access_attribute): New function.
! 	(ix86_attribute_table): Add nodirect_extern_access attribute.
! 	* config/i386/i386-protos.h (ix86_force_load_from_GOT_p): Add a
! 	bool argument.
! 	(ix86_has_no_direct_extern_access): New.
! 	* config/i386/i386.cc (ix86_has_no_direct_extern_access): New.
! 	(ix86_force_load_from_GOT_p): Add a bool argument to indicate
! 	call operand.  Force non-call load from GOT for
! 	-mno-direct-extern-access or nodirect_extern_access attribute.
! 	(legitimate_pic_address_disp_p): Avoid copy relocation in PIE
! 	for -mno-direct-extern-access or nodirect_extern_access attribute.
! 	(ix86_print_operand): Pass true to ix86_force_load_from_GOT_p
! 	for call operand.
! 	(asm_preferred_eh_data_format): Use PC-relative format for
! 	-mno-direct-extern-access to avoid copy relocation.  Check
! 	ptr_mode instead of TARGET_64BIT when selecting DW_EH_PE_sdata4.
! 	(ix86_binds_local_p): Set ix86_has_no_direct_extern_access to
! 	true for -mno-direct-extern-access or nodirect_extern_access
! 	attribute.  Don't treat protected data as extern and avoid copy
! 	relocation on common symbol with -mno-direct-extern-access or
! 	nodirect_extern_access attribute.
! 	(ix86_reloc_rw_mask): New to avoid copy relocation for
! 	-mno-direct-extern-access.
! 	(TARGET_ASM_RELOC_RW_MASK): New.
! 	* config/i386/i386.opt: Add -mdirect-extern-access.
! 	* doc/extend.texi: Document nodirect_extern_access attribute.
! 	* doc/invoke.texi: Document -m[no-]direct-extern-access.
  
! 2022-02-09  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/104441
! 	* config/i386/i386.cc (ix86_avx_u128_mode_source): New function.
! 	(ix86_avx_u128_mode_needed): Return AVX_U128_ANY for debug INSN.
! 	Call ix86_avx_u128_mode_source to check mode for each component
! 	of source operand.
  
! 2022-02-09  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/104451
! 	* config/i386/sse.md (<insn><mode>3): lowpart_subreg
! 	operands[2] from SImode to QImode.
  
! 2022-02-09  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/104450
! 	* gimple-isel.cc: Pass cfun around.
! 	(+gimple_expand_vec_cond_expr): Do not combine a throwing
! 	comparison with the select.
  
! 2022-02-09  Richard Biener  <rguenther@suse.de>
  
! 	PR target/104453
! 	* config/i386/i386.cc (ix86_gimple_fold_builtin): Guard shift
! 	folding for NULL LHS.
  
! 2022-02-08  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	PR rtl-optimization/104198
! 	PR rtl-optimization/104153
! 	* ifcvt.cc (noce_convert_multiple_sets_1): Copy rtx instead of
! 	using it directly.  Rework comparison handling and always
! 	perform a second pass.
  
! 2022-02-08  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/102140
! 	* config/rs6000/rs6000.cc (vspltis_shifted): Return false also if
! 	split1 pass has finished already.
  
! 2022-02-08  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	* config/rs6000/rs6000-builtins.def (VMSUMCUD): New.
! 	* config/rs6000/rs6000-overload.def (VEC_MSUMC): New.
! 	* config/rs6000/vsx.md (UNSPEC_VMSUMCUD): New constant.
! 	(vmsumcud): New define_insn.
  
! 2022-02-08  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx-opts.h (enum ptx_isa): Add PTX_ISA_SM70.
! 	* config/nvptx/nvptx.h (TARGET_SM70): Define.
  
! 2022-02-08  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	* config/s390/s390.cc (s390_rtx_costs): Increase costs for load
! 	on condition.
! 	* config/s390/s390.md: Use paradoxical subreg.
  
! 2022-02-08  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	* combine.cc (reg_subword_p): Check for paradoxical subreg.
  
! 2022-02-08  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104283
! 	* config/nvptx/nvptx-opts.h (enum ptx_version): Add PTX_VERSION_3_0
! 	and PTX_VERSION_4_2.
! 	* config/nvptx/nvptx.cc (first_ptx_version_supporting_sm)
! 	(default_ptx_version_option, ptx_version_to_string)
! 	(sm_version_to_string, handle_ptx_version_option): New function.
! 	(nvptx_option_override): Call handle_ptx_version_option.
! 	(nvptx_file_start): Use ptx_version_to_string and sm_version_to_string.
! 	* config/nvptx/nvptx.md (define_insn "nvptx_shuffle<mode>")
! 	(define_insn "nvptx_vote_ballot"): Use TARGET_PTX_6_0.
! 	* config/nvptx/nvptx.opt (mptx): Remove 'Init'.
  
! 2022-02-08  Maciej W. Rozycki  <macro@embecosm.com>
  
! 	* doc/install.texi (Configuration): Document `--with-isa-spec='
! 	RISC-V option.
! 	* doc/invoke.texi (Option Summary): List `-misa-spec=' RISC-V
  	option.
! 	(RISC-V Options): Document it.
  
! 2022-02-08  Maciej W. Rozycki  <macro@embecosm.com>
  
! 	* config/riscv/t-riscv (riscv-sr.o): Add $(TM_H) dependency.
  
! 2022-02-08  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.cc (write_fn_proto_1): Handle 'main (int)'.
  
! 2022-02-08  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/104364
! 	* config/nvptx/nvptx-protos.h (nvptx_mem_local_p): Declare.
! 	* config/nvptx/nvptx.cc (nvptx_reorg_uniform_simt): Assert that
! 	change is validated.
! 	(nvptx_mem_local_p): New function.
! 	* config/nvptx/nvptx.md: Use nvptx_mem_local_p.
! 	(define_c_enum "unspecv"): Add UNSPECV_CAS_LOCAL.
! 	(define_insn "atomic_compare_and_swap<mode>_1_local"): New
! 	non-atomic, non-predicable define_insn, factored out of ...
! 	(define_insn "atomic_compare_and_swap<mode>_1"): ... here.
! 	Make predicable again.
! 	(define_expand "atomic_compare_and_swap<mode>"): Use
! 	atomic_compare_and_swap<mode>_1_local.
  
! 2022-02-08  liuhongt  <hongtao.liu@intel.com>
  
! 	PR rtl-optimization/104059
! 	* regcprop.cc (copyprop_hardreg_forward_1): Don't propagate
! 	for a more expensive reg-reg move.
  
! 2022-02-07  Tamar Christina  <tamar.christina@arm.com>
  
! 	* config/arm/arm_neon.h (vusdotq_s32, vusdot_laneq_s32,
! 	vusdotq_laneq_s32, vsudot_laneq_s32, vsudotq_laneq_s32): New
! 	* config/arm/arm_neon_builtins.def (usdot): Add V16QI.
! 	(usdot_laneq, sudot_laneq): New.
! 	* config/arm/neon.md (neon_<sup>dot_laneq<vsi2qi>): New.
! 	(neon_<sup>dot_lane<vsi2qi>): Remote unneeded code.
  
! 2022-02-07  Tamar Christina  <tamar.christina@arm.com>
  
! 	* config/arm/arm_neon.h (vdot_laneq_u32, vdotq_laneq_u32,
! 	vdot_laneq_s32, vdotq_laneq_s32): New.
! 	* config/arm/arm_neon_builtins.def (sdot_laneq, udot_laneq): New.
! 	* config/arm/neon.md (neon_<sup>dot<vsi2qi>): New.
! 	(<sup>dot_prod<vsi2qi>): Re-order rtl.
! 	(neon_<sup>dot_lane<vsi2qi>): Fix rtl order and endiannes.
! 	(neon_<sup>dot_laneq<vsi2qi>): New.
  
! 2022-02-07  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	PR target/104327
! 	* config/s390/s390.cc (s390_can_inline_p): Accept a few more flags
! 	if always_inline is set. Don't inline when tune differs without
! 	always_inline.
  
! 2022-02-07  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/104402
! 	* gimple-expr.cc (is_gimple_condexpr): _Complex typed
! 	compares are not valid.
! 	* tree-cfg.cc (verify_gimple_assign_ternary): For COND_EXPR
! 	check is_gimple_condexpr.
  
! 2022-02-07  Kewen Lin  <linkw@linux.ibm.com>
  
! 	PR target/103627
! 	* config/rs6000/rs6000.cc (rs6000_option_override_internal): Move the
! 	hunk affecting VSX and ALTIVEC to appropriate place.
  
! 2022-02-07  Kewen Lin  <linkw@linux.ibm.com>
  
! 	PR target/103627
! 	* config/rs6000/rs6000.cc (rs6000_option_override_internal): Disable
! 	MMA if !TARGET_VSX.
  
! 2022-02-06  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/89074
! 	PR c++/104033
! 	* fold-const.h (folding_initializer): Adjust comment.
! 	(folding_cxx_constexpr): Declare.
! 	* fold-const.cc (folding_initializer): Adjust comment.
! 	(folding_cxx_constexpr): New variable.
! 	(address_compare): Restrict the decl vs. STRING_CST
! 	or vice versa or STRING_CST vs. STRING_CST or
! 	is_global_var != is_global_var optimizations to !folding_cxx_constexpr.
! 	Punt for FUNCTION_DECLs with non-zero offsets.  If folding_initializer,
! 	assume non-aliased functions have non-zero size and have different
! 	addresses.  For folding_cxx_constexpr, punt on comparisons of start
! 	of some object and end of another one, regardless whether it is a decl
! 	or string literal.  Also punt for folding_cxx_constexpr on
! 	STRING_CST vs. STRING_CST comparisons if the two literals could be
! 	overlapping.
  
! 2022-02-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/104389
! 	* match.pd (x * 0 -> 0): Punt if x maybe infinite and NaNs are
! 	honored.
  
! 2022-02-05  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* configure.ac: Fix detection for zifencei support.
! 	* configure: Regenerate.
  
! 2022-02-05  Kito Cheng  <kito.cheng@sifive.com>
  
! 	PR target/104219
! 	* config.gcc (riscv*-*-*): Normalize the with_isa_spec value.
! 	(all_defaults): Add isa_spec.
! 	* config/riscv/riscv.h (OPTION_DEFAULT_SPECS): Add isa_spec.
  
! 2022-02-04  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	* config/rs6000/rs6000-c.cc (resolve_vec_mul): Accept args and types
! 	parameters instead of arglist and nargs.  Simplify accordingly.  Remove
! 	unnecessary test for argument count mismatch.
! 	(resolve_vec_cmpne): Likewise.
! 	(resolve_vec_adde_sube): Likewise.
! 	(resolve_vec_addec_subec): Likewise.
! 	(altivec_resolve_overloaded_builtin): Move overload special handling
! 	after the gathering of arguments into args[] and types[] and the test
! 	for correct number of arguments.  Don't perform the test for correct
! 	number of arguments for certain special cases.  Call the other special
! 	cases with args and types instead of arglist and nargs.
  
! 2022-02-04  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	PR target/100808
! 	* doc/extend.texi (Basic PowerPC Built-in Functions Available on ISA
! 	3.1): Provide consistent type names.  Remove unnecessary semicolons.
! 	Fix bad line breaks.
  
! 2022-02-04  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104380
! 	* config/rs6000/rs6000.cc (rs6000_mangle_decl_assembler_name): Also
! 	adjust mangling of __builtin*printf_chk.
  
! 2022-02-04  Jonathan Wakely  <jwakely@redhat.com>
  
! 	* doc/cpp.texi (Variadic Macros): Replace C++2a with C++20.
  
! 2022-02-04  Richard Biener  <rguenther@suse.de>
! 	    Bin Cheng   <bin.cheng@linux.alibaba.com>
  
! 	PR tree-optimization/100499
! 	* fold-const.h (multiple_of_p): Add nowrap parameter, defaulted
! 	to true.
! 	* fold-const.cc (multiple_of_p): Likewise.  Honor it for
! 	MULT_EXPR, PLUS_EXPR and MINUS_EXPR and pass it along,
! 	switching to false for conversions.
! 	* tree-ssa-loop-niter.cc (number_of_iterations_ne): Do not
! 	claim the outermost expression does not wrap when calling
! 	multiple_of_p.  Refactor the check done to check the
! 	original IV, avoiding a bias that might wrap.
  
! 2022-02-04  Richard Biener  <rguenther@suse.de>
  
! 	* fold-const.cc (multiple_of_p): Re-write and move LSHIFT_EXPR
! 	handling.
  
! 2022-02-04  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR debug/104366
! 	* dwarf2out.cc (dwarf2out_finish): Empty base_types.
! 	(dwarf2out_early_finish): Likewise.
  
! 2022-02-04  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR tree-optimization/104356
! 	* match.pd (X / bool_range_Y is X): Add guard.
! 	(X / X is one): Likewise.
! 	(X / abs (X) is X < 0 ? -1 : 1): Likewise.
! 	(X / -X is -1): Likewise.
! 	(1 / X -> X == 1): Likewise.
  
! 2022-02-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103641
! 	* tree-vect-patterns.cc (vect_synth_mult_by_constant):
! 	Pass the vector mode to choose_mult_variant.
  
! 2022-02-04  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	PR rtl-optimization/101885
! 	* combine.cc (try_combine): When splitting a parallel into two
! 	sequential sets, check not only that the first doesn't clobber
! 	the second but also that the second doesn't clobber the first.
  
! 2022-02-04  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/90348
! 	PR middle-end/104092
! 	* tree-core.h (clobber_kind): New enum.
! 	(tree_base::u::bits::address_space): Document use in CONSTRUCTORs.
! 	* tree.h (CLOBBER_KIND): Add.
! 	(build_clobber): Add clobber kind argument, defaulted to
! 	CLOBBER_UNDEF.
! 	* tree.cc (build_clobber): Likewise.
! 	* gimple.h (gimple_clobber_p): New overload with specified kind.
! 	* tree-streamer-in.cc (streamer_read_tree_bitfields): Stream
! 	CLOBBER_KIND.
! 	* tree-streamer-out.cc (streamer_write_tree_bitfields):
! 	Likewise.
! 	* tree-pretty-print.cc (dump_generic_node): Mark EOL CLOBBERs.
! 	* gimplify.cc (gimplify_bind_expr): Build storage end-of-life clobbers
! 	with CLOBBER_EOL.
! 	(gimplify_target_expr): Likewise.
! 	* tree-inline.cc (expand_call_inline): Likewise.
! 	* tree-ssa-ccp.cc (insert_clobber_before_stack_restore): Likewise.
! 	* gimple-ssa-warn-access.cc (pass_waccess::check_stmt): Only treat
! 	CLOBBER_EOL clobbers as ending lifetime of storage.
  
! 2022-02-04  Martin Sebor  <msebor@redhat.com>
  
! 	* pointer-query.h (pointer_query::cache_type): Use auto_vec for auto
! 	cleanup.
  
! 2022-02-03  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/104260
! 	* passes.def (pass_warn_access): Adjust pass placement.
  
! 2022-02-03  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/104362
! 	* config/i386/i386.cc (find_drap_reg): For 32bit targets
! 	return DI_REG if function uses __builtin_eh_return.
  
! 2022-02-03  Martin Sebor  <msebor@redhat.com>
  
! 	* gimple-ssa-warn-restrict.cc (class pass_wrestrict): Outline ctor.
! 	(pass_wrestrict::m_ptr_qry): New member.
! 	(wrestrict_walk): Rename...
! 	(pass_wrestrict::check_block): ...to this.
! 	(pass_wrestrict::execute): Set up and tear down pointer_query and
! 	ranger.
! 	(builtin_memref::builtin_memref): Change ctor argument.  Simplify.
! 	(builtin_access::builtin_access): Same.
! 	(builtin_access::m_ptr_qry): New member.
! 	(check_call): Rename...
! 	(pass_wrestrict::check_call): ...to this.
! 	(check_bounds_or_overlap): Change argument.
! 	* gimple-ssa-warn-restrict.h (check_bounds_or_overlap): Same.
  
! 2022-02-03  Martin Sebor  <msebor@redhat.com>
  
! 	* gimple-array-bounds.cc (array_bounds_checker::array_bounds_checker):
! 	Define ctor.
! 	(array_bounds_checker::get_value_range): Use new member.
! 	(array_bounds_checker::check_mem_ref): Same.
! 	* gimple-array-bounds.h (array_bounds_checker::array_bounds_checker):
! 	Outline ctor.
! 	(array_bounds_checker::m_ptr_query): New member.
  
! 2022-02-03  Martin Sebor  <msebor@redhat.com>
  
! 	* gimple-ssa-warn-access.cc (pass_waccess::pass_waccess): Remove
! 	pointer_query cache.
! 	* pointer-query.cc (pointer_query::pointer_query): Remove cache
! 	argument.  Zero-initialize new cache member.
! 	(pointer_query::get_ref): Replace cache pointer with direct access.
! 	(pointer_query::put_ref): Same.
! 	(pointer_query::flush_cache): Same.
! 	(pointer_query::dump): Same.
! 	* pointer-query.h (class pointer_query): Remove cache argument from
! 	ctor.  Change cache pointer to cache subobject member.
! 	* tree-ssa-strlen.cc: Remove pointer_query cache.
  
! 2022-02-03  Martin Sebor  <msebor@redhat.com>
  
! 	PR tree-optimization/104119
! 	* gimple-ssa-sprintf.cc (struct directive): Change argument type.
! 	(format_none): Same.
! 	(format_percent): Same.
! 	(format_integer): Same.
! 	(format_floating): Same.
! 	(get_string_length): Same.
! 	(format_character): Same.
! 	(format_string): Same.
! 	(format_plain): Same.
! 	(format_directive): Same.
! 	(compute_format_length): Same.
! 	(handle_printf_call): Same.
! 	* tree-ssa-strlen.cc (get_range_strlen_dynamic): Same.   Call
! 	get_maxbound.
! 	(get_range_strlen_phi): Same.
! 	(get_maxbound): New function.
! 	(strlen_pass::get_len_or_size): Adjust to parameter change.
! 	* tree-ssa-strlen.h (get_range_strlen_dynamic): Change argument type.
  
! 2022-02-03  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	PR target/103686
! 	* config/rs6000/rs6000-builtin.cc (rs6000_gimple_fold_builtin):	Remove
! 	test for !rs6000_fold_gimple.
! 	* config/rs6000/rs6000.cc (rs6000_option_override_internal): Likewise.
! 	* config/rs6000/rs6000.opt (mfold-gimple): Remove.
  
! 2022-02-03  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	PR target/95082
! 	* config/rs6000/rs6000-builtin.cc (rs6000_expand_builtin): Handle
! 	endianness for vclzlsbb and vctzlsbb.
! 	* config/rs6000/rs6000-builtins.def (VCLZLSBB_V16QI): Change
! 	default pattern and indicate a different pattern will be used for
! 	big endian.
! 	(VCLZLSBB_V4SI): Likewise.
! 	(VCLZLSBB_V8HI): Likewise.
! 	(VCTZLSBB_V16QI): Likewise.
! 	(VCTZLSBB_V4SI): Likewise.
! 	(VCTZLSBB_V8HI): Likewise.
  
! 2022-02-03  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	* config.gcc (powerpc*-*-*): Add rs6000-builtin.o to extra_objs.
! 	* config/rs6000/rs6000-builtin.cc: New file, containing code moved
! 	from other files.
! 	* config/rs6000/rs6000-call.cc (cpu_is_info): Move to
! 	rs6000-builtin.cc.
! 	(cpu_supports_info): Likewise.
! 	(rs6000_type_string): Likewise.
! 	(altivec_expand_predicate_builtin): Likewise.
! 	(rs6000_htm_spr_icode): Likewise.
! 	(altivec_expand_vec_init_builtin): Likewise.
! 	(get_element_number): Likewise.
! 	(altivec_expand_vec_set_builtin): Likewise.
! 	(altivec_expand_vec_ext_builtin): Likewise.
! 	(rs6000_invalid_builtin): Likewise.
! 	(rs6000_fold_builtin): Likewise.
! 	(fold_build_vec_cmp): Likewise.
! 	(fold_compare_helper): Likewise.
! 	(map_to_integral_tree_type): Likewise.
! 	(fold_mergehl_helper): Likewise.
! 	(fold_mergeeo_helper): Likewise.
! 	(rs6000_builtin_valid_without_lhs): Likewise.
! 	(rs6000_builtin_is_supported): Likewise.
! 	(rs6000_gimple_fold_mma_builtin): Likewise.
! 	(rs6000_gimple_fold_builtin): Likewise.
! 	(rs6000_expand_ldst_mask): Likewise.
! 	(cpu_expand_builtin): Likewise.
! 	(elemrev_icode): Likewise.
! 	(ldv_expand_builtin): Likewise.
! 	(lxvrse_expand_builtin): Likewise.
! 	(lxvrze_expand_builtin): Likewise.
! 	(stv_expand_builtin): Likewise.
! 	(mma_expand_builtin): Likewise.
! 	(htm_spr_num): Likewise.
! 	(htm_expand_builtin): Likewise.
! 	(rs6000_expand_builtin): Likewise.
! 	(rs6000_vector_type): Likewise.
! 	(rs6000_init_builtins): Likewise.  Remove initialization of
! 	builtin_mode_to_type entries.
! 	(rs6000_builtin_decl): Move to rs6000-builtin.cc.
! 	* config/rs6000/rs6000.cc (rs6000_builtin_mask_for_load): New
! 	external declaration.
! 	(rs6000_builtin_md_vectorized_function): Likewise.
! 	(rs6000_builtin_reciprocal): Likewise.
! 	(altivec_builtin_mask_for_load): Move to rs6000-builtin.cc.
! 	(rs6000_builtin_types): Likewise.
! 	(builtin_mode_to_type): Remove.
! 	(rs6000_builtin_mask_for_load): Move to rs6000-builtin.cc.  Remove
! 	static qualifier.
! 	(rs6000_builtin_md_vectorized_function): Likewise.
! 	(rs6000_builtin_reciprocal): Likewise.
! 	* config/rs6000/rs6000.h (builtin_mode_to_type): Remove.
! 	* config/rs6000/t-rs6000 (rs6000-builtin.o): New target.
  
! 2022-02-03  Richard Biener  <rguenther@suse.de>
  
! 	PR debug/104337
! 	* tree-nrv.cc (pass_nrv::execute): Remove tieing result and found
! 	together via DECL_ABSTRACT_ORIGIN.
  
! 2022-02-03  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	* config/rs6000/rs6000-call.cc (rs6000_expand_builtin): Revise error
! 	message for RES_BITS case.
  
! 2022-02-03  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* gimple-range-fold.cc (fur_list::fur_list): Set m_local[1] correctly.
  
! 2022-02-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/arm/arm.opt (mfix-cortex-a57-aes-1742098,
! 	mfix-cortex-a72-aes-1655431): Ensure description ends with full stop.
  
! 2022-02-03  Aldy Hernandez  <aldyh@redhat.com>
  
! 	* cfganal.cc (verify_marked_backedges): New.
! 	* cfganal.h (verify_marked_backedges): New.
! 	* gimple-range-path.cc (path_range_query::path_range_query):
! 	Verify freshness of back edges.
! 	* tree-ssa-loop-ch.cc (ch_base::copy_headers): Call
! 	mark_dfs_back_edges.
! 	* tree-ssa-threadbackward.cc (back_threader::back_threader): Move
! 	path_range_query construction after backedges have been
! 	updated.
  
! 2022-02-03  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/aarch64-simd.md (movmisalign<mode>): Extend from
! 	VALL to VALL_F16.
  
! 2022-02-03  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* config/aarch64/iterators.md (VALL_F16MOV): Delete.
! 	* config/aarch64/aarch64-simd.md (mov<mode>): Use VALL_F16 instead
! 	of VALL_F16MOV.
  
! 2022-02-03  Martin Liska  <mliska@suse.cz>
  
! 	* config/i386/i386-options.cc (ix86_valid_target_attribute_inner_p):
! 	Change subject and object in the error message.
! 	* config/s390/s390.cc (s390_valid_target_attribute_inner_p):
! 	Likewise.
  
! 2022-02-03  Martin Liska  <mliska@suse.cz>
  
! 	* config/s390/s390.cc (s390_valid_target_attribute_inner_p):
! 	Use the error message for i386 target.
  
! 2022-02-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/104334
! 	* range-op.cc (range_operator::wi_fold_in_parts): Change lh_range
! 	and rh_range type to widest_int and subtract in widest_int.  Remove
! 	ov_rh, ov_lh and sign vars, always perform comparisons as signed
! 	and use >, < and == operators for it.
  
! 2022-02-03  Martin Sebor  <msebor@redhat.com>
  
! 	* common.opt (-Wuse-after-free): Correct typos.
  
! 2022-02-02  David Malcolm  <dmalcolm@redhat.com>
  
! 	PR analyzer/104270
! 	* doc/invoke.texi (-ftrivial-auto-var-init=): Add reference to
! 	-Wanalyzer-use-of-uninitialized-value to paragraph documenting that
! 	-ftrivial-auto-var-init= doesn't suppress warnings.
  
! 2022-02-02  Martin Liska  <mliska@suse.cz>
  
! 	* dwarf2out.cc (TEXT_SECTION_NAME): Remove unused macro.
  
! 2022-02-02  Bernd Kuhls  <bernd.kuhls@t-online.de>
  
! 	PR target/94372
! 	* config/or1k/linux.h (CPP_SPEC): Define.
  
! 2022-02-02  Tamar Christina  <tamar.christina@arm.com>
  
! 	PR tree-optimization/102819
! 	PR tree-optimization/103169
! 	* config/arm/vec-common.md (cml<fcmac1><conj_op><mode>4): Use
! 	canonical order.
  
! 2022-02-02  Tamar Christina  <tamar.christina@arm.com>
  
! 	PR tree-optimization/102819
! 	PR tree-optimization/103169
! 	* config/aarch64/aarch64-simd.md (cml<fcmac1><conj_op><mode>4): Use
! 	canonical order.
! 	* config/aarch64/aarch64-sve.md (cml<fcmac1><conj_op><mode>4): Likewise.
  
! 2022-02-02  Tamar Christina  <tamar.christina@arm.com>
  
! 	PR tree-optimization/102819
! 	PR tree-optimization/103169
! 	* doc/md.texi: Update docs for cfms, cfma.
! 	* tree-data-ref.h (same_data_refs): Accept optional offset.
! 	* tree-vect-slp-patterns.cc (is_linear_load_p): Fix issue with repeating
! 	patterns.
! 	(vect_normalize_conj_loc): Remove.
! 	(is_eq_or_top): Change to take two nodes.
! 	(enum _conj_status, compatible_complex_nodes_p,
! 	vect_validate_multiplication): New.
! 	(class complex_add_pattern, complex_add_pattern::matches,
! 	complex_add_pattern::recognize, class complex_mul_pattern,
! 	complex_mul_pattern::recognize, class complex_fms_pattern,
! 	complex_fms_pattern::recognize, class complex_operations_pattern,
! 	complex_operations_pattern::recognize, addsub_pattern::recognize): Pass
! 	new cache.
! 	(complex_fms_pattern::matches, complex_mul_pattern::matches): Pass new
! 	cache and use new validation code.
! 	* tree-vect-slp.cc (vect_match_slp_patterns_2, vect_match_slp_patterns,
! 	vect_analyze_slp): Pass along cache.
! 	(compatible_calls_p): Expose.
! 	* tree-vectorizer.h (compatible_calls_p, slp_node_hash,
! 	slp_compat_nodes_map_t): New.
! 	(class vect_pattern): Update signatures include new cache.
  
! 2022-02-02  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/cris.cc (cris_preferred_reload_class): Reject
! 	"eliminated" registers and small-enough constants unless
! 	reloaded into a class that is a subset of GENERAL_REGS.
! 	* config/cris/cris.md (attribute "cpu_variant"): New.
! 	(attribute "enabled"): Conditionalize on a matching attribute
! 	cpu_variant, if specified.
! 	("*movsi_internal<setcc><setnz><setnzvc>"): For moves to and from
! 	memory, add cpu-variant-enabled variants for "r" alternatives on
! 	the far side of the "x" alternatives, preferring the "x" ones
! 	only for variants where MOF is present (in addition to SRP).
  
! 2022-02-02  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/cris.cc (cris_register_move_cost): Remove special pre-ira
! 	extra cost for ALL_REGS.
  
! 2022-02-02  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/constraints.md (define_register_constraint "b"): Now
! 	GENERAL_REGS.
! 	* config/cris/cris.md (CRIS_ACR_REGNUM): Remove.
! 	* config/cris/cris.h: (reg_class, REG_CLASS_NAMES)
! 	(REG_CLASS_CONTENTS): Remove ACR_REGS, SPEC_ACR_REGS, GENNONACR_REGS,
! 	and SPEC_GENNONACR_REGS.
! 	* config/cris/cris.cc (cris_preferred_reload_class): Don't mention
! 	ACR_REGS and return GENERAL_REGS instead of GENNONACR_REGS.
  
! 2022-02-02  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/cris.md ("*movsi_internal<setcc><setnz><setnzvc>"):
! 	Conditionalize on (sub-)register operands or operand 1 being 0.
  
! 2022-02-02  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/cris.h (TARGET_DEFAULT): Don't include MASK_MUL_BUG.
! 	(MUL_BUG_ASM_DEFAULT): New macro.
! 	(MAYBE_AS_NO_MUL_BUG_ABORT): Define in terms of MUL_BUG_ASM_DEFAULT.
! 	* doc/invoke.texi (CRIS Options, -mmul-bug-workaround): Adjust
! 	accordingly.
  
! 2022-02-01  Eugene Rozenfeld  <erozen@microsoft.com>
  
! 	* opts.cc (common_handle_option): Don't set param_early_inliner_max_iterations
! 	to 10 for AutoFDO.
  
! 2022-02-01  Eugene Rozenfeld  <erozen@microsoft.com>
  
! 	* auto-profile.cc (auto_profile): Hard-code the number of iterations (10).
  
! 2022-02-01  Andrew Pinski  <apinski@marvell.com>
  
! 	* doc/install.texi:
  
! 2022-02-01  Ilya Leoshkevich  <iii@linux.ibm.com>
  
! 	* config/s390/s390.cc (s390_code_end): Do not switch back to
! 	code section.
  
! 2022-02-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104323
! 	* config/rs6000/t-rs6000 (EXTRA_GTYPE_DEPS): Append rs6000-builtins.h
! 	rather than $(srcdir)/config/rs6000/rs6000-builtins.def.
! 	* config/rs6000/rs6000-gen-builtins.cc (write_decls): Don't use
! 	GTY((user)) for struct bifdata and struct ovlddata.  Instead add
! 	GTY((skip(""))) to members with pointer and enum types that don't need
! 	to be tracked.  Add GTY(()) to rs6000_builtin_info and rs6000_instance_info
! 	declarations.  Don't emit gt_ggc_mx and gt_pch_nx declarations.
! 	(write_extern_fntype, write_fntype): Remove.
! 	(write_fntype_init): Emit the fntype vars as automatic vars instead
! 	of file scope ones.
! 	(write_header_file): Don't iterate with write_extern_fntype.
! 	(write_init_file): Don't iterate with write_fntype.  Don't emit
! 	gt_ggc_mx and gt_pch_nx definitions.
  
! 2022-02-01  Jason Merrill  <jason@redhat.com>
  
! 	* tree.h (struct tree_vec_map_cache_hasher): Move from...
! 	* tree.cc (struct tree_vec_map_cache_hasher): ...here.
  
! 2022-02-01  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.cc (nvptx_single): Use nvptx_uniform_warp_check.
! 	* config/nvptx/nvptx.md (define_c_enum "unspecv"): Add
! 	UNSPECV_UNIFORM_WARP_CHECK.
! 	(define_insn "nvptx_uniform_warp_check"): New define_insn.
  
! 2022-02-01  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.cc (nvptx_single): Use nvptx_warpsync.
! 	* config/nvptx/nvptx.md (define_c_enum "unspecv"): Add
! 	UNSPECV_WARPSYNC.
! 	(define_insn "nvptx_warpsync"): New define_insn.
  
! 2022-02-01  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.opt (mptx): Set to PTX_VERSION_6_3 by default.
  
! 2022-02-01  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx-opts.h (enum ptx_version): Add PTX_VERSION_6_0.
! 	* config/nvptx/nvptx.h (TARGET_PTX_6_0): New macro.
! 	* config/nvptx/nvptx.md (define_insn "nvptx_barsync"): Use barrier
! 	insn for TARGET_PTX_6_0.
  
! 2022-02-01  Tom de Vries  <tdevries@suse.de>
  
! 	PR target/100428
! 	* config/nvptx/nvptx.cc (prevent_branch_around_nothing): Handle nop
! 	insn.
  
! 2022-02-01  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.md (define_insn "atomic_compare_and_swap<mode>_1")
! 	(define_insn "atomic_exchange<mode>")
! 	(define_insn "atomic_fetch_add<mode>")
! 	(define_insn "atomic_fetch_addsf")
! 	(define_insn "atomic_fetch_<logic><mode>"): Output non-atomic version
! 	if memory operands is frame-relative.
  
! 2022-02-01  Tom de Vries  <tdevries@suse.de>
  
! 	* config/nvptx/nvptx.cc (enum nvptx_builtins): Add
! 	NVPTX_BUILTIN_MEMBAR_GL and NVPTX_BUILTIN_MEMBAR_CTA.
! 	(VOID): New macro.
! 	(nvptx_init_builtins): Add MEMBAR_GL and MEMBAR_CTA.
! 	(nvptx_expand_builtin): Handle NVPTX_BUILTIN_MEMBAR_GL and
! 	NVPTX_BUILTIN_MEMBAR_CTA.
! 	(nvptx_lockfull_update): Add level parameter.  Emit barriers.
! 	(nvptx_reduction_update, nvptx_goacc_reduction_fini): Update call to
! 	nvptx_lockfull_update.
! 	* config/nvptx/nvptx.md (define_c_enum "unspecv"): Add
! 	UNSPECV_MEMBAR_GL.
! 	(define_expand "nvptx_membar_gl"): New expand.
! 	(define_insn "*nvptx_membar_gl"): New insn.
  
! 2022-02-01  Martin Liska  <mliska@suse.cz>
  
! 	* doc/install.texi: Remove option for GCC < 4.8.
  
! 2022-02-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/104307
! 	* tree-vect-generic.cc (expand_vector_comparison): Don't push debug
! 	stmts to uses vector, just set vec_cond_expr_only to false for
! 	non-VEC_COND_EXPRs instead of pushing them into uses.  Treat
! 	VEC_COND_EXPRs that use lhs not just in rhs1, but rhs2 or rhs3 too
! 	like non-VEC_COND_EXPRs.
  
! 2022-02-01  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	* config/rs6000/rs6000-overload.def (VEC_ABSD): Remove #ifdef token.
! 	(VEC_BLENDV): Likewise.
! 	(VEC_BPERM): Likewise.
! 	(VEC_CFUGE): Likewise.
! 	(VEC_CIPHER_BE): Likewise.
! 	(VEC_CIPHERLAST_BE): Likewise.
! 	(VEC_CLRL): Likewise.
! 	(VEC_CLRR): Likewise.
! 	(VEC_CMPNEZ): Likewise.
! 	(VEC_CNTLZ): Likewise.
! 	(VEC_CNTLZM): Likewise.
! 	(VEC_CNTTZM): Likewise.
! 	(VEC_CNTLZ_LSBB): Likewise.
! 	(VEC_CNTM): Likewise.
! 	(VEC_CNTTZ): Likewise.
! 	(VEC_CNTTZ_LSBB): Likewise.
! 	(VEC_CONVERT_4F32_8F16): Likewise.
! 	(VEC_DIV): Likewise.
! 	(VEC_DIVE): Likewise.
! 	(VEC_EQV): Likewise.
! 	(VEC_EXPANDM): Likewise.
! 	(VEC_EXTRACT_FP_FROM_SHORTH): Likewise.
! 	(VEC_EXTRACT_FP_FROM_SHORTL): Likewise.
! 	(VEC_EXTRACTH): Likewise.
! 	(VEC_EXTRACTL): Likewise.
! 	(VEC_EXTRACTM): Likewise.
! 	(VEC_EXTRACT4B): Likewise.
! 	(VEC_EXTULX): Likewise.
! 	(VEC_EXTURX): Likewise.
! 	(VEC_FIRSTMATCHINDEX): Likewise.
! 	(VEC_FIRSTMACHOREOSINDEX): Likewise.
! 	(VEC_FIRSTMISMATCHINDEX): Likewise.
! 	(VEC_FIRSTMISMATCHOREOSINDEX): Likewise.
! 	(VEC_GB): Likewise.
! 	(VEC_GENBM): Likewise.
! 	(VEC_GENHM): Likewise.
! 	(VEC_GENWM): Likewise.
! 	(VEC_GENDM): Likewise.
! 	(VEC_GENQM): Likewise.
! 	(VEC_GENPCVM): Likewise.
! 	(VEC_GNB): Likewise.
! 	(VEC_INSERTH): Likewise.
! 	(VEC_INSERTL): Likewise.
! 	(VEC_INSERT4B): Likewise.
! 	(VEC_LXVL): Likewise.
! 	(VEC_MERGEE): Likewise.
! 	(VEC_MERGEO): Likewise.
! 	(VEC_MOD): Likewise.
! 	(VEC_MSUB): Likewise.
! 	(VEC_MULH): Likewise.
! 	(VEC_NAND): Likewise.
! 	(VEC_NCIPHER_BE): Likewise.
! 	(VEC_NCIPHERLAST_BE): Likewise.
! 	(VEC_NEARBYINT): Likewise.
! 	(VEC_NMADD): Likewise.
! 	(VEC_ORC): Likewise.
! 	(VEC_PDEP): Likewise.
! 	(VEC_PERMX): Likewise.
! 	(VEC_PEXT): Likewise.
! 	(VEC_POPCNT): Likewise.
! 	(VEC_PARITY_LSBB): Likewise.
! 	(VEC_REPLACE_ELT): Likewise.
! 	(VEC_REPLACE_UN): Likewise.
! 	(VEC_REVB): Likewise.
! 	(VEC_RINT): Likewise.
! 	(VEC_RLMI): Likewise.
! 	(VEC_RLNM): Likewise.
! 	(VEC_SBOX_BE): Likewise.
! 	(VEC_SIGNEXTI): Likewise.
! 	(VEC_SIGNEXTLL): Likewise.
! 	(VEC_SIGNEXTQ): Likewise.
! 	(VEC_SLDB): Likewise.
! 	(VEC_SLV): Likewise.
! 	(VEC_SPLATI): Likewise.
! 	(VEC_SPLATID): Likewise.
! 	(VEC_SPLATI_INS): Likewise.
! 	(VEC_SQRT): Likewise.
! 	(VEC_SRDB): Likewise.
! 	(VEC_SRV): Likewise.
! 	(VEC_STRIL): Likewise.
! 	(VEC_STRIL_P): Likewise.
! 	(VEC_STRIR): Likewise.
! 	(VEC_STRIR_P): Likewise.
! 	(VEC_STXVL): Likewise.
! 	(VEC_TERNARYLOGIC): Likewise.
! 	(VEC_TEST_LSBB_ALL_ONES): Likewise.
! 	(VEC_TEST_LSBB_ALL_ZEROS): Likewise.
! 	(VEC_VEE): Likewise.
! 	(VEC_VES): Likewise.
! 	(VEC_VIE): Likewise.
! 	(VEC_VPRTYB): Likewise.
! 	(VEC_VSCEEQ): Likewise.
! 	(VEC_VSCEGT): Likewise.
! 	(VEC_VSCELT): Likewise.
! 	(VEC_VSCEUO): Likewise.
! 	(VEC_VSEE): Likewise.
! 	(VEC_VSES): Likewise.
! 	(VEC_VSIE): Likewise.
! 	(VEC_VSTDC): Likewise.
! 	(VEC_VSTDCN): Likewise.
! 	(VEC_VTDC): Likewise.
! 	(VEC_XL): Likewise.
! 	(VEC_XL_BE): Likewise.
! 	(VEC_XL_LEN_R): Likewise.
! 	(VEC_XL_SEXT): Likewise.
! 	(VEC_XL_ZEXT): Likewise.
! 	(VEC_XST): Likewise.
! 	(VEC_XST_BE): Likewise.
! 	(VEC_XST_LEN_R): Likewise.
! 	(VEC_XST_TRUNC): Likewise.
! 	(VEC_XXPERMDI): Likewise.
! 	(VEC_XXSLDWI): Likewise.
! 	(VEC_TSTSFI_EQ_DD): Likewise.
! 	(VEC_TSTSFI_EQ_TD): Likewise.
! 	(VEC_TSTSFI_GT_DD): Likewise.
! 	(VEC_TSTSFI_GT_TD): Likewise.
! 	(VEC_TSTSFI_LT_DD): Likewise.
! 	(VEC_TSTSFI_LT_TD): Likewise.
! 	(VEC_TSTSFI_OV_DD): Likewise.
! 	(VEC_TSTSFI_OV_TD): Likewise.
! 	(VEC_VADDCUQ): Likewise.
! 	(VEC_VADDECUQ): Likewise.
! 	(VEC_VADDEUQM): Likewise.
! 	(VEC_VADDUDM): Likewise.
! 	(VEC_VADDUQM): Likewise.
! 	(VEC_VBPERMQ): Likewise.
! 	(VEC_VCLZB): Likewise.
! 	(VEC_VCLZD): Likewise.
! 	(VEC_VCLZH): Likewise.
! 	(VEC_VCLZW): Likewise.
! 	(VEC_VCTZB): Likewise.
! 	(VEC_VCTZD): Likewise.
! 	(VEC_VCTZH): Likewise.
! 	(VEC_VCTZW): Likewise.
! 	(VEC_VEEDP): Likewise.
! 	(VEC_VEESP): Likewise.
! 	(VEC_VESDP): Likewise.
! 	(VEC_VESSP): Likewise.
! 	(VEC_VIEDP): Likewise.
! 	(VEC_VIESP): Likewise.
! 	(VEC_VPKSDSS): Likewise.
! 	(VEC_VPKSDUS): Likewise.
! 	(VEC_VPKUDUM): Likewise.
! 	(VEC_VPKUDUS): Likewise.
! 	(VEC_VPOPCNT): Likewise.
! 	(VEC_VPOPCNTB): Likewise.
! 	(VEC_VPOPCNTD): Likewise.
! 	(VEC_VPOPCNTH): Likewise.
! 	(VEC_VPOPCNTW): Likewise.
! 	(VEC_VPRTYBD): Likewise.
! 	(VEC_VPRTYBQ): Likewise.
! 	(VEC_VPRTYBW): Likewise.
! 	(VEC_VRLD): Likewise.
! 	(VEC_VSLD): Likewise.
! 	(VEC_VSRAD): Likewise.
! 	(VEC_VSRD): Likewise.
! 	(VEC_VSTDCDP): Likewise.
! 	(VEC_VSTDCNDP): Likewise.
! 	(VEC_VSTDCNQP): Likewise.
! 	(VEC_VSTDCNSP): Likewise.
! 	(VEC_VSTDCQP): Likewise.
! 	(VEC_VSTDCSP): Likewise.
! 	(VEC_VSUBECUQ): Likewise.
! 	(VEC_VSUBEUQM): Likewise.
! 	(VEC_VSUBUDM): Likewise.
! 	(VEC_VSUBUQM): Likewise.
! 	(VEC_VTDCDP): Likewise.
! 	(VEC_VTDCSP): Likewise.
! 	(VEC_VUPKHSW): Likewise.
! 	(VEC_VUPKLSW): Likewise.
  
! 2022-02-01  Andreas Krebbel  <krebbel@linux.ibm.com>
  
! 	PR rtl-optimization/101260
! 	* regcprop.cc (maybe_mode_change): Invoke mode_change_ok also for
! 	copy_regno.
  
! 2022-02-01  Xi Ruoyao  <xry111@mengyan1223.wang>
  
! 	PR middle-end/95115
! 	* fold-const.cc (const_binop): Do not fold NaN result from
! 	  non-NaN operands.
  
! 2022-02-01  Tom de Vries  <tdevries@suse.de>
  
! 	* tree-loop-distribution.cc (generate_reduction_builtin_1): Check for
! 	-ftree-loop-distribute-patterns.
! 	(loop_distribution::execute): Don't call transform_reduction_loop for
! 	-fno-tree-loop-distribute-patterns.
  
! 2022-01-31  Andrew Pinski  <apinski@marvell.com>
  
! 	* fold-const.h (operand_compare::operand_equal_p):
! 	Fix comment about OEP_* flags.
  
! 2022-01-31  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104298
! 	* config/rs6000/aix.h (OPTION_GLIBC): Remove.
! 	* config/rs6000/darwin.h (OPTION_GLIBC): Likewise.
! 	* config/rs6000/option-defaults.h (OPTION_GLIBC): Define to 0
! 	if not already defined.
  
! 2022-01-31  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/104232
! 	* gimple-ssa-warn-access.cc (pointers_related_p): Add argument.
! 	Handle PHIs.  Add a synonymous overload.
! 	(pass_waccess::check_pointer_uses): Call pointers_related_p.
  
! 2022-01-31  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100499
! 	* fold-const.cc (multiple_of_p): Pass the correct type of
! 	the expression to the recursive invocation of multiple_of_p
! 	for conversions and use CASE_CONVERT.
  
! 2022-01-31  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR target/104189
! 	* config/sparc/linux64.h (TARGET_DEFAULT): Add MASK_V8PLUS.
  
! 2022-01-31  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100499
! 	* tree-cfg.cc (verify_gimple_assign_ternary): Use multiple_p
! 	on poly-ints instead of multiple_of_p.
! 	* tree-ssa.cc (maybe_rewrite_mem_ref_base): Likewise.
! 	(non_rewritable_mem_ref_base): Likewise.
! 	(non_rewritable_lvalue_p): Likewise.
! 	(execute_update_addresses_taken): Likewise.
  
! 2022-01-29  Jakub Jelinek  <jakub@redhat.com>
! 	    Andrew Pinski  <apinski@marvell.com>
  
! 	PR tree-optimization/104279
! 	PR tree-optimization/104280
! 	PR tree-optimization/104281
! 	* match.pd (1 / X -> X == 1 for unsigned X): Build eq with
! 	boolean_type_node and convert to type.  Formatting fixes.
  
! 2022-01-28  Yoshinori Sato  <yo-satoh@sios.com>
  
! 	* config/sh/t-linux (MULTILIB_EXCEPTIONS): Add m1, mb/m1 and m2a.
  
! 2022-01-28  Navid Rahimi  <navidrahimi@microsoft.com>
  
! 	PR tree-optimization/103514
! 	* match.pd (a & b) ^ (a == b) -> !(a | b): New optimization.
! 	(a & b) == (a ^ b) -> !(a | b): New optimization.
  
! 2022-01-28  Marek Polacek  <polacek@redhat.com>
  
! 	* doc/invoke.texi: Update -Wbidi-chars documentation.
  
! 2022-01-28  Iain Sandoe  <iain@sandoe.co.uk>
  
! 	* config/rs6000/darwin.h (OPTION_GLIBC): Define to 0.
  
! 2022-01-28  Zhao Wei Liew  <zhaoweiliew@gmail.com>
  
! 	PR tree-optimization/95424
! 	* match.pd: Simplify 1 / X where X is an integer.
  
! 2022-01-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/104263
! 	* gimple-ssa-store-merging.cc (get_status_for_store_merging): For
! 	cfun->can_throw_non_call_exceptions && cfun->eh test whether
! 	last non-debug stmt in the bb is store_valid_for_store_merging_p
! 	rather than last stmt.
  
! 2022-01-28  Martin Liska  <mliska@suse.cz>
  
! 	* diagnostic.cc (diagnostic_action_after_output): Remove extra
! 	newline.
  
! 2022-01-28  Martin Liska  <mliska@suse.cz>
  
! 	* config/rs6000/host-darwin.cc (segv_crash_handler):
! 	Do not use leading capital letter.
! 	(segv_handler): Likewise.
! 	* ipa-sra.cc (verify_splitting_accesses): Likewise.
! 	* varasm.cc (get_section): Likewise.
  
! 2022-01-28  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104267
! 	* tree-vect-stmts.cc (vectorizable_call): Properly use the
! 	per-argument determined vector type for externals and
! 	invariants.
  
! 2022-01-28  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104263
! 	* tree-cfg.cc (gimple_purge_dead_abnormal_call_edges):
! 	Purge edges also when !cfun->has_nonlocal_label
! 	and !cfun->calls_setjmp.
  
! 2022-01-28  Maciej W. Rozycki  <macro@embecosm.com>
  
! 	* config/riscv/riscv.md: Document `auipc' and `bitmanip' `type'
! 	attributes.
  
! 2022-01-28  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR lto/104237
! 	* cfgrtl.cc (loc_equal): New function.
! 	(unique_locus_on_edge_between_p): Use it.
  
! 2022-01-28  Richard Biener  <rguenther@suse.de>
  
! 	* cfganal.h (mark_dfs_back_edges): Provide API with struct
! 	function argument.
! 	* cfganal.cc (mark_dfs_back_edges): Take a struct function
! 	to work on, add a wrapper passing cfun.
! 	* graph.cc (draw_cfg_nodes_no_loops): Replace stray cfun
! 	uses with fun which is already passed.
! 	(draw_cfg_edges): Likewise.
! 	(draw_cfg_nodes_for_loop): Do not use draw_cfg_nodes_for_loop
! 	for fun != cfun.
  
! 2022-01-27  Patrick Palka  <ppalka@redhat.com>
  
! 	PR c++/99895
! 	* tree.cc (build_call_vec): Add const to second parameter.
! 	* tree.h (build_call_vec): Likewise.
  
! 2022-01-27  Martin Liska  <mliska@suse.cz>
  
! 	PR web/104254
! 	* diagnostic.cc (diagnostic_initialize):
! 	Initialize report_bug flag.
! 	(diagnostic_action_after_output):
! 	Explain that -freport-bug option can be used for pre-processed
! 	file creation.  Make the message shorter.
! 	(error_recursion): Rename Internal to internal.
! 	* diagnostic.h (struct diagnostic_context): New field.
! 	* opts.cc (common_handle_option): Init the field here.
  
! 2022-01-27  Kewen Lin  <linkw@linux.ibm.com>
  
! 	PR target/103702
! 	* config/rs6000/rs6000.cc
! 	(rs6000_cost_data::update_target_cost_per_stmt): Fix one wrong
! 	assertion with early return.
  
! 2022-01-27  Chung-Lin Tang  <cltang@codesourcery.com>
  
! 	PR middle-end/103642
! 	* gimplify.cc (gimplify_scan_omp_clauses): Do not do indir_p handling
! 	for non-pointer or non-reference-to-pointer cases.
  
! 2022-01-27  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/104196
! 	* gimple-fold.h (rewrite_to_defined_overflow): Add IN_PLACE argument.
! 	* gimple-fold.cc (rewrite_to_defined_overflow): Likewise.  If true,
! 	return NULL and emit needed stmts before and after stmt.
! 	* tree-ssa-reassoc.cc (update_range_test): For inter-bb range opt
! 	pick as operand_entry that will hold the merged test the one feeding
! 	earliest condition, ensure that by swapping range->idx with some
! 	other range's idx if needed.  If seq is non-NULL, don't actually swap
! 	it but instead rewrite stmts with undefined overflow in between
! 	the two locations.
! 	(maybe_optimize_range_tests): Set ops[]->id to bb->index with the
! 	corresponding condition even if they have non-NULL ops[]->op.
! 	Formatting fix.
  
! 2022-01-26  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104239
! 	* config/rs6000/emmintrin.h (_mm_sad_epu8): Use __asm__ instead of
! 	asm.
! 	* config/rs6000/smmintrin.h (_mm_minpos_epu16): Declare iterator
! 	before for loop instead of for init clause.
! 	* config/rs6000/bmi2intrin.h (_pext_u64): Likewise.
  
! 2022-01-26  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104239
! 	* config/rs6000/bmiintrin.h: Test _X86GPRINTRIN_H_INCLUDED instead of
! 	_X86INTRIN_H_INCLUDED and adjust #error wording.
! 	* config/rs6000/bmi2intrin.h: Likewise.
  
! 2022-01-26  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/104194
! 	* dwarf2out.cc (long_double_as_float128): New function.
! 	(modified_type_die): For powerpc64le IEEE 754 quad long double
! 	and complex long double emit those as DW_TAG_typedef to
! 	_Float128 or complex _Float128 base type.
  
! 2022-01-26  Marek Polacek  <polacek@redhat.com>
  
! 	PR target/104213
! 	* gimple-ssa-warn-access.cc (pass_waccess::warn_invalid_pointer): Don't
! 	warn when the SSA_NAME_VAR of REF has supressed -Wuse-after-free.
  
! 2022-01-26  Martin Liska  <mliska@suse.cz>
  
! 	* ipa-modref-tree.cc (modref_access_node::update):
! 	Remove "--param param=foo" with "--param foo".
! 	(modref_access_node::insert): Likewise.
! 	(modref_access_node::insert_kill): Likewise.
! 	* ipa-modref-tree.h (struct modref_ref_node): Likewise.
! 	(struct modref_base_node): Likewise.
! 	(struct modref_tree): Likewise.
  
! 2022-01-26  Raoni Fassina Firmino  <raoni@linux.ibm.com>
  
! 	PR target/94193
! 	* builtins.cc (expand_builtin_feclear_feraise_except): Add op0
! 	predicate check.
  
! 2022-01-25  Martin Sebor  <msebor@redhat.com>
  
! 	PR tree-optimization/104203
! 	* gimple-ssa-warn-access.cc (pass_data pass_data_waccess): Use
! 	TV_WARN_ACCESS.
! 	* pointer-query.cc (access_ref::merge_ref): Change return type.
! 	Convert failure to a conservative success.
! 	(access_ref::get_ref): Adjust to the change above.  Short-circuit
! 	PHI evaluation after first failure turned into conservative success.
! 	* pointer-query.h (access_ref::merge_ref): Change return type.
! 	* timevar.def (TV_WARN_ACCESS): New timer variable.
  
! 2022-01-25  David Edelsohn  <dje.gcc@gmail.com>
  
! 	* config/rs6000/aix.h (OPTION_GLIBC): Define as 0.
  
! 2022-01-25  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104214
! 	* tree-ssa-loop-niter.cc (number_of_iterations_cond): Use
! 	stronger guarantees for relational pointer compares when
! 	rewriting BASE0 + STEP0 cmp BASE1 + STEP1 as
! 	BASE0 + STEP0 - STEP1 cmp BASE1.
  
! 2022-01-25  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104172
! 	* config/rs6000/rs6000-internal.h (rs6000_passes_ieee128): Don't
! 	declare.
! 	* config/rs6000/rs6000.cc (rs6000_passes_ieee128,
! 	ieee128_mangling_gcc_8_1): Remove.
! 	(TARGET_ASM_GLOBALIZE_DECL_NAME): Don't redefine.
! 	(rs6000_mangle_type): Return "u9__ieee128" instead of
! 	ieee128_mangling_gcc_8_1 ? "U10__float128" : "u9__ieee128".
! 	(rs6000_globalize_decl_name): Remove.
! 	* config/rs6000/rs6000-call.cc (init_cumulative_args,
! 	rs6000_function_arg_advance_1): Don't set rs6000_passes_ieee128.
  
! 2022-01-24  Martin Sebor  <msebor@redhat.com>
  
! 	* pointer-query.cc (pointer_query::dump): Remove duplicate
! 	block.
  
! 2022-01-24  Marek Polacek  <polacek@redhat.com>
  
! 	PR preprocessor/104030
! 	* doc/invoke.texi: Update documentation for -Wbidi-chars.
  
! 2022-01-24  Raoni Fassina Firmino  <raoni@linux.ibm.com>
  
! 	PR target/94193
! 	* builtins.cc (expand_builtin_fegetround): New function.
! 	(expand_builtin_feclear_feraise_except): New function.
! 	(expand_builtin): Add cases for BUILT_IN_FEGETROUND,
! 	BUILT_IN_FECLEAREXCEPT and BUILT_IN_FERAISEEXCEPT.
! 	* config/rs6000/rs6000.md (fegetroundsi): New pattern.
! 	(feclearexceptsi): New Pattern.
! 	(feraiseexceptsi): New Pattern.
! 	* doc/extend.texi: Add a new introductory paragraph about the
! 	new builtins.
! 	* doc/md.texi: (fegetround@var{m}): Document new optab.
! 	(feclearexcept@var{m}): Document new optab.
! 	(feraiseexcept@var{m}): Document new optab.
! 	* optabs.def (fegetround_optab): New optab.
! 	(feclearexcept_optab): New optab.
! 	(feraiseexcept_optab): New optab.
  
! 2022-01-24  Richard Biener  <rguenther@suse.de>
! 	    Jiufu Guo  <guojiufu@linux.ibm.com>
  
! 	PR tree-optimization/100740
! 	PR tree-optimization/101508
! 	PR tree-optimization/101972
! 	PR tree-optimization/102131
! 	* tree-ssa-loop-niter.cc (number_of_iterations_cond): Properly
! 	constrain BASE0 + STEP0 cmp BASE1 + STEP1 to
! 	BASE0 + STEP0 - STEP1 cmp BASE1 transform.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR sanitizer/104158
! 	* opt-functions.awk (var_set): Handle EnumBitSet property.
! 	* optc-gen.awk: Don't disallow RejectNegative if EnumBitSet is
! 	specified.
! 	* opts.h (enum cl_enum_var_value): New type.
! 	* opts-common.cc (decode_cmdline_option): Use CLEV_* values.
! 	Handle CLEV_BITSET.
! 	(cmdline_handle_error): Handle CLEV_BITSET.
! 	* opts.cc (test_enum_sets): Also test EnumBitSet requirements.
! 	* doc/options.texi (EnumBitSet): Document.
! 	* common.opt (fsanitize-coverage=): Use EnumBitSet instead of
! 	EnumSet.
! 	(trace-pc, trace-cmp): Drop Set properties.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR sanitizer/104158
! 	* common.opt (flag_sanitize_coverage): Remove Variable entry.
! 	(fsanitize-coverage=): Remove RejectNegative property, add
! 	Var(flag_sanitize_coverage) and EnumSet properties.
! 	(trace-pc): Add Set(1) property.
! 	(trace-cmp): Add Set(2) property.
! 	* opts.cc (common_handle_option): Don't handle
! 	OPT_fsanitize_coverage_.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR sanitizer/104158
! 	* opt-functions.awk (var_set): Handle EnumSet property.
! 	* optc-gen.awk: Don't disallow RejectNegative if EnumSet is
! 	specified.
! 	* opt-read.awk: Handle Set property.
! 	* opts.h (CL_ENUM_SET_SHIFT, CL_ERR_ENUM_SET_ARG): Define.
! 	(struct cl_decoded_option): Mention enum in value description.
! 	Add mask member.
! 	(set_option): Add mask argument defaulted to 0.
! 	* opts.cc (test_enum_sets): New function.
! 	(opts_cc_tests): Call it.
! 	* opts-common.cc (enum_arg_to_value): Change return argument
! 	from bool to int, on success return index into the cl_enum_arg
! 	array, on failure -1.  Add len argument, if non-0, use strncmp
! 	instead of strcmp.
! 	(opt_enum_arg_to_value): Adjust caller.
! 	(decode_cmdline_option): Handle EnumSet represented as
! 	CLVC_ENUM with non-zero var_value.  Initialize decoded->mask.
! 	(decode_cmdline_options_to_array): CLear opt_array[0].mask.
! 	(handle_option): Pass decoded->mask to set_options last argument.
! 	(generate_option): Clear decoded->mask.
! 	(generate_option_input_file): Likewise.
! 	(cmdline_handle_error): Handle CL_ERR_ENUM_SET_ARG.
! 	(set_option): Add mask argument, use it for CLVC_ENUM.
! 	(control_warning_option): Adjust enum_arg_to_value caller.
! 	* doc/options.texi: Document Set and EnumSet properties.
  
! 2022-01-24  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR bootstrap/104170
! 	* config/linux.h (OPTION_GLIBC_P, OPTION_UCLIBC_P,
! 	OPTION_BIONIC_P, OPTION_MUSL_P): Define.
! 	(OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC, OPTION_MUSL): Redefine
! 	using OPTION_*_P macros.
! 	* config/alpha/linux.h (OPTION_GLIBC_P, OPTION_UCLIBC_P,
! 	OPTION_BIONIC_P, OPTION_MUSL_P): Define.
! 	(OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC, OPTION_MUSL): Redefine
! 	using OPTION_*_P macros.
! 	* config/rs6000/linux.h (OPTION_GLIBC_P, OPTION_UCLIBC_P,
! 	OPTION_BIONIC_P, OPTION_MUSL_P): Define.
! 	(OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC, OPTION_MUSL): Redefine
! 	using OPTION_*_P macros.
! 	* config/rs6000/linux64.h (OPTION_GLIBC_P, OPTION_UCLIBC_P,
! 	OPTION_BIONIC_P, OPTION_MUSL_P): Define.
! 	(OPTION_GLIBC, OPTION_UCLIBC, OPTION_BIONIC, OPTION_MUSL): Redefine
! 	using OPTION_*_P macros.
! 	* config/fuchsia.h (OPTION_MUSL_P): Redefine.
! 	* config/glibc-stdint.h (OPTION_MUSL_P): Define if not defined.
! 	* common/config/s390/s390-common.cc (s390_supports_split_stack): Re-add
! 	ATTRIBUTE_UNUSED to opts parameter.  If OPTION_GLIBC_P is defined, use
! 	OPTION_GLIBC_P (opts) as condition, otherwise assume if (false).
! 	* common/config/i386/i386-common.cc (ix86_supports_split_stack): If
! 	OPTION_GLIBC_P is defined use !OPTION_GLIBC_P (opts) as condition,
! 	otherwise assume if (true).
  
! 2022-01-24  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* common/config/riscv/riscv-common.cc (riscv_subset_list::to_string):
! 	Skip zicsr and zifencei if I-ext is 2.0.
  
! 2022-01-24  Jia-Wei Chen  <jiawei@iscas.ac.cn>
  
! 	* config.gcc: Modify default isa_spec version.
  
! 2022-01-24  Jiufu Guo  <guojiufu@linux.ibm.com>
  
! 	PR tree-optimization/102087
! 	* tree-ssa-loop-niter.cc (number_of_iterations_until_wrap):
! 	Correct PLUS result type.
  
! 2022-01-24  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/104188
! 	* config/i386/predicates.md (bcst_mem_operand): Also check mode
! 	of memory broadcast.
  
! 2022-01-23  Andrew Pinski  <apinski@marvell.com>
  
! 	PR target/64821
! 	* config/aarch64/aarch64-builtins.cc
! 	(aarch64_general_gimple_fold_builtin): Handle
! 	__builtin_aarch64_sqrt* and simplify into SQRT internal
! 	function.
  
! 2022-01-22  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR other/104176
! 	* opts-global.cc (handle_common_deferred_options): Quote
! 	--enable-plugin in diagnostics to avoid -Werror=format-diag.
  
! 2022-01-21  Michael Meissner  <meissner@the-meissners.org>
  
! 	PR target/104136
! 	* config/rs6000/rs6000-protos.h (prefixed_xxsplti_p): Delete.
! 	* config/rs6000/rs6000.cc (prefixed_xxsplti_p): Delete.
! 	* config/rs6000/rs6000.md (prefixed attribute): Delete section
! 	that sets the prefixed attribute for xxspltiw, xxspltidp, and
! 	xxsplti32dx instructions.
! 	(movsf_hardfloat): Explicitly set the prefixed attribute
! 	when xxspltiw and xxspltidp instructions are generated.
! 	(mov<mode>_hardfloat32): Likewise.
! 	(mov<mode>_hardfloat64): Likewise.
! 	* config/rs6000/vsx.md (vsx_mov<mode>_64bit): Explicitly set the
! 	prefixed attribute for xxspltiw and xxspltidp instructions.
! 	(vsx_mov<mode>_32bit): Likewise.
  
! 2022-01-21  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR bootstrap/104170
! 	* common/config/i386/i386-common.cc (ix86_supports_split_stack):
! 	Return true only on glibc.
! 	* config/i386/gnu-user-common.h (STACK_CHECK_STATIC_BUILTIN):
! 	Revert commit c163647ffbc.
! 	* config/i386/gnu.h (TARGET_LIBC_PROVIDES_SSP): Likewise.
  
! 2022-01-21  Sören Tempel  <soeren@soeren-tempel.net>
  
! 	* common/config/s390/s390-common.cc (s390_supports_split_stack):
! 	Only support split-stack on glibc targets.
! 	* config/i386/gnu-user-common.h (STACK_CHECK_STATIC_BUILTIN): Ditto.
! 	* config/i386/gnu.h (defined): Ditto.
  
! 2022-01-21  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	* config/rs6000/rs6000-overload.def (VEC_SLDW): Add instances for
! 	vector float and vector double.
  
! 2022-01-21  Bill Seurer  <seurer@gcc.gnu.org>
  
! 	* config/rs6000/rs6000.cc (rs6000_get_function_versions_dispatcher):
! 	Fix mention of ifunc in string.
  
! 2022-01-21  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	PR middle-end/104140
! 	* tree-ssa-math-opts.cc (convert_mult_to_highpart): Check that the
! 	operands of the widening multiplication are either both signed or
! 	both unsigned, and abort the conversion if mismatched.
! 	* doc/generic.texi (WIDEN_MULT_EXPR): Describe expression node.
! 	(MULT_HIGHPART_EXPR): Clarify that operands must have the same
! 	signedness.
! 	* tree.def (MULT_HIGHPART_EXPR): Document both operands must have
! 	integer types with the same precision and signedness.
! 	(WIDEN_MULT_EXPR): Document that operands must have integer types
! 	with the same precision, but possibly differing signedness.
! 	* config/riscv/riscv-c.cc (riscv_cpu_cpp_builtins): Defend against
! 	riscv_current_subset_list returning a NULL pointer (empty list).
  
! 2022-01-21  Vladimir N. Makarov  <vmakarov@redhat.com>
  
! 	PR target/103676
! 	* ira.h (struct target_ira): Add member
! 	x_ira_exclude_class_mode_regs.
! 	(ira_exclude_class_mode_regs): New macro.
! 	* lra.h (lra_create_new_reg): Add arg exclude_start_hard_regs and
! 	move from here ...
! 	* lra-int.h: ... to here.
! 	(lra_create_new_reg_with_unique_value): Add arg
! 	exclude_start_hard_regs.
! 	(class lra_reg): Add member exclude_start_hard_regs.
! 	* lra-assigns.cc (find_hard_regno_for_1): Setup
! 	impossible_start_hard_regs from exclude_start_hard_regs.
! 	* lra-constraints.cc (get_reload_reg): Add arg exclude_start_hard_regs and pass
! 	it lra_create_new_reg[_with_unique_value].
! 	(match_reload): Ditto.
! 	(check_and_process_move): Pass NULL
! 	exclude_start_hard_regs to lra_create_new_reg_with_unique_value.
! 	(goal_alt_exclude_start_hard_regs): New static variable.
! 	(process_addr_reg, simplify_operand_subreg): Pass NULL
! 	exclude_start_hard_regs to lra_create_new_reg_with_unique_value
! 	and get_reload_reg.
! 	(process_alt_operands): Setup goal_alt_exclude_start_hard_regs.
! 	Use this_alternative_exclude_start_hard_regs additionally to find
! 	winning operand alternative.
! 	(base_to_reg, base_plus_disp_to_reg, index_part_to_reg): Pass NULL
! 	exclude_start_hard_regs to lra_create_new_reg.
! 	(process_address_1, emit_inc): Ditto.
! 	(curr_insn_transform): Pass exclude_start_hard_regs value to
! 	lra_create_new_reg, get_reload_reg, match_reload.
! 	(inherit_reload_reg, split_reg): Pass NULL exclude_start_hard_regs
! 	to lra_create_new_reg.
! 	(process_invariant_for_inheritance): Ditto.
! 	* lra-remat.cc (update_scratch_ops): Ditto.
! 	* lra.cc (lra_create_new_reg_with_unique_value): Add arg
! 	exclude_start_hard_regs.  Setup the corresponding member of
! 	lra reg info.
! 	(lra_create_new_reg): Add arg exclude_start_hard_regs and pass it
! 	to lra_create_new_reg_with_unique_value.
! 	(initialize_lra_reg_info_element): Initialize member
! 	exclude_start_hard_regs.
! 	(get_scratch_reg): Pass NULL to lra_create_new_reg.
! 	* ira.cc (setup_prohibited_class_mode_regs): Rename to
! 	setup_prohibited_and_exclude_class_mode_regs and calculate
! 	ira_exclude_class_mode_regs.
  
! 2022-01-21  Martin Liska  <mliska@suse.cz>
  
! 	* configure.ac: Detect ld_is_mold and use it for
! 	comdat_group=yes and gcc_cv_ld_hidden=yes.
! 	* configure: Regenerate.
  
! 2022-01-21  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100089
! 	* tree-vect-slp.cc (vect_slp_region): Reject BB vectorization
! 	of if-converted loops with unvectorized COND_EXPRs for
! 	all but the unlimited cost models.
  
! 2022-01-21  Ard Biesheuvel  <ardb@kernel.org>
  
! 	* config/arm/arm-opts.h (enum stack_protector_guard): New.
! 	* config/arm/arm-protos.h (arm_stack_protect_tls_canary_mem):
  	New.
! 	* config/arm/arm.cc (TARGET_STACK_PROTECT_GUARD): Define.
! 	(arm_option_override_internal): Handle and put in error checks.
! 	for stack protector guard options.
! 	(arm_option_reconfigure_globals): Likewise.
! 	(arm_stack_protect_tls_canary_mem): New.
! 	(arm_stack_protect_guard): New.
! 	* config/arm/arm.md (stack_protect_set): New.
! 	(stack_protect_set_tls): Likewise.
! 	(stack_protect_test): Likewise.
! 	(stack_protect_test_tls): Likewise.
! 	(reload_tp_hard): Likewise.
! 	* config/arm/arm.opt (-mstack-protector-guard): New
! 	(-mstack-protector-guard-offset): New.
! 	* doc/invoke.texi: Document new options.
  
! 2022-01-21  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104156
! 	* tree-ssa-loop-unswitch.cc (tree_unswitch_outer_loop):
! 	Collect and reset debug stmts with out-of-loop uses when
! 	hoisting guards.
! 	(find_loop_guard): Adjust.
! 	(empty_bb_without_guard_p): Likewise.  Ignore debug stmts.
! 	(used_outside_loop_p): Push debug uses to a vector of
! 	debug stmts to reset.
! 	(hoist_guard): Adjust -fopt-info category.
  
! 2022-01-21  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104152
! 	* tree-vect-slp.cc (vect_build_slp_tree_2): Add missing
! 	can_duplicate_and_interleave_p check.
  
! 2022-01-21  Jakub Jelinek  <jakub@redhat.com>
  
! 	* gimple-ssa-warn-access.cc (pass_waccess::warn_invalid_pointer):
! 	Avoid passing var to warning_at when the format string doesn't
! 	refer to it.
  
! 2022-01-21  Aldy Hernandez  <aldyh@redhat.com>
  
! 	PR tree-optimization/103721
! 	* gimple-range-path.cc
! 	(path_range_query::relations_may_be_invalidated): New.
! 	(path_range_query::compute_ranges_in_block): Reset relations if
! 	they may be invalidated.
! 	(path_range_query::maybe_register_phi_relation): Exit if relations
! 	may be invalidated on incoming edge.
! 	(path_range_query::compute_phi_relations): Pass incoming PHI edge
! 	to maybe_register_phi_relation.
! 	* gimple-range-path.h (relations_may_be_invalidated): New.
! 	(maybe_register_phi_relation): Pass edge instead of tree.
! 	* tree-ssa-threadbackward.cc (back_threader::back_threader):
! 	Mark DFS edges.
! 	* value-relation.cc (path_oracle::path_oracle): Call
! 	mark_dfs_back_edges.
! 	(path_oracle::register_relation): Add SSA names to m_registered
! 	bitmap.
! 	(path_oracle::reset_path): Clear m_registered bitmap.
! 	* value-relation.h (path_oracle::set_root_oracle): New.
  
! 2022-01-21  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/102478
! 	* optabs.cc (prepare_cmp_insn): If !can_create_pseudo_p (), don't
! 	force_reg constants and for -fnon-call-exceptions fail if copy_to_reg
! 	would be needed.
  
! 2022-01-20  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/100786
! 	* gimple-fold.cc (get_symbol_constant_value): Only return
! 	values of compatible type to the symbol.
  
! 2022-01-20  Andrew MacLeod  <amacleod@redhat.com>
  
! 	* value-relation.cc (relation_oracle::valid_equivs): Query and add
! 	if valid members of a set.
! 	(equiv_oracle::register_equiv): Call valid_equivs rather than
! 	bitmap direct operations.
! 	(path_oracle::register_equiv): Ditto.
! 	* value-relation.h (relation_oracle::valid_equivs): New prototype.
  
! 2022-01-20  Richard Biener  <rguenther@suse.de>
  
! 	PR target/100784
! 	* config/i386/i386.cc (ix86_gimple_fold_builtin): Check for
! 	LHS before folding __builtin_ia32_shufpd and friends.
  
! 2022-01-20  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* config/arm/crypto.md (aes_op_protect): Allow moves from core
! 	registers and from memory.
! 	(aes_op_protect_misalign_load): New pattern.
! 	(aes_op_protect_neon_vld1v16qi): New pattern.
  
! 2022-01-20  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* config/arm/crypto.md (crypto_<CRYPTO_AESMC:crypto_pattern>_protected):
! 	New pattern.
! 	(aarch32_crypto_aese_fused_protected): Likewise.
! 	(aarch32_crypto_aesd_fused_protected): Likewise.
  
! 2022-01-20  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* config/arm/crypto.md (crypto_<CRYPTO_AES:crypto_pattern>): Convert
! 	to define_expand.  Add mitigation for the Cortex-A AES erratum
! 	when enabled.
! 	(*crypto_<CRYPTO_AES:crypto_pattern>_insn): New pattern, based
! 	on original crypto_<CRYPTO_AES:crypto_pattern> insn.
! 	(aes_op_protect): New pattern.
! 	* config/arm/unspecs.md (unspec): Add UNSPEC_AES_PROTECT.
  
! 2022-01-20  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* config/arm/arm-cpus.in (quirk_aes_1742098): New quirk feature
! 	(ALL_QUIRKS): Add it.
! 	(cortex-a57, cortex-a72): Enable it.
! 	(cortex-a57.cortex-a53, cortex-a72.cortex-a53): Likewise.
! 	* config/arm/arm.opt (mfix-cortex-a57-aes-1742098): New command-line
! 	option.
! 	(mfix-cortex-a72-aes-1655431): New option alias.
! 	* config/arm/arm.cc (arm_option_override): Handle default settings
! 	for AES erratum switch.
! 	* doc/invoke.texi (Arm Options): Document new options.
  
! 2022-01-20  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* config/arm/crypto.md (crypto_<CYRPTO_AES:crypto_pattern>): Use
! 	<crypto_mode> rather than hard-coding the mode.
! 	(crypto_<CRYPTO_AESMC:crypto_pattern>): Fix white space.
! 	(crypto_<CRYPTO_AES:crypto_pattern>): Likewise.
! 	(*aarch32_crypto_aese_fused): Likewise.
! 	(*aarch32_crypto_aesd_fused): Likewise.
! 	(crypto_<CRYPTO_BINARY:crypto_pattern>): Likewise.
! 	(crypto_<CRYPTO_TERNARY:crypto_pattern>): Likewise.
! 	(crypto_sha1h_lb): Likewise.
! 	(crypto_vmullp64): Likewise.
! 	(crypto_<CRYPTO_SELECTING:crypto_pattern>): Likewise.
! 	(crypto_<CRYPTO_SELECTING:crypto_pattern>_lb): Likewise.
  
! 2022-01-20  Richard Earnshaw  <rearnsha@arm.com>
  
! 	* config/arm/crypto.md (crypto_<CRYPTO_AESMC:crypto_pattern>): Add
! 	iterator to pattern name to disambiguate.
! 	(crypto_<CRYPTO_AES:crypto_pattern>): Likewise.
! 	(crypto_<CRYPTO_BINARY:crypto_pattern>): Likewise.
! 	(crypto_<CRYPTO_TERNARY:crypto_pattern>): Likewise.
! 	(crypto_<CRYPTO_SELECTING:crypto_pattern>): Likewise.
! 	(crypto_<CRYPTO_SELECTING:crypto_pattern>_lb): Likewise.
  
! 2022-01-20  Martin Liska  <mliska@suse.cz>
  
! 	PR bootstrap/104135
! 	* emit-rtl.cc (make_insn_raw): Fix -Wformat-diag warnings.
! 	* rtl.cc: Partially disable -Wformat-diag for RTL checking
! 	error messages.
  
! 2022-01-20  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR debug/103874
! 	* dwarf2out.cc (index_rnglists): For !HAVE_AS_LEB128 and
! 	block_num > 0, index entry even if !have_multiple_function_sections.
  
! 2022-01-20  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/103771
! 	* tree-vect-stmts.cc (supportable_narrowing_operation): Enhance
! 	integral mode mask pack by multi steps which takes
! 	vec_pack_sbool_trunc_optab as start when elements number is
! 	less than BITS_PER_UNITS.
  
! 2022-01-20  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104114
! 	* tree-vect-generic.cc (expand_vector_piecewise): Do not diagnose
! 	single element vector decomposition.
  
! 2022-01-19  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	* ifcvt.cc (noce_convert_multiple_sets_1): New function.
! 	(noce_convert_multiple_sets): Call function a second time if we can
! 	improve the first try.
  
! 2022-01-19  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	* ifcvt.cc (cond_exec_get_condition): New parameter to allow getting the
! 	reversed comparison.
! 	(try_emit_cmove_seq): New function to facilitate creating a cmov
! 	sequence.
! 	(noce_convert_multiple_sets): Create two sequences and use the less
! 	expensive one.
  
! 2022-01-19  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	* rtl.h (struct rtx_comparison): New struct that holds an rtx
! 	comparison.
! 	* config/rs6000/rs6000.cc (rs6000_emit_minmax): Use struct instead of
! 	single parameters.
! 	(rs6000_emit_swsqrt): Likewise.
! 	* expmed.cc (expand_sdiv_pow2): Likewise.
! 	(emit_store_flag): Likewise.
! 	* expr.cc (expand_cond_expr_using_cmove): Likewise.
! 	(expand_expr_real_2): Likewise.
! 	* ifcvt.cc (noce_emit_cmove): Add compare and reversed compare
! 	parameters.
! 	* optabs.cc (emit_conditional_move_1): New function.
! 	(expand_doubleword_shift_condmove): Use struct.
! 	(emit_conditional_move): Use struct and allow to call directly
! 	without going through preparation steps.
! 	* optabs.h (emit_conditional_move): Use struct.
  
! 2022-01-19  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	* ifcvt.cc (bb_ok_for_noce_convert_multiple_sets): Estimate insns costs.
! 	(noce_process_if_block): Use potential costs.
  
! 2022-01-19  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	* ifcvt.cc (noce_convert_multiple_sets): Allow constants.
! 	(bb_ok_for_noce_convert_multiple_sets): Likewise.
  
! 2022-01-19  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	* ifcvt.cc (need_cmov_or_rewire): New function.
! 	(noce_convert_multiple_sets): Call it.
  
! 2022-01-19  David Malcolm  <dmalcolm@redhat.com>
  
! 	* attribs.cc (attribute_c_tests): Rename to...
! 	(attribs_cc_tests): ...this.
! 	* bitmap.cc (bitmap_c_tests): Rename to...
! 	(bitmap_cc_tests): ...this.
! 	* cgraph.cc (cgraph_c_finalize): Rename to...
! 	(cgraph_cc_finalize): ...this.
! 	(cgraph_c_tests): Rename to...
! 	(cgraph_cc_tests): ...this.
! 	* cgraph.h (cgraph_c_finalize): Rename to...
! 	(cgraph_cc_finalize): ...this.
! 	(cgraphunit_c_finalize): Rename to...
! 	(cgraphunit_cc_finalize): ...this.
! 	* cgraphunit.cc (cgraphunit_c_finalize): Rename to...
! 	(cgraphunit_cc_finalize): ...this.
! 	* convert.cc (convert_c_tests): Rename to...
! 	(convert_cc_tests): ...this.
! 	* dbgcnt.cc (dbgcnt_c_tests): Rename to...
! 	(dbgcnt_cc_tests): ...this.
! 	* diagnostic-show-locus.cc (diagnostic_show_locus_c_tests): Rename to...
! 	(diagnostic_show_locus_cc_tests): ...this.
! 	* diagnostic.cc (diagnostic_c_tests): Rename to...
! 	(diagnostic_cc_tests): ...this.
! 	* dumpfile.cc (dumpfile_c_tests): Rename to...
! 	(dumpfile_cc_tests): ...this.
! 	* dwarf2out.cc (dwarf2out_c_finalize): Rename to...
! 	(dwarf2out_cc_finalize): ...this.
! 	* dwarf2out.h (dwarf2out_c_finalize): Rename to...
! 	(dwarf2out_cc_finalize): ...this.
! 	* edit-context.cc (edit_context_c_tests): Rename to...
! 	(edit_context_cc_tests): ...this.
! 	* et-forest.cc (et_forest_c_tests): Rename to...
! 	(et_forest_cc_tests): ...this.
! 	* fibonacci_heap.cc (fibonacci_heap_c_tests): Rename to...
! 	(fibonacci_heap_cc_tests): ...this.
! 	* fold-const.cc (fold_const_c_tests): Rename to...
! 	(fold_const_cc_tests): ...this.
! 	* function-tests.cc (function_tests_c_tests): Rename to...
! 	(function_tests_cc_tests): ...this.
! 	* gcse.cc (gcse_c_finalize): Rename to...
! 	(gcse_cc_finalize): ...this.
! 	* gcse.h (gcse_c_finalize): Rename to...
! 	(gcse_cc_finalize): ...this.
! 	* ggc-tests.cc (ggc_tests_c_tests): Rename to...
! 	(ggc_tests_cc_tests): ...this.
! 	* gimple-ssa-store-merging.cc (store_merging_c_tests): Rename to...
! 	(store_merging_cc_tests): ...this.
! 	* gimple.cc (gimple_c_tests): Rename to...
! 	(gimple_cc_tests): ...this.
! 	* hash-map-tests.cc (hash_map_tests_c_tests): Rename to...
! 	(hash_map_tests_cc_tests): ...this.
! 	* hash-set-tests.cc (hash_set_tests_c_tests): Rename to...
! 	(hash_set_tests_cc_tests): ...this.
! 	* input.cc (input_c_tests): Rename to...
! 	(input_cc_tests): ...this.
! 	* ipa-cp.cc (ipa_cp_c_finalize): Rename to...
! 	(ipa_cp_cc_finalize): ...this.
! 	* ipa-fnsummary.cc (ipa_fnsummary_c_finalize): Rename to...
! 	(ipa_fnsummary_cc_finalize): ...this.
! 	* ipa-fnsummary.h (ipa_fnsummary_c_finalize): Rename to...
! 	(ipa_fnsummary_cc_finalize): ...this.
! 	* ipa-modref-tree.cc (ipa_modref_tree_c_tests): Rename to...
! 	(ipa_modref_tree_cc_tests): ...this.
! 	* ipa-modref-tree.h (modref_c_tests): Delete bogus decl.
! 	* ipa-modref.cc (ipa_modref_c_finalize): Rename to...
! 	(ipa_modref_cc_finalize): ...this.
! 	* ipa-modref.h (ipa_modref_c_finalize): Rename to...
! 	(ipa_modref_cc_finalize): ...this.
! 	* ipa-prop.h (ipa_cp_c_finalize): Rename to...
! 	(ipa_cp_cc_finalize): ...this.
! 	* ipa-reference.cc (ipa_reference_c_finalize): Rename to...
! 	(ipa_reference_cc_finalize): ...this.
! 	* ipa-reference.h (ipa_reference_c_finalize): Rename to...
! 	(ipa_reference_cc_finalize): ...this.
! 	* ira-costs.cc (ira_costs_c_finalize): Rename to...
! 	(ira_costs_cc_finalize): ...this.
! 	* ira.h (ira_costs_c_finalize): Rename to...
! 	(ira_costs_cc_finalize): ...this.
! 	* opt-suggestions.cc (opt_proposer_c_tests): Rename to...
! 	(opt_suggestions_cc_tests): ...this.
! 	* opts.cc (opts_c_tests): Rename to...
! 	(opts_cc_tests): ...this.
! 	* predict.cc (predict_c_tests): Rename to...
! 	(predict_cc_tests): ...this.
! 	* pretty-print.cc (pretty_print_c_tests): Rename to...
! 	(pretty_print_cc_tests): ...this.
! 	* read-rtl-function.cc (read_rtl_function_c_tests): Rename to...
! 	(read_rtl_function_cc_tests): ...this.
! 	* rtl-tests.cc (rtl_tests_c_tests): Rename to...
! 	(rtl_tests_cc_tests): ...this.
! 	* sbitmap.cc (sbitmap_c_tests): Rename to...
! 	(sbitmap_cc_tests): ...this.
! 	* selftest-run-tests.cc (selftest::run_tests): Update calls for
! 	_c_ to _cc_ function renamings; fix names of attribs and
! 	opt-suggestions tests.
! 	* selftest.cc (selftest_c_tests): Rename to...
! 	(selftest_cc_tests): ...this.
! 	* selftest.h (attribute_c_tests): Rename to...
! 	(attribs_cc_tests): ...this.
! 	(bitmap_c_tests): Rename to...
! 	(bitmap_cc_tests): ...this.
! 	(cgraph_c_tests): Rename to...
! 	(cgraph_cc_tests): ...this.
! 	(convert_c_tests): Rename to...
! 	(convert_cc_tests): ...this.
! 	(diagnostic_c_tests): Rename to...
! 	(diagnostic_cc_tests): ...this.
! 	(diagnostic_show_locus_c_tests): Rename to...
! 	(diagnostic_show_locus_cc_tests): ...this.
! 	(dumpfile_c_tests): Rename to...
! 	(dumpfile_cc_tests): ...this.
! 	(edit_context_c_tests): Rename to...
! 	(edit_context_cc_tests): ...this.
! 	(et_forest_c_tests): Rename to...
! 	(et_forest_cc_tests): ...this.
! 	(fibonacci_heap_c_tests): Rename to...
! 	(fibonacci_heap_cc_tests): ...this.
! 	(fold_const_c_tests): Rename to...
! 	(fold_const_cc_tests): ...this.
! 	(function_tests_c_tests): Rename to...
! 	(function_tests_cc_tests): ...this.
! 	(ggc_tests_c_tests): Rename to...
! 	(ggc_tests_cc_tests): ...this.
! 	(gimple_c_tests): Rename to...
! 	(gimple_cc_tests): ...this.
! 	(hash_map_tests_c_tests): Rename to...
! 	(hash_map_tests_cc_tests): ...this.
! 	(hash_set_tests_c_tests): Rename to...
! 	(hash_set_tests_cc_tests): ...this.
! 	(input_c_tests): Rename to...
! 	(input_cc_tests): ...this.
! 	(opts_c_tests): Rename to...
! 	(opts_cc_tests): ...this.
! 	(predict_c_tests): Rename to...
! 	(predict_cc_tests): ...this.
! 	(pretty_print_c_tests): Rename to...
! 	(pretty_print_cc_tests): ...this.
! 	(read_rtl_function_c_tests): Rename to...
! 	(read_rtl_function_cc_tests): ...this.
! 	(rtl_tests_c_tests): Rename to...
! 	(rtl_tests_cc_tests): ...this.
! 	(sbitmap_c_tests): Rename to...
! 	(sbitmap_cc_tests): ...this.
! 	(selftest_c_tests): Rename to...
! 	(selftest_cc_tests): ...this.
! 	(simplify_rtx_c_tests): Rename to...
! 	(simplify_rtx_cc_tests): ...this.
! 	(spellcheck_c_tests): Rename to...
! 	(spellcheck_cc_tests): ...this.
! 	(spellcheck_tree_c_tests): Rename to...
! 	(spellcheck_tree_cc_tests): ...this.
! 	(sreal_c_tests): Rename to...
! 	(sreal_cc_tests): ...this.
! 	(store_merging_c_tests): Rename to...
! 	(store_merging_cc_tests): ...this.
! 	(tree_c_tests): Rename to...
! 	(tree_cc_tests): ...this.
! 	(tree_cfg_c_tests): Rename to...
! 	(tree_cfg_cc_tests): ...this.
! 	(typed_splay_tree_c_tests): Rename to...
! 	(typed_splay_tree_cc_tests): ...this.
! 	(vec_c_tests): Rename to...
! 	(vec_cc_tests): ...this.
! 	(vec_perm_indices_c_tests): Rename to...
! 	(vec_perm_indices_cc_tests): ..this.
! 	(opt_proposer_c_tests): Rename to...
! 	(opt_suggestions_cc_tests): ...this.
! 	(dbgcnt_c_tests): Rename to...
! 	(dbgcnt_cc_tests): ...this.
! 	(ipa_modref_tree_c_tests): Rename to...
! 	(ipa_modref_tree_cc_tests): ...this.
! 	* simplify-rtx.cc (simplify_rtx_c_tests): Rename to...
! 	(simplify_rtx_cc_tests): ...this.
! 	* spellcheck-tree.cc (spellcheck_tree_c_tests): Rename to...
! 	(spellcheck_tree_cc_tests): ...this.
! 	* spellcheck.cc (spellcheck_c_tests): Rename to...
! 	(spellcheck_cc_tests): ...this.
! 	* sreal.cc (sreal_c_tests): Rename to...
! 	(sreal_cc_tests): ...this.
! 	* toplev.cc (toplev::finalize): Update calls for _c_ to _cc_
! 	function renamings.
! 	* tree-cfg.cc (tree_cfg_c_tests): Rename to...
! 	(tree_cfg_cc_tests): ...this.
! 	* tree.cc (tree_c_tests): Rename to...
! 	(tree_cc_tests): ...this.
! 	* typed-splay-tree.cc (typed_splay_tree_c_tests): Rename to...
! 	(typed_splay_tree_cc_tests): ...this.
! 	* vec-perm-indices.cc (vec_perm_indices_c_tests): Rename to...
! 	(vec_perm_indices_cc_tests): ...this.
! 	* vec.cc (vec_c_tests): Rename to...
! 	(vec_cc_tests): ...this.
  
! 2022-01-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	PR tree-optimization/103997
! 	* tree-vect-loop.cc (vect_analyze_loop): Fix mode skipping for epilogue
! 	vectorization.
  
! 2022-01-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/102860
! 	* match.pd (x %[fl] y -> x % y): New simplification for
! 	unsigned integral types.
! 	* optabs-tree.cc (optab_for_tree_code): Return unknown_optab
! 	for {CEIL,FLOOR,ROUND}_{DIV,MOD}_EXPR with VECTOR_TYPE.
  
! 2022-01-19  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104112
! 	* tree-vect-loop.cc (vect_find_reusable_accumulator): Check
! 	for required intermediate vector types.
  
! 2022-01-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/rs6000/rs6000.cc (rs6000_machine_from_flags): Add default:.
  
! 2022-01-19  Martin Liska  <mliska@suse.cz>
  
! 	* configure.ac: Remove -Wno-error=format-diag.
! 	* configure: Regenerate.
  
! 2022-01-19  Martin Liska  <mliska@suse.cz>
  
! 	* config/riscv/riscv.cc (riscv_handle_type_attribute):
! 	Update one -Wformat-diag string in warning message.
  
! 2022-01-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR middle-end/104103
! 	* gimple-ssa-warn-access.cc (pass_waccess::check_call): Don't check
! 	.ASAN_MARK calls.
  
! 2022-01-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/89074
! 	* fold-const.cc (address_compare): Consider different STRING_CSTs
! 	with the same lengths that memcmp the same as equal, not different.
  
! 2022-01-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	* config/i386/sse.md (*aes<aeswideklvariant>u*): Use %0 instead of
! 	{%0}.
  
! 2022-01-19  Martin Liska  <mliska@suse.cz>
! 	    Thomas Schwinge  <thomas@codesourcery.com>
  
! 	* config/nvptx/nvptx.cc (nvptx_goacc_validate_dims_1): Update
! 	warning messages.
  
! 2022-01-19  Sebastian Huber  <sebastian.huber@embedded-brains.de>
  
! 	PR target/104090
! 	* config/rs6000/rs6000.cc (rs6000_machine_from_flags): Use also
! 	rs6000_cpu.
  
! 2022-01-19  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/104104
! 	* config/i386/sse.md
! 	(<avx512>_<complexopname>_<mode><maskc_name><round_name>,
! 	avx512fp16_<complexopname>sh_v8hf<mask_scalarc_name><round_scalarcz_name>,
! 	avx512dq_mul<mode>3<mask_name>, <avx2_avx512>_permvar<mode><mask_name>,
! 	avx2_perm<mode>_1<mask_name>, avx512f_perm<mode>_1<mask_name>,
! 	avx512dq_rangep<mode><mask_name><round_saeonly_name>,
! 	avx512dq_ranges<mode><mask_scalar_name><round_saeonly_scalar_name>,
! 	<avx512>_getmant<mode><mask_name><round_saeonly_name>,
! 	avx512f_vgetmant<mode><mask_scalar_name><round_saeonly_scalar_name>):
! 	Use vxorps\t%x0, %x0, %x0 instead of vxorps\t{%x0, %x0, %x0}.
  
! 2022-01-19  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/104069
! 	* gimple-ssa-warn-access.cc (pointers_related_p): Return false for
! 	an unknown result as documented.
  
! 2022-01-18  Andrew Pinski  <apinski@marvell.com>
  
! 	* ipa-split.cc (visit_bb): Fix comment before the
! 	warning/error attribute checking code.
  
! 2022-01-18  David Faust  <david.faust@oracle.com>
  
! 	* config/bpf/coreout.cc (bpf_core_reloc_add): Do not account
! 	for base strtab offset yet as it may change.
! 	(output_asm_btfext_core_reloc): Do so here instead.
! 	(output_btfext_core_sections): Likewise.
  
! 2022-01-18  David Faust  <david.faust@oracle.com>
  
! 	* config/bpf/coreout.cc (output_btfext_header): Account for
! 	4-byte record size in core_relo_len.
! 	(output_btfext_core_sections): Only write record size once.
! 	* config/bpf/coreout.h (btf_ext_section_header): Delete unused
! 	member.
  
! 2022-01-18  Maciej W. Rozycki  <macro@embecosm.com>
  
! 	* common/config/riscv/riscv-common.cc
! 	(riscv_subset_list::parse_multiletter_ext): Move pointer
! 	arithmetic ahead of `free'.
  
! 2022-01-18  Jason Merrill  <jason@redhat.com>
  
! 	PR c++/104007
! 	* gimplify.cc (gimple_push_cleanup): Handle eh_only in conditional
! 	context.
  
! 2022-01-18  Sandra Loosemore  <sandra@codesourcery.com>
  
! 	PR middle-end/103163
! 	* emit-rtl.cc (init_emit_regs): Initialize stack_limit_rtx here...
! 	(init_emit_once): ...not here.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* collect2.cc (scan_libraries): Fix -Wformat-diag issues.
! 	* config/aarch64/aarch64-builtins.cc (aarch64_simd_expand_builtin): Likewise.
! 	* config/arc/arc.md: Likewise.
! 	* config/avr/avr.cc (avr_section_type_flags): Likewise.
! 	* config/bfin/bfin.cc (bfin_option_override): Likewise.
! 	(bfin_handle_longcall_attribute): Likewise.
! 	* config/cris/cris.h (FUNCTION_PROFILER): Likewise.
! 	* config/frv/frv.cc (frv_expand_builtin): Likewise.
! 	* config/ia64/ia64-c.cc (ia64_hpux_handle_builtin_pragma): Likewise.
! 	* config/iq2000/iq2000.cc (save_restore_insns): Likewise.
! 	(iq2000_print_operand_address): Likewise.
! 	(iq2000_print_operand): Likewise.
! 	* config/m32c/m32c-pragma.cc (m32c_pragma_memregs): Likewise.
! 	(m32c_pragma_address): Likewise.
! 	* config/m68k/m68k.cc (m68k_handle_fndecl_attribute): Likewise.
! 	* config/mips/mips.cc (mips_handle_interrupt_attr): Likewise.
! 	(mips_set_compression_mode): Likewise.
! 	* config/mmix/mmix.cc (mmix_function_profiler): Likewise.
! 	(mmix_print_operand): Likewise.
! 	(mmix_output_shiftvalue_op_from_str): Likewise.
! 	(mmix_output_shifted_value): Likewise.
! 	* config/msp430/driver-msp430.cc (msp430_select_hwmult_lib): Likewise.
! 	* config/msp430/msp430.cc (msp430_option_override): Likewise.
! 	(msp430_attr): Likewise.
! 	(msp430_expand_delay_cycles): Likewise.
! 	(msp430_expand_builtin): Likewise.
! 	* config/rs6000/aix73.h: Likewise.
! 	* config/rs6000/rtems.h (INVALID_64BIT): Likewise.
! 	* config/rx/rx.cc (rx_expand_builtin_mvtc): Likewise.
! 	(valid_psw_flag): Likewise.
! 	* config/sh/sh.cc (parse_validate_atomic_model_option): Likewise.
! 	* config/stormy16/stormy16.cc (xstormy16_function_profiler): Likewise.
! 	(xstormy16_expand_builtin_va_start): Likewise.
! 	(xstormy16_handle_below100_attribute): Likewise.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* config/vms/vms-c.cc (vms_pragma_nostandard): Fix -Wformat-diag
! 	warning.
! 	(vms_pragma_standard): Likewise.
! 	(vms_pragma_extern_prefix): Likewise.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* config/xtensa/xtensa.cc (print_operand): Fix warnings.
! 	(print_operand_address): Likewise.
! 	(xtensa_multibss_section_type_flags): Likewise.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* config/rs6000/rs6000-call.cc (rs6000_invalid_builtin): Change
! 	wording of an error message.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* config/v850/v850-c.cc (pop_data_area): Fix -Wformat-diag
! 	warning.
! 	(ghs_pragma_section): Likewise.
! 	(ghs_pragma_interrupt): Likewise.
! 	(ghs_pragma_starttda): Likewise.
! 	(ghs_pragma_startsda): Likewise.
! 	(ghs_pragma_startzda): Likewise.
! 	(ghs_pragma_endtda): Likewise.
! 	(ghs_pragma_endsda): Likewise.
! 	(ghs_pragma_endzda): Likewise.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* config/nds32/nds32-intrinsic.cc (nds32_expand_builtin_impl):
! 	Fix warnings.
! 	* config/nds32/nds32-intrinsic.md: Likewise.
! 	* config/nds32/nds32-isr.cc (nds32_check_isr_attrs_conflict): Likewise.
! 	* config/nds32/nds32.cc (nds32_print_operand): Likewise.
! 	(nds32_insert_attributes): Likewise.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* config/nvptx/nvptx.cc (nvptx_goacc_validate_dims_1): Wrap
! 	keyword.
! 	* config/nvptx/nvptx.md: Remove trailing dot.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* common/config/riscv/riscv-common.cc (riscv_subset_list::add):
! 	Wrap keywords with quotes and remove trailing dots.
! 	(riscv_subset_list::parsing_subset_version): Likewise.
! 	(riscv_subset_list::parse_std_ext): Likewise.
! 	(riscv_subset_list::parse_multiletter_ext): Likewise.
! 	* config/riscv/riscv.cc (riscv_handle_type_attribute): Likewise.
  
! 2022-01-18  Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	* tree-vect-loop.cc (vect_estimate_min_profitable_iters): Pass new
! 	argument suggested_unroll_factor.
! 	(vect_analyze_loop_costing): Likewise.
! 	(_loop_vec_info::_loop_vec_info): Initialize new member
! 	suggested_unroll_factor.
! 	(vect_determine_partial_vectors_and_peeling): Make epilogue of unrolled
! 	main loop use partial vectors.
! 	(vect_analyze_loop_2): Pass and use new argument
! 	suggested_unroll_factor.
! 	(vect_analyze_loop_1): Change to intialize local
! 	suggested_unroll_factor and use it.
! 	(vectorizable_reduction): Don't use single_defuse_cycle when unrolling.
! 	* tree-vectorizer.h (_loop_vec_info::_loop_vec_info): Add new member
! 	suggested_unroll_factor.
! 	(vector_costs::vector_costs): Add new member m_suggested_unroll_factor.
! 	(vector_costs::suggested_unroll_factor): New getter function.
! 	(finish_cost): Set return argument suggested_unroll_factor.
  
! 2022-01-18  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/104038
! 	* doc/invoke.texi (relation-block-limit): New.
! 	* params.opt (relation-block-limit): New.
! 	* value-relation.cc (dom_oracle::register_relation): Check for NULL
! 	record before invoking transitive registery.
! 	(dom_oracle::set_one_relation): Check limit before creating record.
! 	(dom_oracle::register_transitives): Stop when no record created.
! 	* value-relation.h (relation_chain_head::m_num_relations): New.
  
! 2022-01-18  Richard Biener  <rguenther@suse.de>
  
! 	PR ipa/103989
! 	* ipa-inline.cc (inline_small_functions): Do not enqueue call
! 	edges originating in functions compiled with -Og.
  
! 2022-01-18  Richard Biener  <rguenther@suse.de>
  
! 	PR ipa/103989
! 	* passes.def (pass_all_optimizations_g): Remove pass_modref
! 	and pass_local_pure_const.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* config/s390/s390.cc: Fix -Wformat-diag warnings.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* config/s390/s390-c.cc (s390_expand_overloaded_builtin): Wrap
! 	keyword in quotes.
! 	(s390_resolve_overloaded_builtin): Remove trailing dot.
! 	* config/s390/s390.cc (s390_const_operand_ok): Use - for range.
! 	(s390_expand_builtin): Remove trailing dot.
! 	(s390_emit_prologue): Likewise, use semicolon.
! 	(s390_option_override_internal): Update keyword.
! 	* varasm.cc (do_assemble_alias): Wrap keyword in quotes.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* config/rs6000/rs6000-call.cc (rs6000_expand_builtin): Wrap
! 	keywords and use %qs instead of %<%s%>.
  
! 2022-01-18  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103987
! 	* tree-ssa-dse.cc (dse_optimize_call): Properly guard modref
! 	query with a pointer check.
  
! 2022-01-18  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR target/104005
! 	* config/aarch64/aarch64.cc (aarch64_check_consecutive_mems):
! 	When using MEM_EXPR, require the base to be a decl.
  
! 2022-01-18  Richard Biener  <rguenther@suse.de>
  
! 	* cgraph.h (struct cgraph_simd_clone_arg): Re-arrange fields to
! 	avoid padding.
! 	* function.h (struct function): Likewise.
  
! 2022-01-18  Arnaud Charlet  <charlet@adacore.com>
  
! 	* doc/install.texi: Update prerequisites for GNAT
  
! 2022-01-18  Andrew Pinski  <apinski@marvell.com>
  
! 	PR tree-optimization/101941
! 	* ipa-split.cc (visit_bb): Disallow function calls where
! 	the function has either error or warning attribute.
  
! 2022-01-18  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/104064
! 	* tree-vect-data-refs.cc (vect_analyze_data_ref_accesses): Check
! 	DR_INIT fits in a signed HWI, represent the difference from the
! 	first DR in unsigned.
  
! 2022-01-17  Martin Liska  <mliska@suse.cz>
  
! 	* Makefile.in: Rename .c names to .cc.
! 	* config.gcc: Likewise.
! 	* configure: Regenerate. Likewise.
! 	* configure.ac: Likewise.
! 	* gengtype.cc (set_gc_used): Likewise.
! 	(source_dot_c_frul): Likewise.
! 	(source_dot_cc_frul): Likewise.
! 	(struct file_rule_st): Likewise.
! 	(close_output_files): Likewise.
! 	* config/avr/t-avr: Use CXXFLAGS_* and CXX_FOR_BUILD.
  
! 2022-01-17  Martin Liska  <mliska@suse.cz>
  
! 	* Makefile.in: Rename .c names to .cc.
! 	* alias.h: Likewise.
! 	* asan.cc: Likewise.
! 	* auto-profile.h: Likewise.
! 	* basic-block.h (struct basic_block_d): Likewise.
! 	* btfout.cc: Likewise.
! 	* builtins.cc (expand_builtin_longjmp): Likewise.
! 	(validate_arg): Likewise.
! 	(access_ref::offset_bounded): Likewise.
! 	* caller-save.cc (reg_restore_code): Likewise.
! 	(setup_save_areas): Likewise.
! 	* calls.cc (initialize_argument_information): Likewise.
! 	(expand_call): Likewise.
! 	(emit_library_call_value_1): Likewise.
! 	* cfg-flags.def (RTL): Likewise.
! 	(SIBCALL): Likewise.
! 	(CAN_FALLTHRU): Likewise.
! 	* cfganal.cc (post_order_compute): Likewise.
! 	* cfgcleanup.cc (try_simplify_condjump): Likewise.
! 	(merge_blocks_move_predecessor_nojumps): Likewise.
! 	(merge_blocks_move_successor_nojumps): Likewise.
! 	(merge_blocks_move): Likewise.
! 	(old_insns_match_p): Likewise.
! 	(try_crossjump_bb): Likewise.
! 	* cfgexpand.cc (expand_gimple_stmt): Likewise.
! 	* cfghooks.cc (split_block_before_cond_jump): Likewise.
! 	(profile_record_check_consistency): Likewise.
! 	* cfghooks.h: Likewise.
! 	* cfgrtl.cc (pass_free_cfg::execute): Likewise.
! 	(rtl_can_merge_blocks): Likewise.
! 	(try_redirect_by_replacing_jump): Likewise.
! 	(make_pass_outof_cfg_layout_mode): Likewise.
! 	(cfg_layout_can_merge_blocks_p): Likewise.
! 	* cgraph.cc (release_function_body): Likewise.
! 	(cgraph_node::get_fun): Likewise.
! 	* cgraph.h (struct cgraph_node): Likewise.
! 	(asmname_hasher::equal): Likewise.
! 	(cgraph_inline_failed_type): Likewise.
! 	(thunk_adjust): Likewise.
! 	(dump_callgraph_transformation): Likewise.
! 	(record_references_in_initializer): Likewise.
! 	(ipa_discover_variable_flags): Likewise.
! 	* cgraphclones.cc (GTY): Likewise.
! 	* cgraphunit.cc (symbol_table::finalize_compilation_unit): Likewise.
! 	* collect-utils.h (GCC_COLLECT_UTILS_H): Likewise.
! 	* collect2-aix.h (GCC_COLLECT2_AIX_H): Likewise.
! 	* collect2.cc (maybe_run_lto_and_relink): Likewise.
! 	* combine-stack-adj.cc: Likewise.
! 	* combine.cc (setup_incoming_promotions): Likewise.
! 	(combine_simplify_rtx): Likewise.
! 	(count_rtxs): Likewise.
! 	* common.opt: Likewise.
! 	* common/config/aarch64/aarch64-common.cc: Likewise.
! 	* common/config/arm/arm-common.cc (arm_asm_auto_mfpu): Likewise.
! 	* common/config/avr/avr-common.cc: Likewise.
! 	* common/config/i386/i386-isas.h (struct _isa_names_table): Likewise.
! 	* conditions.h: Likewise.
! 	* config.gcc: Likewise.
! 	* config/aarch64/aarch64-builtins.cc (aarch64_resolve_overloaded_memtag): Likewise.
! 	* config/aarch64/aarch64-protos.h (aarch64_classify_address): Likewise.
! 	(aarch64_get_extension_string_for_isa_flags): Likewise.
! 	* config/aarch64/aarch64-sve-builtins.cc (function_builder::add_function): Likewise.
! 	* config/aarch64/aarch64.cc (aarch64_regmode_natural_size): Likewise.
! 	(aarch64_sched_first_cycle_multipass_dfa_lookahead): Likewise.
! 	(aarch64_option_valid_attribute_p): Likewise.
! 	(aarch64_short_vector_p): Likewise.
! 	(aarch64_float_const_representable_p): Likewise.
! 	* config/aarch64/aarch64.h (DBX_REGISTER_NUMBER): Likewise.
! 	(ASM_OUTPUT_POOL_EPILOGUE): Likewise.
! 	(GTY): Likewise.
! 	* config/aarch64/cortex-a57-fma-steering.cc: Likewise.
! 	* config/aarch64/driver-aarch64.cc (contains_core_p): Likewise.
! 	* config/aarch64/t-aarch64: Likewise.
! 	* config/aarch64/x-aarch64: Likewise.
! 	* config/aarch64/x-darwin: Likewise.
! 	* config/alpha/alpha-protos.h: Likewise.
! 	* config/alpha/alpha.cc (alpha_scalar_mode_supported_p): Likewise.
! 	* config/alpha/alpha.h (LONG_DOUBLE_TYPE_SIZE): Likewise.
! 	(enum reg_class): Likewise.
! 	* config/alpha/alpha.md: Likewise.
! 	* config/alpha/driver-alpha.cc (AMASK_LOCKPFTCHOK): Likewise.
! 	* config/alpha/x-alpha: Likewise.
! 	* config/arc/arc-protos.h (arc_eh_uses): Likewise.
! 	* config/arc/arc.cc (ARC_OPT): Likewise.
! 	(arc_ccfsm_advance): Likewise.
! 	(arc_arg_partial_bytes): Likewise.
! 	(conditionalize_nonjump): Likewise.
! 	* config/arc/arc.md: Likewise.
! 	* config/arc/builtins.def: Likewise.
! 	* config/arc/t-arc: Likewise.
! 	* config/arm/arm-c.cc (arm_resolve_overloaded_builtin): Likewise.
! 	(arm_pragma_target_parse): Likewise.
! 	* config/arm/arm-protos.h (save_restore_target_globals): Likewise.
! 	(arm_cpu_cpp_builtins): Likewise.
! 	* config/arm/arm.cc (vfp3_const_double_index): Likewise.
! 	(shift_op): Likewise.
! 	(thumb2_final_prescan_insn): Likewise.
! 	(arm_final_prescan_insn): Likewise.
! 	(arm_asm_output_labelref): Likewise.
! 	(arm_small_register_classes_for_mode_p): Likewise.
! 	* config/arm/arm.h: Likewise.
! 	* config/arm/arm.md: Likewise.
! 	* config/arm/driver-arm.cc: Likewise.
! 	* config/arm/symbian.h: Likewise.
! 	* config/arm/t-arm: Likewise.
! 	* config/arm/thumb1.md: Likewise.
! 	* config/arm/x-arm: Likewise.
! 	* config/avr/avr-c.cc (avr_register_target_pragmas): Likewise.
! 	* config/avr/avr-fixed.md: Likewise.
! 	* config/avr/avr-log.cc (avr_log_vadump): Likewise.
! 	* config/avr/avr-mcus.def: Likewise.
! 	* config/avr/avr-modes.def (FRACTIONAL_INT_MODE): Likewise.
! 	* config/avr/avr-passes.def (INSERT_PASS_BEFORE): Likewise.
! 	* config/avr/avr-protos.h (make_avr_pass_casesi): Likewise.
! 	* config/avr/avr.cc (avr_option_override): Likewise.
! 	(avr_build_builtin_va_list): Likewise.
! 	(avr_mode_dependent_address_p): Likewise.
! 	(avr_function_arg_advance): Likewise.
! 	(avr_asm_output_aligned_decl_common): Likewise.
! 	* config/avr/avr.h (RETURN_ADDR_RTX): Likewise.
! 	(SUPPORTS_INIT_PRIORITY): Likewise.
! 	* config/avr/avr.md: Likewise.
! 	* config/avr/builtins.def: Likewise.
! 	* config/avr/gen-avr-mmcu-specs.cc (IN_GEN_AVR_MMCU_TEXI): Likewise.
! 	* config/avr/gen-avr-mmcu-texi.cc (IN_GEN_AVR_MMCU_TEXI): Likewise.
! 	(main): Likewise.
! 	* config/avr/t-avr: Likewise.
! 	* config/bfin/bfin.cc (frame_related_constant_load): Likewise.
! 	* config/bpf/bpf-protos.h (GCC_BPF_PROTOS_H): Likewise.
! 	* config/bpf/bpf.h (enum reg_class): Likewise.
! 	* config/bpf/t-bpf: Likewise.
! 	* config/c6x/c6x-protos.h (GCC_C6X_PROTOS_H): Likewise.
! 	* config/cr16/cr16-protos.h: Likewise.
! 	* config/cris/cris.cc (cris_address_cost): Likewise.
! 	(cris_side_effect_mode_ok): Likewise.
! 	(cris_init_machine_status): Likewise.
! 	(cris_emit_movem_store): Likewise.
! 	* config/cris/cris.h (INDEX_REG_CLASS): Likewise.
! 	(enum reg_class): Likewise.
! 	(struct cum_args): Likewise.
! 	* config/cris/cris.opt: Likewise.
! 	* config/cris/sync.md: Likewise.
! 	* config/csky/csky.cc (csky_expand_prologue): Likewise.
! 	* config/darwin-c.cc: Likewise.
! 	* config/darwin-f.cc: Likewise.
! 	* config/darwin-sections.def (zobj_const_section): Likewise.
! 	* config/darwin.cc (output_objc_section_asm_op): Likewise.
! 	(fprintf): Likewise.
! 	* config/darwin.h (GTY): Likewise.
! 	* config/elfos.h: Likewise.
! 	* config/epiphany/epiphany-sched.md: Likewise.
! 	* config/epiphany/epiphany.cc (epiphany_function_value): Likewise.
! 	* config/epiphany/epiphany.h (GTY): Likewise.
! 	(NO_FUNCTION_CSE): Likewise.
! 	* config/epiphany/mode-switch-use.cc: Likewise.
! 	* config/epiphany/predicates.md: Likewise.
! 	* config/epiphany/t-epiphany: Likewise.
! 	* config/fr30/fr30-protos.h: Likewise.
! 	* config/frv/frv-protos.h: Likewise.
! 	* config/frv/frv.cc (TLS_BIAS): Likewise.
! 	* config/frv/frv.h (ASM_OUTPUT_ALIGNED_LOCAL): Likewise.
! 	* config/ft32/ft32-protos.h: Likewise.
! 	* config/gcn/gcn-hsa.h (ASM_APP_OFF): Likewise.
! 	* config/gcn/gcn.cc (gcn_init_libfuncs): Likewise.
! 	* config/gcn/mkoffload.cc (copy_early_debug_info): Likewise.
! 	* config/gcn/t-gcn-hsa: Likewise.
! 	* config/gcn/t-omp-device: Likewise.
! 	* config/h8300/h8300-protos.h (GCC_H8300_PROTOS_H): Likewise.
! 	(same_cmp_following_p): Likewise.
! 	* config/h8300/h8300.cc (F): Likewise.
! 	* config/h8300/h8300.h (struct cum_arg): Likewise.
! 	(BRANCH_COST): Likewise.
! 	* config/i386/cygming.h (DEFAULT_PCC_STRUCT_RETURN): Likewise.
! 	* config/i386/djgpp.h (TARGET_ASM_LTO_END): Likewise.
! 	* config/i386/dragonfly.h (NO_PROFILE_COUNTERS): Likewise.
! 	* config/i386/driver-i386.cc (detect_caches_intel): Likewise.
! 	* config/i386/freebsd.h (NO_PROFILE_COUNTERS): Likewise.
! 	* config/i386/i386-c.cc (ix86_target_macros): Likewise.
! 	* config/i386/i386-expand.cc (get_mode_wider_vector): Likewise.
! 	* config/i386/i386-options.cc (ix86_set_func_type): Likewise.
! 	* config/i386/i386-protos.h (ix86_extract_perm_from_pool_constant): Likewise.
! 	(ix86_register_pragmas): Likewise.
! 	(ix86_d_has_stdcall_convention): Likewise.
! 	(i386_pe_seh_init_sections): Likewise.
! 	* config/i386/i386.cc (ix86_function_arg_regno_p): Likewise.
! 	(ix86_function_value_regno_p): Likewise.
! 	(ix86_compute_frame_layout): Likewise.
! 	(legitimize_pe_coff_symbol): Likewise.
! 	(output_pic_addr_const): Likewise.
! 	* config/i386/i386.h (defined): Likewise.
! 	(host_detect_local_cpu): Likewise.
! 	(CONSTANT_ADDRESS_P): Likewise.
! 	(DEFAULT_LARGE_SECTION_THRESHOLD): Likewise.
! 	(struct machine_frame_state): Likewise.
! 	* config/i386/i386.md: Likewise.
! 	* config/i386/lynx.h (ASM_OUTPUT_ALIGN): Likewise.
! 	* config/i386/mmx.md: Likewise.
! 	* config/i386/sse.md: Likewise.
! 	* config/i386/t-cygming: Likewise.
! 	* config/i386/t-djgpp: Likewise.
! 	* config/i386/t-gnu-property: Likewise.
! 	* config/i386/t-i386: Likewise.
! 	* config/i386/t-intelmic: Likewise.
! 	* config/i386/t-omp-device: Likewise.
! 	* config/i386/winnt-cxx.cc (i386_pe_type_dllimport_p): Likewise.
! 	(i386_pe_adjust_class_at_definition): Likewise.
! 	* config/i386/winnt.cc (gen_stdcall_or_fastcall_suffix): Likewise.
! 	(i386_pe_mangle_decl_assembler_name): Likewise.
! 	(i386_pe_encode_section_info): Likewise.
! 	* config/i386/x-cygwin: Likewise.
! 	* config/i386/x-darwin: Likewise.
! 	* config/i386/x-i386: Likewise.
! 	* config/i386/x-mingw32: Likewise.
! 	* config/i386/x86-tune-sched-core.cc: Likewise.
! 	* config/i386/x86-tune.def: Likewise.
! 	* config/i386/xm-djgpp.h (STANDARD_STARTFILE_PREFIX_1): Likewise.
! 	* config/ia64/freebsd.h: Likewise.
! 	* config/ia64/hpux.h (REGISTER_TARGET_PRAGMAS): Likewise.
! 	* config/ia64/ia64-protos.h (ia64_except_unwind_info): Likewise.
! 	* config/ia64/ia64.cc (ia64_function_value_regno_p): Likewise.
! 	(ia64_secondary_reload_class): Likewise.
! 	(bundling): Likewise.
! 	* config/ia64/ia64.h: Likewise.
! 	* config/ia64/ia64.md: Likewise.
! 	* config/ia64/predicates.md: Likewise.
! 	* config/ia64/sysv4.h: Likewise.
! 	* config/ia64/t-ia64: Likewise.
! 	* config/iq2000/iq2000.h (FUNCTION_MODE): Likewise.
! 	* config/iq2000/iq2000.md: Likewise.
! 	* config/linux.h (TARGET_HAS_BIONIC): Likewise.
! 	(if): Likewise.
! 	* config/m32c/m32c.cc (m32c_function_needs_enter): Likewise.
! 	* config/m32c/m32c.h (MAX_REGS_PER_ADDRESS): Likewise.
! 	* config/m32c/t-m32c: Likewise.
! 	* config/m32r/m32r-protos.h: Likewise.
! 	* config/m32r/m32r.cc (m32r_print_operand): Likewise.
! 	* config/m32r/m32r.h: Likewise.
! 	* config/m32r/m32r.md: Likewise.
! 	* config/m68k/m68k-isas.def: Likewise.
! 	* config/m68k/m68k-microarchs.def: Likewise.
! 	* config/m68k/m68k-protos.h (strict_low_part_peephole_ok): Likewise.
! 	(m68k_epilogue_uses): Likewise.
! 	* config/m68k/m68k.cc (m68k_call_tls_get_addr): Likewise.
! 	(m68k_sched_adjust_cost): Likewise.
! 	(m68k_sched_md_init): Likewise.
! 	* config/m68k/m68k.h (__transfer_from_trampoline): Likewise.
! 	(enum m68k_function_kind): Likewise.
! 	* config/m68k/m68k.md: Likewise.
! 	* config/m68k/m68kemb.h: Likewise.
! 	* config/m68k/uclinux.h (ENDFILE_SPEC): Likewise.
! 	* config/mcore/mcore-protos.h: Likewise.
! 	* config/mcore/mcore.cc (mcore_expand_insv): Likewise.
! 	(mcore_expand_prolog): Likewise.
! 	* config/mcore/mcore.h (TARGET_MCORE): Likewise.
! 	* config/mcore/mcore.md: Likewise.
! 	* config/microblaze/microblaze-protos.h: Likewise.
! 	* config/microblaze/microblaze.cc (microblaze_legitimate_pic_operand): Likewise.
! 	(microblaze_function_prologue): Likewise.
! 	(microblaze_function_epilogue): Likewise.
! 	(microblaze_select_section): Likewise.
! 	(microblaze_asm_output_mi_thunk): Likewise.
! 	(microblaze_eh_return): Likewise.
! 	* config/microblaze/microblaze.h: Likewise.
! 	* config/microblaze/microblaze.md: Likewise.
! 	* config/microblaze/t-microblaze: Likewise.
! 	* config/mips/driver-native.cc: Likewise.
! 	* config/mips/loongson2ef.md: Likewise.
! 	* config/mips/mips-protos.h (mips_expand_vec_cmp_expr): Likewise.
! 	* config/mips/mips.cc (mips_rtx_costs): Likewise.
! 	(mips_output_filename): Likewise.
! 	(mips_output_function_prologue): Likewise.
! 	(mips_output_function_epilogue): Likewise.
! 	(mips_output_mi_thunk): Likewise.
! 	* config/mips/mips.h: Likewise.
! 	* config/mips/mips.md: Likewise.
! 	* config/mips/t-mips: Likewise.
! 	* config/mips/x-native: Likewise.
! 	* config/mmix/mmix-protos.h: Likewise.
! 	* config/mmix/mmix.cc (mmix_option_override): Likewise.
! 	(mmix_dbx_register_number): Likewise.
! 	(mmix_expand_prologue): Likewise.
! 	* config/mmix/mmix.h: Likewise.
! 	* config/mmix/mmix.md: Likewise.
! 	* config/mmix/predicates.md: Likewise.
! 	* config/mn10300/mn10300.cc (mn10300_symbolic_operand): Likewise.
! 	(mn10300_legitimate_pic_operand_p): Likewise.
! 	* config/mn10300/mn10300.h (enum reg_class): Likewise.
! 	(NO_FUNCTION_CSE): Likewise.
! 	* config/moxie/moxie-protos.h: Likewise.
! 	* config/moxie/uclinux.h (TARGET_LIBC_HAS_FUNCTION): Likewise.
! 	* config/msp430/msp430-devices.cc (extract_devices_dir_from_exec_prefix): Likewise.
! 	* config/msp430/msp430.cc (msp430_gimplify_va_arg_expr): Likewise.
! 	(msp430_incoming_return_addr_rtx): Likewise.
! 	* config/msp430/msp430.h (msp430_get_linker_devices_include_path): Likewise.
! 	* config/msp430/t-msp430: Likewise.
! 	* config/nds32/nds32-cost.cc (nds32_rtx_costs_speed_prefer): Likewise.
! 	(nds32_rtx_costs_size_prefer): Likewise.
! 	(nds32_init_rtx_costs): Likewise.
! 	* config/nds32/nds32-doubleword.md: Likewise.
! 	* config/nds32/nds32.cc (nds32_memory_move_cost): Likewise.
! 	(nds32_builtin_decl): Likewise.
! 	* config/nds32/nds32.h (enum nds32_16bit_address_type): Likewise.
! 	(enum nds32_isr_nested_type): Likewise.
! 	(enum reg_class): Likewise.
! 	* config/nds32/predicates.md: Likewise.
! 	* config/nds32/t-nds32: Likewise.
! 	* config/nios2/nios2.cc (nios2_pragma_target_parse): Likewise.
! 	* config/nvptx/nvptx-protos.h: Likewise.
! 	* config/nvptx/nvptx.cc (nvptx_goacc_expand_var_decl): Likewise.
! 	* config/nvptx/nvptx.h (TARGET_CPU_CPP_BUILTINS): Likewise.
! 	* config/nvptx/t-nvptx: Likewise.
! 	* config/nvptx/t-omp-device: Likewise.
! 	* config/pa/elf.h: Likewise.
! 	* config/pa/pa-linux.h (GLOBAL_ASM_OP): Likewise.
! 	* config/pa/pa-netbsd.h (GLOBAL_ASM_OP): Likewise.
! 	* config/pa/pa-openbsd.h (TARGET_ASM_GLOBALIZE_LABEL): Likewise.
! 	* config/pa/pa-protos.h (pa_eh_return_handler_rtx): Likewise.
! 	(pa_legitimize_reload_address): Likewise.
! 	(pa_can_use_return_insn): Likewise.
! 	* config/pa/pa.cc (mem_shadd_or_shadd_rtx_p): Likewise.
! 	(som_output_text_section_asm_op): Likewise.
! 	* config/pa/pa.h (PROFILE_BEFORE_PROLOGUE): Likewise.
! 	* config/pa/pa.md: Likewise.
! 	* config/pa/som.h: Likewise.
! 	* config/pa/t-pa: Likewise.
! 	* config/pdp11/pdp11.cc (decode_pdp11_d): Likewise.
! 	* config/pdp11/pdp11.h: Likewise.
! 	* config/pdp11/pdp11.md: Likewise.
! 	* config/pdp11/t-pdp11: Likewise.
! 	* config/pru/pru.md: Likewise.
! 	* config/pru/t-pru: Likewise.
! 	* config/riscv/riscv-protos.h (NUM_SYMBOL_TYPES): Likewise.
! 	(riscv_gpr_save_operation_p): Likewise.
! 	(riscv_d_register_target_info): Likewise.
! 	(riscv_init_builtins): Likewise.
! 	* config/riscv/riscv.cc (riscv_output_mi_thunk): Likewise.
! 	* config/riscv/riscv.h (CSW_MAX_OFFSET): Likewise.
! 	* config/riscv/t-riscv: Likewise.
! 	* config/rl78/rl78.cc (rl78_asm_ctor_dtor): Likewise.
! 	* config/rl78/t-rl78: Likewise.
! 	* config/rs6000/aix.h: Likewise.
! 	* config/rs6000/aix71.h (ASM_SPEC_COMMON): Likewise.
! 	* config/rs6000/aix72.h (ASM_SPEC_COMMON): Likewise.
! 	* config/rs6000/aix73.h (ASM_SPEC_COMMON): Likewise.
! 	* config/rs6000/darwin.h (TARGET_ASM_GLOBALIZE_LABEL): Likewise.
! 	* config/rs6000/driver-rs6000.cc: Likewise.
! 	* config/rs6000/freebsd.h: Likewise.
! 	* config/rs6000/freebsd64.h: Likewise.
! 	* config/rs6000/lynx.h (ASM_OUTPUT_ALIGN): Likewise.
! 	* config/rs6000/rbtree.cc: Likewise.
! 	* config/rs6000/rbtree.h: Likewise.
! 	* config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Likewise.
! 	* config/rs6000/rs6000-call.cc (rs6000_invalid_builtin): Likewise.
! 	(rs6000_expand_builtin): Likewise.
! 	(rs6000_init_builtins): Likewise.
! 	* config/rs6000/rs6000-cpus.def: Likewise.
! 	* config/rs6000/rs6000-gen-builtins.cc (write_init_ovld_table): Likewise.
! 	* config/rs6000/rs6000-internal.h (ALTIVEC_REG_BIT): Likewise.
! 	(quad_address_offset_p): Likewise.
! 	* config/rs6000/rs6000-logue.cc (interesting_frame_related_regno): Likewise.
! 	(rs6000_emit_epilogue): Likewise.
! 	* config/rs6000/rs6000-overload.def: Likewise.
! 	* config/rs6000/rs6000-p8swap.cc: Likewise.
! 	* config/rs6000/rs6000-protos.h (GCC_RS6000_PROTOS_H): Likewise.
! 	(rs6000_const_f32_to_i32): Likewise.
! 	* config/rs6000/rs6000.cc (legitimate_lo_sum_address_p): Likewise.
! 	(rs6000_debug_legitimize_address): Likewise.
! 	(rs6000_mode_dependent_address): Likewise.
! 	(rs6000_adjust_priority): Likewise.
! 	(rs6000_c_mode_for_suffix): Likewise.
! 	* config/rs6000/rs6000.h (defined): Likewise.
! 	(LONG_DOUBLE_TYPE_SIZE): Likewise.
! 	* config/rs6000/rs6000.md: Likewise.
! 	* config/rs6000/sysv4.h: Likewise.
! 	* config/rs6000/t-linux: Likewise.
! 	* config/rs6000/t-linux64: Likewise.
! 	* config/rs6000/t-rs6000: Likewise.
! 	* config/rs6000/x-darwin: Likewise.
! 	* config/rs6000/x-darwin64: Likewise.
! 	* config/rs6000/x-rs6000: Likewise.
! 	* config/rs6000/xcoff.h (ASM_OUTPUT_LABELREF): Likewise.
! 	* config/rx/rx.cc (rx_expand_builtin): Likewise.
! 	* config/s390/constraints.md: Likewise.
! 	* config/s390/driver-native.cc: Likewise.
! 	* config/s390/htmxlintrin.h: Likewise.
! 	* config/s390/s390-builtins.def (B_DEF): Likewise.
! 	(OB_DEF_VAR): Likewise.
! 	* config/s390/s390-builtins.h: Likewise.
! 	* config/s390/s390-c.cc: Likewise.
! 	* config/s390/s390-opts.h: Likewise.
! 	* config/s390/s390-protos.h (s390_check_symref_alignment): Likewise.
! 	(s390_register_target_pragmas): Likewise.
! 	* config/s390/s390.cc (s390_init_builtins): Likewise.
! 	(s390_expand_plus_operand): Likewise.
! 	(s390_expand_atomic): Likewise.
! 	(s390_valid_target_attribute_inner_p): Likewise.
! 	* config/s390/s390.h (LONG_DOUBLE_TYPE_SIZE): Likewise.
! 	* config/s390/s390.md: Likewise.
! 	* config/s390/t-s390: Likewise.
! 	* config/s390/vx-builtins.md: Likewise.
! 	* config/s390/x-native: Likewise.
! 	* config/sh/divtab-sh4-300.cc (main): Likewise.
! 	* config/sh/divtab-sh4.cc (main): Likewise.
! 	* config/sh/divtab.cc (main): Likewise.
! 	* config/sh/elf.h: Likewise.
! 	* config/sh/sh-protos.h (sh_fsca_int2sf): Likewise.
! 	* config/sh/sh.cc (SYMBOL_FLAG_FUNCVEC_FUNCTION): Likewise.
! 	(sh_struct_value_rtx): Likewise.
! 	(sh_remove_reg_dead_or_unused_notes): Likewise.
! 	* config/sh/sh.h (MIN_UNITS_PER_WORD): Likewise.
! 	* config/sh/t-sh: Likewise.
! 	* config/sol2-protos.h (solaris_override_options): Likewise.
! 	* config/sol2.h: Likewise.
! 	* config/sparc/driver-sparc.cc: Likewise.
! 	* config/sparc/freebsd.h: Likewise.
! 	* config/sparc/sparc-protos.h (make_pass_work_around_errata): Likewise.
! 	* config/sparc/sparc.cc (sparc_output_mi_thunk): Likewise.
! 	(sparc_asan_shadow_offset): Likewise.
! 	* config/sparc/sparc.h: Likewise.
! 	* config/sparc/sparc.md: Likewise.
! 	* config/sparc/t-sparc: Likewise.
! 	* config/sparc/x-sparc: Likewise.
! 	* config/stormy16/stormy16.cc (xstormy16_mode_dependent_address_p): Likewise.
! 	* config/t-darwin: Likewise.
! 	* config/t-dragonfly: Likewise.
! 	* config/t-freebsd: Likewise.
! 	* config/t-glibc: Likewise.
! 	* config/t-linux: Likewise.
! 	* config/t-netbsd: Likewise.
! 	* config/t-openbsd: Likewise.
! 	* config/t-pnt16-warn: Likewise.
! 	* config/t-sol2: Likewise.
! 	* config/t-vxworks: Likewise.
! 	* config/t-winnt: Likewise.
! 	* config/tilegx/t-tilegx: Likewise.
! 	* config/tilegx/tilegx-c.cc: Likewise.
! 	* config/tilegx/tilegx-protos.h (tilegx_function_profiler): Likewise.
! 	* config/tilegx/tilegx.md: Likewise.
! 	* config/tilepro/t-tilepro: Likewise.
! 	* config/tilepro/tilepro-c.cc: Likewise.
! 	* config/v850/t-v850: Likewise.
! 	* config/v850/v850-protos.h: Likewise.
! 	* config/v850/v850.cc (F): Likewise.
! 	* config/v850/v850.h (enum reg_class): Likewise.
! 	(SLOW_BYTE_ACCESS): Likewise.
! 	* config/vax/vax.cc (vax_mode_dependent_address_p): Likewise.
! 	* config/vax/vax.h (enum reg_class): Likewise.
! 	* config/vax/vax.md: Likewise.
! 	* config/visium/visium.cc (visium_legitimate_address_p): Likewise.
! 	* config/visium/visium.h: Likewise.
! 	* config/vms/t-vms: Likewise.
! 	* config/vms/vms-crtlmap.map: Likewise.
! 	* config/vms/vms-protos.h (vms_c_get_vms_ver): Likewise.
! 	* config/vx-common.h: Likewise.
! 	* config/x-darwin: Likewise.
! 	* config/x-hpux: Likewise.
! 	* config/x-linux: Likewise.
! 	* config/x-netbsd: Likewise.
! 	* config/x-openbsd: Likewise.
! 	* config/x-solaris: Likewise.
! 	* config/xtensa/xtensa-protos.h (xtensa_mem_offset): Likewise.
! 	* config/xtensa/xtensa.cc (xtensa_option_override): Likewise.
! 	* config/xtensa/xtensa.h: Likewise.
! 	* configure.ac: Likewise.
! 	* context.cc: Likewise.
! 	* convert.h: Likewise.
! 	* coretypes.h: Likewise.
! 	* coverage.cc: Likewise.
! 	* coverage.h: Likewise.
! 	* cppdefault.h (struct default_include): Likewise.
! 	* cprop.cc (local_cprop_pass): Likewise.
! 	(one_cprop_pass): Likewise.
! 	* cse.cc (hash_rtx_cb): Likewise.
! 	(fold_rtx): Likewise.
! 	* ctfc.h (ctfc_get_num_vlen_bytes): Likewise.
! 	* data-streamer.h (bp_unpack_var_len_int): Likewise.
! 	(streamer_write_widest_int): Likewise.
! 	* dbgcnt.def: Likewise.
! 	* dbxout.cc (dbxout_early_global_decl): Likewise.
! 	(dbxout_common_check): Likewise.
! 	* dbxout.h: Likewise.
! 	* debug.h (struct gcc_debug_hooks): Likewise.
! 	(dump_go_spec_init): Likewise.
! 	* df-core.cc: Likewise.
! 	* df-scan.cc (df_insn_info_delete): Likewise.
! 	(df_insn_delete): Likewise.
! 	* df.h (debug_df_chain): Likewise.
! 	(can_move_insns_across): Likewise.
! 	* dfp.cc (decimal_from_binary): Likewise.
! 	* diagnostic-color.cc: Likewise.
! 	* diagnostic-event-id.h: Likewise.
! 	* diagnostic-show-locus.cc (test_one_liner_labels): Likewise.
! 	* diagnostic.cc (bt_callback): Likewise.
! 	(num_digits): Likewise.
! 	* doc/avr-mmcu.texi: Likewise.
! 	* doc/cfg.texi: Likewise.
! 	* doc/contrib.texi: Likewise.
! 	* doc/cppinternals.texi: Likewise.
! 	* doc/extend.texi: Likewise.
! 	* doc/generic.texi: Likewise.
! 	* doc/gimple.texi: Likewise.
! 	* doc/gty.texi: Likewise.
! 	* doc/invoke.texi: Likewise.
! 	* doc/loop.texi: Likewise.
! 	* doc/lto.texi: Likewise.
! 	* doc/match-and-simplify.texi: Likewise.
! 	* doc/md.texi: Likewise.
! 	* doc/optinfo.texi: Likewise.
! 	* doc/options.texi: Likewise.
! 	* doc/passes.texi: Likewise.
! 	* doc/plugins.texi: Likewise.
! 	* doc/rtl.texi: Likewise.
! 	* doc/sourcebuild.texi: Likewise.
! 	* doc/tm.texi: Likewise.
! 	* doc/tm.texi.in: Likewise.
! 	* doc/tree-ssa.texi: Likewise.
! 	* dojump.cc (do_jump): Likewise.
! 	* dojump.h: Likewise.
! 	* dumpfile.cc (test_impl_location): Likewise.
! 	(test_capture_of_dump_calls): Likewise.
! 	* dumpfile.h (enum dump_kind): Likewise.
! 	(class dump_location_t): Likewise.
! 	(dump_enabled_p): Likewise.
! 	(enable_rtl_dump_file): Likewise.
! 	(dump_combine_total_stats): Likewise.
! 	* dwarf2asm.cc (dw2_asm_output_delta_uleb128): Likewise.
! 	* dwarf2ctf.h (ctf_debug_finish): Likewise.
! 	* dwarf2out.cc (dwarf2out_begin_prologue): Likewise.
! 	(struct loc_descr_context): Likewise.
! 	(rtl_for_decl_location): Likewise.
! 	(gen_subprogram_die): Likewise.
! 	(gen_label_die): Likewise.
! 	(is_trivial_indirect_ref): Likewise.
! 	(dwarf2out_late_global_decl): Likewise.
! 	(dwarf_file_hasher::hash): Likewise.
! 	(dwarf2out_end_source_file): Likewise.
! 	(dwarf2out_define): Likewise.
! 	(dwarf2out_early_finish): Likewise.
! 	* dwarf2out.h (struct dw_fde_node): Likewise.
! 	(struct dw_discr_list_node): Likewise.
! 	(output_loc_sequence_raw): Likewise.
! 	* emit-rtl.cc (gen_raw_REG): Likewise.
! 	(maybe_set_max_label_num): Likewise.
! 	* emit-rtl.h (struct rtl_data): Likewise.
! 	* errors.cc (internal_error): Likewise.
! 	(trim_filename): Likewise.
! 	* et-forest.cc: Likewise.
! 	* except.cc (init_eh_for_function): Likewise.
! 	* explow.cc (promote_ssa_mode): Likewise.
! 	(get_dynamic_stack_size): Likewise.
! 	* explow.h: Likewise.
! 	* expmed.h: Likewise.
! 	* expr.cc (safe_from_p): Likewise.
! 	(expand_expr_real_2): Likewise.
! 	(expand_expr_real_1): Likewise.
! 	* file-prefix-map.cc (remap_filename): Likewise.
! 	* final.cc (app_enable): Likewise.
! 	(make_pass_compute_alignments): Likewise.
! 	(final_scan_insn_1): Likewise.
! 	(final_scan_insn): Likewise.
! 	* fixed-value.h (fixed_from_string): Likewise.
! 	* flag-types.h (NO_DEBUG): Likewise.
! 	(DWARF2_DEBUG): Likewise.
! 	(VMS_DEBUG): Likewise.
! 	(BTF_DEBUG): Likewise.
! 	(enum ctf_debug_info_levels): Likewise.
! 	* fold-const.cc (const_binop): Likewise.
! 	(fold_binary_loc): Likewise.
! 	(fold_checksum_tree): Likewise.
! 	* fp-test.cc: Likewise.
! 	* function.cc (expand_function_end): Likewise.
! 	* function.h (struct function): Likewise.
! 	* fwprop.cc (should_replace_address): Likewise.
! 	* gcc-main.cc: Likewise.
! 	* gcc-rich-location.h (class gcc_rich_location): Likewise.
! 	* gcc-symtab.h: Likewise.
! 	* gcc.cc (MIN_FATAL_STATUS): Likewise.
! 	(driver_handle_option): Likewise.
! 	(quote_spec_arg): Likewise.
! 	(driver::finalize): Likewise.
! 	* gcc.h (set_input): Likewise.
! 	* gcov-dump.cc: Likewise.
! 	* gcov.cc (solve_flow_graph): Likewise.
! 	* gcse-common.cc: Likewise.
! 	* gcse.cc (make_pass_rtl_hoist): Likewise.
! 	* genattr-common.cc: Likewise.
! 	* genattrtab.cc (min_fn): Likewise.
! 	(write_const_num_delay_slots): Likewise.
! 	* genautomata.cc: Likewise.
! 	* genconditions.cc (write_one_condition): Likewise.
! 	* genconstants.cc: Likewise.
! 	* genemit.cc (gen_exp): Likewise.
! 	* generic-match-head.cc: Likewise.
! 	* genextract.cc: Likewise.
! 	* gengenrtl.cc (always_void_p): Likewise.
! 	* gengtype-parse.cc (gtymarker_opt): Likewise.
! 	* gengtype-state.cc (state_writer::state_writer): Likewise.
! 	(write_state_trailer): Likewise.
! 	(equals_type_number): Likewise.
! 	(read_state): Likewise.
! 	* gengtype.cc (open_base_files): Likewise.
! 	(struct file_rule_st): Likewise.
! 	(header_dot_h_frul): Likewise.
! 	* gengtype.h: Likewise.
! 	* genmatch.cc (main): Likewise.
! 	* genmddeps.cc: Likewise.
! 	* genmodes.cc (emit_mode_inner): Likewise.
! 	(emit_mode_unit_size): Likewise.
! 	* genpeep.cc (gen_peephole): Likewise.
! 	* genpreds.cc (write_tm_preds_h): Likewise.
! 	* genrecog.cc (validate_pattern): Likewise.
! 	(write_header): Likewise.
! 	(main): Likewise.
! 	* gensupport.cc (change_subst_attribute): Likewise.
! 	(traverse_c_tests): Likewise.
! 	(add_predicate): Likewise.
! 	(init_predicate_table): Likewise.
! 	* gensupport.h (struct optab_pattern): Likewise.
! 	(get_num_insn_codes): Likewise.
! 	(maybe_eval_c_test): Likewise.
! 	(struct pred_data): Likewise.
! 	* ggc-internal.h: Likewise.
! 	* gimple-fold.cc (maybe_fold_reference): Likewise.
! 	(get_range_strlen_tree): Likewise.
! 	* gimple-fold.h (gimple_stmt_integer_valued_real_p): Likewise.
! 	* gimple-low.cc: Likewise.
! 	* gimple-match-head.cc (directly_supported_p): Likewise.
! 	* gimple-pretty-print.h: Likewise.
! 	* gimple-ssa-sprintf.cc (format_percent): Likewise.
! 	(adjust_range_for_overflow): Likewise.
! 	* gimple-streamer.h: Likewise.
! 	* gimple.h (struct GTY): Likewise.
! 	(is_gimple_resx): Likewise.
! 	* gimplify.cc (gimplify_expr): Likewise.
! 	(gimplify_init_constructor): Likewise.
! 	(omp_construct_selector_matches): Likewise.
! 	(gimplify_omp_target_update): Likewise.
! 	(gimplify_omp_ordered): Likewise.
! 	(gimplify_va_arg_expr): Likewise.
! 	* graphite-isl-ast-to-gimple.cc (should_copy_to_new_region): Likewise.
! 	* haifa-sched.cc (increase_insn_priority): Likewise.
! 	(try_ready): Likewise.
! 	(sched_create_recovery_edges): Likewise.
! 	* ifcvt.cc (find_if_case_1): Likewise.
! 	(find_if_case_2): Likewise.
! 	* inchash.h: Likewise.
! 	* incpath.cc (add_env_var_paths): Likewise.
! 	* input.cc (dump_location_info): Likewise.
! 	(assert_loceq): Likewise.
! 	(test_lexer_string_locations_concatenation_1): Likewise.
! 	(test_lexer_string_locations_concatenation_2): Likewise.
! 	(test_lexer_string_locations_concatenation_3): Likewise.
! 	* input.h (BUILTINS_LOCATION): Likewise.
! 	(class string_concat_db): Likewise.
! 	* internal-fn.cc (expand_MUL_OVERFLOW): Likewise.
! 	(expand_LOOP_VECTORIZED): Likewise.
! 	* ipa-cp.cc (make_pass_ipa_cp): Likewise.
! 	* ipa-fnsummary.cc (remap_freqcounting_preds_after_dup): Likewise.
! 	(ipa_fn_summary_t::duplicate): Likewise.
! 	(make_pass_ipa_fn_summary): Likewise.
! 	* ipa-fnsummary.h (enum ipa_hints_vals): Likewise.
! 	* ipa-free-lang-data.cc (fld_simplified_type): Likewise.
! 	(free_lang_data_in_decl): Likewise.
! 	* ipa-inline.cc (compute_inlined_call_time): Likewise.
! 	(inline_always_inline_functions): Likewise.
! 	* ipa-inline.h (free_growth_caches): Likewise.
! 	(inline_account_function_p): Likewise.
! 	* ipa-modref.cc (modref_access_analysis::analyze_stmt): Likewise.
! 	(modref_eaf_analysis::analyze_ssa_name): Likewise.
! 	* ipa-param-manipulation.cc (ipa_param_body_adjustments::mark_dead_statements): Likewise.
! 	(ipa_param_body_adjustments::remap_with_debug_expressions): Likewise.
! 	* ipa-prop.cc (ipa_set_node_agg_value_chain): Likewise.
! 	* ipa-prop.h (IPA_UNDESCRIBED_USE): Likewise.
! 	(unadjusted_ptr_and_unit_offset): Likewise.
! 	* ipa-reference.cc (make_pass_ipa_reference): Likewise.
! 	* ipa-reference.h (GCC_IPA_REFERENCE_H): Likewise.
! 	* ipa-split.cc (consider_split): Likewise.
! 	* ipa-sra.cc (isra_read_node_info): Likewise.
! 	* ipa-utils.h (struct ipa_dfs_info): Likewise.
! 	(recursive_call_p): Likewise.
! 	(ipa_make_function_pure): Likewise.
! 	* ira-build.cc (ira_create_allocno): Likewise.
! 	(ira_flattening): Likewise.
! 	* ira-color.cc (do_coloring): Likewise.
! 	(update_curr_costs): Likewise.
! 	* ira-conflicts.cc (process_regs_for_copy): Likewise.
! 	* ira-int.h (struct ira_emit_data): Likewise.
! 	(ira_prohibited_mode_move_regs): Likewise.
! 	(ira_get_dup_out_num): Likewise.
! 	(ira_destroy): Likewise.
! 	(ira_tune_allocno_costs): Likewise.
! 	(ira_implicitly_set_insn_hard_regs): Likewise.
! 	(ira_build_conflicts): Likewise.
! 	(ira_color): Likewise.
! 	* ira-lives.cc (process_bb_node_lives): Likewise.
! 	* ira.cc (class ira_spilled_reg_stack_slot): Likewise.
! 	(setup_uniform_class_p): Likewise.
! 	(def_dominates_uses): Likewise.
! 	* ira.h (ira_nullify_asm_goto): Likewise.
! 	* langhooks.cc (lhd_post_options): Likewise.
! 	* langhooks.h (class substring_loc): Likewise.
! 	(struct lang_hooks_for_tree_inlining): Likewise.
! 	(struct lang_hooks_for_types): Likewise.
! 	(struct lang_hooks): Likewise.
! 	* libfuncs.h (synchronize_libfunc): Likewise.
! 	* loop-doloop.cc (doloop_condition_get): Likewise.
! 	* loop-init.cc (fix_loop_structure): Likewise.
! 	* loop-invariant.cc: Likewise.
! 	* lower-subreg.h: Likewise.
! 	* lra-constraints.cc (curr_insn_transform): Likewise.
! 	* lra-int.h (struct lra_insn_reg): Likewise.
! 	(lra_undo_inheritance): Likewise.
! 	(lra_setup_reload_pseudo_preferenced_hard_reg): Likewise.
! 	(lra_split_hard_reg_for): Likewise.
! 	(lra_coalesce): Likewise.
! 	(lra_final_code_change): Likewise.
! 	* lra-spills.cc (lra_final_code_change): Likewise.
! 	* lra.cc (lra_process_new_insns): Likewise.
! 	* lto-compress.h (struct lto_compression_stream): Likewise.
! 	* lto-streamer-out.cc (DFS::DFS_write_tree_body): Likewise.
! 	(write_symbol): Likewise.
! 	* lto-streamer.h (enum LTO_tags): Likewise.
! 	(lto_value_range_error): Likewise.
! 	(lto_append_block): Likewise.
! 	(lto_streamer_hooks_init): Likewise.
! 	(stream_read_tree_ref): Likewise.
! 	(lto_prepare_function_for_streaming): Likewise.
! 	(select_what_to_stream): Likewise.
! 	(omp_lto_input_declare_variant_alt): Likewise.
! 	(cl_optimization_stream_in): Likewise.
! 	* lto-wrapper.cc (append_compiler_options): Likewise.
! 	* machmode.def: Likewise.
! 	* machmode.h (struct int_n_data_t): Likewise.
! 	* main.cc (main): Likewise.
! 	* match.pd: Likewise.
! 	* omp-builtins.def (BUILT_IN_GOMP_CRITICAL_NAME_END): Likewise.
! 	(BUILT_IN_GOMP_LOOP_ULL_ORDERED_RUNTIME_NEXT): Likewise.
! 	* omp-expand.cc (expand_omp_atomic_fetch_op): Likewise.
! 	(make_pass_expand_omp_ssa): Likewise.
! 	* omp-low.cc (struct omp_context): Likewise.
! 	(struct omp_taskcopy_context): Likewise.
! 	(lower_omp): Likewise.
! 	* omp-oacc-neuter-broadcast.cc (omp_sese_active_worker_call): Likewise.
! 	(mask_name): Likewise.
! 	(omp_sese_dump_pars): Likewise.
! 	(worker_single_simple): Likewise.
! 	* omp-offload.cc (omp_finish_file): Likewise.
! 	(execute_oacc_loop_designation): Likewise.
! 	* optabs-query.cc (lshift_cheap_p): Likewise.
! 	* optc-gen.awk: Likewise.
! 	* optc-save-gen.awk: Likewise.
! 	* optinfo-emit-json.cc (optrecord_json_writer::optrecord_json_writer): Likewise.
! 	* opts-common.cc: Likewise.
! 	* output.h (app_enable): Likewise.
! 	(output_operand_lossage): Likewise.
! 	(insn_current_reference_address): Likewise.
! 	(get_insn_template): Likewise.
! 	(output_quoted_string): Likewise.
! 	* pass_manager.h (struct register_pass_info): Likewise.
! 	* plugin.cc: Likewise.
! 	* plugin.def (PLUGIN_ANALYZER_INIT): Likewise.
! 	* plugin.h (invoke_plugin_callbacks): Likewise.
! 	* pointer-query.cc (handle_mem_ref): Likewise.
! 	* postreload-gcse.cc (alloc_mem): Likewise.
! 	* predict.h (enum prediction): Likewise.
! 	(add_reg_br_prob_note): Likewise.
! 	* prefix.h: Likewise.
! 	* profile.h (get_working_sets): Likewise.
! 	* read-md.cc: Likewise.
! 	* read-md.h (struct mapping): Likewise.
! 	(class md_reader): Likewise.
! 	(class noop_reader): Likewise.
! 	* read-rtl-function.cc (function_reader::create_function): Likewise.
! 	(function_reader::extra_parsing_for_operand_code_0): Likewise.
! 	* read-rtl.cc (initialize_iterators): Likewise.
! 	* real.cc: Likewise.
! 	* real.h (struct real_value): Likewise.
! 	(format_helper::format_helper): Likewise.
! 	(real_hash): Likewise.
! 	(real_can_shorten_arithmetic): Likewise.
! 	* recog.cc (struct target_recog): Likewise.
! 	(offsettable_nonstrict_memref_p): Likewise.
! 	(constrain_operands): Likewise.
! 	* recog.h (MAX_RECOG_ALTERNATIVES): Likewise.
! 	(which_op_alt): Likewise.
! 	(struct insn_gen_fn): Likewise.
! 	* reg-notes.def (REG_NOTE): Likewise.
! 	* reg-stack.cc: Likewise.
! 	* regs.h (reg_is_parm_p): Likewise.
! 	* regset.h: Likewise.
! 	* reload.cc (push_reload): Likewise.
! 	(find_reloads): Likewise.
! 	(find_reloads_address_1): Likewise.
! 	(find_replacement): Likewise.
! 	(refers_to_regno_for_reload_p): Likewise.
! 	(refers_to_mem_for_reload_p): Likewise.
! 	* reload.h (push_reload): Likewise.
! 	(deallocate_reload_reg): Likewise.
! 	* reload1.cc (emit_input_reload_insns): Likewise.
! 	* reorg.cc (relax_delay_slots): Likewise.
! 	* rtl.def (UNKNOWN): Likewise.
! 	(SEQUENCE): Likewise.
! 	(BARRIER): Likewise.
! 	(ASM_OPERANDS): Likewise.
! 	(EQ_ATTR_ALT): Likewise.
! 	* rtl.h (struct GTY): Likewise.
! 	(LABEL_NAME): Likewise.
! 	(LABEL_ALT_ENTRY_P): Likewise.
! 	(SUBREG_BYTE): Likewise.
! 	(get_stack_check_protect): Likewise.
! 	(dump_rtx_statistics): Likewise.
! 	(unwrap_const_vec_duplicate): Likewise.
! 	(subreg_promoted_mode): Likewise.
! 	(gen_lowpart_common): Likewise.
! 	(operand_subword): Likewise.
! 	(immed_wide_int_const): Likewise.
! 	(decide_function_section): Likewise.
! 	(active_insn_p): Likewise.
! 	(delete_related_insns): Likewise.
! 	(try_split): Likewise.
! 	(val_signbit_known_clear_p): Likewise.
! 	(simplifiable_subregs): Likewise.
! 	(set_insn_deleted): Likewise.
! 	(subreg_get_info): Likewise.
! 	(remove_free_EXPR_LIST_node): Likewise.
! 	(finish_subregs_of_mode): Likewise.
! 	(get_mem_attrs): Likewise.
! 	(lookup_constant_def): Likewise.
! 	(rtx_to_tree_code): Likewise.
! 	(hash_rtx): Likewise.
! 	(condjump_in_parallel_p): Likewise.
! 	(validate_subreg): Likewise.
! 	(make_compound_operation): Likewise.
! 	(schedule_ebbs): Likewise.
! 	(print_inline_rtx): Likewise.
! 	(fixup_args_size_notes): Likewise.
! 	(expand_dec): Likewise.
! 	(prepare_copy_insn): Likewise.
! 	(mark_elimination): Likewise.
! 	(valid_mode_changes_for_regno): Likewise.
! 	(make_debug_expr_from_rtl): Likewise.
! 	(delete_vta_debug_insns): Likewise.
! 	(simplify_using_condition): Likewise.
! 	(set_insn_locations): Likewise.
! 	(fatal_insn_not_found): Likewise.
! 	(word_register_operation_p): Likewise.
! 	* rtlanal.cc (get_call_fndecl): Likewise.
! 	(side_effects_p): Likewise.
! 	(subreg_nregs): Likewise.
! 	(rtx_cost): Likewise.
! 	(canonicalize_condition): Likewise.
! 	* rtlanal.h (rtx_properties::try_to_add_note): Likewise.
! 	* run-rtl-passes.cc (run_rtl_passes): Likewise.
! 	* sanitizer.def (BUILT_IN_ASAN_VERSION_MISMATCH_CHECK): Likewise.
! 	* sched-deps.cc (add_dependence_1): Likewise.
! 	* sched-ebb.cc (begin_move_insn): Likewise.
! 	(add_deps_for_risky_insns): Likewise.
! 	(advance_target_bb): Likewise.
! 	* sched-int.h (reemit_notes): Likewise.
! 	(struct _haifa_insn_data): Likewise.
! 	(HID): Likewise.
! 	(DEP_CANCELLED): Likewise.
! 	(debug_ds): Likewise.
! 	(number_in_ready): Likewise.
! 	(schedule_ebbs_finish): Likewise.
! 	(find_modifiable_mems): Likewise.
! 	* sched-rgn.cc (debug_rgn_dependencies): Likewise.
! 	* sel-sched-dump.cc (dump_lv_set): Likewise.
! 	* sel-sched-dump.h: Likewise.
! 	* sel-sched-ir.cc (sel_insn_rtx_cost): Likewise.
! 	(setup_id_reg_sets): Likewise.
! 	(has_dependence_p): Likewise.
! 	(sel_num_cfg_preds_gt_1): Likewise.
! 	(bb_ends_ebb_p): Likewise.
! 	* sel-sched-ir.h (struct _list_node): Likewise.
! 	(struct idata_def): Likewise.
! 	(bb_next_bb): Likewise.
! 	* sel-sched.cc (vinsn_writes_one_of_regs_p): Likewise.
! 	(choose_best_pseudo_reg): Likewise.
! 	(verify_target_availability): Likewise.
! 	(can_speculate_dep_p): Likewise.
! 	(sel_rank_for_schedule): Likewise.
! 	* selftest-run-tests.cc (selftest::run_tests): Likewise.
! 	* selftest.h (class auto_fix_quotes): Likewise.
! 	* shrink-wrap.cc (handle_simple_exit): Likewise.
! 	* shrink-wrap.h: Likewise.
! 	* simplify-rtx.cc (simplify_context::simplify_associative_operation): Likewise.
! 	(simplify_context::simplify_gen_vec_select): Likewise.
! 	* spellcheck-tree.h: Likewise.
! 	* spellcheck.h: Likewise.
! 	* statistics.h (struct function): Likewise.
! 	* stmt.cc (conditional_probability): Likewise.
! 	* stmt.h: Likewise.
! 	* stor-layout.h: Likewise.
! 	* streamer-hooks.h: Likewise.
! 	* stringpool.h: Likewise.
! 	* symtab.cc (symbol_table::change_decl_assembler_name): Likewise.
! 	* target.def (HOOK_VECTOR_END): Likewise.
! 	(type.): Likewise.
! 	* target.h (union cumulative_args_t): Likewise.
! 	(by_pieces_ninsns): Likewise.
! 	(class predefined_function_abi): Likewise.
! 	* targhooks.cc (default_translate_mode_attribute): Likewise.
! 	* timevar.def: Likewise.
! 	* timevar.h (class timer): Likewise.
! 	* toplev.h (enable_rtl_dump_file): Likewise.
! 	* trans-mem.cc (collect_bb2reg): Likewise.
! 	* tree-call-cdce.cc (gen_conditions_for_pow): Likewise.
! 	* tree-cfg.cc (remove_bb): Likewise.
! 	(verify_gimple_debug): Likewise.
! 	(remove_edge_and_dominated_blocks): Likewise.
! 	(push_fndecl): Likewise.
! 	* tree-cfgcleanup.h (GCC_TREE_CFGCLEANUP_H): Likewise.
! 	* tree-complex.cc (expand_complex_multiplication): Likewise.
! 	(expand_complex_div_straight): Likewise.
! 	* tree-core.h (enum tree_index): Likewise.
! 	(enum operand_equal_flag): Likewise.
! 	* tree-eh.cc (honor_protect_cleanup_actions): Likewise.
! 	* tree-if-conv.cc (if_convertible_gimple_assign_stmt_p): Likewise.
! 	* tree-inline.cc (initialize_inlined_parameters): Likewise.
! 	* tree-inline.h (force_value_to_type): Likewise.
! 	* tree-nested.cc (get_chain_decl): Likewise.
! 	(walk_all_functions): Likewise.
! 	* tree-object-size.h: Likewise.
! 	* tree-outof-ssa.cc: Likewise.
! 	* tree-parloops.cc (create_parallel_loop): Likewise.
! 	* tree-pretty-print.cc (print_generic_expr_to_str): Likewise.
! 	(dump_generic_node): Likewise.
! 	* tree-profile.cc (tree_profiling): Likewise.
! 	* tree-sra.cc (maybe_add_sra_candidate): Likewise.
! 	* tree-ssa-address.cc: Likewise.
! 	* tree-ssa-alias.cc: Likewise.
! 	* tree-ssa-alias.h (ao_ref::max_size_known_p): Likewise.
! 	(dump_alias_stats): Likewise.
! 	* tree-ssa-ccp.cc: Likewise.
! 	* tree-ssa-coalesce.h: Likewise.
! 	* tree-ssa-live.cc (remove_unused_scope_block_p): Likewise.
! 	* tree-ssa-loop-manip.cc (copy_phi_node_args): Likewise.
! 	* tree-ssa-loop-unswitch.cc: Likewise.
! 	* tree-ssa-math-opts.cc: Likewise.
! 	* tree-ssa-operands.cc (class operands_scanner): Likewise.
! 	* tree-ssa-pre.cc: Likewise.
! 	* tree-ssa-reassoc.cc (optimize_ops_list): Likewise.
! 	(debug_range_entry): Likewise.
! 	* tree-ssa-sccvn.cc (eliminate_dom_walker::eliminate_stmt): Likewise.
! 	* tree-ssa-sccvn.h (TREE_SSA_SCCVN_H): Likewise.
! 	* tree-ssa-scopedtables.cc (add_expr_commutative): Likewise.
! 	(equal_mem_array_ref_p): Likewise.
! 	* tree-ssa-strlen.cc (is_strlen_related_p): Likewise.
! 	* tree-ssa-strlen.h (get_range_strlen_dynamic): Likewise.
! 	* tree-ssa-tail-merge.cc (stmt_local_def): Likewise.
! 	* tree-ssa-ter.h: Likewise.
! 	* tree-ssa-threadupdate.h (enum bb_dom_status): Likewise.
! 	* tree-streamer-in.cc (lto_input_ts_block_tree_pointers): Likewise.
! 	* tree-streamer-out.cc (pack_ts_block_value_fields): Likewise.
! 	(write_ts_block_tree_pointers): Likewise.
! 	* tree-streamer.h (struct streamer_tree_cache_d): Likewise.
! 	(streamer_read_tree_bitfields): Likewise.
! 	(streamer_write_integer_cst): Likewise.
! 	* tree-vect-patterns.cc (apply_binop_and_append_stmt): Likewise.
! 	(vect_synth_mult_by_constant): Likewise.
! 	* tree-vect-stmts.cc (vectorizable_operation): Likewise.
! 	* tree-vectorizer.cc: Likewise.
! 	* tree-vectorizer.h (class auto_purge_vect_location): Likewise.
! 	(vect_update_inits_of_drs): Likewise.
! 	(vect_get_mask_type_for_stmt): Likewise.
! 	(vect_rgroup_iv_might_wrap_p): Likewise.
! 	(cse_and_gimplify_to_preheader): Likewise.
! 	(vect_free_slp_tree): Likewise.
! 	(vect_pattern_recog): Likewise.
! 	(vect_stmt_dominates_stmt_p): Likewise.
! 	* tree.cc (initialize_tree_contains_struct): Likewise.
! 	(need_assembler_name_p): Likewise.
! 	(type_with_interoperable_signedness): Likewise.
! 	* tree.def (SWITCH_EXPR): Likewise.
! 	* tree.h (TYPE_SYMTAB_ADDRESS): Likewise.
! 	(poly_int_tree_p): Likewise.
! 	(inlined_function_outer_scope_p): Likewise.
! 	(tree_code_for_canonical_type_merging): Likewise.
! 	* value-prof.cc: Likewise.
! 	* value-prof.h (get_nth_most_common_value): Likewise.
! 	(find_func_by_profile_id): Likewise.
! 	* value-range.cc (vrp_operand_equal_p): Likewise.
! 	* value-range.h: Likewise.
! 	* var-tracking.cc: Likewise.
! 	* varasm.cc (default_function_section): Likewise.
! 	(function_section_1): Likewise.
! 	(assemble_variable): Likewise.
! 	(handle_vtv_comdat_section): Likewise.
! 	* vec.h (struct vec_prefix): Likewise.
! 	* vmsdbgout.cc (full_name): Likewise.
! 	* vtable-verify.cc: Likewise.
! 	* vtable-verify.h (struct vtv_graph_node): Likewise.
! 	* xcoffout.cc: Likewise.
! 	* xcoffout.h (DEBUG_SYMS_TEXT): Likewise.
  
! 2022-01-17  Martin Liska  <mliska@suse.cz>
  
! 	* adjust-alignment.c: Moved to...
! 	* adjust-alignment.cc: ...here.
! 	* alias.c: Moved to...
! 	* alias.cc: ...here.
! 	* alloc-pool.c: Moved to...
! 	* alloc-pool.cc: ...here.
! 	* asan.c: Moved to...
! 	* asan.cc: ...here.
! 	* attribs.c: Moved to...
! 	* attribs.cc: ...here.
! 	* auto-inc-dec.c: Moved to...
! 	* auto-inc-dec.cc: ...here.
! 	* auto-profile.c: Moved to...
! 	* auto-profile.cc: ...here.
! 	* bb-reorder.c: Moved to...
! 	* bb-reorder.cc: ...here.
! 	* bitmap.c: Moved to...
! 	* bitmap.cc: ...here.
! 	* btfout.c: Moved to...
! 	* btfout.cc: ...here.
! 	* builtins.c: Moved to...
! 	* builtins.cc: ...here.
! 	* caller-save.c: Moved to...
! 	* caller-save.cc: ...here.
! 	* calls.c: Moved to...
! 	* calls.cc: ...here.
! 	* ccmp.c: Moved to...
! 	* ccmp.cc: ...here.
! 	* cfg.c: Moved to...
! 	* cfg.cc: ...here.
! 	* cfganal.c: Moved to...
! 	* cfganal.cc: ...here.
! 	* cfgbuild.c: Moved to...
! 	* cfgbuild.cc: ...here.
! 	* cfgcleanup.c: Moved to...
! 	* cfgcleanup.cc: ...here.
! 	* cfgexpand.c: Moved to...
! 	* cfgexpand.cc: ...here.
! 	* cfghooks.c: Moved to...
! 	* cfghooks.cc: ...here.
! 	* cfgloop.c: Moved to...
! 	* cfgloop.cc: ...here.
! 	* cfgloopanal.c: Moved to...
! 	* cfgloopanal.cc: ...here.
! 	* cfgloopmanip.c: Moved to...
! 	* cfgloopmanip.cc: ...here.
! 	* cfgrtl.c: Moved to...
! 	* cfgrtl.cc: ...here.
! 	* cgraph.c: Moved to...
! 	* cgraph.cc: ...here.
! 	* cgraphbuild.c: Moved to...
! 	* cgraphbuild.cc: ...here.
! 	* cgraphclones.c: Moved to...
! 	* cgraphclones.cc: ...here.
! 	* cgraphunit.c: Moved to...
! 	* cgraphunit.cc: ...here.
! 	* collect-utils.c: Moved to...
! 	* collect-utils.cc: ...here.
! 	* collect2-aix.c: Moved to...
! 	* collect2-aix.cc: ...here.
! 	* collect2.c: Moved to...
! 	* collect2.cc: ...here.
! 	* combine-stack-adj.c: Moved to...
! 	* combine-stack-adj.cc: ...here.
! 	* combine.c: Moved to...
! 	* combine.cc: ...here.
! 	* common/common-targhooks.c: Moved to...
! 	* common/common-targhooks.cc: ...here.
! 	* common/config/aarch64/aarch64-common.c: Moved to...
! 	* common/config/aarch64/aarch64-common.cc: ...here.
! 	* common/config/alpha/alpha-common.c: Moved to...
! 	* common/config/alpha/alpha-common.cc: ...here.
! 	* common/config/arc/arc-common.c: Moved to...
! 	* common/config/arc/arc-common.cc: ...here.
! 	* common/config/arm/arm-common.c: Moved to...
! 	* common/config/arm/arm-common.cc: ...here.
! 	* common/config/avr/avr-common.c: Moved to...
! 	* common/config/avr/avr-common.cc: ...here.
! 	* common/config/bfin/bfin-common.c: Moved to...
! 	* common/config/bfin/bfin-common.cc: ...here.
! 	* common/config/bpf/bpf-common.c: Moved to...
! 	* common/config/bpf/bpf-common.cc: ...here.
! 	* common/config/c6x/c6x-common.c: Moved to...
! 	* common/config/c6x/c6x-common.cc: ...here.
! 	* common/config/cr16/cr16-common.c: Moved to...
! 	* common/config/cr16/cr16-common.cc: ...here.
! 	* common/config/cris/cris-common.c: Moved to...
! 	* common/config/cris/cris-common.cc: ...here.
! 	* common/config/csky/csky-common.c: Moved to...
! 	* common/config/csky/csky-common.cc: ...here.
! 	* common/config/default-common.c: Moved to...
! 	* common/config/default-common.cc: ...here.
! 	* common/config/epiphany/epiphany-common.c: Moved to...
! 	* common/config/epiphany/epiphany-common.cc: ...here.
! 	* common/config/fr30/fr30-common.c: Moved to...
! 	* common/config/fr30/fr30-common.cc: ...here.
! 	* common/config/frv/frv-common.c: Moved to...
! 	* common/config/frv/frv-common.cc: ...here.
! 	* common/config/gcn/gcn-common.c: Moved to...
! 	* common/config/gcn/gcn-common.cc: ...here.
! 	* common/config/h8300/h8300-common.c: Moved to...
! 	* common/config/h8300/h8300-common.cc: ...here.
! 	* common/config/i386/i386-common.c: Moved to...
! 	* common/config/i386/i386-common.cc: ...here.
! 	* common/config/ia64/ia64-common.c: Moved to...
! 	* common/config/ia64/ia64-common.cc: ...here.
! 	* common/config/iq2000/iq2000-common.c: Moved to...
! 	* common/config/iq2000/iq2000-common.cc: ...here.
! 	* common/config/lm32/lm32-common.c: Moved to...
! 	* common/config/lm32/lm32-common.cc: ...here.
! 	* common/config/m32r/m32r-common.c: Moved to...
! 	* common/config/m32r/m32r-common.cc: ...here.
! 	* common/config/m68k/m68k-common.c: Moved to...
! 	* common/config/m68k/m68k-common.cc: ...here.
! 	* common/config/mcore/mcore-common.c: Moved to...
! 	* common/config/mcore/mcore-common.cc: ...here.
! 	* common/config/microblaze/microblaze-common.c: Moved to...
! 	* common/config/microblaze/microblaze-common.cc: ...here.
! 	* common/config/mips/mips-common.c: Moved to...
! 	* common/config/mips/mips-common.cc: ...here.
! 	* common/config/mmix/mmix-common.c: Moved to...
! 	* common/config/mmix/mmix-common.cc: ...here.
! 	* common/config/mn10300/mn10300-common.c: Moved to...
! 	* common/config/mn10300/mn10300-common.cc: ...here.
! 	* common/config/msp430/msp430-common.c: Moved to...
! 	* common/config/msp430/msp430-common.cc: ...here.
! 	* common/config/nds32/nds32-common.c: Moved to...
! 	* common/config/nds32/nds32-common.cc: ...here.
! 	* common/config/nios2/nios2-common.c: Moved to...
! 	* common/config/nios2/nios2-common.cc: ...here.
! 	* common/config/nvptx/nvptx-common.c: Moved to...
! 	* common/config/nvptx/nvptx-common.cc: ...here.
! 	* common/config/or1k/or1k-common.c: Moved to...
! 	* common/config/or1k/or1k-common.cc: ...here.
! 	* common/config/pa/pa-common.c: Moved to...
! 	* common/config/pa/pa-common.cc: ...here.
! 	* common/config/pdp11/pdp11-common.c: Moved to...
! 	* common/config/pdp11/pdp11-common.cc: ...here.
! 	* common/config/pru/pru-common.c: Moved to...
! 	* common/config/pru/pru-common.cc: ...here.
! 	* common/config/riscv/riscv-common.c: Moved to...
! 	* common/config/riscv/riscv-common.cc: ...here.
! 	* common/config/rs6000/rs6000-common.c: Moved to...
! 	* common/config/rs6000/rs6000-common.cc: ...here.
! 	* common/config/rx/rx-common.c: Moved to...
! 	* common/config/rx/rx-common.cc: ...here.
! 	* common/config/s390/s390-common.c: Moved to...
! 	* common/config/s390/s390-common.cc: ...here.
! 	* common/config/sh/sh-common.c: Moved to...
! 	* common/config/sh/sh-common.cc: ...here.
! 	* common/config/sparc/sparc-common.c: Moved to...
! 	* common/config/sparc/sparc-common.cc: ...here.
! 	* common/config/tilegx/tilegx-common.c: Moved to...
! 	* common/config/tilegx/tilegx-common.cc: ...here.
! 	* common/config/tilepro/tilepro-common.c: Moved to...
! 	* common/config/tilepro/tilepro-common.cc: ...here.
! 	* common/config/v850/v850-common.c: Moved to...
! 	* common/config/v850/v850-common.cc: ...here.
! 	* common/config/vax/vax-common.c: Moved to...
! 	* common/config/vax/vax-common.cc: ...here.
! 	* common/config/visium/visium-common.c: Moved to...
! 	* common/config/visium/visium-common.cc: ...here.
! 	* common/config/xstormy16/xstormy16-common.c: Moved to...
! 	* common/config/xstormy16/xstormy16-common.cc: ...here.
! 	* common/config/xtensa/xtensa-common.c: Moved to...
! 	* common/config/xtensa/xtensa-common.cc: ...here.
! 	* compare-elim.c: Moved to...
! 	* compare-elim.cc: ...here.
! 	* config/aarch64/aarch64-bti-insert.c: Moved to...
! 	* config/aarch64/aarch64-bti-insert.cc: ...here.
! 	* config/aarch64/aarch64-builtins.c: Moved to...
! 	* config/aarch64/aarch64-builtins.cc: ...here.
! 	* config/aarch64/aarch64-c.c: Moved to...
! 	* config/aarch64/aarch64-c.cc: ...here.
! 	* config/aarch64/aarch64-d.c: Moved to...
! 	* config/aarch64/aarch64-d.cc: ...here.
! 	* config/aarch64/aarch64.c: Moved to...
! 	* config/aarch64/aarch64.cc: ...here.
! 	* config/aarch64/cortex-a57-fma-steering.c: Moved to...
! 	* config/aarch64/cortex-a57-fma-steering.cc: ...here.
! 	* config/aarch64/driver-aarch64.c: Moved to...
! 	* config/aarch64/driver-aarch64.cc: ...here.
! 	* config/aarch64/falkor-tag-collision-avoidance.c: Moved to...
! 	* config/aarch64/falkor-tag-collision-avoidance.cc: ...here.
! 	* config/aarch64/host-aarch64-darwin.c: Moved to...
! 	* config/aarch64/host-aarch64-darwin.cc: ...here.
! 	* config/alpha/alpha.c: Moved to...
! 	* config/alpha/alpha.cc: ...here.
! 	* config/alpha/driver-alpha.c: Moved to...
! 	* config/alpha/driver-alpha.cc: ...here.
! 	* config/arc/arc-c.c: Moved to...
! 	* config/arc/arc-c.cc: ...here.
! 	* config/arc/arc.c: Moved to...
! 	* config/arc/arc.cc: ...here.
! 	* config/arc/driver-arc.c: Moved to...
! 	* config/arc/driver-arc.cc: ...here.
! 	* config/arm/aarch-common.c: Moved to...
! 	* config/arm/aarch-common.cc: ...here.
! 	* config/arm/arm-builtins.c: Moved to...
! 	* config/arm/arm-builtins.cc: ...here.
! 	* config/arm/arm-c.c: Moved to...
! 	* config/arm/arm-c.cc: ...here.
! 	* config/arm/arm-d.c: Moved to...
! 	* config/arm/arm-d.cc: ...here.
! 	* config/arm/arm.c: Moved to...
! 	* config/arm/arm.cc: ...here.
! 	* config/arm/driver-arm.c: Moved to...
! 	* config/arm/driver-arm.cc: ...here.
! 	* config/avr/avr-c.c: Moved to...
! 	* config/avr/avr-c.cc: ...here.
! 	* config/avr/avr-devices.c: Moved to...
! 	* config/avr/avr-devices.cc: ...here.
! 	* config/avr/avr-log.c: Moved to...
! 	* config/avr/avr-log.cc: ...here.
! 	* config/avr/avr.c: Moved to...
! 	* config/avr/avr.cc: ...here.
! 	* config/avr/driver-avr.c: Moved to...
! 	* config/avr/driver-avr.cc: ...here.
! 	* config/avr/gen-avr-mmcu-specs.c: Moved to...
! 	* config/avr/gen-avr-mmcu-specs.cc: ...here.
! 	* config/avr/gen-avr-mmcu-texi.c: Moved to...
! 	* config/avr/gen-avr-mmcu-texi.cc: ...here.
! 	* config/bfin/bfin.c: Moved to...
! 	* config/bfin/bfin.cc: ...here.
! 	* config/bpf/bpf.c: Moved to...
! 	* config/bpf/bpf.cc: ...here.
! 	* config/bpf/coreout.c: Moved to...
! 	* config/bpf/coreout.cc: ...here.
! 	* config/c6x/c6x.c: Moved to...
! 	* config/c6x/c6x.cc: ...here.
! 	* config/cr16/cr16.c: Moved to...
! 	* config/cr16/cr16.cc: ...here.
! 	* config/cris/cris.c: Moved to...
! 	* config/cris/cris.cc: ...here.
! 	* config/csky/csky.c: Moved to...
! 	* config/csky/csky.cc: ...here.
! 	* config/darwin-c.c: Moved to...
! 	* config/darwin-c.cc: ...here.
! 	* config/darwin-d.c: Moved to...
! 	* config/darwin-d.cc: ...here.
! 	* config/darwin-driver.c: Moved to...
! 	* config/darwin-driver.cc: ...here.
! 	* config/darwin-f.c: Moved to...
! 	* config/darwin-f.cc: ...here.
! 	* config/darwin.c: Moved to...
! 	* config/darwin.cc: ...here.
! 	* config/default-c.c: Moved to...
! 	* config/default-c.cc: ...here.
! 	* config/default-d.c: Moved to...
! 	* config/default-d.cc: ...here.
! 	* config/dragonfly-d.c: Moved to...
! 	* config/dragonfly-d.cc: ...here.
! 	* config/epiphany/epiphany.c: Moved to...
! 	* config/epiphany/epiphany.cc: ...here.
! 	* config/epiphany/mode-switch-use.c: Moved to...
! 	* config/epiphany/mode-switch-use.cc: ...here.
! 	* config/epiphany/resolve-sw-modes.c: Moved to...
! 	* config/epiphany/resolve-sw-modes.cc: ...here.
! 	* config/fr30/fr30.c: Moved to...
! 	* config/fr30/fr30.cc: ...here.
! 	* config/freebsd-d.c: Moved to...
! 	* config/freebsd-d.cc: ...here.
! 	* config/frv/frv.c: Moved to...
! 	* config/frv/frv.cc: ...here.
! 	* config/ft32/ft32.c: Moved to...
! 	* config/ft32/ft32.cc: ...here.
! 	* config/gcn/driver-gcn.c: Moved to...
! 	* config/gcn/driver-gcn.cc: ...here.
! 	* config/gcn/gcn-run.c: Moved to...
! 	* config/gcn/gcn-run.cc: ...here.
! 	* config/gcn/gcn-tree.c: Moved to...
! 	* config/gcn/gcn-tree.cc: ...here.
! 	* config/gcn/gcn.c: Moved to...
! 	* config/gcn/gcn.cc: ...here.
! 	* config/gcn/mkoffload.c: Moved to...
! 	* config/gcn/mkoffload.cc: ...here.
! 	* config/glibc-c.c: Moved to...
! 	* config/glibc-c.cc: ...here.
! 	* config/glibc-d.c: Moved to...
! 	* config/glibc-d.cc: ...here.
! 	* config/h8300/h8300.c: Moved to...
! 	* config/h8300/h8300.cc: ...here.
! 	* config/host-darwin.c: Moved to...
! 	* config/host-darwin.cc: ...here.
! 	* config/host-hpux.c: Moved to...
! 	* config/host-hpux.cc: ...here.
! 	* config/host-linux.c: Moved to...
! 	* config/host-linux.cc: ...here.
! 	* config/host-netbsd.c: Moved to...
! 	* config/host-netbsd.cc: ...here.
! 	* config/host-openbsd.c: Moved to...
! 	* config/host-openbsd.cc: ...here.
! 	* config/host-solaris.c: Moved to...
! 	* config/host-solaris.cc: ...here.
! 	* config/i386/djgpp.c: Moved to...
! 	* config/i386/djgpp.cc: ...here.
! 	* config/i386/driver-i386.c: Moved to...
! 	* config/i386/driver-i386.cc: ...here.
! 	* config/i386/driver-mingw32.c: Moved to...
! 	* config/i386/driver-mingw32.cc: ...here.
! 	* config/i386/gnu-property.c: Moved to...
! 	* config/i386/gnu-property.cc: ...here.
! 	* config/i386/host-cygwin.c: Moved to...
! 	* config/i386/host-cygwin.cc: ...here.
! 	* config/i386/host-i386-darwin.c: Moved to...
! 	* config/i386/host-i386-darwin.cc: ...here.
! 	* config/i386/host-mingw32.c: Moved to...
! 	* config/i386/host-mingw32.cc: ...here.
! 	* config/i386/i386-builtins.c: Moved to...
! 	* config/i386/i386-builtins.cc: ...here.
! 	* config/i386/i386-c.c: Moved to...
! 	* config/i386/i386-c.cc: ...here.
! 	* config/i386/i386-d.c: Moved to...
! 	* config/i386/i386-d.cc: ...here.
! 	* config/i386/i386-expand.c: Moved to...
! 	* config/i386/i386-expand.cc: ...here.
! 	* config/i386/i386-features.c: Moved to...
! 	* config/i386/i386-features.cc: ...here.
! 	* config/i386/i386-options.c: Moved to...
! 	* config/i386/i386-options.cc: ...here.
! 	* config/i386/i386.c: Moved to...
! 	* config/i386/i386.cc: ...here.
! 	* config/i386/intelmic-mkoffload.c: Moved to...
! 	* config/i386/intelmic-mkoffload.cc: ...here.
! 	* config/i386/msformat-c.c: Moved to...
! 	* config/i386/msformat-c.cc: ...here.
! 	* config/i386/winnt-cxx.c: Moved to...
! 	* config/i386/winnt-cxx.cc: ...here.
! 	* config/i386/winnt-d.c: Moved to...
! 	* config/i386/winnt-d.cc: ...here.
! 	* config/i386/winnt-stubs.c: Moved to...
! 	* config/i386/winnt-stubs.cc: ...here.
! 	* config/i386/winnt.c: Moved to...
! 	* config/i386/winnt.cc: ...here.
! 	* config/i386/x86-tune-sched-atom.c: Moved to...
! 	* config/i386/x86-tune-sched-atom.cc: ...here.
! 	* config/i386/x86-tune-sched-bd.c: Moved to...
! 	* config/i386/x86-tune-sched-bd.cc: ...here.
! 	* config/i386/x86-tune-sched-core.c: Moved to...
! 	* config/i386/x86-tune-sched-core.cc: ...here.
! 	* config/i386/x86-tune-sched.c: Moved to...
! 	* config/i386/x86-tune-sched.cc: ...here.
! 	* config/ia64/ia64-c.c: Moved to...
! 	* config/ia64/ia64-c.cc: ...here.
! 	* config/ia64/ia64.c: Moved to...
! 	* config/ia64/ia64.cc: ...here.
! 	* config/iq2000/iq2000.c: Moved to...
! 	* config/iq2000/iq2000.cc: ...here.
! 	* config/linux.c: Moved to...
! 	* config/linux.cc: ...here.
! 	* config/lm32/lm32.c: Moved to...
! 	* config/lm32/lm32.cc: ...here.
! 	* config/m32c/m32c-pragma.c: Moved to...
! 	* config/m32c/m32c-pragma.cc: ...here.
! 	* config/m32c/m32c.c: Moved to...
! 	* config/m32c/m32c.cc: ...here.
! 	* config/m32r/m32r.c: Moved to...
! 	* config/m32r/m32r.cc: ...here.
! 	* config/m68k/m68k.c: Moved to...
! 	* config/m68k/m68k.cc: ...here.
! 	* config/mcore/mcore.c: Moved to...
! 	* config/mcore/mcore.cc: ...here.
! 	* config/microblaze/microblaze-c.c: Moved to...
! 	* config/microblaze/microblaze-c.cc: ...here.
! 	* config/microblaze/microblaze.c: Moved to...
! 	* config/microblaze/microblaze.cc: ...here.
! 	* config/mips/driver-native.c: Moved to...
! 	* config/mips/driver-native.cc: ...here.
! 	* config/mips/frame-header-opt.c: Moved to...
! 	* config/mips/frame-header-opt.cc: ...here.
! 	* config/mips/mips-d.c: Moved to...
! 	* config/mips/mips-d.cc: ...here.
! 	* config/mips/mips.c: Moved to...
! 	* config/mips/mips.cc: ...here.
! 	* config/mmix/mmix.c: Moved to...
! 	* config/mmix/mmix.cc: ...here.
! 	* config/mn10300/mn10300.c: Moved to...
! 	* config/mn10300/mn10300.cc: ...here.
! 	* config/moxie/moxie.c: Moved to...
! 	* config/moxie/moxie.cc: ...here.
! 	* config/msp430/driver-msp430.c: Moved to...
! 	* config/msp430/driver-msp430.cc: ...here.
! 	* config/msp430/msp430-c.c: Moved to...
! 	* config/msp430/msp430-c.cc: ...here.
! 	* config/msp430/msp430-devices.c: Moved to...
! 	* config/msp430/msp430-devices.cc: ...here.
! 	* config/msp430/msp430.c: Moved to...
! 	* config/msp430/msp430.cc: ...here.
! 	* config/nds32/nds32-cost.c: Moved to...
! 	* config/nds32/nds32-cost.cc: ...here.
! 	* config/nds32/nds32-fp-as-gp.c: Moved to...
! 	* config/nds32/nds32-fp-as-gp.cc: ...here.
! 	* config/nds32/nds32-intrinsic.c: Moved to...
! 	* config/nds32/nds32-intrinsic.cc: ...here.
! 	* config/nds32/nds32-isr.c: Moved to...
! 	* config/nds32/nds32-isr.cc: ...here.
! 	* config/nds32/nds32-md-auxiliary.c: Moved to...
! 	* config/nds32/nds32-md-auxiliary.cc: ...here.
! 	* config/nds32/nds32-memory-manipulation.c: Moved to...
! 	* config/nds32/nds32-memory-manipulation.cc: ...here.
! 	* config/nds32/nds32-pipelines-auxiliary.c: Moved to...
! 	* config/nds32/nds32-pipelines-auxiliary.cc: ...here.
! 	* config/nds32/nds32-predicates.c: Moved to...
! 	* config/nds32/nds32-predicates.cc: ...here.
! 	* config/nds32/nds32-relax-opt.c: Moved to...
! 	* config/nds32/nds32-relax-opt.cc: ...here.
! 	* config/nds32/nds32-utils.c: Moved to...
! 	* config/nds32/nds32-utils.cc: ...here.
! 	* config/nds32/nds32.c: Moved to...
! 	* config/nds32/nds32.cc: ...here.
! 	* config/netbsd-d.c: Moved to...
! 	* config/netbsd-d.cc: ...here.
! 	* config/netbsd.c: Moved to...
! 	* config/netbsd.cc: ...here.
! 	* config/nios2/nios2.c: Moved to...
! 	* config/nios2/nios2.cc: ...here.
! 	* config/nvptx/mkoffload.c: Moved to...
! 	* config/nvptx/mkoffload.cc: ...here.
! 	* config/nvptx/nvptx-c.c: Moved to...
! 	* config/nvptx/nvptx-c.cc: ...here.
! 	* config/nvptx/nvptx.c: Moved to...
! 	* config/nvptx/nvptx.cc: ...here.
! 	* config/openbsd-d.c: Moved to...
! 	* config/openbsd-d.cc: ...here.
! 	* config/or1k/or1k.c: Moved to...
! 	* config/or1k/or1k.cc: ...here.
! 	* config/pa/pa-d.c: Moved to...
! 	* config/pa/pa-d.cc: ...here.
! 	* config/pa/pa.c: Moved to...
! 	* config/pa/pa.cc: ...here.
! 	* config/pdp11/pdp11.c: Moved to...
! 	* config/pdp11/pdp11.cc: ...here.
! 	* config/pru/pru-passes.c: Moved to...
! 	* config/pru/pru-passes.cc: ...here.
! 	* config/pru/pru-pragma.c: Moved to...
! 	* config/pru/pru-pragma.cc: ...here.
! 	* config/pru/pru.c: Moved to...
! 	* config/pru/pru.cc: ...here.
! 	* config/riscv/riscv-builtins.c: Moved to...
! 	* config/riscv/riscv-builtins.cc: ...here.
! 	* config/riscv/riscv-c.c: Moved to...
! 	* config/riscv/riscv-c.cc: ...here.
! 	* config/riscv/riscv-d.c: Moved to...
! 	* config/riscv/riscv-d.cc: ...here.
! 	* config/riscv/riscv-shorten-memrefs.c: Moved to...
! 	* config/riscv/riscv-shorten-memrefs.cc: ...here.
! 	* config/riscv/riscv-sr.c: Moved to...
! 	* config/riscv/riscv-sr.cc: ...here.
! 	* config/riscv/riscv.c: Moved to...
! 	* config/riscv/riscv.cc: ...here.
! 	* config/rl78/rl78-c.c: Moved to...
! 	* config/rl78/rl78-c.cc: ...here.
! 	* config/rl78/rl78.c: Moved to...
! 	* config/rl78/rl78.cc: ...here.
! 	* config/rs6000/driver-rs6000.c: Moved to...
! 	* config/rs6000/driver-rs6000.cc: ...here.
! 	* config/rs6000/host-darwin.c: Moved to...
! 	* config/rs6000/host-darwin.cc: ...here.
! 	* config/rs6000/host-ppc64-darwin.c: Moved to...
! 	* config/rs6000/host-ppc64-darwin.cc: ...here.
! 	* config/rs6000/rbtree.c: Moved to...
! 	* config/rs6000/rbtree.cc: ...here.
! 	* config/rs6000/rs6000-c.c: Moved to...
! 	* config/rs6000/rs6000-c.cc: ...here.
! 	* config/rs6000/rs6000-call.c: Moved to...
! 	* config/rs6000/rs6000-call.cc: ...here.
! 	* config/rs6000/rs6000-d.c: Moved to...
! 	* config/rs6000/rs6000-d.cc: ...here.
! 	* config/rs6000/rs6000-gen-builtins.c: Moved to...
! 	* config/rs6000/rs6000-gen-builtins.cc: ...here.
! 	* config/rs6000/rs6000-linux.c: Moved to...
! 	* config/rs6000/rs6000-linux.cc: ...here.
! 	* config/rs6000/rs6000-logue.c: Moved to...
! 	* config/rs6000/rs6000-logue.cc: ...here.
! 	* config/rs6000/rs6000-p8swap.c: Moved to...
! 	* config/rs6000/rs6000-p8swap.cc: ...here.
! 	* config/rs6000/rs6000-pcrel-opt.c: Moved to...
! 	* config/rs6000/rs6000-pcrel-opt.cc: ...here.
! 	* config/rs6000/rs6000-string.c: Moved to...
! 	* config/rs6000/rs6000-string.cc: ...here.
! 	* config/rs6000/rs6000.c: Moved to...
! 	* config/rs6000/rs6000.cc: ...here.
! 	* config/rx/rx.c: Moved to...
! 	* config/rx/rx.cc: ...here.
! 	* config/s390/driver-native.c: Moved to...
! 	* config/s390/driver-native.cc: ...here.
! 	* config/s390/s390-c.c: Moved to...
! 	* config/s390/s390-c.cc: ...here.
! 	* config/s390/s390-d.c: Moved to...
! 	* config/s390/s390-d.cc: ...here.
! 	* config/s390/s390.c: Moved to...
! 	* config/s390/s390.cc: ...here.
! 	* config/sh/divtab-sh4-300.c: Moved to...
! 	* config/sh/divtab-sh4-300.cc: ...here.
! 	* config/sh/divtab-sh4.c: Moved to...
! 	* config/sh/divtab-sh4.cc: ...here.
! 	* config/sh/divtab.c: Moved to...
! 	* config/sh/divtab.cc: ...here.
! 	* config/sh/sh-c.c: Moved to...
! 	* config/sh/sh-c.cc: ...here.
! 	* config/sh/sh.c: Moved to...
! 	* config/sh/sh.cc: ...here.
! 	* config/sol2-c.c: Moved to...
! 	* config/sol2-c.cc: ...here.
! 	* config/sol2-cxx.c: Moved to...
! 	* config/sol2-cxx.cc: ...here.
! 	* config/sol2-d.c: Moved to...
! 	* config/sol2-d.cc: ...here.
! 	* config/sol2-stubs.c: Moved to...
! 	* config/sol2-stubs.cc: ...here.
! 	* config/sol2.c: Moved to...
! 	* config/sol2.cc: ...here.
! 	* config/sparc/driver-sparc.c: Moved to...
! 	* config/sparc/driver-sparc.cc: ...here.
! 	* config/sparc/sparc-c.c: Moved to...
! 	* config/sparc/sparc-c.cc: ...here.
! 	* config/sparc/sparc-d.c: Moved to...
! 	* config/sparc/sparc-d.cc: ...here.
! 	* config/sparc/sparc.c: Moved to...
! 	* config/sparc/sparc.cc: ...here.
! 	* config/stormy16/stormy16.c: Moved to...
! 	* config/stormy16/stormy16.cc: ...here.
! 	* config/tilegx/mul-tables.c: Moved to...
! 	* config/tilegx/mul-tables.cc: ...here.
! 	* config/tilegx/tilegx-c.c: Moved to...
! 	* config/tilegx/tilegx-c.cc: ...here.
! 	* config/tilegx/tilegx.c: Moved to...
! 	* config/tilegx/tilegx.cc: ...here.
! 	* config/tilepro/mul-tables.c: Moved to...
! 	* config/tilepro/mul-tables.cc: ...here.
! 	* config/tilepro/tilepro-c.c: Moved to...
! 	* config/tilepro/tilepro-c.cc: ...here.
! 	* config/tilepro/tilepro.c: Moved to...
! 	* config/tilepro/tilepro.cc: ...here.
! 	* config/v850/v850-c.c: Moved to...
! 	* config/v850/v850-c.cc: ...here.
! 	* config/v850/v850.c: Moved to...
! 	* config/v850/v850.cc: ...here.
! 	* config/vax/vax.c: Moved to...
! 	* config/vax/vax.cc: ...here.
! 	* config/visium/visium.c: Moved to...
! 	* config/visium/visium.cc: ...here.
! 	* config/vms/vms-c.c: Moved to...
! 	* config/vms/vms-c.cc: ...here.
! 	* config/vms/vms-f.c: Moved to...
! 	* config/vms/vms-f.cc: ...here.
! 	* config/vms/vms.c: Moved to...
! 	* config/vms/vms.cc: ...here.
! 	* config/vxworks-c.c: Moved to...
! 	* config/vxworks-c.cc: ...here.
! 	* config/vxworks.c: Moved to...
! 	* config/vxworks.cc: ...here.
! 	* config/winnt-c.c: Moved to...
! 	* config/winnt-c.cc: ...here.
! 	* config/xtensa/xtensa.c: Moved to...
! 	* config/xtensa/xtensa.cc: ...here.
! 	* context.c: Moved to...
! 	* context.cc: ...here.
! 	* convert.c: Moved to...
! 	* convert.cc: ...here.
! 	* coverage.c: Moved to...
! 	* coverage.cc: ...here.
! 	* cppbuiltin.c: Moved to...
! 	* cppbuiltin.cc: ...here.
! 	* cppdefault.c: Moved to...
! 	* cppdefault.cc: ...here.
! 	* cprop.c: Moved to...
! 	* cprop.cc: ...here.
! 	* cse.c: Moved to...
! 	* cse.cc: ...here.
! 	* cselib.c: Moved to...
! 	* cselib.cc: ...here.
! 	* ctfc.c: Moved to...
! 	* ctfc.cc: ...here.
! 	* ctfout.c: Moved to...
! 	* ctfout.cc: ...here.
! 	* data-streamer-in.c: Moved to...
! 	* data-streamer-in.cc: ...here.
! 	* data-streamer-out.c: Moved to...
! 	* data-streamer-out.cc: ...here.
! 	* data-streamer.c: Moved to...
! 	* data-streamer.cc: ...here.
! 	* dbgcnt.c: Moved to...
! 	* dbgcnt.cc: ...here.
! 	* dbxout.c: Moved to...
! 	* dbxout.cc: ...here.
! 	* dce.c: Moved to...
! 	* dce.cc: ...here.
! 	* ddg.c: Moved to...
! 	* ddg.cc: ...here.
! 	* debug.c: Moved to...
! 	* debug.cc: ...here.
! 	* df-core.c: Moved to...
! 	* df-core.cc: ...here.
! 	* df-problems.c: Moved to...
! 	* df-problems.cc: ...here.
! 	* df-scan.c: Moved to...
! 	* df-scan.cc: ...here.
! 	* dfp.c: Moved to...
! 	* dfp.cc: ...here.
! 	* diagnostic-color.c: Moved to...
! 	* diagnostic-color.cc: ...here.
! 	* diagnostic-show-locus.c: Moved to...
! 	* diagnostic-show-locus.cc: ...here.
! 	* diagnostic-spec.c: Moved to...
! 	* diagnostic-spec.cc: ...here.
! 	* diagnostic.c: Moved to...
! 	* diagnostic.cc: ...here.
! 	* dojump.c: Moved to...
! 	* dojump.cc: ...here.
! 	* dominance.c: Moved to...
! 	* dominance.cc: ...here.
! 	* domwalk.c: Moved to...
! 	* domwalk.cc: ...here.
! 	* double-int.c: Moved to...
! 	* double-int.cc: ...here.
! 	* dse.c: Moved to...
! 	* dse.cc: ...here.
! 	* dumpfile.c: Moved to...
! 	* dumpfile.cc: ...here.
! 	* dwarf2asm.c: Moved to...
! 	* dwarf2asm.cc: ...here.
! 	* dwarf2cfi.c: Moved to...
! 	* dwarf2cfi.cc: ...here.
! 	* dwarf2ctf.c: Moved to...
! 	* dwarf2ctf.cc: ...here.
! 	* dwarf2out.c: Moved to...
! 	* dwarf2out.cc: ...here.
! 	* early-remat.c: Moved to...
! 	* early-remat.cc: ...here.
! 	* edit-context.c: Moved to...
! 	* edit-context.cc: ...here.
! 	* emit-rtl.c: Moved to...
! 	* emit-rtl.cc: ...here.
! 	* errors.c: Moved to...
! 	* errors.cc: ...here.
! 	* et-forest.c: Moved to...
! 	* et-forest.cc: ...here.
! 	* except.c: Moved to...
! 	* except.cc: ...here.
! 	* explow.c: Moved to...
! 	* explow.cc: ...here.
! 	* expmed.c: Moved to...
! 	* expmed.cc: ...here.
! 	* expr.c: Moved to...
! 	* expr.cc: ...here.
! 	* fibonacci_heap.c: Moved to...
! 	* fibonacci_heap.cc: ...here.
! 	* file-find.c: Moved to...
! 	* file-find.cc: ...here.
! 	* file-prefix-map.c: Moved to...
! 	* file-prefix-map.cc: ...here.
! 	* final.c: Moved to...
! 	* final.cc: ...here.
! 	* fixed-value.c: Moved to...
! 	* fixed-value.cc: ...here.
! 	* fold-const-call.c: Moved to...
! 	* fold-const-call.cc: ...here.
! 	* fold-const.c: Moved to...
! 	* fold-const.cc: ...here.
! 	* fp-test.c: Moved to...
! 	* fp-test.cc: ...here.
! 	* function-tests.c: Moved to...
! 	* function-tests.cc: ...here.
! 	* function.c: Moved to...
! 	* function.cc: ...here.
! 	* fwprop.c: Moved to...
! 	* fwprop.cc: ...here.
! 	* gcc-ar.c: Moved to...
! 	* gcc-ar.cc: ...here.
! 	* gcc-main.c: Moved to...
! 	* gcc-main.cc: ...here.
! 	* gcc-rich-location.c: Moved to...
! 	* gcc-rich-location.cc: ...here.
! 	* gcc.c: Moved to...
! 	* gcc.cc: ...here.
! 	* gcov-dump.c: Moved to...
! 	* gcov-dump.cc: ...here.
! 	* gcov-io.c: Moved to...
! 	* gcov-io.cc: ...here.
! 	* gcov-tool.c: Moved to...
! 	* gcov-tool.cc: ...here.
! 	* gcov.c: Moved to...
! 	* gcov.cc: ...here.
! 	* gcse-common.c: Moved to...
! 	* gcse-common.cc: ...here.
! 	* gcse.c: Moved to...
! 	* gcse.cc: ...here.
! 	* genattr-common.c: Moved to...
! 	* genattr-common.cc: ...here.
! 	* genattr.c: Moved to...
! 	* genattr.cc: ...here.
! 	* genattrtab.c: Moved to...
! 	* genattrtab.cc: ...here.
! 	* genautomata.c: Moved to...
! 	* genautomata.cc: ...here.
! 	* gencfn-macros.c: Moved to...
! 	* gencfn-macros.cc: ...here.
! 	* gencheck.c: Moved to...
! 	* gencheck.cc: ...here.
! 	* genchecksum.c: Moved to...
! 	* genchecksum.cc: ...here.
! 	* gencodes.c: Moved to...
! 	* gencodes.cc: ...here.
! 	* genconditions.c: Moved to...
! 	* genconditions.cc: ...here.
! 	* genconfig.c: Moved to...
! 	* genconfig.cc: ...here.
! 	* genconstants.c: Moved to...
! 	* genconstants.cc: ...here.
! 	* genemit.c: Moved to...
! 	* genemit.cc: ...here.
! 	* genenums.c: Moved to...
! 	* genenums.cc: ...here.
! 	* generic-match-head.c: Moved to...
! 	* generic-match-head.cc: ...here.
! 	* genextract.c: Moved to...
! 	* genextract.cc: ...here.
! 	* genflags.c: Moved to...
! 	* genflags.cc: ...here.
! 	* gengenrtl.c: Moved to...
! 	* gengenrtl.cc: ...here.
! 	* gengtype-parse.c: Moved to...
! 	* gengtype-parse.cc: ...here.
! 	* gengtype-state.c: Moved to...
! 	* gengtype-state.cc: ...here.
! 	* gengtype.c: Moved to...
! 	* gengtype.cc: ...here.
! 	* genhooks.c: Moved to...
! 	* genhooks.cc: ...here.
! 	* genmatch.c: Moved to...
! 	* genmatch.cc: ...here.
! 	* genmddeps.c: Moved to...
! 	* genmddeps.cc: ...here.
! 	* genmddump.c: Moved to...
! 	* genmddump.cc: ...here.
! 	* genmodes.c: Moved to...
! 	* genmodes.cc: ...here.
! 	* genopinit.c: Moved to...
! 	* genopinit.cc: ...here.
! 	* genoutput.c: Moved to...
! 	* genoutput.cc: ...here.
! 	* genpeep.c: Moved to...
! 	* genpeep.cc: ...here.
! 	* genpreds.c: Moved to...
! 	* genpreds.cc: ...here.
! 	* genrecog.c: Moved to...
! 	* genrecog.cc: ...here.
! 	* gensupport.c: Moved to...
! 	* gensupport.cc: ...here.
! 	* gentarget-def.c: Moved to...
! 	* gentarget-def.cc: ...here.
! 	* genversion.c: Moved to...
! 	* genversion.cc: ...here.
! 	* ggc-common.c: Moved to...
! 	* ggc-common.cc: ...here.
! 	* ggc-none.c: Moved to...
! 	* ggc-none.cc: ...here.
! 	* ggc-page.c: Moved to...
! 	* ggc-page.cc: ...here.
! 	* ggc-tests.c: Moved to...
! 	* ggc-tests.cc: ...here.
! 	* gimple-builder.c: Moved to...
! 	* gimple-builder.cc: ...here.
! 	* gimple-expr.c: Moved to...
! 	* gimple-expr.cc: ...here.
! 	* gimple-fold.c: Moved to...
! 	* gimple-fold.cc: ...here.
! 	* gimple-iterator.c: Moved to...
! 	* gimple-iterator.cc: ...here.
! 	* gimple-laddress.c: Moved to...
! 	* gimple-laddress.cc: ...here.
! 	* gimple-loop-jam.c: Moved to...
! 	* gimple-loop-jam.cc: ...here.
! 	* gimple-low.c: Moved to...
! 	* gimple-low.cc: ...here.
! 	* gimple-match-head.c: Moved to...
! 	* gimple-match-head.cc: ...here.
! 	* gimple-pretty-print.c: Moved to...
! 	* gimple-pretty-print.cc: ...here.
! 	* gimple-ssa-backprop.c: Moved to...
! 	* gimple-ssa-backprop.cc: ...here.
! 	* gimple-ssa-evrp-analyze.c: Moved to...
! 	* gimple-ssa-evrp-analyze.cc: ...here.
! 	* gimple-ssa-evrp.c: Moved to...
! 	* gimple-ssa-evrp.cc: ...here.
! 	* gimple-ssa-isolate-paths.c: Moved to...
! 	* gimple-ssa-isolate-paths.cc: ...here.
! 	* gimple-ssa-nonnull-compare.c: Moved to...
! 	* gimple-ssa-nonnull-compare.cc: ...here.
! 	* gimple-ssa-split-paths.c: Moved to...
! 	* gimple-ssa-split-paths.cc: ...here.
! 	* gimple-ssa-sprintf.c: Moved to...
! 	* gimple-ssa-sprintf.cc: ...here.
! 	* gimple-ssa-store-merging.c: Moved to...
! 	* gimple-ssa-store-merging.cc: ...here.
! 	* gimple-ssa-strength-reduction.c: Moved to...
! 	* gimple-ssa-strength-reduction.cc: ...here.
! 	* gimple-ssa-warn-alloca.c: Moved to...
! 	* gimple-ssa-warn-alloca.cc: ...here.
! 	* gimple-ssa-warn-restrict.c: Moved to...
! 	* gimple-ssa-warn-restrict.cc: ...here.
! 	* gimple-streamer-in.c: Moved to...
! 	* gimple-streamer-in.cc: ...here.
! 	* gimple-streamer-out.c: Moved to...
! 	* gimple-streamer-out.cc: ...here.
! 	* gimple-walk.c: Moved to...
! 	* gimple-walk.cc: ...here.
! 	* gimple-warn-recursion.c: Moved to...
! 	* gimple-warn-recursion.cc: ...here.
! 	* gimple.c: Moved to...
! 	* gimple.cc: ...here.
! 	* gimplify-me.c: Moved to...
! 	* gimplify-me.cc: ...here.
! 	* gimplify.c: Moved to...
! 	* gimplify.cc: ...here.
! 	* godump.c: Moved to...
! 	* godump.cc: ...here.
! 	* graph.c: Moved to...
! 	* graph.cc: ...here.
! 	* graphds.c: Moved to...
! 	* graphds.cc: ...here.
! 	* graphite-dependences.c: Moved to...
! 	* graphite-dependences.cc: ...here.
! 	* graphite-isl-ast-to-gimple.c: Moved to...
! 	* graphite-isl-ast-to-gimple.cc: ...here.
! 	* graphite-optimize-isl.c: Moved to...
! 	* graphite-optimize-isl.cc: ...here.
! 	* graphite-poly.c: Moved to...
! 	* graphite-poly.cc: ...here.
! 	* graphite-scop-detection.c: Moved to...
! 	* graphite-scop-detection.cc: ...here.
! 	* graphite-sese-to-poly.c: Moved to...
! 	* graphite-sese-to-poly.cc: ...here.
! 	* graphite.c: Moved to...
! 	* graphite.cc: ...here.
! 	* haifa-sched.c: Moved to...
! 	* haifa-sched.cc: ...here.
! 	* hash-map-tests.c: Moved to...
! 	* hash-map-tests.cc: ...here.
! 	* hash-set-tests.c: Moved to...
! 	* hash-set-tests.cc: ...here.
! 	* hash-table.c: Moved to...
! 	* hash-table.cc: ...here.
! 	* hooks.c: Moved to...
! 	* hooks.cc: ...here.
! 	* host-default.c: Moved to...
! 	* host-default.cc: ...here.
! 	* hw-doloop.c: Moved to...
! 	* hw-doloop.cc: ...here.
! 	* hwint.c: Moved to...
! 	* hwint.cc: ...here.
! 	* ifcvt.c: Moved to...
! 	* ifcvt.cc: ...here.
! 	* inchash.c: Moved to...
! 	* inchash.cc: ...here.
! 	* incpath.c: Moved to...
! 	* incpath.cc: ...here.
! 	* init-regs.c: Moved to...
! 	* init-regs.cc: ...here.
! 	* input.c: Moved to...
! 	* input.cc: ...here.
! 	* internal-fn.c: Moved to...
! 	* internal-fn.cc: ...here.
! 	* intl.c: Moved to...
! 	* intl.cc: ...here.
! 	* ipa-comdats.c: Moved to...
! 	* ipa-comdats.cc: ...here.
! 	* ipa-cp.c: Moved to...
! 	* ipa-cp.cc: ...here.
! 	* ipa-devirt.c: Moved to...
! 	* ipa-devirt.cc: ...here.
! 	* ipa-fnsummary.c: Moved to...
! 	* ipa-fnsummary.cc: ...here.
! 	* ipa-icf-gimple.c: Moved to...
! 	* ipa-icf-gimple.cc: ...here.
! 	* ipa-icf.c: Moved to...
! 	* ipa-icf.cc: ...here.
! 	* ipa-inline-analysis.c: Moved to...
! 	* ipa-inline-analysis.cc: ...here.
! 	* ipa-inline-transform.c: Moved to...
! 	* ipa-inline-transform.cc: ...here.
! 	* ipa-inline.c: Moved to...
! 	* ipa-inline.cc: ...here.
! 	* ipa-modref-tree.c: Moved to...
! 	* ipa-modref-tree.cc: ...here.
! 	* ipa-modref.c: Moved to...
! 	* ipa-modref.cc: ...here.
! 	* ipa-param-manipulation.c: Moved to...
! 	* ipa-param-manipulation.cc: ...here.
! 	* ipa-polymorphic-call.c: Moved to...
! 	* ipa-polymorphic-call.cc: ...here.
! 	* ipa-predicate.c: Moved to...
! 	* ipa-predicate.cc: ...here.
! 	* ipa-profile.c: Moved to...
! 	* ipa-profile.cc: ...here.
! 	* ipa-prop.c: Moved to...
! 	* ipa-prop.cc: ...here.
! 	* ipa-pure-const.c: Moved to...
! 	* ipa-pure-const.cc: ...here.
! 	* ipa-ref.c: Moved to...
! 	* ipa-ref.cc: ...here.
! 	* ipa-reference.c: Moved to...
! 	* ipa-reference.cc: ...here.
! 	* ipa-split.c: Moved to...
! 	* ipa-split.cc: ...here.
! 	* ipa-sra.c: Moved to...
! 	* ipa-sra.cc: ...here.
! 	* ipa-utils.c: Moved to...
! 	* ipa-utils.cc: ...here.
! 	* ipa-visibility.c: Moved to...
! 	* ipa-visibility.cc: ...here.
! 	* ipa.c: Moved to...
! 	* ipa.cc: ...here.
! 	* ira-build.c: Moved to...
! 	* ira-build.cc: ...here.
! 	* ira-color.c: Moved to...
! 	* ira-color.cc: ...here.
! 	* ira-conflicts.c: Moved to...
! 	* ira-conflicts.cc: ...here.
! 	* ira-costs.c: Moved to...
! 	* ira-costs.cc: ...here.
! 	* ira-emit.c: Moved to...
! 	* ira-emit.cc: ...here.
! 	* ira-lives.c: Moved to...
! 	* ira-lives.cc: ...here.
! 	* ira.c: Moved to...
! 	* ira.cc: ...here.
! 	* jump.c: Moved to...
! 	* jump.cc: ...here.
! 	* langhooks.c: Moved to...
! 	* langhooks.cc: ...here.
! 	* lcm.c: Moved to...
! 	* lcm.cc: ...here.
! 	* lists.c: Moved to...
! 	* lists.cc: ...here.
! 	* loop-doloop.c: Moved to...
! 	* loop-doloop.cc: ...here.
! 	* loop-init.c: Moved to...
! 	* loop-init.cc: ...here.
! 	* loop-invariant.c: Moved to...
! 	* loop-invariant.cc: ...here.
! 	* loop-iv.c: Moved to...
! 	* loop-iv.cc: ...here.
! 	* loop-unroll.c: Moved to...
! 	* loop-unroll.cc: ...here.
! 	* lower-subreg.c: Moved to...
! 	* lower-subreg.cc: ...here.
! 	* lra-assigns.c: Moved to...
! 	* lra-assigns.cc: ...here.
! 	* lra-coalesce.c: Moved to...
! 	* lra-coalesce.cc: ...here.
! 	* lra-constraints.c: Moved to...
! 	* lra-constraints.cc: ...here.
! 	* lra-eliminations.c: Moved to...
! 	* lra-eliminations.cc: ...here.
! 	* lra-lives.c: Moved to...
! 	* lra-lives.cc: ...here.
! 	* lra-remat.c: Moved to...
! 	* lra-remat.cc: ...here.
! 	* lra-spills.c: Moved to...
! 	* lra-spills.cc: ...here.
! 	* lra.c: Moved to...
! 	* lra.cc: ...here.
! 	* lto-cgraph.c: Moved to...
! 	* lto-cgraph.cc: ...here.
! 	* lto-compress.c: Moved to...
! 	* lto-compress.cc: ...here.
! 	* lto-opts.c: Moved to...
! 	* lto-opts.cc: ...here.
! 	* lto-section-in.c: Moved to...
! 	* lto-section-in.cc: ...here.
! 	* lto-section-out.c: Moved to...
! 	* lto-section-out.cc: ...here.
! 	* lto-streamer-in.c: Moved to...
! 	* lto-streamer-in.cc: ...here.
! 	* lto-streamer-out.c: Moved to...
! 	* lto-streamer-out.cc: ...here.
! 	* lto-streamer.c: Moved to...
! 	* lto-streamer.cc: ...here.
! 	* lto-wrapper.c: Moved to...
! 	* lto-wrapper.cc: ...here.
! 	* main.c: Moved to...
! 	* main.cc: ...here.
! 	* mcf.c: Moved to...
! 	* mcf.cc: ...here.
! 	* mode-switching.c: Moved to...
! 	* mode-switching.cc: ...here.
! 	* modulo-sched.c: Moved to...
! 	* modulo-sched.cc: ...here.
! 	* multiple_target.c: Moved to...
! 	* multiple_target.cc: ...here.
! 	* omp-expand.c: Moved to...
! 	* omp-expand.cc: ...here.
! 	* omp-general.c: Moved to...
! 	* omp-general.cc: ...here.
! 	* omp-low.c: Moved to...
! 	* omp-low.cc: ...here.
! 	* omp-offload.c: Moved to...
! 	* omp-offload.cc: ...here.
! 	* omp-simd-clone.c: Moved to...
! 	* omp-simd-clone.cc: ...here.
! 	* opt-suggestions.c: Moved to...
! 	* opt-suggestions.cc: ...here.
! 	* optabs-libfuncs.c: Moved to...
! 	* optabs-libfuncs.cc: ...here.
! 	* optabs-query.c: Moved to...
! 	* optabs-query.cc: ...here.
! 	* optabs-tree.c: Moved to...
! 	* optabs-tree.cc: ...here.
! 	* optabs.c: Moved to...
! 	* optabs.cc: ...here.
! 	* opts-common.c: Moved to...
! 	* opts-common.cc: ...here.
! 	* opts-global.c: Moved to...
! 	* opts-global.cc: ...here.
! 	* opts.c: Moved to...
! 	* opts.cc: ...here.
! 	* passes.c: Moved to...
! 	* passes.cc: ...here.
! 	* plugin.c: Moved to...
! 	* plugin.cc: ...here.
! 	* postreload-gcse.c: Moved to...
! 	* postreload-gcse.cc: ...here.
! 	* postreload.c: Moved to...
! 	* postreload.cc: ...here.
! 	* predict.c: Moved to...
! 	* predict.cc: ...here.
! 	* prefix.c: Moved to...
! 	* prefix.cc: ...here.
! 	* pretty-print.c: Moved to...
! 	* pretty-print.cc: ...here.
! 	* print-rtl-function.c: Moved to...
! 	* print-rtl-function.cc: ...here.
! 	* print-rtl.c: Moved to...
! 	* print-rtl.cc: ...here.
! 	* print-tree.c: Moved to...
! 	* print-tree.cc: ...here.
! 	* profile-count.c: Moved to...
! 	* profile-count.cc: ...here.
! 	* profile.c: Moved to...
! 	* profile.cc: ...here.
! 	* read-md.c: Moved to...
! 	* read-md.cc: ...here.
! 	* read-rtl-function.c: Moved to...
! 	* read-rtl-function.cc: ...here.
! 	* read-rtl.c: Moved to...
! 	* read-rtl.cc: ...here.
! 	* real.c: Moved to...
! 	* real.cc: ...here.
! 	* realmpfr.c: Moved to...
! 	* realmpfr.cc: ...here.
! 	* recog.c: Moved to...
! 	* recog.cc: ...here.
! 	* ree.c: Moved to...
! 	* ree.cc: ...here.
! 	* reg-stack.c: Moved to...
! 	* reg-stack.cc: ...here.
! 	* regcprop.c: Moved to...
! 	* regcprop.cc: ...here.
! 	* reginfo.c: Moved to...
! 	* reginfo.cc: ...here.
! 	* regrename.c: Moved to...
! 	* regrename.cc: ...here.
! 	* regstat.c: Moved to...
! 	* regstat.cc: ...here.
! 	* reload.c: Moved to...
! 	* reload.cc: ...here.
! 	* reload1.c: Moved to...
! 	* reload1.cc: ...here.
! 	* reorg.c: Moved to...
! 	* reorg.cc: ...here.
! 	* resource.c: Moved to...
! 	* resource.cc: ...here.
! 	* rtl-error.c: Moved to...
! 	* rtl-error.cc: ...here.
! 	* rtl-tests.c: Moved to...
! 	* rtl-tests.cc: ...here.
! 	* rtl.c: Moved to...
! 	* rtl.cc: ...here.
! 	* rtlanal.c: Moved to...
! 	* rtlanal.cc: ...here.
! 	* rtlhash.c: Moved to...
! 	* rtlhash.cc: ...here.
! 	* rtlhooks.c: Moved to...
! 	* rtlhooks.cc: ...here.
! 	* rtx-vector-builder.c: Moved to...
! 	* rtx-vector-builder.cc: ...here.
! 	* run-rtl-passes.c: Moved to...
! 	* run-rtl-passes.cc: ...here.
! 	* sancov.c: Moved to...
! 	* sancov.cc: ...here.
! 	* sanopt.c: Moved to...
! 	* sanopt.cc: ...here.
! 	* sbitmap.c: Moved to...
! 	* sbitmap.cc: ...here.
! 	* sched-deps.c: Moved to...
! 	* sched-deps.cc: ...here.
! 	* sched-ebb.c: Moved to...
! 	* sched-ebb.cc: ...here.
! 	* sched-rgn.c: Moved to...
! 	* sched-rgn.cc: ...here.
! 	* sel-sched-dump.c: Moved to...
! 	* sel-sched-dump.cc: ...here.
! 	* sel-sched-ir.c: Moved to...
! 	* sel-sched-ir.cc: ...here.
! 	* sel-sched.c: Moved to...
! 	* sel-sched.cc: ...here.
! 	* selftest-diagnostic.c: Moved to...
! 	* selftest-diagnostic.cc: ...here.
! 	* selftest-rtl.c: Moved to...
! 	* selftest-rtl.cc: ...here.
! 	* selftest-run-tests.c: Moved to...
! 	* selftest-run-tests.cc: ...here.
! 	* selftest.c: Moved to...
! 	* selftest.cc: ...here.
! 	* sese.c: Moved to...
! 	* sese.cc: ...here.
! 	* shrink-wrap.c: Moved to...
! 	* shrink-wrap.cc: ...here.
! 	* simplify-rtx.c: Moved to...
! 	* simplify-rtx.cc: ...here.
! 	* sparseset.c: Moved to...
! 	* sparseset.cc: ...here.
! 	* spellcheck-tree.c: Moved to...
! 	* spellcheck-tree.cc: ...here.
! 	* spellcheck.c: Moved to...
! 	* spellcheck.cc: ...here.
! 	* sreal.c: Moved to...
! 	* sreal.cc: ...here.
! 	* stack-ptr-mod.c: Moved to...
! 	* stack-ptr-mod.cc: ...here.
! 	* statistics.c: Moved to...
! 	* statistics.cc: ...here.
! 	* stmt.c: Moved to...
! 	* stmt.cc: ...here.
! 	* stor-layout.c: Moved to...
! 	* stor-layout.cc: ...here.
! 	* store-motion.c: Moved to...
! 	* store-motion.cc: ...here.
! 	* streamer-hooks.c: Moved to...
! 	* streamer-hooks.cc: ...here.
! 	* stringpool.c: Moved to...
! 	* stringpool.cc: ...here.
! 	* substring-locations.c: Moved to...
! 	* substring-locations.cc: ...here.
! 	* symtab.c: Moved to...
! 	* symtab.cc: ...here.
! 	* target-globals.c: Moved to...
! 	* target-globals.cc: ...here.
! 	* targhooks.c: Moved to...
! 	* targhooks.cc: ...here.
! 	* timevar.c: Moved to...
! 	* timevar.cc: ...here.
! 	* toplev.c: Moved to...
! 	* toplev.cc: ...here.
! 	* tracer.c: Moved to...
! 	* tracer.cc: ...here.
! 	* trans-mem.c: Moved to...
! 	* trans-mem.cc: ...here.
! 	* tree-affine.c: Moved to...
! 	* tree-affine.cc: ...here.
! 	* tree-call-cdce.c: Moved to...
! 	* tree-call-cdce.cc: ...here.
! 	* tree-cfg.c: Moved to...
! 	* tree-cfg.cc: ...here.
! 	* tree-cfgcleanup.c: Moved to...
! 	* tree-cfgcleanup.cc: ...here.
! 	* tree-chrec.c: Moved to...
! 	* tree-chrec.cc: ...here.
! 	* tree-complex.c: Moved to...
! 	* tree-complex.cc: ...here.
! 	* tree-data-ref.c: Moved to...
! 	* tree-data-ref.cc: ...here.
! 	* tree-dfa.c: Moved to...
! 	* tree-dfa.cc: ...here.
! 	* tree-diagnostic.c: Moved to...
! 	* tree-diagnostic.cc: ...here.
! 	* tree-dump.c: Moved to...
! 	* tree-dump.cc: ...here.
! 	* tree-eh.c: Moved to...
! 	* tree-eh.cc: ...here.
! 	* tree-emutls.c: Moved to...
! 	* tree-emutls.cc: ...here.
! 	* tree-if-conv.c: Moved to...
! 	* tree-if-conv.cc: ...here.
! 	* tree-inline.c: Moved to...
! 	* tree-inline.cc: ...here.
! 	* tree-into-ssa.c: Moved to...
! 	* tree-into-ssa.cc: ...here.
! 	* tree-iterator.c: Moved to...
! 	* tree-iterator.cc: ...here.
! 	* tree-loop-distribution.c: Moved to...
! 	* tree-loop-distribution.cc: ...here.
! 	* tree-nested.c: Moved to...
! 	* tree-nested.cc: ...here.
! 	* tree-nrv.c: Moved to...
! 	* tree-nrv.cc: ...here.
! 	* tree-object-size.c: Moved to...
! 	* tree-object-size.cc: ...here.
! 	* tree-outof-ssa.c: Moved to...
! 	* tree-outof-ssa.cc: ...here.
! 	* tree-parloops.c: Moved to...
! 	* tree-parloops.cc: ...here.
! 	* tree-phinodes.c: Moved to...
! 	* tree-phinodes.cc: ...here.
! 	* tree-predcom.c: Moved to...
! 	* tree-predcom.cc: ...here.
! 	* tree-pretty-print.c: Moved to...
! 	* tree-pretty-print.cc: ...here.
! 	* tree-profile.c: Moved to...
! 	* tree-profile.cc: ...here.
! 	* tree-scalar-evolution.c: Moved to...
! 	* tree-scalar-evolution.cc: ...here.
! 	* tree-sra.c: Moved to...
! 	* tree-sra.cc: ...here.
! 	* tree-ssa-address.c: Moved to...
! 	* tree-ssa-address.cc: ...here.
! 	* tree-ssa-alias.c: Moved to...
! 	* tree-ssa-alias.cc: ...here.
! 	* tree-ssa-ccp.c: Moved to...
! 	* tree-ssa-ccp.cc: ...here.
! 	* tree-ssa-coalesce.c: Moved to...
! 	* tree-ssa-coalesce.cc: ...here.
! 	* tree-ssa-copy.c: Moved to...
! 	* tree-ssa-copy.cc: ...here.
! 	* tree-ssa-dce.c: Moved to...
! 	* tree-ssa-dce.cc: ...here.
! 	* tree-ssa-dom.c: Moved to...
! 	* tree-ssa-dom.cc: ...here.
! 	* tree-ssa-dse.c: Moved to...
! 	* tree-ssa-dse.cc: ...here.
! 	* tree-ssa-forwprop.c: Moved to...
! 	* tree-ssa-forwprop.cc: ...here.
! 	* tree-ssa-ifcombine.c: Moved to...
! 	* tree-ssa-ifcombine.cc: ...here.
! 	* tree-ssa-live.c: Moved to...
! 	* tree-ssa-live.cc: ...here.
! 	* tree-ssa-loop-ch.c: Moved to...
! 	* tree-ssa-loop-ch.cc: ...here.
! 	* tree-ssa-loop-im.c: Moved to...
! 	* tree-ssa-loop-im.cc: ...here.
! 	* tree-ssa-loop-ivcanon.c: Moved to...
! 	* tree-ssa-loop-ivcanon.cc: ...here.
! 	* tree-ssa-loop-ivopts.c: Moved to...
! 	* tree-ssa-loop-ivopts.cc: ...here.
! 	* tree-ssa-loop-manip.c: Moved to...
! 	* tree-ssa-loop-manip.cc: ...here.
! 	* tree-ssa-loop-niter.c: Moved to...
! 	* tree-ssa-loop-niter.cc: ...here.
! 	* tree-ssa-loop-prefetch.c: Moved to...
! 	* tree-ssa-loop-prefetch.cc: ...here.
! 	* tree-ssa-loop-split.c: Moved to...
! 	* tree-ssa-loop-split.cc: ...here.
! 	* tree-ssa-loop-unswitch.c: Moved to...
! 	* tree-ssa-loop-unswitch.cc: ...here.
! 	* tree-ssa-loop.c: Moved to...
! 	* tree-ssa-loop.cc: ...here.
! 	* tree-ssa-math-opts.c: Moved to...
! 	* tree-ssa-math-opts.cc: ...here.
! 	* tree-ssa-operands.c: Moved to...
! 	* tree-ssa-operands.cc: ...here.
! 	* tree-ssa-phiopt.c: Moved to...
! 	* tree-ssa-phiopt.cc: ...here.
! 	* tree-ssa-phiprop.c: Moved to...
! 	* tree-ssa-phiprop.cc: ...here.
! 	* tree-ssa-pre.c: Moved to...
! 	* tree-ssa-pre.cc: ...here.
! 	* tree-ssa-propagate.c: Moved to...
! 	* tree-ssa-propagate.cc: ...here.
! 	* tree-ssa-reassoc.c: Moved to...
! 	* tree-ssa-reassoc.cc: ...here.
! 	* tree-ssa-sccvn.c: Moved to...
! 	* tree-ssa-sccvn.cc: ...here.
! 	* tree-ssa-scopedtables.c: Moved to...
! 	* tree-ssa-scopedtables.cc: ...here.
! 	* tree-ssa-sink.c: Moved to...
! 	* tree-ssa-sink.cc: ...here.
! 	* tree-ssa-strlen.c: Moved to...
! 	* tree-ssa-strlen.cc: ...here.
! 	* tree-ssa-structalias.c: Moved to...
! 	* tree-ssa-structalias.cc: ...here.
! 	* tree-ssa-tail-merge.c: Moved to...
! 	* tree-ssa-tail-merge.cc: ...here.
! 	* tree-ssa-ter.c: Moved to...
! 	* tree-ssa-ter.cc: ...here.
! 	* tree-ssa-threadbackward.c: Moved to...
! 	* tree-ssa-threadbackward.cc: ...here.
! 	* tree-ssa-threadedge.c: Moved to...
! 	* tree-ssa-threadedge.cc: ...here.
! 	* tree-ssa-threadupdate.c: Moved to...
! 	* tree-ssa-threadupdate.cc: ...here.
! 	* tree-ssa-uncprop.c: Moved to...
! 	* tree-ssa-uncprop.cc: ...here.
! 	* tree-ssa-uninit.c: Moved to...
! 	* tree-ssa-uninit.cc: ...here.
! 	* tree-ssa.c: Moved to...
! 	* tree-ssa.cc: ...here.
! 	* tree-ssanames.c: Moved to...
! 	* tree-ssanames.cc: ...here.
! 	* tree-stdarg.c: Moved to...
! 	* tree-stdarg.cc: ...here.
! 	* tree-streamer-in.c: Moved to...
! 	* tree-streamer-in.cc: ...here.
! 	* tree-streamer-out.c: Moved to...
! 	* tree-streamer-out.cc: ...here.
! 	* tree-streamer.c: Moved to...
! 	* tree-streamer.cc: ...here.
! 	* tree-switch-conversion.c: Moved to...
! 	* tree-switch-conversion.cc: ...here.
! 	* tree-tailcall.c: Moved to...
! 	* tree-tailcall.cc: ...here.
! 	* tree-vect-data-refs.c: Moved to...
! 	* tree-vect-data-refs.cc: ...here.
! 	* tree-vect-generic.c: Moved to...
! 	* tree-vect-generic.cc: ...here.
! 	* tree-vect-loop-manip.c: Moved to...
! 	* tree-vect-loop-manip.cc: ...here.
! 	* tree-vect-loop.c: Moved to...
! 	* tree-vect-loop.cc: ...here.
! 	* tree-vect-patterns.c: Moved to...
! 	* tree-vect-patterns.cc: ...here.
! 	* tree-vect-slp-patterns.c: Moved to...
! 	* tree-vect-slp-patterns.cc: ...here.
! 	* tree-vect-slp.c: Moved to...
! 	* tree-vect-slp.cc: ...here.
! 	* tree-vect-stmts.c: Moved to...
! 	* tree-vect-stmts.cc: ...here.
! 	* tree-vector-builder.c: Moved to...
! 	* tree-vector-builder.cc: ...here.
! 	* tree-vectorizer.c: Moved to...
! 	* tree-vectorizer.cc: ...here.
! 	* tree-vrp.c: Moved to...
! 	* tree-vrp.cc: ...here.
! 	* tree.c: Moved to...
! 	* tree.cc: ...here.
! 	* tsan.c: Moved to...
! 	* tsan.cc: ...here.
! 	* typed-splay-tree.c: Moved to...
! 	* typed-splay-tree.cc: ...here.
! 	* ubsan.c: Moved to...
! 	* ubsan.cc: ...here.
! 	* valtrack.c: Moved to...
! 	* valtrack.cc: ...here.
! 	* value-prof.c: Moved to...
! 	* value-prof.cc: ...here.
! 	* var-tracking.c: Moved to...
! 	* var-tracking.cc: ...here.
! 	* varasm.c: Moved to...
! 	* varasm.cc: ...here.
! 	* varpool.c: Moved to...
! 	* varpool.cc: ...here.
! 	* vec-perm-indices.c: Moved to...
! 	* vec-perm-indices.cc: ...here.
! 	* vec.c: Moved to...
! 	* vec.cc: ...here.
! 	* vmsdbgout.c: Moved to...
! 	* vmsdbgout.cc: ...here.
! 	* vr-values.c: Moved to...
! 	* vr-values.cc: ...here.
! 	* vtable-verify.c: Moved to...
! 	* vtable-verify.cc: ...here.
! 	* web.c: Moved to...
! 	* web.cc: ...here.
! 	* xcoffout.c: Moved to...
! 	* xcoffout.cc: ...here.
  
! 2022-01-17  qing zhao  <qing.zhao@oracle.com>
  
! 	* tree-ssa-uninit.c (warn_uninit): Delete the 4th parameter. Handle
! 	.DEFERRED_INIT call with an anonymous SSA_NAME specially.
! 	(check_defs): Handle .DEFERRED_INIT call with an anonymous SSA_NAME
! 	specially.
! 	(warn_uninit_phi_uses): Delete the 4th actual when call warn_uninit.
! 	(warn_uninitialized_vars): Likewise.
! 	(warn_uninitialized_phi): Likewise.
  
! 2022-01-17  Jason Merrill  <jason@redhat.com>
  
! 	* diagnostic.h (struct diagnostic_context): Add includes_seen.
! 	* diagnostic.c (diagnostic_initialize): Initialize it.
! 	(diagnostic_finish): Clean it up.
! 	(includes_seen): New function.
! 	(diagnostic_report_current_module): Use it.
  
! 2022-01-17  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/101292
! 	* diagnostic-spec.c (copy_warning): Make sure to not
! 	reference old hashtable content on possible resize.
! 	* warning-control.cc (copy_warning): Likewise.
  
! 2022-01-17  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/103973
! 	* tree-cfg.h (cond_only_block_p): Declare.
! 	* tree-ssa-phiopt.c (cond_only_block_p): Move function to ...
! 	* tree-cfg.c (cond_only_block_p): ... here.  No longer static.
! 	* optabs.def (spaceship_optab): New optab.
! 	* internal-fn.def (SPACESHIP): New internal function.
! 	* internal-fn.h (expand_SPACESHIP): Declare.
! 	* internal-fn.c (expand_PHI): Formatting fix.
! 	(expand_SPACESHIP): New function.
! 	* tree-ssa-math-opts.c (optimize_spaceship): New function.
! 	(math_opts_dom_walker::after_dom_children): Use it.
! 	* config/i386/i386.md (spaceship<mode>3): New define_expand.
! 	* config/i386/i386-protos.h (ix86_expand_fp_spaceship): Declare.
! 	* config/i386/i386-expand.c (ix86_expand_fp_spaceship): New function.
! 	* doc/md.texi (spaceship@var{m}3): Document.
  
! 2022-01-17  Kewen Lin  <linkw@linux.ibm.com>
  
! 	* config/rs6000/altivec.md (altivec_vreveti2): Remove.
! 	* config/rs6000/vsx.md (*vsx_extract_si, *vsx_extract_si_<uns>float_df,
! 	*vsx_extract_si_<uns>float_<mode>, *vsx_insert_extract_v4sf_p9): Use
! 	known constant values to simplify code.
  
! 2022-01-17  Haochen Gui  <guihaoc@gcc.gnu.org>
  
! 	PR target/103124
! 	* config/rs6000/vsx.md (split pattern for TI to V1TI move): Defined.
  
! 2022-01-16  wwwhhhyyy  <hongyu.wang@intel.com>
  
! 	* config/i386/i386.h (TARGET_DEST_FALSE_DEP_FOR_GLC): New macro.
! 	* config/i386/sse.md (<avx512>_<complexopname>_<mode><maskc_name><round_name>):
! 	Insert zero-idiom in output template when attr enabled, set new attribute to
! 	true for non-mask/maskz insn.
! 	(avx512fp16_<complexopname>sh_v8hf<mask_scalarc_name><round_scalarcz_name>):
! 	Likewise.
! 	(avx512dq_mul<mode>3<mask_name>): Likewise.
! 	(<avx2_avx512>_permvar<mode><mask_name>): Likewise.
! 	(avx2_perm<mode>_1<mask_name>): Likewise.
! 	(avx512f_perm<mode>_1<mask_name>): Likewise.
! 	(avx512dq_rangep<mode><mask_name><round_saeonly_name>): Likewise.
! 	(avx512dq_ranges<mode><mask_scalar_name><round_saeonly_scalar_name>):
! 	Likewise.
! 	(<avx512>_getmant<mode><mask_name><round_saeonly_name>): Likewise.
! 	(avx512f_vgetmant<mode><mask_scalar_name><round_saeonly_scalar_name>):
! 	Likewise.
! 	* config/i386/subst.md (mask3_dest_false_dep_for_glc_cond): New
! 	subst_attr.
! 	(mask4_dest_false_dep_for_glc_cond): Likewise.
! 	(mask6_dest_false_dep_for_glc_cond): Likewise.
! 	(mask10_dest_false_dep_for_glc_cond): Likewise.
! 	(maskc_dest_false_dep_for_glc_cond): Likewise.
! 	(mask_scalar4_dest_false_dep_for_glc_cond): Likewise.
! 	(mask_scalarc_dest_false_dep_for_glc_cond): Likewise.
! 	* config/i386/x86-tune.def (X86_TUNE_DEST_FALSE_DEP_FOR_GLC): New
! 	DEF_TUNE enabled for m_SAPPHIRERAPIDS and m_ALDERLAKE
  
! 2022-01-15  Martin Sebor  <msebor@redhat.com>
  
! 	PR c/63272
! 	* diagnostic-spec.c (nowarn_spec_t::nowarn_spec_t): Handle
! 	-Wdangling-pointer.
! 	* doc/invoke.texi (-Wdangling-pointer): Document new option.
! 	* gimple-ssa-warn-access.cc (pass_waccess::clone): Set new member.
! 	(pass_waccess::check_pointer_uses): New function.
! 	(pass_waccess::gimple_call_return_arg): New function.
! 	(pass_waccess::gimple_call_return_arg_ref): New function.
! 	(pass_waccess::check_call_dangling): New function.
! 	(pass_waccess::check_dangling_uses): New function overloads.
! 	(pass_waccess::check_dangling_stores): New function.
! 	(pass_waccess::check_dangling_stores): New function.
! 	(pass_waccess::m_clobbers): New data member.
! 	(pass_waccess::m_func): New data member.
! 	(pass_waccess::m_run_number): New data member.
! 	(pass_waccess::m_check_dangling_p): New data member.
! 	(pass_waccess::check_alloca): Check m_early_checks_p.
! 	(pass_waccess::check_alloc_size_call): Same.
! 	(pass_waccess::check_strcat): Same.
! 	(pass_waccess::check_strncat): Same.
! 	(pass_waccess::check_stxcpy): Same.
! 	(pass_waccess::check_stxncpy): Same.
! 	(pass_waccess::check_strncmp): Same.
! 	(pass_waccess::check_memop_access): Same.
! 	(pass_waccess::check_read_access): Same.
! 	(pass_waccess::check_builtin): Call check_pointer_uses.
! 	(pass_waccess::warn_invalid_pointer): Add arguments.
! 	(is_auto_decl): New function.
! 	(pass_waccess::check_stmt): New function.
! 	(pass_waccess::check_block): Call check_stmt.
! 	(pass_waccess::execute): Call check_dangling_uses,
! 	check_dangling_stores.  Empty m_clobbers.
! 	* passes.def (pass_warn_access): Invoke pass two more times.
  
! 2022-01-15  Martin Sebor  <msebor@redhat.com>
  
! 	PR tree-optimization/80532
! 	* common.opt (-Wuse-after-free): New options.
! 	* diagnostic-spec.c (nowarn_spec_t::nowarn_spec_t): Handle
! 	OPT_Wreturn_local_addr and OPT_Wuse_after_free_.
! 	* diagnostic-spec.h (NW_DANGLING): New enumerator.
! 	* doc/invoke.texi (-Wuse-after-free): Document new option.
! 	* gimple-ssa-warn-access.cc (pass_waccess::check_call): Rename...
! 	(pass_waccess::check_call_access): ...to this.
! 	(pass_waccess::check): Rename...
! 	(pass_waccess::check_block): ...to this.
! 	(pass_waccess::check_pointer_uses): New function.
! 	(pass_waccess::gimple_call_return_arg): New function.
! 	(pass_waccess::warn_invalid_pointer): New function.
! 	(pass_waccess::check_builtin): Handle free and realloc.
! 	(gimple_use_after_inval_p): New function.
! 	(get_realloc_lhs): New function.
! 	(maybe_warn_mismatched_realloc): New function.
! 	(pointers_related_p): New function.
! 	(pass_waccess::check_call): Call check_pointer_uses.
! 	(pass_waccess::execute): Compute and free dominance info.
  
! 2022-01-15  Uroš Bizjak  <ubizjak@gmail.com>
  
  	* config/i386/i386-expand.c (ix86_expand_sse_movcc): Use
! 	expand_simple_unop and expand_simple_binop instead of manually
! 	constructing NOT, AND and IOR RTXes.  Use vector_all_ones_operand
! 	consistently.  Eliminate common subexpressions and simplify code.
! 	* config/i386/sse.md (<any_logic:code><MODEF:mode>3): New expander.
! 	(<any_logic:code><MODEF:mode>3): Make public.
  
! 2022-01-14  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* ipa-param-manipulation.c (ipa_dump_adjusted_parameters): Dump
! 	reverse flag as "reverse" for the sake of consistency.
! 	* ipa-sra.c: Fix copyright year.
! 	(ipa_sra_function_summaries::duplicate): Copy the reverse flag.
! 	(dump_isra_access): Tweak dump line.
! 	(isra_write_node_summary): Write the reverse flag.
! 	(isra_read_node_info): Read it.
! 	(pull_accesses_from_callee): Test its consistency and copy it.
  
! 2022-01-14  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR middle-end/104026
! 	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Initialize
! 	partial_load_store_bias.
  
! 2022-01-14  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/101475
! 	* pointer-query.cc (handle_component_ref): Use the size of
! 	the enclosing object if it's smaller than the member.
  
! 2022-01-14  Martin Liska  <mliska@suse.cz>
  
! 	* configure: Regenerate.
  
! 2022-01-14  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	* config/i386/i386.md (*add<mode>_1_slp"):
! 	Mark alternative 1 output operand earlyclobbered.
! 	(*sub<mode>_1_slp): Ditto.
! 	(*and<mode>_1_slp): Ditto.
! 	(*<code><mode>_1_slp): Ditto.
! 	(*neg<mode>_1_slp): Ditto.
! 	(*one_cmpl<mode>_1_slp): Ditto.
! 	(*ashl<mode>3_1_slp): Ditto.
! 	(*<insn><mode>3_1_slp): Ditto.
! 	(*<insn><mode>3_1_slp): Ditto.
  
! 2022-01-14  Kewen Lin  <linkw@linux.ibm.com>
  
! 	PR tree-optimization/104015
! 	* tree-vect-loop.c (vect_analyze_loop): Check
! 	param_vect_partial_vector_usage for supports_partial_vectors.
  
! 2022-01-14  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/89074
! 	* fold-const.c (address_compare): Punt on comparison of address of
! 	one object with address of end of another object if
! 	folding_initializer.
  
! 2022-01-14  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/98737
! 	* tree-ssa-forwprop.c (simplify_builtin_call): Canonicalize
! 	__atomic_fetch_op (p, x, y) op x into __atomic_op_fetch (p, x, y)
! 	and __atomic_op_fetch (p, x, y) iop x into
! 	__atomic_fetch_op (p, x, y).
  
! 2022-01-14  Claudiu Zissulescu  <claziss@synopsys.com>
  
! 	* config/arc/arc.h (DWARF_FRAME_REGNUM): Update definition.
! 	(DWARF_FRAME_RETURN_COLUMN): Use RETURN_ADDR_REGNUM macro.
! 	(INCOMING_RETURN_ADDR_RTX): Likewise.
! 	(DWARF_ALT_FRAME_RETURN_COLUMN): Define.
  
! 2022-01-14  Claudiu Zissulescu  <claziss@synopsys.com>
  
! 	* config/arc/arc.c (arc_compute_frame_size): Remove condition when
! 	computin checking accumulator regs.
! 	(arc_expand_prologue): Update comments.
! 	(arc_expand_epilogue): Likewise.
  
! 2022-01-14  Roger Sayle  <roger@nextmovesoftware.com>
! 	    Uroš Bizjak  <ubizjak@gmail.com>
  
! 	* config/i386/i386-expand.c (ix86_expand_v1ti_to_ti): Use force_reg.
! 	(ix86_expand_ti_to_v1ti): Use force_reg.
! 	(ix86_expand_v1ti_shift): Use force_reg.
! 	(ix86_expand_v1ti_rotate): Use force_reg.
! 	(ix86_expand_v1ti_ashiftrt): Provide new three operation
! 	implementations for shifts by 111..126 bits.  Use force_reg.
  
! 2022-01-14  Martin Liska  <mliska@suse.cz>
  
! 	* common/config/arm/arm-common.c (arm_target_mode): Fix
! 	warning: unterminated quoting directive [-Wformat=].
  
! 2022-01-14  Siddhesh Poyarekar  <siddhesh@gotplt.org>
  
! 	PR tree-optimization/104009
! 	* tree-object-size.c (compute_builtin_object_size): Bail out on
! 	negative offset.
! 	(plus_stmt_object_size): Return maximum of wholesize and minimum
! 	of 0 for negative offset.
  
! 2022-01-14  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/104001
! 	PR target/94790
! 	PR target/104014
! 	* config/i386/i386.md (*xor2andn): Refine predicate of
! 	operands[0] from nonimmediate_operand to
! 	register_operand, remove TARGET_AVX512BW from condition.
  
! 2022-01-14  David Malcolm  <dmalcolm@redhat.com>
  
! 	* doc/extend.texi (Function Attributes): Note that "tainted_args" can
! 	be used on field decls.
! 	(Common Function Attributes): Add entry on "tainted_args" attribute.
  
! 2022-01-13  Anthony Sharp  <anthonysharp15@gmail.com>
! 	    Jason Merrill  <jason@redhat.com>
  
! 	PR c++/70417
! 	* doc/invoke.texi: Documentation for Wmissing-template-keyword.
  
! 2022-01-13  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/103861
! 	* config/i386/i386.md (*ashlqi_ext<mode>_2): New insn pattern.
! 	(*<any_shiftrt:insn>qi_ext<mode>_2): Ditto.
! 	* config/i386/mmx.md (<any_shift:insn>v2qi):
! 	New insn_and_split pattern.
  
! 2022-01-13  Robin Dapp  <rdapp@linux.ibm.com>
  
! 	* internal-fn.c (expand_partial_load_optab_fn): Add bias.
! 	(expand_partial_store_optab_fn): Likewise.
! 	(internal_len_load_store_bias): New function.
! 	* internal-fn.h (VECT_PARTIAL_BIAS_UNSUPPORTED): New define.
! 	(internal_len_load_store_bias): New function.
! 	* tree-vect-loop-manip.c (vect_set_loop_controls_directly): Set bias.
! 	(vect_set_loop_condition_partial_vectors): Add header_seq parameter.
! 	* tree-vect-loop.c (vect_verify_loop_lens): Verify bias.
! 	(vect_estimate_min_profitable_iters): Account for bias.
! 	(vect_get_loop_len): Add bias-adjusted length.
! 	* tree-vect-stmts.c (vectorizable_store): Use.
! 	(vectorizable_load): Use.
! 	* tree-vectorizer.h (struct rgroup_controls): Add bias-adjusted length.
! 	(LOOP_VINFO_PARTIAL_LOAD_STORE_BIAS): New macro.
! 	* config/rs6000/vsx.md: Use const0 bias predicate.
! 	* doc/md.texi: Document bias value.
  
! 2022-01-13  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/83072
! 	PR tree-optimization/83073
! 	PR tree-optimization/97909
! 	* fold-const.c (expr_not_equal_to): Use a multi-range class.
  
! 2022-01-13  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/96707
! 	* range-op.cc (operator_rshift::lhs_op1_relation): New.
  
! 2022-01-13  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	* config/i386/mmx.md (negv2qi): Disparage GPR alternative a bit.
! 	Disable for TARGET_PARTIAL_REG_STALL unless optimizing for size.
! 	(negv2qi splitters): Use lowpart_subreg instead of
! 	gen_lowpart to create subreg.
! 	(<plusminus:insn>v2qi3): Disparage GPR alternative a bit.
! 	Disable for TARGET_PARTIAL_REG_STALL unless optimizing for size.
! 	(<plusminus:insn>v2qi3 splitters): Use lowpart_subreg instead of
! 	gen_lowpart to create subreg.
! 	* config/i386/i386.md (*subqi_ext<mode>_2): Move.
  
! 2022-01-13  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/104003
! 	* config/i386/mmx.md (*xop_pcmov_<mode>): Use VI_16_32 mode iterator.
  
! 2022-01-13  Martin Liska  <mliska@suse.cz>
  
! 	* common/config/arm/arm-common.c (arm_target_mode): Wrap
! 	keywords with %<, %> and remove trailing punctuation char.
! 	(arm_canon_arch_option_1): Likewise.
! 	(arm_asm_auto_mfpu): Likewise.
! 	* config/arm/arm-builtins.c (arm_expand_builtin): Likewise.
! 	* config/arm/arm.c (arm_options_perform_arch_sanity_checks): Likewise.
! 	(use_vfp_abi): Likewise.
! 	(aapcs_vfp_is_call_or_return_candidate): Likewise.
! 	(arm_handle_cmse_nonsecure_entry): Likewise.
! 	(arm_handle_cmse_nonsecure_call): Likewise.
! 	(thumb1_md_asm_adjust): Likewise.
  
! 2022-01-13  Paul A. Clarke  <pc@us.ibm.com>
  
! 	* config/rs6000/smmintrin.h (_mm_round_pd, _mm_round_ps,
! 	_mm_round_sd, _mm_round_ss, _MM_FROUND_TO_NEAREST_INT,
! 	_MM_FROUND_TO_ZERO, _MM_FROUND_TO_POS_INF, _MM_FROUND_TO_NEG_INF,
! 	_MM_FROUND_CUR_DIRECTION, _MM_FROUND_RAISE_EXC, _MM_FROUND_NO_EXC,
! 	_MM_FROUND_NINT, _MM_FROUND_FLOOR, _MM_FROUND_CEIL, _MM_FROUND_TRUNC,
! 	_MM_FROUND_RINT, _MM_FROUND_NEARBYINT): New.
! 	(_mm_ceil_pd, _mm_ceil_ps, _mm_ceil_sd, _mm_ceil_ss, _mm_floor_pd,
! 	_mm_floor_ps, _mm_floor_sd, _mm_floor_ss): Convert from function to
! 	macro.
  
! 2022-01-13  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/103989
! 	* tree-inline.c (setup_one_parameter): Don't copy parms with
! 	empty type.
  
! 2022-01-13  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	* tree-streamer-out.c (pack_ts_base_value_fields): Don't pack
! 	'TYPE_ADDR_SPACE' for offloading.
! 	* tree-streamer-in.c (unpack_ts_base_value_fields): Don't unpack
! 	'TYPE_ADDR_SPACE' for offloading.
  
! 2022-01-13  Julian Brown  <julian@codesourcery.com>
! 	    Thomas Schwinge  <thomas@codesourcery.com>
  
! 	* omp-oacc-kernels-decompose.cc (add_wait): New function, split out
  	of...
! 	(add_async_clauses_and_wait): ...here. Call new outlined function.
! 	(decompose_kernels_region_body): Add wait at the end of
! 	explicitly-asynchronous kernels regions.
  
! 2022-01-13  Thomas Schwinge  <thomas@codesourcery.com>
  
! 	PR middle-end/100280
! 	* omp-oacc-kernels-decompose.cc (maybe_build_inner_data_region):
! 	Mark variables used in synthesized data clauses as addressable.
  
! 2022-01-13  Martin Liska  <mliska@suse.cz>
  
! 	* config/epiphany/epiphany.c (epiphany_mode_priority):
! 	Use gcc_unreachable for not handled cases.
  
! 2022-01-13  Martin Liska  <mliska@suse.cz>
  
! 	* config/epiphany/epiphany.c (epiphany_handle_interrupt_attribute):
! 	Use %qs format specifier.
! 	(epiphany_override_options): Wrap keyword in %<, %>.
  
! 2022-01-13  Haochen Jiang  <haochen.jiang@intel.com>
  
! 	PR target/94790
! 	* config/i386/i386.md (*xor2andn): New define_insn_and_split.
  
! 2022-01-13  Xionghu Luo  <luoxhu@linux.ibm.com>
  
! 	* config/rs6000/altivec.md (sldoi_to_mov<mode>): New.
  
! 2022-01-12  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/100637
! 	PR target/103861
! 	* config/i386/i386-expand.c (ix86_emit_vec_binop): New static function.
! 	(ix86_expand_sse_movcc): Use ix86_emit_vec_binop instead of gen_rtx_X
! 	when constructing vector logic RTXes.
! 	(expand_vec_perm_pshufb2): Ditto.
! 	* config/i386/mmx.md (negv2qi): Disparage GPR alternative a bit.
! 	(<plusminus:insn>v2qi3): Ditto.
! 	(vcond<mode><mode>): Re-enable for TARGET_SSE2.
! 	(vcondu<mode><mode>): Ditto.
! 	(vcond_mask_<mode><mode>): Ditto.
! 	(one_cmpl<VI_32:mode>2): Remove expander.
! 	(one_cmpl<VI_16_32:mode>2): Rename from one_cmplv2qi.
! 	Use VI_16_32 mode iterator.
! 	(one_cmpl<VI_16_32:mode>2 splitters): Use VI_16_32 mode iterator.
! 	Use lowpart_subreg instead of gen_lowpart to create subreg.
! 	(*andnot<VI_16_32:mode>3): Merge from "*andnot<VI_32:mode>" and
! 	"*andnotv2qi3" insn patterns using VI_16_32 mode iterator.
! 	Disparage GPR alternative a bit.  Add CC clobber.
! 	(*andnot<VI_16_32:mode>3 splitters): Use VI_16_32 mode iterator.
! 	Use lowpart_subreg instead of gen_lowpart to create subreg.
! 	(*<any_logic:code><VI_16_32:mode>3): Merge from
! 	"*<any_logic:code><VI_32:mode>" and "*<any_logic:code>v2qi3" insn patterns
! 	using VI_16_32 mode iterator.  Disparage GPR alternative a bit.
! 	Add CC clobber.
! 	(*<any_logic:code><VI_16_32:mode>3 splitters):Use VI_16_32 mode
! 	iterator.  Use lowpart_subreg instead of gen_lowpart to create subreg.
  
! 2022-01-12  Clément Chigot  <clement.chigot@atos.net>
  
! 	* configure.ac: Check sizeof ino_t and dev_t.
! 	(HOST_STAT_FOR_64BIT_INODES): New AC_DEFINE to provide stat
! 	syscall being able to handle 64bit inodes.
! 	* config.in: Regenerate.
! 	* configure: Regenerate.
! 	* incpath.c (HOST_STAT_FOR_64BIT_INODES): New define.
! 	(remove_duplicates): Use it.
  
! 2022-01-12  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/103551
! 	* tree-vrp.c (execute_ranger_vrp): Always set EDGE_EXECUTABLE.
  
! 2022-01-12  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103990
! 	* tree-pass.h (tail_merge_optimize): Drop unused argument.
! 	* tree-ssa-tail-merge.c (tail_merge_optimize): Likewise.
! 	* tree-ssa-pre.c (pass_pre::execute): Retain TODO_cleanup_cfg
! 	and adjust call to tail_merge_optimize.
  
! 2022-01-12  Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	* tree-vect-loop.c (vect-analyze-loop): Handle scenario where target
! 	does not add autovectorize_vector_modes.
  
! 2022-01-12  Martin Liska  <mliska@suse.cz>
  
! 	* config/aarch64/aarch64.c (aarch64_parse_boolean_options): Use
! 	%qs where possible.
! 	(aarch64_parse_sve_width_string): Likewise.
! 	(aarch64_override_options_internal): Likewise.
! 	(aarch64_print_hint_for_extensions): Likewise.
! 	(aarch64_validate_sls_mitigation): Likewise.
! 	(aarch64_handle_attr_arch): Likewise.
! 	(aarch64_handle_attr_cpu): Likewise.
! 	(aarch64_handle_attr_tune): Likewise.
! 	(aarch64_handle_attr_isa_flags): Likewise.
  
! 2022-01-12  Martin Liska  <mliska@suse.cz>
  
! 	* config.gcc: Include elfos.h before ${tm_file}.
  
! 2022-01-12  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/cris.c: Quote identifiers in parameters to error
! 	and internal_error, and remove extraneous spaces with punctuation.
! 	* config/cris/cris.h (CRIS_ASSERT): When passing on stringified
! 	expression to internal_error, pass it as a parameter instead of
! 	appending it to the format part.
  
! 2022-01-12  Hans-Peter Nilsson  <hp@axis.com>
  
! 	* config/cris/cris.c (cris_postdbr_cmpelim): Parenthesize
! 	parameter to as_a.
  
! 2022-01-11  qing zhao  <qing.zhao@oracle.com>
  
! 	* gimplify.c (gimple_add_init_for_auto_var): Delete the 3rd argument.
! 	Change the 3rd argument of function .DEFERRED_INIT to the name of the
! 	decl.
! 	(gimplify_decl_expr): Delete the 3rd argument when call
! 	gimple_add_init_for_auto_var.
! 	* internal-fn.c (expand_DEFERRED_INIT): Update comments to reflect
! 	the 3rd argument change of function .DEFERRED_INIT.
! 	* tree-cfg.c (verify_gimple_call): Update comments and verification
! 	to reflect the 3rd argument change of function .DEFERRED_INIT.
! 	* tree-sra.c (generate_subtree_deferred_init): Delete the 3rd argument.
! 	(sra_modify_deferred_init): Change the 3rd argument of function
! 	.DEFERRED_INIT to the name of the decl.
  
! 2022-01-11  Thomas Koenig  <tkoenig@gcc.gnu.org>
  
! 	* flag-types.h (enum gfc_convert): Add flags for
! 	conversion.
  
! 2022-01-11  Michael Meissner  <meissner@the-meissners.org>
  
! 	* config/rs6000/rs6000.c (rs6000_option_override_internal): Remove
! 	checks for only C/C++ front ends before allowing the long double
! 	format to change without a warning.
  
! 2022-01-11  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/103974
! 	* ira-int.h (ira_subloop_allocnos_can_differ_p): Take an
! 	extra argument, default true, that says whether old-reload
! 	targets should be excluded.
! 	* ira-color.c (color_pass): Pass false.
  
! 2022-01-11  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/103861
! 	* config/i386/mmx.md (vcond<mode><mode>):
! 	Use VI_16_32 mode iterator.  Enable for TARGET_SSE4_1.
! 	(vcondu<mode><mode>): Ditto.
! 	(vcond_mask_<mode><mode>): Ditto.
! 	(mmx_pblendvb_v8qi): Rename from mmx_pblendvb64.
! 	(mmx_pblendvb_<mode>): Rename from mmx_pblendvb32.
! 	Use VI_16_32 mode iterator.
! 	* config/i386/i386-expand.c (ix86_expand_sse_movcc):
! 	Update for rename.  Handle V2QImode.
! 	(expand_vec_perm_blend): Update for rename.
  
! 2022-01-11  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/101597
! 	* tree.def (OBJ_TYPE_REF): Document type of OBJ_TYPE_REF_TOKEN.
  
! 2022-01-11  Siddhesh Poyarekar  <siddhesh@gotplt.org>
  
! 	PR middle-end/70090
! 	* tree-object-size.c (size_valid_p): New function.
! 	(size_for_offset): Remove OFFSET constness assertion.
! 	(addr_object_size): Build dynamic expressions for object
! 	sizes and use size_valid_p to decide if it is valid for the
! 	given OBJECT_SIZE_TYPE.
! 	(compute_builtin_object_size): Allow dynamic offsets when
! 	computing size at O0.
! 	(call_object_size): Call size_valid_p.
! 	(plus_stmt_object_size): Allow non-constant offset and use
! 	size_valid_p to decide if it is valid for the given
! 	OBJECT_SIZE_TYPE.
  
! 2022-01-11  Siddhesh Poyarekar  <siddhesh@gotplt.org>
  
! 	PR middle-end/70090
! 	* tree-object-size.c (alloc_object_size): Make and return
! 	non-constant size expression.
! 	(call_object_size): Return expression or unknown based on
! 	whether dynamic object size is requested.
  
! 2022-01-11  Siddhesh Poyarekar  <siddhesh@gotplt.org>
  
! 	PR middle-end/70090
! 	* tree-object-size.c: Include tree-dfa.h.
! 	(parm_object_size): New function.
! 	(collect_object_sizes_for): Call it.
  
! 2022-01-11  Siddhesh Poyarekar  <siddhesh@gotplt.org>
  
! 	PR middle-end/70090
! 	* builtins.c (fold_builtin_object_size): Adjust for dynamic size
! 	expressions.
! 	* tree-object-size.c: Include gimplify-me.h.
! 	(struct object_size_info): New member UNKNOWNS.
! 	(size_initval_p, size_usable_p, object_sizes_get_raw): New
! 	functions.
! 	(object_sizes_get): Return suitable gimple variable for
! 	object size.
! 	(bundle_sizes): New function.
! 	(object_sizes_set): Use it and handle dynamic object size
! 	expressions.
! 	(object_sizes_set_temp): New function.
! 	(size_for_offset): Adjust for dynamic size expressions.
! 	(emit_phi_nodes, propagate_unknowns, gimplify_size_expressions):
! 	New functions.
! 	(compute_builtin_object_size): Call gimplify_size_expressions
! 	for OST_DYNAMIC.
! 	(dynamic_object_size): New function.
! 	(cond_expr_object_size): Use it.
! 	(phi_dynamic_object_size): New function.
! 	(collect_object_sizes_for): Call it for OST_DYNAMIC.  Adjust to
! 	accommodate dynamic object sizes.
  
! 2022-01-11  Siddhesh Poyarekar  <siddhesh@gotplt.org>
! 	    Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/103961
! 	* tree-object-size.c (plus_stmt_object_size): Always avoid
! 	computing offset for -1 size.
  
! 2022-01-11  Andrew MacLeod  <amacleod@redhat.com>
  
! 	PR tree-optimization/103821
! 	* range-op.cc (range_operator::fold_range): Only do precise ranges
! 	when there are not too many subranges.
  
! 2022-01-11  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	* ira-costs.c (ira_tune_allocno_costs): Fix missing rclass
! 	definition in IRA_HARD_REGNO_ADD_COST_MULTIPLIER code.
  
! 2022-01-11  Roger Sayle  <roger@nextmovesoftware.com>
! 	    Richard Biener  <rguenther@suse.de>
  
! 	* tree-ssa-math-opts.c (struct widen_mul_stats): Add a
! 	highpart_mults_inserted field.
! 	(convert_mult_to_highpart): New function to convert right shift
! 	of a widening multiply into a MULT_HIGHPART_EXPR.
! 	(math_opts_dom_walker::after_dom_children) [RSHIFT_EXPR]:
! 	Call new convert_mult_to_highpart function.
! 	(pass_optimize_widening_mul::execute): Add a statistics counter
! 	for tracking "highpart multiplications inserted" events.
  
! 2022-01-11  Xionghu Luo  <luoxhu@linux.ibm.com>
  
! 	PR target/102239
! 	* config/rs6000/rs6000-protos.h (rs6000_is_valid_rotate_dot_mask): New
  	declare.
! 	* config/rs6000/rs6000.c (rs6000_is_valid_rotate_dot_mask): New
! 	function.
! 	* config/rs6000/rs6000.md (*branch_anddi3_dot): New.
  
! 2022-01-11  Olivier Hainque  <hainque@adacore.com>
  
! 	* gcc.c (driver_handle_option): State --sysroot as
! 	validated.
  
! 2022-01-11  Kewen Lin  <linkw@linux.ibm.com>
  
! 	* config/rs6000/rs6000.c (rs6000_disable_incompatible_switches): Remove
! 	useless related to option -mno-power10.
  
! 2022-01-11  Haochen Jiang  <haochen.jiang@intel.com>
  
! 	PR target/53652
! 	* config/i386/sse.md (*andnot<mode>3): Extend predicate of
! 	operands[1] from register_operand to vector_operand.
  
! 2022-01-10  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/103861
! 	* config/i386/i386-expand.c (ix86_expand_int_sse_cmp):
! 	Handle V2QImode.
! 	* config/i386/mmx.md (<sat_plusminus:insn><mode>3):
! 	Use VI1_16_32 mode iterator.
! 	(*eq<mode>3): Ditto.
! 	(*gt<mode>3): Ditto.
! 	(*xop_maskcmp<mode>3): Ditto.
! 	(*xop_maskcmp_uns<mode>3): Ditto.
! 	(vec_cmp<mode><mode>): Ditto.
! 	(vec_cmpu<mode><mode>): Ditto.
  
! 2022-01-10  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103948
! 	* tree-vect-generic.c (expand_vector_condition): Return true if
! 	all ones vector is returned for true, all zeros vector for false
! 	and the target defines corresponding vec_cmp{,u}MN named RTX pattern.
  
! 2022-01-10  Paul A. Clarke  <pc@us.ibm.com>
  
! 	* config/rs6000/smmintrin.h (_mm_blendv_epi8): Use vec_blendv
! 	when _ARCH_PWR10. Use signed types.
! 	(_mm_blendv_ps): Use vec_blendv when _ARCH_PWR10.
! 	(_mm_blendv_pd): Likewise.
  
! 2022-01-10  Andre Vieira  <andre.simoesdiasvieira@arm.com>
  
! 	* tree-vectorizer.c (better_epilogue_loop_than_p): Round factors up for
! 	epilogue costing.
! 	* tree-vect-loop.c (vect_analyze_loop): Re-analyze all modes for
! 	epilogues, unless we are guaranteed that we can't have partial vectors.
! 	* genopinit.c: (partial_vectors_supported): Generate new function.
  
! 2022-01-10  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/102024
! 	* config/i386/i386.c (classify_argument): Add zero_width_bitfields
! 	argument, when seeing DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD bitfields,
! 	always ignore them, when seeing other zero sized bitfields, either
! 	set zero_width_bitfields to 1 and ignore it or if equal to 2 process
! 	it.  Pass it to recursive calls.  Add wrapper
! 	with old arguments and diagnose ABI differences for C structures
! 	with zero width bitfields.  Formatting fixes.
  
! 2022-01-10  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/98782
! 	* ira-int.h (ira_soft_conflict): Declare.
! 	* ira-color.c (max_soft_conflict_loop_depth): New constant.
! 	(ira_soft_conflict): New function.
! 	(spill_soft_conflicts): Likewise.
! 	(assign_hard_reg): Use them to handle the case described by
! 	the comment above ira_soft_conflict.
! 	(improve_allocation): Likewise.
! 	* ira.c (check_allocation): Allow allocnos with "soft" conflicts
! 	to share the same register.
  
! 2022-01-10  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/98782
! 	* ira-int.h (ira_caller_save_cost): New function.
! 	(ira_caller_save_loop_spill_p): Likewise.
! 	* ira-build.c (ira_propagate_hard_reg_costs): Test whether it is
! 	cheaper to spill a call-clobbered register throughout a loop rather
! 	than spill it around each individual call.  If so, treat all
! 	call-clobbered registers as conflicts and...
! 	(propagate_allocno_info): ...do not propagate call information
! 	from the child to the parent.
! 	* ira-color.c (move_spill_restore): Update accordingly.
! 	* ira-costs.c (ira_tune_allocno_costs): Use ira_caller_save_cost.
  
! 2022-01-10  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/98782
! 	* ira-int.h (ira_allocno::might_conflict_with_parent_p): New field.
! 	(ALLOCNO_MIGHT_CONFLICT_WITH_PARENT_P): New macro.
! 	(ira_single_region_allocno_p): New function.
! 	(ira_total_conflict_hard_regs): Likewise.
! 	* ira-build.c (ira_create_allocno): Initialize
! 	ALLOCNO_MIGHT_CONFLICT_WITH_PARENT_P.
! 	(ira_propagate_hard_reg_costs): New function.
! 	(propagate_allocno_info): Use it.  Try to avoid propagating
! 	hard register conflicts to parent allocnos if we can handle
! 	the conflicts by spilling instead.  Limit the propagated
! 	register costs to the cost of spilling throughout the child loop.
! 	* ira-color.c (color_pass): Use ira_single_region_allocno_p to
! 	test whether a child and parent allocno can share the same
! 	register.
! 	(move_spill_restore): Adjust for the new behavior of
! 	propagate_allocno_info.
  
! 2022-01-10  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/98782
! 	* ira-int.h (ira_subloop_allocnos_can_differ_p): New function,
! 	extracted from...
! 	* ira-color.c (color_pass): ...here.
  
! 2022-01-10  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/98782
! 	* ira-color.c (color_pass): Add comments to describe the spill costs.
! 	(move_spill_restore): Likewise.  Fix reversed calculation.
  
! 2022-01-10  Richard Sandiford  <richard.sandiford@arm.com>
  
! 	PR rtl-optimization/98782
! 	* ira-int.h (ira_loop_border_costs): New class.
! 	* ira-color.c (ira_loop_border_costs::ira_loop_border_costs):
! 	New constructor.
! 	(calculate_allocno_spill_cost): Use ira_loop_border_costs.
! 	(color_pass): Likewise.
! 	(move_spill_restore): Likewise.
  
! 2022-01-10  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR target/103465
! 	* coretypes.h (unwind_info_type): Swap UI_SEH and UI_TARGET.
  
! 2022-01-10  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/100359
! 	* tree-ssa-loop-ivcanon.c (try_unroll_loop_completely):
! 	Allow non-growing peeling with !allow_peel and UL_ALL.
  
! 2022-01-08  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	* config/i386/i386-expand.c (ix86_expand_vector_move): Add
! 	special case for TImode to V1TImode moves, going via V2DImode.
  
! 2022-01-08  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/89074
! 	* match.pd ((ptr) (x p+ y) p+ z -> (ptr) (x p+ (y + z))): New GENERIC
! 	simplification.
  
! 2022-01-08  David Malcolm  <dmalcolm@redhat.com>
  
! 	* doc/analyzer.texi
! 	(Special Functions for Debugging the Analyzer): Document
! 	__analyzer_dump_escaped.
  
! 2022-01-08  David Malcolm  <dmalcolm@redhat.com>
  
! 	* doc/analyzer.texi (Other Debugging Techniques): Document
! 	region::is_named_decl_p.
  
! 2022-01-07  Andrew Pinski  <apinski@marvell.com>
  
! 	PR target/102941
! 	* config/arm/aarch-common.c (arm_md_asm_adjust):
! 	Use a temp if !REG_P.
  
! 2022-01-07  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	* config/i386/mmx.md (*move<V_32:mode>_internal): Add isa attribute.
! 	(*movv2qi_internal): Remve sse2 requirement for alternatives 4,5.
  
! 2022-01-07  liuhongt  <hongtao.liu@intel.com>
  
! 	PR rtl-optimization/103750
! 	* fwprop.c (forward_propagate_into): Allow propagations from
! 	inner loop to outer loop.
  
! 2022-01-07  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	* config/nvptx/nvptx.md (*cnot<mode>2): New define_insn.
  
! 2022-01-07  Haochen Gui  <guihaoc@gcc.gnu.org>
  
! 	* config/rs6000/rs6000.md (rs6000_mffscrni): Define.
! 	(rs6000_set_fpscr_rn): Change the type of operand[0] from DI to SI.
! 	Call gen_rs6000_mffscrni when operand[0] is a const_0_to_3_operand.
  
! 2022-01-07  liuhongt  <hongtao.liu@intel.com>
  
! 	* config/i386/sse.md
! 	(*<avx512>_eq<mode>3<mask_scalar_merge_name>_1): Extend to
! 	UNSPEC_PCMP_UNSIGNED.
  
! 2022-01-07  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/103753
! 	* config/i386/i386-expand.c (ix86_expand_vector_set): Not use
! 	gen_avx2_pblendph_1 when elt == 0.
! 	* config/i386/sse.md (avx2_pblendph): Rename to ..
! 	(avx2_pblend<ssemodesuffix>_1).. this, and extend to V16HI.
! 	(*avx2_pblendw): Rename to ..
! 	(*avx2_pblend<ssemodesuffix>): .. this, and extend to V16HF.
! 	(avx2_pblendw): Rename to ..
! 	(*avx2_pblend<ssemodesuffix>): .. this, and extend to V16HF.
! 	(blendsuf): Removed.
! 	(sse4_1_pblend<blendsuf>): Renamed to ..
! 	(sse4_1_pblend<ssemodesuffix>): .. this.
  
! 2022-01-06  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/103925
! 	* config/i386/i386.c (ix86_output_indirect_function_return):
! 	Generate INT3 after indirect jmp for -mharden-sls=indirect-jmp.
  
! 2022-01-06  H.J. Lu  <hjl.tools@gmail.com>
  
! 	PR target/102952
! 	* config/i386/i386-opts.h (harden_sls): Replace
! 	harden_sls_indirect_branch with harden_sls_indirect_jmp.
! 	* config/i386/i386.c (ix86_output_jmp_thunk_or_indirect):
! 	Likewise.
! 	(ix86_output_indirect_jmp): Likewise.
! 	(ix86_output_call_insn): Likewise.
! 	* config/i386/i386.opt: Replace indirect-branch with
! 	indirect-jmp.  Replace harden_sls_indirect_branch with
! 	harden_sls_indirect_jmp.
! 	* doc/invoke.texi (-harden-sls=): Replace indirect-branch with
! 	indirect-jmp.
  
! 2022-01-06  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	* config/i386/i386.c (ix86_output_ssemov) <MODE_DI>:
! 	Add %q modifier for operands in general registers.
! 	<MODE_SI>: Add %q modifier for operands in general registers.
! 	* config/i386/i386.md (*movhi_internal): Change type attribute of
! 	xmm-gpr interunit alternatives 9,10 to ssemov and mode attribute
! 	to SImode for non-avx512fp16 targets.
! 	(*movhf_internal): Ditto for xmm-gpr interunit alternatives 6,8.
! 	* config/i386/mmx.md (*movv2qi_internal):
! 	Ditto for xmm-gpr interunit alternatives 8,9.
  
! 2022-01-06  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* common/config/riscv/riscv-common.c (riscv_implied_info): Add
! 	vector extensions.
! 	(riscv_ext_version_table): Add version info for vector extensions.
! 	(riscv_ext_flag_table): Add option mask for vector extensions.
! 	* config/riscv/riscv-opts.h (MASK_VECTOR_EEW_32): New.
! 	(MASK_VECTOR_EEW_64): New.
! 	(MASK_VECTOR_EEW_FP_32): New.
! 	(MASK_VECTOR_EEW_FP_64): New.
! 	(MASK_ZVL32B): New.
! 	(MASK_ZVL64B): New.
! 	(MASK_ZVL128B): New.
! 	(MASK_ZVL256B): New.
! 	(MASK_ZVL512B): New.
! 	(MASK_ZVL1024B): New.
! 	(MASK_ZVL2048B): New.
! 	(MASK_ZVL4096B): New.
! 	(MASK_ZVL8192B): New.
! 	(MASK_ZVL16384B): New.
! 	(MASK_ZVL32768B): New.
! 	(MASK_ZVL65536B): New.
! 	(TARGET_ZVL32B): New.
! 	(TARGET_ZVL64B): New.
! 	(TARGET_ZVL128B): New.
! 	(TARGET_ZVL256B): New.
! 	(TARGET_ZVL512B): New.
! 	(TARGET_ZVL1024B): New.
! 	(TARGET_ZVL2048B): New.
! 	(TARGET_ZVL4096B): New.
! 	(TARGET_ZVL8192B): New.
! 	(TARGET_ZVL16384B): New.
! 	(TARGET_ZVL32768B): New.
! 	(TARGET_ZVL65536B): New.
! 	* config/riscv/riscv.opt (Mask(VECTOR)): New.
! 	(riscv_vector_eew_flags): New.
! 	(riscv_zvl_flags): New.
  
! 2022-01-06  Kito Cheng  <kito.cheng@sifive.com>
  
! 	* common/config/riscv/riscv-common.c
! 	(riscv_subset_list::parse_multiletter_ext): Allow ext. name has
! 	digit.
  
! 2022-01-06  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR tree-optimization/103899
! 	* expr.c (expand_expr_real_1): Add a workaround for bogus uninit
! 	warning by moving context variable to the only spot where it is used
! 	and moving gcc_assert into if body.
  
! 2022-01-06  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/103908
! 	* ifcvt.c (bb_valid_for_noce_process_p): Punt on bbs ending with
! 	asm goto.
  
! 2022-01-05  Bill Schmidt  <wschmidt@linux.ibm.com>
  
! 	PR target/103622
! 	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
! 	Skip over instances with undefined function types.
  
! 2022-01-05  Andrew Pinski  <apinski@marvell.com>
  
! 	PR target/103910
! 	* config/i386/i386.h (x86_mfence): Mark with GTY.
  
! 2022-01-05  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/103861
! 	* config/i386/mmx.md (VI_16_32): New mode iterator.
! 	(VI1_16_32): Ditto.
! 	(mmxvecsize): Handle V2QI mode.
! 	(<smaxmin:code><mode>3): Rename from <smaxmin:code>v4qi3.
! 	Use VI1_16_32 mode iterator.
! 	(<umaxmin:code><mode>3): Rename from <umaxmin:code>v4qi3.
! 	Use VI1_16_32 mode iterator.
! 	(abs<mode>2): Use VI_16_32 mode iterator.
! 	(uavgv2qi3_ceil): New insn pattern.
  
! 2022-01-05  Martin Sebor  <msebor@redhat.com>
  
! 	* gimple-ssa-warn-access.cc (pass_waccess::maybe_warn_memmodel): Use
! 	%qs to avoid -Wformat-diag.
  
! 2022-01-05  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/103915
! 	* config/i386/mmx.md (one_cmplv2qi2): Change
! 	alternatives 1,2 type from sselog to sselog1.
  
! 2022-01-05  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/103905
! 	* config/i386/i386-expand.c (expand_vec_perm_pshufb): Fix number of
! 	narrow mode remapped elements for !one_operand_p case.
  
! 2022-01-05  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103816
! 	* tree-vect-data-refs.c (vect_analyze_group_access_1): Also
! 	check DR_GROUP_GAP compute for overflow and representability.
  
! 2022-01-05  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR fortran/103691
! 	* gimple-fold.c (fold_stmt_1): Don't call maybe_fold_reference
! 	for DEBUG stmts with ADDR_EXPR gimple_debug_bind_get_value,
! 	it can do unwanted rhs folding like &a[0] into &2.0 etc.
  
! 2022-01-05  Kewen Lin  <linkw@linux.ibm.com>
  
! 	PR ipa/102059
! 	* config/rs6000/rs6000.c (TARGET_NEED_IPA_FN_TARGET_INFO): New macro.
! 	(TARGET_UPDATE_IPA_FN_TARGET_INFO): Likewise.
! 	(rs6000_need_ipa_fn_target_info): New function.
! 	(rs6000_update_ipa_fn_target_info): Likewise.
! 	(rs6000_can_inline_p): Adjust for ipa function summary target info.
! 	* config/rs6000/rs6000.h (RS6000_FN_TARGET_INFO_HTM): New macro.
! 	* ipa-fnsummary.c (ipa_dump_fn_summary): Adjust for ipa function
! 	summary target info.
! 	(analyze_function_body): Adjust for ipa function summary target info
! 	and call hook rs6000_need_ipa_fn_target_info and
! 	rs6000_update_ipa_fn_target_info.
! 	(ipa_merge_fn_summary_after_inlining): Adjust for ipa function summary
! 	target info.
! 	(inline_read_section): Likewise.
! 	(ipa_fn_summary_write): Likewise.
! 	* ipa-fnsummary.h (ipa_fn_summary::target_info): New member.
! 	* doc/tm.texi: Regenerate.
! 	* doc/tm.texi.in (TARGET_UPDATE_IPA_FN_TARGET_INFO): Document new hook.
! 	(TARGET_NEED_IPA_FN_TARGET_INFO): Likewise.
! 	* target.def (update_ipa_fn_target_info): New hook.
! 	(need_ipa_fn_target_info): Likewise.
! 	* targhooks.c (default_need_ipa_fn_target_info): New function.
! 	(default_update_ipa_fn_target_info): Likewise.
! 	* targhooks.h (default_update_ipa_fn_target_info): New declare.
! 	(default_need_ipa_fn_target_info): Likewise.
  
! 2022-01-04  Martin Sebor  <msebor@redhat.com>
  
! 	PR middle-end/99612
! 	* builtins.c (get_memmodel): Move warning code to
! 	gimple-ssa-warn-access.cc.
! 	(expand_builtin_atomic_compare_exchange): Same.
! 	(expand_ifn_atomic_compare_exchange): Same.
! 	(expand_builtin_atomic_load): Same.
! 	(expand_builtin_atomic_store): Same.
! 	(expand_builtin_atomic_clear): Same.
! 	* doc/extend.texi (__atomic_exchange_n): Update valid memory
! 	models.
! 	* gimple-ssa-warn-access.cc (memmodel_to_uhwi): New function.
! 	(struct memmodel_pair): New struct.
! 	(memmodel_name): New function.
! 	(pass_waccess::maybe_warn_memmodel): New function.
! 	(pass_waccess::check_atomic_memmodel): New function.
! 	(pass_waccess::check_atomic_builtin): Handle memory model.
! 	* input.c (expansion_point_location_if_in_system_header): Return
! 	original location if expansion location is in a system header.
  
! 2022-01-04  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/103861
! 	* config/i386/mmx.md (one_cmplv2qi3): New insn pattern.
! 	(one_cmplv2qi3 splitters): New post-reload splitters.
! 	(*andnotv2qi3): New insn pattern.
! 	(andnotv2qi3 splitters): New post-reload splitters.
! 	(<any_logic:code>v2qi3): New insn pattern.
! 	(<any_logic:insn>v2qi3 splitters): New post-reload splitters.
  
! 2022-01-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103800
! 	* tree-vect-loop.c (vectorizable_phi): Remove assert and
! 	expand comment.
  
! 2022-01-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103690
! 	* tree-pass.h (tail_merge_optimize): Adjust.
! 	* tree-ssa-tail-merge.c (tail_merge_optimize): Pass in whether
! 	to re-split critical edges, move CFG cleanup ...
! 	* tree-ssa-pre.c (pass_pre::execute): ... here, before
! 	simple_dce_from_worklist and delay freeing inserted_exprs from
! 	...
! 	(fini_pre): .. here.
  
! 2022-01-04  Roger Sayle  <roger@nextmovesoftware.com>
  
! 	* config/nvptx/nvptx.h (STORE_FLAG_VALUE): Change to 1.
! 	* config/nvptx/nvptx.md (movbi): Use P1 constraint for true.
! 	(setcc_from_bi): Remove SImode specific pattern.
! 	(setcc<mode>_from_bi): Provide more general HSDIM pattern.
! 	(extendbi<mode>2, zeroextendbi<mode>2): Provide instructions
! 	for sign- and zero-extending BImode predicates to integers.
! 	(setcc_int<mode>): Remove previous (-1-based) instructions.
! 	(cstorebi4): Remove BImode to SImode specific expander.
! 	(cstore<mode>4): Fix indentation.  Expand using setccsi_from_bi.
! 	(cstore<mode>4): For both integer and floating point modes.
  
! 2022-01-04  Olivier Hainque  <hainque@adacore.com>
  
! 	* gcc.c (driver_handle_option): do_save --sysroot.
  
! 2022-01-04  Richard Biener  <rguenther@suse.de>
  
! 	PR tree-optimization/103864
! 	PR tree-optimization/103544
! 	* tree-vect-slp.c (vect_analyze_slp_instance): Exclude
! 	reductions wrapped in conversions from SLP handling.
! 	(vect_analyze_slp): Revert PR103544 change.
  
! 2022-01-04  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR rtl-optimization/103860
! 	* shrink-wrap.c (try_shrink_wrapping): Don't call can_get_prologue
! 	uselessly for blocks for which it has been called already.
  
! 2022-01-04  Cui,Lili  <lili.cui@intel.com>
  
! 	* common/config/i386/cpuinfo.h (get_intel_cpu): Add new model values
! 	to Alderlake and Rocketlake.
  
! 2022-01-04  Chung-Lin Tang  <cltang@codesourcery.com>
  
! 	PR middle-end/103643
! 	* gimplify.c (gimplify_omp_affinity): Adjust gimplify_expr of entire
! 	OMP_CLAUSE_DECL to use 'is_gimple_lvalue, fb_lvalue'
  
! 2022-01-04  liuhongt  <hongtao.liu@intel.com>
  
! 	PR target/103895
! 	* config/i386/sse.md (*bit_and_float_vector_all_ones):
! 	Force_reg operand 1 to avoid ICE.
  
! 2022-01-04  Jason Merrill  <jason@redhat.com>
  
! 	* tree-pretty-print.c (do_niy): Add spc parameter.
! 	(NIY): Pass it.
! 	(print_call_name): Add spc local variable.
  
! 2022-01-03  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/103894
! 	* config/i386/mmx.md (mov<V_32:mode>): Remove TARGET_SSE2 constraint.
! 	(mov<V_32:mode>_internal): Ditto.
! 	(*push<V_32:mode>_rex64): Ditto.
! 	(movmisalign<V_32:mode>): Ditto.
! 	(*push<V_32:mode>_rex64 splitter): Enable for
! 	TARGET_64BIT && TARGET_SSE.
! 	(*push<V_32:mode>2): Remove insn pattern.
  
! 2022-01-03  Andrew Pinski  <apinski@marvell.com>
  
! 	PR c/33193
! 	* doc/extend.texi: Extend the documentation about Complex
! 	types for casting and also rewrite the __real__/__imag__
! 	expression portion to use tables.
! 	Move __builtin_complex to the Complex type section.
  
! 2022-01-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR target/98737
! 	* internal-fn.def (ATOMIC_ADD_FETCH_CMP_0, ATOMIC_SUB_FETCH_CMP_0,
! 	ATOMIC_AND_FETCH_CMP_0, ATOMIC_OR_FETCH_CMP_0, ATOMIC_XOR_FETCH_CMP_0):
! 	New internal fns.
! 	* internal-fn.h (ATOMIC_OP_FETCH_CMP_0_EQ, ATOMIC_OP_FETCH_CMP_0_NE,
! 	ATOMIC_OP_FETCH_CMP_0_LT, ATOMIC_OP_FETCH_CMP_0_LE,
! 	ATOMIC_OP_FETCH_CMP_0_GT, ATOMIC_OP_FETCH_CMP_0_GE): New enumerators.
! 	* internal-fn.c (expand_ATOMIC_ADD_FETCH_CMP_0,
! 	expand_ATOMIC_SUB_FETCH_CMP_0, expand_ATOMIC_AND_FETCH_CMP_0,
! 	expand_ATOMIC_OR_FETCH_CMP_0, expand_ATOMIC_XOR_FETCH_CMP_0): New
! 	functions.
! 	* optabs.def (atomic_add_fetch_cmp_0_optab,
! 	atomic_sub_fetch_cmp_0_optab, atomic_and_fetch_cmp_0_optab,
! 	atomic_or_fetch_cmp_0_optab, atomic_xor_fetch_cmp_0_optab): New
! 	direct optabs.
! 	* builtins.h (expand_ifn_atomic_op_fetch_cmp_0): Declare.
! 	* builtins.c (expand_ifn_atomic_op_fetch_cmp_0): New function.
! 	* tree-ssa-ccp.c: Include internal-fn.h.
! 	(optimize_atomic_bit_test_and): Add . before internal fn call
! 	in function comment.  Change return type from void to bool and
! 	return true only if successfully replaced.
! 	(optimize_atomic_op_fetch_cmp_0): New function.
! 	(pass_fold_builtins::execute): Use optimize_atomic_op_fetch_cmp_0
! 	for BUILT_IN_ATOMIC_{ADD,SUB,AND,OR,XOR}_FETCH_{1,2,4,8,16} and
! 	BUILT_IN_SYNC_{ADD,SUB,AND,OR,XOR}_AND_FETCH_{1,2,4,8,16},
! 	for *XOR* ones only if optimize_atomic_bit_test_and failed.
! 	* config/i386/sync.md (atomic_<plusminus_mnemonic>_fetch_cmp_0<mode>,
! 	atomic_<logic>_fetch_cmp_0<mode>): New define_expand patterns.
! 	(atomic_add_fetch_cmp_0<mode>_1, atomic_sub_fetch_cmp_0<mode>_1,
! 	atomic_<logic>_fetch_cmp_0<mode>_1): New define_insn patterns.
! 	* doc/md.texi (atomic_add_fetch_cmp_0<mode>,
! 	atomic_sub_fetch_cmp_0<mode>, atomic_and_fetch_cmp_0<mode>,
! 	atomic_or_fetch_cmp_0<mode>, atomic_xor_fetch_cmp_0<mode>): Document
! 	new named patterns.
  
! 2022-01-03  Richard Biener  <rguenther@suse.de>
  
! 	PR middle-end/103851
! 	* tree-cfg.c (move_sese_region_to_fn): Always release SSA names.
  
! 2022-01-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/94716
! 	* symtab.c: Include fold-const.h.
! 	(symtab_node::equal_address_to): If folding_initializer is true,
! 	handle it like memory_accessed.  Simplify.
  
! 2022-01-03  Martin Liska  <mliska@suse.cz>
  
! 	* doc/extend.texi: Use ; for function declarations.
  
! 2022-01-03  Jakub Jelinek  <jakub@redhat.com>
  
! 	PR c++/103600
! 	* symtab.c (symtab_node::equal_address_to): Return 0 if one of
! 	VAR_DECLs has "non overlapping" attribute and rs1 != rs2.
  
! 2022-01-03  Jakub Jelinek  <jakub@redhat.com>
  
  	* gcc.c (process_command): Update copyright notice dates.
  	* gcov-dump.c (print_version): Ditto.
***************
*** 11285,11296 ****
  	* doc/install.texi: Ditto.
  	* doc/invoke.texi: Ditto.
  
! 2021-01-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	* ChangeLog-2020: Rotate ChangeLog.  New file.
  
  
! Copyright (C) 2021 Free Software Foundation, Inc.
  
  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
--- 10052,10083 ----
  	* doc/install.texi: Ditto.
  	* doc/invoke.texi: Ditto.
  
! 2022-01-02  Uroš Bizjak  <ubizjak@gmail.com>
  
! 	PR target/103861
! 	* config/i386/i386.h (VALID_SSE2_REG_MODE): Add V2QImode.
! 	(VALID_INT_MODE_P): Ditto.
! 	* config/i386/i386.c (ix86_secondary_reload): Handle
! 	V2QImode reloads from SSE register to memory.
! 	(vector_mode_supported_p): Always return true for V2QImode.
! 	* config/i386/i386.md (*subqi_ext<mode>_2): New insn pattern.
! 	(*negqi_ext<mode>_2): Ditto.
! 	* config/i386/mmx.md (movv2qi): New expander.
! 	(movmisalignv2qi): Ditto.
! 	(*movv2qi_internal): New insn pattern.
! 	(*pushv2qi2): Ditto.
! 	(negv2qi2 and splitters): Ditto.
! 	(<plusminus:insn>v2qi3 and splitters): Ditto.
! 
! 2022-01-02  John David Anglin  <danglin@gcc.gnu.org>
! 
! 	* config/pa/pa.md (atomic_storeq): Use optab_libfunc to access
! 	sync_lock_test_and_set libfunc. Call convert_memory_address to
! 	convert memory address to Pmode.
! 	(atomic_storehi, atomic_storesi, atomic_storedi): Likewise.
  
  
! Copyright (C) 2022 Free Software Foundation, Inc.
  
  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
diff -Nrcpad gcc-11.3.0/gcc/ChangeLog-2021 gcc-12.1.0/gcc/ChangeLog-2021
*** gcc-11.3.0/gcc/ChangeLog-2021	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ChangeLog-2021	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,35692 ----
+ 2021-12-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/103756
+ 	* regrename.c (find_rename_reg): Test noop_move_p on the first
+ 	non-debug insn in the chain rather than on the first insn.
+ 
+ 2021-12-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/103808
+ 	* emit-rtl.c (gen_rtx_REG_offset): Use gen_raw_REG instead of
+ 	gen_rtx_REG.
+ 
+ 2021-12-30  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/cpp.texi: Add missing dash for argument.
+ 
+ 2021-12-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/103012
+ 	* config/i386/i386-c.c (ix86_pragma_target_parse): Perform
+ 	cpp_define/cpp_undef calls with forced token locations
+ 	BUILTINS_LOCATION.
+ 	* config/arm/arm-c.c (arm_pragma_target_parse): Likewise.
+ 	* config/aarch64/aarch64-c.c (aarch64_pragma_target_parse): Likewise.
+ 	* config/s390/s390-c.c (s390_pragma_target_parse): Likewise.
+ 
+ 2021-12-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/103860
+ 	* shrink-wrap.c (try_shrink_wrapping): Make sure can_get_prologue is
+ 	called on pro even if nothing further is pushed into vec.
+ 
+ 2021-12-30  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	* loop-invariant.c (find_invariants_bb): Check profile count
+ 	before motion.
+ 	(find_invariants_body): Add argument.
+ 
+ 2021-12-29  Ian Lance Taylor  <iant@golang.org>
+ 
+ 	PR go/103847
+ 	* godump.c (go_force_record_alignment): Name the alignment
+ 	field "_".
+ 
+ 2021-12-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/103742
+ 	* tree-ssa-dce.c (make_forwarders_with_degenerate_phis): If any phi
+ 	argument is not CONSTANT_CLASS_P or SSA_NAME and any arguments are
+ 	equal, change second from hash value to lowest dest_idx from the
+ 	edges which have equal argument and resort to ensure -fcompare-debug
+ 	stability.
+ 
+ 2021-12-29  Martin Liska  <mliska@suse.cz>
+ 
+ 	* collect2.c (main): Add ld.mold.
+ 	* common.opt: Add -fuse-ld=mold.
+ 	* doc/invoke.texi: Document it.
+ 	* gcc.c (driver_handle_option): Handle -fuse-ld=mold.
+ 	* opts.c (common_handle_option): Likewise.
+ 
+ 2021-12-29  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/sse.md (vec_pack<floatprefix>_float_<mode>):
+ 	Perform gen_avx512dq_float<floatunssuffix>v2div2sf2 into a
+ 	pseudo and emit move insn into operands[0].
+ 	(fix<fixunssuffix>_truncv2sfv2di2): Use lowpart_subreg
+ 	instead of simplify_gen_subreg.
+ 	(trunc<mode><pmov_dst_3_lower>2): Perform
+ 	gen_avx512vl_truncate<mode>v<ssescalarnum>qi2 into a
+ 	pseudo and emit move insn into operands[0].
+ 	(trunc<mode><pmov_dst_4_lower>2): Perform
+ 	gen_avx512vl_truncate<mode>v<ssescalarnum>hi2 into a
+ 	pseudo and emit move insn into operands[0].
+ 	(truncv2div2si2): Perform gen_avx512vl_truncatev2div2si2 into a
+ 	pseudo and emit move insn into operands[0].
+ 	(truncv8div8qi2): Perform gen_avx512f_truncatev8div16qi2 into a
+ 	pseudo and emit move insn into operands[0].
+ 	(<any_extend:insn>v8qiv8hi2): Use lowpart_subreg
+ 	instead of simplify_gen_subreg.
+ 	(<any_extend:insn>v8qiv8si2): Ditto.
+ 	(<any_extend:insn>v4qiv4si2): Ditto.
+ 	(<any_extend:insn>v4hiv4si2): Ditto.
+ 	(<any_extend:insn>v8qiv8di2): Ditto.
+ 	(<any_extend:insn>v4qiv4di2): Ditto.
+ 	(<any_extend:insn>v2qiv2di2): Ditto.
+ 	(<any_extend:insn>v4hiv4di2): Ditto.
+ 	(<any_extend:insn>v2hiv2di2): Ditto.
+ 	(<any_extend:insn>v2siv2di2): Ditto.
+ 
+ 2021-12-29  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	PR tree-optimization/103793
+ 	* tree-ssa-loop-split.c (fix_loop_bb_probability): New function.
+ 	(split_loop): Use multiply to scale loop1's exit probability.
+ 	(do_split_loop_on_cond): Call fix_loop_bb_probability.
+ 
+ 2021-12-28  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/99968
+ 	* tree.c (verify_type): Allow enumerator with BOOLEAN_TYPE.
+ 
+ 2021-12-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/103813
+ 	* fold-const.c (fold_truth_andor_1): Punt of const_binop LSHIFT_EXPR
+ 	or RSHIFT_EXPR returns NULL.  Formatting fix.
+ 
+ 2021-12-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/103837
+ 	* loop-invariant.c (can_move_invariant_reg): Ignore DEBUG_INSNs in
+ 	the decisions whether to return false or continue and right before
+ 	returning true reset those debug insns that previously caused
+ 	returning false.
+ 
+ 2021-12-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/103838
+ 	* optabs.c (expand_doubleword_mod, expand_doubleword_divmod): Only
+ 	check newly added insns for CALL_P, not the last insn of previous
+ 	code.
+ 
+ 2021-12-28  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR driver/103465
+ 	* opts.c (finish_options): More part of diagnostics to ...
+ 	(diagnose_options): ... here. Call the function from both
+ 	finish_options and process_options.
+ 	* opts.h (diagnose_options): Declare.
+ 	* toplev.c (process_options): Call diagnose_options.
+ 
+ 2021-12-28  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/contrib.texi: Replace http:// with https.
+ 	* doc/contribute.texi: Likewise.
+ 	* doc/extend.texi: Likewise.
+ 	* doc/gccint.texi: Likewise.
+ 	* doc/gnu.texi: Likewise.
+ 	* doc/implement-c.texi: Likewise.
+ 	* doc/implement-cxx.texi: Likewise.
+ 	* doc/include/fdl.texi: Likewise.
+ 	* doc/include/gpl_v3.texi: Likewise.
+ 	* doc/install.texi: Likewise.
+ 	* doc/invoke.texi: Likewise.
+ 	* doc/passes.texi: Likewise.
+ 	* doc/service.texi: Likewise.
+ 	* doc/sourcebuild.texi: Likewise.
+ 	* doc/standards.texi: Likewise.
+ 
+ 2021-12-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/103842
+ 	* config/i386/mmx.md (divv2sf3): Use force_reg on op1.  Always perform
+ 	divv4sf3 into a pseudo and emit_move_insn into operands[0].
+ 
+ 2021-12-27  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa-protos.h: Delete
+ 	pa_maybe_emit_compare_and_swap_exchange_loop() declaration.
+ 	* config/pa/pa.c (pa_expand_compare_and_swap_loop): Delete.
+ 	(pa_maybe_emit_compare_and_swap_exchange_loop): Delete.
+ 	* config/pa/pa.md (atomic_storeq): Use __sync_lock_test_and_set
+ 	instead of pa_maybe_emit_compare_and_swap_exchange_loop.
+ 	(atomic_storehi, atomic_storesi, atomic_storedi): Likewise.
+ 
+ 2021-12-27  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/103762
+ 	* config/i386/constraints.md (BM): New constraint.
+ 	* config/i386/i386.md (m): New mode attribute.
+ 	Replace the 'm' constraint on <general_operand> with the '<m>'
+ 	constraint.
+ 	Replace the 'm' constraint on x86_64_general_operand with the
+ 	'BM' constraint.
+ 
+ 2021-12-26  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/103785
+ 	* config/i386/i386.md: Swap operand order in comments and check
+ 	AX input in any_mul_highpart peepholes.
+ 
+ 2021-12-24  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/95046
+ 	PR target/103797
+ 	* config/i386/mmx.md (divv2sf3): New instruction pattern.
+ 
+ 2021-12-24  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.c (darwin_override_options): Make a comment
+ 	more inclusive.
+ 
+ 2021-12-24  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config.gcc: Emit L2_MAX_OFILE_ALIGNMENT with suitable
+ 	values for the host.
+ 	* config/darwin.c (darwin_emit_common): Error for alignment
+ 	values > 32768.
+ 	* config/darwin.h (MAX_OFILE_ALIGNMENT): Rework to use the
+ 	configured L2_MAX_OFILE_ALIGNMENT.
+ 
+ 2021-12-24  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.c (darwin_override_options): When checking for the
+ 	flag-reorder-and-partition case, also check that it is set on.
+ 
+ 2021-12-24  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.h (OBJECT_FORMAT_MACHO): New.
+ 
+ 2021-12-23  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/103773
+ 	* config/i386/i386.md (*mov<mode>_and): New define_insn for
+ 	writing a zero to memory using AND.
+ 	(*mov<mode>_or): Extend to allow memory destination and HImode.
+ 	(*movdi_internal): Remove -Oz push/pop optimization from here.
+ 	(*movsi_internal): Likewise.
+ 	(peephole2): Perform -Oz push/pop optimization here, only for
+ 	register destinations, values other than zero, and in functions
+ 	that don't used the red zone.
+ 	(peephole2): With -Oz, convert writes of 0 or -1 to memory into
+ 	their clobber forms, i.e. *mov<mode>_and and *mov<mode>_or resp.
+ 
+ 2021-12-23  konglin1  <lingling.kong@intel.com>
+ 
+ 	* config/i386/avx512bf16intrin.h (_mm_cvtsbh_ss): Add new intrinsic.
+ 	(_mm512_cvtpbh_ps): Likewise.
+ 	(_mm512_maskz_cvtpbh_ps): Likewise.
+ 	(_mm512_mask_cvtpbh_ps): Likewise.
+ 	* config/i386/avx512bf16vlintrin.h (_mm_cvtness_sbh): Likewise.
+ 	(_mm_cvtpbh_ps): Likewise.
+ 	(_mm256_cvtpbh_ps): Likewise.
+ 	(_mm_maskz_cvtpbh_ps): Likewise.
+ 	(_mm256_maskz_cvtpbh_ps): Likewise.
+ 	(_mm_mask_cvtpbh_ps): Likewise.
+ 	(_mm256_mask_cvtpbh_ps): Likewise.
+ 
+ 2021-12-23  Feng Xue  <fxue@os.amperecomputing.com>
+ 
+ 	PR ipa/103786
+ 	* tree.c (verify_type): Fix typo.
+ 
+ 2021-12-23  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/103750
+ 	* config/i386/sse.md
+ 	(*<avx512>_cmp<V48H_AVX512VL:mode>3_zero_extend<SWI248x:mode>):
+ 	New pre_reload define_insn_and_split.
+ 	(*<avx512>_cmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>):
+ 	Ditto.
+ 	(*<avx512>_ucmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>):
+ 	Ditto.
+ 	(*<avx512>_ucmp<VI48_AVX512VL:mode>3_zero_extend<SWI248x:mode>):
+ 	Ditto.
+ 	(*<avx512>_cmp<V48H_AVX512VL:mode>3_zero_extend<SWI248x:mode>_2):
+ 	Ditto.
+ 	(*<avx512>_cmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>_2):
+ 	Ditto.
+ 	(*<avx512>_ucmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>_2):
+ 	Ditto.
+ 	(*<avx512>_ucmp<VI48_AVX512VL:mode>3_zero_extend<SWI248x:mode>_2):
+ 	Ditto.
+ 
+ 2021-12-22  Murray Steele  <murray.steele@arm.com>
+ 
+ 	* config.gcc (arm*-*-*): Add arm-mve-builtins.o to extra_objs.
+ 	* config/arm/arm-c.c (arm_pragma_arm): Handle "#pragma GCC arm".
+ 	(arm_register_target_pragmas): Register it.
+ 	* config/arm/arm-protos.h: (arm_mve::arm_handle_mve_types_h): New
+ 	prototype.
+ 	* config/arm/arm_mve_types.h: Replace MVE type definitions with
+ 	new pragma.
+ 	* config/arm/t-arm: (arm-mve-builtins.o): New target rule.
+ 	* config/arm/arm-mve-builtins.cc: New file.
+ 	* config/arm/arm-mve-builtins.def: New file.
+ 	* config/arm/arm-mve-builtins.h: New file.
+ 
+ 2021-12-22  Murray Steele  <murray.steele@arm.com>
+ 
+ 	* config/arm/arm-builtins.c (enum arm_type_qualifiers): Move to
+ 	arm_builtins.h.
+ 	(enum arm_simd_type): Move to arm-builtins.h.
+ 	(struct arm_simd_type_info): Move to arm-builtins.h.
+ 	* config/arm/arm-builtins.h (enum arm_simd_type): Move from
+ 	arm-builtins.c.
+ 	(enum arm_type_qualifiers): Move from arm-builtins.c.
+ 	(struct arm_simd_type_info): Move from arm-builtins.c.
+ 
+ 2021-12-22  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/extend.texi: Unify all function declarations in examples
+ 	where some miss trailing ';'.
+ 
+ 2021-12-22  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/extend.texi: Unify all function declarations in examples
+ 	where some miss trailing ';'.
+ 
+ 2021-12-22  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/extend.texi: Unify all function declarations in examples
+ 	where some miss trailing ';'.
+ 
+ 2021-12-22  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/extend.texi: Use uppercase letters for SSEx.
+ 
+ 2021-12-21  Jiang Haochen  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/bmiintrin.h (_tzcnt_u16): New intrinsic.
+ 	(_andn_u32): Ditto.
+ 	(_andn_u64): Ditto.
+ 
+ 2021-12-21  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	* tree-ssa-loop-im.c (bb_colder_than_loop_preheader): New
+ 	function.
+ 	(get_coldest_out_loop): New function.
+ 	(determine_max_movement): Use get_coldest_out_loop.
+ 	(move_computations_worker): Adjust and fix iteration udpate.
+ 	(class ref_in_loop_hot_body): New functor.
+ 	(ref_in_loop_hot_body::operator): New.
+ 	(can_sm_ref_p): Use for_all_locs_in_loop.
+ 	(fill_coldest_and_hotter_out_loop): New.
+ 	(tree_ssa_lim_finalize): Free coldest_outermost_loop and
+ 	hotter_than_inner_loop.
+ 	(loop_invariant_motion_in_fun): Call fill_coldest_and_hotter_out_loop.
+ 
+ 2021-12-21  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	* tree-ssa-loop-split.c (split_loop): Fix incorrect
+ 	profile_count and probability.
+ 	(do_split_loop_on_cond): Likewise.
+ 
+ 2021-12-21  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	PR middle-end/103270
+ 	* predict.c (predict_extra_loop_exits): Add loop parameter.
+ 	(predict_loops): Call with loop argument.
+ 
+ 2021-12-21  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	* config/rs6000/altivec.md (altivec_vaddu<VI_char>s): Replace
+ 	UNSPEC_VADDU with us_plus.
+ 	(altivec_vadds<VI_char>s): Replace UNSPEC_VADDS with ss_plus.
+ 	(altivec_vsubu<VI_char>s): Replace UNSPEC_VSUBU with us_minus.
+ 	(altivec_vsubs<VI_char>s): Replace UNSPEC_VSUBS with ss_minus.
+ 	(altivec_abss_<mode>): Likewise.
+ 
+ 2021-12-20  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/103772
+ 	* config/i386/sse.md (<sse2p4_1>_pinsr<ssemodesuffix>): Add
+ 	earlyclobber to (x,x,x,i) alternative.
+ 	(<sse2p4_1>_pinsr<ssemodesuffix> peephole2): Remove.
+ 	(<sse2p4_1>_pinsr<ssemodesuffix> splitter): Use output
+ 	operand as a temporary register.  Split after reload_completed.
+ 
+ 2021-12-20  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.md (any_mul_highpart): New code iterator.
+ 	(sgnprefix, s): Add attribute support for [su]mul_highpart.
+ 	(<s>mul<mode>3_highpart): Delete expander.
+ 	(<s>mul<mode>3_highpart, <s>mulsi32_highpart_zext):
+ 	New define_insn patterns.
+ 	(define_peephole2): Tweak the register allocation for the above
+ 	instructions after reload.
+ 
+ 2021-12-20  Joel Sherrill  <joel@rtems.org>
+ 
+ 	* config.gcc: Obsolete m32c-*-rtems* target.
+ 
+ 2021-12-20  Martin Liska  <mliska@suse.cz>
+ 
+ 	* opts.c (default_options_optimization): Support -Oz in -Ox option hints.
+ 
+ 2021-12-20  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103669
+ 	* ipa-modref.c (modref_eaf_analysis::analyze_ssa_name): Add deferred
+ 	parameter.
+ 	(modref_eaf_analysis::propagate): Use it.
+ 
+ 2021-12-20  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/98468
+ 	* config/i386/sse.md (*bit_and_float_vector_all_ones): New
+ 	pre-reload splitter.
+ 
+ 2021-12-19  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103766
+ 	* ipa-modref.c (modref_merge_call_site_flags): Fix early exit condition
+ 
+ 2021-12-19  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	* print-tree.c (print_node) <case tcc_declaration>: Dump
+ 	DECL_LANG_FLAG_8.
+ 
+ 2021-12-19  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-ssa-phiopt.c (gimple_simplify_phiopt): Annotate the
+ 	new sequence with the location of the conditional statement.
+ 
+ 2021-12-18  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/103611
+ 	* config/i386/i386.md (any_or_plus): New code iterator.
+ 	(define_split): Split (HI<<32)|zext(LO) into piece-wise
+ 	move instructions on !TARGET_64BIT.
+ 	* config/i386/sse.md (*vec_extractv4si_0_zext_sse4):
+ 	Restrict to TARGET_64BIT.
+ 
+ 2021-12-18  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR target/32803
+ 	* common.opt (Oz): New command line option.
+ 	* doc/invoke.texi: Document the new -Oz option.
+ 	* lto-wrapper.c (merge_and_complain, append_compiler_options):
+ 	Treat OPT_Oz as synonymous with OPT_Os.
+ 	* optc-save-gen.awk: Increase maximum value of optimize_size to 2.
+ 	* opts.c (default_options_optimization) [OPT_Oz]: Handle OPT_Oz
+ 	just like OPT_Os, except set opt->x_optimize_size to 2.
+ 	(common_handle_option): Skip OPT_Oz just like OPT_Os.
+ 	* config/i386/i386.md (*movdi_internal): Use a push/pop sequence
+ 	for suitable SImode TYPE_IMOV moves when optimize_size > 1.
+ 	(*movsi_internal): Likewise.
+ 
+ 2021-12-18  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	PR tree-optimization/103759
+ 	* tree-object-size.c (unknown, initval): Remove functions.
+ 	(size_unknown, size_initval, size_unknown_p): Operate directly
+ 	on trees.
+ 
+ 2021-12-18  François-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+ 
+ 	* config/darwin-driver.c: Make version code more future-proof.
+ 	* config.gcc: Homogeneize darwin versions.
+ 	* configure.ac: Homogeneize darwin versions.
+ 	* configure: Regenerate.
+ 
+ 2021-12-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c/103649
+ 	* attribs.c (handle_ignored_attributes_option): Create the fake
+ 	attribute with max_length == -2.
+ 	(attribute_ignored_p): New overloads.
+ 	* attribs.h (attribute_ignored_p): Declare them.
+ 	* tree-core.h (struct attribute_spec): Document that max_length
+ 	can be -2.
+ 
+ 2021-12-17  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	PR target/103624
+ 	* config/rs6000/rs6000-builtins.def (__builtin_darn): Expand to
+ 	darn_64_di.  Add {32bit} attribute.  Return long.
+ 	(__builtin_darn_32): Expand to darn_32_di.  Add {32bit} attribute.
+ 	Return long.
+ 	(__builtin_darn_raw): Expand to darn_raw_di.  Add {32bit} attribute.
+ 	Return long.
+ 	* config/rs6000/rs6000-call.c (rs6000_expand_builtin): Expand the darn
+ 	builtins to the _si variants for -m32.
+ 	* config/rs6000/rs6000.md (UNSPECV_DARN_32, UNSPECV_DARN_RAW): Delete.
+ 	(UNSPECV_DARN): Update comment.
+ 	(darn_32, darn_raw, darn): Delete.
+ 	(darn_32_<mode>, darn_64_<mode>, darn_raw_<mode> for GPR): New.
+ 	(@darn<mode> for GPR): New.
+ 
+ 2021-12-17  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-overload.def (__builtin_vec_promote): Add second
+ 	argument.
+ 
+ 2021-12-17  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/103744
+ 	* tree-vect-stmts.c (vectorizable_load): Handle multi-vector
+ 	SLP gather loads.
+ 
+ 2021-12-17  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Rename to -fstack-protector.
+ 
+ 2021-12-17  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Fix spelling issues.
+ 
+ 2021-12-17  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/103741
+ 	* tree-vect-stmts.c (vectorizable_operation): Check for boolean.
+ 
+ 2021-12-17  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin-driver.c (darwin_driver_init): Exit from the
+ 	option handling early if the command line is definitely enpty.
+ 	* config/darwin.h (SUBTARGET_DRIVER_SELF_SPECS): Remove
+ 	setting for the default content of weak_reference_mismatches.
+ 
+ 2021-12-17  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/rs6000/darwin.h: Drop trailing _x from the
+ 	builtin_decls array name.
+ 
+ 2021-12-17  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	PR target/100738
+ 	* config/i386/sse.md (*avx_cmp<mode>3_lt, *avx_cmp<mode>3_ltint):
+ 	Remove MEM_P restriction and add force_reg for operands[2].
+ 	(*avx_cmp<mode>3_ltint_not): Add new define_insn_and_split.
+ 
+ 2021-12-17  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	* builtins.def (BUILT_IN_DYNAMIC_OBJECT_SIZE): New builtin.
+ 	* tree-object-size.h: Move object size type bits enum from
+ 	tree-object-size.c and add new value OST_DYNAMIC.
+ 	* builtins.c (expand_builtin, fold_builtin_2): Handle it.
+ 	(fold_builtin_object_size): Handle new builtin and adjust for
+ 	change to compute_builtin_object_size.
+ 	* tree-object-size.c: Include builtins.h.
+ 	(compute_builtin_object_size): Adjust.
+ 	(early_object_sizes_execute_one,
+ 	dynamic_object_sizes_execute_one): New functions.
+ 	(object_sizes_execute): Rename insert_min_max_p argument to
+ 	early.  Handle BUILT_IN_DYNAMIC_OBJECT_SIZE and call the new
+ 	functions.
+ 	* doc/extend.texi (__builtin_dynamic_object_size): Document new
+ 	builtin.
+ 
+ 2021-12-17  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	* tree-object-size.h (compute_builtin_object_size): Return tree
+ 	instead of HOST_WIDE_INT.
+ 	* builtins.c (fold_builtin_object_size): Adjust.
+ 	* gimple-fold.c (gimple_fold_builtin_strncat): Likewise.
+ 	* ubsan.c (instrument_object_size): Likewise.
+ 	* tree-object-size.c (object_size): New structure.
+ 	(object_sizes): Change type to vec<object_size>.
+ 	(initval): New function.
+ 	(unknown): Use it.
+ 	(size_unknown_p, size_initval, size_unknown): New functions.
+ 	(object_sizes_unknown_p): Use it.
+ 	(object_sizes_get): Return tree.
+ 	(object_sizes_initialize): Rename from object_sizes_set_force
+ 	and set VAL parameter type as tree.  Add new parameter WHOLEVAL.
+ 	(object_sizes_set): Set VAL parameter type as tree and adjust
+ 	implementation.  Add new parameter WHOLEVAL.
+ 	(size_for_offset): New function.
+ 	(decl_init_size): Adjust comment.
+ 	(addr_object_size): Change PSIZE parameter to tree and adjust
+ 	implementation.  Add new parameter PWHOLESIZE.
+ 	(alloc_object_size): Return tree.
+ 	(compute_builtin_object_size): Return tree in PSIZE.
+ 	(expr_object_size, call_object_size, unknown_object_size):
+ 	Adjust for object_sizes_set change.
+ 	(merge_object_sizes): Drop OFFSET parameter and adjust
+ 	implementation for tree change.
+ 	(plus_stmt_object_size): Call collect_object_sizes_for directly
+ 	instead of merge_object_size and call size_for_offset to get net
+ 	size.
+ 	(cond_expr_object_size, collect_object_sizes_for,
+ 	object_sizes_execute): Adjust for change of type from
+ 	HOST_WIDE_INT to tree.
+ 	(check_for_plus_in_loops_1): Likewise and skip non-positive
+ 	offsets.
+ 
+ 2021-12-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/103681
+ 	* common.opt (fabi-version): Add v17.
+ 
+ 2021-12-16  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/103571
+ 	* config/i386/i386.h (VALID_AVX256_REG_MODE): Add V16HFmode.
+ 	(VALID_AVX256_REG_OR_OI_VHF_MODE): Replace with ...
+ 	(VALID_AVX256_REG_OR_OI_MODE): ... this.  Remove V16HFmode.
+ 	(VALID_AVX512F_SCALAR_MODE): Remove HImode and HFmode.
+ 	(VALID_AVX512FP16_SCALAR_MODE): New.
+ 	(VALID_AVX512F_REG_MODE): Add V32HFmode.
+ 	(VALID_SSE2_REG_MODE): Add V8HFmode, V4HFmode and V2HFmode.
+ 	(VALID_SSE2_REG_VHF_MODE): Remove.
+ 	(VALID_INT_MODE_P): Add V2HFmode.
+ 	* config/i386/i386.c (function_arg_advance_64):
+ 	Remove explicit mention of V16HFmode and V32HFmode.
+ 	(ix86_hard_regno_mode_ok): Remove explicit mention of XImode
+ 	and V32HFmode, use VALID_AVX512F_REG_OR_XI_MODE instead.
+ 	Use VALID_AVX512FP_SCALAR_MODE for TARGET_aVX512FP16.
+ 	Use VALID_AVX256_REG_OR_OI_MODE instead of
+ 	VALID_AVX256_REG_OR_OI_VHF_MODE and VALID_SSE2_REG_MODE instead
+ 	of VALID_SSE2_REG_VHF_MODE.
+ 	(ix86_set_reg_reg_cost): Remove usge of VALID_AVX512FP16_REG_MODE.
+ 	(ix86_vector_mode_supported): Ditto.
+ 
+ 2021-12-16  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR c++/103696
+ 	* attribs.c (decl_attributes): Check if
+ 	target_option_current_node is changed.
+ 
+ 2021-12-16  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Add missing dash.
+ 
+ 2021-12-16  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-c.c (resolution): New enum.
+ 	(resolve_vec_mul): New function.
+ 	(resolve_vec_cmpne): Likewise.
+ 	(resolve_vec_adde_sube): Likewise.
+ 	(resolve_vec_addec_subec): Likewise.
+ 	(resolve_vec_splats): Likewise.
+ 	(resolve_vec_extract): Likewise.
+ 	(resolve_vec_insert): Likewise.
+ 	(resolve_vec_step): Likewise.
+ 	(find_instance): Likewise.
+ 	(altivec_resolve_overloaded_builtin): Many cleanups.  Call factored-out
+ 	functions.  Move variable declarations closer to uses.  Add commentary.
+ 	Remove unnecessary levels of braces.  Avoid use of gotos.  Change
+ 	misleading variable names.  Use switches over if-else-if chains.
+ 
+ 2021-12-16  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+ 
+ 	PR target/103729
+ 	* config/aarch64/aarch64-simd.md (aarch64_movv8di): Allow big endian
+ 	targets to move V8DI.
+ 
+ 2021-12-16  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	PR driver/103644
+ 	* gcc.c (check_offload_target_name): Add 'default' and 'disable'
+ 	to the candidate list.
+ 
+ 2021-12-15  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* configure: Regenerate.
+ 
+ 2021-12-15  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/nvptx/nvptx-opts.h (ptx_isa): PTX_ISA_SM75 and PTX_ISA_SM80
+ 	ISA levels.
+ 	* config/nvptx/nvptx.opt: Add sm_75 and sm_80 to -misa.
+ 	* config/nvptx/nvptx.h (TARGET_SM75, TARGET_SM80):
+ 	New helper macros to conditionalize functionality on target ISA.
+ 	* config/nvptx/nvptx-c.c (nvptx_cpu_cpp_builtins): Add __PTX_SM__
+ 	support for the new ISA levels.
+ 	* config/nvptx/nvptx.c (nvptx_file_start): Add support for TARGET_SM75
+ 	and TARGET_SM80.
+ 	* config/nvptx/nvptx.md (define_c_enum "unspec"): New UNSPEC_TANH.
+ 	(define_mode_iterator HSFM): New iterator for HFmode and SFmode.
+ 	(exp2hf2): New define_insn controlled by TARGET_SM75.
+ 	(tanh<mode>2): New define_insn controlled by TARGET_SM75.
+ 	(sminhf3, smaxhf3): New define_isnns controlled by TARGET_SM80.
+ 
+ 2021-12-15  Tom de Vries  <tdevries@suse.de>
+ 
+ 	* config/nvptx/nvptx-opts.h (enum ptx_version): Add PTX_VERSION_7_0.
+ 	* config/nvptx/nvptx.c (nvptx_file_start): Handle TARGET_PTX_7_0.
+ 	* config/nvptx/nvptx.h (TARGET_PTX_7_0): New macro.
+ 	* config/nvptx/nvptx.opt (ptx_version): Add 7.0.
+ 
+ 2021-12-15  Richard Sandiford  <richard.sandiford@arm.com>
+ 	    Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/103094
+ 	* config/aarch64/aarch64.c (aarch64_short_vector_p): Return false
+ 	for structure modes, rather than ignoring the type in that case.
+ 
+ 2021-12-15  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR rtl-optimization/103350
+ 	* ree.c (add_removable_extension): Don't stop at first definition but
+ 	inspect all.
+ 
+ 2021-12-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/103619
+ 	* dwarf2cfi.c (dwf_cfa_reg): Remove gcc_assert.
+ 	(operator==, operator!=): New overloaded operators.
+ 	(dwarf2out_frame_debug_adjust_cfa, dwarf2out_frame_debug_cfa_offset,
+ 	dwarf2out_frame_debug_expr): Compare vars with cfa_reg type directly
+ 	with REG rtxes rather than with dwf_cfa_reg results on those REGs.
+ 	(create_cie_data): Use stack_pointer_rtx instead of
+ 	gen_rtx_REG (Pmode, STACK_POINTER_REGNUM).
+ 	(execute_dwarf2_frame): Use hard_frame_pointer_rtx instead of
+ 	gen_rtx_REG (Pmode, HARD_FRAME_POINTER_REGNUM).
+ 
+ 2021-12-15  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/103661
+ 	* config/i386/i386-builtins.c (fold_builtin_cpu): Compare to 0
+ 	as API expects that non-zero values are returned (do that
+ 	it mask == 31).
+ 	For "avx512vbmi2" argument, we return now 1 << 31, which is a
+ 	negative integer value.
+ 
+ 2021-12-15  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	PR target/101796
+ 	* config/i386/predicates.md (const_vector_operand):
+ 	Add new predicate.
+ 	* config/i386/sse.md(<insn><mode>3<mask_name>):
+ 	Add new define_split below.
+ 
+ 2021-12-15  Michael Meissner  <meissner@the-meissners.org>
+ 
+ 	* config/rs6000/rs6000.md (UNSPEC_XXSPLTIDP_CONST): New unspec.
+ 	(UNSPEC_XXSPLTIW_CONST): New unspec.
+ 	(movsf_hardfloat): Add support for generating XXSPLTIDP.
+ 	(mov<mode>_hardfloat32): Likewise.
+ 	(mov<mode>_hardfloat64): Likewise.
+ 	(xxspltidp_<mode>_internal): New insns.
+ 	(xxspltiw_<mode>_internal): New insns.
+ 	(splitters for SF/DFmode): Add new splitters for XXSPLTIDP.
+ 
+ 2021-12-15  Michael Meissner  <meissner@the-meissners.org>
+ 
+ 	* config/rs6000/predicates.md (easy_fp_constant): Add support for
+ 	generating XXSPLTIDP.
+ 	(vsx_prefixed_constant): Likewise.
+ 	(easy_vector_constant): Likewise.
+ 	* config/rs6000/rs6000-protos.h (constant_generates_xxspltidp):
+ 	New declaration.
+ 	* config/rs6000/rs6000.c (output_vec_const_move): Add support for
+ 	generating XXSPLTIDP.
+ 	(prefixed_xxsplti_p): Likewise.
+ 	(constant_generates_xxspltidp): New function.
+ 	* config/rs6000/rs6000.opt (-msplat-float-constant): New debug option.
+ 
+ 2021-12-15  Michael Meissner  <meissner@linux.ibm.com>
+ 
+ 	* config/rs6000/constraints.md (eP): Update comment.
+ 	* config/rs6000/predicates.md (easy_fp_constant): Add support for
+ 	generating XXSPLTIW.
+ 	(vsx_prefixed_constant): New predicate.
+ 	(easy_vector_constant): Add support for
+ 	generating XXSPLTIW.
+ 	* config/rs6000/rs6000-protos.h (prefixed_xxsplti_p): New
+ 	declaration.
+ 	(constant_generates_xxspltiw): Likewise.
+ 	* config/rs6000/rs6000.c (xxspltib_constant_p): Generate XXSPLTIW
+ 	if possible instead of XXSPLTIB and sign extending the constant.
+ 	(output_vec_const_move): Add support for XXSPLTIW.
+ 	(prefixed_xxsplti_p): New function.
+ 	(constant_generates_xxspltiw): New function.
+ 	* config/rs6000/rs6000.md (prefixed attribute): Add support to
+ 	mark XXSPLTI* instructions as being prefixed.
+ 	* config/rs6000/rs6000.opt (-msplat-word-constant): New debug
+ 	switch.
+ 	* config/rs6000/vsx.md (vsx_mov<mode>_64bit): Add support for
+ 	generating XXSPLTIW or XXSPLTIDP.
+ 	(vsx_mov<mode>_32bit): Likewise.
+ 	* doc/md.texi (PowerPC and IBM RS6000 constraints): Document the
+ 	eP constraint.
+ 
+ 2021-12-15  Michael Meissner  <meissner@the-meissners.org>
+ 
+ 	* config/rs6000/constraints.md (eQ): New constraint.
+ 	* config/rs6000/predicates.md (easy_fp_constant): Add support for
+ 	generating the LXVKQ instruction.
+ 	(easy_vector_constant_ieee128): New predicate.
+ 	(easy_vector_constant): Add support for generating the LXVKQ
+ 	instruction.
+ 	* config/rs6000/rs6000-protos.h (constant_generates_lxvkq): New
+ 	declaration.
+ 	* config/rs6000/rs6000.c (output_vec_const_move): Add support for
+ 	generating LXVKQ.
+ 	(constant_generates_lxvkq): New function.
+ 	* config/rs6000/rs6000.opt (-mieee128-constant): New debug
+ 	option.
+ 	* config/rs6000/vsx.md (vsx_mov<mode>_64bit): Add support for
+ 	generating LXVKQ.
+ 	(vsx_mov<mode>_32bit): Likewise.
+ 	* doc/md.texi (PowerPC and IBM RS6000 constraints): Document the
+ 	eQ constraint.
+ 
+ 2021-12-15  Michael Meissner  <meissner@the-meissners.org>
+ 
+ 	* config/rs6000/rs6000-protos.h (VECTOR_128BIT_BITS): New macro.
+ 	(VECTOR_128BIT_BYTES): Likewise.
+ 	(VECTOR_128BIT_HALF_WORDS): Likewise.
+ 	(VECTOR_128BIT_WORDS): Likewise.
+ 	(VECTOR_128BIT_DOUBLE_WORDS): Likewise.
+ 	(vec_const_128bit_type): New structure type.
+ 	(vec_const_128bit_to_bytes): New declaration.
+ 	* config/rs6000/rs6000.c (constant_int_to_128bit_vector): New
+ 	helper function.
+ 	(constant_fp_to_128bit_vector): New helper function.
+ 	(vec_const_128bit_to_bytes): New function.
+ 
+ 2021-12-15  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR target/100518
+ 	* builtins.c (try_store_by_multiple_pieces): Drop address
+ 	conversion to ptr_mode.
+ 
+ 2021-12-15  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR middle-end/100843
+ 	* builtins.c (try_store_by_multiple_pieces): Fail if min_len
+ 	is greater than max_len.
+ 
+ 2021-12-14  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/103682
+ 	* tree-ssa-ccp.c (optimize_atomic_bit_test_and): Check
+ 	is_gimple_assign before gimple_assign_rhs_code.
+ 
+ 2021-12-14  Sören Tempel  <soeren@soeren-tempel.net>
+ 
+ 	* ginclude/stddef.h (__DEFINED_ptrdiff_t): Add support for musl
+ 	libc typedef macro guard.
+ 	(__DEFINED_size_t): Ditto.
+ 	(__DEFINED_wchar_t): Ditto.
+ 
+ 2021-12-14  JoJo R  <rjiejie@linux.alibaba.com>
+ 
+ 	* regrename.c (find_rename_reg): Return satisfied regno
+ 	if instruction is noop move.
+ 
+ 2021-12-14  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-c.c (altivec_build_resolved_builtin): Rename
+ 	rs6000_builtin_decls_x to rs6000_builtin_decls.
+ 	(altivec_resolve_overloaded_builtin): Likewise.  Also rename
+ 	rs6000_builtin_info_x to rs6000_builtin_info.
+ 	* config/rs6000/rs6000-call.c (rs6000_invalid_builtin): Rename
+ 	rs6000_builtin_info_x to rs6000_builtin_info.
+ 	(rs6000_builtin_is_supported): Likewise.
+ 	(rs6000_gimple_fold_mma_builtin): Likewise.  Also rename
+ 	rs6000_builtin_decls_x to rs6000_builtin_decls.
+ 	(rs6000_gimple_fold_builtin): Rename rs6000_builtin_info_x to
+ 	rs6000_builtin_info.
+ 	(cpu_expand_builtin): Likewise.
+ 	(rs6000_expand_builtin): Likewise.
+ 	(rs6000_init_builtins): Likewise.  Also rename rs6000_builtin_decls_x
+ 	to rs6000_builtin_decls.
+ 	(rs6000_builtin_decl): Rename rs6000_builtin_decls_x to
+ 	rs6000_builtin_decls.
+ 	* config/rs6000/rs6000-gen-builtins.c (write_decls): In generated code,
+ 	rename rs6000_builtin_decls_x to rs6000_builtin_decls, and rename
+ 	rs6000_builtin_info_x to rs6000_builtin_info.
+ 	(write_bif_static_init): In generated code, rename
+ 	rs6000_builtin_info_x to rs6000_builtin_info.
+ 	(write_init_bif_table): In generated code, rename
+ 	rs6000_builtin_decls_x to rs6000_builtin_decls, and rename
+ 	rs6000_builtin_info_x to rs6000_builtin_info.
+ 	(write_init_ovld_table): In generated code, rename
+ 	rs6000_builtin_decls_x to rs6000_builtin_decls.
+ 	(write_init_file): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_builtin_vectorized_function):
+ 	Likewise.
+ 	(rs6000_builtin_md_vectorized_function): Likewise.
+ 	(rs6000_builtin_reciprocal): Likewise.
+ 	(add_condition_to_bb): Likewise.
+ 	(rs6000_atomic_assign_expand_fenv): Likewise.
+ 
+ 2021-12-14  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-c.c (altivec_resolve_new_overloaded_builtin):
+ 	Remove forward declaration.
+ 	(rs6000_new_builtin_type_compatible): Rename to
+ 	rs6000_builtin_type_compatible.
+ 	(rs6000_builtin_type_compatible): Remove.
+ 	(altivec_resolve_overloaded_builtin): Remove.
+ 	(altivec_build_new_resolved_builtin): Rename to
+ 	altivec_build_resolved_builtin.
+ 	(altivec_resolve_new_overloaded_builtin): Rename to
+ 	altivec_resolve_overloaded_builtin.  Remove static keyword.  Adjust
+ 	called function names.
+ 	* config/rs6000/rs6000-call.c (rs6000_expand_new_builtin): Remove
+ 	forward declaration.
+ 	(rs6000_gimple_fold_new_builtin): Likewise.
+ 	(rs6000_invalid_new_builtin): Rename to rs6000_invalid_builtin.
+ 	(rs6000_gimple_fold_builtin): Remove.
+ 	(rs6000_new_builtin_valid_without_lhs): Rename to
+ 	rs6000_builtin_valid_without_lhs.
+ 	(rs6000_new_builtin_is_supported): Rename to
+ 	rs6000_builtin_is_supported.
+ 	(rs6000_gimple_fold_new_mma_builtin): Rename to
+ 	rs6000_gimple_fold_mma_builtin.
+ 	(rs6000_gimple_fold_new_builtin): Rename to
+ 	rs6000_gimple_fold_builtin.  Remove static keyword.  Adjust called
+ 	function names.
+ 	(rs6000_expand_builtin): Remove.
+ 	(new_cpu_expand_builtin): Rename to cpu_expand_builtin.
+ 	(new_mma_expand_builtin): Rename to mma_expand_builtin.
+ 	(new_htm_spr_num): Rename to htm_spr_num.
+ 	(new_htm_expand_builtin): Rename to htm_expand_builtin.  Change name
+ 	of called function.
+ 	(rs6000_expand_new_builtin): Rename to rs6000_expand_builtin.  Remove
+ 	static keyword.  Adjust called function names.
+ 	(rs6000_new_builtin_decl): Rename to rs6000_builtin_decl.  Remove
+ 	static keyword.
+ 	(rs6000_builtin_decl): Remove.
+ 	* config/rs6000/rs6000-gen-builtins.c (write_decls): In gnerated code,
+ 	rename rs6000_new_builtin_is_supported to rs6000_builtin_is_supported.
+ 	* config/rs6000/rs6000-internal.h (rs6000_invalid_new_builtin): Rename
+ 	to rs6000_invalid_builtin.
+ 	* config/rs6000/rs6000.c (rs6000_new_builtin_vectorized_function):
+ 	Rename to rs6000_builtin_vectorized_function.
+ 	(rs6000_new_builtin_md_vectorized_function): Rename to
+ 	rs6000_builtin_md_vectorized_function.
+ 	(rs6000_builtin_vectorized_function): Remove.
+ 	(rs6000_builtin_md_vectorized_function): Remove.
+ 
+ 2021-12-14  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin.def: Delete.
+ 	* config/rs6000/rs6000-call.c (builtin_compatibility): Delete.
+ 	(builtin_description): Delete.
+ 	(builtin_hash_struct): Delete.
+ 	(builtin_hasher): Delete.
+ 	(builtin_hash_table): Delete.
+ 	(builtin_hasher::hash): Delete.
+ 	(builtin_hasher::equal): Delete.
+ 	(rs6000_builtin_info_type): Delete.
+ 	(rs6000_builtin_info): Delete.
+ 	(bdesc_compat): Delete.
+ 	(bdesc_3arg): Delete.
+ 	(bdesc_4arg): Delete.
+ 	(bdesc_dst): Delete.
+ 	(bdesc_2arg): Delete.
+ 	(bdesc_altivec_preds): Delete.
+ 	(bdesc_abs): Delete.
+ 	(bdesc_1arg): Delete.
+ 	(bdesc_0arg): Delete.
+ 	(bdesc_htm): Delete.
+ 	(bdesc_mma): Delete.
+ 	(rs6000_overloaded_builtin_p): Delete.
+ 	(rs6000_overloaded_builtin_name): Delete.
+ 	(htm_spr_num): Delete.
+ 	(rs6000_builtin_is_supported_p): Delete.
+ 	(rs6000_gimple_fold_mma_builtin): Delete.
+ 	(gt-rs6000-call.h): Remove include directive.
+ 	* config/rs6000/rs6000-protos.h (rs6000_overloaded_builtin_p): Delete.
+ 	(rs6000_builtin_is_supported_p): Delete.
+ 	(rs6000_overloaded_builtin_name): Delete.
+ 	* config/rs6000/rs6000.c (rs6000_builtin_decls): Delete.
+ 	(rs6000_debug_reg_global): Remove reference to RS6000_BUILTIN_COUNT.
+ 	* config/rs6000/rs6000.h (rs6000_builtins): Delete.
+ 	(altivec_builtin_types): Delete.
+ 	(rs6000_builtin_decls): Delete.
+ 	* config/rs6000/t-rs6000 (TM_H): Don't add rs6000-builtin.def.
+ 
+ 2021-12-14  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: Rename to...
+ 	* config/rs6000/rs6000-builtins.def: ...this.
+ 	* config/rs6000/rs6000-gen-builtins.c: Adjust header commentary.
+ 	* config/rs6000/t-rs6000 (EXTRA_GTYPE_DEPS): Rename
+ 	rs6000-builtin-new.def to rs6000-builtins.def.
+ 	(rs6000-builtins.c): Likewise.
+ 
+ 2021-12-14  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (altivec_overloaded_builtins): Remove.
+ 	* config/rs6000/rs6000.h (altivec_overloaded_builtins): Remove.
+ 
+ 2021-12-14  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/103548
+ 	* config/rs6000/mma.md (UNSPEC_MMA_ASSEMBLE): Rename unspec from this...
+ 	(UNSPEC_VSX_ASSEMBLE): ...to this.
+ 	(UNSPECV_MMA_ASSEMBLE): New unspecv.
+ 	(vsx_assemble_pair): Use UNSPEC_VSX_ASSEMBLE.
+ 	(*vsx_assemble_pair): Likewise.
+ 	(mma_assemble_acc): Use UNSPECV_MMA_ASSEMBLE.
+ 	(*mma_assemble_acc): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_split_multireg_move): Handle
+ 	UNSPEC_VOLATILE.  Use UNSPEC_VSX_ASSEMBLE and UNSPECV_MMA_ASSEMBLE.
+ 
+ 2021-12-14  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/103571
+ 	* config/i386/i386-expand.c (ix86_expand_vector_init_duplicate)
+ 	<case E_V8HFmode>: Implement for TARGET_SSE2.
+ 	<case E_V16HFmode>: Implement for TARGET_AVX.
+ 	<case E_V32HFmode>: Implement for TARGET_AVX512F.
+ 	(ix86_expand_vector_set_var): Handle V32HFmode
+ 	without TARGET_AVX512BW.
+ 	(ix86_expand_vector_extract)
+ 	<case E_V8HFmode>: Implement for TARGET_SSE2.
+ 	<case E_V16HFmode>: Implement for TARGET_AVX.
+ 	<case E_V32HFmode>: Implement for TARGET_AVX512BW.
+ 	(expand_vec_perm_broadcast_1) <case E_V8HFmode>: New.
+ 	* config/i386/sse.md (VI12HF_AVX512VL): Remove
+ 	TARGET_AVX512FP16 condition.
+ 	(V): Ditto.
+ 	(V_256_512): Ditto.
+ 	(avx_vbroadcastf128_<mode>): Use V_256H mode iterator.
+ 
+ 2021-12-14  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/darwin.h (SUBTARGET_INIT_BUILTINS): Remove
+ 	test for new_builtins_are_live and simplify.
+ 	* config/rs6000/rs6000-c.c (altivec_build_resolved_builtin): Remove
+ 	dead function.
+ 	(altivec_resolve_overloaded_builtin): Remove test for
+ 	new_builtins_are_live and simplify.
+ 	* config/rs6000/rs6000-call.c (altivec_init_builtins): Remove forward
+ 	declaration.
+ 	(builtin_function_type): Likewise.
+ 	(rs6000_common_init_builtins): Likewise.
+ 	(htm_init_builtins): Likewise.
+ 	(mma_init_builtins): Likewise.
+ 	(def_builtin): Remove dead function.
+ 	(rs6000_expand_zeroop_builtin): Likewise.
+ 	(rs6000_expand_mtfsf_builtin): Likewise.
+ 	(rs6000_expand_mtfsb_builtin): Likewise.
+ 	(rs6000_expand_set_fpscr_rn_builtin): Likewise.
+ 	(rs6000_expand_set_fpscr_drn_builtin): Likewise.
+ 	(rs6000_expand_unop_builtin): Likewise.
+ 	(altivec_expand_abs_builtin): Likewise.
+ 	(rs6000_expand_binop_builtin): Likewise.
+ 	(altivec_expand_lxvr_builtin): Likewise.
+ 	(altivec_expand_lv_builtin): Likewise.
+ 	(altivec_expand_stxvl_builtin): Likewise.
+ 	(altivec_expand_stv_builtin): Likewise.
+ 	(mma_expand_builtin): Likewise.
+ 	(htm_expand_builtin): Likewise.
+ 	(cpu_expand_builtin): Likewise.
+ 	(rs6000_expand_quaternop_builtin): Likewise.
+ 	(rs6000_expand_ternop_builtin): Likewise.
+ 	(altivec_expand_dst_builtin): Likewise.
+ 	(altivec_expand_vec_sel_builtin): Likewise.
+ 	(altivec_expand_builtin): Likewise.
+ 	(rs6000_invalid_builtin): Likewise.
+ 	(rs6000_builtin_valid_without_lhs): Likewise.
+ 	(rs6000_gimple_fold_builtin): Remove test for new_builtins_are_live and
+ 	simplify.
+ 	(rs6000_expand_builtin): Likewise.
+ 	(rs6000_init_builtins): Remove tests for new_builtins_are_live and
+ 	simplify.
+ 	(rs6000_builtin_decl): Likewise.
+ 	(altivec_init_builtins): Remove dead function.
+ 	(mma_init_builtins): Likewise.
+ 	(htm_init_builtins): Likewise.
+ 	(builtin_quaternary_function_type): Likewise.
+ 	(builtin_function_type): Likewise.
+ 	(rs6000_common_init_builtins): Likewise.
+ 	* config/rs6000/rs6000-gen-builtins.c (write_header_file): Don't
+ 	declare new_builtins_are_live.
+ 	(write_init_bif_table): In generated code, remove test for
+ 	new_builtins_are_live and simplify.
+ 	(write_init_ovld_table): Likewise.
+ 	(write_init_file): Don't initialize new_builtins_are_live.
+ 	* config/rs6000/rs6000.c (rs6000_builtin_vectorized_function): Remove
+ 	test for new_builtins_are_live and simplify.
+ 	(rs6000_builtin_md_vectorized_function): Likewise.
+ 	(rs6000_builtin_reciprocal): Likewise.
+ 	(add_condition_to_bb): Likewise.
+ 	(rs6000_atomic_assign_expand_fenv): Likewise.
+ 
+ 2021-12-14  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	PR target/103625
+ 	* config/rs6000/rs6000-builtin-new.def (__builtin_altivec_vcmpequd):
+ 	Move to power8-vector stanza.
+ 	(__builtin_altivec_vcmpequd_p): Likewise.
+ 	(__builtin_altivec_vcmpgtsd): Likewise.
+ 	(__builtin_altivec_vcmpgtsd_p): Likewise.
+ 	(__builtin_altivec_vcmpgtud): Likewise.
+ 	(__builtin_altivec_vcmpgtud_p): Likewise.
+ 
+ 2021-12-14  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	PR target/103623
+ 	* config/rs6000/rs6000-builtin-new.def (__builtin_pack_longdouble): Add
+ 	ibmld attribute.
+ 	(__builtin_unpack_longdouble): Likewise.
+ 	* config/rs6000/rs6000-call.c (rs6000_expand_new_builtin): Add special
+ 	handling for ibmld attribute.
+ 	* config/rs6000/rs6000-gen-builtins.c (attrinfo): Add isibmld.
+ 	(parse_bif_attrs): Handle ibmld.
+ 	(write_decls): Likewise.
+ 	(write_bif_static_init): Likewise.
+ 
+ 2021-12-14  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103585
+ 	* ipa-modref-tree.c (modref_access_node::range_info_useful_p): Handle
+ 	MODREF_GLOBAL_MEMORY_PARM.
+ 	(modref_access_node::dump): Likewise.
+ 	(modref_access_node::get_call_arg): Likewise.
+ 	* ipa-modref-tree.h (enum modref_special_parms): Add
+ 	MODREF_GLOBAL_MEMORY_PARM.
+ 	(modref_access_node::useful_for_kill): Handle
+ 	MODREF_GLOBAL_MEMORY_PARM.
+ 	(modref:tree::merge): Add promote_unknown_to_global.
+ 	* ipa-modref.c (verify_arg):New function.
+ 	(may_access_nonescaping_parm_p): New function.
+ 	(modref_access_analysis::record_global_memory_load): New member
+ 	function.
+ 	(modref_access_analysis::record_global_memory_store): Likewise.
+ 	(modref_access_analysis::process_fnspec): Distingush global and local
+ 	memory.
+ 	(modref_access_analysis::analyze_call): Likewise.
+ 	* tree-ssa-alias.c (ref_may_access_global_memory_p): New function.
+ 	(modref_may_conflict): Use it.
+ 
+ 2021-12-14  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c (enum aarch64_builtins):
+ 	Define AARCH64_LS64_BUILTIN_LD64B, AARCH64_LS64_BUILTIN_ST64B,
+ 	AARCH64_LS64_BUILTIN_ST64BV, AARCH64_LS64_BUILTIN_ST64BV0.
+ 	(aarch64_init_ls64_builtin_decl): Helper function.
+ 	(aarch64_init_ls64_builtins): Helper function.
+ 	(aarch64_init_ls64_builtins_types): Helper function.
+ 	(aarch64_general_init_builtins): Init LS64 intrisics for
+ 	TARGET_LS64.
+ 	(aarch64_expand_builtin_ls64): LS64 intrinsics expander.
+ 	(aarch64_general_expand_builtin): Handle aarch64_expand_builtin_ls64.
+ 	(ls64_builtins_data): New helper struct.
+ 	(v8di_UP): New define.
+ 	* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Define
+ 	__ARM_FEATURE_LS64.
+ 	* config/aarch64/aarch64.c (aarch64_classify_address): Enforce the
+ 	V8DI range (7-bit signed scaled) for both ends of the range.
+ 	* config/aarch64/aarch64-simd.md (movv8di): New pattern.
+ 	(aarch64_movv8di): New pattern.
+ 	* config/aarch64/aarch64.h (AARCH64_ISA_LS64): New define.
+ 	(TARGET_LS64): New define.
+ 	* config/aarch64/aarch64.md: Add UNSPEC_LD64B, UNSPEC_ST64B,
+ 	UNSPEC_ST64BV and UNSPEC_ST64BV0.
+ 	(ld64b): New define_insn.
+ 	(st64b): New define_insn.
+ 	(st64bv): New define_insn.
+ 	(st64bv0): New define_insn.
+ 	* config/aarch64/arm_acle.h (data512_t): New type derived from
+ 	__arm_data512_t.
+ 	(__arm_data512_t): New internal type.
+ 	(__arm_ld64b): New intrinsic.
+ 	(__arm_st64b): New intrinsic.
+ 	(__arm_st64bv): New intrinsic.
+ 	(__arm_st64bv0): New intrinsic.
+ 	* config/arm/types.md: Add new type ls64.
+ 
+ 2021-12-14  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* config/i386/t-vxworks: Drop the fPIC multilibs.
+ 
+ 2021-12-14  Fred Konrad  <konrad@adacore.com>
+ 
+ 	* config/rs6000/t-vxworks: Drop the fPIC multilib.
+ 
+ 2021-12-13  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/99531
+ 	* ira-costs.c (record_operand_costs): Do not take pseudo class
+ 	calculated on the 1st iteration into account when processing move
+ 	involving the pseudo and a hard register.
+ 
+ 2021-12-13  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/i386/i386.md (define_split any_or:SWI248 -> orb %?h):
+ 	Optimize the case where the integer constant operand is zero.
+ 
+ 2021-12-13  Doug Rupp  <rupp@adacore.com>
+ 	    Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* config/vxworks.h (VXWORKS_LINK_OS_SPEC): New spec.
+ 	(VXWORKS_BASE_LINK_SPEC): New spec, using the former.
+ 	(VXWORKS_EXTRA_LINK_SPEC): New spec for old and new VxWorks.
+ 	(VXWORKS_LINK_SPEC): Combo of BASE and EXTRA specs.
+ 	* config/rs6000/vxworks.h (VXWORKS_LINK_OS_SPEC): Empty.
+ 	(LINK_OS_EXTRA_SPEC32): Use VXWORKS_LINK_SPEC.
+ 	(LINK_OS_EXTRA_SPEC64): Likewise.
+ 
+ 2021-12-13  Fred Konrad  <konrad@adacore.com>
+ 	    Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* config/vxworks.h (VXWORKS_BASE_LIBS_RTP): Guard -lc_internal
+ 	on !shared+!non-static and document.
+ 	(VXWORKS_LIB_SPEC): Remove the bits intended to drag the
+ 	init/fini functions from libc_internal in the shared lib case.
+ 	(VX_CRTBEGIN_SPEC/VX_CRTEND_SPEC): Use vxcrtstuff objects also in
+ 	configurations with shared lib and INITFINI_ARRAY support.
+ 
+ 2021-12-13  Fred Konrad  <konrad@adacore.com>
+ 	    Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* config/vx-common.h: Define REAL_LIBGCC_SPEC since the
+ 	'-non-static' option is not standard.
+ 	* config/vxworks.h (VXWORKS_LIBGCC_SPEC): Implement the LIBGCC_SPEC
+ 	since REAL_LIBGCC_SPEC is used now.
+ 	(STARTFILE_PREFIX_SPEC): Use the PIC VSB when building shared libraries
+ 	or non-static binaries.
+ 
+ 2021-12-13  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* common.opt: Add -fipa-strict-aliasing.
+ 	* doc/invoke.texi: Document -fipa-strict-aliasing.
+ 	* ipa-modref.c (modref_access_analysis::record_access): Honor
+ 	-fipa-strict-aliasing.
+ 	(modref_access_analysis::record_access_lto): Likewise.
+ 
+ 2021-12-13  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-arches.def (armv8.8-a): Define.
+ 	* config/aarch64/aarch64.h (AARCH64_FL_V8_8): Define.
+ 	(AARCH64_FL_FOR_ARCH8_8): Define.
+ 	* doc/invoke.texi: Document -march=armv8.8-a.
+ 
+ 2021-12-13  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_expand_setmem_mops): Define.
+ 	(aarch64_expand_setmem): Adjust for TARGET_MOPS.
+ 	* config/aarch64/aarch64.h (CLEAR_RATIO): Adjust for TARGET_MOPS.
+ 	(SET_RATIO): Likewise.
+ 	* config/aarch64/aarch64.md ("unspec"): Add UNSPEC_SETMEM.
+ 	(aarch64_setmemdi): Define.
+ 	(setmemdi): Adjust for TARGET_MOPS.
+ 	* config/aarch64/aarch64.opt (aarch64-mops-memset-size-threshold):
+ 	New param.
+ 
+ 2021-12-13  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64.md (aarch64_movmemdi): Define.
+ 	(movmemdi): Define.
+ 	(unspec): Add UNSPEC_MOVMEM.
+ 	* config/aarch64/aarch64.opt (aarch64-mops-memmove-size-threshold):
+ 	New param.
+ 
+ 2021-12-13  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-option-extensions.def (mops): Define.
+ 	* config/aarch64/aarch64.c (aarch64_expand_cpymem_mops): Define.
+ 	(aarch64_expand_cpymem): Define.
+ 	* config/aarch64/aarch64.h (AARCH64_FL_MOPS): Define.
+ 	(AARCH64_ISA_MOPS): Define.
+ 	(TARGET_MOPS): Define.
+ 	(MOVE_RATIO): Adjust for TARGET_MOPS.
+ 	* config/aarch64/aarch64.md ("unspec"): Add UNSPEC_CPYMEM.
+ 	(aarch64_cpymemdi): New pattern.
+ 	(cpymemdi): Adjust for TARGET_MOPS.
+ 	* config/aarch64/aarch64.opt (aarch64-mops-memcpy-size-threshol):
+ 	New param.
+ 	* doc/invoke.texi (AArch64 Options): Document +mops.
+ 
+ 2021-12-13  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR ipa/103636
+ 	* ipa-inline.c (can_inline_edge_p): Move logic checking
+ 	no_profile_instrument_function logic to ...
+ 	(can_early_inline_edge_p): ... here.
+ 
+ 2021-12-13  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* config/vxworks/_yvals.h: #include yvals.h also if
+ 	defined(__RTP__).
+ 
+ 2021-12-13  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* config/vxworks.h (VXWORKS_OS_CPP_BUILTINS): Define
+ 	_C99 for C++.
+ 
+ 2021-12-13  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* config/t-vxworks: Clear NATIVE_SYSTEM_HEADER_DIR.
+ 	* config/vxworks.h (SYSROOT_HEADERS_SUFFIX_SPEC): Define, for
+ 	VxWorks 7 and earlier.
+ 	(VXWORKS_ADDITIONAL_CPP_SPEC): Simplify accordingly.
+ 	(STARTFILE_PREFIX_SPEC): Adjust accordingly.
+ 	* config/rs6000/vxworks.h (STARTFILE_PREFIX_SPEC): Adjust.
+ 
+ 2021-12-13  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/extend.texi: Use @item for the first @itemx entry.
+ 
+ 2021-12-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* machmode.h (gt_pch_nx): Use gt_pointer_operator as type of second
+ 	argument instead of equivalent void (*) (void *, void *, void *).
+ 	* poly-int.h (gt_pch_nx): Likewise.
+ 	* wide-int.h (gt_pch_nx): Likewise.
+ 	* config/aarch64/aarch64-sve-builtins.cc (gt_pch_nx): Likewise.
+ 
+ 2021-12-13  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103513
+ 	* ipa-fnsummary.c (evaluate_conditions_for_known_args): Do not ICE
+ 	on ternary expression.
+ 
+ 2021-12-13  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR target/103515
+ 	* attribs.c (decl_attributes): Check if target options change and
+ 	create one node if so.
+ 
+ 2021-12-12  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* Makefile.in: Remove unique-ptr-tests.o.
+ 	* selftest-run-tests.c (selftest::run_tests): Remove
+ 	unique_ptr_tests_cc_tests.
+ 	* selftest.h (unique_ptr_tests_cc_tests): Remove.
+ 	* system.h: Check INCLUDE_MEMORY instead of INCLUDE_UNIQUE_PTR
+ 	and include <memory> instead of "unique-ptr.h".
+ 	* unique-ptr-tests.cc: Removed.
+ 
+ 2021-12-12  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/nvptx/nvptx-opts.h (ptx_isa): Add PTX_ISA_SM53 ISA level
+ 	to enumeration.
+ 	* config/nvptx/nvptx.opt: Add sm_53 to -misa.
+ 	* config/nvptx/nvptx-modes.def: Add support for HFmode.
+ 	* config/nvptx/nvptx.h (TARGET_SM53):
+ 	New helper macro to conditionalize functionality on target ISA.
+ 	* config/nvptx/nvptx-c.c (nvptx_cpu_cpp_builtins): Add __PTX_SM__
+ 	support for the new ISA levels.
+ 	* config/nvptx/nvptx.c (nvtx_ptx_type_from_mode): Support new HFmode
+ 	with the ".f16" suffix/qualifier.
+ 	(nvptx_file_start): Add support for TARGET_SM53.
+ 	(nvptx_omp_device_kind_arch_isa): Add support for TARGET_SM53
+ 	and tweak TARGET_SM35.
+ 	(nvptx_scalar_mode_supported_p): Target hook with conditional
+ 	HFmode support on TARGET_SM53 and higher.
+ 	(nvptx_libgcc_floating_mode_supported_p): Likewise.
+ 	(TARGET_SCALAR_MODE_SUPPORTED_P): Use nvptx_scalar_mode_supported_p.
+ 	(TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P): Likewise, use new hook.
+ 	* config/nvptx/nvptx.md (*movhf_insn): New define_insn.
+ 	(movhf): New define_expand for HFmode moves.
+ 	(addhf3, subhf3, mulhf, extendhf<mode>2, trunc<mode>hf2): New
+ 	instructions conditional on TARGET_SM53 (i.e. -misa=sm_53).
+ 
+ 2021-12-12  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103665
+ 	* ipa-modref.c (modref_access_analysis::analyze): Terminate BB
+ 	analysis on NULL memory access.
+ 	* ipa-pure-const.c (analyze_function): Likewise.
+ 
+ 2021-12-11  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-profile.c (ipa_profile): Do not update hot bb threshold.
+ 
+ 2021-12-11  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (get_modref_function_summary): Use ultimate_alias_target.
+ 	(ignore_edge): Likewise.
+ 	(compute_parm_map): Likewise.
+ 	(modref_propagate_in_scc): Likewise.
+ 	(modref_propagate_flags_in_scc): Likewise.
+ 
+ 2021-12-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	* symtab.c (symtab_node::equal_address_to): Fix comment typo.
+ 
+ 2021-12-10  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* config/vxworks.h (LINK_SPEC): Remove %(link_target).
+ 	Change %{v:-v} to %{v:-V}.
+ 
+ 2021-12-10  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* config/t-vxworks: Remove assignment to STMP_FIXINC.
+ 
+ 2021-12-10  Martin Liska  <mliska@suse.cz>
+ 
+ 	* params.opt: Add missing dot.
+ 
+ 2021-12-10  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR ipa/103601
+ 	* ipa-modref-tree.h (useful_for_kill_p): Zero width accesses aren't
+ 	useful for kill tracking.
+ 
+ 2021-12-10  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	* config/gcn/mkoffload.c (process_asm): Process the variable table
+ 	completely differently.
+ 	(process_obj): Encode the varaible data differently.
+ 
+ 2021-12-10  Joel Hutton  <joel.hutton@arm.com>
+ 
+ 	PR tree-optimization/103523
+ 	* tree-vect-loop.c (vectorizable_induction): Check for
+ 	PLUS_EXPR/MINUS_EXPR support.
+ 
+ 2021-12-10  Cui,Lili  <lili.cui@intel.com>
+ 
+ 	* config/i386/i386.c (ix86_vector_costs::add_stmt_cost): Remove Tremont.
+ 
+ 2021-12-09  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* doc/invoke.texi (max-inline-functions-called-once-loop-depth,
+ 	max-inline-functions-called-once-insns): New parameters.
+ 	* ipa-inline.c (check_callers): Handle
+ 	param_inline_functions_called_once_loop_depth and
+ 	param_inline_functions_called_once_insns.
+ 	(edge_badness): Fix linebreaks.
+ 	* params.opt (param=max-inline-functions-called-once-loop-depth,
+ 	param=max-inline-functions-called-once-insn): New params.
+ 
+ 2021-12-09  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR tree-optimization/103215
+ 	* pointer-query.cc (access_ref::merge_ref): Extend the offset and
+ 	size of the merged object instead of using the larger.
+ 
+ 2021-12-09  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/101751
+ 	* doc/extend.texi (attribute access): Adjust.
+ 	* gimple-ssa-warn-access.cc (pass_waccess::maybe_check_access_sizes):
+ 	Treat access mode none on a void* argument as expecting as few as
+ 	zero bytes.
+ 
+ 2021-12-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR pch/71934
+ 	* config/aarch64/aarch64-sve-builtins.cc (gt_pch_nx): Change type of
+ 	second argument from function with 2 pointer arguments to function
+ 	with 3 pointer arguments.
+ 
+ 2021-12-09  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* config/aarch64/aarch64-vxworks.h (TARGET_OS_CPP_BUILTINS):
+ 	Use VX_CPU_PREFIX in CPU definitions.
+ 
+ 2021-12-09  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* pointer-query.cc (access_ref::dump): Define new function
+ 	(pointer_query::dump): Call it.
+ 	* pointer-query.h (access_ref::dump): Declare new function.
+ 
+ 2021-12-09  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* pointer-query.cc (compute_objsize_r): Add an argument.
+ 	(gimple_call_return_array): Pass a new argument to compute_objsize_r.
+ 	(access_ref::merge_ref): Same.
+ 	(access_ref::inform_access): Add an argument and use it.
+ 	(access_data::access_data): Initialize new member.
+ 	(handle_min_max_size): Pass a new argument to compute_objsize_r.
+ 	(handle_decl): New function.
+ 	(handle_array_ref): Pass a new argument to compute_objsize_r.
+ 	Avoid incrementing deref.
+ 	(set_component_ref_size): New function.
+ 	(handle_component_ref): New function.
+ 	(handle_mem_ref): Pass a new argument to compute_objsize_r.
+ 	Only increment deref after successfully computing object size.
+ 	(handle_ssa_name): New function.
+ 	(compute_objsize_r): Move code into helpers and call them.
+ 	(compute_objsize): Pass a new argument to compute_objsize_r.
+ 	* pointer-query.h (access_ref::inform_access): Add an argument.
+ 	(access_data::ostype): New member.
+ 
+ 2021-12-09  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* pointer-query.cc (access_ref::merge_ref): Define new function.
+ 	(access_ref::get_ref): Move code into merge_ref and call it.
+ 	* pointer-query.h (access_ref::merge_ref): Declare new function.
+ 
+ 2021-12-09  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* gimple-ssa-warn-restrict.c (builtin_access::builtin_access): Pass
+ 	GIMPLE statement to compute_objsize.
+ 	* pointer-query.cc (compute_objsize): Add a statement argument.
+ 	* pointer-query.h (compute_objsize): Define a new overload.
+ 
+ 2021-12-09  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* gimple-ssa-warn-access.cc (check_access): Adjust to member name
+ 	change.
+ 	(pass_waccess::check_strncmp): Same.
+ 	* pointer-query.cc (access_ref::access_ref): Remove arguments.
+ 	Simpilfy.
+ 	(access_data::access_data): Define new ctors.
+ 	(access_data::set_bound): Define new member function.
+ 	(compute_objsize_r): Remove unnecessary code.
+ 	* pointer-query.h (struct access_ref): Remove ctor arguments.
+ 	(struct access_data): Declare ctor overloads.
+ 	(access_data::dst_bndrng): New member.
+ 	(access_data::src_bndrng): New member.
+ 
+ 2021-12-09  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/103143
+ 	* pointer-query.cc (gimple_call_return_array): Call compute_objsize_r.
+ 
+ 2021-12-09  Olivier Hainque  <hainque@adacore.com>
+ 	    Rasmus Villemoes  <rv@rasmusvillemoes.dk>
+ 
+ 	* Makefile.in (T_STDINT_GCC_H): New variable, path to
+ 	stdint-gcc.h that a target configuration may override when
+ 	use_gcc_stdint is "provide".
+ 	(stmp-int-hdrs): Depend on it and copy that for
+ 	USE_GCC_INT=provide.
+ 	* config.gcc (vxworks): Revert to use_gcc_stdint=provide.
+ 	* config/t-vxworks (T_STDINT_GCC_H): Define, as vxw-stdint-gcc.h.
+ 	(vxw-stdint-gcc.h): New target, produced from the original
+ 	stdint-gcc.h.
+ 	(vxw-glimits.h): Use an automatic variable to designate the
+ 	first and only prerequisite.
+ 	* config/vxworks/stdint.h: Remove.
+ 
+ 2021-12-09  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR pch/71934
+ 	* config/host-darwin.c (SAFE_ALLOC_SIZE): Remove.
+ 	(darwin_gt_pch_get_address): Rework for relocatable PCH.
+ 	(darwin_gt_pch_use_address): Likewise.
+ 
+ 2021-12-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR pch/71934
+ 	* config/host-darwin.c (darwin_gt_pch_use_address): When reading
+ 	manually the file into mapped area, update mapped_addr as
+ 	an automatic variable rather than addr which is a reference parameter.
+ 	* config/host-hpux.c (hpux_gt_pch_use_address): When reading
+ 	manually the file into mapped area, update addr as
+ 	an automatic variable rather than base which is a reference parameter.
+ 
+ 2021-12-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR pch/71934
+ 	* coretypes.h (gt_pointer_operator): Use 3 pointer arguments instead
+ 	of two.
+ 	* gengtype.c (struct walk_type_data): Add in_nested_ptr argument.
+ 	(walk_type): Temporarily set d->in_nested_ptr around nested_ptr
+ 	handling.
+ 	(write_types_local_user_process_field): Pass a new middle pointer
+ 	to gt_pointer_operator op calls, if d->in_nested_ptr pass there
+ 	address of d->prev_val[2], otherwise NULL.
+ 	(write_types_local_process_field): Likewise.
+ 	* ggc-common.c (relocate_ptrs): Add real_ptr_p argument.  If equal
+ 	to ptr_p, do nothing, otherwise if NULL remember ptr_p's
+ 	or if non-NULL real_ptr_p's corresponding new address in
+ 	reloc_addrs_vec.
+ 	(reloc_addrs_vec): New variable.
+ 	(compare_ptr, read_uleb128, write_uleb128): New functions.
+ 	(gt_pch_save): When iterating over objects through relocate_ptrs,
+ 	save current i into state.ptrs_i.  Sort reloc_addrs_vec and emit
+ 	it as uleb128 of differences between pointer addresses into the
+ 	PCH file.
+ 	(gt_pch_restore): Allow restoring of PCH to a different address
+ 	than the preferred one, in that case adjust global pointers by bias
+ 	and also adjust by bias addresses read from the relocation table
+ 	as uleb128 differences.  Otherwise fseek over it.  Perform
+ 	gt_pch_restore_stringpool only after adjusting callbacks and for
+ 	callback adjustments also take into account the bias.
+ 	(default_gt_pch_use_address): Change type of first argument from
+ 	void * to void *&.
+ 	(mmap_gt_pch_use_address): Likewise.
+ 	* ggc-tests.c (gt_pch_nx): Pass NULL as new middle argument to op.
+ 	* hash-map.h (hash_map::pch_nx_helper): Likewise.
+ 	(gt_pch_nx): Likewise.
+ 	* hash-set.h (gt_pch_nx): Likewise.
+ 	* hash-table.h (gt_pch_nx): Likewise.
+ 	* hash-traits.h (ggc_remove::pch_nx): Likewise.
+ 	* hosthooks-def.h (default_gt_pch_use_address): Change type of first
+ 	argument from void * to void *&.
+ 	(mmap_gt_pch_use_address): Likewise.
+ 	* hosthooks.h (struct host_hooks): Change type of first argument of
+ 	gt_pch_use_address hook from void * to void *&.
+ 	* machmode.h (gt_pch_nx): Expect a callback with 3 pointers instead of
+ 	two in the middle argument.
+ 	* poly-int.h (gt_pch_nx): Likewise.
+ 	* stringpool.c (gt_pch_nx): Pass NULL as new middle argument to op.
+ 	* tree-cfg.c (gt_pch_nx): Likewise, except for LOCATION_BLOCK pass
+ 	the same &(block) twice.
+ 	* value-range.h (gt_pch_nx): Pass NULL as new middle argument to op.
+ 	* vec.h (gt_pch_nx): Likewise.
+ 	* wide-int.h (gt_pch_nx): Likewise.
+ 	* config/host-darwin.c (darwin_gt_pch_use_address): Change type of
+ 	first argument from void * to void *&.
+ 	* config/host-darwin.h (darwin_gt_pch_use_address): Likewise.
+ 	* config/host-hpux.c (hpux_gt_pch_use_address): Likewise.
+ 	* config/host-linux.c (linux_gt_pch_use_address): Likewise.  If
+ 	it couldn't succeed to mmap at the preferred location, set base
+ 	to the actual one.  Update addr in the manual reading loop instead of
+ 	base.
+ 	* config/host-netbsd.c (netbsd_gt_pch_use_address): Change type of
+ 	first argument from void * to void *&.
+ 	* config/host-openbsd.c (openbsd_gt_pch_use_address): Likewise.
+ 	* config/host-solaris.c (sol_gt_pch_use_address): Likewise.
+ 	* config/i386/host-mingw32.c (mingw32_gt_pch_use_address): Likewise.
+ 	* config/rs6000/rs6000-gen-builtins.c (write_init_file): Pass NULL
+ 	as new middle argument to op in the generated code.
+ 	* doc/gty.texi: Adjust samples for the addition of middle pointer
+ 	to gt_pointer_operator callback.
+ 
+ 2021-12-09  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR target/103097
+ 	* reg-stack.c (convert_regs_1): Move any_malformed_asm
+ 	resetting...
+ 	(reg_to_stack): ... here.
+ 
+ 2021-12-09  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR target/103302
+ 	* expr.c (emit_move_multi_word): Skip clobber during lra.
+ 
+ 2021-12-09  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR tree-optimization/103024
+ 	PR middle-end/103530
+ 	* gimple-harden-conditionals.cc (non_eh_succ_edge): New.
+ 	(pass_harden_compares::execute): Accept 1-bit integral types,
+ 	and cope with throwing compares.
+ 
+ 2021-12-08  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.h (DARWIN_PIE_SPEC): Add -no_pie when
+ 	linking mdynamic-no-pic code on macOS > 10.7.
+ 
+ 2021-12-08  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	* config/pru/pru.c (pru_section_type_flags): New function.
+ 	(TARGET_SECTION_TYPE_FLAGS): Wire it.
+ 
+ 2021-12-08  David Faust  <david.faust@oracle.com>
+ 
+ 	* config/bpf/bpf.c (handle_attr_preserve): Avoid calling
+ 	is_gimple_assign with a NULL pointer.
+ 
+ 2021-12-08  Martin Liska  <mliska@suse.cz>
+ 
+ 	* profile-count.c (profile_count::dump): Add function
+ 	that can dump to a provided buffer.
+ 	(profile_probability::dump): Likewise.
+ 	* profile-count.h: Likewise.
+ 	* tree-ssa-loop-unswitch.c (tree_unswitch_single_loop):
+ 	Use dump_printf_loc infrastructure.
+ 	(tree_unswitch_outer_loop): Likewise.
+ 	(find_loop_guard): Likewise.
+ 	(hoist_guard): Likewise.
+ 
+ 2021-12-08  Chung-Lin Tang  <cltang@codesourcery.com>
+ 
+ 	* gimplify.c (extract_base_bit_offset): Add 'tree *offsetp' parameter,
+ 	accomodate case where 'offset' return of get_inner_reference is
+ 	non-NULL.
+ 	(is_or_contains_p): Further robustify conditions.
+ 	(omp_target_reorder_clauses): In alloc/to/from sorting phase, also
+ 	move following GOMP_MAP_ALWAYS_POINTER maps along.  Add new sorting
+ 	phase where we make sure pointers with an attach/detach map are ordered
+ 	correctly.
+ 	(gimplify_scan_omp_clauses): Add modifications to avoid creating
+ 	GOMP_MAP_STRUCT and associated alloc map for attach/detach maps.
+ 
+ 2021-12-08  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/nvptx/nvptx.md (*extend_trunc_<mode>2_qi,
+ 	*extend_trunc_<mode>2_hi, *extend_trunc_di2_si): New insns.
+ 	Use cvt to perform sign-extension of truncation in one step.
+ 
+ 2021-12-08  Chung-Lin Tang  <cltang@codesourcery.com>
+ 
+ 	PR middle-end/92120
+ 	* gimplify.c ("tree-hash-traits.h"): Add include.
+ 	(gimplify_scan_omp_clauses): Change struct_map_to_clause to type
+ 	hash_map<tree_operand, tree> *. Adjust struct map handling to handle
+ 	cases of *A and A->B expressions. Under !DECL_P case of
+ 	GOMP_CLAUSE_MAP handling, add STRIP_NOPS for indir_p case, add to
+ 	struct_deref_set for map(*ptr_to_struct) cases. Add MEM_REF case when
+ 	handling component_ref_p case. Add unshare_expr and gimplification
+ 	when created GOMP_MAP_STRUCT is not a DECL. Add code to add
+ 	firstprivate pointer for *pointer-to-struct case.
+ 	(gimplify_adjust_omp_clauses): Move GOMP_MAP_STRUCT removal code for
+ 	exit data directives code to earlier position.
+ 	* omp-low.c (lower_omp_target):
+ 	Handle GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION, and
+ 	GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION map kinds.
+ 	* tree-pretty-print.c (dump_omp_clause): Likewise.
+ 
+ 2021-12-08  Andrew Stubbs  <ams@codesourcery.com>
+ 	    Hafiz Abid Qadeer  <abidh@codesourcery.com>
+ 
+ 	* dwarf2cfi.c (dw_stack_pointer_regnum): Change type to struct cfa_reg.
+ 	(dw_frame_pointer_regnum): Likewise.
+ 	(new_cfi_row): Use set_by_dwreg.
+ 	(get_cfa_from_loc_descr): Use set_by_dwreg.  Support register spans.
+ 	handle DW_OP_bregx with DW_OP_breg{0-31}.  Support DW_OP_lit*,
+ 	DW_OP_const*, DW_OP_minus, DW_OP_shl and DW_OP_plus.
+ 	(lookup_cfa_1): Use set_by_dwreg.
+ 	(def_cfa_0): Update for cfa_reg and support register spans.
+ 	(reg_save): Change sreg parameter to struct cfa_reg.  Support register
+ 	spans.
+ 	(dwf_cfa_reg): New function.
+ 	(dwarf2out_flush_queued_reg_saves): Use dwf_cfa_reg instead of
+ 	dwf_regno.
+ 	(dwarf2out_frame_debug_def_cfa): Likewise.
+ 	(dwarf2out_frame_debug_adjust_cfa): Likewise.
+ 	(dwarf2out_frame_debug_cfa_offset): Likewise.  Update reg_save usage.
+ 	(dwarf2out_frame_debug_cfa_register): Likewise.
+ 	(dwarf2out_frame_debug_expr): Likewise.
+ 	(create_pseudo_cfg): Use set_by_dwreg.
+ 	(initial_return_save): Use set_by_dwreg and dwf_cfa_reg,
+ 	(create_cie_data): Use dwf_cfa_reg.
+ 	(execute_dwarf2_frame): Use dwf_cfa_reg.
+ 	(dump_cfi_row): Use set_by_dwreg.
+ 	* dwarf2out.c (build_span_loc, build_breg_loc): New function.
+ 	(build_cfa_loc): Support register spans.
+ 	(build_cfa_aligned_loc): Update cfa_reg usage.
+ 	(convert_cfa_to_fb_loc_list): Use set_by_dwreg.
+ 	* dwarf2out.h (struct cfa_reg): New type.
+ 	(struct dw_cfa_location): Use struct cfa_reg.
+ 	(build_span_loc): New prototype.
+ 
+ 2021-12-08  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	PR target/100738
+ 	* config/i386/sse.md
+ 	(*<sse4_1>_blendv<ssefltmodesuffix><avxsizesuffix>_not_ltint):
+ 	Add new define_insn_and_split.
+ 
+ 2021-12-08  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR middle-end/103149
+ 	* gimple-harden-conditionals.cc (detach_value): Use memory if
+ 	general regs won't do.
+ 
+ 2021-12-07  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR middle-end/103438
+ 	* config/s390/s390.c (s390_valid_target_attribute_inner_p):
+ 	Use new enum CLVC_INTEGER.
+ 	* opt-functions.awk: Use new CLVC_INTEGER.
+ 	* opts-common.c (set_option): Likewise.
+ 	(option_enabled): Return -1,0,1 for CLVC_INTEGER.
+ 	(get_option_state): Use new CLVC_INTEGER.
+ 	(control_warning_option): Likewise.
+ 	* opts.h (enum cl_var_type): Likewise.
+ 
+ 2021-12-07  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/103594
+ 	* config/i386/i386.c (ix86_call_use_plt_p): Check FUNCTION_DECL
+ 	before calling cgraph_node::get.
+ 
+ 2021-12-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103596
+ 	* tree-ssa-sccvn.c (eliminate_dom_walker::eliminate_stmt):
+ 	Note we are not propagating into a PHI argument to may_propagate_copy.
+ 	* tree-ssa-propagate.h (may_propagate_copy): Add
+ 	argument specifying whether we propagate into a PHI arg.
+ 	* tree-ssa-propagate.c (may_propagate_copy): Likewise.
+ 	When not doing so we can replace an abnormal with
+ 	something else.
+ 	(may_propagate_into_stmt): Update may_propagate_copy calls.
+ 	(replace_exp_1): Move propagation checking code to
+ 	propagate_value and rename to ...
+ 	(replace_exp): ... this and elide previous wrapper.
+ 	(propagate_value): Perform checking with adjusted
+ 	may_propagate_copy call and dispatch to replace_exp.
+ 
+ 2021-12-07  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	* hash-map.h (hash_map::traverse): Let both overloads behave the
+ 	same.
+ 	* predict.c (assert_is_empty): Return true, thus not changing
+ 	behavior.
+ 
+ 2021-12-07  YunQiang Su  <yunqiang.su@cipunited.com>
+ 
+ 	* config/mips/mips.h (ISA_HAS_UNALIGNED_ACCESS, STRICT_ALIGNMENT):
+ 		R6 can unaligned access.
+ 	* config/mips/mips.md (movmisalign<mode>): Likewise.
+ 	* config/mips/mips.opt: add -m(no-)unaligned-access
+ 	* doc/invoke.texi: Likewise.
+ 
+ 2021-12-07  Eugene Rozenfeld  <erozen@microsoft.com>
+ 
+ 	* auto-profile.c (afdo_propagate_edge): Improve count propagation algorithm.
+ 
+ 2021-12-06  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	PR target/103545
+ 	* config/rs6000/xmmintrin.h (_mm_movemask_ps): Replace "vector" with
+ 	"__vector".
+ 
+ 2021-12-06  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* config/bpf/bpf.c (bpf_handle_preserve_access_index_attribute):
+ 	Mark arguments `args' and flags' as unused.
+ 	(bpf_core_newdecl): Remove unused local `newdecl'.
+ 	(bpf_core_newdecl): Remove unused argument `loc'.
+ 	(ctfc_debuginfo_early_finish_p): Remove unused function.
+ 	(TARGET_CTFC_DEBUGINFO_EARLY_FINISH_P): Remove definition.
+ 	(bpf_core_walk): Do not pass a location to bpf_core_newdecl.
+ 
+ 2021-12-06  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* gimple-range-edge.cc (gimple_outgoing_range::edge_range_p): Add
+ 	a shortcut for blocks with single successors.
+ 	* gimple-range-gori.cc (gori_map::calculate_gori): Likewise.
+ 
+ 2021-12-06  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* value-range.cc (irange::irange_union): Use quick_push rather
+ 	than safe_push.  Use widest_int rather than wide_int.  Avoid
+ 	assigning wi::to_* results to wide*_int temporaries.
+ 
+ 2021-12-06  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::fill_block_cache): Check for
+ 	a range from dominators before filling the cache.
+ 	(ranger_cache::range_from_dom): New.
+ 	* gimple-range-cache.h (ranger_cache::range_from_dom): Add prototype.
+ 
+ 2021-12-06  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-gori.h (class gori_compute):: Add prototypes.
+ 	* gimple-range-gori.cc (gori_compute::has_edge_range_p): Add alternate
+ 	API for basic block.  Call for edge alterantive.
+ 	(gori_compute::may_recompute_p): Ditto.
+ 
+ 2021-12-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103581
+ 	* tree-vect-stmts.c (vect_build_gather_load_calls): Properly
+ 	guard all the AVX512 mask cases.
+ 
+ 2021-12-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103544
+ 	* tree-vect-slp.c (vect_analyze_slp): Only add a SLP reduction
+ 	opportunity if the stmt in question is the reduction root.
+ 	(dot_slp_tree): Add missing check for NULL child.
+ 
+ 2021-12-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR pch/71934
+ 	* config/avr/avr.c (avr_output_data_section_asm_op,
+ 	avr_output_bss_section_asm_op): Change argument type from const void *
+ 	to const char *.
+ 
+ 2021-12-06  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR rtl-optimization/103404
+ 	* cse.c (find_sets_in_insn): Don't select elements out of a V1 mode
+ 	subreg.
+ 
+ 2021-12-06  Hongtao Liu  <Hongtao.liu@intel.com>
+ 	    Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/95740
+ 	* config/i386/i386.c (ix86_preferred_reload_class): Allow
+ 	integer regs when moves between register units are cheap.
+ 	* config/i386/i386.h (INT_SSE_CLASS_P): New.
+ 
+ 2021-12-05  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_init_builtins): Move
+ 	AIX math builtin initialization before new_builtins_are_live.
+ 
+ 2021-12-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/x86-tune.def (X86_TUNE_PARTIAL_REG_DEPENDENCY): Fix
+ 	comment typo, Preffer -> prefer.
+ 	* ipa-modref-tree.c (modref_access_node::closer_pair_p): Likewise.
+ 
+ 2021-12-04  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR rtl-optimization/103028
+ 	* ifcvt.c (find_cond_trap): Validate new insns more strictly
+ 	after reload.
+ 
+ 2021-12-03  Martin Liska  <mliska@suse.cz>
+ 	    Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/101324
+ 	* config/rs6000/rs6000.c (rs6000_option_override_internal): Move the
+ 	disabling of shrink-wrapping when using -mrop-protect from here...
+ 	(rs6000_override_options_after_change): ...to here.
+ 
+ 2021-12-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/103269
+ 	* config/i386/i386-expand.c (ix86_expand_builtin): Pass PVW_NONE
+ 	and PVW_NONE to ix86_target_string.
+ 	* config/i386/i386-options.c (ix86_target_string): Add arguments
+ 	for move_max and store_max.
+ 	(ix86_target_string::add_vector_width): New lambda.
+ 	(ix86_debug_options): Pass ix86_move_max and ix86_store_max to
+ 	ix86_target_string.
+ 	(ix86_function_specific_print): Pass ptr->x_ix86_move_max and
+ 	ptr->x_ix86_store_max to ix86_target_string.
+ 	(ix86_valid_target_attribute_tree): Handle x_ix86_move_max and
+ 	x_ix86_store_max.
+ 	(ix86_option_override_internal): Set the default x_ix86_move_max
+ 	and x_ix86_store_max.
+ 	* config/i386/i386-options.h (ix86_target_string): Add
+ 	prefer_vector_width and prefer_vector_width.
+ 	* config/i386/i386.h (TARGET_AVX256_MOVE_BY_PIECES): Removed.
+ 	(TARGET_AVX256_STORE_BY_PIECES): Likewise.
+ 	(MOVE_MAX): Use 64 if ix86_move_max or ix86_store_max ==
+ 	PVW_AVX512.  Use 32 if ix86_move_max or ix86_store_max >=
+ 	PVW_AVX256.
+ 	(STORE_MAX_PIECES): Use 64 if ix86_store_max == PVW_AVX512.
+ 	Use 32 if ix86_store_max >= PVW_AVX256.
+ 	* config/i386/i386.opt: Add -mmove-max=bits and -mstore-max=bits.
+ 	* config/i386/x86-tune.def (X86_TUNE_AVX512_MOVE_BY_PIECES): New.
+ 	(X86_TUNE_AVX512_STORE_BY_PIECES): Likewise.
+ 	* doc/invoke.texi: Document -mmove-max=bits and -mstore-max=bits.
+ 
+ 2021-12-03  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_builtin_reciprocal): Fix builtin
+ 	identifiers.
+ 
+ 2021-12-03  SiYu Wu  <siyu@isrc.iscas.ac.cn>
+ 
+ 	* common/config/riscv/riscv-common.c (riscv_implied_info):
+ 	Add K-ext related entry.
+ 	(riscv_supported_std_ext): Add 'k'.
+ 	* config/riscv/arch-canonicalize (CANONICAL_ORDER): Add 'k'.
+ 	(IMPLIED_EXT): Add K-ext related entry.
+ 
+ 2021-12-03  SiYu Wu  <siyu@isrc.iscas.ac.cn>
+ 
+ 	* common/config/riscv/riscv-common.c (riscv_ext_version_table):
+ 	Add zbk* and zk*.
+ 	* config/riscv/riscv-opts.h (MASK_ZBKB): New.
+ 	(MASK_ZBKC): Ditto.
+ 	(MASK_ZBKX): Ditto.
+ 	(MASK_ZKNE): Ditto.
+ 	(MASK_ZKND): Ditto.
+ 	(MASK_ZKNH): Ditto.
+ 	(MASK_ZKR): Ditto.
+ 	(MASK_ZKSED): Ditto.
+ 	(MASK_ZKSH): Ditto.
+ 	(MASK_ZKT): Ditto.
+ 	(TARGET_ZBKB): Ditto.
+ 	(TARGET_ZBKC): Ditto.
+ 	(TARGET_ZBKX): Ditto.
+ 	(TARGET_ZKNE): Ditto.
+ 	(TARGET_ZKND): Ditto.
+ 	(TARGET_ZKNH): Ditto.
+ 	(TARGET_ZKR): Ditto.
+ 	(TARGET_ZKSED): Ditto.
+ 	(TARGET_ZKSH): Ditto.
+ 	(TARGET_ZKT): Ditto.
+ 	* config/riscv/riscv.opt (riscv_zk_subext): New.
+ 
+ 2021-12-03  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-stmts.c (prepare_load_store_mask): Rename to...
+ 	(prepare_vec_mask): ...This and record operations that have already been
+ 	masked.
+ 	(vectorizable_call): Use it.
+ 	(vectorizable_operation): Likewise.
+ 	(vectorizable_store): Likewise.
+ 	(vectorizable_load): Likewise.
+ 	* tree-vectorizer.h (class _loop_vec_info): Add vec_cond_masked_set.
+ 	(vec_cond_masked_set_type, tree_cond_mask_hash): New.
+ 
+ 2021-12-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/51469
+ 	PR target/83782
+ 	* target.def (ifunc_ref_local_ok): Add a target hook.
+ 	* varasm.c (default_binds_local_p_3): Force indirect function
+ 	resolver non-local only if targetm.ifunc_ref_local_ok returns
+ 	false.
+ 	* config/i386/i386-expand.c (ix86_expand_call): Call
+ 	ix86_call_use_plt_p to check if PLT should be used.
+ 	* config/i386/i386-protos.h (ix86_call_use_plt_p): New.
+ 	* config/i386/i386.c (output_pic_addr_const): Call
+ 	ix86_call_use_plt_p to check if "@PLT" is needed.
+ 	(ix86_call_use_plt_p): New.
+ 	(TARGET_IFUNC_REF_LOCAL_OK): New.
+ 	* doc/tm.texi.in: Add TARGET_IFUNC_REF_LOCAL_OK.
+ 	* doc/tm.texi: Regenerated.
+ 
+ 2021-12-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* attribs.h (simple_cst_list_equal): Declare.
+ 	* attribs.c (simple_cst_list_equal): No longer static.
+ 	* config/i386/i386-options.c (target_attribute_cache): New variable.
+ 	(ix86_valid_target_attribute_p): Cache DECL_FUNCTION_SPECIFIC_TARGET
+ 	and DECL_FUNCTION_SPECIFIC_OPTIMIZATION based on args.
+ 
+ 2021-12-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR pch/71934
+ 	* ggc.h (gt_pch_note_callback): Declare.
+ 	* gengtype.h (enum typekind): Add TYPE_CALLBACK.
+ 	(callback_type): Declare.
+ 	* gengtype.c (dbgprint_count_type_at): Handle TYPE_CALLBACK.
+ 	(callback_type): New variable.
+ 	(process_gc_options): Add CALLBACK argument, handle callback
+ 	option.
+ 	(set_gc_used_type): Adjust process_gc_options caller, if callback,
+ 	set type to &callback_type.
+ 	(output_mangled_typename): Handle TYPE_CALLBACK.
+ 	(walk_type): Likewise.  Handle callback option.
+ 	(write_types_process_field): Handle TYPE_CALLBACK.
+ 	(write_types_local_user_process_field): Likewise.
+ 	(write_types_local_process_field): Likewise.
+ 	(write_root): Likewise.
+ 	(dump_typekind): Likewise.
+ 	(dump_type): Likewise.
+ 	* gengtype-state.c (type_lineloc): Handle TYPE_CALLBACK.
+ 	(state_writer::write_state_callback_type): New method.
+ 	(state_writer::write_state_type): Handle TYPE_CALLBACK.
+ 	(read_state_callback_type): New function.
+ 	(read_state_type): Handle TYPE_CALLBACK.
+ 	* ggc-common.c (callback_vec): New variable.
+ 	(gt_pch_note_callback): New function.
+ 	(gt_pch_save): Stream out gt_pch_save function address and relocation
+ 	table.
+ 	(gt_pch_restore): Stream in saved gt_pch_save function address and
+ 	relocation table and apply relocations if needed.
+ 	* doc/gty.texi (callback): Document new GTY option.
+ 	* varasm.c (get_unnamed_section): Change callback argument's type and
+ 	last argument's type from const void * to const char *.
+ 	(output_section_asm_op): Change argument's type from const void *
+ 	to const char *, remove unnecessary cast.
+ 	* tree-core.h (struct tree_translation_unit_decl): Drop GTY((skip))
+ 	from language member.
+ 	* output.h (unnamed_section_callback): Change argument type from
+ 	const void * to const char *.
+ 	(struct unnamed_section): Use GTY((callback)) instead of GTY((skip))
+ 	for callback member.  Change data member type from const void *
+ 	to const char *.
+ 	(struct noswitch_section): Use GTY((callback)) instead of GTY((skip))
+ 	for callback member.
+ 	(get_unnamed_section): Change callback argument's type and
+ 	last argument's type from const void * to const char *.
+ 	(output_section_asm_op): Change argument's type from const void *
+ 	to const char *.
+ 	* config/avr/avr.c (avr_output_progmem_section_asm_op): Likewise.
+ 	Remove unneeded cast.
+ 	* config/darwin.c (output_objc_section_asm_op): Change argument's type
+ 	from const void * to const char *.
+ 	* config/pa/pa.c (som_output_text_section_asm_op): Likewise.
+ 	(som_output_comdat_data_section_asm_op): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_elf_output_toc_section_asm_op):
+ 	Likewise.
+ 	(rs6000_xcoff_output_readonly_section_asm_op): Likewise.  Instead
+ 	of dereferencing directive hardcode variable names and decide based on
+ 	whether directive is NULL or not.
+ 	(rs6000_xcoff_output_readwrite_section_asm_op): Change argument's type
+ 	from const void * to const char *.
+ 	(rs6000_xcoff_output_tls_section_asm_op): Likewise.  Instead
+ 	of dereferencing directive hardcode variable names and decide based on
+ 	whether directive is NULL or not.
+ 	(rs6000_xcoff_output_toc_section_asm_op): Change argument's type
+ 	from const void * to const char *.
+ 	(rs6000_xcoff_asm_init_sections): Adjust get_unnamed_section callers.
+ 
+ 2021-12-03  Richard Purdie  <richard.purdie@linuxfoundation.org>
+ 
+ 	* Makefile.in: Fix "argument list too long" from install-plugins.
+ 
+ 2021-12-03  Matt Jacobson  <mhjacobson@me.com>
+ 
+ 	* config.gcc: For the AVR target, populate TM_MULTILIB_CONFIG.
+ 	* config/avr/genmultilib.awk: Add ability to filter generated multilib
+ 	list.
+ 	* config/avr/t-avr: Pass TM_MULTILIB_CONFIG to genmultilib.awk.
+ 	* configure.ac: Update help string for --with-multilib-list.
+ 	* configure: Regenerate.
+ 
+ 2021-12-02  Ilya Lipnitskiy  <ilya.lipnitskiy@gmail.com>
+ 
+ 	* configure: Regenerate.
+ 	* configure.ac: Define TARGET_LIBC_GNUSTACK on musl.
+ 
+ 2021-12-02  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR target/55610
+ 	* config/host-darwin.c (TRY_EMPTY_VM_SPACE,
+ 	SAFE_ALLOC_SIZE): New.
+ 	(darwin_gt_pch_get_address): Rewrite to use nominated
+ 	memory segments rather than part of the compiler __DATA
+ 	segment.
+ 	(darwin_gt_pch_use_address): Likewise.
+ 
+ 2021-12-02  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/install.texi (*-*-freebsd*): Remove references to
+ 	FreeBSD 1 and FreeBSD 2.
+ 
+ 2021-12-02  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/103437
+ 	* ira-color.c (setup_allocno_priorities): Switch off backup code
+ 	for overflow if compiler has __builtin_smul_overflow.  Use <
+ 	for comparison with -INT_MAX.
+ 
+ 2021-12-02  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/altivec.h: Delete a number of #defines that are	now
+ 	superfluous.  Alphabetize.  Include rs6000-vecdefines.h.  Include some
+ 	synonyms.
+ 	* config/rs6000/rs6000-builtin-new.def (CMPB): Flag as no32bit.
+ 	(BPERMD): Flag as 32bit (needing special handling for 32-bit).
+ 	(UNPACK_TD): Return unsigned long long instead of unsigned long.
+ 	(GET_TEXASR): Return unsigned long instead of unsigned long long.
+ 	(GET_TEXASRU): Likewise.
+ 	(GET_TFHAR): Likewise.
+ 	(GET_TFIAR): Likewise.
+ 	(SET_TEXASR): Pass unsigned long instead of unsigned long long.
+ 	(SET_TEXASRU): Likewise.
+ 	(SET_TFHAR): Likewise.
+ 	(SET_TFIAR): Likewise.
+ 	(TABORTDC): Likewise.
+ 	(TABORTDCI): Likewise.
+ 	* config/rs6000/rs6000-call.c (rs6000_expand_new_builtin): Fix error
+ 	handling for no32bit.  Add 32bit handling for RS6000_BIF_BPERMD.
+ 	* config/rs6000/rs6000-gen-builtins.c (write_init_file): Initialize
+ 	new_builtins_are_live to 1.
+ 
+ 2021-12-02  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/103437
+ 	* ira-color.c (setup_allocno_priorities): Use long long
+ 	multiplication as backup for overflow processing.
+ 
+ 2021-12-02  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-protos.h (aarch64_gen_shareable_zero): New.
+ 	* config/aarch64/aarch64-simd.md (aarch64_rshrn<mode>,
+ 	aarch64_rshrn2<mode>): Generate rounding half-ing add when appropriate.
+ 	* config/aarch64/aarch64.c (aarch64_gen_shareable_zero): New.
+ 
+ 2021-12-02  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/103437
+ 	* ira-color.c (setup_allocno_priorities): Process multiplication
+ 	overflow.
+ 
+ 2021-12-02  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR gcov-profile/96092
+ 	* common.opt: New option.
+ 	* coverage.c (coverage_begin_function): Emit filename with
+ 	remap_profile_filename.
+ 	* doc/invoke.texi: Document the new option.
+ 	* file-prefix-map.c (add_profile_prefix_map): New.
+ 	(remap_profile_filename): Likewise.
+ 	* file-prefix-map.h (add_profile_prefix_map): Likewise.
+ 	(remap_profile_filename): Likewise.
+ 	* lto-opts.c (lto_write_options): Handle
+ 	OPT_fprofile_prefix_map_.
+ 	* opts-global.c (handle_common_deferred_options): Likewise.
+ 	* opts.c (common_handle_option): Likewise.
+ 	(gen_command_line_string): Likewise.
+ 	* profile.c (output_location): Emit filename with
+ 	remap_profile_filename.
+ 
+ 2021-12-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/103271
+ 	* internal-fn.c (expand_DEFERRED_INIT): When the base
+ 	of the LHS is a decl with matching constant size use
+ 	that as the initialization target instead of an
+ 	eventual VLA typed one.
+ 
+ 2021-12-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103527
+ 	* tree-vect-stmts.c (vect_build_gather_load_calls): Always
+ 	use a truth type for building the vector mask.
+ 
+ 2021-12-02  Rasmus Villemoes  <rasmus.villemoes@prevas.dk>
+ 
+ 	* config/vxworks.h (LTO_PLUGIN_SPEC): Adapt to corrected
+ 	spelling of -linker-output-auto-nolto-rel.
+ 
+ 2021-12-01  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/102811
+ 	* config/i386/sse.md (VI2F): Remove mode iterator.
+ 	(VI2F_256_512): New mode iterator.
+ 	(vec_set<V8_128:mode>_0): New insn pattern.
+ 	(vec_set<VI2F_256_512:mode>_0>): Rename from vec_set<VI2F:mode>mode.
+ 	Use VI2F_256_512 mode iterator instead of VI2F.
+ 	(*axv512fp16_movsh): Remove.
+ 	(<sse2p4_1>_pinsr<ssemodesuffix>): Add (x,x,x) AVX2 alternative.
+ 	Do not disable V8HF mode insn on AVX2 targets.
+ 	(pinsrw -> pbroadcast + pblendw peephole2): New peephole.
+ 	(pinsrw -> pbroadcast + pblendw splitter): New post-reload splitter.
+ 	* config/i386/i386.md (extendhfsf): Call gen_vec_setv8hf_0.
+ 	* config/i386/i386-expand.c (ix86_expand_vector_set)
+ 	<case E_V8HFmode>: Use vec_merge path for TARGET_AVX2.
+ 
+ 2021-12-01  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-loop-niter.c (number_of_iterations_until_wrap):
+ 	Check if simplify_using_initial_conditions allows us to
+ 	simplify the expression for may_be_zero.
+ 	* match.pd (X != C ? -X : -C -> -X): New transform.
+ 	(X != C ? ~X : ~C -> ~X): Likewise.
+ 	((X+1) > Y ? -X : 1 -> X >= Y ? -X : 1): Likewise.
+ 
+ 2021-12-01  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR middle-end/103127
+ 	* gimplify.c (is_var_need_auto_init): Handle opaque types.
+ 
+ 2021-12-01  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* common.opt (static-libphobos): Add option.
+ 	* config/darwin.h (LINK_SPEC): Substitute -lgphobos with libgphobos.a
+ 	when linking statically.
+ 	* gcc.c (driver_handle_option): Set -static-libphobos as always valid.
+ 
+ 2021-12-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/103310
+ 	* fold-const.c (maybe_nonzero_address): Use get_create or get
+ 	depending on folding_initializer.
+ 	(fold_binary_initializer_loc): New.
+ 	* fold-const.h (fold_binary_initializer_loc): Declare.
+ 	* varasm.c (mark_weak): Don't use the decl location.
+ 	* doc/invoke.texi: Document -fconstexpr-fp-except.
+ 
+ 2021-12-01  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	PR target/102347
+ 	* config/rs6000/rs6000-c.c (rs6000-builtins.h): Stop including.
+ 	(rs6000-internal.h): Include.
+ 	(altivec_resolve_new_overloaded_builtin): Move call to
+ 	rs6000_invalid_new_builtin here from rs6000_new_builtin_decl.
+ 	* config/rs6000/rs6000-call.c (rs6000-builtins.h): Stop including.
+ 	(rs6000_invalid_new_builtin): Remove static qualifier.
+ 	(rs6000_new_builtin_decl): Remove test for supported builtin.
+ 	* config/rs6000/rs6000-internal.h (rs6000-builtins.h): Include.
+ 	(rs6000_invalid_new_builtin): Declare.
+ 	* config/rs6000/rs6000.c (rs6000-builtins.h): Don't include.
+ 
+ 2021-12-01  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/103409
+ 	* gimple-range-path.cc (path_range_query::compute_ranges_in_phis):
+ 	Do all the work with just one ssa_global_cache.
+ 	* gimple-range-path.h: Remove m_tmp_phi_cache.
+ 
+ 2021-12-01  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/103517
+ 	* tree-vect-slp.c (vect_build_slp_tree_1): When allowing two
+ 	different component references, check the codes of both them,
+ 	rather than just the first.
+ 
+ 2021-12-01  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/103464
+ 	* gimple-range.cc (gimple_ranger::prefill_name): Process phis also.
+ 	(gimple_ranger::prefill_stmt_dependencies): Ditto.
+ 
+ 2021-12-01  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* doc/install.texi (Prerequisites): Add note that D front end now
+ 	requires GDC installed in order to bootstrap.
+ 	(Building): Add D compiler section, referencing prerequisites.
+ 
+ 2021-12-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/x86-tune.def (X86_TUNE_SCHEDULE,
+ 	X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY,
+ 	X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES): Formatting fixes.
+ 	(X86_TUNE_USE_GATHER): Put m_GENERIC last for consistency.
+ 
+ 2021-12-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/102356
+ 	* rtl.h (simplify_context): Add assoc_count member and
+ 	max_assoc_count static member.
+ 	* simplify-rtx.c (simplify_associative_operation): Don't reassociate
+ 	more than max_assoc_count times within one outermost simplify_* call.
+ 	* dwarf2out.c (mem_loc_descriptor): Optimize binary operation
+ 	with both operands the same using DW_OP_dup.
+ 
+ 2021-12-01  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* match.pd: Move below pattern that rewrites to EQ, NE.
+ 	* tree.c (bitmask_inv_cst_vector_p): Correct do .. while indentation.
+ 
+ 2021-12-01  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 	    Martin Liška  <mliska@suse.cz>
+ 
+ 	PR tree-optimization/103456
+ 	* tree-object-size.c (merge_object_sizes): Update osi->changed
+ 	only if object_sizes_set succeeded.
+ 
+ 2021-11-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/103463
+ 	PR target/103484
+ 	* config/i386/i386.md (*x86_64_shld_1): Set_attr
+ 	length_immediate to 1.
+ 	(*x86_shld_1): Ditto.
+ 	(*x86_64_shrd_1): Ditto.
+ 	(*x86_shrd_1): Ditto.
+ 
+ 2021-11-30  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
+ 	Clarify diagnostic.
+ 	(altivec_resolve_new_overloaded_builtin): Likewise.
+ 
+ 2021-11-30  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/103267
+ 	* ipa-sra.c (scan_function): Also check ECF_LOOPING_CONST_OR_PURE flag.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/103494
+ 	* tree-vect-stmts.c (vect_get_gather_scatter_ops): Remove ncopies
+ 	argument and calculate ncopies from gs_info->offset_vectype
+ 	where necessary.
+ 	(vectorizable_store, vectorizable_load): Update accordingly.
+ 
+ 2021-11-30  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* Makefile.in (GDC): New variable.
+ 	(GDCFLAGS): New variable.
+ 	* configure: Regenerate.
+ 	* configure.ac: Add call to ACX_PROG_GDC.  Substitute GDCFLAGS.
+ 
+ 2021-11-30  Martin Liska  <mliska@suse.cz>
+ 	    Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/103449
+ 	* ipa-param-manipulation.c
+ 	(ipa_param_body_adjustments::prepare_debug_expressions): Be
+ 	careful about hash_map reallocating itself.  Simpify a return
+ 	which always returns true.
+ 
+ 2021-11-30  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/103440
+ 	* gimple-range-fold.cc (fold_using_range::range_of_phi): Continue
+ 	normal param processing for equiv params.
+ 
+ 2021-11-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/i386.c (ix86_shift_rotate_cost): Remove
+ 	unreachable return.
+ 	* tree-chrec.c (evolution_function_is_invariant_rec_p):
+ 	Likewise.
+ 	* tree-if-conv.c (if_convertible_stmt_p): Likewise.
+ 	* tree-ssa-pre.c (fully_constant_expression): Likewise.
+ 	* tree-vrp.c (operand_less_p): Likewise.
+ 	* reload.c (reg_overlap_mentioned_for_reload_p): Remove
+ 	unreachable gcc_unreachable ().
+ 	* sel-sched-ir.h (bb_next_bb): Likewise.
+ 	* varasm.c (compare_constant): Likewise.
+ 
+ 2021-11-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103489
+ 	* tree-vect-loop.c (vectorizable_phi): Verify argument
+ 	vector type compatibility to mitigate bool pattern recog
+ 	bug.
+ 
+ 2021-11-30  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* omp-offload.c (oacc_loop_auto_partitions): Remove erroneous
+ 	"Orphan reductions cannot have gang partitioning" handling.
+ 
+ 2021-11-30  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* omp-offload.c (oacc_loop_process): Implement "gang reduction on
+ 	an orphan loop" checking.
+ 
+ 2021-11-30  Cesar Philippidis  <cesar@codesourcery.com>
+ 	    Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* omp-general.h (enum oacc_loop_flags): Add OLF_REDUCTION enum.
+ 	* omp-low.c (lower_oacc_head_mark): Use it to mark OpenACC
+ 	reductions.
+ 	* omp-offload.c (oacc_loop_auto_partitions): Don't assign gang
+ 	level parallelism to orphan reductions.
+ 
+ 2021-11-30  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/103451
+ 	* range-op.cc (operator_div::wi_fold): Remove
+ 	can_throw_non_call_exceptions special case.
+ 	* tree-ssa-sink.c (sink_code_in_bb): Same.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-slp.c (arg1_arg4_map): New variable.
+ 	(vect_get_operand_map): Handle IFN_MASK_GATHER_LOAD.
+ 	(vect_build_slp_tree_1): Likewise.
+ 	(vect_build_slp_tree_2): Likewise.
+ 	* tree-vect-stmts.c (vectorizable_load): Expect the mask to be
+ 	the last SLP child node rather than the first.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-if-conv.c: Include tree-eh.h.
+ 	(predicate_statements): Remove pe argument.  Don't hoist
+ 	statements here.
+ 	(combine_blocks): Remove pe argument.
+ 	(ifcvt_available_on_edge_p, ifcvt_can_hoist): New functions.
+ 	(ifcvt_hoist_invariants): Likewise.
+ 	(tree_if_conversion): Update call to combine_blocks.  Call
+ 	ifcvt_hoist_invariants after VN.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/102467
+ 	* doc/sourcebuild.texi (vect_gather_load_ifn): Document.
+ 	* tree-vect-data-refs.c (vect_analyze_data_ref_dependence):
+ 	Commonize safelen handling.  Punt for anything involving
+ 	gathers and scatters unless safelen says otherwise.
+ 	* tree-vect-slp.c (arg1_map): New variable.
+ 	(vect_get_operand_map): Handle IFN_GATHER_LOAD.
+ 	(vect_build_slp_tree_1): Likewise.
+ 	(vect_build_slp_tree_2): Likewise.
+ 	(compatible_calls_p): If vect_get_operand_map returns nonnull,
+ 	check that any skipped arguments are equal.
+ 	(vect_slp_analyze_node_operations_1): Tighten reduction check.
+ 	* tree-vect-stmts.c (check_load_store_for_partial_vectors): Take
+ 	an ncopies argument.
+ 	(vect_get_gather_scatter_ops): Take slp_node and ncopies arguments.
+ 	Handle SLP nodes.
+ 	(vectorizable_store, vectorizable_load): Adjust accordingly.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* gimple.h (gimple_num_args, gimple_arg, gimple_arg_ptr): New
+ 	functions.
+ 	* tree-vect-slp.c (cond_expr_maps, arg2_map): New variables.
+ 	(vect_get_operand_map): New function.
+ 	(vect_get_and_check_slp_defs): Fix outdated comment.
+ 	Use vect_get_operand_map and new gimple argument accessors.
+ 	(vect_build_slp_tree_2): Likewise.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-slp.c (vect_build_slp_tree_1): Use code_helper
+ 	to record the operations performed by statements, only using
+ 	CALL_EXPR for things that don't map to built-in or internal
+ 	functions.  For shifts, require all shift amounts to be equal
+ 	if optab_vector is not supported but optab_scalar is.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-data-refs.c (vect_check_gather_scatter): Continue
+ 	processing conversions if the current offset is a pointer.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vectorizer.h (vect_is_reduction): Use STMT_VINFO_REDUC_IDX.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* genopinit.c (main): Turn supports_vec_gather_load and
+ 	supports_vec_scatter_store into signed char arrays and remove
+ 	supports_vec_gather_load_cached and supports_vec_scatter_store_cached.
+ 	* optabs-query.c (supports_vec_convert_optab_p): Add a mode parameter.
+ 	If the mode is not VOIDmode, test only for that mode.
+ 	(supports_vec_gather_load_p): Likewise.
+ 	(supports_vec_scatter_store_p): Likewise.
+ 	* optabs-query.h (supports_vec_gather_load_p): Likewise.
+ 	(supports_vec_scatter_store_p): Likewise.
+ 	* tree-vect-data-refs.c (vect_check_gather_scatter): Pass the
+ 	vector mode to supports_vec_gather_load_p and
+ 	supports_vec_scatter_store_p.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* internal-fn.c (commutative_binary_fn_p): Handle IFN_ADD_OVERFLOW
+ 	and IFN_MUL_OVERFLOW.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* internal-fn.c (commutative_binary_fn_p): Handle IFN_UBSAN_CHECK_ADD
+ 	and IFN_UBSAN_CHECK_MUL.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* internal-fn.c (commutative_binary_fn_p): Handle IFN_COMPLEX_MUL.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* gimple-fold.c: Include internal-fn.h.
+ 	(fold_stmt_1): If a function maps to an internal one, use
+ 	first_commutative_argument to canonicalize the order of
+ 	commutative arguments.
+ 	* gimple-match-head.c (gimple_resimplify2, gimple_resimplify3)
+ 	(gimple_resimplify4, gimple_resimplify5): Extend commutativity
+ 	checks to functions.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* doc/md.texi (reduc_fmin_scal_@var{m}): Document.
+ 	(reduc_fmax_scal_@var{m}): Likewise.
+ 	* optabs.def (reduc_fmax_scal_optab): New optab.
+ 	(reduc_fmin_scal_optab): Likewise
+ 	* internal-fn.def (REDUC_FMAX, REDUC_FMIN): New functions.
+ 	* tree-vect-loop.c (reduction_fn_for_scalar_code): Handle
+ 	CASE_CFN_FMAX and CASE_CFN_FMIN.
+ 	(neutral_op_for_reduction): Likewise.
+ 	(needs_fold_left_reduction_p): Likewise.
+ 	* config/aarch64/iterators.md (FMAXMINV): New iterator.
+ 	(fmaxmin): Handle UNSPEC_FMAXNMV and UNSPEC_FMINNMV.
+ 	* config/aarch64/aarch64-simd.md (reduc_<optab>_scal_<mode>): Fix
+ 	unspec mode.
+ 	(reduc_<fmaxmin>_scal_<mode>): New pattern.
+ 	* config/aarch64/aarch64-sve.md (reduc_<fmaxmin>_scal_<mode>):
+ 	Likewise.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* builtins.h (associated_internal_fn): Declare overload that
+ 	takes a (combined_cfn, return type) pair.
+ 	* builtins.c (associated_internal_fn): Split new overload out
+ 	of original fndecl version.  Also provide an overload that takes
+ 	a (combined_cfn, return type) pair.
+ 	* internal-fn.h (commutative_binary_fn_p): Declare.
+ 	(commutative_ternary_fn_p): Likewise.
+ 	(associative_binary_fn_p): Likewise.
+ 	* internal-fn.c (commutative_binary_fn_p, commutative_ternary_fn_p):
+ 	New functions, split out from...
+ 	(first_commutative_argument): ...here.
+ 	(associative_binary_fn_p): New function.
+ 	* gimple-match.h (code_helper): Add a constructor that takes
+ 	internal functions.
+ 	(commutative_binary_op_p): Declare.
+ 	(commutative_ternary_op_p): Likewise.
+ 	(first_commutative_argument): Likewise.
+ 	(associative_binary_op_p): Likewise.
+ 	(canonicalize_code): Likewise.
+ 	(directly_supported_p): Likewise.
+ 	(get_conditional_internal_fn): Likewise.
+ 	(gimple_build): New overloads that takes a code_helper.
+ 	* gimple-fold.c (gimple_build): Likewise.
+ 	* gimple-match-head.c (commutative_binary_op_p): New function.
+ 	(commutative_ternary_op_p): Likewise.
+ 	(first_commutative_argument): Likewise.
+ 	(associative_binary_op_p): Likewise.
+ 	(canonicalize_code): Likewise.
+ 	(directly_supported_p): Likewise.
+ 	(get_conditional_internal_fn): Likewise.
+ 	* tree-vectorizer.h: Include gimple-match.h.
+ 	(neutral_op_for_reduction): Take a code_helper instead of a tree_code.
+ 	(needs_fold_left_reduction_p): Likewise.
+ 	(reduction_fn_for_scalar_code): Likewise.
+ 	(vect_can_vectorize_without_simd_p): Declare a nNew overload that takes
+ 	a code_helper.
+ 	* tree-vect-loop.c: Include case-cfn-macros.h.
+ 	(fold_left_reduction_fn): Take a code_helper instead of a tree_code.
+ 	(reduction_fn_for_scalar_code): Likewise.
+ 	(neutral_op_for_reduction): Likewise.
+ 	(needs_fold_left_reduction_p): Likewise.
+ 	(use_mask_by_cond_expr_p): Likewise.
+ 	(build_vect_cond_expr): Likewise.
+ 	(vect_create_partial_epilog): Likewise.  Use gimple_build rather
+ 	than gimple_build_assign.
+ 	(check_reduction_path): Handle calls and operate on code_helpers
+ 	rather than tree_codes.
+ 	(vect_is_simple_reduction): Likewise.
+ 	(vect_model_reduction_cost): Likewise.
+ 	(vect_find_reusable_accumulator): Likewise.
+ 	(vect_create_epilog_for_reduction): Likewise.
+ 	(vect_transform_cycle_phi): Likewise.
+ 	(vectorizable_reduction): Likewise.  Make more use of
+ 	lane_reduc_code_p.
+ 	(vect_transform_reduction): Use gimple_extract_op but expect
+ 	a tree_code for now.
+ 	(vect_can_vectorize_without_simd_p): New overload that takes
+ 	a code_helper.
+ 	* tree-vect-stmts.c (vectorizable_call): Handle reductions in
+ 	fully-masked loops.
+ 	* tree-vect-patterns.c (vect_mark_pattern_stmts): Use
+ 	gimple_extract_op when updating STMT_VINFO_REDUC_IDX.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* gimple-match.h (code_helper): Provide == and != overloads.
+ 	(code_helper::operator tree_code): Make explicit.
+ 	(code_helper::operator combined_fn): Likewise.
+ 	* gimple-match-head.c (convert_conditional_op): Use explicit
+ 	conversions where necessary.
+ 	(gimple_resimplify1, gimple_resimplify2, gimple_resimplify3): Likewise.
+ 	(maybe_push_res_to_seq, gimple_simplify): Likewise.
+ 	* gimple-fold.c (replace_stmt_with_simplification): Likewise.
+ 
+ 2021-11-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* gimple-match.h (code_helper): Add functions for querying whether
+ 	the code represents an internal_fn or a built_in_function.
+ 	Provide explicit conversion operators for both cases.
+ 	(gimple_extract_op): Declare.
+ 	* gimple-match-head.c (gimple_extract): New function, extracted from...
+ 	(gimple_simplify): ...here.
+ 	(gimple_extract_op): New function.
+ 
+ 2021-11-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR target/103274
+ 	* config/i386/i386.c (ix86_output_call_insn): Beef up comment about
+ 	nops emitted with SEH.
+ 	* config/i386/winnt.c (i386_pe_seh_unwind_emit): When switching to
+ 	the cold section, emit a nop before the directive if the previous
+ 	active instruction is a call.
+ 
+ 2021-11-30  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100711
+ 	* config/i386/sse.md (define_split): New splitters to simplify
+ 	not;vec_duplicate;and as vec_duplicate;andn.
+ 
+ 2021-11-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/103485
+ 	* match.pd (-((int)x >> (prec - 1)) to (unsigned)x >> (prec - 1)):
+ 	Use VIEW_CONVERT_EXPR for vectors.
+ 
+ 2021-11-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	* cfgrtl.c (skip_insns_after_block): Refactor code to
+ 	be more easily readable.
+ 	* expr.c (op_by_pieces_d::run): Remove unreachable
+ 	assert.
+ 	* sched-deps.c (sched_analyze): Remove unreachable
+ 	gcc_unreachable.
+ 	* sel-sched-ir.c (in_same_ebb_p): Likewise.
+ 	* tree-ssa-alias.c (nonoverlapping_refs_since_match_p):
+ 	Remove unreachable code.
+ 	* tree-vect-slp.c (vectorize_slp_instance_root_stmt):
+ 	Refactor to avoid unreachable loop iteration.
+ 	* tree.c (walk_tree_1): Remove unreachable break.
+ 	* vec-perm-indices.c (vec_perm_indices::series_p): Remove
+ 	unreachable return.
+ 
+ 2021-11-30  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR target/102347
+ 	* config/rs6000/rs6000-call.c (rs6000_builtin_decl): Remove builtin mask
+ 	check.
+ 
+ 2021-11-30  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c
+ 	(rs6000_cost_data::update_target_cost_per_stmt): Adjust the way to
+ 	compute extra penalized cost.  Remove useless parameter.
+ 	(rs6000_cost_data::rs6000_add_stmt_cost): Adjust the call to function
+ 	update_target_cost_per_stmt.
+ 
+ 2021-11-30  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	Revert:
+ 	2021-11-17  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/visium/visium.md (*add<mode>3_insn, *addsi3_insn, *addi3_insn,
+ 	*sub<mode>3_insn, *subsi3_insn, *subdi3_insn, *neg<mode>2_insn,
+ 	*negdi2_insn, *and<mode>3_insn, *ior<mode>3_insn, *xor<mode>3_insn,
+ 	*one_cmpl<mode>2_insn, *ashl<mode>3_insn, *ashr<mode>3_insn,
+ 	*lshr<mode>3_insn, *trunchiqi2_insn, *truncsihi2_insn,
+ 	*truncdisi2_insn, *extendqihi2_insn, *extendqisi2_insn,
+ 	*extendhisi2_insn, *extendsidi2_insn, *zero_extendqihi2_insn,
+ 	*zero_extendqisi2_insn, *zero_extendsidi2_insn): Fix split condition.
+ 
+ 2021-11-30  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/103467
+ 	* gimple-range-gori.cc (range_def_chain::register_dependency): Don't
+ 	use an object reference after a potential resize.
+ 
+ 2021-11-29  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/102811
+ 	* config/i386/i386.md (*movhi_internal): Introduce (*v,C) alternative.
+ 	Do not allocate non-GPR registers.  Optimize xmm->xmm moves when
+ 	optimizing for size.  Fix vpinsrw insn template.
+ 	(*movhf_internal): Fix pinsrw and pextrw insn templates for
+ 	AVX targets. Use sselog1 type instead of sselog.  Optimize GPR moves.
+ 	Optimize xmm->xmm moves for TARGET_SSE_PARTIAL_REG_DEPENDENCY
+ 	and TARGET_SSE_SPLIT_REGS targets.
+ 
+ 2021-11-29  Eric Gallager  <egallager@gcc.gnu.org>
+ 
+ 	* configure: Re-regenerate.
+ 
+ 2021-11-29  Eric Gallager  <egallager@gcc.gnu.org>
+ 
+ 	PR other/103021
+ 	* Makefile.in: Substitute CTAGS, ETAGS, and CSCOPE
+ 	variables. Use ETAGS variable in TAGS target.
+ 	* configure: Regenerate.
+ 	* configure.ac: Allow CTAGS, ETAGS, and CSCOPE
+ 	variables to be overridden.
+ 
+ 2021-11-29  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config/rs6000/xmmintrin.h (_mm_movemask_ps): Use vec_extractm
+ 	when _ARCH_PWR10.
+ 	* config/rs6000/emmintrin.h (_mm_movemask_pd): Likewise.
+ 	(_mm_movemask_epi8): Likewise.
+ 
+ 2021-11-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	* read-rtl-function.c (function_reader::read_rtx_operand):
+ 	Return only after resetting m_in_call_function_usage.
+ 
+ 2021-11-29  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_v1ti_to_ti): Perform the
+ 	conversion via V2DImode using vec_extractv2didi on TARGET_SSE2.
+ 	* config/i386/sse.md (rotlv1ti3, rotrv1ti3): Change constraint
+ 	on QImode shift amounts from const_int_operand to general_operand.
+ 
+ 2021-11-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree.h (reverse_storage_order_for_component_p): Remove
+ 	spurious gcc_unreachable.
+ 	* cfganal.c (dfs_find_deadend): Likewise.
+ 	* fold-const-call.c (fold_const_logb): Likewise.
+ 	(fold_const_significand): Likewise.
+ 	* gimple-ssa-store-merging.c (lhs_valid_for_store_merging_p):
+ 	Likewise.
+ 
+ 2021-11-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	* vec.c (qsort_chk): Do not return the void return value
+ 	from the noreturn qsort_chk_error.
+ 	* ccmp.c (expand_ccmp_expr_1): Remove unreachable return.
+ 	* df-scan.c (df_ref_equal_p): Likewise.
+ 	* dwarf2out.c (is_base_type): Likewise.
+ 	(add_const_value_attribute): Likewise.
+ 	* fixed-value.c (fixed_arithmetic): Likewise.
+ 	* gimple-fold.c (gimple_fold_builtin_fputs): Likewise.
+ 	* gimple-ssa-strength-reduction.c (stmt_cost): Likewise.
+ 	* graphite-isl-ast-to-gimple.c
+ 	(gcc_expression_from_isl_expr_op): Likewise.
+ 	(gcc_expression_from_isl_expression): Likewise.
+ 	* ipa-fnsummary.c (will_be_nonconstant_expr_predicate):
+ 	Likewise.
+ 	* lto-streamer-in.c (lto_input_mode_table): Likewise.
+ 
+ 2021-11-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102811
+ 	* config/i386/i386.c (inline_secondary_memory_needed): HImode
+ 	move between GPR and SSE registers is supported under
+ 	TARGET_SSE2 and above.
+ 	* config/i386/i386.md (extendhfsf2): Optimize expander.
+ 	(truncsfhf2): Ditto.
+ 	* config/i386/sse.md (sse2p4_1): Adjust attr for V8HFmode to
+ 	align with V8HImode.
+ 
+ 2021-11-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102811
+ 	PR target/103463
+ 	* config/i386/i386.c (ix86_secondary_reload): Without
+ 	TARGET_SSE4_1, General register is needed to move HImode from
+ 	sse register to memory.
+ 	* config/i386/sse.md (*vec_extrachf): Use %vpextrw instead of
+ 	pextrw in output templates.
+ 	* config/i386/i386.md (movhi_internal): Ditto, also fix typo of
+ 	MEM_P (operands[1]) and adjust mode/prefix/type attribute for
+ 	alternatives related to sse register.
+ 
+ 2021-11-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103458
+ 	* tree-ssa-dce.c (make_forwarders_with_degenerate_phis): Do not
+ 	create forwarders for blocks with abnormal predecessors.
+ 
+ 2021-11-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple-predicate-analysis.cc (can_be_invalidated_p):
+ 	Restore semantics to the one before the split from
+ 	tree-ssa-uninit.c.
+ 
+ 2021-11-28  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* profile.c: Include sreal.h
+ 	(struct bb_stats): New.
+ 	(cmp_stats): New function.
+ 	(compute_branch_probabilities): Output bb stats.
+ 
+ 2021-11-28  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* cfghooks.c: Include sreal.h, profile.h.
+ 	(profile_record_check_consistency): Fix checking of count counsistency;
+ 	record also dynamic mismatches.
+ 	* cfgrtl.c (rtl_account_profile_record): Similarly.
+ 	* tree-cfg.c (gimple_account_profile_record): Likewise.
+ 	* cfghooks.h (struct profile_record): Remove num_mismatched_freq_in,
+ 	num_mismatched_freq_out, turn time to double, add
+ 	dyn_mismatched_prob_out, dyn_mismatched_count_in,
+ 	num_mismatched_prob_out; remove num_mismatched_count_out.
+ 	* passes.c (account_profile_1): New function.
+ 	(account_profile_in_list): New function.
+ 	(pass_manager::dump_profile_report): Rewrite.
+ 	(execute_one_ipa_transform_pass): Check profile consistency after
+ 	running all passes.
+ 	(execute_all_ipa_transforms): Remove cfun test; record all transform
+ 	methods.
+ 	(execute_one_pass): Fix collecting of profile stats.
+ 
+ 2021-11-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/103431
+ 	* config/i386/i386.md (x86_64_shld, x86_shld, x86_64_shrd, x86_shrd):
+ 	Change insn pattern to accurately describe the instructions.
+ 	(*x86_64_shld_1, *x86_shld_1, *x86_64_shrd_1, *x86_shrd_1): New
+ 	define_insn patterns.
+ 	(*x86_64_shld_2, *x86_shld_2, *x86_64_shrd_2, *x86_shrd_2): New
+ 	define_insn_and_split patterns.
+ 	(*ashl<dwi>3_doubleword_mask, *ashl<dwi>3_doubleword_mask_1,
+ 	*<insn><dwi>3_doubleword_mask, *<insn><dwi>3_doubleword_mask_1,
+ 	ix86_rotl<dwi>3_doubleword, ix86_rotr<dwi>3_doubleword): Adjust
+ 	splitters for x86_{,64_}sh{l,r}d pattern changes.
+ 
+ 2021-11-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/103435
+ 	* gimple-ssa-store-merging.c (find_bswap_or_nop_finalize): Avoid UB if
+ 	n->range - rsize == 8, just clear both *cmpnop and *cmpxchg in that
+ 	case.
+ 
+ 2021-11-27  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/103441
+ 	* ipa-prop.c (ipcp_transform_function): Call
+ 	delete_unreachable_blocks_update_callgraph instead of returning
+ 	TODO_cleanup_cfg.
+ 
+ 2021-11-26  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	* tree-object-size.c (object_sizes_grow, object_sizes_release,
+ 	object_sizes_unknown_p, object_sizes_get, object_size_set_force,
+ 	object_sizes_set): New functions.
+ 	(addr_object_size, compute_builtin_object_size,
+ 	expr_object_size, call_object_size, unknown_object_size,
+ 	merge_object_sizes, plus_stmt_object_size,
+ 	cond_expr_object_size, collect_object_sizes_for,
+ 	check_for_plus_in_loops_1, init_object_sizes,
+ 	fini_object_sizes): Adjust.
+ 
+ 2021-11-26  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	* tree-object-size.c: New enum.
+ 	(object_sizes, computed, addr_object_size,
+ 	compute_builtin_object_size, expr_object_size, call_object_size,
+ 	merge_object_sizes, plus_stmt_object_size,
+ 	collect_object_sizes_for, init_object_sizes, fini_object_sizes,
+ 	object_sizes_execute): Replace magic numbers with enums.
+ 
+ 2021-11-26  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* tree-ssa-loop-ivopts.c (cand_value_at): Take a class
+ 	tree_niter_desc* argument instead of just a tree for NITER.
+ 	If we require the iv candidate value at the end of the final
+ 	loop iteration, try using the original loop bound as the
+ 	NITER for sufficiently simple loops.
+ 	(may_eliminate_iv): Update (only) call to cand_value_at.
+ 
+ 2021-11-26  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (analyze_function): Drop parameter F and dump
+ 	cgraph node name rather than cfun name.
+ 	(modref_generate): Update.
+ 	(modref_summaries::insert):Update.
+ 	(modref_summaries_lto::insert):Update.
+ 	(pass_modref::execute):Update.
+ 	(ipa_merge_modref_summary_after_inlining): Improve combining of
+ 	ECF_FLAGS.
+ 
+ 2021-11-26  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR ipa/102943
+ 	* ipa-modref.c (update_escape_summary_1): Fix handling of min_flags.
+ 
+ 2021-11-26  konglin1  <lingling.kong@intel.com>
+ 
+ 	PR target/102811
+ 	* config/i386/i386.c (ix86_can_change_mode_class): Allow 16 bit data in XMM register
+ 	for TARGET_SSE2.
+ 	* config/i386/i386.md (extendhfsf2): Add extenndhfsf2 for TARGET_F16C.
+ 	(extendhfdf2): Restrict extendhfdf for TARGET_AVX512FP16 only.
+ 	(*extendhf<mode>2): Rename from extendhf<mode>2.
+ 	(truncsfhf2): Likewise.
+ 	(truncdfhf2): Likewise.
+ 	(*trunc<mode>2): Likewise.
+ 
+ 2021-11-26  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR middle-end/103419
+ 	* match.pd: Fix typo, use the type of second parameter, not
+ 	first one.
+ 
+ 2021-11-25  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ipa-cp.c (ipa_value_range_from_jfunc): Remove forgotten early return.
+ 
+ 2021-11-25  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR middle-end/103406
+ 	* match.pd (minus @0 @0): Check tree_expr_maybe_infinite_p.
+ 
+ 2021-11-25  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/103227
+ 	* ipa-prop.h (ipa_get_param): New overload.  Move bits of the existing
+ 	one to the new one.
+ 	* ipa-param-manipulation.h (ipa_param_adjustments): New member
+ 	function get_updated_index_or_split.
+ 	* ipa-param-manipulation.c
+ 	(ipa_param_adjustments::get_updated_index_or_split): New function.
+ 	* ipa-prop.c (adjust_agg_replacement_values): Reimplement, add
+ 	capability to identify scalarized parameters and perform substitution
+ 	on them.
+ 	(ipcp_transform_function): Create descriptors earlier, handle new
+ 	return values of adjust_agg_replacement_values.
+ 
+ 2021-11-25  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::compute_ranges_defined): Remove.
+ 	(path_range_query::compute_ranges_in_block): Revert to bitmap order.
+ 	* gimple-range-path.h: Remove compute_ranges_defined.
+ 
+ 2021-11-25  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	PR target/103396
+ 	* config/gcn/gcn.c (move_callee_saved_registers): Ensure that the
+ 	number of spilled registers is counted correctly.
+ 
+ 2021-11-25  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-prop.h (ipa_node_params::ipa_node_params): Initialize
+ 	node_is_self_scc.
+ 
+ 2021-11-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/103359
+ 	* gimple-range-fold.cc (fold_using_range::range_of_phi): If arg is
+ 	equivalent to def, don't initially include it's range.
+ 
+ 2021-11-25  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Do not check
+ 	gimple_static_chain.
+ 
+ 2021-11-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	* cgraphunit.c (symbol_table::output_weakrefs): Remove
+ 	unreachable init.
+ 	(get_alias_symbol): Remove now unused function.
+ 
+ 2021-11-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	* cfgrtl.c (rtl_verify_fallthru): Do not stop verifying
+ 	with fatal_insn.
+ 	(skip_insns_after_block): Remove unreachable break and continue.
+ 
+ 2021-11-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	* cfgexpand.c (label_rtx_for_bb): Remove dead loop construct.
+ 
+ 2021-11-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	* regset.h (REG_SET_EMPTY_P): New macro.
+ 	* cfgcleanup.c (thread_jump): Use REG_SET_EMPTY_P.
+ 
+ 2021-11-25  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Use @option for -Wuninitialized.
+ 
+ 2021-11-25  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/103254
+ 	* gimple-range-path.cc (path_range_query::compute_ranges): Move
+ 	exported boolean code...
+ 	(path_range_query::compute_imports): ...here.
+ 
+ 2021-11-25  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/103254
+ 	* gimple-range-path.cc (path_range_query::compute_ranges_defined): New
+ 	(path_range_query::compute_ranges_in_block): Move to
+ 	compute_ranges_defined.
+ 	* gimple-range-path.h (compute_ranges_defined): New.
+ 
+ 2021-11-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/103417
+ 	* match.pd ((X & Y) CMP 0): Only handle eq and ne.  Commonalize
+ 	common tests.
+ 
+ 2021-11-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/103376
+ 	* gimple-ssa-store-merging.c (perform_symbolic_merge): For
+ 	BIT_IOR_EXPR, if masked1 && masked2 && masked1 != masked2, don't
+ 	punt, but set the corresponding result byte to MARKER_BYTE_UNKNOWN.
+ 	For BIT_XOR_EXPR similarly and if masked1 == masked2 and the
+ 	byte isn't MARKER_BYTE_UNKNOWN, set the corresponding result byte to
+ 	0.
+ 
+ 2021-11-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/102611
+ 	* doc/invoke.texi (-Wcomma-subscript): Document that for
+ 	-std=c++20 the option isn't enabled by default with -Wno-deprecated
+ 	but for -std=c++23 it is.
+ 
+ 2021-11-24  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (implicit_eaf_flags_for_edge_and_arg): Break out from...
+ 	(modref_merge_call_site_flags): ... here.
+ 	(ipa_merge_modref_summary_after_inlining): Use it.
+ 
+ 2021-11-24  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* cfgloop.c (verify_loop_structure): Reduce scope of
+ 	'class loop *loop' variable.
+ 	* ipa-fnsummary.c (analyze_function_body): Likewise.
+ 	* loop-init.c (fix_loop_structure): Likewise.
+ 	* loop-invariant.c (calculate_loop_reg_pressure): Likewise.
+ 	* predict.c (predict_loops): Likewise.
+ 	* tree-loop-distribution.c (loop_distribution::execute): Likewise.
+ 	* tree-vectorizer.c (pass_vectorize::execute): Likewise.
+ 
+ 2021-11-24  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/103231
+ 	* gimple-range.cc (gimple_ranger::gimple_ranger): Create stmt stack.
+ 	(gimple_ranger::gimple_ranger): Delete stmt stack.
+ 	(gimple_ranger::range_of_stmt): Process depenedencies if they have no
+ 	global cache entry.
+ 	(gimple_ranger::prefill_name): New.
+ 	(gimple_ranger::prefill_stmt_dependencies): New.
+ 	* gimple-range.h (class gimple_ranger): Add prototypes.
+ 
+ 2021-11-24  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::get_global_range): Always
+ 	return a range, return if it came from the cache or not.
+ 	(get_non_stale_global_range): Rename to get_global_range, and return
+ 	the temporal state in a flag.
+ 	* gimple-range-cache.h (get_non_stale_global_range): Rename and adjust.
+ 	* gimple-range.cc (gimple_ranger::range_of_expr): No need to query
+ 	get_global_range.
+ 	(gimple_ranger::range_of_stmt): Adjust for global cache temporal state
+ 	returned in a flag.
+ 
+ 2021-11-24  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range.cc (gimple_ranger::range_on_edge): Call trailer when
+ 	a constant is encountered to terminate the trace.
+ 
+ 2021-11-24  Maciej W. Rozycki  <macro@embecosm.com>
+ 
+ 	PR middle-end/103059
+ 	* reload.c (find_reloads_address_1): Also accept the ASHIFT form
+ 	of indexed addressing.
+ 	(find_reloads): Adjust accordingly.
+ 
+ 2021-11-24  Richard Biener  <rguenther@suse.de>
+ 	    Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR tree-optimization/103168
+ 	* ipa-modref.h (struct modref_summary): Add load_accesses.
+ 	* ipa-modref.c (modref_summary::finalize): Initialize load_accesses.
+ 	* tree-ssa-sccvn.c (visit_reference_op_call): Use modref
+ 	info to walk the virtual use->def chain to CSE const/pure
+ 	function calls possibly reading from memory.
+ 
+ 2021-11-24  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR middle-end/103244
+ 	* gimplify.c (gimplify_adjust_omp_clauses): Restore previous
+ 	OpenACC behavior.
+ 
+ 2021-11-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/103193
+ 	* match.pd: Avoid canonicalizing (le/ge @0 @0) to (eq @0 @0)
+ 	with NaNs and -ftrapping-math.
+ 
+ 2021-11-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/103384
+ 	* omp-general.c (omp_context_selector_matches): For ACCEL_COMPILER,
+ 	return 0 for kind(host) and continue for kind(nohost).
+ 
+ 2021-11-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/103365
+ 	* attribs.h (lookup_attribute): Allow attr_name to start with
+ 	underscore, as long as canonicalize_attr_name returns false.
+ 	(lookup_attribute_by_prefix): Don't call get_attribute_name twice.
+ 	* attribs.c (extract_attribute_substring): Reimplement using
+ 	canonicalize_attr_name.
+ 	(register_scoped_attribute): Change gcc_assert into
+ 	gcc_checking_assert, verify !canonicalize_attr_name rather than
+ 	that str.str doesn't start with '_'.
+ 
+ 2021-11-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/103376
+ 	* gimple-ssa-store-merging.c (perform_symbolic_merge): Add CODE
+ 	argument.  If CODE is not BIT_IOR_EXPR, ensure that one of masked1
+ 	or masked2 is 0.
+ 	(find_bswap_or_nop_1, find_bswap_or_nop,
+ 	imm_store_chain_info::try_coalesce_bswap): Adjust
+ 	perform_symbolic_merge callers.
+ 
+ 2021-11-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-loop-ivopts.c (find_givs): Take loop body as
+ 	argument instead of re-computing it.
+ 	(find_interesting_uses): Likewise.
+ 	(find_induction_variables): Pass through loop body.
+ 	(tree_ssa_iv_optimize_loop): Pass down loop body.
+ 
+ 2021-11-24  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-ssa-phiopt.c (spaceship_replacement): Handle new canonical
+ 	codegen.
+ 
+ 2021-11-24  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree.c (bitmask_inv_cst_vector_p): New.
+ 	* tree.h (bitmask_inv_cst_vector_p): New.
+ 	* match.pd: Use it in new bitmask compare pattern.
+ 
+ 2021-11-24  Jason Merrill  <jason@redhat.com>
+ 
+ 	* timevar.h (class auto_cond_timevar): New.
+ 
+ 2021-11-24  Hongtao Liu  <hongtao.liu@intel.com>
+ 	    H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	PR tree-optimization/103194
+ 	* match.pd (gimple_nop_atomic_bit_test_and_p): Extended to
+ 	match truncation.
+ 	* tree-ssa-ccp.c (gimple_nop_convert): Declare.
+ 	(optimize_atomic_bit_test_and): Enhance
+ 	optimize_atomic_bit_test_and to handle truncation.
+ 
+ 2021-11-23  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/88232
+ 	* Makefile.in (OBJS): Add gimple-warn-recursion.o.
+ 	* common.opt: Add -Winfinite-recursion.
+ 	* doc/invoke.texi (-Winfinite-recursion): Document.
+ 	* passes.def (pass_warn_recursion): Schedule a new pass.
+ 	* tree-pass.h (make_pass_warn_recursion): Declare.
+ 	* gimple-warn-recursion.c: New file.
+ 
+ 2021-11-23  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_invalid_new_builtin): Change
+ 	error messages for ENB_P8V and ENB_P9V.
+ 
+ 2021-11-23  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: Add power6-64 stanza.  Move
+ 	CMPB to power6-64 stanza.
+ 	* config/rs6000/rs6000-call.c (rs6000_invalid_new_builtin): Handle
+ 	ENB_P6_64 case.
+ 	(rs6000_new_builtin_is_supported): Likewise.
+ 	(rs6000_expand_new_builtin): Likewise.  Clean up formatting.
+ 	(rs6000_init_builtins): Handle ENB_P6_64 case.
+ 	* config/rs6000/rs6000-gen-builtins.c (bif_stanza): Add	BSTZ_P6_64.
+ 	(stanza_map): Add entry mapping power6-64 to BSTZ_P6_64.
+ 	(enable_string): Add "ENB_P6_64".
+ 	(write_decls): Add ENB_P6_64 to bif_enable enum.
+ 
+ 2021-11-23  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ipa-modref-tree.h (struct modref_tree): Remove max_bases, max_refs
+ 	and max_accesses.
+ 	(modref_tree::modref_tree): Remove parametr.
+ 	(modref_tree::insert_base): Add max_bases parameter.
+ 	(modref_tree::insert): Add max_bases, max_refs, max_accesses
+ 	parameters.
+ 	(modref_tree::insert): New member function.
+ 	(modref_tree::merge): Add max_bases, max_refs, max_accesses
+ 	parameters.
+ 	(modref_tree::insert): New member function.
+ 	* ipa-modref-tree.c (test_insert_search_collapse): Update.
+ 	(test_merge): Update.
+ 	* ipa-modref.c (dump_records): Don't dump max_refs and max_bases.
+ 	(dump_lto_records): Likewise.
+ 	(modref_summary::finalize): Fix whitespace.
+ 	(get_modref_function_summary): Likewise.
+ 	(modref_access_analysis::record_access): Update.
+ 	(modref_access_analysis::record_access_lto): Update.
+ 	(modref_access_analysis::process_fnspec): Update.
+ 	(analyze_function): Update.
+ 	(modref_summaries::duplicate): Update.
+ 	(modref_summaries_lto::duplicate): Update.
+ 	(write_modref_records): Update.
+ 	(read_modref_records): Update.
+ 	(read_section): Update.
+ 	(propagate_unknown_call): Update.
+ 	(modref_propagate_in_scc): Update.
+ 	(ipa_merge_modref_summary_after_inlining): Update.
+ 
+ 2021-11-23  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Remove 2 more duplicite param descriptions.
+ 
+ 2021-11-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103361
+ 	* gimple-loop-jam.c (adjust_unroll_factor): Use lambda_int
+ 	for the dependence distance.
+ 	* tree-data-ref.c (print_lambda_vector): Properly print a lambda_int.
+ 
+ 2021-11-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree-inline.h (struct copy_body_data): Remove
+ 	transform_lang_insert_block member.
+ 	* tree-inline.c (remap_block): Don't call
+ 	id->transform_lang_insert_block.
+ 	(optimize_inline_calls, copy_gimple_seq_and_replace_locals,
+ 	tree_function_versioning, maybe_inline_call_in_expr,
+ 	copy_fn): Don't initialize id.transform_lang_insert_block.
+ 	* gimplify.c (gimplify_omp_loop): Likewise.
+ 
+ 2021-11-23  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR tree-optimization/103335
+ 	* tree-ssa-dse.c (valid_ao_ref_for_dse): Rename to ...
+ 	(valid_ao_ref_kill_for_dse): ... this; do not check that boundaries
+ 	are divisible by BITS_PER_UNIT.
+ 	(get_byte_aligned_range_containing_ref): New function.
+ 	(get_byte_aligned_range_contained_in_ref): New function.
+ 	(normalize_ref): Rename to ...
+ 	(get_byte_range): ... this one; handle accesses not aligned to byte
+ 	boundary; return range in bytes rater than updating ao_ref.
+ 	(clear_live_bytes_for_ref): Take write ref by reference; simplify using
+ 	get_byte_access.
+ 	(setup_live_bytes_from_ref): Likewise.
+ 	(clear_bytes_written_by): Update.
+ 	(live_bytes_read): Update.
+ 	(dse_classify_store): Simplify tech before live_bytes_read checks.
+ 
+ 2021-11-23  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/102216
+ 	* gimple-fold.c (fold_stmt_1): Add canonicalization
+ 	of "&MEM[ssa_n, CST]" to "ssa_n p+ CST", note this
+ 	can only be done if !in_place.
+ 
+ 2021-11-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/102431
+ 	* gimplify.c (replace_reduction_placeholders): Remove.
+ 	(note_no_context_vars): New function.
+ 	(gimplify_omp_loop): For OMP_PARALLEL's BIND_EXPR create a new
+ 	BLOCK.  Use copy_tree_body_r with walk_tree instead of unshare_expr
+ 	and replace_reduction_placeholders for duplication of
+ 	OMP_CLAUSE_REDUCTION_{INIT,MERGE} expressions.  Ensure all mentioned
+ 	automatic vars have DECL_CONTEXT set to non-NULL before doing so
+ 	and reset it afterwards for those vars and their corresponding
+ 	vars.
+ 
+ 2021-11-23  Haochen Gui  <guihaoc@gcc.gnu.org>
+ 
+ 	PR target/100868
+ 	* config/rs6000/altivec.md (altivec_vreve<mode>2 for VEC_K): Use
+ 	xxbrq for v16qi, xxbrq + xxbrh for v8hi and xxbrq + xxbrw for v4si
+ 	or v4sf when p9_vector is set.
+ 	(altivec_vreve<mode>2 for VEC_64): Defined. Implemented by xxswapd.
+ 
+ 2021-11-23  Navid Rahimi  <navidrahimi@microsoft.com>
+ 
+ 	PR tree-optimization/102232
+ 	* match.pd (x * (1 + y / x) - y) -> (x - y % x): New optimization.
+ 
+ 2021-11-23  Navid Rahimi  <navidrahimi@microsoft.com>
+ 
+ 	PR tree-optimization/96779
+ 	* match.pd (-x == x) -> (x == 0): New optimization.
+ 
+ 2021-11-22  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR tree-optimization/98953
+ 	PR tree-optimization/103345
+ 	* gimple-ssa-store-merging.c (find_bswap_or_nop_1): Handle
+ 	BIT_XOR_EXPR and PLUS_EXPR the same as BIT_IOR_EXPR.
+ 	(pass_optimize_bswap::execute): Likewise.
+ 
+ 2021-11-22  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Remove duplicate documentation for 3 params.
+ 
+ 2021-11-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103351
+ 	* tree-ssa-dce.c (sort_phi_args): Sort after e->dest_idx as
+ 	second key.
+ 
+ 2021-11-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/103275
+ 	* config/i386/constraints.md (Bk): New
+ 	define_memory_constraint.
+ 	* config/i386/i386-protos.h (ix86_gpr_tls_address_pattern_p):
+ 	Declare.
+ 	* config/i386/i386.c (ix86_gpr_tls_address_pattern_p): New
+ 	function.
+ 	* config/i386/i386.md (*movsi_internal): Don't allow
+ 	mask/sse/mmx move in TLS code sequences.
+ 	(*movdi_internal): Ditto.
+ 
+ 2021-11-22  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/xtensa/xtensa.md (movdi_internal, movdf_internal): Fix split
+ 	condition.
+ 
+ 2021-11-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/101180
+ 	* config/i386/i386-options.c (ix86_valid_target_attribute_p): If
+ 	fndecl already has DECL_FUNCTION_SPECIFIC_TARGET, use that as base
+ 	instead of target_option_default_node.
+ 
+ 2021-11-21  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103227
+ 	* ipa-modref.c (parm_map_for_arg): Rename to ...
+ 	(parm_map_for_ptr): .. this one; handle static chain and calls to
+ 	malloc functions.
+ 	(modref_access_analysis::get_access): Use parm_map_for_ptr.
+ 	(modref_access_analysis::process_fnspec): Update.
+ 	(modref_access_analysis::analyze_load): Update.
+ 	(modref_access_analysis::analyze_store): Update.
+ 
+ 2021-11-21  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (ignore_nondeterminism_p): Move earlier in source
+ 	code.
+ 	(ignore_retval_p): Likewise.
+ 	(ignore_stores_p): Likewise.
+ 	(parm_map_for_arg): Likewise.
+ 	(class modref_access_analysis): New class.
+ 	(modref_access_analysis::set_side_effects): New member function.
+ 	(modref_access_analysis::set_nondeterministic): New member function.
+ 	(get_access): Turn to ...
+ 	(modref_access_analysis::get_access): ... this one.
+ 	(record_access): Turn to ...
+ 	(modref_access_analysis::record_access): ... this one.
+ 	(record_access_lto): Turn to ...
+ 	(modref_access_analysis::record_access_lto): ... This one.
+ 	(record_access_p): Turn to ...
+ 	(modref_access_analysis::record_access_p): ... This one
+ 	(modref_access_analysis::record_unknown_load): New member function.
+ 	(modref_access_analysis::record_unknown_store): New member function.
+ 	(get_access_for_fnspec): Turn to ...
+ 	(modref_access_analysis::get_access_for_fnspec): ... this one.
+ 	(merge_call_side_effects): Turn to ...
+ 	(moderf_access_analysis::merge_call_side_effects): Turn to ...
+ 	(collapse_loads): Move later in source code.
+ 	(collapse_stores): Move later in source code.
+ 	(process_fnspec): Turn to ...
+ 	(modref_access_analysis::process_fnspec): ... this one.
+ 	(analyze_call): Turn to ...
+ 	(modref_access_analysis::analyze_call): ... this one.
+ 	(struct summary_ptrs): Remove.
+ 	(analyze_load): Turn to ...
+ 	(modref_access_analysis::analyze_load): ... this one.
+ 	(analyze_store): Turn to ...
+ 	(modref_access_analysis::analyze_store): ... this one.
+ 	(analyze_stmt): Turn to ...
+ 	(modref_access_analysis::analyze_stmt): ... This one.
+ 	(remove_summary): Remove.
+ 	(modref_access_analysis::propagate): Break out from ...
+ 	(modref_access_analysis::analyze): Break out from ...
+ 	(analyze_function): ... here.
+ 
+ 2021-11-21  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Robin Dapp  <rdapp@linux.ibm.com>
+ 
+ 	PR target/102117
+ 	* tree-ssa-math-opts.c (convert_mult_to_widen): Recognize
+ 	signed WIDEN_MULT_EXPR if the target supports umul_widen_optab.
+ 
+ 2021-11-20  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103052
+ 	* ipa-modref.c (ignore_nondeterminism_p): Allow looping pure/cont.
+ 	(merge_call_side_effects): Improve debug output.
+ 
+ 2021-11-20  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103052
+ 	* ipa-pure-const.c (propagate_pure_const): Fix merging of loping flag.
+ 
+ 2021-11-20  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	PR tree-optimization/103226
+ 	* config/bfin/bfin.md (doloop pattern, splitter and expander): Clobber
+ 	CC.
+ 
+ 2021-11-20  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/103220
+ 	* match.pd ((type) X bitop CST): Don't check if CST
+ 	fits into the type if only the sign changes.
+ 
+ 2021-11-20  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR tree-optimization/102988
+ 	* gimple-harden-conditionals.cc (detach_value): Copy SSA_NAME
+ 	without decl sharing.
+ 
+ 2021-11-19  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* doc/invoke.texi: Remove whitespace after an @option.
+ 
+ 2021-11-19  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config/rs6000/emmintrin.h (_mm_sad_epu8): Use vec_absd when
+ 	_ARCH_PWR9, optimize vec_sum2s when LE.
+ 
+ 2021-11-19  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR target/80556
+ 	* config/darwin-driver.c (darwin_driver_init): Handle exported
+ 	symbols and symbol lists (suppress automatic export of the TLS
+ 	symbols).
+ 	* config/darwin.c (darwin_rename_builtins): Remove workaround.
+ 	* config/darwin.h (LINK_GCC_C_SEQUENCE_SPEC): Likewise.
+ 	(REAL_LIBGCC_SPEC): Handle revised library uses.
+ 	* config/darwin.opt (nodefaultexport): New.
+ 	* config/i386/darwin.h (PR80556_WORKAROUND): Remove.
+ 	* config/i386/darwin32-biarch.h (PR80556_WORKAROUND): Likewise.
+ 	* config/i386/darwin64-biarch.h (PR80556_WORKAROUND): Likewise.
+ 
+ 2021-11-19  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* opts.c (default_options_table): Switch off
+ 	flag_semantic_interposition at Ofast.
+ 	* doc/invoke.texi (Optimize Options): Document that Ofast switches off
+ 	-fsemantic-interposition.
+ 
+ 2021-11-19  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Do not guard modref
+ 	by !gimple_call_chain.
+ 
+ 2021-11-19  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR c++/33925
+ 	PR c/102867
+ 	* doc/invoke.texi (-Waddress): Update.
+ 
+ 2021-11-19  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/103254
+ 	* gimple-range-gori.cc (range_def_chain::get_def_chain): Limit the
+ 	depth for all statements with multple ssa names.
+ 
+ 2021-11-19  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
+ 
+ 	* config/s390/s390.md (define_peephole2): Variable insn points
+ 	to the first matched insn.  Use peep2_next_insn(1) to refer to
+ 	the second matched insn.
+ 
+ 2021-11-19  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/103311
+ 	PR target/103330
+ 	* tree-vect-slp-patterns.c (vect_validate_multiplication): Fix CONJ
+ 	test to new codegen.
+ 	(complex_mul_pattern::matches): Move check downwards.
+ 
+ 2021-11-19  Martin Liska  <mliska@suse.cz>
+ 
+ 	Revert:
+ 	2021-11-19  Martin Liska  <mliska@suse.cz>
+ 
+ 	* cfgexpand.c (pass_expand::execute): Use option directly.
+ 	* function.c (allocate_struct_function): Likewise.
+ 	* gimple-low.c (lower_function_body): Likewise.
+ 	(lower_stmt): Likewise.
+ 	* gimple-ssa-backprop.c (backprop::prepare_change): Likewise.
+ 	* ipa-param-manipulation.c (ipa_param_adjustments::modify_call): Likewise.
+ 	* ipa-split.c (split_function): Likewise.
+ 	* lto-streamer-in.c (input_function): Likewise.
+ 	* sese.c (sese_insert_phis_for_liveouts): Likewise.
+ 	* ssa-iterators.h (num_imm_uses): Likewise.
+ 	* tree-cfg.c (make_blocks): Likewise.
+ 	(gimple_merge_blocks): Likewise.
+ 	* tree-inline.c (tree_function_versioning): Likewise.
+ 	* tree-loop-distribution.c (generate_loops_for_partition): Likewise.
+ 	* tree-sra.c (analyze_access_subtree): Likewise.
+ 	* tree-ssa-dce.c (remove_dead_stmt): Likewise.
+ 	* tree-ssa-loop-ivopts.c (remove_unused_ivs): Likewise.
+ 	* tree-ssa-phiopt.c (spaceship_replacement): Likewise.
+ 	* tree-ssa-reassoc.c (reassoc_remove_stmt): Likewise.
+ 	* tree-ssa-tail-merge.c (tail_merge_optimize): Likewise.
+ 	* tree-ssa-threadedge.c (propagate_threaded_block_debug_into): Likewise.
+ 	* tree-ssa.c (gimple_replace_ssa_lhs): Likewise.
+ 	(target_for_debug_bind): Likewise.
+ 	(insert_debug_temp_for_var_def): Likewise.
+ 	(insert_debug_temps_for_defs): Likewise.
+ 	(reset_debug_uses): Likewise.
+ 	* tree-ssanames.c (release_ssa_name_fn): Likewise.
+ 	* tree-vect-loop-manip.c (adjust_vec_debug_stmts): Likewise.
+ 	(adjust_debug_stmts): Likewise.
+ 	(adjust_phi_and_debug_stmts): Likewise.
+ 	(vect_do_peeling): Likewise.
+ 	* tree-vect-loop.c (vect_transform_loop_stmt): Likewise.
+ 	(vect_transform_loop): Likewise.
+ 	* tree.h (MAY_HAVE_DEBUG_MARKER_STMTS): Remove
+ 	(MAY_HAVE_DEBUG_BIND_STMTS): Remove.
+ 	(MAY_HAVE_DEBUG_STMTS): Use options directly.
+ 
+ 2021-11-19  Giuliano Belinassi  <gbelinassi@suse.de>
+ 
+ 	* gcc.c (process_command): Skip dumpdir override if file is a
+ 	not_actual_file_p.
+ 	* doc/invoke.texi: Update -dumpdir documentation.
+ 
+ 2021-11-19  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/103314
+ 	* match.pd ((type) X op CST): Restrict the equal
+ 	TYPE_PRECISION case to GIMPLE only.
+ 
+ 2021-11-19  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR ipa/103230
+ 	* ipa-modref-tree.h (struct modref_parm_map): Add default
+ 	constructor.
+ 	* ipa-modref.c (ipa_merge_modref_summary_after_inlining): Use it.
+ 
+ 2021-11-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/103248
+ 	* tree-eh.c (operation_could_trap_helper_p): Properly handle
+ 	fixed-point RDIV_EXPR.
+ 
+ 2021-11-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102436
+ 	* tree-ssa-loop-im.c (execute_sm_if_changed): Add mode
+ 	to just create the if structure and return the then block.
+ 	(execute_sm): Add flag to indicate the var will re-use
+ 	another flag var.
+ 	(hoist_memory_references): Support a single conditional
+ 	block with all stores as special case.
+ 
+ 2021-11-19  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/103317
+ 	* tree-ssa-phiopt.c (minmax_replacement): For the non empty
+ 	middle bb case, check to make sure it has a single predecessor.
+ 
+ 2021-11-19  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/103257
+ 	* match.pd
+ 	((m1 >/</>=/<= m2) * d -> (m1 >/</>=/<= m2) ? d : 0):
+ 	Disable until !canonicalize_math_p ().
+ 
+ 2021-11-19  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/19808
+ 	PR c++/96121
+ 	* doc/invoke.texi: Update documentation for -Wuninitialized.
+ 	* tree.c (stabilize_reference): Set location.
+ 
+ 2021-11-19  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102543
+ 	* config/i386/x86-tune-costs.h (skylake_cost): Reduce cost of
+ 	storing 256/512-bit SSE register to be equal to cost of
+ 	unaligned store to avoid odd alignment peeling.
+ 	(icelake_cost): Ditto.
+ 
+ 2021-11-18  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/predicates.md (current_file_function_operand):
+ 	Add flag_semantic_interposition to call of decl_replaceable_p.
+ 
+ 2021-11-18  Martin Liska  <mliska@suse.cz>
+ 
+ 	* ipa-modref.c (analyze_function): Do not execute the code
+ 	only if dump_file != NULL.
+ 
+ 2021-11-18  Martin Liska  <mliska@suse.cz>
+ 
+ 	* ipa-modref.c (analyze_function): Use fnode instead of repeated
+ 	cgraph_node::get (current_function_decl).
+ 
+ 2021-11-18  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* cgraph.c (cgraph_node::get_availability): Update call of
+ 	decl_replaceable_p.
+ 	(cgraph_node::verify_node): Verify that semantic_interposition flag
+ 	is set correclty.
+ 	* cgraph.h: (symtab_node): Add semantic_interposition flag.
+ 	* cgraphclones.c (set_new_clone_decl_and_node_flags): Clear
+ 	semantic_interposition flag.
+ 	* cgraphunit.c (cgraph_node::finalize_function): Set
+ 	semantic_interposition flag.
+ 	(cgraph_node::add_new_function): Likewise.
+ 	(varpool_node::finalize_decl): Likewise.
+ 	(cgraph_node::create_wrapper): Likewise.
+ 	* common.opt (fsemantic-interposition): Turn to optimization node.
+ 	* lto-cgraph.c (lto_output_node): Stream semantic_interposition.
+ 	(lto_output_varpool_node): Likewise.
+ 	(input_overwrite_node): Likewise.
+ 	(input_varpool_node): Likewise.
+ 	* symtab.c (symtab_node::dump_base): Dump new flag.
+ 	* varasm.c (decl_replaceable_p): Add semantic_interposition_p
+ 	parameter.
+ 	* varasm.h (decl_replaceable_p): Update declaration.
+ 	* varpool.c (varpool_node::ctor_useable_for_folding_p):
+ 	Use semantic_interposition flag.
+ 	(varpool_node::get_availability): Likewise.
+ 	(varpool_node::create_alias): Copy semantic_interposition flag.
+ 
+ 2021-11-18  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103266
+ 	* ipa-modref.c (modref_eaf_analysis::merge_call_lhs_flags): Unused
+ 	parameter may still be returned.
+ 	(modref_eaf_analysis::analyze_ssa_name): Call merge_call_lhs_flags
+ 	even for unused function args.
+ 
+ 2021-11-18  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/103311
+ 	* tree-vect-slp-patterns.c (complex_mul_pattern::matches,
+ 	complex_fms_pattern::matches): Check for multiplications.
+ 
+ 2021-11-18  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/102952
+ 	* config/i386/i386.c (ix86_output_jmp_thunk_or_indirect): Emit
+ 	CS prefix for -mindirect-branch-cs-prefix.
+ 	(ix86_output_indirect_branch_via_reg): Likewise.
+ 	* config/i386/i386.opt: Add -mindirect-branch-cs-prefix.
+ 	* doc/invoke.texi: Document -mindirect-branch-cs-prefix.
+ 
+ 2021-11-18  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/driver-rs6000.c (detect_processor_aix): Add
+ 	power10.
+ 
+ 2021-11-18  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/103253
+ 	* tree-ssa-math-opts.c (convert_mult_to_fma): Check for LHS.
+ 
+ 2021-11-18  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	* doc/extend.texi: Document __builtin_assoc_barrier.
+ 
+ 2021-11-18  Martin Liska  <mliska@suse.cz>
+ 
+ 	* cfgexpand.c (pass_expand::execute): Use option directly.
+ 	* function.c (allocate_struct_function): Likewise.
+ 	* gimple-low.c (lower_function_body): Likewise.
+ 	(lower_stmt): Likewise.
+ 	* gimple-ssa-backprop.c (backprop::prepare_change): Likewise.
+ 	* ipa-param-manipulation.c (ipa_param_adjustments::modify_call): Likewise.
+ 	* ipa-split.c (split_function): Likewise.
+ 	* lto-streamer-in.c (input_function): Likewise.
+ 	* sese.c (sese_insert_phis_for_liveouts): Likewise.
+ 	* ssa-iterators.h (num_imm_uses): Likewise.
+ 	* tree-cfg.c (make_blocks): Likewise.
+ 	(gimple_merge_blocks): Likewise.
+ 	* tree-inline.c (tree_function_versioning): Likewise.
+ 	* tree-loop-distribution.c (generate_loops_for_partition): Likewise.
+ 	* tree-sra.c (analyze_access_subtree): Likewise.
+ 	* tree-ssa-dce.c (remove_dead_stmt): Likewise.
+ 	* tree-ssa-loop-ivopts.c (remove_unused_ivs): Likewise.
+ 	* tree-ssa-phiopt.c (spaceship_replacement): Likewise.
+ 	* tree-ssa-reassoc.c (reassoc_remove_stmt): Likewise.
+ 	* tree-ssa-tail-merge.c (tail_merge_optimize): Likewise.
+ 	* tree-ssa-threadedge.c (propagate_threaded_block_debug_into): Likewise.
+ 	* tree-ssa.c (gimple_replace_ssa_lhs): Likewise.
+ 	(target_for_debug_bind): Likewise.
+ 	(insert_debug_temp_for_var_def): Likewise.
+ 	(insert_debug_temps_for_defs): Likewise.
+ 	(reset_debug_uses): Likewise.
+ 	* tree-ssanames.c (release_ssa_name_fn): Likewise.
+ 	* tree-vect-loop-manip.c (adjust_vec_debug_stmts): Likewise.
+ 	(adjust_debug_stmts): Likewise.
+ 	(adjust_phi_and_debug_stmts): Likewise.
+ 	(vect_do_peeling): Likewise.
+ 	* tree-vect-loop.c (vect_transform_loop_stmt): Likewise.
+ 	(vect_transform_loop): Likewise.
+ 	* tree.h (MAY_HAVE_DEBUG_MARKER_STMTS): Remove
+ 	(MAY_HAVE_DEBUG_BIND_STMTS): Remove.
+ 	(MAY_HAVE_DEBUG_STMTS): Use options directly.
+ 
+ 2021-11-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103277
+ 	* tree-ssa-dse.c (need_ab_cleanup): New.
+ 	(dse_optimize_redundant_stores): Adjust.
+ 	(delete_dead_or_redundant_assignment): Get extra
+ 	need_ab_cleanup argument and set when abnormal cleanup is
+ 	needed.
+ 	(dse_optimize_call): Adjust.
+ 	(dse_optimize_stmt): Likewise.
+ 	(pass_dse::execute): Allocate and deallocate need_ab_cleanup.
+ 	Perform abnormal cleanup.
+ 	* tree-ssa-dse.h (delete_dead_or_redundant_assignment): Adjust.
+ 
+ 2021-11-18  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_atomic_fetch_op_loop):
+ 	Adjust generated cfg to avoid infinite loop.
+ 
+ 2021-11-18  konglin1  <lingling.kong@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm512_mul_pch): Add alias for _mm512_fmul_pch.
+ 	(_mm512_mask_mul_pch): Likewise.
+ 	(_mm512_maskz_mul_pch): Likewise.
+ 	(_mm512_mul_round_pch): Likewise.
+ 	(_mm512_mask_mul_round_pch): Likewise.
+ 	(_mm512_maskz_mul_round_pch): Likewise.
+ 	(_mm512_cmul_pch): Likewise.
+ 	(_mm512_mask_cmul_pch): Likewise.
+ 	(_mm512_maskz_cmul_pch): Likewise.
+ 	(_mm512_cmul_round_pch): Likewise.
+ 	(_mm512_mask_cmul_round_pch): Likewise.
+ 	(_mm512_maskz_cmul_round_pch): Likewise.
+ 	(_mm_mul_sch): Likewise.
+ 	(_mm_mask_mul_sch): Likewise.
+ 	(_mm_maskz_mul_sch): Likewise.
+ 	(_mm_mul_round_sch): Likewise.
+ 	(_mm_mask_mul_round_sch): Likewise.
+ 	(_mm_maskz_mul_round_sch): Likewise.
+ 	(_mm_cmul_sch): Likewise.
+ 	(_mm_mask_cmul_sch): Likewise.
+ 	(_mm_maskz_cmul_sch): Likewise.
+ 	(_mm_cmul_round_sch): Likewise.
+ 	(_mm_mask_cmul_round_sch): Likewise.
+ 	(_mm_maskz_cmul_round_sch): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm_mul_pch): Likewise.
+ 	(_mm_mask_mul_pch): Likewise.
+ 	(_mm_maskz_mul_pch): Likewise.
+ 	(_mm256_mul_pch): Likewise.
+ 	(_mm256_mask_mul_pch): Likewise.
+ 	(_mm256_maskz_mul_pch): Likewise.
+ 	(_mm_cmul_pch): Likewise.
+ 	(_mm_mask_cmul_pch): Likewise.
+ 	(_mm_maskz_cmul_pch): Likewise.
+ 	(_mm256_cmul_pch): Likewise.
+ 	(_mm256_mask_cmul_pch): Likewise.
+ 	(_mm256_maskz_cmul_pch): Likewise.
+ 
+ 2021-11-17  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/103228
+ 	PR tree-optimization/55177
+ 	* match.pd ((type) X bitop CST): Also do this
+ 	transformation for nop conversions.
+ 
+ 2021-11-17  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR tree-optimization/102759
+ 	* gimple-array-bounds.cc (build_printable_array_type): Move...
+ 	* gimple-ssa-warn-access.cc (build_printable_array_type): Avoid
+ 	pathological function redeclarations that remove a previously
+ 	declared prototype.
+ 	Improve formatting of function arguments in informational notes.
+ 	* pointer-query.cc (build_printable_array_type): ...to here.
+ 	* pointer-query.h (build_printable_array_type): Declared.
+ 
+ 2021-11-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/102952
+ 	* config/i386/i386-opts.h (harden_sls): New enum.
+ 	* config/i386/i386.c (output_indirect_thunk): Mitigate against
+ 	SLS for function return.
+ 	(ix86_output_function_return): Likewise.
+ 	(ix86_output_jmp_thunk_or_indirect): Mitigate against indirect
+ 	branch.
+ 	(ix86_output_indirect_jmp): Likewise.
+ 	(ix86_output_call_insn): Likewise.
+ 	* config/i386/i386.opt: Add -mharden-sls=.
+ 	* doc/invoke.texi: Document -mharden-sls=.
+ 
+ 2021-11-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/103307
+ 	* config/i386/i386.c (ix86_code_end): Remove "%!" before ret.
+ 	(ix86_output_function_return): Likewise.
+ 	* config/i386/i386.md (simple_return_pop_internal): Likewise.
+ 
+ 2021-11-17  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103246
+ 	* ipa-modref.c (read_modref_records): Fix streaminig in of every_access
+ 	flag.
+ 
+ 2021-11-17  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.c (indirect_thunks_used): Redefine as HARD_REG_SET.
+ 	(ix86_code_end): Use TEST_HARD_REG_BIT on indirect_thunks_used.
+ 	(ix86_output_indirect_branch_via_reg): Use SET_HARD_REG_BIT
+ 	on indirect_thunks_used.
+ 	(ix86_output_indirect_function_return): Ditto.
+ 
+ 2021-11-17  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.c: Include cgraph.h and tree-streamer.h.
+ 	(modref_access_node::stream_out): New member function.
+ 	(modref_access_node::stream_in): New member function.
+ 	* ipa-modref-tree.h (modref_access_node::stream_out,
+ 	modref_access_node::stream_in): Declare.
+ 	* ipa-modref.c (modref_summary_lto::useful_p): Free useless kills.
+ 	(modref_summary_lto::dump): Dump kills.
+ 	(analyze_store): Record kills for LTO
+ 	(analyze_stmt): Likewise.
+ 	(modref_summaries_lto::duplicate): Duplicate kills.
+ 	(write_modref_records): Use new stream_out member function.
+ 	(read_modref_records): Likewise.
+ 	(modref_write): Stream out kills.
+ 	(read_section): Stream in kills
+ 	(remap_kills): New function.
+ 	(update_signature): Use it.
+ 
+ 2021-11-17  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.h (LEGACY_SSE_REGNO_P): New predicate.
+ 	(SSE_REGNO_P): Use LEGACY_SSE_REGNO_P predicate.
+ 	* config/i386/i386.c (zero_all_vector_registers):
+ 	Use LEGACY_SSE_REGNO_P predicate.
+ 	(ix86_register_priority): Use REX_INT_REGNO_P, REX_SSE_REGNO_P
+ 	and EXT_REG_SSE_REGNO_P predicates.
+ 	(ix86_hard_regno_call_part_clobbered): Use REX_SSE_REGNO_P
+ 	and LEGACY_SSE_REGNO_P predicates.
+ 
+ 2021-11-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	* doc/invoke.texi (C++ Dialect Options): Document
+ 	-fimplicit-constexpr.
+ 
+ 2021-11-17  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+ 
+ 	* config/aarch64/aarch64-modes.def (VECTOR_MODE): New V8DI mode.
+ 	* config/aarch64/aarch64.c (aarch64_hard_regno_mode_ok): Handle
+ 	V8DImode.
+ 	* config/aarch64/iterators.md (define_mode_attr nunits): Add entry
+ 	for V8DI.
+ 
+ 2021-11-17  Martin Uecker  <uecker@gcc.gnu.org>
+ 
+ 	PR c/91038
+ 	PR c/29970
+ 	* gimplify.c (gimplify_var_or_parm_decl): Update comment.
+ 	(gimplify_compound_lval): Gimplify base expression first.
+ 	(gimplify_target_expr): Add comment.
+ 
+ 2021-11-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/103192
+ 	* tree-ssa-loop-im.c (move_computations_worker): Use
+ 	reset_flow_sensitive_info instead of manually clearing
+ 	SSA_NAME_RANGE_INFO and do it for all SSA_NAMEs, not just ones
+ 	with integral types.
+ 
+ 2021-11-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/103255
+ 	* gimple-range-fold.cc (fold_using_range::range_of_address): Return
+ 	range_nonzero rather than unadjusted base's range.  Formatting fixes.
+ 
+ 2021-11-17  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* doc/md.texi (cond_fmin@var{mode}, cond_fmax@var{mode}): Document.
+ 	* optabs.def (cond_fmin_optab, cond_fmax_optab): New optabs.
+ 	* internal-fn.def (COND_FMIN, COND_FMAX): New functions.
+ 	* internal-fn.c (first_commutative_argument): Handle them.
+ 	(FOR_EACH_COND_FN_PAIR): Likewise.
+ 	* match.pd (UNCOND_BINARY, COND_BINARY): Likewise.
+ 	* config/aarch64/aarch64-sve.md (cond_<fmaxmin><mode>): New
+ 	pattern.
+ 
+ 2021-11-17  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/i386/i386.md (*add<dwi>3_doubleword, *addv<dwi>4_doubleword,
+ 	*addv<dwi>4_doubleword_1, *sub<dwi>3_doubleword,
+ 	*subv<dwi>4_doubleword, *subv<dwi>4_doubleword_1,
+ 	*add<dwi>3_doubleword_cc_overflow_1, *divmodsi4_const,
+ 	*neg<dwi>2_doubleword, *tls_dynamic_gnu2_combine_64_<mode>): Fix split
+ 	condition.
+ 
+ 2021-11-17  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/103288
+ 	* tree-ssa-phiopt.c (value_replacement): Return early if middle
+ 	block has more than one pred.
+ 
+ 2021-11-17  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/visium/visium.md (*add<mode>3_insn, *addsi3_insn, *addi3_insn,
+ 	*sub<mode>3_insn, *subsi3_insn, *subdi3_insn, *neg<mode>2_insn,
+ 	*negdi2_insn, *and<mode>3_insn, *ior<mode>3_insn, *xor<mode>3_insn,
+ 	*one_cmpl<mode>2_insn, *ashl<mode>3_insn, *ashr<mode>3_insn,
+ 	*lshr<mode>3_insn, *trunchiqi2_insn, *truncsihi2_insn,
+ 	*truncdisi2_insn, *extendqihi2_insn, *extendqisi2_insn,
+ 	*extendhisi2_insn, *extendsidi2_insn, *zero_extendqihi2_insn,
+ 	*zero_extendqisi2_insn, *zero_extendsidi2_insn): Fix split condition.
+ 
+ 2021-11-17  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR preprocessor/103026
+ 	* doc/invoke.texi: Document -Wbidi-chars.
+ 
+ 2021-11-17  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103246
+ 	* ipa-modref.c (ipa_merge_modref_summary_after_inlining): Fix clearing
+ 	of to_info_lto
+ 
+ 2021-11-16  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ipa-modref.c (get_modref_function_summary): Declare.
+ 	* ipa-modref.h (get_modref_function_summary): New function.
+ 	* tree-ssa-dse.c (clear_live_bytes_for_ref): Break out from ...
+ 	(clear_bytes_written_by): ... here; also clear memory killed by
+ 	calls.
+ 
+ 2021-11-16  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* ggc-common.c (gt_pch_save): If we cannot find a suitable
+ 	memory segment for save, then error-out, do not try to
+ 	continue.
+ 	(gt_pch_restore): Save the existing line table, and when
+ 	the replacement is being read, use that when constructing
+ 	diagnostics.
+ 
+ 2021-11-16  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/102976
+ 	* config/rs6000/mma.md (*vsx_assemble_pair): Add early-clobber for
+ 	output operand.
+ 	(*mma_assemble_acc): Likewise.
+ 
+ 2021-11-16  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR tree-optimization/102960
+ 	* gimple-fold.c (get_range_strlen): Take bitmap as an argument rather
+ 	than a pointer to it.
+ 	(get_range_strlen_tree): Same.  Remove bitmap allocation.  Use
+ 	an auto_bitmap.
+ 	(get_maxval_strlen): Use an auto_bitmap.
+ 	* tree-ssa-strlen.c (get_range_strlen_dynamic): Factor out PHI
+ 	handling...
+ 	(get_range_strlen_phi): ...into this function.
+ 	Avoid assuming maximum string length is constant
+ 	(printf_strlen_execute): Dump pointer query cache contents when
+ 	details are requisted.
+ 
+ 2021-11-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	* langhooks.h (struct lang_hooks): Adjust comment.
+ 	* print-tree.c (print_node): Also call print_xnode hook for
+ 	tcc_constant class.
+ 
+ 2021-11-16  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/103218
+ 	* match.pd: New pattern for "((type)(a<0)) << SIGNBITOFA".
+ 
+ 2021-11-16  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/arc.md (maddhisi4): Use a single move to accumulator.
+ 	(umaddhisi4): Likewise.
+ 	(machi): Update pattern.
+ 	(umachi): Likewise.
+ 
+ 2021-11-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102880
+ 	* tree-ssa-dce.c (sort_phi_args): New function.
+ 	(make_forwarders_with_degenerate_phis): Likewise.
+ 	(perform_tree_ssa_dce): Call
+ 	make_forwarders_with_degenerate_phis.
+ 
+ 2021-11-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102880
+ 	* tree-ssa-phiopt.c (tree_ssa_phiopt_worker): Push
+ 	single_pred (bb1) condition to places that really need it.
+ 	(match_simplify_replacement): Likewise.
+ 	(value_replacement): Likewise.
+ 	(replace_phi_edge_with_variable): Deal with extra edges
+ 	into the middle BB.
+ 
+ 2021-11-16  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* cfgexpand.c (expand_gimple_basic_block): Use build_debug_expr_decl,
+ 	add a fixme note about the mode assignment perhaps being unnecessary.
+ 	* ipa-param-manipulation.c (ipa_param_adjustments::modify_call):
+ 	Likewise.
+ 	(ipa_param_body_adjustments::mark_dead_statements): Likewise.
+ 	(ipa_param_body_adjustments::reset_debug_stmts): Likewise.
+ 	* tree-inline.c (remap_ssa_name): Likewise.
+ 	(tree_function_versioning): Likewise.
+ 	* tree-into-ssa.c (rewrite_debug_stmt_uses): Likewise.
+ 	* tree-ssa-loop-ivopts.c (remove_unused_ivs): Likewise.
+ 	* tree-ssa.c (insert_debug_temp_for_var_def): Likewise.
+ 
+ 2021-11-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/103208
+ 	* omp-expand.c (expand_omp_build_cond): New function.
+ 	(expand_omp_for_init_counts, expand_omp_for_init_vars,
+ 	expand_omp_for_static_nochunk, expand_omp_for_static_chunk): Use it.
+ 
+ 2021-11-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/102009
+ 	* gimple-ssa-warn-access.cc (pass_waccess::check_alloc_size_call):
+ 	Punt if any of alloc_size arguments is out of bounds vs. number of
+ 	call arguments.
+ 
+ 2021-11-16  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/i386/i386.md (*bmi2_rorx<mode3>_1): Make conditional
+ 	on !optimize_function_for_size_p.
+ 	(*<any_rotate><mode>3_1): Add preferred_for_size attribute.
+ 	(define_splits): Conditionalize on !optimize_function_for_size_p.
+ 	(*bmi2_rorxsi3_1_zext): Likewise.
+ 	(*<any_rotate>si2_1_zext): Add preferred_for_size attribute.
+ 	(define_splits): Conditionalize on !optimize_function_for_size_p.
+ 
+ 2021-11-16  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR ipa/103262
+ 	* ipa-modref.c (merge_call_side_effects): Fix uninitialized
+ 	access.
+ 
+ 2021-11-16  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/103245
+ 	* match.pd: Combine the abs pattern matching using multiplication.
+ 	Adding optional nop_convert too.
+ 
+ 2021-11-16  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR middle-end/103268
+ 	* tree-ssa-ccp.c (optimize_atomic_bit_test_and): Add a missing
+ 	return.
+ 
+ 2021-11-15  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	* gimple-fold.c (gimple_fold_builtin_strncat): Use ranges to
+ 	determine if it is safe to transform to strcat.
+ 	(gimple_fold_builtin_snprintf): Likewise.
+ 
+ 2021-11-15  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	* gimple-fold.c (known_lower): New function.
+ 	(gimple_fold_builtin_strncat_chk,
+ 	gimple_fold_builtin_memory_chk, gimple_fold_builtin_stxcpy_chk,
+ 	gimple_fold_builtin_stxncpy_chk,
+ 	gimple_fold_builtin_snprintf_chk,
+ 	gimple_fold_builtin_sprintf_chk): Use it.
+ 
+ 2021-11-15  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	* gimple-fold.c (dump_transformation): New function.
+ 	(gimple_fold_builtin_stxcpy_chk,
+ 	gimple_fold_builtin_stxncpy_chk): Use it.  Simplify to
+ 	BUILT_IN_STRNCPY if return value is not used.
+ 
+ 2021-11-15  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR middle-end/103184
+ 	* tree-ssa-ccp.c (optimize_atomic_bit_test_and): Check optab
+ 	before transforming equivalent, but slighly different cases to
+ 	their canonical forms.
+ 
+ 2021-11-15  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR fortran/102992
+ 	* config/darwin.h (TARGET_DTORS_FROM_CXA_ATEXIT): New.
+ 	* doc/tm.texi: Regenerated.
+ 	* doc/tm.texi.in: Add TARGET_DTORS_FROM_CXA_ATEXIT hook.
+ 	* ipa.c (cgraph_build_static_cdtor_1): Return the built
+ 	function decl.
+ 	(build_cxa_atexit_decl): New.
+ 	(build_dso_handle_decl): New.
+ 	(build_cxa_dtor_registrations): New.
+ 	(compare_cdtor_tu_order): New.
+ 	(build_cxa_atexit_fns): New.
+ 	(ipa_cdtor_merge): If dtors_from_cxa_atexit is set,
+ 	process the DTORs/CTORs accordingly.
+ 	(pass_ipa_cdtor_merge::gate): Also run if
+ 	dtors_from_cxa_atexit is set.
+ 	* target.def (dtors_from_cxa_atexit): New hook.
+ 
+ 2021-11-15  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config.in: Regenerate.
+ 	* configure: Regenerate.
+ 	* configure.ac: Test ld64 for -platform-version support.
+ 
+ 2021-11-15  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* diagnostic-spec.h (typedef xint_hash_t)
+ 	(typedef xint_hash_map_t): Replace with...
+ 	(typedef nowarn_map_t): ... this.
+ 	(nowarn_map): Adjust.
+ 	* diagnostic-spec.c (nowarn_map, suppress_warning_at): Likewise.
+ 
+ 2021-11-15  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* profile.c (branch_prob): Use 'location_hash' for
+ 	'seen_locations'.
+ 
+ 2021-11-15  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/103207
+ 	* value-range.cc (irange::set): Drop overflow.
+ 
+ 2021-11-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gimplify.c (optimize_target_teams): Only add OMP_CLAUSE_THREAD_LIMIT
+ 	to OMP_TARGET_CLAUSES if it isn't there already.
+ 
+ 2021-11-15  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::internal_range_of_expr):
+ 	Remove useless code.
+ 	(path_range_query::ssa_defined_in_bb): New.
+ 	(path_range_query::ssa_range_in_phi): Avoid fold_range call that
+ 	could trigger additional lookups.
+ 	Do not use the cache for ARGs defined in this block.
+ 	(path_range_query::compute_ranges_in_block): Use ssa_defined_in_bb.
+ 	(path_range_query::maybe_register_phi_relation): Same.
+ 	(path_range_query::range_of_stmt): Adjust comment.
+ 	* gimple-range-path.h (ssa_defined_in_bb): New.
+ 
+ 2021-11-15  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::internal_range_of_expr):
+ 	Default to global range if nothing found.
+ 
+ 2021-11-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103237
+ 	* tree-vect-loop.c (vect_is_simple_reduction): Fail for
+ 	double reductions with multiple inner loop LC PHI nodes.
+ 
+ 2021-11-15  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	PR target/103069
+ 	* config/i386/i386-expand.c (ix86_expand_atomic_fetch_op_loop):
+ 	New expand function.
+ 	* config/i386/i386-options.c (ix86_target_string): Add
+ 	-mrelax-cmpxchg-loop flag.
+ 	(ix86_valid_target_attribute_inner_p): Likewise.
+ 	* config/i386/i386-protos.h (ix86_expand_atomic_fetch_op_loop):
+ 	New expand function prototype.
+ 	* config/i386/i386.opt: Add -mrelax-cmpxchg-loop.
+ 	* config/i386/sync.md (atomic_fetch_<logic><mode>): New expander
+ 	for SI,HI,QI modes.
+ 	(atomic_<logic>_fetch<mode>): Likewise.
+ 	(atomic_fetch_nand<mode>): Likewise.
+ 	(atomic_nand_fetch<mode>): Likewise.
+ 	(atomic_fetch_<logic><mode>): New expander for DI,TI modes.
+ 	(atomic_<logic>_fetch<mode>): Likewise.
+ 	(atomic_fetch_nand<mode>): Likewise.
+ 	(atomic_nand_fetch<mode>): Likewise.
+ 	* doc/invoke.texi: Document -mrelax-cmpxchg-loop.
+ 
+ 2021-11-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103219
+ 	* gimple-loop-jam.c (tree_loop_unroll_and_jam): Use single_exit
+ 	to determine the exit for the VN region.
+ 
+ 2021-11-15  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	* tree-ssa-loop.c (pass_vectorize): Move to tree-vectorizer.c.
+ 	(pass_data_vectorize): Likewise.
+ 	(make_pass_vectorize): Likewise.
+ 	* tree-vectorizer.c (vectorize_loops): Merge with
+ 	pass_vectorize::execute and replace cfun occurences with fun param.
+ 	(adjust_simduid_builtins): Add fun param, replace cfun occurences with
+ 	fun, and adjust callers approrpiately.
+ 	(note_simd_array_uses): Likewise.
+ 	(vect_loop_dist_alias_call): Likewise.
+ 	(set_uid_loop_bbs): Likewise.
+ 	(vect_transform_loops): Likewise.
+ 	(try_vectorize_loop_1): Likewise.
+ 	(try_vectorize_loop): Likewise.
+ 
+ 2021-11-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/103205
+ 	* config/i386/sync.md (atomic_bit_test_and_set<mode>,
+ 	atomic_bit_test_and_complement<mode>,
+ 	atomic_bit_test_and_reset<mode>): Use OPTAB_WIDEN instead of
+ 	OPTAB_DIRECT.
+ 
+ 2021-11-15  Maciej W. Rozycki  <macro@embecosm.com>
+ 
+ 	* config/vax/vax.c (vax_lra_p): New prototype and function.
+ 	(TARGET_LRA_P): Wire it.
+ 	* config/vax/vax.opt (mlra): New option.
+ 	* doc/invoke.texi (Option Summary, VAX Options): Document the
+ 	new option.
+ 
+ 2021-11-14  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ipa-modref.h (struct modref_summary): Add nondeterministic
+ 	and calls_interposable flags.
+ 	* ipa-modref.c (modref_summary::modref_summary): Initialize new flags.
+ 	(modref_summary::useful_p): Check new flags.
+ 	(struct modref_summary_lto): Add nondeterministic and
+ 	calls_interposable flags.
+ 	(modref_summary_lto::modref_summary_lto): Initialize new flags.
+ 	(modref_summary_lto::useful_p): Check new flags.
+ 	(modref_summary::dump): Dump new flags.
+ 	(modref_summary_lto::dump): Dump new flags.
+ 	(ignore_nondeterminism_p): New function.
+ 	(merge_call_side_effects): Merge new flags.
+ 	(process_fnspec): Likewise.
+ 	(analyze_load): Volatile access is nondeterministic.
+ 	(analyze_store): Liekwise.
+ 	(analyze_stmt): Volatile ASM is nondeterministic.
+ 	(analyze_function): Clear new flags.
+ 	(modref_summaries::duplicate): Duplicate new flags.
+ 	(modref_summaries_lto::duplicate): Duplicate new flags.
+ 	(modref_write): Stream new flags.
+ 	(read_section): Stream new flags.
+ 	(propagate_unknown_call): Update new flags.
+ 	(modref_propagate_in_scc): Propagate new flags.
+ 	* tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Check
+ 	calls_interposable.
+ 	* tree-ssa-structalias.c (determine_global_memory_access):
+ 	Likewise.
+ 
+ 2021-11-14  Maciej W. Rozycki  <macro@embecosm.com>
+ 
+ 	* config/vax/vax.h (SET_RATIO): New macro.
+ 	* config/vax/vax.md (UNSPEC_SETMEM_FILL): New constant.
+ 	(setmemhi): New expander.
+ 	(setmemhi1): New insn and splitter.
+ 	(*setmemhi1): New insn.
+ 
+ 2021-11-14  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.c (modref_access_node::update_for_kills): New
+ 	member function.
+ 	(modref_access_node::merge_for_kills): Likewise.
+ 	(modref_access_node::insert_kill): Likewise.
+ 	* ipa-modref-tree.h (modref_access_node::update_for_kills,
+ 	modref_access_node::merge_for_kills, modref_access_node::insert_kill):
+ 	Declare.
+ 	(modref_access_node::useful_for_kill): New member function.
+ 	* ipa-modref.c (modref_summary::useful_p): Release useless kills.
+ 	(lto_modref_summary): Add kills.
+ 	(modref_summary::dump): Dump kills.
+ 	(record_access): Add mdoref_access_node parameter.
+ 	(record_access_lto): Likewise.
+ 	(merge_call_side_effects): Merge kills.
+ 	(analyze_call): Add ALWAYS_EXECUTED param and pass it around.
+ 	(struct summary_ptrs): Add always_executed filed.
+ 	(analyze_load): Update.
+ 	(analyze_store): Update; record kills.
+ 	(analyze_stmt): Add always_executed; record kills in clobbers.
+ 	(analyze_function): Track always_executed.
+ 	(modref_summaries::duplicate): Duplicate kills.
+ 	(update_signature): Release kills.
+ 	* ipa-modref.h (struct modref_summary): Add kills.
+ 	* tree-ssa-alias.c (alias_stats): Add kill stats.
+ 	(dump_alias_stats): Dump kill stats.
+ 	(store_kills_ref_p): Break out from ...
+ 	(stmt_kills_ref_p): Use it; handle modref info based kills.
+ 
+ 2021-11-14  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/103229
+ 	* gimple-range-cache.cc (ssa_global_cache::clear): Do not pass
+ 	null value to memset.
+ 
+ 2021-11-14  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.c (modref_access_node::get_call_arg): New member
+ 	function.
+ 	(modref_access_node::get_ao_ref): Likewise.
+ 	* ipa-modref-tree.h (modref_access_node::get_call_arg): Declare.
+ 	(modref_access_node::get_ao_ref): Declare.
+ 	* tree-ssa-alias.c (modref_may_conflict): Use new accessors.
+ 	* tree-ssa-dse.c (dse_optimize_call): Use new accessors.
+ 
+ 2021-11-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR lto/103211
+ 	* dbgcnt.def (ipa_attr): New counters.
+ 	* ipa-pure-const.c: Include dbgcnt.c
+ 	(ipa_make_function_const): Use debug counter.
+ 	(ipa_make_function_pure): Likewise.
+ 	(propagate_pure_const): Fix bug in my previous change.
+ 
+ 2021-11-13  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.c (modref_access_node::range_info_useful_p):
+ 	Offline from ipa-modref-tree.h.
+ 	(modref_access_node::dump): Move from ipa-modref.c; make member
+ 	function.
+ 	* ipa-modref-tree.h (modref_access_node::range_info_useful_p.
+ 	modref_access_node::dump): Declare.
+ 	* ipa-modref.c (dump_access): Remove.
+ 	(dump_records): Update.
+ 	(dump_lto_records): Update.
+ 	(record_access): Update.
+ 	(record_access_lto): Update.
+ 
+ 2021-11-13  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (modref_summary::modref_summary): Clear new flags.
+ 	(modref_summary::dump): Dump try_dse.
+ 	(modref_summary::finalize): Add FUN attribute; compute try-dse.
+ 	(analyze_function): Update.
+ 	(read_section): Update.
+ 	(update_signature): Update.
+ 	(pass_ipa_modref::execute): Update.
+ 	* ipa-modref.h (struct modref_summary):
+ 	* tree-ssa-alias.c (ao_ref_init_from_ptr_and_range): Export.
+ 	* tree-ssa-alias.h (ao_ref_init_from_ptr_and_range): Declare.
+ 	* tree-ssa-dse.c (dse_optimize_call): New function.
+ 	(dse_optimize_stmt): Use it.
+ 
+ 2021-11-13  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.c: Move #if CHECKING_P to proper place.
+ 
+ 2021-11-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ipa-modref-tree.h
+ 	(struct modref_access_node): Move longer member functions to
+ 	ipa-modref-tree.c
+ 	(modref_ref_node::try_merge_with): Turn into modreef_acces_node member
+ 	function.
+ 	* ipa-modref-tree.c (modref_access_node::contains): Move here
+ 	from ipa-modref-tree.h.
+ 	(modref_access_node::update): Likewise.
+ 	(modref_access_node::merge): Likewise.
+ 	(modref_access_node::closer_pair_p): Likewise.
+ 	(modref_access_node::forced_merge): Likewise.
+ 	(modref_access_node::update2): Likewise.
+ 	(modref_access_node::combined_offsets): Likewise.
+ 	(modref_access_node::try_merge_with): Likewise.
+ 	(modref_access_node::insert): Likewise.
+ 
+ 2021-11-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ipa-modref.c (modref_summary::global_memory_read_p): Remove.
+ 	(modref_summary::global_memory_written_p): Remove.
+ 	(modref_summary::dump): Dump new flags.
+ 	(modref_summary::finalize): New member function.
+ 	(analyze_function): Call it.
+ 	(read_section): Call it.
+ 	(update_signature): Call it.
+ 	(pass_ipa_modref::execute): Call it.
+ 	* ipa-modref.h (struct modref_summary): Remove
+ 	global_memory_read_p and global_memory_written_p.
+ 	Add global_memory_read, global_memory_written.
+ 	* tree-ssa-structalias.c (determine_global_memory_access):
+ 	Update.
+ 
+ 2021-11-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ipa-fnsummary.c (compute_fn_summary): Use type_attribut_allowed_p
+ 	* ipa-param-manipulation.c
+ 	(ipa_param_adjustments::type_attribute_allowed_p):
+ 	New member function.
+ 	(drop_type_attribute_if_params_changed_p): New function.
+ 	(build_adjusted_function_type): Use it.
+ 	* ipa-param-manipulation.h: Add type_attribute_allowed_p.
+ 
+ 2021-11-13  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* doc/invoke.texi (Static Analyzer Options): Add
+ 	-Wno-analyzer-tainted-allocation-size,
+ 	-Wno-analyzer-tainted-divisor, -Wno-analyzer-tainted-offset, and
+ 	-Wno-analyzer-tainted-size to list.  Add
+ 	-Wanalyzer-tainted-allocation-size, -Wanalyzer-tainted-divisor,
+ 	-Wanalyzer-tainted-offset, and -Wanalyzer-tainted-size to list
+ 	of options effectively enabled by -fanalyzer.
+ 	(-Wanalyzer-tainted-allocation-size): New.
+ 	(-Wanalyzer-tainted-array-index): Tweak wording; add link to CWE.
+ 	(-Wanalyzer-tainted-divisor): New.
+ 	(-Wanalyzer-tainted-offset): New.
+ 	(-Wanalyzer-tainted-size): New.
+ 
+ 2021-11-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* attr-fnspec.h (attr_fnspec::arg_eaf_flags): Break out from ...
+ 	* gimple.c (gimple_call_arg_flags): ... here.
+ 	* ipa-modref.c (analyze_parms): Record flags known from fnspec.
+ 	(modref_merge_call_site_flags): Use arg_eaf_flags.
+ 
+ 2021-11-13  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/103222
+ 	* gimple-range-path.cc (path_range_query::compute_ranges_in_phis):
+ 	New.
+ 	(path_range_query::compute_ranges_in_block): Call
+ 	compute_ranges_in_phis.
+ 	* gimple-range-path.h (path_range_query::compute_ranges_in_phis):
+ 	New.
+ 
+ 2021-11-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ipa-fnsummary.c (compute_fn_summary): Do not give up on signature
+ 	changes on "fn spec" attribute; give up on varadic types.
+ 	* ipa-param-manipulation.c: Include attribs.h.
+ 	(build_adjusted_function_type): New parameter ARG_MODIFIED; if it is
+ 	true remove "fn spec" attribute.
+ 	(ipa_param_adjustments::build_new_function_type): Update.
+ 	(ipa_param_body_adjustments::modify_formal_parameters): update.
+ 	* ipa-sra.c: Include attribs.h.
+ 	(ipa_sra_preliminary_function_checks): Do not check for TYPE_ATTRIBUTES.
+ 
+ 2021-11-13  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::path_range_query): Merge
+ 	ctors.
+ 	(path_range_query::import_p): Move from header file.
+ 	(path_range_query::~path_range_query): Adjust for combined ctors.
+ 	* gimple-range-path.h: Merge ctors.
+ 	(path_range_query::import_p): Move to .cc file.
+ 
+ 2021-11-13  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR tree-optimization/103182
+ 	* ipa-modref.c (callee_to_caller_flags): Fix merging of flags.
+ 	(modref_eaf_analysis::analyze_ssa_name): Fix merging of flags.
+ 
+ 2021-11-12  Stafford Horne  <shorne@gmail.com>
+ 
+ 	* config/or1k/or1k-protos.h (or1k_profile_hook): New function.
+ 	* config/or1k/or1k.h (PROFILE_HOOK): Change macro to reference
+ 	new function or1k_profile_hook.
+ 	* config/or1k/or1k.c (struct machine_function): Add new field
+ 	set_mcount_arg_insn.
+ 	(or1k_profile_hook): New function.
+ 	(or1k_init_pic_reg): Update to inject pic rtx after _mcount arg
+ 	when profiling.
+ 	(or1k_frame_pointer_required): Frame pointer no longer needed
+ 	when profiling.
+ 
+ 2021-11-12  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR tree-optimization/103209
+ 	* tree-ssa-structalias.c (find_func_aliases_for_call): Fix
+ 	use of handle_rhs_call
+ 
+ 2021-11-12  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/103202
+ 	* gimple-range-path.cc
+ 	(path_range_query::compute_ranges_in_block): Solve PHI imports first.
+ 
+ 2021-11-12  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ipa-pure-const.c (propagate_pure_const): Remove redundant check;
+ 	fix call of ipa_make_function_const and ipa_make_function_pure.
+ 
+ 2021-11-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_vector_op::n_advsimd_ops): Delete.
+ 	(aarch64_vector_op::m_seen_loads): Likewise.
+ 	(aarch64_vector_costs::aarch64_vector_costs): Don't push to
+ 	m_advsimd_ops.
+ 	(aarch64_vector_op::count_ops): Remove vectype and factor parameters.
+ 	Remove code that tries to predict different vec_flags from the
+ 	current loop's.
+ 	(aarch64_vector_costs::add_stmt_cost): Update accordingly.
+ 	Remove m_advsimd_ops handling.
+ 
+ 2021-11-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_vector_costs::m_saw_sve_only_op)
+ 	(aarch64_sve_only_stmt_p): Delete.
+ 	(aarch64_vector_costs::prefer_unrolled_loop): New function,
+ 	extracted from adjust_body_cost.
+ 	(aarch64_vector_costs::better_main_loop_than_p): New function,
+ 	using heuristics extracted from adjust_body_cost and
+ 	adjust_body_cost_sve.
+ 	(aarch64_vector_costs::adjust_body_cost_sve): Remove
+ 	advsimd_cycles_per_iter and could_use_advsimd parameters.
+ 	Update after changes above.
+ 	(aarch64_vector_costs::adjust_body_cost): Update after changes above.
+ 
+ 2021-11-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_vec_op_count::m_vf_factor):
+ 	New member variable.
+ 	(aarch64_vec_op_count::aarch64_vec_op_count): Add a parameter for it.
+ 	(aarch64_vec_op_count::vf_factor): New function.
+ 	(aarch64_vector_costs::aarch64_vector_costs): When costing for
+ 	neoverse-512tvb, pass a vf_factor of 2 for the Neoverse V1 version
+ 	of an SVE loop.
+ 	(aarch64_vector_costs::adjust_body_cost): Read the vf factor
+ 	instead of hard-coding 2.
+ 
+ 2021-11-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c
+ 	(aarch64_vec_op_count::rename_cycles_per_iter): New function.
+ 	(aarch64_vec_op_count::min_nonpred_cycles_per_iter): Likewise.
+ 	(aarch64_vec_op_count::min_pred_cycles_per_iter): Likewise.
+ 	(aarch64_vec_op_count::min_cycles_per_iter): Likewise.
+ 	(aarch64_vec_op_count::dump): Move earlier in file.  Dump the
+ 	above properties too.
+ 	(aarch64_estimate_min_cycles_per_iter): Delete.
+ 	(adjust_body_cost): Use aarch64_vec_op_count::min_cycles_per_iter
+ 	instead of aarch64_estimate_min_cycles_per_iter.  Rely on the dump
+ 	routine to print CPI estimates.
+ 	(adjust_body_cost_sve): Likewise.  Use the other functions above
+ 	instead of doing the work inline.
+ 
+ 2021-11-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_vec_op_count): Allow default
+ 	initialization.
+ 	(aarch64_vec_op_count::base_issue_info): Remove handling of null
+ 	issue_infos.
+ 	(aarch64_vec_op_count::simd_issue_info): Likewise.
+ 	(aarch64_vec_op_count::sve_issue_info): Likewise.
+ 	(aarch64_vector_costs::m_ops): Turn into a vector.
+ 	(aarch64_vector_costs::m_advsimd_ops): Likewise.
+ 	(aarch64_vector_costs::aarch64_vector_costs): Add entries to
+ 	the vectors based on aarch64_tune_params.
+ 	(aarch64_vector_costs::analyze_loop_vinfo): Update the pred_ops
+ 	of all entries in m_ops.
+ 	(aarch64_vector_costs::add_stmt_cost): Call count_ops for all
+ 	entries in m_ops.
+ 	(aarch64_estimate_min_cycles_per_iter): Remove issue_info
+ 	parameter and get the information from the ops instead.
+ 	(aarch64_vector_costs::adjust_body_cost_sve): Take a
+ 	aarch64_vec_issue_info instead of a aarch64_vec_op_count.
+ 	(aarch64_vector_costs::adjust_body_cost): Update call accordingly.
+ 	Exit earlier if m_ops is empty for either cost structure.
+ 
+ 2021-11-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_vector_costs::m_scalar_ops)
+ 	(aarch64_vector_costs::m_sve_ops): Replace with...
+ 	(aarch64_vector_costs::m_ops): ...this.
+ 	(aarch64_vector_costs::analyze_loop_vinfo): Update accordingly.
+ 	(aarch64_vector_costs::adjust_body_cost_sve): Likewise.
+ 	(aarch64_vector_costs::aarch64_vector_costs): Likewise.
+ 	Initialize m_vec_flags here rather than in add_stmt_cost.
+ 	(aarch64_vector_costs::count_ops): Test for scalar reductions too.
+ 	Allow vectype to be null.
+ 	(aarch64_vector_costs::add_stmt_cost): Call count_ops for scalar
+ 	code too.  Don't require vectype to be nonnull.
+ 	(aarch64_vector_costs::adjust_body_cost): Take the loop_vec_info
+ 	and scalar costs as parameters.  Use the scalar costs to determine
+ 	the cycles per iteration of the scalar loop, then multiply it
+ 	by the estimated VF.
+ 	(aarch64_vector_costs::finish_cost): Update call accordingly.
+ 
+ 2021-11-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_dr_type): New function.
+ 	(aarch64_vector_costs::count_ops): Use it rather than the
+ 	vectype to determine floatness.
+ 
+ 2021-11-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_sve_in_loop_reduction_latency):
+ 	Remove vectype parameter and get floatness from the type of the
+ 	stmt lhs instead.
+ 	(arch64_in_loop_reduction_latency): Likewise.
+ 	(aarch64_detect_vector_stmt_subtype): Update caller.
+ 	(aarch64_vector_costs::count_ops): Likewise.
+ 
+ 2021-11-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_sve_op_count): Fold into...
+ 	(aarch64_vec_op_count): ...this.  Add a constructor.
+ 	(aarch64_vec_op_count::vec_flags): New function.
+ 	(aarch64_vec_op_count::base_issue_info): Likewise.
+ 	(aarch64_vec_op_count::simd_issue_info): Likewise.
+ 	(aarch64_vec_op_count::sve_issue_info): Likewise.
+ 	(aarch64_vec_op_count::m_issue_info): New member variable.
+ 	(aarch64_vec_op_count::m_vec_flags): Likewise.
+ 	(aarch64_vector_costs): Add a constructor.
+ 	(aarch64_vector_costs::m_sve_ops): Change type to aarch64_vec_op_count.
+ 	(aarch64_vector_costs::aarch64_vector_costs): New function.
+ 	Initialize m_scalar_ops, m_advsimd_ops and m_sve_ops.
+ 	(aarch64_vector_costs::count_ops): Remove vec_flags and
+ 	issue_info parameters, using the new aarch64_vec_op_count
+ 	functions instead.
+ 	(aarch64_vector_costs::add_stmt_cost): Update call accordingly.
+ 	(aarch64_sve_op_count::dump): Fold into...
+ 	(aarch64_vec_op_count::dump): ..here.
+ 
+ 2021-11-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c: Include tree-dfa.h.
+ 	(aarch64_check_consecutive_mems): New function that takes MEM_EXPR
+ 	and MEM_OFFSET into account.
+ 	(aarch64_swap_ldrstr_operands): Use it.
+ 	(aarch64_operands_ok_for_ldpstp): Likewise.  Check that the
+ 	address of the second memory doesn't depend on the result of
+ 	the first load.
+ 
+ 2021-11-12  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-pure-const.c (ipa_make_function_pure): Fix exit condition.
+ 
+ 2021-11-12  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR tree-optimization/103175
+ 	* ipa-modref.c (modref_lattice::merge): Add sanity check.
+ 	(callee_to_caller_flags): Make flags adjustment sane.
+ 	(modref_eaf_analysis::analyze_ssa_name): Likewise.
+ 
+ 2021-11-12  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR ipa/103200
+ 	* ipa-modref.c (analyze_function, modref_propagate_in_scc): Do
+ 	not mark pure/const function if there are side-effects.
+ 
+ 2021-11-12  Chung-Lin Tang  <cltang@codesourcery.com>
+ 
+ 	* tree.h (OMP_CLAUSE_MAP_RUNTIME_IMPLICIT_P): New access macro for
+ 	'implicit' bit, using 'base.deprecated_flag' field of tree_node.
+ 	* tree-pretty-print.c (dump_omp_clause): Add support for printing
+ 	implicit attribute in tree dumping.
+ 	* gimplify.c (gimplify_adjust_omp_clauses_1):
+ 	Set OMP_CLAUSE_MAP_RUNTIME_IMPLICIT_P to 1 if map clause is implicitly
+ 	created.
+ 	(gimplify_adjust_omp_clauses): Adjust place of adding implicitly created
+ 	clauses, from simple append, to starting of list, after non-map clauses.
+ 	* omp-low.c (lower_omp_target): Add GOMP_MAP_IMPLICIT bits into kind
+ 	values passed to libgomp for implicit maps.
+ 
+ 2021-11-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* omp-builtins.def (BUILT_IN_GOMP_TEAMS): Remove.
+ 	(BUILT_IN_GOMP_TEAMS4): New.
+ 	* builtin-types.def (BT_FN_VOID_UINT_UINT): Remove.
+ 	(BT_FN_BOOL_UINT_UINT_UINT_BOOL): New.
+ 	* omp-low.c (lower_omp_teams): Use GOMP_teams4 instead of
+ 	GOMP_teams, pass to it also num_teams lower-bound expression
+ 	or a dup of upper-bound if it is missing and a flag whether
+ 	it is the first call or not.
+ 
+ 2021-11-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR tree-optimization/102497
+ 	* gimple-predicate-analysis.cc (add_pred): Remove unused
+ 	function:
+ 
+ 2021-11-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103204
+ 	* tree-ssa-sccvn.c (valueize_refs_1): Re-valueize the
+ 	top operand after folding in an address.
+ 
+ 2021-11-11  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::path_range_query): New
+ 	ctor without a ranger.
+ 	(path_range_query::~path_range_query): Free ranger if necessary.
+ 	(path_range_query::range_on_path_entry): Adjust m_ranger for pointer.
+ 	(path_range_query::ssa_range_in_phi): Same.
+ 	(path_range_query::compute_ranges_in_block): Same.
+ 	(path_range_query::compute_imports): Same.
+ 	(path_range_query::compute_ranges): Same.
+ 	(path_range_query::range_of_stmt): Same.
+ 	(path_range_query::compute_outgoing_relations): Same.
+ 	* gimple-range-path.h (class path_range_query): New ctor.
+ 	* tree-ssa-loop-ch.c (ch_base::copy_headers): Remove gimple_ranger
+ 	as path_range_query allocates one.
+ 	* tree-ssa-threadbackward.c (class back_threader): Remove m_ranger.
+ 	(back_threader::~back_threader): Same.
+ 
+ 2021-11-11  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c
+ 	(back_threader_profitability::profitable_path_p): Remove loop
+ 	crossing restriction.
+ 
+ 2021-11-11  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (analyze_function): Do pure/const discovery, return
+ 	true on success.
+ 	(pass_modref::execute): If pure/const is discovered fixup cfg.
+ 	(ignore_edge): Do not ignore pure/const edges.
+ 	(modref_propagate_in_scc): Do pure/const discovery, return true if
+ 	cdtor was promoted pure/const.
+ 	(pass_ipa_modref::execute): If needed remove unreachable functions.
+ 	* ipa-pure-const.c (warn_function_noreturn): Fix whitespace.
+ 	(warn_function_cold): Likewise.
+ 	(skip_function_for_local_pure_const): Move earlier.
+ 	(ipa_make_function_const): Break out from ...
+ 	(ipa_make_function_pure): Break out from ...
+ 	(propagate_pure_const): ... here.
+ 	(pass_local_pure_const::execute): Use it.
+ 	* ipa-utils.h (ipa_make_function_const): Declare.
+ 	(ipa_make_function_pure): Declare.
+ 	* passes.def: Move early modref after pure-const.
+ 
+ 2021-11-11  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR other/103129
+ 	* diagnostic-show-locus.c (def_policy): Use def_tabstop.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c (TYPES_COMBINE): Delete.
+ 	(TYPES_COMBINEP): Delete.
+ 	* config/aarch64/aarch64-simd-builtins.def: Declare type-
+ 	qualified builtins for vcombine_* intrinsics.
+ 	* config/aarch64/arm_neon.h (vcombine_s8): Remove unnecessary
+ 	cast.
+ 	(vcombine_s16): Likewise.
+ 	(vcombine_s32): Likewise.
+ 	(vcombine_f32): Likewise.
+ 	(vcombine_u8): Use type-qualified builtin and remove casts.
+ 	(vcombine_u16): Likewise.
+ 	(vcombine_u32): Likewise.
+ 	(vcombine_u64): Likewise.
+ 	(vcombine_p8): Likewise.
+ 	(vcombine_p16): Likewise.
+ 	(vcombine_p64): Likewise.
+ 	(vcombine_bf16): Remove unnecessary cast.
+ 	* config/aarch64/iterators.md (VD_I): New mode iterator.
+ 	(VDC_P): New mode iterator.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c (TYPES_LOAD1_U): Define.
+ 	(TYPES_LOAD1_P): Define.
+ 	(TYPES_STORE1_U): Define.
+ 	(TYPES_STORE1P): Rename to...
+ 	(TYPES_STORE1_P): This.
+ 	(get_mem_type_for_load_store): Add unsigned and poly types.
+ 	(aarch64_general_gimple_fold_builtin): Add unsigned and poly
+ 	type-qualified builtin declarations.
+ 	* config/aarch64/aarch64-simd-builtins.def: Declare type-
+ 	qualified builtins for LD1/ST1.
+ 	* config/aarch64/arm_neon.h (vld1_p8): Use type-qualified
+ 	builtin and remove cast.
+ 	(vld1_p16): Likewise.
+ 	(vld1_u8): Likewise.
+ 	(vld1_u16): Likewise.
+ 	(vld1_u32): Likewise.
+ 	(vld1q_p8): Likewise.
+ 	(vld1q_p16): Likewise.
+ 	(vld1q_p64): Likewise.
+ 	(vld1q_u8): Likewise.
+ 	(vld1q_u16): Likewise.
+ 	(vld1q_u32): Likewise.
+ 	(vld1q_u64): Likewise.
+ 	(vst1_p8): Likewise.
+ 	(vst1_p16): Likewise.
+ 	(vst1_u8): Likewise.
+ 	(vst1_u16): Likewise.
+ 	(vst1_u32): Likewise.
+ 	(vst1q_p8): Likewise.
+ 	(vst1q_p16): Likewise.
+ 	(vst1q_p64): Likewise.
+ 	(vst1q_u8): Likewise.
+ 	(vst1q_u16): Likewise.
+ 	(vst1q_u32): Likewise.
+ 	(vst1q_u64): Likewise.
+ 	* config/aarch64/iterators.md (VALLP_NO_DI): New iterator.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Declare unsigned
+ 	builtins for vector reduction.
+ 	* config/aarch64/arm_neon.h (vaddv_u8): Use type-qualified
+ 	builtin and remove casts.
+ 	(vaddv_u16): Likewise.
+ 	(vaddv_u32): Likewise.
+ 	(vaddvq_u8): Likewise.
+ 	(vaddvq_u16): Likewise.
+ 	(vaddvq_u32): Likewise.
+ 	(vaddvq_u64): Likewise.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def:
+ 	* config/aarch64/arm_neon.h (vpaddq_u8): Use type-qualified
+ 	builtin and remove casts.
+ 	(vpaddq_u16): Likewise.
+ 	(vpaddq_u32): Likewise.
+ 	(vpaddq_u64): Likewise.
+ 	(vpadd_u8): Likewise.
+ 	(vpadd_u16): Likewise.
+ 	(vpadd_u32): Likewise.
+ 	(vpaddd_u64): Likewise.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Declare unsigned
+ 	builtins for [r]subhn[2].
+ 	* config/aarch64/arm_neon.h (vsubhn_s16): Remove unnecessary
+ 	cast.
+ 	(vsubhn_s32): Likewise.
+ 	(vsubhn_s64): Likewise.
+ 	(vsubhn_u16): Use type-qualified builtin and remove casts.
+ 	(vsubhn_u32): Likewise.
+ 	(vsubhn_u64): Likewise.
+ 	(vrsubhn_s16): Remove unnecessary cast.
+ 	(vrsubhn_s32): Likewise.
+ 	(vrsubhn_s64): Likewise.
+ 	(vrsubhn_u16): Use type-qualified builtin and remove casts.
+ 	(vrsubhn_u32): Likewise.
+ 	(vrsubhn_u64): Likewise.
+ 	(vrsubhn_high_s16): Remove unnecessary cast.
+ 	(vrsubhn_high_s32): Likewise.
+ 	(vrsubhn_high_s64): Likewise.
+ 	(vrsubhn_high_u16): Use type-qualified builtin and remove
+ 	casts.
+ 	(vrsubhn_high_u32): Likewise.
+ 	(vrsubhn_high_u64): Likewise.
+ 	(vsubhn_high_s16): Remove unnecessary cast.
+ 	(vsubhn_high_s32): Likewise.
+ 	(vsubhn_high_s64): Likewise.
+ 	(vsubhn_high_u16): Use type-qualified builtin and remove
+ 	casts.
+ 	(vsubhn_high_u32): Likewise.
+ 	(vsubhn_high_u64): Likewise.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Declare unsigned
+ 	builtins for [r]addhn[2].
+ 	* config/aarch64/arm_neon.h (vaddhn_s16): Remove unnecessary
+ 	cast.
+ 	(vaddhn_s32): Likewise.
+ 	(vaddhn_s64): Likewise.
+ 	(vaddhn_u16): Use type-qualified builtin and remove casts.
+ 	(vaddhn_u32): Likewise.
+ 	(vaddhn_u64): Likewise.
+ 	(vraddhn_s16): Remove unnecessary cast.
+ 	(vraddhn_s32): Likewise.
+ 	(vraddhn_s64): Likewise.
+ 	(vraddhn_u16): Use type-qualified builtin and remove casts.
+ 	(vraddhn_u32): Likewise.
+ 	(vraddhn_u64): Likewise.
+ 	(vaddhn_high_s16): Remove unnecessary cast.
+ 	(vaddhn_high_s32): Likewise.
+ 	(vaddhn_high_s64): Likewise.
+ 	(vaddhn_high_u16): Use type-qualified builtin and remove
+ 	casts.
+ 	(vaddhn_high_u32): Likewise.
+ 	(vaddhn_high_u64): Likewise.
+ 	(vraddhn_high_s16): Remove unnecessary cast.
+ 	(vraddhn_high_s32): Likewise.
+ 	(vraddhn_high_s64): Likewise.
+ 	(vraddhn_high_u16): Use type-qualified builtin and remove
+ 	casts.
+ 	(vraddhn_high_u32): Likewise.
+ 	(vraddhn_high_u64): Likewise.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Use BINOPU type
+ 	qualifiers in generator macros for uhsub builtins.
+ 	* config/aarch64/arm_neon.h (vhsub_s8): Remove unnecessary
+ 	cast.
+ 	(vhsub_s16): Likewise.
+ 	(vhsub_s32): Likewise.
+ 	(vhsub_u8): Use type-qualified builtin and remove casts.
+ 	(vhsub_u16): Likewise.
+ 	(vhsub_u32): Likewise.
+ 	(vhsubq_s8): Remove unnecessary cast.
+ 	(vhsubq_s16): Likewise.
+ 	(vhsubq_s32): Likewise.
+ 	(vhsubq_u8): Use type-qualified builtin and remove casts.
+ 	(vhsubq_u16): Likewise.
+ 	(vhsubq_u32): Likewise.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Use BINOPU type
+ 	qualifiers in generator macros for u[r]hadd builtins.
+ 	* config/aarch64/arm_neon.h (vhadd_s8): Remove unnecessary
+ 	cast.
+ 	(vhadd_s16): Likewise.
+ 	(vhadd_s32): Likewise.
+ 	(vhadd_u8): Use type-qualified builtin and remove casts.
+ 	(vhadd_u16): Likewise.
+ 	(vhadd_u32): Likewise.
+ 	(vhaddq_s8): Remove unnecessary cast.
+ 	(vhaddq_s16): Likewise.
+ 	(vhaddq_s32): Likewise.
+ 	(vhaddq_u8): Use type-qualified builtin and remove casts.
+ 	(vhaddq_u16): Likewise.
+ 	(vhaddq_u32): Likewise.
+ 	(vrhadd_s8): Remove unnecessary cast.
+ 	(vrhadd_s16): Likewise.
+ 	(vrhadd_s32): Likewise.
+ 	(vrhadd_u8): Use type-qualified builtin and remove casts.
+ 	(vrhadd_u16): Likewise.
+ 	(vrhadd_u32): Likewise.
+ 	(vrhaddq_s8): Remove unnecessary cast.
+ 	(vrhaddq_s16): Likewise.
+ 	(vrhaddq_s32): Likewise.
+ 	(vrhaddq_u8): Use type-wualified builtin and remove casts.
+ 	(vrhaddq_u16): Likewise.
+ 	(vrhaddq_u32): Likewise.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Use BINOPU type
+ 	qualifiers in generator macros for usub[lw][2] builtins.
+ 	* config/aarch64/arm_neon.h (vsubl_s8): Remove unnecessary
+ 	cast.
+ 	(vsubl_s16): Likewise.
+ 	(vsubl_s32): Likewise.
+ 	(vsubl_u8): Use type-qualified builtin and remove casts.
+ 	(vsubl_u16): Likewise.
+ 	(vsubl_u32): Likewise.
+ 	(vsubl_high_s8): Remove unnecessary cast.
+ 	(vsubl_high_s16): Likewise.
+ 	(vsubl_high_s32): Likewise.
+ 	(vsubl_high_u8): Use type-qualified builtin and remove casts.
+ 	(vsubl_high_u16): Likewise.
+ 	(vsubl_high_u32): Likewise.
+ 	(vsubw_s8): Remove unnecessary casts.
+ 	(vsubw_s16): Likewise.
+ 	(vsubw_s32): Likewise.
+ 	(vsubw_u8): Use type-qualified builtin and remove casts.
+ 	(vsubw_u16): Likewise.
+ 	(vsubw_u32): Likewise.
+ 	(vsubw_high_s8): Remove unnecessary cast.
+ 	(vsubw_high_s16): Likewise.
+ 	(vsubw_high_s32): Likewise.
+ 	(vsubw_high_u8): Use type-qualified builtin and remove casts.
+ 	(vsubw_high_u16): Likewise.
+ 	(vsubw_high_u32): Likewise.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Use BINOPU type
+ 	qualifiers in generator macros for uadd[lw][2] builtins.
+ 	* config/aarch64/arm_neon.h (vaddl_s8): Remove unnecessary
+ 	cast.
+ 	(vaddl_s16): Likewise.
+ 	(vaddl_s32): Likewise.
+ 	(vaddl_u8): Use type-qualified builtin and remove casts.
+ 	(vaddl_u16): Likewise.
+ 	(vaddl_u32): Likewise.
+ 	(vaddl_high_s8): Remove unnecessary cast.
+ 	(vaddl_high_s16): Likewise.
+ 	(vaddl_high_s32): Likewise.
+ 	(vaddl_high_u8): Use type-qualified builtin and remove casts.
+ 	(vaddl_high_u16): Likewise.
+ 	(vaddl_high_u32): Likewise.
+ 	(vaddw_s8): Remove unnecessary cast.
+ 	(vaddw_s16): Likewise.
+ 	(vaddw_s32): Likewise.
+ 	(vaddw_u8): Use type-qualified builtin and remove casts.
+ 	(vaddw_u16): Likewise.
+ 	(vaddw_u32): Likewise.
+ 	(vaddw_high_s8): Remove unnecessary cast.
+ 	(vaddw_high_s16): Likewise.
+ 	(vaddw_high_s32): Likewise.
+ 	(vaddw_high_u8): Use type-qualified builtin and remove casts.
+ 	(vaddw_high_u16): Likewise.
+ 	(vaddw_high_u32): Likewise.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Declare type-
+ 	qualified builtins for [R]SHRN[2].
+ 	* config/aarch64/arm_neon.h (vshrn_n_u16): Use type-qualified
+ 	builtin and remove casts.
+ 	(vshrn_n_u32): Likewise.
+ 	(vshrn_n_u64): Likewise.
+ 	(vrshrn_high_n_u16): Likewise.
+ 	(vrshrn_high_n_u32): Likewise.
+ 	(vrshrn_high_n_u64): Likewise.
+ 	(vrshrn_n_u16): Likewise.
+ 	(vrshrn_n_u32): Likewise.
+ 	(vrshrn_n_u64): Likewise.
+ 	(vshrn_high_n_u16): Likewise.
+ 	(vshrn_high_n_u32): Likewise.
+ 	(vshrn_high_n_u64): Likewise.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Declare unsigned
+ 	type-qualified builtins for XTN[2].
+ 	* config/aarch64/arm_neon.h (vmovn_high_u16): Use type-
+ 	qualified builtin and remove casts.
+ 	(vmovn_high_u32): Likewise.
+ 	(vmovn_high_u64): Likewise.
+ 	(vmovn_u16): Likewise.
+ 	(vmovn_u32): Likewise.
+ 	(vmovn_u64): Likewise.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Use poly type
+ 	qualifier in builtin generator macros.
+ 	* config/aarch64/arm_neon.h (vmul_p8): Use type-qualified
+ 	builtin and remove casts.
+ 	(vmulq_p8): Likewise.
+ 	(vmull_high_p8): Likewise.
+ 	(vmull_p8): Likewise.
+ 
+ 2021-11-11  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Declare type-
+ 	qualified builtin generators for unsigned MLA/MLS intrinsics.
+ 	* config/aarch64/arm_neon.h (vmla_n_u16): Use type-qualified
+ 	builtin.
+ 	(vmla_n_u32): Likewise.
+ 	(vmla_u8): Likewise.
+ 	(vmla_u16): Likewise.
+ 	(vmla_u32): Likewise.
+ 	(vmlaq_n_u16): Likewise.
+ 	(vmlaq_n_u32): Likewise.
+ 	(vmlaq_u8): Likewise.
+ 	(vmlaq_u16): Likewise.
+ 	(vmlaq_u32): Likewise.
+ 	(vmls_n_u16): Likewise.
+ 	(vmls_n_u32): Likewise.
+ 	(vmls_u8): Likewise.
+ 	(vmls_u16): Likewise.
+ 	(vmls_u32): Likewise.
+ 	(vmlsq_n_u16): Likewise.
+ 	(vmlsq_n_u32): Likewise.
+ 	(vmlsq_u8): Likewise.
+ 	(vmlsq_u16): Likewise.
+ 	(vmlsq_u32): Likewise.
+ 
+ 2021-11-11  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (modref_summary::useful_p): Check also for side-effects
+ 	with looping const/pure.
+ 	(modref_summary_lto::useful_p): Likewise.
+ 	(merge_call_side_effects): Merge side effects before early exit
+ 	for pure/const.
+ 	(process_fnspec): Also handle pure functions.
+ 	(analyze_call): Do not early exit on looping pure const.
+ 	(propagate_unknown_call): Also handle nontrivial SCC as side-effect.
+ 	(modref_propagate_in_scc): Update.
+ 
+ 2021-11-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103190
+ 	* tree-ssa-reassoc.c (insert_stmt_after): Only assert on asm goto.
+ 
+ 2021-11-11  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::add_copies_to_imports):
+ 	Rename to...
+ 	(path_range_query::compute_imports): ...this.  Adapt it so it can
+ 	be passed the imports bitmap instead of working on m_imports.
+ 	(path_range_query::compute_ranges): Call compute_imports in all
+ 	cases unless an imports bitmap is passed.
+ 	* gimple-range-path.h (path_range_query::compute_imports): New.
+ 	(path_range_query::add_copies_to_imports): Remove.
+ 	* tree-ssa-threadbackward.c (back_threader::resolve_def): Remove.
+ 	(back_threader::find_paths_to_names): Inline resolve_def.
+ 	(back_threader::find_paths): Call compute_imports.
+ 	(back_threader::resolve_phi): Adjust comment.
+ 
+ 2021-11-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103188
+ 	* tree-ssa-loop-ch.c (should_duplicate_loop_header_p):
+ 	Remove query parameter, split out check for size
+ 	optimization.
+ 	(ch_base::m_ranger, cb_base::m_query): Remove.
+ 	(ch_base::copy_headers): Split processing loop into
+ 	analysis around which we allocate and use ranger and
+ 	transform where we do not.
+ 	(pass_ch::execute): Do not allocate/free ranger here.
+ 	(pass_ch_vect::execute): Likewise.
+ 
+ 2021-11-11  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-pure-const.c (propagate_pure_const): Self recursion is
+ 	a side effects.
+ 
+ 2021-11-11  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* cgraph.c (set_noreturn_flag_1): New function.
+ 	(cgraph_node::set_noreturn_flag): New member function
+ 	* cgraph.h (cgraph_node::set_noreturn_flags): Declare.
+ 	* ipa-pure-const.c (pass_local_pure_const::execute): Use it.
+ 
+ 2021-11-11  Aldy Hernandez  <aldyh@redhat.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-loop-ch.c (entry_loop_condition_is_static): Resolve
+ 	statically to the edge remaining in the loop.
+ 
+ 2021-11-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/103181
+ 	* tree-eh.c (operation_could_trap_helper_p): Properly
+ 	check vector constants for a zero element for integer
+ 	division.  Separate floating point and integer division code.
+ 
+ 2021-11-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/101378
+ 	* dwarf2out.c (field_byte_offset): Do the PCC_BITFIELD_TYPE_MATTERS
+ 	handling only for DECL_BIT_FIELD_TYPE decls.
+ 
+ 2021-11-11  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	PR target/102376
+ 	* config/aarch64/aarch64.c (aarch64_process_target_attr): Check if
+ 	token is arch extension without leading '+' and emit appropriate
+ 	diagnostic for the same.
+ 
+ 2021-11-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree.h (OMP_CLAUSE_NUM_TEAMS_EXPR): Rename to ...
+ 	(OMP_CLAUSE_NUM_TEAMS_UPPER_EXPR): ... this.
+ 	(OMP_CLAUSE_NUM_TEAMS_LOWER_EXPR): Define.
+ 	* tree.c (omp_clause_num_ops): Increase num ops for
+ 	OMP_CLAUSE_NUM_TEAMS to 2.
+ 	* tree-pretty-print.c (dump_omp_clause): Print optional lower bound
+ 	for OMP_CLAUSE_NUM_TEAMS.
+ 	* gimplify.c (gimplify_scan_omp_clauses): Gimplify
+ 	OMP_CLAUSE_NUM_TEAMS_LOWER_EXPR if non-NULL.
+ 	(optimize_target_teams): Use OMP_CLAUSE_NUM_TEAMS_UPPER_EXPR instead
+ 	of OMP_CLAUSE_NUM_TEAMS_EXPR.  Handle OMP_CLAUSE_NUM_TEAMS_LOWER_EXPR.
+ 	* omp-low.c (lower_omp_teams): Use OMP_CLAUSE_NUM_TEAMS_UPPER_EXPR
+ 	instead of OMP_CLAUSE_NUM_TEAMS_EXPR.
+ 	* omp-expand.c (expand_teams_call, get_target_arguments): Likewise.
+ 
+ 2021-11-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	* cfganal.c (find_pdom): Remove.
+ 	(control_dependences::find_control_dependence): Remove
+ 	special-casing of entry block, call get_immediate_dominator
+ 	directly.
+ 	* gimple-predicate-analysis.cc (find_pdom): Remove.
+ 	(find_dom): Likewise.
+ 	(find_control_equiv_block): Call get_immediate_dominator
+ 	directly.
+ 	(compute_control_dep_chain): Likewise.
+ 	(predicate::init_from_phi_def): Likewise.
+ 
+ 2021-11-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	* cfganal.h (control_dependences::control_dependence_map):
+ 	Embed bitmap_head.
+ 	(control_dependences::m_bitmaps): New.
+ 	* cfganal.c (control_dependences::set_control_dependence_map_bit):
+ 	Adjust.
+ 	(control_dependences::clear_control_dependence_bitmap):
+ 	Likewise.
+ 	(control_dependences::find_control_dependence): Do not
+ 	find_edge for the abnormal edge test.
+ 	(control_dependences::control_dependences): Instead do not
+ 	add abnormal edges to the edge list.  Adjust.
+ 	(control_dependences::~control_dependences): Likewise.
+ 	(control_dependences::get_edges_dependent_on): Likewise.
+ 	* function-tests.c: Include bitmap.h.
+ 
+ 2021-11-11  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* doc/invoke.texi: Change references to "future cpu" to "power10",
+ 	"-mcpu=future" to "-mcpu=power10".  Adjust words for float128.
+ 
+ 2021-11-11  Cui,Lili  <lili.cui@intel.com>
+ 
+ 	* config/i386/i386-options.c (m_CORE_AVX2): Remove Alderlake
+ 	from m_CORE_AVX2.
+ 	(processor_cost_table): Use alderlake_cost for Alderlake.
+ 	* config/i386/i386.c (ix86_sched_init_global): Handle Alderlake.
+ 	* config/i386/x86-tune-costs.h (struct processor_costs): Add alderlake
+ 	cost.
+ 	* config/i386/x86-tune-sched.c (ix86_issue_rate): Change Alderlake
+ 	issue rate to 4.
+ 	(ix86_adjust_cost): Handle Alderlake.
+ 	* config/i386/x86-tune.def (X86_TUNE_SCHEDULE): Enable for Alderlake.
+ 	(X86_TUNE_PARTIAL_REG_DEPENDENCY): Likewise.
+ 	(X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY): Likewise.
+ 	(X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY): Likewise.
+ 	(X86_TUNE_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY): Likewise.
+ 	(X86_TUNE_MEMORY_MISMATCH_STALL): Likewise.
+ 	(X86_TUNE_USE_LEAVE): Likewise.
+ 	(X86_TUNE_PUSH_MEMORY): Likewise.
+ 	(X86_TUNE_USE_INCDEC): Likewise.
+ 	(X86_TUNE_INTEGER_DFMODE_MOVES): Likewise.
+ 	(X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES): Likewise.
+ 	(X86_TUNE_USE_SAHF): Likewise.
+ 	(X86_TUNE_USE_BT): Likewise.
+ 	(X86_TUNE_AVOID_FALSE_DEP_FOR_BMI): Likewise.
+ 	(X86_TUNE_ONE_IF_CONV_INSN): Likewise.
+ 	(X86_TUNE_AVOID_MFENCE): Likewise.
+ 	(X86_TUNE_USE_SIMODE_FIOP): Likewise.
+ 	(X86_TUNE_EXT_80387_CONSTANTS): Likewise.
+ 	(X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL): Likewise.
+ 	(X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL): Likewise.
+ 	(X86_TUNE_SSE_TYPELESS_STORES): Likewise.
+ 	(X86_TUNE_SSE_LOAD0_BY_PXOR): Likewise.
+ 	(X86_TUNE_AVOID_4BYTE_PREFIXES): Likewise.
+ 	(X86_TUNE_USE_GATHER): Disable for Alderlake.
+ 	(X86_TUNE_AVX256_MOVE_BY_PIECES): Likewise.
+ 	(X86_TUNE_AVX256_STORE_BY_PIECES): Likewise.
+ 
+ 2021-11-11  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/103151
+ 	* config/i386/sse.md (V_128_256): Extend to V8HF/V16HF.
+ 	(avxsizesuffix): Ditto.
+ 
+ 2021-11-11  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* common/config/riscv/riscv-common.c (riscv_subset_list::to_string): Fix
+ 	wrong marco checking.
+ 
+ 2021-11-10  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/102906
+ 	* tree-ssa-loop-ch.c (entry_loop_condition_is_static): New.
+ 	(should_duplicate_loop_header_p): Call entry_loop_condition_is_static.
+ 	(class ch_base): Add m_ranger and m_query.
+ 	(ch_base::copy_headers): Pass m_query to
+ 	entry_loop_condition_is_static.
+ 	(pass_ch::execute): Allocate and deallocate m_ranger and
+ 	m_query.
+ 	(pass_ch_vect::execute): Same.
+ 
+ 2021-11-10  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR target/103170
+ 	* config/aarch64/aarch64-simd.md (aarch64_simd_dup<mode>):
+ 	Use vwcore iterator for the r constraint output string.
+ 
+ 2021-11-10  qing zhao  <qing.zhao@oracle.com>
+ 
+ 	* internal-fn.c (expand_DEFERRED_INIT): Apply pattern initialization
+ 	only when have_insn_for return true for the mode. Fix a memory leak.
+ 
+ 2021-11-10  Christophe Lyon  <christophe.lyon@foss.st.com>
+ 
+ 	* config/arm/arm.c (cortexa9_extra_costs, cortexa8_extra_costs,
+ 	cortexa5_extra_costs, cortexa7_extra_costs,
+ 	cortexa12_extra_costs, cortexa15_extra_costs, v7m_extra_costs):
+ 	Initialize movi, dup and extract costing fields.
+ 
+ 2021-11-10  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::path_range_query): Do
+ 	not init m_path.
+ 	(path_range_query::dump): Change m_path uses to non-pointer.
+ 	(path_range_query::defined_outside_path):  Same.
+ 	(path_range_query::set_path): Same.
+ 	(path_range_query::add_copies_to_imports): Same.
+ 	(path_range_query::range_of_stmt): Same.
+ 	(path_range_query::compute_outgoing_relations): Same.
+ 	(path_range_query::compute_ranges): Imports are now optional.
+ 	Implement overload that takes an edge.
+ 	* gimple-range-path.h (class path_range_query): Make imports
+ 	optional for compute_ranges.  Add compute_ranges(edge) overload.
+ 	Make m_path an auto_vec instead of a pointer and adjust
+ 	accordingly.
+ 
+ 2021-11-10  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vectorizer.h (struct scalar_cond_masked_key): Add inverted_p.
+ 	(default_hash_traits<scalar_conf_masked_key>): Likewise.
+ 	* tree-vect-stmts.c (vectorizable_condition): Check if inverse of mask
+ 	is live.
+ 	* tree-vectorizer.c (scalar_cond_masked_key::get_cond_ops_from_tree):
+ 	Register mask inverses.
+ 
+ 2021-11-10  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vectorizer.c (vectorize_loops): Do local CSE through RPVN upon
+ 	successful vectorization.
+ 
+ 2021-11-10  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (sbr_vector::grow): New.
+ 	(sbr_vector::set_bb_range): Call grow.
+ 	(sbr_vector::get_bb_range): Same.
+ 	(sbr_vector::bb_range_p): Remove assert.
+ 
+ 2021-11-10  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (*aarch64_topbits_shuffle<mode>_le
+ 	,*aarch64_topbits_shuffle<mode>_be): Remove.
+ 
+ 2021-11-10  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ipa-modref.c: Include tree-eh.h
+ 	(modref_summary::modref_summary): Initialize side_effects.
+ 	(struct modref_summary_lto): New bool field side_effects.
+ 	(modref_summary_lto::modref_summary_lto): Initialize side_effects.
+ 	(modref_summary::dump): Dump side_effects.
+ 	(modref_summary_lto::dump): Dump side_effects.
+ 	(merge_call_side_effects): Merge side effects.
+ 	(process_fnspec): Calls to non-const/pure or looping
+ 	function is a side effect.
+ 	(analyze_call): Self-recursion is a side-effect; handle
+ 	special builtins.
+ 	(analyze_load): Watch for volatile and throwing memory.
+ 	(analyze_store): Likewise.
+ 	(analyze_stmt): Watch for volatitle asm.
+ 	(analyze_function): Handle side_effects.
+ 	(modref_summaries::duplicate): Duplicate side_effects.
+ 	(modref_summaries_lto::duplicate): Likewise.
+ 	(modref_write): Stream side_effects.
+ 	(read_section): Likewise.
+ 	(update_signature): Update.
+ 	(propagate_unknown_call): Handle side_effects.
+ 	(modref_propagate_in_scc): Likewise.
+ 	* ipa-modref.h (struct modref_summary): Add side_effects.
+ 	* ipa-pure-const.c (special_builtin_state): Rename to ...
+ 	(builtin_safe_for_const_function_p): ... this one.
+ 	(check_call): Update.
+ 	(finite_function_p): Break out from ...
+ 	(propagate_pure_const): ... here
+ 	* ipa-utils.h (finite_function): Declare.
+ 
+ 2021-11-10  Lucas A. M. Magalhães  <lamm@linux.ibm.com>
+ 
+ 	* config.gcc (powerpc*-*-*): Remove -rpath from
+ 	--with-advance-toolchain.
+ 
+ 2021-11-10  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/101940
+ 	* attribs.c (struct scoped_attributes): Add a bool member.
+ 	(lookup_scoped_attribute_spec): Forward declare.
+ 	(register_scoped_attributes): New bool parameter, defaulted to
+ 	false.  Use it.
+ 	(handle_ignored_attributes_option): New function.
+ 	(free_attr_data): New function.
+ 	(init_attributes): Call handle_ignored_attributes_option.
+ 	(attr_namespace_ignored_p): New function.
+ 	(decl_attributes): Check attr_namespace_ignored_p before
+ 	warning.
+ 	* attribs.h (free_attr_data): Declare.
+ 	(register_scoped_attributes): Adjust declaration.
+ 	(handle_ignored_attributes_option): Declare.
+ 	(canonicalize_attr_name): New function template.
+ 	(canonicalize_attr_name): Use it.
+ 	* common.opt (Wattributes=): New option with a variable.
+ 	* doc/extend.texi: Document #pragma GCC diagnostic ignored_attributes.
+ 	* doc/invoke.texi: Document -Wno-attributes=.
+ 	* opts.c (common_handle_option) <case OPT_Wattributes_>: Handle.
+ 	* plugin.h (register_scoped_attributes): Adjust declaration.
+ 	* toplev.c (compile_file): Call free_attr_data.
+ 
+ 2021-11-10  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+ 
+ 	* config/arm/arm-cpus.in (cortex-a710): New CPU.
+ 	* config/arm/arm-tables.opt: Regenerate.
+ 	* config/arm/arm-tune.md: Regenerate.
+ 	* doc/invoke.texi: Update docs.
+ 
+ 2021-11-10  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c
+ 	(aarch64_general_gimple_fold_builtin): Mark argument as unused.
+ 
+ 2021-11-10  Martin Liska  <mliska@suse.cz>
+ 
+ 	* lto-wrapper.c (merge_and_complain): Make the first argument
+ 	a reference type.
+ 
+ 2021-11-10  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/iterators.md (optab): Use fmax_nan instead of
+ 	smax_nan and fmin_nan instead of smin_nan.
+ 	(maxmin_uns): Rename to...
+ 	(fmaxmin): ...this and make the same changes.  Remove entries
+ 	unrelated to fmax* and fmin*.
+ 	* config/aarch64/aarch64.md (<maxmin_uns><mode>3): Rename to...
+ 	(<fmaxmin><mode>3): ...this.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<maxmin_uns>p<mode>):
+ 	Rename to...
+ 	(aarch64_<optab>p<mode>): ...this.
+ 	(<maxmin_uns><mode>3): Rename to...
+ 	(<fmaxmin><mode>3): ...this.
+ 	(reduc_<maxmin_uns>_scal_<mode>): Rename to...
+ 	(reduc_<optab>_scal_<mode>): ...this and update gen* call.
+ 	(aarch64_reduc_<maxmin_uns>_internal<mode>): Rename to...
+ 	(aarch64_reduc_<optab>_internal<mode>): ...this.
+ 	(aarch64_reduc_<maxmin_uns>_internalv2si): Rename to...
+ 	(aarch64_reduc_<optab>_internalv2si): ...this.
+ 	* config/aarch64/aarch64-sve.md (<maxmin_uns><mode>3): Rename to...
+ 	(<fmaxmin><mode>3): ...this.
+ 	* config/aarch64/aarch64-simd-builtins.def (smax_nan, smin_nan)
+ 	Rename to...
+ 	(fmax_nan, fmin_nan): ...this.
+ 	* config/aarch64/arm_neon.h (vmax_f32, vmax_f64, vmaxq_f32, vmaxq_f64)
+ 	(vmin_f32, vmin_f64, vminq_f32, vminq_f64, vmax_f16, vmaxq_f16)
+ 	(vmin_f16, vminq_f16): Update accordingly.
+ 
+ 2021-11-10  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vectorizer.h (vector_costs::finish_cost): Take the
+ 	corresponding scalar costs as a parameter.
+ 	(finish_cost): Likewise.
+ 	* tree-vect-loop.c (vect_compute_single_scalar_iteration_cost)
+ 	(vect_estimate_min_profitable_iters): Update accordingly.
+ 	* tree-vect-slp.c (vect_bb_vectorization_profitable_p): Likewise.
+ 	* tree-vectorizer.c (vector_costs::finish_cost): Likewise.
+ 	* config/aarch64/aarch64.c (aarch64_vector_costs::finish_cost):
+ 	Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_cost_data::finish_cost): Likewise.
+ 
+ 2021-11-10  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vectorizer.h (_loop_vec_info::scalar_costs): New member
+ 	variable.
+ 	(_loop_vec_info::single_scalar_iteration_cost): Delete.
+ 	(LOOP_VINFO_SINGLE_SCALAR_ITERATION_COST): Delete.
+ 	(vector_costs::total_cost): New function.
+ 	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Update
+ 	after above changes.
+ 	(_loop_vec_info::~_loop_vec_info): Delete scalar_costs.
+ 	(vect_compute_single_scalar_iteration_cost): Store the costs
+ 	in loop_vinfo->scalar_costs.
+ 	(vect_estimate_min_profitable_iters): Get the scalar cost from
+ 	loop_vinfo->scalar_costs.
+ 
+ 2021-11-10  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vectorizer.h (vector_costs::better_main_loop_than_p)
+ 	(vector_costs::better_epilogue_loop_than_p)
+ 	(vector_costs::compare_inside_loop_cost)
+ 	(vector_costs::compare_outside_loop_cost): Likewise.
+ 	* tree-vectorizer.c (vector_costs::better_main_loop_than_p)
+ 	(vector_costs::better_epilogue_loop_than_p)
+ 	(vector_costs::compare_inside_loop_cost)
+ 	(vector_costs::compare_outside_loop_cost): New functions,
+ 	containing code moved from...
+ 	* tree-vect-loop.c (vect_better_loop_vinfo_p): ...here.
+ 
+ 2021-11-10  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vectorizer.h (_loop_vec_info): Remove vec_outside_cost
+ 	and vec_inside_cost.
+ 	(vector_costs::outside_cost): New function.
+ 	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Update
+ 	after above.
+ 	(vect_estimate_min_profitable_iters): Likewise.
+ 	(vect_better_loop_vinfo_p): Get the inside and outside costs
+ 	from the loop_vec_infos' vector_costs.
+ 
+ 2021-11-10  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vectorizer.h (vec_info::target_cost_data): Replace with...
+ 	(_loop_vec_info::vector_costs): ...this.
+ 	(LOOP_VINFO_TARGET_COST_DATA): Delete.
+ 	* tree-vectorizer.c (vec_info::vec_info): Remove target_cost_data
+ 	initialization.
+ 	(vec_info::~vec_info): Remove corresponding delete.
+ 	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Initialize
+ 	vector_costs to null.
+ 	(_loop_vec_info::~_loop_vec_info): Delete vector_costs.
+ 	(vect_analyze_loop_operations): Update after above changes.
+ 	(vect_analyze_loop_2): Likewise.
+ 	(vect_estimate_min_profitable_iters): Likewise.
+ 	* tree-vect-slp.c (vect_slp_analyze_operations): Likewise.
+ 
+ 2021-11-10  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* tree-core.h (EAF_DIRECT): Remove.
+ 	(EAF_NOCLOBBER): Remove.
+ 	(EAF_UNUSED): Remove.
+ 	(EAF_NOESCAPE): Remove.
+ 	(EAF_NO_DIRECT_CLOBBER): New.
+ 	(EAF_NO_INDIRECT_CLOBBER): New.
+ 	(EAF_NODIRECTESCAPE): Remove.
+ 	(EAF_NO_DIRECT_ESCAPE): New.
+ 	(EAF_NO_INDIRECT_ESCAPE): New.
+ 	(EAF_NOT_RETURNED): Remove.
+ 	(EAF_NOT_RETURNED_INDIRECTLY): New.
+ 	(EAF_NOREAD): Remove.
+ 	(EAF_NO_DIRECT_READ): New.
+ 	(EAF_NO_INDIRECT_READ): New.
+ 	* gimple.c (gimple_call_arg_flags): Update for new flags.
+ 	(gimple_call_retslot_flags): Update for new flags.
+ 	* ipa-modref.c (dump_eaf_flags): Likewise.
+ 	(remove_useless_eaf_flags): Likewise.
+ 	(deref_flags): Likewise.
+ 	(modref_lattice::init): Likewise.
+ 	(modref_lattice::merge): Likewise.
+ 	(modref_lattice::merge_direct_load): Likewise.
+ 	(modref_lattice::merge_direct_store): Likewise.
+ 	(modref_eaf_analysis::merge_call_lhs_flags): Likewise.
+ 	(callee_to_caller_flags): Likewise.
+ 	(modref_eaf_analysis::analyze_ssa_name): Likewise.
+ 	(modref_eaf_analysis::propagate): Likewise.
+ 	(modref_merge_call_site_flags): Likewise.
+ 	* ipa-modref.h (interposable_eaf_flags): Likewise.
+ 	* tree-ssa-alias.c: (ref_maybe_used_by_call_p_1) Likewise.
+ 	* tree-ssa-structalias.c (handle_call_arg): Likewise.
+ 	(handle_rhs_call): Likewise.
+ 	* tree-ssa-uninit.c (maybe_warn_pass_by_reference): Likewise.
+ 
+ 2021-11-10  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-slp-patterns.c (complex_mul_pattern::matches): Remove l1node.
+ 
+ 2021-11-10  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c
+ 	(aarch64_general_gimple_fold_builtin): Change pointer alignment and
+ 	alias.
+ 
+ 2021-11-10  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* ipa-modref-tree.h (modref_tree::remap_params): Fix off-by-one error.
+ 
+ 2021-11-10  H.J. Lu  <hongjiu.lu@intel.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	PR middle-end/102566
+ 	* match.pd (nop_atomic_bit_test_and_p): New match.
+ 	* tree-ssa-ccp.c (convert_atomic_bit_not): New function.
+ 	(gimple_nop_atomic_bit_test_and_p): New prototype.
+ 	(optimize_atomic_bit_test_and): Transform equivalent, but slighly
+ 	different cases to their canonical forms.
+ 
+ 2021-11-10  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR tree-optimization/103126
+ 	* tree-vect-loop.c (neutral_op_for_reduction): Remove static.
+ 	* tree-vectorizer.h (neutral_op_for_reduction): Declare.
+ 	* tree-if-conv.c : Include tree-vectorizer.h.
+ 	(is_cond_scalar_reduction): Handle
+ 	BIT_XOR_EXPR/BIT_IOR_EXPR/BIT_AND_EXPR.
+ 	(convert_scalar_cond_reduction): Ditto.
+ 
+ 2021-11-10  konglin1  <lingling.kong@intel.com>
+ 
+ 	* config/i386/sse.md (cmul<conj_op><mode>3): add new define_expand.
+ 	(cmla<conj_op><mode>4): Likewise
+ 
+ 2021-11-10  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadedge.c: Do not include
+ 	gimple-ssa-evrp-analyze.h.
+ 	* value-pointer-equiv.cc: Same.
+ 
+ 2021-11-10  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c
+ 	(back_threader::maybe_register_path_dump): Abstract path dumping...
+ 	(dump_path): ...here.
+ 	(back_threader::resolve_phi): Call dump_path.
+ 	(debug): Same.
+ 
+ 2021-11-10  konglin1  <lingling.kong@intel.com>
+ 
+ 	* config/i386/sse.md (fma_<complexpairopname>_<mode>_pair):
+ 	Add new define_insn.
+ 	(fma_<mode>_fmaddc_bcst): Add new define_insn_and_split.
+ 	(fma_<mode>_fcmaddc_bcst): Likewise
+ 
+ 2021-11-10  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102464
+ 	* match.pd: Simplify (trunc)fmax/fmin((extend)a, (extend)b) to
+ 	MAX/MIN(a,b)
+ 
+ 2021-11-10  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR target/101529
+ 	* config/aarch64/aarch64.c (aarch64_evpc_ins): Don't use target
+ 	as an input, use original one.
+ 
+ 2021-11-10  Sandra Loosemore  <sandra@codesourcery.com>
+ 
+ 	* config/nios2/nios2.c (nios2_can_inline_p): New.
+ 	(TARGET_CAN_INLINE_P): Define.
+ 
+ 2021-11-09  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_new_builtin):
+ 	Disable gimple fold for RS6000_BIF_{XVMINDP,XVMINSP,VMINFP} and
+ 	RS6000_BIF_{XVMAXDP,XVMAXSP,VMAXFP} when fast-math is not set.
+ 	(lxvrse_expand_builtin): Modify the expansion for sign extension.
+ 	All extensions are done within VSX registers.
+ 
+ 2021-11-09  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/10352
+ 	* match.pd: Remove check of TYPE_PRECISION for
+ 	the a?0:pow2 case.
+ 
+ 2021-11-09  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* function.c (allocate_struct_function): Don't set x_range_query.
+ 	* function.h (get_range_query): Move to value-query.h.
+ 	* gimple-range.cc (enable_ranger): Check that query is currently NULL.
+ 	(disable_ranger): Clear function current query field.
+ 	* value-query.cc (get_global_range_query): Relocate to:
+ 	* value-query.h (get_global_range_query): Here and inline.
+ 	(get_range_query): Relocate here from function.h.
+ 
+ 2021-11-09  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c
+ 	(back_threader::maybe_register_path_dump): New.
+ 	(back_threader::maybe_register_path): Call maybe_register_path_dump.
+ 
+ 2021-11-09  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (back_threader::maybe_register_path):
+ 	Return NULL when unprofitable.
+ 
+ 2021-11-09  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* tree.h (build_debug_expr_decl): Declare.
+ 	* tree.c (build_debug_expr_decl): New function.
+ 	* cfgexpand.c (avoid_deep_ter_for_debug): Use build_debug_expr_decl
+ 	instead of building a DEBUG_EXPR_DECL.
+ 	* ipa-param-manipulation.c
+ 	(ipa_param_body_adjustments::prepare_debug_expressions): Likewise.
+ 	* omp-simd-clone.c (ipa_simd_modify_stmt_ops): Likewise.
+ 	* tree-ssa-ccp.c (optimize_atomic_bit_test_and): Likewise.
+ 	* tree-ssa-phiopt.c (spaceship_replacement): Likewise.
+ 	* tree-ssa-reassoc.c (make_new_ssa_for_def): Likewise.
+ 
+ 2021-11-09  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_type_string): New function.
+ 	(def_builtin): Change debug formatting for easier parsing and
+ 	include more information.
+ 	(rs6000_init_builtins): Add dump of autogenerated builtins.
+ 	(altivec_init_builtins): Dump __builtin_altivec_mask_for_load for
+ 	completeness.
+ 
+ 2021-11-09  Marek Polacek  <polacek@redhat.com>
+ 
+ 	* ipa-modref.c (analyze_parms): Fix a typo.
+ 
+ 2021-11-09  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	PR target/102957
+ 	* common/config/riscv/riscv-common.c (multi_letter_subset_rank): Remove
+ 	assertion for Z*-ext.
+ 
+ 2021-11-09  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (analyze_parms): Add past_flags, past_retslot_flags
+ 	and past_static_chain; merge past summary with current one.
+ 	(analyze_function): Update.
+ 
+ 2021-11-09  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* doc/invoke.texi (Invoking GCC): Document --param=threader-debug.
+ 
+ 2021-11-09  Martin Liska  <mliska@suse.cz>
+ 
+ 	* print-rtl.c (rtx_writer::rtx_writer): Make the compilation
+ 	conditional based on
+ 	* print-rtl.h (class rtx_writer): Likewise.
+ 
+ 2021-11-09  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* input.h (location_hash): Use 'BUILTINS_LOCATION' as spare value
+ 	for 'Deleted'.  Turn into a '#define'.
+ 
+ 2021-11-09  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::dump): Clean up.
+ 	(path_range_query::compute_ranges): Same.
+ 	* value-relation.cc (path_oracle::dump): Same.
+ 
+ 2021-11-09  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* dumpfile.c (dump_options): Remove TDF_THREADING entry.
+ 	* dumpfile.h (enum dump_flag): Remove TDF_THREADING and adjust
+ 	remaining entries.
+ 	* flag-types.h (enum threader_debug): New.
+ 	* gimple-range-path.cc (DEBUG_SOLVER): Use param_threader_debug.
+ 	* params.opt: Add entry for --param=threader-debug=.
+ 
+ 2021-11-09  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR middle-end/101204
+ 	PR other/103157
+ 	* diagnostic-spec.h (typedef xint_hash_t): Turn into...
+ 	(struct xint_hash_t): ... this.
+ 	* doc/gty.texi: Update.
+ 
+ 2021-11-09  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+ 
+ 	* config/arm/arm-cpus.in (armv9): New define.
+ 	(ARMv9a): New group.
+ 	(armv9-a): New arch definition.
+ 	* config/arm/arm-tables.opt: Regenerate.
+ 	* config/arm/arm.h (BASE_ARCH_9A): New arch enum value.
+ 	* config/arm/t-aprofile: Added armv9-a and armv9+simd.
+ 	* config/arm/t-arm-elf: Added arm9-a, v9_fps and all_v9_archs
+ 	to MULTILIB_MATCHES.
+ 	* config/arm/t-multilib: Added v9_a_nosimd_variants and
+ 	v9_a_simd_variants to MULTILIB_MATCHES.
+ 	* doc/invoke.texi: Update docs.
+ 
+ 2021-11-09  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/103132
+ 	* ipa-param-manipulation.c (replace_with_mapped_expr): Early
+ 	return with error_mark_mode when part of expression is mapped to
+ 	NULL.
+ 	(ipa_param_body_adjustments::remap_with_debug_expressions): Set
+ 	mapped value to NULL if walk_tree returns error_mark_mode.
+ 
+ 2021-11-09  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-strlen.c (compare_nonzero_chars): Pass statement
+ 	context to ranger.
+ 	(get_addr_stridx): Same.
+ 	(get_stridx): Same.
+ 	(get_range_strlen_dynamic): Same.
+ 	(handle_builtin_strlen): Same.
+ 	(handle_builtin_strchr): Same.
+ 	(handle_builtin_strcpy): Same.
+ 	(maybe_diag_stxncpy_trunc): Same.
+ 	(handle_builtin_stxncpy_strncat): Same.
+ 	(handle_builtin_memcpy): Same.
+ 	(handle_builtin_strcat): Same.
+ 	(handle_alloc_call): Same.
+ 	(handle_builtin_memset): Same.
+ 	(handle_builtin_string_cmp): Same.
+ 	(handle_pointer_plus): Same.
+ 	(count_nonzero_bytes_addr): Same.
+ 	(count_nonzero_bytes): Same.
+ 	(handle_store): Same.
+ 	(fold_strstr_to_strncmp): Same.
+ 	(handle_integral_assign): Same.
+ 	(check_and_optimize_stmt): Same.
+ 	(class strlen_dom_walker): Replace evrp with ranger.
+ 	(strlen_dom_walker::before_dom_children): Remove evrp.
+ 	(strlen_dom_walker::after_dom_children): Remove evrp.
+ 	* gimple-ssa-warn-access.cc (maybe_check_access_sizes):
+ 	Restrict sprintf output.
+ 
+ 2021-11-09  Martin Liska  <mliska@suse.cz>
+ 
+ 	* genconditions.c (write_one_condition): Add const qualifier
+ 	to pointer casting.
+ 
+ 2021-11-09  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* match.pd: New pattern to simplify (1 << n) & M ==/!= 0 for M
+ 	being a power of 2.
+ 
+ 2021-11-08  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def (VEC_INIT_V16QI): Use
+ 	escape-newline support.
+ 	(VEC_INIT_V4SI): Likewise.
+ 	(VEC_INIT_V8HI): Likewise.
+ 	(PACK_V1TI): Likewise.
+ 	(DIVDEU): Likewise.
+ 	(VFIRSTMISMATCHOREOSINDEX_V16QI): Likewise.
+ 	(VFIRSTMISMATCHOREOSINDEX_V8HI): Likewise.
+ 	(VFIRSTMISMATCHOREOSINDEX_V4SI): Likewise.
+ 	(CMPRB2): Likewise.
+ 	(VSTDCP): Likewise.
+ 	(VSIEDP): Likewise.
+ 	(FMAF128_ODD): Likewise.
+ 	(VSCEQPUO): Likewise.
+ 	(VSIEQP): Likewise.
+ 	(VSIEQPF): Likewise.
+ 	(VSTDCQP): Likewise.
+ 	(PACK_TD): Likewise.
+ 	(TABORTDC): Likewise.
+ 	(TABORTDCI): Likewise.
+ 	(SE_LXVRBX): Likewise.
+ 	(SE_LXVRHX): Likewise.
+ 	(SE_LXVRWX): Likewise.
+ 	(SE_LXVRDX): Likewise.
+ 	(VREPLACE_UN_UV2DI): Likewise.
+ 	(VREPLACE_UN_UV4SI): Likewise.
+ 	(VREPLACE_UN_V2DI): Likewise.
+ 	(VREPLACE_ELT_UV2DI): Likewise.
+ 	(VREPLACE_ELT_V2DI): Likewise.
+ 	(ZE_LXVRBX): Likewise.
+ 	(ZE_LXVRHX): Likewise.
+ 	(ZE_LXVRWX): Likewise.
+ 	(ZE_LXVRDX): Likewise.
+ 	(CFUGED): Likewise.
+ 	(CNTLZDM): Likewise.
+ 	(CNTTZDM): Likewise.
+ 	(PDEPD): Likewise.
+ 	(PEXTD): Likewise.
+ 	(PMXVBF16GER2): Likewise.
+ 	(PMXVBF16GER2_INTERNAL): Likewise.
+ 	(PMXVBF16GER2NN): Likewise.
+ 	(PMXVBF16GER2NN_INTERNAL): Likewise.
+ 	(PMXVBF16GER2NP): Likewise.
+ 	(PMXVBF16GER2NP_INTERNAL): Likewise.
+ 	(PMXVBF16GER2PN): Likewise.
+ 	(PMXVBF16GER2PN_INTERNAL): Likewise.
+ 	(PMXVBF16GER2PP): Likewise.
+ 	(PMXVBF16GER2PP_INTERNAL): Likewise.
+ 	(PMXVF16GER2): Likewise.
+ 	(PMXVF16GER2_INTERNAL): Likewise.
+ 	(PMXVF16GER2NN): Likewise.
+ 	(PMXVF16GER2NN_INTERNAL): Likewise.
+ 	(PMXVF16GER2NP): Likewise.
+ 	(PMXVF16GER2NP_INTERNAL): Likewise.
+ 	(PMXVF16GER2PN): Likewise.
+ 	(PMXVF16GER2PN_INTERNAL): Likewise.
+ 	(PMXVF16GER2PP): Likewise.
+ 	(PMXVF16GER2PP_INTERNAL): Likewise.
+ 	(PMXVF32GER_INTERNAL): Likewise.
+ 	(PMXVF32GERNN): Likewise.
+ 	(PMXVF32GERNN_INTERNAL): Likewise.
+ 	(PMXVF32GERNP): Likewise.
+ 	(PMXVF32GERNP_INTERNAL): Likewise.
+ 	(PMXVF32GERPN): Likewise.
+ 	(PMXVF32GERPN_INTERNAL): Likewise.
+ 	(PMXVF32GERPP): Likewise.
+ 	(PMXVF32GERPP_INTERNAL): Likewise.
+ 	(PMXVF64GER): Likewise.
+ 	(PMXVF64GER_INTERNAL): Likewise.
+ 	(PMXVF64GERNN): Likewise.
+ 	(PMXVF64GERNN_INTERNAL): Likewise.
+ 	(PMXVF64GERNP): Likewise.
+ 	(PMXVF64GERNP_INTERNAL): Likewise.
+ 	(PMXVF64GERPN): Likewise.
+ 	(PMXVF64GERPN_INTERNAL): Likewise.
+ 	(PMXVF64GERPP): Likewise.
+ 	(PMXVF64GERPP_INTERNAL): Likewise.
+ 	(PMXVI16GER2): Likewise.
+ 	(PMXVI16GER2_INTERNAL): Likewise.
+ 	(PMXVI16GER2PP): Likewise.
+ 	(PMXVI16GER2PP_INTERNAL): Likewise.
+ 	(PMXVI16GER2S): Likewise.
+ 	(PMXVI16GER2S_INTERNAL): Likewise.
+ 	(PMXVI16GER2SPP): Likewise.
+ 	(PMXVI16GER2SPP_INTERNAL): Likewise.
+ 	(PMXVI4GER8): Likewise.
+ 	(PMXVI4GER8_INTERNAL): Likewise.
+ 	(PMXVI4GER8PP): Likewise.
+ 	(PMXVI4GER8PP_INTERNAL): Likewise.
+ 	(PMXVI8GER4): Likewise.
+ 	(PMXVI8GER4_INTERNAL): Likewise.
+ 	(PMXVI8GER4PP): Likewise.
+ 	(PMXVI8GER4PP_INTERNAL): Likewise.
+ 	(PMXVI8GER4SPP): Likewise.
+ 	(PMXVI8GER4SPP_INTERNAL): Likewise.
+ 	* config/rs6000/rs6000-gen-builtins.c (MAXLINES): New macro.
+ 	(linebuf): Increase size.
+ 	(lines): New variable.
+ 	(lastline): Likewise.
+ 	(real_line_pos): New function.
+ 	(diag): Change signature.
+ 	(bif_diag): Change signature; support escape-newline handling.
+ 	(ovld_diag): Likewise.
+ 	(fatal): Move earlier.
+ 	(consume_whitespace): Adjust diag call.
+ 	(advance_line): Add escape-newline handling; call fatal.
+ 	(safe_inc_pos): Adjust diag call.
+ 	(match_identifier): Likewise.
+ 	(match_integer): Likewise.
+ 	(match_to_right_bracket): Call fatal instead of diag; adjust diag
+ 	call.
+ 	(match_basetype): Adjust diag calls.
+ 	(match_bracketed_pair): Likewise.
+ 	(match_const_restriction): Likewise.
+ 	(match_type): Likewise.
+ 	(parse_args): Likewise.
+ 	(parse_bif_attrs): Likewise.
+ 	(complete_vector_type): Likewise.
+ 	(complete_base_type): Likewise.
+ 	(parse_prototype): Likewise.
+ 	(parse_bif_entry): Likewise.
+ 	(parse_bif_stanza): Likewise.
+ 	(parse_ovld_entry): Likewise.
+ 	(parse_ovld_stanza): Likewise.
+ 	(main): Allocate buffers for lines[].
+ 
+ 2021-11-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* config/i386/i386.c (legitimize_pic_address): Adjust comment and
+ 	use the REG argument on the CM_LARGE_PIC code path as well.
+ 	* config/i386/predicates.md (gotoff_operand): Do not treat VxWorks
+ 	specially with the large code models.
+ 
+ 2021-11-08  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* gimple.c (gimple_call_static_chain_flags): Revert the workaround
+ 	allowing interposition since issues with binds_to_local_def were
+ 	hopefully solved.
+ 
+ 2021-11-08  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/103122
+ 	* gimple-range.cc (gimple_ranger::range_of_expr): Request the cache
+ 	entry with "calulate new values" set to false.
+ 
+ 2021-11-08  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* builtins.c (is_simple_builtin): Add builitin_dwarf_cfa
+ 	and builtin_return_address.
+ 	(builtin_fnspec): Annotate builtin_return,
+ 	bulitin_eh_pointer, builtin_eh_filter, builtin_unwind_resume,
+ 	builtin_cxa_end_cleanup, builtin_eh_copy_values,
+ 	builtin_frame_address, builtin_apply_args,
+ 	builtin_asan_before_dynamic_init, builtin_asan_after_dynamic_init,
+ 	builtin_prefetch, builtin_dwarf_cfa, builtin_return_addrss
+ 	as ".c"
+ 	* ipa-pure-const.c (special_builtin_state): Add builtin_dwarf_cfa
+ 	and builtin_return_address.
+ 
+ 2021-11-08  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR tree-optimization/103177
+ 	* passes.def: Move uncprop after pure/const and modref.
+ 
+ 2021-11-08  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/103099
+ 	PR ipa/103107
+ 	* tree-inline.c (remap_gimple_stmt): Unshare the expression without
+ 	location before invoking remap_with_debug_expressions on it.
+ 	* ipa-param-manipulation.c
+ 	(ipa_param_body_adjustments::prepare_debug_expressions): Likewise.
+ 
+ 2021-11-08  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/vsx.md (vsx_splat_v4si_di): Revert "wa"
+ 	constraint to "we".
+ 
+ 2021-11-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	* cfgloop.c (verify_loop_structure): Use a temporary BB flag
+ 	instead of an sbitmap to cache irreducible state.
+ 
+ 2021-11-08  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/103120
+ 	* gimple-range-path.cc (path_range_query::range_defined_in_block):
+ 	Bail if there's a cache entry.
+ 
+ 2021-11-08  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_builtin_reciprocal): Use
+ 	rs6000_builtin_decls_x when appropriate.
+ 	(add_condition_to_bb): Likewise.
+ 	(rs6000_atomic_assign_expand_fenv): Likewise.
+ 
+ 2021-11-08  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_new_builtin_decl): New function.
+ 	(rs6000_builtin_decl): Call it.
+ 
+ 2021-11-08  Martin Liska  <mliska@suse.cz>
+ 
+ 	* cgraph.c (cgraph_node::dump): Dump it from decl.
+ 
+ 2021-11-08  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR gcov-profile/100520
+ 	* coverage.c (coverage_compute_profile_id): Strip .gk when
+ 	compare debug is used.
+ 	* system.h (endswith): New function.
+ 
+ 2021-11-08  Martin Liska  <mliska@suse.cz>
+ 
+ 	* cgraph.c (cgraph_node::dump): Dump static_chain_decl.
+ 
+ 2021-11-08  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* config/rs6000/rbtree.c: Fix 'Copyright (C) 2020-21' into '2020-2021'
+ 	* config/rs6000/rbtree.h: Likewise.
+ 	* config/rs6000/rs6000-builtin-new.def: Likewise.
+ 	* config/rs6000/rs6000-gen-builtins.c: Likewise.
+ 	* config/rs6000/rs6000-overload.def: Likewise.
+ 
+ 2021-11-08  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_ldn_stn_vectors): New function.
+ 	(aarch64_address_cost): Use it instead of testing for CImode and
+ 	XImode directly.
+ 
+ 2021-11-08  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* genmodes.c (emit_insn_modes_h): Define NUM_MODE_* macros.
+ 	* expmed.h (NUM_MODE_INT): Delete in favor of genmodes definitions.
+ 	(NUM_MODE_PARTIAL_INT, NUM_MODE_VECTOR_INT): Likewise.
+ 	* real.h (real_format_for_mode): Use NUM_MODE_FLOAT and
+ 	NUM_MODE_DECIMAL_FLOAT.
+ 	(REAL_MODE_FORMAT): Likewise.
+ 
+ 2021-11-08  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	* tree-vect-loop.c (vect_better_loop_vinfo_p): Change how epilogue loop
+ 	costs are compared.
+ 
+ 2021-11-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (vect_create_loop_vinfo): Add main_loop_info
+ 	parameter.
+ 	* tree-vect-loop.c (vect_create_loop_vinfo): Likewise.  Set
+ 	LOOP_VINFO_ORIG_LOOP_INFO and conditionalize set of
+ 	LOOP_VINFO_NITERS_ASSUMPTIONS.
+ 	(vect_analyze_loop_1): Adjust.
+ 	(vect_analyze_loop): Move loop constraint setting and
+ 	SCEV/niter reset here from vect_create_loop_vinfo to perform
+ 	it only once.
+ 	(vect_analyze_loop_form): Move dumping of symbolic niters
+ 	here from vect_create_loop_vinfo.
+ 
+ 2021-11-08  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.h (enum modref_special_parms): New enum.
+ 	(struct modref_access_node): update for special parms.
+ 	(struct modref_ref_node): Likewise.
+ 	(struct modref_parm_map): Likewise.
+ 	(struct modref_tree): Likewise.
+ 	* ipa-modref.c (dump_access): Likewise.
+ 	(get_access): Detect static chain.
+ 	(parm_map_for_arg): Take tree as arg instead of
+ 	stmt and index.
+ 	(merge_call_side_effects): Compute map for static chain.
+ 	(process_fnspec): Update.
+ 	(struct escape_point): Remove retslot_arg and static_chain_arg.
+ 	(analyze_parms): Update.
+ 	(compute_parm_map): Update.
+ 	(propagate_unknown_call): Update.
+ 	(modref_propagate_in_scc): Update.
+ 	(modref_merge_call_site_flags): Update.
+ 	(ipa_merge_modref_summary_after_inlining): Update.
+ 	* tree-ssa-alias.c (modref_may_conflict): Handle static chain.
+ 	* ipa-modref-tree.c (test_merge): Update.
+ 
+ 2021-11-08  Haochen Gui  <guihaoc@gcc.gnu.org>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_builtin): Disable
+ 	gimple fold for VSX_BUILTIN_XVMINDP, ALTIVEC_BUILTIN_VMINFP,
+ 	VSX_BUILTIN_XVMAXDP, ALTIVEC_BUILTIN_VMAXFP when fast-math is not
+ 	set.
+ 
+ 2021-11-08  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR tree-optimization/103077
+ 	* doc/invoke.texi (Options That Control Optimization):
+ 	Update documentation for -ftree-loop-vectorize and
+ 	-ftree-slp-vectorize which are enabled by default at -02.
+ 
+ 2021-11-08  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102464
+ 	* match.pd (Simplifcation (trunc)copysign((extend)a, (extend)b)
+ 	to .COPYSIGN (a, b)): Add !HONOR_SNANS.
+ 
+ 2021-11-08  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102464
+ 	* match.pd: Simplify
+ 	(trunc)fma ((extend)a, (extend)b, (extend)c) to IFN_FMA (a, b,
+ 	c) under flag_unsafe_math_optimizations.
+ 
+ 2021-11-07  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103055
+ 	* params.opt (modref-max-depth): Add range.
+ 	(modref-max-adjustments): Fix range.
+ 
+ 2021-11-07  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-pass.h (make_pass_vrp_threader): Remove.
+ 	* tree-ssa-threadbackward.c
+ 	(back_threader_profitability::profitable_path_p): Remove
+ 	ASSERT_EXPR references.
+ 	* tree-ssa-threadedge.c (jt_state::register_equivs_stmt): Same.
+ 	* tree-vrp.c (vrp_folder::simplify_casted_conds): Same.
+ 	(execute_vrp): Same.
+ 	(class hybrid_threader): Remove.
+ 	(hybrid_threader::hybrid_threader): Remove.
+ 	(hybrid_threader::~hybrid_threader): Remove.
+ 	(hybrid_threader::before_dom_children): Remove.
+ 	(hybrid_threader::after_dom_children): Remove.
+ 	(execute_vrp_threader): Remove.
+ 	(class pass_vrp_threader): Remove.
+ 	(make_pass_vrp_threader): Remove.
+ 
+ 2021-11-07  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* gimple.c (gimple_call_arg_flags): Use interposable_eaf_flags.
+ 	(gimple_call_retslot_flags): Likewise.
+ 	(gimple_call_static_chain_flags): Likewise.
+ 	* ipa-modref.c (remove_useless_eaf_flags): Do not remove everything for
+ 	NOVOPS.
+ 	(modref_summary::useful_p): Likewise.
+ 	(modref_summary_lto::useful_p): Likewise.
+ 	(analyze_parms): Do not give up on NOVOPS.
+ 	(analyze_function): When dumping report chnages in EAF flags
+ 	between IPA and local pass.
+ 	(modref_merge_call_site_flags): Compute implicit eaf flags
+ 	based on callee ecf_flags and fnspec; if the function does not
+ 	bind to current defs use interposable_eaf_flags.
+ 	(modref_propagate_flags_in_scc): Update.
+ 	* ipa-modref.h (interposable_eaf_flags): New function.
+ 
+ 2021-11-07  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_expand_new_builtin): New
+ 	forward decl.
+ 	(rs6000_invalid_new_builtin): New function.
+ 	(rs6000_expand_builtin): Call rs6000_expand_new_builtin.
+ 	(rs6000_expand_ldst_mask): New function.
+ 	(new_cpu_expand_builtin): Likewise.
+ 	(elemrev_icode): Likewise.
+ 	(ldv_expand_builtin): Likewise.
+ 	(lxvrse_expand_builtin): Likewise.
+ 	(lxvrze_expand_builtin): Likewise.
+ 	(stv_expand_builtin): Likewise.
+ 	(new_mma_expand_builtin): Likewise.
+ 	(new_htm_spr_num): Likewise.
+ 	(new_htm_expand_builtin): Likewise.
+ 	(rs6000_expand_new_builtin): Likewise.
+ 	(rs6000_init_builtins): Initialize altivec_builtin_mask_for_load.
+ 
+ 2021-11-07  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (modref_lattice): Add do_dataflow,
+ 	changed and propagate_to fields.
+ 	(modref_lattice::release): Free propagate_to
+ 	(modref_lattice::merge): Do not give up early on unknown
+ 	lattice values.
+ 	(modref_lattice::merge_deref): Likewise.
+ 	(modref_eaf_analysis): Update toplevel comment.
+ 	(modref_eaf_analysis::analyze_ssa_name): Record postponned ssa names;
+ 	do optimistic dataflow initialization.
+ 	(modref_eaf_analysis::merge_with_ssa_name): Build dataflow graph.
+ 	(modref_eaf_analysis::propagate): New member function.
+ 	(analyze_parms): Update to new API of modref_eaf_analysis.
+ 
+ 2021-11-06  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* cgraph.h (cgraph_node::can_be_discarded_p): Do not
+ 	return true on functions from other partition.
+ 
+ 2021-11-06  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/vsx.md (vsx_splat_v4si): Change constraints to "wa".
+ 	(vsx_splat_v4si_di): Change constraint to "wa".
+ 
+ 2021-11-06  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/103061
+ 	* value-relation.cc (path_oracle::path_oracle): Initialize
+ 	m_killed_defs.
+ 	(path_oracle::killing_def): Set m_killed_defs.
+ 	(path_oracle::query_relation): Do not look at the root oracle for
+ 	killed defs.
+ 	* value-relation.h (class path_oracle): Add m_killed_defs.
+ 
+ 2021-11-06  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (back_threader::find_paths_to_names):
+ 	Remove gotos and other cleanups.
+ 
+ 2021-11-05  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103073
+ 	* ipa-modref-tree.h (modref_tree::insert): Do nothing for
+ 	paradoxical and zero sized accesses.
+ 
+ 2021-11-05  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103082
+ 	* ipa-modref-tree.h (struct modref_access_node): Avoid left shift
+ 	of negative value
+ 
+ 2021-11-05  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.h (ASM_GENERATE_INTERNAL_LABEL): Add LTRAMP
+ 	to the list of symbol prefixes that must be made linker-
+ 	visible.
+ 
+ 2021-11-05  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config.host: Add support for aarch64-*-darwin.
+ 	* config/aarch64/host-aarch64-darwin.c: New file.
+ 	* config/aarch64/x-darwin: New file.
+ 
+ 2021-11-05  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/103093
+ 	* gimple-range-gori.cc (range_def_chain::get_imports): Remove assert.
+ 
+ 2021-11-05  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/102943
+ 	* gimple-range-cache.cc (class update_list): New.
+ 	(update_list::add): Replace add_to_update.
+ 	(update_list::pop): New.
+ 	(ranger_cache::ranger_cache): Adjust.
+ 	(ranger_cache::~ranger_cache): Adjust.
+ 	(ranger_cache::add_to_update): Delete.
+ 	(ranger_cache::propagate_cache): Adjust to new class.
+ 	(ranger_cache::propagate_updated_value): Ditto.
+ 	(ranger_cache::fill_block_cache): Ditto.
+ 	* gimple-range-cache.h (class ranger_cache): Adjust to update class.
+ 
+ 2021-11-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-loop.c (vect_analyze_loop): Remove obsolete
+ 	comment and expand on another one.  Combine nested if.
+ 
+ 2021-11-05  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	PR libgomp/96661
+ 	* config/pa/pa-modes.def: Add OImode integer type.
+ 	* config/pa/pa.c (pa_scalar_mode_supported_p): Allow TImode
+ 	for TARGET_64BIT.
+ 	* config/pa/pa.h (MIN_UNITS_PER_WORD) Define to MIN_UNITS_PER_WORD
+ 	to UNITS_PER_WORD if IN_LIBGCC2.
+ 	* config/pa/pa.md (addti3, addvti3, subti3, subvti3, negti2,
+ 	negvti2, ashlti3, shrpd_internal): New patterns.
+ 	Change some multi instruction types to multi.
+ 
+ 2021-11-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR bootstrap/100246
+ 	* config/i386/i386.h
+ 	(stringop_algs::stringop_strategy::stringop_strategy): Make the ctor
+ 	constexpr.
+ 
+ 2021-11-05  Wilco Dijkstra  <wdijkstr@arm.com>
+ 
+ 	PR target/103085
+ 	* config/aarch64/aarch64.c (aarch64_mov_operand_p): Strip the salt
+ 	first.
+ 	* config/aarch64/constraints.md: Support const in Usw.
+ 
+ 2021-11-05  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa.h (PREFERRED_DEBUGGING_TYPE): Define to DWARF2_DEBUG.
+ 	* config/pa/pa64-hpux.h (PREFERRED_DEBUGGING_TYPE): Remove define.
+ 
+ 2021-11-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (vec_info_shared::n_stmts): Add.
+ 	(LOOP_VINFO_N_STMTS): Likewise.
+ 	(vec_info_for_bb): Remove unused function.
+ 	* tree-vectorizer.c (vec_info_shared::vec_info_shared):
+ 	Initialize n_stmts member.
+ 	* tree-vect-loop.c: Remove INCLUDE_FUNCTIONAL.
+ 	(vect_create_loop_vinfo): Do not set loop->aux.
+ 	(vect_analyze_loop_2): Do not get n_stmts as argument,
+ 	instead use LOOP_VINFO_N_STMTS.  Set LOOP_VINFO_VECTORIZABLE_P
+ 	here.
+ 	(vect_analyze_loop_1): Remove callback, get the mode iterator
+ 	and autodetected_vector_mode as argument, advancing the
+ 	iterator and initializing autodetected_vector_mode here.
+ 	(vect_analyze_loop): Split analysis loop into two, first
+ 	processing main loops only and then epilogues.
+ 
+ 2021-11-05  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* ipa-prop.c (compute_complex_assign_jump_func): Remove
+ 	unnecessary check for RECORD_TYPE.
+ 
+ 2021-11-05  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/install.texi2html: Do not generate old.html any longer.
+ 
+ 2021-11-05  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR debug/102955
+ 	* opts.c (finish_options): Reset flag_gtoggle when it is used.
+ 
+ 2021-11-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/103046
+ 	* dwarf2out.c (add_const_value_attribute): Add MODE argument, use it
+ 	in CONST_WIDE_INT handling.  Adjust recursive calls.
+ 	(add_location_or_const_value_attribute): Pass DECL_MODE (decl) to
+ 	new add_const_value_attribute argument.
+ 	(tree_add_const_value_attribute): Pass TYPE_MODE (type) to new
+ 	add_const_value_attribute argument.
+ 
+ 2021-11-05  Rasmus Villemoes  <rasmus.villemoes@prevas.dk>
+ 
+ 	* config/vx-common.h: Test value of TARGET_VXWORKS7 rather
+ 	than definedness.
+ 
+ 2021-11-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (struct vect_loop_form_info): New.
+ 	(vect_analyze_loop_form): Adjust.
+ 	(vect_create_loop_vinfo): New.
+ 	* tree-parloops.c (gather_scalar_reductions): Adjust for
+ 	vect_analyze_loop_form API change.
+ 	* tree-vect-loop.c: Include <functional>.
+ 	(vect_analyze_loop_form_1): Rename to vect_analyze_loop_form,
+ 	take struct vect_loop_form_info as output parameter and adjust.
+ 	(vect_analyze_loop_form): Rename to vect_create_loop_vinfo and
+ 	split out call to the original vect_analyze_loop_form_1.
+ 	(vect_reanalyze_as_main_loop): Rename to...
+ 	(vect_analyze_loop_1): ... this, factor out the call to
+ 	vect_analyze_loop_form and generalize to be able to use it twice ...
+ 	(vect_analyze_loop): ... here.  Perform vect_analyze_loop_form
+ 	once only and here.
+ 
+ 2021-11-05  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	PR target/102991
+ 	* config/rs6000/fusion.md: Regenerate.
+ 	* config/rs6000/genfusion.pl: Fix incorrect clobber constraint.
+ 
+ 2021-11-04  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* config/s390/s390.h (STACK_CHECK_MOVING_SP): New macro
+ 	definition.
+ 
+ 2021-11-04  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c
+ 	(aarch64_general_gimple_fold_builtin): Add ashl, sshl, ushl, ashr,
+ 	ashr_simd, lshr, lshr_simd.
+ 	* config/aarch64/aarch64-simd-builtins.def (lshr): Use USHIFTIMM.
+ 	* config/aarch64/arm_neon.h (vshr_n_u8, vshr_n_u16, vshr_n_u32,
+ 	vshrq_n_u8, vshrq_n_u16, vshrq_n_u32, vshrq_n_u64): Fix type hack.
+ 
+ 2021-11-04  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* match.pd: New negate+shift pattern.
+ 
+ 2021-11-04  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/103079
+ 	* gimple-range-gori.cc (gimple_range_calc_op1): Treat undefined as
+ 	varying.
+ 	(gimple_range_calc_op2): Ditto.
+ 
+ 2021-11-04  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/93385
+ 	* ipa-param-manipulation.h (class ipa_param_body_adjustments): New
+ 	members remap_with_debug_expressions, m_dead_ssa_debug_equiv,
+ 	m_dead_stmt_debug_equiv and prepare_debug_expressions.  Added
+ 	parameter to mark_dead_statements.
+ 	* ipa-param-manipulation.c: Include tree-phinodes.h and cfgexpand.h.
+ 	(ipa_param_body_adjustments::mark_dead_statements): New parameter
+ 	debugstack, push into it all SSA names used in debug statements,
+ 	produce m_dead_ssa_debug_equiv mapping for the removed param.
+ 	(replace_with_mapped_expr): New function.
+ 	(ipa_param_body_adjustments::remap_with_debug_expressions): Likewise.
+ 	(ipa_param_body_adjustments::prepare_debug_expressions): Likewise.
+ 	(ipa_param_body_adjustments::common_initialization): Gather and
+ 	procecc SSA which will be removed but are in debug statements. Simplify.
+ 	(ipa_param_body_adjustments::ipa_param_body_adjustments): Initialize
+ 	new members.
+ 	* tree-inline.c (remap_gimple_stmt): Create a debug bind when possible
+ 	when avoiding a copy of an unnecessary statement.  Remap removed SSA
+ 	names in existing debug statements.
+ 	(tree_function_versioning): Do not create DEBUG_EXPR_DECL for removed
+ 	parameters if we have already done so.
+ 
+ 2021-11-04  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103058
+ 	* gimple.c (gimple_call_static_chain_flags): Handle case when
+ 	nested function does not bind locally.
+ 
+ 2021-11-04  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_function_value): Generate
+ 	a register rtx for Neon vector-tuple modes.
+ 	(aarch64_layout_arg): Likewise.
+ 
+ 2021-11-04  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* lower-subreg.c (simple_move): Prevent decomposition if
+ 	modes are not tieable.
+ 
+ 2021-11-04  Jonathan Wright  <jonathan.wright@arm.com>
+ 	    Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c (v2x8qi_UP): Define.
+ 	(v2x4hi_UP): Likewise.
+ 	(v2x4hf_UP): Likewise.
+ 	(v2x4bf_UP): Likewise.
+ 	(v2x2si_UP): Likewise.
+ 	(v2x2sf_UP): Likewise.
+ 	(v2x1di_UP): Likewise.
+ 	(v2x1df_UP): Likewise.
+ 	(v2x16qi_UP): Likewise.
+ 	(v2x8hi_UP): Likewise.
+ 	(v2x8hf_UP): Likewise.
+ 	(v2x8bf_UP): Likewise.
+ 	(v2x4si_UP): Likewise.
+ 	(v2x4sf_UP): Likewise.
+ 	(v2x2di_UP): Likewise.
+ 	(v2x2df_UP): Likewise.
+ 	(v3x8qi_UP): Likewise.
+ 	(v3x4hi_UP): Likewise.
+ 	(v3x4hf_UP): Likewise.
+ 	(v3x4bf_UP): Likewise.
+ 	(v3x2si_UP): Likewise.
+ 	(v3x2sf_UP): Likewise.
+ 	(v3x1di_UP): Likewise.
+ 	(v3x1df_UP): Likewise.
+ 	(v3x16qi_UP): Likewise.
+ 	(v3x8hi_UP): Likewise.
+ 	(v3x8hf_UP): Likewise.
+ 	(v3x8bf_UP): Likewise.
+ 	(v3x4si_UP): Likewise.
+ 	(v3x4sf_UP): Likewise.
+ 	(v3x2di_UP): Likewise.
+ 	(v3x2df_UP): Likewise.
+ 	(v4x8qi_UP): Likewise.
+ 	(v4x4hi_UP): Likewise.
+ 	(v4x4hf_UP): Likewise.
+ 	(v4x4bf_UP): Likewise.
+ 	(v4x2si_UP): Likewise.
+ 	(v4x2sf_UP): Likewise.
+ 	(v4x1di_UP): Likewise.
+ 	(v4x1df_UP): Likewise.
+ 	(v4x16qi_UP): Likewise.
+ 	(v4x8hi_UP): Likewise.
+ 	(v4x8hf_UP): Likewise.
+ 	(v4x8bf_UP): Likewise.
+ 	(v4x4si_UP): Likewise.
+ 	(v4x4sf_UP): Likewise.
+ 	(v4x2di_UP): Likewise.
+ 	(v4x2df_UP): Likewise.
+ 	(TYPES_GETREGP): Delete.
+ 	(TYPES_SETREGP): Likewise.
+ 	(TYPES_LOADSTRUCT_U): Define.
+ 	(TYPES_LOADSTRUCT_P): Likewise.
+ 	(TYPES_LOADSTRUCT_LANE_U): Likewise.
+ 	(TYPES_LOADSTRUCT_LANE_P): Likewise.
+ 	(TYPES_STORE1P): Move for consistency.
+ 	(TYPES_STORESTRUCT_U): Define.
+ 	(TYPES_STORESTRUCT_P): Likewise.
+ 	(TYPES_STORESTRUCT_LANE_U): Likewise.
+ 	(TYPES_STORESTRUCT_LANE_P): Likewise.
+ 	(aarch64_simd_tuple_types): Define.
+ 	(aarch64_lookup_simd_builtin_type): Handle tuple type lookup.
+ 	(aarch64_init_simd_builtin_functions): Update frontend lookup
+ 	for builtin functions after handling arm_neon.h pragma.
+ 	(register_tuple_type): Manually set modes of single-integer
+ 	tuple types. Record tuple types.
+ 	* config/aarch64/aarch64-modes.def
+ 	(ADV_SIMD_D_REG_STRUCT_MODES): Define D-register tuple modes.
+ 	(ADV_SIMD_Q_REG_STRUCT_MODES): Define Q-register tuple modes.
+ 	(SVE_MODES): Give single-vector modes priority over vector-
+ 	tuple modes.
+ 	(VECTOR_MODES_WITH_PREFIX): Set partial-vector mode order to
+ 	be after all single-vector modes.
+ 	* config/aarch64/aarch64-simd-builtins.def: Update builtin
+ 	generator macros to reflect modifications to the backend
+ 	patterns.
+ 	* config/aarch64/aarch64-simd.md (aarch64_simd_ld2<mode>):
+ 	Use vector-tuple mode iterator and rename to...
+ 	(aarch64_simd_ld2<vstruct_elt>): This.
+ 	(aarch64_simd_ld2r<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_simd_ld2r<vstruct_elt>): This.
+ 	(aarch64_vec_load_lanesoi_lane<mode>): Use vector-tuple mode
+ 	iterator and rename to...
+ 	(aarch64_vec_load_lanes<mode>_lane<vstruct_elt>): This.
+ 	(vec_load_lanesoi<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(vec_load_lanes<mode><vstruct_elt>): This.
+ 	(aarch64_simd_st2<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_simd_st2<vstruct_elt>): This.
+ 	(aarch64_vec_store_lanesoi_lane<mode>): Use vector-tuple mode
+ 	iterator and rename to...
+ 	(aarch64_vec_store_lanes<mode>_lane<vstruct_elt>): This.
+ 	(vec_store_lanesoi<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(vec_store_lanes<mode><vstruct_elt>): This.
+ 	(aarch64_simd_ld3<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_simd_ld3<vstruct_elt>): This.
+ 	(aarch64_simd_ld3r<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_simd_ld3r<vstruct_elt>): This.
+ 	(aarch64_vec_load_lanesci_lane<mode>): Use vector-tuple mode
+ 	iterator and rename to...
+ 	(vec_load_lanesci<mode>): This.
+ 	(aarch64_simd_st3<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_simd_st3<vstruct_elt>): This.
+ 	(aarch64_vec_store_lanesci_lane<mode>): Use vector-tuple mode
+ 	iterator and rename to...
+ 	(vec_store_lanesci<mode>): This.
+ 	(aarch64_simd_ld4<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_simd_ld4<vstruct_elt>): This.
+ 	(aarch64_simd_ld4r<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_simd_ld4r<vstruct_elt>): This.
+ 	(aarch64_vec_load_lanesxi_lane<mode>): Use vector-tuple mode
+ 	iterator and rename to...
+ 	(vec_load_lanesxi<mode>): This.
+ 	(aarch64_simd_st4<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_simd_st4<vstruct_elt>): This.
+ 	(aarch64_vec_store_lanesxi_lane<mode>): Use vector-tuple mode
+ 	iterator and rename to...
+ 	(vec_store_lanesxi<mode>): This.
+ 	(mov<mode>): Define for Neon vector-tuple modes.
+ 	(aarch64_ld1x3<VALLDIF:mode>): Use vector-tuple mode iterator
+ 	and rename to...
+ 	(aarch64_ld1x3<vstruct_elt>): This.
+ 	(aarch64_ld1_x3_<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_ld1_x3_<vstruct_elt>): This.
+ 	(aarch64_ld1x4<VALLDIF:mode>): Use vector-tuple mode iterator
+ 	and rename to...
+ 	(aarch64_ld1x4<vstruct_elt>): This.
+ 	(aarch64_ld1_x4_<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_ld1_x4_<vstruct_elt>): This.
+ 	(aarch64_st1x2<VALLDIF:mode>): Use vector-tuple mode iterator
+ 	and rename to...
+ 	(aarch64_st1x2<vstruct_elt>): This.
+ 	(aarch64_st1_x2_<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_st1_x2_<vstruct_elt>): This.
+ 	(aarch64_st1x3<VALLDIF:mode>): Use vector-tuple mode iterator
+ 	and rename to...
+ 	(aarch64_st1x3<vstruct_elt>): This.
+ 	(aarch64_st1_x3_<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_st1_x3_<vstruct_elt>): This.
+ 	(aarch64_st1x4<VALLDIF:mode>): Use vector-tuple mode iterator
+ 	and rename to...
+ 	(aarch64_st1x4<vstruct_elt>): This.
+ 	(aarch64_st1_x4_<mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_st1_x4_<vstruct_elt>): This.
+ 	(*aarch64_mov<mode>): Define for vector-tuple modes.
+ 	(*aarch64_be_mov<mode>): Likewise.
+ 	(aarch64_ld<VSTRUCT:nregs>r<VALLDIF:mode>): Use vector-tuple
+ 	mode iterator and rename to...
+ 	(aarch64_ld<nregs>r<vstruct_elt>): This.
+ 	(aarch64_ld2<mode>_dreg): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_ld2<vstruct_elt>_dreg): This.
+ 	(aarch64_ld3<mode>_dreg): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_ld3<vstruct_elt>_dreg): This.
+ 	(aarch64_ld4<mode>_dreg): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_ld4<vstruct_elt>_dreg): This.
+ 	(aarch64_ld<VSTRUCT:nregs><VDC:mode>): Use vector-tuple mode
+ 	iterator and rename to...
+ 	(aarch64_ld<nregs><vstruct_elt>): Use vector-tuple mode
+ 	iterator and rename to...
+ 	(aarch64_ld<VSTRUCT:nregs><VQ:mode>): Use vector-tuple mode
+ 	(aarch64_ld1x2<VQ:mode>): Delete.
+ 	(aarch64_ld1x2<VDC:mode>): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_ld1x2<vstruct_elt>): This.
+ 	(aarch64_ld<VSTRUCT:nregs>_lane<VALLDIF:mode>): Use vector-
+ 	tuple mode iterator and rename to...
+ 	(aarch64_ld<nregs>_lane<vstruct_elt>): This.
+ 	(aarch64_get_dreg<VSTRUCT:mode><VDC:mode>): Delete.
+ 	(aarch64_get_qreg<VSTRUCT:mode><VQ:mode>): Likewise.
+ 	(aarch64_st2<mode>_dreg): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_st2<vstruct_elt>_dreg): This.
+ 	(aarch64_st3<mode>_dreg): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_st3<vstruct_elt>_dreg): This.
+ 	(aarch64_st4<mode>_dreg): Use vector-tuple mode iterator and
+ 	rename to...
+ 	(aarch64_st4<vstruct_elt>_dreg): This.
+ 	(aarch64_st<VSTRUCT:nregs><VDC:mode>): Use vector-tuple mode
+ 	iterator and rename to...
+ 	(aarch64_st<nregs><vstruct_elt>): This.
+ 	(aarch64_st<VSTRUCT:nregs><VQ:mode>): Use vector-tuple mode
+ 	iterator and rename to aarch64_st<nregs><vstruct_elt>.
+ 	(aarch64_st<VSTRUCT:nregs>_lane<VALLDIF:mode>): Use vector-
+ 	tuple mode iterator and rename to...
+ 	(aarch64_st<nregs>_lane<vstruct_elt>): This.
+ 	(aarch64_set_qreg<VSTRUCT:mode><VQ:mode>): Delete.
+ 	(aarch64_simd_ld1<mode>_x2): Use vector-tuple mode iterator
+ 	and rename to...
+ 	(aarch64_simd_ld1<vstruct_elt>_x2): This.
+ 	* config/aarch64/aarch64.c (aarch64_advsimd_struct_mode_p):
+ 	Refactor to include new vector-tuple modes.
+ 	(aarch64_classify_vector_mode): Add cases for new vector-
+ 	tuple modes.
+ 	(aarch64_advsimd_partial_struct_mode_p): Define.
+ 	(aarch64_advsimd_full_struct_mode_p): Likewise.
+ 	(aarch64_advsimd_vector_array_mode): Likewise.
+ 	(aarch64_sve_data_mode): Change location in file.
+ 	(aarch64_array_mode): Handle case of Neon vector-tuple modes.
+ 	(aarch64_hard_regno_nregs): Handle case of partial Neon
+ 	vector structures.
+ 	(aarch64_classify_address): Refactor to include handling of
+ 	Neon vector-tuple modes.
+ 	(aarch64_print_operand): Print "d" for "%R" for a partial
+ 	Neon vector structure.
+ 	(aarch64_expand_vec_perm_1): Use new vector-tuple mode.
+ 	(aarch64_modes_tieable_p): Prevent tieing Neon partial struct
+ 	modes with scalar machines modes larger than 8 bytes.
+ 	(aarch64_can_change_mode_class): Don't allow changes between
+ 	partial and full Neon vector-structure modes.
+ 	* config/aarch64/arm_neon.h (vst2_lane_f16): Use updated
+ 	builtin and remove boiler-plate code for opaque mode.
+ 	(vst2_lane_f32): Likewise.
+ 	(vst2_lane_f64): Likewise.
+ 	(vst2_lane_p8): Likewise.
+ 	(vst2_lane_p16): Likewise.
+ 	(vst2_lane_p64): Likewise.
+ 	(vst2_lane_s8): Likewise.
+ 	(vst2_lane_s16): Likewise.
+ 	(vst2_lane_s32): Likewise.
+ 	(vst2_lane_s64): Likewise.
+ 	(vst2_lane_u8): Likewise.
+ 	(vst2_lane_u16): Likewise.
+ 	(vst2_lane_u32): Likewise.
+ 	(vst2_lane_u64): Likewise.
+ 	(vst2q_lane_f16): Likewise.
+ 	(vst2q_lane_f32): Likewise.
+ 	(vst2q_lane_f64): Likewise.
+ 	(vst2q_lane_p8): Likewise.
+ 	(vst2q_lane_p16): Likewise.
+ 	(vst2q_lane_p64): Likewise.
+ 	(vst2q_lane_s8): Likewise.
+ 	(vst2q_lane_s16): Likewise.
+ 	(vst2q_lane_s32): Likewise.
+ 	(vst2q_lane_s64): Likewise.
+ 	(vst2q_lane_u8): Likewise.
+ 	(vst2q_lane_u16): Likewise.
+ 	(vst2q_lane_u32): Likewise.
+ 	(vst2q_lane_u64): Likewise.
+ 	(vst3_lane_f16): Likewise.
+ 	(vst3_lane_f32): Likewise.
+ 	(vst3_lane_f64): Likewise.
+ 	(vst3_lane_p8): Likewise.
+ 	(vst3_lane_p16): Likewise.
+ 	(vst3_lane_p64): Likewise.
+ 	(vst3_lane_s8): Likewise.
+ 	(vst3_lane_s16): Likewise.
+ 	(vst3_lane_s32): Likewise.
+ 	(vst3_lane_s64): Likewise.
+ 	(vst3_lane_u8): Likewise.
+ 	(vst3_lane_u16): Likewise.
+ 	(vst3_lane_u32): Likewise.
+ 	(vst3_lane_u64): Likewise.
+ 	(vst3q_lane_f16): Likewise.
+ 	(vst3q_lane_f32): Likewise.
+ 	(vst3q_lane_f64): Likewise.
+ 	(vst3q_lane_p8): Likewise.
+ 	(vst3q_lane_p16): Likewise.
+ 	(vst3q_lane_p64): Likewise.
+ 	(vst3q_lane_s8): Likewise.
+ 	(vst3q_lane_s16): Likewise.
+ 	(vst3q_lane_s32): Likewise.
+ 	(vst3q_lane_s64): Likewise.
+ 	(vst3q_lane_u8): Likewise.
+ 	(vst3q_lane_u16): Likewise.
+ 	(vst3q_lane_u32): Likewise.
+ 	(vst3q_lane_u64): Likewise.
+ 	(vst4_lane_f16): Likewise.
+ 	(vst4_lane_f32): Likewise.
+ 	(vst4_lane_f64): Likewise.
+ 	(vst4_lane_p8): Likewise.
+ 	(vst4_lane_p16): Likewise.
+ 	(vst4_lane_p64): Likewise.
+ 	(vst4_lane_s8): Likewise.
+ 	(vst4_lane_s16): Likewise.
+ 	(vst4_lane_s32): Likewise.
+ 	(vst4_lane_s64): Likewise.
+ 	(vst4_lane_u8): Likewise.
+ 	(vst4_lane_u16): Likewise.
+ 	(vst4_lane_u32): Likewise.
+ 	(vst4_lane_u64): Likewise.
+ 	(vst4q_lane_f16): Likewise.
+ 	(vst4q_lane_f32): Likewise.
+ 	(vst4q_lane_f64): Likewise.
+ 	(vst4q_lane_p8): Likewise.
+ 	(vst4q_lane_p16): Likewise.
+ 	(vst4q_lane_p64): Likewise.
+ 	(vst4q_lane_s8): Likewise.
+ 	(vst4q_lane_s16): Likewise.
+ 	(vst4q_lane_s32): Likewise.
+ 	(vst4q_lane_s64): Likewise.
+ 	(vst4q_lane_u8): Likewise.
+ 	(vst4q_lane_u16): Likewise.
+ 	(vst4q_lane_u32): Likewise.
+ 	(vst4q_lane_u64): Likewise.
+ 	(vtbl3_s8): Likewise.
+ 	(vtbl3_u8): Likewise.
+ 	(vtbl3_p8): Likewise.
+ 	(vtbl4_s8): Likewise.
+ 	(vtbl4_u8): Likewise.
+ 	(vtbl4_p8): Likewise.
+ 	(vld1_u8_x3): Likewise.
+ 	(vld1_s8_x3): Likewise.
+ 	(vld1_u16_x3): Likewise.
+ 	(vld1_s16_x3): Likewise.
+ 	(vld1_u32_x3): Likewise.
+ 	(vld1_s32_x3): Likewise.
+ 	(vld1_u64_x3): Likewise.
+ 	(vld1_s64_x3): Likewise.
+ 	(vld1_f16_x3): Likewise.
+ 	(vld1_f32_x3): Likewise.
+ 	(vld1_f64_x3): Likewise.
+ 	(vld1_p8_x3): Likewise.
+ 	(vld1_p16_x3): Likewise.
+ 	(vld1_p64_x3): Likewise.
+ 	(vld1q_u8_x3): Likewise.
+ 	(vld1q_s8_x3): Likewise.
+ 	(vld1q_u16_x3): Likewise.
+ 	(vld1q_s16_x3): Likewise.
+ 	(vld1q_u32_x3): Likewise.
+ 	(vld1q_s32_x3): Likewise.
+ 	(vld1q_u64_x3): Likewise.
+ 	(vld1q_s64_x3): Likewise.
+ 	(vld1q_f16_x3): Likewise.
+ 	(vld1q_f32_x3): Likewise.
+ 	(vld1q_f64_x3): Likewise.
+ 	(vld1q_p8_x3): Likewise.
+ 	(vld1q_p16_x3): Likewise.
+ 	(vld1q_p64_x3): Likewise.
+ 	(vld1_u8_x2): Likewise.
+ 	(vld1_s8_x2): Likewise.
+ 	(vld1_u16_x2): Likewise.
+ 	(vld1_s16_x2): Likewise.
+ 	(vld1_u32_x2): Likewise.
+ 	(vld1_s32_x2): Likewise.
+ 	(vld1_u64_x2): Likewise.
+ 	(vld1_s64_x2): Likewise.
+ 	(vld1_f16_x2): Likewise.
+ 	(vld1_f32_x2): Likewise.
+ 	(vld1_f64_x2): Likewise.
+ 	(vld1_p8_x2): Likewise.
+ 	(vld1_p16_x2): Likewise.
+ 	(vld1_p64_x2): Likewise.
+ 	(vld1q_u8_x2): Likewise.
+ 	(vld1q_s8_x2): Likewise.
+ 	(vld1q_u16_x2): Likewise.
+ 	(vld1q_s16_x2): Likewise.
+ 	(vld1q_u32_x2): Likewise.
+ 	(vld1q_s32_x2): Likewise.
+ 	(vld1q_u64_x2): Likewise.
+ 	(vld1q_s64_x2): Likewise.
+ 	(vld1q_f16_x2): Likewise.
+ 	(vld1q_f32_x2): Likewise.
+ 	(vld1q_f64_x2): Likewise.
+ 	(vld1q_p8_x2): Likewise.
+ 	(vld1q_p16_x2): Likewise.
+ 	(vld1q_p64_x2): Likewise.
+ 	(vld1_s8_x4): Likewise.
+ 	(vld1q_s8_x4): Likewise.
+ 	(vld1_s16_x4): Likewise.
+ 	(vld1q_s16_x4): Likewise.
+ 	(vld1_s32_x4): Likewise.
+ 	(vld1q_s32_x4): Likewise.
+ 	(vld1_u8_x4): Likewise.
+ 	(vld1q_u8_x4): Likewise.
+ 	(vld1_u16_x4): Likewise.
+ 	(vld1q_u16_x4): Likewise.
+ 	(vld1_u32_x4): Likewise.
+ 	(vld1q_u32_x4): Likewise.
+ 	(vld1_f16_x4): Likewise.
+ 	(vld1q_f16_x4): Likewise.
+ 	(vld1_f32_x4): Likewise.
+ 	(vld1q_f32_x4): Likewise.
+ 	(vld1_p8_x4): Likewise.
+ 	(vld1q_p8_x4): Likewise.
+ 	(vld1_p16_x4): Likewise.
+ 	(vld1q_p16_x4): Likewise.
+ 	(vld1_s64_x4): Likewise.
+ 	(vld1_u64_x4): Likewise.
+ 	(vld1_p64_x4): Likewise.
+ 	(vld1q_s64_x4): Likewise.
+ 	(vld1q_u64_x4): Likewise.
+ 	(vld1q_p64_x4): Likewise.
+ 	(vld1_f64_x4): Likewise.
+ 	(vld1q_f64_x4): Likewise.
+ 	(vld2_s64): Likewise.
+ 	(vld2_u64): Likewise.
+ 	(vld2_f64): Likewise.
+ 	(vld2_s8): Likewise.
+ 	(vld2_p8): Likewise.
+ 	(vld2_p64): Likewise.
+ 	(vld2_s16): Likewise.
+ 	(vld2_p16): Likewise.
+ 	(vld2_s32): Likewise.
+ 	(vld2_u8): Likewise.
+ 	(vld2_u16): Likewise.
+ 	(vld2_u32): Likewise.
+ 	(vld2_f16): Likewise.
+ 	(vld2_f32): Likewise.
+ 	(vld2q_s8): Likewise.
+ 	(vld2q_p8): Likewise.
+ 	(vld2q_s16): Likewise.
+ 	(vld2q_p16): Likewise.
+ 	(vld2q_p64): Likewise.
+ 	(vld2q_s32): Likewise.
+ 	(vld2q_s64): Likewise.
+ 	(vld2q_u8): Likewise.
+ 	(vld2q_u16): Likewise.
+ 	(vld2q_u32): Likewise.
+ 	(vld2q_u64): Likewise.
+ 	(vld2q_f16): Likewise.
+ 	(vld2q_f32): Likewise.
+ 	(vld2q_f64): Likewise.
+ 	(vld3_s64): Likewise.
+ 	(vld3_u64): Likewise.
+ 	(vld3_f64): Likewise.
+ 	(vld3_s8): Likewise.
+ 	(vld3_p8): Likewise.
+ 	(vld3_s16): Likewise.
+ 	(vld3_p16): Likewise.
+ 	(vld3_s32): Likewise.
+ 	(vld3_u8): Likewise.
+ 	(vld3_u16): Likewise.
+ 	(vld3_u32): Likewise.
+ 	(vld3_f16): Likewise.
+ 	(vld3_f32): Likewise.
+ 	(vld3_p64): Likewise.
+ 	(vld3q_s8): Likewise.
+ 	(vld3q_p8): Likewise.
+ 	(vld3q_s16): Likewise.
+ 	(vld3q_p16): Likewise.
+ 	(vld3q_s32): Likewise.
+ 	(vld3q_s64): Likewise.
+ 	(vld3q_u8): Likewise.
+ 	(vld3q_u16): Likewise.
+ 	(vld3q_u32): Likewise.
+ 	(vld3q_u64): Likewise.
+ 	(vld3q_f16): Likewise.
+ 	(vld3q_f32): Likewise.
+ 	(vld3q_f64): Likewise.
+ 	(vld3q_p64): Likewise.
+ 	(vld4_s64): Likewise.
+ 	(vld4_u64): Likewise.
+ 	(vld4_f64): Likewise.
+ 	(vld4_s8): Likewise.
+ 	(vld4_p8): Likewise.
+ 	(vld4_s16): Likewise.
+ 	(vld4_p16): Likewise.
+ 	(vld4_s32): Likewise.
+ 	(vld4_u8): Likewise.
+ 	(vld4_u16): Likewise.
+ 	(vld4_u32): Likewise.
+ 	(vld4_f16): Likewise.
+ 	(vld4_f32): Likewise.
+ 	(vld4_p64): Likewise.
+ 	(vld4q_s8): Likewise.
+ 	(vld4q_p8): Likewise.
+ 	(vld4q_s16): Likewise.
+ 	(vld4q_p16): Likewise.
+ 	(vld4q_s32): Likewise.
+ 	(vld4q_s64): Likewise.
+ 	(vld4q_u8): Likewise.
+ 	(vld4q_u16): Likewise.
+ 	(vld4q_u32): Likewise.
+ 	(vld4q_u64): Likewise.
+ 	(vld4q_f16): Likewise.
+ 	(vld4q_f32): Likewise.
+ 	(vld4q_f64): Likewise.
+ 	(vld4q_p64): Likewise.
+ 	(vld2_dup_s8): Likewise.
+ 	(vld2_dup_s16): Likewise.
+ 	(vld2_dup_s32): Likewise.
+ 	(vld2_dup_f16): Likewise.
+ 	(vld2_dup_f32): Likewise.
+ 	(vld2_dup_f64): Likewise.
+ 	(vld2_dup_u8): Likewise.
+ 	(vld2_dup_u16): Likewise.
+ 	(vld2_dup_u32): Likewise.
+ 	(vld2_dup_p8): Likewise.
+ 	(vld2_dup_p16): Likewise.
+ 	(vld2_dup_p64): Likewise.
+ 	(vld2_dup_s64): Likewise.
+ 	(vld2_dup_u64): Likewise.
+ 	(vld2q_dup_s8): Likewise.
+ 	(vld2q_dup_p8): Likewise.
+ 	(vld2q_dup_s16): Likewise.
+ 	(vld2q_dup_p16): Likewise.
+ 	(vld2q_dup_s32): Likewise.
+ 	(vld2q_dup_s64): Likewise.
+ 	(vld2q_dup_u8): Likewise.
+ 	(vld2q_dup_u16): Likewise.
+ 	(vld2q_dup_u32): Likewise.
+ 	(vld2q_dup_u64): Likewise.
+ 	(vld2q_dup_f16): Likewise.
+ 	(vld2q_dup_f32): Likewise.
+ 	(vld2q_dup_f64): Likewise.
+ 	(vld2q_dup_p64): Likewise.
+ 	(vld3_dup_s64): Likewise.
+ 	(vld3_dup_u64): Likewise.
+ 	(vld3_dup_f64): Likewise.
+ 	(vld3_dup_s8): Likewise.
+ 	(vld3_dup_p8): Likewise.
+ 	(vld3_dup_s16): Likewise.
+ 	(vld3_dup_p16): Likewise.
+ 	(vld3_dup_s32): Likewise.
+ 	(vld3_dup_u8): Likewise.
+ 	(vld3_dup_u16): Likewise.
+ 	(vld3_dup_u32): Likewise.
+ 	(vld3_dup_f16): Likewise.
+ 	(vld3_dup_f32): Likewise.
+ 	(vld3_dup_p64): Likewise.
+ 	(vld3q_dup_s8): Likewise.
+ 	(vld3q_dup_p8): Likewise.
+ 	(vld3q_dup_s16): Likewise.
+ 	(vld3q_dup_p16): Likewise.
+ 	(vld3q_dup_s32): Likewise.
+ 	(vld3q_dup_s64): Likewise.
+ 	(vld3q_dup_u8): Likewise.
+ 	(vld3q_dup_u16): Likewise.
+ 	(vld3q_dup_u32): Likewise.
+ 	(vld3q_dup_u64): Likewise.
+ 	(vld3q_dup_f16): Likewise.
+ 	(vld3q_dup_f32): Likewise.
+ 	(vld3q_dup_f64): Likewise.
+ 	(vld3q_dup_p64): Likewise.
+ 	(vld4_dup_s64): Likewise.
+ 	(vld4_dup_u64): Likewise.
+ 	(vld4_dup_f64): Likewise.
+ 	(vld4_dup_s8): Likewise.
+ 	(vld4_dup_p8): Likewise.
+ 	(vld4_dup_s16): Likewise.
+ 	(vld4_dup_p16): Likewise.
+ 	(vld4_dup_s32): Likewise.
+ 	(vld4_dup_u8): Likewise.
+ 	(vld4_dup_u16): Likewise.
+ 	(vld4_dup_u32): Likewise.
+ 	(vld4_dup_f16): Likewise.
+ 	(vld4_dup_f32): Likewise.
+ 	(vld4_dup_p64): Likewise.
+ 	(vld4q_dup_s8): Likewise.
+ 	(vld4q_dup_p8): Likewise.
+ 	(vld4q_dup_s16): Likewise.
+ 	(vld4q_dup_p16): Likewise.
+ 	(vld4q_dup_s32): Likewise.
+ 	(vld4q_dup_s64): Likewise.
+ 	(vld4q_dup_u8): Likewise.
+ 	(vld4q_dup_u16): Likewise.
+ 	(vld4q_dup_u32): Likewise.
+ 	(vld4q_dup_u64): Likewise.
+ 	(vld4q_dup_f16): Likewise.
+ 	(vld4q_dup_f32): Likewise.
+ 	(vld4q_dup_f64): Likewise.
+ 	(vld4q_dup_p64): Likewise.
+ 	(vld2_lane_u8): Likewise.
+ 	(vld2_lane_u16): Likewise.
+ 	(vld2_lane_u32): Likewise.
+ 	(vld2_lane_u64): Likewise.
+ 	(vld2_lane_s8): Likewise.
+ 	(vld2_lane_s16): Likewise.
+ 	(vld2_lane_s32): Likewise.
+ 	(vld2_lane_s64): Likewise.
+ 	(vld2_lane_f16): Likewise.
+ 	(vld2_lane_f32): Likewise.
+ 	(vld2_lane_f64): Likewise.
+ 	(vld2_lane_p8): Likewise.
+ 	(vld2_lane_p16): Likewise.
+ 	(vld2_lane_p64): Likewise.
+ 	(vld2q_lane_u8): Likewise.
+ 	(vld2q_lane_u16): Likewise.
+ 	(vld2q_lane_u32): Likewise.
+ 	(vld2q_lane_u64): Likewise.
+ 	(vld2q_lane_s8): Likewise.
+ 	(vld2q_lane_s16): Likewise.
+ 	(vld2q_lane_s32): Likewise.
+ 	(vld2q_lane_s64): Likewise.
+ 	(vld2q_lane_f16): Likewise.
+ 	(vld2q_lane_f32): Likewise.
+ 	(vld2q_lane_f64): Likewise.
+ 	(vld2q_lane_p8): Likewise.
+ 	(vld2q_lane_p16): Likewise.
+ 	(vld2q_lane_p64): Likewise.
+ 	(vld3_lane_u8): Likewise.
+ 	(vld3_lane_u16): Likewise.
+ 	(vld3_lane_u32): Likewise.
+ 	(vld3_lane_u64): Likewise.
+ 	(vld3_lane_s8): Likewise.
+ 	(vld3_lane_s16): Likewise.
+ 	(vld3_lane_s32): Likewise.
+ 	(vld3_lane_s64): Likewise.
+ 	(vld3_lane_f16): Likewise.
+ 	(vld3_lane_f32): Likewise.
+ 	(vld3_lane_f64): Likewise.
+ 	(vld3_lane_p8): Likewise.
+ 	(vld3_lane_p16): Likewise.
+ 	(vld3_lane_p64): Likewise.
+ 	(vld3q_lane_u8): Likewise.
+ 	(vld3q_lane_u16): Likewise.
+ 	(vld3q_lane_u32): Likewise.
+ 	(vld3q_lane_u64): Likewise.
+ 	(vld3q_lane_s8): Likewise.
+ 	(vld3q_lane_s16): Likewise.
+ 	(vld3q_lane_s32): Likewise.
+ 	(vld3q_lane_s64): Likewise.
+ 	(vld3q_lane_f16): Likewise.
+ 	(vld3q_lane_f32): Likewise.
+ 	(vld3q_lane_f64): Likewise.
+ 	(vld3q_lane_p8): Likewise.
+ 	(vld3q_lane_p16): Likewise.
+ 	(vld3q_lane_p64): Likewise.
+ 	(vld4_lane_u8): Likewise.
+ 	(vld4_lane_u16): Likewise.
+ 	(vld4_lane_u32): Likewise.
+ 	(vld4_lane_u64): Likewise.
+ 	(vld4_lane_s8): Likewise.
+ 	(vld4_lane_s16): Likewise.
+ 	(vld4_lane_s32): Likewise.
+ 	(vld4_lane_s64): Likewise.
+ 	(vld4_lane_f16): Likewise.
+ 	(vld4_lane_f32): Likewise.
+ 	(vld4_lane_f64): Likewise.
+ 	(vld4_lane_p8): Likewise.
+ 	(vld4_lane_p16): Likewise.
+ 	(vld4_lane_p64): Likewise.
+ 	(vld4q_lane_u8): Likewise.
+ 	(vld4q_lane_u16): Likewise.
+ 	(vld4q_lane_u32): Likewise.
+ 	(vld4q_lane_u64): Likewise.
+ 	(vld4q_lane_s8): Likewise.
+ 	(vld4q_lane_s16): Likewise.
+ 	(vld4q_lane_s32): Likewise.
+ 	(vld4q_lane_s64): Likewise.
+ 	(vld4q_lane_f16): Likewise.
+ 	(vld4q_lane_f32): Likewise.
+ 	(vld4q_lane_f64): Likewise.
+ 	(vld4q_lane_p8): Likewise.
+ 	(vld4q_lane_p16): Likewise.
+ 	(vld4q_lane_p64): Likewise.
+ 	(vqtbl2_s8): Likewise.
+ 	(vqtbl2_u8): Likewise.
+ 	(vqtbl2_p8): Likewise.
+ 	(vqtbl2q_s8): Likewise.
+ 	(vqtbl2q_u8): Likewise.
+ 	(vqtbl2q_p8): Likewise.
+ 	(vqtbl3_s8): Likewise.
+ 	(vqtbl3_u8): Likewise.
+ 	(vqtbl3_p8): Likewise.
+ 	(vqtbl3q_s8): Likewise.
+ 	(vqtbl3q_u8): Likewise.
+ 	(vqtbl3q_p8): Likewise.
+ 	(vqtbl4_s8): Likewise.
+ 	(vqtbl4_u8): Likewise.
+ 	(vqtbl4_p8): Likewise.
+ 	(vqtbl4q_s8): Likewise.
+ 	(vqtbl4q_u8): Likewise.
+ 	(vqtbl4q_p8): Likewise.
+ 	(vqtbx2_s8): Likewise.
+ 	(vqtbx2_u8): Likewise.
+ 	(vqtbx2_p8): Likewise.
+ 	(vqtbx2q_s8): Likewise.
+ 	(vqtbx2q_u8): Likewise.
+ 	(vqtbx2q_p8): Likewise.
+ 	(vqtbx3_s8): Likewise.
+ 	(vqtbx3_u8): Likewise.
+ 	(vqtbx3_p8): Likewise.
+ 	(vqtbx3q_s8): Likewise.
+ 	(vqtbx3q_u8): Likewise.
+ 	(vqtbx3q_p8): Likewise.
+ 	(vqtbx4_s8): Likewise.
+ 	(vqtbx4_u8): Likewise.
+ 	(vqtbx4_p8): Likewise.
+ 	(vqtbx4q_s8): Likewise.
+ 	(vqtbx4q_u8): Likewise.
+ 	(vqtbx4q_p8): Likewise.
+ 	(vst1_s64_x2): Likewise.
+ 	(vst1_u64_x2): Likewise.
+ 	(vst1_f64_x2): Likewise.
+ 	(vst1_s8_x2): Likewise.
+ 	(vst1_p8_x2): Likewise.
+ 	(vst1_s16_x2): Likewise.
+ 	(vst1_p16_x2): Likewise.
+ 	(vst1_s32_x2): Likewise.
+ 	(vst1_u8_x2): Likewise.
+ 	(vst1_u16_x2): Likewise.
+ 	(vst1_u32_x2): Likewise.
+ 	(vst1_f16_x2): Likewise.
+ 	(vst1_f32_x2): Likewise.
+ 	(vst1_p64_x2): Likewise.
+ 	(vst1q_s8_x2): Likewise.
+ 	(vst1q_p8_x2): Likewise.
+ 	(vst1q_s16_x2): Likewise.
+ 	(vst1q_p16_x2): Likewise.
+ 	(vst1q_s32_x2): Likewise.
+ 	(vst1q_s64_x2): Likewise.
+ 	(vst1q_u8_x2): Likewise.
+ 	(vst1q_u16_x2): Likewise.
+ 	(vst1q_u32_x2): Likewise.
+ 	(vst1q_u64_x2): Likewise.
+ 	(vst1q_f16_x2): Likewise.
+ 	(vst1q_f32_x2): Likewise.
+ 	(vst1q_f64_x2): Likewise.
+ 	(vst1q_p64_x2): Likewise.
+ 	(vst1_s64_x3): Likewise.
+ 	(vst1_u64_x3): Likewise.
+ 	(vst1_f64_x3): Likewise.
+ 	(vst1_s8_x3): Likewise.
+ 	(vst1_p8_x3): Likewise.
+ 	(vst1_s16_x3): Likewise.
+ 	(vst1_p16_x3): Likewise.
+ 	(vst1_s32_x3): Likewise.
+ 	(vst1_u8_x3): Likewise.
+ 	(vst1_u16_x3): Likewise.
+ 	(vst1_u32_x3): Likewise.
+ 	(vst1_f16_x3): Likewise.
+ 	(vst1_f32_x3): Likewise.
+ 	(vst1_p64_x3): Likewise.
+ 	(vst1q_s8_x3): Likewise.
+ 	(vst1q_p8_x3): Likewise.
+ 	(vst1q_s16_x3): Likewise.
+ 	(vst1q_p16_x3): Likewise.
+ 	(vst1q_s32_x3): Likewise.
+ 	(vst1q_s64_x3): Likewise.
+ 	(vst1q_u8_x3): Likewise.
+ 	(vst1q_u16_x3): Likewise.
+ 	(vst1q_u32_x3): Likewise.
+ 	(vst1q_u64_x3): Likewise.
+ 	(vst1q_f16_x3): Likewise.
+ 	(vst1q_f32_x3): Likewise.
+ 	(vst1q_f64_x3): Likewise.
+ 	(vst1q_p64_x3): Likewise.
+ 	(vst1_s8_x4): Likewise.
+ 	(vst1q_s8_x4): Likewise.
+ 	(vst1_s16_x4): Likewise.
+ 	(vst1q_s16_x4): Likewise.
+ 	(vst1_s32_x4): Likewise.
+ 	(vst1q_s32_x4): Likewise.
+ 	(vst1_u8_x4): Likewise.
+ 	(vst1q_u8_x4): Likewise.
+ 	(vst1_u16_x4): Likewise.
+ 	(vst1q_u16_x4): Likewise.
+ 	(vst1_u32_x4): Likewise.
+ 	(vst1q_u32_x4): Likewise.
+ 	(vst1_f16_x4): Likewise.
+ 	(vst1q_f16_x4): Likewise.
+ 	(vst1_f32_x4): Likewise.
+ 	(vst1q_f32_x4): Likewise.
+ 	(vst1_p8_x4): Likewise.
+ 	(vst1q_p8_x4): Likewise.
+ 	(vst1_p16_x4): Likewise.
+ 	(vst1q_p16_x4): Likewise.
+ 	(vst1_s64_x4): Likewise.
+ 	(vst1_u64_x4): Likewise.
+ 	(vst1_p64_x4): Likewise.
+ 	(vst1q_s64_x4): Likewise.
+ 	(vst1q_u64_x4): Likewise.
+ 	(vst1q_p64_x4): Likewise.
+ 	(vst1_f64_x4): Likewise.
+ 	(vst1q_f64_x4): Likewise.
+ 	(vst2_s64): Likewise.
+ 	(vst2_u64): Likewise.
+ 	(vst2_f64): Likewise.
+ 	(vst2_s8): Likewise.
+ 	(vst2_p8): Likewise.
+ 	(vst2_s16): Likewise.
+ 	(vst2_p16): Likewise.
+ 	(vst2_s32): Likewise.
+ 	(vst2_u8): Likewise.
+ 	(vst2_u16): Likewise.
+ 	(vst2_u32): Likewise.
+ 	(vst2_f16): Likewise.
+ 	(vst2_f32): Likewise.
+ 	(vst2_p64): Likewise.
+ 	(vst2q_s8): Likewise.
+ 	(vst2q_p8): Likewise.
+ 	(vst2q_s16): Likewise.
+ 	(vst2q_p16): Likewise.
+ 	(vst2q_s32): Likewise.
+ 	(vst2q_s64): Likewise.
+ 	(vst2q_u8): Likewise.
+ 	(vst2q_u16): Likewise.
+ 	(vst2q_u32): Likewise.
+ 	(vst2q_u64): Likewise.
+ 	(vst2q_f16): Likewise.
+ 	(vst2q_f32): Likewise.
+ 	(vst2q_f64): Likewise.
+ 	(vst2q_p64): Likewise.
+ 	(vst3_s64): Likewise.
+ 	(vst3_u64): Likewise.
+ 	(vst3_f64): Likewise.
+ 	(vst3_s8): Likewise.
+ 	(vst3_p8): Likewise.
+ 	(vst3_s16): Likewise.
+ 	(vst3_p16): Likewise.
+ 	(vst3_s32): Likewise.
+ 	(vst3_u8): Likewise.
+ 	(vst3_u16): Likewise.
+ 	(vst3_u32): Likewise.
+ 	(vst3_f16): Likewise.
+ 	(vst3_f32): Likewise.
+ 	(vst3_p64): Likewise.
+ 	(vst3q_s8): Likewise.
+ 	(vst3q_p8): Likewise.
+ 	(vst3q_s16): Likewise.
+ 	(vst3q_p16): Likewise.
+ 	(vst3q_s32): Likewise.
+ 	(vst3q_s64): Likewise.
+ 	(vst3q_u8): Likewise.
+ 	(vst3q_u16): Likewise.
+ 	(vst3q_u32): Likewise.
+ 	(vst3q_u64): Likewise.
+ 	(vst3q_f16): Likewise.
+ 	(vst3q_f32): Likewise.
+ 	(vst3q_f64): Likewise.
+ 	(vst3q_p64): Likewise.
+ 	(vst4_s64): Likewise.
+ 	(vst4_u64): Likewise.
+ 	(vst4_f64): Likewise.
+ 	(vst4_s8): Likewise.
+ 	(vst4_p8): Likewise.
+ 	(vst4_s16): Likewise.
+ 	(vst4_p16): Likewise.
+ 	(vst4_s32): Likewise.
+ 	(vst4_u8): Likewise.
+ 	(vst4_u16): Likewise.
+ 	(vst4_u32): Likewise.
+ 	(vst4_f16): Likewise.
+ 	(vst4_f32): Likewise.
+ 	(vst4_p64): Likewise.
+ 	(vst4q_s8): Likewise.
+ 	(vst4q_p8): Likewise.
+ 	(vst4q_s16): Likewise.
+ 	(vst4q_p16): Likewise.
+ 	(vst4q_s32): Likewise.
+ 	(vst4q_s64): Likewise.
+ 	(vst4q_u8): Likewise.
+ 	(vst4q_u16): Likewise.
+ 	(vst4q_u32): Likewise.
+ 	(vst4q_u64): Likewise.
+ 	(vst4q_f16): Likewise.
+ 	(vst4q_f32): Likewise.
+ 	(vst4q_f64): Likewise.
+ 	(vst4q_p64): Likewise.
+ 	(vtbx4_s8): Likewise.
+ 	(vtbx4_u8): Likewise.
+ 	(vtbx4_p8): Likewise.
+ 	(vld1_bf16_x2): Likewise.
+ 	(vld1q_bf16_x2): Likewise.
+ 	(vld1_bf16_x3): Likewise.
+ 	(vld1q_bf16_x3): Likewise.
+ 	(vld1_bf16_x4): Likewise.
+ 	(vld1q_bf16_x4): Likewise.
+ 	(vld2_bf16): Likewise.
+ 	(vld2q_bf16): Likewise.
+ 	(vld2_dup_bf16): Likewise.
+ 	(vld2q_dup_bf16): Likewise.
+ 	(vld3_bf16): Likewise.
+ 	(vld3q_bf16): Likewise.
+ 	(vld3_dup_bf16): Likewise.
+ 	(vld3q_dup_bf16): Likewise.
+ 	(vld4_bf16): Likewise.
+ 	(vld4q_bf16): Likewise.
+ 	(vld4_dup_bf16): Likewise.
+ 	(vld4q_dup_bf16): Likewise.
+ 	(vst1_bf16_x2): Likewise.
+ 	(vst1q_bf16_x2): Likewise.
+ 	(vst1_bf16_x3): Likewise.
+ 	(vst1q_bf16_x3): Likewise.
+ 	(vst1_bf16_x4): Likewise.
+ 	(vst1q_bf16_x4): Likewise.
+ 	(vst2_bf16): Likewise.
+ 	(vst2q_bf16): Likewise.
+ 	(vst3_bf16): Likewise.
+ 	(vst3q_bf16): Likewise.
+ 	(vst4_bf16): Likewise.
+ 	(vst4q_bf16): Likewise.
+ 	(vld2_lane_bf16): Likewise.
+ 	(vld2q_lane_bf16): Likewise.
+ 	(vld3_lane_bf16): Likewise.
+ 	(vld3q_lane_bf16): Likewise.
+ 	(vld4_lane_bf16): Likewise.
+ 	(vld4q_lane_bf16): Likewise.
+ 	(vst2_lane_bf16): Likewise.
+ 	(vst2q_lane_bf16): Likewise.
+ 	(vst3_lane_bf16): Likewise.
+ 	(vst3q_lane_bf16): Likewise.
+ 	(vst4_lane_bf16): Likewise.
+ 	(vst4q_lane_bf16): Likewise.
+ 	* config/aarch64/geniterators.sh: Modify iterator regex to
+ 	match new vector-tuple modes.
+ 	* config/aarch64/iterators.md (insn_count): Extend mode
+ 	attribute with vector-tuple type information.
+ 	(nregs): Likewise.
+ 	(Vendreg): Likewise.
+ 	(Vetype): Likewise.
+ 	(Vtype): Likewise.
+ 	(VSTRUCT_2D): New mode iterator.
+ 	(VSTRUCT_2DNX): Likewise.
+ 	(VSTRUCT_2DX): Likewise.
+ 	(VSTRUCT_2Q): Likewise.
+ 	(VSTRUCT_2QD): Likewise.
+ 	(VSTRUCT_3D): Likewise.
+ 	(VSTRUCT_3DNX): Likewise.
+ 	(VSTRUCT_3DX): Likewise.
+ 	(VSTRUCT_3Q): Likewise.
+ 	(VSTRUCT_3QD): Likewise.
+ 	(VSTRUCT_4D): Likewise.
+ 	(VSTRUCT_4DNX): Likewise.
+ 	(VSTRUCT_4DX): Likewise.
+ 	(VSTRUCT_4Q): Likewise.
+ 	(VSTRUCT_4QD): Likewise.
+ 	(VSTRUCT_D): Likewise.
+ 	(VSTRUCT_Q): Likewise.
+ 	(VSTRUCT_QD): Likewise.
+ 	(VSTRUCT_ELT): New mode attribute.
+ 	(vstruct_elt): Likewise.
+ 	* genmodes.c (VECTOR_MODE): Add default prefix and order
+ 	parameters.
+ 	(VECTOR_MODE_WITH_PREFIX): Define.
+ 	(make_vector_mode): Add mode prefix and order parameters.
+ 
+ 2021-11-04  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* expmed.c (extract_bit_field_1): Ensure modes are tieable.
+ 
+ 2021-11-04  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* expr.c (emit_group_load_1): Remove historic workaround.
+ 
+ 2021-11-04  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c (aarch64_init_simd_builtins):
+ 	Factor out main loop to...
+ 	(aarch64_init_simd_builtin_functions): This new function.
+ 	(register_tuple_type): Define.
+ 	(aarch64_scalar_builtin_type_p): Define.
+ 	(handle_arm_neon_h): Define.
+ 	* config/aarch64/aarch64-c.c (aarch64_pragma_aarch64): Handle
+ 	pragma for arm_neon.h.
+ 	* config/aarch64/aarch64-protos.h (aarch64_advsimd_struct_mode_p):
+ 	Declare.
+ 	(handle_arm_neon_h): Likewise.
+ 	* config/aarch64/aarch64.c (aarch64_advsimd_struct_mode_p):
+ 	Remove static modifier.
+ 	* config/aarch64/arm_neon.h (target): Remove Neon vector
+ 	structure type definitions.
+ 
+ 2021-11-04  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/102943
+ 	* gimple-range-path.cc (path_range_query::range_on_path_entry):
+ 	Prefer range_of_expr unless there are no statements in the BB.
+ 
+ 2021-11-04  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/102943
+ 	* tree-ssa-threadbackward.c (back_threader::find_paths_to_names):
+ 	Avoid duplicate calculation of paths.
+ 
+ 2021-11-04  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/102943
+ 	* gimple-range-path.cc (path_range_query::compute_phi_relations):
+ 	Only compute relations for SSA names in the import list.
+ 	(path_range_query::compute_outgoing_relations): Same.
+ 	* gimple-range-path.h (path_range_query::import_p): New.
+ 
+ 2021-11-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/103075
+ 	* simplify-rtx.c (exact_int_to_float_conversion_p): Return
+ 	false for a VOIDmode operand.
+ 
+ 2021-11-04  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_vector_costs): Make member
+ 	variables private and add "m_" to their names.  Remove is_loop.
+ 	(aarch64_record_potential_advsimd_unrolling): Replace with...
+ 	(aarch64_vector_costs::record_potential_advsimd_unrolling): ...this.
+ 	(aarch64_analyze_loop_vinfo): Replace with...
+ 	(aarch64_vector_costs::analyze_loop_vinfo): ...this.
+ 	Move initialization of (m_)vec_flags to add_stmt_cost.
+ 	(aarch64_analyze_bb_vinfo): Delete.
+ 	(aarch64_count_ops): Replace with...
+ 	(aarch64_vector_costs::count_ops): ...this.
+ 	(aarch64_vector_costs::add_stmt_cost): Set m_vec_flags,
+ 	using m_costing_for_scalar to test whether we're costing
+ 	scalar or vector code.
+ 	(aarch64_adjust_body_cost_sve): Replace with...
+ 	(aarch64_vector_costs::adjust_body_cost_sve): ...this.
+ 	(aarch64_adjust_body_cost): Replace with...
+ 	(aarch64_vector_costs::adjust_body_cost): ...this.
+ 	(aarch64_vector_costs::finish_cost): Use m_vinfo instead of is_loop.
+ 
+ 2021-11-04  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* target.def (targetm.vectorize.init_cost): Replace with...
+ 	(targetm.vectorize.create_costs): ...this.
+ 	(targetm.vectorize.add_stmt_cost): Delete.
+ 	(targetm.vectorize.finish_cost): Likewise.
+ 	(targetm.vectorize.destroy_cost_data): Likewise.
+ 	* doc/tm.texi.in (TARGET_VECTORIZE_INIT_COST): Replace with...
+ 	(TARGET_VECTORIZE_CREATE_COSTS): ...this.
+ 	(TARGET_VECTORIZE_ADD_STMT_COST): Delete.
+ 	(TARGET_VECTORIZE_FINISH_COST): Likewise.
+ 	(TARGET_VECTORIZE_DESTROY_COST_DATA): Likewise.
+ 	* doc/tm.texi: Regenerate.
+ 	* tree-vectorizer.h (vec_info::vec_info): Remove target_cost_data
+ 	parameter.
+ 	(vec_info::target_cost_data): Change from a void * to a vector_costs *.
+ 	(vector_costs): New class.
+ 	(init_cost): Take a vec_info and return a vector_costs.
+ 	(dump_stmt_cost): Remove data parameter.
+ 	(add_stmt_cost): Replace vinfo and data parameters with a vector_costs.
+ 	(add_stmt_costs): Likewise.
+ 	(finish_cost): Replace data parameter with a vector_costs.
+ 	(destroy_cost_data): Delete.
+ 	* tree-vectorizer.c (dump_stmt_cost): Remove data argument and
+ 	don't print it.
+ 	(vec_info::vec_info): Remove the target_cost_data parameter and
+ 	initialize the member variable to null instead.
+ 	(vec_info::~vec_info): Delete target_cost_data instead of calling
+ 	destroy_cost_data.
+ 	(vector_costs::add_stmt_cost): New function.
+ 	(vector_costs::finish_cost): Likewise.
+ 	(vector_costs::record_stmt_cost): Likewise.
+ 	(vector_costs::adjust_cost_for_freq): Likewise.
+ 	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Update
+ 	call to vec_info::vec_info.
+ 	(vect_compute_single_scalar_iteration_cost): Update after above
+ 	changes to costing interface.
+ 	(vect_analyze_loop_operations): Likewise.
+ 	(vect_estimate_min_profitable_iters): Likewise.
+ 	(vect_analyze_loop_2): Initialize LOOP_VINFO_TARGET_COST_DATA
+ 	at the start_over point, where it needs to be recreated after
+ 	trying without slp.  Update retry code accordingly.
+ 	* tree-vect-slp.c (_bb_vec_info::_bb_vec_info): Update call
+ 	to vec_info::vec_info.
+ 	(vect_slp_analyze_operation): Update after above changes to costing
+ 	interface.
+ 	(vect_bb_vectorization_profitable_p): Likewise.
+ 	* targhooks.h (default_init_cost): Replace with...
+ 	(default_vectorize_create_costs): ...this.
+ 	(default_add_stmt_cost): Delete.
+ 	(default_finish_cost, default_destroy_cost_data): Likewise.
+ 	* targhooks.c (default_init_cost): Replace with...
+ 	(default_vectorize_create_costs): ...this.
+ 	(default_add_stmt_cost): Delete, moving logic to vector_costs instead.
+ 	(default_finish_cost, default_destroy_cost_data): Delete.
+ 	* config/aarch64/aarch64.c (aarch64_vector_costs): Inherit from
+ 	vector_costs.  Add a constructor.
+ 	(aarch64_init_cost): Replace with...
+ 	(aarch64_vectorize_create_costs): ...this.
+ 	(aarch64_add_stmt_cost): Replace with...
+ 	(aarch64_vector_costs::add_stmt_cost): ...this.  Use record_stmt_cost
+ 	to adjust the cost for inner loops.
+ 	(aarch64_finish_cost): Replace with...
+ 	(aarch64_vector_costs::finish_cost): ...this.
+ 	(aarch64_destroy_cost_data): Delete.
+ 	(TARGET_VECTORIZE_INIT_COST): Replace with...
+ 	(TARGET_VECTORIZE_CREATE_COSTS): ...this.
+ 	(TARGET_VECTORIZE_ADD_STMT_COST): Delete.
+ 	(TARGET_VECTORIZE_FINISH_COST): Likewise.
+ 	(TARGET_VECTORIZE_DESTROY_COST_DATA): Likewise.
+ 	* config/i386/i386.c (ix86_vector_costs): New structure.
+ 	(ix86_init_cost): Replace with...
+ 	(ix86_vectorize_create_costs): ...this.
+ 	(ix86_add_stmt_cost): Replace with...
+ 	(ix86_vector_costs::add_stmt_cost): ...this.  Use adjust_cost_for_freq
+ 	to adjust the cost for inner loops.
+ 	(ix86_finish_cost, ix86_destroy_cost_data): Delete.
+ 	(TARGET_VECTORIZE_INIT_COST): Replace with...
+ 	(TARGET_VECTORIZE_CREATE_COSTS): ...this.
+ 	(TARGET_VECTORIZE_ADD_STMT_COST): Delete.
+ 	(TARGET_VECTORIZE_FINISH_COST): Likewise.
+ 	(TARGET_VECTORIZE_DESTROY_COST_DATA): Likewise.
+ 	* config/rs6000/rs6000.c (TARGET_VECTORIZE_INIT_COST): Replace with...
+ 	(TARGET_VECTORIZE_CREATE_COSTS): ...this.
+ 	(TARGET_VECTORIZE_ADD_STMT_COST): Delete.
+ 	(TARGET_VECTORIZE_FINISH_COST): Likewise.
+ 	(TARGET_VECTORIZE_DESTROY_COST_DATA): Likewise.
+ 	(rs6000_cost_data): Inherit from vector_costs.
+ 	Add a constructor.  Drop loop_info, cost and costing_for_scalar
+ 	in favor of the corresponding vector_costs member variables.
+ 	Add "m_" to the names of the remaining member variables and
+ 	initialize them.
+ 	(rs6000_density_test): Replace with...
+ 	(rs6000_cost_data::density_test): ...this.
+ 	(rs6000_init_cost): Replace with...
+ 	(rs6000_vectorize_create_costs): ...this.
+ 	(rs6000_update_target_cost_per_stmt): Replace with...
+ 	(rs6000_cost_data::update_target_cost_per_stmt): ...this.
+ 	(rs6000_add_stmt_cost): Replace with...
+ 	(rs6000_cost_data::add_stmt_cost): ...this.  Use adjust_cost_for_freq
+ 	to adjust the cost for inner loops.
+ 	(rs6000_adjust_vect_cost_per_loop): Replace with...
+ 	(rs6000_cost_data::adjust_vect_cost_per_loop): ...this.
+ 	(rs6000_finish_cost): Replace with...
+ 	(rs6000_cost_data::finish_cost): ...this.  Group loop code
+ 	into a single if statement and pass the loop_vinfo down to
+ 	subroutines.
+ 	(rs6000_destroy_cost_data): Delete.
+ 
+ 2021-11-04  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/103062
+ 	PR tree-optimization/103062
+ 	* value-pointer-equiv.cc (ssa_equiv_stack::ssa_equiv_stack):
+ 	Increase size of allocation by 1.
+ 	(ssa_equiv_stack::push_replacement): Grow as needed.
+ 	(ssa_equiv_stack::get_replacement): Same.
+ 	(pointer_equiv_analyzer::pointer_equiv_analyzer): Same.
+ 	(pointer_equiv_analyzer::~pointer_equiv_analyzer): Remove delete.
+ 	(pointer_equiv_analyzer::set_global_equiv): Grow as needed.
+ 	(pointer_equiv_analyzer::get_equiv): Same.
+ 	(pointer_equiv_analyzer::get_equiv_expr): Remove const.
+ 	* value-pointer-equiv.h (class pointer_equiv_analyzer): Remove
+ 	const markers.  Use auto_vec instead of tree *.
+ 
+ 2021-11-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-sccvn.c (vn_nary_op_insert_into): Remove always
+ 	true parameter and inline valueization.
+ 	(vn_nary_op_lookup_1): Inline valueization from ...
+ 	(vn_nary_op_compute_hash): ... here and remove it here.
+ 	* tree-ssa-pre.c (phi_translate_1): Do not valueize
+ 	before vn_nary_lookup_pieces.
+ 	(get_representative_for): Mark created SSA representatives
+ 	as visited.
+ 
+ 2021-11-04  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* simplify-rtx.c (simplify_context::simplify_gen_vec_select): Assert
+ 	that the operand has a vector mode.  Use subreg_lowpart_offset
+ 	to test whether an index corresponds to the low part.
+ 
+ 2021-11-04  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* read-rtl.c: Remove dead !GENERATOR_FILE block.
+ 	* read-rtl-function.c (function_reader::consolidate_singletons):
+ 	Generate canonical CONST_VECTORs.
+ 
+ 2021-11-04  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/101989
+ 	* config/i386/predicates.md (reg_or_notreg_operand): Rename to ..
+ 	(regmem_or_bitnot_regmem_operand): .. and extend to handle
+ 	memory_operand.
+ 	* config/i386/sse.md (*<avx512>_vpternlog<mode>_1): Force_reg
+ 	the operands which are required to be register_operand.
+ 	(*<avx512>_vpternlog<mode>_2): Ditto.
+ 	(*<avx512>_vpternlog<mode>_3): Ditto.
+ 	(*<avx512>_vternlog<mode>_all): Disallow embeded broadcast for
+ 	vector HFmodes since it's not a real AVX512FP16 instruction.
+ 
+ 2021-11-04  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102464
+ 	* match.pd: simplify (trunc)copysign((extend)a, (extend)b) to
+ 	.COPYSIGN (a,b) when a and b are same type as the truncation
+ 	type and has less precision than extend type.
+ 
+ 2021-11-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	* doc/generic.texi: Update TARGET_MEM_REF and MEM_REF
+ 	documentation.
+ 
+ 2021-11-04  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/sse.md (VI2_AVX512VNNIBW): New mode iterator.
+ 	(VI1_AVX512VNNI): Likewise.
+ 	(SDOT_VPDP_SUF): New mode_attr.
+ 	(VI1SI): Likewise.
+ 	(vi1si): Likewise.
+ 	(sdot_prod<mode>): Use VI2_AVX512F iterator, expand to
+ 	vpdpwssd when VNNI targets available.
+ 	(usdot_prod<mode>): New expander for vector QImode.
+ 
+ 2021-11-04  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/amxtileintrin.h (_tile_loadd_internal): Add
+ 	parentheses to base and stride.
+ 	(_tile_stream_loadd_internal): Likewise.
+ 	(_tile_stored_internal): Likewise.
+ 
+ 2021-11-03  Maciej W. Rozycki  <macro@embecosm.com>
+ 
+ 	* config/riscv/riscv.c (riscv_class_max_nregs): Swap the
+ 	arguments to `reg_class_subset_p'.
+ 
+ 2021-11-03  Joseph Myers  <joseph@codesourcery.com>
+ 
+ 	PR c/103031
+ 	* fold-const.c (fold_init): New function.
+ 	* fold-const.h (fold_init): New prototype.
+ 
+ 2021-11-03  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* params.opt (param_vrp2_mode): Make ranger the default for VRP2.
+ 
+ 2021-11-03  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-fold.cc (fold_using_range::range_of_phi): Don't import
+ 	a range from edge if arg == phidef.
+ 
+ 2021-11-03  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-fold.cc (fold_using_range::range_of_builtin_call): Test
+ 	for constant before any other processing.
+ 
+ 2021-11-03  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* flag-types.h (RANGER_DEBUG_ALL): Fix values.
+ 
+ 2021-11-03  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range.cc (gimple_ranger::gimple_ranger): Initialize current_bb.
+ 	(gimple_ranger::range_of_expr): Pick up range_on_entry when there is
+ 	no explcit context and current_bb is set.
+ 	(gimple_ranger::fold_stmt): New.
+ 	* gimple-range.h (current_bb, fold_stmt): New.
+ 	* tree-vrp.c (rvrp_folder::fold_stmt): Call ranger's fold_stmt.
+ 
+ 2021-11-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102970
+ 	* tree-ssa-pre.c (phi_translate_1): Drop clique and base
+ 	when translating a MEM_REF over a backedge.
+ 
+ 2021-11-03  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	* config/aarch64/aarch64-cores.def (AARCH64_CORE): New Ampere-1	core.
+ 	* config/aarch64/aarch64-tune.md: Regenerate.
+ 	* config/aarch64/aarch64-cost-tables.h: Add extra costs for Ampere-1.
+ 	* config/aarch64/aarch64.c: Add tuning structures for Ampere-1.
+ 	* doc/invoke.texi: Add documentation for Ampere-1 core.
+ 
+ 2021-11-03  Wilco Dijkstra  <wdijkstr@arm.com>
+ 
+ 	* config/aarch64/aarch64.md (movsi): Add alternative for GOT accesses.
+ 	(movdi): Likewise.
+ 	(ldr_got_small_<mode>): Remove pattern.
+ 	(ldr_got_small_sidi): Likewise.
+ 	* config/aarch64/aarch64.c (aarch64_load_symref_appropriately): Keep
+ 	GOT accesses as moves.
+ 	(aarch64_print_operand): Correctly print got_lo12 in L specifier.
+ 	(aarch64_mov_operand_p): Make GOT accesses valid move operands.
+ 	* config/aarch64/constraints.md: Add new constraint Usw for GOT access.
+ 
+ 2021-11-03  Martin Liska  <mliska@suse.cz>
+ 
+ 	* gcov.c (read_line): Remove dead variable.
+ 
+ 2021-11-03  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR bootstrap/102828
+ 	* ipa-fnsummary.c (edge_predicate_pool): Rename predicate class to ipa_predicate.
+ 	(ipa_fn_summary::account_size_time): Likewise.
+ 	(edge_set_predicate): Likewise.
+ 	(set_hint_predicate): Likewise.
+ 	(add_freqcounting_predicate): Likewise.
+ 	(evaluate_conditions_for_known_args): Likewise.
+ 	(evaluate_properties_for_edge): Likewise.
+ 	(remap_freqcounting_preds_after_dup): Likewise.
+ 	(ipa_fn_summary_t::duplicate): Likewise.
+ 	(set_cond_stmt_execution_predicate): Likewise.
+ 	(set_switch_stmt_execution_predicate): Likewise.
+ 	(compute_bb_predicates): Likewise.
+ 	(will_be_nonconstant_expr_predicate): Likewise.
+ 	(will_be_nonconstant_predicate): Likewise.
+ 	(phi_result_unknown_predicate): Likewise.
+ 	(predicate_for_phi_result): Likewise.
+ 	(analyze_function_body): Likewise.
+ 	(compute_fn_summary): Likewise.
+ 	(summarize_calls_size_and_time): Likewise.
+ 	(estimate_calls_size_and_time): Likewise.
+ 	(ipa_call_context::estimate_size_and_time): Likewise.
+ 	(remap_edge_summaries): Likewise.
+ 	(remap_freqcounting_predicate): Likewise.
+ 	(ipa_merge_fn_summary_after_inlining): Likewise.
+ 	(ipa_update_overall_fn_summary): Likewise.
+ 	(read_ipa_call_summary): Likewise.
+ 	(inline_read_section): Likewise.
+ 	* ipa-fnsummary.h (struct ipa_freqcounting_predicate): Likewise.
+ 	* ipa-predicate.c (predicate::add_clause): Likewise.
+ 	(ipa_predicate::add_clause): Likewise.
+ 	(predicate::or_with): Likewise.
+ 	(ipa_predicate::or_with): Likewise.
+ 	(predicate::evaluate): Likewise.
+ 	(ipa_predicate::evaluate): Likewise.
+ 	(predicate::probability): Likewise.
+ 	(ipa_predicate::probability): Likewise.
+ 	(dump_condition): Likewise.
+ 	(dump_clause): Likewise.
+ 	(predicate::dump): Likewise.
+ 	(ipa_predicate::dump): Likewise.
+ 	(predicate::debug): Likewise.
+ 	(ipa_predicate::debug): Likewise.
+ 	(predicate::remap_after_duplication): Likewise.
+ 	(ipa_predicate::remap_after_duplication): Likewise.
+ 	(predicate::remap_after_inlining): Likewise.
+ 	(ipa_predicate::remap_after_inlining): Likewise.
+ 	(predicate::stream_in): Likewise.
+ 	(ipa_predicate::stream_in): Likewise.
+ 	(predicate::stream_out): Likewise.
+ 	(ipa_predicate::stream_out): Likewise.
+ 	(add_condition): Likewise.
+ 	* ipa-predicate.h (class predicate): Likewise.
+ 	(class ipa_predicate): Likewise.
+ 	(add_condition): Likewise.
+ 
+ 2021-11-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	* bitmap.h (bitmap_bit_p): Change the return type to bool.
+ 	* bitmap.c (bitmap_bit_p): Likewise.
+ 	* sbitmap.h (bitmap_bit_p): Likewise.
+ 	(bitmap_set_bit): Return whether the bit changed.
+ 	(bitmap_clear_bit): Likewise.
+ 	* tree-ssa.c (verify_vssa): Make use of the changed state
+ 	from bitmap_set_bit.
+ 
+ 2021-11-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/103033
+ 	* internal-fn.c (expand_DEFERRED_INIT): Elide the
+ 	native_interpret_expr path in favor of folding the
+ 	VIEW_CONVERT_EXPR generated when punning the RHS.
+ 
+ 2021-11-03  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_loop_unroll_adjust): In case of early
+ 	exit free bbs.
+ 
+ 2021-11-03  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/103040
+ 	* ipa-modref.c (callee_to_caller_flags): New function.
+ 	(modref_eaf_analysis::analyze_ssa_name): Use it.
+ 	(ipa_merge_modref_summary_after_inlining): Fix whitespace.
+ 
+ 2021-11-02  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (modref_eaf_analysis::analyze_ssa_name): Revert
+ 	accidental commit.
+ 
+ 2021-11-02  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.md (<any_rotate>ti3): Provide expansion for
+ 	rotations by non-constant amounts.
+ 
+ 2021-11-02  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c: Fix anonymous namespace placement.
+ 	(class modref_eaf_analysis): New class.
+ 	(analyze_ssa_name_flags): Turn to ...
+ 	(modref_eaf_analysis::analyze_ssa_name): ... this one.
+ 	(merge_call_lhs_flags): Turn to ...
+ 	(modref_eaf_analysis::merge_call_lhs_flags): .. this one
+ 	(modref_eaf_analysis::merge_with_ssa_name): New member function.
+ 	(record_escape_points): Turn to ...
+ 	(modref_eaf_analysis::record_escape_points): ... this one.
+ 	(analyze_parms): Updat
+ 	(ipa_merge_modref_summary_after_inlining): Move to the end of file.
+ 
+ 2021-11-02  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* gimple.c (gimple_call_static_chain_flags): New function.
+ 	* gimple.h (gimple_call_static_chain_flags): Declare
+ 	* ipa-modref.c (modref_summary::modref_summary): Initialize
+ 	static_chain_flags.
+ 	(modref_summary_lto::modref_summary_lto): Likewise.
+ 	(modref_summary::useful_p): Test static_chain_flags.
+ 	(modref_summary_lto::useful_p): Likewise.
+ 	(struct modref_summary_lto): Add static_chain_flags.
+ 	(modref_summary::dump): Dump static_chain_flags.
+ 	(modref_summary_lto::dump): Likewise.
+ 	(struct escape_point): Add static_cahin_arg.
+ 	(analyze_ssa_name_flags): Use gimple_call_static_chain_flags.
+ 	(analyze_parms): Handle static chains.
+ 	(modref_summaries::duplicate): Duplicate static_chain_flags.
+ 	(modref_summaries_lto::duplicate): Likewise.
+ 	(modref_write): Stream static_chain_flags.
+ 	(read_section): Likewise.
+ 	(modref_merge_call_site_flags): Handle static_chain_flags.
+ 	* ipa-modref.h (struct modref_summary): Add static_chain_flags.
+ 	* tree-ssa-structalias.c (handle_rhs_call): Use
+ 	gimple_static_chain_flags.
+ 
+ 2021-11-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/103029
+ 	* tree-vect-loop-manip.c (vect_loop_versioning): Ensure
+ 	the PHI nodes in the loop maintain their original operand
+ 	order.
+ 
+ 2021-11-02  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* tree-core.h (EAF_NOT_RETURNED_DIRECTLY): New flag.
+ 	(EAF_NOREAD): Renumber.
+ 	* ipa-modref.c (dump_eaf_flags): Dump EAF_NOT_RETURNED_DIRECTLY.
+ 	(remove_useless_eaf_flags): Handle EAF_NOT_RETURNED_DIRECTLY
+ 	(deref_flags): Likewise.
+ 	(modref_lattice::init): Likewise.
+ 	(modref_lattice::merge): Likewise.
+ 	(merge_call_lhs_flags): Likewise.
+ 	(analyze_ssa_name_flags): Likewise.
+ 	(modref_merge_call_site_flags): Likewise.
+ 	* tree-ssa-structalias.c (handle_call_arg): Likewise.
+ 
+ 2021-11-02  Maciej W. Rozycki  <macro@embecosm.com>
+ 
+ 	* config/riscv/riscv.c (riscv_rtx_costs): Correct a CONST_INT_P
+ 	check and remove an unused local variable with shNadd/shNadd.uw
+ 	pattern handling.
+ 
+ 2021-11-02  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/103007
+ 	* tree-vect-slp-patterns.c (complex_fms_pattern::matches): Add elem
+ 	check.
+ 
+ 2021-11-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/103038
+ 	* fold-const.c (native_interpret_expr): Handle OFFSET_TYPE.
+ 	(can_native_interpret_type_p): Likewise.
+ 	* internal-fn.c (expand_DEFERRED_INIT): View-convert the
+ 	RHS if the LHS is an SSA name.
+ 
+ 2021-11-02  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* langhooks.h (lang_hooks_for_types::simulate_record_decl): New hook.
+ 	* langhooks-def.h (lhd_simulate_record_decl): Declare.
+ 	(LANG_HOOKS_SIMULATE_RECORD_DECL): Define.
+ 	(LANG_HOOKS_FOR_TYPES_INITIALIZER): Include it.
+ 	* langhooks.c (lhd_simulate_record_decl): New function.
+ 
+ 2021-11-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/103020
+ 	* config/i386/i386.c (ix86_vector_mode_supported_p): Reject vector
+ 	modes with TImode inner mode if 32-bit.
+ 
+ 2021-11-02  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* doc/sourcebuild.texi (vect_slp_v4qi_store_unalign,
+ 	vect_slp_v2hi_store_unalign, vect_slp_v4hi_store_unalign,
+ 	vect_slp_v4si_store_unalign): Document efficient target.
+ 	(vect_slp_v4qi_store_unalign_1, vect_slp_v8qi_store_unalign_1,
+ 	vect_slp_v16qi_store_unalign_1): Ditto.
+ 	(vect_slp_v2hi_store_align,vect_slp_v2qi_store_align,
+ 	vect_slp_v2si_store_align, vect_slp_v4qi_store_align): Ditto.
+ 	(struct_4char_block_move, struct_8char_block_move,
+ 	struct_16char_block_move): Ditto.
+ 
+ 2021-11-02  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/102986
+ 	* config/i386/i386-expand.c (ix86_expand_v1ti_to_ti,
+ 	ix86_expand_ti_to_v1ti): New helper functions.
+ 	(ix86_expand_v1ti_shift): Check if the amount operand is an
+ 	integer constant, and expand as a TImode shift if it isn't.
+ 	(ix86_expand_v1ti_rotate): Check if the amount operand is an
+ 	integer constant, and expand as a TImode rotate if it isn't.
+ 	(ix86_expand_v1ti_ashiftrt): New function to expand arithmetic
+ 	right shifts of V1TImode quantities.
+ 	* config/i386/i386-protos.h (ix86_expand_v1ti_ashift): Prototype.
+ 	* config/i386/sse.md (ashlv1ti3, lshrv1ti3): Change constraints
+ 	to QImode general_operand, and let the helper functions lower
+ 	shifts by non-constant operands, as TImode shifts.  Make
+ 	conditional on TARGET_64BIT.
+ 	(ashrv1ti3): New expander calling ix86_expand_v1ti_ashiftrt.
+ 	(rotlv1ti3, rotrv1ti3): Change shift operand to QImode.
+ 	Make conditional on TARGET_64BIT.
+ 
+ 2021-11-02  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
+ 
+ 	* config/s390/s390.md ("*cc_to_int", "tabort", "*tabort_1",
+ 	"*tabort_1_plus"): Remove operands non-null check.
+ 
+ 2021-11-01  Martin Liska  <mliska@suse.cz>
+ 
+ 	* opt-functions.awk: Add new sanity checking.
+ 	* optc-gen.awk: Add new argument to integer_range_info.
+ 	* params.opt: Update 2 params which have negative IntegerRange.
+ 
+ 2021-11-01  qing zhao  <qing.zhao@oracle.com>
+ 
+ 	* gimplify.c (gimplify_decl_expr): Do not add call to
+ 	__builtin_clear_padding when a variable is a gimple register
+ 	or it might not have padding.
+ 	(gimplify_init_constructor): Likewise.
+ 
+ 2021-11-01  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/arm/aarch-common-protos.h (struct vector_cost_table): Add
+ 	movi, dup and extract costing fields.
+ 	* config/aarch64/aarch64-cost-tables.h (qdf24xx_extra_costs,
+ 	thunderx_extra_costs, thunderx2t99_extra_costs,
+ 	thunderx3t110_extra_costs, tsv110_extra_costs, a64fx_extra_costs): Use
+ 	them.
+ 	* config/arm/aarch-cost-tables.h (generic_extra_costs,
+ 	cortexa53_extra_costs, cortexa57_extra_costs, cortexa76_extra_costs,
+ 	exynosm1_extra_costs, xgene1_extra_costs): Likewise
+ 	* config/aarch64/aarch64-simd.md (aarch64_simd_dup<mode>): Add r->w dup.
+ 	* config/aarch64/aarch64.c (aarch64_rtx_costs): Add extra costs.
+ 
+ 2021-11-01  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* cse.c (add_to_set): New.
+ 	(find_sets_in_insn): Register constants in sets.
+ 	(canonicalize_insn): Use auto_vec instead.
+ 	(cse_insn): Try materializing using vec_dup.
+ 	* rtl.h (simplify_context::simplify_gen_vec_select,
+ 	simplify_gen_vec_select): New.
+ 	* simplify-rtx.c (simplify_context::simplify_gen_vec_select): New.
+ 
+ 2021-11-01  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* common.opt (fdiagnostics-escape-format=): New.
+ 	(diagnostics_escape_format): New enum.
+ 	(DIAGNOSTICS_ESCAPE_FORMAT_UNICODE): New enum value.
+ 	(DIAGNOSTICS_ESCAPE_FORMAT_BYTES): Likewise.
+ 	* diagnostic-format-json.cc (json_end_diagnostic): Add
+ 	"escape-source" attribute.
+ 	* diagnostic-show-locus.c
+ 	(exploc_with_display_col::exploc_with_display_col): Replace
+ 	"tabstop" param with a cpp_char_column_policy and add an "aspect"
+ 	param.  Use these to compute m_display_col accordingly.
+ 	(struct char_display_policy): New struct.
+ 	(layout::m_policy): New field.
+ 	(layout::m_escape_on_output): New field.
+ 	(def_policy): New function.
+ 	(make_range): Update for changes to exploc_with_display_col ctor.
+ 	(default_print_decoded_ch): New.
+ 	(width_per_escaped_byte): New.
+ 	(escape_as_bytes_width): New.
+ 	(escape_as_bytes_print): New.
+ 	(escape_as_unicode_width): New.
+ 	(escape_as_unicode_print): New.
+ 	(make_policy): New.
+ 	(layout::layout): Initialize new fields.  Update m_exploc ctor
+ 	call for above change to ctor.
+ 	(layout::maybe_add_location_range): Update for changes to
+ 	exploc_with_display_col ctor.
+ 	(layout::calculate_x_offset_display): Update for change to
+ 	cpp_display_width.
+ 	(layout::print_source_line): Pass policy
+ 	to cpp_display_width_computation. Capture cpp_decoded_char when
+ 	calling process_next_codepoint.  Move printing of source code to
+ 	m_policy.m_print_cb.
+ 	(line_label::line_label): Pass in policy rather than context.
+ 	(layout::print_any_labels): Update for change to line_label ctor.
+ 	(get_affected_range): Pass in policy rather than context, updating
+ 	calls to location_compute_display_column accordingly.
+ 	(get_printed_columns): Likewise, also for cpp_display_width.
+ 	(correction::correction): Pass in policy rather than tabstop.
+ 	(correction::compute_display_cols): Pass m_policy rather than
+ 	m_tabstop to cpp_display_width.
+ 	(correction::m_tabstop): Replace with...
+ 	(correction::m_policy): ...this.
+ 	(line_corrections::line_corrections): Pass in policy rather than
+ 	context.
+ 	(line_corrections::m_context): Replace with...
+ 	(line_corrections::m_policy): ...this.
+ 	(line_corrections::add_hint): Update to use m_policy rather than
+ 	m_context.
+ 	(line_corrections::add_hint): Likewise.
+ 	(layout::print_trailing_fixits): Likewise.
+ 	(selftest::test_display_widths): New.
+ 	(selftest::test_layout_x_offset_display_utf8): Update to use
+ 	policy rather than tabstop.
+ 	(selftest::test_one_liner_labels_utf8): Add test of escaping
+ 	source lines.
+ 	(selftest::test_diagnostic_show_locus_one_liner_utf8): Update to
+ 	use policy rather than tabstop.
+ 	(selftest::test_overlapped_fixit_printing): Likewise.
+ 	(selftest::test_overlapped_fixit_printing_utf8): Likewise.
+ 	(selftest::test_overlapped_fixit_printing_2): Likewise.
+ 	(selftest::test_tab_expansion): Likewise.
+ 	(selftest::test_escaping_bytes_1): New.
+ 	(selftest::test_escaping_bytes_2): New.
+ 	(selftest::diagnostic_show_locus_c_tests): Call the new tests.
+ 	* diagnostic.c (diagnostic_initialize): Initialize
+ 	context->escape_format.
+ 	(convert_column_unit): Update to use default character width policy.
+ 	(selftest::test_diagnostic_get_location_text): Likewise.
+ 	* diagnostic.h (enum diagnostics_escape_format): New enum.
+ 	(diagnostic_context::escape_format): New field.
+ 	* doc/invoke.texi (-fdiagnostics-escape-format=): New option.
+ 	(-fdiagnostics-format=): Add "escape-source" attribute to examples
+ 	of JSON output, and document it.
+ 	* input.c (location_compute_display_column): Pass in "policy"
+ 	rather than "tabstop", passing to
+ 	cpp_byte_column_to_display_column.
+ 	(selftest::test_cpp_utf8): Update to use cpp_char_column_policy.
+ 	* input.h (class cpp_char_column_policy): New forward decl.
+ 	(location_compute_display_column): Pass in "policy" rather than
+ 	"tabstop".
+ 	* opts.c (common_handle_option): Handle
+ 	OPT_fdiagnostics_escape_format_.
+ 	* selftest.c (temp_source_file::temp_source_file): New ctor
+ 	overload taking a size_t.
+ 	* selftest.h (temp_source_file::temp_source_file): Likewise.
+ 
+ 2021-11-01  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* dbgcnt.def: Add debug counter for back_thread[12] and
+ 	back_threadfull[12].
+ 	* passes.def: Pass "first" argument to each back threading pass.
+ 	* tree-ssa-threadbackward.c (back_threader::back_threader): Add
+ 	first argument.
+ 	(back_threader::debug_counter): New.
+ 	(back_threader::maybe_register_path): Call debug_counter.
+ 
+ 2021-11-01  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (BT_NONE): New.
+ 	(BT_SPEED): New.
+ 	(BT_RESOLVE): New.
+ 	(back_threader::back_threader): Add flags.
+ 	Move loop initialization here.
+ 	(back_threader::~back_threader): New.
+ 	(back_threader::find_taken_edge_switch): Change solver and ranger
+ 	to pointers.
+ 	(back_threader::find_taken_edge_cond): Same.
+ 	(back_threader::find_paths_to_names): Same.
+ 	(back_threader::find_paths): Same.
+ 	(back_threader::dump): Same.
+ 	(try_thread_blocks): Merge into thread_blocks.
+ 	(back_threader::thread_blocks): New.
+ 	(do_early_thread_jumps): Merge into thread_blocks.
+ 	(do_thread_jumps): Merge into thread_blocks.
+ 	(back_threader::thread_through_all_blocks): Remove.
+ 
+ 2021-11-01  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/103003
+ 	* value-relation.cc (dom_oracle::register_relation): If the 2
+ 	ssa names are the same, don't register any relation.
+ 
+ 2021-11-01  Dan Li  <ashimida@linux.alibaba.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_expand_epilogue): Remove
+ 	redundant check for calls_eh_return.
+ 	* config/aarch64/aarch64.md (*do_return): Likewise.
+ 
+ 2021-11-01  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	* cfghooks.c (cfg_hook_duplicate_loop_to_header_edge): Rename
+ 	duplicate_loop_to_header_edge to
+ 	duplicate_loop_body_to_header_edge.
+ 	(cfg_hook_duplicate_loop_body_to_header_edge): Likewise.
+ 	* cfghooks.h (struct cfg_hooks): Likewise.
+ 	(cfg_hook_duplicate_loop_body_to_header_edge): Likewise.
+ 	* cfgloopmanip.c (duplicate_loop_body_to_header_edge): Likewise.
+ 	(clone_loop_to_header_edge): Likewise.
+ 	* cfgloopmanip.h (duplicate_loop_body_to_header_edge): Likewise.
+ 	* cfgrtl.c (struct cfg_hooks): Likewise.
+ 	* doc/loop.texi: Likewise.
+ 	* loop-unroll.c (unroll_loop_constant_iterations): Likewise.
+ 	(unroll_loop_runtime_iterations): Likewise.
+ 	(unroll_loop_stupid): Likewise.
+ 	(apply_opt_in_copies): Likewise.
+ 	* tree-cfg.c (struct cfg_hooks): Likewise.
+ 	* tree-ssa-loop-ivcanon.c (try_unroll_loop_completely): Likewise.
+ 	(try_peel_loop): Likewise.
+ 	* tree-ssa-loop-manip.c (copy_phi_node_args): Likewise.
+ 	(gimple_duplicate_loop_body_to_header_edge): Likewise.
+ 	(tree_transform_and_unroll_loop): Likewise.
+ 	* tree-ssa-loop-manip.h (gimple_duplicate_loop_body_to_header_edge):
+ 	Likewise.
+ 
+ 2021-11-01  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	* cfgloopmanip.c (loop_version): Refactor loopify to
+ 	loop_version.  Move condition generation after loopify.
+ 	(loopify): Delete.
+ 	* cfgloopmanip.h (loopify): Delete.
+ 
+ 2021-10-31  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-fnsummary.c: Include tree-dfa.h.
+ 	(points_to_local_or_readonly_memory_p): Return true on return
+ 	slot writes.
+ 	* ipa-modref.c (analyze_ssa_name_flags): Fix handling of copy
+ 	statement.
+ 
+ 2021-10-30  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	PR middle-end/102972
+ 	* omp-low.c (omp_runtime_api_call): Use DECL_ASSEMBLER_NAME to get
+ 	internal Fortran name; new permit_num_teams arg to permit
+ 	omp_get_num_teams and omp_get_team_num.
+ 	(scan_omp_1_stmt): Update call to it, add missing call for
+ 	reverse offload, and check for strictly nested API calls in teams.
+ 
+ 2021-10-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gimplify.c (gimplify_omp_for): Diagnose threadprivate iterators.
+ 
+ 2021-10-29  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* selftest.c (assert_streq): Add newlines when emitting non-equal
+ 	non-NULL strings.
+ 
+ 2021-10-29  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* Makefile.in: Fix syntax for reference to LIBDEPS in
+ 	gengtype link rule.
+ 
+ 2021-10-29  Bernhard Reutner-Fischer  <aldot@gcc.gnu.org>
+ 
+ 	* doc/install.texi: Bump required minimum DejaGnu version.
+ 
+ 2021-10-29  Aldy Hernandez  <aldyh@redhat.com>
+ 	    Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-relation.cc (path_oracle::killing_def): Add a
+ 	self-equivalence so we don't look to the root oracle.
+ 
+ 2021-10-29  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* passes.def: Replace the pass_thread_jumps before VRP* with
+ 	pass_thread_jumps_full.  Remove all pass_vrp_threader instances.
+ 	* tree-ssa-threadbackward.c (pass_data_thread_jumps_full):
+ 	Remove hyphen from "thread-full" name.
+ 
+ 2021-10-29  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/102983
+ 	* gimple-range-cache.h (propagate_updated_value): Make public.
+ 	* gimple-range.cc (gimple_ranger::range_of_stmt): Propagate exports
+ 	when processing gcond stmts.
+ 
+ 2021-10-29  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* gimple.c (gimple_call_retslot_flags): New function.
+ 	* gimple.h (gimple_call_retslot_flags): Declare.
+ 	* ipa-modref.c: Include tree-cfg.h.
+ 	(struct escape_entry): Turn parm_index to signed.
+ 	(modref_summary_lto::modref_summary_lto): Add retslot_flags.
+ 	(modref_summary::modref_summary): Initialize retslot_flags.
+ 	(struct modref_summary_lto): Likewise.
+ 	(modref_summary::useful_p): Check retslot_flags.
+ 	(modref_summary_lto::useful_p): Likewise.
+ 	(modref_summary::dump): Dump retslot_flags.
+ 	(modref_summary_lto::dump): Likewise.
+ 	(struct escape_point): Add hidden_args enum.
+ 	(analyze_ssa_name_flags): Ignore return slot return;
+ 	use gimple_call_retslot_flags.
+ 	(record_escape_points): Break out from ...
+ 	(analyze_parms): ... here; handle retslot_flags.
+ 	(modref_summaries::duplicate): Duplicate retslot_flags.
+ 	(modref_summaries_lto::duplicate): Likewise.
+ 	(modref_write_escape_summary): Stream parm_index as signed.
+ 	(modref_read_escape_summary): Likewise.
+ 	(modref_write): Stream retslot_flags.
+ 	(read_section): Likewise.
+ 	(struct escape_map): Fix typo in comment.
+ 	(update_escape_summary_1): Fix whitespace.
+ 	(ipa_merge_modref_summary_after_inlining): Drop retslot_flags.
+ 	(modref_merge_call_site_flags): Merge retslot_flags.
+ 	* ipa-modref.h (struct modref_summary): Add retslot_flags.
+ 	* tree-ssa-structalias.c (handle_rhs_call): Handle retslot_flags.
+ 
+ 2021-10-29  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/102977
+ 	* tree-vect-slp-patterns.c (vect_match_call_p): Remove.
+ 	(vect_detect_pair_op): Add crosslane check.
+ 	(vect_match_call_complex_mla): Remove.
+ 	(class complex_mul_pattern): Update comment.
+ 	(complex_mul_pattern::matches): Update detection.
+ 	(class complex_fma_pattern): Remove.
+ 	(complex_fma_pattern::matches): Remove.
+ 	(complex_fma_pattern::recognize): Remove.
+ 	(complex_fma_pattern::build): Remove.
+ 	(class complex_fms_pattern):  Update comment.
+ 	(complex_fms_pattern::matches): Remove.
+ 	(complex_operations_pattern::recognize): Remove complex_fma_pattern
+ 
+ 2021-10-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gimple-fold.c (gimple_fold_builtin_memset): Copy over location from
+ 	call to store.
+ 
+ 2021-10-29  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	PR target/102868
+ 	* config/rs6000/rs6000.c (altivec_expand_vec_perm_const): Add
+ 	patterns match and emit for VSX xxpermdi.
+ 
+ 2021-10-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102464
+ 	* config/i386/i386-builtin-types.def (V8HF_FTYPE_V8HF): New
+ 	function type.
+ 	(V16HF_FTYPE_V16HF): Ditto.
+ 	(V32HF_FTYPE_V32HF): Ditto.
+ 	(V8HF_FTYPE_V8HF_ROUND): Ditto.
+ 	(V16HF_FTYPE_V16HF_ROUND): Ditto.
+ 	(V32HF_FTYPE_V32HF_ROUND): Ditto.
+ 	* config/i386/i386-builtin.def ( IX86_BUILTIN_FLOORPH,
+ 	IX86_BUILTIN_CEILPH, IX86_BUILTIN_TRUNCPH,
+ 	IX86_BUILTIN_FLOORPH256, IX86_BUILTIN_CEILPH256,
+ 	IX86_BUILTIN_TRUNCPH256, IX86_BUILTIN_FLOORPH512,
+ 	IX86_BUILTIN_CEILPH512, IX86_BUILTIN_TRUNCPH512): New builtin.
+ 	* config/i386/i386-builtins.c
+ 	(ix86_builtin_vectorized_function): Enable vectorization for
+ 	HFmode FLOOR/CEIL/TRUNC operation.
+ 	* config/i386/i386-expand.c (ix86_expand_args_builtin): Handle
+ 	new builtins.
+ 	* config/i386/sse.md (rint<mode>2, nearbyint<mode>2): Extend
+ 	to vector HFmodes.
+ 
+ 2021-10-28  Aldy Hernandez  <aldyh@redhat.com>
+ 	    Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-relation.cc (path_oracle::killing_def): Walk the
+ 	equivalency list and remove SSA from any equivalencies.
+ 
+ 2021-10-28  Stafford Horne  <shorne@gmail.com>
+ 
+ 	* config/or1k/or1k.h (PROFILE_HOOK): Add return address argument
+ 	to _mcount.
+ 
+ 2021-10-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/102951
+ 	* fold-const.h (address_compare): Declare.
+ 	* fold-const.c (address_compare): New function.
+ 	* match.pd (cmp (convert1?@2 addr@0) (convert2? addr@1)): Use
+ 	address_compare helper.
+ 	(minmax cmp (convert1?@2 addr@0) (convert2?@3 addr@1)): New
+ 	simplification.
+ 
+ 2021-10-28  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* vr-values.c (simplify_using_ranges::fold_cond): Change fold message.
+ 
+ 2021-10-28  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/102940
+ 	* tree-vrp.c (execute_ranger_vrp): Reset scev.
+ 
+ 2021-10-28  Richard Purdie  <richard.purdie@linuxfoundation.org>
+ 
+ 	* config/nios2/linux.h (MUSL_DYNAMIC_LINKER): Add musl linker
+ 
+ 2021-10-28  Richard Purdie  <richard.purdie@linuxfoundation.org>
+ 
+ 	* configure: Regenerate.
+ 	* configure.ac: Use CPPFLAGS_FOR_BUILD for GMPINC
+ 
+ 2021-10-28  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* doc/invoke.texi (%X): Remove obsolete reference to -Wl.
+ 
+ 2021-10-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/84407
+ 	* fold-const.c (fold_convert_const): Avoid int to float
+ 	constant folding with -frounding-math and inexact result.
+ 	* simplify-rtx.c (simplify_const_unary_operation): Likewise
+ 	for both float and unsigned_float.
+ 
+ 2021-10-28  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c
+ 	(back_threader::find_taken_edge_switch): Use find_case_label_range
+ 	instead of find_taken_edge.
+ 
+ 2021-10-28  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (class back_threader_registry):
+ 	Inherit from back_jt_path_registry.
+ 	(back_threader_registry::thread_through_all_blocks): Remove.
+ 	(back_threader_registry::register_path): Remove
+ 	m_lowlevel_registry prefix.
+ 
+ 2021-10-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/57245
+ 	* fold-const.c (fold_convert_const_real_from_real): Honor
+ 	-frounding-math if the conversion is not exact.
+ 	* simplify-rtx.c (simplify_const_unary_operation): Do not
+ 	simplify FLOAT_TRUNCATE with sign dependent rounding.
+ 
+ 2021-10-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102949
+ 	* tree-vect-stmts.c (ensure_base_align): Look at the
+ 	dr_info of a group leader and assert we are looking at
+ 	one with analyzed alignment.
+ 
+ 2021-10-28  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR target/102767
+ 	* config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost): Consider
+ 	V1T1 mode for unaligned load and store.
+ 
+ 2021-10-28  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/riscv.md (zero_extendsidi2_internal): Allow ZBB
+ 	use this pattern.
+ 
+ 2021-10-28  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/arch-canonicalize (CANONICAL_ORDER): Add `i` to
+ 	CANONICAL_ORDER.
+ 
+ 2021-10-28  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* common.opt (fharden-compares): New.
+ 	(fharden-conditional-branches): New.
+ 	* doc/invoke.texi: Document new options.
+ 	* gimple-harden-conditionals.cc: New.
+ 	* Makefile.in (OBJS): Build it.
+ 	* passes.def: Add new passes.
+ 	* tree-pass.h (make_pass_harden_compares): Declare.
+ 	(make_pass_harden_conditional_branches): Declare.
+ 
+ 2021-10-28  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	PR target/94613
+ 	* config/rs6000/altivec.md: Add vsx register constraints.
+ 	* config/rs6000/vsx.md (vsx_xxsel<mode>): Delete.
+ 	(vsx_xxsel<mode>2): Likewise.
+ 	(vsx_xxsel<mode>3): Likewise.
+ 	(vsx_xxsel<mode>4): Likewise.
+ 
+ 2021-10-28  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	PR target/94613
+ 	* config/rs6000/altivec.md (*altivec_vsel<mode>): Change to ...
+ 	(altivec_vsel<mode>): ... this and update define.
+ 	(*altivec_vsel<mode>_uns): Delete.
+ 	(altivec_vsel<mode>2): New define_insn.
+ 	(altivec_vsel<mode>3): Likewise.
+ 	(altivec_vsel<mode>4): Likewise.
+ 	* config/rs6000/rs6000-call.c (altivec_expand_vec_sel_builtin): New.
+ 	(altivec_expand_builtin): Call altivec_expand_vec_sel_builtin to expand
+ 	vel_sel.
+ 	* config/rs6000/rs6000.c (rs6000_emit_vector_cond_expr): Use bit-wise
+ 	selection instead of per element.
+ 	* config/rs6000/vector.md:
+ 	* config/rs6000/vsx.md (*vsx_xxsel<mode>): Change to ...
+ 	(vsx_xxsel<mode>): ... this and update define.
+ 	(*vsx_xxsel<mode>_uns): Delete.
+ 	(vsx_xxsel<mode>2): New define_insn.
+ 	(vsx_xxsel<mode>3): Likewise.
+ 	(vsx_xxsel<mode>4): Likewise.
+ 
+ 2021-10-28  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/i386.c (use_rsqrt_p): Add mode parameter, enable
+ 	  HFmode rsqrt without TARGET_SSE_MATH.
+ 	(ix86_optab_supported_p): Refactor rint, adjust floor, ceil,
+ 	btrunc condition to be restricted by -ftrapping-math, adjust
+ 	use_rsqrt_p function call.
+ 	* config/i386/i386.md (rcphf2): New define_insn.
+ 	(rsqrthf2): Likewise.
+ 	* config/i386/sse.md (div<mode>3): Change VF2H to VF2.
+ 	(div<mode>3): New expander for HF mode.
+ 	(rsqrt<mode>2): Likewise.
+ 	(*avx512fp16_vmrcpv8hf2): New define_insn for rpad pass.
+ 	(*avx512fp16_vmrsqrtv8hf2): Likewise.
+ 
+ 2021-10-27  Saagar Jha  <saagar@saagarjha.com>
+ 
+ 	* config.gcc: Adjust for Darwin21.
+ 	* config/darwin-c.c (macosx_version_as_macro): Likewise.
+ 	* config/darwin-driver.c (validate_macosx_version_min):
+ 	Likewise.
+ 	(darwin_find_version_from_kernel): Likewise.
+ 
+ 2021-10-27  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc
+ 	(path_range_query::range_defined_in_block): Call killing_def.
+ 
+ 2021-10-27  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-fold.cc (fold_using_range::range_of_range_op): Dump
+ 	operands as well as relation.
+ 	* gimple-range-path.cc
+ 	(path_range_query::compute_ranges_in_block): Compute PHI relations
+ 	first.  Compute outgoing relations at the end.
+ 	(path_range_query::compute_ranges): Remove call to compute_relations.
+ 	(path_range_query::compute_relations): Remove.
+ 	(path_range_query::maybe_register_phi_relation): New.
+ 	(path_range_query::compute_phi_relations): Abstract out
+ 	registering one PHI relation to...
+ 	(path_range_query::compute_outgoing_relations): ...here.
+ 	* gimple-range-path.h (class path_range_query): Remove
+ 	compute_relations.
+ 	Add maybe_register_phi_relation.
+ 
+ 2021-10-27  Aldy Hernandez  <aldyh@redhat.com>
+ 	    Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-relation.cc (path_oracle::killing_def): Kill second
+ 	order relations.
+ 
+ 2021-10-27  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* ipa-cp.c (good_cloning_opportunity_p): Decide whether to use
+ 	profile feedback depending on their local availability.
+ 
+ 2021-10-27  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* params.opt (param_ipa_cp_profile_count_base): New parameter.
+ 	* doc/invoke.texi (Optimize Options): Add entry for
+ 	ipa-cp-profile-count-base.
+ 	* ipa-cp.c (max_count): Replace with base_count, replace all
+ 	occurrences too, unless otherwise stated.
+ 	(ipcp_cloning_candidate_p): identify mostly-directly called
+ 	functions based on their counts, not max_count.
+ 	(compare_edge_profile_counts): New function.
+ 	(ipcp_propagate_stage): Instead of setting max_count, find the
+ 	appropriate edge count in a sorted vector of counts of eligible
+ 	edges and make it the base_count.
+ 
+ 2021-10-27  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* ipa-cp.c (struct caller_statistics): New fields rec_count_sum,
+ 	n_nonrec_calls and itself, document all fields.
+ 	(init_caller_stats): Initialize the above new fields.
+ 	(gather_caller_stats): Gather self-recursive counts and calls number.
+ 	(get_info_about_necessary_edges): Gather counts of self-recursive and
+ 	other edges bringing in the requested value separately.
+ 	(dump_profile_updates): Rework to dump info about a single node only.
+ 	(lenient_count_portion_handling): New function.
+ 	(struct gather_other_count_struct): New type.
+ 	(gather_count_of_non_rec_edges): New function.
+ 	(struct desc_incoming_count_struct): New type.
+ 	(analyze_clone_icoming_counts): New function.
+ 	(adjust_clone_incoming_counts): Likewise.
+ 	(update_counts_for_self_gen_clones): Likewise.
+ 	(update_profiling_info): Rewritten.
+ 	(update_specialized_profile): Adjust call to dump_profile_updates.
+ 	(create_specialized_node): Do not update profiling info.
+ 	(decide_about_value): New parameter self_gen_clones, either push new
+ 	clones into it or updat their profile counts.  For self-recursively
+ 	generated values, use a portion of the node count instead of count
+ 	from self-recursive edges to estimate goodness.
+ 	(decide_whether_version_node): Gather clones for self-generated values
+ 	in a new vector, update their profiles at once at the end.
+ 
+ 2021-10-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.c (vect_transform_loops): New function,
+ 	split out from ...
+ 	(try_vectorize_loop_1): ... here.  Simplify as epilogues
+ 	are now fully handled in the split part.
+ 
+ 2021-10-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* omp-expand.c (expand_omp_for_init_counts): Handle non-rectangular
+ 	iterators with pointer types.
+ 	(expand_omp_for_init_vars, extract_omp_for_update_vars): Likewise.
+ 
+ 2021-10-26  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR tree-optimization/102238
+ 	PR tree-optimization/102919
+ 	* gimple-ssa-sprintf.c (get_string_length): Add an argument.
+ 	(array_elt_at_offset): Move to pointer-query.
+ 	(set_aggregate_size_and_offset): New function.
+ 	(field_at_offset):  Move to pointer-query.
+ 	(get_origin_and_offset): Rename...
+ 	(get_origin_and_offset_r): this.  Add an argument.  Make aggregate
+ 	handling more robust.
+ 	(get_origin_and_offset): New.
+ 	(alias_offset): Add an argument.
+ 	(format_string): Use subobject size determined by get_origin_and_offset.
+ 	* pointer-query.cc (field_at_offset): Move from gimple-ssa-sprintf.c.
+ 	Improve/correct handling of aggregates.
+ 	(array_elt_at_offset): Same.
+ 	* pointer-query.h (field_at_offset): Declare.
+ 	(array_elt_at_offset): Declare.
+ 
+ 2021-10-26  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* builtins.c (check_strncat_sizes): Pass access_data ctor additional
+ 	arguments.
+ 	(expand_builtin_memcmp): Move code to gimple-ssa-warn-access.cc.
+ 	(expand_builtin_fork_or_exec): Same.
+ 	* gimple-array-bounds.cc (array_bounds_checker::check_mem_ref): Pass
+ 	compute_objsize additional arguments.
+ 	(inbounds_memaccess_p): Same.
+ 	(array_bounds_checker::check_array_bounds): Add an assert.  Stash
+ 	statement in a member.
+ 	(check_array_bounds_dom_walker::before_dom_children): Same.
+ 	* gimple-array-bounds.h (array_bounds_checker::m_stmt): New member.
+ 	* gimple-ssa-sprintf.c (get_destination_size): Add an argument.
+ 	(handle_printf_call): Pass a new argument.
+ 	* gimple-ssa-warn-access.cc (get_size_range): Add an argument.
+ 	(check_access): Add an argument and pass it along to callees.
+ 	(check_read_access): Make a member function.
+ 	(pass_waccess::check_strcat): Pass access_data ctor additional
+ 	arguments.
+ 	(pass_waccess::check_strncat): Same.
+ 	(pass_waccess::check_stxcpy): Same.
+ 	(pass_waccess::check_stxncpy): Same.
+ 	(pass_waccess::check_strncmp): Same.
+ 	(pass_waccess::check_read_access): Same.
+ 	(pass_waccess::check_builtin): Same.
+ 	(pass_waccess::maybe_check_access_sizes): Same.
+ 	(pass_waccess::maybe_check_dealloc_call): Same.
+ 	* gimple-ssa-warn-access.h (check_read_access): Declare a new
+ 	member function.
+ 	* pointer-query.cc (compute_objsize_r): Add an argument.
+ 	(gimple_call_return_array): Same.
+ 	(gimple_call_alloc_size): Same.
+ 	(access_ref::access_ref): Same.
+ 	(access_ref::get_ref): Same.
+ 	(pointer_query::get_ref): Same.
+ 	(handle_min_max_size): Pass an arguments to callees.
+ 	(handle_array_ref): Add an argument.
+ 	(handle_mem_ref): Same.
+ 	(compute_objsize): Same.
+ 	* pointer-query.h (struct access_ref): Adjust signatures.
+ 	(struct access_data): Same.
+ 	(gimple_call_alloc_size): Add an argument.
+ 	(gimple_parm_array_size): Same.
+ 	(compute_objsize): Same.
+ 	* tree-ssa-strlen.c (strlen_pass::adjust_last_stmt): Pass an additional
+ 	argument to compute_objsize.
+ 	(strlen_pass::maybe_warn_overflow): Same.
+ 	(maybe_diag_stxncpy_trunc): Same.
+ 
+ 2021-10-26  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/102453
+ 	* gimple-ssa-warn-access.cc (pass_waccess::check_atomic_builtin): New.
+ 	(pass_waccess::check_atomic_builtin): Call it.
+ 
+ 2021-10-26  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/102842
+ 	* lra-constraints.c (match_reload): Ignore out in checking values
+ 	of outs.
+ 	(curr_insn_transform): Collect outputs before doing reloads of operands.
+ 
+ 2021-10-26  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	PR target/102719
+ 	* config/rs6000/x86intrin.h: Move some included headers to new
+ 	headers.  Include new immintrin.h instead of those headers.
+ 	* config/rs6000/immintrin.h: New.
+ 	* config/rs6000/x86gprintrin.h: New.
+ 	* config.gcc (powerpc*-*-*): Add new headers to extra_headers.
+ 
+ 2021-10-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (vect_create_addr_base_for_vector_ref):
+ 	Remove byte_offset parameter.
+ 	(vect_create_data_ref_ptr): Likewise.
+ 	* tree-vect-data-refs.c (vect_create_addr_base_for_vector_ref):
+ 	Likewise.
+ 	(vect_create_data_ref_ptr): Likewise.
+ 	* tree-vect-stmts.c (vectorizable_store): Adjust.
+ 	(vectorizable_load): Likewise.
+ 
+ 2021-10-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/96109
+ 	* tree-vectorizer.h (dr_misalignment): Add optional offset
+ 	parameter.
+ 	* tree-vect-data-refs.c (dr_misalignment): Likewise.  Remove
+ 	offset applied for negative stride accesses.
+ 	(vect_enhance_data_refs_alignment): Compute negative stride
+ 	access offset and pass it to dr_misalignment.
+ 	* tree-vect-stmts.c (get_negative_load_store_type): Pass
+ 	negative offset to dr_misalignment.
+ 	(get_group_load_store_type): Likewise.
+ 	(get_load_store_type): Likewise.
+ 	(vectorizable_store): Remove asserts about alignment.
+ 	(vectorizable_load): Likewise.
+ 
+ 2021-10-26  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR tree-optimization/102897
+ 	* tree-ssa-forwprop.c (simplify_permutation): Remove a wrong assertion.
+ 
+ 2021-10-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-data-refs.c (vect_create_addr_base_for_vector_ref):
+ 	Take offset in bytes.
+ 	(vect_create_data_ref_ptr): Likewise.
+ 	* tree-vect-loop-manip.c (get_misalign_in_elems): Multiply
+ 	offset by element size.
+ 	(vect_create_cond_for_align_checks): Likewise.
+ 	* tree-vect-stmts.c (get_negative_load_store_type): Likewise.
+ 	(vectorizable_load): Remove duplicate leftover from merge
+ 	conflict.
+ 
+ 2021-10-26  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_v1ti_shift): New helper
+ 	function to expand V1TI mode logical shifts by integer constants.
+ 	(ix86_expand_v1ti_rotate): New helper function to expand V1TI
+ 	mode rotations by integer constants.
+ 	* config/i386/i386-protos.h (ix86_expand_v1ti_shift,
+ 	ix86_expand_v1ti_rotate): Prototype new functions here.
+ 	* config/i386/sse.md (ashlv1ti3, lshrv1ti3, rotlv1ti3, rotrv1ti3):
+ 	New TARGET_SSE2 expanders to implement V1TI shifts and rotations.
+ 
+ 2021-10-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (back_threader::maybe_register_path):
+ 	Avoid threading circular paths.
+ 
+ 2021-10-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (back_threader::resolve_phi):
+ 	Attempt to resolve all incoming paths to a PHI.
+ 	(back_threader::resolve_def): Always return true for PHIs.
+ 
+ 2021-10-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (back_threader::find_paths_to_names):
+ 	Always try to resolve path without looking back.
+ 	* tree-ssa-threadupdate.c (dump_jump_thread): Indidicate whether
+ 	edge is a back edge.
+ 
+ 2021-10-26  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR tree-optimization/102789
+ 	* tree-vect-loop-manip.c (vect_update_inits_of_drs): Do not
+ 	update inits of simd_lane_access.
+ 
+ 2021-10-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-vrp.c (vrp_simplify_cond_using_ranges): Add return type and
+ 	move to vr-values.c.
+ 	(simplify_casted_conds): Move to vrp_folder class.
+ 	(execute_vrp): Call via vrp_folder now.
+ 	* vr-values.c (simplify_cond_using_ranges_1): Call simplify_casted_cond.
+ 	(simplify_using_ranges::simplify_casted_cond): Relocate from tree-vrp.c.
+ 	* vr-values.h (simplify_casted_cond): Add prototype.
+ 
+ 2021-10-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* tree-vrp.c (rvrp_folder::fold_stmt): If simplification fails, try
+ 	to fold anyway.
+ 
+ 2021-10-25  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config/rs6000/smmintrin.h (_mm_testz_si128): Add "extern" to
+ 	function signature.
+ 	(_mm_testc_si128): Likewise.
+ 	(_mm_testnzc_si128): Likewise.
+ 	(_mm_blend_ps): Likewise.
+ 	(_mm_blendv_ps): Likewise.
+ 	(_mm_blend_pd): Likewise.
+ 	(_mm_blendv_pd): Likewise.
+ 	(_mm_ceil_pd): Likewise.
+ 	(_mm_ceil_sd): Likewise.
+ 	(_mm_ceil_ps): Likewise.
+ 	(_mm_ceil_ss): Likewise.
+ 	(_mm_floor_pd): Likewise.
+ 	(_mm_floor_sd): Likewise.
+ 	(_mm_floor_ps): Likewise.
+ 	(_mm_floor_ss): Likewise.
+ 	(_mm_minpos_epu16): Likewise.
+ 	(_mm_mul_epi32): Likewise.
+ 	(_mm_cvtepi8_epi16): Likewise.
+ 	(_mm_packus_epi32): Likewise.
+ 	(_mm_cmpgt_epi64): Likewise.
+ 
+ 2021-10-25  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* simplify-rtx.c (simplify_binary_operation_1) [SS_ASHIFT]: Simplify
+ 	shifts of the mode's smin_value and smax_value when the bit count
+ 	operand doesn't have side-effects.
+ 	[US_ASHIFT]: Likewise, simplify shifts of the mode's umax_value
+ 	when the bit count operand doesn't have side-effects.
+ 	(simplify_const_binary_operation) [SS_ASHIFT, US_ASHIFT]: Perform
+ 	compile-time evaluation of saturating left shifts with constant
+ 	arguments.
+ 
+ 2021-10-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range.cc (gimple_ranger::export_global_ranges): Remove check
+ 	for TDF_DETAILS.
+ 
+ 2021-10-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* flag-types.h (enum ranger_debug): Adjust values.
+ 	* params.opt (ranger_debug): Ditto.
+ 
+ 2021-10-25  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/102886
+ 	* tree-sra.c (totally_scalarize_subtree): Fix the out of
+ 	access-condition.
+ 
+ 2021-10-25  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-ssa-dce.c (simple_dce_from_worklist):
+ 	Check stmt_unremovable_because_of_non_call_eh_p also
+ 	before removing the statement.
+ 
+ 2021-10-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102905
+ 	* tree-vect-data-refs.c (vect_enhance_data_refs_alignment):
+ 	Use vect_supportable_dr_alignment again to determine whether
+ 	an access is supported when not aligned.
+ 
+ 2021-10-25  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/riscv.c (riscv_rtx_costs): Handle cost model
+ 	for zbs extension.
+ 
+ 2021-10-25  Jim Wilson  <jimw@sifive.com>
+ 	    Kito Cheng  <kito.cheng@sifive.com>
+ 	    Jia-Wei Chen  <jiawei@iscas.ac.cn>
+ 	    Shi-Hua Liao  <shihua@iscas.ac.cn>
+ 
+ 	* config/riscv/bitmanip.md (shiftm1): New.
+ 	(*bset<mode>): Ditto.
+ 	(*bset<mode>_mask): Ditto.
+ 	(*bset<mode>_1): Ditto.
+ 	(*bset<mode>_1_mask): Ditto.
+ 	(*bseti<mode>): Ditto.
+ 	(*bclr<mode>): Ditto.
+ 	(*bclri<mode>): Ditto.
+ 	(*binv<mode>): Ditto.
+ 	(*binvi<mode>): Ditto.
+ 	(*bext<mode>): Ditto.
+ 	(*bexti): Ditto.
+ 	* config/riscv/predicates.md (splittable_const_int_operand):
+ 	Handle bseti.
+ 	(single_bit_mask_operand): New.
+ 	(not_single_bit_mask_operand): Ditto.
+ 	(const31_operand): Ditto.
+ 	(const63_operand): Ditto.
+ 	* config/riscv/riscv.c (riscv_build_integer_1): Handle bseti.
+ 	(riscv_output_move): Ditto.
+ 	(riscv_print_operand): Handle new operand type: T and S.
+ 	* config/riscv/riscv.h (SINGLE_BIT_MASK_OPERAND): New.
+ 
+ 2021-10-25  Jim Wilson  <jimw@sifive.com>
+ 
+ 	* config/riscv/riscv.c (riscv_build_integer_1): Build integer
+ 	with rotate.
+ 
+ 2021-10-25  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/riscv.c (riscv_extend_cost): Handle cost model
+ 	for zbb extension.
+ 	(riscv_rtx_costs): Ditto.
+ 
+ 2021-10-25  Jim Wilson  <jimw@sifive.com>
+ 	    Kito Cheng  <kito.cheng@sifive.com>
+ 	    Jia-Wei Chen  <jiawei@iscas.ac.cn>
+ 
+ 	* config/riscv/bitmanip.md (bitmanip_bitwise): New.
+ 	(bitmanip_minmax): New.
+ 	(clz_ctz_pcnt): New.
+ 	(bitmanip_optab): New.
+ 	(bitmanip_insn): New.
+ 	(*<optab>_not<mode>): New.
+ 	(*xor_not<mode>): New.
+ 	(<bitmanip_optab>si2): New.
+ 	(*<bitmanip_optab>disi2): New.
+ 	(<bitmanip_optab>di2): New.
+ 	(*zero_extendhi<GPR:mode>2_bitmanip): New.
+ 	(*extend<SHORT:mode><SUPERQI:mode>2_zbb): New.
+ 	(*zero_extendhi<GPR:mode>2_zbb): New.
+ 	(rotrsi3): New.
+ 	(rotrdi3): New.
+ 	(rotrsi3_sext): New.
+ 	(rotlsi3): New.
+ 	(rotldi3): New.
+ 	(rotlsi3_sext): New.
+ 	(bswap<mode>2): New.
+ 	(<bitmanip_optab><mode>3): New.
+ 	* config/riscv/riscv.md (type): Add rotate.
+ 	(zero_extendhi<GPR:mode>2): Change to define_expand pattern.
+ 	(*zero_extendhi<GPR:mode>2): New.
+ 	(extend<SHORT:mode><SUPERQI:mode>2): Change to define_expand pattern.
+ 	(*extend<SHORT:mode><SUPERQI:mode>2): New.
+ 
+ 2021-10-25  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/riscv.c (riscv_extend_cost): Handle cost model
+ 	for zba extension.
+ 	(riscv_rtx_costs): Ditto.
+ 
+ 2021-10-25  Jim Wilson  <jimw@sifive.com>
+ 	    Kito Cheng  <kito.cheng@sifive.com>
+ 	    Jia-Wei Chen  <jiawei@iscas.ac.cn>
+ 
+ 	* config/riscv/bitmanip.md (*zero_extendsidi2_bitmanip): New.
+ 	(*shNadd): Ditto.
+ 	(*shNadduw): Ditto.
+ 	(*add.uw): Ditto.
+ 	(*slliuw): Ditto.
+ 	(riscv_rtx_costs): Ditto.
+ 	* config/riscv/riscv.md: Include bitmanip.md
+ 	(type): Add bitmanip bype.
+ 	(zero_extendsidi2): Change to define_expand pattern.
+ 	(*zero_extendsidi2_internal): New.
+ 	(zero_extendsidi2_shifted): Disable for ZBA.
+ 
+ 2021-10-25  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* common/config/riscv/riscv-common.c (riscv_ext_version_table):
+ 	Add zba, zbb, zbc and zbs.
+ 	(riscv_ext_flag_table): Ditto.
+ 	* config/riscv/riscv-opts.h (MASK_ZBA): New.
+ 	(MASK_ZBB): Ditto.
+ 	(MASK_ZBC): Ditto.
+ 	(MASK_ZBS): Ditto.
+ 	(TARGET_ZBA): Ditto.
+ 	(TARGET_ZBB): Ditto.
+ 	(TARGET_ZBC): Ditto.
+ 	(TARGET_ZBS): Ditto.
+ 	* config/riscv/riscv.opt (riscv_zb_subext): New.
+ 
+ 2021-10-25  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102464
+ 	* match.pd: Simplify (_Float16) sqrtf((float) a) to .SQRT(a)
+ 	when direct_internal_fn_supported_p, similar for sqrt/sqrtl.
+ 
+ 2021-10-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102920
+ 	* tree-ssa-sccvn.h (expressions_equal_p): Add argument
+ 	controlling VN_TOP matching behavior.
+ 	* tree-ssa-sccvn.c (expressions_equal_p): Likewise.
+ 	(vn_phi_eq): Do not optimistically match VN_TOP.
+ 
+ 2021-10-25  konglin1  <lingling.kong@intel.com>
+ 
+ 	* config/i386/sse.md (fma_<mode>_fadd_fmul): Add new
+ 	define_insn_and_split.
+ 	(fma_<mode>_fadd_fcmul):Likewise
+ 	(fma_<complexopname>_<mode>_fma_zero):Likewise
+ 
+ 2021-10-24  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa-d.c (pa_d_handle_target_float_abi): Don't check
+ 	TARGET_DISABLE_FPREGS.
+ 	* config/pa/pa.c (fix_range): Use MASK_SOFT_FLOAT instead of
+ 	MASK_DISABLE_FPREGS.
+ 	(hppa_rtx_costs): Don't check TARGET_DISABLE_FPREGS.  Adjust
+ 	cost of hardware integer multiplication.
+ 	(pa_conditional_register_usage): Don't check TARGET_DISABLE_FPREGS.
+ 	* config/pa/pa.h (INT14_OK_STRICT): Likewise.
+ 	* config/pa/pa.md: Don't check TARGET_DISABLE_FPREGS. Check
+ 	TARGET_SOFT_FLOAT in patterns that use xmpyu instruction.
+ 	* config/pa/pa.opt (mdisable-fpregs): Change target mask to
+ 	SOFT_FLOAT.  Revise comment.
+ 	(msoft-float): New option.
+ 
+ 2021-10-24  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa.md: Don't use 'G' constraint in integer move patterns.
+ 
+ 2021-10-24  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/install.texi (Specific): Remove obsolete details
+ 	around GNU/Linux on Itanium.
+ 	(Specific): Remove reference to Windows for Itanium.
+ 
+ 2021-10-23  Bernhard Reutner-Fischer  <aldot@gcc.gnu.org>
+ 
+ 	* config/i386/x86-tune-sched-bd.c (dispatch_group): Commentary
+ 	typo fix.
+ 
+ 2021-10-23  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* tree-ssa-structalias.c (compute_points_to_sets): Cleanup.
+ 
+ 2021-10-23  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/i386/sse.md (<any_logic>v1ti3): New define_insn to
+ 	implement V1TImode AND, IOR and XOR on TARGET_SSE2 (and above).
+ 	(one_cmplv1ti2): New define expand.
+ 
+ 2021-10-22  Eric Gallager  <egallager@gcc.gnu.org>
+ 
+ 	PR other/102663
+ 	* Makefile.in: Handle dvidir and install-dvi target.
+ 	* configure: Regenerate.
+ 	* configure.ac: Add install-dvi to target_list.
+ 
+ 2021-10-22  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/install.texi (Binaries): Convert mingw-w64.org to https.
+ 	(Specific): Ditto.
+ 
+ 2021-10-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102893
+ 	* tree-ssa-dce.c (find_obviously_necessary_stmts): Fix the
+ 	test for an exit edge.
+ 
+ 2021-10-22  Aldy Hernandez  <aldyh@redhat.com>
+ 	    Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::compute_phi_relations):
+ 	Kill any global relations we may know before registering a new
+ 	one.
+ 	* value-relation.cc (path_oracle::killing_def): New.
+ 	* value-relation.h (path_oracle::killing_def): New.
+ 
+ 2021-10-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR bootstrap/102681
+ 	* tree-ssa-sccvn.c (vn_phi_insert): For undefined SSA args
+ 	record VN_TOP.
+ 	(vn_phi_lookup): Likewise.
+ 
+ 2021-10-21  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/98667
+ 	* doc/invoke.texi: Document -fcf-protection requires i686 or
+ 	new.
+ 
+ 2021-10-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR middle-end/102764
+ 	* cfgexpand.c (expand_gimple_basic_block): Robustify latest change.
+ 
+ 2021-10-21  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (__STRUCTN): Delete function
+ 	macro and all invocations.
+ 
+ 2021-10-21  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* doc/invoke.texi (ranger-debug): Document.
+ 	* flag-types.h (enum ranger_debug): New.
+ 	(enum evrp_mode): Remove debug values.
+ 	* gimple-range-cache.cc (DEBUG_RANGE_CACHE): Use new debug flag.
+ 	* gimple-range-gori.cc (gori_compute::gori_compute): Ditto.
+ 	* gimple-range.cc (gimple_ranger::gimple_ranger): Ditto.
+ 	* gimple-ssa-evrp.c (hybrid_folder::choose_value): Ditto.
+ 	(execute_early_vrp): Use evrp-mode directly.
+ 	* params.opt (enum evrp_mode): Remove debug values.
+ 	(ranger-debug): New.
+ 	(ranger-logical-depth): Relocate to be in alphabetical order.
+ 
+ 2021-10-21  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* doc/invoke.texi: (vrp1-mode, vrp2-mode): Document.
+ 	* flag-types.h: (enum vrp_mode): New.
+ 	* params.opt: (vrp1-mode, vrp2-mode): New.
+ 	* tree-vrp.c (vrp_pass_num): New.
+ 	(pass_vrp::pass_vrp): Set pass number.
+ 	(pass_vrp::execute): Choose which VRP mode to execute.
+ 
+ 2021-10-21  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-ssa-evrp.c (class rvrp_folder): Move to tree-vrp.c.
+ 	(execute_early_vrp): For ranger only mode, invoke ranger_vrp.
+ 	* tree-vrp.c (class rvrp_folder): Relocate here.
+ 	(execute_ranger_vrp): New.
+ 	* tree-vrp.h (execute_ranger_vrp): Export.
+ 
+ 2021-10-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR debug/102585
+ 	PR bootstrap/102766
+ 	* opts.c (finish_options): Process flag_var_tracking* options
+ 	here as they can be adjusted by optimize attribute.
+ 	Process also flag_syntax_only and flag_gtoggle.
+ 	* toplev.c (process_options): Remove it here.
+ 	* common.opt: Make debug_nonbind_markers_p as PerFunction
+ 	attribute as it depends on optimization level.
+ 
+ 2021-10-21  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/102505
+ 	* tree-sra.c (totally_scalarize_subtree): Check that the
+ 	encountered field fits within the acces we would like to put it
+ 	in.
+ 
+ 2021-10-21  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c
+ 	(back_threader::maybe_register_path): Remove circular paths check.
+ 
+ 2021-10-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	* toplev.c (process_options): Move the initial debug_hooks
+ 	setting ...
+ 	(toplev::main): ... before the call of the post_options
+ 	langhook.
+ 
+ 2021-10-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102847
+ 	* tree-vect-stmts.c (vect_model_load_cost): Add the scalar
+ 	load cost in the prologue for VMAT_INVARIANT.
+ 
+ 2021-10-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102847
+ 	* tree-vect-stmts.c (vect_model_load_cost): Explicitely
+ 	handle VMAT_INVARIANT as a splat in the prologue.
+ 
+ 2021-10-21  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	PR target/102812
+ 	* config/i386/i386.c (ix86_get_ssemov): Adjust HFmode vector
+ 	move to use the same logic as HImode.
+ 
+ 2021-10-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.c (vect_build_slp_tree_1): Remove
+ 	superfluous gimple_call_nothrow_p check.
+ 
+ 2021-10-21  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-cfg.c (maybe_remove_writeonly_store): Add dce_ssa_names argument.
+ 	Mark the ssa-name of the rhs as one to be removed.
+ 	(execute_fixup_cfg): Update call to maybe_remove_writeonly_store.
+ 	Call simple_dce_from_worklist at the end to a simple dce.
+ 
+ 2021-10-21  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-cfg.c (maybe_remove_writeonly_store): New function
+ 	factored out from ...
+ 	(execute_fixup_cfg): Here. Call maybe_remove_writeonly_store.
+ 
+ 2021-10-21  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-cfg.c (execute_fixup_cfg): Remove comment
+ 	about standalone pass.
+ 
+ 2021-10-21  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-cfg.c (execute_fixup_cfg): Output when the statement
+ 	is removed when it is a write only var.
+ 
+ 2021-10-21  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (back_threader::maybe_register_path):
+ 	Avoid threading circular paths.
+ 
+ 2021-10-20  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	* calls.c (initialize_argument_information): Remove some dead
+ 	code, remove handling for function_arg returning const_int.
+ 	* doc/tm.texi: Delete documentation for unused target hooks.
+ 	* doc/tm.texi.in: Likewise.
+ 	* target.def (load_bounds_for_arg): Delete.
+ 	(store_bounds_for_arg): Delete.
+ 	(load_returned_bounds): Delete.
+ 	(store_returned_bounds): Delete.
+ 	* targhooks.c (default_load_bounds_for_arg): Delete.
+ 	(default_store_bounds_for_arg): Delete.
+ 	(default_load_returned_bounds): Delete.
+ 	(default_store_returned_bounds): Delete.
+ 	* targhooks.h (default_load_bounds_for_arg): Delete.
+ 	(default_store_bounds_for_arg): Delete.
+ 	(default_load_returned_bounds): Delete.
+ 	(default_store_returned_bounds): Delete.
+ 
+ 2021-10-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/extend.texi (Basic Asm): Clarify that asm is not an
+ 	extension in C++.
+ 	* doc/invoke.texi (-fno-asm): Fix description for C++.
+ 
+ 2021-10-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/install.texi: Remove link to old.html
+ 
+ 2021-10-20  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (*aarch64_cmtst_same_<mode>): New.
+ 
+ 2021-10-20  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (*aarch64_narrow_trunc<mode>): New.
+ 
+ 2021-10-20  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_simd_ashr<mode>): Add case cmp
+ 	case.
+ 	* config/aarch64/constraints.md (D1): New.
+ 
+ 2021-10-20  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md
+ 	(*aarch64_<srn_op>topbits_shuffle<mode>_le): New.
+ 	(*aarch64_topbits_shuffle<mode>_le): New.
+ 	(*aarch64_<srn_op>topbits_shuffle<mode>_be): New.
+ 	(*aarch64_topbits_shuffle<mode>_be): New.
+ 	* config/aarch64/predicates.md
+ 	(aarch64_simd_shift_imm_vec_exact_top): New.
+ 
+ 2021-10-20  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (*aarch64_<srn_op>shrn<mode>_vect,
+ 	*aarch64_<srn_op>shrn<mode>2_vect_le,
+ 	*aarch64_<srn_op>shrn<mode>2_vect_be): New.
+ 	* config/aarch64/iterators.md (srn_op): New.
+ 
+ 2021-10-20  Chung-Lin Tang  <cltang@codesourcery.com>
+ 
+ 	* omp-low.c (omp_copy_decl_2): For !ctx, use record_vars to add new copy
+ 	as local variable.
+ 	(scan_sharing_clauses): Place copy of OMP_CLAUSE_IN_REDUCTION decl in
+ 	ctx->outer instead of ctx.
+ 
+ 2021-10-20  Martin Liska  <mliska@suse.cz>
+ 
+ 	Revert:
+ 	2021-10-19  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/102374
+ 	* config/i386/i386-options.c (ix86_valid_target_attribute_inner_p): Strip whitespaces.
+ 	* system.h (strip_whilespaces): New function.
+ 
+ 2021-10-20  Martin Liska  <mliska@suse.cz>
+ 
+ 	Revert:
+ 	2021-10-19  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/102375
+ 	* config/aarch64/aarch64.c (aarch64_process_one_target_attr):
+ 	Strip whitespaces.
+ 
+ 2021-10-20  Wilco Dijkstra  <wdijkstr@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_case_values_threshold):
+ 	Change to 8 with -Os, 11 otherwise.
+ 
+ 2021-10-20  Wilco Dijkstra  <wdijkstr@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (neoversev1_tunings):
+ 	Enable AARCH64_EXTRA_TUNE_CHEAP_SHIFT_EXTEND.
+ 	(neoversen2_tunings): Likewise.
+ 
+ 2021-10-20  Wilco Dijkstra  <wdijkstr@arm.com>
+ 
+ 	PR target/100966
+ 	* config/aarch64/aarch64.md (frint_pattern): Update comment.
+ 	* config/aarch64/aarch64-simd-builtins.def: Change frintn to roundeven.
+ 	* config/aarch64/arm_fp16.h: Change frintn to roundeven.
+ 	* config/aarch64/arm_neon.h: Likewise.
+ 	* config/aarch64/iterators.md (frint_pattern): Use roundeven for FRINTN.
+ 
+ 2021-10-20  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/arm/arm.c (arm_unwind_emit_sequence): Do not declare
+ 	already declared global variable.
+ 	(arm_unwind_emit_set): Use out_file as function argument.
+ 	(arm_unwind_emit): Likewise.
+ 	* config/darwin.c (machopic_output_data_section_indirection): Likewise.
+ 	(machopic_output_stub_indirection): Likewise.
+ 	(machopic_output_indirection): Likewise.
+ 	(machopic_finish): Likewise.
+ 	* config/i386/i386.c (ix86_asm_output_function_label): Likewise.
+ 	* config/i386/winnt.c (i386_pe_seh_unwind_emit): Likewise.
+ 	* config/ia64/ia64.c (process_epilogue): Likewise.
+ 	(process_cfa_adjust_cfa): Likewise.
+ 	(process_cfa_register): Likewise.
+ 	(process_cfa_offset): Likewise.
+ 	(ia64_asm_unwind_emit): Likewise.
+ 	* config/s390/s390.c (s390_asm_output_function_label): Likewise.
+ 
+ 2021-10-20  Andre Simoes Dias Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c
+ 	(aarch64_general_gimple_fold_builtin):
+ 	lower vld1 and vst1 variants of the neon builtins
+ 	* config/aarch64/aarch64-protos.h:
+ 	(aarch64_general_gimple_fold_builtin): Add gsi parameter.
+ 	* config/aarch64/aarch64.c (aarch64_general_gimple_fold_builtin):
+ 	Likwise.
+ 
+ 2021-10-20  Andre Simoes Dias Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	* match.pd: Generate IFN_TRUNC.
+ 
+ 2021-10-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102853
+ 	* tree-data-ref.c (split_constant_offset_1): Bail out
+ 	immediately if the expression traps on overflow.
+ 
+ 2021-10-20  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (back_threader::~back_threader): Remove.
+ 
+ 2021-10-20  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadupdate.c (back_jt_path_registry::adjust_paths_after_duplication):
+ 	Remove superflous debugging message.
+ 	(back_jt_path_registry::duplicate_thread_path): Same.
+ 
+ 2021-10-20  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (back_threader_registry::back_threader_registry):
+ 	Remove.
+ 	(back_threader_registry::register_path): Remove m_threaded_paths.
+ 
+ 2021-10-20  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/102814
+ 	* doc/invoke.texi: Document --param=max-fsm-thread-length.
+ 	* params.opt: Add --param=max-fsm-thread-length.
+ 	* tree-ssa-threadbackward.c
+ 	(back_threader_profitability::profitable_path_p): Fail on paths
+ 	longer than max-fsm-thread-length.
+ 
+ 2021-10-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR middle-end/102764
+ 	* cfgexpand.c (expand_gimple_basic_block): Disregard a final debug
+ 	statement to reset the current location for the outgoing edges.
+ 
+ 2021-10-20  Aldy Hernandez  <aldyh@redhat.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-threadupdate.c (cancel_thread): Dump threading reason
+ 	on the same line as the threading cancellation.
+ 	(jt_path_registry::cancel_invalid_paths): Avoid rotating loops.
+ 	Avoid threading through loop headers where the path remains in the
+ 	loop.
+ 
+ 2021-10-20  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	* tree-object-size.c (unknown): Make into a function.  Adjust
+ 	all uses.
+ 	(unknown_object_size): Simplify implementation.
+ 
+ 2021-10-20  Hongtao Liu  <hongtao.liu@intel.com>
+ 	    Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* doc/sourcebuild.texi (Effective-Target Keywords): Document
+ 	vect_slp_v2qi_store, vect_slp_v4qi_store, vect_slp_v8qi_store,
+ 	vect_slp_v16qi_store, vect_slp_v2hi_store,
+ 	vect_slp_v4hi_store, vect_slp_v2si_store, vect_slp_v4si_store.
+ 
+ 2021-10-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/extend.texi (Basic PowerPC Built-in Functions): Fix typo.
+ 
+ 2021-10-19  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	PR target/101893
+ 	PR target/102719
+ 	* config/rs6000/emmintrin.h: Guard POWER8 intrinsics.
+ 	* config/rs6000/pmmintrin.h: Same.
+ 	* config/rs6000/smmintrin.h: Same.
+ 	* config/rs6000/tmmintrin.h: Same.
+ 
+ 2021-10-19  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config.gcc (extra_headers): Add nmmintrin.h.
+ 
+ 2021-10-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (vect_supportable_dr_alignment): Add
+ 	misalignment parameter.
+ 	* tree-vect-data-refs.c (vect_get_peeling_costs_all_drs):
+ 	Do not change DR_MISALIGNMENT in place, instead pass the
+ 	adjusted misalignment to vect_supportable_dr_alignment.
+ 	(vect_peeling_supportable): Likewise.
+ 	(vect_peeling_hash_get_lowest_cost): Adjust.
+ 	(vect_enhance_data_refs_alignment): Likewise.
+ 	(vect_vfa_access_size): Likewise.
+ 	(vect_supportable_dr_alignment): Add misalignment
+ 	parameter and simplify.
+ 	* tree-vect-stmts.c (get_negative_load_store_type): Adjust.
+ 	(get_group_load_store_type): Likewise.
+ 	(get_load_store_type): Likewise.
+ 
+ 2021-10-19  Clément Chigot  <clement.chigot@atos.net>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_xcoff_file_end): Move
+ 	__tls_get_addr reference to .text csect.
+ 
+ 2021-10-19  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/102375
+ 	* config/aarch64/aarch64.c (aarch64_process_one_target_attr):
+ 	Strip whitespaces.
+ 
+ 2021-10-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (vect_get_store_cost): Adjust signature.
+ 	(vect_get_load_cost): Likewise.
+ 	* tree-vect-data-refs.c (vect_get_data_access_cost): Get
+ 	alignment support scheme and misalignment as arguments
+ 	and pass them down.
+ 	(vect_get_peeling_costs_all_drs): Compute that info here
+ 	and note that we shouldn't need to.
+ 	* tree-vect-stmts.c (vect_model_store_cost): Get
+ 	alignment support scheme and misalignment as arguments.
+ 	(vect_get_store_cost): Likewise.
+ 	(vect_model_load_cost): Likewise.
+ 	(vect_get_load_cost): Likewise.
+ 	(vectorizable_store): Pass down alignment support scheme
+ 	and misalignment to costing.
+ 	(vectorizable_load): Likewise.
+ 
+ 2021-10-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-stmts.c (get_negative_load_store_type): Add
+ 	offset output parameter and initialize it.
+ 	(get_group_load_store_type): Likewise.
+ 	(get_load_store_type): Likewise.
+ 	(vectorizable_store): Use offset as computed by
+ 	get_load_store_type.
+ 	(vectorizable_load): Likewise.
+ 
+ 2021-10-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102827
+ 	* tree-if-conv.c (predicate_statements): Add pe parameter
+ 	and use that edge to insert invariant stmts on.
+ 	(combine_blocks): Pass through pe.
+ 	(tree_if_conversion): Compute the edge to insert invariant
+ 	stmts on and pass it along.
+ 
+ 2021-10-19  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR target/102785
+ 	* config/bfin/bfin.md (addsubv2hi3, subaddv2hi3, ssaddsubv2hi3,
+ 	sssubaddv2hi3):  Swap the order of operators in vec_concat.
+ 
+ 2021-10-19  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	* config/rs6000/altivec.md (*altivec_vmrghb_internal): Delete.
+ 	(altivec_vmrghb_direct): New.
+ 	(*altivec_vmrghh_internal): Delete.
+ 	(altivec_vmrghh_direct): New.
+ 	(*altivec_vmrghw_internal): Delete.
+ 	(altivec_vmrghw_direct_<mode>): New.
+ 	(altivec_vmrghw_direct): Delete.
+ 	(*altivec_vmrglb_internal): Delete.
+ 	(altivec_vmrglb_direct): New.
+ 	(*altivec_vmrglh_internal): Delete.
+ 	(altivec_vmrglh_direct): New.
+ 	(*altivec_vmrglw_internal): Delete.
+ 	(altivec_vmrglw_direct_<mode>): New.
+ 	(altivec_vmrglw_direct): Delete.
+ 	* config/rs6000/rs6000-p8swap.c (rtx_is_swappable_p): Adjust.
+ 	* config/rs6000/rs6000.c (altivec_expand_vec_perm_const):
+ 	Adjust.
+ 	* config/rs6000/vsx.md (vsx_xxmrghw_<mode>): Adjust.
+ 	(vsx_xxmrglw_<mode>): Adjust.
+ 
+ 2021-10-19  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* passes.def: Change threading comment before pass_ccp pass.
+ 
+ 2021-10-19  Haochen Gui  <guihaoc@gcc.gnu.org>
+ 
+ 	* config/rs6000/rs6000-call.c (altivec_expand_lxvr_builtin):
+ 	Modify the expansion for sign extension. All extensions are done
+ 	within VSX registers.
+ 
+ 2021-10-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-stmts.c (get_group_load_store_type): Add
+ 	misalignment output parameter and initialize it.
+ 	(get_group_load_store_type): Likewise.
+ 	(vectorizable_store): Remove now redundant queries.
+ 	(vectorizable_load): Likewise.
+ 
+ 2021-10-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (vect_supportable_dr_alignment): Remove
+ 	check_aligned argument.
+ 	* tree-vect-data-refs.c (vect_supportable_dr_alignment):
+ 	Likewise.
+ 	(vect_peeling_hash_insert): Add supportable_if_not_aligned
+ 	argument and do not call vect_supportable_dr_alignment here.
+ 	(vect_peeling_supportable): Adjust.
+ 	(vect_enhance_data_refs_alignment): Compute whether the
+ 	access is supported with different alignment here and
+ 	pass that down to vect_peeling_hash_insert.
+ 	(vect_vfa_access_size): Adjust.
+ 	* tree-vect-stmts.c (vect_get_store_cost): Likewise.
+ 	(vect_get_load_cost): Likewise.
+ 	(get_negative_load_store_type): Likewise.
+ 	(get_group_load_store_type): Likewise.
+ 	(get_load_store_type): Likewise.
+ 
+ 2021-10-19  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/102374
+ 	* config/i386/i386-options.c (ix86_valid_target_attribute_inner_p): Strip whitespaces.
+ 	* system.h (strip_whilespaces): New function.
+ 
+ 2021-10-19  dianhong xu  <dianhong.xu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h:
+ 	(_mm512_set1_pch): New intrinsic.
+ 	* config/i386/avx512fp16vlintrin.h:
+ 	(_mm256_set1_pch): New intrinsic.
+ 	(_mm_set1_pch): Ditto.
+ 
+ 2021-10-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/102796
+ 	* gimple-range.cc (gimple_ranger::range_on_edge): Process EH edges
+ 	normally.  Return get_tree_range for non gimple_range_ssa_p names.
+ 	(gimple_ranger::range_of_stmt): Use get_tree_range for non
+ 	gimple_range_ssa_p names.
+ 
+ 2021-10-18  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/102761
+ 	* config/i386/i386.c (ix86_print_operand_address):
+ 	Error out for non-address_operand asm operands.
+ 
+ 2021-10-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-data-refs.c (vect_peeling_hash_insert): Do
+ 	not auto-convert dr_alignment_support to bool.
+ 	(vect_peeling_supportable): Likewise.
+ 	(vect_enhance_data_refs_alignment): Likewise.
+ 	(vect_supportable_dr_alignment): Commonize read/write case.
+ 	* tree-vect-stmts.c (vect_get_store_cost): Use
+ 	dr_alignment_support, not int, for the vect_supportable_dr_alignment
+ 	result.
+ 	(vect_get_load_cost): Likewise.
+ 
+ 2021-10-18  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	* tree-object-size.c (object_sizes_execute): Consolidate LHS
+ 	null check and do it early.
+ 
+ 2021-10-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-stmts.c (vectorizable_store): Use the
+ 	computed alignment scheme instead of querying
+ 	aligned_access_p.
+ 
+ 2021-10-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-stmts.c (vectorizable_store): Do not recompute
+ 	alignment scheme already determined by get_load_store_type.
+ 
+ 2021-10-18  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (class pass_thread_jumps_full):
+ 	Clone corresponding pass.
+ 
+ 2021-10-18  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* combine.c (recog_for_combine): For an unrecognized move/set of
+ 	a constant, try force_const_mem to place it in the constant pool.
+ 	* cse.c (constant_pool_entries_cost, constant_pool_entries_regcost):
+ 	Delete global variables (that are no longer assigned a cost value).
+ 	(cse_insn): Simplify logic for deciding whether to place a folded
+ 	constant in the constant pool using force_const_mem.
+ 	(cse_main): Remove zero initialization of constant_pool_entries_cost
+ 	and constant_pool_entries_regcost.
+ 	* config/i386/i386.c (ix86_rtx_costs): Make memory accesses
+ 	fractionally more expensive, when optimizing for speed.
+ 
+ 2021-10-18  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR gcov-profile/102746
+ 	PR gcov-profile/102747
+ 	* gcov.c (main): Return return_code.
+ 	(output_gcov_file): Mark return_code when error happens.
+ 	(generate_results): Likewise.
+ 	(read_graph_file): Likewise.
+ 	(read_count_file): Likewise.
+ 
+ 2021-10-18  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/bfin/bfin.md (define_constants): Remove UNSPEC_ONES.
+ 	(define_insn "ones"): Replace UNSPEC_ONES with a truncate of
+ 	a popcount, allowing compile-time evaluation/simplification.
+ 	(popcountsi2, popcounthi2): New expanders using a "ones" insn.
+ 
+ 2021-10-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102788
+ 	* tree-vect-patterns.c (vect_init_pattern_stmt): Allow
+ 	a NULL vectype.
+ 	(vect_pattern_recog_1): Likewise.
+ 	(vect_recog_bool_pattern): Continue matching the pattern
+ 	even if we do not have a vector type for a conversion
+ 	result.
+ 
+ 2021-10-18  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* simplify-rtx.c (simplify_const_unary_operation) [SS_NEG, SS_ABS]:
+ 	Evalute SS_NEG and SS_ABS of a constant argument.
+ 
+ 2021-10-18  prathamesh.kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	PR target/93183
+ 	* gimple-match-head.c (try_conditional_simplification): Add case for single operand.
+ 	* internal-fn.def: Add entry for COND_NEG internal function.
+ 	* internal-fn.c (FOR_EACH_CODE_MAPPING): Add entry for
+ 	NEGATE_EXPR, COND_NEG mapping.
+ 	* optabs.def: Add entry for cond_neg_optab.
+ 	* match.pd (UNCOND_UNARY, COND_UNARY): New operator lists.
+ 	(vec_cond COND (foo A) B) -> (IFN_COND_FOO COND A B): New pattern.
+ 	(vec_cond COND B (foo A)) -> (IFN_COND_FOO ~COND A B): Likewise.
+ 
+ 2021-10-18  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-strlen.c (class strlen_pass): Rename from
+ 	strlen_dom_walker.
+ 	(handle_builtin_stxncpy_strncat): Move to strlen_pass.
+ 	(handle_assign): Same.
+ 	(adjust_last_stmt): Same.
+ 	(maybe_warn_overflow): Same.
+ 	(handle_builtin_strlen): Same.
+ 	(handle_builtin_strchr): Same.
+ 	(handle_builtin_strcpy): Same.
+ 	(handle_builtin_strncat): Same.
+ 	(handle_builtin_stxncpy_strncat): Same.
+ 	(handle_builtin_memcpy): Same.
+ 	(handle_builtin_strcat): Same.
+ 	(handle_alloc_call): Same.
+ 	(handle_builtin_memset): Same.
+ 	(handle_builtin_memcmp): Same.
+ 	(get_len_or_size): Same.
+ 	(strxcmp_eqz_result): Same.
+ 	(handle_builtin_string_cmp): Same.
+ 	(handle_pointer_plus): Same.
+ 	(count_nonzero_bytes_addr): Same.
+ 	(count_nonzero_bytes): Same.
+ 	(handle_store): Same.
+ 	(strlen_check_and_optimize_call): Same.
+ 	(handle_integral_assign): Same.
+ 	(check_and_optimize_stmt): Same.
+ 	(printf_strlen_execute): Rename strlen_dom_walker to strlen_pass.
+ 
+ 2021-10-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102798
+ 	* tree-vect-data-refs.c (vect_create_addr_base_for_vector_ref):
+ 	Only copy points-to info to newly generated SSA names.
+ 
+ 2021-10-18  Martin Liska  <mliska@suse.cz>
+ 
+ 	* dbgcnt.c (dbg_cnt_process_opt): Remove unused but set variable.
+ 	* gcov.c (get_cycles_count): Likewise.
+ 	* lto-compress.c (lto_compression_zlib): Likewise.
+ 	(lto_uncompression_zlib): Likewise.
+ 	* targhooks.c (default_pch_valid_p): Likewise.
+ 
+ 2021-10-17  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-pass.h (make_pass_thread_jumps_full): New.
+ 	* tree-ssa-threadbackward.c (pass_thread_jumps::gate): Inline.
+ 	(try_thread_blocks): Add resolve and speed arguments.
+ 	(pass_thread_jumps::execute): Inline.
+ 	(do_early_thread_jumps): New.
+ 	(do_thread_jumps): New.
+ 	(make_pass_thread_jumps): Move.
+ 	(pass_early_thread_jumps::gate): Inline.
+ 	(pass_early_thread_jumps::execute): Inline.
+ 	(class pass_thread_jumps_full): New.
+ 
+ 2021-10-16  Piotr Kubaj  <pkubaj@FreeBSD.org>
+ 
+ 	* configure.ac: Treat powerpc64*-*-freebsd* the same as
+ 	powerpc64-*-freebsd*.
+ 	* configure: Regenerate.
+ 
+ 2021-10-16  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* value-query.cc (get_ssa_name_ptr_info_nonnull): Change
+ 	set_ptr_nonull to set_ptr_nonnull in comments.
+ 
+ 2021-10-16  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR tree-optimization/102720
+ 	* tree-ssa-structalias.c (compute_points_to_sets): Fix producing
+ 	of call used and clobbered sets.
+ 
+ 2021-10-15  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.h (LINK_COMMAND_SPEC_A): Update 'r' handling to
+ 	skip gomp and itm when r or nodefaultlibs is given.
+ 	(DSYMUTIL_SPEC): Do not call dsymutil for '-r' link lines.
+ 	Update ordering of exclusions, remove duplicate 'v' addition
+ 	(collect2 will add this from the main command line).
+ 
+ 2021-10-15  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin-driver.c (darwin_driver_init): Revise comments, handle
+ 	filelist and framework options in specs instead of code.
+ 	* config/darwin.h (SUBTARGET_DRIVER_SELF_SPECS): Update to handle link
+ 	specs that are really driver ones.
+ 	(DARWIN_CC1_SPEC): Likewise.
+ 	(CPP_SPEC): Likewise.
+ 	(SYSROOT_SPEC): Append space.
+ 	(LINK_SYSROOT_SPEC): Remove most driver link specs.
+ 	(STANDARD_STARTFILE_PREFIX_2): Update link-related specs.
+ 	(STARTFILE_SPEC): Likewise.
+ 	(ASM_MMACOSX_VERSION_MIN_SPEC): Fix line wrap.
+ 	(ASM_SPEC): Update driver-related specs.
+ 	(ASM_FINAL_SPEC): Likewise.
+ 	* config/darwin.opt: Remove now unused option aliases.
+ 	* config/i386/darwin.h (EXTRA_ASM_OPTS): Ensure space after opt.
+ 	(ASM_SPEC): Update driver-related specs.
+ 
+ 2021-10-15  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/i386/i386.c (ix86_hardreg_mov_ok): For vector modes,
+ 	allow standard_sse_constant_p immediate constants.
+ 
+ 2021-10-15  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config.gcc: Add tm-dwarf2.h to tm_d-file.
+ 
+ 2021-10-15  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-fold.h (gimple_range_ssa_p): Don't process names
+ 	that occur in abnormal phis.
+ 	* gimple-range.cc (gimple_ranger::range_on_edge): Return false for
+ 	abnormal and EH edges.
+ 	* gimple-ssa-evrp.c (rvrp_folder::value_of_expr): Ditto.
+ 	(rvrp_folder::value_on_edge): Ditto.
+ 	(rvrp_folder::value_of_stmt): Ditto.
+ 	(hybrid_folder::value_of_expr): Ditto for ranger queries.
+ 	(hybrid_folder::value_on_edge): Ditto.
+ 	(hybrid_folder::value_of_stmt): Ditto.
+ 	* value-query.cc (gimple_range_global): Always return a range if
+ 	the type is supported.
+ 
+ 2021-10-15  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa.md: Consistently use "rG" constraint for copy
+ 	instruction in move patterns.
+ 
+ 2021-10-15  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	* config/gcn/gcn-hsa.h (S_FIJI): Set unconditionally.
+ 	(S_900): Likewise.
+ 	(S_906): Likewise.
+ 	* config/gcn/gcn.c: Hard code SRAM ECC settings for old architectures.
+ 	* config/gcn/mkoffload.c (ELFABIVERSION_AMDGPU_HSA): Rename to ...
+ 	(ELFABIVERSION_AMDGPU_HSA_V3): ... this.
+ 	(ELFABIVERSION_AMDGPU_HSA_V4): New.
+ 	(SET_SRAM_ECC_UNSUPPORTED): New.
+ 	(copy_early_debug_info): Create elf flags to match the other objects.
+ 	(main): Just let the attribute flags pass through.
+ 
+ 2021-10-15  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
+ 
+ 	* tree-loop-distribution.c (reduction_var_overflows_first):
+ 	Pass the type of reduction_var as first argument as it is also
+ 	done for the load type.
+ 	(loop_distribution::transform_reduction_loop): Add missing
+ 	TREE_TYPE while determining precission of reduction_var.
+ 
+ 2021-10-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	* defaults.h (PREFERRED_DEBUGGING_TYPE): Choose DWARF2_DEBUG
+ 	when not set.
+ 	* toplev.c (process_options): Warn when STABS debugging is
+ 	enabled but not the preferred format.
+ 	* config/pa/som.h (PREFERRED_DEBUGGING_TYPE): Define to
+ 	DBX_DEBUG.
+ 	* config/pdp11/pdp11.h (PREFERRED_DEBUGGING_TYPE): Likewise.
+ 
+ 2021-10-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/102762
+ 	* tree-inline.c (copy_bb): Avoid underflowing nargs.
+ 
+ 2021-10-15  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_vec_perm): Convert
+ 	HFmode input operand to HImode.
+ 	(ix86_vectorize_vec_perm_const): Likewise.
+ 	* config/i386/sse.md (*avx512bw_permvar_truncv16siv16hi_1_hf):
+ 	New define_insn.
+ 	(*avx512f_permvar_truncv8siv8hi_1_hf):
+ 	Likewise.
+ 
+ 2021-10-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/102682
+ 	* expmed.c (store_bit_field_1): Ensure a LHS subreg would
+ 	not create a paradoxical subreg.
+ 
+ 2021-10-15  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_vector_init):
+ 	For half_vector concat for HFmode, handle them like HImode.
+ 
+ 2021-10-14  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (class back_threader): Add m_resolve.
+ 	(back_threader::back_threader): Same.
+ 	(back_threader::resolve_phi): Try to solve without looking back if
+ 	possible.
+ 	(back_threader::find_paths_to_names): Same.
+ 	(try_thread_blocks): Pass resolve argument to back threader.
+ 	(pass_early_thread_jumps::execute): Same.
+ 
+ 2021-10-14  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* doc/invoke.texi: Remove max-fsm-thread-length,
+ 	max-fsm-thread-paths, and fsm-maximum-phi-arguments.
+ 	* params.opt: Same.
+ 	* tree-ssa-threadbackward.c (back_threader::back_threader): Remove
+ 	argument.
+ 	(back_threader_registry::back_threader_registry): Same.
+ 	(back_threader_profitability::profitable_path_p): Remove
+ 	param_max_fsm_thread-length.
+ 	(back_threader_registry::register_path): Remove
+ 	m_max_allowable_paths.
+ 
+ 2021-10-14  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (class back_threader): Make m_imports
+ 	an auto_bitmap.
+ 	(back_threader::~back_threader): Do not release m_path.
+ 
+ 2021-10-14  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/102738
+ 	* vr-values.c (simplify_using_ranges::simplify): Handle RSHIFT_EXPR.
+ 
+ 2021-10-14  Kwok Cheung Yeung  <kcy@codesourcery.com>
+ 
+ 	* omp-general.c (omp_check_context_selector):  Move from c-omp.c.
+ 	(omp_mark_declare_variant): Move from c-omp.c.
+ 	(omp_context_name_list_prop): Update for Fortran strings.
+ 	* omp-general.h (omp_check_context_selector): New prototype.
+ 	(omp_mark_declare_variant): New prototype.
+ 
+ 2021-10-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_density_test): Move early
+ 	exit test further up the function.
+ 
+ 2021-10-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/arm/arm.c (arm_add_stmt_cost): Delete.
+ 	(TARGET_VECTORIZE_ADD_STMT_COST): Delete.
+ 
+ 2021-10-14  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* doc/invoke.texi (Optimize Options): Add entry for
+ 	ipa-cp-recursive-freq-factor.
+ 
+ 2021-10-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* match.pd: New rule.
+ 
+ 2021-10-14  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/102557
+ 	* ipa-modref-tree.h (modref_access_node::update2):
+ 	Also check that parm_offset is unchanged.
+ 	(modref_ref_node::insert_access): Fix updating of
+ 	parameter.
+ 
+ 2021-10-14  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (back_threader::resolve_phi): Add
+ 	FIXME note.
+ 
+ 2021-10-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102659
+ 	* tree-if-conv.c (if_convertible_gimple_assign_stmt_p): Also
+ 	rewrite pointer typed undefined overflow operations.
+ 	(predicate_statements): Likewise.  Make sure to emit invariant
+ 	conversions in the preheader.
+ 	* tree-vectorizer.c (vect_loop_vectorized_call): Look through
+ 	non-empty preheaders.
+ 	* tree-data-ref.c (dr_analyze_indices): Strip useless
+ 	conversions to the MEM_REF base type.
+ 
+ 2021-10-14  Martin Liska  <mliska@suse.cz>
+ 
+ 	* common.opt: Stop using AUTODETECT_VALUE
+ 	and use EnabledBy where possible.
+ 	* opts.c: Enable OPT_fvar_tracking with optimize >= 1.
+ 	* toplev.c (AUTODETECT_VALUE): Remove macro.
+ 	(process_options): Simplify by using EnabledBy and
+ 	OPT_fvar_tracking.  Use OPTION_SET_P macro instead of
+ 	AUTODETECT_VALUE.
+ 
+ 2021-10-14  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vld1_s8_x3): Use signed type for
+ 	pointer parameter.
+ 	(vld1_s32_x3): Likewise.
+ 
+ 2021-10-14  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/102736
+ 	PR tree-optimization/102736
+ 	* gimple-range-path.cc (path_range_query::range_on_path_entry):
+ 	Assert that the requested range is defined outside the path.
+ 	(path_range_query::ssa_range_in_phi): Do not call
+ 	range_on_path_entry for SSA names that are defined within the
+ 	path.
+ 
+ 2021-10-14  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin-driver.c (darwin_find_version_from_kernel):
+ 	Quote internal identifiers and avoid contractions in
+ 	warnings.
+ 	(darwin_default_min_version): Likewise.
+ 	(darwin_driver_init): Likewise.
+ 
+ 2021-10-14  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* params.opt (ipa-cp-recursive-freq-factor): New.
+ 	* ipa-cp.c (ipcp_value): Switch to inline initialization.  New members
+ 	scc_no, self_recursion_generated_level, same_scc and
+ 	self_recursion_generated_p.
+ 	(ipcp_lattice::add_value): Replaced parameter unlimited with
+ 	same_lat_gen_level, usit it determine limit of values and store it to
+ 	the value.
+ 	(ipcp_lattice<valtype>::print): Dump the new fileds.
+ 	(allocate_and_init_ipcp_value): Take same_lat_gen_level as a new
+ 	parameter and store it to the new value.
+ 	(self_recursively_generated_p): Removed.
+ 	(propagate_vals_across_arith_jfunc): Use self_recursion_generated_p
+ 	instead of self_recursively_generated_p, store self generation level
+ 	to such values.
+ 	(value_topo_info<valtype>::add_val): Set scc_no.
+ 	(value_topo_info<valtype>::propagate_effects): Multiply frequencies of
+ 	recursively feeding values and self generated values by appropriate
+ 	new factors.
+ 
+ 2021-10-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_add_stmt_cost): Remove
+ 	redundant test for flag_vect_cost_model.
+ 
+ 2021-10-14  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* bitmap.c (debug): New overloaded function for auto_bitmaps.
+ 	* bitmap.h (debug): Same.
+ 
+ 2021-10-14  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm512_mask_fcmadd_pch):
+ 	Adjust builtin call.
+ 	(_mm512_mask3_fcmadd_pch): Likewise.
+ 	(_mm512_mask_fmadd_pch): Likewise
+ 	(_mm512_mask3_fmadd_pch): Likewise
+ 	(_mm512_mask_fcmadd_round_pch): Likewise
+ 	(_mm512_mask3_fcmadd_round_pch): Likewise
+ 	(_mm512_mask_fmadd_round_pch): Likewise
+ 	(_mm512_mask3_fmadd_round_pch): Likewise
+ 	(_mm_mask_fcmadd_sch): Likewise
+ 	(_mm_mask3_fcmadd_sch): Likewise
+ 	(_mm_mask_fmadd_sch): Likewise
+ 	(_mm_mask3_fmadd_sch): Likewise
+ 	(_mm_mask_fcmadd_round_sch): Likewise
+ 	(_mm_mask3_fcmadd_round_sch): Likewise
+ 	(_mm_mask_fmadd_round_sch): Likewise
+ 	(_mm_mask3_fmadd_round_sch): Likewise
+ 	(_mm_fcmadd_round_sch): Likewise
+ 	* config/i386/avx512fp16vlintrin.h (_mm_mask_fmadd_pch):
+ 	Adjust builtin call.
+ 	(_mm_mask3_fmadd_pch): Likewise
+ 	(_mm256_mask_fmadd_pch): Likewise
+ 	(_mm256_mask3_fmadd_pch): Likewise
+ 	(_mm_mask_fcmadd_pch): Likewise
+ 	(_mm_mask3_fcmadd_pch): Likewise
+ 	(_mm256_mask_fcmadd_pch): Likewise
+ 	(_mm256_mask3_fcmadd_pch): Likewise
+ 	* config/i386/i386-builtin.def: Add mask3 builtin for complex
+ 	fma, and adjust mask_builtin to corresponding expander.
+ 	* config/i386/i386-expand.c (ix86_expand_round_builtin):
+ 	Skip eraseing embedded rounding for expanders that emits
+ 	multiple insns.
+ 	* config/i386/sse.md (complexmove): New mode_attr.
+ 	(<avx512>_fmaddc_<mode>_mask1<round_expand_name>): New expander.
+ 	(<avx512>_fcmaddc_<mode>_mask1<round_expand_name>): Likewise.
+ 	(avx512fp16_fmaddcsh_v8hf_mask1<round_expand_name>): Likewise.
+ 	(avx512fp16_fcmaddcsh_v8hf_mask1<round_expand_name>): Likewise.
+ 	(avx512fp16_fcmaddcsh_v8hf_mask3<round_expand_name>): Likewise.
+ 	(avx512fp16_fmaddcsh_v8hf_mask3<round_expand_name>): Likewise.
+ 	* config/i386/subst.md (round_embedded_complex): New subst.
+ 
+ 2021-10-14  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa.md (cbranchsf4): Disable if TARGET_SOFT_FLOAT.
+ 	(cbranchdf4): Likewise.
+ 	Add missing move patterns for TARGET_SOFT_FLOAT.
+ 
+ 2021-10-13  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_vector_move):  Use a
+ 	pseudo intermediate when moving a SUBREG into a hard register,
+ 	by checking ix86_hardreg_mov_ok.
+ 	(ix86_expand_vector_extract): Store zero-extended SImode
+ 	intermediate in a pseudo, then set target using a SUBREG_PROMOTED
+ 	annotated subreg.
+ 	* config/i386/sse.md (mov<VMOVE>_internal): Prevent CSE creating
+ 	complex (SUBREG) sets of (vector) hard registers before reload, by
+ 	checking ix86_hardreg_mov_ok.
+ 
+ 2021-10-13  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* ctfc.h (enum ctf_dtu_d_union_enum): Remove redundant comma.
+ 
+ 2021-10-13  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* dwarf2ctf.c (gen_ctf_array_type): Fix typo in comment.
+ 
+ 2021-10-13  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/102630
+ 	* pointer-query.cc (compute_objsize_r): Handle named address spaces.
+ 
+ 2021-10-13  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* collect2.c (is_lto_object_file): Release simple-object
+ 	resources, close files.
+ 
+ 2021-10-13  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	* config/arm/arm.c (thumb2_legitimate_address_p): Use VALID_MVE_MODE
+ 	when checking mve addressing modes.
+ 	(mve_vector_mem_operand): Fix the way we handle pre, post and offset
+ 	addressing modes.
+ 	(arm_print_operand): Fix printing of POST_ and PRE_MODIFY.
+ 	* config/arm/mve.md: Use mve_memory_operand predicate everywhere where
+ 	there is a single Ux constraint.
+ 
+ 2021-10-13  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa.md (muldi3): Add support for inlining 64-bit
+ 	multiplication on 32-bit PA 1.1 and 2.0 targets.
+ 
+ 2021-10-13  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR gcov-profile/90364
+ 	* coverage.c (build_info): Emit checksum to the global variable.
+ 	(build_info_type): Add new field for checksum.
+ 	(coverage_obj_finish): Pass object_checksum.
+ 	(coverage_init): Use 0 as checksum for .gcno files.
+ 	* gcov-dump.c (dump_gcov_file): Dump also new checksum field.
+ 	* gcov.c (read_graph_file): Read also checksum.
+ 	* doc/invoke.texi: Document the behaviour change.
+ 
+ 2021-10-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple-iterator.h (gsi_iterator_update): Add GSI_LAST_NEW_STMT,
+ 	start at integer value 2.
+ 	* gimple-iterator.c (gsi_insert_seq_nodes_before): Update
+ 	the iterator for GSI_LAST_NEW_STMT.
+ 	(gsi_insert_seq_nodes_after): Likewise.
+ 	* tree-if-conv.c (predicate_statements): Use GSI_LAST_NEW_STMT.
+ 	* tree-ssa.c (execute_update_addresses_taken): Correct bogus
+ 	arguments to gsi_replace.
+ 
+ 2021-10-13  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/102688
+ 	* common.opt: Use EnabledBy instead of detection in
+ 	finish_options and process_options.
+ 	* opts.c (finish_options): Remove handling of
+ 	x_flag_unroll_all_loops.
+ 	* toplev.c (process_options): Likewise for flag_web and
+ 	flag_rename_registers.
+ 
+ 2021-10-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102659
+ 	* tree-if-conv.c (need_to_rewrite_undefined): New flag.
+ 	(if_convertible_gimple_assign_stmt_p): Mark the loop for
+ 	rewrite when stmts with undefined behavior on integer
+ 	overflow appear.
+ 	(combine_blocks): Predicate also when we need to rewrite stmts.
+ 	(predicate_statements): Rewrite affected stmts to something
+ 	with well-defined behavior on overflow.
+ 	(tree_if_conversion): Initialize need_to_rewrite_undefined.
+ 
+ 2021-10-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/102714
+ 	* ipa-sra.c (ptr_parm_has_nonarg_uses): Fix volatileness
+ 	check.
+ 
+ 2021-10-13  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* dwarf2ctf.c: Fix typo in comment.
+ 
+ 2021-10-12  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	PR target/101985
+ 	* config/rs6000/altivec.h (vec_cpsgn): Swap operand order.
+ 	* config/rs6000/rs6000-overload.def (VEC_COPYSIGN): Use SKIP to
+ 	avoid generating an automatic #define of vec_cpsgn.  Use the
+ 	correct built-in for V4SFmode that doesn't depend on VSX.
+ 
+ 2021-10-12  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/85730
+ 	PR target/82524
+ 	* config/i386/i386.md (*add<mode>_1_slp): Rewrite as
+ 	define_insn_and_split pattern.  Add alternative 1 and split it
+ 	post reload to insert operand 1 into the low part of operand 0.
+ 	(*sub<mode>_1_slp): Ditto.
+ 	(*and<mode>_1_slp): Ditto.
+ 	(*<any_or:code><mode>_1_slp): Ditto.
+ 	(*ashl<mode>3_1_slp): Ditto.
+ 	(*<any_shiftrt:insn><mode>3_1_slp): Ditto.
+ 	(*<any_rotate:insn><mode>3_1_slp): Ditto.
+ 	(*neg<mode>_1_slp): New insn_and_split pattern.
+ 	(*one_cmpl<mode>_1_slp): Ditto.
+ 
+ 2021-10-12  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* doc/install.texi: Update MinGW and mingw-64 Binaries
+ 	download links.
+ 
+ 2021-10-12  Daniel Le Duc Khoi Nguyen  <greenrecyclebin@gmail.com>
+ 
+ 	* doc/extend.texi (Common Variable Attributes): Fix typos in
+ 	alloc_size documentation.
+ 
+ 2021-10-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102696
+ 	* tree-vect-slp.c (vect_build_slp_tree_2): Properly mark
+ 	the tree fatally failed when we reject a BIT_FIELD_REF.
+ 
+ 2021-10-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102572
+ 	* tree-vect-stmts.c (vect_build_gather_load_calls): When
+ 	gathering the vectorized defs for the mask pass in the
+ 	desired mask vector type so invariants will be handled
+ 	correctly.
+ 
+ 2021-10-12  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (*fcm<cmp_op><mode>_bic_combine,
+ 	*fcm<cmp_op><mode>_nor_combine, *fcmuo<mode>_bic_combine,
+ 	*fcmuo<mode>_nor_combine): New.
+ 
+ 2021-10-12  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR target/102588
+ 	* config/sparc/sparc-modes.def (OI): New integer mode.
+ 
+ 2021-10-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gimple-fold.h (clear_padding_type_may_have_padding_p): Declare.
+ 	* gimple-fold.c (clear_padding_type_may_have_padding_p): No longer
+ 	static.
+ 
+ 2021-10-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree-vectorizer.h (loop_cost_model): New function.
+ 	(unlimited_cost_model): Use it.
+ 	* tree-vect-loop.c (vect_analyze_loop_costing): Use loop_cost_model
+ 	call instead of flag_vect_cost_model.
+ 	* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Likewise.
+ 	(vect_prune_runtime_alias_test_list): Likewise.  Also use it instead
+ 	of flag_simd_cost_model.
+ 
+ 2021-10-12  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102483
+ 	* config/i386/i386-expand.c (emit_reduc_half): Handle
+ 	V4QImode.
+ 	* config/i386/mmx.md (reduc_<code>_scal_v4qi): New expander.
+ 	(reduc_plus_scal_v4qi): Ditto.
+ 
+ 2021-10-12  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config/rs6000/smmintrin.h (_mm_cmpeq_epi64, _mm_cmpgt_epi64,
+ 	_mm_mullo_epi32, _mm_mul_epi32, _mm_packus_epi32): New.
+ 	* config/rs6000/nmmintrin.h: Copy from i386, tweak to suit.
+ 
+ 2021-10-12  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config/rs6000/smmintrin.h (_mm_cvtepi8_epi16, _mm_cvtepi8_epi32,
+ 	_mm_cvtepi8_epi64, _mm_cvtepi16_epi32, _mm_cvtepi16_epi64,
+ 	_mm_cvtepi32_epi64, _mm_cvtepu8_epi16, _mm_cvtepu8_epi32,
+ 	_mm_cvtepu8_epi64, _mm_cvtepu16_epi32, _mm_cvtepu16_epi64,
+ 	_mm_cvtepu32_epi64): New.
+ 
+ 2021-10-12  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config/rs6000/smmintrin.h (_mm_test_all_zeros,
+ 	_mm_test_all_ones, _mm_test_mix_ones_zeros): Rewrite as macro.
+ 
+ 2021-10-12  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config/rs6000/smmintrin.h (_mm_min_epi8, _mm_min_epu16,
+ 	_mm_min_epi32, _mm_min_epu32, _mm_max_epi8, _mm_max_epu16,
+ 	_mm_max_epi32, _mm_max_epu32): New.
+ 
+ 2021-10-11  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.h (struct modref_access_node): Revert
+ 	accidental change.
+ 	(struct modref_ref_node): Likewise.
+ 
+ 2021-10-11  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.h (modref_tree::global_access_p): New member
+ 	function.
+ 	* ipa-modref.c:
+ 	(implicint_const_eaf_flags,implicit_pure_eaf_flags,
+ 	ignore_stores_eaf_flags): Move to ipa-modref.h
+ 	(remove_useless_eaf_flags): Remove early exit on NOCLOBBER.
+ 	(modref_summary::global_memory_read_p): New member function.
+ 	(modref_summary::global_memory_written_p): New member function.
+ 	* ipa-modref.h (modref_summary::global_memory_read_p,
+ 	modref_summary::global_memory_written_p): Declare.
+ 	(implicint_const_eaf_flags,implicit_pure_eaf_flags,
+ 	ignore_stores_eaf_flags): move here.
+ 	* tree-ssa-structalias.c: Include ipa-modref-tree.h, ipa-modref.h
+ 	and attr-fnspec.h.
+ 	(handle_rhs_call): Rewrite.
+ 	(handle_call_arg): New function.
+ 	(determine_global_memory_access): New function.
+ 	(handle_const_call): Remove
+ 	(handle_pure_call): Remove
+ 	(find_func_aliases_for_call): Update use of handle_rhs_call.
+ 	(compute_points_to_sets): Handle global memory acccesses
+ 	selectively
+ 
+ 2021-10-11  Diane Meirowitz  <diane.meirowitz@oracle.com>
+ 
+ 	* doc/invoke.texi: Add link to UndefinedBehaviorSanitizer
+ 	documentation, mention UBSAN_OPTIONS, similar to what is done
+ 	for AddressSanitizer.
+ 
+ 2021-10-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/102683
+ 	* internal-fn.c (expand_DEFERRED_INIT): Check for mode
+ 	availability before building an integer type for storage
+ 	purposes.
+ 
+ 2021-10-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/101480
+ 	* gimple.c (gimple_call_fnspec): Do not mark operator new/delete
+ 	as const.
+ 
+ 2021-10-11  Martin Liska  <mliska@suse.cz>
+ 
+ 	* common.opt: Remove Init(2) for some options.
+ 	* toplev.c (process_options): Do not use AUTODETECT_VALUE, but
+ 	use rather OPTION_SET_P.
+ 
+ 2021-10-11  Martin Liska  <mliska@suse.cz>
+ 
+ 	* common.opt: Remove usage of IRA_REGION_AUTODETECT.
+ 	* flag-types.h (enum ira_region): Likewise.
+ 	* toplev.c (process_options): Use OPTION_SET_P instead of
+ 	IRA_REGION_AUTODETECT.
+ 
+ 2021-10-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* omp-low.c (omp_runtime_api_call): Handle omp_get_max_teams,
+ 	omp_[sg]et_teams_thread_limit and omp_set_num_teams.
+ 
+ 2021-10-11  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
+ 
+ 	* config/s390/s390-protos.h (s390_rawmemchr): Add prototype.
+ 	* config/s390/s390.c (s390_rawmemchr): New function.
+ 	* config/s390/s390.md (rawmemchr<SINT:mode>): New expander.
+ 	* config/s390/vector.md (@vec_vfees<mode>): Basically a copy of
+ 	the pattern vfees<mode> from vx-builtins.md.
+ 	* config/s390/vx-builtins.md (*vfees<mode>): Remove.
+ 
+ 2021-10-11  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
+ 
+ 	* builtins.c (get_memory_rtx): Change to external linkage.
+ 	* builtins.h (get_memory_rtx): Add function prototype.
+ 	* doc/md.texi (rawmemchr<mode>): Document.
+ 	* internal-fn.c (expand_RAWMEMCHR): Define.
+ 	* internal-fn.def (RAWMEMCHR): Add.
+ 	* optabs.def (rawmemchr_optab): Add.
+ 	* tree-loop-distribution.c (find_single_drs): Change return code
+ 	behaviour by also returning true if no single store was found
+ 	but a single load.
+ 	(loop_distribution::classify_partition): Respect the new return
+ 	code behaviour of function find_single_drs.
+ 	(loop_distribution::execute): Call new function
+ 	transform_reduction_loop in order to replace rawmemchr or strlen
+ 	like loops by calls into builtins.
+ 	(generate_reduction_builtin_1): New function.
+ 	(generate_rawmemchr_builtin): New function.
+ 	(generate_strlen_builtin_1): New function.
+ 	(generate_strlen_builtin): New function.
+ 	(generate_strlen_builtin_using_rawmemchr): New function.
+ 	(reduction_var_overflows_first): New function.
+ 	(determine_reduction_stmt_1): New function.
+ 	(determine_reduction_stmt): New function.
+ 	(loop_distribution::transform_reduction_loop): New function.
+ 
+ 2021-10-11  Martin Liska  <mliska@suse.cz>
+ 
+ 	* tree.c (cl_option_hasher::hash): Use cl_optimization_hash
+ 	and remove legacy hashing code.
+ 
+ 2021-10-11  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	PR target/100316
+ 	* builtins.c (maybe_emit_call_builtin___clear_cache): Allow
+ 	CONST_INT for BEGIN and END, and use gcc_assert rather than
+ 	error.
+ 
+ 2021-10-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/102441
+ 	* var-tracking.c (add_stores): For cselib_sp_derived_value_p values
+ 	use MO_VAL_SET if loc is not sp.
+ 
+ 2021-10-10  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/102622
+ 	* match.pd: Swap the order of a?pow2cst:0 and a?-1:0 transformations.
+ 	Swap the order of a?0:pow2cst and a?0:-1 transformations.
+ 
+ 2021-10-09  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102639
+ 	* config/i386/i386-expand.c (ix86_valid_mask_cmp_mode): Handle
+ 	HFmode.
+ 	(ix86_use_mask_cmp_p): Ditto.
+ 	(ix86_expand_sse_movcc): Ditto.
+ 	* config/i386/i386.md (setcc_hf_mask): New define_insn.
+ 	(movhf_mask): Ditto.
+ 	(UNSPEC_MOVCC_MASK): New unspec.
+ 	* config/i386/sse.md (UNSPEC_PCMP): Move to i386.md.
+ 
+ 2021-10-08  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/102627
+ 	* lra-constraints.c (split_reg): Use at least natural mode of hard reg.
+ 
+ 2021-10-08  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-cache.cc (non_null_ref::non_null_deref_p): Grow
+ 	bitmap if needed.
+ 
+ 2021-10-08  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* value-range.cc (irange::debug): New.
+ 	* value-range.h (irange::debug): New.
+ 
+ 2021-10-08  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/102385
+ 	* predict.h (change_edge_frequency): Declare.
+ 	* predict.c (change_edge_frequency): New function.
+ 	* tree-ssa-loop-manip.h (tree_transform_and_unroll_loop): Remove
+ 	edge argument.
+ 	(tree_unroll_loop): Likewise.
+ 	* gimple-loop-jam.c (tree_loop_unroll_and_jam): Update accordingly.
+ 	* tree-predcom.c (pcom_worker::tree_predictive_commoning_loop):
+ 	Likewise.
+ 	* tree-ssa-loop-prefetch.c (loop_prefetch_arrays): Likewise.
+ 	* tree-ssa-loop-manip.c (tree_unroll_loop): Likewise.
+ 	(tree_transform_and_unroll_loop): Likewise.  Use single_dom_exit
+ 	to retrieve the exit edges.  Make all the old profile update code
+ 	conditional on !single_loop_p -- the case it was written for --
+ 	and use a different approach for the single-loop case.
+ 
+ 2021-10-08  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/alpha/alpha.c (alpha_option_override): Use new macro
+ 	OPTION_SET_P.
+ 	* config/arc/arc.c (arc_override_options): Likewise.
+ 	* config/arm/arm.c (arm_option_override): Likewise.
+ 	* config/bfin/bfin.c (bfin_load_pic_reg): Likewise.
+ 	* config/c6x/c6x.c (c6x_option_override): Likewise.
+ 	* config/csky/csky.c: Likewise.
+ 	* config/darwin.c (darwin_override_options): Likewise.
+ 	* config/frv/frv.c (frv_option_override): Likewise.
+ 	* config/i386/djgpp.h: Likewise.
+ 	* config/i386/i386.c (ix86_stack_protect_guard): Likewise.
+ 	(ix86_max_noce_ifcvt_seq_cost): Likewise.
+ 	* config/ia64/ia64.c (ia64_option_override): Likewise.
+ 	(ia64_override_options_after_change): Likewise.
+ 	* config/m32c/m32c.c (m32c_option_override): Likewise.
+ 	* config/m32r/m32r.c (m32r_init): Likewise.
+ 	* config/m68k/m68k.c (m68k_option_override): Likewise.
+ 	* config/microblaze/microblaze.c (microblaze_option_override): Likewise.
+ 	* config/mips/mips.c (mips_option_override): Likewise.
+ 	* config/nios2/nios2.c (nios2_option_override): Likewise.
+ 	* config/nvptx/nvptx.c (nvptx_option_override): Likewise.
+ 	* config/pa/pa.c (pa_option_override): Likewise.
+ 	* config/riscv/riscv.c (riscv_option_override): Likewise.
+ 	* config/rs6000/aix71.h: Likewise.
+ 	* config/rs6000/aix72.h: Likewise.
+ 	* config/rs6000/aix73.h: Likewise.
+ 	* config/rs6000/rs6000.c (darwin_rs6000_override_options): Likewise.
+ 	(rs6000_override_options_after_change): Likewise.
+ 	(rs6000_linux64_override_options): Likewise.
+ 	(glibc_supports_ieee_128bit): Likewise.
+ 	(rs6000_option_override_internal): Likewise.
+ 	(rs6000_file_start): Likewise.
+ 	(rs6000_darwin_file_start): Likewise.
+ 	* config/rs6000/rtems.h: Likewise.
+ 	* config/rs6000/sysv4.h: Likewise.
+ 	* config/rs6000/vxworks.h (SUB3TARGET_OVERRIDE_OPTIONS): Likewise.
+ 	* config/s390/s390.c (s390_option_override): Likewise.
+ 	* config/sh/linux.h: Likewise.
+ 	* config/sh/netbsd-elf.h (while): Likewise.
+ 	* config/sh/sh.c (sh_option_override): Likewise.
+ 	* config/sol2.c (solaris_override_options): Likewise.
+ 	* config/sparc/sparc.c (sparc_option_override): Likewise.
+ 	* config/tilegx/tilegx.c (tilegx_option_override): Likewise.
+ 	* config/visium/visium.c (visium_option_override): Likewise.
+ 	* config/vxworks.c (vxworks_override_options): Likewise.
+ 	* lto-opts.c (lto_write_options): Likewise.
+ 	* omp-expand.c (expand_omp_simd): Likewise.
+ 	* omp-general.c (omp_max_vf): Likewise.
+ 	* omp-offload.c (oacc_xform_loop): Likewise.
+ 	* opts.h (OPTION_SET_P): Likewise.
+ 	* targhooks.c (default_max_noce_ifcvt_seq_cost): Likewise.
+ 	* toplev.c (process_options): Likewise.
+ 	* tree-predcom.c: Likewise.
+ 	* tree-sra.c (analyze_all_variable_accesses): Likewise.
+ 
+ 2021-10-08  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102464
+ 	* config/i386/i386.c (ix86_optab_supported_p):
+ 	Return true for HFmode.
+ 	* match.pd: Simplify (_Float16) ceil ((double) x) to
+ 	__builtin_ceilf16 (a) when a is _Float16 type and
+ 	direct_internal_fn_supported_p.
+ 
+ 2021-10-08  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102494
+ 	* config/i386/i386-expand.c (emit_reduc_half): Hanlde V4HImode.
+ 	* config/i386/mmx.md (reduc_plus_scal_v4hi): New.
+ 	(reduc_<code>_scal_v4hi): New.
+ 
+ 2021-10-08  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* common.opt (ftree-vectorize): Add Var(flag_tree_vectorize).
+ 	* doc/invoke.texi (Options That Control Optimization): Update
+ 	documents.
+ 	* opts.c (default_options_table): Enable auto-vectorization at
+ 	O2 with very-cheap cost model.
+ 	(finish_options): Use cheap cost model for
+ 	explicit -ftree{,-loop}-vectorize.
+ 
+ 2021-10-07  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* ctfc.c (ctfc_delete_container): Free hash table contents.
+ 
+ 2021-10-07  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* toplev.c (process_options): Do not warn for GNU GIMPLE.
+ 
+ 2021-10-07  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	* tree-object-size.c (addr_object_size,
+ 	compute_builtin_object_size): Drop PDECL and POFF arguments.
+ 	(addr_object_size): Adjust calls.
+ 	* tree-object-size.h (compute_builtin_object_size): Drop PDECL
+ 	and POFF arguments.
+ 
+ 2021-10-07  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* rtl.def (SMUL_HIGHPART, UMUL_HIGHPART): New RTX codes for
+ 	representing signed and unsigned high-part multiplication resp.
+ 	* simplify-rtx.c (simplify_binary_operation_1) [SMUL_HIGHPART,
+ 	UMUL_HIGHPART]: Simplify high-part multiplications by zero.
+ 	[SS_PLUS, US_PLUS, SS_MINUS, US_MINUS, SS_MULT, US_MULT,
+ 	SS_DIV, US_DIV]: Similar simplifications for saturating
+ 	arithmetic.
+ 	(simplify_const_binary_operation) [SS_PLUS, US_PLUS, SS_MINUS,
+ 	US_MINUS, SS_MULT, US_MULT, SMUL_HIGHPART, UMUL_HIGHPART]:
+ 	Implement compile-time evaluation for constant operands.
+ 	* dwarf2out.c (mem_loc_descriptor): Skip SMUL_HIGHPART and
+ 	UMUL_HIGHPART.
+ 	* doc/rtl.texi (smul_highpart, umul_highpart): Document RTX codes.
+ 	* doc/md.texi (smul@var{m}3_highpart, umul@var{m3}_highpart):
+ 	Mention the new smul_highpart and umul_highpart RTX codes.
+ 	* doc/invoke.texi: Silence @xref "compilation" warnings.
+ 
+ 2021-10-07  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/102388
+ 	* ipa-prop.c (ipa_edge_args_sum_t::duplicate): Also handle the
+ 	case when the source reference description corresponds to a
+ 	referance taken in a function src->caller is inlined to.
+ 
+ 2021-10-07  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/102581
+ 	* ipa-modref-tree.h (modref_access_node::contains_p): Handle offsets
+ 	better.
+ 	(modref_access_node::try_merge_with): Add sanity check that there
+ 	are no redundant entries in the list.
+ 
+ 2021-10-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102608
+ 	* tree-ssa-sccvn.c (visit_stmt): Drop .DEFERRED_INIT to
+ 	varying.
+ 
+ 2021-10-07  Martin Liska  <mliska@suse.cz>
+ 
+ 	* toplev.c (toplev::main): Make
+ 	save_opt_decoded_options a pointer type
+ 	* toplev.h: Likewise.
+ 
+ 2021-10-07  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	* config/gcn/gcn-valu.md (gather<mode>_insn_2offsets<exec>): Apply
+ 	HAVE_GCN_ASM_GLOBAL_LOAD_FIXED.
+ 	(scatter<mode>_insn_2offsets<exec_scatter>): Likewise.
+ 
+ 2021-10-07  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	* config/gcn/gcn-hsa.h (SRAMOPT): Include the whole option string.
+ 	Adjust for new -msram-ecc=any behaviour.
+ 	(ASM_SPEC): Adjust -mxnack and -msram-ecc usage.
+ 	* config/gcn/gcn.c (output_file_start): Implement -msram-ecc=any.
+ 	* config/gcn/mkoffload.c (EF_AMDGPU_XNACK): Rename to ...
+ 	(EF_AMDGPU_XNACK_V3): ... this.
+ 	(EF_AMDGPU_SRAM_ECC): Rename to ...
+ 	(EF_AMDGPU_SRAM_ECC_V3): ... this.
+ 	(EF_AMDGPU_FEATURE_XNACK_V4): New.
+ 	(EF_AMDGPU_FEATURE_XNACK_UNSUPPORTED_V4): New.
+ 	(EF_AMDGPU_FEATURE_XNACK_ANY_V4): New.
+ 	(EF_AMDGPU_FEATURE_XNACK_OFF_V4): New.
+ 	(EF_AMDGPU_FEATURE_XNACK_ON_V4): New.
+ 	(EF_AMDGPU_FEATURE_SRAMECC_V4): New.
+ 	(EF_AMDGPU_FEATURE_SRAMECC_UNSUPPORTED_V4): New.
+ 	(EF_AMDGPU_FEATURE_SRAMECC_ANY_V4): New.
+ 	(EF_AMDGPU_FEATURE_SRAMECC_OFF_V4): New.
+ 	(EF_AMDGPU_FEATURE_SRAMECC_ON_V4): New.
+ 	(SET_XNACK_ON): New.
+ 	(SET_XNACK_OFF): New.
+ 	(TEST_XNACK): New.
+ 	(SET_SRAM_ECC_ON): New.
+ 	(SET_SRAM_ECC_ANY): New.
+ 	(SET_SRAM_ECC_OFF): New.
+ 	(TEST_SRAM_ECC_ANY): New.
+ 	(TEST_SRAM_ECC_ON): New.
+ 	(main): Implement HSACOv4 and -msram-ecc=any.
+ 
+ 2021-10-07  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	* config.in: Regenerate.
+ 	* config/gcn/gcn-hsa.h (X_FIJI): New macro.
+ 	(X_900): New macro.
+ 	(X_906): New macro.
+ 	(X_908): New macro.
+ 	(A_FIJI): Rename to ...
+ 	(S_FIJI): ... this.
+ 	(A_900): Rename to ...
+ 	(S_900): ... this.
+ 	(A_906): Rename to ...
+ 	(S_906): ... this.
+ 	(A_908): Rename to ...
+ 	(S_908): ... this.
+ 	(SRAMOPT): New macro.
+ 	(ASM_SPEC): Adjust xnack option usage.
+ 	* config/gcn/gcn.c (output_file_start): Adjust amdgcn_target usage.
+ 	* configure: Regenerate.
+ 	* configure.ac: Detect LLVM assembler dialect.
+ 
+ 2021-10-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Do not elide
+ 	printing '&' when dumping with -gimple.
+ 
+ 2021-10-06  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (non_null_ref::adjust_range): Call new
+ 	intersect routine.
+ 	* gimple-range-fold.cc (adjust_pointer_diff_expr): Ditto.
+ 	(adjust_imagpart_expr): Ditto.
+ 	* value-range.cc (irange::irange_intersect): Call new routine if
+ 	RHS is a single pair.
+ 	(irange::intersect): New wide_int version.
+ 	* value-range.h (class irange): New prototype.
+ 
+ 2021-10-06  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-edge.cc (gimple_outgoing_range::gimple_outgoing_range):
+ 	Add parameter to limit size when recognizing switches.
+ 	(gimple_outgoing_range::edge_range_p): Check size limit.
+ 	* gimple-range-edge.h (gimple_outgoing_range): Add size field.
+ 	* gimple-range-gori.cc (gori_map::calculate_gori): Ignore switches
+ 	that exceed the size limit.
+ 	(gori_compute::gori_compute): Add initializer.
+ 	* params.opt (evrp-switch-limit): New.
+ 	* doc/invoke.texi: Update docs.
+ 
+ 2021-10-06  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-range.h (irange::set_varying): Use TYPE_MIN_VALUE and
+ 	TYPE_MAX_VALUE instead of creating new trees when possible.
+ 
+ 2021-10-06  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (non_null_ref::adjust_range): Check for
+ 	zero and non-zero more efficently.
+ 
+ 2021-10-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR c/102605
+ 	* dumpfile.h (TDF_GIMPLE_VAL): New.
+ 	(dump_flag): Re-order and adjust TDF_* flags.  Make
+ 	the enum uint32_t.  Use std::underlying_type in the
+ 	operator overloads.
+ 	(optgroup_flag): Likewise for the operator overloads.
+ 	* tree-pretty-print.c (dump_generic_node): Wrap ADDR_EXPR
+ 	in _Literal if TDF_GIMPLE_VAL.
+ 	* gimple-pretty-print.c (dump_gimple_assign): Add
+ 	TDF_GIMPLE_VAL to flags when dumping operands where only
+ 	is_gimple_val are allowed.
+ 	(dump_gimple_cond): Likewise.
+ 
+ 2021-10-06  prathamesh.kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	* gimple-isel.cc (gimple_expand_vec_cond_expr): Remove redundant if
+ 	condition.
+ 
+ 2021-10-05  qing zhao  <qing.zhao@oracle.com>
+ 
+ 	PR middle-end/102359
+ 	* gimplify.c (gimplify_decl_expr): Not add initialization for an
+ 	auto variable when it has been initialized by frontend.
+ 
+ 2021-10-05  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadupdate.c (jt_path_registry::cancel_invalid_paths):
+ 	Loosen restrictions
+ 
+ 2021-10-05  Jan-Benedict Glaw  <jbglaw@lug-owl.de>
+ 
+ 	* common/config/avr/avr-common.c (avr_handle_option): Mark
+ 	argument as ATTRIBUTE_UNUSED.
+ 
+ 2021-10-05  Jan-Benedict Glaw  <jbglaw@lug-owl.de>
+ 
+ 	* config/lm32/uclinux-elf.h (LINK_GCC_C_SEQUENCE_SPEC):
+ 	Undefine before redefinition.
+ 
+ 2021-10-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	* toplev.c (no_backend): Remove global var.
+ 	(process_options): Pass in no_backend, move post_options
+ 	langhook call to toplev::main.
+ 	(do_compile): Pass in no_backend, move process_options call
+ 	to toplev::main.
+ 	(toplev::run_self_tests): Check no_backend at the caller.
+ 	(toplev::main): Call post_options and process_options
+ 	split out from do_compile, do self-tests only if
+ 	no_backend is initialized.
+ 
+ 2021-10-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-cfg.c (dump_function_to_file): Dump the UID of the
+ 	function as part of the name when requested.
+ 	* tree-pretty-print.c (dump_function_name): Dump the UID when
+ 	requested and the langhook produced the actual name.
+ 
+ 2021-10-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/102587
+ 	PR middle-end/102285
+ 	* internal-fn.c (expand_DEFERRED_INIT): Fall back to
+ 	zero-initialization as last resort, use the constant
+ 	size as given by the DEFERRED_INIT argument to build
+ 	the initializer.
+ 
+ 2021-10-04  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/97573
+ 	* doc/invoke.texi: Document -Warray-compare.
+ 
+ 2021-10-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimplify.c (is_var_need_auto_init): DECL_HARD_REGISTER
+ 	variables are not to be initialized.
+ 
+ 2021-10-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	* expr.h (non_mem_decl_p): Declare.
+ 	(mem_ref_refers_to_non_mem_p): Likewise.
+ 	* expr.c (non_mem_decl_p): Export.
+ 	(mem_ref_refers_to_non_mem_p): Likewise.
+ 	* internal-fn.c (expand_DEFERRED_INIT): Do not expand the LHS
+ 	but check the base with mem_ref_refers_to_non_mem_p
+ 	and non_mem_decl_p.
+ 
+ 2021-10-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102570
+ 	* tree-ssa-sccvn.h (vn_reference_op_struct): Document
+ 	we are using clique for the internal function code.
+ 	* tree-ssa-sccvn.c (vn_reference_op_eq): Compare the
+ 	internal function code.
+ 	(print_vn_reference_ops): Print the internal function code.
+ 	(vn_reference_op_compute_hash): Hash it.
+ 	(copy_reference_ops_from_call): Record it.
+ 	(visit_stmt): Remove the restriction around internal function
+ 	calls.
+ 	(fully_constant_vn_reference_p): Use fold_const_call and handle
+ 	internal functions.
+ 	(vn_reference_eq): Compare call return types.
+ 	* tree-ssa-pre.c (create_expression_by_pieces): Handle
+ 	generating calls to internal functions.
+ 	(compute_avail): Remove the restriction around internal function
+ 	calls.
+ 
+ 2021-10-04  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/102560
+ 	* gimple-ssa-warn-alloca.c (alloca_call_type): Remove static
+ 	marker for invalid_range.
+ 
+ 2021-10-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/102587
+ 	* internal-fn.c (expand_DEFERRED_INIT): Guard register
+ 	initialization path an avoid initializing VLA registers
+ 	with it.
+ 
+ 2021-10-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* config/rs6000/vxworks.h (TARGET_INIT_LIBFUNCS): Delete.
+ 
+ 2021-10-03  Martin Liska  <mliska@suse.cz>
+ 
+ 	* toplev.c (toplev::main): Check opt_index if it is a part
+ 	of cl_options.
+ 
+ 2021-10-02  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/102563
+ 	* range-op.cc (operator_lshift::op1_range): Do not clobber
+ 	range.
+ 
+ 2021-10-02  Martin Liska  <mliska@suse.cz>
+ 
+ 	* toplev.c (toplev::main): save_decoded_options[0] is program
+ 	name and so it should be skipped.
+ 
+ 2021-10-01  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/102546
+ 	* range-op.cc (operator_lshift::op1_range): Teach range-ops that
+ 	X << Y is non-zero implies X is also non-zero.
+ 
+ 2021-10-01  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+ 
+ 	* config/aarch64/aarch64-cores.def (AARCH64_CORE): New
+ 	Cortex-X2 core.
+ 	* config/aarch64/aarch64-tune.md: Regenerate.
+ 	* doc/invoke.texi: Update docs.
+ 
+ 2021-10-01  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+ 
+ 	* config/aarch64/aarch64-cores.def (AARCH64_CORE): New
+ 	Cortex-A710 core.
+ 	* config/aarch64/aarch64-tune.md: Regenerate.
+ 	* doc/invoke.texi: Update docs.
+ 
+ 2021-10-01  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+ 
+ 	* config/aarch64/aarch64-cores.def (AARCH64_CORE): New
+ 	Cortex-A510 core.
+ 	* config/aarch64/aarch64-tune.md: Regenerate.
+ 	* doc/invoke.texi: Update docs.
+ 
+ 2021-10-01  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR c/102103
+ 	* doc/invoke.texi (-Waddress): Update.
+ 	* gengtype.c (write_types): Avoid -Waddress.
+ 	* poly-int.h (POLY_SET_COEFF): Avoid using null.
+ 
+ 2021-10-01  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	PR debug/102373
+ 	* config/pa/pa.c (pa_option_override): Default to dwarf version 4
+ 	on hppa64-hpux.
+ 
+ 2021-10-01  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+ 
+ 	* config/aarch64/aarch64.h (AARCH64_FL_V9): Update value.
+ 
+ 2021-10-01  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::compute_ranges): Use
+ 	get_path_oracle.
+ 	* gimple-range-path.h (class path_range_query): Remove shadowed
+ 	m_oracle field.
+ 	(path_range_query::get_path_oracle): New.
+ 
+ 2021-10-01  Jakub Jelinek  <jakub@redhat.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	PR sanitizer/102515
+ 	* doc/invoke.texi (-fsanitize=integer-divide-by-zero): Remove
+ 	INT_MIN / -1 division detection from here ...
+ 	(-fsanitize=signed-integer-overflow): ... and add it here.
+ 
+ 2021-10-01  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+ 
+ 	* config/aarch64/aarch64-arches.def (AARCH64_ARCH): Added
+ 	armv9-a.
+ 	* config/aarch64/aarch64.h (AARCH64_FL_V9): New.
+ 	(AARCH64_FL_FOR_ARCH9): New flags for Armv9-A.
+ 	(AARCH64_ISA_V9): New ISA flag.
+ 	* doc/invoke.texi: Update docs.
+ 
+ 2021-10-01  Martin Liska  <mliska@suse.cz>
+ 
+ 	* toplev.c (toplev::main): Save decoded optimization options.
+ 	* toplev.h (save_opt_decoded_options): New.
+ 	* doc/extend.texi: Be more clear about optimize and target
+ 	attributes.
+ 
+ 2021-10-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* explow.c: Include langhooks.h.
+ 	(set_stack_check_libfunc): Build a proper function type.
+ 
+ 2021-10-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR c++/64697
+ 	* config/i386/i386.c (legitimate_pic_address_disp_p): For PE-COFF do
+ 	not return true for external weak function symbols in medium model.
+ 
+ 2021-10-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree.h (OMP_CLAUSE_ORDER_REPRODUCIBLE): Define.
+ 	* tree-pretty-print.c (dump_omp_clause) <case OMP_CLAUSE_ORDER>: Print
+ 	reproducible: for OMP_CLAUSE_ORDER_REPRODUCIBLE.
+ 	* omp-general.c (omp_extract_for_data): If OMP_CLAUSE_ORDER is seen
+ 	without OMP_CLAUSE_ORDER_UNCONSTRAINED, overwrite sched_kind to
+ 	OMP_CLAUSE_SCHEDULE_STATIC.
+ 
+ 2021-10-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/102518
+ 	* tree-inline.c (setup_one_parameter): Avoid substituting
+ 	an invariant into contexts where a GIMPLE register is not valid.
+ 
+ 2021-09-30  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
+ 
+ 	* config/arm/arm-cpus.in: Add Cortex-R52+ CPU.
+ 	* config/arm/arm-tables.opt: Regenerate.
+ 	* config/arm/arm-tune.md: Regenerate.
+ 	* doc/invoke.texi: Update docs.
+ 
+ 2021-09-30  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/89954
+ 	* config/i386/i386.md
+ 	(sign_extend:WIDE (any_logic:NARROW (memory, immediate)) splitters):
+ 	New splitters.
+ 
+ 2021-09-30  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* omp-low.c (omp_runtime_api_call): Add omp_aligned_{,c}alloc and
+ 	omp_{c,re}alloc, fix omp_alloc/omp_free.
+ 
+ 2021-09-30  Martin Liska  <mliska@suse.cz>
+ 
+ 	* defaults.h (ASM_OUTPUT_ASCII): Do not hide global variable
+ 	asm_out_file and stream directly to MYFILE.
+ 
+ 2021-09-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-data-refs.c (vect_update_misalignment_for_peel):
+ 	Restore and fix condition under which we apply npeel to
+ 	the DRs misalignment value.
+ 
+ 2021-09-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-data-refs.c (vect_update_misalignment_for_peel):
+ 	Fix npeel check for variable amount of peeling.
+ 
+ 2021-09-30  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* lto-wrapper.c (run_gcc): Plug snprintf overflow.
+ 
+ 2021-09-30  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range.cc (gimple_ranger::debug): New.
+ 	* gimple-range.h (class gimple_ranger): Add debug.
+ 
+ 2021-09-30  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR middle-end/102519
+ 	* tree-vrp.c (hybrid_threader::~hybrid_threader): Free m_query.
+ 
+ 2021-09-29  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	PR debug/102507
+ 	* btfout.c (GTY): Add GTY (()) albeit for cosmetic only purpose.
+ 	(btf_finalize): Empty the hash_map btf_var_ids.
+ 
+ 2021-09-29  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-vrp.c (thread_through_all_blocks): Return bool.
+ 	(execute_vrp_threader): Return TODO_* flags.
+ 	(pass_data_vrp_threader): Set todo_flags_finish to 0.
+ 
+ 2021-09-29  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* timevar.def (TV_TREE_VRP_THREADER): New.
+ 	* tree-vrp.c: Use TV_TREE_VRP_THREADER for VRP threader pass.
+ 
+ 2021-09-29  David Faust  <david.faust@oracle.com>
+ 
+ 	* config.gcc (bpf-*-*): Do not overwrite extra_headers.
+ 
+ 2021-09-29  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c (TYPES_BINOP_PPU): Define
+ 	new type qualifier enum.
+ 	(TYPES_TERNOP_SSSU): Likewise.
+ 	(TYPES_TERNOP_PPPU): Likewise.
+ 	* config/aarch64/aarch64-simd-builtins.def: Define PPU, SSU,
+ 	PPPU and SSSU builtin generator macros for qtbl1 and qtbx1
+ 	Neon builtins.
+ 	* config/aarch64/arm_neon.h (vqtbl1_p8): Use type-qualified
+ 	builtin and remove casts.
+ 	(vqtbl1_s8): Likewise.
+ 	(vqtbl1q_p8): Likewise.
+ 	(vqtbl1q_s8): Likewise.
+ 	(vqtbx1_s8): Likewise.
+ 	(vqtbx1_p8): Likewise.
+ 	(vqtbx1q_s8): Likewise.
+ 	(vqtbx1q_p8): Likewise.
+ 	(vtbl1_p8): Likewise.
+ 	(vtbl2_p8): Likewise.
+ 	(vtbx2_p8): Likewise.
+ 
+ 2021-09-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-data-refs.c (vect_dr_misalign_for_aligned_access):
+ 	New helper.
+ 	(vect_update_misalignment_for_peel): Use it to update
+ 	misaligned to the value necessary for an aligned access.
+ 	(vect_get_peeling_costs_all_drs): Likewise.
+ 	(vect_enhance_data_refs_alignment): Likewise.
+ 
+ 2021-09-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_expand_cpymem): Count number of
+ 	emitted operations and adjust heuristic for code size.
+ 
+ 2021-09-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_expand_setmem): Count number of
+ 	emitted operations and adjust heuristic for code size.
+ 
+ 2021-09-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/102504
+ 	* gimplify.c (gimplify_scan_omp_clauses): Use omp_check_private even
+ 	in OMP_SCOPE clauses, not just on worksharing construct clauses.
+ 
+ 2021-09-28  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* config/riscv/riscv.md	(mulv<mode>4): Call gen_smul<mode>3_highpart.
+ 	(<u>mulditi3): Call <su>muldi3_highpart.
+ 	(<u>muldi3_highpart): Rename to <su>muldi3_highpart.
+ 	(<u>mulsidi3): Call <su>mulsi3_highpart.
+ 	(<u>mulsi3_highpart): Rename to <su>mulsi3_highpart.
+ 
+ 2021-09-28  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.h (DSYMUTIL_SPEC): Recognize D sources.
+ 
+ 2021-09-28  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/rs6000/darwin.h (FIXED_R13): Add for PPC64.
+ 	(FIRST_SAVED_GP_REGNO): Save from R13 even when it is one
+ 	of the fixed regs.
+ 
+ 2021-09-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64.h (AARCH64_FL_LS64): Define
+ 	(AARCH64_FL_V8_7): Likewise.
+ 	(AARCH64_FL_FOR_ARCH8_7): Likewise.
+ 	* config/aarch64/aarch64-arches.def (armv8.7-a): Define.
+ 	* config/aarch64/aarch64-option-extensions.def (ls64): Define.
+ 	* doc/invoke.texi: Document the above.
+ 
+ 2021-09-28  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* dbgcnt.c (dbg_cnt_counter): New.
+ 	* dbgcnt.h (dbg_cnt_counter): New.
+ 	* dumpfile.c (dump_options): Add entry for TDF_THREADING.
+ 	* dumpfile.h (enum dump_flag): Add TDF_THREADING.
+ 	* gimple-range-path.cc (DEBUG_SOLVER): Use TDF_THREADING.
+ 	* tree-ssa-threadupdate.c (dump_jump_thread_path): Dump out
+ 	debug counter.
+ 
+ 2021-09-28  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* cfgcleanup.c (pass_jump::execute): Check
+ 	flag_expensive_optimizations.
+ 	(pass_jump_after_combine::gate): Same.
+ 	* doc/invoke.texi (-fthread-jumps): Enable for -O1.
+ 	* opts.c (default_options_table): Enable -fthread-jumps at -O1.
+ 	* tree-ssa-threadupdate.c
+ 	(fwd_jt_path_registry::remove_jump_threads_including): Bail unless
+ 	flag_thread_jumps.
+ 
+ 2021-09-28  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* tree-ssa-reassoc.c (biased_names): New global.
+ 	(propagate_bias_p): New function.
+ 	(loop_carried_phi): Remove.
+ 	(propagate_rank): Propagate bias along single uses.
+ 	(get_rank): Update biased_names when needed.
+ 
+ 2021-09-28  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* passes.def (pass_reassoc): Rename parameter to early_p.
+ 	* tree-ssa-reassoc.c (reassoc_bias_loop_carried_phi_ranks_p):
+ 	New variable.
+ 	(phi_rank): Don't bias loop-carried phi ranks
+ 	before vectorization pass.
+ 	(execute_reassoc): Add bias_loop_carried_phi_ranks_p parameter.
+ 	(pass_reassoc::pass_reassoc): Add bias_loop_carried_phi_ranks_p
+ 	initializer.
+ 	(pass_reassoc::set_param): Set bias_loop_carried_phi_ranks_p
+ 	value.
+ 	(pass_reassoc::execute): Pass bias_loop_carried_phi_ranks_p to
+ 	execute_reassoc.
+ 	(pass_reassoc::bias_loop_carried_phi_ranks_p): New member.
+ 
+ 2021-09-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/102498
+ 	* config/i386/i386.c (standard_80387_constant_p): Don't recognize
+ 	special 80387 instruction XFmode constants if flag_rounding_math.
+ 
+ 2021-09-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100112
+ 	* tree-ssa-sccvn.c (visit_reference_op_load): Record the
+ 	referece into the hashtable twice in case last_vuse is
+ 	different from the original vuse on the stmt.
+ 
+ 2021-09-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/102492
+ 	* gimplify.c (gimplify_adjust_omp_clauses_1): Don't call the
+ 	omp_finish_clause langhook on implicitly added OMP_CLAUSE_PRIVATE
+ 	clauses on SIMD constructs.
+ 
+ 2021-09-28  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/102511
+ 	* gimple-range-path.cc (path_range_query::range_on_path_entry):
+ 	Return VARYING when nothing found.
+ 
+ 2021-09-28  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	PR target/102230
+ 	* config/i386/i386.h (VALID_AVX512FP16_REG_MODE): Add
+ 	V2HF mode check.
+ 	(VALID_SSE2_REG_VHF_MODE): Add V4HFmode and V2HFmode.
+ 	(VALID_MMX_REG_MODE): Add V4HFmode.
+ 	(SSE_REG_MODE_P): Replace VALID_AVX512FP16_REG_MODE with
+ 	vector mode condition.
+ 	* config/i386/i386.c (classify_argument): Parse V4HF/V2HF
+ 	via sse regs.
+ 	(function_arg_32): Add V4HFmode.
+ 	(function_arg_advance_32): Likewise.
+ 	* config/i386/i386.md (mode): Add V4HF/V2HF.
+ 	(MODE_SIZE): Likewise.
+ 	* config/i386/mmx.md (MMXMODE): Add V4HF mode.
+ 	(V_32): Add V2HF mode.
+ 	(VHF_32_64): New mode iterator.
+ 	(*mov<mode>_internal): Adjust sse alternatives to support
+ 	V4HF mode move.
+ 	(*mov<mode>_internal): Adjust sse alternatives to support
+ 	V2HF mode move.
+ 	(<insn><mode>3): New define_insn for add/sub/mul/div.
+ 
+ 2021-09-28  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (pass_thread_jumps::gate): Check
+ 	flag_thread_jumps.
+ 	(pass_early_thread_jumps::gate): Same.
+ 	* tree-ssa-threadedge.c (jump_threader::thread_outgoing_edges):
+ 	Return if !flag_thread_jumps.
+ 	* tree-ssa-threadupdate.c
+ 	(jt_path_registry::register_jump_thread): Assert that
+ 	flag_thread_jumps is true.
+ 
+ 2021-09-28  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* simplify-rtx.c
+ 	(simplify_context::simplify_binary_operation_1): Relax
+ 	condition of simplifying (vec_concat:M (vec_select op0
+ 	index0)(vec_select op1 index1)) to allow different modes
+ 	between op0 and M, but have same inner mode.
+ 
+ 2021-09-28  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386-expand.c (emit_reduc_half): Handle
+ 	V8HF/V16HF/V32HFmode.
+ 	* config/i386/sse.md (REDUC_SSE_PLUS_MODE): Add V8HF.
+ 	(REDUC_SSE_SMINMAX_MODE): Ditto.
+ 	(REDUC_PLUS_MODE): Add V16HF and V32HF.
+ 	(REDUC_SMINMAX_MODE): Ditto.
+ 
+ 2021-09-27  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc
+ 	(path_range_query::precompute_ranges_in_block): Rename to...
+ 	(path_range_query::compute_ranges_in_block): ...this.
+ 	(path_range_query::precompute_ranges): Rename to...
+ 	(path_range_query::compute_ranges): ...this.
+ 	(path_range_query::precompute_relations): Rename to...
+ 	(path_range_query::compute_relations): ...this.
+ 	(path_range_query::precompute_phi_relations): Rename to...
+ 	(path_range_query::compute_phi_relations): ...this.
+ 	* gimple-range-path.h: Rename precompute* to compute*.
+ 	* tree-ssa-threadbackward.c
+ 	(back_threader::find_taken_edge_switch): Same.
+ 	(back_threader::find_taken_edge_cond): Same.
+ 	* tree-ssa-threadedge.c
+ 	(hybrid_jt_simplifier::compute_ranges_from_state): Same.
+ 	(hybrid_jt_state::register_equivs_stmt): Inline...
+ 	* tree-ssa-threadedge.h: ...here.
+ 
+ 2021-09-27  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-vrp.c (lhs_of_dominating_assert): Remove.
+ 	(class vrp_jt_state): Remove.
+ 	(class vrp_jt_simplifier): Remove.
+ 	(vrp_jt_simplifier::simplify): Remove.
+ 	(class vrp_jump_threader): Remove.
+ 	(vrp_jump_threader::vrp_jump_threader): Remove.
+ 	(vrp_jump_threader::~vrp_jump_threader): Remove.
+ 	(vrp_jump_threader::before_dom_children): Remove.
+ 	(vrp_jump_threader::after_dom_children): Remove.
+ 
+ 2021-09-27  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* passes.def (pass_vrp_threader): New.
+ 	* tree-pass.h (make_pass_vrp_threader): Add make_pass_vrp_threader.
+ 	* tree-ssa-threadedge.c (hybrid_jt_state::register_equivs_stmt): New.
+ 	(hybrid_jt_simplifier::hybrid_jt_simplifier): New.
+ 	(hybrid_jt_simplifier::simplify): New.
+ 	(hybrid_jt_simplifier::compute_ranges_from_state): New.
+ 	* tree-ssa-threadedge.h (class hybrid_jt_state): New.
+ 	(class hybrid_jt_simplifier): New.
+ 	* tree-vrp.c (execute_vrp): Remove ASSERT_EXPR based jump
+ 	threader.
+ 	(class hybrid_threader): New.
+ 	(hybrid_threader::hybrid_threader): New.
+ 	(hybrid_threader::~hybrid_threader): New.
+ 	(hybrid_threader::before_dom_children): New.
+ 	(hybrid_threader::after_dom_children): New.
+ 	(execute_vrp_threader): New.
+ 	(class pass_vrp_threader): New.
+ 	(make_pass_vrp_threader): New.
+ 
+ 2021-09-27  Martin Liska  <mliska@suse.cz>
+ 
+ 	* output.h (enum section_flag): New.
+ 	(SECTION_FORGET): Remove.
+ 	(SECTION_ENTSIZE): Make it (1UL << 8) - 1.
+ 	(SECTION_STYLE_MASK): Define it based on other enum
+ 	values.
+ 	* varasm.c (switch_to_section): Remove unused handling of
+ 	SECTION_FORGET.
+ 
+ 2021-09-27  Martin Liska  <mliska@suse.cz>
+ 
+ 	* common.opt: Add new variable flag_default_complex_method.
+ 	* opts.c (finish_options): Handle flags related to
+ 	  x_flag_complex_method.
+ 	* toplev.c (process_options): Remove option handling related
+ 	to flag_complex_method.
+ 
+ 2021-09-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/102450
+ 	* gimple-fold.c (gimple_fold_builtin_memory_op): Avoid using
+ 	type_for_size, instead use int_mode_for_size.
+ 
+ 2021-09-27  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR c/94726
+ 	* gimplify.c (gimplify_save_expr): Return early
+ 	if the type of val is error_mark_node.
+ 
+ 2021-09-27  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssanames.c (ssa_name_has_boolean_range): Use
+ 	get_range_query.
+ 
+ 2021-09-27  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-ssa-evrp-analyze.h (class evrp_range_analyzer): Remove
+ 	vrp_visit_cond_stmt.
+ 	* tree-ssa-dom.c (cprop_operand): Convert to range_query API.
+ 	(cprop_into_stmt): Same.
+ 	(dom_opt_dom_walker::optimize_stmt): Same.
+ 
+ 2021-09-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/97351
+ 	PR tree-optimization/97352
+ 	PR tree-optimization/82426
+ 	* tree-vectorizer.h (dr_misalignment): Add vector type
+ 	argument.
+ 	(aligned_access_p): Likewise.
+ 	(known_alignment_for_access_p): Likewise.
+ 	(vect_supportable_dr_alignment): Likewise.
+ 	(vect_known_alignment_in_bytes): Likewise.  Refactor.
+ 	(DR_MISALIGNMENT): Remove.
+ 	(vect_update_shared_vectype): Likewise.
+ 	* tree-vect-data-refs.c (dr_misalignment): Refactor, handle
+ 	a vector type with larger alignment requirement and apply
+ 	the negative step adjustment here.
+ 	(vect_calculate_target_alignment): Remove.
+ 	(vect_compute_data_ref_alignment): Get explicit vector type
+ 	argument, do not apply a negative step alignment adjustment
+ 	here.
+ 	(vect_slp_analyze_node_alignment): Re-analyze alignment
+ 	when we re-visit the DR with a bigger desired alignment but
+ 	keep more precise results from smaller alignments.
+ 	* tree-vect-slp.c (vect_update_shared_vectype): Remove.
+ 	(vect_slp_analyze_node_operations_1): Do not update the
+ 	shared vector type on stmts.
+ 	* tree-vect-stmts.c (vect_analyze_stmt): Push/pop the
+ 	vector type of an SLP node to the representative stmt-info.
+ 	(vect_transform_stmt): Likewise.
+ 
+ 2021-09-27  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Revert:
+ 	2021-09-09  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/101059
+ 	* config/i386/sse.md (reduc_plus_scal_<mode>): Split to ..
+ 	(reduc_plus_scal_v4sf): .. this, New define_expand.
+ 	(reduc_plus_scal_v2df): .. and this, New define_expand.
+ 
+ 2021-09-26  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* doc/extend.texi (Half-Precision): Remove storage only
+ 	description for _Float16 w/o avx512fp16.
+ 
+ 2021-09-25  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	* config/pru/constraints.md (Rrio): New constraint.
+ 	* config/pru/predicates.md (regio_operand): New predicate.
+ 	* config/pru/pru-pragma.c (pru_register_pragmas): Register
+ 	the __regio_symbol address space.
+ 	* config/pru/pru-protos.h (pru_symref2ioregno): Declaration.
+ 	* config/pru/pru.c (pru_symref2ioregno): New helper function.
+ 	(pru_legitimate_address_p): Remove.
+ 	(pru_addr_space_legitimate_address_p): Use the address space
+ 	aware hook variant.
+ 	(pru_nongeneric_pointer_addrspace): New helper function.
+ 	(pru_insert_attributes): New function to validate __regio_symbol
+ 	usage.
+ 	(TARGET_INSERT_ATTRIBUTES): New macro.
+ 	(TARGET_LEGITIMATE_ADDRESS_P): Remove.
+ 	(TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): New macro.
+ 	* config/pru/pru.h (enum reg_class): Add REGIO_REGS class.
+ 	* config/pru/pru.md (*regio_readsi): New pattern to read I/O
+ 	registers.
+ 	(*regio_nozext_writesi): New pattern to write to I/O registers.
+ 	(*regio_zext_write_r30<EQS0:mode>): Ditto.
+ 	* doc/extend.texi: Document the new PRU Named Address Space.
+ 
+ 2021-09-24  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/98216
+ 	PR c++/91292
+ 	* real.c (encode_ieee_double): Avoid unwanted sign extension.
+ 	(encode_ieee_quad): Likewise.
+ 
+ 2021-09-24  Vladimir Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/102147
+ 	* ira-build.c (ira_conflict_vector_profitable_p): Make
+ 	profitability calculation independent of host compiler pointer and
+ 	IRA_INT_BITS sizes.
+ 
+ 2021-09-24  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::path_range_query):
+ 	Move debugging header...
+ 	(path_range_query::precompute_ranges): ...here.
+ 	(path_range_query::internal_range_of_expr): Do not call
+ 	range_on_path_entry if NAME is defined in the current block.
+ 
+ 2021-09-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	* cfghooks.c (verify_flow_info): Verify unallocated BB and
+ 	edge flags are not set.
+ 
+ 2021-09-24  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadupdate.c (jt_path_registry::cancel_invalid_paths):
+ 	New.
+ 	(jt_path_registry::register_jump_thread): Call
+ 	cancel_invalid_paths.
+ 	* tree-ssa-threadupdate.h (class jt_path_registry): Add
+ 	cancel_invalid_paths.
+ 
+ 2021-09-24  Feng Xue  <fxue@os.amperecomputing.com>
+ 
+ 	PR tree-optimization/102400
+ 	* tree-ssa-sccvn.c (vn_reference_insert_pieces): Initialize
+ 	result_vdef to zero value.
+ 
+ 2021-09-24  Feng Xue  <fxue@os.amperecomputing.com>
+ 
+ 	PR tree-optimization/102451
+ 	* tree-ssa-dse.c (delete_dead_or_redundant_call): Record bb of stmt
+ 	before removal.
+ 
+ 2021-09-24  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/sse.md (cond_<insn><mode>): Extend to support
+ 	vector HFmodes.
+ 	(cond_mul<mode>): Likewise.
+ 	(cond_div<mode>): Likewise.
+ 	(cond_<code><mode>): Likewise.
+ 	(cond_fma<mode>): Likewise.
+ 	(cond_fms<mode>): Likewise.
+ 	(cond_fnma<mode>): Likewise.
+ 	(cond_fnms<mode>): Likewise.
+ 
+ 2021-09-23  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/102463
+ 	* gimple-range-fold.cc (fold_using_range::relation_fold_and_or): If
+ 	there is no range-ops handler, don't look for a relation.
+ 
+ 2021-09-23  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::ranger_cache): Take
+ 	non-executable_edge flag as parameter.
+ 	* gimple-range-cache.h (ranger_cache): Adjust prototype.
+ 	* gimple-range-gori.cc (gori_compute::gori_compute): Take
+ 	non-executable_edge flag as parameter.
+ 	(gori_compute::outgoing_edge_range_p): Check new flag.
+ 	* gimple-range-gori.h (gori_compute): Adjust prototype.
+ 	* gimple-range.cc (gimple_ranger::gimple_ranger): Create new flag.
+ 	(gimple_ranger::range_on_edge): Check new flag.
+ 	* gimple-range.h (gimple_ranger::non_executable_edge_flag): New.
+ 	* gimple-ssa-evrp.c (rvrp_folder): Pass ranger flag to simplifer.
+ 	(hybrid_folder::hybrid_folder): Set ranger non-executable flag value.
+ 	(hybrid_folder::fold_stmt): Set flag value in the simplifer.
+ 	* vr-values.c (simplify_using_ranges::set_and_propagate_unexecutable):
+ 	Use not_executable flag if provided inmstead of EDGE_EXECUTABLE.
+ 	(simplify_using_ranges::simplify_switch_using_ranges): Clear
+ 	EDGE_EXECUTABLE like it originally did.
+ 	(simplify_using_ranges::cleanup_edges_and_switches): Clear any
+ 	NON_EXECUTABLE flags.
+ 	(simplify_using_ranges::simplify_using_ranges): Adjust.
+ 	* vr-values.h (class simplify_using_ranges): Adjust.
+ 	(simplify_using_ranges::set_range_query): Add non-executable flag param.
+ 
+ 2021-09-23  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	PR target/102024
+ 	* config/rs6000/rs6000-call.c (rs6000_aggregate_candidate): Detect
+ 	zero-width bit fields and return indicator.
+ 	(rs6000_discover_homogeneous_aggregate): Diagnose when the
+ 	presence of a zero-width bit field changes parameter passing in
+ 	GCC 12.
+ 
+ 2021-09-23  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-fold.cc (fold_using_range::range_of_phi):
+ 	Remove dominator check.
+ 
+ 2021-09-23  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::precompute_relations):
+ 	Hoist edge calculations before using EDGE_SUCC.
+ 
+ 2021-09-23  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* configure.ac: Fix --with-multilib-list description.
+ 	* configure: Regenerate.
+ 
+ 2021-09-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102448
+ 	* tree-vect-data-refs.c (vect_duplicate_ssa_name_ptr_info):
+ 	Clear alignment info copied from DR_PTR_INFO.
+ 
+ 2021-09-23  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_use_mask_cmp_p): Enable
+ 	HFmode mask_cmp.
+ 	* config/i386/sse.md (sseintvecmodelower): Add HF vector modes.
+ 	(<avx512>_store<mode>_mask): Extend to support HF vector modes.
+ 	(vec_cmp<mode><avx512fmaskmodelower>): Likewise.
+ 	(vcond_mask_<mode><avx512fmaskmodelower>): Likewise.
+ 	(vcond<mode><mode>): New expander.
+ 	(vcond<mode><sseintvecmodelower>): Likewise.
+ 	(vcond<sseintvecmodelower><mode>): Likewise.
+ 	(vcondu<mode><sseintvecmodelower>): Likewise.
+ 
+ 2021-09-23  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/sse.md (extend<ssePHmodelower><mode>2):
+ 	New expander.
+ 	(extendv4hf<mode>2): Likewise.
+ 	(extendv2hfv2df2): Likewise.
+ 	(trunc<mode><ssePHmodelower>2): Likewise.
+ 	(avx512fp16_vcvt<castmode>2ph_<mode>): Rename to ...
+ 	(trunc<mode>v4hf2): ... this, and drop constraints.
+ 	(avx512fp16_vcvtpd2ph_v2df): Rename to ...
+ 	(truncv2dfv2hf2): ... this, and likewise.
+ 
+ 2021-09-23  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/sse.md (float<floatunssuffix><mode><ssePHmodelower>2):
+ 	New expander.
+ 	(avx512fp16_vcvt<floatsuffix><sseintconvert>2ph_<mode>):
+ 	Rename to ...
+ 	(float<floatunssuffix><mode>v4hf2): ... this, and drop constraints.
+ 	(avx512fp16_vcvt<floatsuffix>qq2ph_v2di): Rename to ...
+ 	(float<floatunssuffix>v2div2hf2): ... this, and likewise.
+ 
+ 2021-09-23  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/i386.md (fix<fixunssuffix>_trunchf<mode>2): New expander.
+ 	(fixuns_trunchfhi2): Likewise.
+ 	(*fixuns_trunchfsi2zext): New define_insn.
+ 	* config/i386/sse.md (ssePHmodelower): New mode_attr.
+ 	(fix<fixunssuffix>_trunc<ssePHmodelower><mode>2):
+ 	New expander for same element vector fix_truncate.
+ 	(fix<fixunssuffix>_trunc<ssePHmodelower><mode>2):
+ 	Likewise for V4HF to V4SI/V4DI fix_truncate.
+ 	(fix<fixunssuffix>_truncv2hfv2di2):
+ 	Likeise for V2HF to V2DI fix_truncate.
+ 
+ 2021-09-23  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/i386.md (<code>hf3): New expander.
+ 
+ 2021-09-23  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/sse.md (FMAMODEM): extend to handle FP16.
+ 	(VFH_SF_AVX512VL): Extend to handle HFmode.
+ 	(VF_SF_AVX512VL): Deleted.
+ 
+ 2021-09-23  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386.md (rinthf2): New expander.
+ 	(nearbyinthf2): New expander.
+ 
+ 2021-09-23  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-dom.c (class dom_jump_threader_simplifier): Rename...
+ 	(class dom_jt_state): ...this and provide virtual overrides.
+ 	(dom_jt_state::register_equiv): New.
+ 	(class dom_jt_simplifier): Rename from
+ 	dom_jump_threader_simplifier.
+ 	(dom_jump_threader_simplifier::simplify): Rename...
+ 	(dom_jt_simplifier::simplify): ...to this.
+ 	(pass_dominator::execute): Use dom_jt_simplifier and
+ 	dom_jt_state.
+ 	* tree-ssa-threadedge.c (jump_threader::jump_threader):
+ 	Clean-up.
+ 	(jt_state::register_equivs_stmt): Abstract out...
+ 	(jump_threader::record_temporary_equivalences_from_stmts_at_dest):
+ 	...from here.
+ 	(jump_threader::thread_around_empty_blocks): Update state.
+ 	(jump_threader::thread_through_normal_block): Same.
+ 	(jt_state::jt_state): Remove.
+ 	(jt_state::push): Remove pass specific bits.  Keep block vector
+ 	updated.
+ 	(jt_state::append_path): New.
+ 	(jt_state::pop): Remove pass specific bits.
+ 	(jt_state::register_equiv): Same.
+ 	(jt_state::record_ranges_from_stmt): Same.
+ 	(jt_state::register_equivs_on_edge): Same.  Rename...
+ 	(jt_state::register_equivs_edge):  ...to this.
+ 	(jt_state::dump): New.
+ 	(jt_state::debug): New.
+ 	(jump_threader_simplifier::simplify): Remove.
+ 	(jt_state::get_path): New.
+ 	* tree-ssa-threadedge.h (class jt_simplifier): Make into a base
+ 	class.  Expose common functionality as virtual methods.
+ 	(class jump_threader_simplifier): Same.  Rename...
+ 	(class jt_simplifier): ...to this.
+ 	* tree-vrp.c (class vrp_jump_threader_simplifier): Rename...
+ 	(class vrp_jt_simplifier): ...to this. Provide pass specific
+ 	overrides.
+ 	(class vrp_jt_state): New.
+ 	(vrp_jump_threader_simplifier::simplify): Rename...
+ 	(vrp_jt_simplifier::simplify): ...to this.  Inline code from
+ 	what used to be the base class.
+ 	(vrp_jump_threader::vrp_jump_threader): Use vrp_jt_state and
+ 	vrp_jt_simplifier.
+ 
+ 2021-09-22  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	PR fortran/55534
+ 	* doc/invoke.texi (-Wno-missing-include-dirs.): Document Fortran
+ 	behavior.
+ 
+ 2021-09-22  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	* match.pd (negation simplifications): Implement some negation
+ 	folding transformations from fold-const.c's fold_negate_expr.
+ 	* tree-ssa-sccvn.c (vn_nary_build_or_lookup_1): Add a SIMPLIFY
+ 	argument, to control whether the op should be simplified prior
+ 	to looking up/assigning a value number.
+ 	(vn_nary_build_or_lookup): Update call to vn_nary_build_or_lookup_1.
+ 	(vn_nary_simplify): Likewise.
+ 	(visit_nary_op): Likewise, but when constructing a NEGATE_EXPR
+ 	now call vn_nary_build_or_lookup_1 disabling simplification.
+ 
+ 2021-09-22  Jiufu Guo  <guojiufu@linux.ibm.com>
+ 
+ 	PR tree-optimization/102087
+ 	* tree-ssa-loop-niter.c (number_of_iterations_until_wrap):
+ 	Update bound/cmp/control for niter.
+ 
+ 2021-09-22  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-fold.cc (fold_using_range::range_of_range_op):
+ 	Move check for non-empty BB here.
+ 	(fur_source::register_outgoing_edges): ...from here.
+ 
+ 2021-09-22  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::internal_range_of_expr):
+ 	Remove call to improve_range_with_equivs.
+ 	(path_range_query::improve_range_with_equivs): Remove
+ 	* gimple-range-path.h: Remove improve_range_with_equivs.
+ 
+ 2021-09-22  dianhong xu  <dianhong.xu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h:
+ 	(_mm512_mask_blend_ph): New intrinsic.
+ 	(_mm512_permutex2var_ph): Ditto.
+ 	(_mm512_permutexvar_ph): Ditto.
+ 	* config/i386/avx512fp16vlintrin.h:
+ 	(_mm256_mask_blend_ph): New intrinsic.
+ 	(_mm256_permutex2var_ph): Ditto.
+ 	(_mm256_permutexvar_ph): Ditto.
+ 	(_mm_mask_blend_ph): Ditto.
+ 	(_mm_permutex2var_ph): Ditto.
+ 	(_mm_permutexvar_ph): Ditto.
+ 
+ 2021-09-22  dianhong xu  <dianhong.xu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h: Add new intrinsics.
+ 	(_mm512_conj_pch): New intrinsic.
+ 	(_mm512_mask_conj_pch): Ditto.
+ 	(_mm512_maskz_conj_pch): Ditto.
+ 	* config/i386/avx512fp16vlintrin.h: Add new intrinsics.
+ 	(_mm256_conj_pch): New intrinsic.
+ 	(_mm256_mask_conj_pch): Ditto.
+ 	(_mm256_maskz_conj_pch): Ditto.
+ 	(_mm_conj_pch): Ditto.
+ 	(_mm_mask_conj_pch): Ditto.
+ 	(_mm_maskz_conj_pch): Ditto.
+ 
+ 2021-09-22  dianhong xu  <dianhong.xu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_MM512_REDUCE_OP): New macro
+ 	(_mm512_reduce_add_ph): New intrinsic.
+ 	(_mm512_reduce_mul_ph): Ditto.
+ 	(_mm512_reduce_min_ph): Ditto.
+ 	(_mm512_reduce_max_ph): Ditto.
+ 	* config/i386/avx512fp16vlintrin.h
+ 	(_MM256_REDUCE_OP/_MM_REDUCE_OP): New macro.
+ 	(_mm256_reduce_add_ph): New intrinsic.
+ 	(_mm256_reduce_mul_ph): Ditto.
+ 	(_mm256_reduce_min_ph): Ditto.
+ 	(_mm256_reduce_max_ph): Ditto.
+ 	(_mm_reduce_add_ph): Ditto.
+ 	(_mm_reduce_mul_ph): Ditto.
+ 	(_mm_reduce_min_ph): Ditto.
+ 	(_mm_reduce_max_ph): Ditto.
+ 
+ 2021-09-22  dianhong xu  <dianhong.xu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (__m512h_u, __m256h_u,
+ 	__m128h_u): New typedef.
+ 	(_mm512_load_ph): New intrinsic.
+ 	(_mm256_load_ph): Ditto.
+ 	(_mm_load_ph): Ditto.
+ 	(_mm512_loadu_ph): Ditto.
+ 	(_mm256_loadu_ph): Ditto.
+ 	(_mm_loadu_ph): Ditto.
+ 	(_mm512_store_ph): Ditto.
+ 	(_mm256_store_ph): Ditto.
+ 	(_mm_store_ph): Ditto.
+ 	(_mm512_storeu_ph): Ditto.
+ 	(_mm256_storeu_ph): Ditto.
+ 	(_mm_storeu_ph): Ditto.
+ 	(_mm512_abs_ph): Ditto.
+ 	* config/i386/avx512fp16vlintrin.h
+ 	(_mm_abs_ph): Ditto.
+ 	(_mm256_abs_ph): Ditto.
+ 
+ 2021-09-22  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* config/s390/tpf.md (prologue_tpf, epilogue_tpf): Add cc clobber.
+ 
+ 2021-09-22  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	PR target/102222
+ 	* config/s390/s390.c (s390_expand_insv): Emit a normal move if it
+ 	is actually a full copy of the source operand into the target.
+ 	Don't emit a strict low part move if source and target mode match.
+ 
+ 2021-09-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/102415
+ 	* omp-expand.c (expand_omp_single): If region->exit is NULL,
+ 	assert region->entry is GIMPLE_OMP_SCOPE region and return.
+ 
+ 2021-09-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree.h (OMP_CLAUSE_ALLOCATE_ALIGN): Define.
+ 	* tree.c (omp_clause_num_ops): Change number of OMP_CLAUSE_ALLOCATE
+ 	arguments from 2 to 3.
+ 	* tree-pretty-print.c (dump_omp_clause): Print allocator() around
+ 	allocate clause allocator and print align if present.
+ 	* omp-low.c (scan_sharing_clauses): Force allocate_map entry even
+ 	for omp_default_mem_alloc if align modifier is present.  If align
+ 	modifier is present, use TREE_LIST to encode both allocator and
+ 	align.
+ 	(lower_private_allocate, lower_rec_input_clauses, create_task_copyfn):
+ 	Handle align modifier on allocator clause if present.
+ 
+ 2021-09-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386.md (define_attr "isa"): Add
+ 	fma_or_avx512vl.
+ 	(define_attr "enabled"): Correspond fma_or_avx512vl to
+ 	TARGET_FMA || TARGET_AVX512VL.
+ 	* config/i386/mmx.md (fmav2sf4): Extend to AVX512 fma.
+ 	(fmsv2sf4): Ditto.
+ 	(fnmav2sf4): Ditto.
+ 	(fnmsv2sf4): Ditto.
+ 
+ 2021-09-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386.md (cstorehf3): New define_expand.
+ 
+ 2021-09-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386.md (<rounding_insn>hf2): New expander.
+ 	(sse4_1_round<mode>2): Extend from MODEF to MODEFH.
+ 	* config/i386/sse.md (*sse4_1_round<ssescalarmodesuffix>):
+ 	Extend from VF_128 to VFH_128.
+ 
+ 2021-09-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386-features.c (i386-features.c): Handle
+ 	E_HFmode.
+ 	* config/i386/i386.md (sqrthf2): New expander.
+ 	(*sqrthf2): New define_insn.
+ 	* config/i386/sse.md
+ 	(*<sse>_vmsqrt<mode>2<mask_scalar_name><round_scalar_name>):
+ 	Extend to VFH_128.
+ 
+ 2021-09-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm_mask_fcmadd_sch):
+ 	New intrinsic.
+ 	(_mm_mask3_fcmadd_sch): Likewise.
+ 	(_mm_maskz_fcmadd_sch): Likewise.
+ 	(_mm_fcmadd_sch): Likewise.
+ 	(_mm_mask_fmadd_sch): Likewise.
+ 	(_mm_mask3_fmadd_sch): Likewise.
+ 	(_mm_maskz_fmadd_sch): Likewise.
+ 	(_mm_fmadd_sch): Likewise.
+ 	(_mm_mask_fcmadd_round_sch): Likewise.
+ 	(_mm_mask3_fcmadd_round_sch): Likewise.
+ 	(_mm_maskz_fcmadd_round_sch): Likewise.
+ 	(_mm_fcmadd_round_sch): Likewise.
+ 	(_mm_mask_fmadd_round_sch): Likewise.
+ 	(_mm_mask3_fmadd_round_sch): Likewise.
+ 	(_mm_maskz_fmadd_round_sch): Likewise.
+ 	(_mm_fmadd_round_sch): Likewise.
+ 	(_mm_fcmul_sch): Likewise.
+ 	(_mm_mask_fcmul_sch): Likewise.
+ 	(_mm_maskz_fcmul_sch): Likewise.
+ 	(_mm_fmul_sch): Likewise.
+ 	(_mm_mask_fmul_sch): Likewise.
+ 	(_mm_maskz_fmul_sch): Likewise.
+ 	(_mm_fcmul_round_sch): Likewise.
+ 	(_mm_mask_fcmul_round_sch): Likewise.
+ 	(_mm_maskz_fcmul_round_sch): Likewise.
+ 	(_mm_fmul_round_sch): Likewise.
+ 	(_mm_mask_fmul_round_sch): Likewise.
+ 	(_mm_maskz_fmul_round_sch): Likewise.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/sse.md
+ 	(avx512fp16_fmaddcsh_v8hf_maskz<round_expand_name>): New expander.
+ 	(avx512fp16_fcmaddcsh_v8hf_maskz<round_expand_name>): Ditto.
+ 	(avx512fp16_fma_<complexopname>sh_v8hf<mask_scalarcz_name><round_scalarcz_name>):
+ 	New define insn.
+ 	(avx512fp16_<complexopname>sh_v8hf_mask<round_name>): Ditto.
+ 	(avx512fp16_<complexopname>sh_v8hf<mask_scalarc_name><round_scalarcz_name>):
+ 	Ditto.
+ 	* config/i386/subst.md (mask_scalarcz_name): New.
+ 	(mask_scalarc_name): Ditto.
+ 	(mask_scalarc_operand3): Ditto.
+ 	(mask_scalarcz_operand4): Ditto.
+ 	(round_scalarcz_name): Ditto.
+ 	(round_scalarc_mask_operand3): Ditto.
+ 	(round_scalarcz_mask_operand4): Ditto.
+ 	(round_scalarc_mask_op3): Ditto.
+ 	(round_scalarcz_mask_op4): Ditto.
+ 	(round_scalarcz_constraint): Ditto.
+ 	(round_scalarcz_nimm_predicate): Ditto.
+ 	(mask_scalarcz): Ditto.
+ 	(mask_scalarc): Ditto.
+ 	(round_scalarcz): Ditto.
+ 
+ 2021-09-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm512_fcmadd_pch):
+ 	New intrinsic.
+ 	(_mm512_mask_fcmadd_pch): Likewise.
+ 	(_mm512_mask3_fcmadd_pch): Likewise.
+ 	(_mm512_maskz_fcmadd_pch): Likewise.
+ 	(_mm512_fmadd_pch): Likewise.
+ 	(_mm512_mask_fmadd_pch): Likewise.
+ 	(_mm512_mask3_fmadd_pch): Likewise.
+ 	(_mm512_maskz_fmadd_pch): Likewise.
+ 	(_mm512_fcmadd_round_pch): Likewise.
+ 	(_mm512_mask_fcmadd_round_pch): Likewise.
+ 	(_mm512_mask3_fcmadd_round_pch): Likewise.
+ 	(_mm512_maskz_fcmadd_round_pch): Likewise.
+ 	(_mm512_fmadd_round_pch): Likewise.
+ 	(_mm512_mask_fmadd_round_pch): Likewise.
+ 	(_mm512_mask3_fmadd_round_pch): Likewise.
+ 	(_mm512_maskz_fmadd_round_pch): Likewise.
+ 	(_mm512_fcmul_pch): Likewise.
+ 	(_mm512_mask_fcmul_pch): Likewise.
+ 	(_mm512_maskz_fcmul_pch): Likewise.
+ 	(_mm512_fmul_pch): Likewise.
+ 	(_mm512_mask_fmul_pch): Likewise.
+ 	(_mm512_maskz_fmul_pch): Likewise.
+ 	(_mm512_fcmul_round_pch): Likewise.
+ 	(_mm512_mask_fcmul_round_pch): Likewise.
+ 	(_mm512_maskz_fcmul_round_pch): Likewise.
+ 	(_mm512_fmul_round_pch): Likewise.
+ 	(_mm512_mask_fmul_round_pch): Likewise.
+ 	(_mm512_maskz_fmul_round_pch): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm_fmadd_pch):
+ 	New intrinsic.
+ 	(_mm_mask_fmadd_pch): Likewise.
+ 	(_mm_mask3_fmadd_pch): Likewise.
+ 	(_mm_maskz_fmadd_pch): Likewise.
+ 	(_mm256_fmadd_pch): Likewise.
+ 	(_mm256_mask_fmadd_pch): Likewise.
+ 	(_mm256_mask3_fmadd_pch): Likewise.
+ 	(_mm256_maskz_fmadd_pch): Likewise.
+ 	(_mm_fcmadd_pch): Likewise.
+ 	(_mm_mask_fcmadd_pch): Likewise.
+ 	(_mm_mask3_fcmadd_pch): Likewise.
+ 	(_mm_maskz_fcmadd_pch): Likewise.
+ 	(_mm256_fcmadd_pch): Likewise.
+ 	(_mm256_mask_fcmadd_pch): Likewise.
+ 	(_mm256_mask3_fcmadd_pch): Likewise.
+ 	(_mm256_maskz_fcmadd_pch): Likewise.
+ 	(_mm_fmul_pch): Likewise.
+ 	(_mm_mask_fmul_pch): Likewise.
+ 	(_mm_maskz_fmul_pch): Likewise.
+ 	(_mm256_fmul_pch): Likewise.
+ 	(_mm256_mask_fmul_pch): Likewise.
+ 	(_mm256_maskz_fmul_pch): Likewise.
+ 	(_mm_fcmul_pch): Likewise.
+ 	(_mm_mask_fcmul_pch): Likewise.
+ 	(_mm_maskz_fcmul_pch): Likewise.
+ 	(_mm256_fcmul_pch): Likewise.
+ 	(_mm256_mask_fcmul_pch): Likewise.
+ 	(_mm256_maskz_fcmul_pch): Likewise.
+ 	* config/i386/i386-builtin-types.def (V8HF_FTYPE_V8HF_V8HF_V8HF,
+ 	V8HF_FTYPE_V16HF_V16HF_V16HF, V16HF_FTYPE_V16HF_V16HF_V16HF_UQI,
+ 	V32HF_FTYPE_V32HF_V32HF_V32HF_INT,
+ 	V32HF_FTYPE_V32HF_V32HF_V32HF_UHI_INT): Add new builtin types.
+ 	* config/i386/i386-builtin.def: Add new builtins.
+ 	* config/i386/i386-expand.c: Handle new builtin types.
+ 	* config/i386/subst.md (SUBST_CV): New.
+ 	(maskc_name): Ditto.
+ 	(maskc_operand3): Ditto.
+ 	(maskc): Ditto.
+ 	(sdc_maskz_name): Ditto.
+ 	(sdc_mask_op4): Ditto.
+ 	(sdc_mask_op5): Ditto.
+ 	(sdc_mask_mode512bit_condition): Ditto.
+ 	(sdc): Ditto.
+ 	(round_maskc_operand3): Ditto.
+ 	(round_sdc_mask_operand4): Ditto.
+ 	(round_maskc_op3): Ditto.
+ 	(round_sdc_mask_op4): Ditto.
+ 	(round_saeonly_sdc_mask_operand5): Ditto.
+ 	* config/i386/sse.md (unspec): Add complex fma unspecs.
+ 	(avx512fmaskcmode): New.
+ 	(UNSPEC_COMPLEX_F_C_MA): Ditto.
+ 	(UNSPEC_COMPLEX_F_C_MUL): Ditto.
+ 	(complexopname): Ditto.
+ 	(<avx512>_fmaddc_<mode>_maskz<round_expand_name>): New expander.
+ 	(<avx512>_fcmaddc_<mode>_maskz<round_expand_name>): Ditto.
+ 	(fma_<complexopname>_<mode><sdc_maskz_name><round_name>): New
+ 	define insn.
+ 	(<avx512>_<complexopname>_<mode>_mask<round_name>): Ditto.
+ 	(<avx512>_<complexopname>_<mode><maskc_name><round_name>): Ditto.
+ 
+ 2021-09-22  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.opt (rs6000-density-pct-threshold,
+ 	rs6000-density-size-threshold, rs6000-density-penalty,
+ 	rs6000-density-load-pct-threshold,
+ 	rs6000-density-load-num-threshold): New parameter.
+ 	* config/rs6000/rs6000.c (rs6000_density_test): Adjust with
+ 	corresponding parameters.
+ 
+ 2021-09-21  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::defined_outside_path):
+ 	New.
+ 	(path_range_query::range_on_path_entry): New.
+ 	(path_range_query::internal_range_of_expr): Resolve unknowns
+ 	with ranger.
+ 	(path_range_query::improve_range_with_equivs): New.
+ 	(path_range_query::ssa_range_in_phi): Resolve unknowns with
+ 	ranger.
+ 	* gimple-range-path.h (class path_range_query): Add
+ 	defined_outside_path, range_on_path_entry, and
+ 	improve_range_with_equivs.
+ 
+ 2021-09-21  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::add_to_imports): New.
+ 	(path_range_query::add_copies_to_imports): New.
+ 	(path_range_query::precompute_ranges): Call
+ 	add_copies_to_imports.
+ 	* gimple-range-path.h (class path_range_query): Add prototypes
+ 	for add_copies_to_imports and add_to_imports.
+ 
+ 2021-09-21  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::range_defined_in_block):
+ 	Remove useless code.
+ 
+ 2021-09-21  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-fold.h (class fur_source): Make oracle protected.
+ 	* gimple-range-path.cc (path_range_query::path_range_query): Add
+ 	resolve argument.  Initialize oracle.
+ 	(path_range_query::~path_range_query): Delete oracle.
+ 	(path_range_query::range_of_stmt): Adapt to use relations.
+ 	(path_range_query::precompute_ranges): Pre-compute relations.
+ 	(class jt_fur_source): New
+ 	(jt_fur_source::jt_fur_source): New.
+ 	(jt_fur_source::register_relation): New.
+ 	(jt_fur_source::query_relation): New.
+ 	(path_range_query::precompute_relations): New.
+ 	(path_range_query::precompute_phi_relations): New.
+ 	* gimple-range-path.h (path_range_query): Add resolve argument.
+ 	Add oracle, precompute_relations, precompute_phi_relations.
+ 	* tree-ssa-threadbackward.c (back_threader::back_threader): Pass
+ 	resolve argument to solver.
+ 
+ 2021-09-21  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-fold.cc (fold_using_range::range_of_range_op):
+ 	Rename postfold_gcond_edges to register_outgoing_edges and
+ 	adapt.
+ 	(fold_using_range::postfold_gcond_edges): Rename...
+ 	(fur_source::register_outgoing_edges): ...to this.
+ 	* gimple-range-fold.h (postfold_gcond_edges): Rename to
+ 	register_outgoing_edges and move to fur_source.
+ 
+ 2021-09-21  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-fold.cc (fold_using_range::range_of_phi): Check
+ 	dom_info_available_p.
+ 
+ 2021-09-21  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-cache.cc (non_null_ref::non_null_ref): Use create
+ 	and quick_grow_cleared instead of safe_grow_cleared.
+ 
+ 2021-09-21  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR other/102408
+ 	* omp-oacc-neuter-broadcast.cc (oacc_do_neutering): Evaluate
+ 	'random ()' to '0'.
+ 
+ 2021-09-21  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* configure.ac: Detect when the assembler supports new-style
+ 	architecture extensions.
+ 	* common/config/arm/arm-common.c (arm_rewrite_mcpu): Return
+ 	the full CPU string if the assembler can grok it.
+ 	(arm_rewrite_march): Likewise but for the architecture.
+ 	* config.in: Regenerate.
+ 	* configure: Regenerate.
+ 
+ 2021-09-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102421
+ 	* tree-vect-loop.c (vect_dissolve_slp_only_groups): Copy and
+ 	adjust alignment info.
+ 
+ 2021-09-21  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* ipa-fnsummary.c (ipa_fn_summary_write): Remove inconsistent
+ 	bitfield stream out.
+ 
+ 2021-09-20  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-fold.cc (fold_using_range::range_of_phi): Ignore
+ 	undefined edges, apply an equivalence if appropriate.
+ 	* gimple-range-gori.cc (gori_compute::outgoing_edge_range_p): Return
+ 	UNDEFINED if EDGE_EXECUTABLE is not set.
+ 	* gimple-range.cc (gimple_ranger::gimple_ranger): Set all edges
+ 	as EXECUTABLE upon startup.
+ 	(gimple_ranger::range_on_edge): Return UNDEFINED for edges without
+ 	EDGE_EXECUTABLE set.
+ 	* vr-values.c (set_and_propagate_unexecutable): New.
+ 	(simplify_using_ranges::fold_cond): Call set_and_propagate.
+ 	(simplify_using_ranges::simplify_switch_using_ranges): Ditto.
+ 	* vr-values.h: Add prototype.
+ 
+ 2021-09-20  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-relation.cc (equiv_oracle::register_initial_def): New.
+ 	(equiv_oracle::register_relation): Call register_initial_def.
+ 	(equiv_oracle::add_equiv_to_block): New.  Split register_relation.
+ 	(relation_oracle::register_stmt): Check def block of PHI arguments.
+ 	* value-relation.h (equiv_oracle): Add new prototypes.
+ 
+ 2021-09-20  Matthias Kretz  <m.kretz@gsi.de>
+ 
+ 	* cppbuiltin.c (define_builtin_macros_for_compilation_flags):
+ 	Define __RECIPROCAL_MATH__, __NO_SIGNED_ZEROS__,
+ 	__NO_TRAPPING_MATH__, __ASSOCIATIVE_MATH__, and
+ 	__ROUNDING_MATH__ according to their corresponding flags.
+ 	* doc/cpp.texi: Document __RECIPROCAL_MATH__,
+ 	__NO_SIGNED_ZEROS__, __NO_TRAPPING_MATH__, __ASSOCIATIVE_MATH__,
+ 	and __ROUNDING_MATH__.
+ 
+ 2021-09-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-stmts.c (vectorizable_load): Use the vectype
+ 	from the SLP node.
+ 
+ 2021-09-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-data-refs.c (vect_duplicate_ssa_name_ptr_info):
+ 	Do not compute alignment of the vectorized access here.
+ 
+ 2021-09-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-data-refs.c (vect_enhance_data_refs_alignment):
+ 	Store -1 for runtime alias peeling iterations.
+ 
+ 2021-09-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config.gcc: Obsolete hppa[12]*-*-hpux10* and hppa[12]*-*-hpux11*.
+ 
+ 2021-09-20  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* input.c (string_concat_db::record_string_concatenation)
+ 	(string_concat_db::get_string_concatenation): Skip for
+ 	'RESERVED_LOCATION_P'.
+ 
+ 2021-09-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/65206
+ 	* tree-data-ref.h (struct data_reference): Add alt_indices,
+ 	order it last.
+ 	* tree-data-ref.c (free_data_ref): Release alt_indices.
+ 	(dr_analyze_indices): Work on struct indices and get DR_REF as tree.
+ 	(create_data_ref): Adjust.
+ 	(initialize_data_dependence_relation): Split into head
+ 	and tail.  When the base objects fail to match up try
+ 	again with pointer-based analysis of indices.
+ 	* tree-vectorizer.c (vec_info_shared::check_datarefs): Do
+ 	not compare the lazily computed alternate set of indices.
+ 
+ 2021-09-20  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* gcc.c: Test for execute OK when we find the
+ 	programs for assembler linker and dsymutil and those
+ 	were specified at configure-time.
+ 
+ 2021-09-19  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/102403
+ 	* gimple-predicate-analysis.cc (predicate::init_from_control_deps):
+ 	Correct a function pre/postcondition.
+ 
+ 2021-09-19  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/102243
+ 	* tree-ssa-strlen.c (get_range): Handle null cfun.
+ 
+ 2021-09-19  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.h (LINK_COMMAND_SPEC_A): Use Darwin10
+ 	unwinder shim as a convenience library.
+ 
+ 2021-09-19  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* doc/install.texi: Add note about
+ 	binutils 2.35 is required for LTO usage.
+ 
+ 2021-09-19  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c
+ 	(back_threader_registry::register_path): Use push_edge.
+ 	* tree-ssa-threadedge.c
+ 	(jump_threader::thread_around_empty_blocks): Same.
+ 	(jump_threader::thread_through_normal_block): Same.
+ 	(jump_threader::thread_across_edge): Same.  Also, use auto_bitmap.
+ 	Tidy up code.
+ 	* tree-ssa-threadupdate.c
+ 	(jt_path_registry::allocate_thread_edge): Remove.
+ 	(jt_path_registry::push_edge): New.
+ 	(dump_jump_thread_path): Make static.
+ 	* tree-ssa-threadupdate.h (allocate_thread_edge): Remove.
+ 	(push_edge): New.
+ 
+ 2021-09-19  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::path_range_query): Add
+ 	header.
+ 	(path_range_query::dump): Remove extern declaration of dump_ranger.
+ 	* gimple-range-trace.cc (dump_ranger): Add DEBUG_FUNCTION marker.
+ 	* gimple-range-trace.h (dump_ranger): Add prototype.
+ 
+ 2021-09-19  John Ericson  <git@JohnEricson.me>
+ 
+ 	* gcc.c (find_a_program): New function, factored out of...
+ 	(find_a_file): Here.
+ 	(execute): Use find_a_program when looking for programs rather
+ 	than find_a_file.
+ 
+ 2021-09-19  Matwey V. Kornilov  <matwey.kornilov@gmail.com>
+ 
+ 	* config/avr/avr-mcus.def: Add atmega324pb.
+ 	* doc/avr-mmcu.texi: Corresponding changes.
+ 
+ 2021-09-19  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR middle-end/88173
+ 	* match.pd (cmp @0 REAL_CST@1): When @0 is also REAL_CST, apply
+ 	the same transformations as to @1.  For comparisons against NaN,
+ 	don't check HONOR_SNANS but confirm that neither operand is a
+ 	signaling NaN.
+ 
+ 2021-09-19  Benjamin Peterson  <benjamin@locrian.net>
+ 
+ 	* attribs.c (make_unique_name): Delete.
+ 	* attribs.h (make_unique_name): Delete.
+ 
+ 2021-09-19  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* lra-constraints.c (check_and_process_move): Assert
+ 	that dclass and sclass are greater than or equal to NO_REGS.
+ 
+ 2021-09-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree.h (OMP_CLAUSE_ORDER_UNCONSTRAINED): Define.
+ 	* tree-pretty-print.c (dump_omp_clause): Print unconstrained:
+ 	for OMP_CLAUSE_ORDER_UNCONSTRAINED.
+ 
+ 2021-09-18  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386-features.c (remove_partial_avx_dependency):
+ 	Restrict TARGET_USE_VECTOR_FP_CONVERTS and
+ 	TARGET_USE_VECTOR_CONVERTS to conversion instructions only.
+ 
+ 2021-09-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gimplify.c (omp_default_clause): For C/C++ default({,first}private),
+ 	if file/namespace scope variable doesn't have predetermined sharing,
+ 	treat it as if there was default(none).
+ 
+ 2021-09-18  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm_fmadd_sh):
+ 	New intrinsic.
+ 	(_mm_mask_fmadd_sh): Likewise.
+ 	(_mm_mask3_fmadd_sh): Likewise.
+ 	(_mm_maskz_fmadd_sh): Likewise.
+ 	(_mm_fmadd_round_sh): Likewise.
+ 	(_mm_mask_fmadd_round_sh): Likewise.
+ 	(_mm_mask3_fmadd_round_sh): Likewise.
+ 	(_mm_maskz_fmadd_round_sh): Likewise.
+ 	(_mm_fnmadd_sh): Likewise.
+ 	(_mm_mask_fnmadd_sh): Likewise.
+ 	(_mm_mask3_fnmadd_sh): Likewise.
+ 	(_mm_maskz_fnmadd_sh): Likewise.
+ 	(_mm_fnmadd_round_sh): Likewise.
+ 	(_mm_mask_fnmadd_round_sh): Likewise.
+ 	(_mm_mask3_fnmadd_round_sh): Likewise.
+ 	(_mm_maskz_fnmadd_round_sh): Likewise.
+ 	(_mm_fmsub_sh): Likewise.
+ 	(_mm_mask_fmsub_sh): Likewise.
+ 	(_mm_mask3_fmsub_sh): Likewise.
+ 	(_mm_maskz_fmsub_sh): Likewise.
+ 	(_mm_fmsub_round_sh): Likewise.
+ 	(_mm_mask_fmsub_round_sh): Likewise.
+ 	(_mm_mask3_fmsub_round_sh): Likewise.
+ 	(_mm_maskz_fmsub_round_sh): Likewise.
+ 	(_mm_fnmsub_sh): Likewise.
+ 	(_mm_mask_fnmsub_sh): Likewise.
+ 	(_mm_mask3_fnmsub_sh): Likewise.
+ 	(_mm_maskz_fnmsub_sh): Likewise.
+ 	(_mm_fnmsub_round_sh): Likewise.
+ 	(_mm_mask_fnmsub_round_sh): Likewise.
+ 	(_mm_mask3_fnmsub_round_sh): Likewise.
+ 	(_mm_maskz_fnmsub_round_sh): Likewise.
+ 	* config/i386/i386-builtin-types.def
+ 	(V8HF_FTYPE_V8HF_V8HF_V8HF_UQI_INT): New builtin type.
+ 	* config/i386/i386-builtin.def: Add new builtins.
+ 	* config/i386/i386-expand.c: Handle new builtin type.
+ 	* config/i386/sse.md (fmai_vmfmadd_<mode><round_name>):
+ 	Ajdust to support FP16.
+ 	(fmai_vmfmsub_<mode><round_name>): Ditto.
+ 	(fmai_vmfnmadd_<mode><round_name>): Ditto.
+ 	(fmai_vmfnmsub_<mode><round_name>): Ditto.
+ 	(*fmai_fmadd_<mode>): Ditto.
+ 	(*fmai_fmsub_<mode>): Ditto.
+ 	(*fmai_fnmadd_<mode><round_name>): Ditto.
+ 	(*fmai_fnmsub_<mode><round_name>): Ditto.
+ 	(avx512f_vmfmadd_<mode>_mask<round_name>): Ditto.
+ 	(avx512f_vmfmadd_<mode>_mask3<round_name>): Ditto.
+ 	(avx512f_vmfmadd_<mode>_maskz<round_expand_name>): Ditto.
+ 	(avx512f_vmfmadd_<mode>_maskz_1<round_name>): Ditto.
+ 	(*avx512f_vmfmsub_<mode>_mask<round_name>): Ditto.
+ 	(avx512f_vmfmsub_<mode>_mask3<round_name>): Ditto.
+ 	(*avx512f_vmfmsub_<mode>_maskz_1<round_name>): Ditto.
+ 	(*avx512f_vmfnmsub_<mode>_mask<round_name>): Ditto.
+ 	(*avx512f_vmfnmsub_<mode>_mask3<round_name>): Ditto.
+ 	(*avx512f_vmfnmsub_<mode>_mask<round_name>): Ditto.
+ 	(*avx512f_vmfnmadd_<mode>_mask<round_name>): Renamed to ...
+ 	(avx512f_vmfnmadd_<mode>_mask<round_name>) ... this, and
+ 	adjust to support FP16.
+ 	(avx512f_vmfnmadd_<mode>_mask3<round_name>): Ditto.
+ 	(avx512f_vmfnmadd_<mode>_maskz_1<round_name>): Ditto.
+ 	(avx512f_vmfnmadd_<mode>_maskz<round_expand_name>): New
+ 	expander.
+ 
+ 2021-09-18  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/sse.md (avx512fmaskmodelower): Extend to support
+ 	HF modes.
+ 	(maskload<mode><avx512fmaskmodelower>): Ditto.
+ 	(maskstore<mode><avx512fmaskmodelower>): Ditto.
+ 
+ 2021-09-18  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_fp_absneg_operator):
+ 	Handle HFmode.
+ 	(ix86_expand_copysign): Ditto.
+ 	(ix86_expand_xorsign): Ditto.
+ 	* config/i386/i386.c (ix86_build_const_vector): Handle HF vector
+ 	modes.
+ 	(ix86_build_signbit_mask): Ditto.
+ 	(ix86_can_change_mode_class): Ditto.
+ 	* config/i386/i386.md
+ 	(SSEMODEF): Add HFmode.
+ 	(ssevecmodef): Ditto.
+ 	(<code>hf2): New define_expand.
+ 	(*<code>hf2_1): New define_insn_and_split.
+ 	(copysign<mode>): Extend to support HFmode under AVX512FP16.
+ 	(xorsign<mode>): Ditto.
+ 	* config/i386/sse.md (VFB): New mode iterator.
+ 	(VFB_128_256): Ditto.
+ 	(VFB_512): Ditto.
+ 	(sseintvecmode2): Support HF vector mode.
+ 	(<code><mode>2): Use new mode iterator.
+ 	(*<code><mode>2): Ditto.
+ 	(copysign<mode>3): Ditto.
+ 	(xorsign<mode>3): Ditto.
+ 	(<code><mode>3<mask_name>): Ditto.
+ 	(<code><mode>3<mask_name>): Ditto.
+ 	(<sse>_andnot<mode>3<mask_name>): Adjust for HF vector mode.
+ 	(<sse>_andnot<mode>3<mask_name>): Ditto.
+ 	(*<code><mode>3<mask_name>): Ditto.
+ 	(*<code><mode>3<mask_name>): Ditto.
+ 
+ 2021-09-18  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm512_mask_fmadd_ph):
+ 	New intrinsic.
+ 	(_mm512_mask3_fmadd_ph): Likewise.
+ 	(_mm512_maskz_fmadd_ph): Likewise.
+ 	(_mm512_fmadd_round_ph): Likewise.
+ 	(_mm512_mask_fmadd_round_ph): Likewise.
+ 	(_mm512_mask3_fmadd_round_ph): Likewise.
+ 	(_mm512_maskz_fmadd_round_ph): Likewise.
+ 	(_mm512_fnmadd_ph): Likewise.
+ 	(_mm512_mask_fnmadd_ph): Likewise.
+ 	(_mm512_mask3_fnmadd_ph): Likewise.
+ 	(_mm512_maskz_fnmadd_ph): Likewise.
+ 	(_mm512_fnmadd_round_ph): Likewise.
+ 	(_mm512_mask_fnmadd_round_ph): Likewise.
+ 	(_mm512_mask3_fnmadd_round_ph): Likewise.
+ 	(_mm512_maskz_fnmadd_round_ph): Likewise.
+ 	(_mm512_fmsub_ph): Likewise.
+ 	(_mm512_mask_fmsub_ph): Likewise.
+ 	(_mm512_mask3_fmsub_ph): Likewise.
+ 	(_mm512_maskz_fmsub_ph): Likewise.
+ 	(_mm512_fmsub_round_ph): Likewise.
+ 	(_mm512_mask_fmsub_round_ph): Likewise.
+ 	(_mm512_mask3_fmsub_round_ph): Likewise.
+ 	(_mm512_maskz_fmsub_round_ph): Likewise.
+ 	(_mm512_fnmsub_ph): Likewise.
+ 	(_mm512_mask_fnmsub_ph): Likewise.
+ 	(_mm512_mask3_fnmsub_ph): Likewise.
+ 	(_mm512_maskz_fnmsub_ph): Likewise.
+ 	(_mm512_fnmsub_round_ph): Likewise.
+ 	(_mm512_mask_fnmsub_round_ph): Likewise.
+ 	(_mm512_mask3_fnmsub_round_ph): Likewise.
+ 	(_mm512_maskz_fnmsub_round_ph): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm256_fmadd_ph):
+ 	New intrinsic.
+ 	(_mm256_mask_fmadd_ph): Likewise.
+ 	(_mm256_mask3_fmadd_ph): Likewise.
+ 	(_mm256_maskz_fmadd_ph): Likewise.
+ 	(_mm_fmadd_ph): Likewise.
+ 	(_mm_mask_fmadd_ph): Likewise.
+ 	(_mm_mask3_fmadd_ph): Likewise.
+ 	(_mm_maskz_fmadd_ph): Likewise.
+ 	(_mm256_fnmadd_ph): Likewise.
+ 	(_mm256_mask_fnmadd_ph): Likewise.
+ 	(_mm256_mask3_fnmadd_ph): Likewise.
+ 	(_mm256_maskz_fnmadd_ph): Likewise.
+ 	(_mm_fnmadd_ph): Likewise.
+ 	(_mm_mask_fnmadd_ph): Likewise.
+ 	(_mm_mask3_fnmadd_ph): Likewise.
+ 	(_mm_maskz_fnmadd_ph): Likewise.
+ 	(_mm256_fmsub_ph): Likewise.
+ 	(_mm256_mask_fmsub_ph): Likewise.
+ 	(_mm256_mask3_fmsub_ph): Likewise.
+ 	(_mm256_maskz_fmsub_ph): Likewise.
+ 	(_mm_fmsub_ph): Likewise.
+ 	(_mm_mask_fmsub_ph): Likewise.
+ 	(_mm_mask3_fmsub_ph): Likewise.
+ 	(_mm_maskz_fmsub_ph): Likewise.
+ 	(_mm256_fnmsub_ph): Likewise.
+ 	(_mm256_mask_fnmsub_ph): Likewise.
+ 	(_mm256_mask3_fnmsub_ph): Likewise.
+ 	(_mm256_maskz_fnmsub_ph): Likewise.
+ 	(_mm_fnmsub_ph): Likewise.
+ 	(_mm_mask_fnmsub_ph): Likewise.
+ 	(_mm_mask3_fnmsub_ph): Likewise.
+ 	(_mm_maskz_fnmsub_ph): Likewise.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/sse.md
+ 	(<avx512>_fmadd_<mode>_maskz<round_expand_name>): Adjust to
+ 	support HF vector modes.
+ 	(<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name><round_name>):
+ 	Ditto.
+ 	(*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_1): Ditto.
+ 	(*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_2): Ditto.
+ 	(*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_3): Ditto.
+ 	(<avx512>_fmadd_<mode>_mask<round_name>): Ditto.
+ 	(<avx512>_fmadd_<mode>_mask3<round_name>): Ditto.
+ 	(<avx512>_fmsub_<mode>_maskz<round_expand_name>): Ditto.
+ 	(<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name><round_name>):
+ 	Ditto.
+ 	(*<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name>_bcst_1): Ditto.
+ 	(*<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name>_bcst_2): Ditto.
+ 	(*<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name>_bcst_3): Ditto.
+ 	(<avx512>_fmsub_<mode>_mask<round_name>): Ditto.
+ 	(<avx512>_fmsub_<mode>_mask3<round_name>): Ditto.
+ 	(<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name><round_name>):
+ 	Ditto.
+ 	(*<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name>_bcst_1): Ditto.
+ 	(*<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name>_bcst_2): Ditto.
+ 	(*<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name>_bcst_3): Ditto.
+ 	(<avx512>_fnmadd_<mode>_mask<round_name>): Ditto.
+ 	(<avx512>_fnmadd_<mode>_mask3<round_name>): Ditto.
+ 	(<avx512>_fnmsub_<mode>_maskz<round_expand_name>): Ditto.
+ 	(<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name><round_name>):
+ 	Ditto.
+ 	(*<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name>_bcst_1): Ditto.
+ 	(*<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name>_bcst_2): Ditto.
+ 	(*<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name>_bcst_3): Ditto.
+ 	(<avx512>_fnmsub_<mode>_mask<round_name>): Ditto.
+ 	(<avx512>_fnmsub_<mode>_mask3<round_name>): Ditto.
+ 
+ 2021-09-18  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm512_fmaddsub_ph):
+ 	New intrinsic.
+ 	(_mm512_mask_fmaddsub_ph): Likewise.
+ 	(_mm512_mask3_fmaddsub_ph): Likewise.
+ 	(_mm512_maskz_fmaddsub_ph): Likewise.
+ 	(_mm512_fmaddsub_round_ph): Likewise.
+ 	(_mm512_mask_fmaddsub_round_ph): Likewise.
+ 	(_mm512_mask3_fmaddsub_round_ph): Likewise.
+ 	(_mm512_maskz_fmaddsub_round_ph): Likewise.
+ 	(_mm512_mask_fmsubadd_ph): Likewise.
+ 	(_mm512_mask3_fmsubadd_ph): Likewise.
+ 	(_mm512_maskz_fmsubadd_ph): Likewise.
+ 	(_mm512_fmsubadd_round_ph): Likewise.
+ 	(_mm512_mask_fmsubadd_round_ph): Likewise.
+ 	(_mm512_mask3_fmsubadd_round_ph): Likewise.
+ 	(_mm512_maskz_fmsubadd_round_ph): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm256_fmaddsub_ph):
+ 	New intrinsic.
+ 	(_mm256_mask_fmaddsub_ph): Likewise.
+ 	(_mm256_mask3_fmaddsub_ph): Likewise.
+ 	(_mm256_maskz_fmaddsub_ph): Likewise.
+ 	(_mm_fmaddsub_ph): Likewise.
+ 	(_mm_mask_fmaddsub_ph): Likewise.
+ 	(_mm_mask3_fmaddsub_ph): Likewise.
+ 	(_mm_maskz_fmaddsub_ph): Likewise.
+ 	(_mm256_fmsubadd_ph): Likewise.
+ 	(_mm256_mask_fmsubadd_ph): Likewise.
+ 	(_mm256_mask3_fmsubadd_ph): Likewise.
+ 	(_mm256_maskz_fmsubadd_ph): Likewise.
+ 	(_mm_fmsubadd_ph): Likewise.
+ 	(_mm_mask_fmsubadd_ph): Likewise.
+ 	(_mm_mask3_fmsubadd_ph): Likewise.
+ 	(_mm_maskz_fmsubadd_ph): Likewise.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/sse.md (VFH_SF_AVX512VL): New mode iterator.
+ 	* (<avx512>_fmsubadd_<mode>_maskz<round_expand_name>): New expander.
+ 	* (<avx512>_fmaddsub_<mode>_maskz<round_expand_name>): Use
+ 	VFH_SF_AVX512VL.
+ 	* (<sd_mask_codefor>fma_fmaddsub_<mode><sd_maskz_name><round_name>):
+ 	Ditto.
+ 	* (<avx512>_fmaddsub_<mode>_mask<round_name>): Ditto.
+ 	* (<avx512>_fmaddsub_<mode>_mask3<round_name>): Ditto.
+ 	* (<sd_mask_codefor>fma_fmsubadd_<mode><sd_maskz_name><round_name>):
+ 	Ditto.
+ 	* (<avx512>_fmsubadd_<mode>_mask<round_name>): Ditto.
+ 	* (<avx512>_fmsubadd_<mode>_mask3<round_name>): Ditto.
+ 
+ 2021-09-18  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/87767
+ 	* config/i386/i386.c (ix86_print_operand): Handle
+ 	V8HF/V16HF/V32HFmode.
+ 	* config/i386/i386.h (VALID_BCST_MODE_P): Add HFmode.
+ 	* config/i386/sse.md (avx512bcst): Remove.
+ 
+ 2021-09-17  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* Makefile.in (OBJS): Add gimple-predicate-analysis.o.
+ 	* tree-ssa-uninit.c (max_phi_args): Move to gimple-predicate-analysis.
+ 	(MASK_SET_BIT, MASK_TEST_BIT, MASK_EMPTY): Same.
+ 	(check_defs): Add comment.
+ 	(can_skip_redundant_opnd): Update comment.
+ 	(compute_uninit_opnds_pos): Adjust to namespace change.
+ 	(find_pdom): Move to gimple-predicate-analysis.cc.
+ 	(find_dom): Same.
+ 	(struct uninit_undef_val_t): New.
+ 	(is_non_loop_exit_postdominating): Move to gimple-predicate-analysis.cc.
+ 	(find_control_equiv_block): Same.
+ 	(MAX_NUM_CHAINS, MAX_CHAIN_LEN, MAX_POSTDOM_CHECK): Same.
+ 	(MAX_SWITCH_CASES): Same.
+ 	(compute_control_dep_chain): Same.
+ 	(find_uninit_use): Use predicate analyzer.
+ 	(struct pred_info): Move to gimple-predicate-analysis.
+ 	(convert_control_dep_chain_into_preds): Same.
+ 	(find_predicates): Same.
+ 	(collect_phi_def_edges): Same.
+ 	(warn_uninitialized_phi): Use predicate analyzer.
+ 	(find_def_preds): Move to gimple-predicate-analysis.
+ 	(dump_pred_info): Same.
+ 	(dump_pred_chain): Same.
+ 	(dump_predicates): Same.
+ 	(destroy_predicate_vecs): Remove.
+ 	(execute_late_warn_uninitialized): New.
+ 	(get_cmp_code): Move to gimple-predicate-analysis.
+ 	(is_value_included_in): Same.
+ 	(value_sat_pred_p): Same.
+ 	(find_matching_predicate_in_rest_chains): Same.
+ 	(is_use_properly_guarded): Same.
+ 	(prune_uninit_phi_opnds): Same.
+ 	(find_var_cmp_const): Same.
+ 	(use_pred_not_overlap_with_undef_path_pred): Same.
+ 	(pred_equal_p): Same.
+ 	(is_neq_relop_p): Same.
+ 	(is_neq_zero_form_p): Same.
+ 	(pred_expr_equal_p): Same.
+ 	(is_pred_expr_subset_of): Same.
+ 	(is_pred_chain_subset_of): Same.
+ 	(is_included_in): Same.
+ 	(is_superset_of): Same.
+ 	(pred_neg_p): Same.
+ 	(simplify_pred): Same.
+ 	(simplify_preds_2): Same.
+ 	(simplify_preds_3): Same.
+ 	(simplify_preds_4): Same.
+ 	(simplify_preds): Same.
+ 	(push_pred): Same.
+ 	(push_to_worklist): Same.
+ 	(get_pred_info_from_cmp): Same.
+ 	(is_degenerated_phi): Same.
+ 	(normalize_one_pred_1): Same.
+ 	(normalize_one_pred): Same.
+ 	(normalize_one_pred_chain): Same.
+ 	(normalize_preds): Same.
+ 	(can_one_predicate_be_invalidated_p): Same.
+ 	(can_chain_union_be_invalidated_p): Same.
+ 	(uninit_uses_cannot_happen): Same.
+ 	(pass_late_warn_uninitialized::execute): Define.
+ 	* gimple-predicate-analysis.cc: New file.
+ 	* gimple-predicate-analysis.h: New file.
+ 
+ 2021-09-17  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* config/gcn/gcn.c (gimple.h): Include.
+ 	(gcn_fork_join): Emit barrier for worker-level joins.
+ 	* omp-oacc-neuter-broadcast.cc (find_local_vars_to_propagate): Add
+ 	writes_gang_private bitmap parameter. Set bit for blocks
+ 	containing gang-private variable writes.
+ 	(worker_single_simple): Don't emit barrier after predicated block.
+ 	(worker_single_copy): Don't emit barrier if we're not broadcasting
+ 	anything and the block contains no gang-private writes.
+ 	(neuter_worker_single): Don't predicate blocks that only contain
+ 	NOPs or internal marker functions.  Pass has_gang_private_write
+ 	argument to worker_single_copy.
+ 	(oacc_do_neutering): Add writes_gang_private bitmap handling.
+ 
+ 2021-09-17  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* config/gcn/gcn-protos.h
+ 	(gcn_goacc_create_worker_broadcast_record): Update prototype.
+ 	* config/gcn/gcn-tree.c (gcn_goacc_get_worker_red_decl): Use
+ 	preallocated block of LDS memory.  Do not cache/share decls for
+ 	reduction temporaries between invocations.
+ 	(gcn_goacc_reduction_teardown): Unshare VAR on second use.
+ 	(gcn_goacc_create_worker_broadcast_record): Add OFFSET parameter
+ 	and return temporary LDS space at that offset.  Return pointer in
+ 	"sender" case.
+ 	* config/gcn/gcn.c (acc_lds_size, gang_private_hwm, lds_allocs):
+ 	New global vars.
+ 	(ACC_LDS_SIZE): Define as acc_lds_size.
+ 	(gcn_init_machine_status): Don't initialise lds_allocated,
+ 	lds_allocs, reduc_decls fields of machine function struct.
+ 	(gcn_option_override): Handle default size for gang-private
+ 	variables and -mgang-private-size option.
+ 	(gcn_expand_prologue): Use LDS_SIZE instead of LDS_SIZE-1 when
+ 	initialising M0_REG.
+ 	(gcn_shared_mem_layout): New function.
+ 	(gcn_print_lds_decl): Update comment. Use global lds_allocs map and
+ 	gang_private_hwm variable.
+ 	(TARGET_GOACC_SHARED_MEM_LAYOUT): Define target hook.
+ 	* config/gcn/gcn.h (machine_function): Remove lds_allocated,
+ 	lds_allocs, reduc_decls. Add reduction_base, reduction_limit.
+ 	* config/gcn/gcn.opt (gang_private_size_opt): New global.
+ 	(mgang-private-size=): New option.
+ 	* doc/tm.texi.in (TARGET_GOACC_SHARED_MEM_LAYOUT): Place
+ 	documentation hook.
+ 	* doc/tm.texi: Regenerate.
+ 	* omp-oacc-neuter-broadcast.cc (targhooks.h, diagnostic-core.h):
+ 	Add includes.
+ 	(build_sender_ref): Handle sender_decl being pointer.
+ 	(worker_single_copy): Add PLACEMENT and ISOLATE_BROADCASTS
+ 	parameters.  Pass placement argument to
+ 	create_worker_broadcast_record hook invocations.  Handle
+ 	sender_decl being pointer and isolate_broadcasts inserting extra
+ 	barriers.
+ 	(blk_offset_map_t): Add typedef.
+ 	(neuter_worker_single): Add BLK_OFFSET_MAP parameter.  Pass
+ 	preallocated range to worker_single_copy call.
+ 	(dfs_broadcast_reachable_1): New function.
+ 	(idx_decl_pair_t, used_range_vec_t): New typedefs.
+ 	(sort_size_descending): New function.
+ 	(addr_range): New class.
+ 	(splay_tree_compare_addr_range, splay_tree_free_key)
+ 	(first_fit_range, merge_ranges_1, merge_ranges): New functions.
+ 	(execute_omp_oacc_neuter_broadcast): Rename to...
+ 	(oacc_do_neutering): ... this.  Add BOUNDS_LO, BOUNDS_HI
+ 	parameters.  Arrange layout of shared memory for broadcast
+ 	operations.
+ 	(execute_omp_oacc_neuter_broadcast): New function.
+ 	(pass_omp_oacc_neuter_broadcast::gate): Remove num_workers==1
+ 	handling from here.  Enable pass for all OpenACC routines in order
+ 	to call shared memory-layout hook.
+ 	* target.def (create_worker_broadcast_record): Add OFFSET
+ 	parameter.
+ 	(shared_mem_layout): New hook.
+ 
+ 2021-09-17  Julian Brown  <julian@codesourcery.com>
+ 	    Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* omp-oacc-neuter-broadcast.cc
+ 	(pass_omp_oacc_neuter_broadcast::gate): Disable if num_workers is
+ 	1.
+ 	(execute_omp_oacc_neuter_broadcast): Adjust.
+ 
+ 2021-09-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-relation.cc (class equiv_chain): Move to header file.
+ 	(path_oracle::path_oracle): New.
+ 	(path_oracle::~path_oracle): New.
+ 	(path_oracle::register_relation): New.
+ 	(path_oracle::query_relation): New.
+ 	(path_oracle::reset_path): New.
+ 	(path_oracle::dump): New.
+ 	* value-relation.h (class equiv_chain): Move to here.
+ 	(class path_oracle): New.
+ 
+ 2021-09-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::ranger_cache): Create a DOM
+ 	based oracle.
+ 	* gimple-range-fold.cc (fur_depend::register_relation): Use
+ 	register_stmt/edge routines.
+ 	* value-relation.cc (equiv_chain::find): Relocate from equiv_oracle.
+ 	(equiv_oracle::equiv_oracle): Create self equivalence cache.
+ 	(equiv_oracle::~equiv_oracle): Release same.
+ 	(equiv_oracle::equiv_set): Return entry from self equiv cache if there
+ 	are no equivalences.
+ 	(equiv_oracle::find_equiv_block): Move list find to equiv_chain.
+ 	(equiv_oracle::register_relation): Rename from register_equiv.
+ 	(relation_chain_head::find_relation): Relocate from dom_oracle.
+ 	(relation_oracle::register_stmt): New.
+ 	(relation_oracle::register_edge): New.
+ 	(dom_oracle::*): Rename from relation_oracle.
+ 	(dom_oracle::register_relation): Adjust to call equiv_oracle.
+ 	(dom_oracle::set_one_relation): Split from register_relation.
+ 	(dom_oracle::register_transitives): Consolidate 2 methods.
+ 	(dom_oracle::find_relation_block): Move core to relation_chain.
+ 	(dom_oracle::query_relation): Rename from find_relation_dom and adjust.
+ 	* value-relation.h (class relation_oracle): New pure virtual base.
+ 	(class equiv_oracle): Inherit from relation_oracle and adjust.
+ 	(class dom_oracle): Rename from old relation_oracle and adjust.
+ 
+ 2021-09-17  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/102200
+ 	* pointer-query.cc (access_ref::inform_access): Handle MIN/MAX_EXPR.
+ 	(handle_min_max_size): Change argument.  Store original SSA_NAME for
+ 	operands to potentially distinct (sub)objects.
+ 	(compute_objsize_r): Adjust call to the above.
+ 
+ 2021-09-17  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000-builtins.h): New include.
+ 	(rs6000_new_builtin_vectorized_function): New function.
+ 	(rs6000_new_builtin_md_vectorized_function): Likewise.
+ 	(rs6000_builtin_vectorized_function): Call
+ 	rs6000_new_builtin_vectorized_function.
+ 	(rs6000_builtin_md_vectorized_function): Call
+ 	rs6000_new_builtin_md_vectorized_function.
+ 
+ 2021-09-17  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def (ASSEMBLE_ACC): Add mmaint flag.
+ 	(ASSEMBLE_PAIR): Likewise.
+ 	(BUILD_ACC): Likewise.
+ 	(DISASSEMBLE_ACC): Likewise.
+ 	(DISASSEMBLE_PAIR): Likewise.
+ 	(PMXVBF16GER2): Likewise.
+ 	(PMXVBF16GER2NN): Likewise.
+ 	(PMXVBF16GER2NP): Likewise.
+ 	(PMXVBF16GER2PN): Likewise.
+ 	(PMXVBF16GER2PP): Likewise.
+ 	(PMXVF16GER2): Likewise.
+ 	(PMXVF16GER2NN): Likewise.
+ 	(PMXVF16GER2NP): Likewise.
+ 	(PMXVF16GER2PN): Likewise.
+ 	(PMXVF16GER2PP): Likewise.
+ 	(PMXVF32GER): Likewise.
+ 	(PMXVF32GERNN): Likewise.
+ 	(PMXVF32GERNP): Likewise.
+ 	(PMXVF32GERPN): Likewise.
+ 	(PMXVF32GERPP): Likewise.
+ 	(PMXVF64GER): Likewise.
+ 	(PMXVF64GERNN): Likewise.
+ 	(PMXVF64GERNP): Likewise.
+ 	(PMXVF64GERPN): Likewise.
+ 	(PMXVF64GERPP): Likewise.
+ 	(PMXVI16GER2): Likewise.
+ 	(PMXVI16GER2PP): Likewise.
+ 	(PMXVI16GER2S): Likewise.
+ 	(PMXVI16GER2SPP): Likewise.
+ 	(PMXVI4GER8): Likewise.
+ 	(PMXVI4GER8PP): Likewise.
+ 	(PMXVI8GER4): Likewise.
+ 	(PMXVI8GER4PP): Likewise.
+ 	(PMXVI8GER4SPP): Likewise.
+ 	(XVBF16GER2): Likewise.
+ 	(XVBF16GER2NN): Likewise.
+ 	(XVBF16GER2NP): Likewise.
+ 	(XVBF16GER2PN): Likewise.
+ 	(XVBF16GER2PP): Likewise.
+ 	(XVF16GER2): Likewise.
+ 	(XVF16GER2NN): Likewise.
+ 	(XVF16GER2NP): Likewise.
+ 	(XVF16GER2PN): Likewise.
+ 	(XVF16GER2PP): Likewise.
+ 	(XVF32GER): Likewise.
+ 	(XVF32GERNN): Likewise.
+ 	(XVF32GERNP): Likewise.
+ 	(XVF32GERPN): Likewise.
+ 	(XVF32GERPP): Likewise.
+ 	(XVF64GER): Likewise.
+ 	(XVF64GERNN): Likewise.
+ 	(XVF64GERNP): Likewise.
+ 	(XVF64GERPN): Likewise.
+ 	(XVF64GERPP): Likewise.
+ 	(XVI16GER2): Likewise.
+ 	(XVI16GER2PP): Likewise.
+ 	(XVI16GER2S): Likewise.
+ 	(XVI16GER2SPP): Likewise.
+ 	(XVI4GER8): Likewise.
+ 	(XVI4GER8PP): Likewise.
+ 	(XVI8GER4): Likewise.
+ 	(XVI8GER4PP): Likewise.
+ 	(XVI8GER4SPP): Likewise.
+ 	(XXMFACC): Likewise.
+ 	(XXMTACC): Likewise.
+ 	(XXSETACCZ): Likewise.
+ 	(ASSEMBLE_PAIR_V): Likewise.
+ 	(BUILD_PAIR): Likewise.
+ 	(DISASSEMBLE_PAIR_V): Likewise.
+ 	(LXVP): New.
+ 	(STXVP): New.
+ 	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_new_mma_builtin):
+ 	Handle RS6000_BIF_LXVP and RS6000_BIF_STXVP.
+ 	* config/rs6000/rs6000-gen-builtins.c (attrinfo): Add ismmaint.
+ 	(parse_bif_attrs): Handle ismmaint.
+ 	(write_decls): Add bif_mmaint_bit and bif_is_mmaint.
+ 	(write_bif_static_init): Handle ismmaint.
+ 
+ 2021-09-17  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_new_builtin): New
+ 	forward decl.
+ 	(rs6000_gimple_fold_builtin): Call rs6000_gimple_fold_new_builtin.
+ 	(rs6000_new_builtin_valid_without_lhs): New function.
+ 	(rs6000_gimple_fold_new_mma_builtin): Likewise.
+ 	(rs6000_gimple_fold_new_builtin): Likewise.
+ 
+ 2021-09-17  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* hash-table.h (hash_table<Descriptor, Lazy, Allocator>::expand):
+ 	Destruct stale Value objects.
+ 	* hash-map-tests.c (test_map_of_type_with_ctor_and_dtor_expand):
+ 	Update.
+ 
+ 2021-09-17  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR c/102245
+ 	* match.pd (shift optimizations): Disable recent sign-changing
+ 	optimization for shifts by zero, these will be folded later.
+ 
+ 2021-09-17  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def (__builtin_mffsl): Move from
+ 	[power9] to [always].
+ 
+ 2021-09-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-stmts.c (vectorizable_load): Do not frob
+ 	stmt_info for SLP.
+ 
+ 2021-09-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/i386-features.c (remove_partial_avx_dependency):
+ 	Also check TARGET_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY and
+ 	and TARGET_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY before generating
+ 	vxorps.
+ 	* config/i386/i386.h (TARGET_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY):
+ 	New.
+ 	(TARGET_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY): Likewise.
+ 	* config/i386/i386.md (SSE FP to FP splitters): Replace
+ 	TARGET_SSE_PARTIAL_REG_DEPENDENCY with
+ 	TARGET_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY.
+ 	(SSE INT to FP splitter): Replace TARGET_SSE_PARTIAL_REG_DEPENDENCY
+ 	with TARGET_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY.
+ 	* config/i386/x86-tune.def
+ 	(X86_TUNE_SSE_PARTIAL_REG_FP_CONVERTS_DEPENDENCY): New.
+ 	(X86_TUNE_SSE_PARTIAL_REG_CONVERTS_DEPENDENCY): Likewise.
+ 
+ 2021-09-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101900
+ 	* config/i386/i386-features.c (remove_partial_avx_dependency):
+ 	Check TARGET_USE_VECTOR_FP_CONVERTS and TARGET_USE_VECTOR_CONVERTS
+ 	before generating vxorps.
+ 
+ 2021-09-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/i386-options.c (processor_cost_table): Use
+ 	tremont_cost for Tremont.
+ 	* config/i386/x86-tune-costs.h (tremont_memcpy): New.
+ 	(tremont_memset): Likewise.
+ 	(tremont_cost): Likewise.
+ 	* config/i386/x86-tune.def (X86_TUNE_PREFER_KNOWN_REP_MOVSB_STOSB):
+ 	Enable for Tremont.
+ 
+ 2021-09-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* common/config/i386/i386-common.c: Use Haswell scheduling model
+ 	for Tremont.
+ 	* config/i386/i386.c (ix86_sched_init_global): Prepare for Tremont
+ 	scheduling pass.
+ 	* config/i386/x86-tune-sched.c (ix86_issue_rate): Change Tremont
+ 	issue rate to 4.
+ 	(ix86_adjust_cost): Handle Tremont.
+ 	* config/i386/x86-tune.def (X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY):
+ 	Enable for Tremont.
+ 	(X86_TUNE_USE_LEAVE): Likewise.
+ 	(X86_TUNE_PUSH_MEMORY): Likewise.
+ 	(X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES): Likewise.
+ 	(X86_TUNE_USE_CLTD): Likewise.
+ 	(X86_TUNE_AVOID_FALSE_DEP_FOR_BMI): Likewise.
+ 	(X86_TUNE_AVOID_MFENCE): Likewise.
+ 	(X86_TUNE_SSE_TYPELESS_STORES): Likewise.
+ 	(X86_TUNE_SSE_LOAD0_BY_PXOR): Likewise.
+ 	(X86_TUNE_ACCUMULATE_OUTGOING_ARGS): Disable for Tremont.
+ 	(X86_TUNE_FOUR_JUMP_LIMIT): Likewise.
+ 	(X86_TUNE_OPT_AGU): Likewise.
+ 	(X86_TUNE_AVOID_LEA_FOR_ADDR): Likewise.
+ 	(X86_TUNE_AVOID_MEM_OPND_FOR_CMOVE): Likewise.
+ 	(X86_TUNE_EXPAND_ABS): Likewise.
+ 	(X86_TUNE_SPLIT_MEM_OPND_FOR_FP_CONVERTS): Likewise.
+ 	(X86_TUNE_SLOW_PSHUFB): Likewise.
+ 
+ 2021-09-17  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR rtl-optimization/102306
+ 	* combine.c (try_combine): Abort the combination if we are about to
+ 	duplicate volatile references.
+ 
+ 2021-09-17  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm_undefined_ph):
+ 	New intrinsic.
+ 	(_mm256_undefined_ph): Likewise.
+ 	(_mm512_undefined_ph): Likewise.
+ 	(_mm_cvtsh_h): Likewise.
+ 	(_mm256_cvtsh_h): Likewise.
+ 	(_mm512_cvtsh_h): Likewise.
+ 	(_mm512_castph_ps): Likewise.
+ 	(_mm512_castph_pd): Likewise.
+ 	(_mm512_castph_si512): Likewise.
+ 	(_mm512_castph512_ph128): Likewise.
+ 	(_mm512_castph512_ph256): Likewise.
+ 	(_mm512_castph128_ph512): Likewise.
+ 	(_mm512_castph256_ph512): Likewise.
+ 	(_mm512_zextph128_ph512): Likewise.
+ 	(_mm512_zextph256_ph512): Likewise.
+ 	(_mm512_castps_ph): Likewise.
+ 	(_mm512_castpd_ph): Likewise.
+ 	(_mm512_castsi512_ph): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm_castph_ps):
+ 	New intrinsic.
+ 	(_mm256_castph_ps): Likewise.
+ 	(_mm_castph_pd): Likewise.
+ 	(_mm256_castph_pd): Likewise.
+ 	(_mm_castph_si128): Likewise.
+ 	(_mm256_castph_si256): Likewise.
+ 	(_mm_castps_ph): Likewise.
+ 	(_mm256_castps_ph): Likewise.
+ 	(_mm_castpd_ph): Likewise.
+ 	(_mm256_castpd_ph): Likewise.
+ 	(_mm_castsi128_ph): Likewise.
+ 	(_mm256_castsi256_ph): Likewise.
+ 	(_mm256_castph256_ph128): Likewise.
+ 	(_mm256_castph128_ph256): Likewise.
+ 	(_mm256_zextph128_ph256): Likewise.
+ 
+ 2021-09-17  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm_cvtsh_ss):
+ 	New intrinsic.
+ 	(_mm_mask_cvtsh_ss): Likewise.
+ 	(_mm_maskz_cvtsh_ss): Likewise.
+ 	(_mm_cvtsh_sd): Likewise.
+ 	(_mm_mask_cvtsh_sd): Likewise.
+ 	(_mm_maskz_cvtsh_sd): Likewise.
+ 	(_mm_cvt_roundsh_ss): Likewise.
+ 	(_mm_mask_cvt_roundsh_ss): Likewise.
+ 	(_mm_maskz_cvt_roundsh_ss): Likewise.
+ 	(_mm_cvt_roundsh_sd): Likewise.
+ 	(_mm_mask_cvt_roundsh_sd): Likewise.
+ 	(_mm_maskz_cvt_roundsh_sd): Likewise.
+ 	(_mm_cvtss_sh): Likewise.
+ 	(_mm_mask_cvtss_sh): Likewise.
+ 	(_mm_maskz_cvtss_sh): Likewise.
+ 	(_mm_cvtsd_sh): Likewise.
+ 	(_mm_mask_cvtsd_sh): Likewise.
+ 	(_mm_maskz_cvtsd_sh): Likewise.
+ 	(_mm_cvt_roundss_sh): Likewise.
+ 	(_mm_mask_cvt_roundss_sh): Likewise.
+ 	(_mm_maskz_cvt_roundss_sh): Likewise.
+ 	(_mm_cvt_roundsd_sh): Likewise.
+ 	(_mm_mask_cvt_roundsd_sh): Likewise.
+ 	(_mm_maskz_cvt_roundsd_sh): Likewise.
+ 	* config/i386/i386-builtin-types.def
+ 	(V8HF_FTYPE_V2DF_V8HF_V8HF_UQI_INT,
+ 	V8HF_FTYPE_V4SF_V8HF_V8HF_UQI_INT,
+ 	V2DF_FTYPE_V8HF_V2DF_V2DF_UQI_INT,
+ 	V4SF_FTYPE_V8HF_V4SF_V4SF_UQI_INT): Add new builtin types.
+ 	* config/i386/i386-builtin.def: Add corrresponding new builtins.
+ 	* config/i386/i386-expand.c: Handle new builtin types.
+ 	* config/i386/sse.md (VF48_128): New mode iterator.
+ 	(avx512fp16_vcvtsh2<ssescalarmodesuffix><mask_scalar_name><round_saeonly_scalar_name>):
+ 	New.
+ 	(avx512fp16_vcvt<ssescalarmodesuffix>2sh<mask_scalar_name><round_scalar_name>):
+ 	Ditto.
+ 
+ 2021-09-17  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm512_cvtph_pd):
+ 	New intrinsic.
+ 	(_mm512_mask_cvtph_pd): Likewise.
+ 	(_mm512_maskz_cvtph_pd): Likewise.
+ 	(_mm512_cvt_roundph_pd): Likewise.
+ 	(_mm512_mask_cvt_roundph_pd): Likewise.
+ 	(_mm512_maskz_cvt_roundph_pd): Likewise.
+ 	(_mm512_cvtxph_ps): Likewise.
+ 	(_mm512_mask_cvtxph_ps): Likewise.
+ 	(_mm512_maskz_cvtxph_ps): Likewise.
+ 	(_mm512_cvtx_roundph_ps): Likewise.
+ 	(_mm512_mask_cvtx_roundph_ps): Likewise.
+ 	(_mm512_maskz_cvtx_roundph_ps): Likewise.
+ 	(_mm512_cvtxps_ph): Likewise.
+ 	(_mm512_mask_cvtxps_ph): Likewise.
+ 	(_mm512_maskz_cvtxps_ph): Likewise.
+ 	(_mm512_cvtx_roundps_ph): Likewise.
+ 	(_mm512_mask_cvtx_roundps_ph): Likewise.
+ 	(_mm512_maskz_cvtx_roundps_ph): Likewise.
+ 	(_mm512_cvtpd_ph): Likewise.
+ 	(_mm512_mask_cvtpd_ph): Likewise.
+ 	(_mm512_maskz_cvtpd_ph): Likewise.
+ 	(_mm512_cvt_roundpd_ph): Likewise.
+ 	(_mm512_mask_cvt_roundpd_ph): Likewise.
+ 	(_mm512_maskz_cvt_roundpd_ph): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm_cvtph_pd):
+ 	New intrinsic.
+ 	(_mm_mask_cvtph_pd): Likewise.
+ 	(_mm_maskz_cvtph_pd): Likewise.
+ 	(_mm256_cvtph_pd): Likewise.
+ 	(_mm256_mask_cvtph_pd): Likewise.
+ 	(_mm256_maskz_cvtph_pd): Likewise.
+ 	(_mm_cvtxph_ps): Likewise.
+ 	(_mm_mask_cvtxph_ps): Likewise.
+ 	(_mm_maskz_cvtxph_ps): Likewise.
+ 	(_mm256_cvtxph_ps): Likewise.
+ 	(_mm256_mask_cvtxph_ps): Likewise.
+ 	(_mm256_maskz_cvtxph_ps): Likewise.
+ 	(_mm_cvtxps_ph): Likewise.
+ 	(_mm_mask_cvtxps_ph): Likewise.
+ 	(_mm_maskz_cvtxps_ph): Likewise.
+ 	(_mm256_cvtxps_ph): Likewise.
+ 	(_mm256_mask_cvtxps_ph): Likewise.
+ 	(_mm256_maskz_cvtxps_ph): Likewise.
+ 	(_mm_cvtpd_ph): Likewise.
+ 	(_mm_mask_cvtpd_ph): Likewise.
+ 	(_mm_maskz_cvtpd_ph): Likewise.
+ 	(_mm256_cvtpd_ph): Likewise.
+ 	(_mm256_mask_cvtpd_ph): Likewise.
+ 	(_mm256_maskz_cvtpd_ph): Likewise.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/i386-builtin-types.def: Add corresponding builtin types.
+ 	* config/i386/i386-expand.c: Handle new builtin types.
+ 	* config/i386/sse.md
+ 	(VF4_128_8_256): New.
+ 	(VF48H_AVX512VL): Ditto.
+ 	(ssePHmode): Add HF vector modes.
+ 	(castmode): Add new convertable modes.
+ 	(qq2phsuff): Ditto.
+ 	(ph2pssuffix): New.
+ 	(avx512fp16_vcvt<castmode>2ph_<mode><mask_name><round_name>): Ditto.
+ 	(avx512fp16_vcvt<castmode>2ph_<mode>): Ditto.
+ 	(*avx512fp16_vcvt<castmode>2ph_<mode>): Ditto.
+ 	(avx512fp16_vcvt<castmode>2ph_<mode>_mask): Ditto.
+ 	(*avx512fp16_vcvt<castmode>2ph_<mode>_mask): Ditto.
+ 	(*avx512fp16_vcvt<castmode>2ph_<mode>_mask_1): Ditto.
+ 	(avx512fp16_float_extend_ph<mode>2<mask_name><round_saeonly_name>):
+ 	Ditto.
+ 	(avx512fp16_float_extend_ph<mode>2<mask_name>): Ditto.
+ 	(*avx512fp16_float_extend_ph<mode>2_load<mask_name>): Ditto.
+ 	(avx512fp16_float_extend_phv2df2<mask_name>): Ditto.
+ 	(*avx512fp16_float_extend_phv2df2_load<mask_name>): Ditto.
+ 
+ 2021-09-17  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm_cvttsh_i32):
+ 	New intrinsic.
+ 	(_mm_cvttsh_u32): Likewise.
+ 	(_mm_cvtt_roundsh_i32): Likewise.
+ 	(_mm_cvtt_roundsh_u32): Likewise.
+ 	(_mm_cvttsh_i64): Likewise.
+ 	(_mm_cvttsh_u64): Likewise.
+ 	(_mm_cvtt_roundsh_i64): Likewise.
+ 	(_mm_cvtt_roundsh_u64): Likewise.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/sse.md
+ 	(avx512fp16_fix<fixunssuffix>_trunc<mode>2<round_saeonly_name>):
+ 	New.
+ 
+ 2021-09-17  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm512_cvttph_epi32):
+ 	New intrinsic.
+ 	(_mm512_mask_cvttph_epi32): Likewise.
+ 	(_mm512_maskz_cvttph_epi32): Likewise.
+ 	(_mm512_cvtt_roundph_epi32): Likewise.
+ 	(_mm512_mask_cvtt_roundph_epi32): Likewise.
+ 	(_mm512_maskz_cvtt_roundph_epi32): Likewise.
+ 	(_mm512_cvttph_epu32): Likewise.
+ 	(_mm512_mask_cvttph_epu32): Likewise.
+ 	(_mm512_maskz_cvttph_epu32): Likewise.
+ 	(_mm512_cvtt_roundph_epu32): Likewise.
+ 	(_mm512_mask_cvtt_roundph_epu32): Likewise.
+ 	(_mm512_maskz_cvtt_roundph_epu32): Likewise.
+ 	(_mm512_cvttph_epi64): Likewise.
+ 	(_mm512_mask_cvttph_epi64): Likewise.
+ 	(_mm512_maskz_cvttph_epi64): Likewise.
+ 	(_mm512_cvtt_roundph_epi64): Likewise.
+ 	(_mm512_mask_cvtt_roundph_epi64): Likewise.
+ 	(_mm512_maskz_cvtt_roundph_epi64): Likewise.
+ 	(_mm512_cvttph_epu64): Likewise.
+ 	(_mm512_mask_cvttph_epu64): Likewise.
+ 	(_mm512_maskz_cvttph_epu64): Likewise.
+ 	(_mm512_cvtt_roundph_epu64): Likewise.
+ 	(_mm512_mask_cvtt_roundph_epu64): Likewise.
+ 	(_mm512_maskz_cvtt_roundph_epu64): Likewise.
+ 	(_mm512_cvttph_epi16): Likewise.
+ 	(_mm512_mask_cvttph_epi16): Likewise.
+ 	(_mm512_maskz_cvttph_epi16): Likewise.
+ 	(_mm512_cvtt_roundph_epi16): Likewise.
+ 	(_mm512_mask_cvtt_roundph_epi16): Likewise.
+ 	(_mm512_maskz_cvtt_roundph_epi16): Likewise.
+ 	(_mm512_cvttph_epu16): Likewise.
+ 	(_mm512_mask_cvttph_epu16): Likewise.
+ 	(_mm512_maskz_cvttph_epu16): Likewise.
+ 	(_mm512_cvtt_roundph_epu16): Likewise.
+ 	(_mm512_mask_cvtt_roundph_epu16): Likewise.
+ 	(_mm512_maskz_cvtt_roundph_epu16): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm_cvttph_epi32):
+ 	New intirnsic.
+ 	(_mm_mask_cvttph_epi32): Likewise.
+ 	(_mm_maskz_cvttph_epi32): Likewise.
+ 	(_mm256_cvttph_epi32): Likewise.
+ 	(_mm256_mask_cvttph_epi32): Likewise.
+ 	(_mm256_maskz_cvttph_epi32): Likewise.
+ 	(_mm_cvttph_epu32): Likewise.
+ 	(_mm_mask_cvttph_epu32): Likewise.
+ 	(_mm_maskz_cvttph_epu32): Likewise.
+ 	(_mm256_cvttph_epu32): Likewise.
+ 	(_mm256_mask_cvttph_epu32): Likewise.
+ 	(_mm256_maskz_cvttph_epu32): Likewise.
+ 	(_mm_cvttph_epi64): Likewise.
+ 	(_mm_mask_cvttph_epi64): Likewise.
+ 	(_mm_maskz_cvttph_epi64): Likewise.
+ 	(_mm256_cvttph_epi64): Likewise.
+ 	(_mm256_mask_cvttph_epi64): Likewise.
+ 	(_mm256_maskz_cvttph_epi64): Likewise.
+ 	(_mm_cvttph_epu64): Likewise.
+ 	(_mm_mask_cvttph_epu64): Likewise.
+ 	(_mm_maskz_cvttph_epu64): Likewise.
+ 	(_mm256_cvttph_epu64): Likewise.
+ 	(_mm256_mask_cvttph_epu64): Likewise.
+ 	(_mm256_maskz_cvttph_epu64): Likewise.
+ 	(_mm_cvttph_epi16): Likewise.
+ 	(_mm_mask_cvttph_epi16): Likewise.
+ 	(_mm_maskz_cvttph_epi16): Likewise.
+ 	(_mm256_cvttph_epi16): Likewise.
+ 	(_mm256_mask_cvttph_epi16): Likewise.
+ 	(_mm256_maskz_cvttph_epi16): Likewise.
+ 	(_mm_cvttph_epu16): Likewise.
+ 	(_mm_mask_cvttph_epu16): Likewise.
+ 	(_mm_maskz_cvttph_epu16): Likewise.
+ 	(_mm256_cvttph_epu16): Likewise.
+ 	(_mm256_mask_cvttph_epu16): Likewise.
+ 	(_mm256_maskz_cvttph_epu16): Likewise.
+ 	* config/i386/i386-builtin.def: Add new builtins.
+ 	* config/i386/sse.md
+ 	(avx512fp16_fix<fixunssuffix>_trunc<mode>2<mask_name><round_saeonly_name>):
+ 	New.
+ 	(avx512fp16_fix<fixunssuffix>_trunc<mode>2<mask_name>): Ditto.
+ 	(*avx512fp16_fix<fixunssuffix>_trunc<mode>2_load<mask_name>): Ditto.
+ 	(avx512fp16_fix<fixunssuffix>_truncv2di2<mask_name>): Ditto.
+ 	(avx512fp16_fix<fixunssuffix>_truncv2di2_load<mask_name>): Ditto.
+ 
+ 2021-09-17  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm_cvtsh_i32): New intrinsic.
+ 	(_mm_cvtsh_u32): Likewise.
+ 	(_mm_cvt_roundsh_i32): Likewise.
+ 	(_mm_cvt_roundsh_u32): Likewise.
+ 	(_mm_cvtsh_i64): Likewise.
+ 	(_mm_cvtsh_u64): Likewise.
+ 	(_mm_cvt_roundsh_i64): Likewise.
+ 	(_mm_cvt_roundsh_u64): Likewise.
+ 	(_mm_cvti32_sh): Likewise.
+ 	(_mm_cvtu32_sh): Likewise.
+ 	(_mm_cvt_roundi32_sh): Likewise.
+ 	(_mm_cvt_roundu32_sh): Likewise.
+ 	(_mm_cvti64_sh): Likewise.
+ 	(_mm_cvtu64_sh): Likewise.
+ 	(_mm_cvt_roundi64_sh): Likewise.
+ 	(_mm_cvt_roundu64_sh): Likewise.
+ 	* config/i386/i386-builtin-types.def: Add corresponding builtin types.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/i386-expand.c (ix86_expand_round_builtin):
+ 	Handle new builtin types.
+ 	* config/i386/sse.md
+ 	(avx512fp16_vcvtsh2<sseintconvertsignprefix>si<rex64namesuffix><round_name>):
+ 	New define_insn.
+ 	(avx512fp16_vcvtsh2<sseintconvertsignprefix>si<rex64namesuffix>_2): Likewise.
+ 	(avx512fp16_vcvt<floatsuffix>si2sh<rex64namesuffix><round_name>): Likewise.
+ 
+ 2021-09-16  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-c.c (rs6000-builtins.h): New include.
+ 	(altivec_resolve_new_overloaded_builtin): New forward decl.
+ 	(rs6000_new_builtin_type_compatible): New function.
+ 	(altivec_resolve_overloaded_builtin): Call
+ 	altivec_resolve_new_overloaded_builtin.
+ 	(altivec_build_new_resolved_builtin): New function.
+ 	(altivec_resolve_new_overloaded_builtin): Likewise.
+ 	* config/rs6000/rs6000-call.c (rs6000_new_builtin_is_supported):
+ 	Likewise.
+ 	* config/rs6000/rs6000-gen-builtins.c (write_decls): Remove _p from
+ 	name of rs6000_new_builtin_is_supported.
+ 
+ 2021-09-16  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386-protos.h (ix86_decompose_address):
+ 	Change return type to bool.
+ 	* config/i386/i386.c (ix86_decompose_address): Ditto.
+ 
+ 2021-09-16  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	PR target/102353
+ 	* config/rs6000/t-rs6000 (build/rs6000-gen-builtins.o, build/rbtree.o):
+ 	Added 'build/' to target, use build/%.o rule.
+ 	(build/rs6000-gen-builtins$(build_exeext)): Add 'build/' and
+ 	'$(build_exeext)' to target and 'build/' for the *.o files.
+ 	(rs6000-builtins.c): Update for those changes; run rs6000-gen-builtins
+ 	with $(RUN_GEN).
+ 
+ 2021-09-16  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* cgraph.c (cgraph_node::dump): Do not check caller count sums if
+ 	the body has been removed.  Remove trailing whitespace.
+ 
+ 2021-09-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/102360
+ 	* internal-fn.c (expand_DEFERRED_INIT): Make pattern-init
+ 	of non-memory more robust.
+ 
+ 2021-09-16  Daniel Cederman  <cederman@gaisler.com>
+ 
+ 	* config/sparc/sparc-opts.h (enum sparc_processor_type): Add LEON5
+ 	* config/sparc/sparc.c (struct processor_costs): Add LEON5 costs
+ 	(leon5_adjust_cost): Increase cost of store with data dependency
+ 	on ALU instruction and FPU anti-dependencies.
+ 	(sparc_option_override): Add LEON5 costs
+ 	(sparc_adjust_cost): Add LEON5 cost adjustments
+ 	* config/sparc/sparc.h: Add LEON5
+ 	* config/sparc/sparc.md: Include LEON5 scheduling information
+ 	* config/sparc/sparc.opt: Add LEON5
+ 	* doc/invoke.texi: Add LEON5
+ 	* config/sparc/leon5.md: New file.
+ 
+ 2021-09-16  Daniel Cederman  <cederman@gaisler.com>
+ 
+ 	* config/sparc/sparc.md (stack_protect_set32): Add NOP to prevent
+ 	sensitive sequence for B2BST errata workaround.
+ 
+ 2021-09-16  Daniel Cederman  <cederman@gaisler.com>
+ 
+ 	* config/sparc/sparc.c (sparc_do_work_around_errata): Do not begin
+ 	functions with atomic instruction in the UT700 errata workaround.
+ 
+ 2021-09-16  Daniel Cederman  <cederman@gaisler.com>
+ 
+ 	* config/sparc/sparc.c (next_active_non_empty_insn): New function
+ 	that returns next active non empty assembly instruction.
+ 	(sparc_do_work_around_errata): Use new function.
+ 
+ 2021-09-16  Daniel Cederman  <cederman@gaisler.com>
+ 
+ 	* config/sparc/sparc.c (store_insn_p): Add predicate for store
+ 	attributes.
+ 	(load_insn_p): Add predicate for load attributes.
+ 	(sparc_do_work_around_errata): Use new predicates.
+ 
+ 2021-09-16  Andreas Larsson  <andreas@gaisler.com>
+ 
+ 	* config/sparc/sparc.c (dump_target_flag_bits): Print bit names for
+ 	LEON and LEON3.
+ 
+ 2021-09-16  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/mips/netbsd.h: Fix typo in name of a macro.
+ 
+ 2021-09-16  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR middle-end/102080
+ 	* match.pd: Check mask type when doing cond_op related gimple
+ 	simplification.
+ 	* tree.c (is_truth_type_for): New function.
+ 	* tree.h (is_truth_type_for): New declaration.
+ 
+ 2021-09-16  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm512_cvtepi32_ph): New
+ 	intrinsic.
+ 	(_mm512_mask_cvtepi32_ph): Likewise.
+ 	(_mm512_maskz_cvtepi32_ph): Likewise.
+ 	(_mm512_cvt_roundepi32_ph): Likewise.
+ 	(_mm512_mask_cvt_roundepi32_ph): Likewise.
+ 	(_mm512_maskz_cvt_roundepi32_ph): Likewise.
+ 	(_mm512_cvtepu32_ph): Likewise.
+ 	(_mm512_mask_cvtepu32_ph): Likewise.
+ 	(_mm512_maskz_cvtepu32_ph): Likewise.
+ 	(_mm512_cvt_roundepu32_ph): Likewise.
+ 	(_mm512_mask_cvt_roundepu32_ph): Likewise.
+ 	(_mm512_maskz_cvt_roundepu32_ph): Likewise.
+ 	(_mm512_cvtepi64_ph): Likewise.
+ 	(_mm512_mask_cvtepi64_ph): Likewise.
+ 	(_mm512_maskz_cvtepi64_ph): Likewise.
+ 	(_mm512_cvt_roundepi64_ph): Likewise.
+ 	(_mm512_mask_cvt_roundepi64_ph): Likewise.
+ 	(_mm512_maskz_cvt_roundepi64_ph): Likewise.
+ 	(_mm512_cvtepu64_ph): Likewise.
+ 	(_mm512_mask_cvtepu64_ph): Likewise.
+ 	(_mm512_maskz_cvtepu64_ph): Likewise.
+ 	(_mm512_cvt_roundepu64_ph): Likewise.
+ 	(_mm512_mask_cvt_roundepu64_ph): Likewise.
+ 	(_mm512_maskz_cvt_roundepu64_ph): Likewise.
+ 	(_mm512_cvtepi16_ph): Likewise.
+ 	(_mm512_mask_cvtepi16_ph): Likewise.
+ 	(_mm512_maskz_cvtepi16_ph): Likewise.
+ 	(_mm512_cvt_roundepi16_ph): Likewise.
+ 	(_mm512_mask_cvt_roundepi16_ph): Likewise.
+ 	(_mm512_maskz_cvt_roundepi16_ph): Likewise.
+ 	(_mm512_cvtepu16_ph): Likewise.
+ 	(_mm512_mask_cvtepu16_ph): Likewise.
+ 	(_mm512_maskz_cvtepu16_ph): Likewise.
+ 	(_mm512_cvt_roundepu16_ph): Likewise.
+ 	(_mm512_mask_cvt_roundepu16_ph): Likewise.
+ 	(_mm512_maskz_cvt_roundepu16_ph): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm_cvtepi32_ph): New
+ 	intrinsic.
+ 	(_mm_mask_cvtepi32_ph): Likewise.
+ 	(_mm_maskz_cvtepi32_ph): Likewise.
+ 	(_mm256_cvtepi32_ph): Likewise.
+ 	(_mm256_mask_cvtepi32_ph): Likewise.
+ 	(_mm256_maskz_cvtepi32_ph): Likewise.
+ 	(_mm_cvtepu32_ph): Likewise.
+ 	(_mm_mask_cvtepu32_ph): Likewise.
+ 	(_mm_maskz_cvtepu32_ph): Likewise.
+ 	(_mm256_cvtepu32_ph): Likewise.
+ 	(_mm256_mask_cvtepu32_ph): Likewise.
+ 	(_mm256_maskz_cvtepu32_ph): Likewise.
+ 	(_mm_cvtepi64_ph): Likewise.
+ 	(_mm_mask_cvtepi64_ph): Likewise.
+ 	(_mm_maskz_cvtepi64_ph): Likewise.
+ 	(_mm256_cvtepi64_ph): Likewise.
+ 	(_mm256_mask_cvtepi64_ph): Likewise.
+ 	(_mm256_maskz_cvtepi64_ph): Likewise.
+ 	(_mm_cvtepu64_ph): Likewise.
+ 	(_mm_mask_cvtepu64_ph): Likewise.
+ 	(_mm_maskz_cvtepu64_ph): Likewise.
+ 	(_mm256_cvtepu64_ph): Likewise.
+ 	(_mm256_mask_cvtepu64_ph): Likewise.
+ 	(_mm256_maskz_cvtepu64_ph): Likewise.
+ 	(_mm_cvtepi16_ph): Likewise.
+ 	(_mm_mask_cvtepi16_ph): Likewise.
+ 	(_mm_maskz_cvtepi16_ph): Likewise.
+ 	(_mm256_cvtepi16_ph): Likewise.
+ 	(_mm256_mask_cvtepi16_ph): Likewise.
+ 	(_mm256_maskz_cvtepi16_ph): Likewise.
+ 	(_mm_cvtepu16_ph): Likewise.
+ 	(_mm_mask_cvtepu16_ph): Likewise.
+ 	(_mm_maskz_cvtepu16_ph): Likewise.
+ 	(_mm256_cvtepu16_ph): Likewise.
+ 	(_mm256_mask_cvtepu16_ph): Likewise.
+ 	(_mm256_maskz_cvtepu16_ph): Likewise.
+ 	* config/i386/i386-builtin-types.def: Add corresponding builtin types.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/i386-expand.c
+ 	(ix86_expand_args_builtin): Handle new builtin types.
+ 	(ix86_expand_round_builtin): Ditto.
+ 	* config/i386/i386-modes.def: Declare V2HF and V6HF.
+ 	* config/i386/sse.md (VI2H_AVX512VL): New.
+ 	(qq2phsuff): Ditto.
+ 	(sseintvecmode): Add HF vector modes.
+ 	(avx512fp16_vcvt<floatsuffix><sseintconvert>2ph_<mode><mask_name><round_name>):
+ 	New.
+ 	(avx512fp16_vcvt<floatsuffix><sseintconvert>2ph_<mode>): Ditto.
+ 	(*avx512fp16_vcvt<floatsuffix><sseintconvert>2ph_<mode>): Ditto.
+ 	(avx512fp16_vcvt<floatsuffix><sseintconvert>2ph_<mode>_mask): Ditto.
+ 	(*avx512fp16_vcvt<floatsuffix><sseintconvert>2ph_<mode>_mask): Ditto.
+ 	(*avx512fp16_vcvt<floatsuffix><sseintconvert>2ph_<mode>_mask_1): Ditto.
+ 	(avx512fp16_vcvt<floatsuffix>qq2ph_v2di): Ditto.
+ 	(*avx512fp16_vcvt<floatsuffix>qq2ph_v2di): Ditto.
+ 	(avx512fp16_vcvt<floatsuffix>qq2ph_v2di_mask): Ditto.
+ 	(*avx512fp16_vcvt<floatsuffix>qq2ph_v2di_mask): Ditto.
+ 	(*avx512fp16_vcvt<floatsuffix>qq2ph_v2di_mask_1): Ditto.
+ 	* config/i386/subst.md (round_qq2phsuff): New subst_attr.
+ 
+ 2021-09-16  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm512_cvtph_epi32):
+ 	New intrinsic/
+ 	(_mm512_mask_cvtph_epi32): Likewise.
+ 	(_mm512_maskz_cvtph_epi32): Likewise.
+ 	(_mm512_cvt_roundph_epi32): Likewise.
+ 	(_mm512_mask_cvt_roundph_epi32): Likewise.
+ 	(_mm512_maskz_cvt_roundph_epi32): Likewise.
+ 	(_mm512_cvtph_epu32): Likewise.
+ 	(_mm512_mask_cvtph_epu32): Likewise.
+ 	(_mm512_maskz_cvtph_epu32): Likewise.
+ 	(_mm512_cvt_roundph_epu32): Likewise.
+ 	(_mm512_mask_cvt_roundph_epu32): Likewise.
+ 	(_mm512_maskz_cvt_roundph_epu32): Likewise.
+ 	(_mm512_cvtph_epi64): Likewise.
+ 	(_mm512_mask_cvtph_epi64): Likewise.
+ 	(_mm512_maskz_cvtph_epi64): Likewise.
+ 	(_mm512_cvt_roundph_epi64): Likewise.
+ 	(_mm512_mask_cvt_roundph_epi64): Likewise.
+ 	(_mm512_maskz_cvt_roundph_epi64): Likewise.
+ 	(_mm512_cvtph_epu64): Likewise.
+ 	(_mm512_mask_cvtph_epu64): Likewise.
+ 	(_mm512_maskz_cvtph_epu64): Likewise.
+ 	(_mm512_cvt_roundph_epu64): Likewise.
+ 	(_mm512_mask_cvt_roundph_epu64): Likewise.
+ 	(_mm512_maskz_cvt_roundph_epu64): Likewise.
+ 	(_mm512_cvtph_epi16): Likewise.
+ 	(_mm512_mask_cvtph_epi16): Likewise.
+ 	(_mm512_maskz_cvtph_epi16): Likewise.
+ 	(_mm512_cvt_roundph_epi16): Likewise.
+ 	(_mm512_mask_cvt_roundph_epi16): Likewise.
+ 	(_mm512_maskz_cvt_roundph_epi16): Likewise.
+ 	(_mm512_cvtph_epu16): Likewise.
+ 	(_mm512_mask_cvtph_epu16): Likewise.
+ 	(_mm512_maskz_cvtph_epu16): Likewise.
+ 	(_mm512_cvt_roundph_epu16): Likewise.
+ 	(_mm512_mask_cvt_roundph_epu16): Likewise.
+ 	(_mm512_maskz_cvt_roundph_epu16): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm_cvtph_epi32):
+ 	New intrinsic.
+ 	(_mm_mask_cvtph_epi32): Likewise.
+ 	(_mm_maskz_cvtph_epi32): Likewise.
+ 	(_mm256_cvtph_epi32): Likewise.
+ 	(_mm256_mask_cvtph_epi32): Likewise.
+ 	(_mm256_maskz_cvtph_epi32): Likewise.
+ 	(_mm_cvtph_epu32): Likewise.
+ 	(_mm_mask_cvtph_epu32): Likewise.
+ 	(_mm_maskz_cvtph_epu32): Likewise.
+ 	(_mm256_cvtph_epu32): Likewise.
+ 	(_mm256_mask_cvtph_epu32): Likewise.
+ 	(_mm256_maskz_cvtph_epu32): Likewise.
+ 	(_mm_cvtph_epi64): Likewise.
+ 	(_mm_mask_cvtph_epi64): Likewise.
+ 	(_mm_maskz_cvtph_epi64): Likewise.
+ 	(_mm256_cvtph_epi64): Likewise.
+ 	(_mm256_mask_cvtph_epi64): Likewise.
+ 	(_mm256_maskz_cvtph_epi64): Likewise.
+ 	(_mm_cvtph_epu64): Likewise.
+ 	(_mm_mask_cvtph_epu64): Likewise.
+ 	(_mm_maskz_cvtph_epu64): Likewise.
+ 	(_mm256_cvtph_epu64): Likewise.
+ 	(_mm256_mask_cvtph_epu64): Likewise.
+ 	(_mm256_maskz_cvtph_epu64): Likewise.
+ 	(_mm_cvtph_epi16): Likewise.
+ 	(_mm_mask_cvtph_epi16): Likewise.
+ 	(_mm_maskz_cvtph_epi16): Likewise.
+ 	(_mm256_cvtph_epi16): Likewise.
+ 	(_mm256_mask_cvtph_epi16): Likewise.
+ 	(_mm256_maskz_cvtph_epi16): Likewise.
+ 	(_mm_cvtph_epu16): Likewise.
+ 	(_mm_mask_cvtph_epu16): Likewise.
+ 	(_mm_maskz_cvtph_epu16): Likewise.
+ 	(_mm256_cvtph_epu16): Likewise.
+ 	(_mm256_mask_cvtph_epu16): Likewise.
+ 	(_mm256_maskz_cvtph_epu16): Likewise.
+ 	* config/i386/i386-builtin-types.def: Add new builtin types.
+ 	* config/i386/i386-builtin.def: Add new builtins.
+ 	* config/i386/i386-expand.c
+ 	(ix86_expand_args_builtin): Handle new builtin types.
+ 	(ix86_expand_round_builtin): Ditto.
+ 	* config/i386/sse.md (sseintconvert): New.
+ 	(ssePHmode): Ditto.
+ 	(UNSPEC_US_FIX_NOTRUNC): Ditto.
+ 	(sseintconvertsignprefix): Ditto.
+ 	(avx512fp16_vcvtph2<sseintconvertsignprefix><sseintconvert>_<mode><mask_name><round_name>):
+ 	Ditto.
+ 
+ 2021-09-16  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h: (_mm_cvtsi16_si128):
+ 	New intrinsic.
+ 	(_mm_cvtsi128_si16): Likewise.
+ 	(_mm_mask_load_sh): Likewise.
+ 	(_mm_maskz_load_sh): Likewise.
+ 	(_mm_mask_store_sh): Likewise.
+ 	(_mm_move_sh): Likewise.
+ 	(_mm_mask_move_sh): Likewise.
+ 	(_mm_maskz_move_sh): Likewise.
+ 	* config/i386/i386-builtin-types.def: Add corresponding builtin types.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/i386-expand.c
+ 	(ix86_expand_special_args_builtin): Handle new builtin types.
+ 	(ix86_expand_vector_init_one_nonzero): Adjust for FP16 target.
+ 	* config/i386/sse.md (VI2F): New mode iterator.
+ 	(vec_set<mode>_0): Use new mode iterator.
+ 	(avx512f_mov<ssescalarmodelower>_mask): Adjust for HF vector mode.
+ 	(avx512f_store<mode>_mask): Ditto.
+ 
+ 2021-09-16  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.opt (-mtoc-fusion): Remove.
+ 
+ 2021-09-15  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_xcoff_encode_section_info):
+ 	Proceed if no symbol summary or the symbol alias flag is false.
+ 
+ 2021-09-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/88578
+ 	PR c++/102295
+ 	* varasm.c (output_constructor_regular_field): Instead of assertion
+ 	that array_size_for_constructor result is equal to size of
+ 	TREE_TYPE (local->val) in bytes, assert that the type size is greater
+ 	or equal to array_size_for_constructor result and use type size as
+ 	fieldsize.
+ 
+ 2021-09-15  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/102351
+ 	* config/i386/vxworks.h: Use new macro TARGET_CPU_P.
+ 
+ 2021-09-15  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/102349
+ 	* config/rs6000/rs6000.c (rs6000_xcoff_encode_section_info):
+ 	Check that we have a symbol summary for a symbol.
+ 
+ 2021-09-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR target/102348
+ 	* config/rs6000/lynx.h: Remove undef of PREFERRED_DEBUGGING_TYPE
+ 	to inherit from elfos.h
+ 
+ 2021-09-15  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102327
+ 	* config/i386/i386-expand.c
+ 	(ix86_expand_vector_init_interleave): Use puncklwd to pack 2
+ 	HFmodes.
+ 	(ix86_expand_vector_set): Use blendw instead of pinsrw.
+ 	* config/i386/i386.c (ix86_can_change_mode_class): Adjust for
+ 	AVX512FP16 which supports 16bit vector load.
+ 	* config/i386/sse.md (avx512bw_interleave_highv32hi<mask_name>):
+ 	Rename to ..
+ 	(avx512bw_interleave_high<mode><mask_name>): .. this, and
+ 	extend to V32HFmode.
+ 	(avx2_interleave_highv16hi<mask_name>): Rename to ..
+ 	(avx2_interleave_high<mode><mask_name>): .. this, and extend
+ 	to V16HFmode.
+ 	(vec_interleave_highv8hi<mask_name>): Rename to ..
+ 	(vec_interleave_high<mode><mask_name>): .. this, and extend to V8HFmode.
+ 	(<mask_codefor>avx512bw_interleave_lowv32hi<mask_name>):
+ 	Rename to ..
+ 	(<mask_codefor>avx512bw_interleave_low<mode><mask_name>):
+ 	this, and extend to V32HFmode.
+ 	(avx2_interleave_lowv16hi<mask_name>): Rename to ..
+ 	(avx2_interleave_low<mode><mask_name>): .. this, and extend to V16HFmode.
+ 	(vec_interleave_lowv8hi<mask_name>): Rename to ..
+ 	(vec_interleave_low<mode><mask_name>): .. this, and extend to V8HFmode.
+ 	(sse4_1_pblendw): Rename to ..
+ 	(sse4_1_pblend<blendsuf>): .. this, and extend to V8HFmode.
+ 	(avx2_pblendph): New define_expand.
+ 	(<sse2p4_1>_pinsr<ssemodesuffix>): Refactor, use
+ 	sseintmodesuffix instead of ssemodesuffix.
+ 	(blendsuf): New mode attr.
+ 
+ 2021-09-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (dr_misalignment): Move out of line.
+ 	(dr_target_alignment): New.
+ 	(DR_TARGET_ALIGNMENT): Wrap dr_target_alignment.
+ 	(set_dr_target_alignment): New.
+ 	(SET_DR_TARGET_ALIGNMENT): Wrap set_dr_target_alignment.
+ 	* tree-vect-data-refs.c (dr_misalignment): Compute and
+ 	return the group members misalignment.
+ 	(vect_compute_data_ref_alignment): Use SET_DR_TARGET_ALIGNMENT.
+ 	(vect_analyze_data_refs_alignment): Compute alignment only
+ 	for the first element of a DR group.
+ 	(vect_slp_analyze_node_alignment): Likewise.
+ 
+ 2021-09-15  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h: Adjust all builtin calls.
+ 	* config/i386/avx512fp16vlintrin.h: Likewise.
+ 	* config/i386/i386-builtin.def: Adjust builtin name and
+ 	enumeration to match AVX512F style.
+ 
+ 2021-09-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102318
+ 	* tree-vect-loop.c (vect_transform_cycle_phi): Revert
+ 	previous change and do the mode conversion separately from
+ 	the sign conversion.
+ 
+ 2021-09-15  Hongtao Liu  <hongtao.liu@intel.com>
+ 	    Peter Cordes  <peter@cordes.ca>
+ 
+ 	PR target/91103
+ 	* config/i386/sse.md (extract_suf): Add V8SF/V8SI/V4DF/V4DI.
+ 	(*vec_extract<mode><ssescalarmodelower>_valign): Output
+ 	vextract{i,f}{32x4,64x2} instruction when byte_offset % 16 ==
+ 	0.
+ 
+ 2021-09-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config.gcc: Remove vax-*-openbsd* configuration.
+ 
+ 2021-09-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config.gcc: Remove m68k-openbsd.
+ 
+ 2021-09-15  Max Filippov  <jcmvbkbc@gmail.com>
+ 
+ 	PR target/102336
+ 	* config/xtensa/t-xtensa (TM_H): Add include/xtensa-config.h.
+ 
+ 2021-09-14  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	* config/rs6000/mma.md (unspec): Delete UNSPEC_MMA_XXSETACCZ.
+ 	(unspecv): Add UNSPECV_MMA_XXSETACCZ.
+ 	(*mma_xxsetaccz): Delete.
+ 	(mma_xxsetaccz): Change to define_insn.  Remove operand 1.
+ 	Use UNSPECV_MMA_XXSETACCZ.  Update comment.
+ 	* config/rs6000/rs6000.c (rs6000_rtx_costs): Use UNSPECV_MMA_XXSETACCZ.
+ 
+ 2021-09-14  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* Makefile.in: Remove variables related to applying no-PIE
+ 	to the exes on $build.
+ 	* configure: Regenerate.
+ 	* configure.ac: Remove configuration related to applying
+ 	no-PIE to the exes on $build.
+ 
+ 2021-09-14  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/arc.md (doloop_end): Add missing mode.
+ 	(loop_end): Likewise.
+ 
+ 2021-09-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gimplify.c (goa_stabilize_expr): Add depth argument, propagate
+ 	it to recursive calls, for depth above 7 just gimplify or return.
+ 	Perform a test even for MODIFY_EXPR, ADDR_EXPR, COMPOUND_EXPR with
+ 	__builtin_clear_padding and TARGET_EXPR.
+ 	(gimplify_omp_atomic): Adjust goa_stabilize_expr callers.
+ 
+ 2021-09-14  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm_fpclass_sh_mask):
+ 	New intrinsic.
+ 	(_mm_mask_fpclass_sh_mask): Likewise.
+ 	(_mm512_mask_fpclass_ph_mask): Likewise.
+ 	(_mm512_fpclass_ph_mask): Likewise.
+ 	(_mm_getexp_sh): Likewise.
+ 	(_mm_mask_getexp_sh): Likewise.
+ 	(_mm_maskz_getexp_sh): Likewise.
+ 	(_mm512_getexp_ph): Likewise.
+ 	(_mm512_mask_getexp_ph): Likewise.
+ 	(_mm512_maskz_getexp_ph): Likewise.
+ 	(_mm_getexp_round_sh): Likewise.
+ 	(_mm_mask_getexp_round_sh): Likewise.
+ 	(_mm_maskz_getexp_round_sh): Likewise.
+ 	(_mm512_getexp_round_ph): Likewise.
+ 	(_mm512_mask_getexp_round_ph): Likewise.
+ 	(_mm512_maskz_getexp_round_ph): Likewise.
+ 	(_mm_getmant_sh): Likewise.
+ 	(_mm_mask_getmant_sh): Likewise.
+ 	(_mm_maskz_getmant_sh): Likewise.
+ 	(_mm512_getmant_ph): Likewise.
+ 	(_mm512_mask_getmant_ph): Likewise.
+ 	(_mm512_maskz_getmant_ph): Likewise.
+ 	(_mm_getmant_round_sh): Likewise.
+ 	(_mm_mask_getmant_round_sh): Likewise.
+ 	(_mm_maskz_getmant_round_sh): Likewise.
+ 	(_mm512_getmant_round_ph): Likewise.
+ 	(_mm512_mask_getmant_round_ph): Likewise.
+ 	(_mm512_maskz_getmant_round_ph): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm_mask_fpclass_ph_mask):
+ 	New intrinsic.
+ 	(_mm_fpclass_ph_mask): Likewise.
+ 	(_mm256_mask_fpclass_ph_mask): Likewise.
+ 	(_mm256_fpclass_ph_mask): Likewise.
+ 	(_mm256_getexp_ph): Likewise.
+ 	(_mm256_mask_getexp_ph): Likewise.
+ 	(_mm256_maskz_getexp_ph): Likewise.
+ 	(_mm_getexp_ph): Likewise.
+ 	(_mm_mask_getexp_ph): Likewise.
+ 	(_mm_maskz_getexp_ph): Likewise.
+ 	(_mm256_getmant_ph): Likewise.
+ 	(_mm256_mask_getmant_ph): Likewise.
+ 	(_mm256_maskz_getmant_ph): Likewise.
+ 	(_mm_getmant_ph): Likewise.
+ 	(_mm_mask_getmant_ph): Likewise.
+ 	(_mm_maskz_getmant_ph): Likewise.
+ 	* config/i386/i386-builtin-types.def: Add corresponding builtin types.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/i386-expand.c
+ 	(ix86_expand_args_builtin): Handle new builtin types.
+ 	(ix86_expand_round_builtin): Ditto.
+ 	* config/i386/sse.md (vecmemsuffix): Add HF vector modes.
+ 	(<avx512>_getexp<mode><mask_name><round_saeonly_name>): Adjust
+ 	to support HF vector modes.
+ 	(avx512f_sgetexp<mode><mask_scalar_name><round_saeonly_scalar_name):
+ 	Ditto.
+ 	(avx512dq_fpclass<mode><mask_scalar_merge_name>): Ditto.
+ 	(avx512dq_vmfpclass<mode><mask_scalar_merge_name>): Ditto.
+ 	(<avx512>_getmant<mode><mask_name><round_saeonly_name>): Ditto.
+ 	(avx512f_vgetmant<mode><mask_scalar_name><round_saeonly_scalar_name>):
+ 	Ditto.
+ 
+ 2021-09-14  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm512_reduce_ph):
+ 	New intrinsic.
+ 	(_mm512_mask_reduce_ph): Likewise.
+ 	(_mm512_maskz_reduce_ph): Likewise.
+ 	(_mm512_reduce_round_ph): Likewise.
+ 	(_mm512_mask_reduce_round_ph): Likewise.
+ 	(_mm512_maskz_reduce_round_ph): Likewise.
+ 	(_mm_reduce_sh): Likewise.
+ 	(_mm_mask_reduce_sh): Likewise.
+ 	(_mm_maskz_reduce_sh): Likewise.
+ 	(_mm_reduce_round_sh): Likewise.
+ 	(_mm_mask_reduce_round_sh): Likewise.
+ 	(_mm_maskz_reduce_round_sh): Likewise.
+ 	(_mm512_roundscale_ph): Likewise.
+ 	(_mm512_mask_roundscale_ph): Likewise.
+ 	(_mm512_maskz_roundscale_ph): Likewise.
+ 	(_mm512_roundscale_round_ph): Likewise.
+ 	(_mm512_mask_roundscale_round_ph): Likewise.
+ 	(_mm512_maskz_roundscale_round_ph): Likewise.
+ 	(_mm_roundscale_sh): Likewise.
+ 	(_mm_mask_roundscale_sh): Likewise.
+ 	(_mm_maskz_roundscale_sh): Likewise.
+ 	(_mm_roundscale_round_sh): Likewise.
+ 	(_mm_mask_roundscale_round_sh): Likewise.
+ 	(_mm_maskz_roundscale_round_sh): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h: (_mm_reduce_ph):
+ 	New intrinsic.
+ 	(_mm_mask_reduce_ph): Likewise.
+ 	(_mm_maskz_reduce_ph): Likewise.
+ 	(_mm256_reduce_ph): Likewise.
+ 	(_mm256_mask_reduce_ph): Likewise.
+ 	(_mm256_maskz_reduce_ph): Likewise.
+ 	(_mm_roundscale_ph): Likewise.
+ 	(_mm_mask_roundscale_ph): Likewise.
+ 	(_mm_maskz_roundscale_ph): Likewise.
+ 	(_mm256_roundscale_ph): Likewise.
+ 	(_mm256_mask_roundscale_ph): Likewise.
+ 	(_mm256_maskz_roundscale_ph): Likewise.
+ 	* config/i386/i386-builtin-types.def: Add corresponding builtin types.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/i386-expand.c
+ 	(ix86_expand_args_builtin): Handle new builtin types.
+ 	(ix86_expand_round_builtin): Ditto.
+ 	* config/i386/sse.md (<mask_codefor>reducep<mode><mask_name>):
+ 	Renamed to ...
+ 	(<mask_codefor>reducep<mode><mask_name><round_saeonly_name>):
+ 	... this, and adjust for round operands.
+ 	(reduces<mode><mask_scalar_name>): Likewise, with ...
+ 	(reduces<mode><mask_scalar_name><round_saeonly_scalar_name):
+ 	... this.
+ 	(<avx512>_rndscale<mode><mask_name><round_saeonly_name>):
+ 	Adjust for HF vector modes.
+ 	(avx512f_rndscale<mode><mask_scalar_name><round_saeonly_scalar_name>):
+ 	Ditto.
+ 	(*avx512f_rndscale<mode><round_saeonly_name>): Ditto.
+ 
+ 2021-09-14  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h: (_mm512_rcp_ph):
+ 	New intrinsic.
+ 	(_mm512_mask_rcp_ph): Likewise.
+ 	(_mm512_maskz_rcp_ph): Likewise.
+ 	(_mm_rcp_sh): Likewise.
+ 	(_mm_mask_rcp_sh): Likewise.
+ 	(_mm_maskz_rcp_sh): Likewise.
+ 	(_mm512_scalef_ph): Likewise.
+ 	(_mm512_mask_scalef_ph): Likewise.
+ 	(_mm512_maskz_scalef_ph): Likewise.
+ 	(_mm512_scalef_round_ph): Likewise.
+ 	(_mm512_mask_scalef_round_ph): Likewise.
+ 	(_mm512_maskz_scalef_round_ph): Likewise.
+ 	(_mm_scalef_sh): Likewise.
+ 	(_mm_mask_scalef_sh): Likewise.
+ 	(_mm_maskz_scalef_sh): Likewise.
+ 	(_mm_scalef_round_sh): Likewise.
+ 	(_mm_mask_scalef_round_sh): Likewise.
+ 	(_mm_maskz_scalef_round_sh): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm_rcp_ph):
+ 	New intrinsic.
+ 	(_mm256_rcp_ph): Likewise.
+ 	(_mm_mask_rcp_ph): Likewise.
+ 	(_mm256_mask_rcp_ph): Likewise.
+ 	(_mm_maskz_rcp_ph): Likewise.
+ 	(_mm256_maskz_rcp_ph): Likewise.
+ 	(_mm_scalef_ph): Likewise.
+ 	(_mm256_scalef_ph): Likewise.
+ 	(_mm_mask_scalef_ph): Likewise.
+ 	(_mm256_mask_scalef_ph): Likewise.
+ 	(_mm_maskz_scalef_ph): Likewise.
+ 	(_mm256_maskz_scalef_ph): Likewise.
+ 	* config/i386/i386-builtin.def: Add new builtins.
+ 	* config/i386/sse.md (VFH_AVX512VL): New.
+ 	(avx512fp16_rcp<mode>2<mask_name>): Ditto.
+ 	(avx512fp16_vmrcpv8hf2<mask_scalar_name>): Ditto.
+ 	(avx512f_vmscalef<mode><mask_scalar_name><round_scalar_name>):
+ 	Adjust to support HF vector modes.
+ 	(<avx512>_scalef<mode><mask_name><round_name>): Ditto.
+ 
+ 2021-09-14  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h: (_mm512_sqrt_ph):
+ 	New intrinsic.
+ 	(_mm512_mask_sqrt_ph): Likewise.
+ 	(_mm512_maskz_sqrt_ph): Likewise.
+ 	(_mm512_sqrt_round_ph): Likewise.
+ 	(_mm512_mask_sqrt_round_ph): Likewise.
+ 	(_mm512_maskz_sqrt_round_ph): Likewise.
+ 	(_mm512_rsqrt_ph): Likewise.
+ 	(_mm512_mask_rsqrt_ph): Likewise.
+ 	(_mm512_maskz_rsqrt_ph): Likewise.
+ 	(_mm_rsqrt_sh): Likewise.
+ 	(_mm_mask_rsqrt_sh): Likewise.
+ 	(_mm_maskz_rsqrt_sh): Likewise.
+ 	(_mm_sqrt_sh): Likewise.
+ 	(_mm_mask_sqrt_sh): Likewise.
+ 	(_mm_maskz_sqrt_sh): Likewise.
+ 	(_mm_sqrt_round_sh): Likewise.
+ 	(_mm_mask_sqrt_round_sh): Likewise.
+ 	(_mm_maskz_sqrt_round_sh): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm_sqrt_ph): New intrinsic.
+ 	(_mm256_sqrt_ph): Likewise.
+ 	(_mm_mask_sqrt_ph): Likewise.
+ 	(_mm256_mask_sqrt_ph): Likewise.
+ 	(_mm_maskz_sqrt_ph): Likewise.
+ 	(_mm256_maskz_sqrt_ph): Likewise.
+ 	(_mm_rsqrt_ph): Likewise.
+ 	(_mm256_rsqrt_ph): Likewise.
+ 	(_mm_mask_rsqrt_ph): Likewise.
+ 	(_mm256_mask_rsqrt_ph): Likewise.
+ 	(_mm_maskz_rsqrt_ph): Likewise.
+ 	(_mm256_maskz_rsqrt_ph): Likewise.
+ 	* config/i386/i386-builtin-types.def: Add corresponding builtin types.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/i386-expand.c
+ 	(ix86_expand_args_builtin): Handle new builtins.
+ 	(ix86_expand_round_builtin): Ditto.
+ 	* config/i386/sse.md (VF_AVX512FP16VL): New.
+ 	(sqrt<mode>2): Adjust for HF vector modes.
+ 	(<sse>_sqrt<mode>2<mask_name><round_name>): Likewise.
+ 	(<sse>_vmsqrt<mode>2<mask_scalar_name><round_scalar_name>):
+ 	Likewise.
+ 	(<sse>_rsqrt<mode>2<mask_name>): New.
+ 	(avx512fp16_vmrsqrtv8hf2<mask_scalar_name>): Likewise.
+ 
+ 2021-09-13  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR bootstrap/101574
+ 	* diagnostic-spec.c (warning_suppressed_at, copy_warning): Handle
+ 	'RESERVED_LOCATION_P' locations.
+ 	* warning-control.cc (get_nowarn_spec, suppress_warning)
+ 	(copy_warning): Likewise.
+ 
+ 2021-09-13  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* diagnostic-spec.h (typedef xint_hash_t): Use 'location_t' instead of...
+ 	(typedef key_type_t): ... this.  Remove.
+ 	(nowarn_map): Document.
+ 	* diagnostic-spec.c (nowarn_map): Likewise.
+ 	* warning-control.cc (convert_to_key): Evolve functions into...
+ 	(get_location): ... these.  Adjust all users.
+ 
+ 2021-09-13  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* warning-control.cc (copy_warning): Remove 'nowarn_map' setup.
+ 
+ 2021-09-13  Jason Merrill  <jason@redhat.com>
+ 
+ 	* params.opt: Add destructive-interference-size and
+ 	constructive-interference-size.
+ 	* doc/invoke.texi: Document them.
+ 	* config/aarch64/aarch64.c (aarch64_override_options_internal):
+ 	Set them.
+ 	* config/arm/arm.c (arm_option_override): Set them.
+ 	* config/i386/i386-options.c (ix86_option_override_internal):
+ 	Set them.
+ 
+ 2021-09-13  Martin Liska  <mliska@suse.cz>
+ 	    H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101696
+ 	* common/config/i386/cpuinfo.h (cpu_indicator_init): Add support
+ 	for x86-64 micro levels for __builtin_cpu_supports.
+ 	* common/config/i386/i386-cpuinfo.h (enum feature_priority):
+ 	Add priorities for the micro-arch levels.
+ 	(enum processor_features): Add new features.
+ 	* common/config/i386/i386-isas.h: Add micro-arch features.
+ 	* config/i386/i386-builtins.c (get_builtin_code_for_version):
+ 	Support the micro-arch levels by callsing
+ 	__builtin_cpu_supports.
+ 	* doc/extend.texi: Document that the levels are support by
+ 	  __builtin_cpu_supports.
+ 
+ 2021-09-13  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR target/95969
+ 	* config/aarch64/aarch64-builtins.c (aarch64_fold_builtin_lane_check):
+ 	New function.
+ 	(aarch64_general_fold_builtin): Handle AARCH64_SIMD_BUILTIN_LANE_CHECK.
+ 	(aarch64_general_gimple_fold_builtin): Likewise.
+ 
+ 2021-09-13  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* config.gcc: Add m32r-*-linux* and m32rle-*-linux*
+ 	to the Unsupported targets list.
+ 	Remove support for m32r-*-linux* and m32rle-*-linux*.
+ 	* config/m32r/linux.h: Removed.
+ 	* config/m32r/t-linux: Removed.
+ 
+ 2021-09-13  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	PR target/102252
+ 	* config/aarch64/aarch64.c (aarch64_classify_address): Don't allow
+ 	register index for SVE predicate modes.
+ 
+ 2021-09-13  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c
+ 	(back_threader_profitability::profitable_path_p): Remove FSM
+ 	references.
+ 	(back_threader_registry::register_path): Same.
+ 	* tree-ssa-threadedge.c
+ 	(jump_threader::simplify_control_stmt_condition): Same.
+ 	* tree-ssa-threadupdate.c (jt_path_registry::jt_path_registry):
+ 	Add backedge_threads argument.
+ 	(fwd_jt_path_registry::fwd_jt_path_registry): Pass
+ 	backedge_threads argument.
+ 	(back_jt_path_registry::back_jt_path_registry):  Same.
+ 	(dump_jump_thread_path): Adjust for FSM removal.
+ 	(back_jt_path_registry::rewire_first_differing_edge): Same.
+ 	(back_jt_path_registry::adjust_paths_after_duplication): Same.
+ 	(back_jt_path_registry::update_cfg): Same.
+ 	(jt_path_registry::register_jump_thread): Same.
+ 	* tree-ssa-threadupdate.h (enum jump_thread_edge_type): Remove
+ 	EDGE_FSM_THREAD.
+ 	(class back_jt_path_registry): Add backedge_threads to
+ 	constructor.
+ 
+ 2021-09-13  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR c++/101331
+ 	* asan.h (sanitize_coverage_p): Handle when fn == NULL.
+ 
+ 2021-09-13  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101935
+ 	* config/i386/i386.h (TARGET_AVX256_MOVE_BY_PIECES): New.
+ 	(TARGET_AVX256_STORE_BY_PIECES): Likewise.
+ 	(MOVE_MAX): Check TARGET_AVX256_MOVE_BY_PIECES and
+ 	TARGET_AVX256_STORE_BY_PIECES instead of
+ 	TARGET_AVX256_SPLIT_UNALIGNED_LOAD and
+ 	TARGET_AVX256_SPLIT_UNALIGNED_STORE.
+ 	(STORE_MAX_PIECES): Check TARGET_AVX256_STORE_BY_PIECES instead
+ 	of TARGET_AVX256_SPLIT_UNALIGNED_STORE.
+ 	* config/i386/x86-tune.def (X86_TUNE_AVX256_MOVE_BY_PIECES): New.
+ 	(X86_TUNE_AVX256_STORE_BY_PIECES): Likewise.
+ 
+ 2021-09-13  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR bootstrap/102302
+ 	* expmed.c (extract_bit_field_using_extv): Use
+ 	gen_lowpart_if_possible instead of gen_lowpart to avoid ICE.
+ 
+ 2021-09-13  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* Makefile.in (OBJS): Add value-pointer-equiv.o.
+ 	* gimple-ssa-evrp.c (class ssa_equiv_stack): Move to
+ 	value-pointer-equiv.*.
+ 	(ssa_equiv_stack::ssa_equiv_stack): Same.
+ 	(ssa_equiv_stack::enter): Same.
+ 	(ssa_equiv_stack::leave): Same.
+ 	(ssa_equiv_stack::push_replacement): Same.
+ 	(ssa_equiv_stack::get_replacement): Same.
+ 	(is_pointer_ssa): Same.
+ 	(class pointer_equiv_analyzer): Same.
+ 	(pointer_equiv_analyzer::pointer_equiv_analyzer): Same.
+ 	(pointer_equiv_analyzer::~pointer_equiv_analyzer): Same.
+ 	(pointer_equiv_analyzer::set_global_equiv): Same.
+ 	(pointer_equiv_analyzer::set_cond_equiv): Same.
+ 	(pointer_equiv_analyzer::get_equiv): Same.
+ 	(pointer_equiv_analyzer::enter): Same.
+ 	(pointer_equiv_analyzer::leave): Same.
+ 	(pointer_equiv_analyzer::get_equiv_expr): Same.
+ 	(pta_valueize): Same.
+ 	(pointer_equiv_analyzer::visit_stmt): Same.
+ 	(pointer_equiv_analyzer::visit_edge): Same.
+ 	(hybrid_folder::value_of_expr): Same.
+ 	(hybrid_folder::value_on_edge): Same.
+ 	* value-pointer-equiv.cc: New file.
+ 	* value-pointer-equiv.h: New file.
+ 
+ 2021-09-13  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/102125
+ 	* gimple-fold.c (gimple_fold_builtin_memory_op): Allow folding
+ 	memcpy if the size is not more than MOVE_MAX * MOVE_RATIO.
+ 
+ 2021-09-13  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/102125
+ 	* config/arm/arm.md (movmisaligndi): New define_expand.
+ 	* config/arm/vec-common.md (movmisalign<mode>): Iterate over VDQ mode.
+ 
+ 2021-09-13  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/102125
+ 	* emit-rtl.c (gen_highpart): Use adjust_address to handle
+ 	MEM rather than calling simplify_gen_subreg.
+ 
+ 2021-09-13  Jan-Benedict Glaw  <jbglaw@ług-owl.de>
+ 
+ 	* config/alpha/vms.h (INIT_CUMULATIVE_ARGS): Wrap multi-statment
+ 	define into a block.
+ 
+ 2021-09-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/darwin.h (DARWIN_PREFER_DWARF): Do not define.
+ 	* config/i386/darwin.h (PREFERRED_DEBUGGING_TYPE): Do not
+ 	change based on DARWIN_PREFER_DWARF not being defined.
+ 
+ 2021-09-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/lynx.h: Remove undef of PREFERRED_DEBUGGING_TYPE
+ 	to inherit from elfos.h
+ 
+ 2021-09-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config.gcc: Add cr16-*-* to the list of obsoleted targets.
+ 
+ 2021-09-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/avr/elf.h (PREFERRED_DEBUGGING_TYPE): Remove
+ 	override, pick up DWARF2_DEBUG define from elfos.h
+ 
+ 2021-09-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/rx/rx.h (PREFERRED_DEBUGGING_TYPE): Always define to
+ 	DWARF2_DEBUG.
+ 
+ 2021-09-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/alpha/vms.h (PREFERRED_DEBUGGING_TYPE): Define to
+ 	DWARF2_DEBUG.
+ 
+ 2021-09-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/cygming.h: Always default to DWARF2 debugging.
+ 	Do not define DBX_DEBUGGING_INFO, that's done via dbxcoff.h
+ 	already.
+ 	* doc/install.texi: Document binutils 2.16 as minimum
+ 	requirement for mingw.
+ 
+ 2021-09-13  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (struct rs6000_cost_data): New members
+ 	nstmts, nloads and extra_ctor_cost.
+ 	(rs6000_density_test): Add load density related heuristics.  Do
+ 	extra costing on vector construction statements if need.
+ 	(rs6000_init_cost): Init new members.
+ 	(rs6000_update_target_cost_per_stmt): New function.
+ 	(rs6000_add_stmt_cost): Factor vect_nonmem hunk out to function
+ 	rs6000_update_target_cost_per_stmt and call it.
+ 
+ 2021-09-13  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (struct rs6000_cost_data): Remove typedef.
+ 	(rs6000_init_cost): Adjust.
+ 
+ 2021-09-13  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386.md: (UNSPEC_COPYSIGN): Remove.
+ 	(UNSPEC_XORSIGN): Ditto.
+ 
+ 2021-09-12  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* expr.c (convert_move): Preserve SUBREG_PROMOTED_VAR_P when
+ 	creating a (wider) partial subreg from a SUBREG_PROMOTED_VAR_P
+ 	subreg.
+ 
+ 2021-09-11  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (class back_threader_registry): Use
+ 	back_jt_path_registry.
+ 	* tree-ssa-threadedge.c (jump_threader::jump_threader): Use
+ 	fwd_jt_path_registry.
+ 	* tree-ssa-threadedge.h (class jump_threader): Same..
+ 	* tree-ssa-threadupdate.c
+ 	(jump_thread_path_registry::jump_thread_path_registry): Rename...
+ 	(jt_path_registry::jt_path_registry): ...to this.
+ 	(jump_thread_path_registry::~jump_thread_path_registry): Rename...
+ 	(jt_path_registry::~jt_path_registry): ...this.
+ 	(fwd_jt_path_registry::fwd_jt_path_registry): New.
+ 	(fwd_jt_path_registry::~fwd_jt_path_registry): New.
+ 	(jump_thread_path_registry::allocate_thread_edge): Rename...
+ 	(jt_path_registry::allocate_thread_edge): ...to this.
+ 	(jump_thread_path_registry::allocate_thread_path): Rename...
+ 	(jt_path_registry::allocate_thread_path): ...to this.
+ 	(jump_thread_path_registry::lookup_redirection_data): Rename...
+ 	(fwd_jt_path_registry::lookup_redirection_data): ...to this.
+ 	(jump_thread_path_registry::thread_block_1): Rename...
+ 	(fwd_jt_path_registry::thread_block_1): ...to this.
+ 	(jump_thread_path_registry::thread_block): Rename...
+ 	(fwd_jt_path_registry::thread_block): ...to this.
+ 	(jt_path_registry::thread_through_loop_header): Rename...
+ 	(fwd_jt_path_registry::thread_through_loop_header): ...to this.
+ 	(jump_thread_path_registry::mark_threaded_blocks): Rename...
+ 	(fwd_jt_path_registry::mark_threaded_blocks): ...to this.
+ 	(jump_thread_path_registry::debug_path): Rename...
+ 	(jt_path_registry::debug_path): ...to this.
+ 	(jump_thread_path_registry::dump): Rename...
+ 	(jt_path_registry::debug): ...to this.
+ 	(jump_thread_path_registry::rewire_first_differing_edge): Rename...
+ 	(back_jt_path_registry::rewire_first_differing_edge): ...to this.
+ 	(jump_thread_path_registry::adjust_paths_after_duplication): Rename...
+ 	(back_jt_path_registry::adjust_paths_after_duplication): ...to this.
+ 	(jump_thread_path_registry::duplicate_thread_path): Rename...
+ 	(back_jt_path_registry::duplicate_thread_path): ...to this.  Also,
+ 	drop ill-formed candidates.
+ 	(jump_thread_path_registry::remove_jump_threads_including): Rename...
+ 	(fwd_jt_path_registry::remove_jump_threads_including): ...to this.
+ 	(jt_path_registry::thread_through_all_blocks): New.
+ 	(back_jt_path_registry::update_cfg): New.
+ 	(fwd_jt_path_registry::update_cfg): New.
+ 	(jump_thread_path_registry::register_jump_thread): Rename...
+ 	(jt_path_registry::register_jump_thread): ...to this.
+ 	* tree-ssa-threadupdate.h (class jump_thread_path_registry):
+ 	Abstract to...
+ 	(class jt_path_registry): ...here.
+ 	(class fwd_jt_path_registry): New.
+ 	(class back_jt_path_registry): New.
+ 
+ 2021-09-10  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Revert:
+ 	2021-09-01  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* emit-rtl.c (validate_subreg): Get rid of all float-int
+ 	special cases.
+ 
+ 2021-09-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree-core.h (enum omp_memory_order): Add OMP_MEMORY_ORDER_MASK,
+ 	OMP_FAIL_MEMORY_ORDER_UNSPECIFIED, OMP_FAIL_MEMORY_ORDER_RELAXED,
+ 	OMP_FAIL_MEMORY_ORDER_ACQUIRE, OMP_FAIL_MEMORY_ORDER_RELEASE,
+ 	OMP_FAIL_MEMORY_ORDER_ACQ_REL, OMP_FAIL_MEMORY_ORDER_SEQ_CST and
+ 	OMP_FAIL_MEMORY_ORDER_MASK enumerators.
+ 	(OMP_FAIL_MEMORY_ORDER_SHIFT): Define.
+ 	* gimple-pretty-print.c (dump_gimple_omp_atomic_load,
+ 	dump_gimple_omp_atomic_store): Print [weak] for weak atomic
+ 	load/store.
+ 	* gimple.h (enum gf_mask): Change GF_OMP_ATOMIC_MEMORY_ORDER
+ 	to 6-bit mask, adjust GF_OMP_ATOMIC_NEED_VALUE value and add
+ 	GF_OMP_ATOMIC_WEAK.
+ 	(gimple_omp_atomic_weak_p, gimple_omp_atomic_set_weak): New inline
+ 	functions.
+ 	* tree.h (OMP_ATOMIC_WEAK): Define.
+ 	* tree-pretty-print.c (dump_omp_atomic_memory_order): Adjust for
+ 	fail memory order being encoded in the same enum and also print
+ 	fail clause if present.
+ 	(dump_generic_node): Print weak clause if OMP_ATOMIC_WEAK.
+ 	* gimplify.c (goa_stabilize_expr): Add target_expr and rhs arguments,
+ 	handle pre_p == NULL case as a test mode that only returns value
+ 	but doesn't change gimplify nor change anything otherwise, adjust
+ 	recursive calls, add MODIFY_EXPR, ADDR_EXPR, COND_EXPR, TARGET_EXPR
+ 	and CALL_EXPR handling, adjust COMPOUND_EXPR handling for
+ 	__builtin_clear_padding calls, for !rhs gimplify as lvalue rather
+ 	than rvalue.
+ 	(gimplify_omp_atomic): Adjust goa_stabilize_expr caller.  Handle
+ 	COND_EXPR rhs.  Set weak flag on gimple load/store for
+ 	OMP_ATOMIC_WEAK.
+ 	* omp-expand.c (omp_memory_order_to_fail_memmodel): New function.
+ 	(omp_memory_order_to_memmodel): Adjust for fail clause encoded
+ 	in the same enum.
+ 	(expand_omp_atomic_cas): New function.
+ 	(expand_omp_atomic_pipeline): Use omp_memory_order_to_fail_memmodel
+ 	function.
+ 	(expand_omp_atomic): Attempt to optimize atomic compare and exchange
+ 	using expand_omp_atomic_cas.
+ 
+ 2021-09-10  Aldy Hernandez  <aldyh@redhat.com>
+ 	    Michael Matz  <matz@suse.de>
+ 
+ 	* tree-pass.h (PROP_loop_opts_done): New.
+ 	* gimple-range-path.cc (path_range_query::internal_range_of_expr):
+ 	Intersect with global range.
+ 	* tree-ssa-loop.c (tree_ssa_loop_done): Set PROP_loop_opts_done.
+ 	* tree-ssa-threadbackward.c
+ 	(back_threader_profitability::profitable_path_p): Disable
+ 	threading through latches until after loop optimizations have run.
+ 
+ 2021-09-10  David Faust  <david.faust@oracle.com>
+ 
+ 	* doc/invoke.texi: Document BPF -mcpu, -mjmpext, -mjmp32 and -malu32
+ 	options.
+ 
+ 2021-09-10  David Faust  <david.faust@oracle.com>
+ 
+ 	* config/bpf/bpf-opts.h (bpf_isa_version): New enum.
+ 	* config/bpf/bpf-protos.h (bpf_expand_cbranch): New.
+ 	* config/bpf/bpf.c (bpf_option_override): Handle -mcpu option.
+ 	(bpf_expand_cbranch): New function.
+ 	* config/bpf/bpf.md (AM mode iterator): Conditionalize support for SI
+ 	mode.
+ 	(zero_extendsidi2): Only use mov32 instruction if it is available.
+ 	(SIM mode iterator): Conditionalize support for SI mode.
+ 	(JM mode iterator): New.
+ 	(cbranchdi4): Update name, use new JM iterator. Use bpf_expand_cbranch.
+ 	(*branch_on_di): Update name, use new JM iterator.
+ 	* config/bpf/bpf.opt: (mjmpext): New option.
+ 	(malu32): Likewise.
+ 	(mjmp32): Likewise.
+ 	(mcpu): Likewise.
+ 	(bpf_isa): New enum.
+ 
+ 2021-09-10  David Faust  <david.faust@oracle.com>
+ 
+ 	* config/bpf/bpf.md (zero_extendhidi2): Add new output template
+ 	for register-to-register extensions.
+ 	(zero_extendqidi2): Likewise.
+ 
+ 2021-09-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/102273
+ 	* internal-fn.c (expand_DEFERRED_INIT): Always expand non-SSA vars.
+ 
+ 2021-09-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/102269
+ 	* gimplify.c (is_var_need_auto_init): Empty types do not need
+ 	initialization.
+ 
+ 2021-09-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	* configure.ac (--with-stabs): Remove.
+ 	* configure: Regenerate.
+ 	* doc/install.texi: Remove --with-stabs documentation.
+ 
+ 2021-09-10  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h: (_mm512_cmp_ph_mask):
+ 	New intrinsic.
+ 	(_mm512_mask_cmp_ph_mask): Likewise.
+ 	(_mm512_cmp_round_ph_mask): Likewise.
+ 	(_mm512_mask_cmp_round_ph_mask): Likewise.
+ 	(_mm_cmp_sh_mask): Likewise.
+ 	(_mm_mask_cmp_sh_mask): Likewise.
+ 	(_mm_cmp_round_sh_mask): Likewise.
+ 	(_mm_mask_cmp_round_sh_mask): Likewise.
+ 	(_mm_comieq_sh): Likewise.
+ 	(_mm_comilt_sh): Likewise.
+ 	(_mm_comile_sh): Likewise.
+ 	(_mm_comigt_sh): Likewise.
+ 	(_mm_comige_sh): Likewise.
+ 	(_mm_comineq_sh): Likewise.
+ 	(_mm_ucomieq_sh): Likewise.
+ 	(_mm_ucomilt_sh): Likewise.
+ 	(_mm_ucomile_sh): Likewise.
+ 	(_mm_ucomigt_sh): Likewise.
+ 	(_mm_ucomige_sh): Likewise.
+ 	(_mm_ucomineq_sh): Likewise.
+ 	(_mm_comi_round_sh): Likewise.
+ 	(_mm_comi_sh): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm_cmp_ph_mask): New intrinsic.
+ 	(_mm_mask_cmp_ph_mask): Likewise.
+ 	(_mm256_cmp_ph_mask): Likewise.
+ 	(_mm256_mask_cmp_ph_mask): Likewise.
+ 	* config/i386/i386-builtin-types.def: Add corresponding builtin types.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/i386-expand.c
+ 	(ix86_expand_args_builtin): Handle new builtin types.
+ 	(ix86_expand_round_builtin): Ditto.
+ 	* config/i386/i386.md (ssevecmode): Add HF mode.
+ 	(MODEFH): New mode iterator.
+ 	* config/i386/sse.md
+ 	(V48H_AVX512VL): New mode iterator to support HF vector modes.
+ 	Ajdust corresponding description.
+ 	(ssecmpintprefix): New.
+ 	(VI12_AVX512VL): Adjust to support HF vector modes.
+ 	(cmp_imm_predicate): Likewise.
+ 	(<avx512>_cmp<mode>3<mask_scalar_merge_name><round_saeonly_name>):
+ 	Likewise.
+ 	(avx512f_vmcmp<mode>3<round_saeonly_name>): Likewise.
+ 	(avx512f_vmcmp<mode>3_mask<round_saeonly_name>): Likewise.
+ 	(<sse>_<unord>comi<round_saeonly_name>): Likewise.
+ 
+ 2021-09-10  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h: (_mm512_max_ph): New intrinsic.
+ 	(_mm512_mask_max_ph): Likewise.
+ 	(_mm512_maskz_max_ph): Likewise.
+ 	(_mm512_min_ph): Likewise.
+ 	(_mm512_mask_min_ph): Likewise.
+ 	(_mm512_maskz_min_ph): Likewise.
+ 	(_mm512_max_round_ph): Likewise.
+ 	(_mm512_mask_max_round_ph): Likewise.
+ 	(_mm512_maskz_max_round_ph): Likewise.
+ 	(_mm512_min_round_ph): Likewise.
+ 	(_mm512_mask_min_round_ph): Likewise.
+ 	(_mm512_maskz_min_round_ph): Likewise.
+ 	(_mm_max_sh): Likewise.
+ 	(_mm_mask_max_sh): Likewise.
+ 	(_mm_maskz_max_sh): Likewise.
+ 	(_mm_min_sh): Likewise.
+ 	(_mm_mask_min_sh): Likewise.
+ 	(_mm_maskz_min_sh): Likewise.
+ 	(_mm_max_round_sh): Likewise.
+ 	(_mm_mask_max_round_sh): Likewise.
+ 	(_mm_maskz_max_round_sh): Likewise.
+ 	(_mm_min_round_sh): Likewise.
+ 	(_mm_mask_min_round_sh): Likewise.
+ 	(_mm_maskz_min_round_sh): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h (_mm_max_ph): New intrinsic.
+ 	(_mm256_max_ph): Likewise.
+ 	(_mm_mask_max_ph): Likewise.
+ 	(_mm256_mask_max_ph): Likewise.
+ 	(_mm_maskz_max_ph): Likewise.
+ 	(_mm256_maskz_max_ph): Likewise.
+ 	(_mm_min_ph): Likewise.
+ 	(_mm256_min_ph): Likewise.
+ 	(_mm_mask_min_ph): Likewise.
+ 	(_mm256_mask_min_ph): Likewise.
+ 	(_mm_maskz_min_ph): Likewise.
+ 	(_mm256_maskz_min_ph): Likewise.
+ 	* config/i386/i386-builtin-types.def: Add corresponding builtin types.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/i386-expand.c
+ 	(ix86_expand_args_builtin): Handle new builtin types.
+ 	* config/i386/sse.md
+ 	(<code><mode>3<mask_name><round_saeonly_name>): Adjust to
+ 	support HF vector modes.
+ 	(*<code><mode>3<mask_name><round_saeonly_name>): Likewise.
+ 	(ieee_<ieee_maxmin><mode>3<mask_name><round_saeonly_name>):
+ 	Likewise.
+ 	(<sse>_vm<code><mode>3<mask_scalar_name><round_saeonly_scalar_name>):
+ 	Likewise.
+ 	* config/i386/subst.md (round_saeonly_mode512bit_condition):
+ 	Adjust for HF vector modes.
+ 
+ 2021-09-10  Liu, Hongtao  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm_add_sh): New intrinsic.
+ 	(_mm_mask_add_sh): Likewise.
+ 	(_mm_maskz_add_sh): Likewise.
+ 	(_mm_sub_sh): Likewise.
+ 	(_mm_mask_sub_sh): Likewise.
+ 	(_mm_maskz_sub_sh): Likewise.
+ 	(_mm_mul_sh): Likewise.
+ 	(_mm_mask_mul_sh): Likewise.
+ 	(_mm_maskz_mul_sh): Likewise.
+ 	(_mm_div_sh): Likewise.
+ 	(_mm_mask_div_sh): Likewise.
+ 	(_mm_maskz_div_sh): Likewise.
+ 	(_mm_add_round_sh): Likewise.
+ 	(_mm_mask_add_round_sh): Likewise.
+ 	(_mm_maskz_add_round_sh): Likewise.
+ 	(_mm_sub_round_sh): Likewise.
+ 	(_mm_mask_sub_round_sh): Likewise.
+ 	(_mm_maskz_sub_round_sh): Likewise.
+ 	(_mm_mul_round_sh): Likewise.
+ 	(_mm_mask_mul_round_sh): Likewise.
+ 	(_mm_maskz_mul_round_sh): Likewise.
+ 	(_mm_div_round_sh): Likewise.
+ 	(_mm_mask_div_round_sh): Likewise.
+ 	(_mm_maskz_div_round_sh): Likewise.
+ 	* config/i386/i386-builtin-types.def: Add corresponding builtin types.
+ 	* config/i386/i386-builtin.def: Add corresponding new builtins.
+ 	* config/i386/i386-expand.c
+ 	(ix86_expand_round_builtin): Handle new builtins.
+ 	* config/i386/sse.md (VF_128): Change description.
+ 	(<sse>_vm<plusminus_insn><mode>3<mask_scalar_name><round_scalar_name>):
+ 	Adjust to support HF vector modes.
+ 	(<sse>_vm<multdiv_mnemonic><mode>3<mask_scalar_name><round_scalar_name>):
+ 	Likewise.
+ 
+ 2021-09-10  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/i386-expand.c
+ 	(ix86_avx256_split_vector_move_misalign): Handle V16HF mode.
+ 	* config/i386/i386.c
+ 	(ix86_preferred_simd_mode): Handle HF mode.
+ 	* config/i386/sse.md (V_256H): New mode iterator.
+ 	(avx_vextractf128<mode>): Use it.
+ 	(VEC_INIT_MODE): Align vector HFmode condition to vector
+ 	HImodes since there're no real HF instruction used.
+ 	(VEC_INIT_HALF_MODE): Ditto.
+ 	(VIHF): Ditto.
+ 	(VIHF_AVX512BW): Ditto.
+ 	(*vec_extracthf): Ditto.
+ 	(VEC_EXTRACT_MODE): Ditto.
+ 
+ 2021-09-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR target/102255
+ 	* config/dbx.h: Remove.
+ 	* config/dbxcoff.h: Do not define PREFERRED_DEBUGGING_TYPE.
+ 	* config/lynx.h: Likewise.
+ 
+ 2021-09-10  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_copysign): Expand
+ 	right into ANDNOT + AND + IOR, using paradoxical subregs.
+ 	(ix86_split_copysign_const): Remove.
+ 	(ix86_split_copysign_var): Ditto.
+ 	* config/i386/i386-protos.h (ix86_split_copysign_const): Dotto.
+ 	(ix86_split_copysign_var): Ditto.
+ 	* config/i386/i386.md (@copysign<mode>3_const): Ditto.
+ 	(@copysign<mode>3_var): Ditto.
+ 
+ 2021-09-09  qing zhao  <qing.zhao@oracle.com>
+ 
+ 	* builtins.c (expand_builtin_memset): Make external visible.
+ 	* builtins.h (expand_builtin_memset): Declare extern.
+ 	* common.opt (ftrivial-auto-var-init=): New option.
+ 	* doc/extend.texi: Document the uninitialized attribute.
+ 	* doc/invoke.texi: Document -ftrivial-auto-var-init.
+ 	* flag-types.h (enum auto_init_type): New enumerated type
+ 	auto_init_type.
+ 	* gimple-fold.c (clear_padding_type): Add one new parameter.
+ 	(clear_padding_union): Likewise.
+ 	(clear_padding_emit_loop): Likewise.
+ 	(clear_type_padding_in_mask): Likewise.
+ 	(gimple_fold_builtin_clear_padding): Handle this new parameter.
+ 	* gimplify.c (gimple_add_init_for_auto_var): New function.
+ 	(gimple_add_padding_init_for_auto_var): New function.
+ 	(is_var_need_auto_init): New function.
+ 	(gimplify_decl_expr): Add initialization to automatic variables per
+ 	users' requests.
+ 	(gimplify_call_expr): Add one new parameter for call to
+ 	__builtin_clear_padding.
+ 	(gimplify_init_constructor): Add padding initialization in the end.
+ 	* internal-fn.c (INIT_PATTERN_VALUE): New macro.
+ 	(expand_DEFERRED_INIT): New function.
+ 	* internal-fn.def (DEFERRED_INIT): New internal function.
+ 	* tree-cfg.c (verify_gimple_call): Verify calls to .DEFERRED_INIT.
+ 	* tree-sra.c (generate_subtree_deferred_init): New function.
+ 	(scan_function): Avoid setting cannot_scalarize_away_bitmap for
+ 	calls to .DEFERRED_INIT.
+ 	(sra_modify_deferred_init): New function.
+ 	(sra_modify_function_body): Handle calls to DEFERRED_INIT specially.
+ 	* tree-ssa-structalias.c (find_func_aliases_for_call): Likewise.
+ 	* tree-ssa-uninit.c (warn_uninit): Handle calls to DEFERRED_INIT
+ 	specially.
+ 	(check_defs): Likewise.
+ 	(warn_uninitialized_vars): Likewise.
+ 	* tree-ssa.c (ssa_undefined_value_p): Likewise.
+ 	* tree.c (build_common_builtin_nodes): Build tree node for
+ 	BUILT_IN_CLEAR_PADDING when needed.
+ 
+ 2021-09-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-loop-im.c (fill_always_executed_in_1): Walk
+ 	into all subloops.
+ 
+ 2021-09-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-loop-im.c (fill_always_executed_in_1): Integrate
+ 	DOM walk from get_loop_body_in_dom_order using a worklist
+ 	approach.
+ 
+ 2021-09-09  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config.gcc: Add avx512fp16vlintrin.h.
+ 	* config/i386/avx512fp16intrin.h: (_mm512_add_ph): New intrinsic.
+ 	(_mm512_mask_add_ph): Likewise.
+ 	(_mm512_maskz_add_ph): Likewise.
+ 	(_mm512_sub_ph): Likewise.
+ 	(_mm512_mask_sub_ph): Likewise.
+ 	(_mm512_maskz_sub_ph): Likewise.
+ 	(_mm512_mul_ph): Likewise.
+ 	(_mm512_mask_mul_ph): Likewise.
+ 	(_mm512_maskz_mul_ph): Likewise.
+ 	(_mm512_div_ph): Likewise.
+ 	(_mm512_mask_div_ph): Likewise.
+ 	(_mm512_maskz_div_ph): Likewise.
+ 	(_mm512_add_round_ph): Likewise.
+ 	(_mm512_mask_add_round_ph): Likewise.
+ 	(_mm512_maskz_add_round_ph): Likewise.
+ 	(_mm512_sub_round_ph): Likewise.
+ 	(_mm512_mask_sub_round_ph): Likewise.
+ 	(_mm512_maskz_sub_round_ph): Likewise.
+ 	(_mm512_mul_round_ph): Likewise.
+ 	(_mm512_mask_mul_round_ph): Likewise.
+ 	(_mm512_maskz_mul_round_ph): Likewise.
+ 	(_mm512_div_round_ph): Likewise.
+ 	(_mm512_mask_div_round_ph): Likewise.
+ 	(_mm512_maskz_div_round_ph): Likewise.
+ 	* config/i386/avx512fp16vlintrin.h: New header.
+ 	* config/i386/i386-builtin-types.def (V16HF, V8HF, V32HF):
+ 	Add new builtin types.
+ 	* config/i386/i386-builtin.def: Add corresponding builtins.
+ 	* config/i386/i386-expand.c
+ 	(ix86_expand_args_builtin): Handle new builtin types.
+ 	(ix86_expand_round_builtin): Likewise.
+ 	* config/i386/immintrin.h: Include avx512fp16vlintrin.h
+ 	* config/i386/sse.md (VFH): New mode_iterator.
+ 	(VF2H): Likewise.
+ 	(avx512fmaskmode): Add HF vector modes.
+ 	(avx512fmaskhalfmode): Likewise.
+ 	(<plusminus_insn><mode>3<mask_name><round_name>): Adjust to for
+ 	HF vector modes.
+ 	(*<plusminus_insn><mode>3<mask_name><round_name>): Likewise.
+ 	(mul<mode>3<mask_name><round_name>): Likewise.
+ 	(*mul<mode>3<mask_name><round_name>): Likewise.
+ 	(div<mode>3): Likewise.
+ 	(<sse>_div<mode>3<mask_name><round_name>): Likewise.
+ 	* config/i386/subst.md (SUBST_V): Add HF vector modes.
+ 	(SUBST_A): Likewise.
+ 	(round_mode512bit_condition): Adjust for V32HFmode.
+ 
+ 2021-09-09  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/101059
+ 	* config/i386/sse.md (reduc_plus_scal_<mode>): Split to ..
+ 	(reduc_plus_scal_v4sf): .. this, New define_expand.
+ 	(reduc_plus_scal_v2df): .. and this, New define_expand.
+ 
+ 2021-09-09  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/91103
+ 	* config/i386/sse.md (*vec_extract<mode><ssescalarmodelower>_valign):
+ 	New define_insn.
+ 
+ 2021-09-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR c++/60318
+ 	* doc/trouble.texi (Copy Assignment): Fix description of
+ 	behaviour and fix code in example.
+ 
+ 2021-09-08  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	PR target/102107
+ 	* config/rs6000/rs6000-logue.c (rs6000_emit_epilogue): For ELFv2 use
+ 	r11 instead of r12 for restoring CR.
+ 
+ 2021-09-08  Jakub Jelinek  <jakub@redhat.com>
+ 	    liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/89984
+ 	* config/i386/i386.md (@xorsign<mode>3_1): Remove.
+ 	* config/i386/i386-expand.c (ix86_expand_xorsign): Expand right away
+ 	into AND with mask and XOR, using paradoxical subregs.
+ 	(ix86_split_xorsign): Remove.
+ 	* config/i386/i386-protos.h (ix86_split_xorsign): Remove.
+ 
+ 2021-09-08  Di Zhao  <dizhao@os.amperecomputing.com>
+ 
+ 	* tree-ssa-sccvn.c (vn_nary_op_insert_into): fix result compare
+ 
+ 2021-09-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/102224
+ 	* config/i386/i386.md (xorsign<mode>3): If operands[1] is equal to
+ 	operands[2], emit abs<mode>2 instead.
+ 	(@xorsign<mode>3_1): Add early-clobbers for output operand, enable
+ 	first alternative even for avx, add another alternative with
+ 	=&Yv <- 0, Yv, Yvm constraints.
+ 	* config/i386/i386-expand.c (ix86_split_xorsign): If op0 is equal
+ 	to op1, emit vpandn instead.
+ 
+ 2021-09-08  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/avx512fp16intrin.h (_mm_set_ph): New intrinsic.
+ 	(_mm256_set_ph): Likewise.
+ 	(_mm512_set_ph): Likewise.
+ 	(_mm_setr_ph): Likewise.
+ 	(_mm256_setr_ph): Likewise.
+ 	(_mm512_setr_ph): Likewise.
+ 	(_mm_set1_ph): Likewise.
+ 	(_mm256_set1_ph): Likewise.
+ 	(_mm512_set1_ph): Likewise.
+ 	(_mm_setzero_ph): Likewise.
+ 	(_mm256_setzero_ph): Likewise.
+ 	(_mm512_setzero_ph): Likewise.
+ 	(_mm_set_sh): Likewise.
+ 	(_mm_load_sh): Likewise.
+ 	(_mm_store_sh): Likewise.
+ 	* config/i386/i386-builtin-types.def (V8HF): New type.
+ 	(DEF_FUNCTION_TYPE (V8HF, V8HI)): New builtin function type
+ 	* config/i386/i386-expand.c (ix86_expand_vector_init_duplicate):
+ 	Support vector HFmodes.
+ 	(ix86_expand_vector_init_one_nonzero): Likewise.
+ 	(ix86_expand_vector_init_one_var): Likewise.
+ 	(ix86_expand_vector_init_interleave): Likewise.
+ 	(ix86_expand_vector_init_general): Likewise.
+ 	(ix86_expand_vector_set): Likewise.
+ 	(ix86_expand_vector_extract): Likewise.
+ 	(ix86_expand_vector_init_concat): Likewise.
+ 	(ix86_expand_sse_movcc): Handle vector HFmodes.
+ 	(ix86_expand_vector_set_var): Ditto.
+ 	* config/i386/i386-modes.def: Add HF vector modes in comment.
+ 	* config/i386/i386.c (classify_argument): Add HF vector modes.
+ 	(ix86_hard_regno_mode_ok): Allow HF vector modes for AVX512FP16.
+ 	(ix86_vector_mode_supported_p): Likewise.
+ 	(ix86_set_reg_reg_cost): Handle vector HFmode.
+ 	(ix86_get_ssemov): Handle vector HFmode.
+ 	(function_arg_advance_64): Pass unamed V16HFmode and V32HFmode
+ 	by stack.
+ 	(function_arg_advance_32): Pass V8HF/V16HF/V32HF by sse reg for 32bit
+ 	mode.
+ 	(function_arg_advance_32): Ditto.
+ 	* config/i386/i386.h (VALID_AVX512FP16_REG_MODE): New.
+ 	(VALID_AVX256_REG_OR_OI_MODE): Rename to ..
+ 	(VALID_AVX256_REG_OR_OI_VHF_MODE): .. this, and add V16HF.
+ 	(VALID_SSE2_REG_VHF_MODE): New.
+ 	(VALID_AVX512VL_128_REG_MODE): Add V8HF and TImode.
+ 	(SSE_REG_MODE_P): Add vector HFmode.
+ 	* config/i386/i386.md (mode): Add HF vector modes.
+ 	(MODE_SIZE): Likewise.
+ 	(ssemodesuffix): Add ph suffix for HF vector modes.
+ 	* config/i386/sse.md (VFH_128): New mode iterator.
+ 	(VMOVE): Adjust for HF vector modes.
+ 	(V): Likewise.
+ 	(V_256_512): Likewise.
+ 	(avx512): Likewise.
+ 	(avx512fmaskmode): Likewise.
+ 	(shuffletype): Likewise.
+ 	(sseinsnmode): Likewise.
+ 	(ssedoublevecmode): Likewise.
+ 	(ssehalfvecmode): Likewise.
+ 	(ssehalfvecmodelower): Likewise.
+ 	(ssePScmode): Likewise.
+ 	(ssescalarmode): Likewise.
+ 	(ssescalarmodelower): Likewise.
+ 	(sseintprefix): Likewise.
+ 	(i128): Likewise.
+ 	(bcstscalarsuff): Likewise.
+ 	(xtg_mode): Likewise.
+ 	(VI12HF_AVX512VL): New mode_iterator.
+ 	(VF_AVX512FP16): Likewise.
+ 	(VIHF): Likewise.
+ 	(VIHF_256): Likewise.
+ 	(VIHF_AVX512BW): Likewise.
+ 	(V16_256): Likewise.
+ 	(V32_512): Likewise.
+ 	(sseintmodesuffix): New mode_attr.
+ 	(sse): Add scalar and vector HFmodes.
+ 	(ssescalarmode): Add vector HFmode mapping.
+ 	(ssescalarmodesuffix): Add sh suffix for HFmode.
+ 	(*<sse>_vm<insn><mode>3): Use VFH_128.
+ 	(*<sse>_vm<multdiv_mnemonic><mode>3): Likewise.
+ 	(*ieee_<ieee_maxmin><mode>3): Likewise.
+ 	(<avx512>_blendm<mode>): New define_insn.
+ 	(vec_setv8hf): New define_expand.
+ 	(vec_set<mode>_0): New define_insn for HF vector set.
+ 	(*avx512fp16_movsh): Likewise.
+ 	(avx512fp16_movsh): Likewise.
+ 	(vec_extract_lo_v32hi): Rename to ...
+ 	(vec_extract_lo_<mode>): ... this, and adjust to allow HF
+ 	vector modes.
+ 	(vec_extract_hi_v32hi): Likewise.
+ 	(vec_extract_hi_<mode>): Likewise.
+ 	(vec_extract_lo_v16hi): Likewise.
+ 	(vec_extract_lo_<mode>): Likewise.
+ 	(vec_extract_hi_v16hi): Likewise.
+ 	(vec_extract_hi_<mode>): Likewise.
+ 	(vec_set_hi_v16hi): Likewise.
+ 	(vec_set_hi_<mode>): Likewise.
+ 	(vec_set_lo_v16hi): Likewise.
+ 	(vec_set_lo_<mode>): Likewise.
+ 	(*vec_extract<mode>_0): New define_insn_and_split for HF
+ 	vector extract.
+ 	(*vec_extracthf): New define_insn.
+ 	(VEC_EXTRACT_MODE): Add HF vector modes.
+ 	(PINSR_MODE): Add V8HF.
+ 	(sse2p4_1): Likewise.
+ 	(pinsr_evex_isa): Likewise.
+ 	(<sse2p4_1>_pinsr<ssemodesuffix>): Adjust to support
+ 	insert for V8HFmode.
+ 	(pbroadcast_evex_isa): Add HF vector modes.
+ 	(AVX2_VEC_DUP_MODE): Likewise.
+ 	(VEC_INIT_MODE): Likewise.
+ 	(VEC_INIT_HALF_MODE): Likewise.
+ 	(avx2_pbroadcast<mode>): Adjust to support HF vector mode
+ 	broadcast.
+ 	(avx2_pbroadcast<mode>_1): Likewise.
+ 	(<avx512>_vec_dup<mode>_1): Likewise.
+ 	(<avx512>_vec_dup<mode><mask_name>): Likewise.
+ 	(<mask_codefor><avx512>_vec_dup_gpr<mode><mask_name>):
+ 	Likewise.
+ 
+ 2021-09-08  Guo, Xuepeng  <xuepeng.guo@intel.com>
+ 	    H.J. Lu  <hongjiu.lu@intel.com>
+ 	    Liu Hongtao  <hongtao.liu@intel.com>
+ 	    Wang Hongyu  <hongyu.wang@intel.com>
+ 	    Xu Dianhong  <dianhong.xu@intel.com>
+ 
+ 	* common/config/i386/cpuinfo.h (get_available_features):
+ 	Detect FEATURE_AVX512FP16.
+ 	* common/config/i386/i386-common.c
+ 	(OPTION_MASK_ISA_AVX512FP16_SET,
+ 	OPTION_MASK_ISA_AVX512FP16_UNSET,
+ 	OPTION_MASK_ISA2_AVX512FP16_SET,
+ 	OPTION_MASK_ISA2_AVX512FP16_UNSET): New.
+ 	(OPTION_MASK_ISA2_AVX512BW_UNSET,
+ 	OPTION_MASK_ISA2_AVX512BF16_UNSET): Add AVX512FP16.
+ 	(ix86_handle_option): Handle -mavx512fp16.
+ 	* common/config/i386/i386-cpuinfo.h (enum processor_features):
+ 	Add FEATURE_AVX512FP16.
+ 	* common/config/i386/i386-isas.h: Add entry for AVX512FP16.
+ 	* config.gcc: Add avx512fp16intrin.h.
+ 	* config/i386/avx512fp16intrin.h: New intrinsic header.
+ 	* config/i386/cpuid.h: Add bit_AVX512FP16.
+ 	* config/i386/i386-builtin-types.def: (FLOAT16): New primitive type.
+ 	* config/i386/i386-builtins.c: Support _Float16 type for i386
+ 	backend.
+ 	(ix86_register_float16_builtin_type): New function.
+ 	(ix86_float16_type_node): New.
+ 	* config/i386/i386-c.c (ix86_target_macros_internal): Define
+ 	__AVX512FP16__.
+ 	* config/i386/i386-expand.c (ix86_expand_branch): Support
+ 	HFmode.
+ 	(ix86_prepare_fp_compare_args): Adjust TARGET_SSE_MATH &&
+ 	SSE_FLOAT_MODE_P to SSE_FLOAT_MODE_SSEMATH_OR_HF_P.
+ 	(ix86_expand_fp_movcc): Ditto.
+ 	* config/i386/i386-isa.def: Add PTA define for AVX512FP16.
+ 	* config/i386/i386-options.c (isa2_opts): Add -mavx512fp16.
+ 	(ix86_valid_target_attribute_inner_p): Add avx512fp16 attribute.
+ 	* config/i386/i386.c (ix86_get_ssemov): Use
+ 	vmovdqu16/vmovw/vmovsh for HFmode/HImode scalar or vector.
+ 	(ix86_get_excess_precision): Use
+ 	FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16 when TARGET_AVX512FP16
+ 	existed.
+ 	(sse_store_index): Use SFmode cost for HFmode cost.
+ 	(inline_memory_move_cost): Add HFmode, and perfer SSE cost over
+ 	GPR cost for HFmode.
+ 	(ix86_hard_regno_mode_ok): Allow HImode in sse register.
+ 	(ix86_mangle_type): Add manlging for _Float16 type.
+ 	(inline_secondary_memory_needed): No memory is needed for
+ 	16bit movement between gpr and sse reg under
+ 	TARGET_AVX512FP16.
+ 	(ix86_multiplication_cost): Adjust TARGET_SSE_MATH &&
+ 	SSE_FLOAT_MODE_P to SSE_FLOAT_MODE_SSEMATH_OR_HF_P.
+ 	(ix86_division_cost): Ditto.
+ 	(ix86_rtx_costs): Ditto.
+ 	(ix86_add_stmt_cost): Ditto.
+ 	(ix86_optab_supported_p): Ditto.
+ 	* config/i386/i386.h (VALID_AVX512F_SCALAR_MODE): Add HFmode.
+ 	(SSE_FLOAT_MODE_SSEMATH_OR_HF_P): Add HFmode.
+ 	(PTA_SAPPHIRERAPIDS): Add PTA_AVX512FP16.
+ 	* config/i386/i386.md (mode): Add HFmode.
+ 	(MODE_SIZE): Add HFmode.
+ 	(isa): Add avx512fp16.
+ 	(enabled): Handle avx512fp16.
+ 	(ssemodesuffix): Add sh suffix for HFmode.
+ 	(comm): Add mult, div.
+ 	(plusminusmultdiv): New code iterator.
+ 	(insn): Add mult, div.
+ 	(*movhf_internal): Adjust for avx512fp16 instruction.
+ 	(*movhi_internal): Ditto.
+ 	(*cmpi<unord>hf): New define_insn for HFmode.
+ 	(*ieee_s<ieee_maxmin>hf3): Likewise.
+ 	(extendhf<mode>2): Likewise.
+ 	(trunc<mode>hf2): Likewise.
+ 	(float<floatunssuffix><mode>hf2): Likewise.
+ 	(*<insn>hf): Likewise.
+ 	(cbranchhf4): New expander.
+ 	(movhfcc): Likewise.
+ 	(<insn>hf3): Likewise.
+ 	(mulhf3): Likewise.
+ 	(divhf3): Likewise.
+ 	* config/i386/i386.opt: Add mavx512fp16.
+ 	* config/i386/immintrin.h: Include avx512fp16intrin.h.
+ 	* doc/invoke.texi: Add mavx512fp16.
+ 	* doc/extend.texi: Add avx512fp16 Usage Notes.
+ 
+ 2021-09-08  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* common.opt: Support -fexcess-precision=16.
+ 	* config/aarch64/aarch64.c (aarch64_excess_precision): Return
+ 	FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16 when
+ 	EXCESS_PRECISION_TYPE_FLOAT16.
+ 	* config/arm/arm.c (arm_excess_precision): Ditto.
+ 	* config/i386/i386.c (ix86_get_excess_precision): Ditto.
+ 	* config/m68k/m68k.c (m68k_excess_precision): Issue an error
+ 	when EXCESS_PRECISION_TYPE_FLOAT16.
+ 	* config/s390/s390.c (s390_excess_precision): Ditto.
+ 	* coretypes.h (enum excess_precision_type): Add
+ 	EXCESS_PRECISION_TYPE_FLOAT16.
+ 	* doc/tm.texi (TARGET_C_EXCESS_PRECISION): Update documents.
+ 	* doc/tm.texi.in (TARGET_C_EXCESS_PRECISION): Ditto.
+ 	* doc/extend.texi (Half-Precision): Document
+ 	-fexcess-precision=16.
+ 	* flag-types.h (enum excess_precision): Add
+ 	EXCESS_PRECISION_FLOAT16.
+ 	* target.def (excess_precision): Update document.
+ 	* tree.c (excess_precision_type): Set excess_precision_type to
+ 	EXCESS_PRECISION_FLOAT16 when -fexcess-precision=16.
+ 
+ 2021-09-08  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* doc/extend.texi: (@node Floating Types): Adjust the wording.
+ 	(@node Half-Precision): Ditto.
+ 
+ 2021-09-07  Takayuki 'January June' Suwa  <jjsuwa_sys3175@yahoo.co.jp>
+ 
+ 	PR target/102115
+ 	* config/xtensa/xtensa.c (xtensa_emit_move_sequence): Add
+ 	'CONST_INT_P (src)' to the condition of the block that tries to
+ 	eliminate literal when loading integer contant.
+ 
+ 2021-09-07  David Faust  <david.faust@oracle.com>
+ 
+ 	* doc/extend.texi (BPF Type Attributes) New node.
+ 	Document new preserve_access_index attribute.
+ 	Document new preserve_access_index builtin.
+ 	* doc/invoke.texi: Document -mco-re and -mno-co-re options.
+ 
+ 2021-09-07  David Faust  <david.faust@oracle.com>
+ 
+ 	* config/bpf/bpf.c: Adjust includes.
+ 	(bpf_handle_preserve_access_index_attribute): New function.
+ 	(bpf_attribute_table): Use it here.
+ 	(bpf_builtins): Add BPF_BUILTIN_PRESERVE_ACCESS_INDEX.
+ 	(bpf_option_override): Handle "-mco-re" option.
+ 	(bpf_asm_init_sections): New.
+ 	(TARGET_ASM_INIT_SECTIONS): Redefine.
+ 	(bpf_file_end): New.
+ 	(TARGET_ASM_FILE_END): Redefine.
+ 	(bpf_init_builtins): Add "__builtin_preserve_access_index".
+ 	(bpf_core_compute, bpf_core_get_index): New.
+ 	(is_attr_preserve_access): New.
+ 	(bpf_expand_builtin): Handle new builtins.
+ 	(bpf_core_newdecl, bpf_core_is_maybe_aggregate_access): New.
+ 	(bpf_core_walk): New.
+ 	(bpf_resolve_overloaded_builtin): New.
+ 	(TARGET_RESOLVE_OVERLOADED_BUILTIN): Redefine.
+ 	(handle_attr): New.
+ 	(pass_bpf_core_attr): New RTL pass.
+ 	* config/bpf/bpf-passes.def: New file.
+ 	* config/bpf/bpf-protos.h (make_pass_bpf_core_attr): New.
+ 	* config/bpf/coreout.c: New file.
+ 	* config/bpf/coreout.h: Likewise.
+ 	* config/bpf/t-bpf (TM_H): Add $(srcdir)/config/bpf/coreout.h.
+ 	(coreout.o): New rule.
+ 	(PASSES_EXTRA): Add $(srcdir)/config/bpf/bpf-passes.def.
+ 	* config.gcc (bpf): Add coreout.h to extra_headers.
+ 	Add coreout.o to extra_objs.
+ 	Add $(srcdir)/config/bpf/coreout.c to target_gtfiles.
+ 
+ 2021-09-07  David Faust  <david.faust@oracle.com>
+ 
+ 	* btfout.c (get_btf_id): Function is no longer static.
+ 	* ctfc.h: Expose it here.
+ 
+ 2021-09-07  David Faust  <david.faust@oracle.com>
+ 
+ 	* ctfc.c (ctf_lookup_tree_type): New function.
+ 	* ctfc.h: Likewise.
+ 
+ 2021-09-07  David Faust  <david.faust@oracle.com>
+ 
+ 	* ctfc.c (ctf_dtd_lookup): Function is no longer static.
+ 	* ctfc.h: Analogous change.
+ 
+ 2021-09-07  David Faust  <david.faust@oracle.com>
+ 
+ 	* dwarf2out.c (lookup_type_die): Function is no longer static.
+ 	* dwarf2out.h: Expose it here.
+ 
+ 2021-09-07  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* dwarf2ctf.c (ctf_debug_finalize): Make it static.
+ 	(ctf_debug_early_finish): New definition.
+ 	(ctf_debug_finish): Likewise.
+ 	* dwarf2ctf.h (ctf_debug_finalize): Remove declaration.
+ 	(ctf_debug_early_finish): New declaration.
+ 	(ctf_debug_finish): Likewise.
+ 	* dwarf2out.c (dwarf2out_finish): Invoke ctf_debug_finish.
+ 	(dwarf2out_early_finish): Invoke ctf_debug_early_finish.
+ 
+ 2021-09-07  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* config/bpf/bpf.c (bpf_option_override): For BPF backend, disable LTO
+ 	support when compiling for CO-RE.
+ 	* config/bpf/bpf.opt: Add new command line option -mco-re.
+ 
+ 2021-09-07  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* flag-types.h (enum debug_info_type): Add new enum
+ 	DINFO_TYPE_BTF_WITH_CORE.
+ 	(BTF_WITH_CORE_DEBUG): New bitmask.
+ 	* flags.h (btf_with_core_debuginfo_p): New declaration.
+ 	* opts.c (btf_with_core_debuginfo_p): New definition.
+ 
+ 2021-09-07  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree.h (error_operand_p): Change to inline function.
+ 
+ 2021-09-07  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadedge.c (forwarder_block_p): Rename to...
+ 	(empty_block_with_phis_p): ...this.
+ 	(potentially_threadable_block): Same.
+ 	(jump_threader::thread_through_normal_block): Same.
+ 
+ 2021-09-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR debug/101947
+ 	* dwarf2out.c (mark_base_types): New overloaded function.
+ 	(dwarf2out_early_finish): Invoke it on the COMDAT type list as well
+ 	as the compilation unit, and call move_marked_base_types afterward.
+ 
+ 2021-09-07  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/85819
+ 	* config/i386/i386-expand.c (ix86_expand_convert_uns_sisf_sse):
+ 	Enable FMA.
+ 	(ix86_expand_vector_convert_uns_vsivsf): Likewise.
+ 
+ 2021-09-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102226
+ 	* tree-vect-loop.c (vect_transform_cycle_phi): Record
+ 	the converted value for the epilogue PHI use.
+ 
+ 2021-09-07  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR gcov-profile/80223
+ 	* ipa-inline.c (can_inline_edge_p): Similarly to sanitizer
+ 	options, do not inline when no_profile_instrument_function
+ 	attributes are different in early inliner. It's fine to inline
+ 	it after PGO instrumentation.
+ 
+ 2021-09-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101555
+ 	* tree-ssa-pre.c (translate_vuse_through_block): Do not
+ 	perform an alias walk to determine the validity of the
+ 	mem at the start of the block which is already guaranteed
+ 	by means of prune_clobbered_mems.
+ 	(phi_translate_1): Pass edge to translate_vuse_through_block.
+ 
+ 2021-09-07  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	PR target/97142
+ 	* config/rs6000/rs6000.md (fmod<mode>3): New define_expand.
+ 	(remainder<mode>3): Likewise.
+ 
+ 2021-09-07  YunQiang Su  <yunqiang.su@cipunited.com>
+ 
+ 	* config/mips/mips.c (mips_file_start): add .module for
+ 	  arch and ase.
+ 
+ 2021-09-06  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* wide-int.cc (wi::clz): Reorder tests to ensure the result
+ 	is zero for all negative values.
+ 
+ 2021-09-06  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* doc/invoke.texi (-foffload-options): Fix @opindex.
+ 
+ 2021-09-06  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/89984
+ 	* config/i386/i386-expand.c (ix86_split_xorsign): Use operands[2].
+ 	* config/i386/i386.md (@xorsign<mode>3_1): Add non-destructive
+ 	source alternative for AVX.
+ 
+ 2021-09-06  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR middle-end/102182
+ 	* optabs.c (expand_fix): Add from1 to avoid from being
+ 	overwritten.
+ 
+ 2021-09-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* dwarf2out.c (modified_type_die): Deal with all array types earlier
+ 	and use local variable consistently throughout the function.
+ 
+ 2021-09-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/102207
+ 	* match.pd: Don't demote operands of IFN_{ADD,SUB,MUL}_OVERFLOW if they
+ 	were promoted from signed to wider unsigned type.
+ 
+ 2021-09-06  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/63184
+ 	* match.pd: Add simplification of pointer_diff of two pointer_plus
+ 	with addr_expr in the first operand of each pointer_plus.
+ 	Add simplificatoin of ne/eq of two pointer_plus with addr_expr
+ 	in the first operand of each pointer_plus.
+ 
+ 2021-09-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102176
+ 	* tree-vect-slp.c (vect_slp_gather_vectorized_scalar_stmts):
+ 	New function.
+ 	(vect_bb_slp_scalar_cost): Use the computed set of
+ 	vectorized scalar stmts instead of relying on the out-of-date
+ 	and not accurate PURE_SLP_STMT.
+ 	(vect_bb_vectorization_profitable_p): Compute the set
+ 	of vectorized scalar stmts.
+ 
+ 2021-09-05  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::range_of_stmt): Remove
+ 	GIMPLE_COND special casing.
+ 	(path_range_query::range_defined_in_block): Use range_of_stmt
+ 	instead of calling fold_range directly.
+ 
+ 2021-09-05  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::range_of_expr): Set
+ 	m_undefined_path when appropriate.
+ 	(path_range_query::internal_range_of_expr): Copy from range_of_expr.
+ 	(path_range_query::unreachable_path_p): New.
+ 	(path_range_query::precompute_ranges): Set m_undefined_path.
+ 	* gimple-range-path.h (path_range_query::unreachable_path_p): New.
+ 	(path_range_query::internal_range_of_expr): New.
+ 	* tree-ssa-threadbackward.c (back_threader::find_taken_edge_cond):
+ 	Use unreachable_path_p.
+ 
+ 2021-09-05  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (back_threader::maybe_register_path):
+ 	Remove argument and call find_taken_edge.
+ 	(back_threader::resolve_phi): Do not calculate taken edge before
+ 	calling maybe_register_path.
+ 	(back_threader::find_paths_to_names): Same.
+ 
+ 2021-09-05  Jeff Law  <jlaw@localhost.localdomain>
+ 
+ 	* config/h8300/h8300.md (QHSI2 mode iterator): New mode iterator.
+ 	* config/h8300/testcompare.md (store_c): Update name, use new
+ 	QHSI2 iterator.
+ 	(store_neg_c, store_shifted_c): New patterns.
+ 
+ 2021-09-03  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	PR target/102107
+ 	* config/rs6000/rs6000-logue.c (rs6000_emit_prologue): On ELFv2 use r11
+ 	instead of r12 for CR save, in all cases.
+ 
+ 2021-09-03  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* config/aarch64/aarch64-sve-builtins.cc (register_vector_type):
+ 	Handle error_mark_node as the type of the type_decl.
+ 
+ 2021-09-03  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c (struct aarch64_simd_type_info):
+ 	Mark with GTY.
+ 	(aarch64_simd_types): Likewise.
+ 	(aarch64_simd_intOI_type_node): Likewise.
+ 	(aarch64_simd_intCI_type_node): Likewise.
+ 	(aarch64_simd_intXI_type_node): Likewise.
+ 	* config/aarch64/aarch64.h (aarch64_fp16_type_node): Likewise.
+ 	(aarch64_fp16_ptr_type_node): Likewise.
+ 	(aarch64_bf16_type_node): Likewise.
+ 	(aarch64_bf16_ptr_type_node): Likewise.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* range-op.cc (operator_minus::op1_op2_relation_effect): Abstract
+ 	out to...
+ 	(minus_op1_op2_relation_effect): ...here.
+ 	(class operator_pointer_diff): New.
+ 	(operator_pointer_diff::op1_op2_relation_effect): Call
+ 	minus_op1_op2_relation_effect.
+ 	(integral_table::integral_table): Add entry for POINTER_DIFF_EXPR.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (back_threader::thread_through_all_blocks):
+ 	Add may_peel_loop_headers.
+ 	(back_threader_registry::thread_through_all_blocks): Same.
+ 	(try_thread_blocks): Pass may_peel_loop_headers argument.
+ 	(pass_early_thread_jumps::execute): Same.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadedge.c (has_phis_p): New.
+ 	(forwarder_block_p): New.
+ 	(potentially_threadable_block): Call forwarder_block_p.
+ 	(jump_threader::thread_around_empty_blocks): Call has_phis_p.
+ 	(jump_threader::thread_through_normal_block): Call
+ 	forwarder_block_p.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (back_threader::dump): New.
+ 	(back_threader::debug): New.
+ 	(back_threader_profitability::profitable_path_p): Dump blocks
+ 	even if we are bailing early.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadupdate.c (cancel_thread): New.
+ 	(jump_thread_path_registry::thread_block_1): Use cancel_thread.
+ 	(jump_thread_path_registry::mark_threaded_blocks): Same.
+ 	(jump_thread_path_registry::register_jump_thread): Same.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadedge.c (jt_state::push): Only call methods for
+ 	which objects are available.
+ 	(jt_state::pop): Same.
+ 	(jt_state::register_equiv): Same.
+ 	(jt_state::register_equivs_on_edge): Same.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadedge.c (jump_threader::thread_across_edge):
+ 	Move pop until after a thread is registered.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadupdate.c (debug): New.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-trace.cc (push_dump_file::push_dump_file): New.
+ 	(push_dump_file::~push_dump_file): New.
+ 	(dump_ranger): Change dump_file temporarily while dumping
+ 	ranger.
+ 	* gimple-range-trace.h (class push_dump_file): New.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-trace.cc (debug_seed_ranger): Remove static.
+ 	(dump_ranger): Dump function name.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::range_defined_in_block):
+ 	Adjust for non-null.
+ 	(path_range_query::adjust_for_non_null_uses): New.
+ 	(path_range_query::precompute_ranges): Call
+ 	adjust_for_non_null_uses.
+ 	* gimple-range-path.h: Add m_non_null and
+ 	adjust_for_non_null_uses.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.cc (path_range_query::dump): Dump path
+ 	length.
+ 	(path_range_query::precompute_ranges): Dump entire path.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* value-relation.cc (relation_oracle::debug): New.
+ 	* value-relation.h (relation_oracle::debug): New.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-loop-ch.c: Remove unnecessary include file.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-fold.cc (fold_using_range::postfold_gcond_edges):
+ 	Skip statements with no defining BB.
+ 	* gimple-range-path.cc (path_range_query::range_defined_in_block):
+ 	Do not get confused by statements with no defining BB.
+ 
+ 2021-09-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-fold.cc (adjust_imagpart_expr): Move from
+ 	gimple_range_adjustment.  Add support for constants.
+ 	(adjust_realpart_expr): New.
+ 	(gimple_range_adjustment): Move IMAGPART_EXPR code to
+ 	adjust_imagpart_expr.
+ 	* range-op.cc (integral_table::integral_table): Add entry for
+ 	REALPART_CST.
+ 
+ 2021-09-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* omp-expand.c (expand_omp_atomic_pipeline): Use
+ 	IFN_ATOMIC_COMPARE_EXCHANGE instead of
+ 	BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_? so that memory order
+ 	can be provided.
+ 
+ 2021-09-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/102024
+ 	* tree.h (DECL_FIELD_ABI_IGNORED): Changed into rvalue only macro
+ 	that is false if DECL_BIT_FIELD.
+ 	(SET_DECL_FIELD_ABI_IGNORED, DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD,
+ 	SET_DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD): Define.
+ 	* tree-streamer-out.c (pack_ts_decl_common_value_fields): For
+ 	DECL_BIT_FIELD stream DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD instead
+ 	of DECL_FIELD_ABI_IGNORED.
+ 	* tree-streamer-in.c (unpack_ts_decl_common_value_fields): Use
+ 	SET_DECL_FIELD_ABI_IGNORED instead of writing to
+ 	DECL_FIELD_ABI_IGNORED and for DECL_BIT_FIELD use
+ 	SET_DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD instead.
+ 	* lto-streamer-out.c (hash_tree): For DECL_BIT_FIELD hash
+ 	DECL_FIELD_CXX_ZERO_WIDTH_BIT_FIELD instead of DECL_FIELD_ABI_IGNORED.
+ 
+ 2021-09-03  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102166
+ 	* config/i386/amxbf16intrin.h : Remove macro check for __AMX_BF16__.
+ 	* config/i386/amxint8intrin.h : Remove macro check for __AMX_INT8__.
+ 	* config/i386/amxtileintrin.h : Remove macro check for __AMX_TILE__.
+ 
+ 2021-09-02  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR tree-optimization/17506
+ 	PR testsuite/37182
+ 	* tree-ssa-uninit.c (warn_uninit): Remove conditional guarding note.
+ 
+ 2021-09-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-loop-im.c (fill_always_executed_in_1): Refine
+ 	fix for PR78185 and continue processing when leaving
+ 	finite inner loops.
+ 
+ 2021-09-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/99591
+ 	* match.pd: Demote operands of IFN_{ADD,SUB,MUL}_OVERFLOW if they
+ 	were promoted.
+ 
+ 2021-09-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	Revert:
+ 	2021-09-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102155
+ 	* tree-ssa-loop-im.c (fill_always_executed_in_1): Iterate
+ 	over a part of the RPO array and do not recurse here.
+ 	Dump blocks marked as always executed.
+ 	(fill_always_executed_in): Walk over the RPO array and
+ 	process loops whose header we run into.
+ 	(loop_invariant_motion_in_fun): Compute the first RPO
+ 	using rev_post_order_and_mark_dfs_back_seme in iteration
+ 	order and pass that to fill_always_executed_in.
+ 
+ 2021-09-02  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386-modes.def (FLOAT_MODE): Define ieee HFmode.
+ 	* config/i386/i386.c (enum x86_64_reg_class): Add
+ 	X86_64_SSEHF_CLASS.
+ 	(merge_classes): Handle X86_64_SSEHF_CLASS.
+ 	(examine_argument): Ditto.
+ 	(construct_container): Ditto.
+ 	(classify_argument): Ditto, and set HFmode/HCmode to
+ 	X86_64_SSEHF_CLASS.
+ 	(function_value_32): Return _FLoat16/Complex Float16 by
+ 	%xmm0.
+ 	(function_value_64): Return _Float16/Complex Float16 by SSE
+ 	register.
+ 	(ix86_print_operand): Handle CONST_DOUBLE HFmode.
+ 	(ix86_secondary_reload): Require gpr as intermediate register
+ 	to store _Float16 from sse register when sse4 is not
+ 	available.
+ 	(ix86_libgcc_floating_mode_supported_p): Enable _FLoat16 under
+ 	sse2.
+ 	(ix86_scalar_mode_supported_p): Ditto.
+ 	(TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P): Defined.
+ 	* config/i386/i386.h (VALID_SSE2_REG_MODE): Add HFmode.
+ 	(VALID_INT_MODE_P): Add HFmode and HCmode.
+ 	* config/i386/i386.md (*pushhf_rex64): New define_insn.
+ 	(*pushhf): Ditto.
+ 	(*movhf_internal): Ditto.
+ 	* doc/extend.texi (Half-Precision Floating Point): Documemt
+ 	_Float16 for x86.
+ 
+ 2021-09-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102155
+ 	* tree-ssa-loop-im.c (fill_always_executed_in_1): Iterate
+ 	over a part of the RPO array and do not recurse here.
+ 	Dump blocks marked as always executed.
+ 	(fill_always_executed_in): Walk over the RPO array and
+ 	process loops whose header we run into.
+ 	(loop_invariant_motion_in_fun): Compute the first RPO
+ 	using rev_post_order_and_mark_dfs_back_seme in iteration
+ 	order and pass that to fill_always_executed_in.
+ 
+ 2021-09-02  YunQiang Su  <syq@debian.org>
+ 
+ 	Revert:
+ 	2021-08-31  YunQiang Su  <yunqiang.su@cipunited.com>
+ 
+ 	* config/mips/mips.c (mips_module_isa_name): New.
+ 	  mips_file_start: add .module mipsREV to all asm output
+ 
+ 2021-09-01  Jeff Law  <jlaw@localhost.localdomain>
+ 
+ 	PR tree-optimization/102152
+ 	* tree-ssa-dom.c (dom_opt_dom_walker::optimize_stmt): Reduce a vector
+ 	comparison to a scalar comparison before calling
+ 	update_stmt_if_modified.
+ 
+ 2021-09-01  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR target/101934
+ 	* config/aarch64/aarch64.c (aarch64_expand_setmem):
+ 	Check STRICT_ALIGNMENT before creating an overlapping
+ 	store.
+ 
+ 2021-09-01  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* gimple-ssa-warn-access.cc (get_size_range): Add argument.
+ 	(check_access): Pass additional argument.
+ 	(check_memop_access): Remove template and make a member function.
+ 	(maybe_check_dealloc_call): Make a pass_waccess member function.
+ 	(class pass_waccess): Add, rename, and remove members.
+ 	(pass_waccess::pass_waccess): Adjust to name change.
+ 	(pass_waccess::~pass_waccess): Same.
+ 	(check_alloca): Make a member function.
+ 	(check_alloc_size_call): Same.
+ 	(check_strcat): Same.
+ 	(check_strncat): Same.
+ 	(check_stxcpy): Same.
+ 	(check_stxncpy): Same.
+ 	(check_strncmp): Same.
+ 	(maybe_warn_rdwr_sizes): Rename...
+ 	(pass_waccess::maybe_check_access_sizes): ...to this.
+ 	(pass_waccess::check_call): Adjust to name changes.
+ 	(pass_waccess::maybe_check_dealloc_call): Make a pass_waccess member
+ 	function.
+ 	(pass_waccess::execute): Adjust to name changes.
+ 	* gimple-ssa-warn-access.h (check_memop_access): Remove.
+ 	* pointer-query.cc (access_ref::phi): Handle null pointer.
+ 	(access_ref::inform_access): Same.
+ 	(pointer_query::put_ref): Modify a cached value, not a copy of it.
+ 	(pointer_query::dump): New function.
+ 	(compute_objsize_r): Avoid overwriting access_ref::bndrng.  Cache
+ 	more results.
+ 	* pointer-query.h (pointer_query::dump): Declare.
+ 	* tree-ssa-strlen.c (get_range): Simplify.  Use function query.
+ 	(dump_strlen_info): Use function query.
+ 	(printf_strlen_execute): Factor code out into pointer_query::put_ref.
+ 
+ 2021-09-01  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* tree.c (walk_tree_1) <OMP_CLAUSE>: Simplify.
+ 
+ 2021-09-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* doc/extend.texi: Document unavailable attribute.
+ 	* print-tree.c (print_node): Handle unavailable attribute.
+ 	* tree-core.h (struct tree_base): Add a bit to carry unavailability.
+ 	* tree.c (error_unavailable_use): New.
+ 	* tree.h (TREE_UNAVAILABLE): New.
+ 	(error_unavailable_use): New.
+ 
+ 2021-09-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/102124
+ 	* tree-vect-patterns.c (vect_recog_widen_op_pattern): For ORIG_CODE
+ 	MINUS_EXPR, if itype is unsigned with smaller precision than type,
+ 	add an extra cast to signed variant of itype to ensure sign-extension.
+ 
+ 2021-09-01  Martin Liska  <mliska@suse.cz>
+ 
+ 	* graph.c (draw_cfg_node_succ_edges): Do not color fallthru
+ 	  edges and rather use colors for TRUE and FALSE edges.
+ 
+ 2021-09-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/93491
+ 	* tree-ssa-pre.c (compute_avail): Set BB_MAY_NOTRETURN
+ 	after processing the stmt itself.  Do not consider
+ 	pure functions possibly not returning.  Properly avoid
+ 	adding possibly trapping calls to EXP_GEN when there's
+ 	a preceeding possibly not returning call.
+ 	* tree-ssa-sccvn.c (vn_reference_may_trap): Conservatively
+ 	not handle calls.
+ 
+ 2021-09-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102139
+ 	* tree-vectorizer.h (vec_base_alignments): Adjust hash-map
+ 	type to record a std::pair of the stmt-info and the innermost
+ 	loop behavior.
+ 	(dr_vec_info::group): New member.
+ 	* tree-vect-data-refs.c (vect_record_base_alignment): Adjust.
+ 	(vect_compute_data_ref_alignment): Verify the recorded
+ 	base alignment can be used.
+ 	(data_ref_pair): Remove.
+ 	(dr_group_sort_cmp): Adjust.
+ 	(vect_analyze_data_ref_accesses): Store the group-ID in the
+ 	dr_vec_info and operate on a vector of dr_vec_infos.
+ 
+ 2021-09-01  YunQiang Su  <yunqiang.su@cipunited.com>
+ 
+ 	* read-md.c (md_reader::handle_enum): support value assignation.
+ 	* doc/md.texi: record define_c_enum value assignation support.
+ 
+ 2021-09-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/102141
+ 	* gimple-ssa-store-merging.c (bswap_view_convert): Add BEFORE
+ 	argument.  If false, emit stmts after gsi instead of before, and
+ 	with GSI_NEW_STMT.
+ 	(bswap_replace): Adjust callers.  When converting output of bswap,
+ 	emit VIEW_CONVERT prepratation stmts after a copy of gsi instead
+ 	of before it.
+ 
+ 2021-09-01  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* emit-rtl.c (validate_subreg): Get rid of all float-int
+ 	special cases.
+ 
+ 2021-09-01  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Revert:
+ 	2021-08-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* expmed.c (extract_bit_field_1): Make sure we're playing with
+ 	integral modes before call extract_integral_bit_field.
+ 	(extract_integral_bit_field): Add a parameter of type
+ 	scalar_int_mode which corresponds to of tmode.
+ 	And call extract_and_convert_fixed_bit_field instead of
+ 	extract_fixed_bit_field and convert_extracted_bit_field.
+ 	(extract_and_convert_fixed_bit_field): New function, it's a
+ 	combination of extract_fixed_bit_field and
+ 	convert_extracted_bit_field.
+ 
+ 2021-08-31  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* tree.c (walk_tree_1) <OMP_CLAUSE_TILE>: Handle three operands.
+ 
+ 2021-08-31  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* omp-general.h (omp_is_reference): Rename to...
+ 	(omp_privatize_by_reference): ... this.  Adjust all users...
+ 	* omp-general.c: ... here, ...
+ 	* gimplify.c: ... here, ...
+ 	* omp-expand.c: ... here, ...
+ 	* omp-low.c: ... here.
+ 
+ 2021-08-31  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* gimple-ssa-warn-access.cc (maybe_warn_alloc_args_overflow): Test
+ 	pointer element for equality to zero, not that of the cotaining
+ 	array.
+ 
+ 2021-08-31  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* gcc-rich-location.h (gcc_rich_location): Make ctor explicit.
+ 
+ 2021-08-31  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* function.h (function): Add comments.
+ 	(get_range_query): Same.  Add attribute returns nonnull.
+ 
+ 2021-08-31  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* expr.c (convert_modes): Don't use subreg_promoted_mode on a
+ 	SUBREG if it can't be guaranteed to a SUBREG_PROMOTED_VAR_P set.
+ 	Instead use the standard (safer) is_a <scalar_int_mode> idiom.
+ 
+ 2021-08-31  Jeff Law  <jlaw@localhost.localdomain>
+ 
+ 	* config.gcc (cris-*-elf, cris-*-none): Remove dbxelf.h from
+ 	tm_file.
+ 	(m32r-*-elf, m32rle-*-elf, m32r-*-linux): Likewise.
+ 	(mn10300-*-*, am33_2.0-*-linux*): Likewise.
+ 	(xtensa*-*-elf, xtensa*-*-linux, xtensa*-*-uclinux): Likewise.
+ 	(m32c-*-elf*, m32c-*-rtems*): Likewise.
+ 	* config/cris/cris.h (DBX_NO_XREFS): Remove.
+ 	(DBX_CONTIN_LENGTH, DBX_CONTIN_CHAR): Likewise.
+ 	* config/m32r/m32r.h (DBXOUT_SOURCE_LINE): Likewise.
+ 	(DBX_DEBUGGING_INFO, DBX_CONTIN_LENGTH): Likewise.
+ 	* config/mn10300/mn10300.h (DEFAULT_GDB_EXTENSIONS): Likewise.
+ 	* config/mn10300/linux.h (DBX_REGISTER_NAMES): Likewise.
+ 
+ 2021-08-31  Marcel Vollweiler  <marcel@codesourcery.com>
+ 
+ 	* gimplify.c (gimplify_scan_omp_clauses): Error handling. 'ancestor' only
+ 	allowed on target constructs and only with particular other clauses.
+ 	* omp-expand.c (expand_omp_target): Output of 'sorry, not supported' if
+ 	'ancestor' is used.
+ 	* omp-low.c (check_omp_nesting_restrictions): Error handling. No nested OpenMP
+ 	structs when 'ancestor' is used.
+ 	(scan_omp_1_stmt): No usage of OpenMP runtime routines in a target region when
+ 	'ancestor' is used.
+ 	* tree-pretty-print.c (dump_omp_clause): Append 'ancestor'.
+ 	* tree.h (OMP_CLAUSE_DEVICE_ANCESTOR): Define macro.
+ 
+ 2021-08-31  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* expr.c (convert_modes): Preserve SUBREG_PROMOTED_VAR_P when
+ 	creating a (wider) partial subreg from a SUBREG_PROMOTED_VAR_P
+ 	subreg.
+ 	* simplify-rtx.c (simplify_unary_operation_1) [SIGN_EXTEND]:
+ 	Likewise, preserve SUBREG_PROMOTED_VAR_P when creating a (wider)
+ 	partial subreg from a SUBREG_PROMOTED_VAR_P subreg.  Generate
+ 	SIGN_EXTEND of the SUBREG_REG when a subreg would be paradoxical.
+ 	[ZERO_EXTEND]: Likewise, preserve SUBREG_PROMOTED_VAR_P when
+ 	creating a (wider) partial subreg from a SUBREG_PROMOTED_VAR_P
+ 	subreg.  Generate ZERO_EXTEND of the SUBREG_REG when a subreg
+ 	would be paradoxical.
+ 
+ 2021-08-31  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* combine.c (combine_simplify_rtx): Avoid converting an explicit
+ 	TRUNCATE into a lowpart SUBREG on !TRULY_NOOP_TRUNCATION targets.
+ 	* simplify-rtx.c (simplify_unary_operation_1): Likewise.
+ 
+ 2021-08-31  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102142
+ 	* tree-vect-slp.c (vect_bb_vectorization_profitable_p): Fix
+ 	condition under which to unset the visited flag.
+ 
+ 2021-08-31  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/102129
+ 	* tree-ssa-ter.c (find_replaceable_in_bb): Do not move
+ 	possibly trapping expressions across calls.
+ 
+ 2021-08-31  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/102134
+ 	* tree-ssa-ccp.c (bit_value_binop) <case RSHIFT_EXPR>: If sgn is
+ 	UNSIGNED and r1val | r1mask has MSB set, ensure lzcount doesn't
+ 	become negative.
+ 
+ 2021-08-31  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR driver/79181
+ 	* collect-utils.c (setup_signals): New declaration.
+ 	* collect-utils.h (setup_signals): New function.
+ 	* collect2.c (handler): Delete.
+ 	(main): Instead of manually setting up the signals,
+ 	just call setup_signals.
+ 	* lto-wrapper.c (main): Likewise.
+ 
+ 2021-08-31  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR target/56337
+ 	* config/i386/i386-protos.h (x86_output_aligned_bss):
+ 	Change align argument to unsigned type.
+ 	(x86_elf_aligned_decl_common): Likewise.
+ 	* config/i386/i386.c (x86_elf_aligned_decl_common): Likewise.
+ 	(x86_output_aligned_bss): Likewise.
+ 
+ 2021-08-31  YunQiang Su  <yunqiang.su@cipunited.com>
+ 
+ 	* config/mips/mips.c (mips_module_isa_name): New.
+ 	  mips_file_start: add .module mipsREV to all asm output
+ 
+ 2021-08-31  YunQiang Su  <yunqiang.su@cipunited.com>
+ 
+ 	* config/mips/mips.h (struct mips_cpu_info): define enum mips_isa;
+ 	  use enum instead of int for 'isa' member.
+ 	* config.gcc, config/mips/mips.c, config/mips/mips-cpus.def,
+ 	  config/mips/netbsd.h: replace hardcoded numbers with enum.
+ 
+ 2021-08-31  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/sse.md (*<avx512>_ucmp<mode>3_1): Change from
+ 	define_split to define_insn_and_split.
+ 	(*avx2_eq<mode>3): Removed.
+ 	(<avx512>_eq<mode>3<mask_scalar_merge_name>): Adjust pattern
+ 	(<avx512>_eq<mode>3<mask_scalar_merge_name>_1): Rename to ..
+ 	(*<avx512>_eq<mode>3<mask_scalar_merge_name>_1): .. this, and
+ 	adjust pattern.
+ 	(*avx2_gt<mode>3): Removed.
+ 	(<avx512>_gt<mode>3<mask_scalar_merge_name>): Change from
+ 	define_insn to define_expand, and adjust pattern.
+ 	(UNSPEC_MASKED_EQ, UNSPEC_MASKED_GT): Removed.
+ 
+ 2021-08-30  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/99260
+ 	* Makefile.in (ANALYZER_OBJS): Add analyzer/call-info.o.
+ 
+ 2021-08-30  Jason Merrill  <jason@redhat.com>
+ 
+ 	* doc/invoke.texi: Document -Wmissing-requires.
+ 
+ 2021-08-30  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_init_builtins): Remove
+ 	TARGET_EXTRA_BUILTINS guard.
+ 
+ 2021-08-30  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_init_builtins): Change
+ 	initialization of V2DI_type_node and unsigned_V2DI_type_node.
+ 
+ 2021-08-30  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/darwin.h (SUBTARGET_INIT_BUILTINS): Use the new
+ 	decl when new_builtins_are_live.
+ 	* config/rs6000/rs6000-builtin-new.def (__builtin_cfstring): New
+ 	built-in.
+ 
+ 2021-08-30  Pat Haugen  <pthaugen@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-cpus.def (ISA_3_1_MASKS_SERVER): Add
+ 	OPTION_MASK_P10_FUSION_2STORE.
+ 	(POWERPC_MASKS): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_option_override_internal): Enable
+ 	store fusion for Power10.
+ 	(is_fusable_store): New.
+ 	(power10_sched_reorder): Likewise.
+ 	(rs6000_sched_reorder): Do Power10 specific reordering.
+ 	(rs6000_sched_reorder2): Likewise.
+ 	* config/rs6000/rs6000.opt: Add new option.
+ 
+ 2021-08-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102128
+ 	* tree-vect-slp.c (vect_bb_vectorization_profitable_p):
+ 	Move scanning for if-converted scalar code to the caller
+ 	and instead delay clearing the visited flag for profitable
+ 	subgraphs.
+ 	(vect_slp_region): Cost all subgraphs before scheduling.
+ 	For if-converted BB vectorization scan for scalar COND_EXPRs
+ 	and do not vectorize if any found and the cost model is
+ 	very-cheap.
+ 
+ 2021-08-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	* common.opt (fexceptions): Mark
+ 	EnabledBy(fnon-call-exceptions).
+ 	* doc/invoke.texi (fnon-call-exceptions): Document this
+ 	enables -fexceptions.
+ 
+ 2021-08-30  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	* tsystem.h (abort): Define abort() if inhibit_libc is defined and it
+ 	is not already defined.
+ 
+ 2021-08-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* expmed.c (extract_bit_field_1): Make sure we're playing with
+ 	integral modes before call extract_integral_bit_field.
+ 	(extract_integral_bit_field): Add a parameter of type
+ 	scalar_int_mode which corresponds to of tmode.
+ 	And call extract_and_convert_fixed_bit_field instead of
+ 	extract_fixed_bit_field and convert_extracted_bit_field.
+ 	(extract_and_convert_fixed_bit_field): New function, it's a
+ 	combination of extract_fixed_bit_field and
+ 	convert_extracted_bit_field.
+ 
+ 2021-08-29  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.c (darwin_libc_has_function): Do not run
+ 	the checks for x86 or modern Darwin.  Make sure that there
+ 	is a value set for darwin_macosx_version_min before testing.
+ 
+ 2021-08-29  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/i386/darwin.h (CLEAR_INSN_CACHE): New.
+ 
+ 2021-08-28  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.h (modref_access_node::merge): Break out
+ 	logic combining offsets and logic merging ranges to ...
+ 	(modref_access_node::combined_offsets): ... here
+ 	(modref_access_node::update2): ... here
+ 	(modref_access_node::closer_pair_p): New member function.
+ 	(modref_access_node::forced_merge): New member function.
+ 	(modre_ref_node::insert): Do merging when table is full.
+ 
+ 2021-08-28  YunQiang Su  <yunqiang.su@cipunited.com>
+ 
+ 	PR target/102089
+ 	* config.gcc: MIPS: use N64 ABI by default if the triple end
+ 	  with -gnuabi64, which is used by Debian since 2013.
+ 
+ 2021-08-28  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* ipa-modref.c (analyze_function): Skip debug stmts.
+ 	* tree-inline.c (estimate_num_insn): Consider builtins even
+ 	without a cgraph_node.
+ 
+ 2021-08-27  Jeff Law  <jlaw@localhost.localdomain>
+ 
+ 	* config/h8300/bitfield.md (cstore<mode>4): Remove expander.
+ 	* config/h8300/h8300.c (h8300_expand_branch): Remove function.
+ 	* config/h8300/h8300-protos.h (h8300_expadn_branch): Remove prototype.
+ 	* config/h8300/h8300.md (eqne): New code iterator.
+ 	(geultu, geultu_to_c): Similarly.
+ 	* config/h8300/testcompare.md (cstore<mode>4): Dummy expander.
+ 	(store_c_<mode>, store_c_i_<mode>): New define_insn_and_splits
+ 	(cmp<mode>_c): New pattern
+ 
+ 2021-08-27  Jeff Law  <jlaw@localhost.localdomain>
+ 
+ 	* tree-ssa-dom.c (reduce_vector_comparison_to_scalar_comparison): New
+ 	function.
+ 	(dom_opt_dom_walker::optimize_stmt): Use it.
+ 
+ 2021-08-27  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.c (finalize_ctors): Add a section-start linker-
+ 	visible symbol.
+ 	(finalize_dtors): Likewise.
+ 	* config/darwin.h (MIN_LD64_INIT_TERM_START_LABELS): New.
+ 
+ 2021-08-27  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000-builtins.h): New #include.
+ 	(rs6000_init_builtins): Call rs6000_init_generated_builtins.  Skip the
+ 	old initialization logic when new builtins are enabled.
+ 	* config/rs6000/rs6000-gen-builtins.c (write_decls): Rename
+ 	rs6000_autoinit_builtins to rs6000_init_generated_builtins.
+ 	(write_init_file): Likewise.
+ 
+ 2021-08-27  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* configure.ac (darwin2[[0-9]]* | darwin19*): Alter use of
+ 	gcc_GAS_CHECK_FEATURE to remove an extraneous parameter.
+ 	(amdgcn-* | gcn-*) Likewise.
+ 
+ 2021-08-27  Anthony Sharp  <anthonysharp15@gmail.com>
+ 
+ 	* symbol-summary.h: Added missing template keyword.
+ 
+ 2021-08-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/45178
+ 	* tree-ssa-dce.c (find_obviously_necessary_stmts): For
+ 	infinite loops without exit do not mark control dependent
+ 	edges of the latch necessary.
+ 
+ 2021-08-27  konglin1  <lingling.kong@intel.com>
+ 
+ 	PR target/101472
+ 	* config/i386/sse.md: (<avx512>scattersi<mode>): Add mask operand to
+ 	UNSPEC_VSIBADDR.
+ 	(<avx512>scattersi<mode>): Likewise.
+ 	(*avx512f_scattersi<VI48F:mode>): Merge mask operand to set_dest.
+ 	(*avx512f_scatterdi<VI48F:mode>): Likewise
+ 
+ 2021-08-27  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_builtin_md_vectorized_function): Add
+ 	support for built-in functions MISC_BUILTIN_DIVWE, MISC_BUILTIN_DIVWEU,
+ 	MISC_BUILTIN_DIVDE, MISC_BUILTIN_DIVDEU, P10_BUILTIN_CFUGED,
+ 	P10_BUILTIN_CNTLZDM, P10_BUILTIN_CNTTZDM, P10_BUILTIN_PDEPD and
+ 	P10_BUILTIN_PEXTD on Power10.
+ 
+ 2021-08-27  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (builtin_function_type): Add unsigned
+ 	signedness for some Power10 bifs.
+ 
+ 2021-08-27  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	PR target/102068
+ 	* config/rs6000/rs6000.c (rs6000_adjust_field_align): Use
+ 	computed alignment if the entire struct has attribute packed.
+ 
+ 2021-08-27  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/98167
+ 	PR target/43147
+ 	* config/i386/i386.c (ix86_gimple_fold_builtin): Fold
+ 	IX86_BUILTIN_SHUFPD512, IX86_BUILTIN_SHUFPS512,
+ 	IX86_BUILTIN_SHUFPD256， IX86_BUILTIN_SHUFPS，
+ 	IX86_BUILTIN_SHUFPS256.
+ 	(ix86_masked_all_ones): New function.
+ 
+ 2021-08-26  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.md (*btr<mode>_1): Call force_reg unconditionally.
+ 	(conditional moves with memory inputs splitters): Ditto.
+ 	* config/i386/sse.md (one_cmpl<mode>2): Simplify.
+ 
+ 2021-08-26  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.h (modref_access_node::try_merge_with): Restart
+ 	search after merging.
+ 
+ 2021-08-26  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-overload.def: Add remaining overloads.
+ 
+ 2021-08-26  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: Add cell stanza.
+ 
+ 2021-08-26  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: Add ieee128-hw, dfp,
+ 	crypto, and htm stanzas.
+ 
+ 2021-08-26  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: Add mma stanza.
+ 
+ 2021-08-26  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* tree-ssa-uninit.c (warn_uninit): Refactor and simplify.
+ 	(warn_uninit_phi_uses): Remove argument from calls to warn_uninit.
+ 	(warn_uninitialized_vars): Same.  Reduce visibility of locals.
+ 	(warn_uninitialized_phi): Same.
+ 
+ 2021-08-26  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* tree-ssa-ccp.c (get_individual_bits): Helper function to
+ 	extract the individual bits from a widest_int constant (mask).
+ 	(gray_code_bit_flips): New read-only table for effiently
+ 	enumerating permutations/combinations of bits.
+ 	(bit_value_binop) [LROTATE_EXPR, RROTATE_EXPR]: Handle rotates
+ 	by unknown counts that are guaranteed less than the target
+ 	precision and four or fewer unknown bits by enumeration.
+ 	[LSHIFT_EXPR, RSHIFT_EXPR]: Likewise, also handle shifts by
+ 	enumeration under the same conditions.  Handle remaining
+ 	shifts as a mask based upon the minimum possible shift value.
+ 
+ 2021-08-26  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	* match.pd (shift transformations): Remove a redundant
+ 	!POINTER_TYPE_P check.
+ 
+ 2021-08-26  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/102057
+ 	* config/i386/i386.md (cmove reg-reg move elimination peephole2s):
+ 	Set all_regs to true in the call to replace_rtx.
+ 
+ 2021-08-26  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.c (test_insert_search_collapse): Update test.
+ 	* ipa-modref-tree.h (modref_base_node::insert): Be smarter when
+ 	hiting --param modref-max-refs limit.
+ 	(modref_tree:insert_base): Be smarter when hitting
+ 	--param modref-max-bases limit. Add new parameter REF.
+ 	(modref_tree:insert): Update.
+ 	(modref_tree:merge): Update.
+ 	* ipa-modref.c (read_modref_records): Update.
+ 
+ 2021-08-26  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* params.opt: (modref-max-adjustments): Add full stop.
+ 
+ 2021-08-26  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.h (modref_ref_node::verify): New member
+ 	functoin.
+ 	(modref_ref_node::insert): Use it.
+ 	(modref_ref_node::try_mere_with): Fix off by one error.
+ 
+ 2021-08-26  Martin Liska  <mliska@suse.cz>
+ 	    Stefan Kneifel  <stefan.kneifel@bluewin.ch>
+ 
+ 	* cgraph.h (create_version_clone_with_body): Add new parameter.
+ 	* cgraphclones.c: Likewise.
+ 	* multiple_target.c (create_dispatcher_calls): Do not use
+ 	numbered suffixes.
+ 	(create_target_clone): Likewise here.
+ 
+ 2021-08-26  Jonathan Yong  <10walls@gmail.com>
+ 
+ 	* doc/extend.texi: Add note about reserved priorities
+ 	to the constructor attribute.
+ 
+ 2021-08-25  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ssa_global_cache::dump): Avoid printing
+ 	range table header alone.
+ 	* gimple-range.cc (gimple_ranger::export_global_ranges): Same.
+ 
+ 2021-08-25  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* doc/invoke.texi: Document --param modref-max-adjustments.
+ 	* ipa-modref-tree.c (test_insert_search_collapse): Update.
+ 	(test_merge): Update.
+ 	* ipa-modref-tree.h (struct modref_access_node): Add adjustments;
+ 	(modref_access_node::operator==): Fix handling of access ranges.
+ 	(modref_access_node::contains): Constify parameter; handle also
+ 	mismatched parm offsets.
+ 	(modref_access_node::update): New function.
+ 	(modref_access_node::merge): New function.
+ 	(unspecified_modref_access_node): Update constructor.
+ 	(modref_ref_node::insert_access): Add record_adjustments parameter;
+ 	handle merging.
+ 	(modref_ref_node::try_merge_with): New private function.
+ 	(modref_tree::insert): New record_adjustments parameter.
+ 	(modref_tree::merge): New record_adjustments parameter.
+ 	(modref_tree::copy_from): Update.
+ 	* ipa-modref.c (dump_access): Dump adjustments field.
+ 	(get_access): Update constructor.
+ 	(record_access): Update call of insert.
+ 	(record_access_lto): Update call of insert.
+ 	(merge_call_side_effects): Add record_adjustments parameter.
+ 	(get_access_for_fnspec): Update.
+ 	(process_fnspec): Update.
+ 	(analyze_call): Update.
+ 	(analyze_function): Update.
+ 	(read_modref_records): Update.
+ 	(ipa_merge_modref_summary_after_inlining): Update.
+ 	(propagate_unknown_call): Update.
+ 	(modref_propagate_in_scc): Update.
+ 	* params.opt (param-max-modref-adjustments=): New.
+ 
+ 2021-08-25  Michael Meissner  <meissner@linux.ibm.com>
+ 
+ 	* config/rs6000/vsx.md (UNSPEC_XXSPLTIDP): Rename from
+ 	UNSPEC_XXSPLTID.
+ 	(xxspltiw_v4si): Use vecperm type attribute.
+ 	(xxspltiw_v4si_inst): Use vecperm type attribute.
+ 	(xxspltiw_v4sf_inst): Likewise.
+ 	(xxspltidp_v2df): Use vecperm type attribute.  Use
+ 	UNSPEC_XXSPLTIDP instead of UNSPEC_XXSPLTID.
+ 	(xxspltidp_v2df_inst): Likewise.
+ 	(xxsplti32dx_v4si): Use vecperm type attribute.
+ 	(xxsplti32dx_v4si_inst): Likewise.
+ 	(xxsplti32dx_v4sf_inst): Likewise.
+ 	(xxblend_<mode>): Likewise.
+ 	(xxpermx): Likewise.
+ 	(xxpermx_inst): Likewise.
+ 	(xxeval): Likewise.
+ 
+ 2021-08-25  Lewis Hyatt  <lhyatt@gmail.com>
+ 
+ 	PR other/93067
+ 	* coretypes.h (typedef diagnostic_input_charset_callback): Declare.
+ 	* diagnostic.c (diagnostic_initialize_input_context): New function.
+ 	* diagnostic.h (diagnostic_initialize_input_context): Declare.
+ 	* input.c (default_charset_callback): New function.
+ 	(file_cache::initialize_input_context): New function.
+ 	(file_cache_slot::create): Added ability to convert the input
+ 	according to the input context.
+ 	(file_cache::file_cache): Initialize the new input context.
+ 	(class file_cache_slot): Added new m_alloc_offset member.
+ 	(file_cache_slot::file_cache_slot): Initialize the new member.
+ 	(file_cache_slot::~file_cache_slot): Handle potentially offset buffer.
+ 	(file_cache_slot::maybe_grow): Likewise.
+ 	(file_cache_slot::needs_read_p): Handle NULL fp, which is now possible.
+ 	(file_cache_slot::get_next_line): Likewise.
+ 	* input.h (class file_cache): Added input context member.
+ 
+ 2021-08-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/102046
+ 	* tree-vect-slp.c (vect_build_slp_tree_2): Conservatively
+ 	update ->any_pattern when swapping operands.
+ 
+ 2021-08-25  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	PR target/101716
+ 	* config/i386/i386.c (ix86_live_on_entry): Adjust comment.
+ 	(ix86_decompose_address): Remove retval check for ASHIFT,
+ 	allow non-canonical zero extend if AND mask covers ASHIFT
+ 	count.
+ 	(ix86_legitimate_address_p): Adjust condition for decompose.
+ 	(ix86_rtx_costs): Adjust cost for lea with non-canonical
+ 	zero-extend.
+ 	Co-Authored by: Uros Bizjak <ubizjak@gmail.com>
+ 
+ 2021-08-25  Jiufu Guo  <guojiufu@linux.ibm.com>
+ 
+ 	PR tree-optimization/101145
+ 	* tree-ssa-loop-niter.c (number_of_iterations_until_wrap):
+ 	New function.
+ 	(number_of_iterations_lt): Invoke above function.
+ 	(adjust_cond_for_loop_until_wrap):
+ 	Merge to number_of_iterations_until_wrap.
+ 	(number_of_iterations_cond): Update invokes for
+ 	adjust_cond_for_loop_until_wrap and number_of_iterations_lt.
+ 
+ 2021-08-25  konglin1  <lingling.kong@intel.com>
+ 
+ 	PR target/101471
+ 	* config/i386/avx512dqintrin.h (_mm512_fpclass_ps_mask): Fix
+ 	macro define in O0.
+ 	(_mm512_mask_fpclass_ps_mask): Ditto.
+ 
+ 2021-08-25  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/altivec.md (vec_unpacku_hi_v16qi): Remove.
+ 	(vec_unpacku_hi_v8hi): Likewise.
+ 	(vec_unpacku_lo_v16qi): Likewise.
+ 	(vec_unpacku_lo_v8hi): Likewise.
+ 	(vec_unpacku_hi_<VP_small_lc>): New define_expand.
+ 	(vec_unpacku_lo_<VP_small_lc>): Likewise.
+ 
+ 2021-08-24  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/aix.h (SYSTEM_IMPLICIT_EXTERN_C): Delete.
+ 	* config/rs6000/aix71.h (SYSTEM_IMPLICIT_EXTERN_C): Define.
+ 	* config/rs6000/aix72.h (SYSTEM_IMPLICIT_EXTERN_C): Define.
+ 	* config/rs6000/aix73.h (TARGET_AIX_VERSION): Increase to 73.
+ 
+ 2021-08-24  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR middle-end/102031
+ 	* simplify-rtx.c (simplify_truncation): When comparing precisions
+ 	use "subreg_prec" variable, not "subreg_mode".
+ 
+ 2021-08-24  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: Add power10 and power10-64
+ 	stanzas.
+ 
+ 2021-08-24  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_init_builtins): Initialize
+ 	various pointer type nodes.
+ 	* config/rs6000/rs6000.h (rs6000_builtin_type_index): Add enum
+ 	values for various pointer types.
+ 	(ptr_V16QI_type_node): New macro.
+ 	(ptr_V1TI_type_node): New macro.
+ 	(ptr_V2DI_type_node): New macro.
+ 	(ptr_V2DF_type_node): New macro.
+ 	(ptr_V4SI_type_node): New macro.
+ 	(ptr_V4SF_type_node): New macro.
+ 	(ptr_V8HI_type_node): New macro.
+ 	(ptr_unsigned_V16QI_type_node): New macro.
+ 	(ptr_unsigned_V1TI_type_node): New macro.
+ 	(ptr_unsigned_V8HI_type_node): New macro.
+ 	(ptr_unsigned_V4SI_type_node): New macro.
+ 	(ptr_unsigned_V2DI_type_node): New macro.
+ 	(ptr_bool_V16QI_type_node): New macro.
+ 	(ptr_bool_V8HI_type_node): New macro.
+ 	(ptr_bool_V4SI_type_node): New macro.
+ 	(ptr_bool_V2DI_type_node): New macro.
+ 	(ptr_bool_V1TI_type_node): New macro.
+ 	(ptr_pixel_type_node): New macro.
+ 	(ptr_intQI_type_node): New macro.
+ 	(ptr_uintQI_type_node): New macro.
+ 	(ptr_intHI_type_node): New macro.
+ 	(ptr_uintHI_type_node): New macro.
+ 	(ptr_intSI_type_node): New macro.
+ 	(ptr_uintSI_type_node): New macro.
+ 	(ptr_intDI_type_node): New macro.
+ 	(ptr_uintDI_type_node): New macro.
+ 	(ptr_intTI_type_node): New macro.
+ 	(ptr_uintTI_type_node): New macro.
+ 	(ptr_long_integer_type_node): New macro.
+ 	(ptr_long_unsigned_type_node): New macro.
+ 	(ptr_float_type_node): New macro.
+ 	(ptr_double_type_node): New macro.
+ 	(ptr_long_double_type_node): New macro.
+ 	(ptr_dfloat64_type_node): New macro.
+ 	(ptr_dfloat128_type_node): New macro.
+ 	(ptr_ieee128_type_node): New macro.
+ 	(ptr_ibm128_type_node): New macro.
+ 	(ptr_vector_pair_type_node): New macro.
+ 	(ptr_vector_quad_type_node): New macro.
+ 	(ptr_long_long_integer_type_node): New macro.
+ 	(ptr_long_long_unsigned_type_node): New macro.
+ 
+ 2021-08-24  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: Add power9-vector, power9,
+ 	and power9-64 stanzas.
+ 
+ 2021-08-24  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Tom de Vries  <tdevries@suse.de>
+ 
+ 	* config.gcc (nvptx-*-*): Define {c,c++}_target_objs.
+ 	* config/nvptx/nvptx-protos.h (nvptx_cpu_cpp_builtins): Prototype.
+ 	* config/nvptx/nvptx.h (TARGET_CPU_CPP_BUILTINS): Implement with
+ 	a call to the new nvptx_cpu_cpp_builtins function in nvptx-c.c.
+ 	* config/nvptx/t-nvptx (nvptx-c.o): New rule.
+ 	* config/nvptx/nvptx-c.c: New source file.
+ 	(nvptx_cpu_cpp_builtins): Move implementation here.
+ 
+ 2021-08-24  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/101600
+ 	PR middle-end/101977
+ 	* gimple-ssa-warn-access.cc (maybe_warn_for_bound): Tighten up
+ 	the phrasing of a warning.
+ 	(check_access): Use the remaining size after subtracting any offset
+ 	rather than the whole object size.
+ 	* pointer-query.cc (access_ref::get_ref): Clear BASE0 flag if it's
+ 	clear for any nonnull PHI argument.
+ 	(compute_objsize): Clear argument.
+ 
+ 2021-08-24  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: Add power8-vector stanza.
+ 
+ 2021-08-24  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: Add power7 and power7-64
+ 	stanzas.
+ 
+ 2021-08-24  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-relation.cc (rr_transitive_table): New.
+ 	(relation_transitive): New.
+ 	(value_relation::swap): Remove.
+ 	(value_relation::apply_transitive): New.
+ 	(relation_oracle::relation_oracle): Allocate a new tmp bitmap.
+ 	(relation_oracle::register_relation): Call register_transitives.
+ 	(relation_oracle::register_transitives): New.
+ 	* value-relation.h (relation_oracle): Add new temporary bitmap and
+ 	methods.
+ 
+ 2021-08-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/102021
+ 	* config/i386/i386-expand.c (ix86_expand_vector_move): Broadcast
+ 	from integer to a pseudo vector register.
+ 
+ 2021-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100089
+ 	* tree-vectorizer.h (vect_slp_bb): Rename to ...
+ 	(vect_slp_if_converted_bb): ... this and get the original
+ 	loop as new argument.
+ 	* tree-vectorizer.c (try_vectorize_loop_1): Revert previous fix,
+ 	pass original loop to vect_slp_if_converted_bb.
+ 	* tree-vect-slp.c (vect_bb_vectorization_profitable_p):
+ 	If orig_loop was passed scan the not vectorized stmts
+ 	for COND_EXPRs and force not profitable if found.
+ 	(vect_slp_region): Pass down all SLP instances to costing
+ 	if orig_loop was specified.
+ 	(vect_slp_bbs): Pass through orig_loop.
+ 	(vect_slp_bb): Rename to ...
+ 	(vect_slp_if_converted_bb): ... this and get the original
+ 	loop as new argument.
+ 	(vect_slp_function): Adjust.
+ 
+ 2021-08-24  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/102035
+ 	* config/arm/arm.md (attribute arch): Add fix_vlldm.
+ 	(arch_enabled): Use it.
+ 	* config/arm/vfp.md (lazy_store_multiple_insn): Add alternative to
+ 	use when erratum mitigation is needed.
+ 
+ 2021-08-24  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/102035
+ 	* config/arm/arm.opt (mfix-cmse-cve-2021-35465): New option.
+ 	* doc/invoke.texi (Arm Options): Document it.
+ 	* config/arm/arm-cpus.in (quirk_vlldm): New feature bit.
+ 	(ALL_QUIRKS): Add quirk_vlldm.
+ 	(cortex-m33): Add quirk_vlldm.
+ 	(cortex-m35p, cortex-m55): Likewise.
+ 	* config/arm/arm.c (arm_option_override): Enable fix_vlldm if
+ 	targetting an affected CPU and not explicitly controlled on
+ 	the command line.
+ 
+ 2021-08-24  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* config/arm/vfp.md (lazy_store_multiple_insn): Rewrite as valid RTL.
+ 	(lazy_load_multiple_insn): Likewise.
+ 
+ 2021-08-24  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/101989
+ 	* config/i386/sse.md (<avx512>_vternlog<mode><sd_maskz_name>):
+ 	Enable avx512 embedded broadcast.
+ 	(*<avx512>_vternlog<mode>_all): Ditto.
+ 	(<avx512>_vternlog<mode>_mask): Ditto.
+ 
+ 2021-08-24  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/101989
+ 	* config/i386/i386.c (ix86_rtx_costs): Define cost for
+ 	UNSPEC_VTERNLOG.
+ 	* config/i386/i386.h (STRIP_UNARY): New macro.
+ 	* config/i386/predicates.md (reg_or_notreg_operand): New
+ 	predicate.
+ 	* config/i386/sse.md (*<avx512>_vternlog<mode>_all): New define_insn.
+ 	(*<avx512>_vternlog<mode>_1): New pre_reload
+ 	define_insn_and_split.
+ 	(*<avx512>_vternlog<mode>_2): Ditto.
+ 	(*<avx512>_vternlog<mode>_3): Ditto.
+ 	(any_logic1,any_logic2): New code iterator.
+ 	(logic_op): New code attribute.
+ 	(ternlogsuffix): Extend to VNxDF and VNxSF.
+ 
+ 2021-08-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	* doc/invoke.texi (vect-inner-loop-cost-factor): Adjust.
+ 	* params.opt (--param vect-inner-loop-cost-factor): Adjust
+ 	maximum value.
+ 	* tree-vect-loop.c (vect_analyze_loop_form): Initialize
+ 	inner_loop_cost_factor to the minimum of the estimated number
+ 	of iterations of the inner loop and vect-inner-loop-cost-factor.
+ 
+ 2021-08-24  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/i386-features.c (compute_convert_gain): Provide
+ 	more accurate values for CONST_INT, when optimizing for size.
+ 	* config/i386/i386.c (COSTS_N_BYTES): Move definition from here...
+ 	* config/i386/i386.h (COSTS_N_BYTES): to here.
+ 
+ 2021-08-24  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/102029
+ 	* match.pd (shift transformations): Add an additional check for
+ 	!POINTER_TYPE_P in the recently added left shift transformation.
+ 
+ 2021-08-24  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR tree-optimization/100089
+ 	* tree-vectorizer.c (try_vectorize_loop_1): Disable slp in
+ 	loop vectorizer when cost model is very-cheap.
+ 
+ 2021-08-23  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (parse_bif_entry): Don't call
+ 	asprintf, which is not available on AIX.
+ 
+ 2021-08-23  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config.gcc (target_gtfiles): Add ./rs6000-builtins.h.
+ 	* config/rs6000/t-rs6000 (EXTRA_GTYPE_DEPS): Set.
+ 
+ 2021-08-23  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config.gcc (powerpc*-*-*): Add rs6000-builtins.o to extra_objs.
+ 	* config/rs6000/rs6000-gen-builtins.c (main): Close init_file
+ 	last.
+ 	* config/rs6000/t-rs6000 (rs6000-gen-builtins.o): New target.
+ 	(rbtree.o): Likewise.
+ 	(rs6000-gen-builtins): Likewise.
+ 	(rs6000-builtins.c): Likewise.
+ 	(rs6000-builtins.h): Likewise.
+ 	(rs6000.o): Add dependency.
+ 	(EXTRA_HEADERS): Add rs6000-vecdefines.h.
+ 	(rs6000-vecdefines.h): New target.
+ 	(rs6000-builtins.o): Likewise.
+ 	(rs6000-call.o): Add rs6000-builtins.h as a dependency.
+ 	(rs6000-c.o): Likewise.
+ 
+ 2021-08-23  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	PR target/101830
+ 	* config/rs6000/rs6000-gen-builtins.c (consume_whitespace):
+ 	Diagnose buffer overrun.
+ 	(safe_inc_pos): Fix overrun detection.
+ 	(match_identifier): Diagnose buffer overrun.
+ 	(match_integer): Likewise.
+ 	(match_to_right_bracket): Likewise.
+ 
+ 2021-08-23  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref-tree.h (modref_access_node::range_info_useful_p):
+ 	Improve range compare.
+ 	(modref_access_node::contains): New member function.
+ 	(modref_access_node::search): Remove.
+ 	(modref_access_node::insert): Be smarter about subaccesses.
+ 
+ 2021-08-23  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* config/i386/i386-options.c (ix86_omp_device_kind_arch_isa)
+ 	<omp_device_arch> [ACCEL_COMPILER]: Match "intel_mic".
+ 	* config/i386/t-omp-device (omp-device-properties-i386) <arch>:
+ 	Add "intel_mic".
+ 
+ 2021-08-23  Jeff Law  <jlaw@localhost.localdomain>
+ 
+ 	* config/h8300/h8300-protos.h (h8300_expand_epilogue): Add new
+ 	argument.
+ 	* config/h8300/jumpcall.md (call, call_value): Restrict to
+ 	!SIBLING_CALL_P cases.
+ 	(subcall, sibcall_value): New patterns & expanders.
+ 	* config/h8300/proepi.md (epilogue): Pass new argument to
+ 	h8300_expand_epilogue.
+ 	(sibcall_epilogue): New expander.
+ 	* config/h8300/h8300.c (h8300_expand_epilogue): Handle sibcall
+ 	epilogues too.
+ 	(h8300_ok_for_sibcall_p): New function.
+ 	(TARGET_FUNCTION_OK_FOR_SIBCALL): define.
+ 
+ 2021-08-23  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* simplify-rtx.c (simplify_unary_operation_1): [TRUNCATE]:
+ 	Handle case where the operand is already the desired mode.
+ 
+ 2021-08-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/97565
+ 	* tree-ssa-structalias.c (ipa_pta_execute): Check in_other_partition
+ 	in addition to has_gimple_body.
+ 
+ 2021-08-23  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR middle-end/101949
+ 	* ipa-modref.c (analyze_ssa_name_flags): Fix merging of
+ 	EAF_NOCLOBBER
+ 
+ 2021-08-23  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Put the option out of -mxl-mode-app-model
+ 	table.
+ 
+ 2021-08-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-loop.c (vect_compute_single_scalar_iteration_cost):
+ 	Properly scale the inner loop cost only once.
+ 
+ 2021-08-23  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* tree-ssa-ccp.c (bit_value_binop) [TRUNC_MOD_EXPR, TRUNC_DIV_EXPR]:
+ 	Provide bounds for unsigned (and signed with non-negative operands)
+ 	division and modulus.
+ 
+ 2021-08-23  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* simplify-rtx.c (simplify_truncation): Generalize simplification
+ 	of (truncate:A (subreg:B X)).
+ 	(simplify_unary_operation_1) [FLOAT_TRUNCATE, FLOAT_EXTEND,
+ 	SIGN_EXTEND, ZERO_EXTEND]: Handle cases where the operand
+ 	already has the desired machine mode.
+ 	(test_scalar_int_ops): Add tests that useless extensions and
+ 	truncations are optimized away.
+ 	(test_scalar_int_ext_ops): New self-test function to confirm
+ 	that truncations of extensions are correctly simplified.
+ 	(test_scalar_int_ext_ops2): New self-test function to check
+ 	truncations of truncations, extensions of extensions, and
+ 	truncations of extensions.
+ 	(test_scalar_ops): Call the above two functions with a
+ 	representative sampling of integer machine modes.
+ 
+ 2021-08-23  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* match.pd (shift transformations): Change the sign of an
+ 	LSHIFT_EXPR if it reduces the number of explicit conversions.
+ 
+ 2021-08-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/86723
+ 	* gimple-ssa-store-merging.c (find_bswap_or_nop_finalize): Add
+ 	cast64_to_32 argument, set *cast64_to_32 to false, unless n is
+ 	non-memory permutation of 64-bit src which only has bytes of
+ 	0 or [5..8] and n->range is 4.
+ 	(find_bswap_or_nop): Add cast64_to_32 and mask arguments, adjust
+ 	find_bswap_or_nop_finalize caller, support bswap with some bytes
+ 	zeroed, as long as at least two bytes are not zeroed.
+ 	(bswap_replace): Add mask argument and handle masking of bswap
+ 	result.
+ 	(maybe_optimize_vector_constructor): Adjust find_bswap_or_nop
+ 	caller, punt if cast64_to_32 or mask is not all ones.
+ 	(pass_optimize_bswap::execute): Adjust find_bswap_or_nop_finalize
+ 	caller, for now punt if cast64_to_32.
+ 
+ 2021-08-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/79334
+ 	* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Record
+ 	a type also for COMPONENT_REFs.
+ 	(vn_reference_may_trap): Check ARRAY_REF with constant index
+ 	against the array domain.
+ 
+ 2021-08-23  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/102016
+ 	* config/i386/sse.md (*avx512f_pshufb_truncv8hiv8qi_1): Add
+ 	TARGET_AVX512BW to condition.
+ 
+ 2021-08-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/101905
+ 	* dwarf2out.c (gen_variable_die): Add DW_AT_location for global
+ 	register variables already during early_dwarf if possible.
+ 
+ 2021-08-23  Christophe Lyon  <christophe.lyon@foss.st.com>
+ 
+ 	* config/arm/arm_mve.h: Fix __arm_vctp16q return type.
+ 
+ 2021-08-23  Christophe Lyon  <christophe.lyon@foss.st.com>
+ 
+ 	PR target/100856
+ 	* config/arm/arm.opt: Fix typo.
+ 	* config/arm/t-rmprofile: Fix typo.
+ 
+ 2021-08-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree.h (OMP_CLAUSE_GRAINSIZE_STRICT): Define.
+ 	(OMP_CLAUSE_NUM_TASKS_STRICT): Define.
+ 	* tree-pretty-print.c (dump_omp_clause) <case OMP_CLAUSE_GRAINSIZE,
+ 	case OMP_CLAUSE_NUM_TASKS>: Print strict: modifier.
+ 	* omp-expand.c (expand_task_call): Use GOMP_TASK_FLAG_STRICT in iflags
+ 	if either grainsize or num_tasks clause has the strict modifier.
+ 
+ 2021-08-23  Martin Liska  <mliska@suse.cz>
+ 
+ 	* dbgcnt.def (DEBUG_COUNTER): New counter.
+ 	* gimple.c (gimple_call_arg_flags): Use it in IPA PTA.
+ 
+ 2021-08-23  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (analyze_ssa_name_flags): Improve handling of return slot.
+ 
+ 2021-08-23  Xi Ruoyao  <xry111@mengyan1223.wang>
+ 
+ 	PR target/101922
+ 	* config/mips/mips-protos.h (mips_msa_output_shift_immediate):
+ 	  Declare.
+ 	* config/mips/mips.c (mips_msa_output_shift_immediate): New
+ 	  function.
+ 	* config/mips/mips-msa.md (vashl<mode>3, vashr<mode>3,
+ 	  vlshr<mode>3): Call it.
+ 
+ 2021-08-22  Jan Hubicka  <hubicka@ucw.cz>
+ 	    Martin Liska  <mliska@suse.cz>
+ 
+ 	PR middle-end/101949
+ 	* ipa-modref.c (analyze_ssa_name_flags): Indirect call implies
+ 	~EAF_NOCLOBBER.
+ 
+ 2021-08-21  Dragan Mladjenovic  <OT_Dragan.Mladjenovic@mediatek.com>
+ 
+ 	* config/mips/mips.c (mips_function_rodata_section,
+ 	TARGET_ASM_FUNCTION_RODATA_SECTION): Removed.
+ 
+ 2021-08-21  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa.c (pa_asm_output_aligned_common): Remove warning.
+ 
+ 2021-08-20  Serge Belyshev  <belyshev@depni.sinp.msu.ru>
+ 
+ 	* configure.ac (thread-local storage support): Remove tls_first_major
+ 	and tls_first_minor.  Use "$conftest_s" to check support.
+ 	* configure: Regenerate.
+ 
+ 2021-08-20  Serge Belyshev  <belyshev@depni.sinp.msu.ru>
+ 
+ 	* configure.ac: Fixup formatting.
+ 
+ 2021-08-20  Serge Belyshev  <belyshev@depni.sinp.msu.ru>
+ 
+ 	* acinclude.m4 (gcc_GAS_CHECK_FEATURE): Remove third argument and ...
+ 	* configure.ac: ... update all callers.
+ 
+ 2021-08-20  Serge Belyshev  <belyshev@depni.sinp.msu.ru>
+ 
+ 	PR target/91602
+ 	* acinclude.m4 (_gcc_COMPUTE_GAS_VERSION, _gcc_GAS_VERSION_GTE_IFELSE)
+ 	(gcc_GAS_VERSION_GTE_IFELSE): Remove.
+ 	(gcc_GAS_CHECK_FEATURE): Do not handle in-tree case specially.
+ 	* configure.ac: Remove gcc_cv_gas_major_version, gcc_cv_gas_minor_version.
+ 	Remove remaining checks for in-tree assembler.
+ 	* configure: Regenerate.
+ 
+ 2021-08-20  Jeff Law  <jlaw@localhost.localdomain>
+ 
+ 	* config/h8300/h8300.c (shift_alg_hi): Improve arithmetic shift right
+ 	by 15 bits for H8/300H and H8/S.  Improve logical shifts by 12
+ 	bits for H8/S.
+ 	(shift_alg_si): Improve arithmetic right shift by 28-30 bits for
+ 	H8/300H.  Improve arithmetic shift right by 15 bits for H8/S.
+ 	Improve logical shifts by 27 bits for H8/S.
+ 	(get_shift_alg): Corresponding changes.
+ 	(h8300_option_override): Revert to loops for -Os when profitable.
+ 
+ 2021-08-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-data-refs.c (dr_group_sort_cmp): Do not compare
+ 	BBs.
+ 	(vect_analyze_data_ref_accesses): Likewise.  Assign the BB
+ 	index as group_id when dataref_groups were not computed.
+ 	* tree-vect-slp.c (vect_slp_bbs): Bump current_group when
+ 	we advace to the next BB.
+ 
+ 2021-08-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* omp-builtins.def (BUILT_IN_GOMP_WARNING, BUILT_IN_GOMP_ERROR): New
+ 	builtins.
+ 
+ 2021-08-20  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR gcov-profile/89961
+ 	* gcov.c (make_gcov_file_name): Rewrite using std::string.
+ 	(mangle_name): Simplify, do not used the second argument.
+ 	(strip_extention): New function.
+ 	(get_md5sum): Likewise.
+ 	(get_gcov_intermediate_filename): Handle properly -p and -x
+ 	options.
+ 	(output_gcov_file): Use string type.
+ 	(generate_results): Likewise.
+ 	(md5sum_to_hex): Remove.
+ 
+ 2021-08-20  Michael Meissner  <meissner@linux.ibm.com>
+ 
+ 	* config/rs6000/altivec.md (UNSPEC_XXEVAL): Move to vsx.md.
+ 	(UNSPEC_XXSPLTIW): Move to vsx.md.
+ 	(UNSPEC_XXSPLTID): Move to vsx.md.
+ 	(UNSPEC_XXSPLTI32DX): Move to vsx.md.
+ 	(UNSPEC_XXBLEND): Move to vsx.md.
+ 	(UNSPEC_XXPERMX): Move to vsx.md.
+ 	(VM3): Move to vsx.md.
+ 	(VM3_char): Move to vsx.md.
+ 	(xxspltiw_v4si): Move to vsx.md.
+ 	(xxspltiw_v4sf): Move to vsx.md.
+ 	(xxspltiw_v4sf_inst): Move to vsx.md.
+ 	(xxspltidp_v2df): Move to vsx.md.
+ 	(xxspltidp_v2df_inst): Move to vsx.md.
+ 	(xxsplti32dx_v4si_inst): Move to vsx.md.
+ 	(xxsplti32dx_v4sf): Move to vsx.md.
+ 	(xxsplti32dx_v4sf_inst): Move to vsx.md.
+ 	(xxblend_<mode>): Move to vsx.md.
+ 	(xxpermx): Move to vsx.md.
+ 	(xxpermx_inst): Move to vsx.md.
+ 	* config/rs6000/vsx.md (UNSPEC_XXEVAL): Move from altivec.md.
+ 	(UNSPEC_XXSPLTIW): Move from altivec.md.
+ 	(UNSPEC_XXSPLTID): Move from altivec.md.
+ 	(UNSPEC_XXSPLTI32DX): Move from altivec.md.
+ 	(UNSPEC_XXBLEND): Move from altivec.md.
+ 	(UNSPEC_XXPERMX): Move from altivec.md.
+ 	(VM3): Move from altivec.md.
+ 	(VM3_char): Move from altivec.md.
+ 	(xxspltiw_v4si): Move from altivec.md.
+ 	(xxspltiw_v4sf): Move from altivec.md.
+ 	(xxspltiw_v4sf_inst): Move from altivec.md.
+ 	(xxspltidp_v2df): Move from altivec.md.
+ 	(xxspltidp_v2df_inst): Move from altivec.md.
+ 	(xxsplti32dx_v4si_inst): Move from altivec.md.
+ 	(xxsplti32dx_v4sf): Move from altivec.md.
+ 	(xxsplti32dx_v4sf_inst): Move from altivec.md.
+ 	(xxblend_<mode>): Move from altivec.md.
+ 	(xxpermx): Move from altivec.md.
+ 	(xxpermx_inst): Move from altivec.md.
+ 
+ 2021-08-19  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* tree-vect-generic.c (expand_vector_operations_1): Use either
+ 	gimplify_build1 or gimplify_build2 instead of gimple_build_assign
+ 	when constructing scalar splat expressions.
+ 
+ 2021-08-19  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/101849
+ 	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_mma_builtin): Cast
+ 	pointer to __vector_pair *.
+ 
+ 2021-08-19  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* gimple-range.cc: Add comments.
+ 	* gimple-range.h: Same.
+ 
+ 2021-08-19  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/101984
+ 	* gimple-ssa-warn-access.cc (pass_waccess::execute): Also call
+ 	disable_ranger.
+ 
+ 2021-08-19  Jeff Law  <jlaw@localhost.localdomain>
+ 
+ 	* config.gcc (h8300-*-elf*): Do not include dbxelf.h.
+ 	(h8300-*-linux*, v850-*-rtems*, v850*-elf*): Likewise.
+ 	* config/v850/v850.h (DEFAULT_GDB_EXTENSIONS): Remove.
+ 
+ 2021-08-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/101950
+ 	* optabs.c (expand_clrsb_using_clz): New function.
+ 	(expand_unop): Use it as another clrsb expansion fallback.
+ 
+ 2021-08-19  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Revert:
+ 	2021-07-28  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/99881
+ 	* config/i386/i386.h (processor_costs): Add new member
+ 	integer_to_sse.
+ 	* config/i386/x86-tune-costs.h (ix86_size_cost, i386_cost,
+ 	i486_cost, pentium_cost, lakemont_cost, pentiumpro_cost,
+ 	geode_cost, k6_cost, athlon_cost, k8_cost, amdfam10_cost,
+ 	bdver_cost, znver1_cost, znver2_cost, znver3_cost,
+ 	btver1_cost, btver2_cost, btver3_cost, pentium4_cost,
+ 	nocona_cost, atom_cost, atom_cost, slm_cost, intel_cost,
+ 	generic_cost, core_cost): Initialize integer_to_sse same value
+ 	as sse_op.
+ 	(skylake_cost): Initialize integer_to_sse twice as much as sse_op.
+ 	* config/i386/i386.c (ix86_builtin_vectorization_cost):
+ 	Use integer_to_sse instead of sse_op to calculate the cost of
+ 	vec_construct.
+ 
+ 2021-08-18  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config.gcc: Include rpath.opt for Darwin.
+ 	* config/darwin.h (DRIVER_SELF_SPECS): Handle -rpath.
+ 
+ 2021-08-18  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR bootstrap/101959
+ 	* hash-map-tests.c (test_map_of_type_with_ctor_and_dtor_expand):
+ 	Use an 'int_hash'.
+ 
+ 2021-08-18  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vld3_lane_f64): Use float RTL
+ 	pattern and type cast.
+ 	(vld4_lane_f32): Use float RTL pattern.
+ 	(vld4q_lane_f64): Use float type cast.
+ 
+ 2021-08-18  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* tree-ssa-uninit.c (maybe_warn_pass_by_reference): Check also
+ 	EAF_NOREAD.
+ 
+ 2021-08-18  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* hash-map-tests.c (test_map_of_type_with_ctor_and_dtor): Extend.
+ 	(test_map_of_type_with_ctor_and_dtor_expand): Add function.
+ 	(hash_map_tests_c_tests): Call it.
+ 
+ 2021-08-18  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* ggc.h (enum ggc_collect): New.
+ 	(ggc_collect): Use it.
+ 	* ggc-page.c: Adjust.
+ 	* ggc-common.c: Likewise.
+ 	* ggc-tests.c: Likewise.
+ 	* read-rtl-function.c: Likewise.
+ 	* selftest-run-tests.c: Likewise.
+ 	* doc/gty.texi (Invoking the garbage collector): Likewise.
+ 
+ 2021-08-18  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/97147
+ 	* config/i386/i386.h (TARGET_V2DF_REDUCTION_PREFER_HADDPD):
+ 	New macro.
+ 	* config/i386/sse.md (*sse3_haddv2df3_low): Add
+ 	TARGET_V2DF_REDUCTION_PREFER_HADDPD.
+ 	(*sse3_hsubv2df3_low): Ditto.
+ 	* config/i386/x86-tune.def
+ 	(X86_TUNE_V2DF_REDUCTION_PREFER_HADDPD): New tune.
+ 
+ 2021-08-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-gori.cc (gori_compute::gori_compute): Enable tracing.
+ 	(gori_compute::compute_operand_range): Add tracing.
+ 	(gori_compute::logical_combine): Ditto.
+ 	(gori_compute::compute_logical_operands): Ditto.
+ 	(gori_compute::compute_operand1_range): Ditto.
+ 	(gori_compute::compute_operand2_range): Ditto.
+ 	(gori_compute::outgoing_edge_range_p): Ditto.
+ 	* gimple-range-gori.h (class gori_compute): Add range_tracer.
+ 
+ 2021-08-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* flag-types.h (enum evrp_mode): Adjust evrp-mode values.
+ 	* gimple-range-cache.cc (DEBUG_RANGE_CACHE): Relocate from.
+ 	* gimple-range-trace.h (DEBUG_RANGE_CACHE): Here.
+ 	* params.opt (--param=evrp-mode): Adjust options.
+ 
+ 2021-08-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* Makefile.in (OBJS): Add gimple-range-trace.o.
+ 	* gimple-range-cache.h (enable_new_values): Remove unused prototype.
+ 	* gimple-range-fold.cc: Adjust headers.
+ 	* gimple-range-trace.cc: New.
+ 	* gimple-range-trace.h: New.
+ 	* gimple-range.cc (gimple_ranger::gimple_ranger): Enable tracer.
+ 	(gimple_ranger::range_of_expr): Add tracing.
+ 	(gimple_ranger::range_on_entry): Ditto.
+ 	(gimple_ranger::range_on_exit): Ditto.
+ 	(gimple_ranger::range_on_edge): Ditto.
+ 	(gimple_ranger::fold_range_internal): Ditto.
+ 	(gimple_ranger::dump_bb): Do not calculate edge range twice.
+ 	(trace_ranger::*): Remove.
+ 	(enable_ranger): Never create a trace_ranger.
+ 	(debug_seed_ranger): Move to gimple-range-trace.cc.
+ 	(dump_ranger): Ditto.
+ 	(debug_ranger): Ditto.
+ 	* gimple-range.h: Include gimple-range-trace.h.
+ 	(range_on_entry, range_on_exit): No longer virtual.
+ 	(class trace_ranger): Remove.
+ 	(DEBUG_RANGE_CACHE): Move to gimple-range-trace.h.
+ 
+ 2021-08-17  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/101854
+ 	* builtins.c (expand_builtin_alloca): Move warning code to check_alloca
+ 	in gimple-ssa-warn-access.cc.
+ 	* calls.c (alloc_max_size): Move code to check_alloca.
+ 	(get_size_range): Move to pointer-query.cc.
+ 	(maybe_warn_alloc_args_overflow): Move to gimple-ssa-warn-access.cc.
+ 	(get_attr_nonstring_decl): Move to tree.c.
+ 	(fntype_argno_type): Move to gimple-ssa-warn-access.cc.
+ 	(append_attrname): Same.
+ 	(maybe_warn_rdwr_sizes): Same.
+ 	(initialize_argument_information): Move code to
+ 	gimple-ssa-warn-access.cc.
+ 	* calls.h (maybe_warn_alloc_args_overflow): Move to
+ 	gimple-ssa-warn-access.h.
+ 	(get_attr_nonstring_decl): Move to tree.h.
+ 	(maybe_warn_nonstring_arg):  Move to gimple-ssa-warn-access.h.
+ 	(enum size_range_flags): Move to pointer-query.h.
+ 	(get_size_range): Same.
+ 	* gimple-ssa-warn-access.cc (has_location): Remove unused overload
+ 	to avoid Clang -Wunused-function.
+ 	(get_size_range): Declare static.
+ 	(maybe_emit_free_warning): Rename...
+ 	(maybe_check_dealloc_call): ...to this for consistency.
+ 	(class pass_waccess): Add members.
+ 	(pass_waccess::~pass_waccess): Defined.
+ 	(alloc_max_size): Move here from calls.c.
+ 	(maybe_warn_alloc_args_overflow): Same.
+ 	(check_alloca): New function.
+ 	(check_alloc_size_call): New function.
+ 	(check_strncat): Handle another warning flag.
+ 	(pass_waccess::check_builtin): Handle alloca.
+ 	(fntype_argno_type): Move here from calls.c.
+ 	(append_attrname): Same.
+ 	(maybe_warn_rdwr_sizes): Same.
+ 	(pass_waccess::check_call): Define.
+ 	(check_nonstring_args): New function.
+ 	(pass_waccess::check): Call new member functions.
+ 	(pass_waccess::execute): Enable ranger.
+ 	* gimple-ssa-warn-access.h (get_size_range): Move here from calls.h.
+ 	(maybe_warn_nonstring_arg): Same.
+ 	* gimple-ssa-warn-restrict.c: Remove #include.
+ 	* pointer-query.cc (get_size_range): Move here from calls.c.
+ 	* pointer-query.h (enum size_range_flags): Same.
+ 	(get_size_range): Same.
+ 	* tree.c (get_attr_nonstring_decl): Move here from calls.c.
+ 	* tree.h (get_attr_nonstring_decl): Move here from calls.h.
+ 
+ 2021-08-17  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* ggc.h (ggc_collect): Add 'force_collect' parameter.
+ 	* ggc-page.c (ggc_collect): Use that one instead of global
+ 	'ggc_force_collect'.  Adjust all users.
+ 	* doc/gty.texi (Invoking the garbage collector): Update.
+ 	* ggc-internal.h (ggc_force_collect): Remove.
+ 	* ggc-common.c (ggc_force_collect): Likewise.
+ 	* selftest.h (forcibly_ggc_collect): Remove.
+ 	* ggc-tests.c (selftest::forcibly_ggc_collect): Likewise.
+ 	* read-rtl-function.c (test_loading_labels): Adjust.
+ 	* selftest-run-tests.c (run_tests): Likewise.
+ 
+ 2021-08-17  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.c (darwin_file_end): Reset and reclaim the
+ 	section names table at the end of compile.
+ 
+ 2021-08-17  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR target/100340
+ 	* config.in: Regenerate.
+ 	* config/i386/darwin.h (EXTRA_ASM_OPTS): New
+ 	(ASM_SPEC): Pass options to disable branch shortening where
+ 	needed.
+ 	* configure: Regenerate.
+ 	* configure.ac: Detect versions of 'as' that support the
+ 	optimisation which has the bug.
+ 
+ 2021-08-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	* optabs-query.c (supports_vec_gather_load_p): Also check
+ 	for masked optabs.
+ 	(supports_vec_scatter_store_p): Likewise.
+ 	* tree-vect-data-refs.c (vect_gather_scatter_fn_p): Fall
+ 	back to masked variants if non-masked are not supported.
+ 	* tree-vect-patterns.c (vect_recog_gather_scatter_pattern):
+ 	When we need to use masked gather/scatter but do not have
+ 	a mask set up a constant true one.
+ 	* tree-vect-stmts.c (vect_check_scalar_mask): Also allow
+ 	non-SSA_NAME masks.
+ 
+ 2021-08-17  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* tree-ssa-ccp.c (bit_value_binop) [MINUS_EXPR]: Use same
+ 	algorithm as PLUS_EXPR to improve subtraction bit bounds.
+ 	[POINTER_DIFF_EXPR]: Treat as synonymous with MINUS_EXPR.
+ 
+ 2021-08-17  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* tree-ssa-ccp.c (bit_value_mult_const): New helper function to
+ 	calculate the mask-value pair result of a multiplication by an
+ 	unsigned constant.
+ 	(bit_value_binop) [MULT_EXPR]:  Call it from here for
+ 	multiplications by (sparse) non-negative constants.
+ 
+ 2021-08-17  Christophe Lyon  <christophe.lyon@foss.st.com>
+ 
+ 	PR target/100896
+ 	* config.gcc (gcc_cv_initfini_array): Leave undefined for
+ 	uclinuxfdpiceabi targets.
+ 
+ 2021-08-17  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* tree-inline.c (maybe_move_debug_stmts_to_successors): Don't
+ 	reverse debug stmts.
+ 
+ 2021-08-17  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* tree-cfg.c (dump_function_to_file): Use fun, not cfun.
+ 
+ 2021-08-17  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (__LD4_LANE_FUNC): Delete.
+ 	(__LD4Q_LANE_FUNC): Likewise.
+ 	(vld4_lane_u8): Define without macro.
+ 	(vld4_lane_u16): Likewise.
+ 	(vld4_lane_u32): Likewise.
+ 	(vld4_lane_u64): Likewise.
+ 	(vld4_lane_s8): Likewise.
+ 	(vld4_lane_s16): Likewise.
+ 	(vld4_lane_s32): Likewise.
+ 	(vld4_lane_s64): Likewise.
+ 	(vld4_lane_f16): Likewise.
+ 	(vld4_lane_f32): Likewise.
+ 	(vld4_lane_f64): Likewise.
+ 	(vld4_lane_p8): Likewise.
+ 	(vld4_lane_p16): Likewise.
+ 	(vld4_lane_p64): Likewise.
+ 	(vld4q_lane_u8): Likewise.
+ 	(vld4q_lane_u16): Likewise.
+ 	(vld4q_lane_u32): Likewise.
+ 	(vld4q_lane_u64): Likewise.
+ 	(vld4q_lane_s8): Likewise.
+ 	(vld4q_lane_s16): Likewise.
+ 	(vld4q_lane_s32): Likewise.
+ 	(vld4q_lane_s64): Likewise.
+ 	(vld4q_lane_f16): Likewise.
+ 	(vld4q_lane_f32): Likewise.
+ 	(vld4q_lane_f64): Likewise.
+ 	(vld4q_lane_p8): Likewise.
+ 	(vld4q_lane_p16): Likewise.
+ 	(vld4q_lane_p64): Likewise.
+ 	(vld4_lane_bf16): Likewise.
+ 	(vld4q_lane_bf16): Likewise.
+ 
+ 2021-08-17  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (__LD3_LANE_FUNC): Delete.
+ 	(__LD3Q_LANE_FUNC): Delete.
+ 	(vld3_lane_u8): Define without macro.
+ 	(vld3_lane_u16): Likewise.
+ 	(vld3_lane_u32): Likewise.
+ 	(vld3_lane_u64): Likewise.
+ 	(vld3_lane_s8): Likewise.
+ 	(vld3_lane_s16): Likewise.
+ 	(vld3_lane_s32): Likewise.
+ 	(vld3_lane_s64): Likewise.
+ 	(vld3_lane_f16): Likewise.
+ 	(vld3_lane_f32): Likewise.
+ 	(vld3_lane_f64): Likewise.
+ 	(vld3_lane_p8): Likewise.
+ 	(vld3_lane_p16): Likewise.
+ 	(vld3_lane_p64): Likewise.
+ 	(vld3q_lane_u8): Likewise.
+ 	(vld3q_lane_u16): Likewise.
+ 	(vld3q_lane_u32): Likewise.
+ 	(vld3q_lane_u64): Likewise.
+ 	(vld3q_lane_s8): Likewise.
+ 	(vld3q_lane_s16): Likewise.
+ 	(vld3q_lane_s32): Likewise.
+ 	(vld3q_lane_s64): Likewise.
+ 	(vld3q_lane_f16): Likewise.
+ 	(vld3q_lane_f32): Likewise.
+ 	(vld3q_lane_f64): Likewise.
+ 	(vld3q_lane_p8): Likewise.
+ 	(vld3q_lane_p16): Likewise.
+ 	(vld3q_lane_p64): Likewise.
+ 	(vld3_lane_bf16): Likewise.
+ 	(vld3q_lane_bf16): Likewise.
+ 
+ 2021-08-17  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (__LD2_LANE_FUNC): Delete.
+ 	(__LD2Q_LANE_FUNC): Likewise.
+ 	(vld2_lane_u8): Define without macro.
+ 	(vld2_lane_u16): Likewise.
+ 	(vld2_lane_u32): Likewise.
+ 	(vld2_lane_u64): Likewise.
+ 	(vld2_lane_s8): Likewise.
+ 	(vld2_lane_s16): Likewise.
+ 	(vld2_lane_s32): Likewise.
+ 	(vld2_lane_s64): Likewise.
+ 	(vld2_lane_f16): Likewise.
+ 	(vld2_lane_f32): Likewise.
+ 	(vld2_lane_f64): Likewise.
+ 	(vld2_lane_p8): Likewise.
+ 	(vld2_lane_p16): Likewise.
+ 	(vld2_lane_p64): Likewise.
+ 	(vld2q_lane_u8): Likewise.
+ 	(vld2q_lane_u16): Likewise.
+ 	(vld2q_lane_u32): Likewise.
+ 	(vld2q_lane_u64): Likewise.
+ 	(vld2q_lane_s8): Likewise.
+ 	(vld2q_lane_s16): Likewise.
+ 	(vld2q_lane_s32): Likewise.
+ 	(vld2q_lane_s64): Likewise.
+ 	(vld2q_lane_f16): Likewise.
+ 	(vld2q_lane_f32): Likewise.
+ 	(vld2q_lane_f64): Likewise.
+ 	(vld2q_lane_p8): Likewise.
+ 	(vld2q_lane_p16): Likewise.
+ 	(vld2q_lane_p64): Likewise.
+ 	(vld2_lane_bf16): Likewise.
+ 	(vld2q_lane_bf16): Likewise.
+ 
+ 2021-08-17  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+ 
+ 	* haifa-sched.c (advance_one_cycle): Output more context-synchronization
+ 	lines for diff.
+ 
+ 2021-08-17  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+ 
+ 	* haifa-sched.c (enum rfs_decision, rfs_str): Add RFS_AUTOPREF.
+ 	(rank_for_schedule): Use it.
+ 
+ 2021-08-17  Maxim Kuvyrkov  <maxim.kuvyrkov@linaro.org>
+ 
+ 	PR rtl-optimization/91598
+ 	* haifa-sched.c (autopref_rank_for_schedule): Prioritize "irrelevant"
+ 	insns after memory reads and before memory writes.
+ 
+ 2021-08-17  Alistair_Lee  <alistair.lee@arm.com>
+ 
+ 	* rtl.h (CONST_VECTOR_P): New macro.
+ 	* config/aarch64/aarch64.c (aarch64_get_sve_pred_bits): Use RTL
+ 	code testing macros.
+ 	(aarch64_ptrue_all_mode): Likewise.
+ 	(aarch64_expand_mov_immediate): Likewise.
+ 	(aarch64_const_vec_all_in_range_p): Likewise.
+ 	(aarch64_rtx_costs): Likewise.
+ 	(aarch64_legitimate_constant_p): Likewise.
+ 	(aarch64_simd_valid_immediate): Likewise.
+ 	(aarch64_simd_make_constant): Likewise.
+ 	(aarch64_convert_mult_to_shift): Likewise.
+ 	(aarch64_expand_sve_vec_perm): Likewise.
+ 	(aarch64_vec_fpconst_pow_of_2): Likewise.
+ 
+ 2021-08-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/101938
+ 	* range-op.cc (operator_abs::op1_range): Special case
+ 	-TYPE_MIN_VALUE for flag_wrapv.
+ 
+ 2021-08-17  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* tree-vect-slp.c (vectorizable_bb_reduc_epilogue): Add the cost for
+ 	value extraction.
+ 
+ 2021-08-17  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree.def (OMP_SCOPE): New tree code.
+ 	* tree.h (OMP_SCOPE_BODY, OMP_SCOPE_CLAUSES): Define.
+ 	* tree-nested.c (convert_nonlocal_reference_stmt,
+ 	convert_local_reference_stmt, convert_gimple_call): Handle
+ 	GIMPLE_OMP_SCOPE.
+ 	* tree-pretty-print.c (dump_generic_node): Handle OMP_SCOPE.
+ 	* gimple.def (GIMPLE_OMP_SCOPE): New gimple code.
+ 	* gimple.c (gimple_build_omp_scope): New function.
+ 	(gimple_copy): Handle GIMPLE_OMP_SCOPE.
+ 	* gimple.h (gimple_build_omp_scope): Declare.
+ 	(gimple_has_substatements): Handle GIMPLE_OMP_SCOPE.
+ 	(gimple_omp_scope_clauses, gimple_omp_scope_clauses_ptr,
+ 	gimple_omp_scope_set_clauses): New inline functions.
+ 	(CASE_GIMPLE_OMP): Add GIMPLE_OMP_SCOPE.
+ 	* gimple-pretty-print.c (dump_gimple_omp_scope): New function.
+ 	(pp_gimple_stmt_1): Handle GIMPLE_OMP_SCOPE.
+ 	* gimple-walk.c (walk_gimple_stmt): Likewise.
+ 	* gimple-low.c (lower_stmt): Likewise.
+ 	* gimplify.c (is_gimple_stmt): Handle OMP_MASTER.
+ 	(gimplify_scan_omp_clauses): For task reductions, handle OMP_SCOPE
+ 	like ORT_WORKSHARE constructs.  Adjust diagnostics for %<scope%>
+ 	allowing task reductions.  Reject inscan reductions on scope.
+ 	(omp_find_stores_stmt): Handle GIMPLE_OMP_SCOPE.
+ 	(gimplify_omp_workshare, gimplify_expr): Handle OMP_SCOPE.
+ 	* tree-inline.c (remap_gimple_stmt): Handle GIMPLE_OMP_SCOPE.
+ 	(estimate_num_insns): Likewise.
+ 	* omp-low.c (build_outer_var_ref): Look through GIMPLE_OMP_SCOPE
+ 	contexts if var isn't privatized there.
+ 	(check_omp_nesting_restrictions): Handle GIMPLE_OMP_SCOPE.
+ 	(scan_omp_1_stmt): Likewise.
+ 	(maybe_add_implicit_barrier_cancel): Look through outer
+ 	scope constructs.
+ 	(lower_omp_scope): New function.
+ 	(lower_omp_task_reductions): Handle OMP_SCOPE.
+ 	(lower_omp_1): Handle GIMPLE_OMP_SCOPE.
+ 	(diagnose_sb_1, diagnose_sb_2): Likewise.
+ 	* omp-expand.c (expand_omp_single): Support also GIMPLE_OMP_SCOPE.
+ 	(expand_omp): Handle GIMPLE_OMP_SCOPE.
+ 	(omp_make_gimple_edges): Likewise.
+ 	* omp-builtins.def (BUILT_IN_GOMP_SCOPE_START): New built-in.
+ 
+ 2021-08-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101925
+ 	* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Set
+ 	reverse on COMPONENT_REF and ARRAY_REF according to
+ 	what reverse_storage_order_for_component_p does.
+ 	(vn_reference_eq): Compare reversed on reference ops.
+ 	(reverse_storage_order_for_component_p): New overload.
+ 	(vn_reference_lookup_3): Check reverse_storage_order_for_component_p
+ 	on the reference looked up.
+ 
+ 2021-08-17  Jeff Law  <jlaw@localhost.localdomain>
+ 
+ 	* config/h8300/h8300.c (shift_alg_si): Avoid loops for most SImode
+ 	shifts on the H8/S.
+ 	(h8300_option_override): Use loops on H8/S more often when optimizing
+ 	for size.
+ 	(get_shift_alg): Handle new "special" cases on H8/S.  Simplify
+ 	accordingly.  Handle various arithmetic right shifts with special
+ 	sequences that we couldn't handle before.
+ 
+ 2021-08-16  Jeff Law  <jlaw@localhost.localdomain>
+ 
+ 	* config.gcc (rl78-*-elf*): Do not include dbxelf.h.
+ 
+ 2021-08-16  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	* config/sparc/rtemself.h (SPARC_GCOV_TYPE_SIZE): Define.
+ 	* config/sparc/sparc.c (sparc_gcov_type_size): New.
+ 	(TARGET_GCOV_TYPE_SIZE): Redefine if SPARC_GCOV_TYPE_SIZE is defined.
+ 	* coverage.c (get_gcov_type): Use targetm.gcov_type_size().
+ 	* doc/tm.texi (TARGET_GCOV_TYPE_SIZE): Add hook under "Misc".
+ 	* doc/tm.texi.in: Regenerate.
+ 	* target.def (gcov_type_size): New target hook.
+ 	* targhooks.c (default_gcov_type_size): New.
+ 	* targhooks.h (default_gcov_type_size): Declare.
+ 	* tree-profile.c (gimple_gen_edge_profiler): Use precision of
+ 	gcov_type_node.
+ 	(gimple_gen_time_profiler): Likewise.
+ 
+ 2021-08-16  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	* dwarf2out.c (add_scalar_info): Deal with DW_AT_data_bit_offset.
+ 
+ 2021-08-16  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	PR middle-end/101931
+ 	* omp-low.c (omp_runtime_api_call): Update for routines
+ 	added in the meanwhile.
+ 
+ 2021-08-16  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR tree-optimization/100393
+ 	* tree-switch-conversion.c (group_cluster::dump): Use
+ 	  get_comparison_count.
+ 	(jump_table_cluster::find_jump_tables): Pre-compute number of
+ 	comparisons and then decrement it. Cache also max_ratio.
+ 	(jump_table_cluster::can_be_handled): Change signature.
+ 	* tree-switch-conversion.h (get_comparison_count): New.
+ 
+ 2021-08-16  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	* dwarf2out.c (add_data_member_location_attribute): Use GNAT
+ 	encodings only when -fgnat-encodings=all is specified.
+ 	(add_bound_info): Likewise.
+ 	(add_byte_size_attribute): Likewise.
+ 	(gen_member_die): Likewise.
+ 
+ 2021-08-16  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* omp-oacc-neuter-broadcast.cc
+ 	(execute_omp_oacc_neuter_broadcast): Plug 'par' memory leak.
+ 
+ 2021-08-16  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* omp-oacc-neuter-broadcast.cc
+ 	(execute_omp_oacc_neuter_broadcast): Clarify memory management for
+ 	'prop_set'.
+ 
+ 2021-08-16  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* omp-oacc-neuter-broadcast.cc (field_map): Move variable into...
+ 	(execute_omp_oacc_neuter_broadcast): ... here.
+ 	(install_var_field, build_receiver_ref, build_sender_ref): Take
+ 	'field_map_t *' parameter.  Adjust all users.
+ 	(worker_single_copy, neuter_worker_single): Take a
+ 	'record_field_map_t *' parameter.  Adjust all users.
+ 
+ 2021-08-16  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/101930
+ 	* config/i386/i386.md (ldexp<mode>3): Force operands[1] to
+ 	reg.
+ 
+ 2021-08-16  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR ipa/101726
+ 	* multiple_target.c (create_dispatcher_calls): Make default
+ 	  function local only if it is a definition.
+ 
+ 2021-08-16  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR ipa/100600
+ 	* ipa-icf-gimple.c (func_checker::compare_ssa_name): Do not
+ 	  consider equal SSA_NAMEs when one is a param.
+ 
+ 2021-08-16  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/101846
+ 	* config/i386/i386-expand.c (ix86_expand_vec_perm_vpermt2):
+ 	Support vpermi2b for V32QI/V16QImode.
+ 	(ix86_extract_perm_from_pool_constant): New function.
+ 	(ix86_expand_vec_one_operand_perm_avx512): Support
+ 	vpermw/vpermb under TARGET_AVX512BW/TARGET_AVX512VBMI.
+ 	(expand_vec_perm_1): Adjust comments for upper.
+ 	* config/i386/i386-protos.h (ix86_extract_perm_from_pool_constant):
+ 	New declare.
+ 	* config/i386/predicates.md (permvar_truncate_operand): New predicate.
+ 	(pshufb_truncv4siv4hi_operand): Ditto.
+ 	(pshufb_truncv8hiv8qi_operand): Ditto.
+ 	* config/i386/sse.md (*avx512bw_permvar_truncv16siv16hi_1):
+ 	New pre_reload define_insn_and_split.
+ 	(*avx512f_permvar_truncv8siv8hi_1): Ditto.
+ 	(*avx512f_vpermvar_truncv8div8si_1): Ditto.
+ 	(*avx512f_permvar_truncv32hiv32qi_1): Ditto.
+ 	(*avx512f_permvar_truncv16hiv16qi_1): Ditto.
+ 	(*avx512f_permvar_truncv4div4si_1): Ditto.
+ 	(*avx512f_pshufb_truncv8hiv8qi_1): Ditto.
+ 	(*avx512f_pshufb_truncv4siv4hi_1): Ditto.
+ 	(*avx512f_pshufd_truncv2div2si_1): Ditto.
+ 
+ 2021-08-16  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/multilib-generator: Support code model option for
+ 	multi-lib.
+ 	* doc/install.texi: Add document of new option for
+ 	--with-multilib-generator.
+ 
+ 2021-08-15  Clément Chigot  <clement.chigot@atos.net>
+ 
+ 	* config/rs6000/rs6000.c (xcoff_tls_exec_model_detected): New.
+ 	(rs6000_legitimize_tls_address_aix): Use it.
+ 	(rs6000_xcoff_file_end): Add ".ref __tls_get_addr" when
+ 	xcoff_tls_exec_model_detected is true.
+ 
+ 2021-08-15  Jeff Law  <jlaw@localhost.localdomain>
+ 
+ 	* config/h8300/h8300.c (shift_alg_si): Retune H8/300H shifts
+ 	to allow a bit more code growth, saving many dozens of cycles.
+ 	(h8300_option_override): Adjus shift_alg_si if optimizing for
+ 	code size.
+ 	(get_shift_alg): Use special + inline shifts for residuals
+ 	in more cases.
+ 
+ 2021-08-14  Stafford Horne  <shorne@gmail.com>
+ 
+ 	PR target/99783
+ 	* config/or1k/or1k-opts.h: New file.
+ 	* config/or1k/or1k.c (or1k_legitimize_address_1, print_reloc):
+ 	Support generating gotha relocations if -mcmodel=large is
+ 	specified.
+ 	* config/or1k/or1k.h (TARGET_CMODEL_SMALL, TARGET_CMODEL_LARGE):
+ 	New macros.
+ 	* config/or1k/or1k.opt (mcmodel=): New option.
+ 	* doc/invoke.texi (OpenRISC Options): Document mcmodel.
+ 
+ 2021-08-14  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/101791
+ 	* gimple-ssa-warn-access.cc (new_delete_mismatch_p): Use new argument
+ 	to valid_new_delete_pair_p.
+ 	* tree.c (valid_new_delete_pair_p): Add argument.
+ 	* tree.h (valid_new_delete_pair_p): Same.
+ 
+ 2021-08-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/101896
+ 	* config/i386/i386-expand.c (expand_vec_perm_broadcast_1)
+ 	<case E_V64QImode>: For this mode assert
+ 	!TARGET_AVX512BW || d->perm[0] rather than !TARGET_AVX2 || d->perm[0].
+ 
+ 2021-08-13  Michael Meissner  <meissner@linux.ibm.com>
+ 
+ 	PR target/99921
+ 	* config/rs6000/altivec.md (xxeval): Use register_predicate
+ 	instead of altivec_register_predicate.
+ 
+ 2021-08-13  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/101734
+ 	* tree-ssa-uninit.c (maybe_warn_read_write_only): New function.
+ 	(maybe_warn_operand): Call it.
+ 
+ 2021-08-13  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR ipa/101354
+ 	* attribs.c (decl_attributes): Make naked functions "noipa"
+ 	  functions.
+ 
+ 2021-08-13  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR ipa/101261
+ 	* symtab.c (symtab_node::noninterposable_alias): Do not create
+ 	  local aliases for target_clone functions as the clonning pass
+ 	  rejects aliases.
+ 
+ 2021-08-13  Martin Liska  <mliska@suse.cz>
+ 
+ 	* opts.c (LIVE_PATCHING_OPTION): Define.
+ 	(control_options_for_live_patching): Use it in error messages.
+ 
+ 2021-08-13  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (dump_eaf_flags): Dump EAF_NOREAD.
+ 	(implicit_const_eaf_flags, implicit_pure_eaf_flags,
+ 	 ignore_stores_eaf_flags): New constants.
+ 	(remove_useless_eaf_flags): New function.
+ 	(eaf_flags_useful_p): Use it.
+ 	(deref_flags): Add EAF_NOT_RETURNED if flag is unused;
+ 	handle EAF_NOREAD.
+ 	(modref_lattice::init): Add EAF_NOREAD.
+ 	(modref_lattice::add_escape_point): Do not reacord escape point if
+ 	result is unused.
+ 	(modref_lattice::merge): EAF_NOESCAPE implies EAF_NODIRECTESCAPE;
+ 	use remove_useless_eaf_flags.
+ 	(modref_lattice::merge_deref): Use ignore_stores_eaf_flags.
+ 	(modref_lattice::merge_direct_load): Add EAF_NOREAD
+ 	(analyze_ssa_name_flags): Fix handling EAF_NOT_RETURNED
+ 	(analyze_parms): Use remove_useless_eaf_flags.
+ 	(ipa_merge_modref_summary_after_inlining): Use ignore_stores_eaf_flags.
+ 	(modref_merge_call_site_flags): Add caller and ecf_flags parameter;
+ 	use remove_useless_eaf_flags.
+ 	(modref_propagate_flags_in_scc): Update.
+ 	* ipa-modref.h: Turn eaf_flags_t back to char.
+ 	* tree-core.h (EAF_NOT_RETURNED): Fix.
+ 	(EAF_NOREAD): New constant
+ 	* tree-ssa-alias.c: (ref_maybe_used_by_call_p_1): Check for
+ 	EAF_NOREAD.
+ 	* tree-ssa-structalias.c (handle_rhs_call): Handle new flags.
+ 	(handle_pure_call): Likewise.
+ 
+ 2021-08-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree.def (OMP_MASKED): New tree code.
+ 	* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_FILTER.
+ 	* tree.h (OMP_MASKED_BODY, OMP_MASKED_CLAUSES, OMP_MASKED_COMBINED,
+ 	OMP_CLAUSE_FILTER_EXPR): Define.
+ 	* tree.c (omp_clause_num_ops): Add OMP_CLAUSE_FILTER entry.
+ 	(omp_clause_code_name): Likewise.
+ 	(walk_tree_1): Handle OMP_CLAUSE_FILTER.
+ 	* tree-nested.c (convert_nonlocal_omp_clauses,
+ 	convert_local_omp_clauses): Handle OMP_CLAUSE_FILTER.
+ 	(convert_nonlocal_reference_stmt, convert_local_reference_stmt,
+ 	convert_gimple_call): Handle GIMPLE_OMP_MASTER.
+ 	* tree-pretty-print.c (dump_omp_clause): Handle OMP_CLAUSE_FILTER.
+ 	(dump_generic_node): Handle OMP_MASTER.
+ 	* gimple.def (GIMPLE_OMP_MASKED): New gimple code.
+ 	* gimple.c (gimple_build_omp_masked): New function.
+ 	(gimple_copy): Handle GIMPLE_OMP_MASKED.
+ 	* gimple.h (gimple_build_omp_masked): Declare.
+ 	(gimple_has_substatements): Handle GIMPLE_OMP_MASKED.
+ 	(gimple_omp_masked_clauses, gimple_omp_masked_clauses_ptr,
+ 	gimple_omp_masked_set_clauses): New inline functions.
+ 	(CASE_GIMPLE_OMP): Add GIMPLE_OMP_MASKED.
+ 	* gimple-pretty-print.c (dump_gimple_omp_masked): New function.
+ 	(pp_gimple_stmt_1): Handle GIMPLE_OMP_MASKED.
+ 	* gimple-walk.c (walk_gimple_stmt): Likewise.
+ 	* gimple-low.c (lower_stmt): Likewise.
+ 	* gimplify.c (is_gimple_stmt): Handle OMP_MASTER.
+ 	(gimplify_scan_omp_clauses): Handle OMP_CLAUSE_FILTER.  For clauses
+ 	that take one expression rather than decl or constant, force
+ 	gimplification of that into a SSA_NAME or temporary unless min
+ 	invariant.
+ 	(gimplify_adjust_omp_clauses): Handle OMP_CLAUSE_FILTER.
+ 	(gimplify_expr): Handle OMP_MASKED.
+ 	* tree-inline.c (remap_gimple_stmt): Handle GIMPLE_OMP_MASKED.
+ 	(estimate_num_insns): Likewise.
+ 	* omp-low.c (scan_sharing_clauses): Handle OMP_CLAUSE_FILTER.
+ 	(check_omp_nesting_restrictions): Handle GIMPLE_OMP_MASKED.  Adjust
+ 	diagnostics for existence of masked construct.
+ 	(scan_omp_1_stmt, lower_omp_master, lower_omp_1, diagnose_sb_1,
+ 	diagnose_sb_2): Handle GIMPLE_OMP_MASKED.
+ 	* omp-expand.c (expand_omp_synch, expand_omp, omp_make_gimple_edges):
+ 	Likewise.
+ 
+ 2021-08-12  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/98309
+ 	* config/i386/i386.md (avx512f_scalef<mode>2): New insn pattern.
+ 	(ldexp<mode>3): Use avx512f_scalef<mode>2.
+ 	(UNSPEC_SCALEF): Move from ...
+ 	* config/i386/sse.md (UNSPEC_SCALEF): ... here.
+ 
+ 2021-08-12  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-split.c (consider_split): Fix condition testing void functions.
+ 
+ 2021-08-12  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* doc/invoke.texi: Remove docs for threader-mode param.
+ 	* flag-types.h (enum threader_mode): Remove.
+ 	* params.opt: Remove threader-mode param.
+ 	* tree-ssa-threadbackward.c (class back_threader): Remove
+ 	path_is_unreachable_p.
+ 	Make find_paths private.
+ 	Add maybe_thread and thread_through_all_blocks.
+ 	Remove reference marker for m_registry.
+ 	Remove reference marker for m_profit.
+ 	(back_threader::back_threader): Adjust for registry and profit not
+ 	being references.
+ 	(dump_path): Move down.
+ 	(debug): Move down.
+ 	(class thread_jumps): Remove.
+ 	(class back_threader_registry): Remove m_all_paths.
+ 	Remove destructor.
+ 	(thread_jumps::thread_through_all_blocks): Move to back_threader
+ 	class.
+ 	(fsm_find_thread_path): Remove
+ 	(back_threader::maybe_thread): New.
+ 	(back_threader::thread_through_all_blocks): Move from
+ 	thread_jumps.
+ 	(back_threader_registry::back_threader_registry): Remove
+ 	m_all_paths.
+ 	(back_threader_registry::~back_threader_registry): Remove.
+ 	(thread_jumps::find_taken_edge): Remove.
+ 	(thread_jumps::check_subpath_and_update_thread_path): Remove.
+ 	(thread_jumps::maybe_register_path): Remove.
+ 	(thread_jumps::handle_phi): Remove.
+ 	(handle_assignment_p): Remove.
+ 	(thread_jumps::handle_assignment): Remove.
+ 	(thread_jumps::fsm_find_control_statement_thread_paths): Remove.
+ 	(thread_jumps::find_jump_threads_backwards): Remove.
+ 	(thread_jumps::find_jump_threads_backwards_with_ranger): Remove.
+ 	(try_thread_blocks): Rename find_jump_threads_backwards to
+ 	maybe_thread.
+ 	(pass_early_thread_jumps::execute): Same.
+ 
+ 2021-08-12  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* tree-core.h (omp_clause_proc_bind_kind): Add
+ 	OMP_CLAUSE_PROC_BIND_PRIMARY.
+ 	* tree-pretty-print.c (dump_omp_clause): Add TODO comment to
+ 	change 'master' to 'primary' in proc_bind for OpenMP 5.1.
+ 
+ 2021-08-12  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* common/config/arc/arc-common.c (arc_option_init_struct): Remove
+ 	fno-common reference.
+ 	* config/arc/arc.c (arc_override_options): Remove overriding of
+ 	flag_no_common.
+ 
+ 2021-08-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/101860
+ 	* config/i386/i386-expand.c (ix86_expand_vec_one_operand_perm_avx512):
+ 	If d->testing_p, return true after performing checks instead of
+ 	actually expanding the insn.
+ 	(expand_vec_perm_broadcast_1): Handle V32HImode - assert
+ 	!TARGET_AVX512BW and return false.
+ 
+ 2021-08-12  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	* configure.ac (PE linker --disable-dynamicbase support): New check.
+ 	* configure: Regenerate.
+ 	* config.in: Likewise.
+ 	* config/i386/mingw32.h (LINK_SPEC_DISABLE_DYNAMICBASE): New define.
+ 	(LINK_SPEC): Use it.
+ 	* config/i386/mingw-w64.h (LINK_SPEC_DISABLE_DYNAMICBASE): Likewise.
+ 	(LINK_SPEC): Likewise.
+ 
+ 2021-08-12  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/101846
+ 	* config/i386/sse.md (*avx2_zero_extendv16qiv16hi2_2): New
+ 	post_reload define_insn_and_split.
+ 	(*avx512bw_zero_extendv32qiv32hi2_2): Ditto.
+ 	(*sse4_1_zero_extendv8qiv8hi2_4): Ditto.
+ 	(*avx512f_zero_extendv16hiv16si2_2): Ditto.
+ 	(*avx2_zero_extendv8hiv8si2_2): Ditto.
+ 	(*sse4_1_zero_extendv4hiv4si2_4): Ditto.
+ 	(*avx512f_zero_extendv8siv8di2_2): Ditto.
+ 	(*avx2_zero_extendv4siv4di2_2): Ditto.
+ 	(*sse4_1_zero_extendv2siv2di2_4): Ditto.
+ 	(VI248_256, VI248_512, VI148_512, VI148_256, VI148_128): New
+ 	mode iterator.
+ 
+ 2021-08-11  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: Add always, power5, and
+ 	power6 stanzas.
+ 
+ 2021-08-11  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: Add vsx stanza.
+ 
+ 2021-08-11  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: Finish altivec stanza.
+ 	* config/rs6000/rs6000-call.c (rs6000_init_builtins): Move
+ 	initialization of pcvoid_type_node here...
+ 	(altivec_init_builtins): ...from here.
+ 	* config/rs6000/rs6000.h (rs6000_builtin_type_index): Add
+ 	RS6000_BTI_const_ptr_void.
+ 	(pcvoid_type_node): New macro.
+ 
+ 2021-08-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR target/101877
+ 	* tree-ssa-forwprop.c (pass_forwprop::execute): Do not decompose
+ 	hard-register accesses.
+ 
+ 2021-08-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-operands.c (operands_scanner::get_expr_operands):
+ 	Do not look at COMPONENT_REF FIELD_DECLs TREE_THIS_VOLATILE
+ 	to determine has_volatile_ops.
+ 
+ 2021-08-11  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	* cfgexpand.c (expand_used_vars): Reuse attribs local variable.
+ 
+ 2021-08-11  Jan Hubicka  <hubicka@ucw.cz>
+ 	    Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* ipa-modref.c (modref_lattice::dump): Fix escape_point's min_flags
+ 	dumping.
+ 	(modref_lattice::merge_deref): Fix handling of indirect scape points.
+ 	(update_escape_summary_1): Likewise.
+ 	(update_escape_summary): Likewise.
+ 	(ipa_merge_modref_summary_after_inlining): Likewise.
+ 
+ 2021-08-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/101858
+ 	* fold-const.c (fold_binary_loc): Guard simplification
+ 	of  X < (cast) (1 << Y) to integer types.
+ 
+ 2021-08-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101861
+ 	* tree-vect-stmts.c (vectorizable_load): Fix error in
+ 	previous change with regard to gather vectorization.
+ 
+ 2021-08-11  prathamesh.kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	PR target/66791
+ 	* config/arm/arm_neon.h (vdup_n_s8): Replace call to builtin
+ 	with constructor.
+ 	(vdup_n_s16): Likewise.
+ 	(vdup_n_s32): Likewise.
+ 	(vdup_n_s64): Likewise.
+ 	(vdup_n_u8): Likewise.
+ 	(vdup_n_u16): Likewise.
+ 	(vdup_n_u32): Likewise.
+ 	(vdup_n_u64): Likewise.
+ 	(vdup_n_p8): Likewise.
+ 	(vdup_n_p16): Likewise.
+ 	(vdup_n_p64): Likewise.
+ 	(vdup_n_f16): Likewise.
+ 	(vdup_n_f32): Likewise.
+ 	(vdupq_n_s8): Likewise.
+ 	(vdupq_n_s16): Likewise.
+ 	(vdupq_n_s32): Likewise.
+ 	(vdupq_n_s64): Likewise.
+ 	(vdupq_n_u8): Likewise.
+ 	(vdupq_n_u16): Likewise.
+ 	(vdupq_n_u32): Likewise.
+ 	(vdupq_n_u64): Likewise.
+ 	(vdupq_n_p8): Likewise.
+ 	(vdupq_n_p16): Likewise.
+ 	(vdupq_n_p64): Likewise.
+ 	(vdupq_n_f16): Likewise.
+ 	(vdupq_n_f32): Likewise.
+ 	(vmov_n_s8): Replace call to builtin with call to corresponding
+ 	vdup_n intrinsic.
+ 	(vmov_n_s16): Likewise.
+ 	(vmov_n_s32): Likewise.
+ 	(vmov_n_s64): Likewise.
+ 	(vmov_n_u8): Likewise.
+ 	(vmov_n_u16): Likewise.
+ 	(vmov_n_u32): Likewise.
+ 	(vmov_n_u64): Likewise.
+ 	(vmov_n_p8): Likewise.
+ 	(vmov_n_p16): Likewise.
+ 	(vmov_n_f16): Likewise.
+ 	(vmov_n_f32): Likewise.
+ 	(vmovq_n_s8): Likewise.
+ 	(vmovq_n_s16): Likewise.
+ 	(vmovq_n_s32): Likewise.
+ 	(vmovq_n_s64): Likewise.
+ 	(vmovq_n_u8): Likewise.
+ 	(vmovq_n_u16): Likewise.
+ 	(vmovq_n_u32): Likewise.
+ 	(vmovq_n_u64): Likewise.
+ 	(vmovq_n_p8): Likewise.
+ 	(vmovq_n_p16): Likewise.
+ 	(vmovq_n_f16): Likewise.
+ 	(vmovq_n_f32): Likewise.
+ 	* config/arm/arm_neon_builtins.def: Remove entries for vdup_n.
+ 
+ 2021-08-11  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/98309
+ 	* config/i386/i386.md (ldexp<mode>3): Extend to vscalefs[sd]
+ 	when TARGET_AVX512F and TARGET_SSE_MATH.
+ 
+ 2021-08-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/80355
+ 	* config/i386/i386-expand.c (expand_vec_perm_even_odd): Return false
+ 	for V32HImode if !TARGET_AVX512BW.
+ 	(ix86_vectorize_vec_perm_const) <case E_V32HImode, case E_V64QImode>:
+ 	If !TARGET_AVX512BW and TARGET_AVX512F and d.testing_p, don't fail
+ 	early, but actually check the permutation.
+ 
+ 2021-08-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101809
+ 	* tree-vect-stmts.c (get_load_store_type): Allow emulated
+ 	gathers with offset vector nunits being a constant multiple
+ 	of the data vector nunits.
+ 	(vect_get_gather_scatter_ops): Use the appropriate nunits
+ 	for the offset vector defs.
+ 	(vectorizable_store): Adjust call to
+ 	vect_get_gather_scatter_ops.
+ 	(vectorizable_load): Likewise.  Handle the case of less
+ 	offset vectors than data vectors.
+ 
+ 2021-08-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/80355
+ 	* config/i386/sse.md (*avx512f_shuf_<shuffletype>64x2_1<mask_name>_1,
+ 	*avx512f_shuf_<shuffletype>32x4_1<mask_name>_1): New define_insn
+ 	patterns.
+ 
+ 2021-08-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101801
+ 	PR tree-optimization/101819
+ 	* tree-vectorizer.h (vect_emulated_vector_p): Declare.
+ 	* tree-vect-loop.c (vect_emulated_vector_p): New function.
+ 	(vectorizable_reduction): Re-instantiate a check for emulated
+ 	operations.
+ 	* tree-vect-stmts.c (vectorizable_shift): Likewise.
+ 	(vectorizable_operation): Likewise.  Cost emulated vector
+ 	operations according to the scalar sequence synthesized by
+ 	vector lowering.
+ 
+ 2021-08-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/101824
+ 	* tree-nested.c (get_frame_field): Mark the COMPONENT_REF as
+ 	volatile in case the variable was.
+ 
+ 2021-08-10  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101804
+ 	* config/i386/constraints.md (BC): Document for integer SSE
+ 	constant all bits set operand.
+ 	(BF): New constraint for const floating-point all bits set
+ 	vectors.
+ 	* config/i386/i386.c (standard_sse_constant_p): Likewise.
+ 	(standard_sse_constant_opcode): Likewise.
+ 	* config/i386/sse.md (sseconstm1): New mode attribute.
+ 	(mov<mode>_internal): Replace BC with <sseconstm1>.
+ 
+ 2021-08-10  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/sse.md (cond_<insn><mode>): New expander.
+ 	(VI248_AVX512VLBW): New mode iterator.
+ 	* config/i386/predicates.md
+ 	(nonimmediate_or_const_vec_dup_operand): New predicate.
+ 
+ 2021-08-09  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/101741
+ 	* gimple-range-fold.cc (fold_using_range::range_of_builtin_call): Check
+ 	type of parameter for toupper/tolower.
+ 
+ 2021-08-09  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR testsuite/101654
+ 	* ipa-prop.c (propagate_controlled_uses): Removed a spurious space.
+ 
+ 2021-08-09  Pat Haugen  <pthaugen@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (is_load_insn1): Verify destination is a
+ 	register.
+ 	(is_store_insn1): Verify source is a register.
+ 
+ 2021-08-09  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/101812
+ 	* config/i386/mmx.md (<any_logic:code>v2sf3):
+ 	Rename from *mmx_<any_logic:code>v2sf3
+ 
+ 2021-08-09  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* config/nvptx/nvptx.c: Cross-reference parts adapted in
+ 	'gcc/omp-oacc-neuter-broadcast.cc'.
+ 	* omp-low.c: Likewise.
+ 	* omp-oacc-neuter-broadcast.cc: Cross-reference parts adapted from
+ 	the above files.
+ 
+ 2021-08-09  Julian Brown  <julian@codesourcery.com>
+ 	    Kwok Cheung Yeung  <kcy@codesourcery.com>
+ 	    Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* config/gcn/gcn.c (gcn_init_builtins): Override decls for
+ 	BUILT_IN_GOACC_SINGLE_START, BUILT_IN_GOACC_SINGLE_COPY_START,
+ 	BUILT_IN_GOACC_SINGLE_COPY_END and BUILT_IN_GOACC_BARRIER.
+ 	(gcn_goacc_validate_dims): Turn on worker partitioning unconditionally.
+ 	(gcn_fork_join): Update comment.
+ 	* config/gcn/gcn.opt (flag_worker_partitioning): Remove.
+ 	(macc_experimental_workers): Remove unused option.
+ 
+ 2021-08-09  Julian Brown  <julian@codesourcery.com>
+ 	    Nathan Sidwell  <nathan@codesourcery.com> (via 'gcc/config/nvptx/nvptx.c' master)
+ 	    Kwok Cheung Yeung  <kcy@codesourcery.com>
+ 	    Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* Makefile.in (OBJS): Add omp-oacc-neuter-broadcast.o.
+ 	* doc/tm.texi.in (TARGET_GOACC_CREATE_WORKER_BROADCAST_RECORD):
+ 	Add documentation hook.
+ 	* doc/tm.texi: Regenerate.
+ 	* omp-oacc-neuter-broadcast.cc: New file.
+ 	* omp-builtins.def (BUILT_IN_GOACC_BARRIER)
+ 	(BUILT_IN_GOACC_SINGLE_START, BUILT_IN_GOACC_SINGLE_COPY_START)
+ 	(BUILT_IN_GOACC_SINGLE_COPY_END): New builtins.
+ 	* passes.def (pass_omp_oacc_neuter_broadcast): Add pass.
+ 	* target.def (goacc.create_worker_broadcast_record): Add target
+ 	hook.
+ 	* tree-pass.h (make_pass_omp_oacc_neuter_broadcast): Add
+ 	prototype.
+ 	* config/gcn/gcn-protos.h (gcn_goacc_adjust_propagation_record):
+ 	Rename prototype to...
+ 	(gcn_goacc_create_worker_broadcast_record): ... this.
+ 	* config/gcn/gcn-tree.c (gcn_goacc_adjust_propagation_record): Rename
+ 	function to...
+ 	(gcn_goacc_create_worker_broadcast_record): ... this.
+ 	* config/gcn/gcn.c (TARGET_GOACC_ADJUST_PROPAGATION_RECORD):
+ 	Rename to...
+ 	(TARGET_GOACC_CREATE_WORKER_BROADCAST_RECORD): ... this.
+ 
+ 2021-08-09  Tejas Belagod  <tejas.belagod@arm.com>
+ 
+ 	PR target/101609
+ 	* config/aarch64/aarch64-simd.md (vlshr<mode>3, vashr<mode>3): Use
+ 	the right iterator.
+ 
+ 2021-08-09  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* Makefile.in (GTFILES): Remove '$(srcdir)/omp-offload.c'.
+ 
+ 2021-08-09  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* builtins.def (DEF_GOACC_BUILTIN, DEF_GOMP_BUILTIN): Don't
+ 	consider '-foffload-abi'.
+ 	* common.opt (-foffload-abi): Remove 'Var', 'Init'.
+ 	* opts.c (common_handle_option) <-foffload-abi> [ACCEL_COMPILER]:
+ 	Ignore.
+ 
+ 2021-08-09  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* optc-gen.awk: Sanity check that 'Init' doesn't appear without
+ 	'Var'.
+ 
+ 2021-08-09  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* omp-builtins.def (BUILT_IN_ACC_GET_DEVICE_TYPE): Remove.
+ 
+ 2021-08-09  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* doc/gty.texi (Files): Update.
+ 
+ 2021-08-09  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* doc/gty.texi (Files): Fix GTY header file example.
+ 
+ 2021-08-09  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* tree-ssa-ccp.c (value_mask_to_min_max): Helper function to
+ 	determine the upper and lower bounds from a mask-value pair.
+ 	(bit_value_unop) [ABS_EXPR, ABSU_EXPR]: Add support for
+ 	absolute value and unsigned absolute value expressions.
+ 	(bit_value_binop):  Initialize *VAL's precision.
+ 	[LT_EXPR, LE_EXPR]: Use value_mask_to_min_max to determine
+ 	upper and lower bounds of operands.  Add LE_EXPR/GE_EXPR
+ 	support when the operands are unknown but potentially equal.
+ 	[MIN_EXPR, MAX_EXPR]: Support minimum/maximum expressions.
+ 
+ 2021-08-09  Bin Cheng  <bin.cheng@linux.alibaba.com>
+ 
+ 	* config/aarch64/aarch64.md
+ 	(*extend<SHORT:mode><GPI:mode>2_aarch64): Use %<GPI:w>0.
+ 
+ 2021-08-08  Sergei Trofimovich  <siarheit@google.com>
+ 
+ 	* lra-constraints.c: Fix s/otput/output/ typo.
+ 
+ 2021-08-06  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* builtins.c (expand_builtin_memchr): Move to gimple-ssa-warn-access.cc.
+ 	(expand_builtin_strcat): Same.
+ 	(expand_builtin_stpncpy): Same.
+ 	(expand_builtin_strncat): Same.
+ 	(check_read_access): Same.
+ 	(check_memop_access): Same.
+ 	(expand_builtin_strlen): Move checks to gimple-ssa-warn-access.cc.
+ 	(expand_builtin_strnlen): Same.
+ 	(expand_builtin_memcpy): Same.
+ 	(expand_builtin_memmove): Same.
+ 	(expand_builtin_mempcpy): Same.
+ 	(expand_builtin_strcpy): Same.
+ 	(expand_builtin_strcpy_args): Same.
+ 	(expand_builtin_stpcpy_1): Same.
+ 	(expand_builtin_strncpy): Same.
+ 	(expand_builtin_memset): Same.
+ 	(expand_builtin_bzero): Same.
+ 	(expand_builtin_strcmp): Same.
+ 	(expand_builtin_strncmp): Same.
+ 	(expand_builtin): Remove handlers.
+ 	(fold_builtin_strlen): Add a comment.
+ 	* builtins.h (check_access): Move to gimple-ssa-warn-access.cc.
+ 	* calls.c (maybe_warn_nonstring_arg): Same.
+ 	* diagnostic-spec.c (nowarn_spec_t::nowarn_spec_t): Add warning option.
+ 	* gimple-fold.c (gimple_fold_builtin_strcpy): Pass argument to callee.
+ 	(gimple_fold_builtin_stpcpy): Same.
+ 	* gimple-ssa-warn-access.cc (has_location): New function.
+ 	(get_location): Same.
+ 	(get_callee_fndecl): Same.
+ 	(call_nargs): Same.
+ 	(call_arg): Same.
+ 	(warn_string_no_nul): Define.
+ 	(unterminated_array): Same.
+ 	(check_nul_terminated_array): Same.
+ 	(maybe_warn_nonstring_arg): Same.
+ 	(maybe_warn_for_bound): Same.
+ 	(warn_for_access): Same.
+ 	(check_access): Same.
+ 	(check_memop_access): Same.
+ 	(check_read_access): Same.
+ 	(warn_dealloc_offset): Use helper functions.
+ 	(maybe_emit_free_warning): Same.
+ 	(class pass_waccess): Add members.
+ 	(check_strcat): New function.
+ 	(check_strncat): New function.
+ 	(check_stxcpy): New function.
+ 	(check_stxncpy): New function.
+ 	(check_strncmp): New function.
+ 	(pass_waccess::check_builtin): New function.
+ 	(pass_waccess::check): Call it.
+ 	* gimple-ssa-warn-access.h (warn_string_no_nul): Move here from
+ 	builtins.h.
+ 	(maybe_warn_for_bound): Same.
+ 	(check_access): Same.
+ 	(check_memop_access): Same.
+ 	(check_read_access): Same.
+ 	* pointer-query.h (struct access_data): Define a ctor overload.
+ 
+ 2021-08-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101801
+ 	* tree-vectorizer.h (vect_worthwhile_without_simd_p): Rename...
+ 	(vect_can_vectorize_without_simd_p): ... to this.
+ 	* tree-vect-loop.c (vect_worthwhile_without_simd_p): Rename...
+ 	(vect_can_vectorize_without_simd_p): ... to this and fold
+ 	in vect_min_worthwhile_factor.
+ 	(vect_min_worthwhile_factor): Remove.
+ 	(vectorizable_reduction): Adjust and remove the cost part.
+ 	* tree-vect-stmts.c (vectorizable_shift): Likewise.
+ 	(vectorizable_operation): Likewise.
+ 
+ 2021-08-06  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/101797
+ 	* config/i386/i386.md (cmove reg-to-reg move elimination peephole2s):
+ 	Add general_gr_operand predicate to operand 3.
+ 
+ 2021-08-06  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* tree-ssa-phiopt.c (cond_removal_in_builtin_zero_pattern): Use
+ 	CFN_BUILT_IN_CLRSB* instead of BUILT_IN_CLRSB* for consistency.
+ 
+ 2021-08-06  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve-builtins.cc (register_svpattern,
+ 	register_svprfop): Pass vec<> by pointer.
+ 	* langhooks-def.h (lhd_simulate_enum_decl): Likewise.
+ 	* langhooks.c (lhd_simulate_enum_decl): Likewise.
+ 	* langhooks.h (struct lang_hooks_for_types): Likewise.
+ 
+ 2021-08-06  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vst1_bf16_x2): Use
+ 	__builtin_memcpy instead of constructing an additional
+ 	__builtin_aarch64_simd_oi one vector at a time.
+ 	(vst1q_bf16_x2): Likewise.
+ 	(vst1_bf16_x3): Use __builtin_memcpy instead of constructing
+ 	an additional __builtin_aarch64_simd_ci one vector at a time.
+ 	(vst1q_bf16_x3): Likewise.
+ 	(vst1_bf16_x4): Use __builtin_memcpy instead of a union.
+ 	(vst1q_bf16_x4): Likewise.
+ 	(vst2_bf16): Use __builtin_memcpy instead of constructing an
+ 	additional __builtin_aarch64_simd_oi one vector at a time.
+ 	(vst2q_bf16): Likewise.
+ 	(vst3_bf16): Use __builtin_memcpy instead of constructing an
+ 	additional __builtin_aarch64_simd_ci mode one vector at a
+ 	time.
+ 	(vst3q_bf16): Likewise.
+ 	(vst4_bf16): Use __builtin_memcpy instead of constructing an
+ 	additional __builtin_aarch64_simd_xi one vector at a time.
+ 	(vst4q_bf16): Likewise.
+ 
+ 2021-08-06  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (__ST2_LANE_FUNC): Delete.
+ 	(__ST2Q_LANE_FUNC): Delete.
+ 	(vst2_lane_f16): Use __builtin_memcpy to copy vector
+ 	structure instead of constructing __builtin_aarch64_simd_oi
+ 	one vector at a time.
+ 	(vst2_lane_f32): Likewise.
+ 	(vst2_lane_f64): Likewise.
+ 	(vst2_lane_p8): Likewise.
+ 	(vst2_lane_p16): Likewise.
+ 	(vst2_lane_p64): Likewise.
+ 	(vst2_lane_s8): Likewise.
+ 	(vst2_lane_s16): Likewise.
+ 	(vst2_lane_s32): Likewise.
+ 	(vst2_lane_s64): Likewise.
+ 	(vst2_lane_u8): Likewise.
+ 	(vst2_lane_u16): Likewise.
+ 	(vst2_lane_u32): Likewise.
+ 	(vst2_lane_u64): Likewise.
+ 	(vst2_lane_bf16): Likewise.
+ 	(vst2q_lane_f16): Use __builtin_memcpy to copy vector
+ 	structure instead of using a union.
+ 	(vst2q_lane_f32): Likewise.
+ 	(vst2q_lane_f64): Likewise.
+ 	(vst2q_lane_p8): Likewise.
+ 	(vst2q_lane_p16): Likewise.
+ 	(vst2q_lane_p64): Likewise.
+ 	(vst2q_lane_s8): Likewise.
+ 	(vst2q_lane_s16): Likewise.
+ 	(vst2q_lane_s32): Likewise.
+ 	(vst2q_lane_s64): Likewise.
+ 	(vst2q_lane_u8): Likewise.
+ 	(vst2q_lane_u16): Likewise.
+ 	(vst2q_lane_u32): Likewise.
+ 	(vst2q_lane_u64): Likewise.
+ 	(vst2q_lane_bf16): Likewise.
+ 
+ 2021-08-06  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (__ST3_LANE_FUNC): Delete.
+ 	(__ST3Q_LANE_FUNC): Delete.
+ 	(vst3_lane_f16): Use __builtin_memcpy to copy vector
+ 	structure instead of constructing __builtin_aarch64_simd_ci
+ 	one vector at a time.
+ 	(vst3_lane_f32): Likewise.
+ 	(vst3_lane_f64): Likewise.
+ 	(vst3_lane_p8): Likewise.
+ 	(vst3_lane_p16): Likewise.
+ 	(vst3_lane_p64): Likewise.
+ 	(vst3_lane_s8): Likewise.
+ 	(vst3_lane_s16): Likewise.
+ 	(vst3_lane_s32): Likewise.
+ 	(vst3_lane_s64): Likewise.
+ 	(vst3_lane_u8): Likewise.
+ 	(vst3_lane_u16): Likewise.
+ 	(vst3_lane_u32): Likewise.
+ 	(vst3_lane_u64): Likewise.
+ 	(vst3_lane_bf16): Likewise.
+ 	(vst3q_lane_f16): Use __builtin_memcpy to copy vector
+ 	structure instead of using a union.
+ 	(vst3q_lane_f32): Likewise.
+ 	(vst3q_lane_f64): Likewise.
+ 	(vst3q_lane_p8): Likewise.
+ 	(vst3q_lane_p16): Likewise.
+ 	(vst3q_lane_p64): Likewise.
+ 	(vst3q_lane_s8): Likewise.
+ 	(vst3q_lane_s16): Likewise.
+ 	(vst3q_lane_s32): Likewise.
+ 	(vst3q_lane_s64): Likewise.
+ 	(vst3q_lane_u8): Likewise.
+ 	(vst3q_lane_u16): Likewise.
+ 	(vst3q_lane_u32): Likewise.
+ 	(vst3q_lane_u64): Likewise.
+ 	(vst3q_lane_bf16): Likewise.
+ 
+ 2021-08-06  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (__ST4_LANE_FUNC): Delete.
+ 	(__ST4Q_LANE_FUNC): Delete.
+ 	(vst4_lane_f16): Use __builtin_memcpy to copy vector
+ 	structure instead of constructing __builtin_aarch64_simd_xi
+ 	one vector at a time.
+ 	(vst4_lane_f32): Likewise.
+ 	(vst4_lane_f64): Likewise.
+ 	(vst4_lane_p8): Likewise.
+ 	(vst4_lane_p16): Likewise.
+ 	(vst4_lane_p64): Likewise.
+ 	(vst4_lane_s8): Likewise.
+ 	(vst4_lane_s16): Likewise.
+ 	(vst4_lane_s32): Likewise.
+ 	(vst4_lane_s64): Likewise.
+ 	(vst4_lane_u8): Likewise.
+ 	(vst4_lane_u16): Likewise.
+ 	(vst4_lane_u32): Likewise.
+ 	(vst4_lane_u64): Likewise.
+ 	(vst4_lane_bf16): Likewise.
+ 	(vst4q_lane_f16): Use __builtin_memcpy to copy vector
+ 	structure instead of using a union.
+ 	(vst4q_lane_f32): Likewise.
+ 	(vst4q_lane_f64): Likewise.
+ 	(vst4q_lane_p8): Likewise.
+ 	(vst4q_lane_p16): Likewise.
+ 	(vst4q_lane_p64): Likewise.
+ 	(vst4q_lane_s8): Likewise.
+ 	(vst4q_lane_s16): Likewise.
+ 	(vst4q_lane_s32): Likewise.
+ 	(vst4q_lane_s64): Likewise.
+ 	(vst4q_lane_u8): Likewise.
+ 	(vst4q_lane_u16): Likewise.
+ 	(vst4q_lane_u32): Likewise.
+ 	(vst4q_lane_u64): Likewise.
+ 	(vst4q_lane_bf16): Likewise.
+ 
+ 2021-08-06  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_option_override_internal): When
+ 	a target option is restored, it can have
+ 	rs6000_long_double_type_size set to FLOAT_PRECISION_TFmode
+ 	and error should not be emitted.
+ 
+ 2021-08-06  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	* gcov-io.h (gcov_write): Declare.
+ 	* gcov-io.c (gcov_write): New.
+ 	(gcov_write_counter): Remove.
+ 	(gcov_write_tag_length): Likewise.
+ 	(gcov_write_summary): Replace gcov_write_tag_length() with calls to
+ 	gcov_write_unsigned().
+ 	* doc/invoke.texi (fprofile-info-section): Mention
+ 	__gcov_info_to_gdca().
+ 
+ 2021-08-06  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* dominance.c (prune_bbs_to_update_dominators): Adjust by-value vec
+ 	arguments to by-reference.
+ 	(iterate_fix_dominators): Same.
+ 	* dominance.h (iterate_fix_dominators): Same.
+ 	* ipa-prop.h: Call auto_vec::to_vec_legacy.
+ 	* tree-data-ref.c (dump_data_dependence_relation): Adjust by-value vec
+ 	arguments to by-reference.
+ 	(debug_data_dependence_relation): Same.
+ 	(dump_data_dependence_relations): Same.
+ 	* tree-data-ref.h (debug_data_dependence_relation): Same.
+ 	(dump_data_dependence_relations): Same.
+ 	* tree-predcom.c (dump_chains): Same.
+ 	(initialize_root_vars_lm): Same.
+ 	(determine_unroll_factor): Same.
+ 	(replace_phis_by_defined_names): Same.
+ 	(insert_init_seqs): Same.
+ 	(pcom_worker::tree_predictive_commoning_loop): Call
+ 	 auto_vec::to_vec_legacy.
+ 	* tree-ssa-pre.c (insert_into_preds_of_block): Adjust by-value vec
+ 	arguments to by-reference.
+ 	* tree-ssa-threadbackward.c (populate_worklist): Same.
+ 	(back_threader::resolve_def): Same.
+ 	* tree-vect-data-refs.c (vect_check_nonzero_value): Same.
+ 	(vect_enhance_data_refs_alignment): Same.
+ 	(vect_check_lower_bound): Same.
+ 	(vect_prune_runtime_alias_test_list): Same.
+ 	(vect_permute_store_chain): Same.
+ 	* tree-vect-slp-patterns.c (vect_normalize_conj_loc): Same.
+ 	* tree-vect-stmts.c (vect_create_vectorized_demotion_stmts): Same.
+ 	* tree-vectorizer.h (vect_permute_store_chain): Same.
+ 	* vec.c (test_init): New function.
+ 	(vec_c_tests): Call new function.
+ 	* vec.h (vec): Declare ctors, dtor, and assignment.
+ 	(auto_vec::vec_to_legacy): New function.
+ 	(vec::copy): Adjust initialization.
+ 
+ 2021-08-05  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/99744
+ 	* config/i386/i386.c (ix86_can_inline_p): Ignore MASK_80387 if
+ 	callee only uses GPRs.
+ 	* config/i386/ia32intrin.h: Revert commit 5463cee2770.
+ 	* config/i386/serializeintrin.h: Revert commit 71958f740f1.
+ 	* config/i386/x86gprintrin.h: Add
+ 	#pragma GCC target("general-regs-only") and #pragma GCC pop_options
+ 	to disable non-GPR ISAs.
+ 
+ 2021-08-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR middle-end/101787
+ 	* doc/md.texi (cond_ashl, cond_ashr, cond_lshr): Document.
+ 
+ 2021-08-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vectorizer.h (vect_is_store_elt_extraction, vect_is_reduction)
+ 	(vect_reduc_type, vect_embedded_comparison_type, vect_comparison_type)
+ 	(vect_is_extending_load, vect_is_integer_truncation): New functions,
+ 	moved from aarch64.c but given different names.
+ 	* config/aarch64/aarch64.c (aarch64_is_store_elt_extraction)
+ 	(aarch64_is_reduction, aarch64_reduc_type)
+ 	(aarch64_embedded_comparison_type, aarch64_comparison_type)
+ 	(aarch64_extending_load_p, aarch64_integer_truncation_p): Delete
+ 	in favor of the above.  Update callers accordingly.
+ 
+ 2021-08-05  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/101723
+ 	* config/arm/arm-cpus.in (generic-armv7-a): Add quirk to suppress
+ 	writing .cpu directive in asm output.
+ 	* config/arm/arm.c (arm_identify_fpu_from_isa): New variable.
+ 	(arm_last_printed_arch_string): Delete.
+ 	(arm_last-printed_fpu_string): Delete.
+ 	(arm_configure_build_target): If use of floating-point/SIMD is
+ 	disabled, remove all fp/simd related features from the target ISA.
+ 	(last_arm_targ_options): New variable.
+ 	(arm_print_asm_arch_directives): Add new parameters.  Change order
+ 	of emitted directives and handle all cases here.
+ 	(arm_file_start): Always call arm_print_asm_arch_directives, move
+ 	all generation of .arch/.arch_extension here.
+ 	(arm_file_end): Call arm_print_asm_arch.
+ 	(arm_declare_function_name): Call arm_print_asm_arch_directives
+ 	instead of printing .arch/.fpu directives directly.
+ 
+ 2021-08-05  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* config/arm/arm.c (arm_configure_build_target): Don't call
+ 	arm_option_reconfigure_globals.
+ 	(arm_option_restore): Call arm_option_reconfigure_globals after
+ 	reconfiguring the target.
+ 	* config/arm/arm-c.c (arm_pragma_target_parse): Likewise.
+ 
+ 2021-08-05  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* config/arm/arm.c (arm_configure_build_target): Ensure the target's
+ 	arch_name is always set.
+ 
+ 2021-08-05  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64.c: Traverse RTL tree to prevent cost
+ 	of vec_select high-half from being added into Neon subtract
+ 	cost.
+ 
+ 2021-08-05  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64.c: Traverse RTL tree to prevent cost
+ 	of vec_select high-half from being added into Neon add cost.
+ 
+ 2021-08-05  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* cfgloop.h (loops_list::loops_list): Add one optional argument
+ 	root and adjust accordingly, update loop tree walking and factor
+ 	out to ...
+ 	* cfgloop.c (loops_list::walk_loop_tree): ... this.  New function.
+ 
+ 2021-08-05  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	PR tree-optimization/101626
+ 	* tree-sra.c (propagate_subaccesses_from_rhs): Do not set the
+ 	reverse scalar storage order on a pointer or vector component.
+ 
+ 2021-08-05  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/sse.md (cond_<code><mode>): New expander.
+ 
+ 2021-08-05  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/sse.md (cond_<code><mode>): New expander.
+ 
+ 2021-08-05  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/sse.md (cond_<code><mode>): New expander.
+ 
+ 2021-08-04  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/101570
+ 	* Makefile.in (ANALYZER_OBJS): Add analyzer/region-model-asm.o.
+ 
+ 2021-08-04  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101742
+ 	* config/i386/i386.h (STORE_MAX_PIECES): Allow 16/32/64 bytes
+ 	only if TARGET_INTER_UNIT_MOVES_TO_VEC is true.
+ 
+ 2021-08-04  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101772
+ 	* config/i386/i386-expand.c (ix86_expand_vector_move): Call
+ 	ix86_gen_scratch_sse_rtx to get a scratch SSE register to copy
+ 	data with SSE register from one memory location to another.
+ 
+ 2021-08-04  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* config/s390/s390.c (expand_perm_with_vpdi): New function.
+ 	(vectorize_vec_perm_const_1): Call expand_perm_with_vpdi.
+ 	* config/s390/vector.md (*vpdi1<mode>, @vpdi1<mode>): Enable a
+ 	parameterized expander.
+ 	(*vpdi4<mode>, @vpdi4<mode>): Likewise.
+ 
+ 2021-08-04  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* config/s390/s390.c (MAX_VECT_LEN): Define macro.
+ 	(struct expand_vec_perm_d): Define struct.
+ 	(expand_perm_with_merge): New function.
+ 	(vectorize_vec_perm_const_1): New function.
+ 	(s390_vectorize_vec_perm_const): New function.
+ 	(TARGET_VECTORIZE_VEC_PERM_CONST): Define target macro.
+ 
+ 2021-08-04  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* config/s390/vector.md (V_HW_64): Remove mode iterator.
+ 	(*vec_load_pair<mode>): Use V_HW_2 instead of V_HW_64.
+ 	* config/s390/vx-builtins.md
+ 	(vec_scatter_element<V_HW_2:mode>_SI): Use V_HW_2 instead of
+ 	V_HW_64.
+ 
+ 2021-08-04  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* config/s390/s390.md (UNSPEC_VEC_PERMI): Remove constant
+ 	definition.
+ 	* config/s390/vector.md (*vpdi1<mode>, *vpdi4<mode>): New pattern
+ 	definitions.
+ 	* config/s390/vx-builtins.md (*vec_permi<mode>): Emit generic rtx
+ 	instead of an unspec.
+ 
+ 2021-08-04  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* config/s390/s390-modes.def: Add more vector modes to support
+ 	concatenation of two vectors.
+ 	* config/s390/s390-protos.h (s390_expand_merge_perm_const): Add
+ 	prototype.
+ 	(s390_expand_merge): Likewise.
+ 	* config/s390/s390.c (s390_expand_merge_perm_const): New function.
+ 	(s390_expand_merge): New function.
+ 	* config/s390/s390.md (UNSPEC_VEC_MERGEH, UNSPEC_VEC_MERGEL):
+ 	Remove constant definitions.
+ 	* config/s390/vector.md (V_HW_2): Add mode iterators.
+ 	(VI_HW_4, V_HW_4): Rename VI_HW_4 to V_HW_4.
+ 	(vec_2x_nelts, vec_2x_wide): New mode attributes.
+ 	(*vmrhb, *vmrlb, *vmrhh, *vmrlh, *vmrhf, *vmrlf, *vmrhg, *vmrlg):
+ 	New pattern definitions.
+ 	(vec_widen_umult_lo_<mode>, vec_widen_umult_hi_<mode>)
+ 	(vec_widen_smult_lo_<mode>, vec_widen_smult_hi_<mode>)
+ 	(vec_unpacks_lo_v4sf, vec_unpacks_hi_v4sf, vec_unpacks_lo_v2df)
+ 	(vec_unpacks_hi_v2df): Adjust expanders to emit non-unspec RTX for
+ 	vec merge.
+ 	* config/s390/vx-builtins.md (V_HW_4): Remove mode iterator. Now
+ 	in vector.md.
+ 	(vec_mergeh<mode>, vec_mergel<mode>): Use s390_expand_merge to
+ 	emit vec merge pattern.
+ 
+ 2021-08-04  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_strip_extend_vec_half):
+ 	Define.
+ 	(aarch64_rtx_mult_cost): Traverse RTL tree to prevent cost of
+ 	vec_select high-half from being added into Neon multiply
+ 	cost.
+ 	* rtlanal.c (vec_series_highpart_p): Define.
+ 	* rtlanal.h (vec_series_highpart_p): Declare.
+ 
+ 2021-08-04  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_strip_duplicate_vec_elt):
+ 	Define.
+ 	(aarch64_rtx_mult_cost): Traverse RTL tree to prevent
+ 	vec_select cost from being added into Neon multiply cost.
+ 
+ 2021-08-04  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-loop.c (vect_better_loop_vinfo_p): Detect cases in
+ 	which old_loop_vinfo is an epilogue loop that handles a constant
+ 	number of iterations.
+ 
+ 2021-08-04  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-loop.c (vect_analyze_loop): Print a dump message
+ 	when a reanalyzed loop fails to be cheaper than the current
+ 	main loop.
+ 
+ 2021-08-04  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c: Fix a typo.
+ 
+ 2021-08-04  Vincent Lefèvre  <vincent-gcc@vinc17.net>
+ 
+ 	PR gcov-profile/101773
+ 	* gcov-io.c (gcov_close): Check return code of a fclose.
+ 
+ 2021-08-04  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+ 
+ 	PR ada/101575
+ 	* dwarf2out.c (dwarf2out_assembly_start): Emit a dummy
+ 	.file statement when needed.
+ 
+ 2021-08-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-data-refs.c (vect_check_gather_scatter):
+ 	Include widening conversions only when the result is
+ 	still handed by native gather or the current offset
+ 	size not already matches the data size.
+ 	Also succeed analysis in case there's no native support,
+ 	noted by a IFN_LAST ifn and a NULL decl.
+ 	(vect_analyze_data_refs): Always consider gathers.
+ 	* tree-vect-patterns.c (vect_recog_gather_scatter_pattern):
+ 	Test for no IFN gather rather than decl gather.
+ 	* tree-vect-stmts.c (vect_model_load_cost): Pass in the
+ 	gather-scatter info and cost emulated gathers accordingly.
+ 	(vect_truncate_gather_scatter_offset): Properly test for
+ 	no IFN gather.
+ 	(vect_use_strided_gather_scatters_p): Likewise.
+ 	(get_load_store_type): Handle emulated gathers and its
+ 	restrictions.
+ 	(vectorizable_load): Likewise.  Emulate them by extracting
+ 	scalar offsets, doing scalar loads and a vector construct.
+ 
+ 2021-08-04  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101742
+ 	* expr.c (op_by_pieces_d::op_by_pieces_d): Add a max_pieces
+ 	argument to set m_max_size.
+ 	(move_by_pieces_d): Pass MOVE_MAX_PIECES to op_by_pieces_d.
+ 	(store_by_pieces_d): Pass STORE_MAX_PIECES to op_by_pieces_d.
+ 	(compare_by_pieces_d): Pass COMPARE_MAX_PIECES to op_by_pieces_d.
+ 
+ 2021-08-04  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Marc Glisse  <marc.glisse@inria.fr>
+ 
+ 	* match.pd (bit_ior, bit_xor): Canonicalize (X*C1)|(X*C2) and
+ 	(X*C1)^(X*C2) as X*(C1+C2), and related variants, using
+ 	tree_nonzero_bits to ensure that operands are bit-wise disjoint.
+ 
+ 2021-08-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-forwprop.c (pass_forwprop::execute): Split
+ 	out code to decompose vector loads ...
+ 	(optimize_vector_load): ... here.  Generalize it to
+ 	handle intermediate widening and TARGET_MEM_REF loads
+ 	and apply it to loads with a supported vector mode as well.
+ 
+ 2021-08-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101756
+ 	* tree-vect-slp.c (vectorizable_bb_reduc_epilogue): Make sure
+ 	the result of the reduction epilogue is compatible to the original
+ 	scalar result.
+ 
+ 2021-08-04  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/101743
+ 	* config/i386/i386.md (peephole2): Refine predicate from
+ 	register_operand to general_reg_operand.
+ 
+ 2021-08-04  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-path.h (path_range_query::dump): Mark override.
+ 
+ 2021-08-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101769
+ 	* tree-tailcall.c (eliminate_tail_call): Add the created loop
+ 	for the first recursion and return it via the new output parameter.
+ 	(optimize_tail_call): Pass through new output param.
+ 	(tree_optimize_tail_calls_1): After creating all latches,
+ 	add the created loop to the loop tree.  Do not mark loops for fixup.
+ 
+ 2021-08-04  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Document threader-mode param.
+ 
+ 2021-08-04  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/sse.md (cond_fma<mode>): New expander.
+ 	(cond_fms<mode>): Ditto.
+ 	(cond_fnma<mode>): Ditto.
+ 	(cond_fnms<mode>): Ditto.
+ 
+ 2021-08-03  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	* config/rs6000/vsx.md (*vsx_le_perm_store_<mode>): Use && instead of &.
+ 
+ 2021-08-03  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	* config/rs6000/constraints.md: Remove "e" from the list of available
+ 	constraint characters.
+ 
+ 2021-08-03  Eugene Rozenfeld  <erozen@microsoft.com>
+ 
+ 	PR gcov-profile/71672
+ 	* auto-profile.c (afdo_indirect_call): Fix setup of the historgram value for indirect calls.
+ 
+ 2021-08-03  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config/rs6000/smmintrin.h (_mm_minpos_epu16): New.
+ 
+ 2021-08-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/i386.c (ix86_gen_scratch_sse_rtx): In 64-bit mode,
+ 	try XMM31 to avoid vzeroupper.
+ 
+ 2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* doc/invoke.texi: Document -mtune=neoverse-512tvb and
+ 	-mcpu=neoverse-512tvb.
+ 	* config/aarch64/aarch64-cores.def (neoverse-512tvb): New entry.
+ 	* config/aarch64/aarch64-tune.md: Regenerate.
+ 	* config/aarch64/aarch64.c (neoverse512tvb_sve_vector_cost)
+ 	(neoverse512tvb_sve_issue_info, neoverse512tvb_vec_issue_info)
+ 	(neoverse512tvb_vector_cost, neoverse512tvb_tunings): New structures.
+ 	(aarch64_adjust_body_cost_sve): Handle -mtune=neoverse-512tvb.
+ 	(aarch64_adjust_body_cost): Likewise.
+ 
+ 2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_add_stmt_cost): Only
+ 	record issue information for operations that occur in the
+ 	innermost loop.
+ 
+ 2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_multiply_add_p): Add a vec_flags
+ 	parameter.  Detect cases in which an Advanced SIMD MLA would almost
+ 	certainly require a MOV.
+ 	(aarch64_count_ops): Update accordingly.
+ 
+ 2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_is_store_elt_extraction): New
+ 	function, split out from...
+ 	(aarch64_detect_vector_stmt_subtype): ...here.
+ 	(aarch64_add_stmt_cost): Treat extracting element 0 as free.
+ 
+ 2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-protos.h (sve_vec_cost):
+ 	Add gather_load_x32_cost and gather_load_x64_cost.
+ 	* config/aarch64/aarch64.c (generic_sve_vector_cost)
+ 	(a64fx_sve_vector_cost, neoversev1_sve_vector_cost): Update
+ 	accordingly, using the values given by the scalar_load * number
+ 	of elements calculation that we used previously.
+ 	(aarch64_detect_vector_stmt_subtype): Use the new fields.
+ 
+ 2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_adjust_body_cost_sve): New
+ 	function, split out from...
+ 	(aarch64_adjust_body_cost): ...here.
+ 
+ 2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/fractional-cost.h: New file.
+ 	* config/aarch64/aarch64.c: Include <algorithm> (indirectly)
+ 	and cost_fraction.h.
+ 	(vec_cost_fraction): New typedef.
+ 	(aarch64_detect_scalar_stmt_subtype): Use it for statement costs.
+ 	(aarch64_detect_vector_stmt_subtype): Likewise.
+ 	(aarch64_sve_adjust_stmt_cost, aarch64_adjust_stmt_cost): Likewise.
+ 	(aarch64_estimate_min_cycles_per_iter): Use vec_cost_fraction
+ 	for cycle counts.
+ 	(aarch64_adjust_body_cost): Likewise.
+ 	(aarch64_test_cost_fraction): New function.
+ 	(aarch64_run_selftests): Call it.
+ 
+ 2021-08-03  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-protos.h (tune_params::sve_width): Turn
+ 	into a bitmask.
+ 	* config/aarch64/aarch64.c (aarch64_cmp_autovec_modes): Update
+ 	accordingly.
+ 	(aarch64_estimated_poly_value): Likewise.  Use the least significant
+ 	set bit for the minimum and likely values.  Use the most significant
+ 	set bit for the maximum value.
+ 
+ 2021-08-03  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/sse.md (cond_<insn><mode>): New expander.
+ 	(cond_mul<mode>): Ditto.
+ 
+ 2021-08-03  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* tree-cfg.c (move_sese_region_to_fn): Fix typos on dloop.
+ 
+ 2021-08-03  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/sse.md (cond_<insn><mode>):New expander.
+ 	(cond_mul<mode>): Ditto.
+ 	(cond_div<mode>): Ditto.
+ 
+ 2021-08-02  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/i386.c (ix86_finalize_stack_frame_flags): Also
+ 	check stack_realign_needed for stack realignment.
+ 	(ix86_legitimate_constant_p): Always allow CONST_WIDE_INT smaller
+ 	than the largest integer supported by vector register.
+ 	* config/i386/i386.h (MAX_MOVE_MAX): New.  Set to 64.
+ 	(MOVE_MAX): Set to bytes of the largest integer supported by
+ 	vector register.
+ 	(STORE_MAX_PIECES): New.
+ 
+ 2021-08-02  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_vector_move): Call
+ 	ix86_gen_scratch_sse_rtx to get a scratch SSE register to copy
+ 	data from one memory location to another.
+ 
+ 2021-08-02  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR middle-end/90773
+ 	* config/i386/i386.c (TARGET_GEN_MEMSET_SCRATCH_RTX): New.
+ 
+ 2021-08-02  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/101724
+ 	* params.opt: Remove --param=threader-iterative.
+ 	* tree-ssa-threadbackward.c (pass_thread_jumps::execute): Remove
+ 	iterative mode.
+ 
+ 2021-08-02  Tom de Vries  <tdevries@suse.de>
+ 
+ 	PR middle-end/101665
+ 	* doc/extend.texi (nonnull attribute): Improve documentation.
+ 
+ 2021-08-02  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR rtl-optimization/101683
+ 	* rtlanal.c (may_trap_p_1): Handle UNSIGNED_FIX.
+ 
+ 2021-08-02  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	* tree-ssa-phiopt.c (cond_removal_in_builtin_zero_pattern):
+ 	Renamed from cond_removal_in_popcount_clz_ctz_pattern.
+ 	Add support for BSWAP, FFS, PARITY and CLRSB builtins.
+ 	(tree_ssa_phiop_worker): Update call to function above.
+ 
+ 2021-08-01  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/78103
+ 	* config/i386/i386.md (bsr_rex64_1_zext): New.
+ 	(combine splitter for constant - clzll): Replace gen_bsr_rex64_1
+ 	with gen_bsr_rex64_1_zext.
+ 
+ 2021-07-31  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/78103
+ 	* config/i386/i386.md (bsr_rex64_1, bsr_1, bsr_zext_1): New
+ 	define_insn patterns.
+ 	(*bsr_rex64_2, *bsr_2): New define_insn_and_split patterns.
+ 	Add combine splitters for constant - clz.
+ 	(clz<mode>2): Use a temporary pseudo for bsr result.
+ 
+ 2021-07-30  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config/rs6000/smmintrin.h (_mm_floor_pd, _mm_floor_ps,
+ 	_mm_floor_sd, _mm_floor_ss): New.
+ 
+ 2021-07-30  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config/rs6000/smmintrin.h (_mm_ceil_pd, _mm_ceil_ps,
+ 	_mm_ceil_sd, _mm_ceil_ss): New.
+ 
+ 2021-07-30  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config/rs6000/smmintrin.h (_mm_blend_pd, _mm_blendv_pd,
+ 	_mm_blend_ps, _mm_blendv_ps): New.
+ 
+ 2021-07-30  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.md (*dec_cmov<mode>): New define_insn_and_split
+ 	to generate a conditional move using the carry flag after sub $1.
+ 	(peephole2): Eliminate a register-to-register move by inverting
+ 	the condition of a conditional move.
+ 
+ 2021-07-30  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	* config/mmix/mmix.md ("call", "call_value", "*call_real")
+ 	("*call_value_real"): Don't generate rtx mentioning the generic
+ 	operands 1 and 2 to "call", and similarly for "call_value".
+ 	* config/mmix/mmix.c (mmix_print_operand_punct_valid_p)
+ 	(mmix_print_operand): Use '!' instead of 'p'.
+ 
+ 2021-07-30  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	* doc/md.texi (call): Correct information about operand 2.
+ 	* config/mmix/mmix.md ("call", "call_value"): Remove fixed FIXMEs.
+ 
+ 2021-07-30  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* range-op.cc (operator_trunc_mod::wi_fold): Fold constants.
+ 
+ 2021-07-30  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* range-op.cc (operator_div::wi_fold): Return UNDEFINED for [0, 0] divisor.
+ 
+ 2021-07-30  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (*::set_bb_range): Change const basic_block to
+ 	const_basic_block..
+ 	(*::get_bb_range): Ditto.
+ 	(*::bb_range_p): Ditto.
+ 	* gimple-range-cache.h: Change prototypes.
+ 
+ 2021-07-30  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR middle-end/90773
+ 	* builtins.c (builtin_memcpy_read_str): Change the mode argument
+ 	from scalar_int_mode to fixed_size_mode.
+ 	(builtin_strncpy_read_str): Likewise.
+ 	(gen_memset_value_from_prev): New function.
+ 	(builtin_memset_read_str): Change the mode argument from
+ 	scalar_int_mode to fixed_size_mode.  Use gen_memset_value_from_prev
+ 	and support CONST_VECTOR.
+ 	(builtin_memset_gen_str): Likewise.
+ 	(try_store_by_multiple_pieces): Use by_pieces_constfn to declare
+ 	constfun.
+ 	* builtins.h (builtin_strncpy_read_str): Replace scalar_int_mode
+ 	with fixed_size_mode.
+ 	(builtin_memset_read_str): Likewise.
+ 	* expr.c (widest_int_mode_for_size): Renamed to ...
+ 	(widest_fixed_size_mode_for_size): Add a bool argument to
+ 	indicate if QI vector mode can be used.
+ 	(by_pieces_ninsns): Call widest_fixed_size_mode_for_size
+ 	instead of widest_int_mode_for_size.
+ 	(pieces_addr::adjust): Change the mode argument from
+ 	scalar_int_mode to fixed_size_mode.
+ 	(op_by_pieces_d): Make m_len read-only.  Add a bool member,
+ 	m_qi_vector_mode, to indicate that QI vector mode can be used.
+ 	(op_by_pieces_d::op_by_pieces_d): Add a bool argument to
+ 	initialize m_qi_vector_mode.  Call widest_fixed_size_mode_for_size
+ 	instead of widest_int_mode_for_size.
+ 	(op_by_pieces_d::get_usable_mode): Change the mode argument from
+ 	scalar_int_mode to fixed_size_mode.  Call
+ 	widest_fixed_size_mode_for_size instead of
+ 	widest_int_mode_for_size.
+ 	(op_by_pieces_d::smallest_fixed_size_mode_for_size): New member
+ 	function to return the smallest integer or QI vector mode.
+ 	(op_by_pieces_d::run): Call widest_fixed_size_mode_for_size
+ 	instead of widest_int_mode_for_size.  Call
+ 	smallest_fixed_size_mode_for_size instead of
+ 	smallest_int_mode_for_size.
+ 	(store_by_pieces_d::store_by_pieces_d): Add a bool argument to
+ 	indicate that QI vector mode can be used and pass it to
+ 	op_by_pieces_d::op_by_pieces_d.
+ 	(can_store_by_pieces): Call widest_fixed_size_mode_for_size
+ 	instead of widest_int_mode_for_size.  Pass memsetp to
+ 	widest_fixed_size_mode_for_size to support QI vector mode.
+ 	Allow all CONST_VECTORs for memset if vec_duplicate is supported.
+ 	(store_by_pieces): Pass memsetp to
+ 	store_by_pieces_d::store_by_pieces_d.
+ 	(clear_by_pieces_1): Removed.
+ 	(clear_by_pieces): Replace clear_by_pieces_1 with
+ 	builtin_memset_read_str and pass true to store_by_pieces_d to
+ 	support vector mode broadcast.
+ 	(string_cst_read_str): Change the mode argument from
+ 	scalar_int_mode to fixed_size_mode.
+ 	* expr.h (by_pieces_constfn): Change scalar_int_mode to
+ 	fixed_size_mode.
+ 	(by_pieces_prev): Likewise.
+ 	* rtl.h (lowpart_subreg_regno): New.
+ 	* rtlanal.c (lowpart_subreg_regno): New.  A wrapper around
+ 	simplify_subreg_regno.
+ 	* target.def (gen_memset_scratch_rtx): New hook.
+ 	* doc/tm.texi.in: Add TARGET_GEN_MEMSET_SCRATCH_RTX.
+ 	* doc/tm.texi: Regenerated.
+ 
+ 2021-07-30  Xi Ruoyao  <xry111@mengyan1223.wang>
+ 
+ 	PR target/94780
+ 	* config/mips/mips.c (mips_atomic_assign_expand_fenv): Use
+ 	  TARGET_EXPR instead of MODIFY_EXPR.
+ 
+ 2021-07-30  Xi Ruoyao  <xry111@mengyan1223.wang>
+ 
+ 	PR target/101132
+ 	* config/mips/mips-protos.h (mips_expand_vec_cmp_expr): Declare.
+ 	* config/mips/mips.c (mips_expand_vec_cmp_expr): New function.
+ 	* config/mips/mips-msa.md (vec_cmp<MSA:mode><mode_i>): New
+ 	  expander.
+ 	  (vec_cmpu<IMSA:mode><mode_i>): New expander.
+ 
+ 2021-07-30  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101685
+ 	* config/i386/i386-options.c (ix86_option_override_internal):
+ 	Don't enable LZCNT/POPCNT if they have been disabled explicitly.
+ 
+ 2021-07-30  prathamesh.kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	PR target/66791
+ 	* config/arm/arm_neon.h (vld1_p64): Replace call to builtin by
+ 	explicitly dereferencing __a.
+ 	(vld1_s64): Likewise.
+ 	(vld1_u64): Likewise.
+ 	* config/arm/arm_neon_builtins.def (vld1): Remove entry for di
+ 	and change to VAR13.
+ 
+ 2021-07-30  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-loop-versioning.cc (lv_dom_walker::lv_dom_walker): Remove
+ 	use of m_range_analyzer.
+ 	(loop_versioning::lv_dom_walker::before_dom_children): Same.
+ 	(loop_versioning::lv_dom_walker::after_dom_children): Remove.
+ 	(loop_versioning::prune_loop_conditions): Replace vr_values use
+ 	with range_query interface.
+ 	(pass_loop_versioning::execute): Use ranger.
+ 
+ 2021-07-30  Xi Ruoyao  <xry111@mengyan1223.wang>
+ 
+ 	PR ipa/101396
+ 	* ipa-devirt.c (ipa_odr_read_section): Compare the precision of
+ 	  enum values, and emit a warning if they mismatch.
+ 
+ 2021-07-30  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* cfgloop.h (as_const): New function.
+ 	(class loop_iterator): Rename to ...
+ 	(class loops_list): ... this.
+ 	(loop_iterator::next): Rename to ...
+ 	(loops_list::Iter::fill_curr_loop): ... this and adjust.
+ 	(loop_iterator::loop_iterator): Rename to ...
+ 	(loops_list::loops_list): ... this and adjust.
+ 	(loops_list::Iter): New class.
+ 	(loops_list::iterator): New type.
+ 	(loops_list::const_iterator): New type.
+ 	(loops_list::begin): New function.
+ 	(loops_list::end): Likewise.
+ 	(loops_list::begin const): Likewise.
+ 	(loops_list::end const): Likewise.
+ 	(FOR_EACH_LOOP): Remove.
+ 	(FOR_EACH_LOOP_FN): Remove.
+ 	* cfgloop.c (flow_loops_dump): Adjust FOR_EACH_LOOP* with range-based
+ 	for loop with loops_list instance.
+ 	(sort_sibling_loops): Likewise.
+ 	(disambiguate_loops_with_multiple_latches): Likewise.
+ 	(verify_loop_structure): Likewise.
+ 	* cfgloopmanip.c (create_preheaders): Likewise.
+ 	(force_single_succ_latches): Likewise.
+ 	* config/aarch64/falkor-tag-collision-avoidance.c
+ 	(execute_tag_collision_avoidance): Likewise.
+ 	* config/mn10300/mn10300.c (mn10300_scan_for_setlb_lcc): Likewise.
+ 	* config/s390/s390.c (s390_adjust_loops): Likewise.
+ 	* doc/loop.texi: Likewise.
+ 	* gimple-loop-interchange.cc (pass_linterchange::execute): Likewise.
+ 	* gimple-loop-jam.c (tree_loop_unroll_and_jam): Likewise.
+ 	* gimple-loop-versioning.cc (loop_versioning::analyze_blocks): Likewise.
+ 	(loop_versioning::make_versioning_decisions): Likewise.
+ 	* gimple-ssa-split-paths.c (split_paths): Likewise.
+ 	* graphite-isl-ast-to-gimple.c (graphite_regenerate_ast_isl): Likewise.
+ 	* graphite.c (canonicalize_loop_form): Likewise.
+ 	(graphite_transform_loops): Likewise.
+ 	* ipa-fnsummary.c (analyze_function_body): Likewise.
+ 	* ipa-pure-const.c (analyze_function): Likewise.
+ 	* loop-doloop.c (doloop_optimize_loops): Likewise.
+ 	* loop-init.c (loop_optimizer_finalize): Likewise.
+ 	(fix_loop_structure): Likewise.
+ 	* loop-invariant.c (calculate_loop_reg_pressure): Likewise.
+ 	(move_loop_invariants): Likewise.
+ 	* loop-unroll.c (decide_unrolling): Likewise.
+ 	(unroll_loops): Likewise.
+ 	* modulo-sched.c (sms_schedule): Likewise.
+ 	* predict.c (predict_loops): Likewise.
+ 	(pass_profile::execute): Likewise.
+ 	* profile.c (branch_prob): Likewise.
+ 	* sel-sched-ir.c (sel_finish_pipelining): Likewise.
+ 	(sel_find_rgns): Likewise.
+ 	* tree-cfg.c (replace_loop_annotate): Likewise.
+ 	(replace_uses_by): Likewise.
+ 	(move_sese_region_to_fn): Likewise.
+ 	* tree-if-conv.c (pass_if_conversion::execute): Likewise.
+ 	* tree-loop-distribution.c (loop_distribution::execute): Likewise.
+ 	* tree-parloops.c (parallelize_loops): Likewise.
+ 	* tree-predcom.c (tree_predictive_commoning): Likewise.
+ 	* tree-scalar-evolution.c (scev_initialize): Likewise.
+ 	(scev_reset): Likewise.
+ 	* tree-ssa-dce.c (find_obviously_necessary_stmts): Likewise.
+ 	* tree-ssa-live.c (remove_unused_locals): Likewise.
+ 	* tree-ssa-loop-ch.c (ch_base::copy_headers): Likewise.
+ 	* tree-ssa-loop-im.c (analyze_memory_references): Likewise.
+ 	(tree_ssa_lim_initialize): Likewise.
+ 	* tree-ssa-loop-ivcanon.c (canonicalize_induction_variables): Likewise.
+ 	* tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize): Likewise.
+ 	* tree-ssa-loop-manip.c (get_loops_exits): Likewise.
+ 	* tree-ssa-loop-niter.c (estimate_numbers_of_iterations): Likewise.
+ 	(free_numbers_of_iterations_estimates): Likewise.
+ 	* tree-ssa-loop-prefetch.c (tree_ssa_prefetch_arrays): Likewise.
+ 	* tree-ssa-loop-split.c (tree_ssa_split_loops): Likewise.
+ 	* tree-ssa-loop-unswitch.c (tree_ssa_unswitch_loops): Likewise.
+ 	* tree-ssa-loop.c (gate_oacc_kernels): Likewise.
+ 	(pass_scev_cprop::execute): Likewise.
+ 	* tree-ssa-propagate.c (clean_up_loop_closed_phi): Likewise.
+ 	* tree-ssa-sccvn.c (do_rpo_vn): Likewise.
+ 	* tree-ssa-threadupdate.c
+ 	(jump_thread_path_registry::thread_through_all_blocks): Likewise.
+ 	* tree-vectorizer.c (vectorize_loops): Likewise.
+ 	* tree-vrp.c (vrp_asserts::find_assert_locations): Likewise.
+ 
+ 2021-07-29  Hans-Peter Nilsson  <hp@bitrange.com>
+ 
+ 	* config/mmix/mmix.c (mmix_function_arg_1): Avoid
+ 	generating a VOIDmode register for e.g the
+ 	function_arg_info::end_marker.
+ 
+ 2021-07-29  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/h8300-modes.def: Add CCZ, CCV and CCC, drop CCZNV.
+ 	* config/h8300/h8300.md (H8cc mode iterator): Add CCZ.
+ 	(cc mode_attr): Similarly.
+ 	(ccz subst_attr): Similarly.
+ 	* config/h8300/jumpcall.md: Add new patterns for branch-on-bit.
+ 	* config/h8300/testcompare.md: Remove various cc0 based patterns
+ 	that had been commented out.  Add pattern to set CCZ from a bit
+ 	test.
+ 
+ 2021-07-29  Thomas Schwinge  <thomas@codesourcery.com>
+ 	    Julian Brown  <julian@codesourcery.com>
+ 	    Kwok Cheung Yeung  <kcy@codesourcery.com>
+ 
+ 	* omp-offload.c (oacc_loop_xform_head_tail, oacc_loop_process):
+ 	'update_stmt' after modification.
+ 	(pass_oacc_loop_designation): New function, extracted out of...
+ 	(pass_oacc_device_lower): ... this.
+ 	(pass_data_oacc_loop_designation, pass_oacc_loop_designation)
+ 	(make_pass_oacc_loop_designation): New
+ 	* passes.def: Add it.
+ 	* tree-parloops.c (create_parallel_loop): Adjust.
+ 	* tree-pass.h (make_pass_oacc_loop_designation): New.
+ 
+ 2021-07-29  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* flag-types.h (enum threader_mode): New.
+ 	* params.opt: Add entry for --param=threader-mode.
+ 	* tree-ssa-threadbackward.c (THREADER_ITERATIVE_MODE): New.
+ 	(class back_threader): New.
+ 	(back_threader::back_threader): New.
+ 	(back_threader::~back_threader): New.
+ 	(back_threader::maybe_register_path): New.
+ 	(back_threader::find_taken_edge): New.
+ 	(back_threader::find_taken_edge_switch): New.
+ 	(back_threader::find_taken_edge_cond): New.
+ 	(back_threader::resolve_def): New.
+ 	(back_threader::resolve_phi): New.
+ 	(back_threader::find_paths_to_names): New.
+ 	(back_threader::find_paths): New.
+ 	(dump_path): New.
+ 	(debug): New.
+ 	(thread_jumps::find_jump_threads_backwards): Call ranger threader.
+ 	(thread_jumps::find_jump_threads_backwards_with_ranger): New.
+ 	(pass_thread_jumps::execute): Abstract out code...
+ 	(try_thread_blocks): ...here.
+ 	* tree-ssa-threadedge.c (jump_threader::thread_outgoing_edges):
+ 	Abstract out threading candidate code to...
+ 	(single_succ_to_potentially_threadable_block): ...here.
+ 	* tree-ssa-threadedge.h (single_succ_to_potentially_threadable_block):
+ 	New.
+ 	* tree-ssa-threadupdate.c (register_jump_thread): Return boolean.
+ 	* tree-ssa-threadupdate.h (class jump_thread_path_registry):
+ 	Return bool from register_jump_thread.
+ 
+ 2021-07-29  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* target.def: in0 and in1 do not need to be registers.
+ 	* doc/tm.texi: Regenerate.
+ 
+ 2021-07-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/39821
+ 	* config/i386/i386.c (ix86_widen_mult_cost): New function.
+ 	(ix86_add_stmt_cost): Use ix86_widen_mult_cost for
+ 	WIDEN_MULT_EXPR.
+ 
+ 2021-07-29  Jiufu Guo  <guojiufu@linux.ibm.com>
+ 
+ 	PR target/61837
+ 	* config/rs6000/rs6000.c (TARGET_PREFERRED_DOLOOP_MODE): New hook.
+ 	(rs6000_preferred_doloop_mode): New hook.
+ 	* doc/tm.texi: Regenerate.
+ 	* doc/tm.texi.in: Add hook preferred_doloop_mode.
+ 	* target.def (preferred_doloop_mode): New hook.
+ 	* targhooks.c (default_preferred_doloop_mode): New hook.
+ 	* targhooks.h (default_preferred_doloop_mode): New hook.
+ 	* tree-ssa-loop-ivopts.c (compute_doloop_base_on_mode): New function.
+ 	(add_iv_candidate_for_doloop): Call targetm.preferred_doloop_mode
+ 	and compute_doloop_base_on_mode.
+ 
+ 2021-07-28  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/101494
+ 	* tree-ssa-uninit.c (maybe_warn_operand): Correct object offset
+ 	and size computation.
+ 
+ 2021-07-28  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/101601
+ 	* gimple-array-bounds.cc (array_bounds_checker::check_mem_ref): Remove
+ 	a pointless test.
+ 	Handle pointers to functions.
+ 
+ 2021-07-28  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* Makefile.in (OBJS): Add gimple-ssa-warn-access.o and pointer-query.o.
+ 	* attribs.h (fndecl_dealloc_argno): Move fndecl_dealloc_argno to tree.h.
+ 	* builtins.c (compute_objsize_r): Move to pointer-query.cc.
+ 	(access_ref::access_ref): Same.
+ 	(access_ref::phi): Same.
+ 	(access_ref::get_ref): Same.
+ 	(access_ref::size_remaining): Same.
+ 	(access_ref::offset_in_range): Same.
+ 	(access_ref::add_offset): Same.
+ 	(access_ref::inform_access): Same.
+ 	(ssa_name_limit_t::visit_phi): Same.
+ 	(ssa_name_limit_t::leave_phi): Same.
+ 	(ssa_name_limit_t::next): Same.
+ 	(ssa_name_limit_t::next_phi): Same.
+ 	(ssa_name_limit_t::~ssa_name_limit_t): Same.
+ 	(pointer_query::pointer_query): Same.
+ 	(pointer_query::get_ref): Same.
+ 	(pointer_query::put_ref): Same.
+ 	(pointer_query::flush_cache): Same.
+ 	(warn_string_no_nul): Move to gimple-ssa-warn-access.cc.
+ 	(check_nul_terminated_array): Same.
+ 	(unterminated_array): Same.
+ 	(maybe_warn_for_bound): Same.
+ 	(check_read_access): Same.
+ 	(warn_for_access): Same.
+ 	(get_size_range): Same.
+ 	(check_access): Same.
+ 	(gimple_call_alloc_size): Move to tree.c.
+ 	(gimple_parm_array_size): Move to pointer-query.cc.
+ 	(get_offset_range): Same.
+ 	(gimple_call_return_array): Same.
+ 	(handle_min_max_size): Same.
+ 	(handle_array_ref): Same.
+ 	(handle_mem_ref): Same.
+ 	(compute_objsize): Same.
+ 	(gimple_call_alloc_p): Move to gimple-ssa-warn-access.cc.
+ 	(call_dealloc_argno): Same.
+ 	(fndecl_dealloc_argno): Same.
+ 	(new_delete_mismatch_p): Same.
+ 	(matching_alloc_calls_p): Same.
+ 	(warn_dealloc_offset): Same.
+ 	(maybe_emit_free_warning): Same.
+ 	* builtins.h (check_nul_terminated_array): Move to
+ 	gimple-ssa-warn-access.h.
+ 	(check_nul_terminated_array): Same.
+ 	(warn_string_no_nul): Same.
+ 	(unterminated_array): Same.
+ 	(class ssa_name_limit_t): Same.
+ 	(class pointer_query): Same.
+ 	(struct access_ref): Same.
+ 	(class range_query): Same.
+ 	(struct access_data): Same.
+ 	(gimple_call_alloc_size): Same.
+ 	(gimple_parm_array_size): Same.
+ 	(compute_objsize): Same.
+ 	(class access_data): Same.
+ 	(maybe_emit_free_warning): Same.
+ 	* calls.c (initialize_argument_information): Remove call to
+ 	maybe_emit_free_warning.
+ 	* gimple-array-bounds.cc: Include new header..
+ 	* gimple-fold.c: Same.
+ 	* gimple-ssa-sprintf.c: Same.
+ 	* gimple-ssa-warn-restrict.c: Same.
+ 	* passes.def: Add pass_warn_access.
+ 	* tree-pass.h (make_pass_warn_access): Declare.
+ 	* tree-ssa-strlen.c: Include new headers.
+ 	* tree.c (fndecl_dealloc_argno): Move here from builtins.c.
+ 	* tree.h (fndecl_dealloc_argno): Move here from attribs.h.
+ 	* gimple-ssa-warn-access.cc: New file.
+ 	* gimple-ssa-warn-access.h: New file.
+ 	* pointer-query.cc: New file.
+ 	* pointer-query.h: New file.
+ 
+ 2021-07-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/101624
+ 	* ubsan.c (maybe_instrument_pointer_overflow,
+ 	instrument_object_size): Only test DECL_REGISTER on VAR_DECLs,
+ 	PARM_DECLs or RESULT_DECLs.
+ 	* sanopt.c (maybe_optimize_ubsan_ptr_ifn): Likewise.
+ 
+ 2021-07-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/101642
+ 	* match.pd (bswap16 (x) == bswap16 (y)): Cast both operands
+ 	to type of bswap16 for comparison.
+ 	(bswap16 (x) == cst): Cast bswap16 operand to type of cst.
+ 
+ 2021-07-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101615
+ 	* tree-vect-slp.c (vect_optimize_slp): Materialize permutes
+ 	at CTOR SLP graph entries.
+ 
+ 2021-07-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64.md (*extend<SHORT:mode><GPI:mode>2_aarch64):
+ 	Add "r,w" alternative.
+ 
+ 2021-07-28  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101456
+ 	* config/i386/i386.c (ix86_avx_u128_mode_needed): Don't set
+ 	AVX_U128_DIRTY when all bits are zero.
+ 
+ 2021-07-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101615
+ 	* tree-vect-slp.c (vect_optimize_slp): Pre-existing vector
+ 	external nodes cannot be permuted so make them perm_out 0.
+ 
+ 2021-07-28  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	PR target/100208
+ 	* config.in: Regenerate.
+ 	* config/gcn/gcn-hsa.h (A_FIJI): New define.
+ 	(A_900): New define.
+ 	(A_906): New define.
+ 	(A_908): New define.
+ 	(ASM_SPEC): Use A_FIJI, A_900, A_906 and A_908.
+ 	* config/gcn/gcn.c (output_file_start): Adjust attributes according
+ 	to the assembler capabilities.
+ 	* config/gcn/mkoffload.c (main): Likewise.
+ 	* configure: Regenerate.
+ 	* configure.ac: Add tests for LLVM assembler attribute features.
+ 
+ 2021-07-28  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-gori.cc (gori_compute::outgoing_edge_range_p): Check for
+ 	cond_false and cond_true on branches.
+ 
+ 2021-07-28  Bin Cheng  <bin.cheng@linux.alibaba.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_gen_adjusted_ldpstp): use
+ 	gcc_stablesort.
+ 
+ 2021-07-28  Bin Cheng  <bin.cheng@linux.alibaba.com>
+ 
+ 	* alias.c (init_alias_analysis): Don't skip prologue/epilogue.
+ 
+ 2021-07-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/101611
+ 	* config/i386/sse.md (vashr<mode>3): Split into vashrv8di3 expander
+ 	and vashrv4di3 expander, where the latter requires just TARGET_AVX2
+ 	and has special !TARGET_AVX512VL expansion.
+ 	(vashrv2di3<mask_name>): Rename to ...
+ 	(vashrv2di3): ... this.  Change condition to TARGET_XOP || TARGET_AVX2
+ 	and add special !TARGET_XOP && !TARGET_AVX512VL expansion.
+ 
+ 2021-07-28  Martin Uecker  <muecker@gwdg.de>
+ 
+ 	* calls.c (maybe_warn_rdwr_sizes): Correct argument
+ 	numbers in warning that were switched.
+ 
+ 2021-07-28  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR tree-optimization/101596
+ 	* tree-vect-patterns.c (vect_recog_mulhs_pattern): Fix wrong check
+ 	by using new_type's precision instead.
+ 
+ 2021-07-28  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/99881
+ 	* config/i386/i386.h (processor_costs): Add new member
+ 	integer_to_sse.
+ 	* config/i386/x86-tune-costs.h (ix86_size_cost, i386_cost,
+ 	i486_cost, pentium_cost, lakemont_cost, pentiumpro_cost,
+ 	geode_cost, k6_cost, athlon_cost, k8_cost, amdfam10_cost,
+ 	bdver_cost, znver1_cost, znver2_cost, znver3_cost,
+ 	btver1_cost, btver2_cost, btver3_cost, pentium4_cost,
+ 	nocona_cost, atom_cost, atom_cost, slm_cost, intel_cost,
+ 	generic_cost, core_cost): Initialize integer_to_sse same value
+ 	as sse_op.
+ 	(skylake_cost): Initialize integer_to_sse twice as much as sse_op.
+ 	* config/i386/i386.c (ix86_builtin_vectorization_cost):
+ 	Use integer_to_sse instead of sse_op to calculate the cost of
+ 	vec_construct.
+ 
+ 2021-07-27  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (write_ovld_static_init): New
+ 	function.
+ 	(write_init_file): Call write_ovld_static_init.
+ 
+ 2021-07-27  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (write_bif_static_init): New
+ 	function.
+ 	(write_init_file): Call write_bif_static_init.
+ 
+ 2021-07-27  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (typemap): New struct.
+ 	(TYPE_MAP_SIZE): New macro.
+ 	(type_map): New initialized variable.
+ 	(typemap_cmp): New function.
+ 	(write_type_node): Likewise.
+ 	(write_fntype_init): Implement.
+ 
+ 2021-07-27  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR tree-optimization/101584
+ 	* tree-ssa-uninit.c (builtin_call_nomodifying_p): New function.
+ 	(check_defs): Call it.
+ 
+ 2021-07-27  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-dom.c (dom_jump_threader_simplifier):
+ 	Put avail_exprs_stack in the class, instead of passing it to
+ 	jump_threader_simplifier.
+ 	(dom_jump_threader_simplifier::simplify): Add state argument.
+ 	(dom_opt_dom_walker): Add state.
+ 	(pass_dominator::execute): Pass state to threader.
+ 	(dom_opt_dom_walker::before_dom_children): Use state.
+ 	* tree-ssa-threadedge.c (jump_threader::jump_threader): Replace
+ 	arguments by state.
+ 	(jump_threader::record_temporary_equivalences_from_phis):
+ 	Register equivalences through the state variable.
+ 	(jump_threader::record_temporary_equivalences_from_stmts_at_dest):
+ 	Record ranges in a statement through the state variable.
+ 	(jump_threader::simplify_control_stmt_condition): Pass state to
+ 	simplify.
+ 	(jump_threader::simplify_control_stmt_condition_1): Same.
+ 	(jump_threader::thread_around_empty_blocks): Remove obsolete
+ 	comment.
+ 	(jump_threader::thread_through_normal_block): Record equivalences
+ 	on edge through the state variable.
+ 	(jump_threader::thread_across_edge): Abstract state pushing.
+ 	(jt_state::jt_state): New.
+ 	(jt_state::push): New.
+ 	(jt_state::pop): New.
+ 	(jt_state::register_equiv): New.
+ 	(jt_state::record_ranges_from_stmt): New.
+ 	(jt_state::register_equivs_on_edge): New.
+ 	(jump_threader_simplifier::jump_threader_simplifier): Move from
+ 	header.
+ 	(jump_threader_simplifier::simplify): Add state argument.
+ 	* tree-ssa-threadedge.h (class jt_state): New.
+ 	(class jump_threader): Add state to constructor.
+ 	(class jump_threader_simplifier): Add state to simplify.  Remove
+ 	avail_exprs_stack from class.
+ 	* tree-vrp.c (vrp_jump_threader_simplifier::simplify): Add state
+ 	argument.
+ 	(vrp_jump_threader::vrp_jump_threader): Add state.
+ 	(vrp_jump_threader::~vrp_jump_threader): Cleanup state.
+ 
+ 2021-07-27  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* Makefile.in (OBJS): Add gimple-range-path.o.
+ 	* gimple-range-path.cc: New file.
+ 	* gimple-range-path.h: New file.
+ 
+ 2021-07-27  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md: Push sign/zero-extension
+ 	inside vec_duplicate for all patterns.
+ 	* simplify-rtx.c (simplify_context::simplify_unary_operation_1):
+ 	Push sign/zero-extension inside vec_duplicate.
+ 
+ 2021-07-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101573
+ 	* tree-ssa-uninit.c (warn_uninit_phi_uses): New function
+ 	looking at uninitialized PHI arg defs in some constrained cases.
+ 	(warn_uninitialized_vars): Call it.
+ 	(execute_early_warn_uninitialized): Calculate dominators.
+ 
+ 2021-07-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/39821
+ 	* tree-vect-stmts.c (vect_model_promotion_demotion_cost): Use
+ 	vector_stmt for widening arithmetic.
+ 	(vectorizable_conversion): Adjust.
+ 
+ 2021-07-27  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* cgraph.h (ipa_replace_map): New field force_load_ref.
+ 	* ipa-prop.h (ipa_param_descriptor): Reduce precision of move_cost,
+ 	aded new flag load_dereferenced, adjusted comments.
+ 	(ipa_get_param_dereferenced): New function.
+ 	(ipa_set_param_dereferenced): Likewise.
+ 	* cgraphclones.c (cgraph_node::create_virtual_clone): Follow it.
+ 	* ipa-cp.c: Include gimple.h.
+ 	(ipcp_discover_new_direct_edges): Take into account dereferenced flag.
+ 	(get_replacement_map): New parameter force_load_ref, set the
+ 	appropriate flag in ipa_replace_map if set.
+ 	(struct symbol_and_index_together): New type.
+ 	(adjust_refs_in_act_callers): New function.
+ 	(adjust_references_in_caller): Likewise.
+ 	(create_specialized_node): When appropriate, call
+ 	adjust_references_in_caller and force only load references.
+ 	* ipa-prop.c (load_from_dereferenced_name): New function.
+ 	(ipa_analyze_controlled_uses): Also detect loads from a
+ 	dereference, harden testing of call statements.
+ 	(ipa_write_node_info): Stream the dereferenced flag.
+ 	(ipa_read_node_info): Likewise.
+ 	(ipa_set_jf_constant): Also create refdesc when jump function
+ 	references a variable.
+ 	(cgraph_node_for_jfunc): Rename to symtab_node_for_jfunc, work
+ 	also on references of variables and return a symtab_node.  Adjust
+ 	all callers.
+ 	(propagate_controlled_uses): Also remove references to VAR_DECLs.
+ 
+ 2021-07-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/101586
+ 	* gimple-fold.c (clear_padding_type): Ignore FIELD_DECLs with byte
+ 	positions above or equal to sz except for diagnostics of flexible
+ 	array members.
+ 
+ 2021-07-26  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/78888
+ 	* gimple-range-fold.cc (get_letter_range): New.
+ 	(fold_using_range::range_of_builtin_call): Call get_letter_range.
+ 
+ 2021-07-26  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/78888
+ 	* gimple-range-fold.cc (fold_using_range::range_of_builtin_call): Add cases
+ 	for CFN_BUILT_IN_TOUPPER and CFN_BUILT_IN_TOLOWER.
+ 
+ 2021-07-26  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Marc Glisse  <marc.glisse@inria.fr>
+ 
+ 	* match.pd (rotate): Simplify equality/inequality of rotations.
+ 	(bswap): Simplify equality/inequality tests of byte swapping.
+ 
+ 2021-07-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* range-op.cc (operator_bitwise_xor::op1_op2_relation_effect):
+ 	New.
+ 
+ 2021-07-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* range-op.cc (operator_lshift::fold_range): Pass rel to
+ 	base class fold_range.
+ 	(operator_rshift::fold_range): Same.
+ 
+ 2021-07-26  Ashimida  <ashimida@linux.alibaba.com>
+ 
+ 	PR driver/101447
+ 	* toplev.h (min_align_loops_log): Remove declaration.
+ 	(min_align_jumps_log, min_align_labels_log): Likewise.
+ 	(min_align_functions_log): Likewise.
+ 
+ 2021-07-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-vrp.c (vrp_simplify_cond_using_ranges): Rename vr_values
+ 	with range_query.
+ 	(execute_vrp): Abstract out simplification of conditionals...
+ 	(simplify_casted_conds): ...here.
+ 
+ 2021-07-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-array-bounds.cc (array_bounds_checker::get_value_range):
+ 	Add gimple argument.
+ 	(array_bounds_checker::check_array_ref): Same.
+ 	(array_bounds_checker::check_addr_expr): Same.
+ 	(array_bounds_checker::check_array_bounds): Pass statement to
+ 	check_array_bounds and check_addr_expr.
+ 	* gimple-array-bounds.h (check_array_bounds): Add gimple argument.
+ 	(check_addr_expr): Same.
+ 	(get_value_range): Same.
+ 
+ 2021-07-26  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (sdot, udot): Rename to..
+ 	(sdot_prod, udot_prod): ... This.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<sur>dot<vsi2qi>): Merged
+ 	into...
+ 	(<sur>dot_prod<vsi2qi>): ... this.
+ 	(aarch64_<sur>dot_lane<vsi2qi>, aarch64_<sur>dot_laneq<vsi2qi>):
+ 	Change operands order.
+ 	(<sur>sadv16qi): Use new operands order.
+ 	* config/aarch64/arm_neon.h (vdot_u32, vdotq_u32, vdot_s32,
+ 	vdotq_s32): Use new RTL ordering.
+ 
+ 2021-07-26  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c (TYPES_TERNOP_SUSS,
+ 	aarch64_types_ternop_suss_qualifiers): New.
+ 	* config/aarch64/aarch64-simd-builtins.def (usdot_prod): Use it.
+ 	* config/aarch64/aarch64-simd.md (usdot_prod<vsi2qi>): Re-organize RTL.
+ 	* config/aarch64/arm_neon.h (vusdot_s32, vusdotq_s32): Use it.
+ 
+ 2021-07-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/101562
+ 	* expmed.c (store_integral_bit_field): Only use movstrict_optab
+ 	if the operand isn't paradoxical.
+ 
+ 2021-07-23  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-array-bounds.h (class array_bounds_checker): Change
+ 	ranges type to range_query.
+ 
+ 2021-07-23  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vst1_s64_x2): Use
+ 	__builtin_memcpy instead of constructing
+ 	__builtin_aarch64_simd_oi one vector at a time.
+ 	(vst1_u64_x2): Likewise.
+ 	(vst1_f64_x2): Likewise.
+ 	(vst1_s8_x2): Likewise.
+ 	(vst1_p8_x2): Likewise.
+ 	(vst1_s16_x2): Likewise.
+ 	(vst1_p16_x2): Likewise.
+ 	(vst1_s32_x2): Likewise.
+ 	(vst1_u8_x2): Likewise.
+ 	(vst1_u16_x2): Likewise.
+ 	(vst1_u32_x2): Likewise.
+ 	(vst1_f16_x2): Likewise.
+ 	(vst1_f32_x2): Likewise.
+ 	(vst1_p64_x2): Likewise.
+ 	(vst1q_s8_x2): Likewise.
+ 	(vst1q_p8_x2): Likewise.
+ 	(vst1q_s16_x2): Likewise.
+ 	(vst1q_p16_x2): Likewise.
+ 	(vst1q_s32_x2): Likewise.
+ 	(vst1q_s64_x2): Likewise.
+ 	(vst1q_u8_x2): Likewise.
+ 	(vst1q_u16_x2): Likewise.
+ 	(vst1q_u32_x2): Likewise.
+ 	(vst1q_u64_x2): Likewise.
+ 	(vst1q_f16_x2): Likewise.
+ 	(vst1q_f32_x2): Likewise.
+ 	(vst1q_f64_x2): Likewise.
+ 	(vst1q_p64_x2): Likewise.
+ 
+ 2021-07-23  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vst1_s64_x3): Use
+ 	__builtin_memcpy instead of constructing
+ 	__builtin_aarch64_simd_ci one vector at a time.
+ 	(vst1_u64_x3): Likewise.
+ 	(vst1_f64_x3): Likewise.
+ 	(vst1_s8_x3): Likewise.
+ 	(vst1_p8_x3): Likewise.
+ 	(vst1_s16_x3): Likewise.
+ 	(vst1_p16_x3): Likewise.
+ 	(vst1_s32_x3): Likewise.
+ 	(vst1_u8_x3): Likewise.
+ 	(vst1_u16_x3): Likewise.
+ 	(vst1_u32_x3): Likewise.
+ 	(vst1_f16_x3): Likewise.
+ 	(vst1_f32_x3): Likewise.
+ 	(vst1_p64_x3): Likewise.
+ 	(vst1q_s8_x3): Likewise.
+ 	(vst1q_p8_x3): Likewise.
+ 	(vst1q_s16_x3): Likewise.
+ 	(vst1q_p16_x3): Likewise.
+ 	(vst1q_s32_x3): Likewise.
+ 	(vst1q_s64_x3): Likewise.
+ 	(vst1q_u8_x3): Likewise.
+ 	(vst1q_u16_x3): Likewise.
+ 	(vst1q_u32_x3): Likewise.
+ 	(vst1q_u64_x3): Likewise.
+ 	(vst1q_f16_x3): Likewise.
+ 	(vst1q_f32_x3): Likewise.
+ 	(vst1q_f64_x3): Likewise.
+ 	(vst1q_p64_x3): Likewise.
+ 
+ 2021-07-23  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101504
+ 	* config/i386/i386.c (ix86_gen_scratch_sse_rtx): Don't return
+ 	hard register when LRA is in progress.
+ 
+ 2021-07-23  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vst1_s8_x4): Use
+ 	__builtin_memcpy instead of using a union.
+ 	(vst1q_s8_x4): Likewise.
+ 	(vst1_s16_x4): Likewise.
+ 	(vst1q_s16_x4): Likewise.
+ 	(vst1_s32_x4): Likewise.
+ 	(vst1q_s32_x4): Likewise.
+ 	(vst1_u8_x4): Likewise.
+ 	(vst1q_u8_x4): Likewise.
+ 	(vst1_u16_x4): Likewise.
+ 	(vst1q_u16_x4): Likewise.
+ 	(vst1_u32_x4): Likewise.
+ 	(vst1q_u32_x4): Likewise.
+ 	(vst1_f16_x4): Likewise.
+ 	(vst1q_f16_x4): Likewise.
+ 	(vst1_f32_x4): Likewise.
+ 	(vst1q_f32_x4): Likewise.
+ 	(vst1_p8_x4): Likewise.
+ 	(vst1q_p8_x4): Likewise.
+ 	(vst1_p16_x4): Likewise.
+ 	(vst1q_p16_x4): Likewise.
+ 	(vst1_s64_x4): Likewise.
+ 	(vst1_u64_x4): Likewise.
+ 	(vst1_p64_x4): Likewise.
+ 	(vst1q_s64_x4): Likewise.
+ 	(vst1q_u64_x4): Likewise.
+ 	(vst1q_p64_x4): Likewise.
+ 	(vst1_f64_x4): Likewise.
+ 	(vst1q_f64_x4): Likewise.
+ 
+ 2021-07-23  Jonathan Wrightt  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vst2_s64): Use __builtin_memcpy
+ 	instead of constructing __builtin_aarch64_simd_oi one vector
+ 	at a time.
+ 	(vst2_u64): Likewise.
+ 	(vst2_f64): Likewise.
+ 	(vst2_s8): Likewise.
+ 	(vst2_p8): Likewise.
+ 	(vst2_s16): Likewise.
+ 	(vst2_p16): Likewise.
+ 	(vst2_s32): Likewise.
+ 	(vst2_u8): Likewise.
+ 	(vst2_u16): Likewise.
+ 	(vst2_u32): Likewise.
+ 	(vst2_f16): Likewise.
+ 	(vst2_f32): Likewise.
+ 	(vst2_p64): Likewise.
+ 	(vst2q_s8): Likewise.
+ 	(vst2q_p8): Likewise.
+ 	(vst2q_s16): Likewise.
+ 	(vst2q_p16): Likewise.
+ 	(vst2q_s32): Likewise.
+ 	(vst2q_s64): Likewise.
+ 	(vst2q_u8): Likewise.
+ 	(vst2q_u16): Likewise.
+ 	(vst2q_u32): Likewise.
+ 	(vst2q_u64): Likewise.
+ 	(vst2q_f16): Likewise.
+ 	(vst2q_f32): Likewise.
+ 	(vst2q_f64): Likewise.
+ 	(vst2q_p64): Likewise.
+ 
+ 2021-07-23  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vst3_s64): Use __builtin_memcpy
+ 	instead of constructing __builtin_aarch64_simd_ci one vector
+ 	at a time.
+ 	(vst3_u64): Likewise.
+ 	(vst3_f64): Likewise.
+ 	(vst3_s8): Likewise.
+ 	(vst3_p8): Likewise.
+ 	(vst3_s16): Likewise.
+ 	(vst3_p16): Likewise.
+ 	(vst3_s32): Likewise.
+ 	(vst3_u8): Likewise.
+ 	(vst3_u16): Likewise.
+ 	(vst3_u32): Likewise.
+ 	(vst3_f16): Likewise.
+ 	(vst3_f32): Likewise.
+ 	(vst3_p64): Likewise.
+ 	(vst3q_s8): Likewise.
+ 	(vst3q_p8): Likewise.
+ 	(vst3q_s16): Likewise.
+ 	(vst3q_p16): Likewise.
+ 	(vst3q_s32): Likewise.
+ 	(vst3q_s64): Likewise.
+ 	(vst3q_u8): Likewise.
+ 	(vst3q_u16): Likewise.
+ 	(vst3q_u32): Likewise.
+ 	(vst3q_u64): Likewise.
+ 	(vst3q_f16): Likewise.
+ 	(vst3q_f32): Likewise.
+ 	(vst3q_f64): Likewise.
+ 	(vst3q_p64): Likewise.
+ 
+ 2021-07-23  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vst4_s64): Use __builtin_memcpy
+ 	instead of constructing __builtin_aarch64_simd_xi one vector
+ 	at a time.
+ 	(vst4_u64): Likewise.
+ 	(vst4_f64): Likewise.
+ 	(vst4_s8): Likewise.
+ 	(vst4_p8): Likewise.
+ 	(vst4_s16): Likewise.
+ 	(vst4_p16): Likewise.
+ 	(vst4_s32): Likewise.
+ 	(vst4_u8): Likewise.
+ 	(vst4_u16): Likewise.
+ 	(vst4_u32): Likewise.
+ 	(vst4_f16): Likewise.
+ 	(vst4_f32): Likewise.
+ 	(vst4_p64): Likewise.
+ 	(vst4q_s8): Likewise.
+ 	(vst4q_p8): Likewise.
+ 	(vst4q_s16): Likewise.
+ 	(vst4q_p16): Likewise.
+ 	(vst4q_s32): Likewise.
+ 	(vst4q_s64): Likewise.
+ 	(vst4q_u8): Likewise.
+ 	(vst4q_u16): Likewise.
+ 	(vst4q_u32): Likewise.
+ 	(vst4q_u64): Likewise.
+ 	(vst4q_f16): Likewise.
+ 	(vst4q_f32): Likewise.
+ 	(vst4q_f64): Likewise.
+ 	(vst4q_p64): Likewise.
+ 
+ 2021-07-23  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vtbx4_s8): Use __builtin_memcpy
+ 	instead of constructing __builtin_aarch64_simd_oi one vector
+ 	at a time.
+ 	(vtbx4_u8): Likewise.
+ 	(vtbx4_p8): Likewise.
+ 
+ 2021-07-23  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vtbl3_s8): Use __builtin_memcpy
+ 	instead of constructing __builtin_aarch64_simd_oi one vector
+ 	at a time.
+ 	(vtbl3_u8): Likewise.
+ 	(vtbl3_p8): Likewise.
+ 	(vtbl4_s8): Likewise.
+ 	(vtbl4_u8): Likewise.
+ 	(vtbl4_p8): Likewise.
+ 
+ 2021-07-23  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vqtbx2_s8): Use __builtin_memcpy
+ 	instead of constructing __builtin_aarch64_simd_oi one vector
+ 	at a time.
+ 	(vqtbx2_u8): Likewise.
+ 	(vqtbx2_p8): Likewise.
+ 	(vqtbx2q_s8): Likewise.
+ 	(vqtbx2q_u8): Likewise.
+ 	(vqtbx2q_p8): Likewise.
+ 	(vqtbx3_s8): Use __builtin_memcpy instead of constructing
+ 	__builtin_aarch64_simd_ci one vector at a time.
+ 	(vqtbx3_u8): Likewise.
+ 	(vqtbx3_p8): Likewise.
+ 	(vqtbx3q_s8): Likewise.
+ 	(vqtbx3q_u8): Likewise.
+ 	(vqtbx3q_p8): Likewise.
+ 	(vqtbx4_s8): Use __builtin_memcpy instead of constructing
+ 	__builtin_aarch64_simd_xi one vector at a time.
+ 	(vqtbx4_u8): Likewise.
+ 	(vqtbx4_p8): Likewise.
+ 	(vqtbx4q_s8): Likewise.
+ 	(vqtbx4q_u8): Likewise.
+ 	(vqtbx4q_p8): Likewise.
+ 
+ 2021-07-23  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vqtbl2_s8): Use __builtin_memcpy
+ 	instead of constructing __builtin_aarch64_simd_oi one vector
+ 	at a time.
+ 	(vqtbl2_u8): Likewise.
+ 	(vqtbl2_p8): Likewise.
+ 	(vqtbl2q_s8): Likewise.
+ 	(vqtbl2q_u8): Likewise.
+ 	(vqtbl2q_p8): Likewise.
+ 	(vqtbl3_s8): Use __builtin_memcpy instead of constructing
+ 	__builtin_aarch64_simd_ci one vector at a time.
+ 	(vqtbl3_u8): Likewise.
+ 	(vqtbl3_p8): Likewise.
+ 	(vqtbl3q_s8): Likewise.
+ 	(vqtbl3q_u8): Likewise.
+ 	(vqtbl3q_p8): Likewise.
+ 	(vqtbl4_s8): Use __builtin_memcpy instead of constructing
+ 	__builtin_aarch64_simd_xi one vector at a time.
+ 	(vqtbl4_u8): Likewise.
+ 	(vqtbl4_p8): Likewise.
+ 	(vqtbl4q_s8): Likewise.
+ 	(vqtbl4q_u8): Likewise.
+ 	(vqtbl4q_p8): Likewise.
+ 
+ 2021-07-23  Haochen Gui  <guihaoc@gcc.gnu.org>
+ 
+ 	PR target/100952
+ 	* config/rs6000/rs6000.md (cstore<mode>4): Fix wrong fall through.
+ 
+ 2021-07-22  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/10153
+ 	* tree-tailcall.c (create_tailcall_accumulator):
+ 	Don't call fold_convert as the type should be correct already.
+ 	(tree_optimize_tail_calls_1): Use build_{one,zero}_cst instead
+ 	of integer_{one,zero}_node for the call of create_tailcall_accumulator.
+ 
+ 2021-07-22  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-cache.cc (non_null_ref::adjust_range): Replace
+ 	varying_p check for null/non-null check.
+ 
+ 2021-07-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/101511
+ 	* value-relation.cc (relation_oracle::query_relation): Check if ssa1
+ 	is in ssa2's equiv set, and don't trap if so.
+ 
+ 2021-07-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/101497
+ 	* gimple-range-fold.cc (fold_using_range::range_of_cond_expr): Check
+ 	for undefined.
+ 
+ 2021-07-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/101496
+ 	* vr-values.c (simplify_using_ranges::fold_cond): Call range_of_stmt
+ 	first, then vrp_visit_cond_Stmt.
+ 
+ 2021-07-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386-expand.c
+ 	(ix86_broadcast_from_integer_constant): Rename to ..
+ 	(ix86_broadcast_from_constant): .. this, and extend it to
+ 	handle float mode.
+ 	(ix86_expand_vector_move): Extend to float mode.
+ 	* config/i386/i386-features.c
+ 	(replace_constant_pool_with_broadcast): Remove.
+ 	(remove_partial_avx_dependency_gate): Ditto.
+ 	(constant_pool_broadcast): Ditto.
+ 	(class pass_constant_pool_broadcast): Ditto.
+ 	(make_pass_constant_pool_broadcast): Ditto.
+ 	(remove_partial_avx_dependency): Adjust gate.
+ 	* config/i386/i386-passes.def: Remove pass_constant_pool_broadcast.
+ 	* config/i386/i386-protos.h
+ 	(make_pass_constant_pool_broadcast): Remove.
+ 
+ 2021-07-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/constraints.md (Wb): New constraint.
+ 	(Ww): Ditto.
+ 	* config/i386/i386.md (*ashlhi3_1): Extend to avx512 mask
+ 	shift.
+ 	(*ashlqi3_1): Ditto.
+ 	(*<insn><mode>3_1): Split to ..
+ 	(*ashr<mode>3_1): this, ...
+ 	(*lshr<mode>3_1): and this, also extend this pattern to avx512
+ 	mask registers.
+ 	(*<insn><mode>3_1): Split to ..
+ 	(*ashr<mode>3_1): this, ...
+ 	(*lshrqi3_1): and this, also extend this pattern to avx512
+ 	mask registers.
+ 	(*lshrhi3_1): And this, also extend this pattern to avx512
+ 	mask registers.
+ 	* config/i386/sse.md (k<code><mode>): New define_split after
+ 	it to convert generic shift pattern to mask shift ones.
+ 
+ 2021-07-21  Thomas Schwinge  <thomas@codesourcery.com>
+ 	    Joseph Myers  <joseph@codesourcery.com>
+ 	    Cesar Philippidis  <cesar@codesourcery.com>
+ 
+ 	* tree-core.h (omp_clause_code): Add 'OMP_CLAUSE_NOHOST'.
+ 	* tree.c (omp_clause_num_ops, omp_clause_code_name, walk_tree_1):
+ 	Handle it.
+ 	* tree-pretty-print.c (dump_omp_clause): Likewise.
+ 	* omp-general.c (oacc_verify_routine_clauses): Likewise.
+ 	* gimplify.c (gimplify_scan_omp_clauses)
+ 	(gimplify_adjust_omp_clauses): Likewise.
+ 	* tree-nested.c (convert_nonlocal_omp_clauses)
+ 	(convert_local_omp_clauses): Likewise.
+ 	* omp-low.c (scan_sharing_clauses): Likewise.
+ 	* omp-offload.c (execute_oacc_device_lower): Update.
+ 
+ 2021-07-21  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* tree-ssa-alias.c (walk_aliased_vdefs_1): Fix typos in a comment.
+ 
+ 2021-07-21  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (write_init_bif_table):
+ 	Implement.
+ 
+ 2021-07-21  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (write_fntype): New
+ 	callback function.
+ 	(write_fntype_init): New stub function.
+ 	(write_init_bif_table): Likewise.
+ 	(write_init_ovld_table): New function.
+ 	(write_init_file): Implement.
+ 
+ 2021-07-21  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c
+ 	(write_autogenerated_header): New function.
+ 	(write_decls): Likewise.
+ 	(write_extern_fntype): New callback function.
+ 	(write_header_file): Implement.
+ 
+ 2021-07-21  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (write_defines_file):
+ 	Implement.
+ 
+ 2021-07-21  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (complete_vector_type): New
+ 	function.
+ 	(complete_base_type): Likewise.
+ 	(construct_fntype_id): Likewise.
+ 	(parse_bif_entry): Call contruct_fntype_id.
+ 	(parse_ovld_entry): Likewise.
+ 
+ 2021-07-21  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (ovld_stanza): New struct.
+ 	(MAXOVLDSTANZAS): New macro.
+ 	(ovld_stanzas): New variable.
+ 	(curr_ovld_stanza): Likewise.
+ 	(MAXOVLDS): New macro.
+ 	(ovlddata): New struct.
+ 	(ovlds): New variable.
+ 	(curr_ovld): Likewise.
+ 	(max_ovld_args): Likewise.
+ 	(parse_ovld_entry): New function.
+ 	(parse_ovld_stanza): Likewise.
+ 	(parse_ovld): Implement.
+ 
+ 2021-07-21  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (parse_bif_attrs):
+ 	Implement.
+ 
+ 2021-07-21  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (parse_args): New function.
+ 	(parse_prototype): Implement.
+ 
+ 2021-07-21  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (bif_stanza): New enum.
+ 	(curr_bif_stanza): New variable.
+ 	(stanza_entry): New struct.
+ 	(stanza_map): New initialized variable.
+ 	(enable_string): Likewise.
+ 	(fnkinds): New enum.
+ 	(typelist): New struct.
+ 	(attrinfo): Likewise.
+ 	(MAXRESTROPNDS): New macro.
+ 	(prototype): New struct.
+ 	(MAXBIFS): New macro.
+ 	(bifdata): New struct.
+ 	(bifs): New variable.
+ 	(curr_bif): Likewise.
+ 	(bif_order): Likewise.
+ 	(bif_index): Likewise.
+ 	(fatal): New function.
+ 	(stanza_name_to_stanza): Likewise.
+ 	(parse_bif_attrs): New stub function.
+ 	(parse_prototype): Likewise.
+ 	(parse_bif_entry): New function.
+ 	(parse_bif_stanza): Likewise.
+ 	(parse_bif): Implement.
+ 	(set_bif_order): New function.
+ 	(create_bif_order): Implement.
+ 
+ 2021-07-21  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (rbtree.h): New #include.
+ 	(num_bifs): New variable.
+ 	(num_ovld_stanzas): Likewise.
+ 	(num_ovlds): Likewise.
+ 	(parse_codes): New enum.
+ 	(bif_rbt): New variable.
+ 	(ovld_rbt): Likewise.
+ 	(fntype_rbt): Likewise.
+ 	(bifo_rbt): Likewise.
+ 	(parse_bif): New stub function.
+ 	(create_bif_order): Likewise.
+ 	(parse_ovld): Likewise.
+ 	(write_header_file): Likewise.
+ 	(write_init_file): Likewise.
+ 	(write_defines_file): Likewise.
+ 	(delete_output_files): New function.
+ 	(main): Likewise.
+ 
+ 2021-07-21  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101549
+ 	* config/i386/i386-builtin.def: Remove OPTION_MASK_ISA_SSE4_2
+ 	from CRC32 _builtin functions.
+ 
+ 2021-07-21  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	* coverage.c (build_gcov_info_var_registration): Mark the object placed
+ 	in the linker set as referenced so that it does not get optimized away.
+ 
+ 2021-07-21  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	Revert:
+ 	2021-07-20  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config.gcc (riscv*-*-*): Detect which python is available.
+ 
+ 2021-07-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/101535
+ 	* gimplify.c (omp_check_private): Properly skip ORT_TARGET_DATA
+ 	contexts in which decl isn't privatized and for ORT_TARGET return
+ 	false if decl is mapped.
+ 
+ 2021-07-21  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* gimple-loop-jam.c: Include tree-ssa-sccvn.h.
+ 	(tree_loop_unroll_and_jam): Run value-numbering on a loop that
+ 	has been successfully unrolled.
+ 
+ 2021-07-21  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-ssa-loop-manip.c (determine_exit_conditions): Return a null
+ 	exit condition if no tail loop is needed, and if the original exit
+ 	condition should therefore be kept as-is.
+ 	(tree_transform_and_unroll_loop): Handle that case here too.
+ 
+ 2021-07-21  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* tree-data-ref.c (free_dependence_relations): Adjust to pass vec
+ 	by reference.
+ 	(free_data_refs): Likewise.
+ 	* tree-data-ref.h (free_dependence_relations): Likewise.
+ 	(free_data_refs): Likewise.
+ 	* tree-predcom.c (struct chain): Use auto_vec instead of vec for
+ 	members.
+ 	(struct component): Likewise.
+ 	(pcom_worker::pcom_worker): Adjust for auto_vec and renaming changes.
+ 	(pcom_worker::~pcom_worker): Likewise.
+ 	(pcom_worker::release_chain): Adjust as auto_vec changes.
+ 	(pcom_worker::loop): Rename to ...
+ 	(pcom_worker::m_loop): ... this.
+ 	(pcom_worker::datarefs): Rename to ...
+ 	(pcom_worker::m_datarefs): ... this.  Use auto_vec instead of vec.
+ 	(pcom_worker::dependences): Rename to ...
+ 	(pcom_worker::m_dependences): ... this.  Use auto_vec instead of vec.
+ 	(pcom_worker::chains): Rename to ...
+ 	(pcom_worker::m_chains): ... this.  Use auto_vec instead of vec.
+ 	(pcom_worker::looparound_phis): Rename to ...
+ 	(pcom_worker::m_looparound_phis): ... this.  Use auto_vec instead of
+ 	vec.
+ 	(pcom_worker::cache): Rename to ...
+ 	(pcom_worker::m_cache): ... this.  Use auto_vec instead of vec.
+ 	(pcom_worker::release_chain): Adjust for auto_vec changes.
+ 	(pcom_worker::release_chains): Adjust for auto_vec and renaming
+ 	changes.
+ 	(release_component): Remove.
+ 	(release_components): Adjust for release_component removal.
+ 	(component_of): Adjust to use vec.
+ 	(merge_comps): Likewise.
+ 	(pcom_worker::aff_combination_dr_offset): Adjust for renaming changes.
+ 	(pcom_worker::determine_offset): Likewise.
+ 	(class comp_ptrs): Remove.
+ 	(pcom_worker::split_data_refs_to_components): Adjust for renaming
+ 	changes, for comp_ptrs removal with auto_vec.
+ 	(pcom_worker::suitable_component_p): Adjust for renaming changes.
+ 	(pcom_worker::filter_suitable_components): Adjust for release_component
+ 	removal.
+ 	(pcom_worker::valid_initializer_p): Adjust for renaming changes.
+ 	(pcom_worker::find_looparound_phi): Likewise.
+ 	(pcom_worker::add_looparound_copies): Likewise.
+ 	(pcom_worker::determine_roots_comp): Likewise.
+ 	(pcom_worker::single_nonlooparound_use): Likewise.
+ 	(pcom_worker::execute_pred_commoning_chain): Likewise.
+ 	(pcom_worker::execute_pred_commoning): Likewise.
+ 	(pcom_worker::try_combine_chains): Likewise.
+ 	(pcom_worker::prepare_initializers_chain): Likewise.
+ 	(pcom_worker::prepare_initializers): Likewise.
+ 	(pcom_worker::prepare_finalizers_chain): Likewise.
+ 	(pcom_worker::prepare_finalizers): Likewise.
+ 	(pcom_worker::tree_predictive_commoning_loop): Likewise.
+ 
+ 2021-07-20  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/101397
+ 	* builtins.c (gimple_call_return_array): Add argument.  Correct
+ 	offsets for memchr, mempcpy, stpcpy, and stpncpy.
+ 	(compute_objsize_r): Adjust offset computation for argument returning
+ 	built-ins.
+ 
+ 2021-07-20  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/101300
+ 	* tree-ssa-uninit.c (check_defs): Handle UBSAN built-ins.
+ 
+ 2021-07-20  Jeff Law  <jlaw@localhost.localdomain>
+ 
+ 	* function.c (assign_parm_setup_block): Use adjust_address instead
+ 	of change_address to preserve MEM_EXPR and friends.
+ 
+ 2021-07-20  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* cfgloop.h (single_likely_exit): Adjust by-value argument to
+ 	by-const-reference.
+ 	* cfgloopanal.c (single_likely_exit): Same.
+ 	* cgraph.h (struct cgraph_node): Same.
+ 	* cgraphclones.c (cgraph_node::create_virtual_clone): Same.
+ 	* genautomata.c (merge_states): Same.
+ 	* genextract.c (VEC_char_to_string): Same.
+ 	* genmatch.c (dt_node::gen_kids_1): Same.
+ 	(walk_captures): Adjust by-value argument to by-reference.
+ 	* gimple-ssa-store-merging.c (check_no_overlap): Adjust by-value argument
+ 	to by-const-reference.
+ 	* gimple.c (gimple_build_call_vec): Same.
+ 	(gimple_build_call_internal_vec): Same.
+ 	(gimple_build_switch): Same.
+ 	(sort_case_labels): Same.
+ 	(preprocess_case_label_vec_for_gimple): Adjust by-value argument to
+ 	by-reference.
+ 	* gimple.h (gimple_build_call_vec): Adjust by-value argument to
+ 	by-const-reference.
+ 	(gimple_build_call_internal_vec): Same.
+ 	(gimple_build_switch): Same.
+ 	(sort_case_labels): Same.
+ 	(preprocess_case_label_vec_for_gimple): Adjust by-value argument to
+ 	by-reference.
+ 	* haifa-sched.c (calc_priorities): Adjust by-value argument to
+ 	by-const-reference.
+ 	(sched_init_luids): Same.
+ 	(haifa_init_h_i_d): Same.
+ 	* ipa-cp.c (ipa_get_indirect_edge_target_1): Same.
+ 	(adjust_callers_for_value_intersection): Adjust by-value argument to
+ 	by-reference.
+ 	(find_more_scalar_values_for_callers_subset): Adjust by-value argument to
+ 	by-const-reference.
+ 	(find_more_contexts_for_caller_subset): Same.
+ 	(find_aggregate_values_for_callers_subset): Same.
+ 	(copy_useful_known_contexts): Same.
+ 	* ipa-fnsummary.c (remap_edge_summaries): Same.
+ 	(remap_freqcounting_predicate): Same.
+ 	* ipa-inline.c (add_new_edges_to_heap): Adjust by-value argument to
+ 	by-reference.
+ 	* ipa-predicate.c (predicate::remap_after_inlining): Adjust by-value argument
+ 	to by-const-reference.
+ 	* ipa-predicate.h (predicate::remap_after_inlining): Same.
+ 	* ipa-prop.c (ipa_find_agg_cst_for_param): Same.
+ 	* ipa-prop.h (ipa_find_agg_cst_for_param): Same.
+ 	* ira-build.c (ira_loop_tree_body_rev_postorder): Same.
+ 	* read-rtl.c (add_overload_instance): Same.
+ 	* rtl.h (native_decode_rtx): Same.
+ 	(native_decode_vector_rtx): Same.
+ 	* sched-int.h (sched_init_luids): Same.
+ 	(haifa_init_h_i_d): Same.
+ 	* simplify-rtx.c (native_decode_vector_rtx): Same.
+ 	(native_decode_rtx): Same.
+ 	* tree-call-cdce.c (gen_shrink_wrap_conditions): Same.
+ 	(shrink_wrap_one_built_in_call_with_conds): Same.
+ 	(shrink_wrap_conditional_dead_built_in_calls): Same.
+ 	* tree-data-ref.c (create_runtime_alias_checks): Same.
+ 	(compute_all_dependences): Same.
+ 	* tree-data-ref.h (compute_all_dependences): Same.
+ 	(create_runtime_alias_checks): Same.
+ 	(index_in_loop_nest): Same.
+ 	* tree-if-conv.c (mask_exists): Same.
+ 	* tree-loop-distribution.c (class loop_distribution): Same.
+ 	(loop_distribution::create_rdg_vertices): Same.
+ 	(dump_rdg_partitions): Same.
+ 	(debug_rdg_partitions): Same.
+ 	(partition_contains_all_rw): Same.
+ 	(loop_distribution::distribute_loop): Same.
+ 	* tree-parloops.c (oacc_entry_exit_ok_1): Same.
+ 	(oacc_entry_exit_single_gang): Same.
+ 	* tree-ssa-loop-im.c (hoist_memory_references): Same.
+ 	(loop_suitable_for_sm): Same.
+ 	* tree-ssa-loop-niter.c (bound_index): Same.
+ 	* tree-ssa-reassoc.c (update_ops): Same.
+ 	(swap_ops_for_binary_stmt): Same.
+ 	(rewrite_expr_tree): Same.
+ 	(rewrite_expr_tree_parallel): Same.
+ 	* tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Same.
+ 	* tree-ssa-sccvn.h (ao_ref_init_from_vn_reference): Same.
+ 	* tree-ssa-structalias.c (process_all_all_constraints): Same.
+ 	(make_constraints_to): Same.
+ 	(handle_lhs_call): Same.
+ 	(find_func_aliases_for_builtin_call): Same.
+ 	(sort_fieldstack): Same.
+ 	(check_for_overlaps): Same.
+ 	* tree-vect-loop-manip.c (vect_create_cond_for_align_checks): Same.
+ 	(vect_create_cond_for_unequal_addrs): Same.
+ 	(vect_create_cond_for_lower_bounds): Same.
+ 	(vect_create_cond_for_alias_checks): Same.
+ 	* tree-vect-slp-patterns.c (vect_validate_multiplication): Same.
+ 	* tree-vect-slp.c (vect_analyze_slp_instance): Same.
+ 	(vect_make_slp_decision): Same.
+ 	(vect_slp_bbs): Same.
+ 	(duplicate_and_interleave): Same.
+ 	(vect_transform_slp_perm_load): Same.
+ 	(vect_schedule_slp): Same.
+ 	* tree-vectorizer.h (vect_transform_slp_perm_load): Same.
+ 	(vect_schedule_slp): Same.
+ 	(duplicate_and_interleave): Same.
+ 	* tree.c (build_vector_from_ctor): Same.
+ 	(build_vector): Same.
+ 	(check_vector_cst): Same.
+ 	(check_vector_cst_duplicate): Same.
+ 	(check_vector_cst_fill): Same.
+ 	(check_vector_cst_stepped): Same.
+ 	* tree.h (build_vector_from_ctor): Same.
+ 
+ 2021-07-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/101384
+ 	* config/rs6000/rs6000-protos.h (easy_altivec_constant): Change return
+ 	type from bool to int.
+ 	* config/rs6000/rs6000.c (vspltis_constant): Fix up handling the
+ 	EASY_VECTOR_MSB case if either step or copies is not 1.
+ 	(vspltis_shifted): Fix comment typo.
+ 	(easy_altivec_constant): Change return type from bool to int, instead
+ 	of returning true return byte size of the element mode that should be
+ 	used to synthetize the constant.
+ 	* config/rs6000/predicates.md (easy_vector_constant_msb): Require
+ 	that vspltis_shifted is 0, handle the case where easy_altivec_constant
+ 	assumes using different vector mode from CONST_VECTOR's mode.
+ 	* config/rs6000/altivec.md (easy_vector_constant_msb splitter): Use
+ 	easy_altivec_constant to determine mode in which -1 >> -1 should be
+ 	performed, use rs6000_expand_vector_init instead of gen_vec_initv4sisi.
+ 
+ 2021-07-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR debug/101473
+ 	* dwarf2out.h (dwarf_file_data): Add key member.
+ 	* dwarf2out.c (dwarf_file_hasher::equal): Compare key.
+ 	(dwarf_file_hasher::hash): Hash key.
+ 	(lookup_filename): Remap the filename and store it in the
+ 	filename member of dwarf_file_data when creating a new
+ 	dwarf_file_data.
+ 	(file_name_acquire): Do not remap the filename again.
+ 	(maybe_emit_file): Likewise.
+ 
+ 2021-07-20  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Use two variant
+ 	generators for all TBL/TBX intrinsics and rename to
+ 	consistent forms: qtbl[1234] or qtbx[1234].
+ 	* config/aarch64/aarch64-simd.md (aarch64_tbl1<mode>):
+ 	Rename to...
+ 	(aarch64_qtbl1<mode>): This.
+ 	(aarch64_tbx1<mode>): Rename to...
+ 	(aarch64_qtbx1<mode>): This.
+ 	(aarch64_tbl2v16qi): Delete.
+ 	(aarch64_tbl3<mode>): Rename to...
+ 	(aarch64_qtbl2<mode>): This.
+ 	(aarch64_tbx4<mode>): Rename to...
+ 	(aarch64_qtbx2<mode>): This.
+ 	* config/aarch64/aarch64.c (aarch64_expand_vec_perm_1): Use
+ 	renamed qtbl1 and qtbl2 RTL patterns.
+ 	* config/aarch64/arm_neon.h (vqtbl1_p8): Use renamed qtbl1
+ 	RTL pattern.
+ 	(vqtbl1_s8): Likewise.
+ 	(vqtbl1_u8): Likewise.
+ 	(vqtbl1q_p8): Likewise.
+ 	(vqtbl1q_s8): Likewise.
+ 	(vqtbl1q_u8): Likewise.
+ 	(vqtbx1_s8): Use renamed qtbx1 RTL pattern.
+ 	(vqtbx1_u8): Likewise.
+ 	(vqtbx1_p8): Likewise.
+ 	(vqtbx1q_s8): Likewise.
+ 	(vqtbx1q_u8): Likewise.
+ 	(vqtbx1q_p8): Likewise.
+ 	(vtbl1_s8): Use renamed qtbl1 RTL pattern.
+ 	(vtbl1_u8): Likewise.
+ 	(vtbl1_p8): Likewise.
+ 	(vtbl2_s8): Likewise
+ 	(vtbl2_u8): Likewise.
+ 	(vtbl2_p8): Likewise.
+ 	(vtbl3_s8): Use renamed qtbl2 RTL pattern.
+ 	(vtbl3_u8): Likewise.
+ 	(vtbl3_p8): Likewise.
+ 	(vtbl4_s8): Likewise.
+ 	(vtbl4_u8): Likewise.
+ 	(vtbl4_p8): Likewise.
+ 	(vtbx2_s8): Use renamed qtbx2 RTL pattern.
+ 	(vtbx2_u8): Likewise.
+ 	(vtbx2_p8): Likewise.
+ 	(vqtbl2_s8): Use renamed qtbl2 RTL pattern.
+ 	(vqtbl2_u8): Likewise.
+ 	(vqtbl2_p8): Likewise.
+ 	(vqtbl2q_s8): Likewise.
+ 	(vqtbl2q_u8): Likewise.
+ 	(vqtbl2q_p8): Likewise.
+ 	(vqtbx2_s8): Use renamed qtbx2 RTL pattern.
+ 	(vqtbx2_u8): Likewise.
+ 	(vqtbx2_p8): Likewise.
+ 	(vqtbx2q_s8): Likewise.
+ 	(vqtbx2q_u8): Likewise.
+ 	(vqtbx2q_p8): Likewise.
+ 	(vtbx4_s8): Likewise.
+ 	(vtbx4_u8): Likewise.
+ 	(vtbx4_p8): Likewise.
+ 
+ 2021-07-20  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100182
+ 	* config/i386/sync.md (define_peephole2 atomic_storedi_fpu):
+ 	Remove.
+ 	(define_peephole2 atomic_loaddi_fpu): Ditto.
+ 
+ 2021-07-20  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config.gcc (riscv*-*-*): Detect which python is available.
+ 
+ 2021-07-20  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/vsx.md (mulhs_<mode>): Rename to...
+ 	(smul<mode>3_highpart): ... this.
+ 	(mulhu_<mode>): Rename to...
+ 	(umul<mode>3_highpart): ... this.
+ 	* config/rs6000/rs6000-builtin.def (MULHS_V2DI, MULHS_V4SI,
+ 	MULHU_V2DI, MULHU_V4SI): Adjust.
+ 
+ 2021-07-20  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR tree-optimization/100696
+ 	* internal-fn.c (first_commutative_argument): Add info for IFN_MULH.
+ 	* internal-fn.def (IFN_MULH): New internal function.
+ 	* tree-vect-patterns.c (vect_recog_mulhs_pattern): Add support to
+ 	recog normal multiply highpart as IFN_MULH.
+ 	* config/i386/i386.c (ix86_add_stmt_cost): Adjust for combined
+ 	function CFN_MULH.
+ 
+ 2021-07-19  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* config/elfos.h (CTF_DEBUGGING_INFO): New definition.
+ 	(BTF_DEBUGGING_INFO): Likewise.
+ 	* doc/tm.texi.in: Document the new macros.
+ 	* doc/tm.texi: Regenerated.
+ 	* toplev.c: Guard initialization of debug hooks.
+ 
+ 2021-07-19  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* flags.h (ctf_debuginfo_p): New function declaration.
+ 	* opts.c (ctf_debuginfo_p): New function definition.
+ 
+ 2021-07-19  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	PR target/100208
+ 	* config/gcn/gcn-hsa.h (DRIVER_SELF_SPECS): New.
+ 	(ASM_SPEC): Set -mattr for xnack and sram-ecc.
+ 	* config/gcn/gcn-opts.h (enum sram_ecc_type): New.
+ 	* config/gcn/gcn-valu.md: Add a warning comment.
+ 	* config/gcn/gcn.c (gcn_option_override): Add "sorry" for -mxnack.
+ 	(output_file_start): Add xnack and sram-ecc state to ".amdgcn_target".
+ 	* config/gcn/gcn.md: Add a warning comment.
+ 	* config/gcn/gcn.opt: Add -mxnack and -msram-ecc.
+ 	* config/gcn/mkoffload.c (EF_AMDGPU_MACH_AMDGCN_GFX908): Remove
+ 	SRAM-ECC flag.
+ 	(EF_AMDGPU_XNACK): New.
+ 	(EF_AMDGPU_SRAM_ECC): New.
+ 	(elf_flags): New.
+ 	(copy_early_debug_info): Use elf_flags.
+ 	(main): Handle -mxnack and -msram-ecc options.
+ 	* doc/invoke.texi: Document -mxnack and -msram-ecc.
+ 
+ 2021-07-19  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR target/101205
+ 	* config/aarch64/aarch64.md (csneg3_uxtw_insn): Rename to ...
+ 	(*cs<neg_not_cs>3_uxtw_insn4): and extend to NEG_NOT.
+ 
+ 2021-07-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101505
+ 	* tree-vect-patterns.c (vect_determine_precisions): Walk
+ 	PHIs also for loop vectorization.
+ 
+ 2021-07-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple.h (gimple_expr_type): Remove.
+ 	* doc/gimple.texi: Remove gimple_expr_type documentation.
+ 
+ 2021-07-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-sccvn.c (vn_reference_eq): Handle NULL vr->type.
+ 	(ao_ref_init_from_vn_reference): Likewise.
+ 	(fully_constant_reference): Likewise.
+ 	(vn_reference_lookup_call): Do not set vr->type to random
+ 	values.
+ 	* tree-ssa-pre.c (compute_avail): Do not try to PRE calls
+ 	without a value.
+ 	* tree-vect-generic.c (expand_vector_piecewise): Pass in
+ 	whether we expanded parallel.
+ 	(expand_vector_parallel): Adjust.
+ 	(expand_vector_addition): Likewise.
+ 	(expand_vector_comparison): Likewise.
+ 	(expand_vector_operation): Likewise.
+ 	(expand_vector_scalar_condition): Likewise.
+ 	(expand_vector_conversion): Likewise.
+ 
+ 2021-07-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vrp.c (register_edge_assert_for_2): Use the
+ 	type from the LHS.
+ 	(vrp_folder::fold_predicate_in): Likewise.
+ 	* vr-values.c (gimple_assign_nonzero_p): Likewise.
+ 	(vr_values::extract_range_from_comparison): Likewise.
+ 	(vr_values::extract_range_from_ubsan_builtin): Use the
+ 	type of the first operand.
+ 	(vr_values::extract_range_basic): Push down type
+ 	computation, use the appropriate LHS.
+ 	(vr_values::extract_range_from_assignment): Use the
+ 	type of the LHS.
+ 
+ 2021-07-18  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101492
+ 	* common/config/i386/i386-common.c (ix86_handle_option): For
+ 	-mgeneral-regs-only, enable the GPR only instructions which are
+ 	enabled implicitly by SSE ISAs unless they have been disabled
+ 	explicitly.
+ 
+ 2021-07-18  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101495
+ 	* config/i386/i386.c (ix86_check_avx_upper_stores): Moved before
+ 	ix86_avx_u128_mode_needed.
+ 	(ix86_avx_u128_mode_needed): Return AVX_U128_DIRTY if callee
+ 	returns AVX register.
+ 
+ 2021-07-17  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* tree-ssa-structalias.c (handle_rhs_call): Support EAF_NOT_RETURNED.
+ 	(handle_const_call): Liekise
+ 	(handle_pure_call): Liekise
+ 
+ 2021-07-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/96542
+ 	* range-op.cc (range_operator::wi_fold_in_parts): New.
+ 	(range_operator::fold_range): Call wi_fold_in_parts.
+ 	(operator_lshift::wi_fold): Fix broken lshift by [0,0].
+ 	* range-op.h (wi_fold_in_parts): Add prototype.
+ 
+ 2021-07-16  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* doc/analyzer.texi: Add __analyzer_dump_state.
+ 
+ 2021-07-16  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rbtree.c: New file.
+ 	* config/rs6000/rbtree.h: New file.
+ 
+ 2021-07-16  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (restriction): New enum.
+ 	(typeinfo): Add restr field.
+ 	(match_bracketed_pair): New function.
+ 	(match_const_restriction): Implement.
+ 
+ 2021-07-16  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (match_basetype): Implement.
+ 
+ 2021-07-16  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (void_status): New enum.
+ 	(basetype): Likewise.
+ 	(typeinfo): Likewise.
+ 	(handle_pointer): New function.
+ 	(match_basetype): New stub function.
+ 	(match_const_restriction): Likewise.
+ 	(match_type): New function.
+ 
+ 2021-07-16  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (consume_whitespace): New
+ 	function.
+ 	(advance_line): Likewise.
+ 	(safe_inc_pos): Likewise.
+ 	(match_identifier): Likewise.
+ 	(match_integer): Likewise.
+ 	(match_to_right_bracket): Likewise.
+ 
+ 2021-07-16  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c (bif_file): New variable.
+ 	(ovld_file): Likewise.
+ 	(header_file): Likewise.
+ 	(init_file): Likewise.
+ 	(defines_file): Likewise.
+ 	(pgm_path): Likewise.
+ 	(bif_path): Likewise.
+ 	(ovld_path): Likewise.
+ 	(header_path): Likewise.
+ 	(init_path): Likewise.
+ 	(defines_path): Likewise.
+ 	(LINELEN): New macro.
+ 	(linebuf): New variable.
+ 	(line): Likewise.
+ 	(pos): Likewise.
+ 	(diag): Likewise.
+ 	(bif_diag): New function.
+ 	(ovld_diag): Likewise.
+ 
+ 2021-07-16  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin-new.def: New.
+ 	* config/rs6000/rs6000-overload.def: New.
+ 
+ 2021-07-16  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-gen-builtins.c: New.
+ 
+ 2021-07-16  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* Makefile.in (EXTRA_GTYPE_DEPS): New variable.
+ 	(s-gtype): Depend on EXTRA_GTYPE_DEPS.
+ 	* gengtype-state.c (state_writer::write_state_file_list): Add a
+ 	parameter to the fileslist expression for the number of build
+ 	headers to scan.
+ 	(read_state_files_list): Detect build headers and strip the
+ 	initial "./" or ".\" from their names.
+ 	* gengtype.c (build_headers): New global variable.
+ 	(num_build_headers): Likewise.
+ 	(open_base_files): Emit #include for each build header.
+ 	(main): Detect and count build headers.
+ 	* gengtype.h (build_headers): New extern variable.
+ 	(num_build_headers): Likewise.
+ 
+ 2021-07-16  Richard Biener   <rguenther@suse.de>
+ 
+ 	* gimple-ssa-store-merging.c (verify_symbolic_number_p): Use
+ 	the type of the LHS.
+ 	(find_bswap_or_nop_1): Likewise.
+ 	(find_bswap_or_nop): Likewise.
+ 	* tree-vectorizer.h (vect_get_smallest_scalar_type): Adjust
+ 	prototype.
+ 	* tree-vect-data-refs.c (vect_get_smallest_scalar_type):
+ 	Remove unused parameters, pass in the scalar type.  Fix
+ 	internal store function handling.
+ 	* tree-vect-stmts.c (vect_analyze_stmt): Remove assert.
+ 	(vect_get_vector_types_for_stmt): Move down check for
+ 	existing vector stmt after we've determined a scalar type.
+ 	Pass down the used scalar type to vect_get_smallest_scalar_type.
+ 	* tree-vect-generic.c (expand_vector_condition): Use
+ 	the type of the LHS.
+ 	(expand_vector_scalar_condition): Likewise.
+ 	(expand_vector_operations_1): Likewise.
+ 	* tree-vect-patterns.c (vect_widened_op_tree): Likewise.
+ 	(vect_recog_dot_prod_pattern): Likewise.
+ 	(vect_recog_sad_pattern): Likewise.
+ 	(vect_recog_widen_op_pattern): Likewise.
+ 	(vect_recog_widen_sum_pattern): Likewise.
+ 	(vect_recog_mixed_size_cond_pattern): Likewise.
+ 
+ 2021-07-16  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (struct escape_entry): Use eaf_fleags_t.
+ 	(dump_eaf_flags): Dump EAF_NOT_RETURNED
+ 	(eaf_flags_useful_p): Use eaf_fleags_t; handle const functions
+ 	and EAF_NOT_RETURNED.
+ 	(modref_summary::useful_p): Likewise.
+ 	(modref_summary_lto::useful_p): Likewise.
+ 	(struct) modref_summary_lto: Use eaf_fleags_t.
+ 	(deref_flags): Handle EAF_NOT_RETURNED.
+ 	(struct escape_point): Use min_flags.
+ 	(modref_lattice::init): Add EAF_NOT_RETURNED.
+ 	(merge_call_lhs_flags): Ignore EAF_NOT_RETURNED functions
+ 	(analyze_ssa_name_flags): Clear EAF_NOT_RETURNED on return;
+ 	handle call flags.
+ 	(analyze_parms): Also analyze const functions; update conition on
+ 	flags usefulness.
+ 	(modref_write): Update streaming.
+ 	(read_section): Update streaming.
+ 	(remap_arg_flags): Use eaf_flags_t.
+ 	(modref_merge_call_site_flags): Hanlde EAF_NOT_RETURNED.
+ 	* ipa-modref.h: (eaf_flags_t): New typedef.
+ 	(struct modref_summary): Use eaf_flags_t.
+ 	* tree-core.h (EAF_NOT_RETURNED): New constant.
+ 
+ 2021-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple-fold.c (gimple_fold_stmt_to_constant_1): Use
+ 	the type of the LHS.
+ 	(gimple_assign_nonnegative_warnv_p): Likewise.
+ 	(gimple_call_nonnegative_warnv_p): Likewise.  Return false
+ 	if the call has no LHS.
+ 	* gimple.c (gimple_could_trap_p_1): Use the type of the LHS.
+ 	* tree-eh.c (stmt_could_throw_1_p): Likewise.
+ 	* tree-inline.c (insert_init_stmt): Likewise.
+ 	* tree-ssa-loop-niter.c (get_val_for): Likewise.
+ 	* tree-outof-ssa.c (ssa_is_replaceable_p): Use the type of
+ 	the def.
+ 	* tree-ssa-sccvn.c (init_vn_nary_op_from_stmt): Take a
+ 	gassign *.  Use the type of the lhs.
+ 	(vn_nary_op_lookup_stmt): Adjust.
+ 	(vn_nary_op_insert_stmt): Likewise.
+ 
+ 2021-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* config/s390/predicates.md (bras_sym_operand): Accept all
+ 	functions in 64-bit mode, use UNSPEC_PLT31.
+ 	(larl_operand): Use UNSPEC_PLT31.
+ 	* config/s390/s390.c (s390_loadrelative_operand_p): Likewise.
+ 	(legitimize_pic_address): Likewise.
+ 	(s390_emit_tls_call_insn): Mark __tls_get_offset as function,
+ 	use UNSPEC_PLT31.
+ 	(s390_delegitimize_address): Use UNSPEC_PLT31.
+ 	(s390_output_addr_const_extra): Likewise.
+ 	(print_operand): Add @PLT to TLS calls, handle %K.
+ 	(s390_function_profiler): Mark __fentry__/_mcount as function,
+ 	use %K, use UNSPEC_PLT31.
+ 	(s390_output_mi_thunk): Use only UNSPEC_GOT, use %K.
+ 	(s390_emit_call): Use UNSPEC_PLT31.
+ 	(s390_emit_tpf_eh_return): Mark __tpf_eh_return as function.
+ 	* config/s390/s390.md (UNSPEC_PLT31): Rename from UNSPEC_PLT.
+ 	(*movdi_64): Use %K.
+ 	(reload_base_64): Likewise.
+ 	(*sibcall_brc): Likewise.
+ 	(*sibcall_brcl): Likewise.
+ 	(*sibcall_value_brc): Likewise.
+ 	(*sibcall_value_brcl): Likewise.
+ 	(*bras): Likewise.
+ 	(*brasl): Likewise.
+ 	(*bras_r): Likewise.
+ 	(*brasl_r): Likewise.
+ 	(*bras_tls): Likewise.
+ 	(*brasl_tls): Likewise.
+ 	(main_base_64): Likewise.
+ 	(reload_base_64): Likewise.
+ 	(@split_stack_call<mode>): Likewise.
+ 
+ 2021-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101467
+ 	* tree-vect-stmts.c (vect_gen_while): Properly guard
+ 	make_temp_ssa_name usage.
+ 
+ 2021-07-16  Cooper Qu  <cooper.qu@linux.alibaba.com>
+ 
+ 	* config.gcc: Don't use forked print-sysroot-suffix.sh and
+ 	t-sysroot-suffix for C-SKY.
+ 	* config/csky/print-sysroot-suffix.sh: Delete.
+ 	* config/csky/t-csky-linux: Delete.
+ 	* config/csky/t-sysroot-suffix: Define MULTILIB_DIRNAMES
+ 	instead of CSKY_MULTILIB_DIRNAMES.
+ 
+ 2021-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-loop.c (vect_transform_cycle_phi): Correct sign
+ 	conversion issues with the partial reduction of the reused
+ 	vector accumulator.
+ 
+ 2021-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/i386-options.c (ix86_option_override_internal): Set
+ 	param_vect_partial_vector_usage to zero if not set.
+ 
+ 2021-07-15  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/101346
+ 	* config/i386/i386.h (VALID_SSE_REG_MODE): Add TDmode.
+ 	(VALID_INT_MODE_P): Add SDmode and DDmode.
+ 	Add TDmode for TARGET_64BIT.
+ 	(VALID_DFP_MODE_P): Remove.
+ 	* config/i386/i386.c (ix86_hard_regno_mode_ok):
+ 	Do not use VALID_DFP_MODE_P.
+ 
+ 2021-07-15  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-fold.cc (adjust_pointer_diff_expr): Use
+ 	gimple_range_type.
+ 	(fold_using_range::fold_stmt): Ditto.
+ 	(fold_using_range::range_of_range_op): Ditto.
+ 	(fold_using_range::range_of_phi): Ditto.
+ 	(fold_using_range::range_of_call): Ditto.
+ 	(fold_using_range::range_of_builtin_ubsan_call): Ditto.
+ 	(fold_using_range::range_of_builtin_call): Ditto.
+ 	(fold_using_range::range_of_cond_expr): Ditto.
+ 	* gimple-range-fold.h (gimple_range_type): New.
+ 
+ 2021-07-15  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/97027
+ 	* tree-ssa-strlen.c (handle_assign): New function.
+ 	(maybe_warn_overflow): Add argument.
+ 	(nonzero_bytes_for_type): New function.
+ 	(count_nonzero_bytes): Handle more tree types.  Call
+ 	nonzero_bytes_for_tye.
+ 	(count_nonzero_bytes): Handle types.
+ 	(handle_store): Handle stores from function calls.
+ 	(strlen_check_and_optimize_call): Move code to handle_assign.  Call
+ 	it for assignments from function calls.
+ 
+ 2021-07-15  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/95006
+ 	PR analyzer/94713
+ 	PR analyzer/94714
+ 	* doc/invoke.texi: Add -Wanalyzer-use-of-uninitialized-value.
+ 
+ 2021-07-15  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* doc/invoke.texi (-fdump-analyzer-exploded-paths): New.
+ 
+ 2021-07-15  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR c/101289
+ 	PR c/97548
+ 	* fold-const.c (operand_compare::operand_equal_p): Handle OEP_DECL_NAME.
+ 	(operand_compare::verify_hash_value): Same.
+ 	* tree-core.h (OEP_DECL_NAME): New.
+ 
+ 2021-07-15  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* profile-count.h (profile_count::value): Change the return type to
+ 	uint64_t.
+ 	* gimple-pretty-print.c (dump_gimple_bb_header): Adjust print
+ 	statement.
+ 	* tree-cfg.c (dump_function_to_file): Likewise.
+ 
+ 2021-07-15  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	PR target/101129
+ 	* config/rs6000/rs6000-p8swap.c (has_part_mult): New.
+ 	(rs6000_analyze_swaps): Insns containing a subreg of a mult are
+ 	not swappable.
+ 
+ 2021-07-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (vect_gen_while): Match up with
+ 	vect_gen_while_not.
+ 	* tree-vect-stmts.c (vect_gen_while): Adjust API to that
+ 	of vect_gen_while_not.
+ 	(vect_gen_while_not): Adjust.
+ 	* tree-vect-loop-manip.c (vect_set_loop_controls_directly): Likewise.
+ 
+ 2021-07-15  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range-cache.cc (non_null_ref::adjust_range): New.
+ 	(ranger_cache::range_of_def): Call adjust_range.
+ 	(ranger_cache::entry_range): Same.
+ 	* gimple-range-cache.h (non_null_ref::adjust_range): New.
+ 	* gimple-range.cc (gimple_ranger::range_of_expr): Call
+ 	adjust_range.
+ 	(gimple_ranger::range_on_entry): Same.
+ 
+ 2021-07-15  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Revert:
+ 	2021-07-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/arm/neon.md (<sup>dot_prod<vsi2qi>): Drop statements.
+ 
+ 2021-07-15  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Revert:
+ 	2021-07-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (udot, sdot): Rename to...
+ 	(sdot_prod, udot_prod): ...These.
+ 	* config/aarch64/aarch64-simd.md (<sur>dot_prod<vsi2qi>): Remove.
+ 	(aarch64_<sur>dot<vsi2qi>): Rename to...
+ 	(<sur>dot_prod<vsi2qi>): ...This.
+ 	* config/aarch64/arm_neon.h (vdot_u32, vdotq_u32, vdot_s32, vdotq_s32):
+ 	Update builtins.
+ 
+ 2021-07-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/101437
+ 	* gimplify.c (gimplify_expr): Throw away volatile reads from empty
+ 	types even if they have non-BLKmode TYPE_MODE.
+ 
+ 2021-07-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR driver/101383
+ 	* gcc.c (process_command): Process -gtoggle like process_options
+ 	would after parsing options.
+ 
+ 2021-07-15  Trevor Saunders  <tbsaunde@tbsaunde.org>
+ 
+ 	* cfgexpand.c (expand_asm_loc): Adjust.
+ 	(expand_asm_stmt): Likewise.
+ 	* config/arm/aarch-common-protos.h (arm_md_asm_adjust): Likewise.
+ 	* config/arm/aarch-common.c (arm_md_asm_adjust): Likewise.
+ 	* config/arm/arm.c (thumb1_md_asm_adjust): Likewise.
+ 	* config/avr/avr.c (avr_md_asm_adjust): Likewise.
+ 	* config/cris/cris.c (cris_md_asm_adjust): Likewise.
+ 	* config/i386/i386.c (ix86_md_asm_adjust): Likewise.
+ 	* config/mn10300/mn10300.c (mn10300_md_asm_adjust): Likewise.
+ 	* config/nds32/nds32.c (nds32_md_asm_adjust): Likewise.
+ 	* config/pdp11/pdp11.c (pdp11_md_asm_adjust): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_md_asm_adjust): Likewise.
+ 	* config/s390/s390.c (s390_md_asm_adjust): Likewise.
+ 	* config/vax/vax.c (vax_md_asm_adjust): Likewise.
+ 	* config/visium/visium.c (visium_md_asm_adjust): Likewise.
+ 	* doc/tm.texi: Regenerate.
+ 	* target.def: Add location argument to md_asm_adjust.
+ 
+ 2021-07-15  Trevor Saunders  <tbsaunde@tbsaunde.org>
+ 
+ 	* tree-diagnostic.c (diagnostic_report_current_function): Use the
+ 	diagnostic's location, not input_location.
+ 
+ 2021-07-15  Trevor Saunders  <tbsaunde@tbsaunde.org>
+ 
+ 	* cfgexpand.c (tree_conflicts_with_clobbers_p): Pass location to
+ 	diagnostics.
+ 	(expand_asm_stmt): Likewise.
+ 
+ 2021-07-14  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (adjacent_mem_locations): Return the lower
+ 	addressed memory rtx, if any.
+ 	(rs6000_split_multireg_move): Fix code formatting.
+ 	Handle MMA build built-ins with operands in adjacent memory locations.
+ 
+ 2021-07-14  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_split_multireg_move): Move to later
+ 	in the file.
+ 
+ 2021-07-14  Jason Merrill  <jason@redhat.com>
+ 
+ 	* sel-sched-ir.h (get_all_loop_exits): Use auto_vec.
+ 
+ 2021-07-14  Jason Merrill  <jason@redhat.com>
+ 
+ 	* doc/invoke.texi: -fdelete-dead-exceptions is on by default for
+ 	C++.
+ 
+ 2021-07-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-patterns.c (vect_recog_dot_prod_pattern):
+ 	Remove erroneous line.
+ 
+ 2021-07-14  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* params.opt (param_evrp_mode): Change default.
+ 
+ 2021-07-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (udot, sdot): Rename to...
+ 	(sdot_prod, udot_prod): ...These.
+ 	* config/aarch64/aarch64-simd.md (<sur>dot_prod<vsi2qi>): Remove.
+ 	(aarch64_<sur>dot<vsi2qi>): Rename to...
+ 	(<sur>dot_prod<vsi2qi>): ...This.
+ 	* config/aarch64/arm_neon.h (vdot_u32, vdotq_u32, vdot_s32, vdotq_s32):
+ 	Update builtins.
+ 
+ 2021-07-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/arm/neon.md (<sup>dot_prod<vsi2qi>): Drop statements.
+ 
+ 2021-07-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* doc/sourcebuild.texi (arm_v8_2a_i8mm_neon_hw): Document.
+ 
+ 2021-07-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/arm/neon.md (usdot_prod<vsi2qi>): New.
+ 
+ 2021-07-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_usdot<vsi2qi>): Rename to...
+ 	(usdot_prod<vsi2qi>): ... This.
+ 	* config/aarch64/aarch64-simd-builtins.def (usdot): Rename to...
+ 	(usdot_prod): ...This.
+ 	* config/aarch64/arm_neon.h (vusdot_s32, vusdotq_s32): Likewise.
+ 	* config/aarch64/aarch64-sve.md (@aarch64_<sur>dot_prod<vsi2qi>):
+ 	Rename to...
+ 	(@<sur>dot_prod<vsi2qi>): ...This.
+ 	* config/aarch64/aarch64-sve-builtins-base.cc
+ 	(svusdot_impl::expand): Use it.
+ 
+ 2021-07-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* optabs.def (usdot_prod_optab): New.
+ 	* doc/md.texi: Document it and clarify other dot prod optabs.
+ 	* optabs-tree.h (enum optab_subtype): Add optab_vector_mixed_sign.
+ 	* optabs-tree.c (optab_for_tree_code): Support usdot_prod_optab.
+ 	* optabs.c (expand_widen_pattern_expr): Likewise.
+ 	* tree-cfg.c (verify_gimple_assign_ternary): Likewise.
+ 	* tree-vect-loop.c (vectorizable_reduction): Query dot-product kind.
+ 	* tree-vect-patterns.c (vect_supportable_direct_optab_p): Take optional
+ 	optab subtype.
+ 	(vect_widened_op_tree): Optionally ignore
+ 	mismatch types.
+ 	(vect_recog_dot_prod_pattern): Support usdot_prod_optab.
+ 
+ 2021-07-14  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101395
+ 	* config/i386/driver-i386.c (host_detect_local_cpu): Check
+ 	"arch [32|64]" and "tune [32|64]" for 32-bit and 64-bit codegen.
+ 	Enable UINTR only for 64-bit codegen.
+ 	* config/i386/i386-options.c
+ 	(ix86_option_override_internal::DEF_PTA): Skip PTA_UINTR if not
+ 	in 64-bit mode.
+ 	* config/i386/i386.h (ARCH_ARG): New.
+ 	(CC1_CPU_SPEC): Pass "[arch|tune] 32" for 32-bit codegen and
+ 	"[arch|tune] 64" for 64-bit codegen.
+ 
+ 2021-07-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101445
+ 	* tree-vect-stmts.c (vectorizable_load): Do the gap adjustment
+ 	of the IV in the correct direction for negative stride
+ 	accesses.
+ 
+ 2021-07-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR go/101407
+ 	* godump.c (godump_str_hash): New type.
+ 	(godump_container::pot_dummy_types): Use string_hash instead of
+ 	ptr_hash in the hash_set.
+ 
+ 2021-07-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-loop.c (vect_find_reusable_accumulator): Handle
+ 	vector types where the old vector type has a multiple of
+ 	the new vector type elements.
+ 	(vect_create_partial_epilog): New function, split out from...
+ 	(vect_create_epilog_for_reduction): ... here.
+ 	(vect_transform_cycle_phi): Reduce the re-used accumulator
+ 	to the new vector type.
+ 
+ 2021-07-14  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* tree-ssa-alias.c (attr_fnspec::verify): Fix index in
+ 	non-'t'-sized arg check.
+ 
+ 2021-07-14  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* tree-cfg.c (cleanup_dead_labels_eh): Update
+ 	post_landing_pad label upon change of landing pad block's
+ 	primary label.
+ 	(cleanup_dead_labels): Check that a removed label is not that
+ 	of a landing pad.
+ 
+ 2021-07-13  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* combine.c (combine_simplify_rtx): Add vec_select -> subreg
+ 	simplification.
+ 	* config/aarch64/aarch64.md (*zero_extend<SHORT:mode><GPI:mode>2_aarch64):
+ 	Add Neon to general purpose register case for zero-extend
+ 	pattern.
+ 	* config/arm/vfp.md (*arm_movsi_vfp): Remove "*" from *t -> r
+ 	case to prevent some cases opting to go through memory.
+ 	* cse.c (fold_rtx): Add vec_select -> subreg simplification.
+ 	* rtl.c (rtvec_series_p): Define predicate to determine
+ 	whether a vector contains a linear series of integers.
+ 	* rtl.h (rtvec_series_p): Define.
+ 	* rtlanal.c (vec_series_lowpart_p): Define predicate to
+ 	determine if a vector selection is equivalent to the low part
+ 	of the vector.
+ 	* rtlanal.h (vec_series_lowpart_p): Define.
+ 	* simplify-rtx.c (simplify_context::simplify_binary_operation_1):
+ 	Add vec_select -> subreg simplification.
+ 
+ 2021-07-13  Paul A. Clarke  <pc@us.ibm.com>
+ 
+ 	* config/rs6000/smmintrin.h (_mm_testz_si128, _mm_testc_si128,
+ 	_mm_testnzc_si128, _mm_test_all_ones, _mm_test_all_zeros,
+ 	_mm_test_mix_ones_zeros): New.
+ 
+ 2021-07-13  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple.c (gimple_could_trap_p_1):  Make S argument a
+ 	"const gimple*".  Preserve constness in call to
+ 	gimple_asm_volatile_p.
+ 	(gimple_could_trap_p): Make S argument a "const gimple*".
+ 	* gimple.h (gimple_could_trap_p_1, gimple_could_trap_p):
+ 	Update function prototypes.
+ 
+ 2021-07-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vectorizer.h (vect_reusable_accumulator): New structure.
+ 	(_loop_vec_info::main_loop_edge): New field.
+ 	(_loop_vec_info::skip_main_loop_edge): Likewise.
+ 	(_loop_vec_info::skip_this_loop_edge): Likewise.
+ 	(_loop_vec_info::reusable_accumulators): Likewise.
+ 	(_stmt_vec_info::reduc_scalar_results): Likewise.
+ 	(_stmt_vec_info::reused_accumulator): Likewise.
+ 	(vect_get_main_loop_result): Declare.
+ 	* tree-vectorizer.c (vec_info::new_stmt_vec_info): Initialize
+ 	reduc_scalar_inputs.
+ 	(vec_info::free_stmt_vec_info): Free reduc_scalar_inputs.
+ 	* tree-vect-loop-manip.c (vect_get_main_loop_result): New function.
+ 	(vect_do_peeling): Fill an epilogue loop's main_loop_edge,
+ 	skip_main_loop_edge and skip_this_loop_edge fields.
+ 	* tree-vect-loop.c (INCLUDE_ALGORITHM): Define.
+ 	(vect_emit_reduction_init_stmts): New function.
+ 	(get_initial_def_for_reduction): Use it.
+ 	(get_initial_defs_for_reduction): Likewise.  Change the vinfo
+ 	parameter to a loop_vec_info.
+ 	(vect_create_epilog_for_reduction): Store the scalar results
+ 	in the reduc_info.  If an epilogue loop is reusing an accumulator
+ 	from the main loop, and if the epilogue loop can also be skipped,
+ 	try to place the reduction code in the join block.  Record
+ 	accumulators that could potentially be reused by epilogue loops.
+ 	(vect_transform_cycle_phi): When vectorizing epilogue loops,
+ 	try to reuse accumulators from the main loop.  Record the initial
+ 	value in reduc_info for non-SLP reductions too.
+ 
+ 2021-07-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-loop.c (get_initial_def_for_reduction): Remove
+ 	adjustment handling.  Take the neutral value as an argument,
+ 	in place of the code argument.
+ 	(vect_transform_cycle_phi): Update accordingly.  Handle the
+ 	initial values of cond reductions separately from code reductions.
+ 	Choose the adjustment here rather than in
+ 	get_initial_def_for_reduction.  Sink the splat of vec_initial_def.
+ 
+ 2021-07-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-loop.c (neutral_op_for_slp_reduction): Replace with...
+ 	(neutral_op_for_reduction): ...this, providing a more general
+ 	interface.
+ 	(vect_create_epilog_for_reduction): Update accordingly.
+ 	(vectorizable_reduction): Likewise.
+ 	(vect_transform_cycle_phi): Likewise.
+ 
+ 2021-07-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-loop.c (get_initial_def_for_reduction): Take the
+ 	reduc_info instead of the original stmt_vec_info.
+ 	(vect_transform_cycle_phi): Update accordingly.
+ 
+ 2021-07-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-loop.c (get_initial_defs_for_reduction): Take the
+ 	reduc_info as an additional parameter.
+ 	(vect_transform_cycle_phi): Update accordingly.
+ 
+ 2021-07-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vectorizer.h: Include tree-ssa-operands.h.
+ 	(vect_phi_initial_value): New function.
+ 	* tree-vect-loop.c (neutral_op_for_slp_reduction): Use it.
+ 	(get_initial_defs_for_reduction, info_for_reduction): Likewise.
+ 	(vect_create_epilog_for_reduction, vectorizable_reduction): Likewise.
+ 	(vect_transform_cycle_phi, vectorizable_induction): Likewise.
+ 
+ 2021-07-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-loop.c (vect_create_epilog_for_reduction): Convert
+ 	the phi results to vectype after creating them.  Remove later
+ 	conversion code that thus becomes redundant.
+ 
+ 2021-07-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-loop.c (vect_create_epilog_for_reduction): Replace
+ 	the new_phis vector with a reduc_inputs vector.  Combine handling
+ 	of reduction chains and ncopies > 1.
+ 
+ 2021-07-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-loop.c (vect_create_epilog_for_reduction): Truncate
+ 	scalar_results to group_size elements after reducing down from
+ 	N*group_size elements.  Construct an array_slice of the live-out
+ 	stmts and assert that there is one stmt per scalar result.
+ 
+ 2021-07-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-loop.c (vect_create_epilog_for_reduction): Remove
+ 	nested_in_vect_loop and use double_reduc everywhere.  Remove dead
+ 	assignment to "loop".
+ 
+ 2021-07-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* internal-fn.c (vectorized_internal_fn_supported_p): Handle
+ 	vector types first.  For scalar types, consider both the preferred
+ 	vector mode and the alternative vector modes.
+ 	* optabs-query.c (can_vec_mask_load_store_p): Use the same
+ 	structure as above, in particular using related_vector_mode
+ 	for modes provided by autovectorize_vector_modes.
+ 
+ 2021-07-13  Jakub Jelinek  <jakub@redhat.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101419
+ 	* tree-pass.h (PROP_objsz): Define.
+ 	(make_pass_early_object_sizes): Declare.
+ 	* passes.def (pass_all_early_optimizations): Rename pass_object_sizes
+ 	there to pass_early_object_sizes, drop parameter.
+ 	(pass_all_optimizations): Move pass_object_sizes right after pass_ccp,
+ 	drop parameter, move pass_post_ipa_warn right after that.
+ 	* tree-object-size.c (pass_object_sizes::execute): Rename to...
+ 	(object_sizes_execute): ... this.  Add insert_min_max_p argument.
+ 	(pass_data_object_sizes): Move after object_sizes_execute.
+ 	(pass_object_sizes): Likewise.  In execute method call
+ 	object_sizes_execute, drop set_pass_param method and insert_min_max_p
+ 	non-static data member and its initializer in the ctor.
+ 	(pass_data_early_object_sizes, pass_early_object_sizes,
+ 	make_pass_early_object_sizes): New.
+ 	* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Use
+ 	(cfun->curr_properties & PROP_objsz) instead of cfun->after_inlining.
+ 
+ 2021-07-13  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	PR target/101275
+ 	* config/riscv/constraints.md ("S"): Update description and remove
+ 	@internal.
+ 	* doc/md.texi (Machine Constraints): Document the 'S' constraints
+ 	for RISC-V.
+ 
+ 2021-07-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	Revert:
+ 	2021-07-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.c (vect_slp_region): Show the number of
+ 	SLP graph entries in the optimization message.
+ 
+ 2021-07-13  Michael Meissner  <meissner@linux.ibm.com>
+ 
+ 	* config/rs6000/altivec.md (xxspltiw_v4sf): Change local variable
+ 	value to to long.
+ 	* config/rs6000/rs6000-protos.h (rs6000_const_f32_to_i32): Change
+ 	return type to long.
+ 	* config/rs6000/rs6000.c (rs6000_const_f32_to_i32): Change return
+ 	type to long.
+ 
+ 2021-07-12  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-fold.cc (fold_using_range::range_of_builtin_ubsan_call):
+ 	Query relation between the 2 operands and use it.
+ 
+ 2021-07-12  Sergei Trofimovich  <siarheit@google.com>
+ 
+ 	* doc/cfg.texi: Fix s/ei_safe_safe/ei_safe_edge/ typo.
+ 
+ 2021-07-12  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/101424
+ 	* config/i386/predicates.md (vec_setm_sse41_operand):
+ 	Rename from vec_setm_operand.
+ 	(vec_setm_avx2_operand): New predicate.
+ 	* config/i386/sse.md (vec_set<V_128:mode>): Use V_128 mode iterator.
+ 	Use vec_setm_sse41_operand as operand 2 predicate.
+ 	(vec_set<V_256_512:mode): New expander.
+ 	* config/i386/mmx.md (vec_setv2hi): Use vec_setm_sse41_operand
+ 	as operand 2 predicate.
+ 
+ 2021-07-12  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/101335
+ 	* range-op.cc (operator_cast::lhs_op1_relation): Delete.
+ 
+ 2021-07-12  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-ssa-phiopt.c (match_simplify_replacement): Move
+ 	insert of the sequence before the movement of the
+ 	statement. Check if to see if the statement is used
+ 	outside of the original phi to see if we should move it.
+ 
+ 2021-07-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	* dump-context.h (debug_dump_context::debug_dump_context):
+ 	Add FILE * parameter defaulted to stderr.
+ 	* dumpfile.c (debug_dump_context::debug_dump_context): Adjust.
+ 	* tree-vect-slp.c (dot_slp_tree): New functions.
+ 
+ 2021-07-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101373
+ 	* tree-ssa-pre.c (prune_clobbered_mems): Also prune trapping
+ 	references when the BB may not return.
+ 	(compute_avail): Pass in the function we're working on and
+ 	replace cfun references with it.  Externally throwing
+ 	const calls also possibly terminate the function.
+ 	(pass_pre::execute): Pass down the function we're working on.
+ 	* gcse.c (compute_hash_table_work): Externally throwing
+ 	const/pure calls also need record_last_mem_set_info.
+ 	* postreload-gcse.c (record_opr_changes): Looping or externally
+ 	throwing const/pure calls also need record_last_mem_set_info.
+ 
+ 2021-07-12  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* recog.c (memory_address_addr_space_p): Change the type to bool.
+ 	Return true/false instead of 1/0.
+ 	(offsettable_memref_p): Ditto.
+ 	(offsettable_nonstrict_memref_p): Ditto.
+ 	(offsettable_address_addr_space_p): Ditto.
+ 	Change the type of addressp indirect function to bool.
+ 	* recog.h (memory_address_addr_space_p): Change the type to bool.
+ 	(strict_memory_address_addr_space_p): Ditto.
+ 	(offsettable_memref_p): Ditto.
+ 	(offsettable_nonstrict_memref_p): Ditto.
+ 	(offsettable_address_addr_space_p): Ditto.
+ 	* reload.c (maybe_memory_address_addr_space_p): Ditto.
+ 	(strict_memory_address_addr_space_p): Change the type to bool.
+ 	Return true/false instead of 1/0.
+ 	(maybe_memory_address_addr_space_p): Change the type to bool.
+ 
+ 2021-07-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.c (vect_slp_region): Show the number of
+ 	SLP graph entries in the optimization message.
+ 
+ 2021-07-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101394
+ 	* tree-ssa-pre.c (do_pre_regular_insertion): Avoid inserting
+ 	copies from abnormals for a full redundancy.
+ 
+ 2021-07-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/101423
+ 	* gimple.c (gimple_could_trap_p_1): Internal function calls
+ 	do not trap.
+ 	* tree-eh.c (tree_could_trap_p): Likewise.
+ 
+ 2021-07-12  prathamesh.kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	PR target/66791
+ 	* config/arm/arm_neon.h (vmul_n_u32): Replace call to builtin with
+ 	__a * __b.
+ 	(vmulq_n_u32): Likewise.
+ 	(vmul_n_f32): Gate __a * __b on __FAST_MATH__.
+ 	(vmulq_n_f32): Likewise.
+ 	(vmul_n_f16): Likewise.
+ 	(vmulq_n_f16): Likewise.
+ 
+ 2021-07-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR sanitizer/101425
+ 	* gcc.c (check_offload_target_name): Call
+ 	  candidates_list_and_hint only if we have a candidate.
+ 
+ 2021-07-12  prathamesh.kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	PR target/98435
+ 	* config/arm/neon.md (vec_init): Move to ...
+ 	* config/arm/vec-common.md (vec_init): ... here.
+ 	Change the pattern's mode to VDQX and gate it on VALID_MVE_MODE.
+ 
+ 2021-07-12  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR tree-optimization/101403
+ 	* match.pd ((T)bswap(X)>>C): Correctly handle cases where
+ 	signedness of the shift is not the same as the signedness of
+ 	the type extension.
+ 
+ 2021-07-09  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.md (*divmodsi4_const): Optimize SImode
+ 	divmod of a constant numerator with new define_insn_and_split.
+ 
+ 2021-07-09  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR target/100152
+ 	* config/i386/i386-expand.c (ix86_expand_call): If a call is
+ 	to a non-local-binding, or local but to a public symbol, then
+ 	assume that it might be indirected via the lazy symbol binder.
+ 	Mark R10 and R10 as clobbered in that case.
+ 
+ 2021-07-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR target/101377
+ 	* gcc.c (ASM_DEBUG_DWARF_OPTION): Set again to --gdwarf2 in
+ 	the case where HAVE_AS_WORKING_DWARF_N_FLAG is not defined
+ 	and HAVE_LD_BROKEN_PE_DWARF5 is defined.
+ 
+ 2021-07-09  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.md (*udivmodsi4_pow2_zext_1): Limit the
+ 	log2 range of operands[3] to [1,31].
+ 	(*udivmodsi4_pow2_zext_2): Ditto.  Correct insn RTX pattern.
+ 
+ 2021-07-09  Sergei Trofimovich  <siarheit@google.com>
+ 
+ 	* doc/md.texi: Don't split @smallexample in multiple @groups.
+ 
+ 2021-07-09  Sergei Trofimovich  <siarheit@google.com>
+ 
+ 	* doc/md.texi: Add missing 'see' word.
+ 
+ 2021-07-09  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-ssa-phiopt.c (phiopt_early_allow): Change arguments
+ 	to take sequence and gimple_match_op.  Accept the case where
+ 	op is a SSA_NAME and one statement in the sequence.
+ 	Also allow constants.
+ 	(gimple_simplify_phiopt): Always pass a sequence to resimplify.
+ 	Update call to phiopt_early_allow.  Discard the sequence if not
+ 	used.
+ 
+ 2021-07-09  Xi Ruoyao  <xry111@mengyan1223.wang>
+ 
+ 	PR target/100760
+ 	PR target/100761
+ 	PR target/100762
+ 	* config/mips/mips.c (mips_const_insns): Use MSA_SUPPORTED_MODE_P
+ 	instead of ISA_HAS_MSA.
+ 	(mips_expand_vec_unpack): Likewise.
+ 	(mips_expand_vector_init): Likewise.
+ 
+ 2021-07-09  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/vsx.md (mods_<mode>): Rename to...
+ 	(mod<mode>3): ... this.
+ 	(modu_<mode>): Rename to...
+ 	(umod<mode>3): ... this.
+ 	* config/rs6000/rs6000-builtin.def (MODS_V2DI, MODS_V4SI, MODU_V2DI,
+ 	MODU_V4SI): Adjust.
+ 
+ 2021-07-08  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/shiftrotate.md (variable shifts): Expose condition
+ 	code handling for the test before the loop.
+ 
+ 2021-07-08  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/101066
+ 	* ipa-sra.c (class isra_call_summary): New member
+ 	m_before_any_store, initialize it in the constructor.
+ 	(isra_call_summary::dump): Dump the new field.
+ 	(ipa_sra_call_summaries::duplicate): Copy it.
+ 	(process_scan_results): Set it.
+ 	(isra_write_edge_summary): Stream it.
+ 	(isra_read_edge_summary): Likewise.
+ 	(param_splitting_across_edge): Only override
+ 	safe_to_import_accesses if m_before_any_store is set.
+ 
+ 2021-07-08  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR bootstrap/101374
+ 	* gimple-array-bounds.cc (array_bounds_checker::check_mem_ref):
+ 	Use Object Size Type 0 instead of 1.
+ 
+ 2021-07-08  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-loop.c (vectorizable_reduction): Remove always-true
+ 	if condition.
+ 
+ 2021-07-08  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* match.pd: Simplify an extend-operate-truncate sequence involving
+ 	a POLY_INT_CST.
+ 
+ 2021-07-08  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/40210
+ 	* match.pd (bswap optimizations): Simplify (bswap(x)>>C1)&C2 as
+ 	(x>>C3)&C2 when possible.  Simplify bswap(x)>>C1 as ((T)x)>>C2
+ 	when possible.  Simplify bswap(x)&C1 as (x>>C2)&C1 when 0<=C1<=255.
+ 
+ 2021-07-08  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100637
+ 	* config/i386/i386-expand.c (ix86_expand_sse_unpack):
+ 	Handle V4QI mode.
+ 	* config/i386/mmx.md (V_32): New mode iterator.
+ 	(mov<V_32:mode>): Use V_32 mode iterator.
+ 	(*mov<V_32:mode>_internal): Ditto.
+ 	(*push<V_32:mode>2_rex64): Ditto.
+ 	(*push<V_32:mode>2): Ditto.
+ 	(movmisalign<V_32:mode>): Ditto.
+ 	(mmx_<any_shiftrt:insn>v1si3): New insn pattern.
+ 	(sse4_1_<any_extend:code>v2qiv2hi2): Ditto.
+ 	(vec_unpacks_lo_v4qi): New expander.
+ 	(vec_unpacks_hi_v4qi): Ditto.
+ 	(vec_unpacku_lo_v4qi): Ditto.
+ 	(vec_unpacku_hi_v4qi): Ditto.
+ 	* config/i386/i386.h (VALID_SSE2_REG_MODE): Add V1SImode.
+ 	(VALID_INT_MODE_P): Ditto.
+ 
+ 2021-07-08  Michael Meissner  <meissner@linux.ibm.com>
+ 
+ 	PR target/100809
+ 	* config/rs6000/rs6000.md (udivti3): New insn.
+ 	(divti3): New insn.
+ 	(umodti3): New insn.
+ 	(modti3): New insn.
+ 
+ 2021-07-07  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR tree-optimization/100137
+ 	PR tree-optimization/99121
+ 	PR tree-optimization/97027
+ 	* builtins.c (access_ref::access_ref): Also set offmax.
+ 	(access_ref::offset_in_range): Define new function.
+ 	(access_ref::add_offset): Set offmax.
+ 	(access_ref::inform_access): Handle access_none.
+ 	(handle_mem_ref): Clear ostype.
+ 	(compute_objsize_r): Handle ASSERT_EXPR.
+ 	* builtins.h (struct access_ref): Add offmax member.
+ 	* gimple-array-bounds.cc (array_bounds_checker::check_mem_ref): Use
+ 	compute_objsize() and simplify.
+ 
+ 2021-07-07  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (mma_init_builtins): Use VSX_BUILTIN_LXVP
+ 	and VSX_BUILTIN_STXVP.
+ 
+ 2021-07-07  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR target/101363
+ 	* config/aarch64/aarch64.c (aarch64_simd_lane_bounds): Remove
+ 	a stray %K from error_at() missed in r12-2088.
+ 
+ 2021-07-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99728
+ 	* tree-ssa-loop-im.c (gather_mem_refs_stmt): Record
+ 	aggregate copies.
+ 	(mem_refs_may_alias_p): Add assert we handled aggregate
+ 	copies elsewhere.
+ 	(sm_seq_valid_bb): Give up when running into aggregate copies.
+ 	(ref_indep_loop_p): Handle aggregate copies as never
+ 	being invariant themselves but allow other refs to be
+ 	disambiguated against them.
+ 	(can_sm_ref_p): Do not try to apply store-motion to aggregate
+ 	copies.
+ 
+ 2021-07-06  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	PR debug/101283
+ 	* dwarf2ctf.c (ctf_get_AT_data_member_location): Multiply by 8 to get
+ 	number of bits.
+ 
+ 2021-07-06  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* gimple-pretty-print.c (percent_G_format): Remove.
+ 	* tree-diagnostic.c (default_tree_printer): Remove calls.
+ 	* tree-pretty-print.c (percent_K_format): Remove.
+ 	* tree-pretty-print.h (percent_K_format): Remove.
+ 
+ 2021-07-06  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c (aarch64_simd_expand_builtin):
+ 	Remove %K and use error_at.
+ 	(aarch64_expand_fcmla_builtin): Same.
+ 	(aarch64_expand_builtin_tme): Same.
+ 	(aarch64_expand_builtin_memtag): Same.
+ 	* config/arm/arm-builtins.c (arm_expand_acle_builtin): Same.
+ 	(arm_expand_builtin): Same.
+ 	* config/arm/arm.c (bounds_check): Same.
+ 
+ 2021-07-06  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* builtins.c (warn_string_no_nul): Remove %G.
+ 	(maybe_warn_for_bound): Same.
+ 	(warn_for_access): Same.
+ 	(check_access): Same.
+ 	(check_strncat_sizes): Same.
+ 	(expand_builtin_strncat): Same.
+ 	(expand_builtin_strncmp): Same.
+ 	(expand_builtin): Same.
+ 	(expand_builtin_object_size): Same.
+ 	(warn_dealloc_offset): Same.
+ 	(maybe_emit_free_warning): Same.
+ 	* calls.c (maybe_warn_alloc_args_overflow): Same.
+ 	(maybe_warn_nonstring_arg): Same.
+ 	(maybe_warn_rdwr_sizes): Same.
+ 	* expr.c (expand_expr_real_1): Remove %K.
+ 	* gimple-fold.c (gimple_fold_builtin_strncpy): Remove %G.
+ 	(gimple_fold_builtin_strncat): Same.
+ 	* gimple-ssa-sprintf.c (format_directive): Same.
+ 	(handle_printf_call): Same.
+ 	* gimple-ssa-warn-alloca.c (pass_walloca::execute): Same.
+ 	* gimple-ssa-warn-restrict.c (maybe_diag_overlap): Same.
+ 	(maybe_diag_access_bounds): Same.  Call gimple_location.
+ 	(check_bounds_or_overlap): Same.
+ 	* trans-mem.c (ipa_tm_scan_irr_block): Remove %K.  Simplify.
+ 	* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Remove %G.
+ 	* tree-ssa-strlen.c (maybe_warn_overflow): Same.
+ 	(maybe_diag_stxncpy_trunc): Same.
+ 	(handle_builtin_stxncpy_strncat): Same.
+ 	(maybe_warn_pointless_strcmp): Same.
+ 	* tree-ssa-uninit.c (maybe_warn_operand): Same.
+ 
+ 2021-07-06  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/97194
+ 	* config/i386/predicates.md (vec_setm_operand): Enable
+ 	register_operand for TARGET_SSE4_1.
+ 	* config/i386/mmx.md (vec_setv2hi): Use vec_setm_operand
+ 	as operand 2 predicate.  Call ix86_expand_vector_set_var
+ 	for non-constant index operand.
+ 	(vec_setv4qi): Use vec_setm_mmx_operand as operand 2 predicate.
+ 	Call ix86_expand_vector_set_var for non-constant index operand.
+ 
+ 2021-07-06  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/jumpcall.md (*branch): When possible, generate
+ 	the comparison in CCZN mode.
+ 	* config/h8300/predicates.md (simple_memory_operand): Reject all
+ 	auto-increment addressing modes.
+ 
+ 2021-07-06  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR bootstrap/100246
+ 	* config/i386/i386.h (struct stringop_algs): Define a CTOR for
+ 	this type.
+ 
+ 2021-07-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	* doc/md.texi (vec_fmaddsub<mode>4): Document.
+ 	(vec_fmsubadd<mode>4): Likewise.
+ 	* optabs.def (vec_fmaddsub$a4): Add.
+ 	(vec_fmsubadd$a4): Likewise.
+ 	* internal-fn.def (IFN_VEC_FMADDSUB): Add.
+ 	(IFN_VEC_FMSUBADD): Likewise.
+ 	* tree-vect-slp-patterns.c (addsub_pattern::recognize):
+ 	Refactor to handle IFN_VEC_FMADDSUB and IFN_VEC_FMSUBADD.
+ 	(addsub_pattern::build): Likewise.
+ 	* tree-vect-slp.c (vect_optimize_slp): CFN_VEC_FMADDSUB
+ 	and CFN_VEC_FMSUBADD are not transparent for permutes.
+ 	* config/i386/sse.md (vec_fmaddsub<mode>4): New expander.
+ 	(vec_fmsubadd<mode>4): Likewise.
+ 
+ 2021-07-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	* doc/invoke.texi (fmove-loop-stores): Document.
+ 	* common.opt (fmove-loop-stores): New option.
+ 	* opts.c (default_options_table): Enable -fmove-loop-stores
+ 	at -O1 but not -Og.
+ 	* tree-ssa-loop-im.c (pass_lim::execute): Pass
+ 	flag_move_loop_stores instead of true to
+ 	loop_invariant_motion_in_fun.
+ 
+ 2021-07-06  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* doc/install.texi: Document --with-dsymutil.
+ 
+ 2021-07-06  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/101256
+ 	* dbgcnt.def (phiopt_edge_range): New counter.
+ 	* tree-ssa-phiopt.c (replace_phi_edge_with_variable):
+ 	Check to make sure the new name is defined in the same
+ 	bb as the conditional before duplicating range info.
+ 	Also add debug counter.
+ 
+ 2021-07-06  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR rtl-optimization/100328
+ 	* config/i386/i386-options.c (ix86_option_override_internal):
+ 	Set param_ira_consider_dup_in_all_alts to 0.
+ 
+ 2021-07-06  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR rtl-optimization/100328
+ 	* doc/invoke.texi (ira-consider-dup-in-all-alts): Document new
+ 	parameter.
+ 	* ira.c (ira_get_dup_out_num): Adjust as parameter
+ 	param_ira_consider_dup_in_all_alts.
+ 	* params.opt (ira-consider-dup-in-all-alts): New.
+ 	* ira-conflicts.c (process_regs_for_copy): Add one parameter
+ 	single_input_op_has_cstr_p.
+ 	(get_freq_for_shuffle_copy): New function.
+ 	(add_insn_allocno_copies): Adjust as single_input_op_has_cstr_p.
+ 	* ira-int.h (ira_get_dup_out_num): Add one bool parameter.
+ 
+ 2021-07-05  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/shiftrotate.md (shift-by-variable patterns): Update to
+ 	generate condition code aware RTL directly.
+ 
+ 2021-07-05  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/101039
+ 	* match.pd (A CMP 0 ? A : -A): New patterns.
+ 	* tree-ssa-phiopt.c (abs_replacement): Delete function.
+ 	(tree_ssa_phiopt_worker): Don't call abs_replacement.
+ 	Update comment about abs_replacement.
+ 
+ 2021-07-05  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-ssa-phiopt.c (gimple_simplify_phiopt):
+ 	If "A ? B : C" fails to simplify, try "(!A) ? C : B".
+ 
+ 2021-07-05  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-ssa-phiopt.c (match_simplify_replacement):
+ 	Add early_p argument. Call gimple_simplify_phiopt
+ 	instead of gimple_simplify.
+ 	(tree_ssa_phiopt_worker): Update call to
+ 	match_simplify_replacement and allow unconditionally.
+ 	(phiopt_early_allow): New function.
+ 	(gimple_simplify_phiopt): New function.
+ 
+ 2021-07-05  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR middle-end/101237
+ 	* fold-const.c (negate_expr_p): Remove call to element_mode
+ 	and TREE_MODE/TREE_TYPE when calling HONOR_SIGNED_ZEROS,
+ 	HONOR_SIGN_DEPENDENT_ROUNDING, and HONOR_SNANS.
+ 	(fold_negate_expr_1): Likewise.
+ 	(const_unop): Likewise.
+ 	(fold_cond_expr_with_comparison): Likewise.
+ 	(fold_binary_loc): Likewise.
+ 	(fold_ternary_loc): Likewise.
+ 	(tree_call_nonnegative_warnv_p): Likewise.
+ 	* match.pd (-(A + B) -> (-B) - A): Likewise.
+ 
+ 2021-07-05  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* configure.ac: Handle --with-dsymutil in the same way as we
+ 	do for the assembler and linker.  (DEFAULT_DSYMUTIL): New.
+ 	Extract the type and version for the dsymutil configured or
+ 	found by the default searches.
+ 	* config.in: Regenerated.
+ 	* configure: Regenerated.
+ 	* collect2.c (do_dsymutil): Handle locating dsymutil in the
+ 	same way as for the assembler and  linker.
+ 	* config/darwin.h (DSYMUTIL): Delete.
+ 	* gcc.c: Report a configured dsymutil correctly.
+ 	* exec-tool.in: Allow for dsymutil.
+ 
+ 2021-07-05  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_split_mmx_punpck):
+ 	Handle V4QI and V2HI modes.
+ 	(expand_vec_perm_blend): Allow 4-byte vector modes with TARGET_SSE4_1.
+ 	Handle V4QI mode. Emit mmx_pblendvb32 for 4-byte modes.
+ 	(expand_vec_perm_pshufb): Rewrite to use switch statemets.
+ 	Handle 4-byte dual operands with TARGET_XOP and single operands
+ 	with TARGET_SSSE3.  Emit mmx_ppermv32 for TARGET_XOP and
+ 	mmx_pshufbv4qi3 for TARGET_SSSE3.
+ 	(expand_vec_perm_pblendv): Allow 4-byte vector modes with TARGET_SSE4_1.
+ 	(expand_vec_perm_interleave2): Allow 4-byte vector modes.
+ 	(expand_vec_perm_pshufb2): Allow 4-byte vector modes with TARGET_SSSE3.
+ 	(expand_vec_perm_even_odd_1): Handle V4QI mode.
+ 	(expand_vec_perm_broadcast_1): Handle V4QI mode.
+ 	(ix86_vectorize_vec_perm_const): Handle V4QI mode.
+ 	* config/i386/mmx.md (mmx_ppermv32): New insn pattern.
+ 	(mmx_pshufbv4qi3): Ditto.
+ 	(*mmx_pblendw32): Ditto.
+ 	(*mmx_pblendw64): Rename from *mmx_pblendw.
+ 	(mmx_punpckhbw_low): New insn_and_split pattern.
+ 	(mmx_punpcklbw_low): Ditto.
+ 
+ 2021-07-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-loop-manip.c (vect_loop_versioning): Do not
+ 	set LOOP_C_INFINITE on the vectorized loop.
+ 
+ 2021-07-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/101291
+ 	* cfgloopmanip.c (loop_version): Set the loop copy of the
+ 	versioned loop to the new loop.
+ 
+ 2021-07-04  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR target/100269
+ 	* config.gcc: Ensure that Darwin biarch definitions are
+ 	added before i386.h.
+ 	* config/i386/darwin.h (TARGET_64BIT): Remove.
+ 	(PR80556_WORKAROUND): New.
+ 	(REAL_LIBGCC_SPEC): Amend to use PR80556_WORKAROUND.
+ 	(DARWIN_SUBARCH_SPEC): New.
+ 	* config/i386/darwin32-biarch.h (TARGET_64BIT_DEFAULT,
+ 	TARGET_BI_ARCH, PR80556_WORKAROUND): New.
+ 	(REAL_LIBGCC_SPEC): Remove.
+ 	* config/i386/darwin64-biarch.h (TARGET_64BIT_DEFAULT,
+ 	TARGET_BI_ARCH, PR80556_WORKAROUND): New.
+ 	(REAL_LIBGCC_SPEC): Remove.
+ 
+ 2021-07-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR middle-end/101294
+ 	* expr.c (store_constructor): Don't use vec_duplicate on vector.
+ 
+ 2021-07-02  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/98871
+ 	PR middle-end/98512
+ 	* diagnostic.c (get_any_inlining_info): New.
+ 	(update_effective_level_from_pragmas): Handle inlining context.
+ 	(diagnostic_enabled): Same.
+ 	(diagnostic_report_diagnostic): Same.
+ 	* diagnostic.h (struct diagnostic_info): Add ctor.
+ 	(struct diagnostic_context): Add new member.
+ 	* tree-diagnostic.c (set_inlining_locations): New.
+ 	(tree_diagnostics_defaults): Set new callback pointer.
+ 
+ 2021-07-02  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin.def (BU_MMA_PAIR_LD, BU_MMA_PAIR_ST):
+ 	New macros.
+ 	(__builtin_vsx_lxvp, __builtin_vsx_stxvp): New built-ins.
+ 	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_mma_builtin): Expand
+ 	lxvp and stxvp built-ins.
+ 	(mma_init_builtins): Handle lxvp and stxvp built-ins.
+ 	(builtin_function_type): Likewise.
+ 	* doc/extend.texi (__builtin_vsx_lxvp, __builtin_mma_stxvp): Document.
+ 
+ 2021-07-02  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/h8300-protos.h (compute_a_shift_cc): Accept
+ 	additional argument for the code.
+ 	* config/h8300/h8300.c (compute_a_shift_cc): Accept additional
+ 	argument for the code.  Just return if the ZN bits are useful or
+ 	not rather than the old style CC_* enums.
+ 	* config/h8300/shiftrotate.md (shiftqi_noscratch): Move before
+ 	more generic shiftqi patterns.
+ 	(shifthi_noscratch, shiftsi_noscratch): Similarly.
+ 	(shiftqi_noscratch_set_flags): New pattern.
+ 	(shifthi_noscratch_set_flags, shiftsi_noscratch_set_flags): Likewise.
+ 
+ 2021-07-02  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/101223
+ 	* range-op.cc (build_lt): Add -1 for signed values.
+ 	(built_gt): Subtract -1 for signed values.
+ 
+ 2021-07-02  David Faust  <david.faust@oracle.com>
+ 
+ 	* btfout.c (get_btf_kind): Support BTF_KIND_FLOAT.
+ 	(btf_asm_type): Likewise.
+ 
+ 2021-07-02  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/h8300-protos.h (output_a_shift): Make first argument
+ 	an array of rtx rather than a pointer to rtx.  Add code argument.
+ 	(compute_a_shift_length): Similarly.
+ 	* config/h8300/h8300.c (h8300_shift_costs): Adjust now that the
+ 	shift itself isn't an operand.  Create dummy operand[0] to carry
+ 	a mode and pass a suitable rtx code to compute_a_shift_length.
+ 	(get_shift_alg): Adjust operand number of clobber in output templates.
+ 	(output_a_shift): Make first argument an array of rtx rather than
+ 	a pointer to rtx.  Add code argument for the type of shift.
+ 	Adjust now that the shift itself is no longer an operand.
+ 	(compute_a_shift_length): Similarly.
+ 	* config/h8300/shiftrotate.md (shiftqi, shifthi, shiftsi): Use an
+ 	iterator rather than nshift_operator.
+ 	(shiftqi_noscratch, shifthi_noscratch, shiftsi_noscratch): Likewise.
+ 	(shiftqi_clobber_flags): Adjust to API changes in output_a_shift
+ 	and compute_a_shift_length.
+ 	(shiftqi_noscratch_clobber_flags): Likewise.
+ 	(shifthi_noscratch_clobber_flags): Likewise.
+ 	(shiftsi_noscratch_clobber_flags): Likewise.
+ 
+ 2021-07-02  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR debug/101283
+ 	* config/darwin.h (DSYMUTIL_SPEC): Do not try to run
+ 	dsymutil for BTF/CTF.
+ 
+ 2021-07-02  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR debug/101283
+ 	* config/darwin.h (CTF_INFO_SECTION_NAME): Update the
+ 	segment to include BTF.
+ 	(BTF_INFO_SECTION_NAME): New.
+ 
+ 2021-07-02  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/m32r/m32r-protos.h (call_operand): Adjust return type.
+ 	(small_data_operand, memreg_operand, small_insn_p): Likewise.
+ 	* config/m32r/m32r.c (call_operand): Adjust return type.
+ 	(small_data_operand, memreg_operand): Likewise.
+ 
+ 2021-07-02  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/frv/frv-protos.h  (integer_register_operand): Adjust return
+ 	type.
+ 	(frv_load_operand, gpr_or_fpr_operand, gpr_no_subreg_operand): Likewise.
+ 	(fpr_or_int6_operand, gpr_or_int_operand); Likewise.
+ 	(gpr_or_int12_operand, gpr_or_int10_operand); Likewise.
+ 	(move_source_operand, move_destination_operand): Likewise.
+ 	(condexec_source_operand, condexec_dest_operand): Likewise.
+ 	(lr_operand, gpr_or_memory_operand, fpr_or_memory_operand): Likewise.
+ 	(reg_or_0_operand, fcc_operand, icc_operand, cc_operand): Likewise.
+ 	(fcr_operand, icr_operand, cr_operand, call_operand): Likewise.
+ 	(fpr_operand, even_reg_operand, odd_reg_operand): Likewise.
+ 	(even_gpr_operand, odd_gpr_operand, quad_fpr_operand): Likewise.
+ 	(even_fpr_operand, odd_fpr_operand): Likewise.
+ 	(dbl_memory_one_insn_operand, dbl_memory_two_insn_operand): Likewise.
+ 	(int12_operand, int6_operand, int5_operand, uint5_operand): Likewise.
+ 	(uint4_operand, uint1_operand, int_2word_operand): Likewise
+ 	(upper_int16_operand, uint16_operand, symbolic_operand): Likewise.
+ 	(relational_operator, float_relational_operator): Likewise.
+ 	(ccr_eqne_operator, minmax_operator): Likewise.
+ 	(condexec_si_binary_operator, condexec_si_media_operator): Likewise.
+ 	(condexec_si_divide_operator, condexec_si_unary_operator): Likewise.
+ 	(condexec_sf_conv_operator, condexec_sf_add_operator): Likewise.
+ 	(intop_compare_operator, acc_operand, even_acc_operand): Likewise.
+ 	(quad_acc_operand, accg_operand): Likewise.
+ 
+ 2021-07-02  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/stormy16/stormy16-protos.h (xstormy16_below_100_symbol): Change
+ 	return type to a bool.
+ 	(nonimmediate_nonstack_operand): Likewise.
+ 	(xstormy16_splittable_below100_operand): Likewise.
+ 	* config/stormy16/stormy16.c (xstormy16_below_100_symbol): Fix
+ 	return type.
+ 	(xstormy16_splittable_below100_operand): Likewise.
+ 
+ 2021-07-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101293
+ 	* tree-ssa-loop-im.c (mem_ref_hasher::equal): Compare MEM_REF bases
+ 	with combined offsets.
+ 	(gather_mem_refs_stmt): Hash MEM_REFs as if their offset were
+ 	combined with the rest of the offset.
+ 
+ 2021-07-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* config/i386/i386.c (asm_preferred_eh_data_format): Always use the
+ 	PIC encodings for PE-COFF targets.
+ 
+ 2021-07-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/101286
+ 	* config/i386/i386-expand.c (ix86_broadcast_from_integer_constant):
+ 	Return nullptr for TImode inner mode.
+ 
+ 2021-07-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101280
+ 	PR tree-optimization/101173
+ 	* gimple-loop-interchange.cc
+ 	(tree_loop_interchange::valid_data_dependences): Properly
+ 	guard all dependence checks with DDR_REVERSED_P or its
+ 	inverse.
+ 
+ 2021-07-02  Hongyu Wang  <hongyu.wang@intel.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_builtin):
+ 	Add branch to clear odata when ZF is set for asedecenc_expand
+ 	and wideaesdecenc_expand.
+ 
+ 2021-07-02  Eugene Rozenfeld  <erozen@microsoft.com>
+ 
+ 	* config/i386/gcc-auto-profile: regenerate
+ 
+ 2021-07-02  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/sse.md (trunc<mode><pmov_dst_4>2): Refined to ..
+ 	(trunc<mode><pmov_dst_4_lower>2): this.
+ 
+ 2021-07-01  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* diagnostic.h (diagnostic_context::m_file_cache): New field.
+ 	* input.c (class fcache): Rename to...
+ 	(class file_cache_slot): ...this, making most members private and
+ 	prefixing fields with "m_".
+ 	(file_cache_slot::get_file_path): New accessor.
+ 	(file_cache_slot::get_use_count): New accessor.
+ 	(file_cache_slot::missing_trailing_newline_p): New accessor.
+ 	(file_cache_slot::inc_use_count): New.
+ 	(fcache_buffer_size): Move to...
+ 	(file_cache_slot::buffer_size): ...here.
+ 	(fcache_line_record_size): Move to...
+ 	(file_cache_slot::line_record_size): ...here.
+ 	(fcache_tab): Delete, in favor of global_dc->m_file_cache.
+ 	(fcache_tab_size): Move to file_cache::num_file_slots.
+ 	(diagnostic_file_cache_init): Update for move of fcache_tab
+ 	to global_dc->m_file_cache.
+ 	(diagnostic_file_cache_fini): Likewise.
+ 	(lookup_file_in_cache_tab): Convert to...
+ 	(file_cache::lookup_file): ...this.
+ 	(diagnostics_file_cache_forcibly_evict_file): Update for move of
+ 	fcache_tab to global_dc->m_file_cache, moving most of
+ 	implementation to...
+ 	(file_cache::forcibly_evict_file): ...this new function and...
+ 	(file_cache_slot::evict): ...this new function.
+ 	(evicted_cache_tab_entry): Convert to...
+ 	(file_cache::evicted_cache_tab_entry): ...this.
+ 	(add_file_to_cache_tab): Convert to...
+ 	(file_cache::add_file): ...this, moving bulk of implementation
+ 	to...
+ 	(file_cache_slot::create): ..this new function.
+ 	(file_cache::file_cache): New.
+ 	(file_cache::~file_cache): New.
+ 	(lookup_or_add_file_to_cache_tab): Convert to...
+ 	(file_cache::lookup_or_add_file): ..this new function.
+ 	(fcache::fcache): Rename to...
+ 	(file_cache_slot::file_cache_slot): ...this, adding "m_" prefixes
+ 	to fields.
+ 	(fcache::~fcache): Rename to...
+ 	(file_cache_slot::~file_cache_slot): ...this, adding "m_" prefixes
+ 	to fields.
+ 	(needs_read): Convert to...
+ 	(file_cache_slot::needs_read_p): ...this.
+ 	(needs_grow): Convert to...
+ 	(file_cache_slot::needs_grow_p): ...this.
+ 	(maybe_grow): Convert to...
+ 	(file_cache_slot::maybe_grow): ...this.
+ 	(read_data): Convert to...
+ 	(file_cache_slot::read_data): ...this.
+ 	(maybe_read_data): Convert to...
+ 	(file_cache_slot::maybe_read_data): ...this.
+ 	(get_next_line): Convert to...
+ 	(file_cache_slot::get_next_line): ...this.
+ 	(goto_next_line): Convert to...
+ 	(file_cache_slot::goto_next_line): ...this.
+ 	(read_line_num): Convert to...
+ 	(file_cache_slot::read_line_num): ...this.
+ 	(location_get_source_line): Update for moving of globals to
+ 	global_dc->m_file_cache.
+ 	(location_missing_trailing_newline): Likewise.
+ 	* input.h (class file_cache_slot): New forward decl.
+ 	(class file_cache): New.
+ 
+ 2021-07-01  Michael Meissner  <meissner@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_maybe_emit_fp_cmove): Add IEEE
+ 	128-bit floating point conditional move support.
+ 	(have_compare_and_set_mask): Add IEEE 128-bit floating point
+ 	types.
+ 	* config/rs6000/rs6000.md (mov<mode>cc, IEEE128 iterator): New insn.
+ 	(mov<mode>cc_p10, IEEE128 iterator): New insn.
+ 	(mov<mode>cc_invert_p10, IEEE128 iterator): New insn.
+ 	(fpmask<mode>, IEEE128 iterator): New insn.
+ 	(xxsel<mode>, IEEE128 iterator): New insn.
+ 
+ 2021-07-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR debug/101283
+ 	* config/darwin.h (CTF_INFO_SECTION_NAME): New.
+ 
+ 2021-07-01  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_vector_init_duplicate):
+ 	Make it global.
+ 	* config/i386/i386-protos.h (ix86_expand_vector_init_duplicate):
+ 	New prototype.
+ 	* config/i386/sse.md (INT_BROADCAST_MODE): New mode iterator.
+ 	(vec_duplicate<mode>): New expander.
+ 
+ 2021-07-01  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/100865
+ 	* config/i386/i386-expand.c (ix86_expand_vector_init_duplicate):
+ 	New prototype.
+ 	(ix86_byte_broadcast): New function.
+ 	(ix86_convert_const_wide_int_to_broadcast): Likewise.
+ 	(ix86_expand_move): Convert CONST_WIDE_INT to broadcast if mode
+ 	size is 16 bytes or bigger.
+ 	(ix86_broadcast_from_integer_constant): New function.
+ 	(ix86_expand_vector_move): Convert CONST_WIDE_INT and CONST_VECTOR
+ 	to broadcast if mode size is 16 bytes or bigger.
+ 	* config/i386/i386-protos.h (ix86_gen_scratch_sse_rtx): New
+ 	prototype.
+ 	* config/i386/i386.c (ix86_gen_scratch_sse_rtx): New function.
+ 
+ 2021-07-01  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/predicates.md (ix86_endbr_immediate_operand):
+ 	Return true/false instead of 1/0.
+ 	(movq_parallel): Ditto.
+ 
+ 2021-07-01  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* recog.c (general_operand): Return true/false instead of 1/0.
+ 	(register_operand): Ditto.
+ 	(immediate_operand): Ditto.
+ 	(const_int_operand): Ditto.
+ 	(const_scalar_int_operand): Ditto.
+ 	(const_double_operand): Ditto.
+ 	(push_operand): Ditto.
+ 	(pop_operand): Ditto.
+ 	(memory_operand): Ditto.
+ 	(indirect_operand): Ditto.
+ 
+ 2021-07-01  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* genpreds.c (write_predicate_subfunction):
+ 	Change the type of written subfunction to bool.
+ 	(write_one_predicate_function):
+ 	Change the type of written function to bool.
+ 	(write_tm_preds_h): Ditto.
+ 	* recog.h (*insn_operand_predicate_fn): Change the type to bool.
+ 	* recog.c (general_operand): Change the type to bool.
+ 	(address_operand): Ditto.
+ 	(register_operand): Ditto.
+ 	(pmode_register_operand): Ditto.
+ 	(scratch_operand): Ditto.
+ 	(immediate_operand): Ditto.
+ 	(const_int_operand): Ditto.
+ 	(const_scalar_int_operand): Ditto.
+ 	(const_double_operand): Ditto.
+ 	(nonimmediate_operand): Ditto.
+ 	(nonmemory_operand): Ditto.
+ 	(push_operand): Ditto.
+ 	(pop_operand): Ditto.
+ 	(memory_operand): Ditto.
+ 	(indirect_operand): Ditto.
+ 	(ordered_comparison_operator): Ditto.
+ 	(comparison_operator): Ditto.
+ 	* config/i386/i386-expand.c (ix86_expand_sse_cmp):
+ 	Change the type of indirect predicate function to bool.
+ 	* config/rs6000/rs6000.c (easy_vector_constant):
+ 	Change the type to bool.
+ 	* config/mips/mips-protos.h (m16_based_address_p):
+ 	Change the type of operand 3 to bool.
+ 
+ 2021-07-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101280
+ 	PR tree-optimization/101173
+ 	* gimple-loop-interchange.cc
+ 	(tree_loop_interchange::valid_data_dependences): Revert
+ 	previous change and instead correctly handle DDR_REVERSED_P
+ 	dependence.
+ 
+ 2021-07-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101278
+ 	* tree-ssa-dse.c (dse_classify_store): First check for
+ 	uses, then ignore stmt for chaining purposes.
+ 
+ 2021-07-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100778
+ 	* tree-vect-slp.c (vect_schedule_slp_node): Do not place trapping
+ 	vectorized ops ahead of their scalar BB.
+ 
+ 2021-07-01  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/101044
+ 	* config/i386/i386.md (*nabs<dwi>2_doubleword):
+ 	New insn_and_split pattern.
+ 	(*nabs<dwi>2_1): Ditto.
+ 	* config/i386/i386-features.c
+ 	(general_scalar_chain::compute_convert_gain):
+ 	Handle (NEG (ABS (...))) RTX.  Rewrite src code
+ 	scanner as switch statement.
+ 	(general_scalar_chain::convert_insn):
+ 	Handle (NEG (ABS (...))) RTX.
+ 	(general_scalar_to_vector_candidate_p):
+ 	Detect  (NEG (ABS (...))) RTX.  Reorder case statements
+ 	for (AND (NOT (...) ...)) fallthrough.
+ 
+ 2021-07-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101178
+ 	* tree-vect-slp.c (slpg_vertex::materialize): Remove.
+ 	(slpg::perm_in): Add.
+ 	(slpg::get_perm_in): Remove.
+ 	(slpg::get_perm_materialized): Add.
+ 	(vect_optimize_slp): Handle VEC_PERM nodes more optimally
+ 	during permute propagation and materialization.
+ 
+ 2021-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/101266
+ 	* dwarf2out.c (loc_list_from_tree_1): Handle COMPOUND_LITERAL_EXPR.
+ 
+ 2021-07-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/94366
+ 	* omp-low.c (lower_rec_input_clauses): Rename is_fp_and_or to
+ 	is_truth_op, set it for TRUTH_*IF_EXPR regardless of new_var's type,
+ 	use boolean_type_node instead of integer_type_node as NE_EXPR type.
+ 	(lower_reduction_clauses): Likewise.
+ 
+ 2021-06-30  Hafiz Abid Qadeer  <abidh@codesourcery.com>
+ 
+ 	* config/gcn/gcn.c: Include dwarf2.h.
+ 	(gcn_addr_space_debug): New function.
+ 	(TARGET_ADDR_SPACE_DEBUG): New hook.
+ 
+ 2021-06-30  Hafiz Abid Qadeer  <abidh@codesourcery.com>
+ 
+ 	* common/config/gcn/gcn-common.c
+ 	(gcn_option_optimization_table): Change OPT_fomit_frame_pointer to -O3.
+ 	* config/gcn/gcn.c (gcn_expand_prologue): Prefer the frame pointer
+ 	when emitting CFI.
+ 	(gcn_expand_prologue): Prefer the frame pointer when emitting CFI.
+ 	(gcn_frame_pointer_rqd): New function.
+ 	(TARGET_FRAME_POINTER_REQUIRED): New hook.
+ 
+ 2021-06-30  Hafiz Abid Qadeer  <abidh@codesourcery.com>
+ 
+ 	* config/gcn/gcn.c (move_callee_saved_registers): Emit CFI notes for
+ 	prologue register saves.
+ 	(gcn_debug_unwind_info): Use UI_DWARF2.
+ 	(gcn_dwarf_register_number): Map DWARF_LINK_REGISTER to DWARF PC.
+ 	(gcn_dwarf_register_span): DWARF_LINK_REGISTER doesn't span.
+ 	* config/gcn/gcn.h: (DWARF_FRAME_RETURN_COLUMN): New define.
+ 	(DWARF_LINK_REGISTER): New define.
+ 	(FIRST_PSEUDO_REGISTER): Increment.
+ 	(FIXED_REGISTERS): Add entry for DWARF_LINK_REGISTER.
+ 	(CALL_USED_REGISTERS): Likewise.
+ 	(REGISTER_NAMES): Likewise.
+ 
+ 2021-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101267
+ 	* tree-vect-stmts.c (vect_check_scalar_mask): Adjust
+ 	API and use SLP compatible interface of vect_is_simple_use.
+ 	Reject not vectorized SLP defs for callers that do not support
+ 	that.
+ 	(vect_check_store_rhs): Handle masked stores and pass down
+ 	the appropriate operator index.
+ 	(vectorizable_call): Adjust.
+ 	(vectorizable_store): Likewise.
+ 	(vectorizable_load): Likewise.  Handle SLP pecularity of
+ 	masked loads.
+ 	(vect_is_simple_use): Remove special-casing of masked stores.
+ 
+ 2021-06-30  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* common.opt (foffload): Remove help as Driver only.
+ 	* gcc.c (display_help): Add -foffload.
+ 
+ 2021-06-30  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* gcc.c (close_at_file, execute): Replace alloca by XALLOCAVEC.
+ 	(check_offload_target_name): Fix splitting OFFLOAD_TARGETS into
+ 	a candidate list; better inform no offload target is configured
+ 	and fix hint extraction when passed target is not '\0' at [len].
+ 	* common.opt (foffload): Add tailing '.'.
+ 	(foffload-options): Likewise; fix flag name in the help string.
+ 
+ 2021-06-30  prathamesh.kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	PR target/66791
+ 	* config/arm/arm_neon.h: Move vabs intrinsics before vcage_f32.
+ 	(vcage_f32): Gate comparison on __FAST_MATH__.
+ 	(vcageq_f32): Likewise.
+ 	(vcale_f32): Likewise.
+ 	(vcaleq_f32): Likewise.
+ 	(vcagt_f32): Likewise.
+ 	(vcagtq_f32): Likewise.
+ 	(vcalt_f32): Likewise.
+ 	(vcaltq_f32): Likewise.
+ 	(vcage_f16): Likewise.
+ 	(vcageq_f16): Likewise.
+ 	(vcale_f16): Likewise.
+ 	(vcaleq_f16): Likewise.
+ 	(vcagt_f16): Likewise.
+ 	(vcagtq_f16): Likewise.
+ 	(vcalt_f16): Likewise.
+ 	(vcaltq_f16): Likewise.
+ 
+ 2021-06-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101264
+ 	* tree-vect-slp.c (vect_optimize_slp): Propagate the
+ 	computed perm_in to all "any" permute successors
+ 	we cannot de-duplicate immediately.
+ 
+ 2021-06-30  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/101248
+ 	* config/i386/sse.md
+ 	(avx512f_sfixupimm<mode><sd_maskz_name><round_saeonly_name>):
+ 	Refined to ..
+ 	(avx512f_sfixupimm<mode><maskz_scalar_name><round_saeonly_name>):
+ 	this.
+ 	(avx512f_sfixupimm<mode>_mask<round_saeonly_name>"): Refined.
+ 	* config/i386/subst.md (maskz_scalar): New define_subst.
+ 	(maskz_scalar_name): New subst_attr.
+ 	(maskz_scalar_op5): Ditto.
+ 	(round_saeonly_maskz_scalar_op5): Ditto.
+ 	(round_saeonly_maskz_scalar_operand5): Ditto.
+ 
+ 2021-06-30  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_xcoff_section_type_flags):
+ 	Increase code CSECT alignment to at least 32 bytes.
+ 	* config/rs6000/xcoff.h (TEXT_SECTION_ASM_OP): Add 32 byte
+ 	alignment designation.
+ 
+ 2021-06-29  Sergei Trofimovich  <siarheit@google.com>
+ 
+ 	* doc/generic.texi: Fix s/net yet/not yet/ typo.
+ 
+ 2021-06-29  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/101254
+ 	* range-op.cc (operator_minus::op1_op2_relation_effect): Check for
+ 	wrapping/non-wrapping when setting the result range.
+ 
+ 2021-06-29  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-query.cc (gimple_range_global): Allow phis.
+ 
+ 2021-06-29  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* vr-values.c (vr_values::vrp_stmt_computes_nonzero): Use stmt.
+ 	(simplify_using_ranges::op_with_boolean_value_range_p): Add a
+ 	statement for location context.
+ 	(check_for_binary_op_overflow): Ditto.
+ 	(simplify_using_ranges::get_vr_for_comparison): Ditto.
+ 	(simplify_using_ranges::compare_name_with_value): Ditto.
+ 	(simplify_using_ranges::compare_names): Ditto.
+ 	(vrp_evaluate_conditional_warnv_with_ops_using_ranges): Ditto.
+ 	(simplify_using_ranges::simplify_truth_ops_using_ranges): Ditto.
+ 	(simplify_using_ranges::simplify_min_or_max_using_ranges): Ditto.
+ 	(simplify_using_ranges::simplify_internal_call_using_ranges): Ditto.
+ 	(simplify_using_ranges::two_valued_val_range_p): Ditto.
+ 	(simplify_using_ranges::simplify): Ditto.
+ 	* vr-values.h: Adjust prototypes.
+ 
+ 2021-06-29  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/95046
+ 	* config/i386/mmx.md (vec_addsubv2sf3): New insn pattern.
+ 
+ 2021-06-29  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* config/gcn/gcn.c (gcn_init_libfuncs): New function.
+ 	(TARGET_INIT_LIBFUNCS): Define target hook using above function.
+ 	* config/gcn/gcn.h (UNITS_PER_WORD): Define to 8 for IN_LIBGCC2, 4
+ 	otherwise.
+ 	(LIBGCC2_UNITS_PER_WORD, BITS_PER_WORD): Remove definitions.
+ 	(MAX_FIXED_MODE_SIZE): Change to 128.
+ 
+ 2021-06-29  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* config/gcn/gcn.md (UNSPEC_FLBIT_INT): New unspec constant.
+ 	(s_mnemonic): Add clrsb.
+ 	(gcn_flbit<mode>_int): Add insn pattern for SImode/DImode.
+ 	(clrsb<mode>2): Add expander for SImode/DImode.
+ 
+ 2021-06-29  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* config/gcn/gcn.md (<su>mulsidi3, <su>mulsidi3_reg, <su>mulsidi3_imm,
+ 	muldi3): Add patterns.
+ 
+ 2021-06-29  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* config/gcn/gcn.md (<su>mulsi3_highpart): Change to expander.
+ 	(<su>mulsi3_highpart_reg, <su>mulsi3_highpart_imm): New patterns.
+ 
+ 2021-06-29  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* config/gcn/gcn.md (mulsi3): Make s_mulk_i32 variant clobber SCC.
+ 
+ 2021-06-29  Joseph Myers  <joseph@codesourcery.com>
+ 
+ 	* btfout.c, ctfout.c: Include "memmodel.h".
+ 
+ 2021-06-29  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* gcc.c (check_offload_target_name): Cast len argument to
+ 	%q.*s to 'int'; avoid -Wstringop-truncation warning.
+ 
+ 2021-06-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.c (vect_optimize_slp): Forward propagate
+ 	to "any" permute nodes and relax "any" permute proapgation
+ 	during iterative backward propagation.
+ 
+ 2021-06-29  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	PR other/67300
+ 	* common.opt (-foffload=): Update description.
+ 	(-foffload-options=): New.
+ 	* doc/invoke.texi (C Language Options): Document
+ 	-foffload and -foffload-options.
+ 	* gcc.c (check_offload_target_name): New, split off from
+ 	handle_foffload_option.
+ 	(check_foffload_target_names): New.
+ 	(handle_foffload_option): Handle -foffload=default.
+ 	(driver_handle_option): Update for -foffload-options.
+ 	* lto-opts.c (lto_write_options): Use -foffload-options
+ 	instead of -foffload.
+ 	* lto-wrapper.c (merge_and_complain, append_offload_options):
+ 	Likewise.
+ 	* opts.c (common_handle_option): Likewise.
+ 
+ 2021-06-29  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* doc/invoke.texi (C Language Options): Sort options
+ 	alphabetically in optlist and also the description itself.
+ 	Remove leftover -fallow-single-precision from and add missing
+ 	-fgnu-tm to the optlist.
+ 
+ 2021-06-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.c (slpg_vertex::visited): Remove.
+ 	(vect_slp_perms_eq): Handle -1 permutes.
+ 	(vect_optimize_slp): Rewrite permute propagation.
+ 
+ 2021-06-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/101210
+ 	* match.pd ((intptr_t)x eq/ne CST to x eq/ne (typeof x) CST): Don't
+ 	perform the optimization in GENERIC when sanitizing and x has a
+ 	reference type.
+ 
+ 2021-06-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101242
+ 	* tree-vect-slp.c (vect_slp_build_vertices): Force-add
+ 	PHIs with not represented initial values as leafs.
+ 
+ 2021-06-29  Jan-Benedict Glaw  <jbglaw@getslash.de>
+ 
+ 	* config/pdp11/pdp11.h (ASM_OUTPUT_SKIP): Fix signedness warning.
+ 	* config/pdp11/pdp11.c (pdp11_asm_print_operand_punct_valid_p): Remove
+ 	"register" keyword.
+ 	(pdp11_initial_elimination_offset) Remove unused variable.
+ 	(pdp11_cmp_length) Ditto.
+ 	(pdp11_insn_cost): Ditto, and fix signedness warning.
+ 
+ 2021-06-29  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* btfout.c: Include tm_p.h.
+ 	* ctfout.c: Same.
+ 
+ 2021-06-28  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* config/bpf/bpf.c (bpf_expand_prologue): Do not mark insns as
+ 	frame related.
+ 	(bpf_expand_epilogue): Likewise.
+ 	* config/bpf/bpf.h (DWARF2_FRAME_INFO): Define to 0.
+ 	Do not define DBX_DEBUGGING_INFO.
+ 
+ 2021-06-28  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* doc/invoke.texi: Document the CTF and BTF debug info options.
+ 
+ 2021-06-28  Indu Bhagat  <indu.bhagat@oracle.com>
+ 	    David Faust  <david.faust@oracle.com>
+ 	    Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 	    Weimin Pan  <weimin.pan@oracle.com>
+ 
+ 	* Makefile.in: Add ctfc.*, ctfout.c and btfout.c files to
+ 	GTFILES.  Add new object files.
+ 	* common.opt: Add CTF and BTF debug info options.
+ 	* btfout.c: New file.
+ 	* ctfc.c: Likewise.
+ 	* ctfc.h: Likewise.
+ 	* ctfout.c: Likewise.
+ 	* dwarf2ctf.c: Likewise.
+ 	* dwarf2ctf.h: Likewise.
+ 	* dwarf2cfi.c (dwarf2out_do_frame): Acknowledge CTF_DEBUG and
+ 	BTF_DEBUG.
+ 	* dwarf2out.c (dwarf2out_source_line): Likewise.
+ 	(dwarf2out_finish): Skip emitting DWARF if CTF or BTF are to
+ 	be generated.
+ 	(debug_format_do_cu): New function.
+ 	(dwarf2out_early_finish): Traverse DIEs and emit CTF/BTF for
+ 	them if	requested.
+ 	Include dwarf2ctf.c.
+ 	* final.c (dwarf2_debug_info_emitted_p): Acknowledge DWARF-based debug
+ 	formats.
+ 	* flag-types.h (enum debug_info_type): Add CTF_DEBUG and BTF_DEBUG.
+ 	(CTF_DEBUG): New bitmask.
+ 	(BTF_DEBUG): Likewise.
+ 	(enum ctf_debug_info_levels): New enum.
+ 	* gengtype.c (open_base_files): Handle ctfc.h.
+ 	(main): Handle uint32_t type.
+ 	* flags.h (btf_debuginfo_p): New definition.
+ 	(dwarf_based_debuginfo_p): Likewise.
+ 	* opts.c (debug_type_names): Add entries for CTF and BTF.
+ 	(btf_debuginfo_p): New function.
+ 	(dwarf_based_debuginfo_p): Likewise.
+ 	(common_handle_option): Handle -gctfN and -gbtf options.
+ 	(set_debug_level): Set CTF_DEBUG, BTF_DEBUG whenever appropriate.
+ 	* toplev.c (process_options): Inform the user and ignore -gctfLEVEL if
+ 	frontend is not C.
+ 
+ 2021-06-28  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* dwarf2out.c (AT_class): Function is no longer static.
+ 	(AT_int): Likewise.
+ 	(AT_unsigned): Likewise.
+ 	(AT_loc): Likewise.
+ 	(get_AT): Likewise.
+ 	(get_AT_string): Likewise.
+ 	(get_AT_flag): Likewise.
+ 	(get_AT_unsigned): Likewise.
+ 	(get_AT_ref): Likewise.
+ 	(new_die_raw): Likewise.
+ 	(lookup_decl_die): Likewise.
+ 	(base_type_die): Likewise.
+ 	(add_name_attribute): Likewise.
+ 	(add_AT_int): Likewise.
+ 	(add_AT_unsigned): Likewise.
+ 	(add_AT_loc): Likewise.
+ 	(dw_get_die_tag): New function.
+ 	(dw_get_die_child): Likewise.
+ 	(dw_get_die_sib): Likewise.
+ 	(struct dwarf_file_data): Move from here to dwarf2out.h
+ 	(struct dw_attr_struct): Likewise.
+ 	* dwarf2out.h: Analogous changes.
+ 
+ 2021-06-28  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/93385
+ 	* ipa-param-manipulation.h (class ipa_param_body_adjustments): New
+ 	members m_dead_stmts and m_dead_ssas.
+ 	* ipa-param-manipulation.c
+ 	(ipa_param_body_adjustments::mark_dead_statements): New function.
+ 	(ipa_param_body_adjustments::common_initialization): Call it on
+ 	all removed but not split parameters.
+ 	(ipa_param_body_adjustments::ipa_param_body_adjustments): Initialize
+ 	new mwmbers.
+ 	(ipa_param_body_adjustments::modify_call_stmt): Remove arguments that
+ 	are dead.
+ 	* tree-inline.c (remap_gimple_stmt): Do not copy dead statements, reset
+ 	dead debug statements.
+ 	(copy_phis_for_bb): Do not copy dead PHI nodes.
+ 
+ 2021-06-28  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/93385
+ 	* symtab-clones.h (clone_info): Removed member param_adjustments.
+ 	* ipa-param-manipulation.h: Adjust initial comment to reflect how we
+ 	deal with pass-through splits now.
+ 	(ipa_param_performed_split): Removed.
+ 	(ipa_param_adjustments::modify_call): Adjusted parameters.
+ 	(class ipa_param_body_adjustments): Adjusted parameters of
+ 	register_replacement, modify_gimple_stmt and modify_call_stmt.
+ 	(ipa_verify_edge_has_no_modifications): Declare.
+ 	(ipa_edge_modifications_finalize): Declare.
+ 	* cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Remove
+ 	performed_splits processing, pas only edge to padjs->modify_call,
+ 	check that call arguments were not modified if they should not have
+ 	been.
+ 	* cgraphclones.c (cgraph_node::create_clone): Do not copy performed
+ 	splits.
+ 	* ipa-param-manipulation.c (struct pass_through_split_map): New type.
+ 	(ipa_edge_modification_info): Likewise.
+ 	(ipa_edge_modification_sum): Likewise.
+ 	(ipa_edge_modifications): New edge summary.
+ 	(ipa_verify_edge_has_no_modifications): New function.
+ 	(transitive_split_p): Removed.
+ 	(transitive_split_map): Likewise.
+ 	(init_transitive_splits): Likewise.
+ 	(ipa_param_adjustments::modify_call): Adjusted to use the new edge
+ 	summary instead of performed_splits.
+ 	(ipa_param_body_adjustments::register_replacement): Drop dummy
+ 	parameter, set base_index of the created ipa_param_body_replacement.
+ 	(phi_arg_will_live_p): New function.
+ 	(ipa_param_body_adjustments::common_initialization): Do not create
+ 	IPA_SRA dummy decls.
+ 	(simple_tree_swap_info): Removed.
+ 	(remap_split_decl_to_dummy): Likewise.
+ 	(record_argument_state_1): New function.
+ 	(record_argument_state): Likewise.
+ 	(ipa_param_body_adjustments::modify_call_stmt): New parameter
+ 	orig_stmt.  Do not work with dummy decls, save necessary info about
+ 	changes to ipa_edge_modifications.
+ 	(ipa_param_body_adjustments::modify_gimple_stmt): New parameter
+ 	orig_stmt, pass it to modify_call_stmt.
+ 	(ipa_param_body_adjustments::modify_cfun_body): Adjust call to
+ 	modify_gimple_stmt.
+ 	(ipa_edge_modifications_finalize): New function.
+ 	* tree-inline.c (remap_gimple_stmt): Pass original statement to
+ 	modify_gimple_stmt.
+ 	(copy_phis_for_bb): Do not copy dead PHI nodes.
+ 	(expand_call_inline): Do not remap performed_splits.
+ 	(update_clone_info): Likewise.
+ 	* toplev.c: Include ipa-param-manipulation.h.
+ 	(toplev::finalize): Call ipa_edge_modifications_finalize.
+ 
+ 2021-06-28  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-ssa-phiopt.c (replace_phi_edge_with_variable): Duplicate range
+ 	info if we're the only things setting the target PHI.
+ 	(value_replacement): Don't duplicate range here.
+ 	(minmax_replacement): Likewise.
+ 
+ 2021-06-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101229
+ 	* gimple-walk.c (gimple_walk_op): Handle PHIs.
+ 
+ 2021-06-28  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/v850/v850.c (construct_dispose_instruction): Allocate
+ 	a bigger buffer.
+ 	(construct_prepare_instruction): Likewise.
+ 
+ 2021-06-28  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/v850/v850.c (v850_option_override): Build default
+ 	target node.
+ 	(v850_can_inline_p): New.  Allow MASK_PROLOG_FUNCTION to be
+ 	ignored for inlining.
+ 	(TARGET_CAN_INLINE_P): New.
+ 
+ 2021-06-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101207
+ 	* tree-vect-slp.c (vect_optimize_slp): Do BB reduction
+ 	permute eliding for load permutations properly.
+ 
+ 2021-06-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101173
+ 	* gimple-loop-interchange.cc
+ 	(tree_loop_interchange::valid_data_dependences): Disallow outer
+ 	loop dependence distance of zero.
+ 
+ 2021-06-28  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/100648
+ 	* config/i386/sse.md (*avx_cmp<mode>3_lt): New
+ 	define_insn_and_split.
+ 	(*avx_cmp<mode>3_ltint): Ditto.
+ 	(*avx2_pcmp<mode>3_3): Ditto.
+ 	(*avx2_pcmp<mode>3_4): Ditto.
+ 	(*avx2_pcmp<mode>3_5): Ditto.
+ 
+ 2021-06-28  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/i386-builtin.def (IX86_BUILTIN_BLENDVPD256,
+ 	IX86_BUILTIN_BLENDVPS256, IX86_BUILTIN_PBLENDVB256,
+ 	IX86_BUILTIN_BLENDVPD, IX86_BUILTIN_BLENDVPS,
+ 	IX86_BUILTIN_PBLENDVB128): Replace icode with
+ 	CODE_FOR_nothing.
+ 	* config/i386/i386.c (ix86_gimple_fold_builtin): Fold blendv
+ 	builtins.
+ 	* config/i386/sse.md (*<sse4_1_avx2>_pblendvb_lt_subreg_not):
+ 	New pre_reload splitter.
+ 
+ 2021-06-27  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR middle-end/101230
+ 	* fold-const.c (fold_ternary_loc): Check
+ 	the return value of invert_tree_comparison.
+ 
+ 2021-06-27  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config.gcc: Add SPDX License Identifier.
+ 	(powerpc-ibm-aix789): Default to aix73.h.
+ 	(powerpc-ibm-aix7.2.*.*): New stanza.
+ 	* config/rs6000/aix72.h: Add SPDX License Identifier.
+ 	* config/rs6000/aix73.h: New file.
+ 
+ 2021-06-26  Jason Merrill  <jason@redhat.com>
+ 
+ 	* except.c: #include "dwarf2.h" instead of "dwarf2out.h".
+ 
+ 2021-06-26  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* genmatch.c (lower_cond): Copy for_subst_vec
+ 	for the simplify also.
+ 	(lower): Swap the order for lower_for and lower_cond.
+ 
+ 2021-06-26  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-ssa-phiopt.c (match_simplify_replacement): Reset
+ 	flow senatitive info on the moved ssa set.
+ 
+ 2021-06-26  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* fold-const.c (fold_cond_expr_with_comparison):
+ 	Exand arg0 into comp_code, arg00, and arg01.
+ 	(fold_ternary_loc): Use invert_tree_comparison
+ 	instead of fold_invert_truthvalue for the case
+ 	where we have A CMP B ? C : A.
+ 
+ 2021-06-25  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/101216
+ 	* calls.c (maybe_warn_rdwr_sizes): Use the no_warning constant.
+ 
+ 2021-06-25  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/h8300.c (select_cc_mode): Handle ASHIFTRT and LSHIFTRT.
+ 
+ 2021-06-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101202
+ 	* tree-vect-slp.c (vect_optimize_slp): Explicitely handle
+ 	failed nodes.
+ 
+ 2021-06-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp-patterns.c (addsub_pattern::build): Copy
+ 	STMT_VINFO_REDUC_DEF from the original representative.
+ 
+ 2021-06-25  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* builtins.c (warn_string_no_nul): Replace uses of TREE_NO_WARNING,
+ 	gimple_no_warning_p and gimple_set_no_warning with
+ 	warning_suppressed_p, and suppress_warning.
+ 	(c_strlen): Same.
+ 	(maybe_warn_for_bound): Same.
+ 	(warn_for_access): Same.
+ 	(check_access): Same.
+ 	(expand_builtin_strncmp): Same.
+ 	(fold_builtin_varargs): Same.
+ 	* calls.c (maybe_warn_nonstring_arg): Same.
+ 	(maybe_warn_rdwr_sizes): Same.
+ 	* cfgexpand.c (expand_call_stmt): Same.
+ 	* cgraphunit.c (check_global_declaration): Same.
+ 	* fold-const.c (fold_undefer_overflow_warnings): Same.
+ 	(fold_truth_not_expr): Same.
+ 	(fold_unary_loc): Same.
+ 	(fold_checksum_tree): Same.
+ 	* gimple-array-bounds.cc (array_bounds_checker::check_array_ref): Same.
+ 	(array_bounds_checker::check_mem_ref): Same.
+ 	(array_bounds_checker::check_addr_expr): Same.
+ 	(array_bounds_checker::check_array_bounds): Same.
+ 	* gimple-expr.c (copy_var_decl): Same.
+ 	* gimple-fold.c (gimple_fold_builtin_strcpy): Same.
+ 	(gimple_fold_builtin_strncat): Same.
+ 	(gimple_fold_builtin_stxcpy_chk): Same.
+ 	(gimple_fold_builtin_stpcpy): Same.
+ 	(gimple_fold_builtin_sprintf): Same.
+ 	(fold_stmt_1): Same.
+ 	* gimple-ssa-isolate-paths.c (diag_returned_locals): Same.
+ 	* gimple-ssa-nonnull-compare.c (do_warn_nonnull_compare): Same.
+ 	* gimple-ssa-sprintf.c (handle_printf_call): Same.
+ 	* gimple-ssa-store-merging.c (imm_store_chain_info::output_merged_store): Same.
+ 	* gimple-ssa-warn-restrict.c (maybe_diag_overlap): Same.
+ 	* gimple-ssa-warn-restrict.h: Adjust declarations.
+ 	(maybe_diag_access_bounds): Replace uses of TREE_NO_WARNING,
+ 	gimple_no_warning_p and gimple_set_no_warning with
+ 	warning_suppressed_p, and suppress_warning.
+ 	(check_call): Same.
+ 	(check_bounds_or_overlap): Same.
+ 	* gimple.c (gimple_build_call_from_tree): Same.
+ 	* gimplify.c (gimplify_return_expr): Same.
+ 	(gimplify_cond_expr): Same.
+ 	(gimplify_modify_expr_complex_part): Same.
+ 	(gimplify_modify_expr): Same.
+ 	(gimple_push_cleanup): Same.
+ 	(gimplify_expr): Same.
+ 	* omp-expand.c (expand_omp_for_generic): Same.
+ 	(expand_omp_taskloop_for_outer): Same.
+ 	* omp-low.c (lower_rec_input_clauses): Same.
+ 	(lower_lastprivate_clauses): Same.
+ 	(lower_send_clauses): Same.
+ 	(lower_omp_target): Same.
+ 	* tree-cfg.c (pass_warn_function_return::execute): Same.
+ 	* tree-complex.c (create_one_component_var): Same.
+ 	* tree-inline.c (remap_gimple_op_r): Same.
+ 	(copy_tree_body_r): Same.
+ 	(declare_return_variable): Same.
+ 	(expand_call_inline): Same.
+ 	* tree-nested.c (lookup_field_for_decl): Same.
+ 	* tree-sra.c (create_access_replacement): Same.
+ 	(generate_subtree_copies): Same.
+ 	* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Same.
+ 	* tree-ssa-forwprop.c (combine_cond_expr_cond): Same.
+ 	* tree-ssa-loop-ch.c (ch_base::copy_headers): Same.
+ 	* tree-ssa-loop-im.c (execute_sm): Same.
+ 	* tree-ssa-phiopt.c (cond_store_replacement): Same.
+ 	* tree-ssa-strlen.c (maybe_warn_overflow): Same.
+ 	(handle_builtin_strcpy): Same.
+ 	(maybe_diag_stxncpy_trunc): Same.
+ 	(handle_builtin_stxncpy_strncat): Same.
+ 	(handle_builtin_strcat): Same.
+ 	* tree-ssa-uninit.c (get_no_uninit_warning): Same.
+ 	(set_no_uninit_warning): Same.
+ 	(uninit_undefined_value_p): Same.
+ 	(warn_uninit): Same.
+ 	(maybe_warn_operand): Same.
+ 	* tree-vrp.c (compare_values_warnv): Same.
+ 	* vr-values.c (vr_values::extract_range_for_var_from_comparison_expr): Same.
+ 	(test_for_singularity): Same.
+ 	* gimple.h (warning_suppressed_p): New function.
+ 	(suppress_warning): Same.
+ 	(copy_no_warning): Same.
+ 	(gimple_set_block): Call gimple_set_location.
+ 	(gimple_set_location): Call copy_warning.
+ 
+ 2021-06-25  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* tree.h (warning_suppressed_at, copy_warning,
+ 	warning_suppressed_p, suppress_warning): New functions.
+ 
+ 2021-06-25  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* Makefile.in (OBJS-libcommon): Add diagnostic-spec.o.
+ 	* gengtype.c (open_base_files): Add diagnostic-spec.h.
+ 	* diagnostic-spec.c: New file.
+ 	* diagnostic-spec.h: New file.
+ 	* tree.h (no_warning, all_warnings, suppress_warning_at): New
+ 	declarations.
+ 	* warning-control.cc: New file.
+ 
+ 2021-06-25  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/101185
+ 	* config/i386/i386.c (x86_order_regs_for_local_alloc):
+ 	Revert r12-1669.
+ 
+ 2021-06-24  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/101189
+ 	* gimple-range-fold.cc (fold_using_range::range_of_range_op): Pass
+ 	LHS range of condition to postfold routine.
+ 	(fold_using_range::postfold_gcond_edges): Only process the TRUE or
+ 	FALSE edge if the LHS range supports it being taken.
+ 	* gimple-range-fold.h (postfold_gcond_edges): Add range parameter.
+ 
+ 2021-06-24  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* value-relation.cc (equiv_oracle::dump): Do not dump NULL blocks.
+ 	(relation_oracle::find_relation_block): Check correct bitmap.
+ 	(relation_oracle::dump): Do not dump NULL blocks.
+ 
+ 2021-06-24  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::propagate_cache): Call
+ 	range_on_edge instead of manually calculating.
+ 
+ 2021-06-24  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* range-op.cc: Fix comment.
+ 
+ 2021-06-24  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/89021
+ 	* config/i386/i386-expand.c (ix86_expand_sse_unpack):
+ 	Handle V8QI and V4HI modes.
+ 	* config/i386/mmx.md (sse4_1_<any_extend:code>v4qiv4hi2):
+ 	New insn pattern.
+ 	(sse4_1_<any_extend:code>v4qiv4hi2): Ditto.
+ 	(mmxpackmode): New mode attribute.
+ 	(vec_pack_trunc_<mmxpackmode:mode>): New expander.
+ 	(mmxunpackmode): New mode attribute.
+ 	(vec_unpacks_lo_<mmxunpackmode:mode>): New expander.
+ 	(vec_unpacks_hi_<mmxunpackmode:mode>): Ditto.
+ 	(vec_unpacku_lo_<mmxunpackmode:mode>): Ditto.
+ 	(vec_unpacku_hi_<mmxunpackmode:mode>): Ditto.
+ 	* config/i386/i386.md (extsuffix): Move from ...
+ 	* config/i386/sse.md: ... here.
+ 
+ 2021-06-24  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* dwarf2out.c (dwarf2out_assembly_start): Emit .file 0 marker here..
+ 	(dwarf2out_finish): ...instead of here.
+ 
+ 2021-06-24  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* configure.ac (--gdwarf-5 option): Use objdump instead of readelf.
+ 	(working --gdwarf-4/--gdwarf-5 for all sources): Likewise.
+ 	(--gdwarf-4 not refusing generated .debug_line): Adjust for Windows.
+ 	* configure: Regenerate.
+ 
+ 2021-06-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/sse.md (vec_addsubv4df3, vec_addsubv2df3,
+ 	vec_addsubv8sf3, vec_addsubv4sf3): Merge into ...
+ 	(vec_addsub<mode>3): ... using a new addsub_cst mode attribute.
+ 
+ 2021-06-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/sse.md (avx_addsubv4df3): Rename to
+ 	vec_addsubv4df3.
+ 	(avx_addsubv8sf3): Rename to vec_addsubv8sf3.
+ 	(sse3_addsubv2df3): Rename to vec_addsubv2df3.
+ 	(sse3_addsubv4sf3): Rename to vec_addsubv4sf3.
+ 	* config/i386/i386-builtin.def: Adjust.
+ 	* internal-fn.def (VEC_ADDSUB): New internal optab fn.
+ 	* optabs.def (vec_addsub_optab): New optab.
+ 	* tree-vect-slp-patterns.c (class addsub_pattern): New.
+ 	(slp_patterns): Add addsub_pattern.
+ 	* tree-vect-slp.c (vect_optimize_slp): Disable propagation
+ 	across CFN_VEC_ADDSUB.
+ 	* tree-vectorizer.h (vect_pattern::vect_pattern): Make
+ 	m_ops optional.
+ 	* doc/md.texi (vec_addsub<mode>3): Document.
+ 
+ 2021-06-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/101170
+ 	* df-scan.c (df_ref_record): For paradoxical big-endian SUBREGs
+ 	where regno + subreg_regno_offset wraps around use 0 as starting
+ 	regno.
+ 
+ 2021-06-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/101172
+ 	* stor-layout.c (finish_bitfield_representative): If nextf has
+ 	error_mark_node type, set repr type to error_mark_node too.
+ 
+ 2021-06-24  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_function_profiler): Ignore labelno
+ 	parameter.
+ 	* config/s390/s390.h (NO_PROFILE_COUNTERS): Define.
+ 
+ 2021-06-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.c (vect_optimize_slp): Do not propagate
+ 	across operations that have different semantics on different
+ 	lanes.
+ 
+ 2021-06-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree.h (OMP_CLAUSE_MAP_IN_REDUCTION): Document meaning for OpenMP.
+ 	* gimplify.c (gimplify_scan_omp_clauses): For OpenMP map clauses
+ 	with OMP_CLAUSE_MAP_IN_REDUCTION flag partially defer gimplification
+ 	of non-decl OMP_CLAUSE_DECL.  For OMP_CLAUSE_IN_REDUCTION on
+ 	OMP_TARGET user outer_ctx instead of ctx for placeholders and
+ 	initializer/combiner gimplification.
+ 	* omp-low.c (scan_sharing_clauses): Handle OMP_CLAUSE_MAP_IN_REDUCTION
+ 	on target constructs.
+ 	(lower_rec_input_clauses): Likewise.
+ 	(lower_omp_target): Likewise.
+ 	* omp-expand.c (expand_omp_target): Temporarily ignore nowait clause
+ 	on target if in_reduction is present.
+ 
+ 2021-06-24  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* tree-predcom.c (class pcom_worker): New class.
+ 	(release_chain): Renamed to...
+ 	(pcom_worker::release_chain): ...this.
+ 	(release_chains): Renamed to...
+ 	(pcom_worker::release_chains): ...this.
+ 	(aff_combination_dr_offset): Renamed to...
+ 	(pcom_worker::aff_combination_dr_offset): ...this.
+ 	(determine_offset): Renamed to...
+ 	(pcom_worker::determine_offset): ...this.
+ 	(class comp_ptrs): New class.
+ 	(split_data_refs_to_components): Renamed to...
+ 	(pcom_worker::split_data_refs_to_components): ...this,
+ 	and update with class comp_ptrs.
+ 	(suitable_component_p): Renamed to...
+ 	(pcom_worker::suitable_component_p): ...this.
+ 	(filter_suitable_components): Renamed to...
+ 	(pcom_worker::filter_suitable_components): ...this.
+ 	(valid_initializer_p): Renamed to...
+ 	(pcom_worker::valid_initializer_p): ...this.
+ 	(find_looparound_phi): Renamed to...
+ 	(pcom_worker::find_looparound_phi): ...this.
+ 	(add_looparound_copies): Renamed to...
+ 	(pcom_worker::add_looparound_copies): ...this.
+ 	(determine_roots_comp): Renamed to...
+ 	(pcom_worker::determine_roots_comp): ...this.
+ 	(determine_roots): Renamed to...
+ 	(pcom_worker::determine_roots): ...this.
+ 	(single_nonlooparound_use): Renamed to...
+ 	(pcom_worker::single_nonlooparound_use): ...this.
+ 	(remove_stmt): Renamed to...
+ 	(pcom_worker::remove_stmt): ...this.
+ 	(execute_pred_commoning_chain): Renamed to...
+ 	(pcom_worker::execute_pred_commoning_chain): ...this.
+ 	(execute_pred_commoning): Renamed to...
+ 	(pcom_worker::execute_pred_commoning): ...this.
+ 	(struct epcc_data): New member worker.
+ 	(execute_pred_commoning_cbck): Call execute_pred_commoning
+ 	with pcom_worker pointer.
+ 	(find_use_stmt): Renamed to...
+ 	(pcom_worker::find_use_stmt): ...this.
+ 	(find_associative_operation_root): Renamed to...
+ 	(pcom_worker::find_associative_operation_root): ...this.
+ 	(find_common_use_stmt): Renamed to...
+ 	(pcom_worker::find_common_use_stmt): ...this.
+ 	(combinable_refs_p): Renamed to...
+ 	(pcom_worker::combinable_refs_p): ...this.
+ 	(reassociate_to_the_same_stmt): Renamed to...
+ 	(pcom_worker::reassociate_to_the_same_stmt): ...this.
+ 	(stmt_combining_refs): Renamed to...
+ 	(pcom_worker::stmt_combining_refs): ...this.
+ 	(combine_chains): Renamed to...
+ 	(pcom_worker::combine_chains): ...this.
+ 	(try_combine_chains): Renamed to...
+ 	(pcom_worker::try_combine_chains): ...this.
+ 	(prepare_initializers_chain): Renamed to...
+ 	(pcom_worker::prepare_initializers_chain): ...this.
+ 	(prepare_initializers): Renamed to...
+ 	(pcom_worker::prepare_initializers): ...this.
+ 	(prepare_finalizers_chain): Renamed to...
+ 	(pcom_worker::prepare_finalizers_chain): ...this.
+ 	(prepare_finalizers): Renamed to...
+ 	(pcom_worker::prepare_finalizers): ...this.
+ 	(tree_predictive_commoning_loop): Renamed to...
+ 	(pcom_worker::tree_predictive_commoning_loop): ...this, adjust
+ 	some calls and remove some cleanup code.
+ 	(tree_predictive_commoning): Adjusted to use pcom_worker instance.
+ 	(static variable looparound_phis): Remove.
+ 	(static variable name_expansions): Remove.
+ 
+ 2021-06-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.c (slpg_vertex): New struct.
+ 	(vect_slp_build_vertices): Adjust.
+ 	(vect_optimize_slp): Likewise.  Maintain an outgoing permute
+ 	and a materialized one.
+ 
+ 2021-06-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101105
+ 	* tree-vect-data-refs.c (vect_prune_runtime_alias_test_list):
+ 	Only ignore steps when they are equal or scalar order is preserved.
+ 
+ 2021-06-24  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/98434
+ 	* config/i386/i386-expand.c (ix86_expand_vec_interleave):
+ 	Adjust comments for ix86_expand_vecop_qihi2.
+ 	(ix86_expand_vecmul_qihi): Renamed to ..
+ 	(ix86_expand_vecop_qihi2): Adjust function prototype to
+ 	support shift operation, add static to definition.
+ 	(ix86_expand_vec_shift_qihi_constant): Add static to definition.
+ 	(ix86_expand_vecop_qihi): Call ix86_expand_vecop_qihi2 and
+ 	ix86_expand_vec_shift_qihi_constant.
+ 	* config/i386/i386-protos.h (ix86_expand_vecmul_qihi): Deleted.
+ 	(ix86_expand_vec_shift_qihi_constant): Deleted.
+ 	* config/i386/sse.md (VI12_256_512_AVX512VL): New mode
+ 	iterator.
+ 	(mulv8qi3): Call ix86_expand_vecop_qihi directly, add
+ 	condition TARGET_64BIT.
+ 	(mul<mode>3): Ditto.
+ 	(<insn><mode>3): Ditto.
+ 	(vlshr<mode>3): Extend to support avx512 vlshr.
+ 	(v<insn><mode>3): New expander for
+ 	vashr/vlshr/vashl.
+ 	(v<insn>v8qi3): Ditto.
+ 	(vashrv8hi3<mask_name>): Renamed to ..
+ 	(vashr<mode>3): And extend to support V16QImode for avx512.
+ 	(vashrv16qi3): Deleted.
+ 	(vashrv2di3<mask_name>): Extend expander to support avx512
+ 	instruction.
+ 
+ 2021-06-23  Dimitar Dimitrov  <dimitar@dinux.eu>
+ 
+ 	* doc/lto.texi (Design Overview): Update that slim objects are
+ 	the default.
+ 
+ 2021-06-23  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-cpus.def: Take OPTION_MASK_PCREL_OPT out
+ 	of OTHER_POWER10_MASKS so it will not be enabled by default.
+ 
+ 2021-06-23  Richard Biener  <rguenther@suse.de>
+ 	    Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* tree-inline.c (setup_one_parameter): Set TREE_READONLY of the
+ 	param replacement unconditionally.  Adjust comment.
+ 
+ 2021-06-23  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* Makefile.in (OBJS): Add gimple-range-fold.o
+ 	* gimple-range-fold.cc: New.
+ 	* gimple-range-fold.h: New.
+ 	* gimple-range-gori.cc (gimple_range_calc_op1): Move to here.
+ 	(gimple_range_calc_op2): Ditto.
+ 	* gimple-range-gori.h: Move prototypes to here.
+ 	* gimple-range.cc: Adjust include files.
+ 	(fur_source:fur_source): Relocate to gimple-range-fold.cc.
+ 	(fur_source::get_operand): Ditto.
+ 	(fur_source::get_phi_operand): Ditto.
+ 	(fur_source::query_relation): Ditto.
+ 	(fur_source::register_relation): Ditto.
+ 	(class fur_edge): Ditto.
+ 	(fur_edge::fur_edge): Ditto.
+ 	(fur_edge::get_operand): Ditto.
+ 	(fur_edge::get_phi_operand): Ditto.
+ 	(fur_stmt::fur_stmt): Ditto.
+ 	(fur_stmt::get_operand): Ditto.
+ 	(fur_stmt::get_phi_operand): Ditto.
+ 	(fur_stmt::query_relation): Ditto.
+ 	(class fur_depend): Relocate to gimple-range-fold.h.
+ 	(fur_depend::fur_depend): Relocate to gimple-range-fold.cc.
+ 	(fur_depend::register_relation): Ditto.
+ 	(fur_depend::register_relation): Ditto.
+ 	(class fur_list): Ditto.
+ 	(fur_list::fur_list): Ditto.
+ 	(fur_list::get_operand): Ditto.
+ 	(fur_list::get_phi_operand): Ditto.
+ 	(fold_range): Ditto.
+ 	(adjust_pointer_diff_expr): Ditto.
+ 	(gimple_range_adjustment): Ditto.
+ 	(gimple_range_base_of_assignment): Ditto.
+ 	(gimple_range_operand1): Ditto.
+ 	(gimple_range_operand2): Ditto.
+ 	(gimple_range_calc_op1): Relocate to gimple-range-gori.cc.
+ 	(gimple_range_calc_op2): Ditto.
+ 	(fold_using_range::fold_stmt): Relocate to gimple-range-fold.cc.
+ 	(fold_using_range::range_of_range_op): Ditto.
+ 	(fold_using_range::range_of_address): Ditto.
+ 	(fold_using_range::range_of_phi): Ditto.
+ 	(fold_using_range::range_of_call): Ditto.
+ 	(fold_using_range::range_of_builtin_ubsan_call): Ditto.
+ 	(fold_using_range::range_of_builtin_call): Ditto.
+ 	(fold_using_range::range_of_cond_expr): Ditto.
+ 	(fold_using_range::range_of_ssa_name_with_loop_info): Ditto.
+ 	(fold_using_range::relation_fold_and_or): Ditto.
+ 	(fold_using_range::postfold_gcond_edges): Ditto.
+ 	* gimple-range.h: Add gimple-range-fold.h to include files. Change
+ 	GIMPLE_RANGE_STMT_H to GIMPLE_RANGE_H.
+ 	(gimple_range_handler): Relocate to gimple-range-fold.h.
+ 	(gimple_range_ssa_p): Ditto.
+ 	(range_compatible_p): Ditto.
+ 	(class fur_source): Ditto.
+ 	(class fur_stmt): Ditto.
+ 	(class fold_using_range): Ditto.
+ 	(gimple_range_calc_op1): Relocate to gimple-range-gori.h
+ 	(gimple_range_calc_op2): Ditto.
+ 
+ 2021-06-23  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/101148
+ 	PR tree-optimization/101014
+ 	* gimple-range-cache.cc (ranger_cache::ranger_cache): Adjust.
+ 	(ranger_cache::~ranger_cache): Adjust.
+ 	(ranger_cache::block_range): Check if propagation disallowed.
+ 	(ranger_cache::propagate_cache): Disallow propagation if new value
+ 	can't be stored properly.
+ 	* gimple-range-cache.h (ranger_cache::m_propfail): New member.
+ 
+ 2021-06-23  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (class ssa_block_ranges): Adjust prototype.
+ 	(sbr_vector::set_bb_range): Return true.
+ 	(class sbr_sparse_bitmap): Adjust.
+ 	(sbr_sparse_bitmap::set_bb_range): Return value.
+ 	(block_range_cache::set_bb_range): Return value.
+ 	(ranger_cache::propagate_cache): Use return value to print msg.
+ 	* gimple-range-cache.h (class block_range_cache): Adjust.
+ 
+ 2021-06-23  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range.cc (dump_bb): Use range_on_edge from the cache.
+ 
+ 2021-06-23  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/logical.md (<code><mode>3<ccnz>): Use <cczn>
+ 	so this pattern can be used for test/compare removal.  Pass
+ 	current insn to compute_logical_op_length and output_logical_op.
+ 	* config/h8300/h8300.c (compute_logical_op_cc): Remove.
+ 	(h8300_and_costs): Add argument to compute_logical_op_length.
+ 	(output_logical_op): Add new argument.  Use it to determine if the
+ 	condition codes are used and adjust the output accordingly.
+ 	(compute_logical_op_length): Add new argument and update length
+ 	computations when condition codes are used.
+ 	* config/h8300/h8300-protos.h (compute_logical_op_length): Update
+ 	prototype.
+ 	(output_logical_op): Likewise.
+ 
+ 2021-06-23  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/89021
+ 	* config/i386/i386-expand.c (expand_vec_perm_pshufb):
+ 	Handle 64bit modes for TARGET_XOP.  Use indirect gen_* functions.
+ 	* config/i386/mmx.md (mmx_ppermv64): New insn pattern.
+ 	* config/i386/i386.md (unspec): Move UNSPEC_XOP_PERMUTE from ...
+ 	* config/i386/sse.md (unspec): ... here.
+ 
+ 2021-06-23  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/98636
+ 	* optc-save-gen.awk: Put back arm_fp16_format to
+ 	checked_options.
+ 
+ 2021-06-23  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/101175
+ 	* config/i386/i386.md (bsr_rex64): Add zero-flag setting RTX.
+ 	(bsr): Ditto.
+ 	(*bsrhi): Remove.
+ 	(clz<mode>2): Update RTX pattern for additions.
+ 
+ 2021-06-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/101167
+ 	* omp-low.c (lower_omp_regimplify_p): Regimplify also PARM_DECLs
+ 	and RESULT_DECLs that have DECL_HAS_VALUE_EXPR_P set.
+ 
+ 2021-06-22  Sergei Trofimovich  <siarheit@google.com>
+ 
+ 	* doc/rtl.texi: drop unbalanced parenthesis.
+ 
+ 2021-06-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/101156
+ 	* gimplify.c (gimplify_expr): Remove premature incorrect
+ 	optimization.
+ 
+ 2021-06-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/101159
+ 	* tree-vect-patterns.c (vect_recog_popcount_pattern): Fix some
+ 	comment typos.
+ 
+ 2021-06-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/101160
+ 	* function.c (assign_parms): For decl_result with TYPE_EMPTY_P type
+ 	clear crtl->return_rtx instead of keeping it referencing a pseudo.
+ 
+ 2021-06-22  Jakub Jelinek  <jakub@redhat.com>
+ 	    Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/101162
+ 	* fold-const.c (range_check_type): Handle OFFSET_TYPE like pointer
+ 	types.
+ 
+ 2021-06-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* range-op.cc (range_relational_tests): New.
+ 	(range_op_tests): Call range_relational_tests.
+ 
+ 2021-06-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* range-op.cc (operator_cast::lhs_op1_relation): New.
+ 	(operator_identity::lhs_op1_relation): Mew.
+ 
+ 2021-06-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* range-op.cc (operator_minus::op1_op2_relation_effect): New.
+ 
+ 2021-06-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* range-op.cc (operator_plus::lhs_op1_relation): New.
+ 	(operator_plus::lhs_op2_relation): New.
+ 
+ 2021-06-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::ranger_cache): Create a
+ 	relation_oracle if dominators exist.
+ 	(ranger_cache::~ranger_cache): Dispose of oracle.
+ 	(ranger_cache::dump_bb): Dump oracle.
+ 	* gimple-range.cc (fur_source::fur_source): New.
+ 	(fur_source::get_operand): Use mmeber query.
+ 	(fur_source::get_phi_operand): Use member_query.
+ 	(fur_source::query_relation): New.
+ 	(fur_source::register_dependency): Delete.
+ 	(fur_source::register_relation): New.
+ 	(fur_edge::fur_edge): Adjust.
+ 	(fur_edge::get_phi_operand): Fix comment.
+ 	(fur_edge::query): Delete.
+ 	(fur_stmt::fur_stmt): Adjust.
+ 	(fur_stmt::query): Delete.
+ 	(fur_depend::fur_depend): Adjust.
+ 	(fur_depend::register_relation): New.
+ 	(fur_depend::register_relation): New.
+ 	(fur_list::fur_list): Adjust.
+ 	(fur_list::get_operand): Use member query.
+ 	(fold_using_range::range_of_range_op): Process and query relations.
+ 	(fold_using_range::range_of_address): Adjust dependency call.
+ 	(fold_using_range::range_of_phi): Ditto.
+ 	(gimple_ranger::gimple_ranger): New.  Use ranger_ache oracle.
+ 	(fold_using_range::relation_fold_and_or): New.
+ 	(fold_using_range::postfold_gcond_edges): New.
+ 	* gimple-range.h (class gimple_ranger): Adjust.
+ 	(class fur_source): Adjust members.
+ 	(class fur_stmt): Ditto.
+ 	(class fold_using_range): Ditto.
+ 
+ 2021-06-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* range-op.cc (range_operator::wi_fold): Apply relation effect.
+ 	(range_operator::fold_range): Adjust and apply relation effect.
+ 	(*::fold_range): Add relation parameters.
+ 	(*::op1_range): Ditto.
+ 	(*::op2_range): Ditto.
+ 	(range_operator::lhs_op1_relation): New.
+ 	(range_operator::lhs_op2_relation): New.
+ 	(range_operator::op1_op2_relation): New.
+ 	(range_operator::op1_op2_relation_effect): New.
+ 	(relop_early_resolve): New.
+ 	(operator_equal::op1_op2_relation): New.
+ 	(operator_equal::fold_range): Call relop_early_resolve.
+ 	(operator_not_equal::op1_op2_relation): New.
+ 	(operator_not_equal::fold_range): Call relop_early_resolve.
+ 	(operator_lt::op1_op2_relation): New.
+ 	(operator_lt::fold_range): Call relop_early_resolve.
+ 	(operator_le::op1_op2_relation): New.
+ 	(operator_le::fold_range): Call relop_early_resolve.
+ 	(operator_gt::op1_op2_relation): New.
+ 	(operator_gt::fold_range): Call relop_early_resolve.
+ 	(operator_ge::op1_op2_relation): New.
+ 	(operator_ge::fold_range): Call relop_early_resolve.
+ 	* range-op.h (class range_operator): Adjust parameters and methods.
+ 
+ 2021-06-22  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* Makefile.in (OBJS): Add value-relation.o.
+ 	* gimple-range.h: Adjust include files.
+ 	* tree-data-ref.c: Adjust include file order.
+ 	* value-query.cc (range_query::get_value_range): Default to no oracle.
+ 	(range_query::query_relation): New.
+ 	(range_query::query_relation): New.
+ 	* value-query.h (class range_query): Adjust.
+ 	* value-relation.cc: New.
+ 	* value-relation.h: New.
+ 
+ 2021-06-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101151
+ 	* tree-ssa-sink.c (statement_sink_location): Expand irreducible
+ 	region check.
+ 
+ 2021-06-22  Jojo R  <rjiejie@linux.alibaba.com>
+ 
+ 	* config/riscv/riscv.c (thead_c906_tune_info): New.
+ 	(riscv_tune_info_table): Use new tune.
+ 
+ 2021-06-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101158
+ 	* tree-vect-slp.c (vect_build_slp_tree_1): Move same operand
+ 	checking after checking for matching operation.
+ 
+ 2021-06-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101159
+ 	* tree-vect-patterns.c (vect_recog_popcount_pattern): Add
+ 	missing NULL vectype check.
+ 
+ 2021-06-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101154
+ 	* tree-vect-slp.c (vect_build_slp_tree_2): Fix out-of-bound access.
+ 
+ 2021-06-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/11877
+ 	* config/i386/i386-protos.h (ix86_last_zero_store_uid): Declare.
+ 	* config/i386/i386-expand.c (ix86_last_zero_store_uid): New variable.
+ 	* config/i386/i386.c (ix86_expand_prologue): Clear it.
+ 	* config/i386/i386.md (peephole2s for 1/2/4 stores of const0_rtx):
+ 	Remove "" from match_operand.  Emit new insns using emit_move_insn and
+ 	set ix86_last_zero_store_uid to INSN_UID of the last store.
+ 	Add peephole2s for 1/2/4 stores of const0_rtx following previous
+ 	successful peep2s.
+ 
+ 2021-06-22  Martin Liska  <mliska@suse.cz>
+ 
+ 	* auto-profile.c (AUTO_PROFILE_VERSION): Bump as string format
+ 	was changed.
+ 
+ 2021-06-22  Martin Liska  <mliska@suse.cz>
+ 
+ 	* gcov-io.h: Remove padding entries.
+ 
+ 2021-06-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR tree-optimization/97770
+ 	* tree-vect-patterns.c (vect_recog_popcount_pattern):
+ 	New.
+ 	(vect_recog_func vect_vect_recog_func_ptrs): Add new pattern.
+ 
+ 2021-06-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/100267
+ 	* config/i386/i386-builtin.def (BDESC): Adjust builtin name.
+ 	* config/i386/sse.md (<avx512>_expand<mode>_mask): Rename to ..
+ 	(expand<mode>_mask): this ..
+ 	(*expand<mode>_mask): New pre_reload splitter to transform
+ 	v{,p}expand* to vmov* when mask is zero, all ones, or has all
+ 	ones in it's lower part, otherwise still generate
+ 	v{,p}expand*.
+ 
+ 2021-06-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/100310
+ 	* config/i386/i386-expand.c
+ 	(ix86_expand_special_args_builtin): Keep constm1_operand only
+ 	if it satisfies insn's operand predicate.
+ 
+ 2021-06-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR target/88529
+ 	* df-scan.c (df_ref_record): Check that regno < endregno.
+ 	* function.c (assign_parms, expand_function_end): Do nothing with a
+ 	TYPE_EMPTY_P result.
+ 
+ 2021-06-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101120
+ 	* tree-vect-data-refs.c (bump_vector_ptr): Fold the
+ 	built increment.
+ 	* tree-vect-slp.c (vect_transform_slp_perm_load): Add
+ 	DR chain DCE capability.
+ 	* tree-vectorizer.h (vect_transform_slp_perm_load): Adjust.
+ 	* tree-vect-stmts.c (vectorizable_load): Remove unused
+ 	loads in the DR chain for SLP.
+ 
+ 2021-06-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR inline-asm/100785
+ 	* gimplify.c (gimplify_asm_expr): Don't diagnose errors if
+ 	output or input operands were already error_mark_node.
+ 	* cfgexpand.c (expand_asm_stmt): If errors are emitted,
+ 	remove all inputs, outputs and clobbers from the asm and
+ 	set template to "".
+ 
+ 2021-06-21  prathamesh.kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	* config/arm/arm_neon.h (vceq_s8): Replace builtin with __a == __b.
+ 	(vceq_s16): Likewise.
+ 	(vceq_s32): Likewise.
+ 	(vceq_u8): Likewise.
+ 	(vceq_u16): Likewise.
+ 	(vceq_u32): Likewise.
+ 	(vceq_p8): Likewise.
+ 	(vceqq_s8): Likewise.
+ 	(vceqq_s16): Likewise.
+ 	(vceqq_s32): Likewise.
+ 	(vceqq_u8): Likewise.
+ 	(vceqq_u16): Likewise.
+ 	(vceqq_u32): Likewise.
+ 	(vceqq_p8): Likewise.
+ 	(vceq_f32): Gate __a == __b on __FAST_MATH__.
+ 	(vceqq_f32): Likewise.
+ 	(vceq_f16): Likewise.
+ 	(vceqq_f16): Likewise.
+ 
+ 2021-06-21  prathamesh.kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	PR target/97906
+ 	* config/arm/iterators.md (NEON_VACMP): Remove.
+ 	* config/arm/neon.md (neon_vca<cmp_op><mode>): Use GLTE instead of GTGE
+ 	iterator.
+ 	(neon_vca<cmp_op><mode>_insn): Likewise.
+ 	(neon_vca<cmp_op_unsp><mode>_insn_unspec): Use NEON_VAGLTE instead of
+ 	NEON_VACMP.
+ 
+ 2021-06-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101121
+ 	* tree-vect-slp.c (vect_build_slp_tree_2): To not fail fatally
+ 	when we just lack a stmt with the desired op when doing permutation.
+ 	(vect_build_slp_tree): When caching a failed SLP build attempt
+ 	assert that at least one lane is marked as not matching.
+ 
+ 2021-06-21  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/101142
+ 	* config/i386/i386.md: (*anddi_1): Disparage slightly the mask
+ 	register alternative.
+ 	(*and<mode>_1): Ditto.
+ 	(*andqi_1): Ditto.
+ 	(*andn<mode>_1): Ditto.
+ 	(*<code><mode>_1): Ditto.
+ 	(*<code>qi_1): Ditto.
+ 	(*one_cmpl<mode>2_1): Ditto.
+ 	(*one_cmplsi2_1_zext): Ditto.
+ 	(*one_cmplqi2_1): Ditto.
+ 	* config/i386/i386.c (x86_order_regs_for_local_alloc): Change
+ 	the order of mask registers to be before general registers.
+ 
+ 2021-06-21  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR target/11877
+ 	* config/i386/i386.md: New define_peephole2s to shrink writing
+ 	1, 2 or 4 consecutive zeros to memory when optimizing for size.
+ 
+ 2021-06-18  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/h8300.c (h8300_select_cc_mode): Handle SYMBOL_REF.
+ 	* config/h8300/logical.md (<code><mode>3 logcial expander): Generate
+ 	more efficient code when the source can be trivially simplified.
+ 
+ 2021-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::range_of_def):  Calculate
+ 	a range if global is not available.
+ 	(ranger_cache::entry_range): Fallback to range_of_def.
+ 	* gimple-range-cache.h (range_of_def): Adjust prototype.
+ 
+ 2021-06-18  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/101014
+ 	* gimple-range-cache.cc (ranger_cache::ranger_cache): Remove poor
+ 	value list.
+ 	(ranger_cache::~ranger_cache): Ditto.
+ 	(ranger_cache::enable_new_values): Delete.
+ 	(ranger_cache::push_poor_value): Delete.
+ 	(ranger_cache::range_of_def): Remove poor value processing.
+ 	(ranger_cache::entry_range): Ditto.
+ 	(ranger_cache::fill_block_cache): Ditto.
+ 	* gimple-range-cache.h (class ranger_cache): Remove poor value members.
+ 	* gimple-range.cc (gimple_ranger::range_of_expr): Remove call.
+ 	* gimple-range.h (class gimple_ranger): Adjust.
+ 
+ 2021-06-18  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+ 
+ 	PR target/100856
+ 	* common/config/arm/arm-common.c (arm_canon_arch_option_1): New function
+ 	derived from arm_canon_arch.
+ 	(arm_canon_arch_option): Call it.
+ 	(arm_canon_arch_multilib_option): New function.
+ 	* config/arm/arm-cpus.in (IGNORE_FOR_MULTILIB): New fgroup.
+ 	* config/arm/arm.h (arm_canon_arch_multilib_option): New prototype.
+ 	(CANON_ARCH_MULTILIB_SPEC_FUNCTION): New macro.
+ 	(MULTILIB_ARCH_CANONICAL_SPECS): New macro.
+ 	(DRIVER_SELF_SPECS): Add MULTILIB_ARCH_CANONICAL_SPECS.
+ 	* config/arm/arm.opt (mlibarch): New option.
+ 	* config/arm/t-rmprofile (MULTILIB_MATCHES): For armv8*-m, replace use
+ 	of march on RHS with mlibarch.
+ 
+ 2021-06-18  Marcel Vollweiler  <marcel@codesourcery.com>
+ 
+ 	* config.in: Regenerate.
+ 	* config/gcn/gcn.c (print_operand_address): Fix for global_load assembler
+ 	functions.
+ 	* configure: Regenerate.
+ 	* configure.ac: Fix for global_load assembler functions.
+ 
+ 2021-06-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101112
+ 	* tree-vect-slp.c (vect_slp_linearize_chain): Fix condition
+ 	to lookup a pattern stmt def.
+ 
+ 2021-06-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/101062
+ 	* stor-layout.c (finish_bitfield_layout): Don't add bitfield
+ 	representatives in QUAL_UNION_TYPE.
+ 
+ 2021-06-18  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-ssa-phiopt.c (replace_phi_edge_with_variable):
+ 	Add counting of how many times it is done.
+ 	(factor_out_conditional_conversion): Likewise.
+ 	(match_simplify_replacement): Likewise.
+ 	(value_replacement): Likewise.
+ 	(spaceship_replacement): Likewise.
+ 	(cond_store_replacement): Likewise.
+ 	(cond_if_else_store_replacement_1): Likewise.
+ 	(hoist_adjacent_loads): Likewise.
+ 
+ 2021-06-18  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* tree-cfg.c (verify_gimple_assign_unary): Reject point and offset
+ 	types on NEGATE_EXPR, ABS_EXPR, BIT_NOT_EXPR, PAREN_EXPR and CNONJ_EXPR.
+ 	(verify_gimple_assign_binary): Reject point and offset types on
+ 	MULT_EXPR, MULT_HIGHPART_EXPR, TRUNC_DIV_EXPR, CEIL_DIV_EXPR,
+ 	FLOOR_DIV_EXPR, ROUND_DIV_EXPR, TRUNC_MOD_EXPR, CEIL_MOD_EXPR,
+ 	FLOOR_MOD_EXPR, ROUND_MOD_EXPR, RDIV_EXPR, and EXACT_DIV_EXPR.
+ 
+ 2021-06-18  Michael Meissner  <meissner@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_emit_minmax): Add support for ISA
+ 	3.1 IEEE 128-bit floating point xsmaxcqp/xsmincqp instructions.
+ 	* config/rs6000/rs6000.md (s<minmax><mode>3, IEEE128 iterator):
+ 	New insns.
+ 
+ 2021-06-17  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config/rs6000/genfusion.pl (gen_logical_addsubf): Add
+ 	earlyclobber to alts 0/1.
+ 	(gen_addadd): Add earlyclobber to alts 0/1.
+ 	* config/rs6000/fusion.md: Regenerate file.
+ 
+ 2021-06-17  Trevor Saunders  <tbsaunde@tbsaunde.org>
+ 
+ 	* cfgloopanal.c (get_loop_hot_path): Make path an auto_vec.
+ 
+ 2021-06-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc: Comment cleanups.
+ 	* gimple-range-gori.cc: Comment cleanups.
+ 	* gimple-range.cc: Comment/spacing cleanups
+ 	* value-range.h: Comment cleanups.
+ 
+ 2021-06-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/100704
+ 	* calls.c (expand_call): Replace PUSH_ARGS with
+ 	targetm.calls.push_argument (0).
+ 	(emit_library_call_value_1): Likewise.
+ 	* defaults.h (PUSH_ARGS): Removed.
+ 	(PUSH_ARGS_REVERSED): Replace PUSH_ARGS with
+ 	targetm.calls.push_argument (0).
+ 	* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
+ 	(emit_push_insn): Pass the number bytes to push to
+ 	targetm.calls.push_argument and pass 0 if ARGS_ADDR is 0.
+ 	* hooks.c (hook_bool_uint_true): New.
+ 	* hooks.h (hook_bool_uint_true): Likewise.
+ 	* rtlanal.c (nonzero_bits1): Replace PUSH_ARGS with
+ 	targetm.calls.push_argument (0).
+ 	* target.def (push_argument): Add a targetm.calls hook.
+ 	* targhooks.c (default_push_argument): New.
+ 	* targhooks.h (default_push_argument): Likewise.
+ 	* config/bpf/bpf.h (PUSH_ARGS): Removed.
+ 	* config/cr16/cr16.c (TARGET_PUSH_ARGUMENT): New.
+ 	* config/cr16/cr16.h (PUSH_ARGS): Removed.
+ 	* config/i386/i386.c (ix86_push_argument): New.
+ 	(TARGET_PUSH_ARGUMENT): Likewise.
+ 	* config/i386/i386.h (PUSH_ARGS): Removed.
+ 	* config/m32c/m32c.c (TARGET_PUSH_ARGUMENT): New.
+ 	* config/m32c/m32c.h (PUSH_ARGS): Removed.
+ 	* config/nios2/nios2.h (PUSH_ARGS): Likewise.
+ 	* config/pru/pru.h (PUSH_ARGS): Likewise.
+ 	* doc/tm.texi.in: Remove PUSH_ARGS documentation.  Add
+ 	TARGET_PUSH_ARGUMENT hook.
+ 	* doc/tm.texi: Regenerated.
+ 
+ 2021-06-17  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/97194
+ 	* config/i386/i386-expand.c (expand_vector_set_var):
+ 	Handle V2FS mode remapping.  Pass TARGET_MMX_WITH_SSE to
+ 	ix86_expand_vector_init_duplicate.
+ 	(ix86_expand_vector_init_duplicate): Emit insv_1 for
+ 	QImode for !TARGET_PARTIAL_REG_STALL.
+ 	* config/i386/predicates.md (vec_setm_mmx_operand): New predicate.
+ 	* config/i386/mmx.md (vec_setv2sf): Use vec_setm_mmx_operand
+ 	as operand 2 predicate.  Call ix86_expand_vector_set_var
+ 	for non-constant index operand.
+ 	(vec_setv2si): Ditto.
+ 	(vec_setv4hi): Ditto.
+ 	(vec_setv8qi): ditto.
+ 
+ 2021-06-17  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/100790
+ 	* gimple-range.cc (range_of_builtin_call): Cleanup clz and ctz
+ 	code.
+ 
+ 2021-06-17  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Use consistently -O1 instead of -O.
+ 
+ 2021-06-17  Martin Liska  <mliska@suse.cz>
+ 
+ 	* gcov-io.h: Update documentation entry about string format.
+ 
+ 2021-06-17  Marius Hillenbrand  <mhillen@linux.ibm.com>
+ 
+ 	PR target/100871
+ 	* config/s390/vecintrin.h (vec_doublee): Fix to use
+ 	  __builtin_s390_vflls.
+ 	(vec_floate): Fix to use __builtin_s390_vflrd.
+ 
+ 2021-06-17  Trevor Saunders  <tbsaunde@tbsaunde.org>
+ 
+ 	* dominance.c (get_dominated_to_depth): Return auto_vec<basic_block>.
+ 	* dominance.h (get_dominated_to_depth): Likewise.
+ 	(get_all_dominated_blocks): Likewise.
+ 	* cfgcleanup.c (delete_unreachable_blocks): Adjust.
+ 	* gcse.c (hoist_code): Likewise.
+ 	* tree-cfg.c (remove_edge_and_dominated_blocks): Likewise.
+ 	* tree-parloops.c (oacc_entry_exit_ok): Likewise.
+ 	* tree-ssa-dce.c (eliminate_unnecessary_stmts): Likewise.
+ 	* tree-ssa-phiprop.c (pass_phiprop::execute): Likewise.
+ 
+ 2021-06-17  Trevor Saunders  <tbsaunde@tbsaunde.org>
+ 
+ 	* dominance.c (get_dominated_by_region): Return auto_vec<basic_block>.
+ 	* dominance.h (get_dominated_by_region): Likewise.
+ 	* tree-cfg.c (gimple_duplicate_sese_region): Adjust.
+ 	(gimple_duplicate_sese_tail): Likewise.
+ 	(move_sese_region_to_fn): Likewise.
+ 
+ 2021-06-17  Trevor Saunders  <tbsaunde@tbsaunde.org>
+ 
+ 	* dominance.c (get_dominated_by): Return auto_vec<basic_block>.
+ 	* dominance.h (get_dominated_by): Likewise.
+ 	* auto-profile.c (afdo_find_equiv_class): Adjust.
+ 	* cfgloopmanip.c (duplicate_loop_to_header_edge): Likewise.
+ 	* loop-unroll.c (unroll_loop_runtime_iterations): Likewise.
+ 	* tree-cfg.c (test_linear_chain): Likewise.
+ 	(test_diamond): Likewise.
+ 
+ 2021-06-17  Trevor Saunders  <tbsaunde@tbsaunde.org>
+ 
+ 	* cfgloop.h (get_loop_hot_path): Return auto_vec<basic_block>.
+ 	* cfgloopanal.c (get_loop_hot_path): Likewise.
+ 	* tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Likewise.
+ 
+ 2021-06-17  Trevor Saunders  <tbsaunde@tbsaunde.org>
+ 
+ 	* cgraph.c (cgraph_node::collect_callers): Return
+ 	auto_vec<cgraph_edge *>.
+ 	* cgraph.h (cgraph_node::collect_callers): Likewise.
+ 	* ipa-cp.c (create_specialized_node): Adjust.
+ 	(decide_about_value): Likewise.
+ 	(decide_whether_version_node): Likewise.
+ 	* ipa-sra.c (process_isra_node_results): Likewise.
+ 
+ 2021-06-17  Trevor Saunders  <tbsaunde@tbsaunde.org>
+ 
+ 	* vec.h (vl_ptr>::using_auto_storage): Handle null m_vec.
+ 	(auto_vec<T, 0>::auto_vec): Define move constructor, and delete copy
+ 	constructor.
+ 	(auto_vec<T, 0>::operator=): Define move assignment and delete copy
+ 	assignment.
+ 
+ 2021-06-17  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range.cc (debug_seed_ranger): New.
+ 	(dump_ranger): New.
+ 	(debug_ranger): New.
+ 
+ 2021-06-17  Richard Biener   <rguenther@suse.de>
+ 
+ 	PR tree-optimization/54400
+ 	* tree-vectorizer.h (enum slp_instance_kind): Add
+ 	slp_inst_kind_bb_reduc.
+ 	(reduction_fn_for_scalar_code): Declare.
+ 	* tree-vect-data-refs.c (vect_slp_analyze_instance_dependence):
+ 	Check SLP_INSTANCE_KIND instead of looking at the
+ 	representative.
+ 	(vect_slp_analyze_instance_alignment): Likewise.
+ 	* tree-vect-loop.c (reduction_fn_for_scalar_code): Export.
+ 	* tree-vect-slp.c (vect_slp_linearize_chain): Split out
+ 	chain linearization from vect_build_slp_tree_2 and generalize
+ 	for the use of BB reduction vectorization.
+ 	(vect_build_slp_tree_2): Adjust accordingly.
+ 	(vect_optimize_slp): Elide permutes at the root of BB reduction
+ 	instances.
+ 	(vectorizable_bb_reduc_epilogue): New function.
+ 	(vect_slp_prune_covered_roots): Likewise.
+ 	(vect_slp_analyze_operations): Use them.
+ 	(vect_slp_check_for_constructors): Recognize associatable
+ 	chains for BB reduction vectorization.
+ 	(vectorize_slp_instance_root_stmt): Generate code for the
+ 	BB reduction epilogue.
+ 
+ 2021-06-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-gori.cc (gori_compute::has_edge_range_p): Check with
+ 	may_recompute_p.
+ 	(gori_compute::may_recompute_p): New.
+ 	(gori_compute::outgoing_edge_range_p): Perform recomputations.
+ 	* gimple-range-gori.h (class gori_compute): Add prototype.
+ 
+ 2021-06-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::range_on_edge): Always return
+ 	true when a range can be calculated.
+ 	* gimple-range.cc (gimple_ranger::dump_bb): Check has_edge_range_p.
+ 
+ 2021-06-16  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* doc/invoke.texi (-Wmismatched-dealloc, -Wmismatched-new-delete):
+ 	Correct documented defaults.
+ 
+ 2021-06-16  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::ranger_cache): Initialize
+ 	m_new_value_p directly.
+ 
+ 2021-06-16  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/89021
+ 	* config/i386/i386-expand.c (expand_vec_perm_2perm_pblendv):
+ 	Handle 64bit modes for TARGET_SSE4_1.
+ 	(expand_vec_perm_pshufb2): Handle 64bit modes for TARGET_SSSE3.
+ 	(expand_vec_perm_even_odd_pack): Handle V4HI mode.
+ 	(expand_vec_perm_even_odd_1) <case E_V4HImode>: Expand via
+ 	expand_vec_perm_pshufb2 for TARGET_SSSE3 and via
+ 	expand_vec_perm_even_odd_pack for TARGET_SSE4_1.
+ 	* config/i386/mmx.md (mmx_packusdw): New insn pattern.
+ 
+ 2021-06-16  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_<sur><addsub>hn<mode>):
+ 	Change to an expander that emits the correct instruction
+ 	depending on endianness.
+ 	(aarch64_<sur><addsub>hn<mode>_insn_le): Define.
+ 	(aarch64_<sur><addsub>hn<mode>_insn_be): Define.
+ 
+ 2021-06-16  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Split generator
+ 	for aarch64_<su>qmovn builtins into scalar and vector
+ 	variants.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<su>qmovn<mode>_insn_le):
+ 	Define.
+ 	(aarch64_<su>qmovn<mode>_insn_be): Define.
+ 	(aarch64_<su>qmovn<mode>): Split into scalar and vector
+ 	variants. Change vector variant to an expander that emits the
+ 	correct instruction depending on endianness.
+ 
+ 2021-06-16  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Split generator
+ 	for aarch64_sqmovun builtins into scalar and vector variants.
+ 	* config/aarch64/aarch64-simd.md (aarch64_sqmovun<mode>):
+ 	Split into scalar and vector variants. Change vector variant
+ 	to an expander that emits the correct instruction depending
+ 	on endianness.
+ 	(aarch64_sqmovun<mode>_insn_le): Define.
+ 	(aarch64_sqmovun<mode>_insn_be): Define.
+ 
+ 2021-06-16  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_xtn<mode>_insn_le):
+ 	Define - modeling zero-high-half semantics.
+ 	(aarch64_xtn<mode>): Change to an expander that emits the
+ 	appropriate instruction depending on endianness.
+ 	(aarch64_xtn<mode>_insn_be): Define - modeling zero-high-half
+ 	semantics.
+ 	(aarch64_xtn2<mode>_le): Rename to...
+ 	(aarch64_xtn2<mode>_insn_le): This.
+ 	(aarch64_xtn2<mode>_be): Rename to...
+ 	(aarch64_xtn2<mode>_insn_be): This.
+ 	(vec_pack_trunc_<mode>): Emit truncation instruction instead
+ 	of aarch64_xtn.
+ 	* config/aarch64/iterators.md (Vnarrowd): Add Vnarrowd mode
+ 	attribute iterator.
+ 
+ 2021-06-16  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/100453
+ 	* tree-sra.c (create_access): Disqualify any const candidates
+ 	which are written to.
+ 	(sra_modify_expr): Do not store sub-replacements back to a const base.
+ 	(handle_unscalarized_data_in_subtree): Likewise.
+ 	(sra_modify_assign): Likewise.  Earlier, use TREE_READONLy test
+ 	instead of constant_decl_p.
+ 
+ 2021-06-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/101062
+ 	* stor-layout.c (finish_bitfield_representative): For fields in unions
+ 	assume nextf is always NULL.
+ 	(finish_bitfield_layout): Compute bit field representatives also in
+ 	unions, but handle it as if each bitfield was the only field in the
+ 	aggregate.
+ 
+ 2021-06-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101088
+ 	* tree-ssa-loop-im.c (sm_seq_valid_bb): Only look for
+ 	supported refs on edges.  Do not assert same ref but
+ 	different kind stores are unsuported but mark them so.
+ 	(hoist_memory_references): Only look for supported refs
+ 	on exits.
+ 
+ 2021-06-16  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR rtl-optimization/46235
+ 	* config/i386/i386.md: New define_split for bt followed by cmov.
+ 	(*bt<mode>_setcqi): New define_insn_and_split for bt followed by setc.
+ 	(*bt<mode>_setncqi): New define_insn_and_split for bt then setnc.
+ 	(*bt<mode>_setnc<mode>): New define_insn_and_split for bt followed
+ 	by setnc with zero extension.
+ 
+ 2021-06-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101083
+ 	* tree-vect-slp.c (vect_slp_build_two_operator_nodes): Get
+ 	vectype as argument.
+ 	(vect_build_slp_tree_2): Adjust.
+ 
+ 2021-06-15  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/100876
+ 	* builtins.c: (gimple_call_return_array): Account for size_t
+ 	mangling as either unsigned int or unsigned long
+ 
+ 2021-06-15  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* compare-elim.c (try_eliminate_compare): Run DCE to clean things
+ 	up before eliminating comparisons.
+ 
+ 2021-06-15  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* range-op.cc (operator_bitwise_or::wi_fold): Make sure
+ 	nonzero|X is nonzero.
+ 	(range_op_bitwise_and_tests): Add tests for above.
+ 
+ 2021-06-15  Carl Love  <cel@us.ibm.com>
+ 
+ 	PR target/101022
+ 	* config/rs6000/rs6000-builtin.def (VCMPEQUT): Fix the ICODE for the
+ 	enum definition.
+ 	(VRLQ, VSLQ, VSRQ, VSRAQ): Remove unused BU_P10_OVERLOAD_2
+ 	definitions.
+ 
+ 2021-06-15  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	PR fortran/92568
+ 	* gimplify.c (enum gimplify_defaultmap_kind): Add GDMK_SCALAR_TARGET.
+ 	(struct gimplify_omp_ctx): Extend defaultmap array by one.
+ 	(new_omp_context): Init defaultmap[GDMK_SCALAR_TARGET].
+ 	(omp_notice_variable): Update type classification for Fortran.
+ 	(gimplify_scan_omp_clauses): Update calls for new argument; handle
+ 	GDMK_SCALAR_TARGET; for Fortran, GDMK_POINTER avoid GOVD_MAP_0LEN_ARRAY.
+ 	* langhooks-def.h (lhd_omp_scalar_p): Add 'ptr_ok' argument.
+ 	* langhooks.c (lhd_omp_scalar_p): Likewise.
+ 	(LANG_HOOKS_OMP_ALLOCATABLE_P, LANG_HOOKS_OMP_SCALAR_TARGET_P): New.
+ 	(LANG_HOOKS_DECLS): Add them.
+ 	* langhooks.h (struct lang_hooks_for_decls): Add new hooks, update
+ 	omp_scalar_p pointer type to include the new bool argument.
+ 
+ 2021-06-15  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* doc/analyzer.texi
+ 	(Special Functions for Debugging the Analyzer): Add
+ 	__analyzer_dump_capacity.
+ 
+ 2021-06-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/101046
+ 	* expr.c (expand_expr_real_2) <case VEC_PACK_FIX_TRUNC_EXPR,
+ 	case VEC_PACK_TRUNC_EXPR>: Clear subtarget when changing mode.
+ 
+ 2021-06-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	* cfgloopanal.c (mark_irreducible_loops): Use a dominance
+ 	check to identify loop latches.
+ 	* cfgloop.c (verify_loop_structure): Likewise.
+ 	* loop-init.c (apply_loop_flags): Allow marked irreducible
+ 	regions even with multiple latches.
+ 	* predict.c (rebuild_frequencies): Simplify.
+ 
+ 2021-06-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-threadupdate.c
+ 	(jump_thread_path_registry::mark_threaded_blocks): Assert we
+ 	have marked irreducible regions.
+ 
+ 2021-06-14  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR c++/100876
+ 	* builtins.c (gimple_call_return_array): Check for attribute fn spec.
+ 	Handle calls to placement new.
+ 	(ndecl_dealloc_argno): Avoid placement delete.
+ 
+ 2021-06-14  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/100777
+ 	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_mma_builtin): Use
+ 	create_tmp_reg_or_ssa_name().
+ 
+ 2021-06-14  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::ranger_cache): Adjust.
+ 	(ranger_cache::enable_new_values): Set to specified value and
+ 	return the old value.
+ 	(ranger_cache::disable_new_values): Delete.
+ 	(ranger_cache::fill_block_cache): Disable non 1st order derived
+ 	poor values.
+ 	* gimple-range-cache.h (ranger_cache): Adjust prototypes.
+ 	* gimple-range.cc (gimple_ranger::range_of_expr): Adjust.
+ 
+ 2021-06-14  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/101058
+ 	* config/i386/i386-expand.c (ix86_vectorize_vec_perm_const):
+ 	Return true early when testing with V2HImode.
+ 	* config/i386/mmx.md (*punpckwd): Split to sse2_pshuflw_1.
+ 
+ 2021-06-14  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/mve.md (mve_vec_unpack<US>_lo_<mode>): New pattern.
+ 	(mve_vec_unpack<US>_hi_<mode>): New pattern.
+ 	(@mve_vec_pack_trunc_lo_<mode>): New pattern.
+ 	(mve_vmovntq_<supf><mode>): Prefix with '@'.
+ 	* config/arm/neon.md (vec_unpack<US>_hi_<mode>): Move to
+ 	vec-common.md.
+ 	(vec_unpack<US>_lo_<mode>): Likewise.
+ 	(vec_pack_trunc_<mode>): Rename to
+ 	neon_quad_vec_pack_trunc_<mode>.
+ 	* config/arm/vec-common.md (vec_unpack<US>_hi_<mode>): New
+ 	pattern.
+ 	(vec_unpack<US>_lo_<mode>): New.
+ 	(vec_pack_trunc_<mode>): New.
+ 
+ 2021-06-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100934
+ 	* tree-ssa-dom.c (pass_dominator::execute): Properly
+ 	mark irreducible regions.
+ 
+ 2021-06-14  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Put r{...} on the same line as @item.
+ 
+ 2021-06-14  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Add missing newline.
+ 
+ 2021-06-14  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Remove '+' charasters.
+ 
+ 2021-06-14  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config.gcc (arc): Add support for with_cpu option.
+ 	* config/arc/arc.h (OPTION_DEFAULT_SPECS): Add fpu.
+ 
+ 2021-06-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101031
+ 	* tree-ssa-strlen.c (maybe_invalidate): Increment max_size
+ 	instead of size when accounting for a possibly string
+ 	terminating nul.
+ 
+ 2021-06-14  Martin Liska  <mliska@suse.cz>
+ 
+ 	* gimple-ssa-evrp.c (pointer_equiv_analyzer::~pointer_equiv_analyzer): Use delete[].
+ 
+ 2021-06-14  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* value-query.cc (gimple_range_global): Call get_range_global
+ 	if called after inlining.
+ 
+ 2021-06-13  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/101021
+ 	* config/i386/i386-expand.c (expand_vec_perm_pshufb):
+ 	Emit constant permutation insn directly from here.
+ 
+ 2021-06-13  Trevor Saunders  <tbsaunde@tbsaunde.org>
+ 
+ 	* attribs.c (find_attribute_namespace): Iterate over vec<> with
+ 	range based for.
+ 	* auto-profile.c (afdo_find_equiv_class): Likewise.
+ 	* gcc.c (do_specs_vec): Likewise.
+ 	(do_spec_1): Likewise.
+ 	(driver::set_up_specs): Likewise.
+ 	* gimple-loop-jam.c (any_access_function_variant_p): Likewise.
+ 	* gimple-ssa-store-merging.c (compatible_load_p): Likewise.
+ 	(imm_store_chain_info::try_coalesce_bswap): Likewise.
+ 	(imm_store_chain_info::coalesce_immediate_stores): Likewise.
+ 	(get_location_for_stmts): Likewise.
+ 	* graphite-poly.c (print_iteration_domains): Likewise.
+ 	(free_poly_bb): Likewise.
+ 	(remove_gbbs_in_scop): Likewise.
+ 	(free_scop): Likewise.
+ 	(dump_gbb_cases): Likewise.
+ 	(dump_gbb_conditions): Likewise.
+ 	(print_pdrs): Likewise.
+ 	(print_scop): Likewise.
+ 	* ifcvt.c (cond_move_process_if_block): Likewise.
+ 	* lower-subreg.c (decompose_multiword_subregs): Likewise.
+ 	* regcprop.c (pass_cprop_hardreg::execute): Likewise.
+ 	* sanopt.c (sanitize_rewrite_addressable_params): Likewise.
+ 	* sel-sched-dump.c (dump_insn_vector): Likewise.
+ 	* store-motion.c (store_ops_ok): Likewise.
+ 	(store_killed_in_insn): Likewise.
+ 	* timevar.c (timer::named_items::print): Likewise.
+ 	* tree-cfgcleanup.c (cleanup_control_flow_pre): Likewise.
+ 	(cleanup_tree_cfg_noloop): Likewise.
+ 	* tree-data-ref.c (dump_data_references): Likewise.
+ 	(print_dir_vectors): Likewise.
+ 	(print_dist_vectors): Likewise.
+ 	(dump_data_dependence_relations): Likewise.
+ 	(dump_dist_dir_vectors): Likewise.
+ 	(dump_ddrs): Likewise.
+ 	(create_runtime_alias_checks): Likewise.
+ 	(free_subscripts): Likewise.
+ 	(save_dist_v): Likewise.
+ 	(save_dir_v): Likewise.
+ 	(invariant_access_functions): Likewise.
+ 	(same_access_functions): Likewise.
+ 	(access_functions_are_affine_or_constant_p): Likewise.
+ 	(find_data_references_in_stmt): Likewise.
+ 	(graphite_find_data_references_in_stmt): Likewise.
+ 	(free_dependence_relations): Likewise.
+ 	(free_data_refs): Likewise.
+ 	* tree-inline.c (copy_debug_stmts): Likewise.
+ 	* tree-into-ssa.c (dump_currdefs): Likewise.
+ 	(rewrite_update_phi_arguments): Likewise.
+ 	* tree-ssa-propagate.c (clean_up_loop_closed_phi): Likewise.
+ 	* tree-vect-data-refs.c (vect_analyze_possibly_independent_ddr):
+ 	Likewise.
+ 	(vect_slp_analyze_node_dependences): Likewise.
+ 	(vect_slp_analyze_instance_dependence): Likewise.
+ 	(vect_record_base_alignments): Likewise.
+ 	(vect_get_peeling_costs_all_drs): Likewise.
+ 	(vect_peeling_supportable): Likewise.
+ 	* tree-vectorizer.c (vec_info::~vec_info): Likewise.
+ 	(vec_info::free_stmt_vec_infos): Likewise.
+ 
+ 2021-06-13  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/logical.md (<code>qi3_1<cczn>): New pattern.
+ 	(andqi3_1<cczn>): Removed.
+ 	(<ors>qi3_1): Do not split for IOR/XOR a single bit.
+ 	(H8/SX bit logicals): Split out from other patterns.
+ 	* config/h8300/multiply.md (mulqihi3_const<cczn>): Renamed from
+ 	mulqihi3_const_clobber_flags.
+ 	(mulqihi3<cczn>, mulhisi3_const<cczn>, mulhisi3<cczn>): Similarly
+ 
+ 2021-06-13  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/101023
+ 	* config/i386/i386.c (ix86_expand_prologue): Set red_zone_used
+ 	to true if red zone is used.
+ 	(ix86_output_indirect_jmp): Replace ix86_red_zone_size with
+ 	ix86_red_zone_used.
+ 	* config/i386/i386.h (machine_function): Add red_zone_used.
+ 	(ix86_red_zone_size): Removed.
+ 	(ix86_red_zone_used): New.
+ 	* config/i386/i386.md (peephole2 patterns): Replace
+ 	ix86_red_zone_size with ix86_red_zone_used.
+ 
+ 2021-06-12  Jason Merrill  <jason@redhat.com>
+ 
+ 	* doc/extend.texi (unused variable attribute): Applies to
+ 	structure fields as well.
+ 
+ 2021-06-12  Eugene Rozenfeld  <erozen@microsoft.com>
+ 
+ 	* auto-profile.c (read_profile): fix a typo in an error string
+ 
+ 2021-06-11  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* tree-pretty-print.h (dump_omp_clauses): Add 'bool = true'
+ 	default argument.
+ 	* tree-pretty-print.c (dump_omp_clauses): Update.
+ 	(dump_generic_node) <OMP_CLAUSE>: Use it.
+ 
+ 2021-06-11  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+ 
+ 	PR target/101016
+ 	* config/arm/arm_mve.h (__arm_vld1q): Change __ARM_mve_coerce(p0,
+ 	int8_t const *) to __ARM_mve_coerce1(p0, int8_t *) in the argument for
+ 	the polymorphic variants matching code.
+ 	(__arm_vld1q_z): Likewise.
+ 	(__arm_vld2q): Likewise.
+ 	(__arm_vld4q): Likewise.
+ 	(__arm_vldrbq_gather_offset): Likewise.
+ 	(__arm_vldrbq_gather_offset_z): Likewise.
+ 
+ 2021-06-11  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR tree-optimization/96392
+ 	* fold-const.h (tree_expr_maybe_real_minus_zero_p): Fix prototype.
+ 
+ 2021-06-11  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR tree-optimization/96392
+ 	* fold-const.c (fold_real_zero_addition_p): Take both arguments
+ 	of the addition or subtraction, not just the zero.  Use this
+ 	other argument in tests for signaling NaNs and signed zeros.
+ 	(tree_expr_maybe_real_minus_zero_p): New predicate.
+ 	* fold-const.h (fold_real_zero_addition_p): Update prototype.
+ 	(tree_expr_maybe_real_minus_zero_p): New function prototype.
+ 	* match.pd: Update calls to fold_real_zero_addition_p.
+ 	Replace HONOR_NANS with tree_expr_maybe_nan_p.
+ 	Replace HONOR_SIGNED_ZEROS with tree_expr_maybe_real_minus_zero_p.
+ 	Replace HONOR_SNANS with tree_expr_maybe_signaling_nan_p.
+ 	* tree-ssa-reassoc.c (eliminate_using_constants): Update
+ 	call to fold_real_zero_addition_p.
+ 
+ 2021-06-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101025
+ 	* tree-ssa-loop-im.c (sm_seq_valid_bb): Make sure to process
+ 	all refs that require dependence checking.
+ 
+ 2021-06-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101028
+ 	* tree-vect-slp.c (vect_build_slp_tree_2): When SLP
+ 	reassoc discovery fails fatally, mark appropriate lanes
+ 	in matches[] so.
+ 
+ 2021-06-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101026
+ 	* tree-vect-slp.c (vect_build_slp_tree_2): Make sure we
+ 	have a representative for the associated chain nodes.
+ 
+ 2021-06-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/101008
+ 	* simplify-rtx.c (relational_result): New function.
+ 	(simplify_logical_relational_operation,
+ 	simplify_relational_operation): Use it.
+ 
+ 2021-06-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/101007
+ 	* config/i386/sse.md (*vec_concat<mode>_0_1): Require TARGET_SSE2.
+ 
+ 2021-06-11  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/101021
+ 	* config/i386/i386-expand.c (expand_vec_perm_pshufb): Return
+ 	false if the permutation can be implemented with constant
+ 	permutation instruction in wider mode.
+ 	(canonicalize_vector_int_perm): Move above expand_vec_perm_pshufb.
+ 	Handle V8QImode and V4HImode.
+ 
+ 2021-06-11  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR gcov-profile/100788
+ 	* common.opt: Add new option.
+ 	* coverage.c (coverage_begin_function): Emit warning instead on
+ 	the internal compiler error.
+ 	* doc/invoke.texi: Document the option.
+ 	* toplev.c (process_options): Enable it by default.
+ 
+ 2021-06-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/101009
+ 	* tree-data-ref.c (build_classic_dist_vector_1): Make sure
+ 	to set *init_b to true when we encounter a constant equal
+ 	index pair.
+ 	(compute_affine_dependence): Also dump the actual DR_REF.
+ 
+ 2021-06-10  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/100984
+ 	* gimple-ssa-evrp.c  (ssa_equiv_stack): Use auto_vec for
+ 	replacements table.
+ 	(ssa_equiv_stack::~ssa_equiv_stack): Remove.
+ 
+ 2021-06-11  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.md
+ 	(floatsi<SFDF:mode>2_lfiwax_<QHI:mode>_mem_zext): New
+ 	define_insn_and_split.
+ 
+ 2021-06-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.c (vect_build_slp_tree_2): Use stablesort
+ 	to sort operands of the associative chain.
+ 
+ 2021-06-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	* system.h (gcc_stablesort_r): Declare.
+ 	* sort.cc (gcc_sort_r): Support stable sort.
+ 	(gcc_stablesort_r): Define.
+ 	* vec.h (vec<>::stablesort): Add.
+ 
+ 2021-06-10  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/89021
+ 	* config/i386/i386-expand.c (ix86_split_mmx_punpck):
+ 	Handle V2SF mode.  Emit SHUFPS to fixup unpack-high for V2SF mode.
+ 	(expand_vec_perm_blend): Handle 64bit modes for TARGET_SSE4_1.
+ 	(expand_vec_perm_pshufb): Handle 64bit modes for TARGET_SSSE3.
+ 	(expand_vec_perm_pblendv): Handle 64bit modes for TARGET_SSE4_1.
+ 	(expand_vec_perm_interleave2): Handle 64bit modes.
+ 	(expand_vec_perm_even_odd_pack): Handle V8QI mode.
+ 	(expand_vec_perm_even_odd_1): Ditto.
+ 	(ix86_vectorize_vec_perm_const): Ditto.
+ 	* config/i386/i386.md (UNSPEC_PSHUFB): Move from ...
+ 	* config/i386/sse.md: ... here.
+ 	* config/i386/mmx.md (*vec_interleave_lowv2sf):
+ 	New insn_and_split pattern.
+ 	(*vec_interleave_highv2sf): Ditto.
+ 	(mmx_pshufbv8qi3): New insn pattern.
+ 	(*mmx_pblendw): Ditto.
+ 
+ 2021-06-10  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin.def (build_pair): New built-in.
+ 	(build_acc): Likewise.
+ 	* config/rs6000/rs6000-call.c (mma_expand_builtin): Swap assemble
+ 	source operands in little-endian mode.
+ 	(rs6000_gimple_fold_mma_builtin): Handle VSX_BUILTIN_BUILD_PAIR.
+ 	(mma_init_builtins): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_split_multireg_move): Handle endianness
+ 	ordering for the MMA assemble and build source operands.
+ 	* doc/extend.texi (__builtin_vsx_build_acc, __builtin_mma_build_pair):
+ 	Document.
+ 	(__builtin_mma_assemble_acc, __builtin_mma_assemble_pair): Remove
+ 	documentation.
+ 
+ 2021-06-10  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/h8300.c (select_cc_mode): Handle MEM.  Use
+ 	REG_P.
+ 	* config/h8300/extensions.md: Replace _clobber_flags patterns
+ 	with <cczn>.
+ 
+ 2021-06-10  Robin Dapp  <rdapp@linux.ibm.com>
+ 
+ 	* config/s390/vector.md (vcond_mask_<mode><mode>): Change to
+ 	(vcond_mask_<mode><tointvec>): this.
+ 
+ 2021-06-10  Andrew Stubbs  <ams@codesourcery.com>
+ 	    Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* omp-builtins.def (BUILT_IN_GOACC_ENTER_EXIT_DATA): Split into...
+ 	(BUILT_IN_GOACC_ENTER_DATA, BUILT_IN_GOACC_EXIT_DATA): ... these.
+ 	* gimple.h (enum gf_mask): Split
+ 	'GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA' into
+ 	'GF_OMP_TARGET_KIND_OACC_ENTER_DATA' and
+ 	'GF_OMP_TARGET_KIND_OACC_EXIT_DATA'.
+ 	(is_gimple_omp_oacc): Update.
+ 	* gimple-pretty-print.c (dump_gimple_omp_target): Likewise.
+ 	* gimplify.c (gimplify_omp_target_update): Likewise.
+ 	* omp-expand.c (expand_omp_target, build_omp_regions_1)
+ 	(omp_make_gimple_edges): Likewise.
+ 	* omp-low.c (check_omp_nesting_restrictions, lower_omp_target):
+ 	Likewise.
+ 
+ 2021-06-10  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* value-query.cc (value_query::value_on_edge): Rename name to
+ 	expr.
+ 	(range_query::range_on_edge): Same.
+ 	(range_query::value_of_expr): Same.
+ 	(range_query::value_on_edge): Same.
+ 	* value-query.h (class value_query): Same.
+ 	(class range_query): Same.
+ 
+ 2021-06-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/101003
+ 	* tree-vect-slp.c (vect_build_slp_tree_2): Appropriately
+ 	use the pattern stmt defs when linearizing a chain.
+ 
+ 2021-06-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/100852
+ 	* ifcvt.c (noce_get_alt_condition, noce_try_abs): Use
+ 	prev_nonnote_nondebug_insn instead of prev_nonnote_insn.
+ 
+ 2021-06-10  Clement Chigot  <clement.chigot@atos.net>
+ 
+ 	* config/rs6000/aix71.h (ASM_CPU_SPEC): Add Power10 directive.
+ 	* config/rs6000/aix72.h (ASM_CPU_SPEC): Likewise.
+ 
+ 2021-06-09  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/100925
+ 	* match.pd (a ? CST1 : CST2): Limit transformations
+ 	that would produce a negative to integeral types only.
+ 	Change !POINTER_TYPE_P to INTEGRAL_TYPE_P also.
+ 
+ 2021-06-09  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	Revert:
+ 	2021-06-09  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* doc/tm.texi: Correctly update.
+ 
+ 2021-06-09  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* doc/tm.texi: Correctly update.
+ 
+ 2021-06-09  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR other/100735
+ 	* doc/tm.texi.in (Trampolines): Add a missing blank line.
+ 
+ 2021-06-09  Paul Eggert  <eggert@cs.ucla.edu>
+ 
+ 	PR other/100735
+ 	* doc/invoke.texi (Code Gen Options); Document that -fno-trampolines
+ 	and -ftrampolines work only with Ada.
+ 	* doc/tm.texi.in (Trampolines): Likewise.
+ 	* doc/tm.texi: Regenerated.
+ 
+ 2021-06-09  Carl Love  <cel@us.ibm.com>
+ 
+ 	* config/rs6000/altivec.h (vec_signextll, vec_signexti, vec_signextq):
+ 	Add define for new builtins.
+ 	* config/rs6000/altivec.md(altivec_vreveti2): Add define_expand.
+ 	* config/rs6000/rs6000-builtin.def (VSIGNEXTI, VSIGNEXTLL):  Add
+ 	overloaded builtin definitions.
+ 	(VSIGNEXTSB2W, VSIGNEXTSH2W, VSIGNEXTSB2D, VSIGNEXTSH2D,VSIGNEXTSW2D,
+ 	VSIGNEXTSD2Q):	Add builtin expansions.
+ 	(SIGNEXT): Add P10 overload definition.
+ 	* config/rs6000/rs6000-call.c (P9V_BUILTIN_VEC_VSIGNEXTI, P9V_BUILTIN_VEC_VSIGNEXTLL,
+ 	P10_BUILTIN_VEC_SIGNEXT): Add overloaded argument definitions.
+ 	* config/rs6000/vsx.md (vsx_sign_extend_v2di_v1ti): Add define_insn.
+ 	(vsignextend_v2di_v1ti, vsignextend_qi_<mode>, vsignextend_hi_<mode>,
+ 	vsignextend_si_v2di)[VIlong]: Add define_expand.
+ 	Make define_insn vsx_sign_extend_si_v2di visible.
+ 	* doc/extend.texi:  Add documentation for the vec_signexti,
+ 	vec_signextll builtins and vec_signextq.
+ 
+ 2021-06-09  Carl Love  <cel@us.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (__fixkfti, __fixunskfti, __floattikf,
+ 	__floatuntikf): Names changed to __fixkfti_sw, __fixunskfti_sw,
+ 	__floattikf_sw, __floatuntikf_sw respectively.
+ 	* config/rs6000/rs6000.md (floatti<mode>2, floatunsti<mode>2,
+ 	fix_trunc<mode>ti2, fixuns_trunc<mode>ti2): Add
+ 	define_insn for mode IEEE 128.
+ 
+ 2021-06-09  Carl Love  <cel@us.ibm.com>
+ 
+ 	* config/rs6000/altivec.md (altivec_vslq, altivec_vsrq):
+ 	Rename to altivec_vslq_<mode>, altivec_vsrq_<mode>, mode VEC_TI.
+ 	* config/rs6000/vector.md (VEC_TI): Was named VSX_TI in vsx.md.
+ 	(vashlv1ti3): Change to vashl<mode>3, mode VEC_TI.
+ 	(vlshrv1ti3): Change to vlshr<mode>3, mode VEC_TI.
+ 	* config/rs6000/vsx.md (VSX_TI): Remove define_mode_iterator. Update
+ 	uses of VSX_TI to VEC_TI.
+ 
+ 2021-06-09  Carl Love  <cel@us.ibm.com>
+ 
+ 	* config/rs6000/dfp.md (floattitd2, fixtdti2): New define_insns.
+ 
+ 2021-06-09  Carl Love  <cel@us.ibm.com>
+ 
+ 	* config/rs6000/altivec.h (vec_dive, vec_mod): Add define for new
+ 	builtins.
+ 	* config/rs6000/altivec.md (UNSPEC_VMULEUD, UNSPEC_VMULESD,
+ 	UNSPEC_VMULOUD, UNSPEC_VMULOSD): New unspecs.
+ 	(altivec_eqv1ti, altivec_gtv1ti, altivec_gtuv1ti, altivec_vmuleud,
+ 	altivec_vmuloud, altivec_vmulesd, altivec_vmulosd, altivec_vrlq,
+ 	altivec_vrlqmi, altivec_vrlqmi_inst, altivec_vrlqnm,
+ 	altivec_vrlqnm_inst, altivec_vslq, altivec_vsrq, altivec_vsraq,
+ 	altivec_vcmpequt_p, altivec_vcmpgtst_p, altivec_vcmpgtut_p): New
+ 	define_insn.
+ 	(vec_widen_umult_even_v2di, vec_widen_smult_even_v2di,
+ 	vec_widen_umult_odd_v2di, vec_widen_smult_odd_v2di, altivec_vrlqmi,
+ 	altivec_vrlqnm): New define_expands.
+ 	* config/rs6000/rs6000-builtin.def (VCMPEQUT_P, VCMPGTST_P,
+ 	VCMPGTUT_P): Add macro expansions.
+ 	(BU_P10V_AV_P): Add builtin predicate definition.
+ 	(VCMPGTUT, VCMPGTST, VCMPEQUT, CMPNET, CMPGE_1TI,
+ 	CMPGE_U1TI, CMPLE_1TI, CMPLE_U1TI, VNOR_V1TI_UNS, VNOR_V1TI, VCMPNET_P,
+ 	VCMPAET_P, VMULEUD, VMULESD, VMULOUD, VMULOSD, VRLQ,
+ 	VSLQ, VSRQ, VSRAQ, VRLQNM, DIV_V1TI, UDIV_V1TI, DIVES_V1TI, DIVEU_V1TI,
+ 	MODS_V1TI, MODU_V1TI, VRLQMI): New macro expansions.
+ 	(VRLQ, VSLQ, VSRQ, VSRAQ, DIVE, MOD): New overload expansions.
+ 	* config/rs6000/rs6000-call.c (P10_BUILTIN_VCMPEQUT,
+ 	P10V_BUILTIN_CMPGE_1TI, P10V_BUILTIN_CMPGE_U1TI,
+ 	P10V_BUILTIN_VCMPGTUT, P10V_BUILTIN_VCMPGTST,
+ 	P10V_BUILTIN_CMPLE_1TI, P10V_BUILTIN_VCMPLE_U1TI,
+ 	P10V_BUILTIN_DIV_V1TI, P10V_BUILTIN_UDIV_V1TI,
+ 	P10V_BUILTIN_VMULESD, P10V_BUILTIN_VMULEUD,
+ 	P10V_BUILTIN_VMULOSD, P10V_BUILTIN_VMULOUD,
+ 	P10V_BUILTIN_VNOR_V1TI, P10V_BUILTIN_VNOR_V1TI_UNS,
+ 	P10V_BUILTIN_VRLQ, P10V_BUILTIN_VRLQMI,
+ 	P10V_BUILTIN_VRLQNM, P10V_BUILTIN_VSLQ,
+ 	P10V_BUILTIN_VSRQ, P10V_BUILTIN_VSRAQ,
+ 	P10V_BUILTIN_VCMPGTUT_P, P10V_BUILTIN_VCMPGTST_P,
+ 	P10V_BUILTIN_VCMPEQUT_P, P10V_BUILTIN_VCMPGTUT_P,
+ 	P10V_BUILTIN_VCMPGTST_P, P10V_BUILTIN_CMPNET,
+ 	P10V_BUILTIN_VCMPNET_P, P10V_BUILTIN_VCMPAET_P,
+ 	P10V_BUILTIN_DIVES_V1TI, P10V_BUILTIN_MODS_V1TI,
+ 	P10V_BUILTIN_MODU_V1TI):
+ 	New overloaded definitions.
+ 	(rs6000_gimple_fold_builtin) [P10V_BUILTIN_VCMPEQUT,
+ 	P10V_BUILTIN_CMPNET, P10V_BUILTIN_CMPGE_1TI,
+ 	P10V_BUILTIN_CMPGE_U1TI, P10V_BUILTIN_VCMPGTUT,
+ 	P10V_BUILTIN_VCMPGTST, P10V_BUILTIN_CMPLE_1TI,
+ 	P10V_BUILTIN_CMPLE_U1TI]: New case statements.
+ 	(rs6000_init_builtins) [bool_V1TI_type_node, int_ftype_int_v1ti_v1ti]:
+ 	New assignments.
+ 	(altivec_init_builtins): New E_V1TImode case statement.
+ 	(builtin_function_type)[P10_BUILTIN_128BIT_VMULEUD,
+ 	P10_BUILTIN_128BIT_VMULOUD, P10_BUILTIN_128BIT_DIVEU_V1TI,
+ 	P10_BUILTIN_128BIT_MODU_V1TI, P10_BUILTIN_CMPGE_U1TI,
+ 	P10_BUILTIN_VCMPGTUT, P10_BUILTIN_VCMPEQUT]: New case statements.
+ 	* config/rs6000/rs6000.c (rs6000_handle_altivec_attribute) [E_TImode,
+ 	E_V1TImode]: New case statements.
+ 	* config/rs6000/rs6000.h (rs6000_builtin_type_index): New enum
+ 	value RS6000_BTI_bool_V1TI.
+ 	* config/rs6000/vector.md (vector_gtv1ti,vector_nltv1ti,
+ 	vector_gtuv1ti, vector_nltuv1ti, vector_ngtv1ti, vector_ngtuv1ti,
+ 	vector_eq_v1ti_p, vector_ne_v1ti_p, vector_ae_v1ti_p,
+ 	vector_gt_v1ti_p, vector_gtu_v1ti_p, vrotlv1ti3, vashlv1ti3,
+ 	vlshrv1ti3, vashrv1ti3): New define_expands.
+ 	* config/rs6000/vsx.md (UNSPEC_VSX_DIVSQ, UNSPEC_VSX_DIVUQ,
+ 	UNSPEC_VSX_DIVESQ, UNSPEC_VSX_DIVEUQ, UNSPEC_VSX_MODSQ,
+ 	UNSPEC_VSX_MODUQ): New unspecs.
+ 	(mulv2di3, vsx_div_v1ti, vsx_udiv_v1ti, vsx_dives_v1ti,
+ 	vsx_diveu_v1ti,	vsx_mods_v1ti, vsx_modu_v1ti, xxswapd_v1ti): New
+ 	define_insns.
+ 	(vcmpnet): New define_expand.
+ 	* doc/extend.texi: Add documentation for the new builtins vec_rl,
+ 	vec_rlmi, vec_rlnm, vec_sl, vec_sr, vec_sra, vec_mule, vec_mulo,
+ 	vec_div, vec_dive, vec_mod, vec_cmpeq, vec_cmpne, vec_cmpgt, vec_cmplt,
+ 	vec_cmpge, vec_cmple, vec_all_eq, vec_all_ne, vec_all_gt, vec_all_lt,
+ 	vec_all_ge, vec_all_le, vec_any_eq, vec_any_ne, vec_any_gt, vec_any_lt,
+ 	vec_any_ge, vec_any_le.
+ 
+ 2021-06-09  Carl Love  <cel@us.ibm.com>
+ 
+ 	* config/rs6000/altivec.md (altivec_vrl<VI_char>mi): Fix
+ 	bug in argument generation.
+ 
+ 2021-06-09  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/iterators.md (<supf>): Remove VCLZQ_U, VCLZQ_S.
+ 	(VCLZQ): Remove.
+ 	* config/arm/mve.md (mve_vclzq_<supf><mode>): Add '@' prefix,
+ 	remove <supf> iterator.
+ 	(mve_vclzq_u<mode>): New.
+ 	* config/arm/neon.md (clz<mode>2): Rename to neon_vclz<mode>.
+ 	(neon_vclz<mode): Move to ...
+ 	* config/arm/unspecs.md (VCLZQ_U, VCLZQ_S): Remove.
+ 	* config/arm/vec-common.md: ... here. Add support for MVE.
+ 
+ 2021-06-09  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/mve.md (mve_vhaddq_<supf><mode>): Prefix with '@'.
+ 	(@mve_vrhaddq_<supf><mode): Likewise.
+ 	* config/arm/neon.md (neon_v<r>hadd<sup><mode>): Likewise.
+ 	* config/arm/vec-common.md (avg<mode>3_floor, uavg<mode>3_floor)
+ 	(avg<mode>3_ceil", uavg<mode>3_ceil): New patterns.
+ 
+ 2021-06-09  imba-tjd  <109224573@qq.com>
+ 
+ 	* doc/invoke.texi: Fix typo.
+ 
+ 2021-06-09  Roger Sayle  <roger@nextmovesoftware.com>
+ 
+ 	PR middle-end/53267
+ 	* fold-const-call.c (fold_const_call_sss) [CASE_CFN_FMOD]:
+ 	Support evaluation of fmod/fmodf/fmodl at compile-time.
+ 
+ 2021-06-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100981
+ 	* tree-vect-loop.c (vect_create_epilog_for_reduction): Use
+ 	gimple_get_lhs to also handle calls.
+ 	* tree-vect-slp-patterns.c (complex_pattern::build): Transfer
+ 	reduction info.
+ 
+ 2021-06-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/97832
+ 	* tree-vectorizer.h (_slp_tree::failed): New.
+ 	* tree-vect-slp.c (_slp_tree::_slp_tree): Initialize
+ 	failed member.
+ 	(_slp_tree::~_slp_tree): Free failed.
+ 	(vect_build_slp_tree): Retain failed nodes and record
+ 	matches in them, copying that back out when running
+ 	into a cached fail.  Dump start and end of discovery.
+ 	(dt_sort_cmp): New.
+ 	(vect_build_slp_tree_2): Handle associatable chains
+ 	together doing more aggressive operand swapping.
+ 
+ 2021-06-09  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/100896
+ 	* config.gcc (gcc_cv_initfini_array): Set to yes for Linux and
+ 	GNU targets.
+ 	* doc/install.texi: Require glibc 2.1 and binutils 2.12 for
+ 	Linux and GNU targets.
+ 
+ 2021-06-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-stmts.c (vect_is_simple_use): Always get dt
+ 	from the stmt.
+ 
+ 2021-06-09  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/arc.md (loop_end): Change it to
+ 	define_insn_and_split.
+ 
+ 2021-06-09  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/arc.md (maddhisi4): Use VMAC2H instruction.
+ 	(machi): New pattern.
+ 	(umaddhisi4): Use VMAC2HU instruction.
+ 	(umachi): New pattern.
+ 
+ 2021-06-09  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/arc-protos.h (arc_split_move_p): New prototype.
+ 	* config/arc/arc.c (arc_split_move_p): New function.
+ 	(arc_split_move): Clean up.
+ 	* config/arc/arc.md (movdi_insn): Clean up, use arc_split_move_p.
+ 	(movdf_insn): Likewise.
+ 	* config/arc/simdext.md (mov<VWH>_insn): Likewise.
+ 
+ 2021-06-09  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100936
+ 	* config/i386/i386.c (print_operand_address_as): Rename "no_rip"
+ 	argument to "raw".  Do not emit segment overrides when "raw" is true.
+ 
+ 2021-06-09  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/gcov.texi: Create a proper JSON files.
+ 	* doc/invoke.texi: Remove dots in order to make it a valid
+ 	JSON object.
+ 
+ 2021-06-09  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-p8swap.c (pattern_is_rotate64): New.
+ 	(insn_is_load_p): Use pattern_is_rotate64.
+ 	(insn_is_swap_p): Likewise.
+ 	(quad_aligned_load_p): Likewise.
+ 	(const_load_sequence_p): Likewise.
+ 	(replace_swapped_aligned_load): Likewise.
+ 	(recombine_lvx_pattern): Likewise.
+ 	(recombine_stvx_pattern): Likewise.
+ 
+ 2021-06-09  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-gori.cc (gori_compute::outgoing_edge_range_p): Use a
+ 	fur_stmt source record.
+ 	* gimple-range.cc (fur_source::get_operand): Generic range query.
+ 	(fur_source::get_phi_operand): New.
+ 	(fur_source::register_dependency): New.
+ 	(fur_source::query): New.
+ 	(class fur_edge): New.  Edge source for operands.
+ 	(fur_edge::fur_edge): New.
+ 	(fur_edge::get_operand): New.
+ 	(fur_edge::get_phi_operand): New.
+ 	(fur_edge::query): New.
+ 	(fur_stmt::fur_stmt): New.
+ 	(fur_stmt::get_operand): New.
+ 	(fur_stmt::get_phi_operand): New.
+ 	(fur_stmt::query): New.
+ 	(class fur_depend): New.  Statement source and process dependencies.
+ 	(fur_depend::fur_depend): New.
+ 	(fur_depend::register_dependency): New.
+ 	(class fur_list): New.  List source for operands.
+ 	(fur_list::fur_list): New.
+ 	(fur_list::get_operand): New.
+ 	(fur_list::get_phi_operand): New.
+ 	(fold_range): New.  Instantiate appropriate fur_source class and fold.
+ 	(fold_using_range::range_of_range_op): Use new API.
+ 	(fold_using_range::range_of_address): Ditto.
+ 	(fold_using_range::range_of_phi): Ditto.
+ 	(imple_ranger::fold_range_internal): Use fur_depend class.
+ 	(fold_using_range::range_of_ssa_name_with_loop_info): Use new API.
+ 	* gimple-range.h (class fur_source): Now a base class.
+ 	(class fur_stmt): New.
+ 	(fold_range): New prototypes.
+ 	(fur_source::fur_source): Delete.
+ 
+ 2021-06-08  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/25290
+ 	* tree-ssa-phiopt.c (xor_replacement): Delete.
+ 	(tree_ssa_phiopt_worker): Delete use of xor_replacement.
+ 	(match_simplify_replacement): Allow one cheap preparation
+ 	statement that can be moved to before the if.
+ 
+ 2021-06-08  Pat Haugen  <pthaugen@linux.ibm.com>
+ 
+ 	* config/rs6000/power10.md (power10-fused-load, power10-fused-store,
+ 	power10-fused_alu, power10-fused-vec, power10-fused-branch): New.
+ 
+ 2021-06-08  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/logical.md (andqi3_1): Move BCLR case into define_insn_and_split.
+ 	Create length attribute on define_insn_and_split.  Only split for cases which we
+ 	know will use AND.
+ 	(andqi3_1<cczn>): Renamed from andqi3_1_clobber_flags.  Only handle AND here and
+ 	fix length computation.
+ 	(b<code><mode>msx): Combine QImode and HImode H8/SX patterns using iterator.
+ 
+ 2021-06-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100923
+ 	* tree-ssa-sccvn.c (valueize_refs_1): Take a pointer to
+ 	the operand vector to be valueized.
+ 	(valueize_refs): Likewise.
+ 	(valueize_shared_reference_ops_from_ref): Adjust.
+ 	(valueize_shared_reference_ops_from_call): Likewise.
+ 	(vn_reference_lookup_3): Likewise.
+ 	(vn_reference_lookup_pieces): Likewise.  Re-valueize
+ 	with honoring availability when we are about to create
+ 	the ao_ref and valueized before.
+ 	(vn_reference_lookup): Likewise.
+ 	(vn_reference_insert_pieces): Adjust.
+ 
+ 2021-06-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vectorizer.h (_slp_instance::root_stmt): Change to...
+ 	(_slp_instance::root_stmts): ... a vector.
+ 	(SLP_INSTANCE_ROOT_STMT): Rename to ...
+ 	(SLP_INSTANCE_ROOT_STMTS): ... this.
+ 	(slp_root::root): Change to...
+ 	(slp_root::roots): ... a vector.
+ 	(slp_root::slp_root): Adjust.
+ 	* tree-vect-slp.c (_slp_instance::location): Adjust.
+ 	(vect_free_slp_instance): Release the root stmt vector.
+ 	(vect_build_slp_instance): Adjust.
+ 	(vect_analyze_slp): Likewise.
+ 	(_bb_vec_info::~_bb_vec_info): Likewise.
+ 	(vect_slp_analyze_operations): Likewise.
+ 	(vect_bb_vectorization_profitable_p): Likewise.  Adjust
+ 	costs for the root stmt.
+ 	(vect_slp_check_for_constructors): Gather all BIT_INSERT_EXPRs
+ 	as root stmts.
+ 	(vect_slp_analyze_bb_1): Simplify by marking all root stmts
+ 	as pure_slp.
+ 	(vectorize_slp_instance_root_stmt): Adjust.
+ 	(vect_schedule_slp): Likewise.
+ 
+ 2021-06-08  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-ssa-evrp.c (class ssa_equiv_stack): New.
+ 	(ssa_equiv_stack::ssa_equiv_stack): New.
+ 	(ssa_equiv_stack::~ssa_equiv_stack): New.
+ 	(ssa_equiv_stack::enter): New.
+ 	(ssa_equiv_stack::leave): New.
+ 	(ssa_equiv_stack::push_replacement): New.
+ 	(ssa_equiv_stack::get_replacement): New.
+ 	(is_pointer_ssa): New.
+ 	(class pointer_equiv_analyzer): New.
+ 	(pointer_equiv_analyzer::pointer_equiv_analyzer): New.
+ 	(pointer_equiv_analyzer::~pointer_equiv_analyzer): New.
+ 	(pointer_equiv_analyzer::set_global_equiv): New.
+ 	(pointer_equiv_analyzer::set_cond_equiv): New.
+ 	(pointer_equiv_analyzer::get_equiv): New.
+ 	(pointer_equiv_analyzer::enter): New.
+ 	(pointer_equiv_analyzer::leave): New.
+ 	(pointer_equiv_analyzer::get_equiv_expr): New.
+ 	(pta_valueize): New.
+ 	(pointer_equiv_analyzer::visit_stmt): New.
+ 	(pointer_equiv_analyzer::visit_edge): New.
+ 	(hybrid_folder::value_of_expr): Call PTA.
+ 	(hybrid_folder::value_on_edge): Same.
+ 	(hybrid_folder::pre_fold_bb): New.
+ 	(hybrid_folder::post_fold_bb): New.
+ 	(hybrid_folder::pre_fold_stmt): New.
+ 	(rvrp_folder::pre_fold_bb): New.
+ 	(rvrp_folder::post_fold_bb): New.
+ 	(rvrp_folder::pre_fold_stmt): New.
+ 	(rvrp_folder::value_of_expr): Call PTA.
+ 	(rvrp_folder::value_on_edge): Same.
+ 
+ 2021-06-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/100957
+ 	* tree-inline.c (copy_tree_body_r): For OMP_CLAUSE_DEPEND don't
+ 	check TREE_CODE if OMP_CLAUSE_DECL is NULL.
+ 
+ 2021-06-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/100951
+ 	* tree-vect-generic.c (expand_vector_piecewise): Build a
+ 	VECTOR_CST if all elements are constant.
+ 	(expand_vector_condition): Likewise.
+ 	(lower_vec_perm): Likewise.
+ 	(expand_vector_conversion): Likewise.
+ 
+ 2021-06-08  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Document new param evrp-sparse-threshold.
+ 
+ 2021-06-08  Martin Liska  <mliska@suse.cz>
+ 
+ 	* genautomata.c (create_automata): Fix typo.
+ 
+ 2021-06-08  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR tree-optimization/100794
+ 	* tree-predcom.c (tree_predictive_commoning_loop): Add parameter
+ 	allow_unroll_p and only allow unrolling when it's true.
+ 	(tree_predictive_commoning): Add parameter allow_unroll_p and
+ 	adjust for it.
+ 	(run_tree_predictive_commoning): Likewise.
+ 	(pass_predcom::gate): Check flag_tree_loop_vectorize and
+ 	global_options_set.x_flag_predictive_commoning.
+ 	(pass_predcom::execute): Adjust for allow_unroll_p.
+ 
+ 2021-06-08  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* tree-predcom.c (execute_pred_commoning): Remove update_ssa call.
+ 	(tree_predictive_commoning_loop): Factor some cleanup stuffs into
+ 	lambda function cleanup, remove scev_reset call, and adjust return
+ 	value.
+ 	(tree_predictive_commoning): Adjust for different changed values,
+ 	only set flag TODO_update_ssa_only_virtuals if changed.
+ 	(pass_data pass_data_predcom): Remove TODO_update_ssa_only_virtuals
+ 	from todo_flags_finish.
+ 
+ 2021-06-07  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (class sbr_sparse_bitmap): New.
+ 	(sbr_sparse_bitmap::sbr_sparse_bitmap): New.
+ 	(sbr_sparse_bitmap::bitmap_set_quad): New.
+ 	(sbr_sparse_bitmap::bitmap_get_quad): New.
+ 	(sbr_sparse_bitmap::set_bb_range): New.
+ 	(sbr_sparse_bitmap::get_bb_range): New.
+ 	(sbr_sparse_bitmap::bb_range_p): New.
+ 	(block_range_cache::block_range_cache): initialize bitmap obstack.
+ 	(block_range_cache::~block_range_cache): Destruct obstack.
+ 	(block_range_cache::set_bb_range): Decide when to utilze the
+ 	sparse on entry cache.
+ 	* gimple-range-cache.h (block_range_cache): Add bitmap obstack.
+ 	* params.opt (-param=evrp-sparse-threshold): New.
+ 
+ 2021-06-07  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* bitmap.c (bitmap_set_aligned_chunk): New.
+ 	(bitmap_get_aligned_chunk): New.
+ 	(test_aligned_chunk): New.
+ 	(bitmap_c_tests): Call test_aligned_chunk.
+ 	* bitmap.h (bitmap_set_aligned_chunk, bitmap_get_aligned_chunk): New.
+ 
+ 2021-06-07  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100637
+ 	* config/i386/i386-expand.c (ix86_expand_vector_init_duplicate):
+ 	Handle V4QI mode.
+ 	(ix86_expand_vector_init_one_nonzero): Ditto.
+ 	(ix86_expand_vector_init_one_var): Ditto.
+ 	(ix86_expand_vector_init_general): Ditto.
+ 	* config/i386/mmx.md (vec_initv4qiqi): New expander.
+ 
+ 2021-06-07  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/movepush.md: Change most _clobber_flags
+ 	patterns to instead use <cczn> subst.
+ 	(movsi_cczn): New pattern with usable CC cases split out.
+ 	(movsi_h8sx_cczn): Likewise.
+ 
+ 2021-06-07  Martin Liska  <mliska@suse.cz>
+ 
+ 	* common/common-target.def: Split long lines and replace them
+ 	with '\n\'.
+ 	* target.def: Likewise.
+ 	* doc/tm.texi: Re-generated.
+ 
+ 2021-06-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/100887
+ 	* fold-const.c (fold_read_from_vector): Return NULL if trying to
+ 	read from a CONSTRUCTOR with vector type elements.
+ 
+ 2021-06-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/100898
+ 	* tree-inline.c (copy_bb): Only use gimple_call_arg_ptr if memcpy
+ 	should copy any arguments.  Don't call gimple_call_num_args
+ 	on id->call_stmt or call_stmt more than once.
+ 
+ 2021-06-07  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/100885
+ 	* config/i386/sse.md (*sse4_1_zero_extendv8qiv8hi2_3): Refine
+ 	constraints.
+ 	(<insn>v4siv4di2): Delete constraints for define_expand.
+ 
+ 2021-06-07  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/82735
+ 	* config/i386/i386-expand.c (ix86_expand_builtin): Remove
+ 	assignment of cfun->machine->has_explicit_vzeroupper.
+ 	* config/i386/i386-features.c
+ 	(ix86_add_reg_usage_to_vzerouppers): Delete.
+ 	(ix86_add_reg_usage_to_vzeroupper): Ditto.
+ 	(rest_of_handle_insert_vzeroupper): Remove
+ 	ix86_add_reg_usage_to_vzerouppers, add df_analyze at the end
+ 	of the function.
+ 	(gate): Remove cfun->machine->has_explicit_vzeroupper.
+ 	* config/i386/i386-protos.h (ix86_expand_avx_vzeroupper):
+ 	Declared.
+ 	* config/i386/i386.c (ix86_insn_callee_abi): New function.
+ 	(ix86_initialize_callee_abi): Ditto.
+ 	(ix86_expand_avx_vzeroupper): Ditto.
+ 	(ix86_hard_regno_call_part_clobbered): Adjust for vzeroupper
+ 	ABI.
+ 	(TARGET_INSN_CALLEE_ABI): Define as ix86_insn_callee_abi.
+ 	(ix86_emit_mode_set): Call ix86_expand_avx_vzeroupper
+ 	directly.
+ 	* config/i386/i386.h (struct GTY(()) machine_function): Delete
+ 	has_explicit_vzeroupper.
+ 	* config/i386/i386.md (enum unspec): New member
+ 	UNSPEC_CALLEE_ABI.
+ 	(ABI_DEFAULT,ABI_VZEROUPPER,ABI_UNKNOWN): New
+ 	define_constants for insn callee abi index.
+ 	* config/i386/predicates.md (vzeroupper_pattern): Adjust.
+ 	* config/i386/sse.md (UNSPECV_VZEROUPPER): Deleted.
+ 	(avx_vzeroupper): Call ix86_expand_avx_vzeroupper.
+ 	(*avx_vzeroupper): Rename to ..
+ 	(avx_vzeroupper_callee_abi): .. this, and adjust pattern as
+ 	call_insn which has a special vzeroupper ABI.
+ 	(*avx_vzeroupper_1): Deleted.
+ 
+ 2021-06-07  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/82735
+ 	* df-scan.c (df_get_call_refs): When call_insn is a fake call,
+ 	it won't use stack pointer reg.
+ 	* final.c (leaf_function_p): When call_insn is a fake call, it
+ 	won't affect caller as a leaf function.
+ 	* reg-stack.c (callee_clobbers_any_stack_reg): New.
+ 	(subst_stack_regs): When call_insn doesn't clobber any stack
+ 	reg, don't clear the arguments.
+ 	* rtl.c (shallow_copy_rtx): Don't clear flag used when orig is
+ 	a insn.
+ 	* shrink-wrap.c (requires_stack_frame_p): No need for stack
+ 	frame for a fake call.
+ 	* rtl.h (FAKE_CALL_P): New macro.
+ 
+ 2021-06-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* config/sparc/sparc-protos.h (order_regs_for_local_alloc): Rename
+ 	to...
+ 	(sparc_order_regs_for_local_alloc): ...this.
+ 	(sparc_leaf_reg_remap): Declare.
+ 	* config/sparc/sparc.h (ADJUST_REG_ALLOC_ORDER): Adjust.
+ 	(LEAF_REG_REMAP): Reimplement as call to sparc_leaf_reg_remap.
+ 	* config/sparc/sparc.c (leaf_reg_remap): Delete.
+ 	(order_regs_for_local_alloc): Rename to...
+ 	(sparc_order_regs_for_local_alloc): ...this.
+ 	(sparc_leaf_reg_remap): New function.
+ 	(sparc_conditional_register_usage): Do not modify leaf_reg_remap.
+ 
+ 2021-06-06  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_xcoff_asm_output_aligned_decl_common):
+ 	Use assemble_name to output BSS section name.
+ 
+ 2021-06-06  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/constraints.md (Bs):
+ 	Remove boolean operators from match_test RTX.
+ 	(Bw): Ditto.
+ 	(L): Ditto.
+ 	(M): Use "mode" variable instead of GET_MODE (op) in match_test RTX.
+ 	(Wz): Ditto.
+ 
+ 2021-06-06  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/extend.texi: Add missing @headitem.
+ 	* doc/invoke.texi: Likewise.
+ 	* doc/objc.texi: Likewise.
+ 
+ 2021-06-06  Martin Liska  <mliska@suse.cz>
+ 
+ 	* genhooks.c (emit_findices): Remove unused function.
+ 	(emit_documentation): Do not call emit_findices
+ 	and do not search for @Fcode directives.
+ 
+ 2021-06-06  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Remove extra character.
+ 
+ 2021-06-05  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/sh/sh.md (doloop_end_split): Fix empty split condition.
+ 
+ 2021-06-05  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/sparc/sparc.md (*snedi<W:mode>_zero_vis3,
+ 	*neg_snedi<W:mode>_zero_subxc, *plus_snedi<W:mode>_zero,
+ 	*plus_plus_snedi<W:mode>_zero, *minus_snedi<W:mode>_zero,
+ 	*minus_minus_snedi<W:mode>_zero): Fix empty split condition.
+ 
+ 2021-06-05  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/or1k/or1k.md (*movdi): Fix empty split condition.
+ 
+ 2021-06-05  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/mips/mips.md (<anonymous>, bswapsi2, bswapdi2): Fix empty
+ 	split condition.
+ 
+ 2021-06-05  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/m68k/m68k.md (*zero_extend_inc, *zero_extend_dec,
+ 	*zero_extendsidi2): Fix empty split condition.
+ 
+ 2021-06-05  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/addsub.md: Fix split condition in define_insn_and_split
+ 	patterns.
+ 	* config/h8300/bitfield.md: Likewise.
+ 	* config/h8300/combiner.md: Likewise.
+ 	* config/h8300/divmod.md: Likewise.
+ 	* config/h8300/extensions.md: Likewise.
+ 	* config/h8300/jumpcall.md: Likewise.
+ 	* config/h8300/movepush.md: Likewise.
+ 	* config/h8300/multiply.md: Likewise.
+ 	* config/h8300/other.md: Likewise.
+ 	* config/h8300/shiftrotate.md: Likewise.
+ 	* config/h8300/logical.md: Likewise.  Fix split pattern to use
+ 	code iterator that somehow slipped through.
+ 
+ 2021-06-04  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	PR middle-end/100905
+ 	* tree-nested.c (convert_nonlocal_omp_clauses,
+ 	convert_local_omp_clauses): Handle OMP_CLAUSE_BIND.
+ 
+ 2021-06-04  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/100732
+ 	* gimple-fold.c (gimple_fold_builtin_sprintf): Avoid folding calls
+ 	with either source or destination argument of invalid type.
+ 	* tree-ssa-uninit.c (maybe_warn_pass_by_reference): Avoid checking
+ 	calls with arguments of invalid type.
+ 
+ 2021-06-04  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* attribs.c (init_attr_rdwr_indices): Use VLA bounds in the expected
+ 	order.
+ 	(attr_access::vla_bounds): Also handle VLA bounds.
+ 
+ 2021-06-04  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/predicates.md (GOT_memory_operand):
+ 	Implement using match_code RTXes.
+ 	(GOT32_symbol_operand): Ditto.
+ 
+ 2021-06-04  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100637
+ 	* config/i386/i386-expand.c (ix86_expand_vector_init_duplicate):
+ 	Handle V2HI mode.
+ 	(ix86_expand_vector_init_general): Ditto.
+ 	Use SImode instead of word_mode for logic operations
+ 	when GET_MODE_SIZE (mode) < UNITS_PER_WORD.
+ 	(expand_vec_perm_even_odd_1): Assert that V2HI mode should be
+ 	implemented by expand_vec_perm_1.
+ 	(expand_vec_perm_broadcast_1): Assert that V2HI and V4HI modes
+ 	should be implemented using standard shuffle patterns.
+ 	(ix86_vectorize_vec_perm_const): Handle V2HImode.  Add V4HI and
+ 	V2HI modes to modes, implementable with shuffle for one operand.
+ 	* config/i386/mmx.md (*punpckwd): New insn_and_split pattern.
+ 	(*pshufw_1): New insn pattern.
+ 	(*vec_dupv2hi): Ditto.
+ 	(vec_initv2hihi): New expander.
+ 
+ 2021-06-04  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/arm/vfp.md (no_literal_pool_df_immediate,
+ 	no_literal_pool_sf_immediate): Fix empty split condition.
+ 
+ 2021-06-04  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/i386/i386.md (*load_tp_x32_zext, *add_tp_x32_zext,
+ 	*tls_dynamic_gnu2_combine_32): Fix empty split condition.
+ 	* config/i386/sse.md (*<sse2_avx2>_pmovmskb_lt,
+ 	*<sse2_avx2>_pmovmskb_zext_lt, *sse2_pmovmskb_ext_lt,
+ 	*<sse4_1_avx2>_pblendvb_lt): Likewise.
+ 
+ 2021-06-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/100887
+ 	* config/i386/i386-expand.c (ix86_expand_vector_init): Handle
+ 	concatenation from half-sized modes with TImode elements.
+ 
+ 2021-06-04  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/arc.c (arc_override_options): Disable millicode
+ 	thunks when RF16 is on.
+ 
+ 2021-06-04  Haochen Gui  <guihaoc@gcc.gnu.org>
+ 
+ 	* config/rs6000/rs6000.h (PROMOTE_MODE): Remove.
+ 
+ 2021-06-04  Haochen Gui  <guihaoc@gcc.gnu.org>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_promote_function_mode):
+ 	Replace PROMOTE_MODE marco with its content.
+ 
+ 2021-06-03  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/cris/cris.md (*addi_reload): Fix empty split condition.
+ 
+ 2021-06-03  Jim Wilson  <jimw@sifive.com>
+ 
+ 	* config.gcc (riscv*-*-*): If --with-riscv-attribute not used,
+ 	turn it on for all riscv targets.
+ 
+ 2021-06-03  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100637
+ 	* config/i386/i386-expand.c (ix86_expand_vector_set):
+ 	Handle V2HI and V4QI modes.
+ 	(ix86_expand_vector_extract): Ditto.
+ 	* config/i386/mmx.md (*pinsrw): New insn pattern.
+ 	(*pinsrb): Ditto.
+ 	(*pextrw): Ditto.
+ 	(*pextrw_zext): Ditto.
+ 	(*pextrb): Ditto.
+ 	(*pextrb_zext): Ditto.
+ 	(vec_setv2hi): New expander.
+ 	(vec_extractv2hihi): Ditto.
+ 	(vec_setv4qi): Ditto.
+ 	(vec_extractv4qiqi): Ditto.
+ 	(vec_setv8qi): Enable only for TARGET_SSE4_1.
+ 	(vec_extractv8qiqi): Ditto.
+ 
+ 2021-06-03  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config/rs6000/genfusion.pl (gen_logical_addsubf): Fix input
+ 	order to subf instruction.
+ 	* config/rs6000/fusion.md: Regenerate.
+ 
+ 2021-06-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* calls.c (get_size_range): Use range_of_expr instead of
+ 	determine_value_range.
+ 	* tree-affine.c (expr_to_aff_combination): Same.
+ 	* tree-data-ref.c (split_constant_offset): Same.
+ 	* tree-vrp.c (determine_value_range_1): Remove.
+ 	(determine_value_range): Remove.
+ 	* tree-vrp.h (determine_value_range): Remove.
+ 
+ 2021-06-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* function-tests.c (test_ranges): Call gimple_range_tests.
+ 	* gimple-range-cache.cc (ranger_cache::range_of_expr): Pass stmt
+ 	to get_tree_range.
+ 	* gimple-range.cc (fur_source::get_operand): Do not call
+ 	get_tree_range or gimple_range_global.
+ 	get_tree_range.
+ 	(get_tree_range): Move to value-query.cc.
+ 	Call get_arith_expr_range.
+ 	(gimple_ranger::range_of_expr): Add argument to get_tree_range.
+ 	Include gimple-range-tests.cc.
+ 	* gimple-range.h (fold_range): Add argument.
+ 	(get_tree_range): Remove.
+ 	* selftest.h (gimple_range_tests): New.
+ 	* value-query.cc (global_range_query::range_of_expr): Add
+ 	stmt argument.
+ 	(range_query::get_tree_range): Move from gimple-range.cc.
+ 	* value-query.h (class range_query): Add get_tree_range and
+ 	get_arith_expr_range.  Make fur_source a friend.
+ 	* vr-values.c (vr_values::range_of_expr): Pass stmt to
+ 	get_tree_range.
+ 	* gimple-range-tests.cc: New file.
+ 
+ 2021-06-03  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range.cc (gimple_ranger::export_global_ranges): Call
+ 	  update_global_range.
+ 	* value-query.cc (update_global_range): New.
+ 	* value-query.h (update_global_range): New.
+ 
+ 2021-06-03  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* diagnostic-show-locus.c (diagnostic_show_locus): Don't reject
+ 	printing the same location twice if there are fix-it hints,
+ 	multiple locations, or a label.
+ 
+ 2021-06-03  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	* tree-vect-loop.c (vect_transform_loop): Use main loop's various'
+ 	thresholds to narrow the upper bound on epilogue iterations.
+ 
+ 2021-06-03  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/mve.md (mve_vabsq_f<mode>): Use 'abs' instead of unspec.
+ 	(mve_vabsq_s<mode>): Likewise.
+ 	* config/arm/neon.md (abs<mode>2): Rename to neon_abs<mode>2.
+ 	* config/arm/unspecs.md (VABSQ_F, VABSQ_S): Delete.
+ 	* config/arm/vec-common.md (neg<mode>2): Rename to
+ 	<absneg_str><mode>2.
+ 
+ 2021-06-03  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* common/config/arc/arc-common.c (arc_option_optimization_table):
+ 	Remove malign-call.
+ 	* config/arc/arc.c (arc_unalign_branch_p): Remove unused function.
+ 	* config/arc/arc.h (TARGET_MIXED_CODE): Remove macro.
+ 	(INDEX_REG_CLASS): Only refer to GENERAL_REGS.
+ 	* config/arc/arc.md (abssi2_mixed): Remove pattern.
+ 	* config/arc/arc.opt (munalign-prob-threshold): Mark it obsolete.
+ 	(malign-call): Likewise.
+ 	(mmixed-code): Likewise.
+ 	* doc/invoke.texi (ARC): Update doc.
+ 
+ 2021-06-03  Martin Liska  <mliska@suse.cz>
+ 
+ 	* common.opt: Use proper Enum values.
+ 	* opts.c (COVERAGE_SANITIZER_OPT): Remove.
+ 	(parse_sanitizer_options): Handle only sanitizer_opts.
+ 	(common_handle_option): Just assign value.
+ 
+ 2021-06-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ipa/99122
+ 	* tree-inline.c (inline_forbidden_p): Remove test on return type.
+ 
+ 2021-06-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* dwarf2out.c (loc_list_from_tree_1) <FUNCTION_DECL>: Also generate
+ 	DW_OP_GNU_variable_value referencing an existing DIE at file scope.
+ 	(type_byte_size): Inline into...
+ 	(add_byte_size_attribute): ...this and call add_scalar_info.
+ 
+ 2021-06-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* dwarf2out.c (mem_loc_descriptor) <UDIV>: Fix typo.
+ 	(typed_binop_from_tree): New function.
+ 	(loc_list_from_tree_1) <EXACT_DIV_EXPR>: For an unsigned type,
+ 	turn a divide by a power of 2 into a shift.
+ 	<CEIL_DIV_EXPR>: For an unsigned type, use a signed divide if the
+ 	size of the mode is lower than DWARF2_ADDR_SIZE; otherwise, do a
+ 	typed divide by calling typed_binop_from_tree.
+ 
+ 2021-06-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* dwarf2out.c (scompare_loc_descriptor): Fix head comment.
+ 	(is_handled_procedure_type): Likewise.
+ 	(struct loc_descr_context): Add strict_signedness field.
+ 	(resolve_args_picking_1): Deal with DW_OP_[GNU_]deref_type,
+ 	DW_OP_[GNU_]convert and DW_OP_[GNU_]reinterpret.
+ 	(resolve_args_picking): Minor tweak.
+ 	(function_to_dwarf_procedure): Initialize strict_signedness field.
+ 	(type_byte_size): Likewise.
+ 	(field_byte_offset): Likewise.
+ 	(gen_descr_array_type_die): Likewise.
+ 	(gen_variant_part): Likewise.
+ 	(loc_list_from_tree_1) <CALL_EXPR>: Tidy up and set strict_signedness
+ 	to true when a context is present before evaluating the arguments.
+ 	<COND_EXPR>: Do not generate a useless comparison with zero.
+ 	When dereferencing an address, if strict_signedness is true and the
+ 	type is small and signed, use DW_OP_deref_type to do the dereference
+ 	and then DW_OP_convert to convert back to the generic type.
+ 
+ 2021-06-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/100859
+ 	* tree-inline.c (copy_tree_body_r): Handle iterators on
+ 	OMP_CLAUSE_AFFINITY or OMP_CLAUSE_DEPEND.
+ 
+ 2021-06-03  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/arc/arc.md (*bbit_di): Remove.
+ 
+ 2021-06-02  Christoph Muellner  <cmuellner@gcc.gnu.org>
+ 
+ 	PR rtl-optimization/100264
+ 	* ree.c (get_sub_rtx): Ignore SET expressions without register
+ 	destinations and remove assertion, as it is not valid anymore
+ 	with this new behaviour.
+ 	(merge_def_and_ext): Eliminate destination check for register
+ 	as such SET expressions can't occur anymore.
+ 	(combine_reaching_defs): Likewise.
+ 
+ 2021-06-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/100841
+ 	* config/xtensa/xtensa.h (LEAF_REG_REMAP): Cast REGNO to int to avoid
+ 	-Wtype-limits warnings.
+ 	(DWARF_FRAME_REGISTER): Rewrite into ternary operator with addition
+ 	in operands to avoid -Wsign-compare warnings.
+ 
+ 2021-06-02  Pat Haugen  <pthaugen@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-logue.c (rs6000_emit_prologue): Use
+ 	gen_frame_store.
+ 
+ 2021-06-02  Vineet Gupta  <vgupta@synopsys.com>
+ 
+ 	* config/arc/arc.h (TARGET_CPU_DEFAULT): Change to hs38_linux.
+ 
+ 2021-06-02  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* config/s390/s390.md(*ashrdi3_31<setcc><cconly>): Use a single
+ 	constraint.
+ 	* config/s390/subst.md(cconly_subst): Use a single constraint
+ 	in (match_scratch).
+ 
+ 2021-06-02  Martin Liska  <mliska@suse.cz>
+ 
+ 	* ipa-icf.h: Use auto_vec for memory_access_types.
+ 
+ 2021-06-02  Jeff Law  <jeffreyalaw@gmail.com>
+ 
+ 	* config/h8300/h8300-protos.h (compute_a_shift_length): Drop unused
+ 	argument from prototype.
+ 	(output_logical_op): Add rtx_code argument.
+ 	(compute_logical_op_length): Likewise.
+ 	* config/h8300/h8300.c (h8300_and_costs): Pass additional argument
+ 	to compute_a_shift_length.
+ 	(output_logical_op); New argument with the rtx code rather than
+ 	extracting it from an operand.  Handle QImode too.
+ 	(compute_logical_op_length): Similary.
+ 	(compute_a_shift_length): Drop unused argument.
+ 	* config/h8300/h8300.md (logicals): New code iterator.
+ 	* config/h8300/logical.md (<code><mode>3 expander): Combine
+ 	the "and" expander with the "ior"/"xor" expander.
+ 	(bclr<mode>msx): Combine the QI/HI mode patterns.
+ 	(<logical><mode>3 insns): Use code iterator rather than match_operator.
+ 	Handle QImode as well.   Update call to output_logical_op and
+ 	compute_logical_op_length to pass in rtx_code
+ 	Fix split condition on all define_insn_and_split patterns.
+ 	(one_cmpl<mode>2<cczn>): Use <cczn> to support both clobbering
+ 	the flags and setting ZN via existing define_subst.
+ 	* config/h8300/shiftrotate.md: Drop unused argument from
+ 	calls to compute_a_shift_length.
+ 	Signed-off-by: Jeff Law <jeffreyalaw@gmail.com>
+ 
+ 2021-06-01  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/25290
+ 	* tree-ssa-phiopt.c (match_simplify_replacement):
+ 	New function.
+ 	(tree_ssa_phiopt_worker): Use match_simplify_replacement.
+ 	(two_value_replacement): Change the comment about
+ 	conditional_replacement.
+ 	(conditional_replacement): Delete.
+ 
+ 2021-06-01  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	PR tree-optimization/95481
+ 	* tree-tailcall.c (find_tail_calls): Handle empty typed
+ 	return decls.
+ 
+ 2021-06-01  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* gimplify.c (zero_sized_field_decl): Delete
+ 	(zero_sized_type): Delete
+ 	(gimplify_init_ctor_eval): Use is_empty_type instead
+ 	of zero_sized_field_decl.
+ 	(gimplify_modify_expr): Use is_empty_type instead of
+ 	zero_sized_type.
+ 
+ 2021-06-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/91859
+ 	* tree.h (CALL_FROM_NEW_OR_DELETE_P): Adjust comment.
+ 
+ 2021-06-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/94492
+ 	* diagnostic.h (warning_enabled_at): Declare.
+ 	* diagnostic.c (diagnostic_enabled): Factor out from...
+ 	(diagnostic_report_diagnostic): ...here.
+ 	(warning_enabled_at): New.
+ 
+ 2021-06-01  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-ssa-evrp.c: Enable exporting of global ranges.
+ 
+ 2021-06-01  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR other/100826
+ 	* doc/invoke.texi: Mention that -fgcse-after-reload
+ 	is enabled with -O3.
+ 
+ 2021-06-01  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR tree-optimization/98365
+ 	* tree-if-conv.c (strip_nop_cond_scalar_reduction): New function.
+ 	(is_cond_scalar_reduction): Handle nop_expr in cond scalar reduction.
+ 	(convert_scalar_cond_reduction): Ditto.
+ 	(predicate_scalar_phi): Ditto.
+ 
+ 2021-06-01  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/100781
+ 	* gimple-range-cache.cc (ranger_cache::ranger_cache): Enable new
+ 	value calculation by default.
+ 	(ranger_cache::enable_new_values): New.
+ 	(ranger_cache::disable_new_values): New.
+ 	(ranger_cache::push_poor_value): Check if new values are allowed.
+ 	* gimple-range-cache.h (class ranger_cache): New member/methods.
+ 	* gimple-range.cc (gimple_ranger::range_of_expr): Check for debug
+ 	statement, and disable/renable new value calculation.
+ 
+ 2021-06-01  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::ssa_range_in_bb): Delete.
+ 	(ranger_cache::range_of_def): New.
+ 	(ranger_cache::entry_range): New.
+ 	(ranger_cache::exit_range): New.
+ 	(ranger_cache::range_of_expr): Adjust.
+ 	(ranger_cache::range_on_edge): Adjust.
+ 	(ranger_cache::propagate_cache): Call exit_range directly.
+ 	* gimple-range-cache.h (class ranger_cache): Adjust.
+ 
+ 2021-06-01  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::ranger_cache): Adjust for
+ 	gori_compute being a member rather than base class.
+ 	dervied call to member call.
+ 	(ranger_cache::dump): No longer dump gori_map.
+ 	(ranger_cache::dump_bb): New.
+ 	(ranger_cache::get_non_stale_global_range): Adjust for gori_compute
+ 	being a member rather than base class.
+ 	(ranger_cache::set_global_range): Ditto.
+ 	(ranger_cache::ssa_range_in_bb): Ditto.
+ 	(ranger_cache::range_of_expr): New.
+ 	(ranger_cache::range_on_edge): New.
+ 	(ranger_cache::block_range): Adjust for gori_computes.  Debug changes.
+ 	(ranger_cache::propagate_cache):  Adjust debugging output.
+ 	(ranger_cache::fill_block_cache): Adjust for gori_computes.  Debug
+ 	output changes.
+ 	* gimple-range-cache.h (class ranger_cache): Make gori_compute a
+ 	member, and inherit from range_query instead.
+ 	(ranger_cache::dump_bb): New. split from dump.
+ 	* gimple-range-gori.cc (gori_compute::ssa_range_in_bb): Delete.
+ 	(gori_compute::expr_range_at_stmt): Delete.
+ 	(gori_compute::compute_name_range_op): Delete.
+ 	(gori_compute::compute_operand_range_switch): Add fur_source.
+ 	(gori_compute::compute_operand_range): Add fur_source param, inline
+ 	old compute_name_range_op and optimize_logical_operands.
+ 	(struct tf_range): Delete.
+ 	(gori_compute::logical_combine): Adjust
+ 	(gori_compute::optimize_logical_operands): Delete.
+ 	(gori_compute::compute_logical_operands_in_chain): Delete.
+ 	(gori_compute::compute_logical_operands): Adjust.
+ 	(gori_compute::compute_operand1_range): Adjust to fur_source.
+ 	(gori_compute::compute_operand2_range): Ditto.
+ 	(gori_compute::compute_operand1_and_operand2_range): Ditto.
+ 	(gori_compute::outgoing_edge_range_p): Add range_query parameter,
+ 	and adjust to fur_source.
+ 	* gimple-range-gori.h (class gori_compute): Simplify and adjust to
+ 	range_query and fur_source.
+ 	* gimple-range.cc (gimple_ranger::range_on_edge): Query range_on_edge
+ 	from the ranger_cache..
+ 	(gimple_ranger::fold_range_internal): Adjust to base class change of
+ 	ranger_cache.
+ 	(gimple_ranger::dump_bb): Adjust dump.
+ 	* gimple-range.h (gimple_ranger):export gori computes object.
+ 
+ 2021-06-01  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/100774
+ 	* gimple-range-cache.cc (ranger_cache::get_non_stale_global_range):
+ 	Constant values are also not stale.
+ 	(ranger_cache::set_global_range): Range invariant values should also
+ 	have the correct timestamp.
+ 
+ 2021-05-31  Martin Liska  <mliska@suse.cz>
+ 
+ 	* tree-streamer-in.c (unpack_ts_function_decl_value_fields):
+ 	Unpack FUNCTION_DECL_DECL_TYPE.
+ 	* tree-streamer-out.c (pack_ts_function_decl_value_fields):
+ 	Stream FUNCTION_DECL_DECL_TYPE instead of
+ 	DECL_IS_OPERATOR_NEW_P.
+ 	* tree.h (set_function_decl_type): Use FUNCTION_DECL_DECL_TYPE
+ 	macro.
+ 	(DECL_IS_OPERATOR_NEW_P): Likewise.
+ 	(DECL_IS_OPERATOR_DELETE_P): Likewise.
+ 	(DECL_LAMBDA_FUNCTION_P): Likewise.
+ 
+ 2021-05-31  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR c++/88601
+ 	* internal-fn.c (expand_SHUFFLEVECTOR): Define.
+ 	* internal-fn.def (SHUFFLEVECTOR): New.
+ 	* internal-fn.h (expand_SHUFFLEVECTOR): Declare.
+ 	* doc/extend.texi: Document __builtin_shufflevector.
+ 
+ 2021-05-31  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/99842
+ 	* config/rs6000/predicates.md(mma_assemble_input_operand): Allow
+ 	indexed form addresses.
+ 
+ 2021-05-29  Jeff Law  <jlaw@tachyum.com>
+ 
+ 	* config/h8300/h8300.c (h8300_emit_stack_adjustment): Drop unused
+ 	parameter.  Call callers fixed.
+ 	(push): Likewise.
+ 	(output_plussi): Add FALLTHRU markers.
+ 	(h8300_shift_needs_scratch_p): Add gcc_unreachable marker.
+ 
+ 2021-05-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/99928
+ 	* gimplify.c (gimplify_scan_omp_clauses): For taskloop simd
+ 	combined with parallel, make sure to add shared clause to
+ 	parallel for explicit linear clause.
+ 
+ 2021-05-29  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/100787
+ 	* gimple-ssa-evrp.c: Disable exporting of global ranges.
+ 
+ 2021-05-28  Jason Merrill  <jason@redhat.com>
+ 
+ 	* tree-iterator.h (struct tree_stmt_iterator): Add operator++,
+ 	operator--, operator*, operator==, and operator!=.
+ 	(class tsi_range): New.
+ 
+ 2021-05-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100778
+ 	* tree-vect-slp.c (vect_build_slp_tree_1): Prevent possibly
+ 	trapping ops in different BBs.
+ 
+ 2021-05-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/100791
+ 	* tree-inline.c (copy_bb): When processing __builtin_va_arg_pack
+ 	copy fntype from original call.
+ 
+ 2021-05-28  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR gcov-profile/100751
+ 	* doc/gcov.texi: Revert partially a hunk that was wrong.
+ 
+ 2021-05-28  Cooper Qu  <cooper.qu@linux.alibaba.com>
+ 
+ 	* config/csky/csky-linux-elf.h (HAVE_sync_compare_and_swapqi):
+ 	Defined.
+ 	(HAVE_sync_compare_and_swaphi): Likewise.
+ 	(HAVE_sync_compare_and_swapsi): Likewise.
+ 
+ 2021-05-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/99928
+ 	* tree.h (OMP_CLAUSE_MAP_IMPLICIT): Define.
+ 
+ 2021-05-28  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* gimplify.c (gimplify_omp_affinity): New.
+ 	(gimplify_scan_omp_clauses): Call it; remove affinity clause afterwards.
+ 	* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_AFFINITY.
+ 	* tree-pretty-print.c (dump_omp_clause): Handle OMP_CLAUSE_AFFINITY.
+ 	* tree.c (omp_clause_num_ops, omp_clause_code_name): Add clause.
+ 	(walk_tree_1): Handle OMP_CLAUSE_AFFINITY.
+ 
+ 2021-05-28  Joern Rennecke  <joern.rennecke@riscy-ip.com>
+ 	    Richard Biener   <rguenther@suse.de>
+ 
+ 	* match.pd <popcount & / + pattern matching>:
+ 	When generating popcount directly fails, try doing it in two halves.
+ 
+ 2021-05-28  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+ 
+ 	* Makefile.in (generated_files): Add gimple-match.c and
+ 	generic-match.c
+ 
+ 2021-05-28  Joern Rennecke  <joern.rennecke@embecosm.com>
+ 
+ 	* gensupport.c (alter_predicate_for_insn): Handle MATCH_DUP.
+ 
+ 2021-05-28  Joern Rennecke  <joern.rennecke@embecosm.com>
+ 
+ 	* gensupport.c (alter_constraints): Add MATCH_SCRATCH case.
+ 
+ 2021-05-28  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	PR tree-optimization/99398
+ 	* tree-ssa-forwprop.c (simplify_permutation): Optimize some cases
+ 	where the fed operands are CTOR/CST and propagated through
+ 	VIEW_CONVERT_EXPR.  Call vec_perm_indices::new_shrunk_vector.
+ 	* vec-perm-indices.c (vec_perm_indices::new_shrunk_vector): New
+ 	function.
+ 	* vec-perm-indices.h (vec_perm_indices::new_shrunk_vector): New
+ 	declare.
+ 
+ 2021-05-27  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/mmx.md (addv2sf3): Do not call
+ 	ix86_fixup_binary_operands_no_copy.
+ 	(subv2sf3): Ditto.
+ 	(mulv2sf3): Ditto.
+ 	(<smaxmin:code>v2sf3): Ditto.
+ 	(<plusminus:insn><MMXMODEI:mode>3): Ditto.
+ 	(<plusminus:insn><VI_32:mode>3): Remove expander.
+ 	(<plusminus:insn><VI_32:mode>3): Rename from
+ 	"*<plusminus:insn><VI_32:mode>3".
+ 	(mulv4hi): Do not call ix86_fixup_binary_operands_no_copy.
+ 	(mulv2hi3): Remove expander.
+ 	(mulv2hi3): Rename from *mulv2hi3.
+ 	(<s>mulv2hi3_highpart): Remove expander.
+ 	(<s>mulv2hi3_highpart): Rename from *<s>mulv2hi3_highpart.
+ 	(<smaxmin:code><MMXMODE14:mode>3): Rename from
+ 	"*mmx_<smaxmin:code><MMXMODE14:mode>3".
+ 	(<smaxmin:code><SMAXMIN_MMXMODEI:mode>3): Remove expander.
+ 	(SMAXMIN_MMXMODEI): Remove mode iterator.
+ 	(<smaxmin:code>v4hi3): New expander.
+ 	(<smaxmin:code>v4qi3): Rename from *<smaxmin:code>v4qi3.
+ 	(<smaxmin:code>v2hi3): Rename from *<smaxmin:code>v2hi3.
+ 	(<smaxmin:code><SMAXMIN_VI_32:mode>3): Remove expander.
+ 	(SMAXMIN_VI_32): Remove mode iterator.
+ 	(<umaxmin:code><MMXMODE24:mode>3): Rename from
+ 	"*mmx_<umaxmin:code><MMXMODE24:mode>3".
+ 	(<umaxmin:code><UMAXMIN_MMXMODEI:mode>3): Remove expander.
+ 	(UMAXMIN_MMXMODEI): Remove mode iterator.
+ 	(<umaxmin:code>v8qi3): New expander.
+ 	(<umaxmin:code>v4qi3): Rename from *<umaxmin:code>v4qi3.
+ 	(<umaxmin:code>v2hi3): Rename from *<umaxmin:code>v2hi3.
+ 	(<umaxmin:code><SMAXMIN_VI_32:mode>3): Remove expander.
+ 	(UMAXMIN_VI_32): Remove mode iterator.
+ 	(<any_shift:insn>v2hi3): Remove expander.
+ 	(<any_shift:insn>v2hi3): Rename from *<any_shift:insn>v2hi3.
+ 	(<any_logic:code><MMXMODEI:mode>3): Do not call
+ 	ix86_fixup_binary_operands_no_copy.
+ 	(<any_logic:code><VI_32:mode>3): Remove expander.
+ 	(<any_logic:code><VI_32:mode>3): Rename from
+ 	"*<any_logic:code><VI_32:mode>3".
+ 	(uavg<mode>3_ceil): Do not call ix86_fixup_binary_operands_no_copy.
+ 	* config/i386/sse.md (div<VF2:mode>3): Do not call
+ 	ix86_fixup_binary_operands_no_copy.
+ 	(div<VF1:mode>3): Ditto.
+ 	(<maxmin:code><VI8_AVX2_AVX512F:mode>3): Ditto.
+ 	(smulhrsv4hi3): Ditto.
+ 	(smulhrsv2hi3): Ditto.
+ 
+ 2021-05-27  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* ggc.h (gt_ggc_mx): Add overloads for all integers.
+ 	(gt_pch_nx):  Same.
+ 	* hash-map.h (class hash_map): Add pch_nx_helper overloads for all
+ 	integers.
+ 	(hash_map::operator==): New function.
+ 
+ 2021-05-27  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100637
+ 	* config/i386/i386-expand.c (ix86_expand_int_sse_cmp):
+ 	For TARGET_XOP bypass SSE comparisons for all supported vector modes.
+ 	* config/i386/mmx.md (*xop_maskcmp<MMXMODEI:mode>3): New insn pattern.
+ 	(*xop_maskcmp<VI_32:mode>3): Ditto.
+ 	(*xop_maskcmp_uns<MMXMODEI:mode>3): Ditto.
+ 	(*xop_maskcmp_uns<VI_32:mode>3): Ditto.
+ 
+ 2021-05-27  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/100767
+ 	* config/arm/arm.c (arm_configure_build_target): Remove parameter
+ 	opts_set, directly check opts parameters for being non-null.
+ 	(arm_option_restore): Update call to arm_configure_build_target.
+ 	(arm_option_override): Likewise.
+ 	(arm_can_inline_p): Likewise.
+ 	(arm_valid_target_attribute_tree): Likewise.
+ 	* config/arm/arm-c.c (arm_pragma_target_parse): Likewise.
+ 	* config/arm/arm-protos.h (arm_configure_build_target): Adjust
+ 	prototype.
+ 
+ 2021-05-27  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* vr-values.c (simplify_conversion_using_ranges): Use
+ 	get_range_query instead of get_global_range_query.
+ 
+ 2021-05-27  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-range.cc (get_range_global): Move to value-query.cc.
+ 	(gimple_range_global): Same.
+ 	(get_global_range_query): Same.
+ 	(global_range_query::range_of_expr): Same.
+ 	* gimple-range.h (class global_range_query): Move to
+ 	value-query.h.
+ 	(gimple_range_global): Same.
+ 	* tree-ssanames.c (get_range_info): Move to value-query.cc.
+ 	(get_ptr_nonnull): Same.
+ 	* tree-ssanames.h (get_range_info): Remove.
+ 	(get_ptr_nonnull): Remove.
+ 	* value-query.cc (get_ssa_name_range_info): Move from
+ 	tree-ssanames.c.
+ 	(get_ssa_name_ptr_info_nonnull): Same.
+ 	(get_range_global): Move from gimple-range.cc.
+ 	(gimple_range_global): Same.
+ 	(get_global_range_query): Same.
+ 	(global_range_query::range_of_expr): Same.
+ 	* value-query.h (class global_range_query): Move from
+ 	gimple-range.h.
+ 	(gimple_range_global): Same.
+ 
+ 2021-05-27  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100637
+ 	* config/i386/mmx.md (uavgv4qi3_ceil): New insn pattern.
+ 	(uavgv2hi3_ceil): Ditto.
+ 
+ 2021-05-26  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR c/100653
+ 	* doc/extend.texi (scalar_storage_order): Rephrase slightly.
+ 
+ 2021-05-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssanames.c (get_range_info): Merge both copies of
+ 	get_range_info into one that works with irange.
+ 	* tree-ssanames.h (get_range_info): Remove version that works on
+ 	wide_ints.
+ 
+ 2021-05-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* builtins.c (check_nul_terminated_array): Convert to get_range_query.
+ 	(expand_builtin_strnlen): Same.
+ 	(determine_block_size): Same.
+ 	* fold-const.c (expr_not_equal_to): Same.
+ 	* gimple-fold.c (size_must_be_zero_p): Same.
+ 	* gimple-match-head.c: Include gimple-range.h.
+ 	* gimple-pretty-print.c (dump_ssaname_info): Convert to get_range_query.
+ 	* gimple-ssa-warn-restrict.c
+ 	(builtin_memref::extend_offset_range): Same.
+ 	* graphite-sese-to-poly.c (add_param_constraints): Same.
+ 	* internal-fn.c (get_min_precision): Same.
+ 	* ipa-fnsummary.c (set_switch_stmt_execution_predicate): Same.
+ 	* ipa-prop.c (ipa_compute_jump_functions_for_edge): Same.
+ 	* match.pd: Same.
+ 	* tree-data-ref.c (split_constant_offset): Same.
+ 	(dr_step_indicator): Same.
+ 	* tree-dfa.c (get_ref_base_and_extent): Same.
+ 	* tree-scalar-evolution.c (iv_can_overflow_p): Same.
+ 	* tree-ssa-loop-niter.c (refine_value_range_using_guard): Same.
+ 	(determine_value_range): Same.
+ 	(record_nonwrapping_iv): Same.
+ 	(infer_loop_bounds_from_signedness): Same.
+ 	(scev_var_range_cant_overflow): Same.
+ 	* tree-ssa-phiopt.c (two_value_replacement): Same.
+ 	* tree-ssa-pre.c (insert_into_preds_of_block): Same.
+ 	* tree-ssa-reassoc.c (optimize_range_tests_to_bit_test): Same.
+ 	* tree-ssa-strlen.c (handle_builtin_stxncpy_strncat): Same.
+ 	(get_range): Same.
+ 	(dump_strlen_info): Same.
+ 	(set_strlen_range): Same.
+ 	(maybe_diag_stxncpy_trunc): Same.
+ 	(get_len_or_size): Same.
+ 	(handle_integral_assign): Same.
+ 	* tree-ssa-structalias.c (find_what_p_points_to): Same.
+ 	* tree-ssa-uninit.c (find_var_cmp_const): Same.
+ 	* tree-switch-conversion.c (bit_test_cluster::emit): Same.
+ 	* tree-vect-patterns.c (vect_get_range_info): Same.
+ 	(vect_recog_divmod_pattern): Same.
+ 	* tree-vrp.c (intersect_range_with_nonzero_bits): Same.
+ 	(register_edge_assert_for_2): Same.
+ 	(determine_value_range_1): Same.
+ 	* tree.c (get_range_pos_neg): Same.
+ 	* vr-values.c (vr_values::get_lattice_entry): Same.
+ 	(vr_values::update_value_range): Same.
+ 	(simplify_conversion_using_ranges): Same.
+ 
+ 2021-05-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-ssa-warn-alloca.c (alloca_call_type): Use
+ 	  get_range_query instead of query argument.
+ 	(pass_walloca::execute): Enable and disable global ranger.
+ 
+ 2021-05-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-ssa-evrp.c (rvrp_folder::rvrp_folder): Call
+ 	enable_ranger.
+ 	(rvrp_folder::~rvrp_folder): Call disable_ranger.
+ 	(hybrid_folder::hybrid_folder): Call enable_ranger.
+ 	(hybrid_folder::~hybrid_folder): Call disable_ranger.
+ 
+ 2021-05-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* function.c (allocate_struct_function): Set cfun->x_range_query.
+ 	* function.h (struct function): Declare x_range_query.
+ 	(get_range_query): New.
+ 	(get_global_range_query): New.
+ 	* gimple-range-cache.cc (ssa_global_cache::ssa_global_cache):
+ 	Remove call to safe_grow_cleared.
+ 	* gimple-range.cc (get_range_global): New.
+ 	(gimple_range_global): Move from gimple-range.h.
+ 	(get_global_range_query): New.
+ 	(global_range_query::range_of_expr): New.
+ 	(enable_ranger): New.
+ 	(disable_ranger): New.
+ 	* gimple-range.h (gimple_range_global): Move to gimple-range.cc.
+ 	(class global_range_query): New.
+ 	(enable_ranger): New.
+ 	(disable_ranger): New.
+ 	* gimple-ssa-evrp.c (evrp_folder::~evrp_folder): Rename
+ 	dump_all_value_ranges to dump.
+ 	* tree-vrp.c (vrp_prop::finalize): Same.
+ 	* value-query.cc (range_query::dump): New.
+ 	* value-query.h (range_query::dump): New.
+ 	* vr-values.c (vr_values::dump_all_value_ranges): Rename to...
+ 	(vr_values::dump): ...this.
+ 	* vr-values.h (class vr_values): Rename dump_all_value_ranges to
+ 	dump and make virtual.
+ 
+ 2021-05-26  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.c (ix86_autovectorize_vector_modes):
+ 	Add V4QImode and V16QImode for TARGET_SSE2.
+ 	* doc/sourcebuild.texi (Vector-specific attributes):
+ 	Add vect64 and vect32 description.
+ 
+ 2021-05-26  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+ 
+ 	* gimple-range-gori.cc (range_def_chain::register_dependency):
+ 	Resize m_def_chain when needed.
+ 
+ 2021-05-26  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/mve.md (mve_vaddvq_<supf><mode>): Prefix with '@'.
+ 	* config/arm/neon.md (reduc_plus_scal_<mode>): Move to ..
+ 	* config/arm/vec-common.md: .. here. Add support for MVE.
+ 
+ 2021-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/epiphany/epiphany.c (epiphany_print_operand_address): Remove
+ 	register keywords.
+ 	* config/microblaze/microblaze.c (microblaze_legitimize_address,
+ 	call_internal1,
+ 	microblaze_option_override, print_operand): Likewise.
+ 	* config/microblaze/microblaze.md (call_internal_plt,
+ 	call_value_intern_plt, call_value_intern): Likewise.
+ 	* config/arm/aout.h (ASM_OUTPUT_ALIGN): Likewise.
+ 	* config/iq2000/iq2000.md (call_internal1, call_value_internal1,
+ 	call_value_multiple_internal1): Likewise.
+ 	* config/bfin/bfin.c (symbolic_reference_mentioned_p): Likewise.
+ 
+ 2021-05-26  Jan-Benedict Glaw  <jbglaw@lug-owl.de>
+ 
+ 	* config/arc/arc.c (arc_address_cost, arc_print_operand_address,
+ 	arc_ccfsm_advance, symbolic_reference_mentioned_p,
+ 	arc_raw_symbolic_reference_mentioned_p): Remove register
+ 	keyword.
+ 
+ 2021-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libgomp/100573
+ 	* omp-low.c: Include omp-offload.h.
+ 	(create_omp_child_function): If current_function_decl has
+ 	"omp declare target" attribute and is_gimple_omp_offloaded,
+ 	remove that attribute from the copy of attribute list and
+ 	add "omp target entrypoint" attribute instead.
+ 	(lower_omp_target): Mark .omp_data_sizes.* and .omp_data_kinds.*
+ 	variables for offloading if in omp_maybe_offloaded_ctx.
+ 	* omp-offload.c (pass_omp_target_link::execute): Nullify second
+ 	argument to GOMP_target_data_ext in offloaded code.
+ 
+ 2021-05-26  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* config/csky/csky.c (csky_can_change_mode_class): Delete.
+ 	For csky, HF/SF mode use the low bits of VREGS.
+ 
+ 2021-05-26  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gimplify.c (gimplify_decl_expr): Do not clear TREE_READONLY on a
+ 	DECL which is a reference for OMP.
+ 
+ 2021-05-26  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR gcov-profile/100751
+ 	* doc/gcov.texi: Document that __gcov_dump can be called just
+ 	once and that __gcov_reset resets run-time counters.
+ 
+ 2021-05-26  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/install.texi: Port relevant part from install-old.texi
+ 	and re-generate list of CPUs and systems.
+ 
+ 2021-05-26  Martin Liska  <mliska@suse.cz>
+ 
+ 	* Makefile.in: Remove it.
+ 	* doc/include/fdl.texi: Update next/previous chapters.
+ 	* doc/install.texi: Likewise.
+ 	* doc/install-old.texi: Removed.
+ 
+ 2021-05-26  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* config/csky/csky.c (ck810_legitimate_index_p): Support
+ 	"base + index" with DF mode.
+ 	* config/csky/constraints.md ("Y"): New constraint for memory operands
+ 	without index register.
+ 	* config/csky/csky_insn_fpuv2.md (fpuv3_movdf): Use "Y" instead of "m"
+ 	when mov between memory and general registers, and lower their priority.
+ 	* config/csky/csky_insn_fpuv3.md (fpuv2_movdf): Likewise.
+ 
+ 2021-05-26  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* config/csky/csky.c (TARGET_PROMOTE_PROTOTYPES): Delete.
+ 
+ 2021-05-26  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* config/csky/csky.md (untyped_call): Emit clobber for return
+ 	registers to mark them used.
+ 
+ 2021-05-26  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* config/csky/csky.md (cskyv2_sextend_ldbs): New.
+ 
+ 2021-05-26  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* match.pd (x < 0 ? ~y : y): New patterns.
+ 
+ 2021-05-26  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* match.pd (A?CST1:CST2): Add simplifcations for A?0:+-1, A?+-1:0,
+ 	A?POW2:0 and A?0:POW2.
+ 
+ 2021-05-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-gori.cc (class logical_stmt_cache): Delete
+ 	(logical_stmt_cache::logical_stmt_cache ): Delete.
+ 	(logical_stmt_cache::~logical_stmt_cache): Delete.
+ 	(logical_stmt_cache::cache_entry::dump): Delete.
+ 	(logical_stmt_cache::get_range): Delete.
+ 	(logical_stmt_cache::cached_name ): Delete.
+ 	(logical_stmt_cache::same_cached_name): Delete.
+ 	(logical_stmt_cache::cacheable_p): Delete.
+ 	(logical_stmt_cache::slot_diagnostics ): Delete.
+ 	(logical_stmt_cache::dump): Delete.
+ 	(gori_compute_cache::gori_compute_cache): Delete.
+ 	(gori_compute_cache::~gori_compute_cache): Delete.
+ 	(gori_compute_cache::compute_operand_range): Delete.
+ 	(gori_compute_cache::cache_stmt): Delete.
+ 	* gimple-range-gori.h (gori_compute::compute_operand_range): Remove
+ 	virtual.
+ 	(class gori_compute_cache): Delete.
+ 
+ 2021-05-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range.cc (fold_using_range::range_of_range_op): Use m_gori
+ 	intead of m_cache.
+ 	(fold_using_range::range_of_address): Adjust.
+ 	(fold_using_range::range_of_phi): Adjust.
+ 	* gimple-range.h (class fur_source): Adjust.
+ 	(fur_source::fur_source): Adjust.
+ 
+ 2021-05-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-gori.cc (gori_compute::expr_range_at_stmt): Rename
+ 	from expr_range_in_bb and adjust.
+ 	(gori_compute::compute_name_range_op): Adjust.
+ 	(gori_compute::optimize_logical_operands): Adjust.
+ 	(gori_compute::compute_logical_operands_in_chain): Adjust.
+ 	(gori_compute::compute_operand1_range): Adjust.
+ 	(gori_compute::compute_operand2_range): Adjust.
+ 	(ori_compute_cache::cache_stmt): Adjust.
+ 	* gimple-range-gori.h (gori_compute): Rename prototype.
+ 
+ 2021-05-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range.cc (gimple_ranger::range_of_expr): Non-null should be
+ 	checked only after range_of_stmt, not range_on_entry.
+ 	(gimple_ranger::range_on_entry): Check for non-null in any
+ 	predecessor block, if it is not already non-null.
+ 	(gimple_ranger::range_on_exit): DOnt check for non-null after
+ 	range on entry call.
+ 	(gimple_ranger::dump_bb): New.  Split from dump.
+ 	(gimple_ranger::dump): Adjust.
+ 	* gimple-range.h (class gimple_ranger): Adjust.
+ 
+ 2021-05-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (struct range_timestamp): Delete.
+ 	(class temporal_cache): Adjust.
+ 	(temporal_cache::get_timestamp): Delete.
+ 	(temporal_cache::set_dependency): Delete.
+ 	(temporal_cache::temporal_value): Adjust.
+ 	(temporal_cache::current_p): Take dependencies as params.
+ 	(temporal_cache::set_timestamp): Adjust.
+ 	(temporal_cache::set_always_current): Adjust.
+ 	(ranger_cache::get_non_stale_global_range): Adjust.
+ 	(ranger_cache::register_dependency): Delete.
+ 	* gimple-range-cache.h (class range_cache): Adjust.
+ 
+ 2021-05-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-gori.cc (range_def_chain::range_def_chain): init
+ 	bitmap obstack.
+ 	(range_def_chain::~range_def_chain): Dispose of obstack rather than
+ 	each individual bitmap.
+ 	(range_def_chain::set_import): New.
+ 	(range_def_chain::get_imports): New.
+ 	(range_def_chain::chain_import_p): New.
+ 	(range_def_chain::register_dependency): Rename from build_def_chain
+ 	and set imports.
+ 	(range_def_chain::def_chain_in_bitmap_p): New.
+ 	(range_def_chain::add_def_chain_to_bitmap): New.
+ 	(range_def_chain::has_def_chain): Just check first depenedence.
+ 	(range_def_chain::get_def_chain): Process imports, use generic
+ 	register_dependency routine.
+ 	(range_def_chain::dump): New.
+ 	(gori_map::gori_map): Allocate import list.
+ 	(gori_map::~gori_map): Release imports.
+ 	(gori_map::exports): Check for past allocated block size.
+ 	(gori_map::imports): New.
+ 	(gori_map::def_chain_in_export_p): Delete.
+ 	(gori_map::is_import_p): New.
+ 	(gori_map::maybe_add_gori): Handle imports.
+ 	(gori_map::dump): Adjust output, add imports.
+ 	(gori_compute::has_edge_range_p): Remove def_chain_in_export call.
+ 	(gori_export_iterator::gori_export_iterator): New.
+ 	(gori_export_iterator::next): New.
+ 	(gori_export_iterator::get_name): New.
+ 	* gimple-range-gori.h (range_def_chain): Add imports and direct
+ 	dependecies via struct rdc.
+ 	(range_def_chain::depend1): New.
+ 	(range_def_chain::depend2): New.
+ 	(class gori_map): Adjust.
+ 	(FOR_EACH_GORI_IMPORT_NAME): New.
+ 	(FOR_EACH_GORI_EXPORT_NAME): New.
+ 	(class gori_export_iterator): New.
+ 
+ 2021-05-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ranger_cache::ranger_cache):  Move initial
+ 	export cache filling to here.
+ 	* gimple-range-gori.cc (gori_compute::gori_compute) : From Here.
+ 
+ 2021-05-25  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-gori.cc (range_def_chain): Move to gimple-range-gori.h.
+ 	(gori_map): Move to gimple-range-gori.h.
+ 	(gori_compute::gori_compute): Adjust.
+ 	(gori_compute::~gori_compute): Delete.
+ 	(gori_compute::compute_operand_range_switch): Adjust.
+ 	(gori_compute::compute_operand_range): Adjust.
+ 	(gori_compute::compute_logical_operands): Adjust.
+ 	(gori_compute::has_edge_range_p ): Adjust.
+ 	(gori_compute::set_range_invariant): Delete.
+ 	(gori_compute::dump): Adjust.
+ 	(gori_compute::outgoing_edge_range_p): Adjust.
+ 	* gimple-range-gori.h (class range_def_chain): Relocate here.
+ 	(class gori_map): Relocate here.
+ 	(class gori_compute): Inherit from gori_map, and adjust.
+ 
+ 2021-05-25  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* value-range.cc (range_tests_legacy): Use
+ 	build_nonstandard_integer_type instead of int and short.
+ 
+ 2021-05-25  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gimplify.c (gimplify_decl_expr): Clear TREE_READONLY on the DECL
+ 	when really creating an initialization statement for it.
+ 
+ 2021-05-25  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* tree-inline.c (setup_one_parameter): Fix thinko in new condition.
+ 
+ 2021-05-25  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/riscv.h (ASM_SPEC): Pass -mno-relax.
+ 
+ 2021-05-25  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR tree-optimization/92860
+ 	PR target/99592
+ 	* optc-save-gen.awk: Remove exceptions.
+ 
+ 2021-05-25  Martin Liska  <mliska@suse.cz>
+ 
+ 	* asan.h (sanitize_coverage_p): New function.
+ 	* doc/extend.texi: Document it.
+ 	* fold-const.c (fold_range_test): Use sanitize_flags_p
+ 	instead of flag_sanitize_coverage.
+ 	(fold_truth_andor): Likewise.
+ 	* sancov.c: Likewise.
+ 	* tree-ssa-ifcombine.c (ifcombine_ifandif): Likewise.
+ 	* ipa-inline.c (sanitize_attrs_match_for_inline_p): Handle
+ 	-fsanitize-coverage when inlining.
+ 
+ 2021-05-25  Cooper Qu  <cooper.qu@linux.alibaba.com>
+ 
+ 	* config/csky/csky-modes.def : Fix copyright.
+ 
+ 2021-05-25  Cooper Qu  <cooper.qu@linux.alibaba.com>
+ 
+ 	* config/csky/csky-modes.def : Amend copyright.
+ 	* config/csky/csky_insn_fpuv2.md : Likewise.
+ 	* config/csky/csky_insn_fpuv3.md : Likewise.
+ 
+ 2021-05-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/100727
+ 	* calls.c (initialize_argument_information): Explicitely test
+ 	for WITH_SIZE_EXPR.
+ 	* gimple-expr.c (mark_addressable): Skip outer WITH_SIZE_EXPR.
+ 
+ 2021-05-25  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* config/csky/csky.h (FRAME_POINTER_REGNUM): Use
+ 	HARD_FRAME_POINTER_REGNUM and FRAME_POINTER_REGNUM instead of
+ 	the signle definition. The signle definition may not work well
+ 	at simplify_subreg_regno().
+ 	(HARD_FRAME_POINTER_REGNUM): New.
+ 	(ELIMINABLE_REGS): Add for HARD_FRAME_POINTER_REGNUM.
+ 	* config/csky/csky.c (get_csky_live_regs, csky_can_eliminate,
+ 	csky_initial_elimination_offset, csky_expand_prologue,
+ 	csky_expand_epilogue): Add for HARD_FRAME_POINTER_REGNUM.
+ 
+ 2021-05-25  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* config/csky/csky.c (csky_option_override):
+ 	Init csky_arch_isa_features[] in advance, so TARGET_DSP
+ 	and TARGET_DIV can be set well.
+ 
+ 2021-05-25  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* config/csky/constraints.md ("l", "h"): Delete.
+ 	* config/csky/csky.h (reg_class, REG_CLASS_NAMES,
+ 	REG_CLASS_CONTENTS):  Delete LO_REGS and HI_REGS.
+ 	* config/csky/csky.c (regno_reg_classm,
+ 	csky_secondary_reload, csky_register_move_cost):
+ 	Use HILO_REGS instead of LO_REGS and HI_REGS.
+ 
+ 2021-05-25  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* config/csky/constraints.md ("W"): New constriant for mem operand
+ 	with base reg, index register.
+ 	("Q"): Renamed and modified "csky_valid_fpuv2_mem_operand" to
+ 	"csky_valid_mem_constraint_operand" to deal with both "Q" and "W"
+ 	constraint.
+ 	("Dv"): New constraint for const double value that can be used at
+ 	fmovi instruction.
+ 	* config/csky/csky-modes.def (HFmode): New mode.
+ 	* config/csky/csky-protos.h (csky_valid_fpuv2_mem_operand): Rename
+ 	to "csky_valid_mem_constraint_operand" and support new constraint
+ 	"W".
+ 	(csky_get_movedouble_length): New.
+ 	(fpuv3_output_move): New.
+ 	(fpuv3_const_double): New.
+ 	* config/csky/csky.c (csky_option_override): New arch CK860 with fpv3.
+ 	(decompose_csky_address): Refine.
+ 	(csky_print_operand): New "CONST_DOUBLE" operand.
+ 	(csky_output_move): Support fpv3 instructions.
+ 	(csky_get_movedouble_length): New.
+ 	(fpuv3_output_move): New.
+ 	(fpuv3_const_double): New.
+ 	(csky_emit_compare): Cover float comparsion.
+ 	(csky_emit_compare_float): Refine.
+ 	(csky_vaild_fpuv2_mem_operand): Rename to
+ 	"csky_valid_mem_constraint_operand" and support new constraint "W".
+ 	(ck860_rtx_costs): New.
+ 	(csky_rtx_costs): Add the cost calculation of CK860.
+ 	(regno_reg_class): New vregs for fpuv3.
+ 	(csky_dbx_regno): Likewise.
+ 	(csky_cpu_cpp_builtins): New builtin macro for fpuv3.
+ 	(csky_conditional_register_usage): Suporrot fpuv3.
+ 	(csky_dwarf_register_span): Suporrot fpuv3.
+ 	(csky_init_builtins, csky_mangle_type): Support "__fp16" type.
+ 	(ck810_legitimate_index_p): Support fp16.
+ 	* config/csky/csky.h (TARGET_TLS): ADD CK860.
+ 	(CSKY_VREG_P, CSKY_VREG_LO_P, CSKY_VREG_HI_P): Support fpuv3.
+ 	(TARGET_SINGLE_FPU): Support fpuv3.
+ 	(TARGET_SUPPORT_FPV3): New.
+ 	(FIRST_PSEUDO_REGISTER): Change to 202 to hold the new fpuv3 registers.
+ 	(FIXED_REGISTERS, CALL_REALLY_USED_REGISTERS, REGISTER_NAMES,
+ 	 REG_CLASS_CONTENTS): Support fpuv3.
+ 	* config/csky/csky.md (movsf): Move to cksy_insn_fpu.md and refine.
+ 	(csky_movsf_fpv2): Likewise.
+ 	(ck801_movsf): Likewise.
+ 	(csky_movsf): Likewise.
+ 	(movdf): Likewise.
+ 	(csky_movdf_fpv2): Likewise.
+ 	(ck801_movdf): Likewise.
+ 	(csky_movdf): Likewise.
+ 	(movsicc): Refine. Use "comparison_operatior" instead of
+ 	"ordered_comparison_operatior".
+ 	(addsicc): Likewise.
+ 	(CSKY_FIRST_VFP3_REGNUM, CSKY_LAST_VFP3_REGNUM): New constant.
+ 	(call_value_internal_vh): New.
+ 	* config/csky/csky_cores.def (CK860): New arch and cpu.
+ 	(fpv3_hf): New.
+ 	(fpv3_hsf): New.
+ 	(fpv3_sdf): New.
+ 	(fpv3): New.
+ 	* config/csky/csky_insn_fpu.md: Refactor. Separate all float patterns
+ 	into emit-patterns and match-patterns, remain the emit-patterns here,
+ 	and move the match-patterns to csky_insn_fpuv2.md or
+ 	csky_insn_fpuv3.md.
+ 	* config/csky/csky_insn_fpuv2.md: New file for fpuv2 instructions.
+ 	* config/csky/csky_insn_fpuv3.md: New file and new patterns for fpuv3
+ 	isntructions.
+ 	* config/csky/csky_isa.def (fcr): New.
+ 	(fpv3_hi): New.
+ 	(fpv3_hf): New.
+ 	(fpv3_sf): New.
+ 	(fpv3_df): New.
+ 	(CK860): New definition for ck860.
+ 	* config/csky/csky_tables.opt (ck860): New processors ck860,
+ 	ck860f. And new arch ck860.
+ 	(fpv3_hf): New.
+ 	(fpv3_hsf): New.
+ 	(fpv3_hdf): New.
+ 	(fpv3): New.
+ 	* config/csky/predicates.md (csky_float_comparsion_operator): Delete
+ 	"geu", "gtu", "leu", "ltu", which will never appear at float comparison.
+ 	* config/csky/t-csky-elf: Support 860.
+ 	* config/csky/t-csky-linux: Likewise.
+ 	* doc/md.texi: Add "Q" and "W" constraints for C-SKY.
+ 
+ 2021-05-24  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config/rs6000/genfusion.pl (gen_logical_addsubf): Refactor to
+ 	add generation of logical-add and add-logical fusion pairs.
+ 	* config/rs6000/rs6000-cpus.def: Add new fusion to ISA 3.1 mask
+ 	and powerpc mask.
+ 	* config/rs6000/rs6000.c (rs6000_option_override_internal): Turn on
+ 	logical-add and add-logical fusion by default.
+ 	* config/rs6000/rs6000.opt: Add -mpower10-fusion-logical-add and
+ 	-mpower10-fusion-add-logical options.
+ 	* config/rs6000/fusion.md: Regenerate file.
+ 
+ 2021-05-24  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* value-range.cc (irange::legacy_equal_p): Check type when
+ 	comparing VR_VARYING types.
+ 	(range_tests_legacy): Test comparing VARYING ranges of different
+ 	sizes.
+ 
+ 2021-05-24  Wilco Dijkstra  <wdijkstr@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (neoversen1_tunings):
+ 	Enable AARCH64_EXTRA_TUNE_CHEAP_SHIFT_EXTEND.
+ 
+ 2021-05-24  Wilco Dijkstra  <wdijkstr@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_classify_symbol): Use GOT for
+ 	extern weak symbols.  Limit symbol offsets for non-GOT symbols with
+ 	PIC/PIE.
+ 
+ 2021-05-24  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/neon.md (vec_load_lanesxi<mode>)
+ 	(vec_store_lanexoi<mode>): Move ...
+ 	* config/arm/vec-common.md: here.
+ 
+ 2021-05-24  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/neon.md (vec_load_lanesoi<mode>)
+ 	(vec_store_lanesoi<mode>): Move ...
+ 	* config/arm/vec-common.md: here.
+ 
+ 2021-05-24  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/100660
+ 	* config/i386/i386.c (ix86_gimple_fold_builtin): Replacing
+ 	stmt with GIMPLE_NOP when lhs doesn't exist.
+ 
+ 2021-05-23  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100722
+ 	* config/i386/mmx.md (*push<VI_32:mode>2_rex64):
+ 	New instruction pattern.
+ 	(*push<VI_32:mode>2): Ditto.
+ 	(push splitter for SSE registers): New splitter.
+ 
+ 2021-05-23  Andrew Pinski  <apinski@marvell.com>
+ 
+ 	* match.pd ((A & C) != 0 ? D : 0): Limit to non pointer types.
+ 
+ 2021-05-22  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config/rs6000/genfusion.pl (gen_addadd): Fix incorrect attr types.
+ 	* config/rs6000/fusion.md: Regenerate file.
+ 
+ 2021-05-21  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config/rs6000/genfusion.pl (gen_addadd): New function.
+ 	* config/rs6000/fusion.md: Regenerate file.
+ 	* config/rs6000/rs6000-cpus.def: Add
+ 	OPTION_MASK_P10_FUSION_2ADD to masks.
+ 	* config/rs6000/rs6000.c (rs6000_option_override_internal):
+ 	Handle default value of OPTION_MASK_P10_FUSION_2ADD.
+ 	* config/rs6000/rs6000.opt: Add -mpower10-fusion-2add.
+ 
+ 2021-05-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/99928
+ 	* tree.h (OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET): Define.
+ 	* gimplify.c (enum gimplify_omp_var_data): Fix up
+ 	GOVD_MAP_HAS_ATTACHMENTS value, add GOVD_FIRSTPRIVATE_IMPLICIT.
+ 	(omp_lastprivate_for_combined_outer_constructs): If combined target
+ 	has GOVD_FIRSTPRIVATE_IMPLICIT set for the decl, change it to
+ 	GOVD_MAP | GOVD_SEEN.
+ 	(gimplify_scan_omp_clauses): Set GOVD_FIRSTPRIVATE_IMPLICIT for
+ 	firstprivate clauses with OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT.
+ 	(gimplify_adjust_omp_clauses): For firstprivate clauses with
+ 	OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT either clear that bit and
+ 	OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT_TARGET too, or remove it and
+ 	let it be replaced by implicit map clause.
+ 
+ 2021-05-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/99928
+ 	* gimplify.c (omp_lastprivate_for_combined_outer_constructs): New
+ 	function.
+ 	(gimplify_scan_omp_clauses) <case OMP_CLAUSE_LASTPRIVATE>: Use it.
+ 	(gimplify_omp_for): Likewise.
+ 
+ 2021-05-21  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR middle-end/90115
+ 	* omp-low.c (oacc_privatization_candidate_p): Reject 'static',
+ 	'external' in blocks.
+ 
+ 2021-05-21  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR middle-end/90115
+ 	* flag-types.h (enum openacc_privatization): New.
+ 	* params.opt (-param=openacc-privatization): New.
+ 	* doc/invoke.texi (openacc-privatization): Document it.
+ 	* omp-general.h (get_openacc_privatization_dump_flags): New
+ 	function.
+ 	* omp-low.c (oacc_privatization_candidate_p): Add diagnostics.
+ 	* omp-offload.c (execute_oacc_device_lower)
+ 	<IFN_UNIQUE_OACC_PRIVATE>: Re-work diagnostics.
+ 	* target.def (goacc.adjust_private_decl): Add 'location_t'
+ 	parameter.
+ 	* doc/tm.texi: Regenerate.
+ 	* config/gcn/gcn-protos.h (gcn_goacc_adjust_private_decl): Adjust.
+ 	* config/gcn/gcn-tree.c (gcn_goacc_adjust_private_decl): Likewise.
+ 	* config/nvptx/nvptx.c (nvptx_goacc_adjust_private_decl):
+ 	Likewise.  Preserve it for...
+ 	(nvptx_goacc_expand_var_decl): ... use here.
+ 
+ 2021-05-21  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* doc/sourcebuild.texi (Other attributes): Document '__OPTIMIZE__'
+ 	DejaGnu selector.
+ 
+ 2021-05-21  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR middle-end/90115
+ 	* omp-low.c (oacc_privatization_candidate_p): New function.
+ 	(oacc_privatization_scan_clause_chain)
+ 	(oacc_privatization_scan_decl_chain): Use it.  Also
+ 	'gcc_checking_assert' that we're not seeing duplicates.
+ 
+ 2021-05-21  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR middle-end/90115
+ 	* omp-offload.c (execute_oacc_device_lower): Skip processing if no
+ 	work to be done.
+ 
+ 2021-05-21  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR middle-end/90115
+ 	* omp-offload.c (execute_oacc_device_lower): Explain.
+ 
+ 2021-05-21  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR middle-end/90115
+ 	* omp-offload.c (execute_oacc_device_lower)
+ 	<IFN_UNIQUE_OACC_PRIVATE>: Diagnose and handle for 'level == -1'
+ 	case, too.
+ 	* internal-fn.c (expand_UNIQUE): Don't expect
+ 	'IFN_UNIQUE_OACC_PRIVATE'.
+ 
+ 2021-05-21  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR middle-end/90115
+ 	* omp-low.c (lower_omp_for): Don't evaluate OpenMP 'for' clauses.
+ 
+ 2021-05-21  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR middle-end/90115
+ 	* config/nvptx/nvptx.c (nvptx_goacc_adjust_private_decl)
+ 	(nvptx_goacc_expand_var_decl): Tighten.
+ 
+ 2021-05-21  Julian Brown  <julian@codesourcery.com>
+ 	    Chung-Lin Tang  <cltang@codesourcery.com>
+ 	    Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	PR middle-end/90115
+ 	* doc/tm.texi.in (TARGET_GOACC_EXPAND_VAR_DECL)
+ 	(TARGET_GOACC_ADJUST_PRIVATE_DECL): Add documentation hooks.
+ 	* doc/tm.texi: Regenerate.
+ 	* expr.c (expand_expr_real_1): Expand decls using the
+ 	expand_var_decl OpenACC hook if defined.
+ 	* internal-fn.c (expand_UNIQUE): Handle IFN_UNIQUE_OACC_PRIVATE.
+ 	* internal-fn.h (IFN_UNIQUE_CODES): Add OACC_PRIVATE.
+ 	* omp-low.c (omp_context): Add oacc_privatization_candidates
+ 	field.
+ 	(lower_oacc_reductions): Add PRIVATE_MARKER parameter.  Insert
+ 	before fork.
+ 	(lower_oacc_head_tail): Add PRIVATE_MARKER parameter.  Modify
+ 	private marker's gimple call arguments, and pass it to
+ 	lower_oacc_reductions.
+ 	(oacc_privatization_scan_clause_chain)
+ 	(oacc_privatization_scan_decl_chain, lower_oacc_private_marker):
+ 	New functions.
+ 	(lower_omp_for, lower_omp_target, lower_omp_1): Use these.
+ 	* omp-offload.c (convert.h): Include.
+ 	(oacc_loop_xform_head_tail): Treat private-variable markers like
+ 	fork/join when transforming head/tail sequences.
+ 	(struct var_decl_rewrite_info): Add struct.
+ 	(oacc_rewrite_var_decl, is_sync_builtin_call): New functions.
+ 	(execute_oacc_device_lower): Support rewriting gang-private
+ 	variables using target hook, and fix up addr_expr and var_decl
+ 	nodes afterwards.
+ 	* target.def (adjust_private_decl, expand_var_decl): New hooks.
+ 	* config/gcn/gcn-protos.h (gcn_goacc_adjust_gangprivate_decl):
+ 	Rename to...
+ 	(gcn_goacc_adjust_private_decl): ...this.
+ 	* config/gcn/gcn-tree.c (gcn_goacc_adjust_gangprivate_decl):
+ 	Rename to...
+ 	(gcn_goacc_adjust_private_decl): ...this. Add LEVEL parameter.
+ 	* config/gcn/gcn.c (TARGET_GOACC_ADJUST_GANGPRIVATE_DECL): Rename
+ 	definition using gcn_goacc_adjust_gangprivate_decl...
+ 	(TARGET_GOACC_ADJUST_PRIVATE_DECL): ...to this, using
+ 	gcn_goacc_adjust_private_decl.
+ 	* config/nvptx/nvptx.c (tree-pretty-print.h): Include.
+ 	(gang_private_shared_size): New global variable.
+ 	(gang_private_shared_align): Likewise.
+ 	(gang_private_shared_sym): Likewise.
+ 	(gang_private_shared_hmap): Likewise.
+ 	(nvptx_option_override): Initialize these.
+ 	(nvptx_file_end): Output gang_private_shared_sym.
+ 	(nvptx_goacc_adjust_private_decl, nvptx_goacc_expand_var_decl):
+ 	New functions.
+ 	(nvptx_set_current_function): Clear gang_private_shared_hmap.
+ 	(TARGET_GOACC_ADJUST_PRIVATE_DECL): Define hook.
+ 	(TARGET_GOACC_EXPAND_VAR_DECL): Likewise.
+ 
+ 2021-05-21  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/i386-modes.def (MAX_BITSIZE_MODE_ANY_INT): Removed.
+ 
+ 2021-05-21  Richard Biener  <rguenther@suse.de>
+ 	    H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR middle-end/90773
+ 	* expr.c (expand_constructor): Elide expand_constructor if
+ 	move by pieces is preferred.
+ 
+ 2021-05-21  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c (aarch64_call_properties):
+ 	Take a flag and mode value as arguments.
+ 	(aarch64_modifies_global_state_p): Likewise.
+ 	(aarch64_reads_global_state_p): Likewise.
+ 	(aarch64_could_trap_p): Likewise.
+ 	(aarch64_get_attributes): Likewise.
+ 	(aarch64_init_simd_builtins): Adjust callsite of above.
+ 	(aarch64_init_fcmla_laneq_builtins): Use aarch64_get_attributes to get
+ 	function attributes to apply to builtins.
+ 	(aarch64_init_crc32_builtins): Likewise.
+ 	(aarch64_init_builtin_rsqrt): Likewise.
+ 
+ 2021-05-21  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.md (define_attr "type"): Add types for fusion.
+ 	* config/rs6000/genfusion.pl (gen_ld_cmpi_p10): Use new fusion types.
+ 	(gen_2logical): Use new fusion types.
+ 	* config/rs6000/fusion.md: Regenerate.
+ 
+ 2021-05-21  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100637
+ 	* config/i386/i386-expand.c (ix86_expand_sse_movcc):
+ 	Handle V4QI and V2HI modes.
+ 	(ix86_expand_sse_movcc): Ditto.
+ 	* config/i386/mmx.md (*<sat_plusminus:insn><VI_32:mode>3):
+ 	New instruction pattern.
+ 	(*eq<VI_32:mode>3): Ditto.
+ 	(*gt<VI_32:mode>3): Ditto.
+ 	(*xop_pcmov_<VI_32:mode>): Ditto.
+ 	(mmx_pblendvb32): Ditto.
+ 	(mmx_pblendvb64): Rename from mmx_pblendvb.
+ 	(vec_cmp<VI_32:mode><VI_32:mode>): New expander.
+ 	(vec_cmpu<VI_32:mode><VI_32:mode>): Ditto.
+ 	(vcond<VI_32:mode><VI_32:mode>): Ditto.
+ 	(vcondu<VI_32:mode><VI_32:mode>): Ditto.
+ 	(vcond_mask_<VI_32:mode><VI_32:mode>): Ditto.
+ 
+ 2021-05-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/94589
+ 	* tree-ssa-phiopt.c (spaceship_replacement): For integral rhs1 and
+ 	rhs2, treat x <= 4 equivalently to x < 5 etc.  In cmp1 and cmp2 (if
+ 	not the same as cmp3) treat <= the same as < and >= the same as >.
+ 	Don't require that cond2_phi_edge is true edge, instead take
+ 	false/true edges into account based on cmp1/cmp2 comparison kinds.
+ 
+ 2021-05-21  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100637
+ 	* config/i386/mmx.md (SMAXMIN_MMXMODEI): New mode iterator.
+ 	(<smaxmin:code><SMAXMIN_MMXMODEI:mode>3): Macroize expander
+ 	from <smaxmin:code>v4hi3> and <smaxmin:code><MMXMODE14:mode>3
+ 	using SMAXMIN_MMXMODEI mode iterator.
+ 	(*<smaxmin:code>v4qi3): New insn pattern.
+ 	(*<smaxmin:code>v2hi3): Ditto.
+ 	(SMAXMIN_VI_32): New mode iterator.
+ 	(<smaxmin:code><SMAXMIN_VI_32>mode3): New expander.
+ 	(UMAXMIN_MMXMODEI): New mode iterator.
+ 	(<umaxmin:code><UMAXMIN_MMXMODEI:mode>3): Macroize expander
+ 	from <umaxmin:code>v8qi3> and <umaxmin:code><MMXMODE24:mode>3
+ 	using UMAXMIN_MMXMODEI mode iterator.
+ 	(*<umaxmin:code>v4qi3): New insn pattern.
+ 	(*<umaxmin:code>v2hi3): Ditto.
+ 	(UMAXMIN_VI_32): New mode iterator.
+ 	(<umaxmin:code><UMAXMIN_VI_32>mode3): New expander.
+ 	(abs<VI_32:mode>2): New insn pattern.
+ 	(ssse3_abs<MMXMODEI:mode>2, abs<MMXMODEI:mode>2): Move from ...
+ 	* config/i386/sse.md: ... here.
+ 
+ 2021-05-20  Clement Chigot  <clement.chigot@atos.net>
+ 	    David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* collect2.c (scan_prog_file): Issue non-fatal warning for
+ 	non-COFF files.
+ 
+ 2021-05-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/invoke.texi (-Wno-c++11-extensions)
+ 	(-Wno-c++14-extensions, -Wno-c++17-extensions)
+ 	(-Wno-c++20-extensions, -Wno-c++23-extensions): Document
+ 	new options.
+ 
+ 2021-05-20  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* config/c6x/c6x.c (c6x_output_file_unwind): Use dwarf_debuginfo_p.
+ 	* config/darwin.c (darwin_override_options): Likewise.
+ 	* config/i386/cygming.h (DBX_REGISTER_NUMBER): Likewise.
+ 	* config/i386/darwin.h (DBX_REGISTER_NUMBER): Likewise.
+ 	(DWARF2_FRAME_REG_OUT): Likewise.
+ 	* config/mips/mips.c (mips_output_filename): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_xcoff_declare_function_name):
+ 	Likewise.
+ 	(rs6000_dbx_register_number): Likewise.
+ 	* dbxout.c: Include flags.h.
+ 	* dwarf2cfi.c (cfi_label_required_p): Likewise.
+ 	(dwarf2out_do_frame): Likewise.
+ 	* except.c: Include flags.h.
+ 	* final.c (dwarf2_debug_info_emitted_p): Likewise.
+ 	(final_scan_insn_1): Likewise.
+ 	* flags.h (dwarf_debuginfo_p): New function declaration.
+ 	* opts.c (dwarf_debuginfo_p): New function definition.
+ 	* targhooks.c (default_debug_unwind_info): Use dwarf_debuginfo_p.
+ 	* toplev.c (process_options): Likewise.
+ 
+ 2021-05-20  Indu Bhagat  <indu.bhagat@oracle.com>
+ 
+ 	* common.opt: Change type to support bitmasks.
+ 	* flag-types.h (enum debug_info_type): Rename enumerator constants.
+ 	(NO_DEBUG): New bitmask.
+ 	(DBX_DEBUG): Likewise.
+ 	(DWARF2_DEBUG): Likewise.
+ 	(XCOFF_DEBUG): Likewise.
+ 	(VMS_DEBUG): Likewise.
+ 	(VMS_AND_DWARF2_DEBUG): Likewise.
+ 	* flags.h (debug_set_to_format): New function declaration.
+ 	(debug_set_count): Likewise.
+ 	(debug_set_names): Likewise.
+ 	* opts.c (debug_type_masks): Array of bitmasks for debug formats.
+ 	(debug_set_to_format): New function definition.
+ 	(debug_set_count): Likewise.
+ 	(debug_set_names): Likewise.
+ 	(set_debug_level): Update access to debug_type_names.
+ 	* toplev.c: Likewise.
+ 
+ 2021-05-20  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/100684
+ 	* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Handle C++ lambda.
+ 
+ 2021-05-20  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100701
+ 	* config/i386/i386.md (isa): Remove x64_bmi.
+ 	(enabled): Remove x64_bmi.
+ 	* config/i386/mmx.md (mmx_andnot<MMXMODEI:mode>3):
+ 	Remove general register alternative.
+ 	(*andnot<VI_32:mode>3): Ditto.
+ 	(*mmx_<any_logic:code><MMXMODEI:mode>3): Ditto.
+ 	(*<any_logic:code><VI_32:mode>3): Ditto.
+ 
+ 2021-05-20  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/arm/arm.c: Include head files tree-vectorizer.h and
+ 	cfgloop.h.
+ 
+ 2021-05-20  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100637
+ 	* config/i386/mmx.md (Yv_Yw): Revert adding V4QI and V2HI modes.
+ 	(*<plusminus:insn><VI_32:mode>3): Use Yw instad of <Yv_Yw> constrint.
+ 	(<s>mulv4hi3_highpart): New expander.
+ 	(*<s>mulv2hi3_highpart): New insn pattern.
+ 	(<s>mulv2hi3_higpart): New expander.
+ 	(*<any_shift:insn>v2hi3): New insn pattern.
+ 	(<any_shift:insn>v2hi3): New expander.
+ 	* config/i386/sse.md (smulhrsv2hi3): New expander.
+ 	(*smulhrsv2hi3): New insn pattern.
+ 
+ 2021-05-20  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* doc/invoke.texi (vect-inner-loop-cost-factor): Document new
+ 	parameter.
+ 	* params.opt (vect-inner-loop-cost-factor): New.
+ 	* targhooks.c (default_add_stmt_cost): Replace hardcoded factor
+ 	50 with LOOP_VINFO_INNER_LOOP_COST_FACTOR, include head file
+ 	tree-vectorizer.h and its required ones.
+ 	* config/aarch64/aarch64.c (aarch64_add_stmt_cost): Replace
+ 	hardcoded factor 50 with LOOP_VINFO_INNER_LOOP_COST_FACTOR.
+ 	* config/arm/arm.c (arm_add_stmt_cost): Likewise.
+ 	* config/i386/i386.c (ix86_add_stmt_cost): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_add_stmt_cost): Likewise.
+ 	* tree-vect-loop.c (vect_compute_single_scalar_iteration_cost):
+ 	Likewise.
+ 	(_loop_vec_info::_loop_vec_info): Init inner_loop_cost_factor.
+ 	* tree-vectorizer.h (_loop_vec_info): Add inner_loop_cost_factor.
+ 	(LOOP_VINFO_INNER_LOOP_COST_FACTOR): New macro.
+ 
+ 2021-05-20  Christophe Lyon  <christophe.lyon@linaro.org>
+ 	    Torbjörn Svensson  <torbjorn.svensson@st.com>
+ 
+ 	PR c/42579
+ 	* doc/cpp.texi (Common Predefined Macros): Document __FILE_NAME__.
+ 
+ 2021-05-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/99928
+ 	* gimplify.c (gimplify_scan_omp_clauses) <case OMP_CLAUSE_LINEAR>: For
+ 	explicit linear clause when combined with target, make it map(tofrom:)
+ 	instead of no clause or firstprivate.
+ 
+ 2021-05-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/94589
+ 	* match.pd ((X & Y) == X -> (X & ~Y) == 0): Simplify even in presence
+ 	of integral conversions.
+ 
+ 2021-05-19  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range.cc (fur_source::get_operand): New.
+ 	(gimple_range_fold): Delete.
+ 	(fold_using_range::fold_stmt): Move from gimple_ranger::calc_stmt.
+ 	(fold_using_range::range_of_range_op): Move from gimple_ranger.
+ 	(fold_using_range::range_of_address): Ditto.
+ 	(fold_using_range::range_of_phi): Ditto.
+ 	(fold_using_range::range_of_call): Ditto.
+ 	(fold_using_range::range_of_builtin_ubsan_call): Move from
+ 	range_of_builtin_ubsan_call.
+ 	(fold_using_range::range_of_builtin_call): Move from
+ 	range_of_builtin_call.
+ 	(gimple_ranger::range_of_builtin_call): Delete.
+ 	(fold_using_range::range_of_cond_expr): Move from gimple_ranger.
+ 	(gimple_ranger::fold_range_internal): New.
+ 	(gimple_ranger::range_of_stmt): Use new fold_using_range API.
+ 	(fold_using_range::range_of_ssa_name_with_loop_info): Move from
+ 	gimple_ranger.  Improve ranges of SSA_NAMES when possible.
+ 	* gimple-range.h (gimple_ranger): Remove various range_of routines.
+ 	(class fur_source): New.
+ 	(class fold_using_range): New.
+ 	(fur_source::fur_source): New.
+ 	(fold_range): New.
+ 	* vr-values.c (vr_values::extract_range_basic): Use fold_using_range
+ 	instead of range_of_builtin_call.
+ 
+ 2021-05-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/cpp.texi (Common Predefined Macros): Update documentation
+ 	for the __GXX_EXPERIMENTAL_CXX0X__ macro.
+ 
+ 2021-05-19  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR target/100333
+ 	* config/arm/arm.md (nonsecure_call_internal): Always ensure
+ 	callee's address is in a register.
+ 
+ 2021-05-19  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* common/config/riscv/riscv-common.c
+ 	(riscv_subset_list::parsing_subset_version): Properly parse the letter
+ 	'p' in '-march'.
+ 	(riscv_subset_list::parse_std_ext,
+ 	 riscv_subset_list::parse_multiletter_ext): To handle errors generated
+ 	in riscv_subset_list::parsing_subset_version.
+ 
+ 2021-05-19  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md: Use "neon_move_narrow_q"
+ 	type attribute in patterns generating XTN(2).
+ 
+ 2021-05-19  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_simd_vec_pack_trunc_<mode>):
+ 	Remove as duplicate of...
+ 	(aarch64_xtn<mode>): This.
+ 	(aarch64_xtn2<mode>_le): Move position in file.
+ 	(aarch64_xtn2<mode>_be): Move position in file.
+ 	(aarch64_xtn2<mode>): Move position in file.
+ 	(vec_pack_trunc_<mode>): Define as an expander.
+ 
+ 2021-05-19  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Split builtin
+ 	generation for aarch64_<sur>q<r>shr<u>n_n<mode> pattern into
+ 	separate scalar and vector generators.
+ 	* config/aarch64/aarch64-simd.md
+ 	(aarch64_<sur>q<r>shr<u>n_n<mode>): Define as an expander and
+ 	split into...
+ 	(aarch64_<sur>q<r>shr<u>n_n<mode>_insn_le): This and...
+ 	(aarch64_<sur>q<r>shr<u>n_n<mode>_insn_be): This.
+ 	* config/aarch64/iterators.md: Define SD_HSDI iterator.
+ 
+ 2021-05-19  Jonathn Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md: Use UNSPEC_SQXTUN instead
+ 	of UNSPEC_SQXTUN2.
+ 	* config/aarch64/iterators.md: Remove UNSPEC_SQXTUN2.
+ 
+ 2021-05-19  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_<sur>q<r>shr<u>n2_n<mode>):
+ 	Implement as an expand emitting a big/little endian
+ 	instruction pattern.
+ 	(aarch64_<sur>q<r>shr<u>n2_n<mode>_insn_le): Define.
+ 	(aarch64_<sur>q<r>shr<u>n2_n<mode>_insn_be): Define.
+ 
+ 2021-05-19  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_<sur><addsub>hn2<mode>):
+ 	Implement as an expand emitting a big/little endian
+ 	instruction pattern.
+ 	(aarch64_<sur><addsub>hn2<mode>_insn_le): Define.
+ 	(aarch64_<sur><addsub>hn2<mode>_insn_be): Define.
+ 	* config/aarch64/iterators.md: Remove UNSPEC_[R]ADDHN2 and
+ 	UNSPEC_[R]SUBHN2 unspecs and ADDSUBHN2 iterator.
+ 
+ 2021-05-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/100672
+ 	* fold-const.c (fold_negate_expr_1): Use element_precision.
+ 	(negate_expr_p): Likewise.
+ 
+ 2021-05-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	* config/aarch64/iterators.md (SVE_PRED_LOAD): New iterator.
+ 	(pred_load): New int attribute.
+ 	* config/aarch64/aarch64-sve.md
+ 	(aarch64_load_<ANY_EXTEND:optab><SVE_HSDI:mode><SVE_PARTIAL_I:mode>): Use
+ 	SVE_PRED_LOAD enum iterator and corresponding pred_load attribute.
+ 	* config/aarch64/aarch64-sve-builtins-base.cc (expand): Update call to
+ 	code_for_aarch64_load.
+ 
+ 2021-05-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* cfgexpand.c (discover_nonconstant_array_refs_r): Make
+ 	sure TARGET_MEM_REF bases are expanded as memory.
+ 	* tree-ssa-operands.c (operands_scanner::get_tmr_operands):
+ 	Do not mark TARGET_MEM_REF bases addressable.
+ 	* tree-ssa.c (non_rewritable_mem_ref_base): Handle
+ 	TARGET_MEM_REF bases as never rewritable.
+ 	* gimple-walk.c (walk_stmt_load_store_addr_ops): Do not
+ 	walk TARGET_MEM_REF bases as address-takens.
+ 	* tree-ssa-dce.c (ref_may_be_aliased): Handle TARGET_MEM_REF.
+ 
+ 2021-05-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* builtins.c (get_object_alignment_1): Strip outer
+ 	WITH_SIZE_EXPR.
+ 	* tree-dfa.c (get_ref_base_and_extent): Handle outer
+ 	WITH_SIZE_EXPR for size processing and process the
+ 	containing ref.
+ 	* tree-ssa-alias.c (ao_ref_base_alias_set): Strip
+ 	outer WITH_SIZE_EXPR.
+ 	(ao_ref_base_alias_ptr_type): Likewise.
+ 	(refs_may_alias_p_2): Allow WITH_SIZE_EXPR in ref->ref
+ 	and handle that accordingly, stripping it for the
+ 	core alias workers.
+ 	* tree.c (get_base_address): Handle WITH_SIZE_EXPR by
+ 	looking through it instead of returning NULL.
+ 
+ 2021-05-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/100576
+ 	* builtins.c (check_read_access): Convert bound to size_type_node if
+ 	non-NULL.
+ 
+ 2021-05-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-cfg.c (verify_types_in_gimple_min_lval): Inline...
+ 	(verify_types_in_gimple_reference): ... here.  Sanitize.
+ 	(verify_gimple_call): Verify references in LHS and arguments.
+ 	(verify_gimple_assign_single): Reject WITH_SIZE_EXPR.
+ 
+ 2021-05-19  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.h (VALID_INT_MODE_P):
+ 	Add V8QI, V4HI and V2SI modes for TARGET_64BIT.
+ 	* config/i386/i386.md (isa): Add x64_bmi.
+ 	(enabled): Handle x64_bmi.
+ 	* config/i386/mmx.md (mmx_andnot<MMXMODEI:mode>3):
+ 	Add alternative using 64bit general registers.
+ 	(*mmx_<any_logic:code><MMXMODEI:mode>3): Ditto.
+ 
+ 2021-05-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/99928
+ 	* tree.h (OMP_MASTER_COMBINED): Define.
+ 	* gimplify.c (gimplify_scan_omp_clauses): Rewrite lastprivate
+ 	handling for outer combined/composite constructs to a loop.
+ 	Handle lastprivate on combined target.
+ 	(gimplify_expr): Formatting fix.
+ 
+ 2021-05-19  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	* passes.def: Add sink_code pass before store_merging.
+ 	* tree-ssa-sink.c (pass_sink_code:clone): New.
+ 
+ 2021-05-18  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/freebsd64.h (ADJUST_FIELD_ALIGN): Remove call to
+ 	rs6000_special_adjust_field_align_p.
+ 	* config/rs6000/linux64.h (ADJUST_FIELD_ALIGN): Likewise.
+ 	* config/rs6000/rs6000-call.c (rs6000_function_arg_boundary):
+ 	Remove ABI warning.
+ 	(rs6000_function_arg): Likewise.
+ 	* config/rs6000/rs6000-protos.h
+ 	(rs6000_special_adjust_field_align_p): Remove prototype.
+ 	* config/rs6000/rs6000.c (rs6000_special_adjust_field_align_p):
+ 	Remove.
+ 	* config/rs6000/sysv4.h (ADJUST_FIELD_ALIGN): Remove call to
+ 	rs6000_special_adjust_field_align_p.
+ 
+ 2021-05-18  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100637
+ 	* config/i386/i386.h (VALID_SSE2_REG_MODE):
+ 	Add V4QI and V2HI modes.
+ 	(VALID_INT_MODE_P): Ditto.
+ 	* config/i386/mmx.md (VI_32): New mode iterator.
+ 	(mmxvecsize): Handle V4QI and V2HI.
+ 	(Yv_Yw): Ditto.
+ 	(mov<VI_32:mode>): New expander.
+ 	(*mov<mode>_internal): New insn pattern.
+ 	(movmisalign<VI_32:mode>): New expander.
+ 	(neg<VI_32:mode>): New expander.
+ 	(<plusminus:insn><VI_32:mode>3): New expander.
+ 	(*<plusminus:insn><VI_32:mode>3): New insn pattern.
+ 	(mulv2hi3): New expander.
+ 	(*mulv2hi3): New insn pattern.
+ 	(one_cmpl<VI_32:mode>2): New expander.
+ 	(*andnot<VI_32:mode>3): New insn pattern.
+ 	(<any_logic:code><VI_32:mode>3): New expander.
+ 	(*<any_logic:code><VI_32:mode>3): New insn pattern.
+ 
+ 2021-05-18  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/sse.md (<any_extend:insn>v4qiv4di2):
+ 	Fix a mode mismatch with operand 1.
+ 
+ 2021-05-18  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100626
+ 	* config/i386/i386-expand.c (split_double_mode): Return
+ 	temporary register when simplify_gen_subreg fails with
+ 	the high half od the paradoxical subreg.
+ 
+ 2021-05-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	* cfgexpand.c (expand_one_var): Pass in forced_stack_var
+ 	and honor it when expanding.
+ 	(expand_used_vars_for_block): Pass through forced_stack_var.
+ 	(expand_used_vars): Likewise.
+ 	(discover_nonconstant_array_refs_r): Set bits in
+ 	forced_stack_vars instead of marking vars TREE_ADDRESSABLE.
+ 	(avoid_type_punning_on_regs): Likewise.
+ 	(discover_nonconstant_array_refs): Likewise.
+ 	(pass_expand::execute): Create and pass down forced_stack_var
+ 	bitmap.  For parameters and returns temporarily set
+ 	TREE_ADDRESSABLE when expand_function_start.
+ 
+ 2021-05-18  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* doc/sourcebuild.texi: Document 'dg-note'.
+ 
+ 2021-05-18  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	PR other/100598
+ 	* configure: Regenerate.
+ 	* configure.ac (BUILD_CFLAG, BUILD_CXXFLAGS): Add $(CFLAGS-$@).
+ 
+ 2021-05-18  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* gimple.h (is_gimple_omp_oacc): Tighten.
+ 	* omp-low.c (check_omp_nesting_restrictions): Adjust.
+ 
+ 2021-05-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-operands.c (mark_address_taken): Simplify.
+ 
+ 2021-05-18  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/gcn/mkoffload.c (STR): Redefine.
+ 	* config/i386/intelmic-mkoffload.c (STR): Likewise.
+ 	* config/nvptx/mkoffload.c (STR): Likewise.
+ 
+ 2021-05-18  Martin Liska  <mliska@suse.cz>
+ 
+ 	* common/config/aarch64/aarch64-common.c (aarch64_parse_extension):
+ 	Use startswith function instead of strncmp.
+ 	* common/config/bfin/bfin-common.c (bfin_handle_option): Likewise.
+ 	* common/config/riscv/riscv-common.c (riscv_subset_list::parse): Likewise.
+ 	* config/aarch64/aarch64-sve-builtins-shapes.cc (parse_type): Likewise.
+ 	* config/aarch64/aarch64.c (aarch64_process_one_target_attr): Likewise.
+ 	* config/alpha/alpha.c (alpha_elf_section_type_flags): Likewise.
+ 	* config/arm/aarch-common.c (arm_md_asm_adjust): Likewise.
+ 	* config/arm/arm.c (arm_file_start): Likewise.
+ 	(arm_valid_target_attribute_rec): Likewise.
+ 	(thumb1_md_asm_adjust): Likewise.
+ 	* config/arm/driver-arm.c (host_detect_local_cpu): Likewise.
+ 	* config/avr/avr.c (STR_PREFIX_P): Likewise.
+ 	(avr_set_current_function): Likewise.
+ 	(avr_handle_addr_attribute): Likewise.
+ 	(avr_asm_output_aligned_decl_common): Likewise.
+ 	(avr_asm_named_section): Likewise.
+ 	(avr_section_type_flags): Likewise.
+ 	(avr_asm_select_section): Likewise.
+ 	* config/c6x/c6x.c (c6x_in_small_data_p): Likewise.
+ 	(c6x_section_type_flags): Likewise.
+ 	* config/darwin-c.c (darwin_cfstring_ref_p): Likewise.
+ 	(darwin_objc_declare_unresolved_class_reference): Likewise.
+ 	(darwin_objc_declare_class_definition): Likewise.
+ 	* config/darwin.c (indirect_data): Likewise.
+ 	(darwin_encode_section_info): Likewise.
+ 	(darwin_objc2_section): Likewise.
+ 	(darwin_objc1_section): Likewise.
+ 	(machopic_select_section): Likewise.
+ 	(darwin_globalize_label): Likewise.
+ 	(darwin_label_is_anonymous_local_objc_name): Likewise.
+ 	(darwin_asm_named_section): Likewise.
+ 	(darwin_asm_output_dwarf_offset): Likewise.
+ 	* config/frv/frv.c (frv_string_begins_with): Likewise.
+ 	(frv_in_small_data_p): Likewise.
+ 	* config/gcn/mkoffload.c (STR): Likewise.
+ 	(main): Likewise.
+ 	* config/i386/i386-builtins.c (get_builtin_code_for_version): Likewise.
+ 	* config/i386/i386-options.c (ix86_option_override_internal): Likewise.
+ 	* config/i386/i386.c (x86_64_elf_section_type_flags): Likewise.
+ 	(ix86_md_asm_adjust): Likewise.
+ 	* config/i386/intelmic-mkoffload.c (STR): Likewise.
+ 	* config/i386/winnt.c (i386_pe_asm_named_section): Likewise.
+ 	(i386_pe_file_end): Likewise.
+ 	* config/ia64/ia64.c (ia64_in_small_data_p): Likewise.
+ 	(ia64_section_type_flags): Likewise.
+ 	* config/mips/driver-native.c (host_detect_local_cpu): Likewise.
+ 	* config/mips/mips.c (mips_handle_interrupt_attr): Likewise.
+ 	(mips16_stub_function_p): Likewise.
+ 	(mips_function_rodata_section): Likewise.
+ 	* config/msp430/msp430.c (msp430_mcu_name): Likewise.
+ 	(msp430_function_section): Likewise.
+ 	(msp430_section_type_flags): Likewise.
+ 	(msp430_expand_helper): Likewise.
+ 	* config/nios2/nios2.c (nios2_small_section_name_p): Likewise.
+ 	(nios2_valid_target_attribute_rec): Likewise.
+ 	* config/nvptx/mkoffload.c (process): Likewise.
+ 	(STR): Likewise.
+ 	* config/pa/som.h: Likewise.
+ 	* config/pdp11/pdp11.c (pdp11_output_ident): Likewise.
+ 	* config/riscv/riscv.c (riscv_elf_select_rtx_section): Likewise.
+ 	* config/rs6000/rs6000.c (VTABLE_NAME_P): Likewise.
+ 	(rs6000_inner_target_options): Likewise.
+ 	* config/s390/driver-native.c (s390_host_detect_local_cpu): Likewise.
+ 	* config/sparc/driver-sparc.c (host_detect_local_cpu): Likewise.
+ 	* config/vax/vax.c (vax_output_int_move): Likewise.
+ 	* config/vms/vms-ld.c (startswith): Likewise.
+ 	(process_args): Likewise.
+ 	(main): Likewise.
+ 	* config/vms/vms.c: Likewise.
+ 
+ 2021-05-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/100590
+ 	* regcprop.c (copyprop_hardreg_forward_1): Only DCE dead sets if
+ 	they are NONJUMP_INSN_P.
+ 
+ 2021-05-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/100580
+ 	* function.c (push_dummy_function): Set DECL_ARTIFICIAL and
+ 	DECL_ASSEMBLER_NAME on the fn_decl.
+ 
+ 2021-05-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/94589
+ 	* tree-ssa-phiopt.c (spaceship_replacement): Pattern match
+ 	phi result used in (res & ~1) == 0 comparison as res >= 0 as
+ 	res == 2 would be UB with -ffinite-math-only.
+ 
+ 2021-05-18  Martin Liska  <mliska@suse.cz>
+ 
+ 	* Makefile.in: genversion.o should depend on DATESTAMP.
+ 
+ 2021-05-18  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/simdext.md (negv2si2): Remove round bracket.
+ 
+ 2021-05-18  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Define
+ 	_Bool as macro expanding to _Bool.
+ 
+ 2021-05-18  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	PR c++/100281
+ 	* tree.c (build_reference_type_for_mode)
+ 	(build_pointer_type_for_mode): Pick pointer mode if MODE argument
+ 	is VOIDmode.
+ 	(build_reference_type, build_pointer_type): Invoke
+ 	build_*_type_for_mode with VOIDmode.
+ 
+ 2021-05-17  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/100512
+ 	* gimple-range-cache.cc (ranger_cache::set_global_range): Mark const
+ 	and non-zero pointer ranges as invariant.
+ 	* gimple-range.cc (gimple_ranger::range_of_stmt): Remove pointer
+ 	processing from here.
+ 
+ 2021-05-17  Tom de Vries  <tdevries@suse.de>
+ 
+ 	PR target/100497
+ 	* config/nvptx/nvptx-protos.h (nvptx_output_atomic_insn): Declare
+ 	* config/nvptx/nvptx.c (nvptx_output_barrier)
+ 	(nvptx_output_atomic_insn): New function.
+ 	(nvptx_print_operand): Add support for 'B'.
+ 	* config/nvptx/nvptx.md: Use nvptx_output_atomic_insn for atomic
+ 	insns.
+ 
+ 2021-05-17  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/100349
+ 	* vr-values.c (bounds_of_var_in_loop): Bail if scev returns
+ 	  NULL.
+ 
+ 2021-05-17  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/driver-aarch64.c (DEFAULT_ARCH): New.
+ 	(host_detect_local_cpu): Use it.
+ 
+ 2021-05-17  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Add 2 missing dots.
+ 
+ 2021-05-17  Marius Hillenbrand  <mhillen@linux.ibm.com>
+ 
+ 	PR bootstrap/100552
+ 	* configure.ac: Replace pattern substitution with call to sed.
+ 	* configure: Regenerate.
+ 
+ 2021-05-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/100582
+ 	* tree.c (array_at_struct_end_p): Get to the base of the
+ 	reference before looking for the underlying decl.
+ 
+ 2021-05-17  Joern Rennecke  <joern.rennecke@embecosm.com>
+ 
+ 	* genoutput.c (validate_insn_alternatives) Make "wrong number of
+ 	alternatives" message more specific, and remove assumption on where
+ 	the problem is.
+ 
+ 2021-05-17  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/iterators.md (V16): New iterator.
+ 	(VH_cvtto): New iterator.
+ 	(v_cmp_result): Added V4HF and V8HF support.
+ 	* config/arm/vec-common.md (vec_cmp<mode><v_cmp_result>): Use VDQWH.
+ 	(vcond<mode><mode>): Likewise.
+ 	(vcond_mask_<mode><v_cmp_result>): Likewise.
+ 	(vcond<VH_cvtto><mode>): New expander.
+ 
+ 2021-05-17  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/arm-protos.h (arm_expand_vector_compare): Update
+ 	prototype.
+ 	* config/arm/arm.c (arm_expand_vector_compare): Add support for
+ 	MVE.
+ 	(arm_expand_vcond): Likewise.
+ 	* config/arm/iterators.md (supf): Remove VCMPNEQ_S, VCMPEQQ_S,
+ 	VCMPEQQ_N_S, VCMPNEQ_N_S.
+ 	(VCMPNEQ, VCMPEQQ, VCMPEQQ_N, VCMPNEQ_N): Remove.
+ 	* config/arm/mve.md (@mve_vcmp<mve_cmp_op>q_<mode>): Add '@' prefix.
+ 	(@mve_vcmp<mve_cmp_op>q_f<mode>): Likewise.
+ 	(@mve_vcmp<mve_cmp_op>q_n_f<mode>): Likewise.
+ 	(@mve_vpselq_<supf><mode>): Likewise.
+ 	(@mve_vpselq_f<mode>"): Likewise.
+ 	* config/arm/neon.md (vec_cmp<mode><v_cmp_result): Enable for MVE
+ 	and move to vec-common.md.
+ 	(vec_cmpu<mode><mode>): Likewise.
+ 	(vcond<mode><mode>): Likewise.
+ 	(vcond<V_cvtto><mode>): Likewise.
+ 	(vcondu<mode><v_cmp_result>): Likewise.
+ 	(vcond_mask_<mode><v_cmp_result>): Likewise.
+ 	* config/arm/unspecs.md (VCMPNEQ_U, VCMPNEQ_S, VCMPEQQ_S)
+ 	(VCMPEQQ_N_S, VCMPNEQ_N_S, VCMPEQQ_U, CMPEQQ_N_U, VCMPNEQ_N_U)
+ 	(VCMPGEQ_N_S, VCMPGEQ_S, VCMPGTQ_N_S, VCMPGTQ_S, VCMPLEQ_N_S)
+ 	(VCMPLEQ_S, VCMPLTQ_N_S, VCMPLTQ_S, VCMPCSQ_N_U, VCMPCSQ_U)
+ 	(VCMPHIQ_N_U, VCMPHIQ_U): Remove.
+ 	* config/arm/vec-common.md (vec_cmp<mode><v_cmp_result): Moved
+ 	from neon.md.
+ 	(vec_cmpu<mode><mode>): Likewise.
+ 	(vcond<mode><mode>): Likewise.
+ 	(vcond<V_cvtto><mode>): Likewise.
+ 	(vcondu<mode><v_cmp_result>): Likewise.
+ 	(vcond_mask_<mode><v_cmp_result>): Likewise. Added unsafe math
+ 	condition.
+ 
+ 2021-05-17  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/100549
+ 	* config/i386/i386.c (ix86_gimple_fold_builtin): Use
+ 	gsi_insert_seq_before instead.
+ 
+ 2021-05-17  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* doc/sourcebuild.texi (arm_qbit_ok): Rename into...
+ 	(arm_sat_ok): ...this.
+ 
+ 2021-05-17  Martin Liska  <mliska@suse.cz>
+ 
+ 	* lto-wrapper.c (merge_flto_options): Factor out a new function.
+ 	(merge_and_complain): Use it.
+ 	(run_gcc): Merge also linker command line -flto=foo argument
+ 	with IL files.
+ 
+ 2021-05-16  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/arm.h (CPP_SPEC): Remove error message about
+ 	-mlittle-endian/-mbig-endian conflict.
+ 
+ 2021-05-15  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Define
+ 	__ROP_PROTECT__ if -mrop-protect is selected.
+ 
+ 2021-05-15  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-internal.h (rs6000_stack): Add
+ 	rop_hash_save_offset and rop_hash_size.
+ 	* config/rs6000/rs6000-logue.c (rs6000_stack_info): Compute
+ 	rop_hash_size and rop_hash_save_offset.
+ 	(debug_stack_info): Dump rop_hash_save_offset and rop_hash_size.
+ 	(rs6000_emit_prologue): Emit hashst[p] in prologue.
+ 	(rs6000_emit_epilogue): Emit hashchk[p] in epilogue.
+ 	* config/rs6000/rs6000.md (unspec): Add UNSPEC_HASHST and
+ 	UNSPEC_HASHCHK.
+ 	(hashst): New define_insn.
+ 	(hashchk): Likewise.
+ 
+ 2021-05-15  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_option_override_internal):
+ 	Disable shrink wrap when inserting ROP-protect instructions.
+ 	* config/rs6000/rs6000.opt (mrop-protect): New option.
+ 	(mprivileged): Likewise.
+ 	* doc/invoke.texi: Document mrop-protect and mprivileged.
+ 
+ 2021-05-15  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* reorg.c (fill_slots_from_thread): Reinstate code typoed out in
+ 	"Remove CC0".
+ 
+ 2021-05-15  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Revert:
+ 	2021-05-13  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/100453
+ 	* tree-sra.c (sra_modify_assign): All const base accesses do not
+ 	need refreshing, not just those from decl_pool.
+ 	(sra_modify_assign): Do not refresh into a const base decl.
+ 
+ 2021-05-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/100342
+ 	* regcprop.c (copy_value): When copying a source reg in a wider
+ 	mode than it has recorded for the value, adjust recorded destination
+ 	mode too or punt if !REG_CAN_CHANGE_MODE_P.
+ 
+ 2021-05-14  Jason Merrill  <jason@redhat.com>
+ 
+ 	* intl.h: Add comments.
+ 
+ 2021-05-14  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md
+ 	(aarch64_sqdml<SBINQOPS:as>l2_lane<mode>_internal): Split into...
+ 	(aarch64_sqdmlsl2_lane<mode>_internal): ... This...
+ 	(aarch64_sqdmlal2_lane<mode>_internal): ... And this.
+ 	(aarch64_sqdml<SBINQOPS:as>l2_laneq<mode>_internal): Split into ...
+ 	(aarch64_sqdmlsl2_laneq<mode>_internal): ... This...
+ 	(aarch64_sqdmlal2_laneq<mode>_internal): ... And this.
+ 	(aarch64_sqdml<SBINQOPS:as>l2_n<mode>_internal): Split into...
+ 	(aarch64_sqdmlsl2_n<mode>_internal): ... This...
+ 	(aarch64_sqdmlal2_n<mode>_internal): ... And this.
+ 
+ 2021-05-14  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	PR target/66791
+ 	* config/arm/arm_neon.h (vtst_s8): Replace call to vtst builtin with it's
+ 	boolean logic equivalent.
+ 	(vtst_s16): Likewise.
+ 	(vtst_s32): Likewise.
+ 	(vtst_u8): Likewise.
+ 	(vtst_u16): Likewise.
+ 	(vtst_u32): Likewise.
+ 	(vtst_p8): Likewise.
+ 	(vtst_p16): Likewise.
+ 	(vtstq_s8): Likewise.
+ 	(vtstq_s16): Likewise.
+ 	(vtstq_s32): Likewise.
+ 	(vtstq_u8): Likewise.
+ 	(vtstq_u16): Likewise.
+ 	(vtstq_u32): Likewise.
+ 	(vtstq_p8): Likewise.
+ 	(vtstq_p16): Likewise.
+ 	* config/arm/arm_neon_builtins.def: Remove entry for vtst.
+ 	* config/arm/neon.md (neon_vtst<mode>): Remove pattern.
+ 
+ 2021-05-14  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_sqdmlal2<mode>): Merge into...
+ 	(aarch64_sqdml<SBINQOPS:as>l2<mode>): ... This.
+ 	(aarch64_sqdmlsl2<mode>): Delete.
+ 	(aarch64_sqdmlal2_lane<mode>): Merge this...
+ 	(aarch64_sqdmlsl2_lane<mode>): ... And this...
+ 	(aarch64_sqdml<SBINQOPS:as>l2_lane<mode>): ... Into this.
+ 	(aarch64_sqdmlal2_laneq<mode>): Merge this...
+ 	(aarch64_sqdmlsl2_laneq<mode>): ... And this...
+ 	(aarch64_sqdml<SBINQOPS:as>l2_laneq<mode>): ... Into this.
+ 	(aarch64_sqdmlal2_n<mode>): Merge this...
+ 	(aarch64_sqdmlsl2_n<mode>): ... And this...
+ 	(aarch64_sqdml<SBINQOPS:as>l2_n<mode>): ... Into this.
+ 
+ 2021-05-13  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/100574
+ 	* builtins.c (access_ref::get_ref): Improve detection of PHIs with
+ 	all null arguments.
+ 
+ 2021-05-13  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR tree-optimization/93100
+ 	PR middle-end/98583
+ 	* tree-ssa-uninit.c (check_defs): Exclude intrinsic functions that
+ 	don't modify referenced objects.
+ 
+ 2021-05-13  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/100453
+ 	* tree-sra.c (sra_modify_assign): All const base accesses do not
+ 	need refreshing, not just those from decl_pool.
+ 	(sra_modify_assign): Do not refresh into a const base decl.
+ 
+ 2021-05-13  Martin Liska  <mliska@suse.cz>
+ 
+ 	* tree-ssa-dom.c: Remove m_simplifier.
+ 
+ 2021-05-13  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/100563
+ 	* config/arm/arm.c (arm_canonicalize_comparison): Correctly
+ 	canonicalize DImode inequality comparisons against the
+ 	maximum integral value.
+ 
+ 2021-05-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/98856
+ 	* config/i386/i386.c (ix86_shift_rotate_cost): Add CODE argument.
+ 	Expect V2DI and V4DI arithmetic right shifts to be emulated.
+ 	(ix86_rtx_costs, ix86_add_stmt_cost): Adjust ix86_shift_rotate_cost
+ 	caller.
+ 	* config/i386/i386-expand.c (expand_vec_perm_2perm_interleave,
+ 	expand_vec_perm_2perm_pblendv): New functions.
+ 	(ix86_expand_vec_perm_const_1): Use them.
+ 	* config/i386/sse.md (ashr<mode>3<mask_name>): Rename to ...
+ 	(<mask_codefor>ashr<mode>3<mask_name>): ... this.
+ 	(ashr<mode>3): New define_expand with VI248_AVX512BW iterator.
+ 	(ashrv4di3): New define_expand.
+ 	(ashrv2di3): Change condition to TARGET_SSE2, handle !TARGET_XOP
+ 	and !TARGET_AVX512VL expansion.
+ 
+ 2021-05-13  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100581
+ 	* config/i386/i386-expand.c (ix86_expand_sse_movcc): Force mode
+ 	sizes < 16 to a register when constructing vpcmov pattern.
+ 	* config/i386/mmx.md (*xop_pcmov_<mode>): Use MMXMODE124 mode.
+ 
+ 2021-05-13  Martin Liska  <mliska@suse.cz>
+ 
+ 	* gcov-io.c (gcov_write_block): Remove.
+ 	(gcov_write_words): Likewise.
+ 	(gcov_read_words): Re-implement using gcov_read_bytes.
+ 	(gcov_allocate): Remove.
+ 	(GCOV_BLOCK_SIZE): Likewise.
+ 	(struct gcov_var): Remove most of the fields.
+ 	(gcov_position): Implement with ftell.
+ 	(gcov_rewrite): Remove setting of start and offset fields.
+ 	(from_file): Re-format.
+ 	(gcov_open): Remove setbuf call. It should not be needed.
+ 	(gcov_close): Remove internal buffer handling.
+ 	(gcov_magic): Use __builtin_bswap32.
+ 	(gcov_write_counter): Use directly gcov_write_unsigned.
+ 	(gcov_write_string): Use direct fwrite and do not round
+ 	to 4 bytes.
+ 	(gcov_seek): Use directly fseek.
+ 	(gcov_write_tag): Use gcov_write_unsigned directly.
+ 	(gcov_write_length): Likewise.
+ 	(gcov_write_tag_length): Likewise.
+ 	(gcov_read_bytes): Use directly fread.
+ 	(gcov_read_unsigned): Use gcov_read_words.
+ 	(gcov_read_counter): Likewise.
+ 	(gcov_read_string): Use gcov_read_bytes.
+ 	* gcov-io.h (GCOV_WORD_SIZE): Adjust to reflect
+ 	that size is not in bytes, but words (4B).
+ 	(GCOV_TAG_FUNCTION_LENGTH): Likewise.
+ 	(GCOV_TAG_ARCS_LENGTH): Likewise.
+ 	(GCOV_TAG_ARCS_NUM): Likewise.
+ 	(GCOV_TAG_COUNTER_LENGTH): Likewise.
+ 	(GCOV_TAG_COUNTER_NUM): Likewise.
+ 	(GCOV_TAG_SUMMARY_LENGTH): Likewise.
+ 
+ 2021-05-13  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/94680
+ 	* config/i386/sse.md (ssedoublevecmode): Add attribute for
+ 	V64QI/V32HI/V16SI/V4DI.
+ 	(ssehalfvecmode): Add attribute for V2DI/V2DF.
+ 	(*vec_concatv4si_0): Extend to VI124_128.
+ 	(*vec_concat<mode>_0): New pre-reload splitter.
+ 	* config/i386/predicates.md (movq_parallel): New predicate.
+ 
+ 2021-05-13  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* targhooks.c (default_zero_call_used_regs): Retry using
+ 	successfully-zeroed registers as sources.
+ 
+ 2021-05-12  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* omp-low.c (finish_taskreg_scan): Use the proper detach decl.
+ 
+ 2021-05-12  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR c/100521
+ 	* gimple-range.cc (range_of_builtin_call): Skip out on
+ 	  processing __builtin_clz when varying.
+ 
+ 2021-05-12  Tom de Vries  <tdevries@suse.de>
+ 
+ 	PR target/96005
+ 	* config/nvptx/nvptx-opts.h (enum ptx_version): New enum.
+ 	* config/nvptx/nvptx.c (nvptx_file_start): Print .version according
+ 	to ptx_version_option.
+ 	* config/nvptx/nvptx.h (TARGET_PTX_6_3): Define.
+ 	* config/nvptx/nvptx.md (define_insn "nvptx_shuffle<mode>")
+ 	(define_insn "nvptx_vote_ballot"): Use sync variant for
+ 	TARGET_PTX_6_3.
+ 	* config/nvptx/nvptx.opt (ptx_version): Add enum.
+ 	(mptx): Add option.
+ 	* doc/invoke.texi (Nvidia PTX Options): Add mptx item.
+ 
+ 2021-05-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100566
+ 	* tree-ssa-sccvn.c (dominated_by_p_w_unex): Properly handle
+ 	allow_back for all edge queries.
+ 
+ 2021-05-12  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/99908
+ 	* config/i386/sse.md (<sse4_1_avx2>_pblendvb): Add
+ 	splitters for pblendvb of NOT mask register.
+ 
+ 2021-05-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100519
+ 	* tree-ssa-reassoc.c (can_associate_p): Split into...
+ 	(can_associate_op_p): ... this
+ 	(can_associate_type_p): ... and this.
+ 	(is_reassociable_op): Call can_associate_op_p.
+ 	(break_up_subtract_bb): Call the appropriate predicates.
+ 	(reassociate_bb): Likewise.
+ 
+ 2021-05-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	* lto-wrapper.c (merge_and_complain): Merge -flto=arg options.
+ 	(run_gcc): Use -flto argument detection for merged
+ 	fdecoded_options.
+ 
+ 2021-05-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	* lto-wrapper.c (print_lto_docs_link): New function.
+ 	(run_gcc): Print warning about missing job server detection
+ 	after we know NR of partitions. Do the same for -flto{,=1}.
+ 	* opts.c (get_option_html_page): Support -flto option.
+ 
+ 2021-05-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	* lto-wrapper.c (get_options_from_collect_gcc_options): Change
+ 	return type.
+ 	(append_option): Remove.
+ 	(find_option): Rework to use the vector type.
+ 	(remove_option): Remove.
+ 	(merge_and_complain): Use vectors for cl_decoded_option data
+ 	type arguments.
+ 	(append_compiler_options): Likewise.
+ 	(append_diag_options): Likewise.
+ 	(append_linker_options): Likewise.
+ 	(append_offload_options): Likewise.
+ 	(compile_offload_image): Likewise.
+ 	(compile_images_for_offload_targets): Likewise.
+ 	(find_and_merge_options): Likewise.
+ 	(run_gcc): Likewise.
+ 
+ 2021-05-12  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+ 
+ 	PR debug/100515
+ 	* dwarf2out.c (dwarf2out_finish): Set
+ 	have_multiple_function_sections with multi-range text_section.
+ 
+ 2021-05-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR bootstrap/100560
+ 	* Makefile.in: Remove version.h from linker command line.
+ 
+ 2021-05-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/100547
+ 	* rtl.h (rtvec_alloc): Make argument size_t.
+ 	* rtl.c (rtvec_alloc): Verify the count is less than INT_MAX.
+ 
+ 2021-05-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/100508
+ 	* cfgexpand.c (expand_debug_expr): For DEBUG_EXPR_DECL with vector
+ 	type, don't reuse DECL_RTL if it has different mode, instead force
+ 	creation of a new DEBUG_EXPR.
+ 
+ 2021-05-12  Jakub Jelinek  <jakub@redhat.com>
+ 	    Marc Glisse  <marc.glisse@inria.fr>
+ 
+ 	PR tree-optimization/94589
+ 	* match.pd ((X & Y) == X -> (X & ~Y) == 0,
+ 	(X | Y) == Y -> (X & ~Y) == 0): New GIMPLE simplifications.
+ 
+ 2021-05-12  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/98218
+ 	* config/i386/i386-expand.c (ix86_expand_sse_movcc): Handle V2SF mode.
+ 	* config/i386/mmx.md (MMXMODE124): New mode iterator.
+ 	(V2FI): Ditto.
+ 	(mmxintvecmode): New mode attribute.
+ 	(mmxintvecmodelower): Ditto.
+ 	(*mmx_maskcmpv2sf3_comm): New insn pattern.
+ 	(*mmx_maskcmpv2sf3): Ditto.
+ 	(vec_cmpv2sfv2si): New expander.
+ 	(vcond<V2FI:mode>v2si): Ditto.
+ 	(mmx_vlendvps): New insn pattern.
+ 	(vcond<MMXMODE124:mode><MMXMODEI:mode>): Also handle V2SFmode.
+ 	(vcondu<MMXMODE124:mode><MMXMODEI:mode>): Ditto.
+ 	(vcond_mask_<mode><mmxintvecmodelower>): Ditto.
+ 
+ 2021-05-11  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/21433
+ 	* expr.c (expand_expr_real_1): Replace unreachable code with an assert.
+ 
+ 2021-05-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple-fold.c (gimple_fold_call): Do not call
+ 	maybe_fold_reference on call arguments or the static chain.
+ 	(fold_stmt_1): Do not call maybe_fold_reference on GIMPLE_ASM
+ 	inputs.
+ 
+ 2021-05-11  Martin Liska  <mliska@suse.cz>
+ 
+ 	* builtins.def (DEF_HSAIL_BUILTIN): Remove.
+ 	(DEF_HSAIL_ATOMIC_BUILTIN): Likewise.
+ 	(DEF_HSAIL_SAT_BUILTIN): Likewise.
+ 	(DEF_HSAIL_INTR_BUILTIN): Likewise.
+ 	(DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN): Likewise.
+ 	* doc/frontends.texi: Remove BRIG.
+ 	* doc/install.texi: Likewise.
+ 	* doc/invoke.texi: Likewise.
+ 	* doc/standards.texi: Likewise.
+ 	* brig-builtins.def: Removed.
+ 	* brig/ChangeLog: Removed.
+ 	* brig/Make-lang.in: Removed.
+ 	* brig/brig-builtins.h: Removed.
+ 	* brig/brig-c.h: Removed.
+ 	* brig/brig-lang.c: Removed.
+ 	* brig/brigfrontend/brig-arg-block-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-atomic-inst-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-basic-inst-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-branch-inst-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-cmp-inst-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-code-entry-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-code-entry-handler.h: Removed.
+ 	* brig/brigfrontend/brig-comment-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-control-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-copy-move-inst-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-cvt-inst-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-fbarrier-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-function-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-function.cc: Removed.
+ 	* brig/brigfrontend/brig-function.h: Removed.
+ 	* brig/brigfrontend/brig-inst-mod-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-label-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-lane-inst-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-machine.c: Removed.
+ 	* brig/brigfrontend/brig-machine.h: Removed.
+ 	* brig/brigfrontend/brig-mem-inst-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-module-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-queue-inst-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-seg-inst-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-signal-inst-handler.cc: Removed.
+ 	* brig/brigfrontend/brig-to-generic.cc: Removed.
+ 	* brig/brigfrontend/brig-to-generic.h: Removed.
+ 	* brig/brigfrontend/brig-util.cc: Removed.
+ 	* brig/brigfrontend/brig-util.h: Removed.
+ 	* brig/brigfrontend/brig-variable-handler.cc: Removed.
+ 	* brig/brigfrontend/hsa-brig-format.h: Removed.
+ 	* brig/brigfrontend/phsa.h: Removed.
+ 	* brig/brigspec.c: Removed.
+ 	* brig/config-lang.in: Removed.
+ 	* brig/gccbrig.texi: Removed.
+ 	* brig/lang-specs.h: Removed.
+ 	* brig/lang.opt: Removed.
+ 
+ 2021-05-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/100513
+ 	* ipa-param-manipulation.c
+ 	(ipa_param_body_adjustments::modify_call_stmt): Avoid
+ 	altering SSA_NAME_DEF_STMT by adjusting the calls LHS
+ 	via gimple_call_lhs_ptr.
+ 
+ 2021-05-11  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR target/99725
+ 	* config/arm/arm.c (cmse_nonsecure_call_inline_register_clear):
+ 	Avoid emitting CFA adjusts on the sp if we have the fp.
+ 
+ 2021-05-11  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/iterators.md (VMUL_CHANGE_NLANES): Delete.
+ 	(VMULD): New iterator.
+ 	(VCOND): Handle V4HF and V8HF.
+ 	(VCONQ): Fix entry for V2SF.
+ 	* config/aarch64/aarch64-simd.md (mul_lane<mode>3): Use VMULD
+ 	instead of VMUL.  Use a 64-bit vector mode for the indexed operand.
+ 	(*aarch64_mul3_elt_<vswap_width_name><mode>): Merge with...
+ 	(mul_laneq<mode>3): ...this define_insn.  Use VMUL instead of VDQSF.
+ 	Use a 128-bit vector mode for the indexed operand.  Use stype for
+ 	the scheduling type.
+ 
+ 2021-05-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple-fold.c (maybe_fold_reference): Only return
+ 	is_gimple_min_invariant values.
+ 
+ 2021-05-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/100509
+ 	* gimple-fold.c (fold_gimple_assign): Only call
+ 	get_symbol_constant_value on register type symbols.
+ 
+ 2021-05-11  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+ 	    Joe Ramsay   <joe.ramsay@arm.com>
+ 
+ 	PR target/100419
+ 	* config/arm/arm_mve.h (__arm_vstrwq_scatter_offset): Fix wrong arguments.
+ 	(__arm_vcmpneq): Remove duplicate definition.
+ 	(__arm_vstrwq_scatter_offset_p): Likewise.
+ 	(__arm_vmaxq_x): Likewise.
+ 	(__arm_vmlsdavaq): Likewise.
+ 	(__arm_vmlsdavaxq): Likewise.
+ 	(__arm_vmlsdavq_p): Likewise.
+ 	(__arm_vmlsdavxq_p): Likewise.
+ 	(__arm_vrmlaldavhaq): Likewise.
+ 	(__arm_vstrbq_p): Likewise.
+ 	(__arm_vstrbq_scatter_offset): Likewise.
+ 	(__arm_vstrbq_scatter_offset_p): Likewise.
+ 	(__arm_vstrdq_scatter_offset): Likewise.
+ 	(__arm_vstrdq_scatter_offset_p): Likewise.
+ 	(__arm_vstrdq_scatter_shifted_offset): Likewise.
+ 	(__arm_vstrdq_scatter_shifted_offset_p): Likewise.
+ 
+ 2021-05-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/100471
+ 	* omp-low.c (lower_omp_task_reductions): For OMP_TASKLOOP, if data
+ 	is 0, bypass the reduction loop including
+ 	GOMP_taskgroup_reduction_unregister call.
+ 
+ 2021-05-11  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (struct rs6000_cost_data): New member
+ 	costing_for_scalar.
+ 	(rs6000_density_test): Early return if costing_for_scalar is true.
+ 	(rs6000_init_cost): Init costing_for_scalar of rs6000_cost_data.
+ 
+ 2021-05-11  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* doc/tm.texi: Regenerated.
+ 	* target.def (init_cost): Add new parameter costing_for_scalar.
+ 	* targhooks.c (default_init_cost): Adjust for new parameter.
+ 	* targhooks.h (default_init_cost): Likewise.
+ 	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Likewise.
+ 	(vect_compute_single_scalar_iteration_cost): Likewise.
+ 	(vect_analyze_loop_2): Likewise.
+ 	* tree-vect-slp.c (_bb_vec_info::_bb_vec_info): Likewise.
+ 	(vect_bb_vectorization_profitable_p): Likewise.
+ 	* tree-vectorizer.h (init_cost): Likewise.
+ 	* config/aarch64/aarch64.c (aarch64_init_cost): Likewise.
+ 	* config/i386/i386.c (ix86_init_cost): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_init_cost): Likewise.
+ 
+ 2021-05-11  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_vect_nonmem): Renamed to
+ 	vect_nonmem and moved into...
+ 	(struct rs6000_cost_data): ...here.
+ 	(rs6000_init_cost): Use vect_nonmem of cost_data instead.
+ 	(rs6000_add_stmt_cost): Likewise.
+ 	(rs6000_finish_cost): Likewise.
+ 
+ 2021-05-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* range-op.cc (get_bool_state): Adjust head comment.
+ 	(operator_not_equal::op1_range): Fix comment.
+ 	(operator_bitwise_xor::op1_range): Remove call to gcc_unreachable.
+ 
+ 2021-05-10  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/100425
+ 	PR middle-end/100510
+ 	* gimple-ssa-warn-alloca.c (pass_walloca::firast_time_p): Rename...
+ 	(pass_walloca::xlimit_certain_p): ...to this.
+ 	(pass_walloca::gate): Execute for any kind of handled warning.
+ 	(pass_walloca::execute): Avoid issuing "maybe" and "unbounded"
+ 	warnings when xlimit_certain_p is set.
+ 
+ 2021-05-10  Pat Haugen  <pthaugen@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_ira_change_pseudo_allocno_class):
+ 	Return ALTIVEC_REGS if that is best_class.
+ 	(rs6000_compute_pressure_classes): Add ALTIVEC_REGS.
+ 
+ 2021-05-10  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/arm.h (CPP_SPEC): Remove error message about
+ 	-mfloat-abi.
+ 
+ 2021-05-10  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* ipa-prop.h (IPA_NODE_REF): Removed.
+ 	(IPA_NODE_REF_GET_CREATE): Likewise.
+ 	(IPA_EDGE_REF): Likewise.
+ 	(IPA_EDGE_REF_GET_CREATE): Likewise.
+ 	(IS_VALID_JUMP_FUNC_INDEX): Likewise.
+ 	* ipa-cp.c (print_all_lattices): Replaced IPA_NODE_REF with a direct
+ 	use of ipa_node_params_sum.
+ 	(ipcp_versionable_function_p): Likewise.
+ 	(push_node_to_stack): Likewise.
+ 	(pop_node_from_stack): Likewise.
+ 	(set_single_call_flag): Replaced two IPA_NODE_REF with one single
+ 	direct use of ipa_node_params_sum.
+ 	(initialize_node_lattices): Replaced IPA_NODE_REF with a direct use of
+ 	ipa_node_params_sum.
+ 	(ipa_context_from_jfunc): Replaced IPA_EDGE_REF with a direct use of
+ 	ipa_edge_args_sum.
+ 	(ipcp_verify_propagated_values): Replaced IPA_NODE_REF with a direct
+ 	use of ipa_node_params_sum.
+ 	(self_recursively_generated_p): Likewise.
+ 	(propagate_scalar_across_jump_function): Likewise.
+ 	(propagate_context_across_jump_function): Replaced IPA_EDGE_REF with a
+ 	direct use of ipa_edge_args_sum, moved the lookup after the early
+ 	exit.  Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum.
+ 	(propagate_bits_across_jump_function): Replaced IPA_NODE_REF with
+ 	direct uses of ipa_node_params_sum.
+ 	(propagate_vr_across_jump_function): Likewise.
+ 	(propagate_aggregate_lattice): Likewise.
+ 	(propagate_aggs_across_jump_function): Likewise.
+ 	(propagate_constants_across_call): Likewise, also replaced
+ 	IPA_EDGE_REF with a direct use of ipa_edge_args_sum.
+ 	(good_cloning_opportunity_p): Replaced IPA_NODE_REF with a direct use
+ 	of ipa_node_params_sum.
+ 	(estimate_local_effects): Likewise.
+ 	(add_all_node_vals_to_toposort): Likewise.
+ 	(propagate_constants_topo): Likewise.
+ 	(ipcp_propagate_stage): Likewise.
+ 	(ipcp_discover_new_direct_edges): Likewise.
+ 	(calls_same_node_or_its_all_contexts_clone_p): Likewise.
+ 	(cgraph_edge_brings_value_p): Likewise (in both overloaded functions).
+ 	(get_info_about_necessary_edges): Likewise.
+ 	(want_remove_some_param_p): Likewise.
+ 	(create_specialized_node): Likewise.
+ 	(self_recursive_pass_through_p): Likewise.
+ 	(self_recursive_agg_pass_through_p): Likewise.
+ 	(find_more_scalar_values_for_callers_subset): Likewise and also
+ 	replaced IPA_EDGE_REF with direct uses of ipa_edge_args_sum, in one
+ 	case replacing two of those with a single query.
+ 	(find_more_contexts_for_caller_subset): Likewise for the
+ 	ipa_polymorphic_call_context overload.
+ 	(intersect_aggregates_with_edge): Replaced IPA_EDGE_REF with a direct
+ 	use of ipa_edge_args_sum.  Replaced IPA_NODE_REF with direct uses of
+ 	ipa_node_params_sum.
+ 	(find_aggregate_values_for_callers_subset): Likewise, also reusing
+ 	results of ipa_edge_args_sum->get.
+ 	(cgraph_edge_brings_all_scalars_for_node): Replaced IPA_NODE_REF with
+ 	direct uses of ipa_node_params_sum, replaced IPA_EDGE_REF with a
+ 	direct use of ipa_edge_args_sum.
+ 	(cgraph_edge_brings_all_agg_vals_for_node): Likewise, moved node
+ 	summary query after the early exit and reused the result later.
+ 	(decide_about_value): Replaced IPA_NODE_REF with a direct use of
+ 	ipa_node_params_sum.
+ 	(decide_whether_version_node): Likewise.  Removed re-querying for
+ 	summaries after cloning.
+ 	(spread_undeadness): Replaced IPA_NODE_REF with a direct use of
+ 	ipa_node_params_sum.
+ 	(has_undead_caller_from_outside_scc_p): Likewise, reusing results of
+ 	some queries.
+ 	(identify_dead_nodes): Likewise.
+ 	(ipcp_store_bits_results): Replaced IPA_NODE_REF with direct uses of
+ 	ipa_node_params_sum.
+ 	(ipcp_store_vr_results): Likewise.
+ 	* ipa-fnsummary.c (evaluate_properties_for_edge): Likewise.
+ 	(ipa_fn_summary_t::duplicate): Likewise.
+ 	(analyze_function_body): Likewise.
+ 	(estimate_calls_size_and_time): Likewise.
+ 	(ipa_cached_call_context::duplicate_from): Likewise.
+ 	(ipa_call_context::equal_to): Likewise.
+ 	(remap_edge_params): Likewise.
+ 	(ipa_merge_fn_summary_after_inlining): Likewise.
+ 	(inline_read_section): Likewise.
+ 	* ipa-icf.c (sem_function::param_used_p): Likewise.
+ 	* ipa-modref.c (compute_parm_map): Likewise.
+ 	(compute_parm_map): Replaced IPA_EDGE_REF with a direct use of
+ 	ipa_edge_args_sum.
+ 	(get_access_for_fnspec): Replaced IPA_NODE_REF with a direct use of
+ 	ipa_node_params_sum and replaced IPA_EDGE_REF with a direct use of
+ 	ipa_edge_args_sum.
+ 	* ipa-profile.c (check_argument_count): Likewise.
+ 	* ipa-prop.c (ipa_alloc_node_params): Replaced IPA_NODE_REF_GET_CREATE
+ 	with a direct use of ipa_node_params_sum.
+ 	(ipa_initialize_node_params): Likewise.
+ 	(ipa_print_node_jump_functions_for_edge): Replaced IPA_EDGE_REF with a
+ 	direct use of ipa_edge_args_sum and reused the query result.
+ 	(ipa_compute_jump_functions_for_edge): Replaced IPA_NODE_REF with a
+ 	direct use of ipa_node_params_sum and replaced IPA_EDGE_REF with a
+ 	direct use of ipa_edge_args_sum.
+ 	(ipa_note_param_call): Replaced IPA_NODE_REF with a direct use of
+ 	ipa_node_params_sum and reused the result of the query.
+ 	(ipa_analyze_node): Likewise.
+ 	(ipa_analyze_controlled_uses): Replaced IPA_NODE_REF with a direct use
+ 	of ipa_node_params_sum.
+ 	(update_jump_functions_after_inlining): Replaced IPA_EDGE_REF with
+ 	direct uses of ipa_edge_args_sum.
+ 	(update_indirect_edges_after_inlining): Replaced IPA_NODE_REF with
+ 	direct uses of ipa_node_params_sum and replaced IPA_EDGE_REF with a
+ 	direct use of ipa_edge_args_sum.  Removed superficial re-querying the
+ 	top edge summary.
+ 	(propagate_controlled_uses): Replaced IPA_NODE_REF with direct uses of
+ 	ipa_node_params_sum and replaced IPA_EDGE_REF with a direct use of
+ 	ipa_edge_args_sum.
+ 	(ipa_propagate_indirect_call_infos): Replaced IPA_EDGE_REF with a
+ 	direct use of ipa_edge_args_sum.
+ 	(ipa_edge_args_sum_t::duplicate): Replaced IPA_NODE_REF with a direct
+ 	use of ipa_node_params_sum.
+ 	(ipa_print_node_params): Likewise.
+ 	(ipa_write_node_info): Likewise and also replaced IPA_EDGE_REF with
+ 	direct uses of ipa_edge_args_sum.
+ 	(ipa_read_edge_info): Replaced IPA_EDGE_REF with a direct use of
+ 	ipa_edge_args_sum.
+ 	(ipa_read_node_info): Replaced IPA_NODE_REF with a direct use of
+ 	ipa_node_params_sum.
+ 	(ipa_prop_write_jump_functions): Likewise.  Move variable node to the
+ 	scopes where it is used.
+ 
+ 2021-05-10  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_sse_movcc)
+ 	<case E_V2SImode>: Force op_true to register.
+ 
+ 2021-05-10  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/iterators.md (MVE_FP_COMPARISONS): New.
+ 	* config/arm/mve.md (mve_vcmp<mve_cmp_op>q_f<mode>)
+ 	(mve_vcmp<mve_cmp_op>q_n_f<mode>): New, merge all vcmp_*f*
+ 	patterns.
+ 	(mve_vcmpeqq_f<mode>, mve_vcmpeqq_n_f<mode>, mve_vcmpgeq_f<mode>)
+ 	(mve_vcmpgeq_n_f<mode>, mve_vcmpgtq_f<mode>)
+ 	(mve_vcmpgtq_n_f<mode>, mve_vcmpleq_f<mode>)
+ 	(mve_vcmpleq_n_f<mode>, mve_vcmpltq_f<mode>)
+ 	(mve_vcmpltq_n_f<mode>, mve_vcmpneq_f<mode>)
+ 	(mve_vcmpneq_n_f<mode>): Remove.
+ 	* config/arm/unspecs.md (VCMPEQQ_F, VCMPEQQ_N_F, VCMPGEQ_F)
+ 	(VCMPGEQ_N_F, VCMPGTQ_F, VCMPGTQ_N_F, VCMPLEQ_F, VCMPLEQ_N_F)
+ 	(VCMPLTQ_F, VCMPLTQ_N_F, VCMPNEQ_F, VCMPNEQ_N_F): Remove.
+ 
+ 2021-05-10  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/iterators.md (MVE_COMPARISONS): New.
+ 	(mve_cmp_op): New.
+ 	(mve_cmp_type): New.
+ 	* config/arm/mve.md (mve_vcmp<mve_cmp_op>q_<mode>): New, merge all
+ 	mve_vcmp patterns.
+ 	(mve_vcmpneq_<mode>, mve_vcmpcsq_n_<mode>, mve_vcmpcsq_<mode>)
+ 	(mve_vcmpeqq_n_<mode>, mve_vcmpeqq_<mode>, mve_vcmpgeq_n_<mode>)
+ 	(mve_vcmpgeq_<mode>, mve_vcmpgtq_n_<mode>, mve_vcmpgtq_<mode>)
+ 	(mve_vcmphiq_n_<mode>, mve_vcmphiq_<mode>, mve_vcmpleq_n_<mode>)
+ 	(mve_vcmpleq_<mode>, mve_vcmpltq_n_<mode>, mve_vcmpltq_<mode>)
+ 	(mve_vcmpneq_n_<mode>, mve_vcmpltq_n_<mode>, mve_vcmpltq_<mode>)
+ 	(mve_vcmpneq_n_<mode>): Remove.
+ 
+ 2021-05-10  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/arm_mve.h (__arm_vcmp*): Remove 's' suffix.
+ 	* config/arm/arm_mve_builtins.def (vcmp*): Remove 's' suffix.
+ 	* config/arm/mve.md (mve_vcmp*): Remove 's' suffix in pattern
+ 	names.
+ 
+ 2021-05-10  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/arm_mve_builtins.def (vcmpneq_u): Remove.
+ 	(vcmpneq_n_u): Likewise.
+ 	(vcmpeqq_u,): Likewise.
+ 	(vcmpeqq_n_u): Likewise.
+ 	* config/arm/iterators.md (supf): Remove VCMPNEQ_U, VCMPEQQ_U,
+ 	VCMPEQQ_N_U and VCMPNEQ_N_U.
+ 	* config/arm/mve.md (mve_vcmpneq): Remove <supf> iteration.
+ 	(mve_vcmpeqq_n): Likewise.
+ 	(mve_vcmpeqq): Likewise.
+ 	(mve_vcmpneq_n): Likewise.
+ 
+ 2021-05-10  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/arm_mve.h (__arm_vcmpeq*u*, __arm_vcmpne*u*): Call
+ 	the 's' version of the builtin.
+ 
+ 2021-05-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100492
+ 	* tree-loop-distribution.c (find_seed_stmts_for_distribution):
+ 	Find nothing when the loop contains an irreducible region.
+ 
+ 2021-05-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/100464
+ 	PR c++/100468
+ 	* gimple-fold.c (canonicalize_constructor_val): Do not set
+ 	TREE_ADDRESSABLE.
+ 
+ 2021-05-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100434
+ 	* tree-ssa-dse.c (initialize_ao_ref_for_dse): Handle
+ 	call LHS.
+ 	(dse_optimize_stmt): Handle call LHS by dropping the
+ 	LHS or the whole call if it doesn't have other
+ 	side-effects.
+ 	(pass_dse::execute): Adjust.
+ 
+ 2021-05-10  Martin Liska  <mliska@suse.cz>
+ 
+ 	* Makefile.in: Add missing genversion rule.
+ 
+ 2021-05-10  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR target/99960
+ 	* config/arm/mve.md (*mve_mov<mode>): Simplify output code. Use
+ 	vldrw.u32 and vstrw.32 for V2D[IF]mode loads and stores.
+ 
+ 2021-05-10  Martin Liska  <mliska@suse.cz>
+ 
+ 	* builtins.c (is_builtin_name): Use startswith
+ 	function instead of strncmp.
+ 	* collect2.c (main): Likewise.
+ 	(has_lto_section): Likewise.
+ 	(scan_libraries): Likewise.
+ 	* coverage.c (coverage_checksum_string): Likewise.
+ 	(coverage_init): Likewise.
+ 	* dwarf2out.c (is_cxx): Likewise.
+ 	(gen_compile_unit_die): Likewise.
+ 	* gcc-ar.c (main): Likewise.
+ 	* gcc.c (init_spec): Likewise.
+ 	(read_specs): Likewise.
+ 	(execute): Likewise.
+ 	(check_live_switch): Likewise.
+ 	* genattrtab.c (write_attr_case): Likewise.
+ 	(IS_ATTR_GROUP): Likewise.
+ 	* gencfn-macros.c (main): Likewise.
+ 	* gengtype.c (type_for_name): Likewise.
+ 	(gen_rtx_next): Likewise.
+ 	(get_file_langdir): Likewise.
+ 	(write_local): Likewise.
+ 	* genmatch.c (get_operator): Likewise.
+ 	(get_operand_type): Likewise.
+ 	(expr::gen_transform): Likewise.
+ 	* genoutput.c (validate_optab_operands): Likewise.
+ 	* incpath.c (add_sysroot_to_chain): Likewise.
+ 	* langhooks.c (lang_GNU_C): Likewise.
+ 	(lang_GNU_CXX): Likewise.
+ 	(lang_GNU_Fortran): Likewise.
+ 	(lang_GNU_OBJC): Likewise.
+ 	* lto-wrapper.c (run_gcc): Likewise.
+ 	* omp-general.c (omp_max_simt_vf): Likewise.
+ 	* omp-low.c (omp_runtime_api_call): Likewise.
+ 	* opts-common.c (parse_options_from_collect_gcc_options): Likewise.
+ 	* read-rtl-function.c (function_reader::read_rtx_operand_r): Likewise.
+ 	* real.c (real_from_string): Likewise.
+ 	* selftest.c (assert_str_startswith): Likewise.
+ 	* timevar.c (timer::validate_phases): Likewise.
+ 	* tree.c (get_file_function_name): Likewise.
+ 	* ubsan.c (ubsan_use_new_style_p): Likewise.
+ 	* varasm.c (default_function_rodata_section): Likewise.
+ 	(incorporeal_function_p): Likewise.
+ 	(default_section_type_flags): Likewise.
+ 	* system.h (startswith): Define startswith.
+ 
+ 2021-05-10  Martin Liska  <mliska@suse.cz>
+ 
+ 	* bitmap.h (class auto_bitmap): Remove
+ 	__cplusplus >= 201103.
+ 	* config/aarch64/aarch64.c: Likewise.
+ 	* gimple-ssa-store-merging.c (store_immediate_info::store_immediate_info):
+ 	Likewise.
+ 	* sbitmap.h: Likewise.
+ 
+ 2021-05-10  Martin Liska  <mliska@suse.cz>
+ 
+ 	* Makefile.in: Rename gcov-iov to genversion and depend
+ 	on version.h (instead of gcov-iov.h).
+ 	* gcov-io.h: Include version.h instread of gcov-iov.h.
+ 	* gengtype-state.c (read_state_version): Likewise.
+ 	* gcov-iov.c: Moved to...
+ 	* genversion.c: ...here.
+ 	* lto-streamer.h (LTO_major_version): Define it with
+ 	GCC_major_version.
+ 	* version.c: Removed.
+ 	* version.h: Removed.
+ 
+ 2021-05-10  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/arc.md (UNSPEC_ARC_DMPYWH): Define.
+ 	* config/arc/simdext.md (VCT): Add predicates for iterator
+ 	elements.
+ 	(EMUVEC): Define.
+ 	(voptab): Likewise.
+ 	(vec_widen_<V_US>mult_hi_v4hi): Change pattern predicate.
+ 	(<voptab>v2si3): New patterns.
+ 	(neg): Likewise.
+ 	(reduc_plus_scal_v4hi): Likewise.
+ 	(reduc_plus_scal_v2si): Likewise.
+ 	(vec_duplicatev2si): Likewise.
+ 	(vec_duplicatev4hi): Likewise.
+ 
+ 2021-05-10  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/simdext.md: Format and cleanup file.
+ 
+ 2021-05-10  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/simdext.md (movmisalignv2hi): Allow misaligned access
+ 	only when munaligned-access option is on.
+ 	(movmisalign<mode>): Likewise.
+ 
+ 2021-05-10  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* common/config/arc/arc-common.c (arc_handle_option): Remove dot
+ 	from string.
+ 	* config/arc/arc.c (arc_reorg): Remove underscore from string.
+ 
+ 2021-05-10  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/arc.h (CLZ_DEFINED_VALUE_AT_ZERO): Define.
+ 	(CTZ_DEFINED_VALUE_AT_ZERO): Likewise.
+ 	* config/arc/arc.md (clrsbsi2): Cleanup pattern.
+ 	(norm_f): Likewise.
+ 	(ffs): Likewise.
+ 	(ffs_f): Likewise.
+ 	(clzsi2): Use fls instruction when available.
+ 	(arc_clzsi2): Likewise.
+ 
+ 2021-05-10  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/arc.h (ADDITIONAL_REGISTER_NAMES): Add r26 and r27.
+ 
+ 2021-05-10  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* doc/extend.texi (__builtin_arc_sr): Swap arguments.
+ 
+ 2021-05-10  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+ 
+ 	PR middle-end/100467
+ 	* toplev.c (compile_file): Call insn_locations_init before
+ 	targetm.asm_out.code_end.
+ 
+ 2021-05-07  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	Revert:
+ 	2021-05-07  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	* config/gcn/gcn.c (gcn_scalar_mode_supported_p): Disable TImode.
+ 
+ 2021-05-07  Jakub Jelinek  <jakub@redhat.com>
+ 	    Andrew Stubbs  <amd@codesourcery.com>
+ 
+ 	PR target/100418
+ 	* builtins.c (try_store_by_multiple_pieces): Use force_operand for
+ 	emit_move_insn operands.
+ 
+ 2021-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* cfgexpand.c (expand_gimple_basic_block): Do not inherit a current
+ 	location for the outgoing edges of an empty block.
+ 	* dwarf2out.c (add_subscript_info): Retrieve the bounds and index
+ 	type by means of the get_array_descr_info langhook, if it is set and
+ 	returns true.  Remove obsolete code dealing with unnamed subtypes.
+ 
+ 2021-05-07  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (ssa_block_ranges): Virtualize.
+ 	(sbr_vector): Renamed from ssa_block_cache.
+ 	(sbr_vector::sbr_vector): Allocate from obstack abd initialize.
+ 	(ssa_block_ranges::~ssa_block_ranges): Remove.
+ 	(sbr_vector::set_bb_range): Use varying and undefined cached values.
+ 	(ssa_block_ranges::set_bb_varying): Remove.
+ 	(sbr_vector::get_bb_range): Adjust assert.
+ 	(sbr_vector::bb_range_p): Adjust assert.
+ 	(~block_range_cache): No freeing loop required.
+ 	(block_range_cache::get_block_ranges): Remove.
+ 	(block_range_cache::set_bb_range): Inline get_block_ranges.
+ 	(block_range_cache::set_bb_varying): Remove.
+ 	* gimple-range-cache.h (set_bb_varying): Remove prototype.
+ 	* value-range.h (irange_allocator::get_memory): New.
+ 
+ 2021-05-07  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-cache.cc (non_null_ref::non_null_deref_p): Search
+ 	dominator tree is available and requested.
+ 	(ranger_cache::ssa_range_in_bb): Don't search dom tree here.
+ 	(ranger_cache::fill_block_cache): Don't search dom tree here either.
+ 	* gimple-range-cache.h (non_null_deref_p): Add dom_search param.
+ 
+ 2021-05-07  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range.cc (gimple_ranger::range_on_exit): Handle block with
+ 	only PHI nodes better.
+ 
+ 2021-05-07  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-edge.h (gimple_outgoing_range): Rename from
+ 	outgoing_range.
+ 	(gcond_edge_range): Export prototype.
+ 	* gimple-range-edge.cc (gcond_edge_range): New.
+ 	(gimple_outgoing_range::edge_range_p): Use gcond_edge_range.
+ 	* gimple-range-gori.h (gori_compute): Use gimple_outgoing_range.
+ 
+ 2021-05-07  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range-edge.cc (outgoing_range::calc_switch_ranges): Compute
+ 	default range into a temp and allocate only what is needed.
+ 
+ 2021-05-07  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* range-op.cc (operator_trunc_mod::wi_fold): x % 0 is UNDEFINED.
+ 
+ 2021-05-07  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	* gimple-range.h (gimple_range_global): Pick up parameter initial
+ 	values, and use-before defined locals are UNDEFINED.
+ 
+ 2021-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* doc/extend.texi (scalar_storage_order): Mention effect on pointer
+ 	and vector fields.
+ 	* tree.h (reverse_storage_order_for_component_p): Return false if
+ 	the type is a pointer.
+ 
+ 2021-05-07  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	* config/gcn/gcn.c (gcn_scalar_mode_supported_p): Disable TImode.
+ 
+ 2021-05-07  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/98218
+ 	* config/i386/i386-expand.c (ix86_expand_sse_movcc):
+ 	Handle V8QI, V4HI and V2SI modes.
+ 	* config/i386/mmx.md (mmx_pblendvb): New insn pattern.
+ 	* config/i386/sse.md (unspec): Move UNSPEC_BLENDV ...
+ 	* config/i386/i386.md (unspec): ... here.
+ 
+ 2021-05-07  Tobias Burnus  <tobias@codesourcery.com>
+ 	    Tom de Vries  <tdevries@suse.de>
+ 
+ 	* omp-low.c (lower_rec_simd_input_clauses): Set max_vf = 1 if
+ 	a truth_value_p reduction variable is nonintegral.
+ 
+ 2021-05-07  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100445
+ 	* config/i386/i386-expand.c (ix86_use_mask_cmp_p):
+ 	Return false for mode sizes < 16.
+ 
+ 2021-05-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/100445
+ 	* config/i386/mmx.md (*xop_pcmov_<mode>): New define_insn.
+ 
+ 2021-05-06  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* ipa-sra.c (ipa_sra_dump_all_summaries): Dump edge summaries even
+ 	when there is no function summary.
+ 	(ipa_sra_summarize_function): produce edge summaries even when
+ 	bailing out early.
+ 
+ 2021-05-06  Tom Tromey  <tom@tromey.com>
+ 
+ 	* godump.c (string_hash_eq): Remove.
+ 	(go_finish): Use htab_eq_string.
+ 
+ 2021-05-06  Tom Tromey  <tom@tromey.com>
+ 
+ 	* gengtype-state.c (read_state): Use htab_eq_string.
+ 	(string_eq): Remove.
+ 
+ 2021-05-06  Tom Tromey  <tom@tromey.com>
+ 
+ 	* gensupport.c (htab_eq_string): Remove.
+ 
+ 2021-05-06  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+ 
+ 	PR ipa/97937
+ 	* debug.h (gcc_debug_hooks): Add set_ignored_loc function pointer.
+ 	* dwarf2out.h (dw_fde_node::ignored_debug): New data item.
+ 	* dbxout.c (dbx_debug_hooks, xcoff_debug_hooks): Add dummy
+ 	set_ignored_loc callbacks.
+ 	* debug.c (do_nothing_debug_hooks): Likewise.
+ 	* vmsdbgout.c (vmsdbg_debug_hooks): Likewise.
+ 	* dwarf2out.c (text_section_used, cold_text_section_used): Remove.
+ 	(in_text_section_p, last_text_label, last_cold_label,
+ 	switch_text_ranges, switch_cold_ranges): New data items.
+ 	(dwarf2out_note_section_used): Remove.
+ 	(dwarf2out_begin_prologue): Set fde->ignored_debug and
+ 	in_text_section_p.
+ 	(mark_ignored_debug_section): New helper function.
+ 	(dwarf2out_end_epilogue, dwarf2out_switch_text_section): Call
+ 	mark_ignored_debug_section.
+ 	(dwarf2_debug_hooks): Use dwarf2out_set_ignored_loc.
+ 	(dwarf2_lineno_debug_hooks): Use dummy for set_ignored_loc.
+ 	(size_of_aranges): Adjust formula for multi-part text ranges size.
+ 	(output_aranges): Output multi-part text ranges.
+ 	(dwarf2out_set_ignored_loc): New callback function.
+ 	(dwarf2out_finish): Output multi-part text ranges.
+ 	(dwarf2out_c_finalize): Clear new data items.
+ 	* final.c (final_start_function_1): Call set_ignored_loc callback.
+ 	(final_scan_insn_1): Likewise.
+ 	* ggc-page.c (gt_ggc_mx): New helper function.
+ 	* stringpool.c (gt_pch_nx): Likewise.
+ 
+ 2021-05-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	* timevar.def (TV_TREE_INSERT_PHI_NODES): Remove.
+ 	(TV_TREE_SSA_REWRITE_BLOCKS): Likewise.
+ 	(TV_TREE_INTO_SSA): New.
+ 	* tree-into-ssa.c (insert_phi_nodes): Do not account separately.
+ 	(rewrite_blocks): Likewise.
+ 	(pass_data_build_ssa): Account to TV_TREE_INTO_SSA.
+ 
+ 2021-05-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree-ssa-phiopt.c (value_replacement, minmax_replacement,
+ 	abs_replacement, xor_replacement,
+ 	cond_removal_in_popcount_clz_ctz_pattern,
+ 	replace_phi_edge_with_variable): Change type of phi argument from
+ 	gimple * to gphi *.
+ 
+ 2021-05-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-loop-split.c (split_loop): Delay updating SSA form.
+ 	Output an opt-info message.
+ 	(do_split_loop_on_cond): Likewise.
+ 	(tree_ssa_split_loops): Update SSA form here.
+ 
+ 2021-05-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-inline.c (tree_function_versioning): Fix DECL_BY_REFERENCE
+ 	return variable removal.
+ 
+ 2021-05-06  Marius Hillenbrand  <mhillen@linux.ibm.com>
+ 
+ 	* config/s390/s390-builtins.def (O_M5, O1_M5, ...): Remove unused macros.
+ 	(s390_vec_permi_s64, s390_vec_permi_b64, s390_vec_permi_u64)
+ 	(s390_vec_permi_dbl, s390_vpdi): Use the O3_U2 type for the immediate
+ 	operand.
+ 	* config/s390/s390.c (s390_const_operand_ok): Remove unused
+ 	values.
+ 
+ 2021-05-06  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/94589
+ 	* tree-ssa-phiopt.c (tree_ssa_phiopt_worker): Call
+ 	spaceship_replacement.
+ 	(cond_only_block_p, spaceship_replacement): New functions.
+ 
+ 2021-05-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/100373
+ 	* tree-emutls.c (gen_emutls_addr): Pass in whether we're
+ 	dealing with a debug use and only query existing addresses
+ 	if so.
+ 	(lower_emutls_1): Avoid splitting out addresses for debug
+ 	stmts, reset the debug stmt when we fail to find existing
+ 	lowered addresses.
+ 	(lower_emutls_phi_arg): Set wi.stmt.
+ 
+ 2021-05-06  Christoph Muellner  <cmuellner@gcc.gnu.org>
+ 
+ 	PR target/100266
+ 	* config/riscv/riscv.c (riscv_block_move_loop): Use cbranch helper.
+ 	* config/riscv/riscv.md (cbranch<mode>4): Generate helpers.
+ 	(stack_protect_test): Use cbranch helper.
+ 
+ 2021-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR target/100402
+ 	* config/i386/i386.c (ix86_compute_frame_layout): For a SEH target,
+ 	always return the establisher frame for __builtin_frame_address (0).
+ 
+ 2021-05-05  Ivan Sorokin  <vanyacpp@gmail.com>
+ 
+ 	PR target/91400
+ 	* config/i386/i386-builtins.c (ix86_cpu_model_type_node): New.
+ 	(ix86_cpu_model_var): Likewise.
+ 	(ix86_cpu_features2_type_node): Likewise.
+ 	(ix86_cpu_features2_var): Likewise.
+ 	(fold_builtin_cpu): Cache __cpu_model and __cpu_features2 with
+ 	their types.
+ 
+ 2021-05-05  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* passes.def (pass_warn_printf): Run after SSA.
+ 
+ 2021-05-05  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	* config/arm/neon.md (neon_vtst_combine<mode>): New pattern.
+ 	* config/arm/predicates.md (minus_one_operand): New predicate.
+ 
+ 2021-05-05  Jeff Law  <jlaw@tachyum.com>
+ 
+ 	* config/avr/avr.md: Remove references to CC_STATUS_INIT.
+ 
+ 2021-05-05  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
+ 
+ 	PR rtl-optimization/100263
+ 	* postreload.c (move2add_valid_value_p): Ensure register can
+ 	change mode.
+ 
+ 2021-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR rtl-optimization/100411
+ 	* cfgcleanup.c (try_crossjump_to_edge): Also skip end of prologue
+ 	and beginning of function markers.
+ 
+ 2021-05-05  Jeff Law  <jlaw@tachyum.com>
+ 
+ 	* config/cr16/cr16.h (NOTICE_UPDATE_CC): Remove.
+ 	* config/cr16/cr16.c (notice_update_cc): Remove.
+ 	* config/cr16/cr16-protos.h (notice_update_cc): Remove.
+ 
+ 2021-05-05  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/98218
+ 	* config/i386/i386-expand.c (ix86_expand_int_sse_cmp):
+ 	Handle V8QI, V4HI and V2SI modes.
+ 	* config/i386/i386.c (ix86_build_const_vector): Handle V2SImode.
+ 	(ix86_build_signbit_mask): Ditto.
+ 	* config/i386/mmx.md (MMXMODE14): New mode iterator.
+ 	(<smaxmin:code><MMXMODE14:mode>3): New expander.
+ 	(*mmx_<smaxmin:code><MMXMODE14:mode>3): New insn pattern.
+ 	(<umaxmin:code><MMXMODE24:mode>3): New expander.
+ 	(*mmx_<umaxmin:code><MMXMODE24:mode>3): New insn pattern.
+ 	(vec_cmp<MMXMODEI:mode><MMXMODEI:mode>): New expander.
+ 	(vec_cmpu<MMXMODEI:mode><MMXMODEI:mode>): Ditto.
+ 	(vcond<MMXMODEI:mode><MMXMODEI:mode>): Ditto.
+ 	(vcondu<MMXMODEI:mode><MMXMODEI:mode>): Ditto.
+ 	(vcond_mask_<MMXMODEI:mode><MMXMODEI:mode>): Ditto.
+ 
+ 2021-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* dwarf2out.c (loc_list_from_tree_1) <DECL>: During early DWARF, do
+ 	not expand the VALUE_EXPR of variables put in the non-local frame.
+ 	* gimplify.c (gimplify_type_sizes) <RECORD_TYPE>: If the type is not
+ 	to be ignored for debug info, ensure its variable offsets are not.
+ 
+ 2021-05-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/79333
+ 	* tree-ssa-sccvn.c (eliminate_dom_walker::eliminate_stmt):
+ 	Fold stmt following SSA edges.
+ 
+ 2021-05-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/100394
+ 	* calls.c (expand_call): Preserve possibly throwing calls.
+ 	* cfgexpand.c (expand_call_stmt): When a call can throw signal
+ 	RTL expansion there are side-effects.
+ 	* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Simplify,
+ 	mark all possibly throwing stmts necessary unless we can elide
+ 	dead EH.
+ 	* tree-ssa-dse.c (pass_dse::execute): Preserve exceptions unless
+ 	-fdelete-dead-exceptions.
+ 	* tree.h (DECL_PURE_P): Add note about exceptions.
+ 
+ 2021-05-05  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* config/i386/vxworks.h (DBX_REGISTER_NUMBER): Make it
+ 	unconditional.
+ 
+ 2021-05-04  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_output_mi_thunk): Use
+ 	get_fnname_from_decl for name of thunk.
+ 	* config/rs6000/rs6000.c (rs6000_declare_alias): Use assemble_name
+ 	and ASM_OUTPUT_LABEL.
+ 	(rs6000_xcoff_declare_function_name): Use assemble_name and
+ 	ASM_OUTPUT_LABEL.
+ 	(rs6000_xcoff_declare_object_name): Use ASM_OUTPUT_LABEL.
+ 	(rs6000_xcoff_encode_section_info): Don't add mapping class
+ 	for aliases.  Always add [DS] mapping class to primary
+ 	FUNCTION_DECL.
+ 	(rs6000_asm_weaken_decl): Don't explicitly add [DS].
+ 
+ 2021-05-04  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/100307
+ 	* builtins.c (compute_objsize_r): Clear base0 for pointers.
+ 
+ 2021-05-04  Jeff Law  <jlaw@tachyum.com>
+ 
+ 	* config/bfin/bfin.h (NOTICE_UPDATE_CC): Remove.
+ 
+ 2021-05-04  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	* caller-save.c: Remove CC0.
+ 	* cfgcleanup.c: Remove CC0.
+ 	* cfgrtl.c: Remove CC0.
+ 	* combine.c: Remove CC0.
+ 	* compare-elim.c: Remove CC0.
+ 	* conditions.h: Remove CC0.
+ 	* config/h8300/h8300.h: Remove CC0.
+ 	* config/h8300/h8300-protos.h: Remove CC0.
+ 	* config/h8300/peepholes.md: Remove CC0.
+ 	* config/i386/x86-tune-sched.c: Remove CC0.
+ 	* config/m68k/m68k.c: Remove CC0.
+ 	* config/rl78/rl78.c: Remove CC0.
+ 	* config/sparc/sparc.c: Remove CC0.
+ 	* config/xtensa/xtensa.c: Remove CC0.
+ 	(gen_conditional_move):  Use pc_rtx instead of cc0_rtx in a piece of
+ 	RTL where that is used as a placeholder only.
+ 	* cprop.c: Remove CC0.
+ 	* cse.c: Remove CC0.
+ 	* cselib.c: Remove CC0.
+ 	* df-problems.c: Remove CC0.
+ 	* df-scan.c: Remove CC0.
+ 	* doc/md.texi: Remove CC0.  Adjust an example.
+ 	* doc/rtl.texi: Remove CC0.  Adjust an example.
+ 	* doc/tm.texi: Regenerate.
+ 	* doc/tm.texi.in: Remove CC0.
+ 	* emit-rtl.c: Remove CC0.
+ 	* final.c: Remove CC0.
+ 	* fwprop.c: Remove CC0.
+ 	* gcse-common.c: Remove CC0.
+ 	* gcse.c: Remove CC0.
+ 	* genattrtab.c: Remove CC0.
+ 	* genconfig.c: Remove CC0.
+ 	* genemit.c: Remove CC0.
+ 	* genextract.c: Remove CC0.
+ 	* gengenrtl.c: Remove CC0.
+ 	* genrecog.c: Remove CC0.
+ 	* haifa-sched.c: Remove CC0.
+ 	* ifcvt.c: Remove CC0.
+ 	* ira-costs.c: Remove CC0.
+ 	* ira.c: Remove CC0.
+ 	* jump.c: Remove CC0.
+ 	* loop-invariant.c: Remove CC0.
+ 	* lra-constraints.c: Remove CC0.
+ 	* lra-eliminations.c: Remove CC0.
+ 	* optabs.c: Remove CC0.
+ 	* postreload-gcse.c: Remove CC0.
+ 	* postreload.c: Remove CC0.
+ 	* print-rtl.c: Remove CC0.
+ 	* read-rtl-function.c: Remove CC0.
+ 	* reg-notes.def: Remove CC0.
+ 	* reg-stack.c: Remove CC0.
+ 	* reginfo.c: Remove CC0.
+ 	* regrename.c: Remove CC0.
+ 	* reload.c: Remove CC0.
+ 	* reload1.c: Remove CC0.
+ 	* reorg.c: Remove CC0.
+ 	* resource.c: Remove CC0.
+ 	* rtl.c: Remove CC0.
+ 	* rtl.def: Remove CC0.
+ 	* rtl.h: Remove CC0.
+ 	* rtlanal.c: Remove CC0.
+ 	* sched-deps.c: Remove CC0.
+ 	* sched-rgn.c: Remove CC0.
+ 	* shrink-wrap.c: Remove CC0.
+ 	* simplify-rtx.c: Remove CC0.
+ 	* system.h: Remove CC0.  Poison NOTICE_UPDATE_CC, CC_STATUS_MDEP_INIT,
+ 	CC_STATUS_MDEP, and CC_STATUS.
+ 	* target.def: Remove CC0.
+ 	* valtrack.c: Remove CC0.
+ 	* var-tracking.c: Remove CC0.
+ 
+ 2021-05-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100414
+ 	* tree-ssa-phiopt.c (get_non_trapping): Do not compute dominance
+ 	info here.
+ 	(tree_ssa_phiopt_worker): But unconditionally here.
+ 
+ 2021-05-04  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* omp-low.c (lower_rec_input_clauses, lower_reduction_clauses): Handle
+ 	&& and || with floating-point and complex arguments.
+ 
+ 2021-05-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* tree-inline.c (insert_debug_decl_map): Delete.
+ 	(copy_debug_stmt): Minor tweak.
+ 	(setup_one_parameter): Do not use a variable if the value is either
+ 	a read-only DECL or a non-addressable local variable in the caller.
+ 	In this case, insert the debug-only variable in the map manually.
+ 	(expand_call_inline): Do not generate a CLOBBER for these values.
+ 	* tree-inline.h (debug_map): Minor tweak.
+ 
+ 2021-05-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* builtins.c (builtin_with_linkage_p): Return true for stp[n]cpy.
+ 	* symtab.c (symtab_node::output_to_lto_symbol_table_p): Tidy up.
+ 
+ 2021-05-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100329
+ 	* tree-ssa-reassoc.c (can_reassociate_p): Do not reassociate
+ 	asm goto defs.
+ 	(insert_stmt_after): Assert we're not running into asm goto.
+ 
+ 2021-05-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100398
+ 	* tree-ssa-dse.c (pass_dse::execute): Preserve control
+ 	altering stmts.
+ 
+ 2021-05-04  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	* builtins.c (try_store_by_multiple_pieces): Fix constfun's prototype.
+ 
+ 2021-05-04  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* builtins.c (try_store_by_multiple_pieces): New.
+ 	(expand_builtin_memset_args): Use it.  If target_char_cast
+ 	fails, proceed as for non-constant val.  Pass len's ctz to...
+ 	* expr.c (clear_storage_hints): ... this.  Try store by
+ 	multiple pieces after setmem.
+ 	(clear_storage): Adjust.
+ 	* expr.h (clear_storage_hints): Likewise.
+ 	(try_store_by_multiple_pieces): Declare.
+ 	* passes.def: Replace the last copy_prop with ccp.
+ 
+ 2021-05-03  Tom de Vries  <tdevries@suse.de>
+ 
+ 	PR target/100321
+ 	* omp-low.c (lower_rec_input_clauses): Disable SIMT for user-defined
+ 	reduction.
+ 
+ 2021-05-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-dse.c (dse_classify_store): Track two PHI defs.
+ 
+ 2021-05-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-dse.c: Do not include domwalk.h but cfganal.h.
+ 	(dse_dom_walker): Remove.
+ 	(dse_dom_walker::dse_optimize_stmt): Rename...
+ 	(dse_optimize_stmt): ... to this, pass in live_bytes sbitmap.
+ 	(dse_dom_walker::before_dom_children): Inline ...
+ 	(pass_dse::execute): ... here.  Perform a reverse program
+ 	order walk.
+ 
+ 2021-05-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR bootstrap/99703
+ 	* configure: Regenerated.
+ 
+ 2021-05-03  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	PR target/100217
+ 	* config/s390/s390.c (s390_hard_fp_reg_p): New function.
+ 	(s390_md_asm_adjust): Handle hard registers.
+ 
+ 2021-05-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/100382
+ 	* tree-ssa-dse.c: Include tree-eh.h.
+ 	(dse_dom_walker::before_dom_children): Don't remove stmts if
+ 	stmt_unremovable_because_of_non_call_eh_p is true.
+ 
+ 2021-05-02  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* varasm.c (compute_reloc_for_var): Split out from...
+ 	(get_variable_section): Use it.
+ 	* output.h (compute_reloc_for_var): Declare.
+ 	* config/rs6000/rs6000-protos.h
+ 	(rs6000_xcoff_asm_output_aligned_decl_common): Change alignment to
+ 	unsigned int.
+ 	* config/rs6000/rs6000.c (rs6000_legitimize_tls_address_aix):
+ 	Don't append storage mapping class to symbol.
+ 	(rs6000_xcoff_asm_named_section): Add BS and UL mapping classes.
+ 	Don't convert TLS BSS to common.
+ 	(rs6000_xcoff_unique_section): Don't fall back to select_secton.
+ 	(rs6000_xcoff_section_type_flags): Add SECTION_BSS if DECL is
+ 	bss_initializer.
+ 	(rs6000_xcoff_asm_globalize_decl_name): Don't strip storage
+ 	mapping class.
+ 	(rs6000_xcoff_asm_output_aligned_decl_common): Align is unsigned int.
+ 	If align is 0 from TLS class, use the same rules as varasm.c
+ 	If not common, switch to BSS section manually.
+ 	If common, emit appropriate comm or lcomm directive.
+ 	(rs6000_xcoff_encode_section_info): Add logic to append all
+ 	storage mapping classes.
+ 	(rs6000_asm_weaken_decl): Adjust for qualname symbols.
+ 	* config/rs6000/xcoff.h (ASM_OUTPUT_ALIGNED_DECL_LOCAL): Use
+ 	rs6000_xcoff_asm_output_aligned_decl_common.
+ 	(ASM_OUTPUT_ALIGNED_DECL_LOCAL): Use
+ 	rs6000_xcoff_asm_output_aligned_decl_common.
+ 	(ASM_OUTPUT_TLS_COMMON): Use
+ 	rs6000_xcoff_asm_output_aligned_decl_common.
+ 
+ 2021-05-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/100375
+ 	* config/nvptx/nvptx.c (nvptx_sese_pseudo): Use nullptr instead of 0
+ 	as first argument of pseudo_node_t constructors.
+ 
+ 2021-05-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/100336
+ 	* config/i386/t-i386 (TM_H): Add $(srcdir)/config/i386/i386-isa.def.
+ 
+ 2021-05-01  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* value-range.cc (DEFINE_INT_RANGE_GC_STUBS): Remove.
+ 	(gt_pch_nx (int_range<1> *&)): New.
+ 	(gt_ggc_mx (int_range<1> *&)): New.
+ 	* value-range.h (class irange): Add GTY support for
+ 	the base class.
+ 
+ 2021-05-01  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* doc/options.texi (Negative): Change either or to both and.
+ 
+ 2021-04-30  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add
+ 	float_ml[as][q]_laneq builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (mul_laneq<mode>3): Define.
+ 	(aarch64_float_mla_laneq<mode>): Define.
+ 	(aarch64_float_mls_laneq<mode>): Define.
+ 	* config/aarch64/arm_neon.h (vmla_laneq_f32): Use RTL builtin
+ 	instead of GCC vector extensions.
+ 	(vmlaq_laneq_f32): Likewise.
+ 	(vmls_laneq_f32): Likewise.
+ 	(vmlsq_laneq_f32): Likewise.
+ 
+ 2021-04-30  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add
+ 	float_ml[as]_lane builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (*aarch64_mul3_elt<mode>):
+ 	Rename to...
+ 	(mul_lane<mode>3): This, and re-order arguments.
+ 	(aarch64_float_mla_lane<mode>): Define.
+ 	(aarch64_float_mls_lane<mode>): Define.
+ 	* config/aarch64/arm_neon.h (vmla_lane_f32): Use RTL builtin
+ 	instead of GCC vector extensions.
+ 	(vmlaq_lane_f32): Likewise.
+ 	(vmls_lane_f32): Likewise.
+ 	(vmlsq_lane_f32): Likewise.
+ 
+ 2021-04-30  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add float_ml[as]
+ 	builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (aarch64_float_mla<mode>):
+ 	Define.
+ 	(aarch64_float_mls<mode>): Define.
+ 	* config/aarch64/arm_neon.h (vmla_f32): Use RTL builtin
+ 	instead of relying on GCC vector extensions.
+ 	(vmla_f64): Likewise.
+ 	(vmlaq_f32): Likewise.
+ 	(vmlaq_f64): Likewise.
+ 	(vmls_f32): Likewise.
+ 	(vmls_f64): Likewise.
+ 	(vmlsq_f32): Likewise.
+ 	(vmlsq_f64): Likewise.
+ 	* config/aarch64/iterators.md: Define VDQF_DF mode iterator.
+ 
+ 2021-04-30  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add
+ 	float_ml[as]_n_builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (*aarch64_mul3_elt_from_dup<mode>):
+ 	Rename to...
+ 	(mul_n<mode>3): This, and re-order arguments.
+ 	(aarch64_float_mla_n<mode>): Define.
+ 	(aarch64_float_mls_n<mode>): Define.
+ 	* config/aarch64/arm_neon.h (vmla_n_f32): Use RTL builtin
+ 	instead of inline asm.
+ 	(vmlaq_n_f32): Likewise.
+ 	(vmls_n_f32): Likewise.
+ 	(vmlsq_n_f32): Likewise.
+ 
+ 2021-04-30  Jonathan Wright  <joanthan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add pmull[2]
+ 	builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (aarch64_pmullv8qi): Define.
+ 	(aarch64_pmull_hiv16qi_insn): Define.
+ 	(aarch64_pmull_hiv16qi): Define.
+ 	* config/aarch64/arm_neon.h (vmull_high_p8): Use RTL builtin
+ 	instead of inline asm.
+ 	(vmull_p8): Likewise.
+ 
+ 2021-04-30  Senthil Kumar Selvaraj  <saaadhu@gcc.gnu.org>
+ 
+ 	* config/avr/avr.md: Adjust peepholes to match and
+ 	generate parallels with clobber of REG_CC.
+ 	(mov<mode>_insn): Rename to mov<mode>_insn_split.
+ 	(*mov<mode>_insn): Rename to mov<mode>_insn.
+ 
+ 2021-04-30  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* varasm.c (use_blocks_for_decl_p): Don't use section anchors
+ 	for VAR_DECLs if -fdata-sections enabled.
+ 
+ 2021-04-30  Michael Meissner  <meissner@linux.ibm.com>
+ 
+ 	PR bootstrap/100327
+ 	* config/rs6000/rs6000.c
+ 	(TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P): Define.
+ 	(rs6000_libgcc_floating_mode_supported_p): New target hook.
+ 
+ 2021-04-30  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-threadbackward.c (class thread_jumps): Split out code
+ 	from here...
+ 	(class back_threader_registry): ...to here...
+ 	(class back_threader_profitability): ...and here...
+ 	(thread_jumps::thread_through_all_blocks): Remove argument.
+ 	(back_threader_registry::back_threader_registry): New.
+ 	(back_threader_registry::~back_threader_registry): New.
+ 	(back_threader_registry::thread_through_all_blocks): New.
+ 	(thread_jumps::profitable_jump_thread_path): Move from here...
+ 	(back_threader_profitability::profitable_path_p): ...to here.
+ 	(thread_jumps::find_taken_edge): New.
+ 	(thread_jumps::convert_and_register_current_path): Move...
+ 	(back_threader_registry::register_path): ...to here.
+ 	(thread_jumps::register_jump_thread_path_if_profitable): Move...
+ 	(thread_jumps::maybe_register_path): ...to here.
+ 	(thread_jumps::handle_phi): Call find_taken_edge and
+ 	maybe_register_path.
+ 	(thread_jumps::handle_assignment): Same.
+ 	(thread_jumps::fsm_find_control_statement_thread_paths): Remove
+ 	tree argument to handle_phi and handle_assignment.
+ 	(thread_jumps::find_jump_threads_backwards): Set m_name.  Remove
+ 	set of m_speed_p and m_max_threaded_paths.
+ 	(pass_thread_jumps::execute): Remove second argument from
+ 	find_jump_threads_backwards.
+ 	(pass_early_thread_jumps::execute): Same.
+ 
+ 2021-04-30  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* tree-ssa-dom.c (class dom_jump_threader_simplifier): New.
+ 	(class dom_opt_dom_walker): Initialize some class variables.
+ 	(pass_dominator::execute): Pass evrp_range_analyzer and
+ 	dom_jump_threader_simplifier to dom_opt_dom_walker.
+ 	Adjust for some functions moving into classes.
+ 	(simplify_stmt_for_jump_threading): Adjust and move to...
+ 	(jump_threader_simplifier::simplify): ...here.
+ 	(dom_opt_dom_walker::before_dom_children): Adjust for
+ 	m_evrp_range_analyzer.
+ 	(dom_opt_dom_walker::after_dom_children): Remove x_vr_values hack.
+ 	(test_for_singularity): Place in dom_opt_dom_walker class.
+ 	(dom_opt_dom_walker::optimize_stmt): The argument
+ 	evrp_range_analyzer is now a class field.
+ 	* tree-ssa-threadbackward.c (class thread_jumps): Add m_registry.
+ 	(thread_jumps::thread_through_all_blocks): New.
+ 	(thread_jumps::convert_and_register_current_path): Use m_registry.
+ 	(pass_thread_jumps::execute): Adjust for thread_through_all_blocks
+ 	being in the threader class.
+ 	(pass_early_thread_jumps::execute): Same.
+ 	* tree-ssa-threadedge.c (threadedge_initialize_values): Move...
+ 	(jump_threader::jump_threader): ...here.
+ 	(threadedge_finalize_values): Move...
+ 	(jump_threader::~jump_threader): ...here.
+ 	(jump_threader::remove_jump_threads_including): New.
+ 	(jump_threader::thread_through_all_blocks): New.
+ 	(record_temporary_equivalences_from_phis): Move...
+ 	(jump_threader::record_temporary_equivalences_from_phis): ...here.
+ 	(record_temporary_equivalences_from_stmts_at_dest): Move...
+ 	(jump_threader::record_temporary_equivalences_from_stmts_at_dest):
+ 	Here...
+ 	(simplify_control_stmt_condition_1): Move to jump_threader class.
+ 	(simplify_control_stmt_condition): Move...
+ 	(jump_threader::simplify_control_stmt_condition): ...here.
+ 	(thread_around_empty_blocks): Move...
+ 	(jump_threader::thread_around_empty_blocks): ...here.
+ 	(thread_through_normal_block): Move...
+ 	(jump_threader::thread_through_normal_block): ...here.
+ 	(thread_across_edge): Move...
+ 	(jump_threader::thread_across_edge): ...here.
+ 	(thread_outgoing_edges): Move...
+ 	(jump_threader::thread_outgoing_edges): ...here.
+ 	* tree-ssa-threadedge.h: Move externally facing functings...
+ 	(class jump_threader): ...here...
+ 	(class jump_threader_simplifier): ...and here.
+ 	* tree-ssa-threadupdate.c (struct redirection_data): Remove comment.
+ 	(jump_thread_path_allocator::jump_thread_path_allocator): New.
+ 	(jump_thread_path_allocator::~jump_thread_path_allocator): New.
+ 	(jump_thread_path_allocator::allocate_thread_edge): New.
+ 	(jump_thread_path_allocator::allocate_thread_path): New.
+ 	(jump_thread_path_registry::jump_thread_path_registry): New.
+ 	(jump_thread_path_registry::~jump_thread_path_registry): New.
+ 	(jump_thread_path_registry::allocate_thread_edge): New.
+ 	(jump_thread_path_registry::allocate_thread_path): New.
+ 	(dump_jump_thread_path): Make extern.
+ 	(debug (const vec<jump_thread_edge *> &path)): New.
+ 	(struct removed_edges): Move to tree-ssa-threadupdate.h.
+ 	(struct thread_stats_d): Remove.
+ 	(remove_ctrl_stmt_and_useless_edges): Make static.
+ 	(lookup_redirection_data): Move...
+ 	(jump_thread_path_registry::lookup_redirection_data): ...here.
+ 	(ssa_redirect_edges): Make static.
+ 	(thread_block_1): Move...
+ 	(jump_thread_path_registry::thread_block_1): ...here.
+ 	(thread_block): Move...
+ 	(jump_thread_path_registry::thread_block): ...here.
+ 	(thread_through_loop_header):  Move...
+ 	(jump_thread_path_registry::thread_through_loop_header): ...here.
+ 	(mark_threaded_blocks): Move...
+ 	(jump_thread_path_registry::mark_threaded_blocks): ...here.
+ 	(debug_path): Move...
+ 	(jump_thread_path_registry::debug_path): ...here.
+ 	(debug_all_paths): Move...
+ 	(jump_thread_path_registry::dump): ..here.
+ 	(rewire_first_differing_edge): Move...
+ 	(jump_thread_path_registry::rewire_first_differing_edge): ...here.
+ 	(adjust_paths_after_duplication): Move...
+ 	(jump_thread_path_registry::adjust_paths_after_duplication): ...here.
+ 	(duplicate_thread_path): Move...
+ 	(jump_thread_path_registry::duplicate_thread_path): ..here.
+ 	(remove_jump_threads_including): Move...
+ 	(jump_thread_path_registry::remove_jump_threads_including): ...here.
+ 	(thread_through_all_blocks): Move to...
+ 	(jump_thread_path_registry::thread_through_all_blocks): ...here.
+ 	(delete_jump_thread_path): Remove.
+ 	(register_jump_thread): Move...
+ 	(jump_thread_path_registry::register_jump_thread): ...here.
+ 	* tree-ssa-threadupdate.h: Move externally facing functions...
+ 	(class jump_thread_path_allocator): ...here...
+ 	(class jump_thread_path_registry): ...and here.
+ 	(thread_through_all_blocks): Remove.
+ 	(struct removed_edges): New.
+ 	(register_jump_thread): Remove.
+ 	(remove_jump_threads_including): Remove.
+ 	(delete_jump_thread_path): Remove.
+ 	(remove_ctrl_stmt_and_useless_edges): Remove.
+ 	(free_dom_edge_info): New prototype.
+ 	* tree-vrp.c: Remove x_vr_values hack.
+ 	(class vrp_jump_threader_simplifier): New.
+ 	(vrp_jump_threader_simplifier::simplify): New.
+ 	(vrp_jump_threader::vrp_jump_threader): Adjust method signature.
+ 	Remove m_dummy_cond.
+ 	Instantiate m_simplifier and m_threader.
+ 	(vrp_jump_threader::thread_through_all_blocks): New.
+ 	(vrp_jump_threader::simplify_stmt): Remove.
+ 	(vrp_jump_threader::after_dom_children): Do not set m_dummy_cond.
+ 	Remove x_vr_values hack.
+ 	(execute_vrp): Adjust for thread_through_all_blocks being in a
+ 	class.
+ 
+ 2021-04-30  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* genflags.c (gen_insn): Print failed expansion string.
+ 
+ 2021-04-30  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* expr.c (alignment_for_piecewise_move): Call mode_for_size
+ 	without limit to MAX_FIXED_MODE_SIZE.
+ 
+ 2021-04-30  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR middle-end/90773
+ 	* builtins.c (builtin_memset_gen_str): Don't use return from
+ 	simplify_gen_subreg.
+ 
+ 2021-04-30  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/98060
+ 	* config/i386/i386.md (*add<mode>3_carry_0r): New insn pattern.
+ 	(*addsi3_carry_zext_0r): Ditto.
+ 	(*sub<mode>3_carry_0): Ditto.
+ 	(*subsi3_carry_zext_0r): Ditto.
+ 	* config/i386/predicates.md (ix86_carry_flag_unset_operator):
+ 	New predicate.
+ 	* config/i386/i386.c (ix86_rtx_costs) <case PLUS, case MINUS>:
+ 	Also consider ix86_carry_flag_unset_operator to calculate
+ 	the cost of adc/sbb insn.
+ 
+ 2021-04-30  Roman Zhuykov  <zhroma@ispras.ru>
+ 
+ 	PR rtl-optimization/100225
+ 	PR rtl-optimization/84878
+ 	* modulo-sched.c (sms_schedule): Use note_stores to skip loops
+ 	where we have an instruction which touches (writes) any hard
+ 	register from df->regular_block_artificial_uses set.
+ 	Allow not-single-set instruction only right before basic block
+ 	tail.
+ 
+ 2021-04-30  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* config/riscv/riscv.opt (march=,mabi=): Negative itself.
+ 
+ 2021-04-30  LevyHsu  <admin@levyhsu.com>
+ 
+ 	* config/riscv/riscv.c (riscv_min_arithmetic_precision): New.
+ 	* config/riscv/riscv.h (TARGET_MIN_ARITHMETIC_PRECISION): New.
+ 	* config/riscv/riscv.md (addv<mode>4, uaddv<mode>4): New.
+ 	(subv<mode>4, usubv<mode>4, mulv<mode>4, umulv<mode>4): New.
+ 
+ 2021-04-29  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* config.gcc: Merged x86 and x86_64 cpu_type-setting cases.
+ 
+ 2021-04-29  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* config/i386/i386.h (ASM_OUTPUT_MAX_SKIP_PAD): Rename to...
+ 	(ASM_OUTPUT_MAX_SKIP_ALIGN): ... this.  Enclose in do/while(0).
+ 	* config/i386/i386.c: Adjust.
+ 	* config/i386/i386.md: Adjust.
+ 	* config/i386/darwin.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Drop.
+ 	* config/i386/dragonfly.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
+ 	* config/i386/freebsd.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
+ 	* config/i386/gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
+ 	* config/i386/gnu-user.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
+ 	* config/i386/iamcu.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
+ 	* config/i386/lynx.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
+ 	* config/i386/netbsd-elf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
+ 	* config/i386/openbsdelf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
+ 	* config/i386/x86-64.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise.
+ 	(ASM_OUTPUT_MAX_SKIP_PAD): Likewise.
+ 
+ 2021-04-29  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386-expand.c (ix86_expand_int_compare):
+ 	Swap operands of GTU and LEU comparison to emit carry flag comparison.
+ 	* config/i386/i386.md (*add<mode>3_carry_0): Change insn
+ 	predicate to allow more combine opportunities with memory operands.
+ 	(*sub<mode>3_carry_0): Ditto.
+ 
+ 2021-04-29  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/100303
+ 	* rtl-ssa/accesses.cc (function_info::make_use_available): Take a
+ 	boolean that indicates whether the use will only be used in
+ 	debug instructions.  Treat it in the same way that existing
+ 	cross-EBB debug references would be handled if so.
+ 	(function_info::make_uses_available): Likewise.
+ 	* rtl-ssa/functions.h (function_info::make_uses_available): Update
+ 	prototype accordingly.
+ 	(function_info::make_uses_available): Likewise.
+ 	* fwprop.c (try_fwprop_subst): Update call accordingly.
+ 
+ 2021-04-29  Jeff Law  <jlaw@tachyum.com>
+ 
+ 	* config/nios2/nios2-protos.h (nios2_fpu_insn_enabled): Move outside
+ 	of RTX_CODE guard.
+ 
+ 2021-04-29  Uroš Bizjak  <ubizjak@gmail.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	PR target/100312
+ 	* config/i386/i386-builtin.def (IX86_BUILTIN_MASKLOADPD)
+ 	(IX86_BUILTIN_MASKLOADPS, IX86_BUILTIN_MASKLOADPD256)
+ 	(IX86_BUILTIN_MASKLOADPS256, IX86_BUILTIN_MASKLOADD)
+ 	(IX86_BUILTIN_MASKLOADQ, IX86_BUILTIN_MASKLOADD256)
+ 	(IX86_BUILTIN_MASKLOADQ256): Move from SPECIAL_ARGS
+ 	to PURE_ARGS category.
+ 	* config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
+ 	Handle PURE_ARGS category.
+ 	* config/i386/i386-expand.c (ix86_expand_builtin): Ditto.
+ 
+ 2021-04-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* configure.ac: Check for the presence of sys/locking.h header and
+ 	for whether _LK_LOCK is supported by _locking.
+ 	* configure: Regenerate.
+ 	* config.in: Likewise.
+ 	* gcov-io.h: Define GCOV_LOCKED_WITH_LOCKING if HOST_HAS_LK_LOCK.
+ 	* gcov-io.c (gcov_open): Add support for GCOV_LOCKED_WITH_LOCKING.
+ 	* system.h: Include <sys/locking.h> if HAVE_SYS_LOCKING_H.
+ 
+ 2021-04-29  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/predicates.md (fcmov_comparison_operator):
+ 	Do not check for trivial FP comparison operator.
+ 	<case GEU, case LTU>: Allow CCGZmode.
+ 	<case GTU, case LEU>: Do not allow CCCmode.
+ 	(ix86_comparison_operator) <case GTU, case LEU>: Allow only CCmode.
+ 	(ix86_carry_flag_operator): Match only LTU and UNLT code.
+ 	Do not check for trivial FP comparison operator.  Allow CCGZmode.
+ 
+ 2021-04-29  Tom de Vries  <tdevries@suse.de>
+ 
+ 	* omp-expand.c (expand_omp_simd): Add step_orig, and replace uses of
+ 	fd->loop.step by either step or orig_step.
+ 
+ 2021-04-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* config/sparc/sparc.c (gen_load_pcrel_sym): Delete.
+ 	(load_got_register): Do the PIC dance here.
+ 	(sparc_legitimize_tls_address): Simplify.
+ 	(sparc_emit_probe_stack_range): Likewise.
+ 	(sparc32_initialize_trampoline): Likewise.
+ 	(sparc64_initialize_trampoline): Likewise.
+ 	* config/sparc/sparc.md (load_pcrel_sym<P:mode>): Add @ marker.
+ 	(probe_stack_range<P:mode>): Likewise.
+ 	(flush<P:mode>): Likewise.
+ 	(tgd_hi22<P:mode>): Likewise.
+ 	(tgd_lo10<P:mode>): Likewise.
+ 	(tgd_add<P:mode>): Likewise.
+ 	(tgd_call<P:mode>): Likewise.
+ 	(tldm_hi22<P:mode>): Likewise.
+ 	(tldm_lo10<P:mode>): Likewise.
+ 	(tldm_add<P:mode>): Likewise.
+ 	(tldm_call<P:mode>): Likewise.
+ 	(tldo_hix22<P:mode>): Likewise.
+ 	(tldo_lox10<P:mode>): Likewise.
+ 	(tldo_add<P:mode>): Likewise.
+ 	(tie_hi22<P:mode>): Likewise.
+ 	(tie_lo10<P:mode>): Likewise.
+ 	(tie_add<P:mode>): Likewise.
+ 	(tle_hix22<P:mode>): Likewise.
+ 	(tle_lox10<P:mode>): Likewise.
+ 	(stack_protect_setsi): Rename to...
+ 	(stack_protect_set32): ...this.
+ 	(stack_protect_setdi): Rename to...
+ 	(stack_protect_set64): ...this.
+ 	(stack_protect_set): Adjust calls to above.
+ 	(stack_protect_testsi): Rename to...
+ 	(stack_protect_test32): ...this.
+ 	(stack_protect_testdi): Rename to...
+ 	(stack_protect_test64): ...this.
+ 	(stack_protect_test): Adjust calls to above.
+ 
+ 2021-04-29  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR middle-end/90773
+ 	* builtins.c (builtin_memcpy_read_str): Add a dummy argument.
+ 	(builtin_strncpy_read_str): Likewise.
+ 	(builtin_memset_read_str): Add an argument for the previous RTL
+ 	information and generate the new RTL from the previous RTL info.
+ 	(builtin_memset_gen_str): Likewise.
+ 	* builtins.h (builtin_strncpy_read_str): Update the prototype.
+ 	(builtin_memset_read_str): Likewise.
+ 	* expr.c (by_pieces_ninsns): If targetm.overlap_op_by_pieces_p()
+ 	returns true, round up size and alignment to the widest integer
+ 	mode for maximum size.
+ 	(pieces_addr::adjust): Add a pointer to by_pieces_prev argument
+ 	and pass it to m_constfn.
+ 	(op_by_pieces_d): Add m_push and m_overlap_op_by_pieces.
+ 	(op_by_pieces_d::op_by_pieces_d): Add a bool argument to
+ 	initialize m_push.  Initialize m_overlap_op_by_pieces with
+ 	targetm.overlap_op_by_pieces_p ().
+ 	(op_by_pieces_d::run): Pass the previous RTL information to
+ 	pieces_addr::adjust and generate overlapping operations if
+ 	m_overlap_op_by_pieces is true.
+ 	(PUSHG_P): New.
+ 	(move_by_pieces_d::move_by_pieces_d): Updated for op_by_pieces_d
+ 	change.
+ 	(store_by_pieces_d::store_by_pieces_d): Updated for op_by_pieces_d
+ 	change.
+ 	(can_store_by_pieces): Use by_pieces_constfn on constfun.
+ 	(store_by_pieces): Use by_pieces_constfn on constfun.  Updated
+ 	for op_by_pieces_d change.
+ 	(clear_by_pieces_1): Add a dummy argument.
+ 	(clear_by_pieces): Updated for op_by_pieces_d change.
+ 	(compare_by_pieces_d::compare_by_pieces_d): Likewise.
+ 	(string_cst_read_str): Add a dummy argument.
+ 	* expr.h (by_pieces_constfn): Add a dummy argument.
+ 	(by_pieces_prev): New.
+ 	* target.def (overlap_op_by_pieces_p): New target hook.
+ 	* config/i386/i386.c (TARGET_OVERLAP_OP_BY_PIECES_P): New.
+ 	* doc/tm.texi.in: Add TARGET_OVERLAP_OP_BY_PIECES_P.
+ 	* doc/tm.texi: Regenerated.
+ 
+ 2021-04-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100253
+ 	* tree-vect-stmts.c (vectorizable_load): Do not assume
+ 	element alignment when DR_MISALIGNMENT is -1.
+ 	(vectorizable_store): Likewise.
+ 
+ 2021-04-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/100302
+ 	* config/aarch64/aarch64.c (aarch64_add_offset_1_temporaries): Use
+ 	absu_hwi instead of abs_hwi.
+ 
+ 2021-04-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/38474
+ 	* tree-ssa-structalias.c (add_graph_edge): Avoid direct
+ 	forwarding when indirect forwarding through ESCAPED
+ 	alread happens.
+ 
+ 2021-04-29  Tom de Vries  <tdevries@suse.de>
+ 
+ 	PR target/100232
+ 	* internal-fn.c (expand_GOMP_SIMT_ENTER_ALLOC)
+ 	(expand_GOMP_SIMT_LAST_LANE, expand_GOMP_SIMT_ORDERED_PRED)
+ 	(expand_GOMP_SIMT_VOTE_ANY, expand_GOMP_SIMT_XCHG_BFLY)
+ 	(expand_GOMP_SIMT_XCHG_IDX): Ensure target is assigned to.
+ 
+ 2021-04-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99912
+ 	* tree-ssa-dse.c (dse_dom_walker::m_need_cfg_cleanup): New.
+ 	(dse_dom_walker::todo): Likewise.
+ 	(dse_dom_walker::dse_optimize_stmt): Move VDEF check to the
+ 	caller.
+ 	(dse_dom_walker::before_dom_children): Remove trivially
+ 	dead SSA defs and schedule CFG cleanup if we removed all
+ 	PHIs in a block.
+ 	(pass_dse::execute): Get TODO as computed by the DOM walker
+ 	and return it.  Wipe dominator info earlier.
+ 
+ 2021-04-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/100308
+ 	* ipa-prop.c (ipcp_modif_dom_walker::before_dom_children):
+ 	Track blocks to cleanup EH in new m_need_eh_cleanup.
+ 	(ipcp_modif_dom_walker::cleanup_eh): New.
+ 	(ipcp_transform_function): Release dominator info before
+ 	doing EH cleanup.
+ 
+ 2021-04-29  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/100250
+ 	* attribs.c (attr_access::array_as_string): Avoid dereferencing
+ 	a pointer when it's null.
+ 
+ 2021-04-29  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* Makefile.in (OBJS): Add ipa-free-lang-data.o.
+ 	* ipa-free-lang-data.cc: New file.
+ 	* tree.c: Move pass free_lang_data to file above.
+ 	 (build_array_type_1): Declare extern.
+ 	* tree.h (build_array_type_1): Declare.
+ 
+ 2021-04-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Modify comment to
+ 	make consistent with updated RTL pattern.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<sur>qmovn<mode>):
+ 	Implement using ss_truncate and us_truncate rather than
+ 	unspecs.
+ 	* config/aarch64/iterators.md: Remove redundant unspecs and
+ 	iterator: UNSPEC_[SU]QXTN and SUQMOVN respectively.
+ 
+ 2021-04-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_acle.h (__attribute__): Make intrinsic
+ 	attributes consistent with those defined in arm_neon.h.
+ 
+ 2021-04-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/arm_fp16.h (__attribute__): Make intrinsic
+ 	attributes consistent with those defined in arm_neon.h.
+ 
+ 2021-04-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add
+ 	float_trunc_rodd builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (aarch64_float_trunc_rodd_df):
+ 	Define.
+ 	(aarch64_float_trunc_rodd_lo_v2sf): Define.
+ 	(aarch64_float_trunc_rodd_hi_v4sf_le): Define.
+ 	(aarch64_float_trunc_rodd_hi_v4sf_be): Define.
+ 	(aarch64_float_trunc_rodd_hi_v4sf): Define.
+ 	* config/aarch64/arm_neon.h (vcvtx_f32_f64): Use RTL builtin
+ 	instead of inline asm.
+ 	(vcvtx_high_f32_f64): Likewise.
+ 	(vcvtxd_f32_f64): Likewise.
+ 	* config/aarch64/iterators.md: Add FCVTXN unspec.
+ 
+ 2021-04-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add tbx1 builtin
+ 	generator macros.
+ 	* config/aarch64/aarch64-simd.md (aarch64_tbx1<mode>):
+ 	Define.
+ 	* config/aarch64/arm_neon.h (vqtbx1_s8): USE RTL builtin
+ 	instead of inline asm.
+ 	(vqtbx1_u8): Likewise.
+ 	(vqtbx1_p8): Likewise.
+ 	(vqtbx1q_s8): Likewise.
+ 	(vqtbx1q_u8): Likewise.
+ 	(vqtbx1q_p8): Likewise.
+ 	(vtbx2_s8): Likewise.
+ 	(vtbx2_u8): Likewise.
+ 	(vtbx2_p8): Likewise.
+ 
+ 2021-04-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add tbl1 builtin
+ 	generator macros.
+ 	* config/aarch64/arm_neon.h (vqtbl1_p8): Use RTL builtin
+ 	instead of inline asm.
+ 	(vqtbl1_s8): Likewise.
+ 	(vqtbl1_u8): Likewise.
+ 	(vqtbl1q_p8): Likewise.
+ 	(vqtbl1q_s8): Likewise.
+ 	(vqtbl1q_u8): Likewise.
+ 	(vtbl1_s8): Likewise.
+ 	(vtbl1_u8): Likewise.
+ 	(vtbl1_p8): Likewise.
+ 	(vtbl2_s8): Likewise.
+ 	(vtbl2_u8): Likewise.
+ 	(vtbl2_p8): Likewise.
+ 
+ 2021-04-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add polynomial
+ 	ssri_n buitin generator macro.
+ 	* config/aarch64/arm_neon.h (vsri_n_p8): Use RTL builtin
+ 	instead of inline asm.
+ 	(vsri_n_p16): Likewise.
+ 	(vsri_n_p64): Likewise.
+ 	(vsriq_n_p8): Likewise.
+ 	(vsriq_n_p16): Likewise.
+ 	(vsriq_n_p64): Likewise.
+ 
+ 2021-04-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Use VALLP mode
+ 	iterator for polynomial ssli_n builtin generator macro.
+ 	* config/aarch64/arm_neon.h (vsli_n_p8): Use RTL builtin
+ 	instead of inline asm.
+ 	(vsli_n_p16): Likewise.
+ 	(vsliq_n_p8): Likewise.
+ 	(vsliq_n_p16): Likewise.
+ 	* config/aarch64/iterators.md: Define VALLP mode iterator.
+ 
+ 2021-04-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Use VDQV_L
+ 	iterator to generate [su]adalp RTL builtins.
+ 	* config/aarch64/aarch64-simd.md: Use VDQV_L iterator in
+ 	[su]adalp RTL pattern.
+ 	* config/aarch64/arm_neon.h (vpadal_s32): Use RTL builtin
+ 	instead of inline asm.
+ 	(vpadal_u32): Likewise.
+ 
+ 2021-04-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add [su]addlp
+ 	builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<su>addlp<mode>):
+ 	Define.
+ 	* config/aarch64/arm_neon.h (vpaddl_s8): Use RTL builtin
+ 	instead of inline asm.
+ 	(vpaddl_s16): Likewise.
+ 	(vpaddl_s32): Likewise.
+ 	(vpaddl_u8): Likewise.
+ 	(vpaddl_u16): Likewise.
+ 	(vpaddl_u32): Likewise.
+ 	(vpaddlq_s8): Likewise.
+ 	(vpaddlq_s16): Likewise.
+ 	(vpaddlq_s32): Likewise.
+ 	(vpaddlq_u8): Likewise.
+ 	(vpaddlq_u16): Likewise.
+ 	(vpaddlq_u32): Liwewise.
+ 	* config/aarch64/iterators.md: Define [SU]ADDLP unspecs with
+ 	appropriate attributes.
+ 
+ 2021-04-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Use VDQ_I iterator
+ 	for aarch64_addp<mode> builtin macro generator.
+ 	* config/aarch64/aarch64-simd.md: Use VDQ_I iterator in
+ 	aarch64_addp<mode> RTL pattern.
+ 	* config/aarch64/arm_neon.h (vpaddq_s8): Use RTL builtin
+ 	instead of inline asm.
+ 	(vpaddq_s16): Likewise.
+ 	(vpaddq_s32): Likewise.
+ 	(vpaddq_s64): Likewise.
+ 	(vpaddq_u8): Likewise.
+ 	(vpaddq_u16): Likewise.
+ 	(vpaddq_u32): Likewise.
+ 	(vpaddq_u64): Likewise.
+ 
+ 2021-04-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add sq[r]dmulh_n
+ 	builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (aarch64_sq<r>dmulh_n<mode>):
+ 	Define.
+ 	* config/aarch64/arm_neon.h (vqdmulh_n_s16): Use RTL builtin
+ 	instead of inline asm.
+ 	(vqdmulh_n_s32): Likewise.
+ 	(vqdmulhq_n_s16): Likewise.
+ 	(vqdmulhq_n_s32): Likewise.
+ 	(vqrdmulh_n_s16): Likewise.
+ 	(vqrdmulh_n_s32): Likewise.
+ 	(vqrdmulhq_n_s16): Likewise.
+ 	(vqrdmulhq_n_s32): Likewise.
+ 
+ 2021-04-28  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* doc/install.texi (--enable-offload-defaulted): Document.
+ 
+ 2021-04-28  Senthil Kumar Selvaraj  <saaadhu@gcc.gnu.org>
+ 
+ 	* config/avr/avr-dimode.md: Turn existing patterns into
+ 	define_insn_and_split style patterns where the splitter
+ 	adds a clobber of the condition code register.  Drop "cc"
+ 	attribute.  Add new patterns to match output of
+ 	the splitters.
+ 	* config/avr/avr-fixed.md: Likewise.
+ 	* config/avr/avr.c (cc_reg_rtx): New.
+ 	(avr_parallel_insn_from_insns): Adjust insn count
+ 	for removal of set of cc0.
+ 	(avr_is_casesi_sequence): Likewise.
+ 	(avr_casei_sequence_check_operands): Likewise.
+ 	(avr_optimize_casesi): Likewise. Also insert
+ 	new insns after jump_insn.
+ 	(avr_pass_casesi::avr_rest_of_handle_casesi): Adjust
+ 	for removal of set of cc0.
+ 	(avr_init_expanders): Initialize cc_reg_rtx.
+ 	(avr_regno_reg_class): Handle REG_CC.
+ 	(cond_string): Remove usage of CC_OVERFLOW_UNUSABLE.
+ 	(avr_notice_update_cc): Remove function.
+ 	(ret_cond_branch): Remove usage of CC_OVERFLOW_UNUSABLE.
+ 	(compare_condition): Adjust for PARALLEL with
+ 	REG_CC clobber.
+ 	(out_shift_with_cnt): Likewise.
+ 	(ashlhi3_out): Likewise.
+ 	(ashrhi3_out): Likewise.
+ 	(lshrhi3_out): Likewise.
+ 	(avr_class_max_nregs): Return single reg for REG_CC.
+ 	(avr_compare_pattern): Check for REG_CC instead
+ 	of cc0_rtx.
+ 	(avr_reorg_remove_redundant_compare): Likewise.
+ 	(avr_reorg):Adjust for PARALLEL with REG_CC clobber.
+ 	(avr_hard_regno_nregs): Return single reg for REG_CC.
+ 	(avr_hard_regno_mode_ok): Allow only CCmode for REG_CC.
+ 	(avr_md_asm_adjust): Clobber REG_CC.
+ 	(TARGET_HARD_REGNO_NREGS): Define.
+ 	(TARGET_CLASS_MAX_NREGS): Define.
+ 	(TARGET_MD_ASM_ADJUST): Define.
+ 	* config/avr/avr.h (FIRST_PSEUDO_REGISTER): Adjust
+ 	for REG_CC.
+ 	(enum reg_class): Add CC_REG class.
+ 	(NOTICE_UPDATE_CC): Remove.
+ 	(CC_OVERFLOW_UNUSABLE): Remove.
+ 	(CC_NO_CARRY): Remove.
+ 	* config/avr/avr.md: Turn existing patterns into
+ 	define_insn_and_split style patterns where the splitter
+ 	adds a clobber of the condition code register.  Drop "cc"
+ 	attribute.  Add new patterns to match output of
+ 	the splitters.
+ 	(sez): Remove unused pattern.
+ 
+ 2021-04-28  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/100311
+ 	* config/arm/arm.c (arm_hard_regno_mode_ok): Only allow VPR to be
+ 	used in HImode.
+ 
+ 2021-04-28  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/100305
+ 	* config/aarch64/constraints.md (Utq): Require the address to
+ 	be valid for both the element mode and for V2DImode.
+ 
+ 2021-04-28  Jakub Jelinek  <jakub@redhat.com>
+ 	    Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* configure.ac (OFFLOAD_DEFAULTED): AC_DEFINE if offload-defaulted.
+ 	* gcc.c (process_command): New variable.
+ 	(driver::maybe_putenv_OFFLOAD_TARGETS): If OFFLOAD_DEFAULTED,
+ 	set it if -foffload is defaulted.
+ 	* lto-wrapper.c (OFFLOAD_TARGET_DEFAULT_ENV): Define.
+ 	(compile_offload_image): If OFFLOAD_DEFAULTED and
+ 	OFFLOAD_TARGET_DEFAULT is in the environment, don't fail
+ 	if corresponding mkoffload can't be found.
+ 	(compile_images_for_offload_targets): Likewise.  Free and clear
+ 	offload_names if no valid offload is found.
+ 	* config.in: Regenerate.
+ 	* configure: Regenerate.
+ 
+ 2021-04-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100292
+ 	* tree-vect-generic.c (expand_vector_condition): Do not fold
+ 	the comparisons.
+ 
+ 2021-04-27  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/aix.h (SUBTARGET_DRIVER_SELF_SPECS): New.
+ 	* config/rs6000/aix64.opt (m64): New.
+ 	(m32): New.
+ 
+ 2021-04-27  Maciej W. Rozycki  <macro@orcam.me.uk>
+ 
+ 	* config/vax/vax.c (print_operand_address, vax_address_cost_1)
+ 	(index_term_p): Handle ASHIFT too.
+ 
+ 2021-04-27  Maciej W. Rozycki  <macro@orcam.me.uk>
+ 
+ 	* config/vax/builtins.md (jbb<ccss>i<mode>): Remove operand #3.
+ 	(sync_lock_test_and_set<mode>): Adjust accordingly.
+ 	(sync_lock_release<mode>): Likewise.
+ 
+ 2021-04-27  Maciej W. Rozycki  <macro@orcam.me.uk>
+ 
+ 	* config/vax/vax-protos.h (adjacent_operands_p): Remove
+ 	prototype.
+ 	* config/vax/vax.c (adjacent_operands_p): Remove.
+ 
+ 2021-04-27  Maciej W. Rozycki  <macro@linux-mips.org>
+ 
+ 	* ifcvt.c (dead_or_predicable) [!IFCVT_MODIFY_TESTS]: Fall
+ 	through to the non-conditional execution case if getting the
+ 	condition for conditional execution has failed.
+ 
+ 2021-04-27  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR middle-end/100284
+ 	* gimple.c (gimple_could_trap_p_1): Remove VEC_COND_EXPR test.
+ 	* tree-eh.c (operation_could_trap_p): Handle VEC_COND_EXPR rather
+ 	than asserting on it.
+ 
+ 2021-04-27  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_aix_precompute_tls_p): Protect
+ 	with TARGET_AIX_OS.
+ 
+ 2021-04-27  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	PR target/94177
+ 	* calls.c (precompute_register_parameters): Additionally test
+ 	targetm.precompute_tls_p to pre-compute argument.
+ 	* config/rs6000/aix.h (TARGET_PRECOMPUTE_TLS_P): Define.
+ 	* config/rs6000/rs6000.c (rs6000_aix_precompute_tls_p): New.
+ 	* target.def (precompute_tls_p): New.
+ 	* doc/tm.texi.in (TARGET_PRECOMPUTE_TLS_P): Add hook documentation.
+ 	* doc/tm.texi: Regenerated.
+ 
+ 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/100200
+ 	* config/aarch64/aarch64.c (aarch64_print_operand): Cast -UINTVAL
+ 	back to HOST_WIDE_INT.
+ 
+ 2021-04-27  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+ 
+ 	PR target/100106
+ 	* simplify-rtx.c (simplify_context::simplify_subreg): Check the
+ 	memory alignment for the outer mode.
+ 
+ 2021-04-27  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR middle-end/90773
+ 	* expr.c (op_by_pieces_d::get_usable_mode): New member function.
+ 	(op_by_pieces_d::run): Cange a while loop to a do-while loop.
+ 
+ 2021-04-27  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR target/99977
+ 	* config/arm/arm.c (arm_split_compare_and_swap): Fix up codegen
+ 	with negative immediates: ensure we expand cbranchsi4_scratch
+ 	correctly and ensure we satisfy its constraints.
+ 	* config/arm/sync.md
+ 	(@atomic_compare_and_swap<CCSI:arch><NARROW:mode>_1): Don't
+ 	attempt to tie two output operands together with constraints;
+ 	collapse two alternatives.
+ 	(@atomic_compare_and_swap<CCSI:arch><SIDI:mode>_1): Likewise.
+ 	* config/arm/thumb1.md (cbranchsi4_neg_late): New.
+ 
+ 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/100200
+ 	* config/aarch64/predicates.md (aarch64_sub_immediate,
+ 	aarch64_plus_immediate): Use -UINTVAL instead of -INTVAL.
+ 	* config/aarch64/aarch64.md (casesi, rotl<mode>3): Likewise.
+ 	* config/aarch64/aarch64.c (aarch64_print_operand,
+ 	aarch64_split_atomic_op, aarch64_expand_subvti): Likewise.
+ 
+ 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/100239
+ 	* tree-vect-generic.c (lower_vec_perm): Don't accept constant
+ 	permutations with all indices from the first zero element as vec_shl.
+ 
+ 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/100254
+ 	* cfgcleanup.c (outgoing_edges_match): Check REG_EH_REGION on
+ 	last1 and last2 insns rather than BB_END (bb1) and BB_END (bb2) insns.
+ 
+ 2021-04-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99912
+ 	* passes.def: Add comment about new TODO_remove_unused_locals.
+ 	* tree-stdarg.c (pass_data_stdarg): Run TODO_remove_unused_locals
+ 	at start.
+ 
+ 2021-04-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99912
+ 	* passes.def (pass_all_optimizations): Add pass_dse before
+ 	the first pass_dce, move the first pass_dse before the
+ 	pass_dce following pass_pre.
+ 
+ 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/95527
+ 	* generic-match-head.c: Include tm.h.
+ 	* gimple-match-head.c: Include tm.h.
+ 	* match.pd (CLZ == INTEGER_CST): Don't use
+ 	#ifdef CLZ_DEFINED_VALUE_AT_ZERO, only test CLZ_DEFINED_VALUE_AT_ZERO
+ 	if clz == CFN_CLZ.  Add missing val declaration.
+ 	(CTZ cmp CST): New simplifications.
+ 
+ 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/96696
+ 	* expr.c (expand_expr_divmod): New function.
+ 	(expand_expr_real_2) <case TRUNC_DIV_EXPR>: Use it for truncations and
+ 	divisions.  Formatting fixes.
+ 	<case MULT_EXPR>: Optimize x / y * y as x - x % y if the latter is
+ 	cheaper.
+ 
+ 2021-04-27  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/99951
+ 	* ipa-param-manipulation.c (ipa_param_adjustments::modify_call):
+ 	If removing a call statement LHS SSA name, release it.
+ 
+ 2021-04-27  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/100236
+ 	* config/arm/arm.c (THUMB2_WORK_REGS): Check PIC_OFFSET_TABLE_REGNUM
+ 	is valid before including it in the mask.
+ 
+ 2021-04-27  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/100270
+ 	* config/aarch64/aarch64.c (aarch64_comp_type_attributes): Handle
+ 	SVE attributes.
+ 
+ 2021-04-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100051
+ 	* tree-ssa-alias.c (indirect_ref_may_alias_decl_p): Add
+ 	disambiguator based on access size vs. decl size.
+ 
+ 2021-04-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100278
+ 	* tree-ssa-pre.c (compute_avail): Give up when we cannot
+ 	adjust TBAA beacuse of mismatching bases.
+ 
+ 2021-04-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99405
+ 	* config/i386/i386.md (*<insn><mode>3_mask, *<insn><mode>3_mask_1):
+ 	For any_rotate define_insn_split and following splitters, use
+ 	SWI iterator instead of SWI48.
+ 
+ 2021-04-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99776
+ 	* match.pd (bit_field_ref (ctor)): Relax element extract
+ 	type compatibility checks.
+ 
+ 2021-04-27  Cui,Lili  <lili.cui@intel.com>
+ 
+ 	* common/config/i386/i386-common.c (processor_names):
+ 	Sync processor_names with processor_type.
+ 	* config/i386/i386-options.c (processor_cost_table):
+ 	Sync processor_cost_table with processor_type.
+ 
+ 2021-04-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* value-range.cc (irange::irange_set_1bit_anti_range): Add assert.
+ 	(irange::set): Call irange_set_1bit_anti_range for handling all
+ 	1-bit ranges.  Fall through on ~[MIN,MAX].
+ 
+ 2021-04-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* value-range.cc (irange::legacy_num_pairs): Remove.
+ 	(irange::invert): Change gcc_assert to gcc_checking_assert.
+ 	* value-range.h (irange::num_pairs): Adjust for a cached
+ 	num_pairs().  Also, rename all gcc_assert's to
+ 	gcc_checking_assert's.
+ 
+ 2021-04-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* value-range.cc (irange::operator=): Set m_kind.
+ 	(irange::copy_to_legacy): Handle varying and undefined sources
+ 	as a legacy copy since they can be easily copied.
+ 	(irange::irange_set): Set m_kind.
+ 	(irange::irange_set_anti_range): Same.
+ 	(irange::set): Rename normalize_min_max to normalize_kind.
+ 	(irange::verify_range): Adjust for multi-ranges having the
+ 	m_kind field set.
+ 	(irange::irange_union): Set m_kind.
+ 	(irange::irange_intersect): Same.
+ 	(irange::invert): Same.
+ 	* value-range.h (irange::kind): Always return m_kind.
+ 	(irange::varying_p): Rename to...
+ 	(irange::varying_comptaible_p): ...this.
+ 	(irange::undefined_p): Only look at m_kind.
+ 	(irange::irange): Always set VR_UNDEFINED if applicable.
+ 	(irange::set_undefined): Always set VR_UNDEFINED.
+ 	(irange::set_varying): Always set m_kind to VR_VARYING.
+ 	(irange::normalize_min_max): Rename to...
+ 	(irange::normalize_kind): ...this.
+ 
+ 2021-04-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* gimple-ssa-evrp-analyze.c (evrp_range_analyzer::set_ssa_range_info):
+ 	Adjust for constant_p including varying_p.
+ 	* tree-vrp.c (vrp_prop::finalize): Same.
+ 	(determine_value_range): Same.
+ 	* vr-values.c (vr_values::range_of_expr): Same.
+ 	* value-range.cc (irange::symbolic_p): Do not check varying_p.
+ 	(irange::constant_p): Same.
+ 
+ 2021-04-26  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	* value-range.cc (irange::legacy_lower_bound): Replace
+ 	  !undefined_p check with num_ranges > 0.
+ 	(irange::legacy_upper_bound): Same.
+ 	* value-range.h (irange::type): Same.
+ 	(irange::lower_bound): Same.
+ 	(irange::upper_bound): Same.
+ 
+ 2021-04-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99956
+ 	* gimple-loop-interchange.cc (compute_access_stride):
+ 	Try instantiating the access in a shallower loop nest
+ 	if instantiating failed.
+ 	(compute_access_strides): Pass adjustable loop_nest
+ 	to compute_access_stride.
+ 
+ 2021-04-26  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* doc/sourcebuild.texi (arm_cmse_hw): Document.
+ 
+ 2021-04-26  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/iterators.md (vwcore): Handle V4BF, V8BF.
+ 
+ 2021-04-26  Thomas Schwinge  <thomas@codesourcery.com>
+ 	    Nathan Sidwell  <nathan@codesourcery.com>
+ 	    Tom de Vries  <vries@codesourcery.com>
+ 	    Julian Brown  <julian@codesourcery.com>
+ 	    Kwok Cheung Yeung  <kcy@codesourcery.com>
+ 
+ 	* omp-offload.c (oacc_validate_dims): Implement
+ 	'-Wopenacc-parallelism'.
+ 	* doc/invoke.texi (-Wopenacc-parallelism): Document.
+ 
+ 2021-04-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-cfg.h (gimplify_build1): Remove.
+ 	(gimplify_build2): Likewise.
+ 	(gimplify_build3): Likewise.
+ 	* tree-cfg.c (gimplify_build1): Move to tree-vect-generic.c.
+ 	(gimplify_build2): Likewise.
+ 	(gimplify_build3): Likewise.
+ 	* tree-vect-generic.c (gimplify_build1): Move from tree-cfg.c.
+ 	Modernize.
+ 	(gimplify_build2): Likewise.
+ 	(gimplify_build3): Likewise.
+ 	(tree_vec_extract): Use resimplify with following SSA edges.
+ 	(expand_vector_parallel): Avoid passing NULL size/bitpos
+ 	to tree_vec_extract.
+ 	* expr.c (store_constructor): Deal with zero-element CTORs.
+ 	* match.pd (bit_field_ref <vector CTOR>): Make sure to
+ 	produce vector constants when possible.
+ 
+ 2021-04-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-complex.c: Include gimple-fold.h.
+ 	(expand_complex_addition): Use gimple_build.
+ 	(expand_complex_multiplication_components): Likewise.
+ 	(expand_complex_multiplication): Likewise.
+ 	(expand_complex_div_straight): Likewise.
+ 	(expand_complex_div_wide): Likewise.
+ 	(expand_complex_division): Likewise.
+ 	(expand_complex_conjugate): Likewise.
+ 	(expand_complex_comparison): Likewise.
+ 
+ 2021-04-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-phiopt.c (two_value_replacement): Remove use
+ 	of legacy gimplify_buildN API.
+ 
+ 2021-04-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99473
+ 	* tree-ssa-phiopt.c (cond_store_replacement): Handle all
+ 	stores.
+ 
+ 2021-04-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_builtin):
+ 	Use replace_call_with_value.
+ 
+ 2021-04-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-propagate.h (valid_gimple_rhs_p): Remove.
+ 	(update_gimple_call): Likewise.
+ 	(update_call_from_tree): Likewise.
+ 	* tree-ssa-propagate.c (valid_gimple_rhs_p): Remove.
+ 	(valid_gimple_call_p): Likewise.
+ 	(move_ssa_defining_stmt_for_defs): Likewise.
+ 	(finish_update_gimple_call): Likewise.
+ 	(update_gimple_call): Likewise.
+ 	(update_call_from_tree): Likewise.
+ 	(propagate_tree_value_into_stmt): Use replace_call_with_value.
+ 	* gimple-fold.h (update_gimple_call): Declare.
+ 	* gimple-fold.c (valid_gimple_rhs_p): Move here from
+ 	tree-ssa-propagate.c.
+ 	(update_gimple_call): Likewise.
+ 	(valid_gimple_call_p): Likewise.
+ 	(finish_update_gimple_call): Likewise, and simplify.
+ 	(gimplify_and_update_call_from_tree): Implement
+ 	update_call_from_tree functionality, avoid excessive
+ 	push/pop_gimplify_context.
+ 	(gimple_fold_builtin): Use only gimplify_and_update_call_from_tree.
+ 	(gimple_fold_call): Likewise.
+ 	* gimple-ssa-sprintf.c (try_substitute_return_value): Likewise.
+ 	* tree-ssa-ccp.c (ccp_folder::fold_stmt): Likewise.
+ 	(pass_fold_builtins::execute): Likewise.
+ 	(optimize_stack_restore): Use replace_call_with_value.
+ 	* tree-cfg.c (fold_loop_internal_call): Likewise.
+ 	* tree-ssa-dce.c (maybe_optimize_arith_overflow): Use
+ 	only gimplify_and_update_call_from_tree.
+ 	* tree-ssa-strlen.c (handle_builtin_strlen): Likewise.
+ 	(handle_builtin_strchr): Likewise.
+ 	* tsan.c: Include gimple-fold.h instead of tree-ssa-propagate.h.
+ 
+ 2021-04-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/100255
+ 	* vmsdbgout.c (ASM_OUTPUT_DEBUG_STRING, vmsdbgout_begin_block,
+ 	vmsdbgout_end_block, lookup_filename, vmsdbgout_source_line): Remove
+ 	register keywords.
+ 
+ 2021-04-25  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/98911
+ 	* config/i386/i386-builtin.def (BDESC): Change the icode of
+ 	the following builtins to CODE_FOR_nothing.
+ 	* config/i386/i386.c (ix86_gimple_fold_builtin): Fold
+ 	IX86_BUILTIN_PCMPEQB128, IX86_BUILTIN_PCMPEQW128,
+ 	IX86_BUILTIN_PCMPEQD128, IX86_BUILTIN_PCMPEQQ,
+ 	IX86_BUILTIN_PCMPEQB256, IX86_BUILTIN_PCMPEQW256,
+ 	IX86_BUILTIN_PCMPEQD256, IX86_BUILTIN_PCMPEQQ256,
+ 	IX86_BUILTIN_PCMPGTB128, IX86_BUILTIN_PCMPGTW128,
+ 	IX86_BUILTIN_PCMPGTD128, IX86_BUILTIN_PCMPGTQ,
+ 	IX86_BUILTIN_PCMPGTB256, IX86_BUILTIN_PCMPGTW256,
+ 	IX86_BUILTIN_PCMPGTD256, IX86_BUILTIN_PCMPGTQ256.
+ 	* config/i386/sse.md (avx2_eq<mode>3): Deleted.
+ 	(sse2_eq<mode>3): Ditto.
+ 	(sse4_1_eqv2di3): Ditto.
+ 	(sse2_gt<mode>3): Rename to ..
+ 	(*sse2_gt<mode>3): .. this.
+ 
+ 2021-04-24  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	Revert:
+ 	2021-04-24  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR target/100152
+ 	* config/darwin.c (darwin_binds_local_p): Assume that any
+ 	public symbol might be interposed for PIC code. Update function
+ 	header comment to reflect current Darwin capability.
+ 
+ 2021-04-24  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR target/100152
+ 	* config/darwin.c (darwin_binds_local_p): Assume that any
+ 	public symbol might be interposed for PIC code. Update function
+ 	header comment to reflect current Darwin capability.
+ 
+ 2021-04-24  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* doc/sourcebuild.texi: Document no-opts and any-opts target
+ 	selectors.
+ 
+ 2021-04-23  YiFei Zhu  <zhuyifei1999@gmail.com>
+ 
+ 	* config/bpf/bpf.h (ASM_OUTPUT_ALIGNED_BSS): Use .type and .lcomm.
+ 
+ 2021-04-23  YiFei Zhu  <zhuyifei1999@gmail.com>
+ 
+ 	* config/bpf/bpf.h (FUNCTION_BOUNDARY): Set to 64.
+ 
+ 2021-04-23  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100041
+ 	* config/i386/i386-options.c (ix86_option_override_internal):
+ 	Error out when -m96bit-long-double is used with 64bit targets.
+ 	* config/i386/i386.md (*pushxf_rounded): Remove pattern.
+ 
+ 2021-04-23  Martin Liska  <mliska@suse.cz>
+ 
+ 	* lto-wrapper.c: Remove FIXME about usage of
+ 	hardware_concurrency. The function is not on par with
+ 	what we have now.
+ 
+ 2021-04-23  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100182
+ 	* config/i386/sync.md (FILD_ATOMIC/FIST_ATOMIC FP load peephole2):
+ 	Copy operand 3 to operand 4.  Use sse_reg_operand
+ 	as operand 3 predicate.
+ 	(FILD_ATOMIC/FIST_ATOMIC FP load peephole2 with mem blockage): Ditto.
+ 	(LDX_ATOMIC/STX_ATOMIC FP load peephole2): Ditto.
+ 	(LDX_ATOMIC/LDX_ATOMIC FP load peephole2 with mem blockage): Ditto.
+ 	(FILD_ATOMIC/FIST_ATOMIC FP store peephole2):
+ 	Copy operand 1 to operand 0.
+ 	(FILD_ATOMIC/FIST_ATOMIC FP store peephole2 with mem blockage): Ditto.
+ 	(LDX_ATOMIC/STX_ATOMIC FP store peephole2): Ditto.
+ 	(LDX_ATOMIC/LDX_ATOMIC FP store peephole2 with mem blockage): Ditto.
+ 
+ 2021-04-23  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR rtl-optimization/100230
+ 	* early-remat.c (early_remat::sort_candidates): Use delete[]
+ 	instead of delete for array allocated with new[].
+ 
+ 2021-04-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	* genmatch.c (lower_cond): Remove VEC_COND_EXPR special-casing.
+ 	(capture_info::capture_info): Likewise.
+ 	(capture_info::walk_match): Likewise.
+ 	(expr::gen_transform): Likewise.
+ 	(dt_simplify::gen_1): Likewise.
+ 	* gimple-match-head.c (maybe_resimplify_conditional_op):
+ 	Remove VEC_COND_EXPR special-casing.
+ 	(gimple_simplify): Likewise.
+ 	* gimple.c (gimple_could_trap_p_1): Adjust.
+ 	* tree-ssa-pre.c (compute_avail): Allow VEC_COND_EXPR
+ 	to participate in PRE.
+ 
+ 2021-04-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	* cfganal.c (connect_infinite_loops_to_exit): First call
+ 	add_noreturn_fake_exit_edges.
+ 	* ipa-sra.c (process_scan_results): Do not call the now redundant
+ 	add_noreturn_fake_exit_edges.
+ 	* predict.c (tree_estimate_probability): Likewise.
+ 	(rebuild_frequencies): Likewise.
+ 	* store-motion.c (one_store_motion_pass): Likewise.
+ 
+ 2021-04-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100222
+ 	* predict.c (pass_profile::execute): Remove redundant call to
+ 	mark_irreducible_loops.
+ 	(report_predictor_hitrates): Likewise.
+ 
+ 2021-04-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr): Avoid
+ 	valid_gimple_rhs_p by instead gimplifying to one.
+ 
+ 2021-04-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99971
+ 	* tree-vect-data-refs.c (vect_slp_analyze_node_dependences):
+ 	Always use TBAA for loads.
+ 
+ 2021-04-23  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/100093
+ 	* config/i386/i386-options.c (ix86_option_override_internal):
+ 	Clear MASK_AVX256_SPLIT_UNALIGNED_LOAD/STORE in x_target_flags
+ 	when X86_TUNE_AVX256_UNALIGNED_LOAD/STORE_OPTIMAL is enabled
+ 	by target attribute.
+ 
+ 2021-04-23  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/aix71.h (PREFERRED_DEBUGGING_TYPE): Change to
+ 	DWARF2_DEBUG.
+ 	* config/rs6000/aix72.h (PREFERRED_DEBUGGING_TYPE): Same.
+ 
+ 2021-04-22  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config.gcc (powerpc-ibm-aix6.*): Remove.
+ 	* config/rs6000/aix61.h: Delete.
+ 
+ 2021-04-22  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR testsuite/100159
+ 	PR testsuite/100192
+ 	* builtins.c (expand_builtin): Fix typos and missing comments.
+ 	* dwarf2out.c (gen_subprogram_die): Likewise.
+ 	(gen_struct_or_union_type_die): Likewise.
+ 
+ 2021-04-22  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/100119
+ 	* config/i386/i386-expand.c (ix86_expand_convert_uns_sidf_sse):
+ 	Remove the sign with FE_DOWNWARD, where x - x = -0.0.
+ 
+ 2021-04-21  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/i386/darwin.h (TARGET_64BIT): Remove definition
+ 	based on TARGET_ISA_64BIT.
+ 	(TARGET_64BIT_P): Remove definition based on
+ 	TARGET_ISA_64BIT_P().
+ 
+ 2021-04-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	Revert:
+ 	2021-04-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	* lto-wrapper.c (cpuset_popcount): Remove.
+ 	(init_num_threads): Remove and use hardware_concurrency.
+ 
+ 2021-04-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR jit/98615
+ 	* main.c (main): Call toplev::finalize in CHECKING_P mode.
+ 	* ipa-modref.c (ipa_modref_c_finalize): summaries are NULL
+ 	when incremental LTO linking happens.
+ 
+ 2021-04-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	* lto-wrapper.c (run_gcc): When -flto=jobserver is used, but the
+ 	makeserver cannot be detected, then use -flto=N fallback.
+ 
+ 2021-04-21  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* acinclude.m4 (gcc_AC_INITFINI_ARRAY): When cross-compiling,
+ 	default to yes for aarch64-linux-gnu.
+ 	* configure: Regenerate.
+ 
+ 2021-04-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	* lto-wrapper.c (cpuset_popcount): Remove.
+ 	(init_num_threads): Remove and use hardware_concurrency.
+ 
+ 2021-04-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/i386/i386.c: Remove superfluous || TARGET_MACHO
+ 	which remains to be '(... || 0)' and clang complains about it.
+ 	* dwarf2out.c (AT_vms_delta): Declare conditionally.
+ 	(add_AT_vms_delta): Likewise.
+ 	* tree.c (fld_simplified_type): Use rather more common pattern
+ 	for disabling of something (#if 0).
+ 	(get_tree_code_name): Likewise.
+ 	(verify_type_variant): Likewise.
+ 
+ 2021-04-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/i386/i386-expand.c (decide_alignment): Use newly named
+ 	macro TARGET_CPU_P.
+ 	* config/i386/i386.c (ix86_decompose_address): Likewise.
+ 	(ix86_address_cost): Likewise.
+ 	(ix86_lea_outperforms): Likewise.
+ 	(ix86_avoid_lea_for_addr): Likewise.
+ 	(ix86_add_stmt_cost): Likewise.
+ 	* config/i386/i386.h (TARGET_*): Remove.
+ 	(TARGET_CPU_P): New macro.
+ 	* config/i386/i386.md: Use newly named macro TARGET_CPU_P.
+ 	* config/i386/x86-tune-sched-atom.c (do_reorder_for_imul): Likewise.
+ 	(swap_top_of_ready_list): Likewise.
+ 	(ix86_atom_sched_reorder): Likewise.
+ 	* config/i386/x86-tune-sched-bd.c (ix86_bd_has_dispatch): Likewise.
+ 	* config/i386/x86-tune-sched.c (ix86_adjust_cost): Likewise.
+ 
+ 2021-04-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/i386/i386-options.c (TARGET_EXPLICIT_NO_SAHF_P):
+ 	Define.
+ 	(SET_TARGET_NO_SAHF): Likewise.
+ 	(TARGET_EXPLICIT_PREFETCH_SSE_P): Likewise.
+ 	(SET_TARGET_PREFETCH_SSE): Likewise.
+ 	(TARGET_EXPLICIT_NO_TUNE_P): Likewise.
+ 	(SET_TARGET_NO_TUNE): Likewise.
+ 	(TARGET_EXPLICIT_NO_80387_P): Likewise.
+ 	(SET_TARGET_NO_80387): Likewise.
+ 	(DEF_PTA): New.
+ 	* config/i386/i386.h (TARGET_*): Remove.
+ 	* opth-gen.awk: Generate new used macros.
+ 
+ 2021-04-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/i386/i386.h (PTA_*): Remove.
+ 	(enum pta_flag): New.
+ 	(DEF_PTA): Generate PTA_* values from i386-isa.def.
+ 	* config/i386/i386-isa.def: New file.
+ 
+ 2021-04-21  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR target/99988
+ 	* config/aarch64/aarch64-bti-insert.c (aarch64_bti_j_insn_p): New.
+ 	(rest_of_insert_bti): Avoid inserting duplicate bti j insns for
+ 	jump table targets.
+ 
+ 2021-04-21  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config.gcc: Install mwaitintrin.h for i[34567]86-*-* and
+ 	x86_64-*-* targets.
+ 	* common/config/i386/i386-common.c (OPTION_MASK_ISA2_MWAIT_SET):
+ 	New.
+ 	(OPTION_MASK_ISA2_MWAIT_UNSET): Likewise.
+ 	(ix86_handle_option): Handle -mmwait.
+ 	* config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins):
+ 	Replace OPTION_MASK_ISA_SSE3 with OPTION_MASK_ISA2_MWAIT on
+ 	__builtin_ia32_monitor and __builtin_ia32_mwait.
+ 	* config/i386/i386-options.c (isa2_opts): Add -mmwait.
+ 	(ix86_valid_target_attribute_inner_p): Likewise.
+ 	(ix86_option_override_internal): Enable mwait/monitor
+ 	instructions for -msse3.
+ 	* config/i386/i386.h (TARGET_MWAIT): New.
+ 	(TARGET_MWAIT_P): Likewise.
+ 	* config/i386/i386.opt: Add -mmwait.
+ 	* config/i386/mwaitintrin.h: New file.
+ 	* config/i386/pmmintrin.h: Include <mwaitintrin.h>.
+ 	* config/i386/sse.md (sse3_mwait): Replace TARGET_SSE3 with
+ 	TARGET_MWAIT.
+ 	(@sse3_monitor_<mode>): Likewise.
+ 	* config/i386/x86gprintrin.h: Include <mwaitintrin.h>.
+ 	* doc/extend.texi: Document mwait target attribute.
+ 	* doc/invoke.texi: Document -mmwait.
+ 
+ 2021-04-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/i386/i386-options.c (DEF_ENUM): Remove it.
+ 	* config/i386/i386-opts.h (DEF_ENUM): Likewise.
+ 	* config/i386/stringop.def (DEF_ENUM): Likewise.
+ 
+ 2021-04-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	* tree-cfg.c (gimple_verify_flow_info): Use qD instead
+ 	of print_generic_expr.
+ 
+ 2021-04-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/100148
+ 	* cprop.c (constprop_register): Use next_nondebug_insn instead of
+ 	NEXT_INSN.
+ 
+ 2021-04-21  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR ipa/98815
+ 	* cgraphunit.c (cgraph_node::analyze): Remove duplicate
+ 	free_dominance_info calls.
+ 
+ 2021-04-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple-fold.c (maybe_fold_reference): Remove is_lhs
+ 	parameter (and assume it to be false).
+ 	(fold_gimple_assign): Adjust, remove all callers of
+ 	maybe_fold_reference calling it with is_lhs true.
+ 	(gimple_fold_call): Likewise.
+ 	(fold_stmt_1): Likewise.
+ 
+ 2021-04-21  Richard Biener  <rguenther@suse.de>
+ 
+ 	* fold-const.c (pedantic_non_lvalue_loc): Remove.
+ 	(fold_binary_loc): Adjust.
+ 	(fold_ternary_loc): Likewise.
+ 
+ 2021-04-21  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR middle-end/100130
+ 	* varasm.c (get_block_for_decl): Make sure that any use of the
+ 	retain attribute matches the section's retain flag.
+ 	(switch_to_section): Check for retain mismatches even when
+ 	changing sections, but do not warn if the given decl is the
+ 	section's named.decl.
+ 	(output_object_block): Pass the first decl in the block (if any)
+ 	to switch_to_section.
+ 
+ 2021-04-20  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/i386-c.c (ix86_target_macros_internal): Define
+ 	__CRC32__ for -mcrc32.
+ 	* config/i386/i386-options.c (ix86_option_override_internal):
+ 	Enable crc32 instruction for -msse4.2.
+ 	* config/i386/i386.md (sse4_2_crc32<mode>): Remove TARGET_SSE4_2
+ 	check.
+ 	(sse4_2_crc32di): Likewise.
+ 	* config/i386/ia32intrin.h: Use crc32 target option for CRC32
+ 	intrinsics.
+ 
+ 2021-04-20  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	PR target/100108
+ 	* config/rs6000/rs6000.c (rs6000_machine_from_flags): Do not consider
+ 	OPTION_MASK_ISEL.
+ 
+ 2021-04-20  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Fix typo.
+ 	* params.opt: Likewise.
+ 
+ 2021-04-20  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Document new param.
+ 
+ 2021-04-19  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/100081
+ 	* gimple-range-cache.h (ranger_cache): Inherit from gori_compute
+ 	rather than gori_compute_cache.
+ 	* gimple-range-gori.cc (is_gimple_logical_p): Move to top of file.
+ 	(range_def_chain::m_logical_depth): New member.
+ 	(range_def_chain::range_def_chain): Initialize m_logical_depth.
+ 	(range_def_chain::get_def_chain): Don't build defchains through more
+ 	than LOGICAL_LIMIT logical expressions.
+ 	* params.opt (param_ranger_logical_depth): New.
+ 
+ 2021-04-19  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/100067
+ 	* config/arm/arm.c (arm_configure_build_target): Do not strip
+ 	extended FPU/SIMD feature bits from the target ISA when -mfpu
+ 	is specified (partial revert of r11-8168).
+ 
+ 2021-04-19  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* params.opt (-param=openacc-kernels=): Add.
+ 	* omp-oacc-kernels-decompose.cc
+ 	(pass_omp_oacc_kernels_decompose::gate): Use it.
+ 	* doc/invoke.texi (-fopenacc-kernels=@var{mode}): Move...
+ 	(--param): ... here, 'openacc-kernels'.
+ 
+ 2021-04-19  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR c/100143
+ 	* gengtype.c (finish_root_table): Align function arguments
+ 	in between declaration and definition.
+ 
+ 2021-04-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* config/i386/winnt.c (i386_pe_seh_cold_init): Properly deal with
+ 	frames larger than the SEH maximum frame size.
+ 
+ 2021-04-18  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	PR rtl-optimization/99927
+ 	* combine.c (distribute_notes) [REG_UNUSED]: If the register already
+ 	is dead, just drop it.
+ 
+ 2021-04-17  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/99914
+ 	* config/i386/winnt-d.c (TARGET_D_TEMPLATES_ALWAYS_COMDAT): Define.
+ 	* doc/tm.texi: Regenerate.
+ 	* doc/tm.texi.in (D language and ABI): Add @hook for
+ 	TARGET_D_TEMPLATES_ALWAYS_COMDAT.
+ 
+ 2021-04-17  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* config/darwin-d.c (darwin_d_handle_target_object_format): New
+ 	function.
+ 	(darwin_d_register_target_info): New function.
+ 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
+ 	* config/dragonfly-d.c (dragonfly_d_handle_target_object_format): New
+ 	function.
+ 	(dragonfly_d_register_target_info): New function.
+ 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
+ 	* config/freebsd-d.c (freebsd_d_handle_target_object_format): New
+ 	function.
+ 	(freebsd_d_register_target_info): New function.
+ 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
+ 	* config/glibc-d.c (glibc_d_handle_target_object_format): New
+ 	function.
+ 	(glibc_d_register_target_info): New function.
+ 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
+ 	* config/i386/i386-d.c (ix86_d_handle_target_object_format): New
+ 	function.
+ 	(ix86_d_register_target_info): Add ix86_d_handle_target_object_format
+ 	as handler for objectFormat key.
+ 	* config/i386/winnt-d.c (winnt_d_handle_target_object_format): New
+ 	function.
+ 	(winnt_d_register_target_info): New function.
+ 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
+ 	* config/netbsd-d.c (netbsd_d_handle_target_object_format): New
+ 	function.
+ 	(netbsd_d_register_target_info): New function.
+ 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
+ 	* config/openbsd-d.c (openbsd_d_handle_target_object_format): New
+ 	function.
+ 	(openbsd_d_register_target_info): New function.
+ 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
+ 	* config/pa/pa-d.c (pa_d_handle_target_object_format): New function.
+ 	(pa_d_register_target_info): Add pa_d_handle_target_object_format as
+ 	handler for objectFormat key.
+ 	* config/rs6000/rs6000-d.c (rs6000_d_handle_target_object_format): New
+ 	function.
+ 	(rs6000_d_register_target_info): Add
+ 	rs6000_d_handle_target_object_format as handler for objectFormat key.
+ 	* config/sol2-d.c (solaris_d_handle_target_object_format): New
+ 	function.
+ 	(solaris_d_register_target_info): New function.
+ 	(TARGET_D_REGISTER_OS_TARGET_INFO): Define.
+ 
+ 2021-04-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/91710
+ 	* config/aarch64/aarch64.c (aarch64_function_arg_alignment): Change
+ 	abi_break argument from bool * to unsigned *, store there the pre-GCC 9
+ 	alignment.
+ 	(aarch64_layout_arg, aarch64_gimplify_va_arg_expr): Adjust callers.
+ 	(aarch64_function_arg_regno_p): Likewise.  Only emit -Wpsabi note if
+ 	the old and new alignment after applying MIN/MAX to it is different.
+ 
+ 2021-04-16  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/100048
+ 	* config/aarch64/aarch64-sve.md (@aarch64_sve_trn1_conv<mode>): New.
+ 	* config/aarch64/aarch64.c (aarch64_expand_sve_const_pred_trn): Use new
+ 	TRN optab.
+ 	* config/aarch64/iterators.md (UNSPEC_TRN1_CONV): New.
+ 
+ 2021-04-16  Bill Schmidt  <wschmidt@linux.ibm.com>
+ 
+ 	* doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions): Revise
+ 	this section and its subsections.
+ 
+ 2021-04-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/100075
+ 	* config/aarch64/aarch64.md (*neg_asr_si2_extr, *extrsi5_insn_di): New
+ 	define_insn patterns.
+ 
+ 2021-04-16  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/98689
+ 	* reg-notes.def (UNTYPED_CALL): New note.
+ 	* combine.c (distribute_notes): Handle it.
+ 	* emit-rtl.c (try_split): Likewise.
+ 	* rtlanal.c (rtx_properties::try_to_add_insn): Likewise.  Assume
+ 	that calls with the note implicitly set all return value registers.
+ 	* builtins.c (expand_builtin_apply): Add a REG_UNTYPED_CALL
+ 	to untyped_calls.
+ 
+ 2021-04-16  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/99596
+ 	* rtlanal.c (rtx_properties::try_to_add_insn): Don't add global
+ 	register accesses for const calls.  Assume that pure functions
+ 	can only read from global registers.  Ignore cases in which
+ 	the stack pointer has been marked global.
+ 
+ 2021-04-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99767
+ 	* tree-vect-loop.c (vect_transform_loop): Don't remove just
+ 	dead scalar .MASK_LOAD calls, but also dead .COND_* calls - replace
+ 	them by their last argument.
+ 
+ 2021-04-15  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Other params don't use it, remove it.
+ 
+ 2021-04-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple-builder.h: Add deprecation note.
+ 
+ 2021-04-15  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR c++/98852
+ 	* attribs.h (restrict_type_identity_attributes_to): Declare.
+ 	* attribs.c (restrict_type_identity_attributes_to): New function.
+ 
+ 2021-04-15  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR c/98852
+ 	* attribs.h (affects_type_identity_attributes): Declare.
+ 	* attribs.c (remove_attributes_matching): New function.
+ 	(affects_type_identity_attributes): Likewise.
+ 
+ 2021-04-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/100056
+ 	* config/aarch64/aarch64.md (*<LOGICAL:optab>_<SHIFT:optab><mode>3):
+ 	Add combine splitters for *<LOGICAL:optab>_ashl<mode>3 with
+ 	ZERO_EXTEND, SIGN_EXTEND or AND.
+ 
+ 2021-04-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/99929
+ 	* rtl.h (same_vector_encodings_p): New function.
+ 	* cse.c (exp_equiv_p): Check that CONST_VECTORs have the same encoding.
+ 	* cselib.c (rtx_equal_for_cselib_1): Likewise.
+ 	* jump.c (rtx_renumbered_equal_p): Likewise.
+ 	* lra-constraints.c (operands_match_p): Likewise.
+ 	* reload.c (operands_match_p): Likewise.
+ 	* rtl.c (rtx_equal_p_cb, rtx_equal_p): Likewise.
+ 
+ 2021-04-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* print-rtl.c (rtx_writer::print_rtx_operand_codes_E_and_V): Print
+ 	more information about variable-length CONST_VECTORs.
+ 
+ 2021-04-14  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/100066
+ 	* lra-constraints.c (split_reg): Check paradoxical_subreg_p for
+ 	ordered modes when choosing splitting mode for hard reg.
+ 
+ 2021-04-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/99246
+ 	* config/aarch64/aarch64.c (aarch64_expand_sve_const_vector_sel):
+ 	New function.
+ 	(aarch64_expand_sve_const_vector): Use it for nelts_per_pattern==2.
+ 
+ 2021-04-14  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* config/s390/s390-builtins.def (O_M5, O_M12, ...): Add new macros
+ 	for mask operand types.
+ 	(s390_vec_permi_s64, s390_vec_permi_b64, s390_vec_permi_u64)
+ 	(s390_vec_permi_dbl, s390_vpdi): Use the M5 type for the immediate
+ 	operand.
+ 	(s390_vec_msum_u128, s390_vmslg): Use the M12 type for the
+ 	immediate operand.
+ 	* config/s390/s390.c (s390_const_operand_ok): Check the new
+ 	operand types and generate a list of valid values.
+ 
+ 2021-04-14  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* doc/tm.texi: Regenerate.
+ 	* doc/tm.texi.in (D language and ABI): Add @hook for
+ 	TARGET_D_REGISTER_OS_TARGET_INFO.
+ 
+ 2021-04-14  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* config/aarch64/aarch64-d.c (aarch64_d_handle_target_float_abi): New
+ 	function.
+ 	(aarch64_d_register_target_info): New function.
+ 	* config/aarch64/aarch64-protos.h (aarch64_d_register_target_info):
+ 	Declare.
+ 	* config/aarch64/aarch64.h (TARGET_D_REGISTER_CPU_TARGET_INFO):
+ 	Define.
+ 	* config/arm/arm-d.c (arm_d_handle_target_float_abi): New function.
+ 	(arm_d_register_target_info): New function.
+ 	* config/arm/arm-protos.h (arm_d_register_target_info): Declare.
+ 	* config/arm/arm.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
+ 	* config/i386/i386-d.c (ix86_d_handle_target_float_abi): New function.
+ 	(ix86_d_register_target_info): New function.
+ 	* config/i386/i386-protos.h (ix86_d_register_target_info): Declare.
+ 	* config/i386/i386.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
+ 	* config/mips/mips-d.c (mips_d_handle_target_float_abi): New function.
+ 	(mips_d_register_target_info): New function.
+ 	* config/mips/mips-protos.h (mips_d_register_target_info): Declare.
+ 	* config/mips/mips.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
+ 	* config/pa/pa-d.c (pa_d_handle_target_float_abi): New function.
+ 	(pa_d_register_target_info): New function.
+ 	* config/pa/pa-protos.h (pa_d_register_target_info): Declare.
+ 	* config/pa/pa.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
+ 	* config/riscv/riscv-d.c (riscv_d_handle_target_float_abi): New
+ 	function.
+ 	(riscv_d_register_target_info): New function.
+ 	* config/riscv/riscv-protos.h (riscv_d_register_target_info): Declare.
+ 	* config/riscv/riscv.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
+ 	* config/rs6000/rs6000-d.c (rs6000_d_handle_target_float_abi): New
+ 	function.
+ 	(rs6000_d_register_target_info): New function.
+ 	* config/rs6000/rs6000-protos.h (rs6000_d_register_target_info):
+ 	Declare.
+ 	* config/rs6000/rs6000.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
+ 	* config/s390/s390-d.c (s390_d_handle_target_float_abi): New function.
+ 	(s390_d_register_target_info): New function.
+ 	* config/s390/s390-protos.h (s390_d_register_target_info): Declare.
+ 	* config/s390/s390.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
+ 	* config/sparc/sparc-d.c (sparc_d_handle_target_float_abi): New
+ 	function.
+ 	(sparc_d_register_target_info): New function.
+ 	* config/sparc/sparc-protos.h (sparc_d_register_target_info): Declare.
+ 	* config/sparc/sparc.h (TARGET_D_REGISTER_CPU_TARGET_INFO): Define.
+ 	* doc/tm.texi: Regenerate.
+ 	* doc/tm.texi.in (D language and ABI): Add @hook for
+ 	TARGET_D_REGISTER_CPU_TARGET_INFO.
+ 
+ 2021-04-14  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* config/i386/i386-d.c (ix86_d_has_stdcall_convention): New function.
+ 	* config/i386/i386-protos.h (ix86_d_has_stdcall_convention): Declare.
+ 	* config/i386/i386.h (TARGET_D_HAS_STDCALL_CONVENTION): Define.
+ 	* doc/tm.texi: Regenerate.
+ 	* doc/tm.texi.in (D language and ABI): Add @hook for
+ 	TARGET_D_HAS_STDCALL_CONVENTION.
+ 
+ 2021-04-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-cfg.c (verify_gimple_assign_ternary): Verify that
+ 	VEC_COND_EXPRs have a gimple_val condition.
+ 	* tree-ssa-propagate.c (valid_gimple_rhs_p): VEC_COND_EXPR
+ 	can no longer have a GENERIC condition.
+ 
+ 2021-04-14  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/100067
+ 	* config/arm/arm.c (arm_configure_build_target): Strip isa_all_fpbits
+ 	from the isa_delta when -mfpu has been used.
+ 	(arm_options_perform_arch_sanity_checks): It's the architecture that
+ 	lacks an FPU not the processor.
+ 
+ 2021-04-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/100053
+ 	* tree-ssa-sccvn.c (vn_nary_op_get_predicated_value): Do
+ 	not use optimistic dominance queries for backedges to validate
+ 	predicated values.
+ 	(dominated_by_p_w_unex): Add parameter to ignore executable
+ 	state on backedges.
+ 	(rpo_elim::eliminate_avail): Adjust.
+ 
+ 2021-04-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/100028
+ 	* config/aarch64/aarch64.md (*aarch64_bfxil<mode>_extr,
+ 	*aarch64_bfxilsi_extrdi): New define_insn patterns.
+ 
+ 2021-04-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99648
+ 	* simplify-rtx.c (simplify_immed_subreg): For MODE_COMPOSITE_P
+ 	outermode, return NULL if the result doesn't encode back to the
+ 	original byte sequence.
+ 	(simplify_gen_subreg): Don't create SUBREGs from constants to
+ 	MODE_COMPOSITE_P outermode.
+ 
+ 2021-04-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/99905
+ 	* combine.c (expand_compound_operation): If pos + len > modewidth,
+ 	perform the right shift by pos in inner_mode and then convert to mode,
+ 	instead of trying to simplify a shift of rtx with inner_mode by pos
+ 	as if it was a shift in mode.
+ 
+ 2021-04-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/99830
+ 	* combine.c (simplify_and_const_int_1): Don't optimize varop
+ 	away if it has side-effects.
+ 
+ 2021-04-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/extend.texi: Escape @smallexample content.
+ 
+ 2021-04-12  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
+ 
+ 	* config/s390/s390.md ("*movdi_31", "*movdi_64"): Add
+ 	  alternative in order to load a DFP zero.
+ 
+ 2021-04-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/extend.texi: Be more precise in documentation
+ 	of symver attribute.
+ 
+ 2021-04-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR sanitizer/99877
+ 	* gimplify.c (gimplify_expr): Right now, we unpoison all
+ 	variables before a goto <dest>. We should not do it if we are
+ 	in a omp context.
+ 
+ 2021-04-12  Cui,Lili  <lili.cui@intel.com>
+ 
+ 	* common/config/i386/cpuinfo.h (get_intel_cpu): Handle
+ 	rocketlake.
+ 	* common/config/i386/i386-common.c (processor_names): Add
+ 	rocketlake.
+ 	(processor_alias_table): Add rocketlake.
+ 	* common/config/i386/i386-cpuinfo.h (processor_subtypes): Add
+ 	INTEL_COREI7_ROCKETLAKE.
+ 	* config.gcc: Add -march=rocketlake.
+ 	* config/i386/i386-c.c (ix86_target_macros_internal): Handle
+ 	rocketlake.
+ 	* config/i386/i386-options.c (m_ROCKETLAKE)  : Define.
+ 	(processor_cost_table): Add rocketlake cost.
+ 	* config/i386/i386.h (ix86_size_cost) : Define
+ 	TARGET_ROCKETLAKE.
+ 	(processor_type) : Add PROCESSOR_ROCKETLAKE.
+ 	(PTA_ROCKETLAKE): Ditto.
+ 	* doc/extend.texi: Add rocketlake.
+ 	* doc/invoke.texi: Add rocketlake.
+ 
+ 2021-04-12  Cui,Lili  <lili.cui@intel.com>
+ 
+ 	* config/i386/i386.h (PTA_ALDERLAKE): Change alderlake ISA list.
+ 	* config/i386/i386-options.c (m_CORE_AVX2): Add m_ALDERLAKE.
+ 	* common/config/i386/cpuinfo.h (get_intel_cpu): Add AlderLake model.
+ 	* doc/invoke.texi: Change alderlake ISA list.
+ 
+ 2021-04-11  Hafiz Abid Qadeer  <abidh@codesourcery.com>
+ 
+ 	PR middle-end/98088
+ 	* omp-expand.c (expand_oacc_collapse_init): Update condition in
+ 	a gcc_assert.
+ 
+ 2021-04-10  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/99744
+ 	* config/i386/serializeintrin.h (_serialize): Defined as macro.
+ 
+ 2021-04-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR lto/99849
+ 	* expr.c (expand_expr_addr_expr_1): Test is_global_var rather than
+ 	just TREE_STATIC on COMPOUND_LITERAL_EXPR_DECLs.
+ 
+ 2021-04-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/99989
+ 	* gimple-ssa-warn-alloca.c
+ 	(alloca_type_and_limit::alloca_type_and_limit): Initialize limit to
+ 	0 with integer precision unconditionally.
+ 
+ 2021-04-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/98601
+ 	* rtlanal.c (rtx_addr_can_trap_p_1): Allow in assert unknown size
+ 	not just for BLKmode, but also for VOIDmode.  For STRICT_ALIGNMENT
+ 	unaligned_mems handle VOIDmode like BLKmode.
+ 
+ 2021-04-10  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR lto/99857
+ 	* tree.c (free_lang_data_in_decl): Do not release body of
+ 	declare_variant_alt.
+ 
+ 2021-04-09  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_option_restore): If the
+ 	architecture was specified explicitly and the tuning wasn't,
+ 	tune for the architecture rather than the configured default CPU.
+ 
+ 2021-04-09  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.md (tlsdesc_small_sve_<mode>): Use X30
+ 	as the temporary register.
+ 
+ 2021-04-09  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/extend.texi: Move non-target attributes on the top level.
+ 
+ 2021-04-09  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Document minimum and maximum value of the
+ 	argument for both supported compression algorithms.
+ 
+ 2021-04-08  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_xcoff_select_section): Select
+ 	TLS BSS before TLS data.
+ 	* config/rs6000/xcoff.h (ASM_OUTPUT_TLS_COMMON): Use .comm.
+ 
+ 2021-04-08  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* doc/sourcebuild.texi (stdint_types_mbig_endian): Document.
+ 
+ 2021-04-08  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* match.pd: Extend vec_cond folds to handle shifts.
+ 
+ 2021-04-08  Maciej W. Rozycki  <macro@orcam.me.uk>
+ 
+ 	* config/vax/vax.md: Fix comment for `*bit<mode>' pattern's
+ 	peephole.
+ 
+ 2021-04-08  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR target/99647
+ 	* config/arm/iterators.md (MVE_vecs): New.
+ 	(V_elem): Also handle V2DF.
+ 	* config/arm/mve.md (*mve_mov<mode>): Rename to ...
+ 	(*mve_vdup<mode>): ... this. Remove second alternative since
+ 	vec_duplicate of const_int is not canonical RTL, and we don't
+ 	want to match symbol_refs.
+ 	(*mve_vec_duplicate<mode>): Delete (pattern is redundant).
+ 
+ 2021-04-08  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	* fold-const.c (fold_single_bit_test): Fix typo.
+ 	* print-rtl.c (print_rtx_insn_vec): Call print_rtl_single
+ 	instead.
+ 
+ 2021-04-07  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/97513
+ 	* tree-vect-slp.c (vect_add_slp_permutation): New function,
+ 	split out from...
+ 	(vectorizable_slp_permutation): ...here.  Detect cases in which
+ 	all VEC_PERM_EXPRs are guaranteed to have the same stepped
+ 	permute vector and only generate one permute vector for that case.
+ 	Extend that case to handle variable-length vectors.
+ 
+ 2021-04-07  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/99873
+ 	* tree-vect-slp.c (vect_slp_prefer_store_lanes_p): New function.
+ 	(vect_build_slp_instance): Don't split store groups that could
+ 	use IFN_STORE_LANES.
+ 
+ 2021-04-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99872
+ 	* varasm.c (output_constant_pool_contents): Don't strip name encoding
+ 	from XSTR (desc->sym, 0) or from label before passing those to
+ 	ASM_OUTPUT_DEF.
+ 
+ 2021-04-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99954
+ 	* tree-loop-distribution.c: Include tree-affine.h.
+ 	(generate_memcpy_builtin): Try using tree-affine to prove
+ 	non-overlap.
+ 	(loop_distribution::classify_builtin_ldst): Always classify
+ 	as PKIND_MEMMOVE.
+ 
+ 2021-04-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99947
+ 	* tree-vect-loop.c (vectorizable_induction): Pre-allocate
+ 	steps vector to avoid pushing elements from the reallocated
+ 	vector.
+ 
+ 2021-04-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-sccvn.h (print_vn_reference_ops): Declare.
+ 	* tree-ssa-pre.c (print_pre_expr): Factor out VN reference operand
+ 	printing...
+ 	* tree-ssa-sccvn.c (print_vn_reference_ops): ... into this new
+ 	function.
+ 	(debug_vn_reference_ops): New.
+ 
+ 2021-04-07  Bin Cheng  <bin.cheng@linux.alibaba.com>
+ 
+ 	PR tree-optimization/98736
+ 	* tree-loop-distribution.c
+ 	* (loop_distribution::bb_top_order_init):
+ 	Compute RPO with programing order preserved by calling function
+ 	rev_post_order_and_mark_dfs_back_seme.
+ 
+ 2021-04-06  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/99781
+ 	* lra-constraints.c (split_reg): Don't check paradoxical_subreg_p.
+ 	* lra-lives.c (clear_sparseset_regnos, regnos_in_sparseset_p): New
+ 	functions.
+ 	(process_bb_lives): Don't update biggest mode of hard reg for
+ 	implicit in multi-register group.  Use the new functions for
+ 	updating dead_set and unused_set by register notes.
+ 
+ 2021-04-06  Xianmiao Qu  <xianmiao_qu@c-sky.com>
+ 
+ 	* config/csky/csky_pipeline_ck802.md : Use insn reservation name
+ 	instead of *.
+ 
+ 2021-04-06  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/x86-tune-costs.h (skylake_memcpy): Updated.
+ 	(skylake_memset): Likewise.
+ 	(skylake_cost): Change CLEAR_RATIO to 17.
+ 	* config/i386/x86-tune.def (X86_TUNE_PREFER_KNOWN_REP_MOVSB_STOSB):
+ 	Replace m_CANNONLAKE, m_ICELAKE_CLIENT, m_ICELAKE_SERVER,
+ 	m_TIGERLAKE and m_SAPPHIRERAPIDS with m_SKYLAKE and m_CORE_AVX512.
+ 
+ 2021-04-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99880
+ 	* tree-vect-loop.c (maybe_set_vectorized_backedge_value): Only
+ 	set vectorized defs of relevant PHIs.
+ 
+ 2021-04-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99924
+ 	* tree-vect-slp.c (vect_bb_partition_graph_r): Do not mark
+ 	nodes w/o scalar stmts as visited.
+ 
+ 2021-04-06  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR target/99748
+ 	* config/arm/arm.c (arm_libcall_uses_aapcs_base): Also use base
+ 	PCS for [su]fix_optab.
+ 
+ 2021-04-03  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.c (machopic_legitimize_pic_address): Check
+ 	that the current pic register is one of the hard reg set
+ 	before setting liveness.
+ 
+ 2021-04-03  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.c (machopic_legitimize_pic_address): Fix
+ 	whitespace, remove unused code.
+ 
+ 2021-04-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/99882
+ 	* gimple-ssa-store-merging.c (bswap_view_convert): Handle val with
+ 	pointer type.
+ 
+ 2021-04-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/99863
+ 	* dse.c (replace_read): Drop regs_live argument.  Instead of
+ 	regs_live, use store_insn->fixed_regs_live if non-NULL,
+ 	otherwise punt if insns sequence clobbers or sets any hard
+ 	registers.
+ 
+ 2021-04-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/98125
+ 	* targhooks.h (default_print_patchable_function_entry_1): Declare.
+ 	* targhooks.c (default_print_patchable_function_entry_1): New function,
+ 	copied from default_print_patchable_function_entry with an added flags
+ 	argument.
+ 	(default_print_patchable_function_entry): Rewritten into a small
+ 	wrapper around default_print_patchable_function_entry_1.
+ 	* config/rs6000/rs6000.c (TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY):
+ 	Redefine.
+ 	(rs6000_print_patchable_function_entry): New function.
+ 
+ 2021-04-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* doc/invoke.texi (fdelete-dead-exceptions): Minor tweak.
+ 
+ 2021-04-01  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/98481
+ 	* common.opt: Document v15 and v16.
+ 
+ 2021-04-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99863
+ 	* gimplify.c (gimplify_init_constructor): Recompute vector
+ 	constructor flags.
+ 
+ 2021-04-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* doc/extend.texi (symver attribute): Fix up syntax errors
+ 	in the examples.
+ 
+ 2021-04-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/96573
+ 	* gimple-ssa-store-merging.c (init_symbolic_number): Handle
+ 	also pointer types.
+ 
+ 2021-04-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99856
+ 	* tree-vect-patterns.c (vect_recog_over_widening_pattern): Promote
+ 	precision to vector element precision.
+ 
+ 2021-04-01  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/97009
+ 	* tree-sra.c (access_or_its_child_written): New function.
+ 	(propagate_subaccesses_from_rhs): Use it instead of a simple grp_write
+ 	test.
+ 
+ 2021-03-31  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	PR ipa/98265
+ 	* cif-code.def (USES_COMDAT_LOCAL): Make CIF_FINAL_NORMAL.
+ 
+ 2021-03-31  Pat Haugen  <pthaugen@linux.ibm.com>
+ 
+ 	PR target/99133
+ 	* config/rs6000/altivec.md (xxspltiw_v4si, xxspltiw_v4sf_inst,
+ 	xxspltidp_v2df_inst, xxsplti32dx_v4si_inst, xxsplti32dx_v4sf_inst,
+ 	xxblend_<mode>, xxpermx_inst, xxeval): Mark prefixed.
+ 	* config/rs6000/mma.md (mma_<vvi4i4i8>, mma_<avvi4i4i8>,
+ 	mma_<vvi4i4i2>, mma_<avvi4i4i2>, mma_<vvi4i4>, mma_<avvi4i4>,
+ 	mma_<pvi4i2>, mma_<apvi4i2>, mma_<vvi4i4i4>, mma_<avvi4i4i4>):
+ 	Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_final_prescan_insn): Adjust test.
+ 	* config/rs6000/rs6000.md (define_attr "maybe_prefixed"): New.
+ 	(define_attr "prefixed"): Update initializer.
+ 
+ 2021-03-31  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/99490
+ 	* dwarf2out.c (debug_ranges_dwo_section): New variable.
+ 	(DW_RANGES_IDX_SKELETON): Define.
+ 	(struct dw_ranges): Add begin_entry and end_entry members.
+ 	(DEBUG_DWO_RNGLISTS_SECTION): Define.
+ 	(add_ranges_num): Adjust r initializer for addition of *_entry
+ 	members.
+ 	(add_ranges_by_labels): For -gsplit-dwarf and force_direct,
+ 	set idx to DW_RANGES_IDX_SKELETON.
+ 	(use_distinct_base_address_for_range): New function.
+ 	(index_rnglists): Don't set r->idx if it is equal to
+ 	DW_RANGES_IDX_SKELETON.  Initialize r->begin_entry and
+ 	r->end_entry for -gsplit-dwarf if those will be needed by
+ 	output_rnglists.
+ 	(output_rnglists): Add DWO argument.  If true, switch to
+ 	debug_ranges_dwo_section rather than debug_ranges_section.
+ 	Adjust l1/l2 label indexes.  Only output the offset table when
+ 	dwo is true and don't include in there the skeleton range
+ 	entry if present.  For -gsplit-dwarf, skip ranges that belong
+ 	to the other rnglists section.  Change return type from void
+ 	to bool and return true if there are any range entries for
+ 	the other section.  For dwarf_split_debug_info use
+ 	DW_RLE_startx_endx, DW_RLE_startx_length and DW_RLE_base_addressx
+ 	entries instead of DW_RLE_start_end, DW_RLE_start_length and
+ 	DW_RLE_base_address.  Use use_distinct_base_address_for_range.
+ 	(init_sections_and_labels): Initialize debug_ranges_dwo_section
+ 	if -gsplit-dwarf and DWARF >= 5.  Adjust ranges_section_label
+ 	and range_base_label indexes.
+ 	(dwarf2out_finish): Call index_rnglists earlier before finalizing
+ 	.debug_addr.  Never emit DW_AT_rnglists_base attribute.  For
+ 	-gsplit-dwarf and DWARF >= 5 call output_rnglists up to twice
+ 	with different dwo arguments.
+ 	(dwarf2out_c_finalize): Clear debug_ranges_dwo_section.
+ 
+ 2021-03-31  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/98268
+ 	* gimple-fold.c (maybe_canonicalize_mem_ref_addr): Call
+ 	recompute_tree_invariant_for_addr_expr after successfully
+ 	folding a TARGET_MEM_REF that occurs inside an ADDR_EXPR.
+ 
+ 2021-03-31  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/99726
+ 	* tree-data-ref.c (create_intersect_range_checks_index): Bail
+ 	out if there is more than one access function SCEV for the loop
+ 	being versioned.
+ 
+ 2021-03-31  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/97141
+ 	PR rtl-optimization/98726
+ 	* emit-rtl.c (valid_for_const_vector_p): Return true for
+ 	CONST_POLY_INT_P.
+ 	* rtx-vector-builder.h (rtx_vector_builder::step): Return a
+ 	poly_wide_int instead of a wide_int.
+ 	(rtx_vector_builder::apply_set): Take a poly_wide_int instead
+ 	of a wide_int.
+ 	* rtx-vector-builder.c (rtx_vector_builder::apply_set): Likewise.
+ 	* config/aarch64/aarch64.c (aarch64_legitimate_constant_p): Return
+ 	false for CONST_VECTORs that cannot be forced to memory.
+ 	* config/aarch64/aarch64-simd.md (mov<mode>): If a CONST_VECTOR
+ 	is too complex to force to memory, build it up from individual
+ 	elements instead.
+ 
+ 2021-03-31  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR lto/99447
+ 	* cgraph.c (cgraph_node::release_body): Fix overactive check.
+ 
+ 2021-03-31  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	PR target/99786
+ 	* config/arm/vec-common.md (mul<mode>3): Disable on iwMMXT, expect
+ 	for V4HI and V2SI.
+ 
+ 2021-03-31  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* config/i386/i386-expand.c (expand_set_or_cpymem_via_rep):
+ 	For TARGET_PREFER_KNOWN_REP_MOVSB_STOSB, don't convert QImode
+ 	to SImode.
+ 	(decide_alg): For TARGET_PREFER_KNOWN_REP_MOVSB_STOSB, use
+ 	"rep movsb/stosb" only for known sizes.
+ 	* config/i386/i386-options.c (processor_cost_table): Use Ice
+ 	Lake cost for Cannon Lake, Ice Lake, Tiger Lake, Sapphire
+ 	Rapids and Alder Lake.
+ 	* config/i386/i386.h (TARGET_PREFER_KNOWN_REP_MOVSB_STOSB): New.
+ 	* config/i386/x86-tune-costs.h (icelake_memcpy): New.
+ 	(icelake_memset): Likewise.
+ 	(icelake_cost): Likewise.
+ 	* config/i386/x86-tune.def (X86_TUNE_PREFER_KNOWN_REP_MOVSB_STOSB):
+ 	New.
+ 
+ 2021-03-31  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/98119
+ 	* config/aarch64/aarch64.c
+ 	(aarch64_vectorize_preferred_vector_alignment): Query the size
+ 	of the provided SVE vector; do not assume that all SVE vectors
+ 	have the same size.
+ 
+ 2021-03-31  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR lto/99447
+ 	* cgraph.c (cgraph_node::release_body): Remove all callers and
+ 	references.
+ 	* cgraphclones.c (cgraph_node::materialize_clone): Do not do it here.
+ 	* cgraphunit.c (cgraph_node::expand): And here.
+ 
+ 2021-03-31  Martin Liska  <mliska@suse.cz>
+ 
+ 	* ipa-modref.c (analyze_ssa_name_flags): Fix coding style
+ 	and one negated condition.
+ 
+ 2021-03-31  Jakub Jelinek  <jakub@redhat.com>
+ 	    Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/99813
+ 	* config/aarch64/aarch64.md (*add<mode>3_poly_1): Swap Uai and Uav
+ 	constraints on operands[2] and similarly 0 and rk constraints
+ 	on operands[1] corresponding to that.
+ 
+ 2021-03-31  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR bootstrap/98860
+ 	* configure.ac (HAVE_LD_BROKEN_PE_DWARF5): New AC_DEFINE if PECOFF
+ 	linker doesn't support DWARF sections new in DWARF5.
+ 	* config/i386/i386-options.c (ix86_option_override_internal): Default
+ 	to dwarf_version 4 if HAVE_LD_BROKEN_PE_DWARF5 for TARGET_PECOFF
+ 	targets.
+ 	* config.in: Regenerated.
+ 	* configure: Regenerated.
+ 
+ 2021-03-30  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	PR target/99820
+ 	* config/aarch64/aarch64.c (aarch64_analyze_loop_vinfo): Check for
+ 	available issue_info before using it.
+ 
+ 2021-03-30  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	PR target/99822
+ 	* config/aarch64/aarch64.md (sub<mode>3_compare1_imm): Do not allow zero
+ 	in operand 1.
+ 
+ 2021-03-30  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	PR target/99718
+ 	* config/rs6000/altivec.md (altivec_lvsl_reg): Change to ...
+ 	(altivec_lvsl_reg_<mode>): ... this.
+ 	(altivec_lvsr_reg): Change to ...
+ 	(altivec_lvsr_reg_<mode>): ... this.
+ 	* config/rs6000/predicates.md (vec_set_index_operand): New.
+ 	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
+ 	Enable 32bit variable vec_insert for all TARGET_VSX.
+ 	* config/rs6000/rs6000.c (rs6000_expand_vector_set_var_p9):
+ 	Enable 32bit variable vec_insert for p9 and above.
+ 	(rs6000_expand_vector_set_var_p8): Rename to ...
+ 	(rs6000_expand_vector_set_var_p7): ... this.
+ 	(rs6000_expand_vector_set): Use TARGET_VSX and adjust assert
+ 	position.
+ 	* config/rs6000/vector.md (vec_set<mode>): Use vec_set_index_operand.
+ 	* config/rs6000/vsx.md (xl_len_r): Use gen_altivec_lvsl_reg_di and
+ 	gen_altivec_lvsr_reg_di.
+ 
+ 2021-03-30  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/99744
+ 	* config/i386/ia32intrin.h (__rdtsc): Defined as macro.
+ 	(__rdtscp): Likewise.
+ 
+ 2021-03-30  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/99825
+ 	* tree-vect-slp-patterns.c (vect_check_evenodd_blend):
+ 	Reject non-mult 2 lanes.
+ 
+ 2021-03-30  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/99773
+ 	* config/arm/arm.c (arm_file_start): Fix emission of
+ 	Tag_ABI_VFP_args attribute.
+ 
+ 2021-03-30  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99824
+ 	* stor-layout.c (set_min_and_max_values_for_integral_type):
+ 	Assert the precision is within the bounds of
+ 	WIDE_INT_MAX_PRECISION.
+ 	* tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Use
+ 	the outermost component ref only to lower the access size
+ 	and initialize that from the access type.
+ 
+ 2021-03-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/98136
+ 	* config/aarch64/aarch64.md (mov<mode>): Pass multi-instruction
+ 	CONST_INTs to aarch64_expand_mov_immediate when called after RA.
+ 
+ 2021-03-30  Mihailo Stojanovic  <mihailo.stojanovic@typhoon-hil.com>
+ 
+ 	* config/aarch64/aarch64.md
+ 	(<optab>_trunc<fcvt_target><GPI:mode>2): Set the "arch"
+ 	attribute to disambiguate between SIMD and FP variants of the
+ 	instruction.
+ 
+ 2021-03-29  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* ipa-modref.c (merge_call_lhs_flags): Correct handling of deref.
+ 	(analyze_ssa_name_flags): Fix typo in comment.
+ 
+ 2021-03-29  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR target/99216
+ 	* config/aarch64/aarch64-sve-builtins.cc
+ 	(function_builder::add_function): Add placeholder_p argument, use
+ 	placeholder decls if this is set.
+ 	(function_builder::add_unique_function): Instead of conditionally adding
+ 	direct overloads, unconditionally add either a direct overload or a
+ 	placeholder.
+ 	(function_builder::add_overloaded_function): Set placeholder_p if we're
+ 	using C++ overloads. Use the obstack for string storage instead
+ 	of relying on the tree nodes.
+ 	(function_builder::add_overloaded_functions): Don't return early for
+ 	m_direct_overloads: we need to add placeholders.
+ 	* config/aarch64/aarch64-sve-builtins.h
+ 	(function_builder::add_function): Add placeholder_p argument.
+ 
+ 2021-03-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99807
+ 	* tree-vect-slp.c (vect_slp_analyze_node_operations_1): Move
+ 	assert below VEC_PERM handling.
+ 
+ 2021-03-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	PR target/99037
+ 	* config/aarch64/aarch64-simd.md (move_lo_quad_internal_<mode>): Use
+ 	aarch64_simd_or_scalar_imm_zero to match zeroes.  Remove pattern
+ 	matching const_int 0.
+ 	(move_lo_quad_internal_be_<mode>): Likewise.
+ 	(move_lo_quad_<mode>): Update for the above.
+ 	* config/aarch64/iterators.md (VQ_2E): Delete.
+ 
+ 2021-03-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/99777
+ 	* fold-const.c (extract_muldiv_1): For conversions, punt on casts from
+ 	types other than scalar integral types.
+ 
+ 2021-03-28  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_output_dwarf_dtprel): Do not add
+ 	XCOFF TLS reloc decorations.
+ 
+ 2021-03-28  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/analyzer.texi (Analyzer Internals): Update link to
+ 	"A Memory Model for Static Analysis of C Programs".
+ 
+ 2021-03-26  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/aix.h (ADJUST_FIELD_ALIGN): Call function.
+ 	* config/rs6000/rs6000-protos.h (rs6000_special_adjust_field_align):
+ 	Declare.
+ 	* config/rs6000/rs6000.c (rs6000_special_adjust_field_align): New.
+ 	(rs6000_special_round_type_align): Recursively check innermost first
+ 	field.
+ 
+ 2021-03-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/99334
+ 	* dwarf2out.h (struct dw_fde_node): Add rule18 member.
+ 	* dwarf2cfi.c (dwarf2out_frame_debug_expr): When handling (set hfp sp)
+ 	assignment with drap_reg active, queue reg save for hfp with offset 0
+ 	and flush queued reg saves.  When handling a push with rule18,
+ 	defer queueing reg save for hfp and just assert the offset is 0.
+ 	(scan_trace): Assert that fde->rule18 is false.
+ 
+ 2021-03-26  Vladimir Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/99766
+ 	* ira-costs.c (record_reg_classes): Put case with
+ 	CT_RELAXED_MEMORY adjacent to one with CT_MEMORY.
+ 	* ira.c (ira_setup_alts): Ditto.
+ 	* lra-constraints.c (process_alt_operands): Ditto.
+ 	* recog.c (asm_operand_ok): Ditto.
+ 	* reload.c (find_reloads): Ditto.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-protos.h
+ 	(cpu_addrcost_table::post_modify_ld3_st3): New member variable.
+ 	(cpu_addrcost_table::post_modify_ld4_st4): Likewise.
+ 	* config/aarch64/aarch64.c (generic_addrcost_table): Update
+ 	accordingly, using the same costs as for post_modify.
+ 	(exynosm1_addrcost_table, xgene1_addrcost_table): Likewise.
+ 	(thunderx2t99_addrcost_table, thunderx3t110_addrcost_table):
+ 	(tsv110_addrcost_table, qdf24xx_addrcost_table): Likewise.
+ 	(a64fx_addrcost_table): Likewise.
+ 	(neoversev1_addrcost_table): New.
+ 	(neoversev1_tunings): Use neoversev1_addrcost_table.
+ 	(aarch64_address_cost): Use the new post_modify costs for CImode
+ 	and XImode.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.opt
+ 	(-param=aarch64-loop-vect-issue-rate-niters=): New parameter.
+ 	* doc/invoke.texi: Document it.
+ 	* config/aarch64/aarch64-protos.h (aarch64_base_vec_issue_info)
+ 	(aarch64_scalar_vec_issue_info, aarch64_simd_vec_issue_info)
+ 	(aarch64_advsimd_vec_issue_info, aarch64_sve_vec_issue_info)
+ 	(aarch64_vec_issue_info): New structures.
+ 	(cpu_vector_cost): Write comments above the variables rather
+ 	than to the side.
+ 	(cpu_vector_cost::issue_info): New member variable.
+ 	* config/aarch64/aarch64.c: Include gimple-pretty-print.h
+ 	and tree-ssa-loop-niter.h.
+ 	(generic_vector_cost, a64fx_vector_cost, qdf24xx_vector_cost)
+ 	(thunderx_vector_cost, tsv110_vector_cost, cortexa57_vector_cost)
+ 	(exynosm1_vector_cost, xgene1_vector_cost, thunderx2t99_vector_cost)
+ 	(thunderx3t110_vector_cost): Initialize issue_info to null.
+ 	(neoversev1_scalar_issue_info, neoversev1_advsimd_issue_info)
+ 	(neoversev1_sve_issue_info, neoversev1_vec_issue_info): New structures.
+ 	(neoversev1_vector_cost): Use them.
+ 	(aarch64_vec_op_count, aarch64_sve_op_count): New structures.
+ 	(aarch64_vector_costs::saw_sve_only_op): New member variable.
+ 	(aarch64_vector_costs::num_vector_iterations): Likewise.
+ 	(aarch64_vector_costs::scalar_ops): Likewise.
+ 	(aarch64_vector_costs::advsimd_ops): Likewise.
+ 	(aarch64_vector_costs::sve_ops): Likewise.
+ 	(aarch64_vector_costs::seen_loads): Likewise.
+ 	(aarch64_simd_vec_costs_for_flags): New function.
+ 	(aarch64_analyze_loop_vinfo): Initialize num_vector_iterations.
+ 	Count the number of predicate operations required by SVE WHILE
+ 	instructions.
+ 	(aarch64_comparison_type, aarch64_multiply_add_p): New functions.
+ 	(aarch64_sve_only_stmt_p, aarch64_in_loop_reduction_latency): Likewise.
+ 	(aarch64_count_ops): Likewise.
+ 	(aarch64_add_stmt_cost): Record whether see an SVE operation
+ 	that cannot currently be implementing using Advanced SIMD.
+ 	Record issue information about the scalar, Advanced SIMD
+ 	and (where relevant) SVE versions of a loop.
+ 	(aarch64_vec_op_count::dump): New function.
+ 	(aarch64_sve_op_count::dump): Likewise.
+ 	(aarch64_estimate_min_cycles_per_iter): Likewise.
+ 	(aarch64_adjust_body_cost): If issue information is available,
+ 	try to compare the issue rates of the various loop implementations
+ 	and increase or decrease the vector body cost accordingly.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_detect_vector_stmt_subtype):
+ 	Assume a zero cost for induction phis.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_embedded_comparison_type): New
+ 	function.
+ 	(aarch64_adjust_stmt_cost): Add the costs of embedded scalar and
+ 	vector comparisons.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_detect_scalar_stmt_subtype):
+ 	New function.
+ 	(aarch64_add_stmt_cost): Call it.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-tuning-flags.def (matched_vector_throughput):
+ 	New tuning parameter.
+ 	* config/aarch64/aarch64.c (neoversev1_tunings): Use it.
+ 	(aarch64_estimated_sve_vq): New function.
+ 	(aarch64_vector_costs::analyzed_vinfo): New member variable.
+ 	(aarch64_vector_costs::is_loop): Likewise.
+ 	(aarch64_vector_costs::unrolled_advsimd_niters): Likewise.
+ 	(aarch64_vector_costs::unrolled_advsimd_stmts): Likewise.
+ 	(aarch64_record_potential_advsimd_unrolling): New function.
+ 	(aarch64_analyze_loop_vinfo, aarch64_analyze_bb_vinfo): Likewise.
+ 	(aarch64_add_stmt_cost): Call aarch64_analyze_loop_vinfo or
+ 	aarch64_analyze_bb_vinfo on the first use of a costs structure.
+ 	Detect whether we're vectorizing a loop for SVE that might be
+ 	completely unrolled if it used Advanced SIMD instead.
+ 	(aarch64_adjust_body_cost_for_latency): New function.
+ 	(aarch64_finish_cost): Call it.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_vector_costs): New structure.
+ 	(aarch64_init_cost): New function.
+ 	(aarch64_add_stmt_cost): Use aarch64_vector_costs instead of
+ 	the default unsigned[3].
+ 	(aarch64_finish_cost, aarch64_destroy_cost_data): New functions.
+ 	(TARGET_VECTORIZE_INIT_COST): Override.
+ 	(TARGET_VECTORIZE_FINISH_COST): Likewise.
+ 	(TARGET_VECTORIZE_DESTROY_COST_DATA): Likewise.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (neoversev1_advsimd_vector_cost)
+ 	(neoversev1_sve_vector_cost): New cost structures.
+ 	(neoversev1_vector_cost): Likewise.
+ 	(neoversev1_tunings): Use them.  Enable use_new_vector_costs.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-protos.h
+ 	(sve_vec_cost::scatter_store_elt_cost): New member variable.
+ 	* config/aarch64/aarch64.c (generic_sve_vector_cost): Update
+ 	accordingly, taking the cost from the cost of a scalar_store.
+ 	(a64fx_sve_vector_cost): Likewise.
+ 	(aarch64_detect_vector_stmt_subtype): Detect scatter stores.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-protos.h
+ 	(simd_vec_cost::store_elt_extra_cost): New member variable.
+ 	* config/aarch64/aarch64.c (generic_advsimd_vector_cost): Update
+ 	accordingly, using the vec_to_scalar cost for the new field.
+ 	(generic_sve_vector_cost, a64fx_advsimd_vector_cost): Likewise.
+ 	(a64fx_sve_vector_cost, qdf24xx_advsimd_vector_cost): Likewise.
+ 	(thunderx_advsimd_vector_cost, tsv110_advsimd_vector_cost): Likewise.
+ 	(cortexa57_advsimd_vector_cost, exynosm1_advsimd_vector_cost)
+ 	(xgene1_advsimd_vector_cost, thunderx2t99_advsimd_vector_cost)
+ 	(thunderx3t110_advsimd_vector_cost): Likewise.
+ 	(aarch64_detect_vector_stmt_subtype): Detect single-element stores.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-protos.h (simd_vec_cost::ld2_st2_permute_cost)
+ 	(simd_vec_cost::ld3_st3_permute_cost): New member variables.
+ 	(simd_vec_cost::ld4_st4_permute_cost): Likewise.
+ 	* config/aarch64/aarch64.c (generic_advsimd_vector_cost): Update
+ 	accordingly, using zero for the new costs.
+ 	(generic_sve_vector_cost, a64fx_advsimd_vector_cost): Likewise.
+ 	(a64fx_sve_vector_cost, qdf24xx_advsimd_vector_cost): Likewise.
+ 	(thunderx_advsimd_vector_cost, tsv110_advsimd_vector_cost): Likewise.
+ 	(cortexa57_advsimd_vector_cost, exynosm1_advsimd_vector_cost)
+ 	(xgene1_advsimd_vector_cost, thunderx2t99_advsimd_vector_cost)
+ 	(thunderx3t110_advsimd_vector_cost): Likewise.
+ 	(aarch64_ld234_st234_vectors): New function.
+ 	(aarch64_adjust_stmt_cost): Likewise.
+ 	(aarch64_add_stmt_cost): Call aarch64_adjust_stmt_cost if using
+ 	the new vector costs.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-protos.h (sve_vec_cost): Turn into a
+ 	derived class of simd_vec_cost.  Add information about CLAST[AB]
+ 	and FADDA instructions.
+ 	* config/aarch64/aarch64.c (generic_sve_vector_cost): Update
+ 	accordingly, using the vec_to_scalar costs for the new fields.
+ 	(a64fx_sve_vector_cost): Likewise.
+ 	(aarch64_reduc_type): New function.
+ 	(aarch64_sve_in_loop_reduction_latency): Likewise.
+ 	(aarch64_detect_vector_stmt_subtype): Take a vinfo parameter.
+ 	Use aarch64_sve_in_loop_reduction_latency to handle SVE reductions
+ 	that occur in the loop body.
+ 	(aarch64_add_stmt_cost): Update call accordingly.
+ 
+ 2021-03-26  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-tuning-flags.def (use_new_vector_costs):
+ 	New tuning flag.
+ 	* config/aarch64/aarch64-protos.h (simd_vec_cost): Put comments
+ 	above the fields rather than to the right.
+ 	(simd_vec_cost::reduc_i8_cost): New member variable.
+ 	(simd_vec_cost::reduc_i16_cost): Likewise.
+ 	(simd_vec_cost::reduc_i32_cost): Likewise.
+ 	(simd_vec_cost::reduc_i64_cost): Likewise.
+ 	(simd_vec_cost::reduc_f16_cost): Likewise.
+ 	(simd_vec_cost::reduc_f32_cost): Likewise.
+ 	(simd_vec_cost::reduc_f64_cost): Likewise.
+ 	* config/aarch64/aarch64.c (generic_advsimd_vector_cost): Update
+ 	accordingly, using the vec_to_scalar_cost for the new fields.
+ 	(generic_sve_vector_cost, a64fx_advsimd_vector_cost): Likewise.
+ 	(a64fx_sve_vector_cost, qdf24xx_advsimd_vector_cost): Likewise.
+ 	(thunderx_advsimd_vector_cost, tsv110_advsimd_vector_cost): Likewise.
+ 	(cortexa57_advsimd_vector_cost, exynosm1_advsimd_vector_cost)
+ 	(xgene1_advsimd_vector_cost, thunderx2t99_advsimd_vector_cost)
+ 	(thunderx3t110_advsimd_vector_cost): Likewise.
+ 	(aarch64_use_new_vector_costs_p): New function.
+ 	(aarch64_simd_vec_costs): New function, split out from...
+ 	(aarch64_builtin_vectorization_cost): ...here.
+ 	(aarch64_is_reduction): New function.
+ 	(aarch64_detect_vector_stmt_subtype): Likewise.
+ 	(aarch64_add_stmt_cost): Call aarch64_detect_vector_stmt_subtype if
+ 	using the new vector costs.
+ 
+ 2021-03-26  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR ipa/99466
+ 	* tree-emutls.c (get_emutls_init_templ_addr): Mark initializer of weak
+ 	TLS declarations as public.
+ 
+ 2021-03-26  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* config/aarch64/aarch64-d.c (IN_TARGET_CODE): Define.
+ 	* config/arm/arm-d.c (IN_TARGET_CODE): Likewise.
+ 	* config/i386/i386-d.c (IN_TARGET_CODE): Likewise.
+ 	* config/mips/mips-d.c (IN_TARGET_CODE): Likewise.
+ 	* config/pa/pa-d.c (IN_TARGET_CODE): Likewise.
+ 	* config/riscv/riscv-d.c (IN_TARGET_CODE): Likewise.
+ 	* config/rs6000/rs6000-d.c (IN_TARGET_CODE): Likewise.
+ 	* config/s390/s390-d.c (IN_TARGET_CODE): Likewise.
+ 	* config/sparc/sparc-d.c (IN_TARGET_CODE): Likewise.
+ 
+ 2021-03-26  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/91595
+ 	* config.gcc (*-*-cygwin*): Add winnt-d.o
+ 	(*-*-mingw*): Likewise.
+ 	* config/i386/cygwin.h (EXTRA_TARGET_D_OS_VERSIONS): New macro.
+ 	* config/i386/mingw32.h (EXTRA_TARGET_D_OS_VERSIONS): Likewise.
+ 	* config/i386/t-cygming: Add winnt-d.o.
+ 	* config/i386/winnt-d.c: New file.
+ 
+ 2021-03-26  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	* config/freebsd-d.c: Include memmodel.h.
+ 
+ 2021-03-26  Iain Buclaw  <ibuclaw@gdcproject.org>
+ 
+ 	PR d/99691
+ 	* config.gcc (*-*-openbsd*): Add openbsd-d.o.
+ 	* config/t-openbsd: Add openbsd-d.o.
+ 	* config/openbsd-d.c: New file.
+ 
+ 2021-03-25  Stam Markianos-Wright  <stam.markianos-wright@arm.com>
+ 
+ 	PR tree-optimization/96974
+ 	* tree-vect-stmts.c (vect_get_vector_types_for_stmt): Replace assert
+ 	with graceful exit.
+ 
+ 2021-03-25  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Revert:
+ 	2021-03-25  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/98209
+ 	PR target/99744
+ 	* config/i386/i386.c (ix86_can_inline_p): Don't check ISA for
+ 	always_inline in system headers.
+ 
+ 2021-03-25  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* tree-vect-loop.c (vect_model_reduction_cost): Init inside_cost.
+ 
+ 2021-03-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/99565
+ 	* tree-core.h (enum operand_equal_flag): Add OEP_ADDRESS_OF_SAME_FIELD.
+ 	* fold-const.c (operand_compare::operand_equal_p): Don't compare
+ 	field offsets if OEP_ADDRESS_OF_SAME_FIELD.
+ 
+ 2021-03-25  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/98209
+ 	PR target/99744
+ 	* config/i386/i386.c (ix86_can_inline_p): Don't check ISA for
+ 	always_inline in system headers.
+ 
+ 2021-03-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99746
+ 	* tree-vect-slp-patterns.c (complex_pattern::build): Do not mark
+ 	the scalar stmt as patterned.  Instead set up required things
+ 	manually.
+ 
+ 2021-03-25  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (power8_costs): Change l2 cache
+ 	from 256 to 512.
+ 
+ 2021-03-24  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/99753
+ 	* common/config/i386/i386-common.c (ARRAY_SIZE): Fix off-by-one
+ 	error.
+ 	* config/i386/i386-options.c (ix86_option_override_internal):
+ 	Add run-time assert.
+ 
+ 2021-03-24  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/99122
+ 	* ipa-cp.c (initialize_node_lattices): Mark as bottom all
+ 	parameters with unknown type.
+ 	(ipacp_value_safe_for_type): New function.
+ 	(propagate_vals_across_arith_jfunc): Verify that the constant type
+ 	can be used for a type of the formal parameter.
+ 	(propagate_vals_across_ancestor): Likewise.
+ 	(propagate_scalar_across_jump_function): Likewise.  Pass the type
+ 	also to propagate_vals_across_ancestor.
+ 
+ 2021-03-24  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	PR target/99727
+ 	* config/arm/mve.md (movmisalign<mode>_mve_store): Use Ux
+ 	constraint.
+ 	(movmisalign<mode>_mve_load): Likewise.
+ 
+ 2021-03-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99724
+ 	* config/arm/vec-common.md (one_cmpl<mode>2, neg<mode>2,
+ 	movmisalign<mode>): Disable expanders for TARGET_REALLY_IWMMXT.
+ 
+ 2021-03-24  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* doc/sourcebuild.texi (sysconf): New effective target.
+ 
+ 2021-03-24  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* config/i386/predicates.md (reg_or_const_vec_operand): New.
+ 	* config/i386/sse.md (ssse3_pshufbv8qi3): Add an expander for
+ 	the now *-prefixed insn_and_split, turn the splitter const vec
+ 	into an input for the insn, making it an ignored immediate for
+ 	non-split cases, and loaded into the scratch register
+ 	otherwise.
+ 
+ 2021-03-23  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/99581
+ 	* config/aarch64/constraints.md (Utq, UOb, UOh, UOw, UOd, UOty):
+ 	Use define_relaxed_memory_constraint for them.
+ 
+ 2021-03-23  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR target/99733
+ 	* config/host-darwin.c (darwin_gt_pch_use_address): Add a
+ 	colon to the diagnostic message.
+ 
+ 2021-03-23  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* fwprop.c (fwprop_propagation::fwprop_propagation): Look at
+ 	set_info's uses.
+ 	(try_fwprop_subst_note): Use set_info instead of insn_info.
+ 	(try_fwprop_subst_pattern): Likewise.
+ 	(try_fwprop_subst_notes): Likewise.
+ 	(try_fwprop_subst): Likewise.
+ 	(forward_propagate_subreg): Likewise.
+ 	(forward_propagate_and_simplify): Likewise.
+ 	(forward_propagate_into): Likewise.
+ 	* rtl-ssa/accesses.h (set_info::single_nondebug_use) New
+ 	method.
+ 	(set_info::single_nondebug_insn_use): Likewise.
+ 	(set_info::single_phi_use): Likewise.
+ 	* rtl-ssa/member-fns.inl (set_info::single_nondebug_use) New
+ 	method.
+ 	(set_info::single_nondebug_insn_use): Likewise.
+ 	(set_info::single_phi_use): Likewise.
+ 
+ 2021-03-23  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* doc/sourcebuild.texi (arm_dsp_ok, arm_dsp): Document.
+ 
+ 2021-03-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99540
+ 	* config/aarch64/aarch64.c (aarch64_add_offset): Tell
+ 	expand_mult to perform an unsigned rather than a signed
+ 	multiplication.
+ 
+ 2021-03-23  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/99704
+ 	* config/i386/cpuid.h (__cpuid): Add __volatile__.
+ 	(__cpuid_count): Likewise.
+ 
+ 2021-03-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99721
+ 	* tree-vect-slp.c (vect_slp_analyze_node_operations):
+ 	Make sure we can schedule the node.
+ 
+ 2021-03-23  Marcus Comstedt  <marcus@mc.pp.se>
+ 
+ 	* config/riscv/riscv.c (riscv_subword): Take endianness into
+ 	account when calculating the byte offset.
+ 
+ 2021-03-23  Marcus Comstedt  <marcus@mc.pp.se>
+ 
+ 	* config/riscv/predicates.md (subreg_lowpart_operator): New predicate
+ 	* config/riscv/riscv.md (*addsi3_extended2, *subsi3_extended2)
+ 	(*negsi2_extended2, *mulsi3_extended2, *<optab>si3_mask)
+ 	(*<optab>si3_mask_1, *<optab>di3_mask, *<optab>di3_mask_1)
+ 	(*<optab>si3_extend_mask, *<optab>si3_extend_mask_1): Use
+ 	new predicate "subreg_lowpart_operator"
+ 
+ 2021-03-23  Marcus Comstedt  <marcus@mc.pp.se>
+ 
+ 	* config/riscv/riscv.c (riscv_swap_instruction): New function
+ 	to byteswap an SImode rtx containing an instruction.
+ 	(riscv_trampoline_init): Byteswap the generated instructions
+ 	when needed.
+ 
+ 2021-03-23  Marcus Comstedt  <marcus@mc.pp.se>
+ 
+ 	* common/config/riscv/riscv-common.c
+ 	(TARGET_DEFAULT_TARGET_FLAGS): Set default endianness.
+ 	* config.gcc (riscv32be-*, riscv64be-*): Set
+ 	TARGET_BIG_ENDIAN_DEFAULT to 1.
+ 	* config/riscv/elf.h (LINK_SPEC): Change -melf* value
+ 	depending on default endianness.
+ 	* config/riscv/freebsd.h (LINK_SPEC): Likewise.
+ 	* config/riscv/linux.h (LINK_SPEC): Likewise.
+ 	* config/riscv/riscv.c (TARGET_DEFAULT_TARGET_FLAGS): Set
+ 	default endianness.
+ 	* config/riscv/riscv.h (DEFAULT_ENDIAN_SPEC): New macro.
+ 
+ 2021-03-23  Marcus Comstedt  <marcus@mc.pp.se>
+ 
+ 	* config/riscv/elf.h (LINK_SPEC): Pass linker endianness flag.
+ 	* config/riscv/freebsd.h (LINK_SPEC): Likewise.
+ 	* config/riscv/linux.h (LINK_SPEC): Likewise.
+ 	* config/riscv/riscv.h (ASM_SPEC): Pass -mbig-endian and
+ 	-mlittle-endian.
+ 	(BYTES_BIG_ENDIAN): Handle big endian.
+ 	(WORDS_BIG_ENDIAN): Define to BYTES_BIG_ENDIAN.
+ 	* config/riscv/riscv.opt (-mbig-endian, -mlittle-endian): New
+ 	options.
+ 	* doc/invoke.texi (-mbig-endian, -mlittle-endian): Document.
+ 
+ 2021-03-23  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
+ 
+ 	* regcprop.c (find_oldest_value_reg): Ask target whether
+ 	  different mode is fine for replacement register.
+ 
+ 2021-03-23  Aldy Hernandez  <aldyh@redhat.com>
+ 
+ 	PR tree-optimization/99296
+ 	* value-range.cc (irange::irange_set_1bit_anti_range): New.
+ 	(irange::irange_set_anti_range): Call irange_set_1bit_anti_range
+ 	* value-range.h (irange::irange_set_1bit_anti_range): New.
+ 
+ 2021-03-22  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/99581
+ 	* config/aarch64/constraints.md (UtQ): Use
+ 	define_relaxed_memory_constraint for it.
+ 	* doc/md.texi (define_relaxed_memory_constraint): Describe it.
+ 	* genoutput.c (main): Process DEFINE_RELAXED_MEMORY_CONSTRAINT.
+ 	* genpreds.c (constraint_data): Add bitfield is_relaxed_memory.
+ 	(have_relaxed_memory_constraints): New static var.
+ 	(relaxed_memory_start, relaxed_memory_end): Ditto.
+ 	(add_constraint): Add arg is_relaxed_memory.  Check name for
+ 	relaxed memory.  Set up is_relaxed_memory in constraint_data and
+ 	have_relaxed_memory_constraints.  Adjust calls.
+ 	(choose_enum_order): Process relaxed memory.
+ 	(write_tm_preds_h): Ditto.
+ 	(main): Process DEFINE_RELAXED_MEMORY_CONSTRAINT.
+ 	* gensupport.c (process_rtx): Process DEFINE_RELAXED_MEMORY_CONSTRAINT.
+ 	* ira-costs.c (record_reg_classes): Process CT_RELAXED_MEMORY.
+ 	* ira-lives.c (single_reg_class): Use
+ 	insn_extra_relaxed_memory_constraint.
+ 	* ira.c (ira_setup_alts): CT_RELAXED_MEMORY.
+ 	* lra-constraints.c (valid_address_p): Use
+ 	insn_extra_relaxed_memory_constraint instead of other memory
+ 	constraints.
+ 	(process_alt_operands): Process CT_RELAXED_MEMORY.
+ 	(curr_insn_transform): Use insn_extra_relaxed_memory_constraint.
+ 	* recog.c (asm_operand_ok, preprocess_constraints): Process
+ 	CT_RELAXED_MEMORY.
+ 	* reload.c (find_reloads): Ditto.
+ 	* rtl.def (DEFINE_RELAXED_MEMORY_CONSTRAINT): New.
+ 	* stmt.c (parse_input_constraint): Use
+ 	insn_extra_relaxed_memory_constraint.
+ 
+ 2021-03-22  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	PR target/97926
+ 	* ubsan.c (ubsan_instrument_float_cast): Don't test for unordered if
+ 	there are no NaNs.
+ 
+ 2021-03-22  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR target/97252
+ 	* config/arm/arm-protos.h (neon_make_constant): Add generate
+ 	argument to guard emitting insns, default to true.
+ 	* config/arm/arm.c (arm_legitimate_constant_p_1): Reject
+ 	CONST_VECTORs which neon_make_constant can't handle.
+ 	(neon_vdup_constant): Add generate argument, avoid emitting
+ 	insns if it's not set.
+ 	(neon_make_constant): Plumb new generate argument through.
+ 	* config/arm/constraints.md (Ui): New. Use it...
+ 	* config/arm/mve.md (*mve_mov<mode>): ... here.
+ 	* config/arm/vec-common.md (movv8hf): Use neon_make_constant to
+ 	synthesize constants.
+ 
+ 2021-03-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	* debug.h: Add deprecation warning.
+ 
+ 2021-03-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99694
+ 	* tree-ssa-sccvn.c (visit_phi): Ignore edges with the
+ 	PHI result.
+ 
+ 2021-03-22  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	PR target/99702
+ 	* config/riscv/riscv.c (riscv_expand_block_move): Get RTL value
+ 	after type checking.
+ 
+ 2021-03-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/99562
+ 	PR debug/66728
+ 	* dwarf2out.c (get_full_len): Use get_precision rather than
+ 	min_precision.
+ 	(add_const_value_attribute): Make sure add_AT_wide argument has
+ 	precision prec rather than some very wide one.
+ 
+ 2021-03-22  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.md (*rotldi3_insert_sf,
+ 	*mov<SFDF:mode><SFDF2:mode>cc_p9, floatsi<mode>2_lfiwax,
+ 	floatsi<mode>2_lfiwax_mem, floatunssi<mode>2_lfiwzx,
+ 	floatunssi<mode>2_lfiwzx_mem, *floatsidf2_internal,
+ 	*floatunssidf2_internal, fix_trunc<mode>si2_stfiwx,
+ 	fix_trunc<mode>si2_internal, fixuns_trunc<mode>si2_stfiwx,
+ 	*round32<mode>2_fprs, *roundu32<mode>2_fprs,
+ 	*fix_trunc<mode>si2_internal): Fix empty split condition.
+ 	* config/rs6000/vsx.md (*vsx_le_undo_permute_<mode>,
+ 	vsx_reduc_<VEC_reduc_name>_v2df, vsx_reduc_<VEC_reduc_name>_v4sf,
+ 	*vsx_reduc_<VEC_reduc_name>_v2df_scalar,
+ 	*vsx_reduc_<VEC_reduc_name>_v4sf_scalar): Likewise.
+ 
+ 2021-03-22  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	PR target/98914
+ 	* config/rs6000/rs6000.c (rs6000_expand_vector_set_var_p9):
+ 	Convert idx to DImode.
+ 	(rs6000_expand_vector_set_var_p8): Likewise.
+ 
+ 2021-03-21  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/99388
+ 	* dwarf2out.c (insert_float): Change return type from void to
+ 	unsigned, handle GET_MODE_SIZE (mode) == 2 and return element size.
+ 	(mem_loc_descriptor, loc_descriptor, add_const_value_attribute):
+ 	Adjust callers.
+ 
+ 2021-03-20  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/99679
+ 	* config/i386/i386.c (construct_container): Check cfun != NULL
+ 	before accessing silent_p.
+ 
+ 2021-03-20  Ahamed Husni  <ahamedhusni73@gmail.com>
+ 
+ 	* asan.c: Fix typos in comments.
+ 
+ 2021-03-20  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/99680
+ 	* lra-constraints.c (skip_contraint_modifiers): Rename to skip_constraint_modifiers.
+ 	(process_address_1): Check empty constraint before using
+ 	CONSTRAINT_LEN.
+ 
+ 2021-03-19  Pat Haugen  <pthaugen@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (power10_cost): New.
+ 	(rs6000_option_override_internal): Set Power10 costs.
+ 	(rs6000_issue_rate): Set Power10 issue rate.
+ 	* config/rs6000/power10.md: Rewrite for Power10.
+ 
+ 2021-03-19  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/99663
+ 	* lra-constraints.c (process_address_1): Don't use unknown
+ 	constraint for address constraint.
+ 
+ 2021-03-19  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR target/99661
+ 	* config.gcc (powerpc-*-darwin8): Delete the reference to
+ 	the now removed darwin8.h.
+ 
+ 2021-03-19  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	PR target/99660
+ 	* config/vxworksae.h (VX_CPU_PREFIX): Define.
+ 
+ 2021-03-19  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* config/pa/pa.c (import_milli): Use memcpy instead of strncpy.
+ 
+ 2021-03-19  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/99656
+ 	* tree-vect-slp-patterns.c (linear_loads_p,
+ 	complex_add_pattern::matches, is_eq_or_top,
+ 	vect_validate_multiplication, complex_mul_pattern::matches,
+ 	complex_fms_pattern::matches): Remove complex_perm_kinds_t.
+ 	* tree-vectorizer.h: (complex_load_perm_t): Removed.
+ 	(slp_tree_to_load_perm_map_t): Use complex_perm_kinds_t instead of
+ 	complex_load_perm_t.
+ 
+ 2021-03-19  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/99652
+ 	* config/i386/i386-options.c (ix86_init_machine_status): Set
+ 	silent_p to true.
+ 	* config/i386/i386.c (init_cumulative_args): Set silent_p to
+ 	false.
+ 	(construct_container): Return early for return and argument
+ 	errors if silent_p is true.
+ 	* config/i386/i386.h (machine_function): Add silent_p.
+ 
+ 2021-03-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99593
+ 	* config/arm/constraints.md (Ds): New constraint.
+ 	* config/arm/vec-common.md (mve_vshlq_<supf><mode>): Use w,Ds
+ 	constraint instead of w,Dm.
+ 
+ 2021-03-19  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	* config/gcn/gcn.c (gcn_parse_amdgpu_hsa_kernel_attribute): Fix quotes
+ 	in error message.
+ 
+ 2021-03-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR middle-end/99641
+ 	* fold-const.c (native_encode_initializer) <CONSTRUCTOR>: For an
+ 	array type, do the computation of the current position in sizetype.
+ 
+ 2021-03-18  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/99422
+ 	* lra-constraints.c (process_address_1): Use lookup_constraint
+ 	only for a single constraint.
+ 
+ 2021-03-18  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/99502
+ 	* gimple-array-bounds.cc (inbounds_vbase_memaccess_p): Rename...
+ 	(inbounds_memaccess_p): ...to this.  Check the ending offset of
+ 	the accessed member.
+ 
+ 2021-03-18  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	* config/gcn/gcn.c (gcn_parse_amdgpu_hsa_kernel_attribute): Add %< and
+ 	  %> quote markers to error messages.
+ 	(gcn_goacc_validate_dims): Likewise.
+ 	(gcn_conditional_register_usage): Remove exclaimation mark from error
+ 	message.
+ 	(gcn_vectorize_vec_perm_const): Ensure perm is fully uninitialized.
+ 
+ 2021-03-18  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* config/i386/x86-tune-costs.h (struct processor_costs): Fix costs of
+ 	integer divides1.
+ 
+ 2021-03-18  Sinan Lin  <sinan@isrc.iscas.ac.cn>
+ 	    Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/riscv.c (riscv_block_move_straight): Change type
+ 	to unsigned HOST_WIDE_INT for parameter and local variable with
+ 	HOST_WIDE_INT type.
+ 	(riscv_adjust_block_mem): Ditto.
+ 	(riscv_block_move_loop): Ditto.
+ 	(riscv_expand_block_move): Ditto.
+ 
+ 2021-03-18  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/v850/v850.c (construct_restore_jr): Increase static
+ 	 buffer size.
+ 	(construct_save_jarl): Likewise.
+ 	* config/v850/v850.h (DWARF2_DEBUGGING_INFO): Define.
+ 
+ 2021-03-18  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_adjust_generic_arch_tuning): Define.
+ 	(aarch64_override_options_internal): Use it.
+ 	(generic_tunings): Add AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS to
+ 	tune_flags.
+ 
+ 2021-03-17  Sandra Loosemore  <sandra@codesourcery.com>
+ 
+ 	* config/nios2/nios2.c (nios2_custom_check_insns): Clean up
+ 	error message format issues.
+ 	(nios2_option_override): Likewise.
+ 	(nios2_expand_fpu_builtin): Likewise.
+ 	(nios2_init_custom_builtins): Adjust to avoid bogus strncpy
+ 	truncation warning.
+ 	(nios2_expand_custom_builtin): More error message format fixes.
+ 	(nios2_expand_rdwrctl_builtin): Likewise.
+ 	(nios2_expand_rdprs_builtin): Likewise.
+ 	(nios2_expand_eni_builtin): Likewise.
+ 	(nios2_expand_builtin): Likewise.
+ 	(nios2_register_custom_code): Likewise.
+ 	(nios2_valid_target_attribute_rec): Likewise.
+ 	(nios2_add_insn_asm): Fix uninitialized variable warning.
+ 
+ 2021-03-17  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* config/i386/x86-tune-costs.h (struct processor_costs): Update costs
+ 	of gather to match reality.
+ 	* config/i386/x86-tune.def (X86_TUNE_USE_GATHER): Enable for znver3.
+ 
+ 2021-03-17  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c (aarch64_expand_rng_builtin): Use EQ
+ 	to compare against CC_REG rather than NE.
+ 
+ 2021-03-17  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/99504
+ 	* config/i386/i386.c (ix86_force_load_from_GOT_p): Support
+ 	inline assembly statements.
+ 	(ix86_print_operand): Update 'P' handling for -fno-plt.
+ 
+ 2021-03-17  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/99542
+ 	* config/aarch64/aarch64.c
+ 	(aarch64_simd_clone_compute_vecsize_and_simdlen): Remove unused var.
+ 
+ 2021-03-16  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	PR target/98092
+ 	* config/rs6000/predicates.md (branch_comparison_operator): Allow
+ 	ordered and unordered for CCFPmode, if flag_finite_math_only.
+ 
+ 2021-03-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99600
+ 	* config/i386/i386-expand.c (ix86_split_lea_for_addr): Emit a MULT
+ 	rather than ASHIFT.
+ 	* config/i386/i386.md (mult by 1248 into ashift): New splitter.
+ 
+ 2021-03-16  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/99592
+ 	* optc-save-gen.awk: Add flag_ipa_ra to exceptions for
+ 	cl_optimization_compare function.
+ 
+ 2021-03-16  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* config/s390/s390.c (f_constraint_p): Treat "fv" constraints
+ 	as "v".
+ 
+ 2021-03-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99563
+ 	* config/i386/i386.h (struct machine_function): Add
+ 	has_explicit_vzeroupper bitfield.
+ 	* config/i386/i386-expand.c (ix86_expand_builtin): Set
+ 	cfun->machine->has_explicit_vzeroupper when expanding
+ 	IX86_BUILTIN_VZEROUPPER.
+ 	* config/i386/i386-features.c (rest_of_handle_insert_vzeroupper):
+ 	Do the mode switching only when TARGET_VZEROUPPER, expensive
+ 	optimizations turned on and not optimizing for size.
+ 	(pass_insert_vzeroupper::gate): Enable even when
+ 	cfun->machine->has_explicit_vzeroupper is set.
+ 
+ 2021-03-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99542
+ 	* config/aarch64/aarch64.c
+ 	(aarch64_simd_clone_compute_vecsize_and_simdlen): If not a function
+ 	definition, walk TYPE_ARG_TYPES list if non-NULL for argument types
+ 	instead of DECL_ARGUMENTS.  Ignore types for uniform arguments.
+ 
+ 2021-03-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98834
+ 	* tree-ssa-sccvn.c (vn_reference_lookup_3): Handle missing
+ 	subsetting by truncating the access size.
+ 
+ 2021-03-15  Jan Hubicka  <hubicka@ucw.cz>
+ 
+ 	* config/i386/i386-options.c (processor_cost_table): Add znver3_cost.
+ 	* config/i386/x86-tune-costs.h (znver3_cost): New gobal variable; copy
+ 	of znver2_cost.
+ 
+ 2021-03-15  Martin Liska  <mliska@suse.cz>
+ 
+ 	* spellcheck.c: Add missing comma in initialization.
+ 
+ 2021-03-14  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/sse.md (*vec_extract<mode>): Merge alternative 0 with
+ 	alternative 2 and alternative 1 with alternative 3 using
+ 	YW register constraint.
+ 	(*vec_extract<PEXTR_MODE12:mode>_zext): Merge alternatives
+ 	using YW register constraint.
+ 	(*vec_extractv16qi_zext): Ditto.
+ 	(*vec_extractv4si): Merge alternatives 4 and 5
+ 	using Yw register constraint.
+ 	(*ssse3_palignr<mode>_perm): Use Yw instead of v for alternative 3.
+ 
+ 2021-03-13  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR tree-optimization/99489
+ 	* builtins.c (gimple_call_alloc_size): Fail gracefully when argument
+ 	is not a call statement.
+ 
+ 2021-03-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/99544
+ 	* match.pd (X + (X << C) -> X * (1 + (1 << C))): Don't simplify
+ 	if for vector types multiplication can't be done in type's mode.
+ 
+ 2021-03-12  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR target/99422
+ 	* config/sparc/constraints.md (w): Rename to...
+ 	(W): ... this and ditch previous implementation.
+ 	* config/sparc/sparc.md (*movdi_insn_sp64): Replace W with m.
+ 	(*movdf_insn_sp64): Likewise.
+ 	(*mov<VM64:mode>_insn_sp64): Likewise.
+ 	* config/sparc/sync.md (*atomic_compare_and_swap<mode>_1): Replace
+ 	w with W.
+ 	(atomic_compare_and_swap_leon3_1): Likewise.
+ 	(*atomic_compare_and_swapdi_v8plus): Likewise.
+ 	* config/sparc/sparc.c (memory_ok_for_ldd): Remove useless test on
+ 	architecture and add missing address validity check during LRA.
+ 
+ 2021-03-12  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	PR fortran/98858
+ 	* gimplify.c (omp_add_variable): Handle NULL_TREE as size
+ 	occuring for assumed-size arrays in use_device_{ptr,addr}.
+ 
+ 2021-03-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99321
+ 	* config/i386/constraints.md (YW): New internal constraint.
+ 	* config/i386/sse.md (v_Yw): Add V4TI, V2TI, V1TI and TI cases.
+ 	(*<sse2_avx2>_<insn><mode>3<mask_name>,
+ 	*<sse2_avx2>_uavg<mode>3<mask_name>, *abs<mode>2,
+ 	*<s>mul<mode>3_highpart<mask_name>): Use <v_Yw> instead of v in
+ 	constraints.
+ 	(<sse2_avx2>_psadbw): Use YW instead of v in constraints.
+ 	(*avx2_pmaddwd, *sse2_pmaddwd, *<code>v8hi3, *<code>v16qi3,
+ 	avx2_pmaddubsw256, ssse3_pmaddubsw128): Merge last two alternatives
+ 	into one, use Yw instead of former x,v.
+ 	(ashr<mode>3, <insn><mode>3): Use <v_Yw> instead of x in constraints of
+ 	the last alternative.
+ 	(<sse2_avx2>_packsswb<mask_name>, <sse2_avx2>_packssdw<mask_name>,
+ 	<sse2_avx2>_packuswb<mask_name>, <sse4_1_avx2>_packusdw<mask_name>,
+ 	*<ssse3_avx2>_pmulhrsw<mode>3<mask_name>, <ssse3_avx2>_palignr<mode>,
+ 	<ssse3_avx2>_pshufb<mode>3<mask_name>): Merge last two alternatives
+ 	into one, use <v_Yw> instead of former x,v.
+ 	(avx2_interleave_highv32qi<mask_name>,
+ 	vec_interleave_highv16qi<mask_name>): Use Yw instead of v in
+ 	constraints.  Add && <mask_avx512bw_condition> to condition.
+ 	(avx2_interleave_lowv32qi<mask_name>,
+ 	vec_interleave_lowv16qi<mask_name>,
+ 	avx2_interleave_highv16hi<mask_name>,
+ 	vec_interleave_highv8hi<mask_name>,
+ 	avx2_interleave_lowv16hi<mask_name>, vec_interleave_lowv8hi<mask_name>,
+ 	avx2_pshuflw_1<mask_name>, sse2_pshuflw_1<mask_name>,
+ 	avx2_pshufhw_1<mask_name>, sse2_pshufhw_1<mask_name>,
+ 	avx2_<code>v16qiv16hi2<mask_name>, sse4_1_<code>v8qiv8hi2<mask_name>,
+ 	*sse4_1_<code>v8qiv8hi2<mask_name>_1, <sse2_avx2>_<insn><mode>3): Use
+ 	Yw instead of v in constraints.
+ 	* config/i386/mmx.md (Yv_Yw): New define_mode_attr.
+ 	(*mmx_<insn><mode>3, mmx_ashr<mode>3, mmx_<insn><mode>3): Use <Yv_Yw>
+ 	instead of Yv in constraints.
+ 	(*mmx_<insn><mode>3, *mmx_mulv4hi3, *mmx_smulv4hi3_highpart,
+ 	*mmx_umulv4hi3_highpart, *mmx_pmaddwd, *mmx_<code>v4hi3,
+ 	*mmx_<code>v8qi3, mmx_pack<s_trunsuffix>swb, mmx_packssdw,
+ 	mmx_punpckhbw, mmx_punpcklbw, mmx_punpckhwd, mmx_punpcklwd,
+ 	*mmx_uavgv8qi3, *mmx_uavgv4hi3, mmx_psadbw): Use Yw instead of Yv in
+ 	constraints.
+ 	(*mmx_pinsrw, *mmx_pinsrb, *mmx_pextrw, *mmx_pextrw_zext, *mmx_pextrb,
+ 	*mmx_pextrb_zext): Use YW instead of Yv in constraints.
+ 	(*mmx_eq<mode>3, mmx_gt<mode>3): Use x instead of Yv in constraints.
+ 	(mmx_andnot<mode>3, *mmx_<code><mode>3): Split last alternative into
+ 	two, one with just x, another isa avx512vl with v.
+ 
+ 2021-03-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/invoke.texi: Add missing param documentation.
+ 
+ 2021-03-11  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/96374
+ 	* Makefile.in (ANALYZER_OBJS): Add analyzer/feasible-graph.o and
+ 	analyzer/trimmed-graph.o.
+ 	* doc/analyzer.texi (Analyzer Paths): Rewrite description of
+ 	feasibility checking to reflect new implementation.
+ 	* doc/invoke.texi (-fdump-analyzer-feasibility): Document new
+ 	option.
+ 	* shortest-paths.h (shortest_paths::get_shortest_distance): New.
+ 
+ 2021-03-11  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* digraph.cc (selftest::test_shortest_paths): Update
+ 	shortest_paths init for new param.  Add test of
+ 	SPS_TO_GIVEN_TARGET.
+ 	* shortest-paths.h (enum shortest_path_sense): New.
+ 	(shortest_paths::shortest_paths): Add "sense" param.
+ 	Update for renamings.  Generalize to use "sense" param.
+ 	(shortest_paths::get_shortest_path): Rename param.
+ 	(shortest_paths::m_sense): New field.
+ 	(shortest_paths::m_prev): Rename...
+ 	(shortest_paths::m_best_edge): ...to this.
+ 	(shortest_paths::get_shortest_path): Update for renamings.
+ 	Conditionalize flipping of path on sense of traversal.
+ 
+ 2021-03-11  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* digraph.cc (selftest::test_shortest_paths): Add test coverage
+ 	for paths from B and C.
+ 	* shortest-paths.h (shortest_paths::shortest_paths): Handle
+ 	unreachable nodes, rather than asserting.
+ 
+ 2021-03-11  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	PR target/99094
+ 	* config/rs6000/rs6000.c (rs6000_xcoff_file_start): Don't create
+ 	xcoff_tbss_section_name.
+ 	* config/rs6000/xcoff.h (ASM_OUTPUT_TLS_COMMON): Use .lcomm.
+ 	* xcoffout.c (xcoff_tbss_section_name): Delete.
+ 	* xcoffout.h (xcoff_tbss_section_name): Delete.
+ 
+ 2021-03-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99523
+ 	* tree-cfg.c (dump_function_to_file): Dump SSA names
+ 	w/o identifier to the decls section as well, not only those
+ 	without a VAR_DECL.
+ 
+ 2021-03-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR ipa/99517
+ 	* ipa-icf-gimple.c (func_checker::compare_gimple_call): For internal
+ 	function calls with lhs fail if the lhs don't have compatible types.
+ 
+ 2021-03-11  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* config/cris/cris.h (HARD_FRAME_POINTER_REGNUM): Define.
+ 	Change FRAME_POINTER_REGNUM to correspond to a new faked
+ 	register faked_fp, part of GENNONACR_REGS like faked_ap.
+ 	(CRIS_FAKED_REGS_CONTENTS): New helper macro.
+ 	(FIRST_PSEUDO_REGISTER, FIXED_REGISTERS, CALL_USED_REGISTERS):
+ 	(REG_ALLOC_ORDER, REG_CLASS_CONTENTS, REGNO_OK_FOR_BASE_P)
+ 	(ELIMINABLE_REGS, REGISTER_NAMES): Adjust accordingly.
+ 	* config/cris/cris.md (CRIS_FP_REGNUM): Renumber to new faked
+ 	register.
+ 	(CRIS_REAL_FP_REGNUM): New constant.
+ 	* config/cris/cris.c (cris_reg_saved_in_regsave_area): Check
+ 	for HARD_FRAME_POINTER_REGNUM instead of FRAME_POINTER_REGNUM.
+ 	(cris_initial_elimination_offset): Handle elimination changes
+ 	to HARD_FRAME_POINTER_REGNUM instead of FRAME_POINTER_REGNUM
+ 	and add one from FRAME_POINTER_REGNUM to
+ 	HARD_FRAME_POINTER_REGNUM.
+ 	(cris_expand_prologue, cris_expand_epilogue): Emit code for
+ 	hard_frame_pointer_rtx instead of frame_pointer_rtx.
+ 
+ 2021-03-10  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	PR target/99492
+ 	* config/rs6000/aix.h (ADJUST_FIELD_ALIGN): Add check for DCmode.
+ 	* config/rs6000/rs6000.c (rs6000_special_round_type_align): Same.
+ 
+ 2021-03-10  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/99422
+ 	* lra-constraints.c (process_address_1): Don't check unknown
+ 	constraint, use X for empty constraint.
+ 
+ 2021-03-10  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_vfp_is_call_or_return_candidate):
+ 	Fix typo in comment describing "is_ha" argument.
+ 
+ 2021-03-10  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* doc/sourcebuild.texi: Document LRA target selector.
+ 
+ 2021-03-10  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* doc/ux.texi: Add subsection contrasting interactive versus
+ 	batch usage of GCC.
+ 
+ 2021-03-10  Joel Hutton  <joel.hutton@arm.com>
+ 
+ 	PR target/99102
+ 	* tree-vect-stmts.c (vectorizable_store): Fix scatter store mask
+ 	check condition.
+ 	(vectorizable_load): Fix gather load mask check condition.
+ 
+ 2021-03-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99510
+ 	* tree.c (check_aligned_type): Check that the candidate
+ 	has TYPE_USER_ALIGN set instead of matching with the
+ 	original type.
+ 
+ 2021-03-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* config/sparc/sparc.c (sparc_regmode_natural_size): Return 4 for
+ 	float and vector integer modes only if the mode is not larger.
+ 
+ 2021-03-10  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* config/cris/cris.h (DWARF_FRAME_REGISTERS): Define.
+ 
+ 2021-03-09  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	* ira.c (ira_setup_alts, ira_get_dup_out_num): Process digital
+ 	constraints > 9.
+ 	* ira-lives.c (single_reg_class): Ditto.
+ 
+ 2021-03-09  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	* config.gcc (aarch64-*-rtems*): Include general rtems.h after
+ 	the architecture-specific rtems.h.
+ 	(aarch64-*-rtems*): Likewise.
+ 	(arm*-*-rtems*): Likewise.
+ 	(epiphany-*-rtems*): Likewise.
+ 	(riscv*-*-rtems*): Likewise.
+ 
+ 2021-03-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/99305
+ 	* tree-ssa-phiopt.c (conditional_replacement): Test integer_pow2p
+ 	before integer_all_onesp instead of vice versa.
+ 
+ 2021-03-09  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* common/config/arm/arm-common.c (arm_config_default): Change type
+ 	of 'i' to unsigned.
+ 
+ 2021-03-09  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/99454
+ 	* lra-constraints.c (process_address_1): Process constraint 'g'
+ 	separately and digital constraints containing more one digit.
+ 
+ 2021-03-09  Nick Clifton  <nickc@redhat.com>
+ 
+ 	* config/rx/rx.h (DBX_DEBUGGING_INFO): Define.
+ 	(DWARF"_DEBUGGING_INFO): Define.
+ 
+ 2021-03-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR c++/90448
+ 	* calls.c (initialize_argument_information): When the argument
+ 	is passed by reference, do not make a copy in a thunk only if
+ 	the argument is already in memory.  Remove redundant test for
+ 	the case of callee copy.
+ 
+ 2021-03-09  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/99454
+ 	* lra-constraints.c (process_address_1): Process 0..9 constraints
+ 	in process_address_1.
+ 
+ 2021-03-09  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* config/s390/s390.c (struct s390_processor processor_table):
+ 	Binutils name string must not be empty.
+ 
+ 2021-03-09  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/arc.c (arc_attr_type): Remove function.
+ 
+ 2021-03-09  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/99464
+ 	* config/i386/i386-options.c (ix86_option_override_internal):
+ 	Set isa_flags for OPTS argument and not for the global
+ 	global_options.
+ 
+ 2021-03-09  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config/rs6000/predicates.md (ds_form_mem_operand): Check
+ 	in correct code.
+ 
+ 2021-03-09  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	PR target/99070
+ 	* config/rs6000/predicates.md (ds_form_mem_operand) New
+ 	predicate.
+ 	* config/rs6000/genfusion.pl (gen_ld_cmpi_p10) Use
+ 	ds_form_mem_operand in ld/lwa patterns.
+ 	* config/rs6000/fusion.md: Regenerate file.
+ 
+ 2021-03-08  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/98266
+ 	* gimple-array-bounds.cc (inbounds_vbase_memaccess_p): New function.
+ 	(array_bounds_checker::check_array_bounds): Call it.
+ 
+ 2021-03-08  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/97631
+ 	* tree-ssa-strlen.c (maybe_warn_overflow): Test rawmem.
+ 	(handle_builtin_stxncpy_strncat): Rename locals.  Determine
+ 	destination size from allocation calls.  Issue a more appropriate
+ 	kind of warning.
+ 	(handle_builtin_memcpy): Pass true as rawmem to maybe_warn_overflow.
+ 	(handle_builtin_memset): Same.
+ 
+ 2021-03-08  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/98959
+ 	* config/rs6000/rs6000.c (rs6000_emit_le_vsx_permute): Add an assert
+ 	to ensure we do not have an Altivec style address.
+ 	* config/rs6000/vsx.md (*vsx_le_perm_load_<mode>): Disable if passed
+ 	an Altivec style address.
+ 	(*vsx_le_perm_store_<mode>): Likewise.
+ 	(splitters after *vsx_le_perm_store_<mode>): Likewise.
+ 	(vsx_load_<mode>): Disable special expander if passed an Altivec
+ 	style address.
+ 	(vsx_store_<mode>): Likewise.
+ 
+ 2021-03-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	PR target/99437
+ 	* config/aarch64/predicates.md (aarch64_simd_shift_imm_vec_qi): Define.
+ 	(aarch64_simd_shift_imm_vec_hi): Likewise.
+ 	(aarch64_simd_shift_imm_vec_si): Likewise.
+ 	(aarch64_simd_shift_imm_vec_di): Likewise.
+ 	* config/aarch64/aarch64-simd.md (aarch64_shrn<mode>_insn_le): Use
+ 	predicate from above.
+ 	(aarch64_shrn<mode>_insn_be): Likewise.
+ 	(aarch64_rshrn<mode>_insn_le): Likewise.
+ 	(aarch64_rshrn<mode>_insn_be): Likewise.
+ 	(aarch64_shrn2<mode>_insn_le): Likewise.
+ 	(aarch64_shrn2<mode>_insn_be): Likewise.
+ 	(aarch64_rshrn2<mode>_insn_le): Likewise.
+ 	(aarch64_rshrn2<mode>_insn_be): Likewise.
+ 
+ 2021-03-08  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/99422
+ 	* lra-constraints.c (skip_contraint_modifiers): New function.
+ 	(process_address_1): Use it before lookup_constraint call.
+ 
+ 2021-03-08  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/99463
+ 	* config/i386/i386-options.c (ix86_option_override_internal):
+ 	Enable UINTR and HRESET for -march that supports it.
+ 
+ 2021-03-08  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* config/s390/s390.c (f_constraint_p): New function.
+ 	(s390_md_asm_adjust): Implement TARGET_MD_ASM_ADJUST.
+ 	(TARGET_MD_ASM_ADJUST): Likewise.
+ 
+ 2021-03-08  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	PR fortran/97927
+ 	* tree-nested.c (convert_local_reference_stmt): Avoid calling
+ 	lookup_field_for_decl for Fortran module (= namespace context).
+ 
+ 2021-03-08  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* config/s390/s390.c (s390_expand_vec_compare): Implement <0
+ 	comparison with arithmetic right shift.
+ 	(s390_expand_vcond): No need for a force_reg anymore.
+ 	s390_vec_compare will do it.
+ 	* config/s390/vector.md ("vec_cmp<mode><tointvec>"): Accept also
+ 	immediate operands.
+ 
+ 2021-03-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99321
+ 	* config/i386/constraints.md (Yw): Use SSE_REGS if TARGET_SSE
+ 	but TARGET_AVX512BW or TARGET_AVX512VL is not set.  Adjust description
+ 	and comment.
+ 	* config/i386/sse.md (v_Yw): New define_mode_attr.
+ 	(*<insn><mode>3, *mul<mode>3<mask_name>, *avx2_<code><mode>3,
+ 	*sse4_1_<code><mode>3<mask_name>): Use <v_Yw> instead of v
+ 	in constraints.
+ 	* config/i386/mmx.md (mmx_pshufw_1, *vec_dupv4hi): Use Yw instead of
+ 	xYw in constraints.
+ 
+ 2021-03-06  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* tree-pretty-print.c (dump_generic_node): Emit non-generic
+ 	address space info for aggregates.
+ 
+ 2021-03-06  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* config/cris/cris.h (MAX_FIXED_MODE_SIZE): Don't define.
+ 
+ 2021-03-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/99322
+ 	* tree-cfg.c (bb_to_omp_idx): New variable.
+ 	(execute_build_cfg): Release the bb_to_omp_idx vector after
+ 	cleanup_tree_cfg returns.
+ 	(handle_abnormal_edges): Remove bb_to_omp_idx argument, adjust
+ 	for bb_to_omp_idx being a vec<int> instead of pointer to array
+ 	of ints.
+ 	(make_edges): Remove bb_to_omp_idx local variable, don't pass
+ 	it to handle_abnormal_edges, adjust for bb_to_omp_idx being a
+ 	vec<int> instead of pointer to array of ints and don't free/release
+ 	it at the end.
+ 	(remove_bb): When removing a bb and placing forced label somewhere
+ 	else, ensure it is put into the same OpenMP region during cfg
+ 	pass if possible or to entry successor as fallback.  Unregister
+ 	bb from bb_to_omp_idx.
+ 
+ 2021-03-05  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/99378
+ 	* lra-constraints.c (process_address_1): Skip decomposing address
+ 	for asm insn operand with unknown constraint.
+ 
+ 2021-03-05  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/98078
+ 	* cgraph.c (cgraph_edge::set_call_stmt): Do not update all
+ 	corresponding speculative edges if we are about to resolve
+ 	sepculation.  Make edge direct (and so resolve speculations) before
+ 	removing it from call_site_hash.
+ 	(cgraph_edge::make_direct): Relax the initial assert to allow calling
+ 	the function on speculative direct edges.
+ 
+ 2021-03-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR rtl-optimization/99376
+ 	* rtlanal.c (nonzero_bits1) <arithmetic operators>: If the number
+ 	of low-order zero bits is too large, set the result to 0 directly.
+ 
+ 2021-03-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/93235
+ 	* expmed.c (store_bit_field_using_insv): Return false of xop0 is a
+ 	SUBREG and a SUBREG to op_mode can't be created.
+ 
+ 2021-03-04  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR target/99381
+ 	* config/aarch64/aarch64-sve-builtins.cc
+ 	(function_resolver::require_vector_type): Handle error_mark_node.
+ 
+ 2021-03-04  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* cfgexpand.c (expand_asm_loc): Pass new parameter.
+ 	(expand_asm_stmt): Likewise.
+ 	* config/arm/aarch-common-protos.h (arm_md_asm_adjust): Add new
+ 	parameter.
+ 	* config/arm/aarch-common.c (arm_md_asm_adjust): Likewise.
+ 	* config/arm/arm.c (thumb1_md_asm_adjust): Likewise.
+ 	* config/cris/cris.c (cris_md_asm_adjust): Likewise.
+ 	* config/i386/i386.c (ix86_md_asm_adjust): Likewise.
+ 	* config/mn10300/mn10300.c (mn10300_md_asm_adjust): Likewise.
+ 	* config/nds32/nds32.c (nds32_md_asm_adjust): Likewise.
+ 	* config/pdp11/pdp11.c (pdp11_md_asm_adjust): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_md_asm_adjust): Likewise.
+ 	* config/vax/vax.c (vax_md_asm_adjust): Likewise.
+ 	* config/visium/visium.c (visium_md_asm_adjust): Likewise.
+ 	* doc/tm.texi (md_asm_adjust): Likewise.
+ 	* target.def (md_asm_adjust): Likewise.
+ 
+ 2021-03-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/97855
+ 	* tree-pretty-print.c: Poison pp_printf.
+ 	(dump_decl_name): Avoid use of pp_printf.
+ 	(dump_block_node): Likewise.
+ 	(dump_generic_node): Likewise.
+ 
+ 2021-03-04  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/96963
+ 	PR middle-end/94655
+ 	* builtins.c (handle_array_ref): New helper.
+ 	(handle_mem_ref): New helper.
+ 	(compute_objsize_r): Factor out ARRAY_REF and MEM_REF handling
+ 	into new helper functions.  Correct a workaround for vectorized
+ 	assignments.
+ 
+ 2021-03-03  Pat Haugen  <pthaugen@linux.ibm.com>
+ 
+ 	* config/rs6000/dfp.md (extendddtd2, trunctddd2, *cmp<mode>_internal1,
+ 	floatditd2, ftrunc<mode>2, fix<mode>di2, dfp_ddedpd_<mode>,
+ 	dfp_denbcd_<mode>, dfp_dxex_<mode>, dfp_diex_<mode>,
+ 	*dfp_sgnfcnc_<mode>, dfp_dscli_<mode>, dfp_dscri_<mode>): Update size
+ 	attribute for Power10.
+ 	* config/rs6000/mma.md (*movoo): Likewise.
+ 	* config/rs6000/rs6000.md (define_attr "size"): Add 256.
+ 	(define_mode_attr bits): Add DD/TD modes.
+ 	* config/rs6000/sync.md (load_quadpti, store_quadpti, load_lockedpti,
+ 	store_conditionalpti): Update size attribute for Power10.
+ 
+ 2021-03-03  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	PR bootstrap/92002
+ 	* config/sparc/t-sparc (tree-ssanames.o-warn): Don't error for
+ 	-Wuninitialized, -Wmaybe-uninitialized.
+ 	(wide-int.o-warn): Likewise.
+ 
+ 2021-03-03  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* common/config/arm/arm-common.c: Include configargs.h.
+ 	(arm_config_default): New function.
+ 	(arm_target_mode): Renamed from arm_target_thumb_only.  Handle
+ 	processors that do not support Thumb.  Take into account the
+ 	--with-mode configuration setting for selecting the default.
+ 	* config/arm/arm.h (OPTION_DEFAULT_SPECS): Remove entry for 'mode'.
+ 	(TARGET_MODE_SPEC_FUNCTIONS): Update for function name change.
+ 
+ 2021-03-03  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR gcov-profile/97461
+ 	* gcov-io.h (GCOV_PREALLOCATED_KVP): Remove.
+ 
+ 2021-03-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR target/99234
+ 	* config/i386/i386.c (ix86_compute_frame_layout): For a SEH target,
+ 	point back the hard frame pointer to its default location when the
+ 	frame is larger than SEH_MAX_FRAME_SIZE.
+ 
+ 2021-03-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99321
+ 	* config/i386/predicates.md (logic_operator): New define_predicate.
+ 	* config/i386/i386.md (mov + mem using comm arith peephole2):
+ 	Punt if operands[1] is EXT_REX_SSE_REGNO_P, AVX512BW is not enabled
+ 	and the inner mode is [QH]Imode.
+ 
+ 2021-03-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/99090
+ 	* dwarf2out.c (dw_loc_list_struct): Add end_entry member.
+ 	(new_loc_list): Clear end_entry.
+ 	(output_loc_list): Only use DW_LLE_startx_length for -gsplit-dwarf
+ 	if HAVE_AS_LEB128, otherwise use DW_LLE_startx_endx.  Fix comment
+ 	typo.
+ 	(index_location_lists): For dwarf_version >= 5 without HAVE_AS_LEB128,
+ 	initialize also end_entry.
+ 
+ 2021-03-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99085
+ 	* cfgrtl.c (fixup_partitions): When changing some bbs from hot to cold
+ 	partitions, if in non-layout mode after reorder_blocks also move
+ 	affected blocks to ensure a single partition transition.
+ 
+ 2021-03-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/96078
+ 	* cgraphunit.c (process_function_and_variable_attributes): Don't
+ 	warn about flatten on an alias if the target also has it.
+ 	* cgraph.h (symtab_node::get_alias_target_tree): New.
+ 
+ 2021-03-02  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/rs6000.md (tls_get_tpointer_internal): Prepend
+ 	period to symbol name.
+ 	(tls_get_addr_internal<mode>): Same.
+ 
+ 2021-03-02  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR c/99323
+ 	* diagnostic-show-locus.c
+ 	(selftest::test_one_liner_many_fixits_2): Fix accidental usage of
+ 	column 0.
+ 
+ 2021-03-02  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/99276
+ 	* builtins.c (warn_for_access): Remove stray warning text.
+ 
+ 2021-03-02  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/99295
+ 	* doc/extend.texi (attribute malloc): Reword and clarify nonaliasing
+ 	property.
+ 
+ 2021-03-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/99319
+ 	* dwarf2out.c (output_macinfo_op): Use DW_MACRO_*_str* even with
+ 	-gdwarf-5 -gstrict-dwarf.  For -gsplit-dwarf -gdwarf-5 use
+ 	DW_MACRO_*_strx instead of DW_MACRO_*_strp.  Handle
+ 	DW_MACRO_define_strx and DW_MACRO_undef_strx.
+ 	(save_macinfo_strings): Use DW_MACRO_*_str* even with
+ 	-gdwarf-5 -gstrict-dwarf.  Handle DW_MACRO_define_strx and
+ 	DW_MACRO_undef_strx.
+ 
+ 2021-03-02  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* config/s390/s390-builtin-types.def (BT_FN_V4SF_V8HI_UINT): New
+ 	builtin signature.
+ 	(BT_FN_V8HI_V8HI_UINT): Likewise.
+ 	(BT_FN_V8HI_V4SF_V4SF_UINT): Likewise.
+ 	* config/s390/s390-builtins.def (B_NNPA): New macro definition.
+ 	(s390_vclfnhs, s390_vclfnls, s390_vcrnfs, s390_vcfn, s390_vcnf):
+ 	New builtin definitions.
+ 	* config/s390/s390-c.c (s390_cpu_cpp_builtins_internal): Bump
+ 	vector extension version.
+ 	* config/s390/s390.c (s390_expand_builtin): Check if builtins are
+ 	available with current -march level.
+ 	* config/s390/s390.md (UNSPEC_NNPA_VCLFNHS_V8HI)
+ 	(UNSPEC_NNPA_VCLFNLS_V8HI, UNSPEC_NNPA_VCRNFS_V8HI)
+ 	(UNSPEC_NNPA_VCFN_V8HI, UNSPEC_NNPA_VCNF_V8HI): New constants.
+ 	* config/s390/vecintrin.h (vec_extend_to_fp32_hi): New macro.
+ 	(vec_extend_to_fp32_lo): Likewise.
+ 	(vec_round_from_fp32): Likewise.
+ 	(vec_convert_to_fp16): Likewise.
+ 	(vec_convert_from_fp16): Likewise.
+ 	* config/s390/vx-builtins.md (vclfnhs_v8hi): New insn pattern.
+ 	(vclfnls_v8hi): Likewise.
+ 	(vcrnfs_v8hi): Likewise.
+ 	(vcfn_v8hi): Likewise.
+ 	(vcnf_v8hi): Likewise.
+ 
+ 2021-03-02  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* common/config/s390/s390-common.c (processor_flags_table): New entry.
+ 	* config.gcc: Enable arch14 for --with-arch and --with-tune.
+ 	* config/s390/driver-native.c (s390_host_detect_local_cpu): Pick
+ 	arch14 for unknown CPU models.
+ 	* config/s390/s390-opts.h (enum processor_type): Add PROCESSOR_ARCH14.
+ 	* config/s390/s390.c (s390_issue_rate): Add case for PROCESSOR_ARCH14.
+ 	(s390_get_sched_attrmask): Likewise.
+ 	(s390_get_unit_mask): Likewise.
+ 	* config/s390/s390.h (enum processor_flags): Add PF_NNPA and PF_ARCH14.
+ 	(TARGET_CPU_ARCH14, TARGET_CPU_ARCH14_P, TARGET_CPU_NNPA)
+ 	(TARGET_CPU_NNPA_P, TARGET_ARCH14, TARGET_ARCH14_P, TARGET_NNPA)
+ 	(TARGET_NNPA_P): New macro definitions.
+ 	* config/s390/s390.md ("cpu_facility", "enabled"): Add arch14 and nnpa.
+ 	* config/s390/s390.opt: Add PROCESSOR_ARCH14.
+ 
+ 2021-03-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/95757
+ 	* tree-vrp.c (register_edge_assert_for): Remove superfluous ()s around
+ 	condition.  Call register_edge_assert_for_1 for == 0, != 0, == 1 and
+ 	!= 1 comparisons if name is lhs of a comparison.
+ 
+ 2021-03-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR target/44107
+ 	PR target/48097
+ 	* config/darwin-protos.h (darwin_should_restore_cfa_state): New.
+ 	* config/darwin.c (darwin_should_restore_cfa_state): New.
+ 	* config/darwin.h (TARGET_ASM_SHOULD_RESTORE_CFA_STATE): New.
+ 	* doc/tm.texi: Regenerated.
+ 	* doc/tm.texi.in: Document TARGET_ASM_SHOULD_RESTORE_CFA_STATE.
+ 	* dwarf2cfi.c (connect_traces): If the target requests, restore
+ 	the CFA expression after a DW_CFA_restore.
+ 	* target.def (TARGET_ASM_SHOULD_RESTORE_CFA_STATE): New hook.
+ 
+ 2021-03-01  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR target/99313
+ 	* optc-save-gen.awk: Add 4 more exceptions.
+ 
+ 2021-03-01  Nathan Sidwell  <nathan@acm.org>
+ 
+ 	PR c++/99294
+ 	* tree.h (TYPE_ALIGN_RAW): New accessor.
+ 	(TYPE_ALIGN): Use it.
+ 
+ 2021-03-01  Jan Hubicka  <jh@suse.cz>
+ 
+ 	PR ipa/98338
+ 	* ipa-fnsummary.c (compute_fn_summary): Fix sanity check.
+ 
+ 2021-03-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR target/99234
+ 	* config/i386/i386.c (ix86_compute_frame_layout): For a SEH target,
+ 	point the hard frame pointer to the SSE register save area instead
+ 	of the general register save area.  Perform only minimal adjustment
+ 	for small frames if it is initially not correctly aligned.
+ 	(ix86_expand_prologue): Remove early saves for a SEH target.
+ 	* config/i386/winnt.c (struct seh_frame_state): Document constraint.
+ 
+ 2021-02-28  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/99304
+ 	* ipa.c (symbol_table::remove_unreachable_nodes): Fix a comment
+ 	typo - referneced -> referenced.
+ 	* tree.c (component_ref_size): Fix comment typo -
+ 	refernce -> reference.
+ 	* tree-ssa-alias.c (access_path_may_continue_p): Fix comment typo -
+ 	traling -> trailing.
+ 	(aliasing_component_refs_p): Fix comment typos -
+ 	refernce -> reference and refernece -> reference and
+ 	traling -> trailing.
+ 	(nonoverlapping_refs_since_match_p): Fix comment typo -
+ 	referneces -> references.
+ 	* doc/invoke.texi (--param modref-max-bases): Fix a typo -
+ 	referneces -> references.
+ 
+ 2021-02-27  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/host-darwin.c (darwin_gt_pch_use_address): Modify
+ 	diagnostic message to avoid use of a contraction and format
+ 	warning.
+ 
+ 2021-02-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR other/99288
+ 	* gcse.c (gcse_or_cprop_is_too_expensive): Use %wu instead of
+ 	HOST_WIDE_INT_PRINT_UNSIGNED in warning format string.
+ 	* ipa-devirt.c (ipa_odr_read_section): Use %wd instead of
+ 	HOST_WIDE_INT_PRINT_DEC in inform format string.  Fix comment
+ 	typos.
+ 
+ 2021-02-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/99281
+ 	* expr.c (store_field): For calls with return-slot optimization
+ 	and addressable return type expand the store directly.
+ 
+ 2021-02-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR c/99275
+ 	* builtins.c (warn_string_no_nul): Fix diagnostic formatting.
+ 
+ 2021-02-26  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/99279
+ 	* config/rs6000/rs6000-call.c (rs6000_init_builtins): Replace assert
+ 	with an "if" test.
+ 
+ 2021-02-26  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config.gcc: Add rs6000-pcrel-opt.o.
+ 	* config/rs6000/rs6000-pcrel-opt.c: New file.
+ 	* config/rs6000/pcrel-opt.md: New file.
+ 	* config/rs6000/predicates.md: Add d_form_memory predicate.
+ 	* config/rs6000/rs6000-cpus.def: Add OPTION_MASK_PCREL_OPT.
+ 	* config/rs6000/rs6000-passes.def: Add pass_pcrel_opt.
+ 	* config/rs6000/rs6000-protos.h: Add reg_to_non_prefixed(),
+ 	pcrel_opt_valid_mem_p(), output_pcrel_opt_reloc(),
+ 	and make_pass_pcrel_opt().
+ 	* config/rs6000/rs6000.c (reg_to_non_prefixed): Make global.
+ 	(rs6000_option_override_internal): Add pcrel-opt.
+ 	(rs6000_delegitimize_address): Support pcrel-opt.
+ 	(rs6000_opt_masks): Add pcrel-opt.
+ 	(pcrel_opt_valid_mem_p): New function.
+ 	(reg_to_non_prefixed): Make global.
+ 	(rs6000_asm_output_opcode): Reset prepend_p_to_next_insn.
+ 	(output_pcrel_opt_reloc): New function.
+ 	* config/rs6000/rs6000.md (loads_extern_addr): New attr.
+ 	(pcrel_extern_addr): Set loads_extern_addr.
+ 	Add include for pcrel-opt.md.
+ 	* config/rs6000/rs6000.opt: Add -mpcrel-opt.
+ 	* config/rs6000/t-rs6000: Add rules for pcrel-opt.c and
+ 	pcrel-opt.md.
+ 
+ 2021-02-26  YunQiang Su  <yunqiang.su@cipunited.com>
+ 
+ 	PR target/98996
+ 	* config/mips/mips.c (mips_expand_ext_as_unaligned_load):
+ 	If TARGET_64BIT and dest is SUBREG, we check the width, if it
+ 	equal to SImode, we use SImode operation, just like what we are
+ 	doing for REG one.
+ 
+ 2021-02-26  Marek Polacek  <polacek@redhat.com>
+ 
+ 	* builtins.c (warn_for_access): Fix typos.
+ 
+ 2021-02-25  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/aarch64/aarch64.md (<optab>_rol<mode>3): Add a '#'
+ 	mark in front of the immediate quantity.
+ 	(<optab>_rolsi3_uxtw): Likewise.
+ 
+ 2021-02-25  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/99271
+ 	* config/arm/thumb2.md (nonsecure_call_reg_thumb2_fpcxt): New pattern.
+ 	(nonsecure_call_value_reg_thumb2_fpcxt): Likewise.
+ 	(nonsecure_call_reg_thumb2): Restrict to using r4 for the callee
+ 	address and disable when the FPCXT is not available.
+ 	(nonsecure_call_value_reg_thumb2): Likewise.
+ 
+ 2021-02-25  Nathan Sidwell  <nathan@acm.org>
+ 
+ 	PR c++/99166
+ 	* doc/invoke.texi (flang-info-module-cmi): Renamed option.
+ 
+ 2021-02-25  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-slp.c (optimize_load_redistribution_1): Abort on NULL nodes.
+ 
+ 2021-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99253
+ 	* tree-vect-loop.c (check_reduction_path): First compute
+ 	code, then verify out-of-loop uses.
+ 
+ 2021-02-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/95798
+ 	* match.pd ((T)(A) + CST -> (T)(A + CST)): Add :s to convert.
+ 
+ 2021-02-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/80635
+ 	* tree-vrp.c (vrp_simplify_cond_using_ranges): Also handle
+ 	VIEW_CONVERT_EXPR if modes are the same, innerop is integral and
+ 	has mode precision.
+ 
+ 2021-02-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.c (optimize_load_redistribution_1): Delay
+ 	load_map population.
+ 	(vect_match_slp_patterns_2): Revert part of last change.
+ 	(vect_analyze_slp): Do not interleave optimize_load_redistribution
+ 	with pattern detection but do it afterwards.  Dump the
+ 	whole SLP graph after pattern recognition and load
+ 	redistribution optimization finished.
+ 
+ 2021-02-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR fortran/99226
+ 	* omp-low.c (struct omp_context): Add teams_nested_p and
+ 	nonteams_nested_p members.
+ 	(scan_omp_target): Diagnose teams nested inside of target with other
+ 	directives strictly nested inside of the same target.
+ 	(check_omp_nesting_restrictions): Set ctx->teams_nested_p or
+ 	ctx->nonteams_nested_p as needed.
+ 
+ 2021-02-24  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR inline-asm/99123
+ 	* lra-constraints.c (uses_hard_regs_p): Don't use decompose_mem_address.
+ 
+ 2021-02-24  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* config/cris/cris.c (cris_expand_prologue): Set
+ 	current_function_static_stack_size, if flag_stack_usage_info.
+ 
+ 2021-02-24  Pat Haugen  <pthaugen@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (next_insn_prefixed_p): Rename.
+ 	(rs6000_final_prescan_insn): Adjust.
+ 	(rs6000_asm_output_opcode): Likewise.
+ 
+ 2021-02-24  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/97172
+ 	* attribs.c (attr_access::free_lang_data): Clear attribute arg spec
+ 	from function arguments.
+ 
+ 2021-02-24  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/99220
+ 	* tree-vect-slp.c (optimize_load_redistribution_1): Remove
+ 	node from cache when it's about to be deleted.
+ 
+ 2021-02-24  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/99225
+ 	* fold-const.c (fold_binary_loc) <case NE_EXPR>: In (x & (1 << y)) != 0
+ 	to ((x >> y) & 1) != 0 simplifications use build_one_cst instead of
+ 	build_int_cst (..., 1).  Formatting fixes.
+ 
+ 2021-02-24  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/99149
+ 	* tree-vect-slp-patterns.c (vect_detect_pair_op): Don't recreate the
+ 	buffer.
+ 	(vect_slp_reset_pattern): Remove.
+ 	(complex_fma_pattern::matches): Remove call to vect_slp_reset_pattern.
+ 	(complex_mul_pattern::build, complex_fma_pattern::build,
+ 	complex_fms_pattern::build): Fix ref counts.
+ 	* tree-vect-slp.c (vect_free_slp_tree): Undo SLP only pattern relevancy
+ 	when node is being deleted.
+ 	(vect_match_slp_patterns_2): Correct result of cache hit on patterns.
+ 	(vect_schedule_slp): Invalidate SLP_TREE_REPRESENTATIVE of removed
+ 	stores.
+ 	* tree-vectorizer.c (vec_info::new_stmt_vec_info): Initialize value.
+ 
+ 2021-02-24  Matthias Klose  <doko@ubuntu.com>
+ 
+ 	Revert:
+ 	2020-12-07  Matthias Klose  <doko@ubuntu.com>
+ 
+ 	* genextract.c (print_header): Undefine ENABLE_RTL_CHECKING
+ 	and ENABLE_RTL_FLAG_CHECKING.
+ 
+ 2021-02-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR c/99224
+ 	* builtins.c (fold_builtin_next_arg): Avoid NULL arg.
+ 
+ 2021-02-23  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	* config/rs6000/mma.md (mma_assemble_pair): Rename from this...
+ 	(vsx_assemble_pair): ...to this.
+ 	(*mma_assemble_pair): Rename from this...
+ 	(*vsx_assemble_pair): ...to this.
+ 	(mma_disassemble_pair): Rename from this...
+ 	(vsx_disassemble_pair): ...to this.
+ 	(*mma_disassemble_pair): Rename from this...
+ 	(*vsx_disassemble_pair): ...to this.
+ 	* config/rs6000/rs6000-builtin.def (BU_MMA_V2, BU_MMA_V3,
+ 	BU_COMPAT): New macros.
+ 	(mma_assemble_pair): Rename from this...
+ 	(vsx_assemble_pair): ...to this.
+ 	(mma_disassemble_pair): Rename from this...
+ 	(vsx_disassemble_pair): ...to this.
+ 	(mma_assemble_pair): New compatibility built-in.
+ 	(mma_disassemble_pair): Likewise.
+ 	* config/rs6000/rs6000-call.c (struct builtin_compatibility): New.
+ 	(RS6000_BUILTIN_COMPAT): Define.
+ 	(bdesc_compat): New.
+ 	(mma_expand_builtin): Use VSX_BUILTIN_DISASSEMBLE_PAIR_INTERNAL.
+ 	(rs6000_gimple_fold_mma_builtin): Use MMA_BUILTIN_DISASSEMBLE_PAIR
+ 	and VSX_BUILTIN_ASSEMBLE_PAIR.
+ 	(rs6000_init_builtins): Register compatibility built-ins.
+ 	(mma_init_builtins): Use VSX_BUILTIN_ASSEMBLE_PAIR,
+ 	VSX_BUILTIN_ASSEMBLE_PAIR_INTERNAL, VSX_BUILTIN_DISASSEMBLE_PAIR and
+ 	VSX_BUILTIN_DISASSEMBLE_PAIR_INTERNAL.
+ 	* doc/extend.texi (__builtin_mma_assemble_pair): Rename from this...
+ 	(__builtin_vsx_assemble_pair): ...to this.
+ 	(__builtin_mma_disassemble_pair): Rename from this...
+ 	(__builtin_vsx_disassemble_pair): ...to this.
+ 
+ 2021-02-23  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR sanitizer/99168
+ 	* ipa-icf.c (sem_variable::merge): Do not merge 2 variables
+ 	with different alignment. That leads to an invalid red zone
+ 	size allocated in runtime.
+ 
+ 2021-02-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/99204
+ 	* fold-const.c (fold_read_from_constant_string): Check that
+ 	tree_fits_uhwi_p (index) rather than just that index is INTEGER_CST.
+ 
+ 2021-02-23  Segher Boessenkool  <segher@kernel.crashing.org>
+ 	    Kewen Lin  <linkw@gcc.gnu.org>
+ 
+ 	* config/rs6000/rs6000.md (*rotl<mode>3_insert_3): Renamed to...
+ 	(rotl<mode>3_insert_3): ...this.
+ 	(plus_ior_xor): New code_iterator.
+ 	(define_split for GPR rl*imi): New splitter.
+ 	* config/rs6000/vsx.md (vsx_init_v4si): Use gen_rotldi3_insert_3
+ 	for integer merging.
+ 
+ 2021-02-22  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-tuning-flags.def (cse_sve_vl_constants):
+ 	Define.
+ 	* config/aarch64/aarch64.md (add<mode>3): Force CONST_POLY_INT immediates
+ 	into a register when the above is enabled.
+ 	* config/aarch64/aarch64.c (neoversev1_tunings):
+ 	AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS.
+ 	(aarch64_rtx_costs): Use AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS.
+ 
+ 2021-02-22  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	* config/cris/cris.c (cris_print_operand) <'T'>: Change
+ 	valid operand from is now an addi mult-value to shift-value.
+ 	* config/cris/cris.md (*addi): Change expression of scaled
+ 	operand from mult to ashift.
+ 	* config/cris/cris.md (*addi_reload): New insn_and_split.
+ 
+ 2021-02-22  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	PR target/85074
+ 	* config/pa/pa.c (TARGET_ASM_CAN_OUTPUT_MI_THUNK): Define as
+ 	hook_bool_const_tree_hwi_hwi_const_tree_true.
+ 	(pa_asm_output_mi_thunk): Add support for nonzero vcall_offset.
+ 
+ 2021-02-22  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	PR rtl-optimization/98791
+ 	* ira-conflicts.c (process_regs_for_copy): Don't create allocno copies
+ 	for unordered modes.
+ 
+ 2021-02-22  Martin Liska  <mliska@suse.cz>
+ 
+ 	* tree-inline.c (inline_forbidden_p): Set
+ 	inline_forbidden_reason.
+ 
+ 2021-02-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.c (vect_bb_vectorization_profitable_p): Dump
+ 	costed subgraph.
+ 
+ 2021-02-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99165
+ 	* gimple-ssa-store-merging.c (pass_store_merging::process_store):
+ 	Accumulate changed to ret.
+ 
+ 2021-02-21  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	Revert:
+ 	2020-12-09  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.h (REG_ALLOC_ORDER): Remove
+ 
+ 2021-02-20  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	PR target/99134
+ 	* config/s390/vector.md (trunctf<DFP_ALL:mode>2_vr): New
+ 	pattern.
+ 	(trunctf<DFP_ALL:mode>2): Likewise.
+ 	(trunctdtf2_vr): Likewise.
+ 	(trunctdtf2): Likewise.
+ 	(extend<DFP_ALL:mode>tf2_vr): Likewise.
+ 	(extend<DFP_ALL:mode>tf2): Likewise.
+ 	(extendtftd2_vr): Likewise.
+ 	(extendtftd2): Likewise.
+ 
+ 2021-02-20  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* config/s390/vector.md (*fprx2_to_tf): Rename to fprx2_to_tf,
+ 	add memory alternative.
+ 	(tf_to_fprx2): New pattern.
+ 
+ 2021-02-19  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR c/97172
+ 	* attribs.c (init_attr_rdwr_indices): Guard vblist use.
+ 	(attr_access::free_lang_data): Remove a spurious test.
+ 
+ 2021-02-19  Nathan Sidwell  <nathan@acm.org>
+ 
+ 	* doc/invoke.texi (flang-info-module-read): Document.
+ 
+ 2021-02-19  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR translation/99167
+ 	* params.opt: Fix typo.
+ 
+ 2021-02-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/99122
+ 	* tree-inline.c (inline_forbidden_p): Do not inline functions
+ 	with VLA arguments or return value.
+ 
+ 2021-02-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/98998
+ 	* config/arm/arm.md (*stack_protect_combined_set_insn,
+ 	*stack_protect_combined_test_insn): If force_const_mem result
+ 	is not valid general operand, force its address into the destination
+ 	register first.
+ 
+ 2021-02-19  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR ipa/99034
+ 	* tree-cfg.c (gimple_merge_blocks): If bb a starts with eh landing
+ 	pad or non-local label, put FORCED_LABELs from bb b after that label
+ 	rather than before it.
+ 
+ 2021-02-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	PR target/98657
+ 	* config/aarch64/aarch64-sve.md (<ASHIFT:optab><mode>3): Use
+ 	expand_vector_broadcast' to emit the vec_duplicate operand.
+ 
+ 2021-02-18  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/96264
+ 	* lra-remat.c (reg_overlap_for_remat_p): Check also output insn
+ 	hard regs.
+ 
+ 2021-02-18  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/99113
+ 	* varasm.c (get_section): Replace SUPPORTS_SHF_GNU_RETAIN with
+ 	looking up the retain attribute.
+ 	(resolve_unique_section): Likewise.
+ 	(get_variable_section): Likewise.
+ 	(switch_to_section): Likewise.  Warn when a symbol without the
+ 	retain attribute and a symbol with the retain attribute are
+ 	placed in the section with the same name, instead of the used
+ 	attribute.
+ 	* doc/extend.texi: Document the "retain" attribute.
+ 
+ 2021-02-18  Nathan Sidwell  <nathan@acm.org>
+ 
+ 	PR c++/99023
+ 	* doc/invoke.texi (flang-info-include-translate): Document header
+ 	lookup behaviour.
+ 
+ 2021-02-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/99122
+ 	* ipa-fnsummary.c (analyze_function_body): Set
+ 	CIF_FUNCTION_NOT_INLINABLE for VLA parameter calls.
+ 	* tree-inline.c (insert_init_debug_bind): Pass NULL for
+ 	error_mark_node values.
+ 	(force_value_to_type): Do not build V_C_Es for WITH_SIZE_EXPR
+ 	values.
+ 	(setup_one_parameter): Delay force_value_to_type until when
+ 	it's needed.
+ 
+ 2021-02-18  Hans-Peter Nilsson  <hp@axis.com>
+ 
+ 	PR tree-optimization/99142
+ 	* match.pd (clz cmp 0): Gate replacement on single_use of clz result.
+ 
+ 2021-02-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* wide-int-bitmask.h (wide_int_bitmask::wide_int_bitmask (),
+ 	wide_int_bitmask::wide_int_bitmask (uint64_t),
+ 	wide_int_bitmask::wide_int_bitmask (uint64_t, uint64_t),
+ 	wide_int_bitmask::operator ~ () const,
+ 	wide_int_bitmask::operator | (wide_int_bitmask) const,
+ 	wide_int_bitmask::operator & (wide_int_bitmask) const): Use constexpr
+ 	instead of inline.
+ 	* config/i386/i386.h (PTA_3DNOW, PTA_3DNOW_A, PTA_64BIT, PTA_ABM,
+ 	PTA_AES, PTA_AVX, PTA_BMI, PTA_CX16, PTA_F16C, PTA_FMA, PTA_FMA4,
+ 	PTA_FSGSBASE, PTA_LWP, PTA_LZCNT, PTA_MMX, PTA_MOVBE, PTA_NO_SAHF,
+ 	PTA_PCLMUL, PTA_POPCNT, PTA_PREFETCH_SSE, PTA_RDRND, PTA_SSE, PTA_SSE2,
+ 	PTA_SSE3, PTA_SSE4_1, PTA_SSE4_2, PTA_SSE4A, PTA_SSSE3, PTA_TBM,
+ 	PTA_XOP, PTA_AVX2, PTA_BMI2, PTA_RTM, PTA_HLE, PTA_PRFCHW, PTA_RDSEED,
+ 	PTA_ADX, PTA_FXSR, PTA_XSAVE, PTA_XSAVEOPT, PTA_AVX512F, PTA_AVX512ER,
+ 	PTA_AVX512PF, PTA_AVX512CD, PTA_NO_TUNE, PTA_SHA, PTA_PREFETCHWT1,
+ 	PTA_CLFLUSHOPT, PTA_XSAVEC, PTA_XSAVES, PTA_AVX512DQ, PTA_AVX512BW,
+ 	PTA_AVX512VL, PTA_AVX512IFMA, PTA_AVX512VBMI, PTA_CLWB, PTA_MWAITX,
+ 	PTA_CLZERO, PTA_NO_80387, PTA_PKU, PTA_AVX5124VNNIW, PTA_AVX5124FMAPS,
+ 	PTA_AVX512VPOPCNTDQ, PTA_SGX, PTA_AVX512VNNI, PTA_GFNI, PTA_VAES,
+ 	PTA_AVX512VBMI2, PTA_VPCLMULQDQ, PTA_AVX512BITALG, PTA_RDPID,
+ 	PTA_PCONFIG, PTA_WBNOINVD, PTA_AVX512VP2INTERSECT, PTA_PTWRITE,
+ 	PTA_AVX512BF16, PTA_WAITPKG, PTA_MOVDIRI, PTA_MOVDIR64B, PTA_ENQCMD,
+ 	PTA_CLDEMOTE, PTA_SERIALIZE, PTA_TSXLDTRK, PTA_AMX_TILE, PTA_AMX_INT8,
+ 	PTA_AMX_BF16, PTA_UINTR, PTA_HRESET, PTA_KL, PTA_WIDEKL, PTA_AVXVNNI,
+ 	PTA_X86_64_BASELINE, PTA_X86_64_V2, PTA_X86_64_V3, PTA_X86_64_V4,
+ 	PTA_CORE2, PTA_NEHALEM, PTA_WESTMERE, PTA_SANDYBRIDGE, PTA_IVYBRIDGE,
+ 	PTA_HASWELL, PTA_BROADWELL, PTA_SKYLAKE, PTA_SKYLAKE_AVX512,
+ 	PTA_CASCADELAKE, PTA_COOPERLAKE, PTA_CANNONLAKE, PTA_ICELAKE_CLIENT,
+ 	PTA_ICELAKE_SERVER, PTA_TIGERLAKE, PTA_SAPPHIRERAPIDS, PTA_ALDERLAKE,
+ 	PTA_KNL, PTA_BONNELL, PTA_SILVERMONT, PTA_GOLDMONT, PTA_GOLDMONT_PLUS,
+ 	PTA_TREMONT, PTA_KNM): Use constexpr instead of const.
+ 
+ 2021-02-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/99109
+ 	* gimple-array-bounds.cc (build_zero_elt_array_type): Rename to ...
+ 	(build_printable_array_type): ... this.  Add nelts argument.  For
+ 	overaligned eltype, use TYPE_MAIN_VARIANT (eltype) instead.  If
+ 	nelts, call build_array_type_nelts.
+ 	(array_bounds_checker::check_mem_ref): Use build_printable_array_type
+ 	instead of build_zero_elt_array_type and build_array_type_nelts.
+ 
+ 2021-02-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99104
+ 	* config/i386/i386.c (distance_non_agu_define): Don't call
+ 	extract_insn_cached here.
+ 	(ix86_lea_outperforms): Save and restore recog_data around call
+ 	to distance_non_agu_define and distance_agu_use.
+ 	(ix86_ok_to_clobber_flags): Remove.
+ 	(ix86_avoid_lea_for_add): Don't call ix86_ok_to_clobber_flags.
+ 	(ix86_avoid_lea_for_addr): Likewise.  Adjust function comment.
+ 	* config/i386/i386.md (*lea<mode>): Change from define_insn_and_split
+ 	into define_insn.  Move the splitting to define_peephole2 and
+ 	check there using peep2_regno_dead_p if FLAGS_REG is dead.
+ 
+ 2021-02-17  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* gimplify.c (gimplify_scan_omp_clauses): Handle ATTACH_DETACH
+ 	for non-decls.
+ 
+ 2021-02-17  Xi Ruoyao  <xry111@mengyan1223.wang>
+ 
+ 	PR target/98491
+ 	* config/mips/mips.c (mips_symbol_insns): Do not use
+ 	MSA_SUPPORTED_MODE_P if mode is MAX_MACHINE_MODE.
+ 
+ 2021-02-16  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR inline-asm/98096
+ 	* stmt.c (resolve_operand_name_1): Take inout operands into account
+ 	for access to labels by names.
+ 	* doc/extend.texi: Describe counting operands for accessing labels.
+ 
+ 2021-02-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/38474
+ 	* tree-ssa-structalias.c (variable_info::address_taken): New.
+ 	(new_var_info): Initialize address_taken.
+ 	(process_constraint): Set address_taken.
+ 	(solve_constraints): Use the new address_taken flag rather
+ 	than is_reg_var for sorting variables.
+ 	(dump_constraint): Dump the variable number if the name
+ 	is just NULL.
+ 
+ 2021-02-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99100
+ 	* tree-vect-stmts.c (vectorizable_simd_clone_call): For num_calls != 1
+ 	multiply by 4096 and for inbranch by 8192.
+ 	* config/i386/i386.c (ix86_simd_clone_usable): For TARGET_AVX512F,
+ 	return 3, 2 or 1 for mangle letters 'b', 'c' or 'd'.
+ 
+ 2021-02-15  Maya Rashish  <coypu@sdf.org>
+ 
+ 	* config/aarch64/aarch64.c (aarch64_init_builtins):
+ 	Call SUBTARGET_INIT_BUILTINS.
+ 
+ 2021-02-15  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR rtl-optimization/98872
+ 	* init-regs.c (initialize_uninitialized_regs): Skip initialization
+ 	if CONST0_RTX is NULL.
+ 
+ 2021-02-15  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/98863
+ 	* rtl-ssa/functions.h (function_info::bb_live_out_info): Delete.
+ 	(function_info::build_info): Turn into a declaration, moving the
+ 	definition to internals.h.
+ 	(function_info::bb_walker): Declare.
+ 	(function_info::create_reg_use): Likewise.
+ 	(function_info::calculate_potential_phi_regs): Take a build_info
+ 	parameter.
+ 	(function_info::place_phis, function_info::create_ebbs): Declare.
+ 	(function_info::calculate_ebb_live_in_for_debug): Likewise.
+ 	(function_info::populate_backedge_phis): Delete.
+ 	(function_info::start_block, function_info::end_block): Declare.
+ 	(function_info::populate_phi_inputs): Delete.
+ 	(function_info::m_potential_phi_regs): Move information to build_info.
+ 	* rtl-ssa/internals.h: New file.
+ 	(function_info::bb_phi_info): New class.
+ 	(function_info::build_info): Moved from functions.h.
+ 	Add a constructor and destructor.
+ 	(function_info::build_info::ebb_use): Delete.
+ 	(function_info::build_info::ebb_def): Likewise.
+ 	(function_info::build_info::bb_live_out): Likewise.
+ 	(function_info::build_info::tmp_ebb_live_in_for_debug): New variable.
+ 	(function_info::build_info::potential_phi_regs): Likewise.
+ 	(function_info::build_info::potential_phi_regs_for_debug): Likewise.
+ 	(function_info::build_info::ebb_def_regs): Likewise.
+ 	(function_info::build_info::bb_phis): Likewise.
+ 	(function_info::build_info::bb_mem_live_out): Likewise.
+ 	(function_info::build_info::bb_to_rpo): Likewise.
+ 	(function_info::build_info::def_stack): Likewise.
+ 	(function_info::build_info::old_def_stack_limit): Likewise.
+ 	* rtl-ssa/internals.inl (function_info::build_info::record_reg_def):
+ 	Remove the regno argument.  Push the previous definition onto the
+ 	definition stack where necessary.
+ 	* rtl-ssa/accesses.cc: Include internals.h.
+ 	* rtl-ssa/changes.cc: Likewise.
+ 	* rtl-ssa/blocks.cc: Likewise.
+ 	(function_info::build_info::build_info): Define.
+ 	(function_info::build_info::~build_info): Likewise.
+ 	(function_info::bb_walker): New class.
+ 	(function_info::bb_walker::bb_walker): Define.
+ 	(function_info::add_live_out_use): Convert a logarithmic-complexity
+ 	test into a linear one.  Allow the same definition to be passed
+ 	multiple times.
+ 	(function_info::calculate_potential_phi_regs): Moved from
+ 	functions.cc.  Take a build_info parameter and store the
+ 	information there instead.
+ 	(function_info::place_phis): New function.
+ 	(function_info::add_entry_block_defs): Update call to record_reg_def.
+ 	(function_info::calculate_ebb_live_in_for_debug): New function.
+ 	(function_info::add_phi_nodes): Use bb_phis to decide which
+ 	registers need phi nodes and initialize ebb_def_regs accordingly.
+ 	Do not add degenerate phis here.
+ 	(function_info::add_artificial_accesses): Use create_reg_use.
+ 	Assert that all definitions are listed in the DF LR sets.
+ 	Update call to record_reg_def.
+ 	(function_info::record_block_live_out): Record live-out register
+ 	values in the phis of successor blocks.  Use the live-out set
+ 	when processing the last block in an EBB, instead of always
+ 	using the live-in sets of successor blocks.  AND the live sets
+ 	with the set of registers that have been defined in the EBB,
+ 	rather than with all potential phi registers.  Cope correctly
+ 	with branches back to the start of the current EBB.
+ 	(function_info::start_block): New function.
+ 	(function_info::end_block): Likewise.
+ 	(function_info::populate_phi_inputs): Likewise.
+ 	(function_info::create_ebbs): Likewise.
+ 	(function_info::process_all_blocks): Rewrite into a multi-phase
+ 	process.
+ 	* rtl-ssa/functions.cc: Include internals.h.
+ 	(function_info::calculate_potential_phi_regs): Move to blocks.cc.
+ 	(function_info::init_function_data): Remove caller.
+ 	* rtl-ssa/insns.cc: Include internals.h
+ 	(function_info::create_reg_use): New function.  Lazily any
+ 	degenerate phis needed by the linear RPO view.
+ 	(function_info::record_use): Use create_reg_use.  When processing
+ 	debug uses, use potential_phi_regs and test it before checking
+ 	whether the register is live on entry to the current EBB.  Lazily
+ 	calculate ebb_live_in_for_debug.
+ 	(function_info::record_call_clobbers): Update call to record_reg_def.
+ 	(function_info::record_def): Likewise.
+ 
+ 2021-02-15  Martin Liska  <mliska@suse.cz>
+ 
+ 	* toplev.c (init_asm_output): Free output of
+ 	gen_command_line_string function.
+ 	(process_options): Likewise.
+ 
+ 2021-02-15  Martin Liska  <mliska@suse.cz>
+ 
+ 	* params.opt: Add 2 missing Param keywords.
+ 
+ 2021-02-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* df-core.c (df_worklist_dataflow_doublequeue): Use proper cast.
+ 
+ 2021-02-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/99079
+ 	* match.pd (A % (pow2pcst << N) -> A & ((pow2pcst << N) - 1)): Remove
+ 	useless tree_nop_conversion_p (type, TREE_TYPE (@3)) check.  Instead
+ 	require both type and TREE_TYPE (@1) to be integral types and either
+ 	type having smaller or equal precision, or TREE_TYPE (@1) being
+ 	unsigned type, or type being signed type.  If TREE_TYPE (@1)
+ 	doesn't have wrapping overflow, perform the subtraction of one in
+ 	unsigned type.
+ 
+ 2021-02-14  Jan Hubicka  <hubicka@ucw.cz>
+ 	    Richard Biener  <rguether@suse.de>
+ 
+ 	PR ipa/97346
+ 	* ipa-reference.c (ipa_init): Only conditinally initialize
+ 	reference_vars_to_consider.
+ 	(propagate): Conditionally deninitialize reference_vars_to_consider.
+ 	(ipa_reference_write_optimization_summary): Sanity check that
+ 	reference_vars_to_consider is not allocated.
+ 
+ 2021-02-13  Levy Hsu  <admin@levyhsu.com>
+ 
+ 	PR target/97417
+ 	* config/riscv/riscv-shorten-memrefs.c (pass_shorten_memrefs): Add
+ 	extend parameter to get_si_mem_base_reg declaration.
+ 	(get_si_mem_base_reg): Add extend parameter.  Set it.
+ 	(analyze): Pass extend arg to get_si_mem_base_reg.
+ 	(transform): Likewise.  Use it when rewriting mems.
+ 	* config/riscv/riscv.c (riscv_legitimize_move): Check for subword
+ 	loads and emit sign/zero extending load followed by subreg move.
+ 
+ 2021-02-13  Jim Wilson  <jimw@sifive.com>
+ 
+ 	PR target/97417
+ 	* config/riscv/riscv.c (riscv_compressed_lw_address_p): Drop early
+ 	exit when !reload_completed.  Only perform check for compressed reg
+ 	if reload_completed.
+ 	(riscv_rtx_costs): In MEM case, when optimizing	for size and
+ 	shorten memrefs, if not compressible, then increase cost.
+ 
+ 2021-02-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/98439
+ 	* recog.c (pass_split_before_regstack::gate): Enable even when
+ 	pass_split_before_sched2 is enabled if -fselective-scheduling2 is
+ 	on.
+ 
+ 2021-02-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/96166
+ 	* config/i386/mmx.md (*mmx_pshufd_1): Add a combine splitter for
+ 	swap of V2SImode elements in memory into DImode memory rotate by 32.
+ 
+ 2021-02-12  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* tree-pretty-print.c (print_generic_expr_to_str): Update comment.
+ 
+ 2021-02-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* rtl-ssa/accesses.cc (function_info::make_use_available): Use
+ 	m_temp_obstack rather than m_obstack to allocate the temporary use.
+ 
+ 2021-02-12  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* df-problems.c (df_lr_bb_local_compute): Treat partial definitions
+ 	as read-modify operations.
+ 
+ 2021-02-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/38474
+ 	* ipa-fnsummary.c (unmodified_parm_1): Only walk when
+ 	fbi->aa_walk_budget is bigger than zero.  Update
+ 	fbi->aa_walk_budget.
+ 	(param_change_prob): Likewise.
+ 	* ipa-prop.c (detect_type_change_from_memory_writes):
+ 	Properly account walk_aliased_vdefs.
+ 	(parm_preserved_before_stmt_p): Canonicalize updates.
+ 	(parm_ref_data_preserved_p): Likewise.
+ 	(parm_ref_data_pass_through_p): Likewise.
+ 	(determine_known_aggregate_parts): Account own alias queries.
+ 
+ 2021-02-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	* opts-common.c (decode_cmdline_option): Release werror_arg.
+ 	* opts.c (gen_producer_string): Release output of
+ 	gen_command_line_string.
+ 
+ 2021-02-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/38474
+ 	* params.opt (-param=max-store-chains-to-track=): New param.
+ 	(-param=max-stores-to-track=): Likewise.
+ 	* doc/invoke.texi (max-store-chains-to-track): Document.
+ 	(max-stores-to-track): Likewise.
+ 	* gimple-ssa-store-merging.c (pass_store_merging::m_n_chains):
+ 	New.
+ 	(pass_store_merging::m_n_stores): Likewise.
+ 	(pass_store_merging::terminate_and_process_chain): Update
+ 	m_n_stores and m_n_chains.
+ 	(pass_store_merging::process_store): Likewise.   Terminate
+ 	oldest chains if the number of stores or chains get too large.
+ 	(imm_store_chain_info::terminate_and_process_chain): Dump
+ 	chain length.
+ 
+ 2021-02-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* config/i386/winnt.c (i386_pe_seh_unwind_emit): When switching to
+ 	the cold section, emit a nop before the directive if the previous
+ 	active instruction can throw.
+ 
+ 2021-02-11  Peter Bergner  <bergner@linux.ibm.com>
+ 
+ 	PR target/99041
+ 	* config/rs6000/predicates.md (mma_assemble_input_operand): Restrict
+ 	memory addresses that are legal for quad word accesses.
+ 
+ 2021-02-11  Andrea Corallo  <andrea.corallo@arm.com>
+ 
+ 	PR target/98931
+ 	* config/arm/thumb2.md (*doloop_end_internal): Generate
+ 	alternative sequence to handle long range branches.
+ 
+ 2021-02-11  Joel Hutton  <joel.hutton@arm.com>
+ 
+ 	PR tree-optimization/98772
+ 	* optabs-tree.c (supportable_half_widening_operation): New function
+ 	to check for supportable V8QI->V8HI widening patterns.
+ 	* optabs-tree.h (supportable_half_widening_operation): New function.
+ 	* tree-vect-stmts.c (vect_create_half_widening_stmts): New function
+ 	to create promotion stmts for V8QI->V8HI widening patterns.
+ 	(vectorizable_conversion): Add case for V8QI->V8HI.
+ 
+ 2021-02-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	* sparseset.h (SPARSESET_ELT_BITS): Remove.
+ 	(SPARSESET_ELT_TYPE): Use unsigned int.
+ 	* fwprop.c: Do not include sparseset.h.
+ 
+ 2021-02-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/99035
+ 	* varasm.c (declare_weak): For -fsyntax-only, allow even
+ 	TREE_ASM_WRITTEN function decls.
+ 
+ 2021-02-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/99025
+ 	* config/i386/sse.md (fix<fixunssuffix>_truncv2sfv2di2,
+ 	<insn>v8qiv8hi2, <insn>v8qiv8si2, <insn>v4qiv4si2, <insn>v4hiv4si2,
+ 	<insn>v8qiv8di2, <insn>v4qiv4di2, <insn>v2qiv2di2, <insn>v4hiv4di2,
+ 	<insn>v2hiv2di2, <insn>v2siv2di2): Force operands[1] into REG before
+ 	calling simplify_gen_subreg on it.
+ 
+ 2021-02-10  Martin Liska  <mliska@suse.cz>
+ 
+ 	* config/nvptx/nvptx.c (nvptx_option_override): Use
+ 	flag_patchable_function_entry instead of the removed
+ 	function_entry_patch_area_size.
+ 
+ 2021-02-10  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR tree-optimization/99002
+ 	PR tree-optimization/99026
+ 	* gimple-if-to-switch.cc (if_chain::is_beneficial): Fix memory
+ 	leak when adjacent cases are merged.
+ 	* tree-switch-conversion.c (switch_decision_tree::analyze_switch_statement): Use
+ 	release_clusters.
+ 	(make_pass_lower_switch): Remove trailing whitespace.
+ 	* tree-switch-conversion.h (release_clusters): New.
+ 
+ 2021-02-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/99054
+ 	* cfgrtl.c (rtl-optimization/99054): Return an auto_vec.
+ 	(fixup_partitions): Adjust.
+ 	(rtl_verify_edges): Likewise.
+ 
+ 2021-02-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/99007
+ 	* gimplify.c (gimplify_scan_omp_clauses): For MEM_REF on reductions,
+ 	temporarily disable gimplify_ctxp->into_ssa around gimplify_expr
+ 	calls.
+ 
+ 2021-02-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/99029
+ 	* ipa-pure-const.c (propagate_malloc): Use an auto_vec<>
+ 	for callees.
+ 
+ 2021-02-10  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99024
+ 	* tree-vect-loop.c (_loop_vec_info::~_loop_vec_info): Only
+ 	clear loop->aux if it is associated with the destroyed loop_vinfo.
+ 
+ 2021-02-10  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR tree-optimization/99002
+ 	* gimple-if-to-switch.cc (find_conditions): Fix memory leak
+ 	in the function.
+ 
+ 2021-02-10  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR ipa/99003
+ 	* ipa-icf.c (sem_item::add_reference): Fix memory leak when
+ 	a reference exists.
+ 
+ 2021-02-10  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/98755
+ 	* dwarf2out.c (prune_unused_types_walk): Mark DW_TAG_variable DIEs
+ 	at class scope for DWARF5+.
+ 
+ 2021-02-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR rtl-optimization/96015
+ 	* reorg.c (skip_consecutive_labels): Minor comment tweaks.
+ 	(relax_delay_slots): When deleting a jump to the next active
+ 	instruction over a barrier, first delete the barrier if the
+ 	jump is the only way to reach the target label.
+ 
+ 2021-02-09  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	* config/aarch64/aarch64-cost-tables.h: Add entries for vect.mul.
+ 	* config/aarch64/aarch64.c (aarch64_rtx_mult_cost): Use vect.mul for
+ 	vector multiplies and vect.alu for SSRA.
+ 	* config/arm/aarch-common-protos.h (struct vector_cost_table): Define
+ 	vect.mul cost field.
+ 	* config/arm/aarch-cost-tables.h: Add entries for vect.mul.
+ 	* config/arm/arm.c: Likewise.
+ 
+ 2021-02-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98863
+ 	* tree-ssa-sccvn.h (vn_avail::next_undo): Add.
+ 	* tree-ssa-sccvn.c (last_pushed_avail): New global.
+ 	(rpo_elim::eliminate_push_avail): Chain pushed avails.
+ 	(unwind_state::avail_top): Add.
+ 	(do_unwind): Rewrite unwinding of avail entries.
+ 	(do_rpo_vn): Initialize last_pushed_avail and
+ 	avail_top of the undo state.
+ 
+ 2021-02-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/99004
+ 	* calls.c (maybe_warn_rdwr_sizes): Change s0 and s1 type from
+ 	const char * to char * and free those pointers after use.
+ 
+ 2021-02-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/99017
+ 	* tree-vect-slp.c (vect_bb_vectorization_profitable_p): Allow
+ 	zero vector cost entries.
+ 
+ 2021-02-08  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+ 
+ 	PR middle-end/98974
+ 	* tree-vect-stmts.c (vectorizable_condition): Remove shadow vec_num
+ 	parameter in vectorizable_condition.
+ 
+ 2021-02-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR lto/96591
+ 	* tree.c (walk_tree_1): Walk VECTOR_CST elements.
+ 
+ 2021-02-08  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR lto/98971
+ 	* cfgexpand.c (pass_expand::execute): Parse per-function option
+ 	flag_patchable_function_entry and use it.
+ 	* common.opt: Remove function_entry_patch_area_size and
+ 	function_entry_patch_area_start global variables.
+ 	* opts.c (parse_and_check_patch_area): New function.
+ 	(common_handle_option): Use it.
+ 	* opts.h (parse_and_check_patch_area): New function.
+ 	* toplev.c (process_options): Parse and use
+ 	function_entry_patch_area_size.
+ 
+ 2021-02-08  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* doc/extend.texi (attribute malloc): Correct typos.
+ 
+ 2021-02-05  Nathan Sidwell  <nathan@acm.org>
+ 
+ 	PR driver/98943
+ 	* gcc.c (driver::maybe_run_linker): Check for input file
+ 	accessibility if not linking.
+ 
+ 2021-02-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98855
+ 	* tree-vectorizer.h (add_stmt_cost): New overload.
+ 	* tree-vect-slp.c (li_cost_vec_cmp): New.
+ 	(vect_bb_slp_scalar_cost): Cost individual loop regions
+ 	separately.  Account for the scalar instance root stmt.
+ 
+ 2021-02-05  Tom de Vries  <tdevries@suse.de>
+ 
+ 	PR debug/98656
+ 	* tree-switch-conversion.c (jump_table_cluster::emit): Add loc
+ 	argument.
+ 	(bit_test_cluster::emit): Reuse location_t for newly created
+ 	gswitch statement.
+ 	(switch_decision_tree::try_switch_expansion): Preserve
+ 	location_t.
+ 	* tree-switch-conversion.h: Change function signatures.
+ 
+ 2021-02-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/98957
+ 	* config/i386/i386-options.c (m_NONE, m_ALL): Define.
+ 	* config/i386/x86-tune.def (X86_TUNE_BRANCH_PREDICTION_HINTS,
+ 	X86_TUNE_PROMOTE_QI_REGS): Use m_NONE instead of 0U.
+ 	(X86_TUNE_QIMODE_MATH): Use m_ALL instead of ~0U.
+ 
+ 2021-02-05  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (get_high): Define builtin.
+ 	* config/aarch64/aarch64-simd.md (aarch64_get_high<mode>): Define.
+ 	* config/aarch64/arm_neon.h (__GET_HIGH): Delete.
+ 	(vget_high_f16): Reimplement using new builtin.
+ 	(vget_high_f32): Likewise.
+ 	(vget_high_f64): Likewise.
+ 	(vget_high_p8): Likewise.
+ 	(vget_high_p16): Likewise.
+ 	(vget_high_p64): Likewise.
+ 	(vget_high_s8): Likewise.
+ 	(vget_high_s16): Likewise.
+ 	(vget_high_s32): Likewise.
+ 	(vget_high_s64): Likewise.
+ 	(vget_high_u8): Likewise.
+ 	(vget_high_u16): Likewise.
+ 	(vget_high_u32): Likewise.
+ 	(vget_high_u64): Likewise.
+ 
+ 2021-02-05  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (get_low): Define builtin.
+ 	* config/aarch64/aarch64-simd.md (aarch64_get_low<mode>): Define.
+ 	* config/aarch64/arm_neon.h (__GET_LOW): Delete.
+ 	(vget_low_f16): Reimplement using new builtin.
+ 	(vget_low_f32): Likewise.
+ 	(vget_low_f64): Likewise.
+ 	(vget_low_p8): Likewise.
+ 	(vget_low_p16): Likewise.
+ 	(vget_low_p64): Likewise.
+ 	(vget_low_s8): Likewise.
+ 	(vget_low_s16): Likewise.
+ 	(vget_low_s32): Likewise.
+ 	(vget_low_s64): Likewise.
+ 	(vget_low_u8): Likewise.
+ 	(vget_low_u16): Likewise.
+ 	(vget_low_u32): Likewise.
+ 	(vget_low_u64): Likewise.
+ 
+ 2021-02-05  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* gcc.c (print_multilib_info): Check all required argument is provided
+ 	by default arg.
+ 
+ 2021-02-05  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/98537
+ 	* config/i386/i386-expand.c (ix86_expand_sse_cmp): Don't
+ 	generate integer mask comparison for 128/256-bits vector when
+ 	op_true/op_false is NULL_RTX or CONSTM1_RTX/CONST0_RTX. Also
+ 	delete redundant !maskcmp condition.
+ 	(ix86_expand_int_vec_cmp): Ditto but no redundant deletion
+ 	here.
+ 	(ix86_expand_sse_movcc): Delete definition of maskcmp, add the
+ 	condition directly to if (maskcmp), add extra check for
+ 	cmpmode, it should be MODE_INT.
+ 	(ix86_expand_fp_vec_cmp): Pass NULL to ix86_expand_sse_cmp's
+ 	parameters op_true/op_false.
+ 	(ix86_use_mask_cmp_p): New.
+ 
+ 2021-02-05  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/98172
+ 	* config/i386/x86-tune.def (X86_TUNE_AVX256_UNALIGNED_LOAD_OPTIMAL):
+ 	Remove m_GENERIC from ~list.
+ 	(X86_TUNE_AVX256_UNALIGNED_STORE_OPTIMAL): Ditto.
+ 
+ 2021-02-04  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR c/97932
+ 	* diagnostic-show-locus.c (compatible_locations_p): Require
+ 	locations in the same macro map to be either both from the
+ 	macro definition, or both from the macro arguments.
+ 
+ 2021-02-04  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add
+ 	[su]mull_hi_lane[q] builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md
+ 	(aarch64_<su>mull_hi_lane<mode>_insn): Define.
+ 	(aarch64_<su>mull_hi_lane<mode>): Define.
+ 	(aarch64_<su>mull_hi_laneq<mode>_insn): Define.
+ 	(aarch64_<su>mull_hi_laneq<mode>): Define.
+ 	* config/aarch64/arm_neon.h (vmull_high_lane_s16): Use RTL
+ 	builtin instead of inline asm.
+ 	(vmull_high_lane_s32): Likewise.
+ 	(vmull_high_lane_u16): Likewise.
+ 	(vmull_high_lane_u32): Likewise.
+ 	(vmull_high_laneq_s16): Likewise.
+ 	(vmull_high_laneq_s32): Likewise.
+ 	(vmull_high_laneq_u16): Likewise.
+ 	(vmull_high_laneq_u32): Liekwise.
+ 
+ 2021-02-04  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mull_hi_n
+ 	builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md
+ 	(aarch64_<su>mull_hi_n<mode>_insn): Define.
+ 	(aarch64_<su>mull_hi_n<mode>): Define.
+ 	* config/aarch64/arm_neon.h (vmull_high_n_s16): Use RTL builtin
+ 	instead of inline asm.
+ 	(vmull_high_n_s32): Likewise.
+ 	(vmull_high_n_u16): Likewise.
+ 	(vmull_high_n_u32): Likewise.
+ 
+ 2021-02-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98855
+ 	* tree-vect-loop.c (vectorizable_phi): Do not cost
+ 	single-argument PHIs.
+ 	* tree-vect-slp.c (vect_bb_slp_scalar_cost): Likewise.
+ 	* tree-vect-stmts.c (vectorizable_bswap): Also perform
+ 	costing for SLP operation.
+ 
+ 2021-02-04  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/extend.texi: Mention -mprefer-vector-width in target
+ 	attributes.
+ 
+ 2021-02-03  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR tree-optimization/98937
+ 	* tree-ssa-strlen.c (strlen_dom_walker::~strlen_dom_walker): Define.
+ 	Flush pointer_query cache.
+ 
+ 2021-02-03  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config/rs6000/genfusion.pl (gen_2logical): Add missing
+ 	fixes based on patch review.
+ 	* config/rs6000/fusion.md: Regenerate file.
+ 
+ 2021-02-03  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config/rs6000/t-rs6000: Comment out auto generation of
+ 	fusion.md for now.
+ 
+ 2021-02-03  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	* config/gcn/gcn-opts.h (enum processor_type): Add PROCESSOR_GFX908.
+ 	* config/gcn/gcn.c (gcn_omp_device_kind_arch_isa): Add gfx908.
+ 	(output_file_start): Add gfx908.
+ 	* config/gcn/gcn.opt (gpu_type): Add gfx908.
+ 	* config/gcn/t-gcn-hsa (MULTILIB_OPTIONS): Add march=gfx908.
+ 	(MULTILIB_DIRNAMES): Add gfx908.
+ 	* config/gcn/mkoffload.c (EF_AMDGPU_MACH_AMDGCN_GFX908): New define.
+ 	(main): Recognize gfx908.
+ 	* config/gcn/t-omp-device: Add gfx908.
+ 
+ 2021-02-03  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add
+ 	[su]mlsl_hi_lane[q] builtin macro generators.
+ 	* config/aarch64/aarch64-simd.md
+ 	(aarch64_<su>mlsl_hi_lane<mode>_insn): Define.
+ 	(aarch64_<su>mlsl_hi_lane<mode>): Define.
+ 	(aarch64_<su>mlsl_hi_laneq<mode>_insn): Define.
+ 	(aarch64_<su>mlsl_hi_laneq<mode>): Define.
+ 	* config/aarch64/arm_neon.h (vmlsl_high_lane_s16): Use RTL
+ 	builtin instead of inline asm.
+ 	(vmlsl_high_lane_s32): Likewise.
+ 	(vmlsl_high_lane_u16): Likewise.
+ 	(vmlsl_high_lane_u32): Likewise.
+ 	(vmlsl_high_laneq_s16): Likewise.
+ 	(vmlsl_high_laneq_s32): Likewise.
+ 	(vmlsl_high_laneq_u16): Likewise.
+ 	(vmlsl_high_laneq_u32): Likewise.
+ 	(vmlal_high_laneq_u32): Likewise.
+ 
+ 2021-02-03  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add
+ 	[su]mlal_hi_lane[q] builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md
+ 	(aarch64_<su>mlal_hi_lane<mode>_insn): Define.
+ 	(aarch64_<su>mlal_hi_lane<mode>): Define.
+ 	(aarch64_<su>mlal_hi_laneq<mode>_insn): Define.
+ 	(aarch64_<su>mlal_hi_laneq<mode>): Define.
+ 	* config/aarch64/arm_neon.h (vmlal_high_lane_s16): Use RTL
+ 	builtin instead of inline asm.
+ 	(vmlal_high_lane_s32): Likewise.
+ 	(vmlal_high_lane_u16): Likewise.
+ 	(vmlal_high_lane_u32): Likewise.
+ 	(vmlal_high_laneq_s16): Likewise.
+ 	(vmlal_high_laneq_s32): Likewise.
+ 	(vmlal_high_laneq_u16): Likewise.
+ 	(vmlal_high_laneq_u32): Likewise.
+ 
+ 2021-02-03  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mlsl_hi_n
+ 	builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<su>mlsl_hi_n<mode>_insn):
+ 	Define.
+ 	(aarch64_<su>mlsl_hi_n<mode>): Define.
+ 	* config/aarch64/arm_neon.h (vmlsl_high_n_s16): Use RTL builtin
+ 	instead of inline asm.
+ 	(vmlsl_high_n_s32): Likewise.
+ 	(vmlsl_high_n_u16): Likewise.
+ 	(vmlsl_high_n_u32): Likewise.
+ 
+ 2021-02-03  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mlal_hi_n
+ 	builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<su>mlal_hi_n<mode>_insn):
+ 	Define.
+ 	(aarch64_<su>mlal_hi_n<mode>): Define.
+ 	* config/aarch64/arm_neon.h (vmlal_high_n_s16): Use RTL builtin
+ 	instead of inline asm.
+ 	(vmlal_high_n_s32): Likewise.
+ 	(vmlal_high_n_u16): Likewise.
+ 	(vmlal_high_n_u32): Likewise.
+ 
+ 2021-02-03  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add RTL builtin
+ 	generator macros.
+ 	* config/aarch64/aarch64-simd.md (*aarch64_<su>mlal_hi<mode>):
+ 	Rename to...
+ 	(aarch64_<su>mlal_hi<mode>_insn): This.
+ 	(aarch64_<su>mlal_hi<mode>): Define.
+ 	* config/aarch64/arm_neon.h (vmlal_high_s8): Use RTL builtin
+ 	instead of inline asm.
+ 	(vmlal_high_s16): Likewise.
+ 	(vmlal_high_s32): Likewise.
+ 	(vmlal_high_u8): Likewise.
+ 	(vmlal_high_u16): Likewise.
+ 	(vmlal_high_u32): Likewise.
+ 
+ 2021-02-03  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* lra-spills.c (remove_pseudos): Call lra_update_insn_recog_data()
+ 	after calling alter_subreg() on a (mem).
+ 
+ 2021-02-03  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR lto/98912
+ 	* lto-streamer-out.c (produce_lto_section): Fill up missing
+ 	padding.
+ 	* lto-streamer.h (struct lto_section): Add _padding field.
+ 
+ 2021-02-03  Richard Biener  <rguenther@suse.de>
+ 
+ 	* lto-streamer.c (lto_get_section_name): Free temporary
+ 	buffer.
+ 	* tree-loop-distribution.c
+ 	(loop_distribution::merge_dep_scc_partitions): Free edge data.
+ 
+ 2021-02-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/97487
+ 	* ifcvt.c (noce_can_force_operand): New function.
+ 	(noce_emit_move_insn): Use it.
+ 	(noce_try_sign_mask): Likewise.  Formatting fix.
+ 
+ 2021-02-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR middle-end/97971
+ 	* lra-constraints.c (process_alt_operands): For inline asm, don't call
+ 	fatal_insn, but instead return false.
+ 
+ 2021-02-03  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/98287
+ 	* config/i386/mmx.md (<insn><mode>3): For shifts don't enable expander
+ 	for V1DImode.
+ 
+ 2021-02-03  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/98928
+ 	* tree-vect-loop.c (vect_analyze_loop_2): Change
+ 	STMT_VINFO_SLP_VECT_ONLY to STMT_VINFO_SLP_VECT_ONLY_PATTERN.
+ 	* tree-vect-slp-patterns.c (complex_pattern::build): Likewise.
+ 	* tree-vectorizer.h (STMT_VINFO_SLP_VECT_ONLY_PATTERN): New.
+ 	(class _stmt_vec_info): Add slp_vect_pattern_only_p.
+ 
+ 2021-02-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple-loop-interchange.cc (prepare_data_references):
+ 	Release vectors.
+ 	* gimple-loop-jam.c (tree_loop_unroll_and_jam): Likewise.
+ 	* tree-ssa-loop-im.c (hoist_memory_references): Likewise.
+ 	* tree-vect-stmts.c (vectorizable_condition): Do not
+ 	allocate vectors.
+ 	(vectorizable_comparison): Likewise.
+ 
+ 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (ursqrte): Define builtin.
+ 	* config/aarch64/aarch64-simd.md (aarch64_ursqrte<mode>): New pattern.
+ 	* config/aarch64/arm_neon.h (vrsqrte_u32): Reimplement using builtin.
+ 	(vrsqrteq_u32): Likewise.
+ 
+ 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (sqxtun2): Define builtin.
+ 	* config/aarch64/aarch64-simd.md (aarch64_sqxtun2<mode>_le): Define.
+ 	(aarch64_sqxtun2<mode>_be): Likewise.
+ 	(aarch64_sqxtun2<mode>): Likewise.
+ 	* config/aarch64/arm_neon.h (vqmovun_high_s16): Reimplement using builtin.
+ 	(vqmovun_high_s32): Likewise.
+ 	(vqmovun_high_s64): Likewise.
+ 	* config/aarch64/iterators.md (UNSPEC_SQXTUN2): Define.
+ 
+ 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (bfdot_lane, bfdot_laneq): Use
+ 	AUTO_FP flags.
+ 	(bfmlalb_lane, bfmlalt_lane, bfmlalb_lane_q, bfmlalt_lane_q): Use FP flags.
+ 
+ 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (fcmla_lane0, fcmla_lane90,
+ 	fcmla_lane180, fcmla_lane270, fcmlaq_lane0, fcmlaq_lane90, fcmlaq_lane180,
+ 	fcmlaq_lane270, scvtf, ucvtf, fcvtzs, fcvtzu, scvtfsi, scvtfdi, ucvtfsi,
+ 	ucvtfdi, fcvtzshf, fcvtzuhf, fmlal_lane_low, fmlsl_lane_low,
+ 	fmlal_laneq_low, fmlsl_laneq_low, fmlalq_lane_low, fmlslq_lane_low,
+ 	fmlalq_laneq_low, fmlslq_laneq_low, fmlal_lane_high, fmlsl_lane_high,
+ 	fmlal_laneq_high, fmlsl_laneq_high, fmlalq_lane_high, fmlslq_lane_high,
+ 	fmlalq_laneq_high, fmlslq_laneq_high): Use FP flags.
+ 
+ 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-builtins.c (FLAG_LOAD): Define.
+ 	* config/aarch64/aarch64-simd-builtins.def (ld1x2, ld2, ld3, ld4, ld2r,
+ 	ld3r, ld4r, ld1, ld1x3, ld1x4): Use LOAD flags.
+ 
+ 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (combine, zip1, zip2,
+ 	uzp1, uzp2, trn1, trn2, simd_bsl): Use AUTO_FP flags.
+ 
+ 2021-02-02  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (clrsb, clz, ctz, popcount,
+ 	vec_smult_lane_, vec_smlal_lane_, vec_smult_laneq_, vec_smlal_laneq_,
+ 	vec_umult_lane_, vec_umlal_lane_, vec_umult_laneq_, vec_umlal_laneq_,
+ 	ashl, sshl, ushl, srshl, urshl, sdot_lane, udot_lane, sdot_laneq,
+ 	udot_laneq, usdot_lane, usdot_laneq, sudot_lane, sudot_laneq, ashr,
+ 	ashr_simd, lshr, lshr_simd, srshr_n, urshr_n, ssra_n, usra_n, srsra_n,
+ 	ursra_n, sshll_n, ushll_n, sshll2_n, ushll2_n, ssri_n, usri_n, ssli_n,
+ 	ssli_n, usli_n, bswap, rbit, simd_bsl, eor3q, rax1q, xarq, bcaxq): Use
+ 	NONE builtin flags.
+ 
+ 2021-02-02  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/98848
+ 	* tree-vect-patterns.c (vect_recog_over_widening_pattern): Punt if
+ 	STMT_VINFO_DEF_TYPE (last_stmt_info) is vect_reduction_def.
+ 
+ 2021-02-02  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	PR target/98743
+ 	* expr.c: Check mode before calling store_expr.
+ 
+ 2021-02-02  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/iterators.md (supf): Remove VORNQ_S and VORNQ_U.
+ 	(VORNQ): Remove.
+ 	* config/arm/mve.md (mve_vornq_s<mode>): New entry for vorn
+ 	instruction using expression ior.
+ 	(mve_vornq_u<mode>): New expander.
+ 	(mve_vornq_f<mode>): Use ior code instead of unspec.
+ 	* config/arm/unspecs.md (VORNQ_S, VORNQ_U, VORNQ_F): Remove.
+ 
+ 2021-02-02  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* tree-nested.c (convert_nonlocal_reference_op): Move
+ 	current_function_decl restore after re-gimplification.
+ 	(convert_local_reference_op): Likewise.
+ 
+ 2021-02-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (rshrn, rshrn2):
+ 	Define builtins.
+ 	* config/aarch64/aarch64-simd.md (aarch64_rshrn<mode>_insn_le):
+ 	Define.
+ 	(aarch64_rshrn<mode>_insn_be): Likewise.
+ 	(aarch64_rshrn<mode>): Likewise.
+ 	(aarch64_rshrn2<mode>_insn_le): Likewise.
+ 	(aarch64_rshrn2<mode>_insn_be): Likewise.
+ 	(aarch64_rshrn2<mode>): Likewise.
+ 	* config/aarch64/aarch64.md (unspec): Add UNSPEC_RSHRN.
+ 	* config/aarch64/arm_neon.h (vrshrn_high_n_s16): Reimplement
+ 	using builtin.
+ 	(vrshrn_high_n_s32): Likewise.
+ 	(vrshrn_high_n_s64): Likewise.
+ 	(vrshrn_high_n_u16): Likewise.
+ 	(vrshrn_high_n_u32): Likewise.
+ 	(vrshrn_high_n_u64): Likewise.
+ 	(vrshrn_n_s16): Likewise.
+ 	(vrshrn_n_s32): Likewise.
+ 	(vrshrn_n_s64): Likewise.
+ 	(vrshrn_n_u16): Likewise.
+ 	(vrshrn_n_u32): Likewise.
+ 	(vrshrn_n_u64): Likewise.
+ 
+ 2021-02-01  Sergei Trofimovich  <siarheit@google.com>
+ 
+ 	PR tree-optimization/98499
+ 	* ipa-modref.c (analyze_ssa_name_flags): treat RVO
+ 	conservatively and assume all possible side-effects.
+ 
+ 2021-02-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (vec_unpacks_hi,
+ 	vec_unpacku_hi_): Define builtins.
+ 	* config/aarch64/arm_neon.h (vmovl_high_s8): Reimplement using
+ 	builtin.
+ 	(vmovl_high_s16): Likewise.
+ 	(vmovl_high_s32): Likewise.
+ 	(vmovl_high_u8): Likewise.
+ 	(vmovl_high_u16): Likewise.
+ 	(vmovl_high_u32): Likewise.
+ 
+ 2021-02-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (sabdl, uabdl):
+ 	Define builtins.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<sur>abdl<mode>): New
+ 	pattern.
+ 	* config/aarch64/aarch64.md (unspec): Define UNSPEC_SABDL,
+ 	UNSPEC_UABDL.
+ 	* config/aarch64/arm_neon.h (vabdl_s8): Reimplemet using
+ 	builtin.
+ 	(vabdl_s16): Likewise.
+ 	(vabdl_s32): Likewise.
+ 	(vabdl_u8): Likewise.
+ 	(vabdl_u16): Likewise.
+ 	(vabdl_u32): Likewise.
+ 	* config/aarch64/iterators.md (ABDL): New int iterator.
+ 	(sur): Handle UNSPEC_SABDL, UNSPEC_UABDL.
+ 
+ 2021-02-01  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* tree.h (BLOCK_VARS): Add comment.
+ 	(BLOCK_SUBBLOCKS): Same.
+ 	(BLOCK_SUPERCONTEXT): Same.
+ 	(BLOCK_ABSTRACT_ORIGIN): Same.
+ 	(inlined_function_outer_scope_p): Same.
+ 
+ 2021-02-01  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/97172
+ 	* attribs.c (attr_access::free_lang_data): Define new function.
+ 	* attribs.h (attr_access::free_lang_data): Declare new function.
+ 
+ 2021-02-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	* vec.h (auto_vec::auto_vec): Add memory stat parameters
+ 	and pass them on.
+ 	* bitmap.h (auto_bitmap::auto_bitmap): Likewise.
+ 
+ 2021-02-01  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_<su>mlal_n<mode>,
+ 	aarch64_<su>mlsl<mode>, aarch64_<su>mlsl_n<mode>): Flip mult operands.
+ 
+ 2021-02-01  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/98863
+ 	* config/i386/i386-features.c (convert_scalars_to_vector):
+ 	Set DF_RD_PRUNE_DEAD_DEFS.
+ 
+ 2021-01-31  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* system.h (SIZE_MAX): Define if not already defined.
+ 
+ 2021-01-30  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config/rs6000/genfusion.pl (gen_2logical): New function to
+ 	generate patterns for logical-logical fusion.
+ 	* config/rs6000/fusion.md: Regenerated patterns.
+ 	* config/rs6000/rs6000-cpus.def: Add
+ 	OPTION_MASK_P10_FUSION_2LOGICAL.
+ 	* config/rs6000/rs6000.c (rs6000_option_override_internal):
+ 	Enable logical-logical fusion for p10.
+ 	* config/rs6000/rs6000.opt: Add -mpower10-fusion-2logical.
+ 
+ 2021-01-30  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/rs6000.opt: Add periods to new AIX options.
+ 
+ 2021-01-30  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/rs6000.opt (mabi=vec-extabi): New.
+ 	(mabi=vec-default): New.
+ 	* config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Define
+ 	__EXTABI__ for AIX Vector extended ABI.
+ 	* config/rs6000/rs6000.c (rs6000_debug_reg_global): Print AIX Vector
+ 	extabi info.
+ 	(conditional_register_usage): If AIX vec_extabi enabled, vs20-vs31
+ 	are non-volatile.
+ 	* doc/invoke.texi (PowerPC mabi): Add AIX vec-extabi and vec-default.
+ 
+ 2021-01-30  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/i386/i386-features.c (remove_partial_avx_dependency): Clear
+ 	DF_DEFER_INSN_RESCAN after calling df_process_deferred_rescans.
+ 
+ 2021-01-29  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/97701
+ 	* lra-constraints.c (in_class_p): Don't narrow class only for REG
+ 	or MEM.
+ 
+ 2021-01-29  Will Schmidt  <will_schmidt@vnet.ibm.com>
+ 
+ 	* config/rs6000/rs6000-call.c (rs6000_expand_binup_builtin): Add
+ 	clauses for CODE_FOR_vsx_xvcvuxddp_scale and
+ 	CODE_FOR_vsx_xvcvsxddp_scale to the parameter checking code.
+ 
+ 2021-01-29  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/98866
+ 	* gimple-range-gori.h (gori_compute:set_range_invariant): New.
+ 	* gimple-range-gori.cc (gori_map::set_range_invariant): New.
+ 	(gori_map::m_maybe_invariant): Rename from all_outgoing.
+ 	(gori_map::gori_map): Rename all_outgoing to m_maybe_invariant.
+ 	(gori_map::is_export_p): Ditto.
+ 	(gori_map::calculate_gori): Ditto.
+ 	(gori_compute::set_range_invariant): New.
+ 	* gimple-range.cc (gimple_ranger::range_of_stmt): Set range
+ 	invariant for pointers evaluating to [1, +INF].
+ 
+ 2021-01-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/98863
+ 	* config/i386/i386-features.c (remove_partial_avx_dependency):
+ 	Do not perform DF analysis.
+ 	(pass_data_remove_partial_avx_dependency): Remove
+ 	TODO_df_finish.
+ 
+ 2021-01-29  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mull_n
+ 	builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<su>mull_n<mode>):
+ 	Define.
+ 	* config/aarch64/arm_neon.h (vmull_n_s16): Use RTL builtin
+ 	instead of inline asm.
+ 	(vmull_n_s32): Likewise.
+ 	(vmull_n_u16): Likewise.
+ 	(vmull_n_u32): Likewise.
+ 
+ 2021-01-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (sabdl2, uabdl2):
+ 	Define builtins.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<sur>abdl2<mode>_3):
+ 	Rename to...
+ 	(aarch64_<sur>abdl2<mode>): ... This.
+ 	(<sur>sadv16qi): Adjust use of above.
+ 	* config/aarch64/arm_neon.h (vabdl_high_s8): Reimplement using
+ 	builtin.
+ 	(vabdl_high_s16): Likewise.
+ 	(vabdl_high_s32): Likewise.
+ 	(vabdl_high_u8): Likewise.
+ 	(vabdl_high_u16): Likewise.
+ 	(vabdl_high_u32): Likewise.
+ 
+ 2021-01-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (sabal2): Define
+ 	builtin.
+ 	(uabal2): Likewise.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<sur>abal2<mode>): New
+ 	pattern.
+ 	* config/aarch64/aarch64.md (unspec): Add UNSPEC_SABAL2 and
+ 	UNSPEC_UABAL2.
+ 	* config/aarch64/arm_neon.h (vabal_high_s8): Reimplement using
+ 	builtin.
+ 	(vabal_high_s16): Likewise.
+ 	(vabal_high_s32): Likewise.
+ 	(vabal_high_u8): Likewise.
+ 	(vabal_high_u16): Likewise.
+ 	(vabal_high_u32): Likewise.
+ 	* config/aarch64/iterators.md (ABAL2): New mode iterator.
+ 	(sur): Handle UNSPEC_SABAL2, UNSPEC_UABAL2.
+ 
+ 2021-01-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (sabal): Define
+ 	builtin.
+ 	(uabal): Likewise.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<sur>abal<mode>_4):
+ 	Rename to...
+ 	(aarch64_<sur>abal<mode>): ... This
+ 	(<sur>sadv16qi): Adust use of the above.
+ 	* config/aarch64/arm_neon.h (vabal_s8): Reimplement using
+ 	builtin.
+ 	(vabal_s16): Likewise.
+ 	(vabal_s32): Likewise.
+ 	(vabal_u8): Likewise.
+ 	(vabal_u16): Likewise.
+ 	(vabal_u32): Likewise.
+ 
+ 2021-01-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (saddlv, uaddlv):
+ 	Define builtins.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<su>addlv<mode>):
+ 	Define.
+ 	* config/aarch64/arm_neon.h (vaddlv_s8): Reimplement using
+ 	builtin.
+ 	(vaddlv_s16): Likewise.
+ 	(vaddlv_u8): Likewise.
+ 	(vaddlv_u16): Likewise.
+ 	(vaddlvq_s8): Likewise.
+ 	(vaddlvq_s16): Likewise.
+ 	(vaddlvq_s32): Likewise.
+ 	(vaddlvq_u8): Likewise.
+ 	(vaddlvq_u16): Likewise.
+ 	(vaddlvq_u32): Likewise.
+ 	(vaddlv_s32): Likewise.
+ 	(vaddlv_u32): Likewise.
+ 	* config/aarch64/iterators.md (VDQV_L): New mode iterator.
+ 	(unspec): Add UNSPEC_SADDLV, UNSPEC_UADDLV.
+ 	(Vwstype): New mode attribute.
+ 	(Vwsuf): Likewise.
+ 	(VWIDE_S): Likewise.
+ 	(USADDLV): New int iterator.
+ 	(su): Handle UNSPEC_SADDLV, UNSPEC_UADDLV.
+ 
+ 2021-01-29  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mlsl_lane[q]
+ 	builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (aarch64_vec_<su>mlsl_lane<Qlane>):
+ 	Define.
+ 	* config/aarch64/arm_neon.h (vmlsl_lane_s16): Use RTL builtin
+ 	instead of inline asm.
+ 	(vmlsl_lane_s32): Likewise.
+ 	(vmlsl_lane_u16): Likewise.
+ 	(vmlsl_lane_u32): Likewise.
+ 	(vmlsl_laneq_s16): Likewise.
+ 	(vmlsl_laneq_s32): Likewise.
+ 	(vmlsl_laneq_u16): Likewise.
+ 	(vmlsl_laneq_u32): Likewise.
+ 
+ 2021-01-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	* doc/invoke.texi (--param max-gcse-memory): Document unit
+ 	of size.
+ 	* gcse.c (gcse_or_cprop_is_too_expensive): Adjust.
+ 	* params.opt (--param max-gcse-memory): Adjust default and
+ 	document unit of size.
+ 
+ 2021-01-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/98863
+ 	* gcse.c (gcse_or_cprop_is_too_expensive): Use unsigned
+ 	HOST_WIDE_INT for the memory estimate.
+ 
+ 2021-01-29  Bin Cheng  <bin.cheng@linux.alibaba.com>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/97627
+ 	* tree-ssa-loop-niter.c (number_of_iterations_exit_assumptions):
+ 	Do not analyze fake edges.
+ 
+ 2021-01-29  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/98144
+ 	* df.h (df_mir_bb_info): Add con_visited member.
+ 	* df-problems.c (df_mir_alloc): Initialize con_visited,
+ 	do not fully populate IN and OUT.
+ 	(df_mir_reset): Likewise.
+ 	(df_mir_confluence_0): Set con_visited.
+ 	(df_mir_confluence_n): Properly handle implicitely
+ 	fully populated IN and OUT as designated by con_visited
+ 	and update con_visited accordingly.
+ 
+ 2021-01-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/98849
+ 	* config/arm/vec-common.md (mve_vshlq_<supf><mode>,
+ 	vashl<mode>3, vashr<mode>3, vlshr<mode>3): Add
+ 	&& !TARGET_REALLY_IWMMXT to conditions.
+ 
+ 2021-01-29  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/98331
+ 	* cfgbuild.c (find_bb_boundaries): Reset debug_insn when seeing
+ 	a BARRIER.
+ 
+ 2021-01-28  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/94775
+ 	* stor-layout.c (finalize_type_size): If we reset TYPE_USER_ALIGN in
+ 	the main variant, maybe reset it in its variants too.
+ 	* tree.c (check_base_type): Return true only if TYPE_USER_ALIGN match.
+ 	(check_aligned_type): Check if TYPE_USER_ALIGN match.
+ 
+ 2021-01-28  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	PR target/98730
+ 	* config/arm/arm.c (arm_rtx_costs_internal): Adjust cost of vector
+ 	of constant zero for comparisons.
+ 
+ 2021-01-28  Michael Meissner  <meissner@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_mangle_decl_assembler_name): Add
+ 	support for mapping built-in function names for long double
+ 	built-in functions if long double is IEEE 128-bit.
+ 
+ 2021-01-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mlsl_n
+ 	builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<su>mlsl_n<mode>):
+ 	Define.
+ 	* config/aarch64/arm_neon.h (vmlsl_n_s16): Use RTL builtin
+ 	instead of inline asm.
+ 	(vmlsl_n_s32): Likewise.
+ 	(vmlsl_n_u16): Likewise.
+ 	(vmlsl_n_u32): Likewise.
+ 
+ 2021-01-28  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mlal_n
+ 	builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<su>mlal_n<mode>):
+ 	Define.
+ 	* config/aarch64/arm_neon.h (vmlal_n_s16): Use RTL builtin
+ 	instead of inline asm.
+ 	(vmlal_n_s32): Likewise.
+ 	(vmlal_n_u16): Likewise.
+ 	(vmlal_n_u32): Likewise.
+ 
+ 2021-01-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (shrn2): Define
+ 	builtin.
+ 	* config/aarch64/aarch64-simd.md (aarch64_shrn2<mode>_insn_le):
+ 	Define.
+ 	(aarch64_shrn2<mode>_insn_be): Likewise.
+ 	(aarch64_shrn2<mode>): Likewise.
+ 	* config/aarch64/arm_neon.h (vshrn_high_n_s16): Reimlplement
+ 	using builtins.
+ 	(vshrn_high_n_s32): Likewise.
+ 	(vshrn_high_n_s64): Likewise.
+ 	(vshrn_high_n_u16): Likewise.
+ 	(vshrn_high_n_u32): Likewise.
+ 	(vshrn_high_n_u64): Likewise.
+ 
+ 2021-01-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (shrn): Define
+ 	builtin.
+ 	* config/aarch64/aarch64-simd.md (aarch64_shrn<mode>_insn_le):
+ 	Define.
+ 	(aarch64_shrn<mode>_insn_be): Likewise.
+ 	(aarch64_shrn<mode>): Likewise.
+ 	* config/aarch64/arm_neon.h (vshrn_n_s16): Reimplement using
+ 	builtins.
+ 	(vshrn_n_s32): Likewise.
+ 	(vshrn_n_s64): Likewise.
+ 	(vshrn_n_u16): Likewise.
+ 	(vshrn_n_u32): Likewise.
+ 	(vshrn_n_u64): Likewise.
+ 	* config/aarch64/iterators.md (vn_mode): New mode attribute.
+ 
+ 2021-01-28  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR rtl-optimization/80960
+ 	* dse.c (check_mem_read_rtx): Call get_addr on the
+ 	offsetted address.
+ 
+ 2021-01-28  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 	    David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	PR target/98799
+ 	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
+ 	Don't generate VIEW_CONVERT_EXPR for fcode ALTIVEC_BUILTIN_VEC_INSERT
+ 	when -m32.
+ 	* config/rs6000/rs6000-protos.h (rs6000_expand_vector_set_var):
+ 	Delete.
+ 	* config/rs6000/rs6000.c (rs6000_expand_vector_set): Remove the
+ 	wrapper call rs6000_expand_vector_set_var for cleanup.  Call
+ 	rs6000_expand_vector_set_var_p9 and rs6000_expand_vector_set_var_p8
+ 	directly.
+ 	(rs6000_expand_vector_set_var): Delete.
+ 	(rs6000_expand_vector_set_var_p9): Make static.
+ 	(rs6000_expand_vector_set_var_p8): Make static.
+ 
+ 2021-01-28  Xing GUO  <higuoxing@gmail.com>
+ 
+ 	* common/config/riscv/riscv-common.c
+ 	(riscv_subset_list::parsing_subset_version): Fix -march option parsing
+ 	when `p` extension exists.
+ 
+ 2021-01-27  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/97684
+ 	* ira.c (ira): Call ira_set_pseudo_classes before
+ 	update_equiv_regs when it is necessary.
+ 
+ 2021-01-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/98853
+ 	* config/aarch64/aarch64.md (*aarch64_bfxilsi_uxtw): Use
+ 	%w0, %w1 and %2 instead of %0, %1 and %2.
+ 
+ 2021-01-27  Aaron Sawdey  <acsawdey@linux.ibm.com>
+ 
+ 	* config/rs6000/genfusion.pl: New script to generate
+ 	define_insn_and_split patterns so combine can arrange fused
+ 	instructions next to each other.
+ 	* config/rs6000/fusion.md: New file, generated fused instruction
+ 	patterns for combine.
+ 	* config/rs6000/predicates.md (const_m1_to_1_operand): New predicate.
+ 	(non_update_memory_operand): New predicate.
+ 	* config/rs6000/rs6000-cpus.def: Add OPTION_MASK_P10_FUSION and
+ 	OPTION_MASK_P10_FUSION_LD_CMPI to ISA_3_1_MASKS_SERVER and
+ 	POWERPC_MASKS.
+ 	* config/rs6000/rs6000-protos.h (address_is_non_pfx_d_or_x): Add
+ 	prototype.
+ 	* config/rs6000/rs6000.c (rs6000_option_override_internal):
+ 	Automatically set OPTION_MASK_P10_FUSION and
+ 	OPTION_MASK_P10_FUSION_LD_CMPI if target is power10.
+ 	(rs600_opt_masks): Allow -mpower10-fusion
+ 	in function attributes.
+ 	(address_is_non_pfx_d_or_x): New function.
+ 	* config/rs6000/rs6000.h: Add MASK_P10_FUSION.
+ 	* config/rs6000/rs6000.md: Include fusion.md.
+ 	* config/rs6000/rs6000.opt: Add -mpower10-fusion
+ 	and -mpower10-fusion-ld-cmpi.
+ 	* config/rs6000/t-rs6000: Add dependencies involving fusion.md.
+ 
+ 2021-01-27  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add [su]mlal
+ 	builtin generator macros.
+ 	* config/aarch64/aarch64-simd.md (*aarch64_<su>mlal<mode>):
+ 	Rename to...
+ 	(aarch64_<su>mlal<mode>): This.
+ 	* config/aarch64/arm_neon.h (vmlal_s8): Use RTL builtin
+ 	instead of inline asm.
+ 	(vmlal_s16): Likewise.
+ 	(vmlal_s32): Likewise.
+ 	(vmlal_u8): Likewise.
+ 	(vmlal_u16): Likewise.
+ 	(vmlal_u32): Likewise.
+ 
+ 2021-01-27  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98854
+ 	* tree-vect-slp.c (vect_build_slp_tree_2): Also build
+ 	PHIs from scalars when the number of CTORs matches the
+ 	number of children.
+ 
+ 2021-01-27  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add mls_n builtin
+ 	generator macro.
+ 	* config/aarch64/aarch64-simd.md (*aarch64_mls_elt_merge<mode>):
+ 	Rename to...
+ 	(aarch64_mls_n<mode>): This.
+ 	* config/aarch64/arm_neon.h (vmls_n_s16): Use RTL builtin
+ 	instead of asm.
+ 	(vmls_n_s32): Likewise.
+ 	(vmls_n_u16): Likewise.
+ 	(vmls_n_u32): Likewise.
+ 	(vmlsq_n_s16): Likewise.
+ 	(vmlsq_n_s32): Likewise.
+ 	(vmlsq_n_u16): Likewise.
+ 	(vmlsq_n_u32): Likewise.
+ 
+ 2021-01-27  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add mls builtin
+ 	generator macro.
+ 	* config/aarch64/arm_neon.h (vmls_s8): Use RTL builtin rather
+ 	than asm.
+ 	(vmls_s16): Likewise.
+ 	(vmls_s32): Likewise.
+ 	(vmls_u8): Likewise.
+ 	(vmls_u16): Likewise.
+ 	(vmls_u32): Likewise.
+ 	(vmlsq_s8): Likewise.
+ 	(vmlsq_s16): Likewise.
+ 	(vmlsq_s32): Likewise.
+ 	(vmlsq_u8): Likewise.
+ 	(vmlsq_u16): Likewise.
+ 	(vmlsq_u32): Likewise.
+ 
+ 2021-01-27  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add mla_n builtin
+ 	generator macro.
+ 	* config/aarch64/aarch64-simd.md (*aarch64_mla_elt_merge<mode>):
+ 	Rename to...
+ 	(aarch64_mla_n<mode>): This.
+ 	* config/aarch64/arm_neon.h (vmla_n_s16): Use RTL builtin
+ 	instead of asm.
+ 	(vmla_n_s32): Likewise.
+ 	(vmla_n_u16): Likewise.
+ 	(vmla_n_u32): Likewise.
+ 	(vmlaq_n_s16): Likewise.
+ 	(vmlaq_n_s32): Likewise.
+ 	(vmlaq_n_u16): Likewise.
+ 	(vmlaq_n_u32): Likewise.
+ 
+ 2021-01-27  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/98833
+ 	* config/i386/sse.md (sse2_gt<mode>3): Drop !TARGET_XOP in condition.
+ 	(*sse2_eq<mode>3): Ditto.
+ 
+ 2021-01-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tree-pass.h (PROP_trees): Rename to ...
+ 	(PROP_gimple): ... this.
+ 	* cfgexpand.c (pass_data_expand): Replace PROP_trees with PROP_gimple.
+ 	* passes.c (execute_function_dump, execute_function_todo,
+ 	execute_one_ipa_transform_pass, execute_one_pass): Likewise.
+ 	* varpool.c (ctor_for_folding): Likewise.
+ 
+ 2021-01-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/97260
+ 	* varpool.c: Include tree-pass.h.
+ 	(ctor_for_folding): In GENERIC return DECL_INITIAL for TREE_READONLY
+ 	non-TREE_SIDE_EFFECTS automatic variables.
+ 
+ 2021-01-26  Paul Fee  <paul.f.fee@gmail.com>
+ 
+ 	* doc/cpp.texi (__cplusplus): Document value for -std=c++23
+ 	or -std=gnu++23.
+ 	* doc/invoke.texi: Document -std=c++23 and -std=gnu++23.
+ 	* dwarf2out.c (highest_c_language): Recognise C++20 and C++23.
+ 	(gen_compile_unit_die): Recognise C++23.
+ 
+ 2021-01-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR bootstrap/98839
+ 	* dwarf2asm.c (dw2_assemble_integer): Cast DWARF2_ADDR_SIZE to int
+ 	in comparison.
+ 
+ 2021-01-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/98681
+ 	* config/aarch64/aarch64.c (aarch64_mask_and_shift_for_ubfiz_p):
+ 	Use UINTVAL (shft_amnt) and UINTVAL (mask) instead of INTVAL (shft_amnt)
+ 	and INTVAL (mask).  Add && INTVAL (mask) > 0 condition.
+ 
+ 2021-01-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple-pretty-print.c (dump_binary_rhs): Handle
+ 	VEC_WIDEN_{PLUS,MINUS}_{LO,HI}_EXPR.
+ 
+ 2021-01-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/98726
+ 	* tree.h (vector_cst_int_elt): Remove.
+ 	* tree.c (vector_cst_int_elt): Use poly_wide_int for computations,
+ 	make static.
+ 
+ 2021-01-26  Andrew Stubbs  <ams@codesourcery.com>
+ 
+ 	* config/gcn/gcn.c (gcn_expand_reduc_scalar): Use move instructions
+ 	for V64DFmode min/max reductions.
+ 
+ 2021-01-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* dwarf2asm.c (dw2_assemble_integer): Handle size twice as large
+ 	as DWARF2_ADDR_SIZE if x is not a scalar int by emitting it as
+ 	two halves, one with x and the other with const0_rtx, ordered
+ 	depending on endianity.
+ 
+ 2021-01-26  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gimplify.c (gimplify_decl_expr): Skip asan marking calls for
+ 	temporaries not seen in binding block, and not about to be
+ 	added as gimple variables.
+ 
+ 2021-01-25  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR c++/98646
+ 	* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Adjust warning text.
+ 
+ 2021-01-25  Martin Liska  <mliska@suse.cz>
+ 
+ 	* value-prof.c (get_nth_most_common_value): Use %s instead
+ 	of %qs string.
+ 
+ 2021-01-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/98811
+ 	* configure.ac (HAVE_AS_GDWARF_5_DEBUG_FLAG): Only define if
+ 	readelf -wi is able to read the emitted .debug_info back.
+ 	* configure: Regenerated.
+ 
+ 2021-01-25  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR gcov-profile/98739
+ 	* common.opt: Add missing sign symbol.
+ 	* value-prof.c (get_nth_most_common_value): Restore handling
+ 	of PROFILE_REPRODUCIBILITY_PARALLEL_RUNS and
+ 	PROFILE_REPRODUCIBILITY_MULTITHREADED.
+ 
+ 2021-01-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/98807
+ 	* tree.c (vector_element_bits): Always use precision of
+ 	the element type for boolean vectors.
+ 
+ 2021-01-25  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	* config/rtems.h (STARTFILE_SPEC): Remove qnolinkcmds.
+ 	(ENDFILE_SPEC): Evaluate qnolinkcmds.
+ 
+ 2021-01-25  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	* config/rtems.h (STARTFILE_SPEC): Remove nostdlib and
+ 	nostartfiles handling since this is already done by
+ 	LINK_COMMAND_SPEC.  Evaluate qnolinkcmds.
+ 	(ENDFILE_SPEC): Remove nostdlib and nostartfiles handling since this
+ 	is already done by LINK_COMMAND_SPEC.
+ 	(LIB_SPECS): Remove nostdlib and nodefaultlibs handling since
+ 	this is already done by LINK_COMMAND_SPEC.  Remove qnolinkcmds
+ 	evaluation.
+ 
+ 2021-01-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/98771
+ 	* fold-const-call.c (host_size_t_cst_p): Renamed to ...
+ 	(size_t_cst_p): ... this.  Check and store unsigned HOST_WIDE_INT
+ 	value rather than host size_t.
+ 	(fold_const_call): Change type of s2 from size_t to
+ 	unsigned HOST_WIDE_INT.  Use size_t_cst_p instead of
+ 	host_size_t_cst_p.  For strncmp calls, pass MIN (s2, SIZE_MAX)
+ 	instead of s2 as last argument.
+ 
+ 2021-01-25  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/arm/iterators.md (rotsplit1, rotsplit2, conj_op, fcmac1,
+ 	VCMLA_OP, VCMUL_OP): New.
+ 	* config/arm/mve.md (mve_vcmlaq<mve_rot><mode>): Support vec_dup 0.
+ 	* config/arm/neon.md (cmul<conj_op><mode>3): New.
+ 	* config/arm/unspecs.md (UNSPEC_VCMLA_CONJ, UNSPEC_VCMLA180_CONJ,
+ 	UNSPEC_VCMUL_CONJ): New.
+ 	* config/arm/vec-common.md (cmul<conj_op><mode>3, arm_vcmla<rot><mode>,
+ 	cml<fcmac1><conj_op><mode>4): New.
+ 
+ 2021-01-23  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/97301
+ 	* config/rs6000/mmintrin.h (__m64): Add __may_alias__ attribute.
+ 
+ 2021-01-22  Jonathan Wright  <jonathan.wright@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def: Add mla builtin
+ 	generator macro.
+ 	* config/aarch64/arm_neon.h (vmla_s8): Use RTL builtin rather
+ 	than asm.
+ 	(vmla_s16): Likewise.
+ 	(vmla_s32): Likewise.
+ 	(vmla_u8): Likewise.
+ 	(vmla_u16): Likewise.
+ 	(vmla_u32): Likewise.
+ 	(vmlaq_s8): Likewise.
+ 	(vmlaq_s16): Likewise.
+ 	(vmlaq_s32): Likewise.
+ 	(vmlaq_u8): Likewise.
+ 	(vmlaq_u16): Likewise.
+ 	(vmlaq_u32): Likewise.
+ 
+ 2021-01-22  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* doc/invoke.texi (GCC_EXTRA_DIAGNOSTIC_OUTPUT): Add @findex
+ 	directive.
+ 
+ 2021-01-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/98796
+ 	* dwarf2out.c (output_file_names): For -gdwarf-5, if there are no
+ 	filenames to emit, still emit the required 0 index directory and
+ 	filename entries that match DW_AT_comp_dir and DW_AT_name of the
+ 	compilation unit.
+ 
+ 2021-01-22  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/98545
+ 	* doc/invoke.texi: Update C++ ABI Version 15 description.
+ 
+ 2021-01-22  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	PR tree-optimization/98766
+ 	* tree-ssa-math-opts.c (convert_mult_to_fma): Use maybe_le when
+ 	comparing against type size with param_avoid_fma_max_bits.
+ 
+ 2021-01-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/98793
+ 	* tree.c (vector_element_bits): Key single-bit bool vector on
+ 	integer mode rather than not vector mode.
+ 
+ 2021-01-22  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	PR target/98093
+ 	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
+ 	Generate ARRAY_REF(VIEW_CONVERT_EXPR) for P8 and later
+ 	platforms.
+ 	* config/rs6000/rs6000.c (rs6000_expand_vector_set_var): Update
+ 	to call different path for P8 and P9.
+ 	(rs6000_expand_vector_set_var_p9): New function.
+ 	(rs6000_expand_vector_set_var_p8): New function.
+ 
+ 2021-01-22  Xionghu Luo  <luoxhu@linux.ibm.com>
+ 
+ 	PR target/79251
+ 	PR target/98065
+ 	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
+ 	Ajdust variable index vec_insert from address dereference to
+ 	ARRAY_REF(VIEW_CONVERT_EXPR) tree expression.
+ 	* config/rs6000/rs6000-protos.h (rs6000_expand_vector_set_var):
+ 	New declaration.
+ 	* config/rs6000/rs6000.c (rs6000_expand_vector_set_var): New function.
+ 
+ 2021-01-22  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR gcov-profile/98739
+ 	* profile.c (compute_value_histograms): Drop time profile for
+ 	-fprofile-reproducible=multithreaded.
+ 
+ 2021-01-22  Nathan Sidwell  <nathan@acm.org>
+ 
+ 	* gcc.c (process_command): Don't check OPT_SPECIAL_input_file
+ 	existence here.
+ 
+ 2021-01-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/98773
+ 	* tree-data-ref.c (initalize_matrix_A): Revert previous
+ 	change, retaining failing on HOST_WIDE_INT_MIN CHREC_RIGHT.
+ 
+ 2021-01-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/90248
+ 	* match.pd (X cmp 0.0 ? 1.0 : -1.0 -> copysign(1, +-X),
+ 	X cmp 0.0 ? -1.0 : +1.0 -> copysign(1, -+X)): Remove
+ 	simplifications.
+ 	(X * (X cmp 0.0 ? 1.0 : -1.0) -> +-abs(X),
+ 	X * (X cmp 0.0 ? -1.0 : 1.0) -> +-abs(X)): New simplifications.
+ 
+ 2021-01-22  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/98255
+ 	* tree-dfa.c (get_ref_base_and_extent): For ARRAY_REFs, sign
+ 	extend index - low_bound from sizetype's precision rather than index
+ 	precision.
+ 	(get_addr_base_and_unit_offset_1): Likewise.
+ 	* tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Likewise.
+ 	* gimple-fold.c (fold_const_aggregate_ref_1): Likewise.
+ 
+ 2021-01-22  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98786
+ 	* tree-ssa-phiopt.c (factor_out_conditional_conversion): Avoid
+ 	adding new uses of abnormals.  Verify we deal with a conditional
+ 	conversion.
+ 
+ 2021-01-22  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	PR target/98636
+ 	* optc-save-gen.awk: Add arm_fp16_format to checked_options.
+ 
+ 2021-01-22  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/96891
+ 	PR target/98348
+ 	* config/i386/sse.md (VI_128_256): New mode iterator.
+ 	(*avx_cmp<mode>3_1, *avx_cmp<mode>3_2, *avx_cmp<mode>3_3,
+ 	 *avx_cmp<mode>3_4, *avx2_eq<mode>3, *avx2_pcmp<mode>3_1,
+ 	 *avx2_pcmp<mode>3_2, *avx2_gt<mode>3): New
+ 	define_insn_and_split to lower avx512 vector comparison to avx
+ 	version when dest is vector.
+ 	(*<avx512>_cmp<mode>3,*<avx512>_cmp<mode>3,*<avx512>_ucmp<mode>3):
+ 	define_insn_and_split for negating the comparison result.
+ 	* config/i386/predicates.md (float_vector_all_ones_operand):
+ 	New predicate.
+ 	* config/i386/i386-expand.c (ix86_expand_sse_movcc): Use
+ 	general NOT operator without UNSPEC_MASKOP.
+ 
+ 2021-01-21  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/98777
+ 	* lra-int.h (lra_pmode_pseudo): New extern.
+ 	* lra.c (lra_pmode_pseudo): New global.
+ 	(lra): Set it up.
+ 	* lra-eliminations.c (eliminate_regs_in_insn): Use it.
+ 
+ 2021-01-21  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* fwprop.c (fwprop_propagation::classify_result): Allow
+ 	(subreg (mem)) simplifications.
+ 
+ 2021-01-21  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_sqdml<SBINQOPS:as>l<mode>):
+ 	Split into...
+ 	(aarch64_sqdmlal<mode>): ... This...
+ 	(aarch64_sqdmlsl<mode>): ... And this.
+ 	(aarch64_sqdml<SBINQOPS:as>l_lane<mode>): Split into...
+ 	(aarch64_sqdmlal_lane<mode>): ... This...
+ 	(aarch64_sqdmlsl_lane<mode>): ... And this.
+ 	(aarch64_sqdml<SBINQOPS:as>l_laneq<mode>): Split into...
+ 	(aarch64_sqdmlsl_laneq<mode>): ... This...
+ 	(aarch64_sqdmlal_laneq<mode>):  ... And this.
+ 	(aarch64_sqdml<SBINQOPS:as>l_n<mode>): Split into...
+ 	(aarch64_sqdmlsl_n<mode>): ... This...
+ 	(aarch64_sqdmlal_n<mode>): ... And this.
+ 	(aarch64_sqdml<SBINQOPS:as>l2<mode>_internal): Split into...
+ 	(aarch64_sqdmlal2<mode>_internal): ... This...
+ 	(aarch64_sqdmlsl2<mode>_internal): ... And this.
+ 
+ 2021-01-21  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/arm_mve.h (__arm_vcmpneq_s8): Fix return type.
+ 
+ 2021-01-21  Andrea Corallo  <andrea.corallo@arm.com>
+ 
+ 	PR target/96372
+ 	* doc/sourcebuild.texi (arm_thumb2_no_arm_v8_1_lob): Document.
+ 
+ 2021-01-21  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR rtl-optimization/98694
+ 	* regcprop.c (copy_value): If SRC had been assigned a mode
+ 	narrower than the copy, we can't link DEST into the chain even
+ 	they have same hard_regno_nregs(i.e. HImode/SImode in i386
+ 	backend).
+ 
+ 2021-01-20  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_get_lane<mode>):
+ 	Convert to define_insn_and_split.  Split into simple move when moving
+ 	bottom element.
+ 
+ 2021-01-20  Segher Boessenkool  <segher@kernel.crashing.org>
+ 
+ 	* config/rs6000/rs6000.c (rs6000_emit_le_vsx_store): Change assert.
+ 	Adjust comment.  Simplify code.
+ 
+ 2021-01-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR debug/98765
+ 	* dwarf2out.c (reset_indirect_string): Also reset indirect strings
+ 	with DW_FORM_line_strp form.
+ 	(prune_unused_types_update_strings): Don't add into debug_str_hash
+ 	indirect strings with DW_FORM_line_strp form.
+ 	(adjust_name_comp_dir): New function.
+ 	(dwarf2out_finish): Call it on CU DIEs after resetting
+ 	debug_line_str_hash.
+ 
+ 2021-01-20  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/98722
+ 	* lra-eliminations.c (eliminate_regs_in_insn): Check that target
+ 	has no 3-op add insn to transform insns containing two pluses.
+ 
+ 2021-01-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	* hwint.h (add_hwi): New function.
+ 	(mul_hwi): Likewise.
+ 	* tree-data-ref.c (initialize_matrix_A): Properly translate
+ 	tree constants and avoid HOST_WIDE_INT_MIN.
+ 	(lambda_matrix_row_add): Avoid undefined integer overflow
+ 	and return true on such overflow.
+ 	(lambda_matrix_right_hermite): Handle overflow from
+ 	lambda_matrix_row_add gracefully.  Simplify previous fix.
+ 	(analyze_subscript_affine_affine): Likewise.
+ 
+ 2021-01-20  Eugene Rozenfeld  <erozen@microsoft.com>
+ 
+ 	PR tree-optimization/96674
+ 	* match.pd: New patterns: x < y || y == XXX_MIN --> x <= y - 1
+ 	x >= y && y != XXX_MIN --> x > y - 1
+ 
+ 2021-01-20  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/98535
+ 	* tree-vect-slp.c (duplicate_and_interleave): Use quick_grow_cleared.
+ 	If the high and low permutes are the same, remove the high permutes
+ 	from the working set and only continue with the low ones.
+ 
+ 2021-01-20  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/98721
+ 	* builtins.c (access_ref::inform_access): Don't assume
+ 	SSA_NAME_IDENTIFIER must be non-NULL.  Print messages about
+ 	object whenever allocfn is NULL, rather than only when DECL_P
+ 	is true.  Use %qE instead of %qD for that.  Formatting fixes.
+ 
+ 2021-01-20  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98758
+ 	* tree-data-ref.c (int_divides_p): Use lambda_int arguments.
+ 	(lambda_matrix_right_hermite): Avoid undefinedness with
+ 	signed integer abs and multiplication.
+ 	(analyze_subscript_affine_affine): Use lambda_int.
+ 
+ 2021-01-20  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR debug/98751
+ 	* dwarf2out.c (output_line_info): Rename static variable
+ 	"generation", moving it out of the function to...
+ 	(output_line_info_generation): New.
+ 	(init_sections_and_labels): Likewise, renaming the variable to...
+ 	(init_sections_and_labels_generation): New.
+ 	(dwarf2out_c_finalize): Reset the new variables.
+ 
+ 2021-01-19  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR middle-end/98664
+ 	* tree-ssa-live.c (remove_unused_scope_block_p): Keep scopes for
+ 	all functions, even if they're not declared artificial or inline.
+ 	* tree.c (tree_inlined_location): Use macro expansion location
+ 	only if scope traversal fails to expose one.
+ 
+ 2021-01-19  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/92294
+ 	* alias.c (compare_base_symbol_refs): Take an extra parameter
+ 	and add the distance between two symbols to it.  Enshrine in
+ 	comments that -1 means "either 0 or 1, but we can't tell
+ 	which at compile time".
+ 	(memrefs_conflict_p): Update call accordingly.
+ 	(rtx_equal_for_memref_p): Likewise.  Take the distance between symbols
+ 	into account.
+ 
+ 2021-01-19  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (sqshl, uqshl,
+ 	sqrshl, uqrshl, sqadd, uqadd, sqsub, uqsub, suqadd, usqadd, sqmovn,
+ 	uqmovn, sqxtn2, uqxtn2, sqabs, sqneg, sqdmlal, sqdmlsl, sqdmlal_lane,
+ 	sqdmlsl_lane, sqdmlal_laneq, sqdmlsl_laneq, sqdmlal_n, sqdmlsl_n,
+ 	sqdmlal2, sqdmlsl2, sqdmlal2_lane, sqdmlsl2_lane, sqdmlal2_laneq,
+ 	sqdmlsl2_laneq, sqdmlal2_n, sqdmlsl2_n, sqdmull, sqdmull_lane,
+ 	sqdmull_laneq, sqdmull_n, sqdmull2, sqdmull2_lane, sqdmull2_laneq,
+ 	sqdmull2_n, sqdmulh, sqrdmulh, sqdmulh_lane, sqdmulh_laneq,
+ 	sqrdmulh_lane, sqrdmulh_laneq, sqshrun_n, sqrshrun_n, sqshrn_n,
+ 	uqshrn_n, sqrshrn_n, uqrshrn_n, sqshlu_n, sqshl_n, uqshl_n, sqrdmlah,
+ 	sqrdmlsh, sqrdmlah_lane, sqrdmlsh_lane, sqrdmlah_laneq, sqrdmlsh_laneq,
+ 	sqmovun): Use NONE flags.
+ 
+ 2021-01-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/98330
+ 	* ipa-modref.c (analyze_stmt): Only record a summary for a
+ 	direct call.
+ 
+ 2021-01-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/98638
+ 	* tree-ssanames.c (fini_ssanames): Zero SSA_NAME_DEF_STMT.
+ 
+ 2021-01-19  Daniel Hellstrom  <daniel@gaisler.com>
+ 
+ 	* config/sparc/rtemself.h (TARGET_OS_CPP_BUILTINS): Add
+ 	built-in define __FIX_LEON3FT_TN0018.
+ 
+ 2021-01-19  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR ipa/97673
+ 	* tree-inline.c (tree_function_versioning): Set input_location
+ 	to UNKNOWN_LOCATION throughout the function.
+ 
+ 2021-01-19  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	PR fortran/98476
+ 	* omp-low.c (lower_omp_target): Handle nonpointer is_device_ptr.
+ 
+ 2021-01-19  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/98690
+ 	* ipa-sra.c (ssa_name_only_returned_p): New parameter fun.  Check
+ 	whether non-call exceptions allow removal of a statement.
+ 	(isra_analyze_call): Pass the appropriate function to
+ 	ssa_name_only_returned_p.
+ 
+ 2021-01-19  Geng Qi  <gengqi@linux.alibaba.com>
+ 
+ 	* config/riscv/arch-canonicalize (longext_sort): New function for
+ 	 sorting 'multi-letter'.
+ 	* config/riscv/multilib-generator: Adjusting the loop of 'alt' in
+ 	'alts'.	The 'arch' may not be the first of 'alts'.
+ 	(_expand_combination): Add underline for the 'ext' without '*'.
+ 	This is because, a single-letter extension can always be treated well
+ 	with a '_' prefix, but it cannot be separated out if it is appended
+ 	to a multi-letter.
+ 
+ 2021-01-18  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/97847
+ 	* ira.c (ira): Skip abnormal critical edge splitting.
+ 
+ 2021-01-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/98727
+ 	* tree-ssa-math-opts.c (match_arith_overflow): Fix up computation of
+ 	second .MUL_OVERFLOW operand for signed multiplication with overflow
+ 	checking if the second operand of multiplication is not constant.
+ 
+ 2021-01-18  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* doc/invoke.texi (-gdwarf): TPF defaults to version 2 and AIX
+ 	defaults to version 4.
+ 
+ 2021-01-18  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* attribs.h (fndecl_dealloc_argno): New decl.
+ 	* builtins.c (call_dealloc_argno): Split out second half of
+ 	function into...
+ 	(fndecl_dealloc_argno): New.
+ 	* doc/extend.texi (Common Function Attributes): Document the
+ 	interaction between the analyzer and the malloc attribute.
+ 	* doc/invoke.texi (Static Analyzer Options): Likewise.
+ 
+ 2021-01-17  David Edelsohn  <dje.gcc@gmail.com>
+ 
+ 	* config/rs6000/aix71.h (SUBTARGET_OVERRIDE_OPTIONS): Override
+ 	dwarf_version to 4.
+ 	* config/rs6000/aix72.h (SUBTARGET_OVERRIDE_OPTIONS): Same.
+ 
+ 2021-01-17  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR ipa/98222
+ 	* cgraph.c (clone_of_p): Check also former_clone_of as we climb
+ 	the clone tree.
+ 
+ 2021-01-17  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* common.opt (gdwarf-): Init(5).
+ 	* doc/invoke.texi (-gdwarf): Document default to 5.
+ 
+ 2021-01-16  Kwok Cheung Yeung  <kcy@codesourcery.com>
+ 
+ 	* builtin-types.def
+ 	(BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT): Rename
+ 	to...
+ 	(BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT_PTR):
+ 	...this.  Add extra argument.
+ 	* gimplify.c (omp_default_clause): Ensure that event handle is
+ 	firstprivate in a task region.
+ 	(gimplify_scan_omp_clauses): Handle OMP_CLAUSE_DETACH.
+ 	(gimplify_adjust_omp_clauses): Likewise.
+ 	* omp-builtins.def (BUILT_IN_GOMP_TASK): Change function type to
+ 	BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT_PTR.
+ 	* omp-expand.c (expand_task_call): Add GOMP_TASK_FLAG_DETACH to flags
+ 	if detach clause specified.  Add detach argument when generating
+ 	call to	GOMP_task.
+ 	* omp-low.c (scan_sharing_clauses): Setup data environment for detach
+ 	clause.
+ 	(finish_taskreg_scan): Move field for variable containing the event
+ 	handle to the front of the struct.
+ 	* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_DETACH.  Fix
+ 	ordering.
+ 	* tree-nested.c (convert_nonlocal_omp_clauses): Handle
+ 	OMP_CLAUSE_DETACH clause.
+ 	(convert_local_omp_clauses): Handle OMP_CLAUSE_DETACH clause.
+ 	* tree-pretty-print.c (dump_omp_clause): Handle OMP_CLAUSE_DETACH.
+ 	* tree.c (omp_clause_num_ops): Add entry for OMP_CLAUSE_DETACH.
+ 	Fix ordering.
+ 	(omp_clause_code_name): Add entry for OMP_CLAUSE_DETACH.  Fix
+ 	ordering.
+ 	(walk_tree_1): Handle OMP_CLAUSE_DETACH.
+ 
+ 2021-01-16  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	* config/nios2/t-rtems: Reset all MULTILIB_* variables.  Shorten
+ 	multilib directory names.  Use MULTILIB_REQUIRED instead of
+ 	MULTILIB_EXCEPTIONS.  Add -mhw-mul -mhw-mulx -mhw-div
+ 	-mcustom-fpu-cfg=fph2 multilib.
+ 
+ 2021-01-16  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	* config/nios2/nios2.c (NIOS2_FPU_CONFIG_NUM): Adjust value.
+ 	(nios2_init_fpu_configs): Provide register values for new
+ 	-mcustom-fpu-cfg=fph2 option variant.
+ 	* doc/invoke.texi (-mcustom-fpu-cfg=fph2): Document new option
+ 	variant.
+ 
+ 2021-01-16  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	* config/nios2/nios2.c (nios2_custom_check_insns): Remove
+ 	custom instruction warnings.
+ 
+ 2021-01-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/96669
+ 	* match.pd ((CST << x) & 1 -> x == 0): New simplification.
+ 
+ 2021-01-16  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/96271
+ 	* passes.def: Pass false argument to first two pass_cd_dce
+ 	instances and true to last instance.  Add comment that
+ 	last instance rewrites no longer addressed locals.
+ 	* tree-ssa-dce.c (pass_cd_dce): Add update_address_taken_p member and
+ 	initialize it.
+ 	(pass_cd_dce::set_pass_param): New method.
+ 	(pass_cd_dce::execute): Return TODO_update_address_taken from
+ 	last cd_dce instance.
+ 
+ 2021-01-15  Carl Love  <cel@us.ibm.com>
+ 
+ 	* config/rs6000/altivec.h (vec_mulh, vec_div, vec_dive, vec_mod):
+ 	New defines.
+ 	* config/rs6000/altivec.md (VIlong): Move define to file vsx.md.
+ 	* config/rs6000/rs6000-builtin.def (DIVES_V4SI, DIVES_V2DI,
+ 	DIVEU_V4SI, DIVEU_V2DI, DIVS_V4SI, DIVS_V2DI, DIVU_V4SI,
+ 	DIVU_V2DI, MODS_V2DI, MODS_V4SI, MODU_V2DI, MODU_V4SI,
+ 	MULHS_V2DI, MULHS_V4SI, MULHU_V2DI, MULHU_V4SI, MULLD_V2DI):
+ 	Add builtin define.
+ 	(MULH, DIVE, MOD):  Add new BU_P10_OVERLOAD_2 definitions.
+ 	* config/rs6000/rs6000-call.c (VSX_BUILTIN_VEC_DIV,
+ 	VSX_BUILTIN_VEC_DIVE, P10_BUILTIN_VEC_MOD, P10_BUILTIN_VEC_MULH):
+ 	New overloaded definitions.
+ 	(builtin_function_type) [P10V_BUILTIN_DIVEU_V4SI,
+ 	P10V_BUILTIN_DIVEU_V2DI, P10V_BUILTIN_DIVU_V4SI,
+ 	P10V_BUILTIN_DIVU_V2DI, P10V_BUILTIN_MODU_V2DI,
+ 	P10V_BUILTIN_MODU_V4SI, P10V_BUILTIN_MULHU_V2DI,
+ 	P10V_BUILTIN_MULHU_V4SI]: Add case
+ 	statement for builtins.
+ 	* config/rs6000/rs6000.md (bits): Add new attribute sizes V4SI, V2DI.
+ 	* config/rs6000/vsx.md (VIlong): Moved from config/rs6000/altivec.md.
+ 	(UNSPEC_VDIVES, UNSPEC_VDIVEU): New unspec definitions.
+ 	(vsx_mul_v2di): Add if TARGET_POWER10 statement.
+ 	(vsx_udiv_v2di): Add if TARGET_POWER10 statement.
+ 	(dives_<mode>, diveu_<mode>, div<mode>3, uvdiv<mode>3,
+ 	mods_<mode>, modu_<mode>, mulhs_<mode>, mulhu_<mode>, mulv2di3):
+ 	Add define_insn, mode is VIlong.
+ 	* doc/extend.texi (vec_mulh, vec_mul, vec_div, vec_dive, vec_mod):
+ 	Add builtin descriptions.
+ 
+ 2021-01-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* final.c (final_start_function_1): Reset force_source_line.
+ 
+ 2021-01-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/96669
+ 	* match.pd (((1 << A) & 1) != 0 -> A == 0,
+ 	((1 << A) & 1) == 0 -> A != 0): Generalize for 1s replaced by
+ 	possibly different power of two constants and to right shift too.
+ 
+ 2021-01-15  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/96681
+ 	* match.pd ((x < 0) ^ (y < 0) to (x ^ y) < 0): New simplification.
+ 	((x >= 0) ^ (y >= 0) to (x ^ y) < 0): Likewise.
+ 	((x < 0) ^ (y >= 0) to (x ^ y) >= 0): Likewise.
+ 	((x >= 0) ^ (y < 0) to (x ^ y) >= 0): Likewise.
+ 
+ 2021-01-15  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* opts.c (gen_command_line_string): Exclude -dumpbase-ext.
+ 
+ 2021-01-15  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (cml<fcmac1><conj_op><mode>4,
+ 	cmul<conj_op><mode>3): New.
+ 	* config/aarch64/iterators.md (UNSPEC_FCMUL,
+ 	UNSPEC_FCMUL180, UNSPEC_FCMLA_CONJ, UNSPEC_FCMLA180_CONJ,
+ 	UNSPEC_CMLA_CONJ, UNSPEC_CMLA180_CONJ, UNSPEC_CMUL, UNSPEC_CMUL180,
+ 	FCMLA_OP, FCMUL_OP, conj_op, rotsplit1, rotsplit2, fcmac1, sve_rot1,
+ 	sve_rot2, SVE2_INT_CMLA_OP, SVE2_INT_CMUL_OP, SVE2_INT_CADD_OP): New.
+ 	(rot): Add UNSPEC_FCMUL, UNSPEC_FCMUL180.
+ 	(rot_op): Renamed to conj_op.
+ 	* config/aarch64/aarch64-sve.md (cml<fcmac1><conj_op><mode>4,
+ 	cmul<conj_op><mode>3): New.
+ 	* config/aarch64/aarch64-sve2.md (cml<fcmac1><conj_op><mode>4,
+ 	cmul<conj_op><mode>3): New.
+ 
+ 2021-01-15  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR bootstrap/98696
+ 	* diagnostic.c
+ 	(selftest::test_print_parseable_fixits_bytes_vs_display_columns):
+ 	Escape the tempfile name when constructing the expected output.
+ 
+ 2021-01-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (*aarch64_<su>mlsl_hi<mode>):
+ 	Rename to...
+ 	(aarch64_<su>mlsl_hi<mode>): ... This.
+ 	(aarch64_<su>mlsl_hi<mode>): Define.
+ 	(*aarch64_<su>mlsl<mode): Rename to...
+ 	(aarch64_<su>mlsl<mode): ... This.
+ 	* config/aarch64/aarch64-simd-builtins.def (smlsl, umlsl,
+ 	smlsl_hi, umlsl_hi): Define builtins.
+ 	* config/aarch64/arm_neon.h (vmlsl_high_s8, vmlsl_high_s16,
+ 	vmlsl_high_s32, vmlsl_high_u8, vmlsl_high_u16, vmlsl_high_u32,
+ 	vmlsl_s8, vmlsl_s16, vmlsl_s32, vmlsl_u8,
+ 	vmlsl_u16, vmlsl_u32): Reimplement with builtins.
+ 
+ 2021-01-15  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386-c.c (ix86_target_macros):
+ 	Use cpp_define_formatted for __SIZEOF_FLOAT80__ definition.
+ 
+ 2021-01-15  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/88836
+ 	* config.gcc (aarch64*-*-*): Add aarch64-cc-fusion.o to extra_objs.
+ 	* Makefile.in (RTL_SSA_H): New variable.
+ 	* config/aarch64/t-aarch64 (aarch64-cc-fusion.o): New rule.
+ 	* config/aarch64/aarch64-protos.h (make_pass_cc_fusion): Declare.
+ 	* config/aarch64/aarch64-passes.def: Add pass_cc_fusion after
+ 	pass_combine.
+ 	* config/aarch64/aarch64-cc-fusion.cc: New file.
+ 
+ 2021-01-15  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* recog.h (insn_change_watermark::~insn_change_watermark): Avoid
+ 	calling cancel_changes for changes that no longer exist.
+ 
+ 2021-01-15  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* rtl-ssa/functions.h (function_info::ref_defs): Rename to...
+ 	(function_info::reg_defs): ...this.
+ 	* rtl-ssa/member-fns.inl (function_info::ref_defs): Rename to...
+ 	(function_info::reg_defs): ...this.
+ 
+ 2021-01-15  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	PR target/71233
+ 	* config/arm/arm_neon.h (vceqz_p64, vceqq_p64, vceqzq_p64): New.
+ 
+ 2021-01-15  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	Revert:
+ 	2021-01-15  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	PR target/71233
+ 	* config/arm/arm_neon.h (vceqz_p64, vceqq_p64, vceqzq_p64): New.
+ 
+ 2021-01-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/96376
+ 	* tree-vect-stmts.c (get_load_store_type): Disregard alignment
+ 	for VMAT_INVARIANT.
+ 
+ 2021-01-15  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/install.texi: Document that some tests need pytest module.
+ 	* doc/sourcebuild.texi: Likewise.
+ 
+ 2021-01-15  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	PR target/71233
+ 	* config/arm/arm_neon.h (vceqz_p64, vceqq_p64, vceqzq_p64): New.
+ 
+ 2021-01-15  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/mve.md (mve_vshrq_n_s<mode>_imm): New entry.
+ 	(mve_vshrq_n_u<mode>_imm): Likewise.
+ 	* config/arm/neon.md (vashr<mode>3, vlshr<mode>3): Move to ...
+ 	* config/arm/vec-common.md: ... here.
+ 
+ 2021-01-15  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* config/arm/mve.md (mve_vshlq_<supf><mode>): Move to
+ 	vec-commond.md.
+ 	* config/arm/neon.md (vashl<mode>3): Delete.
+ 	* config/arm/vec-common.md (mve_vshlq_<supf><mode>): New.
+ 	(vasl<mode>3): New expander.
+ 
+ 2021-01-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98685
+ 	* tree-vect-slp.c (vect_schedule_slp_node): Refactor handling
+ 	of vector extern defs.
+ 
+ 2021-01-14  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR jit/98586
+ 	* diagnostic.c (diagnostic_kind_text): Break out this array
+ 	from...
+ 	(diagnostic_build_prefix): ...here.
+ 	(fancy_abort): Detect when diagnostic_initialize has not yet been
+ 	called and fall back to a minimal implementation of printing the
+ 	ICE, rather than segfaulting in internal_error.
+ 
+ 2021-01-14  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* diagnostic.c (diagnostic_initialize): Eliminate
+ 	parseable_fixits_p in favor of initializing extra_output_kind from
+ 	GCC_EXTRA_DIAGNOSTIC_OUTPUT.
+ 	(convert_column_unit): New function, split out from...
+ 	(diagnostic_converted_column): ...this.
+ 	(print_parseable_fixits): Add "column_unit" and "tabstop" params.
+ 	Use them to call convert_column_unit on the column values.
+ 	(diagnostic_report_diagnostic): Eliminate conditional on
+ 	parseable_fixits_p in favor of a switch statement on
+ 	extra_output_kind, passing the appropriate values to the new
+ 	params of print_parseable_fixits.
+ 	(selftest::test_print_parseable_fixits_none): Update for new
+ 	params of print_parseable_fixits.
+ 	(selftest::test_print_parseable_fixits_insert): Likewise.
+ 	(selftest::test_print_parseable_fixits_remove): Likewise.
+ 	(selftest::test_print_parseable_fixits_replace): Likewise.
+ 	(selftest::test_print_parseable_fixits_bytes_vs_display_columns):
+ 	New.
+ 	(selftest::diagnostic_c_tests): Call it.
+ 	* diagnostic.h (enum diagnostics_extra_output_kind): New.
+ 	(diagnostic_context::parseable_fixits_p): Delete field in favor
+ 	of...
+ 	(diagnostic_context::extra_output_kind): ...this new field.
+ 	* doc/invoke.texi (Environment Variables): Add
+ 	GCC_EXTRA_DIAGNOSTIC_OUTPUT.
+ 	* opts.c (common_handle_option): Update handling of
+ 	OPT_fdiagnostics_parseable_fixits for change to diagnostic_context
+ 	fields.
+ 
+ 2021-01-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-slp-patterns.c (class complex_operations_pattern,
+ 	complex_operations_pattern::matches,
+ 	complex_operations_pattern::recognize,
+ 	complex_operations_pattern::build): New.
+ 	(slp_patterns): Use it.
+ 
+ 2021-01-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* internal-fn.def (COMPLEX_FMS, COMPLEX_FMS_CONJ): New.
+ 	* optabs.def (cmls_optab, cmls_conj_optab): New.
+ 	* doc/md.texi: Document them.
+ 	* tree-vect-slp-patterns.c (class complex_fms_pattern,
+ 	complex_fms_pattern::matches, complex_fms_pattern::recognize,
+ 	complex_fms_pattern::build): New.
+ 
+ 2021-01-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* internal-fn.def (COMPLEX_FMA, COMPLEX_FMA_CONJ): New.
+ 	* optabs.def (cmla_optab, cmla_conj_optab): New.
+ 	* doc/md.texi: Document them.
+ 	* tree-vect-slp-patterns.c (vect_match_call_p,
+ 	class complex_fma_pattern, vect_slp_reset_pattern,
+ 	complex_fma_pattern::matches, complex_fma_pattern::recognize,
+ 	complex_fma_pattern::build): New.
+ 
+ 2021-01-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* internal-fn.def (COMPLEX_MUL, COMPLEX_MUL_CONJ): New.
+ 	* optabs.def (cmul_optab, cmul_conj_optab): New.
+ 	* doc/md.texi: Document them.
+ 	* tree-vect-slp-patterns.c (vect_match_call_complex_mla,
+ 	vect_normalize_conj_loc, is_eq_or_top, vect_validate_multiplication,
+ 	vect_build_combine_node, class complex_mul_pattern,
+ 	complex_mul_pattern::matches, complex_mul_pattern::recognize,
+ 	complex_mul_pattern::build): New.
+ 
+ 2021-01-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-slp.c (optimize_load_redistribution_1): New.
+ 	(optimize_load_redistribution, vect_is_slp_load_node): New.
+ 	(vect_match_slp_patterns): Use it.
+ 
+ 2021-01-14  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-slp-patterns.c (complex_add_pattern::build):
+ 	Elide nodes.
+ 
+ 2021-01-14  Thomas Schwinge  <thomas@codesourcery.com>
+ 
+ 	* config/gcn/mkoffload.c (main): Create an offload image only in
+ 	64-bit configurations.
+ 
+ 2021-01-14  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/98667
+ 	* config/i386/i386-options.c (ix86_option_override_internal):
+ 	Issue an error for -fcf-protection with CF_BRANCH when compiling
+ 	for 32-bit non-TARGET_CMOV targets.
+ 
+ 2021-01-14  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/98671
+ 	* config/i386/i386-options.c (ix86_valid_target_attribute_inner_p):
+ 	Remove declaration and initialization of shadow variable "ret".
+ 	(ix86_option_override_internal): Remove delcaration of
+ 	shadow variable "i".  Redeclare shadowed variable to unsigned.
+ 	* common/config/i386/i386-common.c (pta_size): Redeclare to unsigned.
+ 	* config/i386/i386-builtins.c (get_builtin_code_for_version):
+ 	Update for redeclaration.
+ 	* config/i386/i386.h (pta_size): Ditto.
+ 
+ 2021-01-14  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98674
+ 	* tree-data-ref.c (base_supports_access_fn_components_p): New.
+ 	(initialize_data_dependence_relation): For two bases without
+ 	possible access fns resort to type size equality when determining
+ 	shape compatibility.
+ 
+ 2021-01-14  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
+ 
+ 	PR target/66791
+ 	* config/arm/arm_neon.h: Replace calls to __builtin_vcge* by
+ 	<=, >= operators in vcle and vcge intrinsics respectively.
+ 	* config/arm/arm_neon_builtins.def: Remove entry for
+ 	vcge and vcgeu.
+ 
+ 2021-01-14  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/98671
+ 	* config/i386/i386-options.c (ix86_function_specific_save):
+ 	Remove redundant assignment to opts->x_ix86_branch_cost.
+ 	* config/i386/i386.c (ix86_prefetch_sse):
+ 	Rename from x86_prefetch_sse.  Update all uses.
+ 	* config/i386/i386.h: Update for rename.
+ 	* config/i386/i386-options.h: Ditto.
+ 
+ 2021-01-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/98670
+ 	* config/i386/sse.md (*sse4_1_zero_extendv8qiv8hi2_3,
+ 	*sse4_1_zero_extendv4hiv4si2_3, *sse4_1_zero_extendv2siv2di2_3):
+ 	Use Bm instead of m for non-avx.  Add isa attribute.
+ 
+ 2021-01-14  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/96688
+ 	* match.pd (~(X >> Y) -> ~X >> Y): New simplification if
+ 	~X can be simplified.
+ 
+ 2021-01-14  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* tree-vect-stmts.c (vect_model_load_cost): Account for unused
+ 	IFN_LOAD_LANES results.
+ 
+ 2021-01-14  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_<su>xtl<mode>):
+ 	Define.
+ 	(aarch64_xtn<mode>): Likewise.
+ 	* config/aarch64/aarch64-simd-builtins.def (sxtl, uxtl, xtn):
+ 	Define
+ 	builtins.
+ 	* config/aarch64/arm_neon.h (vmovl_s8): Reimplement using
+ 	builtin.
+ 	(vmovl_s16): Likewise.
+ 	(vmovl_s32): Likewise.
+ 	(vmovl_u8): Likewise.
+ 	(vmovl_u16): Likewise.
+ 	(vmovl_u32): Likewise.
+ 	(vmovn_s16): Likewise.
+ 	(vmovn_s32): Likewise.
+ 	(vmovn_s64): Likewise.
+ 	(vmovn_u16): Likewise.
+ 	(vmovn_u32): Likewise.
+ 	(vmovn_u64): Likewise.
+ 
+ 2021-01-14  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_<su>qxtn2<mode>_le):
+ 	Define.
+ 	(aarch64_<su>qxtn2<mode>_be): Likewise.
+ 	(aarch64_<su>qxtn2<mode>): Likewise.
+ 	* config/aarch64/aarch64-simd-builtins.def (sqxtn2, uqxtn2):
+ 	Define builtins.
+ 	* config/aarch64/iterators.md (SAT_TRUNC): Define code_iterator.
+ 	(su): Handle ss_truncate and us_truncate.
+ 	* config/aarch64/arm_neon.h (vqmovn_high_s16): Reimplement using
+ 	builtin.
+ 	(vqmovn_high_s32): Likewise.
+ 	(vqmovn_high_s64): Likewise.
+ 	(vqmovn_high_u16): Likewise.
+ 	(vqmovn_high_u32): Likewise.
+ 	(vqmovn_high_u64): Likewise.
+ 
+ 2021-01-14  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_xtn2<mode>_le):
+ 	Define.
+ 	(aarch64_xtn2<mode>_be): Likewise.
+ 	(aarch64_xtn2<mode>): Likewise.
+ 	* config/aarch64/aarch64-simd-builtins.def (xtn2): Define
+ 	builtins.
+ 	* config/aarch64/arm_neon.h (vmovn_high_s16): Reimplement using
+ 	builtins.
+ 	(vmovn_high_s32): Likewise.
+ 	(vmovn_high_s64): Likewise.
+ 	(vmovn_high_u16): Likewise.
+ 	(vmovn_high_u32): Likewise.
+ 	(vmovn_high_u64): Likewise.
+ 
+ 2021-01-13  Stafford Horne  <shorne@gmail.com>
+ 
+ 	* config/or1k/or1k.h (ASM_PREFERRED_EH_DATA_FORMAT): New macro.
+ 
+ 2021-01-13  Stafford Horne  <shorne@gmail.com>
+ 
+ 	* config/or1k/linux.h (TARGET_ASM_FILE_END): Define macro.
+ 
+ 2021-01-13  Stafford Horne  <shorne@gmail.com>
+ 
+ 	* config/or1k/or1k.h (TARGET_CPU_CPP_BUILTINS): Add builtin
+ 	  define for __or1k_hard_float__.
+ 
+ 2021-01-13  Stafford Horne  <shorne@gmail.com>
+ 
+ 	* config/or1k/or1k.h (NO_PROFILE_COUNTERS): Define as 1.
+ 	(PROFILE_HOOK): Define to call _mcount.
+ 	(FUNCTION_PROFILER): Change from abort to no-op.
+ 
+ 2021-01-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/96691
+ 	* match.pd ((~X | C) ^ D -> (X | C) ^ (~D ^ C),
+ 	(~X & C) ^ D -> (X & C) ^ (D ^ C)): New simplifications if
+ 	(~D ^ C) or (D ^ C) can be simplified.
+ 
+ 2021-01-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/92645
+ 	* match.pd (BIT_FIELD_REF to conversion): Delay canonicalization
+ 	until after vector lowering.
+ 
+ 2021-01-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (fnma<mode>4): Extend from SVE_FULL_I
+ 	to SVE_I.
+ 	(@aarch64_pred_fnma<mode>, cond_fnma<mode>, *cond_fnma<mode>_2)
+ 	(*cond_fnma<mode>_4, *cond_fnma<mode>_any): Likewise.
+ 
+ 2021-01-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (fma<mode>4): Extend from SVE_FULL_I
+ 	to SVE_I.
+ 	(@aarch64_pred_fma<mode>, cond_fma<mode>, *cond_fma<mode>_2)
+ 	(*cond_fma<mode>_4, *cond_fma<mode>_any): Likewise.
+ 
+ 2021-01-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/92645
+ 	* tree-vect-slp.c (vect_build_slp_tree_1): Relax supported
+ 	BIT_FIELD_REF argument.
+ 	(vect_build_slp_tree_2): Record the desired vector type
+ 	on the external vector def.
+ 	(vectorizable_slp_permutation): Handle required punning
+ 	of existing vector defs.
+ 
+ 2021-01-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* rtl-ssa/accesses.h (def_lookup): Fix order of comparison results.
+ 
+ 2021-01-13  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/sh/sh.md (movsf_ie): Remove operands[2] test.
+ 
+ 2021-01-13  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+ 
+ 	* config.gcc [$target == *-*-gnu*]: Enable
+ 	'default_gnu_indirect_function'.
+ 
+ 2021-01-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/95905
+ 	* optabs.c (expand_vec_perm_const): Don't force v0 and v1 into
+ 	registers before calling targetm.vectorize.vec_perm_const, only after
+ 	that.
+ 	* config/i386/i386-expand.c (ix86_vectorize_vec_perm_const): Handle
+ 	two argument permutation when one operand is zero vector and only
+ 	after that force operands into registers.
+ 	* config/i386/sse.md (*avx2_zero_extendv16qiv16hi2_1): New
+ 	define_insn_and_split pattern.
+ 	(*avx512bw_zero_extendv32qiv32hi2_1): Likewise.
+ 	(*avx512f_zero_extendv16hiv16si2_1): Likewise.
+ 	(*avx2_zero_extendv8hiv8si2_1): Likewise.
+ 	(*avx512f_zero_extendv8siv8di2_1): Likewise.
+ 	(*avx2_zero_extendv4siv4di2_1): Likewise.
+ 	* config/mips/mips.c (mips_vectorize_vec_perm_const): Force operands
+ 	into registers.
+ 	* config/arm/arm.c (arm_vectorize_vec_perm_const): Likewise.
+ 	* config/sparc/sparc.c (sparc_vectorize_vec_perm_const): Likewise.
+ 	* config/ia64/ia64.c (ia64_vectorize_vec_perm_const): Likewise.
+ 	* config/aarch64/aarch64.c (aarch64_vectorize_vec_perm_const): Likewise.
+ 	* config/rs6000/rs6000.c (rs6000_vectorize_vec_perm_const): Likewise.
+ 	* config/gcn/gcn.c (gcn_vectorize_vec_perm_const): Likewise.  Use std::swap.
+ 
+ 2021-01-13  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR tree-optimization/98455
+ 	* gimple-if-to-switch.cc (condition_info::record_phi_mapping):
+ 	Record also virtual PHIs.
+ 	(pass_if_to_switch::execute): Return TODO_cleanup_cfg only
+ 	conditionally.
+ 
+ 2021-01-13  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/invoke.texi (C++ Modules): Fix typos.
+ 
+ 2021-01-13  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98640
+ 	* tree-ssa-sccvn.c (visit_nary_op): Do not try to
+ 	handle plus or minus from a truncated operand to be
+ 	sign-extended.
+ 
+ 2021-01-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/96938
+ 	* config/i386/i386.md (*btr<mode>_1, *btr<mode>_2): New
+ 	define_insn_and_split patterns.
+ 	(splitter after *btr<mode>_2): New splitter.
+ 
+ 2021-01-13  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR ipa/98652
+ 	* cgraphunit.c (analyze_functions): Remove dead code.
+ 
+ 2021-01-13  Qian Jianhua  <qianjh@cn.fujitsu.com>
+ 
+ 	* config/aarch64/aarch64-cost-tables.h (a64fx_extra_costs): New.
+ 	* config/aarch64/aarch64.c (a64fx_addrcost_table): New.
+ 	(a64fx_regmove_cost, a64fx_vector_cost): New.
+ 	(a64fx_tunings): Use the new added cost tables.
+ 
+ 2021-01-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/95905
+ 	* config/i386/predicates.md (pmovzx_parallel): New predicate.
+ 	* config/i386/sse.md (*sse4_1_zero_extendv8qiv8hi2_3): New
+ 	define_insn_and_split pattern.
+ 	(*sse4_1_zero_extendv4hiv4si2_3): Likewise.
+ 	(*sse4_1_zero_extendv2siv2di2_3): Likewise.
+ 
+ 2021-01-13  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* config/gcn/gcn.c (gcn_conditional_register_usage): Remove dead code
+ 	to fix v0 register.
+ 
+ 2021-01-13  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* config/gcn/gcn.c (gcn_md_reorg): Fix case where EXEC reg is live
+ 	on entry to a BB.
+ 
+ 2021-01-13  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* config/gcn/gcn-valu.md (recip<mode>2<exec>, recip<mode>2): Use unspec
+ 	for reciprocal-approximation instructions.
+ 	(div<mode>3): Use fused multiply-accumulate operations for reciprocal
+ 	refinement and division result.
+ 	* config/gcn/gcn.md (UNSPEC_RCP): New unspec constant.
+ 
+ 2021-01-13  Julian Brown  <julian@codesourcery.com>
+ 
+ 	* config/gcn/gcn-valu.md (subdf): Rename to...
+ 	(subdf3): This.
+ 
+ 2021-01-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	* gcov.c (source_info::debug): Fix printf format for 32-bit hosts.
+ 
+ 2021-01-12  Andrea Corallo  <andrea.corallo@arm.com>
+ 
+ 	* function-abi.h: Fix typo.
+ 
+ 2021-01-12  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	PR target/97875
+ 	PR target/97875
+ 	* config/arm/arm.h (ARM_HAVE_NEON_V8QI_LDST): New macro.
+ 	(ARM_HAVE_NEON_V16QI_LDST, ARM_HAVE_NEON_V4HI_LDST): Likewise.
+ 	(ARM_HAVE_NEON_V8HI_LDST, ARM_HAVE_NEON_V2SI_LDST): Likewise.
+ 	(ARM_HAVE_NEON_V4SI_LDST, ARM_HAVE_NEON_V4HF_LDST): Likewise.
+ 	(ARM_HAVE_NEON_V8HF_LDST, ARM_HAVE_NEON_V4BF_LDST): Likewise.
+ 	(ARM_HAVE_NEON_V8BF_LDST, ARM_HAVE_NEON_V2SF_LDST): Likewise.
+ 	(ARM_HAVE_NEON_V4SF_LDST, ARM_HAVE_NEON_DI_LDST): Likewise.
+ 	(ARM_HAVE_NEON_V2DI_LDST): Likewise.
+ 	(ARM_HAVE_V8QI_LDST, ARM_HAVE_V16QI_LDST): Likewise.
+ 	(ARM_HAVE_V4HI_LDST, ARM_HAVE_V8HI_LDST): Likewise.
+ 	(ARM_HAVE_V2SI_LDST, ARM_HAVE_V4SI_LDST, ARM_HAVE_V4HF_LDST): Likewise.
+ 	(ARM_HAVE_V8HF_LDST, ARM_HAVE_V4BF_LDST, ARM_HAVE_V8BF_LDST): Likewise.
+ 	(ARM_HAVE_V2SF_LDST, ARM_HAVE_V4SF_LDST, ARM_HAVE_DI_LDST): Likewise.
+ 	(ARM_HAVE_V2DI_LDST): Likewise.
+ 	* config/arm/mve.md (*movmisalign<mode>_mve_store): New pattern.
+ 	(*movmisalign<mode>_mve_load): New pattern.
+ 	* config/arm/neon.md (movmisalign<mode>): Move to ...
+ 	* config/arm/vec-common.md: ... here.
+ 
+ 2021-01-12  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR target/97969
+ 	* lra-eliminations.c (eliminate_regs_in_insn): Add transformation
+ 	of pattern 'plus (plus (hard reg, const), pseudo)'.
+ 
+ 2021-01-12  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98550
+ 	* tree-vect-slp.c (vect_record_max_nunits): Check whether
+ 	the group size is a multiple of the vector element count.
+ 	(vect_build_slp_tree_1): When we need to fail because
+ 	the vector type choosen causes unrolling do so lazily
+ 	without affecting matches only at the end to guide group splitting.
+ 
+ 2021-01-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR c++/97284
+ 	* optc-save-gen.awk: Compare also n_target_save vars with
+ 	strcmp.
+ 
+ 2021-01-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	* gcov.c (source_info::debug): New.
+ 	(print_usage): Add --debug (-D) option.
+ 	(process_args): Likewise.
+ 	(generate_results): Call src->debug after
+ 	accumulate_line_counts.
+ 	(read_graph_file): Properly assign id for EXIT_BLOCK.
+ 	* profile.c (branch_prob): Dump function body before it is
+ 	instrumented.
+ 
+ 2021-01-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/98629
+ 	* tree-ssa-math-opts.c (arith_overflow_check_p): Don't update use_stmt
+ 	unless returning non-zero.
+ 
+ 2021-01-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/95731
+ 	* tree-ssa-reassoc.c (optimize_range_tests_cmp_bitwise): Also optimize
+ 	x < 0 && y < 0 && z < 0 into (x | y | z) < 0 for signed x, y, z.
+ 	(optimize_range_tests): Call optimize_range_tests_cmp_bitwise
+ 	only after optimize_range_tests_var_bound.
+ 
+ 2021-01-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* configure.ac: Ensure c/Make-lang.in comes first in @all_lang_makefrags@.
+ 	* configure: Regenerated.
+ 
+ 2021-01-12  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/98612
+ 	* config/i386/i386-builtins.h (BUILTIN_DESC_SWAP_OPERANDS):
+ 	Deleted.
+ 	* config/i386/i386-expand.c (ix86_expand_sse_comi): Delete
+ 	dead code.
+ 
+ 2021-01-12  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* ssa-iterators.h (end_imm_use_stmt_traverse): Forward
+ 	declare.
+ 	(auto_end_imm_use_stmt_traverse): New struct.
+ 	(FOR_EACH_IMM_USE_STMT): Use it.
+ 	(BREAK_FROM_IMM_USE_STMT, RETURN_FROM_IMM_USE_STMT): Remove,
+ 	along with uses...
+ 	* gimple-ssa-strength-reduction.c: ... here, ...
+ 	* graphite-scop-detection.c: ... here, ...
+ 	* ipa-modref.c, ipa-pure-const.c, ipa-sra.c: ... here, ...
+ 	* tree-predcom.c, tree-ssa-ccp.c: ... here, ...
+ 	* tree-ssa-dce.c, tree-ssa-dse.c: ... here, ...
+ 	* tree-ssa-loop-ivopts.c, tree-ssa-math-opts.c: ... here, ...
+ 	* tree-ssa-phiprop.c, tree-ssa.c: ... here, ...
+ 	* tree-vect-slp.c: ... and here, ...
+ 	* doc/tree-ssa.texi: ... and the example here.
+ 
+ 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (sdiv_pow2<mode>3): Extend from
+ 	SVE_FULL_I to SVE_I.  Generate an UNSPEC_PRED_X.
+ 	(*sdiv_pow2<mode>3): New pattern.
+ 	(@cond_<sve_int_op><mode>): Extend from SVE_FULL_I to SVE_I.
+ 	Wrap the ASRD in an UNSPEC_PRED_X.
+ 	(*cond_<sve_int_op><mode>_2): Likewise.  Replace the UNSPEC_PRED_X
+ 	predicate with a constant PTRUE, if it isn't already.
+ 	(*cond_<sve_int_op><mode>_z): Replace with...
+ 	(*cond_<sve_int_op><mode>_any): ...this new pattern.
+ 
+ 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (*cond_bic<mode>_2): Extend from
+ 	SVE_FULL_I to SVE_I.
+ 	(*cond_bic<mode>_any): Likewise.
+ 
+ 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (<su>mul<mode>3_highpart)
+ 	(@aarch64_pred_<MUL_HIGHPART:optab><mode>): Extend from SVE_FULL_I
+ 	to SVE_I.
+ 
+ 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (<su>abd<mode>_3): Extend from
+ 	SVE_FULL_I to SVE_I.
+ 	(*aarch64_cond_<su>abd<mode>_2): Likewise.
+ 	(*aarch64_cond_<su>abd<mode>_any): Likewise.
+ 	(@aarch64_pred_<su>abd<mode>): Likewise.  Use UNSPEC_PRED_X
+ 	for the max and min but not for the minus.
+ 	(*aarch64_cond_<su>abd<mode>_3): New pattern.
+ 
+ 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/iterators.md (SVE_24I): New iterator.
+ 	* config/aarch64/aarch64-sve.md (*aarch64_adr<mode>_shift): Extend from
+ 	SVE_FULL_SDI to SVE_24I.  Use containers rather than elements.
+ 
+ 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (@cond_<SVE_INT_BINARY:optab><mode>)
+ 	(*cond_<SVE_INT_BINARY:optab><mode>_2): Extend from SVE_FULL_I
+ 	to SVE_I.
+ 	(*cond_<SVE_INT_BINARY:optab><mode>_3): Likewise.
+ 	(*cond_<SVE_INT_BINARY:optab><mode>_any): Likewise.
+ 	(*cond_<SVE_INT_BINARY:optab><mode>_2_const): Likewise.
+ 	(*cond_<SVE_INT_BINARY:optab><mode>_any_const): Likewise.
+ 
+ 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (<SVE_INT_BINARY_IMM:optab><mode>3)
+ 	(@aarch64_pred_<SVE_INT_BINARY_IMM:optab><mode>)
+ 	(*post_ra_<SVE_INT_BINARY_IMM:optab><mode>3): Extend from SVE_FULL_I
+ 	to SVE_I.
+ 
+ 2021-01-11  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (<ASHIFT:optab><mode>3)
+ 	(v<ASHIFT:optab><mode>3, @aarch64_pred_<optab><mode>)
+ 	(*post_ra_v<ASHIFT:optab><mode>3): Extend from SVE_FULL_I to SVE_I.
+ 
+ 2021-01-11  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR jit/98615
+ 	* symtab-clones.h (clone_info::release): Release
+ 	symtab::m_clones with ggc_delete as it's a GGC memory.
+ 
+ 2021-01-11  Matthias Klose  <doko@ubuntu.com>
+ 
+ 	* Makefile.in (LINK_PROGRESS): Show the link target.
+ 
+ 2021-01-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/91403
+ 	* tree-vect-data-refs.c (vect_analyze_group_access_1): Cap
+ 	single-element interleaving group size at 4096 elements.
+ 
+ 2021-01-11  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98526
+ 	* tree-vect-loop.c (vect_model_reduction_cost): Remove costing
+ 	of the actual reduction op for the regular case.
+ 	(vectorizable_reduction): Cost the stmts
+ 	vect_transform_reduction produces here.
+ 
+ 2021-01-11  Andreas Krebbel  <krebbel@linux.ibm.com>
+ 
+ 	* tree-ssa-forwprop.c (simplify_vector_constructor): For
+ 	big-endian, use UNPACK[_FLOAT]_HI.
+ 
+ 2021-01-11  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-slp-patterns.c (class complex_pattern,
+ 	class complex_add_pattern): Add parameters to matches.
+ 	(complex_add_pattern::build): Free memory.
+ 	(complex_add_pattern::matches): Move validation end of match.
+ 	(complex_add_pattern::recognize): Likewise.
+ 
+ 2021-01-11  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-slp-patterns.c (linear_loads_p): Fix externals.
+ 
+ 2021-01-11  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* tree-vect-slp-patterns.c (is_linear_load_p): Fix ambiguity.
+ 
+ 2021-01-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/95867
+ 	* tree-ssa-math-opts.h: New header.
+ 	* tree-ssa-math-opts.c: Include tree-ssa-math-opts.h.
+ 	(powi_as_mults): No longer static.  Use build_one_cst instead of
+ 	build_real.  Formatting fix.
+ 	* tree-ssa-reassoc.c: Include tree-ssa-math-opts.h.
+ 	(attempt_builtin_powi): Handle multiplication reassociation without
+ 	powi_fndecl using powi_as_mults.
+ 	(reassociate_bb): For integral types don't require
+ 	-funsafe-math-optimizations to call attempt_builtin_powi.
+ 
+ 2021-01-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/95852
+ 	* tree-ssa-math-opts.c (maybe_optimize_guarding_check): Change
+ 	mul_stmts parameter type to vec<gimple *> &.  Before cond_stmt
+ 	allow in the bb any of the stmts in that vector, div_stmt and
+ 	up to 3 cast stmts.
+ 	(arith_cast_equal_p): New function.
+ 	(arith_overflow_check_p): Add cast_stmt argument, handle signed
+ 	multiply overflow checks.
+ 	(match_arith_overflow): Adjust caller.  Handle signed multiply
+ 	overflow checks.
+ 
+ 2021-01-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/95852
+ 	* tree-ssa-math-opts.c (maybe_optimize_guarding_check): New function.
+ 	(uaddsub_overflow_check_p): Renamed to ...
+ 	(arith_overflow_check_p): ... this.  Handle also multiplication
+ 	with overflow check.
+ 	(match_uaddsub_overflow): Renamed to ...
+ 	(match_arith_overflow): ... this.  Add cfg_changed argument.  Handle
+ 	also multiplication with overflow check.  Adjust function comment.
+ 	(math_opts_dom_walker::after_dom_children): Adjust callers.  Call
+ 	match_arith_overflow also for MULT_EXPR.
+ 
+ 2021-01-11  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/arm_neon.h (vmovl_s8): Reimplement using
+ 	__builtin_convertvector.
+ 	(vmovl_s16): Likewise.
+ 	(vmovl_s32): Likewise.
+ 	(vmovl_u8): Likewise.
+ 	(vmovl_u16): Likewise.
+ 	(vmovl_u32): Likewise.
+ 	(vmovn_s16): Likewise.
+ 	(vmovn_s32): Likewise.
+ 	(vmovn_s64): Likewise.
+ 	(vmovn_u16): Likewise.
+ 	(vmovn_u32): Likewise.
+ 	(vmovn_u64): Likewise.
+ 
+ 2021-01-11  Martin Liska  <mliska@suse.cz>
+ 
+ 	* gimple-if-to-switch.cc (struct condition_info): Use auto_var.
+ 	(if_chain::is_beneficial): Delete clusters
+ 	(find_conditions): Make second argument of conditions_in_bbs a
+ 	pointer so that we control over it's lifetime.
+ 	(pass_if_to_switch::execute): Delete them.
+ 
+ 2021-01-11  Kewen Lin  <linkw@linux.ibm.com>
+ 
+ 	* ira.c (move_unallocated_pseudos): Check other_reg and skip if
+ 	it isn't set.
+ 
+ 2021-01-09  Maciej W. Rozycki  <macro@linux-mips.org>
+ 
+ 	* config/vax/vax.md (cc): Remove mode attribute.
+ 	(subst_<cc>, subst_f<cc>): Rename to...
+ 	(subst_<mode>, subst_f<VAXccnz:mode>): ... these respectively.
+ 	(*cbranch<VAXint:mode>4_<VAXcc:mode>): Update for `cc' removal.
+ 	(*cbranch<VAXfp:mode>4_<VAXccnz:mode>): Likewise.
+ 	(*branch_<mode>, *branch_<mode>_reversed): Likewise.
+ 
+ 2021-01-09  Maciej W. Rozycki  <macro@linux-mips.org>
+ 
+ 	* config/vax/vax.md (subst_f<cc>): Add mode to operands and
+ 	`const_double_zero'.
+ 
+ 2021-01-09  Maciej W. Rozycki  <macro@linux-mips.org>
+ 
+ 	* config/pdp11/pdp11.md (PDPfp): New mode iterator.
+ 	(fcc_cc, fcc_ccnz): Use it.  Add mode to `const_double_zero' and
+ 	operands.
+ 
+ 2021-01-09  Maciej W. Rozycki  <macro@linux-mips.org>
+ 
+ 	* genemit.c (gen_exp) <CONST_DOUBLE>: Handle `const_double_zero'
+ 	rtx.
+ 	* read-rtl.c (rtx_reader::read_rtx_code): Handle machine mode
+ 	with `const_double_zero'.
+ 	* doc/rtl.texi (Constant Expression Types): Document it.
+ 
+ 2021-01-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/98556
+ 	* tree-cfg.c (verify_gimple_assign_binary): Allow lhs of
+ 	POINTER_DIFF_EXPR to be any integral type.
+ 
+ 2021-01-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/98603
+ 	* function.c (instantiate_virtual_regs_in_insn): For asm goto
+ 	with impossible constraints, drop all SETs, CLOBBERs, drop PARALLEL
+ 	if any, set ASM_OPERANDS mode to VOIDmode and change
+ 	ASM_OPERANDS_OUTPUT_CONSTRAINT and ASM_OPERANDS_OUTPUT_IDX.
+ 
+ 2021-01-09  Alexandre Oliva  <oliva@gnu.org>
+ 
+ 	PR debug/97714
+ 	* final.c (notice_source_line): Narrow down the condition to
+ 	skip a line-0 marker.
+ 
+ 2021-01-08  Sergei Trofimovich  <siarheit@google.com>
+ 
+ 	* ipa-modref.c (merge_call_side_effects): Fix
+ 	linebreak split by reordering two print calls.
+ 
+ 2021-01-08  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* config/s390/vector.md (*tf_to_fprx2_0): Rename from
+ 	"*mov_tf_to_fprx2_0" for consistency, fix constraint.
+ 	(*tf_to_fprx2_1): Rename from "*mov_tf_to_fprx2_1" for
+ 	consistency, fix constraint.
+ 
+ 2021-01-08  Ilya Leoshkevich  <iii@linux.ibm.com>
+ 
+ 	* config/s390/s390-c.c (s390_def_or_undef_macro): Accept
+ 	callables instead of mask values.
+ 	(struct target_flag_set_p): New predicate.
+ 	(s390_cpu_cpp_builtins_internal): Define or undefine
+ 	__LONG_DOUBLE_VX__ macro.
+ 
+ 2021-01-08  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/98482
+ 	* config/i386/i386.c (x86_function_profiler): Use R10 and R11
+ 	to call mcount in large model with PIC for NO_PROFILE_COUNTERS
+ 	targets.
+ 
+ 2021-01-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-sccvn.c (pass_fre::execute): Reset the SCEV hash table.
+ 
+ 2021-01-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.c (scalar_stmts_to_slp_tree_map_t): Fix.
+ 	(vect_build_slp_tree): On cache hit release the matched
+ 	scalar stmts vector.
+ 	* tree-vect-stmts.c (vectorizable_store): Properly free
+ 	vec_oprnds before possibly gathering them again.
+ 
+ 2021-01-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98544
+ 	* tree-vect-slp.c (vect_optimize_slp): Always materialize
+ 	permutes at a permute node.
+ 
+ 2021-01-08  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/98482
+ 	* config/i386/i386.c (x86_function_profiler): Use R10 to call
+ 	mcount in large model.  Sorry for large model with PIC.
+ 
+ 2021-01-08  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/98585
+ 	* config/i386/i386.opt (ix86_cmodel, ix86_incoming_stack_boundary_arg,
+ 	ix86_pmode, ix86_preferred_stack_boundary_arg, ix86_regparm,
+ 	ix86_veclibabi_type): Remove x_ prefix, use TargetVariable instead of
+ 	TargetSave and initialize for variables with enum types.
+ 	(mfentry, mstack-protector-guard-reg=, mstack-protector-guard-offset=,
+ 	mstack-protector-guard-symbol=): Add Save.
+ 	* config/i386/i386-options.c (ix86_function_specific_save,
+ 	ix86_function_specific_restore): Don't save or restore x_ix86_cmodel,
+ 	x_ix86_incoming_stack_boundary_arg, x_ix86_pmode,
+ 	x_ix86_preferred_stack_boundary_arg, x_ix86_regparm,
+ 	x_ix86_veclibabi_type.
+ 
+ 2021-01-08  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (*cnot<mode>): Extend from
+ 	SVE_FULL_I to SVE_I.
+ 	(*cond_cnot<mode>_2, *cond_cnot<mode>_any): Likewise.
+ 
+ 2021-01-08  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (*cond_uxt<mode>_2): Extend from
+ 	SVE_FULL_I to SVE_I.
+ 	(*cond_uxt<mode>_any): Likewise.
+ 
+ 2021-01-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/iterators.md (Vwhalf): New iterator.
+ 	* config/aarch64/aarch64-simd.md (aarch64_<sur>adalp<mode>_3):
+ 	Rename to...
+ 	(aarch64_<sur>adalp<mode>): ... This.  Make more
+ 	builtin-friendly.
+ 	(<sur>sadv16qi): Adjust callsite of the above.
+ 	* config/aarch64/aarch64-simd-builtins.def (sadalp, uadalp): New
+ 	builtins.
+ 	* config/aarch64/arm_neon.h (vpadal_s8): Reimplement using
+ 	builtins.
+ 	(vpadal_s16): Likewise.
+ 	(vpadal_u8): Likewise.
+ 	(vpadal_u16): Likewise.
+ 	(vpadalq_s8): Likewise.
+ 	(vpadalq_s16): Likewise.
+ 	(vpadalq_s32): Likewise.
+ 	(vpadalq_u8): Likewise.
+ 	(vpadalq_u16): Likewise.
+ 	(vpadalq_u32): Likewise.
+ 
+ 2021-01-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aarch64_<su>abd<mode>_3):
+ 	Rename to...
+ 	(aarch64_<su>abd<mode>): ... This.
+ 	(<sur>sadv16qi): Adjust callsite of the above.
+ 	* config/aarch64/aarch64-simd-builtins.def (sabd, uabd): Define
+ 	builtins.
+ 	* config/aarch64/arm_neon.h (vabd_s8): Reimplement using
+ 	builtin.
+ 	(vabd_s16): Likewise.
+ 	(vabd_s32): Likewise.
+ 	(vabd_u8): Likewise.
+ 	(vabd_u16): Likewise.
+ 	(vabd_u32): Likewise.
+ 	(vabdq_s8): Likewise.
+ 	(vabdq_s16): Likewise.
+ 	(vabdq_s32): Likewise.
+ 	(vabdq_u8): Likewise.
+ 	(vabdq_u16): Likewise.
+ 	(vabdq_u32): Likewise.
+ 
+ 2021-01-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd-builtins.def (saba, uaba): Define
+ 	builtins.
+ 	* config/aarch64/arm_neon.h (vaba_s8): Implement using builtin.
+ 	(vaba_s16): Likewise.
+ 	(vaba_s32): Likewise.
+ 	(vaba_u8): Likewise.
+ 	(vaba_u16): Likewise.
+ 	(vaba_u32): Likewise.
+ 	(vabaq_s8): Likewise.
+ 	(vabaq_s16): Likewise.
+ 	(vabaq_s32): Likewise.
+ 	(vabaq_u8): Likewise.
+ 	(vabaq_u16): Likewise.
+ 	(vabaq_u32): Likewise.
+ 
+ 2021-01-08  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+ 
+ 	* config/aarch64/aarch64-simd.md (aba<mode>_3): Rename to...
+ 	(aarch64_<su>aba<mode>): ... This.  Handle uaba as well.
+ 	Change RTL pattern to match.
+ 
+ 2021-01-08  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* common/config/riscv/riscv-common.c (riscv_current_subset_list): New.
+ 	* config/riscv/riscv-c.c (riscv-subset.h): New.
+ 	(INCLUDE_STRING): Define.
+ 	(riscv_cpu_cpp_builtins): Add new style architecture extension
+ 	test macros.
+ 	* config/riscv/riscv-subset.h (riscv_subset_list::begin): New.
+ 	(riscv_subset_list::end): New.
+ 	(riscv_current_subset_list): New.
+ 
+ 2021-01-08  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* common/config/riscv/riscv-common.c (RISCV_DONT_CARE_VERSION):
+ 	Move to riscv-subset.h.
+ 	(struct riscv_subset_t): Ditto.
+ 	(class riscv_subset_list): Ditto.
+ 	* config/riscv/riscv-subset.h (RISCV_DONT_CARE_VERSION): Move
+ 	from riscv-common.c.
+ 	(struct riscv_subset_t): Ditto.
+ 	(class riscv_subset_list): Ditto.
+ 	* config/riscv/t-riscv ($(common_out_file)): Add file
+ 	dependency.
+ 
+ 2021-01-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/98567
+ 	* config/i386/i386.md (*bmi_blsi_<mode>_cmp, *bmi_blsi_<mode>_ccno):
+ 	New define_insn patterns.
+ 
+ 2021-01-07  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (@cond_<SVE_INT_UNARY:optab><mode>)
+ 	(*cond_<SVE_INT_UNARY:optab><mode>_2): Extend from SVE_FULL_I to SVE_I.
+ 	(*cond_<SVE_INT_UNARY:optab><mode>_any): Likewise.
+ 
+ 2021-01-07  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/98560
+ 	* internal-fn.def (IFN_VCONDU, IFN_VCONDEQ): Use type vec_cond.
+ 	* internal-fn.c (vec_cond_mask_direct): Get the data mode from
+ 	argument 1.
+ 	(vec_cond_direct): Likewise argument 2.
+ 	(vec_condu_direct, vec_condeq_direct): Delete.
+ 	(expand_vect_cond_optab_fn): Rename to...
+ 	(expand_vec_cond_optab_fn): ...this, replacing old macro.
+ 	(expand_vec_condu_optab_fn, expand_vec_condeq_optab_fn): Delete.
+ 	(expand_vect_cond_mask_optab_fn): Rename to...
+ 	(expand_vec_cond_mask_optab_fn): ...this, replacing old macro.
+ 	(direct_vec_cond_mask_optab_supported_p): Treat the optab as a
+ 	convert optab.
+ 	(direct_vec_cond_optab_supported_p): Likewise.
+ 	(direct_vec_condu_optab_supported_p): Delete.
+ 	(direct_vec_condeq_optab_supported_p): Delete.
+ 	* gimple-isel.cc: Include internal-fn.h.
+ 	(gimple_expand_vec_cond_expr): Check that IFN_VCONDEQ is supported
+ 	before using it.
+ 
+ 2021-01-07  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/98560
+ 	* gimple-isel.cc (gimple_expand_vec_cond_expr): If we fail to use
+ 	IFN_VCOND{,U,EQ}, fall back on IFN_VCOND_MASK.
+ 
+ 2021-01-07  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	* config/i386/i386.md (insn): Merge from plusminus_insn, shift_insn,
+ 	rotate_insn and optab code attributes.
+ 	Update all uses to merged code attribute.
+ 	* config/i386/sse.md: Update all uses to merged code attribute.
+ 	* config/i386/mmx.md: Update all uses to merged code attribute.
+ 
+ 2021-01-07  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/98568
+ 	* gimple-ssa-store-merging.c (bswap_view_convert): New function.
+ 	(bswap_replace): Use it.
+ 
+ 2021-01-06  Vladimir N. Makarov  <vmakarov@redhat.com>
+ 
+ 	PR rtl-optimization/97978
+ 	* lra-int.h (lra_hard_reg_split_p): New external.
+ 	* lra.c (lra_hard_reg_split_p): New global.
+ 	(lra): Set up lra_hard_reg_split_p after splitting a hard reg.
+ 	* lra-assigns.c (lra_assign): Don't check allocation correctness
+ 	after hard reg splitting.
+ 
+ 2021-01-06  Martin Sebor  <msebor@redhat.com>
+ 
+ 	PR c++/98305
+ 	* builtins.c (new_delete_mismatch_p): New overload.
+ 	(new_delete_mismatch_p (tree, tree)): Call it.
+ 
+ 2021-01-06  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* Makefile.in (T_GLIMITS_H): New.
+ 	(stmp-int-hdrs): Depend on it, use it.
+ 	* config/t-vxworks (T_GLIMITS_H): Override it.
+ 	(vxw-glimits.h): New.
+ 
+ 2021-01-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98513
+ 	* value-range.cc (intersect_ranges): Compare the upper bounds
+ 	for the expected relation.
+ 
+ 2021-01-06  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	Revert:
+ 	2020-12-28  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* doc/standards.texi (HSAIL): Remove section.
+ 
+ 2021-01-05  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+ 
+ 	* configure: Re-generate.
+ 
+ 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* doc/invoke.texi (-std=c++20): Adjust for the publication of
+ 	ISO 14882:2020 standard.
+ 	* doc/standards.texi: Likewise.
+ 
+ 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/94802
+ 	* expr.h (maybe_optimize_sub_cmp_0): Declare.
+ 	* expr.c: Include tree-pretty-print.h and flags.h.
+ 	(maybe_optimize_sub_cmp_0): New function.
+ 	(do_store_flag): Use it.
+ 	* cfgexpand.c (expand_gimple_cond): Likewise.
+ 
+ 2021-01-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* mux-utils.h (pointer_mux::m_ptr): Tweak description of contents.
+ 	* rtlanal.c (simple_regno_set): Tweak description to clarify the
+ 	RMW condition.
+ 
+ 2021-01-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98516
+ 	* tree-vect-slp.c (vect_optimize_slp): Permute the incoming
+ 	lanes when materializing on a VEC_PERM node.
+ 	(vectorizable_slp_permutation): Dump the permute properly.
+ 
+ 2021-01-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-slp.c (vect_slp_region): Move debug counter
+ 	to cover individual subgraphs.
+ 
+ 2021-01-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98428
+ 	* tree-vect-slp.c (vect_build_slp_tree_1): Properly reject
+ 	vector lane extracts for loop vectorization.
+ 
+ 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/98514
+ 	* tree-ssa-reassoc.c (bb_rank): Change type from long * to
+ 	int64_t *.
+ 	(operand_rank): Change type from hash_map<tree, long> to
+ 	hash_map<tree, int64_t>.
+ 	(phi_rank): Change return type from long to int64_t.
+ 	(loop_carried_phi): Change block_rank variable type from long to
+ 	int64_t.
+ 	(propagate_rank): Change return type, rank parameter type and
+ 	op_rank variable type from long to int64_t.
+ 	(find_operand_rank): Change return type from long to int64_t
+ 	and change slot variable type from long * to int64_t *.
+ 	(insert_operand_rank): Change rank parameter type from long to
+ 	int64_t.
+ 	(get_rank): Change return type and rank variable type from long to
+ 	int64_t.  Use PRId64 instead of ld to print the rank.
+ 	(init_reassoc): Change rank variable type from long to int64_t
+ 	and adjust correspondingly bb_rank and operand_rank initialization.
+ 
+ 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/96928
+ 	* tree-ssa-phiopt.c (xor_replacement): New function.
+ 	(tree_ssa_phiopt_worker): Call it.
+ 
+ 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/96930
+ 	* match.pd ((A / (1 << B)) -> (A >> B)): If A is extended
+ 	from narrower value which has the same type as 1 << B, perform
+ 	the right shift on the narrower value followed by extension.
+ 
+ 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/96239
+ 	* gimple-ssa-store-merging.c (maybe_optimize_vector_constructor): New
+ 	function.
+ 	(get_status_for_store_merging): Don't return BB_INVALID for blocks
+ 	with potential bswap optimizable CONSTRUCTORs.
+ 	(pass_store_merging::execute): Optimize vector CONSTRUCTORs with bswap
+ 	if possible.
+ 
+ 2021-01-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98381
+ 	* tree.c (vector_element_bits): Properly compute bool vector
+ 	element size.
+ 	* tree-vect-loop.c (vectorizable_live_operation): Properly
+ 	compute the last lane bit offset.
+ 
+ 2021-01-05  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/98522
+ 	* config/i386/sse.md (sse_cvtps2pi): Redefine as define_insn_and_split.
+ 	Clear the top 64 bytes of the input XMM register.
+ 	(sse_cvttps2pi): Ditto.
+ 
+ 2021-01-05  Uroš Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/98521
+ 	* config/i386/xopintrin.h (_mm256_cmov_si256): New.
+ 
+ 2021-01-05  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/98495
+ 	* config/i386/xmmintrin.h (_mm_extract_pi16): Cast to unsigned
+ 	short first.
+ 
+ 2021-01-05  Claudiu Zissulescu  <claziss@synopsys.com>
+ 
+ 	* config/arc/arc.md (maddsidi4_split): Use ACC_REG_FIRST.
+ 	(umaddsidi4_split): Likewise.
+ 
+ 2021-01-05  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	PR target/98461
+ 	* config/i386/sse.md (*sse2_pmovskb_zexthisi): New
+ 	define_insn_and_split for zero_extend of subreg HI of pmovskb
+ 	result.
+ 	(*sse2_pmovskb_zexthisi): Add new combine splitters for
+ 	zero_extend of not of subreg HI of pmovskb result.
+ 
+ 2021-01-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/97269
+ 	* explow.c (convert_memory_address_addr_space_1): Handle UNSPECs
+ 	nested in CONSTs.
+ 	* config/aarch64/aarch64.c (aarch64_expand_mov_immediate): Use
+ 	convert_memory_address to convert symbolic immediates to ptr_mode
+ 	before forcing them to memory.
+ 
+ 2021-01-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/97144
+ 	* recog.c (constrain_operands): Initialize matching_operand
+ 	for each alternative, rather than only doing it once.
+ 
+ 2021-01-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR rtl-optimization/98403
+ 	* rtl-ssa/changes.cc (function_info::finalize_new_accesses): Explain
+ 	why we don't remove call clobbers.
+ 	(function_info::apply_changes_to_insn): Don't attempt to add
+ 	call clobbers here.
+ 
+ 2021-01-05  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/98371
+ 	* tree-vect-loop.c (vect_reanalyze_as_main_loop): New function.
+ 	(vect_analyze_loop): If an epilogue loop appears to be cheaper
+ 	than the main loop, re-analyze it as a main loop before adopting
+ 	it as a main loop.
+ 
+ 2021-01-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	PR c++/98316
+ 	* configure.ac (NETLIBS): Determine using AX_LIB_SOCKET_NSL.
+ 	* aclocal.m4, configure: Regenerate.
+ 	* Makefile.in (NETLIBS): Define.
+ 	(BACKEND): Remove $(CODYLIB).
+ 
+ 2021-01-05  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/98334
+ 	* simplify-rtx.c (simplify_context::simplify_binary_operation_1):
+ 	Optimize (X - 1) * Y + Y to X * Y or (X + 1) * Y - Y to X * Y.
+ 
+ 2021-01-05  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+ 
+ 	* tree-inline.c (expand_call_inline): Restore input_location.
+ 	Return result from recursive call.
+ 
+ 2021-01-04  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/95401
+ 	* config/aarch64/aarch64-sve-builtins.cc
+ 	(gimple_folder::load_store_cookie): Use bits rather than bytes
+ 	for the alignment argument to IFN_MASK_LOAD and IFN_MASK_STORE.
+ 	* gimple-fold.c (gimple_fold_mask_load_store_mem_ref): Likewise.
+ 	* tree-vect-stmts.c (vectorizable_store): Likewise.
+ 	(vectorizable_load): Likewise.
+ 
+ 2021-01-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98308
+ 	* tree-vect-stmts.c (vectorizable_load): Set invariant mask
+ 	SLP vectype.
+ 
+ 2021-01-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/95771
+ 	* tree-ssa-loop-niter.c (number_of_iterations_popcount): Handle types
+ 	with precision smaller than int's precision and types with precision
+ 	twice as large as long long.  Formatting fixes.
+ 
+ 2021-01-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98464
+ 	* tree-ssa-sccvn.c (vn_valueize_for_srt): Rename from ...
+ 	(vn_valueize_wrapper): ... this.  Temporarily adjust vn_context_bb.
+ 	(process_bb): Adjust.
+ 
+ 2021-01-04  Matthew Malcomson  <matthew.malcomson@arm.com>
+ 
+ 	PR other/98437
+ 	* doc/invoke.texi (-fsanitize=address): Fix wording describing
+ 	clash with -fsanitize=hwaddress.
+ 
+ 2021-01-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98282
+ 	* tree-ssa-sccvn.c (vn_get_stmt_kind): Classify tcc_reference on
+ 	invariants as VN_NARY.
+ 
+ 2021-01-04  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	PR target/89057
+ 	* config/aarch64/aarch64-simd.md (aarch64_combine<mode>): Accept
+ 	aarch64_simd_reg_or_zero for operand 2.  Use the combinez patterns
+ 	to handle zero operands.
+ 
+ 2021-01-04  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* config/aarch64/aarch64.c (offset_6bit_signed_scaled_p): New function.
+ 	(offset_6bit_unsigned_scaled_p): Fix typo in comment.
+ 	(aarch64_sve_prefetch_operand_p): Accept MUL VLs in the range
+ 	[-32, 31].
+ 
+ 2021-01-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98393
+ 	* tree-vect-slp.c (vect_build_slp_tree): Properly zero matches
+ 	when hitting the limit.
+ 
+ 2021-01-04  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/98291
+ 	* tree-vect-loop.c (vectorizable_reduction): Bypass
+ 	associativity check for SLP reductions with VF 1.
+ 
+ 2021-01-04  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/96782
+ 	* match.pd (x == ~x -> false, x != ~x -> true): New simplifications.
+ 
+ 2021-01-04  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+ 
+ 	* collect-utils.c (collect_execute): Check dumppfx.
+ 	* collect2.c (maybe_run_lto_and_relink, do_link): Pass atsuffix
+ 	to collect_execute.
+ 	(do_link): Add new parameter atsuffix.
+ 	(main): Handle -dumpdir option.  Skip one argument for
+ 	-o, -isystem and -B options.
+ 	* gcc.c (make_at_file): New helper function.
+ 	(close_at_file): Use it.
+ 
+ 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.h (MIN_LD64_NO_COAL_SECTS): Adjust.
+ 	Amend handling for LD64_VERSION fallback defaults.
+ 
+ 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config.gcc: Compute default version information
+ 	from the configured target.  Likewise defaults for
+ 	ld64.
+ 	* config/darwin10.h: Removed.
+ 	* config/darwin12.h: Removed.
+ 	* config/darwin9.h: Removed.
+ 	* config/rs6000/darwin8.h: Removed.
+ 
+ 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin9.h (ASM_OUTPUT_ALIGNED_COMMON): Delete.
+ 
+ 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin9.h (STACK_CHECK_STATIC_BUILTIN): Move from here..
+ 	* config/darwin.h (STACK_CHECK_STATIC_BUILTIN): .. to here.
+ 
+ 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Move from
+ 	here...
+ 	* config/darwin.h (LINK_GCC_C_SEQUENCE_SPEC): ... to here.
+ 
+ 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Move the spec
+ 	for the Darwin10 unwinder stub from here ...
+ 	* config/darwin.h (LINK_COMMAND_SPEC_A): ... to here.
+ 
+ 2021-01-02  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/darwin.h (DSYMUTIL_SPEC): Default to DWARF
+ 	(ASM_DEBUG_SPEC):Only define if the assembler supports
+ 	stabs.
+ 	(PREFERRED_DEBUGGING_TYPE): Default to DWARF.
+ 	(DARWIN_PREFER_DWARF): Define.
+ 	* config/darwin9.h (PREFERRED_DEBUGGING_TYPE): Remove.
+ 	(DARWIN_PREFER_DWARF): Likewise
+ 	(DSYMUTIL_SPEC): Likewise.
+ 	(COLLECT_RUN_DSYMUTIL): Likewise.
+ 	(ASM_DEBUG_SPEC): Likewise.
+ 	(ASM_DEBUG_OPTION_SPEC): Likewise.
+ 
+ 2021-01-02  Jan Hubicka  <jh@suse.cz>
+ 
+ 	* cfg.c (free_block): ggc_free bb.
+ 
+ 2021-01-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gcc.c (process_command): Update copyright notice dates.
+ 	* gcov-dump.c (print_version): Ditto.
+ 	* gcov.c (print_version): Ditto.
+ 	* gcov-tool.c (print_version): Ditto.
+ 	* gengtype.c (create_file): Ditto.
+ 	* doc/cpp.texi: Bump @copying's copyright year.
+ 	* doc/cppinternals.texi: Ditto.
+ 	* doc/gcc.texi: Ditto.
+ 	* doc/gccint.texi: Ditto.
+ 	* doc/gcov.texi: Ditto.
+ 	* doc/install.texi: Ditto.
+ 	* doc/invoke.texi: Ditto.
+ 
+ 2021-01-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* ChangeLog-2020: Rotate ChangeLog.  New file.
+ 
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ 
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved.
diff -Nrcpad gcc-11.3.0/gcc/DATESTAMP gcc-12.1.0/gcc/DATESTAMP
*** gcc-11.3.0/gcc/DATESTAMP	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/DATESTAMP	Fri May  6 07:30:56 2022
***************
*** 1 ****
! 20220421
--- 1 ----
! 20220506
diff -Nrcpad gcc-11.3.0/gcc/LANGUAGES gcc-12.1.0/gcc/LANGUAGES
*** gcc-11.3.0/gcc/LANGUAGES	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/LANGUAGES	Fri May  6 07:30:56 2022
*************** Feb 1, 1998:
*** 57,63 ****
      DEFTREECODE (CLASS_METHOD_DECL, "class_method_decl", 'd', 0)
  
  
! Copyright (C) 1998-2021 Free Software Foundation, Inc.
  
  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
--- 57,63 ----
      DEFTREECODE (CLASS_METHOD_DECL, "class_method_decl", 'd', 0)
  
  
! Copyright (C) 1998-2022 Free Software Foundation, Inc.
  
  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
diff -Nrcpad gcc-11.3.0/gcc/Makefile.in gcc-12.1.0/gcc/Makefile.in
*** gcc-11.3.0/gcc/Makefile.in	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/Makefile.in	Fri May  6 07:30:56 2022
***************
*** 1,7 ****
  # Makefile for GNU Compiler Collection
  # Run 'configure' to generate Makefile from Makefile.in
  
! # Copyright (C) 1987-2021 Free Software Foundation, Inc.
  
  #This file is part of GCC.
  
--- 1,7 ----
  # Makefile for GNU Compiler Collection
  # Run 'configure' to generate Makefile from Makefile.in
  
! # Copyright (C) 1987-2022 Free Software Foundation, Inc.
  
  #This file is part of GCC.
  
*************** USER_H_INC_NEXT_POST = @user_headers_inc
*** 452,457 ****
--- 452,458 ----
  
  # Enable target overriding of this fragment, as in config/t-vxworks.
  T_GLIMITS_H = $(srcdir)/glimits.h
+ T_STDINT_GCC_H = $(srcdir)/ginclude/stdint-gcc.h
  
  # The GCC to use for compiling crt*.o.
  # Usually the one we just built.
*************** out_file=$(srcdir)/config/@out_file@
*** 560,565 ****
--- 561,567 ----
  out_object_file=@out_object_file@
  common_out_file=$(srcdir)/common/config/@common_out_file@
  common_out_object_file=@common_out_object_file@
+ EXTRA_GTYPE_DEPS=
  md_file=$(srcdir)/common.md $(srcdir)/config/@md_file@
  tm_file_list=@tm_file_list@
  tm_include_list=@tm_include_list@
*************** tmpdir = /tmp
*** 712,717 ****
--- 714,721 ----
  
  datarootdir = @datarootdir@
  docdir = @docdir@
+ # Directory in which to put DVIs
+ dvidir = @dvidir@
  # Directory in which to build HTML
  build_htmldir = $(objdir)/HTML/gcc-$(version)
  # Directory in which to put HTML
*************** PATCHLEVEL_c := \
*** 885,891 ****
    $(shell echo $(BASEVER_c) | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$$/\1/')
  
  
! # For use in version.c - double quoted strings, with appropriate
  # surrounding punctuation and spaces, and with the datestamp and
  # development phase collapsed to the empty string in release mode
  # (i.e. if DEVPHASE_c is empty and PATCHLEVEL_c is 0).  The space
--- 889,895 ----
    $(shell echo $(BASEVER_c) | sed -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\)$$/\1/')
  
  
! # For use in version.cc - double quoted strings, with appropriate
  # surrounding punctuation and spaces, and with the datestamp and
  # development phase collapsed to the empty string in release mode
  # (i.e. if DEVPHASE_c is empty and PATCHLEVEL_c is 0).  The space
*************** BASIC_BLOCK_H = basic-block.h $(PREDICT_
*** 953,959 ****
  GIMPLE_H = gimple.h gimple.def gsstruct.def $(VEC_H) \
  	$(GGC_H) $(BASIC_BLOCK_H) $(TREE_H) tree-ssa-operands.h \
  	tree-ssa-alias.h $(INTERNAL_FN_H) $(HASH_TABLE_H) is-a.h
! GCOV_IO_H = gcov-io.h gcov-iov.h auto-host.h gcov-counter.def
  RECOG_H = recog.h
  EMIT_RTL_H = emit-rtl.h
  FLAGS_H = flags.h flag-types.h $(OPTIONS_H)
--- 957,963 ----
  GIMPLE_H = gimple.h gimple.def gsstruct.def $(VEC_H) \
  	$(GGC_H) $(BASIC_BLOCK_H) $(TREE_H) tree-ssa-operands.h \
  	tree-ssa-alias.h $(INTERNAL_FN_H) $(HASH_TABLE_H) is-a.h
! GCOV_IO_H = gcov-io.h version.h auto-host.h gcov-counter.def
  RECOG_H = recog.h
  EMIT_RTL_H = emit-rtl.h
  FLAGS_H = flags.h flag-types.h $(OPTIONS_H)
*************** SYSLIBS = @GNAT_LIBEXC@
*** 1089,1094 ****
--- 1093,1102 ----
  GNATBIND = @GNATBIND@
  GNATMAKE = @GNATMAKE@
  
+ # Used from d/Make-lang.in
+ GDC = @GDC@
+ GDCFLAGS = @GDCFLAGS@
+ 
  # Libs needed (at present) just for jcf-dump.
  LDEXP_LIB = @LDEXP_LIB@
  
*************** ANALYZER_OBJS = \
*** 1241,1246 ****
--- 1249,1255 ----
  	analyzer/analyzer-pass.o \
  	analyzer/analyzer-selftests.o \
  	analyzer/bar-chart.o \
+ 	analyzer/call-info.o \
  	analyzer/call-string.o \
  	analyzer/checker-path.o \
  	analyzer/complexity.o \
*************** ANALYZER_OBJS = \
*** 1254,1259 ****
--- 1263,1269 ----
  	analyzer/program-state.o \
  	analyzer/region.o \
  	analyzer/region-model.o \
+ 	analyzer/region-model-asm.o \
  	analyzer/region-model-impl-calls.o \
  	analyzer/region-model-manager.o \
  	analyzer/region-model-reachability.o \
*************** OBJS = \
*** 1312,1317 ****
--- 1322,1330 ----
  	cfgloopanal.o \
  	cfgloopmanip.o \
  	cfgrtl.o \
+ 	ctfc.o \
+ 	ctfout.o \
+ 	btfout.o \
  	symtab.o \
  	symtab-thunks.o \
  	symtab-clones.o \
*************** OBJS = \
*** 1352,1357 ****
--- 1365,1371 ----
  	dumpfile.o \
  	dwarf2asm.o \
  	dwarf2cfi.o \
+ 	dwarf2ctf.o \
  	dwarf2out.o \
  	early-remat.o \
  	emit-rtl.o \
*************** OBJS = \
*** 1382,1397 ****
--- 1396,1415 ----
  	gimple-if-to-switch.o \
  	gimple-iterator.o \
  	gimple-fold.o \
+ 	gimple-harden-conditionals.o \
  	gimple-laddress.o \
  	gimple-loop-interchange.o \
  	gimple-loop-jam.o \
  	gimple-loop-versioning.o \
  	gimple-low.o \
+ 	gimple-predicate-analysis.o \
  	gimple-pretty-print.o \
  	gimple-range.o \
  	gimple-range-cache.o \
  	gimple-range-edge.o \
+ 	gimple-range-fold.o \
  	gimple-range-gori.o \
+ 	gimple-range-trace.o \
  	gimple-ssa-backprop.o \
  	gimple-ssa-evrp.o \
  	gimple-ssa-evrp-analyze.o \
*************** OBJS = \
*** 1401,1411 ****
--- 1419,1431 ----
  	gimple-ssa-store-merging.o \
  	gimple-ssa-strength-reduction.o \
  	gimple-ssa-sprintf.o \
+ 	gimple-ssa-warn-access.o \
  	gimple-ssa-warn-alloca.o \
  	gimple-ssa-warn-restrict.o \
  	gimple-streamer-in.o \
  	gimple-streamer-out.o \
  	gimple-walk.o \
+ 	gimple-warn-recursion.o \
  	gimplify.o \
  	gimplify-me.o \
  	godump.o \
*************** OBJS = \
*** 1439,1444 ****
--- 1459,1465 ----
  	ipa-split.o \
  	ipa-inline.o \
  	ipa-comdats.o \
+ 	ipa-free-lang-data.o \
  	ipa-visibility.o \
  	ipa-inline-analysis.o \
  	ipa-inline-transform.o \
*************** OBJS = \
*** 1497,1502 ****
--- 1518,1524 ----
  	omp-general.o \
  	omp-low.o \
  	omp-oacc-kernels-decompose.o \
+ 	omp-oacc-neuter-broadcast.o \
  	omp-simd-clone.o \
  	opt-problem.o \
  	optabs.o \
*************** OBJS = \
*** 1510,1515 ****
--- 1532,1538 ----
  	ordered-hash-map-tests.o \
  	passes.o \
  	plugin.o \
+ 	pointer-query.o \
  	postreload-gcse.o \
  	postreload.o \
  	predict.o \
*************** OBJS = \
*** 1636,1641 ****
--- 1659,1665 ----
  	tree-ssa-loop.o \
  	tree-ssa-math-opts.o \
  	tree-ssa-operands.o \
+ 	gimple-range-path.o \
  	tree-ssa-phiopt.o \
  	tree-ssa-phiprop.o \
  	tree-ssa-pre.o \
*************** OBJS = \
*** 1675,1685 ****
  	tree.o \
  	tristate.o \
  	typed-splay-tree.o \
- 	unique-ptr-tests.o \
  	valtrack.o \
  	value-query.o \
  	value-range.o \
  	value-range-equiv.o \
  	value-prof.o \
  	var-tracking.o \
  	varasm.o \
--- 1699,1710 ----
  	tree.o \
  	tristate.o \
  	typed-splay-tree.o \
  	valtrack.o \
+ 	value-pointer-equiv.o \
  	value-query.o \
  	value-range.o \
  	value-range-equiv.o \
+ 	value-relation.o \
  	value-prof.o \
  	var-tracking.o \
  	varasm.o \
*************** OBJS = \
*** 1688,1693 ****
--- 1713,1719 ----
  	vmsdbgout.o \
  	vr-values.o \
  	vtable-verify.o \
+ 	warning-control.o \
  	web.o \
  	wide-int.o \
  	wide-int-print.o \
*************** OBJS = \
*** 1699,1710 ****
  
  # Objects in libcommon.a, potentially used by all host binaries and with
  # no target dependencies.
! OBJS-libcommon = diagnostic.o diagnostic-color.o diagnostic-show-locus.o \
! 	diagnostic-format-json.o json.o \
  	edit-context.o \
  	pretty-print.o intl.o \
  	sbitmap.o \
! 	vec.o input.o version.o hash-table.o ggc-none.o memory-block.o \
  	selftest.o selftest-diagnostic.o sort.o
  
  # Objects in libcommon-target.a, used by drivers and by the core
--- 1725,1736 ----
  
  # Objects in libcommon.a, potentially used by all host binaries and with
  # no target dependencies.
! OBJS-libcommon = diagnostic-spec.o diagnostic.o diagnostic-color.o \
! 	diagnostic-show-locus.o diagnostic-format-json.o json.o \
  	edit-context.o \
  	pretty-print.o intl.o \
  	sbitmap.o \
! 	vec.o input.o hash-table.o ggc-none.o memory-block.o \
  	selftest.o selftest-diagnostic.o sort.o
  
  # Objects in libcommon-target.a, used by drivers and by the core
*************** TREECHECKING = @TREECHECKING@
*** 1745,1764 ****
  FULL_DRIVER_NAME=$(target_noncanonical)-gcc-$(version)$(exeext)
  
  MOSTLYCLEANFILES = insn-flags.h insn-config.h insn-codes.h \
!  insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \
!  insn-attr.h insn-attr-common.h insn-attrtab.c insn-dfatab.c \
!  insn-latencytab.c insn-opinit.c insn-opinit.h insn-preds.c insn-constants.h \
!  tm-preds.h tm-constrs.h checksum-options gimple-match.c generic-match.c \
!  tree-check.h min-insn-modes.c insn-modes.c insn-modes.h insn-modes-inline.h \
!  genrtl.h gt-*.h gtype-*.h gtype-desc.c gtyp-input.list \
   case-cfn-macros.h cfn-operators.pd \
   xgcc$(exeext) cpp$(exeext) $(FULL_DRIVER_NAME) \
   $(EXTRA_PROGRAMS) gcc-cross$(exeext) \
   $(SPECS) collect2$(exeext) gcc-ar$(exeext) gcc-nm$(exeext) \
   gcc-ranlib$(exeext) \
!  gcov-iov$(build_exeext) gcov$(exeext) gcov-dump$(exeext) \
   gcov-tool$(exeect) \
!  gengtype$(exeext) *.[0-9][0-9].* *.[si] *-checksum.c libbackend.a \
   libcommon-target.a libcommon.a libgcc.mk perf.data
  
  # This symlink makes the full installation name of the driver be available
--- 1771,1790 ----
  FULL_DRIVER_NAME=$(target_noncanonical)-gcc-$(version)$(exeext)
  
  MOSTLYCLEANFILES = insn-flags.h insn-config.h insn-codes.h \
!  insn-output.cc insn-recog.cc insn-emit.cc insn-extract.cc insn-peep.cc \
!  insn-attr.h insn-attr-common.h insn-attrtab.cc insn-dfatab.cc \
!  insn-latencytab.cc insn-opinit.cc insn-opinit.h insn-preds.cc insn-constants.h \
!  tm-preds.h tm-constrs.h checksum-options gimple-match.cc generic-match.cc \
!  tree-check.h min-insn-modes.cc insn-modes.cc insn-modes.h insn-modes-inline.h \
!  genrtl.h gt-*.h gtype-*.h gtype-desc.cc gtyp-input.list \
   case-cfn-macros.h cfn-operators.pd \
   xgcc$(exeext) cpp$(exeext) $(FULL_DRIVER_NAME) \
   $(EXTRA_PROGRAMS) gcc-cross$(exeext) \
   $(SPECS) collect2$(exeext) gcc-ar$(exeext) gcc-nm$(exeext) \
   gcc-ranlib$(exeext) \
!  genversion$(build_exeext) gcov$(exeext) gcov-dump$(exeext) \
   gcov-tool$(exeect) \
!  gengtype$(exeext) *.[0-9][0-9].* *.[si] *-checksum.cc libbackend.a \
   libcommon-target.a libcommon.a libgcc.mk perf.data
  
  # This symlink makes the full installation name of the driver be available
*************** checksum-options:
*** 2137,2143 ****
  # Build libgcc.a.
  
  libgcc-support: libgcc.mvars stmp-int-hdrs $(TCONFIG_H) \
! 	$(MACHMODE_H) gcov-iov.h
  
  libgcc.mvars: config.status Makefile specs xgcc$(exeext)
  	: > tmp-libgcc.mvars
--- 2163,2169 ----
  # Build libgcc.a.
  
  libgcc-support: libgcc.mvars stmp-int-hdrs $(TCONFIG_H) \
! 	$(MACHMODE_H) version.h
  
  libgcc.mvars: config.status Makefile specs xgcc$(exeext)
  	: > tmp-libgcc.mvars
*************** s-mlib: $(srcdir)/genmultilib Makefile
*** 2188,2194 ****
  
  srcextra: gcc.srcextra lang.srcextra
  
! gcc.srcextra: gengtype-lex.c
  	-cp -p $^ $(srcdir)
  
  AR_OBJS = file-find.o
--- 2214,2220 ----
  
  srcextra: gcc.srcextra lang.srcextra
  
! gcc.srcextra: gengtype-lex.cc
  	-cp -p $^ $(srcdir)
  
  AR_OBJS = file-find.o
*************** CFLAGS-gcc-nm.o += $(DRIVER_DEFINES) \
*** 2220,2229 ****
  
  # ??? the implicit rules dont trigger if the source file has a different name
  # so copy instead
! gcc-ranlib.c: gcc-ar.c
  	cp $^ $@
  
! gcc-nm.c: gcc-ar.c
  	cp $^ $@
  
  COLLECT2_OBJS = collect2.o collect2-aix.o vec.o ggc-none.o \
--- 2246,2255 ----
  
  # ??? the implicit rules dont trigger if the source file has a different name
  # so copy instead
! gcc-ranlib.cc: gcc-ar.cc
  	cp $^ $@
  
! gcc-nm.cc: gcc-ar.cc
  	cp $^ $@
  
  COLLECT2_OBJS = collect2.o collect2-aix.o vec.o ggc-none.o \
*************** CFLAGS-c-family/c-opts.o += @TARGET_SYST
*** 2251,2257 ****
  CFLAGS-c-family/c-pch.o += -DHOST_MACHINE=\"$(host)\" \
  	-DTARGET_MACHINE=\"$(target)\"
  
! default-c.o: config/default-c.c
  	$(COMPILE) $<
  	$(POSTCOMPILE)
  
--- 2277,2283 ----
  CFLAGS-c-family/c-pch.o += -DHOST_MACHINE=\"$(host)\" \
  	-DTARGET_MACHINE=\"$(target)\"
  
! default-c.o: config/default-c.cc
  	$(COMPILE) $<
  	$(POSTCOMPILE)
  
*************** prefix.o: $(BASEVER)
*** 2262,2268 ****
  
  # Files used by the D language front end.
  
! default-d.o: config/default-d.c
  	$(COMPILE) $<
  	$(POSTCOMPILE)
  
--- 2288,2294 ----
  
  # Files used by the D language front end.
  
! default-d.o: config/default-d.cc
  	$(COMPILE) $<
  	$(POSTCOMPILE)
  
*************** s-options: $(ALL_OPT_FILES) Makefile $(s
*** 2303,2315 ****
  	$(SHELL) $(srcdir)/../move-if-change tmp-optionlist optionlist
  	$(STAMP) s-options
  
! options.c: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
      $(srcdir)/optc-gen.awk
  	$(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \
  	       -f $(srcdir)/optc-gen.awk \
  	       -v header_name="config.h system.h coretypes.h options.h tm.h" < $< > $@
  
! options-save.c: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
      $(srcdir)/optc-save-gen.awk
  	$(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \
  	       -f $(srcdir)/optc-save-gen.awk \
--- 2329,2341 ----
  	$(SHELL) $(srcdir)/../move-if-change tmp-optionlist optionlist
  	$(STAMP) s-options
  
! options.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
      $(srcdir)/optc-gen.awk
  	$(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \
  	       -f $(srcdir)/optc-gen.awk \
  	       -v header_name="config.h system.h coretypes.h options.h tm.h" < $< > $@
  
! options-save.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
      $(srcdir)/optc-save-gen.awk
  	$(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \
  	       -f $(srcdir)/optc-save-gen.awk \
*************** s-options-h: optionlist $(srcdir)/opt-fu
*** 2324,2336 ****
  	$(SHELL) $(srcdir)/../move-if-change tmp-options.h options.h
  	$(STAMP) $@
  
! dumpvers: dumpvers.c
! 
! CFLAGS-version.o += -DBASEVER=$(BASEVER_s) -DDATESTAMP=$(DATESTAMP_s) \
! 	-DREVISION=$(REVISION_s) \
! 	-DDEVPHASE=$(DEVPHASE_s) -DPKGVERSION=$(PKGVERSION_s) \
! 	-DBUGURL=$(BUGURL_s)
! version.o: $(REVISION) $(DATESTAMP) $(BASEVER) $(DEVPHASE)
  
  # lto-compress.o needs $(ZLIBINC) added to the include flags.
  CFLAGS-lto-compress.o += $(ZLIBINC) $(ZSTD_INC)
--- 2350,2356 ----
  	$(SHELL) $(srcdir)/../move-if-change tmp-options.h options.h
  	$(STAMP) $@
  
! dumpvers: dumpvers.cc
  
  # lto-compress.o needs $(ZLIBINC) added to the include flags.
  CFLAGS-lto-compress.o += $(ZLIBINC) $(ZSTD_INC)
*************** $(common_out_object_file): $(common_out_
*** 2366,2374 ****
  # and compile them.
  
  .PRECIOUS: insn-config.h insn-flags.h insn-codes.h insn-constants.h \
!   insn-emit.c insn-recog.c insn-extract.c insn-output.c insn-peep.c \
!   insn-attr.h insn-attr-common.h insn-attrtab.c insn-dfatab.c \
!   insn-latencytab.c insn-preds.c gimple-match.c generic-match.c \
    insn-target-def.h
  
  # Dependencies for the md file.  The first time through, we just assume
--- 2386,2394 ----
  # and compile them.
  
  .PRECIOUS: insn-config.h insn-flags.h insn-codes.h insn-constants.h \
!   insn-emit.cc insn-recog.cc insn-extract.cc insn-output.cc insn-peep.cc \
!   insn-attr.h insn-attr-common.h insn-attrtab.cc insn-dfatab.cc \
!   insn-latencytab.cc insn-preds.cc gimple-match.cc generic-match.cc \
    insn-target-def.h
  
  # Dependencies for the md file.  The first time through, we just assume
*************** s-mddeps: $(md_file) $(MD_INCLUDES) buil
*** 2392,2410 ****
  simple_rtl_generated_h	= insn-attr.h insn-attr-common.h insn-codes.h \
  			  insn-config.h insn-flags.h insn-target-def.h
  
! simple_rtl_generated_c	= insn-automata.c insn-emit.c \
! 			  insn-extract.c insn-output.c \
! 			  insn-peep.c insn-recog.c
  
  simple_generated_h	= $(simple_rtl_generated_h) insn-constants.h
  
! simple_generated_c	= $(simple_rtl_generated_c) insn-enums.c
  
  $(simple_generated_h:insn-%.h=s-%) \
! $(simple_generated_c:insn-%.c=s-%): s-%: $(MD_DEPS)
  
  $(simple_rtl_generated_h:insn-%.h=s-%) \
! $(simple_rtl_generated_c:insn-%.c=s-%): s-%: insn-conditions.md
  
  $(simple_generated_h): insn-%.h: s-%; @true
  
--- 2412,2430 ----
  simple_rtl_generated_h	= insn-attr.h insn-attr-common.h insn-codes.h \
  			  insn-config.h insn-flags.h insn-target-def.h
  
! simple_rtl_generated_c	= insn-automata.cc insn-emit.cc \
! 			  insn-extract.cc insn-output.cc \
! 			  insn-peep.cc insn-recog.cc
  
  simple_generated_h	= $(simple_rtl_generated_h) insn-constants.h
  
! simple_generated_c	= $(simple_rtl_generated_c) insn-enums.cc
  
  $(simple_generated_h:insn-%.h=s-%) \
! $(simple_generated_c:insn-%.cc=s-%): s-%: $(MD_DEPS)
  
  $(simple_rtl_generated_h:insn-%.h=s-%) \
! $(simple_rtl_generated_c:insn-%.cc=s-%): s-%: insn-conditions.md
  
  $(simple_generated_h): insn-%.h: s-%; @true
  
*************** $(simple_generated_h:insn-%.h=s-%): s-%:
*** 2414,2424 ****
  	$(SHELL) $(srcdir)/../move-if-change tmp-$*.h insn-$*.h
  	$(STAMP) s-$*
  
! $(simple_generated_c): insn-%.c: s-%; @true
! $(simple_generated_c:insn-%.c=s-%): s-%: build/gen%$(build_exeext)
  	$(RUN_GEN) build/gen$*$(build_exeext) $(md_file) \
! 	  $(filter insn-conditions.md,$^) > tmp-$*.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-$*.c insn-$*.c
  	$(STAMP) s-$*
  
  # gencheck doesn't read the machine description, and the file produced
--- 2434,2444 ----
  	$(SHELL) $(srcdir)/../move-if-change tmp-$*.h insn-$*.h
  	$(STAMP) s-$*
  
! $(simple_generated_c): insn-%.cc: s-%; @true
! $(simple_generated_c:insn-%.cc=s-%): s-%: build/gen%$(build_exeext)
  	$(RUN_GEN) build/gen$*$(build_exeext) $(md_file) \
! 	  $(filter insn-conditions.md,$^) > tmp-$*.cc
! 	$(SHELL) $(srcdir)/../move-if-change tmp-$*.cc insn-$*.cc
  	$(STAMP) s-$*
  
  # gencheck doesn't read the machine description, and the file produced
*************** s-check : build/gencheck$(build_exeext)
*** 2429,2459 ****
  	$(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h
  	$(STAMP) s-check
  
! # genattrtab produces three files: tmp-{attrtab.c,dfatab.c,latencytab.c}
! insn-attrtab.c insn-dfatab.c insn-latencytab.c: s-attrtab ; @true
  s-attrtab : $(MD_DEPS) build/genattrtab$(build_exeext) \
    insn-conditions.md
  	$(RUN_GEN) build/genattrtab$(build_exeext) $(md_file) insn-conditions.md \
! 		-Atmp-attrtab.c -Dtmp-dfatab.c -Ltmp-latencytab.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-attrtab.c    insn-attrtab.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-dfatab.c     insn-dfatab.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-latencytab.c insn-latencytab.c
  	$(STAMP) s-attrtab
  
  # genopinit produces two files.
! insn-opinit.c insn-opinit.h: s-opinit ; @true
  s-opinit: $(MD_DEPS) build/genopinit$(build_exeext) insn-conditions.md
  	$(RUN_GEN) build/genopinit$(build_exeext) $(md_file) \
! 	  insn-conditions.md -htmp-opinit.h -ctmp-opinit.c
  	$(SHELL) $(srcdir)/../move-if-change tmp-opinit.h insn-opinit.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-opinit.c insn-opinit.c
  	$(STAMP) s-opinit
  
  # gencondmd doesn't use the standard naming convention.
! build/gencondmd.c: s-conditions; @true
  s-conditions: $(MD_DEPS) build/genconditions$(build_exeext)
! 	$(RUN_GEN) build/genconditions$(build_exeext) $(md_file) > tmp-condmd.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-condmd.c build/gencondmd.c
  	$(STAMP) s-conditions
  
  insn-conditions.md: s-condmd; @true
--- 2449,2479 ----
  	$(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h
  	$(STAMP) s-check
  
! # genattrtab produces three files: tmp-{attrtab.cc,dfatab.cc,latencytab.cc}
! insn-attrtab.cc insn-dfatab.cc insn-latencytab.cc: s-attrtab ; @true
  s-attrtab : $(MD_DEPS) build/genattrtab$(build_exeext) \
    insn-conditions.md
  	$(RUN_GEN) build/genattrtab$(build_exeext) $(md_file) insn-conditions.md \
! 		-Atmp-attrtab.cc -Dtmp-dfatab.cc -Ltmp-latencytab.cc
! 	$(SHELL) $(srcdir)/../move-if-change tmp-attrtab.cc    insn-attrtab.cc
! 	$(SHELL) $(srcdir)/../move-if-change tmp-dfatab.cc     insn-dfatab.cc
! 	$(SHELL) $(srcdir)/../move-if-change tmp-latencytab.cc insn-latencytab.cc
  	$(STAMP) s-attrtab
  
  # genopinit produces two files.
! insn-opinit.cc insn-opinit.h: s-opinit ; @true
  s-opinit: $(MD_DEPS) build/genopinit$(build_exeext) insn-conditions.md
  	$(RUN_GEN) build/genopinit$(build_exeext) $(md_file) \
! 	  insn-conditions.md -htmp-opinit.h -ctmp-opinit.cc
  	$(SHELL) $(srcdir)/../move-if-change tmp-opinit.h insn-opinit.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-opinit.cc insn-opinit.cc
  	$(STAMP) s-opinit
  
  # gencondmd doesn't use the standard naming convention.
! build/gencondmd.cc: s-conditions; @true
  s-conditions: $(MD_DEPS) build/genconditions$(build_exeext)
! 	$(RUN_GEN) build/genconditions$(build_exeext) $(md_file) > tmp-condmd.cc
! 	$(SHELL) $(srcdir)/../move-if-change tmp-condmd.cc build/gencondmd.cc
  	$(STAMP) s-conditions
  
  insn-conditions.md: s-condmd; @true
*************** s-genrtl-h: build/gengenrtl$(build_exeex
*** 2473,2486 ****
  	$(SHELL) $(srcdir)/../move-if-change tmp-genrtl.h genrtl.h
  	$(STAMP) s-genrtl-h
  
! insn-modes.c: s-modes; @true
  insn-modes.h: s-modes-h; @true
  insn-modes-inline.h: s-modes-inline-h; @true
! min-insn-modes.c: s-modes-m; @true
  
  s-modes: build/genmodes$(build_exeext)
! 	$(RUN_GEN) build/genmodes$(build_exeext) > tmp-modes.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-modes.c insn-modes.c
  	$(STAMP) s-modes
  
  s-modes-h: build/genmodes$(build_exeext)
--- 2493,2506 ----
  	$(SHELL) $(srcdir)/../move-if-change tmp-genrtl.h genrtl.h
  	$(STAMP) s-genrtl-h
  
! insn-modes.cc: s-modes; @true
  insn-modes.h: s-modes-h; @true
  insn-modes-inline.h: s-modes-inline-h; @true
! min-insn-modes.cc: s-modes-m; @true
  
  s-modes: build/genmodes$(build_exeext)
! 	$(RUN_GEN) build/genmodes$(build_exeext) > tmp-modes.cc
! 	$(SHELL) $(srcdir)/../move-if-change tmp-modes.cc insn-modes.cc
  	$(STAMP) s-modes
  
  s-modes-h: build/genmodes$(build_exeext)
*************** s-modes-inline-h: build/genmodes$(build_
*** 2495,2505 ****
  	$(STAMP) s-modes-inline-h
  
  s-modes-m: build/genmodes$(build_exeext)
! 	$(RUN_GEN) build/genmodes$(build_exeext) -m > tmp-min-modes.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-min-modes.c min-insn-modes.c
  	$(STAMP) s-modes-m
  
! insn-preds.c: s-preds; @true
  tm-preds.h: s-preds-h; @true
  tm-constrs.h: s-constrs-h; @true
  
--- 2515,2525 ----
  	$(STAMP) s-modes-inline-h
  
  s-modes-m: build/genmodes$(build_exeext)
! 	$(RUN_GEN) build/genmodes$(build_exeext) -m > tmp-min-modes.cc
! 	$(SHELL) $(srcdir)/../move-if-change tmp-min-modes.cc min-insn-modes.cc
  	$(STAMP) s-modes-m
  
! insn-preds.cc: s-preds; @true
  tm-preds.h: s-preds-h; @true
  tm-constrs.h: s-constrs-h; @true
  
*************** mddump: $(BUILD_RTL) $(MD_DEPS) build/ge
*** 2508,2515 ****
  	$(RUN_GEN) build/genmddump$(build_exeext) $(md_file) > tmp-mddump.md
  
  s-preds: $(MD_DEPS) build/genpreds$(build_exeext)
! 	$(RUN_GEN) build/genpreds$(build_exeext) $(md_file) > tmp-preds.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-preds.c insn-preds.c
  	$(STAMP) s-preds
  
  s-preds-h: $(MD_DEPS) build/genpreds$(build_exeext)
--- 2528,2535 ----
  	$(RUN_GEN) build/genmddump$(build_exeext) $(md_file) > tmp-mddump.md
  
  s-preds: $(MD_DEPS) build/genpreds$(build_exeext)
! 	$(RUN_GEN) build/genpreds$(build_exeext) $(md_file) > tmp-preds.cc
! 	$(SHELL) $(srcdir)/../move-if-change tmp-preds.cc insn-preds.cc
  	$(STAMP) s-preds
  
  s-preds-h: $(MD_DEPS) build/genpreds$(build_exeext)
*************** s-tm-texi: build/genhooks$(build_exeext)
*** 2611,2635 ****
  	  false; \
  	fi
  
! gimple-match.c: s-match gimple-match-head.c ; @true
! generic-match.c: s-match generic-match-head.c ; @true
  
  s-match: build/genmatch$(build_exeext) $(srcdir)/match.pd cfn-operators.pd
  	$(RUN_GEN) build/genmatch$(build_exeext) --gimple $(srcdir)/match.pd \
! 	    > tmp-gimple-match.c
  	$(RUN_GEN) build/genmatch$(build_exeext) --generic $(srcdir)/match.pd \
! 	    > tmp-generic-match.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-gimple-match.c \
! 	    					gimple-match.c
! 	$(SHELL) $(srcdir)/../move-if-change tmp-generic-match.c \
! 	    					generic-match.c
  	$(STAMP) s-match
  
  GTFILES = $(CPPLIB_H) $(srcdir)/input.h $(srcdir)/coretypes.h \
    $(host_xm_file_list) \
    $(tm_file_list) $(HASHTAB_H) $(SPLAY_TREE_H) $(srcdir)/bitmap.h \
    $(srcdir)/wide-int.h $(srcdir)/alias.h \
!   $(srcdir)/coverage.c  $(srcdir)/rtl.h \
    $(srcdir)/optabs.h $(srcdir)/tree.h $(srcdir)/tree-core.h \
    $(srcdir)/libfuncs.h $(SYMTAB_H) \
    $(srcdir)/real.h $(srcdir)/function.h $(srcdir)/insn-addr.h $(srcdir)/hwint.h \
--- 2631,2655 ----
  	  false; \
  	fi
  
! gimple-match.cc: s-match gimple-match-head.cc ; @true
! generic-match.cc: s-match generic-match-head.cc ; @true
  
  s-match: build/genmatch$(build_exeext) $(srcdir)/match.pd cfn-operators.pd
  	$(RUN_GEN) build/genmatch$(build_exeext) --gimple $(srcdir)/match.pd \
! 	    > tmp-gimple-match.cc
  	$(RUN_GEN) build/genmatch$(build_exeext) --generic $(srcdir)/match.pd \
! 	    > tmp-generic-match.cc
! 	$(SHELL) $(srcdir)/../move-if-change tmp-gimple-match.cc \
! 	    					gimple-match.cc
! 	$(SHELL) $(srcdir)/../move-if-change tmp-generic-match.cc \
! 	    					generic-match.cc
  	$(STAMP) s-match
  
  GTFILES = $(CPPLIB_H) $(srcdir)/input.h $(srcdir)/coretypes.h \
    $(host_xm_file_list) \
    $(tm_file_list) $(HASHTAB_H) $(SPLAY_TREE_H) $(srcdir)/bitmap.h \
    $(srcdir)/wide-int.h $(srcdir)/alias.h \
!   $(srcdir)/coverage.cc  $(srcdir)/rtl.h \
    $(srcdir)/optabs.h $(srcdir)/tree.h $(srcdir)/tree-core.h \
    $(srcdir)/libfuncs.h $(SYMTAB_H) \
    $(srcdir)/real.h $(srcdir)/function.h $(srcdir)/insn-addr.h $(srcdir)/hwint.h \
*************** GTFILES = $(CPPLIB_H) $(srcdir)/input.h
*** 2639,2704 ****
    $(srcdir)/cselib.h $(srcdir)/basic-block.h  $(srcdir)/ipa-ref.h $(srcdir)/cgraph.h \
    $(srcdir)/symtab-thunks.h $(srcdir)/symtab-thunks.cc \
    $(srcdir)/symtab-clones.h \
!   $(srcdir)/reload.h $(srcdir)/caller-save.c $(srcdir)/symtab.c \
!   $(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c $(srcdir)/cgraph.c \
!   $(srcdir)/ipa-prop.c $(srcdir)/ipa-cp.c $(srcdir)/ipa-utils.h \
!   $(srcdir)/ipa-param-manipulation.h $(srcdir)/ipa-sra.c $(srcdir)/dbxout.c \
!   $(srcdir)/ipa-modref.h $(srcdir)/ipa-modref.c \
    $(srcdir)/ipa-modref-tree.h \
    $(srcdir)/signop.h \
    $(srcdir)/dwarf2out.h \
!   $(srcdir)/dwarf2asm.c \
!   $(srcdir)/dwarf2cfi.c \
!   $(srcdir)/dwarf2out.c \
!   $(srcdir)/tree-vect-generic.c \
    $(srcdir)/gimple-isel.cc \
!   $(srcdir)/dojump.c $(srcdir)/emit-rtl.h \
!   $(srcdir)/emit-rtl.c $(srcdir)/except.h $(srcdir)/explow.c $(srcdir)/expr.c \
    $(srcdir)/expr.h \
!   $(srcdir)/function.c $(srcdir)/except.c \
!   $(srcdir)/ggc-tests.c \
!   $(srcdir)/gcse.c $(srcdir)/godump.c \
!   $(srcdir)/lists.c $(srcdir)/optabs-libfuncs.c \
!   $(srcdir)/profile.c $(srcdir)/mcf.c \
!   $(srcdir)/reg-stack.c $(srcdir)/cfgrtl.c \
!   $(srcdir)/stor-layout.c \
!   $(srcdir)/stringpool.c $(srcdir)/tree.c $(srcdir)/varasm.c \
    $(srcdir)/gimple.h \
    $(srcdir)/gimple-ssa.h \
!   $(srcdir)/tree-ssanames.c $(srcdir)/tree-eh.c $(srcdir)/tree-ssa-address.c \
!   $(srcdir)/tree-cfg.c $(srcdir)/tree-ssa-loop-ivopts.c \
!   $(srcdir)/tree-dfa.c \
!   $(srcdir)/tree-iterator.c $(srcdir)/gimple-expr.c \
    $(srcdir)/tree-chrec.h \
!   $(srcdir)/tree-scalar-evolution.c \
    $(srcdir)/tree-ssa-operands.h \
!   $(srcdir)/tree-profile.c $(srcdir)/tree-nested.c \
    $(srcdir)/omp-offload.h \
!   $(srcdir)/omp-offload.c \
!   $(srcdir)/omp-general.c \
!   $(srcdir)/omp-low.c \
!   $(srcdir)/targhooks.c $(out_file) $(srcdir)/passes.c \
!   $(srcdir)/cgraphclones.c \
!   $(srcdir)/tree-phinodes.c \
    $(srcdir)/tree-ssa-alias.h \
    $(srcdir)/tree-ssanames.h \
    $(srcdir)/tree-vrp.h \
    $(srcdir)/value-range.h \
    $(srcdir)/ipa-prop.h \
!   $(srcdir)/trans-mem.c \
    $(srcdir)/lto-streamer.h \
    $(srcdir)/target-globals.h \
    $(srcdir)/ipa-predicate.h \
    $(srcdir)/ipa-fnsummary.h \
!   $(srcdir)/vtable-verify.c \
!   $(srcdir)/asan.c \
!   $(srcdir)/ubsan.c \
!   $(srcdir)/tsan.c \
!   $(srcdir)/sanopt.c \
!   $(srcdir)/sancov.c \
!   $(srcdir)/ipa-devirt.c \
    $(srcdir)/internal-fn.h \
!   $(srcdir)/calls.c \
    $(srcdir)/omp-general.h \
    @all_gtfiles@
  
--- 2659,2728 ----
    $(srcdir)/cselib.h $(srcdir)/basic-block.h  $(srcdir)/ipa-ref.h $(srcdir)/cgraph.h \
    $(srcdir)/symtab-thunks.h $(srcdir)/symtab-thunks.cc \
    $(srcdir)/symtab-clones.h \
!   $(srcdir)/reload.h $(srcdir)/caller-save.cc $(srcdir)/symtab.cc \
!   $(srcdir)/alias.cc $(srcdir)/bitmap.cc $(srcdir)/cselib.cc $(srcdir)/cgraph.cc \
!   $(srcdir)/ipa-prop.cc $(srcdir)/ipa-cp.cc $(srcdir)/ipa-utils.h \
!   $(srcdir)/ipa-param-manipulation.h $(srcdir)/ipa-sra.cc $(srcdir)/dbxout.cc \
!   $(srcdir)/ipa-modref.h $(srcdir)/ipa-modref.cc \
    $(srcdir)/ipa-modref-tree.h \
    $(srcdir)/signop.h \
+   $(srcdir)/diagnostic-spec.h $(srcdir)/diagnostic-spec.cc \
    $(srcdir)/dwarf2out.h \
!   $(srcdir)/dwarf2asm.cc \
!   $(srcdir)/dwarf2cfi.cc \
!   $(srcdir)/dwarf2ctf.cc \
!   $(srcdir)/dwarf2out.cc \
!   $(srcdir)/ctfc.h \
!   $(srcdir)/ctfout.cc \
!   $(srcdir)/btfout.cc \
!   $(srcdir)/tree-vect-generic.cc \
    $(srcdir)/gimple-isel.cc \
!   $(srcdir)/dojump.cc $(srcdir)/emit-rtl.h \
!   $(srcdir)/emit-rtl.cc $(srcdir)/except.h $(srcdir)/explow.cc $(srcdir)/expr.cc \
    $(srcdir)/expr.h \
!   $(srcdir)/function.cc $(srcdir)/except.cc \
!   $(srcdir)/ggc-tests.cc \
!   $(srcdir)/gcse.cc $(srcdir)/godump.cc \
!   $(srcdir)/lists.cc $(srcdir)/optabs-libfuncs.cc \
!   $(srcdir)/profile.cc $(srcdir)/mcf.cc \
!   $(srcdir)/reg-stack.cc $(srcdir)/cfgrtl.cc \
!   $(srcdir)/stor-layout.cc \
!   $(srcdir)/stringpool.cc $(srcdir)/tree.cc $(srcdir)/varasm.cc \
    $(srcdir)/gimple.h \
    $(srcdir)/gimple-ssa.h \
!   $(srcdir)/tree-ssanames.cc $(srcdir)/tree-eh.cc $(srcdir)/tree-ssa-address.cc \
!   $(srcdir)/tree-cfg.cc $(srcdir)/tree-ssa-loop-ivopts.cc \
!   $(srcdir)/tree-dfa.cc \
!   $(srcdir)/tree-iterator.cc $(srcdir)/gimple-expr.cc \
    $(srcdir)/tree-chrec.h \
!   $(srcdir)/tree-scalar-evolution.cc \
    $(srcdir)/tree-ssa-operands.h \
!   $(srcdir)/tree-profile.cc $(srcdir)/tree-nested.cc \
    $(srcdir)/omp-offload.h \
!   $(srcdir)/omp-general.cc \
!   $(srcdir)/omp-low.cc \
!   $(srcdir)/targhooks.cc $(out_file) $(srcdir)/passes.cc \
!   $(srcdir)/cgraphclones.cc \
!   $(srcdir)/tree-phinodes.cc \
    $(srcdir)/tree-ssa-alias.h \
    $(srcdir)/tree-ssanames.h \
    $(srcdir)/tree-vrp.h \
    $(srcdir)/value-range.h \
    $(srcdir)/ipa-prop.h \
!   $(srcdir)/trans-mem.cc \
    $(srcdir)/lto-streamer.h \
    $(srcdir)/target-globals.h \
    $(srcdir)/ipa-predicate.h \
    $(srcdir)/ipa-fnsummary.h \
!   $(srcdir)/vtable-verify.cc \
!   $(srcdir)/asan.cc \
!   $(srcdir)/ubsan.cc \
!   $(srcdir)/tsan.cc \
!   $(srcdir)/sanopt.cc \
!   $(srcdir)/sancov.cc \
!   $(srcdir)/ipa-devirt.cc \
    $(srcdir)/internal-fn.h \
!   $(srcdir)/calls.cc \
    $(srcdir)/omp-general.h \
    @all_gtfiles@
  
*************** GTFILES = $(CPPLIB_H) $(srcdir)/input.h
*** 2710,2717 ****
  
  GTFILES_H = $(subst /,-, \
  	    $(shell echo $(patsubst $(srcdir)/%,gt-%, \
! 			   $(patsubst %.c,%.h, \
! 			     $(filter %.c, $(GTFILES)))) \
  			| sed -e "s|/[^ ]*/|/|g" -e "s|gt-config/|gt-|g"))
  
  GTFILES_LANG_H = $(patsubst [%], gtype-%.h, $(filter [%], $(GTFILES)))
--- 2734,2741 ----
  
  GTFILES_H = $(subst /,-, \
  	    $(shell echo $(patsubst $(srcdir)/%,gt-%, \
! 			   $(patsubst %.cc,%.h, \
! 			     $(filter %.cc, $(GTFILES)))) \
  			| sed -e "s|/[^ ]*/|/|g" -e "s|gt-config/|gt-|g"))
  
  GTFILES_LANG_H = $(patsubst [%], gtype-%.h, $(filter [%], $(GTFILES)))
*************** ALL_GTFILES_H := $(sort $(GTFILES_H) $(G
*** 2721,2727 ****
  # write it out to a file (taking care not to do that in a way that
  # overflows a command line!) and then have gengtype read the file in.
  
! $(ALL_GTFILES_H) gtype-desc.c gtype-desc.h gtype.state: s-gtype ; @true
  
  ### Common flags to gengtype [e.g. -v or -B backupdir]
  GENGTYPE_FLAGS= 
--- 2745,2751 ----
  # write it out to a file (taking care not to do that in a way that
  # overflows a command line!) and then have gengtype read the file in.
  
! $(ALL_GTFILES_H) gtype-desc.cc gtype-desc.h gtype.state: s-gtype ; @true
  
  ### Common flags to gengtype [e.g. -v or -B backupdir]
  GENGTYPE_FLAGS= 
*************** s-gtyp-input: Makefile
*** 2732,2739 ****
  	$(SHELL) $(srcdir)/../move-if-change tmp-gi.list gtyp-input.list
  	$(STAMP) s-gtyp-input
  
! s-gtype: build/gengtype$(build_exeext) $(filter-out [%], $(GTFILES)) \
! 	 gtyp-input.list
  # First, parse all files and save a state file.
  	$(RUN_GEN) build/gengtype$(build_exeext) $(GENGTYPE_FLAGS) \
                      -S $(srcdir) -I gtyp-input.list -w tmp-gtype.state
--- 2756,2763 ----
  	$(SHELL) $(srcdir)/../move-if-change tmp-gi.list gtyp-input.list
  	$(STAMP) s-gtyp-input
  
! s-gtype: $(EXTRA_GTYPE_DEPS) build/gengtype$(build_exeext) \
! 	$(filter-out [%], $(GTFILES)) gtyp-input.list
  # First, parse all files and save a state file.
  	$(RUN_GEN) build/gengtype$(build_exeext) $(GENGTYPE_FLAGS) \
                      -S $(srcdir) -I gtyp-input.list -w tmp-gtype.state
*************** generated_files = config.h tm.h $(TM_P_H
*** 2748,2756 ****
         $(simple_generated_h) specs.h \
         tree-check.h genrtl.h insn-modes.h insn-modes-inline.h \
         tm-preds.h tm-constrs.h \
!        $(ALL_GTFILES_H) gtype-desc.c gtype-desc.h gcov-iov.h \
         options.h target-hooks-def.h insn-opinit.h \
         common/common-target-hooks-def.h pass-instances.def \
         c-family/c-target-hooks-def.h d/d-target-hooks-def.h \
         case-cfn-macros.h \
         cfn-operators.pd omp-device-properties.h
--- 2772,2781 ----
         $(simple_generated_h) specs.h \
         tree-check.h genrtl.h insn-modes.h insn-modes-inline.h \
         tm-preds.h tm-constrs.h \
!        $(ALL_GTFILES_H) gtype-desc.cc gtype-desc.h version.h \
         options.h target-hooks-def.h insn-opinit.h \
         common/common-target-hooks-def.h pass-instances.def \
+        gimple-match.cc generic-match.cc \
         c-family/c-target-hooks-def.h d/d-target-hooks-def.h \
         case-cfn-macros.h \
         cfn-operators.pd omp-device-properties.h
*************** build/%.o :  # dependencies provided by
*** 2762,2850 ****
  	$(COMPILER_FOR_BUILD) -c $(BUILD_COMPILERFLAGS) $(BUILD_CPPFLAGS) \
  		-o $@ $<
  
- ## build/version.o is compiled by the $(COMPILER_FOR_BUILD) but needs
- ## several C macro definitions, just like version.o
- build/version.o:  version.c version.h \
-                   $(REVISION) $(DATESTAMP) $(BASEVER) $(DEVPHASE)
- 	$(COMPILER_FOR_BUILD) -c $(BUILD_COMPILERFLAGS) $(BUILD_CPPFLAGS) \
- 	-DBASEVER=$(BASEVER_s) -DDATESTAMP=$(DATESTAMP_s) \
- 	-DREVISION=$(REVISION_s) \
- 	-DDEVPHASE=$(DEVPHASE_s) -DPKGVERSION=$(PKGVERSION_s) \
- 	-DBUGURL=$(BUGURL_s) -o $@ $<
- 
  # Header dependencies for the programs that generate source code.
  # These are library modules...
! build/errors.o : errors.c $(BCONFIG_H) $(SYSTEM_H) errors.h
! build/gensupport.o: gensupport.c $(BCONFIG_H) $(SYSTEM_H) 		\
    $(CORETYPES_H) $(GTM_H) $(RTL_BASE_H) $(OBSTACK_H) errors.h		\
    $(HASHTAB_H) $(READ_MD_H) $(GENSUPPORT_H) $(HASH_TABLE_H)
! build/ggc-none.o : ggc-none.c $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) 	\
    $(GGC_H)
! build/min-insn-modes.o : min-insn-modes.c $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H)
! build/print-rtl.o: print-rtl.c $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H)	\
    $(GTM_H) $(RTL_BASE_H)
! build/read-md.o: read-md.c $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H)	\
    $(HASHTAB_H) errors.h $(READ_MD_H)
! build/read-rtl.o: read-rtl.c $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H)	\
    $(GTM_H) $(RTL_BASE_H) $(OBSTACK_H) $(HASHTAB_H) $(READ_MD_H)		\
    $(GENSUPPORT_H)
! build/rtl.o: rtl.c $(BCONFIG_H) $(CORETYPES_H) $(GTM_H) $(SYSTEM_H)	\
    $(RTL_H) $(GGC_H) errors.h
! build/vec.o : vec.c $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(VEC_H)	\
    $(GGC_H) toplev.h $(DIAGNOSTIC_CORE_H) $(HASH_TABLE_H)
! build/hash-table.o : hash-table.c $(BCONFIG_H) $(SYSTEM_H)		\
    $(CORETYPES_H) $(HASH_TABLE_H) $(GGC_H) toplev.h $(DIAGNOSTIC_CORE_H)
  build/sort.o : sort.cc $(BCONFIG_H) $(SYSTEM_H)
! build/inchash.o : inchash.c $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H)	\
    $(HASHTAB_H) inchash.h
! build/gencondmd.o : build/gencondmd.c $(BCONFIG_H) $(SYSTEM_H)		\
    $(CORETYPES_H) $(GTM_H) insn-constants.h				\
    $(filter-out insn-flags.h, $(RTL_H) $(TM_P_H) $(FUNCTION_H) $(REGS_H) \
    $(RECOG_H) output.h $(FLAGS_H) $(RESOURCE_H) toplev.h $(DIAGNOSTIC_CORE_H) reload.h 	\
    $(EXCEPT_H) tm-constrs.h)
  # This pulls in tm-pred.h which contains inline functions wrapping up
  # predicates from the back-end so those functions must be discarded.
! # No big deal since gencondmd.c is a dummy file for non-GCC compilers.
  build/gencondmd.o : \
    BUILD_CFLAGS := $(filter-out -fkeep-inline-functions, $(BUILD_CFLAGS))
  
  # ...these are the programs themselves.
! build/genattr.o : genattr.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
! build/genattr-common.o : genattr-common.c $(RTL_BASE_H) $(BCONFIG_H)	\
    $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
! build/genattrtab.o : genattrtab.c $(RTL_BASE_H) $(OBSTACK_H)		\
    $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(GGC_H)	\
    $(READ_MD_H) $(GENSUPPORT_H) $(FNMATCH_H)
! build/genautomata.o : genautomata.c $(RTL_BASE_H) $(OBSTACK_H)		\
    $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(VEC_H)	\
    $(HASHTAB_H) $(GENSUPPORT_H) $(FNMATCH_H)
! build/gencheck.o : gencheck.c all-tree.def $(BCONFIG_H) $(GTM_H)	\
  	$(SYSTEM_H) $(CORETYPES_H) tree.def c-family/c-common.def	\
  	$(lang_tree_files) gimple.def
! build/genchecksum.o : genchecksum.c $(BCONFIG_H) $(SYSTEM_H) $(MD5_H)
! build/gencodes.o : gencodes.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H)
! build/genconditions.o : genconditions.c $(RTL_BASE_H) $(BCONFIG_H)	\
    $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(HASHTAB_H)		\
    $(READ_MD_H) $(GENSUPPORT_H)
! build/genconfig.o : genconfig.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H)
! build/genconstants.o : genconstants.c $(BCONFIG_H) $(SYSTEM_H)		\
    $(CORETYPES_H) errors.h $(READ_MD_H)
! build/genemit.o : genemit.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) internal-fn.def
! build/genenums.o : genenums.c $(BCONFIG_H) $(SYSTEM_H)			\
    $(CORETYPES_H) errors.h $(READ_MD_H)
! build/genextract.o : genextract.c $(RTL_BASE_H) $(BCONFIG_H)		\
    $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
! build/genflags.o : genflags.c $(RTL_BASE_H) $(OBSTACK_H) $(BCONFIG_H)	\
    $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
! build/gentarget-def.o : gentarget-def.c $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) $(RTL_BASE_H) errors.h $(READ_MD_H)		\
    $(GENSUPPORT_H) $(HASH_TABLE_H) target-insns.def
! build/gengenrtl.o : gengenrtl.c $(BCONFIG_H) $(SYSTEM_H) rtl.def
  
  # The gengtype generator program is special: Two versions are built.
  # One is for the build machine, and one is for the host to allow
--- 2787,2865 ----
  	$(COMPILER_FOR_BUILD) -c $(BUILD_COMPILERFLAGS) $(BUILD_CPPFLAGS) \
  		-o $@ $<
  
  # Header dependencies for the programs that generate source code.
  # These are library modules...
! build/errors.o : errors.cc $(BCONFIG_H) $(SYSTEM_H) errors.h
! build/gensupport.o: gensupport.cc $(BCONFIG_H) $(SYSTEM_H) 		\
    $(CORETYPES_H) $(GTM_H) $(RTL_BASE_H) $(OBSTACK_H) errors.h		\
    $(HASHTAB_H) $(READ_MD_H) $(GENSUPPORT_H) $(HASH_TABLE_H)
! build/ggc-none.o : ggc-none.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) 	\
    $(GGC_H)
! build/min-insn-modes.o : min-insn-modes.cc $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H)
! build/print-rtl.o: print-rtl.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H)	\
    $(GTM_H) $(RTL_BASE_H)
! build/read-md.o: read-md.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H)	\
    $(HASHTAB_H) errors.h $(READ_MD_H)
! build/read-rtl.o: read-rtl.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H)	\
    $(GTM_H) $(RTL_BASE_H) $(OBSTACK_H) $(HASHTAB_H) $(READ_MD_H)		\
    $(GENSUPPORT_H)
! build/rtl.o: rtl.cc $(BCONFIG_H) $(CORETYPES_H) $(GTM_H) $(SYSTEM_H)	\
    $(RTL_H) $(GGC_H) errors.h
! build/vec.o : vec.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(VEC_H)	\
    $(GGC_H) toplev.h $(DIAGNOSTIC_CORE_H) $(HASH_TABLE_H)
! build/hash-table.o : hash-table.cc $(BCONFIG_H) $(SYSTEM_H)		\
    $(CORETYPES_H) $(HASH_TABLE_H) $(GGC_H) toplev.h $(DIAGNOSTIC_CORE_H)
  build/sort.o : sort.cc $(BCONFIG_H) $(SYSTEM_H)
! build/inchash.o : inchash.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H)	\
    $(HASHTAB_H) inchash.h
! build/gencondmd.o : build/gencondmd.cc $(BCONFIG_H) $(SYSTEM_H)		\
    $(CORETYPES_H) $(GTM_H) insn-constants.h				\
    $(filter-out insn-flags.h, $(RTL_H) $(TM_P_H) $(FUNCTION_H) $(REGS_H) \
    $(RECOG_H) output.h $(FLAGS_H) $(RESOURCE_H) toplev.h $(DIAGNOSTIC_CORE_H) reload.h 	\
    $(EXCEPT_H) tm-constrs.h)
  # This pulls in tm-pred.h which contains inline functions wrapping up
  # predicates from the back-end so those functions must be discarded.
! # No big deal since gencondmd.cc is a dummy file for non-GCC compilers.
  build/gencondmd.o : \
    BUILD_CFLAGS := $(filter-out -fkeep-inline-functions, $(BUILD_CFLAGS))
  
  # ...these are the programs themselves.
! build/genattr.o : genattr.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
! build/genattr-common.o : genattr-common.cc $(RTL_BASE_H) $(BCONFIG_H)	\
    $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
! build/genattrtab.o : genattrtab.cc $(RTL_BASE_H) $(OBSTACK_H)		\
    $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(GGC_H)	\
    $(READ_MD_H) $(GENSUPPORT_H) $(FNMATCH_H)
! build/genautomata.o : genautomata.cc $(RTL_BASE_H) $(OBSTACK_H)		\
    $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(VEC_H)	\
    $(HASHTAB_H) $(GENSUPPORT_H) $(FNMATCH_H)
! build/gencheck.o : gencheck.cc all-tree.def $(BCONFIG_H) $(GTM_H)	\
  	$(SYSTEM_H) $(CORETYPES_H) tree.def c-family/c-common.def	\
  	$(lang_tree_files) gimple.def
! build/genchecksum.o : genchecksum.cc $(BCONFIG_H) $(SYSTEM_H) $(MD5_H)
! build/gencodes.o : gencodes.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H)
! build/genconditions.o : genconditions.cc $(RTL_BASE_H) $(BCONFIG_H)	\
    $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(HASHTAB_H)		\
    $(READ_MD_H) $(GENSUPPORT_H)
! build/genconfig.o : genconfig.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H)
! build/genconstants.o : genconstants.cc $(BCONFIG_H) $(SYSTEM_H)		\
    $(CORETYPES_H) errors.h $(READ_MD_H)
! build/genemit.o : genemit.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) internal-fn.def
! build/genenums.o : genenums.cc $(BCONFIG_H) $(SYSTEM_H)			\
    $(CORETYPES_H) errors.h $(READ_MD_H)
! build/genextract.o : genextract.cc $(RTL_BASE_H) $(BCONFIG_H)		\
    $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
! build/genflags.o : genflags.cc $(RTL_BASE_H) $(OBSTACK_H) $(BCONFIG_H)	\
    $(SYSTEM_H) $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
! build/gentarget-def.o : gentarget-def.cc $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) $(RTL_BASE_H) errors.h $(READ_MD_H)		\
    $(GENSUPPORT_H) $(HASH_TABLE_H) target-insns.def
! build/gengenrtl.o : gengenrtl.cc $(BCONFIG_H) $(SYSTEM_H) rtl.def
  
  # The gengtype generator program is special: Two versions are built.
  # One is for the build machine, and one is for the host to allow
*************** build/gengenrtl.o : gengenrtl.c $(BCONFI
*** 2857,2877 ****
  GENGTYPE_OBJS = gengtype.o gengtype-parse.o gengtype-state.o \
    gengtype-lex.o errors.o
  
! gengtype-lex.o build/gengtype-lex.o : gengtype-lex.c gengtype.h $(SYSTEM_H)
  CFLAGS-gengtype-lex.o += -DHOST_GENERATOR_FILE
  build/gengtype-lex.o: $(BCONFIG_H)
  
! gengtype-parse.o build/gengtype-parse.o : gengtype-parse.c gengtype.h \
    $(SYSTEM_H)
  CFLAGS-gengtype-parse.o += -DHOST_GENERATOR_FILE
  build/gengtype-parse.o: $(BCONFIG_H)
  
! gengtype-state.o build/gengtype-state.o: gengtype-state.c $(SYSTEM_H) \
    gengtype.h errors.h version.h $(HASHTAB_H) $(OBSTACK_H) \
    $(XREGEX_H)
  CFLAGS-gengtype-state.o += -DHOST_GENERATOR_FILE
  build/gengtype-state.o: $(BCONFIG_H)
! gengtype.o build/gengtype.o : gengtype.c $(SYSTEM_H) gengtype.h 	\
    rtl.def insn-notes.def errors.h version.h     		\
    $(HASHTAB_H) $(OBSTACK_H) $(XREGEX_H)
  CFLAGS-gengtype.o += -DHOST_GENERATOR_FILE
--- 2872,2892 ----
  GENGTYPE_OBJS = gengtype.o gengtype-parse.o gengtype-state.o \
    gengtype-lex.o errors.o
  
! gengtype-lex.o build/gengtype-lex.o : gengtype-lex.cc gengtype.h $(SYSTEM_H)
  CFLAGS-gengtype-lex.o += -DHOST_GENERATOR_FILE
  build/gengtype-lex.o: $(BCONFIG_H)
  
! gengtype-parse.o build/gengtype-parse.o : gengtype-parse.cc gengtype.h \
    $(SYSTEM_H)
  CFLAGS-gengtype-parse.o += -DHOST_GENERATOR_FILE
  build/gengtype-parse.o: $(BCONFIG_H)
  
! gengtype-state.o build/gengtype-state.o: gengtype-state.cc $(SYSTEM_H) \
    gengtype.h errors.h version.h $(HASHTAB_H) $(OBSTACK_H) \
    $(XREGEX_H)
  CFLAGS-gengtype-state.o += -DHOST_GENERATOR_FILE
  build/gengtype-state.o: $(BCONFIG_H)
! gengtype.o build/gengtype.o : gengtype.cc $(SYSTEM_H) gengtype.h 	\
    rtl.def insn-notes.def errors.h version.h     		\
    $(HASHTAB_H) $(OBSTACK_H) $(XREGEX_H)
  CFLAGS-gengtype.o += -DHOST_GENERATOR_FILE
*************** build/gengtype.o: $(BCONFIG_H)
*** 2879,2908 ****
  
  CFLAGS-errors.o += -DHOST_GENERATOR_FILE
  
! build/genmddeps.o: genmddeps.c $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H)	\
    errors.h $(READ_MD_H)
! build/genmodes.o : genmodes.c $(BCONFIG_H) $(SYSTEM_H) errors.h		\
    $(HASHTAB_H) machmode.def $(extra_modes_file)
! build/genopinit.o : genopinit.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H) optabs.def
! build/genoutput.o : genoutput.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
! build/genpeep.o : genpeep.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H) toplev.h		\
    $(DIAGNOSTIC_CORE_H)
! build/genpreds.o : genpreds.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) $(OBSTACK_H)
! build/genrecog.o : genrecog.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)		\
    $(HASH_TABLE_H) inchash.h
! build/genhooks.o : genhooks.c $(TARGET_DEF) $(C_TARGET_DEF)		\
    $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(BCONFIG_H) $(SYSTEM_H) errors.h
! build/genmddump.o : genmddump.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
! build/genmatch.o : genmatch.c $(BCONFIG_H) $(SYSTEM_H) \
    $(CORETYPES_H) errors.h $(HASH_TABLE_H) hash-map.h $(GGC_H) is-a.h \
    tree.def builtins.def internal-fn.def case-cfn-macros.h $(CPPLIB_H)
! build/gencfn-macros.o : gencfn-macros.c $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) errors.h $(HASH_TABLE_H) hash-set.h builtins.def	\
    internal-fn.def
  
--- 2894,2923 ----
  
  CFLAGS-errors.o += -DHOST_GENERATOR_FILE
  
! build/genmddeps.o: genmddeps.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H)	\
    errors.h $(READ_MD_H)
! build/genmodes.o : genmodes.cc $(BCONFIG_H) $(SYSTEM_H) errors.h		\
    $(HASHTAB_H) machmode.def $(extra_modes_file)
! build/genopinit.o : genopinit.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H) optabs.def
! build/genoutput.o : genoutput.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
! build/genpeep.o : genpeep.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(GENSUPPORT_H) toplev.h		\
    $(DIAGNOSTIC_CORE_H)
! build/genpreds.o : genpreds.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) $(OBSTACK_H)
! build/genrecog.o : genrecog.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)		\
    $(HASH_TABLE_H) inchash.h
! build/genhooks.o : genhooks.cc $(TARGET_DEF) $(C_TARGET_DEF)		\
    $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(BCONFIG_H) $(SYSTEM_H) errors.h
! build/genmddump.o : genmddump.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
! build/genmatch.o : genmatch.cc $(BCONFIG_H) $(SYSTEM_H) \
    $(CORETYPES_H) errors.h $(HASH_TABLE_H) hash-map.h $(GGC_H) is-a.h \
    tree.def builtins.def internal-fn.def case-cfn-macros.h $(CPPLIB_H)
! build/gencfn-macros.o : gencfn-macros.cc $(BCONFIG_H) $(SYSTEM_H)	\
    $(CORETYPES_H) errors.h $(HASH_TABLE_H) hash-set.h builtins.def	\
    internal-fn.def
  
*************** build/genmatch$(build_exeext) : $(BUILD_
*** 2950,2961 ****
  
  # These programs are not linked with the MD reader.
  build/gengtype$(build_exeext) : build/gengtype-lex.o build/gengtype-parse.o \
!               build/gengtype-state.o build/version.o build/errors.o
  
  gengtype$(exeext) : gengtype.o gengtype-lex.o gengtype-parse.o \
!               gengtype-state.o version.o errors.o $(LIBDEPS)
  	+$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
! 	    $(filter-out ($LIBDEPS), $^) $(LIBS)
  
  # Rule for the generator programs:
  $(genprog:%=build/gen%$(build_exeext)): build/gen%$(build_exeext): build/gen%.o $(BUILD_LIBDEPS)
--- 2965,2976 ----
  
  # These programs are not linked with the MD reader.
  build/gengtype$(build_exeext) : build/gengtype-lex.o build/gengtype-parse.o \
!               build/gengtype-state.o build/errors.o
  
  gengtype$(exeext) : gengtype.o gengtype-lex.o gengtype-parse.o \
!               gengtype-state.o errors.o $(LIBDEPS)
  	+$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
! 	    $(filter-out $(LIBDEPS), $^) $(LIBS)
  
  # Rule for the generator programs:
  $(genprog:%=build/gen%$(build_exeext)): build/gen%$(build_exeext): build/gen%.o $(BUILD_LIBDEPS)
*************** s-omp-device-properties-h: @omp_device_p
*** 2989,2995 ****
  # Generated source files for gengtype.  Prepend inclusion of
  # config.h/bconfig.h because AIX requires _LARGE_FILES to be defined before
  # any system header is included.
! gengtype-lex.c : gengtype-lex.l
  	-$(FLEX) $(FLEXFLAGS) -o$@ $< && { \
  	  echo '#ifdef HOST_GENERATOR_FILE' > $@.tmp; \
  	  echo '#include "config.h"'       >> $@.tmp; \
--- 3004,3010 ----
  # Generated source files for gengtype.  Prepend inclusion of
  # config.h/bconfig.h because AIX requires _LARGE_FILES to be defined before
  # any system header is included.
! gengtype-lex.cc : gengtype-lex.l
  	-$(FLEX) $(FLEXFLAGS) -o$@ $< && { \
  	  echo '#ifdef HOST_GENERATOR_FILE' > $@.tmp; \
  	  echo '#include "config.h"'       >> $@.tmp; \
*************** CFLAGS-cppdefault.o += $(PREPROCESSOR_DE
*** 3032,3051 ****
  # Note for the stamp targets, we run the program `true' instead of
  # having an empty command (nothing following the semicolon).
  
! # gcov-iov.c is run on the build machine to generate gcov-iov.h from version.c
! build/gcov-iov.o: gcov-iov.c $(BCONFIG_H) $(CORETYPES_H) $(GTM_H) \
!   $(SYSTEM_H) $(CORETYPES_H) $(TM_H)
  
! build/gcov-iov$(build_exeext): build/gcov-iov.o
  	+$(LINKER_FOR_BUILD) $(BUILD_LINKERFLAGS) $(BUILD_LDFLAGS) \
! 		build/gcov-iov.o -o $@
  
! gcov-iov.h: s-iov; @true
! s-iov: build/gcov-iov$(build_exeext) $(BASEVER) $(DEVPHASE)
! 	build/gcov-iov$(build_exeext) '$(BASEVER_c)' '$(DEVPHASE_c)' \
! 	    > tmp-gcov-iov.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-gcov-iov.h gcov-iov.h
! 	$(STAMP) s-iov
  
  # gcov.o needs $(ZLIBINC) added to the include flags.
  CFLAGS-gcov.o += $(ZLIBINC)
--- 3047,3069 ----
  # Note for the stamp targets, we run the program `true' instead of
  # having an empty command (nothing following the semicolon).
  
! # genversion.cc is run on the build machine to generate version.h
! CFLAGS-build/genversion.o += -DBASEVER=$(BASEVER_s) -DDATESTAMP=$(DATESTAMP_s) \
! 	-DREVISION=$(REVISION_s) \
! 	-DDEVPHASE=$(DEVPHASE_s) -DPKGVERSION=$(PKGVERSION_s) \
! 	-DBUGURL=$(BUGURL_s)
  
! build/genversion.o: genversion.cc $(BCONFIG_H) $(SYSTEM_H) $(srcdir)/DATESTAMP
! 
! build/genversion$(build_exeext): build/genversion.o
  	+$(LINKER_FOR_BUILD) $(BUILD_LINKERFLAGS) $(BUILD_LDFLAGS) \
! 		build/genversion.o -o $@
  
! version.h: s-version; @true
! s-version: build/genversion$(build_exeext)
! 	build/genversion$(build_exeext) > tmp-version.h
! 	$(SHELL) $(srcdir)/../move-if-change tmp-version.h version.h
! 	$(STAMP) s-version
  
  # gcov.o needs $(ZLIBINC) added to the include flags.
  CFLAGS-gcov.o += $(ZLIBINC)
*************** gcov-dump$(exeext): $(GCOV_DUMP_OBJS) $(
*** 3060,3066 ****
  		hash-table.o ggc-none.o\
  		$(LIBS) -o $@
  
! GCOV_TOOL_DEP_FILES = $(srcdir)/../libgcc/libgcov-util.c gcov-io.c $(GCOV_IO_H) \
    $(srcdir)/../libgcc/libgcov-driver.c $(srcdir)/../libgcc/libgcov-driver-system.c \
    $(srcdir)/../libgcc/libgcov-merge.c $(srcdir)/../libgcc/libgcov.h \
    $(SYSTEM_H) coretypes.h $(TM_H) $(CONFIG_H) version.h intl.h $(DIAGNOSTIC_H)
--- 3078,3084 ----
  		hash-table.o ggc-none.o\
  		$(LIBS) -o $@
  
! GCOV_TOOL_DEP_FILES = $(srcdir)/../libgcc/libgcov-util.c gcov-io.cc $(GCOV_IO_H) \
    $(srcdir)/../libgcc/libgcov-driver.c $(srcdir)/../libgcc/libgcov-driver-system.c \
    $(srcdir)/../libgcc/libgcov-merge.c $(srcdir)/../libgcc/libgcov.h \
    $(SYSTEM_H) coretypes.h $(TM_H) $(CONFIG_H) version.h intl.h $(DIAGNOSTIC_H)
*************** gcov-tool$(exeext): $(GCOV_TOOL_OBJS) $(
*** 3081,3087 ****
  # be rebuilt.
  
  # Build the include directories.
! stmp-int-hdrs: $(STMP_FIXINC) $(T_GLIMITS_H) $(USER_H) fixinc_list
  # Copy in the headers provided with gcc.
  #
  # The sed command gets just the last file name component;
--- 3099,3105 ----
  # be rebuilt.
  
  # Build the include directories.
! stmp-int-hdrs: $(STMP_FIXINC) $(T_GLIMITS_H) $(T_STDINT_GCC_H) $(USER_H) fixinc_list
  # Copy in the headers provided with gcc.
  #
  # The sed command gets just the last file name component;
*************** stmp-int-hdrs: $(STMP_FIXINC) $(T_GLIMIT
*** 3127,3133 ****
  	  cp $(srcdir)/ginclude/stdint-wrap.h include/stdint.h; \
  	  chmod a+r include/stdint.h; \
  	elif [ $(USE_GCC_STDINT) = provide ]; then \
! 	  cp $(srcdir)/ginclude/stdint-gcc.h include/stdint.h; \
  	  chmod a+r include/stdint.h; \
  	fi
  	set -e; for ml in `cat fixinc_list`; do \
--- 3145,3151 ----
  	  cp $(srcdir)/ginclude/stdint-wrap.h include/stdint.h; \
  	  chmod a+r include/stdint.h; \
  	elif [ $(USE_GCC_STDINT) = provide ]; then \
! 	  cp $(T_STDINT_GCC_H) include/stdint.h; \
  	  chmod a+r include/stdint.h; \
  	fi
  	set -e; for ml in `cat fixinc_list`; do \
*************** TEXI_GCCINT_FILES = gccint.texi gcc-comm
*** 3319,3325 ****
  	 loop.texi generic.texi gimple.texi plugins.texi optinfo.texi   \
  	 match-and-simplify.texi analyzer.texi ux.texi poly-int.texi
  
! TEXI_GCCINSTALL_FILES = install.texi install-old.texi fdl.texi		\
  	 gcc-common.texi gcc-vers.texi
  
  TEXI_CPPINT_FILES = cppinternals.texi gcc-common.texi gcc-vers.texi
--- 3337,3343 ----
  	 loop.texi generic.texi gimple.texi plugins.texi optinfo.texi   \
  	 match-and-simplify.texi analyzer.texi ux.texi poly-int.texi
  
! TEXI_GCCINSTALL_FILES = install.texi fdl.texi		\
  	 gcc-common.texi gcc-vers.texi
  
  TEXI_CPPINT_FILES = cppinternals.texi gcc-common.texi gcc-vers.texi
*************** $(build_htmldir)/gcc/index.html: $(TEXI_
*** 3376,3383 ****
  $(build_htmldir)/gccint/index.html: $(TEXI_GCCINT_FILES)
  $(build_htmldir)/cppinternals/index.html: $(TEXI_CPPINT_FILES)
  
! dvi:: doc/gcc.dvi doc/gccint.dvi doc/gccinstall.dvi doc/cpp.dvi \
!       doc/cppinternals.dvi lang.dvi
  
  doc/%.dvi: %.texi
  	$(TEXI2DVI) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<
--- 3394,3403 ----
  $(build_htmldir)/gccint/index.html: $(TEXI_GCCINT_FILES)
  $(build_htmldir)/cppinternals/index.html: $(TEXI_CPPINT_FILES)
  
! DVIFILES = doc/gcc.dvi doc/gccint.dvi doc/gccinstall.dvi doc/cpp.dvi \
!            doc/cppinternals.dvi
! 
! dvi:: $(DVIFILES) lang.dvi
  
  doc/%.dvi: %.texi
  	$(TEXI2DVI) -I . -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<
*************** mostlyclean: lang.mostlyclean
*** 3493,3499 ****
  	-rm -f build/*
  	-rm -f mddeps.mk
  # Delete other built files.
! 	-rm -f specs.h options.c options.h options-save.c
  # Delete the stamp and temporary files.
  	-rm -f s-* tmp-* stamp-* stmp-*
  	-rm -f */stamp-* */tmp-*
--- 3513,3519 ----
  	-rm -f build/*
  	-rm -f mddeps.mk
  # Delete other built files.
! 	-rm -f specs.h options.cc options.h options-save.cc
  # Delete the stamp and temporary files.
  	-rm -f s-* tmp-* stamp-* stmp-*
  	-rm -f */stamp-* */tmp-*
*************** mostlyclean: lang.mostlyclean
*** 3516,3522 ****
  	-rm -f gt-*
  	-rm -f gtype.state
  # Delete genchecksum outputs
! 	-rm -f *-checksum.c
  # Delete lock-and-run bits
  	-rm -rf linkfe.lck lock-stamp.*
  
--- 3536,3542 ----
  	-rm -f gt-*
  	-rm -f gtype.state
  # Delete genchecksum outputs
! 	-rm -f *-checksum.cc
  # Delete lock-and-run bits
  	-rm -rf linkfe.lck lock-stamp.*
  
*************** clean: mostlyclean lang.clean
*** 3527,3533 ****
  	-rm -f libgcc_s*
  	-rm -f libunwind*
  	-rm -f config.h tconfig.h bconfig.h tm_p.h tm.h
! 	-rm -f options.c options.h optionlist
  	-rm -f cs-*
  	-rm -f doc/*.dvi
  	-rm -f doc/*.pdf
--- 3547,3553 ----
  	-rm -f libgcc_s*
  	-rm -f libunwind*
  	-rm -f config.h tconfig.h bconfig.h tm_p.h tm.h
! 	-rm -f options.cc options.h optionlist
  	-rm -f cs-*
  	-rm -f doc/*.dvi
  	-rm -f doc/*.pdf
*************** distclean: clean lang.distclean
*** 3554,3560 ****
  	-rm -f *.asm
  	-rm -f site.exp site.bak testsuite/site.exp testsuite/site.bak
  	-rm -f testsuite/*.log testsuite/*.sum
! 	-cd testsuite && rm -f x *.x *.x? *.exe *.rpo *.o *.s *.S *.c
  	-cd testsuite && rm -f *.out *.gcov *$(coverageexts)
  	-rm -rf ${QMTEST_DIR} stamp-qmtest
  	-rm -f .gdbinit configargs.h
--- 3574,3580 ----
  	-rm -f *.asm
  	-rm -f site.exp site.bak testsuite/site.exp testsuite/site.bak
  	-rm -f testsuite/*.log testsuite/*.sum
! 	-cd testsuite && rm -f x *.x *.x? *.exe *.rpo *.o *.s *.S *.cc
  	-cd testsuite && rm -f *.out *.gcov *$(coverageexts)
  	-rm -rf ${QMTEST_DIR} stamp-qmtest
  	-rm -f .gdbinit configargs.h
*************** install-plugin: installdirs lang.install
*** 3671,3677 ****
  # We keep the directory structure for files in config, common/config or
  # c-family and .def files. All other files are flattened to a single directory.
  	$(mkinstalldirs) $(DESTDIR)$(plugin_includedir)
! 	headers=`echo $(PLUGIN_HEADERS) $$(cd $(srcdir); echo *.h *.def) | tr ' ' '\012' | sort -u`; \
  	srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`; \
  	for file in $$headers; do \
  	  if [ -f $$file ] ; then \
--- 3691,3697 ----
  # We keep the directory structure for files in config, common/config or
  # c-family and .def files. All other files are flattened to a single directory.
  	$(mkinstalldirs) $(DESTDIR)$(plugin_includedir)
! 	headers=`echo $(sort $(PLUGIN_HEADERS)) $$(cd $(srcdir); echo *.h *.def) | tr ' ' '\012' | sort -u`; \
  	srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`; \
  	for file in $$headers; do \
  	  if [ -f $$file ] ; then \
*************** $(DESTDIR)$(infodir)/%.info: doc/%.info
*** 3787,3792 ****
--- 3807,3824 ----
  	  else true; fi; \
  	else true; fi;
  
+ dvi__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+ 
+ install-dvi: $(DVIFILES) lang.install-dvi
+ 	@$(NORMAL_INSTALL)
+ 	test -z "$(dvidir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(dvidir)/gcc"
+ 	@list='$(DVIFILES)'; for p in $$list; do \
+ 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ 	  f=$(dvi__strip_dir) \
+ 	  echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/gcc/$$f'"; \
+ 	  $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/gcc/$$f"; \
+ 	done
+ 
  pdf__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
  
  install-pdf: $(PDFFILES) lang.install-pdf
*************** qmtest-gui: ${QMTEST_DIR}/context
*** 4281,4287 ****
  
  .PHONY: qmtest-g++
  
! # Run Paranoia on real.c.
  
  paranoia.o: $(srcdir)/../contrib/paranoia.cc $(CONFIG_H) $(SYSTEM_H) $(TREE_H)
  	g++ -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION)
--- 4313,4319 ----
  
  .PHONY: qmtest-g++
  
! # Run Paranoia on real.cc.
  
  paranoia.o: $(srcdir)/../contrib/paranoia.cc $(CONFIG_H) $(SYSTEM_H) $(TREE_H)
  	g++ -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION)
*************** paranoia: paranoia.o real.o $(LIBIBERTY)
*** 4291,4296 ****
--- 4323,4332 ----
  
  # These exist for maintenance purposes.
  
+ CTAGS=@CTAGS@
+ ETAGS=@ETAGS@
+ CSCOPE=@CSCOPE@
+ 
  # Update the tags table.
  TAGS: lang.tags
  	(cd $(srcdir);					\
*************** TAGS: lang.tags
*** 4300,4313 ****
  	    incs="$$incs --include $$dir/TAGS.sub";	\
  	  fi;						\
  	done;						\
! 	etags -o TAGS.sub c-family/*.h c-family/*.c c-family/*.cc \
  	      *.h *.c *.cc \
  	      ../include/*.h ../libiberty/*.c \
  	      ../libcpp/*.c ../libcpp/include/*.h \
  	      --language=none --regex="/\(char\|unsigned int\|int\|bool\|void\|HOST_WIDE_INT\|enum [A-Za-z_0-9]+\) [*]?\([A-Za-z_0-9]+\)/\2/" common.opt	\
  	      --language=none --regex="/\(DEF_RTL_EXPR\|DEFTREECODE\|DEFGSCODE\|DEFTIMEVAR\|DEFPARAM\|DEFPARAMENUM5\)[ ]?(\([A-Za-z_0-9]+\)/\2/" rtl.def tree.def gimple.def timevar.def \
  		; \
! 	etags --include TAGS.sub $$incs)
  
  # -----------------------------------------------------
  # Rules for generating translated message descriptions.
--- 4336,4349 ----
  	    incs="$$incs --include $$dir/TAGS.sub";	\
  	  fi;						\
  	done;						\
! 	$(ETAGS) -o TAGS.sub c-family/*.h c-family/*.cc c-family/*.cc \
  	      *.h *.c *.cc \
  	      ../include/*.h ../libiberty/*.c \
  	      ../libcpp/*.c ../libcpp/include/*.h \
  	      --language=none --regex="/\(char\|unsigned int\|int\|bool\|void\|HOST_WIDE_INT\|enum [A-Za-z_0-9]+\) [*]?\([A-Za-z_0-9]+\)/\2/" common.opt	\
  	      --language=none --regex="/\(DEF_RTL_EXPR\|DEFTREECODE\|DEFGSCODE\|DEFTIMEVAR\|DEFPARAM\|DEFPARAMENUM5\)[ ]?(\([A-Za-z_0-9]+\)/\2/" rtl.def tree.def gimple.def timevar.def \
  		; \
! 	$(ETAGS) --include TAGS.sub $$incs)
  
  # -----------------------------------------------------
  # Rules for generating translated message descriptions.
diff -Nrcpad gcc-11.3.0/gcc/README.Portability gcc-12.1.0/gcc/README.Portability
*** gcc-11.3.0/gcc/README.Portability	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/README.Portability	Fri May  6 07:30:56 2022
***************
*** 1,4 ****
! Copyright (C) 2000-2021 Free Software Foundation, Inc.
  
  This file is intended to contain a few notes about writing C code
  within GCC so that it compiles without error on the full range of
--- 1,4 ----
! Copyright (C) 2000-2022 Free Software Foundation, Inc.
  
  This file is intended to contain a few notes about writing C code
  within GCC so that it compiles without error on the full range of
diff -Nrcpad gcc-11.3.0/gcc/acinclude.m4 gcc-12.1.0/gcc/acinclude.m4
*** gcc-11.3.0/gcc/acinclude.m4	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/acinclude.m4	Fri May  6 07:30:56 2022
***************
*** 1,4 ****
! dnl Copyright (C) 2005-2021 Free Software Foundation, Inc.
  dnl
  dnl This file is part of GCC.
  dnl
--- 1,4 ----
! dnl Copyright (C) 2005-2022 Free Software Foundation, Inc.
  dnl
  dnl This file is part of GCC.
  dnl
*************** changequote([,])dnl
*** 422,429 ****
  ])],, [gcc_cv_initfini_array=no]);;
      esac
    else
!     AC_MSG_CHECKING(cross compile... guessing)
!     gcc_cv_initfini_array=no
    fi])
    enable_initfini_array=$gcc_cv_initfini_array
  ])
--- 422,439 ----
  ])],, [gcc_cv_initfini_array=no]);;
      esac
    else
!     case "${target}" in
!       aarch64*-linux-gnu*)
! 	# AArch64 postdates glibc support for .init_array/.fini_array,
! 	# so we don't need the preprocessor test above.
! 	gcc_cv_initfini_array=yes
! 	;;
! 
!       *)
! 	AC_MSG_CHECKING(cross compile... guessing)
! 	gcc_cv_initfini_array=no
! 	;;
!     esac
    fi])
    enable_initfini_array=$gcc_cv_initfini_array
  ])
*************** AC_DEFINE_UNQUOTED(HAVE_INITFINI_ARRAY_S
*** 432,494 ****
    [Define 0/1 if .init_array/.fini_array sections are available and working.])
  ])
  
- dnl # _gcc_COMPUTE_GAS_VERSION
- dnl # Used by gcc_GAS_VERSION_GTE_IFELSE
- dnl #
- dnl # WARNING:
- dnl # gcc_cv_as_gas_srcdir must be defined before this.
- dnl # This gross requirement will go away eventually.
- AC_DEFUN([_gcc_COMPUTE_GAS_VERSION],
- [gcc_cv_as_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
- for f in $gcc_cv_as_bfd_srcdir/configure \
-          $gcc_cv_as_gas_srcdir/configure \
-          $gcc_cv_as_gas_srcdir/configure.ac \
-          $gcc_cv_as_gas_srcdir/Makefile.in ; do
-   gcc_cv_gas_version=`sed -n -e 's/^[[ 	]]*VERSION=[[^0-9A-Za-z_]]*\([[0-9]]*\.[[0-9]]*.*\)/VERSION=\1/p' < $f`
-   if test x$gcc_cv_gas_version != x; then
-     break
-   fi
- done
- case $gcc_cv_gas_version in
-   VERSION=[[0-9]]*) ;;
-   *) AC_MSG_ERROR([[cannot find version of in-tree assembler]]);;
- esac
- gcc_cv_gas_major_version=`expr "$gcc_cv_gas_version" : "VERSION=\([[0-9]]*\)"`
- gcc_cv_gas_minor_version=`expr "$gcc_cv_gas_version" : "VERSION=[[0-9]]*\.\([[0-9]]*\)"`
- gcc_cv_gas_patch_version=`expr "$gcc_cv_gas_version" : "VERSION=[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)"`
- case $gcc_cv_gas_patch_version in
-   "") gcc_cv_gas_patch_version="0" ;;
- esac
- gcc_cv_gas_vers=`expr \( \( $gcc_cv_gas_major_version \* 1000 \) \
- 			    + $gcc_cv_gas_minor_version \) \* 1000 \
- 			    + $gcc_cv_gas_patch_version`
- ]) []dnl # _gcc_COMPUTE_GAS_VERSION
- 
- dnl # gcc_GAS_VERSION_GTE_IFELSE([elf,] major, minor, patchlevel,
- dnl #                     [command_if_true = :], [command_if_false = :])
- dnl # Check to see if the version of GAS is greater than or
- dnl # equal to the specified version.
- dnl #
- dnl # The first ifelse() shortens the shell code if the patchlevel
- dnl # is unimportant (the usual case).  The others handle missing
- dnl # commands.  Note that the tests are structured so that the most
- dnl # common version number cases are tested first.
- AC_DEFUN([_gcc_GAS_VERSION_GTE_IFELSE],
- [ifelse([$1], elf,
-  [if test $in_tree_gas_is_elf = yes \
-   &&],
-  [if]) test $gcc_cv_gas_vers -ge `expr \( \( $2 \* 1000 \) + $3 \) \* 1000 + $4`
-   then dnl
- ifelse([$5],,:,[$5])[]dnl
- ifelse([$6],,,[
-   else $6])
- fi])
- 
- AC_DEFUN([gcc_GAS_VERSION_GTE_IFELSE],
- [AC_REQUIRE([_gcc_COMPUTE_GAS_VERSION])dnl
- ifelse([$1], elf, [_gcc_GAS_VERSION_GTE_IFELSE($@)],
-                   [_gcc_GAS_VERSION_GTE_IFELSE(,$@)])])
- 
  dnl # gcc_GAS_FLAGS
  dnl # Used by gcc_GAS_CHECK_FEATURE 
  dnl #
--- 442,447 ----
*************** AC_DEFUN([gcc_GAS_FLAGS],
*** 517,529 ****
    esac])
  ])
  
! dnl gcc_GAS_CHECK_FEATURE(description, cv, [[elf,]major,minor,patchlevel],
  dnl [extra switches to as], [assembler input],
  dnl [extra testing logic], [command if feature available])
  dnl
! dnl Checks for an assembler feature.  If we are building an in-tree
! dnl gas, the feature is available if the associated assembler version
! dnl is greater than or equal to major.minor.patchlevel.  If not, then
  dnl ASSEMBLER INPUT is fed to the assembler and the feature is available
  dnl if assembly succeeds.  If EXTRA TESTING LOGIC is not the empty string,
  dnl then it is run instead of simply setting CV to "yes" - it is responsible
--- 470,480 ----
    esac])
  ])
  
! dnl gcc_GAS_CHECK_FEATURE(description, cv,
  dnl [extra switches to as], [assembler input],
  dnl [extra testing logic], [command if feature available])
  dnl
! dnl Checks for an assembler feature.
  dnl ASSEMBLER INPUT is fed to the assembler and the feature is available
  dnl if assembly succeeds.  If EXTRA TESTING LOGIC is not the empty string,
  dnl then it is run instead of simply setting CV to "yes" - it is responsible
*************** AC_DEFUN([gcc_GAS_CHECK_FEATURE],
*** 532,558 ****
  [AC_REQUIRE([gcc_GAS_FLAGS])dnl
  AC_CACHE_CHECK([assembler for $1], [$2],
   [[$2]=no
!   ifelse([$3],,,[dnl
!   if test $in_tree_gas = yes; then
!     gcc_GAS_VERSION_GTE_IFELSE($3, [[$2]=yes])
!   el])if test x$gcc_cv_as != x; then
!     AS_ECHO([ifelse(m4_substr([$5],0,1),[$], "[$5]", '[$5]')]) > conftest.s
!     if AC_TRY_COMMAND([$gcc_cv_as $gcc_cv_as_flags $4 -o conftest.o conftest.s >&AS_MESSAGE_LOG_FD])
      then
! 	ifelse([$6],, [$2]=yes, [$6])
      else
        echo "configure: failed program was" >&AS_MESSAGE_LOG_FD
        cat conftest.s >&AS_MESSAGE_LOG_FD
      fi
      rm -f conftest.o conftest.s
    fi])
! ifelse([$7],,,[dnl
  if test $[$2] = yes; then
!   $7
  fi])
! ifelse([$8],,,[dnl
  if test $[$2] != yes; then
!   $8
  fi])])
  
  dnl GCC_TARGET_TEMPLATE(KEY)
--- 483,506 ----
  [AC_REQUIRE([gcc_GAS_FLAGS])dnl
  AC_CACHE_CHECK([assembler for $1], [$2],
   [[$2]=no
!   if test x$gcc_cv_as != x; then
!     AS_ECHO([ifelse(m4_substr([$4],0,1),[$], "[$4]", '[$4]')]) > conftest.s
!     if AC_TRY_COMMAND([$gcc_cv_as $gcc_cv_as_flags $3 -o conftest.o conftest.s >&AS_MESSAGE_LOG_FD])
      then
! 	ifelse([$5],, [$2]=yes, [$5])
      else
        echo "configure: failed program was" >&AS_MESSAGE_LOG_FD
        cat conftest.s >&AS_MESSAGE_LOG_FD
      fi
      rm -f conftest.o conftest.s
    fi])
! ifelse([$6],,,[dnl
  if test $[$2] = yes; then
!   $6
  fi])
! ifelse([$7],,,[dnl
  if test $[$2] != yes; then
!   $7
  fi])])
  
  dnl GCC_TARGET_TEMPLATE(KEY)
diff -Nrcpad gcc-11.3.0/gcc/ada/.gitignore gcc-12.1.0/gcc/ada/.gitignore
*** gcc-11.3.0/gcc/ada/.gitignore	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/.gitignore	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,2 ----
+ # Sphinx build artifacts
+ doc/build
diff -Nrcpad gcc-11.3.0/gcc/ada/ChangeLog gcc-12.1.0/gcc/ada/ChangeLog
*** gcc-11.3.0/gcc/ada/ChangeLog	Thu Apr 21 07:59:16 2022
--- gcc-12.1.0/gcc/ada/ChangeLog	Fri May  6 07:30:56 2022
***************
*** 1,6 ****
! 2022-04-21  Release Manager
  
! 	* GCC 11.3.0 released.
  
  2022-03-24  Pascal Obry  <obry@adacore.com>
  
--- 1,17 ----
! 2022-05-06  Release Manager
  
! 	* GCC 12.1.0 released.
! 
! 2022-04-27  Sebastian Huber  <sebastian.huber@embedded-brains.de>
! 
! 	* tracebak.c: Add support for ARM RTEMS. Add support for RTEMS to PPC
! 	ELF.  Add support for RTEMS to SPARC.  Merge aarch64 support of Linux
! 	and RTEMS.
! 
! 2022-04-27  Pierre-Marie de Rodat  <derodat@adacore.com>
! 
! 	PR ada/104027
! 	* gnat1drv.adb: Remove the goto End_Of_Program.
  
  2022-03-24  Pascal Obry  <obry@adacore.com>
  
***************
*** 8,17 ****
  	* libgnat/g-sercom__mingw.adb (Close): Reset port handle to -1.
  	* libgnat/g-sercom__linux.adb (Close): Likewise.
  
! 2022-03-16  Richard Biener  <rguenther@suse.de>
! 
! 	Backported from master:
! 	2022-03-10  Richard Biener  <rguenther@suse.de>
  
  	PR ada/104861
  	* gcc-interface/Makefile.in (target_noncanonical): Substitute.
--- 19,25 ----
  	* libgnat/g-sercom__mingw.adb (Close): Reset port handle to -1.
  	* libgnat/g-sercom__linux.adb (Close): Likewise.
  
! 2022-03-10  Richard Biener  <rguenther@suse.de>
  
  	PR ada/104861
  	* gcc-interface/Makefile.in (target_noncanonical): Substitute.
***************
*** 19,32 ****
  
  2022-02-13  Maciej W. Rozycki  <macro@orcam.me.uk>
  
- 	Backported from master:
- 	2022-02-13  Maciej W. Rozycki  <macro@orcam.me.uk>
- 
  	PR ada/98724
  	PR ada/97504
  	* Makefile.rtl (LIBGNAT_TARGET_PAIRS) <alpha*-*-linux*>: Use
  	wraplf version of Aux_Long_Long_Float.
  
  2022-01-28  Eric Botcazou  <ebotcazou@adacore.com>
  
  	PR ada/104258
--- 27,47 ----
  
  2022-02-13  Maciej W. Rozycki  <macro@orcam.me.uk>
  
  	PR ada/98724
  	PR ada/97504
  	* Makefile.rtl (LIBGNAT_TARGET_PAIRS) <alpha*-*-linux*>: Use
  	wraplf version of Aux_Long_Long_Float.
  
+ 2022-01-31  Pierre-Marie de Rodat  <derodat@adacore.com>
+ 
+ 	* doc/share/conf.py: Remove spurious call to ".decode()".
+ 
+ 2022-01-31  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	PR ada/104027
+ 	* gnat1drv.adb (Gnat1drv): Only call Exit_Program when not
+ 	generating code, otherwise instead go to End_Of_Program.
+ 
  2022-01-28  Eric Botcazou  <ebotcazou@adacore.com>
  
  	PR ada/104258
***************
*** 35,52 ****
  
  2022-01-19  H.J. Lu  <hjl.tools@gmail.com>
  
- 	Backported from master:
- 	2022-01-19  H.J. Lu  <hjl.tools@gmail.com>
- 
  	PR ada/103538
  	* gcc-interface/Makefile.in (target_cpu): Set to x32 for
  	x86_64-linux-gnux32.
  
  2022-01-19  H.J. Lu  <hjl.tools@gmail.com>
  
- 	Backported from master:
- 	2022-01-19  H.J. Lu  <hjl.tools@gmail.com>
- 
  	PR ada/103538
  	* Makefile.rtl (LIBGNAT_TARGET_PAIRS): Add
  	$(TRASYM_DWARF_UNIX_PAIRS),
--- 50,61 ----
***************
*** 55,358 ****
  	(EXTRA_GNATRTL_NONTASKING_OBJS): Add $(TRASYM_DWARF_UNIX_OBJS)
  	and $(GNATRTL_128BIT_OBJS).
  
! 2021-10-20  Arnaud Charlet  <charlet@adacore.com>
  
! 	PR ada/100486
! 	* sem_prag.adb (Check_Valid_Library_Unit_Pragma): Do not raise an
! 	exception as part of the bootstrap.
  
! 2021-09-30  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* libgnat/s-dwalin.adb (Parse_Header): Tweak comments.
! 	(Read_Entry_Format_Array): Tweak exception message.
! 	(Symbolic_Address.Set_Result): Likewise.
  
! 2021-09-30  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* libgnat/s-dwalin.adb (To_File_Name): Fetch only the last string
! 	from the .debug_line_str section.
! 	(Symbolic_Address.Set_Result): Likewise.
  
! 2021-09-30  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* libgnat/s-dwalin.adb (Skip_Form): Fix cases of DW_FORM_addrx
! 	and DW_FORM_implicit_const.  Replace Constraint_Error with
! 	Dwarf_Error.
  
! 2021-09-30  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* libgnat/s-objrea.adb (Get_Load_Address): Return 0 for ELF.
  
! 2021-09-30  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* adaint.c (__gnat_get_executable_load_address): Add Win32 support.
! 	* libgnat/s-objrea.ads (Get_Xcode_Bounds): Fix typo in comment.
! 	(Object_File): Minor reformatting.
! 	(ELF_Object_File): Uncomment predicate.
! 	(PECOFF_Object_File): Likewise.
! 	(XCOFF32_Object_File): Likewise.
! 	* libgnat/s-objrea.adb: Minor reformatting throughout.
! 	(Get_Load_Address): Implement for PE-COFF.
! 	* libgnat/s-dwalin.ads: Remove clause for System.Storage_Elements
! 	and use consistent wording in comments.
! 	(Dwarf_Context): Set type of Low, High and Load_Address to Address.
! 	* libgnat/s-dwalin.adb (Get_Load_Displacement): New function.
! 	(Is_Inside): Call Get_Load_Displacement.
! 	(Low_Address): Likewise.
! 	(Open): Adjust to type change.
! 	(Aranges_Lookup): Change type of Addr to Address.
! 	(Read_Aranges_Entry): Likewise for Start and adjust.
! 	(Enable_Cach): Adjust to type change.
! 	(Symbolic_Address): Change type of Addr to Address.
! 	(Symbolic_Traceback): Call Get_Load_Displacement.
  
! 2021-09-30  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* libgnat/s-dwalin.ads: Remove clause for Ada.Exceptions.Traceback,
! 	add clause for System.Traceback_Entries and alphabetize.
! 	(AET): Delete.
! 	(STE): New package renaming.
! 	(Symbolic_Traceback): Adjust.
! 	* libgnat/s-dwalin.adb: Remove clauses for Ada.Exceptions.Traceback
! 	and System.Traceback_Entries.
! 	(Symbolic_Traceback): Adjust.
  
! 2021-09-30  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* libgnat/s-dwalin.ads: Adjust a few comments left and right.
! 	(Line_Info_Register): Comment out unused components.
! 	(Line_Info_Header): Add DWARF 5 support.
! 	(Dwarf_Context): Likewise.  Rename "prologue" into "header".
! 	* libgnat/s-dwalin.adb: Alphabetize "with" clauses.
! 	(DWARF constants): Add DWARF 5 support and reorder.
! 	(For_Each_Row): Adjust.
! 	(Initialize_Pass): Likewise.
! 	(Initialize_State_Machine): Likewise and fix typo.
! 	(Open): Add DWARF 5 support.
! 	(Parse_Prologue): Rename into...
! 	(Parse_Header): ...this and add DWARF 5 support.
! 	(Read_And_Execute_Isn): Rename into...
! 	(Read_And_Execute_Insn): ...this and adjust.
! 	(To_File_Name): Change parameter name and add DWARF 5 support.
! 	(Read_Entry_Format_Array): New procedure.
! 	(Skip_Form): Add DWARF 5 support and reorder.
! 	(Seek_Abbrev): Do not count entries and add DWARF 5 support.
! 	(Debug_Info_Lookup): Add DWARF 5 support.
! 	(Symbolic_Address.Set_Result): Likewise.
! 	(Symbolic_Address): Adjust.
  
! 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR ada/101970
! 	* exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Enum_Rep>:
! 	Use an unchecked conversion instead of a regular conversion in the
! 	enumeration case and remove Conversion_OK flag in the integer case.
! 	<Attribute_Pos>: Remove superfluous test.
  
! 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/decl.c (validate_size): Do not issue an error if the
! 	old size has overflowed.
  
! 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/decl.c (gnat_to_gnu_entity): For vector types, make
! 	the representative array the debug type.
  
! 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/utils.c (update_pointer_to): Set TYPE_CANONICAL on
! 	pointer and reference types.
  
! 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/utils.c (can_materialize_object_renaming_p): Do not
! 	call UI_Is_In_Int_Range on the result of Normalized_First_Bit.
  
! 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/decl.c (gnat_to_gnu_entity) <is_type>: Declare new
! 	constant.  Adjust error message issued by validate_size in the case
! 	of by-reference types.
! 	(validate_size): Always use the error strings passed by the caller.
  
! 2021-07-28  Release Manager
  
! 	* GCC 11.2.0 released.
  
! 2021-07-09  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/utils.c (finish_subprog_decl): Remove obsolete line.
  
! 2021-07-01  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR ada/101094
! 	* exp_attr.adb (Get_Integer_Type): Return an integer type with the
! 	same signedness as the input type.
  
! 2021-06-03  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Add PAT
! 	local constant and use it throughout.  If it is set, use a ref-all
! 	pointer type for the pointer-to-array field of the fat pointer type.
! 	<E_Array_Subtype>: Add PAT local constant and use it throughout.
  
! 2021-05-21  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Process
! 	the implementation type of a packed type implemented specially.
  
! 2021-05-21  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/decl.c (gnat_to_gnu_subprog_type): Always translate
! 	the Is_Pure flag into the "pure" attribute of GNU C.
  
! 2021-05-21  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/trans.c (Call_to_gnu): Restrict previous change
! 	to bitfields whose size is not equal to the type size.
! 	(gnat_to_gnu): Likewise.
  
! 2021-05-21  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/trans.c (gnat_to_gnu) <N_Simple_Return_Statement>:
! 	Put a SLOC on the assignment from the return value to the return
! 	object in the copy-in/copy-out case.
  
! 2021-04-27  Release Manager
  
! 	* GCC 11.1.0 released.
  
! 2021-04-21  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR ada/99360
! 	* exp_ch6.adb (Might_Have_Tasks): Return False when the type is the
! 	class-wide type of a predefined iterator type.
  
! 2021-04-13  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/misc.c (gnat_init): Set default range bits to 0.
! 	* gcc-interface/trans.c (extract_encoding): Delete.
! 	(decode_name): Likewise.
! 	(File_Name_to_gnu): New function.
! 	(gigi): Call it to translate file names.  Replace assertion on
! 	1-1 mapping between files and line maps with conditional error.
  
! 2021-04-11  Gerald Pfeifer  <gerald@pfeifer.com>
  
! 	* gnat_ugn.texi (Top): Avoid invalid "up" link.
  
! 2021-03-29  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR ada/99802
! 	* freeze.adb (Is_Full_Access_Aggregate): Call Is_Full_Access_Object
! 	on the name of an N_Assignment_Statement to spot full access.
  
! 2021-03-10  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/decl.c (gnat_to_gnu_entity): Build a TYPE_STUB_DECL
! 	for the main variant of an enumeration type declared as volatile.
  
! 2021-03-09  Mikael Pettersson  <mikpelinux@gmail.com>
  
! 	* raise-gcc.c: On Cygwin include mingw32.h to prevent
! 	windows.h from including x86intrin.h or emmintrin.h.
  
! 2021-03-05  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR ada/99264
! 	* init.c (__gnat_alternate_sta) [Linux]: Remove preprocessor test on
! 	MINSIGSTKSZ and bump size to 32KB.
! 	* libgnarl/s-osinte__linux.ads (Alternate_Stack_Size): Bump to 32KB.
  
! 2021-03-02  Mikael Pettersson  <mikpelinux@gmail.com>
  
! 	PR bootstrap/98590
! 	* cstreams.c: Ensure fileno_unlocked() is visible on Cygwin.
  
! 2021-03-02  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR ada/99095
! 	* sem_ch8.adb (Check_Constrained_Object): Restrict again the special
! 	optimization for limited types to non-array types except in the case
! 	of an extended return statement.
  
! 2021-03-02  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR ada/99020
! 	* sem_ch3.adb (Build_Discriminated_Subtype): Set the Cloned_Subtype
! 	only if the type is not private.
  
! 2021-02-26  YunQiang Su  <yunqiang.su@cipunited.com>
  
! 	PR ada/98996
! 	* Makefile.rtl: <mips*-*-linux*>
! 	add 128Bit operation file for MIPS N64 and N32 to
! 	LIBGNAT_TARGET_PAIRS and EXTRA_GNATRTL_NONTASKING_OBJS
  
! 2021-02-12  Arnaud Charlet  <charlet@adacore.com>
  
! 	* repinfo.ads, repinfo.adb (*SO_Ref*): Restore.
  
! 2021-02-03  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/decl.c (components_to_record): If the first component
! 	with rep clause is the _Parent field with variable size, temporarily
! 	set it aside when computing the internal layout of the REP part again.
! 	* gcc-interface/utils.c (finish_record_type): Revert to taking the
! 	maximum when merging sizes for all record types with rep clause.
! 	(merge_sizes): Put SPECIAL parameter last and adjust recursive calls.
  
! 2021-02-03  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Make the
! 	two fields of the fat pointer type addressable, and do not make the
! 	template type read-only.
! 	<E_Record_Type>: If the type has discriminants mark it as may_alias.
! 	* gcc-interface/utils.c (make_dummy_type): Likewise.
! 	(build_dummy_unc_pointer_types): Likewise.
  
! 2021-01-26  Marius Hillenbrand  <mhillen@linux.ibm.com>
  
! 	PR ada/98228
! 	* gcc-interface/utils.c (maybe_pad_type): Test the size of the new
! 	packable type instead of its alignment for addressability's sake.
  
! 2021-01-25  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/trans.c (make_covariant_thunk): Set the DECL_CONTEXT
! 	of the parameters and do not set TREE_PUBLIC on the thunk.
! 	(maybe_make_gnu_thunk): Pass the alias to the covariant thunk.
! 	* gcc-interface/utils.c (finish_subprog_decl): Set the DECL_CONTEXT
! 	of the parameters here...
! 	(begin_subprog_body): ...instead of here.
  
! 2021-01-19  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	PR ada/98740
! 	* gcc-interface/trans.c (add_decl_expr): Always mark TYPE_ADA_SIZE.
  
! 2021-01-14  Sebastian Huber  <sebastian.huber@embedded-brains.de>
  
! 	PR ada/98595
! 	* Makefile.rtl (LIBGNAT_TARGET_PAIRS) <riscv*-*-rtems*>: Use
! 	wraplf version of Aux_Long_Long_Float.
  
! 2021-01-03  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gnatvsn.ads: Bump copyright year.
  
! 2021-01-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	* gnat_ugn.texi: Bump @copying's copyright year.
! 	* gnat_rm.texi: Likewise.
  
! 2021-01-01  Jakub Jelinek  <jakub@redhat.com>
  
! 	* ChangeLog-2020: Rotate ChangeLog.  New file.
  
  
! Copyright (C) 2021 Free Software Foundation, Inc.
  
  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
--- 64,3734 ----
  	(EXTRA_GNATRTL_NONTASKING_OBJS): Add $(TRASYM_DWARF_UNIX_OBJS)
  	and $(GNATRTL_128BIT_OBJS).
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* adaint.c: Revert filename changes in comments.
! 	* ctrl_c.c (dummy_handler): Likewise.
! 	* gsocket.h: Likewise.
! 	* init.c (__gnat_error_handler): Likewise.
! 	* libgnarl/s-intman.ads: Likewise.
! 	* libgnarl/s-osinte__android.ads: Likewise.
! 	* libgnarl/s-osinte__darwin.ads: Likewise.
! 	* libgnarl/s-osinte__hpux.ads: Likewise.
! 	* libgnarl/s-osinte__linux.ads: Likewise.
! 	* libgnarl/s-osinte__qnx.ads: Likewise.
! 	* libgnarl/s-taskin.ads: Likewise.
! 	* rtfinal.c: Likewise.
  
! 2022-01-18  Martin Liska  <mliska@suse.cz>
  
! 	* Make-generated.in: Revert renaming changes.
! 	* Makefile.rtl: Likewise.
! 	* adadecode.cc: Moved to...
! 	* adadecode.c: ...here.
! 	* affinity.cc: Moved to...
! 	* affinity.c: ...here.
! 	* argv-lynxos178-raven-cert.cc: Moved to...
! 	* argv-lynxos178-raven-cert.c: ...here.
! 	* argv.cc: Moved to...
! 	* argv.c: ...here.
! 	* aux-io.cc: Moved to...
! 	* aux-io.c: ...here.
! 	* cio.cc: Moved to...
! 	* cio.c: ...here.
! 	* cstreams.cc: Moved to...
! 	* cstreams.c: ...here.
! 	* env.cc: Moved to...
! 	* env.c: ...here.
! 	* exit.cc: Moved to...
! 	* exit.c: ...here.
! 	* expect.cc: Moved to...
! 	* expect.c: ...here.
! 	* final.cc: Moved to...
! 	* final.c: ...here.
! 	* gcc-interface/Makefile.in:
! 	* init.cc: Moved to...
! 	* init.c: ...here.
! 	* initialize.cc: Moved to...
! 	* initialize.c: ...here.
! 	* libgnarl/thread.cc: Moved to...
! 	* libgnarl/thread.c: ...here.
! 	* link.cc: Moved to...
! 	* link.c: ...here.
! 	* locales.cc: Moved to...
! 	* locales.c: ...here.
! 	* mkdir.cc: Moved to...
! 	* mkdir.c: ...here.
! 	* raise.cc: Moved to...
! 	* raise.c: ...here.
! 	* rtfinal.cc: Moved to...
! 	* rtfinal.c: ...here.
! 	* rtinit.cc: Moved to...
! 	* rtinit.c: ...here.
! 	* s-oscons-tmplt.c (CND): Revert renaming changes.
! 	* seh_init.cc: Moved to...
! 	* seh_init.c: ...here.
! 	* sigtramp-armdroid.cc: Moved to...
! 	* sigtramp-armdroid.c: ...here.
! 	* sigtramp-ios.cc: Moved to...
! 	* sigtramp-ios.c: ...here.
! 	* sigtramp-qnx.cc: Moved to...
! 	* sigtramp-qnx.c: ...here.
! 	* sigtramp-vxworks.cc: Moved to...
! 	* sigtramp-vxworks.c: ...here.
! 	* socket.cc: Moved to...
! 	* socket.c: ...here.
! 	* tracebak.cc: Moved to...
! 	* tracebak.c: ...here.
! 	* version.cc: Moved to...
! 	* version.c: ...here.
! 	* vx_stack_info.cc: Moved to...
! 	* vx_stack_info.c: ...here.
  
! 2022-01-17  Martin Liska  <mliska@suse.cz>
  
! 	* Makefile.rtl: Rename .c names to .cc.
! 	* gcc-interface/Make-lang.in: Likewise.
! 	* gcc-interface/Makefile.in: Likewise.
  
! 2022-01-17  Martin Liska  <mliska@suse.cz>
  
! 	* Make-generated.in: Rename .c names to .cc.
! 	* adaint.c: Likewise.
! 	* ctrl_c.c (dummy_handler): Likewise.
! 	* gcc-interface/Makefile.in: Likewise.
! 	* gcc-interface/config-lang.in: Likewise.
! 	* gcc-interface/decl.cc (concat_name): Likewise.
! 	(init_gnat_decl): Likewise.
! 	* gcc-interface/gigi.h (concat_name): Likewise.
! 	(init_gnat_utils): Likewise.
! 	(build_call_raise_range): Likewise.
! 	(gnat_mark_addressable): Likewise.
! 	(gnat_protect_expr): Likewise.
! 	(gnat_rewrite_reference): Likewise.
! 	* gcc-interface/lang-specs.h (ADA_DUMPS_OPTIONS): Likewise.
! 	* gcc-interface/utils.cc (GTY): Likewise.
! 	(add_deferred_type_context): Likewise.
! 	(init_gnat_utils): Likewise.
! 	* gcc-interface/utils2.cc (gnat_stable_expr_p): Likewise.
! 	(gnat_protect_expr): Likewise.
! 	(gnat_stabilize_reference_1): Likewise.
! 	(gnat_rewrite_reference): Likewise.
! 	* gsocket.h: Likewise.
! 	* init.cc (__gnat_error_handler): Likewise.
! 	* libgnarl/s-intman.ads: Likewise.
! 	* libgnarl/s-osinte__android.ads: Likewise.
! 	* libgnarl/s-osinte__darwin.ads: Likewise.
! 	* libgnarl/s-osinte__hpux.ads: Likewise.
! 	* libgnarl/s-osinte__linux.ads: Likewise.
! 	* libgnarl/s-osinte__qnx.ads: Likewise.
! 	* libgnarl/s-taskin.ads: Likewise.
! 	* rtfinal.cc: Likewise.
! 	* s-oscons-tmplt.c (CND): Likewise.
! 	* set_targ.ads: Likewise.
  
! 2022-01-17  Martin Liska  <mliska@suse.cz>
  
! 	* adadecode.c: Moved to...
! 	* adadecode.cc: ...here.
! 	* affinity.c: Moved to...
! 	* affinity.cc: ...here.
! 	* argv-lynxos178-raven-cert.c: Moved to...
! 	* argv-lynxos178-raven-cert.cc: ...here.
! 	* argv.c: Moved to...
! 	* argv.cc: ...here.
! 	* aux-io.c: Moved to...
! 	* aux-io.cc: ...here.
! 	* cio.c: Moved to...
! 	* cio.cc: ...here.
! 	* cstreams.c: Moved to...
! 	* cstreams.cc: ...here.
! 	* env.c: Moved to...
! 	* env.cc: ...here.
! 	* exit.c: Moved to...
! 	* exit.cc: ...here.
! 	* expect.c: Moved to...
! 	* expect.cc: ...here.
! 	* final.c: Moved to...
! 	* final.cc: ...here.
! 	* gcc-interface/cuintp.c: Moved to...
! 	* gcc-interface/cuintp.cc: ...here.
! 	* gcc-interface/decl.c: Moved to...
! 	* gcc-interface/decl.cc: ...here.
! 	* gcc-interface/misc.c: Moved to...
! 	* gcc-interface/misc.cc: ...here.
! 	* gcc-interface/targtyps.c: Moved to...
! 	* gcc-interface/targtyps.cc: ...here.
! 	* gcc-interface/trans.c: Moved to...
! 	* gcc-interface/trans.cc: ...here.
! 	* gcc-interface/utils.c: Moved to...
! 	* gcc-interface/utils.cc: ...here.
! 	* gcc-interface/utils2.c: Moved to...
! 	* gcc-interface/utils2.cc: ...here.
! 	* init.c: Moved to...
! 	* init.cc: ...here.
! 	* initialize.c: Moved to...
! 	* initialize.cc: ...here.
! 	* libgnarl/thread.c: Moved to...
! 	* libgnarl/thread.cc: ...here.
! 	* link.c: Moved to...
! 	* link.cc: ...here.
! 	* locales.c: Moved to...
! 	* locales.cc: ...here.
! 	* mkdir.c: Moved to...
! 	* mkdir.cc: ...here.
! 	* raise.c: Moved to...
! 	* raise.cc: ...here.
! 	* rtfinal.c: Moved to...
! 	* rtfinal.cc: ...here.
! 	* rtinit.c: Moved to...
! 	* rtinit.cc: ...here.
! 	* seh_init.c: Moved to...
! 	* seh_init.cc: ...here.
! 	* sigtramp-armdroid.c: Moved to...
! 	* sigtramp-armdroid.cc: ...here.
! 	* sigtramp-ios.c: Moved to...
! 	* sigtramp-ios.cc: ...here.
! 	* sigtramp-qnx.c: Moved to...
! 	* sigtramp-qnx.cc: ...here.
! 	* sigtramp-vxworks.c: Moved to...
! 	* sigtramp-vxworks.cc: ...here.
! 	* socket.c: Moved to...
! 	* socket.cc: ...here.
! 	* tracebak.c: Moved to...
! 	* tracebak.cc: ...here.
! 	* version.c: Moved to...
! 	* version.cc: ...here.
! 	* vx_stack_info.c: Moved to...
! 	* vx_stack_info.cc: ...here.
  
! 2022-01-14  Andrew Pinski  <apinski@marvell.com>
  
! 	PR ada/104027
! 	* gnat1drv.adb (Gnat1drv): After Back_End.Gen_Or_Update_Object_File
! 	goto End_Of_Program.
  
! 2022-01-11  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/utils2.c (build_binary_op) <EQ_EXPR>: Relax a
! 	little the assertion on designated types of pointer types.
  
! 2022-01-11  Justin Squirek  <squirek@adacore.com>
  
! 	* sem_ch8.adb (Nvis_Messages): Add generic instance name to
! 	error message.
  
! 2022-01-11  Etienne Servais  <servais@adacore.com>
  
! 	* par-ch6.adb (Scan_Body_Or_Expression_Function): Accept left
! 	bracket as token to open an expression function.
  
! 2022-01-11  Justin Squirek  <squirek@adacore.com>
  
! 	* sem_warn.adb (Check_References): Add call to Has_Task instead
! 	of checking component type.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* exp_util.ads (Insert_Declaration): Remove spec.
! 	* exp_util.adb (Insert_Declaration): Remove body.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* exp_ch4.adb (Expand_N_Expression_With_Actions): Avoid
! 	redundant check.
! 	* exp_ch5.adb (Expand_N_If_Statement): Likewise.
! 	* exp_ch7.adb (Process_Declarations): Likewise.
! 	* sem_elab.adb (Freeze_Node_Location): Likewise.
! 	* exp_util.adb (Insert_Actions): Likewise.
! 	(Is_OK_PF_Pragma): Likewise.
! 	(Requires_Cleanup_Actions): Remove early exit; ordinary
! 	processing path will similarly do nothing.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* snames.ads-tmpl: Restore Name_Rpc.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* sem_ch4.adb (Analyze_Allocator): Move DECLARE block inside IF
! 	statement; refill code and comments.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* sem_ch4.adb (Analyze_Allocator): Fix comment.
! 	* sem_eval.ads (Compile-Time Known Values): Likewise.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* snames.ads-tmpl: Remove unreferenced names.
  
! 2022-01-11  Yannick Moy  <moy@adacore.com>
  
! 	* libgnat/s-aridou.adb (Double_Divide): Adjust proof of lemma
! 	Prove_Signs, call lemma for commutation of Big and
! 	multiplication.
! 	(Multiply_With_Ovflo_Check): Adjust postcondition of
! 	Prove_Pos_Int.
! 	(Scaled_Divide): Explicit commutation in the proof of lemma
! 	Prove_Multiplication, add new lemma Prove_Shift_Progress for
! 	congruence property that is not proved in a larger context, add
! 	assertions at the end of the loop to state loop invariant
! 	properties.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* sem_eval.ads (Compile_Time_Known_Value_Or_Aggr): Remove spec.
! 	* sem_eval.adb (Compile_Time_Known_Value_Or_Aggr): Remove body.
  
! 2022-01-11  Yannick Moy  <moy@adacore.com>
  
! 	* libgnat/a-strfix.adb (Insert, Overwrite): Add assertions.
  
! 2022-01-11  Arnaud Charlet  <charlet@adacore.com>
  
! 	PR ada/79724
! 	* osint.adb (Program_Name): Fix handling of suffixes.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* exp_ch4.adb (Size_In_Storage_Elements): Remove unnecessary
! 	DECLARE block; refill code and comments.
  
! 2022-01-11  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* sem_ch3.adb (Analyze_Subtype_Declaration): In the case of an array
! 	copy Packed_Array_Impl_Type manually here.
! 	(Copy_Array_Subtype_Attributes): Do not copy it here.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* exp_ch7.adb (Set_Block_Elab_Proc, Unnest_Block, Unnest_Loop,
! 	Unnest_Statement_List): Simplify with Make_Temporary.
! 	* exp_put_image.adb (Build_Image_Call): Likewise.
! 	* inline.adb (Generate_Subprogram_Body): Likewise.
! 	* sem_ch13.adb (Build_Predicate_Functions): Likewise.
! 	* sem_util.adb (New_Copy_Separate_List): Likewise.
  
! 2022-01-11  Etienne Servais  <servais@adacore.com>
  
! 	* sem_ch3.adb (Check_Dynamic_Object): Swap check order.
  
! 2022-01-11  Yannick Moy  <moy@adacore.com>
  
! 	* libgnat/s-casuti.adb: Add ghost code.
! 	* libgnat/s-casuti.ads: Add contracts.
  
! 2022-01-11  Claire Dross  <dross@adacore.com>
  
! 	* libgnat/a-tiinau.ads: Use a procedure for the Scan parameter
! 	instead of a function with side-effects.
! 	* libgnat/a-tiinau.adb: Idem.
! 	* libgnat/a-wtinau.ads: Idem.
! 	* libgnat/a-wtinau.adb: Idem.
! 	* libgnat/a-ztinau.ads: Idem.
! 	* libgnat/a-ztinau.adb: Idem.
! 	* libgnat/s-valint.ads: Change the function with side-effects
! 	Scan_Integer into a procedure
! 	* libgnat/s-vallli.ads: Idem.
! 	* libgnat/s-valllli.ads: Idem.
! 	* libgnat/s-vallllu.ads: Add SPARK_Mode and pragma to ignore
! 	assertions in instance.
! 	* libgnat/s-valllu.ads: Idem.
! 	* libgnat/s-valuns.ads: Idem.
! 	* libgnat/s-valuei.ads: Use a procedure for the
! 	Scan_Raw_Unsigned parameter instead of a function with
! 	side-effects and change the function with side-effects
! 	Scan_Integer into a procedure.
! 	* libgnat/s-valuei.adb: Idem.
! 	* libgnat/s-valuti.ads: Introduce a ghost function that scans an
! 	exponent and complete the postcondition of Scan_Exponent to also
! 	describe the value of Ptr after the call. Fix the postcondition
! 	of Scan_Underscore. Simplify the definition of
! 	Scan_Natural_Ghost.
! 	* libgnat/s-valuti.adb: Idem.
! 	* libgnat/s-valboo.ads, libgnat/s-valboo.adb: Update calls to
! 	First_Non_Space_Ghost.
! 	* libgnat/s-valueu.ads: Add functional contracts.
! 	* libgnat/s-valueu.adb: Idem.
  
! 2022-01-11  Yannick Moy  <moy@adacore.com>
  
! 	* libgnat/s-expmod.adb (Exp_Modular): Add assertions.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* errout.adb (Error_Msg_CRT): Build message with string
! 	concatenation; it is slightly repetitive but much easier to
! 	read.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* exp_ch11.adb (Expand_N_Exception_Declaration): Remove explicit
! 	initialization of the exceptF object.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* par-ch3.adb (P_Array_Type_Definition): Use
! 	Error_Msg_GNAT_Extension.
  
! 2022-01-11  Gary Dismukes  <dismukes@adacore.com>
  
! 	* sem_disp.adb (Check_Controlling_Type): Add test for the case
! 	where Subp is a subprogram associated with a protected
! 	subprogram and return Empty, unless Tagged_Type is the
! 	corresponding record type of the protected type.
  
! 2022-01-11  Yannick Moy  <moy@adacore.com>
  
! 	* libgnat/s-veboop.adb: Add ghost code for proof.
! 	* libgnat/s-veboop.ads: Add specification.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* exp_aggr.adb, exp_attr.adb, exp_ch3.adb, exp_ch7.adb,
! 	exp_dist.adb, exp_util.adb, freeze.adb, frontend.adb,
! 	inline.adb, itypes.adb, lib-load.adb, lib-xref.adb,
! 	libgnat/a-cfhase.adb, libgnat/a-cforse.adb,
! 	libgnat/a-chtgbo.adb, libgnat/a-crdlli.adb,
! 	libgnat/a-except.adb, libgnat/a-strfix.adb,
! 	libgnat/a-textio.adb, libgnat/a-tienau.adb,
! 	libgnat/a-tigeau.adb, libgnat/a-witeio.adb,
! 	libgnat/a-wtenau.adb, libgnat/a-wtgeau.adb,
! 	libgnat/a-ztenau.adb, libgnat/a-ztexio.adb,
! 	libgnat/a-ztgeau.adb, libgnat/g-comlin.adb,
! 	libgnat/g-debpoo.adb, libgnat/g-expect.adb,
! 	libgnat/s-fileio.adb, libgnat/s-memory.adb, libgnat/s-mmap.adb,
! 	libgnat/s-objrea.adb, libgnat/s-pehage.adb,
! 	libgnat/s-regpat.adb, libgnat/s-shasto.adb,
! 	libgnat/s-valued.adb, libgnat/s-valuef.adb, par-ch11.adb,
! 	par-ch4.adb, par-ch6.adb, par-ch9.adb, par_sco.adb,
! 	repinfo-input.adb, sem_cat.adb, sem_ch10.adb, sem_ch12.adb,
! 	sem_ch13.adb, sem_ch4.adb, sem_eval.adb, sem_prag.adb,
! 	sem_res.adb, sem_util.adb, sinput.adb, switch-c.adb: Fix style.
  
! 2022-01-11  Arnaud Charlet  <charlet@adacore.com>
  
! 	* exp_ch9.adb, gen_il-types.ads, make.adb, par-ch12.adb,
! 	sem_ch13.adb: Use membership tests.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* erroutc.ads, erroutc.adb (Is_Runtime_Raise): Global flag to
! 	connect status of initial messages and their continuation; we
! 	already have several flags like this.
! 	(Error_Msg_Object): Add field Warn_Runtime_Raise to connect
! 	error reporting (when problematic code is found) and removal
! 	(when problematic code is determined to be dead).
! 	* errout.adb (Error_Msg_Internal): Handle new field when
! 	recording a continuation message; propagate status from
! 	continuation to the preceding messages.
! 	(To_Be_Removed): For dead code remove both simple warnings and
! 	warnings about constraint errors that have been escalated to
! 	hard errors.
! 	(Set_Msg_Text): Recognize warnings about constraint errors that
! 	are escalated to hard errors.
! 	* errutil.adb (Error_Msg): Handle added field when recording a
! 	new message.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* errout.adb (Error_Msg_Internal): Propagate warnings-as-error
! 	flag from continuation message to its preceding messages.
  
! 2022-01-11  Arnaud Charlet  <charlet@adacore.com>
  
! 	* gnatvsn.ads (Current_Year): Update copyright notice, bump to
! 	2022.
! 	* ada_get_targ.adb: Update copyright notice.
! 	* adabkend.adb: Likewise.
! 	* adabkend.ads: Likewise.
! 	* adadecode.c: Likewise.
! 	* adadecode.h: Likewise.
! 	* adaint.c: Likewise.
! 	* adaint.h: Likewise.
! 	* affinity.c: Likewise.
! 	* ali-util.adb: Likewise.
! 	* ali-util.ads: Likewise.
! 	* ali.adb: Likewise.
! 	* ali.ads: Likewise.
! 	* alloc.ads: Likewise.
! 	* argv-lynxos178-raven-cert.c: Likewise.
! 	* argv.c: Likewise.
! 	* aspects.adb: Likewise.
! 	* aspects.ads: Likewise.
! 	* atree.adb: Likewise.
! 	* atree.ads: Likewise.
! 	* atree.h: Likewise.
! 	* aux-io.c: Likewise.
! 	* back_end.adb: Likewise.
! 	* back_end.ads: Likewise.
! 	* backend_utils.adb: Likewise.
! 	* backend_utils.ads: Likewise.
! 	* bcheck.adb: Likewise.
! 	* bcheck.ads: Likewise.
! 	* binde.adb: Likewise.
! 	* binde.ads: Likewise.
! 	* binderr.adb: Likewise.
! 	* binderr.ads: Likewise.
! 	* bindgen.adb: Likewise.
! 	* bindgen.ads: Likewise.
! 	* bindo-augmentors.adb: Likewise.
! 	* bindo-augmentors.ads: Likewise.
! 	* bindo-builders.adb: Likewise.
! 	* bindo-builders.ads: Likewise.
! 	* bindo-diagnostics.adb: Likewise.
! 	* bindo-diagnostics.ads: Likewise.
! 	* bindo-elaborators.adb: Likewise.
! 	* bindo-elaborators.ads: Likewise.
! 	* bindo-graphs.adb: Likewise.
! 	* bindo-graphs.ads: Likewise.
! 	* bindo-units.adb: Likewise.
! 	* bindo-units.ads: Likewise.
! 	* bindo-validators.adb: Likewise.
! 	* bindo-validators.ads: Likewise.
! 	* bindo-writers.adb: Likewise.
! 	* bindo-writers.ads: Likewise.
! 	* bindo.adb: Likewise.
! 	* bindo.ads: Likewise.
! 	* bindusg.adb: Likewise.
! 	* bindusg.ads: Likewise.
! 	* butil.adb: Likewise.
! 	* butil.ads: Likewise.
! 	* cal.c: Likewise.
! 	* casing.adb: Likewise.
! 	* casing.ads: Likewise.
! 	* checks.adb: Likewise.
! 	* checks.ads: Likewise.
! 	* cio.c: Likewise.
! 	* clean.adb: Likewise.
! 	* clean.ads: Likewise.
! 	* comperr.adb: Likewise.
! 	* comperr.ads: Likewise.
! 	* contracts.adb: Likewise.
! 	* contracts.ads: Likewise.
! 	* csets.adb: Likewise.
! 	* csets.ads: Likewise.
! 	* cstand.adb: Likewise.
! 	* cstand.ads: Likewise.
! 	* cstreams.c: Likewise.
! 	* ctrl_c.c: Likewise.
! 	* debug.ads: Likewise.
! 	* debug_a.adb: Likewise.
! 	* debug_a.ads: Likewise.
! 	* einfo-utils.adb: Likewise.
! 	* einfo-utils.ads: Likewise.
! 	* einfo.adb: Likewise.
! 	* einfo.ads: Likewise.
! 	* elists.adb: Likewise.
! 	* elists.ads: Likewise.
! 	* elists.h: Likewise.
! 	* env.c: Likewise.
! 	* env.h: Likewise.
! 	* err_vars.ads: Likewise.
! 	* errno.c: Likewise.
! 	* errout.adb: Likewise.
! 	* errout.ads: Likewise.
! 	* erroutc.adb: Likewise.
! 	* erroutc.ads: Likewise.
! 	* errutil.adb: Likewise.
! 	* errutil.ads: Likewise.
! 	* eval_fat.adb: Likewise.
! 	* eval_fat.ads: Likewise.
! 	* exit.c: Likewise.
! 	* exp_aggr.adb: Likewise.
! 	* exp_aggr.ads: Likewise.
! 	* exp_atag.adb: Likewise.
! 	* exp_atag.ads: Likewise.
! 	* exp_attr.adb: Likewise.
! 	* exp_attr.ads: Likewise.
! 	* exp_cg.adb: Likewise.
! 	* exp_cg.ads: Likewise.
! 	* exp_ch10.ads: Likewise.
! 	* exp_ch11.adb: Likewise.
! 	* exp_ch11.ads: Likewise.
! 	* exp_ch12.adb: Likewise.
! 	* exp_ch12.ads: Likewise.
! 	* exp_ch13.adb: Likewise.
! 	* exp_ch13.ads: Likewise.
! 	* exp_ch2.adb: Likewise.
! 	* exp_ch2.ads: Likewise.
! 	* exp_ch3.adb: Likewise.
! 	* exp_ch3.ads: Likewise.
! 	* exp_ch4.adb: Likewise.
! 	* exp_ch4.ads: Likewise.
! 	* exp_ch5.adb: Likewise.
! 	* exp_ch5.ads: Likewise.
! 	* exp_ch6.adb: Likewise.
! 	* exp_ch6.ads: Likewise.
! 	* exp_ch7.adb: Likewise.
! 	* exp_ch7.ads: Likewise.
! 	* exp_ch8.adb: Likewise.
! 	* exp_ch8.ads: Likewise.
! 	* exp_ch9.adb: Likewise.
! 	* exp_ch9.ads: Likewise.
! 	* exp_code.adb: Likewise.
! 	* exp_code.ads: Likewise.
! 	* exp_dbug.adb: Likewise.
! 	* exp_dbug.ads: Likewise.
! 	* exp_disp.adb: Likewise.
! 	* exp_disp.ads: Likewise.
! 	* exp_dist.adb: Likewise.
! 	* exp_dist.ads: Likewise.
! 	* exp_fixd.adb: Likewise.
! 	* exp_fixd.ads: Likewise.
! 	* exp_imgv.adb: Likewise.
! 	* exp_imgv.ads: Likewise.
! 	* exp_intr.adb: Likewise.
! 	* exp_intr.ads: Likewise.
! 	* exp_pakd.adb: Likewise.
! 	* exp_pakd.ads: Likewise.
! 	* exp_prag.adb: Likewise.
! 	* exp_prag.ads: Likewise.
! 	* exp_put_image.adb: Likewise.
! 	* exp_put_image.ads: Likewise.
! 	* exp_sel.adb: Likewise.
! 	* exp_sel.ads: Likewise.
! 	* exp_smem.adb: Likewise.
! 	* exp_smem.ads: Likewise.
! 	* exp_spark.adb: Likewise.
! 	* exp_spark.ads: Likewise.
! 	* exp_strm.adb: Likewise.
! 	* exp_strm.ads: Likewise.
! 	* exp_tss.adb: Likewise.
! 	* exp_tss.ads: Likewise.
! 	* exp_unst.adb: Likewise.
! 	* exp_unst.ads: Likewise.
! 	* exp_util.adb: Likewise.
! 	* exp_util.ads: Likewise.
! 	* expander.adb: Likewise.
! 	* expander.ads: Likewise.
! 	* expect.c: Likewise.
! 	* fe.h: Likewise.
! 	* final.c: Likewise.
! 	* fmap.adb: Likewise.
! 	* fmap.ads: Likewise.
! 	* fname-sf.adb: Likewise.
! 	* fname-sf.ads: Likewise.
! 	* fname-uf.adb: Likewise.
! 	* fname-uf.ads: Likewise.
! 	* fname.adb: Likewise.
! 	* fname.ads: Likewise.
! 	* freeze.adb: Likewise.
! 	* freeze.ads: Likewise.
! 	* frontend.adb: Likewise.
! 	* frontend.ads: Likewise.
! 	* gen_il-fields.ads: Likewise.
! 	* gen_il-gen-gen_entities.adb: Likewise.
! 	* gen_il-gen-gen_nodes.adb: Likewise.
! 	* gen_il-gen.adb: Likewise.
! 	* gen_il-gen.ads: Likewise.
! 	* gen_il-internals.adb: Likewise.
! 	* gen_il-internals.ads: Likewise.
! 	* gen_il-main.adb: Likewise.
! 	* gen_il-types.ads: Likewise.
! 	* gen_il.adb: Likewise.
! 	* gen_il.ads: Likewise.
! 	* get_scos.adb: Likewise.
! 	* get_scos.ads: Likewise.
! 	* get_targ.adb: Likewise.
! 	* get_targ.ads: Likewise.
! 	* ghost.adb: Likewise.
! 	* ghost.ads: Likewise.
! 	* gnat1drv.adb: Likewise.
! 	* gnat1drv.ads: Likewise.
! 	* gnat_cuda.adb: Likewise.
! 	* gnat_cuda.ads: Likewise.
! 	* gnatbind.adb: Likewise.
! 	* gnatbind.ads: Likewise.
! 	* gnatchop.adb: Likewise.
! 	* gnatclean.adb: Likewise.
! 	* gnatcmd.adb: Likewise.
! 	* gnatcmd.ads: Likewise.
! 	* gnatdll.adb: Likewise.
! 	* gnatfind.adb: Likewise.
! 	* gnatkr.adb: Likewise.
! 	* gnatkr.ads: Likewise.
! 	* gnatlink.adb: Likewise.
! 	* gnatlink.ads: Likewise.
! 	* gnatls.adb: Likewise.
! 	* gnatls.ads: Likewise.
! 	* gnatmake.adb: Likewise.
! 	* gnatmake.ads: Likewise.
! 	* gnatname.adb: Likewise.
! 	* gnatname.ads: Likewise.
! 	* gnatprep.adb: Likewise.
! 	* gnatprep.ads: Likewise.
! 	* gnatvsn.adb: Likewise.
! 	* gnatxref.adb: Likewise.
! 	* gprep.adb: Likewise.
! 	* gprep.ads: Likewise.
! 	* gsocket.h: Likewise.
! 	* hostparm.ads: Likewise.
! 	* impunit.adb: Likewise.
! 	* impunit.ads: Likewise.
! 	* indepsw-aix.adb: Likewise.
! 	* indepsw-darwin.adb: Likewise.
! 	* indepsw-gnu.adb: Likewise.
! 	* indepsw.adb: Likewise.
! 	* indepsw.ads: Likewise.
! 	* init.c: Likewise.
! 	* initialize.c: Likewise.
! 	* inline.adb: Likewise.
! 	* inline.ads: Likewise.
! 	* itypes.adb: Likewise.
! 	* itypes.ads: Likewise.
! 	* krunch.adb: Likewise.
! 	* krunch.ads: Likewise.
! 	* layout.adb: Likewise.
! 	* layout.ads: Likewise.
! 	* lib-list.adb: Likewise.
! 	* lib-load.adb: Likewise.
! 	* lib-load.ads: Likewise.
! 	* lib-sort.adb: Likewise.
! 	* lib-util.adb: Likewise.
! 	* lib-util.ads: Likewise.
! 	* lib-writ.adb: Likewise.
! 	* lib-writ.ads: Likewise.
! 	* lib-xref-spark_specific.adb: Likewise.
! 	* lib-xref.adb: Likewise.
! 	* lib-xref.ads: Likewise.
! 	* lib.adb: Likewise.
! 	* lib.ads: Likewise.
! 	* libgnarl/a-astaco.adb: Likewise.
! 	* libgnarl/a-dispat.adb: Likewise.
! 	* libgnarl/a-dynpri.adb: Likewise.
! 	* libgnarl/a-etgrbu.ads: Likewise.
! 	* libgnarl/a-exetim__darwin.adb: Likewise.
! 	* libgnarl/a-exetim__default.ads: Likewise.
! 	* libgnarl/a-exetim__mingw.adb: Likewise.
! 	* libgnarl/a-exetim__mingw.ads: Likewise.
! 	* libgnarl/a-exetim__posix.adb: Likewise.
! 	* libgnarl/a-interr.adb: Likewise.
! 	* libgnarl/a-interr.ads: Likewise.
! 	* libgnarl/a-intnam.ads: Likewise.
! 	* libgnarl/a-intnam__aix.ads: Likewise.
! 	* libgnarl/a-intnam__darwin.ads: Likewise.
! 	* libgnarl/a-intnam__dragonfly.ads: Likewise.
! 	* libgnarl/a-intnam__dummy.ads: Likewise.
! 	* libgnarl/a-intnam__freebsd.ads: Likewise.
! 	* libgnarl/a-intnam__hpux.ads: Likewise.
! 	* libgnarl/a-intnam__linux.ads: Likewise.
! 	* libgnarl/a-intnam__lynxos.ads: Likewise.
! 	* libgnarl/a-intnam__mingw.ads: Likewise.
! 	* libgnarl/a-intnam__qnx.ads: Likewise.
! 	* libgnarl/a-intnam__rtems.ads: Likewise.
! 	* libgnarl/a-intnam__solaris.ads: Likewise.
! 	* libgnarl/a-intnam__vxworks.ads: Likewise.
! 	* libgnarl/a-reatim.adb: Likewise.
! 	* libgnarl/a-reatim.ads: Likewise.
! 	* libgnarl/a-retide.adb: Likewise.
! 	* libgnarl/a-retide.ads: Likewise.
! 	* libgnarl/a-rttiev.adb: Likewise.
! 	* libgnarl/a-rttiev.ads: Likewise.
! 	* libgnarl/a-synbar.adb: Likewise.
! 	* libgnarl/a-synbar.ads: Likewise.
! 	* libgnarl/a-synbar__posix.adb: Likewise.
! 	* libgnarl/a-synbar__posix.ads: Likewise.
! 	* libgnarl/a-sytaco.adb: Likewise.
! 	* libgnarl/a-sytaco.ads: Likewise.
! 	* libgnarl/a-tasatt.adb: Likewise.
! 	* libgnarl/a-tasatt.ads: Likewise.
! 	* libgnarl/a-taside.adb: Likewise.
! 	* libgnarl/a-taside.ads: Likewise.
! 	* libgnarl/a-tasini.adb: Likewise.
! 	* libgnarl/a-tasini.ads: Likewise.
! 	* libgnarl/a-taster.adb: Likewise.
! 	* libgnarl/g-boubuf.adb: Likewise.
! 	* libgnarl/g-boubuf.ads: Likewise.
! 	* libgnarl/g-boumai.ads: Likewise.
! 	* libgnarl/g-semaph.adb: Likewise.
! 	* libgnarl/g-semaph.ads: Likewise.
! 	* libgnarl/g-signal.adb: Likewise.
! 	* libgnarl/g-signal.ads: Likewise.
! 	* libgnarl/g-tastus.ads: Likewise.
! 	* libgnarl/g-thread.adb: Likewise.
! 	* libgnarl/g-thread.ads: Likewise.
! 	* libgnarl/i-vxinco.adb: Likewise.
! 	* libgnarl/i-vxinco.ads: Likewise.
! 	* libgnarl/s-inmaop.ads: Likewise.
! 	* libgnarl/s-inmaop__dummy.adb: Likewise.
! 	* libgnarl/s-inmaop__hwint.adb: Likewise.
! 	* libgnarl/s-inmaop__posix.adb: Likewise.
! 	* libgnarl/s-interr.adb: Likewise.
! 	* libgnarl/s-interr.ads: Likewise.
! 	* libgnarl/s-interr__dummy.adb: Likewise.
! 	* libgnarl/s-interr__hwint.adb: Likewise.
! 	* libgnarl/s-interr__sigaction.adb: Likewise.
! 	* libgnarl/s-interr__vxworks.adb: Likewise.
! 	* libgnarl/s-intman.ads: Likewise.
! 	* libgnarl/s-intman__android.adb: Likewise.
! 	* libgnarl/s-intman__dummy.adb: Likewise.
! 	* libgnarl/s-intman__lynxos.adb: Likewise.
! 	* libgnarl/s-intman__mingw.adb: Likewise.
! 	* libgnarl/s-intman__posix.adb: Likewise.
! 	* libgnarl/s-intman__qnx.adb: Likewise.
! 	* libgnarl/s-intman__rtems.adb: Likewise.
! 	* libgnarl/s-intman__rtems.ads: Likewise.
! 	* libgnarl/s-intman__solaris.adb: Likewise.
! 	* libgnarl/s-intman__susv3.adb: Likewise.
! 	* libgnarl/s-intman__vxworks.adb: Likewise.
! 	* libgnarl/s-intman__vxworks.ads: Likewise.
! 	* libgnarl/s-linux.ads: Likewise.
! 	* libgnarl/s-linux__alpha.ads: Likewise.
! 	* libgnarl/s-linux__android.ads: Likewise.
! 	* libgnarl/s-linux__hppa.ads: Likewise.
! 	* libgnarl/s-linux__mips.ads: Likewise.
! 	* libgnarl/s-linux__riscv.ads: Likewise.
! 	* libgnarl/s-linux__sparc.ads: Likewise.
! 	* libgnarl/s-linux__x32.ads: Likewise.
! 	* libgnarl/s-mudido.adb: Likewise.
! 	* libgnarl/s-mudido__affinity.adb: Likewise.
! 	* libgnarl/s-osinte__aix.adb: Likewise.
! 	* libgnarl/s-osinte__aix.ads: Likewise.
! 	* libgnarl/s-osinte__android.adb: Likewise.
! 	* libgnarl/s-osinte__android.ads: Likewise.
! 	* libgnarl/s-osinte__darwin.adb: Likewise.
! 	* libgnarl/s-osinte__darwin.ads: Likewise.
! 	* libgnarl/s-osinte__dragonfly.adb: Likewise.
! 	* libgnarl/s-osinte__dragonfly.ads: Likewise.
! 	* libgnarl/s-osinte__dummy.ads: Likewise.
! 	* libgnarl/s-osinte__freebsd.adb: Likewise.
! 	* libgnarl/s-osinte__freebsd.ads: Likewise.
! 	* libgnarl/s-osinte__gnu.adb: Likewise.
! 	* libgnarl/s-osinte__gnu.ads: Likewise.
! 	* libgnarl/s-osinte__hpux-dce.adb: Likewise.
! 	* libgnarl/s-osinte__hpux-dce.ads: Likewise.
! 	* libgnarl/s-osinte__hpux.ads: Likewise.
! 	* libgnarl/s-osinte__kfreebsd-gnu.ads: Likewise.
! 	* libgnarl/s-osinte__linux.ads: Likewise.
! 	* libgnarl/s-osinte__lynxos178.adb: Likewise.
! 	* libgnarl/s-osinte__lynxos178e.ads: Likewise.
! 	* libgnarl/s-osinte__mingw.ads: Likewise.
! 	* libgnarl/s-osinte__posix.adb: Likewise.
! 	* libgnarl/s-osinte__qnx.adb: Likewise.
! 	* libgnarl/s-osinte__qnx.ads: Likewise.
! 	* libgnarl/s-osinte__rtems.adb: Likewise.
! 	* libgnarl/s-osinte__rtems.ads: Likewise.
! 	* libgnarl/s-osinte__solaris.adb: Likewise.
! 	* libgnarl/s-osinte__solaris.ads: Likewise.
! 	* libgnarl/s-osinte__vxworks.adb: Likewise.
! 	* libgnarl/s-osinte__vxworks.ads: Likewise.
! 	* libgnarl/s-osinte__x32.adb: Likewise.
! 	* libgnarl/s-proinf.adb: Likewise.
! 	* libgnarl/s-proinf.ads: Likewise.
! 	* libgnarl/s-putaim.adb: Likewise.
! 	* libgnarl/s-putaim.ads: Likewise.
! 	* libgnarl/s-qnx.ads: Likewise.
! 	* libgnarl/s-solita.adb: Likewise.
! 	* libgnarl/s-solita.ads: Likewise.
! 	* libgnarl/s-stusta.adb: Likewise.
! 	* libgnarl/s-stusta.ads: Likewise.
! 	* libgnarl/s-taasde.adb: Likewise.
! 	* libgnarl/s-taasde.ads: Likewise.
! 	* libgnarl/s-tadeca.adb: Likewise.
! 	* libgnarl/s-tadeca.ads: Likewise.
! 	* libgnarl/s-tadert.adb: Likewise.
! 	* libgnarl/s-tadert.ads: Likewise.
! 	* libgnarl/s-taenca.adb: Likewise.
! 	* libgnarl/s-taenca.ads: Likewise.
! 	* libgnarl/s-taprob.adb: Likewise.
! 	* libgnarl/s-taprob.ads: Likewise.
! 	* libgnarl/s-taprop.ads: Likewise.
! 	* libgnarl/s-taprop__dummy.adb: Likewise.
! 	* libgnarl/s-taprop__hpux-dce.adb: Likewise.
! 	* libgnarl/s-taprop__linux.adb: Likewise.
! 	* libgnarl/s-taprop__mingw.adb: Likewise.
! 	* libgnarl/s-taprop__posix.adb: Likewise.
! 	* libgnarl/s-taprop__qnx.adb: Likewise.
! 	* libgnarl/s-taprop__rtems.adb: Likewise.
! 	* libgnarl/s-taprop__solaris.adb: Likewise.
! 	* libgnarl/s-taprop__vxworks.adb: Likewise.
! 	* libgnarl/s-tarest.adb: Likewise.
! 	* libgnarl/s-tarest.ads: Likewise.
! 	* libgnarl/s-tasdeb.adb: Likewise.
! 	* libgnarl/s-tasdeb.ads: Likewise.
! 	* libgnarl/s-tasinf.adb: Likewise.
! 	* libgnarl/s-tasinf.ads: Likewise.
! 	* libgnarl/s-tasinf__linux.adb: Likewise.
! 	* libgnarl/s-tasinf__linux.ads: Likewise.
! 	* libgnarl/s-tasinf__mingw.adb: Likewise.
! 	* libgnarl/s-tasinf__mingw.ads: Likewise.
! 	* libgnarl/s-tasinf__solaris.adb: Likewise.
! 	* libgnarl/s-tasinf__solaris.ads: Likewise.
! 	* libgnarl/s-tasinf__vxworks.ads: Likewise.
! 	* libgnarl/s-tasini.adb: Likewise.
! 	* libgnarl/s-tasini.ads: Likewise.
! 	* libgnarl/s-taskin.adb: Likewise.
! 	* libgnarl/s-taskin.ads: Likewise.
! 	* libgnarl/s-taspri__dummy.ads: Likewise.
! 	* libgnarl/s-taspri__hpux-dce.ads: Likewise.
! 	* libgnarl/s-taspri__lynxos.ads: Likewise.
! 	* libgnarl/s-taspri__mingw.ads: Likewise.
! 	* libgnarl/s-taspri__posix-noaltstack.ads: Likewise.
! 	* libgnarl/s-taspri__posix.ads: Likewise.
! 	* libgnarl/s-taspri__solaris.ads: Likewise.
! 	* libgnarl/s-taspri__vxworks.ads: Likewise.
! 	* libgnarl/s-tasque.adb: Likewise.
! 	* libgnarl/s-tasque.ads: Likewise.
! 	* libgnarl/s-tasren.adb: Likewise.
! 	* libgnarl/s-tasren.ads: Likewise.
! 	* libgnarl/s-tasres.ads: Likewise.
! 	* libgnarl/s-tassta.adb: Likewise.
! 	* libgnarl/s-tassta.ads: Likewise.
! 	* libgnarl/s-tasuti.adb: Likewise.
! 	* libgnarl/s-tasuti.ads: Likewise.
! 	* libgnarl/s-tataat.adb: Likewise.
! 	* libgnarl/s-tataat.ads: Likewise.
! 	* libgnarl/s-tpinop.adb: Likewise.
! 	* libgnarl/s-tpinop.ads: Likewise.
! 	* libgnarl/s-tpoaal.adb: Likewise.
! 	* libgnarl/s-tpoben.adb: Likewise.
! 	* libgnarl/s-tpoben.ads: Likewise.
! 	* libgnarl/s-tpobmu.adb: Likewise.
! 	* libgnarl/s-tpobmu.ads: Likewise.
! 	* libgnarl/s-tpobop.adb: Likewise.
! 	* libgnarl/s-tpobop.ads: Likewise.
! 	* libgnarl/s-tpopmo.adb: Likewise.
! 	* libgnarl/s-tpopsp__posix-foreign.adb: Likewise.
! 	* libgnarl/s-tpopsp__posix.adb: Likewise.
! 	* libgnarl/s-tpopsp__solaris.adb: Likewise.
! 	* libgnarl/s-tpopsp__tls.adb: Likewise.
! 	* libgnarl/s-tpopsp__vxworks-rtp.adb: Likewise.
! 	* libgnarl/s-tpopsp__vxworks-tls.adb: Likewise.
! 	* libgnarl/s-tpopsp__vxworks.adb: Likewise.
! 	* libgnarl/s-tporft.adb: Likewise.
! 	* libgnarl/s-tposen.adb: Likewise.
! 	* libgnarl/s-tposen.ads: Likewise.
! 	* libgnarl/s-vxwext.adb: Likewise.
! 	* libgnarl/s-vxwext.ads: Likewise.
! 	* libgnarl/s-vxwext__kernel-smp.adb: Likewise.
! 	* libgnarl/s-vxwext__kernel.adb: Likewise.
! 	* libgnarl/s-vxwext__kernel.ads: Likewise.
! 	* libgnarl/s-vxwext__rtp-smp.adb: Likewise.
! 	* libgnarl/s-vxwext__rtp.adb: Likewise.
! 	* libgnarl/s-vxwext__rtp.ads: Likewise.
! 	* libgnarl/s-vxwork__aarch64.ads: Likewise.
! 	* libgnarl/s-vxwork__arm.ads: Likewise.
! 	* libgnarl/s-vxwork__ppc.ads: Likewise.
! 	* libgnarl/s-vxwork__x86.ads: Likewise.
! 	* libgnarl/thread.c: Likewise.
! 	* libgnat/a-assert.adb: Likewise.
! 	* libgnat/a-assert.ads: Likewise.
! 	* libgnat/a-btgbso.adb: Likewise.
! 	* libgnat/a-btgbso.ads: Likewise.
! 	* libgnat/a-calari.adb: Likewise.
! 	* libgnat/a-calari.ads: Likewise.
! 	* libgnat/a-calcon.adb: Likewise.
! 	* libgnat/a-calcon.ads: Likewise.
! 	* libgnat/a-caldel.adb: Likewise.
! 	* libgnat/a-caldel.ads: Likewise.
! 	* libgnat/a-calend.adb: Likewise.
! 	* libgnat/a-calend.ads: Likewise.
! 	* libgnat/a-calfor.adb: Likewise.
! 	* libgnat/a-calfor.ads: Likewise.
! 	* libgnat/a-catizo.adb: Likewise.
! 	* libgnat/a-cbdlli.adb: Likewise.
! 	* libgnat/a-cbdlli.ads: Likewise.
! 	* libgnat/a-cbhama.adb: Likewise.
! 	* libgnat/a-cbhama.ads: Likewise.
! 	* libgnat/a-cbhase.adb: Likewise.
! 	* libgnat/a-cbhase.ads: Likewise.
! 	* libgnat/a-cbmutr.adb: Likewise.
! 	* libgnat/a-cbmutr.ads: Likewise.
! 	* libgnat/a-cborma.adb: Likewise.
! 	* libgnat/a-cborma.ads: Likewise.
! 	* libgnat/a-cborse.adb: Likewise.
! 	* libgnat/a-cborse.ads: Likewise.
! 	* libgnat/a-cbprqu.adb: Likewise.
! 	* libgnat/a-cbprqu.ads: Likewise.
! 	* libgnat/a-cbsyqu.adb: Likewise.
! 	* libgnat/a-cbsyqu.ads: Likewise.
! 	* libgnat/a-cdlili.adb: Likewise.
! 	* libgnat/a-cdlili.ads: Likewise.
! 	* libgnat/a-cfdlli.adb: Likewise.
! 	* libgnat/a-cfdlli.ads: Likewise.
! 	* libgnat/a-cfhama.adb: Likewise.
! 	* libgnat/a-cfhama.ads: Likewise.
! 	* libgnat/a-cfhase.adb: Likewise.
! 	* libgnat/a-cfhase.ads: Likewise.
! 	* libgnat/a-cfinve.adb: Likewise.
! 	* libgnat/a-cfinve.ads: Likewise.
! 	* libgnat/a-cforma.adb: Likewise.
! 	* libgnat/a-cforma.ads: Likewise.
! 	* libgnat/a-cforse.adb: Likewise.
! 	* libgnat/a-cforse.ads: Likewise.
! 	* libgnat/a-cgaaso.adb: Likewise.
! 	* libgnat/a-cgaaso.ads: Likewise.
! 	* libgnat/a-cgarso.adb: Likewise.
! 	* libgnat/a-cgcaso.adb: Likewise.
! 	* libgnat/a-chacon.adb: Likewise.
! 	* libgnat/a-chacon.ads: Likewise.
! 	* libgnat/a-chahan.adb: Likewise.
! 	* libgnat/a-chahan.ads: Likewise.
! 	* libgnat/a-chlat9.ads: Likewise.
! 	* libgnat/a-chtgbk.adb: Likewise.
! 	* libgnat/a-chtgbk.ads: Likewise.
! 	* libgnat/a-chtgbo.adb: Likewise.
! 	* libgnat/a-chtgbo.ads: Likewise.
! 	* libgnat/a-chtgke.adb: Likewise.
! 	* libgnat/a-chtgke.ads: Likewise.
! 	* libgnat/a-chtgop.adb: Likewise.
! 	* libgnat/a-chtgop.ads: Likewise.
! 	* libgnat/a-chzla1.ads: Likewise.
! 	* libgnat/a-chzla9.ads: Likewise.
! 	* libgnat/a-cidlli.adb: Likewise.
! 	* libgnat/a-cidlli.ads: Likewise.
! 	* libgnat/a-cihama.adb: Likewise.
! 	* libgnat/a-cihama.ads: Likewise.
! 	* libgnat/a-cihase.adb: Likewise.
! 	* libgnat/a-cihase.ads: Likewise.
! 	* libgnat/a-cimutr.adb: Likewise.
! 	* libgnat/a-cimutr.ads: Likewise.
! 	* libgnat/a-ciorma.adb: Likewise.
! 	* libgnat/a-ciorma.ads: Likewise.
! 	* libgnat/a-ciormu.adb: Likewise.
! 	* libgnat/a-ciormu.ads: Likewise.
! 	* libgnat/a-ciorse.adb: Likewise.
! 	* libgnat/a-ciorse.ads: Likewise.
! 	* libgnat/a-clrefi.adb: Likewise.
! 	* libgnat/a-clrefi.ads: Likewise.
! 	* libgnat/a-coboho.adb: Likewise.
! 	* libgnat/a-coboho.ads: Likewise.
! 	* libgnat/a-cobove.adb: Likewise.
! 	* libgnat/a-cobove.ads: Likewise.
! 	* libgnat/a-cofove.adb: Likewise.
! 	* libgnat/a-cofove.ads: Likewise.
! 	* libgnat/a-cofuba.adb: Likewise.
! 	* libgnat/a-cofuba.ads: Likewise.
! 	* libgnat/a-cofuma.adb: Likewise.
! 	* libgnat/a-cofuma.ads: Likewise.
! 	* libgnat/a-cofuse.adb: Likewise.
! 	* libgnat/a-cofuse.ads: Likewise.
! 	* libgnat/a-cofuve.adb: Likewise.
! 	* libgnat/a-cofuve.ads: Likewise.
! 	* libgnat/a-cogeso.adb: Likewise.
! 	* libgnat/a-cogeso.ads: Likewise.
! 	* libgnat/a-cohama.adb: Likewise.
! 	* libgnat/a-cohama.ads: Likewise.
! 	* libgnat/a-cohase.adb: Likewise.
! 	* libgnat/a-cohase.ads: Likewise.
! 	* libgnat/a-cohata.ads: Likewise.
! 	* libgnat/a-coinho.adb: Likewise.
! 	* libgnat/a-coinho.ads: Likewise.
! 	* libgnat/a-coinho__shared.adb: Likewise.
! 	* libgnat/a-coinho__shared.ads: Likewise.
! 	* libgnat/a-coinve.adb: Likewise.
! 	* libgnat/a-coinve.ads: Likewise.
! 	* libgnat/a-colien.adb: Likewise.
! 	* libgnat/a-colien.ads: Likewise.
! 	* libgnat/a-colire.adb: Likewise.
! 	* libgnat/a-colire.ads: Likewise.
! 	* libgnat/a-comlin.adb: Likewise.
! 	* libgnat/a-comlin.ads: Likewise.
! 	* libgnat/a-comutr.adb: Likewise.
! 	* libgnat/a-comutr.ads: Likewise.
! 	* libgnat/a-conhel.adb: Likewise.
! 	* libgnat/a-conhel.ads: Likewise.
! 	* libgnat/a-convec.adb: Likewise.
! 	* libgnat/a-convec.ads: Likewise.
! 	* libgnat/a-coorma.adb: Likewise.
! 	* libgnat/a-coorma.ads: Likewise.
! 	* libgnat/a-coormu.adb: Likewise.
! 	* libgnat/a-coormu.ads: Likewise.
! 	* libgnat/a-coorse.adb: Likewise.
! 	* libgnat/a-coorse.ads: Likewise.
! 	* libgnat/a-coprnu.adb: Likewise.
! 	* libgnat/a-coprnu.ads: Likewise.
! 	* libgnat/a-costso.adb: Likewise.
! 	* libgnat/a-costso.ads: Likewise.
! 	* libgnat/a-crbltr.ads: Likewise.
! 	* libgnat/a-crbtgk.adb: Likewise.
! 	* libgnat/a-crbtgk.ads: Likewise.
! 	* libgnat/a-crbtgo.adb: Likewise.
! 	* libgnat/a-crbtgo.ads: Likewise.
! 	* libgnat/a-crdlli.adb: Likewise.
! 	* libgnat/a-crdlli.ads: Likewise.
! 	* libgnat/a-csquin.ads: Likewise.
! 	* libgnat/a-cuprqu.adb: Likewise.
! 	* libgnat/a-cuprqu.ads: Likewise.
! 	* libgnat/a-cusyqu.adb: Likewise.
! 	* libgnat/a-cusyqu.ads: Likewise.
! 	* libgnat/a-cwila1.ads: Likewise.
! 	* libgnat/a-cwila9.ads: Likewise.
! 	* libgnat/a-decima.adb: Likewise.
! 	* libgnat/a-decima.ads: Likewise.
! 	* libgnat/a-decima__128.ads: Likewise.
! 	* libgnat/a-dhfina.adb: Likewise.
! 	* libgnat/a-dhfina.ads: Likewise.
! 	* libgnat/a-diocst.adb: Likewise.
! 	* libgnat/a-diocst.ads: Likewise.
! 	* libgnat/a-direct.adb: Likewise.
! 	* libgnat/a-direct.ads: Likewise.
! 	* libgnat/a-direio.adb: Likewise.
! 	* libgnat/a-direio.ads: Likewise.
! 	* libgnat/a-dirval.adb: Likewise.
! 	* libgnat/a-dirval.ads: Likewise.
! 	* libgnat/a-dirval__mingw.adb: Likewise.
! 	* libgnat/a-einuoc.adb: Likewise.
! 	* libgnat/a-einuoc.ads: Likewise.
! 	* libgnat/a-elchha.adb: Likewise.
! 	* libgnat/a-elchha.ads: Likewise.
! 	* libgnat/a-envvar.adb: Likewise.
! 	* libgnat/a-excach.adb: Likewise.
! 	* libgnat/a-except.adb: Likewise.
! 	* libgnat/a-except.ads: Likewise.
! 	* libgnat/a-exctra.adb: Likewise.
! 	* libgnat/a-exctra.ads: Likewise.
! 	* libgnat/a-exexda.adb: Likewise.
! 	* libgnat/a-exexpr.adb: Likewise.
! 	* libgnat/a-exextr.adb: Likewise.
! 	* libgnat/a-exstat.adb: Likewise.
! 	* libgnat/a-finali.adb: Likewise.
! 	* libgnat/a-finali.ads: Likewise.
! 	* libgnat/a-locale.adb: Likewise.
! 	* libgnat/a-locale.ads: Likewise.
! 	* libgnat/a-nagefl.ads: Likewise.
! 	* libgnat/a-naliop.ads: Likewise.
! 	* libgnat/a-naliop__nolibm.ads: Likewise.
! 	* libgnat/a-nallfl.ads: Likewise.
! 	* libgnat/a-nallfl__wraplf.ads: Likewise.
! 	* libgnat/a-nalofl.ads: Likewise.
! 	* libgnat/a-nashfl.ads: Likewise.
! 	* libgnat/a-nashfl__wraplf.ads: Likewise.
! 	* libgnat/a-nbnbig.adb: Likewise.
! 	* libgnat/a-nbnbin.adb: Likewise.
! 	* libgnat/a-nbnbin__gmp.adb: Likewise.
! 	* libgnat/a-nbnbre.adb: Likewise.
! 	* libgnat/a-ngcefu.adb: Likewise.
! 	* libgnat/a-ngcoar.adb: Likewise.
! 	* libgnat/a-ngcoty.adb: Likewise.
! 	* libgnat/a-ngcoty.ads: Likewise.
! 	* libgnat/a-ngelfu.adb: Likewise.
! 	* libgnat/a-ngelfu.ads: Likewise.
! 	* libgnat/a-ngrear.adb: Likewise.
! 	* libgnat/a-ngrear.ads: Likewise.
! 	* libgnat/a-nuauco.ads: Likewise.
! 	* libgnat/a-nuauco__x86.ads: Likewise.
! 	* libgnat/a-nuaufl.ads: Likewise.
! 	* libgnat/a-nuaufl__wraplf.ads: Likewise.
! 	* libgnat/a-nudira.adb: Likewise.
! 	* libgnat/a-nudira.ads: Likewise.
! 	* libgnat/a-nuflra.adb: Likewise.
! 	* libgnat/a-nuflra.ads: Likewise.
! 	* libgnat/a-numaux.ads: Likewise.
! 	* libgnat/a-rbtgbk.adb: Likewise.
! 	* libgnat/a-rbtgbk.ads: Likewise.
! 	* libgnat/a-rbtgbo.adb: Likewise.
! 	* libgnat/a-rbtgbo.ads: Likewise.
! 	* libgnat/a-rbtgso.adb: Likewise.
! 	* libgnat/a-rbtgso.ads: Likewise.
! 	* libgnat/a-sbecin.adb: Likewise.
! 	* libgnat/a-sbecin.ads: Likewise.
! 	* libgnat/a-sbhcin.adb: Likewise.
! 	* libgnat/a-sbhcin.ads: Likewise.
! 	* libgnat/a-sblcin.adb: Likewise.
! 	* libgnat/a-sblcin.ads: Likewise.
! 	* libgnat/a-secain.adb: Likewise.
! 	* libgnat/a-secain.ads: Likewise.
! 	* libgnat/a-sequio.adb: Likewise.
! 	* libgnat/a-sequio.ads: Likewise.
! 	* libgnat/a-sfecin.ads: Likewise.
! 	* libgnat/a-sfhcin.ads: Likewise.
! 	* libgnat/a-sflcin.ads: Likewise.
! 	* libgnat/a-shcain.adb: Likewise.
! 	* libgnat/a-shcain.ads: Likewise.
! 	* libgnat/a-siocst.adb: Likewise.
! 	* libgnat/a-siocst.ads: Likewise.
! 	* libgnat/a-slcain.adb: Likewise.
! 	* libgnat/a-slcain.ads: Likewise.
! 	* libgnat/a-ssicst.adb: Likewise.
! 	* libgnat/a-ssicst.ads: Likewise.
! 	* libgnat/a-stboha.adb: Likewise.
! 	* libgnat/a-stbubo.adb: Likewise.
! 	* libgnat/a-stbubo.ads: Likewise.
! 	* libgnat/a-stbufi.adb: Likewise.
! 	* libgnat/a-stbufi.ads: Likewise.
! 	* libgnat/a-stbufo.adb: Likewise.
! 	* libgnat/a-stbufo.ads: Likewise.
! 	* libgnat/a-stbuun.adb: Likewise.
! 	* libgnat/a-stbuut.adb: Likewise.
! 	* libgnat/a-stbuut.ads: Likewise.
! 	* libgnat/a-stmaco.ads: Likewise.
! 	* libgnat/a-storio.adb: Likewise.
! 	* libgnat/a-strbou.adb: Likewise.
! 	* libgnat/a-strbou.ads: Likewise.
! 	* libgnat/a-stream.adb: Likewise.
! 	* libgnat/a-stream.ads: Likewise.
! 	* libgnat/a-strfix.adb: Likewise.
! 	* libgnat/a-strhas.adb: Likewise.
! 	* libgnat/a-strmap.adb: Likewise.
! 	* libgnat/a-strmap.ads: Likewise.
! 	* libgnat/a-strsea.adb: Likewise.
! 	* libgnat/a-strsea.ads: Likewise.
! 	* libgnat/a-strsto.ads: Likewise.
! 	* libgnat/a-strsup.adb: Likewise.
! 	* libgnat/a-strsup.ads: Likewise.
! 	* libgnat/a-strunb.adb: Likewise.
! 	* libgnat/a-strunb.ads: Likewise.
! 	* libgnat/a-strunb__shared.adb: Likewise.
! 	* libgnat/a-strunb__shared.ads: Likewise.
! 	* libgnat/a-ststbo.adb: Likewise.
! 	* libgnat/a-ststbo.ads: Likewise.
! 	* libgnat/a-ststio.adb: Likewise.
! 	* libgnat/a-ststio.ads: Likewise.
! 	* libgnat/a-ststun.adb: Likewise.
! 	* libgnat/a-ststun.ads: Likewise.
! 	* libgnat/a-sttebu.adb: Likewise.
! 	* libgnat/a-stunau.adb: Likewise.
! 	* libgnat/a-stunau.ads: Likewise.
! 	* libgnat/a-stunau__shared.adb: Likewise.
! 	* libgnat/a-stunha.adb: Likewise.
! 	* libgnat/a-stuten.adb: Likewise.
! 	* libgnat/a-stwibo.adb: Likewise.
! 	* libgnat/a-stwibo.ads: Likewise.
! 	* libgnat/a-stwifi.adb: Likewise.
! 	* libgnat/a-stwiha.adb: Likewise.
! 	* libgnat/a-stwima.adb: Likewise.
! 	* libgnat/a-stwima.ads: Likewise.
! 	* libgnat/a-stwise.adb: Likewise.
! 	* libgnat/a-stwise.ads: Likewise.
! 	* libgnat/a-stwisu.adb: Likewise.
! 	* libgnat/a-stwisu.ads: Likewise.
! 	* libgnat/a-stwiun.adb: Likewise.
! 	* libgnat/a-stwiun.ads: Likewise.
! 	* libgnat/a-stwiun__shared.adb: Likewise.
! 	* libgnat/a-stwiun__shared.ads: Likewise.
! 	* libgnat/a-stzbou.adb: Likewise.
! 	* libgnat/a-stzbou.ads: Likewise.
! 	* libgnat/a-stzfix.adb: Likewise.
! 	* libgnat/a-stzhas.adb: Likewise.
! 	* libgnat/a-stzmap.adb: Likewise.
! 	* libgnat/a-stzmap.ads: Likewise.
! 	* libgnat/a-stzsea.adb: Likewise.
! 	* libgnat/a-stzsea.ads: Likewise.
! 	* libgnat/a-stzsup.adb: Likewise.
! 	* libgnat/a-stzsup.ads: Likewise.
! 	* libgnat/a-stzunb.adb: Likewise.
! 	* libgnat/a-stzunb.ads: Likewise.
! 	* libgnat/a-stzunb__shared.adb: Likewise.
! 	* libgnat/a-stzunb__shared.ads: Likewise.
! 	* libgnat/a-suecin.adb: Likewise.
! 	* libgnat/a-suecin.ads: Likewise.
! 	* libgnat/a-suenco.adb: Likewise.
! 	* libgnat/a-suenst.adb: Likewise.
! 	* libgnat/a-suewst.adb: Likewise.
! 	* libgnat/a-suezst.adb: Likewise.
! 	* libgnat/a-suhcin.adb: Likewise.
! 	* libgnat/a-suhcin.ads: Likewise.
! 	* libgnat/a-sulcin.adb: Likewise.
! 	* libgnat/a-sulcin.ads: Likewise.
! 	* libgnat/a-suteio.adb: Likewise.
! 	* libgnat/a-suteio.ads: Likewise.
! 	* libgnat/a-suteio__shared.adb: Likewise.
! 	* libgnat/a-swbwha.adb: Likewise.
! 	* libgnat/a-swmwco.ads: Likewise.
! 	* libgnat/a-swunau.adb: Likewise.
! 	* libgnat/a-swunau.ads: Likewise.
! 	* libgnat/a-swunau__shared.adb: Likewise.
! 	* libgnat/a-swuwha.adb: Likewise.
! 	* libgnat/a-swuwti.adb: Likewise.
! 	* libgnat/a-swuwti.ads: Likewise.
! 	* libgnat/a-swuwti__shared.adb: Likewise.
! 	* libgnat/a-szbzha.adb: Likewise.
! 	* libgnat/a-szmzco.ads: Likewise.
! 	* libgnat/a-szunau.adb: Likewise.
! 	* libgnat/a-szunau.ads: Likewise.
! 	* libgnat/a-szunau__shared.adb: Likewise.
! 	* libgnat/a-szuzha.adb: Likewise.
! 	* libgnat/a-szuzti.adb: Likewise.
! 	* libgnat/a-szuzti.ads: Likewise.
! 	* libgnat/a-szuzti__shared.adb: Likewise.
! 	* libgnat/a-tags.adb: Likewise.
! 	* libgnat/a-tags.ads: Likewise.
! 	* libgnat/a-teioed.adb: Likewise.
! 	* libgnat/a-teioed.ads: Likewise.
! 	* libgnat/a-textio.adb: Likewise.
! 	* libgnat/a-textio.ads: Likewise.
! 	* libgnat/a-tiboio.adb: Likewise.
! 	* libgnat/a-ticoau.adb: Likewise.
! 	* libgnat/a-ticoau.ads: Likewise.
! 	* libgnat/a-ticoio.adb: Likewise.
! 	* libgnat/a-ticoio.ads: Likewise.
! 	* libgnat/a-tideau.adb: Likewise.
! 	* libgnat/a-tideau.ads: Likewise.
! 	* libgnat/a-tideio.adb: Likewise.
! 	* libgnat/a-tideio.ads: Likewise.
! 	* libgnat/a-tideio__128.adb: Likewise.
! 	* libgnat/a-tienau.adb: Likewise.
! 	* libgnat/a-tienau.ads: Likewise.
! 	* libgnat/a-tienio.adb: Likewise.
! 	* libgnat/a-tifiau.adb: Likewise.
! 	* libgnat/a-tifiau.ads: Likewise.
! 	* libgnat/a-tifiio.adb: Likewise.
! 	* libgnat/a-tifiio__128.adb: Likewise.
! 	* libgnat/a-tiflau.adb: Likewise.
! 	* libgnat/a-tiflau.ads: Likewise.
! 	* libgnat/a-tiflio.adb: Likewise.
! 	* libgnat/a-tiflio.ads: Likewise.
! 	* libgnat/a-tigeau.adb: Likewise.
! 	* libgnat/a-tigeau.ads: Likewise.
! 	* libgnat/a-tigeli.adb: Likewise.
! 	* libgnat/a-tiinau.adb: Likewise.
! 	* libgnat/a-tiinau.ads: Likewise.
! 	* libgnat/a-tiinio.adb: Likewise.
! 	* libgnat/a-tiinio.ads: Likewise.
! 	* libgnat/a-tiinio__128.adb: Likewise.
! 	* libgnat/a-timoio.adb: Likewise.
! 	* libgnat/a-timoio.ads: Likewise.
! 	* libgnat/a-timoio__128.adb: Likewise.
! 	* libgnat/a-tiocst.adb: Likewise.
! 	* libgnat/a-tiocst.ads: Likewise.
! 	* libgnat/a-tirsfi.adb: Likewise.
! 	* libgnat/a-tirsfi.ads: Likewise.
! 	* libgnat/a-titest.adb: Likewise.
! 	* libgnat/a-undesu.adb: Likewise.
! 	* libgnat/a-wichha.adb: Likewise.
! 	* libgnat/a-wichun.adb: Likewise.
! 	* libgnat/a-wichun.ads: Likewise.
! 	* libgnat/a-witeio.adb: Likewise.
! 	* libgnat/a-witeio.ads: Likewise.
! 	* libgnat/a-wrstfi.adb: Likewise.
! 	* libgnat/a-wrstfi.ads: Likewise.
! 	* libgnat/a-wtcoau.adb: Likewise.
! 	* libgnat/a-wtcoau.ads: Likewise.
! 	* libgnat/a-wtcoio.adb: Likewise.
! 	* libgnat/a-wtcstr.adb: Likewise.
! 	* libgnat/a-wtcstr.ads: Likewise.
! 	* libgnat/a-wtdeau.adb: Likewise.
! 	* libgnat/a-wtdeau.ads: Likewise.
! 	* libgnat/a-wtdeio.adb: Likewise.
! 	* libgnat/a-wtdeio__128.adb: Likewise.
! 	* libgnat/a-wtedit.adb: Likewise.
! 	* libgnat/a-wtedit.ads: Likewise.
! 	* libgnat/a-wtenau.adb: Likewise.
! 	* libgnat/a-wtenau.ads: Likewise.
! 	* libgnat/a-wtenio.adb: Likewise.
! 	* libgnat/a-wtfiau.adb: Likewise.
! 	* libgnat/a-wtfiau.ads: Likewise.
! 	* libgnat/a-wtfiio.adb: Likewise.
! 	* libgnat/a-wtfiio__128.adb: Likewise.
! 	* libgnat/a-wtflau.adb: Likewise.
! 	* libgnat/a-wtflau.ads: Likewise.
! 	* libgnat/a-wtflio.adb: Likewise.
! 	* libgnat/a-wtgeau.adb: Likewise.
! 	* libgnat/a-wtgeau.ads: Likewise.
! 	* libgnat/a-wtinau.adb: Likewise.
! 	* libgnat/a-wtinau.ads: Likewise.
! 	* libgnat/a-wtinio.adb: Likewise.
! 	* libgnat/a-wtinio__128.adb: Likewise.
! 	* libgnat/a-wtmoio.adb: Likewise.
! 	* libgnat/a-wtmoio.ads: Likewise.
! 	* libgnat/a-wtmoio__128.adb: Likewise.
! 	* libgnat/a-wttest.adb: Likewise.
! 	* libgnat/a-wwboio.adb: Likewise.
! 	* libgnat/a-zchhan.adb: Likewise.
! 	* libgnat/a-zchuni.adb: Likewise.
! 	* libgnat/a-zchuni.ads: Likewise.
! 	* libgnat/a-zrstfi.adb: Likewise.
! 	* libgnat/a-zrstfi.ads: Likewise.
! 	* libgnat/a-ztcoau.adb: Likewise.
! 	* libgnat/a-ztcoio.adb: Likewise.
! 	* libgnat/a-ztcstr.adb: Likewise.
! 	* libgnat/a-ztcstr.ads: Likewise.
! 	* libgnat/a-ztdeau.adb: Likewise.
! 	* libgnat/a-ztdeau.ads: Likewise.
! 	* libgnat/a-ztdeio.adb: Likewise.
! 	* libgnat/a-ztdeio__128.adb: Likewise.
! 	* libgnat/a-ztedit.adb: Likewise.
! 	* libgnat/a-ztedit.ads: Likewise.
! 	* libgnat/a-ztenau.adb: Likewise.
! 	* libgnat/a-ztenau.ads: Likewise.
! 	* libgnat/a-ztenio.adb: Likewise.
! 	* libgnat/a-ztexio.adb: Likewise.
! 	* libgnat/a-ztexio.ads: Likewise.
! 	* libgnat/a-ztfiau.adb: Likewise.
! 	* libgnat/a-ztfiau.ads: Likewise.
! 	* libgnat/a-ztfiio.adb: Likewise.
! 	* libgnat/a-ztfiio__128.adb: Likewise.
! 	* libgnat/a-ztflau.adb: Likewise.
! 	* libgnat/a-ztflau.ads: Likewise.
! 	* libgnat/a-ztflio.adb: Likewise.
! 	* libgnat/a-ztgeau.adb: Likewise.
! 	* libgnat/a-ztgeau.ads: Likewise.
! 	* libgnat/a-ztinau.adb: Likewise.
! 	* libgnat/a-ztinau.ads: Likewise.
! 	* libgnat/a-ztinio.adb: Likewise.
! 	* libgnat/a-ztinio__128.adb: Likewise.
! 	* libgnat/a-ztmoio.adb: Likewise.
! 	* libgnat/a-ztmoio__128.adb: Likewise.
! 	* libgnat/a-zttest.adb: Likewise.
! 	* libgnat/a-zzboio.adb: Likewise.
! 	* libgnat/g-allein.ads: Likewise.
! 	* libgnat/g-alleve.adb: Likewise.
! 	* libgnat/g-alleve.ads: Likewise.
! 	* libgnat/g-alleve__hard.adb: Likewise.
! 	* libgnat/g-alleve__hard.ads: Likewise.
! 	* libgnat/g-altcon.adb: Likewise.
! 	* libgnat/g-altcon.ads: Likewise.
! 	* libgnat/g-altive.ads: Likewise.
! 	* libgnat/g-alveop.adb: Likewise.
! 	* libgnat/g-alveop.ads: Likewise.
! 	* libgnat/g-alvety.ads: Likewise.
! 	* libgnat/g-alvevi.ads: Likewise.
! 	* libgnat/g-arrspl.adb: Likewise.
! 	* libgnat/g-arrspl.ads: Likewise.
! 	* libgnat/g-awk.adb: Likewise.
! 	* libgnat/g-awk.ads: Likewise.
! 	* libgnat/g-binenv.adb: Likewise.
! 	* libgnat/g-binenv.ads: Likewise.
! 	* libgnat/g-brapre.ads: Likewise.
! 	* libgnat/g-bubsor.adb: Likewise.
! 	* libgnat/g-bubsor.ads: Likewise.
! 	* libgnat/g-busora.adb: Likewise.
! 	* libgnat/g-busora.ads: Likewise.
! 	* libgnat/g-busorg.adb: Likewise.
! 	* libgnat/g-busorg.ads: Likewise.
! 	* libgnat/g-byorma.adb: Likewise.
! 	* libgnat/g-byorma.ads: Likewise.
! 	* libgnat/g-bytswa.adb: Likewise.
! 	* libgnat/g-bytswa.ads: Likewise.
! 	* libgnat/g-calend.adb: Likewise.
! 	* libgnat/g-calend.ads: Likewise.
! 	* libgnat/g-casuti.adb: Likewise.
! 	* libgnat/g-casuti.ads: Likewise.
! 	* libgnat/g-catiio.adb: Likewise.
! 	* libgnat/g-catiio.ads: Likewise.
! 	* libgnat/g-cgi.adb: Likewise.
! 	* libgnat/g-cgi.ads: Likewise.
! 	* libgnat/g-cgicoo.adb: Likewise.
! 	* libgnat/g-cgicoo.ads: Likewise.
! 	* libgnat/g-cgideb.adb: Likewise.
! 	* libgnat/g-cgideb.ads: Likewise.
! 	* libgnat/g-comlin.adb: Likewise.
! 	* libgnat/g-comlin.ads: Likewise.
! 	* libgnat/g-comver.adb: Likewise.
! 	* libgnat/g-comver.ads: Likewise.
! 	* libgnat/g-cppexc.adb: Likewise.
! 	* libgnat/g-cppexc.ads: Likewise.
! 	* libgnat/g-crc32.adb: Likewise.
! 	* libgnat/g-crc32.ads: Likewise.
! 	* libgnat/g-ctrl_c.adb: Likewise.
! 	* libgnat/g-ctrl_c.ads: Likewise.
! 	* libgnat/g-curexc.ads: Likewise.
! 	* libgnat/g-debpoo.adb: Likewise.
! 	* libgnat/g-debpoo.ads: Likewise.
! 	* libgnat/g-debuti.adb: Likewise.
! 	* libgnat/g-debuti.ads: Likewise.
! 	* libgnat/g-decstr.adb: Likewise.
! 	* libgnat/g-decstr.ads: Likewise.
! 	* libgnat/g-deutst.ads: Likewise.
! 	* libgnat/g-diopit.adb: Likewise.
! 	* libgnat/g-diopit.ads: Likewise.
! 	* libgnat/g-dirope.adb: Likewise.
! 	* libgnat/g-dirope.ads: Likewise.
! 	* libgnat/g-dynhta.adb: Likewise.
! 	* libgnat/g-dynhta.ads: Likewise.
! 	* libgnat/g-dyntab.adb: Likewise.
! 	* libgnat/g-dyntab.ads: Likewise.
! 	* libgnat/g-eacodu.adb: Likewise.
! 	* libgnat/g-encstr.adb: Likewise.
! 	* libgnat/g-encstr.ads: Likewise.
! 	* libgnat/g-enutst.ads: Likewise.
! 	* libgnat/g-excact.adb: Likewise.
! 	* libgnat/g-excact.ads: Likewise.
! 	* libgnat/g-except.ads: Likewise.
! 	* libgnat/g-exctra.adb: Likewise.
! 	* libgnat/g-exctra.ads: Likewise.
! 	* libgnat/g-expect.adb: Likewise.
! 	* libgnat/g-expect.ads: Likewise.
! 	* libgnat/g-exptty.adb: Likewise.
! 	* libgnat/g-exptty.ads: Likewise.
! 	* libgnat/g-flocon.ads: Likewise.
! 	* libgnat/g-forstr.adb: Likewise.
! 	* libgnat/g-forstr.ads: Likewise.
! 	* libgnat/g-graphs.adb: Likewise.
! 	* libgnat/g-graphs.ads: Likewise.
! 	* libgnat/g-heasor.adb: Likewise.
! 	* libgnat/g-heasor.ads: Likewise.
! 	* libgnat/g-hesora.adb: Likewise.
! 	* libgnat/g-hesora.ads: Likewise.
! 	* libgnat/g-hesorg.adb: Likewise.
! 	* libgnat/g-hesorg.ads: Likewise.
! 	* libgnat/g-htable.adb: Likewise.
! 	* libgnat/g-htable.ads: Likewise.
! 	* libgnat/g-io.adb: Likewise.
! 	* libgnat/g-io.ads: Likewise.
! 	* libgnat/g-io_aux.adb: Likewise.
! 	* libgnat/g-io_aux.ads: Likewise.
! 	* libgnat/g-lists.adb: Likewise.
! 	* libgnat/g-lists.ads: Likewise.
! 	* libgnat/g-locfil.adb: Likewise.
! 	* libgnat/g-locfil.ads: Likewise.
! 	* libgnat/g-mbdira.adb: Likewise.
! 	* libgnat/g-mbdira.ads: Likewise.
! 	* libgnat/g-mbflra.adb: Likewise.
! 	* libgnat/g-mbflra.ads: Likewise.
! 	* libgnat/g-md5.adb: Likewise.
! 	* libgnat/g-md5.ads: Likewise.
! 	* libgnat/g-memdum.adb: Likewise.
! 	* libgnat/g-memdum.ads: Likewise.
! 	* libgnat/g-moreex.adb: Likewise.
! 	* libgnat/g-moreex.ads: Likewise.
! 	* libgnat/g-os_lib.adb: Likewise.
! 	* libgnat/g-os_lib.ads: Likewise.
! 	* libgnat/g-pehage.adb: Likewise.
! 	* libgnat/g-pehage.ads: Likewise.
! 	* libgnat/g-rannum.adb: Likewise.
! 	* libgnat/g-rannum.ads: Likewise.
! 	* libgnat/g-regexp.adb: Likewise.
! 	* libgnat/g-regexp.ads: Likewise.
! 	* libgnat/g-regist.adb: Likewise.
! 	* libgnat/g-regist.ads: Likewise.
! 	* libgnat/g-regpat.adb: Likewise.
! 	* libgnat/g-regpat.ads: Likewise.
! 	* libgnat/g-rewdat.adb: Likewise.
! 	* libgnat/g-rewdat.ads: Likewise.
! 	* libgnat/g-sechas.adb: Likewise.
! 	* libgnat/g-sechas.ads: Likewise.
! 	* libgnat/g-sehamd.adb: Likewise.
! 	* libgnat/g-sehamd.ads: Likewise.
! 	* libgnat/g-sehash.adb: Likewise.
! 	* libgnat/g-sehash.ads: Likewise.
! 	* libgnat/g-sercom.adb: Likewise.
! 	* libgnat/g-sercom.ads: Likewise.
! 	* libgnat/g-sercom__linux.adb: Likewise.
! 	* libgnat/g-sercom__mingw.adb: Likewise.
! 	* libgnat/g-sestin.ads: Likewise.
! 	* libgnat/g-sets.adb: Likewise.
! 	* libgnat/g-sets.ads: Likewise.
! 	* libgnat/g-sha1.adb: Likewise.
! 	* libgnat/g-sha1.ads: Likewise.
! 	* libgnat/g-sha224.ads: Likewise.
! 	* libgnat/g-sha256.ads: Likewise.
! 	* libgnat/g-sha384.ads: Likewise.
! 	* libgnat/g-sha512.ads: Likewise.
! 	* libgnat/g-shsh32.adb: Likewise.
! 	* libgnat/g-shsh32.ads: Likewise.
! 	* libgnat/g-shsh64.adb: Likewise.
! 	* libgnat/g-shsh64.ads: Likewise.
! 	* libgnat/g-shshco.adb: Likewise.
! 	* libgnat/g-shshco.ads: Likewise.
! 	* libgnat/g-soccon.ads: Likewise.
! 	* libgnat/g-socket.adb: Likewise.
! 	* libgnat/g-socket.ads: Likewise.
! 	* libgnat/g-socket__dummy.adb: Likewise.
! 	* libgnat/g-socket__dummy.ads: Likewise.
! 	* libgnat/g-socpol.adb: Likewise.
! 	* libgnat/g-socpol.ads: Likewise.
! 	* libgnat/g-socpol__dummy.adb: Likewise.
! 	* libgnat/g-socpol__dummy.ads: Likewise.
! 	* libgnat/g-socthi.adb: Likewise.
! 	* libgnat/g-socthi.ads: Likewise.
! 	* libgnat/g-socthi__dummy.adb: Likewise.
! 	* libgnat/g-socthi__dummy.ads: Likewise.
! 	* libgnat/g-socthi__mingw.adb: Likewise.
! 	* libgnat/g-socthi__mingw.ads: Likewise.
! 	* libgnat/g-socthi__vxworks.adb: Likewise.
! 	* libgnat/g-socthi__vxworks.ads: Likewise.
! 	* libgnat/g-soliop.ads: Likewise.
! 	* libgnat/g-soliop__lynxos.ads: Likewise.
! 	* libgnat/g-soliop__mingw.ads: Likewise.
! 	* libgnat/g-soliop__qnx.ads: Likewise.
! 	* libgnat/g-soliop__solaris.ads: Likewise.
! 	* libgnat/g-sopowa.adb: Likewise.
! 	* libgnat/g-sopowa__mingw.adb: Likewise.
! 	* libgnat/g-sopowa__posix.adb: Likewise.
! 	* libgnat/g-sothco.adb: Likewise.
! 	* libgnat/g-sothco.ads: Likewise.
! 	* libgnat/g-sothco__dummy.adb: Likewise.
! 	* libgnat/g-sothco__dummy.ads: Likewise.
! 	* libgnat/g-souinf.ads: Likewise.
! 	* libgnat/g-spchge.adb: Likewise.
! 	* libgnat/g-spchge.ads: Likewise.
! 	* libgnat/g-speche.adb: Likewise.
! 	* libgnat/g-speche.ads: Likewise.
! 	* libgnat/g-spipat.adb: Likewise.
! 	* libgnat/g-spipat.ads: Likewise.
! 	* libgnat/g-spitbo.adb: Likewise.
! 	* libgnat/g-spitbo.ads: Likewise.
! 	* libgnat/g-spogwa.adb: Likewise.
! 	* libgnat/g-spogwa.ads: Likewise.
! 	* libgnat/g-sptabo.ads: Likewise.
! 	* libgnat/g-sptain.ads: Likewise.
! 	* libgnat/g-sptavs.ads: Likewise.
! 	* libgnat/g-sse.ads: Likewise.
! 	* libgnat/g-ssvety.ads: Likewise.
! 	* libgnat/g-sthcso.adb: Likewise.
! 	* libgnat/g-stheme.adb: Likewise.
! 	* libgnat/g-strhas.ads: Likewise.
! 	* libgnat/g-string.adb: Likewise.
! 	* libgnat/g-string.ads: Likewise.
! 	* libgnat/g-strspl.ads: Likewise.
! 	* libgnat/g-stseme.adb: Likewise.
! 	* libgnat/g-stsifd__sockets.adb: Likewise.
! 	* libgnat/g-table.adb: Likewise.
! 	* libgnat/g-table.ads: Likewise.
! 	* libgnat/g-tasloc.adb: Likewise.
! 	* libgnat/g-tasloc.ads: Likewise.
! 	* libgnat/g-timsta.adb: Likewise.
! 	* libgnat/g-timsta.ads: Likewise.
! 	* libgnat/g-traceb.adb: Likewise.
! 	* libgnat/g-traceb.ads: Likewise.
! 	* libgnat/g-trasym.adb: Likewise.
! 	* libgnat/g-trasym.ads: Likewise.
! 	* libgnat/g-tty.adb: Likewise.
! 	* libgnat/g-tty.ads: Likewise.
! 	* libgnat/g-u3spch.adb: Likewise.
! 	* libgnat/g-u3spch.ads: Likewise.
! 	* libgnat/g-utf_32.adb: Likewise.
! 	* libgnat/g-utf_32.ads: Likewise.
! 	* libgnat/g-wispch.adb: Likewise.
! 	* libgnat/g-wispch.ads: Likewise.
! 	* libgnat/g-wistsp.ads: Likewise.
! 	* libgnat/g-zspche.adb: Likewise.
! 	* libgnat/g-zspche.ads: Likewise.
! 	* libgnat/g-zstspl.ads: Likewise.
! 	* libgnat/gnat.ads: Likewise.
! 	* libgnat/i-c.adb: Likewise.
! 	* libgnat/i-cexten.ads: Likewise.
! 	* libgnat/i-cexten__128.ads: Likewise.
! 	* libgnat/i-cobol.adb: Likewise.
! 	* libgnat/i-cobol.ads: Likewise.
! 	* libgnat/i-cpoint.adb: Likewise.
! 	* libgnat/i-cpoint.ads: Likewise.
! 	* libgnat/i-cstrea.adb: Likewise.
! 	* libgnat/i-cstrea.ads: Likewise.
! 	* libgnat/i-cstrin.adb: Likewise.
! 	* libgnat/i-cstrin.ads: Likewise.
! 	* libgnat/i-fortra.adb: Likewise.
! 	* libgnat/i-pacdec.adb: Likewise.
! 	* libgnat/i-pacdec.ads: Likewise.
! 	* libgnat/i-vxwoio.adb: Likewise.
! 	* libgnat/i-vxwoio.ads: Likewise.
! 	* libgnat/i-vxwork.ads: Likewise.
! 	* libgnat/i-vxwork__x86.ads: Likewise.
! 	* libgnat/interfac.ads: Likewise.
! 	* libgnat/interfac__2020.ads: Likewise.
! 	* libgnat/memtrack.adb: Likewise.
! 	* libgnat/s-addima.adb: Likewise.
! 	* libgnat/s-addima.ads: Likewise.
! 	* libgnat/s-addope.adb: Likewise.
! 	* libgnat/s-addope.ads: Likewise.
! 	* libgnat/s-aoinar.adb: Likewise.
! 	* libgnat/s-aoinar.ads: Likewise.
! 	* libgnat/s-aomoar.adb: Likewise.
! 	* libgnat/s-aomoar.ads: Likewise.
! 	* libgnat/s-aotase.adb: Likewise.
! 	* libgnat/s-aotase.ads: Likewise.
! 	* libgnat/s-aridou.adb: Likewise.
! 	* libgnat/s-aridou.ads: Likewise.
! 	* libgnat/s-arit128.adb: Likewise.
! 	* libgnat/s-arit128.ads: Likewise.
! 	* libgnat/s-arit32.adb: Likewise.
! 	* libgnat/s-arit32.ads: Likewise.
! 	* libgnat/s-arit64.adb: Likewise.
! 	* libgnat/s-arit64.ads: Likewise.
! 	* libgnat/s-assert.adb: Likewise.
! 	* libgnat/s-assert.ads: Likewise.
! 	* libgnat/s-atacco.adb: Likewise.
! 	* libgnat/s-atacco.ads: Likewise.
! 	* libgnat/s-atocou.adb: Likewise.
! 	* libgnat/s-atocou.ads: Likewise.
! 	* libgnat/s-atocou__builtin.adb: Likewise.
! 	* libgnat/s-atoope.ads: Likewise.
! 	* libgnat/s-atopex.adb: Likewise.
! 	* libgnat/s-atopex.ads: Likewise.
! 	* libgnat/s-atopri.adb: Likewise.
! 	* libgnat/s-atopri.ads: Likewise.
! 	* libgnat/s-auxdec.adb: Likewise.
! 	* libgnat/s-auxdec.ads: Likewise.
! 	* libgnat/s-bignum.adb: Likewise.
! 	* libgnat/s-bignum.ads: Likewise.
! 	* libgnat/s-bitfie.ads: Likewise.
! 	* libgnat/s-bitops.adb: Likewise.
! 	* libgnat/s-bitops.ads: Likewise.
! 	* libgnat/s-bituti.adb: Likewise.
! 	* libgnat/s-bituti.ads: Likewise.
! 	* libgnat/s-boarop.ads: Likewise.
! 	* libgnat/s-boustr.adb: Likewise.
! 	* libgnat/s-boustr.ads: Likewise.
! 	* libgnat/s-bytswa.ads: Likewise.
! 	* libgnat/s-carsi8.adb: Likewise.
! 	* libgnat/s-carsi8.ads: Likewise.
! 	* libgnat/s-carun8.adb: Likewise.
! 	* libgnat/s-carun8.ads: Likewise.
! 	* libgnat/s-casi128.adb: Likewise.
! 	* libgnat/s-casi128.ads: Likewise.
! 	* libgnat/s-casi16.adb: Likewise.
! 	* libgnat/s-casi16.ads: Likewise.
! 	* libgnat/s-casi32.adb: Likewise.
! 	* libgnat/s-casi32.ads: Likewise.
! 	* libgnat/s-casi64.adb: Likewise.
! 	* libgnat/s-casi64.ads: Likewise.
! 	* libgnat/s-casuti.adb: Likewise.
! 	* libgnat/s-casuti.ads: Likewise.
! 	* libgnat/s-caun128.adb: Likewise.
! 	* libgnat/s-caun128.ads: Likewise.
! 	* libgnat/s-caun16.adb: Likewise.
! 	* libgnat/s-caun16.ads: Likewise.
! 	* libgnat/s-caun32.adb: Likewise.
! 	* libgnat/s-caun32.ads: Likewise.
! 	* libgnat/s-caun64.adb: Likewise.
! 	* libgnat/s-caun64.ads: Likewise.
! 	* libgnat/s-chepoo.ads: Likewise.
! 	* libgnat/s-commun.adb: Likewise.
! 	* libgnat/s-commun.ads: Likewise.
! 	* libgnat/s-conca2.adb: Likewise.
! 	* libgnat/s-conca2.ads: Likewise.
! 	* libgnat/s-conca3.adb: Likewise.
! 	* libgnat/s-conca3.ads: Likewise.
! 	* libgnat/s-conca4.adb: Likewise.
! 	* libgnat/s-conca4.ads: Likewise.
! 	* libgnat/s-conca5.adb: Likewise.
! 	* libgnat/s-conca5.ads: Likewise.
! 	* libgnat/s-conca6.adb: Likewise.
! 	* libgnat/s-conca6.ads: Likewise.
! 	* libgnat/s-conca7.adb: Likewise.
! 	* libgnat/s-conca7.ads: Likewise.
! 	* libgnat/s-conca8.adb: Likewise.
! 	* libgnat/s-conca8.ads: Likewise.
! 	* libgnat/s-conca9.adb: Likewise.
! 	* libgnat/s-conca9.ads: Likewise.
! 	* libgnat/s-crc32.adb: Likewise.
! 	* libgnat/s-crc32.ads: Likewise.
! 	* libgnat/s-crtl.ads: Likewise.
! 	* libgnat/s-dfmkio.ads: Likewise.
! 	* libgnat/s-dfmopr.ads: Likewise.
! 	* libgnat/s-dgmgop.ads: Likewise.
! 	* libgnat/s-diflio.adb: Likewise.
! 	* libgnat/s-diflio.ads: Likewise.
! 	* libgnat/s-diflmk.ads: Likewise.
! 	* libgnat/s-digemk.ads: Likewise.
! 	* libgnat/s-diinio.adb: Likewise.
! 	* libgnat/s-diinio.ads: Likewise.
! 	* libgnat/s-dilomk.ads: Likewise.
! 	* libgnat/s-dim.ads: Likewise.
! 	* libgnat/s-dimkio.ads: Likewise.
! 	* libgnat/s-dimmks.ads: Likewise.
! 	* libgnat/s-direio.adb: Likewise.
! 	* libgnat/s-direio.ads: Likewise.
! 	* libgnat/s-dlmkio.ads: Likewise.
! 	* libgnat/s-dlmopr.ads: Likewise.
! 	* libgnat/s-dmotpr.ads: Likewise.
! 	* libgnat/s-dorepr.adb: Likewise.
! 	* libgnat/s-dorepr__fma.adb: Likewise.
! 	* libgnat/s-dourea.adb: Likewise.
! 	* libgnat/s-dourea.ads: Likewise.
! 	* libgnat/s-dsaser.ads: Likewise.
! 	* libgnat/s-dwalin.adb: Likewise.
! 	* libgnat/s-dwalin.ads: Likewise.
! 	* libgnat/s-elaall.adb: Likewise.
! 	* libgnat/s-elaall.ads: Likewise.
! 	* libgnat/s-excdeb.adb: Likewise.
! 	* libgnat/s-excdeb.ads: Likewise.
! 	* libgnat/s-except.adb: Likewise.
! 	* libgnat/s-except.ads: Likewise.
! 	* libgnat/s-excmac__arm.adb: Likewise.
! 	* libgnat/s-excmac__arm.ads: Likewise.
! 	* libgnat/s-excmac__gcc.adb: Likewise.
! 	* libgnat/s-excmac__gcc.ads: Likewise.
! 	* libgnat/s-exctab.adb: Likewise.
! 	* libgnat/s-exctab.ads: Likewise.
! 	* libgnat/s-exctra.adb: Likewise.
! 	* libgnat/s-exctra.ads: Likewise.
! 	* libgnat/s-exnflt.ads: Likewise.
! 	* libgnat/s-exnint.adb: Likewise.
! 	* libgnat/s-exnint.ads: Likewise.
! 	* libgnat/s-exnlfl.ads: Likewise.
! 	* libgnat/s-exnllf.adb: Likewise.
! 	* libgnat/s-exnllf.ads: Likewise.
! 	* libgnat/s-exnlli.adb: Likewise.
! 	* libgnat/s-exnlli.ads: Likewise.
! 	* libgnat/s-exnllli.ads: Likewise.
! 	* libgnat/s-expint.adb: Likewise.
! 	* libgnat/s-expint.ads: Likewise.
! 	* libgnat/s-explli.adb: Likewise.
! 	* libgnat/s-explli.ads: Likewise.
! 	* libgnat/s-expllli.ads: Likewise.
! 	* libgnat/s-explllu.ads: Likewise.
! 	* libgnat/s-expllu.adb: Likewise.
! 	* libgnat/s-expllu.ads: Likewise.
! 	* libgnat/s-expmod.adb: Likewise.
! 	* libgnat/s-expmod.ads: Likewise.
! 	* libgnat/s-exponn.adb: Likewise.
! 	* libgnat/s-exponn.ads: Likewise.
! 	* libgnat/s-exponr.adb: Likewise.
! 	* libgnat/s-exponr.ads: Likewise.
! 	* libgnat/s-expont.adb: Likewise.
! 	* libgnat/s-expont.ads: Likewise.
! 	* libgnat/s-exponu.adb: Likewise.
! 	* libgnat/s-exponu.ads: Likewise.
! 	* libgnat/s-expuns.adb: Likewise.
! 	* libgnat/s-expuns.ads: Likewise.
! 	* libgnat/s-fatflt.ads: Likewise.
! 	* libgnat/s-fatgen.adb: Likewise.
! 	* libgnat/s-fatgen.ads: Likewise.
! 	* libgnat/s-fatlfl.ads: Likewise.
! 	* libgnat/s-fatllf.ads: Likewise.
! 	* libgnat/s-ficobl.ads: Likewise.
! 	* libgnat/s-filatt.ads: Likewise.
! 	* libgnat/s-fileio.adb: Likewise.
! 	* libgnat/s-fileio.ads: Likewise.
! 	* libgnat/s-finmas.adb: Likewise.
! 	* libgnat/s-finmas.ads: Likewise.
! 	* libgnat/s-finroo.adb: Likewise.
! 	* libgnat/s-finroo.ads: Likewise.
! 	* libgnat/s-flocon.adb: Likewise.
! 	* libgnat/s-flocon.ads: Likewise.
! 	* libgnat/s-flocon__none.adb: Likewise.
! 	* libgnat/s-fode128.ads: Likewise.
! 	* libgnat/s-fode32.ads: Likewise.
! 	* libgnat/s-fode64.ads: Likewise.
! 	* libgnat/s-fofi128.ads: Likewise.
! 	* libgnat/s-fofi32.ads: Likewise.
! 	* libgnat/s-fofi64.ads: Likewise.
! 	* libgnat/s-fore_d.adb: Likewise.
! 	* libgnat/s-fore_d.ads: Likewise.
! 	* libgnat/s-fore_f.adb: Likewise.
! 	* libgnat/s-fore_f.ads: Likewise.
! 	* libgnat/s-forrea.adb: Likewise.
! 	* libgnat/s-forrea.ads: Likewise.
! 	* libgnat/s-gearop.adb: Likewise.
! 	* libgnat/s-gearop.ads: Likewise.
! 	* libgnat/s-genbig.adb: Likewise.
! 	* libgnat/s-genbig.ads: Likewise.
! 	* libgnat/s-geveop.adb: Likewise.
! 	* libgnat/s-geveop.ads: Likewise.
! 	* libgnat/s-gloloc.adb: Likewise.
! 	* libgnat/s-gloloc.ads: Likewise.
! 	* libgnat/s-gloloc__mingw.adb: Likewise.
! 	* libgnat/s-htable.adb: Likewise.
! 	* libgnat/s-htable.ads: Likewise.
! 	* libgnat/s-imageb.adb: Likewise.
! 	* libgnat/s-imageb.ads: Likewise.
! 	* libgnat/s-imaged.adb: Likewise.
! 	* libgnat/s-imaged.ads: Likewise.
! 	* libgnat/s-imagef.adb: Likewise.
! 	* libgnat/s-imagef.ads: Likewise.
! 	* libgnat/s-imagei.adb: Likewise.
! 	* libgnat/s-imagei.ads: Likewise.
! 	* libgnat/s-imagen.adb: Likewise.
! 	* libgnat/s-imagen.ads: Likewise.
! 	* libgnat/s-imager.adb: Likewise.
! 	* libgnat/s-imager.ads: Likewise.
! 	* libgnat/s-imageu.adb: Likewise.
! 	* libgnat/s-imageu.ads: Likewise.
! 	* libgnat/s-imagew.adb: Likewise.
! 	* libgnat/s-imagew.ads: Likewise.
! 	* libgnat/s-imde128.ads: Likewise.
! 	* libgnat/s-imde32.ads: Likewise.
! 	* libgnat/s-imde64.ads: Likewise.
! 	* libgnat/s-imen16.ads: Likewise.
! 	* libgnat/s-imen32.ads: Likewise.
! 	* libgnat/s-imenu8.ads: Likewise.
! 	* libgnat/s-imfi128.ads: Likewise.
! 	* libgnat/s-imfi32.ads: Likewise.
! 	* libgnat/s-imfi64.ads: Likewise.
! 	* libgnat/s-imgbiu.adb: Likewise.
! 	* libgnat/s-imgbiu.ads: Likewise.
! 	* libgnat/s-imgboo.adb: Likewise.
! 	* libgnat/s-imgboo.ads: Likewise.
! 	* libgnat/s-imgcha.adb: Likewise.
! 	* libgnat/s-imgcha.ads: Likewise.
! 	* libgnat/s-imgflt.ads: Likewise.
! 	* libgnat/s-imgint.adb: Likewise.
! 	* libgnat/s-imgint.ads: Likewise.
! 	* libgnat/s-imglfl.ads: Likewise.
! 	* libgnat/s-imgllb.adb: Likewise.
! 	* libgnat/s-imgllb.ads: Likewise.
! 	* libgnat/s-imgllf.ads: Likewise.
! 	* libgnat/s-imglli.adb: Likewise.
! 	* libgnat/s-imglli.ads: Likewise.
! 	* libgnat/s-imglllb.ads: Likewise.
! 	* libgnat/s-imgllli.ads: Likewise.
! 	* libgnat/s-imglllu.ads: Likewise.
! 	* libgnat/s-imglllw.ads: Likewise.
! 	* libgnat/s-imgllu.adb: Likewise.
! 	* libgnat/s-imgllu.ads: Likewise.
! 	* libgnat/s-imgllw.adb: Likewise.
! 	* libgnat/s-imgllw.ads: Likewise.
! 	* libgnat/s-imgrea.adb: Likewise.
! 	* libgnat/s-imgrea.ads: Likewise.
! 	* libgnat/s-imguns.adb: Likewise.
! 	* libgnat/s-imguns.ads: Likewise.
! 	* libgnat/s-imguti.adb: Likewise.
! 	* libgnat/s-imguti.ads: Likewise.
! 	* libgnat/s-imgwch.adb: Likewise.
! 	* libgnat/s-imgwch.ads: Likewise.
! 	* libgnat/s-imgwiu.adb: Likewise.
! 	* libgnat/s-imgwiu.ads: Likewise.
! 	* libgnat/s-io.adb: Likewise.
! 	* libgnat/s-io.ads: Likewise.
! 	* libgnat/s-llflex.ads: Likewise.
! 	* libgnat/s-maccod.ads: Likewise.
! 	* libgnat/s-mantis.adb: Likewise.
! 	* libgnat/s-mantis.ads: Likewise.
! 	* libgnat/s-mastop.adb: Likewise.
! 	* libgnat/s-mastop.ads: Likewise.
! 	* libgnat/s-memcop.ads: Likewise.
! 	* libgnat/s-memory.adb: Likewise.
! 	* libgnat/s-memory.ads: Likewise.
! 	* libgnat/s-mmap.adb: Likewise.
! 	* libgnat/s-mmap.ads: Likewise.
! 	* libgnat/s-mmauni__long.ads: Likewise.
! 	* libgnat/s-mmosin__mingw.adb: Likewise.
! 	* libgnat/s-mmosin__mingw.ads: Likewise.
! 	* libgnat/s-mmosin__unix.adb: Likewise.
! 	* libgnat/s-mmosin__unix.ads: Likewise.
! 	* libgnat/s-multip.adb: Likewise.
! 	* libgnat/s-objrea.adb: Likewise.
! 	* libgnat/s-objrea.ads: Likewise.
! 	* libgnat/s-optide.adb: Likewise.
! 	* libgnat/s-os_lib.adb: Likewise.
! 	* libgnat/s-os_lib.ads: Likewise.
! 	* libgnat/s-osprim.ads: Likewise.
! 	* libgnat/s-osprim__darwin.adb: Likewise.
! 	* libgnat/s-osprim__lynxos.ads: Likewise.
! 	* libgnat/s-osprim__mingw.adb: Likewise.
! 	* libgnat/s-osprim__posix.adb: Likewise.
! 	* libgnat/s-osprim__posix2008.adb: Likewise.
! 	* libgnat/s-osprim__rtems.adb: Likewise.
! 	* libgnat/s-osprim__solaris.adb: Likewise.
! 	* libgnat/s-osprim__unix.adb: Likewise.
! 	* libgnat/s-osprim__x32.adb: Likewise.
! 	* libgnat/s-pack03.adb: Likewise.
! 	* libgnat/s-pack03.ads: Likewise.
! 	* libgnat/s-pack05.adb: Likewise.
! 	* libgnat/s-pack05.ads: Likewise.
! 	* libgnat/s-pack06.adb: Likewise.
! 	* libgnat/s-pack06.ads: Likewise.
! 	* libgnat/s-pack07.adb: Likewise.
! 	* libgnat/s-pack07.ads: Likewise.
! 	* libgnat/s-pack09.adb: Likewise.
! 	* libgnat/s-pack09.ads: Likewise.
! 	* libgnat/s-pack10.adb: Likewise.
! 	* libgnat/s-pack10.ads: Likewise.
! 	* libgnat/s-pack100.adb: Likewise.
! 	* libgnat/s-pack100.ads: Likewise.
! 	* libgnat/s-pack101.adb: Likewise.
! 	* libgnat/s-pack101.ads: Likewise.
! 	* libgnat/s-pack102.adb: Likewise.
! 	* libgnat/s-pack102.ads: Likewise.
! 	* libgnat/s-pack103.adb: Likewise.
! 	* libgnat/s-pack103.ads: Likewise.
! 	* libgnat/s-pack104.adb: Likewise.
! 	* libgnat/s-pack104.ads: Likewise.
! 	* libgnat/s-pack105.adb: Likewise.
! 	* libgnat/s-pack105.ads: Likewise.
! 	* libgnat/s-pack106.adb: Likewise.
! 	* libgnat/s-pack106.ads: Likewise.
! 	* libgnat/s-pack107.adb: Likewise.
! 	* libgnat/s-pack107.ads: Likewise.
! 	* libgnat/s-pack108.adb: Likewise.
! 	* libgnat/s-pack108.ads: Likewise.
! 	* libgnat/s-pack109.adb: Likewise.
! 	* libgnat/s-pack109.ads: Likewise.
! 	* libgnat/s-pack11.adb: Likewise.
! 	* libgnat/s-pack11.ads: Likewise.
! 	* libgnat/s-pack110.adb: Likewise.
! 	* libgnat/s-pack110.ads: Likewise.
! 	* libgnat/s-pack111.adb: Likewise.
! 	* libgnat/s-pack111.ads: Likewise.
! 	* libgnat/s-pack112.adb: Likewise.
! 	* libgnat/s-pack112.ads: Likewise.
! 	* libgnat/s-pack113.adb: Likewise.
! 	* libgnat/s-pack113.ads: Likewise.
! 	* libgnat/s-pack114.adb: Likewise.
! 	* libgnat/s-pack114.ads: Likewise.
! 	* libgnat/s-pack115.adb: Likewise.
! 	* libgnat/s-pack115.ads: Likewise.
! 	* libgnat/s-pack116.adb: Likewise.
! 	* libgnat/s-pack116.ads: Likewise.
! 	* libgnat/s-pack117.adb: Likewise.
! 	* libgnat/s-pack117.ads: Likewise.
! 	* libgnat/s-pack118.adb: Likewise.
! 	* libgnat/s-pack118.ads: Likewise.
! 	* libgnat/s-pack119.adb: Likewise.
! 	* libgnat/s-pack119.ads: Likewise.
! 	* libgnat/s-pack12.adb: Likewise.
! 	* libgnat/s-pack12.ads: Likewise.
! 	* libgnat/s-pack120.adb: Likewise.
! 	* libgnat/s-pack120.ads: Likewise.
! 	* libgnat/s-pack121.adb: Likewise.
! 	* libgnat/s-pack121.ads: Likewise.
! 	* libgnat/s-pack122.adb: Likewise.
! 	* libgnat/s-pack122.ads: Likewise.
! 	* libgnat/s-pack123.adb: Likewise.
! 	* libgnat/s-pack123.ads: Likewise.
! 	* libgnat/s-pack124.adb: Likewise.
! 	* libgnat/s-pack124.ads: Likewise.
! 	* libgnat/s-pack125.adb: Likewise.
! 	* libgnat/s-pack125.ads: Likewise.
! 	* libgnat/s-pack126.adb: Likewise.
! 	* libgnat/s-pack126.ads: Likewise.
! 	* libgnat/s-pack127.adb: Likewise.
! 	* libgnat/s-pack127.ads: Likewise.
! 	* libgnat/s-pack13.adb: Likewise.
! 	* libgnat/s-pack13.ads: Likewise.
! 	* libgnat/s-pack14.adb: Likewise.
! 	* libgnat/s-pack14.ads: Likewise.
! 	* libgnat/s-pack15.adb: Likewise.
! 	* libgnat/s-pack15.ads: Likewise.
! 	* libgnat/s-pack17.adb: Likewise.
! 	* libgnat/s-pack17.ads: Likewise.
! 	* libgnat/s-pack18.adb: Likewise.
! 	* libgnat/s-pack18.ads: Likewise.
! 	* libgnat/s-pack19.adb: Likewise.
! 	* libgnat/s-pack19.ads: Likewise.
! 	* libgnat/s-pack20.adb: Likewise.
! 	* libgnat/s-pack20.ads: Likewise.
! 	* libgnat/s-pack21.adb: Likewise.
! 	* libgnat/s-pack21.ads: Likewise.
! 	* libgnat/s-pack22.adb: Likewise.
! 	* libgnat/s-pack22.ads: Likewise.
! 	* libgnat/s-pack23.adb: Likewise.
! 	* libgnat/s-pack23.ads: Likewise.
! 	* libgnat/s-pack24.adb: Likewise.
! 	* libgnat/s-pack24.ads: Likewise.
! 	* libgnat/s-pack25.adb: Likewise.
! 	* libgnat/s-pack25.ads: Likewise.
! 	* libgnat/s-pack26.adb: Likewise.
! 	* libgnat/s-pack26.ads: Likewise.
! 	* libgnat/s-pack27.adb: Likewise.
! 	* libgnat/s-pack27.ads: Likewise.
! 	* libgnat/s-pack28.adb: Likewise.
! 	* libgnat/s-pack28.ads: Likewise.
! 	* libgnat/s-pack29.adb: Likewise.
! 	* libgnat/s-pack29.ads: Likewise.
! 	* libgnat/s-pack30.adb: Likewise.
! 	* libgnat/s-pack30.ads: Likewise.
! 	* libgnat/s-pack31.adb: Likewise.
! 	* libgnat/s-pack31.ads: Likewise.
! 	* libgnat/s-pack33.adb: Likewise.
! 	* libgnat/s-pack33.ads: Likewise.
! 	* libgnat/s-pack34.adb: Likewise.
! 	* libgnat/s-pack34.ads: Likewise.
! 	* libgnat/s-pack35.adb: Likewise.
! 	* libgnat/s-pack35.ads: Likewise.
! 	* libgnat/s-pack36.adb: Likewise.
! 	* libgnat/s-pack36.ads: Likewise.
! 	* libgnat/s-pack37.adb: Likewise.
! 	* libgnat/s-pack37.ads: Likewise.
! 	* libgnat/s-pack38.adb: Likewise.
! 	* libgnat/s-pack38.ads: Likewise.
! 	* libgnat/s-pack39.adb: Likewise.
! 	* libgnat/s-pack39.ads: Likewise.
! 	* libgnat/s-pack40.adb: Likewise.
! 	* libgnat/s-pack40.ads: Likewise.
! 	* libgnat/s-pack41.adb: Likewise.
! 	* libgnat/s-pack41.ads: Likewise.
! 	* libgnat/s-pack42.adb: Likewise.
! 	* libgnat/s-pack42.ads: Likewise.
! 	* libgnat/s-pack43.adb: Likewise.
! 	* libgnat/s-pack43.ads: Likewise.
! 	* libgnat/s-pack44.adb: Likewise.
! 	* libgnat/s-pack44.ads: Likewise.
! 	* libgnat/s-pack45.adb: Likewise.
! 	* libgnat/s-pack45.ads: Likewise.
! 	* libgnat/s-pack46.adb: Likewise.
! 	* libgnat/s-pack46.ads: Likewise.
! 	* libgnat/s-pack47.adb: Likewise.
! 	* libgnat/s-pack47.ads: Likewise.
! 	* libgnat/s-pack48.adb: Likewise.
! 	* libgnat/s-pack48.ads: Likewise.
! 	* libgnat/s-pack49.adb: Likewise.
! 	* libgnat/s-pack49.ads: Likewise.
! 	* libgnat/s-pack50.adb: Likewise.
! 	* libgnat/s-pack50.ads: Likewise.
! 	* libgnat/s-pack51.adb: Likewise.
! 	* libgnat/s-pack51.ads: Likewise.
! 	* libgnat/s-pack52.adb: Likewise.
! 	* libgnat/s-pack52.ads: Likewise.
! 	* libgnat/s-pack53.adb: Likewise.
! 	* libgnat/s-pack53.ads: Likewise.
! 	* libgnat/s-pack54.adb: Likewise.
! 	* libgnat/s-pack54.ads: Likewise.
! 	* libgnat/s-pack55.adb: Likewise.
! 	* libgnat/s-pack55.ads: Likewise.
! 	* libgnat/s-pack56.adb: Likewise.
! 	* libgnat/s-pack56.ads: Likewise.
! 	* libgnat/s-pack57.adb: Likewise.
! 	* libgnat/s-pack57.ads: Likewise.
! 	* libgnat/s-pack58.adb: Likewise.
! 	* libgnat/s-pack58.ads: Likewise.
! 	* libgnat/s-pack59.adb: Likewise.
! 	* libgnat/s-pack59.ads: Likewise.
! 	* libgnat/s-pack60.adb: Likewise.
! 	* libgnat/s-pack60.ads: Likewise.
! 	* libgnat/s-pack61.adb: Likewise.
! 	* libgnat/s-pack61.ads: Likewise.
! 	* libgnat/s-pack62.adb: Likewise.
! 	* libgnat/s-pack62.ads: Likewise.
! 	* libgnat/s-pack63.adb: Likewise.
! 	* libgnat/s-pack63.ads: Likewise.
! 	* libgnat/s-pack65.adb: Likewise.
! 	* libgnat/s-pack65.ads: Likewise.
! 	* libgnat/s-pack66.adb: Likewise.
! 	* libgnat/s-pack66.ads: Likewise.
! 	* libgnat/s-pack67.adb: Likewise.
! 	* libgnat/s-pack67.ads: Likewise.
! 	* libgnat/s-pack68.adb: Likewise.
! 	* libgnat/s-pack68.ads: Likewise.
! 	* libgnat/s-pack69.adb: Likewise.
! 	* libgnat/s-pack69.ads: Likewise.
! 	* libgnat/s-pack70.adb: Likewise.
! 	* libgnat/s-pack70.ads: Likewise.
! 	* libgnat/s-pack71.adb: Likewise.
! 	* libgnat/s-pack71.ads: Likewise.
! 	* libgnat/s-pack72.adb: Likewise.
! 	* libgnat/s-pack72.ads: Likewise.
! 	* libgnat/s-pack73.adb: Likewise.
! 	* libgnat/s-pack73.ads: Likewise.
! 	* libgnat/s-pack74.adb: Likewise.
! 	* libgnat/s-pack74.ads: Likewise.
! 	* libgnat/s-pack75.adb: Likewise.
! 	* libgnat/s-pack75.ads: Likewise.
! 	* libgnat/s-pack76.adb: Likewise.
! 	* libgnat/s-pack76.ads: Likewise.
! 	* libgnat/s-pack77.adb: Likewise.
! 	* libgnat/s-pack77.ads: Likewise.
! 	* libgnat/s-pack78.adb: Likewise.
! 	* libgnat/s-pack78.ads: Likewise.
! 	* libgnat/s-pack79.adb: Likewise.
! 	* libgnat/s-pack79.ads: Likewise.
! 	* libgnat/s-pack80.adb: Likewise.
! 	* libgnat/s-pack80.ads: Likewise.
! 	* libgnat/s-pack81.adb: Likewise.
! 	* libgnat/s-pack81.ads: Likewise.
! 	* libgnat/s-pack82.adb: Likewise.
! 	* libgnat/s-pack82.ads: Likewise.
! 	* libgnat/s-pack83.adb: Likewise.
! 	* libgnat/s-pack83.ads: Likewise.
! 	* libgnat/s-pack84.adb: Likewise.
! 	* libgnat/s-pack84.ads: Likewise.
! 	* libgnat/s-pack85.adb: Likewise.
! 	* libgnat/s-pack85.ads: Likewise.
! 	* libgnat/s-pack86.adb: Likewise.
! 	* libgnat/s-pack86.ads: Likewise.
! 	* libgnat/s-pack87.adb: Likewise.
! 	* libgnat/s-pack87.ads: Likewise.
! 	* libgnat/s-pack88.adb: Likewise.
! 	* libgnat/s-pack88.ads: Likewise.
! 	* libgnat/s-pack89.adb: Likewise.
! 	* libgnat/s-pack89.ads: Likewise.
! 	* libgnat/s-pack90.adb: Likewise.
! 	* libgnat/s-pack90.ads: Likewise.
! 	* libgnat/s-pack91.adb: Likewise.
! 	* libgnat/s-pack91.ads: Likewise.
! 	* libgnat/s-pack92.adb: Likewise.
! 	* libgnat/s-pack92.ads: Likewise.
! 	* libgnat/s-pack93.adb: Likewise.
! 	* libgnat/s-pack93.ads: Likewise.
! 	* libgnat/s-pack94.adb: Likewise.
! 	* libgnat/s-pack94.ads: Likewise.
! 	* libgnat/s-pack95.adb: Likewise.
! 	* libgnat/s-pack95.ads: Likewise.
! 	* libgnat/s-pack96.adb: Likewise.
! 	* libgnat/s-pack96.ads: Likewise.
! 	* libgnat/s-pack97.adb: Likewise.
! 	* libgnat/s-pack97.ads: Likewise.
! 	* libgnat/s-pack98.adb: Likewise.
! 	* libgnat/s-pack98.ads: Likewise.
! 	* libgnat/s-pack99.adb: Likewise.
! 	* libgnat/s-pack99.ads: Likewise.
! 	* libgnat/s-parame.adb: Likewise.
! 	* libgnat/s-parame.ads: Likewise.
! 	* libgnat/s-parame__hpux.ads: Likewise.
! 	* libgnat/s-parame__posix2008.ads: Likewise.
! 	* libgnat/s-parame__rtems.adb: Likewise.
! 	* libgnat/s-parame__vxworks.adb: Likewise.
! 	* libgnat/s-parame__vxworks.ads: Likewise.
! 	* libgnat/s-parint.adb: Likewise.
! 	* libgnat/s-parint.ads: Likewise.
! 	* libgnat/s-pehage.adb: Likewise.
! 	* libgnat/s-pehage.ads: Likewise.
! 	* libgnat/s-pooglo.adb: Likewise.
! 	* libgnat/s-pooglo.ads: Likewise.
! 	* libgnat/s-pooloc.adb: Likewise.
! 	* libgnat/s-pooloc.ads: Likewise.
! 	* libgnat/s-poosiz.adb: Likewise.
! 	* libgnat/s-poosiz.ads: Likewise.
! 	* libgnat/s-powflt.ads: Likewise.
! 	* libgnat/s-powlfl.ads: Likewise.
! 	* libgnat/s-powllf.ads: Likewise.
! 	* libgnat/s-purexc.ads: Likewise.
! 	* libgnat/s-putima.adb: Likewise.
! 	* libgnat/s-putima.ads: Likewise.
! 	* libgnat/s-rannum.adb: Likewise.
! 	* libgnat/s-rannum.ads: Likewise.
! 	* libgnat/s-ransee.adb: Likewise.
! 	* libgnat/s-ransee.ads: Likewise.
! 	* libgnat/s-regexp.adb: Likewise.
! 	* libgnat/s-regexp.ads: Likewise.
! 	* libgnat/s-regpat.adb: Likewise.
! 	* libgnat/s-regpat.ads: Likewise.
! 	* libgnat/s-resfil.adb: Likewise.
! 	* libgnat/s-resfil.ads: Likewise.
! 	* libgnat/s-restri.adb: Likewise.
! 	* libgnat/s-restri.ads: Likewise.
! 	* libgnat/s-rident.ads: Likewise.
! 	* libgnat/s-rpc.adb: Likewise.
! 	* libgnat/s-rpc.ads: Likewise.
! 	* libgnat/s-scaval.adb: Likewise.
! 	* libgnat/s-scaval.ads: Likewise.
! 	* libgnat/s-scaval__128.adb: Likewise.
! 	* libgnat/s-scaval__128.ads: Likewise.
! 	* libgnat/s-secsta.adb: Likewise.
! 	* libgnat/s-secsta.ads: Likewise.
! 	* libgnat/s-sequio.adb: Likewise.
! 	* libgnat/s-sequio.ads: Likewise.
! 	* libgnat/s-shabig.ads: Likewise.
! 	* libgnat/s-shasto.adb: Likewise.
! 	* libgnat/s-shasto.ads: Likewise.
! 	* libgnat/s-soflin.adb: Likewise.
! 	* libgnat/s-soflin.ads: Likewise.
! 	* libgnat/s-soliin.adb: Likewise.
! 	* libgnat/s-soliin.ads: Likewise.
! 	* libgnat/s-spsufi.adb: Likewise.
! 	* libgnat/s-spsufi.ads: Likewise.
! 	* libgnat/s-stache.adb: Likewise.
! 	* libgnat/s-stache.ads: Likewise.
! 	* libgnat/s-stalib.adb: Likewise.
! 	* libgnat/s-stalib.ads: Likewise.
! 	* libgnat/s-statxd.adb: Likewise.
! 	* libgnat/s-statxd.ads: Likewise.
! 	* libgnat/s-stausa.adb: Likewise.
! 	* libgnat/s-stausa.ads: Likewise.
! 	* libgnat/s-stchop.adb: Likewise.
! 	* libgnat/s-stchop.ads: Likewise.
! 	* libgnat/s-stchop__limit.ads: Likewise.
! 	* libgnat/s-stchop__vxworks.adb: Likewise.
! 	* libgnat/s-stoele.adb: Likewise.
! 	* libgnat/s-stoele.ads: Likewise.
! 	* libgnat/s-stopoo.adb: Likewise.
! 	* libgnat/s-stopoo.ads: Likewise.
! 	* libgnat/s-stposu.adb: Likewise.
! 	* libgnat/s-stposu.ads: Likewise.
! 	* libgnat/s-stratt.adb: Likewise.
! 	* libgnat/s-stratt.ads: Likewise.
! 	* libgnat/s-strcom.adb: Likewise.
! 	* libgnat/s-strcom.ads: Likewise.
! 	* libgnat/s-strhas.adb: Likewise.
! 	* libgnat/s-strhas.ads: Likewise.
! 	* libgnat/s-string.adb: Likewise.
! 	* libgnat/s-string.ads: Likewise.
! 	* libgnat/s-ststop.adb: Likewise.
! 	* libgnat/s-ststop.ads: Likewise.
! 	* libgnat/s-tasloc.adb: Likewise.
! 	* libgnat/s-tasloc.ads: Likewise.
! 	* libgnat/s-traceb.adb: Likewise.
! 	* libgnat/s-traceb.ads: Likewise.
! 	* libgnat/s-traceb__hpux.adb: Likewise.
! 	* libgnat/s-traceb__mastop.adb: Likewise.
! 	* libgnat/s-traent.adb: Likewise.
! 	* libgnat/s-traent.ads: Likewise.
! 	* libgnat/s-trasym.adb: Likewise.
! 	* libgnat/s-trasym.ads: Likewise.
! 	* libgnat/s-trasym__dwarf.adb: Likewise.
! 	* libgnat/s-tsmona.adb: Likewise.
! 	* libgnat/s-tsmona__linux.adb: Likewise.
! 	* libgnat/s-tsmona__mingw.adb: Likewise.
! 	* libgnat/s-unstyp.ads: Likewise.
! 	* libgnat/s-utf_32.adb: Likewise.
! 	* libgnat/s-utf_32.ads: Likewise.
! 	* libgnat/s-vade128.ads: Likewise.
! 	* libgnat/s-vade32.ads: Likewise.
! 	* libgnat/s-vade64.ads: Likewise.
! 	* libgnat/s-vaen16.ads: Likewise.
! 	* libgnat/s-vaen32.ads: Likewise.
! 	* libgnat/s-vaenu8.ads: Likewise.
! 	* libgnat/s-vafi128.ads: Likewise.
! 	* libgnat/s-vafi32.ads: Likewise.
! 	* libgnat/s-vafi64.ads: Likewise.
! 	* libgnat/s-valboo.adb: Likewise.
! 	* libgnat/s-valboo.ads: Likewise.
! 	* libgnat/s-valcha.adb: Likewise.
! 	* libgnat/s-valcha.ads: Likewise.
! 	* libgnat/s-valflt.ads: Likewise.
! 	* libgnat/s-valint.adb: Likewise.
! 	* libgnat/s-valint.ads: Likewise.
! 	* libgnat/s-vallfl.ads: Likewise.
! 	* libgnat/s-valllf.ads: Likewise.
! 	* libgnat/s-vallli.adb: Likewise.
! 	* libgnat/s-vallli.ads: Likewise.
! 	* libgnat/s-valllli.ads: Likewise.
! 	* libgnat/s-vallllu.ads: Likewise.
! 	* libgnat/s-valllu.adb: Likewise.
! 	* libgnat/s-valllu.ads: Likewise.
! 	* libgnat/s-valrea.adb: Likewise.
! 	* libgnat/s-valrea.ads: Likewise.
! 	* libgnat/s-valued.adb: Likewise.
! 	* libgnat/s-valued.ads: Likewise.
! 	* libgnat/s-valuef.adb: Likewise.
! 	* libgnat/s-valuef.ads: Likewise.
! 	* libgnat/s-valuei.adb: Likewise.
! 	* libgnat/s-valuei.ads: Likewise.
! 	* libgnat/s-valuen.adb: Likewise.
! 	* libgnat/s-valuen.ads: Likewise.
! 	* libgnat/s-valuer.adb: Likewise.
! 	* libgnat/s-valuer.ads: Likewise.
! 	* libgnat/s-valueu.adb: Likewise.
! 	* libgnat/s-valueu.ads: Likewise.
! 	* libgnat/s-valuns.adb: Likewise.
! 	* libgnat/s-valuns.ads: Likewise.
! 	* libgnat/s-valuti.adb: Likewise.
! 	* libgnat/s-valuti.ads: Likewise.
! 	* libgnat/s-valwch.adb: Likewise.
! 	* libgnat/s-valwch.ads: Likewise.
! 	* libgnat/s-veboop.adb: Likewise.
! 	* libgnat/s-veboop.ads: Likewise.
! 	* libgnat/s-vector.ads: Likewise.
! 	* libgnat/s-vercon.adb: Likewise.
! 	* libgnat/s-vercon.ads: Likewise.
! 	* libgnat/s-wchcnv.adb: Likewise.
! 	* libgnat/s-wchcnv.ads: Likewise.
! 	* libgnat/s-wchcon.adb: Likewise.
! 	* libgnat/s-wchcon.ads: Likewise.
! 	* libgnat/s-wchjis.adb: Likewise.
! 	* libgnat/s-wchjis.ads: Likewise.
! 	* libgnat/s-wchstw.adb: Likewise.
! 	* libgnat/s-wchstw.ads: Likewise.
! 	* libgnat/s-wchwts.adb: Likewise.
! 	* libgnat/s-wchwts.ads: Likewise.
! 	* libgnat/s-widboo.adb: Likewise.
! 	* libgnat/s-widboo.ads: Likewise.
! 	* libgnat/s-widcha.adb: Likewise.
! 	* libgnat/s-widcha.ads: Likewise.
! 	* libgnat/s-widenu.adb: Likewise.
! 	* libgnat/s-widenu.ads: Likewise.
! 	* libgnat/s-widint.ads: Likewise.
! 	* libgnat/s-widlli.adb: Likewise.
! 	* libgnat/s-widlli.ads: Likewise.
! 	* libgnat/s-widllli.ads: Likewise.
! 	* libgnat/s-widlllu.ads: Likewise.
! 	* libgnat/s-widllu.adb: Likewise.
! 	* libgnat/s-widllu.ads: Likewise.
! 	* libgnat/s-widthi.adb: Likewise.
! 	* libgnat/s-widthi.ads: Likewise.
! 	* libgnat/s-widthu.adb: Likewise.
! 	* libgnat/s-widthu.ads: Likewise.
! 	* libgnat/s-widuns.ads: Likewise.
! 	* libgnat/s-widwch.adb: Likewise.
! 	* libgnat/s-widwch.ads: Likewise.
! 	* libgnat/s-win32.ads: Likewise.
! 	* libgnat/s-winext.ads: Likewise.
! 	* libgnat/s-wwdcha.adb: Likewise.
! 	* libgnat/s-wwdcha.ads: Likewise.
! 	* libgnat/s-wwdenu.adb: Likewise.
! 	* libgnat/s-wwdenu.ads: Likewise.
! 	* libgnat/s-wwdwch.adb: Likewise.
! 	* libgnat/s-wwdwch.ads: Likewise.
! 	* libgnat/system-aix.ads: Likewise.
! 	* libgnat/system-darwin-arm.ads: Likewise.
! 	* libgnat/system-darwin-ppc.ads: Likewise.
! 	* libgnat/system-darwin-x86.ads: Likewise.
! 	* libgnat/system-djgpp.ads: Likewise.
! 	* libgnat/system-dragonfly-x86_64.ads: Likewise.
! 	* libgnat/system-freebsd.ads: Likewise.
! 	* libgnat/system-hpux-ia64.ads: Likewise.
! 	* libgnat/system-hpux.ads: Likewise.
! 	* libgnat/system-linux-alpha.ads: Likewise.
! 	* libgnat/system-linux-arm.ads: Likewise.
! 	* libgnat/system-linux-hppa.ads: Likewise.
! 	* libgnat/system-linux-ia64.ads: Likewise.
! 	* libgnat/system-linux-m68k.ads: Likewise.
! 	* libgnat/system-linux-mips.ads: Likewise.
! 	* libgnat/system-linux-ppc.ads: Likewise.
! 	* libgnat/system-linux-riscv.ads: Likewise.
! 	* libgnat/system-linux-s390.ads: Likewise.
! 	* libgnat/system-linux-sh4.ads: Likewise.
! 	* libgnat/system-linux-sparc.ads: Likewise.
! 	* libgnat/system-linux-x86.ads: Likewise.
! 	* libgnat/system-lynxos178-ppc.ads: Likewise.
! 	* libgnat/system-lynxos178-x86.ads: Likewise.
! 	* libgnat/system-mingw.ads: Likewise.
! 	* libgnat/system-qnx-aarch64.ads: Likewise.
! 	* libgnat/system-rtems.ads: Likewise.
! 	* libgnat/system-solaris-sparc.ads: Likewise.
! 	* libgnat/system-solaris-x86.ads: Likewise.
! 	* libgnat/system-vxworks-arm-rtp-smp.ads: Likewise.
! 	* libgnat/system-vxworks-arm-rtp.ads: Likewise.
! 	* libgnat/system-vxworks-arm.ads: Likewise.
! 	* libgnat/system-vxworks-e500-kernel.ads: Likewise.
! 	* libgnat/system-vxworks-e500-rtp-smp.ads: Likewise.
! 	* libgnat/system-vxworks-e500-rtp.ads: Likewise.
! 	* libgnat/system-vxworks-ppc-kernel.ads: Likewise.
! 	* libgnat/system-vxworks-ppc-rtp-smp.ads: Likewise.
! 	* libgnat/system-vxworks-ppc-rtp.ads: Likewise.
! 	* libgnat/system-vxworks-x86-kernel.ads: Likewise.
! 	* libgnat/system-vxworks-x86-rtp-smp.ads: Likewise.
! 	* libgnat/system-vxworks-x86-rtp.ads: Likewise.
! 	* libgnat/system-vxworks7-aarch64-rtp-smp.ads: Likewise.
! 	* libgnat/system-vxworks7-aarch64.ads: Likewise.
! 	* libgnat/system-vxworks7-arm-rtp-smp.ads: Likewise.
! 	* libgnat/system-vxworks7-arm.ads: Likewise.
! 	* libgnat/system-vxworks7-e500-kernel.ads: Likewise.
! 	* libgnat/system-vxworks7-e500-rtp-smp.ads: Likewise.
! 	* libgnat/system-vxworks7-e500-rtp.ads: Likewise.
! 	* libgnat/system-vxworks7-ppc-kernel.ads: Likewise.
! 	* libgnat/system-vxworks7-ppc-rtp-smp.ads: Likewise.
! 	* libgnat/system-vxworks7-ppc-rtp.ads: Likewise.
! 	* libgnat/system-vxworks7-ppc64-kernel.ads: Likewise.
! 	* libgnat/system-vxworks7-ppc64-rtp-smp.ads: Likewise.
! 	* libgnat/system-vxworks7-x86-kernel.ads: Likewise.
! 	* libgnat/system-vxworks7-x86-rtp-smp.ads: Likewise.
! 	* libgnat/system-vxworks7-x86-rtp.ads: Likewise.
! 	* libgnat/system-vxworks7-x86_64-kernel.ads: Likewise.
! 	* libgnat/system-vxworks7-x86_64-rtp-smp.ads: Likewise.
! 	* link.c: Likewise.
! 	* live.adb: Likewise.
! 	* live.ads: Likewise.
! 	* locales.c: Likewise.
! 	* make.adb: Likewise.
! 	* make.ads: Likewise.
! 	* make_util.adb: Likewise.
! 	* make_util.ads: Likewise.
! 	* makeusg.adb: Likewise.
! 	* makeusg.ads: Likewise.
! 	* mdll-fil.adb: Likewise.
! 	* mdll-fil.ads: Likewise.
! 	* mdll-utl.adb: Likewise.
! 	* mdll-utl.ads: Likewise.
! 	* mdll.adb: Likewise.
! 	* mdll.ads: Likewise.
! 	* mingw32.h: Likewise.
! 	* mkdir.c: Likewise.
! 	* namet-sp.adb: Likewise.
! 	* namet-sp.ads: Likewise.
! 	* namet.adb: Likewise.
! 	* namet.ads: Likewise.
! 	* namet.h: Likewise.
! 	* nlists.adb: Likewise.
! 	* nlists.ads: Likewise.
! 	* nlists.h: Likewise.
! 	* opt.adb: Likewise.
! 	* opt.ads: Likewise.
! 	* osint-b.adb: Likewise.
! 	* osint-b.ads: Likewise.
! 	* osint-c.adb: Likewise.
! 	* osint-c.ads: Likewise.
! 	* osint-l.adb: Likewise.
! 	* osint-l.ads: Likewise.
! 	* osint-m.adb: Likewise.
! 	* osint-m.ads: Likewise.
! 	* osint.adb: Likewise.
! 	* osint.ads: Likewise.
! 	* output.adb: Likewise.
! 	* output.ads: Likewise.
! 	* par-ch10.adb: Likewise.
! 	* par-ch11.adb: Likewise.
! 	* par-ch12.adb: Likewise.
! 	* par-ch13.adb: Likewise.
! 	* par-ch2.adb: Likewise.
! 	* par-ch3.adb: Likewise.
! 	* par-ch4.adb: Likewise.
! 	* par-ch5.adb: Likewise.
! 	* par-ch6.adb: Likewise.
! 	* par-ch7.adb: Likewise.
! 	* par-ch8.adb: Likewise.
! 	* par-ch9.adb: Likewise.
! 	* par-endh.adb: Likewise.
! 	* par-labl.adb: Likewise.
! 	* par-load.adb: Likewise.
! 	* par-prag.adb: Likewise.
! 	* par-sync.adb: Likewise.
! 	* par-tchk.adb: Likewise.
! 	* par-util.adb: Likewise.
! 	* par.adb: Likewise.
! 	* par.ads: Likewise.
! 	* par_sco.adb: Likewise.
! 	* par_sco.ads: Likewise.
! 	* pprint.adb: Likewise.
! 	* pprint.ads: Likewise.
! 	* prep.adb: Likewise.
! 	* prep.ads: Likewise.
! 	* prepcomp.adb: Likewise.
! 	* prepcomp.ads: Likewise.
! 	* put_scos.adb: Likewise.
! 	* put_scos.ads: Likewise.
! 	* raise-gcc.c: Likewise.
! 	* raise.c: Likewise.
! 	* raise.h: Likewise.
! 	* repinfo-input.adb: Likewise.
! 	* repinfo-input.ads: Likewise.
! 	* repinfo.adb: Likewise.
! 	* repinfo.ads: Likewise.
! 	* repinfo.h: Likewise.
! 	* restrict.adb: Likewise.
! 	* restrict.ads: Likewise.
! 	* rident.ads: Likewise.
! 	* rtfinal.c: Likewise.
! 	* rtinit.c: Likewise.
! 	* rtsfind.adb: Likewise.
! 	* rtsfind.ads: Likewise.
! 	* runtime.h: Likewise.
! 	* s-oscons-tmplt.c: Likewise.
! 	* sa_messages.adb: Likewise.
! 	* sa_messages.ads: Likewise.
! 	* scans.adb: Likewise.
! 	* scans.ads: Likewise.
! 	* scil_ll.adb: Likewise.
! 	* scil_ll.ads: Likewise.
! 	* scn.adb: Likewise.
! 	* scn.ads: Likewise.
! 	* scng.adb: Likewise.
! 	* scng.ads: Likewise.
! 	* scos.adb: Likewise.
! 	* scos.ads: Likewise.
! 	* scos.h: Likewise.
! 	* sdefault.ads: Likewise.
! 	* seh_init.c: Likewise.
! 	* sem.adb: Likewise.
! 	* sem.ads: Likewise.
! 	* sem_aggr.adb: Likewise.
! 	* sem_aggr.ads: Likewise.
! 	* sem_attr.adb: Likewise.
! 	* sem_attr.ads: Likewise.
! 	* sem_aux.adb: Likewise.
! 	* sem_aux.ads: Likewise.
! 	* sem_case.adb: Likewise.
! 	* sem_case.ads: Likewise.
! 	* sem_cat.adb: Likewise.
! 	* sem_cat.ads: Likewise.
! 	* sem_ch10.adb: Likewise.
! 	* sem_ch10.ads: Likewise.
! 	* sem_ch11.adb: Likewise.
! 	* sem_ch11.ads: Likewise.
! 	* sem_ch12.adb: Likewise.
! 	* sem_ch12.ads: Likewise.
! 	* sem_ch13.adb: Likewise.
! 	* sem_ch13.ads: Likewise.
! 	* sem_ch2.adb: Likewise.
! 	* sem_ch2.ads: Likewise.
! 	* sem_ch3.adb: Likewise.
! 	* sem_ch3.ads: Likewise.
! 	* sem_ch4.adb: Likewise.
! 	* sem_ch4.ads: Likewise.
! 	* sem_ch5.adb: Likewise.
! 	* sem_ch5.ads: Likewise.
! 	* sem_ch6.adb: Likewise.
! 	* sem_ch6.ads: Likewise.
! 	* sem_ch7.adb: Likewise.
! 	* sem_ch7.ads: Likewise.
! 	* sem_ch8.adb: Likewise.
! 	* sem_ch8.ads: Likewise.
! 	* sem_ch9.adb: Likewise.
! 	* sem_ch9.ads: Likewise.
! 	* sem_dim.adb: Likewise.
! 	* sem_dim.ads: Likewise.
! 	* sem_disp.adb: Likewise.
! 	* sem_disp.ads: Likewise.
! 	* sem_dist.adb: Likewise.
! 	* sem_dist.ads: Likewise.
! 	* sem_elab.adb: Likewise.
! 	* sem_elab.ads: Likewise.
! 	* sem_elim.adb: Likewise.
! 	* sem_elim.ads: Likewise.
! 	* sem_eval.adb: Likewise.
! 	* sem_eval.ads: Likewise.
! 	* sem_intr.adb: Likewise.
! 	* sem_intr.ads: Likewise.
! 	* sem_mech.adb: Likewise.
! 	* sem_mech.ads: Likewise.
! 	* sem_prag.adb: Likewise.
! 	* sem_prag.ads: Likewise.
! 	* sem_res.adb: Likewise.
! 	* sem_res.ads: Likewise.
! 	* sem_scil.adb: Likewise.
! 	* sem_scil.ads: Likewise.
! 	* sem_smem.adb: Likewise.
! 	* sem_smem.ads: Likewise.
! 	* sem_type.adb: Likewise.
! 	* sem_type.ads: Likewise.
! 	* sem_util.adb: Likewise.
! 	* sem_util.ads: Likewise.
! 	* sem_warn.adb: Likewise.
! 	* sem_warn.ads: Likewise.
! 	* set_targ.adb: Likewise.
! 	* set_targ.ads: Likewise.
! 	* sfn_scan.adb: Likewise.
! 	* sfn_scan.ads: Likewise.
! 	* sigtramp-armdroid.c: Likewise.
! 	* sigtramp-ios.c: Likewise.
! 	* sigtramp-qnx.c: Likewise.
! 	* sigtramp-vxworks-target.h: Likewise.
! 	* sigtramp-vxworks.c: Likewise.
! 	* sigtramp.h: Likewise.
! 	* sinfo-cn.adb: Likewise.
! 	* sinfo-cn.ads: Likewise.
! 	* sinfo-utils.adb: Likewise.
! 	* sinfo-utils.ads: Likewise.
! 	* sinfo.adb: Likewise.
! 	* sinfo.ads: Likewise.
! 	* sinput-c.adb: Likewise.
! 	* sinput-c.ads: Likewise.
! 	* sinput-d.adb: Likewise.
! 	* sinput-d.ads: Likewise.
! 	* sinput-l.adb: Likewise.
! 	* sinput-l.ads: Likewise.
! 	* sinput.adb: Likewise.
! 	* sinput.ads: Likewise.
! 	* socket.c: Likewise.
! 	* spark_xrefs.adb: Likewise.
! 	* spark_xrefs.ads: Likewise.
! 	* sprint.adb: Likewise.
! 	* sprint.ads: Likewise.
! 	* stand.ads: Likewise.
! 	* stringt.adb: Likewise.
! 	* stringt.ads: Likewise.
! 	* stringt.h: Likewise.
! 	* strub.adb: Likewise.
! 	* strub.ads: Likewise.
! 	* style.adb: Likewise.
! 	* style.ads: Likewise.
! 	* styleg.adb: Likewise.
! 	* styleg.ads: Likewise.
! 	* stylesw.adb: Likewise.
! 	* stylesw.ads: Likewise.
! 	* switch-b.adb: Likewise.
! 	* switch-b.ads: Likewise.
! 	* switch-c.adb: Likewise.
! 	* switch-c.ads: Likewise.
! 	* switch-m.adb: Likewise.
! 	* switch-m.ads: Likewise.
! 	* switch.adb: Likewise.
! 	* switch.ads: Likewise.
! 	* sysdep.c: Likewise.
! 	* table.adb: Likewise.
! 	* table.ads: Likewise.
! 	* targext.c: Likewise.
! 	* targparm.adb: Likewise.
! 	* targparm.ads: Likewise.
! 	* tbuild.adb: Likewise.
! 	* tbuild.ads: Likewise.
! 	* tempdir.adb: Likewise.
! 	* tempdir.ads: Likewise.
! 	* terminals.c: Likewise.
! 	* tracebak.c: Likewise.
! 	* treepr.adb: Likewise.
! 	* treepr.ads: Likewise.
! 	* ttypes.ads: Likewise.
! 	* types.adb: Likewise.
! 	* types.ads: Likewise.
! 	* types.h: Likewise.
! 	* uintp.adb: Likewise.
! 	* uintp.ads: Likewise.
! 	* uintp.h: Likewise.
! 	* uname.adb: Likewise.
! 	* uname.ads: Likewise.
! 	* urealp.adb: Likewise.
! 	* urealp.ads: Likewise.
! 	* urealp.h: Likewise.
! 	* usage.adb: Likewise.
! 	* usage.ads: Likewise.
! 	* validsw.adb: Likewise.
! 	* validsw.ads: Likewise.
! 	* vast.adb: Likewise.
! 	* vast.ads: Likewise.
! 	* warnsw.adb: Likewise.
! 	* warnsw.ads: Likewise.
! 	* widechar.adb: Likewise.
! 	* widechar.ads: Likewise.
! 	* xoscons.adb: Likewise.
! 	* xr_tabls.adb: Likewise.
! 	* xr_tabls.ads: Likewise.
! 	* xref_lib.adb: Likewise.
! 	* xref_lib.ads: Likewise.
! 	* xsnamest.adb: Likewise.
! 	* xutil.adb: Likewise.
! 	* xutil.ads: Likewise.
  
! 2022-01-11  Richard Kenner  <kenner@adacore.com>
  
! 	* debug.adb: Add documentation for new -gnatd_u and old -gnatd_R
! 	flags used for GNAT LLVM and its CCG.
  
! 2022-01-11  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* Makefile.rtl (X86_TARGET_PAIRS): Use __builtin variant of
! 	System.Atomic_Counters.
! 	* libgnat/s-atocou__x86.adb: Remove.
  
! 2022-01-10  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/trans.c (Identifier_to_gnu): Use correct subtype.
! 	(elaborate_profile): New function.
! 	(Call_to_gnu): Call it on the formals and the result type before
! 	retrieving the translated result type from the subprogram type.
  
! 2022-01-10  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Type>: Fix
! 	computation of boolean result in the unchecked union case.
! 	(components_to_record): Rename MAYBE_UNUSED parameter to IN_VARIANT
! 	and remove local variable of the same name.  Pass NULL recursively
! 	as P_GNU_REP_LIST for nested variants in the unchecked union case.
  
! 2022-01-10  Eric Botcazou  <ebotcazou@adacore.com>
  
! 	* gcc-interface/trans.c (lvalue_required_p) <N_Pragma>: New case.
! 	<N_Pragma_Argument_Association>: Likewise.
! 	(Pragma_to_gnu) <Pragma_Inspection_Point>: Fetch the corresponding
! 	variable of a constant before marking it as addressable.
  
! 2022-01-10  Arnaud Charlet  <charlet@adacore.com>
  
! 	* gcc-interface/Make-lang.in (ADA_GENERATED_FILES): Remove
! 	s-casuti.ad?, s-crtl.ad?, s-os_lib.ad?.  Update list of object
! 	files accordingly.
  
! 2022-01-10  Piotr Trojanek  <trojanek@adacore.com>
  
! 	* libgnat/s-atopri.ads (Atomic_Compare_Exchange): Replaces
! 	deprecated Sync_Compare_And_Swap.
! 	* libgnat/s-atopri.adb (Lock_Free_Try_Write): Switch from __sync
! 	to __atomic builtins.
! 
! 2022-01-10  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* libgnat/s-exponn.adb, libgnat/s-expont.adb,
! 	libgnat/s-exponu.adb, libgnat/s-widthi.adb,
! 	libgnat/s-widthu.adb: Remove CodePeer annotations for pragma
! 	Loop_Variant.
! 
! 2022-01-10  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_prag.adb (Expand_Pragma_Loop_Variant): Disable expansion
! 	in CodePeer mode.
! 
! 2022-01-10  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* sem_util.adb (Is_Child_Or_Sibling): Fix typo in comment.
! 
! 2022-01-10  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	* exp_pakd.adb (Install_PAT): If the PAT is a scalar type, apply
! 	the canonical adjustment to its alignment.
! 
! 2022-01-10  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* libgnat/s-atocou__builtin.adb (Decrement, Increment): Switch
! 	from __sync to __atomic builtins; use 'Address to be consistent
! 	with System.Atomic_Primitives.
! 
! 2022-01-10  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	* exp_pakd.adb (Install_PAT): Do not reset the alignment here.
! 	* layout.adb (Layout_Type): Call Adjust_Esize_Alignment after having
! 	copied the RM_Size onto the Esize when the latter is too small.
! 
! 2022-01-10  Justin Squirek  <squirek@adacore.com>
! 
! 	* sem_warn.adb (Check_References): Handle arrays of tasks
! 	similar to task objects.
! 
! 2022-01-07  Patrick Bernardi  <bernardi@adacore.com>
! 
! 	* libgnat/a-direct.adb (Search_Data): Remove type.
! 	(Directory_Vectors): New package instantiation.
! 	(Search_State): New type.
! 	(Fetch_Next_Entry): Remove.
! 	(Close): Remove.
! 	(Finalize): Rewritten.
! 	(Full_Name): Ditto.
! 	(Get_Next_Entry): Return next entry from Search results vector
! 	rather than querying the directory directly using readdir.
! 	(Kind): Rewritten.
! 	(Modification_Time): Rewritten.
! 	(More_Entries): Use Search state cursor to determine if more
! 	entries are available for users to read.
! 	(Simple_Name): Rewritten.
! 	(Size): Rewritten.
! 	(Start_Search_Internal): Rewritten to load the contents of the
! 	directory that matches the pattern and filter into the search
! 	object.
! 	* libgnat/a-direct.ads (Search_Type): New type.
! 	(Search_Ptr): Ditto.
! 	(Directory_Entry_Type): Rewritten to support new Start_Search
! 	procedure.
! 	* libgnat/s-filatt.ads (File_Length_Attr): New function.
! 
! 2022-01-07  Etienne Servais  <servais@adacore.com>
! 
! 	* sem_attr.adb (Check_Reference): Fix condition.
! 
! 2022-01-07  Ghjuvan Lacambre  <lacambre@adacore.com>
! 
! 	* libgnarl/s-taprop__mingw.adb (Timed_Sleep): Remove "pragma
! 	Unreferenced" for Result.
! 	(Timed_Delay): Likewise.
! 
! 2022-01-07  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* gen_il-gen.adb (Put_Make_Decls): Put pragma Inline in a
! 	dedicated line, so that the current indentation is taken into
! 	account.
! 
! 2022-01-07  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_aggr.adb (Build_Array_Aggr_Code): Fix inconsistent style
! 	in comments and code.
! 
! 2022-01-07  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_aggr.adb (Gen_Assign): Remove explicit initialization for
! 	components of access types.
! 	(Get_Assoc_Expr): Enable initialization for components of all
! 	types that require simple initialization.
! 
! 2022-01-07  Javier Miranda  <miranda@adacore.com>
! 
! 	* atree.ads (Traverse_Func_With_Parent): New generic subprogram.
! 	(Traverse_Proc_With_Parent): Likewise.
! 	* atree.adb (Parents_Stack): New table used to traverse trees
! 	passing the parent field of each node.
! 	(Internal_Traverse_With_Parent): New generic subprogram.
! 	(Traverse_Func_With_Parent): Likewise.
! 	(Traverse_Proc_With_Parent): Likewise.
! 	* contracts.adb (Fix_Parents): New subprogram.
! 	(Restore_Original_Selected_Component): Enhanced to fix the
! 	parent field of restored nodes.
! 	(Inherit_Condition): Adding assertions to check the parent field
! 	of inherited conditions and to ensure that the built inherited
! 	condition has no reference to the formals of the parent
! 	subprogram.
! 	* sem_util.ads, sem_util.adb (Check_Parents): New subprogram.
! 
! 2022-01-07  Etienne Servais  <servais@adacore.com>
! 
! 	* sem_attr.adb (Check_Placement_In_Test_Case): Fix typo.
! 
! 2022-01-07  Justin Squirek  <squirek@adacore.com>
! 
! 	* comperr.adb (Delete_SCIL_Files): Replace unnecessary
! 	Unreferenced pragma with specific pragma Warnings.
! 	* doc/gnat_rm/implementation_defined_pragmas.rst (Unreferenced):
! 	Add documentation for new behavior.
! 	* gnat_rm.texi: Regenerate.
! 	* erroutc.adb (Set_At): Remove useless assignment.
! 	* exp_ch2.adb (In_Assignment_Context): Deleted.
! 	(Is_Object_Renaming_Name): Replace calls to Is_LHS with calls to
! 	Known_To_Be_Assigned.
! 	(Expand_Current_Value): Replace calls to May_Be_Lvalue with
! 	calls to Known_To_Be_Assigned.
! 	(Expand_Entry_Paramter): Replace calls to In_Assignment_Context
! 	with calls to Known_To_Be_Assigned.
! 	* exp_ch4.adb (Expand_N_Op_Rem): Remove unnecessary Unreferenced
! 	pragma.
! 	* exp_imgv.adb (Build_Enumeration_Image_Tables): Default
! 	initialize S_N.
! 	* ghost.adb (Check_Ghost_Policy): Replace call to May_Be_Lvalue
! 	with call to Known_To_Be_Assigned.
! 	* lib-xref.adb (Is_On_LHS): Deleted.
! 	(OK_To_Set_Referenced): Rewrite subprogram to encompass the new
! 	pragma Unreferenced behavior.
! 	(Process_Deferred_References): Replace call to Is_LHS with call
! 	to Known_To_Be_Assigned.
! 	* libgnarl/s-taasde.adb, libgnarl/s-tasren.adb,
! 	libgnarl/s-tpobop.adb, libgnat/a-calend.adb,
! 	libgnat/a-calfor.adb, libgnat/a-cbdlli.adb,
! 	libgnat/a-cbhama.adb, libgnat/a-cbhase.adb,
! 	libgnat/a-cbmutr.adb, libgnat/a-cborma.adb,
! 	libgnat/a-cborse.adb, libgnat/a-cdlili.adb,
! 	libgnat/a-cfhama.adb, libgnat/a-cforse.adb,
! 	libgnat/a-cidlli.adb, libgnat/a-cihama.adb,
! 	libgnat/a-cihase.adb, libgnat/a-cimutr.adb,
! 	libgnat/a-ciorma.adb, libgnat/a-ciormu.adb,
! 	libgnat/a-ciorse.adb, libgnat/a-cohama.adb,
! 	libgnat/a-cohase.adb, libgnat/a-comutr.adb,
! 	libgnat/a-convec.adb, libgnat/a-coorma.adb,
! 	libgnat/a-coormu.adb, libgnat/a-coorse.adb,
! 	libgnat/a-crdlli.adb, libgnat/a-tigeau.adb,
! 	libgnat/a-wtgeau.adb, libgnat/a-ztgeau.adb,
! 	libgnat/g-calend.adb, libgnat/g-comlin.adb,
! 	libgnat/g-expect.adb, libgnat/g-mbflra.adb,
! 	libgnat/g-spipat.adb, libgnat/s-fatgen.adb,
! 	libgnat/s-fileio.adb, libgnat/s-os_lib.adb,
! 	libgnat/s-regpat.adb, libgnat/s-valued.adb,
! 	libgnat/s-valuer.adb: Remove unnecessary Unreferenced pragmas
! 	* sem_ch10.adb (Process_Spec_Clauses): Remove useless
! 	assignments.
! 	* sem_ch13.adb (Validate_Literal_Aspect): Default initialize I.
! 	* sem_ch3.adb (Build_Derived_Concurrent_Type): Default
! 	initialize Corr_Decl.
! 	* sem_ch8.adb (Undefined): Replace calls to Is_LHS with calls to
! 	Known_To_Be_Assigned.
! 	(In_Abstract_View_Pragma): Likewise.
! 	* sem_eval.adb (Eval_Selected_Component): Replace calls to
! 	Is_LHS with calls to Known_To_Be_Assigned.
! 	* sem_res.adb (Init_Component): Replace calls to May_Be_Lvalue
! 	with calls to Known_To_Be_Assigned.
! 	* sem_util.adb, sem_util.ads (End_Label_Loc): Default initialize
! 	Owner.
! 	(Explain_Limited_Type): Default initialize Expr_Func.
! 	(Find_Actual): Modified to handle entry families.
! 	(Is_LHS): Deleted.
! 	(May_Be_Lvalue): Deleted.
! 	(Known_To_Be_Assigned): Modified and improved to handle all
! 	cases.
! 	* sem_warn.adb (Traverse_Result): Replace calls to May_Be_Lvalue
! 	with calls to Known_To_Be_Assigned.
! 	(Check_Ref): Modify error on unreferenced out parameters to take
! 	into account different warning flags.
! 
! 2022-01-07  Javier Miranda  <miranda@adacore.com>
! 
! 	* sem_ch3.adb (Reorder_Interfaces): When the conflicting
! 	interface is identified we just replace the interface in the
! 	list of interfaces of the tagged type (instead of adding a
! 	duplicate to the list of interfaces).
! 
! 2022-01-07  Dmitriy Anisimkov  <anisimko@adacore.com>
! 
! 	* adaint.c (__gnat_kill): Terminate process only in case of
! 	SIGKILL, SIGINT, SIGBREAK, SIGTERM, SIGABRT.  Do not call
! 	OpenProcess if not going to terminate process.
! 
! 2022-01-07  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	* exp_prag.adb (Expand_Pragma_Inspection_Point): Do a single pass
! 	over the arguments of the pragma.  Set the Address_Taken flag on
! 	them and use the Has_Delayed_Freeze flag to spot those which have
! 	their elaboration delayed.  Reuse the location variable Loc.
! 
! 2022-01-07  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* osint.adb (To_Lower): Clarify that only To_Lower function
! 	causes bootstrap issues; fix style.
! 	* treepr.adb (Print_Str_Mixed_Case): Reuse existing case
! 	conversion routine.
! 	(To_Mixed): Rename from Capitalize; reuse System.Case_Util
! 	procedure and explain the bootstrap issue.
! 
! 2022-01-07  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch7.adb (Process_Transients_In_Scope): Remove unnecessary
! 	initialization of Must_Hook; change Detect_Subprogram_Call from
! 	function to procedure; adapt caller.
! 
! 2022-01-07  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch5.adb, exp_disp.adb, exp_util.adb, par-ch4.adb,
! 	sem_ch13.adb: Remove extra space before THEN that occurs at the
! 	end of a line.
! 
! 2022-01-07  Dmitriy Anisimkov  <anisimko@adacore.com>
! 
! 	* expect.c (__gnat_waitpid): Use macros WIFEXITED, WEXITSTATUS,
! 	WIFSIGNALED, WTERMSIG, WIFSTOPPED, WSTOPSIG to get exit status
! 	or signal that caused the child process to terminate/stop.  Do
! 	not process exit status in case of error in waitpid call.
! 	* adaint.c (__gnat_kill): Use of GenerateConsoleCtrlEvent is
! 	removed in Windows variant as it actually is not working and was
! 	terminating the calling process.  Set signal number into exit
! 	code parameter of TerminateProcess to work the same like in
! 	Linux.
! 
! 2022-01-07  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch5.adb (Expand_N_Case_Statement): Remove explicit
! 	expansion.
! 
! 2022-01-07  Etienne Servais  <servais@adacore.com>
! 
! 	* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
! 	Update -gnatwr documentation.
! 	* gnat_ugn.texi: Regenerate.
! 
! 2022-01-07  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_unst.adb (Unnest_Subprogram): Sync comment with the
! 	current code.
! 
! 2022-01-07  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch4.adb (Raise_Accessibility_Error): Move exception name
! 	to the message string; move << control characters to the end,
! 	for consistency.
! 	* sem_ch6.adb (Analyze_Function_Return): Likewise.
! 	* sem_util.adb (Compile_Time_Constraint_Error): Likewise.
! 	* gcc-interface/decl.c (gnat_to_gnu_entity): Remove quotes
! 	around Storage_Error.
! 	* gcc-interface/trans.c (gnat_to_gnu): Remove quotes around
! 	Constraint_Error.
! 
! 2022-01-07  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* errout.adb (Error_Msg): Move warning suppression code from
! 	Error_Msg_NLE
! 	(Error_Msg_NLE): Warning suppression is now done by the internal
! 	call to Error_Msg.
! 
! 2022-01-07  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch3.adb (Expand_N_Object_Declaration): Remove unnecessary
! 	guards.
! 	* exp_ch4.adb (Expand_N_If_Expression): Likewise; clarify comment.
! 	* exp_ch5.adb (Expand_N_If_Statement,
! 	Expand_Iterator_Loop_Over_Container): Likewise.
! 	* exp_ch9.adb (Expand_N_Task_Type_Declaration): Remove redundant
! 	guard.
! 	* freeze.adb (Freeze_All_Ent): Reduce scope of a local variable.
! 
! 2022-01-07  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch3.adb (Build_Init_Procedure): Remove unnecessary guard.
! 	* exp_disp.adb (Make_DT): Likewise.
! 	* sem_ch12.adb (Analyze_Associations): Likewise.
! 
! 2022-01-07  Etienne Servais  <servais@adacore.com>
! 
! 	* sem_res.adb (Resolve_Op_Concat_Arg): Check range when
! 	concatenating scalars.
! 
! 2022-01-07  Bob Duff  <duff@adacore.com>
! 
! 	* treepr.adb (Print_Node_Ref): Change "not Is_Array_Type" to
! 	"Is_Discrete_Type".
! 
! 2022-01-07  Richard Kenner  <kenner@adacore.com>
! 
! 	* libgnat/g-spipat.ads (Boolean_Func, Natural_Func,
! 	VString_Func): Mark as Favor_Top_Level.
! 	* sem_ch13.adb (Validate_Unchecked_Conversion): Avoid using
! 	internal representation if Unchecked_Conversion between
! 	an access to subprogram and System.Address within the same unit.
! 
! 2022-01-07  Bob Duff  <duff@adacore.com>
! 
! 	* treepr.adb (Print_Node_Ref): Print the value if available.
! 
! 2022-01-07  Richard Kenner  <kenner@adacore.com>
! 
! 	* sem_util.ads, sem_util.adb (Get_Fullest_View): Add option to
! 	not recurse and return the next-most-fullest view.
! 
! 2022-01-07  Bob Duff  <duff@adacore.com>
! 
! 	* sem_ch10.adb (Check_Redundant_Withs): Add a warning if a
! 	library unit with's its own ancestor. Note that this warning is
! 	not triggered for something like "with P.R;" in P.Q, because
! 	there the "with P;" is considered implicit.
! 	* fname-sf.adb, libgnarl/s-stusta.adb, libgnarl/s-tasdeb.ads,
! 	libgnat/a-calfor.adb, libgnat/a-tiboio.adb,
! 	libgnat/a-wwboio.adb, libgnat/a-zzboio.adb, libgnat/i-cobol.adb,
! 	libgnat/s-bitops.adb, libgnat/s-bitops.ads,
! 	libgnat/s-direio.adb, libgnat/s-dwalin.adb,
! 	libgnat/s-geveop.adb, libgnat/s-mmosin__unix.adb,
! 	libgnat/s-os_lib.adb, libgnat/s-os_lib.ads,
! 	libgnat/s-pooglo.ads, libgnat/s-secsta.adb,
! 	libgnat/s-shasto.adb, libgnat/s-stausa.ads,
! 	libgnat/s-stratt.ads, libgnat/s-ststop.adb: Remove with of
! 	parent.
! 	* sinfo.ads: Minor comment fix.
! 
! 2022-01-07  Bob Duff  <duff@adacore.com>
! 
! 	* osint-m.adb: Remove with_clause and pragma.
! 
! 2022-01-06  Bob Duff  <duff@adacore.com>
! 
! 	* sem_res.adb (Resolve_Range): Warn on null range, unless we are
! 	inside a generic unit or an instance thereof.
! 	* sem_ch3.adb (Analyze_Subtype_Indication): Minor: avoid double
! 	negative.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* errout.adb (Adjust_Name_Case): Remove unnecessary declare
! 	block.
! 
! 2022-01-06  Yannick Moy  <moy@adacore.com>
! 
! 	* libgnat/a-ngcoar.adb: Add pragma to ignore assertions in
! 	instance.
! 	* libgnat/a-ngrear.adb: Likewise.
! 	* libgnat/s-gearop.adb: Prove implementation is free of runtime
! 	errors.
! 	* libgnat/s-gearop.ads: Add contracts to protect against runtime
! 	errors in the generic part.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* errout.adb (Remove_Warning_Messages): Use traversal procedure
! 	instead of traversal function, since we discard status of each
! 	step anyway.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch4.adb (Expand_Concatenate): There is no reason for using
! 	declaring, raising and catching an exception; a simple return
! 	statement is enough.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* sem_eval.adb (Eval_Arithmetic_Op): Add Loc parameter to all
! 	calls to Apply_Compile_Time_Constraint_Error related to division
! 	by zero.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* errout.adb (Remove_Warning_Messages): Remove unnecessary guard.
! 	* exp_util.adb (Kill_Dead_Code): Likewise.
! 	* par_sco.adb (Traverse_Declarations_Or_Statements): Likewise.
! 	* sem_ch3.adb (Build_Derived_Record_Type): Likewise.
! 	* sem_ch4.adb (Traverse_Interfaces): Likewise.
! 	* sem_eval.adb (Traverse_Interfaces): Likewise.
! 	* sem_util.adb (Collect_Interfaces): Likewise.
! 	(Has_Non_Null_Statements, Side_Effect_Free_Statements):
! 	Likewise; turn into WHILE loops, for consistency.
! 
! 2022-01-06  Etienne Servais  <servais@adacore.com>
! 
! 	* sem_type.adb (Full_View_Covers): Fix typo.
! 
! 2022-01-06  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	* sem_ch12.adb (Insert_Freeze_Node_For_Instance): When going to
! 	the outer level, do not jump over following instantiations in
! 	the list.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* err_vars.ads (Warn_On_Instance): Remove; it was a relic from
! 	the previous handling of warning in instances that was removed
! 	decades ago.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* errout.adb (Error_Msg_Internal): Reorder words.
! 	* erroutc.ads (Is_Warning_Msg): Add closing paren.
! 	* sem_util.adb (Compile_Time_Constraint_Error): Fix casing.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* sem_res.adb (Resolve_String_Literal): Simplify pointer
! 	arithmetic.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* sem_res.adb (Resolve_String_Literal): Avoid unnecessary
! 	conversions inside "<" and ">" bodies.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* checks.adb (Null_Exclusion_Static_Checks,
! 	Selected_Range_Checks): Fix style.
! 
! 2022-01-06  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	* sem_ch8.adb (Analyze_Package_Renaming): Do not check for Text_IO
! 	special units when the name of the renaming is a generic instance,
! 	which is the case for package instantiations in the GNAT model.
! 
! 2022-01-06  Steve Baird  <baird@adacore.com>
! 
! 	* sem_util.adb (Build_Discriminant_Reference): In the unexpected
! 	case where we previously would fail an assertion, we instead
! 	revert to the old behavior.
! 
! 2022-01-06  Steve Baird  <baird@adacore.com>
! 
! 	* sem_util.adb (Build_Actual_Subtype_Of_Component): Define a new
! 	local function, Build_Discriminant_Reference, and call it in
! 	each of the three cases where Make_Selected_Component was
! 	previously being called to construct a discriminant reference (2
! 	in Build_Actual_Array_Constraint and 1 in
! 	Build_Actual_Record_Constraint). Instead of unconditionally
! 	using the passed-in object name as the prefix for the new
! 	selected component node, this new function checks to see if
! 	perhaps a prefix of that name should be used instead.
! 
! 2022-01-06  Etienne Servais  <servais@adacore.com>
! 
! 	* atree.adb: Fix typo.
! 	* einfo.ads: Likewise.
! 	* exp_aggr.adb: Likewise.
! 	* exp_ch6.adb: Likewise.
! 	* exp_ch7.adb: Likewise.
! 	* exp_ch9.adb: Likewise.
! 	* exp_prag.adb: Likewise.
! 	* exp_unst.adb: Likewise.
! 	* exp_unst.ads: Likewise.
! 	* exp_util.adb: Likewise.
! 	* par-endh.adb: Likewise.
! 	* par.adb: Likewise.
! 	* restrict.adb: Likewise.
! 	* sem.ads: Likewise.
! 	* sem_ch4.adb: Likewise.
! 	* sem_ch5.adb: Likewise.
! 	* sem_ch6.adb: Likewise.
! 	* sem_ch8.adb: Likewise.
! 	* sem_ch12.adb: Likewise.
! 	* sem_ch13.adb: Likewise.
! 	* sem_dim.adb: Likewise.
! 	* sem_elab.adb: Likewise.
! 	* sem_prag.adb: Likewise.
! 	* sem_res.adb: Likewise.
! 	* sem_util.adb: Likewise.
! 	* sem_util.ads: Likewise.
! 	* sinfo.ads: Likewise.
! 	* sprint.adb: Likewise.
! 	* urealp.adb: Likewise.
! 
! 2022-01-06  Justin Squirek  <squirek@adacore.com>
! 
! 	* exp_ch3.adb (Build_Assignment): Replace current instance of
! 	type with Init_Proc formal.
! 	* sem_attr.adb (OK_Self_Reference): Handle recognition of
! 	Current_Instance to detect certain expansion.
! 	* sem_ch4.adb (Analyze_One_Call): Set actual's type when the
! 	actual in question is a current instance and its corresponding
! 	formal is an incomplete type.
! 	* sem_util.adb (Is_Current_Instance): Add check for incomplete
! 	views and add comment.
! 
! 2022-01-06  Bob Duff  <duff@adacore.com>
! 
! 	* libgnat/s-rident.ads (No_Tagged_Type_Registration): New
! 	restriction identifier.
! 	* restrict.ads (Implementation_Restriction): Add restriction.
! 	* exp_ch7.adb (Process_Declarations): Suppress
! 	tagged-type-related finalization actions if the restriction is
! 	active.  Call RTE_Available last.
! 	* exp_disp.adb (Make_DT): Likewise.
! 	* exp_util.adb (Requires_Cleanup_Actions): Return False for a
! 	tagged type declaration if No_Tagged_Type_Registration is
! 	active.
! 	* sem_attr.adb (Check_Stream_Attribute): Check restriction
! 	No_Tagged_Type_Registration.
! 	* libgnat/a-except.ads (Null_Occurrence): Minor: Initialize, to
! 	avoid stopping at a warning in gdb.
! 	* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst:
! 	Document new restriction.
! 	* gnat_rm.texi: Regenerate.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* par-ch4.adb (P_Simple_Expression): Reuse Null_String_Id.
! 	* prep.adb (Parse_Def_File): Likewise; remove Empty_String.
! 
! 2022-01-06  Eric Botcazou  <ebotcazou@adacore.com>
! 
! 	* stand.ads (Any_Access): Delete.
! 	(Universal_Access): New entity.
! 	* einfo.ads: Remove obsolete reference to Any_Access.
! 	* gen_il-gen-gen_entities.adb: Likewise.
! 	* cstand.adb (Create_Standard): Do not create Any_Access and create
! 	Universal_Access as a full type instead.
! 	* errout.adb (Set_Msg_Insertion_Type_Reference): Do not deal with
! 	Any_Access and deal with Universal_Access instead.
! 	* sem_ch3.adb (Analyze_Object_Declaration): Replace Any_Access with
! 	Universal_Access.
! 	* sem_ch4.adb (Analyze_Null): Likewise.
! 	(Find_Non_Universal_Interpretations): Likewise.
! 	(Find_Equality_Types.Try_One_Interp): Likewise and avoid shadowing
! 	by renaming a local variable of the same name.
! 	* sem_res.adb (Make_Call_Into_Operato): Likewise.
! 	(Resolve_Equality_Op): Likewise.
! 	* sem_type.adb (Covers): Likewise.
! 	(Specific_Type): Likewise.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* treepr.adb (Destroy): Prevent spurious check from CodePeer.
! 
! 2022-01-06  Yannick Moy  <moy@adacore.com>
! 
! 	* libgnat/s-exponu.adb (Exponu): Add annotation.
! 
! 2022-01-06  Justin Squirek  <squirek@adacore.com>
! 
! 	* exp_ch6.adb (Add_Simple_Call_By_Copy_Code): Add comments
! 	regarding special handling of components which depend on
! 	discriminants.
! 	* exp_dist.adb (Build_From_Any_Function): Add Real_Rep actual
! 	for calls to Has_Stream_Attribute_Definition.
! 	(Build_To_Any_Function): Likewise.
! 	(Build_TypeCode_Function): Likewise.
! 	* freeze.adb (Freeze_Entity): Add missing comment for Test_E.
! 	* libgnat/s-utf_32.adb: Remove disabled warning comments and
! 	temporarily inserted pragma warnings.  Remove very old (2006 and
! 	2012) comments about bootstrapping older versions.
! 	* par.adb (P_Identifier): Add new parameter Force_Msg.
! 	* par-ch2.adb (P_Identifier): Restructure and clean up function.
! 	* par-ch3.adb (P_Defining_Identifier): Remove code duplication
! 	for parsing identifiers.
! 	* sem_attr.adb (Stream_Attribute_Available): Add missing
! 	comments and add Real_Rep actual for calls to
! 	Has_Stream_Attribute_Definition.
! 	* sem_cat.adb (Has_Read_Write_Attribute): Add Real_Rep actual
! 	for calls to Has_Stream_Attribute_Definition.
! 	(Has_Stream_Attribute_Definition): Remove local Real_Rep and fix
! 	recursive calls. Add default value for Real_Rep.
! 	* sem_cat.ads (Has_Stream_Attribute_Definition): Add new out
! 	parameter "Real_Rep".
! 	* sem_type.adb (Add_Entry): Add condition to avoid passing
! 	non-function calls to Function_Interp_Has_Abstract_Op.
! 	(Function_Interp_Has_Abstract_Op): Add missing comments and
! 	remove check for Is_Overloadable.
! 	* sem_util.adb (Derivation_Too_Early_To_Inherit): Remove
! 	duplicated code.
! 
! 2022-01-06  Javier Miranda  <miranda@adacore.com>
! 
! 	* contracts.adb (Restore_Original_Selected_Component): New
! 	subprogram that traverses a preanalyzed expression searching for
! 	dispatching calls to functions whose original node was a
! 	selected component, and replacing them with their original node.
! 	This functionality is required because the preanalyis of
! 	dispatching calls using the Object.Operation notation transforms
! 	such calls, and we need the original condition to properly
! 	inherit and extend the condition expression on tagged type
! 	derivations.  This functionality was previously provided by the
! 	routine Install_Original_Selected_Component (as part of
! 	inheriting conditions); now it is performed as part of the
! 	preanalysis of the condition, thus avoiding repeatedly
! 	installing and restoring such nodes.
! 	(Install_Original_Selected_Component): Removed.
! 	(Restore_Dispatching_Calls): Removed.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* treepr.adb (Visit_Node): Simplify repeated call to
! 	Next_Entity.
! 
! 2022-01-06  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* treepr.ads (Treepr, Print_Tree_List, Print_Tree_Elist): Fix
! 	style in comments.
! 	* treepr.adb (Serial_Numbers): Hash table instance.
! 	(Hash): Hashing routine.
! 	(Print_Field): Fix style.
! 	(Print_Init): Adapt to simple hash table.
! 	(Print_Term): Likewise.
! 	(Serial_Numbers): Likewise.
! 	(Set_Serial_Number): Likewise.
! 
! 2022-01-06  Yannick Moy  <moy@adacore.com>
! 
! 	* libgnat/s-expmod.adb: Mark in SPARK. Add ghost code for proof.
! 	* libgnat/s-expmod.ads: Mark in SPARK. Add ghost specifications.
! 
! 2022-01-06  Yannick Moy  <moy@adacore.com>
! 
! 	* libgnat/s-explllu.ads: Mark in SPARK.
! 	* libgnat/s-expllu.ads: Mark in SPARK.
! 	* libgnat/s-exponu.adb: Add loop invariants and needed
! 	assertions.
! 	* libgnat/s-exponu.ads: Add functional contract.
! 	* libgnat/s-expuns.ads: Mark in SPARK.
! 
! 2022-01-05  Steve Baird  <baird@adacore.com>
! 
! 	* exp_ch5.adb (Finish_Binding_Object_Declaration): Fix a bug
! 	that was introduced in the previous commit.  The previous
! 	version initialized a Boolean constant Declare_Copy before the
! 	variable Decl had been initialized properly.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* sem_prag.adb (Adjust_External_Name_Case): Use membership test.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch3.adb (Make_Controlling_Function_Wrappers): For
! 	GNATprove build the wrapper as an expression function.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch3.ads (Make_Controlling_Function_Wrappers): Move
! 	declaration from body to spec, so it can be called by
! 	SPARK-specific expansion.
! 	* exp_ch3.adb (Make_Controlling_Function_Wrappers): Likewise.
! 	* exp_spark.adb (SPARK_Freeze_Type): Enable expansion of
! 	wrappers for function with controlling result types.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_dbug.adb, sem_dim.adb: Replace Add_Str_To_Name_Buffer with
! 	Add_Char_To_Name_Buffer.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* gnatls.adb (Gnatls): Use Name_Find function.
! 	* targparm.adb (Get_Target_Parameters): Likewise.
! 
! 2022-01-05  Bob Duff  <duff@adacore.com>
! 
! 	* repinfo.adb (List_Entities): The code was assuming that if we
! 	encounter a package in the current scope, then it must be
! 	a (physically) nested package.  That was wrong, because it could
! 	be a child package.  Avoid recursing into child packages; they
! 	have not been annotated with representation information, and
! 	-gnatR2 queries that information.
! 
! 2022-01-05  Marc Poulhiès  <poulhies@adacore.com>
! 
! 	* libgnat/s-sopco3.ads, libgnat/s-sopco3.adb: Remove.
! 	* libgnat/s-sopco4.ads, libgnat/s-sopco4.adb: Remove.
! 	* libgnat/s-sopco5.ads, libgnat/s-sopco5.adb: Remove.
! 	* libgnat/s-strops.ads, libgnat/s-strops.adb: Remove.
! 	* Makefile.rtl (ADA_EXCLUDE_SRCS): Remove occurences of removed
! 	units.
! 	* gcc-interface/Make-lang.in (ada/sdefault.o): Remove
! 	dependencies on removed units.
! 	(GNATBIND_OBJS): Remove occurences of removed units.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch3.adb (Build_Dcheck_Function): Remove extra whitespace.
! 	* libgnarl/s-taskin.adb (Initialize_ATCB): Likewise.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_attr.adb (Build_Array_VS_Func): Remove explicit "IN" in
! 	spec of the generated array validation function; it was
! 	redundant, just like it would be in a user-written code.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch4.adb (Expand_N_Op_Ne): Fix whitespace.
! 	* sem_dim.adb (Expand_Put_Call_With_Symbol): Likewise.
! 	(Reduce): Likewise.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_aggr.adb (Two_Pass_Aggregate_Expansion): Fix whitespace.
! 	* libgnat/a-cofuve.ads (Add): Likewise.
! 	* sem_ch3.adb (Build_Access_Subprogram_Wrapper): Likewise.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch3.adb (Make_Eq_Body, Make_Neq_Body,
! 	Make_Predefined_Primitive_Eq_Spec,
! 	Make_Predefined_Primitive_Specs): Fix whitespace.
! 
! 2022-01-05  Etienne Servais  <servais@adacore.com>
! 
! 	* sem_ch3.adb (Analyze_Component_Declaration): Rework condition
! 	to build subtypes.
! 	(Analyze_Object_Declaration): Likewise.
! 	(Should_Build_Subtype): New.
! 
! 2022-01-05  Yannick Moy  <moy@adacore.com>
! 
! 	* libgnat/s-arit128.adb: Mark in SPARK.
! 	* libgnat/s-arit128.ads: Add functional contracts.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* sem_util.adb (String_From_Numeric_Literal): Simplify using
! 	membership tests and ranges; fix whitespace.
! 
! 2022-01-05  Yannick Moy  <moy@adacore.com>
! 
! 	* libgnat/s-expint.ads: Mark in SPARK. Adapt to change to
! 	package.
! 	* libgnat/s-explli.ads: Likewise.
! 	* libgnat/s-expllli.ads: Likewise.
! 	* libgnat/s-expont.adb: Add lemmas and ghost code.
! 	* libgnat/s-expont.ads: Add functional contract.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_disp.adb (Gen_Parameters_Profile): Remove redundant guard.
! 
! 2022-01-05  Claire Dross  <dross@adacore.com>
! 
! 	* libgnat/s-valuti.ads (Starts_As_Exponent_Format_Ghost): Ghost
! 	function to determine if a string is recognized as something
! 	which might be an exponent.
! 	(Is_Opt_Exponent_Format_Ghost): Ghost function to determine if a
! 	string has the correct format for an optional exponent.
! 	(Scan_Exponent): Use ghost functions to factorize contracts.
! 
! 2022-01-05  Bob Duff  <duff@adacore.com>
! 
! 	* exp_util.ads (Get_Current_Value_Condition): Belt: Add a
! 	postcondition that Val /= Var.
! 	* sem_util.adb (Known_Null): Suspenders: Raise Program_Error if
! 	Get_Current_Value_Condition returned the same value. This will
! 	be enabled even without assertions, because infinite recursion
! 	is a nuisance -- better to crash if this bug ever occurs.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch3.adb (Make_Null_Procedure_Specs): Simplify by reusing
! 	Copy_Subprogram_Spec.
! 	* sem_util.ads (Copy_Subprogram_Spec): Add New_Sloc parameter.
! 	* sem_util.adb (Copy_Subprogram_Spec): Pass New_Sloc to
! 	New_Copy_Tree.
! 
! 2022-01-05  Yannick Moy  <moy@adacore.com>
! 
! 	* libgnat/s-exnint.ads: Mark in SPARK. Adapt to change to
! 	package.
! 	* libgnat/s-exnlli.ads: Likewise.
! 	* libgnat/s-exnllli.ads: Likewise.
! 	* libgnat/s-exponn.adb: Add lemmas and ghost code. Secial case
! 	value zero as Left or Right to simplify proof.
! 	* libgnat/s-exponn.ads: Transform the generic function into a
! 	generic package with a function inside. Add a functional
! 	contract.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* sem_ch12.adb (Instantiate_Formal_Subprogram): Remove redundant
! 	call to Set_Defining_Unit_Name; a similar call is done few lines
! 	below.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* exp_ch3.adb (Make_Controlling_Function_Wrappers): Create
! 	distinct copies of parameter lists for spec and body with
! 	Copy_Parameter_List; cleanup.
! 	(Make_Null_Procedure_Specs): Fix style in comments; remove a
! 	potentially unnecessary initialization of a local variable.
! 
! 2022-01-05  Bob Duff  <duff@adacore.com>
! 
! 	* einfo-utils.ads, einfo-utils.adb (Renamed_Entity Alias):
! 	Change Node_Id to Entity_Id.
! 
! 2022-01-05  Piotr Trojanek  <trojanek@adacore.com>
! 
! 	* sem_ch12.ads (Build_Function_Wrapper, Build_Operator_Wrapper):
! 	Remove unreferenced spec.
! 	* sem_ch12.adb (Build_Function_Wrapper, Build_Operator_Wrapper):
! 	Remove dead bodies.
! 
! 2022-01-05  Yannick Moy  <moy@adacore.com>
! 
! 	* libgnat/s-aridou.adb: Apply replacement.
! 
! 2022-01-05  Yannick Moy  <moy@adacore.com>
! 
! 	* libgnat/s-aridou.adb (Lemma_Word_Commutation): Fix for
! 	instances with other values of Single_Size.
! 
! 2022-01-05  Marc Poulhiès  <poulhies@adacore.com>
! 
! 	* doc/gnat_rm/implementation_defined_pragmas.rst (Compiler_Unit)
! 	(Compiler_Unit_Warning): Remove.
! 	* gnat-style.texi, gnat_rm.texi, gnat_ugn.texi: Regenerate.
! 	* libgnat/g-dynhta.ads: Add comment indicating this unit is
! 	built during stage1.
! 	* libgnat/g-dyntab.ads: Likewise.
! 	* libgnat/g-graphs.ads: Likewise.
! 	* libgnat/g-lists.ads: Likewise.
! 	* libgnat/g-sets.ads: Likewise.
! 	* libgnat/gnat.ads: Likewise.
! 	* libgnat/s-pehage.ads: Likewise.
! 	* libgnat/s-resfil.ads: Likewise.
! 	* libgnat/s-rident.ads: Likewise.
! 	* libgnat/s-utf_32.ads: Likewise.
! 	* errout.ads: Update comment.
! 	* opt.ads (Opt): Remove Compiler_Unit.
! 	* par-ch5.adb (All_Pragmas): Remove call to Check_Compiler_Unit.
! 	* sem_prag.adb (Analyze_Pragma): Likewise.
! 	* sem_ch4.adb (Non_Static_Choice_Error, Analyze_If_Expression)
! 	(Analyze_Set_Membership, Record_Interp): Likewise.
! 	* sem_ch11.adb (Analyze_Raise_Expression): Likewise.
! 	* sem_ch6.adb: Remove Restric package reference.
! 	(Analyze_Extended_Return_Statement): Remove call to
! 	Check_Compiler_Unit.
! 	* par-prag.adb (Process_Restrictions_Or_Restriction_Warnings):
! 	Remove handling of Pragma_Compiler_Unit[_Warning}.
! 	* restrict.adb (Check_Compiler_Unit): Remove both.
! 	* restrict.ads: Likewise.
! 	* snames.ads-tmpl (Pragma_Id): Remove
! 	Pragma_Compiler_Unit[_Warning].
! 	* libgnat/a-assert.ads: Remove pragma Compiler_Unit_Warning.
! 	* libgnat/a-chlat1.ads: Likewise.
! 	* libgnat/a-elchha.adb: Likewise.
! 	* libgnat/a-elchha.ads: Likewise.
! 	* libgnat/a-ioexce.ads: Likewise.
! 	* libgnat/a-strhas.ads: Likewise.
! 	* libgnat/g-byorma.adb: Likewise.
! 	* libgnat/g-byorma.ads: Likewise.
! 	* libgnat/g-dyntab.adb: Likewise.
! 	* libgnat/g-heasor.ads: Likewise.
! 	* libgnat/g-hesora.adb: Likewise.
! 	* libgnat/g-hesora.ads: Likewise.
! 	* libgnat/g-htable.adb: Likewise.
! 	* libgnat/g-htable.ads: Likewise.
! 	* libgnat/g-spchge.adb: Likewise.
! 	* libgnat/g-spchge.ads: Likewise.
! 	* libgnat/g-speche.adb: Likewise.
! 	* libgnat/g-speche.ads: Likewise.
! 	* libgnat/g-table.ads: Likewise.
! 	* libgnat/g-u3spch.adb: Likewise.
! 	* libgnat/g-u3spch.ads: Likewise.
! 	* libgnat/interfac.ads: Likewise.
! 	* libgnat/s-addope.adb: Likewise.
! 	* libgnat/s-addope.ads: Likewise.
! 	* libgnat/s-assert.adb: Likewise.
! 	* libgnat/s-assert.ads: Likewise.
! 	* libgnat/s-bitops.adb: Likewise.
! 	* libgnat/s-bitops.ads: Likewise.
! 	* libgnat/s-carun8.adb: Likewise.
! 	* libgnat/s-carun8.ads: Likewise.
! 	* libgnat/s-casuti.adb: Likewise.
! 	* libgnat/s-casuti.ads: Likewise.
! 	* libgnat/s-conca2.adb: Likewise.
! 	* libgnat/s-conca2.ads: Likewise.
! 	* libgnat/s-conca3.adb: Likewise.
! 	* libgnat/s-conca3.ads: Likewise.
! 	* libgnat/s-conca4.adb: Likewise.
! 	* libgnat/s-conca4.ads: Likewise.
! 	* libgnat/s-conca5.adb: Likewise.
! 	* libgnat/s-conca5.ads: Likewise.
! 	* libgnat/s-conca6.adb: Likewise.
! 	* libgnat/s-conca6.ads: Likewise.
! 	* libgnat/s-conca7.adb: Likewise.
! 	* libgnat/s-conca7.ads: Likewise.
! 	* libgnat/s-conca8.adb: Likewise.
! 	* libgnat/s-conca8.ads: Likewise.
! 	* libgnat/s-conca9.adb: Likewise.
! 	* libgnat/s-conca9.ads: Likewise.
! 	* libgnat/s-crc32.adb: Likewise.
! 	* libgnat/s-crc32.ads: Likewise.
! 	* libgnat/s-crtl.ads: Likewise.
! 	* libgnat/s-excdeb.adb: Likewise.
! 	* libgnat/s-excdeb.ads: Likewise.
! 	* libgnat/s-except.ads: Likewise.
! 	* libgnat/s-exctab.adb: Likewise.
! 	* libgnat/s-exctab.ads: Likewise.
! 	* libgnat/s-finmas.ads: Likewise.
! 	* libgnat/s-htable.adb: Likewise.
! 	* libgnat/s-htable.ads: Likewise.
! 	* libgnat/s-mastop.adb: Likewise.
! 	* libgnat/s-mastop.ads: Likewise.
! 	* libgnat/s-memory.adb: Likewise.
! 	* libgnat/s-memory.ads: Likewise.
! 	* libgnat/s-os_lib.ads: Likewise.
! 	* libgnat/s-parame.adb: Likewise.
! 	* libgnat/s-parame.ads: Likewise.
! 	* libgnat/s-parame__posix2008.ads: Likewise.
! 	* libgnat/s-purexc.ads: Likewise.
! 	* libgnat/s-resfil.adb: Likewise.
! 	* libgnat/s-restri.adb: Likewise.
! 	* libgnat/s-restri.ads: Likewise.
! 	* libgnat/s-secsta.adb: Likewise.
! 	* libgnat/s-secsta.ads: Likewise.
! 	* libgnat/s-soflin.adb: Likewise.
! 	* libgnat/s-soflin.ads: Likewise.
! 	* libgnat/s-sopco3.adb: Likewise.
! 	* libgnat/s-sopco3.ads: Likewise.
! 	* libgnat/s-sopco4.adb: Likewise.
! 	* libgnat/s-sopco4.ads: Likewise.
! 	* libgnat/s-sopco5.adb: Likewise.
! 	* libgnat/s-sopco5.ads: Likewise.
! 	* libgnat/s-spsufi.ads: Likewise.
! 	* libgnat/s-stache.adb: Likewise.
! 	* libgnat/s-stache.ads: Likewise.
! 	* libgnat/s-stalib.adb: Likewise.
! 	* libgnat/s-stalib.ads: Likewise.
! 	* libgnat/s-stoele.adb: Likewise.
! 	* libgnat/s-stoele.ads: Likewise.
! 	* libgnat/s-strcom.adb: Likewise.
! 	* libgnat/s-strcom.ads: Likewise.
! 	* libgnat/s-strhas.adb: Likewise.
! 	* libgnat/s-string.adb: Likewise.
! 	* libgnat/s-string.ads: Likewise.
! 	* libgnat/s-strops.adb: Likewise.
! 	* libgnat/s-strops.ads: Likewise.
! 	* libgnat/s-ststop.adb: Likewise.
! 	* libgnat/s-ststop.ads: Likewise.
! 	* libgnat/s-traceb.adb: Likewise.
! 	* libgnat/s-traceb.ads: Likewise.
! 	* libgnat/s-traent.adb: Likewise.
! 	* libgnat/s-traent.ads: Likewise.
! 	* libgnat/s-utf_32.adb: Likewise.
! 	* libgnat/s-unstyp.ads: Likewise.
! 	* libgnat/s-wchcnv.adb: Likewise.
! 	* libgnat/s-wchcnv.ads: Likewise.
! 	* libgnat/s-wchcon.adb: Likewise.
! 	* libgnat/s-wchcon.ads: Likewise.
! 	* libgnat/s-wchjis.adb: Likewise.
! 	* libgnat/s-wchjis.ads: Likewise.
! 
! 2022-01-05  Arnaud Charlet  <charlet@adacore.com>
! 
! 	* osint.adb (File_Names_Equal): Declare To_Lower locally.
! 	* osint.ads (Null_FD): New.
! 	* fmap.adb, sinput-l.adb, targparm.adb: Adapt to changes above.
! 	* switch-b.adb (Scan_Debug_Switches): Use Is_Regular_File to
! 	simplify the bootstrap dependencies.
! 
! 2022-01-03  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* gnat_ugn.texi: Bump @copying's copyright year.
! 	* gnat_rm.texi: Likewise.
  
  
! Copyright (C) 2022 Free Software Foundation, Inc.
  
  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
diff -Nrcpad gcc-11.3.0/gcc/ada/ChangeLog-2021 gcc-12.1.0/gcc/ada/ChangeLog-2021
*** gcc-11.3.0/gcc/ada/ChangeLog-2021	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/ChangeLog-2021	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,12135 ----
+ 2021-12-28  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/share/gnu_free_documentation_license.rst: Replace http:// with https.
+ 	* gnat-style.texi: Likewise.
+ 	* gnat_rm.texi: Likewise.
+ 	* gnat_ugn.texi: Likewise.
+ 
+ 2021-12-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR pch/71934
+ 	* gcc-interface/decl.c (gt_pch_nx): Pass NULL as new middle argument
+ 	to op.
+ 
+ 2021-12-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/Make-lang.in (ADA_GENERATED_FILES): Add warning.
+ 
+ 2021-12-02  Marc Poulhiès  <poulhies@adacore.com>
+ 
+ 	* gcc-interface/a-assert.ads, gcc-interface/a-assert.adb: Remove.
+ 
+ 2021-12-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity): Do not back-annotate a
+ 	maximum size for the Esize of limited record and concurrent types.
+ 
+ 2021-12-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/gigi.h (aggregate_type_contains_array_p): Delete.
+ 	(type_has_variable_size): Declare.
+ 	* gcc-interface/decl.c (adjust_packed): Return 0 only if the field
+ 	type is an array with variable size.
+ 	* gcc-interface/utils.c (aggregate_type_contains_array_p): Make
+ 	static and remove SELF_REFERENTIAL parameter.
+ 	(type_has_variable_size): Make public.
+ 	(create_field_decl): Adjust call to aggregate_type_contains_array_p.
+ 
+ 2021-12-02  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity): Skip normal
+ 	processing for Itypes that are E_Class_Wide_Subtype with
+ 	Equivalent_Type set.
+ 
+ 2021-12-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.c (Call_to_gnu): Rename GNAT_NAME variable
+ 	into GNAT_SUBPROG to avoid later shadowing.
+ 
+ 2021-12-02  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/s-arit32.adb: Add ghost instances and lemmas.
+ 	(Scaled_Divide32): Add ghost code to prove. Minor code
+ 	modification to return early in error when divisor is zero.
+ 	* libgnat/s-arit32.ads: Add ghost instances and utilities.
+ 	(Scaled_Divide32): Add contract.
+ 
+ 2021-12-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sprint.adb (Source_Dump): Set both Print_Generated_Code and
+ 	Debug_Generated_Code to False at the end.
+ 
+ 2021-12-02  Marc Poulhiès  <poulhies@adacore.com>
+ 
+ 	* sem_aggr.adb (Resolve_Array_Aggregate): Filter out nodes not
+ 	coming from source before emitting the warning.
+ 
+ 2021-12-02  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/s-aridou.adb (Log_Single_Size, Big_0): New ghost
+ 	constants.
+ 	(Lemma_Mult_Non_Negative, Lemma_Mult_Non_Positive,
+ 	Lemma_Not_In_Range_Big2xx64): New lemmas on big integers.
+ 	(Double_Divide): Remove justifications. Amend for that local
+ 	lemma Prove_Overflow_Case.
+ 	(Scaled_Divide): Remove justifications. Insert for that local
+ 	lemmas Prove_Negative_Dividend, Prove_Positive_Dividend and
+ 	Prove_Q_Too_Big, and amend local lemma Prove_Overflow.  To prove
+ 	the loop invariant on (Shift mod 2 = 0), introduce local ghost
+ 	variable Iter to count loop iterations, and relate its value to
+ 	the value of Shift through Log_Single_Size, with the help of
+ 	local lemma Prove_Power. Deal with proof regression by adding
+ 	new local lemma Prove_First_Iteration and local ghost variable
+ 	D123.
+ 	* libgnat/s-arit64.ads (Multiply_With_Ovflo_Check64): Remove
+ 	unnecessary Pure_Function on function as package is Pure.
+ 
+ 2021-12-02  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/s-widthi.adb: Add pragma Annotate.
+ 
+ 2021-12-02  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/s-widint.ads: Mark in SPARK.
+ 	* libgnat/s-widlli.ads: Likewise.
+ 	* libgnat/s-widllli.ads: Likewise.
+ 	* libgnat/s-widlllu.ads: Likewise.
+ 	* libgnat/s-widllu.ads: Disable ghost/contract.
+ 	* libgnat/s-widthi.adb: Replicate and adapt the proof from
+ 	s-widthu.adb.
+ 	* libgnat/s-widthi.ads: Add minimal postcondition.
+ 	* libgnat/s-widthu.adb: Fix comments in the modular case.
+ 	* libgnat/s-widthu.ads: Add minimal postcondition.
+ 	* libgnat/s-widuns.ads: Disable ghost/contract.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* rtsfind.ads (RE_Id, RE_Unit_Table): Add RE_Suspension_Object.
+ 	* sem_util.adb (Is_Descendant_Of_Suspension_Object): Use Is_RTE.
+ 	(Is_Suspension_Object): Remove body.
+ 	* sem_util.ads (Is_Suspension_Object): Remove spec.
+ 	* snames.ads-tmpl (Name_Suspension_Object): Remove, now
+ 	unreferenced.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_util.adb (Append_Freeze_Action): Tune whitespace to make
+ 	the code look similar to Append_Freeze_Actions, which takes a
+ 	List_Id.
+ 	* sem_ch6.adb (Analyze_Return_Type): Cleanup with
+ 	Append_Freeze_Action.
+ 	* exp_ch3.adb (Build_Access_Subprogram_Wrapper_Body): Likewise.
+ 	* sem_ch3.adb (Build_Access_Subprogram_Wrapper): Likewise.
+ 	* contracts.adb (Add_Indirect_Call_Wrapper): Remove extra call
+ 	to Ensure_Freeze_Node.
+ 	(Add_Call_Helper): Likewise.
+ 	* freeze.adb (Check_Inherited_Conditions): Likewise.
+ 	(Attribute_Renaming): Likewise.
+ 	* sem_ch8.adb: Likewise.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst
+ 	(No_Dispatching_Calls): Fix whitespace in example code.
+ 	* gnat_rm.texi: Regenerate.
+ 	* exp_ch13.adb (Expand_N_Freeze_Entity): Replace low-level
+ 	membership test with a high-level wrapper.
+ 	* exp_ch3.adb (Expand_Freeze_Record_Type): Remove unnecessary
+ 	initialization of list of wrapper declarations and unnecessary
+ 	guard for list of their bodies (if no bodies are created then
+ 	Append_Freeze_Actions is a no-op).
+ 
+ 2021-12-02  Marc Poulhiès  <poulhies@adacore.com>
+ 
+ 	* exp_imgv.adb (Append_Table_To): Add new parameter to
+ 	Make_Aggregate call.
+ 	* gen_il-fields.ads (Opt_Field_Enum):
+ 	Add Is_Parenthesis_Aggregate and Is_Enum_Array_Aggregate.
+ 	* gen_il-gen-gen_nodes.adb (Union): Add Is_Enum_Array_Aggregate
+ 	and Is_Parenthesis_Aggregate field to N_Aggregate.
+ 	* libgnarl/s-interr.adb (User_Handler, User_Entry, Blocked)
+ 	(Ignored, Last_Unblocker, Server_ID): Likewise.
+ 	* libgnarl/s-intman.ads (Keep_Unmasked, Reserve): Likewise.
+ 	* libgnarl/s-intman__posix.adb (Exception_Interrupts)
+ 	(Initialize): Likewise.
+ 	* libgnarl/s-mudido__affinity.adb (Create): Likewise.
+ 	* libgnarl/s-osinte__linux.ads (Unmasked, Reserved): Likewise.
+ 	* libgnarl/s-taprop__linux.adb (Create_Task, Set_Task_Affinity)
+ 	* libgnarl/s-tasdeb.adb (Trace_On): Likewise.
+ 	* libgnarl/s-tasdeb.ads (Known_Tasks): Likewise.
+ 	* libgnarl/s-tasinf__linux.ads (Any_CPU, No_CPU): Likewise.
+ 	* libgnarl/s-taskin.adb (Initialize_ATCB): Likewise.
+ 	* libgnarl/s-taskin.ads (Ada_Task_Control_Block): Likewise.
+ 	* libgnarl/s-tasren.adb (Default_Treatment)
+ 	(New_State): Likewise.
+ 	* libgnarl/s-tassta.adb (Trace_Unhandled_Exception_In_Task):
+ 	Likewise.
+ 	* libgnarl/s-tataat.adb (Index_Array): Likewise.
+ 	* libgnarl/s-tpobop.adb (New_State): Likewise.
+ 	* libgnat/a-calend.adb (Cumulative_Days_Before_Month)
+ 	(Leap_Second_Times): Likewise.
+ 	* libgnat/a-calend.ads (Days_In_Month): Likewise.
+ 	* libgnat/a-cfinve.adb (Insert): Likewise.
+ 	* libgnat/a-chahan.adb (Char_Map): Likewise.
+ 	* libgnat/a-chtgbo.adb (Clear): Likewise.
+ 	* libgnat/a-cobove.adb ("&", Insert, To_Vector): Likewise.
+ 	* libgnat/a-cofove.adb (Insert, To_Vector): Likewise.
+ 	* libgnat/a-cohata.ads (Hash_Table_Type): Likewise.
+ 	* libgnat/a-coinve.adb (Merge, Insert, Insert_Space): Likewise.
+ 	* libgnat/a-convec.adb (Insert, To_Vector): Likewise.
+ 	* libgnat/a-coprnu.ads (Primes): Likewise.
+ 	* libgnat/a-direct.adb (Empty_String): Use regular "" instead
+ 	of aggregate.
+ 	(Start_Search_Internal, Name_Case_Equivalence, Search)
+ 	(Start_Search, Start_Search_Internal): Use bracket for
+ 	aggregate.
+ 	* libgnat/a-direct.ads (Start_Search,Search): Likewise.
+ 	* libgnat/a-direio.adb (Zeroes): Likewise.
+ 	* libgnat/a-nbnbre.adb (Leading_Padding, Trailing_Padding)
+ 	(Numerator_Image): Likewise.
+ 	* libgnat/a-ngrear.adb (Jacobi): Likewise.
+ 	* libgnat/a-stbubo.adb (Get_UTF_8): Likewise.
+ 	* libgnat/a-stbufo.adb (Put): Likewise.
+ 	* libgnat/a-stbuun.adb (Get_UTF_8): Likewise.
+ 	* libgnat/a-stbuut.adb (Put_7bit, Put_Character)
+ 	(Put_Wide_Character, Put_Wide_Wide_Character): Likewise.
+ 	* libgnat/a-stmaco.ads (Control_Set,Graphic_Set,Letter_Set)
+ 	(Lower_Set, Upper_Set, Basic_Set, Decimal_Digit_Set)
+ 	(Hexadecimal_Digit_Set, Alphanumeric_Set, Special_Set)
+ 	(ISO_646_Set): Likewise.
+ 	* libgnat/a-strbou.ads (Insert, Tail, "*", Replicate)
+ 	(Null_Bounded_String): Likewise.
+ 	* libgnat/a-strfix.ads (Head, Tail): Likewise.
+ 	* libgnat/a-strmap.adb (To_Domain, Lemma_Is_Sorted): Likewise.
+ 	* libgnat/a-strmap.ads (Null_Set): Likewise.
+ 	* libgnat/a-strsup.adb (Super_Head, Super_Replicate)
+ 	(Super_Tail): Likewise.
+ 	* libgnat/a-strsup.ads (Super_Head, Super_Tail, Times)
+ 	(Super_Replicate): Likewise.
+ 	* libgnat/a-sttebu.adb (Put_UTF8, Wide_Put_UTF_16): Likewise.
+ 	* libgnat/a-stuten.ads (BOM_16): Likewise.
+ 	* libgnat/a-stwibo.ads (Null_Bounded_Wide_String): Likewise.
+ 	* libgnat/a-stwima.ads (Null_Range): Likewise.
+ 	* libgnat/a-stwisu.adb (Super_Head, Super_Replicate)
+ 	(Super_Tail): Likewise.
+ 	* libgnat/a-stzbou.ads
+ 	(Null_Bounded_Wide_Wide_String): Likewise.
+ 	* libgnat/a-stzmap.ads (Null_Range): Likewise.
+ 	* libgnat/a-stzsup.adb (Super_Head, Super_Replicate)
+ 	(Super_Tail, Super_Trim): Likewise.
+ 	* libgnat/a-swmwco.ads (Control_Ranges, Graphic_Ranges)
+ 	(Letter_Ranges, Lower_Ranges, Upeer_Ranges, Basic_Ranges)
+ 	(Decimal_Digit_Ranges, Hexadecimal_Digit_Ranges)
+ 	(Alphanumeric_Ranges, Special_Graphic_Ranges, ISO_646_Ranges)
+ 	(Character_Ranges, Lower_Case_Mapping, Upper_Case_Mapping)
+ 	(Basic_Mapping): Likewise.
+ 	* libgnat/a-szmzco.ads (Control_Ranges, Graphic_Ranges)
+ 	(Letter_Ranges, Lower_Ranges, Upeer_Ranges, Basic_Ranges)
+ 	(Decimal_Digit_Ranges, Hexadecimal_Digit_Ranges)
+ 	(Alphanumeric_Ranges, Special_Graphic_Ranges, ISO_646_Ranges)
+ 	(Character_Ranges, Lower_Case_Mapping, Upper_Case_Mapping)
+ 	(Basic_Mapping): Likewise.
+ 	* libgnat/a-teioed.adb (Format_Number): Likewise.
+ 	* libgnat/a-wtedit.adb (Format_Number): Likewise.
+ 	* libgnat/a-ztedit.adb (Format_Number): Likewise.
+ 	* libgnat/g-arrspl.adb (Separators): Likewise.
+ 	* libgnat/g-catiio.adb (Month_Name_To_Number): Likewise.
+ 	* libgnat/g-cgideb.adb (NL, Title): Likewise.
+ 	* libgnat/g-comlin.adb (Internal_Initialize_Option_Scan)
+ 	(Display_Section_Help): Likewise.
+ 	* libgnat/g-comlin.ads (Opt_Parser_Data): Likewise.
+ 	* libgnat/g-debpoo.adb (Set_Dead_Beef, Dump): Likewise.
+ 	* libgnat/g-expect.adb (Expect, Has_Process, Send): Likewise.
+ 	* libgnat/g-forstr.adb ("+", Get_Formatted): Likewise.
+ 	* libgnat/g-memdum.adb (Dump): Likewise.
+ 	* libgnat/g-rannum.adb (Image): Likewise.
+ 	* libgnat/g-sechas.adb (Final, HMAC_Initial_Context): Likewise.
+ 	* libgnat/g-sehamd.ads (Initial_State): Likewise.
+ 	* libgnat/g-sehash.ads (Initial_State): Likewise.
+ 	* libgnat/g-sercom.ads (Data_Rate_Value): Likewise.
+ 	* libgnat/g-sercom__linux.adb (C_Data_Rate, C_Bits, C_Stop_Bits)
+ 	(C_Parity): Likewise.
+ 	* libgnat/g-shsh32.ads (K, Transform): Likewise.
+ 	* libgnat/g-shsh64.ads (K, Transform): Likewise.
+ 	* libgnat/g-socket.adb (Levels, Modes, Shutmodes, Requests)
+ 	(Options, Flags, Get_Name_Info, Image): Likewise.
+ 	* libgnat/g-socket.ads (Inet_Addr_Bytes_Length, Inet_Addr_Type)
+ 	(IPv4_To_IPv6_Prefix, Any_Inet_Addr, Any_Inet6_Addr)
+ 	(No_Inet_Addr, Broadcast_Inet_Addr, Loopback_Inet_Addr)
+ 	(Loopback_Inet6_Addr, Unspecified_Group_Inet_Addr)
+ 	(All_Hosts_Group_Inet_Addr, All_Routers_Group_Inet_Addr)
+ 	(Unspecified_Group_Inet6_Addr, All_Hosts_Group_Inet6_Addr)
+ 	(All_Routers_Group_Inet6_Addr):	Likewise.
+ 	* libgnat/g-socpol.adb (To_C, Status, Get_Events): Likewise.
+ 	* libgnat/g-socpol.ads (Input_Event, Output_Event, Both_Event)
+ 	(Error_Event): Likewise.
+ 	* libgnat/g-sothco.ads (Families, Lengths, Sockaddr): Likewise.
+ 	* libgnat/g-spipat.adb (OK_For_Simple_Arbno): Likewise.
+ 	* libgnat/i-cobol.ads (Ada_To_COBOL, COBOL_To_Ada): Likewise.
+ 	* libgnat/i-pacdec.adb (Packed_Byte): Likewise.
+ 	* libgnat/i-pacdec.ads (Packed_Size): Likewise.
+ 	* libgnat/s-bitops.adb (Masks): Likewise.
+ 	* libgnat/s-crc32.adb (Table): Likewise.
+ 	* libgnat/s-gearop.adb (Unit_Matrix, Unit_Vector): Likewise.
+ 	* libgnat/s-genbig.adb (Out_data, Zero_Data, Big_Exp, Big_Mul)
+ 	(To_Bignum, To_String, Image, Leading_Padding): Likewise.
+ 	* libgnat/s-htable.adb (Reset): Likewise.
+ 	* libgnat/s-imgcha.adb (C0, C1): Likewise.
+ 	* libgnat/s-powflt.ads (Powten): Likewise.
+ 	* libgnat/s-powlfl.ads (Powten): Likewise.
+ 	* libgnat/s-powllf.ads (Powten): Likewise.
+ 	* libgnat/s-rannum.adb (Matrix_A, Random_Float_Template, Image):
+ 	Likewise.
+ 	* libgnat/s-rannum.ads (Generator): Likewise.
+ 	* libgnat/s-regexp.adb (Compile,Create_Primary_Table)
+ 	(Create_Primary_Table_Glob, Create_Secondary_Table, Compile):
+ 	Likewise.
+ 	* libgnat/s-regpat.adb (Bit_Conversion, Set, Dump_Until)
+ 	(Dump_Current, Dump_Error, Try, Reset_Class): Likewise.
+ 	* libgnat/s-regpat.ads (Pattern_Matcher, Never_Match): Likewise.
+ 	* libgnat/s-scaval__128.adb (Initialize): Likewise.
+ 	* libgnat/s-statxd.adb (Fields, W_F, W_LF)
+ 	(W_LLF, W_SF): Likewise.
+ 	* libgnat/s-stausa.adb (Initialize, Initialize_Analyzer)
+ 	(Output_Results): Likewise.
+ 	* libgnat/s-strops.adb (Str_Concat_SC): Likewise.
+ 	* libgnat/s-valrea.adb (Maxexp32, Maxexp64, Maxexp80): Likewise.
+ 	* libgnat/s-wchcon.ads (WC_Encoding_Letters)
+ 	(WC_Longest_Sequences): Likewise.
+ 	* par-ch4.adb (P_Aggregate_Or_Paren_Expr): Set
+ 	Is_Parenthesis_Aggregate when creating a N_Aggregate using
+ 	parenthesis.
+ 	* scng.adb (Scan): Lower version needed for bracket syntax from
+ 	Extensions to Ada2022.
+ 	* sem_aggr.adb (Resolve_Aggregate): Raise error for container
+ 	aggregate using parenthesis instead of bracket.
+ 	(Resolve_Array_Aggregate): Raise warning for aggregate using
+ 	parenthesis in Ada2022 with obsolescent warning enabled and not
+ 	in GNAT mode.
+ 	* sem_util.ads (Check_Ambiguous_Aggregate): Typo fix in comment.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnarl/a-taside.ads (Activation_Is_Complete): Add pragma
+ 	Inline.
+ 
+ 2021-12-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch12.adb (Freeze_Package_Instance): Consistently consider
+ 	the freeze node of the parent and use large inequality for
+ 	Slocs.
+ 	(Freeze_Subprogram_Instance): Likewise.
+ 	(Insert_Freeze_Node_For_Instance): For an instance in a package
+ 	spec with no source body that immediately follows, consider the
+ 	body of the package for the placement of the freeze node and go
+ 	to the outer level if there is no such body.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch13.ads (Expand_N_Freeze_Entity): Add note about a SPARK
+ 	twin.
+ 	* exp_ch3.ads (Freeze_Type): Likewise.
+ 	* exp_spark.adb (Expand_SPARK_N_Freeze_Entity): Mimic what is
+ 	done in Freeze_Entity.
+ 	(SPARK_Freeze_Type): Mimic what is done in Freeze_Type; add call
+ 	to Make_Predefined_Primitive_Eq_Spec.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch3.adb (Make_Predefined_Primitive_Specs): Move code for
+ 	spec of dispatching equality.
+ 	(Predefined_Primitive_Bodies): Move code for body if dispatching
+ 	equality.
+ 	(Make_Predefined_Primitive_Eq_Spec): Separated code for spec of
+ 	dispatching equality.
+ 	(Predefined_Primitive_Eq_Body): Separated code for body of
+ 	dispatching equality.
+ 	* exp_ch3.ads: Update.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnat/s-valuti.ads (Scan_Natural_Ghost): Split body from
+ 	spec and put it into private part, so that GNATprove can pick it
+ 	both when analysing the unit and its clients.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_aggr.adb, exp_ch6.adb, par-ch4.adb, sem_ch13.adb: Remove
+ 	extra space after ":=" symbol.
+ 	* gen_il-gen.adb: Likewise; add missing headerbox.
+ 
+ 2021-12-02  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* rtsfind.adb (Maybe_Add_With): Ensure that the added "with" is
+ 	never marked as ignored ghost code.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* freeze.adb (Freeze_Entity): Replace First_Entity/Next_Entity
+ 	with First_Component/Next_Component; remove condition with Ekind
+ 	equal to E_Component.
+ 	* sem_ch13.adb (Check_Record_Representation_Clause): Likewise
+ 	for component-or-discriminant.
+ 	* sem_util.adb (Is_Fully_Initialized_Type): Likewise; rename Ent
+ 	to a more specific Comp.
+ 	* sem_warn.adb (Check_References): Likewise.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_warn.adb (Warn_On_Unassigned_Out_Parameter): Move inner
+ 	loop at the beginning of subprogram, so it is executed only
+ 	once; fix order in the "add an ad hoc" phrase.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_warn.adb (Check_References): Remove redundant condition.
+ 
+ 2021-12-02  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* vxworks7-cert-rtp-link__ppcXX.spec: New file.
+ 	* Makefile.rtl: Use it.
+ 
+ 2021-12-02  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/i-c.adb: Add ghost code.
+ 	(C_Length_Ghost): New ghost functions to query the C length of a
+ 	string.
+ 	(To_Ada): Insert constant Count_Cst where needed to comply with
+ 	SPARK.  Homogeneize code between variants for char, wchar_t,
+ 	char16_t and char32_t. Use char16_nul and char32_nul
+ 	systematically instead of their value. Fix the type of index To
+ 	to be Integer instead of Positive, to avoid a possible range
+ 	check failure on an empty Target. Insert an exit statement to
+ 	avoid a possible overflow failure when the last index in Target
+ 	is Natural'Last (possibly on a small string as well).
+ 	* libgnat/i-c.ads: Add contracts.
+ 	(C_Length_Ghost): New ghost functions to query the C length of a
+ 	string.
+ 	* libgnat/s-os_lib.adb: Remove pragma Compiler_Unit_Warning
+ 	causing a spurious error during compilation of GNAT, as this
+ 	pragma is not needed anymore now that we bootstrap (stage1) with
+ 	the base compiler runtime.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnarl/a-taside.ads (Activation_Is_Complete): Add
+ 	precondition.
+ 
+ 2021-12-02  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Check_Derived_Type): Rename local variables; fix
+ 	style in comment.
+ 
+ 2021-12-02  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/s-valboo.adb (First_Non_Space_Ghost): Move to
+ 	utilities.
+ 	(Value_Boolean): Prefix call to First_Non_Space_Ghost.
+ 	* libgnat/s-valboo.ads (First_Non_Space_Ghost): Move to
+ 	utilities.
+ 	(Is_Boolean_Image_Ghost, Value_Boolean): Prefix call to
+ 	First_Non_Space_Ghost.
+ 	* libgnat/s-valuer.adb (Scan_Raw_Real): Adapt to change of
+ 	function Scan_Exponent to procedure.
+ 	* libgnat/s-valueu.adb (Scan_Raw_Unsigned): Adapt to change of
+ 	function Scan_Exponent to procedure.
+ 	* libgnat/s-valuti.adb (First_Non_Space_Ghost): Function moved
+ 	here.
+ 	(Last_Number_Ghost): New ghost query function.
+ 	(Scan_Exponent): Change function with side-effects into
+ 	procedure, to mark in SPARK. Prove procedure wrt contract.
+ 	Change type of local P to avoid possible range check failure (it
+ 	is not known whether this can be activated by callers).
+ 	(Scan_Plus_Sign, Scan_Sign): Change type of local P to avoid
+ 	possible range check failure. Add loop invariants and assertions
+ 	for proof.
+ 	(Scan_Trailing_Blanks): Add loop invariant.
+ 	(Scan_Underscore): Remove SPARK_Mode Off.
+ 	* libgnat/s-valuti.ads (First_Non_Space_Ghost): Function moved
+ 	here.
+ 	(Last_Number_Ghost, Only_Number_Ghost, Is_Natural_Format_Ghost,
+ 	Scan_Natural_Ghost): New ghost query functions.
+ 	(Scan_Plus_Sign, Scan_Sign, Scan_Exponent, Scan_Trailing_Blanks,
+ 	Scan_Underscore): Add functional contracts.
+ 
+ 2021-12-02  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/s-imgboo.adb: Mark in SPARK.
+ 	* libgnat/s-imgboo.ads: Mark in SPARK. Change from Pure to
+ 	Preelaborate unit in order to be able to depend on
+ 	System.Val_Bool.
+ 	(Image_Boolean): Functionally specify the result of the
+ 	procedure by calling System.Val_Bool.Value_Boolean on the
+ 	result.
+ 	* libgnat/s-valboo.adb: Mark in SPARK.
+ 	(First_Non_Space_Ghost): New ghost function.
+ 	(Value_Boolean): Change type of L and F to avoid possible range
+ 	check failure on empty Str.
+ 	* libgnat/s-valboo.ads: Mark in SPARK. Duplicate with-clause
+ 	from body in the spec to be able to call
+ 	System.Val_Util.Only_Space_Ghost in the contract.
+ 	(First_Non_Space_Ghost): New ghost function computing the first
+ 	non-space character in a string.
+ 	(Is_Boolean_Image_Ghost): New ghost function computing whether a
+ 	string is the image of a boolean value.
+ 	(Value_Boolean): Add in precondition the conditions to avoid
+ 	raising Constraint_Error. This precondition is never executed,
+ 	and only used in proof, thanks to the use of pragma
+ 	Assertion_Policy. Given that precondition, the postcondition can
+ 	simply check the first non-space character to decide whether
+ 	True or False is read.
+ 	* libgnat/s-valuti.adb: Mark in SPARK, but use SPARK_Mode Off on
+ 	all subprograms not yet proved.
+ 	(Bad_Value): Annotate expected exception.
+ 	(Normalize_String): Rewrite to avoid possible overflow when
+ 	incrementing F in the first loop. Add loop invariants.
+ 	* libgnat/s-valuti.ads: Mark in SPARK.
+ 	(Bad_Value): Add Depends contract to avoid warning on unused S.
+ 	(Only_Space_Ghost): New ghost function to query if string has
+ 	only space in the specified range.
+ 	(Normalize_String): Add functional contract.
+ 	(Scan_Exponent): Mark spec as not in SPARK as this function has
+ 	side-effects.
+ 
+ 2021-12-02  Pascal Obry  <obry@adacore.com>
+ 
+ 	* libgnat/g-socket.ads (Max_Name_Length): Initialize with
+ 	NI_MAXHOST.
+ 
+ 2021-12-02  Pascal Obry  <obry@adacore.com>
+ 
+ 	* libgnat/g-socket.ads: Minor style fix.
+ 
+ 2021-12-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* einfo.ads (E_Decimal_Fixed_Point_Subtype): Fix pasto.
+ 	* freeze.adb (Freeze_Fixed_Point_Type): Retrieve the underlying type
+ 	of the first subtype and do not use a stale value of Small_Value.
+ 	* sem_res.adb (Resolve_Real_Literal): In the case of a fixed-point
+ 	type, make sure that the base type is frozen and use its Small_Value
+ 	to compute the corresponding integer value of the literal.
+ 
+ 2021-12-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnat/a-cbdlli.ads (List): Remove extra space in Aggregate
+ 	aspect.
+ 
+ 2021-12-01  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst: Add
+ 	documentation of the new form of formal subprogram default in
+ 	the section on language extensions (pragma Extensions_Allowed).
+ 	* gnat_rm.texi: Regenerate.
+ 	* gen_il-gen-gen_nodes.adb: Add Expression as a syntactic field
+ 	of N_Formal_(Abstract|Concrete)_Subprogram_Declaration nodes.
+ 	* par-ch12.adb (P_Formal_Subprogram_Declaration): Add parsing
+ 	support for the new default of a parenthesized expression for
+ 	formal functions. Issue an error when extensions are not
+ 	allowed, suggesting use of -gnatX. Update comment with extended
+ 	syntax for SUBPROGRAM_DEFAULT.
+ 	* sem_ch12.adb (Analyze_Formal_Subprogram_Declaration): Issue an
+ 	error when an expression default is given for an abstract formal
+ 	function. When a default expression is present for a formal
+ 	function, install the function's formals and preanalyze the
+ 	expression.
+ 	(Instantiate_Formal_Subprogram): Fix typo in RM paragraph in a
+ 	comment.  When a formal function has a default expression,
+ 	create a body for the function that will evaluate the expression
+ 	and will be called when the default applies in an instantiation.
+ 	The implicit function is marked as inlined and as having
+ 	convention Intrinsic.
+ 
+ 2021-12-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_elab.adb (Previous_Suitable_Construct): New function declared
+ 	in the Early_Call_Region_Processor package.
+ 	(Find_ECR): Call it to get the previous node at the start.
+ 	(Include): Call it to get the previous node during the traversal.
+ 
+ 2021-12-01  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Do not
+ 	follow the Corresponding_Spec pointer if Acts_As_Spec is True,
+ 	because Corresponding_Spec is Empty in that case, so we would
+ 	exit the loop prematurely, and incorrectly think we are not
+ 	inside a generic unit when we are.
+ 
+ 2021-12-01  Bob Duff  <duff@adacore.com>
+ 
+ 	* par-ch3.adb (P_Access_Type_Definition): If Not_Null_Subtype is
+ 	True, give an error in the access-to-subprogram cases.
+ 
+ 2021-12-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch12.adb (Freeze_Package_Instance): Move up.
+ 
+ 2021-12-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch12.adb (Freeze_Subprogram_Body): Rename into...
+ 	(Freeze_Subprogram_Instance): ...this and change the name of the
+ 	first parameter and local variables for the sake of consistency.
+ 	(Insert_Freeze_Node_For_Instance): Use local variable Par_Inst.
+ 	(Install_Body): Rename into...
+ 	(Freeze_Package_Instance): ...this, remove first parameter and
+ 	change the name of local variables for the sake of consistency.
+ 	Do not deal with the special case of incomplete actual types here
+ 	and do not insert the body.
+ 	(Instantiate_Package_Body): Deal with the special case of incomplete
+ 	actual types here and insert the body.  Call Freeze_Package_Instance
+ 	only if expansion is done.
+ 	(Instantiate_Subprogram_Body): Minor consistency tweak.
+ 
+ 2021-12-01  Etienne Servais  <servais@adacore.com>
+ 
+ 	* sem_aggr.adb (Resolve_Aggregate): Fix typo in comment.
+ 
+ 2021-12-01  Steve Baird  <baird@adacore.com>
+ 
+ 	* sem_case.adb (Check_Bindings): Provide a second strategy for
+ 	implementing bindings and choose which strategy to use for a
+ 	given binding. The previous approach was to introduce a new
+ 	object and assign the bound value to the object.  The new
+ 	approach is to introduce a renaming of a dereference of an
+ 	access value that references the appropriate subcomponent, so no
+ 	copies are made.  The original strategy is still used if the
+ 	type of the object is elementary.  When the renaming approach is
+ 	used, the initialization of the access value is not generated
+ 	until expansion. Until this missing initialization is added, the
+ 	tree looks like a known-at-compile-time dereference of a null
+ 	access value: Temp : Some_Access_Type; Obj : Designated_Type
+ 	renames Temp.all; This leads to problems, so a bogus initial
+ 	value is provided here and then later deleted during expansion.
+ 	(Check_Composite_Case_Selector): Disallow a case selector
+ 	expression that requires finalization. Note that it is ok if the
+ 	selector's type requires finalization, as long as the expression
+ 	itself doesn't have any "newly constructed" parts.
+ 	* exp_ch5.adb (Pattern_Match): Detect the case where analysis of
+ 	a general (i.e., composite selector type) case statement chose
+ 	to implement a binding as a renaming rather than by making a
+ 	copy. In that case, generate the assignments to initialize the
+ 	access-valued object whose designated value is later renamed
+ 	(and remove the bogus initial value for that object that was
+ 	added during analysis).
+ 	* sem_util.ads, sem_util.adb: Add new function
+ 	Is_Newly_Constructed corresponding to RM 4.4 term.
+ 
+ 2021-12-01  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* frontend.adb (Frontend): Do unnesting after ignored ghost code
+ 	has been removed.
+ 	* inline.adb (Analyze_Inlined_Bodies): Don't put ignored ghost
+ 	entities on inlined subprogram list.
+ 
+ 2021-12-01  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* libgnarl/s-tasren.adb (Timed_Task_Entry_Call): Replace
+ 	Defer_Abort and Undefer_Abort with Defer_Abort_Nestable and
+ 	Undefer_Abort_Nestable.
+ 
+ 2021-12-01  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* exp_ch7.adb (Cleanup_Record): Don't process parent.
+ 
+ 2021-12-01  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* sem_attr.adb (Type_Key): Avoid premature use warnings when the
+ 	prefix is a generic actual.
+ 
+ 2021-12-01  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* gnat1drv.adb (Gnat1drv): Force generation of object file if
+ 	compilation unit is an ignored ghost.
+ 
+ 2021-12-01  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* tracebak.c: Add AArch64 RTEMS support.
+ 
+ 2021-12-01  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* init.c: Add __gnat_error_handler and __gnat_install_handler
+ 	for RTEMS.
+ 
+ 2021-12-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sprint.ads (Source_Dump): Fix typo in comment.
+ 	* sprint.adb (Source_Dump): Set Dump_Freeze_Null for both -gnatG
+ 	and -gnatD.
+ 	* switch-c.adb (Scan_Front_End_Switches) <'D'>: Remove obsolete
+ 	kludge.
+ 
+ 2021-12-01  Yannick Moy  <moy@adacore.com>
+ 
+ 	* einfo.ads (Direct_Primitive_Operations): Update the doc to
+ 	indicate that this field is used for all types now.
+ 	* sem_ch4.adb (Try_Object_Operation): Add parameter
+ 	Allow_Extensions set to True to pretend that extensions are
+ 	allowed.
+ 	* sem_ch4.ads: Same.
+ 	* sem_ch6.adb: Do not require Extensions_Allowed.
+ 	* sem_ch8.adb (Find_Selected_Component): Remove duplicate
+ 	"where" in comment.  Improve the error messages regarding use of
+ 	prefixed calls.
+ 
+ 2021-12-01  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_util.adb (Is_Extended_Precision_Floating_Point_Type): New
+ 	function.
+ 	* sem_util.ads (Is_Extended_Precision_Floating_Point_Type): New
+ 	function.
+ 
+ 2021-12-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_aggr.adb, sem_cat.adb, sem_ch10.adb, sem_ch12.adb,
+ 	sem_elim.adb, sem_util.adb: Replace uses of Subprogram_Kind with
+ 	Is_Subprogram.
+ 
+ 2021-12-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnat/a-coinho.ads: Sync whitespace with
+ 	a-coinho__shared.ads.
+ 	* libgnat/a-coinho__shared.ads: Sync whitespace with
+ 	a-coinho.ads.
+ 
+ 2021-12-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* Makefile.rtl (GNATRTL_TASKING_OBJS): Sort.
+ 	(GNATRTL_NONTASKING_OBJS): Sort.
+ 
+ 2021-12-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* Makefile.rtl: Remove extra whitespace in special compilation
+ 	rules.
+ 
+ 2021-12-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* doc/gnat_rm/the_gnat_library.rst (System.Atomic_Counters):
+ 	Sync description with comment in s-atocou.ads.
+ 	* gnat-style.texi, gnat_rm.texi, gnat_ugn.texi: Regenerate.
+ 
+ 2021-12-01  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_ch10.adb (Is_Private_Library_Unit): Move query to
+ 	Sem_Util for sharing.
+ 	* sem_ch7.adb (Analyze_Package_Body_Helper): Add continuation
+ 	message.
+ 	* sem_prag.adb (Analyze_Part_Of): Call new function
+ 	Is_Private_Library_Unit.
+ 	(Check_Valid_Library_Unit_Pragma): Specialize error messages on
+ 	misplaced pragmas.
+ 	(Analyze_Refined_State_In_Decl_Part): Recognize missing Part_Of
+ 	on object in private part.
+ 	* sem_util.adb (Check_State_Refinements): Add continuation
+ 	message.
+ 	(Find_Placement_In_State_Space): Fix detection of placement,
+ 	which relied wrongly on queries In_Package_Body/In_Private_Part
+ 	which do not provide the right information here for all cases.
+ 	(Is_Private_Library_Unit): Move query here for sharing.
+ 	* sem_util.ads (Is_Private_Library_Unit): Move query here for
+ 	sharing.
+ 
+ 2021-12-01  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch3.adb (Analyze_Full_Type_Declaration): If the full type
+ 	has a primitives list but its base type doesn't, set the base
+ 	type's list to the full type's list (covers certain constrained
+ 	cases, such as for arrays).
+ 	(Analyze_Incomplete_Type_Decl): Unconditionally initialize an
+ 	incomplete type's primitives list.
+ 	(Analyze_Subtype_Declaration): Unconditionally set a subtype's
+ 	primitives list to the base type's list, so the lists are
+ 	shared.
+ 	(Build_Derived_Private_Type): Unconditionally initialize a
+ 	derived private type's list to a new empty list.
+ 	(Build_Derived_Record_Type): Unconditionally initialize a
+ 	derived record type's list to a new empty list (now a single
+ 	call for tagged and untagged cases).
+ 	(Derived_Type_Declaration): Unconditionally initialize a derived
+ 	type's list to a new empty list in error cases (when Parent_Type
+ 	is undefined or illegal).
+ 	(Process_Full_View): Unconditionally copy the primitive
+ 	operations from the private view to the full view (rather than
+ 	conditioning it on whether extensions are enabled).
+ 	* sem_ch7.adb (New_Private_Type): Unconditionally initialize an
+ 	untagged private type's primitives list to a new empty list.
+ 
+ 2021-12-01  Etienne Servais  <servais@adacore.com>
+ 
+ 	* libgnat/a-cbhase.adb, libgnat/a-cborse.adb,
+ 	libgnat/a-cihase.adb, libgnat/a-ciorse.adb,
+ 	libgnat/a-cohase.adb, libgnat/a-coorse.adb
+ 	(Constant_Reference,Reference_Preserving_Key): Refactor using
+ 	the equivalence stated in the RM.
+ 
+ 2021-12-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch3.adb (Make_Eq_Body): Refactor to avoid appending to an
+ 	empty list; also, when exiting early we will not create any
+ 	list; fix style in comment.
+ 
+ 2021-12-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* repinfo.adb (List_Entities): Simplify detection of entries;
+ 	refactor potentially redundant comparison.
+ 
+ 2021-11-29  Eric Gallager  <egallager@gcc.gnu.org>
+ 
+ 	PR other/103021
+ 	* gcc-interface/Make-lang.in: Use ETAGS variable in
+ 	TAGS target.
+ 
+ 2021-11-15  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* gcc-interface/Makefile.in: Use DSYMUTIL_FOR_TARGET in
+ 	libgnat/libgnarl recipies.
+ 
+ 2021-11-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/ada-tree.h (DECL_STUBBED_P): Delete.
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity): Do not set it.
+ 	* gcc-interface/trans.c (Call_to_gnu): Use GNAT_NAME local variable
+ 	and adjust accordingly.  Replace test on DECL_STUBBED_P with direct
+ 	test on Convention and move it down in the processing.
+ 
+ 2021-11-10  Bob Duff  <duff@adacore.com>
+ 
+ 	* scng.adb (Check_Bidi): New procedure to give warning. Note
+ 	that this is called only for non-ASCII characters, so should not
+ 	be an efficiency issue.
+ 	(Slit): Call Check_Bidi for wide characters in string_literals.
+ 	(Minus_Case): Call Check_Bidi for wide characters in comments.
+ 	(Char_Literal_Case): Call Check_Bidi for wide characters in
+ 	character_literals.  Move Accumulate_Checksum down, because
+ 	otherwise, if Err is True, the Code is uninitialized.
+ 	* errout.ads: Make the obsolete nature of "Insertion character
+ 	?" more prominent; one should not have to read several
+ 	paragraphs before finding out that it's obsolete.
+ 
+ 2021-11-10  Bob Duff  <duff@adacore.com>
+ 
+ 	* repinfo.adb (List_Component_Layout): Initialize Sbit.
+ 
+ 2021-11-10  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_Array_Equality): Fix inconsistent casing
+ 	in comment about the template for expansion of array equality;
+ 	now we use lower case for true/false/boolean.
+ 	(Handle_One_Dimension): Fix comment about the template for
+ 	expansion of array equality.
+ 
+ 2021-11-10  Bob Duff  <duff@adacore.com>
+ 
+ 	* repinfo.adb (List_Common_Type_Info, List_Object_Info): Add
+ 	check for In_Generic_Scope.
+ 	(List_Component_Layout): Check for known static values.
+ 	* sem_ch13.adb (Check_Record_Representation_Clause): Add check
+ 	for In_Generic_Scope.
+ 
+ 2021-11-10  Etienne Servais  <servais@adacore.com>
+ 
+ 	* aspects.adb, aspects.ads (Is_Aspect_Id): New function.
+ 	* namet-sp.ads, namet-sp.adb (Aspect_Spell_Check,
+ 	Attribute_Spell_Check): New Functions.
+ 	* par-ch13.adb (Possible_Misspelled_Aspect): Removed.
+ 	(With_Present): Use Aspect_Spell_Check, use Is_Aspect_Id.
+ 	(Get_Aspect_Specifications): Use Aspect_Spell_Check,
+ 	Is_Aspect_Id, Bad_Aspect.
+ 	* par-sync.adb (Resync_Past_Malformed_Aspect): Use Is_Aspect_Id.
+ 	* sem_ch13.adb (Check_One_Attr): Use Is_Aspect_Id.
+ 	* sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings):
+ 	Introduce the Process_No_Specification_Of_Aspect, emit a warning
+ 	instead of an error on unknown aspect, hint for typos.
+ 	Introduce Process_No_Use_Of_Attribute to add spell check for
+ 	attributes too.
+ 	(Set_Error_Msg_To_Profile_Name): Use Is_Aspect_Id.
+ 	* sem_util.adb (Bad_Attribute): Use Attribute_Spell_Check.
+ 	(Bad_Aspect): New function.
+ 	* sem_util.ads (Bad_Aspect): New function.
+ 
+ 2021-11-10  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* libgnarl/s-taskin.adb (Initialize_ATCB): Initialize
+ 	T.Common.Current_Priority to Priority'First.
+ 	* libgnarl/s-taskin.ads (Unspecified_Priority): Redefined as -1.
+ 	* libgnat/system-rtems.ads: Start priority range from 1, as 0 is
+ 	reserved by the operating system.
+ 
+ 2021-11-10  Pierre-Alexandre Bazin  <bazin@adacore.com>
+ 
+ 	* libgnat/a-nbnbig.ads: Mark the unit as Pure.
+ 	* libgnat/s-aridou.adb: Add contracts and ghost code for proof.
+ 	(Scaled_Divide): Reorder operations and use of temporaries in
+ 	two places to facilitate proof.
+ 	* libgnat/s-aridou.ads: Add full functional contracts.
+ 	* libgnat/s-arit64.adb: Mark in SPARK.
+ 	* libgnat/s-arit64.ads: Add contracts similar to those from
+ 	s-aridou.ads.
+ 	* rtsfind.ads: Document the limitation that runtime units
+ 	loading does not work for private with-clauses.
+ 
+ 2021-11-10  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch3.adb (Make_Eq_Body): Adapt call to
+ 	Expand_Record_Equality.
+ 	* exp_ch4.ads, exp_ch4.adb (Expand_Composite_Equality): Remove
+ 	Bodies parameter; adapt comment; fix style in body; adapt calls
+ 	to Expand_Record_Equality.
+ 	(Expand_Array_Equality): Adapt calls to
+ 	Expand_Composite_Equality.
+ 	(Expand_Record_Equality): Remove Bodies parameter; adapt
+ 	comment; adapt call to Expand_Composite_Equality.
+ 	* exp_ch8.adb (Build_Body_For_Renaming): Adapt call to
+ 	Expand_Record_Equality.
+ 
+ 2021-11-10  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_Composite_Equality): Handle arrays inside
+ 	records just like scalars; only records inside records need
+ 	dedicated handling.
+ 
+ 2021-11-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_type.ads (Has_Compatible_Type): Add For_Comparison parameter.
+ 	* sem_type.adb (Has_Compatible_Type): Put back the reversed calls
+ 	to Covers guarded with For_Comparison.
+ 	* sem_ch4.adb (Analyze_Membership_Op) <Try_One_Interp>: Remove new
+ 	reversed call to Covers and set For_Comparison to true instead.
+ 	(Find_Comparison_Types) <Try_One_Interp>: Likewise
+ 	(Find_Equality_Types) <Try_One_Interp>: Likewise.
+ 
+ 2021-11-10  Yannick Moy  <moy@adacore.com>
+ 
+ 	* Makefile.rtl: Add unit.
+ 	* libgnat/a-nbnbin__ghost.adb: Move...
+ 	* libgnat/a-nbnbig.adb: ... here. Mark ghost as ignored.
+ 	* libgnat/a-nbnbin__ghost.ads: Move...
+ 	* libgnat/a-nbnbig.ads: ... here.  Add comment for purpose of
+ 	this unit. Mark ghost as ignored.
+ 	* libgnat/s-widthu.adb: Use new unit.
+ 	* sem_aux.adb (First_Subtype): Adapt to the case of a ghost type
+ 	whose freeze node is rewritten to a null statement.
+ 
+ 2021-11-10  Etienne Servais  <servais@adacore.com>
+ 
+ 	* libgnat/s-regexp.adb (Check_Well_Formed_Pattern): Fix
+ 	Constraint_Error on missing close bracket.
+ 
+ 2021-11-10  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_Array_Equality): Remove check of the array
+ 	bound being an N_Range node; use Type_High_Bound/Type_Low_Bound,
+ 	which handle all kinds of array bounds.
+ 
+ 2021-11-10  Etienne Servais  <servais@adacore.com>
+ 
+ 	* sem_ch3.adb (Derived_Type_Declaration): Introduce a subprogram
+ 	for tree transformation. If a tree transformation is performed,
+ 	then warn that it would be better to reorder the interfaces.
+ 
+ 2021-11-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch4.adb (Find_Non_Universal_Interpretations): Add guard.
+ 
+ 2021-11-10  Yannick Moy  <moy@adacore.com>
+ 
+ 	* par-ch4.adb (P_Primary): Adapt test for getting error message
+ 	on missing parentheses.
+ 
+ 2021-11-09  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* freeze.adb (Check_Inherited_Conditions): Initialize
+ 	Ifaces_List.
+ 
+ 2021-11-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch4.adb (Analyze_Membership_Op) <Find_Interpretation>: Handle
+ 	both overloaded and non-overloaded cases.
+ 	<Try_One_Interp>: Do a reversed call to Covers if the outcome of the
+ 	call to Has_Compatible_Type is false.
+ 	Simplify implementation after change to Find_Interpretation.
+ 	(Analyze_User_Defined_Binary_Op): Be prepared for previous errors.
+ 	(Find_Comparison_Types) <Try_One_Interp>: Do a reversed call to
+ 	Covers if the outcome of the call to Has_Compatible_Type is false.
+ 	(Find_Equality_Types) <Try_One_Interp>: Likewise.
+ 	* sem_type.adb (Has_Compatible_Type): Remove the reversed calls to
+ 	Covers.  Add explicit return on all paths.
+ 
+ 2021-11-09  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* gnatls.adb (Initialize_Default_Project_Path): Remove early
+ 	abort on invalid path.
+ 
+ 2021-11-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sprint.adb (Sprint_Node_Actual) <N_Allocator>: Also print the
+ 	Procedure_To_Call field if it is present.
+ 	<N_Extended_Return_Statement>: Also print the Storage_Pool and
+ 	Procedure_To_Call fields if they are present.
+ 	<N_Free_Statement>: Likewise.
+ 	<N_Simple_Return_Statement>: Likewise.
+ 
+ 2021-11-09  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* libgnarl/s-tasini.adb (Check_Abort_Status): Don't return 1 if
+ 	the task is aborting.
+ 	* libgnarl/s-tasini.ads (Check_Abort_Status): Update comment.
+ 
+ 2021-11-09  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* Makefile.rtl: Add ATOMICS_TARGET_PAIRS and
+ 	ATOMICS_BUILTINS_TARGET_PAIRS to LIBGNAT_TARGET_PAIRS for
+ 	aarch64-rtems.
+ 
+ 2021-11-09  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* exp_util.adb (Ancestor_Primitive): Prevent return of an
+ 	subprogram alias when the ancestor primitive of the alias is the
+ 	same as Subp.
+ 
+ 2021-11-09  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* exp_ch4.adb (Tagged_Membership): Use corresponding record type
+ 	when expanding a tagged membership test on protected types.
+ 
+ 2021-11-09  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* strub.adb, strub.ads: New files.
+ 	* exp_attr.adb (Access_Cases): Copy strub mode to subprogram type.
+ 	* exp_disp.adb (Expand_Dispatching_Call): Likewise.
+ 	* freeze.adb (Check_Inherited_Conditions): Check that strub modes
+ 	match overridden subprograms and interfaces.
+ 	(Freeze_All): Renaming declarations too.
+ 	* sem_attr.adb (Resolve_Attribute): Reject 'Access to
+ 	strub-annotated data object.
+ 	* sem_ch3.adb (Derive_Subprogram): Copy strub mode to
+ 	inherited subprogram.
+ 	* sem_prag.adb (Analyze_Pragma): Propagate Strub Machine_Attribute
+ 	from access-to-subprogram to subprogram type when required,
+ 	but not from access-to-data to data type.  Mark the entity that
+ 	got the pragma as having a gigi rep item.
+ 	* sem_res.adb (Resolve): Reject implicit conversions that
+ 	would change strub modes.
+ 	(Resolve_Type_Conversions): Reject checked conversions
+ 	between incompatible strub modes.
+ 	* doc/gnat_rm/security_hardening_features.rst: Update.
+ 	* gnat_rm.texi: Regenerate.
+ 	* libgnat/a-except.ads (Raise_Exception): Revert strub-callable
+ 	annotation in public subprogram.
+ 	* libgnat/s-arit128.ads (Multiply_With_Ovflo_Check128): Likewise.
+ 	* libgnat/s-arit64.ads (Multiply_With_Ovflo_Check64): Likewise.
+ 	* libgnat/s-secsta.ads (SS_Allocate): Likewise.
+ 	(SS_Mark, SS_Release): Likewise.
+ 	* gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add ada/strub.o.
+ 
+ 2021-11-09  Etienne Servais  <servais@adacore.com>
+ 
+ 	* sinput.ads: Initialize Current_Source_Unit to No_Unit.
+ 
+ 2021-11-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* Makefile.rtl (ARM and Aarch64 VxWorks): Use atomic variants of
+ 	runtime units.
+ 	* libgnat/a-strunb__shared.ads: Mention AARCH64 and ARM as
+ 	supported.
+ 	* libgnat/s-atocou.ads: Likewise.
+ 
+ 2021-11-09  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_util.adb (Accessibility_Level): Use init_proc_level_formal
+ 	instead of computing a new accessibility level from Scope_Depth
+ 	(E).
+ 
+ 2021-11-09  Johannes Kliemann  <kliemann@adacore.com>
+ 
+ 	* vxworks7-cert-rtp-link.spec: Replace the definition of
+ 	__wrs_rtp_base with the base_link spec.
+ 	* vxworks7-cert-rtp-base-link.spec: Add base_link spec with
+ 	__wrs_rtp_base definition for all architectures.
+ 	* vxworks7-cert-rtp-base-link__ppc64.spec: Add base_link spec
+ 	with __wrs_rtp_base definition for ppc64.
+ 	* vxworks7-cert-rtp-base-link__x86.spec: Add base_link spec with
+ 	__wrs_rtp_base definition for x86.
+ 	* vxworks7-cert-rtp-base-link__x86_64.spec: Add base_link spec
+ 	with __wrs_rtp_base definition for x86_64.
+ 
+ 2021-11-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Copy_Parameter_List): Refactor to remove
+ 	repeated calls to First_Formal.
+ 
+ 2021-11-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch8.adb (Build_Body_For_Renaming): Remove unnecessary
+ 	calls to Sloc; set Handled_Statement_Sequence when building
+ 	subprogram body; whitespace cleanup.
+ 
+ 2021-11-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Handle_One_Dimension): Parameter N must be always
+ 	positive, because it is translated into expression of 'First and
+ 	'Last.
+ 
+ 2021-11-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* tbuild.adb (New_Occurrence_Of): Simplify by reusing
+ 	Make_Identifier.
+ 
+ 2021-11-09  Etienne Servais  <servais@adacore.com>
+ 
+ 	* scng.adb (Set_Start_Column): Return Column_Number'Last when
+ 	handling Constraint_Error. Plus reformat a strangely 7 level if
+ 	loop.
+ 
+ 2021-11-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Test_Empty_Arrays): Simplify with Evolve_Or_Else;
+ 	remove unnecessary call to Relocate_Node.
+ 	(Test_Lengths_Correspond): Likewise.
+ 
+ 2021-11-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnat/a-strunb.adb (Deallocate): Rename Reference_Copy to
+ 	Old, to make the code similar to other routines in this package.
+ 	(Realloc_For_Chunk): Use a temporary, deallocate the previous
+ 	string using a null-allowing copy of the string reference.
+ 
+ 2021-11-09  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_util.adb (Accessibility_Level): Fix typos.
+ 
+ 2021-11-09  Tom Tromey  <tromey@adacore.com>
+ 
+ 	* doc/gnat_ugn/platform_specific_information.rst: Document the
+ 	SuSE kernel bug.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2021-11-09  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch13.adb (Freeze_Entity_Checks): Analyze the expression of
+ 	a pragma Predicate associated with an aspect at the freeze point
+ 	of the type, to ensure that references to globals get saved when
+ 	the aspect occurs within a generic body. Also, add
+ 	Aspect_Static_Predicate to the choices of the membership test of
+ 	the enclosing guard.
+ 
+ 2021-11-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Arr_Attr): Refine type of the parameter from Int
+ 	to Pos; refine name of the parameter from Num to Dim; fix
+ 	reference to "Expr" in comment.
+ 
+ 2021-11-09  Steve Baird  <baird@adacore.com>
+ 
+ 	* libgnat/s-regexp.adb (Compile.Check_Well_Formed_Patern): When
+ 	a "|" operator is encountered in a pattern, check that it is not
+ 	the last character of the pattern.
+ 
+ 2021-11-09  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_ch3.adb (Analyze_Subtype_Declaration,
+ 	Derived_Type_Declaration): Initialize list of primitive
+ 	operations when Extensions_Allowed.
+ 
+ 2021-11-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* checks.adb (Apply_Constraint_Check): Guard against calling
+ 	Choices when the first association in an array aggregate is a
+ 	N_Iterated_Component_Association node.
+ 
+ 2021-11-09  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_ch3.adb (Analyze_Incomplete_Type_Decl): Add the missing
+ 	initialization.
+ 
+ 2021-11-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_prag.adb (Check_Usage): Guard against calling Usage_Error
+ 	with illegal Item_Id. The intention to do this was already
+ 	described in the comment but not implemented.
+ 
+ 2021-11-09  Etienne Servais  <servais@adacore.com>
+ 
+ 	* exp_ch6.adb (Expand_Actuals): Add a condition to check for the
+ 	possibility of task.
+ 
+ 2021-11-05  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* gcc-interface/Make-lang.in: Use iOS signal trampoline code
+ 	for hosted Ada tools.
+ 	* sigtramp-ios.c: Wrap the declarations in extern "C" when
+ 	the code is built by a C++ compiler.
+ 
+ 2021-10-30  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* doc/gnat_rm/security_hardening_features.rst: Mention
+ 	optimization to operations with implied compares.
+ 
+ 2021-10-28  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* doc/gnat_rm/security_hardening_features.rst
+ 	(Hardened Conditionals): New.
+ 
+ 2021-10-25  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* gcc-interface/Make-lang.in, gcc-interface/Makefile.in: Remove
+ 	gnatfind and gnatxref.
+ 
+ 2021-10-25  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_ch4.adb (Has_Possible_Literal_Aspects): If analysis of an
+ 	operator node fails to find  a possible interpretation, and one
+ 	of its operands is a literal or a named number, assign to the
+ 	node the corresponding class type (Any_Integer, Any_String,
+ 	etc).
+ 	(Operator_Check): Call it before emitting a type error.
+ 	* sem_res.adb (Has_Applicable_User_Defined_Literal): Given a
+ 	literal and a type, determine whether the type has a
+ 	user_defined aspect that can apply to the literal, and rewrite
+ 	the node as call to the corresponding function. Most of the code
+ 	was previously in procedure Resolve.
+ 	(Try_User_Defined_Literal): Check operands of a predefined
+ 	operator that fails to resolve, and apply
+ 	Has_Applicable_User_Defined_Literal to literal operands if any,
+ 	to find if a conversion will allow the operator to resolve
+ 	properly.
+ 	(Resolve): Call the above when a literal or an operator with a
+ 	literal operand fails to resolve.
+ 
+ 2021-10-25  Bob Duff  <duff@adacore.com>
+ 
+ 	* freeze.adb (Freeze_Fixed_Point_Type): Remove
+ 	previously-inserted test for Uint_0; no longer needed.
+ 	* gen_il-gen.ads: Improve comments.
+ 	* repinfo.adb (Rep_Value): Use Ubool type for B.
+ 	* repinfo.ads (Node_Ref): Use Unegative type.
+ 	(Node_Ref_Or_Val): Document that values of this type can be
+ 	No_Uint.
+ 	* exp_disp.adb (Make_Disp_Requeue_Body): Minor comment fix.
+ 	* sem_ch3.adb: Likewise.
+ 	* sem_ch8.adb: Likewise.
+ 	* sinfo-utils.adb (End_Location): End_Span can never be No_Uint,
+ 	so remove the "if No (L)" test.
+ 	* uintp.adb (Image_String): Use "for ... of" loop.
+ 	* uintp.ads (Unegative): New type for negative integers.  We
+ 	give it a long name (unlike Unat and Upos) because it is rarely
+ 	used.
+ 
+ 2021-10-25  Etienne Servais  <servais@adacore.com>
+ 
+ 	* errout.adb (Skip_Msg_Insertion_Warning): Adapt and format as
+ 	Erroutc.Prescan_Message.Parse_Message_Class.
+ 	(Warn_Insertion): Adapt to new format.
+ 	* errout.ads: Update documentation.
+ 	* erroutc.adb (Get_Warning_Tag): Adapt to new format.
+ 	(Prescan_Message): Introduce Parse_Message_Class function.
+ 	(Validate_Specific_Warnings): Update ?W? to ?.w?.
+ 	* erroutc.ads: Update type and documentation.
+ 	* checks.adb (Validity_Check_Range): Update ?X? to ?.x?.
+ 	* exp_ch11.adb (Possible_Local_Raise): Update ?X? to ?.x?.
+ 	(Warn_If_No_Local_Raise): Likewise.
+ 	(Warn_If_No_Propagation): Likewise.
+ 	(Warn_No_Exception_Propagation_Active): Likewise.
+ 	* exp_ch4.adb (Expand_N_Allocator): Attach warning message to
+ 	-gnatw_a.
+ 	* exp_prag.adb (Expand_Pragma_Check): Update ?A? to ?.a?.
+ 	* exp_util.adb (Activate_Atomic_Synchronization): Update ?N? to
+ 	?.n?.
+ 	(Add_Invariant_Check): Update ?L? to ?.l?.
+ 	* freeze.adb (Check_Suspicious_Modulus): Update ?M? to ?.m?.
+ 	(Freeze_Entity): Update ?T? to ?.t?, ?Z? to ?.z?.
+ 	* par-util.adb (Warn_If_Standard_Redefinition): Update ?K? to
+ 	?.k?.
+ 	* sem_attr.adb (Min_Max): Update ?U? to ?.u?.
+ 	* sem_ch13.adb (Adjust_Record_For_Reverse_Bit_Order): Update ?V?
+ 	to ?.v?.
+ 	(Adjust_Record_For_Reverse_Bit_Order_Ada_95): Update ?V? to ?.v?.
+ 	(Component_Size_Case): Update ?S? to ?.s?.
+ 	(Analyze_Record_Representation_Clause): Update ?S? to ?.s? and
+ 	?C? to ?.c?.
+ 	(Add_Call): Update ?L? to ?.l?.
+ 	(Component_Order_Check): Attach warning message to -gnatw_r.
+ 	(Check_Component_List): Update ?H? to ?.h?.
+ 	(Set_Biased): Update ?B? to ?.b?.
+ 	* sem_ch3.adb (Modular_Type_Declaration): Update ?M? to ?.m?.
+ 	* sem_ch4.adb (Analyze_Mod): Update ?M? to ?.m?.
+ 	(Analyze_Quantified_Expression): Update ?T? to ?.t?.
+ 	* sem_ch6.adb (Check_Conformance): Attach warning message to
+ 	-gnatw_p.
+ 	(List_Inherited_Pre_Post_Aspects): Update ?L? to ?.l?.
+ 	* sem_ch7.adb (Unit_Requires_Body_Info): Update ?Y? to ?.y?.
+ 	* sem_ch8.adb (Analyze_Object_Renaming): Update ?R? to ?.r?.
+ 	* sem_prag.adb (Validate_Compile_Time_Warning_Or_Error): Attach
+ 	warning message to -gnatw_c.
+ 	* sem_res.adb (Check_Argument_Order): Update ?P? to ?.p?.
+ 	(Resolve_Comparison_Op): Update ?U? to ?.u?.
+ 	(Resolve_Range): Update ?U? to ?.u?.
+ 	(Resolve_Short_Circuit): Update ?A? to ?.a?.
+ 	(Resolve_Unary_Op): Update ?M? to ?.m?.
+ 	* sem_util.adb (Check_Result_And_Post_State): Update ?T? to ?.t?.
+ 	* sem_warn.adb (Output_Unused_Warnings_Off_Warnings): Update ?W?
+ 	to ?.w?.
+ 	* warnsw.ads: Update documentation for -gnatw_c.
+ 
+ 2021-10-25  Bob Duff  <duff@adacore.com>
+ 
+ 	* inline.adb (Establish_Actual_Mapping_For_Inlined_Call): Fix
+ 	comment.
+ 
+ 2021-10-25  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen.adb (Put_Seinfo): Generate type
+ 	Seinfo.Type_Only_Enum based on type
+ 	Gen_IL.Internals.Type_Only_Enum. Automatically generating a copy
+ 	of the type will help keep them in sync.  (Note that there are
+ 	no Ada compiler packages imported into Gen_IL.)  Add a Type_Only
+ 	field to Field_Descriptor, so this information is available in
+ 	the Ada compiler (as opposed to just in the Gen_IL "compiler").
+ 	(One_Comp): Add initialization of the Type_Only field of
+ 	Field_Descriptor.
+ 	* gen_il-internals.ads (Image): Image function for
+ 	Type_Only_Enum.
+ 	* atree.ads (Node_To_Fetch_From): New function to compute which
+ 	node to fetch from, based on the Type_Only aspect.
+ 	* atree.adb (Get_Field_Value): Call Node_To_Fetch_From.
+ 	* treepr.adb (Print_Entity_Field): Call Node_To_Fetch_From.
+ 	(Print_Node_Field): Assert.
+ 	* sinfo-utils.adb (Walk_Sinfo_Fields,
+ 	Walk_Sinfo_Fields_Pairwise): Asserts.
+ 
+ 2021-10-25  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_Composite_Equality): Fix style.
+ 	(Element_To_Compare): Simplify loop.
+ 	(Expand_Record_Equality): Adapt calls to Element_To_Compare.
+ 
+ 2021-10-25  Steve Baird  <baird@adacore.com>
+ 
+ 	* sem_case.adb (Composite_Case_Ops.Box_Value_Required): A new
+ 	function which takes a component type and returns a Boolean.
+ 	Returns True for the cases which were formerly forbidden as
+ 	components (these checks were formerly performed in the
+ 	now-deleted procedure
+ 	Check_Composite_Case_Selector.Check_Component_Subtype).
+ 	(Composite_Case_Ops.Normalized_Case_Expr_Type): Hoist this
+ 	function out of the Array_Case_Ops package because it has been
+ 	generalized to also do the analogous thing in the case of a
+ 	discriminated type.
+ 	(Composite_Case_Ops.Scalar_Part_Count): Return 0 if
+ 	Box_Value_Required returns True for the given type/subtype.
+ 	(Composite_Case_Ops.Choice_Analysis.Choice_Analysis.Component_Bounds_Info.
+ 	Traverse_Discrete_Parts): Return without doing anything if
+ 	Box_Value_Required returns True for the given type/subtype.
+ 	(Composite_Case_Ops.Choice_Analysis.Parse_Choice.Traverse_Choice):
+ 	If Box_Value_Required yields True for a given component type,
+ 	then check that the value of that component in a choice
+ 	expression is indeed a box (in which case the component is
+ 	ignored).
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst: Update
+ 	documentation.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-10-25  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnat/a-nbnbin__gmp.adb (From_String): Fix predicate
+ 	mismatch between subprogram declaration and body.
+ 
+ 2021-10-25  Bob Duff  <duff@adacore.com>
+ 
+ 	* einfo-utils.adb (Declaration_Node): Avoid returning the
+ 	following node kinds: N_Assignment_Statement, N_Integer_Literal,
+ 	N_Procedure_Call_Statement, N_Subtype_Indication, and
+ 	N_Type_Conversion.  Assert that the result is in N_Is_Decl or
+ 	empty.
+ 	* gen_il-gen-gen_nodes.adb (N_Is_Decl): Modify to match the
+ 	things that Declaration_Node can return.
+ 
+ 2021-10-25  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnat/a-strsup.ads (Super_Length, Super_Element,
+ 	Super_Slice): Add Global contracts.
+ 
+ 2021-10-25  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch3.adb (Predefined_Primitive_Bodies): Simplify detection
+ 	of existing equality operator.
+ 
+ 2021-10-25  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch3.adb (Predefined_Primitive_Bodies): Remove redundant
+ 	conditions related to interface types.
+ 
+ 2021-10-25  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* adaint.c (__gnat_portable_spawn): Do not expect execv to
+ 	return 0.
+ 	(__gnat_portable_no_block_spawn): Likewise.
+ 
+ 2021-10-25  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_ch8.adb (Analyze_Subprogram_Renaming): Set New_S to Empty.
+ 
+ 2021-10-25  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnat/a-strunb.ads (Unbounded_String): Reference is never
+ 	null.
+ 	* libgnat/a-strunb.adb (Finalize): Copy reference while it needs
+ 	to be deallocated.
+ 
+ 2021-10-25  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* lib-xref.adb (Get_Through_Renamings): Exit loop when an
+ 	enumeration literal is found.
+ 
+ 2021-10-25  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/s-widthu.adb: Add pragma Annotate.
+ 
+ 2021-10-25  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* sem_ch8.adb (Build_Class_Wide_Wrapper): Previous version split
+ 	in two subprograms to factorize its functionality:
+ 	Find_Suitable_Candidate, and Build_Class_Wide_Wrapper. These
+ 	routines are also placed in the new subprogram
+ 	Handle_Instance_With_Class_Wide_Type.
+ 	(Handle_Instance_With_Class_Wide_Type): New subprogram that
+ 	encapsulates all the code that handles instantiations with
+ 	class-wide types.
+ 	(Analyze_Subprogram_Renaming): Adjust code to invoke the new
+ 	nested subprogram Handle_Instance_With_Class_Wide_Type; adjust
+ 	documentation.
+ 
+ 2021-10-25  Bob Duff  <duff@adacore.com>
+ 
+ 	* einfo-utils.ads, einfo-utils.adb (Alias, Set_Alias,
+ 	Renamed_Entity, Set_Renamed_Entity, Renamed_Object,
+ 	Set_Renamed_Object): Add assertions that reflect how these are
+ 	supposed to be used and what they are supposed to return.
+ 	(Renamed_Entity_Or_Object): New getter.
+ 	(Set_Renamed_Object_Of_Possibly_Void): Setter that allows N to
+ 	be E_Void.
+ 	* checks.adb (Ensure_Valid): Use Renamed_Entity_Or_Object
+ 	because this is called for both cases.
+ 	* exp_dbug.adb (Debug_Renaming_Declaration): Use
+ 	Renamed_Entity_Or_Object because this is called for both cases.
+ 	Add assertions.
+ 	* exp_util.adb (Possible_Bit_Aligned_Component): Likewise.
+ 	* freeze.adb (Freeze_All_Ent): Likewise.
+ 	* sem_ch5.adb (Within_Function): Likewise.
+ 	* exp_attr.adb (Calculate_Header_Size): Call Renamed_Entity
+ 	instead of Renamed_Object.
+ 	* exp_ch11.adb (Expand_N_Raise_Statement): Likewise.
+ 	* repinfo.adb (Find_Declaration): Likewise.
+ 	* sem_ch10.adb (Same_Unit, Process_Spec_Clauses,
+ 	Analyze_With_Clause, Install_Parents): Likewise.
+ 	* sem_ch12.adb (Build_Local_Package, Needs_Body_Instantiated,
+ 	Build_Subprogram_Renaming, Check_Formal_Package_Instance,
+ 	Check_Generic_Actuals, In_Enclosing_Instance,
+ 	Denotes_Formal_Package, Process_Nested_Formal,
+ 	Check_Initialized_Types, Map_Formal_Package_Entities,
+ 	Restore_Nested_Formal): Likewise.
+ 	* sem_ch6.adb (Report_Conflict): Likewise.
+ 	* sem_ch8.adb (Analyze_Exception_Renaming,
+ 	Analyze_Generic_Renaming, Analyze_Package_Renaming,
+ 	Is_Primitive_Operator_In_Use, Declared_In_Actual,
+ 	Note_Redundant_Use): Likewise.
+ 	* sem_warn.adb (Find_Package_Renaming): Likewise.
+ 	* sem_elab.adb (Ultimate_Variable): Call Renamed_Object instead
+ 	of Renamed_Entity.
+ 	* exp_ch6.adb (Get_Function_Id): Call
+ 	Set_Renamed_Object_Of_Possibly_Void, because the defining
+ 	identifer is still E_Void at this point.
+ 	* sem_util.adb (Function_Call_Or_Allocator_Level): Likewise.
+ 	Remove redundant (unreachable) code.
+ 	(Is_Object_Renaming, Is_Valid_Renaming): Call Renamed_Object
+ 	instead of Renamed_Entity.
+ 	(Get_Fullest_View): Call Renamed_Entity instead of
+ 	Renamed_Object.
+ 	(Copy_Node_With_Replacement): Call
+ 	Set_Renamed_Object_Of_Possibly_Void because the defining entity
+ 	is sometimes E_Void.
+ 	* exp_ch5.adb (Expand_N_Assignment_Statement): Protect a call to
+ 	Renamed_Object with Is_Object to avoid assertion failure.
+ 	* einfo.ads: Minor comment fixes.
+ 	* inline.adb: Minor comment fixes.
+ 	* tbuild.ads: Minor comment fixes.
+ 
+ 2021-10-25  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_ch13.adb (Build_Discrete_Static_Predicate): Remove use of
+ 	exception propagation since this code is exercised during the
+ 	bootstrap.
+ 
+ 2021-10-25  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_ch13.adb (Freeze_Entity_Checks): Perform same check on
+ 	predicate expression inside pragma as inside aspect.
+ 	* sem_util.adb (Is_Current_Instance): Recognize possible
+ 	occurrence of subtype as current instance inside the pragma
+ 	Predicate.
+ 
+ 2021-10-25  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* erroutc.adb (Count_Compile_Time_Pragma_Warnings): Don't count
+ 	deleted warnings.
+ 
+ 2021-10-22  Eric Gallager  <egallager@gcc.gnu.org>
+ 
+ 	PR other/102663
+ 	* gcc-interface/Make-lang.in: Allow dvi-formatted
+ 	documentation to be installed.
+ 
+ 2021-10-20  Bob Duff  <duff@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity): Remove unnecessary
+ 	call to No_Uint_To_0.
+ 
+ 2021-10-20  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* exp_unst.adb (Visit_Node, when N_Subprogram_Call): Never treat
+ 	instrinsic subprograms as nested.
+ 
+ 2021-10-20  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/s-widlllu.ads: Mark in SPARK.
+ 	* libgnat/s-widllu.ads: Likewise.
+ 	* libgnat/s-widuns.ads: Likewise.
+ 	* libgnat/s-widthu.adb: Add ghost code and a
+ 	pseudo-postcondition.
+ 
+ 2021-10-20  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/a-nbnbin__ghost.adb (Signed_Conversions,
+ 	Unsigned_Conversions): Mark subprograms as not imported.
+ 	* libgnat/a-nbnbin__ghost.ads: Provide a dummy body.
+ 
+ 2021-10-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_eval.adb (Eval_Type_Conversion): If the target subtype is
+ 	a static floating-point subtype and the result is a real literal,
+ 	consider its machine-rounded value to raise Constraint_Error.
+ 	(Test_In_Range): Turn local variables into constants.
+ 
+ 2021-10-20  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* libgnat/g-io-put__vxworks.adb: Remove (unused)
+ 	* libgnat/s-parame__ae653.ads: Likewise.
+ 	* libgnat/s-thread.ads: Likewise.
+ 	* libgnat/s-thread__ae653.adb: Likewise.
+ 
+ 2021-10-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_eval.ads (Machine_Number): New inline function.
+ 	* sem_eval.adb (Machine_Number): New function body implementing
+ 	the machine rounding operation specified by RM 4.9(38/2).
+ 	(Check_Non_Static_Context): Call Machine_Number and set the
+ 	Is_Machine_Number flag consistently on the resulting node.
+ 	* sem_attr.adb (Eval_Attribute) <Attribute_Machine>: Likewise.
+ 	* checks.adb (Apply_Float_Conversion_Check): Call Machine_Number.
+ 	(Round_Machine): Likewise.
+ 
+ 2021-10-20  Johannes Kliemann  <kliemann@adacore.com>
+ 
+ 	* vxworks7-cert-rtp-link.spec: Add the definition of
+ 	__wrs_rtp_base.
+ 
+ 2021-10-20  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_aggr.adb (Resolve_Delta_Record_Aggregate): Reject boxes in
+ 	record delta aggregates.
+ 
+ 2021-10-20  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* sem_ch6.adb (Check_Return_Construct_Accessibility): Modify
+ 	generation of accessibility checks to be more consolidated and
+ 	get triggered properly in required cases.
+ 	* sem_util.adb (Accessibility_Level): Add extra check within
+ 	condition to handle aliased formals properly in more cases.
+ 
+ 2021-10-20  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* exp_ch7.adb (Make_Final_Call): Detect expanded protected types
+ 	and use original protected type in order to calculate
+ 	appropriate finalization routine.
+ 
+ 2021-10-20  Johannes Kliemann  <kliemann@adacore.com>
+ 
+ 	* libgnat/a-nbnbin__ghost.ads: Add ghost package.
+ 
+ 2021-10-20  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_aggr.adb (Variant_Depth): Refine type from Integer to
+ 	Natural.
+ 
+ 2021-10-20  Bob Duff  <duff@adacore.com>
+ 
+ 	* atree.ads: Comment improvements. How is a "completely new
+ 	node" different from a "new node"? Document default values
+ 	corresponding to field types.
+ 	* exp_ch7.adb (Process_Tagged_Type_Declaration): Use
+ 	higher-level Scope_Depth instead of Scope_Depth_Value.  Remove
+ 	confusing comment: not clear what a "true" library level package
+ 	is.
+ 	* uintp.adb (Image_Out): Print No_Uint in a more readable way.
+ 	* gen_il-gen.adb, gen_il-gen-gen_entities.adb,
+ 	gen_il-gen-gen_nodes.adb, gen_il-types.ads: Tighten up the
+ 	subtypes of fields whose type is Uint, where possible; use
+ 	more-constrained subtypes such as Unat.
+ 	* einfo-utils.adb, einfo-utils.ads, exp_attr.adb,
+ 	exp_ch3.adb, exp_intr.adb, exp_unst.adb, exp_util.adb,
+ 	freeze.adb, repinfo.adb, sem.adb, sem_ch12.adb, sem_ch13.adb,
+ 	sem_ch3.adb, sem_ch8.adb, sem_util.adb, sprint.adb, treepr.adb:
+ 	No longer use Uint_0 to indicate "unknown" or "not yet known"
+ 	for various fields whose type is Uint. Use No_Uint for that,
+ 	except in a small number of legacy cases that cause test
+ 	failures. Protect many queries of such fields with calls to
+ 	Known_... functions. Improve comments.
+ 	* exp_aggr.adb: Likewise.
+ 	(Is_OK_Aggregate): Check whether Csiz is present.
+ 	(Aggr_Assignment_OK_For_Backend): Ensure we do not access an
+ 	uninitialized size.
+ 	* exp_strm.adb (Build_Elementary_Input_Call,
+ 	Build_Elementary_Write_Call): Check whether P_Size is present.
+ 	* cstand.adb: Leave Component_Size of Any_Composite unknown.
+ 	Similar for RM_Size of Standard_Exception_Type.  These should
+ 	not be used.
+ 	* einfo.ads: Comment improvements.
+ 	* exp_disp.ads: Minor.
+ 	* gen_il-internals.ads, gen_il-internals.adb: Minor.
+ 	* sinfo-utils.adb: Take advantage of full-coverage rules.
+ 	* types.h: Minor.
+ 
+ 2021-10-20  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch6.adb: Add with and use of Warnsw.
+ 	(Check_Conformance): Report a warning when subtypes or
+ 	designated subtypes of formal parameters or result subtypes
+ 	denote different declarations between the spec and body of the
+ 	(Subprogram_Subtypes_Have_Same_Declaration): New function nested
+ 	within Check_Conformance that determines whether two subtype
+ 	entities referenced in a subprogram come from the same
+ 	declaration. Returns True immediately if the subprogram is in a
+ 	generic instantiation, or the subprogram is marked Is_Internal
+ 	or is declared in an internal (GNAT library) unit, or GNAT_Mode
+ 	is enabled, otherwise compares the nonlimited views of the
+ 	entities (or their designated subtypes' nonlimited views in the
+ 	anonymous access cases).
+ 	(Nonlimited_View_Of_Subtype): New function nested within
+ 	function Subprogram_Subtypes_Have_Same_Declaration that returns
+ 	Non_Limited_View of a type or subtype that is an incomplete or
+ 	class-wide type that comes from a limited of a
+ 	package (From_Limited_With is True for the entity), or returns
+ 	Full_View when the nonlimited view is an incomplete type.
+ 	Otherwise returns the entity passed in.
+ 	* warnsw.ads (Warn_On_Pedantic_Checks): New warning flag.
+ 	(type Warning_Record): New component Warn_On_Pedantic_Checks.
+ 	* warnsw.adb (All_Warnings): Set Warn_On_Pedantic_Checks from
+ 	parameter Setting.
+ 	(Restore_Warnings): Restore the value of the
+ 	Warn_On_Pedantic_Checks flag.
+ 	(Save_Warnings): Save the value of the Warn_On_Pedantic_Checks
+ 	flag.
+ 	(Set_Underscore_Warning_Switch): Add settings of the
+ 	Warn_On_Pedantic flag according to the switch ("-gnatw_p" vs.
+ 	"-gnatw_P").
+ 	* doc/gnat_ugn/building_executable_programs_with_gnat.rst: Add
+ 	documentation of new switches -gnatw_p and -gnatw_P (warnings
+ 	for pedantic checks).
+ 	* gnat_ugn.texi: Regenerate.
+ 	* usage.adb: Add Warn_On_Pedantic_Checks.
+ 
+ 2021-10-20  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Guard
+ 	against equality of an uninitialized RM_Size field.
+ 
+ 2021-10-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch12.adb (Analyze_Subprogram_Instantiation): Also propagate an
+ 	interface name on an intrinsic subprogram.  Remove obsolete comment.
+ 	* libgnat/s-atopri.ads (Atomic_Load): New generic intrinsic function
+ 	(Atomic_Load_8): Rewrite into instantiation.
+ 	(Atomic_Load_16): Likewise.
+ 	(Atomic_Load_32): Likewise.
+ 	(Atomic_Load_64): Likewise.
+ 	(Sync_Compare_And_Swap): New generic intrinsic function.
+ 	(Sync_Compare_And_Swap_8): Rewrite into instantiation.
+ 	(Sync_Compare_And_Swap_16): Likewise.
+ 	(Sync_Compare_And_Swap_32): Likewise.
+ 	(Sync_Compare_And_Swap_64): Likewise.
+ 	(Lock_Free_Read): New generic inline function.
+ 	(Lock_Free_Read_8): Rewrite into instantiation.
+ 	(Lock_Free_Read_16): Likewise.
+ 	(Lock_Free_Read_32): Likewise.
+ 	(Lock_Free_Read_64): Likewise.
+ 	(Lock_Free_Try_Write): New generic inline function.
+ 	(Lock_Free_Try_Write_8): Rewrite into instantiation.
+ 	(Lock_Free_Try_Write_16): Likewise.
+ 	(Lock_Free_Try_Write_32): Likewise.
+ 	(Lock_Free_Try_Write_64): Likewise.
+ 	* libgnat/s-atopri.adb (Lock_Free_Read): New function body.
+ 	(Lock_Free_Read_8): Delete.
+ 	(Lock_Free_Read_16): Likewise.
+ 	(Lock_Free_Read_32): Likewise.
+ 	(Lock_Free_Read_64): Likewise.
+ 	(Lock_Free_Try_Write): New function body.
+ 	(Lock_Free_Try_Write_8): Delete.
+ 	(Lock_Free_Try_Write_16): Likewise.
+ 	(Lock_Free_Try_Write_32): Likewise.
+ 	(Lock_Free_Try_Write_64): Likewise.
+ 	* libgnat/s-aoinar.adb (Atomic_Fetch_And_Add): Use type-generic GCC
+ 	atomic builtin and tidy up implementation.
+ 	(Atomic_Fetch_And_Subtract): Likewise.
+ 	* libgnat/s-aomoar.adb (Atomic_Fetch_And_Add): Likewise.
+ 	(Atomic_Fetch_And_Subtract): Likewise.
+ 	* libgnat/s-atopex.adb (Atomic_Exchange): Likewise.
+ 	(Atomic_Compare_And_Exchange): Likewise.
+ 
+ 2021-10-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Subprogram_Type>:
+ 	Replace test on Convention_Intrinsic with Is_Intrinsic_Subprogram.
+ 	(gnat_to_gnu_param): Likewise.
+ 	(gnat_to_gnu_subprog_type): Likewise.
+ 	* gcc-interface/trans.c (elaborate_all_entities_for_package): Ditto.
+ 
+ 2021-10-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_eval.ads (Check_Non_Static_Context): Update documentation.
+ 	* sem_eval.adb (In_Any_Integer_Context): Change parameter type,
+ 	adjust accordingly and remove unreachable case.
+ 	(Eval_Integer_Literal): Consider the node kind throughout and
+ 	trim down verbose condition.
+ 
+ 2021-10-20  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* Makefile.rtl: Remove references to system-vxworks-ppc.ads
+ 	and system-vxworks-x86.ads.
+ 	* libgnat/system-vxworks-ppc.ads: Remove.
+ 	* libgnat/system-vxworks-ppc-ravenscar.ads: Likewise.
+ 	* libgnat/system-vxworks-x86.ads: Likewise.
+ 
+ 2021-10-20  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_ch4.adb (Analyze_QUantified_Expression): Issue warning on
+ 	conjunct/disjunct sub-expression of the full expression inside a
+ 	quantified expression, when it does not reference the quantified
+ 	variable.
+ 
+ 2021-10-20  Marc Poulhiès  <poulhies@adacore.com>
+ 
+ 	* checks.adb (Insert_Valid_Check): in case of checked type
+ 	conversion, update Typ to match Exp's type and add call to
+ 	Analyze_And_Resolve.
+ 
+ 2021-10-20  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	PR ada/100486
+ 	* sem_prag.adb (Check_Valid_Library_Unit_Pragma): Do not raise an
+ 	exception as part of the bootstrap.
+ 
+ 2021-10-15  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gcc-interface/misc.c (gnat_post_options): Do not warn
+ 	about DBX_DEBUG use here.
+ 
+ 2021-10-14  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* par-ch10.adb (P_Compilation_Unit): Reenable ada83 library
+ 	unit renaming test and error.
+ 
+ 2021-10-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/gigi.h (resolve_atomic_size): Declare.
+ 	(list_third): New inline function.
+ 	* gcc-interface/decl.c (type_for_atomic_builtin_p): New function.
+ 	(resolve_atomic_builtin): Likewise.
+ 	(gnat_to_gnu_subprog_type): Perform type resolution for most of
+ 	type-generic GCC atomic builtins and give an error for the rest.
+ 	* gcc-interface/utils2.c (resolve_atomic_size): Make public.
+ 
+ 2021-10-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.c (gnat_to_gnu) <N_Pop_Constraint_Error_Label>:
+ 	Given the warning only if No_Exception_Propagation is active.
+ 	<N_Pop_Storage_Error_Label>: Likewise.
+ 	<N_Pop_Program_Error_Label>: Likewise.
+ 
+ 2021-10-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (promote_object_alignment): Add GNU_SIZE
+ 	parameter and use it for the size of the object if not null.
+ 	(gnat_to_gnu_entity) <E_Variable>: Perform the automatic alignment
+ 	promotion for objects whose nominal subtype is of variable size.
+ 	(gnat_to_gnu_field): Adjust call to promote_object_alignment.
+ 
+ 2021-10-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_param): Strip padding types
+ 	only if the size does not change in the process.  Rename local
+ 	variable and add bypass for initialization procedures.
+ 
+ 2021-10-11  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* libgnat/s-thread.ads: Fix comments.  Remove unused package
+ 	imports.
+ 	(Thread_Body_Exception_Exit): Remove Exception_Occurrence
+ 	parameter.
+ 	(ATSD): Declare type locally.
+ 	* libgnat/s-thread__ae653.adb: Fix comments.  Remove unused
+ 	package imports.  Remove package references to Stack_Limit
+ 	checking.
+ 	(Install_Handler): Remove.
+ 	(Set_Sec_Stack): Likewise.
+ 	(Thread_Body_Enter): Remove calls to Install_Handler and
+ 	Stack_Limit checking.
+ 	(Thread_Body_Exception_Exit): Remove Exception_Occurrence
+ 	parameter.
+ 	(Init_RTS): Call local Get_Sec_Stack.  Remove call to
+ 	Install_Handler.  Remove references to accessors for
+ 	Get_Sec_Stack and Set_Sec_Stack.  Remove OS check.
+ 	(Set_Sec_Stack): Remove.
+ 
+ 2021-10-11  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch3.adb (Make_Predefined_Primitive_Specs,
+ 	Predefined_Primitive_Bodies): Remove guard with restriction
+ 	No_Dispatching_Calls.
+ 
+ 2021-10-11  Steve Baird  <baird@adacore.com>
+ 
+ 	* sem_attr.adb (Analyze_Attribute_Old_Result): Permit an
+ 	attribute reference inside a compiler-generated _Postconditions
+ 	procedure. In this case, Subp_Decl is assigned the declaration
+ 	of the enclosing subprogram.
+ 	* exp_util.adb (Insert_Actions): When climbing up the tree
+ 	looking for an insertion point, do not climb past an
+ 	N_Iterated_Component/Element_Association, since this could
+ 	result in inserting a reference to a loop parameter at a
+ 	location outside of the scope of that loop parameter. On the
+ 	other hand, be careful to preserve existing behavior in the case
+ 	of an N_Component_Association node.
+ 
+ 2021-10-11  Steve Baird  <baird@adacore.com>
+ 
+ 	* exp_ch6.adb (Can_Fold_Predicate_Call): Do not attempt folding
+ 	if there is more than one predicate involved. Recall that
+ 	predicate aspect specification are additive, not overriding, and
+ 	that there are three different predicate
+ 	aspects (Dynamic_Predicate, Static_Predicate, and the
+ 	GNAT-defined Predicate aspect). These various ways of
+ 	introducing multiple predicates are all checked for.  A new
+ 	nested function, Augments_Other_Dynamic_Predicate, is
+ 	introduced.
+ 	* sem_ch4.adb
+ 	(Analyze_Indexed_Component_Form.Process_Function_Call): When
+ 	determining whether a name like "X (Some_Discrete_Type)" might
+ 	be interpreted as a slice, the answer should be "no" if the
+ 	type/subtype name denotes the current instance of type/subtype.
+ 
+ 2021-10-11  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* libgnarl/s-osinte__rtems.ads: Change sigset_t to an unsigned
+ 	long.
+ 
+ 2021-10-11  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* libgnat/s-parame__rtems.adb: use
+ 	_POSIX_Threads_Minimum_stack_size instead of
+ 	ada_pthread_minimum_stack_size.
+ 
+ 2021-10-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* fe.h (No_Exception_Propagation_Active): Declare.
+ 	* restrict.ads (No_Exception_Propagation_Active): Add WARNING line.
+ 
+ 2021-10-11  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch13.adb (Validate_Unchecked_Conversion): Simplify code
+ 	for detecting conversions with Ada.Calendar.Time type and extend
+ 	it to similar types in the Ada.Real_Time package.
+ 
+ 2021-10-11  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch10.adb, sem_prag.adb, sem_util.adb: Use
+ 	N_Generic_Declaration in membership tests.
+ 
+ 2021-10-11  Etienne Servais  <servais@adacore.com>
+ 
+ 	* ali.adb (Get_Name): Ignore_Spaces is always False.
+ 	* bindo-graphs.adb (Set_Is_Existing_Source_Target_Relation): Val
+ 	is always True.
+ 	* cstand.adb (New_Standard_Entity): New_Node_Kind is always
+ 	N_Defininig_Identifier.
+ 	* exp_ch3.adb (Predef_Stream_Attr_Spec): For_Body is always
+ 	False.
+ 	* exp_dist.adb (Add_Parameter_To_NVList): RACW_Ctrl is always
+ 	False.
+ 	* gnatls.adb (Add_Directories): Prepend is always False.
+ 	* sem_ch10.adb, sem_ch10.ads (Load_Needed_Body): Do_Analyze is
+ 	always True.
+ 	* sem_ch3.adb, sem_ch3.ads (Process_Range_Expr_In_Decl):
+ 	R_Check_Off is always False.
+ 	* sem_elab.adb: (Info_Variable_Reference): Info_Msg is always
+ 	False, In_SPARK is always True.
+ 	(Set_Is_Traversed_Body, Set_Is_Saved_Construct,
+ 	Set_Is_Saved_Relation): Val is always True.
+ 	* treepr.adb (Visit_Descendant): No_Indent is always False.
+ 	(Print_Node): Fmt does not need such a big scope.
+ 
+ 2021-10-11  Etienne Servais  <servais@adacore.com>
+ 
+ 	* sem_ch4.adb (Analyze_Membership_Op): Finds interpretation for
+ 	the case of a membership test with a singleton value in case of
+ 	overloading.
+ 
+ 2021-10-11  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* Makefile.rtl (VxWorks): Rename s-inmaop__vxworks.adb to
+ 	s-inmaop__hwint.adb.
+ 	(RTEMS): Use s-inmaop__hwint.adb, s-intman__rtems.adb/s,
+ 	s-taprop__rtems.adb.
+ 	* libgnarl/a-intnam__rtems.ads: Remove signals definitions and
+ 	replace with Hardware_Interrupts.
+ 	* libgnarl/s-inmaop__vxworks.adb: Rename as...
+ 	* libgnarl/s-inmaop__hwint.adb: ... this.
+ 	* libgnarl/s-interr__hwint.adb: Remove unnecessary comments.
+ 	* libgnarl/s-intman__rtems.ads, libgnarl/s-intman__rtems.adb:
+ 	New files.
+ 	* libgnarl/s-osinte__rtems.adb: Add RTEMS API bindings.
+ 	(Binary_Semaphore_Create, Binary_Semaphore_Delete,
+ 	Binary_Semaphore_Obtain, Binary_Semaphore_Release,
+ 	Binary_Semaphore_Flush, Interrupt_Connect,
+ 	Interrupt_Number_To_Vector): New functions.
+ 	* libgnarl/s-osinte__rtems.ads (Num_HW_Interrupts, Signal):
+ 	Removed.
+ 	(NSIG, Interrupt_Range): New.
+ 	(Binary_Semaphore_Create, Binary_Semaphore_Delete,
+ 	Binary_Semaphore_Obtain, Binary_Semaphore_Release,
+ 	Binary_Semaphore_Flush, Interrupt_Connect,
+ 	Interrupt_Number_To_Vector): Remove Import pragma.
+ 	* libgnarl/s-taprop__rtems.adb: New file.
+ 
+ 2021-10-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_fixd.adb (Get_Size_For_Value): New function returning a size
+ 	suitable for a non-negative integer value.
+ 	(Get_Type_For_Size): New function returning a standard type suitable
+ 	for a size.
+ 	(Build_Divide): Call both functions to compute the result type, but
+ 	make sure to pass a non-negative value to the first.
+ 	(Build_Multiply): Likewise.
+ 	(Do_Multiply_Fixed_Universal): Minor consistency tweak.
+ 	(Integer_Literal): Call both functions to compute the type.
+ 
+ 2021-10-11  Etienne Servais  <servais@adacore.com>
+ 
+ 	* sem_ch4.adb (Analyze_Membership_Op): Reorder subprogram spec
+ 	and bodies in alphabetical order.
+ 
+ 2021-10-11  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_util.adb (Build_Class_Wide_Expression): Replace entities
+ 	of both simple and extended names.
+ 
+ 2021-10-11  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* libgnarl/s-intman__android.adb, libgnarl/s-intman__lynxos.adb,
+ 	libgnarl/s-intman__posix.adb, libgnarl/s-intman__qnx.adb,
+ 	libgnarl/s-intman__solaris.adb, libgnarl/s-intman__susv3.adb,
+ 	libgnarl/s-taprob.adb, libgnarl/s-taprop__hpux-dce.adb,
+ 	libgnarl/s-taprop__linux.adb, libgnarl/s-taprop__mingw.adb,
+ 	libgnarl/s-taprop__posix.adb, libgnarl/s-taprop__qnx.adb,
+ 	libgnarl/s-taprop__solaris.adb, libgnarl/s-taprop__vxworks.adb,
+ 	libgnarl/s-taskin.adb, libgnarl/s-tasque.adb,
+ 	libgnarl/s-tpoben.adb, libgnat/a-calend.adb,
+ 	libgnat/a-excach.adb, libgnat/a-except.adb, libgnat/a-tags.adb,
+ 	libgnat/a-textio.adb, libgnat/a-witeio.adb,
+ 	libgnat/a-ztexio.adb, libgnat/g-binenv.adb,
+ 	libgnat/s-parame.adb, libgnat/s-parame__vxworks.adb,
+ 	libgnat/s-stratt.adb, libgnat/s-trasym__dwarf.adb: Mark imported
+ 	binder globals as constant.
+ 
+ 2021-10-11  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_aggr.adb (Initialize_Record_Component): Add assertion
+ 	about one of the parameters, so that illegal attempts to
+ 	initialize record components with Empty node are detected early
+ 	on.
+ 	(Build_Record_Aggr_Code): Handle boxes in aggregate component
+ 	associations just the components with no initialization in
+ 	Build_Record_Init_Proc.
+ 	* sem_aggr.adb (Resolve_Record_Aggregate): For components that
+ 	require simple initialization carry boxes from resolution to
+ 	expansion.
+ 	* sem_util.adb (Needs_Simple_Initialization): Remove redundant
+ 	paren.
+ 
+ 2021-10-11  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch3.adb (Build_Init_Statements): Simplify detection of
+ 	concurrent record types.
+ 
+ 2021-10-11  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_aggr.adb (Is_Delayed_Aggregate): Simplify.
+ 
+ 2021-10-11  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_aggr.adb (Has_Default_Init_Comps): Simplify.
+ 
+ 2021-10-11  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_aggr.adb (Component_OK_For_Backend): Remove redundant
+ 	guard.
+ 
+ 2021-10-11  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* Makefile.rtl (RTEMS): Add s-stchop.o to
+ 	EXTRA_GNATRTL_NONTASKING_OBJS, remove s-stchop__rtems.adb.
+ 	* libgnat/s-stchop__rtems.adb: Removed.
+ 
+ 2021-10-11  Marc Poulhiès  <poulhies@adacore.com>
+ 
+ 	* expander.adb (Expand): Skip clearing of Analyzed flag if
+ 	already set for N_Real_Literal.
+ 
+ 2021-10-11  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Compile_Time_Constraint_Error): Simplify getting
+ 	the type of the first formal parameter.
+ 
+ 2021-10-11  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_util.adb (Inside_Init_Proc): Simplify.
+ 	* sem_aggr.adb (Resolve_Record_Aggregate): Fix style.
+ 	* sem_util.adb (Compile_Time_Constraint_Error): Guard against
+ 	calling Corresponding_Concurrent_Type with an array type entity.
+ 
+ 2021-10-11  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* libgnat/s-parame__ae653.ads (time_t_bits): Change to
+ 	Long_Long_Integer'Size.  Add some comments to explain.
+ 
+ 2021-10-08  Martin Liska  <mliska@suse.cz>
+ 
+ 	* gcc-interface/misc.c (gnat_post_options): Use new macro
+ 	OPTION_SET_P.
+ 	(gnat_init_gcc_eh): Likewise.
+ 	(gnat_init_gcc_fp): Likewise.
+ 
+ 2021-10-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.c (gnat_to_gnu): Do not wrap boolean values
+ 	referenced in pragmas.
+ 
+ 2021-10-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.c (Subprogram_Body_to_gnu): Do not set the
+ 	DECL_DISREGARD_INLINE_LIMITS flag if -gnatd.8 is specified.
+ 
+ 2021-10-05  Bob Duff  <duff@adacore.com>
+ 
+ 	* gcc-interface/trans.c (set_end_locus_from_node): Check that
+ 	Handled_Statement_Sequence is not Empty before calling
+ 	End_Label, because the Empty node has no End_Label, and
+ 	depending on the exact node layout chosen by gen_il, calling
+ 	End_Label might crash, or might work OK by accident.
+ 
+ 2021-10-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/cuintp.c: Adjust placement of include directive.
+ 	* gcc-interface/targtyps.c: Likewise.
+ 
+ 2021-10-05  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* doc/gnat_rm.rst: Add...
+ 	* doc/gnat_rm/security_hardening_features.rst: New.
+ 	* doc/gnat_rm/about_this_guide.rst: Link to new chapter.
+ 	* gnat_rm.texi: Regenerate.
+ 	* gcc-interface/utils.c (handle_strub_attribute): New.
+ 	(gnat_internal_attribute_table): Add strub.
+ 	* libgnat/a-except.adb: Make Rcheck_CE_* strub-callable.
+ 	* libgnat/a-except.ads (Raise_Exception): Likewise.
+ 	(Raise_Exception_Always): Likewise.
+ 	* libgnat/s-arit128.ads (Multiply_With_Ovflo_Check128):
+ 	Likewise.
+ 	* libgnat/s-arit64.ads (Multiply_With_Ovflo_Check64):
+ 	Likewise.
+ 	* libgnat/s-secsta.ads (SS_Allocate, SS_Mark, SS_Release):
+ 	Likewise.
+ 
+ 2021-10-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch9.adb (Install_Private_Data_Declarations): Copy the Sloc of
+ 	components for the local renamings as well as the Comes_From_Source
+ 	flag, and also set Warnings_Off on them.  Use Nam local variable.
+ 
+ 2021-10-05  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnarl/a-tasini.ads (Set_Initialization_Handler): Update
+ 	comments.
+ 
+ 2021-10-05  Corentin Gay  <gay@adacore.com>
+ 
+ 	* init.c (QNX): Add #include errno.h.
+ 
+ 2021-10-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_attr.adb (Expand_Fpt_Attribute): Likewise.
+ 	* snames.ads-tmpl (Name_Unaligned_Valid): Delete.
+ 
+ 2021-10-05  Etienne Servais  <servais@adacore.com>
+ 
+ 	* sem_prag.adb (Analyze_Pragma): Forbid use of
+ 	Compile_Time_(Error|Warning) as configuration pragma.
+ 	* doc/gnat_ugn/the_gnat_compilation_model.rst:
+ 	Compile_Time_(Error|Warning) and Compiler_Unit(_Warning) are not
+ 	configuration pragmas and shall not be listed as such.  The
+ 	following pragmas are either obsolete or undocumented:
+ 	No_Run_Time, Propagate_Exceptions, Rational, Ravenscar,
+ 	Restricted_Run_Time, Short_Descriptors, Universal_Data.  Fix
+ 	some typos (notably on Restriction_Warnings).
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst: Move
+ 	Rename_Pragma documentation to alphabetical order.
+ 	* gnat_rm.texi, gnat_ugn.texi: Regenerate.
+ 
+ 2021-10-05  Corentin Gay  <gay@adacore.com>
+ 
+ 	* adaint.c (QNX): Add #include for sys/time.h.
+ 
+ 2021-10-05  Pascal Obry  <obry@adacore.com>
+ 
+ 	* libgnat/g-forstr.adb (Next_Format): When there is no more
+ 	format specifier found issue a proper error message instead of
+ 	raising a contraint error.
+ 
+ 2021-10-05  Pascal Obry  <obry@adacore.com>
+ 
+ 	* libgnat/g-forstr.adb (Get_Formatted): Fix computation of the
+ 	number of zero to use in the formatted string. This was a wrong
+ 	copy/paste.
+ 
+ 2021-10-05  Pascal Obry  <obry@adacore.com>
+ 
+ 	* libgnat/g-forstr.adb (Get_Formatted): Minor code clean-up.
+ 
+ 2021-10-05  Etienne Servais  <servais@adacore.com>
+ 
+ 	* libgnat/a-zchhan.ads, libgnat/a-zchhan.adb
+ 	(Character_Set_Version, Is_Basic, To_Basic): New.
+ 	* libgnat/a-zchuni.ads, libgnat/a-zchuni.adb (Is_Basic,
+ 	To_Basic): New.
+ 
+ 2021-10-05  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_aggr.adb (Resolve_Array_Aggregate): Improve error message.
+ 
+ 2021-10-05  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* aspects.ads (type Aspect_Id): Add
+ 	Aspect_Designated_Storage_Model and Aspect_Storage_Model_Type.
+ 	(Aspect_Argument): Add associations for the above new aspects.
+ 	(Is_Representation_Aspect): Likewise.
+ 	(Aspect_Names, Aspect_Delay): Likewise.
+ 	* exp_ch4.adb (Expand_N_Allocator): Call Find_Storage_Op rather
+ 	than Find_Prim_Op.
+ 	* exp_intr.adb (Expand_Unc_Deallocation): Likewise.
+ 	* exp_util.ads (Find_Storage_Op): New function that locates
+ 	either a primitive operation of a storage pool or an operation
+ 	of a storage-model type specified in its Storage_Model_Type
+ 	aspect.
+ 	* exp_util.adb (Find_Storage_Op): New function that calls either
+ 	Find_Prim_Op or Get_Storage_Model_Type_Entity to locate a
+ 	storage-related operation that is associated with a type.
+ 	* sem_ch13.adb (Analyze_Aspects_At_Freeze_Point): Analyzes,
+ 	resolves, and validates the arguments of aspect
+ 	Designated_Storage_Model_Type.
+ 	(Analyze_Aspect_Specifications): Sets delay-related flags on
+ 	storage-model aspects when Delay_Required. Checks that aspect
+ 	Designated_Storage_Model is only specified for an access type
+ 	and that aspect Storage_Model_Type is only specified on an
+ 	immutably limited type. Also records such aspects for their
+ 	associated types.
+ 	(Check_Aspect_At_Freeze_Point): Resolve each of the argument
+ 	associations given for a Storage_Model_Type aspect.
+ 	(Resolve_Storage_Model_Type_Argument): New procedure that
+ 	resolves an argument given in the association for a given entity
+ 	name associated with a type with aspect Storage_Model_Type,
+ 	ensuring that it has the proper kind or profile.
+ 	(Validate_Storage_Model_Type_Aspect): New procedure that checks
+ 	the legality and completeness of the entity associations given
+ 	in a Storage_Model_Type aspect.
+ 	* sem_util.ads (package Storage_Model_Support): New nested
+ 	package that encapsulates a set of convenient utility functions
+ 	for retrieving entities, etc. associated with
+ 	storage-model-related types and objects.
+ 	(Get_Storage_Model_Type_Entity): New function to return a
+ 	specified entity associated with a type that has aspect
+ 	Storage_Model_Type.
+ 	(Has_Designated_Storage_Model_Aspect): New function that returns
+ 	whether a type has aspect Designated_Storage_Model.
+ 	(Has_Storage_Model_Type_Aspect): New function that returns
+ 	whether a type has aspect Storage_Model_Type.
+ 	(Storage_Model_Object): New function that returns the object
+ 	Entity_Id associated with a type's Designated_Storage_Model
+ 	aspect.
+ 	(Storage_Model_Type): New function that returns the type
+ 	associated with a storage-model object (when the object's type
+ 	specifies Storage_Model_Type).
+ 	(Storage_Model_Address_Type): New function that returns the
+ 	Address_Type associated with a type that has aspect
+ 	Storage_Model_Type.
+ 	(Storage_Model_Null_Address): New function that returns the
+ 	Null_Address constant associated with a type that has aspect
+ 	Storage_Model_Type.
+ 	(Storage_Model_Allocate): New function that returns the Allocate
+ 	procedure associated with a type that has aspect
+ 	Storage_Model_Type.
+ 	(Storage_Model_Deallocate): New function that returns the
+ 	Deallocate procedure associated with a type that has aspect
+ 	Storage_Model_Type.
+ 	(Storage_Model_Copy_From): New function that returns the
+ 	Copy_From procedure associated with a type that has aspect
+ 	Storage_Model_Type.
+ 	(Storage_Model_Copy_To): New function that returns the Copy_To
+ 	procedure associated with a type that has aspect
+ 	Storage_Model_Type.
+ 	(Storage_Model_Storage_Size): New function that returns the
+ 	Storage_Size function associated with a type that has aspect
+ 	Storage_Model_Type.
+ 	* sem_util.adb (package Storage_Model_Support): Body of new
+ 	nested package that contains the implementations the utility
+ 	functions declared in the spec of this package.
+ 	* snames.ads-tmpl: Add new names Name_Designated_Storage_Pool,
+ 	Name_Storage_Model, Name_Storage_Model_Type, Name_Address_Type,
+ 	Name_Copy_From, Name_Copy_To, and Name_Null_Address for the new
+ 	aspects and associated aspect arguments.
+ 
+ 2021-10-05  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* debug.adb: Add documentation for -gnatd_t.
+ 
+ 2021-10-05  Corentin Gay  <gay@adacore.com>
+ 
+ 	* sysdep.c (__gnat_is_file_not_found_error): Add else if case.
+ 
+ 2021-10-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_util.adb (Build_Class_Wide_Expression): Replace entities
+ 	of both identifiers and operator symbols.
+ 
+ 2021-10-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Derive_Subprogram): Copy ghost status from parent
+ 	to derived subprogram.
+ 
+ 2021-10-05  Joffrey Huguet  <huguet@adacore.com>
+ 
+ 	* libgnat/a-strunb.ads, libgnat/a-strunb__shared.ads: Add
+ 	Default_Initial_Condition to Unbounded_String.
+ 
+ 2021-10-05  Claire Dross  <dross@adacore.com>
+ 
+ 	* libgnat/a-cfdlli.ads: Use pragma Assertion_Policy to disable
+ 	contract cases at execution.
+ 	* libgnat/a-cfinve.ads: Idem.
+ 	* libgnat/a-cofove.ads: Idem.
+ 	* libgnat/a-cfhase.ads: Idem.
+ 	* libgnat/a-cfhama.ads: Idem.
+ 	* libgnat/a-cforse.ads: Idem.
+ 	* libgnat/a-cforma.ads: Idem.
+ 
+ 2021-10-05  Bob Duff  <duff@adacore.com>
+ 
+ 	* par-ch4.adb (P_Iterated_Component_Association): Parse these
+ 	features the same way in all language versions.  Move the call
+ 	to Error_Msg_Ada_2022_Feature into semantic analysis.
+ 	* sem_aggr.adb (Resolve_Iterated_Component_Association,
+ 	Resolve_Iterated_Association): Move the call to
+ 	Error_Msg_Ada_2022_Feature here from par-ch4.adb.
+ 
+ 2021-10-05  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_res.adb (Resolve): Recognize specially that case.
+ 
+ 2021-10-05  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/a-strmap.adb: Add ghost code for proof.
+ 	(To_Range): This is the most involved proof, as it requires
+ 	creating the result of the call to To_Domain as a ghost
+ 	variable, and show the unicity of this result in order to prove
+ 	the postcondition.
+ 	* libgnat/a-strmap.ads: (SPARK_Proof_Sorted_Character_Sequence):
+ 	New ghost function.
+ 	(To_Domain): Add postcondition regarding sorting of result.
+ 	(To_Range): Fix postcondition that should compare Length instead
+ 	of Last for the results of To_Domain and To_Range, as the value
+ 	of Last for an empty result is not specified in the Ada RM.
+ 
+ 2021-10-05  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/a-chahan.adb: Add loop invariants as needed to prove
+ 	subprograms.  Also use extended return statements where
+ 	appropriate and not done already.  Mark data with
+ 	Relaxed_Initialization where needed for initialization by parts.
+ 	Convert regular functions to expression functions where needed
+ 	for proof.
+ 	* libgnat/a-chahan.ads: Add postconditions.
+ 	* libgnat/a-strmap.ads (Model): New ghost function to create a
+ 	publicly visible model of the private data Character_Mapping,
+ 	needed in order to prove subprograms in Ada.Characters.Handling.
+ 
+ 2021-10-04  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst:
+ 	Add new entry for No_Dynamic_Accessibility_Checks documenting
+ 	behavior.
+ 	* gnat_rm.texi: Regenerate.
+ 	* exp_ch4.adb (Expand_N_In): Perform special expansion for
+ 	membership tests when No_Dynamic_Accessibility_Checks is active.
+ 	* sem_attr.adb (Resolve_Attribute): Skip static accessibility
+ 	check on actuals for anonymous access type formal parameters,
+ 	and add constants for readability.
+ 	* sem_util.adb (Function_Call_Or_Allocator_Level): Use the
+ 	innermost master for determining the level for function calls
+ 	within the alternative accessibility model.
+ 	(Type_Access_Level): Properly get the level for anonymous access
+ 	function result types.
+ 
+ 2021-10-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* doc/gnat_ugn/building_executable_programs_with_gnat.rst
+ 	(gnateA): This switch no longer looks at the formal parameter
+ 	type being composite (as originally mandated by SPARK), but in
+ 	the parameter passing mechanism being not specified (as
+ 	currently mandated by Ada).
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2021-10-04  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_ch6.adb (Analyze_Operator_Symbol): Recognize strings as
+ 	operator names when they are the value of one of the Ada2022
+ 	aspects for User_Defined_Literals.
+ 	* sem_ch13.adb (Analyze_One_Aspect): Handle an aspect value
+ 	given by an Operator_Name.
+ 	(Validate_Literal_Aspect): Call Analyze_Operator_Symbol when
+ 	needed.
+ 
+ 2021-10-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* gen_il-gen.adb (Put_Make_Spec): Don't emit the LF character in
+ 	the middle of a string, because the Put routine won't indent it
+ 	properly.
+ 
+ 2021-10-04  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* gnat_cuda.adb (Remove_CUDA_Device_Entities): New function.
+ 	(Expand_CUDA_Package): Call Remove_CUDA_Device_Entities.
+ 	* gnat_cuda.ads (Expand_CUDA_Package): Expand documentation.
+ 	* sem_prag.adb (Analyze_Pragma): Remove warning about
+ 	CUDA_Device not being implemented.
+ 
+ 2021-10-04  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch7.adb (Analyze_Package_Specification): For types marked
+ 	as Must_Have_Preelab_Init, we now check for the presence of a
+ 	Preelaborable_Initialization aspect on the type, and pass the
+ 	aspect's expression (if any) on the call to
+ 	Has_Preelaborable_Initialization (or pass Empty if the type has
+ 	no such aspect or the aspect has no associated expression).
+ 	* sem_util.ads (Has_Preelaborable_Initialization): Change
+ 	Boolean formal parameter Formal_Types_Have_Preelab_Init to
+ 	instead be a formal of type Node_Id (named Preelab_Init_Expr),
+ 	to allow passing an expression that may be a conjunction of
+ 	Preelaborable_Initialization aspects. Revise spec comment
+ 	accordingly (and remove ??? comment).
+ 	* sem_util.adb (Type_Named_In_Preelab_Init_Expression): New
+ 	nested function with a result indicating whether a given type is
+ 	named as the prefix of a Preelaborable_Initialization attribute
+ 	in the expression of a corresponding P_I aspect.
+ 	(Has_Preelaborable_Initialization): For generic formal derived
+ 	and private types, test whether the type is named in the
+ 	expression Preelab_Init_Expr (by calling
+ 	Type_Named_In_Preelab_Init_Expression), and if so, treat the
+ 	formal type as having preelaborable initialization (returning
+ 	True).
+ 	* libgnat/a-cobove.ads (Vector): Replace pragma
+ 	Preelaborable_Initialization with the aspect, specifying its
+ 	value as Element_Type'Preelaborable_Initialization.
+ 	(Cursor): Replace pragma P_I with the aspect (defaulting to
+ 	True).
+ 	* libgnat/a-cbdlli.ads (List): Replace pragma
+ 	Preelaborable_Initialization with the aspect, specifying its
+ 	value as Element_Type'Preelaborable_Initialization.
+ 	(Cursor): Replace pragma P_I with the aspect (defaulting to
+ 	True).
+ 	* libgnat/a-cbhama.ads (Map): Replace pragma
+ 	Preelaborable_Initialization with the aspect, specifying its
+ 	value as (Element_Type'Preelaborable_Initialization and
+ 	Key_Type'Preelaborable_Initialization).
+ 	(Cursor): Replace pragma P_I with the aspect (defaulting to
+ 	True).
+ 	* libgnat/a-cborma.ads (Map): Replace pragma
+ 	Preelaborable_Initialization with the aspect, specifying its
+ 	value as (Element_Type'Preelaborable_Initialization and
+ 	Key_Type'Preelaborable_Initialization).
+ 	(Cursor): Replace pragma P_I with the aspect (defaulting to
+ 	True).
+ 	* libgnat/a-cbhase.ads (Set): Replace pragma
+ 	Preelaborable_Initialization with the aspect, specifying its
+ 	value as Element_Type'Preelaborable_Initialization.
+ 	(Cursor): Replace pragma P_I with the aspect (defaulting to
+ 	True).
+ 	* libgnat/a-cborse.ads (Set): Replace pragma
+ 	Preelaborable_Initialization with the aspect, specifying its
+ 	value as Element_Type'Preelaborable_Initialization.
+ 	(Cursor): Replace pragma P_I with the aspect (defaulting to
+ 	True).
+ 	* libgnat/a-cbmutr.ads (Tree): Replace pragma
+ 	Preelaborable_Initialization with the aspect, specifying its
+ 	value as Element_Type'Preelaborable_Initialization.
+ 	(Cursor): Replace pragma P_I with the aspect (defaulting to
+ 	True).
+ 	* libgnat/a-coboho.ads (Holder): Replace pragma
+ 	Preelaborable_Initialization with the aspect, specifying its
+ 	value as Element_Type'Preelaborable_Initialization.
+ 	(Cursor): Replace pragma P_I with the aspect (defaulting to
+ 	True).
+ 
+ 2021-10-04  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/a-textio.adb: Mark body out of SPARK.
+ 	* libgnat/a-textio.ads: Mark spec in SPARK and private part out
+ 	of SPARK.
+ 	* sem.adb (Semantics.Do_Analyze): Similar to ghost code
+ 	attributes, save and restore value of
+ 	Ignore_SPARK_Mode_Pragmas_In_Instance.
+ 
+ 2021-10-04  Bob Duff  <duff@adacore.com>
+ 
+ 	* libgnat/s-regpat.ads: Change Data_First to Data'First. Change
+ 	"still" to "always".  Similar changes for Data_Last.
+ 
+ 2021-10-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sprint.adb (Sprint_Node_Actual): Refactor code for generic
+ 	package and subprogram declarations.
+ 
+ 2021-10-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.adb (Resolve_Indexed_Component, Resolve_Slice): Rename
+ 	the local constant Name to Pref; remove repeated calls to
+ 	Prefix.
+ 
+ 2021-10-04  Matthieu Eyraud  <eyraud@adacore.com>
+ 
+ 	* scos.ads: Extend the documentation.
+ 	* par_sco.adb (Process_Decisions): Emit specific SCOs for
+ 	quantified expressions.
+ 
+ 2021-10-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* checks.adb (Selected_Range_Checks): Fix style.
+ 	* exp_ch4.adb (Expand_N_Slice): Fix style and comment.
+ 	* sem_res.adb (Resolve_Indexed_Component): Fix style.
+ 
+ 2021-10-04  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/a-strbou.ads: Add comments.
+ 
+ 2021-10-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_attr.adb (Eval_Attribute): Evaluation of attribute
+ 	Leading_Part with illegal second parameter is now similar to
+ 	evaluation of Remainder with its second parameter being zero.
+ 
+ 2021-10-04  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_res.adb (Resolve_Declare_Expression): Use tree traversals
+ 	to perform name capture of local entities in the expression of
+ 	the construct.
+ 	* exp_util.adb (Possible_Side_Effects_In_SPARK): Do not apply to
+ 	the prefix of an attribute reference Reduce when that prefix is
+ 	an aggregate, because it will be expanded into a loop, and has
+ 	no identifiable type.
+ 
+ 2021-10-04  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* sem_ch8.adb (Build_Class_Wide_Wrapper): Fix handling of
+ 	class-wide subtypes; required to handle chains of
+ 	instantiations. Adding also code to identify these wrappers and
+ 	properly resolve instantiations where the wrapper and a tagged
+ 	type primitive are visible.
+ 	* einfo.ads (Is_Class_Wide_Wrapper): Adding documentation.
+ 	* gen_il-fields.ads (Opt_Field_Enum): Adding
+ 	Is_Class_Wide_Wrapper.
+ 	* gen_il-gen-gen_entities.adb (Root_Entity_Type): Adding
+ 	semantic flag Is_Class_Wide_Wrapper.
+ 
+ 2021-10-04  Bob Duff  <duff@adacore.com>
+ 
+ 	* einfo.ads (Declaration_Node): Document that Declaration_Node
+ 	for Itypes.
+ 	* einfo-utils.adb (Declaration_Node): Make it return Empty for
+ 	Itypes, or a proper type or subtype declaration.
+ 	* gen_il-gen.adb: Minor comment improvement.
+ 
+ 2021-10-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.adb (Resolve_Slice): Fix application of range checks
+ 	to slice range given as a subtype name.
+ 
+ 2021-10-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.adb (Resolve_Slice): Handle range given as a subtype
+ 	indication.
+ 
+ 2021-10-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.adb (Resolve_Slice): Add custom handling of attribute
+ 	Image and similar in CodePeer mode. This complements the
+ 	existing custom handling of these attributes in
+ 	Expand_N_Attribute_Reference.
+ 
+ 2021-10-04  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* sem_util.adb (Is_Variable): Add check for implicitly
+ 	dereferenced access types
+ 	(Is_Dependent_Component_Of_Mutable_Object): Set Prefix_Type when
+ 	not specified.
+ 
+ 2021-10-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* doc/gnat_ugn/the_gnat_compilation_model.rst (Binding generation):
+ 	Document specific behavior for /include/-ending paths and update.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2021-10-04  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	PR ada/102073
+ 	* socket.c (__gnat_gethostbyaddr, __gnat_inet_pton): Add missing
+ 	return statements.
+ 
+ 2021-10-04  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* sem_util.adb (Function_Or_Allocator_Level): Properly handle
+ 	direct function calls in the default alternative accessibility
+ 	checking mode.
+ 
+ 2021-10-04  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* sem_util.adb (Is_Library_Level_Entity): Return False for
+ 	entities defined in E_Loop scopes. This change is not required
+ 	by the frontend; it is required by tools that depend on the
+ 	frontend sources.
+ 	* einfo-utils.adb (Is_Dynamic_Scope): Code cleanup.
+ 
+ 2021-10-04  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* sem_util.adb (Accessibility_Level): Add a case to handle
+ 	renamed subprograms in addition to renamed objects.
+ 
+ 2021-10-04  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* libgnarl/s-osinte__vxworks.ads (tlsKeyCreate): Return int.
+ 	* libgnarl/s-tpopsp__vxworks-rtp.adb (ERROR): Declare from
+ 	System.VxWorks.Ext.ERROR.
+ 	(Initialize): Declare IERR. Assert it.
+ 	* libgnarl/s-tpopsp__vxworks.adb (ERROR): Declare from
+ 	System.VxWorks.Ext.ERROR.
+ 	(Is_Valid_Task): Declare IERR. Test return.
+ 	* libgnarl/s-vxwext__kernel.adb (semDelete): Return STATUS.
+ 
+ 2021-10-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_disp.adb (Make_DT): Copy the Needs_Debug_Info flag from the
+ 	type onto the TSD object.
+ 
+ 2021-10-04  Steve Baird  <baird@adacore.com>
+ 
+ 	* sem_util.adb (Is_Repeatedly_Evaluated): Handle the case of an
+ 	Old attribute reference that occurs within what was originally a
+ 	quantified expression but which expansion has transformed into
+ 	an Expression_With_Actions.
+ 
+ 2021-10-04  Steve Baird  <baird@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_Indexed_Component): The two improvements
+ 	described above.
+ 
+ 2021-10-01  Bob Duff  <duff@adacore.com>
+ 
+ 	* exp_ch6.adb (Expand_Call_Helper): Do not call
+ 	Check_Subprogram_Variant if the subprogram is an ignored ghost
+ 	entity. Otherwise the compiler crashes (in debug builds) or
+ 	gives strange error messages (in production builds).
+ 
+ 2021-10-01  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* gnat_cuda.adb (Empty_CUDA_Global_Subprograms): New procedure.
+ 	(Expand_CUDA_Package): Call Empty_CUDA_Global_Subprograms.
+ 
+ 2021-10-01  Steve Baird  <baird@adacore.com>
+ 
+ 	* checks.ads: Define a type Dimension_Set. Add an out-mode
+ 	parameter of this new type to Generate_Index_Checks so that
+ 	callers can know for which dimensions a check was generated. Add
+ 	an in-mode parameter of this new type to
+ 	Apply_Subscript_Validity_Checks so that callers can indicate
+ 	that no check is needed for certain dimensions.
+ 	* checks.adb (Generate_Index_Checks): Implement new
+ 	Checks_Generated parameter.
+ 	(Apply_Subscript_Validity_Checks): Implement new No_Check_Needed
+ 	parameter.
+ 	* exp_ch4.adb (Expand_N_Indexed_Component): Call
+ 	Apply_Subscript_Validity_Checks in more cases than before. This
+ 	includes declaring two new local functions,
+ 	(Is_Renamed_Variable_Name,
+ 	Type_Requires_Subscript_Validity_Checks_For_Reads): To help in
+ 	deciding whether to call Apply_Subscript_Validity_Checks.
+ 	Adjust to parameter profile changes in Generate_Index_Checks and
+ 	Apply_Subscript_Validity_Checks.
+ 
+ 2021-10-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_defined_characteristics.rst: Document
+ 	the rounding mode assumed for dynamic computations as per 3.5.7(16).
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-10-01  Bob Duff  <duff@adacore.com>
+ 
+ 	* table.ads (Table_Type): Remove "aliased"; no longer needed by
+ 	Atree.  Besides it contradicted the comment a few lines above,
+ 	"--  Note: We do not make the table components aliased...".
+ 	* types.ads: Move type Slot to Atree.
+ 	* atree.ads: Move type Slot fromt Types to here.  Move type
+ 	Node_Header from Seinfo to here.
+ 	* atree.adb: Avoid the need for aliased components of the Slots
+ 	table.  Instead of 'Access, use a getter and setter.  Misc
+ 	cleanups.
+ 	(Print_Statistics): Print statistics about node and entity kind
+ 	frequencies. Give 3 digit fractions instead of percentages.
+ 	* (Get_Original_Node_Count, Set_Original_Node_Count): Statistics
+ 	for calls to Original_Node and Set_Original_Node.
+ 	(Original_Node, Set_Original_Node): Gather statistics by calling
+ 	the above.
+ 	(Print_Field_Statistics): Print Original_Node statistics.
+ 	(Update_Kind_Statistics): Remove, and put all statistics
+ 	gathering under "if Atree_Statistics_Enabled", which is a flag
+ 	generated in Seinfo by Gen_IL.
+ 	* gen_il-gen.adb (Compute_Field_Offsets): Choose offsets of
+ 	Nkind, Ekind, and Homonym first. This causes a slight efficiency
+ 	improvement.  Misc cleanups.  Do not generate Node_Header; it is
+ 	now hand-written in Atree.  When choosing the order in which to
+ 	assign offsets, weight by the frequency of the node type, so the
+ 	more common nodes get their field offsets assigned earlier.  Add
+ 	more special cases.
+ 	(Compute_Type_Sizes): Remove this and related things.
+ 	There was a comment: "At some point we can instrument Atree to
+ 	print out accurate size statistics, and remove this code." We
+ 	have Atree statistics, so we now remove this code.
+ 	(Put_Seinfo): Generate Atree_Statistics_Enabled, which is equal
+ 	to Statistics_Enabled. This allows Atree to say "if
+ 	Atree_Statistics_Enabled then <gather statistics>" for
+ 	efficiency. When Atree_Statistics_Enabled is False, the "if ..."
+ 	will be optimized away.
+ 	* gen_il-internals.ads (Type_Frequency): New table of kind
+ 	frequencies.
+ 	* gen_il-internals.adb: Minor comment improvement.
+ 	* gen_il-fields.ads: Remove unused subtypes.  Suppress style
+ 	checks in the Type_Frequency table.  If we regenerate this
+ 	table (see -gnatd.A) we don't want to have to fiddle with
+ 	casing.
+ 	* impunit.adb: Minor.
+ 	* sinfo-utils.adb: Minor.
+ 	* debug.adb: Minor comment improvement.
+ 
+ 2021-10-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_type.adb (Specific_Type): Check that the type is tagged
+ 	before calling Interface_Present_In_Ancestor on it.
+ 
+ 2021-10-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* debug.adb (d.8): Document usage.
+ 	* fe.h (Debug_Flag_Dot_8): Declare.
+ 
+ 2021-10-01  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_util.adb (Enter_Name): Suppress hiding warning when in an
+ 	instance.
+ 
+ 2021-10-01  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_attr.adb (Analyze_Attribute, case Type_Key): Attribute can
+ 	be applied to a formal type.
+ 	* sem_ch5.adb (Analyze_Case_Statement): If Extensions_Allowed is
+ 	not enabled, verify that the type of the expression is discrete.
+ 
+ 2021-10-01  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* exp_dbug.adb (Debug_Renaming_Declaration): Add check for
+ 	Entity present for Ren to prevent looking at unanalyzed nodes
+ 
+ 2021-10-01  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* atree.adb (Print_Statistics): Help CodePeer see Total as
+ 	greater than zero.
+ 	* gen_il-gen.adb (One_Comp): Annotate Field_Table as Modified.
+ 
+ 2021-10-01  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* gen_il-gen-gen_entities.adb (Evaluable_Kind,
+ 	Global_Name_Kind): Add.
+ 	* gen_il-types.ads (Evaluable_Kind, Global_Name_Kind): Likewise.
+ 
+ 2021-10-01  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* aspects.ads: Add CUDA_Device aspect.
+ 	* gnat_cuda.ads (Add_CUDA_Device_Entity): New subprogram.
+ 	* gnat_cuda.adb:
+ 	(Add_CUDA_Device_Entity): New subprogram.
+ 	(CUDA_Device_Entities_Table): New hashmap for CUDA_Device
+ 	entities.
+ 	(Get_CUDA_Device_Entities): New internal subprogram.
+ 	(Set_CUDA_Device_Entities): New internal subprogram.
+ 	* par-prag.adb (Prag): Handle pragma id Pragma_CUDA_Device.
+ 	* sem_prag.ads (Aspect_Specifying_Pragma): Mark CUDA_Device as
+ 	being both aspect and pragma.
+ 	* sem_prag.adb (Analyze_Pragma): Add CUDA_Device entities to
+ 	list of CUDA_Entities belonging to package N.
+ 	(Sig_Flags): Signal CUDA_Device entities as referenced.
+ 	* snames.ads-tmpl: Create CUDA_Device names and pragmas.
+ 
+ 2021-10-01  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* exp_util.adb (Build_DIC_Procedure_Body): Remove inappropriate
+ 	Assert pragma.  Remove unneeded and dead code related to derived
+ 	private types.
+ 
+ 2021-10-01  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* gen_il-gen-gen_nodes.adb (N_Alternative, N_Is_Case_Choice):
+ 	Add.
+ 	(N_Is_Exception_Choice, N_Is_Range): Likewise.
+ 	* gen_il-types.ads: Add above names.
+ 	* gen_il-gen.adb (Put_Union_Membership): Write both declarations
+ 	and definitions of union functions.
+ 
+ 2021-10-01  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_aggr.adb (Expand_Array_Aggregate,
+ 	Two_Pass_Aggregate_Expansion): Increment index for element
+ 	insertion within the loop, only if upper bound has not been
+ 	reached.
+ 
+ 2021-10-01  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* contracts.ads (Make_Class_Precondition_Subps): New subprogram.
+ 	(Merge_Class_Conditions): New subprogram.
+ 	(Process_Class_Conditions_At_Freeze_Point): New subprogram.
+ 	* contracts.adb (Check_Class_Condition): New subprogram.
+ 	(Set_Class_Condition): New subprogram.
+ 	(Analyze_Contracts): Remove code analyzing class-wide-clone
+ 	subprogram since it is no longer built.
+ 	(Process_Spec_Postconditions): Avoid processing twice seen
+ 	subprograms.
+ 	(Process_Preconditions): Simplify its functionality to
+ 	non-class-wide preconditions.
+ 	(Process_Preconditions_For): No action needed for wrappers and
+ 	helpers.
+ 	(Make_Class_Precondition_Subps): New subprogram.
+ 	(Process_Class_Conditions_At_Freeze_Point): New subprogram.
+ 	(Merge_Class_Conditions): New subprogram.
+ 	* exp_ch6.ads (Install_Class_Preconditions_Check): New
+ 	subprogram.
+ 	* exp_ch6.adb (Expand_Call_Helper): Install class-wide
+ 	preconditions check on dispatching primitives that have or
+ 	inherit class-wide preconditions.
+ 	(Freeze_Subprogram): Remove code for null procedures with
+ 	preconditions.
+ 	(Install_Class_Preconditions_Check): New subprogram.
+ 	* exp_util.ads (Build_Class_Wide_Expression): Lower the
+ 	complexity of this subprogram; out-mode formal Needs_Wrapper
+ 	since this functionality is now provided by a new subprogram.
+ 	(Get_Mapped_Entity): New subprogram.
+ 	(Map_Formals): New subprogram.
+ 	* exp_util.adb (Build_Class_Wide_Expression): Lower the
+ 	complexity of this subprogram. Its previous functionality is now
+ 	provided by subprograms Needs_Wrapper and Check_Class_Condition.
+ 	(Add_Parent_DICs): Map the overridden primitive to the
+ 	overriding one.
+ 	(Get_Mapped_Entity): New subprogram.
+ 	(Map_Formals): New subprogram.
+ 	(Update_Primitives_Mapping): Adding assertion.
+ 	* freeze.ads (Check_Inherited_Conditions): Subprogram made
+ 	public with added formal to support late overriding.
+ 	* freeze.adb (Check_Inherited_Conditions): New implementation;
+ 	builds the dispatch table wrapper required for class-wide
+ 	pre/postconditions; added support for late overriding.
+ 	(Needs_Wrapper): New subprogram.
+ 	* sem.ads (Inside_Class_Condition_Preanalysis): New global
+ 	variable.
+ 	* sem_disp.ads (Covered_Interface_Primitives): New subprogram.
+ 	* sem_disp.adb (Covered_Interface_Primitives): New subprogram.
+ 	(Check_Dispatching_Context): Skip checking context of
+ 	dispatching calls during preanalysis of class-wide conditions
+ 	since at that stage the expression is not installed yet on its
+ 	definite context.
+ 	(Check_Dispatching_Call): Skip checking 6.1.1(18.2/5) by
+ 	AI12-0412 on helpers and wrappers internally built for
+ 	supporting class-wide conditions; for late-overriding
+ 	subprograms call Check_Inherited_Conditions to build the
+ 	dispatch-table wrapper (if required).
+ 	(Propagate_Tag): Adding call to
+ 	Install_Class_Preconditions_Check.
+ 	* sem_util.ads (Build_Class_Wide_Clone_Body): Removed.
+ 	(Build_Class_Wide_Clone_Call): Removed.
+ 	(Build_Class_Wide_Clone_Decl): Removed.
+ 	(Class_Condition): New subprogram.
+ 	(Nearest_Class_Condition_Subprogram): New subprogram.
+ 	* sem_util.adb (Build_Class_Wide_Clone_Body): Removed.
+ 	(Build_Class_Wide_Clone_Call): Removed.
+ 	(Build_Class_Wide_Clone_Decl): Removed.
+ 	(Class_Condition): New subprogram.
+ 	(Nearest_Class_Condition_Subprogram): New subprogram.
+ 	(Eligible_For_Conditional_Evaluation): No need to evaluate
+ 	class-wide conditions during preanalysis since the expression is
+ 	not installed on its definite context.
+ 	* einfo.ads (Class_Wide_Clone): Removed.
+ 	(Class_Postconditions): New attribute.
+ 	(Class_Preconditions): New attribute.
+ 	(Class_Preconditions_Subprogram): New attribute.
+ 	(Dynamic_Call_Helper): New attribute.
+ 	(Ignored_Class_Postconditions): New attribute.
+ 	(Ignored_Class_Preconditions): New attribute.
+ 	(Indirect_Call_Wrapper): New attribute.
+ 	(Is_Dispatch_Table_Wrapper): New attribute.
+ 	(Static_Call_Helper): New attribute.
+ 	* exp_attr.adb (Expand_N_Attribute_Reference): When the prefix
+ 	is of an access-to-subprogram type that has class-wide
+ 	preconditions and an indirect-call wrapper of such subprogram is
+ 	available, replace the prefix by the wrapper.
+ 	* exp_ch3.adb (Build_Class_Condition_Subprograms): New
+ 	subprogram.
+ 	(Register_Dispatch_Table_Wrappers): New subprogram.
+ 	* exp_disp.adb (Build_Class_Wide_Check): Removed; class-wide
+ 	precondition checks now rely on internally built helpers.
+ 	* sem_ch13.adb (Analyze_Aspect_Specifications): Set initial
+ 	value of attributes Class_Preconditions, Class_Postconditions,
+ 	Ignored_Class_Preconditions and Ignored_Class_Postconditions.
+ 	These values are later updated with the full pre/postcondition
+ 	by Merge_Class_Conditions.
+ 	(Freeze_Entity_Checks): Call
+ 	Process_Class_Conditions_At_Freeze_Point.
+ 	* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Remove code
+ 	building the body of the class-wide clone subprogram since it is
+ 	no longer required.
+ 	(Install_Entity): Adding assertion.
+ 	* sem_prag.adb (Analyze_Pre_Post_Condition_In_Decl_Part): Remove
+ 	code building and analyzing the class-wide clone subprogram; no
+ 	longer required.
+ 	(Build_Pragma_Check_Equivalent): Adjust call to
+ 	Build_Class_Wide_Expression since the formal named Needs_Wrapper
+ 	has been removed.
+ 	* sem_attr.adb (Analyze_Attribute_Old_Result): Skip processing
+ 	these attributes during preanalysis of class-wide conditions
+ 	since at that stage the expression is not installed yet on its
+ 	definite context.
+ 	* sem_res.adb (Resolve_Actuals): Skip applying RM 3.9.2(9/1) and
+ 	SPARK RM 6.1.7(3) on actuals of internal helpers and wrappers
+ 	built to support class-wide preconditions.
+ 	* sem_ch5.adb (Process_Bounds): Do not generate a constant
+ 	declaration for the bounds when we are preanalyzing a class-wide
+ 	condition.
+ 	(Analyze_Loop_Parameter_Specification): Handle preanalysis of
+ 	quantified expression placed in the outermost expression of a
+ 	class-wide condition.
+ 	* ghost.adb (Check_Ghost_Context): No check required during
+ 	preanalysis of class-wide conditions.
+ 	* gen_il-fields.ads (Opt_Field_Enum): Adding
+ 	Class_Postconditions, Class_Preconditions,
+ 	Class_Preconditions_Subprogram, Dynamic_Call_Helper,
+ 	Ignored_Class_Postconditions, Ignored_Class_Preconditions,
+ 	Indirect_Call_Wrapper, Is_Dispatch_Table_Wrapper,
+ 	Static_Call_Helper.
+ 	* gen_il-gen-gen_entities.adb (Is_Dispatch_Table_Wrapper):
+ 	Adding semantic flag Is_Dispatch_Table_Wrapper; removing
+ 	semantic field Class_Wide_Clone; adding semantic fields for
+ 	Class_Postconditions, Class_Preconditions,
+ 	Class_Preconditions_Subprogram, Dynamic_Call_Helper,
+ 	Ignored_Class_Postconditions, Indirect_Call_Wrapper,
+ 	Ignored_Class_Preconditions, and Static_Call_Helper.
+ 
+ 2021-10-01  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* comperr.adb (Delete_SCIL_Files): Handle generic subprogram
+ 	declarations and renaming just like generic package declarations
+ 	and renamings, respectively; handle
+ 	N_Subprogram_Renaming_Declaration.
+ 
+ 2021-10-01  Steve Baird  <baird@adacore.com>
+ 
+ 	* bcheck.adb (Check_Versions): Add support for the case where
+ 	the .ali file contains both a primary and a secondary version
+ 	number, as in "GNAT Lib v22.20210809".
+ 
+ 2021-10-01  Steve Baird  <baird@adacore.com>
+ 
+ 	* sem_res.adb (Resolve): Two separate fixes. In the case where
+ 	Find_Aspect for a literal aspect returns the aspect for a
+ 	different (ancestor) type, call Corresponding_Primitive_Op to
+ 	get the right callee. In the case where a downward tagged type
+ 	conversion appears to be needed, generate a null extension
+ 	aggregate instead, as per Ada RM 3.4(27).
+ 	* sem_util.ads, sem_util.adb: Add new Corresponding_Primitive_Op
+ 	function. It maps a primitive op of a tagged type and a
+ 	descendant type of that tagged type to the corresponding
+ 	primitive op of the descendant type. The body of this function
+ 	was written by Javier Miranda.
+ 
+ 2021-10-01  Bob Duff  <duff@adacore.com>
+ 
+ 	* atree.adb: Gather and print statistics about frequency of
+ 	getter and setter calls.
+ 	* atree.ads (Print_Statistics): New procedure for printing
+ 	statistics.
+ 	* debug.adb: Document -gnatd.A switch.
+ 	* gen_il-gen.adb: Generate code for statistics gathering.
+ 	Choose the offset of Homonym early.  Misc cleanup.  Put more
+ 	comments in the generated code.
+ 	* gen_il-internals.ads (Unknown_Offset): New value to indicate
+ 	that the offset has not yet been chosen.
+ 	* gnat1drv.adb: Call Print_Statistics.
+ 	* libgnat/s-imglli.ads: Minor comment fix.
+ 	* output.ads (Write_Int_64): New procedure to write a 64-bit
+ 	value.  Needed for new statistics, and could come in handy
+ 	elsewhere.
+ 	* output.adb (Write_Int_64): Likewise.
+ 	* sinfo.ads: Remove obsolete comment. The xtreeprs program no
+ 	longer exists.
+ 	* types.ads: New 64-bit types needed for new statistics.
+ 
+ 2021-10-01  Dmitriy Anisimkov  <anisimko@adacore.com>
+ 
+ 	* libgnat/memtrack.adb (Putc): New routine wrapped around fputc
+ 	with error check.
+ 	(Write): New routine wrapped around fwrite with error check.
+ 	Remove bound functions fopen, fwrite, fputs, fclose, OS_Exit.
+ 	Use the similar routines from System.CRTL and System.OS_Lib.
+ 
+ 2021-10-01  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_aggr.adb (Must_Slide): If the aggregate only contains an
+ 	others_clause no sliding id involved. Otherwise sliding is
+ 	required if any bound of the aggregate or the context subtype is
+ 	non-static.
+ 
+ 2021-10-01  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* gen_il-gen-gen_nodes.adb (N_Is_Decl): Add.
+ 	* gen_il-types.ads (N_Is_Decl): Likewise.
+ 
+ 2021-10-01  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* gen_il-gen-gen_nodes.adb (N_Entity_Name): Add.
+ 	* gen_il-types.ads (N_Entity_Name): Likewise.
+ 
+ 2021-10-01  Steve Baird  <baird@adacore.com>
+ 
+ 	* bcheck.adb (Check_Versions): In the case of an ali file
+ 	version mismatch, if distinct integer values can be extracted
+ 	from the two version strings then include those values in the
+ 	generated error message.
+ 
+ 2021-10-01  Steve Baird  <baird@adacore.com>
+ 
+ 	* sem_elab.adb (Is_Safe_Call): Return True in the case of a
+ 	(possibly rewritten) call to an expression function.
+ 
+ 2021-10-01  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_aggr.adb (Resolve_Iterated_Component_Association):
+ 	Initialize Id_Typ to Any_Type by default.
+ 
+ 2021-10-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* doc/gnat_ugn/gnat_and_program_execution.rst (gnatmem): Document
+ 	that it works only with fixed-position executables.
+ 
+ 2021-10-01  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* libgnat/s-parame__vxworks.ads (time_t_bits): Change to
+ 	Long_Long_Integer'Size.
+ 
+ 2021-09-23  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity): Fix comment.
+ 
+ 2021-09-23  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* gen_il-gen-gen_entities.adb (Subprogram_Body_Or_Type): Add.
+ 	* gen_il-types.ads (Subprogram_Body_Or_Type): Likewise.
+ 
+ 2021-09-23  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* einfo-utils.adb (Next_Index): Verify input and output are
+ 	N_Is_Index.
+ 	* gen_il-gen-gen_nodes.adb (N_Has_Bounds, N_Is_Index): Add.
+ 	* gen_il-types.ads (N_Has_Bounds, N_Is_Index): Likewise.
+ 	* sem_ch3.adb (Array_Type_Declaration): Use Next, not
+ 	Next_Index.
+ 	* sem_ch12.adb (Formal_Dimensions): Likewise.
+ 	* sem_util.adb (Is_Valid_Renaming): Likewise.
+ 
+ 2021-09-23  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* doc/gnat_ugn/gnat_utility_programs.rst (gnatsymbolize):
+ 	Document new --load option and -g1 as minimal compilation
+ 	requirement.
+ 
+ 2021-09-23  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_aggr.adb (Resolve_Array_Aggregate): Only keep the bounds
+ 	for internally generated attributes; otherwise, compute them
+ 		anew.
+ 
+ 2021-09-23  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* sem_ch3.adb (Build_Access_Subprogram_Wrapper): Decorate the
+ 	wrapper with attribute Is_Wrapper, and move its declaration to
+ 	the freezing actions of its type declaration; done to facilitate
+ 	identifying it at later stages to avoid handling it as a
+ 	primitive operation of a tagged type; otherwise it may be
+ 	handled as a dispatching operation and erroneously registered in
+ 	a dispatch table.
+ 	(Make_Index): Add missing decoration of field Parent.
+ 	* sem_disp.adb (Check_Dispatching_Operation): Complete
+ 	decoration of late-overriding dispatching primitives.
+ 	(Is_Access_To_Subprogram_Wrapper): New subprogram.
+ 	(Inherited_Subprograms): Prevent cascaded errors; adding missing
+ 	support for private types.
+ 	* sem_type.adb (Add_One_Interp): Add missing support for the
+ 	first interpretation of a primitive of an inmediate ancestor
+ 	interface.
+ 	* sem_util.adb (Check_Result_And_Post_State_In_Pragma): Do not
+ 	report missing reference in postcondition placed in internally
+ 	built wrappers.
+ 	* exp_disp.adb (Expand_Dispatching_Call): Adding assertion.
+ 
+ 2021-09-23  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_aggr.adb (Resolve_Array_Aggregate): Check the validity of
+ 	an array aggregate all of whose components are iterated
+ 	component associations.
+ 	* exp_aggr.adb (Expand_Array_Aggregate,
+ 	Two_Pass_Aggregate_Expansion): implement two-pass algorithm and
+ 	replace original aggregate with resulting temporary, to ensure
+ 	that a proper length check is performed if context is
+ 	constrained. Use attributes Pos and Val to handle index types of
+ 	any discrete type.
+ 
+ 2021-09-23  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen.adb: Set the number of concrete nodes that have the
+ 	Homonym field to a higher number than any other field. This
+ 	isn't true, but it forces Homonym's offset to be chosen first,
+ 	so it will be at offset zero and hence slot zero.
+ 
+ 2021-09-23  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* atree.adb (Relocate_Node): If relocating a subprgram call and
+ 	we're doing unnesting, make a new Parameter_Associations, if
+ 	any.
+ 
+ 2021-09-23  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnat/a-strbou.ads (Generic_Bounded_Length): Remove explicit
+ 	Initializes contract.
+ 
+ 2021-09-23  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen.adb: Generate getters and setters with much of the
+ 	code inlined. Generate code for storing a few fields in the node
+ 	header, to avoid the extra level of indirection for those
+ 	fields. We generate the header type, so we don't have to
+ 	duplicate hand-written Ada and C code to depend on the number of
+ 	header fields.  Declare constants for slot size. Use short names
+ 	because these are used all over.  Remove
+ 	Put_Low_Level_Accessor_Instantiations, Put_Low_Level_C_Getter,
+ 	which are no longer needed.  Rename
+ 	Put_High_Level_C_Getter-->Put_C_Getter.
+ 	* atree.ads, atree.adb: Take into account the header slots.
+ 	Take into account the single Node_Or_Entity_Field type.  Remove
+ 	"pragma Assertion_Policy (Ignore);", because the routines in
+ 	this package are no longer efficiency critical.
+ 	* atree.h: Remove low-level getters, which are no longer used by
+ 	sinfo.h and einfo.h.
+ 	* einfo-utils.adb: Avoid crash in Known_Alignment.
+ 	* live.adb, sem_eval.adb: Remove code that prevents Node_Id from
+ 	having a predicate.  We don't actually add a predicate to
+ 	Node_Id, but we want to be able to for temporary debugging.
+ 	* sinfo-utils.adb: Remove code that prevents Node_Id from having
+ 	a predicate.  Take into account the single Node_Or_Entity_Field
+ 	type.
+ 	* sinfo-utils.ads: Minor.
+ 	* table.ads (Table_Type): Make the components aliased, because
+ 	low-level setters in Atree need to take 'Access.
+ 	* treepr.adb: Take into account the single Node_Or_Entity_Field
+ 	type.  Make some code more robust, so we can print out
+ 	half-baked nodes.
+ 	* types.ads: Move types here for visibility purposes.
+ 	* gcc-interface/gigi.h, gcc-interface/trans.c: Take into account
+ 	the Node_Header change in the GNAT front end.
+ 	* gcc-interface/cuintp.c, gcc-interface/targtyps.c: Add because
+ 	gigi.h now refers to type Node_Header, which is in sinfo.h.
+ 
+ 2021-09-23  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/a-strfix.adb (Delete, Insert, Overwrite,
+ 	Replace_Slice): Remove SPARK_Mode Off.
+ 	* libgnat/a-strfix.ads (Insert, Overwrite, Replace_Slice):
+ 	Strengthen precondition.
+ 
+ 2021-09-23  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnat/a-strbou.ads (Generic_Bounded_Length): Remove non-null
+ 	Global contracts.
+ 
+ 2021-09-23  Steve Baird  <baird@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_defined_characteristics.rst: Update
+ 	this section to reflect the current version of Ada RM M.2.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-09-22  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/a-strfix.ads (Trim): Simplify contracts.
+ 	* libgnat/a-strfix.adb (Trim): Remove white space.
+ 
+ 2021-09-22  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_Op_Eq): Reuse Is_Attribute_Result.
+ 	* exp_prag.adb (Expand_Attributes): Reuse Is_Attribute_Old.
+ 
+ 2021-09-22  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_ch3.adb (Analyze_Object_Declaration): Do not insert a
+ 	predicate check after a deferred constant declaration.
+ 
+ 2021-09-22  Bob Duff  <duff@adacore.com>
+ 
+ 	* contracts.adb, einfo-utils.adb, einfo-utils.ads, exp_ch7.adb,
+ 	exp_ch9.adb, exp_disp.adb, exp_prag.adb, exp_smem.adb,
+ 	exp_util.adb, freeze.adb, sem_aggr.adb, sem_attr.adb,
+ 	sem_ch8.adb, sem_prag.ads, sem_util.adb, sem_util.ads: Fix
+ 	conformance errors.
+ 	* errout.adb, erroutc.adb: Remove pragmas Suppress.
+ 	* err_vars.ads: Initialize variables that were previously being
+ 	read uninitialized.
+ 
+ 2021-09-22  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/a-strunb.ads: Mark package in SPARK with private part
+ 	not in SPARK.
+ 	(Free): Mark not in SPARK.
+ 
+ 2021-09-22  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* snames.ads-tmpl: Update status of some attributes.
+ 
+ 2021-09-22  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* libgnarl/s-interr__vxworks.adb (Interfaces.C): Remove as
+ 	unused.
+ 	(System.VxWorks.Ext): Import.
+ 	(System.VxWorks.Ext.STATUS): use type.
+ 	(STATUS): New subtype.
+ 	(OK): New constant.
+ 	(Interrupt_Connector): Return STATUS type vice int.
+ 	(Interrupt_Connect, Notify_Interrupt, Unbind_Handler,
+ 	Interrupt_Server_Task): Rename Status to Result. Assert Result =
+ 	OK.
+ 	* libgnarl/s-osinte__vxworks.adb (To_Clock_Ticks): Define constant
+ 	IERR, and return it vice ERROR.
+ 	(Binary_Semaphore_Delete): Return STATUS type vice int.
+ 	(Binary_Semaphore_Obtain): Likewise.
+ 	(Binary_Semaphore_Release): Likewise.
+ 	(Binary_Semaphore_Flush): Likewise.
+ 	* libgnarl/s-osinte__vxworks.ads (SVE): Renaming of
+ 	System.VxWorks.Ext.
+ 	(STATUS): Use SVE in declaration of subtype.
+ 	(BOOL): Likewise.
+ 	(vx_freq_t): Likewise.
+ 	(t_id): Likewise.
+ 	(gitpid): Use SVE in renaming of subprogram
+ 	(Task_Stop): Likewise.
+ 	(Task_Cont): Likewise.
+ 	(Int_Lock): Likewise.
+ 	(Int_Unlock): Likewise.
+ 	(Set_Time_Slice): Likewise.
+ 	(semDelete): Likewise.
+ 	(taskCpuAffinitySet): Likewise.
+ 	(taskMaskAffinitySet): Likewise.
+ 	(sigset_t): Use SVE in declaration of type.
+ 	(OK): Remove as unused.
+ 	(ERROR): Likewise.
+ 	(taskOptionsGet): return STATUS vice int.
+ 	(taskSuspend): Likewise.
+ 	(taskResume): Likewise.
+ 	(taskDelay): Likewise.
+ 	(taskVarAdd): Likewise.
+ 	(taskVarDelete): Likewise.
+ 	(taskVarSet): Likewise.
+ 	(tlkKeyCreate): Likewise.
+ 	(taskPrioritySet): Likewise.
+ 	(semGive): Likewise.
+ 	(semTake): Likewise.
+ 	(Binary_Semaphore_Delete): Likewise.
+ 	(Binary_Semaphore_Obtain): Likewise.
+ 	(Binary_Semaphore_Release): Likewise.
+ 	(Binary_Semaphore_Flush): Likewise.
+ 	(Interrupt_Connect): Likewise.
+ 	* libgnarl/s-taprop__vxworks.adb
+ 	(System.VxWorks.Ext.STATUS): use type.
+ 	(int): Syntactically align subtype.
+ 	(STATUS): New subtype.
+ 	(OK): New constant.
+ 	(Finalize_Lock): Check STATUS vice int. Assert OK.
+ 	(Finalize_Lock): Likewise.
+ 	(Write_Lock): Likewise.
+ 	(Write_Lock): Likewise.
+ 	(Write_Lock): Likewise.
+ 	(Unlock): Likewise.
+ 	(Unlock): Likewise.
+ 	(Unlock): Likewise.
+ 	(Unlock): Likewise.
+ 	(Sleep): Likewise.
+ 	(Sleep): Likewise.
+ 	(Sleep): Likewise.
+ 	(Timed_Sleep): Likewise and test Result.
+ 	(Timed_Delay): Likewise and test Result.
+ 	(Wakeup): Likewise.
+ 	(Yield): Likewise.
+ 	(Finalize_TCB): Likewise.
+ 	(Suspend_Until_True): Check OK.
+ 	(Stop_All_Tasks): Declare Dummy STATUS vice in.  Check OK.
+ 	(Is_Task_Context): Use OSI renaming.
+ 	(Initialize): Use STATUS vice int.
+ 	* libgnarl/s-vxwext.adb
+ 	(IERR): Renamed from ERROR.
+ 	(taskCpuAffinitySet): Return IERR (int).
+ 	(taskMaskAffinitySet): Likewise.
+ 	* libgnarl/s-vxwext.ads
+ 	(STATUS): New subtype.
+ 	(OK): New STATUS constant.
+ 	(ERROR): Likewise.
+ 	* libgnarl/s-vxwext__kernel-smp.adb
+ 	(IERR): Renamed from ERROR.
+ 	(Int_Lock): Return IERR.
+ 	(semDelete): Return STATUS.
+ 	(Task_Cont): Likewise.
+ 	(Task_Stop): Likewise.
+ 	* libgnarl/s-vxwext__kernel.adb
+ 	(IERR): Renamed from ERROR.
+ 	(semDelete): Return STATUS.
+ 	(Task_Cont): Likewise.
+ 	(Task_Stop): Likewise.
+ 	(taskCpuAffinitySet): Return IERR (int)
+ 	(taskMaskAffinitySet): Likewise.
+ 	* libgnarl/s-vxwext__kernel.ads
+ 	(STATUS): New subtype.
+ 	(OK): New STATUS constant.
+ 	(ERROR): Likewise.
+ 	(Interrupt_Connect): Return STATUS
+ 	(semDelete): Likewise.
+ 	(Task_Cont): Likewise.
+ 	(Task_Stop): Likewise.
+ 	(Set_Time_Slice): Likewise.
+ 	* libgnarl/s-vxwext__rtp-smp.adb
+ 	(IERR): Renamed from ERROR.
+ 	(Int_Lock): return IERR constant vice ERROR.
+ 	(Interrupt_Connect): Return STATUS.
+ 	(semDelete): Likewise.
+ 	(Set_Time_Slice): Likewise.
+ 	* libgnarl/s-vxwext__rtp.adb
+ 	(IERR): Renamed from ERROR.
+ 	(Int_Lock): return IERR constant vice ERROR.
+ 	(Int_Unlock): Return STATUS.
+ 	(semDelete): Likewise.
+ 	(Set_Time_Slice): Likewise.
+ 	(taskCpuAffinitySet): Return IERR (int)
+ 	(taskMaskAffinitySet): Likewise.
+ 	* libgnarl/s-vxwext__rtp.ads
+ 	(STATUS): New subtype.
+ 	(OK): New STATUS constant.
+ 	(ERROR): Likewise.
+ 	(Interrupt_Connect): Return STATUS
+ 	(semDelete): Likewise.
+ 	(Task_Cont): Likewise.
+ 	(Task_Stop): Likewise.
+ 	(Set_Time_Slice): Likewise.
+ 
+ 2021-09-22  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* prep.adb (Preprocess): Allow for more flexibility when
+ 	Relaxed_RM_Semantics is set.
+ 
+ 2021-09-22  Pierre-Alexandre Bazin  <bazin@adacore.com>
+ 
+ 	* libgnat/a-strbou.adb: Turn SPARK_Mode on.
+ 	* libgnat/a-strbou.ads: Write contracts.
+ 	* libgnat/a-strfix.ads (Index): Fix grammar error in a comment.
+ 	* libgnat/a-strsea.ads (Index): Likewise.
+ 	* libgnat/a-strsup.adb: Rewrite the body to take into account
+ 	the new definition of Super_String using Relaxed_Initialization
+ 	and a predicate.
+ 	(Super_Replicate, Super_Translate, Times): Added loop
+ 	invariants, and ghost lemmas for Super_Replicate and Times.
+ 	(Super_Trim): Rewrite the body using search functions to
+ 	determine the cutting points.
+ 	(Super_Element, Super_Length, Super_Slice, Super_To_String):
+ 	Remove (now written as expression functions in a-strsup.ads).
+ 	* libgnat/a-strsup.ads: Added contracts.
+ 	(Super_Element, Super_Length, Super_Slice, Super_To_String):
+ 	Rewrite as expression functions.
+ 
+ 2021-09-22  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_ch13.adb (Build_Predicate_Functions): Add guard.
+ 
+ 2021-09-22  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* libgnarl/s-vxwext.ads (BOOL): New int type.
+ 	(Interrupt_Context): Change return type to BOOL.
+ 	* libgnarl/s-vxwext__kernel.ads: Likewise.
+ 	* libgnarl/s-vxwext__rtp-smp.adb: Likewise.
+ 	* libgnarl/s-vxwext__rtp.adb: Likewise.
+ 	* libgnarl/s-vxwext__rtp.ads: Likewise.
+ 	* libgnarl/s-osinte__vxworks.adb (Interrupt_Context): Change
+ 	return type to BOOL.
+ 	* libgnarl/s-osinte__vxworks.ads (BOOL) New subtype.
+ 	(taskIsSuspended): Change return type to BOOL.
+ 	(Interrupt_Context): Change return type to BOOL. Adjust comments
+ 	accordingly.
+ 	* libgnarl/s-taprop__vxworks.adb (System.VxWorks.Ext.BOOL):
+ 	use type.
+ 	(Is_Task_Context): Test Interrupt_Context against 0.
+ 	* libgnat/i-vxwork.ads (BOOL): New int.
+ 	(intContext): Change return type to BOOL. Adjust comments.
+ 	* libgnat/i-vxwork__x86.ads: Likewise.
+ 
+ 2021-09-22  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_aux.adb, sem_aux.ads (Package_Body): Moved from GNATprove.
+ 	* sem_elab.adb (Spec_And_Body_From_Entity): Refine type of parameter.
+ 
+ 2021-09-22  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* doc/gnat_ugn/platform_specific_information.rst: Improve doc
+ 	on permission and containers.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2021-09-22  Yannick Moy  <moy@adacore.com>
+ 
+ 	* atree.adb (Rewrite): Fix parent node of shared aspects.
+ 	* atree.ads (Rewrite): Add ??? comment on incorrect
+ 	documentation.
+ 	* einfo-utils.adb (Known_Esize): Fix logic.
+ 	* sem_ch13.adb (Alignment_Check_For_Size_Change,
+ 	Analyze_Attribute_Definition_Clause): Protect against unset
+ 	Size.
+ 
+ 2021-09-22  Yannick Moy  <moy@adacore.com>
+ 
+ 	* freeze.adb (Build_Renamed_Body): Special case for GNATprove.
+ 	* sem_ch6.adb (Analyze_Expression_Function): Remove useless test
+ 	for a node to come from source, which becomes harmful otherwise.
+ 
+ 2021-09-22  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* ali.adb, ali.ads (Scan_ALI): Remove use of deprecated
+ 	parameter Ignore_ED, and all specification for Lower in call to
+ 	Get_File_Name.
+ 	* ali-util.adb (Read_Withed_ALIs): Modify call to Scan_ALI.
+ 	* clean.adb (Clean_Executables): Likewise.
+ 	* gnatbind.adb (Add_Artificial_ALI_File, Executable section):
+ 	Likewise.
+ 	* gnatlink.adb (Executable section): Likewise.
+ 	* gnatls.adb (Executable section): Likewise.
+ 	* make.adb (Check, Wait_For_Available_Slot): Likewise.
+ 	* aspects.ads: Add Aspect_No_Controlled_Parts to
+ 	Nonoverridable_Aspect_Id
+ 	* opt.ads: Remove function pointers used as a workaround for
+ 	ASIS.
+ 	* osint-c.adb (Executable section): Remove setting of function
+ 	pointer workarounds needed for ASIS.
+ 	* osint.adb (Read_Default_Search_Dirs): Correct behavior to
+ 	detect EOL characters.
+ 	* par_sco.adb (Output_Header): Remove comment regarding use of
+ 	First_Sloc.
+ 	(Traverse_Sync_Definition): Renamed to
+ 	Traverse_Protected_Or_Task_Definition.
+ 	* pprint.adb (Interal_List_Name): Add description about purpose,
+ 	and refactor conditional statement.
+ 	(Prepend): Removed.
+ 	* repinfo.adb (List_Rep_Info, Write_Info_Line): Remove use of
+ 	subprogram pointer.
+ 	* scng.adb (Scan): Remove CODEFIX question, and minor comment
+ 	change.
+ 	* sem_attr.adb (Analyze_Image_Attribute): Remove special
+ 	processing for 'Img.
+ 	* sem_ch6.adb (Check_Untagged_Equality): Add RM reference.
+ 	(FCE): Add comment describing behavior.
+ 	(Is_Non_Overriding_Operation): Minor comment formatting change.
+ 	* sem_type.adb (Is_Actual_Subprogram): Add comment about
+ 	Comes_From_Source test.
+ 	(Matching_Types): Describe non-matching cases.
+ 	* sem_util.adb (Is_Confirming): Add stub case for
+ 	No_Controlled_Parts.
+ 
+ 2021-09-22  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_ch13.adb (Build_Predicate_Functions): Access
+ 	Predicated_Parent only on subtypes.
+ 
+ 2021-09-22  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_prag.adb (Process_Import_Or_Interface): Relax error when
+ 	Relaxed_RM_Semantics.
+ 
+ 2021-09-22  Steve Baird  <baird@adacore.com>
+ 
+ 	* libgnat/s-regpat.adb (Match): Handle the case where Self.First
+ 	is not NUL (so we know the first character we are looking for),
+ 	but case-insensitive matching has
+ 	been specified.
+ 	(Optimize): In the case of an EXACTF Op, set Self.First as is
+ 	done in the EXACT case, except with the addition of a call to
+ 	Lower_Case.
+ 
+ 2021-09-22  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-imenne.ads, libgnat/s-imenne.adb: Delete.
+ 	* gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Remove s-imenne.o.
+ 	(GNATBIND_OBJS): Likewise.
+ 
+ 2021-09-22  Yannick Moy  <moy@adacore.com>
+ 
+ 	* einfo.ads: Fix comments.
+ 	* exp_aggr.adb: Fix variable name.
+ 	* exp_util.adb: Fix comments.
+ 	* sem_ch13.adb: Fix comments.
+ 	* sem_ch3.adb: Fix comments and variable name.
+ 
+ 2021-09-22  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* libgnarl/s-osinte__vxworks.ads: Make procedure vice function.
+ 	* libgnarl/s-vxwext.ads: Likewise.
+ 	* libgnarl/s-vxwext__kernel-smp.adb: Likewise.
+ 	* libgnarl/s-vxwext__kernel.adb: Likewise.
+ 	* libgnarl/s-vxwext__kernel.ads: Likewise.
+ 	* libgnarl/s-vxwext__rtp-smp.adb: Likewise.
+ 	* libgnarl/s-vxwext__rtp.adb: Likewise.
+ 	* libgnarl/s-vxwext__rtp.ads: Likewise.
+ 	* libgnarl/s-taprop__vxworks.adb (Stop_All_Tasks): Call
+ 	Int_Unlock as a procedure.
+ 
+ 2021-09-22  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* libgnarl/s-osinte__vxworks.ads (SVE): New package renaming
+ 	(vx_freq_t): New subtype.
+ 	(sysClkRateGet): Return vx_freq_t.
+ 	* libgnarl/s-vxwext.ads (vx_freq_t): New type.
+ 	* libgnarl/s-vxwext__kernel.ads: Likewise.
+ 	* libgnarl/s-vxwext__rtp.ads: Likewise.
+ 
+ 2021-09-22  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_case.adb (Composite_Case_Ops): Replace 'Image with
+ 	Error_Msg_Uint.
+ 
+ 2021-09-22  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_If_Expression): Generate an intermediate
+ 	temporary when the expression is a condition in an outer decision
+ 	and control-flow optimizations are suppressed.
+ 
+ 2021-09-22  Steve Baird  <baird@adacore.com>
+ 
+ 	* exp_ch5.adb (Expand_General_Case_Statement.Pattern_Match): Add
+ 	new function Indexed_Element to handle array element
+ 	comparisons. Handle case choices that are array aggregates,
+ 	string literals, or names denoting constants.
+ 	* sem_case.adb (Composite_Case_Ops.Array_Case_Ops): New package
+ 	providing utilities needed for casing on arrays.
+ 	(Composite_Case_Ops.Choice_Analysis): If necessary, include
+ 	array length as a "component" (like a discriminant) when
+ 	traversing components. We do not (yet) partition choice analysis
+ 	to deal with unequal length choices separately. Instead, we
+ 	embed everything in the minimum-dimensionality Cartesian product
+ 	space needed to handle all choices properly; this is determined
+ 	by the length of the longest choice pattern.
+ 	(Composite_Case_Ops.Choice_Analysis.Traverse_Discrete_Parts):
+ 	Include length as a "component" in the traversal if necessary.
+ 	(Composite_Case_Ops.Choice_Analysis.Parse_Choice.Traverse_Choice):
+ 	Add support for case choices that are string literals or names
+ 	denoting constants.
+ 	(Composite_Case_Ops.Choice_Analysis): Include length as a
+ 	"component" in the analysis if necessary.
+ 	(Check_Choices.Check_Case_Pattern_Choices.Ops.Value_Sets.Value_Index_Count):
+ 	Improve error message when capacity exceeded.
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst: Update
+ 	documentation to reflect current implementation status.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-09-22  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* freeze.adb (Check_Component_Storage_Order): Give a specific error
+ 	message for non-byte-aligned component in the packed case.  Replace
+ 	"composite" with "record" in both cases.
+ 
+ 2021-09-22  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnarl/a-tasini.ads, libgnarl/a-tasini.adb: Make compatible
+ 	with No_Elaboration_Code_All.
+ 	* libgnarl/s-taskin.ads, libgnarl/s-tassta.adb: Adjust
+ 	accordingly.
+ 
+ 2021-09-22  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_ch6.adb (Check_Returns): Change message on missing return.
+ 
+ 2021-09-22  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* gnatfind.adb, gnatxref.adb: Mark these tools as obsolete
+ 	before removing them completely.
+ 
+ 2021-09-22  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (range_cannot_be_superflat): Tweak comments.
+ 
+ 2021-09-21  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* init.c (__gnat_error_handler) [LynxOS]: Add a comment about
+ 	missing optional args.
+ 
+ 2021-09-21  Yannick Moy  <moy@adacore.com>
+ 
+ 	* gen_il-gen.adb (Put_Opt_Subtype): Add suffix.
+ 
+ 2021-09-21  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* sem_util.adb (Accessibility_Level): Remove spurious special
+ 	case for protected type components.
+ 	* exp_ch4.adb (Generate_Accessibility_Check): Use general
+ 	Accessibility_Level instead of the low-level function
+ 	Type_Access_Level.
+ 
+ 2021-09-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2021-09-21  Matthieu Eyraud  <eyraud@adacore.com>
+ 
+ 	* par_sco.adb (Traverse_One): Add support for pragma Invariant /
+ 	Type_Invariant.
+ 
+ 2021-09-21  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen.adb (Put_Opt_Subtype): Print out subtypes of the
+ 	form:
+ 	subtype Opt_N_Declaration is
+ 	Node_Id with Predicate =>
+ 	Opt_N_Declaration = Empty or else
+ 	Opt_N_Declaration in N_Declaration_Id;
+ 	One for each node or entity type, with the predicate allowing
+ 	Empty.
+ 	* atree.adb (Parent, Set_Parent): Remove unnecessary "Atree.".
+ 
+ 2021-09-21  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* bindgen.adb (Gen_Adainit): For targets that suppress the
+ 	standard library: set the default stack size global variable if
+ 	a value is provided via the -d switch, and generate a call to
+ 	__gnat_initialize_stack_limit if stack checking using stack
+ 	limits is enabled.
+ 
+ 2021-09-21  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_ch13.adb (Stream_Size): Print message about allowed stream
+ 	sizes even if other error were already found. This avoids
+ 	falling into the 'else', which prints "Stream_Size cannot be
+ 	given for...", which is misleading -- the Size COULD be given if
+ 	it were correct.
+ 
+ 2021-09-21  Daniel Mercier  <mercier@adacore.com>
+ 
+ 	* exp_util.adb (Build_Temporary): In case of an external DISCR
+ 	symbol, set the related expression for CodePeer so that a more
+ 	comprehensible message can be emitted to the user.
+ 
+ 2021-09-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-dwalin.adb (Parse_Header): Tweak comments.
+ 	(Read_Entry_Format_Array): Tweak exception message.
+ 	(Symbolic_Address.Set_Result): Likewise.
+ 
+ 2021-09-21  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_ch7.adb (Make_Init_Call): Add guard to protect against a
+ 	missing initialization procedure for a type.
+ 
+ 2021-09-21  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* Makefile.rtl: Remove unused VxWorks sections.
+ 	* libgnarl/s-vxwext__noints.adb: Remove.
+ 	* libgnarl/s-vxwext__vthreads.ads: Remove.
+ 	* libgnat/a-elchha__vxworks-ppc-full.adb: Remove.
+ 	* libgnat/s-osprim__vxworks.adb: Remove.
+ 	* libgnat/s-osvers__vxworks-653.ads: Remove.
+ 	* libgnat/system-vxworks-e500-vthread.ads: Remove.
+ 	* libgnat/system-vxworks-ppc-vthread.ads: Remove.
+ 	* libgnat/system-vxworks-x86-vthread.ads: Remove.
+ 
+ 2021-09-21  Bob Duff  <duff@adacore.com>
+ 
+ 	* uintp.ads, uintp.adb (UI_Is_In_Int_Range): Change the type of
+ 	the formal parameter to Valid_Uint. Remove code that preserved
+ 	the previous behavior, and replace it with an assertion. The
+ 	previous behavior is no longer needed given the recent change to
+ 	gigi.
+ 	(No, Present): Add comment.
+ 
+ 2021-09-21  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_eval.adb (Fold_Shift): Replace an if_expression with an
+ 	if_statement.
+ 
+ 2021-09-21  Bob Duff  <duff@adacore.com>
+ 
+ 	* uintp.ads, uintp.adb: Add assertions.
+ 	(Ubool, Opt_Ubool): New "boolean" subtypes.
+ 	(UI_Is_In_Int_Range): The parameter should probably be
+ 	Valid_Uint, but we don't change that for now, because it causes
+ 	failures in gigi.
+ 	* sem_util.ads, sem_util.adb (Is_True, Is_False,
+ 	Static_Boolean): Use Opt_Ubool subtype.  Document the fact that
+ 	Is_True (No_Uint) = True.  Implement Is_False in terms of
+ 	Is_True.  We considered changing Static_Boolean to return Uint_1
+ 	in case of error, but that doesn't fit in well with
+ 	Static_Integer.
+ 	(Has_Compatible_Alignment_Internal): Deal with cases where Offs
+ 	is No_Uint. Change one "and" to "and then" to ensure we don't
+ 	pass No_Uint to ">", which would violate the new assertions.
+ 	* exp_util.adb, freeze.adb, sem_ch13.adb: Avoid violating new
+ 	assertions in Uintp.
+ 
+ 2021-09-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-dwalin.adb (To_File_Name): Fetch only the last string
+ 	from the .debug_line_str section.
+ 	(Symbolic_Address.Set_Result): Likewise.
+ 
+ 2021-09-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-dwalin.adb (Skip_Form): Fix cases of DW_FORM_addrx
+ 	and DW_FORM_implicit_const.  Replace Constraint_Error with
+ 	Dwarf_Error.
+ 
+ 2021-09-21  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* exp_pakd.adb (Expand_Packed_Not): Replace expression with
+ 	statement.
+ 
+ 2021-09-21  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_eval.adb (Is_Static_Subtype): Take predicates created
+ 	through "predicate" pragma into account.
+ 
+ 2021-09-21  Frederic Konrad  <konrad@adacore.com>
+ 
+ 	* Makefile.rtl (aarch64-rtems*): Add GNATRTL_128BIT_PAIRS to
+ 	the LIBGNAT_TARGET_PAIRS list and also GNATRTL_128BIT_OBJS to
+ 	the EXTRA_GNATRTL_NONTASKING_OBJS list.
+ 
+ 2021-09-21  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch4.adb (Remove_Abstract_Operations): Add condition to
+ 	test for an E_Operator as part of criteria for setting
+ 	Abstract_Op on interpretations involving predefined operators.
+ 
+ 2021-09-21  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* exp_ch6.adb (Expand_Simple_Function_Return): For explicit
+ 	dereference of type conversion, enable code that ensures that
+ 	the tag of the result is that of the result type.
+ 
+ 2021-09-21  Bob Duff  <duff@adacore.com>
+ 
+ 	* einfo-utils.adb: Add support (currently disabled) for using
+ 	"initial zero" instead of "Uint_0" to represent "unknown".  Call
+ 	Known_ functions, instead of evilly duplicating their code
+ 	inline.
+ 	* fe.h (No_Uint_To_0): New function to convert No_Uint to
+ 	Uint_0, in order to preserve existing behavior.
+ 	(Copy_Esize, Copy_RM_Size): New imports from Einfo.Utils.
+ 	* cstand.adb: Set size fields of Standard_Debug_Renaming_Type
+ 	and Standard_Exception_Type.
+ 	* checks.adb, exp_attr.adb, exp_ch3.adb, exp_ch5.adb,
+ 	exp_ch6.adb, exp_pakd.adb, exp_util.adb, freeze.adb, itypes.adb,
+ 	layout.adb, repinfo.adb, sem_attr.adb, sem_ch12.adb,
+ 	sem_ch13.adb, sem_ch13.ads, sem_ch3.adb, sem_ch7.adb,
+ 	sem_util.adb: Protect calls with Known_..., use Copy_...  Remove
+ 	assumption that Uint_0 represents "unknown".
+ 	* types.ads (Nonzero_Int): New subtype.
+ 	* gcc-interface/decl.c, gcc-interface/trans.c: Protect calls
+ 	with Known_... and use Copy_...  as appropriate, to avoid
+ 	blowing up in unknown cases. Similarly, call No_Uint_To_0 to
+ 	preserve existing behavior.
+ 
+ 2021-09-21  Steve Baird  <baird@adacore.com>
+ 
+ 	* sem_ch13.adb (Analyze_Aspect_Specifications): Add a new nested
+ 	function, Directly_Specified, and then use it in the
+ 	implementation of the required check.
+ 
+ 2021-09-21  Steve Baird  <baird@adacore.com>
+ 
+ 	* libgnat/a-costso.ads, libgnat/a-costso.adb: A new library
+ 	unit, Ada.Containers.Stable_Sorting, which exports a pair of
+ 	generics (one within the other) which are instantiated by each
+ 	of the 5 doubly-linked list container generics to implement
+ 	their respective Sort procedures. We use a pair of generics,
+ 	rather than a single generic, in order to further reduce code
+ 	duplication. The outer generic takes a formal private Node_Ref
+ 	type representing a reference to a linked list element. For some
+ 	instances, the corresponding actual parameter will be an access
+ 	type; for others, it will be the index type for an array.
+ 	* Makefile.rtl: Include new Ada.Containers.Stable_Sorting unit.
+ 	* libgnat/a-cbdlli.adb, libgnat/a-cdlili.adb,
+ 	libgnat/a-cfdlli.adb, libgnat/a-cidlli.adb, libgnat/a-crdlli.adb
+ 	(Sort): Replace existing Sort implementation with a call to an
+ 	instance of
+ 	Ada.Containers.Stable_Sorting.Doubly_Linked_List_Sort. Declare
+ 	the (trivial) actual parameters needed to declare that instance.
+ 	* libgnat/a-cfdlli.ads: Fix a bug encountered during testing in
+ 	the postcondition for M_Elements_Sorted. With a partial
+ 	ordering, it is possible for all three of (X < Y), (Y < X),
+ 	and (X = Y) to be simultaneously false, so that case needs to
+ 	handled correctly.
+ 
+ 2021-09-21  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* errout.adb (Error_Msg_Internal): Fix references to Sptr and
+ 	Optr in comment; fix grammar of "low-level" where it is used as
+ 	an adjective.
+ 
+ 2021-09-21  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* errout.adb (Write_Source_Code_Lines): Use Cur_Loc before
+ 	incrementing it, so that we don't need to decrement it.
+ 
+ 2021-09-21  Yannick Moy  <moy@adacore.com>
+ 
+ 	* errout.adb (Get_Line_End): Do not allow the result to go past
+ 	the end of the buffer.
+ 
+ 2021-09-21  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_ch3.adb (Process_Discriminant_Expressions): If the
+ 	constraint is for a Component_Definition that appears in a
+ 	Component_Declaration, the entity to be used to create the
+ 	potentially global symbol is the Defining_Identifier of the
+ 	Component_Declaration.
+ 
+ 2021-09-21  Bob Duff  <duff@adacore.com>
+ 
+ 	* libgnat/a-stbufi.ads, libgnat/a-stbufi.adb: Change all
+ 	occurrences of GNAT.OS_Lib to System.OS_Lib.
+ 
+ 2021-09-20  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* inline.adb (Has_Excluded_Declaration): Remove redundant guard;
+ 	the guarded code will call First on a No_List, which is
+ 	well-defined and gives Empty.
+ 
+ 2021-09-20  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* inline.adb (Has_Excluded_Declaration): Rename and reduce scope
+ 	of a local variable.
+ 
+ 2021-09-20  Bob Duff  <duff@adacore.com>
+ 
+ 	* uintp.ads, uintp.adb (Present, No): New functions for
+ 	comparing with No_Uint.
+ 	* checks.adb, einfo-utils.adb, exp_aggr.adb, exp_attr.adb,
+ 	exp_ch3.adb, exp_ch4.adb, exp_dbug.adb, exp_disp.adb,
+ 	exp_util.adb, repinfo.adb, repinfo-input.adb, scn.adb,
+ 	sem_attr.adb, sem_ch13.adb, sem_eval.adb, sem_util.adb,
+ 	sinfo-utils.adb, treepr.adb: Use Present (...) instead of "...
+ 	/= No_Uint", and No (...) instead of "... = No_Uint".
+ 
+ 2021-09-20  Claire Dross  <dross@adacore.com>
+ 
+ 	* libgnat/s-ficobl.ads: The entire package has a SPARK_Mode =>
+ 	Off aspect.
+ 
+ 2021-09-20  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* libgnat/a-calend.adb: Remove time_t, replace with OS_Time.
+ 	* libgnat/s-os_lib.ads: Fix comments regarding time_t conversion
+ 	functions to reflect the use of To_Ada in in Ada.Calendar
+ 	package body.
+ 	* sysdep.c (__gnat_localtime_tzoff): Use OS_Time instead of
+ 	time_t.
+ 
+ 2021-09-20  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.adb (Resolve_Actual): Remove
+ 
+ 2021-09-20  Bob Duff  <duff@adacore.com>
+ 
+ 	* einfo-utils.ads, einfo-utils.adb, fe.h, einfo.ads,
+ 	gen_il-fields.ads: Remove unused and no-longer-used routines.
+ 	Move related routines together.  Rewrite incorrect
+ 	documentation, and documentation that will be incorrect when
+ 	e.g. Esize-related routines are fixed.  Remove unused field
+ 	Normalized_Position_Max.
+ 	* cstand.adb, exp_pakd.adb, freeze.adb,
+ 	gen_il-gen-gen_entities.adb, itypes.adb, layout.adb,
+ 	sem_ch10.adb, sem_ch12.adb, sem_ch13.adb, sem_ch3.adb,
+ 	sem_ch7.adb, sem_ch8.adb, sem_ch9.adb, sem_prag.adb,
+ 	sem_util.adb, ttypes.ads: Update calls to routines removed from
+ 	or renamed in Einfo.Utils.
+ 	* uintp.ads (Upos): Fix this subtype, which was unintentionally
+ 	declared to include Uint_0.
+ 
+ 2021-09-20  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch7.adb (Expand_N_Package_Declaration): Fix wording in
+ 	comment.
+ 	* exp_disp.adb (Mark_DT): Remove unnecessary initialization of
+ 	I_Depth.
+ 
+ 2021-09-20  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* contracts.adb (Add_Contract_Item): Accept volatile-related
+ 	properties on constants.
+ 	(Analyze_Object_Contract): Check external properties on
+ 	constants; accept volatile constants.
+ 	(Check_Type_Or_Object_External_Properties): Replace "variable"
+ 	with "object" in error messages; replace Decl_Kind with a local
+ 	constant.
+ 	* sem_prag.adb (Analyze_Pragma): Accept volatile-related
+ 	properties on constants.
+ 
+ 2021-09-20  Pierre-Alexandre Bazin  <bazin@adacore.com>
+ 
+ 	* libgnat/a-strfix.adb ("*"): Added loop invariants and lemmas
+ 	for proof.
+ 	(Delete): Added assertions for proof, and conditions to avoid
+ 	overflow.
+ 	(Head): Added loop invariant.
+ 	(Insert): Same as Delete.
+ 	(Move): Declared with SPARK_Mode Off.
+ 	(Overwrite): Added assertions for proof, and conditions to avoid
+ 	overflow.
+ 	(Replace_Slice): Added assertions for proof, and conditions to
+ 	avoid overflow.
+ 	(Tail): Added loop invariant and avoided overflows.
+ 	(Translate): Added loop invariants.
+ 	(Trim): Ensured empty strings returned start at 1.
+ 	* libgnat/a-strfix.ads (Index): Rewrote contract cases for
+ 	easier proof.
+ 	(Index_Non_Blank): Separated the null string case.
+ 	(Count): Specified Mapping shouldn't be null.
+ 	(Find_Token): Specified Source'First should be Positive when no
+ 	From is given.
+ 	(Translate): Specified Mapping shouldn't be null.
+ 	("*"): Rewrote postcondition for easier proof.
+ 	* libgnat/a-strsea.adb (Belongs): Added postcondition.
+ 	(Count): Rewrote loops and added loop invariants to avoid
+ 	overflows.
+ 	(Find_Token): Added loop invariants.
+ 	(Index): Rewrote loops to avoid overflows and added loop
+ 	invariants for proof.
+ 	(Index_Non_Blank): Added loop invariants.
+ 	(Is_Identity): New function isolated without SPARK_Mode.
+ 	* libgnat/a-strsea.ads: Fix starting comment as package is no
+ 	longer private.
+ 	(Match): Declared ghost expression function Match.
+ 	(Is_Identity): Described identity in the postcondition.
+ 	(Index, Index_Non_Blank, Count, Find_Token): Added contract from
+ 	a-strfix.ads.
+ 
+ 2021-09-20  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch13.adb (Resolve_Aspect_Aggregate): Move comments after
+ 	specs; fix typo in header box; cleanup whitespace.
+ 
+ 2021-09-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-objrea.adb (Get_Load_Address): Return 0 for ELF.
+ 
+ 2021-09-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* adaint.c (__gnat_get_executable_load_address): Add Win32 support.
+ 	* libgnat/s-objrea.ads (Get_Xcode_Bounds): Fix typo in comment.
+ 	(Object_File): Minor reformatting.
+ 	(ELF_Object_File): Uncomment predicate.
+ 	(PECOFF_Object_File): Likewise.
+ 	(XCOFF32_Object_File): Likewise.
+ 	* libgnat/s-objrea.adb: Minor reformatting throughout.
+ 	(Get_Load_Address): Implement for PE-COFF.
+ 	* libgnat/s-dwalin.ads: Remove clause for System.Storage_Elements
+ 	and use consistent wording in comments.
+ 	(Dwarf_Context): Set type of Low, High and Load_Address to Address.
+ 	* libgnat/s-dwalin.adb (Get_Load_Displacement): New function.
+ 	(Is_Inside): Call Get_Load_Displacement.
+ 	(Low_Address): Likewise.
+ 	(Open): Adjust to type change.
+ 	(Aranges_Lookup): Change type of Addr to Address.
+ 	(Read_Aranges_Entry): Likewise for Start and adjust.
+ 	(Enable_Cach): Adjust to type change.
+ 	(Symbolic_Address): Change type of Addr to Address.
+ 	(Symbolic_Traceback): Call Get_Load_Displacement.
+ 
+ 2021-09-20  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_disp.adb (Make_DT): Move call to Set_Has_Dispatch_Table,
+ 	so it is executed regardless of the Generate_SCIL mode.
+ 
+ 2021-09-20  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_util.ads (Force_Evaluation): Add formal parameter
+ 	Discr_Number, to indicate discriminant expression for which an
+ 	external name must be created.
+ 	(Remove_Side_Effects): Ditto.
+ 	* exp_util.adb (Force_Evaluation): Call Remove_Side_Effects with
+ 	added parameter.
+ 	(Remove_Side_Effects, Build_Temporary): If Discr_Number is
+ 	positive, create an external name with suffix DISCR and the
+ 	given discriminant number, analogous to what is done for
+ 	temporaries for array type bounds.
+ 	* sem_ch3.adb (Process_Discriminant_Expressions): If the
+ 	constraint is for an object or component declaration and the
+ 	corresponding entity may be visible in another unit, invoke
+ 	Force_Evaluation with the new parameter.
+ 
+ 2021-09-20  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* gen_il-internals.ads (Invalid_Val): Remove, unused and
+ 	generates warnings.
+ 
+ 2021-09-20  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_aggr.adb, exp_ch4.adb, exp_ch5.adb, sprint.adb: Refine
+ 	types of local constants.
+ 
+ 2021-09-20  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* exp_attr.adb (Expand_N_Attribute_Reference): Fold
+ 	Preelaborable_Initialization attribute in cases where it hasn't
+ 	been folded by the analyzer.
+ 	* exp_disp.adb (Original_View_In_Visible_Part): This function is
+ 	removed and moved to sem_util.adb.
+ 	* sem_attr.adb (Attribute_22): Add
+ 	Attribute_Preelaborable_Initialization as an Ada 2022 attribute.
+ 	(Analyze_Attribute, Attribute_Preelaborable_Initialization):
+ 	Check that the prefix of the attribute is either a formal
+ 	private or derived type, or a composite type declared within the
+ 	visible part of a package or generic package.
+ 	(Eval_Attribute): Perform folding of
+ 	Preelaborable_Initialization attribute based on
+ 	Has_Preelaborable_Initialization applied to the prefix type.
+ 	* sem_ch3.adb (Resolve_Aspects): Add specialized code for
+ 	Preelaborable_Initialization used at the end of a package
+ 	visible part for setting Known_To_Have_Preelab_Init on types
+ 	that are specified with True or that have a conjunction of one
+ 	or more P_I attributes applied to formal types.
+ 	* sem_ch7.adb (Analyze_Package_Specification): On call to
+ 	Has_Preelaborable_Initialization, pass True for new formal
+ 	Formal_Types_Have_Preelab_Init, so that error checking treats
+ 	subcomponents that are declared within types in generics as
+ 	having preelaborable initialization when the subcomponents are
+ 	of formal types.
+ 	* sem_ch13.adb (Analyze_Aspects_At_Freeze_Point): Add test for
+ 	P_I to prevent calling Make_Pragma_From_Boolean_Aspect, since
+ 	this aspect is handled specially and the
+ 	Known_To_Have_Preelab_Init flag will get set on types that have
+ 	the aspect by other means.
+ 	(Analyze_Aspect_Specifications.Analyze_One_Aspect): Add test for
+ 	Aspect_Preelaborable_Initialization for allowing the aspect to
+ 	be specified on formal type declarations.
+ 	(Is_Operational_Item): Treat Attribute_Put_Image as an
+ 	operational attribute.  The need for this was encountered while
+ 	working on these changes.
+ 	* sem_util.ads (Has_Preelaborable_Initialization): Add
+ 	Formal_Types_Have_Preelab_Init as a new formal parameter that
+ 	defaults to False.
+ 	(Is_Conjunction_Of_Formal_Preelab_Init_Attributes): New
+ 	function.
+ 	(Original_View_In_Visible_Part): Moved here from exp_disp.adb,
+ 	so it can be called by Analyze_Attribute.
+ 	* sem_util.adb (Has_Preelaborable_Initialization): Return True
+ 	for formal private and derived types when new formal
+ 	Formal_Types_Have_Preelab_Init is True, and pass along the
+ 	Formal_Types_Have_Preelab_Init flag in the array component case.
+ 	(Check_Components): Pass along Formal_Types_Have_Preelab_Init
+ 	flag on call to Has_Preelaborable_Initialization.
+ 	(Is_Conjunction_Of_Formal_Preelab_Init_Attributes): New function
+ 	that returns True when passed an expression that includes one or
+ 	more attributes for Preelaborable_Initialization applied to
+ 	prefixes that denote formal types.
+ 	(Is_Formal_Preelab_Init_Attribute): New utility function nested
+ 	within Is_Conjunction_Of_Formal_Preelab_Init_Attributes that
+ 	determines whether a node is a P_I attribute applied to a
+ 	generic formal type.
+ 	(Original_View_In_Visible_Part): Moved here from exp_util.adb,
+ 	so it can be called by Analyze_Attribute.
+ 	* snames.ads-tmpl: Add note near the start of spec giving
+ 	details about what needs to be done when adding a name that
+ 	corresponds to both an attribute and a pragma.  Delete existing
+ 	occurrence of Name_Preelaborable_Initialization, and add a note
+ 	comment in the list of Name_* constants at that place,
+ 	indicating that it's included in type Pragma_Id, etc., echoing
+ 	other such comments for names that are both an attribute and a
+ 	pragma.  Insert Name_Preelaborable_Initialization in the
+ 	alphabetized set of Name_* constants corresponding to
+ 	attributes (between First_Attribute_Name and
+ 	Last_Attribute_Name).
+ 	(type Attribute_Id): Add new literal
+ 	Attribute_Preelaborable_Initialization.
+ 	(type Pragma_Id): Move Pragma_Preelaborable_Initialization from
+ 	its current position to the end of the type, in the special set
+ 	of pragma literals that have corresponding atttributes. Add to
+ 	accompanying comment, indicating that functions Get_Pragma_Id
+ 	and Is_Pragma_Name need to be updated when adding a pragma
+ 	literal to the special set.
+ 	* snames.adb-tmpl (Get_Pragma_Id): Add case alternative for
+ 	Pragma_Preelaborable_Initialization.
+ 	(Is_Pragma_Name): Add test for
+ 	Name_Preelaborable_Initialization.
+ 
+ 2021-09-20  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_ch4.adb (Finc_Non_Universal_Interpretations): Fix check.
+ 
+ 2021-09-20  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Build_Discriminant_Constraints): Exit once a
+ 	first discriminant is found and the Discrim_Present flag is set.
+ 
+ 2021-09-20  Bob Duff  <duff@adacore.com>
+ 
+ 	* gnat1drv.adb (Gnat1drv): Avoid calling List_Rep_Info in
+ 	Generate_SCIL and GNATprove_Mode.
+ 	* repinfo.adb (List_Common_Type_Info): Fix comment.
+ 
+ 2021-09-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-dwalin.ads: Remove clause for Ada.Exceptions.Traceback,
+ 	add clause for System.Traceback_Entries and alphabetize.
+ 	(AET): Delete.
+ 	(STE): New package renaming.
+ 	(Symbolic_Traceback): Adjust.
+ 	* libgnat/s-dwalin.adb: Remove clauses for Ada.Exceptions.Traceback
+ 	and System.Traceback_Entries.
+ 	(Symbolic_Traceback): Adjust.
+ 
+ 2021-09-20  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_ch4.adb (Find_Non_Universal_Interpretations): Check if
+ 	types are compatible before adding interpretation.
+ 
+ 2021-09-20  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_Type_Conversion): Add guard to protect
+ 	against calculating accessibility levels against internal
+ 	compiler-generated types.
+ 
+ 2021-09-20  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_dim.adb (Dimensions_Msg_Of): Capitalize comment.
+ 
+ 2021-09-20  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* adabkend.adb (Scan_Back_End_Switches): Replace switch-scanning
+ 	logic with call to Backend_Utils.Scan_Common_Back_End_Switches.
+ 	* back_end.adb (Scan_Back_End_Switches): Replace switch-scanning
+ 	logic with call to Backend_Utils.Scan_Common_Back_End_Switches.
+ 	* backend_utils.adb: New file.
+ 	* backend_utils.ads: New file.
+ 	* gcc-interface/Make-lang.in: Add ada/backend_utils.o.
+ 
+ 2021-09-20  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* atree.adb (Get_32_Bit_Field): Declare result before returning.
+ 
+ 2021-09-20  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* exp_ch7.adb (Expand_N_Package_Body): Replace
+ 	Build_And_Insert_Cuda_Initialization with Expand_CUDA_Package.
+ 	* gnat_cuda.adb (Expand_CUDA_Package): New procedure.
+ 	(Build_And_Insert_Cuda_Initialization): Make internal.
+ 	* gnat_cuda.ads (Expand_CUDA_Package): New procedure.
+ 	(Build_And_Insert_Cuda_Initialization): Remove from spec.
+ 
+ 2021-09-20  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* usage.adb (Usage): Update -gnatw.c messages.
+ 
+ 2021-09-20  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_aux.adb (Is_By_Reference_Type): Do not test Error_Posted.
+ 
+ 2021-09-15  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc-interface/utils.c: Include opts.h.
+ 	(handle_zero_call_used_regs_attribute): New.
+ 	(gnat_internal_attribute_table): Add zero_call_used_regs.
+ 
+ 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/101970
+ 	* exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Enum_Rep>:
+ 	Use an unchecked conversion instead of a regular conversion in the
+ 	enumeration case and remove Conversion_OK flag in the integer case.
+ 	<Attribute_Pos>: Remove superfluous test.
+ 
+ 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (validate_size): Do not issue an error if the
+ 	old size has overflowed.
+ 
+ 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity): For vector types, make
+ 	the representative array the debug type.
+ 
+ 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_subprog_type): Turn variable
+ 	into constant.  Capitalize GCC in warning message.
+ 	(intrin_arglists_compatible_p): Change parameter to pointer-to-const
+ 	Adjust warning messages.  Turn warning into error for vector types.
+ 	(intrin_return_compatible_p): Likewise.
+ 	(intrin_profiles_compatible_p): Change parameter to pointer-to-const
+ 
+ 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-atopri.ads (bool): Delete.
+ 	(Atomic_Test_And_Set): Replace bool with Boolean.
+ 	(Atomic_Always_Lock_Free): Likewise.
+ 	* libgnat/s-aoinar.adb (Is_Lock_Free): Adjust.
+ 	* libgnat/s-aomoar.adb (Is_Lock_Free): Likewise.
+ 	* libgnat/s-aotase.adb (Atomic_Test_And_Set): Likewise.
+ 	* libgnat/s-atopex.adb (Atomic_Compare_And_Exchange): Likewise.
+ 	* gcc-interface/decl.c: Include gimple-expr.h.
+ 	(intrin_types_incompatible_p): Delete.
+ 	(intrin_arglists_compatible_p): Call types_compatible_p.
+ 	(intrin_return_compatible_p): Likewise.
+ 
+ 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/utils.c (update_pointer_to): Set TYPE_CANONICAL on
+ 	pointer and reference types.
+ 
+ 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/101385
+ 	* doc/gnat_ugn/building_executable_programs_with_gnat.rst
+ 	(-Wall): Minor fixes.
+ 	(-w): Likewise.
+ 	(-Werror): Document that it also sets -gnatwe by default.
+ 	* gcc-interface/lang-specs.h (ada): Expand -gnatwe if -Werror is
+ 	passed and move expansion of -gnatw switches to before -gnatez.
+ 
+ 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/utils.c (can_materialize_object_renaming_p): Do not
+ 	call UI_Is_In_Int_Range on the result of Normalized_First_Bit.
+ 
+ 2021-09-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity) <is_type>: Declare new
+ 	constant.  Adjust error message issued by validate_size in the case
+ 	of by-reference types.
+ 	(validate_size): Always use the error strings passed by the caller.
+ 
+ 2021-09-08  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* gcc-interface/misc.c (gnat_post_options): Issue an error for
+ 	-fexcess-precision=16.
+ 
+ 2021-08-19  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	PR ada/101924
+ 	* gcc-interface/Make-lang.in (STAGE1_LIBS): Define on hpux.
+ 
+ 2021-08-18  Eric Botcazou  <ebotcazou@gcc.gnu.org>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity) <discrete_type>: Fix
+ 	thinko in latest change.
+ 
+ 2021-08-11  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+ 
+ 	PR debug/101598
+ 	* gcc-interface/trans.c (Subprogram_Body_to_gnu): Set the
+ 	DECL_SOURCE_LOCATION of DECL_IGNORED_P gnu_subprog_decl to
+ 	UNKNOWN_LOCATION.
+ 
+ 2021-07-25  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/s-osprim__x32.adb: Add missing with clause.
+ 
+ 2021-07-12  Pierre-Marie de Rodat  <derodat@adacore.com>
+ 
+ 	* adaint.c (__gnat_number_of_cpus): Replace "#ifdef" by "#if
+ 	defined".
+ 
+ 2021-07-12  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity) <discrete_type>: Add a
+ 	parallel type only when -fgnat-encodings=all is specified.
+ 	<E_Array_Type>: Use the PAT name and special suffixes only when
+ 	-fgnat-encodings=all is specified.
+ 	<E_Array_Subtype>: Build a special type for debugging purposes only
+ 	when -fgnat-encodings=all is specified.  Add a parallel type or use
+ 	the PAT name only when -fgnat-encodings=all is specified.
+ 	<E_Record_Type>: Generate debug info for the inner record types only
+ 	when -fgnat-encodings=all is specified.
+ 	<E_Record_Subtype>: Use a debug type for an artificial subtype only
+ 	except when -fgnat-encodings=all is specified.
+ 	(elaborate_expression_1): Reset need_for_debug when possible only
+ 	except when -fgnat-encodings=all is specified.
+ 	(components_to_record): Use XV encodings for variable size only
+ 	when -fgnat-encodings=all is specified.
+ 	(associate_original_type_to_packed_array): Add a parallel type only
+ 	when -fgnat-encodings=all is specified.
+ 	* gcc-interface/misc.c (gnat_get_array_descr_info): Do not return
+ 	full information only when -fgnat-encodings=all is specified.
+ 	* gcc-interface/utils.c (make_packable_type): Add a parallel type
+ 	only when -fgnat-encodings=all is specified.
+ 	(maybe_pad_type): Make the inner type a debug type only except when
+ 	-fgnat-encodings=all is specified.  Create an XVS type for variable
+ 	size only when -fgnat-encodings=all is specified.
+ 	(rest_of_record_type_compilation): Add a parallel type only when
+ 	-fgnat-encodings=all is specified.
+ 
+ 2021-07-12  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Use a
+ 	fixed lower bound if the index subtype is marked so, as well as a
+ 	more efficient formula for the upper bound if the array cannot be
+ 	superflat.
+ 	(flb_cannot_be_superflat): New predicate.
+ 	(cannot_be_superflat): Rename into...
+ 	(range_cannot_be_superfla): ...this.  Minor tweak.
+ 
+ 2021-07-12  Bob Duff  <duff@adacore.com>
+ 
+ 	* uintp.ads, types.h: New subtypes of Uint: Valid_Uint, Unat,
+ 	Upos, Nonzero_Uint with predicates. These correspond to new
+ 	field types in Gen_IL.
+ 	* gen_il-types.ads (Valid_Uint, Unat, Upos, Nonzero_Uint): New
+ 	field types.
+ 	* einfo-utils.ads, einfo-utils.adb, fe.h (Known_Alignment,
+ 	Init_Alignment): Use the initial zero value to represent
+ 	"unknown". This will ensure that if Alignment is called before
+ 	Set_Alignment, the compiler will blow up (if assertions are
+ 	enabled).
+ 	* atree.ads, atree.adb, atree.h, gen_il-gen.adb
+ 	(Get_Valid_32_Bit_Field): New generic low-level getter for
+ 	subtypes of Uint.
+ 	(Copy_Alignment): New procedure to copy Alignment field even
+ 	when Unknown.
+ 	(Init_Object_Size_Align, Init_Size_Align): Do not bypass the
+ 	Init_ procedures.
+ 	* exp_pakd.adb, freeze.adb, layout.adb, repinfo.adb,
+ 	sem_util.adb: Protect calls to Alignment with Known_Alignment.
+ 	Use Copy_Alignment when it might be unknown.
+ 	* gen_il-gen-gen_entities.adb (Alignment,
+ 	String_Literal_Length): Use type Unat instead of Uint, to ensure
+ 	that the field is always Set_ before we get it, and that it is
+ 	set to a nonnegative value.
+ 	(Enumeration_Pos): Unat.
+ 	(Enumeration_Rep): Valid_Uint. Can be negative, but must be
+ 	valid before fetching.
+ 	(Discriminant_Number): Upos.
+ 	(Renaming_Map): Remove.
+ 	* gen_il-gen-gen_nodes.adb (Char_Literal_Value, Reason): Unat.
+ 	(Intval, Corresponding_Integer_Value): Valid_Uint.
+ 	* gen_il-internals.ads: New functions for dealing with special
+ 	defaults and new subtypes of Uint.
+ 	* scans.ads: Correct comments.
+ 	* scn.adb (Post_Scan): Do not set Intval to No_Uint; that is no
+ 	longer allowed.
+ 	* sem_ch13.adb (Analyze_Enumeration_Representation_Clause): Do
+ 	not set Enumeration_Rep to No_Uint; that is no longer allowed.
+ 	(Offset_Value): Protect calls to Alignment with Known_Alignment.
+ 	* sem_prag.adb (Set_Atomic_VFA): Do not use Uint_0 to mean
+ 	"unknown"; call Init_Alignment instead.
+ 	* sinfo.ads: Minor comment fix.
+ 	* treepr.adb: Deal with printing of new field types.
+ 	* einfo.ads, gen_il-fields.ads (Renaming_Map): Remove.
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity): Use Known_Alignment
+ 	before calling Alignment. This preserve some probably buggy
+ 	behavior: if the alignment is not set, it previously defaulted
+ 	to Uint_0; we now make that explicit.  Use Copy_Alignment,
+ 	because "Set_Alignment (Y, Alignment (X));" no longer works when
+ 	the Alignment of X has not yet been set.
+ 	* gcc-interface/trans.c (process_freeze_entity): Use
+ 	Copy_Alignment.
+ 
+ 2021-07-12  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-dwalin.ads: Adjust a few comments left and right.
+ 	(Line_Info_Register): Comment out unused components.
+ 	(Line_Info_Header): Add DWARF 5 support.
+ 	(Dwarf_Context): Likewise.  Rename "prologue" into "header".
+ 	* libgnat/s-dwalin.adb: Alphabetize "with" clauses.
+ 	(DWARF constants): Add DWARF 5 support and reorder.
+ 	(For_Each_Row): Adjust.
+ 	(Initialize_Pass): Likewise.
+ 	(Initialize_State_Machine): Likewise and fix typo.
+ 	(Open): Add DWARF 5 support.
+ 	(Parse_Prologue): Rename into...
+ 	(Parse_Header): ...this and add DWARF 5 support.
+ 	(Read_And_Execute_Isn): Rename into...
+ 	(Read_And_Execute_Insn): ...this and adjust.
+ 	(To_File_Name): Change parameter name and add DWARF 5 support.
+ 	(Read_Entry_Format_Array): New procedure.
+ 	(Skip_Form): Add DWARF 5 support and reorder.
+ 	(Seek_Abbrev): Do not count entries and add DWARF 5 support.
+ 	(Debug_Info_Lookup): Add DWARF 5 support.
+ 	(Symbolic_Address.Set_Result): Likewise.
+ 	(Symbolic_Address): Adjust.
+ 
+ 2021-07-12  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_ch13.adb (Duplicate_Clause): Add a helper routine
+ 	Check_One_Attr, with a parameter for the attribute_designator we
+ 	are looking for, and one for the attribute_designator of the
+ 	current node (which are usually the same). For Size and
+ 	Value_Size, call it twice, once for each.
+ 	* errout.ads: Fix a typo.
+ 
+ 2021-07-12  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_imgv.adb (Expand_Image_Attribute): Move rewriting to
+ 	attribute Put_Image to the beginning of expansion of attribute
+ 	Image.
+ 
+ 2021-07-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/utils.c (finish_subprog_decl): Remove obsolete line.
+ 
+ 2021-07-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_put_image.adb (Make_Put_Image_Name): Fix style.
+ 	(Image_Should_Call_Put_Image): Likewise.
+ 	(Build_Image_Call): Likewise.
+ 
+ 2021-07-09  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* par-ch6.adb (Contains_Import_Aspect): New function.
+ 	(P_Subprogram): Acknowledge `Import` aspects.
+ 
+ 2021-07-09  Bob Duff  <duff@adacore.com>
+ 
+ 	* exp_put_image.adb (Make_Component_Attributes): Use
+ 	Implementation_Base_Type to get the parent type. Otherwise,
+ 	Parent_Type_Decl is actually an internally generated subtype
+ 	declaration, so we blow up on
+ 	Type_Definition (Parent_Type_Decl).
+ 
+ 2021-07-09  Dmitriy Anisimkov  <anisimko@adacore.com>
+ 
+ 	* gsocket.h: Include net/if.h to get IF_NAMESIZE constant.
+ 	* s-oscons-tmplt.c: Define IPV6_FLOWINFO for Linux.
+ 
+ 2021-07-09  Steve Baird  <baird@adacore.com>
+ 
+ 	* libgnat/a-cdlili.adb: Reimplement
+ 	Ada.Containers.Doubly_Linked_Lists.Generic_Sorting.Sort using
+ 	Mergesort instead of the previous Quicksort variant.
+ 
+ 2021-07-09  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* exp_ch6.adb (Is_Build_In_Place_Function_Call): Add check to
+ 	verify the Selector_Name of Exp_Node has been analyzed before
+ 	obtaining its entity.
+ 
+ 2021-07-09  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* libgnarl/s-osinte__vxworks.ads: Fix typo ("release" =>
+ 	"releases") plus comment reformatting.
+ 	* libgnat/s-os_lib.ads: In a comment, fix typo ("indended" =>
+ 	"intended"), add a hyphen and semicolon, plus reformatting. In
+ 	comment for subtype time_t, fix typo ("effect" => "affect"), add
+ 	hyphens, plus reformatting.
+ 	* libgnat/s-parame.ads, libgnat/s-parame__ae653.ads,
+ 	libgnat/s-parame__hpux.ads: Remove period from one-line comment.
+ 
+ 2021-07-09  Steve Baird  <baird@adacore.com>
+ 
+ 	* exp_ch5.adb (Expand_General_Case_Statement): Add new function
+ 	Else_Statements to handle the case of invalid data analogously
+ 	to how it is handled when casing on a discrete value.
+ 	* sem_case.adb (Has_Static_Discriminant_Constraint): A new
+ 	Boolean-valued function.
+ 	(Composite_Case_Ops.Scalar_Part_Count): Include discriminants
+ 	when traversing components.
+ 	(Composite_Case_Ops.Choice_Analysis.Traverse_Discrete_Parts):
+ 	Include discriminants when traversing components; the component
+ 	range for a constrained discriminant is a single value.
+ 	(Composite_Case_Ops.Choice_Analysis.Parse_Choice): Eliminate
+ 	Done variable and modify how Next_Part is computed so that it is
+ 	always correct (as opposed to being incorrect when Done is
+ 	True).  This includes changes in Update_Result (a local
+ 	procedure).  Add new local procedure
+ 	Update_Result_For_Box_Component and call it not just for box
+ 	components but also for "missing" components (components
+ 	associated with an inactive variant).
+ 	(Check_Choices.Check_Composite_Case_Selector.Check_Component_Subtype):
+ 	Instead of disallowing all discriminated component types, allow
+ 	those that are unconstrained or statically constrained. Check
+ 	discriminant subtypes along with other component subtypes.
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst: Update
+ 	documentation to reflect current implementation status.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-07-09  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* sem_ch6.adb (Check_Pragma_Inline): Correctly use
+ 	Corresponding_Spec_Of_Stub when dealing subprogram body stubs.
+ 
+ 2021-07-09  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* Makefile.rtl: Add translations for s-parame__posix2008.ads
+ 	* libgnarl/s-linux.ads: Import System.Parameters.
+ 	(time_t): Declare using System.Parameters.time_t_bits.
+ 	* libgnarl/s-linux__alpha.ads: Likewise.
+ 	* libgnarl/s-linux__android.ads: Likewise.
+ 	* libgnarl/s-linux__hppa.ads: Likewise.
+ 	* libgnarl/s-linux__mips.ads: Likewise.
+ 	* libgnarl/s-linux__riscv.ads: Likewise.
+ 	* libgnarl/s-linux__sparc.ads: Likewise.
+ 	* libgnarl/s-linux__x32.ads: Likewise.
+ 	* libgnarl/s-qnx.ads: Likewise.
+ 	* libgnarl/s-osinte__aix.ads: Likewise.
+ 	* libgnarl/s-osinte__android.ads: Likewise.
+ 	* libgnarl/s-osinte__darwin.ads: Likewise.
+ 	* libgnarl/s-osinte__dragonfly.ads: Likewise.
+ 	* libgnarl/s-osinte__freebsd.ads: Likewise.
+ 	* libgnarl/s-osinte__gnu.ads: Likewise.
+ 	* libgnarl/s-osinte__hpux-dce.ads: Likewise.
+ 	* libgnarl/s-osinte__hpux.ads: Likewise.
+ 	* libgnarl/s-osinte__kfreebsd-gnu.ads: Likewise.
+ 	* libgnarl/s-osinte__lynxos178e.ads: Likewise.
+ 	* libgnarl/s-osinte__qnx.ads: Likewise.
+ 	* libgnarl/s-osinte__rtems.ads: Likewise.
+ 	* libgnarl/s-osinte__solaris.ads: Likewise.
+ 	* libgnarl/s-osinte__vxworks.ads: Likewise.
+ 	* libgnat/g-sothco.ads: Likewise.
+ 	* libgnat/s-osprim__darwin.adb: Likewise.
+ 	* libgnat/s-osprim__posix.adb: Likewise.
+ 	* libgnat/s-osprim__posix2008.adb: Likewise.
+ 	* libgnat/s-osprim__rtems.adb: Likewise.
+ 	* libgnat/s-osprim__x32.adb: Likewise.
+ 	* libgnarl/s-osinte__linux.ads: use type System.Linux.time_t.
+ 	* libgnat/s-os_lib.ads (time_t): Declare as subtype of
+ 	Long_Long_Integer.
+ 	* libgnat/s-parame.ads (time_t_bits): New constant.
+ 	* libgnat/s-parame__ae653.ads (time_t_bits): Likewise.
+ 	* libgnat/s-parame__hpux.ads (time_t_bits): Likewise.
+ 	* libgnat/s-parame__vxworks.ads (time_t_bits): Likewise.
+ 	* libgnat/s-parame__posix2008.ads: New file for 64 bit time_t.
+ 
+ 2021-07-09  Bob Duff  <duff@adacore.com>
+ 
+ 	* comperr.adb (Compiler_Abort): Print source file name.
+ 
+ 2021-07-09  Joffrey Huguet  <huguet@adacore.com>
+ 
+ 	* libgnat/a-strunb.ads, libgnat/a-strunb__shared.ads: Fix layout
+ 	in contracts.
+ 
+ 2021-07-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* repinfo.ads (JSON output format): Document adjusted key name.
+ 	* repinfo.adb (List_Record_Layout): Use Original_Record_Component
+ 	if the normalized position of the component is not known.
+ 	(List_Structural_Record_Layout): Rename Outer_Ent parameter into
+ 	Ext_End and add Ext_Level parameter. In an extension, if the parent
+ 	subtype has static discriminants, call List_Record_Layout on it.
+ 	Output "parent_" prefixes before "variant" according to Ext_Level.
+ 	Adjust recursive calls throughout the procedure.
+ 
+ 2021-07-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_util.ads (Map_Types): Fix typo.
+ 
+ 2021-07-09  Fedor Rybin  <frybin@adacore.com>
+ 
+ 	* krunch.adb: Add safeguards against index range violations.
+ 
+ 2021-07-09  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/a-strfix.adb: Take advantage of extended returns.
+ 
+ 2021-07-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_defined_attributes.rst
+ 	(Scalar_Storage_Order): Add paragraph about representation
+ 	changes.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-07-09  Frederic Konrad  <konrad@adacore.com>
+ 
+ 	* Makefile.rtl (LIBGNAT_TARGET_PAIRS) <aarch64*-*-rtems*>: Use
+ 	the wraplf variant of Aux_Long_Long_Float.
+ 
+ 2021-07-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch6.adb (Analyze_Expression_Function): Initialize Orig_N
+ 	and Typ variables.
+ 
+ 2021-07-09  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_ch13.adb (Resolve_Aspect_Expressions): Use the same
+ 	processing for Predicate, Static_Predicate and
+ 	Dynamic_Predicate. Do not build the predicate function spec.
+ 	Update comments.
+ 	(Resolve_Name): Only reset Entity when necessary to avoid
+ 	spurious visibility errors.
+ 	(Check_Aspect_At_End_Of_Declarations): Handle consistently all
+ 	Predicate aspects.
+ 	* sem_ch3.adb (Analyze_Subtype_Declaration): Fix handling of
+ 	private types with predicates.
+ 
+ 2021-07-09  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* sem_util.ads (Type_Access_Level): Add new optional parameter
+ 	Assoc_Ent.
+ 	* sem_util.adb (Accessibility_Level): Treat access discriminants
+ 	the same as components when the restriction
+ 	No_Dynamic_Accessibility_Checks is enabled.
+ 	(Deepest_Type_Access_Level): Remove exception for
+ 	Debug_Flag_Underscore_B when returning the result of
+ 	Type_Access_Level in the case where
+ 	No_Dynamic_Accessibility_Checks is active.
+ 	(Function_Call_Or_Allocator_Level): Correctly calculate the
+ 	level of Expr based on its containing subprogram instead of
+ 	using Current_Subprogram.
+ 	* sem_res.adb (Valid_Conversion): Add actual for new parameter
+ 	Assoc_Ent in call to Type_Access_Level, and add test of
+ 	No_Dynamic_Accessibility_Checks_Enabled to ensure that static
+ 	accessibility checks are performed for all anonymous access type
+ 	conversions.
+ 
+ 2021-07-09  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_dbug.ads: Update documentation of various items.
+ 
+ 2021-07-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch6.adb (Analyze_Expression_Function): Reorder code.
+ 
+ 2021-07-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch6.adb (Analyze_Expression_Function): Reorder code.
+ 
+ 2021-07-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch6.adb (Analyze_Expression_Function): Add variable to
+ 	avoid repeated calls to Etype.
+ 
+ 2021-07-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch6.adb (Analyze_Expression_Function): Fix comment.
+ 
+ 2021-07-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch6.adb (Analyze_Expression_Function): Use Orig_N variable
+ 	instead of repeated calls to Original_Node.
+ 
+ 2021-07-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch6.adb (Analyze_Expression_Function): Change types local
+ 	variables from Entity_Id to Node_Id.
+ 
+ 2021-07-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch6.adb (Analyze_Expression_Function): A local Expr
+ 	constant was shadowing a global constant with the same name and
+ 	the same value.
+ 
+ 2021-07-09  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.adb (Preanalyze_And_Resolve): Only call
+ 	Set_Must_Not_Freeze when it is necessary to restore the previous
+ 	value.
+ 
+ 2021-07-08  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch5.adb (Analyze_Assignment): Clear Current_Assignment at
+ 	exit.
+ 	(Analyze_Target_Name): Prevent AST climbing from going too far.
+ 
+ 2021-07-08  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_ch5.adb (Analyze_Target_Name): Properly reject a
+ 	Target_Name when it appears outside of an assignment statement,
+ 	or within the left-hand side of one.
+ 
+ 2021-07-08  Bob Duff  <duff@adacore.com>
+ 
+ 	* einfo-utils.ads, einfo-utils.adb (Unknown_Alignment,
+ 	Unknown_Component_Bit_Offset, Unknown_Component_Size,
+ 	Unknown_Esize, Unknown_Normalized_First_Bit,
+ 	Unknown_Normalized_Position, Unknown_Normalized_Position_Max,
+ 	Unknown_RM_Size): Remove these functions.
+ 	* exp_pakd.adb, exp_util.adb, fe.h, freeze.adb, layout.adb,
+ 	repinfo.adb, sem_ch13.adb, sem_ch3.adb, sem_util.adb: Remove
+ 	calls to these functions; do "not Known_..." instead.
+ 	* gcc-interface/decl.c, gcc-interface/trans.c
+ 	(Unknown_Alignment, Unknown_Component_Size, Unknown_Esize,
+ 	Unknown_RM_Size): Remove calls to these functions; do
+ 	"!Known_..." instead.
+ 
+ 2021-07-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_dbug.adb (Get_Encoded_Name): Do not encode names of discrete
+ 	types with custom bounds, except with -fgnat-encodings=all.
+ 	* exp_pakd.adb (Create_Packed_Array_Impl_Type): Adjust comment.
+ 
+ 2021-07-08  Bob Duff  <duff@adacore.com>
+ 
+ 	* comperr.adb (Compiler_Abort): Call Sinput.Unlock, because if
+ 	this is called late, then Source_Dump would crash otherwise.
+ 	* debug.adb: Correct documentation of the -gnatd.9 switch.
+ 	* exp_ch4.adb (Expand_Allocator_Expression): Add a comment.
+ 	* exp_ch6.adb: Minor comment fixes.  Add assertion.
+ 	* exp_ch6.ads (Is_Build_In_Place_Result_Type): Correct comment.
+ 	* exp_ch7.adb, checks.ads: Minor comment fixes.
+ 
+ 2021-07-08  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* sigtramp-vxworks-target.inc: Rename to...
+ 	* sigtramp-vxworks-target.h: ... this.
+ 	* sigtramp-vxworks.c, Makefile.rtl: Likewise.
+ 
+ 2021-07-08  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* lib-writ.ads: Mention SCOs dependency as reason for duplicates.
+ 	* lib.ads (Units): Update documentation to mention duplicated
+ 	units.
+ 
+ 2021-07-08  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* style.adb (Missing_Overriding): Do not emit message when
+ 	parent of subprogram is a full type declaration.
+ 
+ 2021-07-08  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* par-ch5.adb (P_Iterator_Specification): Add support for access
+ 	definition in loop parameter.
+ 	* sem_ch5.adb (Check_Subtype_Indication): Renamed...
+ 	(Check_Subtype_Definition): ... into this and check for conformance
+ 	on access definitions, and improve error messages.
+ 	(Analyze_Iterator_Specification): Add support for access definition
+ 	in loop parameter.
+ 
+ 2021-07-08  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_util.ads, sem_util.adb
+ 	(Apply_Compile_Time_Constraint_Error): New parameter
+ 	Emit_Message.
+ 	* sem_ch4.adb (Analyze_Selected_Component): Disable warning
+ 	within an instance.
+ 
+ 2021-07-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_imgv.adb: Add with and use clause for Restrict and Rident.
+ 	(Build_Enumeration_Image_Tables): Do not generate the hash function
+ 	if the No_Implicit_Loops restriction is active.
+ 
+ 2021-07-08  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch12.adb, sem_ch6.adb, sem_ch9.adb, sprint.adb: Simplify
+ 	checks for non-empty lists.
+ 
+ 2021-07-08  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* par-ch10.adb (Unit_Display): Remove redundant condition; fix
+ 	whitespace.
+ 
+ 2021-07-08  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* lib-load.adb (Load): Replace early return with goto to properly
+ 	restore context on failure.
+ 
+ 2021-07-08  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* lib-writ.adb (Ensure_System_Dependency): Simplify condition.
+ 
+ 2021-07-08  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* lib-load.adb (Load_Unit): Fix style in comment.
+ 	* par-load.adb (Load): Likewise.
+ 	* scng.adb (Initialize_Scanner): Fix whitespace.
+ 
+ 2021-07-08  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* par-load.adb (Load): Don't remove unit, but flag it as
+ 	erroneous and return.
+ 
+ 2021-07-08  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* exp_prag.adb (Expand_Pragma_Inspection_Point): Fix error
+ 	message.
+ 
+ 2021-07-08  Yannick Moy  <moy@adacore.com>
+ 
+ 	* layout.adb (Layout_Type): Do not call Number_Dimensions if the
+ 	type does not have First_Index set.
+ 
+ 2021-07-08  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* exp_prag.adb (Expand_Pragma_Inspection_Point): After expansion
+ 	of the Inspection_Point pragma, check if referenced entities
+ 	that have a freeze node are already frozen. If they aren't, emit
+ 	a warning and turn the pragma into a no-op.
+ 
+ 2021-07-08  Yannick Moy  <moy@adacore.com>
+ 
+ 	* layout.adb (Layout_Type): Add guard before calling Expr_Value.
+ 
+ 2021-07-08  Yannick Moy  <moy@adacore.com>
+ 
+ 	* layout.adb (Layout_Type): Special case when RM_Size and Esize
+ 	can be computed for packed arrays.
+ 
+ 2021-07-08  Steve Baird  <baird@adacore.com>
+ 
+ 	* rtsfind.ads, rtsfind.adb: Add support for finding the packages
+ 	System.Atomic_Operations and
+ 	System.Atomic_Operations.Test_And_Set and the declarations
+ 	within that latter package of the type Test_And_Set_Flag and the
+ 	function Atomic_Test_And_Set.
+ 	* exp_ch11.adb (Expand_N_Exception_Declaration): If an exception
+ 	is declared other than at library level, then we need to call
+ 	Register_Exception the first time (and only the first time) the
+ 	declaration is elaborated.  In order to decide whether to
+ 	perform this call for a given elaboration of the declaration, we
+ 	used to unconditionally use a (library-level) Boolean variable.
+ 	Now we instead use a variable of type
+ 	System.Atomic_Operations.Test_And_Set.Test_And_Set_Flag unless
+ 	either that type is unavailable or a No_Tasking restriction is
+ 	in effect (in which case we use a Boolean variable as before).
+ 
+ 2021-07-08  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* gcc-interface/system.ads: Add No_Tasking restriction.
+ 
+ 2021-07-08  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* libgnat/a-cohama.ads: Introduce an equality operator over
+ 	cursors.
+ 	* libgnat/a-cohase.ads: Ditto.
+ 	* libgnat/a-cohama.adb: Add body for "=" over cursors.
+ 	(Insert): Do not set the Position component of the cursor that
+ 	denotes the inserted element.
+ 	* libgnat/a-cohase.adb: Ditto.
+ 
+ 2021-07-08  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/a-cbdlli.adb, libgnat/a-cbhama.adb,
+ 	libgnat/a-cbhase.adb, libgnat/a-cbmutr.adb,
+ 	libgnat/a-cborma.adb, libgnat/a-cborse.adb,
+ 	libgnat/a-cobove.adb, libgnat/a-textio.adb,
+ 	libgnat/a-witeio.adb, libgnat/a-ztexio.adb: Make code compatible
+ 	with No_Dynamic_Accessibility_Checks restriction.
+ 
+ 2021-07-08  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* debug.adb, sem_util.adb: Revert meaning of -gnatd_b.
+ 	* sem_res.adb: Minor reformatting.
+ 
+ 2021-07-08  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* make.adb, osint.adb: Make code compatible with
+ 	No_Dynamic_Accessibility_Checks restriction.
+ 
+ 2021-07-08  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* lib-writ.adb (Ensure_System_Dependency): Replace search in
+ 	Lib.Units with a search in Lib.Unit_Names.
+ 
+ 2021-07-08  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sinput-l.adb (Load_File): Simplify foreword manipulation with
+ 	concatenation; similar for filename with preprocessed output.
+ 
+ 2021-07-07  Dmitriy Anisimkov  <anisimko@adacore.com>
+ 
+ 	* s-oscons-tmplt.c (MSG_WAITALL): Remove wrong #ifdef
+ 	__MINWGW32__.
+ 
+ 2021-07-07  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* einfo-utils.adb (Primitive_Operations): Default to returning
+ 	Direct_Primitive_Operations in the case of concurrent types
+ 	(when Corresponding_Record_Type not present).
+ 	* sem_ch9.adb (Analyze_Protected_Type_Declaration): Initialize
+ 	Direct_Primitive_Operations to an empty element list.
+ 	(Analyze_Task_Type_Declaration): Initialize
+ 	Direct_Primitive_Operations to an empty element list.
+ 
+ 2021-07-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_eval.adb (Set_Checking_Potentially_Static_Expression):
+ 	Stronger assertion.
+ 
+ 2021-07-07  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_ch12.adb (Analyze_Subprogram_Instantiation): Mark Anon_Id
+ 	intrinsic before calling Analyze_Instance_And_Renamings because
+ 	this flag may be propagated to other nodes.
+ 
+ 2021-07-07  Dmitriy Anisimkov  <anisimko@adacore.com>
+ 
+ 	* s-oscons-tmplt.c (TCP_KEEPCNT TCP_KEEPIDLE, TCP_KEEPINTVL):
+ 	Hardcode on Windows if undefined.
+ 
+ 2021-07-07  Bob Duff  <duff@adacore.com>
+ 
+ 	* checks.adb (Install_Primitive_Elaboration_Check): Do not
+ 	generate elaboration checks for primitives if pragma Pure or
+ 	Preelaborate is present.  Misc comment fixes, including
+ 	referring to the correct kind of check (elaboration, not
+ 	accessibility).
+ 	* checks.ads, restrict.adb, sem_cat.ads, sinfo.ads: Minor
+ 	reformatting and comment fixes.
+ 
+ 2021-07-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_prag.adb (Analyze_Pragma): Simplify processing of pragma
+ 	CPP_Constructor.
+ 
+ 2021-07-07  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/g-debpoo.adb (Code_Address_For_Allocate_End): Default
+ 	Initialize.
+ 
+ 2021-07-07  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/s-atocou.ads, libgnat/s-atocou__builtin.adb: Code
+ 	cleanups.
+ 
+ 2021-07-07  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* freeze.adb (Check_Inherited_Conditions): Setting of Ekind,
+ 	LSP_Subprogram, and Is_Wrapper needs to happen for null
+ 	procedures as well as other wrapper cases, so the code is moved
+ 	from the else part in front of the if statement.  (Fixes a
+ 	latent bug encountered while working on this set of changes.)
+ 	* sem_attr.adb (Resolve_Attribute): Report an error for the case
+ 	of an Access attribute applied to a primitive of an abstract
+ 	type when the primitive has any nonstatic Pre'Class or
+ 	Post'Class expressions.
+ 	* sem_ch8.adb (Analyze_Subprogram_Renaming): Report an error for
+ 	the case of a actual subprogram associated with a nonabstract
+ 	formal subprogram when the actual is a primitive of an abstract
+ 	type and the primitive has any nonstatic Pre'Class or Post'Class
+ 	expressions.
+ 	* sem_disp.adb (Check_Dispatching_Context): Remove special
+ 	testing for null procedures, and replace it with a relaxed test
+ 	that avoids getting an error about illegal calls to abstract
+ 	subprograms in cases where RM 6.1.1(7/5) applies in
+ 	Pre/Post'Class aspects. Also, remove special test for
+ 	Postcondition, which seems to be unnecessary, update associated
+ 	comments, and fix a typo in one comment.
+ 	(Check_Dispatching_Call): Remove an unneeded return statement,
+ 	and report an error for the case of a nondispatching call to a
+ 	nonabstract subprogram of an abstract type where the subprogram
+ 	has nonstatic Pre/Post'Class aspects.
+ 	* sem_util.ads
+ 	(Is_Prim_Of_Abst_Type_With_Nonstatic_CW_Pre_Post): New function.
+ 	(In_Pre_Post_Condition): Add a flag formal Class_Wide_Only,
+ 	defaulted to False, for indicating whether the function should
+ 	only test for the node being within class-wide pre- and
+ 	postconditions.
+ 	* sem_util.adb
+ 	(Is_Prim_Of_Abst_Type_With_Nonstatic_CW_Pre_Post): New function
+ 	to determine whether a subprogram is a primitive of an abstract
+ 	type where the primitive has class-wide Pre/Post'Class aspects
+ 	specified with nonstatic expressions.
+ 	(In_Pre_Post_Condition): Extend testing to account for the new
+ 	formal Class_Wide_Only.
+ 
+ 2021-07-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch12.adb (Check_Shared_Variable_Control_Aspects): Errors
+ 	emitted via Check_Volatility_Compatibility are now emitted at
+ 	Actual, just like other errors emitted by
+ 	Check_Shared_Variable_Control_Aspects.
+ 
+ 2021-07-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* uname.adb (Get_Unit_Name): Simplify with a bounded string
+ 	buffer; also, this addresses a ??? comment about the max length
+ 	being exceeded.
+ 
+ 2021-07-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* uname.adb (Get_Body_Name, Get_Parent_Body_Name,
+ 	Get_Parent_Spec_Name, Get_Spec_Name, Is_Child_Name,
+ 	Is_Body_Name, Is_Spec_Name, Name_To_Unit_Name): Use a local
+ 	instead of the global buffer.
+ 
+ 2021-07-07  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_ch13.adb (Analyze_Attribute_Definition_Clause): Combine
+ 	processing of Size and Value_Size clauses. Ensure that
+ 	Value_Size is treated the same as Size, in the cases where both
+ 	are allowed (i.e. the prefix denotes a first subtype).  Misc
+ 	cleanup.
+ 	* einfo-utils.adb (Init_Size): Add assertions.
+ 	(Size_Clause): Return a Value_Size clause if present, instead of
+ 	just looking for a Size clause.
+ 	* einfo.ads (Has_Size_Clause, Size_Clause): Change documentation
+ 	to include Value_Size.
+ 	* sem_ch13.ads, layout.ads, layout.adb: Comment modifications.
+ 
+ 2021-07-07  Steve Baird  <baird@adacore.com>
+ 
+ 	* exp_dist.adb (Add_RACW_Primitive_Declarations_And_Bodies): Add
+ 	TSS_Put_Image to list of predefined primitives that need special
+ 	treatment.
+ 	(Build_General_Calling_Stubs, Build_Subprogram_Receiving_Stubs):
+ 	Remove previous hack for dealing with TSS_Put_Image procedures.
+ 
+ 2021-07-07  Dmitriy Anisimkov  <anisimko@adacore.com>
+ 
+ 	* libgnat/g-socket.adb (Get_Socket_Option): Add 500ms only when
+ 	Minus_500ms_Windows_Timeout is True.
+ 	(Set_Socket_Option): Use "* 1000" instead of "/ 0.001" to
+ 	convert to milliseconds.
+ 
+ 2021-07-07  Bob Duff  <duff@adacore.com>
+ 
+ 	* tbuild.adb (Unchecked_Convert_To): Set the Parent of the new
+ 	node to the Parent of the old node.
+ 	* tbuild.ads (Unchecked_Convert_To): Document differences
+ 	between Convert_To and Unchecked_Convert_To. The previous
+ 	documentation claimed they are identical except for the
+ 	uncheckedness of the conversion.
+ 
+ 2021-07-07  Yannick Moy  <moy@adacore.com>
+ 
+ 	* checks.adb (Apply_Scalar_Range_Check): Remove special case for
+ 	GNATprove mode.
+ 	* sem_res.adb (Resolve_Arithmetic_Op): Same.
+ 	* sem_util.adb (Apply_Compile_Time_Constraint_Error): Same.
+ 
+ 2021-07-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch6.adb (Check_For_Primitive_Subprogram): Move
+ 	declarations of local variables after nested subprogram bodies.
+ 
+ 2021-07-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_disp.adb (CPP_Num_Prims): Reuse List_Length.
+ 
+ 2021-07-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch3.adb, exp_ch6.adb, sem_ch6.adb: Replace Ekind
+ 	membership test in Private_Kind with a call to Is_Private_Type.
+ 
+ 2021-07-07  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen-gen_entities.adb: Remove Linker_Section_Pragma
+ 	field from Record_Field_Kind.  Minor comment improvement.
+ 
+ 2021-07-07  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/a-ngelfu.ads (Cot): Fix precondition.
+ 
+ 2021-07-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* par.adb (Par): A local Name variable is now a renaming of a
+ 	constant slice.
+ 
+ 2021-07-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* gnat1drv.adb (Gnat1drv): Remove flagging of main unit and its
+ 	corresponding spec as requiring code generation; now the flags
+ 	are set much earlier.
+ 	* lib-load.adb (Load_Main_Source): Set Generate_Code flag on the
+ 	main unit source.
+ 	(Make_Instance_Unit): Copy Generate_Code flag from the main unit
+ 	to instance units.
+ 	* lib-writ.adb (Write_ALI): Remove redundant condition;
+ 	Generate_Code flag is always set for the main unit.
+ 	* par-load.adb (Load): Set Generate_Code flag on the main unit's
+ 	corresponding spec, if any.
+ 
+ 2021-07-07  Dmitriy Anisimkov  <anisimko@adacore.com>
+ 
+ 	* libgnat/g-socket.ads (Option_Name): Add Keep_Alive_Count,
+ 	Keep_Alive_Idle, and Keep_Alive_Interval items to enumeration.
+ 	(Option_Type): Add Keep_Alive_Count, Keep_Alive_Idle, and
+ 	Keep_Alive_Interval alternatives to the case of discriminated
+ 	record.
+ 	* libgnat/g-socket.adb (Options): Add Keep_Alive_Count,
+ 	Keep_Alive_Idle, and Keep_Alive_Interval to items enumerator to
+ 	OS constant converter.
+ 	(Set_Socket_Option): Process Keep_Alive_Count, Keep_Alive_Idle,
+ 	and Keep_Alive_Interval socket options.
+ 	(Get_Socket_Option): Idem.
+ 
+ 2021-07-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* lib-writ.adb (Write_ALI): Exit from loop after seeing first
+ 	unit that violates No_Elaboration_Code restriction.
+ 
+ 2021-07-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* inline.adb (Instantiate_Bodies): Fix white in declaration.
+ 	(Remove_Dead_Instance): Change iteration from WHILE to FOR.
+ 
+ 2021-07-07  Bob Duff  <duff@adacore.com>
+ 
+ 	* checks.adb, exp_attr.adb, exp_ch4.adb, exp_ch6.adb,
+ 	exp_ch9.adb, exp_disp.adb, exp_util.adb, inline.adb,
+ 	sem_res.adb: Change all calls to Make_Unchecked_Type_Conversion
+ 	to call Unchecked_Convert_To instead. This involves removing
+ 	New_Occurrence_Of on the first parameter, because
+ 	Unchecked_Convert_To expects a type entity, rather than the name
+ 	of one. Also, removed calls to Relocate_Node, because
+ 	Unchecked_Convert_To takes care of that.
+ 	* sinfo.ads: Change comment to be worded more firmly.
+ 
+ 2021-07-07  Steve Baird  <baird@adacore.com>
+ 
+ 	* libgnarl/s-tassta.adb (Free_Task): Acquire the Task_Lock
+ 	before, rather than after, querying the task's Terminated flag.
+ 	Add a corresponding Task_Unlock call.
+ 
+ 2021-07-06  Bob Duff  <duff@adacore.com>
+ 
+ 	* atree.ads (Current_Error_Node): Initialize to Empty.
+ 
+ 2021-07-06  Steve Baird  <baird@adacore.com>
+ 
+ 	* exp_put_image.adb: Eliminate references to
+ 	Debug_Flag_Underscore_Z.  Change the meaning of the function
+ 	Enable_Put_Image. Previously, a result of False for a tagged
+ 	type would mean that the type does not get a Put_Image (PI)
+ 	routine at all. Now, it means that the type gets a PI routine
+ 	with very abbreviated functionality (just a call to
+ 	Unknown_Put_Image). This resolves problems in mixing code
+ 	compiled with and without the -gnat2022 switch.
+ 	* exp_ch3.adb: Enable_Put_Image no longer participates in
+ 	determining whether a tagged type gets a Put_Image procedure.  A
+ 	tagged type does not get a Put_Image procedure if the type
+ 	Root_Buffer_Type is unavailable. This is needed to support cross
+ 	targets where tagged types are supported but the type
+ 	Root_Buffer_Type is not available.
+ 	* exp_dist.adb: Add workarounds for some problems that arise
+ 	when using the (obsolete?) Garlic implementation of the
+ 	distributed systems annex with Ada 2022 constructs.
+ 	* libgnat/a-sttebu.ads: Workaround a bootstrapping problem.
+ 	Older compilers do not support raise expressions, so revise the
+ 	the Pre'Class condition to meet this requirement without
+ 	changing the condition's behavior at run time.
+ 
+ 2021-07-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* repinfo-input.adb (JSON_Entity_Kind, Read_Variant_Part): Fix
+ 	typo in comment.
+ 
+ 2021-07-06  Steve Baird  <baird@adacore.com>
+ 
+ 	* sem_ch5.adb (Analyze_Assignment): Add new nested function,
+ 	Omit_Range_Check_For_Streaming, and make call to
+ 	Apply_Scalar_Range_Check conditional on the result of this new
+ 	function.
+ 	* exp_attr.adb (Compile_Stream_Body_In_Scope): Eliminate Check
+ 	parameter, update callers.  The new
+ 	Omit_Range_Check_For_Streaming parameter takes the place of the
+ 	old use of calling Insert_Action with Suppress => All_Checks,
+ 	which was insufficiently precise (it did not allow suppressing
+ 	checks for one component but not for another).
+ 	(Expand_N_Attribute_Reference): Eliminate another "Suppress =>
+ 	All_Checks" from an Insert_Action call, this one in generating
+ 	the expansion of a T'Read attribute reference for a composite
+ 	type T.
+ 
+ 2021-07-06  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_ch5.adb (Analyze_Loop_Parameter_Specification): Check for
+ 	empty loops caused by constraints.
+ 
+ 2021-07-06  Nicolas Roche  <roche@adacore.com>
+ 
+ 	* rtinit.c (skip_quoted_string): Handle malformed command line
+ 	with no closing double quote.
+ 	(skip_argument): Handle case in which a null character is
+ 	encountered by skip_quote_string.
+ 
+ 2021-07-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* uname.adb (Add_Node_Name): Replace local constant whose
+ 	initial expression was evaluated even when unnecessary with just
+ 	that expression that is evaluated at most once and only when
+ 	needed.
+ 
+ 2021-07-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* lib.adb (Remove_Unit): Replace defensive code with an
+ 	assertion.
+ 	* par-load.adb (Load): Address a question mark in the comment.
+ 
+ 2021-07-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Enclosing_Comp_Unit_Node): When the loop exits
+ 	the Current_Node is either an N_Compilation_Unit node or Empty,
+ 	so simply return it without redundant checks.
+ 
+ 2021-07-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* lib-load.adb (Load_Unit): Remove excessive whitespace.
+ 	* lib.adb (Is_Internal_Unit, Is_Predefined_Unit): Likewise.
+ 	* par-ch10.adb (P_Compilation_Unit): Simplify with membership
+ 	test.
+ 	* par-load.adb (Load): Likewise.
+ 	* uname.adb (Get_Unit_Name): Likewise.
+ 
+ 2021-07-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* lib-writ.adb (Ensure_System_Dependency): Simplify by reusing a
+ 	constant name.
+ 
+ 2021-07-06  Steve Baird  <baird@adacore.com>
+ 
+ 	* exp_ch5.adb
+ 	(Expand_N_Case_Statement.Expand_General_Case_Statement.Pattern_Match):
+ 	When generating an equality test for a statically known discrete
+ 	value, only generate the numeric value if the discrete type is
+ 	not an enumeration type.  If it is an enumeration type, then
+ 	call Get_Enum_Lit_From_Pos instead.
+ 
+ 2021-07-06  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* par-ch6.adb (Get_Return_Kind): Removed.
+ 	(Is_Extended): Created to identify simple and "when" return
+ 	statements from extended return statements.
+ 	(P_Return_Statement): Merged simple and "when" return statement
+ 	processing.
+ 
+ 2021-07-06  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch4.adb (Try_One_Prefix_Interpretation): Augment test of
+ 	"not Extensions_Allowed" with test for absence of Obj_Type's
+ 	primitive operations Elist, as an additional condition for early
+ 	return from this procedure.
+ 
+ 2021-07-06  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* exp_ch4.adb (Process_Transient_In_Expression): In one comment,
+ 	fix two typos and reorder wording of one sentence, plus minor
+ 	reformatting.
+ 
+ 2021-07-06  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* exp_ch5.adb (Expand_Formal_Container_Element_Loop): Remove
+ 	legacy expansion of element iterators, and use expansion form
+ 	used by unconstrained element types in the general case.
+ 
+ 2021-07-06  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_ch4.adb (Process_Transient_In_Expression): Ensure that
+ 	Fin_Context, used to insert finalization code for the
+ 	expression, is a list member: the value returned by
+ 	Find_Hook_Context may be an expression node when the transient
+ 	is part of a larger expression and it has a non-boolean type.
+ 
+ 2021-07-06  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_case.adb: Fix error message.
+ 
+ 2021-07-06  Bob Duff  <duff@adacore.com>
+ 
+ 	* tbuild.adb (Convert_To): Add assert, along with a comment.
+ 	(Make_DT_Access): Remove this function, which is not used.  It
+ 	was incorrect anyway (the call to New_Occurrence_Of should not
+ 	be there).
+ 	(Unchecked_Convert_To): Add assert.  The previous version's test
+ 	for unchecked conversion to the same type was redundant and
+ 	could never be true, because the previous 'if' already checked
+ 	for ANY expression of the same type. Remove that, and replace
+ 	with a test for unchecked conversion to a related type.
+ 	Otherwise, we somethings get things like
+ 	"finalize(some_type!(some_type!(x)))" in the generated code,
+ 	where x is already of type some_type, but we're converting it to
+ 	the private type and then to the full type or vice versa (so the
+ 	types aren't equal, so the previous 'if' doesn't catch it).
+ 	Avoid updating the Parent. This is not necessary; the Parent
+ 	will be updated if/when the node is attached to the tree.
+ 	* tbuild.ads: Fix comments. No need to say "this is safe" when
+ 	we just explained that a few lines earlier.  Remove
+ 	Make_DT_Access.
+ 	* sinfo.ads: Add comments.
+ 	* exp_ch7.adb (Make_Finalize_Address_Stmts): Minor comment fix.
+ 	* gen_il-gen.adb, gen_il-gen.ads, gen_il-gen-gen_nodes.adb,
+ 	gen_il-internals.ads: Implement a feature where you can put:
+ 	Nmake_Assert => "expr" where expr is a boolean expression in a
+ 	call to Create_Concrete_Node_Type. It is added in a pragma
+ 	Assert in the Nmake.Make_... function for that type.
+ 
+ 2021-07-06  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* checks.adb: Remove calls of Set_Do_Tag_Check (N, False).
+ 	* einfo.ads: Remove hanging unneeded ??? comment ("this real description
+ 	was clobbered").
+ 	* exp_util.ads (Insert_Actions_After): Remove ??? from spec comment.
+ 	* gen_il-fields.ads (Opt_Field_Enum): Remove literals
+ 	Do_Accessibility_Check and Do_Tag_Check.
+ 	* gen_il-gen-gen_nodes.adb: Remove all calls to Sm for
+ 	Do_Accessibility_Check and Do_Tag_Check.
+ 	* sem_type.ads (Is_Subtype_Of): Remove obsolete ???
+ 	comment (function is not limited to scalar subtypes).
+ 	* sem_util.ads (Is_Local_Variable_Reference): Revise comment to
+ 	mention out-mode parameters as well, and remove ???.
+ 	(Propagate_Concurrent_Flags): Minor reformatting.
+ 	(Propagate_Invariant_Attributes): Typo fix.
+ 	(Propagate_Predicate_Attributes): Indicate what is propagated
+ 	and remove ??? comment.
+ 	* sem_util.adb (Cannot_Raise_Constraint_Error): Remove unneeded
+ 	test of Do_Tag_Check.
+ 	(Is_Local_Variable_Reference): Extend function to testing for
+ 	formals of mode out as well.
+ 	* sinfo.ads: Remove ??? comment about flag
+ 	Convert_To_Return_False indicating that the flag is obsolete (in
+ 	fact it's used). Remove references to Do_Accessibility_Check and
+ 	Do_Tag_Check (and the two associated ??? comments), as these
+ 	flags are unneeded.
+ 	* sinfo-cn.adb (Change_Conversion_To_Unchecked): Remove call of
+ 	Set_Do_Tag_Check (N, False).
+ 	* targparm.ads (Support_Atomic_Primitives_On_Target): Remove ???
+ 	comment, plus minor reformatting.
+ 
+ 2021-07-06  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* par-ch6.adb (Get_Return_Kind): Properly handle the case of a
+ 	"return when" statement in the procedure case.
+ 
+ 2021-07-06  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem.ads (Node_To_Be_Wrapped): Minor comment fix.
+ 	* exp_ch7.adb (Establish_Transient_Scope): Misc cleanups and
+ 	comment improvements.
+ 	(Set_Node_To_Be_Wrapped): Remove -- not worth putting this code
+ 	in a separate procedure, called only once.
+ 	* sem_util.adb (Requires_Transient_Scope): Assert that our
+ 	parameter has the right Kind. It probably shouldn't be E_Void,
+ 	but that is passed in in some cases.
+ 	(Ensure_Minimum_Decoration): Move the call later, so we know Typ
+ 	is Present, and remove "if Present (Typ)" from this procedure.
+ 	* exp_aggr.adb (Convert_To_Assignments): Use membership test,
+ 	and avoid the "if False" idiom.
+ 	(Expand_Array_Aggregate): Remove a ??? comment.
+ 	* sem_ch8.adb (Push_Scope): Take advantage of the full coverage
+ 	rules for aggregates.
+ 	* sem_res.adb (Resolve_Declare_Expression): Remove test for
+ 	Is_Type -- that's all it can be.  Use named notation in call to
+ 	Establish_Transient_Scope.
+ 	* libgnat/a-cdlili.adb (Adjust): Remove redundant code.
+ 	(Clear): Remove "pragma Warnings (Off);", which wasn't actually
+ 	suppressing any warnings.
+ 
+ 2021-07-06  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen-gen_nodes.adb: Change the parent of
+ 	N_Exception_Declaration to be N_Declaration.  Minor comment fix.
+ 
+ 2021-07-06  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_Type_Conversion): If the conversion is
+ 	the name of an assignment operation do not apply predicate check
+ 	to it prior to the assignment.
+ 
+ 2021-07-06  Bob Duff  <duff@adacore.com>
+ 
+ 	* libgnat/a-conhel.adb: Assert that tampering counts remain
+ 	between 0 and 2**31-1.  This makes debugging of
+ 	finalization-related bugs easier.
+ 
+ 2021-07-06  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* Makefile.rtl (LIBGNAT_TARGET_PAIRS): Use s-osprim__posix.adb
+ 	vice s-osprim__vxworks.adb for all vxworks7r2 targets.
+ 
+ 2021-07-06  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* gen_il-types.ads (Void_Or_Type_Kind,
+ 	Exception_Or_Object_Kind): Declare.
+ 	* gen_il-gen-gen_entities.adb: Likewise.
+ 
+ 2021-07-06  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst: Add a
+ 	description of the feature of prefixed-view calls for untagged
+ 	types to the section on pragma Extensions_Allowed.
+ 	* gnat_rm.texi: Regenerate.
+ 	* einfo.ads: Update specification for
+ 	Direct_Primitive_Operations to reflect its use for untagged
+ 	types when Extensions_Allowed is True.
+ 	* gen_il-gen-gen_entities.adb: Allow Direct_Primitive_Operations
+ 	as a field of untagged classes of types by removing the "Pre"
+ 	test of "Is_Tagged_Type (N)", and making that field generally
+ 	available for all types and subtypes by defining it for
+ 	Type_Kind and removing its specification for individual classes
+ 	of types.
+ 	* sem_ch3.adb (Analyze_Full_Type_Declaration): Initialize the
+ 	Direct_Primitive_Operations list when not already set for the
+ 	new (sub)type and its base type (except when Ekind of the type
+ 	is E_Void, which can happen due to errors in cases where
+ 	Derived_Type_Declaration is called and perhaps in other
+ 	situations).
+ 	(Analyze_Subtype_Declaration): Inherit
+ 	Direct_Primitive_Operations list from the base type, for record
+ 	and private cases.
+ 	(Build_Derived_Record_Type): Initialize the
+ 	Direct_Primitive_Operations list for derived record and private
+ 	types.
+ 	(Build_Derived_Type): Initialize the Direct_Primitive_Operations
+ 	list for derived types (and also for their associated base types
+ 	when needed).
+ 	(Process_Full_View): For full types that are untagged record and
+ 	private types, copy the primitive operations of the partial view
+ 	to the primitives list of the full view.
+ 	* sem_ch4.adb (Analyze_Selected_Component): Allow prefixed
+ 	notation for subprogram calls in the case of untagged
+ 	types (when Extensions_Allowed is True). In the case where
+ 	Is_Private_Type (Prefix_Type) is True, call Try_Object_Operation
+ 	when a discriminant selector wasn't found. Also call
+ 	Try_Object_Operation in other type kind cases (when
+ 	Extensions_Allowed is True).
+ 	(Try_Object_Operation.Try_One_Prefixed_Interpretation): Prevent
+ 	early return in the untagged case (when Extensions_Allowed is
+ 	True). Condition main call to Try_Primitive_Operation on the
+ 	type having primitives, and after that, if Prim_Result is False,
+ 	test for case where the prefix type is a named access type with
+ 	primitive operations and in that case call
+ 	Try_Primitive_Operation after temporarily resetting Obj_Type to
+ 	denote the access type (and restore it to the designated type
+ 	after the call)
+ 	(Try_Object_Operation.Valid_First_Argument_Of): Do matching type
+ 	comparison by testing Base_Type (Obj_Type) against
+ 	Base_Type (Typ), rather than against just Typ, to properly
+ 	handle cases where the object prefix has a constrained
+ 	subtype.  (Fixes a bug discovered while working on this
+ 	feature.)
+ 	* sem_ch6.adb
+ 	(New_Overloaded_Entity.Check_For_Primitive_Subprogram): Add a
+ 	primitive of an untagged type to the type's list of primitive
+ 	operations, for both explicit and implicit (derived, so
+ 	Comes_From_Source is False) subprogram declarations. In the case
+ 	where the new primitive overrides an inherited subprogram,
+ 	locate the primitives Elist that references the overridden
+ 	subprogram, and replace that element of the list with the new
+ 	subprogram (done by calling the new procedure
+ 	Add_Or_Replace_Untagged_Primitive on the result type and each
+ 	formal atype).
+ 	(Check_For_Primitive_Subprogram.Add_Or_Replace_Untagged_Primitive):
+ 	New nested procedure to either add or replace an untagged
+ 	primitive subprogram in a given type's list of primitive
+ 	operations (replacement happens in case where the new subprogram
+ 	overrides a primitive of the type).
+ 	* sem_ch7.adb (New_Private_Type): When Extensions_Allowed is
+ 	True, initialize the Direct_Primitive_Operations list of a
+ 	private type to New_Elmt_List in the case of untagged types.
+ 	* sem_ch8.adb (Find_Selected_Component): In the case where the
+ 	prefix is an entity name, relax condition that tests
+ 	Has_Components so that Analyze_Selected_Component will also be
+ 	called when Extensions_Allowed is True and the prefix type is
+ 	any type.
+ 
+ 2021-07-06  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Do not perform
+ 	conformance check when the subprogram body has been created for
+ 	an expression function that is not a completion of a previous
+ 	specification, because the profile of the constructed body is
+ 	copied from the expression function itself.
+ 
+ 2021-07-06  Steve Baird  <baird@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_of_specific_ada_features.rst: Add a
+ 	warning indicating that the details of the default (i.e.,
+ 	selected by the compiler) implementation of T'Put_Image for a
+ 	nonscalar type T are subject to change.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-07-05  Pierre-Marie de Rodat  <derodat@adacore.com>
+ 
+ 	* gnat-style.texi, gnat_rm.texi, gnat_ugn.texi: Regenerate.
+ 
+ 2021-07-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_prag.adb (Analyze_Depends_In_Decl_Part): Reject overlays
+ 	in Depends and Refined_Depends contracts.
+ 	(Analyze_Global_In_Decl_Part): Likewise for Global and
+ 	Refined_Global.
+ 	(Analyze_Initializes_In_Decl_Part): Likewise for Initializes
+ 	(when appearing both as a single item and as a initialization
+ 	clause).
+ 	* sem_util.ads (Ultimate_Overlaid_Entity): New routine.
+ 	* sem_util.adb (Report_Unused_Body_States): Ignore overlays.
+ 	(Ultimate_Overlaid_Entity): New routine.
+ 
+ 2021-07-05  Claire Dross  <dross@adacore.com>
+ 
+ 	* libgnat/a-cfdlli.ads, libgnat/a-cfdlli.adb
+ 	libgnat/a-cfinve.ads, libgnat/a-cfinve.adb,
+ 	libgnat/a-cofove.ads, libgnat/a-cofove.adb,
+ 	libgnat/a-coboho.ads, libgnat/a-coboho.adb (Constant_Reference):
+ 	Get a read-only access to an element of the container.
+ 	(At_End): Ghost functions used to express pledges in the
+ 	postcondition of Reference.
+ 	(Reference): Get a read-write access to an element of the
+ 	container.
+ 	* libgnat/a-cfhama.ads, libgnat/a-cfhama.adb,
+ 	libgnat/a-cforma.ads, libgnat/a-cforma.adb: The full view of the
+ 	Map type is no longer a tagged type, but a wrapper over this
+ 	tagged type. This is to avoid issues with dispatching result in
+ 	At_End functions.
+ 	(Constant_Reference): Get a read-only access to an element of
+ 	the container.
+ 	(At_End): Ghost functions used to express pledges in the
+ 	postcondition of Reference.
+ 	(Reference): Get a read-write access to an element of the
+ 	container.
+ 	* libgnat/a-cfhase.ads, libgnat/a-cfhase.adb,
+ 	libgnat/a-cforse.ads, libgnat/a-cforse.adb: The full view of the
+ 	Map type is no longer a tagged type, but a wrapper over this
+ 	tagged type.
+ 	(Constant_Reference): Get a read-only access to an element of
+ 	the container.
+ 	* libgnat/a-cofuse.ads, libgnat/a-cofuve.ads (Copy_Element):
+ 	Expression function used to cause SPARK to make sure
+ 	Element_Type is copiable.
+ 	* libgnat/a-cofuma.ads (Copy_Key): Expression function used to
+ 	cause SPARK to make sure Key_Type is copiable.
+ 	(Copy_Element): Expression function used to cause SPARK to make
+ 	sure Element_Type is copiable.
+ 
+ 2021-07-05  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_prag.adb (Analyze_Global_Item): Adapt to update SPARK RM
+ 	rule.
+ 
+ 2021-07-05  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* Make-generated.in: Add -f switch to ensure cp will never fail.
+ 
+ 2021-07-05  Steve Baird  <baird@adacore.com>
+ 
+ 	* exp_ch3.adb (Build_Record_Init_Proc.Build_Assignment): When
+ 	building the assignment statement corresponding to the default
+ 	expression for a component, we make a copy of the expression.
+ 	When making that copy (and if we have seen a component that
+ 	requires late initialization), pass a Map parameter into the
+ 	call to New_Copy_Tree to redirect references to the type to
+ 	instead refer to the _Init formal parameter of the init proc.
+ 	This includes hoisting the declaration of Has_Late_Init_Comp out
+ 	one level so that it becomes available to Build_Assignment.
+ 	(Find_Current_Instance): Return True for other kinds of current
+ 	instance references, instead of just access-valued attribute
+ 	references such as T'Access.
+ 	* sem_util.adb (Is_Aliased_View): Return True for the _Init
+ 	formal parameter of an init procedure. The changes in
+ 	exp_ch3.adb can have the effect of replacing a "T'Access"
+ 	attribute reference in an init procedure with an "_Init'Access"
+ 	attribute reference. We want such an attribute reference to be
+ 	legal. However, we do not simply mark the formal parameter as
+ 	being aliased because that might impact callers.
+ 	(Is_Object_Image): Return True if Is_Current_Instance returns
+ 	True for the prefix of an Image (or related attribute) attribute
+ 	reference.
+ 
+ 2021-07-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch3.adb (Stream_Operation_OK): Reuse
+ 	Is_Concurrent_Interface.
+ 	* sem_ch3.adb (Analyze_Interface_Declaration,
+ 	Build_Derived_Record_Type): Likewise.
+ 	* sem_ch6.adb (Check_Limited_Return): Likewise.
+ 	* sem_util.adb (Is_Concurrent_Interface): Don't call
+ 	Is_Interface because each of the Is_Protected_Interface,
+ 	Is_Synchronized_Interface and Is_Task_Interface calls it anyway.
+ 
+ 2021-07-05  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_ch6.adb (Check_Limited_Return): Replace Comes_From_Source
+ 	with Comes_From_Extended_Return_Statement.
+ 
+ 2021-07-05  Steve Baird  <baird@adacore.com>
+ 
+ 	* libgnat/a-stobbu.adb, libgnat/a-stobbu.ads,
+ 	libgnat/a-stobfi.adb, libgnat/a-stobfi.ads,
+ 	libgnat/a-stoubu.adb, libgnat/a-stoubu.ads,
+ 	libgnat/a-stoufi.adb, libgnat/a-stoufi.ads,
+ 	libgnat/a-stoufo.adb, libgnat/a-stoufo.ads,
+ 	libgnat/a-stouut.adb, libgnat/a-stouut.ads,
+ 	libgnat/a-stteou.ads: Delete files.
+ 	* Makefile.rtl, impunit.adb: Remove references to deleted files.
+ 
+ 2021-07-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Has_Compatible_Alignment_Internal): If the
+ 	prefix of the Address expression is an entire object with a
+ 	known alignment, then skip checks related to its size.
+ 
+ 2021-07-05  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* libgnat/s-os_lib.ads: Import OS_Time comparison ops as
+ 	intrinsic.
+ 	* libgnat/s-os_lib.adb: Remove OS_TIme comparison ops
+ 	implementation.
+ 
+ 2021-07-05  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* libgnat/s-os_lib.ads: Add some comments about time_t.
+ 	* libgnat/s-os_lib.adb (GM_Split/To_GM_Time): Rename formal to
+ 	P_OS_Time.
+ 	(GM_Time_Of/To_OS_Time): Likewise.
+ 
+ 2021-07-05  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_res.adb (Resolve): Insert minus sign if needed.
+ 
+ 2021-07-05  Steve Baird  <baird@adacore.com>
+ 
+ 	* exp_put_image.adb:
+ 	(Enable_Put_Image, Preload_Root_Buffer_Type): Revert to querying
+ 	the -gnatd_z switch, as opposed to testing whether Ada_Version >= Ada_2022.
+ 
+ 2021-07-05  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* checks.adb (Accessibility_Checks_Suppressed): Add check
+ 	against restriction No_Dynamic_Accessibility_Checks.
+ 	(Apply_Accessibility_Check): Add assertion to check restriction
+ 	No_Dynamic_Accessibility_Checks is not active.
+ 	* debug.adb: Add documentation for new debugging switch to
+ 	control which accessibility model gets employed under
+ 	restriction No_Dynamic_Accessibility_Checks.
+ 	* exp_attr.adb (Expand_N_Attribute_Reference): Disable dynamic
+ 	accessibility check generation when
+ 	No_Dynamic_Accessibility_Checks is active.
+ 	* exp_ch4.adb (Apply_Accessibility_Check): Skip check generation
+ 	when restriction No_Dynamic_Accessibility_Checks is active.
+ 	(Expand_N_Allocator): Disable dynamic accessibility checks when
+ 	No_Dynamic_Accessibility_Checks is active.
+ 	(Expand_N_In): Disable dynamic accessibility checks when
+ 	No_Dynamic_Accessibility_Checks is active.
+ 	(Expand_N_Type_Conversion): Disable dynamic accessibility checks
+ 	when No_Dynamic_Accessibility_Checks is active.
+ 	* exp_ch5.adb (Expand_N_Assignment_Statement): Disable
+ 	alternative accessibility model calculations when computing a
+ 	dynamic level for a SAOAAT.
+ 	* exp_ch6.adb (Add_Call_By_Copy_Code): Disable dynamic
+ 	accessibility check generation when
+ 	No_Dynamic_Accessibility_Checks is active.
+ 	(Expand_Branch): Disable alternative accessibility model
+ 	calculations.
+ 	(Expand_Call_Helper): Disable alternative accessibility model
+ 	calculations.
+ 	* restrict.adb, restrict.ads: Add new restriction
+ 	No_Dynamic_Accessibility_Checks.
+ 	(No_Dynamic_Accessibility_Checks_Enabled): Created to test when
+ 	experimental features (which are generally incompatible with
+ 	standard Ada) can be enabled.
+ 	* sem_attr.adb (Safe_Value_Conversions): Add handling of new
+ 	accessibility model under the restriction
+ 	No_Dynamic_Accessibility_Checks.
+ 	* sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings):
+ 	Disallow new restriction No_Dynamic_Accessibility_Checks from
+ 	being exclusively specified within a body or subunit without
+ 	being present in a specification.
+ 	* sem_res.adb (Check_Fully_Declared_Prefix): Minor comment
+ 	fixup.
+ 	(Valid_Conversion): Omit implicit conversion checks on anonymous
+ 	access types and perform static checking instead when
+ 	No_Dynamic_Accessibility_Checks is active.
+ 	* sem_util.adb, sem_util.ads (Accessibility_Level): Add special
+ 	handling of anonymous access objects, formal parameters,
+ 	anonymous access components, and function return objects.
+ 	(Deepest_Type_Access_Level): When
+ 	No_Dynamic_Accessibility_Checks is active employ an alternative
+ 	model. Add paramter Allow_Alt_Model to override the new behavior
+ 	in certain cases.
+ 	(Type_Access_Level): When No_Dynamic_Accessibility_Checks is
+ 	active employ an alternative model. Add parameter
+ 	Allow_Alt_Model to override the new behavior in certain cases.
+ 	(Typ_Access_Level): Created within Accessibility_Level for
+ 	convenience.
+ 	* libgnat/s-rident.ads, snames.ads-tmpl: Add handing for
+ 	No_Dynamic_Accessibility_Checks.
+ 
+ 2021-07-05  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* adaint.h (__gnat_set_file_time_name): Use OS_Time.
+ 	* adaint.c (__gnat_set_file_time_name): Likewise.
+ 
+ 2021-07-05  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* adaint.h (OS_Time): typedef as long long.
+ 	* osint.adb (Underlying_OS_Time): Declare as 64-bit signed type.
+ 	* libgnat/s-os_lib.adb ("<"): Compare OS_Time as
+ 	Long_Long_Integer.
+ 	("<="): Likewise.
+ 	(">"): Likewise.
+ 	(">="): Likewise.
+ 	* libgnat/s-os_lib.ads (OS_Time): Declare as 64-bit signed type.
+ 
+ 2021-07-05  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_ch3.adb (Check_Abstract_Overriding): Post error message on
+ 	renaming node.
+ 
+ 2021-07-05  Yannick Moy  <moy@adacore.com>
+ 
+ 	* libgnat/a-uncdea.ads: Add Depends/Post to
+ 	Ada.Unchecked_Deallocation.
+ 	* sem_ch4.adb (Analyze_Allocator): Remove checking of allocator
+ 	placement.
+ 	* sem_res.adb (Flag_Object): Same.
+ 
+ 2021-07-05  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* aspects.ads: Add GNAT_Annotate aspect.
+ 	* gnat1drv.adb (Adjust_Global_Switches): Stop defining
+ 	Name_Gnat_Annotate as an alias of Name_Annotate.
+ 	* snames.ads-tmpl: Define Gnat_Annotate.
+ 	* par-prag.adb, sem_prag.ads: Add Pragma_Gnat_Annotate to list
+ 	of pragmas.
+ 	* lib-writ.adb, sem_ch13.adb, sem_prag.adb: Handle Gnat_Annotate
+ 	like Aspect_Annotate.
+ 
+ 2021-07-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* ttypes.ads (Target_Strict_Alignment): Fix comment.
+ 
+ 2021-07-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Has_Compatible_Alignment_Internal): Fix
+ 	indentation of ELSIF comments; remove explicit calls to
+ 	UI_To_Int; remove extra parens around the MOD operand.
+ 
+ 2021-07-05  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_aggr.adb (Resolve_Record_Aggregate, Step_5): Do not check
+ 	for the need to use an extension aggregate for a given component
+ 	when within an instance and the type of the component hss a
+ 	private ancestor: the instantiation is legal if the generic
+ 	compiles, and spurious errors may be generated otherwise.
+ 
+ 2021-07-05  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* errout.adb (Output_JSON_Message): Recursively call
+ 	Output_JSON_Message for continuation messages instead of
+ 	appending their content to the initial message.
+ 
+ 2021-07-05  Steve Baird  <baird@adacore.com>
+ 
+ 	* debug.adb: Remove comments about -gnatd_z switch.
+ 	* exp_ch3.adb (Make_Predefined_Primitive_Specs): A one-line fix
+ 	for a subtle bug that took some effort to debug. Append a new
+ 	Put_Image procedure for a type extension even if it seems to
+ 	already have one, just as is done for (for example) the
+ 	streaming-related Read procedure.
+ 	* exp_put_image.adb:
+ 	(Build_Record_Put_Image_Procedure.Make_Component_Attributes): Do
+ 	not treat _Parent component like just another component, for two
+ 	reasons.  1. If the _parent component's type has a
+ 	user-specified Put_Image procedure, then we want to generate a
+ 	call to that procedure and then generate extension aggregate
+ 	syntax.  2. Otherwise, we still don't want to see any mention of
+ 	"_parent" in the generated image text.
+ 	(Build_Record_Put_Image_Procedure.Make_Component_Name): Add
+ 	assertion that we are not generating a reference to an "_parent"
+ 	component.
+ 	(Build_Record_Put_Image_Procedure): Add special treatment for
+ 	null records.  Add call to Duplicate_Subexpr for image attribute
+ 	prefix in order to help with expansion needed in the class-wide
+ 	case (where the prefix is also referenced in the call to
+ 	Wide_Wide_Expanded_Name) if evaluation of the prefix has side
+ 	effects. Add new local helper function, Put_String_Exp.  Add
+ 	support for case where prefix type is class-wide.
+ 	(Enable_Put_Image, Preload_Root_Buffer_Type): Query Ada_Version
+ 	> Ada_2022 instead of (indirectly) querying -gnatd_z switch.
+ 	* freeze.adb (In_Expanded_Body): A one-line change to add
+ 	TSS_Put_Image to the list of subprograms that have
+ 	expander-created bodies.
+ 	* rtsfind.ads: Add support for accessing
+ 	Ada.Tags.Wide_Wide_Expanded_Name.
+ 	* sem_ch3.ads, sem_ch3.adb: Delete Is_Null_Extension function,
+ 	as part of moving it to Sem_Util.
+ 	* sem_ch13.adb
+ 	(Analyze_Put_Image_TSS_Definition.Has_Good_Profile): Improve
+ 	diagnostic messages in cases where the result is going to be
+ 	False and the Report parameter is True. Relax overly-restrictive
+ 	checks in order to implement mode conformance.
+ 	(Analyze_Stream_TSS_Definition.Has_Good_Profile): Add similar
+ 	relaxation of parameter subtype checking for the Stream
+ 	parameter of user-defined streaming subprograms.
+ 	* sem_disp.adb (Check_Dispatching_Operation): A one-line
+ 	change (and an accompanying comment change) to add TSS_Put_Image
+ 	to the list of compiler-generated dispatching primitive
+ 	operations.
+ 	* sem_util.ads, sem_util.adb: Add Ignore_Privacy Boolean
+ 	parameter to Is_Null_Record_Type function (typically the
+ 	parameter will be False when the function is being used in the
+ 	implementation of static semantics and True for dynamic
+ 	semantics; the parameter might make a difference in the case of,
+ 	for example, a private type that is implemented as a null record
+ 	type).  Add related new routines Is_Null_Extension (formerly
+ 	declared in Sem_Ch3), Is_Null_Extension_Of, and
+ 	Is_Null_Record_Definition.
+ 
+ 2021-07-05  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* freeze.adb (Freeze_Profile): Use N's Sloc, F_type's chars.
+ 
+ 2021-07-05  Bob Duff  <duff@adacore.com>
+ 
+ 	* checks.adb, exp_aggr.adb, exp_ch5.adb, freeze.adb,
+ 	sem_util.adb, sem_util.ads: Change L and H to be First and Last,
+ 	to match the attributes in the RM. Change calls from procedure
+ 	to function where appropriate.
+ 
+ 2021-07-05  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_util.ads, sem_util.adb (Compute_Returns_By_Ref): New
+ 	procedure to compute Returns_By_Ref, to avoid some code
+ 	duplication. This will likely change soon, so it's good to have
+ 	the code in one place.
+ 	(CW_Or_Has_Controlled_Part): Move here from Exp_Ch7, because
+ 	it's called by Compute_Returns_By_Ref, and this is a better
+ 	place for it anyway.
+ 	(Needs_Finalization): Fix comment to be vague instead of wrong.
+ 	* exp_ch6.adb (Expand_N_Subprogram_Body, Freeze_Subprogram):
+ 	Call Compute_Returns_By_Ref.
+ 	* sem_ch6.adb (Check_Delayed_Subprogram): Call
+ 	Compute_Returns_By_Ref.
+ 	* exp_ch7.ads, exp_ch7.adb (CW_Or_Has_Controlled_Part): Move to
+ 	Sem_Util.
+ 	(Has_New_Controlled_Component): Remove unused function.
+ 
+ 2021-07-05  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_ch3.adb (Check_Abstract_Overriding): Check for renamings.
+ 
+ 2021-07-05  Boris Yakobowski  <yakobowski@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_Op_Rem): Remove special case for rem -1
+ 	in CodePeer_Mode.
+ 
+ 2021-07-01  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/101094
+ 	* exp_attr.adb (Get_Integer_Type): Return an integer type with the
+ 	same signedness as the input type.
+ 
+ 2021-06-29  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* sem_util.adb (Visit_Node): Add handling for N_Block_Statement
+ 	with declarations.
+ 
+ 2021-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* einfo-utils.adb
+ 	(Unknown_Alignment): Simply negate the Known_ counterpart.
+ 	(Unknown_Component_Bit_Offset): Likewise.
+ 	(Unknown_Esize): Likewise.
+ 	(Unknown_Normalized_First_Bit): Likewise.
+ 	(Unknown_Normalized_Position): Likewise.
+ 	(Unknown_Normalized_Position_Max): Likewise.
+ 	(Unknown_RM_Size): Likewise.
+ 
+ 2021-06-29  Boris Yakobowski  <yakobowski@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_Op_Mod): Remove special case for mod -1
+ 	in CodePeer_Mode.
+ 
+ 2021-06-29  Aleksandra Pasek  <pasek@adacore.com>
+ 
+ 	* libgnat/s-objrea.adb (EM_AARCH64): New Constant.
+ 	(Initialize): Handle EM_AARCH64 case.
+ 	(Read_Address): Handle AARCH64 case.
+ 	* libgnat/s-objrea.ads (Object_Arch): Add AARCH64 record
+ 	component.
+ 
+ 2021-06-29  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_ch13.adb (Analyze_Record_Representation_Clause): Call
+ 	Set_Entity_With_Checks instead of Set_Entity, so we perform the
+ 	check for correct casing.
+ 	* style.adb (Check_Identifier): Minor comment improvement.
+ 	Cleanup overly complicated code.
+ 
+ 2021-06-29  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_aggr.adb (Convert_Aggr_In_Object_Decl): After expansion of
+ 	the aggregate, the expression can be removed from the
+ 	declaration, except if the object is class-wide, in which case
+ 	the aggregate provides the actual type. In other cases the
+ 	presence of the expression may lead to spurious freezing issue.
+ 	* exp_ch3.adb (Expand_N_Object_Declaration): If the expression
+ 	in the declaration is an aggregate with delayed expansion (as is
+ 	the case for objects of a limited type, or a subsequent address
+ 	specification) the aggregate must be resolved at this point.
+ 	This resolution must not include expansion, because the
+ 	expansion of the enclosing declaration will construct the
+ 	necessary aggregate expansion.
+ 
+ 2021-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* errout.ads (Adjust_Name_Case): Remove obsolete and now unused
+ 	variant.
+ 	* errout.adb (Adjust_Name_Case): Likewise; fix variant that uses
+ 	a custom buffer to also use it for names in Standard_Location.
+ 
+ 2021-06-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch12.adb (Freeze_Subprogram_Body): Add missing "freeze".
+ 	(Install_Body): Likewise.
+ 
+ 2021-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* adaint.c (__gnat_portable_spawn): Revert change that
+ 	introduced setting of __gnat_in_child_after_fork.
+ 
+ 2021-06-29  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* libgnarl/s-tasdeb.ads (Known_Tasks): Add Atomic_Components
+ 	aspect.
+ 
+ 2021-06-29  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* Makefile.rtl (x86_64-vx7r2) [EXTRA_GNATRTL_TASKING_OBJS]: Move
+ 	i-vxinco.o out of RTP runtime.
+ 
+ 2021-06-29  Claire Dross  <dross@adacore.com>
+ 
+ 	* libgnat/a-cfdlli.ads: Use pragma Assertion_Policy to disable
+ 	pre and postconditions.
+ 	* libgnat/a-cfhama.ads: Likewise.
+ 	* libgnat/a-cfhase.ads: Likewise.
+ 	* libgnat/a-cfinve.ads: Likewise.
+ 	* libgnat/a-cforma.ads: Likewise.
+ 	* libgnat/a-cforse.ads: Likewise.
+ 	* libgnat/a-cofove.ads: Likewise.
+ 
+ 2021-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.ads (Get_Fullest_View): Refill comment; remove extra
+ 	extra after period.
+ 	* sem_util.adb (Get_Fullest_View): Fix style.
+ 
+ 2021-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Analyze_Declarations): Remove explicit check for
+ 	missing, because a subsequent call to Is_Empty_List will detect
+ 	them anyway.
+ 
+ 2021-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* freeze.adb (Freeze_All): Simplify by reusing
+ 	Is_Subprogram_Or_Entry.
+ 	* sem_ch11.adb (Analyze_Handled_Statement): Likewise.
+ 
+ 2021-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_warn.adb (Warn_On_Overlapping_Actuals): Prevent cascaded
+ 	errors once for the subprogram call, not for every pair of
+ 	actual parameters.
+ 
+ 2021-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Is_Local_Type): Simplify by reusing Scope_Within.
+ 
+ 2021-06-29  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch6.ads (Can_Override_Operator): Function declaration
+ 	moved from package body to package spec.
+ 	* sem_ch6.adb (Check_Overriding_Indicator): Now use test of
+ 	whether the subprogram's Chars is an operator name, to handle
+ 	cases of function instances whose entity is
+ 	N_Defining_Identifier rather than N_Defining_Operator_Symbol.
+ 	(Can_Override_Operator): Function declaration moved to package
+ 	spec.  Now use test of whether the subprogram's Chars is an
+ 	operator name, to handle cases of function instances whose
+ 	entity is N_Defining_Identifier rather than
+ 	N_Defining_Operator_Symbol.
+ 	* sem_ch8.adb (Analyze_Renamed_Subprogram): Check for
+ 	possibility of an overridden predefined operator, and suppress
+ 	the "not overriding" message in that case.
+ 
+ 2021-06-29  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* Makefile.rtl: Add a new ifeq for vx7r2 shared gnatlib.
+ 
+ 2021-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_attr.adb (Build_Array_VS_Func): Restore uses of
+ 	Validated_View.
+ 	(Build_Record_VS_Func): Likewise.
+ 	(Expand_N_Attribute_Reference): Likewise.
+ 	* sem_util.adb (Validated_View): Behave as an identity function
+ 	for arrays and scalars.
+ 
+ 2021-06-29  Bob Duff  <duff@adacore.com>
+ 
+ 	* atree.adb, atree.ads (Parent, Set_Parent): Assert node is
+ 	Present.
+ 	(Copy_Parent, Parent_Kind): New helper routines.
+ 	* gen_il-gen.adb: Add with clause.
+ 	* nlists.adb (Parent): Assert Parent of list is Present.
+ 	* aspects.adb, checks.adb, exp_aggr.adb, exp_ch6.adb,
+ 	exp_util.adb, lib-xref-spark_specific.adb, osint.ads,
+ 	sem_ch12.adb, sem_ch13.adb, sem_ch3.adb, sem_ch6.adb,
+ 	sem_dim.adb, sem_prag.adb, sem_res.adb, sem_util.adb,
+ 	treepr.adb: Do not call Parent and Set_Parent on the Empty node.
+ 	* libgnat/a-stwiun__shared.adb, libgnat/a-stzunb__shared.adb:
+ 	Minor: Fix typos in comments.
+ 	* einfo.ads: Minor comment update.
+ 	* sinfo-utils.ads, sinfo-utils.adb (Parent_Kind, Copy_Parent):
+ 	New functions.
+ 
+ 2021-06-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* repinfo-input.adb (Read_JSON_Stream): Fix typo.
+ 
+ 2021-06-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* rtsfind.ads (RE_Id): Change RE_Valid_Enumeration_Value_NN into
+ 	RE_Valid_Value_Enumeration_NN.
+ 	(RE_Unit_Table): Adjust to above renaming.
+ 	* exp_imgv.adb (Expand_Valid_Value_Attribute): Likewise.
+ 	* libgnat/s-valuen.ads (Invalid): Remove.
+ 	(Value_Enumeration_Pos): Move to...
+ 	* libgnat/s-valuen.adb (Value_Enumeration_Pos): ...here.
+ 	Return -1 instead of Invalid.
+ 	(Value_Enumeration): Compare against 0 instead of Invalid.
+ 	(Valid_Enumeration_Value): Likewise.  Rename to...
+ 	(Valid_Value_Enumeration): ...this.
+ 	* libgnat/s-vaenu8.ads (Valid_Enumeration_Value_8): Rename into...
+ 	(Valid_Value_Enumeration_8): ...this.
+ 	* libgnat/s-vaen16.ads (Valid_Enumeration_Value_16): Rename into...
+ 	(Valid_Value_Enumeration_16): ...this.
+ 	* libgnat/s-vaen32.ads (Valid_Enumeration_Value_32): Rename into...
+ 	(Valid_Value_Enumeration_32): ...this.
+ 
+ 2021-06-29  Bob Duff  <duff@adacore.com>
+ 
+ 	* einfo.ads (Component_Bit_Offset, Component_Size): Update
+ 	documentation: Repinfo is the package where these negative
+ 	values are documented.
+ 	* einfo-utils.adb (Known_Component_Size,
+ 	Known_Static_Component_Size, Unknown_Component_Size): Remove
+ 	calls to Implementation_Base_Type, because Component_Size is an
+ 	Impl_Base_Type_Only field (see Gen_Entities).
+ 	* sem_ch13.ads, sem_ch13.adb (Check_Size): Do not set Esize and
+ 	RM_Size. This is unnecessary in the case of Size. For
+ 	Component_Size, it is wrong, because we would be setting the
+ 	Esize and RM_Size of the component type.
+ 
+ 2021-06-29  Pascal Obry  <obry@adacore.com>
+ 
+ 	* s-oscons-tmplt.c: Add some OS constants.
+ 
+ 2021-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.ads (Validated_View): Fix style in comment.
+ 	* sem_util.adb (Validated_View): Rewrite in recursive style.
+ 
+ 2021-06-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* Make-generated.in (ada/stamp-gen_il): Ignore errors from
+ 	running gen_il-main.
+ 
+ 2021-06-29  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* gen_il-gen-gen_entities.adb (Record_Field_Kind,
+ 	Allocatable_Kind): Add new abstract kinds.
+ 	(Constant_Or_Variable_Kind): Likewise.
+ 	(E_Constant, E_Variable, E_Loop_Parameter): Use them.
+ 	(E_Discriminant, E_Component): Likewise.
+ 	* gen_il-types.ads (type Opt_Type_Enum): Add them.
+ 
+ 2021-06-29  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen.adb (Put_C_Type_And_Subtypes): Put the correct
+ 	numbers.
+ 	* gen_il-internals.ads, gen_il-internals.adb: (Pos): Remove this
+ 	function. It was assuming that the order of the enumeration
+ 	literals in Type_Enum is the same as the order of the generated
+ 	types Node_Kind and Entity_Kind, which is not true.
+ 
+ 2021-06-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_attr.adb (Expand_N_Attribute_Reference): Explicitly use
+ 	Validated_View for record objects.
+ 
+ 2021-06-28  Martin Sebor  <msebor@redhat.com>
+ 
+ 	* gcc-interface/trans.c (Handled_Sequence_Of_Statements_to_gnu):
+ 	Replace TREE_NO_WARNING with suppress_warning.
+ 	(gnat_gimplify_expr): Same.
+ 	* gcc-interface/utils.c (gnat_pushdecl): Same.
+ 
+ 2021-06-21  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* checks.adb (Selected_Range_Checks): In the case of a
+ 	qualified_expression where the qualifying subtype is an
+ 	unconstrained array subtype with fixed lower bounds for some of
+ 	its indexes, generate tests to check that those bounds are equal
+ 	to the corresponding lower bounds of the qualified array object.
+ 
+ 2021-06-21  Bob Duff  <duff@adacore.com>
+ 
+ 	* libgnat/s-valuen.ads (Value_Enumeration,
+ 	Valid_Enumeration_Value): Inline.
+ 	(Value_Enumeration_Pos): Add Pure_Function.
+ 
+ 2021-06-21  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst: Document new
+ 	feature under pragma Extensions_Allowed.
+ 	* gnat_rm.texi: Regenerate.
+ 	* errout.adb, errout.ads (Error_Msg_GNAT_Extension): Created to
+ 	issue errors when parsing extension only constructs.
+ 	* exp_ch11.adb, exp_ch11.ads (Expand_N_Raise_When_Statement):
+ 	Created to expand raise ... when constucts.
+ 	* exp_ch5.adb, exp_ch5.ads (Expand_N_Goto_When_Statement):
+ 	Created to expand goto ... when constructs.
+ 	* exp_ch6.adb, exp_ch6.ads (Expand_N_Return_When_Statement):
+ 	Created to expand return ... when constructs.
+ 	* expander.adb (Expand): Add case entries for "when" constructs.
+ 	* gen_il-gen-gen_nodes.adb, gen_il-types.ads: Add entries for
+ 	"when" constructs.
+ 	* par-ch11.adb (P_Raise_Statement): Add processing for raise ...
+ 	when.
+ 	* par-ch5.adb (Missing_Semicolon_On_Exit): Renamed to
+ 	Missing_Semicolon_On_When and moved to par-util.adb.
+ 	* par-ch6.adb (Get_Return_Kind): Renamed from Is_Simple and
+ 	processing added for "return ... when" return kind.
+ 	(Is_Simple): Renamed to Get_Return_Kind.
+ 	(P_Return_Statement): Add case for return ... when variant of
+ 	return statement.
+ 	* par-util.adb, par.adb (Missing_Semicolon_On_When): Added to
+ 	centeralize parsing of "when" keywords in the context of "when"
+ 	constructs.
+ 	* sem.adb (Analyze): Add case for "when" constructs.
+ 	* sem_ch11.adb, sem_ch11.ads (Analyze_Raise_When_Statement):
+ 	Created to analyze raise ... when constructs.
+ 	* sem_ch5.adb, sem_ch5.ads (Analyzed_Goto_When_Statement):
+ 	Created to analyze goto ... when constructs.
+ 	* sem_ch6.adb, sem_ch6.ads (Analyze_Return_When_Statement):
+ 	Created to analyze return ... when constructs.
+ 	* sprint.adb (Sprint_Node_Actual): Add entries for new "when"
+ 	nodes.
+ 
+ 2021-06-21  Steve Baird  <baird@adacore.com>
+ 
+ 	* Make-generated.in (GEN_IL_FLAGS): Keep only GNAT flags.
+ 	(ada/stamp-gen_il): Remove dependencies on libgnat/ sources.  Do not
+ 	copy libgnat/ sources locally and tidy up.
+ 	* Makefile.rtl: Include object files for new Text_Buffer units
+ 	in the GNATRTL_NONTASKING_OBJS list.
+ 	* exp_put_image.ads, exp_put_image.adb: Update Rtsfind calls to
+ 	match new specs. For example, calls to RE_Sink are replaced with
+ 	calls to RE_Root_Buffer_Type. Update comments and change
+ 	subprogram names accordingly (e.g., Preload_Sink is changed to
+ 	Preload_Root_Buffer_Type).
+ 	* impunit.adb: Add 6 new predefined units (Text_Buffers and 5
+ 	child units thereof).
+ 	* rtsfind.ads, rtsfind.adb: Add interfaces for accessing the
+ 	Ada.Strings.Text_Buffers package and declarations
+ 	therein (including the Unbounded child unit). Do not (yet)
+ 	delete interfaces for accessing the old Text_Output package.
+ 	* sem_attr.adb (Check_Put_Image_Attribute): Replace RE_Sink uses
+ 	with RE_Root_Buffer_Type and update comments accordingly.
+ 	* sem_ch10.adb (Analyze_Compilation_Unit): Update call to
+ 	reflect name change of callee (that is, the former Preload_Sink
+ 	is now Preload_Root_Buffer_Type).
+ 	* sem_ch13.adb (Has_Good_Profile): Replace RE_Sink use with
+ 	RE_Root_Buffer_Type.
+ 	(Build_Spec): Update comment describing a parameter type.
+ 	* gen_il.ads: Remove clauses for the old Text_Output package and
+ 	add them for Ada.Streams.Stream_IO.
+ 	(Sink): Declare.
+ 	(Create_File): Likewise.
+ 	(Increase_Indent): Likewise.
+ 	(Decrease_Indent): Likewise.
+ 	(Put): Likewise.
+ 	(LF): Likewise.
+ 	* gen_il.adb: Add clauses for Ada.Streams.Stream_IO.
+ 	(Create_File): New procedure.
+ 	(Increase_Indent): Likewise.
+ 	(Decrease_Indent): Likewise.
+ 	(Put): New procedures.
+ 	* gen_il-gen.adb: Add clauses for Ada.Text_IO.  Replace
+ 	Sink'Class with Sink throughout.  Use string concatenation and
+ 	LF marker instead of formatted strings and "\n" marker.  Update
+ 	Indent/Outdent calls to use new Increase_Indent/Decrease_Indent
+ 	names.
+ 	(Put_Membership_Query_Decl): Remove.
+ 	* gen_il-internals.ads: Replace Sink'Class with Sink throughout.
+ 	(Ptypes): Remove.
+ 	(Pfields): Likewise.
+ 	* gen_il-internals.adb: Remove clauses for GNAT.OS_Lib and
+ 	Ada.Strings.Text_Buffers.Files.  Replace Sink'Class with Sink
+ 	throughout.  Use string concatenation and LF marker instead of
+ 	formatted strings and "\n" marker.
+ 	(Stdout): Remove.
+ 	(Ptypes): Likewise.
+ 	(Pfields): Likewise.
+ 	* libgnarl/s-putaim.ads: Modify context clause, update
+ 	declaration of subtype Sink to refer to
+ 	Text_Buffers.Root_Buffer_Type instead of the old
+ 	Text_Output.Sink type.
+ 	* libgnarl/s-putaim.adb: Modify context clause and add use
+ 	clause to refer to Text_Buffers package.
+ 	* libgnat/a-cbdlli.ads, libgnat/a-cbdlli.adb,
+ 	libgnat/a-cbhama.ads, libgnat/a-cbhama.adb,
+ 	libgnat/a-cbhase.ads, libgnat/a-cbhase.adb,
+ 	libgnat/a-cbmutr.ads, libgnat/a-cbmutr.adb,
+ 	libgnat/a-cborma.ads, libgnat/a-cborma.adb,
+ 	libgnat/a-cborse.ads, libgnat/a-cborse.adb,
+ 	libgnat/a-cdlili.ads, libgnat/a-cdlili.adb,
+ 	libgnat/a-cidlli.ads, libgnat/a-cidlli.adb,
+ 	libgnat/a-cihama.ads, libgnat/a-cihama.adb,
+ 	libgnat/a-cihase.ads, libgnat/a-cihase.adb,
+ 	libgnat/a-cimutr.ads, libgnat/a-cimutr.adb,
+ 	libgnat/a-ciorma.ads, libgnat/a-ciorma.adb,
+ 	libgnat/a-ciormu.ads, libgnat/a-ciormu.adb,
+ 	libgnat/a-ciorse.ads, libgnat/a-ciorse.adb,
+ 	libgnat/a-coboho.ads, libgnat/a-coboho.adb,
+ 	libgnat/a-cobove.ads, libgnat/a-cobove.adb,
+ 	libgnat/a-cohama.ads, libgnat/a-cohama.adb,
+ 	libgnat/a-cohase.ads, libgnat/a-cohase.adb,
+ 	libgnat/a-coinho.ads, libgnat/a-coinho.adb,
+ 	libgnat/a-coinho__shared.ads, libgnat/a-coinho__shared.adb,
+ 	libgnat/a-coinve.ads, libgnat/a-coinve.adb,
+ 	libgnat/a-comutr.ads, libgnat/a-comutr.adb,
+ 	libgnat/a-convec.ads, libgnat/a-convec.adb,
+ 	libgnat/a-coorma.ads, libgnat/a-coorma.adb,
+ 	libgnat/a-coormu.ads, libgnat/a-coormu.adb,
+ 	libgnat/a-coorse.ads, libgnat/a-coorse.adb,
+ 	libgnat/a-nbnbin.ads, libgnat/a-nbnbin.adb,
+ 	libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.ads,
+ 	libgnat/a-nbnbre.adb, libgnat/a-strunb.ads,
+ 	libgnat/a-strunb.adb, libgnat/a-strunb__shared.ads,
+ 	libgnat/a-strunb__shared.adb, libgnat/s-rannum.ads,
+ 	libgnat/s-rannum.adb: Modify Put_Image procedure used in
+ 	Put_Image aspect specification to conform to Ada profile
+ 	rules (in particular, the first parameter shall be of type
+ 	Ada.Strings.Text_Buffers.Root_Buffer_Type'Class).
+ 	* libgnat/a-sttebu.ads, libgnat/a-sttebu.adb,
+ 	libgnat/a-stbubo.ads, libgnat/a-stbubo.adb,
+ 	libgnat/a-stbufi.ads, libgnat/a-stbufi.adb,
+ 	libgnat/a-stbufo.ads, libgnat/a-stbufo.adb,
+ 	libgnat/a-stbuun.ads, libgnat/a-stbuun.adb,
+ 	libgnat/a-stbuut.ads, libgnat/a-stbuut.adb: A new predefined
+ 	unit, Ada.Strings.Text_Buffers, and five child units.  Two of
+ 	the five are RM-defined: Bounded and Unbounded. The remaining
+ 	three are GNAT-defined: Files, Utils, and Formatting. The buffer
+ 	type corresponding to an output file, type Files.File_Buffer, is
+ 	simpler (and perhaps therefore slower) than its predecessor.
+ 	Caching similar to what was being done before could be added
+ 	later if that seems appropriate.
+ 	* libgnat/s-putima.ads: Modify context clause, update
+ 	declaration of subtype Sink to refer to
+ 	Text_Buffers.Root_Buffer_Type instead of the old
+ 	Text_Output.Sink type.
+ 	* libgnat/s-putima.adb: Modify context clause.  Update
+ 	Indent/Outdent calls to use new Increase_Indent/Decrease_Indent
+ 	names; ditto for "Put_String => Put" name change.
+ 	* libgnat/a-stteou__bootstrap.ads: Delete.
+ 
+ 2021-06-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch5.adb (Expand_Assign_Array_Bitfield_Fast): If big-endian
+ 	ordering is in effect for the operands and they are small,
+ 	adjust the unchecked conversions done around them.
+ 
+ 2021-06-21  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* einfo.ads (Return_Statement): Add documentation.
+ 	* exp_ch6.adb (Expand_N_Extended_Return_Statement): Set it.
+ 	* gen_il-fields.ads: Add it.
+ 	* gen_il-gen-gen_entities.adb: Add it.
+ 
+ 2021-06-21  Bob Duff  <duff@adacore.com>
+ 
+ 	* rtsfind.ads, libgnat/s-bitfie.ads, libgnat/s-bituti.adb,
+ 	libgnat/s-bituti.ads (Fast_Copy_Bitfield): New run-time library
+ 	function to copy bit fields faster than Copy_Bitfield. Cannot be
+ 	called with zero-size bit fields.  Remove obsolete ??? comments
+ 	from s-bituti.adb; we already do "avoid calling this if
+ 	Forwards_OK is False".
+ 	* exp_ch5.adb (Expand_Assign_Array_Loop_Or_Bitfield,
+ 	Expand_Assign_Array_Bitfield_Fast): Generate calls to
+ 	Fast_Copy_Bitfield when appropriate.
+ 	* sem_util.adb, sem_util.ads (Get_Index_Bounds): Two new
+ 	functions for getting the index bounds. These are more
+ 	convenient than the procedure of the same name, because they can
+ 	be used to initialize constants.
+ 
+ 2021-06-21  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* gen_il-fields.ads: Add Default_Subtype_Mark to enumeration
+ 	type for fields.
+ 	* gen_il-gen-gen_nodes.adb: Add call to create new field for
+ 	Formal_Type_Declaration node.
+ 	* par-ch12.adb (P_Formal_Type_Declaration): in Ada_2022 mode,
+ 	recognize new syntax for default: "or use subtype_mark".
+ 	(P_Formal_Type_Definition): Ditto for the case of a formal
+ 	incomplete type.
+ 	* sinfo.ads: Add field Default_Subtype_Mark to
+ 	N_Formal_Type_Declaration.
+ 	* sem_ch12.adb (Validate_Formal_Type_Default): New procedure, to
+ 	apply legality rules to default subtypes in formal type
+ 	declarations. Some legality rules apply to all defaults, such as
+ 	the requirement that the default for a formal type that depends
+ 	on previous formal entities must itself be a previously declared
+ 	formal of the same unit. Other checks are kind- specific.
+ 	(Analyze_Associations): Use specified default if there is no
+ 	actual provided for a formal type in an instance.
+ 	(Analyze_Formal_Type_Declaration): Call
+ 	Validate_Formal_Type_Default when default subtype is present.
+ 
+ 2021-06-21  Bob Duff  <duff@adacore.com>
+ 
+ 	* libgnat/s-valuen.ads, libgnat/s-valuen.adb
+ 	(Value_Enumeration_Pos): New function to compute the 'Pos of the
+ 	enumeration literal for a given String.  Return a special value
+ 	instead of raising an exception on invalid input. Called by both
+ 	Valid_Enumeration_Image and Value_Enumeration.
+ 	(Valid_Enumeration_Image): Return a Boolean indicating whether
+ 	the String is a valid Image for the given enumeration type.
+ 	(Value_Enumeration): Implement in terms of
+ 	Value_Enumeration_Pos.
+ 	* libgnat/s-vaenu8.ads, libgnat/s-vaen16.ads,
+ 	libgnat/s-vaen32.ads: Rename Valid_Enumeration_Image from the
+ 	instances.
+ 	* libgnat/s-valuti.ads: Correct documentation (it was not true
+ 	for the null string).
+ 	* libgnat/s-valuti.adb (Normalize_String): Do not raise
+ 	Constraint_Error for the null string, nor strings containing
+ 	nothing but blanks, so that Valid_Enumeration_Image can return
+ 	False in these cases, rather than raising an exception.
+ 	* rtsfind.ads (RE_Value_Enumeration_8, RE_Value_Enumeration_16,
+ 	RE_Value_Enumeration_32): New functions.
+ 	(RTE_Available): Improve comment (E doesn't have to be a
+ 	subprogram, although that's the usual case).
+ 	* sem_attr.adb (nalid_Value): Semantic analysis for new
+ 	attribute.
+ 	* exp_attr.adb: Call Expand_Valid_Value_Attribute for new
+ 	attribute.
+ 	* exp_imgv.ads, exp_imgv.adb (Expand_Valid_Value_Attribute): New
+ 	procedure to expand Valid_Value into a call to
+ 	Valid_Enumeration_Image_NN.
+ 	(Expand_Value_Attribute): Misc code cleanups.  Remove two ???
+ 	mark comments. RTE_Available won't work here.  For one thing,
+ 	RTE_Available (X) shouldn't be called until the compiler has
+ 	decided to make use of X (see comments on RTE_Available), and in
+ 	this case we're trying to AVOID calling something.
+ 	* snames.ads-tmpl: New attribute name.
+ 	* doc/gnat_rm/implementation_defined_attributes.rst: Document
+ 	new attribute.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-06-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* fe.h (Assume_No_Invalid_Values): Declare.
+ 	* opt.ads (Assume_No_Invalid_Values): Add warning comment.
+ 
+ 2021-06-21  Bob Duff  <duff@adacore.com>
+ 
+ 	* libgnat/s-bituti.ads (Small_Size): Do not include 0 in this
+ 	type.
+ 	* libgnat/s-bituti.adb (Copy_Bitfield): Do nothing for 0-bit
+ 	bitfields.
+ 
+ 2021-06-21  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* exp_ch9.adb (Build_Simple_Entry_Call): Add comment.
+ 	* libgnat/s-rannum.adb (Random): Update comment.
+ 	* libgnat/s-rannum.ads (Generator): Update comment.
+ 
+ 2021-06-21  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* doc/gnat_rm/representation_clauses_and_pragmas.rst (Address
+ 	Clauses): Fix unbalanced parens.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-06-21  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* errout.adb (Handle_Serious_Error): Capitalize comment.
+ 	* exp_dbug.adb (Set_Entity_Name): Capitalize sentence.
+ 	* exp_dist.adb (Expand_All_Calls_Remote_Subprogram_Call): Fix
+ 	typo.
+ 	* sem_ch3.adb (Modular_Type_Declaration): Add space after comma.
+ 
+ 2021-06-21  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* debug.adb: Document -gnatd_U as taken.
+ 	* err_vars.ads (Warning_Doc_Switch): Set to True.
+ 	* errout.ads (Errout): Update documentation.
+ 	* gnat1drv.adb (Adjust_Global_Switches): React to -gnatd_U.
+ 	* hostparm.ads (Tag_Errors): Set to True.
+ 	* opt.ads (Unique_Error_Tag): Document -gnatd_U.
+ 
+ 2021-06-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* urealp.ads (UR_Write_To_JSON): Declare.
+ 	* urealp.adb (Decimal_Exponent_Hi): Treat numbers in base 10
+ 	specially and rewrite handling of numbers in other bases.
+ 	(Decimal_Exponent_Lo): Likewise.
+ 	(Normalize): Minor tweak.
+ 	(UR_Write_To_JSON): New wrapper procedure around UR_Write.
+ 	* repinfo.adb (List_Type_Info): When the output is to JSON, call
+ 	UR_Write_To_JSON instead of UR_Write.
+ 
+ 2021-06-21  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Indexed_Component_Bit_Offset): Return an unknown
+ 	offset for components within multidimensional arrays; remove
+ 	redundant parens.
+ 
+ 2021-06-21  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Find_Overlaid_Entity): Ignore references to
+ 	components and discriminants.
+ 
+ 2021-06-21  Doug Rupp  <rupp@adacore.com>
+ 
+ 	* Makefile.rtl (aarch64-linux) [LIBGNAT_TARGET_PAIRS]: Add
+ 	$(TRASYM_DWARF_UNIX_PAIRS).
+ 	[EXTRA_GNAT_RTL_NONTASKING_OBJS]: Add $(TRASYM_DWARF_UNIX_OBJS)
+ 
+ 2021-06-21  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* exp_util.adb (Expand_Sliding_Conversion): Only perform
+ 	expansion when Expander_Active is True. Add a comment about this
+ 	and refine existing comment regarding string literals.
+ 
+ 2021-06-21  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Denotes_Same_Object): Simplify handling of
+ 	slices.
+ 
+ 2021-06-21  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Is_Object_Renaming): Rename from Is_Renaming;
+ 	simplify; adapt callers.
+ 
+ 2021-06-21  Frederic Konrad  <konrad@adacore.com>
+ 
+ 	* Makefile.rtl: Compiles both static and dynamic libgnat for
+ 	powerpc64-wrs-vxworks7r2.
+ 
+ 2021-06-18  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch3.adb (Constrain_Array): Add error checking for
+ 	fixed-lower-bound and constrained index ranges applied
+ 	inappropriately on subtypes of unconstrained and
+ 	fixed-lower-bound array types.
+ 	(Constrain_Index): Correct and refine comment related to
+ 	fixed-lower-bound index ranges.
+ 
+ 2021-06-18  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen.adb: Improve comments.
+ 	* snames.ads-tmpl (Convention_Id): Remove "--  Plenty of space
+ 	for expansion", because that's irrelevant now that we are no
+ 	longer laying out node fields by hand.
+ 
+ 2021-06-18  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Denotes_Same_Object): Handle character literals
+ 	just like integer literals.
+ 
+ 2021-06-18  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Denotes_Same_Object): Explicitly test for node
+ 	kinds being the same; deal with renamings one-by-one; adjust
+ 	numbers in references to the Ada RM.
+ 
+ 2021-06-18  Bob Duff  <duff@adacore.com>
+ 
+ 	* sprint.adb (Write_Source_Line): Check for EOF in
+ 	Line_Terminator loop.  Note that when a source file is read in,
+ 	an EOF character is added to the end.
+ 
+ 2021-06-18  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_aux.adb (Package_Specification): Add assertions to confirm
+ 	the kind of the of parameter and returned node.
+ 	* sem_ch12.adb (Remove_Parent): Reorder conditions; this change
+ 	appears to be semantically neutral, but is enough to avoid the
+ 	problematic call to Package_Specification.
+ 	* sem_util.adb (Is_Incomplete_Or_Private_Type): Replace loop
+ 	with a call to Package_Specification.
+ 
+ 2021-06-18  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_attr.adb (Eval_Attribute): For Enum_Lit'Size, use
+ 	Enum_Type'Object_Size.
+ 
+ 2021-06-18  Olivier Hainque  <hainque@adacore.com>
+ 
+ 	* sigtramp-vxworks-target.inc (__aarch64__): Sync
+ 	REGNO_PC_OFFSET with the back-end DWARF_ALT_FRAME_RETURN_COLUMN.
+ 	In CFI_COMMON_REGS, leave r18 alone, VxWorks private.
+ 
+ 2021-06-18  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* contracts.adb (Process_Spec_Postconditions): Add missing
+ 	support for aliased subprograms and handle wrappers of
+ 	class-wide pre/post conditions.
+ 	(Process_Inherited_Preconditions): Add missing support for
+ 	aliased subprograms and handle wrappers of class-wide pre/post
+ 	conditions.
+ 	* einfo.ads (Class_Wide_Clone): Fix typo.
+ 	(Is_Class_Wide_Clone): Removed since it is not referenced.
+ 	(Is_Wrapper): Documenting new flag.
+ 	(LSP_Subprogram): Documenting new attribute.
+ 	* exp_ch3.adb (Make_Controlling_Function_Wrappers): Decorate
+ 	wrapper as Is_Wrapper and adjust call to
+ 	Override_Dispatching_Operation.
+ 	* freeze.adb (Build_Inherited_Condition_Pragmas): Fix typo in
+ 	documentation.
+ 	(Check_Inherited_Conditions): Handle LSP wrappers; ensure
+ 	correct decoration of LSP wrappers.
+ 	* gen_il-fields.ads (Is_Class_Wide_Clone): Removed.
+ 	(Is_Wrapper): Added.
+ 	(LSP_Subprogram): Added.
+ 	* gen_il-gen-gen_entities.adb (Is_Class_Wide_Clone): Removed.
+ 	(Is_Wrapper): Added.
+ 	(LSP_Subprogram): Added.
+ 	* gen_il-internals.adb (Image): Adding uppercase image of
+ 	LSP_Subprogram.
+ 	* sem_ch6.adb (New_Overloaded_Entity): Fix decoration of LSP
+ 	wrappers.
+ 	* sem_disp.ads (Override_Dispatching_Operation): Remove
+ 	parameter Is_Wrapper; no longer needed.
+ 	* sem_disp.adb (Check_Dispatching_Operation): Adjust assertion.
+ 	(Override_Dispatching_Operation): Remove parameter Is_Wrapper;
+ 	no longer needed.
+ 	* treepr.adb (Image): Adding uppercase image of LSP_Subprogram.
+ 
+ 2021-06-18  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_Quantified_Expression): Ensure the type
+ 	of the name of a "for of" loop is frozen.
+ 	* exp_disp.adb (Check_Premature_Freezing): Complete condition to
+ 	take into account a private type completed by another private
+ 	type now that the freezing rule are better implemented.
+ 	* freeze.adb (Freeze_Entity.Freeze_Profile): Do not perform an
+ 	early freeze on types if not in the proper scope. Special case
+ 	expression functions that requires access to the dispatch table.
+ 	(Should_Freeze_Type): New.
+ 	* sem_ch13.adb (Resolve_Aspect_Expressions): Prevent assert
+ 	failure in case of an invalid tree (previous errors detected).
+ 	* sem_res.adb (Resolve): Remove kludge related to entities
+ 	causing incorrect premature freezing.
+ 	* sem_util.adb (Ensure_Minimum_Decoration): Add protection
+ 	against non base types.
+ 
+ 2021-06-18  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch3.adb (Constrain_Index): Set the High_Bound of a
+ 	fixed-lower-bound subtype's range to T (the subtype of the FLB
+ 	index being constrained) rather than Base_Type (T).
+ 
+ 2021-06-18  Bob Duff  <duff@adacore.com>
+ 
+ 	* ada_get_targ.adb, aspects.ads, checks.adb, cstand.adb,
+ 	einfo.ads, exp_attr.adb, freeze.adb, get_targ.adb,
+ 	libgnat/a-textio.ads, libgnat/g-memdum.ads,
+ 	libgnat/s-scaval__128.adb, libgnat/s-scaval.adb, make.adb,
+ 	osint.ads, par-prag.adb, sem_ch13.adb, sem_prag.adb,
+ 	sem_prag.ads, set_targ.adb, set_targ.ads, snames.ads-tmpl,
+ 	targparm.ads, types.ads: Remove AAMP-specific code.
+ 	* switch.ads: Minor reformatting.
+ 	* gen_il-fields.ads, gen_il-gen.adb,
+ 	gen_il-gen-gen_entities.adb, gen_il-types.ads, einfo-utils.adb,
+ 	einfo-utils.ads: Package Types now contains "type Float_Rep_Kind
+ 	is (IEEE_Binary);", which used to also have an enumeral AAMP.
+ 	Gen_IL can't handle fields of this type, which would be zero
+ 	sized. Therefore, we move the Float_Rep field into Einfo.Utils
+ 	as a synthesized attribute. (We do not delete the field
+ 	altogether, in case we want new floating-point representations
+ 	in the future.)
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst,
+ 	doc/gnat_rm/implementation_defined_aspects.rst,
+ 	doc/gnat_ugn/building_executable_programs_with_gnat.rst,
+ 	doc/gnat_ugn/the_gnat_compilation_model.rst: Remove
+ 	AAMP-specific documentation.
+ 	* gnat_rm.texi, gnat_ugn.texi: Regenerate.
+ 
+ 2021-06-18  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* exp_util.adb (Expand_Sliding_Conversion): Move test of
+ 	Is_Fixed_Lower_Bound_Subtype to an assertion. Exclude string
+ 	literals from sliding expansion.
+ 
+ 2021-06-18  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_warn.adb (Warn_On_Overlapping_Actuals): Cleanup conditions
+ 	related to Ada_Version.
+ 
+ 2021-06-18  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Address_Value): Simplify.
+ 
+ 2021-06-18  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_attr.adb (Check_Array_Or_Scalar_Type): Use Expr_Value
+ 	instead of Intval, because the latter only exists in literals.
+ 	Remove Set_Etype on E1; setting the type is done elsewhere.
+ 
+ 2021-06-18  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_warn.adb (Warn_On_Overlapping_Actuals): Examine types of
+ 	both formal parameters; refactor a complex detection of
+ 	by-reference types.
+ 
+ 2021-06-18  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* gnatcmd.adb: Fix handling of check and test commands.
+ 
+ 2021-06-18  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst: Add
+ 	documentation for the array fixed-lower-bound feature.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-06-18  Bob Duff  <duff@adacore.com>
+ 
+ 	* debug.adb: Document switch.
+ 	* exp_aggr.adb: If -gnatd_g was given, then do not bump the
+ 	limit to 500_000.
+ 
+ 2021-06-18  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_util.ads, sem_util.adb (Has_Access_Values): Remove
+ 	Include_Internal parameter that was added in previous change.
+ 	* sem_warn.adb (Warnings_Off_E1): Back out E_Out_Parameter ==>
+ 	Formal_Kind change made previously. Check Is_Private_Type to
+ 	avoid warnings on private types. Misc cleanup.
+ 	* sem_attr.adb (Attribute_Has_Access_Values): Remove
+ 	Include_Internal parameter.
+ 
+ 2021-06-18  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_warn.adb (Warn_On_Overlapping_Actuals): Remove dead branch
+ 	for overlapping actuals in prefix notation.
+ 
+ 2021-06-18  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_prag.adb (Process_Import_Or_Interface): Do not
+ 	artificially record a possible modification for a constant.
+ 
+ 2021-06-18  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_ch6.adb (Expand_Call_Helper): Code cleanups.
+ 
+ 2021-06-18  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_aggr.adb, exp_dist.adb, exp_unst.adb, sa_messages.ads,
+ 	sem_ch13.adb, sem_ch3.adb, sem_ch5.adb, sem_eval.adb,
+ 	sem_util.adb, sem_util.ads, sinfo.ads: Update comments.
+ 
+ 2021-06-18  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* back_end.adb (Scan_Back_End_Switches): Set Opt.JSON_Output to
+ 	True if -fdiagnostics-format=json option is found.
+ 	* back_end.ads (Scan_Compiler_Arguments): Mention
+ 	Opt.JSON_Output.
+ 	* errout.adb (Output_JSON_Message): New procedure.
+ 	(Output_Messages): If Opt.JSON_Output is True, print messages
+ 	with new Output_JSON_Message procedure.
+ 	* opt.ads: Declare JSON_Output variable.
+ 	* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
+ 	Mention new -fdiagnostics-format option.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2021-06-18  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_ch6.adb (Null_Exclusions_Match): Relax null exclusion
+ 	mismatch check when Relaxed_RM_Semantics is set.
+ 
+ 2021-06-18  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* fe.h, opt.adb, opt.ads, par-prag.adb, sem_prag.adb,
+ 	switch-c.adb (Extensions_Allowed): Replace by a function.
+ 	(Ada_Version_Type): Add new value Ada_With_Extensions, to
+ 	replace setting of Extensions_Allowed.  Update setting of
+ 	Extensions_Allowed.
+ 
+ 2021-06-18  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* bindgen.adb (Gen_Output_File_Ada): Generate a new constant
+ 	GNAT_Version_Address.
+ 	* libgnat/g-comver.adb (GNAT_Version_Address): New;
+ 	(GNAT_Version): Use GNAT_Version_Address to disable LTO warning.
+ 
+ 2021-06-18  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* einfo.ads (Is_Ada_2022_Only): Adding documentation.
+ 	* gen_il-fields.ads (Is_Ada_2022_Only): New flag.
+ 	* gen_il-gen-gen_entities.adb (Is_Ada_2022_Only): New flag.
+ 	* itypes.adb (Create_Null_Excluding_Itype): Inherit
+ 	Is_Ada_2022_Only.
+ 	* sem_ch3.adb (Check_Abstract_Overriding): Skip reporting error
+ 	on Ada 2022 only subprograms that require overriding if we are
+ 	not in Ada 2022 mode.
+ 	(Derive_Subprogram): Inherit Is_Ada_2022_Only.
+ 	* sem_ch6.adb (Check_Overriding_Indicator): Inherit
+ 	Is_Ada_2022_Only.
+ 	(New_Overloaded_Entity): Inherit Is_Ada_2022_Only.
+ 	* sem_ch7.adb (Declare_Inherited_Private_Subprograms): Inherit
+ 	Is_Ada_2022_Only.
+ 	(Preserve_Full_Attributes): Inherit Is_Ada_2022_Only.
+ 	* sem_disp.adb (Find_Hidden_Overridden_Primitive): Inherit
+ 	Is_Ada_2022_Only.
+ 	(Override_Dispatching_Operation): Inherit Is_Ada_2022_Only.
+ 	* sem_prag.adb (Analyze_Pragma): Allow form with argument for
+ 	Ada 2022.
+ 	* sem_type.adb: (Disambiguate): Deal with Is_Ada_2022_Only
+ 	* lib-xref.adb (Generate_Reference): Error on static and
+ 	dispatching calls to Ada 2022 subprograms that require
+ 	overriding if we are not in Ada 2022 mode; warn on other
+ 	references to Ada 2022 entities when not in Ada 2022 mode.
+ 	* sem_ch13.adb (Inherit_Aspects_At_Freeze_Point): Inherit
+ 	Ada_2020_Only.
+ 	* libgnat/a-cdlili.ads (Empty): Adding pragma Ada_2022.
+ 	* libgnat/a-cidlli.ads (Empty): Adding pragma Ada_2022.
+ 	* libgnat/a-ciorma.ads (Empty): Adding pragma Ada_2022.
+ 	* libgnat/a-cobove.ads (Empty): Adding pragma Ada_2022.
+ 	* libgnat/a-coorma.ads (Empty): Adding pragma Ada_2022.
+ 	(New_Vector): Adding pragma Ada_2022.
+ 	(Insert_Vector): Adding pragma Ada_2022.
+ 	(Prepend_Vector): Adding pragma Ada_2022.
+ 	(Append_Vector): Adding pragma Ada_2022.
+ 
+ 2021-06-17  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_ch3.adb (Check_Ops_From_Incomplete_Type): Protect against
+ 	no Primitive_Operations.
+ 
+ 2021-06-17  Vadim Godunko  <godunko@adacore.com>
+ 
+ 	* libgnat/a-strunb__shared.ads (Allocate): Additional parameter
+ 	to provide additional amount of space to be allocated.
+ 	* libgnat/a-strunb__shared.adb (Aligned_Max_Length): Limit
+ 	length to Natural'Last when requested length is larger than it.
+ 	(Allocate): Merge two slightly different implementations into
+ 	one.
+ 
+ 2021-06-17  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* checks.adb (Discrete_Range_Cond): For an index subtype that
+ 	has a fixed lower bound, require that the range's lower bound
+ 	match that of the subtype.
+ 	(Selected_Range_Checks): Warn about the case where a static
+ 	lower bound does not equal an index subtype's fixed lower bound.
+ 	* einfo.ads (Is_Fixed_Lower_Bound_Array_Subtype,
+ 	Is_Fixed_Lower_Bound_Index_Subtype): Document new entity flag.
+ 	* exp_ch4.adb (Expand_N_Type_Conversion): If the operand is of
+ 	an unconstrained array subtype with fixed lower bound, then
+ 	Expand_Sliding_Conversion is applied to the operand.
+ 	* exp_ch6.adb (Expand_Simple_Function_Return): If the result
+ 	subtype is an unconstrained array subtype with fixed lower
+ 	bound, then Expand_Sliding_Conversion is applied to the return
+ 	object.
+ 	* exp_util.ads (Expand_Sliding_Conversion): New procedure for
+ 	applying a sliding subtype conversion to an array object of a
+ 	fixed-lower-bound subtype when needed.
+ 	* exp_util.adb: Add with_clause for Freeze.
+ 	(Expand_Sliding_Conversion): New procedure for applying a
+ 	sliding subtype conversion to an array object of a
+ 	fixed-lower-bound subtype when needed.  It traverses the indexes
+ 	of the unconstrained array type/subtype to create a target
+ 	constrained subtype and rewrites the array object to be a
+ 	conversion to that subtype, when there's at least one index
+ 	whose lower bound does not statically match the fixed-lower
+ 	bound of the target subtype.
+ 	* gen_il-fields.ads (type Opt_Field_Enum): Add literals
+ 	Is_Fixed_Lower_Bound_Array_Subtype and
+ 	Is_Fixed_Lower_Bound_Index_Subtype for new flags on type
+ 	entities.
+ 	* gen_il-gen-gen_entities.adb: Add calls to
+ 	Create_Semantic_Field for the new fixed-lower-bound flags on
+ 	type entities.
+ 	* par-ch3.adb (P_Array_Type_Definition): Add handling for
+ 	parsing of fixed-lower-bound index ranges in unconstrained array
+ 	types. Report an error if such an index is encountered and GNAT
+ 	language extensions are not enabled.
+ 	(P_Index_Subtype_Def_With_Fixed_Lower_Bound): Support procedure
+ 	for parsing unconstrained index ranges.
+ 	(P_Index_Or_Discriminant_Constraint): Add handling for parsing
+ 	of index constraints that specify ranges with fixed lower
+ 	bounds. Report an error if such an index is encountered and GNAT
+ 	language extensions are not enabled.
+ 	* sem_ch3.adb (Analyze_Object_Declaration): If the object's
+ 	nominal subtype is an array subtype with fixed lower bound, then
+ 	Expand_Sliding_Conversion is applied to the object.
+ 	(Array_Type_Declaration): Mark the array type and the subtypes
+ 	of any indexes that specify a fixed lower bound as being
+ 	fixed-lower-bound subtypes, and set the High_bound of the range
+ 	of such an index to the upper bound of the named subtype.
+ 	(Constrain_Array): For an array subtype with one or more index
+ 	ranges specifying a fixed lower bound, set Is_Constrained to
+ 	False and set the array subtype's
+ 	Is_Fixed_Lower_Bound_Array_Subtype flag to True.
+ 	(Constrain_Index): Mark the subtypes of an index that specifies
+ 	a fixed lower bound as being a fixed-lower-bound index subtype,
+ 	and set the High_bound of the range of such an index to the
+ 	upper bound of the base type of the array type's corresponding
+ 	index.
+ 	* sem_res.adb (Resolve_Actuals): If a formal is of an
+ 	unconstrained array subtype with fixed lower bound, then
+ 	Expand_Sliding_Conversion is applied to the actual.
+ 	* sem_util.adb (Build_Actual_Subtype): If the actual subtype
+ 	corresponds to an unconstrained array subtype having any indexes
+ 	with fixed lower bounds, then set the lower bounds of any such
+ 	indexes of the actual subtype to the appropriate fixed lower
+ 	bound of the formal subtype (rather than taking it from the
+ 	formal itself).
+ 	* sprint.adb (Sprint_Node_Actual, case N_Range): If a range's
+ 	Etype has a fixed lower bound, then print "<>" rather than the
+ 	High_Bound of the range.
+ 
+ 2021-06-17  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_util.adb, sem_util.ads (Has_Access_Values): New formal
+ 	Include_Internal to indicate whether internal types should be
+ 	included.
+ 	* sem_warn.adb (Check_References): Change E_Out_Parameter to
+ 	Formal_Kind, to match the comment about Spec_Entity.  Pass
+ 	Include_Internal => False to Has_Access_Values, so that we warn
+ 	on types with access values that happen to be in internal types,
+ 	such as Unbounded_String.
+ 	* sem_attr.adb (Attribute_Has_Access_Values): Pass
+ 	Include_Internal => True to Has_Access_Values, to preserve
+ 	existing behavior.
+ 	* libgnat/g-rewdat.adb (Do_Output): Change B from 'in out' to
+ 	'in', to avoid warning enabled by the change to sem_warn.adb.
+ 	* libgnat/s-objrea.adb (Check_Read_Offset): Change S from 'in
+ 	out' to 'in', to avoid warning enabled by the change to
+ 	sem_warn.adb.
+ 
+ 2021-06-17  Steve Baird  <baird@adacore.com>
+ 
+ 	* exp_ch5.adb
+ 	(Expand_N_Case_Statement.Expand_General_Case_Statement): New
+ 	subprogram.
+ 	(Expand_N_Case_Statement): If extensions are allowed and the
+ 	case selector is not of a discrete type, then call
+ 	Expand_General_Case_Statement to generate expansion instead of
+ 	flagging the non-discrete selector as an error.
+ 	* sem_case.ads (Is_Case_Choice_Pattern): New Boolean-valued
+ 	function for testing whether a given expression occurs as part
+ 	of a case choice pattern.
+ 	* sem_case.adb (Composite_Case_Ops): New package providing
+ 	support routines for the new form of case statements. This
+ 	includes a nested package, Composite_Case_Ops.Value_Sets, which
+ 	encapsulates the "representative values" implementation of
+ 	composite value sets.
+ 	(Check_Choices.Check_Case_Pattern_Choices): New procedure for
+ 	semantic checking of non-discrete case choices. This includes
+ 	the checks pertaining to coverage and overlapping.
+ 	(Check_Choices.Check_Composite_Case_Selector): New procedure for
+ 	semantic checking of non-discrete case selectors.
+ 	(Check_Choices): If extensions are allowed then a non-discrete
+ 	selector type no longer implies that an error must have been
+ 	flagged earlier.  Instead of simply returning, call
+ 	Check_Composite_Case_Selector and Check_Case_Pattern_Choices.
+ 	(Is_Case_Choice_Pattern): Body of new function declared in
+ 	sem_case.ads .
+ 	* sem_ch5.adb (Analyze_Case_Statement): If extensions are
+ 	allowed, then we can't use RM 5.4's "The selecting_expression is
+ 	expected to be of any discrete type" name resolution rule.
+ 	Handle the case where the type of the selecting expression is
+ 	not discrete, as well as the new ambiguous-name-resolution error
+ 	cases made possible by this change.
+ 	* sem_res.adb (Resolve_Entity_Name): It is ok to treat the name
+ 	of a type or subtype as an expression if it is part of a case
+ 	choice pattern, as in "(Field1 => Positive, Field2 => <>)".
+ 	* exp_aggr.adb (Expand_Record_Aggregate): Do not expand case
+ 	choice aggregates.
+ 	* gen_il-fields.ads: Define two new node attributes,
+ 	Binding_Chars and Multidefined_Bindings.
+ 	* gen_il-gen-gen_nodes.adb: The new Multidefined_Bindings
+ 	attribute is Boolean-valued and may be set on
+ 	N_Case_Statement_Alternative nodes. The new Binding_Chars
+ 	attribute is Name_Id-valued and may be set on
+ 	N_Component_Association nodes.
+ 	* par-ch4.adb (P_Record_Or_Array_Component_Association): When
+ 	parsing a component association, check for both new syntax forms
+ 	used to specify a bound value in a case-choice aggregate.  In
+ 	the case of a box value, an identifier may occur within the box,
+ 	as in "Foo => <Abc>" instead of "Foo => <>". In the more general
+ 	case, an expression (or a box) may be followed by "is
+ 	<identifier>", as in
+ 	"Foo => Bar is Abc" instead of just "Foo => Bar".
+ 	* sem_aggr.adb (Resolve_Record_Aggregate): Do not transform box
+ 	component values in a case-choice aggregate.
+ 	* sinfo.ads: Provide comments for the new attributes added in
+ 	gen_il-fields.ads.
+ 	* doc/gnat_rm/implementation_defined_pragmas.rst: Describe this
+ 	new feature in documentation for pragma Extensions_Allowed.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-06-17  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_Expression_With_Actions.Process_Action):
+ 	Do not abandon processing on a nested N_Expression_With_Actions
+ 	or N_Loop_Statement, otherwise we may miss some transient
+ 	declarations.
+ 
+ 2021-06-17  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_util.adb (Find_Hook_Context): Do not stop on an aggregate
+ 	node.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Is_Valid_Renaming): Check not only indexed
+ 	components, but slices too.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Analyze_Private_Extension_Declaration): Check
+ 	No_Wide_Characters restriction after rejecting illegal parent
+ 	types.
+ 	(Derived_Type_Declaration): Likewise.
+ 	(Find_Type_Of_Subtype_Indic): Remove check for
+ 	No_Wide_Characters restriction, which was done too early.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Is_Valid_Renaming): Body moved from its nested
+ 	routine.
+ 
+ 2021-06-17  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch12.adb (Instantiate_Type): If the actual type for an
+ 	incomplete formal type is also incomplete, but has a Full_View,
+ 	use the Full_View of the actual type rather than the incomplete
+ 	view.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* doc/gnat_ugn/building_executable_programs_with_gnat.rst
+ 	(-gnatw.I): Remove double period at the end of sentence.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Denotes_Same_Object): Call Get_Index_Bounds with
+ 	the range of a slice object, not its type.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_warn.adb (Warn_On_Overlapping_Actuals): Fix style;
+ 	refactor repeated calls to Nkind; remove early RETURN.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_warn.adb (Warn_On_Overlapping_Actuals): Ignore formal of
+ 	generic types, but keep examining other parameters.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_warn.adb (Warn_On_Overlapping_Actuals): Remove dead code.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_warn.adb (Warn_On_Overlapping_Actuals): Remove repeated
+ 	code.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* checks.adb (Overlap_Check): Replace Set_Casing with
+ 	Adjust_Name_Case and adapt surrounding code as needed.
+ 
+ 2021-06-17  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/s-putaim.ads, libgnat/s-putaim.adb: Move...
+ 	* libgnarl/s-putaim.ads, libgnarl/s-putaim.adb: ... here.
+ 
+ 2021-06-17  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* uintp.ads, uintp.adb (UI_To_Unsigned_64): New.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_prag.adb (Get_Overflow_Mode): Reword error message.
+ 	* switch-c.adb (Get_Overflow_Mode): Likewise.
+ 
+ 2021-06-17  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* exp_util.adb (Expand_Static_Predicates_In_Choices): Handle
+ 	Others_Discrete_Choices in N_Others_Choice.
+ 
+ 2021-06-17  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* atree.adb: Remove redundant comment with spec.
+ 	* sem_warn.adb: Fix typo in comment.
+ 
+ 2021-06-17  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* atree.adb: Do not suppress checks.
+ 
+ 2021-06-17  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* exp_ch3.adb (Check_Missing_Others): Add comment.
+ 	(Build_Initialization_Call): Remove inaccurate accessibility
+ 	comment.
+ 	* sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Remove
+ 	test for Ada2012.
+ 	(Analyze_Package_Instantiation): Remove speculative comment.
+ 	(Inline_Instance_Body): Add comments for loops.
+ 	(Build_Subprogram_Renaming): Remove comment about fix being
+ 	partial and "ugly."
+ 	(Instantiate_Subprogram_Body): Remove comment referencing DEC
+ 	related internal issue.
+ 	(Subtypes_Match): Add comment and simplify anonymous access
+ 	test.
+ 	(Is_Global): Add test for when E is an expanded name, and
+ 	calculate the scope accordingly.
+ 	* sem_ch6.adb (Analyze_Function_Return): Update comment
+ 	regarding accessibility, and add check for
+ 	Warn_On_Ada_2012_Compatibility.
+ 	(Mask_Type_Refs): Add comments.
+ 	(Analyze_Subprogram_Declaration): Remove mysterious suppression
+ 	of elaboration checks.
+ 	* sem_ch7.adb (Preserve_Full_Attributes): Preserve Is_Atomic
+ 	value.
+ 	* sem_ch8.adb (Most_Descendant_Use_Clause): Remove comment.
+ 	(Note_Redundant_Use): Fix calls to Find_First_Use to be
+ 	Find_Most_Prev.
+ 	(Get_Object_Name): Modify error message to be more descriptive.
+ 	(Known_But_Visible): Remove mysterious special case for
+ 	GNAT_Mode.
+ 	(Find_First_Use): Removed.
+ 	(Find_Most_Prev): Renamed from Find_First_Use.
+ 	* sem_prag.adb (Check_Static_Constraint): Add comments to
+ 	routine.
+ 
+ 2021-06-17  Bob Duff  <duff@adacore.com>
+ 
+ 	* treepr.adb (Print_Node): Display the Entity or Associated_Node
+ 	fields if appropriate.
+ 	* sinfo-utils.ads (F_Associated_Node, F_Entity): Remove. These
+ 	are no longer needed.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* checks.adb (Apply_Parameter_Aliasing_Checks): Replace calls to
+ 	Is_Object_Reference with calls to Is_Name_Reference; remove
+ 	asymmetric condition that only detected an aggregate as the
+ 	first actual (aggregate objects were just a special case of an
+ 	object reference that was not a name).
+ 
+ 2021-06-17  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen.adb, gen_il-internals.ads: Generate field
+ 	enumeration literals with "F_" prefix.  Update all generated
+ 	references accordingly.
+ 	* atree.adb, einfo-utils.adb, sem_ch3.adb, sem_ch5.adb,
+ 	sem_ch6.adb, sem_ch8.adb, sinfo-cn.adb, sinfo-utils.adb,
+ 	sinfo-utils.ads, treepr.adb: Add "F_" prefix to all uses of the
+ 	field enumeration literals.
+ 
+ 2021-06-17  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/i-c.ads, libgnat/i-cexten.ads,
+ 	libgnat/i-cexten__128.ads: bool renamed C_bool.
+ 
+ 2021-06-17  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch4.adb (Analyze_Allocator): Reject allocators in
+ 	restricted contexts.
+ 
+ 2021-06-17  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* gcc-interface/Make-lang.in: Use libgnat.so if libgnat.a cannot
+ 	be found.
+ 
+ 2021-06-16  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Is_Volatile_Function): Follow the exact wording
+ 	of SPARK (regarding volatile functions) and Ada (regarding
+ 	protected functions).
+ 
+ 2021-06-16  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Is_OK_Volatile_Context): All references to
+ 	volatile objects are legal in preanalysis.
+ 	(Within_Volatile_Function): Previously it was wrongly called on
+ 	Empty entities; now it is only called on E_Return_Statement,
+ 	which allow the body to be greatly simplified.
+ 
+ 2021-06-16  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_res.adb (Set_Slice_Subtype): Revert special-case
+ 	introduced previously, which is not needed as Itypes created for
+ 	slices are precisely always used.
+ 
+ 2021-06-16  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* urealp.adb (Scale): Change first paramter to Uint and adjust.
+ 	(Equivalent_Decimal_Exponent): Pass U.Den directly to Scale.
+ 	* libgnat/s-exponr.adb (Negative): Rename to...
+ 	(Safe_Negative): ...this and change its lower bound.
+ 	(Exponr): Adjust to above renaming and deal with Integer'First.
+ 
+ 2021-06-16  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.adb (Flag_Effectively_Volatile_Objects): Detect also
+ 	allocators within restricted contexts and not just entity names.
+ 	(Resolve_Actuals): Remove duplicated code for detecting
+ 	restricted contexts; it is now exclusively done in
+ 	Is_OK_Volatile_Context.
+ 	(Resolve_Entity_Name): Adapt to new parameter of
+ 	Is_OK_Volatile_Context.
+ 	* sem_util.ads, sem_util.adb (Is_OK_Volatile_Context): Adapt to
+ 	handle contexts both inside and outside of subprogram call
+ 	actual parameters.
+ 	(Within_Subprogram_Call): Remove; now handled by
+ 	Is_OK_Volatile_Context itself and its parameter.
+ 
+ 2021-06-16  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sinput.adb (Sloc_Range): Refactor several repeated calls to
+ 	Sloc and two comparisons with No_Location.
+ 
+ 2021-06-16  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* checks.adb (Apply_Scalar_Range_Check): Fix handling of check depending
+ 	on the parameter passing mechanism.  Grammar adjustment ("has"
+ 	=> "have").
+ 	(Parameter_Passing_Mechanism_Specified): Add a hyphen in a comment.
+ 
+ 2021-06-16  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch3.adb (Build_Slice_Assignment): Remove unused
+ 	initialization.
+ 
+ 2021-06-16  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* restrict.adb, sem_attr.adb, types.ads: Fix typos in
+ 	"occuring"; refill comment as necessary.
+ 
+ 2021-06-16  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.ads (Is_Actual_Parameter): Update comment.
+ 	* sem_util.adb (Is_Actual_Parameter): Also detect entry parameters.
+ 
+ 2021-06-16  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* rtsfind.ads, libgnarl/s-taskin.ads, exp_ch3.adb, exp_ch4.adb,
+ 	exp_ch6.adb, exp_ch9.adb, sem_ch6.adb: Move master related
+ 	entities to the expander directly.
+ 
+ 2021-06-16  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.adb (Is_Assignment_Or_Object_Expression): Whitespace
+ 	cleanup.
+ 	(Is_Attribute_Expression): Prevent AST climbing from going to
+ 	the root of the compilation unit.
+ 
+ 2021-06-16  Steve Baird  <baird@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_advice.rst: Add a section for RM
+ 	A.18 .
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-06-16  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* sem_ch13.adb (Analyze_Enumeration_Representation_Clause): Add
+ 	check for the mixing of entries.
+ 
+ 2021-06-16  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* sem_ch13.adb (Make_Aitem_Pragma): Check for static expressions
+ 	in Priority aspect arguments for restriction Static_Priorities.
+ 
+ 2021-06-16  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* sem_util.adb (Accessibility_Level): Take into account
+ 	renamings of loop parameters.
+ 
+ 2021-06-16  Matthieu Eyraud  <eyraud@adacore.com>
+ 
+ 	* par_sco.adb (Set_Statement_Entry): Change sloc for dominance
+ 	marker.
+ 	(Traverse_One): Fix typo.
+ 	(Output_Header): Fix comment.
+ 
+ 2021-06-16  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* exp_unst.adb (Register_Subprogram): Don't look for aliases for
+ 	subprograms that are generic.  Reorder tests for efficiency.
+ 
+ 2021-06-16  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_util.adb (Incomplete_Or_Partial_View): Retrieve the scope of
+ 	the parameter and use it to find its incomplete view, if any.
+ 
+ 2021-06-16  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* freeze.adb (Check_No_Parts_Violations): Return earlier if the
+ 	type is elementary or does not come from source.
+ 
+ 2021-06-16  Bob Duff  <duff@adacore.com>
+ 
+ 	* ghost.adb: Add another special case where full analysis is
+ 	needed. This bug is due to quirks in the way
+ 	Mark_And_Set_Ghost_Assignment works (it happens very early,
+ 	before name resolution is done).
+ 
+ 2021-06-16  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_util.adb (Current_Entity_In_Scope): Reimplement.
+ 
+ 2021-06-16  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch8.adb (End_Scope): Remove extra parens.
+ 
+ 2021-06-16  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* exp_disp.adb (Build_Class_Wide_Check): Ensure that evaluation
+ 	of actuals is side effects free (since the check duplicates
+ 	actuals).
+ 
+ 2021-06-16  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_res.adb (Resolve_Raise_Expression): Apply Ada_2020 rules
+ 	concerning the need for parentheses around Raise_Expressions in
+ 	various contexts.
+ 
+ 2021-06-16  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch13.adb (Validate_Unchecked_Conversion): Move detection
+ 	of generic types before switching to their private views; fix
+ 	style in using AND THEN.
+ 
+ 2021-06-16  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_ch3.adb (Analyze_Component_Declaration): Do not special
+ 	case raise expressions.
+ 
+ 2021-06-16  Sergey Rybin  <rybin@adacore.com>
+ 
+ 	* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
+ 	Instead of referring to the formatting of the Ada examples in
+ 	Ada RM add use the list of checks that are actually performed.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2021-06-16  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* initialize.c: Do not include vxWorks.h and fcntl.h from here.
+ 	(__gnat_initialize) [__MINGW32__]: Remove #ifdef and attribute
+ 	(__gnat_initialize) [init_float]: Delete.
+ 	(__gnat_initialize) [VxWorks]: Likewise.
+ 	(__gnat_initialize) [PA-RISC HP-UX 10]: Likewise.
+ 	* runtime.h: Add comment about vxWorks.h include.
+ 
+ 2021-06-16  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-except.ads (ZCX_By_Default): Delete.
+ 	(Require_Body): Likewise.
+ 	* libgnat/s-except.adb: Replace body with pragma No_Body.
+ 
+ 2021-06-15  Steve Baird  <baird@adacore.com>
+ 
+ 	* exp_util.adb (Kill_Dead_Code): Generalize the existing
+ 	handling of if statements to handle case statements similarly.
+ 
+ 2021-06-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* raise.h (_gnat_builtin_longjmp): Delete.
+ 	(set_gnat_exit_status): Likewise.
+ 
+ 2021-06-15  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_util.adb (Possible_Side_Effect_In_SPARK): Handle component
+ 	declaration just like full type and subtype declarations.
+ 
+ 2021-06-15  Yannick Moy  <moy@adacore.com>
+ 
+ 	* errout.adb (First_And_Last_Node): Also apply to arbitrary late
+ 	declarations, not only subprogram specs.
+ 
+ 2021-06-15  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_ch3.adb (Make_Class_Wide_Type): Make sure all the calls to
+ 	Reinit_Field_To_Zero are for the correct Ekinds.
+ 
+ 2021-06-15  Bob Duff  <duff@adacore.com>
+ 
+ 	* aspects.ads (No_Task_Parts): New aspect.
+ 	* snames.ads-tmpl: Add the aspect name.
+ 	* exp_ch6.adb (Might_Have_Tasks): Return False if this is a
+ 	class-wide type whose specific type has No_Task_Parts.
+ 	* freeze.adb (Check_No_Parts_Violations): This is an adaptation
+ 	of the procedure formerly known as
+ 	Check_No_Controlled_Parts_Violations, which now supports both
+ 	No_Controlled_Parts and No_Task_Parts.  It takes a parameter
+ 	indicating which aspect is being checked.
+ 	(Freeze_Entity): Call Check_No_Parts_Violations for both
+ 	aspects.
+ 	* sem_ch13.adb (Analyze_Aspect_Specifications): The code for
+ 	Aspect_No_Controlled_Parts already works as is with
+ 	Aspect_No_Task_Parts.
+ 	* libgnat/a-iteint.ads: Add No_Task_Parts aspect to the two
+ 	iterator iterfaces.
+ 	* doc/gnat_rm/implementation_defined_aspects.rst: Add
+ 	documentation for the No_Task_Parts aspect.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-06-15  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_unst.adb (Unnest_Subprogram.Build_Table.Visit_Node): Fix
+ 	handling of scopes for subprogram calls.
+ 
+ 2021-06-15  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_prag.adb: Fix typos in comments related to access types.
+ 	* sem_util.adb (Is_Access_Variable): Stronger condition.
+ 
+ 2021-06-15  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* Make-generated.in: Add rule to copy runtime files needed
+ 	during stage1.
+ 	* raise.c: Remove obsolete symbols used during bootstrap.
+ 	* gcc-interface/Make-lang.in: Do not use libgnat sources during
+ 	stage1.
+ 	(GNAT_ADA_OBJS, GNATBIND_OBJS): Split in two parts, the common
+ 	part and the part only used outside of stage1.
+ 	(ADA_GENERATED_FILES): Add runtime files needed during bootstrap
+ 	when recent APIs are needed.
+ 	(ada/b_gnatb.adb): Remove prerequisite.
+ 	* gcc-interface/system.ads: Remove obsolete entries.
+ 
+ 2021-06-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* raise-gcc.c (__gnat_personality_seh0): Use PERSONALITY_FUNCTION.
+ 
+ 2021-06-15  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_util.adb (Is_Confirming): Separate the handling of
+ 	Implicit_Dereference, for which no pragma is generated but which
+ 	is already checked for legality in Sem_Ch13, including renamed
+ 	discriminants in a derived type.
+ 	(Is_Confirming, Same_Name): For expanded names, only check
+ 	matching of selector, because prefix may correspond to original
+ 	and derived types with different names and/or scopes. Semantic
+ 	checks on aspect expression have already verified its legality.
+ 	Add comments regarding possible gaps in RM description of the
+ 	feature.
+ 
+ 2021-06-15  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* freeze.adb (Freeze_Subprogram): Don't propagate conventions
+ 	Intrinsic or Entry to anonymous access-to-subprogram types
+ 	associated with subprograms having those conventions. Update
+ 	related comment.
+ 	* sem_attr.adb (Resolve_Attribute, Attribute_*Access): Remove
+ 	special-case warning code for cases where a called subprogram
+ 	has convention Intrinsic as well as its formal's type (the
+ 	expected type for the Access attribute), since this case can no
+ 	longer occur.
+ 
+ 2021-06-15  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_imgv.adb (Expand_User_Defined_Enumeration_Image): Fix
+ 	typos.
+ 
+ 2021-06-15  Bob Duff  <duff@adacore.com>
+ 
+ 	* einfo-utils.adb (Known_Component_Size,
+ 	Known_Static_Component_Size, Unknown_Component_Size): Use
+ 	Implementation_Base_Type instead of Base_Type.
+ 
+ 2021-06-15  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen-gen_entities.adb (E_Loop_Parameter): Add
+ 	Interface_Name field.
+ 
+ 2021-06-15  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_cat.adb (Check_Non_Static_Default_Expr): Allow nonstatic
+ 	expression in predefined unit with pragma Preelaborate.
+ 
+ 2021-06-15  Yannick Moy  <moy@adacore.com>
+ 
+ 	* doc/gnat_rm/intrinsic_subprograms.rst: More details on shift
+ 	operations for signed types. Also add the missing Import and
+ 	Convention on the example.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-06-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* raise-gcc.c: Include <cstdarg> instead of <stdarg.h> in C++.
+ 	Include <stdbool.h> and unconditionally <stdlib.h> in C.
+ 
+ 2021-06-15  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.ads (Find_Overlaid_Entity): Simplify comment for
+ 	spec.
+ 	* sem_util.adb (Find_Overlaid_Entity): Remove defensive code
+ 	from body.
+ 
+ 2021-06-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* argv.c: Add include of <stdlib.h> for the runtime.
+ 	(gnat_argv): Change type to char ** and initialize to NULL.
+ 	(gnat_envp): Likewise.
+ 	* argv-lynxos178-raven-cert.c: Add include of <stdlib.h>.
+ 	(gnat_argv): Change type to char ** and initialize to NULL.
+ 	(gnat_envp): Likewise.
+ 
+ 2021-06-15  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen.adb (Setter_Needs_Parent): Add missing
+ 	Then_Actions.  Fix self-contradictory comment.
+ 	* exp_util.adb (Insert_Actions): Minor comment improvments.
+ 
+ 2021-06-15  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_eval.adb (Eval_Logical_Op, Test_Expression_Is_Foldable):
+ 	Add support for folding more "and"/"or" expressions.
+ 	* exp_util.adb (Side_Effect_Free): Fix handling of membership
+ 	tests.
+ 
+ 2021-06-15  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.adb (Resolve_Actual): Replace repeated calls to
+ 	"Etype (F)" with references to "F_Typ", which keeps the results
+ 	of exactly that call.
+ 
+ 2021-06-15  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen.adb (To_Bit_Offset): Use 'Base to avoid overflow in
+ 	computations in Last_Bit when Offset = 'Last.
+ 	(Choose_Offset): Give a better error message when we run out of
+ 	fields.  In particular, point out that
+ 	Gen_IL.Internals.Bit_Offset'Last needs to be increased.
+ 
+ 2021-06-15  Bob Duff  <duff@adacore.com>
+ 
+ 	* atree.ads, einfo-utils.ads, einfo-utils.adb, fe.h, gen_il.adb,
+ 	gen_il.ads, gen_il-gen-gen_entities.adb,
+ 	gen_il-gen-gen_nodes.adb, sem_ch12.adb, sem_ch3.adb,
+ 	sem_util.adb, sinfo-utils.ads, treepr.adb, types.ads: Clean up
+ 	??? comments and other comments.
+ 	* atree.adb: Clean up ??? comments and other comments.
+ 	(Validate_Node): Fix bug: "Off_0 (N) < Off_L (N)"
+ 	should be "Off_0 (N) <= Off_L (N)".
+ 	* gen_il-gen.adb, gen_il-gen.ads: Clean up ???
+ 	comments and other comments.  Add support for getter-specific
+ 	and setter-specific preconditions.  Detect the error of putting
+ 	a field in the wrong subrange.  Misc cleanup.
+ 	(Node_Field vs. Entity_Field): Clean up Nmake.  Improve
+ 	comments.
+ 	* gen_il-utils.ads: Misc cleanup. Move...
+ 	* gen_il-internals.ads: ... here.
+ 	* gen_il-utils.adb: Misc cleanup. Move...
+ 	* gen_il-internals.adb: ... here.
+ 	* gen_il-fields.ads: Move Was_Default_Init_Box_Association,
+ 	which was in the wrong subrange.  Add comments.  Misc cleanup.
+ 	* gen_il-types.ads: Add Named_Access_Kind.
+ 	* sinfo-cn.adb: Clean up ??? comments and other comments.
+ 	Remove redundant assertions.
+ 	* einfo.ads, sinfo.ads: Clean up ??? comments and other
+ 	comments.  Remove all the comments indicating field offsets.
+ 	These are obsolete now that Gen_IL computes the offsets
+ 	automatically.
+ 
+ 2021-06-15  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* einfo.ads, errout.adb, errout.ads, exp_aggr.adb, exp_ch5.adb,
+ 	exp_ch6.adb, exp_ch8.adb, exp_ch9.adb, exp_imgv.adb,
+ 	exp_put_image.adb, fe.h, impunit.adb, impunit.ads,
+ 	libgnat/a-cobove.ads, libgnat/a-convec.ads, opt.ads,
+ 	par-ch12.adb, par-ch3.adb, par-ch4.adb, par-ch5.adb,
+ 	par-ch6.adb, par-prag.adb, par-util.adb, scans.ads, scng.adb,
+ 	sem_aggr.adb, sem_attr.adb, sem_ch10.adb, sem_ch12.adb,
+ 	sem_ch13.adb, sem_ch3.adb, sem_ch5.adb, sem_ch6.adb,
+ 	sem_ch8.adb, sem_elab.adb, sem_eval.adb, sem_prag.adb,
+ 	sem_res.adb, sem_type.adb, sem_util.adb, sem_util.ads,
+ 	sinfo.ads, snames.ads-tmpl, sprint.adb, switch-c.adb, usage.adb,
+ 	doc/gnat_ugn/building_executable_programs_with_gnat.rst,
+ 	doc/gnat_rm/implementation_defined_aspects.rst,
+ 	gcc-interface/trans.c: Update all references to Ada 2020 to Ada
+ 	2022. Rename pragma Ada_2020 to Ada_2022.  Update documentation
+ 	accordingly.
+ 	* gnat_ugn.texi, gnat_rm.texi: Regenerate.
+ 
+ 2021-06-15  Steve Baird  <baird@adacore.com>
+ 
+ 	* sem_util.adb (Gather_Components): Factor the test that was
+ 	already being used to govern emitting a pre-Ada_2020 error
+ 	message into an expression function,
+ 	OK_Scope_For_Discrim_Value_Error_Messages. Call that new
+ 	function in two places: the point where the same test was being
+ 	performed previously, and in governing emission of a newer
+ 	Ada_2020 error message. In both cases, the out-mode parameter
+ 	Gather_Components.Report_Errors is set to True even if no error
+ 	messages are generated within Gather_Components.
+ 	* sem_util.ads: Correct a comment.
+ 
+ 2021-06-15  Richard Kenner  <kenner@adacore.com>
+ 
+ 	* sem_ch3.adb (Array_Type_Declaration, Build_Derived_Type):
+ 	Reinitialize Stored_Constraint when needed.
+ 	(Set_Modular_Size): Likewise.
+ 	* atree.adb: (Check_Vanishing_Fields): Add node id to debugging
+ 	information.
+ 
+ 2021-06-15  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_util.adb (Propagate_Invariant_Attributes): Call
+ 	Set_Has_Own_Invariants on the base type, because these are
+ 	Base_Type_Only. The problem is that the base type of a type is
+ 	indeed a base type when Set_Base_Type is called, but then the
+ 	type is mutated into a subtype in rare cases.
+ 	* atree.ads, atree.adb (Is_Entity): Export. Correct subtype of
+ 	parameter in body.
+ 	* gen_il-gen.adb: Improve getters so that "Pre => ..." can refer
+ 	to the value of the field. Put Warnings (Off) on some with
+ 	clauses that are not currently used, but might be used by such
+ 	Pre's.
+ 
+ 2021-06-15  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Access_Type_Declaration): Add comments to explain
+ 	the ordering of Mutate_Kind and Set_Directly_Designated_Type;
+ 	remove temporary setting of Ekind to E_Access_Type for building
+ 	_master objects, since now the Ekind is already set to its final
+ 	value. Move repeated code into Setup_Access_Type routine and use
+ 	it so that Process_Subtype is executed before mutating the kind
+ 	of the type entity.
+ 	* gen_il-gen-gen_entities.adb (Gen_Entities): Remove
+ 	Directly_Designated_Type from E_Void, E_Private_Record,
+ 	E_Limited_Private_Type and Incomplete_Kind; now it only belongs
+ 	to Access_Kind entities.
+ 	* sem_util.adb: Minor reformatting.
+ 
+ 2021-06-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Add PAT
+ 	local constant and use it throughout.  If it is set, use a ref-all
+ 	pointer type for the pointer-to-array field of the fat pointer type.
+ 	<E_Array_Subtype>: Add PAT local constant and use it throughout.
+ 
+ 2021-05-26  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* init.c (__gnat_error_handler): Remove register keyword.
+ 
+ 2021-05-25  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/share/conf.py: Fix Sphinx 4.0.x error.
+ 
+ 2021-05-21  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* gcc-interface/trans.c (Raise_Error_to_gnu): Add an assertion.
+ 
+ 2021-05-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/utils.c (gnat_pushdecl): Fix typo in comment.
+ 	* gcc-interface/utils2.c (build_simple_component_ref): Build NULL_EXPR
+ 	if the offset of the field has overflowed.
+ 	(build_component_ref): Add gigi checking assertion that the reference
+ 	has been built and replace the discriminant check by a Program_Error.
+ 
+ 2021-05-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Named_Integer>: Do
+ 	not pass default value in call to create_var_decl.
+ 	<E_Variable>: Likewise.
+ 	<E_Record_Subtype>: Both pass true for const_flag and false for
+ 	const_decl_allowed_p in call to create_var_decl.
+ 	Small tweaks in the generic record type case.
+ 	(elaborate_expression): Rename need_debug into need_for_debug and
+ 	adjust throughout.
+ 	(elaborate_expression_1): Likewise.  Pass Needs_Debug_Info instead
+ 	of need_for_debug in call to create_var_decl.
+ 	(elaborate_expression_2): Likewise.
+ 	* gcc-interface/utils.c (maybe_pad_type): Pass false for
+ 	const_decl_allowed_p in call to create_var_decl.
+ 
+ 2021-05-21  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity): Replace ? with ??.
+ 	(gnat_to_gnu_param): Likewise.
+ 	(gnat_to_gnu_subprog_type): Likewise.
+ 	(warn_on_field_placement): Likewise.
+ 	(intrin_arglists_compatible_p): Likewise.
+ 	* gcc-interface/trans.c (Pragma_to_gnu): Likewise.
+ 	(gnat_to_gnu): Likewise.
+ 	(validate_unchecked_conversion): Likewise.
+ 	* gcc-interface/utils.c (maybe_pad_type): Likewise.
+ 
+ 2021-05-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Process
+ 	the implementation type of a packed type implemented specially.
+ 
+ 2021-05-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_subprog_type): Always translate
+ 	the Is_Pure flag into the "pure" attribute of GNU C.
+ 
+ 2021-05-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.c (Call_to_gnu): Restrict previous change
+ 	to bitfields whose size is not equal to the type size.
+ 	(gnat_to_gnu): Likewise.
+ 
+ 2021-05-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.c (Call_to_gnu): Minor tweaks.
+ 	(gnat_to_gnu_external): Likewise.
+ 	(Raise_Error_to_gnu): Return an empty statement list if there is a
+ 	condition and it is always false.
+ 	(gnat_to_gnu): Do not check for elaboration code a priori during the
+ 	translation but a posteriori instead.
+ 
+ 2021-05-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.c (gnat_to_gnu) <N_Simple_Return_Statement>:
+ 	Put a SLOC on the assignment from the return value to the return
+ 	object in the copy-in/copy-out case.
+ 
+ 2021-05-21  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Replace
+ 	CEIL_DIV_EXPR with EXACT_DIV_EXPR.
+ 	* gcc-interface/misc.c (gnat_type_max_size): Likewise.
+ 	* gcc-interface/utils.c (maybe_pad_type): Likewise.
+ 	(finish_record_type): Likewise.  And always compute the unit size.
+ 
+ 2021-05-14  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/Makefile: Add gnat-style target.
+ 	* doc/share/conf.py: Likewise.
+ 	* doc/gnat-style.rst: New file.
+ 
+ 2021-05-12  Bob Duff  <duff@adacore.com>
+ 
+ 	PR ada/100564
+ 	* atree.adb (Change_Node): Do not call Zero_Slots on a Node_Id
+ 	when the Nkind has not yet been set; call the other Zero_Slots
+ 	that takes a range of slot offsets.  Call the new Mutate_Kind
+ 	that takes an Old_Size, for the same reason -- the size cannot
+ 	be computed without the Nkind.
+ 	(Mutate_Nkind): New function that allows specifying the Old_Size.
+ 	(Size_In_Slots): Assert that the Nkind has proper (nonzero) value.
+ 	* atree.ads: Minor reformatting.
+ 
+ 2021-05-12  Martin Liska  <mliska@suse.cz>
+ 
+ 	* doc/share/conf.py: Do not use binary mode.
+ 	Do not use u' literals as Python3 uses unicode by default.
+ 
+ 2021-05-11  Martin Liska  <mliska@suse.cz>
+ 
+ 	* gcc-interface/ada-tree.h (BUILT_IN_LIKELY): Use builtins
+ 	from COROUTINES.
+ 	(BUILT_IN_UNLIKELY): Likewise.
+ 
+ 2021-05-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnatvsn.adb (Version_String): Rename to...
+ 	(C_Version_String): ...this.
+ 	(Gnat_Version_String): Adjust to above renaming.
+ 	* version.c : Fix formatting glitches.
+ 
+ 2021-05-10  Martin Liska  <mliska@suse.cz>
+ 
+ 	PR bootstrap/100506
+ 	* Make-generated.in: Replace version.c with ada/version.c.
+ 	* gcc-interface/Make-lang.in: Add version.o to GNAT1_C_OBJS and
+ 	GNATBIND_OBJS.
+ 	* gcc-interface/Makefile.in: Replace version.c with ada/version.c.
+ 	Add version.o to TOOLS_LIBS.
+ 	* gnatvsn.adb: Replace version_string with gnat_version_string.
+ 	* version.c: New file.
+ 
+ 2021-05-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* einfo-utils.ads (Classification Attributes): Add pragma Inline.
+ 	(Synthesized Attribute Functions): Move pragma Inline around.
+ 	(Type Representation Attribute Predicates): Likewise.
+ 	(Field Initialization Routines): Likewise.
+ 	(Miscellaneous Subprogram): Likewise.
+ 
+ 2021-05-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* atree.ads (Slot): Remove pragma Provide_Shift_Operators.
+ 	(Shift_Left): New intrinsic function.
+ 	(Shift_Right): Likewise.
+ 	* atree.adb (Get_1_Bit_Val): Use Natural instead of Integer.
+ 	(Get_2_Bit_Val): Likewise.
+ 	(Get_4_Bit_Val): Likewise.
+ 	(Get_8_Bit_Val): Likewise.
+ 	(Set_1_Bit_Val): Likewise.
+ 	(Set_2_Bit_Val): Likewise.
+ 	(Set_4_Bit_Val): Likewise.
+ 	(Set_8_Bit_Val): Likewise.
+ 
+ 2021-05-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* atree.adb (Zero_Slots): Remove obsolete comment and add header.
+ 
+ 2021-05-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* atree.h (Get_32_Bit_Field): Tidy up.
+ 	(Get_32_Bit_Field_With_Default): Likewise.
+ 
+ 2021-05-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* Make-generated.in (do_gen_il): Replace with...
+ 	(ada/stamp-gen_il): ...this.  Do not copy files into generated/.
+ 
+ 2021-05-10  Martin Liska  <mliska@suse.cz>
+ 
+ 	* gcc-interface/utils.c (def_builtin_1): Use startswith
+ 	function instead of strncmp.
+ 
+ 2021-05-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* einfo-utils.adb (Is_Access_Object_Type): Use
+ 	Directly_Designated_Type.
+ 	(Is_Access_Subprogram_Type): Use Directly_Designated_Type.
+ 	(Set_Convention): Use plain Ekind.
+ 	* gen_il-gen-gen_entities.adb (Type_Kind): Use plain Ekind.
+ 	* sem_ch3.adb (Access_Type_Declaration): When seeing an illegal
+ 	completion with an access type don't attempt to decorate the
+ 	completion entity; previously the entity had its Ekind set to
+ 	E_General_Access_Type or E_Access_Type, but its Designated_Type
+ 	was empty, which caused a crash in freezing. (Actually, the
+ 	error recovery in the surrounding context is still incomplete,
+ 	e.g. we will crash when the illegal completion is an access to
+ 	an unknown identifier).
+ 
+ 2021-05-07  Bob Duff  <duff@adacore.com>
+ 
+ 	* par_sco.adb: Align with/use clauses.
+ 	(Traverse_Declarations_Or_Statements): Minor comment fix.
+ 	* aspects.adb, atree.adb, atree.ads, checks.adb, comperr.adb,
+ 	contracts.adb, cstand.adb, debug_a.adb, einfo-utils.adb,
+ 	errout.adb, eval_fat.adb, exp_aggr.adb, expander.adb,
+ 	exp_atag.adb, exp_attr.adb, exp_cg.adb, exp_ch11.adb,
+ 	exp_ch12.adb, exp_ch13.adb, exp_ch2.adb, exp_ch3.adb,
+ 	exp_ch4.adb, exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_ch8.adb,
+ 	exp_ch9.adb, exp_code.adb, exp_dbug.adb, exp_disp.adb,
+ 	exp_dist.adb, exp_fixd.adb, exp_imgv.adb, exp_intr.adb,
+ 	exp_pakd.adb, exp_prag.adb, exp_put_image.adb, exp_sel.adb,
+ 	exp_smem.adb, exp_spark.adb, exp_strm.adb, exp_tss.adb,
+ 	exp_unst.adb, exp_util.adb, exp_util.ads, freeze.adb,
+ 	frontend.adb, ghost.adb, gnat1drv.adb, gnat_cuda.adb,
+ 	impunit.adb, inline.adb, itypes.adb, itypes.ads, layout.adb,
+ 	lib.adb, lib-load.adb, lib-writ.adb, lib-xref.adb,
+ 	lib-xref-spark_specific.adb, live.adb, nlists.adb, par.adb,
+ 	par-ch11.adb, par-ch3.adb, par-ch5.adb, par-ch6.adb, pprint.adb,
+ 	repinfo.adb, restrict.adb, rtsfind.adb, scil_ll.adb, scn.adb,
+ 	sem.adb, sem_aggr.adb, sem_attr.adb, sem_aux.adb, sem_case.adb,
+ 	sem_cat.adb, sem_ch10.adb, sem_ch11.adb, sem_ch12.adb,
+ 	sem_ch13.adb, sem_ch2.adb, sem_ch3.adb, sem_ch4.adb,
+ 	sem_ch5.adb, sem_ch6.adb, sem_ch7.adb, sem_ch8.adb, sem_ch9.adb,
+ 	sem_dim.adb, sem_disp.adb, sem_dist.adb, sem_elab.adb,
+ 	sem_elim.adb, sem_eval.adb, sem_intr.adb, sem_mech.adb,
+ 	sem_prag.adb, sem_res.adb, sem_scil.adb, sem_smem.adb,
+ 	sem_type.adb, sem_util.adb, sem_util.ads, sem_warn.adb,
+ 	sinfo-cn.adb, sinfo-utils.ads, sinput.adb, sinput-l.adb,
+ 	sprint.adb, style.adb, styleg.adb, tbuild.adb, tbuild.ads,
+ 	treepr.adb, uname.adb: Align with/use clauses.
+ 
+ 2021-05-07  Bob Duff  <duff@adacore.com>
+ 
+ 	* atree.ads, atree.adb, gen_il-gen.ads: Fix comments and clean
+ 	up ???  marks.  Rename Set_Ekind to be Mutate_Ekind.
+ 	* einfo.ads, sinfo.ads: Likewise.  Change "definitive
+ 	definition" to "official definition", because the former sounds
+ 	redundant.  Rename Set_Ekind to be Mutate_Ekind.
+ 	* checks.adb, contracts.adb, cstand.adb, exp_aggr.adb,
+ 	exp_attr.adb, exp_ch11.adb, exp_ch3.adb, exp_ch5.adb,
+ 	exp_ch6.adb, exp_ch7.adb, exp_ch9.adb, exp_disp.adb,
+ 	exp_dist.adb, exp_imgv.adb, exp_intr.adb, exp_prag.adb,
+ 	exp_unst.adb, exp_util.adb, gen_il-gen.adb, inline.adb,
+ 	lib-writ.adb, lib-xref-spark_specific.adb, sem_aggr.adb,
+ 	sem_ch10.adb, sem_ch11.adb, sem_ch12.adb, sem_ch13.adb,
+ 	sem_ch3.adb, sem_ch5.adb, sem_ch6.adb, sem_ch7.adb, sem_ch8.adb,
+ 	sem_ch9.adb, sem_dist.adb, sem_elab.adb, sem_prag.adb,
+ 	sem_util.adb: Rename Set_Ekind to be Mutate_Ekind.
+ 
+ 2021-05-07  Bob Duff  <duff@adacore.com>
+ 
+ 	* atree.adb: Move nnd-related code from here, and leave a
+ 	comment pointing to sinfo-utils.adb.
+ 	* sinfo-utils.ads, sinfo-utils.adb: Move nnd-related code to
+ 	here.
+ 
+ 2021-05-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* einfo.ads: Move Corresponding_Protected_Entry...
+ 	* sinfo.ads: ... here.
+ 	* exp_ch9.adb (Build_Entry_Body): Link procedure and entry
+ 	bodies.
+ 	* gen_il-fields.ads (Opt_Field_Enum): Add
+ 	Corresponding_Entry_Body field to nodes; remove
+ 	Corresponding_Protected_Entry field from entities.
+ 	* gen_il-gen-gen_entities.adb (Gen_Entities): Remove
+ 	Corresponding_Protected_Entry field from E_Void and
+ 	E_Subprogram_Body.
+ 	* gen_il-gen-gen_nodes.adb (Gen_Nodes): Add
+ 	Corresponding_Entry_Body field to N_Subprogram_Body.
+ 	* sem_ch6.adb (Analyze_Subprogram_Specification): Remove
+ 	manipulation of Ekind and Corresponding_Protected_Entry added as
+ 	part of the support for varsize-nodes.
+ 
+ 2021-05-07  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_ch3.adb (Process_Incomplete_Dependents): Reset
+ 	Private_Dependents field to zero before calling Set_Ekind.  Also
+ 	move Set_Etype to after Set_Ekind, because it's always best to
+ 	set the Ekind as early as possible.
+ 	* atree.adb: Improve debugging facilities for vanishing fields.
+ 
+ 2021-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* atree.ads (Slot): Change to modular type.
+ 	(Slot_1_Bit): Delete.
+ 	(Slot_2_Bit): Likewise.
+ 	(Slot_4_Bit): Likewise.
+ 	(Slot_8_Bit): Likewise.
+ 	(Slot_32_Bit): Likewise.
+ 	* atree.adb (Get_1_Bit_Val): Adjust to above change.
+ 	(Get_2_Bit_Val): Likewise.
+ 	(Get_4_Bit_Val): Likewise.
+ 	(Get_8_Bit_Val): Likewise.
+ 	(Get_32_Bit_Val): Likewise.
+ 	(Set_1_Bit_Val): Likewise.
+ 	(Set_2_Bit_Val): Likewise.
+ 	(Set_4_Bit_Val): Likewise.
+ 	(Set_8_Bit_Val): Likewise.
+ 	(Set_32_Bit_Val): Likewise.
+ 	(Print_Atree_Info): Likewise.
+ 	(Zero): Likewise.
+ 	* atree.h (Get_1_Bit_Field): Likewise.
+ 	(Get_2_Bit_Field): Likewise.
+ 	(Get_4_Bit_Field): Likewise.
+ 	(Get_8_Bit_Field): Likewise.
+ 	(Get_32_Bit_Field): Likewise.
+ 	(Get_32_Bit_Field_With_Default): Likewise.
+ 	* types.h (slot_1_bit): Delete.
+ 	(slot_2_bit): Likewise.
+ 	(slot_4_bit): Likewise.
+ 	(slot_8_bit): Likewise.
+ 	(slot_32_bit): Likewise.
+ 	(any_slot): Change to unsigned int.
+ 	(Slot_Size): New macro.
+ 
+ 2021-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/gigi.h (enum standard_datatype): Remove
+ 	ADT_exception_data_name_id and add ADT_not_handled_by_others_name_id.
+ 	(exception_data_name_id): Delete.
+ 	(not_handled_by_others_name_id): New macro.
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Exception>: Remove old
+ 	kludge for exceptions.
+ 	<E_Record_Type>: Likewise.
+ 	(gnat_to_gnu_field): Force character type on Not_Handled_By_Others.
+ 	* gcc-interface/misc.c (gnat_argv): Change type to char **.
+ 	(gnat_init_options): Adjust accordingly.
+ 	* gcc-interface/trans.c (gigi): Set not_handled_by_others_name_id
+ 	and use it to set not_handled_by_others_decl.
+ 	(Exception_Handler_to_gnu_fe_sjlj): Fix indentation.
+ 
+ 2021-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* raise-gcc.c (__gnat_others_value): Remove const qualifier.
+ 	(__gnat_all_others_value): Likewise.
+ 	(__gnat_unhandled_others_value): Likewise.
+ 	(GNAT_OTHERS): Cast to Exception_Id instead of _Unwind_Ptr.
+ 	(GNAT_ALL_OTHERS): Likewise.
+ 	(GNAT_UNHANDLED_OTHERS): Likewise.
+ 	(Is_Handled_By_Others): Change parameter type to Exception_Id.
+ 	(Language_For): Likewise.
+ 	(Foreign_Data_For): Likewise.
+ 	(is_handled_by): Likewise.  Adjust throughout, remove redundant
+ 	line and fix indentation.
+ 	* libgnat/a-exexpr.adb (Is_Handled_By_Others): Remove pragma and
+ 	useless qualification from parameter type.
+ 	(Foreign_Data_For): Likewise.
+ 	(Language_For): Likewise.
+ 
+ 2021-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-stalib.ads (Exception_Data): Mark components as aliased.
+ 	* stand.ads (Standard_Entity_Type): Enhance comments.
+ 	* cstand.adb (Make_Component): Rename into...
+ 	(Make_Aliased_Component): ...this; set Is_Aliased and Is_Independent
+ 	flags on the component.
+ 	(Create_Standard): Adjust the types of the component of the record
+ 	Standard_Exception_Type and mark them as aliased.
+ 	* exp_ch11.adb (Expand_N_Exception_Declaration): Use OK
+ 	conversion to Standard_Address for Full_Name component, except
+ 	in CodePeer_Mode (set it to 0).
+ 	* exp_prag.adb (Expand_Pragma_Import_Or_Interface): Likewise.
+ 	* raise.h (struct Exception_Data): Change the type of Full_Name,
+ 	HTable_Ptr and Foreign_Data.
+ 
+ 2021-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* atree.h (Slots_Ptr): Change pointed-to type to any_slot.
+ 	* fe.h (Get_RT_Exception_Name): Change type of parameter.
+ 	* namet.ads (Name_Entry): Mark non-boolean components as aliased,
+ 	reorder the boolean components and add an explicit Spare component.
+ 	* namet.adb (Name_Enter): Adjust aggregate accordingly.
+ 	(Name_Find): Likewise.
+ 	(Reinitialize): Likewise.
+ 	* namet.h (struct Name_Entry): Adjust accordingly.
+ 	(Names_Ptr): Use correct type.
+ 	(Name_Chars_Ptr): Likewise.
+ 	(Get_Name_String): Fix declaration and adjust to above changes.
+ 	* types.ads (RT_Exception_Code): Add pragma Convention C.
+ 	* types.h (Column_Number_Type): Fix original type.
+ 	(slot): Rename union type to...
+ 	(any_slot): ...this and adjust assertion accordingly.
+ 	(RT_Exception_Code): New enumeration type.
+ 	* uintp.ads (Uint_Entry): Mark components as aliased.
+ 	* uintp.h (Uints_Ptr):  Use correct type.
+ 	(Udigits_Ptr): Likewise.
+ 	* gcc-interface/gigi.h (gigi): Adjust name and type of parameter.
+ 	* gcc-interface/cuintp.c (UI_To_gnu): Adjust references to Uints_Ptr
+ 	and Udigits_Ptr.
+ 	* gcc-interface/trans.c (Slots_Ptr): Adjust pointed-to type.
+ 	(gigi): Adjust type of parameter.
+ 	(build_raise_check): Add cast in call to Get_RT_Exception_Name.
+ 
+ 2021-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* init.c (__gnat_raise_program_error): Fix parameter type.
+ 	(Raise_From_Signal_Handler): Likewise and mark as no-return.
+ 	* raise-gcc.c (__gnat_others_value): Fix type.
+ 	(__gnat_all_others_value): Likewise.
+ 	(__gnat_unhandled_others_value): Likewise.
+ 	* seh_init.c (Raise_From_Signal_Handler): Fix parameter type.
+ 	* libgnat/a-except.ads (Raise_From_Signal_Handler): Use convention C
+ 	and new symbol name, move declaration to...
+ 	(Raise_From_Controlled_Operation): Minor tweak.
+ 	* libgnat/a-except.adb (Raise_From_Signal_Handler): ...here.
+ 	* libgnat/a-exexpr.adb (bool): New C compatible boolean type.
+ 	(Is_Handled_By_Others): Use it as return type for the function.
+ 
+ 2021-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* errout.ads (Set_Identifier_Casing): Add pragma Convention C.
+ 	* eval_fat.ads (Rounding_Mode): Likewise.
+ 	(Machine): Add WARNING comment line.
+ 	* exp_code.ads (Clobber_Get_Next): Add pragma Convention C.
+ 	* fe.h (Compiler_Abort): Fix return type.
+ 	(Set_Identifier_Casing): Change type of parameters.
+ 	(Clobber_Get_Next): Change return type.
+ 	* gcc-interface/trans.c (gnat_to_gnu) <N_Code_Statement>: Add cast.
+ 
+ 2021-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* atree.h (Parent): Remove duplicate declaration.
+ 	(Get_1_Bit_Field): Also use INLINE specifier in the declaration,
+ 	fix formatting and use gcc_unreachable for the default case.
+ 	(Get_2_Bit_Field): Likewise.
+ 	(Get_4_Bit_Field): Likewise.
+ 	(Get_8_Bit_Field): Likewise.
+ 	(Get_32_Bit_Field): Likewise.
+ 	(Get_32_Bit_Field_With_Default): Likewise.
+ 
+ 2021-05-07  Bob Duff  <duff@adacore.com>
+ 
+ 	* atree.ads, atree.adb: Major rewrite to support variable-sized
+ 	node types. Add pragmas Suppress and Assertion_Policy.  We now
+ 	have an extra level of indirection: Node_Offsets is a table
+ 	mapping Node_Ids to the offset of the start of each node in
+ 	Slots. Slots is a table containing one or more contiguous slots
+ 	for each node. Each slot is a 32-bit unchecked union that can
+ 	contain any mixture of 1, 2, 4, 8, and 32-bit fields that fits.
+ 	The old low-level getters and setters (e.g.  Flag123) are
+ 	removed.
+ 	* gen_il-fields.ads, gen_il-gen-gen_entities.adb,
+ 	gen_il-gen-gen_nodes.adb, gen_il-gen.adb, gen_il-gen.ads,
+ 	gen_il-main.adb, gen_il-types.ads, gen_il-utils.adb,
+ 	gen_il-utils.ads, gen_il.adb, gen_il.ads: New gen_il program
+ 	that generates various Ada and C++ files. In particular, the
+ 	following files are generated by gen_il: einfo-entities.adb
+ 	einfo-entities.ads, gnatvsn.ads, nmake.adb, nmake.ads,
+ 	seinfo.ads, seinfo_tables.adb, seinfo_tables.ads,
+ 	sinfo-nodes.adb, sinfo-nodes.ads, einfo.h, and sinfo.h.
+ 	* sinfo-utils.adb, sinfo-utils.ads, einfo-utils.adb,
+ 	einfo-utils.ads: New files containing code that needs to refer
+ 	to Sinfo.Nodes and Einfo.Entities. This code is mostly moved
+ 	here from Sinfo and Einfo to break cycles.
+ 	* back_end.adb: Pass node_offsets_ptr and slots_ptr to gigi,
+ 	instead of nodes_ptr and flags_ptr. The Nodes and Flags tables
+ 	no longer exist. (Note that gigi never used the Flags table.)
+ 	* sinfo-cn.ads (Change_Identifier_To_Defining_Identifier,
+ 	Change_Character_Literal_To_Defining_Character_Literal,
+ 	Change_Operator_Symbol_To_Defining_Operator_Symbol): Turn N into
+ 	an IN formal.
+ 	* sinfo-cn.adb: Update.  Add assertions, which can be removed at
+ 	some point.  Rewrite to use higher-level facilities.  Make sure
+ 	vanishing fields are zeroed out.  Add with/use for new packages.
+ 	* sem_util.adb: Remove "Assert(False)" immediately followed by
+ 	"raise Program_Error".  Use higher-level facilities such as
+ 	Walk_Sinfo_Fields instead of depending on low-level Set_FieldN
+ 	routines that no longer exist. Use Get_Comes_From_Source_Default
+ 	instead of Default_Node.Comes_From_Source (Default_Node no
+ 	longer exists).  Use Set_Basic_Convention instead of
+ 	Basic_Set_Convention.  Add with/use for new packages.
+ 	* sem_util.ads: The Convention field had getter Convention and
+ 	setter Basic_Set_Convention. Make that more uniform: there is
+ 	now a field called Basic_Convention, with Basic_Convention and
+ 	Set_Basic_Convention as getter/setter, and write Convention and
+ 	Set_Convention here.
+ 	* nlists.adb: Rewrite to use abstractions, rather then depending
+ 	on low-level implementation details of Atree. Necessary because
+ 	those details have changed. Add with/use for new packages.
+ 	* sem_ch12.adb: Use higher-level facilities such as
+ 	Walk_Sinfo_Fields instead of depending on low-level Set_FieldN
+ 	routines that no longer exist. Add with/use for new packages.
+ 	* exp_cg.adb, sem_ch10.adb, sem_ch4.adb, sem_eval.adb,
+ 	sem_prag.adb, sem_warn.adb: Change expanded names to refer to
+ 	the new packages for things that moved. Add with/use for new
+ 	packages.
+ 	* sem_ch3.adb: Likewise. Reinitialize vanishing fields.
+ 	* exp_disp.adb: Likewise. Remove failing assertion.
+ 	* sinfo.ads, einfo.ads: Remove code that is now generated into
+ 	Sinfo.Nodes and Einfo.Entities.
+ 	* sinfo.adb, einfo.adb: Replace bodies with "pragma No_Body;".
+ 	We should delete these at some point, but No_Body makes make
+ 	files easier. Some code is moved to Sinfo.Nodes, Einfo.Entities,
+ 	Sinfo.Utils, and Einfo.Utils. Some is no longer necessary.
+ 	* treepr.adb: Rewrite to use new tables. We no longer need
+ 	treeprs.ads.
+ 	* treepr.ads: Add comment.
+ 	* types.ads: Move types Component_Alignment_Kind and
+ 	Float_Rep_Kind here.
+ 	* atree.h: Major update to match atree.ads changes.  Add slot
+ 	types, for use by getters/setters.
+ 	* types.h: Move types Component_Alignment_Kind and
+ 	Float_Rep_Kind here.
+ 	* fe.h: Rewrite to deal with code that has changed or moved from
+ 	Atree, Sinfo, Einfo.
+ 	* nlists.h: Move some code to fe.h.
+ 	* alloc.ads: Split Nodes_* constants into Node_Offsets and
+ 	Slots, because Atree has two separate tables.  Increase values.
+ 	Remove Nodes_Release_Threshold. Improve comment.
+ 	* debug.adb, gnat1drv.adb: Remove obsolete gnatd.A and gnatd.N
+ 	switches.  Add with/use for new packages.
+ 	* opt.ads: Minor comment fix.
+ 	* aspects.adb, checks.adb, comperr.adb, contracts.adb,
+ 	cstand.adb, debug_a.adb, errout.adb, eval_fat.adb, exp_aggr.adb,
+ 	exp_atag.adb, exp_attr.adb, exp_ch11.adb, exp_ch12.adb,
+ 	exp_ch13.adb, exp_ch2.adb, exp_ch3.adb, exp_ch4.adb,
+ 	exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_ch8.adb, exp_ch9.adb,
+ 	exp_code.adb, exp_dbug.adb, exp_dist.adb, exp_fixd.adb,
+ 	exp_imgv.adb, exp_intr.adb, exp_pakd.adb, exp_prag.adb,
+ 	exp_put_image.adb, exp_sel.adb, exp_smem.adb, exp_spark.adb,
+ 	exp_strm.adb, exp_tss.adb, exp_unst.adb, exp_util.adb,
+ 	exp_util.ads, expander.adb, freeze.adb, frontend.adb,
+ 	get_targ.ads, ghost.adb, gnat_cuda.adb, impunit.adb, inline.adb,
+ 	itypes.adb, itypes.ads, layout.adb, lib.adb, lib-load.adb,
+ 	lib-writ.adb, lib-xref.adb, lib-xref.ads,
+ 	lib-xref-spark_specific.adb, live.adb, par.adb, par_sco.adb,
+ 	pprint.adb, repinfo.adb, restrict.adb, rtsfind.adb, scil_ll.adb,
+ 	scn.adb, sem.adb, sem.ads, sem_aggr.adb, sem_attr.adb,
+ 	sem_aux.adb, sem_case.adb, sem_cat.adb, sem_ch11.adb,
+ 	sem_ch13.adb, sem_ch2.adb, sem_ch5.adb, sem_ch6.adb,
+ 	sem_ch7.adb, sem_ch8.adb, sem_ch9.adb, sem_dim.adb,
+ 	sem_disp.adb, sem_dist.adb, sem_elab.adb, sem_elim.adb,
+ 	sem_intr.adb, sem_mech.adb, sem_res.adb, sem_scil.adb,
+ 	sem_smem.adb, sem_type.adb, set_targ.ads, sinput.adb,
+ 	sinput-l.adb, sprint.adb, style.adb, styleg.adb, tbuild.adb,
+ 	tbuild.ads, uname.adb: Add with/use for new packages.
+ 	* libgnat/a-stoubu.adb, libgnat/a-stouut.adb: Simplify to ease
+ 	bootstrap.
+ 	* libgnat/a-stobfi.adb, libgnat/a-stoufi.adb (Create_File,
+ 	Create_New_File): Create file in binary format, to avoid
+ 	introducing unwanted text conversions on Windows. Simplify to
+ 	ease bootstrap.
+ 	* libgnat/a-stteou__bootstrap.ads: New.
+ 	* ceinfo.adb, csinfo.adb, nmake.adt, treeprs.adt, xeinfo.adb,
+ 	xnmake.adb, xsinfo.adb, xtreeprs.adb: Delete.
+ 	* Make-generated.in: Build and run the gen_il program to
+ 	generate files. The files are generated in the ada/gen_il
+ 	subdirectory, and then moved up to ada.  We rely on gnatmake (as
+ 	opposed to make) to build the gen_il program efficiently (i.e.
+ 	don't do anything if the sources didn't change).
+ 	* gcc-interface/Makefile.in (ADAFLAGS): Add -gnatU.
+ 	(GNATMAKE_OBJS): Add new object files.
+ 	(GENERATED_FILES_FOR_TOOLS): New variable.
+ 	(../stamp-tools): Create a link for all
+ 	GENERATED_FILES_FOR_TOOLS.
+ 	* gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add new object
+ 	files.  Remove ada/treeprs.o.
+ 	(GNATBIND_OBJS): Add new object files.
+ 	(ada.mostlyclean): Remove ada/sdefault.adb and add
+ 	ada/stamp-gen_il.
+ 	(ada.maintainer-clean): Remove ada/treeprs.ads.
+ 	(update-sources): Remove obsolete target.
+ 	(ada_generated_files): Rename to...
+ 	(ADA_GENERATED_FILES): ... this.  Add new source files.  Add
+ 	comment.
+ 	* gcc-interface/trans.c: Remove obsolete Nodes_Ptr and
+ 	Flags_ptr.  Add Node_Offsets_Ptr and Slots_Ptr, which point to
+ 	the corresponding tables in Atree.
+ 	* gcc-interface/gigi.h (gigi): New parameters for initializing
+ 	Node_Offsets_Ptr and Slots_Ptr.
+ 	* gcc-interface/decl.c: Numeric_Kind,
+ 	Discrete_Or_Fixed_Point_Kind, and Record_Kind were
+ 	nonhierarchical, and were therefore removed for simplicity.
+ 	Replace uses with calls to Is_In_... functions.
+ 
+ 2021-05-07  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_ch4.adb (Unconstrained_UU_In_Component_Declaration): A
+ 	component declaration whose subtype indication is an entity name
+ 	without an explicit constraint is an Unchecked_Union type only
+ 	if the entity has an unconstrained nominal subtype (record type
+ 	or private type) whose parent type is an Unchecked_Union.
+ 
+ 2021-05-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.adb (Flag_Object): Ignore prefixes of attribute
+ 	Address.
+ 
+ 2021-05-07  Yannick Moy  <moy@adacore.com>
+ 
+ 	* opt.ads: Update comment for Warn_On_Suspicious_Modulus_Value.
+ 	* sem_res.adb (Resolve_Unary_Op): Generate warning.
+ 	* usage.adb: Refine doc for -gnatw.m/M switch.
+ 	* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
+ 	Update doc on -gnatw.m switch.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2021-05-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.adb (Flag_Object): Replace chained IF with a CASE;
+ 	remove repeated calls to Entity; do not traverse into
+ 	N_Identifier and N_Expanded_Name, because only need to examine
+ 	their Entity field anyway.
+ 
+ 2021-05-07  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch4.adb (Analyze_Call): Remove call to End_Interp_List.
+ 	(Process_Overloaded_Indexed_Component): Remove call to
+ 	End_Interp_List.
+ 	* sem_util.adb (Insert_Explicit_Dereference): Remove call to
+ 	End_Interp_List.
+ 	* sem_type.ads (End_Interp_List): Remove.
+ 	* sem_type.adb (Add_Entry): The guard against duplicate entries
+ 	is now checked before other conditions, so that EXIT statements
+ 	do not bypass this guard.
+ 	(End_Interp_List): Remove.
+ 
+ 2021-05-07  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_util.adb (Remove_Init_Call): If a simple initialization
+ 	call is present, and the next statement is an initialization
+ 	block (that contains a call to a Deep_ Initialize routine),
+ 	remove the block as well, and insert the first initialization
+ 	call in it, in case it is needed for later relocation.
+ 
+ 2021-05-07  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* errout.ads (Size_Too_Small_Message): Remove low-value ???
+ 	comment.
+ 	* exp_util.ads: Remove ??? in part of overall package comments
+ 	and restructure comment to clarify.
+ 	(Duplicate_Subexpr): Remove ??? comment that seems unnecessary.
+ 	* sem_ch3.ads (Analyze_Declarations): Remove two parenthesized
+ 	??? comments and add more description of the procedure's
+ 	actions.
+ 	(Get_Discriminant_Value): Remove ??? comment requesting more
+ 	documentation, expanding description of the function's actions.
+ 	* sem_disp.ads (Check_Operation_From_Incomplete_Type): Add more
+ 	semantic description of the procedure and remove ??? comment
+ 	requesting such.
+ 	(Propagate_Tag): Refine comment to indicate meaning of formal
+ 	parameters and generally improve the spec comment (and remove
+ 	??? comment asking about the parameters).
+ 
+ 2021-05-07  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_eval.adb (Fold_Shift): Fix computation of Shift_Left
+ 	resulting in negative signed values.
+ 
+ 2021-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_util.ads (Defining_Entity): Remove Empty_On_Errors parameter.
+ 	(Defining_Entity_Or_Empty): New function.
+ 	* sem_util.adb (Defining_Entity): Move bulk of implementation to...
+ 	(Defining_Entity_Or_Empty): ...here.  Do not raise Program_Error.
+ 	(Innermost_Master_Scope_Depth): Call Defining_Entity_Or_Empty.
+ 
+ 2021-05-07  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* aspects.ads: Add entries to register
+ 	Aspect_No_Controlled_Parts.
+ 	* freeze.adb (Check_No_Controlled_Parts_Violations): Added to
+ 	check requirements of aspect No_Controlled_Parts after a type
+ 	has been frozen.
+ 	(Freeze_Entity): Add call to
+ 	Check_No_Controlled_Parts_Violations.
+ 	(Find_Aspect_No_Controlled_Parts): Created to obtain the aspect
+ 	specification for No_Controlled_Parts on a given type when
+ 	present.
+ 	(Find_Aspect_No_Controlled_Parts_Value): Protect against invalid
+ 	value.
+ 	(Has_Aspect_No_Controlled_Parts): Created as a prediate function
+ 	to check if No_Controlled_Parts has been specified on a type for
+ 	Get_Anacestor_Types_With_Specification.
+ 	(Get_Aspect_No_Controlled_Parts_Value): Created to obtain the
+ 	value of the aspect No_Controlled_Parts when specified on a
+ 	given type.
+ 	(Get_Generic_Formal_Types_In_Hierarchy): Created to collect
+ 	formal types in a given type's hierarchy.
+ 	(Get_Types_With_Aspect_In_Hierarchy): Created to collect types
+ 	in a given type's hierarchy with No_Controlled_Parts specified.
+ 	* sem_ch13.adb (Analyze_One_Aspect): Add processing for
+ 	No_Controlled_Parts, and fix error in check for allowed pragmas
+ 	for formal types.
+ 	(Check_Expr_Is_OK_Static_Expression): Created to enforce
+ 	checking of static expressions in the same vein as
+ 	Analyze_Pragma.Check_Expr_OK_Static_Expression.
+ 	* sem_util.adb (Collect_Types_In_Hierarchy): Created to collect
+ 	types in a given type's hierarchy that match a given predicate
+ 	function.
+ 	* sem_util.ads: Fix typo.
+ 	* snames.ads-tmpl: Add entry for No_Controlled_Parts.
+ 
+ 2021-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-fatgen.adb (Scaling): Raise Constraint_Error in the
+ 	overflow case when T'Machine_Overflows is True.
+ 
+ 2021-05-07  Bob Duff  <duff@adacore.com>
+ 
+ 	* libgnat/a-conhel.adb (TC_Check): Move the Assert into the
+ 	'if'.
+ 
+ 2021-05-07  Frederic Konrad  <konrad@adacore.com>
+ 
+ 	* sigtramp-vxworks-target.inc: Use a local label for the TOC.
+ 
+ 2021-05-07  Claire Dross  <dross@adacore.com>
+ 
+ 	* exp_ch4.adb (Has_Inferable_Discriminants): Moved to Sem_Util.
+ 	* sem_util.ads, sem_util.adb (Has_Inferable_Discriminants):
+ 	Moved from Exp_Ch4.
+ 
+ 2021-05-07  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_util.adb (Build_Class_Wide_Expression, Replace_Entity):
+ 	Add guard to verify that the enclosing pragma is a precondition.
+ 
+ 2021-05-06  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* exp_disp.adb (Build_Class_Wide_Check): Extending the
+ 	functionality of this routine to climb to the ancestors
+ 	searching for the enclosing overridden dispatching primitive
+ 	that has a class-wide precondition to generate the check.
+ 
+ 2021-05-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch3.adb (Constraint_Index): Remove redundant problematic
+ 	analysis.
+ 
+ 2021-05-06  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_unst.adb (Note_Uplevel_Bound): Exclude
+ 	E_Enumeration_Literal.
+ 
+ 2021-05-06  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_N_If_Expression):
+ 	Apply_Arithmetic_Overflow_Check will not deal with
+ 	Then/Else_Actions so skip minimizing overflow checks if any
+ 	actions are present.
+ 
+ 2021-05-06  Boris Yakobowski  <yakobowski@adacore.com>
+ 
+ 	* gnat1drv.adb (Adjust_Global_Switches): Simplify logic.
+ 
+ 2021-05-06  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/i-c.ads (bool): New type.
+ 	* libgnat/i-cexten.ads, libgnat/i-cexten__128.ads (bool): Now
+ 	a subtype of Interfaces.C.bool.
+ 	* libgnarl/s-interr__vxworks.adb (Interrupt_Manager): Qualify
+ 	False.
+ 	* libgnarl/s-interr.adb, libgnarl/s-interr__hwint.adb,
+ 	libgnarl/s-tasini.adb, libgnarl/s-tasren.adb,
+ 	libgnarl/s-tassta.adb, libgnarl/s-tpobmu.adb,
+ 	libgnarl/s-tpobop.adb, libgnarl/s-tpopmo.adb: Replace
+ 	Assert (False) by Assert (Standard.False).
+ 
+ 2021-05-06  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* make.adb (Compute_Executable): Document parameter.
+ 
+ 2021-05-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-fatgen.adb (Scaling): Use single handling of
+ 	underflow.  Add pragma Annotate.
+ 
+ 2021-05-06  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* sem_eval.adb (Is_OK_Static_Subtype): Call Is_Static_Subtype,
+ 	remove redundant checks.
+ 
+ 2021-05-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.adb (First_Last_Ref): Simplify "if [condition] then
+ 	return True" in "return [condition]".
+ 	(Resolve_Range): Remove calls appearing in IF condition from the
+ 	THEN statements.
+ 
+ 2021-05-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_case.adb (Missing_Choice): Fix typo in comment.
+ 	(Lit_Of): Simplify with Make_Character_Literal.
+ 	(Check_Choices): Remove extra spaces in parameter
+ 	specifications.
+ 	* sem_case.ads: Same reformatting.
+ 
+ 2021-05-06  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_aggr.adb (Expand_Array_Aggregate): If the expression in an
+ 	Others_Clause has not been analyzed because previous analysis of
+ 	the enclosing aggregate showed the clause to be ineffective i.e.
+ 	cover a null range, analyze it now to detect a possible type
+ 	illegality.
+ 
+ 2021-05-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-fatgen.adb (Scaling): Fix off-by-one bug for underflow.
+ 
+ 2021-05-06  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_ch6.adb (Is_Inline_Pragma): Protect against N not being a
+ 	list member in both branches.
+ 
+ 2021-05-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnat/a-cofove.adb (Insert_Space): Remove hardcoded pragma
+ 	Warnings.
+ 
+ 2021-05-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch4.adb (Analyze_Selected_Component): Remove explicit call
+ 	to Set_Raises_Constraint_Error on statically missing component.
+ 	* sem_eval.adb (Eval_Arithmetic_Op): Likewise for static
+ 	divisions by integer and real zeros.
+ 	* sem_util.adb (Apply_Compile_Time_Constraint_Error): Call
+ 	Set_Raises_Constraint_Error before exiting early in GNATprove
+ 	mode.
+ 
+ 2021-05-06  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* checks.adb (Make_Discriminant_Constraint_Check): Add check for
+ 	null when the type being converted is an access type.
+ 
+ 2021-05-06  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_pakd.adb (Expand_Packed_Eq): Fix handling of PATs.
+ 
+ 2021-05-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* osint.adb (Read_Library_Info_From_Full): Cleanup unused
+ 	initial value.
+ 
+ 2021-05-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_defined_characteristics.rst (3.5.7):
+ 	Mention the IEEE standard explicitly.  Use current format names.
+ 	Document assumed rounding mode and new features of I/O support.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-05-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* init.c (__gnat_init_float): Use full version on Linux too.
+ 
+ 2021-05-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-fatgen.adb (Valid): Do a bit comparison with 0.0
+ 	when denormalized numbers are not supported.
+ 
+ 2021-05-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_attr.adb (Check_Enum_Image): Reword comment; add
+ 	Check_Enumeration_Maps parameter.  Now this routine combines
+ 	both referencing enumeration literals and checking restriction
+ 	No_Enumeration_Maps, if required.
+ 	(Analyze_Attribute): Remove duplicated code and instead call
+ 	Check_Enum_Image.
+ 
+ 2021-05-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_attr.adb (Analyze_Image_Attribute): Remove redundant
+ 	condition; add a missing header box.
+ 
+ 2021-05-06  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* doc/gnat_ugn/building_executable_programs_with_gnat.rst: Add
+ 	mention of underscore and fix grammar error in doc for -gnatd.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2021-05-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add s-exponr, s-exnflt
+ 	and s-exnlfl.
+ 	* exp_ch4.adb (Expand_N_Op_Expon): Use RE_Exn_Float for Short_Float.
+ 	* rtsfind.ads (RTU_Id): Add System_Exn_Flt and System_Exn_LFlt.
+ 	(RE_Id): Adjust entries for RE_Exn_Float and RE_Exn_Long_Float.
+ 	(RE_Unit_Table): Likewise.
+ 	* libgnat/s-exnflt.ads: New file.
+ 	* libgnat/s-exnlfl.ads: Likewise.
+ 	* libgnat/s-exnllf.ads: Change to mere instantiation.
+ 	* libgnat/s-exnllf.adb: Move implementation to...
+ 	* libgnat/s-exponr.ads: New generic unit.
+ 	* libgnat/s-exponr.adb: ...here and also make it generic.
+ 	(Expon): Do the computation in double precision internally.
+ 
+ 2021-05-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* lib-writ.adb, osint.adb, osint.ads: Cleanup.
+ 
+ 2021-05-06  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch3.adb (Expand_Freeze_Array_Type): Remove excessive
+ 	condition.
+ 	(Expand_N_Object_Declaration): Likewise.
+ 	(Build_Equivalent_Aggregate): Likewise.
+ 	(Initialization_Warning): Likewise; change another excessive
+ 	condition into assertion.
+ 	* freeze.adb (Freeze_Entity): Remove excessive condition.
+ 
+ 2021-05-06  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_res.adb (Resolve_If_Expression): If the context of the
+ 	expression is an indexed_component, resolve the expression and
+ 	its dependent_expressions with the base type of the index, to
+ 	ensure that an index check is generated when resolving the
+ 	enclosing indexxed_component, and avoid an improper use of
+ 	discriminants out of scope, when the index type is
+ 	discriminant-dependent.
+ 
+ 2021-05-06  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* einfo.ads, exp_prag.adb, exp_util.adb: Fix typos.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_attr.adb (Expand_N_Attribute_Reference): Fix expansion of
+ 	attributes Input and Output for unchecked unions.
+ 	* sem_case.ads: Fix typo "disriminant" and refill comment.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_attr.adb, exp_ch9.adb, sem_ch3.adb: Reuse
+ 	Has_Defaulted_Discriminants.
+ 	* sem_ch4.adb (Analyze_Allocator): Reuse
+ 	Has_Defaulted_Discriminants (after reordering conjuncts); remove
+ 	redundant IF statement, whose condition is implied by
+ 	Has_Defaulted_Discriminants.
+ 	* sem_util.adb (Has_Defaulted_Discriminants): Has_Discriminants
+ 	implies that the First_Discriminant is present.
+ 	(Is_Fully_Initialized_Type): Reuse Has_Defaulted_Discriminants.
+ 
+ 2021-05-05  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* exp_ch6.adb (Expand_Call_Helper): Add condition to check for
+ 	expanded actuals and remove dead code.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Has_Unconstrained_UU_Component): Rewrite to
+ 	follow the Ada RM grammar.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (User_Defined_Primitive_Equality_Op): Refine type
+ 	of a local variable.
+ 	* exp_dbug.adb (Scope_Contains): Refine all types from Node_Id
+ 	to Entity_Id; rename parameters to match those of the
+ 	Scope_Within routine (which is similar but not the same); also,
+ 	simplify an OR ELSE into a membership test.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Component_Is_Unconstrained_UU): Detect both
+ 	qualified and unqualified names of unchecked union components.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Variant_Is_Unconstrained_UU): Remove redundant
+ 	check for empty list.
+ 	* exp_disp.adb (Find_Entry_Index): Simplify by removing
+ 	redundant check and counting from zero; fix type of a local
+ 	variable.
+ 	* sem_ch12.adb (Save_Global_Descendant): Remove an unnecessary
+ 	special-case for empty lists.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Apply_Accessibility_Check): Skip a statically
+ 	true condition in expanded raise statement.
+ 
+ 2021-05-05  Bob Duff  <duff@adacore.com>
+ 
+ 	* libgnat/s-os_lib.adb (Missed_Drive_Letter): Simplify the code.
+ 
+ 2021-05-05  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_ch5.adb (Analyze_Assignment): Do not emit the warning that
+ 	a previous value of the target object is useless if the
+ 	right-hand side of the assignment includes target names.
+ 
+ 2021-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_imgv.adb: Add with/use clauses for Targparm.
+ 	(Build_Enumeration_Image_Tables): Set type of Threshold to Nat and
+ 	initialize it to Nat'Last if the type is local and the target does
+ 	not support descriptors.  Adjust Threshold_For_Size similarly.
+ 	(Expand_Value_Attribute): Minor tweaks.
+ 
+ 2021-05-05  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* exp_ch7.adb (Expand_N_Package_Body): Add CUDA init call.
+ 	* sem_ch7.adb (Analyze_Package_Body_Helper): Remove CUDA init
+ 	call.
+ 
+ 2021-05-05  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* par-ch5.adb (P_Condition): Check if expression is declare
+ 	expression.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* make.adb (Make): Use GNAT.Ctrl_C.Install_Handler instead of a
+ 	custom imported procedure.
+ 
+ 2021-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_imgv.adb (Is_User_Defined_Enumeration_Type): Delete.
+ 	(Expand_Image_Attribute): Move inline expansion into normal flow of
+ 	control, move down declarations and remove superfluous processing.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* libgnat/g-alleve.adb (Bit_Operation): Now a not-null type.
+ 	* libgnat/g-sechas.adb (Fill_Buffer_Access): Likewise.
+ 	* libgnat/s-dwalin.adb (Callback): Likewise.
+ 
+ 2021-05-05  Ghjuvan Lacambre  <lacambre@adacore.com>
+ 
+ 	* exp_util.adb (Is_Possibly_Unaligned_Object): Remove commented
+ 	code.
+ 
+ 2021-05-05  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_ch3.adb (Find_Type_Of_Object):  When In_Spec_Expression is
+ 	set and the object declaration generates a subtype indication,
+ 	build the corresponding subtype declaration and place it in tree
+ 	without the use of Insert_Actions, which is disabled in this
+ 	context.
+ 
+ 2021-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* debug.adb (d_x): Document extended usage.
+ 	* exp_imgv.adb (Expand_Standard_Boolean_Image): New procedure.
+ 	(Expand_Image_Attribute): Call it to expand in line the attribute
+ 	for standard boolean by default.
+ 
+ 2021-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* debug.adb (d_x): Document new usage.
+ 	* exp_imgv.adb (Expand_User_Defined_Enumeration_Image): Add Typ
+ 	parameter and use it throughout the processing.
+ 	(Expand_Image_Attribute): Retrieve the underlying type of the
+ 	prefix and use the inline expansion for user-defined enumeration
+ 	types with a literal string by default.
+ 
+ 2021-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-dorepr.adb (Split): Declare a per-size temporary.
+ 	Add pragma Annotate.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb, sem_ch13.adb, sem_eval.adb, sem_res.adb: Remove
+ 	redundant calls to UI_From_Int.
+ 
+ 2021-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_imgv.ads (Build_Enumeration_Image_Tables): Adjust comment.
+ 	* exp_imgv.adb (Build_Enumeration_Image_Tables): Add the
+ 	declaration nodes of the 4 tables to the declaration list of the
+ 	function body.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add s-imagen, s-imen16,
+ 	s-imen32, s-imenu8, s-pehage, s-valuen, s-vaen16, s-vaen32 and
+ 	s-vaenu8.  Remove s-imenne, s-imgenu and s-valenu.
+ 	* debug.adb (d_h): Document new usage.
+ 	* einfo.ads (Lit_Hash): New attribute for enumeration types.
+ 	(Set_Lit_Hash): Declare.
+ 	* einfo.adb (Lit_Hash): New function.
+ 	(Set_Lit_Hash): New procedure.
+ 	(Write_Field21_Name): Print Lit_Hash for Enumeration_Kind.
+ 	* exp_imgv.ads (Build_Enumeration_Image_Tables): Fix description
+ 	and document the hash function and its tables.
+ 	* exp_imgv.adb: Add with/use clauses for Debug.  Add with clause
+ 	for System.Perfect_Hash_Generators.
+ 	(Append_Table_To): New helper routine.
+ 	(Build_Enumeration_Image_Tables): Call it to build the tables.
+ 	In the main unit, register the literals with the hash generator.
+ 	If they are sufficiently many and -gnatd_h is not passed, generate
+ 	a perfect hash function and its tables; otherwise, generate a dummy
+ 	hash function.  For the other units, generate only the declaration.
+ 	In all cases, set Lit_Hash to the entity of the function, if any.
+ 	(Expand_Value_Attribute): Pass the 'Unrestricted_Access of Lit_Hash,
+ 	if any, as third argument to the Value_Enumeration_NN function.
+ 	* gnat1drv.adb (Adjust_Global_Switches): force simpler implementation
+ 	of 'Value in CodePeer_Mode.
+ 	* lib.ads (Synchronize_Serial_Number): Add SN parameter.
+ 	* lib.adb (Synchronize_Serial_Number): Assert that it is larger than
+ 	the serial number of the current unit and set the latter to it only
+ 	in this case.
+ 	* rtsfind.ads (RTU_Id): Add System_Img_Enum_8, System_Img_Enum_16,
+ 	System_Img_Enum_32, System_Val_Enum_8, System_Val_Enum_16 and
+ 	System_Val_Enum_32.  Remove System_Img_Enum, System_Img_Enum_New
+ 	and System_Val_Enum.
+ 	* sem_attr.adb (Analyze_Access_Attribute): Do not flag a compiler
+ 	generated Unrestricted_Access attribute as illegal in a declare
+ 	expression.
+ 	(RE_Unit_Table): Adjust to above changes.
+ 	* libgnat/g-heasor.ads: Add pragma Compiler_Unit_Warning.
+ 	* libgnat/g-table.ads: Likewise.
+ 	* libgnat/g-pehage.ads: Add with clause and local renaming for
+ 	System.Perfect_Hash_Generators.
+ 	(Optimization): Turn into derived type.
+ 	(Verbose): Turn into renaming.
+ 	(Too_Many_Tries): Likewise.
+ 	(Table_Name): Move to System.Perfect_Hash_Generators.
+ 	(Define): Likewise.
+ 	(Value): Likewise.
+ 	* libgnat/g-pehage.adb: Remove with clause for Ada.Directories,
+ 	GNAT.Heap_Sort_G and GNAT.Table.  Move bulk of implementation
+ 	to System.Perfect_Hash_Generators, only keep the output part.
+ 	* libgnat/s-imagen.ads: New generic unit.
+ 	* libgnat/s-imagen.adb: New body.
+ 	* libgnat/s-imen16.ads: New unit.
+ 	* libgnat/s-imen32.ads: Likewise.
+ 	* libgnat/s-imenu8.ads: Likewise.
+ 	* libgnat/s-imenne.ads: Adjust description.
+ 	* libgnat/s-imgenu.ads: Delete.
+ 	* libgnat/s-imgenu.adb: Likewise.
+ 	* libgnat/s-pehage.ads: New unit from GNAT.Perfect_Hash_Generators.
+ 	* libgnat/s-pehage.adb: New body from GNAT.Perfect_Hash_Generators.
+ 	* libgnat/s-valuen.ads: New generic unit.
+ 	* libgnat/s-valuen.adb: New body.
+ 	* libgnat/s-vaen16.ads: New unit.
+ 	* libgnat/s-vaen32.ads: Likewise.
+ 	* libgnat/s-vaenu8.ads: Likewise.
+ 	* libgnat/s-valenu.ads: Delete.
+ 	* libgnat/s-valenu.adb: Likewise.
+ 	* gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add s-pehage.o.
+ 	(GNATBIND_OBJS): Remove s-imgenu.o.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.ads (Apply_Compile_Time_Constraint_Error): Remove
+ 	parameter Rep from the function spec and "and if the flag Rep is
+ 	set" from the comment.
+ 	* sem_util.adb (Apply_Compile_Time_Constraint_Error): Remove
+ 	parameter Rep.
+ 
+ 2021-05-05  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_aggr.adb (Resolve_Indexed_Aggregate): For indexed
+ 	aggregates with component associations verify that if there is
+ 	more than one component association then all the choices are
+ 	static, that the set of choices define a continuous sequence of
+ 	values, and that if loop specfications appear, they do not
+ 	include iterator filters or key expressions.
+ 
+ 2021-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add s-dourea, s-imager,
+ 	s-imgflt, s-imglfl and s-imgllf.
+ 	(LIBGNAT_TARGET_PAIRS) [PowerPC/VxWorks]: Use s-dorepr__fma.adb.
+ 	(LIBGNAT_TARGET_PAIRS) [PowerPC/VxWorksAE]: Likewise.
+ 	(LIBGNAT_TARGET_PAIRS) [Aarch64/VxWorks]: Likewise.
+ 	(LIBGNAT_TARGET_PAIRS) [Aarch64/QNX]: Likewise.
+ 	(LIBGNAT_TARGET_PAIRS) [Aarch64/FreeBSD]: Likewise.
+ 	(LIBGNAT_TARGET_PAIRS) [PowerPC/Linux]: Likewise.
+ 	(LIBGNAT_TARGET_PAIRS) [Aarch64/Linux]: Likewise.
+ 	(LIBGNAT_TARGET_PAIRS) [IA-64/Linux]: Likewise.
+ 	(LIBGNAT_TARGET_PAIRS) [IA-64/HP-UX]: Likewise.
+ 	(LIBGNAT_TARGET_PAIRS) [RISC-V/Linux]: Likewise.
+ 	(LIBGNAT_TARGET_PAIRS) [PowerPC/Darwin]: Likewise.
+ 	* exp_attr.adb (Expand_N_Attribute_Reference) [Attribute_Fore]: Use
+ 	Fixed suffix and Long_Float type.
+ 	* exp_imgv.adb (Expand_Image_Attribute): For floating-point types,
+ 	use the routine of the corresponding root type.  For ordinary fixed
+ 	point types, use Fixed suffix and Long_Float type.
+ 	(Expand_Value_Attribute): Revert latest change for Long_Long_Float.
+ 	* gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Remove libgnat units
+ 	g-hesora.o and s-imgenu.o, add g-heasor.o, g-table.o and s-pehage.o.
+ 	(GNATBIND_OBJS): Remove libgnat unit s-imgenu.o.
+ 	* rtsfind.ads (RTU_Id): Add System_Img_Flt, System_Img_LFlt and
+ 	System_Img_LLF.  Remove System_Img_Real.
+ 	(RE_Id): Rename RE_Fore_Real to RE_Fore_Fixed.  Add RE_Image_Float,
+ 	RE_Image_Long_Float and RE_Image_Long_Long_Float.  Rename
+ 	RE_Image_Ordinary_Fixed_Point to RE_Image_Fixed.
+ 	(RE_Unit_Table): Adjust to above changes.
+ 	* libgnat/a-nbnbre.adb (Fixed_Conversions): Use Long_Float instead
+ 	of Long_Long_Float.
+ 	* libgnat/a-textio.ads (Field): Remove obsolete comment.
+ 	* libgnat/a-ticoau.ads (Aux): Adjust ancestor package.
+ 	* libgnat/a-ticoau.adb: Remove with/use clause for System.Img_Real.
+ 	(Puts): Call Aux.Set_Image instead of Set_Image_Real.
+ 	* libgnat/a-ticoio.adb: Add with/use clauses for System.Img_Flt,
+ 	System.Img_LFlt and System.Img_LLF.
+ 	(Scalar_Float): Add third actual parameter.
+ 	(Scalar_Long_Float): Likewise.
+ 	(Scalar_Long_Long_Float): Likewise.
+ 	* libgnat/a-tifiio.adb: Add with/use clauses for System.Img_LFlt
+ 	and System.Val_LFlt.  Remove the one for System.Val_LLF.  Replace
+ 	Long_Long_Float with Long_Float throughout.
+ 	* libgnat/a-tifiio__128.adb: Likewise.
+ 	* libgnat/a-tiflau.ads: Add Set_Image formal parameter.
+ 	* libgnat/a-tiflau.adb: Add with/use clause for System.Img_Util,
+ 	remove the one for System.Img_Real.
+ 	(Put): Call Set_Image instead of Set_Image_Real.
+ 	(Puts): Likewise.
+ 	* libgnat/a-tiflio.adb: Add with/use clause for System.Img_Flt,
+ 	System.Img_LFlt and System.Img_LLF.
+ 	(Aux_Float): Add third actual parameter.
+ 	(Aux_Long_Float): Likewise.
+ 	(Aux_Long_Long_Float): Likewise.
+ 	* libgnat/a-witeio.ads (Field): Remove obsolete comment.
+ 	* libgnat/a-wtcoau.ads (Aux): Adjust ancestor package.
+ 	* libgnat/a-wtcoau.adb: Remove with/use clause for System.Img_Real.
+ 	(Puts): Call Aux.Set_Image instead of Set_Image_Real.
+ 	* libgnat/a-wtcoio.adb: Add with/use clauses for System.Img_Flt,
+ 	System.Img_LFlt and System.Img_LLF.
+ 	(Scalar_Float): Add third actual parameter.
+ 	(Scalar_Long_Float): Likewise.
+ 	(Scalar_Long_Long_Float): Likewise.
+ 	* libgnat/a-wtfiio.adb: Add with/use clauses for System.Img_LFlt
+ 	and System.Val_LFlt.  Remove the one for System.Val_LLF.  Replace
+ 	Long_Long_Float with Long_Float throughout.
+ 	* libgnat/a-wtfiio__128.adb: Likewise.
+ 	* libgnat/a-wtflau.ads: Add Set_Image formal parameter.
+ 	* libgnat/a-wtflau.adb: Add with/use clause for System.Img_Util,
+ 	remove the one for System.Img_Real.
+ 	(Put): Call Set_Image instead of Set_Image_Real.
+ 	(Puts): Likewise.
+ 	* libgnat/a-wtflio.adb: Add with/use clause for System.Img_Flt,
+ 	System.Img_LFlt and System.Img_LLF.
+ 	(Aux_Float): Add third actual parameter.
+ 	(Aux_Long_Float): Likewise.
+ 	(Aux_Long_Long_Float): Likewise.
+ 	* libgnat/a-ztexio.ads (Field): Remove obsolete comment.
+ 	* libgnat/a-ztcoau.ads (Aux): Adjust ancestor package.
+ 	* libgnat/a-ztcoau.adb: Remove with/use clause for System.Img_Real.
+ 	(Puts): Call Aux.Set_Image instead of Set_Image_Real.
+ 	* libgnat/a-ztcoio.adb: Add with/use clauses for System.Img_Flt,
+ 	System.Img_LFlt and System.Img_LLF.
+ 	(Scalar_Float): Add third actual parameter.
+ 	(Scalar_Long_Float): Likewise.
+ 	(Scalar_Long_Long_Float): Likewise.
+ 	* libgnat/a-ztfiio.adb: Add with/use clauses for System.Img_LFlt
+ 	and System.Val_LFlt.  Remove the one for System.Val_LLF.  Replace
+ 	Long_Long_Float with Long_Float throughout.
+ 	* libgnat/a-ztfiio__128.adb: Likewise.
+ 	* libgnat/a-ztflau.ads: Add Set_Image formal parameter.
+ 	* libgnat/a-ztflau.adb: Add with/use clause for System.Img_Util,
+ 	remove the one for System.Img_Real.
+ 	(Put): Call Set_Image instead of Set_Image_Real.
+ 	(Puts): Likewise.
+ 	* libgnat/a-ztflio.adb: Add with/use clause for System.Img_Flt,
+ 	System.Img_LFlt and System.Img_LLF.
+ 	(Aux_Float): Add third actual parameter.
+ 	(Aux_Long_Float): Likewise.
+ 	(Aux_Long_Long_Float): Likewise.
+ 	* libgnat/s-dorepr.adb: New file.
+ 	* libgnat/s-dorepr__fma.adb: Likewise.
+ 	* libgnat/s-dourea.ads: Likewise.
+ 	* libgnat/s-dourea.adb: Likewise.
+ 	* libgnat/s-forrea.ads (Fore_Real): Rename into...
+ 	(Fore_Fixed): ...this and take Long_Float parameters.
+ 	* libgnat/s-forrea.adb (Fore_Real): Likewise.
+ 	(Fore_Fixed): Likewise.
+ 	* libgnat/s-imgrea.ads: Move to...
+ 	(Set_Image_Real): Turn into mere renaming.
+ 	* libgnat/s-imager.ads: ...here.
+ 	(Image_Ordinary_Fixed_Point): Turn into...
+ 	(Image_Fixed_Point): ...this.
+ 	* libgnat/s-imgrea.adb: Add pragma No_Body.  Move to...
+ 	* libgnat/s-imager.adb: ...here.
+ 	(Image_Ordinary_Fixed_Point): Turn into...
+ 	(Image_Fixed_Point): ...this.
+ 	(Is_Negative): Replace Long_Long_Float with Num.
+ 	(Set_Image_Real): Likewise.  Use Double_T instead of single Num
+ 	throughout the algorithm.
+ 	* libgnat/s-imgflt.ads: New file.
+ 	* libgnat/s-imglfl.ads: Likewise.
+ 	* libgnat/s-imgllf.ads: Likewise.
+ 	* libgnat/s-imagef.ads: Adjust comment.
+ 	* libgnat/s-imguti.ads (Max_Real_Image_Length): New named number.
+ 	* libgnat/s-powflt.ads (Maxpow): Adjust.
+ 	(Powten): Turn into an exact table of double Float.
+ 	* libgnat/s-powlfl.ads (Maxpow): Adjust.
+ 	(Powten): Turn into an exact table of double Long_Float.
+ 	* libgnat/s-powllf.ads (Maxpow): Adjust.
+ 	(Powten): Turn into an exact table of double Long_Long_Float.
+ 	* libgnat/s-valrea.ads: Change order of formal parameters.
+ 	* libgnat/s-valrea.adb: Add with clause for System.Double_Real.
+ 	(Double_Real): New instantiation.
+ 	(Fast2Sum): Delete.
+ 	(Large_Powten): New function.
+ 	(Integer_to_Real): Use Quick_Two_Sum instead of Fast2Sum.  Convert
+ 	the value to Double_T.  Do the scaling in Double_T for base 10.
+ 	* libgnat/s-valflt.ads: Remove with/use clasue for Interfaces,
+ 	add it for System.Unsigned_Types.  Use Unsigned.
+ 	* libgnat/s-vallfl.ads: Remove with/use clasue for Interfaces,
+ 	add it for System.Unsigned_Types.  Use Long_Unsigned.
+ 	* libgnat/s-valllf.ads: Remove with/use clasue for Interfaces,
+ 	add it for System.Unsigned_Types.  Use Long_Long_Unsigned.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_eval.adb (Eval_Arithmetic_Op): Call
+ 	Set_Raises_Constraint_Error on real division by zero just like
+ 	it is called for integer division by zero earlier in this
+ 	routine.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* freeze.adb (Build_Renamed_Body): Simplify IF and WHILE
+ 	statements with the same condition.
+ 
+ 2021-05-05  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* pprint.adb (Expr_Name): Introduce local constants to make the
+ 	code more readable and avoid repeated calls to Next to reach the
+ 	ELSE part of an if-expression.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* pprint.adb: Remove qualification of arbitrary calls to
+ 	Sinfo.Expressions and Sinfo.Parameter_Associations.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* pprint.adb (Expr_Name): Simplify with functional variant of
+ 	UI_Image.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* pprint.adb (To_Mixed): Removed.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* pprint.adb (List_Name_Count): Change type from Integer to
+ 	Natural.
+ 
+ 2021-05-04  Yannick Moy  <moy@adacore.com>
+ 
+ 	* pprint.adb (Expression_Image): Special case for
+ 	expression-with-actions.
+ 
+ 2021-05-04  Bob Duff  <duff@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_Concatenate): Remove the non-optimization.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* lib-xref.adb (Generate_Reference_To_Formals): Remove dedicated
+ 	branch for generic subprograms (they are now handled together
+ 	with non-generic subprograms in the ELSE branch); replace a
+ 	low-level Ekind membership test with a high-level call to
+ 	Is_Access_Subprogram_Type.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch12.adb (Check_Abstract_Primitives): Match First_Formal
+ 	with Next_Formal.
+ 	* sem_ch6.adb (Is_Non_Overriding_Operation): Likewise.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_prag.adb (Collect_Global_Item): Iterate directly over
+ 	formals.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_prag.ads (Collect_Subprogram_Inputs_Outputs): Update
+ 	comment; this routine is no longer used by GNATprove.
+ 	* sem_prag.adb (Find_Role): The IN parameter is on output only
+ 	when it belongs to non-function; also, the otherwise constant
+ 	object can only be written by a non-function.
+ 	(Collect_Global_Item): The IN parameter can only be written when
+ 	it belongs to non-function; also, unnest this check to make it
+ 	easier to read.
+ 
+ 2021-05-04  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/s-assert.ads (Assert_Failure): Now a renaming of
+ 	Assertion_Error.
+ 	* libgnat/a-assert.ads (Assertion_Error): Now a first class
+ 	citizen.  Remove dependency on System.Assertions.
+ 	* gcc-interface/a-assert.ads, gcc-interface/a-assert.adb: New.
+ 	* gcc-interface/Make-lang.in (GNAT_ADA_OBJS, GNATBIND_OBJS): Add
+ 	a-assert.o from gcc-interface.
+ 
+ 2021-05-04  Yannick Moy  <moy@adacore.com>
+ 
+ 	* erroutc.adb (Matches): Move spec...
+ 	* erroutc.ads (Matches): ...here.
+ 
+ 2021-05-04  Yannick Moy  <moy@adacore.com>
+ 
+ 	* gnat1drv.adb (Adjust_Global_Switches): Force error marker in
+ 	GNATprove mode.
+ 
+ 2021-05-04  Bob Duff  <duff@adacore.com>
+ 
+ 	* binde.adb: No need for ??? marks in Binde, because it is
+ 	superseded by Bindo.
+ 	* bindo-writers.adb (Write_Unit_Closure): Verified that -Ra
+ 	works.
+ 	* exp_ch4.adb, sinfo.ads (Expand_N_Type_Conversion): Rules for
+ 	conversions passed to gigi are documented in sinfo.ads.
+ 	(Expand_N_Unchecked_Type_Conversion): Comment is a duplicate of
+ 	one in sinfo.ads.
+ 	(Expand_N_In): Robert already added sufficient comments years
+ 	after the ??? comment was inserted.
+ 	(Expand_Membership_Minimize_Eliminate_Overflow): I don't see any
+ 	reason why Stand should export Long_Long_Integer'Base -- it
+ 	doesn't export any other base types.
+ 	(Size_In_Storage_Elements): We are doing an allocator, so we
+ 	don't care about sizes in bits.
+ 	(Expand_N_Allocator): PolyORB isn't going to be significantly
+ 	improved, so we're not going to mess with remote access to
+ 	class-wide types.
+ 	(Optimize_Return_Stmt): It's not important to optimize return
+ 	statements in predicate functions -- there are many
+ 	more-important optimizations we could do. Keep part of the
+ 	comment without "???", to clarify why the "and then ...".
+ 	(User_Defined_Primitive_Equality_Op): The optimization doesn't
+ 	seem important enough.
+ 	(Expand_N_Unchecked_Type_Conversion): Refactor to use
+ 	Expand_N_Unchecked_Expression.
+ 	(Make_Array_Comparison_Op): This seems like a case of "it it's
+ 	not broken, don't fix it". Too much risk of causing bugs.
+ 	* debug_a.adb: Remove ??? comments asking why Current_Error_Node
+ 	is maintained unconditionally, and add a comment explaining why.
+ 	* errout.adb: These kinds of minor bugs do indeed exist, but
+ 	we're never going to get around to fixing them "properly", so we
+ 	need this code for robustness.
+ 	* gnatchop.adb (Read_File): Document when read can fail.
+ 	* gnatdll.adb (Parse_Command_Line): Nobody is complaining about
+ 	these arbitrary limits, so no need to use Table. Increase the
+ 	limits just in case.  It is clear from the names what they are
+ 	limits on.
+ 	* gnatlink.adb: Add needed comments.
+ 	(Delete): An existing comment makes clear it's intentional, and
+ 	it's been like that since 1996.
+ 	(Process_Args): Improve comments.
+ 	(Search_Library_Path): Refactoring to avoid deep nesting.
+ 	* inline.adb (Build_Body_To_Inline): Probably won't get around
+ 	to doing that optimization.
+ 	(Is_Unit_Subprogram): No, this should not be moved to Sem_Aux,
+ 	because it is too specialized to this context.
+ 	(Do_Reset): No comment is needed here; it's clear from the
+ 	comment on Reset_Dispatching_Calls. Do_Reset is an artificial
+ 	subprogram; if we had proper iterators, it would just be an if
+ 	statement in the loop.
+ 	(Rewrite_Function_Call): Probably won't get around to doing that
+ 	optimization.
+ 	* layout.adb (Layout_Type): The gigi comment doesn't need to be
+ 	a ??? comment, and it's been that way since 2000.  The
+ 	limitation to scalars will likely never be investigated, and
+ 	it's been that way since 2009.
+ 	* lib.adb (Check_Same_Extended_Unit): This doesn't look like
+ 	something that needs fixing; it looks like a permanent
+ 	workaround.
+ 	* lib-load.adb (Change_Main_Unit_To_Spec): It is good enough in
+ 	practice.
+ 	(Load_Unit): Nobody will ever get around to investigating the
+ 	obscure PMES oddity, and the optimization is not worth the
+ 	trouble.
+ 	* live.adb: It's not worth documenting this. It is used only
+ 	with a debug switch. Nobody who has done significant work on it
+ 	is still around, so it would require substantial investigation.
+ 	* mdll.ads: I see no reason for USE.
+ 	* namet.ads: Routines are obsolete, but they're not going
+ 	anywhere anytime soon (too much work, and surprisingly delicate
+ 	because of dependences on global variables).
+ 	* osint.ads: Minor.
+ 	* osint.adb: Improve comments.
+ 	(Full_Lib_File_Name): Use Smart_Find_File.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_prag.adb, sem_prag.adb: Replace low-level Ekind membership
+ 	tests with a high-level call to Is_Formal_Object.
+ 
+ 2021-05-04  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* cstand.adb, sprint.adb, switch-c.adb, xr_tabls.ads,
+ 	xr_tabls.adb, xref_lib.adb: Address ??? comments.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_prag.adb (Analyze_Global_Item): Take subprogram kind into
+ 	account when accepting or rejecting a constant of an
+ 	access-to-variable type as a global Output/In_Out; do this check
+ 	inside an ELSIF branch to avoid unnecessary evaluation of the
+ 	subsequent condition.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_prag.adb (Role_Error, Usage_Error): Replace calls to
+ 	Name_Find and Get_Name_String with a call to To_String.
+ 
+ 2021-05-04  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_aggr.adb (Build_Siz_Exp): new function, subsidiary of
+ 	Expand_Container_Aggregate, to create an expression to be used
+ 	in the dynamic allocation of a container with a single container
+ 	element association.
+ 	(Add_Range): Handle static bounds of ranges over enumerations.
+ 	(Expand_Container_Aggregate): Add declaration for size
+ 	expression when needed, and use it in container object
+ 	declaration for container.
+ 
+ 2021-05-04  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_ch7.adb (Build_Finalizer_Helper.New_Finalizer_Name):
+ 	Unnest so that it can be reused.
+ 	(Build_Finalizer_Helper.Process_Declarations): Call the
+ 	xxx__finalize_body procedure of a package instantiation in case
+ 	it contains finalization statements.  Code clean ups.
+ 	(Build_Finalizer_Helper.Create_Finalizer): Export and set an
+ 	Interface_Name for library level finalizers since these may be
+ 	imported now.
+ 	(Build_Finalizer_Helper): Need to process library level package
+ 	body instantiations which may contain objects requiring
+ 	finalization.
+ 	* libgnat/s-finmas.ads: Fix typo.
+ 
+ 2021-05-04  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* checks.adb (Append_Range_Checks, Apply_Selected_Length_Checks,
+ 	Determine_Range, Insert_Range_Checks,
+ 	Install_Null_Excluding_Check, Selected_Length_Checks,
+ 	Selected_Range_Checks): Address ??? comments and code cleanups.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_prag.adb (Check_Mode_Restriction_In_Enclosing_Context):
+ 	Apply the rule even with no explicit Global contract (and remove
+ 	a dead condition for Refined_Global).
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_prag.adb (Check_Mode_Restriction_In_Enclosing_Context):
+ 	Extend check to protected entries.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_prag.adb (Check_Mode_Restriction_In_Enclosing_Context):
+ 	Fix reference to SPARK RM rule number.
+ 
+ 2021-05-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_intr.adb: Remove with/use clauses for Urealp.
+ 	(Expand_Is_Negative): Delete.
+ 	(Expand_Intrinsic_Call): Do not call it.
+ 	* rtsfind.ads (RE_Id): Remove RE_Float_Unsigned.
+ 	(RE_Unit_Table): Remove entry for RE_Float_Unsigned.
+ 	* snames.ads-tmpl (Name_Is_Negative): Delete.
+ 	* libgnat/s-imgrea.ads (Set_Image_Real): Fix mode of S parameter.
+ 	* libgnat/s-imgrea.adb: Add with/use clauses for System.Img_Util.
+ 	(LLU): New subtype.
+ 	(Maxdigs): Use it.
+ 	(Is_Negative): Reimplement.
+ 	(Image_Floating_Point): Simplify.
+ 	(Set_Image_Real): Fix mode of S parameter.  Remove the low-level
+ 	processing on characters.  Flip the sign of the Scale variable.
+ 	Compute the maximum number of digits for the straight notation.
+ 	Call Set_Decimal_Digits at the end to do the final formatting.
+ 	* libgnat/s-imguti.ads (Floating_Invalid_Value): New type.
+ 	(Set_Floating_Invalid_Value): New procedure.
+ 	* libgnat/s-imguti.adb (Set_Floating_Invalid_Value): Implement it
+ 	based on existing code from Set_Image_Real.
+ 	* libgnat/s-unstyp.ads (Float_Unsigned): Delete.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* csets.adb (Initialize): Refactor into CASE statement; raise
+ 	exception on unsupported code of character set (it will be
+ 	gently rejected earlier when scanning command line switches).
+ 	* switch-b.adb (Scan_Binder_Switches): Refactor into a
+ 	membership expression; add missing '9' choice; reorder as
+ 	described by GNAT UG, section 4.3.11.
+ 	* switch-c.adb (Scan_Front_End_Switches): Refactor into a
+ 	membership expression and reorder as above.
+ 	* doc/gnat_ugn/building_executable_programs_with_gnat.rst
+ 	(gnatic): Mention '5' as an allowed value for "c".
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2021-05-04  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* errout.adb (Error_Msg_Internal): Add assertion to prevent
+ 	style mistakes reappearing in the future.
+ 
+ 2021-05-04  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* exp_ch4.adb (Tagged_Membership): Remove wrong condition that
+ 	is not consistent with the documentation of this subprogram.
+ 
+ 2021-05-04  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_res.adb (Valid_Conversion): Make message a continuation.
+ 
+ 2021-05-04  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* styleg.adb: Address ??? comments.
+ 
+ 2021-05-03  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/a-stunau.ads, libgnat/a-stunau.adb,
+ 	libgnat/a-stunau__shared.adb (Set_String): Remove old version,
+ 	replace by a new version taking a callback to set the string.
+ 
+ 2021-05-03  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/a-coorma.ads (Map): Add missing
+ 	Preelaborate_Initialization.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch4.adb (Analyze_Number_Declaration, Expand_N_Op_Expon):
+ 	Simplify with Is_Universal_Numeric_Type.
+ 	* sem_attr.adb (Resolve_Attribute): Likewise.
+ 	* sem_ch3.adb: Likewise.
+ 	* sem_ch4.adb (Check_Common_Type, Check_Arithmetic_Pair):
+ 	Likewise.
+ 	* sem_eval.adb (Eval_Unary_Op, Test_In_Range): Likewise.
+ 	* sem_res.adb (Resolve_Arithmetic_Op, Resolve_Membership_Op,
+ 	Resolve_Op_Expon, Resolve_Unary_Op, Set_Mixed_Mode_Operand,
+ 	Set_Operand_Type): Likewise.
+ 	* sem_type.adb (Disambiguate, Find_Unique_Type): Likewise.
+ 	* sem_util.adb (Universal_Interpretation): Likewise.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_aggr.adb (Max_Aggregate_Size): Add header boxes for nested
+ 	routines; move a local constant after nested subprogram bodies;
+ 	refill comment.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_attr.adb (Analyze_Attribute): Reuse Resolve with implicit
+ 	type when analysing attribute Priority.
+ 	* sem_ch5.adb (Analyze_Case_Statement): Likewise for a rare case
+ 	in analysis of case statements.
+ 	(Analyze_Iterator_Specification): Likewise for non-overloaded
+ 	domain of iteration.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* einfo.adb (Write_Entity_Info): Simplify an Ekind membership
+ 	test.
+ 	* exp_aggr.adb (Is_CCG_Supported_Aggregate): Likewise.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch7.adb (Build_Finalize_Statements): Refine type of a
+ 	local counter variable.
+ 	* exp_dist.adb (Append_Record_Traversal): Refine type of Counter
+ 	parameter.
+ 	(Add_Process_Element): Likewise.
+ 	(Build_From_Any_Call): Refine type of a local counter variable.
+ 	(Build_From_Any_Function): Likewise.
+ 	(Build_To_Any_Function): Likewise.
+ 	(FA_Rec_Add_Process_Element): Likewise.
+ 	(TA_Append_Record_Traversal): Likewise.
+ 	(TA_Rec_Add_Process_Element): Likewise.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* rtsfind.adb (SPARK_Implicit_Load): Simplify with Discard_Node.
+ 
+ 2021-05-03  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* Makefile.rtl: Update copyright notice.
+ 	* ada_get_targ.adb: Likewise.
+ 	* adabkend.adb: Likewise.
+ 	* adabkend.ads: Likewise.
+ 	* adadecode.c: Likewise.
+ 	* adadecode.h: Likewise.
+ 	* adaint.c: Likewise.
+ 	* adaint.h: Likewise.
+ 	* affinity.c: Likewise.
+ 	* ali-util.adb: Likewise.
+ 	* ali-util.ads: Likewise.
+ 	* ali.adb: Likewise.
+ 	* ali.ads: Likewise.
+ 	* alloc.ads: Likewise.
+ 	* argv-lynxos178-raven-cert.c: Likewise.
+ 	* argv.c: Likewise.
+ 	* aspects.adb: Likewise.
+ 	* aspects.ads: Likewise.
+ 	* atree.adb: Likewise.
+ 	* atree.ads: Likewise.
+ 	* atree.h: Likewise.
+ 	* aux-io.c: Likewise.
+ 	* back_end.adb: Likewise.
+ 	* back_end.ads: Likewise.
+ 	* bcheck.adb: Likewise.
+ 	* bcheck.ads: Likewise.
+ 	* binde.adb: Likewise.
+ 	* binde.ads: Likewise.
+ 	* binderr.adb: Likewise.
+ 	* binderr.ads: Likewise.
+ 	* bindgen.adb: Likewise.
+ 	* bindgen.ads: Likewise.
+ 	* bindo-augmentors.adb: Likewise.
+ 	* bindo-augmentors.ads: Likewise.
+ 	* bindo-builders.adb: Likewise.
+ 	* bindo-builders.ads: Likewise.
+ 	* bindo-diagnostics.adb: Likewise.
+ 	* bindo-diagnostics.ads: Likewise.
+ 	* bindo-elaborators.adb: Likewise.
+ 	* bindo-elaborators.ads: Likewise.
+ 	* bindo-graphs.adb: Likewise.
+ 	* bindo-graphs.ads: Likewise.
+ 	* bindo-units.adb: Likewise.
+ 	* bindo-units.ads: Likewise.
+ 	* bindo-validators.adb: Likewise.
+ 	* bindo-validators.ads: Likewise.
+ 	* bindo-writers.adb: Likewise.
+ 	* bindo-writers.ads: Likewise.
+ 	* bindo.adb: Likewise.
+ 	* bindo.ads: Likewise.
+ 	* bindusg.adb: Likewise.
+ 	* bindusg.ads: Likewise.
+ 	* butil.adb: Likewise.
+ 	* butil.ads: Likewise.
+ 	* cal.c: Likewise.
+ 	* casing.adb: Likewise.
+ 	* casing.ads: Likewise.
+ 	* ceinfo.adb: Likewise.
+ 	* checks.adb: Likewise.
+ 	* checks.ads: Likewise.
+ 	* cio.c: Likewise.
+ 	* clean.adb: Likewise.
+ 	* clean.ads: Likewise.
+ 	* comperr.adb: Likewise.
+ 	* comperr.ads: Likewise.
+ 	* contracts.adb: Likewise.
+ 	* contracts.ads: Likewise.
+ 	* csets.adb: Likewise.
+ 	* csets.ads: Likewise.
+ 	* csinfo.adb: Likewise.
+ 	* cstand.adb: Likewise.
+ 	* cstand.ads: Likewise.
+ 	* cstreams.c: Likewise.
+ 	* ctrl_c.c: Likewise.
+ 	* debug.adb: Likewise.
+ 	* debug.ads: Likewise.
+ 	* debug_a.adb: Likewise.
+ 	* debug_a.ads: Likewise.
+ 	* einfo.adb: Likewise.
+ 	* einfo.ads: Likewise.
+ 	* elists.adb: Likewise.
+ 	* elists.ads: Likewise.
+ 	* elists.h: Likewise.
+ 	* env.c: Likewise.
+ 	* env.h: Likewise.
+ 	* err_vars.ads: Likewise.
+ 	* errno.c: Likewise.
+ 	* errout.adb: Likewise.
+ 	* errout.ads: Likewise.
+ 	* erroutc.adb: Likewise.
+ 	* erroutc.ads: Likewise.
+ 	* errutil.adb: Likewise.
+ 	* errutil.ads: Likewise.
+ 	* eval_fat.adb: Likewise.
+ 	* eval_fat.ads: Likewise.
+ 	* exit.c: Likewise.
+ 	* exp_aggr.adb: Likewise.
+ 	* exp_aggr.ads: Likewise.
+ 	* exp_atag.adb: Likewise.
+ 	* exp_atag.ads: Likewise.
+ 	* exp_attr.adb: Likewise.
+ 	* exp_attr.ads: Likewise.
+ 	* exp_cg.adb: Likewise.
+ 	* exp_cg.ads: Likewise.
+ 	* exp_ch10.ads: Likewise.
+ 	* exp_ch11.adb: Likewise.
+ 	* exp_ch11.ads: Likewise.
+ 	* exp_ch12.adb: Likewise.
+ 	* exp_ch12.ads: Likewise.
+ 	* exp_ch13.adb: Likewise.
+ 	* exp_ch13.ads: Likewise.
+ 	* exp_ch2.adb: Likewise.
+ 	* exp_ch2.ads: Likewise.
+ 	* exp_ch3.adb: Likewise.
+ 	* exp_ch3.ads: Likewise.
+ 	* exp_ch4.adb: Likewise.
+ 	* exp_ch4.ads: Likewise.
+ 	* exp_ch5.adb: Likewise.
+ 	* exp_ch5.ads: Likewise.
+ 	* exp_ch6.adb: Likewise.
+ 	* exp_ch6.ads: Likewise.
+ 	* exp_ch7.adb: Likewise.
+ 	* exp_ch7.ads: Likewise.
+ 	* exp_ch8.adb: Likewise.
+ 	* exp_ch8.ads: Likewise.
+ 	* exp_ch9.adb: Likewise.
+ 	* exp_ch9.ads: Likewise.
+ 	* exp_code.adb: Likewise.
+ 	* exp_code.ads: Likewise.
+ 	* exp_dbug.adb: Likewise.
+ 	* exp_dbug.ads: Likewise.
+ 	* exp_disp.adb: Likewise.
+ 	* exp_disp.ads: Likewise.
+ 	* exp_dist.adb: Likewise.
+ 	* exp_dist.ads: Likewise.
+ 	* exp_fixd.adb: Likewise.
+ 	* exp_fixd.ads: Likewise.
+ 	* exp_imgv.adb: Likewise.
+ 	* exp_imgv.ads: Likewise.
+ 	* exp_intr.adb: Likewise.
+ 	* exp_intr.ads: Likewise.
+ 	* exp_pakd.adb: Likewise.
+ 	* exp_pakd.ads: Likewise.
+ 	* exp_prag.adb: Likewise.
+ 	* exp_prag.ads: Likewise.
+ 	* exp_put_image.adb: Likewise.
+ 	* exp_put_image.ads: Likewise.
+ 	* exp_sel.adb: Likewise.
+ 	* exp_sel.ads: Likewise.
+ 	* exp_smem.adb: Likewise.
+ 	* exp_smem.ads: Likewise.
+ 	* exp_spark.adb: Likewise.
+ 	* exp_spark.ads: Likewise.
+ 	* exp_strm.adb: Likewise.
+ 	* exp_strm.ads: Likewise.
+ 	* exp_tss.adb: Likewise.
+ 	* exp_tss.ads: Likewise.
+ 	* exp_unst.adb: Likewise.
+ 	* exp_unst.ads: Likewise.
+ 	* exp_util.adb: Likewise.
+ 	* exp_util.ads: Likewise.
+ 	* expander.adb: Likewise.
+ 	* expander.ads: Likewise.
+ 	* expect.c: Likewise.
+ 	* fe.h: Likewise.
+ 	* final.c: Likewise.
+ 	* fmap.adb: Likewise.
+ 	* fmap.ads: Likewise.
+ 	* fname-sf.adb: Likewise.
+ 	* fname-sf.ads: Likewise.
+ 	* fname-uf.adb: Likewise.
+ 	* fname-uf.ads: Likewise.
+ 	* fname.adb: Likewise.
+ 	* fname.ads: Likewise.
+ 	* freeze.adb: Likewise.
+ 	* freeze.ads: Likewise.
+ 	* frontend.adb: Likewise.
+ 	* frontend.ads: Likewise.
+ 	* gcc-interface/ada-tree.h: Likewise.
+ 	* gcc-interface/ada.h: Likewise.
+ 	* gcc-interface/cuintp.c: Likewise.
+ 	* gcc-interface/decl.c: Likewise.
+ 	* gcc-interface/gadaint.h: Likewise.
+ 	* gcc-interface/gigi.h: Likewise.
+ 	* gcc-interface/lang-specs.h: Likewise.
+ 	* gcc-interface/misc.c: Likewise.
+ 	* gcc-interface/system.ads: Likewise.
+ 	* gcc-interface/targtyps.c: Likewise.
+ 	* gcc-interface/trans.c: Likewise.
+ 	* gcc-interface/utils.c: Likewise.
+ 	* gcc-interface/utils2.c: Likewise.
+ 	* get_scos.adb: Likewise.
+ 	* get_scos.ads: Likewise.
+ 	* get_targ.adb: Likewise.
+ 	* get_targ.ads: Likewise.
+ 	* ghost.adb: Likewise.
+ 	* ghost.ads: Likewise.
+ 	* gnat1drv.adb: Likewise.
+ 	* gnat1drv.ads: Likewise.
+ 	* gnat_cuda.adb: Likewise.
+ 	* gnat_cuda.ads: Likewise.
+ 	* gnatbind.adb: Likewise.
+ 	* gnatbind.ads: Likewise.
+ 	* gnatchop.adb: Likewise.
+ 	* gnatclean.adb: Likewise.
+ 	* gnatcmd.adb: Likewise.
+ 	* gnatcmd.ads: Likewise.
+ 	* gnatdll.adb: Likewise.
+ 	* gnatfind.adb: Likewise.
+ 	* gnatkr.adb: Likewise.
+ 	* gnatkr.ads: Likewise.
+ 	* gnatlink.adb: Likewise.
+ 	* gnatlink.ads: Likewise.
+ 	* gnatls.adb: Likewise.
+ 	* gnatls.ads: Likewise.
+ 	* gnatmake.adb: Likewise.
+ 	* gnatmake.ads: Likewise.
+ 	* gnatname.adb: Likewise.
+ 	* gnatname.ads: Likewise.
+ 	* gnatprep.adb: Likewise.
+ 	* gnatprep.ads: Likewise.
+ 	* gnatvsn.adb: Likewise.
+ 	* gnatvsn.ads: Likewise.
+ 	* gnatxref.adb: Likewise.
+ 	* gprep.adb: Likewise.
+ 	* gprep.ads: Likewise.
+ 	* gsocket.h: Likewise.
+ 	* hostparm.ads: Likewise.
+ 	* impunit.adb: Likewise.
+ 	* impunit.ads: Likewise.
+ 	* indepsw-aix.adb: Likewise.
+ 	* indepsw-darwin.adb: Likewise.
+ 	* indepsw-gnu.adb: Likewise.
+ 	* indepsw.adb: Likewise.
+ 	* indepsw.ads: Likewise.
+ 	* init.c: Likewise.
+ 	* initialize.c: Likewise.
+ 	* inline.adb: Likewise.
+ 	* inline.ads: Likewise.
+ 	* itypes.adb: Likewise.
+ 	* itypes.ads: Likewise.
+ 	* krunch.adb: Likewise.
+ 	* krunch.ads: Likewise.
+ 	* layout.adb: Likewise.
+ 	* layout.ads: Likewise.
+ 	* lib-list.adb: Likewise.
+ 	* lib-load.adb: Likewise.
+ 	* lib-load.ads: Likewise.
+ 	* lib-sort.adb: Likewise.
+ 	* lib-util.adb: Likewise.
+ 	* lib-util.ads: Likewise.
+ 	* lib-writ.adb: Likewise.
+ 	* lib-writ.ads: Likewise.
+ 	* lib-xref-spark_specific.adb: Likewise.
+ 	* lib-xref.adb: Likewise.
+ 	* lib-xref.ads: Likewise.
+ 	* lib.adb: Likewise.
+ 	* lib.ads: Likewise.
+ 	* libgnarl/a-astaco.adb: Likewise.
+ 	* libgnarl/a-dispat.adb: Likewise.
+ 	* libgnarl/a-dynpri.adb: Likewise.
+ 	* libgnarl/a-etgrbu.ads: Likewise.
+ 	* libgnarl/a-exetim__darwin.adb: Likewise.
+ 	* libgnarl/a-exetim__default.ads: Likewise.
+ 	* libgnarl/a-exetim__mingw.adb: Likewise.
+ 	* libgnarl/a-exetim__mingw.ads: Likewise.
+ 	* libgnarl/a-exetim__posix.adb: Likewise.
+ 	* libgnarl/a-interr.adb: Likewise.
+ 	* libgnarl/a-interr.ads: Likewise.
+ 	* libgnarl/a-intnam.ads: Likewise.
+ 	* libgnarl/a-intnam__aix.ads: Likewise.
+ 	* libgnarl/a-intnam__darwin.ads: Likewise.
+ 	* libgnarl/a-intnam__dragonfly.ads: Likewise.
+ 	* libgnarl/a-intnam__dummy.ads: Likewise.
+ 	* libgnarl/a-intnam__freebsd.ads: Likewise.
+ 	* libgnarl/a-intnam__hpux.ads: Likewise.
+ 	* libgnarl/a-intnam__linux.ads: Likewise.
+ 	* libgnarl/a-intnam__lynxos.ads: Likewise.
+ 	* libgnarl/a-intnam__mingw.ads: Likewise.
+ 	* libgnarl/a-intnam__qnx.ads: Likewise.
+ 	* libgnarl/a-intnam__rtems.ads: Likewise.
+ 	* libgnarl/a-intnam__solaris.ads: Likewise.
+ 	* libgnarl/a-intnam__vxworks.ads: Likewise.
+ 	* libgnarl/a-reatim.adb: Likewise.
+ 	* libgnarl/a-reatim.ads: Likewise.
+ 	* libgnarl/a-retide.adb: Likewise.
+ 	* libgnarl/a-retide.ads: Likewise.
+ 	* libgnarl/a-rttiev.adb: Likewise.
+ 	* libgnarl/a-rttiev.ads: Likewise.
+ 	* libgnarl/a-synbar.adb: Likewise.
+ 	* libgnarl/a-synbar.ads: Likewise.
+ 	* libgnarl/a-synbar__posix.adb: Likewise.
+ 	* libgnarl/a-synbar__posix.ads: Likewise.
+ 	* libgnarl/a-sytaco.adb: Likewise.
+ 	* libgnarl/a-sytaco.ads: Likewise.
+ 	* libgnarl/a-tasatt.adb: Likewise.
+ 	* libgnarl/a-tasatt.ads: Likewise.
+ 	* libgnarl/a-taside.adb: Likewise.
+ 	* libgnarl/a-taside.ads: Likewise.
+ 	* libgnarl/a-tasini.adb: Likewise.
+ 	* libgnarl/a-tasini.ads: Likewise.
+ 	* libgnarl/a-taster.adb: Likewise.
+ 	* libgnarl/g-boubuf.adb: Likewise.
+ 	* libgnarl/g-boubuf.ads: Likewise.
+ 	* libgnarl/g-boumai.ads: Likewise.
+ 	* libgnarl/g-semaph.adb: Likewise.
+ 	* libgnarl/g-semaph.ads: Likewise.
+ 	* libgnarl/g-signal.adb: Likewise.
+ 	* libgnarl/g-signal.ads: Likewise.
+ 	* libgnarl/g-tastus.ads: Likewise.
+ 	* libgnarl/g-thread.adb: Likewise.
+ 	* libgnarl/g-thread.ads: Likewise.
+ 	* libgnarl/i-vxinco.adb: Likewise.
+ 	* libgnarl/i-vxinco.ads: Likewise.
+ 	* libgnarl/s-inmaop.ads: Likewise.
+ 	* libgnarl/s-inmaop__dummy.adb: Likewise.
+ 	* libgnarl/s-inmaop__posix.adb: Likewise.
+ 	* libgnarl/s-inmaop__vxworks.adb: Likewise.
+ 	* libgnarl/s-interr.adb: Likewise.
+ 	* libgnarl/s-interr.ads: Likewise.
+ 	* libgnarl/s-interr__dummy.adb: Likewise.
+ 	* libgnarl/s-interr__hwint.adb: Likewise.
+ 	* libgnarl/s-interr__sigaction.adb: Likewise.
+ 	* libgnarl/s-interr__vxworks.adb: Likewise.
+ 	* libgnarl/s-intman.ads: Likewise.
+ 	* libgnarl/s-intman__android.adb: Likewise.
+ 	* libgnarl/s-intman__dummy.adb: Likewise.
+ 	* libgnarl/s-intman__lynxos.adb: Likewise.
+ 	* libgnarl/s-intman__mingw.adb: Likewise.
+ 	* libgnarl/s-intman__posix.adb: Likewise.
+ 	* libgnarl/s-intman__qnx.adb: Likewise.
+ 	* libgnarl/s-intman__solaris.adb: Likewise.
+ 	* libgnarl/s-intman__susv3.adb: Likewise.
+ 	* libgnarl/s-intman__vxworks.adb: Likewise.
+ 	* libgnarl/s-intman__vxworks.ads: Likewise.
+ 	* libgnarl/s-linux.ads: Likewise.
+ 	* libgnarl/s-linux__alpha.ads: Likewise.
+ 	* libgnarl/s-linux__android.ads: Likewise.
+ 	* libgnarl/s-linux__hppa.ads: Likewise.
+ 	* libgnarl/s-linux__mips.ads: Likewise.
+ 	* libgnarl/s-linux__riscv.ads: Likewise.
+ 	* libgnarl/s-linux__sparc.ads: Likewise.
+ 	* libgnarl/s-linux__x32.ads: Likewise.
+ 	* libgnarl/s-mudido.adb: Likewise.
+ 	* libgnarl/s-mudido__affinity.adb: Likewise.
+ 	* libgnarl/s-osinte__aix.adb: Likewise.
+ 	* libgnarl/s-osinte__aix.ads: Likewise.
+ 	* libgnarl/s-osinte__android.adb: Likewise.
+ 	* libgnarl/s-osinte__android.ads: Likewise.
+ 	* libgnarl/s-osinte__darwin.adb: Likewise.
+ 	* libgnarl/s-osinte__darwin.ads: Likewise.
+ 	* libgnarl/s-osinte__dragonfly.adb: Likewise.
+ 	* libgnarl/s-osinte__dragonfly.ads: Likewise.
+ 	* libgnarl/s-osinte__dummy.ads: Likewise.
+ 	* libgnarl/s-osinte__freebsd.adb: Likewise.
+ 	* libgnarl/s-osinte__freebsd.ads: Likewise.
+ 	* libgnarl/s-osinte__gnu.adb: Likewise.
+ 	* libgnarl/s-osinte__gnu.ads: Likewise.
+ 	* libgnarl/s-osinte__hpux-dce.adb: Likewise.
+ 	* libgnarl/s-osinte__hpux-dce.ads: Likewise.
+ 	* libgnarl/s-osinte__hpux.ads: Likewise.
+ 	* libgnarl/s-osinte__kfreebsd-gnu.ads: Likewise.
+ 	* libgnarl/s-osinte__linux.ads: Likewise.
+ 	* libgnarl/s-osinte__lynxos178.adb: Likewise.
+ 	* libgnarl/s-osinte__lynxos178e.ads: Likewise.
+ 	* libgnarl/s-osinte__mingw.ads: Likewise.
+ 	* libgnarl/s-osinte__posix.adb: Likewise.
+ 	* libgnarl/s-osinte__qnx.adb: Likewise.
+ 	* libgnarl/s-osinte__qnx.ads: Likewise.
+ 	* libgnarl/s-osinte__rtems.adb: Likewise.
+ 	* libgnarl/s-osinte__rtems.ads: Likewise.
+ 	* libgnarl/s-osinte__solaris.adb: Likewise.
+ 	* libgnarl/s-osinte__solaris.ads: Likewise.
+ 	* libgnarl/s-osinte__vxworks.adb: Likewise.
+ 	* libgnarl/s-osinte__vxworks.ads: Likewise.
+ 	* libgnarl/s-osinte__x32.adb: Likewise.
+ 	* libgnarl/s-proinf.adb: Likewise.
+ 	* libgnarl/s-proinf.ads: Likewise.
+ 	* libgnarl/s-qnx.ads: Likewise.
+ 	* libgnarl/s-solita.adb: Likewise.
+ 	* libgnarl/s-solita.ads: Likewise.
+ 	* libgnarl/s-stusta.adb: Likewise.
+ 	* libgnarl/s-stusta.ads: Likewise.
+ 	* libgnarl/s-taasde.adb: Likewise.
+ 	* libgnarl/s-taasde.ads: Likewise.
+ 	* libgnarl/s-tadeca.adb: Likewise.
+ 	* libgnarl/s-tadeca.ads: Likewise.
+ 	* libgnarl/s-tadert.adb: Likewise.
+ 	* libgnarl/s-tadert.ads: Likewise.
+ 	* libgnarl/s-taenca.adb: Likewise.
+ 	* libgnarl/s-taenca.ads: Likewise.
+ 	* libgnarl/s-taprob.adb: Likewise.
+ 	* libgnarl/s-taprob.ads: Likewise.
+ 	* libgnarl/s-taprop.ads: Likewise.
+ 	* libgnarl/s-taprop__dummy.adb: Likewise.
+ 	* libgnarl/s-taprop__hpux-dce.adb: Likewise.
+ 	* libgnarl/s-taprop__linux.adb: Likewise.
+ 	* libgnarl/s-taprop__mingw.adb: Likewise.
+ 	* libgnarl/s-taprop__posix.adb: Likewise.
+ 	* libgnarl/s-taprop__qnx.adb: Likewise.
+ 	* libgnarl/s-taprop__solaris.adb: Likewise.
+ 	* libgnarl/s-taprop__vxworks.adb: Likewise.
+ 	* libgnarl/s-tarest.adb: Likewise.
+ 	* libgnarl/s-tarest.ads: Likewise.
+ 	* libgnarl/s-tasdeb.adb: Likewise.
+ 	* libgnarl/s-tasdeb.ads: Likewise.
+ 	* libgnarl/s-tasinf.adb: Likewise.
+ 	* libgnarl/s-tasinf.ads: Likewise.
+ 	* libgnarl/s-tasinf__linux.adb: Likewise.
+ 	* libgnarl/s-tasinf__linux.ads: Likewise.
+ 	* libgnarl/s-tasinf__mingw.adb: Likewise.
+ 	* libgnarl/s-tasinf__mingw.ads: Likewise.
+ 	* libgnarl/s-tasinf__solaris.adb: Likewise.
+ 	* libgnarl/s-tasinf__solaris.ads: Likewise.
+ 	* libgnarl/s-tasinf__vxworks.ads: Likewise.
+ 	* libgnarl/s-tasini.adb: Likewise.
+ 	* libgnarl/s-tasini.ads: Likewise.
+ 	* libgnarl/s-taskin.adb: Likewise.
+ 	* libgnarl/s-taskin.ads: Likewise.
+ 	* libgnarl/s-taspri__dummy.ads: Likewise.
+ 	* libgnarl/s-taspri__hpux-dce.ads: Likewise.
+ 	* libgnarl/s-taspri__lynxos.ads: Likewise.
+ 	* libgnarl/s-taspri__mingw.ads: Likewise.
+ 	* libgnarl/s-taspri__posix-noaltstack.ads: Likewise.
+ 	* libgnarl/s-taspri__posix.ads: Likewise.
+ 	* libgnarl/s-taspri__solaris.ads: Likewise.
+ 	* libgnarl/s-taspri__vxworks.ads: Likewise.
+ 	* libgnarl/s-tasque.adb: Likewise.
+ 	* libgnarl/s-tasque.ads: Likewise.
+ 	* libgnarl/s-tasren.adb: Likewise.
+ 	* libgnarl/s-tasren.ads: Likewise.
+ 	* libgnarl/s-tasres.ads: Likewise.
+ 	* libgnarl/s-tassta.adb: Likewise.
+ 	* libgnarl/s-tassta.ads: Likewise.
+ 	* libgnarl/s-tasuti.adb: Likewise.
+ 	* libgnarl/s-tasuti.ads: Likewise.
+ 	* libgnarl/s-tataat.adb: Likewise.
+ 	* libgnarl/s-tataat.ads: Likewise.
+ 	* libgnarl/s-tpinop.adb: Likewise.
+ 	* libgnarl/s-tpinop.ads: Likewise.
+ 	* libgnarl/s-tpoaal.adb: Likewise.
+ 	* libgnarl/s-tpoben.adb: Likewise.
+ 	* libgnarl/s-tpoben.ads: Likewise.
+ 	* libgnarl/s-tpobmu.adb: Likewise.
+ 	* libgnarl/s-tpobmu.ads: Likewise.
+ 	* libgnarl/s-tpobop.adb: Likewise.
+ 	* libgnarl/s-tpobop.ads: Likewise.
+ 	* libgnarl/s-tpopmo.adb: Likewise.
+ 	* libgnarl/s-tpopsp__posix-foreign.adb: Likewise.
+ 	* libgnarl/s-tpopsp__posix.adb: Likewise.
+ 	* libgnarl/s-tpopsp__solaris.adb: Likewise.
+ 	* libgnarl/s-tpopsp__tls.adb: Likewise.
+ 	* libgnarl/s-tpopsp__vxworks-rtp.adb: Likewise.
+ 	* libgnarl/s-tpopsp__vxworks-tls.adb: Likewise.
+ 	* libgnarl/s-tpopsp__vxworks.adb: Likewise.
+ 	* libgnarl/s-tporft.adb: Likewise.
+ 	* libgnarl/s-tposen.adb: Likewise.
+ 	* libgnarl/s-tposen.ads: Likewise.
+ 	* libgnarl/s-vxwext.adb: Likewise.
+ 	* libgnarl/s-vxwext.ads: Likewise.
+ 	* libgnarl/s-vxwext__kernel-smp.adb: Likewise.
+ 	* libgnarl/s-vxwext__kernel.adb: Likewise.
+ 	* libgnarl/s-vxwext__kernel.ads: Likewise.
+ 	* libgnarl/s-vxwext__noints.adb: Likewise.
+ 	* libgnarl/s-vxwext__rtp-smp.adb: Likewise.
+ 	* libgnarl/s-vxwext__rtp.adb: Likewise.
+ 	* libgnarl/s-vxwext__rtp.ads: Likewise.
+ 	* libgnarl/s-vxwext__vthreads.ads: Likewise.
+ 	* libgnarl/s-vxwork__aarch64.ads: Likewise.
+ 	* libgnarl/s-vxwork__arm.ads: Likewise.
+ 	* libgnarl/s-vxwork__ppc.ads: Likewise.
+ 	* libgnarl/s-vxwork__x86.ads: Likewise.
+ 	* libgnarl/thread.c: Likewise.
+ 	* libgnat/a-assert.adb: Likewise.
+ 	* libgnat/a-assert.ads: Likewise.
+ 	* libgnat/a-btgbso.adb: Likewise.
+ 	* libgnat/a-btgbso.ads: Likewise.
+ 	* libgnat/a-calari.adb: Likewise.
+ 	* libgnat/a-calari.ads: Likewise.
+ 	* libgnat/a-calcon.adb: Likewise.
+ 	* libgnat/a-calcon.ads: Likewise.
+ 	* libgnat/a-caldel.adb: Likewise.
+ 	* libgnat/a-caldel.ads: Likewise.
+ 	* libgnat/a-calend.adb: Likewise.
+ 	* libgnat/a-calend.ads: Likewise.
+ 	* libgnat/a-calfor.adb: Likewise.
+ 	* libgnat/a-calfor.ads: Likewise.
+ 	* libgnat/a-catizo.adb: Likewise.
+ 	* libgnat/a-cbdlli.adb: Likewise.
+ 	* libgnat/a-cbdlli.ads: Likewise.
+ 	* libgnat/a-cbhama.adb: Likewise.
+ 	* libgnat/a-cbhama.ads: Likewise.
+ 	* libgnat/a-cbhase.adb: Likewise.
+ 	* libgnat/a-cbhase.ads: Likewise.
+ 	* libgnat/a-cbmutr.adb: Likewise.
+ 	* libgnat/a-cbmutr.ads: Likewise.
+ 	* libgnat/a-cborma.adb: Likewise.
+ 	* libgnat/a-cborma.ads: Likewise.
+ 	* libgnat/a-cborse.adb: Likewise.
+ 	* libgnat/a-cborse.ads: Likewise.
+ 	* libgnat/a-cbprqu.adb: Likewise.
+ 	* libgnat/a-cbprqu.ads: Likewise.
+ 	* libgnat/a-cbsyqu.adb: Likewise.
+ 	* libgnat/a-cbsyqu.ads: Likewise.
+ 	* libgnat/a-cdlili.adb: Likewise.
+ 	* libgnat/a-cdlili.ads: Likewise.
+ 	* libgnat/a-cfdlli.adb: Likewise.
+ 	* libgnat/a-cfdlli.ads: Likewise.
+ 	* libgnat/a-cfhama.adb: Likewise.
+ 	* libgnat/a-cfhama.ads: Likewise.
+ 	* libgnat/a-cfhase.adb: Likewise.
+ 	* libgnat/a-cfhase.ads: Likewise.
+ 	* libgnat/a-cfinve.adb: Likewise.
+ 	* libgnat/a-cfinve.ads: Likewise.
+ 	* libgnat/a-cforma.adb: Likewise.
+ 	* libgnat/a-cforma.ads: Likewise.
+ 	* libgnat/a-cforse.adb: Likewise.
+ 	* libgnat/a-cforse.ads: Likewise.
+ 	* libgnat/a-cgaaso.adb: Likewise.
+ 	* libgnat/a-cgaaso.ads: Likewise.
+ 	* libgnat/a-cgarso.adb: Likewise.
+ 	* libgnat/a-cgcaso.adb: Likewise.
+ 	* libgnat/a-chacon.adb: Likewise.
+ 	* libgnat/a-chacon.ads: Likewise.
+ 	* libgnat/a-chahan.adb: Likewise.
+ 	* libgnat/a-chahan.ads: Likewise.
+ 	* libgnat/a-chlat9.ads: Likewise.
+ 	* libgnat/a-chtgbk.adb: Likewise.
+ 	* libgnat/a-chtgbk.ads: Likewise.
+ 	* libgnat/a-chtgbo.adb: Likewise.
+ 	* libgnat/a-chtgbo.ads: Likewise.
+ 	* libgnat/a-chtgke.adb: Likewise.
+ 	* libgnat/a-chtgke.ads: Likewise.
+ 	* libgnat/a-chtgop.adb: Likewise.
+ 	* libgnat/a-chtgop.ads: Likewise.
+ 	* libgnat/a-chzla1.ads: Likewise.
+ 	* libgnat/a-chzla9.ads: Likewise.
+ 	* libgnat/a-cidlli.adb: Likewise.
+ 	* libgnat/a-cidlli.ads: Likewise.
+ 	* libgnat/a-cihama.adb: Likewise.
+ 	* libgnat/a-cihama.ads: Likewise.
+ 	* libgnat/a-cihase.adb: Likewise.
+ 	* libgnat/a-cihase.ads: Likewise.
+ 	* libgnat/a-cimutr.adb: Likewise.
+ 	* libgnat/a-cimutr.ads: Likewise.
+ 	* libgnat/a-ciorma.adb: Likewise.
+ 	* libgnat/a-ciorma.ads: Likewise.
+ 	* libgnat/a-ciormu.adb: Likewise.
+ 	* libgnat/a-ciormu.ads: Likewise.
+ 	* libgnat/a-ciorse.adb: Likewise.
+ 	* libgnat/a-ciorse.ads: Likewise.
+ 	* libgnat/a-clrefi.adb: Likewise.
+ 	* libgnat/a-clrefi.ads: Likewise.
+ 	* libgnat/a-coboho.adb: Likewise.
+ 	* libgnat/a-coboho.ads: Likewise.
+ 	* libgnat/a-cobove.adb: Likewise.
+ 	* libgnat/a-cobove.ads: Likewise.
+ 	* libgnat/a-cofove.adb: Likewise.
+ 	* libgnat/a-cofove.ads: Likewise.
+ 	* libgnat/a-cofuba.adb: Likewise.
+ 	* libgnat/a-cofuba.ads: Likewise.
+ 	* libgnat/a-cofuma.adb: Likewise.
+ 	* libgnat/a-cofuma.ads: Likewise.
+ 	* libgnat/a-cofuse.adb: Likewise.
+ 	* libgnat/a-cofuse.ads: Likewise.
+ 	* libgnat/a-cofuve.adb: Likewise.
+ 	* libgnat/a-cofuve.ads: Likewise.
+ 	* libgnat/a-cogeso.adb: Likewise.
+ 	* libgnat/a-cogeso.ads: Likewise.
+ 	* libgnat/a-cohama.adb: Likewise.
+ 	* libgnat/a-cohama.ads: Likewise.
+ 	* libgnat/a-cohase.adb: Likewise.
+ 	* libgnat/a-cohase.ads: Likewise.
+ 	* libgnat/a-cohata.ads: Likewise.
+ 	* libgnat/a-coinho.adb: Likewise.
+ 	* libgnat/a-coinho.ads: Likewise.
+ 	* libgnat/a-coinho__shared.adb: Likewise.
+ 	* libgnat/a-coinho__shared.ads: Likewise.
+ 	* libgnat/a-coinve.adb: Likewise.
+ 	* libgnat/a-coinve.ads: Likewise.
+ 	* libgnat/a-colien.adb: Likewise.
+ 	* libgnat/a-colien.ads: Likewise.
+ 	* libgnat/a-colire.adb: Likewise.
+ 	* libgnat/a-colire.ads: Likewise.
+ 	* libgnat/a-comlin.adb: Likewise.
+ 	* libgnat/a-comlin.ads: Likewise.
+ 	* libgnat/a-comutr.adb: Likewise.
+ 	* libgnat/a-comutr.ads: Likewise.
+ 	* libgnat/a-conhel.adb: Likewise.
+ 	* libgnat/a-conhel.ads: Likewise.
+ 	* libgnat/a-convec.adb: Likewise.
+ 	* libgnat/a-convec.ads: Likewise.
+ 	* libgnat/a-coorma.adb: Likewise.
+ 	* libgnat/a-coorma.ads: Likewise.
+ 	* libgnat/a-coormu.adb: Likewise.
+ 	* libgnat/a-coormu.ads: Likewise.
+ 	* libgnat/a-coorse.adb: Likewise.
+ 	* libgnat/a-coorse.ads: Likewise.
+ 	* libgnat/a-coprnu.adb: Likewise.
+ 	* libgnat/a-coprnu.ads: Likewise.
+ 	* libgnat/a-crbltr.ads: Likewise.
+ 	* libgnat/a-crbtgk.adb: Likewise.
+ 	* libgnat/a-crbtgk.ads: Likewise.
+ 	* libgnat/a-crbtgo.adb: Likewise.
+ 	* libgnat/a-crbtgo.ads: Likewise.
+ 	* libgnat/a-crdlli.adb: Likewise.
+ 	* libgnat/a-crdlli.ads: Likewise.
+ 	* libgnat/a-csquin.ads: Likewise.
+ 	* libgnat/a-cuprqu.adb: Likewise.
+ 	* libgnat/a-cuprqu.ads: Likewise.
+ 	* libgnat/a-cusyqu.adb: Likewise.
+ 	* libgnat/a-cusyqu.ads: Likewise.
+ 	* libgnat/a-cwila1.ads: Likewise.
+ 	* libgnat/a-cwila9.ads: Likewise.
+ 	* libgnat/a-decima.adb: Likewise.
+ 	* libgnat/a-decima.ads: Likewise.
+ 	* libgnat/a-decima__128.ads: Likewise.
+ 	* libgnat/a-dhfina.adb: Likewise.
+ 	* libgnat/a-dhfina.ads: Likewise.
+ 	* libgnat/a-diocst.adb: Likewise.
+ 	* libgnat/a-diocst.ads: Likewise.
+ 	* libgnat/a-direct.adb: Likewise.
+ 	* libgnat/a-direct.ads: Likewise.
+ 	* libgnat/a-direio.adb: Likewise.
+ 	* libgnat/a-direio.ads: Likewise.
+ 	* libgnat/a-dirval.adb: Likewise.
+ 	* libgnat/a-dirval.ads: Likewise.
+ 	* libgnat/a-dirval__mingw.adb: Likewise.
+ 	* libgnat/a-einuoc.adb: Likewise.
+ 	* libgnat/a-einuoc.ads: Likewise.
+ 	* libgnat/a-elchha.adb: Likewise.
+ 	* libgnat/a-elchha.ads: Likewise.
+ 	* libgnat/a-elchha__vxworks-ppc-full.adb: Likewise.
+ 	* libgnat/a-envvar.adb: Likewise.
+ 	* libgnat/a-excach.adb: Likewise.
+ 	* libgnat/a-except.adb: Likewise.
+ 	* libgnat/a-except.ads: Likewise.
+ 	* libgnat/a-exctra.adb: Likewise.
+ 	* libgnat/a-exctra.ads: Likewise.
+ 	* libgnat/a-exexda.adb: Likewise.
+ 	* libgnat/a-exexpr.adb: Likewise.
+ 	* libgnat/a-exextr.adb: Likewise.
+ 	* libgnat/a-exstat.adb: Likewise.
+ 	* libgnat/a-finali.adb: Likewise.
+ 	* libgnat/a-finali.ads: Likewise.
+ 	* libgnat/a-locale.adb: Likewise.
+ 	* libgnat/a-locale.ads: Likewise.
+ 	* libgnat/a-nagefl.ads: Likewise.
+ 	* libgnat/a-naliop.ads: Likewise.
+ 	* libgnat/a-naliop__nolibm.ads: Likewise.
+ 	* libgnat/a-nallfl.ads: Likewise.
+ 	* libgnat/a-nallfl__wraplf.ads: Likewise.
+ 	* libgnat/a-nalofl.ads: Likewise.
+ 	* libgnat/a-nashfl.ads: Likewise.
+ 	* libgnat/a-nashfl__wraplf.ads: Likewise.
+ 	* libgnat/a-nbnbin.adb: Likewise.
+ 	* libgnat/a-nbnbin__gmp.adb: Likewise.
+ 	* libgnat/a-nbnbre.adb: Likewise.
+ 	* libgnat/a-ngcefu.adb: Likewise.
+ 	* libgnat/a-ngcoar.adb: Likewise.
+ 	* libgnat/a-ngcoty.adb: Likewise.
+ 	* libgnat/a-ngcoty.ads: Likewise.
+ 	* libgnat/a-ngelfu.adb: Likewise.
+ 	* libgnat/a-ngelfu.ads: Likewise.
+ 	* libgnat/a-ngrear.adb: Likewise.
+ 	* libgnat/a-ngrear.ads: Likewise.
+ 	* libgnat/a-nuauco.ads: Likewise.
+ 	* libgnat/a-nuauco__x86.ads: Likewise.
+ 	* libgnat/a-nuaufl.ads: Likewise.
+ 	* libgnat/a-nuaufl__wraplf.ads: Likewise.
+ 	* libgnat/a-nudira.adb: Likewise.
+ 	* libgnat/a-nudira.ads: Likewise.
+ 	* libgnat/a-nuflra.adb: Likewise.
+ 	* libgnat/a-nuflra.ads: Likewise.
+ 	* libgnat/a-numaux.ads: Likewise.
+ 	* libgnat/a-rbtgbk.adb: Likewise.
+ 	* libgnat/a-rbtgbk.ads: Likewise.
+ 	* libgnat/a-rbtgbo.adb: Likewise.
+ 	* libgnat/a-rbtgbo.ads: Likewise.
+ 	* libgnat/a-rbtgso.adb: Likewise.
+ 	* libgnat/a-rbtgso.ads: Likewise.
+ 	* libgnat/a-sbecin.adb: Likewise.
+ 	* libgnat/a-sbecin.ads: Likewise.
+ 	* libgnat/a-sbhcin.adb: Likewise.
+ 	* libgnat/a-sbhcin.ads: Likewise.
+ 	* libgnat/a-sblcin.adb: Likewise.
+ 	* libgnat/a-sblcin.ads: Likewise.
+ 	* libgnat/a-secain.adb: Likewise.
+ 	* libgnat/a-secain.ads: Likewise.
+ 	* libgnat/a-sequio.adb: Likewise.
+ 	* libgnat/a-sequio.ads: Likewise.
+ 	* libgnat/a-sfecin.ads: Likewise.
+ 	* libgnat/a-sfhcin.ads: Likewise.
+ 	* libgnat/a-sflcin.ads: Likewise.
+ 	* libgnat/a-shcain.adb: Likewise.
+ 	* libgnat/a-shcain.ads: Likewise.
+ 	* libgnat/a-siocst.adb: Likewise.
+ 	* libgnat/a-siocst.ads: Likewise.
+ 	* libgnat/a-slcain.adb: Likewise.
+ 	* libgnat/a-slcain.ads: Likewise.
+ 	* libgnat/a-ssicst.adb: Likewise.
+ 	* libgnat/a-ssicst.ads: Likewise.
+ 	* libgnat/a-stboha.adb: Likewise.
+ 	* libgnat/a-stmaco.ads: Likewise.
+ 	* libgnat/a-stobbu.adb: Likewise.
+ 	* libgnat/a-stobbu.ads: Likewise.
+ 	* libgnat/a-stobfi.adb: Likewise.
+ 	* libgnat/a-stobfi.ads: Likewise.
+ 	* libgnat/a-storio.adb: Likewise.
+ 	* libgnat/a-stoubu.adb: Likewise.
+ 	* libgnat/a-stoubu.ads: Likewise.
+ 	* libgnat/a-stoufi.adb: Likewise.
+ 	* libgnat/a-stoufi.ads: Likewise.
+ 	* libgnat/a-stoufo.adb: Likewise.
+ 	* libgnat/a-stoufo.ads: Likewise.
+ 	* libgnat/a-stouut.adb: Likewise.
+ 	* libgnat/a-stouut.ads: Likewise.
+ 	* libgnat/a-strbou.adb: Likewise.
+ 	* libgnat/a-strbou.ads: Likewise.
+ 	* libgnat/a-stream.adb: Likewise.
+ 	* libgnat/a-stream.ads: Likewise.
+ 	* libgnat/a-strfix.adb: Likewise.
+ 	* libgnat/a-strhas.adb: Likewise.
+ 	* libgnat/a-strmap.adb: Likewise.
+ 	* libgnat/a-strmap.ads: Likewise.
+ 	* libgnat/a-strsea.adb: Likewise.
+ 	* libgnat/a-strsea.ads: Likewise.
+ 	* libgnat/a-strsto.ads: Likewise.
+ 	* libgnat/a-strsup.adb: Likewise.
+ 	* libgnat/a-strsup.ads: Likewise.
+ 	* libgnat/a-strunb.adb: Likewise.
+ 	* libgnat/a-strunb.ads: Likewise.
+ 	* libgnat/a-strunb__shared.adb: Likewise.
+ 	* libgnat/a-strunb__shared.ads: Likewise.
+ 	* libgnat/a-ststbo.adb: Likewise.
+ 	* libgnat/a-ststbo.ads: Likewise.
+ 	* libgnat/a-ststio.adb: Likewise.
+ 	* libgnat/a-ststio.ads: Likewise.
+ 	* libgnat/a-ststun.adb: Likewise.
+ 	* libgnat/a-ststun.ads: Likewise.
+ 	* libgnat/a-stteou.ads: Likewise.
+ 	* libgnat/a-stunau.adb: Likewise.
+ 	* libgnat/a-stunau.ads: Likewise.
+ 	* libgnat/a-stunau__shared.adb: Likewise.
+ 	* libgnat/a-stunha.adb: Likewise.
+ 	* libgnat/a-stuten.adb: Likewise.
+ 	* libgnat/a-stwibo.adb: Likewise.
+ 	* libgnat/a-stwibo.ads: Likewise.
+ 	* libgnat/a-stwifi.adb: Likewise.
+ 	* libgnat/a-stwiha.adb: Likewise.
+ 	* libgnat/a-stwima.adb: Likewise.
+ 	* libgnat/a-stwima.ads: Likewise.
+ 	* libgnat/a-stwise.adb: Likewise.
+ 	* libgnat/a-stwise.ads: Likewise.
+ 	* libgnat/a-stwisu.adb: Likewise.
+ 	* libgnat/a-stwisu.ads: Likewise.
+ 	* libgnat/a-stwiun.adb: Likewise.
+ 	* libgnat/a-stwiun.ads: Likewise.
+ 	* libgnat/a-stwiun__shared.adb: Likewise.
+ 	* libgnat/a-stwiun__shared.ads: Likewise.
+ 	* libgnat/a-stzbou.adb: Likewise.
+ 	* libgnat/a-stzbou.ads: Likewise.
+ 	* libgnat/a-stzfix.adb: Likewise.
+ 	* libgnat/a-stzhas.adb: Likewise.
+ 	* libgnat/a-stzmap.adb: Likewise.
+ 	* libgnat/a-stzmap.ads: Likewise.
+ 	* libgnat/a-stzsea.adb: Likewise.
+ 	* libgnat/a-stzsea.ads: Likewise.
+ 	* libgnat/a-stzsup.adb: Likewise.
+ 	* libgnat/a-stzsup.ads: Likewise.
+ 	* libgnat/a-stzunb.adb: Likewise.
+ 	* libgnat/a-stzunb.ads: Likewise.
+ 	* libgnat/a-stzunb__shared.adb: Likewise.
+ 	* libgnat/a-stzunb__shared.ads: Likewise.
+ 	* libgnat/a-suecin.adb: Likewise.
+ 	* libgnat/a-suecin.ads: Likewise.
+ 	* libgnat/a-suenco.adb: Likewise.
+ 	* libgnat/a-suenst.adb: Likewise.
+ 	* libgnat/a-suewst.adb: Likewise.
+ 	* libgnat/a-suezst.adb: Likewise.
+ 	* libgnat/a-suhcin.adb: Likewise.
+ 	* libgnat/a-suhcin.ads: Likewise.
+ 	* libgnat/a-sulcin.adb: Likewise.
+ 	* libgnat/a-sulcin.ads: Likewise.
+ 	* libgnat/a-suteio.adb: Likewise.
+ 	* libgnat/a-suteio.ads: Likewise.
+ 	* libgnat/a-suteio__shared.adb: Likewise.
+ 	* libgnat/a-swbwha.adb: Likewise.
+ 	* libgnat/a-swmwco.ads: Likewise.
+ 	* libgnat/a-swunau.adb: Likewise.
+ 	* libgnat/a-swunau.ads: Likewise.
+ 	* libgnat/a-swunau__shared.adb: Likewise.
+ 	* libgnat/a-swuwha.adb: Likewise.
+ 	* libgnat/a-swuwti.adb: Likewise.
+ 	* libgnat/a-swuwti.ads: Likewise.
+ 	* libgnat/a-swuwti__shared.adb: Likewise.
+ 	* libgnat/a-szbzha.adb: Likewise.
+ 	* libgnat/a-szmzco.ads: Likewise.
+ 	* libgnat/a-szunau.adb: Likewise.
+ 	* libgnat/a-szunau.ads: Likewise.
+ 	* libgnat/a-szunau__shared.adb: Likewise.
+ 	* libgnat/a-szuzha.adb: Likewise.
+ 	* libgnat/a-szuzti.adb: Likewise.
+ 	* libgnat/a-szuzti.ads: Likewise.
+ 	* libgnat/a-szuzti__shared.adb: Likewise.
+ 	* libgnat/a-tags.adb: Likewise.
+ 	* libgnat/a-tags.ads: Likewise.
+ 	* libgnat/a-teioed.adb: Likewise.
+ 	* libgnat/a-teioed.ads: Likewise.
+ 	* libgnat/a-textio.adb: Likewise.
+ 	* libgnat/a-textio.ads: Likewise.
+ 	* libgnat/a-tiboio.adb: Likewise.
+ 	* libgnat/a-ticoau.adb: Likewise.
+ 	* libgnat/a-ticoau.ads: Likewise.
+ 	* libgnat/a-ticoio.adb: Likewise.
+ 	* libgnat/a-ticoio.ads: Likewise.
+ 	* libgnat/a-tideau.adb: Likewise.
+ 	* libgnat/a-tideau.ads: Likewise.
+ 	* libgnat/a-tideio.adb: Likewise.
+ 	* libgnat/a-tideio.ads: Likewise.
+ 	* libgnat/a-tideio__128.adb: Likewise.
+ 	* libgnat/a-tienau.adb: Likewise.
+ 	* libgnat/a-tienau.ads: Likewise.
+ 	* libgnat/a-tienio.adb: Likewise.
+ 	* libgnat/a-tifiau.adb: Likewise.
+ 	* libgnat/a-tifiau.ads: Likewise.
+ 	* libgnat/a-tifiio.adb: Likewise.
+ 	* libgnat/a-tifiio__128.adb: Likewise.
+ 	* libgnat/a-tiflau.adb: Likewise.
+ 	* libgnat/a-tiflau.ads: Likewise.
+ 	* libgnat/a-tiflio.adb: Likewise.
+ 	* libgnat/a-tiflio.ads: Likewise.
+ 	* libgnat/a-tigeau.adb: Likewise.
+ 	* libgnat/a-tigeau.ads: Likewise.
+ 	* libgnat/a-tigeli.adb: Likewise.
+ 	* libgnat/a-tiinau.adb: Likewise.
+ 	* libgnat/a-tiinau.ads: Likewise.
+ 	* libgnat/a-tiinio.adb: Likewise.
+ 	* libgnat/a-tiinio.ads: Likewise.
+ 	* libgnat/a-tiinio__128.adb: Likewise.
+ 	* libgnat/a-timoio.adb: Likewise.
+ 	* libgnat/a-timoio.ads: Likewise.
+ 	* libgnat/a-timoio__128.adb: Likewise.
+ 	* libgnat/a-tiocst.adb: Likewise.
+ 	* libgnat/a-tiocst.ads: Likewise.
+ 	* libgnat/a-tirsfi.adb: Likewise.
+ 	* libgnat/a-tirsfi.ads: Likewise.
+ 	* libgnat/a-titest.adb: Likewise.
+ 	* libgnat/a-undesu.adb: Likewise.
+ 	* libgnat/a-wichha.adb: Likewise.
+ 	* libgnat/a-wichun.adb: Likewise.
+ 	* libgnat/a-wichun.ads: Likewise.
+ 	* libgnat/a-witeio.adb: Likewise.
+ 	* libgnat/a-witeio.ads: Likewise.
+ 	* libgnat/a-wrstfi.adb: Likewise.
+ 	* libgnat/a-wrstfi.ads: Likewise.
+ 	* libgnat/a-wtcoau.adb: Likewise.
+ 	* libgnat/a-wtcoau.ads: Likewise.
+ 	* libgnat/a-wtcoio.adb: Likewise.
+ 	* libgnat/a-wtcstr.adb: Likewise.
+ 	* libgnat/a-wtcstr.ads: Likewise.
+ 	* libgnat/a-wtdeau.adb: Likewise.
+ 	* libgnat/a-wtdeau.ads: Likewise.
+ 	* libgnat/a-wtdeio.adb: Likewise.
+ 	* libgnat/a-wtdeio__128.adb: Likewise.
+ 	* libgnat/a-wtedit.adb: Likewise.
+ 	* libgnat/a-wtedit.ads: Likewise.
+ 	* libgnat/a-wtenau.adb: Likewise.
+ 	* libgnat/a-wtenau.ads: Likewise.
+ 	* libgnat/a-wtenio.adb: Likewise.
+ 	* libgnat/a-wtfiau.adb: Likewise.
+ 	* libgnat/a-wtfiau.ads: Likewise.
+ 	* libgnat/a-wtfiio.adb: Likewise.
+ 	* libgnat/a-wtfiio__128.adb: Likewise.
+ 	* libgnat/a-wtflau.adb: Likewise.
+ 	* libgnat/a-wtflau.ads: Likewise.
+ 	* libgnat/a-wtflio.adb: Likewise.
+ 	* libgnat/a-wtgeau.adb: Likewise.
+ 	* libgnat/a-wtgeau.ads: Likewise.
+ 	* libgnat/a-wtinau.adb: Likewise.
+ 	* libgnat/a-wtinau.ads: Likewise.
+ 	* libgnat/a-wtinio.adb: Likewise.
+ 	* libgnat/a-wtinio__128.adb: Likewise.
+ 	* libgnat/a-wtmoio.adb: Likewise.
+ 	* libgnat/a-wtmoio.ads: Likewise.
+ 	* libgnat/a-wtmoio__128.adb: Likewise.
+ 	* libgnat/a-wttest.adb: Likewise.
+ 	* libgnat/a-wwboio.adb: Likewise.
+ 	* libgnat/a-zchhan.adb: Likewise.
+ 	* libgnat/a-zchuni.adb: Likewise.
+ 	* libgnat/a-zchuni.ads: Likewise.
+ 	* libgnat/a-zrstfi.adb: Likewise.
+ 	* libgnat/a-zrstfi.ads: Likewise.
+ 	* libgnat/a-ztcoau.adb: Likewise.
+ 	* libgnat/a-ztcoio.adb: Likewise.
+ 	* libgnat/a-ztcstr.adb: Likewise.
+ 	* libgnat/a-ztcstr.ads: Likewise.
+ 	* libgnat/a-ztdeau.adb: Likewise.
+ 	* libgnat/a-ztdeau.ads: Likewise.
+ 	* libgnat/a-ztdeio.adb: Likewise.
+ 	* libgnat/a-ztdeio__128.adb: Likewise.
+ 	* libgnat/a-ztedit.adb: Likewise.
+ 	* libgnat/a-ztedit.ads: Likewise.
+ 	* libgnat/a-ztenau.adb: Likewise.
+ 	* libgnat/a-ztenau.ads: Likewise.
+ 	* libgnat/a-ztenio.adb: Likewise.
+ 	* libgnat/a-ztexio.adb: Likewise.
+ 	* libgnat/a-ztexio.ads: Likewise.
+ 	* libgnat/a-ztfiau.adb: Likewise.
+ 	* libgnat/a-ztfiau.ads: Likewise.
+ 	* libgnat/a-ztfiio.adb: Likewise.
+ 	* libgnat/a-ztfiio__128.adb: Likewise.
+ 	* libgnat/a-ztflau.adb: Likewise.
+ 	* libgnat/a-ztflau.ads: Likewise.
+ 	* libgnat/a-ztflio.adb: Likewise.
+ 	* libgnat/a-ztgeau.adb: Likewise.
+ 	* libgnat/a-ztgeau.ads: Likewise.
+ 	* libgnat/a-ztinau.adb: Likewise.
+ 	* libgnat/a-ztinau.ads: Likewise.
+ 	* libgnat/a-ztinio.adb: Likewise.
+ 	* libgnat/a-ztinio__128.adb: Likewise.
+ 	* libgnat/a-ztmoio.adb: Likewise.
+ 	* libgnat/a-ztmoio__128.adb: Likewise.
+ 	* libgnat/a-zttest.adb: Likewise.
+ 	* libgnat/a-zzboio.adb: Likewise.
+ 	* libgnat/g-allein.ads: Likewise.
+ 	* libgnat/g-alleve.adb: Likewise.
+ 	* libgnat/g-alleve.ads: Likewise.
+ 	* libgnat/g-alleve__hard.adb: Likewise.
+ 	* libgnat/g-alleve__hard.ads: Likewise.
+ 	* libgnat/g-altcon.adb: Likewise.
+ 	* libgnat/g-altcon.ads: Likewise.
+ 	* libgnat/g-altive.ads: Likewise.
+ 	* libgnat/g-alveop.adb: Likewise.
+ 	* libgnat/g-alveop.ads: Likewise.
+ 	* libgnat/g-alvety.ads: Likewise.
+ 	* libgnat/g-alvevi.ads: Likewise.
+ 	* libgnat/g-arrspl.adb: Likewise.
+ 	* libgnat/g-arrspl.ads: Likewise.
+ 	* libgnat/g-awk.adb: Likewise.
+ 	* libgnat/g-awk.ads: Likewise.
+ 	* libgnat/g-binenv.adb: Likewise.
+ 	* libgnat/g-binenv.ads: Likewise.
+ 	* libgnat/g-brapre.ads: Likewise.
+ 	* libgnat/g-bubsor.adb: Likewise.
+ 	* libgnat/g-bubsor.ads: Likewise.
+ 	* libgnat/g-busora.adb: Likewise.
+ 	* libgnat/g-busora.ads: Likewise.
+ 	* libgnat/g-busorg.adb: Likewise.
+ 	* libgnat/g-busorg.ads: Likewise.
+ 	* libgnat/g-byorma.adb: Likewise.
+ 	* libgnat/g-byorma.ads: Likewise.
+ 	* libgnat/g-bytswa.adb: Likewise.
+ 	* libgnat/g-bytswa.ads: Likewise.
+ 	* libgnat/g-calend.adb: Likewise.
+ 	* libgnat/g-calend.ads: Likewise.
+ 	* libgnat/g-casuti.adb: Likewise.
+ 	* libgnat/g-casuti.ads: Likewise.
+ 	* libgnat/g-catiio.adb: Likewise.
+ 	* libgnat/g-catiio.ads: Likewise.
+ 	* libgnat/g-cgi.adb: Likewise.
+ 	* libgnat/g-cgi.ads: Likewise.
+ 	* libgnat/g-cgicoo.adb: Likewise.
+ 	* libgnat/g-cgicoo.ads: Likewise.
+ 	* libgnat/g-cgideb.adb: Likewise.
+ 	* libgnat/g-cgideb.ads: Likewise.
+ 	* libgnat/g-comlin.adb: Likewise.
+ 	* libgnat/g-comlin.ads: Likewise.
+ 	* libgnat/g-comver.adb: Likewise.
+ 	* libgnat/g-comver.ads: Likewise.
+ 	* libgnat/g-cppexc.adb: Likewise.
+ 	* libgnat/g-cppexc.ads: Likewise.
+ 	* libgnat/g-crc32.adb: Likewise.
+ 	* libgnat/g-crc32.ads: Likewise.
+ 	* libgnat/g-ctrl_c.adb: Likewise.
+ 	* libgnat/g-ctrl_c.ads: Likewise.
+ 	* libgnat/g-curexc.ads: Likewise.
+ 	* libgnat/g-debpoo.adb: Likewise.
+ 	* libgnat/g-debpoo.ads: Likewise.
+ 	* libgnat/g-debuti.adb: Likewise.
+ 	* libgnat/g-debuti.ads: Likewise.
+ 	* libgnat/g-decstr.adb: Likewise.
+ 	* libgnat/g-decstr.ads: Likewise.
+ 	* libgnat/g-deutst.ads: Likewise.
+ 	* libgnat/g-diopit.adb: Likewise.
+ 	* libgnat/g-diopit.ads: Likewise.
+ 	* libgnat/g-dirope.adb: Likewise.
+ 	* libgnat/g-dirope.ads: Likewise.
+ 	* libgnat/g-dynhta.adb: Likewise.
+ 	* libgnat/g-dynhta.ads: Likewise.
+ 	* libgnat/g-dyntab.adb: Likewise.
+ 	* libgnat/g-dyntab.ads: Likewise.
+ 	* libgnat/g-eacodu.adb: Likewise.
+ 	* libgnat/g-encstr.adb: Likewise.
+ 	* libgnat/g-encstr.ads: Likewise.
+ 	* libgnat/g-enutst.ads: Likewise.
+ 	* libgnat/g-excact.adb: Likewise.
+ 	* libgnat/g-excact.ads: Likewise.
+ 	* libgnat/g-except.ads: Likewise.
+ 	* libgnat/g-exctra.adb: Likewise.
+ 	* libgnat/g-exctra.ads: Likewise.
+ 	* libgnat/g-expect.adb: Likewise.
+ 	* libgnat/g-expect.ads: Likewise.
+ 	* libgnat/g-exptty.adb: Likewise.
+ 	* libgnat/g-exptty.ads: Likewise.
+ 	* libgnat/g-flocon.ads: Likewise.
+ 	* libgnat/g-forstr.adb: Likewise.
+ 	* libgnat/g-forstr.ads: Likewise.
+ 	* libgnat/g-graphs.adb: Likewise.
+ 	* libgnat/g-graphs.ads: Likewise.
+ 	* libgnat/g-heasor.adb: Likewise.
+ 	* libgnat/g-heasor.ads: Likewise.
+ 	* libgnat/g-hesora.adb: Likewise.
+ 	* libgnat/g-hesora.ads: Likewise.
+ 	* libgnat/g-hesorg.adb: Likewise.
+ 	* libgnat/g-hesorg.ads: Likewise.
+ 	* libgnat/g-htable.adb: Likewise.
+ 	* libgnat/g-htable.ads: Likewise.
+ 	* libgnat/g-io-put__vxworks.adb: Likewise.
+ 	* libgnat/g-io.adb: Likewise.
+ 	* libgnat/g-io.ads: Likewise.
+ 	* libgnat/g-io_aux.adb: Likewise.
+ 	* libgnat/g-io_aux.ads: Likewise.
+ 	* libgnat/g-lists.adb: Likewise.
+ 	* libgnat/g-lists.ads: Likewise.
+ 	* libgnat/g-locfil.adb: Likewise.
+ 	* libgnat/g-locfil.ads: Likewise.
+ 	* libgnat/g-mbdira.adb: Likewise.
+ 	* libgnat/g-mbdira.ads: Likewise.
+ 	* libgnat/g-mbflra.adb: Likewise.
+ 	* libgnat/g-mbflra.ads: Likewise.
+ 	* libgnat/g-md5.adb: Likewise.
+ 	* libgnat/g-md5.ads: Likewise.
+ 	* libgnat/g-memdum.adb: Likewise.
+ 	* libgnat/g-memdum.ads: Likewise.
+ 	* libgnat/g-moreex.adb: Likewise.
+ 	* libgnat/g-moreex.ads: Likewise.
+ 	* libgnat/g-os_lib.adb: Likewise.
+ 	* libgnat/g-os_lib.ads: Likewise.
+ 	* libgnat/g-pehage.adb: Likewise.
+ 	* libgnat/g-pehage.ads: Likewise.
+ 	* libgnat/g-rannum.adb: Likewise.
+ 	* libgnat/g-rannum.ads: Likewise.
+ 	* libgnat/g-regexp.adb: Likewise.
+ 	* libgnat/g-regexp.ads: Likewise.
+ 	* libgnat/g-regist.adb: Likewise.
+ 	* libgnat/g-regist.ads: Likewise.
+ 	* libgnat/g-regpat.adb: Likewise.
+ 	* libgnat/g-regpat.ads: Likewise.
+ 	* libgnat/g-rewdat.adb: Likewise.
+ 	* libgnat/g-rewdat.ads: Likewise.
+ 	* libgnat/g-sechas.adb: Likewise.
+ 	* libgnat/g-sechas.ads: Likewise.
+ 	* libgnat/g-sehamd.adb: Likewise.
+ 	* libgnat/g-sehamd.ads: Likewise.
+ 	* libgnat/g-sehash.adb: Likewise.
+ 	* libgnat/g-sehash.ads: Likewise.
+ 	* libgnat/g-sercom.adb: Likewise.
+ 	* libgnat/g-sercom.ads: Likewise.
+ 	* libgnat/g-sercom__linux.adb: Likewise.
+ 	* libgnat/g-sercom__mingw.adb: Likewise.
+ 	* libgnat/g-sestin.ads: Likewise.
+ 	* libgnat/g-sets.adb: Likewise.
+ 	* libgnat/g-sets.ads: Likewise.
+ 	* libgnat/g-sha1.adb: Likewise.
+ 	* libgnat/g-sha1.ads: Likewise.
+ 	* libgnat/g-sha224.ads: Likewise.
+ 	* libgnat/g-sha256.ads: Likewise.
+ 	* libgnat/g-sha384.ads: Likewise.
+ 	* libgnat/g-sha512.ads: Likewise.
+ 	* libgnat/g-shsh32.adb: Likewise.
+ 	* libgnat/g-shsh32.ads: Likewise.
+ 	* libgnat/g-shsh64.adb: Likewise.
+ 	* libgnat/g-shsh64.ads: Likewise.
+ 	* libgnat/g-shshco.adb: Likewise.
+ 	* libgnat/g-shshco.ads: Likewise.
+ 	* libgnat/g-soccon.ads: Likewise.
+ 	* libgnat/g-socket.adb: Likewise.
+ 	* libgnat/g-socket.ads: Likewise.
+ 	* libgnat/g-socket__dummy.adb: Likewise.
+ 	* libgnat/g-socket__dummy.ads: Likewise.
+ 	* libgnat/g-socpol.adb: Likewise.
+ 	* libgnat/g-socpol.ads: Likewise.
+ 	* libgnat/g-socpol__dummy.adb: Likewise.
+ 	* libgnat/g-socpol__dummy.ads: Likewise.
+ 	* libgnat/g-socthi.adb: Likewise.
+ 	* libgnat/g-socthi.ads: Likewise.
+ 	* libgnat/g-socthi__dummy.adb: Likewise.
+ 	* libgnat/g-socthi__dummy.ads: Likewise.
+ 	* libgnat/g-socthi__mingw.adb: Likewise.
+ 	* libgnat/g-socthi__mingw.ads: Likewise.
+ 	* libgnat/g-socthi__vxworks.adb: Likewise.
+ 	* libgnat/g-socthi__vxworks.ads: Likewise.
+ 	* libgnat/g-soliop.ads: Likewise.
+ 	* libgnat/g-soliop__lynxos.ads: Likewise.
+ 	* libgnat/g-soliop__mingw.ads: Likewise.
+ 	* libgnat/g-soliop__qnx.ads: Likewise.
+ 	* libgnat/g-soliop__solaris.ads: Likewise.
+ 	* libgnat/g-sopowa.adb: Likewise.
+ 	* libgnat/g-sopowa__mingw.adb: Likewise.
+ 	* libgnat/g-sopowa__posix.adb: Likewise.
+ 	* libgnat/g-sothco.adb: Likewise.
+ 	* libgnat/g-sothco.ads: Likewise.
+ 	* libgnat/g-sothco__dummy.adb: Likewise.
+ 	* libgnat/g-sothco__dummy.ads: Likewise.
+ 	* libgnat/g-souinf.ads: Likewise.
+ 	* libgnat/g-spchge.adb: Likewise.
+ 	* libgnat/g-spchge.ads: Likewise.
+ 	* libgnat/g-speche.adb: Likewise.
+ 	* libgnat/g-speche.ads: Likewise.
+ 	* libgnat/g-spipat.adb: Likewise.
+ 	* libgnat/g-spipat.ads: Likewise.
+ 	* libgnat/g-spitbo.adb: Likewise.
+ 	* libgnat/g-spitbo.ads: Likewise.
+ 	* libgnat/g-spogwa.adb: Likewise.
+ 	* libgnat/g-spogwa.ads: Likewise.
+ 	* libgnat/g-sptabo.ads: Likewise.
+ 	* libgnat/g-sptain.ads: Likewise.
+ 	* libgnat/g-sptavs.ads: Likewise.
+ 	* libgnat/g-sse.ads: Likewise.
+ 	* libgnat/g-ssvety.ads: Likewise.
+ 	* libgnat/g-sthcso.adb: Likewise.
+ 	* libgnat/g-stheme.adb: Likewise.
+ 	* libgnat/g-strhas.ads: Likewise.
+ 	* libgnat/g-string.adb: Likewise.
+ 	* libgnat/g-string.ads: Likewise.
+ 	* libgnat/g-strspl.ads: Likewise.
+ 	* libgnat/g-stseme.adb: Likewise.
+ 	* libgnat/g-stsifd__sockets.adb: Likewise.
+ 	* libgnat/g-table.adb: Likewise.
+ 	* libgnat/g-table.ads: Likewise.
+ 	* libgnat/g-tasloc.adb: Likewise.
+ 	* libgnat/g-tasloc.ads: Likewise.
+ 	* libgnat/g-timsta.adb: Likewise.
+ 	* libgnat/g-timsta.ads: Likewise.
+ 	* libgnat/g-traceb.adb: Likewise.
+ 	* libgnat/g-traceb.ads: Likewise.
+ 	* libgnat/g-trasym.adb: Likewise.
+ 	* libgnat/g-trasym.ads: Likewise.
+ 	* libgnat/g-tty.adb: Likewise.
+ 	* libgnat/g-tty.ads: Likewise.
+ 	* libgnat/g-u3spch.adb: Likewise.
+ 	* libgnat/g-u3spch.ads: Likewise.
+ 	* libgnat/g-utf_32.adb: Likewise.
+ 	* libgnat/g-utf_32.ads: Likewise.
+ 	* libgnat/g-wispch.adb: Likewise.
+ 	* libgnat/g-wispch.ads: Likewise.
+ 	* libgnat/g-wistsp.ads: Likewise.
+ 	* libgnat/g-zspche.adb: Likewise.
+ 	* libgnat/g-zspche.ads: Likewise.
+ 	* libgnat/g-zstspl.ads: Likewise.
+ 	* libgnat/gnat.ads: Likewise.
+ 	* libgnat/i-c.adb: Likewise.
+ 	* libgnat/i-cexten.ads: Likewise.
+ 	* libgnat/i-cexten__128.ads: Likewise.
+ 	* libgnat/i-cobol.adb: Likewise.
+ 	* libgnat/i-cobol.ads: Likewise.
+ 	* libgnat/i-cpoint.adb: Likewise.
+ 	* libgnat/i-cpoint.ads: Likewise.
+ 	* libgnat/i-cstrea.adb: Likewise.
+ 	* libgnat/i-cstrea.ads: Likewise.
+ 	* libgnat/i-cstrin.adb: Likewise.
+ 	* libgnat/i-cstrin.ads: Likewise.
+ 	* libgnat/i-fortra.adb: Likewise.
+ 	* libgnat/i-pacdec.adb: Likewise.
+ 	* libgnat/i-pacdec.ads: Likewise.
+ 	* libgnat/i-vxwoio.adb: Likewise.
+ 	* libgnat/i-vxwoio.ads: Likewise.
+ 	* libgnat/i-vxwork.ads: Likewise.
+ 	* libgnat/i-vxwork__x86.ads: Likewise.
+ 	* libgnat/interfac.ads: Likewise.
+ 	* libgnat/interfac__2020.ads: Likewise.
+ 	* libgnat/memtrack.adb: Likewise.
+ 	* libgnat/s-addima.adb: Likewise.
+ 	* libgnat/s-addima.ads: Likewise.
+ 	* libgnat/s-addope.adb: Likewise.
+ 	* libgnat/s-addope.ads: Likewise.
+ 	* libgnat/s-aoinar.adb: Likewise.
+ 	* libgnat/s-aoinar.ads: Likewise.
+ 	* libgnat/s-aomoar.adb: Likewise.
+ 	* libgnat/s-aomoar.ads: Likewise.
+ 	* libgnat/s-aotase.adb: Likewise.
+ 	* libgnat/s-aotase.ads: Likewise.
+ 	* libgnat/s-aridou.adb: Likewise.
+ 	* libgnat/s-aridou.ads: Likewise.
+ 	* libgnat/s-arit128.adb: Likewise.
+ 	* libgnat/s-arit128.ads: Likewise.
+ 	* libgnat/s-arit32.adb: Likewise.
+ 	* libgnat/s-arit32.ads: Likewise.
+ 	* libgnat/s-arit64.adb: Likewise.
+ 	* libgnat/s-arit64.ads: Likewise.
+ 	* libgnat/s-assert.adb: Likewise.
+ 	* libgnat/s-assert.ads: Likewise.
+ 	* libgnat/s-atacco.adb: Likewise.
+ 	* libgnat/s-atacco.ads: Likewise.
+ 	* libgnat/s-atocou.adb: Likewise.
+ 	* libgnat/s-atocou.ads: Likewise.
+ 	* libgnat/s-atocou__builtin.adb: Likewise.
+ 	* libgnat/s-atocou__x86.adb: Likewise.
+ 	* libgnat/s-atoope.ads: Likewise.
+ 	* libgnat/s-atopex.adb: Likewise.
+ 	* libgnat/s-atopex.ads: Likewise.
+ 	* libgnat/s-atopri.adb: Likewise.
+ 	* libgnat/s-atopri.ads: Likewise.
+ 	* libgnat/s-auxdec.adb: Likewise.
+ 	* libgnat/s-auxdec.ads: Likewise.
+ 	* libgnat/s-bignum.adb: Likewise.
+ 	* libgnat/s-bignum.ads: Likewise.
+ 	* libgnat/s-bitfie.ads: Likewise.
+ 	* libgnat/s-bitops.adb: Likewise.
+ 	* libgnat/s-bitops.ads: Likewise.
+ 	* libgnat/s-bituti.adb: Likewise.
+ 	* libgnat/s-bituti.ads: Likewise.
+ 	* libgnat/s-boarop.ads: Likewise.
+ 	* libgnat/s-boustr.adb: Likewise.
+ 	* libgnat/s-boustr.ads: Likewise.
+ 	* libgnat/s-bytswa.ads: Likewise.
+ 	* libgnat/s-carsi8.adb: Likewise.
+ 	* libgnat/s-carsi8.ads: Likewise.
+ 	* libgnat/s-carun8.adb: Likewise.
+ 	* libgnat/s-carun8.ads: Likewise.
+ 	* libgnat/s-casi128.adb: Likewise.
+ 	* libgnat/s-casi128.ads: Likewise.
+ 	* libgnat/s-casi16.adb: Likewise.
+ 	* libgnat/s-casi16.ads: Likewise.
+ 	* libgnat/s-casi32.adb: Likewise.
+ 	* libgnat/s-casi32.ads: Likewise.
+ 	* libgnat/s-casi64.adb: Likewise.
+ 	* libgnat/s-casi64.ads: Likewise.
+ 	* libgnat/s-casuti.adb: Likewise.
+ 	* libgnat/s-casuti.ads: Likewise.
+ 	* libgnat/s-caun128.adb: Likewise.
+ 	* libgnat/s-caun128.ads: Likewise.
+ 	* libgnat/s-caun16.adb: Likewise.
+ 	* libgnat/s-caun16.ads: Likewise.
+ 	* libgnat/s-caun32.adb: Likewise.
+ 	* libgnat/s-caun32.ads: Likewise.
+ 	* libgnat/s-caun64.adb: Likewise.
+ 	* libgnat/s-caun64.ads: Likewise.
+ 	* libgnat/s-chepoo.ads: Likewise.
+ 	* libgnat/s-commun.adb: Likewise.
+ 	* libgnat/s-commun.ads: Likewise.
+ 	* libgnat/s-conca2.adb: Likewise.
+ 	* libgnat/s-conca2.ads: Likewise.
+ 	* libgnat/s-conca3.adb: Likewise.
+ 	* libgnat/s-conca3.ads: Likewise.
+ 	* libgnat/s-conca4.adb: Likewise.
+ 	* libgnat/s-conca4.ads: Likewise.
+ 	* libgnat/s-conca5.adb: Likewise.
+ 	* libgnat/s-conca5.ads: Likewise.
+ 	* libgnat/s-conca6.adb: Likewise.
+ 	* libgnat/s-conca6.ads: Likewise.
+ 	* libgnat/s-conca7.adb: Likewise.
+ 	* libgnat/s-conca7.ads: Likewise.
+ 	* libgnat/s-conca8.adb: Likewise.
+ 	* libgnat/s-conca8.ads: Likewise.
+ 	* libgnat/s-conca9.adb: Likewise.
+ 	* libgnat/s-conca9.ads: Likewise.
+ 	* libgnat/s-crc32.adb: Likewise.
+ 	* libgnat/s-crc32.ads: Likewise.
+ 	* libgnat/s-crtl.ads: Likewise.
+ 	* libgnat/s-dfmkio.ads: Likewise.
+ 	* libgnat/s-dfmopr.ads: Likewise.
+ 	* libgnat/s-dgmgop.ads: Likewise.
+ 	* libgnat/s-diflio.adb: Likewise.
+ 	* libgnat/s-diflio.ads: Likewise.
+ 	* libgnat/s-diflmk.ads: Likewise.
+ 	* libgnat/s-digemk.ads: Likewise.
+ 	* libgnat/s-diinio.adb: Likewise.
+ 	* libgnat/s-diinio.ads: Likewise.
+ 	* libgnat/s-dilomk.ads: Likewise.
+ 	* libgnat/s-dim.ads: Likewise.
+ 	* libgnat/s-dimkio.ads: Likewise.
+ 	* libgnat/s-dimmks.ads: Likewise.
+ 	* libgnat/s-direio.adb: Likewise.
+ 	* libgnat/s-direio.ads: Likewise.
+ 	* libgnat/s-dlmkio.ads: Likewise.
+ 	* libgnat/s-dlmopr.ads: Likewise.
+ 	* libgnat/s-dmotpr.ads: Likewise.
+ 	* libgnat/s-dsaser.ads: Likewise.
+ 	* libgnat/s-dwalin.adb: Likewise.
+ 	* libgnat/s-dwalin.ads: Likewise.
+ 	* libgnat/s-elaall.adb: Likewise.
+ 	* libgnat/s-elaall.ads: Likewise.
+ 	* libgnat/s-excdeb.adb: Likewise.
+ 	* libgnat/s-excdeb.ads: Likewise.
+ 	* libgnat/s-except.adb: Likewise.
+ 	* libgnat/s-except.ads: Likewise.
+ 	* libgnat/s-excmac__arm.adb: Likewise.
+ 	* libgnat/s-excmac__arm.ads: Likewise.
+ 	* libgnat/s-excmac__gcc.adb: Likewise.
+ 	* libgnat/s-excmac__gcc.ads: Likewise.
+ 	* libgnat/s-exctab.adb: Likewise.
+ 	* libgnat/s-exctab.ads: Likewise.
+ 	* libgnat/s-exctra.adb: Likewise.
+ 	* libgnat/s-exctra.ads: Likewise.
+ 	* libgnat/s-exnint.adb: Likewise.
+ 	* libgnat/s-exnint.ads: Likewise.
+ 	* libgnat/s-exnllf.adb: Likewise.
+ 	* libgnat/s-exnllf.ads: Likewise.
+ 	* libgnat/s-exnlli.adb: Likewise.
+ 	* libgnat/s-exnlli.ads: Likewise.
+ 	* libgnat/s-exnllli.ads: Likewise.
+ 	* libgnat/s-expint.adb: Likewise.
+ 	* libgnat/s-expint.ads: Likewise.
+ 	* libgnat/s-explli.adb: Likewise.
+ 	* libgnat/s-explli.ads: Likewise.
+ 	* libgnat/s-expllli.ads: Likewise.
+ 	* libgnat/s-explllu.ads: Likewise.
+ 	* libgnat/s-expllu.adb: Likewise.
+ 	* libgnat/s-expllu.ads: Likewise.
+ 	* libgnat/s-expmod.adb: Likewise.
+ 	* libgnat/s-expmod.ads: Likewise.
+ 	* libgnat/s-exponn.adb: Likewise.
+ 	* libgnat/s-exponn.ads: Likewise.
+ 	* libgnat/s-expont.adb: Likewise.
+ 	* libgnat/s-expont.ads: Likewise.
+ 	* libgnat/s-exponu.adb: Likewise.
+ 	* libgnat/s-exponu.ads: Likewise.
+ 	* libgnat/s-expuns.adb: Likewise.
+ 	* libgnat/s-expuns.ads: Likewise.
+ 	* libgnat/s-fatflt.ads: Likewise.
+ 	* libgnat/s-fatgen.adb: Likewise.
+ 	* libgnat/s-fatgen.ads: Likewise.
+ 	* libgnat/s-fatlfl.ads: Likewise.
+ 	* libgnat/s-fatllf.ads: Likewise.
+ 	* libgnat/s-ficobl.ads: Likewise.
+ 	* libgnat/s-filatt.ads: Likewise.
+ 	* libgnat/s-fileio.adb: Likewise.
+ 	* libgnat/s-fileio.ads: Likewise.
+ 	* libgnat/s-finmas.adb: Likewise.
+ 	* libgnat/s-finmas.ads: Likewise.
+ 	* libgnat/s-finroo.adb: Likewise.
+ 	* libgnat/s-finroo.ads: Likewise.
+ 	* libgnat/s-flocon.adb: Likewise.
+ 	* libgnat/s-flocon.ads: Likewise.
+ 	* libgnat/s-flocon__none.adb: Likewise.
+ 	* libgnat/s-fode128.ads: Likewise.
+ 	* libgnat/s-fode32.ads: Likewise.
+ 	* libgnat/s-fode64.ads: Likewise.
+ 	* libgnat/s-fofi128.ads: Likewise.
+ 	* libgnat/s-fofi32.ads: Likewise.
+ 	* libgnat/s-fofi64.ads: Likewise.
+ 	* libgnat/s-fore_d.adb: Likewise.
+ 	* libgnat/s-fore_d.ads: Likewise.
+ 	* libgnat/s-fore_f.adb: Likewise.
+ 	* libgnat/s-fore_f.ads: Likewise.
+ 	* libgnat/s-forrea.adb: Likewise.
+ 	* libgnat/s-forrea.ads: Likewise.
+ 	* libgnat/s-gearop.adb: Likewise.
+ 	* libgnat/s-gearop.ads: Likewise.
+ 	* libgnat/s-genbig.adb: Likewise.
+ 	* libgnat/s-genbig.ads: Likewise.
+ 	* libgnat/s-geveop.adb: Likewise.
+ 	* libgnat/s-geveop.ads: Likewise.
+ 	* libgnat/s-gloloc.adb: Likewise.
+ 	* libgnat/s-gloloc.ads: Likewise.
+ 	* libgnat/s-gloloc__mingw.adb: Likewise.
+ 	* libgnat/s-htable.adb: Likewise.
+ 	* libgnat/s-htable.ads: Likewise.
+ 	* libgnat/s-imageb.adb: Likewise.
+ 	* libgnat/s-imageb.ads: Likewise.
+ 	* libgnat/s-imaged.adb: Likewise.
+ 	* libgnat/s-imaged.ads: Likewise.
+ 	* libgnat/s-imagef.adb: Likewise.
+ 	* libgnat/s-imagef.ads: Likewise.
+ 	* libgnat/s-imagei.adb: Likewise.
+ 	* libgnat/s-imagei.ads: Likewise.
+ 	* libgnat/s-imageu.adb: Likewise.
+ 	* libgnat/s-imageu.ads: Likewise.
+ 	* libgnat/s-imagew.adb: Likewise.
+ 	* libgnat/s-imagew.ads: Likewise.
+ 	* libgnat/s-imde128.ads: Likewise.
+ 	* libgnat/s-imde32.ads: Likewise.
+ 	* libgnat/s-imde64.ads: Likewise.
+ 	* libgnat/s-imenne.adb: Likewise.
+ 	* libgnat/s-imenne.ads: Likewise.
+ 	* libgnat/s-imfi128.ads: Likewise.
+ 	* libgnat/s-imfi32.ads: Likewise.
+ 	* libgnat/s-imfi64.ads: Likewise.
+ 	* libgnat/s-imgbiu.adb: Likewise.
+ 	* libgnat/s-imgbiu.ads: Likewise.
+ 	* libgnat/s-imgboo.adb: Likewise.
+ 	* libgnat/s-imgboo.ads: Likewise.
+ 	* libgnat/s-imgcha.adb: Likewise.
+ 	* libgnat/s-imgcha.ads: Likewise.
+ 	* libgnat/s-imgenu.adb: Likewise.
+ 	* libgnat/s-imgenu.ads: Likewise.
+ 	* libgnat/s-imgint.adb: Likewise.
+ 	* libgnat/s-imgint.ads: Likewise.
+ 	* libgnat/s-imgllb.adb: Likewise.
+ 	* libgnat/s-imgllb.ads: Likewise.
+ 	* libgnat/s-imglli.adb: Likewise.
+ 	* libgnat/s-imglli.ads: Likewise.
+ 	* libgnat/s-imglllb.ads: Likewise.
+ 	* libgnat/s-imgllli.ads: Likewise.
+ 	* libgnat/s-imglllu.ads: Likewise.
+ 	* libgnat/s-imglllw.ads: Likewise.
+ 	* libgnat/s-imgllu.adb: Likewise.
+ 	* libgnat/s-imgllu.ads: Likewise.
+ 	* libgnat/s-imgllw.adb: Likewise.
+ 	* libgnat/s-imgllw.ads: Likewise.
+ 	* libgnat/s-imgrea.adb: Likewise.
+ 	* libgnat/s-imgrea.ads: Likewise.
+ 	* libgnat/s-imguns.adb: Likewise.
+ 	* libgnat/s-imguns.ads: Likewise.
+ 	* libgnat/s-imguti.adb: Likewise.
+ 	* libgnat/s-imguti.ads: Likewise.
+ 	* libgnat/s-imgwch.adb: Likewise.
+ 	* libgnat/s-imgwch.ads: Likewise.
+ 	* libgnat/s-imgwiu.adb: Likewise.
+ 	* libgnat/s-imgwiu.ads: Likewise.
+ 	* libgnat/s-io.adb: Likewise.
+ 	* libgnat/s-io.ads: Likewise.
+ 	* libgnat/s-llflex.ads: Likewise.
+ 	* libgnat/s-maccod.ads: Likewise.
+ 	* libgnat/s-mantis.adb: Likewise.
+ 	* libgnat/s-mantis.ads: Likewise.
+ 	* libgnat/s-mastop.adb: Likewise.
+ 	* libgnat/s-mastop.ads: Likewise.
+ 	* libgnat/s-memcop.ads: Likewise.
+ 	* libgnat/s-memory.adb: Likewise.
+ 	* libgnat/s-memory.ads: Likewise.
+ 	* libgnat/s-mmap.adb: Likewise.
+ 	* libgnat/s-mmap.ads: Likewise.
+ 	* libgnat/s-mmauni__long.ads: Likewise.
+ 	* libgnat/s-mmosin__mingw.adb: Likewise.
+ 	* libgnat/s-mmosin__mingw.ads: Likewise.
+ 	* libgnat/s-mmosin__unix.adb: Likewise.
+ 	* libgnat/s-mmosin__unix.ads: Likewise.
+ 	* libgnat/s-multip.adb: Likewise.
+ 	* libgnat/s-objrea.adb: Likewise.
+ 	* libgnat/s-objrea.ads: Likewise.
+ 	* libgnat/s-optide.adb: Likewise.
+ 	* libgnat/s-os_lib.adb: Likewise.
+ 	* libgnat/s-os_lib.ads: Likewise.
+ 	* libgnat/s-osprim.ads: Likewise.
+ 	* libgnat/s-osprim__darwin.adb: Likewise.
+ 	* libgnat/s-osprim__lynxos.ads: Likewise.
+ 	* libgnat/s-osprim__mingw.adb: Likewise.
+ 	* libgnat/s-osprim__posix.adb: Likewise.
+ 	* libgnat/s-osprim__posix2008.adb: Likewise.
+ 	* libgnat/s-osprim__rtems.adb: Likewise.
+ 	* libgnat/s-osprim__solaris.adb: Likewise.
+ 	* libgnat/s-osprim__unix.adb: Likewise.
+ 	* libgnat/s-osprim__vxworks.adb: Likewise.
+ 	* libgnat/s-osprim__x32.adb: Likewise.
+ 	* libgnat/s-osvers__vxworks-653.ads: Likewise.
+ 	* libgnat/s-pack03.adb: Likewise.
+ 	* libgnat/s-pack03.ads: Likewise.
+ 	* libgnat/s-pack05.adb: Likewise.
+ 	* libgnat/s-pack05.ads: Likewise.
+ 	* libgnat/s-pack06.adb: Likewise.
+ 	* libgnat/s-pack06.ads: Likewise.
+ 	* libgnat/s-pack07.adb: Likewise.
+ 	* libgnat/s-pack07.ads: Likewise.
+ 	* libgnat/s-pack09.adb: Likewise.
+ 	* libgnat/s-pack09.ads: Likewise.
+ 	* libgnat/s-pack10.adb: Likewise.
+ 	* libgnat/s-pack10.ads: Likewise.
+ 	* libgnat/s-pack100.adb: Likewise.
+ 	* libgnat/s-pack100.ads: Likewise.
+ 	* libgnat/s-pack101.adb: Likewise.
+ 	* libgnat/s-pack101.ads: Likewise.
+ 	* libgnat/s-pack102.adb: Likewise.
+ 	* libgnat/s-pack102.ads: Likewise.
+ 	* libgnat/s-pack103.adb: Likewise.
+ 	* libgnat/s-pack103.ads: Likewise.
+ 	* libgnat/s-pack104.adb: Likewise.
+ 	* libgnat/s-pack104.ads: Likewise.
+ 	* libgnat/s-pack105.adb: Likewise.
+ 	* libgnat/s-pack105.ads: Likewise.
+ 	* libgnat/s-pack106.adb: Likewise.
+ 	* libgnat/s-pack106.ads: Likewise.
+ 	* libgnat/s-pack107.adb: Likewise.
+ 	* libgnat/s-pack107.ads: Likewise.
+ 	* libgnat/s-pack108.adb: Likewise.
+ 	* libgnat/s-pack108.ads: Likewise.
+ 	* libgnat/s-pack109.adb: Likewise.
+ 	* libgnat/s-pack109.ads: Likewise.
+ 	* libgnat/s-pack11.adb: Likewise.
+ 	* libgnat/s-pack11.ads: Likewise.
+ 	* libgnat/s-pack110.adb: Likewise.
+ 	* libgnat/s-pack110.ads: Likewise.
+ 	* libgnat/s-pack111.adb: Likewise.
+ 	* libgnat/s-pack111.ads: Likewise.
+ 	* libgnat/s-pack112.adb: Likewise.
+ 	* libgnat/s-pack112.ads: Likewise.
+ 	* libgnat/s-pack113.adb: Likewise.
+ 	* libgnat/s-pack113.ads: Likewise.
+ 	* libgnat/s-pack114.adb: Likewise.
+ 	* libgnat/s-pack114.ads: Likewise.
+ 	* libgnat/s-pack115.adb: Likewise.
+ 	* libgnat/s-pack115.ads: Likewise.
+ 	* libgnat/s-pack116.adb: Likewise.
+ 	* libgnat/s-pack116.ads: Likewise.
+ 	* libgnat/s-pack117.adb: Likewise.
+ 	* libgnat/s-pack117.ads: Likewise.
+ 	* libgnat/s-pack118.adb: Likewise.
+ 	* libgnat/s-pack118.ads: Likewise.
+ 	* libgnat/s-pack119.adb: Likewise.
+ 	* libgnat/s-pack119.ads: Likewise.
+ 	* libgnat/s-pack12.adb: Likewise.
+ 	* libgnat/s-pack12.ads: Likewise.
+ 	* libgnat/s-pack120.adb: Likewise.
+ 	* libgnat/s-pack120.ads: Likewise.
+ 	* libgnat/s-pack121.adb: Likewise.
+ 	* libgnat/s-pack121.ads: Likewise.
+ 	* libgnat/s-pack122.adb: Likewise.
+ 	* libgnat/s-pack122.ads: Likewise.
+ 	* libgnat/s-pack123.adb: Likewise.
+ 	* libgnat/s-pack123.ads: Likewise.
+ 	* libgnat/s-pack124.adb: Likewise.
+ 	* libgnat/s-pack124.ads: Likewise.
+ 	* libgnat/s-pack125.adb: Likewise.
+ 	* libgnat/s-pack125.ads: Likewise.
+ 	* libgnat/s-pack126.adb: Likewise.
+ 	* libgnat/s-pack126.ads: Likewise.
+ 	* libgnat/s-pack127.adb: Likewise.
+ 	* libgnat/s-pack127.ads: Likewise.
+ 	* libgnat/s-pack13.adb: Likewise.
+ 	* libgnat/s-pack13.ads: Likewise.
+ 	* libgnat/s-pack14.adb: Likewise.
+ 	* libgnat/s-pack14.ads: Likewise.
+ 	* libgnat/s-pack15.adb: Likewise.
+ 	* libgnat/s-pack15.ads: Likewise.
+ 	* libgnat/s-pack17.adb: Likewise.
+ 	* libgnat/s-pack17.ads: Likewise.
+ 	* libgnat/s-pack18.adb: Likewise.
+ 	* libgnat/s-pack18.ads: Likewise.
+ 	* libgnat/s-pack19.adb: Likewise.
+ 	* libgnat/s-pack19.ads: Likewise.
+ 	* libgnat/s-pack20.adb: Likewise.
+ 	* libgnat/s-pack20.ads: Likewise.
+ 	* libgnat/s-pack21.adb: Likewise.
+ 	* libgnat/s-pack21.ads: Likewise.
+ 	* libgnat/s-pack22.adb: Likewise.
+ 	* libgnat/s-pack22.ads: Likewise.
+ 	* libgnat/s-pack23.adb: Likewise.
+ 	* libgnat/s-pack23.ads: Likewise.
+ 	* libgnat/s-pack24.adb: Likewise.
+ 	* libgnat/s-pack24.ads: Likewise.
+ 	* libgnat/s-pack25.adb: Likewise.
+ 	* libgnat/s-pack25.ads: Likewise.
+ 	* libgnat/s-pack26.adb: Likewise.
+ 	* libgnat/s-pack26.ads: Likewise.
+ 	* libgnat/s-pack27.adb: Likewise.
+ 	* libgnat/s-pack27.ads: Likewise.
+ 	* libgnat/s-pack28.adb: Likewise.
+ 	* libgnat/s-pack28.ads: Likewise.
+ 	* libgnat/s-pack29.adb: Likewise.
+ 	* libgnat/s-pack29.ads: Likewise.
+ 	* libgnat/s-pack30.adb: Likewise.
+ 	* libgnat/s-pack30.ads: Likewise.
+ 	* libgnat/s-pack31.adb: Likewise.
+ 	* libgnat/s-pack31.ads: Likewise.
+ 	* libgnat/s-pack33.adb: Likewise.
+ 	* libgnat/s-pack33.ads: Likewise.
+ 	* libgnat/s-pack34.adb: Likewise.
+ 	* libgnat/s-pack34.ads: Likewise.
+ 	* libgnat/s-pack35.adb: Likewise.
+ 	* libgnat/s-pack35.ads: Likewise.
+ 	* libgnat/s-pack36.adb: Likewise.
+ 	* libgnat/s-pack36.ads: Likewise.
+ 	* libgnat/s-pack37.adb: Likewise.
+ 	* libgnat/s-pack37.ads: Likewise.
+ 	* libgnat/s-pack38.adb: Likewise.
+ 	* libgnat/s-pack38.ads: Likewise.
+ 	* libgnat/s-pack39.adb: Likewise.
+ 	* libgnat/s-pack39.ads: Likewise.
+ 	* libgnat/s-pack40.adb: Likewise.
+ 	* libgnat/s-pack40.ads: Likewise.
+ 	* libgnat/s-pack41.adb: Likewise.
+ 	* libgnat/s-pack41.ads: Likewise.
+ 	* libgnat/s-pack42.adb: Likewise.
+ 	* libgnat/s-pack42.ads: Likewise.
+ 	* libgnat/s-pack43.adb: Likewise.
+ 	* libgnat/s-pack43.ads: Likewise.
+ 	* libgnat/s-pack44.adb: Likewise.
+ 	* libgnat/s-pack44.ads: Likewise.
+ 	* libgnat/s-pack45.adb: Likewise.
+ 	* libgnat/s-pack45.ads: Likewise.
+ 	* libgnat/s-pack46.adb: Likewise.
+ 	* libgnat/s-pack46.ads: Likewise.
+ 	* libgnat/s-pack47.adb: Likewise.
+ 	* libgnat/s-pack47.ads: Likewise.
+ 	* libgnat/s-pack48.adb: Likewise.
+ 	* libgnat/s-pack48.ads: Likewise.
+ 	* libgnat/s-pack49.adb: Likewise.
+ 	* libgnat/s-pack49.ads: Likewise.
+ 	* libgnat/s-pack50.adb: Likewise.
+ 	* libgnat/s-pack50.ads: Likewise.
+ 	* libgnat/s-pack51.adb: Likewise.
+ 	* libgnat/s-pack51.ads: Likewise.
+ 	* libgnat/s-pack52.adb: Likewise.
+ 	* libgnat/s-pack52.ads: Likewise.
+ 	* libgnat/s-pack53.adb: Likewise.
+ 	* libgnat/s-pack53.ads: Likewise.
+ 	* libgnat/s-pack54.adb: Likewise.
+ 	* libgnat/s-pack54.ads: Likewise.
+ 	* libgnat/s-pack55.adb: Likewise.
+ 	* libgnat/s-pack55.ads: Likewise.
+ 	* libgnat/s-pack56.adb: Likewise.
+ 	* libgnat/s-pack56.ads: Likewise.
+ 	* libgnat/s-pack57.adb: Likewise.
+ 	* libgnat/s-pack57.ads: Likewise.
+ 	* libgnat/s-pack58.adb: Likewise.
+ 	* libgnat/s-pack58.ads: Likewise.
+ 	* libgnat/s-pack59.adb: Likewise.
+ 	* libgnat/s-pack59.ads: Likewise.
+ 	* libgnat/s-pack60.adb: Likewise.
+ 	* libgnat/s-pack60.ads: Likewise.
+ 	* libgnat/s-pack61.adb: Likewise.
+ 	* libgnat/s-pack61.ads: Likewise.
+ 	* libgnat/s-pack62.adb: Likewise.
+ 	* libgnat/s-pack62.ads: Likewise.
+ 	* libgnat/s-pack63.adb: Likewise.
+ 	* libgnat/s-pack63.ads: Likewise.
+ 	* libgnat/s-pack65.adb: Likewise.
+ 	* libgnat/s-pack65.ads: Likewise.
+ 	* libgnat/s-pack66.adb: Likewise.
+ 	* libgnat/s-pack66.ads: Likewise.
+ 	* libgnat/s-pack67.adb: Likewise.
+ 	* libgnat/s-pack67.ads: Likewise.
+ 	* libgnat/s-pack68.adb: Likewise.
+ 	* libgnat/s-pack68.ads: Likewise.
+ 	* libgnat/s-pack69.adb: Likewise.
+ 	* libgnat/s-pack69.ads: Likewise.
+ 	* libgnat/s-pack70.adb: Likewise.
+ 	* libgnat/s-pack70.ads: Likewise.
+ 	* libgnat/s-pack71.adb: Likewise.
+ 	* libgnat/s-pack71.ads: Likewise.
+ 	* libgnat/s-pack72.adb: Likewise.
+ 	* libgnat/s-pack72.ads: Likewise.
+ 	* libgnat/s-pack73.adb: Likewise.
+ 	* libgnat/s-pack73.ads: Likewise.
+ 	* libgnat/s-pack74.adb: Likewise.
+ 	* libgnat/s-pack74.ads: Likewise.
+ 	* libgnat/s-pack75.adb: Likewise.
+ 	* libgnat/s-pack75.ads: Likewise.
+ 	* libgnat/s-pack76.adb: Likewise.
+ 	* libgnat/s-pack76.ads: Likewise.
+ 	* libgnat/s-pack77.adb: Likewise.
+ 	* libgnat/s-pack77.ads: Likewise.
+ 	* libgnat/s-pack78.adb: Likewise.
+ 	* libgnat/s-pack78.ads: Likewise.
+ 	* libgnat/s-pack79.adb: Likewise.
+ 	* libgnat/s-pack79.ads: Likewise.
+ 	* libgnat/s-pack80.adb: Likewise.
+ 	* libgnat/s-pack80.ads: Likewise.
+ 	* libgnat/s-pack81.adb: Likewise.
+ 	* libgnat/s-pack81.ads: Likewise.
+ 	* libgnat/s-pack82.adb: Likewise.
+ 	* libgnat/s-pack82.ads: Likewise.
+ 	* libgnat/s-pack83.adb: Likewise.
+ 	* libgnat/s-pack83.ads: Likewise.
+ 	* libgnat/s-pack84.adb: Likewise.
+ 	* libgnat/s-pack84.ads: Likewise.
+ 	* libgnat/s-pack85.adb: Likewise.
+ 	* libgnat/s-pack85.ads: Likewise.
+ 	* libgnat/s-pack86.adb: Likewise.
+ 	* libgnat/s-pack86.ads: Likewise.
+ 	* libgnat/s-pack87.adb: Likewise.
+ 	* libgnat/s-pack87.ads: Likewise.
+ 	* libgnat/s-pack88.adb: Likewise.
+ 	* libgnat/s-pack88.ads: Likewise.
+ 	* libgnat/s-pack89.adb: Likewise.
+ 	* libgnat/s-pack89.ads: Likewise.
+ 	* libgnat/s-pack90.adb: Likewise.
+ 	* libgnat/s-pack90.ads: Likewise.
+ 	* libgnat/s-pack91.adb: Likewise.
+ 	* libgnat/s-pack91.ads: Likewise.
+ 	* libgnat/s-pack92.adb: Likewise.
+ 	* libgnat/s-pack92.ads: Likewise.
+ 	* libgnat/s-pack93.adb: Likewise.
+ 	* libgnat/s-pack93.ads: Likewise.
+ 	* libgnat/s-pack94.adb: Likewise.
+ 	* libgnat/s-pack94.ads: Likewise.
+ 	* libgnat/s-pack95.adb: Likewise.
+ 	* libgnat/s-pack95.ads: Likewise.
+ 	* libgnat/s-pack96.adb: Likewise.
+ 	* libgnat/s-pack96.ads: Likewise.
+ 	* libgnat/s-pack97.adb: Likewise.
+ 	* libgnat/s-pack97.ads: Likewise.
+ 	* libgnat/s-pack98.adb: Likewise.
+ 	* libgnat/s-pack98.ads: Likewise.
+ 	* libgnat/s-pack99.adb: Likewise.
+ 	* libgnat/s-pack99.ads: Likewise.
+ 	* libgnat/s-parame.adb: Likewise.
+ 	* libgnat/s-parame.ads: Likewise.
+ 	* libgnat/s-parame__ae653.ads: Likewise.
+ 	* libgnat/s-parame__hpux.ads: Likewise.
+ 	* libgnat/s-parame__rtems.adb: Likewise.
+ 	* libgnat/s-parame__vxworks.adb: Likewise.
+ 	* libgnat/s-parame__vxworks.ads: Likewise.
+ 	* libgnat/s-parint.adb: Likewise.
+ 	* libgnat/s-parint.ads: Likewise.
+ 	* libgnat/s-pooglo.adb: Likewise.
+ 	* libgnat/s-pooglo.ads: Likewise.
+ 	* libgnat/s-pooloc.adb: Likewise.
+ 	* libgnat/s-pooloc.ads: Likewise.
+ 	* libgnat/s-poosiz.adb: Likewise.
+ 	* libgnat/s-poosiz.ads: Likewise.
+ 	* libgnat/s-powflt.ads: Likewise.
+ 	* libgnat/s-powlfl.ads: Likewise.
+ 	* libgnat/s-powllf.ads: Likewise.
+ 	* libgnat/s-purexc.ads: Likewise.
+ 	* libgnat/s-putaim.adb: Likewise.
+ 	* libgnat/s-putaim.ads: Likewise.
+ 	* libgnat/s-putima.adb: Likewise.
+ 	* libgnat/s-putima.ads: Likewise.
+ 	* libgnat/s-rannum.adb: Likewise.
+ 	* libgnat/s-rannum.ads: Likewise.
+ 	* libgnat/s-ransee.adb: Likewise.
+ 	* libgnat/s-ransee.ads: Likewise.
+ 	* libgnat/s-regexp.adb: Likewise.
+ 	* libgnat/s-regexp.ads: Likewise.
+ 	* libgnat/s-regpat.adb: Likewise.
+ 	* libgnat/s-regpat.ads: Likewise.
+ 	* libgnat/s-resfil.adb: Likewise.
+ 	* libgnat/s-resfil.ads: Likewise.
+ 	* libgnat/s-restri.adb: Likewise.
+ 	* libgnat/s-restri.ads: Likewise.
+ 	* libgnat/s-rident.ads: Likewise.
+ 	* libgnat/s-rpc.adb: Likewise.
+ 	* libgnat/s-rpc.ads: Likewise.
+ 	* libgnat/s-scaval.adb: Likewise.
+ 	* libgnat/s-scaval.ads: Likewise.
+ 	* libgnat/s-scaval__128.adb: Likewise.
+ 	* libgnat/s-scaval__128.ads: Likewise.
+ 	* libgnat/s-secsta.adb: Likewise.
+ 	* libgnat/s-secsta.ads: Likewise.
+ 	* libgnat/s-sequio.adb: Likewise.
+ 	* libgnat/s-sequio.ads: Likewise.
+ 	* libgnat/s-shabig.ads: Likewise.
+ 	* libgnat/s-shasto.adb: Likewise.
+ 	* libgnat/s-shasto.ads: Likewise.
+ 	* libgnat/s-soflin.adb: Likewise.
+ 	* libgnat/s-soflin.ads: Likewise.
+ 	* libgnat/s-soliin.adb: Likewise.
+ 	* libgnat/s-soliin.ads: Likewise.
+ 	* libgnat/s-sopco3.adb: Likewise.
+ 	* libgnat/s-sopco3.ads: Likewise.
+ 	* libgnat/s-sopco4.adb: Likewise.
+ 	* libgnat/s-sopco4.ads: Likewise.
+ 	* libgnat/s-sopco5.adb: Likewise.
+ 	* libgnat/s-sopco5.ads: Likewise.
+ 	* libgnat/s-spsufi.adb: Likewise.
+ 	* libgnat/s-spsufi.ads: Likewise.
+ 	* libgnat/s-stache.adb: Likewise.
+ 	* libgnat/s-stache.ads: Likewise.
+ 	* libgnat/s-stalib.adb: Likewise.
+ 	* libgnat/s-stalib.ads: Likewise.
+ 	* libgnat/s-statxd.adb: Likewise.
+ 	* libgnat/s-statxd.ads: Likewise.
+ 	* libgnat/s-stausa.adb: Likewise.
+ 	* libgnat/s-stausa.ads: Likewise.
+ 	* libgnat/s-stchop.adb: Likewise.
+ 	* libgnat/s-stchop.ads: Likewise.
+ 	* libgnat/s-stchop__limit.ads: Likewise.
+ 	* libgnat/s-stchop__rtems.adb: Likewise.
+ 	* libgnat/s-stchop__vxworks.adb: Likewise.
+ 	* libgnat/s-stoele.adb: Likewise.
+ 	* libgnat/s-stoele.ads: Likewise.
+ 	* libgnat/s-stopoo.adb: Likewise.
+ 	* libgnat/s-stopoo.ads: Likewise.
+ 	* libgnat/s-stposu.adb: Likewise.
+ 	* libgnat/s-stposu.ads: Likewise.
+ 	* libgnat/s-stratt.adb: Likewise.
+ 	* libgnat/s-stratt.ads: Likewise.
+ 	* libgnat/s-strcom.adb: Likewise.
+ 	* libgnat/s-strcom.ads: Likewise.
+ 	* libgnat/s-strhas.adb: Likewise.
+ 	* libgnat/s-strhas.ads: Likewise.
+ 	* libgnat/s-string.adb: Likewise.
+ 	* libgnat/s-string.ads: Likewise.
+ 	* libgnat/s-strops.adb: Likewise.
+ 	* libgnat/s-strops.ads: Likewise.
+ 	* libgnat/s-ststop.adb: Likewise.
+ 	* libgnat/s-ststop.ads: Likewise.
+ 	* libgnat/s-tasloc.adb: Likewise.
+ 	* libgnat/s-tasloc.ads: Likewise.
+ 	* libgnat/s-thread.ads: Likewise.
+ 	* libgnat/s-thread__ae653.adb: Likewise.
+ 	* libgnat/s-traceb.adb: Likewise.
+ 	* libgnat/s-traceb.ads: Likewise.
+ 	* libgnat/s-traceb__hpux.adb: Likewise.
+ 	* libgnat/s-traceb__mastop.adb: Likewise.
+ 	* libgnat/s-traent.adb: Likewise.
+ 	* libgnat/s-traent.ads: Likewise.
+ 	* libgnat/s-trasym.adb: Likewise.
+ 	* libgnat/s-trasym.ads: Likewise.
+ 	* libgnat/s-trasym__dwarf.adb: Likewise.
+ 	* libgnat/s-tsmona.adb: Likewise.
+ 	* libgnat/s-tsmona__linux.adb: Likewise.
+ 	* libgnat/s-tsmona__mingw.adb: Likewise.
+ 	* libgnat/s-unstyp.ads: Likewise.
+ 	* libgnat/s-utf_32.adb: Likewise.
+ 	* libgnat/s-utf_32.ads: Likewise.
+ 	* libgnat/s-vade128.ads: Likewise.
+ 	* libgnat/s-vade32.ads: Likewise.
+ 	* libgnat/s-vade64.ads: Likewise.
+ 	* libgnat/s-vafi128.ads: Likewise.
+ 	* libgnat/s-vafi32.ads: Likewise.
+ 	* libgnat/s-vafi64.ads: Likewise.
+ 	* libgnat/s-valboo.adb: Likewise.
+ 	* libgnat/s-valboo.ads: Likewise.
+ 	* libgnat/s-valcha.adb: Likewise.
+ 	* libgnat/s-valcha.ads: Likewise.
+ 	* libgnat/s-valenu.adb: Likewise.
+ 	* libgnat/s-valenu.ads: Likewise.
+ 	* libgnat/s-valflt.ads: Likewise.
+ 	* libgnat/s-valint.adb: Likewise.
+ 	* libgnat/s-valint.ads: Likewise.
+ 	* libgnat/s-vallfl.ads: Likewise.
+ 	* libgnat/s-valllf.ads: Likewise.
+ 	* libgnat/s-vallli.adb: Likewise.
+ 	* libgnat/s-vallli.ads: Likewise.
+ 	* libgnat/s-valllli.ads: Likewise.
+ 	* libgnat/s-vallllu.ads: Likewise.
+ 	* libgnat/s-valllu.adb: Likewise.
+ 	* libgnat/s-valllu.ads: Likewise.
+ 	* libgnat/s-valrea.adb: Likewise.
+ 	* libgnat/s-valrea.ads: Likewise.
+ 	* libgnat/s-valued.adb: Likewise.
+ 	* libgnat/s-valued.ads: Likewise.
+ 	* libgnat/s-valuef.adb: Likewise.
+ 	* libgnat/s-valuef.ads: Likewise.
+ 	* libgnat/s-valuei.adb: Likewise.
+ 	* libgnat/s-valuei.ads: Likewise.
+ 	* libgnat/s-valuer.adb: Likewise.
+ 	* libgnat/s-valuer.ads: Likewise.
+ 	* libgnat/s-valueu.adb: Likewise.
+ 	* libgnat/s-valueu.ads: Likewise.
+ 	* libgnat/s-valuns.adb: Likewise.
+ 	* libgnat/s-valuns.ads: Likewise.
+ 	* libgnat/s-valuti.adb: Likewise.
+ 	* libgnat/s-valuti.ads: Likewise.
+ 	* libgnat/s-valwch.adb: Likewise.
+ 	* libgnat/s-valwch.ads: Likewise.
+ 	* libgnat/s-veboop.adb: Likewise.
+ 	* libgnat/s-veboop.ads: Likewise.
+ 	* libgnat/s-vector.ads: Likewise.
+ 	* libgnat/s-vercon.adb: Likewise.
+ 	* libgnat/s-vercon.ads: Likewise.
+ 	* libgnat/s-wchcnv.adb: Likewise.
+ 	* libgnat/s-wchcnv.ads: Likewise.
+ 	* libgnat/s-wchcon.adb: Likewise.
+ 	* libgnat/s-wchcon.ads: Likewise.
+ 	* libgnat/s-wchjis.adb: Likewise.
+ 	* libgnat/s-wchjis.ads: Likewise.
+ 	* libgnat/s-wchstw.adb: Likewise.
+ 	* libgnat/s-wchstw.ads: Likewise.
+ 	* libgnat/s-wchwts.adb: Likewise.
+ 	* libgnat/s-wchwts.ads: Likewise.
+ 	* libgnat/s-widboo.adb: Likewise.
+ 	* libgnat/s-widboo.ads: Likewise.
+ 	* libgnat/s-widcha.adb: Likewise.
+ 	* libgnat/s-widcha.ads: Likewise.
+ 	* libgnat/s-widenu.adb: Likewise.
+ 	* libgnat/s-widenu.ads: Likewise.
+ 	* libgnat/s-widint.ads: Likewise.
+ 	* libgnat/s-widlli.adb: Likewise.
+ 	* libgnat/s-widlli.ads: Likewise.
+ 	* libgnat/s-widllli.ads: Likewise.
+ 	* libgnat/s-widlllu.ads: Likewise.
+ 	* libgnat/s-widllu.adb: Likewise.
+ 	* libgnat/s-widllu.ads: Likewise.
+ 	* libgnat/s-widthi.adb: Likewise.
+ 	* libgnat/s-widthi.ads: Likewise.
+ 	* libgnat/s-widthu.adb: Likewise.
+ 	* libgnat/s-widthu.ads: Likewise.
+ 	* libgnat/s-widuns.ads: Likewise.
+ 	* libgnat/s-widwch.adb: Likewise.
+ 	* libgnat/s-widwch.ads: Likewise.
+ 	* libgnat/s-win32.ads: Likewise.
+ 	* libgnat/s-winext.ads: Likewise.
+ 	* libgnat/s-wwdcha.adb: Likewise.
+ 	* libgnat/s-wwdcha.ads: Likewise.
+ 	* libgnat/s-wwdenu.adb: Likewise.
+ 	* libgnat/s-wwdenu.ads: Likewise.
+ 	* libgnat/s-wwdwch.adb: Likewise.
+ 	* libgnat/s-wwdwch.ads: Likewise.
+ 	* libgnat/system-aix.ads: Likewise.
+ 	* libgnat/system-darwin-arm.ads: Likewise.
+ 	* libgnat/system-darwin-ppc.ads: Likewise.
+ 	* libgnat/system-darwin-x86.ads: Likewise.
+ 	* libgnat/system-djgpp.ads: Likewise.
+ 	* libgnat/system-dragonfly-x86_64.ads: Likewise.
+ 	* libgnat/system-freebsd.ads: Likewise.
+ 	* libgnat/system-hpux-ia64.ads: Likewise.
+ 	* libgnat/system-hpux.ads: Likewise.
+ 	* libgnat/system-linux-alpha.ads: Likewise.
+ 	* libgnat/system-linux-arm.ads: Likewise.
+ 	* libgnat/system-linux-hppa.ads: Likewise.
+ 	* libgnat/system-linux-ia64.ads: Likewise.
+ 	* libgnat/system-linux-m68k.ads: Likewise.
+ 	* libgnat/system-linux-mips.ads: Likewise.
+ 	* libgnat/system-linux-ppc.ads: Likewise.
+ 	* libgnat/system-linux-riscv.ads: Likewise.
+ 	* libgnat/system-linux-s390.ads: Likewise.
+ 	* libgnat/system-linux-sh4.ads: Likewise.
+ 	* libgnat/system-linux-sparc.ads: Likewise.
+ 	* libgnat/system-linux-x86.ads: Likewise.
+ 	* libgnat/system-lynxos178-ppc.ads: Likewise.
+ 	* libgnat/system-lynxos178-x86.ads: Likewise.
+ 	* libgnat/system-mingw.ads: Likewise.
+ 	* libgnat/system-qnx-aarch64.ads: Likewise.
+ 	* libgnat/system-rtems.ads: Likewise.
+ 	* libgnat/system-solaris-sparc.ads: Likewise.
+ 	* libgnat/system-solaris-x86.ads: Likewise.
+ 	* libgnat/system-vxworks-arm-rtp-smp.ads: Likewise.
+ 	* libgnat/system-vxworks-arm-rtp.ads: Likewise.
+ 	* libgnat/system-vxworks-arm.ads: Likewise.
+ 	* libgnat/system-vxworks-e500-kernel.ads: Likewise.
+ 	* libgnat/system-vxworks-e500-rtp-smp.ads: Likewise.
+ 	* libgnat/system-vxworks-e500-rtp.ads: Likewise.
+ 	* libgnat/system-vxworks-e500-vthread.ads: Likewise.
+ 	* libgnat/system-vxworks-ppc-kernel.ads: Likewise.
+ 	* libgnat/system-vxworks-ppc-ravenscar.ads: Likewise.
+ 	* libgnat/system-vxworks-ppc-rtp-smp.ads: Likewise.
+ 	* libgnat/system-vxworks-ppc-rtp.ads: Likewise.
+ 	* libgnat/system-vxworks-ppc-vthread.ads: Likewise.
+ 	* libgnat/system-vxworks-ppc.ads: Likewise.
+ 	* libgnat/system-vxworks-x86-kernel.ads: Likewise.
+ 	* libgnat/system-vxworks-x86-rtp-smp.ads: Likewise.
+ 	* libgnat/system-vxworks-x86-rtp.ads: Likewise.
+ 	* libgnat/system-vxworks-x86-vthread.ads: Likewise.
+ 	* libgnat/system-vxworks-x86.ads: Likewise.
+ 	* libgnat/system-vxworks7-aarch64-rtp-smp.ads: Likewise.
+ 	* libgnat/system-vxworks7-aarch64.ads: Likewise.
+ 	* libgnat/system-vxworks7-arm-rtp-smp.ads: Likewise.
+ 	* libgnat/system-vxworks7-arm.ads: Likewise.
+ 	* libgnat/system-vxworks7-e500-kernel.ads: Likewise.
+ 	* libgnat/system-vxworks7-e500-rtp-smp.ads: Likewise.
+ 	* libgnat/system-vxworks7-e500-rtp.ads: Likewise.
+ 	* libgnat/system-vxworks7-ppc-kernel.ads: Likewise.
+ 	* libgnat/system-vxworks7-ppc-rtp-smp.ads: Likewise.
+ 	* libgnat/system-vxworks7-ppc-rtp.ads: Likewise.
+ 	* libgnat/system-vxworks7-ppc64-kernel.ads: Likewise.
+ 	* libgnat/system-vxworks7-ppc64-rtp-smp.ads: Likewise.
+ 	* libgnat/system-vxworks7-x86-kernel.ads: Likewise.
+ 	* libgnat/system-vxworks7-x86-rtp-smp.ads: Likewise.
+ 	* libgnat/system-vxworks7-x86-rtp.ads: Likewise.
+ 	* libgnat/system-vxworks7-x86_64-kernel.ads: Likewise.
+ 	* libgnat/system-vxworks7-x86_64-rtp-smp.ads: Likewise.
+ 	* link.c: Likewise.
+ 	* live.adb: Likewise.
+ 	* live.ads: Likewise.
+ 	* locales.c: Likewise.
+ 	* make.adb: Likewise.
+ 	* make.ads: Likewise.
+ 	* make_util.adb: Likewise.
+ 	* make_util.ads: Likewise.
+ 	* makeusg.adb: Likewise.
+ 	* makeusg.ads: Likewise.
+ 	* mdll-fil.adb: Likewise.
+ 	* mdll-fil.ads: Likewise.
+ 	* mdll-utl.adb: Likewise.
+ 	* mdll-utl.ads: Likewise.
+ 	* mdll.adb: Likewise.
+ 	* mdll.ads: Likewise.
+ 	* mingw32.h: Likewise.
+ 	* mkdir.c: Likewise.
+ 	* namet-sp.adb: Likewise.
+ 	* namet-sp.ads: Likewise.
+ 	* namet.adb: Likewise.
+ 	* namet.ads: Likewise.
+ 	* namet.h: Likewise.
+ 	* nlists.adb: Likewise.
+ 	* nlists.ads: Likewise.
+ 	* nlists.h: Likewise.
+ 	* opt.adb: Likewise.
+ 	* opt.ads: Likewise.
+ 	* osint-b.adb: Likewise.
+ 	* osint-b.ads: Likewise.
+ 	* osint-c.adb: Likewise.
+ 	* osint-c.ads: Likewise.
+ 	* osint-l.adb: Likewise.
+ 	* osint-l.ads: Likewise.
+ 	* osint-m.adb: Likewise.
+ 	* osint-m.ads: Likewise.
+ 	* osint.adb: Likewise.
+ 	* osint.ads: Likewise.
+ 	* output.adb: Likewise.
+ 	* output.ads: Likewise.
+ 	* par-ch10.adb: Likewise.
+ 	* par-ch11.adb: Likewise.
+ 	* par-ch12.adb: Likewise.
+ 	* par-ch13.adb: Likewise.
+ 	* par-ch2.adb: Likewise.
+ 	* par-ch3.adb: Likewise.
+ 	* par-ch4.adb: Likewise.
+ 	* par-ch5.adb: Likewise.
+ 	* par-ch6.adb: Likewise.
+ 	* par-ch7.adb: Likewise.
+ 	* par-ch8.adb: Likewise.
+ 	* par-ch9.adb: Likewise.
+ 	* par-endh.adb: Likewise.
+ 	* par-labl.adb: Likewise.
+ 	* par-load.adb: Likewise.
+ 	* par-prag.adb: Likewise.
+ 	* par-sync.adb: Likewise.
+ 	* par-tchk.adb: Likewise.
+ 	* par-util.adb: Likewise.
+ 	* par.adb: Likewise.
+ 	* par.ads: Likewise.
+ 	* par_sco.adb: Likewise.
+ 	* par_sco.ads: Likewise.
+ 	* pprint.adb: Likewise.
+ 	* pprint.ads: Likewise.
+ 	* prep.adb: Likewise.
+ 	* prep.ads: Likewise.
+ 	* prepcomp.adb: Likewise.
+ 	* prepcomp.ads: Likewise.
+ 	* put_scos.adb: Likewise.
+ 	* put_scos.ads: Likewise.
+ 	* raise-gcc.c: Likewise.
+ 	* raise.c: Likewise.
+ 	* raise.h: Likewise.
+ 	* repinfo-input.adb: Likewise.
+ 	* repinfo-input.ads: Likewise.
+ 	* repinfo.adb: Likewise.
+ 	* repinfo.ads: Likewise.
+ 	* repinfo.h: Likewise.
+ 	* restrict.adb: Likewise.
+ 	* restrict.ads: Likewise.
+ 	* rident.ads: Likewise.
+ 	* rtfinal.c: Likewise.
+ 	* rtinit.c: Likewise.
+ 	* rtsfind.adb: Likewise.
+ 	* rtsfind.ads: Likewise.
+ 	* runtime.h: Likewise.
+ 	* s-oscons-tmplt.c: Likewise.
+ 	* sa_messages.adb: Likewise.
+ 	* sa_messages.ads: Likewise.
+ 	* scans.adb: Likewise.
+ 	* scans.ads: Likewise.
+ 	* scil_ll.adb: Likewise.
+ 	* scil_ll.ads: Likewise.
+ 	* scn.adb: Likewise.
+ 	* scn.ads: Likewise.
+ 	* scng.adb: Likewise.
+ 	* scng.ads: Likewise.
+ 	* scos.adb: Likewise.
+ 	* scos.ads: Likewise.
+ 	* scos.h: Likewise.
+ 	* sdefault.ads: Likewise.
+ 	* seh_init.c: Likewise.
+ 	* sem.adb: Likewise.
+ 	* sem.ads: Likewise.
+ 	* sem_aggr.adb: Likewise.
+ 	* sem_aggr.ads: Likewise.
+ 	* sem_attr.adb: Likewise.
+ 	* sem_attr.ads: Likewise.
+ 	* sem_aux.adb: Likewise.
+ 	* sem_aux.ads: Likewise.
+ 	* sem_case.adb: Likewise.
+ 	* sem_case.ads: Likewise.
+ 	* sem_cat.adb: Likewise.
+ 	* sem_cat.ads: Likewise.
+ 	* sem_ch10.adb: Likewise.
+ 	* sem_ch10.ads: Likewise.
+ 	* sem_ch11.adb: Likewise.
+ 	* sem_ch11.ads: Likewise.
+ 	* sem_ch12.adb: Likewise.
+ 	* sem_ch12.ads: Likewise.
+ 	* sem_ch13.adb: Likewise.
+ 	* sem_ch13.ads: Likewise.
+ 	* sem_ch2.adb: Likewise.
+ 	* sem_ch2.ads: Likewise.
+ 	* sem_ch3.adb: Likewise.
+ 	* sem_ch3.ads: Likewise.
+ 	* sem_ch4.adb: Likewise.
+ 	* sem_ch4.ads: Likewise.
+ 	* sem_ch5.adb: Likewise.
+ 	* sem_ch5.ads: Likewise.
+ 	* sem_ch6.adb: Likewise.
+ 	* sem_ch6.ads: Likewise.
+ 	* sem_ch7.adb: Likewise.
+ 	* sem_ch7.ads: Likewise.
+ 	* sem_ch8.adb: Likewise.
+ 	* sem_ch8.ads: Likewise.
+ 	* sem_ch9.adb: Likewise.
+ 	* sem_ch9.ads: Likewise.
+ 	* sem_dim.adb: Likewise.
+ 	* sem_dim.ads: Likewise.
+ 	* sem_disp.adb: Likewise.
+ 	* sem_disp.ads: Likewise.
+ 	* sem_dist.adb: Likewise.
+ 	* sem_dist.ads: Likewise.
+ 	* sem_elab.adb: Likewise.
+ 	* sem_elab.ads: Likewise.
+ 	* sem_elim.adb: Likewise.
+ 	* sem_elim.ads: Likewise.
+ 	* sem_eval.adb: Likewise.
+ 	* sem_eval.ads: Likewise.
+ 	* sem_intr.adb: Likewise.
+ 	* sem_intr.ads: Likewise.
+ 	* sem_mech.adb: Likewise.
+ 	* sem_mech.ads: Likewise.
+ 	* sem_prag.adb: Likewise.
+ 	* sem_prag.ads: Likewise.
+ 	* sem_res.adb: Likewise.
+ 	* sem_res.ads: Likewise.
+ 	* sem_scil.adb: Likewise.
+ 	* sem_scil.ads: Likewise.
+ 	* sem_smem.adb: Likewise.
+ 	* sem_smem.ads: Likewise.
+ 	* sem_type.adb: Likewise.
+ 	* sem_type.ads: Likewise.
+ 	* sem_util.adb: Likewise.
+ 	* sem_util.ads: Likewise.
+ 	* sem_warn.adb: Likewise.
+ 	* sem_warn.ads: Likewise.
+ 	* set_targ.adb: Likewise.
+ 	* set_targ.ads: Likewise.
+ 	* sfn_scan.adb: Likewise.
+ 	* sfn_scan.ads: Likewise.
+ 	* sigtramp-armdroid.c: Likewise.
+ 	* sigtramp-ios.c: Likewise.
+ 	* sigtramp-qnx.c: Likewise.
+ 	* sigtramp-vxworks.c: Likewise.
+ 	* sigtramp.h: Likewise.
+ 	* sinfo-cn.adb: Likewise.
+ 	* sinfo-cn.ads: Likewise.
+ 	* sinfo.adb: Likewise.
+ 	* sinfo.ads: Likewise.
+ 	* sinput-c.adb: Likewise.
+ 	* sinput-c.ads: Likewise.
+ 	* sinput-d.adb: Likewise.
+ 	* sinput-d.ads: Likewise.
+ 	* sinput-l.adb: Likewise.
+ 	* sinput-l.ads: Likewise.
+ 	* sinput.adb: Likewise.
+ 	* sinput.ads: Likewise.
+ 	* snames.adb-tmpl: Likewise.
+ 	* snames.ads-tmpl: Likewise.
+ 	* socket.c: Likewise.
+ 	* spark_xrefs.adb: Likewise.
+ 	* spark_xrefs.ads: Likewise.
+ 	* sprint.adb: Likewise.
+ 	* sprint.ads: Likewise.
+ 	* stand.ads: Likewise.
+ 	* stringt.adb: Likewise.
+ 	* stringt.ads: Likewise.
+ 	* stringt.h: Likewise.
+ 	* style.adb: Likewise.
+ 	* style.ads: Likewise.
+ 	* styleg.adb: Likewise.
+ 	* styleg.ads: Likewise.
+ 	* stylesw.adb: Likewise.
+ 	* stylesw.ads: Likewise.
+ 	* switch-b.adb: Likewise.
+ 	* switch-b.ads: Likewise.
+ 	* switch-c.adb: Likewise.
+ 	* switch-c.ads: Likewise.
+ 	* switch-m.adb: Likewise.
+ 	* switch-m.ads: Likewise.
+ 	* switch.adb: Likewise.
+ 	* switch.ads: Likewise.
+ 	* sysdep.c: Likewise.
+ 	* table.adb: Likewise.
+ 	* table.ads: Likewise.
+ 	* targext.c: Likewise.
+ 	* targparm.adb: Likewise.
+ 	* targparm.ads: Likewise.
+ 	* tbuild.adb: Likewise.
+ 	* tbuild.ads: Likewise.
+ 	* tempdir.adb: Likewise.
+ 	* tempdir.ads: Likewise.
+ 	* terminals.c: Likewise.
+ 	* tracebak.c: Likewise.
+ 	* treepr.adb: Likewise.
+ 	* treepr.ads: Likewise.
+ 	* ttypes.ads: Likewise.
+ 	* types.adb: Likewise.
+ 	* types.ads: Likewise.
+ 	* types.h: Likewise.
+ 	* uintp.adb: Likewise.
+ 	* uintp.ads: Likewise.
+ 	* uintp.h: Likewise.
+ 	* uname.adb: Likewise.
+ 	* uname.ads: Likewise.
+ 	* urealp.adb: Likewise.
+ 	* urealp.ads: Likewise.
+ 	* urealp.h: Likewise.
+ 	* usage.adb: Likewise.
+ 	* usage.ads: Likewise.
+ 	* validsw.adb: Likewise.
+ 	* validsw.ads: Likewise.
+ 	* vast.adb: Likewise.
+ 	* vast.ads: Likewise.
+ 	* warnsw.adb: Likewise.
+ 	* warnsw.ads: Likewise.
+ 	* widechar.adb: Likewise.
+ 	* widechar.ads: Likewise.
+ 	* xeinfo.adb: Likewise.
+ 	* xnmake.adb: Likewise.
+ 	* xoscons.adb: Likewise.
+ 	* xr_tabls.adb: Likewise.
+ 	* xr_tabls.ads: Likewise.
+ 	* xref_lib.adb: Likewise.
+ 	* xref_lib.ads: Likewise.
+ 	* xsinfo.adb: Likewise.
+ 	* xsnamest.adb: Likewise.
+ 	* xtreeprs.adb: Likewise.
+ 	* xutil.adb: Likewise.
+ 	* xutil.ads: Likewise.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_dist.adb (Build_From_Any_Call): Remove initial value for
+ 	Fnam; fix style.
+ 	(Build_To_Any_Call): Remove initial value for Fnam.
+ 	(Build_TypeCode_Call): Likewise.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* checks.adb, exp_aggr.adb, exp_attr.adb, exp_ch6.adb,
+ 	exp_disp.adb, exp_imgv.adb, exp_util.adb, sem_attr.adb,
+ 	sem_ch13.adb, sem_ch8.adb, sem_eval.adb, sem_scil.adb,
+ 	sem_util.adb: Replace calls to RTE with Is_RTE.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch4.adb (Try_Object_Operation): Reuse local constant.
+ 
+ 2021-05-03  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_ch4.adb (Try_Object_Operation): When a prefixed call is
+ 	overloaded and illegal, and the All_Errors flag is off, generate
+ 	an error message if the re-analysis of some candidate
+ 	interpretation fails to produce one.
+ 
+ 2021-05-03  Dmitriy Anisimkov  <anisimko@adacore.com>
+ 
+ 	* libgnat/g-casuti.adb: Replace with "pragma No_Body".
+ 	* libgnat/g-casuti.ads: Replace with a package renaming.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_attr.adb (Check_Program_Unit): Fix references to
+ 	Concurrent_Kind and Is_Concurrent_Type; avoid repeated calls to
+ 	Entity.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_attr.adb (Check_Program_Unit): Replace tests for Task_Kind
+ 	and Protected_Kind with a collective test for Concurrent_Kind;
+ 	likewise, replace calls to Is_Task_Type and Is_Protected_Type
+ 	with a collective call to Is_Concurrent_Type; simplify into a
+ 	single membership test; add missing Entry_Kind alternative.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_aggr.adb (Resolve_Record_Aggregate): Fix casing in error
+ 	message.
+ 	* sem_ch3.adb (Add_Internal_Interface_Entities): Fix unbalanced
+ 	parens.
+ 	* sem_elim.adb (Eliminate_Error_Msg): Add insertion character.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* freeze.adb (Freeze_Profile): Replace Error_Msg_NE with
+ 	Error_Msg_N; change to continuation message.
+ 	* sem_cat.adb, sem_ch10.adb, sem_ch12.adb, sem_ch5.adb: Replace
+ 	calls to Error_Msg_NE with calls to Error_Msg_N.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_disp.adb, sem_aggr.adb, sem_cat.adb, sem_ch10.adb,
+ 	sem_ch12.adb, sem_ch3.adb, sem_ch4.adb, sem_ch5.adb,
+ 	sem_ch6.adb, sem_ch8.adb, sem_ch9.adb, sem_prag.adb,
+ 	sem_res.adb: Remove extra leading and trailing space in error
+ 	messages.
+ 
+ 2021-05-03  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_prag.adb (Set_Exported): Do not warn on exporting a type.
+ 
+ 2021-05-03  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_warn.adb (Check_References): Do not emit warning on a
+ 	selected component when enclosing type has no discriminant and
+ 	type of component has partial initialization.
+ 
+ 2021-05-03  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* contracts.adb (Build_Postconditions_Procedure): Remove
+ 	internally generated if statement used to control finalization
+ 	actions.
+ 	* exp_ch6.adb (Add_Return, Expand_Non_Function_Return,
+ 	Expand_Simple_Function_Return): Add if statement around
+ 	_postconditions to control finalization.
+ 	* exp_ch7.adb (Build_Finalizer): Likewise.
+ 	* sem_prag.adb (Find_Related_Declaration_Or_Body): Add case to
+ 	handle Context itself being a handled sequence of statements.
+ 
+ 2021-05-03  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* sem_util.adb (In_Return_Value): Modified to detect when
+ 	implicit dereference is specified on the return type of a
+ 	function call within the expression being checked.
+ 
+ 2021-05-03  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_aggr.adb (Expand_Array_Aggregate): If the parent node of
+ 	the aggregate is a subprogram call there is no target in which
+ 	to build the aggregate, and it has to be expanded into component
+ 	assignments.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_prag.adb (Expand_Pragma_CUDA_Execute): Refill comments;
+ 	remove periods after single-line comments; use procedural
+ 	variant of Next_Entity.
+ 	* gnat_cuda.adb: Refill comments; remove periods after
+ 	single-line comments; replace calls to UI_From_Int with
+ 	constants; change iteration bounds so they match the comments.
+ 	* sem_prag.adb (Analyze_Pragma): Add checks for malformed pragma
+ 	CUDA_Kernel aggregate; simplify processing of pragma CUDA_Global
+ 	with Check_Arg_Count; sync comment with code for CUDA_Global.
+ 
+ 2021-05-03  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* tbuild.adb (Make_Implicit_Loop_Statement): Disable restriction
+ 	checking on dead paths.
+ 
+ 2021-05-03  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_util.adb (Check_Result_And_Post_State): Replace custom
+ 	Has_In_Out_Parameter with existing Has_Out_Or_In_Out_Parameter
+ 	flag which corresponds exactly to what we need.
+ 
+ 2021-05-03  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/a-ztcoio.adb: Remove unused with clause.
+ 
+ 2021-05-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch13.adb (Build_Predicate_Functions): Fix typo in comment.
+ 	(Resolve_Aspect_Expressions): Fix typo in comment; remove
+ 	redundant check for no aspects; simplify with Discard_Node.
+ 
+ 2021-05-03  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_util.adb (Build_Constrained_Itype): Remove prior patch,
+ 	issue is better handled in Sem_Ch13.Build_Predicate_Functions.
+ 	* sem_ch13.adb (Build_Predicate_Functions): Do not build
+ 	predicate function for an Itype with a defined
+ 	Predicated_Parent, even if that designated parent does not yet
+ 	have a Predicate_Function. This can happen in instance bodies
+ 	nested within a generic unit.
+ 
+ 2021-04-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_attr.adb (Expand_N_Attribute_Reference)
+ 	<Attribute_Max_Size_In_Storage_Elements>: Apply the checks for
+ 	universal integer contexts only in the default case.
+ 	* exp_ch4.adb (Get_Size_For_Range): Move to library level.
+ 	(Expand_N_Type_Conversion): If the operand has Universal_Integer
+ 	type and the conversion requires an overflow check, try to do an
+ 	intermediate conversion to a narrower type.
+ 
+ 2021-04-29  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_ch3.adb (Check_Anonymous_Access_Component): Factor out
+ 	core processing of Check_Anonymous_Access_Components.
+ 	(Check_Anonymous_Access_Components): Call
+ 	Check_Anonymous_Access_Component.
+ 	(Process_Discriminants): Call Check_Anonymous_Access_Component.
+ 	* freeze.adb (Freeze_Record_Type): Code cleanups and add more tree
+ 	checking to handle changes in sem_ch3.adb.
+ 	* sem_ch8.adb (Find_Type): Remove special case for access
+ 	discriminant in task types, these are now supported.
+ 
+ 2021-04-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* exp_ch4.adb (Expand_Compare_Minimize_Eliminate_Overflow): Remove
+ 	entry condition.
+ 	(Expand_N_In): Call Minimized_Eliminated_Overflow_Check on the left
+ 	operand before doing the special overflow expansion.
+ 	(Expand_N_Op_Eq): Likewise.
+ 	(Expand_N_Op_Ge): Likewise.
+ 	(Expand_N_Op_Gt): Likewise.
+ 	(Expand_N_Op_Le): Likewise.
+ 	(Expand_N_Op_Lt): Likewise.
+ 	(Expand_N_Op_Ne): Likewise.
+ 	(Minimized_Eliminated_Overflow_Check): Return False for Minimized
+ 	if the size of the type is greater than that of Long_Long_Integer.
+ 
+ 2021-04-29  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_ch5.adb (Expand_N_If_Statement): Only perform the
+ 	simplification on return True/False for internal nodes when
+ 	-fpreserve-control-flow is not set.
+ 
+ 2021-04-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_attr.adb (Eval_Attribute) <Attribute_Machine>: Use
+ 	Round_Even instead of Round in the call to the Machine routine.
+ 
+ 2021-04-29  Bob Duff  <duff@adacore.com>
+ 
+ 	* sem_attr.adb (Analyze_Attribute): Change "$" to "&".
+ 	Otherwise, Errout will trip over an uninitialized (invalid)
+ 	variable (Error_Msg_Unit_1).
+ 
+ 2021-04-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-valuer.adb (Scan_Decimal_Digits): Set Extra to zero
+ 	when the precision limit is reached by means of trailing zeros
+ 	and prevent it from being overwritten later.
+ 
+ 2021-04-29  Yannick Moy  <moy@adacore.com>
+ 
+ 	* errout.adb (Output_Messages): Insert SGR strings where needed.
+ 	* erroutc.adb (Output_Message_Txt): Insert SGR strings where
+ 	needed in the text of the message itself.
+ 	(Output_Msg_Text): Allow for style message not to start
+ 	with (style).
+ 	* erroutc.ads: Add new constants and functions to control colors
+ 	in messages output to the terminal. Add variable Use_SGR_Control
+ 	that should be set to True for using SGR color control strings.
+ 
+ 2021-04-29  Yannick Moy  <moy@adacore.com>
+ 
+ 	* sem_eval.adb (Check_Non_Static_Context_For_Overflow): Apply
+ 	compile-time checking for overflows in non-static contexts
+ 	including inlined code.
+ 	(Eval_Arithmetic_Op): Use the new procedure.
+ 	(Eval_Unary_Op, Eval_Op_Expon): Add call to the new procedure.
+ 
+ 2021-04-29  Justin Squirek  <squirek@adacore.com>
+ 
+ 	* checks.adb (Apply_Type_Conversion_Checks): Move out constraint
+ 	check generation, and add case for general access types with
+ 	constraints.
+ 	(Make_Discriminant_Constraint_Check): Created to centralize
+ 	generation of constraint checks for stored discriminants.
+ 
+ 2021-04-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat1drv.adb (Adjust_Global_Switches): Force a 32-bit Duration
+ 	type if the maximum integer size is lower than 64 bits.
+ 
+ 2021-04-29  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* Makefile.rtl (ADA_EXCLUDE_SRCS): Remove unused files.
+ 	(ADA_INCLUDE_SRCS): Remove libgnat/system.ads
+ 
+ 2021-04-29  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_aggr.adb (Collect_Initialization_Statements): Removed.
+ 	(Convert_Aggr_In_Object_Decl, Expand_Array_Aggregate): Fix
+ 	creation and insertion of Initialization_Statements.  Do not set
+ 	Initialization_Statements when a transient scope is involved.
+ 	Move processing of Array_Slice here.  Ensure that an object with
+ 	an Array_Slice call gets its array component initialized.  Add
+ 	comments.
+ 	* exp_ch7.adb: Update comments.
+ 	(Store_Actions_In_Scope): Deal properly with an empty list which
+ 	might now be generated by Convert_Aggr_In_Object_Decl.
+ 	* exp_ch3.adb: Update comments.
+ 	(Expand_N_Object_Declaration): Remove processing of Array_Slice.
+ 
+ 2021-04-29  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_ch8.adb (Analyze_Object_Renaming): Update check for
+ 	AI12-0401.
+ 
+ 2021-04-29  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* libgnat/s-stoele.ads (Storage_Offset): Cleanup comment.
+ 
+ 2021-04-29  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* exp_util.adb (Add_Own_DIC): Relax the suppression of adding a
+ 	DIC Check pragma that's done for abstract types by still doing
+ 	it in the case where GNATprove_Mode is set.
+ 
+ 2021-04-29  Joel Brobecker  <brobecker@adacore.com>
+ 
+ 	* Makefile.rtl (ADA_EXCLUDE_SRCS): Remove s-gcc.adb, s-gcc.ads,
+ 	s-gccdiv.adb, s-gccdiv.ads, s-gccshi.adb and s-gccshi.ads.
+ 
+ 2021-04-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* layout.adb (Layout_Type): Refine type of a local variable with
+ 	the required size of object from Int to Pos (it is initialized
+ 	with 8 and only multiplied by 2); fix unbalanced parens in
+ 	comment.
+ 
+ 2021-04-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* eval_fat.adb (Succ): Use Ureal_Half in a couple of places.
+ 
+ 2021-04-29  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* sem_util.adb (Build_Constrained_Itype): Inhibit the generation
+ 	of predicate functions for this Itype, which is created for an
+ 	aggregate of a discriminated type. The object to which the
+ 	aggregate is assigned, e.g a writable actual parameter, will
+ 	apply the predicates if any are inherited from the base type.
+ 
+ 2021-04-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_cat.adb (Set_Categorization_From_Pragmas): Remove special
+ 	case for generic child units; remove optimization for empty list
+ 	of pragmas; properly restore visibility.
+ 
+ 2021-04-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_elab.adb (Process_SPARK_Instantiation): Fix typo in
+ 	comment.
+ 	* sem_prag.adb (Find_Related_Context): Add missing reference to
+ 	No_Caching in the comment; handle pragmas on compilation units.
+ 
+ 2021-04-29  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* doc/gnat_rm/implementation_defined_attributes.rst: Change all
+ 	occurrences of "permissible prefix" to "allowed prefix", for
+ 	consistency.
+ 	* gnat_rm.texi: Regenerate.
+ 
+ 2021-04-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* eval_fat.adb (Succ): Add a special case for zero if the type does
+ 	not support denormalized numbers.  Always use the canonical formula
+ 	in other cases and add commentary throughout the function.
+ 
+ 2021-04-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-fatgen.adb: Remove with clause for Interfaces and
+ 	use type clauses for Interfaces.Unsigned_{16,32,64}.
+ 	(Small16): Remove.
+ 	(Small32): Likewise
+ 	(Small64): Likewise.
+ 	(Small80): Likewise.
+ 	(Tiny16): Likewise.
+ 	(Tiny32): Likewise.
+ 	(Tiny64): Likewise.
+ 	(Tiny80): Likewise.
+ 	(Siz): Always use 16.
+ 	(NR): New constant.
+ 	(Rep_Last): Use it in the computation.
+ 	(Exp_Factor): Remove special case for 80-bit.
+ 	(Sign_Mask): Likewise.
+ 	(Finite_Succ): New function implementing the Succ attribute for
+ 	finite numbers.
+ 	(Pred): Rewrite in terms of Finite_Succ.
+ 	(Succ): Likewise.
+ 
+ 2021-04-29  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* debug_a.adb (Debug_Output_Astring): Remove obsolete comment.
+ 
+ 2021-04-29  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_attr.adb (Check_Image_Type): Protect against empty
+ 	Image_Type.
+ 
+ 2021-04-29  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* libgnat/a-nbnbin.ads (From_Universal_Image): New.
+ 	(Big_Integer): Update definition.
+ 	* libgnat/a-nbnbre.ads, libgnat/a-nbnbre.adb
+ 	(From_Universal_Image): New.
+ 	(From_String): Remove alternate body, replaced by
+ 	From_Universal_Image.
+ 	(Big_Real): Update definition.
+ 
+ 2021-04-29  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_ch8.adb (Find_Type): Check the No_Obsolescent_Features
+ 	restriction for 'Class applied to an untagged incomplete
+ 	type (when Ada_Version >= Ada_2005).  Remove disabling of the
+ 	warning message for such usage, along with the ??? comment,
+ 	which no longer applies (because the -gnatg switch no longer
+ 	sets Warn_On_Obsolescent_Feature).
+ 
+ 2021-04-29  Yannick Moy  <moy@adacore.com>
+ 
+ 	* errout.adb (Error_Msg_NEL): Extract span from node.
+ 	(First_And_Last_Nodes): Use spans for subtype indications and
+ 	attribute definition clauses.
+ 	(Write_Source_Code_Lines): Fix for tabulation characters. Change
+ 	output for large spans to skip intermediate lines.
+ 	* sem_case.adb (Check_Choice_Set): Report duplicate choice on
+ 	the Original_Node for the case.
+ 	(Generic_Check_Choices): Set the Original_Node for the rewritten
+ 	case, so that the subtree used in spans has the correct
+ 	locations.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch13.adb, sem_util.adb: Fix style.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* nlists.ads (List_Length): Adapt comment to match the
+ 	behaviour.
+ 
+ 2021-04-28  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_eval.adb (Eval_Selected_Component): Only consider compile
+ 	time known aggregates.
+ 
+ 2021-04-28  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-fatgen.adb: Add use clause for Interfaces.Unsigned_16
+ 	and Interfaces.Unsigned_32.
+ 	(Small16): New constant.
+ 	(Small32): Likewise.
+ 	(Small64): Likewise.
+ 	(Small80): Likewise.
+ 	(Pred): Declare a local overlay for Small and return it negated
+ 	for zero if the type does not support denormalized numbers.
+ 	(Succ): Likewise, but return it directly.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* inline.adb (Formal_Is_Used_Once): Refine type of the counter
+ 	variable; remove redundant assignment.
+ 
+ 2021-04-28  Patrick Bernardi  <bernardi@adacore.com>
+ 
+ 	* libgnarl/s-interr.adb (Install_Restricted_Handlers): Change
+ 	Prio parameter to type Interrupt_Priority.
+ 	* libgnarl/s-interr.ads (Install_Restricted_Handlers): Likewise.
+ 	* libgnarl/s-interr__dummy.adb (Install_Restricted_Handlers):
+ 	Likewise.
+ 	* libgnarl/s-interr__hwint.adb (Install_Restricted_Handlers):
+ 	Likewise.
+ 	* libgnarl/s-interr__sigaction.adb (Install_Restricted_Handlers):
+ 	Likewise.
+ 	* libgnarl/s-interr__vxworks.adb (Install_Restricted_Handlers):
+ 	Likewise.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_type.ads (Write_Interp_Ref): Removed; no longer needed.
+ 	* sem_type.adb (Headers): Removed; now the hash table is
+ 	directly in the Interp_Map alone.
+ 	(Interp_Map): Now an instance of the GNAT.HTable.Simple_HTable.
+ 	(Last_Overloaded): New variable to emulate Interp_Map.Last.
+ 	(Add_One_Interp): Adapt to new data structure.
+ 	(Get_First_Interp): Likewise.
+ 	(Hash): Likewise.
+ 	(Init_Interp_Tables): Likewise.
+ 	(New_Interps): Likewise.
+ 	(Save_Interps): Likewise; handle O_N variable like in
+ 	Get_First_Interp.
+ 	(Write_Interp_Ref): Removed; no longer needed.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* inline.adb (Do_Reset_Calls): Now an instance of Traverse_Proc.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch13.adb (Analyze_Aspect_Static): Reuse
+ 	Error_Msg_Ada_2020_Feature for aspect Static.
+ 	(Analyze_One_Aspect): Likewise for aspect Full_Access.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch13.adb (Analyze_Aspect_Static): Refactor to have a
+ 	single check for the expression being present; adapt comments.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch13.adb (Analyze_Aspect_Static): Use aspect name in the
+ 	error message.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_eval.adb (Eval_Selected_Component): Simplify with
+ 	Unqualify.
+ 
+ 2021-04-28  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-valrea.adb (Fast2Sum): New function.
+ 	(Integer_to_Real): Use it in an iterated addition with exact
+ 	error handling for the case where an extra digit is needed.
+ 	Move local variable now only used in the exponentiation case.
+ 
+ 2021-04-28  Yannick Moy  <moy@adacore.com>
+ 
+ 	* errout.adb: (Error_Msg_Internal): Use span instead of
+ 	location.
+ 	(Error_Msg, Error_Msg_NEL): Add versions with span parameter.
+ 	(Error_Msg_F, Error_Msg_FE, Error_Msg_N, Error_Msg_NE,
+ 	Error_Msg_NW): Retrieve span from node.
+ 	(First_Node): Use the new First_And_Last_Nodes.
+ 	(First_And_Last_Nodes): Expand on previous First_Node. Apply to
+ 	other nodes than expressions.
+ 	(First_Sloc): Protect against inconsistent locations.
+ 	(Last_Node): New function based on First_And_Last_Nodes.
+ 	(Last_Sloc): New function similar to First_Sloc.
+ 	(Output_Messages): Update output when -gnatdF is used. Use
+ 	character ~ for making the span visible, similar to what is done
+ 	in GCC and Clang.
+ 	* errout.ads (Error_Msg, Error_Msg_NEL): Add versions with span
+ 	parameter.
+ 	(First_And_Last_Nodes, Last_Node, Last_Sloc): New subprograms.
+ 	* erroutc.adb: Adapt to Sptr field being a span.
+ 	* erroutc.ads (Error_Msg_Object): Change field Sptr from
+ 	location to span.
+ 	* errutil.adb: Adapt to Sptr field being a span.
+ 	* freeze.adb: Use Errout reporting procedures for nodes to get
+ 	spans.
+ 	* par-ch3.adb: Likewise.
+ 	* par-prag.adb: Likewise.
+ 	* par-util.adb: Likewise.
+ 	* sem_case.adb: Likewise.
+ 	* sem_ch13.adb: Likewise.
+ 	* sem_ch3.adb: Likewise.
+ 	* sem_prag.adb: Likewise.
+ 	* types.ads: (Source_Span): New type for spans.
+ 	(To_Span): Basic constructors for spans.
+ 
+ 2021-04-28  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* einfo.adb (Discriminant_Constraint): Refine assertion.
+ 
+ 2021-04-28  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* exp_util.adb (Add_Own_DIC): Suppress expansion of a DIC pragma
+ 	when the pragma occurs for an abstract type, since that could
+ 	lead to a call to an abstract function, and such DIC checks can
+ 	never be performed for abstract types in any case.
+ 	* sem_disp.adb (Check_Dispatching_Context): Suppress the check
+ 	for illegal calls to abstract subprograms when the call occurs
+ 	within a Default_Initial_Condition aspect and the call is passed
+ 	the current instance as an actual.
+ 	(Has_Controlling_Current_Instance_Actual): New function to test
+ 	a call to see if it has any actuals given by direct references
+ 	to a current instance of a type
+ 	* sem_res.adb (Resolve_Actuals): Issue an error for a call
+ 	within a DIC aspect to a nonprimitive subprogram with an actual
+ 	given by the name of the DIC type's current instance (which will
+ 	show up as a reference to the formal parameter of a DIC
+ 	procedure).
+ 
+ 2021-04-28  Ed Schonberg  <schonberg@adacore.com>
+ 
+ 	* exp_ch3.adb (Expand_Record_Extension): Set Parent_Subtype on
+ 	the type extension when within a generic unit, even though
+ 	expansion is disabled, to allow for proper resolution of
+ 	selected components inherited from an ancestor.
+ 
+ 2021-04-28  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_aux.adb (Is_Limited_Type): Fix logic to check Is_Type
+ 	before assuming Ent is a typo.
+ 	* sem_ch4.adb (Analyze_Expression_With_Actions): Update
+ 	comments, minor reformatting.
+ 	* sem_res.adb (Resolve_Declare_Expression): Add protection
+ 	against no type.
+ 
+ 2021-04-28  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_ch6.adb: Fix typo in comment.
+ 	* sem_ch3.adb (Access_Subprogram_Declaration): Add missing call
+ 	to Create_Extra_Formals. Remove obsolete bootstrap check.
+ 	* sem_eval.adb (Eval_Selected_Component): Simplify a
+ 	selected_component on an aggregate.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* fmap.ads (Reset_Tables): Remove outdated references to
+ 	GNSA/ASIS.
+ 	* sem_eval.ads (Initialize): Likewise.
+ 	* sem_type.adb (Headers): Remove initialization at elaboration.
+ 	* sem_type.ads (Init_Interp_Tables): Remove outdated reference
+ 	to gnatf.
+ 	* stringt.ads (Initialize): Fix style in comment.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_res.ads: Update reference in comment.
+ 	* sem_type.ads: Fix casing in a name of a unit.
+ 
+ 2021-04-28  Yannick Moy  <moy@adacore.com>
+ 
+ 	* ghost.adb (Check_Ghost_Context): Add continuation message when
+ 	in predicate.
+ 
+ 2021-04-28  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* libgnat/s-valrea.adb (Integer_to_Real): Use a subtype of Num
+ 	for the component type of the table of powers of ten.
+ 	* libgnat/s-valuer.adb (Round_Extra): Add assertion on Base.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_ch5.adb (Analyze_Case_Statement): Extend optimization to
+ 	all objects; fix typo in comment.
+ 
+ 2021-04-28  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_ch9.adb (Build_Barrier_Function): Refine type of a
+ 	protected type entity.
+ 	(Is_Pure_Barrier): Fix style.
+ 
+ 2021-04-28  Bob Duff  <duff@adacore.com>
+ 
+ 	* exp_ch3.adb (Simple_Init_Defaulted_Type): Simplify the code,
+ 	and always use OK_Convert_To, rather than Unchecked_Convert_To
+ 	and Convert_To.
+ 
+ 2021-04-28  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* sem_ch3.adb (Analyze_Object_Declaration): Remove dead code.
+ 	* ali.ads, ali.adb (Scan_ALI): Remove unused parameters.
+ 	Remove unused code related to Xref lines.
+ 	(Get_Typeref): Removed, no longer used.
+ 
+ 2021-04-28  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* exp_attr.adb (Build_Array_VS_Func, Build_Record_VS_Func,
+ 	Expand_N_Attribute_Reference): Use Get_Fullest_View instead of
+ 	Validated_View.
+ 	(Build_Record_VS_Func): Adjust to keep using Validated_View.
+ 	(Expand_N_Attribute_Reference) [Valid]: Use
+ 	Small_Integer_Type_For to allow for more compile time
+ 	evaluations.
+ 	* sem_util.adb (Cannot_Raise_Constraint_Error): Add more precise
+ 	support for N_Indexed_Component and fix support for
+ 	N_Selected_Component which wasn't completely safe.
+ 	(List_Cannot_Raise_CE): New.
+ 	* libgnat/i-cobol.adb (Valid_Packed): Simplify test to address
+ 	new GNAT warning.
+ 
+ 2021-04-28  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* .gitignore: New.
+ 	* doc/share/conf.py: Add Python 3 compatibility.
+ 	* doc/share/gnat.sty: Add missing file.
+ 
+ 2021-04-28  Richard Wai  <richard@annexi-strayline.com>
+ 
+ 	* libgnat/a-cohase.ads (Cursor): Synchronize comments for the Cursor
+ 	type definition to be consistent with identical definitions in other
+ 	container packages. Add additional comments regarding the importance of
+ 	maintaining the "Position" component for predefined equality.
+ 	* libgnat/a-cohama.ads (Cursor): Likewise.
+ 	* libgnat/a-cihama.ads (Cursor): Likewise.
+ 	* libgnat/a-cohase.adb (Find, Insert): Ensure that Cursor objects
+ 	always have their "Position" component set to ensure predefined
+ 	equality works as required.
+ 	* libgnat/a-cohama.adb (Find, Insert): Likewise.
+ 	* libgnat/a-cihama.adb (Find, Insert): Likewise.
+ 
+ 2021-04-28  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_subprog_type): Do not demote a
+ 	const or pure function because of a parameter whose type is pointer
+ 	to function.
+ 	* gcc-interface/trans.c (Call_to_gnu): Do not put back a conversion
+ 	between an actual and a formal that are unconstrained array types.
+ 	(gnat_gimplify_expr) <CALL_EXPR>: New case.
+ 	* gcc-interface/utils2.c (build_binary_op): Do not use |= operator.
+ 	(gnat_stabilize_reference_1): Likewise.
+ 	(gnat_rewrite_reference): Likewise.
+ 	(build_unary_op): Do not clear existing TREE_CONSTANT on the result.
+ 	(gnat_build_constructor): Also accept the address of a constant
+ 	CONSTRUCTOR as constant element.
+ 
+ 2021-04-28  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.c (is_array_of_scalar_type): New predicate.
+ 	(find_decls_r): New function.
+ 	(return_slot_opt_for_pure_call_p): New predicate.
+ 	(Call_to_gnu): Do not create a temporary for the return value if the
+ 	parent node is an aggregate.  If there is a target, try to apply the
+ 	return slot optimization to regular calls to pure functions returning
+ 	an array of scalar type.
+ 
+ 2021-04-28  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.c (language_function): Add comment.
+ 	(loop_info_d): Add fndecl and invariants fields.
+ 	(find_loop_for): Test fndecl instead of the context of var.
+ 	(find_loop): New function.
+ 	(Regular_Loop_to_gnu): Fold back into...
+ 	(Loop_Statement_to_gnu): ...this.  Emit invariants on entry, if any.
+ 	(gnat_to_gnu) <N_Selected_Component>: Record nonconstant invariant
+ 	offset computations in loops when optimization is enabled.
+ 	* gcc-interface/utils2.c (gnat_invariant_expr): Handle BIT_AND_EXPR.
+ 
+ 2021-04-20  Martin Liska  <mliska@suse.cz>
+ 
+ 	* gnatvsn.ads: Bump Library_Version to 12.
+ 
+ 2021-04-13  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/misc.c (gnat_init): Set default range bits to 0.
+ 	* gcc-interface/trans.c (extract_encoding): Delete.
+ 	(decode_name): Likewise.
+ 	(File_Name_to_gnu): New function.
+ 	(gigi): Call it to translate file names.  Replace assertion on
+ 	1-1 mapping between files and line maps with conditional error.
+ 
+ 2021-04-11  Gerald Pfeifer  <gerald@pfeifer.com>
+ 
+ 	* gnat_ugn.texi (Top): Avoid invalid "up" link.
+ 
+ 2021-03-29  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/99802
+ 	* freeze.adb (Is_Full_Access_Aggregate): Call Is_Full_Access_Object
+ 	on the name of an N_Assignment_Statement to spot full access.
+ 
+ 2021-03-10  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity): Build a TYPE_STUB_DECL
+ 	for the main variant of an enumeration type declared as volatile.
+ 
+ 2021-03-09  Mikael Pettersson  <mikpelinux@gmail.com>
+ 
+ 	* raise-gcc.c: On Cygwin include mingw32.h to prevent
+ 	windows.h from including x86intrin.h or emmintrin.h.
+ 
+ 2021-03-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/99264
+ 	* init.c (__gnat_alternate_sta) [Linux]: Remove preprocessor test on
+ 	MINSIGSTKSZ and bump size to 32KB.
+ 	* libgnarl/s-osinte__linux.ads (Alternate_Stack_Size): Bump to 32KB.
+ 
+ 2021-03-02  Mikael Pettersson  <mikpelinux@gmail.com>
+ 
+ 	PR bootstrap/98590
+ 	* cstreams.c: Ensure fileno_unlocked() is visible on Cygwin.
+ 
+ 2021-03-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/99095
+ 	* sem_ch8.adb (Check_Constrained_Object): Restrict again the special
+ 	optimization for limited types to non-array types except in the case
+ 	of an extended return statement.
+ 
+ 2021-03-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/99020
+ 	* sem_ch3.adb (Build_Discriminated_Subtype): Set the Cloned_Subtype
+ 	only if the type is not private.
+ 
+ 2021-02-26  YunQiang Su  <yunqiang.su@cipunited.com>
+ 
+ 	PR ada/98996
+ 	* Makefile.rtl: <mips*-*-linux*>
+ 	add 128Bit operation file for MIPS N64 and N32 to
+ 	LIBGNAT_TARGET_PAIRS and EXTRA_GNATRTL_NONTASKING_OBJS
+ 
+ 2021-02-12  Arnaud Charlet  <charlet@adacore.com>
+ 
+ 	* repinfo.ads, repinfo.adb (*SO_Ref*): Restore.
+ 
+ 2021-02-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (components_to_record): If the first component
+ 	with rep clause is the _Parent field with variable size, temporarily
+ 	set it aside when computing the internal layout of the REP part again.
+ 	* gcc-interface/utils.c (finish_record_type): Revert to taking the
+ 	maximum when merging sizes for all record types with rep clause.
+ 	(merge_sizes): Put SPECIAL parameter last and adjust recursive calls.
+ 
+ 2021-02-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Make the
+ 	two fields of the fat pointer type addressable, and do not make the
+ 	template type read-only.
+ 	<E_Record_Type>: If the type has discriminants mark it as may_alias.
+ 	* gcc-interface/utils.c (make_dummy_type): Likewise.
+ 	(build_dummy_unc_pointer_types): Likewise.
+ 
+ 2021-01-26  Marius Hillenbrand  <mhillen@linux.ibm.com>
+ 
+ 	PR ada/98228
+ 	* gcc-interface/utils.c (maybe_pad_type): Test the size of the new
+ 	packable type instead of its alignment for addressability's sake.
+ 
+ 2021-01-25  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc-interface/trans.c (make_covariant_thunk): Set the DECL_CONTEXT
+ 	of the parameters and do not set TREE_PUBLIC on the thunk.
+ 	(maybe_make_gnu_thunk): Pass the alias to the covariant thunk.
+ 	* gcc-interface/utils.c (finish_subprog_decl): Set the DECL_CONTEXT
+ 	of the parameters here...
+ 	(begin_subprog_body): ...instead of here.
+ 
+ 2021-01-19  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/98740
+ 	* gcc-interface/trans.c (add_decl_expr): Always mark TYPE_ADA_SIZE.
+ 
+ 2021-01-14  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+ 
+ 	PR ada/98595
+ 	* Makefile.rtl (LIBGNAT_TARGET_PAIRS) <riscv*-*-rtems*>: Use
+ 	wraplf version of Aux_Long_Long_Float.
+ 
+ 2021-01-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnatvsn.ads: Bump copyright year.
+ 
+ 2021-01-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gnat_ugn.texi: Bump @copying's copyright year.
+ 	* gnat_rm.texi: Likewise.
+ 
+ 2021-01-01  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* ChangeLog-2020: Rotate ChangeLog.  New file.
+ 
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ 
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved.
diff -Nrcpad gcc-11.3.0/gcc/ada/Make-generated.in gcc-12.1.0/gcc/ada/Make-generated.in
*** gcc-11.3.0/gcc/ada/Make-generated.in	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/Make-generated.in	Fri May  6 07:30:56 2022
***************
*** 2,11 ****
  
  # Note: can't use ?= here, not supported by older versions of GNU Make
  
- ifeq ($(origin ADA_GEN_SUBDIR), undefined)
- ADA_GEN_SUBDIR=ada
- endif
- 
  ifeq ($(origin CP), undefined)
  CP=cp
  endif
--- 2,7 ----
*************** ifeq ($(origin MKDIR), undefined)
*** 14,73 ****
  MKDIR=mkdir -p
  endif
  
! ifeq ($(origin MOVE_IF_CHANGE), undefined)
! MOVE_IF_CHANGE=mv -f
! endif
! 
! .PHONY: ada_extra_files
! ada_extra_files : $(ADA_GEN_SUBDIR)/treeprs.ads $(ADA_GEN_SUBDIR)/einfo.h $(ADA_GEN_SUBDIR)/sinfo.h $(ADA_GEN_SUBDIR)/nmake.adb \
! 	$(ADA_GEN_SUBDIR)/nmake.ads $(ADA_GEN_SUBDIR)/snames.ads $(ADA_GEN_SUBDIR)/snames.adb $(ADA_GEN_SUBDIR)/snames.h
! 
! # We delete the files before copying, below, in case they are read-only.
! 
! $(ADA_GEN_SUBDIR)/treeprs.ads : $(ADA_GEN_SUBDIR)/treeprs.adt $(ADA_GEN_SUBDIR)/sinfo.ads $(ADA_GEN_SUBDIR)/xtreeprs.adb
! 	-$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/treeprs
! 	$(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/treeprs/,$(notdir $^))
! 	$(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/treeprs
! 	(cd $(ADA_GEN_SUBDIR)/bldtools/treeprs; gnatmake -q xtreeprs ; ./xtreeprs treeprs.ads )
! 	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/treeprs/treeprs.ads $(ADA_GEN_SUBDIR)/treeprs.ads
  
! $(ADA_GEN_SUBDIR)/einfo.h : $(ADA_GEN_SUBDIR)/einfo.ads $(ADA_GEN_SUBDIR)/einfo.adb $(ADA_GEN_SUBDIR)/xeinfo.adb $(ADA_GEN_SUBDIR)/ceinfo.adb
! 	-$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/einfo
! 	$(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/einfo/,$(notdir $^))
! 	$(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/einfo
! 	(cd $(ADA_GEN_SUBDIR)/bldtools/einfo; gnatmake -q xeinfo ; ./xeinfo einfo.h )
! 	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/einfo/einfo.h $(ADA_GEN_SUBDIR)/einfo.h
  
! $(ADA_GEN_SUBDIR)/sinfo.h : $(ADA_GEN_SUBDIR)/sinfo.ads $(ADA_GEN_SUBDIR)/sinfo.adb $(ADA_GEN_SUBDIR)/xsinfo.adb $(ADA_GEN_SUBDIR)/csinfo.adb
! 	-$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/sinfo
! 	$(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/sinfo/,$(notdir $^))
! 	$(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/sinfo
! 	(cd $(ADA_GEN_SUBDIR)/bldtools/sinfo; gnatmake -q xsinfo ; ./xsinfo sinfo.h )
! 	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/sinfo/sinfo.h $(ADA_GEN_SUBDIR)/sinfo.h
  
! $(ADA_GEN_SUBDIR)/snames.h $(ADA_GEN_SUBDIR)/snames.ads $(ADA_GEN_SUBDIR)/snames.adb : $(ADA_GEN_SUBDIR)/stamp-snames ; @true
! $(ADA_GEN_SUBDIR)/stamp-snames : $(ADA_GEN_SUBDIR)/snames.ads-tmpl $(ADA_GEN_SUBDIR)/snames.adb-tmpl $(ADA_GEN_SUBDIR)/snames.h-tmpl $(ADA_GEN_SUBDIR)/xsnamest.adb $(ADA_GEN_SUBDIR)/xutil.ads $(ADA_GEN_SUBDIR)/xutil.adb
! 	-$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/snamest
! 	$(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/snamest/,$(notdir $^))
! 	$(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/snamest
! 	(cd $(ADA_GEN_SUBDIR)/bldtools/snamest; gnatmake -q xsnamest ; ./xsnamest )
! 	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/snamest/snames.ns $(ADA_GEN_SUBDIR)/snames.ads
! 	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/snamest/snames.nb $(ADA_GEN_SUBDIR)/snames.adb
! 	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/snamest/snames.nh $(ADA_GEN_SUBDIR)/snames.h
! 	touch $(ADA_GEN_SUBDIR)/stamp-snames
  
! $(ADA_GEN_SUBDIR)/nmake.adb $(ADA_GEN_SUBDIR)/nmake.ads: $(ADA_GEN_SUBDIR)/stamp-nmake ; @true
! $(ADA_GEN_SUBDIR)/stamp-nmake: $(ADA_GEN_SUBDIR)/sinfo.ads $(ADA_GEN_SUBDIR)/nmake.adt $(ADA_GEN_SUBDIR)/xnmake.adb $(ADA_GEN_SUBDIR)/xutil.ads $(ADA_GEN_SUBDIR)/xutil.adb
! 	-$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/nmake
! 	$(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/nmake/,$(notdir $^))
! 	$(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/nmake
! 	(cd $(ADA_GEN_SUBDIR)/bldtools/nmake; gnatmake -q xnmake ; ./xnmake -b nmake.adb ; ./xnmake -s nmake.ads)
! 	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/nmake/nmake.ads $(ADA_GEN_SUBDIR)/nmake.ads
! 	$(MOVE_IF_CHANGE) $(ADA_GEN_SUBDIR)/bldtools/nmake/nmake.adb $(ADA_GEN_SUBDIR)/nmake.adb
! 	touch $(ADA_GEN_SUBDIR)/stamp-nmake
  
! $(ADA_GEN_SUBDIR)/sdefault.adb: $(ADA_GEN_SUBDIR)/stamp-sdefault ; @true
! $(ADA_GEN_SUBDIR)/stamp-sdefault : $(srcdir)/version.c Makefile
  	$(ECHO) "pragma Style_Checks (Off);" >tmp-sdefault.adb
  	$(ECHO) "with Osint; use Osint;" >>tmp-sdefault.adb
  	$(ECHO) "package body Sdefault is" >>tmp-sdefault.adb
--- 10,59 ----
  MKDIR=mkdir -p
  endif
  
! fsrcdir := $(shell cd $(srcdir);${PWD_COMMAND})
  
! GEN_IL_INCLUDES = -I$(fsrcdir)/ada
! GEN_IL_FLAGS = -gnata -gnat2012 -gnatw.g -gnatyg -gnatU $(GEN_IL_INCLUDES)
  
! ada/seinfo_tables.ads ada/seinfo_tables.adb ada/sinfo.h ada/einfo.h ada/nmake.ads ada/nmake.adb ada/seinfo.ads ada/sinfo-nodes.ads ada/sinfo-nodes.adb ada/einfo-entities.ads ada/einfo-entities.adb: ada/stamp-gen_il ; @true
! ada/stamp-gen_il: $(fsrcdir)/ada/gen_il*
! 	$(MKDIR) ada/gen_il
! 	cd ada/gen_il; gnatmake -q -g $(GEN_IL_FLAGS) gen_il-main
! 	# Ignore errors to work around finalization issues in older compilers
! 	- cd ada/gen_il; ./gen_il-main
! 	$(fsrcdir)/../move-if-change ada/gen_il/seinfo_tables.ads ada/seinfo_tables.ads
! 	$(fsrcdir)/../move-if-change ada/gen_il/seinfo_tables.adb ada/seinfo_tables.adb
! 	$(fsrcdir)/../move-if-change ada/gen_il/sinfo.h ada/sinfo.h
! 	$(fsrcdir)/../move-if-change ada/gen_il/einfo.h ada/einfo.h
! 	$(fsrcdir)/../move-if-change ada/gen_il/nmake.ads ada/nmake.ads
! 	$(fsrcdir)/../move-if-change ada/gen_il/nmake.adb ada/nmake.adb
! 	$(fsrcdir)/../move-if-change ada/gen_il/seinfo.ads ada/seinfo.ads
! 	$(fsrcdir)/../move-if-change ada/gen_il/sinfo-nodes.ads ada/sinfo-nodes.ads
! 	$(fsrcdir)/../move-if-change ada/gen_il/sinfo-nodes.adb ada/sinfo-nodes.adb
! 	$(fsrcdir)/../move-if-change ada/gen_il/einfo-entities.ads ada/einfo-entities.ads
! 	$(fsrcdir)/../move-if-change ada/gen_il/einfo-entities.adb ada/einfo-entities.adb
! 	touch ada/stamp-gen_il
  
! # We need -gnatX to compile seinfo_tables, because it uses extensions. This
! # target is not currently used when building gnat, because these extensions
! # would cause bootstrapping with older compilers to fail. You can call it by
! # hand, as a sanity check that these files are legal.
! ada/seinfo_tables.o: ada/seinfo_tables.ads ada/seinfo_tables.adb
! 	cd ada ; gnatmake $(GEN_IL_INCLUDES) seinfo_tables.adb -gnatU -gnatX
  
! ada/snames.h ada/snames.ads ada/snames.adb : ada/stamp-snames ; @true
! ada/stamp-snames : ada/snames.ads-tmpl ada/snames.adb-tmpl ada/snames.h-tmpl ada/xsnamest.adb ada/xutil.ads ada/xutil.adb
! 	-$(MKDIR) ada/bldtools/snamest
! 	$(RM) $(addprefix ada/bldtools/snamest/,$(notdir $^))
! 	$(CP) $^ ada/bldtools/snamest
! 	cd ada/bldtools/snamest; gnatmake -q xsnamest ; ./xsnamest
! 	$(fsrcdir)/../move-if-change ada/bldtools/snamest/snames.ns ada/snames.ads
! 	$(fsrcdir)/../move-if-change ada/bldtools/snamest/snames.nb ada/snames.adb
! 	$(fsrcdir)/../move-if-change ada/bldtools/snamest/snames.nh ada/snames.h
! 	touch ada/stamp-snames
  
! ada/sdefault.adb: ada/stamp-sdefault ; @true
! ada/stamp-sdefault : $(srcdir)/ada/version.c Makefile
  	$(ECHO) "pragma Style_Checks (Off);" >tmp-sdefault.adb
  	$(ECHO) "with Osint; use Osint;" >>tmp-sdefault.adb
  	$(ECHO) "package body Sdefault is" >>tmp-sdefault.adb
*************** $(ADA_GEN_SUBDIR)/stamp-sdefault : $(src
*** 93,97 ****
  	$(ECHO) "      return Relocate_Path (S0, S4);" >>tmp-sdefault.adb
  	$(ECHO) "   end Search_Dir_Prefix;" >>tmp-sdefault.adb
  	$(ECHO) "end Sdefault;" >> tmp-sdefault.adb
! 	$(MOVE_IF_CHANGE) tmp-sdefault.adb $(ADA_GEN_SUBDIR)/sdefault.adb
! 	touch $(ADA_GEN_SUBDIR)/stamp-sdefault
--- 79,86 ----
  	$(ECHO) "      return Relocate_Path (S0, S4);" >>tmp-sdefault.adb
  	$(ECHO) "   end Search_Dir_Prefix;" >>tmp-sdefault.adb
  	$(ECHO) "end Sdefault;" >> tmp-sdefault.adb
! 	$(fsrcdir)/../move-if-change tmp-sdefault.adb ada/sdefault.adb
! 	touch ada/stamp-sdefault
! 
! ada/%: $(srcdir)/ada/libgnat/%
! 	$(CP) -f $< $@
diff -Nrcpad gcc-11.3.0/gcc/ada/Makefile.rtl gcc-12.1.0/gcc/ada/Makefile.rtl
*** gcc-11.3.0/gcc/ada/Makefile.rtl	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/Makefile.rtl	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  # Makefile.rtl for GNU Ada Compiler (GNAT).
! #   Copyright (C) 2003-2020, Free Software Foundation, Inc.
  
  #This file is part of GCC.
  
--- 1,5 ----
  # Makefile.rtl for GNU Ada Compiler (GNAT).
! #   Copyright (C) 2003-2021, Free Software Foundation, Inc.
  
  #This file is part of GCC.
  
*************** GNATRTL_TASKING_OBJS= \
*** 56,61 ****
--- 56,64 ----
    s-putaim$(objext) \
    s-solita$(objext) \
    s-stusta$(objext) \
+   s-taasde$(objext) \
+   s-tadeca$(objext) \
+   s-tadert$(objext) \
    s-taenca$(objext) \
    s-taprob$(objext) \
    s-taprop$(objext) \
*************** GNATRTL_TASKING_OBJS= \
*** 66,78 ****
    s-taskin$(objext) \
    s-taspri$(objext) \
    s-tasque$(objext) \
-   s-tasres$(objext) \
    s-tasren$(objext) \
    s-tassta$(objext) \
    s-tasuti$(objext) \
-   s-taasde$(objext) \
-   s-tadeca$(objext) \
-   s-tadert$(objext) \
    s-tataat$(objext) \
    s-tpinop$(objext) \
    s-tpoben$(objext) \
--- 69,78 ----
    s-taskin$(objext) \
    s-taspri$(objext) \
    s-tasque$(objext) \
    s-tasren$(objext) \
+   s-tasres$(objext) \
    s-tassta$(objext) \
    s-tasuti$(objext) \
    s-tataat$(objext) \
    s-tpinop$(objext) \
    s-tpoben$(objext) \
*************** GNATRTL_ALTIVEC_OBJS= \
*** 91,97 ****
    g-alvety$(objext) \
    g-alvevi$(objext)
  
! # Objects needed for non-tasking.
  GNATRTL_NONTASKING_OBJS= \
    a-assert$(objext) \
    a-btgbso$(objext) \
--- 91,97 ----
    g-alvety$(objext) \
    g-alvevi$(objext)
  
! # Objects needed for non-tasking
  GNATRTL_NONTASKING_OBJS= \
    a-assert$(objext) \
    a-btgbso$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 162,167 ****
--- 162,168 ----
    a-coormu$(objext) \
    a-coorse$(objext) \
    a-coprnu$(objext) \
+   a-costso$(objext) \
    a-coteio$(objext) \
    a-crbltr$(objext) \
    a-crbtgk$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 210,215 ****
--- 211,222 ----
    a-lllwti$(objext) \
    a-lllzti$(objext) \
    a-locale$(objext) \
+   a-nagefl$(objext) \
+   a-naliop$(objext) \
+   a-nallfl$(objext) \
+   a-nalofl$(objext) \
+   a-nashfl$(objext) \
+   a-nbnbig$(objext) \
    a-nbnbin$(objext) \
    a-nbnbre$(objext) \
    a-ncelfu$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 231,249 ****
    a-nscefu$(objext) \
    a-nscoty$(objext) \
    a-nselfu$(objext) \
    a-nubinu$(objext) \
    a-nucoar$(objext) \
    a-nucoty$(objext) \
    a-nudira$(objext) \
    a-nuelfu$(objext) \
    a-nuflra$(objext) \
-   a-nagefl$(objext) \
-   a-nallfl$(objext) \
-   a-nalofl$(objext) \
-   a-nuaufl$(objext) \
-   a-nashfl$(objext) \
-   a-nuauco$(objext) \
-   a-naliop$(objext) \
    a-numaux$(objext) \
    a-numeri$(objext) \
    a-nurear$(objext) \
--- 238,251 ----
    a-nscefu$(objext) \
    a-nscoty$(objext) \
    a-nselfu$(objext) \
+   a-nuauco$(objext) \
+   a-nuaufl$(objext) \
    a-nubinu$(objext) \
    a-nucoar$(objext) \
    a-nucoty$(objext) \
    a-nudira$(objext) \
    a-nuelfu$(objext) \
    a-nuflra$(objext) \
    a-numaux$(objext) \
    a-numeri$(objext) \
    a-nurear$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 273,301 ****
    a-ssiwti$(objext) \
    a-ssizti$(objext) \
    a-stboha$(objext) \
    a-stfiha$(objext) \
    a-stmaco$(objext) \
-   a-stobbu$(objext) \
-   a-stobfi$(objext) \
    a-storio$(objext) \
-   a-stoubu$(objext) \
-   a-stoufi$(objext) \
-   a-stoufo$(objext) \
-   a-stouut$(objext) \
    a-strbou$(objext) \
    a-stream$(objext) \
-   a-strsto$(objext) \
-   a-ststbo$(objext) \
-   a-ststun$(objext) \
    a-strfix$(objext) \
    a-strhas$(objext) \
    a-string$(objext) \
    a-strmap$(objext) \
    a-strsea$(objext) \
    a-strsup$(objext) \
    a-strunb$(objext) \
    a-ststio$(objext) \
!   a-stteou$(objext) \
    a-stunau$(objext) \
    a-stunha$(objext) \
    a-stuten$(objext) \
--- 275,302 ----
    a-ssiwti$(objext) \
    a-ssizti$(objext) \
    a-stboha$(objext) \
+   a-stbubo$(objext) \
+   a-stbufi$(objext) \
+   a-stbufo$(objext) \
+   a-stbuun$(objext) \
+   a-stbuut$(objext) \
    a-stfiha$(objext) \
    a-stmaco$(objext) \
    a-storio$(objext) \
    a-strbou$(objext) \
    a-stream$(objext) \
    a-strfix$(objext) \
    a-strhas$(objext) \
    a-string$(objext) \
    a-strmap$(objext) \
    a-strsea$(objext) \
+   a-strsto$(objext) \
    a-strsup$(objext) \
    a-strunb$(objext) \
+   a-ststbo$(objext) \
    a-ststio$(objext) \
!   a-ststun$(objext) \
!   a-sttebu$(objext) \
    a-stunau$(objext) \
    a-stunha$(objext) \
    a-stuten$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 575,587 ****
--- 576,591 ----
    s-dlmkio$(objext) \
    s-dlmopr$(objext) \
    s-dmotpr$(objext) \
+   s-dourea$(objext) \
    s-dsaser$(objext) \
    s-elaall$(objext) \
    s-excdeb$(objext) \
    s-except$(objext) \
    s-exctab$(objext) \
    s-exctra$(objext) \
+   s-exnflt$(objext) \
    s-exnint$(objext) \
+   s-exnlfl$(objext) \
    s-exnllf$(objext) \
    s-exnlli$(objext) \
    s-expint$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 589,594 ****
--- 593,599 ----
    s-expllu$(objext) \
    s-expmod$(objext) \
    s-exponn$(objext) \
+   s-exponr$(objext) \
    s-expont$(objext) \
    s-exponu$(objext) \
    s-expuns$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 618,636 ****
    s-imaged$(objext) \
    s-imagef$(objext) \
    s-imagei$(objext) \
    s-imageu$(objext) \
    s-imagew$(objext) \
    s-imde32$(objext) \
    s-imde64$(objext) \
!   s-imenne$(objext) \
    s-imfi32$(objext) \
    s-imfi64$(objext) \
    s-imgbiu$(objext) \
    s-imgboo$(objext) \
    s-imgcha$(objext) \
!   s-imgenu$(objext) \
    s-imgint$(objext) \
    s-imgllb$(objext) \
    s-imglli$(objext) \
    s-imgllu$(objext) \
    s-imgllw$(objext) \
--- 623,647 ----
    s-imaged$(objext) \
    s-imagef$(objext) \
    s-imagei$(objext) \
+   s-imagen$(objext) \
+   s-imager$(objext) \
    s-imageu$(objext) \
    s-imagew$(objext) \
    s-imde32$(objext) \
    s-imde64$(objext) \
!   s-imen16$(objext) \
!   s-imen32$(objext) \
!   s-imenu8$(objext) \
    s-imfi32$(objext) \
    s-imfi64$(objext) \
    s-imgbiu$(objext) \
    s-imgboo$(objext) \
    s-imgcha$(objext) \
!   s-imgflt$(objext) \
    s-imgint$(objext) \
+   s-imglfl$(objext) \
    s-imgllb$(objext) \
+   s-imgllf$(objext) \
    s-imglli$(objext) \
    s-imgllu$(objext) \
    s-imgllw$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 709,714 ****
--- 720,726 ----
    s-pack63$(objext) \
    s-parame$(objext) \
    s-parint$(objext) \
+   s-pehage$(objext) \
    s-pooglo$(objext) \
    s-pooloc$(objext) \
    s-poosiz$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 735,746 ****
    s-spsufi$(objext) \
    s-stache$(objext) \
    s-stalib$(objext) \
    s-stausa$(objext) \
    s-stoele$(objext) \
    s-stopoo$(objext) \
    s-stposu$(objext) \
    s-stratt$(objext) \
-   s-statxd$(objext) \
    s-strhas$(objext) \
    s-string$(objext) \
    s-ststop$(objext) \
--- 747,758 ----
    s-spsufi$(objext) \
    s-stache$(objext) \
    s-stalib$(objext) \
+   s-statxd$(objext) \
    s-stausa$(objext) \
    s-stoele$(objext) \
    s-stopoo$(objext) \
    s-stposu$(objext) \
    s-stratt$(objext) \
    s-strhas$(objext) \
    s-string$(objext) \
    s-ststop$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 750,762 ****
    s-trasym$(objext) \
    s-unstyp$(objext) \
    s-utf_32$(objext) \
-   s-valboo$(objext) \
-   s-valcha$(objext) \
    s-vade32$(objext) \
    s-vade64$(objext) \
    s-vafi32$(objext) \
    s-vafi64$(objext) \
!   s-valenu$(objext) \
    s-valflt$(objext) \
    s-valint$(objext) \
    s-vallfl$(objext) \
--- 762,776 ----
    s-trasym$(objext) \
    s-unstyp$(objext) \
    s-utf_32$(objext) \
    s-vade32$(objext) \
    s-vade64$(objext) \
+   s-vaen16$(objext) \
+   s-vaen32$(objext) \
+   s-vaenu8$(objext) \
    s-vafi32$(objext) \
    s-vafi64$(objext) \
!   s-valboo$(objext) \
!   s-valcha$(objext) \
    s-valflt$(objext) \
    s-valint$(objext) \
    s-vallfl$(objext) \
*************** GNATRTL_NONTASKING_OBJS= \
*** 767,772 ****
--- 781,787 ----
    s-valued$(objext) \
    s-valuef$(objext) \
    s-valuei$(objext) \
+   s-valuen$(objext) \
    s-valuer$(objext) \
    s-valueu$(objext) \
    s-valuns$(objext) \
*************** ATOMICS_BUILTINS_TARGET_PAIRS = \
*** 883,889 ****
  
  X86_TARGET_PAIRS = \
    a-nuauco.ads<libgnat/a-nuauco__x86.ads \
!   s-atocou.adb<libgnat/s-atocou__x86.adb
  
  X86_64_TARGET_PAIRS = \
    a-nuauco.ads<libgnat/a-nuauco__x86.ads \
--- 898,904 ----
  
  X86_TARGET_PAIRS = \
    a-nuauco.ads<libgnat/a-nuauco__x86.ads \
!   s-atocou.adb<libgnat/s-atocou__builtin.adb
  
  X86_64_TARGET_PAIRS = \
    a-nuauco.ads<libgnat/a-nuauco__x86.ads \
*************** EXTRA_GNATRTL_NONTASKING_OBJS=
*** 1030,1036 ****
  EXTRA_GNATRTL_TASKING_OBJS=
  
  # Subsets of extra libgnat sources that always go together
! VX_SIGTRAMP_EXTRA_SRCS=sigtramp.h sigtramp-vxworks-target.inc
  
  # Additional object files that should go in the same directory as libgnat,
  # aside the library itself. Typically useful for crtbegin/crtend kind of files.
--- 1045,1051 ----
  EXTRA_GNATRTL_TASKING_OBJS=
  
  # Subsets of extra libgnat sources that always go together
! VX_SIGTRAMP_EXTRA_SRCS=sigtramp.h sigtramp-vxworks-target.h
  
  # Additional object files that should go in the same directory as libgnat,
  # aside the library itself. Typically useful for crtbegin/crtend kind of files.
*************** ifeq ($(strip $(filter-out powerpc% wrs
*** 1069,1080 ****
    a-naliop.ads<libgnat/a-naliop__nolibm.ads \
    a-nuaufl.ads<libgnat/a-nuaufl__wraplf.ads \
    a-nashfl.ads<libgnat/a-nashfl__wraplf.ads \
!   s-inmaop.adb<libgnarl/s-inmaop__vxworks.adb \
    s-intman.ads<libgnarl/s-intman__vxworks.ads \
    s-intman.adb<libgnarl/s-intman__vxworks.adb \
    s-osinte.ads<libgnarl/s-osinte__vxworks.ads \
    s-osinte.adb<libgnarl/s-osinte__vxworks.adb \
!   s-osprim.adb<libgnat/s-osprim__vxworks.adb \
    s-parame.ads<libgnat/s-parame__vxworks.ads \
    s-parame.adb<libgnat/s-parame__vxworks.adb \
    s-taprop.adb<libgnarl/s-taprop__vxworks.adb \
--- 1084,1096 ----
    a-naliop.ads<libgnat/a-naliop__nolibm.ads \
    a-nuaufl.ads<libgnat/a-nuaufl__wraplf.ads \
    a-nashfl.ads<libgnat/a-nashfl__wraplf.ads \
!   s-dorepr.adb<libgnat/s-dorepr__fma.adb \
!   s-inmaop.adb<libgnarl/s-inmaop__hwint.adb \
    s-intman.ads<libgnarl/s-intman__vxworks.ads \
    s-intman.adb<libgnarl/s-intman__vxworks.adb \
    s-osinte.ads<libgnarl/s-osinte__vxworks.ads \
    s-osinte.adb<libgnarl/s-osinte__vxworks.adb \
!   s-osprim.adb<libgnat/s-osprim__posix.adb \
    s-parame.ads<libgnat/s-parame__vxworks.ads \
    s-parame.adb<libgnat/s-parame__vxworks.adb \
    s-taprop.adb<libgnarl/s-taprop__vxworks.adb \
*************** ifeq ($(strip $(filter-out powerpc% wrs
*** 1151,1159 ****
            s-vxwext.ads<libgnarl/s-vxwext__kernel.ads \
            s-vxwext.adb<libgnarl/s-vxwext__kernel.adb \
            system.ads<libgnat/$(SVX)-$(ARCH_STR)-kernel.ads
-         else
-           LIBGNAT_TARGET_PAIRS += \
-           system.ads<libgnat/system-vxworks-ppc.ads
          endif
        endif
        EXTRA_GNATRTL_NONTASKING_OBJS+=i-vxinco.o i-vxwork.o i-vxwoio.o
--- 1167,1172 ----
*************** ifeq ($(strip $(filter-out powerpc% wrs
*** 1173,1179 ****
      else
        GCC_SPEC_FILES+=vxworks7-rtp-base-link.spec
      endif
!     GCC_SPEC_FILES+=vxworks7-cert-rtp-link.spec
    else
      GCC_SPEC_FILES+=vxworks-$(ARCH_STR)-link.spec
      GCC_SPEC_FILES+=vxworks-cert-$(ARCH_STR)-link.spec
--- 1186,1192 ----
      else
        GCC_SPEC_FILES+=vxworks7-rtp-base-link.spec
      endif
!     GCC_SPEC_FILES+=vxworks7-cert-rtp-link__ppcXX.spec
    else
      GCC_SPEC_FILES+=vxworks-$(ARCH_STR)-link.spec
      GCC_SPEC_FILES+=vxworks-cert-$(ARCH_STR)-link.spec
*************** ifeq ($(strip $(filter-out powerpc% wrs
*** 1181,1315 ****
    endif
  endif
  
- # PowerPC and e500v2 VxWorks 653
- ifeq ($(strip $(filter-out powerpc% wrs vxworksae vxworksaespe,$(target_cpu) $(target_vendor) $(target_os))),)
- 
-   ifeq ($(strip $(filter-out e500%, $(target_alias))),)
-      ARCH_STR=e500
-      # gcc config translates the target e500v2-wrs-vxworks to
-      # powerpc-wrs-vxworksspe. Let's keep the original alias here when
-      # generating s-oscons.ads.
-      target=$(target_alias)
-   else
-      ARCH_STR=ppc
-   endif
- 
-   # target pairs for vthreads runtime
-   LIBGNAT_TARGET_PAIRS = \
-   a-elchha.adb<libgnat/a-elchha__vxworks-ppc-full.adb \
-   a-intnam.ads<libgnarl/a-intnam__vxworks.ads \
-   a-naliop.ads<libgnat/a-naliop__nolibm.ads \
-   a-nuaufl.ads<libgnat/a-nuaufl__wraplf.ads \
-   a-nashfl.ads<libgnat/a-nashfl__wraplf.ads \
-   g-io.adb<hie/g-io__vxworks-cert.adb \
-   s-inmaop.adb<libgnarl/s-inmaop__vxworks.adb \
-   s-interr.adb<libgnarl/s-interr__vxworks.adb \
-   s-intman.ads<libgnarl/s-intman__vxworks.ads \
-   s-intman.adb<libgnarl/s-intman__vxworks.adb \
-   s-osinte.adb<libgnarl/s-osinte__vxworks.adb \
-   s-osinte.ads<libgnarl/s-osinte__vxworks.ads \
-   s-osprim.adb<libgnat/s-osprim__vxworks.adb \
-   s-parame.ads<libgnat/s-parame__ae653.ads \
-   s-parame.adb<libgnat/s-parame__vxworks.adb \
-   s-taprop.adb<libgnarl/s-taprop__vxworks.adb \
-   s-tasinf.ads<libgnarl/s-tasinf__vxworks.ads \
-   s-taspri.ads<libgnarl/s-taspri__vxworks.ads \
-   s-tpopsp.adb<libgnarl/s-tpopsp__vxworks.adb \
-   s-vxwext.adb<libgnarl/s-vxwext__noints.adb \
-   s-vxwext.ads<libgnarl/s-vxwext__vthreads.ads \
-   s-vxwork.ads<libgnarl/s-vxwork__ppc.ads \
-   system.ads<libgnat/system-vxworks-$(ARCH_STR)-vthread.ads \
-   $(ATOMICS_TARGET_PAIRS) \
-   $(ATOMICS_BUILTINS_TARGET_PAIRS)
- 
-   EH_MECHANISM=-gcc
- 
-   TOOLS_TARGET_PAIRS=indepsw.adb<indepsw-gnu.adb
- 
-   EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
-   EXTRA_GNATRTL_TASKING_OBJS=i-vxinco.o s-vxwork.o s-vxwext.o
- 
-   EXTRA_LIBGNAT_OBJS+=sigtramp-vxworks.o
-   EXTRA_LIBGNAT_SRCS+=$(VX_SIGTRAMP_EXTRA_SRCS)
- 
-   # Extra pairs for the vthreads runtime
-   ifeq ($(strip $(filter-out vthreads,$(THREAD_KIND))),)
-     LIBGNAT_TARGET_PAIRS += \
-     s-thread.adb<libgnat/s-thread__ae653.adb \
-     s-osvers.ads<libgnat/s-osvers__vxworks-653.ads \
-     $(DUMMY_SOCKETS_TARGET_PAIRS)
- 
-     GNATRTL_SOCKETS_OBJS =
-     EXTRA_GNATRTL_NONTASKING_OBJS += s-thread.o s-osvers.o
-   else
-     LIBGNAT_TARGET_PAIRS += \
-     g-socthi.ads<libgnat/g-socthi__vxworks.ads \
-     g-socthi.adb<libgnat/g-socthi__vxworks.adb \
-     g-sopowa.adb<libgnat/g-sopowa__posix.adb \
-     g-stsifd.adb<libgnat/g-stsifd__sockets.adb
-   endif
- 
- endif
- 
- # VxWorksae / VxWorks 653 for x86 (vxsim) - ?? VxWorks mils not implemented
- ifeq ($(strip $(filter-out %86 wrs vxworksae,$(target_cpu) $(target_vendor) $(target_os))),)
-   # target pairs for kernel + vthreads runtime
-   LIBGNAT_TARGET_PAIRS = \
-   a-elchha.adb<libgnat/a-elchha__vxworks-ppc-full.adb \
-   a-intnam.ads<libgnarl/a-intnam__vxworks.ads \
-   a-naliop.ads<libgnat/a-naliop__nolibm.ads \
-   a-nuaufl.ads<libgnat/a-nuaufl__wraplf.ads \
-   a-nashfl.ads<libgnat/a-nashfl__wraplf.ads \
-   g-io.adb<hie/g-io__vxworks-cert.adb \
-   s-inmaop.adb<libgnarl/s-inmaop__vxworks.adb \
-   s-interr.adb<libgnarl/s-interr__vxworks.adb \
-   s-intman.ads<libgnarl/s-intman__vxworks.ads \
-   s-intman.adb<libgnarl/s-intman__vxworks.adb \
-   s-osinte.adb<libgnarl/s-osinte__vxworks.adb \
-   s-osinte.ads<libgnarl/s-osinte__vxworks.ads \
-   s-osprim.adb<libgnat/s-osprim__vxworks.adb \
-   s-parame.ads<libgnat/s-parame__ae653.ads \
-   s-parame.adb<libgnat/s-parame__vxworks.adb \
-   s-taprop.adb<libgnarl/s-taprop__vxworks.adb \
-   s-tasinf.ads<libgnarl/s-tasinf__vxworks.ads \
-   s-taspri.ads<libgnarl/s-taspri__vxworks.ads \
-   s-tpopsp.adb<libgnarl/s-tpopsp__vxworks.adb \
-   s-vxwext.adb<libgnarl/s-vxwext__noints.adb \
-   s-vxwext.ads<libgnarl/s-vxwext__vthreads.ads \
-   s-vxwork.ads<libgnarl/s-vxwork__x86.ads \
-   system.ads<libgnat/system-vxworks-x86-vthread.ads \
-   $(ATOMICS_TARGET_PAIRS) \
-   $(ATOMICS_BUILTINS_TARGET_PAIRS)
- 
-   EH_MECHANISM=-gcc
- 
-   TOOLS_TARGET_PAIRS=indepsw.adb<indepsw-gnu.adb
- 
-   EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o s-thread.o
-   EXTRA_GNATRTL_TASKING_OBJS=i-vxinco.o s-vxwork.o s-vxwext.o
- 
-   EXTRA_LIBGNAT_OBJS+=vx_stack_info.o
-   GNATRTL_SOCKETS_OBJS =
- 
-   # Extra pairs for the vthreads runtime
-   ifeq ($(strip $(filter-out vthreads,$(THREAD_KIND))),)
-     LIBGNAT_TARGET_PAIRS += \
-     s-thread.adb<libgnat/s-thread__ae653.adb \
-     s-osvers.ads<libgnat/s-osvers__vxworks-653.ads \
-     $(DUMMY_SOCKETS_TARGET_PAIRS)
- 
-     GNATRTL_SOCKETS_OBJS =
-     EXTRA_GNATRTL_NONTASKING_OBJS += s-thread.o s-osvers.o
-   else
-     LIBGNAT_TARGET_PAIRS += \
-     g-socthi.ads<libgnat/g-socthi__vxworks.ads \
-     g-socthi.adb<libgnat/g-socthi__vxworks.adb \
-     g-sopowa.adb<libgnat/g-sopowa__posix.adb \
-     g-stsifd.adb<libgnat/g-stsifd__sockets.adb
-   endif
- 
- endif
- 
  # x86/x86_64 VxWorks
  ifeq ($(strip $(filter-out %86 x86_64 wrs vxworks vxworks7%,$(target_cpu) $(target_vendor) $(target_os))),)
  
--- 1194,1199 ----
*************** ifeq ($(strip $(filter-out %86 x86_64 wr
*** 1321,1330 ****
    a-nashfl.ads<libgnat/a-nashfl__wraplf.ads \
    s-osinte.adb<libgnarl/s-osinte__vxworks.adb \
    s-osinte.ads<libgnarl/s-osinte__vxworks.ads \
!   s-inmaop.adb<libgnarl/s-inmaop__vxworks.adb \
    s-intman.ads<libgnarl/s-intman__vxworks.ads \
    s-intman.adb<libgnarl/s-intman__vxworks.adb \
!   s-osprim.adb<libgnat/s-osprim__vxworks.adb \
    s-parame.ads<libgnat/s-parame__vxworks.ads \
    s-parame.adb<libgnat/s-parame__vxworks.adb \
    s-stchop.ads<libgnat/s-stchop__limit.ads \
--- 1205,1214 ----
    a-nashfl.ads<libgnat/a-nashfl__wraplf.ads \
    s-osinte.adb<libgnarl/s-osinte__vxworks.adb \
    s-osinte.ads<libgnarl/s-osinte__vxworks.ads \
!   s-inmaop.adb<libgnarl/s-inmaop__hwint.adb \
    s-intman.ads<libgnarl/s-intman__vxworks.ads \
    s-intman.adb<libgnarl/s-intman__vxworks.adb \
!   s-osprim.adb<libgnat/s-osprim__posix.adb \
    s-parame.ads<libgnat/s-parame__vxworks.ads \
    s-parame.adb<libgnat/s-parame__vxworks.adb \
    s-stchop.ads<libgnat/s-stchop__limit.ads \
*************** ifeq ($(strip $(filter-out %86 x86_64 wr
*** 1429,1446 ****
            s-vxwext.ads<libgnarl/s-vxwext__kernel.ads \
            s-vxwext.adb<libgnarl/s-vxwext__kernel.adb \
            system.ads<libgnat/$(SVX)-x86-kernel.ads
-         else
-           LIBGNAT_TARGET_PAIRS += \
-           system.ads<libgnat/system-vxworks-x86.ads
          endif
        endif
  
!       EXTRA_GNATRTL_NONTASKING_OBJS += i-vxwork.o i-vxwoio.o
      endif
    endif
  
    EXTRA_GNATRTL_NONTASKING_OBJS += s-stchop.o
!   EXTRA_GNATRTL_TASKING_OBJS += i-vxinco.o s-vxwork.o s-vxwext.o
  
    EXTRA_LIBGNAT_OBJS+=vx_stack_info.o
  
--- 1313,1327 ----
            s-vxwext.ads<libgnarl/s-vxwext__kernel.ads \
            s-vxwext.adb<libgnarl/s-vxwext__kernel.adb \
            system.ads<libgnat/$(SVX)-x86-kernel.ads
          endif
        endif
  
!       EXTRA_GNATRTL_NONTASKING_OBJS += i-vxinco.o i-vxwork.o i-vxwoio.o
      endif
    endif
  
    EXTRA_GNATRTL_NONTASKING_OBJS += s-stchop.o
!   EXTRA_GNATRTL_TASKING_OBJS += s-vxwork.o s-vxwext.o
  
    EXTRA_LIBGNAT_OBJS+=vx_stack_info.o
  
*************** ifeq ($(strip $(filter-out aarch64 arm%
*** 1465,1477 ****
    a-naliop.ads<libgnat/a-naliop__nolibm.ads \
    a-nuaufl.ads<libgnat/a-nuaufl__wraplf.ads \
    a-nashfl.ads<libgnat/a-nashfl__wraplf.ads \
!   s-inmaop.adb<libgnarl/s-inmaop__vxworks.adb \
    s-interr.adb<libgnarl/s-interr__vxworks.adb \
    s-intman.ads<libgnarl/s-intman__vxworks.ads \
    s-intman.adb<libgnarl/s-intman__vxworks.adb \
    s-osinte.adb<libgnarl/s-osinte__vxworks.adb \
    s-osinte.ads<libgnarl/s-osinte__vxworks.ads \
!   s-osprim.adb<libgnat/s-osprim__vxworks.adb \
    s-parame.ads<libgnat/s-parame__vxworks.ads \
    s-parame.adb<libgnat/s-parame__vxworks.adb \
    s-stchop.ads<libgnat/s-stchop__limit.ads \
--- 1346,1358 ----
    a-naliop.ads<libgnat/a-naliop__nolibm.ads \
    a-nuaufl.ads<libgnat/a-nuaufl__wraplf.ads \
    a-nashfl.ads<libgnat/a-nashfl__wraplf.ads \
!   s-inmaop.adb<libgnarl/s-inmaop__hwint.adb \
    s-interr.adb<libgnarl/s-interr__vxworks.adb \
    s-intman.ads<libgnarl/s-intman__vxworks.ads \
    s-intman.adb<libgnarl/s-intman__vxworks.adb \
    s-osinte.adb<libgnarl/s-osinte__vxworks.adb \
    s-osinte.ads<libgnarl/s-osinte__vxworks.ads \
!   s-osprim.adb<libgnat/s-osprim__posix.adb \
    s-parame.ads<libgnat/s-parame__vxworks.ads \
    s-parame.adb<libgnat/s-parame__vxworks.adb \
    s-stchop.ads<libgnat/s-stchop__limit.ads \
*************** ifeq ($(strip $(filter-out aarch64 arm%
*** 1482,1488 ****
    g-socthi.ads<libgnat/g-socthi__vxworks.ads \
    g-socthi.adb<libgnat/g-socthi__vxworks.adb \
    g-sopowa.adb<libgnat/g-sopowa__posix.adb \
!   g-stsifd.adb<libgnat/g-stsifd__sockets.adb
  
    ifeq ($(strip $(filter-out aarch64, $(target_cpu))),)
      ARCH_STR=aarch64
--- 1363,1371 ----
    g-socthi.ads<libgnat/g-socthi__vxworks.ads \
    g-socthi.adb<libgnat/g-socthi__vxworks.adb \
    g-sopowa.adb<libgnat/g-sopowa__posix.adb \
!   g-stsifd.adb<libgnat/g-stsifd__sockets.adb \
!   $(ATOMICS_TARGET_PAIRS) \
!   $(ATOMICS_BUILTINS_TARGET_PAIRS)
  
    ifeq ($(strip $(filter-out aarch64, $(target_cpu))),)
      ARCH_STR=aarch64
*************** ifeq ($(strip $(filter-out aarch64 arm%
*** 1490,1496 ****
      EH_MECHANISM=-gcc
      SIGTRAMP_OBJ=sigtramp-vxworks.o
      LIBGNAT_TARGET_PAIRS += $(GNATRTL_128BIT_PAIRS) \
!       a-nallfl.ads<libgnat/a-nallfl__wraplf.ads
      EXTRA_GNATRTL_NONTASKING_OBJS += $(GNATRTL_128BIT_OBJS)
    else
      ifeq ($(strip $(filter-out arm%, $(target_cpu))),)
--- 1373,1380 ----
      EH_MECHANISM=-gcc
      SIGTRAMP_OBJ=sigtramp-vxworks.o
      LIBGNAT_TARGET_PAIRS += $(GNATRTL_128BIT_PAIRS) \
!       a-nallfl.ads<libgnat/a-nallfl__wraplf.ads \
!       s-dorepr.adb<libgnat/s-dorepr__fma.adb
      EXTRA_GNATRTL_NONTASKING_OBJS += $(GNATRTL_128BIT_OBJS)
    else
      ifeq ($(strip $(filter-out arm%, $(target_cpu))),)
*************** ifeq ($(strip $(filter-out aarch64 %qnx,
*** 1611,1616 ****
--- 1495,1501 ----
    LIBGNAT_TARGET_PAIRS = \
    a-intnam.ads<libgnarl/a-intnam__qnx.ads \
    a-nallfl.ads<libgnat/a-nallfl__wraplf.ads \
+   s-dorepr.adb<libgnat/s-dorepr__fma.adb \
    s-inmaop.adb<libgnarl/s-inmaop__posix.adb \
    s-intman.adb<libgnarl/s-intman__qnx.adb \
    s-osinte.adb<libgnarl/s-osinte__qnx.adb \
*************** ifeq ($(strip $(filter-out %aarch64 free
*** 1878,1883 ****
--- 1763,1769 ----
    LIBGNAT_TARGET_PAIRS = \
    a-intnam.ads<libgnarl/a-intnam__freebsd.ads \
    a-nallfl.ads<libgnat/a-nallfl__wraplf.ads \
+   s-dorepr.adb<libgnat/s-dorepr__fma.adb \
    s-inmaop.adb<libgnarl/s-inmaop__posix.adb \
    s-intman.adb<libgnarl/s-intman__posix.adb \
    s-mudido.adb<libgnarl/s-mudido__affinity.adb \
*************** ifeq ($(strip $(filter-out lynxos178%,$(
*** 2144,2149 ****
--- 2030,2036 ----
  
    ifeq ($(strip $(filter-out lynxos178e,$(target_os))),)
      LIBGNAT_TARGET_PAIRS += \
+     s-parame.ads<libgnat/s-parame__posix2008.ads \
      s-osinte.ads<libgnarl/s-osinte__lynxos178e.ads \
      s-osprim.adb<libgnat/s-osprim__posix2008.adb \
      s-tracon.adb<hie/s-tracon__ppc-eabi.adb
*************** ifeq ($(strip $(filter-out rtems%,$(targ
*** 2157,2183 ****
    LIBGNAT_TARGET_PAIRS = \
    system.ads<libgnat/system-rtems.ads \
    a-intnam.ads<libgnarl/a-intnam__rtems.ads \
!   s-inmaop.adb<libgnarl/s-inmaop__posix.adb \
!   s-intman.adb<libgnarl/s-intman__posix.adb \
    s-osinte.adb<libgnarl/s-osinte__rtems.adb \
    s-osinte.ads<libgnarl/s-osinte__rtems.ads \
    s-osprim.adb<libgnat/s-osprim__rtems.adb \
    s-parame.adb<libgnat/s-parame__rtems.adb \
!   s-taprop.adb<libgnarl/s-taprop__posix.adb \
    s-taspri.ads<libgnarl/s-taspri__posix.ads \
    s-tpopsp.adb<libgnarl/s-tpopsp__tls.adb \
-   s-stchop.adb<libgnat/s-stchop__rtems.adb \
    s-interr.adb<libgnarl/s-interr__hwint.adb
  
    ifeq ($(strip $(filter-out arm%, $(target_cpu))),)
      EH_MECHANISM=-arm
    else
      EH_MECHANISM=-gcc
    endif
  
!   ifeq ($(strip $(filter-out riscv%,$(target_cpu))),)
      LIBGNAT_TARGET_PAIRS += a-nallfl.ads<libgnat/a-nallfl__wraplf.ads
    endif
  endif
  
  # PikeOS
--- 2044,2085 ----
    LIBGNAT_TARGET_PAIRS = \
    system.ads<libgnat/system-rtems.ads \
    a-intnam.ads<libgnarl/a-intnam__rtems.ads \
!   s-inmaop.adb<libgnarl/s-inmaop__hwint.adb \
!   s-intman.adb<libgnarl/s-intman__rtems.adb \
!   s-intman.ads<libgnarl/s-intman__rtems.ads \
    s-osinte.adb<libgnarl/s-osinte__rtems.adb \
    s-osinte.ads<libgnarl/s-osinte__rtems.ads \
    s-osprim.adb<libgnat/s-osprim__rtems.adb \
    s-parame.adb<libgnat/s-parame__rtems.adb \
!   s-parame.ads<libgnat/s-parame__posix2008.ads \
!   s-taprop.adb<libgnarl/s-taprop__rtems.adb \
    s-taspri.ads<libgnarl/s-taspri__posix.ads \
    s-tpopsp.adb<libgnarl/s-tpopsp__tls.adb \
    s-interr.adb<libgnarl/s-interr__hwint.adb
  
+   EXTRA_GNATRTL_NONTASKING_OBJS += s-stchop.o
+ 
    ifeq ($(strip $(filter-out arm%, $(target_cpu))),)
      EH_MECHANISM=-arm
    else
      EH_MECHANISM=-gcc
    endif
  
!   ifeq ($(strip $(filter-out aarch64%,$(target_cpu))),)
!     LIBGNAT_TARGET_PAIRS += $(GNATRTL_128BIT_PAIRS)
!     EXTRA_GNATRTL_NONTASKING_OBJS += $(GNATRTL_128BIT_OBJS)
!   endif
! 
!   ifeq ($(strip $(filter-out aarch64% riscv%,$(target_cpu))),)
      LIBGNAT_TARGET_PAIRS += a-nallfl.ads<libgnat/a-nallfl__wraplf.ads
    endif
+ 
+   # Target CPUs that support atomic primitives
+   ifeq ($(strip $(filter-out aarch64%,$(target_cpu))),)
+      LIBGNAT_TARGET_PAIRS += \
+        $(ATOMICS_TARGET_PAIRS) \
+        $(ATOMICS_BUILTINS_TARGET_PAIRS)
+   endif
  endif
  
  # PikeOS
*************** ifeq ($(strip $(filter-out powerpc% linu
*** 2342,2347 ****
--- 2244,2250 ----
    a-nallfl.ads<libgnat/a-nallfl__wraplf.ads \
    a-synbar.adb<libgnarl/a-synbar__posix.adb \
    a-synbar.ads<libgnarl/a-synbar__posix.ads \
+   s-dorepr.adb<libgnat/s-dorepr__fma.adb \
    s-inmaop.adb<libgnarl/s-inmaop__posix.adb \
    s-intman.adb<libgnarl/s-intman__posix.adb \
    s-linux.ads<libgnarl/s-linux.ads \
*************** ifeq ($(strip $(filter-out aarch64% linu
*** 2425,2433 ****
--- 2328,2338 ----
    a-nallfl.ads<libgnat/a-nallfl__wraplf.ads \
    a-synbar.adb<libgnarl/a-synbar__posix.adb \
    a-synbar.ads<libgnarl/a-synbar__posix.ads \
+   s-dorepr.adb<libgnat/s-dorepr__fma.adb \
    s-inmaop.adb<libgnarl/s-inmaop__posix.adb \
    s-intman.adb<libgnarl/s-intman__posix.adb \
    s-linux.ads<libgnarl/s-linux.ads \
+   $(TRASYM_DWARF_UNIX_PAIRS) \
    s-mudido.adb<libgnarl/s-mudido__affinity.adb \
    s-osinte.ads<libgnarl/s-osinte__linux.ads \
    s-osinte.adb<libgnarl/s-osinte__posix.adb \
*************** ifeq ($(strip $(filter-out aarch64% linu
*** 2444,2450 ****
  
    TOOLS_TARGET_PAIRS = indepsw.adb<indepsw-gnu.adb
  
!   EXTRA_GNATRTL_NONTASKING_OBJS = $(GNATRTL_128BIT_OBJS)
    EXTRA_GNATRTL_TASKING_OBJS=s-linux.o a-exetim.o
    EH_MECHANISM=-gcc
    THREADSLIB=-lpthread -lrt
--- 2349,2356 ----
  
    TOOLS_TARGET_PAIRS = indepsw.adb<indepsw-gnu.adb
  
!   EXTRA_GNATRTL_NONTASKING_OBJS += $(GNATRTL_128BIT_OBJS) \
! 				   $(TRASYM_DWARF_UNIX_OBJS)
    EXTRA_GNATRTL_TASKING_OBJS=s-linux.o a-exetim.o
    EH_MECHANISM=-gcc
    THREADSLIB=-lpthread -lrt
*************** ifeq ($(strip $(filter-out %ia64 linux%,
*** 2584,2589 ****
--- 2490,2496 ----
    a-nuauco.ads<libgnat/a-nuauco__x86.ads \
    a-synbar.adb<libgnarl/a-synbar__posix.adb \
    a-synbar.ads<libgnarl/a-synbar__posix.ads \
+   s-dorepr.adb<libgnat/s-dorepr__fma.adb \
    s-inmaop.adb<libgnarl/s-inmaop__posix.adb \
    s-intman.adb<libgnarl/s-intman__posix.adb \
    s-linux.ads<libgnarl/s-linux.ads \
*************** endif
*** 2620,2625 ****
--- 2527,2533 ----
  ifeq ($(strip $(filter-out ia64% hp hpux%,$(target_cpu) $(target_vendor) $(target_os))),)
    LIBGNAT_TARGET_PAIRS = \
    a-intnam.ads<libgnarl/a-intnam__hpux.ads \
+   s-dorepr.adb<libgnat/s-dorepr__fma.adb \
    s-inmaop.adb<libgnarl/s-inmaop__posix.adb \
    s-intman.adb<libgnarl/s-intman__posix.adb \
    s-osinte.adb<libgnarl/s-osinte__posix.adb \
*************** ifeq ($(strip $(filter-out %x32 linux%,$
*** 2737,2742 ****
--- 2645,2651 ----
    s-osinte.ads<libgnarl/s-osinte__linux.ads \
    s-osinte.adb<libgnarl/s-osinte__x32.adb \
    s-osprim.adb<libgnat/s-osprim__x32.adb \
+   s-parame.ads<libgnat/s-parame__posix2008.ads \
    s-taprop.adb<libgnarl/s-taprop__linux.adb \
    s-tasinf.ads<libgnarl/s-tasinf__linux.ads \
    s-tasinf.adb<libgnarl/s-tasinf__linux.adb \
*************** ifeq ($(strip $(filter-out riscv% linux%
*** 2767,2772 ****
--- 2676,2682 ----
    LIBGNAT_TARGET_PAIRS = \
    a-intnam.ads<libgnarl/a-intnam__linux.ads \
    a-nallfl.ads<libgnat/a-nallfl__wraplf.ads \
+   s-dorepr.adb<libgnat/s-dorepr__fma.adb \
    s-inmaop.adb<libgnarl/s-inmaop__posix.adb \
    s-intman.adb<libgnarl/s-intman__posix.adb \
    s-linux.ads<libgnarl/s-linux__riscv.ads \
*************** ifeq ($(strip $(filter-out darwin%,$(tar
*** 2896,2901 ****
--- 2806,2812 ----
      LIBGNAT_TARGET_PAIRS += \
        a-nallfl.ads<libgnat/a-nallfl__wraplf.ads \
        s-intman.adb<libgnarl/s-intman__susv3.adb \
+       s-dorepr.adb<libgnat/s-dorepr__fma.adb \
        s-osprim.adb<libgnat/s-osprim__darwin.adb \
        $(ATOMICS_TARGET_PAIRS) \
        $(ATOMICS_BUILTINS_TARGET_PAIRS) \
*************** ifeq ($(strip $(filter-out linux%,$(targ
*** 2939,2944 ****
--- 2850,2862 ----
      g-sercom.adb<libgnat/g-sercom__linux.adb
  endif
  
+ # Turn on shared gnatlib for specific vx7r2 targets for RTP runtimes. Once
+ # all targets are ported the target_cpu selector can be removed.
+ ifeq ($(strip $(filter-out vxworks7r2 powerpc64 x86_64 rtp rtp-smp, $(target_os) $(target_cpu) $(THREAD_KIND))),)
+     GNATLIB_SHARED = gnatlib-shared-dual
+     LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+ 
  LIBGNAT_TARGET_PAIRS += \
    interfac.ads<libgnat/interfac__2020.ads
  
*************** GNATRTL_OBJS = $(GNATRTL_NONTASKING_OBJS
*** 2973,2979 ****
  ADA_INCLUDE_SRCS =\
   libgnat/ada.ads libgnat/calendar.ads libgnat/directio.ads libgnat/gnat.ads libgnat/interfac.ads libgnat/ioexcept.ads \
   libgnat/machcode.ads libgnat/text_io.ads libgnat/unchconv.ads libgnat/unchdeal.ads \
!  libgnat/sequenio.ads libgnat/system.ads libgnat/memtrack.adb \
   libgna*/*.gpr \
   libgnat/a-[a-o]*.adb libgnat/a-[a-o]*.ads \
   libgnat/a-[p-z]*.adb libgnat/a-[p-z]*.ads \
--- 2891,2897 ----
  ADA_INCLUDE_SRCS =\
   libgnat/ada.ads libgnat/calendar.ads libgnat/directio.ads libgnat/gnat.ads libgnat/interfac.ads libgnat/ioexcept.ads \
   libgnat/machcode.ads libgnat/text_io.ads libgnat/unchconv.ads libgnat/unchdeal.ads \
!  libgnat/sequenio.ads libgnat/memtrack.adb \
   libgna*/*.gpr \
   libgnat/a-[a-o]*.adb libgnat/a-[a-o]*.ads \
   libgnat/a-[p-z]*.adb libgnat/a-[p-z]*.ads \
*************** ADA_EXCLUDE_SRCS =\
*** 2993,3013 ****
    g-altive.ads g-alveop.adb g-alveop.ads g-alvety.ads g-alvevi.ads \
    g-intpri.ads g-regist.adb g-regist.ads g-sse.ads    g-ssvety.ads \
    i-vxinco.adb i-vxinco.ads i-vxwoio.adb i-vxwoio.ads i-vxwork.ads \
!   s-bb.ads     s-bbbosu.ads s-bbcaco.ads s-bbcppr.ads s-bbexti.adb \
!   s-bbexti.ads s-bbinte.adb s-bbinte.ads s-bbprot.adb s-bbprot.ads \
!   s-bbsle3.ads s-bbsuer.ads s-bbsule.ads s-bbthqu.adb s-bbthqu.ads \
!   s-bbthre.adb s-bbthre.ads s-bbtiev.adb s-bbtiev.ads s-bbtime.adb \
!   s-bbtime.ads s-bcprmu.adb s-bcprmu.ads s-btstch.adb s-btstch.ads \
!   s-gcc.adb    s-gcc.ads    s-gccdiv.adb s-gccdiv.ads \
!   s-gccshi.adb s-gccshi.ads \
!   s-init.ads   s-init.adb   s-linux.ads  s-macres.ads \
!   s-memcom.adb s-memcom.ads s-memmov.adb s-memmov.ads s-memset.adb \
!   s-memset.ads s-mufalo.adb s-mufalo.ads s-musplo.adb s-musplo.ads \
!   s-sam4.ads   s-sopco3.adb s-sopco3.ads s-sopco4.adb s-sopco4.ads \
!   s-sopco5.adb s-sopco5.ads s-stchop.ads s-stchop.adb s-stm32.ads \
    s-strcom.adb s-strcom.ads s-thread.ads \
-   s-vxwext.adb s-vxwext.ads \
-   s-win32.ads  s-winext.ads
  
  # ADA_EXCLUDE_SRCS without the sources used by the target
  ADA_EXCLUDE_FILES=$(filter-out \
--- 2911,2919 ----
    g-altive.ads g-alveop.adb g-alveop.ads g-alvety.ads g-alvevi.ads \
    g-intpri.ads g-regist.adb g-regist.ads g-sse.ads    g-ssvety.ads \
    i-vxinco.adb i-vxinco.ads i-vxwoio.adb i-vxwoio.ads i-vxwork.ads \
!   s-linux.ads  s-vxwext.adb s-vxwext.ads s-win32.ads  s-winext.ads \
!   s-stchop.ads s-stchop.adb \
    s-strcom.adb s-strcom.ads s-thread.ads \
  
  # ADA_EXCLUDE_SRCS without the sources used by the target
  ADA_EXCLUDE_FILES=$(filter-out \
*************** setup-rts: force
*** 3069,3075 ****
  
  ADA_TARGET_PROPERTIES = -gnatet=ada_target_properties
  
! system.o  : system.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< \
  	  $(ADA_TARGET_PROPERTIES) \
  	  $(OUTPUT_OPTION)
--- 2975,2981 ----
  
  ADA_TARGET_PROPERTIES = -gnatet=ada_target_properties
  
! system.o: system.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< \
  	  $(ADA_TARGET_PROPERTIES) \
  	  $(OUTPUT_OPTION)
*************** system.o  : system.ads
*** 3078,3084 ****
  # frames to be skipped when computing a call chain is not modified by
  # optimization. We don't want inlining, either.
  
! s-traceb.o  : s-traceb.adb s-traceb.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) \
  	  $(NO_INLINE_ADAFLAGS) $(NO_SIBLING_ADAFLAGS) $(ADA_INCLUDES) $< \
  	  $(OUTPUT_OPTION)
--- 2984,2990 ----
  # frames to be skipped when computing a call chain is not modified by
  # optimization. We don't want inlining, either.
  
! s-traceb.o: s-traceb.adb s-traceb.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) \
  	  $(NO_INLINE_ADAFLAGS) $(NO_SIBLING_ADAFLAGS) $(ADA_INCLUDES) $< \
  	  $(OUTPUT_OPTION)
*************** s-traceb.o  : s-traceb.adb s-traceb.ads
*** 3086,3092 ****
  # Compile s-tasdeb.o without optimization and with debug info so that it is
  # always possible to set conditional breakpoints on tasks.
  
! s-tasdeb.o  : s-tasdeb.adb s-tasdeb.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 $(ADA_INCLUDES) \
  	  $< $(OUTPUT_OPTION)
  
--- 2992,2998 ----
  # Compile s-tasdeb.o without optimization and with debug info so that it is
  # always possible to set conditional breakpoints on tasks.
  
! s-tasdeb.o: s-tasdeb.adb s-tasdeb.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 $(ADA_INCLUDES) \
  	  $< $(OUTPUT_OPTION)
  
*************** s-tasdeb.o  : s-tasdeb.adb s-tasdeb.ads
*** 3096,3102 ****
  # possible to set conditional breakpoints on exceptions.
  # use -O1 otherwise gdb isn't able to get a full backtrace on mips targets.
  
! a-except.o  : a-except.adb a-except.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) -O1 $(FORCE_DEBUG_ADAFLAGS) \
  	  $(NO_INLINE_ADAFLAGS) $(NO_REORDER_ADAFLAGS) $(ADA_INCLUDES) \
  	  $< $(OUTPUT_OPTION)
--- 3002,3008 ----
  # possible to set conditional breakpoints on exceptions.
  # use -O1 otherwise gdb isn't able to get a full backtrace on mips targets.
  
! a-except.o: a-except.adb a-except.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) -O1 $(FORCE_DEBUG_ADAFLAGS) \
  	  $(NO_INLINE_ADAFLAGS) $(NO_REORDER_ADAFLAGS) $(ADA_INCLUDES) \
  	  $< $(OUTPUT_OPTION)
*************** a-except.o  : a-except.adb a-except.ads
*** 3105,3132 ****
  # debugger set breakpoints and inspect subprogram parameters on exception
  # related events.
  
! s-excdeb.o  : s-excdeb.adb s-excdeb.ads s-except.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 \
  	  $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
  
  # Force debugging information on s-assert.o so that it is always
  # possible to set breakpoint on assert failures.
  
! s-assert.o  : s-assert.adb s-assert.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) $(ADA_INCLUDES) \
  	  $< $(OUTPUT_OPTION)
  
  # Force debugging information on a-tags.o so that the debugger can find
  # the description of Ada.Tags.Type_Specific_Data.
  
! a-tags.o  : a-tags.adb a-tags.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) $(ADA_INCLUDES) \
  	  $< $(OUTPUT_OPTION)
  
  # Force no sibling call optimization on s-memory.o to avoid turning the
  # tail recursion in Alloc into a loop that confuses branch prediction.
  
! s-memory.o  : s-memory.adb s-memory.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(NO_SIBLING_ADAFLAGS) $(ADA_INCLUDES) \
  	  $< $(OUTPUT_OPTION)
  
--- 3011,3038 ----
  # debugger set breakpoints and inspect subprogram parameters on exception
  # related events.
  
! s-excdeb.o: s-excdeb.adb s-excdeb.ads s-except.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 \
  	  $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
  
  # Force debugging information on s-assert.o so that it is always
  # possible to set breakpoint on assert failures.
  
! s-assert.o: s-assert.adb s-assert.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) $(ADA_INCLUDES) \
  	  $< $(OUTPUT_OPTION)
  
  # Force debugging information on a-tags.o so that the debugger can find
  # the description of Ada.Tags.Type_Specific_Data.
  
! a-tags.o: a-tags.adb a-tags.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) $(ADA_INCLUDES) \
  	  $< $(OUTPUT_OPTION)
  
  # Force no sibling call optimization on s-memory.o to avoid turning the
  # tail recursion in Alloc into a loop that confuses branch prediction.
  
! s-memory.o: s-memory.adb s-memory.ads
  	$(ADAC) -c $(ALL_ADAFLAGS) $(NO_SIBLING_ADAFLAGS) $(ADA_INCLUDES) \
  	  $< $(OUTPUT_OPTION)
  
diff -Nrcpad gcc-11.3.0/gcc/ada/ada_get_targ.adb gcc-12.1.0/gcc/ada/ada_get_targ.adb
*** gcc-11.3.0/gcc/ada/ada_get_targ.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/ada_get_targ.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Get_Targ is
*** 214,220 ****
  
     function Get_Max_Unaligned_Field return Pos is
     begin
!       return 64;  -- Can be different on some targets (e.g., AAMP)
     end Get_Max_Unaligned_Field;
  
     -----------------------------
--- 214,220 ----
  
     function Get_Max_Unaligned_Field return Pos is
     begin
!       return 64;  -- Can be different on some targets
     end Get_Max_Unaligned_Field;
  
     -----------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/adabkend.adb gcc-12.1.0/gcc/ada/adabkend.adb
*** gcc-11.3.0/gcc/ada/adabkend.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/adabkend.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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,36 ****
  
  --  This is the version of the Back_End package for back ends written in Ada
  
! with Atree;    use Atree;
  with Debug;
  with Lib;
! with Opt;      use Opt;
! with Output;   use Output;
! with Osint;    use Osint;
! with Osint.C;  use Osint.C;
! with Switch.C; use Switch.C;
! with Types;    use Types;
  
  with System.OS_Lib; use System.OS_Lib;
  
--- 22,37 ----
  
  --  This is the version of the Back_End package for back ends written in Ada
  
! with Atree;         use Atree;
! with Backend_Utils; use Backend_Utils;
  with Debug;
  with Lib;
! with Opt;           use Opt;
! with Output;        use Output;
! with Osint;         use Osint;
! with Osint.C;       use Osint.C;
! with Switch.C;      use Switch.C;
! with Types;         use Types;
  
  with System.OS_Lib; use System.OS_Lib;
  
*************** package body Adabkend is
*** 182,229 ****
  
              return;
  
-          --  Special check, the back-end switch -fno-inline also sets the
-          --  front end flags to entirely inhibit all inlining. So we store it
-          --  and set the appropriate flags.
- 
-          elsif Switch_Chars (First .. Last) = "fno-inline" then
-             Lib.Store_Compilation_Switch (Switch_Chars);
-             Opt.Disable_FE_Inline := True;
-             return;
- 
-          --  Similar processing for -fpreserve-control-flow
- 
-          elsif Switch_Chars (First .. Last) = "fpreserve-control-flow" then
-             Lib.Store_Compilation_Switch (Switch_Chars);
-             Opt.Suppress_Control_Flow_Optimizations := True;
-             return;
- 
-          --  Recognize -gxxx switches
- 
-          elsif Switch_Chars (First) = 'g' then
-             Debugger_Level := 2;
- 
-             if First < Last then
-                case Switch_Chars (First + 1) is
-                   when '0' =>
-                      Debugger_Level := 0;
-                   when '1' =>
-                      Debugger_Level := 1;
-                   when '2' =>
-                      Debugger_Level := 2;
-                   when '3' =>
-                      Debugger_Level := 3;
-                   when others =>
-                      null;
-                end case;
-             end if;
- 
-          elsif Switch_Chars (First .. Last) = "S" then
-             Generate_Asm := True;
- 
           --  Ignore all other back-end switches
  
!          elsif Is_Back_End_Switch (Switch_Chars) then
              null;
  
           --  Give error for junk switch
--- 183,193 ----
  
              return;
  
           --  Ignore all other back-end switches
  
!          elsif Scan_Common_Back_End_Switch (Switch_Chars)
!             or else Is_Back_End_Switch (Switch_Chars)
!          then
              null;
  
           --  Give error for junk switch
diff -Nrcpad gcc-11.3.0/gcc/ada/adabkend.ads gcc-12.1.0/gcc/ada/adabkend.ads
*** gcc-11.3.0/gcc/ada/adabkend.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/adabkend.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/adadecode.c gcc-12.1.0/gcc/ada/adadecode.c
*** gcc-11.3.0/gcc/ada/adadecode.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/adadecode.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 2001-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 2001-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/adadecode.h gcc-12.1.0/gcc/ada/adadecode.h
*** gcc-11.3.0/gcc/ada/adadecode.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/adadecode.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *           Copyright (C) 2001-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *           Copyright (C) 2001-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/adaint.c gcc-12.1.0/gcc/ada/adaint.c
*** gcc-11.3.0/gcc/ada/adaint.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/adaint.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
***************
*** 98,103 ****
--- 98,104 ----
  
  #ifdef __QNX__
  #include <sys/syspage.h>
+ #include <sys/time.h>
  #endif
  
  #ifdef IN_RTS
*************** extern long long __gnat_file_time(char*
*** 1570,1576 ****
  /* Set the file time stamp.  */
  
  void
! __gnat_set_file_time_name (char *name, time_t time_stamp)
  {
  #if defined (__vxworks)
  
--- 1571,1577 ----
  /* Set the file time stamp.  */
  
  void
! __gnat_set_file_time_name (char *name, OS_Time time_stamp)
  {
  #if defined (__vxworks)
  
*************** __gnat_set_file_time_name (char *name, t
*** 1606,1612 ****
    time_t t;
  
    /* Set modification time to requested time.  */
!   utimbuf.modtime = time_stamp;
  
    /* Set access time to now in local time.  */
    t = time (NULL);
--- 1607,1613 ----
    time_t t;
  
    /* Set modification time to requested time.  */
!   utimbuf.modtime = (time_t) time_stamp;
  
    /* Set access time to now in local time.  */
    t = time (NULL);
*************** __gnat_portable_spawn (char *args[] ATTR
*** 2423,2431 ****
    if (pid == 0)
      {
        /* The child. */
!       __gnat_in_child_after_fork = 1;
!       if (execv (args[0], MAYBE_TO_PTR32 (args)) != 0)
! 	_exit (1);
      }
  
    /* The parent.  */
--- 2424,2433 ----
    if (pid == 0)
      {
        /* The child. */
!       execv (args[0], MAYBE_TO_PTR32 (args));
! 
!       /* execv() returns only on error */
!       _exit (1);
      }
  
    /* The parent.  */
*************** __gnat_number_of_cpus (void)
*** 2486,2492 ****
  {
    int cores = 1;
  
! #ifdef _SC_NPROCESSORS_ONLN
    cores = (int) sysconf (_SC_NPROCESSORS_ONLN);
  
  #elif defined (__QNX__)
--- 2488,2494 ----
  {
    int cores = 1;
  
! #if defined (_SC_NPROCESSORS_ONLN)
    cores = (int) sysconf (_SC_NPROCESSORS_ONLN);
  
  #elif defined (__QNX__)
*************** __gnat_portable_no_block_spawn (char *ar
*** 2822,2829 ****
    if (pid == 0)
      {
        /* The child.  */
!       if (execv (args[0], MAYBE_TO_PTR32 (args)) != 0)
! 	_exit (1);
      }
  
    return pid;
--- 2824,2833 ----
    if (pid == 0)
      {
        /* The child.  */
!       execv (args[0], MAYBE_TO_PTR32 (args));
! 
!       /* execv() returns only on error */
!       _exit (1);
      }
  
    return pid;
*************** void
*** 3555,3577 ****
  __gnat_kill (int pid, int sig, int close ATTRIBUTE_UNUSED)
  {
  #if defined(_WIN32)
!   HANDLE h = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid);
!   if (h == NULL)
!     return;
!   if (sig == 9)
!     {
!       TerminateProcess (h, 1);
!     }
!   else if (sig == SIGINT)
!     GenerateConsoleCtrlEvent (CTRL_C_EVENT, pid);
!   else if (sig == SIGBREAK)
!     GenerateConsoleCtrlEvent (CTRL_BREAK_EVENT, pid);
!   /* ??? The last two alternatives don't really work. SIGBREAK requires setting
!      up process groups at start time which we don't do; treating SIGINT is just
!      not possible apparently. So we really only support signal 9. Fortunately
!      that's all we use in GNAT.Expect */
  
-   CloseHandle (h);
  #elif defined (__vxworks)
    /* Not implemented */
  #else
--- 3559,3579 ----
  __gnat_kill (int pid, int sig, int close ATTRIBUTE_UNUSED)
  {
  #if defined(_WIN32)
!   HANDLE h;
! 
!   switch (sig) {
!     case 9: // SIGKILL is not declared in Windows headers
!     case SIGINT:
!     case SIGBREAK:
!     case SIGTERM:
!     case SIGABRT:
!       h = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid);
!       if (h != NULL) {
!         TerminateProcess (h, sig);
!         CloseHandle (h);
!       }
!   }
  
  #elif defined (__vxworks)
    /* Not implemented */
  #else
diff -Nrcpad gcc-11.3.0/gcc/ada/adaint.h gcc-12.1.0/gcc/ada/adaint.h
*** gcc-11.3.0/gcc/ada/adaint.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/adaint.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
*************** extern "C" {
*** 101,111 ****
  #endif
  
  /* Type corresponding to GNAT.OS_Lib.OS_Time */
- #if defined (_WIN64)
  typedef long long OS_Time;
- #else
- typedef long OS_Time;
- #endif
  
  #define __int64 long long
  GNAT_STRUCT_STAT;
--- 101,107 ----
*************** extern OS_Time __gnat_file_time_name
*** 205,211 ****
  extern OS_Time __gnat_file_time_fd                  (int);
  /* return -1 in case of error */
  
! extern void   __gnat_set_file_time_name		   (char *, time_t);
  
  extern int    __gnat_dup			            (int);
  extern int    __gnat_dup2			            (int, int);
--- 201,207 ----
  extern OS_Time __gnat_file_time_fd                  (int);
  /* return -1 in case of error */
  
! extern void   __gnat_set_file_time_name		   (char *, OS_Time);
  
  extern int    __gnat_dup			            (int);
  extern int    __gnat_dup2			            (int, int);
diff -Nrcpad gcc-11.3.0/gcc/ada/affinity.c gcc-12.1.0/gcc/ada/affinity.c
*** gcc-11.3.0/gcc/ada/affinity.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/affinity.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *            Copyright (C) 2005-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *            Copyright (C) 2005-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/ali-util.adb gcc-12.1.0/gcc/ada/ali-util.adb
*** gcc-11.3.0/gcc/ada/ali-util.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/ali-util.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body ALI.Util is
*** 249,255 ****
                      Scan_ALI
                        (F         => Afile,
                         T         => Text,
-                        Ignore_ED => False,
                         Err       => False);
  
                    Free (Text);
--- 249,254 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/ali-util.ads gcc-12.1.0/gcc/ada/ali-util.ads
*** gcc-11.3.0/gcc/ada/ali-util.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/ali-util.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/ali.adb gcc-12.1.0/gcc/ada/ali.adb
*** gcc-11.3.0/gcc/ada/ali.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/ali.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body ALI is
*** 892,901 ****
     function Scan_ALI
       (F                : File_Name_Type;
        T                : Text_Buffer_Ptr;
-       Ignore_ED        : Boolean;
        Err              : Boolean;
-       Read_Xref        : Boolean := False;
-       Read_Lines       : String  := "";
        Ignore_Lines     : String  := "X";
        Ignore_Errors    : Boolean := False;
        Directly_Scanned : Boolean := False) return ALI_Id
--- 892,898 ----
*************** package body ALI is
*** 907,913 ****
        NS_Found  : Boolean;
        First_Arg : Arg_Id;
  
!       Ignore : array (Character range 'A' .. 'Z') of Boolean;
        --  Ignore (X) is set to True if lines starting with X are to
        --  be ignored by Scan_ALI and skipped, and False if the lines
        --  are to be read and processed.
--- 904,911 ----
        NS_Found  : Boolean;
        First_Arg : Arg_Id;
  
!       Ignore : array (Character range 'A' .. 'Z') of Boolean :=
!                  (others => False);
        --  Ignore (X) is set to True if lines starting with X are to
        --  be ignored by Scan_ALI and skipped, and False if the lines
        --  are to be read and processed.
*************** package body ALI is
*** 965,983 ****
        --  special characters are included in the returned name.
  
        function Get_Name
!         (Ignore_Spaces  : Boolean := False;
!          Ignore_Special : Boolean := False;
           May_Be_Quoted  : Boolean := False) return Name_Id;
        --  Skip blanks, then scan out a name (name is left in Name_Buffer with
        --  length in Name_Len, as well as being returned in Name_Id form).
        --  If Lower is set to True then the Name_Buffer will be converted to
        --  all lower case, for systems where file names are not case sensitive.
        --  This ensures that gnatbind works correctly regardless of the case
!       --  of the file name on all systems. The termination condition depends
!       --  on the settings of Ignore_Spaces and Ignore_Special:
        --
!       --    If Ignore_Spaces is False (normal case), then scan is terminated
!       --    by the normal end of field condition (EOL, space, horizontal tab)
        --
        --    If Ignore_Special is False (normal case), the scan is terminated by
        --    a typeref bracket or an equal sign except for the special case of
--- 963,980 ----
        --  special characters are included in the returned name.
  
        function Get_Name
!         (Ignore_Special : Boolean := False;
           May_Be_Quoted  : Boolean := False) return Name_Id;
        --  Skip blanks, then scan out a name (name is left in Name_Buffer with
        --  length in Name_Len, as well as being returned in Name_Id form).
        --  If Lower is set to True then the Name_Buffer will be converted to
        --  all lower case, for systems where file names are not case sensitive.
        --  This ensures that gnatbind works correctly regardless of the case
!       --  of the file name on all systems.
        --
!       --  The scan is terminated by the normal end of field condition
!       --  (EOL, space, horizontal tab). Furthermore, the termination condition
!       --  depends on the setting of Ignore_Special:
        --
        --    If Ignore_Special is False (normal case), the scan is terminated by
        --    a typeref bracket or an equal sign except for the special case of
*************** package body ALI is
*** 988,994 ****
        --    the name is 'unquoted'. In this case Ignore_Special is ignored and
        --    assumed to be True.
        --
-       --  It is an error to set both Ignore_Spaces and Ignore_Special to True.
        --  This function handles wide characters properly.
  
        function Get_Nat return Nat;
--- 985,990 ----
*************** package body ALI is
*** 1006,1021 ****
        function Nextc return Character;
        --  Return current character without modifying pointer P
  
-       procedure Get_Typeref
-         (Current_File_Num : Sdep_Id;
-          Ref             : out Tref_Kind;
-          File_Num        : out Sdep_Id;
-          Line            : out Nat;
-          Ref_Type        : out Character;
-          Col             : out Nat;
-          Standard_Entity : out Name_Id);
-       --  Parse the definition of a typeref (<...>, {...} or (...))
- 
        procedure Scan_Invocation_Graph_Line;
        --  Parse a single line that encodes a piece of the invocation graph
  
--- 1002,1007 ----
*************** package body ALI is
*** 1252,1259 ****
        --------------
  
        function Get_Name
!         (Ignore_Spaces  : Boolean := False;
!          Ignore_Special : Boolean := False;
           May_Be_Quoted  : Boolean := False) return Name_Id
        is
           Char : Character;
--- 1238,1244 ----
        --------------
  
        function Get_Name
!         (Ignore_Special : Boolean := False;
           May_Be_Quoted  : Boolean := False) return Name_Id
        is
           Char : Character;
*************** package body ALI is
*** 1310,1316 ****
              loop
                 Add_Char_To_Name_Buffer (Getc);
  
!                exit when At_End_Of_Field and then not Ignore_Spaces;
  
                 if not Ignore_Special then
                    if Name_Buffer (1) = '"' then
--- 1295,1301 ----
              loop
                 Add_Char_To_Name_Buffer (Getc);
  
!                exit when At_End_Of_Field;
  
                 if not Ignore_Special then
                    if Name_Buffer (1) = '"' then
*************** package body ALI is
*** 1330,1337 ****
                       exit when Nextc = ',';
  
                       --  Terminate if left bracket not part of wide char
!                      --  sequence Note that we only recognize brackets
!                      --  notation so far ???
  
                       exit when Nextc = '[' and then T (P + 1) /= '"';
  
--- 1315,1321 ----
                       exit when Nextc = ',';
  
                       --  Terminate if left bracket not part of wide char
!                      --  sequence.
  
                       exit when Nextc = '[' and then T (P + 1) /= '"';
  
*************** package body ALI is
*** 1423,1516 ****
           return T;
        end Get_Stamp;
  
-       -----------------
-       -- Get_Typeref --
-       -----------------
- 
-       procedure Get_Typeref
-         (Current_File_Num : Sdep_Id;
-          Ref              : out Tref_Kind;
-          File_Num         : out Sdep_Id;
-          Line             : out Nat;
-          Ref_Type         : out Character;
-          Col              : out Nat;
-          Standard_Entity  : out Name_Id)
-       is
-          N : Nat;
-       begin
-          case Nextc is
-             when '<'    => Ref := Tref_Derived;
-             when '('    => Ref := Tref_Access;
-             when '{'    => Ref := Tref_Type;
-             when others => Ref := Tref_None;
-          end case;
- 
-          --  Case of typeref field present
- 
-          if Ref /= Tref_None then
-             P := P + 1; -- skip opening bracket
- 
-             if Nextc in 'a' .. 'z' then
-                File_Num        := No_Sdep_Id;
-                Line            := 0;
-                Ref_Type        := ' ';
-                Col             := 0;
-                Standard_Entity := Get_Name (Ignore_Spaces => True);
-             else
-                N := Get_Nat;
- 
-                if Nextc = '|' then
-                   File_Num := Sdep_Id (N + Nat (First_Sdep_Entry) - 1);
-                   P := P + 1;
-                   N := Get_Nat;
-                else
-                   File_Num := Current_File_Num;
-                end if;
- 
-                Line            := N;
-                Ref_Type        := Getc;
-                Col             := Get_Nat;
-                Standard_Entity := No_Name;
-             end if;
- 
-             --  ??? Temporary workaround for nested generics case:
-             --     4i4 Directories{1|4I9[4|6[3|3]]}
-             --  See C918-002
- 
-             declare
-                Nested_Brackets : Natural := 0;
- 
-             begin
-                loop
-                   case Nextc is
-                      when '[' =>
-                         Nested_Brackets := Nested_Brackets + 1;
-                      when ']' =>
-                         Nested_Brackets := Nested_Brackets - 1;
-                      when others =>
-                         if Nested_Brackets = 0 then
-                            exit;
-                         end if;
-                   end case;
- 
-                   Skipc;
-                end loop;
-             end;
- 
-             P := P + 1; -- skip closing bracket
-             Skip_Space;
- 
-          --  No typeref entry present
- 
-          else
-             File_Num        := No_Sdep_Id;
-             Line            := 0;
-             Ref_Type        := ' ';
-             Col             := 0;
-             Standard_Entity := No_Name;
-          end if;
-       end Get_Typeref;
- 
        ----------
        -- Getc --
        ----------
--- 1407,1412 ----
*************** package body ALI is
*** 1836,1866 ****
     begin
        First_Sdep_Entry := Sdep.Last + 1;
  
!       --  Acquire lines to be ignored
! 
!       if Read_Xref then
!          Ignore :=
!            ('T' | 'U' | 'W' | 'Y' | 'Z' | 'D' | 'X' => False, others => True);
! 
!       --  Read_Lines parameter given
! 
!       elsif Read_Lines /= "" then
!          Ignore := ('U' => False, others => True);
! 
!          for J in Read_Lines'Range loop
!             Ignore (Read_Lines (J)) := False;
!          end loop;
! 
!       --  Process Ignore_Lines parameter
! 
!       else
!          Ignore := (others => False);
! 
!          for J in Ignore_Lines'Range loop
!             pragma Assert (Ignore_Lines (J) /= 'U');
!             Ignore (Ignore_Lines (J)) := True;
!          end loop;
!       end if;
  
        --  Setup ALI Table entry with appropriate defaults
  
--- 1732,1741 ----
     begin
        First_Sdep_Entry := Sdep.Last + 1;
  
!       for J in Ignore_Lines'Range loop
!          pragma Assert (Ignore_Lines (J) /= 'U');
!          Ignore (Ignore_Lines (J)) := True;
!       end loop;
  
        --  Setup ALI Table entry with appropriate defaults
  
*************** package body ALI is
*** 3058,3066 ****
  
                          --  Store AD indication unless ignore required
  
!                         if not Ignore_ED then
!                            Withs.Table (Withs.Last).Elab_All_Desirable := True;
!                         end if;
  
                       elsif Nextc = 'E' then
                          P := P + 1;
--- 2933,2939 ----
  
                          --  Store AD indication unless ignore required
  
!                         Withs.Table (Withs.Last).Elab_All_Desirable := True;
  
                       elsif Nextc = 'E' then
                          P := P + 1;
*************** package body ALI is
*** 3077,3088 ****
                             Checkc ('D');
                             Check_At_End_Of_Field;
  
!                            --  Store ED indication unless ignore required
  
!                            if not Ignore_ED then
!                               Withs.Table (Withs.Last).Elab_Desirable :=
!                                 True;
!                            end if;
                          end if;
  
                       else
--- 2950,2958 ----
                             Checkc ('D');
                             Check_At_End_Of_Field;
  
!                            --  Store ED indication
  
!                            Withs.Table (Withs.Last).Elab_Desirable := True;
                          end if;
  
                       else
*************** package body ALI is
*** 3333,3345 ****
              Skip_Space;
              Sdep.Increment_Last;
  
-             --  In the following call, Lower is not set to True, this is either
-             --  a bug, or it deserves a special comment as to why this is so???
- 
              --  The file/path name may be quoted
  
              Sdep.Table (Sdep.Last).Sfile :=
!               Get_File_Name (May_Be_Quoted => True);
  
              Sdep.Table (Sdep.Last).Stamp := Get_Stamp;
              Sdep.Table (Sdep.Last).Dummy_Entry :=
--- 3203,3212 ----
              Skip_Space;
              Sdep.Increment_Last;
  
              --  The file/path name may be quoted
  
              Sdep.Table (Sdep.Last).Sfile :=
!               Get_File_Name (Lower => True, May_Be_Quoted => True);
  
              Sdep.Table (Sdep.Last).Stamp := Get_Stamp;
              Sdep.Table (Sdep.Last).Dummy_Entry :=
*************** package body ALI is
*** 3465,3811 ****
           Fatal_Error;
        end if;
  
!       --  If we are ignoring Xref sections we are done (we ignore all
!       --  remaining lines since only xref related lines follow X).
! 
!       if Ignore ('X') and then not Debug_Flag_X then
!          return Id;
!       end if;
! 
!       --  Loop through Xref sections
! 
!       X_Loop : loop
!          Check_Unknown_Line;
!          exit X_Loop when C /= 'X';
! 
!          --  Make new entry in section table
! 
!          Xref_Section.Increment_Last;
! 
!          Read_Refs_For_One_File : declare
!             XS : Xref_Section_Record renames
!                    Xref_Section.Table (Xref_Section.Last);
! 
!             Current_File_Num : Sdep_Id;
!             --  Keeps track of the current file number (changed by nn|)
! 
!          begin
!             XS.File_Num     := Sdep_Id (Get_Nat + Nat (First_Sdep_Entry) - 1);
!             XS.File_Name    := Get_File_Name;
!             XS.First_Entity := Xref_Entity.Last + 1;
! 
!             Current_File_Num := XS.File_Num;
! 
!             Skip_Space;
! 
!             Skip_Eol;
!             C := Nextc;
! 
!             --  Loop through Xref entities
! 
!             while C /= 'X' and then C /= EOF loop
!                Xref_Entity.Increment_Last;
! 
!                Read_Refs_For_One_Entity : declare
!                   XE : Xref_Entity_Record renames
!                          Xref_Entity.Table (Xref_Entity.Last);
!                   N  : Nat;
! 
!                   procedure Read_Instantiation_Reference;
!                   --  Acquire instantiation reference. Caller has checked
!                   --  that current character is '[' and on return the cursor
!                   --  is skipped past the corresponding closing ']'.
! 
!                   ----------------------------------
!                   -- Read_Instantiation_Reference --
!                   ----------------------------------
! 
!                   procedure Read_Instantiation_Reference is
!                      Local_File_Num : Sdep_Id := Current_File_Num;
! 
!                   begin
!                      Xref.Increment_Last;
! 
!                      declare
!                         XR : Xref_Record renames Xref.Table (Xref.Last);
! 
!                      begin
!                         P := P + 1; -- skip [
!                         N := Get_Nat;
! 
!                         if Nextc = '|' then
!                            XR.File_Num :=
!                              Sdep_Id (N + Nat (First_Sdep_Entry) - 1);
!                            Local_File_Num := XR.File_Num;
!                            P := P + 1;
!                            N := Get_Nat;
! 
!                         else
!                            XR.File_Num := Local_File_Num;
!                         end if;
! 
!                         XR.Line  := N;
!                         XR.Rtype := ' ';
!                         XR.Col   := 0;
! 
!                         --  Recursive call for next reference
! 
!                         if Nextc = '[' then
!                            pragma Warnings (Off); -- kill recursion warning
!                            Read_Instantiation_Reference;
!                            pragma Warnings (On);
!                         end if;
! 
!                         --  Skip closing bracket after recursive call
! 
!                         P := P + 1;
!                      end;
!                   end Read_Instantiation_Reference;
! 
!                --  Start of processing for Read_Refs_For_One_Entity
! 
!                begin
!                   XE.Line  := Get_Nat;
!                   XE.Etype := Getc;
!                   XE.Col   := Get_Nat;
! 
!                   case Getc is
!                      when '*' =>
!                         XE.Visibility := Global;
!                      when '+' =>
!                         XE.Visibility := Static;
!                      when others =>
!                         XE.Visibility := Other;
!                   end case;
! 
!                   XE.Entity := Get_Name;
! 
!                   --  Handle the information about generic instantiations
! 
!                   if Nextc = '[' then
!                      Skipc; --  Opening '['
!                      N := Get_Nat;
! 
!                      if Nextc /= '|' then
!                         XE.Iref_File_Num := Current_File_Num;
!                         XE.Iref_Line     := N;
!                      else
!                         XE.Iref_File_Num :=
!                           Sdep_Id (N + Nat (First_Sdep_Entry) - 1);
!                         Skipc;
!                         XE.Iref_Line := Get_Nat;
!                      end if;
! 
!                      if Getc /= ']' then
!                         Fatal_Error;
!                      end if;
! 
!                   else
!                      XE.Iref_File_Num := No_Sdep_Id;
!                      XE.Iref_Line     := 0;
!                   end if;
! 
!                   Current_File_Num := XS.File_Num;
! 
!                   --  Renaming reference is present
! 
!                   if Nextc = '=' then
!                      P := P + 1;
!                      XE.Rref_Line := Get_Nat;
! 
!                      if Getc /= ':' then
!                         Fatal_Error;
!                      end if;
! 
!                      XE.Rref_Col := Get_Nat;
! 
!                   --  No renaming reference present
! 
!                   else
!                      XE.Rref_Line := 0;
!                      XE.Rref_Col  := 0;
!                   end if;
! 
!                   Skip_Space;
! 
!                   XE.Oref_File_Num := No_Sdep_Id;
!                   XE.Tref_File_Num := No_Sdep_Id;
!                   XE.Tref          := Tref_None;
!                   XE.First_Xref    := Xref.Last + 1;
! 
!                   --  Loop to check for additional info present
! 
!                   loop
!                      declare
!                         Ref  : Tref_Kind;
!                         File : Sdep_Id;
!                         Line : Nat;
!                         Typ  : Character;
!                         Col  : Nat;
!                         Std  : Name_Id;
! 
!                      begin
!                         Get_Typeref
!                           (Current_File_Num, Ref, File, Line, Typ, Col, Std);
!                         exit when Ref = Tref_None;
! 
!                         --  Do we have an overriding procedure?
! 
!                         if Ref = Tref_Derived and then Typ = 'p' then
!                            XE.Oref_File_Num := File;
!                            XE.Oref_Line     := Line;
!                            XE.Oref_Col      := Col;
! 
!                         --  Arrays never override anything, and <> points to
!                         --  the index types instead
! 
!                         elsif Ref = Tref_Derived and then XE.Etype = 'A' then
! 
!                            --  Index types are stored in the list of references
! 
!                            Xref.Increment_Last;
! 
!                            declare
!                               XR : Xref_Record renames Xref.Table (Xref.Last);
!                            begin
!                               XR.File_Num := File;
!                               XR.Line     := Line;
!                               XR.Rtype    := Array_Index_Reference;
!                               XR.Col      := Col;
!                               XR.Name     := Std;
!                            end;
! 
!                         --  Interfaces are stored in the list of references,
!                         --  although the parent type itself is stored in XE.
!                         --  The first interface (when there are only
!                         --  interfaces) is stored in XE.Tref*)
! 
!                         elsif Ref = Tref_Derived
!                           and then Typ = 'R'
!                           and then XE.Tref_File_Num /= No_Sdep_Id
!                         then
!                            Xref.Increment_Last;
! 
!                            declare
!                               XR : Xref_Record renames Xref.Table (Xref.Last);
!                            begin
!                               XR.File_Num := File;
!                               XR.Line     := Line;
!                               XR.Rtype    := Interface_Reference;
!                               XR.Col      := Col;
!                               XR.Name     := Std;
!                            end;
! 
!                         else
!                            XE.Tref                 := Ref;
!                            XE.Tref_File_Num        := File;
!                            XE.Tref_Line            := Line;
!                            XE.Tref_Type            := Typ;
!                            XE.Tref_Col             := Col;
!                            XE.Tref_Standard_Entity := Std;
!                         end if;
!                      end;
!                   end loop;
! 
!                   --  Loop through cross-references for this entity
! 
!                   loop
!                      Skip_Space;
! 
!                      if At_Eol then
!                         Skip_Eol;
!                         exit when Nextc /= '.';
!                         P := P + 1;
!                      end if;
! 
!                      Xref.Increment_Last;
! 
!                      declare
!                         XR : Xref_Record renames Xref.Table (Xref.Last);
! 
!                      begin
!                         N := Get_Nat;
! 
!                         if Nextc = '|' then
!                            XR.File_Num :=
!                              Sdep_Id (N + Nat (First_Sdep_Entry) - 1);
!                            Current_File_Num := XR.File_Num;
!                            P := P + 1;
!                            N := Get_Nat;
!                         else
!                            XR.File_Num := Current_File_Num;
!                         end if;
! 
!                         XR.Line  := N;
!                         XR.Rtype := Getc;
! 
!                         --  Imported entities reference as in:
!                         --    494b<c,__gnat_copy_attribs>25
! 
!                         if Nextc = '<' then
!                            Skipc;
!                            XR.Imported_Lang := Get_Name;
! 
!                            pragma Assert (Nextc = ',');
!                            Skipc;
! 
!                            XR.Imported_Name := Get_Name;
! 
!                            pragma Assert (Nextc = '>');
!                            Skipc;
! 
!                         else
!                            XR.Imported_Lang := No_Name;
!                            XR.Imported_Name := No_Name;
!                         end if;
! 
!                         XR.Col   := Get_Nat;
! 
!                         if Nextc = '[' then
!                            Read_Instantiation_Reference;
!                         end if;
!                      end;
!                   end loop;
! 
!                   --  Record last cross-reference
! 
!                   XE.Last_Xref := Xref.Last;
!                   C := Nextc;
! 
!                exception
!                   when Bad_ALI_Format =>
! 
!                      --  If ignoring errors, then we skip a line with an
!                      --  unexpected error, and try to continue subsequent
!                      --  xref lines.
! 
!                      if Ignore_Errors then
!                         Xref_Entity.Decrement_Last;
!                         Skip_Line;
!                         C := Nextc;
! 
!                      --  Otherwise, we reraise the fatal exception
! 
!                      else
!                         raise;
!                      end if;
!                end Read_Refs_For_One_Entity;
!             end loop;
! 
!             --  Record last entity
! 
!             XS.Last_Entity := Xref_Entity.Last;
!          end Read_Refs_For_One_File;
! 
!          C := Getc;
!       end loop X_Loop;
! 
!       --  Here after dealing with xref sections
! 
!       --  Ignore remaining lines, which belong to an additional section of the
!       --  ALI file not considered here (like SCO or SPARK information).
! 
!       Check_Unknown_Line;
  
        return Id;
  
--- 3332,3338 ----
           Fatal_Error;
        end if;
  
!       --  This ALI parser does not care about Xref lines.
  
        return Id;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/ali.ads gcc-12.1.0/gcc/ada/ali.ads
*** gcc-11.3.0/gcc/ada/ali.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/ali.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package ALI is
*** 1389,1398 ****
     function Scan_ALI
       (F                : File_Name_Type;
        T                : Text_Buffer_Ptr;
-       Ignore_ED        : Boolean;
        Err              : Boolean;
-       Read_Xref        : Boolean := False;
-       Read_Lines       : String  := "";
        Ignore_Lines     : String  := "X";
        Ignore_Errors    : Boolean := False;
        Directly_Scanned : Boolean := False) return ALI_Id;
--- 1389,1395 ----
*************** package ALI is
*** 1401,1411 ****
     --  table. Switch settings may be modified as described above in the
     --  switch description settings.
     --
-    --    Ignore_ED is normally False. If set to True, it indicates that
-    --    all AD/ED (elaboration desirable) indications in the ALI file are
-    --    to be ignored. This parameter is obsolete now that the -f switch
-    --    is removed from gnatbind, and should be removed ???
-    --
     --    Err determines the action taken on an incorrectly formatted file.
     --    If Err is False, then an error message is output, and the program
     --    is terminated. If Err is True, then no error message is output,
--- 1398,1403 ----
*************** package ALI is
*** 1417,1440 ****
     --    tables will not be filled in this case. It is not possible
     --    to ignore U (unit) lines, they are always read.
     --
-    --    Read_Lines requests that Scan_ALI process only lines that start
-    --    with one of the given characters. The corresponding data in the
-    --    ALI file for any characters not given in the list will not be
-    --    set. The default value of the null string indicates that all
-    --    lines should be read (unless Ignore_Lines is specified). U
-    --    (unit) lines are always read regardless of the value of this
-    --    parameter.
-    --
-    --    Note: either Ignore_Lines or Read_Lines should be non-null, but not
-    --    both. If both are provided then only the Read_Lines value is used,
-    --    and the Ignore_Lines parameter is ignored.
-    --
-    --    Read_Xref is set True to read and acquire the cross-reference
-    --    information. If Read_XREF is set to True, then the effect is to ignore
-    --    all lines other than U, W, D and X lines and the Ignore_Lines and
-    --    Read_Lines parameters are ignored (i.e. the use of True for Read_XREF
-    --    is equivalent to specifying an argument of "UWDX" for Read_Lines.
-    --
     --    Ignore_Errors is normally False. If it is set True, then Scan_ALI
     --    will do its best to scan through a file and extract all information
     --    it can, even if there are errors. In this case Err is only set if
--- 1409,1414 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/alloc.ads gcc-12.1.0/gcc/ada/alloc.ads
*** gcc-11.3.0/gcc/ada/alloc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/alloc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 35,41 ****
  
  package Alloc is
  
!    --  The comment shows the unit in which the table is defined
  
     All_Interp_Initial               : constant := 1_000;      -- Sem_Type
     All_Interp_Increment             : constant := 100;
--- 35,41 ----
  
  package Alloc is
  
!    --  The comment shows the unit in which the tables are defined
  
     All_Interp_Initial               : constant := 1_000;      -- Sem_Type
     All_Interp_Increment             : constant := 100;
*************** package Alloc is
*** 94,102 ****
     Names_Initial                    : constant := 6_000;      -- Namet
     Names_Increment                  : constant := 100;
  
!    Nodes_Initial                    : constant := 50_000;     -- Atree
!    Nodes_Increment                  : constant := 100;
!    Nodes_Release_Threshold          : constant := 100_000;
  
     Notes_Initial                    : constant := 100;        -- Lib
     Notes_Increment                  : constant := 200;
--- 94,104 ----
     Names_Initial                    : constant := 6_000;      -- Namet
     Names_Increment                  : constant := 100;
  
!    Node_Offsets_Initial             : constant := 500_000;    -- Atree, Nlists
!    Node_Offsets_Increment           : constant := 100;
! 
!    Slots_Initial                    : constant := 2_000_000;  -- Atree
!    Slots_Increment                  : constant := 100;
  
     Notes_Initial                    : constant := 100;        -- Lib
     Notes_Increment                  : constant := 200;
diff -Nrcpad gcc-11.3.0/gcc/ada/argv-lynxos178-raven-cert.c gcc-12.1.0/gcc/ada/argv-lynxos178-raven-cert.c
*** gcc-11.3.0/gcc/ada/argv-lynxos178-raven-cert.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/argv-lynxos178-raven-cert.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *         Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *         Copyright (C) 1992-2022, 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- *
***************
*** 41,46 ****
--- 41,47 ----
     minimal support for Ada.Command_Line.Command_Name */
  
  #include <sys/types.h>
+ #include <stdlib.h>
  #include <string.h>
  
  #ifdef __cplusplus
*************** extern "C" {
*** 53,60 ****
     the binder-generated file so they need to be defined here */
  
  int gnat_argc = 0;
! const char **gnat_argv = (const char **) 0;
! const char **gnat_envp = (const char **) 0;
  
  int
  __gnat_len_arg (int arg_num)
--- 54,61 ----
     the binder-generated file so they need to be defined here */
  
  int gnat_argc = 0;
! char **gnat_argv = NULL;
! char **gnat_envp = NULL;
  
  int
  __gnat_len_arg (int arg_num)
diff -Nrcpad gcc-11.3.0/gcc/ada/argv.c gcc-12.1.0/gcc/ada/argv.c
*** gcc-11.3.0/gcc/ada/argv.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/argv.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *         Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *         Copyright (C) 1992-2022, 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- *
***************
*** 44,49 ****
--- 44,50 ----
  
  #ifdef IN_RTS
  #include "runtime.h"
+ #include <stdlib.h>
  #include <string.h>
  #else
  #include "config.h"
*************** extern "C" {
*** 60,73 ****
     envp of the main program is saved under gnat_envp.  */
  
  int gnat_argc = 0;
! const char **gnat_argv = (const char **) 0;
! const char **gnat_envp = (const char **) 0;
  
  #if defined (_WIN32) && !defined (RTX)
  /* Note that on Windows environment the environ point to a buffer that could
     be reallocated if needed. It means that gnat_envp needs to be updated
     before using gnat_envp to point to the right environment space */
- #include <stdlib.h>
  /* for the environ variable definition */
  #define gnat_envp (environ)
  #endif
--- 61,73 ----
     envp of the main program is saved under gnat_envp.  */
  
  int gnat_argc = 0;
! char **gnat_argv = NULL;
! char **gnat_envp = NULL;
  
  #if defined (_WIN32) && !defined (RTX)
  /* Note that on Windows environment the environ point to a buffer that could
     be reallocated if needed. It means that gnat_envp needs to be updated
     before using gnat_envp to point to the right environment space */
  /* for the environ variable definition */
  #define gnat_envp (environ)
  #endif
diff -Nrcpad gcc-11.3.0/gcc/ada/aspects.adb gcc-12.1.0/gcc/ada/aspects.adb
*** gcc-11.3.0/gcc/ada/aspects.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/aspects.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
***************
*** 23,32 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Nlists;   use Nlists;
! with Sinfo;    use Sinfo;
  
  with GNAT.HTable;
  
--- 23,36 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Nlists;         use Nlists;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
  
  with GNAT.HTable;
  
*************** package body Aspects is
*** 224,230 ****
        while Present (Item) loop
           if Nkind (Item) = N_Aspect_Specification
             and then Get_Aspect_Id (Item) = A
!            and then Class_Present = Sinfo.Class_Present (Item)
           then
              return Item;
           end if;
--- 228,234 ----
        while Present (Item) loop
           if Nkind (Item) = N_Aspect_Specification
             and then Get_Aspect_Id (Item) = A
!            and then Class_Present = Sinfo.Nodes.Class_Present (Item)
           then
              return Item;
           end if;
*************** package body Aspects is
*** 237,242 ****
--- 241,250 ----
        --  find the declaration node where the aspects reside. This is usually
        --  the parent or the parent of the parent.
  
+       if No (Parent (Owner)) then
+          return Empty;
+       end if;
+ 
        Decl := Parent (Owner);
        if not Permits_Aspect_Specifications (Decl) then
           Decl := Parent (Decl);
*************** package body Aspects is
*** 248,254 ****
           Spec := First (Aspect_Specifications (Decl));
           while Present (Spec) loop
              if Get_Aspect_Id (Spec) = A
!               and then Class_Present = Sinfo.Class_Present (Spec)
              then
                 return Spec;
              end if;
--- 256,262 ----
           Spec := First (Aspect_Specifications (Decl));
           while Present (Spec) loop
              if Get_Aspect_Id (Spec) = A
!               and then Class_Present = Sinfo.Nodes.Class_Present (Spec)
              then
                 return Spec;
              end if;
*************** package body Aspects is
*** 316,321 ****
--- 324,339 ----
     end Has_Aspect;
  
     ------------------
+    -- Is_Aspect_Id --
+    ------------------
+ 
+    function Is_Aspect_Id (Aspect : Name_Id) return Boolean is
+      (Get_Aspect_Id (Aspect) /= No_Aspect);
+ 
+    function Is_Aspect_Id (Aspect : Node_Id) return Boolean is
+      (Get_Aspect_Id (Aspect) /= No_Aspect);
+ 
+    ------------------
     -- Move_Aspects --
     ------------------
  
*************** package body Aspects is
*** 484,489 ****
--- 502,508 ----
  
     function Permits_Aspect_Specifications (N : Node_Id) return Boolean is
     begin
+       pragma Assert (Present (N));
        return Has_Aspect_Specifications_Flag (Nkind (N));
     end Permits_Aspect_Specifications;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/aspects.ads gcc-12.1.0/gcc/ada/aspects.ads
*** gcc-11.3.0/gcc/ada/aspects.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/aspects.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
*************** package Aspects is
*** 89,94 ****
--- 89,95 ----
        Aspect_Default_Storage_Pool,
        Aspect_Default_Value,
        Aspect_Depends,                       -- GNAT
+       Aspect_Designated_Storage_Model,      -- GNAT
        Aspect_Dimension,                     -- GNAT
        Aspect_Dimension_System,              -- GNAT
        Aspect_Dispatching_Domain,
*************** package Aspects is
*** 100,105 ****
--- 101,107 ----
        Aspect_External_Tag,
        Aspect_Ghost,                         -- GNAT
        Aspect_Global,                        -- GNAT
+       Aspect_GNAT_Annotate,                 -- GNAT
        Aspect_Implicit_Dereference,
        Aspect_Initial_Condition,             -- GNAT
        Aspect_Initializes,                   -- GNAT
*************** package Aspects is
*** 116,121 ****
--- 118,125 ----
        Aspect_Max_Entry_Queue_Length,
        Aspect_Max_Queue_Length,              -- GNAT
        Aspect_No_Caching,                    -- GNAT
+       Aspect_No_Controlled_Parts,
+       Aspect_No_Task_Parts,                 -- GNAT
        Aspect_Object_Size,                   -- GNAT
        Aspect_Obsolescent,                   -- GNAT
        Aspect_Output,
*************** package Aspects is
*** 144,149 ****
--- 148,154 ----
        Aspect_SPARK_Mode,                    -- GNAT
        Aspect_Stable_Properties,
        Aspect_Static_Predicate,
+       Aspect_Storage_Model_Type,            -- GNAT
        Aspect_Storage_Pool,
        Aspect_Storage_Size,
        Aspect_Stream_Size,
*************** package Aspects is
*** 171,177 ****
        Aspect_Remote_Call_Interface,
        Aspect_Remote_Types,
        Aspect_Shared_Passive,
-       Aspect_Universal_Data,                -- GNAT
  
        --  Remaining aspects have a static boolean value that turns the aspect
        --  on or off. They all correspond to pragmas, but are only converted to
--- 176,181 ----
*************** package Aspects is
*** 185,190 ****
--- 189,195 ----
        Aspect_Atomic_Components,
        Aspect_Disable_Controlled,            -- GNAT
        Aspect_Discard_Names,
+       Aspect_CUDA_Device,                   -- GNAT
        Aspect_CUDA_Global,                   -- GNAT
        Aspect_Exclusive_Functions,
        Aspect_Export,
*************** package Aspects is
*** 231,237 ****
         Aspect_Implicit_Dereference | Aspect_Constant_Indexing |
         Aspect_Variable_Indexing | Aspect_Aggregate |
         Aspect_Max_Entry_Queue_Length
!        --  | Aspect_No_Controlled_Parts
         --  ??? No_Controlled_Parts not yet in Aspect_Id enumeration
         ;  --  see RM 13.1.1(18.7)
  
--- 236,242 ----
         Aspect_Implicit_Dereference | Aspect_Constant_Indexing |
         Aspect_Variable_Indexing | Aspect_Aggregate |
         Aspect_Max_Entry_Queue_Length
!         | Aspect_No_Controlled_Parts
         --  ??? No_Controlled_Parts not yet in Aspect_Id enumeration
         ;  --  see RM 13.1.1(18.7)
  
*************** package Aspects is
*** 268,273 ****
--- 273,279 ----
        Aspect_Favor_Top_Level            => True,
        Aspect_Ghost                      => True,
        Aspect_Global                     => True,
+       Aspect_GNAT_Annotate              => True,
        Aspect_Inline_Always              => True,
        Aspect_Invariant                  => True,
        Aspect_Lock_Free                  => True,
*************** package Aspects is
*** 290,296 ****
        Aspect_Thread_Local_Storage       => True,
        Aspect_Test_Case                  => True,
        Aspect_Universal_Aliasing         => True,
-       Aspect_Universal_Data             => True,
        Aspect_Unmodified                 => True,
        Aspect_Unreferenced               => True,
        Aspect_Unreferenced_Objects       => True,
--- 296,301 ----
*************** package Aspects is
*** 318,326 ****
     --  the same aspect attached to the same declaration are allowed.
  
     No_Duplicates_Allowed : constant array (Aspect_Id) of Boolean :=
!      (Aspect_Annotate  => False,
!       Aspect_Test_Case => False,
!       others           => True);
  
     --  The following subtype defines aspects corresponding to library unit
     --  pragmas, these can only validly appear as aspects for library units,
--- 323,332 ----
     --  the same aspect attached to the same declaration are allowed.
  
     No_Duplicates_Allowed : constant array (Aspect_Id) of Boolean :=
!      (Aspect_Annotate      => False,
!       Aspect_GNAT_Annotate => False,
!       Aspect_Test_Case     => False,
!       others               => True);
  
     --  The following subtype defines aspects corresponding to library unit
     --  pragmas, these can only validly appear as aspects for library units,
*************** package Aspects is
*** 328,334 ****
     --  the occurrence of the aspect.
  
     subtype Library_Unit_Aspects is
!      Aspect_Id range Aspect_All_Calls_Remote .. Aspect_Universal_Data;
  
     --  The following subtype defines aspects accepting an optional static
     --  boolean parameter indicating if the aspect should be active or
--- 334,340 ----
     --  the occurrence of the aspect.
  
     subtype Library_Unit_Aspects is
!      Aspect_Id range Aspect_All_Calls_Remote .. Aspect_Shared_Passive;
  
     --  The following subtype defines aspects accepting an optional static
     --  boolean parameter indicating if the aspect should be active or
*************** package Aspects is
*** 376,381 ****
--- 382,388 ----
        Aspect_Default_Storage_Pool       => Expression,
        Aspect_Default_Value              => Expression,
        Aspect_Depends                    => Expression,
+       Aspect_Designated_Storage_Model   => Name,
        Aspect_Dimension                  => Expression,
        Aspect_Dimension_System           => Expression,
        Aspect_Dispatching_Domain         => Expression,
*************** package Aspects is
*** 387,392 ****
--- 394,400 ----
        Aspect_External_Tag               => Expression,
        Aspect_Ghost                      => Optional_Expression,
        Aspect_Global                     => Expression,
+       Aspect_GNAT_Annotate              => Expression,
        Aspect_Implicit_Dereference       => Name,
        Aspect_Initial_Condition          => Expression,
        Aspect_Initializes                => Expression,
*************** package Aspects is
*** 403,408 ****
--- 411,418 ----
        Aspect_Max_Entry_Queue_Length     => Expression,
        Aspect_Max_Queue_Length           => Expression,
        Aspect_No_Caching                 => Optional_Expression,
+       Aspect_No_Controlled_Parts        => Optional_Expression,
+       Aspect_No_Task_Parts              => Optional_Expression,
        Aspect_Object_Size                => Expression,
        Aspect_Obsolescent                => Optional_Expression,
        Aspect_Output                     => Name,
*************** package Aspects is
*** 431,436 ****
--- 441,447 ----
        Aspect_SPARK_Mode                 => Optional_Name,
        Aspect_Stable_Properties          => Expression,
        Aspect_Static_Predicate           => Expression,
+       Aspect_Storage_Model_Type         => Expression,
        Aspect_Storage_Pool               => Name,
        Aspect_Storage_Size               => Expression,
        Aspect_Stream_Size                => Expression,
*************** package Aspects is
*** 470,475 ****
--- 481,487 ----
        Aspect_Contract_Cases               => False,
        Aspect_Convention                   => True,
        Aspect_CPU                          => False,
+       Aspect_CUDA_Device                  => False,
        Aspect_CUDA_Global                  => False,
        Aspect_Default_Component_Value      => True,
        Aspect_Default_Initial_Condition    => False,
*************** package Aspects is
*** 477,482 ****
--- 489,495 ----
        Aspect_Default_Storage_Pool         => True,
        Aspect_Default_Value                => True,
        Aspect_Depends                      => False,
+       Aspect_Designated_Storage_Model     => True,
        Aspect_Dimension                    => False,
        Aspect_Dimension_System             => False,
        Aspect_Dispatching_Domain           => False,
*************** package Aspects is
*** 489,494 ****
--- 502,508 ----
        Aspect_External_Tag                 => False,
        Aspect_Ghost                        => False,
        Aspect_Global                       => False,
+       Aspect_GNAT_Annotate               => False,
        Aspect_Implicit_Dereference         => False,
        Aspect_Initial_Condition            => False,
        Aspect_Initializes                  => False,
*************** package Aspects is
*** 505,510 ****
--- 519,526 ----
        Aspect_Max_Entry_Queue_Length       => False,
        Aspect_Max_Queue_Length             => False,
        Aspect_No_Caching                   => False,
+       Aspect_No_Controlled_Parts          => False,
+       Aspect_No_Task_Parts                => False,
        Aspect_Object_Size                  => True,
        Aspect_Obsolescent                  => False,
        Aspect_Output                       => False,
*************** package Aspects is
*** 533,538 ****
--- 549,555 ----
        Aspect_SPARK_Mode                   => False,
        Aspect_Stable_Properties            => False,
        Aspect_Static_Predicate             => False,
+       Aspect_Storage_Model_Type           => False,
        Aspect_Storage_Pool                 => True,
        Aspect_Storage_Size                 => True,
        Aspect_Stream_Size                  => True,
*************** package Aspects is
*** 618,623 ****
--- 635,641 ----
        Aspect_Contract_Cases               => Name_Contract_Cases,
        Aspect_Convention                   => Name_Convention,
        Aspect_CPU                          => Name_CPU,
+       Aspect_CUDA_Device                  => Name_CUDA_Device,
        Aspect_CUDA_Global                  => Name_CUDA_Global,
        Aspect_Default_Component_Value      => Name_Default_Component_Value,
        Aspect_Default_Initial_Condition    => Name_Default_Initial_Condition,
*************** package Aspects is
*** 625,630 ****
--- 643,649 ----
        Aspect_Default_Storage_Pool         => Name_Default_Storage_Pool,
        Aspect_Default_Value                => Name_Default_Value,
        Aspect_Depends                      => Name_Depends,
+       Aspect_Designated_Storage_Model     => Name_Designated_Storage_Model,
        Aspect_Dimension                    => Name_Dimension,
        Aspect_Dimension_System             => Name_Dimension_System,
        Aspect_Disable_Controlled           => Name_Disable_Controlled,
*************** package Aspects is
*** 643,648 ****
--- 662,668 ----
        Aspect_Full_Access_Only             => Name_Full_Access_Only,
        Aspect_Ghost                        => Name_Ghost,
        Aspect_Global                       => Name_Global,
+       Aspect_GNAT_Annotate                => Name_GNAT_Annotate,
        Aspect_Implicit_Dereference         => Name_Implicit_Dereference,
        Aspect_Import                       => Name_Import,
        Aspect_Independent                  => Name_Independent,
*************** package Aspects is
*** 666,671 ****
--- 686,693 ----
        Aspect_Max_Entry_Queue_Length       => Name_Max_Entry_Queue_Length,
        Aspect_Max_Queue_Length             => Name_Max_Queue_Length,
        Aspect_No_Caching                   => Name_No_Caching,
+       Aspect_No_Controlled_Parts          => Name_No_Controlled_Parts,
+       Aspect_No_Task_Parts                => Name_No_Task_Parts,
        Aspect_No_Elaboration_Code_All      => Name_No_Elaboration_Code_All,
        Aspect_No_Inline                    => Name_No_Inline,
        Aspect_No_Return                    => Name_No_Return,
*************** package Aspects is
*** 711,716 ****
--- 733,739 ----
        Aspect_Stable_Properties            => Name_Stable_Properties,
        Aspect_Static                       => Name_Static,
        Aspect_Static_Predicate             => Name_Static_Predicate,
+       Aspect_Storage_Model_Type           => Name_Storage_Model_Type,
        Aspect_Storage_Pool                 => Name_Storage_Pool,
        Aspect_Storage_Size                 => Name_Storage_Size,
        Aspect_Stream_Size                  => Name_Stream_Size,
*************** package Aspects is
*** 726,732 ****
        Aspect_Unchecked_Union              => Name_Unchecked_Union,
        Aspect_Unimplemented                => Name_Unimplemented,
        Aspect_Universal_Aliasing           => Name_Universal_Aliasing,
-       Aspect_Universal_Data               => Name_Universal_Data,
        Aspect_Unmodified                   => Name_Unmodified,
        Aspect_Unreferenced                 => Name_Unreferenced,
        Aspect_Unreferenced_Objects         => Name_Unreferenced_Objects,
--- 749,754 ----
*************** package Aspects is
*** 751,756 ****
--- 773,786 ----
     --  Given an aspect specification, return the corresponding aspect_id value.
     --  If the name does not match any aspect, return No_Aspect.
  
+    function Is_Aspect_Id (Aspect : Name_Id) return Boolean;
+    pragma Inline (Is_Aspect_Id);
+    --  Return True if a corresponding aspect id exists
+ 
+    function Is_Aspect_Id (Aspect : Node_Id) return Boolean;
+    pragma Inline (Is_Aspect_Id);
+    --  Return True if a corresponding aspect id exists
+ 
     ------------------------------------
     -- Delaying Evaluation of Aspects --
     ------------------------------------
*************** package Aspects is
*** 861,871 ****
--- 891,903 ----
        Aspect_Attach_Handler               => Always_Delay,
        Aspect_Constant_Indexing            => Always_Delay,
        Aspect_CPU                          => Always_Delay,
+       Aspect_CUDA_Device                  => Always_Delay,
        Aspect_CUDA_Global                  => Always_Delay,
        Aspect_Default_Iterator             => Always_Delay,
        Aspect_Default_Storage_Pool         => Always_Delay,
        Aspect_Default_Value                => Always_Delay,
        Aspect_Default_Component_Value      => Always_Delay,
+       Aspect_Designated_Storage_Model     => Always_Delay,
        Aspect_Discard_Names                => Always_Delay,
        Aspect_Dispatching_Domain           => Always_Delay,
        Aspect_Dynamic_Predicate            => Always_Delay,
*************** package Aspects is
*** 917,922 ****
--- 949,955 ----
        Aspect_Simple_Storage_Pool          => Always_Delay,
        Aspect_Simple_Storage_Pool_Type     => Always_Delay,
        Aspect_Static_Predicate             => Always_Delay,
+       Aspect_Storage_Model_Type           => Always_Delay,
        Aspect_Storage_Pool                 => Always_Delay,
        Aspect_Stream_Size                  => Always_Delay,
        Aspect_String_Literal               => Always_Delay,
*************** package Aspects is
*** 927,933 ****
        Aspect_Type_Invariant               => Always_Delay,
        Aspect_Unchecked_Union              => Always_Delay,
        Aspect_Universal_Aliasing           => Always_Delay,
-       Aspect_Universal_Data               => Always_Delay,
        Aspect_Unmodified                   => Always_Delay,
        Aspect_Unreferenced                 => Always_Delay,
        Aspect_Unreferenced_Objects         => Always_Delay,
--- 960,965 ----
*************** package Aspects is
*** 953,958 ****
--- 985,991 ----
        Aspect_Extensions_Visible           => Never_Delay,
        Aspect_Ghost                        => Never_Delay,
        Aspect_Global                       => Never_Delay,
+       Aspect_GNAT_Annotate                => Never_Delay,
        Aspect_Import                       => Never_Delay,
        Aspect_Initial_Condition            => Never_Delay,
        Aspect_Initializes                  => Never_Delay,
*************** package Aspects is
*** 960,965 ****
--- 993,1000 ----
        Aspect_Max_Entry_Queue_Length       => Never_Delay,
        Aspect_Max_Queue_Length             => Never_Delay,
        Aspect_No_Caching                   => Never_Delay,
+       Aspect_No_Controlled_Parts          => Never_Delay,
+       Aspect_No_Task_Parts                => Never_Delay,
        Aspect_No_Elaboration_Code_All      => Never_Delay,
        Aspect_No_Tagged_Streams            => Never_Delay,
        Aspect_Obsolescent                  => Never_Delay,
diff -Nrcpad gcc-11.3.0/gcc/ada/atree.adb gcc-12.1.0/gcc/ada/atree.adb
*** gcc-11.3.0/gcc/ada/atree.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/atree.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,45 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! pragma Style_Checks (All_Checks);
! --  Turn off subprogram ordering check for this package
! 
! --  WARNING: There is a C version of this package. Any changes to this source
! --  file must be properly reflected in the file atree.h which is a C header
! --  file containing equivalent definitions for use by gigi.
  
! with Aspects; use Aspects;
! with Debug;   use Debug;
! with Nlists;  use Nlists;
! with Opt;     use Opt;
! with Output;  use Output;
! with Sinput;  use Sinput;
  
! with GNAT.Heap_Sort_G;
  
! package body Atree is
  
     Ignored_Ghost_Recording_Proc : Ignored_Ghost_Record_Proc := null;
     --  This soft link captures the procedure invoked during the creation of an
--- 23,45 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Debug;          use Debug;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Output;         use Output;
! with Sinfo.Utils;    use Sinfo.Utils;
! with System.Storage_Elements;
  
! package body Atree is
  
!    ---------------
!    -- Debugging --
!    ---------------
  
!    --  Suppose you find that node 12345 is messed up. You might want to find
!    --  the code that created that node. See sinfo-utils.adb for how to do that.
  
     Ignored_Ghost_Recording_Proc : Ignored_Ghost_Record_Proc := null;
     --  This soft link captures the procedure invoked during the creation of an
*************** package body Atree is
*** 57,611 ****
     Rewriting_Proc : Rewrite_Proc := null;
     --  This soft link captures the procedure invoked during a node rewrite
  
!    ---------------
!    -- Debugging --
!    ---------------
  
!    --  Suppose you find that node 12345 is messed up. You might want to find
!    --  the code that created that node. There are two ways to do this:
  
!    --  One way is to set a conditional breakpoint on New_Node_Debugging_Output
!    --  (nickname "nnd"):
!    --     break nnd if n = 12345
!    --  and run gnat1 again from the beginning.
  
!    --  The other way is to set a breakpoint near the beginning (e.g. on
!    --  gnat1drv), and run. Then set Watch_Node (nickname "ww") to 12345 in gdb:
!    --     ww := 12345
!    --  and set a breakpoint on New_Node_Breakpoint (nickname "nn"). Continue.
  
!    --  Either way, gnat1 will stop when node 12345 is created, or certain other
!    --  interesting operations are performed, such as Rewrite. To see exactly
!    --  which operations, search for "pragma Debug" below.
  
!    --  The second method is much faster if the amount of Ada code being
!    --  compiled is large.
  
!    ww : Node_Id'Base := Node_Id'First - 1;
!    pragma Export (Ada, ww); --  trick the optimizer
!    Watch_Node : Node_Id'Base renames ww;
!    --  Node to "watch"; that is, whenever a node is created, we check if it
!    --  is equal to Watch_Node, and if so, call New_Node_Breakpoint. You have
!    --  presumably set a breakpoint on New_Node_Breakpoint. Note that the
!    --  initial value of Node_Id'First - 1 ensures that by default, no node
!    --  will be equal to Watch_Node.
  
!    procedure nn;
!    pragma Export (Ada, nn);
!    procedure New_Node_Breakpoint renames nn;
!    --  This doesn't do anything interesting; it's just for setting breakpoint
!    --  on as explained above.
  
!    procedure nnd (N : Node_Id);
!    pragma Export (Ada, nnd);
!    procedure New_Node_Debugging_Output (N : Node_Id) renames nnd;
!    --  For debugging. If debugging is turned on, New_Node and New_Entity call
!    --  this. If debug flag N is turned on, this prints out the new node.
     --
!    --  If Node = Watch_Node, this prints out the new node and calls
!    --  New_Node_Breakpoint. Otherwise, does nothing.
  
!    procedure Node_Debug_Output (Op : String; N : Node_Id);
!    --  Called by nnd; writes Op followed by information about N
  
!    -----------------------------
!    -- Local Objects and Types --
!    -----------------------------
  
!    Comes_From_Source_Default : Boolean := False;
  
!    use Unchecked_Access;
!    --  We are allowed to see these from within our own body
  
!    use Atree_Private_Part;
!    --  We are also allowed to see our private data structures
  
!    --  Functions used to store Entity_Kind value in Nkind field
  
!    --  The following declarations are used to store flags 65-72 in the
!    --  Nkind field of the third component of an extended (entity) node.
  
!    type Flag_Byte is record
!       Flag65 : Boolean;
!       Flag66 : Boolean;
!       Flag67 : Boolean;
!       Flag68 : Boolean;
!       Flag69 : Boolean;
!       Flag70 : Boolean;
!       Flag71 : Boolean;
!       Flag72 : Boolean;
!    end record;
  
!    pragma Pack (Flag_Byte);
!    for Flag_Byte'Size use 8;
  
!    type Flag_Byte_Ptr is access all Flag_Byte;
!    type Node_Kind_Ptr is access all Node_Kind;
  
!    function To_Flag_Byte is new
!      Unchecked_Conversion (Node_Kind, Flag_Byte);
  
!    function To_Flag_Byte_Ptr is new
!      Unchecked_Conversion (Node_Kind_Ptr, Flag_Byte_Ptr);
  
!    --  The following declarations are used to store flags 239-246 in the
!    --  Nkind field of the fourth component of an extended (entity) node.
  
!    type Flag_Byte2 is record
!       Flag239 : Boolean;
!       Flag240 : Boolean;
!       Flag241 : Boolean;
!       Flag242 : Boolean;
!       Flag243 : Boolean;
!       Flag244 : Boolean;
!       Flag245 : Boolean;
!       Flag246 : Boolean;
!    end record;
  
!    pragma Pack (Flag_Byte2);
!    for Flag_Byte2'Size use 8;
  
!    type Flag_Byte2_Ptr is access all Flag_Byte2;
  
!    function To_Flag_Byte2 is new
!      Unchecked_Conversion (Node_Kind, Flag_Byte2);
  
!    function To_Flag_Byte2_Ptr is new
!      Unchecked_Conversion (Node_Kind_Ptr, Flag_Byte2_Ptr);
  
!    --  The following declarations are used to store flags 247-254 in the
!    --  Nkind field of the fifth component of an extended (entity) node.
  
!    type Flag_Byte3 is record
!       Flag247 : Boolean;
!       Flag248 : Boolean;
!       Flag249 : Boolean;
!       Flag250 : Boolean;
!       Flag251 : Boolean;
!       Flag252 : Boolean;
!       Flag253 : Boolean;
!       Flag254 : Boolean;
!    end record;
  
!    pragma Pack (Flag_Byte3);
!    for Flag_Byte3'Size use 8;
  
!    type Flag_Byte3_Ptr is access all Flag_Byte3;
  
!    function To_Flag_Byte3 is new
!      Unchecked_Conversion (Node_Kind, Flag_Byte3);
  
!    function To_Flag_Byte3_Ptr is new
!      Unchecked_Conversion (Node_Kind_Ptr, Flag_Byte3_Ptr);
  
!    --  The following declarations are used to store flags 310-317 in the
!    --  Nkind field of the sixth component of an extended (entity) node.
  
!    type Flag_Byte4 is record
!       Flag310 : Boolean;
!       Flag311 : Boolean;
!       Flag312 : Boolean;
!       Flag313 : Boolean;
!       Flag314 : Boolean;
!       Flag315 : Boolean;
!       Flag316 : Boolean;
!       Flag317 : Boolean;
!    end record;
  
!    pragma Pack (Flag_Byte4);
!    for Flag_Byte4'Size use 8;
  
!    type Flag_Byte4_Ptr is access all Flag_Byte4;
  
!    function To_Flag_Byte4 is new
!      Unchecked_Conversion (Node_Kind, Flag_Byte4);
  
!    function To_Flag_Byte4_Ptr is new
!      Unchecked_Conversion (Node_Kind_Ptr, Flag_Byte4_Ptr);
  
!    --  The following declarations are used to store flags 73-96 and the
!    --  Convention field in the Field12 field of the third component of an
!    --  extended (Entity) node.
  
!    type Flag_Word is record
!       Flag73 : Boolean;
!       Flag74 : Boolean;
!       Flag75 : Boolean;
!       Flag76 : Boolean;
!       Flag77 : Boolean;
!       Flag78 : Boolean;
!       Flag79 : Boolean;
!       Flag80 : Boolean;
  
!       Flag81 : Boolean;
!       Flag82 : Boolean;
!       Flag83 : Boolean;
!       Flag84 : Boolean;
!       Flag85 : Boolean;
!       Flag86 : Boolean;
!       Flag87 : Boolean;
!       Flag88 : Boolean;
  
!       Flag89 : Boolean;
!       Flag90 : Boolean;
!       Flag91 : Boolean;
!       Flag92 : Boolean;
!       Flag93 : Boolean;
!       Flag94 : Boolean;
!       Flag95 : Boolean;
!       Flag96 : Boolean;
  
!       Convention : Convention_Id;
!    end record;
  
!    pragma Pack (Flag_Word);
!    for Flag_Word'Size use 32;
!    for Flag_Word'Alignment use 4;
  
!    type Flag_Word_Ptr is access all Flag_Word;
!    type Union_Id_Ptr  is access all Union_Id;
  
!    function To_Flag_Word is new
!      Unchecked_Conversion (Union_Id, Flag_Word);
  
!    function To_Flag_Word_Ptr is new
!      Unchecked_Conversion (Union_Id_Ptr, Flag_Word_Ptr);
  
!    --  The following declarations are used to store flags 97-128 in the
!    --  Field12 field of the fourth component of an extended (entity) node.
  
!    type Flag_Word2 is record
!       Flag97  : Boolean;
!       Flag98  : Boolean;
!       Flag99  : Boolean;
!       Flag100 : Boolean;
!       Flag101 : Boolean;
!       Flag102 : Boolean;
!       Flag103 : Boolean;
!       Flag104 : Boolean;
  
!       Flag105 : Boolean;
!       Flag106 : Boolean;
!       Flag107 : Boolean;
!       Flag108 : Boolean;
!       Flag109 : Boolean;
!       Flag110 : Boolean;
!       Flag111 : Boolean;
!       Flag112 : Boolean;
  
!       Flag113 : Boolean;
!       Flag114 : Boolean;
!       Flag115 : Boolean;
!       Flag116 : Boolean;
!       Flag117 : Boolean;
!       Flag118 : Boolean;
!       Flag119 : Boolean;
!       Flag120 : Boolean;
  
!       Flag121 : Boolean;
!       Flag122 : Boolean;
!       Flag123 : Boolean;
!       Flag124 : Boolean;
!       Flag125 : Boolean;
!       Flag126 : Boolean;
!       Flag127 : Boolean;
!       Flag128 : Boolean;
!    end record;
  
!    pragma Pack (Flag_Word2);
!    for Flag_Word2'Size use 32;
!    for Flag_Word2'Alignment use 4;
  
!    type Flag_Word2_Ptr is access all Flag_Word2;
  
!    function To_Flag_Word2 is new
!      Unchecked_Conversion (Union_Id, Flag_Word2);
  
!    function To_Flag_Word2_Ptr is new
!      Unchecked_Conversion (Union_Id_Ptr, Flag_Word2_Ptr);
  
!    --  The following declarations are used to store flags 152-183 in the
!    --  Field11 field of the fourth component of an extended (entity) node.
  
!    type Flag_Word3 is record
!       Flag152 : Boolean;
!       Flag153 : Boolean;
!       Flag154 : Boolean;
!       Flag155 : Boolean;
!       Flag156 : Boolean;
!       Flag157 : Boolean;
!       Flag158 : Boolean;
!       Flag159 : Boolean;
  
!       Flag160 : Boolean;
!       Flag161 : Boolean;
!       Flag162 : Boolean;
!       Flag163 : Boolean;
!       Flag164 : Boolean;
!       Flag165 : Boolean;
!       Flag166 : Boolean;
!       Flag167 : Boolean;
  
!       Flag168 : Boolean;
!       Flag169 : Boolean;
!       Flag170 : Boolean;
!       Flag171 : Boolean;
!       Flag172 : Boolean;
!       Flag173 : Boolean;
!       Flag174 : Boolean;
!       Flag175 : Boolean;
  
!       Flag176 : Boolean;
!       Flag177 : Boolean;
!       Flag178 : Boolean;
!       Flag179 : Boolean;
!       Flag180 : Boolean;
!       Flag181 : Boolean;
!       Flag182 : Boolean;
!       Flag183 : Boolean;
!    end record;
  
!    pragma Pack (Flag_Word3);
!    for Flag_Word3'Size use 32;
!    for Flag_Word3'Alignment use 4;
  
!    type Flag_Word3_Ptr is access all Flag_Word3;
  
!    function To_Flag_Word3 is new
!      Unchecked_Conversion (Union_Id, Flag_Word3);
  
!    function To_Flag_Word3_Ptr is new
!      Unchecked_Conversion (Union_Id_Ptr, Flag_Word3_Ptr);
  
!    --  The following declarations are used to store flags 184-215 in the
!    --  Field12 field of the fifth component of an extended (entity) node.
  
!    type Flag_Word4 is record
!       Flag184 : Boolean;
!       Flag185 : Boolean;
!       Flag186 : Boolean;
!       Flag187 : Boolean;
!       Flag188 : Boolean;
!       Flag189 : Boolean;
!       Flag190 : Boolean;
!       Flag191 : Boolean;
  
!       Flag192 : Boolean;
!       Flag193 : Boolean;
!       Flag194 : Boolean;
!       Flag195 : Boolean;
!       Flag196 : Boolean;
!       Flag197 : Boolean;
!       Flag198 : Boolean;
!       Flag199 : Boolean;
  
!       Flag200 : Boolean;
!       Flag201 : Boolean;
!       Flag202 : Boolean;
!       Flag203 : Boolean;
!       Flag204 : Boolean;
!       Flag205 : Boolean;
!       Flag206 : Boolean;
!       Flag207 : Boolean;
  
!       Flag208 : Boolean;
!       Flag209 : Boolean;
!       Flag210 : Boolean;
!       Flag211 : Boolean;
!       Flag212 : Boolean;
!       Flag213 : Boolean;
!       Flag214 : Boolean;
!       Flag215 : Boolean;
!    end record;
  
!    pragma Pack (Flag_Word4);
!    for Flag_Word4'Size use 32;
!    for Flag_Word4'Alignment use 4;
  
!    type Flag_Word4_Ptr is access all Flag_Word4;
  
!    function To_Flag_Word4 is new
!      Unchecked_Conversion (Union_Id, Flag_Word4);
  
!    function To_Flag_Word4_Ptr is new
!      Unchecked_Conversion (Union_Id_Ptr, Flag_Word4_Ptr);
  
!    --  The following declarations are used to store flags 255-286 in the
!    --  Field12 field of the sixth component of an extended (entity) node.
  
!    type Flag_Word5 is record
!       Flag255 : Boolean;
!       Flag256 : Boolean;
!       Flag257 : Boolean;
!       Flag258 : Boolean;
!       Flag259 : Boolean;
!       Flag260 : Boolean;
!       Flag261 : Boolean;
!       Flag262 : Boolean;
  
!       Flag263 : Boolean;
!       Flag264 : Boolean;
!       Flag265 : Boolean;
!       Flag266 : Boolean;
!       Flag267 : Boolean;
!       Flag268 : Boolean;
!       Flag269 : Boolean;
!       Flag270 : Boolean;
  
!       Flag271 : Boolean;
!       Flag272 : Boolean;
!       Flag273 : Boolean;
!       Flag274 : Boolean;
!       Flag275 : Boolean;
!       Flag276 : Boolean;
!       Flag277 : Boolean;
!       Flag278 : Boolean;
  
!       Flag279 : Boolean;
!       Flag280 : Boolean;
!       Flag281 : Boolean;
!       Flag282 : Boolean;
!       Flag283 : Boolean;
!       Flag284 : Boolean;
!       Flag285 : Boolean;
!       Flag286 : Boolean;
!    end record;
  
!    pragma Pack (Flag_Word5);
!    for Flag_Word5'Size use 32;
!    for Flag_Word5'Alignment use 4;
  
!    type Flag_Word5_Ptr is access all Flag_Word5;
  
!    function To_Flag_Word5 is new
!      Unchecked_Conversion (Union_Id, Flag_Word5);
  
!    function To_Flag_Word5_Ptr is new
!      Unchecked_Conversion (Union_Id_Ptr, Flag_Word5_Ptr);
  
!    --------------------------------------------------
!    -- Implementation of Tree Substitution Routines --
!    --------------------------------------------------
  
!    --  A separate table keeps track of the mapping between rewritten nodes
!    --  and their corresponding original tree nodes. Rewrite makes an entry
!    --  in this table for use by Original_Node. By default, if no call is
!    --  Rewrite, the entry in this table points to the original unwritten node.
  
!    --  Note: eventually, this should be a field in the Node directly, but
!    --  for now we do not want to disturb the efficiency of a power of 2
!    --  for the node size. ????We are planning to get rid of power-of-2.
  
!    package Orig_Nodes is new Table.Table (
!       Table_Component_Type => Node_Id,
!       Table_Index_Type     => Node_Id'Base,
!       Table_Low_Bound      => First_Node_Id,
!       Table_Initial        => Alloc.Nodes_Initial,
!       Table_Increment      => Alloc.Nodes_Increment,
!       Release_Threshold    => Alloc.Nodes_Release_Threshold,
!       Table_Name           => "Orig_Nodes");
  
!    --------------------------
!    -- Paren_Count Handling --
!    --------------------------
  
!    --  As noted in the spec, the paren count in a sub-expression node has
!    --  four possible values 0,1,2, and 3. The value 3 really means 3 or more,
!    --  and we use an auxiliary serially scanned table to record the actual
!    --  count. A serial search is fine, only pathological programs will use
!    --  entries in this table. Normal programs won't use it at all.
  
!    type Paren_Count_Entry is record
!       Nod : Node_Id;
!       --  The node to which this count applies
  
!       Count : Nat range 3 .. Nat'Last;
!       --  The count of parentheses, which will be in the indicated range
!    end record;
  
!    package Paren_Counts is new Table.Table (
!      Table_Component_Type => Paren_Count_Entry,
!      Table_Index_Type     => Int,
!      Table_Low_Bound      => 0,
!      Table_Initial        => 10,
!      Table_Increment      => 200,
!      Table_Name           => "Paren_Counts");
  
!    procedure Set_Paren_Count_Of_Copy (Target, Source : Node_Id);
!    pragma Inline (Set_Paren_Count_Of_Copy);
!    --  Called when copying a node. Makes sure the Paren_Count of the copy is
!    --  correct.
  
!    -----------------------
!    -- Local Subprograms --
!    -----------------------
  
!    function Allocate_New_Node return Node_Id;
!    pragma Inline (Allocate_New_Node);
!    --  Allocate a new node or first part of a node extension. Initialize the
!    --  Nodes.Table entry, Flags, Orig_Nodes, and List tables.
  
!    procedure Fix_Parents (Ref_Node, Fix_Node : Node_Id);
!    --  Fix up parent pointers for the syntactic children of Fix_Node after a
!    --  copy, setting them to Fix_Node when they pointed to Ref_Node.
  
!    procedure Mark_New_Ghost_Node (N : Node_Or_Entity_Id);
!    --  Mark arbitrary node or entity N as Ghost when it is created within a
!    --  Ghost region.
  
!    procedure Report (Target, Source : Node_Id);
!    pragma Inline (Report);
!    --  Invoke the reporting procedure if available
  
!    -----------------------
!    -- Allocate_New_Node --
!    -----------------------
  
-    function Allocate_New_Node return Node_Id is
-       New_Id : Node_Id;
     begin
!       Nodes.Append (Default_Node);
!       New_Id := Nodes.Last;
!       Flags.Append (Default_Flags);
!       Orig_Nodes.Append (New_Id);
!       Nodes.Table (Nodes.Last).Comes_From_Source :=
!         Comes_From_Source_Default;
!       Allocate_List_Tables (Nodes.Last);
!       Report (Target => New_Id, Source => Empty);
  
!       return New_Id;
!    end Allocate_New_Node;
  
!    --------------
!    -- Analyzed --
!    --------------
  
-    function Analyzed (N : Node_Id) return Boolean is
     begin
!       pragma Assert (N <= Nodes.Last);
!       return Nodes.Table (N).Analyzed;
!    end Analyzed;
  
!    --------------------------
!    -- Basic_Set_Convention --
!    --------------------------
  
!    procedure Basic_Set_Convention  (E : Entity_Id; Val : Convention_Id) is
     begin
!       pragma Assert (Nkind (E) in N_Entity);
!       To_Flag_Word_Ptr
!         (Union_Id_Ptr'
!           (Nodes.Table (E + 2).Field12'Unrestricted_Access)).Convention := Val;
!    end Basic_Set_Convention;
  
!    -------------------
!    -- Check_Actuals --
!    -------------------
  
!    function Check_Actuals (N : Node_Id) return Boolean is
     begin
!       return Flags.Table (N).Check_Actuals;
!    end Check_Actuals;
  
     --------------------------
     -- Check_Error_Detected --
--- 57,1141 ----
     Rewriting_Proc : Rewrite_Proc := null;
     --  This soft link captures the procedure invoked during a node rewrite
  
!    -----------------------------
!    -- Local Objects and Types --
!    -----------------------------
  
!    Comes_From_Source_Default : Boolean := False;
  
!    use Atree_Private_Part;
!    --  We are also allowed to see our private data structures
  
!    --------------------------------------------------
!    -- Implementation of Tree Substitution Routines --
!    --------------------------------------------------
  
!    --  A separate table keeps track of the mapping between rewritten nodes and
!    --  their corresponding original tree nodes. Rewrite makes an entry in this
!    --  table for use by Original_Node. By default the entry in this table
!    --  points to the original unwritten node. Note that if a node is rewritten
!    --  more than once, there is no easy way to get to the intermediate
!    --  rewrites; the node itself is the latest version, and the entry in this
!    --  table is the original.
  
!    --  Note: This could be a node field.
  
!    package Orig_Nodes is new Table.Table (
!       Table_Component_Type => Node_Id,
!       Table_Index_Type     => Node_Id'Base,
!       Table_Low_Bound      => First_Node_Id,
!       Table_Initial        => Alloc.Node_Offsets_Initial,
!       Table_Increment      => Alloc.Node_Offsets_Increment,
!       Table_Name           => "Orig_Nodes");
  
!    ------------------
!    -- Parent Stack --
!    ------------------
  
!    --  A separate table is used to traverse trees. It passes the parent field
!    --  of each node to the called process subprogram. It is defined global to
!    --  avoid adding performance overhead if allocated each time the traversal
!    --  functions are invoked.
! 
!    package Parents_Stack is new Table.Table
!      (Table_Component_Type => Node_Id,
!       Table_Index_Type     => Nat,
!       Table_Low_Bound      => 1,
!       Table_Initial        => 256,
!       Table_Increment      => 100,
!       Table_Name           => "Parents_Stack");
! 
!    --------------------------
!    -- Paren_Count Handling --
!    --------------------------
! 
!    --  The Small_Paren_Count field has range 0 .. 3. If the Paren_Count is
!    --  in the range 0 .. 2, then it is stored as Small_Paren_Count. Otherwise,
!    --  Small_Paren_Count = 3, and the actual Paren_Count is stored in the
!    --  Paren_Counts table.
     --
!    --  We use linear search on the Paren_Counts table, which is plenty
!    --  efficient because only pathological programs will use it. Nobody
!    --  writes (((X + Y))).
  
!    type Paren_Count_Entry is record
!       Nod : Node_Id;
!       --  The node to which this count applies
  
!       Count : Nat range 3 .. Nat'Last;
!       --  The count of parentheses, which will be in the indicated range
!    end record;
  
!    package Paren_Counts is new Table.Table (
!      Table_Component_Type => Paren_Count_Entry,
!      Table_Index_Type     => Int,
!      Table_Low_Bound      => 0,
!      Table_Initial        => 10,
!      Table_Increment      => 200,
!      Table_Name           => "Paren_Counts");
  
!    procedure Set_Paren_Count_Of_Copy (Target, Source : Node_Id);
!    pragma Inline (Set_Paren_Count_Of_Copy);
!    --  Called when copying a node. Makes sure the Paren_Count of the copy is
!    --  correct.
  
!    -----------------------
!    -- Local Subprograms --
!    -----------------------
  
!    function Allocate_New_Node (Kind : Node_Kind) return Node_Id;
!    pragma Inline (Allocate_New_Node);
!    --  Allocate a new node or first part of a node extension. Initialize the
!    --  Nodes.Table entry, Flags, Orig_Nodes, and List tables.
  
!    procedure Fix_Parents (Ref_Node, Fix_Node : Node_Id);
!    --  Fix up parent pointers for the children of Fix_Node after a copy,
!    --  setting them to Fix_Node when they pointed to Ref_Node.
  
!    generic
!       with function Process
!         (Parent_Node : Node_Id;
!          Node        : Node_Id) return Traverse_Result is <>;
!    function Internal_Traverse_With_Parent
!      (Node : Node_Id) return Traverse_Final_Result;
!    pragma Inline (Internal_Traverse_With_Parent);
!    --  Internal function that provides a functionality similar to Traverse_Func
!    --  but extended to pass the Parent node to the called Process subprogram;
!    --  delegates to Traverse_Func_With_Parent the initialization of the stack
!    --  data structure which stores the parent nodes (cf. Parents_Stack).
!    --  ??? Could we factorize the common code of Internal_Traverse_Func and
!    --  Traverse_Func?
  
!    procedure Mark_New_Ghost_Node (N : Node_Or_Entity_Id);
!    --  Mark arbitrary node or entity N as Ghost when it is created within a
!    --  Ghost region.
  
!    procedure Report (Target, Source : Node_Id);
!    pragma Inline (Report);
!    --  Invoke the reporting procedure if available
  
!    function Size_In_Slots (N : Node_Or_Entity_Id) return Slot_Count;
!    --  Number of slots belonging to N. This can be less than
!    --  Size_In_Slots_To_Alloc for entities. Includes both header
!    --  and dynamic slots.
  
!    function Size_In_Slots_Dynamic (N : Node_Or_Entity_Id) return Slot_Count;
!    --  Just counts the number of dynamic slots
  
!    function Size_In_Slots_To_Alloc (N : Node_Or_Entity_Id) return Slot_Count;
!    function Size_In_Slots_To_Alloc (Kind : Node_Kind) return Slot_Count;
!    --  Number of slots to allocate for a node or entity. For entities, we have
!    --  to allocate the max, because we don't know the Ekind when this is
!    --  called.
  
!    function Off_F (N : Node_Id) return Node_Offset with Inline;
!    --  Offset of the first dynamic slot of N in Slots.Table.
!    --  The actual offset of this slot from the start of the node
!    --  is not 0; this is logically the first slot after the header
!    --  slots.
  
!    function Off_0 (N : Node_Id) return Node_Offset'Base with Inline;
!    --  This is for zero-origin addressing of the dynamic slots.
!    --  It points to slot 0 of N in Slots.Table, which does not exist,
!    --  because the first few slots are stored in the header.
  
!    function Off_L (N : Node_Id) return Node_Offset with Inline;
!    --  Offset of the last slot of N in Slots.Table
  
!    procedure Zero_Dynamic_Slots (First, Last : Node_Offset'Base) with Inline;
!    --  Set dynamic slots in the range First..Last to zero
  
!    procedure Zero_Header_Slots (N : Node_Or_Entity_Id) with Inline;
!    --  Zero the header slots belonging to N
  
!    procedure Zero_Slots (N : Node_Or_Entity_Id) with Inline;
!    --  Zero the slots belonging to N (both header and dynamic)
  
!    procedure Copy_Dynamic_Slots
!      (From, To : Node_Offset; Num_Slots : Slot_Count)
!      with Inline;
!    --  Copy Num_Slots slots from From to To. Caller is responsible for ensuring
!    --  that the Num_Slots at To are a reasonable place to copy to.
  
!    procedure Copy_Slots (Source, Destination : Node_Id) with Inline;
!    --  Copies the slots (both header and dynamic) of Source to Destination;
!    --  uses the node kind to determine the Num_Slots.
  
!    function Get_Field_Value
!      (N : Node_Id; Field : Node_Or_Entity_Field) return Field_Size_32_Bit;
!    --  Get any field value as a Field_Size_32_Bit. If the field is smaller than
!    --  32 bits, convert it to Field_Size_32_Bit. The Field must be present in
!    --  the Nkind of N.
  
!    procedure Set_Field_Value
!      (N : Node_Id; Field : Node_Or_Entity_Field; Val : Field_Size_32_Bit);
!    --  Set any field value as a Field_Size_32_Bit. If the field is smaller than
!    --  32 bits, convert it from Field_Size_32_Bit, and Val had better be small
!    --  enough. The Field must be present in the Nkind of N.
  
!    procedure Check_Vanishing_Fields
!      (Old_N : Node_Id; New_Kind : Node_Kind);
!    --  Called whenever Nkind is modified. Raises an exception if not all
!    --  vanishing fields are in their initial zero state.
  
!    procedure Check_Vanishing_Fields
!      (Old_N : Entity_Id; New_Kind : Entity_Kind);
!    --  Above are the same as the ones for nodes, but for entities
  
!    procedure Init_Nkind (N : Node_Id; Val : Node_Kind);
!    --  Initialize the Nkind field, which must not have been set already. This
!    --  cannot be used to modify an already-initialized Nkind field. See also
!    --  Mutate_Nkind.
  
!    procedure Mutate_Nkind
!      (N : Node_Id; Val : Node_Kind; Old_Size : Slot_Count);
!    --  Called by the other Mutate_Nkind to do all the work. This is needed
!    --  because the call in Change_Node, which calls this one directly, happens
!    --  after zeroing N's slots, which destroys its Nkind, which prevents us
!    --  from properly computing Old_Size.
  
!    package Field_Checking is
!       --  Functions for checking field access, used only in assertions
  
!       function Field_Present
!         (Kind : Node_Kind; Field : Node_Field) return Boolean;
!       function Field_Present
!         (Kind : Entity_Kind; Field : Entity_Field) return Boolean;
!       --  True if a node/entity of the given Kind has the given Field.
!       --  Always True if assertions are disabled.
  
!    end Field_Checking;
  
!    package body Field_Checking is
  
!       --  Tables used by Field_Present
  
!       type Node_Field_Sets is array (Node_Kind) of Node_Field_Set;
!       type Node_Field_Sets_Ptr is access all Node_Field_Sets;
!       Node_Fields_Present : Node_Field_Sets_Ptr;
  
!       type Entity_Field_Sets is array (Entity_Kind) of Entity_Field_Set;
!       type Entity_Field_Sets_Ptr is access all Entity_Field_Sets;
!       Entity_Fields_Present : Entity_Field_Sets_Ptr;
  
!       procedure Init_Tables;
  
!       function Create_Node_Fields_Present
!         (Kind : Node_Kind) return Node_Field_Set;
!       function Create_Entity_Fields_Present
!         (Kind : Entity_Kind) return Entity_Field_Set;
!       --  Computes the set of fields present in each Node/Entity Kind. Used to
!       --  initialize the above tables.
  
!       --------------------------------
!       -- Create_Node_Fields_Present --
!       --------------------------------
  
!       function Create_Node_Fields_Present
!         (Kind : Node_Kind) return Node_Field_Set
!       is
!          Result : Node_Field_Set := (others => False);
!       begin
!          for J in Node_Field_Table (Kind)'Range loop
!             Result (Node_Field_Table (Kind) (J)) := True;
!          end loop;
  
!          return Result;
!       end Create_Node_Fields_Present;
  
!       --------------------------------
!       -- Create_Entity_Fields_Present --
!       --------------------------------
  
!       function Create_Entity_Fields_Present
!         (Kind : Entity_Kind) return Entity_Field_Set
!       is
!          Result : Entity_Field_Set := (others => False);
!       begin
!          for J in Entity_Field_Table (Kind)'Range loop
!             Result (Entity_Field_Table (Kind) (J)) := True;
!          end loop;
  
!          return Result;
!       end Create_Entity_Fields_Present;
  
!       -----------------
!       -- Init_Tables --
!       -----------------
  
!       procedure Init_Tables is
!       begin
!          Node_Fields_Present := new Node_Field_Sets;
  
!          for Kind in Node_Kind loop
!             Node_Fields_Present (Kind) := Create_Node_Fields_Present (Kind);
!          end loop;
  
!          Entity_Fields_Present := new Entity_Field_Sets;
  
!          for Kind in Entity_Kind loop
!             Entity_Fields_Present (Kind) :=
!               Create_Entity_Fields_Present (Kind);
!          end loop;
!       end Init_Tables;
  
!       --  In production mode, we leave Node_Fields_Present and
!       --  Entity_Fields_Present null. Field_Present is only for
!       --  use in assertions.
  
!       pragma Debug (Init_Tables);
  
!       function Field_Present
!         (Kind : Node_Kind; Field : Node_Field) return Boolean is
!       begin
!          if Node_Fields_Present = null then
!             return True;
!          end if;
  
!          return Node_Fields_Present (Kind) (Field);
!       end Field_Present;
  
!       function Field_Present
!         (Kind : Entity_Kind; Field : Entity_Field) return Boolean is
!       begin
!          if Entity_Fields_Present = null then
!             return True;
!          end if;
  
!          return Entity_Fields_Present (Kind) (Field);
!       end Field_Present;
  
!    end Field_Checking;
  
!    ------------------------
!    -- Atree_Private_Part --
!    ------------------------
  
!    package body Atree_Private_Part is
  
!       --  The following validators are disabled in production builds, by being
!       --  called in pragma Debug. They are also disabled by default in debug
!       --  builds, by setting the flags below, because they make the compiler
!       --  very slow (10 to 20 times slower). Validate can be set True to debug
!       --  the low-level accessors.
!       --
!       --  Even if Validate is True, validation is disabled during
!       --  Validate_... calls to prevent infinite recursion
!       --  (Validate_... procedures call field getters, which call
!       --  Validate_... procedures). That's what the Enable_Validate_...
!       --  flags are for; they are toggled so that when we're inside one
!       --  of them, and enter it again, the inner call doesn't do anything.
!       --  These flags are irrelevant when Validate is False.
  
!       Validate : constant Boolean := False;
  
!       Enable_Validate_Node,
!       Enable_Validate_Node_Write,
!       Enable_Validate_Node_And_Offset,
!       Enable_Validate_Node_And_Offset_Write :
!         Boolean := Validate;
  
!       procedure Validate_Node_And_Offset
!         (N : Node_Or_Entity_Id; Offset : Field_Offset);
!       procedure Validate_Node_And_Offset_Write
!         (N : Node_Or_Entity_Id; Offset : Field_Offset);
!       --  Asserts N is OK, and the Offset in slots is within N. Note that this
!       --  does not guarantee that the offset is valid, just that it's not past
!       --  the last slot. It could be pointing at unused bits within the node,
!       --  or unused padding at the end. The "_Write" version is used when we're
!       --  about to modify the node.
  
!       procedure Validate_Node_And_Offset
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) is
!       begin
!          if Enable_Validate_Node_And_Offset then
!             Enable_Validate_Node_And_Offset := False;
  
!             pragma Debug (Validate_Node (N));
!             pragma Assert (Offset'Valid);
!             pragma Assert (Offset < Size_In_Slots (N));
  
!             Enable_Validate_Node_And_Offset := True;
!          end if;
!       end Validate_Node_And_Offset;
  
!       procedure Validate_Node_And_Offset_Write
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) is
!       begin
!          if Enable_Validate_Node_And_Offset_Write then
!             Enable_Validate_Node_And_Offset_Write := False;
  
!             pragma Debug (Validate_Node_Write (N));
!             pragma Assert (Offset'Valid);
!             pragma Assert (Offset < Size_In_Slots (N));
  
!             Enable_Validate_Node_And_Offset_Write := True;
!          end if;
!       end Validate_Node_And_Offset_Write;
  
!       procedure Validate_Node (N : Node_Or_Entity_Id) is
!       begin
!          if Enable_Validate_Node then
!             Enable_Validate_Node := False;
  
!             pragma Assert (N'Valid);
!             pragma Assert (N <= Node_Offsets.Last);
!             pragma Assert (Off_L (N) >= Off_0 (N));
!             pragma Assert (Off_L (N) >= Off_F (N) - 1);
!             pragma Assert (Off_L (N) <= Slots.Last);
!             pragma Assert (Nkind (N)'Valid);
!             pragma Assert (Nkind (N) /= N_Unused_At_End);
  
!             if Nkind (N) in N_Entity then
!                pragma Assert (Ekind (N)'Valid);
!             end if;
  
!             if Nkind (N) in
!                 N_Aggregate
!               | N_Attribute_Definition_Clause
!               | N_Aspect_Specification
!               | N_Extension_Aggregate
!               | N_Freeze_Entity
!               | N_Freeze_Generic_Entity
!               | N_Has_Entity
!               | N_Selected_Component
!               | N_Use_Package_Clause
!             then
!                pragma Assert (Entity_Or_Associated_Node (N)'Valid);
!             end if;
  
!             Enable_Validate_Node := True;
!          end if;
!       end Validate_Node;
  
!       procedure Validate_Node_Write (N : Node_Or_Entity_Id) is
!       begin
!          if Enable_Validate_Node_Write then
!             Enable_Validate_Node_Write := False;
  
!             pragma Debug (Validate_Node (N));
!             pragma Assert (not Locked);
  
!             Enable_Validate_Node_Write := True;
!          end if;
!       end Validate_Node_Write;
  
!       function Is_Valid_Node (U : Union_Id) return Boolean is
!       begin
!          return Node_Id'Base (U) <= Node_Offsets.Last;
!       end Is_Valid_Node;
  
!       function Alloc_Node_Id return Node_Id is
!       begin
!          Node_Offsets.Increment_Last;
!          return Node_Offsets.Last;
!       end Alloc_Node_Id;
  
!       function Alloc_Slots (Num_Slots : Slot_Count) return Node_Offset is
!       begin
!          return Result : constant Node_Offset := Slots.Last + 1 do
!             Slots.Set_Last (Slots.Last + Num_Slots);
!          end return;
!       end Alloc_Slots;
  
!       function Get_1_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!       is
!          pragma Assert (Field_Type'Size = 1);
  
!          function Cast is new
!            Unchecked_Conversion (Field_Size_1_Bit, Field_Type);
!          Val : constant Field_Size_1_Bit := Get_1_Bit_Val (N, Offset);
!       begin
!          return Cast (Val);
!       end Get_1_Bit_Field;
  
!       function Get_2_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!       is
!          pragma Assert (Field_Type'Size = 2);
  
!          function Cast is new
!            Unchecked_Conversion (Field_Size_2_Bit, Field_Type);
!          Val : constant Field_Size_2_Bit := Get_2_Bit_Val (N, Offset);
!       begin
!          return Cast (Val);
!       end Get_2_Bit_Field;
  
!       function Get_4_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!       is
!          pragma Assert (Field_Type'Size = 4);
  
!          function Cast is new
!            Unchecked_Conversion (Field_Size_4_Bit, Field_Type);
!          Val : constant Field_Size_4_Bit := Get_4_Bit_Val (N, Offset);
!       begin
!          return Cast (Val);
!       end Get_4_Bit_Field;
  
!       function Get_8_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!       is
!          pragma Assert (Field_Type'Size = 8);
  
!          function Cast is new
!            Unchecked_Conversion (Field_Size_8_Bit, Field_Type);
!          Val : constant Field_Size_8_Bit := Get_8_Bit_Val (N, Offset);
!       begin
!          return Cast (Val);
!       end Get_8_Bit_Field;
  
!       function Get_32_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!       is
!          pragma Assert (Field_Type'Size = 32);
  
!          function Cast is new
!            Unchecked_Conversion (Field_Size_32_Bit, Field_Type);
  
!          Val : constant Field_Size_32_Bit := Get_32_Bit_Val (N, Offset);
!          Result : constant Field_Type := Cast (Val);
!          --  Note: declaring Result here instead of directly returning
!          --  Cast (...) helps CodePeer understand that there are no issues
!          --  around uninitialized variables.
!       begin
!          return Result;
!       end Get_32_Bit_Field;
  
!       function Get_32_Bit_Field_With_Default
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!       is
!          function Get_Field is new Get_32_Bit_Field (Field_Type) with Inline;
!          Result : Field_Type;
!       begin
!          --  If the field has not yet been set, it will be equal to zero.
!          --  That is of the "wrong" type, so we fetch it as a
!          --  Field_Size_32_Bit.
  
!          if Get_32_Bit_Val (N, Offset) = 0 then
!             Result := Default_Val;
  
!          else
!             Result := Get_Field (N, Offset);
!          end if;
! 
!          return Result;
!       end Get_32_Bit_Field_With_Default;
! 
!       function Get_Valid_32_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!       is
!          pragma Assert (Get_32_Bit_Val (N, Offset) /= 0);
!          --  If the field has not yet been set, it will be equal to zero.
!          --  This asserts that we don't call Get_ before Set_. Note that
!          --  the predicate on the Val parameter of Set_ checks for the No_...
!          --  value, so it can't possibly be (for example) No_Uint here.
! 
!          function Get_Field is new Get_32_Bit_Field (Field_Type) with Inline;
!          Result : constant Field_Type := Get_Field (N, Offset);
!       begin
!          return Result;
!       end Get_Valid_32_Bit_Field;
! 
!       procedure Set_1_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Type)
!       is
!          pragma Assert (Field_Type'Size = 1);
! 
!          function Cast is new
!            Unchecked_Conversion (Field_Type, Field_Size_1_Bit);
!       begin
!          Set_1_Bit_Val (N, Offset, Cast (Val));
!       end Set_1_Bit_Field;
! 
!       procedure Set_2_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Type)
!       is
!          pragma Assert (Field_Type'Size = 2);
! 
!          function Cast is new
!            Unchecked_Conversion (Field_Type, Field_Size_2_Bit);
!       begin
!          Set_2_Bit_Val (N, Offset, Cast (Val));
!       end Set_2_Bit_Field;
! 
!       procedure Set_4_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Type)
!       is
!          pragma Assert (Field_Type'Size = 4);
! 
!          function Cast is new
!            Unchecked_Conversion (Field_Type, Field_Size_4_Bit);
!       begin
!          Set_4_Bit_Val (N, Offset, Cast (Val));
!       end Set_4_Bit_Field;
! 
!       procedure Set_8_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Type)
!       is
!          pragma Assert (Field_Type'Size = 8);
! 
!          function Cast is new
!            Unchecked_Conversion (Field_Type, Field_Size_8_Bit);
!       begin
!          Set_8_Bit_Val (N, Offset, Cast (Val));
!       end Set_8_Bit_Field;
! 
!       procedure Set_32_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Type)
!       is
!          pragma Assert (Field_Type'Size = 32);
! 
!          function Cast is new
!            Unchecked_Conversion (Field_Type, Field_Size_32_Bit);
!       begin
!          Set_32_Bit_Val (N, Offset, Cast (Val));
!       end Set_32_Bit_Field;
! 
!       pragma Style_Checks ("M90");
! 
!       -----------------------------------
!       -- Low-level getters and setters --
!       -----------------------------------
! 
!       --  In the getters and setters below, we use shifting and masking to
!       --  simulate packed arrays. F_Size is the field size in bits. Mask is
!       --  that number of 1 bits in the low-order bits. F_Per_Slot is the number
!       --  of fields per slot. Slot_Off is the offset of the slot of interest.
!       --  S is the slot at that offset. V is the amount to shift by.
! 
!       function In_NH (Slot_Off : Field_Offset) return Boolean is
!         (Slot_Off < N_Head);
!       --  In_NH stands for "in Node_Header", not "in New Hampshire"
! 
!       function Get_Slot
!         (N : Node_Or_Entity_Id; Slot_Off : Field_Offset)
!          return Slot is
!          (if In_NH (Slot_Off) then
!             Node_Offsets.Table (N).Slots (Slot_Off)
!           else Slots.Table (Node_Offsets.Table (N).Offset + Slot_Off));
!       --  Get the slot value, either directly from the node header, or
!       --  indirectly from the Slots table.
! 
!       procedure Set_Slot
!         (N : Node_Or_Entity_Id; Slot_Off : Field_Offset; S : Slot);
!       --  Set the slot value, either directly from the node header, or
!       --  indirectly from the Slots table, to S.
! 
!       function Get_1_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Size_1_Bit
!       is
!          F_Size : constant := 1;
!          Mask : constant := 2**F_Size - 1;
!          F_Per_Slot : constant Field_Offset := Slot_Size / F_Size;
!          Slot_Off : constant Field_Offset := Offset / F_Per_Slot;
!          S : constant Slot := Get_Slot (N, Slot_Off);
!          V : constant Natural := Natural ((Offset mod F_Per_Slot) * F_Size);
!          pragma Debug (Validate_Node_And_Offset (N, Slot_Off));
!          Raw : constant Field_Size_1_Bit :=
!            Field_Size_1_Bit (Shift_Right (S, V) and Mask);
!       begin
!          return Raw;
!       end Get_1_Bit_Val;
! 
!       function Get_2_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Size_2_Bit
!       is
!          F_Size : constant := 2;
!          Mask : constant := 2**F_Size - 1;
!          F_Per_Slot : constant Field_Offset := Slot_Size / F_Size;
!          Slot_Off : constant Field_Offset := Offset / F_Per_Slot;
!          S : constant Slot := Get_Slot (N, Slot_Off);
!          V : constant Natural := Natural ((Offset mod F_Per_Slot) * F_Size);
!          pragma Debug (Validate_Node_And_Offset (N, Slot_Off));
!          Raw : constant Field_Size_2_Bit :=
!            Field_Size_2_Bit (Shift_Right (S, V) and Mask);
!       begin
!          return Raw;
!       end Get_2_Bit_Val;
! 
!       function Get_4_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Size_4_Bit
!       is
!          F_Size : constant := 4;
!          Mask : constant := 2**F_Size - 1;
!          F_Per_Slot : constant Field_Offset := Slot_Size / F_Size;
!          Slot_Off : constant Field_Offset := Offset / F_Per_Slot;
!          S : constant Slot := Get_Slot (N, Slot_Off);
!          V : constant Natural := Natural ((Offset mod F_Per_Slot) * F_Size);
!          pragma Debug (Validate_Node_And_Offset (N, Slot_Off));
!          Raw : constant Field_Size_4_Bit :=
!            Field_Size_4_Bit (Shift_Right (S, V) and Mask);
!       begin
!          return Raw;
!       end Get_4_Bit_Val;
! 
!       function Get_8_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Size_8_Bit
!       is
!          F_Size : constant := 8;
!          Mask : constant := 2**F_Size - 1;
!          F_Per_Slot : constant Field_Offset := Slot_Size / F_Size;
!          Slot_Off : constant Field_Offset := Offset / F_Per_Slot;
!          S : constant Slot := Get_Slot (N, Slot_Off);
!          V : constant Natural := Natural ((Offset mod F_Per_Slot) * F_Size);
!          pragma Debug (Validate_Node_And_Offset (N, Slot_Off));
!          Raw : constant Field_Size_8_Bit :=
!            Field_Size_8_Bit (Shift_Right (S, V) and Mask);
!       begin
!          return Raw;
!       end Get_8_Bit_Val;
! 
!       function Get_32_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Size_32_Bit
!       is
!          F_Size : constant := 32;
!          --  No Mask needed
!          F_Per_Slot : constant Field_Offset := Slot_Size / F_Size;
!          Slot_Off : constant Field_Offset := Offset / F_Per_Slot;
!          S : constant Slot := Get_Slot (N, Slot_Off);
!          pragma Debug (Validate_Node_And_Offset (N, Slot_Off));
!          Raw : constant Field_Size_32_Bit :=
!            Field_Size_32_Bit (S);
!       begin
!          return Raw;
!       end Get_32_Bit_Val;
! 
!       procedure Set_Slot
!         (N : Node_Or_Entity_Id; Slot_Off : Field_Offset; S : Slot) is
!       begin
!          if In_NH (Slot_Off) then
!             Node_Offsets.Table (N).Slots (Slot_Off) := S;
!          else
!             Slots.Table (Node_Offsets.Table (N).Offset + Slot_Off) := S;
!          end if;
!       end Set_Slot;
! 
!       procedure Set_1_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Size_1_Bit)
!       is
!          F_Size : constant := 1;
!          Mask : constant := 2**F_Size - 1;
!          F_Per_Slot : constant Field_Offset := Slot_Size / F_Size;
!          Slot_Off : constant Field_Offset := Offset / F_Per_Slot;
!          S : constant Slot := Get_Slot (N, Slot_Off);
!          V : constant Natural := Natural ((Offset mod F_Per_Slot) * F_Size);
!          pragma Debug (Validate_Node_And_Offset_Write (N, Slot_Off));
!       begin
!          Set_Slot
!            (N, Slot_Off,
!             (S and not Shift_Left (Mask, V)) or Shift_Left (Slot (Val), V));
!       end Set_1_Bit_Val;
! 
!       procedure Set_2_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Size_2_Bit)
!       is
!          F_Size : constant := 2;
!          Mask : constant := 2**F_Size - 1;
!          F_Per_Slot : constant Field_Offset := Slot_Size / F_Size;
!          Slot_Off : constant Field_Offset := Offset / F_Per_Slot;
!          S : constant Slot := Get_Slot (N, Slot_Off);
!          V : constant Natural := Natural ((Offset mod F_Per_Slot) * F_Size);
!          pragma Debug (Validate_Node_And_Offset_Write (N, Slot_Off));
!       begin
!          Set_Slot
!            (N, Slot_Off,
!             (S and not Shift_Left (Mask, V)) or Shift_Left (Slot (Val), V));
!       end Set_2_Bit_Val;
! 
!       procedure Set_4_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Size_4_Bit)
!       is
!          F_Size : constant := 4;
!          Mask : constant := 2**F_Size - 1;
!          F_Per_Slot : constant Field_Offset := Slot_Size / F_Size;
!          Slot_Off : constant Field_Offset := Offset / F_Per_Slot;
!          S : constant Slot := Get_Slot (N, Slot_Off);
!          V : constant Natural := Natural ((Offset mod F_Per_Slot) * F_Size);
!          pragma Debug (Validate_Node_And_Offset_Write (N, Slot_Off));
!       begin
!          Set_Slot
!            (N, Slot_Off,
!             (S and not Shift_Left (Mask, V)) or Shift_Left (Slot (Val), V));
!       end Set_4_Bit_Val;
! 
!       procedure Set_8_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Size_8_Bit)
!       is
!          F_Size : constant := 8;
!          Mask : constant := 2**F_Size - 1;
!          F_Per_Slot : constant Field_Offset := Slot_Size / F_Size;
!          Slot_Off : constant Field_Offset := Offset / F_Per_Slot;
!          S : constant Slot := Get_Slot (N, Slot_Off);
!          V : constant Natural := Natural ((Offset mod F_Per_Slot) * F_Size);
!          pragma Debug (Validate_Node_And_Offset_Write (N, Slot_Off));
!       begin
!          Set_Slot
!            (N, Slot_Off,
!             (S and not Shift_Left (Mask, V)) or Shift_Left (Slot (Val), V));
!       end Set_8_Bit_Val;
! 
!       procedure Set_32_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Size_32_Bit)
!       is
!          F_Size : constant := 32;
!          --  No Mask needed; this one doesn't do read-modify-write
!          F_Per_Slot : constant Field_Offset := Slot_Size / F_Size;
!          Slot_Off : constant Field_Offset := Offset / F_Per_Slot;
!          pragma Debug (Validate_Node_And_Offset_Write (N, Slot_Off));
!       begin
!          Set_Slot (N, Slot_Off, Slot (Val));
!       end Set_32_Bit_Val;
! 
!       ----------------------
!       -- Print_Atree_Info --
!       ----------------------
! 
!       procedure Print_Atree_Info (N : Node_Or_Entity_Id) is
!          function Cast is new Unchecked_Conversion (Slot, Int);
!       begin
!          Write_Int (Int (Size_In_Slots (N)));
!          Write_Str (" slots (");
!          Write_Int (Int (Off_0 (N)));
!          Write_Str (" .. ");
!          Write_Int (Int (Off_L (N)));
!          Write_Str ("):");
! 
!          for Off in Off_0 (N) .. Off_L (N) loop
!             Write_Str (" ");
!             Write_Int (Cast (Get_Slot (N, Off)));
!          end loop;
! 
!          Write_Eol;
!       end Print_Atree_Info;
! 
!    end Atree_Private_Part;
! 
!    ---------------------
!    -- Get_Field_Value --
!    ---------------------
! 
!    function Get_Node_Field_Union is new Get_32_Bit_Field (Union_Id)
!      with Inline;
!    --  Called when we don't know whether a field is a Node_Id or a List_Id,
!    --  etc.
! 
!    function Get_Field_Value
!      (N : Node_Id; Field : Node_Or_Entity_Field) return Field_Size_32_Bit
!    is
!       Desc : Field_Descriptor renames Field_Descriptors (Field);
!       NN : constant Node_Or_Entity_Id := Node_To_Fetch_From (N, Field);
  
     begin
!       case Field_Size (Desc.Kind) is
!          when 1 => return Field_Size_32_Bit (Get_1_Bit_Val (NN, Desc.Offset));
!          when 2 => return Field_Size_32_Bit (Get_2_Bit_Val (NN, Desc.Offset));
!          when 4 => return Field_Size_32_Bit (Get_4_Bit_Val (NN, Desc.Offset));
!          when 8 => return Field_Size_32_Bit (Get_8_Bit_Val (NN, Desc.Offset));
!          when others => return Get_32_Bit_Val (NN, Desc.Offset);  -- 32
!       end case;
!    end Get_Field_Value;
  
!    ---------------------
!    -- Set_Field_Value --
!    ---------------------
  
!    procedure Set_Field_Value
!      (N : Node_Id; Field : Node_Or_Entity_Field; Val : Field_Size_32_Bit)
!    is
!       Desc : Field_Descriptor renames Field_Descriptors (Field);
  
     begin
!       case Field_Size (Desc.Kind) is
!          when 1 => Set_1_Bit_Val (N, Desc.Offset, Field_Size_1_Bit (Val));
!          when 2 => Set_2_Bit_Val (N, Desc.Offset, Field_Size_2_Bit (Val));
!          when 4 => Set_4_Bit_Val (N, Desc.Offset, Field_Size_4_Bit (Val));
!          when 8 => Set_8_Bit_Val (N, Desc.Offset, Field_Size_8_Bit (Val));
!          when others => Set_32_Bit_Val (N, Desc.Offset, Val);  -- 32
!       end case;
!    end Set_Field_Value;
  
!    procedure Reinit_Field_To_Zero
!      (N : Node_Id; Field : Node_Or_Entity_Field)
!    is
!    begin
!       Set_Field_Value (N, Field, 0);
!    end Reinit_Field_To_Zero;
  
!    function Field_Is_Initial_Zero
!      (N : Node_Id; Field : Node_Or_Entity_Field) return Boolean is
     begin
!       return Get_Field_Value (N, Field) = 0;
!    end Field_Is_Initial_Zero;
  
!    procedure Reinit_Field_To_Zero
!      (N : Node_Id; Field : Entity_Field; Old_Ekind : Entity_Kind_Set) is
!    begin
!       pragma Assert (Old_Ekind (Ekind (N)), "Reinit: " & Ekind (N)'Img);
!       Reinit_Field_To_Zero (N, Field);
!    end Reinit_Field_To_Zero;
  
!    procedure Reinit_Field_To_Zero
!      (N : Node_Id; Field : Entity_Field; Old_Ekind : Entity_Kind) is
!       Old_Ekind_Set : Entity_Kind_Set := (others => False);
     begin
!       Old_Ekind_Set (Old_Ekind) := True;
!       Reinit_Field_To_Zero (N, Field, Old_Ekind => Old_Ekind_Set);
!    end Reinit_Field_To_Zero;
! 
!    procedure Check_Vanishing_Fields
!      (Old_N : Node_Id; New_Kind : Node_Kind)
!    is
!       Old_Kind : constant Node_Kind := Nkind (Old_N);
! 
!       --  If this fails, it means you need to call Reinit_Field_To_Zero before
!       --  calling Mutate_Nkind.
! 
!    begin
!       for J in Node_Field_Table (Old_Kind)'Range loop
!          declare
!             F : constant Node_Field := Node_Field_Table (Old_Kind) (J);
!          begin
!             if not Field_Checking.Field_Present (New_Kind, F) then
!                if not Field_Is_Initial_Zero (Old_N, F) then
!                   Write_Str (Old_Kind'Img);
!                   Write_Str (" --> ");
!                   Write_Str (New_Kind'Img);
!                   Write_Str (" Nonzero field ");
!                   Write_Str (F'Img);
!                   Write_Str (" is vanishing for node ");
!                   Write_Int (Nat (Old_N));
!                   Write_Eol;
! 
!                   raise Program_Error;
!                end if;
!             end if;
!          end;
!       end loop;
!    end Check_Vanishing_Fields;
! 
!    procedure Check_Vanishing_Fields
!      (Old_N : Entity_Id; New_Kind : Entity_Kind)
!    is
!       Old_Kind : constant Entity_Kind := Ekind (Old_N);
! 
!       --  If this fails, it means you need to call Reinit_Field_To_Zero before
!       --  calling Mutate_Ekind. But we have many cases where vanishing fields
!       --  are expected to reappear after converting to/from E_Void. Other cases
!       --  are more problematic; set a breakpoint on "(non-E_Void case)" below.
! 
!    begin
!       for J in Entity_Field_Table (Old_Kind)'Range loop
!          declare
!             F : constant Entity_Field := Entity_Field_Table (Old_Kind) (J);
!          begin
!             if not Field_Checking.Field_Present (New_Kind, F) then
!                if not Field_Is_Initial_Zero (Old_N, F) then
!                   Write_Str (Old_Kind'Img);
!                   Write_Str (" --> ");
!                   Write_Str (New_Kind'Img);
!                   Write_Str (" Nonzero field ");
!                   Write_Str (F'Img);
!                   Write_Str (" is vanishing for node ");
!                   Write_Int (Nat (Old_N));
!                   Write_Eol;
! 
!                   if New_Kind = E_Void or else Old_Kind = E_Void then
!                      Write_Line ("    (E_Void case)");
!                   else
!                      Write_Line ("    (non-E_Void case)");
!                   end if;
!                end if;
!             end if;
!          end;
!       end loop;
!    end Check_Vanishing_Fields;
! 
!    Nkind_Offset : constant Field_Offset :=
!      Field_Descriptors (F_Nkind).Offset;
! 
!    procedure Set_Node_Kind_Type is new Set_8_Bit_Field (Node_Kind) with Inline;
! 
!    procedure Init_Nkind (N : Node_Id; Val : Node_Kind) is
!       pragma Assert (Field_Is_Initial_Zero (N, F_Nkind));
!    begin
!       if Atree_Statistics_Enabled then
!          Set_Count (F_Nkind) := Set_Count (F_Nkind) + 1;
!       end if;
! 
!       Set_Node_Kind_Type (N, Nkind_Offset, Val);
!    end Init_Nkind;
! 
!    procedure Mutate_Nkind
!      (N : Node_Id; Val : Node_Kind; Old_Size : Slot_Count)
!    is
!       New_Size : constant Slot_Count := Size_In_Slots_To_Alloc (Val);
! 
!       All_Node_Offsets : Node_Offsets.Table_Type renames
!         Node_Offsets.Table (Node_Offsets.First .. Node_Offsets.Last);
!    begin
!       pragma Debug (Check_Vanishing_Fields (N, Val));
! 
!       --  Grow the slots if necessary
! 
!       if Old_Size < New_Size then
!          declare
!             Old_Last_Slot : constant Node_Offset := Slots.Last;
!             Old_Off_F : constant Node_Offset := Off_F (N);
!          begin
!             if Old_Last_Slot = Old_Off_F + Old_Size - 1 then
!                --  In this case, the slots are at the end of Slots.Table, so we
!                --  don't need to move them.
!                Slots.Set_Last (Old_Last_Slot + New_Size - Old_Size);
! 
!             else
!                --  Move the slots
! 
!                declare
!                   New_Off_F : constant Node_Offset := Alloc_Slots (New_Size);
!                begin
!                   All_Node_Offsets (N).Offset := New_Off_F - N_Head;
!                   Copy_Dynamic_Slots (Old_Off_F, New_Off_F, Old_Size);
!                   pragma Debug
!                     (Zero_Dynamic_Slots (Old_Off_F, Old_Off_F + Old_Size - 1));
!                end;
!             end if;
!          end;
! 
!          Zero_Dynamic_Slots (Off_F (N) + Old_Size, Slots.Last);
!       end if;
! 
!       if Atree_Statistics_Enabled then
!          Set_Count (F_Nkind) := Set_Count (F_Nkind) + 1;
!       end if;
! 
!       Set_Node_Kind_Type (N, Nkind_Offset, Val);
!       pragma Debug (Validate_Node_Write (N));
! 
!       New_Node_Debugging_Output (N);
!    end Mutate_Nkind;
! 
!    procedure Mutate_Nkind (N : Node_Id; Val : Node_Kind) is
!    begin
!       Mutate_Nkind (N, Val, Old_Size => Size_In_Slots_Dynamic (N));
!    end Mutate_Nkind;
! 
!    Ekind_Offset : constant Field_Offset :=
!      Field_Descriptors (F_Ekind).Offset;
! 
!    procedure Set_Entity_Kind_Type is new Set_8_Bit_Field (Entity_Kind)
!      with Inline;
! 
!    procedure Mutate_Ekind
!      (N : Entity_Id; Val : Entity_Kind)
!    is
!    begin
!       if Ekind (N) = Val then
!          return;
!       end if;
! 
!       if Debug_Flag_Underscore_V then
!          pragma Debug (Check_Vanishing_Fields (N, Val));
!       end if;
! 
!       --  For now, we are allocating all entities with the same size, so we
!       --  don't need to reallocate slots here.
! 
!       if Atree_Statistics_Enabled then
!          Set_Count (F_Nkind) := Set_Count (F_Ekind) + 1;
!       end if;
! 
!       Set_Entity_Kind_Type (N, Ekind_Offset, Val);
!       pragma Debug (Validate_Node_Write (N));
! 
!       New_Node_Debugging_Output (N);
!    end Mutate_Ekind;
! 
!    -----------------------
!    -- Allocate_New_Node --
!    -----------------------
! 
!    function Allocate_New_Node (Kind : Node_Kind) return Node_Id is
!    begin
!       return Result : constant Node_Id := Alloc_Node_Id do
!          declare
!             Sz : constant Slot_Count := Size_In_Slots_To_Alloc (Kind);
!             Sl : constant Node_Offset := Alloc_Slots (Sz);
!          begin
!             Node_Offsets.Table (Result).Offset := Sl - N_Head;
!             Zero_Dynamic_Slots (Sl, Sl + Sz - 1);
!             Zero_Header_Slots (Result);
!          end;
! 
!          Init_Nkind (Result, Kind);
! 
!          Orig_Nodes.Append (Result);
!          Set_Comes_From_Source (Result, Comes_From_Source_Default);
!          Allocate_List_Tables (Result);
!          Report (Target => Result, Source => Empty);
!       end return;
!    end Allocate_New_Node;
  
     --------------------------
     -- Check_Error_Detected --
*************** package body Atree is
*** 628,647 ****
     -- Change_Node --
     -----------------
  
!    procedure Change_Node (N : Node_Id; New_Node_Kind : Node_Kind) is
! 
!       --  Flags table attributes
! 
!       Save_CA     : constant Boolean := Flags.Table (N).Check_Actuals;
!       Save_Is_IGN : constant Boolean := Flags.Table (N).Is_Ignored_Ghost_Node;
  
!       --  Nodes table attributes
  
-       Save_CFS     : constant Boolean    := Nodes.Table (N).Comes_From_Source;
-       Save_In_List : constant Boolean    := Nodes.Table (N).In_List;
-       Save_Link    : constant Union_Id   := Nodes.Table (N).Link;
-       Save_Posted  : constant Boolean    := Nodes.Table (N).Error_Posted;
        Save_Sloc    : constant Source_Ptr := Sloc (N);
  
        Par_Count : Nat := 0;
  
--- 1158,1178 ----
     -- Change_Node --
     -----------------
  
!    procedure Change_Node (N : Node_Id; New_Kind : Node_Kind) is
!       pragma Debug (Validate_Node_Write (N));
!       pragma Assert (Nkind (N) not in N_Entity);
!       pragma Assert (New_Kind not in N_Entity);
  
!       Old_Size : constant Slot_Count := Size_In_Slots_Dynamic (N);
!       New_Size : constant Slot_Count := Size_In_Slots_To_Alloc (New_Kind);
  
        Save_Sloc    : constant Source_Ptr := Sloc (N);
+       Save_In_List : constant Boolean    := In_List (N);
+       Save_CFS     : constant Boolean    := Comes_From_Source (N);
+       Save_Posted  : constant Boolean    := Error_Posted (N);
+       Save_CA      : constant Boolean    := Check_Actuals (N);
+       Save_Is_IGN  : constant Boolean    := Is_Ignored_Ghost_Node (N);
+       Save_Link    : constant Union_Id   := Link (N);
  
        Par_Count : Nat := 0;
  
*************** package body Atree is
*** 650,722 ****
           Par_Count := Paren_Count (N);
        end if;
  
!       Nodes.Table (N)                   := Default_Node;
!       Nodes.Table (N).Sloc              := Save_Sloc;
!       Nodes.Table (N).In_List           := Save_In_List;
!       Nodes.Table (N).Link              := Save_Link;
!       Nodes.Table (N).Comes_From_Source := Save_CFS;
!       Nodes.Table (N).Nkind             := New_Node_Kind;
!       Nodes.Table (N).Error_Posted      := Save_Posted;
  
!       Flags.Table (N)                       := Default_Flags;
!       Flags.Table (N).Check_Actuals         := Save_CA;
!       Flags.Table (N).Is_Ignored_Ghost_Node := Save_Is_IGN;
  
!       if New_Node_Kind in N_Subexpr then
           Set_Paren_Count (N, Par_Count);
        end if;
     end Change_Node;
  
!    -----------------------
!    -- Comes_From_Source --
!    -----------------------
  
-    function Comes_From_Source (N : Node_Id) return Boolean is
     begin
!       pragma Assert (N <= Nodes.Last);
!       return Nodes.Table (N).Comes_From_Source;
!    end Comes_From_Source;
  
!    ----------------
!    -- Convention --
!    ----------------
  
-    function Convention (E : Entity_Id) return Convention_Id is
     begin
!       pragma Assert (Nkind (E) in N_Entity);
!       return To_Flag_Word (Nodes.Table (E + 2).Field12).Convention;
!    end Convention;
  
     ---------------
     -- Copy_Node --
     ---------------
  
!    procedure Copy_Node (Source : Node_Id; Destination : Node_Id) is
!       Save_In_List : constant Boolean  := Nodes.Table (Destination).In_List;
!       Save_Link    : constant Union_Id := Nodes.Table (Destination).Link;
! 
!    begin
!       pragma Debug (New_Node_Debugging_Output (Source));
!       pragma Debug (New_Node_Debugging_Output (Destination));
  
!       Nodes.Table (Destination)         := Nodes.Table (Source);
!       Nodes.Table (Destination).In_List := Save_In_List;
!       Nodes.Table (Destination).Link    := Save_Link;
  
!       Flags.Table (Destination) := Flags.Table (Source);
  
!       Set_Paren_Count_Of_Copy (Target => Destination, Source => Source);
  
!       --  Deal with copying extension nodes if present. No need to copy flags
!       --  table entries, since they are always zero for extending components.
  
!       pragma Assert (Has_Extension (Source) = Has_Extension (Destination));
  
!       if Has_Extension (Source) then
!          for J in 1 .. Num_Extension_Nodes loop
!             Nodes.Table (Destination + J) := Nodes.Table (Source + J);
!          end loop;
        end if;
     end Copy_Node;
  
     ------------------------
--- 1181,1287 ----
           Par_Count := Paren_Count (N);
        end if;
  
!       if New_Size > Old_Size then
!          declare
!             New_Offset : constant Field_Offset := Alloc_Slots (New_Size);
!          begin
!             pragma Debug (Zero_Slots (N));
!             Node_Offsets.Table (N).Offset := New_Offset - N_Head;
!             Zero_Dynamic_Slots (New_Offset, New_Offset + New_Size - 1);
!             Zero_Header_Slots (N);
!          end;
  
!       else
!          Zero_Slots (N);
!       end if;
  
!       Init_Nkind (N, New_Kind); -- Not Mutate, because of Zero_Slots above
! 
!       Set_Sloc (N, Save_Sloc);
!       Set_In_List (N, Save_In_List);
!       Set_Comes_From_Source (N, Save_CFS);
!       Set_Error_Posted (N, Save_Posted);
!       Set_Check_Actuals (N, Save_CA);
!       Set_Is_Ignored_Ghost_Node (N, Save_Is_IGN);
!       Set_Link (N, Save_Link);
! 
!       if New_Kind in N_Subexpr then
           Set_Paren_Count (N, Par_Count);
        end if;
     end Change_Node;
  
!    ----------------
!    -- Copy_Slots --
!    ----------------
! 
!    procedure Copy_Dynamic_Slots
!      (From, To : Node_Offset; Num_Slots : Slot_Count)
!    is
!       pragma Assert (if Num_Slots /= 0 then From /= To);
! 
!       All_Slots : Slots.Table_Type renames
!         Slots.Table (Slots.First .. Slots.Last);
! 
!       Source_Slots : Slots.Table_Type renames
!         All_Slots (From .. From + Num_Slots - 1);
! 
!       Destination_Slots : Slots.Table_Type renames
!         All_Slots (To .. To + Num_Slots - 1);
  
     begin
!       Destination_Slots := Source_Slots;
!    end Copy_Dynamic_Slots;
  
!    procedure Copy_Slots (Source, Destination : Node_Id) is
!       pragma Debug (Validate_Node (Source));
!       pragma Assert (Source /= Destination);
! 
!       S_Size : constant Slot_Count := Size_In_Slots_Dynamic (Source);
! 
!       All_Node_Offsets : Node_Offsets.Table_Type renames
!         Node_Offsets.Table (Node_Offsets.First .. Node_Offsets.Last);
  
     begin
!       Copy_Dynamic_Slots
!         (Off_F (Source), Off_F (Destination), S_Size);
!       All_Node_Offsets (Destination).Slots := All_Node_Offsets (Source).Slots;
!    end Copy_Slots;
  
     ---------------
     -- Copy_Node --
     ---------------
  
!    procedure Copy_Node (Source, Destination : Node_Or_Entity_Id) is
!       pragma Assert (Source /= Destination);
  
!       Save_In_List : constant Boolean  := In_List (Destination);
!       Save_Link    : constant Union_Id := Link (Destination);
  
!       S_Size : constant Slot_Count := Size_In_Slots_To_Alloc (Source);
!       D_Size : constant Slot_Count := Size_In_Slots_To_Alloc (Destination);
  
!    begin
!       New_Node_Debugging_Output (Source);
!       New_Node_Debugging_Output (Destination);
  
!       --  Currently all entities are allocated the same number of slots.
!       --  Hopefully that won't always be the case, but if it is, the following
!       --  is suboptimal if D_Size < S_Size, because in fact the Destination was
!       --  allocated the max.
  
!       --  If Source doesn't fit in Destination, we need to allocate
  
!       if D_Size < S_Size then
!          pragma Debug (Zero_Slots (Destination)); -- destroy old slots
!          Node_Offsets.Table (Destination).Offset :=
!            Alloc_Slots (S_Size) - N_Head;
        end if;
+ 
+       Copy_Slots (Source, Destination);
+ 
+       Set_In_List (Destination, Save_In_List);
+       Set_Link (Destination, Save_Link);
+       Set_Paren_Count_Of_Copy (Target => Destination, Source => Source);
     end Copy_Node;
  
     ------------------------
*************** package body Atree is
*** 725,734 ****
  
     function Copy_Separate_List (Source : List_Id) return List_Id is
        Result : constant List_Id := New_List;
!       Nod    : Node_Id;
  
     begin
-       Nod := First (Source);
        while Present (Nod) loop
           Append (Copy_Separate_Tree (Nod), Result);
           Next (Nod);
--- 1290,1298 ----
  
     function Copy_Separate_List (Source : List_Id) return List_Id is
        Result : constant List_Id := New_List;
!       Nod    : Node_Id := First (Source);
  
     begin
        while Present (Nod) loop
           Append (Copy_Separate_Tree (Nod), Result);
           Next (Nod);
*************** package body Atree is
*** 742,751 ****
     ------------------------
  
     function Copy_Separate_Tree (Source : Node_Id) return Node_Id is
        New_Id : Node_Id;
  
        function Copy_Entity (E : Entity_Id) return Entity_Id;
!       --  Copy Entity, copying only the Ekind and Chars fields
  
        function Copy_List (List : List_Id) return List_Id;
        --  Copy list
--- 1306,1318 ----
     ------------------------
  
     function Copy_Separate_Tree (Source : Node_Id) return Node_Id is
+ 
+       pragma Debug (Validate_Node (Source));
+ 
        New_Id : Node_Id;
  
        function Copy_Entity (E : Entity_Id) return Entity_Id;
!       --  Copy Entity, copying only Chars field
  
        function Copy_List (List : List_Id) return List_Id;
        --  Copy list
*************** package body Atree is
*** 759,783 ****
        -----------------
  
        function Copy_Entity (E : Entity_Id) return Entity_Id is
-          New_Ent : Entity_Id;
- 
        begin
!          --  Build appropriate node
! 
!          case N_Entity (Nkind (E)) is
!             when N_Defining_Identifier =>
!                New_Ent := New_Entity (N_Defining_Identifier, Sloc (E));
! 
!             when N_Defining_Character_Literal =>
!                New_Ent := New_Entity (N_Defining_Character_Literal, Sloc (E));
! 
!             when N_Defining_Operator_Symbol =>
!                New_Ent := New_Entity (N_Defining_Operator_Symbol, Sloc (E));
!          end case;
  
!          Set_Chars (New_Ent, Chars (E));
!          --  Set_Comes_From_Source (New_Ent, Comes_From_Source (E));
!          return New_Ent;
        end Copy_Entity;
  
        ---------------
--- 1326,1338 ----
        -----------------
  
        function Copy_Entity (E : Entity_Id) return Entity_Id is
        begin
!          pragma Assert (Nkind (E) in N_Entity);
  
!          return Result : constant Entity_Id := New_Entity (Nkind (E), Sloc (E))
!          do
!             Set_Chars (Result, Chars (E));
!          end return;
        end Copy_Entity;
  
        ---------------
*************** package body Atree is
*** 797,803 ****
  
              E := First (List);
              while Present (E) loop
!                if Has_Extension (E) then
                    Append (Copy_Entity (E), NL);
                 else
                    Append (Copy_Separate_Tree (E), NL);
--- 1352,1358 ----
  
              E := First (List);
              while Present (E) loop
!                if Is_Entity (E) then
                    Append (Copy_Entity (E), NL);
                 else
                    Append (Copy_Separate_Tree (E), NL);
*************** package body Atree is
*** 821,827 ****
           if Field in Node_Range then
              New_N := Union_Id (Copy_Separate_Tree (Node_Id (Field)));
  
!             if Parent (Node_Id (Field)) = Source then
                 Set_Parent (Node_Id (New_N), New_Id);
              end if;
  
--- 1376,1384 ----
           if Field in Node_Range then
              New_N := Union_Id (Copy_Separate_Tree (Node_Id (Field)));
  
!             if Present (Node_Id (Field))
!               and then Parent (Node_Id (Field)) = Source
!             then
                 Set_Parent (Node_Id (New_N), New_Id);
              end if;
  
*************** package body Atree is
*** 841,865 ****
           end if;
        end Possible_Copy;
  
     --  Start of processing for Copy_Separate_Tree
  
     begin
        if Source <= Empty_Or_Error then
           return Source;
  
!       elsif Has_Extension (Source) then
           return Copy_Entity (Source);
  
        else
           New_Id := New_Copy (Source);
  
!          --  Recursively copy descendants
! 
!          Set_Field1 (New_Id, Possible_Copy (Field1 (New_Id)));
!          Set_Field2 (New_Id, Possible_Copy (Field2 (New_Id)));
!          Set_Field3 (New_Id, Possible_Copy (Field3 (New_Id)));
!          Set_Field4 (New_Id, Possible_Copy (Field4 (New_Id)));
!          Set_Field5 (New_Id, Possible_Copy (Field5 (New_Id)));
  
           --  Explicitly copy the aspect specifications as those do not reside
           --  in a node field.
--- 1398,1418 ----
           end if;
        end Possible_Copy;
  
+       procedure Walk is new Walk_Sinfo_Fields_Pairwise (Possible_Copy);
+ 
     --  Start of processing for Copy_Separate_Tree
  
     begin
        if Source <= Empty_Or_Error then
           return Source;
  
!       elsif Is_Entity (Source) then
           return Copy_Entity (Source);
  
        else
           New_Id := New_Copy (Source);
  
!          Walk (New_Id, Source);
  
           --  Explicitly copy the aspect specifications as those do not reside
           --  in a node field.
*************** package body Atree is
*** 902,919 ****
              --  binder, so we don't want to add that dependency.
              --  ??? Revisit now that ASIS is no longer using this unit.
  
!             --  Consequently we have no choice but to hold our noses and do
!             --  the change manually. At least we are Atree, so this odd use
!             --  of Atree.Unchecked_Access is at least all in the family.
  
!             --  Change the node type
  
!             Atree.Unchecked_Access.Set_Nkind (New_Id, N_Selected_Component);
  
!             --  Clear the Chars field which is not present in a selected
!             --  component node, so we don't want a junk value around.
  
!             Set_Node1 (New_Id, Empty);
           end if;
  
           --  All done, return copied node
--- 1455,1478 ----
              --  binder, so we don't want to add that dependency.
              --  ??? Revisit now that ASIS is no longer using this unit.
  
!             --  Consequently we have no choice but to hold our noses and do the
!             --  change manually. At least we are Atree, so this is at least all
!             --  in the family.
  
!             --  Clear the Chars field which is not present in a selected
!             --  component node, so we don't want a junk value around. Note that
!             --  we can't just call Set_Chars, because Empty is of the wrong
!             --  type, and is outside the range of Name_Id.
  
!             Reinit_Field_To_Zero (New_Id, F_Chars);
!             Reinit_Field_To_Zero (New_Id, F_Has_Private_View);
!             Reinit_Field_To_Zero (New_Id, F_Is_Elaboration_Checks_OK_Node);
!             Reinit_Field_To_Zero (New_Id, F_Is_Elaboration_Warnings_OK_Node);
!             Reinit_Field_To_Zero (New_Id, F_Is_SPARK_Mode_On_Node);
  
!             --  Change the node type
  
!             Mutate_Nkind (New_Id, N_Selected_Component);
           end if;
  
           --  All done, return copied node
*************** package body Atree is
*** 922,979 ****
        end if;
     end Copy_Separate_Tree;
  
-    -----------
-    -- Ekind --
-    -----------
- 
-    function Ekind (E : Entity_Id) return Entity_Kind is
-    begin
-       pragma Assert (Nkind (E) in N_Entity);
-       return N_To_E (Nodes.Table (E + 1).Nkind);
-    end Ekind;
- 
-    ------------------
-    -- Error_Posted --
-    ------------------
- 
-    function Error_Posted (N : Node_Id) return Boolean is
-    begin
-       pragma Assert (N <= Nodes.Last);
-       return Nodes.Table (N).Error_Posted;
-    end Error_Posted;
- 
     -----------------------
     -- Exchange_Entities --
     -----------------------
  
     procedure Exchange_Entities (E1 : Entity_Id; E2 : Entity_Id) is
!       Temp_Ent : Node_Record;
!       Temp_Flg : Flags_Byte;
! 
!    begin
!       pragma Debug (New_Node_Debugging_Output (E1));
!       pragma Debug (New_Node_Debugging_Output (E2));
! 
!       pragma Assert (True
!         and then Has_Extension (E1)
!         and then Has_Extension (E2)
!         and then not Nodes.Table (E1).In_List
!         and then not Nodes.Table (E2).In_List);
! 
!       --  Exchange the contents of the two entities
! 
!       for J in 0 .. Num_Extension_Nodes loop
!          Temp_Ent := Nodes.Table (E1 + J);
!          Nodes.Table (E1 + J) := Nodes.Table (E2 + J);
!          Nodes.Table (E2 + J) := Temp_Ent;
!       end loop;
  
!       --  Exchange flag bytes for first component. No need to do the exchange
!       --  for the other components, since the flag bytes are always zero.
  
!       Temp_Flg := Flags.Table (E1);
!       Flags.Table (E1) := Flags.Table (E2);
!       Flags.Table (E2) := Temp_Flg;
  
        --  That exchange exchanged the parent pointers as well, which is what
        --  we want, but we need to patch up the defining identifier pointers
--- 1481,1502 ----
        end if;
     end Copy_Separate_Tree;
  
     -----------------------
     -- Exchange_Entities --
     -----------------------
  
     procedure Exchange_Entities (E1 : Entity_Id; E2 : Entity_Id) is
!       pragma Debug (Validate_Node_Write (E1));
!       pragma Debug (Validate_Node_Write (E2));
!       pragma Assert
!         (Is_Entity (E1) and then Is_Entity (E2)
!            and then not In_List (E1) and then not In_List (E2));
  
!       Old_E1 : constant Node_Header := Node_Offsets.Table (E1);
  
!    begin
!       Node_Offsets.Table (E1) := Node_Offsets.Table (E2);
!       Node_Offsets.Table (E2) := Old_E1;
  
        --  That exchange exchanged the parent pointers as well, which is what
        --  we want, but we need to patch up the defining identifier pointers
*************** package body Atree is
*** 982,1060 ****
        --  case we don't do anything otherwise we won't be able to revert back
        --  to the original situation.
  
!       --  Shouldn't this use Is_Itype instead of the Parent test
  
        if Present (Parent (E1)) and then Present (Parent (E2)) then
           Set_Defining_Identifier (Parent (E1), E1);
           Set_Defining_Identifier (Parent (E2), E2);
        end if;
     end Exchange_Entities;
  
     -----------------
     -- Extend_Node --
     -----------------
  
!    function Extend_Node (Source : Node_Id) return Entity_Id is
        pragma Assert (Present (Source));
!       pragma Assert (not Has_Extension (Source));
!       New_Id : Entity_Id;
! 
!       procedure Debug_Extend_Node;
!       pragma Inline (Debug_Extend_Node);
!       --  Debug routine for -gnatdn
! 
!       -----------------------
!       -- Debug_Extend_Node --
!       -----------------------
! 
!       procedure Debug_Extend_Node is
!       begin
!          if Debug_Flag_N then
!             Write_Str ("Extend node ");
!             Write_Int (Int (Source));
! 
!             if New_Id = Source then
!                Write_Str (" in place");
!             else
!                Write_Str (" copied to ");
!                Write_Int (Int (New_Id));
!             end if;
  
!             --  Write_Eol;
!          end if;
!       end Debug_Extend_Node;
  
     --  Start of processing for Extend_Node
  
     begin
!       --  Optimize the case where Source happens to be the last node; in that
!       --  case, we don't need to move it.
! 
!       if Source = Nodes.Last then
!          New_Id := Source;
!       else
!          Nodes.Append (Nodes.Table (Source));
!          Flags.Append (Flags.Table (Source));
!          New_Id := Nodes.Last;
!          Orig_Nodes.Append (New_Id);
!       end if;
! 
!       Set_Check_Actuals (New_Id, False);
! 
!       --  Set extension nodes
! 
!       for J in 1 .. Num_Extension_Nodes loop
!          Nodes.Append (Default_Node_Extension);
!          Flags.Append (Default_Flags);
!       end loop;
! 
!       Orig_Nodes.Set_Last (Nodes.Last);
!       Allocate_List_Tables (Nodes.Last);
!       Report (Target => New_Id, Source => Source);
! 
!       pragma Debug (Debug_Extend_Node);
! 
!       return New_Id;
     end Extend_Node;
  
     -----------------
--- 1505,1547 ----
        --  case we don't do anything otherwise we won't be able to revert back
        --  to the original situation.
  
!       --  Shouldn't this use Is_Itype instead of the Parent test???
  
        if Present (Parent (E1)) and then Present (Parent (E2)) then
           Set_Defining_Identifier (Parent (E1), E1);
           Set_Defining_Identifier (Parent (E2), E2);
        end if;
+ 
+       New_Node_Debugging_Output (E1);
+       New_Node_Debugging_Output (E2);
     end Exchange_Entities;
  
     -----------------
     -- Extend_Node --
     -----------------
  
!    procedure Extend_Node (Source : Node_Id) is
        pragma Assert (Present (Source));
!       pragma Assert (not Is_Entity (Source));
  
!       Old_Kind : constant Node_Kind := Nkind (Source);
!       pragma Assert (Old_Kind in N_Direct_Name);
!       New_Kind : constant Node_Kind :=
!         (case Old_Kind is
!            when N_Character_Literal => N_Defining_Character_Literal,
!            when N_Identifier => N_Defining_Identifier,
!            when N_Operator_Symbol => N_Defining_Operator_Symbol,
!            when others => N_Unused_At_Start); -- can't happen
!       --  The new NKind, which is the appropriate value of N_Entity based on
!       --  the old Nkind. N_xxx is mapped to N_Defining_xxx.
!       pragma Assert (New_Kind in N_Entity);
  
     --  Start of processing for Extend_Node
  
     begin
!       Set_Check_Actuals (Source, False);
!       Mutate_Nkind (Source, New_Kind);
!       Report (Target => Source, Source => Source);
     end Extend_Node;
  
     -----------------
*************** package body Atree is
*** 1081,1087 ****
  
           if Field in Node_Range
             and then Present (Node_Id (Field))
!            and then not Nodes.Table (Node_Id (Field)).In_List
             and then Parent (Node_Id (Field)) = Ref_Node
           then
              Set_Parent (Node_Id (Field), Fix_Node);
--- 1568,1574 ----
  
           if Field in Node_Range
             and then Present (Node_Id (Field))
!            and then not In_List (Node_Id (Field))
             and then Parent (Node_Id (Field)) = Ref_Node
           then
              Set_Parent (Node_Id (Field), Fix_Node);
*************** package body Atree is
*** 1096,1120 ****
           end if;
        end Fix_Parent;
  
     --  Start of processing for Fix_Parents
  
     begin
!       Fix_Parent (Field1 (Fix_Node));
!       Fix_Parent (Field2 (Fix_Node));
!       Fix_Parent (Field3 (Fix_Node));
!       Fix_Parent (Field4 (Fix_Node));
!       Fix_Parent (Field5 (Fix_Node));
     end Fix_Parents;
  
-    -------------------
-    -- Flags_Address --
-    -------------------
- 
-    function Flags_Address return System.Address is
-    begin
-       return Flags.Table (First_Node_Id)'Address;
-    end Flags_Address;
- 
     -----------------------------------
     -- Get_Comes_From_Source_Default --
     -----------------------------------
--- 1583,1605 ----
           end if;
        end Fix_Parent;
  
+       Fields : Node_Field_Array renames
+         Node_Field_Table (Nkind (Fix_Node)).all;
+ 
     --  Start of processing for Fix_Parents
  
     begin
!       for J in Fields'Range loop
!          declare
!             Desc : Field_Descriptor renames Field_Descriptors (Fields (J));
!          begin
!             if Desc.Kind in Node_Id_Field | List_Id_Field then
!                Fix_Parent (Get_Node_Field_Union (Fix_Node, Desc.Offset));
!             end if;
!          end;
!       end loop;
     end Fix_Parents;
  
     -----------------------------------
     -- Get_Comes_From_Source_Default --
     -----------------------------------
*************** package body Atree is
*** 1124,1147 ****
        return Comes_From_Source_Default;
     end Get_Comes_From_Source_Default;
  
!    -----------------
!    -- Has_Aspects --
!    -----------------
! 
!    function Has_Aspects (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (N <= Nodes.Last);
!       return Nodes.Table (N).Has_Aspects;
!    end Has_Aspects;
! 
!    -------------------
!    -- Has_Extension --
!    -------------------
  
!    function Has_Extension (N : Node_Id) return Boolean is
     begin
!       return N < Nodes.Last and then Nodes.Table (N + 1).Is_Extension;
!    end Has_Extension;
  
     ----------------
     -- Initialize --
--- 1609,1622 ----
        return Comes_From_Source_Default;
     end Get_Comes_From_Source_Default;
  
!    ---------------
!    -- Is_Entity --
!    ---------------
  
!    function Is_Entity (N : Node_Or_Entity_Id) return Boolean is
     begin
!       return Nkind (N) in N_Entity;
!    end Is_Entity;
  
     ----------------
     -- Initialize --
*************** package body Atree is
*** 1152,1191 ****
        pragma Warnings (Off, Dummy);
  
     begin
-       Atree_Private_Part.Nodes.Init;
-       Atree_Private_Part.Flags.Init;
-       Orig_Nodes.Init;
-       Paren_Counts.Init;
- 
        --  Allocate Empty node
  
        Dummy := New_Node (N_Empty, No_Location);
!       Set_Name1 (Empty, No_Name);
  
        --  Allocate Error node, and set Error_Posted, since we certainly
        --  only generate an Error node if we do post some kind of error.
  
        Dummy := New_Node (N_Error, No_Location);
!       Set_Name1 (Error, Error_Name);
        Set_Error_Posted (Error, True);
     end Initialize;
  
-    ---------------------------
-    -- Is_Ignored_Ghost_Node --
-    ---------------------------
- 
-    function Is_Ignored_Ghost_Node (N : Node_Id) return Boolean is
-    begin
-       return Flags.Table (N).Is_Ignored_Ghost_Node;
-    end Is_Ignored_Ghost_Node;
- 
     --------------------------
     -- Is_Rewrite_Insertion --
     --------------------------
  
     function Is_Rewrite_Insertion (Node : Node_Id) return Boolean is
     begin
!       return Nodes.Table (Node).Rewrite_Ins;
     end Is_Rewrite_Insertion;
  
     -----------------------------
--- 1627,1654 ----
        pragma Warnings (Off, Dummy);
  
     begin
        --  Allocate Empty node
  
        Dummy := New_Node (N_Empty, No_Location);
!       Set_Chars (Empty, No_Name);
!       pragma Assert (Dummy = Empty);
  
        --  Allocate Error node, and set Error_Posted, since we certainly
        --  only generate an Error node if we do post some kind of error.
  
        Dummy := New_Node (N_Error, No_Location);
!       Set_Chars (Error, Error_Name);
        Set_Error_Posted (Error, True);
+       pragma Assert (Dummy = Error);
     end Initialize;
  
     --------------------------
     -- Is_Rewrite_Insertion --
     --------------------------
  
     function Is_Rewrite_Insertion (Node : Node_Id) return Boolean is
     begin
!       return Rewrite_Ins (Node);
     end Is_Rewrite_Insertion;
  
     -----------------------------
*************** package body Atree is
*** 1203,1209 ****
  
     function Last_Node_Id return Node_Id is
     begin
!       return Nodes.Last;
     end Last_Node_Id;
  
     ----------
--- 1666,1672 ----
  
     function Last_Node_Id return Node_Id is
     begin
!       return Node_Offsets.Last;
     end Last_Node_Id;
  
     ----------
*************** package body Atree is
*** 1212,1225 ****
  
     procedure Lock is
     begin
-       --  We used to Release the tables, as in the comments below, but that is
-       --  a waste of time. We're only wasting virtual memory here, and the
-       --  release calls copy large amounts of data.
-       --  ???Get rid of Release?
- 
-       --  Flags.Release;
-       Flags.Locked := True;
-       --  Orig_Nodes.Release;
        Orig_Nodes.Locked := True;
     end Lock;
  
--- 1675,1680 ----
*************** package body Atree is
*** 1239,1244 ****
--- 1694,1701 ----
  
     procedure Mark_New_Ghost_Node (N : Node_Or_Entity_Id) is
     begin
+       pragma Debug (Validate_Node_Write (N));
+ 
        --  The Ghost node is created within a Ghost region
  
        if Ghost_Mode = Check then
*************** package body Atree is
*** 1268,1274 ****
  
     procedure Mark_Rewrite_Insertion (New_Node : Node_Id) is
     begin
!       Nodes.Table (New_Node).Rewrite_Ins := True;
     end Mark_Rewrite_Insertion;
  
     --------------
--- 1725,1731 ----
  
     procedure Mark_Rewrite_Insertion (New_Node : Node_Id) is
     begin
!       Set_Rewrite_Ins (New_Node);
     end Mark_Rewrite_Insertion;
  
     --------------
*************** package body Atree is
*** 1276,1336 ****
     --------------
  
     function New_Copy (Source : Node_Id) return Node_Id is
!       New_Id : Node_Id;
     begin
        if Source <= Empty_Or_Error then
           return Source;
        end if;
  
!       Nodes.Append (Nodes.Table (Source));
!       Flags.Append (Flags.Table (Source));
!       New_Id := Nodes.Last;
!       Orig_Nodes.Append (New_Id);
!       Set_Check_Actuals (New_Id, False);
!       Set_Paren_Count_Of_Copy (Target => New_Id, Source => Source);
  
!       --  Set extension nodes if required
  
!       if Has_Extension (Source) then
!          for J in 1 .. Num_Extension_Nodes loop
!             Nodes.Append (Nodes.Table (Source + J));
!             Flags.Append (Flags.Table (Source + J));
!          end loop;
!          Orig_Nodes.Set_Last (Nodes.Last);
!       else
!          pragma Assert (Orig_Nodes.Table (Orig_Nodes.Last) = Nodes.Last);
!       end if;
  
!       Allocate_List_Tables (Nodes.Last);
!       Report (Target => New_Id, Source => Source);
  
!       Nodes.Table (New_Id).In_List := False;
!       Nodes.Table (New_Id).Link    := Empty_List_Or_Node;
  
!       --  If the original is marked as a rewrite insertion, then unmark the
!       --  copy, since we inserted the original, not the copy.
  
!       Nodes.Table (New_Id).Rewrite_Ins := False;
!       pragma Debug (New_Node_Debugging_Output (New_Id));
  
!       --  Clear Is_Overloaded since we cannot have semantic interpretations
!       --  of this new node.
  
!       if Nkind (Source) in N_Subexpr then
!          Set_Is_Overloaded (New_Id, False);
!       end if;
  
!       --  Always clear Has_Aspects, the caller must take care of copying
!       --  aspects if this is required for the particular situation.
  
!       Set_Has_Aspects (New_Id, False);
  
!       --  Mark the copy as Ghost depending on the current Ghost region
  
!       Mark_New_Ghost_Node (New_Id);
  
!       pragma Assert (New_Id /= Source);
!       return New_Id;
     end New_Copy;
  
     ----------------
--- 1733,1785 ----
     --------------
  
     function New_Copy (Source : Node_Id) return Node_Id is
!       pragma Debug (Validate_Node (Source));
!       S_Size : constant Slot_Count := Size_In_Slots_To_Alloc (Source);
     begin
        if Source <= Empty_Or_Error then
           return Source;
        end if;
  
!       return New_Id : constant Node_Id := Alloc_Node_Id do
!          Node_Offsets.Table (New_Id).Offset :=
!            Alloc_Slots (S_Size) - N_Head;
!          Orig_Nodes.Append (New_Id);
!          Copy_Slots (Source, New_Id);
  
!          Set_Check_Actuals (New_Id, False);
!          Set_Paren_Count_Of_Copy (Target => New_Id, Source => Source);
  
!          Allocate_List_Tables (New_Id);
!          Report (Target => New_Id, Source => Source);
  
!          Set_In_List (New_Id, False);
!          Set_Link (New_Id, Empty_List_Or_Node);
  
!          --  If the original is marked as a rewrite insertion, then unmark the
!          --  copy, since we inserted the original, not the copy.
  
!          Set_Rewrite_Ins (New_Id, False);
  
!          --  Clear Is_Overloaded since we cannot have semantic interpretations
!          --  of this new node.
  
!          if Nkind (Source) in N_Subexpr then
!             Set_Is_Overloaded (New_Id, False);
!          end if;
  
!          --  Always clear Has_Aspects, the caller must take care of copying
!          --  aspects if this is required for the particular situation.
  
!          Set_Has_Aspects (New_Id, False);
  
!          --  Mark the copy as Ghost depending on the current Ghost region
  
!          Mark_New_Ghost_Node (New_Id);
  
!          New_Node_Debugging_Output (New_Id);
  
!          pragma Assert (New_Id /= Source);
!       end return;
     end New_Copy;
  
     ----------------
*************** package body Atree is
*** 1342,1374 ****
        New_Sloc      : Source_Ptr) return Entity_Id
     is
        pragma Assert (New_Node_Kind in N_Entity);
!       New_Id : constant Entity_Id := Allocate_New_Node;
     begin
-       --  Set extension nodes
- 
-       for J in 1 .. Num_Extension_Nodes loop
-          Nodes.Append (Default_Node_Extension);
-          Flags.Append (Default_Flags);
-       end loop;
- 
-       Orig_Nodes.Set_Last (Nodes.Last);
- 
        --  If this is a node with a real location and we are generating
        --  source nodes, then reset Current_Error_Node. This is useful
        --  if we bomb during parsing to get a error location for the bomb.
  
!       if  New_Sloc > No_Location and then Comes_From_Source_Default then
           Current_Error_Node := New_Id;
        end if;
  
!       Nodes.Table (New_Id).Nkind := New_Node_Kind;
!       Nodes.Table (New_Id).Sloc  := New_Sloc;
!       pragma Debug (New_Node_Debugging_Output (New_Id));
  
        --  Mark the new entity as Ghost depending on the current Ghost region
  
        Mark_New_Ghost_Node (New_Id);
  
        return New_Id;
     end New_Entity;
  
--- 1791,1815 ----
        New_Sloc      : Source_Ptr) return Entity_Id
     is
        pragma Assert (New_Node_Kind in N_Entity);
!       New_Id : constant Entity_Id := Allocate_New_Node (New_Node_Kind);
!       pragma Assert (Original_Node (Node_Offsets.Last) = Node_Offsets.Last);
     begin
        --  If this is a node with a real location and we are generating
        --  source nodes, then reset Current_Error_Node. This is useful
        --  if we bomb during parsing to get a error location for the bomb.
  
!       if New_Sloc > No_Location and then Comes_From_Source_Default then
           Current_Error_Node := New_Id;
        end if;
  
!       Set_Sloc (New_Id, New_Sloc);
  
        --  Mark the new entity as Ghost depending on the current Ghost region
  
        Mark_New_Ghost_Node (New_Id);
  
+       New_Node_Debugging_Output (New_Id);
+ 
        return New_Id;
     end New_Entity;
  
*************** package body Atree is
*** 1381,1392 ****
        New_Sloc      : Source_Ptr) return Node_Id
     is
        pragma Assert (New_Node_Kind not in N_Entity);
!       New_Id : constant Node_Id := Allocate_New_Node;
!       pragma Assert (Orig_Nodes.Table (Orig_Nodes.Last) = Nodes.Last);
     begin
!       Nodes.Table (New_Id).Nkind := New_Node_Kind;
!       Nodes.Table (New_Id).Sloc  := New_Sloc;
!       pragma Debug (New_Node_Debugging_Output (New_Id));
  
        --  If this is a node with a real location and we are generating source
        --  nodes, then reset Current_Error_Node. This is useful if we bomb
--- 1822,1831 ----
        New_Sloc      : Source_Ptr) return Node_Id
     is
        pragma Assert (New_Node_Kind not in N_Entity);
!       New_Id : constant Node_Id := Allocate_New_Node (New_Node_Kind);
!       pragma Assert (Original_Node (Node_Offsets.Last) = Node_Offsets.Last);
     begin
!       Set_Sloc (New_Id, New_Sloc);
  
        --  If this is a node with a real location and we are generating source
        --  nodes, then reset Current_Error_Node. This is useful if we bomb
*************** package body Atree is
*** 1400,1445 ****
  
        Mark_New_Ghost_Node (New_Id);
  
        return New_Id;
     end New_Node;
  
-    -------------------------
-    -- New_Node_Breakpoint --
-    -------------------------
- 
-    procedure nn is
-    begin
-       Write_Str ("Watched node ");
-       Write_Int (Int (Watch_Node));
-       Write_Eol;
-    end nn;
- 
-    -------------------------------
-    -- New_Node_Debugging_Output --
-    -------------------------------
- 
-    procedure nnd (N : Node_Id) is
-       Node_Is_Watched : constant Boolean := N = Watch_Node;
- 
-    begin
-       if Debug_Flag_N or else Node_Is_Watched then
-          Node_Debug_Output ("Node", N);
- 
-          if Node_Is_Watched then
-             New_Node_Breakpoint;
-          end if;
-       end if;
-    end nnd;
- 
-    -----------
-    -- Nkind --
-    -----------
- 
-    function Nkind (N : Node_Id) return Node_Kind is
-    begin
-       return Nodes.Table (N).Nkind;
-    end Nkind;
- 
     --------
     -- No --
     --------
--- 1839,1849 ----
  
        Mark_New_Ghost_Node (New_Id);
  
+       New_Node_Debugging_Output (New_Id);
+ 
        return New_Id;
     end New_Node;
  
     --------
     -- No --
     --------
*************** package body Atree is
*** 1449,1485 ****
        return N = Empty;
     end No;
  
-    -----------------------
-    -- Node_Debug_Output --
-    -----------------------
- 
-    procedure Node_Debug_Output (Op : String; N : Node_Id) is
-    begin
-       Write_Str (Op);
- 
-       if Nkind (N) in N_Entity then
-          Write_Str (" entity");
-       else
-          Write_Str (" node");
-       end if;
- 
-       Write_Str (" Id = ");
-       Write_Int (Int (N));
-       Write_Str ("  ");
-       Write_Location (Sloc (N));
-       Write_Str ("  ");
-       Write_Str (Node_Kind'Image (Nkind (N)));
-       Write_Eol;
-    end Node_Debug_Output;
- 
     -------------------
     -- Nodes_Address --
     -------------------
  
!    function Nodes_Address return System.Address is
     begin
!       return Nodes.Table (First_Node_Id)'Address;
!    end Nodes_Address;
  
     -----------------------------------
     -- Approx_Num_Nodes_And_Entities --
--- 1853,1878 ----
        return N = Empty;
     end No;
  
     -------------------
     -- Nodes_Address --
     -------------------
  
!    function Node_Offsets_Address return System.Address is
     begin
!       return Node_Offsets.Table (First_Node_Id)'Address;
!    end Node_Offsets_Address;
! 
!    function Slots_Address return System.Address is
!       Slot_Byte_Size : constant := 4;
!       pragma Assert (Slot_Byte_Size * 8 = Slot'Size);
!       Extra : constant := Slots_Low_Bound * Slot_Byte_Size;
!       --  Slots does not start at 0, so we need to subtract off the extra
!       --  amount. We are returning Slots.Table (0)'Address, except that
!       --  that component does not exist.
!       use System.Storage_Elements;
!    begin
!       return Slots.Table (Slots_Low_Bound)'Address - Extra;
!    end Slots_Address;
  
     -----------------------------------
     -- Approx_Num_Nodes_And_Entities --
*************** package body Atree is
*** 1487,1505 ****
  
     function Approx_Num_Nodes_And_Entities return Nat is
     begin
!       --  This is an overestimate, because entities take up more space, but
!       --  that really doesn't matter; it's not worth subtracting out the
!       --  "extra".
! 
!       return Nat (Nodes.Last - First_Node_Id);
     end Approx_Num_Nodes_And_Entities;
  
     -------------------
     -- Original_Node --
     -------------------
  
     function Original_Node (Node : Node_Id) return Node_Id is
     begin
        return Orig_Nodes.Table (Node);
     end Original_Node;
  
--- 1880,1934 ----
  
     function Approx_Num_Nodes_And_Entities return Nat is
     begin
!       return Nat (Node_Offsets.Last - First_Node_Id);
     end Approx_Num_Nodes_And_Entities;
  
+    -----------
+    -- Off_0 --
+    -----------
+ 
+    function Off_0 (N : Node_Id) return Node_Offset'Base is
+       pragma Debug (Validate_Node (N));
+ 
+       All_Node_Offsets : Node_Offsets.Table_Type renames
+         Node_Offsets.Table (Node_Offsets.First .. Node_Offsets.Last);
+    begin
+       return All_Node_Offsets (N).Offset;
+    end Off_0;
+ 
+    -----------
+    -- Off_F --
+    -----------
+ 
+    function Off_F (N : Node_Id) return Node_Offset is
+    begin
+       return Off_0 (N) + N_Head;
+    end Off_F;
+ 
+    -----------
+    -- Off_L --
+    -----------
+ 
+    function Off_L (N : Node_Id) return Node_Offset is
+       pragma Debug (Validate_Node (N));
+ 
+       All_Node_Offsets : Node_Offsets.Table_Type renames
+         Node_Offsets.Table (Node_Offsets.First .. Node_Offsets.Last);
+    begin
+       return All_Node_Offsets (N).Offset + Size_In_Slots (N) - 1;
+    end Off_L;
+ 
     -------------------
     -- Original_Node --
     -------------------
  
     function Original_Node (Node : Node_Id) return Node_Id is
     begin
+       pragma Debug (Validate_Node (Node));
+       if Atree_Statistics_Enabled then
+          Get_Original_Node_Count := Get_Original_Node_Count + 1;
+       end if;
+ 
        return Orig_Nodes.Table (Node);
     end Original_Node;
  
*************** package body Atree is
*** 1508,1526 ****
     -----------------
  
     function Paren_Count (N : Node_Id) return Nat is
!       C : Nat := 0;
! 
!    begin
!       pragma Assert (N <= Nodes.Last);
! 
!       if Nodes.Table (N).Pflag1 then
!          C := C + 1;
!       end if;
  
!       if Nodes.Table (N).Pflag2 then
!          C := C + 2;
!       end if;
  
        --  Value of 0,1,2 returned as is
  
        if C <= 2 then
--- 1937,1947 ----
     -----------------
  
     function Paren_Count (N : Node_Id) return Nat is
!       pragma Debug (Validate_Node (N));
  
!       C : constant Small_Paren_Count_Type := Small_Paren_Count (N);
  
+    begin
        --  Value of 0,1,2 returned as is
  
        if C <= 2 then
*************** package body Atree is
*** 1539,1554 ****
        end if;
     end Paren_Count;
  
!    ------------
!    -- Parent --
!    ------------
! 
!    function Parent (N : Node_Id) return Node_Id is
     begin
        if Is_List_Member (N) then
           return Parent (List_Containing (N));
        else
!          return Node_Id (Nodes.Table (N).Link);
        end if;
     end Parent;
  
--- 1960,1973 ----
        end if;
     end Paren_Count;
  
!    function Parent (N : Node_Or_Entity_Id) return Node_Or_Entity_Id is
     begin
+       pragma Assert (Present (N));
+ 
        if Is_List_Member (N) then
           return Parent (List_Containing (N));
        else
!          return Node_Or_Entity_Id (Link (N));
        end if;
     end Parent;
  
*************** package body Atree is
*** 1570,1683 ****
        Set_Comes_From_Source (NewN, Comes_From_Source (OldN));
     end Preserve_Comes_From_Source;
  
-    ----------------------
-    -- Print_Statistics --
-    ----------------------
- 
-    procedure Print_Statistics is
-       N_Count : constant Natural := Natural (Nodes.Last - First_Node_Id + 1);
-       E_Count : Natural := 0;
- 
-    begin
-       Write_Str ("Number of entities: ");
-       Write_Eol;
- 
-       declare
-          function CP_Lt (Op1, Op2 : Natural) return Boolean;
-          --  Compare routine for Sort
- 
-          procedure CP_Move (From : Natural; To : Natural);
-          --  Move routine for Sort
- 
-          Kind_Count : array (Node_Kind) of Natural := (others => 0);
-          --  Array of occurrence count per node kind
- 
-          Kind_Max : constant Natural := Node_Kind'Pos (N_Unused_At_End) - 1;
-          --  The index of the largest (interesting) node kind
- 
-          Ranking : array (0 .. Kind_Max) of Node_Kind;
-          --  Ranking array for node kinds (index 0 is used for the temporary)
- 
-          package Sorting is new GNAT.Heap_Sort_G (CP_Move, CP_Lt);
- 
-          function CP_Lt (Op1, Op2 : Natural) return Boolean is
-          begin
-             return Kind_Count (Ranking (Op2)) < Kind_Count (Ranking (Op1));
-          end CP_Lt;
- 
-          procedure CP_Move (From : Natural; To : Natural) is
-          begin
-             Ranking (To) := Ranking (From);
-          end CP_Move;
- 
-       begin
-          --  Count the number of occurrences of each node kind
- 
-          for I in First_Node_Id .. Nodes.Last loop
-             declare
-                Nkind : constant Node_Kind := Nodes.Table (I).Nkind;
-             begin
-                if not Nodes.Table (I).Is_Extension then
-                   Kind_Count (Nkind) := Kind_Count (Nkind) + 1;
-                end if;
-             end;
-          end loop;
- 
-          --  Sort the node kinds by number of occurrences
- 
-          for N in 1 .. Kind_Max loop
-             Ranking (N) := Node_Kind'Val (N);
-          end loop;
- 
-          Sorting.Sort (Kind_Max);
- 
-          --  Print the list in descending order
- 
-          for N in 1 .. Kind_Max loop
-             declare
-                Count : constant Natural := Kind_Count (Ranking (N));
-             begin
-                if Count > 0 then
-                   Write_Str ("  ");
-                   Write_Str (Node_Kind'Image (Ranking (N)));
-                   Write_Str (": ");
-                   Write_Int (Int (Count));
-                   Write_Eol;
- 
-                   E_Count := E_Count + Count;
-                end if;
-             end;
-          end loop;
-       end;
- 
-       Write_Str ("Total number of entities: ");
-       Write_Int (Int (E_Count));
-       Write_Eol;
- 
-       Write_Str ("Maximum number of nodes per entity: ");
-       Write_Int (Int (Num_Extension_Nodes + 1));
-       Write_Eol;
- 
-       Write_Str ("Number of allocated nodes: ");
-       Write_Int (Int (N_Count));
-       Write_Eol;
- 
-       Write_Str ("Ratio allocated nodes/entities: ");
-       Write_Int (Int (Long_Long_Integer (N_Count) * 100 /
-                                                  Long_Long_Integer (E_Count)));
-       Write_Str ("/100");
-       Write_Eol;
- 
-       Write_Str ("Size of a node in bytes: ");
-       Write_Int (Int (Node_Record'Size) / Storage_Unit);
-       Write_Eol;
- 
-       Write_Str ("Memory consumption in bytes: ");
-       Write_Int (Int (Long_Long_Integer (N_Count) *
-                                            (Node_Record'Size / Storage_Unit)));
-       Write_Eol;
-    end Print_Statistics;
- 
     -------------------
     -- Relocate_Node --
     -------------------
--- 1989,1994 ----
*************** package body Atree is
*** 1706,1712 ****
        --  then the relocated node has the same original node.
  
        if Is_Rewrite_Substitution (Source) then
!          Orig_Nodes.Table (New_Node) := Orig_Nodes.Table (Source);
        end if;
  
        return New_Node;
--- 2017,2039 ----
        --  then the relocated node has the same original node.
  
        if Is_Rewrite_Substitution (Source) then
!          Set_Original_Node (New_Node, Original_Node (Source));
!       end if;
! 
!       --  If we're relocating a subprogram call and we're doing
!       --  unnesting, be sure we make a new copy of any parameter associations
!       --  so that we don't share them.
! 
!       if Nkind (Source) in N_Subprogram_Call
!         and then Opt.Unnest_Subprogram_Mode
!         and then Present (Parameter_Associations (Source))
!       then
!          declare
!             New_Assoc : constant List_Id := Parameter_Associations (Source);
!          begin
!             Set_Parent (New_Assoc, New_Node);
!             Set_Parameter_Associations (New_Node, New_Assoc);
!          end;
        end if;
  
        return New_Node;
*************** package body Atree is
*** 1717,1751 ****
     -------------
  
     procedure Replace (Old_Node, New_Node : Node_Id) is
!       Old_Post : constant Boolean := Nodes.Table (Old_Node).Error_Posted;
!       Old_HasA : constant Boolean := Nodes.Table (Old_Node).Has_Aspects;
!       Old_CFS  : constant Boolean := Nodes.Table (Old_Node).Comes_From_Source;
  
     begin
!       pragma Assert
!         (not Has_Extension (Old_Node)
!           and not Has_Extension (New_Node)
!           and not Nodes.Table (New_Node).In_List);
  
!       pragma Debug (New_Node_Debugging_Output (Old_Node));
!       pragma Debug (New_Node_Debugging_Output (New_Node));
  
        --  Do copy, preserving link and in list status and required flags
  
        Copy_Node (Source => New_Node, Destination => Old_Node);
!       Nodes.Table (Old_Node).Comes_From_Source := Old_CFS;
!       Nodes.Table (Old_Node).Error_Posted      := Old_Post;
!       Nodes.Table (Old_Node).Has_Aspects       := Old_HasA;
  
        --  Fix parents of substituted node, since it has changed identity
  
        Fix_Parents (Ref_Node => New_Node, Fix_Node => Old_Node);
  
        --  Since we are doing a replace, we assume that the original node
        --  is intended to become the new replaced node. The call would be
        --  to Rewrite if there were an intention to save the original node.
  
!       Orig_Nodes.Table (Old_Node) := Old_Node;
  
        --  Invoke the reporting procedure (if available)
  
--- 2044,2090 ----
     -------------
  
     procedure Replace (Old_Node, New_Node : Node_Id) is
!       Old_Post : constant Boolean := Error_Posted (Old_Node);
!       Old_HasA : constant Boolean := Has_Aspects (Old_Node);
!       Old_CFS  : constant Boolean := Comes_From_Source (Old_Node);
! 
!       procedure Destroy_New_Node;
!       --  Overwrite New_Node data with junk, for debugging purposes
! 
!       procedure Destroy_New_Node is
!       begin
!          Zero_Slots (New_Node);
!          Node_Offsets.Table (New_Node).Offset := Field_Offset'Base'Last;
!       end Destroy_New_Node;
  
     begin
!       New_Node_Debugging_Output (Old_Node);
!       New_Node_Debugging_Output (New_Node);
  
!       pragma Assert
!         (not Is_Entity (Old_Node)
!           and not Is_Entity (New_Node)
!           and not In_List (New_Node)
!           and Old_Node /= New_Node);
  
        --  Do copy, preserving link and in list status and required flags
  
        Copy_Node (Source => New_Node, Destination => Old_Node);
!       Set_Comes_From_Source (Old_Node, Old_CFS);
!       Set_Error_Posted      (Old_Node, Old_Post);
!       Set_Has_Aspects       (Old_Node, Old_HasA);
  
        --  Fix parents of substituted node, since it has changed identity
  
        Fix_Parents (Ref_Node => New_Node, Fix_Node => Old_Node);
  
+       pragma Debug (Destroy_New_Node);
+ 
        --  Since we are doing a replace, we assume that the original node
        --  is intended to become the new replaced node. The call would be
        --  to Rewrite if there were an intention to save the original node.
  
!       Set_Original_Node (Old_Node, Old_Node);
  
        --  Invoke the reporting procedure (if available)
  
*************** package body Atree is
*** 1770,1793 ****
     -------------
  
     procedure Rewrite (Old_Node, New_Node : Node_Id) is
! 
!       --  Flags table attributes
! 
!       Old_CA     : constant Boolean := Flags.Table (Old_Node).Check_Actuals;
!       Old_Is_IGN : constant Boolean :=
!                      Flags.Table (Old_Node).Is_Ignored_Ghost_Node;
! 
!       --  Nodes table attributes
! 
        Old_Error_Posted : constant Boolean :=
!                            Nodes.Table (Old_Node).Error_Posted;
        Old_Has_Aspects  : constant Boolean :=
!                            Nodes.Table (Old_Node).Has_Aspects;
  
!       Old_Must_Not_Freeze : Boolean;
!       Old_Paren_Count     : Nat;
        --  These fields are preserved in the new node only if the new node and
!       --  the old node are both subexpression nodes.
  
        --  Note: it is a violation of abstraction levels for Must_Not_Freeze
        --  to be referenced like this. ???
--- 2109,2130 ----
     -------------
  
     procedure Rewrite (Old_Node, New_Node : Node_Id) is
!       Old_CA     : constant Boolean := Check_Actuals (Old_Node);
!       Old_Is_IGN : constant Boolean := Is_Ignored_Ghost_Node (Old_Node);
        Old_Error_Posted : constant Boolean :=
!                            Error_Posted (Old_Node);
        Old_Has_Aspects  : constant Boolean :=
!                            Has_Aspects (Old_Node);
  
!       Old_Must_Not_Freeze : constant Boolean :=
!         (if Nkind (Old_Node) in N_Subexpr then Must_Not_Freeze (Old_Node)
!          else False);
!       Old_Paren_Count     : constant Nat :=
!         (if Nkind (Old_Node) in N_Subexpr then Paren_Count (Old_Node) else 0);
        --  These fields are preserved in the new node only if the new node and
!       --  the old node are both subexpression nodes. We might be changing Nkind
!       --  (Old_Node) from not N_Subexpr to N_Subexpr, so we need a value
!       --  (False/0) even if Old_Noed is not a N_Subexpr.
  
        --  Note: it is a violation of abstraction levels for Must_Not_Freeze
        --  to be referenced like this. ???
*************** package body Atree is
*** 1795,1815 ****
        Sav_Node : Node_Id;
  
     begin
!       pragma Assert
!         (not Has_Extension (Old_Node)
!           and not Has_Extension (New_Node)
!           and not Nodes.Table (New_Node).In_List);
! 
!       pragma Debug (New_Node_Debugging_Output (Old_Node));
!       pragma Debug (New_Node_Debugging_Output (New_Node));
  
!       if Nkind (Old_Node) in N_Subexpr then
!          Old_Must_Not_Freeze := Must_Not_Freeze (Old_Node);
!          Old_Paren_Count     := Paren_Count (Old_Node);
!       else
!          Old_Must_Not_Freeze := False;
!          Old_Paren_Count     := 0;
!       end if;
  
        --  Allocate a new node, to be used to preserve the original contents
        --  of the Old_Node, for possible later retrival by Original_Node and
--- 2132,2144 ----
        Sav_Node : Node_Id;
  
     begin
!       New_Node_Debugging_Output (Old_Node);
!       New_Node_Debugging_Output (New_Node);
  
!       pragma Assert
!         (not Is_Entity (Old_Node)
!           and not Is_Entity (New_Node)
!           and not In_List (New_Node));
  
        --  Allocate a new node, to be used to preserve the original contents
        --  of the Old_Node, for possible later retrival by Original_Node and
*************** package body Atree is
*** 1817,1844 ****
        --  not already rewritten the node, as indicated by an Orig_Nodes entry
        --  that does not reference the Old_Node.
  
!       if Orig_Nodes.Table (Old_Node) = Old_Node then
           Sav_Node := New_Copy (Old_Node);
!          Orig_Nodes.Table (Sav_Node) := Sav_Node;
!          Orig_Nodes.Table (Old_Node) := Sav_Node;
  
           --  Both the old and new copies of the node will share the same list
           --  of aspect specifications if aspect specifications are present.
  
           if Old_Has_Aspects then
!             Set_Aspect_Specifications
!               (Sav_Node, Aspect_Specifications (Old_Node));
           end if;
        end if;
  
        --  Copy substitute node into place, preserving old fields as required
  
        Copy_Node (Source => New_Node, Destination => Old_Node);
!       Nodes.Table (Old_Node).Error_Posted := Old_Error_Posted;
!       Nodes.Table (Old_Node).Has_Aspects  := Old_Has_Aspects;
  
!       Flags.Table (Old_Node).Check_Actuals         := Old_CA;
!       Flags.Table (Old_Node).Is_Ignored_Ghost_Node := Old_Is_IGN;
  
        if Nkind (New_Node) in N_Subexpr then
           Set_Paren_Count     (Old_Node, Old_Paren_Count);
--- 2146,2179 ----
        --  not already rewritten the node, as indicated by an Orig_Nodes entry
        --  that does not reference the Old_Node.
  
!       if Original_Node (Old_Node) = Old_Node then
           Sav_Node := New_Copy (Old_Node);
!          Set_Original_Node (Sav_Node, Sav_Node);
!          Set_Original_Node (Old_Node, Sav_Node);
  
           --  Both the old and new copies of the node will share the same list
           --  of aspect specifications if aspect specifications are present.
+          --  Restore the parent link of the aspect list to the old node, which
+          --  is the one linked in the tree.
  
           if Old_Has_Aspects then
!             declare
!                Aspects : constant List_Id := Aspect_Specifications (Old_Node);
!             begin
!                Set_Aspect_Specifications (Sav_Node, Aspects);
!                Set_Parent (Aspects, Old_Node);
!             end;
           end if;
        end if;
  
        --  Copy substitute node into place, preserving old fields as required
  
        Copy_Node (Source => New_Node, Destination => Old_Node);
!       Set_Error_Posted (Old_Node, Old_Error_Posted);
!       Set_Has_Aspects  (Old_Node, Old_Has_Aspects);
  
!       Set_Check_Actuals (Old_Node, Old_CA);
!       Set_Is_Ignored_Ghost_Node (Old_Node, Old_Is_IGN);
  
        if Nkind (New_Node) in N_Subexpr then
           Set_Paren_Count     (Old_Node, Old_Paren_Count);
*************** package body Atree is
*** 1860,1896 ****
        end if;
     end Rewrite;
  
-    ------------------
-    -- Set_Analyzed --
-    ------------------
- 
-    procedure Set_Analyzed (N : Node_Id; Val : Boolean := True) is
-    begin
-       pragma Assert (not Locked);
-       Nodes.Table (N).Analyzed := Val;
-    end Set_Analyzed;
- 
-    -----------------------
-    -- Set_Check_Actuals --
-    -----------------------
- 
-    procedure Set_Check_Actuals (N : Node_Id; Val : Boolean := True) is
-    begin
-       pragma Assert (not Locked);
-       Flags.Table (N).Check_Actuals := Val;
-    end Set_Check_Actuals;
- 
-    ---------------------------
-    -- Set_Comes_From_Source --
-    ---------------------------
- 
-    procedure Set_Comes_From_Source (N : Node_Id; Val : Boolean) is
-    begin
-       pragma Assert (not Locked);
-       pragma Assert (N <= Nodes.Last);
-       Nodes.Table (N).Comes_From_Source := Val;
-    end Set_Comes_From_Source;
- 
     -----------------------------------
     -- Set_Comes_From_Source_Default --
     -----------------------------------
--- 2195,2200 ----
*************** package body Atree is
*** 1900,1937 ****
        Comes_From_Source_Default := Default;
     end Set_Comes_From_Source_Default;
  
-    ---------------
-    -- Set_Ekind --
-    ---------------
- 
-    procedure Set_Ekind (E : Entity_Id; Val : Entity_Kind) is
-    begin
-       pragma Assert (not Locked);
-       pragma Assert (Nkind (E) in N_Entity);
-       Nodes.Table (E + 1).Nkind := E_To_N (Val);
-    end Set_Ekind;
- 
-    ----------------------
-    -- Set_Error_Posted --
-    ----------------------
- 
-    procedure Set_Error_Posted (N : Node_Id; Val : Boolean := True) is
-    begin
-       pragma Assert (not Locked);
-       Nodes.Table (N).Error_Posted := Val;
-    end Set_Error_Posted;
- 
-    ---------------------
-    -- Set_Has_Aspects --
-    ---------------------
- 
-    procedure Set_Has_Aspects (N : Node_Id; Val : Boolean := True) is
-    begin
-       pragma Assert (not Locked);
-       pragma Assert (N <= Nodes.Last);
-       Nodes.Table (N).Has_Aspects := Val;
-    end Set_Has_Aspects;
- 
     --------------------------------------
     -- Set_Ignored_Ghost_Recording_Proc --
     --------------------------------------
--- 2204,2209 ----
*************** package body Atree is
*** 1944,1966 ****
        Ignored_Ghost_Recording_Proc := Proc;
     end Set_Ignored_Ghost_Recording_Proc;
  
-    -------------------------------
-    -- Set_Is_Ignored_Ghost_Node --
-    -------------------------------
- 
-    procedure Set_Is_Ignored_Ghost_Node (N : Node_Id; Val : Boolean := True) is
-    begin
-       pragma Assert (not Locked);
-       Flags.Table (N).Is_Ignored_Ghost_Node := Val;
-    end Set_Is_Ignored_Ghost_Node;
- 
     -----------------------
     -- Set_Original_Node --
     -----------------------
  
     procedure Set_Original_Node (N : Node_Id; Val : Node_Id) is
     begin
!       pragma Assert (not Locked);
        Orig_Nodes.Table (N) := Val;
     end Set_Original_Node;
  
--- 2216,2232 ----
        Ignored_Ghost_Recording_Proc := Proc;
     end Set_Ignored_Ghost_Recording_Proc;
  
     -----------------------
     -- Set_Original_Node --
     -----------------------
  
     procedure Set_Original_Node (N : Node_Id; Val : Node_Id) is
     begin
!       pragma Debug (Validate_Node_Write (N));
!       if Atree_Statistics_Enabled then
!          Set_Original_Node_Count := Set_Original_Node_Count + 1;
!       end if;
! 
        Orig_Nodes.Table (N) := Val;
     end Set_Original_Node;
  
*************** package body Atree is
*** 1970,1989 ****
  
     procedure Set_Paren_Count (N : Node_Id; Val : Nat) is
     begin
!       pragma Assert (not Locked);
        pragma Assert (Nkind (N) in N_Subexpr);
  
        --  Value of 0,1,2 stored as is
  
        if Val <= 2 then
!          Nodes.Table (N).Pflag1 := (Val mod 2 /= 0);
!          Nodes.Table (N).Pflag2 := (Val = 2);
  
        --  Value of 3 or greater stores 3 in node and makes table entry
  
        else
!          Nodes.Table (N).Pflag1 := True;
!          Nodes.Table (N).Pflag2 := True;
  
           --  Search for existing table entry
  
--- 2236,2253 ----
  
     procedure Set_Paren_Count (N : Node_Id; Val : Nat) is
     begin
!       pragma Debug (Validate_Node_Write (N));
        pragma Assert (Nkind (N) in N_Subexpr);
  
        --  Value of 0,1,2 stored as is
  
        if Val <= 2 then
!          Set_Small_Paren_Count (N, Val);
  
        --  Value of 3 or greater stores 3 in node and makes table entry
  
        else
!          Set_Small_Paren_Count (N, 3);
  
           --  Search for existing table entry
  
*************** package body Atree is
*** 2006,2016 ****
  
     procedure Set_Paren_Count_Of_Copy (Target, Source : Node_Id) is
     begin
!       --  We already copied the two Pflags. We need to update the Paren_Counts
!       --  table only if greater than 2.
  
        if Nkind (Source) in N_Subexpr
!         and then Paren_Count (Source) > 2
        then
           Set_Paren_Count (Target, Paren_Count (Source));
        end if;
--- 2270,2280 ----
  
     procedure Set_Paren_Count_Of_Copy (Target, Source : Node_Id) is
     begin
!       --  We already copied the Small_Paren_Count. We need to update the
!       --  Paren_Counts table only if greater than 2.
  
        if Nkind (Source) in N_Subexpr
!         and then Small_Paren_Count (Source) = 3
        then
           Set_Paren_Count (Target, Paren_Count (Source));
        end if;
*************** package body Atree is
*** 2022,2032 ****
     -- Set_Parent --
     ----------------
  
!    procedure Set_Parent (N : Node_Id; Val : Node_Id) is
     begin
!       pragma Assert (not Locked);
!       pragma Assert (not Nodes.Table (N).In_List);
!       Nodes.Table (N).Link := Union_Id (Val);
     end Set_Parent;
  
     ------------------------
--- 2286,2296 ----
     -- Set_Parent --
     ----------------
  
!    procedure Set_Parent (N : Node_Or_Entity_Id; Val : Node_Or_Entity_Id) is
     begin
!       pragma Assert (Present (N));
!       pragma Assert (not In_List (N));
!       Set_Link (N, Union_Id (Val));
     end Set_Parent;
  
     ------------------------
*************** package body Atree is
*** 2039,2054 ****
        Reporting_Proc := Proc;
     end Set_Reporting_Proc;
  
-    --------------
-    -- Set_Sloc --
-    --------------
- 
-    procedure Set_Sloc (N : Node_Id; Val : Source_Ptr) is
-    begin
-       pragma Assert (not Locked);
-       Nodes.Table (N).Sloc := Val;
-    end Set_Sloc;
- 
     ------------------------
     -- Set_Rewriting_Proc --
     ------------------------
--- 2303,2308 ----
*************** package body Atree is
*** 2059,2170 ****
        Rewriting_Proc := Proc;
     end Set_Rewriting_Proc;
  
!    ----------
!    -- Sloc --
!    ----------
  
!    function Sloc (N : Node_Id) return Source_Ptr is
     begin
!       return Nodes.Table (N).Sloc;
!    end Sloc;
  
     -------------------
!    -- Traverse_Func --
     -------------------
  
!    function Traverse_Func (Node : Node_Id) return Traverse_Final_Result is
  
!       function Traverse_Field
!         (Nod : Node_Id;
!          Fld : Union_Id;
!          FN  : Field_Num) return Traverse_Final_Result;
!       --  Fld is one of the fields of Nod. If the field points to syntactic
!       --  node or list, then this node or list is traversed, and the result is
!       --  the result of this traversal. Otherwise a value of True is returned
!       --  with no processing. FN is the number of the field (1 .. 5).
  
!       --------------------
!       -- Traverse_Field --
!       --------------------
  
!       function Traverse_Field
!         (Nod : Node_Id;
!          Fld : Union_Id;
!          FN  : Field_Num) return Traverse_Final_Result
!       is
!       begin
!          if Fld = Union_Id (Empty) then
!             return OK;
  
!          --  Descendant is a node
  
!          elsif Fld in Node_Range then
  
!             --  Traverse descendant that is syntactic subtree node
  
!             if Is_Syntactic_Field (Nkind (Nod), FN) then
!                return Traverse_Func (Node_Id (Fld));
  
!             --  Node that is not a syntactic subtree
  
!             else
!                return OK;
!             end if;
  
!          --  Descendant is a list
  
!          elsif Fld in List_Range then
  
!             --  Traverse descendant that is a syntactic subtree list
  
!             if Is_Syntactic_Field (Nkind (Nod), FN) then
                 declare
                    Elmt : Node_Id := First (List_Id (Fld));
- 
                 begin
                    while Present (Elmt) loop
!                      if Traverse_Func (Elmt) = Abandon then
                          return Abandon;
-                      else
-                         Next (Elmt);
                       end if;
-                   end loop;
  
!                   return OK;
                 end;
  
-             --  List that is not a syntactic subtree
- 
              else
!                return OK;
              end if;
- 
-          --  Field was not a node or a list
- 
-          else
-             return OK;
           end if;
        end Traverse_Field;
  
!       Cur_Node : Node_Id := Node;
  
!    --  Start of processing for Traverse_Func
  
     begin
!       --  We walk Field2 last, and if it is a node, we eliminate the tail
!       --  recursion by jumping back to this label. This is because Field2 is
!       --  where the Left_Opnd field of N_Op_Concat is stored, and in practice
!       --  concatenations are sometimes deeply nested, as in X1&X2&...&XN. This
!       --  trick prevents us from running out of memory in that case. We don't
!       --  bother eliminating the tail recursion if Field2 is a list.
  
        <<Tail_Recurse>>
  
!       case Process (Cur_Node) is
           when Abandon =>
              return Abandon;
  
           when Skip =>
              return OK;
  
           when OK =>
--- 2313,2456 ----
        Rewriting_Proc := Proc;
     end Set_Rewriting_Proc;
  
!    ----------------------------
!    -- Size_In_Slots_To_Alloc --
!    ----------------------------
  
!    function Size_In_Slots_To_Alloc (Kind : Node_Kind) return Slot_Count is
     begin
!       return
!         (if Kind in N_Entity then Einfo.Entities.Max_Entity_Size
!          else Sinfo.Nodes.Size (Kind)) - N_Head;
!       --  Unfortunately, we don't know the Entity_Kind, so we have to use the
!       --  max.
!    end Size_In_Slots_To_Alloc;
! 
!    function Size_In_Slots_To_Alloc
!      (N : Node_Or_Entity_Id) return Slot_Count is
!    begin
!       return Size_In_Slots_To_Alloc (Nkind (N));
!    end Size_In_Slots_To_Alloc;
  
     -------------------
!    -- Size_In_Slots --
     -------------------
  
!    function Size_In_Slots (N : Node_Or_Entity_Id) return Slot_Count is
!    begin
!       pragma Assert (Nkind (N) /= N_Unused_At_Start);
!       return
!         (if Nkind (N) in N_Entity then Einfo.Entities.Max_Entity_Size
!          else Sinfo.Nodes.Size (Nkind (N)));
!    end Size_In_Slots;
  
!    ---------------------------
!    -- Size_In_Slots_Dynamic --
!    ---------------------------
  
!    function Size_In_Slots_Dynamic (N : Node_Or_Entity_Id) return Slot_Count is
!    begin
!       return Size_In_Slots (N) - N_Head;
!    end Size_In_Slots_Dynamic;
  
!    -----------------------------------
!    -- Internal_Traverse_With_Parent --
!    -----------------------------------
  
!    function Internal_Traverse_With_Parent
!       (Node : Node_Id) return Traverse_Final_Result
!    is
!       Tail_Recursion_Counter : Natural := 0;
  
!       procedure Pop_Parents;
!       --  Pop enclosing nodes of tail recursion plus the current parent.
  
!       function Traverse_Field (Fld : Union_Id) return Traverse_Final_Result;
!       --  Fld is one of the Traversed fields of Nod, which is necessarily a
!       --  Node_Id or List_Id. It is traversed, and the result is the result of
!       --  this traversal.
  
!       -----------------
!       -- Pop_Parents --
!       -----------------
  
!       procedure Pop_Parents is
!       begin
!          --  Pop the enclosing nodes of the tail recursion
  
!          for J in 1 .. Tail_Recursion_Counter loop
!             Parents_Stack.Decrement_Last;
!          end loop;
  
!          --  Pop the current node
  
!          pragma Assert (Parents_Stack.Table (Parents_Stack.Last) = Node);
!          Parents_Stack.Decrement_Last;
!       end Pop_Parents;
  
!       --------------------
!       -- Traverse_Field --
!       --------------------
  
!       function Traverse_Field (Fld : Union_Id) return Traverse_Final_Result is
!       begin
!          if Fld /= Union_Id (Empty) then
! 
!             --  Descendant is a node
! 
!             if Fld in Node_Range then
!                return Internal_Traverse_With_Parent (Node_Id (Fld));
! 
!             --  Descendant is a list
! 
!             elsif Fld in List_Range then
                 declare
                    Elmt : Node_Id := First (List_Id (Fld));
                 begin
                    while Present (Elmt) loop
!                      if Internal_Traverse_With_Parent (Elmt) = Abandon then
                          return Abandon;
                       end if;
  
!                      Next (Elmt);
!                   end loop;
                 end;
  
              else
!                raise Program_Error;
              end if;
           end if;
+ 
+          return OK;
        end Traverse_Field;
  
!       --  Local variables
  
!       Parent_Node : Node_Id := Parents_Stack.Table (Parents_Stack.Last);
!       Cur_Node    : Node_Id := Node;
! 
!    --  Start of processing for Internal_Traverse_With_Parent
  
     begin
!       --  If the last field is a node, we eliminate the tail recursion by
!       --  jumping back to this label. This is because concatenations are
!       --  sometimes deeply nested, as in X1&X2&...&Xn. Gen_IL ensures that the
!       --  Left_Opnd field of N_Op_Concat comes last in Traversed_Fields, so the
!       --  tail recursion is eliminated in that case. This trick prevents us
!       --  from running out of stack memory in that case. We don't bother
!       --  eliminating the tail recursion if the last field is a list.
  
        <<Tail_Recurse>>
  
!       Parents_Stack.Append (Cur_Node);
! 
!       case Process (Parent_Node, Cur_Node) is
           when Abandon =>
+             Pop_Parents;
              return Abandon;
  
           when Skip =>
+             Pop_Parents;
              return OK;
  
           when OK =>
*************** package body Atree is
*** 2174,8797 ****
              Cur_Node := Original_Node (Cur_Node);
        end case;
  
!       if Traverse_Field (Cur_Node, Field1 (Cur_Node), 1) = Abandon
!            or else  --  skip Field2 here
!          Traverse_Field (Cur_Node, Field3 (Cur_Node), 3) = Abandon
!            or else
!          Traverse_Field (Cur_Node, Field4 (Cur_Node), 4) = Abandon
!            or else
!          Traverse_Field (Cur_Node, Field5 (Cur_Node), 5) = Abandon
!       then
!          return Abandon;
!       end if;
! 
!       if Field2 (Cur_Node) not in Node_Range then
!          return Traverse_Field (Cur_Node, Field2 (Cur_Node), 2);
! 
!       elsif Is_Syntactic_Field (Nkind (Cur_Node), 2)
!         and then Field2 (Cur_Node) /= Empty_List_Or_Node
!       then
!          --  Here is the tail recursion step, we reset Cur_Node and jump back
!          --  to the start of the procedure, which has the same semantic effect
!          --  as a call.
! 
!          Cur_Node := Node_Id (Field2 (Cur_Node));
!          goto Tail_Recurse;
!       end if;
! 
!       return OK;
!    end Traverse_Func;
! 
!    -------------------
!    -- Traverse_Proc --
!    -------------------
! 
!    procedure Traverse_Proc (Node : Node_Id) is
!       function Traverse is new Traverse_Func (Process);
!       Discard : Traverse_Final_Result;
!       pragma Warnings (Off, Discard);
!    begin
!       Discard := Traverse (Node);
!    end Traverse_Proc;
! 
!    ------------------------------
!    -- Unchecked Access Package --
!    ------------------------------
! 
!    package body Unchecked_Access is
! 
!       function Field1 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Field1;
!       end Field1;
! 
!       function Field2 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Field2;
!       end Field2;
! 
!       function Field3 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Field3;
!       end Field3;
! 
!       function Field4 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Field4;
!       end Field4;
! 
!       function Field5 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Field5;
!       end Field5;
! 
!       function Field6 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Field6;
!       end Field6;
! 
!       function Field7 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Field7;
!       end Field7;
! 
!       function Field8 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Field8;
!       end Field8;
! 
!       function Field9 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Field9;
!       end Field9;
! 
!       function Field10 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Field10;
!       end Field10;
! 
!       function Field11 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Field11;
!       end Field11;
! 
!       function Field12 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Field12;
!       end Field12;
! 
!       function Field13 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Field6;
!       end Field13;
! 
!       function Field14 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Field7;
!       end Field14;
! 
!       function Field15 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Field8;
!       end Field15;
! 
!       function Field16 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Field9;
!       end Field16;
! 
!       function Field17 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Field10;
!       end Field17;
! 
!       function Field18 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Field11;
!       end Field18;
! 
!       function Field19 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Field6;
!       end Field19;
! 
!       function Field20 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Field7;
!       end Field20;
! 
!       function Field21 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Field8;
!       end Field21;
! 
!       function Field22 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Field9;
!       end Field22;
! 
!       function Field23 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Field10;
!       end Field23;
! 
!       function Field24 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Field6;
!       end Field24;
! 
!       function Field25 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Field7;
!       end Field25;
! 
!       function Field26 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Field8;
!       end Field26;
! 
!       function Field27 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Field9;
!       end Field27;
! 
!       function Field28 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Field10;
!       end Field28;
! 
!       function Field29 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Field11;
!       end Field29;
! 
!       function Field30 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Field6;
!       end Field30;
! 
!       function Field31 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Field7;
!       end Field31;
! 
!       function Field32 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Field8;
!       end Field32;
! 
!       function Field33 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Field9;
!       end Field33;
! 
!       function Field34 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Field10;
!       end Field34;
! 
!       function Field35 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Field11;
!       end Field35;
! 
!       function Field36 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 6).Field6;
!       end Field36;
! 
!       function Field37 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 6).Field7;
!       end Field37;
! 
!       function Field38 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 6).Field8;
!       end Field38;
! 
!       function Field39 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 6).Field9;
!       end Field39;
! 
!       function Field40 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 6).Field10;
!       end Field40;
! 
!       function Field41 (N : Node_Id) return Union_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 6).Field11;
!       end Field41;
! 
!       function Node1 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Node_Id (Nodes.Table (N).Field1);
!       end Node1;
! 
!       function Node2 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Node_Id (Nodes.Table (N).Field2);
!       end Node2;
! 
!       function Node3 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Node_Id (Nodes.Table (N).Field3);
!       end Node3;
! 
!       function Node4 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Node_Id (Nodes.Table (N).Field4);
!       end Node4;
! 
!       function Node5 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Node_Id (Nodes.Table (N).Field5);
!       end Node5;
! 
!       function Node6 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 1).Field6);
!       end Node6;
! 
!       function Node7 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 1).Field7);
!       end Node7;
! 
!       function Node8 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 1).Field8);
!       end Node8;
! 
!       function Node9 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 1).Field9);
!       end Node9;
! 
!       function Node10 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 1).Field10);
!       end Node10;
! 
!       function Node11 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 1).Field11);
!       end Node11;
! 
!       function Node12 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 1).Field12);
!       end Node12;
! 
!       function Node13 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 2).Field6);
!       end Node13;
! 
!       function Node14 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 2).Field7);
!       end Node14;
! 
!       function Node15 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 2).Field8);
!       end Node15;
! 
!       function Node16 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 2).Field9);
!       end Node16;
! 
!       function Node17 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 2).Field10);
!       end Node17;
! 
!       function Node18 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 2).Field11);
!       end Node18;
! 
!       function Node19 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 3).Field6);
!       end Node19;
! 
!       function Node20 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 3).Field7);
!       end Node20;
! 
!       function Node21 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 3).Field8);
!       end Node21;
! 
!       function Node22 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 3).Field9);
!       end Node22;
! 
!       function Node23 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 3).Field10);
!       end Node23;
! 
!       function Node24 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 4).Field6);
!       end Node24;
! 
!       function Node25 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 4).Field7);
!       end Node25;
! 
!       function Node26 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 4).Field8);
!       end Node26;
! 
!       function Node27 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 4).Field9);
!       end Node27;
! 
!       function Node28 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 4).Field10);
!       end Node28;
! 
!       function Node29 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 4).Field11);
!       end Node29;
! 
!       function Node30 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 5).Field6);
!       end Node30;
! 
!       function Node31 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 5).Field7);
!       end Node31;
! 
!       function Node32 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 5).Field8);
!       end Node32;
! 
!       function Node33 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 5).Field9);
!       end Node33;
! 
!       function Node34 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 5).Field10);
!       end Node34;
! 
!       function Node35 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 5).Field11);
!       end Node35;
! 
!       function Node36 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 6).Field6);
!       end Node36;
! 
!       function Node37 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 6).Field7);
!       end Node37;
! 
!       function Node38 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 6).Field8);
!       end Node38;
! 
!       function Node39 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 6).Field9);
!       end Node39;
! 
!       function Node40 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 6).Field10);
!       end Node40;
! 
!       function Node41 (N : Node_Id) return Node_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Node_Id (Nodes.Table (N + 6).Field11);
!       end Node41;
! 
!       function List1 (N : Node_Id) return List_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return List_Id (Nodes.Table (N).Field1);
!       end List1;
! 
!       function List2 (N : Node_Id) return List_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return List_Id (Nodes.Table (N).Field2);
!       end List2;
! 
!       function List3 (N : Node_Id) return List_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return List_Id (Nodes.Table (N).Field3);
!       end List3;
! 
!       function List4 (N : Node_Id) return List_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return List_Id (Nodes.Table (N).Field4);
!       end List4;
! 
!       function List5 (N : Node_Id) return List_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return List_Id (Nodes.Table (N).Field5);
!       end List5;
! 
!       function List10 (N : Node_Id) return List_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return List_Id (Nodes.Table (N + 1).Field10);
!       end List10;
! 
!       function List14 (N : Node_Id) return List_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return List_Id (Nodes.Table (N + 2).Field7);
!       end List14;
! 
!       function List25 (N : Node_Id) return List_Id is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return List_Id (Nodes.Table (N + 4).Field7);
!       end List25;
! 
!       function List38 (N : Node_Id) return List_Id is
!       begin
!          return List_Id (Nodes.Table (N + 6).Field8);
!       end List38;
! 
!       function List39 (N : Node_Id) return List_Id is
!       begin
!          return List_Id (Nodes.Table (N + 6).Field9);
!       end List39;
! 
!       function Elist1 (N : Node_Id) return Elist_Id is
!          pragma Assert (N <= Nodes.Last);
!          Value : constant Union_Id := Nodes.Table (N).Field1;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist1;
  
!       function Elist2 (N : Node_Id) return Elist_Id is
!          pragma Assert (N <= Nodes.Last);
!          Value : constant Union_Id := Nodes.Table (N).Field2;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist2;
  
-       function Elist3 (N : Node_Id) return Elist_Id is
-          pragma Assert (N <= Nodes.Last);
-          Value : constant Union_Id := Nodes.Table (N).Field3;
        begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist3;
  
!       function Elist4 (N : Node_Id) return Elist_Id is
!          pragma Assert (N <= Nodes.Last);
!          Value : constant Union_Id := Nodes.Table (N).Field4;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist4;
  
!       function Elist5 (N : Node_Id) return Elist_Id is
!          pragma Assert (N <= Nodes.Last);
!          Value : constant Union_Id := Nodes.Table (N).Field5;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist5;
  
!       function Elist8 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 1).Field8;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist8;
  
!       function Elist9 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 1).Field9;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist9;
  
!       function Elist10 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 1).Field10;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist10;
  
!       function Elist11 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 1).Field11;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
           end if;
!       end Elist11;
  
!       function Elist13 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 2).Field6;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist13;
  
!       function Elist15 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 2).Field8;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist15;
  
!       function Elist16 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 2).Field9;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist16;
  
!       function Elist18 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 2).Field11;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist18;
  
!       function Elist21 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 3).Field8;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist21;
  
!       function Elist23 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 3).Field10;
        begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist23;
  
!       function Elist24 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 4).Field6;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist24;
  
!       function Elist25 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 4).Field7;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist25;
  
!       function Elist26 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 4).Field8;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist26;
  
!       function Elist29 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 4).Field11;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist29;
  
!       function Elist30 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 5).Field6;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
!          end if;
!       end Elist30;
  
!       function Elist36 (N : Node_Id) return Elist_Id is
!          pragma Assert (Nkind (N) in N_Entity);
!          Value : constant Union_Id := Nodes.Table (N + 6).Field6;
!       begin
!          if Value = 0 then
!             return No_Elist;
!          else
!             return Elist_Id (Value);
           end if;
-       end Elist36;
- 
-       function Name1 (N : Node_Id) return Name_Id is
-       begin
-          pragma Assert (N <= Nodes.Last);
-          return Name_Id (Nodes.Table (N).Field1);
-       end Name1;
  
!       function Name2 (N : Node_Id) return Name_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Name_Id (Nodes.Table (N).Field2);
!       end Name2;
  
!       function Str3 (N : Node_Id) return String_Id is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return String_Id (Nodes.Table (N).Field3);
!       end Str3;
  
!       function Uint2 (N : Node_Id) return Uint is
!          pragma Assert (N <= Nodes.Last);
!          U : constant Union_Id := Nodes.Table (N).Field2;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint2;
  
!       function Uint3 (N : Node_Id) return Uint is
!          pragma Assert (N <= Nodes.Last);
!          U : constant Union_Id := Nodes.Table (N).Field3;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint3;
  
!       function Uint4 (N : Node_Id) return Uint is
!          pragma Assert (N <= Nodes.Last);
!          U : constant Union_Id := Nodes.Table (N).Field4;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint4;
  
!       function Uint5 (N : Node_Id) return Uint is
!          pragma Assert (N <= Nodes.Last);
!          U : constant Union_Id := Nodes.Table (N).Field5;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint5;
  
!       function Uint8 (N : Node_Id) return Uint is
!          pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 1).Field8;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint8;
  
!       function Uint9 (N : Node_Id) return Uint is
!          pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 1).Field9;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint9;
  
!       function Uint10 (N : Node_Id) return Uint is
!          pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 1).Field10;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint10;
  
!       function Uint11 (N : Node_Id) return Uint is
!          pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 1).Field11;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint11;
  
!       function Uint12 (N : Node_Id) return Uint is
!          pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 1).Field12;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint12;
  
-       function Uint13 (N : Node_Id) return Uint is
-          pragma Assert (Nkind (N) in N_Entity);
-          U : constant Union_Id := Nodes.Table (N + 2).Field6;
        begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint13;
  
!       function Uint14 (N : Node_Id) return Uint is
!          pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 2).Field7;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint14;
  
!       function Uint15 (N : Node_Id) return Uint is
!          pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 2).Field8;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint15;
  
!       function Uint16 (N : Node_Id) return Uint is
!          pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 2).Field9;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint16;
  
!       function Uint17 (N : Node_Id) return Uint is
!          pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 2).Field10;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint17;
  
!       function Uint22 (N : Node_Id) return Uint is
!          pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 3).Field9;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
!          end if;
!       end Uint22;
  
!       function Uint24 (N : Node_Id) return Uint is
!          pragma Assert (Nkind (N) in N_Entity);
!          U : constant Union_Id := Nodes.Table (N + 4).Field6;
!       begin
!          if U = 0 then
!             return Uint_0;
!          else
!             return From_Union (U);
           end if;
!       end Uint24;
! 
!       function Ureal3 (N : Node_Id) return Ureal is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return From_Union (Nodes.Table (N).Field3);
!       end Ureal3;
! 
!       function Ureal18 (N : Node_Id) return Ureal is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return From_Union (Nodes.Table (N + 2).Field11);
!       end Ureal18;
! 
!       function Ureal21 (N : Node_Id) return Ureal is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return From_Union (Nodes.Table (N + 3).Field8);
!       end Ureal21;
! 
!       function Flag0 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Flags.Table (N).Flag0;
!       end Flag0;
! 
!       function Flag1 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Flags.Table (N).Flag1;
!       end Flag1;
! 
!       function Flag2 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Flags.Table (N).Flag2;
!       end Flag2;
! 
!       function Flag3 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Flags.Table (N).Flag3;
!       end Flag3;
! 
!       function Flag4 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag4;
!       end Flag4;
! 
!       function Flag5 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag5;
!       end Flag5;
! 
!       function Flag6 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag6;
!       end Flag6;
! 
!       function Flag7 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag7;
!       end Flag7;
! 
!       function Flag8 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag8;
!       end Flag8;
! 
!       function Flag9 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag9;
!       end Flag9;
! 
!       function Flag10 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag10;
!       end Flag10;
! 
!       function Flag11 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag11;
!       end Flag11;
! 
!       function Flag12 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag12;
!       end Flag12;
! 
!       function Flag13 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag13;
!       end Flag13;
! 
!       function Flag14 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag14;
!       end Flag14;
! 
!       function Flag15 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag15;
!       end Flag15;
! 
!       function Flag16 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag16;
!       end Flag16;
! 
!       function Flag17 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag17;
!       end Flag17;
! 
!       function Flag18 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (N <= Nodes.Last);
!          return Nodes.Table (N).Flag18;
!       end Flag18;
! 
!       function Flag19 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).In_List;
!       end Flag19;
! 
!       function Flag20 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Has_Aspects;
!       end Flag20;
! 
!       function Flag21 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Rewrite_Ins;
!       end Flag21;
! 
!       function Flag22 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Analyzed;
!       end Flag22;
! 
!       function Flag23 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Comes_From_Source;
!       end Flag23;
! 
!       function Flag24 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Error_Posted;
!       end Flag24;
! 
!       function Flag25 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag4;
!       end Flag25;
! 
!       function Flag26 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag5;
!       end Flag26;
! 
!       function Flag27 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag6;
!       end Flag27;
! 
!       function Flag28 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag7;
!       end Flag28;
! 
!       function Flag29 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag8;
!       end Flag29;
! 
!       function Flag30 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag9;
!       end Flag30;
! 
!       function Flag31 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag10;
!       end Flag31;
! 
!       function Flag32 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag11;
!       end Flag32;
! 
!       function Flag33 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag12;
!       end Flag33;
! 
!       function Flag34 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag13;
!       end Flag34;
! 
!       function Flag35 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag14;
!       end Flag35;
! 
!       function Flag36 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag15;
!       end Flag36;
! 
!       function Flag37 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag16;
!       end Flag37;
! 
!       function Flag38 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag17;
!       end Flag38;
! 
!       function Flag39 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Flag18;
!       end Flag39;
! 
!       function Flag40 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).In_List;
!       end Flag40;
! 
!       function Flag41 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Has_Aspects;
!       end Flag41;
! 
!       function Flag42 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Rewrite_Ins;
!       end Flag42;
! 
!       function Flag43 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Analyzed;
!       end Flag43;
! 
!       function Flag44 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Comes_From_Source;
!       end Flag44;
! 
!       function Flag45 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Error_Posted;
!       end Flag45;
! 
!       function Flag46 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag4;
!       end Flag46;
! 
!       function Flag47 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag5;
!       end Flag47;
! 
!       function Flag48 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag6;
!       end Flag48;
! 
!       function Flag49 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag7;
!       end Flag49;
! 
!       function Flag50 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag8;
!       end Flag50;
! 
!       function Flag51 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag9;
!       end Flag51;
! 
!       function Flag52 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag10;
!       end Flag52;
! 
!       function Flag53 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag11;
!       end Flag53;
! 
!       function Flag54 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag12;
!       end Flag54;
! 
!       function Flag55 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag13;
!       end Flag55;
! 
!       function Flag56 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag14;
!       end Flag56;
! 
!       function Flag57 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag15;
!       end Flag57;
! 
!       function Flag58 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag16;
!       end Flag58;
! 
!       function Flag59 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag17;
!       end Flag59;
! 
!       function Flag60 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Flag18;
!       end Flag60;
! 
!       function Flag61 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Pflag1;
!       end Flag61;
! 
!       function Flag62 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 1).Pflag2;
!       end Flag62;
! 
!       function Flag63 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Pflag1;
!       end Flag63;
! 
!       function Flag64 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 2).Pflag2;
!       end Flag64;
! 
!       function Flag65 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag65;
!       end Flag65;
! 
!       function Flag66 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag66;
!       end Flag66;
! 
!       function Flag67 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag67;
!       end Flag67;
! 
!       function Flag68 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag68;
!       end Flag68;
! 
!       function Flag69 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag69;
!       end Flag69;
! 
!       function Flag70 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag70;
!       end Flag70;
! 
!       function Flag71 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag71;
!       end Flag71;
! 
!       function Flag72 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag72;
!       end Flag72;
! 
!       function Flag73 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag73;
!       end Flag73;
! 
!       function Flag74 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag74;
!       end Flag74;
! 
!       function Flag75 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag75;
!       end Flag75;
! 
!       function Flag76 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag76;
!       end Flag76;
! 
!       function Flag77 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag77;
!       end Flag77;
! 
!       function Flag78 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag78;
!       end Flag78;
! 
!       function Flag79 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag79;
!       end Flag79;
! 
!       function Flag80 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag80;
!       end Flag80;
! 
!       function Flag81 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag81;
!       end Flag81;
! 
!       function Flag82 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag82;
!       end Flag82;
! 
!       function Flag83 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag83;
!       end Flag83;
! 
!       function Flag84 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag84;
!       end Flag84;
! 
!       function Flag85 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag85;
!       end Flag85;
! 
!       function Flag86 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag86;
!       end Flag86;
! 
!       function Flag87 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag87;
!       end Flag87;
! 
!       function Flag88 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag88;
!       end Flag88;
! 
!       function Flag89 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag89;
!       end Flag89;
! 
!       function Flag90 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag90;
!       end Flag90;
! 
!       function Flag91 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag91;
!       end Flag91;
! 
!       function Flag92 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag92;
!       end Flag92;
! 
!       function Flag93 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag93;
!       end Flag93;
! 
!       function Flag94 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag94;
!       end Flag94;
! 
!       function Flag95 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag95;
!       end Flag95;
! 
!       function Flag96 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag96;
!       end Flag96;
! 
!       function Flag97 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag97;
!       end Flag97;
! 
!       function Flag98 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag98;
!       end Flag98;
! 
!       function Flag99 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag99;
!       end Flag99;
! 
!       function Flag100 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag100;
!       end Flag100;
! 
!       function Flag101 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag101;
!       end Flag101;
! 
!       function Flag102 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag102;
!       end Flag102;
! 
!       function Flag103 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag103;
!       end Flag103;
! 
!       function Flag104 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag104;
!       end Flag104;
! 
!       function Flag105 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag105;
!       end Flag105;
! 
!       function Flag106 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag106;
!       end Flag106;
! 
!       function Flag107 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag107;
!       end Flag107;
! 
!       function Flag108 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag108;
!       end Flag108;
! 
!       function Flag109 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag109;
!       end Flag109;
! 
!       function Flag110 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag110;
!       end Flag110;
! 
!       function Flag111 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag111;
!       end Flag111;
! 
!       function Flag112 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag112;
!       end Flag112;
! 
!       function Flag113 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag113;
!       end Flag113;
! 
!       function Flag114 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag114;
!       end Flag114;
! 
!       function Flag115 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag115;
!       end Flag115;
! 
!       function Flag116 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag116;
!       end Flag116;
! 
!       function Flag117 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag117;
!       end Flag117;
! 
!       function Flag118 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag118;
!       end Flag118;
! 
!       function Flag119 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag119;
!       end Flag119;
! 
!       function Flag120 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag120;
!       end Flag120;
! 
!       function Flag121 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag121;
!       end Flag121;
! 
!       function Flag122 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag122;
!       end Flag122;
! 
!       function Flag123 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag123;
!       end Flag123;
! 
!       function Flag124 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag124;
!       end Flag124;
! 
!       function Flag125 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag125;
!       end Flag125;
! 
!       function Flag126 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag126;
!       end Flag126;
! 
!       function Flag127 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag127;
!       end Flag127;
! 
!       function Flag128 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag128;
!       end Flag128;
! 
!       function Flag129 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).In_List;
!       end Flag129;
! 
!       function Flag130 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Has_Aspects;
!       end Flag130;
! 
!       function Flag131 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Rewrite_Ins;
!       end Flag131;
! 
!       function Flag132 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Analyzed;
!       end Flag132;
! 
!       function Flag133 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Comes_From_Source;
!       end Flag133;
! 
!       function Flag134 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Error_Posted;
!       end Flag134;
! 
!       function Flag135 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag4;
!       end Flag135;
! 
!       function Flag136 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag5;
!       end Flag136;
! 
!       function Flag137 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag6;
!       end Flag137;
! 
!       function Flag138 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag7;
!       end Flag138;
! 
!       function Flag139 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag8;
!       end Flag139;
! 
!       function Flag140 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag9;
!       end Flag140;
! 
!       function Flag141 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag10;
!       end Flag141;
! 
!       function Flag142 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag11;
!       end Flag142;
! 
!       function Flag143 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag12;
!       end Flag143;
! 
!       function Flag144 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag13;
!       end Flag144;
! 
!       function Flag145 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag14;
!       end Flag145;
! 
!       function Flag146 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag15;
!       end Flag146;
! 
!       function Flag147 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag16;
!       end Flag147;
! 
!       function Flag148 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag17;
!       end Flag148;
! 
!       function Flag149 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Flag18;
!       end Flag149;
! 
!       function Flag150 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Pflag1;
!       end Flag150;
! 
!       function Flag151 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 3).Pflag2;
!       end Flag151;
! 
!       function Flag152 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag152;
!       end Flag152;
! 
!       function Flag153 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag153;
!       end Flag153;
! 
!       function Flag154 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag154;
!       end Flag154;
! 
!       function Flag155 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag155;
!       end Flag155;
! 
!       function Flag156 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag156;
!       end Flag156;
! 
!       function Flag157 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag157;
!       end Flag157;
! 
!       function Flag158 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag158;
!       end Flag158;
! 
!       function Flag159 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag159;
!       end Flag159;
! 
!       function Flag160 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag160;
!       end Flag160;
! 
!       function Flag161 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag161;
!       end Flag161;
! 
!       function Flag162 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag162;
!       end Flag162;
! 
!       function Flag163 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag163;
!       end Flag163;
! 
!       function Flag164 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag164;
!       end Flag164;
! 
!       function Flag165 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag165;
!       end Flag165;
! 
!       function Flag166 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag166;
!       end Flag166;
! 
!       function Flag167 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag167;
!       end Flag167;
! 
!       function Flag168 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag168;
!       end Flag168;
! 
!       function Flag169 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag169;
!       end Flag169;
! 
!       function Flag170 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag170;
!       end Flag170;
! 
!       function Flag171 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag171;
!       end Flag171;
! 
!       function Flag172 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag172;
!       end Flag172;
! 
!       function Flag173 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag173;
!       end Flag173;
! 
!       function Flag174 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag174;
!       end Flag174;
! 
!       function Flag175 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag175;
!       end Flag175;
! 
!       function Flag176 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag176;
!       end Flag176;
! 
!       function Flag177 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag177;
!       end Flag177;
! 
!       function Flag178 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag178;
!       end Flag178;
! 
!       function Flag179 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag179;
!       end Flag179;
! 
!       function Flag180 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag180;
!       end Flag180;
! 
!       function Flag181 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag181;
!       end Flag181;
! 
!       function Flag182 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag182;
!       end Flag182;
! 
!       function Flag183 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word3 (Nodes.Table (N + 3).Field11).Flag183;
!       end Flag183;
! 
!       function Flag184 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag184;
!       end Flag184;
! 
!       function Flag185 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag185;
!       end Flag185;
! 
!       function Flag186 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag186;
!       end Flag186;
! 
!       function Flag187 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag187;
!       end Flag187;
! 
!       function Flag188 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag188;
!       end Flag188;
! 
!       function Flag189 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag189;
!       end Flag189;
! 
!       function Flag190 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag190;
!       end Flag190;
! 
!       function Flag191 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag191;
!       end Flag191;
! 
!       function Flag192 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag192;
!       end Flag192;
! 
!       function Flag193 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag193;
!       end Flag193;
! 
!       function Flag194 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag194;
!       end Flag194;
! 
!       function Flag195 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag195;
!       end Flag195;
! 
!       function Flag196 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag196;
!       end Flag196;
! 
!       function Flag197 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag197;
!       end Flag197;
! 
!       function Flag198 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag198;
!       end Flag198;
! 
!       function Flag199 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag199;
!       end Flag199;
! 
!       function Flag200 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag200;
!       end Flag200;
! 
!       function Flag201 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag201;
!       end Flag201;
! 
!       function Flag202 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag202;
!       end Flag202;
! 
!       function Flag203 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag203;
!       end Flag203;
! 
!       function Flag204 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag204;
!       end Flag204;
! 
!       function Flag205 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag205;
!       end Flag205;
! 
!       function Flag206 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag206;
!       end Flag206;
! 
!       function Flag207 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag207;
!       end Flag207;
! 
!       function Flag208 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag208;
!       end Flag208;
! 
!       function Flag209 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag209;
!       end Flag209;
! 
!       function Flag210 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag210;
!       end Flag210;
! 
!       function Flag211 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag211;
!       end Flag211;
! 
!       function Flag212 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag212;
!       end Flag212;
! 
!       function Flag213 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag213;
!       end Flag213;
! 
!       function Flag214 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag214;
!       end Flag214;
! 
!       function Flag215 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word4 (Nodes.Table (N + 4).Field12).Flag215;
!       end Flag215;
! 
!       function Flag216 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).In_List;
!       end Flag216;
! 
!       function Flag217 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Has_Aspects;
!       end Flag217;
! 
!       function Flag218 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Rewrite_Ins;
!       end Flag218;
! 
!       function Flag219 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Analyzed;
!       end Flag219;
! 
!       function Flag220 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Comes_From_Source;
!       end Flag220;
! 
!       function Flag221 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Error_Posted;
!       end Flag221;
! 
!       function Flag222 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag4;
!       end Flag222;
! 
!       function Flag223 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag5;
!       end Flag223;
! 
!       function Flag224 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag6;
!       end Flag224;
! 
!       function Flag225 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag7;
!       end Flag225;
! 
!       function Flag226 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag8;
!       end Flag226;
! 
!       function Flag227 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag9;
!       end Flag227;
! 
!       function Flag228 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag10;
!       end Flag228;
! 
!       function Flag229 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag11;
!       end Flag229;
! 
!       function Flag230 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag12;
!       end Flag230;
! 
!       function Flag231 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag13;
!       end Flag231;
! 
!       function Flag232 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag14;
!       end Flag232;
! 
!       function Flag233 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag15;
!       end Flag233;
! 
!       function Flag234 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag16;
!       end Flag234;
! 
!       function Flag235 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag17;
!       end Flag235;
! 
!       function Flag236 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Flag18;
!       end Flag236;
! 
!       function Flag237 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Pflag1;
!       end Flag237;
! 
!       function Flag238 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 4).Pflag2;
!       end Flag238;
! 
!       function Flag239 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte2 (Nodes.Table (N + 3).Nkind).Flag239;
!       end Flag239;
! 
!       function Flag240 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte2 (Nodes.Table (N + 3).Nkind).Flag240;
!       end Flag240;
! 
!       function Flag241 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte2 (Nodes.Table (N + 3).Nkind).Flag241;
!       end Flag241;
! 
!       function Flag242 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte2 (Nodes.Table (N + 3).Nkind).Flag242;
!       end Flag242;
! 
!       function Flag243 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte2 (Nodes.Table (N + 3).Nkind).Flag243;
!       end Flag243;
! 
!       function Flag244 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte2 (Nodes.Table (N + 3).Nkind).Flag244;
!       end Flag244;
! 
!       function Flag245 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte2 (Nodes.Table (N + 3).Nkind).Flag245;
!       end Flag245;
! 
!       function Flag246 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte2 (Nodes.Table (N + 3).Nkind).Flag246;
!       end Flag246;
! 
!       function Flag247 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte3 (Nodes.Table (N + 4).Nkind).Flag247;
!       end Flag247;
! 
!       function Flag248 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte3 (Nodes.Table (N + 4).Nkind).Flag248;
!       end Flag248;
! 
!       function Flag249 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte3 (Nodes.Table (N + 4).Nkind).Flag249;
!       end Flag249;
! 
!       function Flag250 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte3 (Nodes.Table (N + 4).Nkind).Flag250;
!       end Flag250;
! 
!       function Flag251 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte3 (Nodes.Table (N + 4).Nkind).Flag251;
!       end Flag251;
! 
!       function Flag252 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte3 (Nodes.Table (N + 4).Nkind).Flag252;
!       end Flag252;
! 
!       function Flag253 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte3 (Nodes.Table (N + 4).Nkind).Flag253;
!       end Flag253;
! 
!       function Flag254 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte3 (Nodes.Table (N + 4).Nkind).Flag254;
!       end Flag254;
! 
!       function Flag255 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag255;
!       end Flag255;
! 
!       function Flag256 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag256;
!       end Flag256;
! 
!       function Flag257 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag257;
!       end Flag257;
! 
!       function Flag258 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag258;
!       end Flag258;
! 
!       function Flag259 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag259;
!       end Flag259;
! 
!       function Flag260 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag260;
!       end Flag260;
! 
!       function Flag261 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag261;
!       end Flag261;
! 
!       function Flag262 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag262;
!       end Flag262;
! 
!       function Flag263 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag263;
!       end Flag263;
! 
!       function Flag264 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag264;
!       end Flag264;
! 
!       function Flag265 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag265;
!       end Flag265;
! 
!       function Flag266 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag266;
!       end Flag266;
! 
!       function Flag267 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag267;
!       end Flag267;
! 
!       function Flag268 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag268;
!       end Flag268;
! 
!       function Flag269 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag269;
!       end Flag269;
! 
!       function Flag270 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag270;
!       end Flag270;
! 
!       function Flag271 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag271;
!       end Flag271;
! 
!       function Flag272 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag272;
!       end Flag272;
! 
!       function Flag273 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag273;
!       end Flag273;
! 
!       function Flag274 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag274;
!       end Flag274;
! 
!       function Flag275 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag275;
!       end Flag275;
! 
!       function Flag276 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag276;
!       end Flag276;
! 
!       function Flag277 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag277;
!       end Flag277;
! 
!       function Flag278 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag278;
!       end Flag278;
! 
!       function Flag279 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag279;
!       end Flag279;
! 
!       function Flag280 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag280;
!       end Flag280;
! 
!       function Flag281 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag281;
!       end Flag281;
! 
!       function Flag282 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag282;
!       end Flag282;
! 
!       function Flag283 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag283;
!       end Flag283;
! 
!       function Flag284 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag284;
!       end Flag284;
! 
!       function Flag285 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag285;
!       end Flag285;
! 
!       function Flag286 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Word5 (Nodes.Table (N + 5).Field12).Flag286;
!       end Flag286;
! 
!       function Flag287 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).In_List;
!       end Flag287;
! 
!       function Flag288 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Has_Aspects;
!       end Flag288;
! 
!       function Flag289 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Rewrite_Ins;
!       end Flag289;
! 
!       function Flag290 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Analyzed;
!       end Flag290;
! 
!       function Flag291 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Comes_From_Source;
!       end Flag291;
! 
!       function Flag292 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Error_Posted;
!       end Flag292;
! 
!       function Flag293 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag4;
!       end Flag293;
! 
!       function Flag294 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag5;
!       end Flag294;
! 
!       function Flag295 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag6;
!       end Flag295;
! 
!       function Flag296 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag7;
!       end Flag296;
! 
!       function Flag297 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag8;
!       end Flag297;
! 
!       function Flag298 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag9;
!       end Flag298;
! 
!       function Flag299 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag10;
!       end Flag299;
! 
!       function Flag300 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag11;
!       end Flag300;
! 
!       function Flag301 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag12;
!       end Flag301;
! 
!       function Flag302 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag13;
!       end Flag302;
! 
!       function Flag303 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag14;
!       end Flag303;
! 
!       function Flag304 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag15;
!       end Flag304;
! 
!       function Flag305 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag16;
!       end Flag305;
! 
!       function Flag306 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag17;
!       end Flag306;
! 
!       function Flag307 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Flag18;
!       end Flag307;
! 
!       function Flag308 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Pflag1;
!       end Flag308;
! 
!       function Flag309 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return Nodes.Table (N + 5).Pflag2;
!       end Flag309;
! 
!       function Flag310 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte4 (Nodes.Table (N + 5).Nkind).Flag310;
!       end Flag310;
! 
!       function Flag311 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte4 (Nodes.Table (N + 5).Nkind).Flag311;
!       end Flag311;
! 
!       function Flag312 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte4 (Nodes.Table (N + 5).Nkind).Flag312;
!       end Flag312;
! 
!       function Flag313 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte4 (Nodes.Table (N + 5).Nkind).Flag313;
!       end Flag313;
! 
!       function Flag314 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte4 (Nodes.Table (N + 5).Nkind).Flag314;
!       end Flag314;
! 
!       function Flag315 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte4 (Nodes.Table (N + 5).Nkind).Flag315;
!       end Flag315;
! 
!       function Flag316 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte4 (Nodes.Table (N + 5).Nkind).Flag316;
!       end Flag316;
! 
!       function Flag317 (N : Node_Id) return Boolean is
!       begin
!          pragma Assert (Nkind (N) in N_Entity);
!          return To_Flag_Byte4 (Nodes.Table (N + 5).Nkind).Flag317;
!       end Flag317;
! 
!       procedure Set_Nkind (N : Node_Id; Val : Node_Kind) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Nkind := Val;
!       end Set_Nkind;
! 
!       procedure Set_Field1 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field1 := Val;
!       end Set_Field1;
! 
!       procedure Set_Field2 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field2 := Val;
!       end Set_Field2;
! 
!       procedure Set_Field3 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field3 := Val;
!       end Set_Field3;
! 
!       procedure Set_Field4 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field4 := Val;
!       end Set_Field4;
! 
!       procedure Set_Field5 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field5 := Val;
!       end Set_Field5;
! 
!       procedure Set_Field6 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field6 := Val;
!       end Set_Field6;
! 
!       procedure Set_Field7 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field7 := Val;
!       end Set_Field7;
! 
!       procedure Set_Field8 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field8 := Val;
!       end Set_Field8;
! 
!       procedure Set_Field9 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field9 := Val;
!       end Set_Field9;
! 
!       procedure Set_Field10 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field10 := Val;
!       end Set_Field10;
! 
!       procedure Set_Field11 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field11 := Val;
!       end Set_Field11;
! 
!       procedure Set_Field12 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field12 := Val;
!       end Set_Field12;
! 
!       procedure Set_Field13 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field6 := Val;
!       end Set_Field13;
! 
!       procedure Set_Field14 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field7 := Val;
!       end Set_Field14;
! 
!       procedure Set_Field15 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field8 := Val;
!       end Set_Field15;
! 
!       procedure Set_Field16 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field9 := Val;
!       end Set_Field16;
! 
!       procedure Set_Field17 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field10 := Val;
!       end Set_Field17;
! 
!       procedure Set_Field18 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field11 := Val;
!       end Set_Field18;
! 
!       procedure Set_Field19 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field6 := Val;
!       end Set_Field19;
! 
!       procedure Set_Field20 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field7 := Val;
!       end Set_Field20;
! 
!       procedure Set_Field21 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field8 := Val;
!       end Set_Field21;
! 
!       procedure Set_Field22 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field9 := Val;
!       end Set_Field22;
! 
!       procedure Set_Field23 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field10 := Val;
!       end Set_Field23;
! 
!       procedure Set_Field24 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field6 := Val;
!       end Set_Field24;
! 
!       procedure Set_Field25 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field7 := Val;
!       end Set_Field25;
! 
!       procedure Set_Field26 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field8 := Val;
!       end Set_Field26;
! 
!       procedure Set_Field27 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field9 := Val;
!       end Set_Field27;
! 
!       procedure Set_Field28 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field10 := Val;
!       end Set_Field28;
! 
!       procedure Set_Field29 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field11 := Val;
!       end Set_Field29;
! 
!       procedure Set_Field30 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field6 := Val;
!       end Set_Field30;
! 
!       procedure Set_Field31 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field7 := Val;
!       end Set_Field31;
! 
!       procedure Set_Field32 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field8 := Val;
!       end Set_Field32;
! 
!       procedure Set_Field33 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field9 := Val;
!       end Set_Field33;
! 
!       procedure Set_Field34 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field10 := Val;
!       end Set_Field34;
! 
!       procedure Set_Field35 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field11 := Val;
!       end Set_Field35;
! 
!       procedure Set_Field36 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field6 := Val;
!       end Set_Field36;
! 
!       procedure Set_Field37 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field7 := Val;
!       end Set_Field37;
! 
!       procedure Set_Field38 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field8 := Val;
!       end Set_Field38;
! 
!       procedure Set_Field39 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field9 := Val;
!       end Set_Field39;
! 
!       procedure Set_Field40 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field10 := Val;
!       end Set_Field40;
! 
!       procedure Set_Field41 (N : Node_Id; Val : Union_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field11 := Val;
!       end Set_Field41;
! 
!       procedure Set_Node1 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field1 := Union_Id (Val);
!       end Set_Node1;
! 
!       procedure Set_Node2 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field2 := Union_Id (Val);
!       end Set_Node2;
! 
!       procedure Set_Node3 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field3 := Union_Id (Val);
!       end Set_Node3;
! 
!       procedure Set_Node4 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field4 := Union_Id (Val);
!       end Set_Node4;
! 
!       procedure Set_Node5 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field5 := Union_Id (Val);
!       end Set_Node5;
! 
!       procedure Set_Node6 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field6 := Union_Id (Val);
!       end Set_Node6;
! 
!       procedure Set_Node7 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field7 := Union_Id (Val);
!       end Set_Node7;
! 
!       procedure Set_Node8 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field8 := Union_Id (Val);
!       end Set_Node8;
! 
!       procedure Set_Node9 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field9 := Union_Id (Val);
!       end Set_Node9;
! 
!       procedure Set_Node10 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field10 := Union_Id (Val);
!       end Set_Node10;
! 
!       procedure Set_Node11 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field11 := Union_Id (Val);
!       end Set_Node11;
! 
!       procedure Set_Node12 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field12 := Union_Id (Val);
!       end Set_Node12;
! 
!       procedure Set_Node13 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field6 := Union_Id (Val);
!       end Set_Node13;
! 
!       procedure Set_Node14 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field7 := Union_Id (Val);
!       end Set_Node14;
! 
!       procedure Set_Node15 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field8 := Union_Id (Val);
!       end Set_Node15;
! 
!       procedure Set_Node16 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field9 := Union_Id (Val);
!       end Set_Node16;
! 
!       procedure Set_Node17 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field10 := Union_Id (Val);
!       end Set_Node17;
! 
!       procedure Set_Node18 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field11 := Union_Id (Val);
!       end Set_Node18;
! 
!       procedure Set_Node19 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field6 := Union_Id (Val);
!       end Set_Node19;
! 
!       procedure Set_Node20 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field7 := Union_Id (Val);
!       end Set_Node20;
! 
!       procedure Set_Node21 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field8 := Union_Id (Val);
!       end Set_Node21;
! 
!       procedure Set_Node22 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field9 := Union_Id (Val);
!       end Set_Node22;
! 
!       procedure Set_Node23 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field10 := Union_Id (Val);
!       end Set_Node23;
! 
!       procedure Set_Node24 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field6 := Union_Id (Val);
!       end Set_Node24;
! 
!       procedure Set_Node25 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field7 := Union_Id (Val);
!       end Set_Node25;
! 
!       procedure Set_Node26 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field8 := Union_Id (Val);
!       end Set_Node26;
! 
!       procedure Set_Node27 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field9 := Union_Id (Val);
!       end Set_Node27;
! 
!       procedure Set_Node28 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field10 := Union_Id (Val);
!       end Set_Node28;
! 
!       procedure Set_Node29 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field11 := Union_Id (Val);
!       end Set_Node29;
! 
!       procedure Set_Node30 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field6 := Union_Id (Val);
!       end Set_Node30;
! 
!       procedure Set_Node31 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field7 := Union_Id (Val);
!       end Set_Node31;
! 
!       procedure Set_Node32 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field8 := Union_Id (Val);
!       end Set_Node32;
! 
!       procedure Set_Node33 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field9 := Union_Id (Val);
!       end Set_Node33;
! 
!       procedure Set_Node34 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field10 := Union_Id (Val);
!       end Set_Node34;
! 
!       procedure Set_Node35 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field11 := Union_Id (Val);
!       end Set_Node35;
! 
!       procedure Set_Node36 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field6 := Union_Id (Val);
!       end Set_Node36;
! 
!       procedure Set_Node37 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field7 := Union_Id (Val);
!       end Set_Node37;
! 
!       procedure Set_Node38 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field8 := Union_Id (Val);
!       end Set_Node38;
! 
!       procedure Set_Node39 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field9 := Union_Id (Val);
!       end Set_Node39;
! 
!       procedure Set_Node40 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field10 := Union_Id (Val);
!       end Set_Node40;
! 
!       procedure Set_Node41 (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field11 := Union_Id (Val);
!       end Set_Node41;
! 
!       procedure Set_List1 (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field1 := Union_Id (Val);
!       end Set_List1;
! 
!       procedure Set_List2 (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field2 := Union_Id (Val);
!       end Set_List2;
! 
!       procedure Set_List3 (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field3 := Union_Id (Val);
!       end Set_List3;
! 
!       procedure Set_List4 (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field4 := Union_Id (Val);
!       end Set_List4;
! 
!       procedure Set_List5 (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field5 := Union_Id (Val);
!       end Set_List5;
! 
!       procedure Set_List10 (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field10 := Union_Id (Val);
!       end Set_List10;
! 
!       procedure Set_List14 (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field7 := Union_Id (Val);
!       end Set_List14;
! 
!       procedure Set_List25 (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field7 := Union_Id (Val);
!       end Set_List25;
! 
!       procedure Set_List38 (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field8 := Union_Id (Val);
!       end Set_List38;
! 
!       procedure Set_List39 (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field9 := Union_Id (Val);
!       end Set_List39;
! 
!       procedure Set_Elist1 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          Nodes.Table (N).Field1 := Union_Id (Val);
!       end Set_Elist1;
! 
!       procedure Set_Elist2 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          Nodes.Table (N).Field2 := Union_Id (Val);
!       end Set_Elist2;
! 
!       procedure Set_Elist3 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          Nodes.Table (N).Field3 := Union_Id (Val);
!       end Set_Elist3;
! 
!       procedure Set_Elist4 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          Nodes.Table (N).Field4 := Union_Id (Val);
!       end Set_Elist4;
! 
!       procedure Set_Elist5 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          Nodes.Table (N).Field5 := Union_Id (Val);
!       end Set_Elist5;
! 
!       procedure Set_Elist8 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field8 := Union_Id (Val);
!       end Set_Elist8;
! 
!       procedure Set_Elist9 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field9 := Union_Id (Val);
!       end Set_Elist9;
! 
!       procedure Set_Elist10 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field10 := Union_Id (Val);
!       end Set_Elist10;
! 
!       procedure Set_Elist11 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field11 := Union_Id (Val);
!       end Set_Elist11;
! 
!       procedure Set_Elist13 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field6 := Union_Id (Val);
!       end Set_Elist13;
! 
!       procedure Set_Elist15 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field8 := Union_Id (Val);
!       end Set_Elist15;
! 
!       procedure Set_Elist16 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field9 := Union_Id (Val);
!       end Set_Elist16;
! 
!       procedure Set_Elist18 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field11 := Union_Id (Val);
!       end Set_Elist18;
! 
!       procedure Set_Elist21 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field8 := Union_Id (Val);
!       end Set_Elist21;
! 
!       procedure Set_Elist23 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field10 := Union_Id (Val);
!       end Set_Elist23;
! 
!       procedure Set_Elist24 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field6 := Union_Id (Val);
!       end Set_Elist24;
! 
!       procedure Set_Elist25 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field7 := Union_Id (Val);
!       end Set_Elist25;
! 
!       procedure Set_Elist26 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field8 := Union_Id (Val);
!       end Set_Elist26;
! 
!       procedure Set_Elist29 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field11 := Union_Id (Val);
!       end Set_Elist29;
! 
!       procedure Set_Elist30 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Field6 := Union_Id (Val);
!       end Set_Elist30;
! 
!       procedure Set_Elist36 (N : Node_Id; Val : Elist_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 6).Field6 := Union_Id (Val);
!       end Set_Elist36;
! 
!       procedure Set_Name1 (N : Node_Id; Val : Name_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field1 := Union_Id (Val);
!       end Set_Name1;
! 
!       procedure Set_Name2 (N : Node_Id; Val : Name_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field2 := Union_Id (Val);
!       end Set_Name2;
! 
!       procedure Set_Str3 (N : Node_Id; Val : String_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field3 := Union_Id (Val);
!       end Set_Str3;
! 
!       procedure Set_Uint2 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field2 := To_Union (Val);
!       end Set_Uint2;
! 
!       procedure Set_Uint3 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field3 := To_Union (Val);
!       end Set_Uint3;
! 
!       procedure Set_Uint4 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field4 := To_Union (Val);
!       end Set_Uint4;
! 
!       procedure Set_Uint5 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field5 := To_Union (Val);
!       end Set_Uint5;
! 
!       procedure Set_Uint8 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field8 := To_Union (Val);
!       end Set_Uint8;
! 
!       procedure Set_Uint9 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field9 := To_Union (Val);
!       end Set_Uint9;
! 
!       procedure Set_Uint10 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field10 := To_Union (Val);
!       end Set_Uint10;
! 
!       procedure Set_Uint11 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field11 := To_Union (Val);
!       end Set_Uint11;
! 
!       procedure Set_Uint12 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Field12 := To_Union (Val);
!       end Set_Uint12;
! 
!       procedure Set_Uint13 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field6 := To_Union (Val);
!       end Set_Uint13;
! 
!       procedure Set_Uint14 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field7 := To_Union (Val);
!       end Set_Uint14;
! 
!       procedure Set_Uint15 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field8 := To_Union (Val);
!       end Set_Uint15;
! 
!       procedure Set_Uint16 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field9 := To_Union (Val);
!       end Set_Uint16;
! 
!       procedure Set_Uint17 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field10 := To_Union (Val);
!       end Set_Uint17;
! 
!       procedure Set_Uint22 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field9 := To_Union (Val);
!       end Set_Uint22;
! 
!       procedure Set_Uint24 (N : Node_Id; Val : Uint) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Field6 := To_Union (Val);
!       end Set_Uint24;
! 
!       procedure Set_Ureal3 (N : Node_Id; Val : Ureal) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Field3 := To_Union (Val);
!       end Set_Ureal3;
! 
!       procedure Set_Ureal18 (N : Node_Id; Val : Ureal) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Field11 := To_Union (Val);
!       end Set_Ureal18;
! 
!       procedure Set_Ureal21 (N : Node_Id; Val : Ureal) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Field8 := To_Union (Val);
!       end Set_Ureal21;
! 
!       procedure Set_Flag0 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Flags.Table (N).Flag0 := Val;
!       end Set_Flag0;
! 
!       procedure Set_Flag1 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Flags.Table (N).Flag1 := Val;
!       end Set_Flag1;
! 
!       procedure Set_Flag2 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Flags.Table (N).Flag2 := Val;
!       end Set_Flag2;
! 
!       procedure Set_Flag3 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Flags.Table (N).Flag3 := Val;
!       end Set_Flag3;
! 
!       procedure Set_Flag4 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag4 := Val;
!       end Set_Flag4;
! 
!       procedure Set_Flag5 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag5 := Val;
!       end Set_Flag5;
! 
!       procedure Set_Flag6 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag6 := Val;
!       end Set_Flag6;
! 
!       procedure Set_Flag7 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag7 := Val;
!       end Set_Flag7;
! 
!       procedure Set_Flag8 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag8 := Val;
!       end Set_Flag8;
! 
!       procedure Set_Flag9 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag9 := Val;
!       end Set_Flag9;
! 
!       procedure Set_Flag10 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag10 := Val;
!       end Set_Flag10;
! 
!       procedure Set_Flag11 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag11 := Val;
!       end Set_Flag11;
! 
!       procedure Set_Flag12 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag12 := Val;
!       end Set_Flag12;
! 
!       procedure Set_Flag13 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag13 := Val;
!       end Set_Flag13;
! 
!       procedure Set_Flag14 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag14 := Val;
!       end Set_Flag14;
! 
!       procedure Set_Flag15 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag15 := Val;
!       end Set_Flag15;
! 
!       procedure Set_Flag16 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag16 := Val;
!       end Set_Flag16;
! 
!       procedure Set_Flag17 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag17 := Val;
!       end Set_Flag17;
! 
!       procedure Set_Flag18 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          Nodes.Table (N).Flag18 := Val;
!       end Set_Flag18;
! 
!       procedure Set_Flag19 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).In_List := Val;
!       end Set_Flag19;
! 
!       procedure Set_Flag20 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Has_Aspects := Val;
!       end Set_Flag20;
! 
!       procedure Set_Flag21 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Rewrite_Ins := Val;
!       end Set_Flag21;
! 
!       procedure Set_Flag22 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Analyzed := Val;
!       end Set_Flag22;
! 
!       procedure Set_Flag23 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Comes_From_Source := Val;
!       end Set_Flag23;
! 
!       procedure Set_Flag24 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Error_Posted := Val;
!       end Set_Flag24;
! 
!       procedure Set_Flag25 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag4 := Val;
!       end Set_Flag25;
! 
!       procedure Set_Flag26 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag5 := Val;
!       end Set_Flag26;
! 
!       procedure Set_Flag27 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag6 := Val;
!       end Set_Flag27;
! 
!       procedure Set_Flag28 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag7 := Val;
!       end Set_Flag28;
! 
!       procedure Set_Flag29 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag8 := Val;
!       end Set_Flag29;
! 
!       procedure Set_Flag30 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag9 := Val;
!       end Set_Flag30;
! 
!       procedure Set_Flag31 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag10 := Val;
!       end Set_Flag31;
! 
!       procedure Set_Flag32 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag11 := Val;
!       end Set_Flag32;
! 
!       procedure Set_Flag33 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag12 := Val;
!       end Set_Flag33;
! 
!       procedure Set_Flag34 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag13 := Val;
!       end Set_Flag34;
! 
!       procedure Set_Flag35 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag14 := Val;
!       end Set_Flag35;
! 
!       procedure Set_Flag36 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag15 := Val;
!       end Set_Flag36;
! 
!       procedure Set_Flag37 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag16 := Val;
!       end Set_Flag37;
! 
!       procedure Set_Flag38 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag17 := Val;
!       end Set_Flag38;
! 
!       procedure Set_Flag39 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Flag18 := Val;
!       end Set_Flag39;
! 
!       procedure Set_Flag40 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).In_List := Val;
!       end Set_Flag40;
! 
!       procedure Set_Flag41 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Has_Aspects := Val;
!       end Set_Flag41;
! 
!       procedure Set_Flag42 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Rewrite_Ins := Val;
!       end Set_Flag42;
! 
!       procedure Set_Flag43 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Analyzed := Val;
!       end Set_Flag43;
! 
!       procedure Set_Flag44 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Comes_From_Source := Val;
!       end Set_Flag44;
! 
!       procedure Set_Flag45 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Error_Posted := Val;
!       end Set_Flag45;
! 
!       procedure Set_Flag46 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag4 := Val;
!       end Set_Flag46;
! 
!       procedure Set_Flag47 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag5 := Val;
!       end Set_Flag47;
! 
!       procedure Set_Flag48 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag6 := Val;
!       end Set_Flag48;
! 
!       procedure Set_Flag49 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag7 := Val;
!       end Set_Flag49;
! 
!       procedure Set_Flag50 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag8 := Val;
!       end Set_Flag50;
! 
!       procedure Set_Flag51 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag9 := Val;
!       end Set_Flag51;
! 
!       procedure Set_Flag52 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag10 := Val;
!       end Set_Flag52;
! 
!       procedure Set_Flag53 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag11 := Val;
!       end Set_Flag53;
! 
!       procedure Set_Flag54 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag12 := Val;
!       end Set_Flag54;
! 
!       procedure Set_Flag55 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag13 := Val;
!       end Set_Flag55;
! 
!       procedure Set_Flag56 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag14 := Val;
!       end Set_Flag56;
! 
!       procedure Set_Flag57 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag15 := Val;
!       end Set_Flag57;
! 
!       procedure Set_Flag58 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag16 := Val;
!       end Set_Flag58;
! 
!       procedure Set_Flag59 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag17 := Val;
!       end Set_Flag59;
! 
!       procedure Set_Flag60 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Flag18 := Val;
!       end Set_Flag60;
! 
!       procedure Set_Flag61 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Pflag1 := Val;
!       end Set_Flag61;
! 
!       procedure Set_Flag62 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 1).Pflag2 := Val;
!       end Set_Flag62;
! 
!       procedure Set_Flag63 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Pflag1 := Val;
!       end Set_Flag63;
! 
!       procedure Set_Flag64 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 2).Pflag2 := Val;
!       end Set_Flag64;
! 
!       procedure Set_Flag65 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag65 := Val;
!       end Set_Flag65;
! 
!       procedure Set_Flag66 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag66 := Val;
!       end Set_Flag66;
! 
!       procedure Set_Flag67 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag67 := Val;
!       end Set_Flag67;
! 
!       procedure Set_Flag68 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag68 := Val;
!       end Set_Flag68;
! 
!       procedure Set_Flag69 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag69 := Val;
!       end Set_Flag69;
! 
!       procedure Set_Flag70 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag70 := Val;
!       end Set_Flag70;
! 
!       procedure Set_Flag71 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag71 := Val;
!       end Set_Flag71;
! 
!       procedure Set_Flag72 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag72 := Val;
!       end Set_Flag72;
! 
!       procedure Set_Flag73 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag73 := Val;
!       end Set_Flag73;
! 
!       procedure Set_Flag74 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag74 := Val;
!       end Set_Flag74;
! 
!       procedure Set_Flag75 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag75 := Val;
!       end Set_Flag75;
! 
!       procedure Set_Flag76 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag76 := Val;
!       end Set_Flag76;
! 
!       procedure Set_Flag77 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag77 := Val;
!       end Set_Flag77;
! 
!       procedure Set_Flag78 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag78 := Val;
!       end Set_Flag78;
! 
!       procedure Set_Flag79 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag79 := Val;
!       end Set_Flag79;
! 
!       procedure Set_Flag80 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag80 := Val;
!       end Set_Flag80;
! 
!       procedure Set_Flag81 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag81 := Val;
!       end Set_Flag81;
! 
!       procedure Set_Flag82 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag82 := Val;
!       end Set_Flag82;
! 
!       procedure Set_Flag83 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag83 := Val;
!       end Set_Flag83;
! 
!       procedure Set_Flag84 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag84 := Val;
!       end Set_Flag84;
! 
!       procedure Set_Flag85 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag85 := Val;
!       end Set_Flag85;
! 
!       procedure Set_Flag86 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag86 := Val;
!       end Set_Flag86;
! 
!       procedure Set_Flag87 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag87 := Val;
!       end Set_Flag87;
! 
!       procedure Set_Flag88 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag88 := Val;
!       end Set_Flag88;
! 
!       procedure Set_Flag89 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag89 := Val;
!       end Set_Flag89;
! 
!       procedure Set_Flag90 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag90 := Val;
!       end Set_Flag90;
! 
!       procedure Set_Flag91 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag91 := Val;
!       end Set_Flag91;
! 
!       procedure Set_Flag92 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag92 := Val;
!       end Set_Flag92;
! 
!       procedure Set_Flag93 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag93 := Val;
!       end Set_Flag93;
! 
!       procedure Set_Flag94 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag94 := Val;
!       end Set_Flag94;
! 
!       procedure Set_Flag95 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag95 := Val;
!       end Set_Flag95;
! 
!       procedure Set_Flag96 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag96 := Val;
!       end Set_Flag96;
! 
!       procedure Set_Flag97 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag97 := Val;
!       end Set_Flag97;
! 
!       procedure Set_Flag98 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag98 := Val;
!       end Set_Flag98;
! 
!       procedure Set_Flag99 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag99 := Val;
!       end Set_Flag99;
! 
!       procedure Set_Flag100 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag100 := Val;
!       end Set_Flag100;
! 
!       procedure Set_Flag101 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag101 := Val;
!       end Set_Flag101;
! 
!       procedure Set_Flag102 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag102 := Val;
!       end Set_Flag102;
! 
!       procedure Set_Flag103 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag103 := Val;
!       end Set_Flag103;
! 
!       procedure Set_Flag104 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag104 := Val;
!       end Set_Flag104;
! 
!       procedure Set_Flag105 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag105 := Val;
!       end Set_Flag105;
! 
!       procedure Set_Flag106 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag106 := Val;
!       end Set_Flag106;
! 
!       procedure Set_Flag107 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag107 := Val;
!       end Set_Flag107;
! 
!       procedure Set_Flag108 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag108 := Val;
!       end Set_Flag108;
! 
!       procedure Set_Flag109 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag109 := Val;
!       end Set_Flag109;
! 
!       procedure Set_Flag110 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag110 := Val;
!       end Set_Flag110;
! 
!       procedure Set_Flag111 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag111 := Val;
!       end Set_Flag111;
! 
!       procedure Set_Flag112 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag112 := Val;
!       end Set_Flag112;
! 
!       procedure Set_Flag113 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag113 := Val;
!       end Set_Flag113;
! 
!       procedure Set_Flag114 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag114 := Val;
!       end Set_Flag114;
! 
!       procedure Set_Flag115 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag115 := Val;
!       end Set_Flag115;
! 
!       procedure Set_Flag116 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag116 := Val;
!       end Set_Flag116;
! 
!       procedure Set_Flag117 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag117 := Val;
!       end Set_Flag117;
! 
!       procedure Set_Flag118 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag118 := Val;
!       end Set_Flag118;
! 
!       procedure Set_Flag119 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag119 := Val;
!       end Set_Flag119;
! 
!       procedure Set_Flag120 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag120 := Val;
!       end Set_Flag120;
! 
!       procedure Set_Flag121 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag121 := Val;
!       end Set_Flag121;
! 
!       procedure Set_Flag122 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag122 := Val;
!       end Set_Flag122;
! 
!       procedure Set_Flag123 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag123 := Val;
!       end Set_Flag123;
! 
!       procedure Set_Flag124 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag124 := Val;
!       end Set_Flag124;
! 
!       procedure Set_Flag125 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag125 := Val;
!       end Set_Flag125;
! 
!       procedure Set_Flag126 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag126 := Val;
!       end Set_Flag126;
! 
!       procedure Set_Flag127 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag127 := Val;
!       end Set_Flag127;
! 
!       procedure Set_Flag128 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word2_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag128 := Val;
!       end Set_Flag128;
! 
!       procedure Set_Flag129 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).In_List := Val;
!       end Set_Flag129;
! 
!       procedure Set_Flag130 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Has_Aspects := Val;
!       end Set_Flag130;
! 
!       procedure Set_Flag131 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Rewrite_Ins := Val;
!       end Set_Flag131;
! 
!       procedure Set_Flag132 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Analyzed := Val;
!       end Set_Flag132;
! 
!       procedure Set_Flag133 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Comes_From_Source := Val;
!       end Set_Flag133;
! 
!       procedure Set_Flag134 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Error_Posted := Val;
!       end Set_Flag134;
! 
!       procedure Set_Flag135 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag4 := Val;
!       end Set_Flag135;
! 
!       procedure Set_Flag136 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag5 := Val;
!       end Set_Flag136;
! 
!       procedure Set_Flag137 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag6 := Val;
!       end Set_Flag137;
! 
!       procedure Set_Flag138 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag7 := Val;
!       end Set_Flag138;
! 
!       procedure Set_Flag139 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag8 := Val;
!       end Set_Flag139;
! 
!       procedure Set_Flag140 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag9 := Val;
!       end Set_Flag140;
! 
!       procedure Set_Flag141 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag10 := Val;
!       end Set_Flag141;
! 
!       procedure Set_Flag142 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag11 := Val;
!       end Set_Flag142;
! 
!       procedure Set_Flag143 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag12 := Val;
!       end Set_Flag143;
! 
!       procedure Set_Flag144 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag13 := Val;
!       end Set_Flag144;
! 
!       procedure Set_Flag145 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag14 := Val;
!       end Set_Flag145;
! 
!       procedure Set_Flag146 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag15 := Val;
!       end Set_Flag146;
! 
!       procedure Set_Flag147 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag16 := Val;
!       end Set_Flag147;
! 
!       procedure Set_Flag148 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag17 := Val;
!       end Set_Flag148;
! 
!       procedure Set_Flag149 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Flag18 := Val;
!       end Set_Flag149;
! 
!       procedure Set_Flag150 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Pflag1 := Val;
!       end Set_Flag150;
! 
!       procedure Set_Flag151 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 3).Pflag2 := Val;
!       end Set_Flag151;
! 
!       procedure Set_Flag152 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag152 := Val;
!       end Set_Flag152;
! 
!       procedure Set_Flag153 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag153 := Val;
!       end Set_Flag153;
! 
!       procedure Set_Flag154 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag154 := Val;
!       end Set_Flag154;
! 
!       procedure Set_Flag155 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag155 := Val;
!       end Set_Flag155;
! 
!       procedure Set_Flag156 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag156 := Val;
!       end Set_Flag156;
! 
!       procedure Set_Flag157 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag157 := Val;
!       end Set_Flag157;
! 
!       procedure Set_Flag158 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag158 := Val;
!       end Set_Flag158;
! 
!       procedure Set_Flag159 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag159 := Val;
!       end Set_Flag159;
! 
!       procedure Set_Flag160 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag160 := Val;
!       end Set_Flag160;
! 
!       procedure Set_Flag161 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag161 := Val;
!       end Set_Flag161;
! 
!       procedure Set_Flag162 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag162 := Val;
!       end Set_Flag162;
! 
!       procedure Set_Flag163 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag163 := Val;
!       end Set_Flag163;
! 
!       procedure Set_Flag164 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag164 := Val;
!       end Set_Flag164;
! 
!       procedure Set_Flag165 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag165 := Val;
!       end Set_Flag165;
! 
!       procedure Set_Flag166 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag166 := Val;
!       end Set_Flag166;
! 
!       procedure Set_Flag167 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag167 := Val;
!       end Set_Flag167;
! 
!       procedure Set_Flag168 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag168 := Val;
!       end Set_Flag168;
! 
!       procedure Set_Flag169 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag169 := Val;
!       end Set_Flag169;
! 
!       procedure Set_Flag170 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag170 := Val;
!       end Set_Flag170;
! 
!       procedure Set_Flag171 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag171 := Val;
!       end Set_Flag171;
! 
!       procedure Set_Flag172 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag172 := Val;
!       end Set_Flag172;
! 
!       procedure Set_Flag173 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag173 := Val;
!       end Set_Flag173;
! 
!       procedure Set_Flag174 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag174 := Val;
!       end Set_Flag174;
! 
!       procedure Set_Flag175 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag175 := Val;
!       end Set_Flag175;
! 
!       procedure Set_Flag176 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag176 := Val;
!       end Set_Flag176;
! 
!       procedure Set_Flag177 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag177 := Val;
!       end Set_Flag177;
! 
!       procedure Set_Flag178 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag178 := Val;
!       end Set_Flag178;
! 
!       procedure Set_Flag179 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag179 := Val;
!       end Set_Flag179;
! 
!       procedure Set_Flag180 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag180 := Val;
!       end Set_Flag180;
! 
!       procedure Set_Flag181 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag181 := Val;
!       end Set_Flag181;
! 
!       procedure Set_Flag182 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag182 := Val;
!       end Set_Flag182;
! 
!       procedure Set_Flag183 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word3_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 3).Field11'Unrestricted_Access)).Flag183 := Val;
!       end Set_Flag183;
! 
!       procedure Set_Flag184 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag184 := Val;
!       end Set_Flag184;
! 
!       procedure Set_Flag185 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag185 := Val;
!       end Set_Flag185;
! 
!       procedure Set_Flag186 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag186 := Val;
!       end Set_Flag186;
! 
!       procedure Set_Flag187 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag187 := Val;
!       end Set_Flag187;
! 
!       procedure Set_Flag188 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag188 := Val;
!       end Set_Flag188;
! 
!       procedure Set_Flag189 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag189 := Val;
!       end Set_Flag189;
! 
!       procedure Set_Flag190 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag190 := Val;
!       end Set_Flag190;
! 
!       procedure Set_Flag191 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag191 := Val;
!       end Set_Flag191;
! 
!       procedure Set_Flag192 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag192 := Val;
!       end Set_Flag192;
! 
!       procedure Set_Flag193 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag193 := Val;
!       end Set_Flag193;
! 
!       procedure Set_Flag194 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag194 := Val;
!       end Set_Flag194;
! 
!       procedure Set_Flag195 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag195 := Val;
!       end Set_Flag195;
! 
!       procedure Set_Flag196 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag196 := Val;
!       end Set_Flag196;
! 
!       procedure Set_Flag197 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag197 := Val;
!       end Set_Flag197;
! 
!       procedure Set_Flag198 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag198 := Val;
!       end Set_Flag198;
! 
!       procedure Set_Flag199 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag199 := Val;
!       end Set_Flag199;
! 
!       procedure Set_Flag200 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag200 := Val;
!       end Set_Flag200;
! 
!       procedure Set_Flag201 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag201 := Val;
!       end Set_Flag201;
! 
!       procedure Set_Flag202 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag202 := Val;
!       end Set_Flag202;
! 
!       procedure Set_Flag203 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag203 := Val;
!       end Set_Flag203;
! 
!       procedure Set_Flag204 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag204 := Val;
!       end Set_Flag204;
! 
!       procedure Set_Flag205 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag205 := Val;
!       end Set_Flag205;
! 
!       procedure Set_Flag206 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag206 := Val;
!       end Set_Flag206;
! 
!       procedure Set_Flag207 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag207 := Val;
!       end Set_Flag207;
! 
!       procedure Set_Flag208 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag208 := Val;
!       end Set_Flag208;
! 
!       procedure Set_Flag209 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag209 := Val;
!       end Set_Flag209;
! 
!       procedure Set_Flag210 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag210 := Val;
!       end Set_Flag210;
! 
!       procedure Set_Flag211 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag211 := Val;
!       end Set_Flag211;
! 
!       procedure Set_Flag212 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag212 := Val;
!       end Set_Flag212;
! 
!       procedure Set_Flag213 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag213 := Val;
!       end Set_Flag213;
! 
!       procedure Set_Flag214 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag214 := Val;
!       end Set_Flag214;
! 
!       procedure Set_Flag215 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word4_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 4).Field12'Unrestricted_Access)).Flag215 := Val;
!       end Set_Flag215;
! 
!       procedure Set_Flag216 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).In_List := Val;
!       end Set_Flag216;
! 
!       procedure Set_Flag217 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Has_Aspects := Val;
!       end Set_Flag217;
! 
!       procedure Set_Flag218 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Rewrite_Ins := Val;
!       end Set_Flag218;
! 
!       procedure Set_Flag219 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Analyzed := Val;
!       end Set_Flag219;
! 
!       procedure Set_Flag220 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Comes_From_Source := Val;
!       end Set_Flag220;
! 
!       procedure Set_Flag221 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Error_Posted := Val;
!       end Set_Flag221;
! 
!       procedure Set_Flag222 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag4 := Val;
!       end Set_Flag222;
! 
!       procedure Set_Flag223 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag5 := Val;
!       end Set_Flag223;
! 
!       procedure Set_Flag224 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag6 := Val;
!       end Set_Flag224;
! 
!       procedure Set_Flag225 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag7 := Val;
!       end Set_Flag225;
! 
!       procedure Set_Flag226 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag8 := Val;
!       end Set_Flag226;
! 
!       procedure Set_Flag227 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag9 := Val;
!       end Set_Flag227;
! 
!       procedure Set_Flag228 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag10 := Val;
!       end Set_Flag228;
! 
!       procedure Set_Flag229 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag11 := Val;
!       end Set_Flag229;
! 
!       procedure Set_Flag230 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag12 := Val;
!       end Set_Flag230;
! 
!       procedure Set_Flag231 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag13 := Val;
!       end Set_Flag231;
! 
!       procedure Set_Flag232 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag14 := Val;
!       end Set_Flag232;
! 
!       procedure Set_Flag233 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag15 := Val;
!       end Set_Flag233;
! 
!       procedure Set_Flag234 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag16 := Val;
!       end Set_Flag234;
! 
!       procedure Set_Flag235 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag17 := Val;
!       end Set_Flag235;
! 
!       procedure Set_Flag236 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Flag18 := Val;
!       end Set_Flag236;
! 
!       procedure Set_Flag237 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Pflag1 := Val;
!       end Set_Flag237;
! 
!       procedure Set_Flag238 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 4).Pflag2 := Val;
!       end Set_Flag238;
! 
!       procedure Set_Flag239 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte2_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 3).Nkind'Unrestricted_Access)).Flag239 := Val;
!       end Set_Flag239;
! 
!       procedure Set_Flag240 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte2_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 3).Nkind'Unrestricted_Access)).Flag240 := Val;
!       end Set_Flag240;
! 
!       procedure Set_Flag241 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte2_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 3).Nkind'Unrestricted_Access)).Flag241 := Val;
!       end Set_Flag241;
! 
!       procedure Set_Flag242 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte2_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 3).Nkind'Unrestricted_Access)).Flag242 := Val;
!       end Set_Flag242;
! 
!       procedure Set_Flag243 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte2_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 3).Nkind'Unrestricted_Access)).Flag243 := Val;
!       end Set_Flag243;
! 
!       procedure Set_Flag244 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte2_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 3).Nkind'Unrestricted_Access)).Flag244 := Val;
!       end Set_Flag244;
! 
!       procedure Set_Flag245 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte2_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 3).Nkind'Unrestricted_Access)).Flag245 := Val;
!       end Set_Flag245;
! 
!       procedure Set_Flag246 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte2_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 3).Nkind'Unrestricted_Access)).Flag246 := Val;
!       end Set_Flag246;
! 
!       procedure Set_Flag247 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte3_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 4).Nkind'Unrestricted_Access)).Flag247 := Val;
!       end Set_Flag247;
! 
!       procedure Set_Flag248 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte3_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 4).Nkind'Unrestricted_Access)).Flag248 := Val;
!       end Set_Flag248;
! 
!       procedure Set_Flag249 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte3_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 4).Nkind'Unrestricted_Access)).Flag249 := Val;
!       end Set_Flag249;
! 
!       procedure Set_Flag250 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte3_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 4).Nkind'Unrestricted_Access)).Flag250 := Val;
!       end Set_Flag250;
! 
!       procedure Set_Flag251 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte3_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 4).Nkind'Unrestricted_Access)).Flag251 := Val;
!       end Set_Flag251;
! 
!       procedure Set_Flag252 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte3_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 4).Nkind'Unrestricted_Access)).Flag252 := Val;
!       end Set_Flag252;
! 
!       procedure Set_Flag253 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte3_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 4).Nkind'Unrestricted_Access)).Flag253 := Val;
!       end Set_Flag253;
! 
!       procedure Set_Flag254 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte3_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 4).Nkind'Unrestricted_Access)).Flag254 := Val;
!       end Set_Flag254;
! 
!       procedure Set_Flag255 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag255 := Val;
!       end Set_Flag255;
! 
!       procedure Set_Flag256 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag256 := Val;
!       end Set_Flag256;
! 
!       procedure Set_Flag257 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag257 := Val;
!       end Set_Flag257;
! 
!       procedure Set_Flag258 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag258 := Val;
!       end Set_Flag258;
! 
!       procedure Set_Flag259 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag259 := Val;
!       end Set_Flag259;
! 
!       procedure Set_Flag260 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag260 := Val;
!       end Set_Flag260;
! 
!       procedure Set_Flag261 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag261 := Val;
!       end Set_Flag261;
! 
!       procedure Set_Flag262 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag262 := Val;
!       end Set_Flag262;
! 
!       procedure Set_Flag263 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag263 := Val;
!       end Set_Flag263;
! 
!       procedure Set_Flag264 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag264 := Val;
!       end Set_Flag264;
! 
!       procedure Set_Flag265 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag265 := Val;
!       end Set_Flag265;
! 
!       procedure Set_Flag266 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag266 := Val;
!       end Set_Flag266;
! 
!       procedure Set_Flag267 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag267 := Val;
!       end Set_Flag267;
! 
!       procedure Set_Flag268 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag268 := Val;
!       end Set_Flag268;
! 
!       procedure Set_Flag269 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag269 := Val;
!       end Set_Flag269;
! 
!       procedure Set_Flag270 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag270 := Val;
!       end Set_Flag270;
! 
!       procedure Set_Flag271 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag271 := Val;
!       end Set_Flag271;
! 
!       procedure Set_Flag272 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag272 := Val;
!       end Set_Flag272;
! 
!       procedure Set_Flag273 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag273 := Val;
!       end Set_Flag273;
! 
!       procedure Set_Flag274 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag274 := Val;
!       end Set_Flag274;
! 
!       procedure Set_Flag275 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag275 := Val;
!       end Set_Flag275;
! 
!       procedure Set_Flag276 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag276 := Val;
!       end Set_Flag276;
! 
!       procedure Set_Flag277 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag277 := Val;
!       end Set_Flag277;
! 
!       procedure Set_Flag278 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag278 := Val;
!       end Set_Flag278;
! 
!       procedure Set_Flag279 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag279 := Val;
!       end Set_Flag279;
! 
!       procedure Set_Flag280 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag280 := Val;
!       end Set_Flag280;
! 
!       procedure Set_Flag281 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag281 := Val;
!       end Set_Flag281;
! 
!       procedure Set_Flag282 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag282 := Val;
!       end Set_Flag282;
! 
!       procedure Set_Flag283 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag283 := Val;
!       end Set_Flag283;
! 
!       procedure Set_Flag284 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag284 := Val;
!       end Set_Flag284;
! 
!       procedure Set_Flag285 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag285 := Val;
!       end Set_Flag285;
! 
!       procedure Set_Flag286 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Word5_Ptr
!            (Union_Id_Ptr'
!              (Nodes.Table (N + 5).Field12'Unrestricted_Access)).Flag286 := Val;
!       end Set_Flag286;
! 
!       procedure Set_Flag287 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).In_List := Val;
!       end Set_Flag287;
! 
!       procedure Set_Flag288 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Has_Aspects := Val;
!       end Set_Flag288;
! 
!       procedure Set_Flag289 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Rewrite_Ins := Val;
!       end Set_Flag289;
! 
!       procedure Set_Flag290 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Analyzed := Val;
!       end Set_Flag290;
! 
!       procedure Set_Flag291 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Comes_From_Source := Val;
!       end Set_Flag291;
! 
!       procedure Set_Flag292 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Error_Posted := Val;
!       end Set_Flag292;
! 
!       procedure Set_Flag293 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag4 := Val;
!       end Set_Flag293;
! 
!       procedure Set_Flag294 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag5 := Val;
!       end Set_Flag294;
! 
!       procedure Set_Flag295 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag6 := Val;
!       end Set_Flag295;
! 
!       procedure Set_Flag296 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag7 := Val;
!       end Set_Flag296;
! 
!       procedure Set_Flag297 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag8 := Val;
!       end Set_Flag297;
! 
!       procedure Set_Flag298 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag9 := Val;
!       end Set_Flag298;
! 
!       procedure Set_Flag299 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag10 := Val;
!       end Set_Flag299;
! 
!       procedure Set_Flag300 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag11 := Val;
!       end Set_Flag300;
! 
!       procedure Set_Flag301 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag12 := Val;
!       end Set_Flag301;
  
!       procedure Set_Flag302 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag13 := Val;
!       end Set_Flag302;
  
!       procedure Set_Flag303 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag14 := Val;
!       end Set_Flag303;
  
!       procedure Set_Flag304 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag15 := Val;
!       end Set_Flag304;
  
!       procedure Set_Flag305 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag16 := Val;
!       end Set_Flag305;
  
!       procedure Set_Flag306 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag17 := Val;
!       end Set_Flag306;
  
!       procedure Set_Flag307 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Flag18 := Val;
!       end Set_Flag307;
  
!       procedure Set_Flag308 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Pflag1 := Val;
!       end Set_Flag308;
  
!       procedure Set_Flag309 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          Nodes.Table (N + 5).Pflag2 := Val;
!       end Set_Flag309;
  
!       procedure Set_Flag310 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte4_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 5).Nkind'Unrestricted_Access)).Flag310 := Val;
!       end Set_Flag310;
  
!       procedure Set_Flag311 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte4_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 5).Nkind'Unrestricted_Access)).Flag311 := Val;
!       end Set_Flag311;
  
!       procedure Set_Flag312 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte4_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 5).Nkind'Unrestricted_Access)).Flag312 := Val;
!       end Set_Flag312;
  
!       procedure Set_Flag313 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte4_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 5).Nkind'Unrestricted_Access)).Flag313 := Val;
!       end Set_Flag313;
  
!       procedure Set_Flag314 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte4_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 5).Nkind'Unrestricted_Access)).Flag314 := Val;
!       end Set_Flag314;
  
!       procedure Set_Flag315 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte4_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 5).Nkind'Unrestricted_Access)).Flag315 := Val;
!       end Set_Flag315;
  
!       procedure Set_Flag316 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte4_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 5).Nkind'Unrestricted_Access)).Flag316 := Val;
!       end Set_Flag316;
  
!       procedure Set_Flag317 (N : Node_Id; Val : Boolean) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (Nkind (N) in N_Entity);
!          To_Flag_Byte4_Ptr
!            (Node_Kind_Ptr'
!              (Nodes.Table (N + 5).Nkind'Unrestricted_Access)).Flag317 := Val;
!       end Set_Flag317;
  
!       procedure Set_Node1_With_Parent (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
  
!          if Val > Error then
!             Set_Parent (N => Val, Val => N);
!          end if;
  
!          Set_Node1 (N, Val);
!       end Set_Node1_With_Parent;
  
!       procedure Set_Node2_With_Parent (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
  
!          if Val > Error then
!             Set_Parent (N => Val, Val => N);
!          end if;
  
!          Set_Node2 (N, Val);
!       end Set_Node2_With_Parent;
  
!       procedure Set_Node3_With_Parent (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
  
!          if Val > Error then
!             Set_Parent (N => Val, Val => N);
!          end if;
  
!          Set_Node3 (N, Val);
!       end Set_Node3_With_Parent;
  
!       procedure Set_Node4_With_Parent (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
  
!          if Val > Error then
!             Set_Parent (N => Val, Val => N);
!          end if;
  
!          Set_Node4 (N, Val);
!       end Set_Node4_With_Parent;
  
!       procedure Set_Node5_With_Parent (N : Node_Id; Val : Node_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
  
!          if Val > Error then
!             Set_Parent (N => Val, Val => N);
!          end if;
  
!          Set_Node5 (N, Val);
!       end Set_Node5_With_Parent;
  
!       procedure Set_List1_With_Parent (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          if Val /= No_List and then Val /= Error_List then
!             Set_Parent (Val, N);
!          end if;
!          Set_List1 (N, Val);
!       end Set_List1_With_Parent;
  
!       procedure Set_List2_With_Parent (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          if Val /= No_List and then Val /= Error_List then
!             Set_Parent (Val, N);
!          end if;
!          Set_List2 (N, Val);
!       end Set_List2_With_Parent;
  
!       procedure Set_List3_With_Parent (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          if Val /= No_List and then Val /= Error_List then
!             Set_Parent (Val, N);
!          end if;
!          Set_List3 (N, Val);
!       end Set_List3_With_Parent;
  
!       procedure Set_List4_With_Parent (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          if Val /= No_List and then Val /= Error_List then
!             Set_Parent (Val, N);
!          end if;
!          Set_List4 (N, Val);
!       end Set_List4_With_Parent;
  
!       procedure Set_List5_With_Parent (N : Node_Id; Val : List_Id) is
!       begin
!          pragma Assert (not Locked);
!          pragma Assert (N <= Nodes.Last);
!          if Val /= No_List and then Val /= Error_List then
!             Set_Parent (Val, N);
!          end if;
!          Set_List5 (N, Val);
!       end Set_List5_With_Parent;
  
!    end Unchecked_Access;
  
!    ------------
!    -- Unlock --
!    ------------
  
!    procedure Unlock is
!    begin
!       Flags.Locked := False;
!       Orig_Nodes.Locked := False;
!    end Unlock;
  
!    ------------------
!    -- Unlock_Nodes --
!    ------------------
  
!    procedure Unlock_Nodes is
     begin
!       pragma Assert (Locked);
!       Locked := False;
!    end Unlock_Nodes;
  
  end Atree;
--- 2460,2897 ----
              Cur_Node := Original_Node (Cur_Node);
        end case;
  
!       --  Check for empty Traversed_Fields before entering loop below, so the
!       --  tail recursive step won't go past the end.
  
!       declare
!          Cur_Field : Offset_Array_Index := Traversed_Offset_Array'First;
!          Offsets : Traversed_Offset_Array renames
!            Traversed_Fields (Nkind (Cur_Node));
  
        begin
!          if Offsets (Traversed_Offset_Array'First) /= No_Field_Offset then
!             while Offsets (Cur_Field + 1) /= No_Field_Offset loop
!                declare
!                   F : constant Union_Id :=
!                     Get_Node_Field_Union (Cur_Node, Offsets (Cur_Field));
  
!                begin
!                   if Traverse_Field (F) = Abandon then
!                      Pop_Parents;
!                      return Abandon;
!                   end if;
!                end;
  
!                Cur_Field := Cur_Field + 1;
!             end loop;
  
!             declare
!                F : constant Union_Id :=
!                  Get_Node_Field_Union (Cur_Node, Offsets (Cur_Field));
  
!             begin
!                if F not in Node_Range then
!                   if Traverse_Field (F) = Abandon then
!                      Pop_Parents;
!                      return Abandon;
!                   end if;
  
!                elsif F /= Empty_List_Or_Node then
!                   --  Here is the tail recursion step, we reset Cur_Node and
!                   --  jump back to the start of the procedure, which has the
!                   --  same semantic effect as a call.
  
!                   Tail_Recursion_Counter := Tail_Recursion_Counter + 1;
!                   Parent_Node := Cur_Node;
!                   Cur_Node := Node_Id (F);
!                   goto Tail_Recurse;
!                end if;
!             end;
           end if;
!       end;
  
!       Pop_Parents;
!       return OK;
!    end Internal_Traverse_With_Parent;
  
!    -------------------
!    -- Traverse_Func --
!    -------------------
  
!    function Traverse_Func (Node : Node_Id) return Traverse_Final_Result is
!       pragma Debug (Validate_Node (Node));
  
!       function Traverse_Field (Fld : Union_Id) return Traverse_Final_Result;
!       --  Fld is one of the Traversed fields of Nod, which is necessarily a
!       --  Node_Id or List_Id. It is traversed, and the result is the result of
!       --  this traversal.
  
!       --------------------
!       -- Traverse_Field --
!       --------------------
  
!       function Traverse_Field (Fld : Union_Id) return Traverse_Final_Result is
        begin
!          if Fld /= Union_Id (Empty) then
  
!             --  Descendant is a node
  
!             if Fld in Node_Range then
!                return Traverse_Func (Node_Id (Fld));
  
!             --  Descendant is a list
  
!             elsif Fld in List_Range then
!                declare
!                   Elmt : Node_Id := First (List_Id (Fld));
!                begin
!                   while Present (Elmt) loop
!                      if Traverse_Func (Elmt) = Abandon then
!                         return Abandon;
!                      end if;
  
!                      Next (Elmt);
!                   end loop;
!                end;
  
!             else
!                raise Program_Error;
!             end if;
           end if;
  
!          return OK;
!       end Traverse_Field;
  
!       Cur_Node : Node_Id := Node;
  
!    --  Start of processing for Traverse_Func
  
!    begin
!       --  If the last field is a node, we eliminate the tail recursion by
!       --  jumping back to this label. This is because concatenations are
!       --  sometimes deeply nested, as in X1&X2&...&Xn. Gen_IL ensures that the
!       --  Left_Opnd field of N_Op_Concat comes last in Traversed_Fields, so the
!       --  tail recursion is eliminated in that case. This trick prevents us
!       --  from running out of stack memory in that case. We don't bother
!       --  eliminating the tail recursion if the last field is a list.
!       --
!       --  (To check, look in the body of Sinfo.Nodes, search for the Left_Opnd
!       --  getter, and note the offset of Left_Opnd. Then look in the spec of
!       --  Sinfo.Nodes, look at the Traversed_Fields table, search for the
!       --  N_Op_Concat component. The offset of Left_Opnd should be the last
!       --  component before the No_Field_Offset sentinels.)
  
!       <<Tail_Recurse>>
  
!       case Process (Cur_Node) is
!          when Abandon =>
!             return Abandon;
  
!          when Skip =>
!             return OK;
  
!          when OK =>
!             null;
  
!          when OK_Orig =>
!             Cur_Node := Original_Node (Cur_Node);
!       end case;
  
!       --  Check for empty Traversed_Fields before entering loop below, so the
!       --  tail recursive step won't go past the end.
  
!       declare
!          Cur_Field : Offset_Array_Index := Traversed_Offset_Array'First;
!          Offsets : Traversed_Offset_Array renames
!            Traversed_Fields (Nkind (Cur_Node));
  
        begin
!          if Offsets (Traversed_Offset_Array'First) /= No_Field_Offset then
!             while Offsets (Cur_Field + 1) /= No_Field_Offset loop
!                declare
!                   F : constant Union_Id :=
!                     Get_Node_Field_Union (Cur_Node, Offsets (Cur_Field));
  
!                begin
!                   if Traverse_Field (F) = Abandon then
!                      return Abandon;
!                   end if;
!                end;
  
!                Cur_Field := Cur_Field + 1;
!             end loop;
  
!             declare
!                F : constant Union_Id :=
!                  Get_Node_Field_Union (Cur_Node, Offsets (Cur_Field));
  
!             begin
!                if F not in Node_Range then
!                   if Traverse_Field (F) = Abandon then
!                      return Abandon;
!                   end if;
  
!                elsif F /= Empty_List_Or_Node then
!                   --  Here is the tail recursion step, we reset Cur_Node and
!                   --  jump back to the start of the procedure, which has the
!                   --  same semantic effect as a call.
  
!                   Cur_Node := Node_Id (F);
!                   goto Tail_Recurse;
!                end if;
!             end;
           end if;
!       end;
  
!       return OK;
!    end Traverse_Func;
  
!    -------------------------------
!    -- Traverse_Func_With_Parent --
!    -------------------------------
  
!    function Traverse_Func_With_Parent
!      (Node : Node_Id) return Traverse_Final_Result
!    is
!       function Traverse is new Internal_Traverse_With_Parent (Process);
!       Result : Traverse_Final_Result;
!    begin
!       --  Ensure that the Parents stack is not currently in use; required since
!       --  it is global and hence a tree traversal with parents must be finished
!       --  before the next tree traversal with parents starts.
  
!       pragma Assert (Parents_Stack.Last = 0);
!       Parents_Stack.Set_Last (0);
  
!       Parents_Stack.Append (Parent (Node));
!       Result := Traverse (Node);
!       Parents_Stack.Decrement_Last;
  
!       pragma Assert (Parents_Stack.Last = 0);
  
!       return Result;
!    end Traverse_Func_With_Parent;
  
!    -------------------
!    -- Traverse_Proc --
!    -------------------
  
!    procedure Traverse_Proc (Node : Node_Id) is
!       function Traverse is new Traverse_Func (Process);
!       Discard : Traverse_Final_Result;
!       pragma Warnings (Off, Discard);
!    begin
!       Discard := Traverse (Node);
!    end Traverse_Proc;
  
!    -------------------------------
!    -- Traverse_Proc_With_Parent --
!    -------------------------------
  
!    procedure Traverse_Proc_With_Parent (Node : Node_Id) is
!       function Traverse is new Traverse_Func_With_Parent (Process);
!       Discard : Traverse_Final_Result;
!       pragma Warnings (Off, Discard);
!    begin
!       Discard := Traverse (Node);
!    end Traverse_Proc_With_Parent;
  
!    ------------
!    -- Unlock --
!    ------------
  
!    procedure Unlock is
!    begin
!       Orig_Nodes.Locked := False;
!    end Unlock;
  
!    ------------------
!    -- Unlock_Nodes --
!    ------------------
  
!    procedure Unlock_Nodes is
!    begin
!       pragma Assert (Locked);
!       Locked := False;
!    end Unlock_Nodes;
  
!    ----------------
!    -- Zero_Slots --
!    ----------------
  
!    procedure Zero_Dynamic_Slots (First, Last : Node_Offset'Base) is
!    begin
!       Slots.Table (First .. Last) := (others => 0);
!    end Zero_Dynamic_Slots;
  
!    procedure Zero_Header_Slots (N : Node_Or_Entity_Id) is
!       All_Node_Offsets : Node_Offsets.Table_Type renames
!         Node_Offsets.Table (Node_Offsets.First .. Node_Offsets.Last);
!    begin
!       All_Node_Offsets (N).Slots := (others => 0);
!    end Zero_Header_Slots;
  
!    procedure Zero_Slots (N : Node_Or_Entity_Id) is
!    begin
!       Zero_Dynamic_Slots (Off_F (N), Off_L (N));
!       Zero_Header_Slots (N);
!    end Zero_Slots;
  
!    ----------------------
!    -- Print_Statistics --
!    ----------------------
  
!    procedure Print_Node_Statistics;
!    procedure Print_Field_Statistics;
!    --  Helpers for Print_Statistics
  
!    procedure Write_Ratio (X : Nat_64; Y : Pos_64);
!    --  Write the value of (X/Y) without using 'Image (approximately)
  
!    procedure Write_Ratio (X : Nat_64; Y : Pos_64) is
!       pragma Assert (X <= Y);
!       Ratio : constant Nat := Nat ((Long_Float (X) / Long_Float (Y)) * 1000.0);
!    begin
!       Write_Str (" (");
  
!       if Ratio = 0 then
!          Write_Str ("0.000");
!       elsif Ratio in 1 .. 9 then
!          Write_Str ("0.00");
!          Write_Int (Ratio);
!       elsif Ratio in 10 .. 99 then
!          Write_Str ("0.0");
!          Write_Int (Ratio);
!       elsif Ratio in 100 .. 999 then
!          Write_Str ("0.");
!          Write_Int (Ratio);
!       else
!          Write_Int (Ratio / 1000);
!       end if;
  
!       Write_Str (")");
!    end Write_Ratio;
  
!    procedure Print_Node_Statistics is
!       subtype Count is Nat_64;
!       Node_Counts : array (Node_Kind) of Count := (others => 0);
!       Entity_Counts : array (Entity_Kind) of Count := (others => 0);
  
!       All_Node_Offsets : Node_Offsets.Table_Type renames
!         Node_Offsets.Table (Node_Offsets.First .. Node_Offsets.Last);
!    begin
!       Write_Int (Int (Node_Offsets.Last));
!       Write_Line (" nodes (including entities)");
!       Write_Int (Int (Slots.Last));
!       Write_Line (" non-header slots");
  
!       for N in All_Node_Offsets'Range loop
!          declare
!             K : constant Node_Kind := Nkind (N);
  
!          begin
!             Node_Counts (K) := Node_Counts (K) + 1;
  
!             if K in N_Entity then
!                Entity_Counts (Ekind (N)) := Entity_Counts (Ekind (N)) + 1;
!             end if;
!          end;
!       end loop;
  
!       for K in Node_Kind loop
!          declare
!             Count : constant Nat_64 := Node_Counts (K);
!          begin
!             Write_Int_64 (Count);
!             Write_Ratio (Count, Int_64 (Node_Offsets.Last));
!             Write_Str (" ");
!             Write_Str (Node_Kind'Image (K));
!             Write_Str (" ");
!             Write_Int (Int (Sinfo.Nodes.Size (K)));
!             Write_Str (" slots");
!             Write_Eol;
!          end;
!       end loop;
  
!       for K in Entity_Kind loop
!          declare
!             Count : constant Nat_64 := Entity_Counts (K);
!          begin
!             Write_Int_64 (Count);
!             Write_Ratio (Count, Int_64 (Node_Offsets.Last));
!             Write_Str (" ");
!             Write_Str (Entity_Kind'Image (K));
!             Write_Str (" ");
!             Write_Int (Int (Einfo.Entities.Size (K)));
!             Write_Str (" slots");
!             Write_Eol;
!          end;
!       end loop;
!    end Print_Node_Statistics;
  
!    procedure Print_Field_Statistics is
!       Total, G_Total, S_Total : Call_Count := 0;
!    begin
!       Write_Int_64 (Get_Original_Node_Count);
!       Write_Str (" + ");
!       Write_Int_64 (Set_Original_Node_Count);
!       Write_Eol;
!       Write_Line (" Original_Node_Count getter and setter calls");
!       Write_Eol;
  
!       Write_Line ("Frequency of field getter and setter calls:");
  
!       for Field in Node_Or_Entity_Field loop
!          G_Total := G_Total + Get_Count (Field);
!          S_Total := S_Total + Set_Count (Field);
!          Total := G_Total + S_Total;
!       end loop;
  
!       --  This assertion helps CodePeer understand that Total cannot be 0 (this
!       --  is true because GNAT does not attempt to compile empty files).
!       pragma Assert (Total > 0);
  
!       Write_Int_64 (Total);
!       Write_Str (" (100%) = ");
!       Write_Int_64 (G_Total);
!       Write_Str (" + ");
!       Write_Int_64 (S_Total);
!       Write_Line (" total getter and setter calls");
  
!       for Field in Node_Or_Entity_Field loop
!          declare
!             G : constant Call_Count := Get_Count (Field);
!             S : constant Call_Count := Set_Count (Field);
!             GS : constant Call_Count := G + S;
  
!             Desc : Field_Descriptor renames Field_Descriptors (Field);
!             Slot : constant Field_Offset :=
!               (Field_Size (Desc.Kind) * Desc.Offset) / Slot_Size;
  
!          begin
!             Write_Int_64 (GS);
!             Write_Ratio (GS, Total);
!             Write_Str (" = ");
!             Write_Int_64 (G);
!             Write_Str (" + ");
!             Write_Int_64 (S);
!             Write_Str (" ");
!             Write_Str (Node_Or_Entity_Field'Image (Field));
!             Write_Str (" in slot ");
!             Write_Int (Int (Slot));
!             Write_Str (" size ");
!             Write_Int (Int (Field_Size (Desc.Kind)));
!             Write_Eol;
!          end;
!       end loop;
!    end Print_Field_Statistics;
  
!    procedure Print_Statistics is
     begin
!       Write_Eol;
!       Write_Eol;
!       Print_Node_Statistics;
!       Print_Field_Statistics;
!    end Print_Statistics;
  
  end Atree;
diff -Nrcpad gcc-11.3.0/gcc/ada/atree.ads gcc-12.1.0/gcc/ada/atree.ads
*** gcc-11.3.0/gcc/ada/atree.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/atree.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,233 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Alloc;
! with Sinfo;  use Sinfo;
! with Einfo;  use Einfo;
! with Namet;  use Namet;
! with Types;  use Types;
! with Snames; use Snames;
! with System; use System;
! with Table;
! with Uintp;  use Uintp;
! with Urealp; use Urealp;
! with Unchecked_Conversion;
! 
! package Atree is
! 
! --  This package defines the format of the tree used to represent the Ada
! --  program internally. Syntactic and semantic information is combined in
! --  this tree. There is no separate symbol table structure.
  
! --  WARNING: There is a C version of this package. Any changes to this source
! --  file must be properly reflected in the C header file atree.h
  
  --  Package Atree defines the basic structure of the tree and its nodes and
  --  provides the basic abstract interface for manipulating the tree. Two other
  --  packages use this interface to define the representation of Ada programs
  --  using this tree format. The package Sinfo defines the basic representation
  --  of the syntactic structure of the program, as output by the parser. The
! --  package Einfo defines the semantic information which is added to the tree
! --  nodes that represent declared entities (i.e. the information which might
! --  typically be described in a separate symbol table structure).
  
  --  The front end of the compiler first parses the program and generates a
  --  tree that is simply a syntactic representation of the program in abstract
  --  syntax tree format. Subsequent processing in the front end traverses the
  --  tree, transforming it in various ways and adding semantic information.
  
!    ----------------------
!    -- Size of Entities --
!    ----------------------
! 
!    --  Currently entities are composed of 7 sequentially allocated 32-byte
!    --  nodes, considered as a single record. The following definition gives
!    --  the number of extension nodes. ????We plan to change this.
! 
!    Num_Extension_Nodes : Node_Id := 6;
!    --  This value is increased by one if debug flag -gnatd.N is set. This is
!    --  for testing performance impact of adding a new extension node. We make
!    --  this of type Node_Id for easy reference in loops using this value.
!    --  Print_Statistics can be used to display statistics on entities & nodes.
!    --  Measurements conducted for the 5->6 bump showed an increase from 1.81 to
!    --  2.01 for the nodes/entities ratio and a 2% increase in compilation time
!    --  on average for the GCC-based compiler at -O0 on a 32-bit x86 host.
! 
!    procedure Print_Statistics;
!    pragma Export (Ada, Print_Statistics);
!    --  Print various statistics on the tables maintained by the package
! 
!    ----------------------------------------
!    -- Definitions of Fields in Tree Node --
!    ----------------------------------------
! 
!    --  The representation of the tree is completely hidden, using a functional
!    --  interface for accessing and modifying the contents of nodes. Logically
!    --  a node contains a number of fields, much as though the nodes were
!    --  defined as a record type. The fields in a node are as follows:
! 
!    --   Nkind         Indicates the kind of the node. This field is present
!    --                 in all nodes. The type is Node_Kind, which is declared
!    --                 in the package Sinfo.
! 
!    --   Sloc          Location (Source_Ptr) of the corresponding token
!    --                 in the Source buffer. The individual node definitions
!    --                 show which token is referenced by this pointer.
! 
!    --   In_List       A flag used to indicate if the node is a member
!    --                 of a node list.
! 
!    --   Rewrite_Ins   A flag set if a node is marked as a rewrite inserted
!    --                 node as a result of a call to Mark_Rewrite_Insertion.
! 
!    --   Paren_Count   A 2-bit count used in sub-expression nodes to indicate
!    --                 the level of parentheses. The settings are 0,1,2 and
!    --                 3 for many. If the value is 3, then an auxiliary table
!    --                 is used to indicate the real value. Set to zero for
!    --                 non-subexpression nodes.
! 
!    --                 Note: the required parentheses surrounding conditional
!    --                 and quantified expressions count as a level of parens
!    --                 for this purpose, so e.g. in X := (if A then B else C);
!    --                 Paren_Count for the right side will be 1.
! 
!    --   Comes_From_Source
!    --                 This flag is present in all nodes. It is set if the
!    --                 node is built by the scanner or parser, and clear if
!    --                 the node is built by the analyzer or expander. It
!    --                 indicates that the node corresponds to a construct
!    --                 that appears in the original source program.
! 
!    --   Analyzed      This flag is present in all nodes. It is set when
!    --                 a node is analyzed, and is used to avoid analyzing
!    --                 the same node twice. Analysis includes expansion if
!    --                 expansion is active, so in this case if the flag is
!    --                 set it means the node has been analyzed and expanded.
! 
!    --   Error_Posted  This flag is present in all nodes. It is set when
!    --                 an error message is posted which is associated with
!    --                 the flagged node. This is used to avoid posting more
!    --                 than one message on the same node.
! 
!    --   Field1
!    --   Field2
!    --   Field3
!    --   Field4
!    --   Field5        Five fields holding Union_Id values
! 
!    --   ElistN        Synonym for FieldN typed as Elist_Id (Empty = No_Elist)
!    --   ListN         Synonym for FieldN typed as List_Id
!    --   NameN         Synonym for FieldN typed as Name_Id
!    --   NodeN         Synonym for FieldN typed as Node_Id
!    --   StrN          Synonym for FieldN typed as String_Id
!    --   UintN         Synonym for FieldN typed as Uint (Empty = Uint_0)
!    --   UrealN        Synonym for FieldN typed as Ureal
! 
!    --   Note: in the case of ElistN and UintN fields, it is common that we
!    --   end up with a value of Union_Id'(0) as the default value. This value
!    --   is meaningless as a Uint or Elist_Id value. We have two choices here.
!    --   We could require that all Uint and Elist fields be initialized to an
!    --   appropriate value, but that's error prone, since it would be easy to
!    --   miss an initialization. So instead we have the retrieval functions
!    --   generate an appropriate default value (Uint_0 or No_Elist). Probably
!    --   it would be cleaner to generate No_Uint in the Uint case but we got
!    --   stuck with representing an "unset" size value as zero early on, and
!    --   it will take a bit of fiddling to change that ???
! 
!    --   Note: the actual usage of FieldN (i.e. whether it contains a Elist_Id,
!    --   List_Id, Name_Id, Node_Id, String_Id, Uint or Ureal) depends on the
!    --   value in Nkind. Generally the access to this field is always via the
!    --   functional interface, so the field names ElistN, ListN, NameN, NodeN,
!    --   StrN, UintN and UrealN are used only in the bodies of the access
!    --   functions (i.e. in the bodies of Sinfo and Einfo). These access
!    --   functions contain debugging code that checks that the use is
!    --   consistent with Nkind and Ekind values.
! 
!    --   However, in specialized circumstances (examples are the circuit in
!    --   generic instantiation to copy trees, and in the tree dump routine),
!    --   it is useful to be able to do untyped traversals, and an internal
!    --   package in Atree allows for direct untyped accesses in such cases.
! 
!    --   Flag0         Nineteen Boolean flags (use depends on Nkind and
!    --   Flag1         Ekind, as described for FieldN). Again the access
!    --   Flag2         is usually via subprograms in Sinfo and Einfo which
!    --   Flag3         provide high-level synonyms for these flags, and
!    --   Flag4         contain debugging code that checks that the values
!    --   Flag5         in Nkind and Ekind are appropriate for the access.
!    --   Flag6
!    --   Flag7
!    --   Flag8
!    --   Flag9
!    --   Flag10
!    --   Flag11        Note that Flag0-3 are stored separately in the Flags
!    --   Flag12        table, but that's a detail of the implementation which
!    --   Flag13        is entirely hidden by the functional interface.
!    --   Flag14
!    --   Flag15
!    --   Flag16
!    --   Flag17
!    --   Flag18
! 
!    --   Link          For a node, points to the Parent. For a list, points
!    --                 to the list header. Note that in the latter case, a
!    --                 client cannot modify the link field. This field is
!    --                 private to the Atree package (but is also modified
!    --                 by the Nlists package).
! 
!    --  The following additional fields are present in extended nodes used
!    --  for entities (Nkind in N_Entity).
! 
!    --   Ekind         Entity type. This field indicates the type of the
!    --                 entity, it is of type Entity_Kind which is defined
!    --                 in package Einfo.
! 
!    --   Flag19        299 additional flags
!    --   ...
!    --   Flag317
! 
!    --   Convention    Entity convention (Convention_Id value)
! 
!    --   Field6        Additional Union_Id value stored in tree
  
!    --   Node6         Synonym for Field6 typed as Node_Id
!    --   Elist6        Synonym for Field6 typed as Elist_Id (Empty = No_Elist)
!    --   Uint6         Synonym for Field6 typed as Uint (Empty = Uint_0)
  
!    --   Similar definitions for Field7 to Field41 (and also Node7-Node41,
!    --   Elist7-Elist41, Uint7-Uint41, Ureal7-Ureal41). Note that not all
!    --   these functions are defined, only the ones that are actually used.
  
     function Last_Node_Id return Node_Id;
-    pragma Inline (Last_Node_Id);
     --  Returns Id of last allocated node Id
  
!    function Nodes_Address return System.Address;
!    --  Return address of Nodes table (used in Back_End for Gigi call)
! 
!    function Flags_Address return System.Address;
!    --  Return address of Flags table (used in Back_End for Gigi call)
  
     function Approx_Num_Nodes_And_Entities return Nat;
     --  This is an approximation to the number of nodes and entities allocated,
--- 23,76 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package defines the low-level representation of the tree used to
! --  represent the Ada program internally. Syntactic and semantic information
! --  is combined in this tree. There is no separate symbol table structure.
  
! --  WARNING: There is a C++ version of this package. Any changes to this source
! --  file must be properly reflected in the C++ header file atree.h.
  
  --  Package Atree defines the basic structure of the tree and its nodes and
  --  provides the basic abstract interface for manipulating the tree. Two other
  --  packages use this interface to define the representation of Ada programs
  --  using this tree format. The package Sinfo defines the basic representation
  --  of the syntactic structure of the program, as output by the parser. The
! --  package Einfo defines the semantic information that is added to the tree
! --  nodes that represent declared entities (i.e. the information that is
! --  described in a separate symbol table structure in some other compilers).
  
  --  The front end of the compiler first parses the program and generates a
  --  tree that is simply a syntactic representation of the program in abstract
  --  syntax tree format. Subsequent processing in the front end traverses the
  --  tree, transforming it in various ways and adding semantic information.
  
! with Alloc;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Types;          use Types;
! with Seinfo;         use Seinfo;
! with System;         use System;
! with Table;
! with Unchecked_Conversion;
  
! package Atree is
  
!    --  Access to node fields is generally done through the getters and setters
!    --  in packages Sinfo.Nodes and Einfo.Entities, which are automatically
!    --  generated (see Gen_IL.Gen). However, in specialized circumstances
!    --  (examples are the circuit in generic instantiation to copy trees, and in
!    --  the tree dump routine), it is useful to be able to do untyped
!    --  traversals, and an internal package in Atree allows for direct untyped
!    --  accesses in such cases.
  
     function Last_Node_Id return Node_Id;
     --  Returns Id of last allocated node Id
  
!    function Node_Offsets_Address return System.Address;
!    function Slots_Address return System.Address;
!    --  Address of Node_Offsets.Table and Slots.Table. Used in Back_End for Gigi
!    --  call.
  
     function Approx_Num_Nodes_And_Entities return Nat;
     --  This is an approximation to the number of nodes and entities allocated,
*************** package Atree is
*** 237,255 ****
     -- Use of Empty Node --
     -----------------------
  
!    --  The special Node_Id Empty is used to mark missing fields. Whenever the
!    --  syntax has an optional component, then the corresponding field will be
!    --  set to Empty if the component is missing.
  
     --  Note: Empty is not used to describe an empty list. Instead in this
     --  case the node field contains a list which is empty, and these cases
     --  should be distinguished (essentially from a type point of view, Empty
!    --  is a Node, and is thus not a list).
  
!    --  Note: Empty does in fact correspond to an allocated node. Only the
!    --  Nkind field of this node may be referenced. It contains N_Empty, which
     --  uniquely identifies the empty case. This allows the Nkind field to be
!    --  dereferenced before the check for Empty which is sometimes useful.
  
     -----------------------
     -- Use of Error Node --
--- 80,100 ----
     -- Use of Empty Node --
     -----------------------
  
!    --  The special Node_Id Empty is used to mark missing fields, similar to
!    --  "null" in Ada. Whenever the syntax has an optional component, then the
!    --  corresponding field will be set to Empty if the component is missing.
  
     --  Note: Empty is not used to describe an empty list. Instead in this
     --  case the node field contains a list which is empty, and these cases
     --  should be distinguished (essentially from a type point of view, Empty
!    --  is a Node, not a list).
  
!    --  Note: Empty does in fact correspond to an allocated node. The Nkind
!    --  field of this node may be referenced. It contains N_Empty, which
     --  uniquely identifies the empty case. This allows the Nkind field to be
!    --  dereferenced before the check for Empty which is sometimes useful. We
!    --  also access certain other fields of Empty; see comments in
!    --  Gen_IL.Gen.Gen_Nodes.
  
     -----------------------
     -- Use of Error Node --
*************** package Atree is
*** 263,281 ****
     --  If an Error node is encountered, then you know that a previous
     --  illegality has been detected. The proper reaction should be to
     --  avoid posting related cascaded error messages, and to propagate
!    --  the error node if necessary.
  
     ------------------------
     -- Current_Error_Node --
     ------------------------
  
!    --  The current error node is a global location indicating the current
!    --  node that is being processed for the purposes of placing a compiler
     --  abort message. This is not necessarily perfectly accurate, it is
     --  just a reasonably accurate best guess. It is used to output the
     --  source location in the abort message by Comperr, and also to
!    --  implement the d3 debugging flag. This is also used by Rtsfind
!    --  to generate error messages for high integrity mode.
  
     --  There are two ways this gets set. During parsing, when new source
     --  nodes are being constructed by calls to New_Node and New_Entity,
--- 108,125 ----
     --  If an Error node is encountered, then you know that a previous
     --  illegality has been detected. The proper reaction should be to
     --  avoid posting related cascaded error messages, and to propagate
!    --  the Error node if necessary.
  
     ------------------------
     -- Current_Error_Node --
     ------------------------
  
!    --  Current_Error_Node is a global variable indicating the current node
!    --  that is being processed for the purposes of placing a compiler
     --  abort message. This is not necessarily perfectly accurate, it is
     --  just a reasonably accurate best guess. It is used to output the
     --  source location in the abort message by Comperr, and also to
!    --  implement the d3 debugging flag.
  
     --  There are two ways this gets set. During parsing, when new source
     --  nodes are being constructed by calls to New_Node and New_Entity,
*************** package Atree is
*** 285,292 ****
     --  Debug_A that mark the start and end of analysis/expansion of a
     --  node in the tree.
  
!    Current_Error_Node : Node_Id;
!    --  Node to place error messages
  
     ------------------
     -- Error Counts --
--- 129,139 ----
     --  Debug_A that mark the start and end of analysis/expansion of a
     --  node in the tree.
  
!    --  Current_Error_Node is also used for other purposes. See, for example,
!    --  Rtsfind.
! 
!    Current_Error_Node : Node_Id := Empty;
!    --  Node to place compiler abort messages
  
     ------------------
     -- Error Counts --
*************** package Atree is
*** 347,431 ****
     --  bail out, assuming that the anomaly was caused by a previously detected
     --  serious error (or configurable run time violation). This routine should
     --  be called in these cases, and will raise an exception if no such error
!    --  has been detected. This ensure that the anomaly is never allowed to go
!    --  unnoticed.
! 
!    -------------------------------
!    -- Default Setting of Fields --
!    -------------------------------
! 
!    --  Nkind is set to N_Unused_At_Start
! 
!    --  Ekind is set to E_Void
! 
!    --  Sloc is always set, there is no default value
! 
!    --  Field1-5 fields are set to Empty
! 
!    --  Field6-41 fields in extended nodes are set to Empty
! 
!    --  Parent is set to Empty
! 
!    --  All Boolean flag fields are set to False
! 
!    --  Note: the value Empty is used in Field1-Field41 to indicate a null node.
!    --  The usage varies. The common uses are to indicate absence of an optional
!    --  clause or a completely unused Field1-35 field.
! 
!    -------------------------------------
!    -- Use of Synonyms for Node Fields --
!    -------------------------------------
! 
!    --  A subpackage Atree.Unchecked_Access provides routines for reading and
!    --  writing the fields defined above (Field1-35, Node1-35, Flag0-317 etc).
!    --  These unchecked access routines can be used for untyped traversals.
!    --  In addition they are used in the implementations of the Sinfo and
!    --  Einfo packages. These packages both provide logical synonyms for
!    --  the generic fields, together with an appropriate set of access routines.
!    --  Normally access to information within tree nodes uses these synonyms,
!    --  providing a high level typed interface to the tree information.
  
     --------------------------------------------------
     -- Node Allocation and Modification Subprograms --
     --------------------------------------------------
  
!    --  Generally the parser builds the tree and then it is further decorated
!    --  (e.g. by setting the entity fields), but not fundamentally modified.
!    --  However, there are cases in which the tree must be restructured by
!    --  adding and rearranging nodes, as a result of disambiguating cases
!    --  which the parser could not parse correctly, and adding additional
!    --  semantic information (e.g. making constraint checks explicit). The
!    --  following subprograms are used for constructing the tree in the first
!    --  place, and then for subsequent modifications as required.
  
     procedure Initialize;
!    --  Called at the start of compilation to initialize the allocation of the
!    --  node and list tables and make the entries for Empty and Error.
  
     procedure Lock;
!    --  Called before the back end is invoked to lock the nodes table
!    --  Also called after Unlock to relock???
  
     procedure Lock_Nodes;
     --  Called to lock node modifications when assertions are enabled; without
     --  assertions calling this subprogram has no effect. The initial state of
     --  the lock is unlocked.
  
-    procedure Unlock;
-    --  Unlocks nodes table, in cases where the back end needs to modify it
- 
     procedure Unlock_Nodes;
!    --  Called to unlock entity modifications when assertions are enabled; if
     --  assertions are not enabled calling this subprogram has no effect.
  
     function New_Node
       (New_Node_Kind : Node_Kind;
        New_Sloc      : Source_Ptr) return Node_Id;
!    --  Allocates a completely new node with the given node type and source
!    --  location values. All other fields are set to their standard defaults:
     --
!    --    Empty for all FieldN fields
!    --    False for all FlagN fields
     --
     --  The usual approach is to build a new node using this function and
     --  then, using the value returned, use the Set_xxx functions to set
--- 194,248 ----
     --  bail out, assuming that the anomaly was caused by a previously detected
     --  serious error (or configurable run time violation). This routine should
     --  be called in these cases, and will raise an exception if no such error
!    --  has been detected. This ensures that the anomaly is never allowed to go
!    --  unnoticed in legal programs.
  
     --------------------------------------------------
     -- Node Allocation and Modification Subprograms --
     --------------------------------------------------
  
!    --  The following subprograms are used for constructing the tree in the
!    --  first place, and then for subsequent modifications as required.
  
     procedure Initialize;
!    --  Called at the start of compilation to make the entries for Empty and
!    --  Error.
  
     procedure Lock;
!    --  Called before the back end is invoked to lock the nodes table.
!    --  Also called after Unlock to relock.
! 
!    procedure Unlock;
!    --  Unlocks nodes table, in cases where the back end needs to modify it
  
     procedure Lock_Nodes;
     --  Called to lock node modifications when assertions are enabled; without
     --  assertions calling this subprogram has no effect. The initial state of
     --  the lock is unlocked.
  
     procedure Unlock_Nodes;
!    --  Called to unlock node modifications when assertions are enabled; if
     --  assertions are not enabled calling this subprogram has no effect.
  
+    function Is_Entity (N : Node_Or_Entity_Id) return Boolean;
+    pragma Inline (Is_Entity);
+    --  Returns True if N is an entity
+ 
     function New_Node
       (New_Node_Kind : Node_Kind;
        New_Sloc      : Source_Ptr) return Node_Id;
!    --  Allocates a new node with the given node type and source location
!    --  values. Fields have defaults depending on their type:
! 
!    --    Flag: False
!    --    Node_Id: Empty
!    --    List_Id: Empty
!    --    Elist_Id: No_Elist
!    --    Uint: No_Uint
     --
!    --    Name_Id, String_Id, Valid_Uint, Unat, Upos, Nonzero_Uint, Ureal:
!    --      No default. This means it is an error to call the getter before
!    --      calling the setter.
     --
     --  The usual approach is to build a new node using this function and
     --  then, using the value returned, use the Set_xxx functions to set
*************** package Atree is
*** 461,480 ****
     --  semantics in the reference manual. This procedure copies the setting
     --  of Comes_From_Source from OldN to NewN.
  
!    function Has_Extension (N : Node_Id) return Boolean;
!    pragma Inline (Has_Extension);
!    --  Returns True if the given node has an extension (i.e. was created by
!    --  a call to New_Entity rather than New_Node, and Nkind is in N_Entity)
! 
!    procedure Change_Node (N : Node_Id; New_Node_Kind : Node_Kind);
!    --  This procedure replaces the given node by setting its Nkind field to
!    --  the indicated value and resetting all other fields to their default
!    --  values except for Sloc, which is unchanged, and the Parent pointer
!    --  and list links, which are also unchanged. All other information in
!    --  the original node is lost. The new node has an extension if the
!    --  original node had an extension.
  
!    procedure Copy_Node (Source : Node_Id; Destination : Node_Id);
     --  Copy the entire contents of the source node to the destination node.
     --  The contents of the source node is not affected. If the source node
     --  has an extension, then the destination must have an extension also.
--- 278,289 ----
     --  semantics in the reference manual. This procedure copies the setting
     --  of Comes_From_Source from OldN to NewN.
  
!    procedure Change_Node (N : Node_Id; New_Kind : Node_Kind);
!    --  This procedure replaces the given node by setting its Nkind field to the
!    --  indicated value and resetting all other fields to their default values
!    --  except for certain fields that are preserved (see body for details).
  
!    procedure Copy_Node (Source, Destination : Node_Or_Entity_Id);
     --  Copy the entire contents of the source node to the destination node.
     --  The contents of the source node is not affected. If the source node
     --  has an extension, then the destination must have an extension also.
*************** package Atree is
*** 487,502 ****
     --  with copying aspect specifications where this is required.
  
     function New_Copy (Source : Node_Id) return Node_Id;
!    --  This function allocates a completely new node, and then initializes
!    --  it by copying the contents of the source node into it. The contents of
!    --  the source node is not affected. The target node is always marked as
!    --  not being in a list (even if the source is a list member), and not
!    --  overloaded. The new node will have an extension if the source has
!    --  an extension. New_Copy (Empty) returns Empty, and New_Copy (Error)
!    --  returns Error. Note that, unlike Copy_Separate_Tree, New_Copy does not
!    --  recursively copy any descendants, so in general parent pointers are not
!    --  set correctly for the descendants of the copied node. Both normal and
!    --  extended nodes (entities) may be copied using New_Copy.
  
     function Relocate_Node (Source : Node_Id) return Node_Id;
     --  Source is a non-entity node that is to be relocated. A new node is
--- 296,311 ----
     --  with copying aspect specifications where this is required.
  
     function New_Copy (Source : Node_Id) return Node_Id;
!    --  This function allocates a new node, and then initializes it by copying
!    --  the contents of the source node into it. The contents of the source node
!    --  is not affected. The target node is always marked as not being in a list
!    --  (even if the source is a list member), and not overloaded. The new node
!    --  will have an extension if the source has an extension. New_Copy (Empty)
!    --  returns Empty, and New_Copy (Error) returns Error. Note that, unlike
!    --  Copy_Separate_Tree, New_Copy does not recursively copy any descendants,
!    --  so in general parent pointers are not set correctly for the descendants
!    --  of the copied node. Both normal and extended nodes (entities) may be
!    --  copied using New_Copy.
  
     function Relocate_Node (Source : Node_Id) return Node_Id;
     --  Source is a non-entity node that is to be relocated. A new node is
*************** package Atree is
*** 539,560 ****
     --  Exchange the contents of two entities. The parent pointers are switched
     --  as well as the Defining_Identifier fields in the parents, so that the
     --  entities point correctly to their original parents. The effect is thus
!    --  to leave the tree completely unchanged in structure, except that the
!    --  entity ID values of the two entities are interchanged. Neither of the
!    --  two entities may be list members. Note that entities appear on two
!    --  semantic chains: Homonym and Next_Entity: the corresponding links must
!    --  be adjusted by the caller, according to context.
  
!    function Extend_Node (Source : Node_Id) return Entity_Id;
!    --  This function returns a copy of its input node with an extension added.
!    --  The fields of the extension are set to Empty. Due to the way extensions
!    --  are handled (as four consecutive array elements), it may be necessary
!    --  to reallocate the node, so that the returned value is not the same as
!    --  the input value, but where possible the returned value will be the same
!    --  as the input value (i.e. the extension will occur in place). It is the
!    --  caller's responsibility to ensure that any pointers to the original node
!    --  are appropriately updated. This function is used only by Sinfo.CN to
!    --  change nodes into their corresponding entities.
  
     type Ignored_Ghost_Record_Proc is access procedure (N : Node_Or_Entity_Id);
  
--- 348,361 ----
     --  Exchange the contents of two entities. The parent pointers are switched
     --  as well as the Defining_Identifier fields in the parents, so that the
     --  entities point correctly to their original parents. The effect is thus
!    --  to leave the tree unchanged in structure, except that the entity ID
!    --  values of the two entities are interchanged. Neither of the two entities
!    --  may be list members. Note that entities appear on two semantic chains:
!    --  Homonym and Next_Entity: the corresponding links must be adjusted by the
!    --  caller, according to context.
  
!    procedure Extend_Node (Source : Node_Id);
!    --  This turns a node into an entity; it function is used only by Sinfo.CN.
  
     type Ignored_Ghost_Record_Proc is access procedure (N : Node_Or_Entity_Id);
  
*************** package Atree is
*** 609,620 ****
--- 410,440 ----
     --  all calls to process returned either OK, OK_Orig, or Skip).
  
     generic
+       with function Process
+         (Parent_Node : Node_Id;
+          Node        : Node_Id) return Traverse_Result is <>;
+    function Traverse_Func_With_Parent
+      (Node : Node_Id) return Traverse_Final_Result;
+    pragma Inline (Traverse_Func_With_Parent);
+    --  Same as Traverse_Func except that the called function Process receives
+    --  also the Parent_Node of Node.
+ 
+    generic
        with function Process (N : Node_Id) return Traverse_Result is <>;
     procedure Traverse_Proc (Node : Node_Id);
     pragma Inline (Traverse_Proc);
     --  This is the same as Traverse_Func except that no result is returned,
     --  i.e. Traverse_Func is called and the result is simply discarded.
  
+    generic
+       with function Process
+         (Parent_Node : Node_Id;
+          Node        : Node_Id) return Traverse_Result is <>;
+    procedure Traverse_Proc_With_Parent (Node : Node_Id);
+    pragma Inline (Traverse_Proc_With_Parent);
+    --  Same as Traverse_Proc except that the called function Process receives
+    --  also the Parent_Node of Node.
+ 
     ---------------------------
     -- Node Access Functions --
     ---------------------------
*************** package Atree is
*** 622,743 ****
     --  The following functions return the contents of the indicated field of
     --  the node referenced by the argument, which is a Node_Id.
  
!    function Analyzed                     (N : Node_Id) return Boolean;
!    pragma Inline (Analyzed);
! 
!    function Check_Actuals                (N : Node_Id) return Boolean;
!    pragma Inline (Check_Actuals);
! 
!    function Comes_From_Source            (N : Node_Id) return Boolean;
!    pragma Inline (Comes_From_Source);
! 
!    function Error_Posted                 (N : Node_Id) return Boolean;
!    pragma Inline (Error_Posted);
! 
!    function Has_Aspects                  (N : Node_Id) return Boolean;
!    pragma Inline (Has_Aspects);
! 
!    function Is_Ignored_Ghost_Node        (N : Node_Id) return Boolean;
!    pragma Inline (Is_Ignored_Ghost_Node);
! 
!    function Nkind                        (N : Node_Id) return Node_Kind;
!    pragma Inline (Nkind);
! 
!    function No                           (N : Node_Id) return Boolean;
     pragma Inline (No);
     --  Tests given Id for equality with the Empty node. This allows notations
     --  like "if No (Variant_Part)" as opposed to "if Variant_Part = Empty".
  
!    function Parent                       (N : Node_Id) return Node_Id;
     pragma Inline (Parent);
     --  Returns the parent of a node if the node is not a list member, or else
     --  the parent of the list containing the node if the node is a list member.
  
!    function Paren_Count                  (N : Node_Id) return Nat;
     pragma Inline (Paren_Count);
  
!    function Present                      (N : Node_Id) return Boolean;
     pragma Inline (Present);
     --  Tests given Id for inequality with the Empty node. This allows notations
     --  like "if Present (Statement)" as opposed to "if Statement /= Empty".
  
!    function Sloc                         (N : Node_Id) return Source_Ptr;
!    pragma Inline (Sloc);
! 
!    -----------------------------
!    -- Entity Access Functions --
!    -----------------------------
! 
!    --  The following functions apply only to Entity_Id values, i.e.
!    --  to extended nodes.
! 
!    function Ekind (E : Entity_Id) return Entity_Kind;
!    pragma Inline (Ekind);
! 
!    function Convention (E : Entity_Id) return Convention_Id;
!    pragma Inline (Convention);
! 
!    ----------------------------
!    -- Node Update Procedures --
!    ----------------------------
! 
!    --  The following functions set a specified field in the node whose Id is
!    --  passed as the first argument. The second parameter is the new value
!    --  to be set in the specified field. Note that Set_Nkind is in the next
!    --  section, since its use is restricted.
! 
!    procedure Set_Analyzed              (N : Node_Id; Val : Boolean := True);
!    pragma Inline (Set_Analyzed);
! 
!    procedure Set_Check_Actuals         (N : Node_Id; Val : Boolean := True);
!    pragma Inline (Set_Check_Actuals);
! 
!    procedure Set_Comes_From_Source     (N : Node_Id; Val : Boolean);
!    pragma Inline (Set_Comes_From_Source);
!    --  Note that this routine is very rarely used, since usually the default
!    --  mechanism provided sets the right value, but in some unusual cases, the
!    --  value needs to be reset (e.g. when a source node is copied, and the copy
!    --  must not have Comes_From_Source set).
! 
!    procedure Set_Error_Posted          (N : Node_Id; Val : Boolean := True);
!    pragma Inline (Set_Error_Posted);
! 
!    procedure Set_Has_Aspects           (N : Node_Id; Val : Boolean := True);
!    pragma Inline (Set_Has_Aspects);
! 
!    procedure Set_Is_Ignored_Ghost_Node (N : Node_Id; Val : Boolean := True);
!    pragma Inline (Set_Is_Ignored_Ghost_Node);
! 
!    procedure Set_Original_Node         (N : Node_Id; Val : Node_Id);
     pragma Inline (Set_Original_Node);
     --  Note that this routine is used only in very peculiar cases. In normal
     --  cases, the Original_Node link is set by calls to Rewrite.
  
!    procedure Set_Parent                (N : Node_Id; Val : Node_Id);
     pragma Inline (Set_Parent);
  
!    procedure Set_Paren_Count           (N : Node_Id; Val : Nat);
     pragma Inline (Set_Paren_Count);
  
-    procedure Set_Sloc                  (N : Node_Id; Val : Source_Ptr);
-    pragma Inline (Set_Sloc);
- 
-    ------------------------------
-    -- Entity Update Procedures --
-    ------------------------------
- 
-    --  The following procedures apply only to Entity_Id values, i.e.
-    --  to extended nodes.
- 
-    procedure Basic_Set_Convention (E : Entity_Id; Val : Convention_Id);
-    pragma Inline (Basic_Set_Convention);
-    --  Clients should use Sem_Util.Set_Convention rather than calling this
-    --  routine directly, as Set_Convention also deals with the special
-    --  processing required for access types.
- 
-    procedure Set_Ekind (E : Entity_Id; Val : Entity_Kind);
-    pragma Inline (Set_Ekind);
- 
     ---------------------------
     -- Tree Rewrite Routines --
     ---------------------------
--- 442,477 ----
     --  The following functions return the contents of the indicated field of
     --  the node referenced by the argument, which is a Node_Id.
  
!    function No (N : Node_Id) return Boolean;
     pragma Inline (No);
     --  Tests given Id for equality with the Empty node. This allows notations
     --  like "if No (Variant_Part)" as opposed to "if Variant_Part = Empty".
  
!    function Parent (N : Node_Or_Entity_Id) return Node_Or_Entity_Id;
     pragma Inline (Parent);
     --  Returns the parent of a node if the node is not a list member, or else
     --  the parent of the list containing the node if the node is a list member.
  
!    function Paren_Count (N : Node_Id) return Nat;
     pragma Inline (Paren_Count);
+    --  Number of parentheses that surround an expression
  
!    function Present (N : Node_Id) return Boolean;
     pragma Inline (Present);
     --  Tests given Id for inequality with the Empty node. This allows notations
     --  like "if Present (Statement)" as opposed to "if Statement /= Empty".
  
!    procedure Set_Original_Node (N : Node_Id; Val : Node_Id);
     pragma Inline (Set_Original_Node);
     --  Note that this routine is used only in very peculiar cases. In normal
     --  cases, the Original_Node link is set by calls to Rewrite.
  
!    procedure Set_Parent (N : Node_Or_Entity_Id; Val : Node_Or_Entity_Id);
     pragma Inline (Set_Parent);
  
!    procedure Set_Paren_Count (N : Node_Id; Val : Nat);
     pragma Inline (Set_Paren_Count);
  
     ---------------------------
     -- Tree Rewrite Routines --
     ---------------------------
*************** package Atree is
*** 795,800 ****
--- 529,535 ----
     --  the contents of these two nodes fixing up the parent pointers of the
     --  replaced node (we do not attempt to preserve parent pointers for the
     --  original node). Neither Old_Node nor New_Node can be extended nodes.
+    --  ??? The above explanation is incorrect, instead Copy_Node is called.
     --
     --  Note: New_Node may not contain references to Old_Node, for example as
     --  descendants, since the rewrite would make such references invalid. If
*************** package Atree is
*** 806,822 ****
     --  original node, i.e. the old contents of Old_Node.
  
     procedure Replace (Old_Node, New_Node : Node_Id);
!    --  This is similar to Rewrite, except that the old value of Old_Node is
!    --  not saved, and the New_Node is deleted after the replace, since it
!    --  is assumed that it can no longer be legitimately needed. The flag
     --  Is_Rewrite_Substitution will be False for the resulting node, unless
     --  it was already true on entry, and Original_Node will not return the
!    --  original contents of the Old_Node, but rather the New_Node value (unless
!    --  Old_Node had already been rewritten using Rewrite). Replace also
!    --  preserves the setting of Comes_From_Source.
     --
!    --  Note, New_Node may not contain references to Old_Node, for example as
!    --  descendants, since the rewrite would make such references invalid. If
     --  New_Node does need to reference Old_Node, then these references should
     --  be to a relocated copy of Old_Node (see Relocate_Node procedure).
     --
--- 541,555 ----
     --  original node, i.e. the old contents of Old_Node.
  
     procedure Replace (Old_Node, New_Node : Node_Id);
!    --  This is similar to Rewrite, except that the old value of Old_Node
!    --  is not saved. New_Node should not be used after Replace.  The flag
     --  Is_Rewrite_Substitution will be False for the resulting node, unless
     --  it was already true on entry, and Original_Node will not return the
!    --  original contents of the Old_Node, but rather the New_Node value.
!    --  Replace also preserves the setting of Comes_From_Source.
     --
!    --  Note that New_Node must not contain references to Old_Node, for example
!    --  as descendants, since the rewrite would make such references invalid. If
     --  New_Node does need to reference Old_Node, then these references should
     --  be to a relocated copy of Old_Node (see Relocate_Node procedure).
     --
*************** package Atree is
*** 839,3642 ****
     --
     --  Note: Parents are not preserved in original tree nodes that are
     --  retrieved in this way (i.e. their children may have children whose
!    --  pointers which reference some other node). This needs more details???
     --
     --  Note: there is no direct mechanism for deleting an original node (in
     --  a manner that can be reversed later). One possible approach is to use
     --  Rewrite to substitute a null statement for the node to be deleted.
  
!    -----------------------------------
!    -- Generic Field Access Routines --
!    -----------------------------------
! 
!    --  This subpackage provides the functions for accessing and procedures for
!    --  setting fields that are normally referenced by wrapper subprograms (e.g.
!    --  logical synonyms defined in packages Sinfo and Einfo, or specialized
!    --  routines such as Rewrite (for Original_Node), or the node creation
!    --  routines (for Set_Nkind). The implementations of these wrapper
!    --  subprograms use the package Atree.Unchecked_Access as do various
!    --  special case accesses where no wrapper applies. Documentation is always
!    --  required for such a special case access explaining why it is needed.
! 
!    package Unchecked_Access is
! 
!       --  Functions to allow interpretation of Union_Id values as Uint and
!       --  Ureal values.
! 
!       function To_Union is new Unchecked_Conversion (Uint,  Union_Id);
!       function To_Union is new Unchecked_Conversion (Ureal, Union_Id);
! 
!       function From_Union is new Unchecked_Conversion (Union_Id, Uint);
!       function From_Union is new Unchecked_Conversion (Union_Id, Ureal);
! 
!       --  Functions to fetch contents of indicated field. It is an error to
!       --  attempt to read the value of a field which is not present.
! 
!       function Field1 (N : Node_Id) return Union_Id;
!       pragma Inline (Field1);
! 
!       function Field2 (N : Node_Id) return Union_Id;
!       pragma Inline (Field2);
! 
!       function Field3 (N : Node_Id) return Union_Id;
!       pragma Inline (Field3);
! 
!       function Field4 (N : Node_Id) return Union_Id;
!       pragma Inline (Field4);
! 
!       function Field5 (N : Node_Id) return Union_Id;
!       pragma Inline (Field5);
! 
!       function Field6 (N : Node_Id) return Union_Id;
!       pragma Inline (Field6);
! 
!       function Field7 (N : Node_Id) return Union_Id;
!       pragma Inline (Field7);
! 
!       function Field8 (N : Node_Id) return Union_Id;
!       pragma Inline (Field8);
! 
!       function Field9 (N : Node_Id) return Union_Id;
!       pragma Inline (Field9);
! 
!       function Field10 (N : Node_Id) return Union_Id;
!       pragma Inline (Field10);
! 
!       function Field11 (N : Node_Id) return Union_Id;
!       pragma Inline (Field11);
! 
!       function Field12 (N : Node_Id) return Union_Id;
!       pragma Inline (Field12);
! 
!       function Field13 (N : Node_Id) return Union_Id;
!       pragma Inline (Field13);
! 
!       function Field14 (N : Node_Id) return Union_Id;
!       pragma Inline (Field14);
! 
!       function Field15 (N : Node_Id) return Union_Id;
!       pragma Inline (Field15);
! 
!       function Field16 (N : Node_Id) return Union_Id;
!       pragma Inline (Field16);
! 
!       function Field17 (N : Node_Id) return Union_Id;
!       pragma Inline (Field17);
! 
!       function Field18 (N : Node_Id) return Union_Id;
!       pragma Inline (Field18);
! 
!       function Field19 (N : Node_Id) return Union_Id;
!       pragma Inline (Field19);
! 
!       function Field20 (N : Node_Id) return Union_Id;
!       pragma Inline (Field20);
! 
!       function Field21 (N : Node_Id) return Union_Id;
!       pragma Inline (Field21);
! 
!       function Field22 (N : Node_Id) return Union_Id;
!       pragma Inline (Field22);
! 
!       function Field23 (N : Node_Id) return Union_Id;
!       pragma Inline (Field23);
! 
!       function Field24 (N : Node_Id) return Union_Id;
!       pragma Inline (Field24);
! 
!       function Field25 (N : Node_Id) return Union_Id;
!       pragma Inline (Field25);
! 
!       function Field26 (N : Node_Id) return Union_Id;
!       pragma Inline (Field26);
! 
!       function Field27 (N : Node_Id) return Union_Id;
!       pragma Inline (Field27);
! 
!       function Field28 (N : Node_Id) return Union_Id;
!       pragma Inline (Field28);
! 
!       function Field29 (N : Node_Id) return Union_Id;
!       pragma Inline (Field29);
! 
!       function Field30 (N : Node_Id) return Union_Id;
!       pragma Inline (Field30);
! 
!       function Field31 (N : Node_Id) return Union_Id;
!       pragma Inline (Field31);
! 
!       function Field32 (N : Node_Id) return Union_Id;
!       pragma Inline (Field32);
! 
!       function Field33 (N : Node_Id) return Union_Id;
!       pragma Inline (Field33);
! 
!       function Field34 (N : Node_Id) return Union_Id;
!       pragma Inline (Field34);
! 
!       function Field35 (N : Node_Id) return Union_Id;
!       pragma Inline (Field35);
! 
!       function Field36 (N : Node_Id) return Union_Id;
!       pragma Inline (Field36);
! 
!       function Field37 (N : Node_Id) return Union_Id;
!       pragma Inline (Field37);
! 
!       function Field38 (N : Node_Id) return Union_Id;
!       pragma Inline (Field38);
! 
!       function Field39 (N : Node_Id) return Union_Id;
!       pragma Inline (Field39);
! 
!       function Field40 (N : Node_Id) return Union_Id;
!       pragma Inline (Field40);
! 
!       function Field41 (N : Node_Id) return Union_Id;
!       pragma Inline (Field41);
! 
!       function Node1 (N : Node_Id) return Node_Id;
!       pragma Inline (Node1);
! 
!       function Node2 (N : Node_Id) return Node_Id;
!       pragma Inline (Node2);
! 
!       function Node3 (N : Node_Id) return Node_Id;
!       pragma Inline (Node3);
! 
!       function Node4 (N : Node_Id) return Node_Id;
!       pragma Inline (Node4);
! 
!       function Node5 (N : Node_Id) return Node_Id;
!       pragma Inline (Node5);
! 
!       function Node6 (N : Node_Id) return Node_Id;
!       pragma Inline (Node6);
! 
!       function Node7 (N : Node_Id) return Node_Id;
!       pragma Inline (Node7);
! 
!       function Node8 (N : Node_Id) return Node_Id;
!       pragma Inline (Node8);
! 
!       function Node9 (N : Node_Id) return Node_Id;
!       pragma Inline (Node9);
! 
!       function Node10 (N : Node_Id) return Node_Id;
!       pragma Inline (Node10);
! 
!       function Node11 (N : Node_Id) return Node_Id;
!       pragma Inline (Node11);
! 
!       function Node12 (N : Node_Id) return Node_Id;
!       pragma Inline (Node12);
! 
!       function Node13 (N : Node_Id) return Node_Id;
!       pragma Inline (Node13);
! 
!       function Node14 (N : Node_Id) return Node_Id;
!       pragma Inline (Node14);
! 
!       function Node15 (N : Node_Id) return Node_Id;
!       pragma Inline (Node15);
! 
!       function Node16 (N : Node_Id) return Node_Id;
!       pragma Inline (Node16);
! 
!       function Node17 (N : Node_Id) return Node_Id;
!       pragma Inline (Node17);
! 
!       function Node18 (N : Node_Id) return Node_Id;
!       pragma Inline (Node18);
! 
!       function Node19 (N : Node_Id) return Node_Id;
!       pragma Inline (Node19);
! 
!       function Node20 (N : Node_Id) return Node_Id;
!       pragma Inline (Node20);
! 
!       function Node21 (N : Node_Id) return Node_Id;
!       pragma Inline (Node21);
! 
!       function Node22 (N : Node_Id) return Node_Id;
!       pragma Inline (Node22);
! 
!       function Node23 (N : Node_Id) return Node_Id;
!       pragma Inline (Node23);
! 
!       function Node24 (N : Node_Id) return Node_Id;
!       pragma Inline (Node24);
! 
!       function Node25 (N : Node_Id) return Node_Id;
!       pragma Inline (Node25);
! 
!       function Node26 (N : Node_Id) return Node_Id;
!       pragma Inline (Node26);
! 
!       function Node27 (N : Node_Id) return Node_Id;
!       pragma Inline (Node27);
! 
!       function Node28 (N : Node_Id) return Node_Id;
!       pragma Inline (Node28);
! 
!       function Node29 (N : Node_Id) return Node_Id;
!       pragma Inline (Node29);
! 
!       function Node30 (N : Node_Id) return Node_Id;
!       pragma Inline (Node30);
! 
!       function Node31 (N : Node_Id) return Node_Id;
!       pragma Inline (Node31);
! 
!       function Node32 (N : Node_Id) return Node_Id;
!       pragma Inline (Node32);
! 
!       function Node33 (N : Node_Id) return Node_Id;
!       pragma Inline (Node33);
! 
!       function Node34 (N : Node_Id) return Node_Id;
!       pragma Inline (Node34);
! 
!       function Node35 (N : Node_Id) return Node_Id;
!       pragma Inline (Node35);
! 
!       function Node36 (N : Node_Id) return Node_Id;
!       pragma Inline (Node36);
! 
!       function Node37 (N : Node_Id) return Node_Id;
!       pragma Inline (Node37);
! 
!       function Node38 (N : Node_Id) return Node_Id;
!       pragma Inline (Node38);
! 
!       function Node39 (N : Node_Id) return Node_Id;
!       pragma Inline (Node39);
! 
!       function Node40 (N : Node_Id) return Node_Id;
!       pragma Inline (Node40);
! 
!       function Node41 (N : Node_Id) return Node_Id;
!       pragma Inline (Node41);
! 
!       function List1 (N : Node_Id) return List_Id;
!       pragma Inline (List1);
! 
!       function List2 (N : Node_Id) return List_Id;
!       pragma Inline (List2);
! 
!       function List3 (N : Node_Id) return List_Id;
!       pragma Inline (List3);
! 
!       function List4 (N : Node_Id) return List_Id;
!       pragma Inline (List4);
! 
!       function List5 (N : Node_Id) return List_Id;
!       pragma Inline (List5);
! 
!       function List10 (N : Node_Id) return List_Id;
!       pragma Inline (List10);
! 
!       function List14 (N : Node_Id) return List_Id;
!       pragma Inline (List14);
! 
!       function List25 (N : Node_Id) return List_Id;
!       pragma Inline (List25);
! 
!       function List38 (N : Node_Id) return List_Id;
!       pragma Inline (List38);
! 
!       function List39 (N : Node_Id) return List_Id;
!       pragma Inline (List39);
! 
!       function Elist1 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist1);
! 
!       function Elist2 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist2);
! 
!       function Elist3 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist3);
! 
!       function Elist4 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist4);
! 
!       function Elist5 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist5);
! 
!       function Elist8 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist8);
! 
!       function Elist9 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist9);
! 
!       function Elist10 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist10);
! 
!       function Elist11 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist11);
! 
!       function Elist13 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist13);
! 
!       function Elist15 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist15);
! 
!       function Elist16 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist16);
! 
!       function Elist18 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist18);
! 
!       function Elist21 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist21);
! 
!       function Elist23 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist23);
! 
!       function Elist24 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist24);
! 
!       function Elist25 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist25);
! 
!       function Elist26 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist26);
! 
!       function Elist29 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist29);
! 
!       function Elist30 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist30);
! 
!       function Elist36 (N : Node_Id) return Elist_Id;
!       pragma Inline (Elist36);
! 
!       function Name1 (N : Node_Id) return Name_Id;
!       pragma Inline (Name1);
! 
!       function Name2 (N : Node_Id) return Name_Id;
!       pragma Inline (Name2);
! 
!       function Str3 (N : Node_Id) return String_Id;
!       pragma Inline (Str3);
! 
!       --  Note: the following Uintnn functions have a special test for the
!       --  Field value being Empty. If an Empty value is found then Uint_0 is
!       --  returned. This avoids the rather tricky requirement of initializing
!       --  all Uint fields in nodes and entities.
! 
!       function Uint2 (N : Node_Id) return Uint;
!       pragma Inline (Uint2);
! 
!       function Uint3 (N : Node_Id) return Uint;
!       pragma Inline (Uint3);
! 
!       function Uint4 (N : Node_Id) return Uint;
!       pragma Inline (Uint4);
! 
!       function Uint5 (N : Node_Id) return Uint;
!       pragma Inline (Uint5);
! 
!       function Uint8 (N : Node_Id) return Uint;
!       pragma Inline (Uint8);
! 
!       function Uint9 (N : Node_Id) return Uint;
!       pragma Inline (Uint9);
! 
!       function Uint10 (N : Node_Id) return Uint;
!       pragma Inline (Uint10);
! 
!       function Uint11 (N : Node_Id) return Uint;
!       pragma Inline (Uint11);
! 
!       function Uint12 (N : Node_Id) return Uint;
!       pragma Inline (Uint12);
! 
!       function Uint13 (N : Node_Id) return Uint;
!       pragma Inline (Uint13);
! 
!       function Uint14 (N : Node_Id) return Uint;
!       pragma Inline (Uint14);
! 
!       function Uint15 (N : Node_Id) return Uint;
!       pragma Inline (Uint15);
! 
!       function Uint16 (N : Node_Id) return Uint;
!       pragma Inline (Uint16);
! 
!       function Uint17 (N : Node_Id) return Uint;
!       pragma Inline (Uint17);
! 
!       function Uint22 (N : Node_Id) return Uint;
!       pragma Inline (Uint22);
! 
!       function Uint24 (N : Node_Id) return Uint;
!       pragma Inline (Uint24);
! 
!       function Ureal3 (N : Node_Id) return Ureal;
!       pragma Inline (Ureal3);
! 
!       function Ureal18 (N : Node_Id) return Ureal;
!       pragma Inline (Ureal18);
! 
!       function Ureal21 (N : Node_Id) return Ureal;
!       pragma Inline (Ureal21);
! 
!       function Flag0 (N : Node_Id) return Boolean;
!       pragma Inline (Flag0);
! 
!       function Flag1 (N : Node_Id) return Boolean;
!       pragma Inline (Flag1);
! 
!       function Flag2 (N : Node_Id) return Boolean;
!       pragma Inline (Flag2);
! 
!       function Flag3 (N : Node_Id) return Boolean;
!       pragma Inline (Flag3);
! 
!       function Flag4 (N : Node_Id) return Boolean;
!       pragma Inline (Flag4);
! 
!       function Flag5 (N : Node_Id) return Boolean;
!       pragma Inline (Flag5);
! 
!       function Flag6 (N : Node_Id) return Boolean;
!       pragma Inline (Flag6);
! 
!       function Flag7 (N : Node_Id) return Boolean;
!       pragma Inline (Flag7);
! 
!       function Flag8 (N : Node_Id) return Boolean;
!       pragma Inline (Flag8);
! 
!       function Flag9 (N : Node_Id) return Boolean;
!       pragma Inline (Flag9);
! 
!       function Flag10 (N : Node_Id) return Boolean;
!       pragma Inline (Flag10);
! 
!       function Flag11 (N : Node_Id) return Boolean;
!       pragma Inline (Flag11);
! 
!       function Flag12 (N : Node_Id) return Boolean;
!       pragma Inline (Flag12);
! 
!       function Flag13 (N : Node_Id) return Boolean;
!       pragma Inline (Flag13);
! 
!       function Flag14 (N : Node_Id) return Boolean;
!       pragma Inline (Flag14);
! 
!       function Flag15 (N : Node_Id) return Boolean;
!       pragma Inline (Flag15);
! 
!       function Flag16 (N : Node_Id) return Boolean;
!       pragma Inline (Flag16);
! 
!       function Flag17 (N : Node_Id) return Boolean;
!       pragma Inline (Flag17);
! 
!       function Flag18 (N : Node_Id) return Boolean;
!       pragma Inline (Flag18);
! 
!       function Flag19 (N : Node_Id) return Boolean;
!       pragma Inline (Flag19);
! 
!       function Flag20 (N : Node_Id) return Boolean;
!       pragma Inline (Flag20);
! 
!       function Flag21 (N : Node_Id) return Boolean;
!       pragma Inline (Flag21);
! 
!       function Flag22 (N : Node_Id) return Boolean;
!       pragma Inline (Flag22);
! 
!       function Flag23 (N : Node_Id) return Boolean;
!       pragma Inline (Flag23);
! 
!       function Flag24 (N : Node_Id) return Boolean;
!       pragma Inline (Flag24);
! 
!       function Flag25 (N : Node_Id) return Boolean;
!       pragma Inline (Flag25);
! 
!       function Flag26 (N : Node_Id) return Boolean;
!       pragma Inline (Flag26);
! 
!       function Flag27 (N : Node_Id) return Boolean;
!       pragma Inline (Flag27);
! 
!       function Flag28 (N : Node_Id) return Boolean;
!       pragma Inline (Flag28);
! 
!       function Flag29 (N : Node_Id) return Boolean;
!       pragma Inline (Flag29);
! 
!       function Flag30 (N : Node_Id) return Boolean;
!       pragma Inline (Flag30);
! 
!       function Flag31 (N : Node_Id) return Boolean;
!       pragma Inline (Flag31);
! 
!       function Flag32 (N : Node_Id) return Boolean;
!       pragma Inline (Flag32);
! 
!       function Flag33 (N : Node_Id) return Boolean;
!       pragma Inline (Flag33);
! 
!       function Flag34 (N : Node_Id) return Boolean;
!       pragma Inline (Flag34);
! 
!       function Flag35 (N : Node_Id) return Boolean;
!       pragma Inline (Flag35);
! 
!       function Flag36 (N : Node_Id) return Boolean;
!       pragma Inline (Flag36);
! 
!       function Flag37 (N : Node_Id) return Boolean;
!       pragma Inline (Flag37);
! 
!       function Flag38 (N : Node_Id) return Boolean;
!       pragma Inline (Flag38);
! 
!       function Flag39 (N : Node_Id) return Boolean;
!       pragma Inline (Flag39);
! 
!       function Flag40 (N : Node_Id) return Boolean;
!       pragma Inline (Flag40);
! 
!       function Flag41 (N : Node_Id) return Boolean;
!       pragma Inline (Flag41);
! 
!       function Flag42 (N : Node_Id) return Boolean;
!       pragma Inline (Flag42);
! 
!       function Flag43 (N : Node_Id) return Boolean;
!       pragma Inline (Flag43);
! 
!       function Flag44 (N : Node_Id) return Boolean;
!       pragma Inline (Flag44);
! 
!       function Flag45 (N : Node_Id) return Boolean;
!       pragma Inline (Flag45);
! 
!       function Flag46 (N : Node_Id) return Boolean;
!       pragma Inline (Flag46);
! 
!       function Flag47 (N : Node_Id) return Boolean;
!       pragma Inline (Flag47);
! 
!       function Flag48 (N : Node_Id) return Boolean;
!       pragma Inline (Flag48);
! 
!       function Flag49 (N : Node_Id) return Boolean;
!       pragma Inline (Flag49);
! 
!       function Flag50 (N : Node_Id) return Boolean;
!       pragma Inline (Flag50);
! 
!       function Flag51 (N : Node_Id) return Boolean;
!       pragma Inline (Flag51);
! 
!       function Flag52 (N : Node_Id) return Boolean;
!       pragma Inline (Flag52);
! 
!       function Flag53 (N : Node_Id) return Boolean;
!       pragma Inline (Flag53);
! 
!       function Flag54 (N : Node_Id) return Boolean;
!       pragma Inline (Flag54);
! 
!       function Flag55 (N : Node_Id) return Boolean;
!       pragma Inline (Flag55);
! 
!       function Flag56 (N : Node_Id) return Boolean;
!       pragma Inline (Flag56);
! 
!       function Flag57 (N : Node_Id) return Boolean;
!       pragma Inline (Flag57);
! 
!       function Flag58 (N : Node_Id) return Boolean;
!       pragma Inline (Flag58);
! 
!       function Flag59 (N : Node_Id) return Boolean;
!       pragma Inline (Flag59);
! 
!       function Flag60 (N : Node_Id) return Boolean;
!       pragma Inline (Flag60);
! 
!       function Flag61 (N : Node_Id) return Boolean;
!       pragma Inline (Flag61);
! 
!       function Flag62 (N : Node_Id) return Boolean;
!       pragma Inline (Flag62);
! 
!       function Flag63 (N : Node_Id) return Boolean;
!       pragma Inline (Flag63);
! 
!       function Flag64 (N : Node_Id) return Boolean;
!       pragma Inline (Flag64);
! 
!       function Flag65 (N : Node_Id) return Boolean;
!       pragma Inline (Flag65);
! 
!       function Flag66 (N : Node_Id) return Boolean;
!       pragma Inline (Flag66);
! 
!       function Flag67 (N : Node_Id) return Boolean;
!       pragma Inline (Flag67);
! 
!       function Flag68 (N : Node_Id) return Boolean;
!       pragma Inline (Flag68);
! 
!       function Flag69 (N : Node_Id) return Boolean;
!       pragma Inline (Flag69);
! 
!       function Flag70 (N : Node_Id) return Boolean;
!       pragma Inline (Flag70);
! 
!       function Flag71 (N : Node_Id) return Boolean;
!       pragma Inline (Flag71);
! 
!       function Flag72 (N : Node_Id) return Boolean;
!       pragma Inline (Flag72);
! 
!       function Flag73 (N : Node_Id) return Boolean;
!       pragma Inline (Flag73);
! 
!       function Flag74 (N : Node_Id) return Boolean;
!       pragma Inline (Flag74);
! 
!       function Flag75 (N : Node_Id) return Boolean;
!       pragma Inline (Flag75);
! 
!       function Flag76 (N : Node_Id) return Boolean;
!       pragma Inline (Flag76);
! 
!       function Flag77 (N : Node_Id) return Boolean;
!       pragma Inline (Flag77);
! 
!       function Flag78 (N : Node_Id) return Boolean;
!       pragma Inline (Flag78);
! 
!       function Flag79 (N : Node_Id) return Boolean;
!       pragma Inline (Flag79);
! 
!       function Flag80 (N : Node_Id) return Boolean;
!       pragma Inline (Flag80);
! 
!       function Flag81 (N : Node_Id) return Boolean;
!       pragma Inline (Flag81);
! 
!       function Flag82 (N : Node_Id) return Boolean;
!       pragma Inline (Flag82);
! 
!       function Flag83 (N : Node_Id) return Boolean;
!       pragma Inline (Flag83);
! 
!       function Flag84 (N : Node_Id) return Boolean;
!       pragma Inline (Flag84);
! 
!       function Flag85 (N : Node_Id) return Boolean;
!       pragma Inline (Flag85);
! 
!       function Flag86 (N : Node_Id) return Boolean;
!       pragma Inline (Flag86);
! 
!       function Flag87 (N : Node_Id) return Boolean;
!       pragma Inline (Flag87);
! 
!       function Flag88 (N : Node_Id) return Boolean;
!       pragma Inline (Flag88);
! 
!       function Flag89 (N : Node_Id) return Boolean;
!       pragma Inline (Flag89);
! 
!       function Flag90 (N : Node_Id) return Boolean;
!       pragma Inline (Flag90);
! 
!       function Flag91 (N : Node_Id) return Boolean;
!       pragma Inline (Flag91);
! 
!       function Flag92 (N : Node_Id) return Boolean;
!       pragma Inline (Flag92);
! 
!       function Flag93 (N : Node_Id) return Boolean;
!       pragma Inline (Flag93);
! 
!       function Flag94 (N : Node_Id) return Boolean;
!       pragma Inline (Flag94);
! 
!       function Flag95 (N : Node_Id) return Boolean;
!       pragma Inline (Flag95);
! 
!       function Flag96 (N : Node_Id) return Boolean;
!       pragma Inline (Flag96);
! 
!       function Flag97 (N : Node_Id) return Boolean;
!       pragma Inline (Flag97);
! 
!       function Flag98 (N : Node_Id) return Boolean;
!       pragma Inline (Flag98);
! 
!       function Flag99 (N : Node_Id) return Boolean;
!       pragma Inline (Flag99);
! 
!       function Flag100 (N : Node_Id) return Boolean;
!       pragma Inline (Flag100);
! 
!       function Flag101 (N : Node_Id) return Boolean;
!       pragma Inline (Flag101);
! 
!       function Flag102 (N : Node_Id) return Boolean;
!       pragma Inline (Flag102);
! 
!       function Flag103 (N : Node_Id) return Boolean;
!       pragma Inline (Flag103);
! 
!       function Flag104 (N : Node_Id) return Boolean;
!       pragma Inline (Flag104);
! 
!       function Flag105 (N : Node_Id) return Boolean;
!       pragma Inline (Flag105);
! 
!       function Flag106 (N : Node_Id) return Boolean;
!       pragma Inline (Flag106);
! 
!       function Flag107 (N : Node_Id) return Boolean;
!       pragma Inline (Flag107);
! 
!       function Flag108 (N : Node_Id) return Boolean;
!       pragma Inline (Flag108);
! 
!       function Flag109 (N : Node_Id) return Boolean;
!       pragma Inline (Flag109);
! 
!       function Flag110 (N : Node_Id) return Boolean;
!       pragma Inline (Flag110);
! 
!       function Flag111 (N : Node_Id) return Boolean;
!       pragma Inline (Flag111);
! 
!       function Flag112 (N : Node_Id) return Boolean;
!       pragma Inline (Flag112);
! 
!       function Flag113 (N : Node_Id) return Boolean;
!       pragma Inline (Flag113);
! 
!       function Flag114 (N : Node_Id) return Boolean;
!       pragma Inline (Flag114);
! 
!       function Flag115 (N : Node_Id) return Boolean;
!       pragma Inline (Flag115);
! 
!       function Flag116 (N : Node_Id) return Boolean;
!       pragma Inline (Flag116);
! 
!       function Flag117 (N : Node_Id) return Boolean;
!       pragma Inline (Flag117);
! 
!       function Flag118 (N : Node_Id) return Boolean;
!       pragma Inline (Flag118);
! 
!       function Flag119 (N : Node_Id) return Boolean;
!       pragma Inline (Flag119);
! 
!       function Flag120 (N : Node_Id) return Boolean;
!       pragma Inline (Flag120);
! 
!       function Flag121 (N : Node_Id) return Boolean;
!       pragma Inline (Flag121);
! 
!       function Flag122 (N : Node_Id) return Boolean;
!       pragma Inline (Flag122);
! 
!       function Flag123 (N : Node_Id) return Boolean;
!       pragma Inline (Flag123);
! 
!       function Flag124 (N : Node_Id) return Boolean;
!       pragma Inline (Flag124);
! 
!       function Flag125 (N : Node_Id) return Boolean;
!       pragma Inline (Flag125);
! 
!       function Flag126 (N : Node_Id) return Boolean;
!       pragma Inline (Flag126);
! 
!       function Flag127 (N : Node_Id) return Boolean;
!       pragma Inline (Flag127);
! 
!       function Flag128 (N : Node_Id) return Boolean;
!       pragma Inline (Flag128);
! 
!       function Flag129 (N : Node_Id) return Boolean;
!       pragma Inline (Flag129);
! 
!       function Flag130 (N : Node_Id) return Boolean;
!       pragma Inline (Flag130);
! 
!       function Flag131 (N : Node_Id) return Boolean;
!       pragma Inline (Flag131);
! 
!       function Flag132 (N : Node_Id) return Boolean;
!       pragma Inline (Flag132);
! 
!       function Flag133 (N : Node_Id) return Boolean;
!       pragma Inline (Flag133);
! 
!       function Flag134 (N : Node_Id) return Boolean;
!       pragma Inline (Flag134);
! 
!       function Flag135 (N : Node_Id) return Boolean;
!       pragma Inline (Flag135);
! 
!       function Flag136 (N : Node_Id) return Boolean;
!       pragma Inline (Flag136);
! 
!       function Flag137 (N : Node_Id) return Boolean;
!       pragma Inline (Flag137);
! 
!       function Flag138 (N : Node_Id) return Boolean;
!       pragma Inline (Flag138);
! 
!       function Flag139 (N : Node_Id) return Boolean;
!       pragma Inline (Flag139);
! 
!       function Flag140 (N : Node_Id) return Boolean;
!       pragma Inline (Flag140);
! 
!       function Flag141 (N : Node_Id) return Boolean;
!       pragma Inline (Flag141);
! 
!       function Flag142 (N : Node_Id) return Boolean;
!       pragma Inline (Flag142);
! 
!       function Flag143 (N : Node_Id) return Boolean;
!       pragma Inline (Flag143);
! 
!       function Flag144 (N : Node_Id) return Boolean;
!       pragma Inline (Flag144);
! 
!       function Flag145 (N : Node_Id) return Boolean;
!       pragma Inline (Flag145);
! 
!       function Flag146 (N : Node_Id) return Boolean;
!       pragma Inline (Flag146);
! 
!       function Flag147 (N : Node_Id) return Boolean;
!       pragma Inline (Flag147);
! 
!       function Flag148 (N : Node_Id) return Boolean;
!       pragma Inline (Flag148);
! 
!       function Flag149 (N : Node_Id) return Boolean;
!       pragma Inline (Flag149);
! 
!       function Flag150 (N : Node_Id) return Boolean;
!       pragma Inline (Flag150);
! 
!       function Flag151 (N : Node_Id) return Boolean;
!       pragma Inline (Flag151);
! 
!       function Flag152 (N : Node_Id) return Boolean;
!       pragma Inline (Flag152);
! 
!       function Flag153 (N : Node_Id) return Boolean;
!       pragma Inline (Flag153);
! 
!       function Flag154 (N : Node_Id) return Boolean;
!       pragma Inline (Flag154);
! 
!       function Flag155 (N : Node_Id) return Boolean;
!       pragma Inline (Flag155);
! 
!       function Flag156 (N : Node_Id) return Boolean;
!       pragma Inline (Flag156);
! 
!       function Flag157 (N : Node_Id) return Boolean;
!       pragma Inline (Flag157);
! 
!       function Flag158 (N : Node_Id) return Boolean;
!       pragma Inline (Flag158);
! 
!       function Flag159 (N : Node_Id) return Boolean;
!       pragma Inline (Flag159);
! 
!       function Flag160 (N : Node_Id) return Boolean;
!       pragma Inline (Flag160);
! 
!       function Flag161 (N : Node_Id) return Boolean;
!       pragma Inline (Flag161);
! 
!       function Flag162 (N : Node_Id) return Boolean;
!       pragma Inline (Flag162);
! 
!       function Flag163 (N : Node_Id) return Boolean;
!       pragma Inline (Flag163);
! 
!       function Flag164 (N : Node_Id) return Boolean;
!       pragma Inline (Flag164);
! 
!       function Flag165 (N : Node_Id) return Boolean;
!       pragma Inline (Flag165);
! 
!       function Flag166 (N : Node_Id) return Boolean;
!       pragma Inline (Flag166);
! 
!       function Flag167 (N : Node_Id) return Boolean;
!       pragma Inline (Flag167);
! 
!       function Flag168 (N : Node_Id) return Boolean;
!       pragma Inline (Flag168);
! 
!       function Flag169 (N : Node_Id) return Boolean;
!       pragma Inline (Flag169);
! 
!       function Flag170 (N : Node_Id) return Boolean;
!       pragma Inline (Flag170);
! 
!       function Flag171 (N : Node_Id) return Boolean;
!       pragma Inline (Flag171);
! 
!       function Flag172 (N : Node_Id) return Boolean;
!       pragma Inline (Flag172);
! 
!       function Flag173 (N : Node_Id) return Boolean;
!       pragma Inline (Flag173);
! 
!       function Flag174 (N : Node_Id) return Boolean;
!       pragma Inline (Flag174);
! 
!       function Flag175 (N : Node_Id) return Boolean;
!       pragma Inline (Flag175);
! 
!       function Flag176 (N : Node_Id) return Boolean;
!       pragma Inline (Flag176);
! 
!       function Flag177 (N : Node_Id) return Boolean;
!       pragma Inline (Flag177);
! 
!       function Flag178 (N : Node_Id) return Boolean;
!       pragma Inline (Flag178);
! 
!       function Flag179 (N : Node_Id) return Boolean;
!       pragma Inline (Flag179);
! 
!       function Flag180 (N : Node_Id) return Boolean;
!       pragma Inline (Flag180);
! 
!       function Flag181 (N : Node_Id) return Boolean;
!       pragma Inline (Flag181);
! 
!       function Flag182 (N : Node_Id) return Boolean;
!       pragma Inline (Flag182);
! 
!       function Flag183 (N : Node_Id) return Boolean;
!       pragma Inline (Flag183);
! 
!       function Flag184 (N : Node_Id) return Boolean;
!       pragma Inline (Flag184);
! 
!       function Flag185 (N : Node_Id) return Boolean;
!       pragma Inline (Flag185);
! 
!       function Flag186 (N : Node_Id) return Boolean;
!       pragma Inline (Flag186);
! 
!       function Flag187 (N : Node_Id) return Boolean;
!       pragma Inline (Flag187);
! 
!       function Flag188 (N : Node_Id) return Boolean;
!       pragma Inline (Flag188);
! 
!       function Flag189 (N : Node_Id) return Boolean;
!       pragma Inline (Flag189);
! 
!       function Flag190 (N : Node_Id) return Boolean;
!       pragma Inline (Flag190);
! 
!       function Flag191 (N : Node_Id) return Boolean;
!       pragma Inline (Flag191);
! 
!       function Flag192 (N : Node_Id) return Boolean;
!       pragma Inline (Flag192);
! 
!       function Flag193 (N : Node_Id) return Boolean;
!       pragma Inline (Flag193);
! 
!       function Flag194 (N : Node_Id) return Boolean;
!       pragma Inline (Flag194);
! 
!       function Flag195 (N : Node_Id) return Boolean;
!       pragma Inline (Flag195);
! 
!       function Flag196 (N : Node_Id) return Boolean;
!       pragma Inline (Flag196);
! 
!       function Flag197 (N : Node_Id) return Boolean;
!       pragma Inline (Flag197);
! 
!       function Flag198 (N : Node_Id) return Boolean;
!       pragma Inline (Flag198);
! 
!       function Flag199 (N : Node_Id) return Boolean;
!       pragma Inline (Flag199);
! 
!       function Flag200 (N : Node_Id) return Boolean;
!       pragma Inline (Flag200);
! 
!       function Flag201 (N : Node_Id) return Boolean;
!       pragma Inline (Flag201);
! 
!       function Flag202 (N : Node_Id) return Boolean;
!       pragma Inline (Flag202);
! 
!       function Flag203 (N : Node_Id) return Boolean;
!       pragma Inline (Flag203);
! 
!       function Flag204 (N : Node_Id) return Boolean;
!       pragma Inline (Flag204);
! 
!       function Flag205 (N : Node_Id) return Boolean;
!       pragma Inline (Flag205);
! 
!       function Flag206 (N : Node_Id) return Boolean;
!       pragma Inline (Flag206);
! 
!       function Flag207 (N : Node_Id) return Boolean;
!       pragma Inline (Flag207);
! 
!       function Flag208 (N : Node_Id) return Boolean;
!       pragma Inline (Flag208);
! 
!       function Flag209 (N : Node_Id) return Boolean;
!       pragma Inline (Flag209);
! 
!       function Flag210 (N : Node_Id) return Boolean;
!       pragma Inline (Flag210);
! 
!       function Flag211 (N : Node_Id) return Boolean;
!       pragma Inline (Flag211);
! 
!       function Flag212 (N : Node_Id) return Boolean;
!       pragma Inline (Flag212);
! 
!       function Flag213 (N : Node_Id) return Boolean;
!       pragma Inline (Flag213);
! 
!       function Flag214 (N : Node_Id) return Boolean;
!       pragma Inline (Flag214);
! 
!       function Flag215 (N : Node_Id) return Boolean;
!       pragma Inline (Flag215);
! 
!       function Flag216 (N : Node_Id) return Boolean;
!       pragma Inline (Flag216);
! 
!       function Flag217 (N : Node_Id) return Boolean;
!       pragma Inline (Flag217);
! 
!       function Flag218 (N : Node_Id) return Boolean;
!       pragma Inline (Flag218);
! 
!       function Flag219 (N : Node_Id) return Boolean;
!       pragma Inline (Flag219);
! 
!       function Flag220 (N : Node_Id) return Boolean;
!       pragma Inline (Flag220);
! 
!       function Flag221 (N : Node_Id) return Boolean;
!       pragma Inline (Flag221);
! 
!       function Flag222 (N : Node_Id) return Boolean;
!       pragma Inline (Flag222);
! 
!       function Flag223 (N : Node_Id) return Boolean;
!       pragma Inline (Flag223);
! 
!       function Flag224 (N : Node_Id) return Boolean;
!       pragma Inline (Flag224);
! 
!       function Flag225 (N : Node_Id) return Boolean;
!       pragma Inline (Flag225);
! 
!       function Flag226 (N : Node_Id) return Boolean;
!       pragma Inline (Flag226);
! 
!       function Flag227 (N : Node_Id) return Boolean;
!       pragma Inline (Flag227);
! 
!       function Flag228 (N : Node_Id) return Boolean;
!       pragma Inline (Flag228);
! 
!       function Flag229 (N : Node_Id) return Boolean;
!       pragma Inline (Flag229);
! 
!       function Flag230 (N : Node_Id) return Boolean;
!       pragma Inline (Flag230);
! 
!       function Flag231 (N : Node_Id) return Boolean;
!       pragma Inline (Flag231);
! 
!       function Flag232 (N : Node_Id) return Boolean;
!       pragma Inline (Flag232);
! 
!       function Flag233 (N : Node_Id) return Boolean;
!       pragma Inline (Flag233);
! 
!       function Flag234 (N : Node_Id) return Boolean;
!       pragma Inline (Flag234);
! 
!       function Flag235 (N : Node_Id) return Boolean;
!       pragma Inline (Flag235);
! 
!       function Flag236 (N : Node_Id) return Boolean;
!       pragma Inline (Flag236);
! 
!       function Flag237 (N : Node_Id) return Boolean;
!       pragma Inline (Flag237);
! 
!       function Flag238 (N : Node_Id) return Boolean;
!       pragma Inline (Flag238);
! 
!       function Flag239 (N : Node_Id) return Boolean;
!       pragma Inline (Flag239);
! 
!       function Flag240 (N : Node_Id) return Boolean;
!       pragma Inline (Flag240);
! 
!       function Flag241 (N : Node_Id) return Boolean;
!       pragma Inline (Flag241);
! 
!       function Flag242 (N : Node_Id) return Boolean;
!       pragma Inline (Flag242);
! 
!       function Flag243 (N : Node_Id) return Boolean;
!       pragma Inline (Flag243);
! 
!       function Flag244 (N : Node_Id) return Boolean;
!       pragma Inline (Flag244);
! 
!       function Flag245 (N : Node_Id) return Boolean;
!       pragma Inline (Flag245);
! 
!       function Flag246 (N : Node_Id) return Boolean;
!       pragma Inline (Flag246);
! 
!       function Flag247 (N : Node_Id) return Boolean;
!       pragma Inline (Flag247);
! 
!       function Flag248 (N : Node_Id) return Boolean;
!       pragma Inline (Flag248);
! 
!       function Flag249 (N : Node_Id) return Boolean;
!       pragma Inline (Flag249);
! 
!       function Flag250 (N : Node_Id) return Boolean;
!       pragma Inline (Flag250);
! 
!       function Flag251 (N : Node_Id) return Boolean;
!       pragma Inline (Flag251);
! 
!       function Flag252 (N : Node_Id) return Boolean;
!       pragma Inline (Flag252);
! 
!       function Flag253 (N : Node_Id) return Boolean;
!       pragma Inline (Flag253);
! 
!       function Flag254 (N : Node_Id) return Boolean;
!       pragma Inline (Flag254);
! 
!       function Flag255 (N : Node_Id) return Boolean;
!       pragma Inline (Flag255);
! 
!       function Flag256 (N : Node_Id) return Boolean;
!       pragma Inline (Flag256);
! 
!       function Flag257 (N : Node_Id) return Boolean;
!       pragma Inline (Flag257);
! 
!       function Flag258 (N : Node_Id) return Boolean;
!       pragma Inline (Flag258);
! 
!       function Flag259 (N : Node_Id) return Boolean;
!       pragma Inline (Flag259);
! 
!       function Flag260 (N : Node_Id) return Boolean;
!       pragma Inline (Flag260);
! 
!       function Flag261 (N : Node_Id) return Boolean;
!       pragma Inline (Flag261);
! 
!       function Flag262 (N : Node_Id) return Boolean;
!       pragma Inline (Flag262);
! 
!       function Flag263 (N : Node_Id) return Boolean;
!       pragma Inline (Flag263);
! 
!       function Flag264 (N : Node_Id) return Boolean;
!       pragma Inline (Flag264);
! 
!       function Flag265 (N : Node_Id) return Boolean;
!       pragma Inline (Flag265);
! 
!       function Flag266 (N : Node_Id) return Boolean;
!       pragma Inline (Flag266);
! 
!       function Flag267 (N : Node_Id) return Boolean;
!       pragma Inline (Flag267);
! 
!       function Flag268 (N : Node_Id) return Boolean;
!       pragma Inline (Flag268);
! 
!       function Flag269 (N : Node_Id) return Boolean;
!       pragma Inline (Flag269);
! 
!       function Flag270 (N : Node_Id) return Boolean;
!       pragma Inline (Flag270);
! 
!       function Flag271 (N : Node_Id) return Boolean;
!       pragma Inline (Flag271);
! 
!       function Flag272 (N : Node_Id) return Boolean;
!       pragma Inline (Flag272);
! 
!       function Flag273 (N : Node_Id) return Boolean;
!       pragma Inline (Flag273);
! 
!       function Flag274 (N : Node_Id) return Boolean;
!       pragma Inline (Flag274);
! 
!       function Flag275 (N : Node_Id) return Boolean;
!       pragma Inline (Flag275);
! 
!       function Flag276 (N : Node_Id) return Boolean;
!       pragma Inline (Flag276);
! 
!       function Flag277 (N : Node_Id) return Boolean;
!       pragma Inline (Flag277);
! 
!       function Flag278 (N : Node_Id) return Boolean;
!       pragma Inline (Flag278);
! 
!       function Flag279 (N : Node_Id) return Boolean;
!       pragma Inline (Flag279);
! 
!       function Flag280 (N : Node_Id) return Boolean;
!       pragma Inline (Flag280);
! 
!       function Flag281 (N : Node_Id) return Boolean;
!       pragma Inline (Flag281);
! 
!       function Flag282 (N : Node_Id) return Boolean;
!       pragma Inline (Flag282);
! 
!       function Flag283 (N : Node_Id) return Boolean;
!       pragma Inline (Flag283);
! 
!       function Flag284 (N : Node_Id) return Boolean;
!       pragma Inline (Flag284);
! 
!       function Flag285 (N : Node_Id) return Boolean;
!       pragma Inline (Flag285);
! 
!       function Flag286 (N : Node_Id) return Boolean;
!       pragma Inline (Flag286);
! 
!       function Flag287 (N : Node_Id) return Boolean;
!       pragma Inline (Flag287);
! 
!       function Flag288 (N : Node_Id) return Boolean;
!       pragma Inline (Flag288);
! 
!       function Flag289 (N : Node_Id) return Boolean;
!       pragma Inline (Flag289);
! 
!       function Flag290 (N : Node_Id) return Boolean;
!       pragma Inline (Flag290);
! 
!       function Flag291 (N : Node_Id) return Boolean;
!       pragma Inline (Flag291);
! 
!       function Flag292 (N : Node_Id) return Boolean;
!       pragma Inline (Flag292);
! 
!       function Flag293 (N : Node_Id) return Boolean;
!       pragma Inline (Flag293);
! 
!       function Flag294 (N : Node_Id) return Boolean;
!       pragma Inline (Flag294);
! 
!       function Flag295 (N : Node_Id) return Boolean;
!       pragma Inline (Flag295);
! 
!       function Flag296 (N : Node_Id) return Boolean;
!       pragma Inline (Flag296);
! 
!       function Flag297 (N : Node_Id) return Boolean;
!       pragma Inline (Flag297);
! 
!       function Flag298 (N : Node_Id) return Boolean;
!       pragma Inline (Flag298);
! 
!       function Flag299 (N : Node_Id) return Boolean;
!       pragma Inline (Flag299);
! 
!       function Flag300 (N : Node_Id) return Boolean;
!       pragma Inline (Flag300);
! 
!       function Flag301 (N : Node_Id) return Boolean;
!       pragma Inline (Flag301);
! 
!       function Flag302 (N : Node_Id) return Boolean;
!       pragma Inline (Flag302);
! 
!       function Flag303 (N : Node_Id) return Boolean;
!       pragma Inline (Flag303);
! 
!       function Flag304 (N : Node_Id) return Boolean;
!       pragma Inline (Flag304);
! 
!       function Flag305 (N : Node_Id) return Boolean;
!       pragma Inline (Flag305);
! 
!       function Flag306 (N : Node_Id) return Boolean;
!       pragma Inline (Flag306);
! 
!       function Flag307 (N : Node_Id) return Boolean;
!       pragma Inline (Flag307);
! 
!       function Flag308 (N : Node_Id) return Boolean;
!       pragma Inline (Flag308);
! 
!       function Flag309 (N : Node_Id) return Boolean;
!       pragma Inline (Flag309);
! 
!       function Flag310 (N : Node_Id) return Boolean;
!       pragma Inline (Flag310);
! 
!       function Flag311 (N : Node_Id) return Boolean;
!       pragma Inline (Flag311);
! 
!       function Flag312 (N : Node_Id) return Boolean;
!       pragma Inline (Flag312);
! 
!       function Flag313 (N : Node_Id) return Boolean;
!       pragma Inline (Flag313);
! 
!       function Flag314 (N : Node_Id) return Boolean;
!       pragma Inline (Flag314);
! 
!       function Flag315 (N : Node_Id) return Boolean;
!       pragma Inline (Flag315);
! 
!       function Flag316 (N : Node_Id) return Boolean;
!       pragma Inline (Flag316);
! 
!       function Flag317 (N : Node_Id) return Boolean;
!       pragma Inline (Flag317);
! 
!       --  Procedures to set value of indicated field
! 
!       procedure Set_Nkind (N : Node_Id; Val : Node_Kind);
!       pragma Inline (Set_Nkind);
! 
!       procedure Set_Field1 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field1);
! 
!       procedure Set_Field2 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field2);
! 
!       procedure Set_Field3 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field3);
! 
!       procedure Set_Field4 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field4);
! 
!       procedure Set_Field5 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field5);
! 
!       procedure Set_Field6 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field6);
! 
!       procedure Set_Field7 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field7);
! 
!       procedure Set_Field8 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field8);
! 
!       procedure Set_Field9 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field9);
! 
!       procedure Set_Field10 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field10);
! 
!       procedure Set_Field11 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field11);
! 
!       procedure Set_Field12 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field12);
! 
!       procedure Set_Field13 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field13);
! 
!       procedure Set_Field14 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field14);
! 
!       procedure Set_Field15 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field15);
! 
!       procedure Set_Field16 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field16);
! 
!       procedure Set_Field17 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field17);
! 
!       procedure Set_Field18 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field18);
! 
!       procedure Set_Field19 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field19);
! 
!       procedure Set_Field20 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field20);
! 
!       procedure Set_Field21 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field21);
! 
!       procedure Set_Field22 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field22);
! 
!       procedure Set_Field23 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field23);
! 
!       procedure Set_Field24 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field24);
! 
!       procedure Set_Field25 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field25);
! 
!       procedure Set_Field26 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field26);
! 
!       procedure Set_Field27 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field27);
! 
!       procedure Set_Field28 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field28);
! 
!       procedure Set_Field29 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field29);
! 
!       procedure Set_Field30 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field30);
! 
!       procedure Set_Field31 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field31);
! 
!       procedure Set_Field32 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field32);
! 
!       procedure Set_Field33 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field33);
! 
!       procedure Set_Field34 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field34);
! 
!       procedure Set_Field35 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field35);
! 
!       procedure Set_Field36 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field36);
! 
!       procedure Set_Field37 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field37);
! 
!       procedure Set_Field38 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field38);
! 
!       procedure Set_Field39 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field39);
! 
!       procedure Set_Field40 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field40);
! 
!       procedure Set_Field41 (N : Node_Id; Val : Union_Id);
!       pragma Inline (Set_Field41);
! 
!       procedure Set_Node1 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node1);
! 
!       procedure Set_Node2 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node2);
! 
!       procedure Set_Node3 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node3);
! 
!       procedure Set_Node4 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node4);
! 
!       procedure Set_Node5 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node5);
! 
!       procedure Set_Node6 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node6);
! 
!       procedure Set_Node7 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node7);
! 
!       procedure Set_Node8 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node8);
! 
!       procedure Set_Node9 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node9);
! 
!       procedure Set_Node10 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node10);
! 
!       procedure Set_Node11 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node11);
! 
!       procedure Set_Node12 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node12);
! 
!       procedure Set_Node13 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node13);
! 
!       procedure Set_Node14 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node14);
! 
!       procedure Set_Node15 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node15);
! 
!       procedure Set_Node16 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node16);
! 
!       procedure Set_Node17 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node17);
! 
!       procedure Set_Node18 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node18);
! 
!       procedure Set_Node19 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node19);
! 
!       procedure Set_Node20 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node20);
! 
!       procedure Set_Node21 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node21);
! 
!       procedure Set_Node22 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node22);
! 
!       procedure Set_Node23 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node23);
! 
!       procedure Set_Node24 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node24);
! 
!       procedure Set_Node25 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node25);
! 
!       procedure Set_Node26 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node26);
! 
!       procedure Set_Node27 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node27);
! 
!       procedure Set_Node28 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node28);
! 
!       procedure Set_Node29 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node29);
! 
!       procedure Set_Node30 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node30);
! 
!       procedure Set_Node31 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node31);
! 
!       procedure Set_Node32 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node32);
! 
!       procedure Set_Node33 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node33);
! 
!       procedure Set_Node34 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node34);
! 
!       procedure Set_Node35 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node35);
! 
!       procedure Set_Node36 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node36);
! 
!       procedure Set_Node37 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node37);
! 
!       procedure Set_Node38 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node38);
! 
!       procedure Set_Node39 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node39);
! 
!       procedure Set_Node40 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node40);
! 
!       procedure Set_Node41 (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node41);
! 
!       procedure Set_List1 (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List1);
! 
!       procedure Set_List2 (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List2);
! 
!       procedure Set_List3 (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List3);
! 
!       procedure Set_List4 (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List4);
! 
!       procedure Set_List5 (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List5);
! 
!       procedure Set_List10 (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List10);
! 
!       procedure Set_List14 (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List14);
! 
!       procedure Set_List25 (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List25);
! 
!       procedure Set_List38 (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List38);
! 
!       procedure Set_List39 (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List39);
! 
!       procedure Set_Elist1 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist1);
! 
!       procedure Set_Elist2 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist2);
! 
!       procedure Set_Elist3 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist3);
! 
!       procedure Set_Elist4 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist4);
! 
!       procedure Set_Elist5 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist5);
! 
!       procedure Set_Elist8 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist8);
! 
!       procedure Set_Elist9 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist9);
! 
!       procedure Set_Elist10 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist10);
! 
!       procedure Set_Elist11 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist11);
! 
!       procedure Set_Elist13 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist13);
! 
!       procedure Set_Elist15 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist15);
! 
!       procedure Set_Elist16 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist16);
! 
!       procedure Set_Elist18 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist18);
! 
!       procedure Set_Elist21 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist21);
! 
!       procedure Set_Elist23 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist23);
! 
!       procedure Set_Elist24 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist24);
! 
!       procedure Set_Elist25 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist25);
! 
!       procedure Set_Elist26 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist26);
! 
!       procedure Set_Elist29 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist29);
! 
!       procedure Set_Elist30 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist30);
! 
!       procedure Set_Elist36 (N : Node_Id; Val : Elist_Id);
!       pragma Inline (Set_Elist36);
! 
!       procedure Set_Name1 (N : Node_Id; Val : Name_Id);
!       pragma Inline (Set_Name1);
! 
!       procedure Set_Name2 (N : Node_Id; Val : Name_Id);
!       pragma Inline (Set_Name2);
! 
!       procedure Set_Str3 (N : Node_Id; Val : String_Id);
!       pragma Inline (Set_Str3);
! 
!       procedure Set_Uint2 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint2);
! 
!       procedure Set_Uint3 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint3);
! 
!       procedure Set_Uint4 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint4);
! 
!       procedure Set_Uint5 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint5);
! 
!       procedure Set_Uint8 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint8);
! 
!       procedure Set_Uint9 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint9);
! 
!       procedure Set_Uint10 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint10);
! 
!       procedure Set_Uint11 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint11);
! 
!       procedure Set_Uint12 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint12);
! 
!       procedure Set_Uint13 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint13);
! 
!       procedure Set_Uint14 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint14);
! 
!       procedure Set_Uint15 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint15);
! 
!       procedure Set_Uint16 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint16);
! 
!       procedure Set_Uint17 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint17);
! 
!       procedure Set_Uint22 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint22);
! 
!       procedure Set_Uint24 (N : Node_Id; Val : Uint);
!       pragma Inline (Set_Uint24);
! 
!       procedure Set_Ureal3 (N : Node_Id; Val : Ureal);
!       pragma Inline (Set_Ureal3);
! 
!       procedure Set_Ureal18 (N : Node_Id; Val : Ureal);
!       pragma Inline (Set_Ureal18);
! 
!       procedure Set_Ureal21 (N : Node_Id; Val : Ureal);
!       pragma Inline (Set_Ureal21);
! 
!       procedure Set_Flag0 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag0);
! 
!       procedure Set_Flag1 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag1);
! 
!       procedure Set_Flag2 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag2);
! 
!       procedure Set_Flag3 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag3);
! 
!       procedure Set_Flag4 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag4);
! 
!       procedure Set_Flag5 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag5);
! 
!       procedure Set_Flag6 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag6);
! 
!       procedure Set_Flag7 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag7);
! 
!       procedure Set_Flag8 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag8);
! 
!       procedure Set_Flag9 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag9);
! 
!       procedure Set_Flag10 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag10);
! 
!       procedure Set_Flag11 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag11);
! 
!       procedure Set_Flag12 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag12);
! 
!       procedure Set_Flag13 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag13);
! 
!       procedure Set_Flag14 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag14);
! 
!       procedure Set_Flag15 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag15);
! 
!       procedure Set_Flag16 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag16);
! 
!       procedure Set_Flag17 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag17);
! 
!       procedure Set_Flag18 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag18);
! 
!       procedure Set_Flag19 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag19);
! 
!       procedure Set_Flag20 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag20);
! 
!       procedure Set_Flag21 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag21);
! 
!       procedure Set_Flag22 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag22);
! 
!       procedure Set_Flag23 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag23);
! 
!       procedure Set_Flag24 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag24);
! 
!       procedure Set_Flag25 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag25);
! 
!       procedure Set_Flag26 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag26);
! 
!       procedure Set_Flag27 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag27);
! 
!       procedure Set_Flag28 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag28);
! 
!       procedure Set_Flag29 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag29);
! 
!       procedure Set_Flag30 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag30);
! 
!       procedure Set_Flag31 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag31);
! 
!       procedure Set_Flag32 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag32);
! 
!       procedure Set_Flag33 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag33);
! 
!       procedure Set_Flag34 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag34);
! 
!       procedure Set_Flag35 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag35);
! 
!       procedure Set_Flag36 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag36);
! 
!       procedure Set_Flag37 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag37);
! 
!       procedure Set_Flag38 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag38);
! 
!       procedure Set_Flag39 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag39);
! 
!       procedure Set_Flag40 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag40);
! 
!       procedure Set_Flag41 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag41);
! 
!       procedure Set_Flag42 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag42);
! 
!       procedure Set_Flag43 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag43);
! 
!       procedure Set_Flag44 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag44);
! 
!       procedure Set_Flag45 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag45);
! 
!       procedure Set_Flag46 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag46);
! 
!       procedure Set_Flag47 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag47);
! 
!       procedure Set_Flag48 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag48);
! 
!       procedure Set_Flag49 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag49);
! 
!       procedure Set_Flag50 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag50);
! 
!       procedure Set_Flag51 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag51);
! 
!       procedure Set_Flag52 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag52);
! 
!       procedure Set_Flag53 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag53);
! 
!       procedure Set_Flag54 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag54);
! 
!       procedure Set_Flag55 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag55);
! 
!       procedure Set_Flag56 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag56);
! 
!       procedure Set_Flag57 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag57);
! 
!       procedure Set_Flag58 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag58);
! 
!       procedure Set_Flag59 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag59);
! 
!       procedure Set_Flag60 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag60);
! 
!       procedure Set_Flag61 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag61);
! 
!       procedure Set_Flag62 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag62);
! 
!       procedure Set_Flag63 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag63);
! 
!       procedure Set_Flag64 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag64);
! 
!       procedure Set_Flag65 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag65);
! 
!       procedure Set_Flag66 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag66);
! 
!       procedure Set_Flag67 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag67);
! 
!       procedure Set_Flag68 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag68);
! 
!       procedure Set_Flag69 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag69);
! 
!       procedure Set_Flag70 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag70);
! 
!       procedure Set_Flag71 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag71);
! 
!       procedure Set_Flag72 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag72);
! 
!       procedure Set_Flag73 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag73);
! 
!       procedure Set_Flag74 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag74);
! 
!       procedure Set_Flag75 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag75);
! 
!       procedure Set_Flag76 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag76);
! 
!       procedure Set_Flag77 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag77);
! 
!       procedure Set_Flag78 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag78);
! 
!       procedure Set_Flag79 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag79);
! 
!       procedure Set_Flag80 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag80);
! 
!       procedure Set_Flag81 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag81);
! 
!       procedure Set_Flag82 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag82);
! 
!       procedure Set_Flag83 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag83);
! 
!       procedure Set_Flag84 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag84);
! 
!       procedure Set_Flag85 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag85);
! 
!       procedure Set_Flag86 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag86);
! 
!       procedure Set_Flag87 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag87);
! 
!       procedure Set_Flag88 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag88);
! 
!       procedure Set_Flag89 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag89);
! 
!       procedure Set_Flag90 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag90);
! 
!       procedure Set_Flag91 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag91);
! 
!       procedure Set_Flag92 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag92);
! 
!       procedure Set_Flag93 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag93);
! 
!       procedure Set_Flag94 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag94);
! 
!       procedure Set_Flag95 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag95);
! 
!       procedure Set_Flag96 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag96);
! 
!       procedure Set_Flag97 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag97);
! 
!       procedure Set_Flag98 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag98);
! 
!       procedure Set_Flag99 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag99);
! 
!       procedure Set_Flag100 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag100);
! 
!       procedure Set_Flag101 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag101);
! 
!       procedure Set_Flag102 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag102);
! 
!       procedure Set_Flag103 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag103);
! 
!       procedure Set_Flag104 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag104);
! 
!       procedure Set_Flag105 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag105);
! 
!       procedure Set_Flag106 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag106);
! 
!       procedure Set_Flag107 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag107);
! 
!       procedure Set_Flag108 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag108);
! 
!       procedure Set_Flag109 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag109);
! 
!       procedure Set_Flag110 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag110);
! 
!       procedure Set_Flag111 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag111);
! 
!       procedure Set_Flag112 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag112);
! 
!       procedure Set_Flag113 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag113);
! 
!       procedure Set_Flag114 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag114);
! 
!       procedure Set_Flag115 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag115);
! 
!       procedure Set_Flag116 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag116);
! 
!       procedure Set_Flag117 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag117);
! 
!       procedure Set_Flag118 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag118);
! 
!       procedure Set_Flag119 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag119);
! 
!       procedure Set_Flag120 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag120);
! 
!       procedure Set_Flag121 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag121);
! 
!       procedure Set_Flag122 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag122);
! 
!       procedure Set_Flag123 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag123);
! 
!       procedure Set_Flag124 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag124);
! 
!       procedure Set_Flag125 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag125);
! 
!       procedure Set_Flag126 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag126);
! 
!       procedure Set_Flag127 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag127);
! 
!       procedure Set_Flag128 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag128);
! 
!       procedure Set_Flag129 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag129);
! 
!       procedure Set_Flag130 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag130);
! 
!       procedure Set_Flag131 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag131);
! 
!       procedure Set_Flag132 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag132);
! 
!       procedure Set_Flag133 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag133);
! 
!       procedure Set_Flag134 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag134);
! 
!       procedure Set_Flag135 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag135);
! 
!       procedure Set_Flag136 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag136);
! 
!       procedure Set_Flag137 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag137);
! 
!       procedure Set_Flag138 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag138);
! 
!       procedure Set_Flag139 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag139);
! 
!       procedure Set_Flag140 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag140);
! 
!       procedure Set_Flag141 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag141);
! 
!       procedure Set_Flag142 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag142);
! 
!       procedure Set_Flag143 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag143);
! 
!       procedure Set_Flag144 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag144);
! 
!       procedure Set_Flag145 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag145);
! 
!       procedure Set_Flag146 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag146);
! 
!       procedure Set_Flag147 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag147);
! 
!       procedure Set_Flag148 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag148);
! 
!       procedure Set_Flag149 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag149);
! 
!       procedure Set_Flag150 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag150);
! 
!       procedure Set_Flag151 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag151);
! 
!       procedure Set_Flag152 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag152);
! 
!       procedure Set_Flag153 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag153);
! 
!       procedure Set_Flag154 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag154);
! 
!       procedure Set_Flag155 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag155);
! 
!       procedure Set_Flag156 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag156);
! 
!       procedure Set_Flag157 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag157);
! 
!       procedure Set_Flag158 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag158);
! 
!       procedure Set_Flag159 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag159);
! 
!       procedure Set_Flag160 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag160);
! 
!       procedure Set_Flag161 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag161);
! 
!       procedure Set_Flag162 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag162);
! 
!       procedure Set_Flag163 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag163);
! 
!       procedure Set_Flag164 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag164);
! 
!       procedure Set_Flag165 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag165);
! 
!       procedure Set_Flag166 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag166);
! 
!       procedure Set_Flag167 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag167);
! 
!       procedure Set_Flag168 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag168);
! 
!       procedure Set_Flag169 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag169);
! 
!       procedure Set_Flag170 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag170);
! 
!       procedure Set_Flag171 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag171);
! 
!       procedure Set_Flag172 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag172);
! 
!       procedure Set_Flag173 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag173);
! 
!       procedure Set_Flag174 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag174);
! 
!       procedure Set_Flag175 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag175);
! 
!       procedure Set_Flag176 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag176);
! 
!       procedure Set_Flag177 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag177);
! 
!       procedure Set_Flag178 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag178);
! 
!       procedure Set_Flag179 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag179);
! 
!       procedure Set_Flag180 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag180);
! 
!       procedure Set_Flag181 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag181);
! 
!       procedure Set_Flag182 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag182);
! 
!       procedure Set_Flag183 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag183);
! 
!       procedure Set_Flag184 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag184);
! 
!       procedure Set_Flag185 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag185);
! 
!       procedure Set_Flag186 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag186);
! 
!       procedure Set_Flag187 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag187);
! 
!       procedure Set_Flag188 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag188);
! 
!       procedure Set_Flag189 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag189);
! 
!       procedure Set_Flag190 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag190);
! 
!       procedure Set_Flag191 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag191);
! 
!       procedure Set_Flag192 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag192);
! 
!       procedure Set_Flag193 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag193);
! 
!       procedure Set_Flag194 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag194);
! 
!       procedure Set_Flag195 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag195);
! 
!       procedure Set_Flag196 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag196);
! 
!       procedure Set_Flag197 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag197);
! 
!       procedure Set_Flag198 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag198);
! 
!       procedure Set_Flag199 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag199);
! 
!       procedure Set_Flag200 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag200);
! 
!       procedure Set_Flag201 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag201);
! 
!       procedure Set_Flag202 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag202);
! 
!       procedure Set_Flag203 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag203);
! 
!       procedure Set_Flag204 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag204);
! 
!       procedure Set_Flag205 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag205);
! 
!       procedure Set_Flag206 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag206);
! 
!       procedure Set_Flag207 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag207);
! 
!       procedure Set_Flag208 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag208);
! 
!       procedure Set_Flag209 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag209);
! 
!       procedure Set_Flag210 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag210);
! 
!       procedure Set_Flag211 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag211);
! 
!       procedure Set_Flag212 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag212);
! 
!       procedure Set_Flag213 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag213);
! 
!       procedure Set_Flag214 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag214);
! 
!       procedure Set_Flag215 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag215);
! 
!       procedure Set_Flag216 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag216);
! 
!       procedure Set_Flag217 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag217);
! 
!       procedure Set_Flag218 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag218);
! 
!       procedure Set_Flag219 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag219);
! 
!       procedure Set_Flag220 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag220);
! 
!       procedure Set_Flag221 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag221);
! 
!       procedure Set_Flag222 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag222);
! 
!       procedure Set_Flag223 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag223);
! 
!       procedure Set_Flag224 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag224);
! 
!       procedure Set_Flag225 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag225);
! 
!       procedure Set_Flag226 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag226);
! 
!       procedure Set_Flag227 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag227);
! 
!       procedure Set_Flag228 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag228);
! 
!       procedure Set_Flag229 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag229);
! 
!       procedure Set_Flag230 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag230);
! 
!       procedure Set_Flag231 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag231);
! 
!       procedure Set_Flag232 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag232);
! 
!       procedure Set_Flag233 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag233);
! 
!       procedure Set_Flag234 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag234);
! 
!       procedure Set_Flag235 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag235);
! 
!       procedure Set_Flag236 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag236);
! 
!       procedure Set_Flag237 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag237);
! 
!       procedure Set_Flag238 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag238);
! 
!       procedure Set_Flag239 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag239);
! 
!       procedure Set_Flag240 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag240);
! 
!       procedure Set_Flag241 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag241);
! 
!       procedure Set_Flag242 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag242);
! 
!       procedure Set_Flag243 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag243);
! 
!       procedure Set_Flag244 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag244);
! 
!       procedure Set_Flag245 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag245);
! 
!       procedure Set_Flag246 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag246);
! 
!       procedure Set_Flag247 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag247);
! 
!       procedure Set_Flag248 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag248);
! 
!       procedure Set_Flag249 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag249);
! 
!       procedure Set_Flag250 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag250);
! 
!       procedure Set_Flag251 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag251);
! 
!       procedure Set_Flag252 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag252);
! 
!       procedure Set_Flag253 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag253);
! 
!       procedure Set_Flag254 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag254);
! 
!       procedure Set_Flag255 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag255);
! 
!       procedure Set_Flag256 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag256);
! 
!       procedure Set_Flag257 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag257);
! 
!       procedure Set_Flag258 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag258);
! 
!       procedure Set_Flag259 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag259);
! 
!       procedure Set_Flag260 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag260);
! 
!       procedure Set_Flag261 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag261);
! 
!       procedure Set_Flag262 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag262);
! 
!       procedure Set_Flag263 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag263);
! 
!       procedure Set_Flag264 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag264);
! 
!       procedure Set_Flag265 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag265);
! 
!       procedure Set_Flag266 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag266);
! 
!       procedure Set_Flag267 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag267);
! 
!       procedure Set_Flag268 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag268);
! 
!       procedure Set_Flag269 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag269);
! 
!       procedure Set_Flag270 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag270);
! 
!       procedure Set_Flag271 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag271);
! 
!       procedure Set_Flag272 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag272);
! 
!       procedure Set_Flag273 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag273);
! 
!       procedure Set_Flag274 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag274);
! 
!       procedure Set_Flag275 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag275);
! 
!       procedure Set_Flag276 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag276);
! 
!       procedure Set_Flag277 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag277);
! 
!       procedure Set_Flag278 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag278);
! 
!       procedure Set_Flag279 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag279);
! 
!       procedure Set_Flag280 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag280);
! 
!       procedure Set_Flag281 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag281);
! 
!       procedure Set_Flag282 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag282);
! 
!       procedure Set_Flag283 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag283);
! 
!       procedure Set_Flag284 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag284);
! 
!       procedure Set_Flag285 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag285);
! 
!       procedure Set_Flag286 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag286);
! 
!       procedure Set_Flag287 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag287);
! 
!       procedure Set_Flag288 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag288);
! 
!       procedure Set_Flag289 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag289);
! 
!       procedure Set_Flag290 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag290);
! 
!       procedure Set_Flag291 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag291);
! 
!       procedure Set_Flag292 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag292);
! 
!       procedure Set_Flag293 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag293);
! 
!       procedure Set_Flag294 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag294);
! 
!       procedure Set_Flag295 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag295);
! 
!       procedure Set_Flag296 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag296);
! 
!       procedure Set_Flag297 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag297);
! 
!       procedure Set_Flag298 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag298);
! 
!       procedure Set_Flag299 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag299);
! 
!       procedure Set_Flag300 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag300);
! 
!       procedure Set_Flag301 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag301);
! 
!       procedure Set_Flag302 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag302);
! 
!       procedure Set_Flag303 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag303);
! 
!       procedure Set_Flag304 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag304);
! 
!       procedure Set_Flag305 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag305);
! 
!       procedure Set_Flag306 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag306);
! 
!       procedure Set_Flag307 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag307);
! 
!       procedure Set_Flag308 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag308);
! 
!       procedure Set_Flag309 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag309);
! 
!       procedure Set_Flag310 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag310);
! 
!       procedure Set_Flag311 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag311);
! 
!       procedure Set_Flag312 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag312);
! 
!       procedure Set_Flag313 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag313);
! 
!       procedure Set_Flag314 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag314);
! 
!       procedure Set_Flag315 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag315);
! 
!       procedure Set_Flag316 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag316);
! 
!       procedure Set_Flag317 (N : Node_Id; Val : Boolean);
!       pragma Inline (Set_Flag317);
! 
!       --  The following versions of Set_Noden also set the parent pointer of
!       --  the referenced node if it is not Empty.
! 
!       procedure Set_Node1_With_Parent (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node1_With_Parent);
! 
!       procedure Set_Node2_With_Parent (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node2_With_Parent);
! 
!       procedure Set_Node3_With_Parent (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node3_With_Parent);
! 
!       procedure Set_Node4_With_Parent (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node4_With_Parent);
  
!       procedure Set_Node5_With_Parent (N : Node_Id; Val : Node_Id);
!       pragma Inline (Set_Node5_With_Parent);
  
!       --  The following versions of Set_Listn also set the parent pointer of
!       --  the referenced node if it is not Empty.
  
!       procedure Set_List1_With_Parent (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List1_With_Parent);
  
!       procedure Set_List2_With_Parent (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List2_With_Parent);
  
!       procedure Set_List3_With_Parent (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List3_With_Parent);
  
!       procedure Set_List4_With_Parent (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List4_With_Parent);
  
!       procedure Set_List5_With_Parent (N : Node_Id; Val : List_Id);
!       pragma Inline (Set_List5_With_Parent);
  
!    end Unchecked_Access;
  
     -----------------------------
     -- Private Part Subpackage --
--- 572,654 ----
     --
     --  Note: Parents are not preserved in original tree nodes that are
     --  retrieved in this way (i.e. their children may have children whose
!    --  Parent pointers reference some other node).
     --
     --  Note: there is no direct mechanism for deleting an original node (in
     --  a manner that can be reversed later). One possible approach is to use
     --  Rewrite to substitute a null statement for the node to be deleted.
  
!    ----------------------
!    -- Vanishing Fields --
!    ----------------------
  
!    --  The Nkind and Ekind fields are like Ada discriminants governing a
!    --  variant part. They determine which fields are present. If the Nkind
!    --  or Ekind fields are changed, then this can change which fields are
!    --  present. If a field is present for the old kind, but not for the
!    --  new kind, the field vanishes. This requires some care when changing
!    --  kinds, as described below. Note that Ada doesn't even allow direct
!    --  modification of a discriminant.
  
!    type Node_Field_Set is array (Node_Field) of Boolean with Pack;
  
!    type Entity_Field_Set is array (Entity_Field) of Boolean with Pack;
  
!    procedure Reinit_Field_To_Zero (N : Node_Id; Field : Node_Or_Entity_Field);
!    --  When a node is created, all fields are initialized to zero, even if zero
!    --  is not a valid value of the field type. This procedure puts the field
!    --  back to its initial zero value. Note that you can't just do something
!    --  like Set_Some_Field (N, 0), if Some_Field is of (say) type Uintp,
!    --  because Uintp is a subrange that does not include 0.
!    type Entity_Kind_Set is array (Entity_Kind) of Boolean with Pack;
!    procedure Reinit_Field_To_Zero
!      (N : Node_Id; Field : Entity_Field; Old_Ekind : Entity_Kind_Set);
!    procedure Reinit_Field_To_Zero
!      (N : Node_Id; Field : Entity_Field; Old_Ekind : Entity_Kind);
!    --  Same as above, but assert that the old Ekind is as specified. We might
!    --  want to get rid of these, but it's useful documentation while working on
!    --  this.
  
!    function Field_Is_Initial_Zero
!      (N : Node_Id; Field : Node_Or_Entity_Field) return Boolean;
!    --  True if the field value is the initial zero value
  
!    procedure Mutate_Nkind (N : Node_Id; Val : Node_Kind) with Inline;
!    --  There is no Set_Nkind in Sinfo.Nodes. We use this instead. This is here,
!    --  and has a different name, because it does some extra checking. Nkind is
!    --  like a discriminant, in that it controls which fields exist, and that
!    --  set of fields can be different for the new kind. Discriminants cannot be
!    --  modified in Ada for that reason. The rule here is more flexible: Nkind
!    --  can be modified. However, when Nkind is modified, fields that exist for
!    --  the old kind, but not for the new kind will vanish. We require that all
!    --  vanishing fields be set to their initial zero value before calling
!    --  Mutate_Nkind. This is necessary, because the memory occupied by the
!    --  vanishing fields might be used for totally unrelated fields in the new
!    --  node. See Reinit_Field_To_Zero.
  
!    procedure Mutate_Ekind
!      (N : Entity_Id; Val : Entity_Kind) with Inline;
!    --  Ekind is also like a discriminant, and is mostly treated as above (see
!    --  Mutate_Nkind). However, there are a few cases where we set the Ekind
!    --  from its initial E_Void value to something else, then set it back to
!    --  E_Void, then back to the something else, and we expect the "something
!    --  else" fields to retain their value. The two "something else"s are not
!    --  always the same; for example we change from E_Void, to E_Variable, to
!    --  E_Void, to E_Constant.
  
!    function Node_To_Fetch_From
!      (N : Node_Or_Entity_Id; Field : Node_Or_Entity_Field)
!      return Node_Or_Entity_Id is
!       (case Field_Descriptors (Field).Type_Only is
!          when No_Type_Only => N,
!          when Base_Type_Only => Base_Type (N),
!          when Impl_Base_Type_Only => Implementation_Base_Type (N),
!          when Root_Type_Only => Root_Type (N));
!    --  This is analogous to the same-named function in Gen_IL.Gen. Normally,
!    --  Type_Only is No_Type_Only, and we fetch the field from the node N. But
!    --  if Type_Only = Base_Type_Only, we need to go to the Base_Type, and
!    --  similarly for the other two cases. This can return something other
!    --  than N only if N is an Entity.
  
     -----------------------------
     -- Private Part Subpackage --
*************** package Atree is
*** 3650,3997 ****
  
     package Atree_Private_Part is
  
        -------------------------
        -- Tree Representation --
        -------------------------
  
!       --  The nodes of the tree are stored in a table (i.e. an array). In the
!       --  case of extended nodes six consecutive components in the array are
!       --  used. There are thus two formats for array components. One is used
!       --  for nonextended nodes, and for the first component of extended
!       --  nodes. The other is used for the extension parts (second, third,
!       --  fourth, fifth, and sixth components) of an extended node. A variant
!       --  record structure is used to distinguish the two formats.
! 
!       type Node_Record (Is_Extension : Boolean := False) is record
! 
!          --  Logically, the only field in the common part is the above
!          --  Is_Extension discriminant (a single bit). However, Gigi cannot
!          --  yet handle such a structure, so we fill out the common part of
!          --  the record with fields that are used in different ways for
!          --  normal nodes and node extensions.
! 
!          Pflag1, Pflag2 : Boolean;
!          --  The Paren_Count field is represented using two boolean flags,
!          --  where Pflag1 is worth 1, and Pflag2 is worth 2. This is done
!          --  because we need to be easily able to reuse this field for
!          --  extra flags in the extended node case.
! 
!          In_List : Boolean;
!          --  Flag used to indicate if node is a member of a list.
!          --  This field is considered private to the Atree package.
! 
!          Has_Aspects : Boolean;
!          --  Flag used to indicate that a node has aspect specifications that
!          --  are associated with the node. See Aspects package for details.
! 
!          Rewrite_Ins : Boolean;
!          --  Flag set by Mark_Rewrite_Insertion procedure.
!          --  This field is considered private to the Atree package.
! 
!          Analyzed : Boolean;
!          --  Flag to indicate the node has been analyzed (and expanded)
! 
!          Comes_From_Source : Boolean;
!          --  Flag to indicate that node comes from the source program (i.e.
!          --  was built by the parser or scanner, not the analyzer or expander).
! 
!          Error_Posted : Boolean;
!          --  Flag to indicate that an error message has been posted on the
!          --  node (to avoid duplicate flags on the same node)
! 
!          Flag4  : Boolean;
!          Flag5  : Boolean;
!          Flag6  : Boolean;
!          Flag7  : Boolean;
!          Flag8  : Boolean;
!          Flag9  : Boolean;
!          Flag10 : Boolean;
!          Flag11 : Boolean;
!          Flag12 : Boolean;
!          Flag13 : Boolean;
!          Flag14 : Boolean;
!          Flag15 : Boolean;
!          Flag16 : Boolean;
!          Flag17 : Boolean;
!          Flag18 : Boolean;
!          --  Flags 4-18 for a normal node. Note that Flags 0-3 are stored
!          --  separately in the Flags array.
! 
!          --  The above fields are used as follows in components 2-6 of an
!          --  extended node entry. Currently they are not used in component 7,
!          --  since for now we have all the flags we need, but of course they
!          --  can be used for additional flags when needed in component 7.
! 
!          --    In_List           used as Flag19,Flag40,Flag129,Flag216,Flag287
!          --    Has_Aspects       used as Flag20,Flag41,Flag130,Flag217,Flag288
!          --    Rewrite_Ins       used as Flag21,Flag42,Flag131,Flag218,Flag289
!          --    Analyzed          used as Flag22,Flag43,Flag132,Flag219,Flag290
!          --    Comes_From_Source used as Flag23,Flag44,Flag133,Flag220,Flag291
!          --    Error_Posted      used as Flag24,Flag45,Flag134,Flag221,Flag292
!          --    Flag4             used as Flag25,Flag46,Flag135,Flag222,Flag293
!          --    Flag5             used as Flag26,Flag47,Flag136,Flag223,Flag294
!          --    Flag6             used as Flag27,Flag48,Flag137,Flag224,Flag295
!          --    Flag7             used as Flag28,Flag49,Flag138,Flag225,Flag296
!          --    Flag8             used as Flag29,Flag50,Flag139,Flag226,Flag297
!          --    Flag9             used as Flag30,Flag51,Flag140,Flag227,Flag298
!          --    Flag10            used as Flag31,Flag52,Flag141,Flag228,Flag299
!          --    Flag11            used as Flag32,Flag53,Flag142,Flag229,Flag300
!          --    Flag12            used as Flag33,Flag54,Flag143,Flag230,Flag301
!          --    Flag13            used as Flag34,Flag55,Flag144,Flag231,Flag302
!          --    Flag14            used as Flag35,Flag56,Flag145,Flag232,Flag303
!          --    Flag15            used as Flag36,Flag57,Flag146,Flag233,Flag304
!          --    Flag16            used as Flag37,Flag58,Flag147,Flag234,Flag305
!          --    Flag17            used as Flag38,Flag59,Flag148,Flag235,Flag306
!          --    Flag18            used as Flag39,Flag60,Flag149,Flag236,Flag307
!          --    Pflag1            used as Flag61,Flag62,Flag150,Flag237,Flag308
!          --    Pflag2            used as Flag63,Flag64,Flag151,Flag238,Flag309
  
!          Nkind : Node_Kind;
!          --  For a nonextended node, or the initial section of an extended
!          --  node, this field holds the Node_Kind value. For an extended node,
!          --  The Nkind field is used as follows:
!          --
!          --     Second entry:  holds the Ekind field of the entity
!          --     Third entry:   holds 8 additional flags (Flag65-Flag72)
!          --     Fourth entry:  holds 8 additional flags (Flag239-246)
!          --     Fifth entry:   holds 8 additional flags (Flag247-254)
!          --     Sixth entry:   holds 8 additional flags (Flag310-317)
!          --     Seventh entry: currently unused
  
!          --  Now finally (on a 32-bit boundary) comes the variant part
  
!          case Is_Extension is
  
!             --  Nonextended node, or first component of extended node
  
!             when False =>
  
!                Sloc : Source_Ptr;
!                --  Source location for this node
  
!                Link : Union_Id;
!                --  This field is used either as the Parent pointer (if In_List
!                --  is False), or to point to the list header (if In_List is
!                --  True). This field is considered private and can be modified
!                --  only by Atree or by Nlists.
  
!                Field1 : Union_Id;
!                Field2 : Union_Id;
!                Field3 : Union_Id;
!                Field4 : Union_Id;
!                Field5 : Union_Id;
!                --  Five general use fields, which can contain Node_Id, List_Id,
!                --  Elist_Id, String_Id, or Name_Id values depending on the
!                --  values in Nkind and (for extended nodes), in Ekind. See
!                --  packages Sinfo and Einfo for details of their use.
  
!             --  Extension (second component) of extended node
  
!             when True =>
  
!                Field6  : Union_Id;
!                Field7  : Union_Id;
!                Field8  : Union_Id;
!                Field9  : Union_Id;
!                Field10 : Union_Id;
!                Field11 : Union_Id;
!                Field12 : Union_Id;
!                --  Seven additional general fields available only for entities.
!                --  See package Einfo for details of their use (which depends
!                --  on the value in the Ekind field).
  
!             --  In the third component, the extension format as described
!             --  above is used to hold additional general fields and flags
!             --  as follows:
  
!             --    Field6-11      Holds Field13-Field18
!             --    Field12        Holds Flag73-Flag96 and Convention
  
!             --  In the fourth component, the extension format as described
!             --  above is used to hold additional general fields and flags
!             --  as follows:
  
!             --    Field6-10      Holds Field19-Field23
!             --    Field11        Holds Flag152-Flag183
!             --    Field12        Holds Flag97-Flag128
  
!             --  In the fifth component, the extension format as described
!             --  above is used to hold additional general fields and flags
!             --  as follows:
  
!             --    Field6-11      Holds Field24-Field29
!             --    Field12        Holds Flag184-Flag215
  
!             --  In the sixth component, the extension format as described
!             --  above is used to hold additional general fields and flags
!             --  as follows:
  
!             --    Field6-11      Holds Field30-Field35
!             --    Field12        Holds Flag255-Flag286
  
!             --  In the seventh component, the extension format as described
!             --  above is used to hold additional general fields as follows.
!             --  Flags are also available potentially, but not used now, as
!             --  we are not short of entity flags.
  
!             --    Field6-11     Holds Field36-Field41
  
!          end case;
!       end record; -- Node_Record
!       pragma Suppress_Initialization (Node_Record); -- see package Nodes below
  
!       pragma Pack (Node_Record);
!       for Node_Record'Size use 8 * 32;
!       for Node_Record'Alignment use 4;
  
!       function E_To_N is new Unchecked_Conversion (Entity_Kind, Node_Kind);
!       function N_To_E is new Unchecked_Conversion (Node_Kind, Entity_Kind);
  
!       --  Default value used to initialize default nodes. Note that some of the
!       --  fields get overwritten, and in particular, Nkind always gets reset.
  
!       Default_Node : constant Node_Record := (
!          Is_Extension      => False,
!          Pflag1            => False,
!          Pflag2            => False,
!          In_List           => False,
!          Has_Aspects       => False,
!          Rewrite_Ins       => False,
!          Analyzed          => False,
!          Comes_From_Source => False,
!          Error_Posted      => False,
!          Flag4             => False,
  
!          Flag5             => False,
!          Flag6             => False,
!          Flag7             => False,
!          Flag8             => False,
!          Flag9             => False,
!          Flag10            => False,
!          Flag11            => False,
!          Flag12            => False,
  
!          Flag13            => False,
!          Flag14            => False,
!          Flag15            => False,
!          Flag16            => False,
!          Flag17            => False,
!          Flag18            => False,
  
!          Nkind             => N_Unused_At_Start,
  
!          Sloc              => 0,
!          Link              => Empty_List_Or_Node,
!          Field1            => Empty_List_Or_Node,
!          Field2            => Empty_List_Or_Node,
!          Field3            => Empty_List_Or_Node,
!          Field4            => Empty_List_Or_Node,
!          Field5            => Empty_List_Or_Node);
  
!       --  Default value used to initialize node extensions (i.e. the second
!       --  through seventh components of an extended node). Note we are cheating
!       --  a bit here when it comes to Node12, which often holds flags and (for
!       --  the third component), the convention. But it works because Empty,
!       --  False, Convention_Ada, all happen to be all zero bits.
  
!       Default_Node_Extension : constant Node_Record := (
!          Is_Extension      => True,
!          Pflag1            => False,
!          Pflag2            => False,
!          In_List           => False,
!          Has_Aspects       => False,
!          Rewrite_Ins       => False,
!          Analyzed          => False,
!          Comes_From_Source => False,
!          Error_Posted      => False,
!          Flag4             => False,
  
!          Flag5             => False,
!          Flag6             => False,
!          Flag7             => False,
!          Flag8             => False,
!          Flag9             => False,
!          Flag10            => False,
!          Flag11            => False,
!          Flag12            => False,
  
!          Flag13            => False,
!          Flag14            => False,
!          Flag15            => False,
!          Flag16            => False,
!          Flag17            => False,
!          Flag18            => False,
  
!          Nkind             => E_To_N (E_Void),
  
!          Field6            => Empty_List_Or_Node,
!          Field7            => Empty_List_Or_Node,
!          Field8            => Empty_List_Or_Node,
!          Field9            => Empty_List_Or_Node,
!          Field10           => Empty_List_Or_Node,
!          Field11           => Empty_List_Or_Node,
!          Field12           => Empty_List_Or_Node);
  
!       --  The following defines the extendable array used for the nodes table.
!       --  Nodes with extensions use multiple consecutive entries in the array
!       --  (see Num_Extension_Nodes).
  
!       package Nodes is new Table.Table
!         (Table_Component_Type => Node_Record,
!          Table_Index_Type     => Node_Id'Base,
!          Table_Low_Bound      => First_Node_Id,
!          Table_Initial        => Alloc.Nodes_Initial,
!          Table_Increment      => Alloc.Nodes_Increment,
!          Release_Threshold    => Alloc.Nodes_Release_Threshold,
!          Table_Name           => "Nodes");
  
!       --  The following is a parallel table to Nodes, which provides 8 more
!       --  bits of space that logically belong to the corresponding node. This
!       --  is currently used to implement Flags 0,1,2,3 for normal nodes, or
!       --  the first component of an extended node (four bits unused). Entries
!       --  for extending components are completely unused.
  
!       type Flags_Byte is record
!          Flag0 : Boolean;
!          --  Note: we don't use Flag0 at the moment. To put Flag0 into use
!          --  requires some awkward work in Treeprs (treeprs.adt), so for the
!          --  moment we don't use it.
  
!          Flag1 : Boolean;
!          Flag2 : Boolean;
!          Flag3 : Boolean;
!          --  These flags are used in the usual manner in Sinfo and Einfo
  
!          --  The flags listed below use explicit names because following the
!          --  FlagXXX convention would mean reshuffling of over 300+ flags.
  
!          Check_Actuals : Boolean;
!          --  Flag set to indicate that the marked node is subject to the check
!          --  for writable actuals.
  
!          Is_Ignored_Ghost_Node : Boolean;
!          --  Flag denoting whether the node is subject to pragma Ghost with
!          --  policy Ignore.
  
!          Spare2 : Boolean;
!          Spare3 : Boolean;
!       end record;
  
!       for Flags_Byte'Size use 8;
!       pragma Pack (Flags_Byte);
  
!       Default_Flags : constant Flags_Byte := (others => False);
!       --  Default value used to initialize new entries
  
!       package Flags is new Table.Table (
!         Table_Component_Type => Flags_Byte,
!         Table_Index_Type     => Node_Id'Base,
!         Table_Low_Bound      => First_Node_Id,
!         Table_Initial        => Alloc.Nodes_Initial,
!         Table_Increment      => Alloc.Nodes_Increment,
!         Release_Threshold    => Alloc.Nodes_Release_Threshold,
!         Table_Name           => "Flags");
  
!    end Atree_Private_Part;
  
  end Atree;
--- 662,931 ----
  
     package Atree_Private_Part is
  
+       pragma Assert (Node_Kind'Pos (N_Unused_At_Start) = 0);
+       pragma Assert (Empty_List_Or_Node = 0);
+       pragma Assert (Entity_Kind'Pos (E_Void) = 0);
+       --  We want nodes initialized to zero bits by default
+ 
        -------------------------
        -- Tree Representation --
        -------------------------
  
!       --  The nodes of the tree are stored in two tables (i.e. growable
!       --  arrays).
  
!       --  A Node_Id points to an element of Node_Offsets, which contains a
!       --  Field_Offset that points to an element of Slots. Each slot can
!       --  contain a single 32-bit field, or multiple smaller fields.
!       --  An n-bit field is aligned on an n-bit boundary. The size of a node is
!       --  the number of slots, which can range from 1 up to however many are
!       --  needed.
!       --
!       --  The reason for the extra level of indirection is that Copy_Node,
!       --  Exchange_Entities, and Rewrite all assume that nodes can be modified
!       --  in place.
!       --
!       --  As an optimization, we store a few slots directly in the Node_Offsets
!       --  table (see type Node_Header) rather than requiring the extra level of
!       --  indirection for accessing those slots. N_Head is the number of slots
!       --  stored in the Node_Header. N_Head can be adjusted by modifying
!       --  Gen_IL.Gen. If N_Head is (say) 3, then a node containing 7 slots will
!       --  have slots 0..2 in the header, and 3..6 stored indirect in the Slots
!       --  table. We use zero-origin addressing, so the Offset into the Slots
!       --  table will point 3 slots before slot 3.
  
!       pragma Assert (N_Head <= Min_Node_Size);
!       pragma Assert (N_Head <= Min_Entity_Size);
  
!       Slot_Size : constant := 32;
!       type Slot is mod 2**Slot_Size;
!       for Slot'Size use Slot_Size;
  
!       --  The type Slot is defined in Types as a 32-bit modular integer. It
!       --  is logically split into the appropriate numbers of components of
!       --  appropriate size, but this splitting is not explicit because packed
!       --  arrays cannot be properly interfaced in C/C++ and packed records are
!       --  way too slow.
  
!       type Node_Header_Slots is
!         array (Field_Offset range 0 .. N_Head - 1) of Slot;
!       type Node_Header is record
!          Slots : Node_Header_Slots;
!          Offset : Node_Offset'Base;
!       end record;
!       pragma Assert (Node_Header'Size = (N_Head + 1) * Slot_Size);
!       pragma Assert (Node_Header'Size = 16 * 8);
  
!       package Node_Offsets is new Table.Table
!         (Table_Component_Type => Node_Header,
!          Table_Index_Type     => Node_Id'Base,
!          Table_Low_Bound      => First_Node_Id,
!          Table_Initial        => Alloc.Node_Offsets_Initial,
!          Table_Increment      => Alloc.Node_Offsets_Increment,
!          Table_Name           => "Node_Offsets");
  
!       Noff : Node_Offsets.Table_Ptr renames Node_Offsets.Table with
!         Unreferenced;
!       function Nlast return Node_Id'Base renames Node_Offsets.Last with
!         Unreferenced;
!       --  Short names for use in gdb, not used in real code. Note that gdb
!       --  can't find Node_Offsets.Table without a full expanded name.
  
!       function Shift_Left (S : Slot; V : Natural) return Slot;
!       pragma Import (Intrinsic, Shift_Left);
  
!       function Shift_Right (S : Slot; V : Natural) return Slot;
!       pragma Import (Intrinsic, Shift_Right);
  
!       --  Low-level types for fields of the various supported sizes.
!       --  All fields are a power of 2 number of bits, and are aligned
!       --  to that number of bits:
  
!       type Field_Size_1_Bit  is mod 2**1;
!       type Field_Size_2_Bit  is mod 2**2;
!       type Field_Size_4_Bit  is mod 2**4;
!       type Field_Size_8_Bit  is mod 2**8;
!       type Field_Size_32_Bit is mod 2**32;
  
!       Slots_Low_Bound : constant Field_Offset := Field_Offset'First + 1;
  
!       package Slots is new Table.Table
!         (Table_Component_Type => Slot,
!          Table_Index_Type     => Node_Offset'Base,
!          Table_Low_Bound      => Slots_Low_Bound,
!          Table_Initial        => Alloc.Slots_Initial,
!          Table_Increment      => Alloc.Slots_Increment,
!          Table_Name           => "Slots");
!       --  Note that Table_Low_Bound is set such that if we try to access
!       --  Slots.Table (0), we will get Constraint_Error.
  
!       Slts : Slots.Table_Ptr renames Slots.Table with
!         Unreferenced;
!       function Slast return Node_Offset'Base renames Slots.Last with
!         Unreferenced;
!       --  Short names for use in gdb, not used in real code. Note that gdb
!       --  can't find Slots.Table without a full expanded name.
  
!       function Alloc_Node_Id return Node_Id with Inline;
  
!       function Alloc_Slots (Num_Slots : Slot_Count) return Node_Offset
!         with Inline;
!       --  Allocate the slots for a node in the Slots table
  
!       --  Each of the following Get_N_Bit_Field functions fetches the field of
!       --  the given Field_Type at the given offset. Field_Type'Size must be N.
!       --  The offset is measured in units of Field_Type'Size. Likewise for the
!       --  Set_N_Bit_Field procedures. These are instantiated in Sinfo.Nodes and
!       --  Einfo.Entities for the various possible Field_Types (Flag, Node_Id,
!       --  Uint, etc).
  
!       generic
!          type Field_Type is private;
!       function Get_1_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!          with Inline;
  
!       generic
!          type Field_Type is private;
!       function Get_2_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!          with Inline;
  
!       generic
!          type Field_Type is private;
!       function Get_4_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!          with Inline;
  
!       generic
!          type Field_Type is private;
!       function Get_8_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!          with Inline;
  
!       generic
!          type Field_Type is private;
!       function Get_32_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!          with Inline;
  
!       generic
!          type Field_Type is private;
!          Default_Val : Field_Type;
!       function Get_32_Bit_Field_With_Default
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!          with Inline;
!       --  If the field has not yet been set, return Default_Val
  
!       generic
!          type Field_Type is private;
!       function Get_Valid_32_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Type
!          with Inline;
!       --  Assert that the field has already been set. This is currently used
!       --  only for Uints, but could be used more generally.
  
!       generic
!          type Field_Type is private;
!       procedure Set_1_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Type)
!          with Inline;
  
!       generic
!          type Field_Type is private;
!       procedure Set_2_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Type)
!          with Inline;
  
!       generic
!          type Field_Type is private;
!       procedure Set_4_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Type)
!          with Inline;
  
!       generic
!          type Field_Type is private;
!       procedure Set_8_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Type)
!          with Inline;
  
!       generic
!          type Field_Type is private;
!       procedure Set_32_Bit_Field
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Type)
!          with Inline;
  
!       --  The following are similar to the above generics, but are not generic,
!       --  and work with the low-level Field_n_bit types. If generics could be
!       --  overloaded, we would use the same names.
  
!       function Get_1_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Size_1_Bit
!          with Inline;
  
!       function Get_2_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Size_2_Bit
!          with Inline;
  
!       function Get_4_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Size_4_Bit
!          with Inline;
  
!       function Get_8_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Size_8_Bit
!          with Inline;
  
!       function Get_32_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset) return Field_Size_32_Bit
!          with Inline;
  
!       procedure Set_1_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Size_1_Bit)
!          with Inline;
  
!       procedure Set_2_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Size_2_Bit)
!          with Inline;
  
!       procedure Set_4_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Size_4_Bit)
!          with Inline;
  
!       procedure Set_8_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Size_8_Bit)
!          with Inline;
  
!       procedure Set_32_Bit_Val
!         (N : Node_Or_Entity_Id; Offset : Field_Offset; Val : Field_Size_32_Bit)
!          with Inline;
  
!       --  The following are used in "asserts on" mode to validate nodes; an
!       --  exception is raised if invalid node content is detected.
  
!       procedure Validate_Node (N : Node_Or_Entity_Id);
!       --  Validate for reading
!       procedure Validate_Node_Write (N : Node_Or_Entity_Id);
!       --  Validate for writing
  
!       function Is_Valid_Node (U : Union_Id) return Boolean;
!       --  True if U is within the range of Node_Offsets
  
!       procedure Print_Atree_Info (N : Node_Or_Entity_Id);
!       --  Called from Treepr to print out information about N that is private
!       --  to Atree.
  
!    end Atree_Private_Part;
  
!    --  Statistics:
  
!    subtype Call_Count is Nat_64;
!    Get_Count, Set_Count : array (Node_Or_Entity_Field) of Call_Count :=
!      (others => 0);
!    --  Number of calls to each getter and setter. See documentaton for
!    --  -gnatd.A.
  
!    Get_Original_Node_Count, Set_Original_Node_Count : Call_Count := 0;
  
!    procedure Print_Statistics;
  
  end Atree;
diff -Nrcpad gcc-11.3.0/gcc/ada/atree.h gcc-12.1.0/gcc/ada/atree.h
*** gcc-11.3.0/gcc/ada/atree.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/atree.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
***************
*** 35,395 ****
  extern "C" {
  #endif
  
- /* Structure used for the first part of the node in the case where we have
-    an Nkind.  */
- 
- struct NFK
- {
-   Boolean      is_extension  :  1;
-   Boolean      pflag1        :  1;
-   Boolean      pflag2        :  1;
-   Boolean      in_list       :  1;
-   Boolean      has_aspects   :  1;
-   Boolean      rewrite_ins   :  1;
-   Boolean      analyzed      :  1;
-   Boolean      c_f_s	     :  1;
-   Boolean      error_posted  :  1;
- 
-   Boolean      flag4  :  1;
-   Boolean      flag5  :  1;
-   Boolean      flag6  :  1;
-   Boolean      flag7  :  1;
-   Boolean      flag8  :  1;
-   Boolean      flag9  :  1;
-   Boolean      flag10 :  1;
- 
-   Boolean      flag11 :  1;
-   Boolean      flag12 :  1;
-   Boolean      flag13 :  1;
-   Boolean      flag14 :  1;
-   Boolean      flag15 :  1;
-   Boolean      flag16 :  1;
-   Boolean      flag17 :  1;
-   Boolean      flag18 :  1;
- 
-   unsigned char kind;
- };
- 
- /* Structure for the first part of a node when Nkind is not present by
-    extra flag bits are.  */
- 
- struct NFNK
- {
-   Boolean      is_extension  :  1;
-   Boolean      pflag1        :  1;
-   Boolean      pflag2        :  1;
-   Boolean      in_list       :  1;
-   Boolean      has_aspects   :  1;
-   Boolean      rewrite_ins   :  1;
-   Boolean      analyzed      :  1;
-   Boolean      c_f_s	     :  1;
-   Boolean      error_posted  :  1;
- 
-   Boolean      flag4  :  1;
-   Boolean      flag5  :  1;
-   Boolean      flag6  :  1;
-   Boolean      flag7  :  1;
-   Boolean      flag8  :  1;
-   Boolean      flag9  :  1;
-   Boolean      flag10 :  1;
- 
-   Boolean      flag11 :  1;
-   Boolean      flag12 :  1;
-   Boolean      flag13 :  1;
-   Boolean      flag14 :  1;
-   Boolean      flag15 :  1;
-   Boolean      flag16 :  1;
-   Boolean      flag17 :  1;
-   Boolean      flag18 :  1;
- 
-   Boolean      flag65 :  1;
-   Boolean      flag66 :  1;
-   Boolean      flag67 :  1;
-   Boolean      flag68 :  1;
-   Boolean      flag69 :  1;
-   Boolean      flag70 :  1;
-   Boolean      flag71 :  1;
-   Boolean      flag72 :  1;
- };
- 
- /* Structure used for extra flags in third component overlaying Field12 */
- struct Flag_Word
- {
-   Boolean      flag73	    :  1;
-   Boolean      flag74	    :  1;
-   Boolean      flag75	    :  1;
-   Boolean      flag76	    :  1;
-   Boolean      flag77	    :  1;
-   Boolean      flag78	    :  1;
-   Boolean      flag79	    :  1;
-   Boolean      flag80	    :  1;
-   Boolean      flag81	    :  1;
-   Boolean      flag82	    :  1;
-   Boolean      flag83	    :  1;
-   Boolean      flag84	    :  1;
-   Boolean      flag85	    :  1;
-   Boolean      flag86	    :  1;
-   Boolean      flag87	    :  1;
-   Boolean      flag88	    :  1;
-   Boolean      flag89	    :  1;
-   Boolean      flag90	    :  1;
-   Boolean      flag91	    :  1;
-   Boolean      flag92	    :  1;
-   Boolean      flag93	    :  1;
-   Boolean      flag94	    :  1;
-   Boolean      flag95	    :  1;
-   Boolean      flag96	    :  1;
-   Byte         convention   :  8;
- };
- 
- /* Structure used for extra flags in fourth component overlaying Field12 */
- struct Flag_Word2
- {
-   Boolean      flag97	    :  1;
-   Boolean      flag98	    :  1;
-   Boolean      flag99	    :  1;
-   Boolean      flag100	    :  1;
-   Boolean      flag101	    :  1;
-   Boolean      flag102	    :  1;
-   Boolean      flag103	    :  1;
-   Boolean      flag104	    :  1;
-   Boolean      flag105	    :  1;
-   Boolean      flag106	    :  1;
-   Boolean      flag107	    :  1;
-   Boolean      flag108	    :  1;
-   Boolean      flag109	    :  1;
-   Boolean      flag110	    :  1;
-   Boolean      flag111	    :  1;
-   Boolean      flag112	    :  1;
-   Boolean      flag113	    :  1;
-   Boolean      flag114	    :  1;
-   Boolean      flag115	    :  1;
-   Boolean      flag116	    :  1;
-   Boolean      flag117	    :  1;
-   Boolean      flag118	    :  1;
-   Boolean      flag119	    :  1;
-   Boolean      flag120	    :  1;
-   Boolean      flag121	    :  1;
-   Boolean      flag122	    :  1;
-   Boolean      flag123	    :  1;
-   Boolean      flag124	    :  1;
-   Boolean      flag125	    :  1;
-   Boolean      flag126	    :  1;
-   Boolean      flag127	    :  1;
-   Boolean      flag128	    :  1;
- };
- 
- /* Structure used for extra flags in fourth component overlaying Field11 */
- struct Flag_Word3
- {
-   Boolean      flag152	    :  1;
-   Boolean      flag153	    :  1;
-   Boolean      flag154	    :  1;
-   Boolean      flag155	    :  1;
-   Boolean      flag156	    :  1;
-   Boolean      flag157	    :  1;
-   Boolean      flag158	    :  1;
-   Boolean      flag159	    :  1;
- 
-   Boolean      flag160	    :  1;
-   Boolean      flag161	    :  1;
-   Boolean      flag162	    :  1;
-   Boolean      flag163	    :  1;
-   Boolean      flag164	    :  1;
-   Boolean      flag165	    :  1;
-   Boolean      flag166	    :  1;
-   Boolean      flag167	    :  1;
- 
-   Boolean      flag168	    :  1;
-   Boolean      flag169	    :  1;
-   Boolean      flag170	    :  1;
-   Boolean      flag171	    :  1;
-   Boolean      flag172	    :  1;
-   Boolean      flag173	    :  1;
-   Boolean      flag174	    :  1;
-   Boolean      flag175	    :  1;
- 
-   Boolean      flag176	    :  1;
-   Boolean      flag177	    :  1;
-   Boolean      flag178	    :  1;
-   Boolean      flag179	    :  1;
-   Boolean      flag180	    :  1;
-   Boolean      flag181	    :  1;
-   Boolean      flag182	    :  1;
-   Boolean      flag183	    :  1;
- };
- 
- /* Structure used for extra flags in fifth component overlaying Field12 */
- struct Flag_Word4
- {
-   Boolean      flag184	    :  1;
-   Boolean      flag185	    :  1;
-   Boolean      flag186	    :  1;
-   Boolean      flag187	    :  1;
-   Boolean      flag188	    :  1;
-   Boolean      flag189	    :  1;
-   Boolean      flag190	    :  1;
-   Boolean      flag191	    :  1;
- 
-   Boolean      flag192	    :  1;
-   Boolean      flag193	    :  1;
-   Boolean      flag194	    :  1;
-   Boolean      flag195	    :  1;
-   Boolean      flag196	    :  1;
-   Boolean      flag197	    :  1;
-   Boolean      flag198	    :  1;
-   Boolean      flag199	    :  1;
- 
-   Boolean      flag200	    :  1;
-   Boolean      flag201	    :  1;
-   Boolean      flag202	    :  1;
-   Boolean      flag203	    :  1;
-   Boolean      flag204	    :  1;
-   Boolean      flag205	    :  1;
-   Boolean      flag206	    :  1;
-   Boolean      flag207	    :  1;
- 
-   Boolean      flag208      :  1;
-   Boolean      flag209	    :  1;
-   Boolean      flag210	    :  1;
-   Boolean      flag211	    :  1;
-   Boolean      flag212	    :  1;
-   Boolean      flag213	    :  1;
-   Boolean      flag214	    :  1;
-   Boolean      flag215	    :  1;
- };
- 
- /* Structure used for extra flags in sixth component overlaying Field12 */
- struct Flag_Word5
- {
-   Boolean      flag255	    :  1;
-   Boolean      flag256	    :  1;
-   Boolean      flag257	    :  1;
-   Boolean      flag258	    :  1;
-   Boolean      flag259	    :  1;
-   Boolean      flag260	    :  1;
-   Boolean      flag261	    :  1;
-   Boolean      flag262	    :  1;
- 
-   Boolean      flag263	    :  1;
-   Boolean      flag264	    :  1;
-   Boolean      flag265	    :  1;
-   Boolean      flag266	    :  1;
-   Boolean      flag267	    :  1;
-   Boolean      flag268	    :  1;
-   Boolean      flag269	    :  1;
-   Boolean      flag270	    :  1;
- 
-   Boolean      flag271	    :  1;
-   Boolean      flag272	    :  1;
-   Boolean      flag273	    :  1;
-   Boolean      flag274	    :  1;
-   Boolean      flag275	    :  1;
-   Boolean      flag276	    :  1;
-   Boolean      flag277	    :  1;
-   Boolean      flag278	    :  1;
- 
-   Boolean      flag279      :  1;
-   Boolean      flag280	    :  1;
-   Boolean      flag281	    :  1;
-   Boolean      flag282	    :  1;
-   Boolean      flag283	    :  1;
-   Boolean      flag284	    :  1;
-   Boolean      flag285	    :  1;
-   Boolean      flag286	    :  1;
- };
- struct Non_Extended
- {
-   Source_Ptr   sloc;
-   Int	       link;
-   Int	       field1;
-   Int	       field2;
-   Int	       field3;
-   Int	       field4;
-   Int	       field5;
- };
- 
- /* The Following structure corresponds to variant with is_extension = True.  */
- struct Extended
- {
-   Int	       field6;
-   Int	       field7;
-   Int	       field8;
-   Int	       field9;
-   Int	       field10;
-   union
-     {
-       Int      field11;
-       struct   Flag_Word3 fw3;
-     } X;
- 
-   union
-     {
-       Int      field12;
-       struct   Flag_Word fw;
-       struct   Flag_Word2 fw2;
-       struct   Flag_Word4 fw4;
-       struct   Flag_Word5 fw5;
-     } U;
- };
- 
- /* A tree node itself.  */
- 
- struct Node
- {
-   union kind
-     {
-       struct NFK K;
-       struct NFNK NK;
-     } U;
- 
-   union variant
-     {
-       struct Non_Extended NX;
-       struct Extended EX;
-     } V;
- };
- 
- /* The actual tree is an array of nodes. The pointer to this array is passed
-    as a parameter to the tree transformer procedure and stored in the global
-    variable Nodes_Ptr after adjusting it by subtracting Node_First_Entry, so
-    that Node_Id values can be used as subscripts.  */
- extern struct Node *Nodes_Ptr;
- 
  #define Parent atree__parent
  extern Node_Id Parent (Node_Id);
  
  #define Original_Node atree__original_node
  extern Node_Id Original_Node (Node_Id);
  
! /* The auxiliary flags array which is allocated in parallel to Nodes */
! 
! struct Flags
! {
!     Boolean      Flag0  : 1;
!     Boolean      Flag1  : 1;
!     Boolean      Flag2  : 1;
!     Boolean      Flag3  : 1;
!     Boolean      Spare0 : 1;
!     Boolean      Spare1 : 1;
!     Boolean      Spare2 : 1;
!     Boolean      Spare3 : 1;
! };
! extern struct Flags *Flags_Ptr;
! 
! /* Overloaded Functions:
! 
!    These functions are overloaded in the original Ada source, but there is
!    only one corresponding C function, which works as described below.	*/
! 
! /* Type used for union of Node_Id, List_Id, Elist_Id. */
  typedef Int Tree_Id;
  
  /* These two functions can only be used for Node_Id and List_Id values and
     they work in the C version because Empty = No_List = 0.  */
  
! static Boolean No	(Tree_Id);
! static Boolean Present	(Tree_Id);
  
  INLINE Boolean
  No (Tree_Id N)
--- 35,54 ----
  extern "C" {
  #endif
  
  #define Parent atree__parent
  extern Node_Id Parent (Node_Id);
  
  #define Original_Node atree__original_node
  extern Node_Id Original_Node (Node_Id);
  
! /* Type used for union of Node_Id, List_Id, Elist_Id.  */
  typedef Int Tree_Id;
  
  /* These two functions can only be used for Node_Id and List_Id values and
     they work in the C version because Empty = No_List = 0.  */
  
! INLINE Boolean No (Tree_Id);
! INLINE Boolean Present (Tree_Id);
  
  INLINE Boolean
  No (Tree_Id N)
*************** No (Tree_Id N)
*** 400,896 ****
  INLINE Boolean
  Present (Tree_Id N)
  {
!   return N != Empty;
  }
  
- extern Node_Id Parent		(Tree_Id);
- 
  #define Current_Error_Node atree__current_error_node
  extern Node_Id Current_Error_Node;
  
- /* Node Access Functions:  */
- 
- #define Nkind(N)        ((Node_Kind) (Nodes_Ptr[(N) - First_Node_Id].U.K.kind))
- #define Ekind(N)        ((Entity_Kind) (Nodes_Ptr[N + 1].U.K.kind))
- #define Sloc(N)         (Nodes_Ptr[(N) - First_Node_Id].V.NX.sloc)
- #define Paren_Count(N)	(Nodes_Ptr[(N) - First_Node_Id].U.K.pflag1	\
- 			 + 2 * Nodes_Ptr[(N) - First_Node_Id].U.K.pflag2)
- 
- #define Field1(N)     (Nodes_Ptr[(N) - First_Node_Id].V.NX.field1)
- #define Field2(N)     (Nodes_Ptr[(N) - First_Node_Id].V.NX.field2)
- #define Field3(N)     (Nodes_Ptr[(N) - First_Node_Id].V.NX.field3)
- #define Field4(N)     (Nodes_Ptr[(N) - First_Node_Id].V.NX.field4)
- #define Field5(N)     (Nodes_Ptr[(N) - First_Node_Id].V.NX.field5)
- #define Field6(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].V.EX.field6)
- #define Field7(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].V.EX.field7)
- #define Field8(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].V.EX.field8)
- #define Field9(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].V.EX.field9)
- #define Field10(N)    (Nodes_Ptr[(N) - First_Node_Id + 1].V.EX.field10)
- #define Field11(N)    (Nodes_Ptr[(N) - First_Node_Id + 1].V.EX.X.field11)
- #define Field12(N)    (Nodes_Ptr[(N) - First_Node_Id + 1].V.EX.U.field12)
- #define Field13(N)    (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.field6)
- #define Field14(N)    (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.field7)
- #define Field15(N)    (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.field8)
- #define Field16(N)    (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.field9)
- #define Field17(N)    (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.field10)
- #define Field18(N)    (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.X.field11)
- #define Field19(N)    (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field6)
- #define Field20(N)    (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field7)
- #define Field21(N)    (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field8)
- #define Field22(N)    (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field9)
- #define Field23(N)    (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field10)
- #define Field24(N)    (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.field6)
- #define Field25(N)    (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.field7)
- #define Field26(N)    (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.field8)
- #define Field27(N)    (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.field9)
- #define Field28(N)    (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.field10)
- #define Field29(N)    (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.field11)
- #define Field30(N)    (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.field6)
- #define Field31(N)    (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.field7)
- #define Field32(N)    (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.field8)
- #define Field33(N)    (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.field9)
- #define Field34(N)    (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.field10)
- #define Field35(N)    (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.X.field11)
- #define Field36(N)    (Nodes_Ptr[(N) - First_Node_Id + 6].V.EX.field6)
- #define Field37(N)    (Nodes_Ptr[(N) - First_Node_Id + 6].V.EX.field7)
- #define Field38(N)    (Nodes_Ptr[(N) - First_Node_Id + 6].V.EX.field8)
- #define Field39(N)    (Nodes_Ptr[(N) - First_Node_Id + 6].V.EX.field9)
- #define Field40(N)    (Nodes_Ptr[(N) - First_Node_Id + 6].V.EX.field10)
- #define Field41(N)    (Nodes_Ptr[(N) - First_Node_Id + 6].V.EX.X.field11)
- 
- #define Node1(N)      Field1  (N)
- #define Node2(N)      Field2  (N)
- #define Node3(N)      Field3  (N)
- #define Node4(N)      Field4  (N)
- #define Node5(N)      Field5  (N)
- #define Node6(N)      Field6  (N)
- #define Node7(N)      Field7  (N)
- #define Node8(N)      Field8  (N)
- #define Node9(N)      Field9  (N)
- #define Node10(N)     Field10 (N)
- #define Node11(N)     Field11 (N)
- #define Node12(N)     Field12 (N)
- #define Node13(N)     Field13 (N)
- #define Node14(N)     Field14 (N)
- #define Node15(N)     Field15 (N)
- #define Node16(N)     Field16 (N)
- #define Node17(N)     Field17 (N)
- #define Node18(N)     Field18 (N)
- #define Node19(N)     Field19 (N)
- #define Node20(N)     Field20 (N)
- #define Node21(N)     Field21 (N)
- #define Node22(N)     Field22 (N)
- #define Node23(N)     Field23 (N)
- #define Node24(N)     Field24 (N)
- #define Node25(N)     Field25 (N)
- #define Node26(N)     Field26 (N)
- #define Node27(N)     Field27 (N)
- #define Node28(N)     Field28 (N)
- #define Node29(N)     Field29 (N)
- #define Node30(N)     Field30 (N)
- #define Node31(N)     Field31 (N)
- #define Node32(N)     Field32 (N)
- #define Node33(N)     Field33 (N)
- #define Node34(N)     Field34 (N)
- #define Node35(N)     Field35 (N)
- #define Node36(N)     Field36 (N)
- #define Node37(N)     Field37 (N)
- #define Node38(N)     Field38 (N)
- #define Node39(N)     Field39 (N)
- #define Node40(N)     Field40 (N)
- #define Node41(N)     Field41 (N)
- 
- #define List1(N)      Field1  (N)
- #define List2(N)      Field2  (N)
- #define List3(N)      Field3  (N)
- #define List4(N)      Field4  (N)
- #define List5(N)      Field5  (N)
- #define List10(N)     Field10 (N)
- #define List14(N)     Field14 (N)
- #define List25(N)     Field25 (N)
- #define List38(N)     Field38 (N)
- #define List39(N)     Field39 (N)
- 
- #define Elist1(N)     Field1  (N)
- #define Elist2(N)     Field2  (N)
- #define Elist3(N)     Field3  (N)
- #define Elist4(N)     Field4  (N)
- #define Elist5(N)     Field5  (N)
- #define Elist8(N)     Field8  (N)
- #define Elist9(N)     Field9  (N)
- #define Elist10(N)    Field10 (N)
- #define Elist11(N)    Field11 (N)
- #define Elist13(N)    Field13 (N)
- #define Elist15(N)    Field15 (N)
- #define Elist16(N)    Field16 (N)
- #define Elist18(N)    Field18 (N)
- #define Elist21(N)    Field21 (N)
- #define Elist23(N)    Field23 (N)
- #define Elist24(N)    Field24 (N)
- #define Elist25(N)    Field25 (N)
- #define Elist26(N)    Field26 (N)
- #define Elist29(N)    Field29 (N)
- #define Elist30(N)    Field30 (N)
- #define Elist36(N)    Field36 (N)
- 
- #define Name1(N)      Field1  (N)
- #define Name2(N)      Field2  (N)
- 
- #define Char_Code2(N) (Field2 (N) - Char_Code_Bias)
- 
- #define Str3(N)       Field3  (N)
- 
- #define Uint2(N)      ((Field2  (N) == 0) ? Uint_0 : Field2  (N))
- #define Uint3(N)      ((Field3  (N) == 0) ? Uint_0 : Field3  (N))
- #define Uint4(N)      ((Field4  (N) == 0) ? Uint_0 : Field4  (N))
- #define Uint5(N)      ((Field5  (N) == 0) ? Uint_0 : Field5  (N))
- #define Uint8(N)      ((Field8  (N) == 0) ? Uint_0 : Field8  (N))
- #define Uint9(N)      ((Field9  (N) == 0) ? Uint_0 : Field9  (N))
- #define Uint10(N)     ((Field10 (N) == 0) ? Uint_0 : Field10 (N))
- #define Uint11(N)     ((Field11 (N) == 0) ? Uint_0 : Field11 (N))
- #define Uint12(N)     ((Field12 (N) == 0) ? Uint_0 : Field12 (N))
- #define Uint13(N)     ((Field13 (N) == 0) ? Uint_0 : Field13 (N))
- #define Uint14(N)     ((Field14 (N) == 0) ? Uint_0 : Field14 (N))
- #define Uint15(N)     ((Field15 (N) == 0) ? Uint_0 : Field15 (N))
- #define Uint16(N)     ((Field16 (N) == 0) ? Uint_0 : Field16 (N))
- #define Uint17(N)     ((Field17 (N) == 0) ? Uint_0 : Field17 (N))
- #define Uint22(N)     ((Field22 (N) == 0) ? Uint_0 : Field22 (N))
- #define Uint24(N)     ((Field24 (N) == 0) ? Uint_0 : Field24 (N))
- 
- #define Ureal3(N)     Field3  (N)
- #define Ureal18(N)    Field18 (N)
- #define Ureal21(N)    Field21 (N)
- 
- #define Analyzed(N)          (Nodes_Ptr[(N) - First_Node_Id].U.K.analyzed)
- #define Comes_From_Source(N) (Nodes_Ptr[(N) - First_Node_Id].U.K.c_f_s)
- #define Error_Posted(N)      (Nodes_Ptr[(N) - First_Node_Id].U.K.error_posted)
- #define Has_Aspects(N)       (Nodes_Ptr[(N) - First_Node_Id].U.K.has_aspects)
- #define Convention(N) \
-     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.convention)
- 
- #define Flag0(N)      (Flags_Ptr[(N) - First_Node_Id].Flag0)
- #define Flag1(N)      (Flags_Ptr[(N) - First_Node_Id].Flag1)
- #define Flag2(N)      (Flags_Ptr[(N) - First_Node_Id].Flag2)
- #define Flag3(N)      (Flags_Ptr[(N) - First_Node_Id].Flag3)
- 
- #define Flag4(N)      (Nodes_Ptr[(N) - First_Node_Id].U.K.flag4)
- #define Flag5(N)      (Nodes_Ptr[(N) - First_Node_Id].U.K.flag5)
- #define Flag6(N)      (Nodes_Ptr[(N) - First_Node_Id].U.K.flag6)
- #define Flag7(N)      (Nodes_Ptr[(N) - First_Node_Id].U.K.flag7)
- #define Flag8(N)      (Nodes_Ptr[(N) - First_Node_Id].U.K.flag8)
- #define Flag9(N)      (Nodes_Ptr[(N) - First_Node_Id].U.K.flag9)
- #define Flag10(N)     (Nodes_Ptr[(N) - First_Node_Id].U.K.flag10)
- #define Flag11(N)     (Nodes_Ptr[(N) - First_Node_Id].U.K.flag11)
- #define Flag12(N)     (Nodes_Ptr[(N) - First_Node_Id].U.K.flag12)
- #define Flag13(N)     (Nodes_Ptr[(N) - First_Node_Id].U.K.flag13)
- #define Flag14(N)     (Nodes_Ptr[(N) - First_Node_Id].U.K.flag14)
- #define Flag15(N)     (Nodes_Ptr[(N) - First_Node_Id].U.K.flag15)
- #define Flag16(N)     (Nodes_Ptr[(N) - First_Node_Id].U.K.flag16)
- #define Flag17(N)     (Nodes_Ptr[(N) - First_Node_Id].U.K.flag17)
- #define Flag18(N)     (Nodes_Ptr[(N) - First_Node_Id].U.K.flag18)
- 
- #define Flag19(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.in_list)
- #define Flag20(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.has_aspects)
- #define Flag21(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.rewrite_ins)
- #define Flag22(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.analyzed)
- #define Flag23(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.c_f_s)
- #define Flag24(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.error_posted)
- #define Flag25(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag4)
- #define Flag26(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag5)
- #define Flag27(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag6)
- #define Flag28(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag7)
- #define Flag29(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag8)
- #define Flag30(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag9)
- #define Flag31(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag10)
- #define Flag32(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag11)
- #define Flag33(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag12)
- #define Flag34(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag13)
- #define Flag35(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag14)
- #define Flag36(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag15)
- #define Flag37(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag16)
- #define Flag38(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag17)
- #define Flag39(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.flag18)
- 
- #define Flag40(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.in_list)
- #define Flag41(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.has_aspects)
- #define Flag42(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.rewrite_ins)
- #define Flag43(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.analyzed)
- #define Flag44(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.c_f_s)
- #define Flag45(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.error_posted)
- #define Flag46(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag4)
- #define Flag47(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag5)
- #define Flag48(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag6)
- #define Flag49(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag7)
- #define Flag50(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag8)
- #define Flag51(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag9)
- #define Flag52(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag10)
- #define Flag53(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag11)
- #define Flag54(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag12)
- #define Flag55(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag13)
- #define Flag56(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag14)
- #define Flag57(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag15)
- #define Flag58(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag16)
- #define Flag59(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag17)
- #define Flag60(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.flag18)
- #define Flag61(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.pflag1)
- #define Flag62(N)     (Nodes_Ptr[(N) - First_Node_Id + 1].U.K.pflag2)
- #define Flag63(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.pflag1)
- #define Flag64(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.K.pflag2)
- 
- #define Flag65(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.NK.flag65)
- #define Flag66(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.NK.flag66)
- #define Flag67(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.NK.flag67)
- #define Flag68(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.NK.flag68)
- #define Flag69(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.NK.flag69)
- #define Flag70(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.NK.flag70)
- #define Flag71(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.NK.flag71)
- #define Flag72(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].U.NK.flag72)
- 
- #define Flag73(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag73)
- #define Flag74(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag74)
- #define Flag75(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag75)
- #define Flag76(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag76)
- #define Flag77(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag77)
- #define Flag78(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag78)
- #define Flag79(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag79)
- #define Flag80(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag80)
- #define Flag81(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag81)
- #define Flag82(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag82)
- #define Flag83(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag83)
- #define Flag84(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag84)
- #define Flag85(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag85)
- #define Flag86(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag86)
- #define Flag87(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag87)
- #define Flag88(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag88)
- #define Flag89(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag89)
- #define Flag90(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag90)
- #define Flag91(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag91)
- #define Flag92(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag92)
- #define Flag93(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag93)
- #define Flag94(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag94)
- #define Flag95(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag95)
- #define Flag96(N)     (Nodes_Ptr[(N) - First_Node_Id + 2].V.EX.U.fw.flag96)
- #define Flag97(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag97)
- #define Flag98(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag98)
- #define Flag99(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag99)
- #define Flag100(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag100)
- #define Flag101(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag101)
- #define Flag102(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag102)
- #define Flag103(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag103)
- #define Flag104(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag104)
- #define Flag105(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag105)
- #define Flag106(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag106)
- #define Flag107(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag107)
- #define Flag108(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag108)
- #define Flag109(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag109)
- #define Flag110(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag110)
- #define Flag111(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag111)
- #define Flag112(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag112)
- #define Flag113(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag113)
- #define Flag114(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag114)
- #define Flag115(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag115)
- #define Flag116(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag116)
- #define Flag117(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag117)
- #define Flag118(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag118)
- #define Flag119(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag119)
- #define Flag120(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag120)
- #define Flag121(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag121)
- #define Flag122(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag122)
- #define Flag123(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag123)
- #define Flag124(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag124)
- #define Flag125(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag125)
- #define Flag126(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag126)
- #define Flag127(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag127)
- #define Flag128(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.U.fw2.flag128)
- 
- #define Flag129(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.in_list)
- #define Flag130(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.has_aspects)
- #define Flag131(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.rewrite_ins)
- #define Flag132(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.analyzed)
- #define Flag133(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.c_f_s)
- #define Flag134(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.error_posted)
- #define Flag135(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag4)
- #define Flag136(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag5)
- #define Flag137(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag6)
- #define Flag138(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag7)
- #define Flag139(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag8)
- #define Flag140(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag9)
- #define Flag141(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag10)
- #define Flag142(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag11)
- #define Flag143(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag12)
- #define Flag144(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag13)
- #define Flag145(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag14)
- #define Flag146(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag15)
- #define Flag147(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag16)
- #define Flag148(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag17)
- #define Flag149(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.flag18)
- #define Flag150(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.pflag1)
- #define Flag151(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.K.pflag2)
- 
- #define Flag152(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag152)
- #define Flag153(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag153)
- #define Flag154(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag154)
- #define Flag155(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag155)
- #define Flag156(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag156)
- #define Flag157(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag157)
- #define Flag158(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag158)
- #define Flag159(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag159)
- #define Flag160(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag160)
- #define Flag161(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag161)
- #define Flag162(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag162)
- #define Flag163(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag163)
- #define Flag164(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag164)
- #define Flag165(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag165)
- #define Flag166(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag166)
- #define Flag167(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag167)
- #define Flag168(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag168)
- #define Flag169(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag169)
- #define Flag170(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag170)
- #define Flag171(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag171)
- #define Flag172(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag172)
- #define Flag173(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag173)
- #define Flag174(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag174)
- #define Flag175(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag175)
- #define Flag176(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag176)
- #define Flag177(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag177)
- #define Flag178(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag178)
- #define Flag179(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag179)
- #define Flag180(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag180)
- #define Flag181(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag181)
- #define Flag182(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag182)
- #define Flag183(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag183)
- 
- #define Flag184(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag184)
- #define Flag185(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag185)
- #define Flag186(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag186)
- #define Flag187(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag187)
- #define Flag188(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag188)
- #define Flag189(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag189)
- #define Flag190(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag190)
- #define Flag191(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag191)
- #define Flag192(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag192)
- #define Flag193(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag193)
- #define Flag194(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag194)
- #define Flag195(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag195)
- #define Flag196(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag196)
- #define Flag197(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag197)
- #define Flag198(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag198)
- #define Flag199(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag199)
- #define Flag200(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag200)
- #define Flag201(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag201)
- #define Flag202(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag202)
- #define Flag203(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag203)
- #define Flag204(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag204)
- #define Flag205(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag205)
- #define Flag206(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag206)
- #define Flag207(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag207)
- #define Flag208(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag208)
- #define Flag209(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag209)
- #define Flag210(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag210)
- #define Flag211(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag211)
- #define Flag212(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag212)
- #define Flag213(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag213)
- #define Flag214(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag214)
- #define Flag215(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw4.flag215)
- 
- #define Flag216(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.in_list)
- #define Flag217(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.has_aspects)
- #define Flag218(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.rewrite_ins)
- #define Flag219(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.analyzed)
- #define Flag220(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.c_f_s)
- #define Flag221(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.error_posted)
- #define Flag222(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag4)
- #define Flag223(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag5)
- #define Flag224(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag6)
- #define Flag225(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag7)
- #define Flag226(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag8)
- #define Flag227(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag9)
- #define Flag228(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag10)
- #define Flag229(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag11)
- #define Flag230(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag12)
- #define Flag231(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag13)
- #define Flag232(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag14)
- #define Flag233(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag15)
- #define Flag234(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag16)
- #define Flag235(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag17)
- #define Flag236(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.flag18)
- #define Flag237(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.pflag1)
- #define Flag238(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.K.pflag2)
- 
- #define Flag239(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.NK.flag65)
- #define Flag240(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.NK.flag66)
- #define Flag241(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.NK.flag67)
- #define Flag242(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.NK.flag68)
- #define Flag243(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.NK.flag69)
- #define Flag244(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.NK.flag70)
- #define Flag245(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.NK.flag71)
- #define Flag246(N)     (Nodes_Ptr[(N) - First_Node_Id + 3].U.NK.flag72)
- 
- #define Flag247(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.NK.flag65)
- #define Flag248(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.NK.flag66)
- #define Flag249(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.NK.flag67)
- #define Flag250(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.NK.flag68)
- #define Flag251(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.NK.flag69)
- #define Flag252(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.NK.flag70)
- #define Flag253(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.NK.flag71)
- #define Flag254(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].U.NK.flag72)
- 
- #define Flag255(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag255)
- #define Flag256(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag256)
- #define Flag257(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag257)
- #define Flag258(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag258)
- #define Flag259(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag259)
- #define Flag260(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag260)
- #define Flag261(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag261)
- #define Flag262(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag262)
- #define Flag263(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag263)
- #define Flag264(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag264)
- #define Flag265(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag265)
- #define Flag266(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag266)
- #define Flag267(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag267)
- #define Flag268(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag268)
- #define Flag269(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag269)
- #define Flag270(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag270)
- #define Flag271(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag271)
- #define Flag272(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag272)
- #define Flag273(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag273)
- #define Flag274(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag274)
- #define Flag275(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag275)
- #define Flag276(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag276)
- #define Flag277(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag277)
- #define Flag278(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag278)
- #define Flag279(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag279)
- #define Flag280(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag280)
- #define Flag281(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag281)
- #define Flag282(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag282)
- #define Flag283(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag283)
- #define Flag284(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag284)
- #define Flag285(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag285)
- #define Flag286(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].V.EX.U.fw5.flag286)
- #define Flag287(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.in_list)
- #define Flag288(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.has_aspects)
- #define Flag289(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.rewrite_ins)
- #define Flag290(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.analyzed)
- #define Flag291(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.c_f_s)
- #define Flag292(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.error_posted)
- #define Flag293(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag4)
- #define Flag294(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag5)
- #define Flag295(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag6)
- #define Flag296(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag7)
- #define Flag297(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag8)
- #define Flag298(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag9)
- #define Flag299(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag10)
- #define Flag300(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag11)
- #define Flag301(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag12)
- #define Flag302(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag13)
- #define Flag303(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag14)
- #define Flag304(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag15)
- #define Flag305(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag16)
- #define Flag306(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag17)
- #define Flag307(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.flag18)
- #define Flag308(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.pflag1)
- #define Flag309(N)     (Nodes_Ptr[(N) - First_Node_Id + 5].U.K.pflag2)
- 
  #ifdef __cplusplus
  }
  #endif
--- 59,70 ----
  INLINE Boolean
  Present (Tree_Id N)
  {
!   return !No (N);
  }
  
  #define Current_Error_Node atree__current_error_node
  extern Node_Id Current_Error_Node;
  
  #ifdef __cplusplus
  }
  #endif
diff -Nrcpad gcc-11.3.0/gcc/ada/aux-io.c gcc-12.1.0/gcc/ada/aux-io.c
*** gcc-11.3.0/gcc/ada/aux-io.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/aux-io.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 1992-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/back_end.adb gcc-12.1.0/gcc/ada/back_end.adb
*** gcc-11.3.0/gcc/ada/back_end.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/back_end.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 25,47 ****
  
  --  This is the version of the Back_End package for GCC back ends
  
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Lib;      use Lib;
! with Osint;    use Osint;
! with Opt;      use Opt;
! with Osint.C;  use Osint.C;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Stand;    use Stand;
! with Sinput;   use Sinput;
! with Stringt;  use Stringt;
! with Switch;   use Switch;
! with Switch.C; use Switch.C;
! with System;   use System;
! with Types;    use Types;
  
  with System.OS_Lib; use System.OS_Lib;
  
--- 25,48 ----
  
  --  This is the version of the Back_End package for GCC back ends
  
! with Atree;         use Atree;
! with Backend_Utils; use Backend_Utils;
! with Debug;         use Debug;
! with Elists;        use Elists;
! with Errout;        use Errout;
! with Lib;           use Lib;
! with Osint;         use Osint;
! with Opt;           use Opt;
! with Osint.C;       use Osint.C;
! with Namet;         use Namet;
! with Nlists;        use Nlists;
! with Stand;         use Stand;
! with Sinput;        use Sinput;
! with Stringt;       use Stringt;
! with Switch;        use Switch;
! with Switch.C;      use Switch.C;
! with System;        use System;
! with Types;         use Types;
  
  with System.OS_Lib; use System.OS_Lib;
  
*************** package body Back_End is
*** 88,95 ****
          (gnat_root                     : Int;
           max_gnat_node                 : Int;
           number_name                   : Nat;
!          nodes_ptr                     : Address;
!          flags_ptr                     : Address;
  
           next_node_ptr                 : Address;
           prev_node_ptr                 : Address;
--- 89,96 ----
          (gnat_root                     : Int;
           max_gnat_node                 : Int;
           number_name                   : Nat;
!          node_offsets_ptr              : Address;
!          slots_ptr                     : Address;
  
           next_node_ptr                 : Address;
           prev_node_ptr                 : Address;
*************** package body Back_End is
*** 156,163 ****
          (gnat_root          => Int (Cunit (Main_Unit)),
           max_gnat_node      => Int (Last_Node_Id - First_Node_Id + 1),
           number_name        => Name_Entries_Count,
!          nodes_ptr          => Nodes_Address,
!          flags_ptr          => Flags_Address,
  
           next_node_ptr      => Next_Node_Address,
           prev_node_ptr      => Prev_Node_Address,
--- 157,164 ----
          (gnat_root          => Int (Cunit (Main_Unit)),
           max_gnat_node      => Int (Last_Node_Id - First_Node_Id + 1),
           number_name        => Name_Entries_Count,
!          node_offsets_ptr   => Node_Offsets_Address,
!          slots_ptr          => Slots_Address,
  
           next_node_ptr      => Next_Node_Address,
           prev_node_ptr      => Prev_Node_Address,
*************** package body Back_End is
*** 266,309 ****
           --  specific switches that the Ada front-end knows about.
  
           else
-             Store_Compilation_Switch (Switch_Chars);
- 
-             --  For gcc back ends, -fno-inline disables Inline pragmas only,
-             --  not Inline_Always to remain consistent with the always_inline
-             --  attribute behavior.
- 
-             if Switch_Chars (First .. Last) = "fno-inline" then
-                Opt.Disable_FE_Inline := True;
- 
-             --  Back end switch -fpreserve-control-flow also sets the front end
-             --  flag that inhibits improper control flow transformations.
  
!             elsif Switch_Chars (First .. Last) = "fpreserve-control-flow" then
!                Opt.Suppress_Control_Flow_Optimizations := True;
  
!             --  Back end switch -fdump-scos, which exists primarily for C, is
!             --  also accepted for Ada as a synonym of -gnateS.
  
!             elsif Switch_Chars (First .. Last) = "fdump-scos" then
!                Opt.Generate_SCO := True;
!                Opt.Generate_SCO_Instance_Table := True;
  
!             elsif Switch_Chars (First) = 'g' then
!                Debugger_Level := 2;
  
!                if First < Last then
!                   case Switch_Chars (First + 1) is
!                      when '0' =>
!                         Debugger_Level := 0;
!                      when '1' =>
!                         Debugger_Level := 1;
!                      when '2' =>
!                         Debugger_Level := 2;
!                      when '3' =>
!                         Debugger_Level := 3;
!                      when others =>
!                         null;
!                   end case;
                 end if;
              end if;
           end if;
--- 267,286 ----
           --  specific switches that the Ada front-end knows about.
  
           else
  
!             if not Scan_Common_Back_End_Switch (Switch_Chars) then
  
!                --  Store compilation switch, as Scan_Common_Back_End_Switch
!                --  only stores switches it recognizes.
  
!                Store_Compilation_Switch (Switch_Chars);
  
!                --  Back end switch -fdump-scos, which exists primarily for C,
!                --  is also accepted for Ada as a synonym of -gnateS.
  
!                if Switch_Chars (First .. Last) = "fdump-scos" then
!                   Opt.Generate_SCO := True;
!                   Opt.Generate_SCO_Instance_Table := True;
                 end if;
              end if;
           end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/back_end.ads gcc-12.1.0/gcc/ada/back_end.ads
*** gcc-11.3.0/gcc/ada/back_end.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/back_end.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Back_End is
*** 70,75 ****
--- 70,76 ----
     --    Opt.Suppress_Control_Float_Optimizations
     --    Opt.Generate_SCO
     --    Opt.Generate_SCO_Instance_Table
+    --    Opt.JSON_Output
     --    Opt.Stack_Checking_Enabled
     --    Opt.No_Stdinc
     --    Opt.No_Stdlib
diff -Nrcpad gcc-11.3.0/gcc/ada/backend_utils.adb gcc-12.1.0/gcc/ada/backend_utils.adb
*** gcc-11.3.0/gcc/ada/backend_utils.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/backend_utils.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,96 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                         B A C K E N D _ U T I L S                        --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2021-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Lib;
+ with Opt;    use Opt;
+ with Switch; use Switch;
+ 
+ package body Backend_Utils is
+ 
+    ---------------------------------
+    -- Scan_Common_Back_End_Switch --
+    ---------------------------------
+ 
+    function Scan_Common_Back_End_Switch (Switch_Chars : String) return Boolean
+    is
+       First : constant Positive := Switch_Chars'First + 1;
+       Last  : constant Natural  := Switch_Last (Switch_Chars);
+    begin
+ 
+       --  Recognize -gxxx switches
+ 
+       if Switch_Chars (First) = 'g' then
+          Debugger_Level := 2;
+ 
+          if First < Last then
+             case Switch_Chars (First + 1) is
+                when '0' =>
+                   Debugger_Level := 0;
+                when '1' =>
+                   Debugger_Level := 1;
+                when '2' =>
+                   Debugger_Level := 2;
+                when '3' =>
+                   Debugger_Level := 3;
+                when others =>
+                   null;
+             end case;
+          end if;
+ 
+       --  Back end switch -fdiagnostics-format=json tells the frontend to
+       --  output its error and warning messages in the same format GCC
+       --  uses when passed -fdiagnostics-format=json.
+ 
+       elsif Switch_Chars (First .. Last) = "fdiagnostics-format=json" then
+          Opt.JSON_Output := True;
+ 
+       --  Back-end switch -fno-inline also sets the front end flags to entirely
+       --  inhibit all inlining. So we store it and set the appropriate
+       --  flags.
+       --  For gcc back ends, -fno-inline disables Inline pragmas only,
+       --  not Inline_Always to remain consistent with the always_inline
+       --  attribute behavior.
+ 
+       elsif Switch_Chars (First .. Last) = "fno-inline" then
+          Opt.Disable_FE_Inline := True;
+ 
+       --  Back end switch -fpreserve-control-flow also sets the front end
+       --  flag that inhibits improper control flow transformations.
+ 
+       elsif Switch_Chars (First .. Last) = "fpreserve-control-flow" then
+          Opt.Suppress_Control_Flow_Optimizations := True;
+ 
+       elsif Switch_Chars (First .. Last) = "S" then
+          Generate_Asm := True;
+ 
+       else
+          return False;
+       end if;
+ 
+       Lib.Store_Compilation_Switch (Switch_Chars);
+       return True;
+    end Scan_Common_Back_End_Switch;
+ 
+ end Backend_Utils;
diff -Nrcpad gcc-11.3.0/gcc/ada/backend_utils.ads gcc-12.1.0/gcc/ada/backend_utils.ads
*** gcc-11.3.0/gcc/ada/backend_utils.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/backend_utils.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,36 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                         B A C K E N D _ U T I L S                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2021-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Procedures and functions used by both the Adabkend and Back_End packages.
+ 
+ package Backend_Utils is
+ 
+    function Scan_Common_Back_End_Switch (Switch_Chars : String) return Boolean;
+    --  Scan back-end switches which are common to all back-ends and have an
+    --  effect in the front-end. Call Store_Compilation_Switch and return True
+    --  if Switch_Chars is recognized as a common back end switch. Return False
+    --  otherwise.
+ 
+ end Backend_Utils;
diff -Nrcpad gcc-11.3.0/gcc/ada/bcheck.adb gcc-12.1.0/gcc/ada/bcheck.adb
*** gcc-11.3.0/gcc/ada/bcheck.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bcheck.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** with Binderr;  use Binderr;
*** 29,34 ****
--- 29,35 ----
  with Butil;    use Butil;
  with Casing;   use Casing;
  with Fname;    use Fname;
+ with Gnatvsn;
  with Namet;    use Namet;
  with Opt;      use Opt;
  with Osint;
*************** package body Bcheck is
*** 1324,1334 ****
             or else ALIs.Table (A).Ver          (1 .. VL) /=
                     ALIs.Table (ALIs.First).Ver (1 .. VL)
           then
!             Error_Msg_File_1 := ALIs.Table (A).Sfile;
!             Error_Msg_File_2 := ALIs.Table (ALIs.First).Sfile;
  
!             Consistency_Error_Msg
!                ("{ and { compiled with different GNAT versions");
           end if;
        end loop;
     end Check_Versions;
--- 1325,1460 ----
             or else ALIs.Table (A).Ver          (1 .. VL) /=
                     ALIs.Table (ALIs.First).Ver (1 .. VL)
           then
!             --  Version mismatch found; generate error message.
  
!             declare
!                use Gnatvsn;
! 
!                Prefix : constant String :=
!                  Verbose_Library_Version
!                    (1 .. Verbose_Library_Version'Length
!                            - Library_Version'Length);
! 
!                type ALI_Version is record
!                   Primary, Secondary : Int range -1 .. Int'Last;
!                end record;
! 
!                No_Version : constant ALI_Version := (-1, -1);
! 
!                function Remove_Prefix (S : String) return String is
!                  (S (S'First + Prefix'Length .. S'Last));
! 
!                function Extract_Version (S : String) return ALI_Version;
!                --  Attempts to extract and return a pair of nonnegative library
!                --  version numbers from the given string; if unsuccessful,
!                --  then returns No_Version.
! 
!                ---------------------
!                -- Extract_Version --
!                ---------------------
! 
!                function Extract_Version (S : String) return ALI_Version is
!                   pragma Assert (S'First = 1);
! 
!                   function Int_Value (Img : String) return Int;
!                   --  Using Int'Value leads to complications in
!                   --  building the binder, so DIY.
! 
!                   ---------------
!                   -- Int_Value --
!                   ---------------
! 
!                   function Int_Value (Img : String) return Int is
!                      Result : Nat := 0;
!                   begin
!                      if Img'Length in 1 .. 9
!                        and then (for all C of Img => C in '0' .. '9')
!                      then
!                         for C of Img loop
!                            Result := (10 * Result) +
!                              (Character'Pos (C) - Character'Pos ('0'));
!                         end loop;
!                         return Result;
!                      else
!                         return -1;
!                      end if;
!                   end Int_Value;
! 
!                begin
!                   if S'Length > Prefix'Length
!                     and then S (1 .. Prefix'Length) = Prefix
!                   then
!                      declare
!                         Suffix    : constant String := Remove_Prefix (S);
!                         Dot_Found : Boolean := False;
!                         Primary, Secondary : Int;
!                      begin
!                         for Dot_Index in Suffix'Range loop
!                            if Suffix (Dot_Index) = '.' then
!                               Dot_Found := True;
!                               Primary :=
!                                 Int_Value (Suffix (Suffix'First
!                                                    .. Dot_Index - 1));
!                               Secondary :=
!                                 Int_Value (Suffix (Dot_Index + 1
!                                                    .. Suffix'Last));
!                               exit;
!                            end if;
!                         end loop;
! 
!                         if not Dot_Found then
!                            Primary   := Int_Value (Suffix);
!                            Secondary := 0;
!                         end if;
! 
!                         if (Primary /= -1) and (Secondary /= -1) then
!                            return (Primary   => Primary,
!                                    Secondary => Secondary);
!                         end if;
!                      end;
!                   end if;
!                   return No_Version;
!                end Extract_Version;
! 
!                --  Local constants
! 
!                V1_Text : constant String :=
!                  ALIs.Table (A).Ver (1 .. ALIs.Table (A).Ver_Len);
!                V2_Text : constant String :=
!                  ALIs.Table (ALIs.First).Ver (1 .. VL);
!                V1      : constant ALI_Version := Extract_Version (V1_Text);
!                V2      : constant ALI_Version := Extract_Version (V2_Text);
! 
!                Include_Version_Numbers_In_Message : constant Boolean :=
!                  (V1 /= V2) and (V1 /= No_Version) and (V2 /= No_Version);
!             begin
!                Error_Msg_File_1 := ALIs.Table (A).Sfile;
!                Error_Msg_File_2 := ALIs.Table (ALIs.First).Sfile;
! 
!                if Include_Version_Numbers_In_Message then
!                   if V1.Secondary = V2.Secondary then
!                      --  Excluding equal secondary values from error
!                      --  message text matters for generating reproducible
!                      --  regression test outputs.
! 
!                      Error_Msg_Nat_1 := V1.Primary;
!                      Error_Msg_Nat_2 := V2.Primary;
!                      Consistency_Error_Msg
!                        ("{ and { compiled with different GNAT versions"
!                         & ", v# and v#");
!                   else
!                      Consistency_Error_Msg
!                        ("{ and { compiled with different GNAT versions"
!                         & ", v"
!                         & Remove_Prefix (V1_Text)
!                         & " and v"
!                         & Remove_Prefix (V2_Text));
!                   end if;
!                else
!                   Consistency_Error_Msg
!                     ("{ and { compiled with different GNAT versions");
!                end if;
!             end;
           end if;
        end loop;
     end Check_Versions;
diff -Nrcpad gcc-11.3.0/gcc/ada/bcheck.ads gcc-12.1.0/gcc/ada/bcheck.ads
*** gcc-11.3.0/gcc/ada/bcheck.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bcheck.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/binde.adb gcc-12.1.0/gcc/ada/binde.adb
*** gcc-11.3.0/gcc/ada/binde.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/binde.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Binde is
*** 2327,2333 ****
        --  subsumed by their parent units, but we need to list them for other
        --  tools. For now they are listed after other files, rather than right
        --  after their parent, since there is no easy link between the
!       --  elaboration table and the ALIs table ??? As subunits may appear
        --  repeatedly in the list, if the parent unit appears in the context of
        --  several units in the closure, duplicates are suppressed.
  
--- 2327,2333 ----
        --  subsumed by their parent units, but we need to list them for other
        --  tools. For now they are listed after other files, rather than right
        --  after their parent, since there is no easy link between the
!       --  elaboration table and the ALIs table. As subunits may appear
        --  repeatedly in the list, if the parent unit appears in the context of
        --  several units in the closure, duplicates are suppressed.
  
*************** package body Binde is
*** 2811,2817 ****
                         or else Withs.Table (W).Elab_All_Desirable
                       then
                          if SCC (U) = SCC (Withed_Unit) then
!                            Elab_Cycle_Found := True; -- ???
  
                             --  We could probably give better error messages
                             --  than Elab_Old here, but for now, to avoid
--- 2811,2817 ----
                         or else Withs.Table (W).Elab_All_Desirable
                       then
                          if SCC (U) = SCC (Withed_Unit) then
!                            Elab_Cycle_Found := True;
  
                             --  We could probably give better error messages
                             --  than Elab_Old here, but for now, to avoid
*************** package body Binde is
*** 2873,2882 ****
              end if;
  
              --  If there are no nodes with predecessors, then either we are
!             --  done, as indicated by Num_Left being set to zero, or we have
!             --  a circularity. In the latter case, diagnose the circularity,
!             --  removing it from the graph and continue.
!             --  ????But Diagnose_Elaboration_Problem always raises an
              --  exception, so the loop never goes around more than once.
  
              Get_No_Pred : while No_Pred = No_Unit_Id loop
--- 2873,2882 ----
              end if;
  
              --  If there are no nodes with predecessors, then either we are
!             --  done, as indicated by Num_Left being set to zero, or we have a
!             --  circularity. In the latter case, diagnose the circularity,
!             --  removing it from the graph and
!             --  continue. Diagnose_Elaboration_Problem always raises an
              --  exception, so the loop never goes around more than once.
  
              Get_No_Pred : while No_Pred = No_Unit_Id loop
*************** package body Binde is
*** 3086,3096 ****
           Outer : loop
  
              --  If there are no nodes with predecessors, then either we are
!             --  done, as indicated by Num_Left being set to zero, or we have
!             --  a circularity. In the latter case, diagnose the circularity,
              --  removing it from the graph and continue.
!             --  ????But Diagnose_Elaboration_Problem always raises an
!             --  exception, so the loop never goes around more than once.
  
              Get_No_Pred : while No_Pred = No_Unit_Id loop
                 exit Outer when Num_Left < 1;
--- 3086,3096 ----
           Outer : loop
  
              --  If there are no nodes with predecessors, then either we are
!             --  done, as indicated by Num_Left being set to zero, or we have a
!             --  circularity. In the latter case, diagnose the circularity,
              --  removing it from the graph and continue.
!             --  Diagnose_Elaboration_Problem always raises an exception, so the
!             --  loop never goes around more than once.
  
              Get_No_Pred : while No_Pred = No_Unit_Id loop
                 exit Outer when Num_Left < 1;
diff -Nrcpad gcc-11.3.0/gcc/ada/binde.ads gcc-12.1.0/gcc/ada/binde.ads
*** gcc-11.3.0/gcc/ada/binde.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/binde.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/binderr.adb gcc-12.1.0/gcc/ada/binderr.adb
*** gcc-11.3.0/gcc/ada/binderr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/binderr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/binderr.ads gcc-12.1.0/gcc/ada/binderr.ads
*** gcc-11.3.0/gcc/ada/binderr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/binderr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindgen.adb gcc-12.1.0/gcc/ada/bindgen.adb
*** gcc-11.3.0/gcc/ada/bindgen.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindgen.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Bindgen is
*** 588,593 ****
--- 588,614 ----
              WBI ("");
           end if;
  
+          --  Import the default stack object if a size has been provided to the
+          --  binder.
+ 
+          if Opt.Default_Stack_Size /= Opt.No_Stack_Size then
+             WBI ("      Default_Stack_Size : Integer;");
+             WBI ("      pragma Import (C, Default_Stack_Size, " &
+                  """__gl_default_stack_size"");");
+          end if;
+ 
+          --  Initialize stack limit variable of the environment task if the
+          --  stack check method is stack limit and stack check is enabled.
+ 
+          if Stack_Check_Limits_On_Target
+            and then (Stack_Check_Default_On_Target or Stack_Check_Switch_Set)
+          then
+             WBI ("");
+             WBI ("      procedure Initialize_Stack_Limit;");
+             WBI ("      pragma Import (C, Initialize_Stack_Limit, " &
+                  """__gnat_initialize_stack_limit"");");
+          end if;
+ 
           if System_Secondary_Stack_Package_In_Closure then
              --  System.Secondary_Stack is in the closure of the program
              --  because the program uses the secondary stack or the restricted
*************** package body Bindgen is
*** 619,624 ****
--- 640,654 ----
  
           WBI ("   begin");
  
+          --  Set the default stack size if provided to the binder
+ 
+          if Opt.Default_Stack_Size /= Opt.No_Stack_Size then
+             Set_String ("      Default_Stack_Size := ");
+             Set_Int (Default_Stack_Size);
+             Set_String (";");
+             Write_Statement_Buffer;
+          end if;
+ 
           if Main_Priority /= No_Main_Priority then
              Set_String ("      Main_Priority := ");
              Set_Int    (Main_Priority);
*************** package body Bindgen is
*** 643,648 ****
--- 673,679 ----
           end if;
  
           if Main_Priority = No_Main_Priority
+            and then Opt.Default_Stack_Size = Opt.No_Stack_Size
             and then Main_CPU = No_Main_CPU
             and then not System_Tasking_Restricted_Stages_Used
           then
*************** package body Bindgen is
*** 2388,2394 ****
                                        Gnat_Version_String &
                                        """ & ASCII.NUL;");
              WBI ("   pragma Export (C, GNAT_Version, ""__gnat_version"");");
! 
              WBI ("");
              Set_String ("   Ada_Main_Program_Name : constant String := """);
              Get_Name_String (Units.Table (First_Unit_Entry).Uname);
--- 2419,2429 ----
                                        Gnat_Version_String &
                                        """ & ASCII.NUL;");
              WBI ("   pragma Export (C, GNAT_Version, ""__gnat_version"");");
!             WBI ("");
!             WBI ("   GNAT_Version_Address : constant System.Address := " &
!                  "GNAT_Version'Address;");
!             WBI ("   pragma Export (C, GNAT_Version_Address, " &
!                  """__gnat_version_address"");");
              WBI ("");
              Set_String ("   Ada_Main_Program_Name : constant String := """);
              Get_Name_String (Units.Table (First_Unit_Entry).Uname);
diff -Nrcpad gcc-11.3.0/gcc/ada/bindgen.ads gcc-12.1.0/gcc/ada/bindgen.ads
*** gcc-11.3.0/gcc/ada/bindgen.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindgen.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-augmentors.adb gcc-12.1.0/gcc/ada/bindo-augmentors.adb
*** gcc-11.3.0/gcc/ada/bindo-augmentors.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-augmentors.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-augmentors.ads gcc-12.1.0/gcc/ada/bindo-augmentors.ads
*** gcc-11.3.0/gcc/ada/bindo-augmentors.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-augmentors.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-builders.adb gcc-12.1.0/gcc/ada/bindo-builders.adb
*** gcc-11.3.0/gcc/ada/bindo-builders.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-builders.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-builders.ads gcc-12.1.0/gcc/ada/bindo-builders.ads
*** gcc-11.3.0/gcc/ada/bindo-builders.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-builders.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-diagnostics.adb gcc-12.1.0/gcc/ada/bindo-diagnostics.adb
*** gcc-11.3.0/gcc/ada/bindo-diagnostics.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-diagnostics.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-diagnostics.ads gcc-12.1.0/gcc/ada/bindo-diagnostics.ads
*** gcc-11.3.0/gcc/ada/bindo-diagnostics.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-diagnostics.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-elaborators.adb gcc-12.1.0/gcc/ada/bindo-elaborators.adb
*** gcc-11.3.0/gcc/ada/bindo-elaborators.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-elaborators.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-elaborators.ads gcc-12.1.0/gcc/ada/bindo-elaborators.ads
*** gcc-11.3.0/gcc/ada/bindo-elaborators.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-elaborators.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-graphs.adb gcc-12.1.0/gcc/ada/bindo-graphs.adb
*** gcc-11.3.0/gcc/ada/bindo-graphs.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-graphs.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
*************** package body Bindo.Graphs is
*** 4903,4913 ****
  
        procedure Set_Is_Existing_Source_Target_Relation
          (G   : Invocation_Graph;
!          Rel : Source_Target_Relation;
!          Val : Boolean := True);
        pragma Inline (Set_Is_Existing_Source_Target_Relation);
        --  Mark a source vertex and a target vertex described by relation Rel as
!       --  already related in invocation graph G depending on value Val.
  
        procedure Set_IGE_Attributes
          (G    : Invocation_Graph;
--- 4903,4912 ----
  
        procedure Set_Is_Existing_Source_Target_Relation
          (G   : Invocation_Graph;
!          Rel : Source_Target_Relation);
        pragma Inline (Set_Is_Existing_Source_Target_Relation);
        --  Mark a source vertex and a target vertex described by relation Rel as
!       --  already related in invocation graph G.
  
        procedure Set_IGE_Attributes
          (G    : Invocation_Graph;
*************** package body Bindo.Graphs is
*** 5636,5654 ****
  
        procedure Set_Is_Existing_Source_Target_Relation
          (G   : Invocation_Graph;
!          Rel : Source_Target_Relation;
!          Val : Boolean := True)
        is
        begin
           pragma Assert (Present (G));
           pragma Assert (Present (Rel.Source));
           pragma Assert (Present (Rel.Target));
  
!          if Val then
!             Relation_Sets.Insert (G.Relations, Rel);
!          else
!             Relation_Sets.Delete (G.Relations, Rel);
!          end if;
        end Set_Is_Existing_Source_Target_Relation;
  
        ------------------------
--- 5635,5648 ----
  
        procedure Set_Is_Existing_Source_Target_Relation
          (G   : Invocation_Graph;
!          Rel : Source_Target_Relation)
        is
        begin
           pragma Assert (Present (G));
           pragma Assert (Present (Rel.Source));
           pragma Assert (Present (Rel.Target));
  
!          Relation_Sets.Insert (G.Relations, Rel);
        end Set_Is_Existing_Source_Target_Relation;
  
        ------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-graphs.ads gcc-12.1.0/gcc/ada/bindo-graphs.ads
*** gcc-11.3.0/gcc/ada/bindo-graphs.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-graphs.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-units.adb gcc-12.1.0/gcc/ada/bindo-units.adb
*** gcc-11.3.0/gcc/ada/bindo-units.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-units.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-units.ads gcc-12.1.0/gcc/ada/bindo-units.ads
*** gcc-11.3.0/gcc/ada/bindo-units.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-units.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-validators.adb gcc-12.1.0/gcc/ada/bindo-validators.adb
*** gcc-11.3.0/gcc/ada/bindo-validators.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-validators.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-validators.ads gcc-12.1.0/gcc/ada/bindo-validators.ads
*** gcc-11.3.0/gcc/ada/bindo-validators.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-validators.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-writers.adb gcc-12.1.0/gcc/ada/bindo-writers.adb
*** gcc-11.3.0/gcc/ada/bindo-writers.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-writers.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
*************** package body Bindo.Writers is
*** 1689,1696 ****
           if Contains (Set, Source) then
              return;
  
!          --  Nothing to do for internal source files unless switch -Ra (???) is
!          --  in effect.
  
           elsif Is_Internal_File_Name (Source)
             and then not List_Closure_All
--- 1689,1696 ----
           if Contains (Set, Source) then
              return;
  
!          --  Nothing to do for internal source files unless switch -Ra is in
!          --  effect.
  
           elsif Is_Internal_File_Name (Source)
             and then not List_Closure_All
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo-writers.ads gcc-12.1.0/gcc/ada/bindo-writers.ads
*** gcc-11.3.0/gcc/ada/bindo-writers.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo-writers.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo.adb gcc-12.1.0/gcc/ada/bindo.adb
*** gcc-11.3.0/gcc/ada/bindo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindo.ads gcc-12.1.0/gcc/ada/bindo.ads
*** gcc-11.3.0/gcc/ada/bindo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindusg.adb gcc-12.1.0/gcc/ada/bindusg.adb
*** gcc-11.3.0/gcc/ada/bindusg.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindusg.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/bindusg.ads gcc-12.1.0/gcc/ada/bindusg.ads
*** gcc-11.3.0/gcc/ada/bindusg.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/bindusg.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/butil.adb gcc-12.1.0/gcc/ada/butil.adb
*** gcc-11.3.0/gcc/ada/butil.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/butil.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/butil.ads gcc-12.1.0/gcc/ada/butil.ads
*** gcc-11.3.0/gcc/ada/butil.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/butil.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/cal.c gcc-12.1.0/gcc/ada/cal.c
*** gcc-11.3.0/gcc/ada/cal.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/cal.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/casing.adb gcc-12.1.0/gcc/ada/casing.adb
*** gcc-11.3.0/gcc/ada/casing.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/casing.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/casing.ads gcc-12.1.0/gcc/ada/casing.ads
*** gcc-11.3.0/gcc/ada/casing.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/casing.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/ceinfo.adb gcc-12.1.0/gcc/ada/ceinfo.adb
*** gcc-11.3.0/gcc/ada/ceinfo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/ceinfo.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,226 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                          GNAT SYSTEM UTILITIES                           --
- --                                                                          --
- --                               C E I N F O                                --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1998-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
- -- http://www.gnu.org/licenses for a complete copy of the license.          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Check consistency of einfo.ads and einfo.adb. Checks that field name usage
- --  is consistent, including comments mentioning fields.
- 
- --  Note that this is used both as a standalone program, and as a procedure
- --  called by XEinfo. This raises an unhandled exception if it finds any
- --  errors; we don't attempt any sophisticated error recovery.
- 
- with Ada.Strings.Unbounded;         use Ada.Strings.Unbounded;
- with Ada.Strings.Unbounded.Text_IO; use Ada.Strings.Unbounded.Text_IO;
- with Ada.Text_IO;                   use Ada.Text_IO;
- 
- with GNAT.Spitbol;                  use GNAT.Spitbol;
- with GNAT.Spitbol.Patterns;         use GNAT.Spitbol.Patterns;
- with GNAT.Spitbol.Table_VString;
- 
- procedure CEinfo is
- 
-    package TV renames GNAT.Spitbol.Table_VString;
-    use TV;
- 
-    Infil  : File_Type;
-    Lineno : Natural := 0;
- 
-    Err : exception;
-    --  Raised on error
- 
-    Fieldnm    : VString;
-    Accessfunc : VString;
-    Line       : VString;
- 
-    Fields : GNAT.Spitbol.Table_VString.Table (500);
-    --  Maps field names to underlying field access name
- 
-    UC : constant Pattern := Any ("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- 
-    Fnam : constant Pattern := (UC & Break (' ')) * Fieldnm;
- 
-    Field_Def : constant Pattern :=
-      "--    " & Fnam & " (" & Break (')') * Accessfunc;
- 
-    Field_Ref : constant Pattern :=
-      "   --    " & Fnam & Break ('(') & Len (1) &
-      Break (')') * Accessfunc;
- 
-    Field_Com : constant Pattern := "   --    " & Fnam & Span (' ') &
-                                      (Break (' ') or Rest) * Accessfunc;
- 
-    Func_Hedr : constant Pattern := "   function " & Fnam;
- 
-    Func_Retn : constant Pattern := "      return " & Break (' ') * Accessfunc;
- 
-    Proc_Hedr : constant Pattern := "   procedure " & Fnam;
- 
-    Proc_Setf : constant Pattern := "      Set_" & Break (' ') * Accessfunc;
- 
-    procedure Next_Line;
-    --  Read next line trimmed from Infil into Line and bump Lineno
- 
-    procedure Next_Line is
-    begin
-       Line := Get_Line (Infil);
-       Trim (Line);
-       Lineno := Lineno + 1;
-    end Next_Line;
- 
- --  Start of processing for CEinfo
- 
- begin
-    Anchored_Mode := True;
-    New_Line;
-    Open (Infil, In_File, "einfo.ads");
- 
-    Put_Line ("Acquiring field names from spec");
- 
-    loop
-       Next_Line;
- 
-       --  Old format of einfo.ads
- 
-       exit when Match (Line, "   -- Access Kinds --");
- 
-       --  New format of einfo.ads
- 
-       exit when Match (Line, "-- Access Kinds --");
- 
-       if Match (Line, Field_Def) then
-          Set (Fields, Fieldnm, Accessfunc);
-       end if;
-    end loop;
- 
-    Put_Line ("Checking consistent references in spec");
- 
-    loop
-       Next_Line;
-       exit when Match (Line, "   -- Description of Defined");
-    end loop;
- 
-    loop
-       Next_Line;
-       exit when Match (Line, "   -- Component_Alignment Control");
- 
-       if Match (Line, Field_Ref) then
-          if Accessfunc /= "synth"
-               and then
-             Accessfunc /= "special"
-               and then
-             Accessfunc /= Get (Fields, Fieldnm)
-          then
-             if Present (Fields, Fieldnm) then
-                Put_Line ("*** field name incorrect at line " & Lineno);
-                Put_Line ("      found field " & Accessfunc);
-                Put_Line ("      expecting field " & Get (Fields, Fieldnm));
- 
-             else
-                Put_Line
-                  ("*** unknown field name " & Fieldnm & " at line " & Lineno);
-             end if;
- 
-             raise Err;
-          end if;
-       end if;
-    end loop;
- 
-    Close (Infil);
-    Open (Infil, In_File, "einfo.adb");
-    Lineno := 0;
- 
-    Put_Line ("Check listing of fields in body");
- 
-    loop
-       Next_Line;
-       exit when Match (Line, "   -- Attribute Access Functions --");
- 
-       if Match (Line, Field_Com)
-         and then Fieldnm /= "(unused)"
-         and then Accessfunc /= Get (Fields, Fieldnm)
-       then
-          if Present (Fields, Fieldnm) then
-             Put_Line ("*** field name incorrect at line " & Lineno);
-             Put_Line ("      found field " & Accessfunc);
-             Put_Line ("      expecting field " & Get (Fields, Fieldnm));
- 
-          else
-             Put_Line
-               ("*** unknown field name " & Fieldnm & " at line " & Lineno);
-          end if;
- 
-          raise Err;
-       end if;
-    end loop;
- 
-    Put_Line ("Check references in access routines in body");
- 
-    loop
-       Next_Line;
-       exit when Match (Line, "   -- Classification Functions --");
- 
-       if Match (Line, Func_Hedr) then
-          null;
- 
-       elsif Match (Line, Func_Retn)
-         and then Accessfunc /= Get (Fields, Fieldnm)
-         and then Fieldnm /= "Mechanism"
-       then
-          Put_Line ("*** incorrect field at line " & Lineno);
-          Put_Line ("      found field " & Accessfunc);
-          Put_Line ("      expecting field " & Get (Fields, Fieldnm));
-          raise Err;
-       end if;
-    end loop;
- 
-    Put_Line ("Check references in set routines in body");
- 
-    loop
-       Next_Line;
-       exit when Match (Line, "   -- Attribute Set Procedures");
-    end loop;
- 
-    loop
-       Next_Line;
-       exit when Match (Line, "   ------------");
- 
-       if Match (Line, Proc_Hedr) then
-          null;
- 
-       elsif Match (Line, Proc_Setf)
-         and then Accessfunc /= Get (Fields, Fieldnm)
-         and then Fieldnm /= "Mechanism"
-       then
-          Put_Line ("*** incorrect field at line " & Lineno);
-          Put_Line ("      found field " & Accessfunc);
-          Put_Line ("      expecting field " & Get (Fields, Fieldnm));
-          raise Err;
-       end if;
-    end loop;
- 
-    Close (Infil);
- 
-    Put_Line ("All tests completed successfully, no errors detected");
- 
- end CEinfo;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/checks.adb gcc-12.1.0/gcc/ada/checks.adb
*** gcc-11.3.0/gcc/ada/checks.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/checks.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,68 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Eval_Fat; use Eval_Fat;
! with Exp_Ch11; use Exp_Ch11;
! with Exp_Ch4;  use Exp_Ch4;
! with Exp_Pakd; use Exp_Pakd;
! with Exp_Util; use Exp_Util;
! with Expander; use Expander;
! with Freeze;   use Freeze;
! with Lib;      use Lib;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Output;   use Output;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Disp; use Sem_Disp;
! with Sem_Eval; use Sem_Eval;
! with Sem_Mech; use Sem_Mech;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sem_Warn; use Sem_Warn;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Sprint;   use Sprint;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Targparm; use Targparm;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Validsw;  use Validsw;
  
  package body Checks is
  
--- 23,72 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Eval_Fat;       use Eval_Fat;
! with Exp_Ch11;       use Exp_Ch11;
! with Exp_Ch4;        use Exp_Ch4;
! with Exp_Pakd;       use Exp_Pakd;
! with Exp_Util;       use Exp_Util;
! with Expander;       use Expander;
! with Freeze;         use Freeze;
! with Lib;            use Lib;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Output;         use Output;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Mech;       use Sem_Mech;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Sprint;         use Sprint;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Validsw;        use Validsw;
  
  package body Checks is
  
*************** package body Checks is
*** 81,87 ****
     --  such as Apply_Scalar_Range_Check that do not insert any code can be
     --  safely called even when the Expander is inactive (but Errors_Detected
     --  is 0). The benefit of executing this code when expansion is off, is
!    --  the ability to emit constraint error warning for static expressions
     --  even when we are not generating code.
  
     --  The above is modified in gnatprove mode to ensure that proper check
--- 85,91 ----
     --  such as Apply_Scalar_Range_Check that do not insert any code can be
     --  safely called even when the Expander is inactive (but Errors_Detected
     --  is 0). The benefit of executing this code when expansion is off, is
!    --  the ability to emit constraint error warnings for static expressions
     --  even when we are not generating code.
  
     --  The above is modified in gnatprove mode to ensure that proper check
*************** package body Checks is
*** 376,383 ****
  
     function Accessibility_Checks_Suppressed (E : Entity_Id) return Boolean is
     begin
!       if Present (E) and then Checks_May_Be_Suppressed (E) then
           return Is_Check_Suppressed (E, Accessibility_Check);
        else
           return Scope_Suppress.Suppress (Accessibility_Check);
        end if;
--- 380,391 ----
  
     function Accessibility_Checks_Suppressed (E : Entity_Id) return Boolean is
     begin
!       if No_Dynamic_Accessibility_Checks_Enabled (E) then
!          return True;
! 
!       elsif Present (E) and then Checks_May_Be_Suppressed (E) then
           return Is_Check_Suppressed (E, Accessibility_Check);
+ 
        else
           return Scope_Suppress.Suppress (Accessibility_Check);
        end if;
*************** package body Checks is
*** 500,508 ****
                      not Range_Checks_Suppressed (Suppress_Typ);
  
     begin
!       --  For now we just return if Checks_On is false, however this should be
        --  enhanced to check for an always True value in the condition and to
!       --  generate a compilation warning???
  
        if not Checks_On then
           return;
--- 508,516 ----
                      not Range_Checks_Suppressed (Suppress_Typ);
  
     begin
!       --  For now we just return if Checks_On is false, however this could be
        --  enhanced to check for an always True value in the condition and to
!       --  generate a compilation warning.
  
        if not Checks_On then
           return;
*************** package body Checks is
*** 552,560 ****
  
        if Tagged_Type_Expansion
          and then Present (Etype (P))
!         and then RTU_Loaded (Ada_Tags)
!         and then RTE_Available (RE_Offset_To_Top_Ptr)
!         and then Etype (P) = RTE (RE_Offset_To_Top_Ptr)
        then
           return;
        end if;
--- 560,566 ----
  
        if Tagged_Type_Expansion
          and then Present (Etype (P))
!         and then Is_RTE (Etype (P), RE_Offset_To_Top_Ptr)
        then
           return;
        end if;
*************** package body Checks is
*** 581,586 ****
--- 587,597 ----
        Type_Level  : Node_Id;
  
     begin
+       --  Verify we haven't tried to add a dynamic accessibility check when we
+       --  shouldn't.
+ 
+       pragma Assert (not No_Dynamic_Accessibility_Checks_Enabled (N));
+ 
        if Ada_Version >= Ada_2012
           and then not Present (Param_Ent)
           and then Is_Entity_Name (N)
*************** package body Checks is
*** 836,842 ****
              else
                 Error_Msg_N
                   ("\address value may be incompatible with alignment of "
!                   & "object?X?", AC);
              end if;
           end if;
  
--- 847,853 ----
              else
                 Error_Msg_N
                   ("\address value may be incompatible with alignment of "
!                   & "object?.x?", AC);
              end if;
           end if;
  
*************** package body Checks is
*** 1377,1382 ****
--- 1388,1395 ----
  
           if Nkind (N) = N_Aggregate
             and then No (Expressions (N))
+            and then Nkind (First (Component_Associations (N))) =
+              N_Component_Association
             and then Nkind
              (First (Choices (First (Component_Associations (N)))))
                = N_Others_Choice
*************** package body Checks is
*** 2160,2166 ****
           Lo_OK := (Ifirst > 0);
  
        else
!          Lo := Machine (Expr_Type, UR_From_Uint (Ifirst), Round_Even, Expr);
           Lo_OK := (Lo >= UR_From_Uint (Ifirst));
        end if;
  
--- 2173,2179 ----
           Lo_OK := (Ifirst > 0);
  
        else
!          Lo := Machine_Number (Expr_Type, UR_From_Uint (Ifirst), Expr);
           Lo_OK := (Lo >= UR_From_Uint (Ifirst));
        end if;
  
*************** package body Checks is
*** 2203,2209 ****
           Hi := UR_From_Uint (Ilast) + Ureal_Half;
           Hi_OK := (Ilast < 0);
        else
!          Hi := Machine (Expr_Type, UR_From_Uint (Ilast), Round_Even, Expr);
           Hi_OK := (Hi <= UR_From_Uint (Ilast));
        end if;
  
--- 2216,2222 ----
           Hi := UR_From_Uint (Ilast) + Ureal_Half;
           Hi_OK := (Ilast < 0);
        else
!          Hi := Machine_Number (Expr_Type, UR_From_Uint (Ilast), Expr);
           Hi_OK := (Hi <= UR_From_Uint (Ilast));
        end if;
  
*************** package body Checks is
*** 2304,2309 ****
--- 2317,2327 ----
     is
        Loc : constant Source_Ptr := Sloc (Call);
  
+       function Parameter_Passing_Mechanism_Specified
+         (Typ : Entity_Id)
+          return Boolean;
+       --  Returns True if parameter-passing mechanism is specified for type Typ
+ 
        function May_Cause_Aliasing
          (Formal_1 : Entity_Id;
           Formal_2 : Entity_Id) return Boolean;
*************** package body Checks is
*** 2330,2335 ****
--- 2348,2366 ----
        --  Check contains all and-ed simple tests generated so far or remains
        --  unchanged in the case of detailed exception messaged.
  
+       -------------------------------------------
+       -- Parameter_Passing_Mechanism_Specified --
+       -------------------------------------------
+ 
+       function Parameter_Passing_Mechanism_Specified
+         (Typ : Entity_Id)
+          return Boolean
+       is
+       begin
+          return Is_Elementary_Type (Typ)
+            or else Is_By_Reference_Type (Typ);
+       end Parameter_Passing_Mechanism_Specified;
+ 
        ------------------------
        -- May_Cause_Aliasing --
        ------------------------
*************** package body Checks is
*** 2397,2405 ****
           Formal_2 : Entity_Id;
           Check    : in out Node_Id)
        is
!          Cond      : Node_Id;
!          ID_Casing : constant Casing_Type :=
!                        Identifier_Casing (Source_Index (Current_Sem_Unit));
  
        begin
           --  Generate:
--- 2428,2435 ----
           Formal_2 : Entity_Id;
           Check    : in out Node_Id)
        is
!          Cond        : Node_Id;
!          Formal_Name : Bounded_String;
  
        begin
           --  Generate:
*************** package body Checks is
*** 2431,2445 ****
  
              Store_String_Chars ("aliased parameters, actuals for """);
  
!             Get_Name_String (Chars (Formal_1));
!             Set_Casing (ID_Casing);
!             Store_String_Chars (Name_Buffer (1 .. Name_Len));
  
              Store_String_Chars (""" and """);
  
!             Get_Name_String (Chars (Formal_2));
!             Set_Casing (ID_Casing);
!             Store_String_Chars (Name_Buffer (1 .. Name_Len));
  
              Store_String_Chars (""" overlap");
  
--- 2461,2477 ----
  
              Store_String_Chars ("aliased parameters, actuals for """);
  
!             Append (Formal_Name, Chars (Formal_1));
!             Adjust_Name_Case (Formal_Name, Sloc (Formal_1));
!             Store_String_Chars (To_String (Formal_Name));
  
              Store_String_Chars (""" and """);
  
!             Formal_Name.Length := 0;
! 
!             Append (Formal_Name, Chars (Formal_2));
!             Adjust_Name_Case (Formal_Name, Sloc (Formal_2));
!             Store_String_Chars (To_String (Formal_Name));
  
              Store_String_Chars (""" overlap");
  
*************** package body Checks is
*** 2487,2533 ****
        while Present (Actual_1) and then Present (Formal_1) loop
           Orig_Act_1 := Original_Actual (Actual_1);
  
!          --  Ensure that the actual is an object that is not passed by value.
!          --  Elementary types are always passed by value, therefore actuals of
!          --  such types cannot lead to aliasing. An aggregate is an object in
!          --  Ada 2012, but an actual that is an aggregate cannot overlap with
!          --  another actual. A type that is By_Reference (such as an array of
!          --  controlled types) is not subject to the check because any update
!          --  will be done in place and a subsequent read will always see the
!          --  correct value, see RM 6.2 (12/3).
! 
!          if Nkind (Orig_Act_1) = N_Aggregate
!            or else (Nkind (Orig_Act_1) = N_Qualified_Expression
!                      and then Nkind (Expression (Orig_Act_1)) = N_Aggregate)
!          then
!             null;
! 
!          elsif Is_Object_Reference (Orig_Act_1)
!            and then not Is_Elementary_Type (Etype (Orig_Act_1))
!            and then not Is_By_Reference_Type (Etype (Orig_Act_1))
!          then
              Actual_2 := Next_Actual (Actual_1);
              Formal_2 := Next_Formal (Formal_1);
              while Present (Actual_2) and then Present (Formal_2) loop
                 Orig_Act_2 := Original_Actual (Actual_2);
  
!                --  The other actual we are testing against must also denote
!                --  a non pass-by-value object. Generate the check only when
!                --  the mode of the two formals may lead to aliasing.
  
!                if Is_Object_Reference (Orig_Act_2)
!                  and then not Is_Elementary_Type (Etype (Orig_Act_2))
                   and then May_Cause_Aliasing (Formal_1, Formal_2)
                 then
-                   Remove_Side_Effects (Actual_1);
-                   Remove_Side_Effects (Actual_2);
  
!                   Overlap_Check
!                     (Actual_1 => Actual_1,
!                      Actual_2 => Actual_2,
!                      Formal_1 => Formal_1,
!                      Formal_2 => Formal_2,
!                      Check    => Check);
                 end if;
  
                 Next_Actual (Actual_2);
--- 2519,2556 ----
        while Present (Actual_1) and then Present (Formal_1) loop
           Orig_Act_1 := Original_Actual (Actual_1);
  
!          if Is_Name_Reference (Orig_Act_1) then
              Actual_2 := Next_Actual (Actual_1);
              Formal_2 := Next_Formal (Formal_1);
              while Present (Actual_2) and then Present (Formal_2) loop
                 Orig_Act_2 := Original_Actual (Actual_2);
  
!                --  Generate the check only when the mode of the two formals may
!                --  lead to aliasing.
  
!                if Is_Name_Reference (Orig_Act_2)
                   and then May_Cause_Aliasing (Formal_1, Formal_2)
                 then
  
!                   --  The aliasing check only applies when some of the formals
!                   --  have their passing mechanism unspecified; RM 6.2 (12/3).
! 
!                   if Parameter_Passing_Mechanism_Specified (Etype (Orig_Act_1))
!                        and then
!                      Parameter_Passing_Mechanism_Specified (Etype (Orig_Act_2))
!                   then
!                      null;
!                   else
!                      Remove_Side_Effects (Actual_1);
!                      Remove_Side_Effects (Actual_2);
! 
!                      Overlap_Check
!                        (Actual_1 => Actual_1,
!                         Actual_2 => Actual_2,
!                         Formal_1 => Formal_1,
!                         Formal_2 => Formal_2,
!                         Check    => Check);
!                   end if;
                 end if;
  
                 Next_Actual (Actual_2);
*************** package body Checks is
*** 2702,2707 ****
--- 2725,2734 ----
  
        Subp_Spec := Parent (Subp);
  
+       if No (Subp_Spec) then
+          return;
+       end if;
+ 
        if Nkind (Subp_Spec) = N_Defining_Program_Unit_Name then
           Subp_Spec := Parent (Subp_Spec);
        end if;
*************** package body Checks is
*** 3299,3311 ****
  
                       Bad_Value (Warn => SPARK_Mode = On);
  
-                      --  In GNATprove mode, we enable the range check so that
-                      --  GNATprove will issue a message if it cannot be proved.
- 
-                      if GNATprove_Mode then
-                         Enable_Range_Check (Expr);
-                      end if;
- 
                       return;
                    end if;
  
--- 3326,3331 ----
*************** package body Checks is
*** 3461,3469 ****
              end if;
           end if;
  
-          --  If the item is a conditional raise of constraint error, then have
-          --  a look at what check is being performed and ???
- 
           if Nkind (R_Cno) = N_Raise_Constraint_Error
             and then Present (Condition (R_Cno))
           then
--- 3481,3486 ----
*************** package body Checks is
*** 3537,3545 ****
     -- Apply_Subscript_Validity_Checks --
     -------------------------------------
  
!    procedure Apply_Subscript_Validity_Checks (Expr : Node_Id) is
        Sub : Node_Id;
  
     begin
        pragma Assert (Nkind (Expr) = N_Indexed_Component);
  
--- 3554,3565 ----
     -- Apply_Subscript_Validity_Checks --
     -------------------------------------
  
!    procedure Apply_Subscript_Validity_Checks
!      (Expr            : Node_Id;
!       No_Check_Needed : Dimension_Set := Empty_Dimension_Set) is
        Sub : Node_Id;
  
+       Dimension : Pos := 1;
     begin
        pragma Assert (Nkind (Expr) = N_Indexed_Component);
  
*************** package body Checks is
*** 3553,3563 ****
           --  for the subscript, and that convert will do the necessary validity
           --  check.
  
!          Ensure_Valid (Sub, Holes_OK => True);
  
           --  Move to next subscript
  
           Next (Sub);
        end loop;
     end Apply_Subscript_Validity_Checks;
  
--- 3573,3588 ----
           --  for the subscript, and that convert will do the necessary validity
           --  check.
  
!          if (No_Check_Needed = Empty_Dimension_Set)
!            or else not No_Check_Needed.Elements (Dimension)
!          then
!             Ensure_Valid (Sub, Holes_OK => True);
!          end if;
  
           --  Move to next subscript
  
           Next (Sub);
+          Dimension := Dimension + 1;
        end loop;
     end Apply_Subscript_Validity_Checks;
  
*************** package body Checks is
*** 3575,3580 ****
--- 3600,3715 ----
        --  full view might have discriminants with defaults, so we need the
        --  full view here to retrieve the constraints.
  
+       procedure Make_Discriminant_Constraint_Check
+         (Target_Type : Entity_Id;
+          Expr_Type   : Entity_Id);
+       --  Generate a discriminant check based on the target type and expression
+       --  type for Expr.
+ 
+       ----------------------------------------
+       -- Make_Discriminant_Constraint_Check --
+       ----------------------------------------
+ 
+       procedure Make_Discriminant_Constraint_Check
+         (Target_Type : Entity_Id;
+          Expr_Type   : Entity_Id)
+       is
+          Loc         : constant Source_Ptr := Sloc (N);
+          Cond        : Node_Id;
+          Constraint  : Elmt_Id;
+          Discr_Value : Node_Id;
+          Discr       : Entity_Id;
+ 
+          New_Constraints : constant Elist_Id := New_Elmt_List;
+          Old_Constraints : constant Elist_Id :=
+            Discriminant_Constraint (Expr_Type);
+ 
+       begin
+          --  Build an actual discriminant constraint list using the stored
+          --  constraint, to verify that the expression of the parent type
+          --  satisfies the constraints imposed by the (unconstrained) derived
+          --  type. This applies to value conversions, not to view conversions
+          --  of tagged types.
+ 
+          Constraint := First_Elmt (Stored_Constraint (Target_Type));
+          while Present (Constraint) loop
+             Discr_Value := Node (Constraint);
+ 
+             if Is_Entity_Name (Discr_Value)
+               and then Ekind (Entity (Discr_Value)) = E_Discriminant
+             then
+                Discr := Corresponding_Discriminant (Entity (Discr_Value));
+ 
+                if Present (Discr)
+                  and then Scope (Discr) = Base_Type (Expr_Type)
+                then
+                   --  Parent is constrained by new discriminant. Obtain
+                   --  Value of original discriminant in expression. If the
+                   --  new discriminant has been used to constrain more than
+                   --  one of the stored discriminants, this will provide the
+                   --  required consistency check.
+ 
+                   Append_Elmt
+                     (Make_Selected_Component (Loc,
+                        Prefix        =>
+                          Duplicate_Subexpr_No_Checks
+                            (Expr, Name_Req => True),
+                        Selector_Name =>
+                          Make_Identifier (Loc, Chars (Discr))),
+                      New_Constraints);
+ 
+                else
+                   --  Discriminant of more remote ancestor ???
+ 
+                   return;
+                end if;
+ 
+             --  Derived type definition has an explicit value for this
+             --  stored discriminant.
+ 
+             else
+                Append_Elmt
+                  (Duplicate_Subexpr_No_Checks (Discr_Value),
+                   New_Constraints);
+             end if;
+ 
+             Next_Elmt (Constraint);
+          end loop;
+ 
+          --  Use the unconstrained expression type to retrieve the
+          --  discriminants of the parent, and apply momentarily the
+          --  discriminant constraint synthesized above.
+ 
+          --  Note: We use Expr_Type instead of Target_Type since the number of
+          --  actual discriminants may be different due to the presence of
+          --  stored discriminants and cause Build_Discriminant_Checks to fail.
+ 
+          Set_Discriminant_Constraint (Expr_Type, New_Constraints);
+          Cond := Build_Discriminant_Checks (Expr, Expr_Type);
+          Set_Discriminant_Constraint (Expr_Type, Old_Constraints);
+ 
+          --  Conversion between access types requires that we check for null
+          --  before checking discriminants.
+ 
+          if Is_Access_Type (Etype (Expr)) then
+             Cond := Make_And_Then (Loc,
+                       Left_Opnd  =>
+                         Make_Op_Ne (Loc,
+                           Left_Opnd  =>
+                             Duplicate_Subexpr_No_Checks
+                               (Expr, Name_Req => True),
+                           Right_Opnd => Make_Null (Loc)),
+                       Right_Opnd => Cond);
+          end if;
+ 
+          Insert_Action (N,
+            Make_Raise_Constraint_Error (Loc,
+              Condition => Cond,
+              Reason    => CE_Discriminant_Check_Failed));
+       end Make_Discriminant_Constraint_Check;
+ 
+    --  Start of processing for Apply_Type_Conversion_Checks
+ 
     begin
        if Inside_A_Generic then
           return;
*************** package body Checks is
*** 3704,3794 ****
              end if;
           end;
  
!       elsif Comes_From_Source (N)
!         and then not Discriminant_Checks_Suppressed (Target_Type)
!         and then Is_Record_Type (Target_Type)
!         and then Is_Derived_Type (Target_Type)
!         and then not Is_Tagged_Type (Target_Type)
!         and then not Is_Constrained (Target_Type)
!         and then Present (Stored_Constraint (Target_Type))
!       then
!          --  An unconstrained derived type may have inherited discriminant.
!          --  Build an actual discriminant constraint list using the stored
!          --  constraint, to verify that the expression of the parent type
!          --  satisfies the constraints imposed by the (unconstrained) derived
!          --  type. This applies to value conversions, not to view conversions
!          --  of tagged types.
! 
!          declare
!             Loc         : constant Source_Ptr := Sloc (N);
!             Cond        : Node_Id;
!             Constraint  : Elmt_Id;
!             Discr_Value : Node_Id;
!             Discr       : Entity_Id;
! 
!             New_Constraints : constant Elist_Id := New_Elmt_List;
!             Old_Constraints : constant Elist_Id :=
!               Discriminant_Constraint (Expr_Type);
! 
!          begin
!             Constraint := First_Elmt (Stored_Constraint (Target_Type));
!             while Present (Constraint) loop
!                Discr_Value := Node (Constraint);
! 
!                if Is_Entity_Name (Discr_Value)
!                  and then Ekind (Entity (Discr_Value)) = E_Discriminant
!                then
!                   Discr := Corresponding_Discriminant (Entity (Discr_Value));
! 
!                   if Present (Discr)
!                     and then Scope (Discr) = Base_Type (Expr_Type)
!                   then
!                      --  Parent is constrained by new discriminant. Obtain
!                      --  Value of original discriminant in expression. If the
!                      --  new discriminant has been used to constrain more than
!                      --  one of the stored discriminants, this will provide the
!                      --  required consistency check.
! 
!                      Append_Elmt
!                        (Make_Selected_Component (Loc,
!                           Prefix        =>
!                             Duplicate_Subexpr_No_Checks
!                               (Expr, Name_Req => True),
!                           Selector_Name =>
!                             Make_Identifier (Loc, Chars (Discr))),
!                         New_Constraints);
  
!                   else
!                      --  Discriminant of more remote ancestor ???
  
!                      return;
!                   end if;
  
!                --  Derived type definition has an explicit value for this
!                --  stored discriminant.
  
!                else
!                   Append_Elmt
!                     (Duplicate_Subexpr_No_Checks (Discr_Value),
!                      New_Constraints);
!                end if;
  
!                Next_Elmt (Constraint);
!             end loop;
  
!             --  Use the unconstrained expression type to retrieve the
!             --  discriminants of the parent, and apply momentarily the
!             --  discriminant constraint synthesized above.
  
!             Set_Discriminant_Constraint (Expr_Type, New_Constraints);
!             Cond := Build_Discriminant_Checks (Expr, Expr_Type);
!             Set_Discriminant_Constraint (Expr_Type, Old_Constraints);
  
!             Insert_Action (N,
!               Make_Raise_Constraint_Error (Loc,
!                 Condition => Cond,
!                 Reason    => CE_Discriminant_Check_Failed));
!          end;
  
        --  For arrays, checks are set now, but conversions are applied during
        --  expansion, to take into accounts changes of representation. The
--- 3839,3880 ----
              end if;
           end;
  
!       --  Generate discriminant constraint checks for access types on the
!       --  designated target type's stored constraints.
  
!       --  Do we need to generate subtype predicate checks here as well ???
  
!       elsif Comes_From_Source (N)
!         and then Ekind (Target_Type) = E_General_Access_Type
  
!         --  Check that both of the designated types have known discriminants,
!         --  and that such checks on the target type are not suppressed.
  
!         and then Has_Discriminants (Directly_Designated_Type (Target_Type))
!         and then Has_Discriminants (Directly_Designated_Type (Expr_Type))
!         and then not Discriminant_Checks_Suppressed
!                        (Directly_Designated_Type (Target_Type))
  
!         --  Verify the designated type of the target has stored constraints
  
!         and then Present
!                    (Stored_Constraint (Directly_Designated_Type (Target_Type)))
!       then
!          Make_Discriminant_Constraint_Check
!            (Target_Type => Directly_Designated_Type (Target_Type),
!             Expr_Type   => Directly_Designated_Type (Expr_Type));
  
!       --  Create discriminant checks for the Target_Type's stored constraints
  
!       elsif Comes_From_Source (N)
!         and then not Discriminant_Checks_Suppressed (Target_Type)
!         and then Is_Record_Type (Target_Type)
!         and then Is_Derived_Type (Target_Type)
!         and then not Is_Tagged_Type (Target_Type)
!         and then not Is_Constrained (Target_Type)
!         and then Present (Stored_Constraint (Target_Type))
!       then
!          Make_Discriminant_Constraint_Check (Target_Type, Expr_Type);
  
        --  For arrays, checks are set now, but conversions are applied during
        --  expansion, to take into accounts changes of representation. The
*************** package body Checks is
*** 4369,4376 ****
  
              Discard_Node
                (Compile_Time_Constraint_Error
!                  (N      => N,
!                   Msg    =>
                      "(Ada 2005) null-excluding component % of object % must "
                      & "be initialized??",
                    Ent => Defining_Identifier (Comp)));
--- 4455,4462 ----
  
              Discard_Node
                (Compile_Time_Constraint_Error
!                  (N   => N,
!                   Msg =>
                      "(Ada 2005) null-excluding component % of object % must "
                      & "be initialized??",
                    Ent => Defining_Identifier (Comp)));
*************** package body Checks is
*** 4381,4388 ****
           elsif Array_Comp then
              Discard_Node
                (Compile_Time_Constraint_Error
!                  (N      => N,
!                   Msg    =>
                      "(Ada 2005) null-excluding array components must "
                      & "be initialized??",
                    Ent => Defining_Identifier (N)));
--- 4467,4474 ----
           elsif Array_Comp then
              Discard_Node
                (Compile_Time_Constraint_Error
!                  (N   => N,
!                   Msg =>
                      "(Ada 2005) null-excluding array components must "
                      & "be initialized??",
                    Ent => Defining_Identifier (N)));
*************** package body Checks is
*** 5350,5357 ****
                       OK1 := True;
                    end;
  
!                --  No special handling for other attributes
!                --  Probably more opportunities exist here???
  
                 when others =>
                    OK1 := False;
--- 5436,5442 ----
                       OK1 := True;
                    end;
  
!                --  No special handling for other attributes for now
  
                 when others =>
                    OK1 := False;
*************** package body Checks is
*** 5480,5486 ****
        --  the results in Lo_Right, Hi_Right, Lo_Left, Hi_Left.
  
        function Round_Machine (B : Ureal) return Ureal;
!       --  B is a real bound. Round it using mode Round_Even.
  
        -----------------
        -- OK_Operands --
--- 5565,5571 ----
        --  the results in Lo_Right, Hi_Right, Lo_Left, Hi_Left.
  
        function Round_Machine (B : Ureal) return Ureal;
!       --  B is a real bound. Round it to the nearest machine number.
  
        -----------------
        -- OK_Operands --
*************** package body Checks is
*** 5506,5512 ****
  
        function Round_Machine (B : Ureal) return Ureal is
        begin
!          return Machine (Typ, B, Round_Even, N);
        end Round_Machine;
  
     --  Start of processing for Determine_Range_R
--- 5591,5597 ----
  
        function Round_Machine (B : Ureal) return Ureal is
        begin
!          return Machine_Number (Typ, B, N);
        end Round_Machine;
  
     --  Start of processing for Determine_Range_R
*************** package body Checks is
*** 5547,5552 ****
--- 5632,5641 ----
  
        --  If type is not defined, we can't determine its range
  
+       pragma Warnings (Off, "condition can only be True if invalid");
+       --  Otherwise the compiler warns on the check of Float_Rep below, because
+       --  there is only one value (see types.ads).
+ 
        if No (Typ)
  
          --  We don't deal with anything except IEEE floating-point types
*************** package body Checks is
*** 5560,5565 ****
--- 5649,5655 ----
  
          or else Error_Posted (N) or else Error_Posted (Typ)
        then
+          pragma Warnings (On, "condition can only be True if invalid");
           OK := False;
           return;
        end if;
*************** package body Checks is
*** 6588,6595 ****
        elsif not Comes_From_Source (Expr)
          and then not
            (Nkind (Expr) = N_Identifier
!             and then Present (Renamed_Object (Entity (Expr)))
!             and then Comes_From_Source (Renamed_Object (Entity (Expr))))
          and then not Force_Validity_Checks
          and then (Nkind (Expr) /= N_Unchecked_Type_Conversion
                      or else Kill_Range_Check (Expr))
--- 6678,6686 ----
        elsif not Comes_From_Source (Expr)
          and then not
            (Nkind (Expr) = N_Identifier
!             and then Present (Renamed_Entity_Or_Object (Entity (Expr)))
!             and then
!               Comes_From_Source (Renamed_Entity_Or_Object (Entity (Expr))))
          and then not Force_Validity_Checks
          and then (Nkind (Expr) /= N_Unchecked_Type_Conversion
                      or else Kill_Range_Check (Expr))
*************** package body Checks is
*** 6812,6817 ****
--- 6903,6909 ----
        elsif Is_Known_Valid (Typ) then
           if Is_Entity_Name (Expr)
             and then Ekind (Entity (Expr)) = E_Variable
+            and then Known_Esize (Entity (Expr))
             and then Esize (Entity (Expr)) > Esize (Typ)
           then
              return False;
*************** package body Checks is
*** 7152,7158 ****
     -- Generate_Index_Checks --
     ---------------------------
  
!    procedure Generate_Index_Checks (N : Node_Id) is
  
        function Entity_Of_Prefix return Entity_Id;
        --  Returns the entity of the prefix of N (or Empty if not found)
--- 7244,7253 ----
     -- Generate_Index_Checks --
     ---------------------------
  
!    procedure Generate_Index_Checks
!      (N                : Node_Id;
!       Checks_Generated : out Dimension_Set)
!    is
  
        function Entity_Of_Prefix return Entity_Id;
        --  Returns the entity of the prefix of N (or Empty if not found)
*************** package body Checks is
*** 7187,7192 ****
--- 7282,7289 ----
     --  Start of processing for Generate_Index_Checks
  
     begin
+       Checks_Generated.Elements := (others => False);
+ 
        --  Ignore call if the prefix is not an array since we have a serious
        --  error in the sources. Ignore it also if index checks are suppressed
        --  for array object or type.
*************** package body Checks is
*** 7249,7254 ****
--- 7346,7353 ----
                           Prefix         => New_Occurrence_Of (Etype (A), Loc),
                           Attribute_Name => Name_Range)),
                  Reason => CE_Index_Check_Failed));
+ 
+             Checks_Generated.Elements (1) := True;
           end if;
  
        --  General case
*************** package body Checks is
*** 7335,7340 ****
--- 7434,7441 ----
                                 Duplicate_Subexpr_Move_Checks (Sub)),
                             Right_Opnd => Range_N),
                        Reason => CE_Index_Check_Failed));
+ 
+                   Checks_Generated.Elements (Ind) := True;
                 end if;
  
                 Next_Index (A_Idx);
*************** package body Checks is
*** 7745,7754 ****
                       New_Occurrence_Of (Target_Base_Type, Loc),
                     Constant_Present    => True,
                     Expression          =>
!                      Make_Unchecked_Type_Conversion (Loc,
!                        Subtype_Mark =>
!                          New_Occurrence_Of (Target_Base_Type, Loc),
!                        Expression   => Duplicate_Subexpr (N))),
  
                   Make_Raise_Constraint_Error (Loc,
                     Condition =>
--- 7846,7853 ----
                       New_Occurrence_Of (Target_Base_Type, Loc),
                     Constant_Present    => True,
                     Expression          =>
!                      Unchecked_Convert_To
!                        (Target_Base_Type, Duplicate_Subexpr (N))),
  
                   Make_Raise_Constraint_Error (Loc,
                     Condition =>
*************** package body Checks is
*** 7941,7947 ****
     begin
        --  For now we just return if Checks_On is false, however this should be
        --  enhanced to check for an always True value in the condition and to
!       --  generate a compilation warning???
  
        if not Expander_Active or not Checks_On then
           return;
--- 8040,8046 ----
     begin
        --  For now we just return if Checks_On is false, however this should be
        --  enhanced to check for an always True value in the condition and to
!       --  generate a compilation warning.
  
        if not Expander_Active or not Checks_On then
           return;
*************** package body Checks is
*** 7981,7987 ****
        Is_High_Bound : Boolean   := False)
     is
        Loc : constant Source_Ptr := Sloc (Expr);
!       Typ : constant Entity_Id  := Etype (Expr);
        Exp : Node_Id;
  
     begin
--- 8080,8086 ----
        Is_High_Bound : Boolean   := False)
     is
        Loc : constant Source_Ptr := Sloc (Expr);
!       Typ : Entity_Id           := Etype (Expr);
        Exp : Node_Id;
  
     begin
*************** package body Checks is
*** 8041,8046 ****
--- 8140,8146 ----
        while Nkind (Exp) = N_Type_Conversion loop
           Exp := Expression (Exp);
        end loop;
+       Typ := Etype (Exp);
  
        --  Do not generate a check for a variable which already validates the
        --  value of an assignable object.
*************** package body Checks is
*** 8099,8105 ****
              --  cause our object declaration to remain unanalyzed we must do
              --  some manual decoration.
  
!             Set_Ekind (Var_Id, E_Variable);
              Set_Etype (Var_Id, Typ);
  
              Insert_Action (Exp,
--- 8199,8205 ----
              --  cause our object declaration to remain unanalyzed we must do
              --  some manual decoration.
  
!             Mutate_Ekind (Var_Id, E_Variable);
              Set_Etype (Var_Id, Typ);
  
              Insert_Action (Exp,
*************** package body Checks is
*** 8121,8126 ****
--- 8221,8234 ----
                 Set_Do_Range_Check (Validated_Object (Var_Id), False);
              end if;
  
+             --  In case of a type conversion, an expansion of the expr may be
+             --  needed (eg. fixed-point as actual).
+ 
+             if Exp /= Expr then
+                pragma Assert (Nkind (Expr) = N_Type_Conversion);
+                Analyze_And_Resolve (Expr);
+             end if;
+ 
              PV := New_Occurrence_Of (Var_Id, Loc);
  
           --  Otherwise the expression does not denote a variable. Force its
*************** package body Checks is
*** 8470,8491 ****
           return;
        end if;
  
-       --  No check needed for the Get_Current_Excep.all.all idiom generated by
-       --  the expander within exception handlers, since we know that the value
-       --  can never be null.
- 
-       --  Is this really the right way to do this? Normally we generate such
-       --  code in the expander with checks off, and that's how we suppress this
-       --  kind of junk check ???
- 
-       if Nkind (N) = N_Function_Call
-         and then Nkind (Name (N)) = N_Explicit_Dereference
-         and then Nkind (Prefix (Name (N))) = N_Identifier
-         and then Is_RTE (Entity (Prefix (Name (N))), RE_Get_Current_Excep)
-       then
-          return;
-       end if;
- 
        --  In GNATprove mode, we do not apply the check
  
        if GNATprove_Mode then
--- 8578,8583 ----
*************** package body Checks is
*** 8573,8579 ****
           return;
  
        --  Do not generate an elaboration check if the related subprogram is
!       --  not subjected to accessibility checks.
  
        elsif Elaboration_Checks_Suppressed (Subp_Id) then
           return;
--- 8665,8671 ----
           return;
  
        --  Do not generate an elaboration check if the related subprogram is
!       --  not subject to elaboration checks.
  
        elsif Elaboration_Checks_Suppressed (Subp_Id) then
           return;
*************** package body Checks is
*** 8583,8596 ****
        elsif Restriction_Active (No_Elaboration_Code) then
           return;
  
        --  Do not generate an elaboration check if exceptions cannot be used,
        --  caught, or propagated.
  
        elsif not Exceptions_OK then
           return;
  
!       --  Do not consider subprograms which act as compilation units, because
!       --  they cannot be the target of a dispatching call.
  
        elsif Nkind (Context) = N_Compilation_Unit then
           return;
--- 8675,8694 ----
        elsif Restriction_Active (No_Elaboration_Code) then
           return;
  
+       --  If pragma Pure or Preelaborate applies, then these elaboration checks
+       --  cannot fail, so do not generate them.
+ 
+       elsif In_Preelaborated_Unit then
+          return;
+ 
        --  Do not generate an elaboration check if exceptions cannot be used,
        --  caught, or propagated.
  
        elsif not Exceptions_OK then
           return;
  
!       --  Do not consider subprograms that are compilation units, because they
!       --  cannot be the target of a dispatching call.
  
        elsif Nkind (Context) = N_Compilation_Unit then
           return;
*************** package body Checks is
*** 8620,8629 ****
        elsif Analyzed (Subp_Body) then
           return;
  
!       --  Do not consider primitives which occur within an instance that acts
!       --  as a compilation unit. Such an instance defines its spec and body out
!       --  of order (body is first) within the tree, which causes the reference
!       --  to the elaboration flag to appear as an undefined symbol.
  
        elsif Within_Compilation_Unit_Instance (Subp_Id) then
           return;
--- 8718,8727 ----
        elsif Analyzed (Subp_Body) then
           return;
  
!       --  Do not consider primitives that occur within an instance that is a
!       --  compilation unit. Such an instance defines its spec and body out of
!       --  order (body is first) within the tree, which causes the reference to
!       --  the elaboration flag to appear as an undefined symbol.
  
        elsif Within_Compilation_Unit_Instance (Subp_Id) then
           return;
*************** package body Checks is
*** 8991,8997 ****
  
        function In_Result_Range return Boolean is
        begin
!          if Lo = No_Uint or else Hi = No_Uint then
              return False;
  
           elsif Is_OK_Static_Subtype (Etype (N)) then
--- 9089,9095 ----
  
        function In_Result_Range return Boolean is
        begin
!          if No (Lo) or else No (Hi) then
              return False;
  
           elsif Is_OK_Static_Subtype (Etype (N)) then
*************** package body Checks is
*** 9012,9018 ****
  
        procedure Max (A : in out Uint; B : Uint) is
        begin
!          if A = No_Uint or else B > A then
              A := B;
           end if;
        end Max;
--- 9110,9116 ----
  
        procedure Max (A : in out Uint; B : Uint) is
        begin
!          if No (A) or else B > A then
              A := B;
           end if;
        end Max;
*************** package body Checks is
*** 9023,9029 ****
  
        procedure Min (A : in out Uint; B : Uint) is
        begin
!          if A = No_Uint or else B < A then
              A := B;
           end if;
        end Min;
--- 9121,9127 ----
  
        procedure Min (A : in out Uint; B : Uint) is
        begin
!          if No (A) or else B < A then
              A := B;
           end if;
        end Min;
*************** package body Checks is
*** 9129,9142 ****
              Minimize_Eliminate_Overflows
                (Then_DE, Lo, Hi, Top_Level => False);
  
!             if Lo = No_Uint then
                 Bignum_Operands := True;
              end if;
  
              Minimize_Eliminate_Overflows
                (Else_DE, Rlo, Rhi, Top_Level => False);
  
!             if Rlo = No_Uint then
                 Bignum_Operands := True;
              else
                 Long_Long_Integer_Operands :=
--- 9227,9240 ----
              Minimize_Eliminate_Overflows
                (Then_DE, Lo, Hi, Top_Level => False);
  
!             if No (Lo) then
                 Bignum_Operands := True;
              end if;
  
              Minimize_Eliminate_Overflows
                (Else_DE, Rlo, Rhi, Top_Level => False);
  
!             if No (Rlo) then
                 Bignum_Operands := True;
              else
                 Long_Long_Integer_Operands :=
*************** package body Checks is
*** 9211,9217 ****
                    Minimize_Eliminate_Overflows
                      (Aexp, Lo, Hi, Top_Level => False);
  
!                   if Lo = No_Uint then
                       Bignum_Operands := True;
                    elsif Etype (Aexp) = LLIB then
                       Long_Long_Integer_Operands := True;
--- 9309,9315 ----
                    Minimize_Eliminate_Overflows
                      (Aexp, Lo, Hi, Top_Level => False);
  
!                   if No (Lo) then
                       Bignum_Operands := True;
                    elsif Etype (Aexp) = LLIB then
                       Long_Long_Integer_Operands := True;
*************** package body Checks is
*** 9256,9262 ****
  
                       Append_To (New_Alts,
                         Make_Case_Expression_Alternative (Sloc (Alt),
-                          Actions          => No_List,
                           Discrete_Choices => Discrete_Choices (Alt),
                           Expression       => New_Exp));
  
--- 9354,9359 ----
*************** package body Checks is
*** 9301,9307 ****
        --  numbers at compile time for very little gain (the number of cases
        --  in which we could slip back from bignum mode is small).
  
!       if Rlo = No_Uint or else (Binary and then Llo = No_Uint) then
           Lo := No_Uint;
           Hi := No_Uint;
           Bignum_Operands := True;
--- 9398,9404 ----
        --  numbers at compile time for very little gain (the number of cases
        --  in which we could slip back from bignum mode is small).
  
!       if No (Rlo) or else (Binary and then No (Llo)) then
           Lo := No_Uint;
           Hi := No_Uint;
           Bignum_Operands := True;
*************** package body Checks is
*** 9374,9380 ****
        --  0 .. 1, but the cases are rare and it is not worth the effort.
        --  Failing to do this switching back is only an efficiency issue.
  
!       elsif Lo = No_Uint or else Lo < LLLo or else Hi > LLHi then
  
           --  OK, we are definitely outside the range of Long_Long_Integer. The
           --  question is whether to move to Bignum mode, or stay in the domain
--- 9471,9477 ----
        --  0 .. 1, but the cases are rare and it is not worth the effort.
        --  Failing to do this switching back is only an efficiency issue.
  
!       elsif No (Lo) or else Lo < LLLo or else Hi > LLHi then
  
           --  OK, we are definitely outside the range of Long_Long_Integer. The
           --  question is whether to move to Bignum mode, or stay in the domain
*************** package body Checks is
*** 9697,9705 ****
              when N_Attribute_Reference =>
                 Set_Do_Overflow_Check (N, False);
  
-             when N_Function_Call =>
-                Set_Do_Tag_Check (N, False);
- 
              when N_Op =>
                 Set_Do_Overflow_Check (N, False);
  
--- 9794,9799 ----
*************** package body Checks is
*** 9735,9741 ****
  
              when N_Type_Conversion =>
                 Set_Do_Length_Check   (N, False);
-                Set_Do_Tag_Check      (N, False);
                 Set_Do_Overflow_Check (N, False);
  
              when others =>
--- 9829,9834 ----
*************** package body Checks is
*** 9776,9783 ****
        --  Adds the action given to Ret_Result if N is non-Empty
  
        function Get_E_Length (E : Entity_Id; Indx : Nat) return Node_Id;
        function Get_N_Length (N : Node_Id; Indx : Nat) return Node_Id;
!       --  Comments required ???
  
        function Same_Bounds (L : Node_Id; R : Node_Id) return Boolean;
        --  True for equal literals and for nodes that denote the same constant
--- 9869,9878 ----
        --  Adds the action given to Ret_Result if N is non-Empty
  
        function Get_E_Length (E : Entity_Id; Indx : Nat) return Node_Id;
+       --  Return E'Length (Indx)
+ 
        function Get_N_Length (N : Node_Id; Indx : Nat) return Node_Id;
!       --  Return N'Length (Indx)
  
        function Same_Bounds (L : Node_Id; R : Node_Id) return Boolean;
        --  True for equal literals and for nodes that denote the same constant
*************** package body Checks is
*** 9813,9820 ****
        begin
           if Present (N) then
  
!             --  For now, ignore attempt to place more than two checks ???
!             --  This is really worrisome, are we really discarding checks ???
  
              if Num_Checks = 2 then
                 return;
--- 9908,9917 ----
        begin
           if Present (N) then
  
!             --  We do not support inserting more than 2 checks on the same
!             --  node. If this happens it means we have already added an
!             --  unconditional raise, so we can skip the other checks safely
!             --  since N will always raise an exception.
  
              if Num_Checks = 2 then
                 return;
*************** package body Checks is
*** 9867,9874 ****
  
              declare
                 Indx_Type : Node_Id;
!                Lo        : Node_Id;
!                Hi        : Node_Id;
                 Do_Expand : Boolean := False;
  
              begin
--- 9964,9970 ----
  
              declare
                 Indx_Type : Node_Id;
!                Bounds    : Range_Nodes;
                 Do_Expand : Boolean := False;
  
              begin
*************** package body Checks is
*** 9878,9914 ****
                    Next_Index (Indx_Type);
                 end loop;
  
!                Get_Index_Bounds (Indx_Type, Lo, Hi);
  
!                if Nkind (Lo) = N_Identifier
!                  and then Ekind (Entity (Lo)) = E_In_Parameter
                 then
!                   Lo := Get_Discriminal (E, Lo);
                    Do_Expand := True;
                 end if;
  
!                if Nkind (Hi) = N_Identifier
!                  and then Ekind (Entity (Hi)) = E_In_Parameter
                 then
!                   Hi := Get_Discriminal (E, Hi);
                    Do_Expand := True;
                 end if;
  
                 if Do_Expand then
!                   if not Is_Entity_Name (Lo) then
!                      Lo := Duplicate_Subexpr_No_Checks (Lo);
                    end if;
  
!                   if not Is_Entity_Name (Hi) then
!                      Lo := Duplicate_Subexpr_No_Checks (Hi);
                    end if;
  
                    N :=
                      Make_Op_Add (Loc,
                        Left_Opnd =>
                          Make_Op_Subtract (Loc,
!                           Left_Opnd  => Hi,
!                           Right_Opnd => Lo),
  
                        Right_Opnd => Make_Integer_Literal (Loc, 1));
                    return N;
--- 9974,10011 ----
                    Next_Index (Indx_Type);
                 end loop;
  
!                Bounds := Get_Index_Bounds (Indx_Type);
  
!                if Nkind (Bounds.First) = N_Identifier
!                  and then Ekind (Entity (Bounds.First)) = E_In_Parameter
                 then
!                   Bounds.First := Get_Discriminal (E, Bounds.First);
                    Do_Expand := True;
                 end if;
  
!                if Nkind (Bounds.Last) = N_Identifier
!                  and then Ekind (Entity (Bounds.Last)) = E_In_Parameter
                 then
!                   Bounds.Last := Get_Discriminal (E, Bounds.Last);
                    Do_Expand := True;
                 end if;
  
                 if Do_Expand then
!                   if not Is_Entity_Name (Bounds.First) then
!                      Bounds.First :=
!                        Duplicate_Subexpr_No_Checks (Bounds.First);
                    end if;
  
!                   if not Is_Entity_Name (Bounds.Last) then
!                      Bounds.First := Duplicate_Subexpr_No_Checks (Bounds.Last);
                    end if;
  
                    N :=
                      Make_Op_Add (Loc,
                        Left_Opnd =>
                          Make_Op_Subtract (Loc,
!                           Left_Opnd  => Bounds.Last,
!                           Right_Opnd => Bounds.First),
  
                        Right_Opnd => Make_Integer_Literal (Loc, 1));
                    return N;
*************** package body Checks is
*** 10151,10160 ****
  
                    L_Index  : Node_Id;
                    R_Index  : Node_Id;
!                   L_Low    : Node_Id;
!                   L_High   : Node_Id;
!                   R_Low    : Node_Id;
!                   R_High   : Node_Id;
                    L_Length : Uint;
                    R_Length : Uint;
                    Ref_Node : Node_Id;
--- 10248,10255 ----
  
                    L_Index  : Node_Id;
                    R_Index  : Node_Id;
!                   L_Bounds : Range_Nodes;
!                   R_Bounds : Range_Nodes;
                    L_Length : Uint;
                    R_Length : Uint;
                    Ref_Node : Node_Id;
*************** package body Checks is
*** 10186,10214 ****
                                 or else
                               Nkind (R_Index) = N_Raise_Constraint_Error)
                       then
!                         Get_Index_Bounds (L_Index, L_Low, L_High);
!                         Get_Index_Bounds (R_Index, R_Low, R_High);
  
                          --  Deal with compile time length check. Note that we
                          --  skip this in the access case, because the access
                          --  value may be null, so we cannot know statically.
  
                          if not Do_Access
!                           and then Compile_Time_Known_Value (L_Low)
!                           and then Compile_Time_Known_Value (L_High)
!                           and then Compile_Time_Known_Value (R_Low)
!                           and then Compile_Time_Known_Value (R_High)
                          then
!                            if Expr_Value (L_High) >= Expr_Value (L_Low) then
!                               L_Length := Expr_Value (L_High) -
!                                           Expr_Value (L_Low) + 1;
                             else
                                L_Length := UI_From_Int (0);
                             end if;
  
!                            if Expr_Value (R_High) >= Expr_Value (R_Low) then
!                               R_Length := Expr_Value (R_High) -
!                                           Expr_Value (R_Low) + 1;
                             else
                                R_Length := UI_From_Int (0);
                             end if;
--- 10281,10313 ----
                                 or else
                               Nkind (R_Index) = N_Raise_Constraint_Error)
                       then
!                         L_Bounds := Get_Index_Bounds (L_Index);
!                         R_Bounds := Get_Index_Bounds (R_Index);
  
                          --  Deal with compile time length check. Note that we
                          --  skip this in the access case, because the access
                          --  value may be null, so we cannot know statically.
  
                          if not Do_Access
!                           and then Compile_Time_Known_Value (L_Bounds.First)
!                           and then Compile_Time_Known_Value (L_Bounds.Last)
!                           and then Compile_Time_Known_Value (R_Bounds.First)
!                           and then Compile_Time_Known_Value (R_Bounds.Last)
                          then
!                            if Expr_Value (L_Bounds.Last) >=
!                               Expr_Value (L_Bounds.First)
!                            then
!                               L_Length := Expr_Value (L_Bounds.Last) -
!                                           Expr_Value (L_Bounds.First) + 1;
                             else
                                L_Length := UI_From_Int (0);
                             end if;
  
!                            if Expr_Value (R_Bounds.Last) >=
!                               Expr_Value (R_Bounds.First)
!                            then
!                               R_Length := Expr_Value (R_Bounds.Last) -
!                                           Expr_Value (R_Bounds.First) + 1;
                             else
                                R_Length := UI_From_Int (0);
                             end if;
*************** package body Checks is
*** 10240,10247 ****
                              (Etype (L_Index), Etype (R_Index))
  
                            and then not
!                             (Same_Bounds (L_Low, R_Low)
!                               and then Same_Bounds (L_High, R_High))
                          then
                             Evolve_Or_Else
                               (Cond, Length_E_Cond (Exptyp, T_Typ, Indx));
--- 10339,10347 ----
                              (Etype (L_Index), Etype (R_Index))
  
                            and then not
!                             (Same_Bounds (L_Bounds.First, R_Bounds.First)
!                               and then
!                              Same_Bounds (L_Bounds.Last, R_Bounds.Last))
                          then
                             Evolve_Or_Else
                               (Cond, Length_E_Cond (Exptyp, T_Typ, Indx));
*************** package body Checks is
*** 10312,10318 ****
        Exptyp      : Entity_Id;
        Cond        : Node_Id := Empty;
        Do_Access   : Boolean := False;
!       Wnode       : Node_Id  := Warn_Node;
        Ret_Result  : Check_Result := (Empty, Empty);
        Num_Checks  : Natural := 0;
  
--- 10412,10418 ----
        Exptyp      : Entity_Id;
        Cond        : Node_Id := Empty;
        Do_Access   : Boolean := False;
!       Wnode       : Node_Id := Warn_Node;
        Ret_Result  : Check_Result := (Empty, Empty);
        Num_Checks  : Natural := 0;
  
*************** package body Checks is
*** 10384,10390 ****
        begin
           if Present (N) then
  
!             --  For now, ignore attempt to place more than 2 checks ???
  
              if Num_Checks = 2 then
                 return;
--- 10484,10493 ----
        begin
           if Present (N) then
  
!             --  We do not support inserting more than 2 checks on the same
!             --  node. If this happens it means we have already added an
!             --  unconditional raise, so we can skip the other checks safely
!             --  since N will always raise an exception.
  
              if Num_Checks = 2 then
                 return;
*************** package body Checks is
*** 10448,10463 ****
              LB := New_Occurrence_Of (Discriminal (Entity (LB)), Loc);
           end if;
  
!          Left_Opnd :=
!            Make_Op_Lt (Loc,
!              Left_Opnd  =>
!                Convert_To
!                  (Base_Type (Typ), Duplicate_Subexpr_No_Checks (LB)),
  
!              Right_Opnd =>
!                Convert_To
!                  (Base_Type (Typ),
!                   Get_E_First_Or_Last (Loc, Typ, 0, Name_First)));
  
           if Nkind (HB) = N_Identifier
             and then Ekind (Entity (HB)) = E_Discriminant
--- 10551,10586 ----
              LB := New_Occurrence_Of (Discriminal (Entity (LB)), Loc);
           end if;
  
!          --  If the index type has a fixed lower bound, then we require an
!          --  exact match of the range's lower bound against that fixed lower
!          --  bound.
  
!          if Is_Fixed_Lower_Bound_Index_Subtype (Typ) then
!             Left_Opnd :=
!               Make_Op_Ne (Loc,
!                 Left_Opnd  =>
!                   Convert_To
!                     (Base_Type (Typ), Duplicate_Subexpr_No_Checks (LB)),
! 
!                 Right_Opnd =>
!                   Convert_To
!                     (Base_Type (Typ),
!                      Get_E_First_Or_Last (Loc, Typ, 0, Name_First)));
! 
!          --  Otherwise we do the expected less-than comparison
! 
!          else
!             Left_Opnd :=
!               Make_Op_Lt (Loc,
!                 Left_Opnd  =>
!                   Convert_To
!                     (Base_Type (Typ), Duplicate_Subexpr_No_Checks (LB)),
! 
!                 Right_Opnd =>
!                   Convert_To
!                     (Base_Type (Typ),
!                      Get_E_First_Or_Last (Loc, Typ, 0, Name_First)));
!          end if;
  
           if Nkind (HB) = N_Identifier
             and then Ekind (Entity (HB)) = E_Discriminant
*************** package body Checks is
*** 10614,10619 ****
--- 10737,10749 ----
                     Get_E_First_Or_Last (Loc, Typ, Indx, Name_Last)));
        end Range_N_Cond;
  
+       function "<" (Left, Right : Node_Id) return Boolean
+       is (if Is_Floating_Point_Type (S_Typ)
+           then Expr_Value_R (Left) < Expr_Value_R (Right)
+           else Expr_Value   (Left) < Expr_Value   (Right));
+       --  Convenience comparison function of integer or floating point
+       --  values.
+ 
     --  Start of processing for Selected_Range_Checks
  
     begin
*************** package body Checks is
*** 10684,10697 ****
              Known_T_LB : constant Boolean := Compile_Time_Known_Value (T_LB);
              Known_T_HB : constant Boolean := Compile_Time_Known_Value (T_HB);
  
!             LB         : Node_Id := Low_Bound (Expr);
!             HB         : Node_Id := High_Bound (Expr);
!             Known_LB   : Boolean := False;
!             Known_HB   : Boolean := False;
  
!             Null_Range     : Boolean;
!             Out_Of_Range_L : Boolean;
!             Out_Of_Range_H : Boolean;
  
           begin
              --  Compute what is known at compile time
--- 10814,10827 ----
              Known_T_LB : constant Boolean := Compile_Time_Known_Value (T_LB);
              Known_T_HB : constant Boolean := Compile_Time_Known_Value (T_HB);
  
!             LB          : Node_Id := Low_Bound (Expr);
!             HB          : Node_Id := High_Bound (Expr);
!             Known_LB    : Boolean := False;
!             Known_HB    : Boolean := False;
!             Check_Added : Boolean := False;
  
!             Out_Of_Range_L : Boolean := False;
!             Out_Of_Range_H : Boolean := False;
  
           begin
              --  Compute what is known at compile time
*************** package body Checks is
*** 10724,10784 ****
                 end if;
              end if;
  
!             --  Check for case where everything is static and we can do the
!             --  check at compile time. This is skipped if we have an access
!             --  type, since the access value may be null.
! 
!             --  ??? This code can be improved since you only need to know that
!             --  the two respective bounds (LB & T_LB or HB & T_HB) are known at
!             --  compile time to emit pertinent messages.
! 
!             if Known_T_LB and Known_T_HB and Known_LB and Known_HB
!               and not Do_Access
!             then
!                --  Floating-point case
! 
!                if Is_Floating_Point_Type (S_Typ) then
!                   Null_Range := Expr_Value_R (HB) < Expr_Value_R (LB);
!                   Out_Of_Range_L :=
!                     (Expr_Value_R (LB) < Expr_Value_R (T_LB))
!                       or else
!                     (Expr_Value_R (LB) > Expr_Value_R (T_HB));
! 
!                   Out_Of_Range_H :=
!                     (Expr_Value_R (HB) > Expr_Value_R (T_HB))
!                       or else
!                     (Expr_Value_R (HB) < Expr_Value_R (T_LB));
! 
!                --  Fixed or discrete type case
  
!                else
!                   Null_Range := Expr_Value (HB) < Expr_Value (LB);
!                   Out_Of_Range_L :=
!                     (Expr_Value (LB) < Expr_Value (T_LB))
!                       or else
!                     (Expr_Value (LB) > Expr_Value (T_HB));
  
!                   Out_Of_Range_H :=
!                     (Expr_Value (HB) > Expr_Value (T_HB))
!                       or else
!                     (Expr_Value (HB) < Expr_Value (T_LB));
!                end if;
  
-                if not Null_Range then
                    if Out_Of_Range_L then
                       if No (Warn_Node) then
                          Add_Check
                            (Compile_Time_Constraint_Error
                               (Low_Bound (Expr),
                                "static value out of range of}??", T_Typ));
  
                       else
                          Add_Check
                            (Compile_Time_Constraint_Error
                              (Wnode,
                               "static range out of bounds of}??", T_Typ));
                       end if;
                    end if;
  
                    if Out_Of_Range_H then
                       if No (Warn_Node) then
--- 10854,10915 ----
                 end if;
              end if;
  
!             --  Check for the simple cases where we can do the check at
!             --  compile time. This is skipped if we have an access type, since
!             --  the access value may be null.
  
!             if not Do_Access and then Not_Null_Range (LB, HB) then
!                if Known_LB then
!                   if Known_T_LB then
!                      Out_Of_Range_L := LB < T_LB;
!                   end if;
  
!                   if Known_T_HB and not Out_Of_Range_L then
!                      Out_Of_Range_L := T_HB < LB;
!                   end if;
  
                    if Out_Of_Range_L then
                       if No (Warn_Node) then
                          Add_Check
                            (Compile_Time_Constraint_Error
                               (Low_Bound (Expr),
                                "static value out of range of}??", T_Typ));
+                         Check_Added := True;
  
                       else
                          Add_Check
                            (Compile_Time_Constraint_Error
                              (Wnode,
                               "static range out of bounds of}??", T_Typ));
+                         Check_Added := True;
                       end if;
                    end if;
+                end if;
+ 
+                --  Flag the case of a fixed-lower-bound index where the static
+                --  bounds are not equal.
+ 
+                if not Check_Added
+                  and then Is_Fixed_Lower_Bound_Index_Subtype (T_Typ)
+                  and then Expr_Value (LB) /= Expr_Value (T_LB)
+                then
+                   Add_Check
+                     (Compile_Time_Constraint_Error
+                        ((if Present (Warn_Node)
+                          then Warn_Node else Low_Bound (Expr)),
+                          "static value does not equal lower bound of}??",
+                         T_Typ));
+                   Check_Added := True;
+                end if;
+ 
+                if Known_HB then
+                   if Known_T_HB then
+                      Out_Of_Range_H := T_HB < HB;
+                   end if;
+ 
+                   if Known_T_LB and not Out_Of_Range_H then
+                      Out_Of_Range_H := HB < T_LB;
+                   end if;
  
                    if Out_Of_Range_H then
                       if No (Warn_Node) then
*************** package body Checks is
*** 10786,10802 ****
                            (Compile_Time_Constraint_Error
                               (High_Bound (Expr),
                                "static value out of range of}??", T_Typ));
  
                       else
                          Add_Check
                            (Compile_Time_Constraint_Error
                               (Wnode,
                                "static range out of bounds of}??", T_Typ));
                       end if;
                    end if;
                 end if;
  
!             else
                 declare
                    LB : Node_Id := Low_Bound (Expr);
                    HB : Node_Id := High_Bound (Expr);
--- 10917,10945 ----
                            (Compile_Time_Constraint_Error
                               (High_Bound (Expr),
                                "static value out of range of}??", T_Typ));
+                         Check_Added := True;
  
                       else
                          Add_Check
                            (Compile_Time_Constraint_Error
                               (Wnode,
                                "static range out of bounds of}??", T_Typ));
+                         Check_Added := True;
                       end if;
                    end if;
                 end if;
+             end if;
  
!             --  Check for the case where not everything is static
! 
!             if not Check_Added
!               and then
!                 (Do_Access
!                   or else not Known_T_LB
!                   or else not Known_LB
!                   or else not Known_T_HB
!                   or else not Known_HB)
!             then
                 declare
                    LB : Node_Id := Low_Bound (Expr);
                    HB : Node_Id := High_Bound (Expr);
*************** package body Checks is
*** 10863,10870 ****
        elsif Is_Scalar_Type (S_Typ) then
  
           --  This somewhat duplicates what Apply_Scalar_Range_Check does,
!          --  except the above simply sets a flag in the node and lets
!          --  gigi generate the check base on the Etype of the expression.
           --  Sometimes, however we want to do a dynamic check against an
           --  arbitrary target type, so we do that here.
  
--- 11006,11013 ----
        elsif Is_Scalar_Type (S_Typ) then
  
           --  This somewhat duplicates what Apply_Scalar_Range_Check does,
!          --  except the above simply sets a flag in the node and lets the
!          --  check be generated based on the Etype of the expression.
           --  Sometimes, however we want to do a dynamic check against an
           --  arbitrary target type, so we do that here.
  
*************** package body Checks is
*** 10878,10933 ****
           --  expression. As usual, skip this for access types
  
           elsif Compile_Time_Known_Value (Expr) and then not Do_Access then
!             declare
!                LB : constant Node_Id := Type_Low_Bound (T_Typ);
!                UB : constant Node_Id := Type_High_Bound (T_Typ);
! 
!                Out_Of_Range  : Boolean;
!                Static_Bounds : constant Boolean :=
!                  Compile_Time_Known_Value (LB)
!                  and Compile_Time_Known_Value (UB);
! 
!             begin
!                --  Following range tests should use Sem_Eval routine ???
! 
!                if Static_Bounds then
!                   if Is_Floating_Point_Type (S_Typ) then
!                      Out_Of_Range :=
!                        (Expr_Value_R (Expr) < Expr_Value_R (LB))
!                          or else
!                        (Expr_Value_R (Expr) > Expr_Value_R (UB));
! 
!                   --  Fixed or discrete type
! 
!                   else
!                      Out_Of_Range :=
!                        Expr_Value (Expr) < Expr_Value (LB)
!                          or else
!                        Expr_Value (Expr) > Expr_Value (UB);
!                   end if;
! 
!                   --  Bounds of the type are static and the literal is out of
!                   --  range so output a warning message.
  
!                   if Out_Of_Range then
!                      if No (Warn_Node) then
!                         Add_Check
!                           (Compile_Time_Constraint_Error
!                              (Expr,
!                               "static value out of range of}??", T_Typ));
  
!                      else
!                         Add_Check
!                           (Compile_Time_Constraint_Error
!                              (Wnode,
!                               "static value out of range of}??", T_Typ));
!                      end if;
!                   end if;
  
                 else
!                   Cond := Discrete_Expr_Cond (Expr, T_Typ);
                 end if;
!             end;
  
           --  Here for the case of a non-static expression, we need a runtime
           --  check unless the source type range is guaranteed to be in the
--- 11021,11044 ----
           --  expression. As usual, skip this for access types
  
           elsif Compile_Time_Known_Value (Expr) and then not Do_Access then
!             if Is_Out_Of_Range (Expr, T_Typ) then
  
!                --  Bounds of the type are static and the literal is out of
!                --  range so output a warning message.
  
!                if No (Warn_Node) then
!                   Add_Check
!                     (Compile_Time_Constraint_Error
!                        (Expr, "static value out of range of}??", T_Typ));
  
                 else
!                   Add_Check
!                     (Compile_Time_Constraint_Error
!                        (Wnode, "static value out of range of}??", T_Typ));
                 end if;
!             else
!                Cond := Discrete_Expr_Cond (Expr, T_Typ);
!             end if;
  
           --  Here for the case of a non-static expression, we need a runtime
           --  check unless the source type range is guaranteed to be in the
*************** package body Checks is
*** 10942,10948 ****
  
        if Is_Array_Type (T_Typ) and then Is_Array_Type (S_Typ) then
           if Is_Constrained (T_Typ) then
- 
              Expr_Actual := Get_Referenced_Object (Expr);
              Exptyp      := Get_Actual_Subtype (Expr_Actual);
  
--- 11053,11058 ----
*************** package body Checks is
*** 11036,11041 ****
--- 11146,11201 ----
                 end;
              end if;
  
+          --  If the context is a qualified_expression where the subtype is
+          --  an unconstrained array subtype with fixed-lower-bound indexes,
+          --  then consistency checks must be done between the lower bounds
+          --  of any such indexes and the corresponding lower bounds of the
+          --  qualified array object.
+ 
+          elsif Is_Fixed_Lower_Bound_Array_Subtype (T_Typ)
+            and then Nkind (Parent (Expr)) = N_Qualified_Expression
+            and then not Do_Access
+          then
+             declare
+                Ndims : constant Pos := Number_Dimensions (T_Typ);
+ 
+                Qual_Index : Node_Id;
+                Expr_Index : Node_Id;
+ 
+             begin
+                Expr_Actual := Get_Referenced_Object (Expr);
+                Exptyp      := Get_Actual_Subtype (Expr_Actual);
+ 
+                Qual_Index := First_Index (T_Typ);
+                Expr_Index := First_Index (Exptyp);
+ 
+                for Indx in 1 .. Ndims loop
+                   if Nkind (Expr_Index) /= N_Raise_Constraint_Error then
+ 
+                      --  If this index of the qualifying array subtype has
+                      --  a fixed lower bound, then apply a check that the
+                      --  corresponding lower bound of the array expression
+                      --  is equal to it.
+ 
+                      if Is_Fixed_Lower_Bound_Index_Subtype (Etype (Qual_Index))
+                      then
+                         Evolve_Or_Else
+                           (Cond,
+                            Make_Op_Ne (Loc,
+                              Left_Opnd   =>
+                                Get_E_First_Or_Last
+                                  (Loc, Exptyp, Indx, Name_First),
+                              Right_Opnd  =>
+                                New_Copy_Tree
+                                  (Type_Low_Bound (Etype (Qual_Index)))));
+                      end if;
+ 
+                      Next (Qual_Index);
+                      Next (Expr_Index);
+                   end if;
+                end loop;
+             end;
+ 
           else
              --  For a conversion to an unconstrained array type, generate an
              --  Action to check that the bounds of the source value are within
*************** package body Checks is
*** 11176,11182 ****
                      renames Alignment_Warnings.Table (J);
           begin
              if Known_Alignment (AWR.E)
!               and then ((AWR.A /= No_Uint
                            and then AWR.A mod Alignment (AWR.E) = 0)
                          or else (Present (AWR.P)
                                    and then Has_Compatible_Alignment
--- 11336,11342 ----
                      renames Alignment_Warnings.Table (J);
           begin
              if Known_Alignment (AWR.E)
!               and then ((Present (AWR.A)
                            and then AWR.A mod Alignment (AWR.E) = 0)
                          or else (Present (AWR.P)
                                    and then Has_Compatible_Alignment
diff -Nrcpad gcc-11.3.0/gcc/ada/checks.ads gcc-12.1.0/gcc/ada/checks.ads
*** gcc-11.3.0/gcc/ada/checks.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/checks.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** with Urealp; use Urealp;
*** 44,49 ****
--- 44,57 ----
  
  package Checks is
  
+    type Bit_Vector is array (Pos range <>) of Boolean;
+    type Dimension_Set (Dimensions : Nat) is
+       record
+          Elements : Bit_Vector (1 .. Dimensions);
+       end record;
+    Empty_Dimension_Set : constant Dimension_Set
+      := (Dimensions => 0, Elements => (others => <>));
+ 
     procedure Initialize;
     --  Called for each new main source program, to initialize internal
     --  variables used in the package body of the Checks unit.
*************** package Checks is
*** 357,363 ****
     --  if so inserts the appropriate run-time check.
  
     procedure Install_Primitive_Elaboration_Check (Subp_Body : Node_Id);
!    --  Insert a check which ensures that subprogram body Subp_Body has been
     --  properly elaborated. The check is installed only when Subp_Body is the
     --  body of a nonabstract library-level primitive of a tagged type. Further
     --  restrictions may apply, see the body for details.
--- 365,371 ----
     --  if so inserts the appropriate run-time check.
  
     procedure Install_Primitive_Elaboration_Check (Subp_Body : Node_Id);
!    --  Insert a check to ensure that subprogram body Subp_Body has been
     --  properly elaborated. The check is installed only when Subp_Body is the
     --  body of a nonabstract library-level primitive of a tagged type. Further
     --  restrictions may apply, see the body for details.
*************** package Checks is
*** 721,731 ****
     --  Do_Range_Check flag, and if it is set, this routine is called, which
     --  turns the flag off in code-generation mode.
  
!    procedure Generate_Index_Checks (N : Node_Id);
     --  This procedure is called to generate index checks on the subscripts for
     --  the indexed component node N. Each subscript expression is examined, and
     --  if the Do_Range_Check flag is set, an appropriate index check is
     --  generated and the flag is reset.
  
     --  Similarly, we set the flag Do_Discriminant_Check in the semantic
     --  analysis to indicate that a discriminant check is required for selected
--- 729,744 ----
     --  Do_Range_Check flag, and if it is set, this routine is called, which
     --  turns the flag off in code-generation mode.
  
!    procedure Generate_Index_Checks
!      (N                : Node_Id;
!       Checks_Generated : out Dimension_Set);
     --  This procedure is called to generate index checks on the subscripts for
     --  the indexed component node N. Each subscript expression is examined, and
     --  if the Do_Range_Check flag is set, an appropriate index check is
     --  generated and the flag is reset.
+    --  The out-mode parameter Checks_Generated indicates the dimensions for
+    --  which checks were generated. Checks_Generated.Dimensions must match
+    --  the number of dimensions of the array type.
  
     --  Similarly, we set the flag Do_Discriminant_Check in the semantic
     --  analysis to indicate that a discriminant check is required for selected
*************** package Checks is
*** 851,867 ****
     --    are not following the flow graph (more properly the flow of actual
     --    processing only corresponds to the flow graph for local assignments).
     --    For non-local variables, we preserve the current setting, i.e. a
!    --    validity check is performed when assigning to a knonwn valid global.
  
     --  Note: no validity checking is required if range checks are suppressed
     --  regardless of the setting of the validity checking mode.
  
     --  The following procedures are used in handling validity checking
  
!    procedure Apply_Subscript_Validity_Checks (Expr : Node_Id);
     --  Expr is the node for an indexed component. If validity checking and
!    --  range checking are enabled, all subscripts for this indexed component
!    --  are checked for validity.
  
     procedure Check_Valid_Lvalue_Subscripts (Expr : Node_Id);
     --  Expr is a lvalue, i.e. an expression representing the target of an
--- 864,884 ----
     --    are not following the flow graph (more properly the flow of actual
     --    processing only corresponds to the flow graph for local assignments).
     --    For non-local variables, we preserve the current setting, i.e. a
!    --    validity check is performed when assigning to a known valid global.
  
     --  Note: no validity checking is required if range checks are suppressed
     --  regardless of the setting of the validity checking mode.
  
     --  The following procedures are used in handling validity checking
  
!    procedure Apply_Subscript_Validity_Checks
!      (Expr            : Node_Id;
!       No_Check_Needed : Dimension_Set := Empty_Dimension_Set);
     --  Expr is the node for an indexed component. If validity checking and
!    --  range checking are enabled, each subscript for this indexed component
!    --  whose dimension does not belong to the No_Check_Needed set is checked
!    --  for validity. No_Check_Needed.Dimensions must match the number of
!    --  dimensions of the array type or be zero.
  
     procedure Check_Valid_Lvalue_Subscripts (Expr : Node_Id);
     --  Expr is a lvalue, i.e. an expression representing the target of an
diff -Nrcpad gcc-11.3.0/gcc/ada/cio.c gcc-12.1.0/gcc/ada/cio.c
*** gcc-11.3.0/gcc/ada/cio.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/cio.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/clean.adb gcc-12.1.0/gcc/ada/clean.adb
*** gcc-11.3.0/gcc/ada/clean.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/clean.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
*************** package body Clean is
*** 217,223 ****
  
                 if Text /= null then
                    The_ALI :=
!                     Scan_ALI (Lib_File, Text, Ignore_ED => False, Err => True);
                    Free (Text);
  
                    --  If no error was produced while loading this ALI file,
--- 217,223 ----
  
                 if Text /= null then
                    The_ALI :=
!                     Scan_ALI (Lib_File, Text, Err => True);
                    Free (Text);
  
                    --  If no error was produced while loading this ALI file,
diff -Nrcpad gcc-11.3.0/gcc/ada/clean.ads gcc-12.1.0/gcc/ada/clean.ads
*** gcc-11.3.0/gcc/ada/clean.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/clean.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/comperr.adb gcc-12.1.0/gcc/ada/comperr.adb
*** gcc-11.3.0/gcc/ada/comperr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/comperr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 27,47 ****
  --  is detected. Calls to these routines cause termination of the current
  --  compilation with appropriate error output.
  
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Errout;   use Errout;
! with Gnatvsn;  use Gnatvsn;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Opt;      use Opt;
! with Osint;    use Osint;
! with Output;   use Output;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Sprint;   use Sprint;
! with Sdefault; use Sdefault;
! with Treepr;   use Treepr;
! with Types;    use Types;
  
  with Ada.Exceptions; use Ada.Exceptions;
  
--- 27,48 ----
  --  is detected. Calls to these routines cause termination of the current
  --  compilation with appropriate error output.
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Errout;         use Errout;
! with Gnatvsn;        use Gnatvsn;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Opt;            use Opt;
! with Osint;          use Osint;
! with Output;         use Output;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinput;         use Sinput;
! with Sprint;         use Sprint;
! with Sdefault;       use Sdefault;
! with Treepr;         use Treepr;
! with Types;          use Types;
  
  with Ada.Exceptions; use Ada.Exceptions;
  
*************** package body Comperr is
*** 243,254 ****
--- 244,260 ----
              end if;
  
              End_Line;
+ 
           else
              Write_Str ("| Error detected at ");
              Write_Location (Sloc (Current_Error_Node));
              End_Line;
           end if;
  
+          Write_Str ("| Compiling ");
+          Write_Str (Get_First_Main_File_Name);
+          End_Line;
+ 
           --  There are two cases now. If the file gnat_bug.box exists,
           --  we use the contents of this file at this point.
  
*************** package body Comperr is
*** 403,408 ****
--- 409,415 ----
           Set_Standard_Output;
  
           Tree_Dump;
+          Sinput.Unlock; -- so Source_Dump can modify it
           Source_Dump;
           raise Unrecoverable_Error;
        end if;
*************** package body Comperr is
*** 417,423 ****
        Unit_Name : Node_Id;
  
        Success : Boolean;
!       pragma Unreferenced (Success);
  
        procedure Decode_Name_Buffer;
        --  Replace "__" by "." in Name_Buffer, and adjust Name_Len accordingly
--- 424,430 ----
        Unit_Name : Node_Id;
  
        Success : Boolean;
!       pragma Warnings (Off, "modified by call");
  
        procedure Decode_Name_Buffer;
        --  Replace "__" by "." in Name_Buffer, and adjust Name_Len accordingly
*************** package body Comperr is
*** 471,476 ****
--- 478,484 ----
           when N_Package_Declaration
              | N_Subprogram_Body
              | N_Subprogram_Declaration
+             | N_Subprogram_Renaming_Declaration
           =>
              Unit_Name := Defining_Unit_Name (Specification (Main));
  
*************** package body Comperr is
*** 482,491 ****
           =>
              Unit_Name := Defining_Unit_Name (Main);
  
!          --  No SCIL file generated for generic package declarations
  
!          when N_Generic_Package_Declaration
!             | N_Generic_Package_Renaming_Declaration
           =>
              return;
  
--- 490,499 ----
           =>
              Unit_Name := Defining_Unit_Name (Main);
  
!          --  No SCIL file generated for generic unit declarations
  
!          when N_Generic_Declaration
!             | N_Generic_Renaming_Declaration
           =>
              return;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/comperr.ads gcc-12.1.0/gcc/ada/comperr.ads
*** gcc-11.3.0/gcc/ada/comperr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/comperr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/contracts.adb gcc-12.1.0/gcc/ada/contracts.adb
*** gcc-11.3.0/gcc/ada/contracts.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/contracts.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2015-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2015-2022, 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- --
***************
*** 23,57 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Exp_Prag; use Exp_Prag;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! 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_Disp; use Sem_Disp;
! with Sem_Prag; use Sem_Prag;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
  
  package body Contracts is
  
--- 23,63 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Prag;       use Exp_Prag;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! 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_Disp;       use Sem_Disp;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Res;        use Sem_Res;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
  
  package body Contracts is
  
*************** package body Contracts is
*** 62,67 ****
--- 68,83 ----
     --
     --    Part_Of
  
+    procedure Check_Class_Condition
+      (Cond            : Node_Id;
+       Subp            : Entity_Id;
+       Par_Subp        : Entity_Id;
+       Is_Precondition : Boolean);
+    --  Perform checking of class-wide pre/postcondition Cond inherited by Subp
+    --  from Par_Subp. Is_Precondition enables check specific for preconditions.
+    --  In SPARK_Mode, an inherited operation that is not overridden but has
+    --  inherited modified conditions pre/postconditions is illegal.
+ 
     procedure Check_Type_Or_Object_External_Properties
       (Type_Or_Obj_Id : Entity_Id);
     --  Perform checking of external properties pragmas that is common to both
*************** package body Contracts is
*** 73,78 ****
--- 89,100 ----
     --  well as Contract_Cases, Subprogram_Variant, invariants and predicates.
     --  Body_Id denotes the entity of the subprogram body.
  
+    procedure Set_Class_Condition
+      (Kind : Condition_Kind;
+       Subp : Entity_Id;
+       Cond : Node_Id);
+    --  Set the class-wide Kind condition of Subp
+ 
     -----------------------
     -- Add_Contract_Item --
     -----------------------
*************** package body Contracts is
*** 140,146 ****
        --    Part_Of
  
        if Ekind (Id) = E_Constant then
!          if Prag_Nam = Name_Part_Of then
              Add_Classification;
  
           --  The pragma is not a proper contract item
--- 162,174 ----
        --    Part_Of
  
        if Ekind (Id) = E_Constant then
!          if Prag_Nam in Name_Async_Readers
!                       | Name_Async_Writers
!                       | Name_Effective_Reads
!                       | Name_Effective_Writes
!                       | Name_No_Caching
!                       | Name_Part_Of
!          then
              Add_Classification;
  
           --  The pragma is not a proper contract item
*************** package body Contracts is
*** 376,398 ****
                            | N_Generic_Subprogram_Declaration
                            | N_Subprogram_Declaration
           then
!             declare
!                Subp_Id : constant Entity_Id := Defining_Entity (Decl);
! 
!             begin
!                Analyze_Entry_Or_Subprogram_Contract (Subp_Id);
! 
!                --  If analysis of a class-wide pre/postcondition indicates
!                --  that a class-wide clone is needed, analyze its declaration
!                --  now. Its body is created when the body of the original
!                --  operation is analyzed (and rewritten).
! 
!                if Is_Subprogram (Subp_Id)
!                  and then Present (Class_Wide_Clone (Subp_Id))
!                then
!                   Analyze (Unit_Declaration_Node (Class_Wide_Clone (Subp_Id)));
!                end if;
!             end;
  
           --  Entry or subprogram bodies
  
--- 404,410 ----
                            | N_Generic_Subprogram_Declaration
                            | N_Subprogram_Declaration
           then
!             Analyze_Entry_Or_Subprogram_Contract (Defining_Entity (Decl));
  
           --  Entry or subprogram bodies
  
*************** package body Contracts is
*** 774,798 ****
     procedure Check_Type_Or_Object_External_Properties
       (Type_Or_Obj_Id : Entity_Id)
     is
-       function Decl_Kind (Is_Type     : Boolean;
-                           Object_Kind : String) return String;
-       --  Returns "type" or Object_Kind, depending on Is_Type
- 
-       ---------------
-       -- Decl_Kind --
-       ---------------
- 
-       function Decl_Kind (Is_Type     : Boolean;
-                           Object_Kind : String) return String is
-       begin
-          if Is_Type then
-             return "type";
-          else
-             return Object_Kind;
-          end if;
-       end Decl_Kind;
- 
        Is_Type_Id : constant Boolean := Is_Type (Type_Or_Obj_Id);
  
        --  Local variables
  
--- 786,794 ----
     procedure Check_Type_Or_Object_External_Properties
       (Type_Or_Obj_Id : Entity_Id)
     is
        Is_Type_Id : constant Boolean := Is_Type (Type_Or_Obj_Id);
+       Decl_Kind  : constant String :=
+         (if Is_Type_Id then "type" else "object");
  
        --  Local variables
  
*************** package body Contracts is
*** 919,926 ****
              if not Is_Library_Level_Entity (Type_Or_Obj_Id) then
                 Error_Msg_N
                   ("effectively volatile "
!                     & Decl_Kind (Is_Type     => Is_Type_Id,
!                                  Object_Kind => "variable")
                      & " & must be declared at library level "
                      & "(SPARK RM 7.1.3(3))", Type_Or_Obj_Id);
  
--- 915,921 ----
              if not Is_Library_Level_Entity (Type_Or_Obj_Id) then
                 Error_Msg_N
                   ("effectively volatile "
!                     & Decl_Kind
                      & " & must be declared at library level "
                      & "(SPARK RM 7.1.3(3))", Type_Or_Obj_Id);
  
*************** package body Contracts is
*** 931,940 ****
                and then not Is_Protected_Type (Obj_Typ)
              then
                 Error_Msg_N
!                 ("discriminated "
!                    & Decl_Kind (Is_Type     => Is_Type_Id,
!                                 Object_Kind => "object")
!                    & " & cannot be volatile",
                   Type_Or_Obj_Id);
              end if;
  
--- 926,932 ----
                and then not Is_Protected_Type (Obj_Typ)
              then
                 Error_Msg_N
!                 ("discriminated " & Decl_Kind & " & cannot be volatile",
                   Type_Or_Obj_Id);
              end if;
  
*************** package body Contracts is
*** 1015,1021 ****
        Saved_SMP : constant Node_Id         := SPARK_Mode_Pragma;
        --  Save the SPARK_Mode-related data to restore on exit
  
!       NC_Val   : Boolean := False;
        Items    : Node_Id;
        Prag     : Node_Id;
        Ref_Elmt : Elmt_Id;
--- 1007,1013 ----
        Saved_SMP : constant Node_Id         := SPARK_Mode_Pragma;
        --  Save the SPARK_Mode-related data to restore on exit
  
!       NC_Val   : Boolean;
        Items    : Node_Id;
        Prag     : Node_Id;
        Ref_Elmt : Elmt_Id;
*************** package body Contracts is
*** 1052,1057 ****
--- 1044,1062 ----
           Set_SPARK_Mode (Obj_Id);
        end if;
  
+       --  Checks related to external properties, same for constants and
+       --  variables.
+ 
+       Check_Type_Or_Object_External_Properties (Type_Or_Obj_Id => Obj_Id);
+ 
+       --  Analyze the non-external volatility property No_Caching
+ 
+       Prag := Get_Pragma (Obj_Id, Pragma_No_Caching);
+ 
+       if Present (Prag) then
+          Analyze_External_Property_In_Decl_Part (Prag, NC_Val);
+       end if;
+ 
        --  Constant-related checks
  
        if Ekind (Obj_Id) = E_Constant then
*************** package body Contracts is
*** 1067,1101 ****
              Check_Missing_Part_Of (Obj_Id);
           end if;
  
-          --  A constant cannot be effectively volatile (SPARK RM 7.1.3(4)).
-          --  This check is relevant only when SPARK_Mode is on, as it is not
-          --  a standard Ada legality rule. Internally-generated constants that
-          --  map generic formals to actuals in instantiations are allowed to
-          --  be volatile.
- 
-          if SPARK_Mode = On
-            and then Comes_From_Source (Obj_Id)
-            and then Is_Effectively_Volatile (Obj_Id)
-            and then No (Corresponding_Generic_Association (Parent (Obj_Id)))
-          then
-             Error_Msg_N ("constant cannot be volatile", Obj_Id);
-          end if;
- 
        --  Variable-related checks
  
        else pragma Assert (Ekind (Obj_Id) = E_Variable);
  
-          Check_Type_Or_Object_External_Properties
-            (Type_Or_Obj_Id => Obj_Id);
- 
-          --  Analyze the non-external volatility property No_Caching
- 
-          Prag := Get_Pragma (Obj_Id, Pragma_No_Caching);
- 
-          if Present (Prag) then
-             Analyze_External_Property_In_Decl_Part (Prag, NC_Val);
-          end if;
- 
           --  The anonymous object created for a single task type carries
           --  pragmas Depends and Global of the type.
  
--- 1072,1081 ----
*************** package body Contracts is
*** 1513,1518 ****
--- 1493,1633 ----
          (Type_Or_Obj_Id => Type_Id);
     end Analyze_Type_Contract;
  
+    ---------------------------
+    -- Check_Class_Condition --
+    ---------------------------
+ 
+    procedure Check_Class_Condition
+      (Cond            : Node_Id;
+       Subp            : Entity_Id;
+       Par_Subp        : Entity_Id;
+       Is_Precondition : Boolean)
+    is
+       function Check_Entity (N : Node_Id) return Traverse_Result;
+       --  Check reference to formal of inherited operation or to primitive
+       --  operation of root type.
+ 
+       ------------------
+       -- Check_Entity --
+       ------------------
+ 
+       function Check_Entity (N : Node_Id) return Traverse_Result is
+          New_E  : Entity_Id;
+          Orig_E : Entity_Id;
+ 
+       begin
+          if Nkind (N) = N_Identifier
+            and then Present (Entity (N))
+            and then
+              (Is_Formal (Entity (N)) or else Is_Subprogram (Entity (N)))
+            and then
+              (Nkind (Parent (N)) /= N_Attribute_Reference
+                or else Attribute_Name (Parent (N)) /= Name_Class)
+          then
+             --  These checks do not apply to dispatching calls within the
+             --  condition, but only to calls whose static tag is that of
+             --  the parent type.
+ 
+             if Is_Subprogram (Entity (N))
+               and then Nkind (Parent (N)) = N_Function_Call
+               and then Present (Controlling_Argument (Parent (N)))
+             then
+                return OK;
+             end if;
+ 
+             --  Determine whether entity has a renaming
+ 
+             Orig_E := Entity (N);
+             New_E  := Get_Mapped_Entity (Orig_E);
+ 
+             if Present (New_E) then
+ 
+                --  AI12-0166: A precondition for a protected operation
+                --  cannot include an internal call to a protected function
+                --  of the type. In the case of an inherited condition for an
+                --  overriding operation, both the operation and the function
+                --  are given by primitive wrappers.
+ 
+                if Is_Precondition
+                  and then Ekind (New_E) = E_Function
+                  and then Is_Primitive_Wrapper (New_E)
+                  and then Is_Primitive_Wrapper (Subp)
+                  and then Scope (Subp) = Scope (New_E)
+                then
+                   Error_Msg_Node_2 := Wrapped_Entity (Subp);
+                   Error_Msg_NE
+                     ("internal call to& cannot appear in inherited "
+                      & "precondition of protected operation&",
+                      Subp, Wrapped_Entity (New_E));
+                end if;
+             end if;
+ 
+             --  Check that there are no calls left to abstract operations if
+             --  the current subprogram is not abstract.
+ 
+             if Present (New_E)
+               and then Nkind (Parent (N)) = N_Function_Call
+               and then N = Name (Parent (N))
+             then
+                if not Is_Abstract_Subprogram (Subp)
+                  and then Is_Abstract_Subprogram (New_E)
+                then
+                   Error_Msg_Sloc   := Sloc (Current_Scope);
+                   Error_Msg_Node_2 := Subp;
+ 
+                   if Comes_From_Source (Subp) then
+                      Error_Msg_NE
+                        ("cannot call abstract subprogram & in inherited "
+                         & "condition for&#", Subp, New_E);
+                   else
+                      Error_Msg_NE
+                        ("cannot call abstract subprogram & in inherited "
+                         & "condition for inherited&#", Subp, New_E);
+                   end if;
+ 
+                --  In SPARK mode, report error on inherited condition for an
+                --  inherited operation if it contains a call to an overriding
+                --  operation, because this implies that the pre/postconditions
+                --  of the inherited operation have changed silently.
+ 
+                elsif SPARK_Mode = On
+                  and then Warn_On_Suspicious_Contract
+                  and then Present (Alias (Subp))
+                  and then Present (New_E)
+                  and then Comes_From_Source (New_E)
+                then
+                   Error_Msg_N
+                     ("cannot modify inherited condition (SPARK RM 6.1.1(1))",
+                      Parent (Subp));
+                   Error_Msg_Sloc   := Sloc (New_E);
+                   Error_Msg_Node_2 := Subp;
+                   Error_Msg_NE
+                     ("\overriding of&# forces overriding of&",
+                      Parent (Subp), New_E);
+                end if;
+             end if;
+          end if;
+ 
+          return OK;
+       end Check_Entity;
+ 
+       procedure Check_Condition_Entities is
+         new Traverse_Proc (Check_Entity);
+ 
+    --  Start of processing for Check_Class_Condition
+ 
+    begin
+       --  No check required if the subprograms match
+ 
+       if Par_Subp = Subp then
+          return;
+       end if;
+ 
+       Update_Primitives_Mapping (Par_Subp, Subp);
+       Map_Formals (Par_Subp, Subp);
+       Check_Condition_Entities (Cond);
+    end Check_Class_Condition;
+ 
     -----------------------------
     -- Create_Generic_Contract --
     -----------------------------
*************** package body Contracts is
*** 1576,1582 ****
        --  in its visible declarations.
  
        if Nkind (Templ) = N_Generic_Package_Declaration then
!          Set_Ekind (Templ_Id, E_Generic_Package);
  
           if Present (Visible_Declarations (Specification (Templ))) then
              Decl := First (Visible_Declarations (Specification (Templ)));
--- 1691,1697 ----
        --  in its visible declarations.
  
        if Nkind (Templ) = N_Generic_Package_Declaration then
!          Mutate_Ekind (Templ_Id, E_Generic_Package);
  
           if Present (Visible_Declarations (Specification (Templ))) then
              Decl := First (Visible_Declarations (Specification (Templ)));
*************** package body Contracts is
*** 1586,1592 ****
        --  declarations.
  
        elsif Nkind (Templ) = N_Package_Body then
!          Set_Ekind (Templ_Id, E_Package_Body);
  
           if Present (Declarations (Templ)) then
              Decl := First (Declarations (Templ));
--- 1701,1707 ----
        --  declarations.
  
        elsif Nkind (Templ) = N_Package_Body then
!          Mutate_Ekind (Templ_Id, E_Package_Body);
  
           if Present (Declarations (Templ)) then
              Decl := First (Declarations (Templ));
*************** package body Contracts is
*** 1596,1604 ****
  
        elsif Nkind (Templ) = N_Generic_Subprogram_Declaration then
           if Nkind (Specification (Templ)) = N_Function_Specification then
!             Set_Ekind (Templ_Id, E_Generic_Function);
           else
!             Set_Ekind (Templ_Id, E_Generic_Procedure);
           end if;
  
           --  When the generic subprogram acts as a compilation unit, inspect
--- 1711,1719 ----
  
        elsif Nkind (Templ) = N_Generic_Subprogram_Declaration then
           if Nkind (Specification (Templ)) = N_Function_Specification then
!             Mutate_Ekind (Templ_Id, E_Generic_Function);
           else
!             Mutate_Ekind (Templ_Id, E_Generic_Procedure);
           end if;
  
           --  When the generic subprogram acts as a compilation unit, inspect
*************** package body Contracts is
*** 1622,1628 ****
        --  its declarations.
  
        elsif Nkind (Templ) = N_Subprogram_Body then
!          Set_Ekind (Templ_Id, E_Subprogram_Body);
  
           if Present (Declarations (Templ)) then
              Decl := First (Declarations (Templ));
--- 1737,1743 ----
        --  its declarations.
  
        elsif Nkind (Templ) = N_Subprogram_Body then
!          Mutate_Ekind (Templ_Id, E_Subprogram_Body);
  
           if Present (Declarations (Templ)) then
              Decl := First (Declarations (Templ));
*************** package body Contracts is
*** 1922,1928 ****
        procedure Add_Stable_Property_Contracts
          (Subp_Id : Entity_Id; Class_Present : Boolean)
        is
!          Loc         : constant Source_Ptr := Sloc (Subp_Id);
  
           procedure Insert_Stable_Property_Check
             (Formal : Entity_Id; Property_Function : Entity_Id);
--- 2037,2043 ----
        procedure Add_Stable_Property_Contracts
          (Subp_Id : Entity_Id; Class_Present : Boolean)
        is
!          Loc : constant Source_Ptr := Sloc (Subp_Id);
  
           procedure Insert_Stable_Property_Check
             (Formal : Entity_Id; Property_Function : Entity_Id);
*************** package body Contracts is
*** 2367,2372 ****
--- 2482,2491 ----
           --  postconditions until finalization has been performed when cleanup
           --  actions are present.
  
+          --  NOTE: This flag could be made into a predicate since we should be
+          --  able at compile time to recognize when finalization and cleanup
+          --  actions occur, but in practice this is not possible ???
+ 
           --  Generate:
           --
           --    Postcond_Enabled : Boolean := True;
*************** package body Contracts is
*** 2405,2420 ****
           --  the postconditions: this would cause confusing debug info to be
           --  produced, interfering with coverage-analysis tools.
  
!          --  Also, wrap the postcondition checks in a conditional which can be
!          --  used to delay their evaluation when clean-up actions are present.
  
           --  Generate:
           --
           --    procedure _postconditions is
           --    begin
!          --       if Postcond_Enabled and then Return_Success_For_Postcond then
!          --          [Stmts];
!          --       end if;
           --    end;
  
           Proc_Bod :=
--- 2524,2539 ----
           --  the postconditions: this would cause confusing debug info to be
           --  produced, interfering with coverage-analysis tools.
  
!          --  NOTE: Coverage-analysis and static-analysis tools rely on the
!          --  postconditions procedure being free of internally generated code
!          --  since some of these tools, like CodePeer, treat _postconditions
!          --  as original source.
  
           --  Generate:
           --
           --    procedure _postconditions is
           --    begin
!          --       [Stmts];
           --    end;
  
           Proc_Bod :=
*************** package body Contracts is
*** 2425,2443 ****
               Handled_Statement_Sequence =>
                 Make_Handled_Sequence_Of_Statements (Loc,
                   End_Label  => Make_Identifier (Loc, Chars (Proc_Id)),
!                  Statements => New_List (
!                    Make_If_Statement (Loc,
!                      Condition      =>
!                        Make_And_Then (Loc,
!                          Left_Opnd  =>
!                            New_Occurrence_Of
!                              (Defining_Identifier
!                                (Postcond_Enabled_Decl), Loc),
!                          Right_Opnd =>
!                            New_Occurrence_Of
!                              (Defining_Identifier
!                                (Return_Success_Decl), Loc)),
!                       Then_Statements => Stmts))));
           Insert_After_And_Analyze (Last_Decl, Proc_Bod);
  
        end Build_Postconditions_Procedure;
--- 2544,2550 ----
               Handled_Statement_Sequence =>
                 Make_Handled_Sequence_Of_Statements (Loc,
                   End_Label  => Make_Identifier (Loc, Chars (Proc_Id)),
!                  Statements => Stmts));
           Insert_After_And_Analyze (Last_Decl, Proc_Bod);
  
        end Build_Postconditions_Procedure;
*************** package body Contracts is
*** 2582,2594 ****
           ---------------------------------
  
           procedure Process_Spec_Postconditions is
!             Subps   : constant Subprogram_List :=
!                         Inherited_Subprograms (Spec_Id);
              Item    : Node_Id;
              Items   : Node_Id;
              Prag    : Node_Id;
              Subp_Id : Entity_Id;
  
           begin
              --  Process the contract
  
--- 2689,2726 ----
           ---------------------------------
  
           procedure Process_Spec_Postconditions is
!             Subps : constant Subprogram_List :=
!                       Inherited_Subprograms (Spec_Id);
!             Seen  : Subprogram_List (Subps'Range) := (others => Empty);
! 
!             function Seen_Subp (Subp_Id : Entity_Id) return Boolean;
!             --  Return True if the contract of subprogram Subp_Id has been
!             --  processed.
! 
!             ---------------
!             -- Seen_Subp --
!             ---------------
! 
!             function Seen_Subp (Subp_Id : Entity_Id) return Boolean is
!             begin
!                for Index in Seen'Range loop
!                   if Seen (Index) = Subp_Id then
!                      return True;
!                   end if;
!                end loop;
! 
!                return False;
!             end Seen_Subp;
! 
!             --  Local variables
! 
              Item    : Node_Id;
              Items   : Node_Id;
              Prag    : Node_Id;
              Subp_Id : Entity_Id;
  
+          --  Start of processing for Process_Spec_Postconditions
+ 
           begin
              --  Process the contract
  
*************** package body Contracts is
*** 2614,2622 ****
  
              for Index in Subps'Range loop
                 Subp_Id := Subps (Index);
-                Items   := Contract (Subp_Id);
  
!                if Present (Items) then
                    Prag := Pre_Post_Conditions (Items);
                    while Present (Prag) loop
                       if Pragma_Name (Prag) = Name_Postcondition
--- 2746,2770 ----
  
              for Index in Subps'Range loop
                 Subp_Id := Subps (Index);
  
!                if Present (Alias (Subp_Id)) then
!                   Subp_Id := Ultimate_Alias (Subp_Id);
!                end if;
! 
!                --  Wrappers of class-wide pre/postconditions reference the
!                --  parent primitive that has the inherited contract.
! 
!                if Is_Wrapper (Subp_Id)
!                  and then Present (LSP_Subprogram (Subp_Id))
!                then
!                   Subp_Id := LSP_Subprogram (Subp_Id);
!                end if;
! 
!                Items := Contract (Subp_Id);
! 
!                if not Seen_Subp (Subp_Id) and then Present (Items) then
!                   Seen (Index) := Subp_Id;
! 
                    Prag := Pre_Post_Conditions (Items);
                    while Present (Prag) loop
                       if Pragma_Name (Prag) = Name_Postcondition
*************** package body Contracts is
*** 2673,2682 ****
        ---------------------------
  
        procedure Process_Preconditions is
-          Class_Pre : Node_Id := Empty;
-          --  The sole [inherited] class-wide precondition pragma that applies
-          --  to the subprogram.
- 
           Insert_Node : Node_Id := Empty;
           --  The insertion node after which all pragma Check equivalents are
           --  inserted.
--- 2821,2826 ----
*************** package body Contracts is
*** 2685,2705 ****
           --  Determine whether arbitrary declaration Decl denotes a renaming of
           --  a discriminant or protection field _object.
  
-          procedure Merge_Preconditions (From : Node_Id; Into : Node_Id);
-          --  Merge two class-wide preconditions by "or else"-ing them. The
-          --  changes are accumulated in parameter Into. Update the error
-          --  message of Into.
- 
           procedure Prepend_To_Decls (Item : Node_Id);
           --  Prepend a single item to the declarations of the subprogram body
  
!          procedure Prepend_To_Decls_Or_Save (Prag : Node_Id);
!          --  Save a class-wide precondition into Class_Pre, or prepend a normal
!          --  precondition to the declarations of the body and analyze it.
! 
!          procedure Process_Inherited_Preconditions;
!          --  Collect all inherited class-wide preconditions and merge them into
!          --  one big precondition to be evaluated as pragma Check.
  
           procedure Process_Preconditions_For (Subp_Id : Entity_Id);
           --  Collect all preconditions of subprogram Subp_Id and prepend their
--- 2829,2840 ----
           --  Determine whether arbitrary declaration Decl denotes a renaming of
           --  a discriminant or protection field _object.
  
           procedure Prepend_To_Decls (Item : Node_Id);
           --  Prepend a single item to the declarations of the subprogram body
  
!          procedure Prepend_Pragma_To_Decls (Prag : Node_Id);
!          --  Prepend a normal precondition to the declarations of the body and
!          --  analyze it.
  
           procedure Process_Preconditions_For (Subp_Id : Entity_Id);
           --  Collect all preconditions of subprogram Subp_Id and prepend their
*************** package body Contracts is
*** 2753,2830 ****
              return False;
           end Is_Prologue_Renaming;
  
-          -------------------------
-          -- Merge_Preconditions --
-          -------------------------
- 
-          procedure Merge_Preconditions (From : Node_Id; Into : Node_Id) is
-             function Expression_Arg (Prag : Node_Id) return Node_Id;
-             --  Return the boolean expression argument of a precondition while
-             --  updating its parentheses count for the subsequent merge.
- 
-             function Message_Arg (Prag : Node_Id) return Node_Id;
-             --  Return the message argument of a precondition
- 
-             --------------------
-             -- Expression_Arg --
-             --------------------
- 
-             function Expression_Arg (Prag : Node_Id) return Node_Id is
-                Args : constant List_Id := Pragma_Argument_Associations (Prag);
-                Arg  : constant Node_Id := Get_Pragma_Arg (Next (First (Args)));
- 
-             begin
-                if Paren_Count (Arg) = 0 then
-                   Set_Paren_Count (Arg, 1);
-                end if;
- 
-                return Arg;
-             end Expression_Arg;
- 
-             -----------------
-             -- Message_Arg --
-             -----------------
- 
-             function Message_Arg (Prag : Node_Id) return Node_Id is
-                Args : constant List_Id := Pragma_Argument_Associations (Prag);
-             begin
-                return Get_Pragma_Arg (Last (Args));
-             end Message_Arg;
- 
-             --  Local variables
- 
-             From_Expr : constant Node_Id := Expression_Arg (From);
-             From_Msg  : constant Node_Id := Message_Arg    (From);
-             Into_Expr : constant Node_Id := Expression_Arg (Into);
-             Into_Msg  : constant Node_Id := Message_Arg    (Into);
-             Loc       : constant Source_Ptr := Sloc (Into);
- 
-          --  Start of processing for Merge_Preconditions
- 
-          begin
-             --  Merge the two preconditions by "or else"-ing them
- 
-             Rewrite (Into_Expr,
-               Make_Or_Else (Loc,
-                 Right_Opnd => Relocate_Node (Into_Expr),
-                 Left_Opnd  => From_Expr));
- 
-             --  Merge the two error messages to produce a single message of the
-             --  form:
- 
-             --    failed precondition from ...
-             --      also failed inherited precondition from ...
- 
-             if not Exception_Locations_Suppressed then
-                Start_String (Strval (Into_Msg));
-                Store_String_Char (ASCII.LF);
-                Store_String_Chars ("  also ");
-                Store_String_Chars (Strval (From_Msg));
- 
-                Set_Strval (Into_Msg, End_String);
-             end if;
-          end Merge_Preconditions;
- 
           ----------------------
           -- Prepend_To_Decls --
           ----------------------
--- 2888,2893 ----
*************** package body Contracts is
*** 2845,2872 ****
              Prepend_To (Decls, Item);
           end Prepend_To_Decls;
  
!          ------------------------------
!          -- Prepend_To_Decls_Or_Save --
!          ------------------------------
  
!          procedure Prepend_To_Decls_Or_Save (Prag : Node_Id) is
              Check_Prag : Node_Id;
  
           begin
!             Check_Prag := Build_Pragma_Check_Equivalent (Prag);
! 
!             --  Save the sole class-wide precondition (if any) for the next
!             --  step, where it will be merged with inherited preconditions.
  
              if Class_Present (Prag) then
!                pragma Assert (No (Class_Pre));
!                Class_Pre := Check_Prag;
  
              --  Accumulate the corresponding Check pragmas at the top of the
              --  declarations. Prepending the items ensures that they will be
              --  evaluated in their original order.
  
              else
                 if Present (Insert_Node) then
                    Insert_After (Insert_Node, Check_Prag);
                 else
--- 2908,2934 ----
              Prepend_To (Decls, Item);
           end Prepend_To_Decls;
  
!          -----------------------------
!          -- Prepend_Pragma_To_Decls --
!          -----------------------------
  
!          procedure Prepend_Pragma_To_Decls (Prag : Node_Id) is
              Check_Prag : Node_Id;
  
           begin
!             --  Skip the sole class-wide precondition (if any) since it is
!             --  processed by Merge_Class_Conditions.
  
              if Class_Present (Prag) then
!                null;
  
              --  Accumulate the corresponding Check pragmas at the top of the
              --  declarations. Prepending the items ensures that they will be
              --  evaluated in their original order.
  
              else
+                Check_Prag := Build_Pragma_Check_Equivalent (Prag);
+ 
                 if Present (Insert_Node) then
                    Insert_After (Insert_Node, Check_Prag);
                 else
*************** package body Contracts is
*** 2875,2947 ****
  
                 Analyze (Check_Prag);
              end if;
!          end Prepend_To_Decls_Or_Save;
! 
!          -------------------------------------
!          -- Process_Inherited_Preconditions --
!          -------------------------------------
! 
!          procedure Process_Inherited_Preconditions is
!             Subps : constant Subprogram_List :=
!                       Inherited_Subprograms (Spec_Id);
! 
!             Item    : Node_Id;
!             Items   : Node_Id;
!             Prag    : Node_Id;
!             Subp_Id : Entity_Id;
! 
!          begin
!             --  Process the contracts of all inherited subprograms, looking for
!             --  class-wide preconditions.
! 
!             for Index in Subps'Range loop
!                Subp_Id := Subps (Index);
!                Items   := Contract (Subp_Id);
! 
!                if Present (Items) then
!                   Prag := Pre_Post_Conditions (Items);
!                   while Present (Prag) loop
!                      if Pragma_Name (Prag) = Name_Precondition
!                        and then Class_Present (Prag)
!                      then
!                         Item :=
!                           Build_Pragma_Check_Equivalent
!                             (Prag     => Prag,
!                              Subp_Id  => Spec_Id,
!                              Inher_Id => Subp_Id);
! 
!                         --  The pragma Check equivalent of the class-wide
!                         --  precondition is still created even though the
!                         --  pragma may be ignored because the equivalent
!                         --  performs semantic checks.
! 
!                         if Is_Checked (Prag) then
! 
!                            --  The spec of an inherited subprogram already
!                            --  yielded a class-wide precondition. Merge the
!                            --  existing precondition with the current one
!                            --  using "or else".
! 
!                            if Present (Class_Pre) then
!                               Merge_Preconditions (Item, Class_Pre);
!                            else
!                               Class_Pre := Item;
!                            end if;
!                         end if;
!                      end if;
! 
!                      Prag := Next_Pragma (Prag);
!                   end loop;
!                end if;
!             end loop;
! 
!             --  Add the merged class-wide preconditions
! 
!             if Present (Class_Pre) then
!                Prepend_To_Decls (Class_Pre);
!                Analyze (Class_Pre);
!             end if;
!          end Process_Inherited_Preconditions;
  
           -------------------------------
           -- Process_Preconditions_For --
--- 2937,2943 ----
  
                 Analyze (Check_Prag);
              end if;
!          end Prepend_Pragma_To_Decls;
  
           -------------------------------
           -- Process_Preconditions_For --
*************** package body Contracts is
*** 2985,2991 ****
                             N      => Body_Decl);
                       end if;
  
!                      Prepend_To_Decls_Or_Save (Prag);
                    end if;
  
                    Prag := Next_Pragma (Prag);
--- 2981,2987 ----
                             N      => Body_Decl);
                       end if;
  
!                      Prepend_Pragma_To_Decls (Prag);
                    end if;
  
                    Prag := Next_Pragma (Prag);
*************** package body Contracts is
*** 3010,3016 ****
                       if Pragma_Name (Decl) = Name_Precondition
                         and then Is_Checked (Decl)
                       then
!                         Prepend_To_Decls_Or_Save (Decl);
                       end if;
  
                    --  Skip internally generated code
--- 3006,3012 ----
                       if Pragma_Name (Decl) = Name_Precondition
                         and then Is_Checked (Decl)
                       then
!                         Prepend_Pragma_To_Decls (Decl);
                       end if;
  
                    --  Skip internally generated code
*************** package body Contracts is
*** 3075,3096 ****
  
                 Next (Decl);
              end loop;
-          end if;
  
!          --  The processing of preconditions is done in reverse order (body
!          --  first), because each pragma Check equivalent is inserted at the
!          --  top of the declarations. This ensures that the final order is
!          --  consistent with following diagram:
  
!          --    <inherited preconditions>
!          --    <preconditions from spec>
!          --    <preconditions from body>
  
!          Process_Preconditions_For (Body_Id);
  
           if Present (Spec_Id) then
              Process_Preconditions_For (Spec_Id);
-             Process_Inherited_Preconditions;
           end if;
        end Process_Preconditions;
  
--- 3071,3091 ----
  
                 Next (Decl);
              end loop;
  
!             --  The processing of preconditions is done in reverse order (body
!             --  first), because each pragma Check equivalent is inserted at the
!             --  top of the declarations. This ensures that the final order is
!             --  consistent with following diagram:
  
!             --    <inherited preconditions>
!             --    <preconditions from spec>
!             --    <preconditions from body>
  
!             Process_Preconditions_For (Body_Id);
!          end if;
  
           if Present (Spec_Id) then
              Process_Preconditions_For (Spec_Id);
           end if;
        end Process_Preconditions;
  
*************** package body Contracts is
*** 3141,3146 ****
--- 3136,3147 ----
        elsif Is_Ignored_Ghost_Entity (Subp_Id) then
           return;
  
+       --  No action needed for helpers and indirect-call wrapper built to
+       --  support class-wide preconditions.
+ 
+       elsif Present (Class_Preconditions_Subprogram (Subp_Id)) then
+          return;
+ 
        --  Do not re-expand the same contract. This scenario occurs when a
        --  construct is rewritten into something else during its analysis
        --  (expression functions for instance).
*************** package body Contracts is
*** 3442,3448 ****
     -- Get_Postcond_Enabled --
     --------------------------
  
!    function Get_Postcond_Enabled (Subp : Entity_Id) return Node_Id is
        Decl : Node_Id;
     begin
        Decl :=
--- 3443,3449 ----
     -- Get_Postcond_Enabled --
     --------------------------
  
!    function Get_Postcond_Enabled (Subp : Entity_Id) return Entity_Id is
        Decl : Node_Id;
     begin
        Decl :=
*************** package body Contracts is
*** 3467,3473 ****
     ------------------------------------
  
     function Get_Result_Object_For_Postcond
!      (Subp : Entity_Id) return Node_Id
     is
        Decl : Node_Id;
     begin
--- 3468,3474 ----
     ------------------------------------
  
     function Get_Result_Object_For_Postcond
!      (Subp : Entity_Id) return Entity_Id
     is
        Decl : Node_Id;
     begin
*************** package body Contracts is
*** 3492,3498 ****
     -- Get_Return_Success_For_Postcond --
     -------------------------------------
  
!    function Get_Return_Success_For_Postcond (Subp : Entity_Id) return Node_Id
     is
        Decl : Node_Id;
     begin
--- 3493,3499 ----
     -- Get_Return_Success_For_Postcond --
     -------------------------------------
  
!    function Get_Return_Success_For_Postcond (Subp : Entity_Id) return Entity_Id
     is
        Decl : Node_Id;
     begin
*************** package body Contracts is
*** 3607,3612 ****
--- 3608,4799 ----
        end if;
     end Instantiate_Subprogram_Contract;
  
+    -----------------------------------
+    -- Make_Class_Precondition_Subps --
+    -----------------------------------
+ 
+    procedure Make_Class_Precondition_Subps
+      (Subp_Id         : Entity_Id;
+       Late_Overriding : Boolean := False)
+    is
+       Loc         : constant Source_Ptr := Sloc (Subp_Id);
+       Tagged_Type : constant Entity_Id := Find_Dispatching_Type (Subp_Id);
+ 
+       procedure Add_Indirect_Call_Wrapper;
+       --  Build the indirect-call wrapper and append it to the freezing actions
+       --  of Tagged_Type.
+ 
+       procedure Add_Call_Helper
+         (Helper_Id  : Entity_Id;
+          Is_Dynamic : Boolean);
+       --  Factorizes code for building a call helper with the given identifier
+       --  and append it to the freezing actions of Tagged_Type. Is_Dynamic
+       --  controls building the static or dynamic version of the helper.
+ 
+       -------------------------------
+       -- Add_Indirect_Call_Wrapper --
+       -------------------------------
+ 
+       procedure Add_Indirect_Call_Wrapper is
+ 
+          function Build_ICW_Body return Node_Id;
+          --  Build the body of the indirect call wrapper
+ 
+          function Build_ICW_Decl return Node_Id;
+          --  Build the declaration of the indirect call wrapper
+ 
+          --------------------
+          -- Build_ICW_Body --
+          --------------------
+ 
+          function Build_ICW_Body return Node_Id is
+             ICW_Id    : constant Entity_Id := Indirect_Call_Wrapper (Subp_Id);
+             Spec      : constant Node_Id   := Parent (ICW_Id);
+             Body_Spec : Node_Id;
+             Call      : Node_Id;
+             ICW_Body  : Node_Id;
+ 
+          begin
+             Body_Spec := Copy_Subprogram_Spec (Spec);
+ 
+             --  Build call to wrapped subprogram
+ 
+             declare
+                Actuals     : constant List_Id := Empty_List;
+                Formal_Spec : Entity_Id :=
+                                First (Parameter_Specifications (Spec));
+             begin
+                --  Build parameter association & call
+ 
+                while Present (Formal_Spec) loop
+                   Append_To (Actuals,
+                     New_Occurrence_Of
+                       (Defining_Identifier (Formal_Spec), Loc));
+                   Next (Formal_Spec);
+                end loop;
+ 
+                if Ekind (ICW_Id) = E_Procedure then
+                   Call :=
+                     Make_Procedure_Call_Statement (Loc,
+                       Name => New_Occurrence_Of (Subp_Id, Loc),
+                       Parameter_Associations => Actuals);
+                else
+                   Call :=
+                     Make_Simple_Return_Statement (Loc,
+                       Expression =>
+                         Make_Function_Call (Loc,
+                           Name => New_Occurrence_Of (Subp_Id, Loc),
+                           Parameter_Associations => Actuals));
+                end if;
+             end;
+ 
+             ICW_Body :=
+               Make_Subprogram_Body (Loc,
+                 Specification              => Body_Spec,
+                 Declarations               => New_List,
+                 Handled_Statement_Sequence =>
+                   Make_Handled_Sequence_Of_Statements (Loc,
+                     Statements => New_List (Call)));
+ 
+             --  The new operation is internal and overriding indicators do not
+             --  apply.
+ 
+             Set_Must_Override (Body_Spec, False);
+ 
+             return ICW_Body;
+          end Build_ICW_Body;
+ 
+          --------------------
+          -- Build_ICW_Decl --
+          --------------------
+ 
+          function Build_ICW_Decl return Node_Id is
+             ICW_Id : constant Entity_Id  :=
+                        Make_Defining_Identifier (Loc,
+                          New_External_Name (Chars (Subp_Id),
+                            Suffix       => "ICW",
+                            Suffix_Index => Source_Offset (Loc)));
+             Decl   : Node_Id;
+             Spec   : Node_Id;
+ 
+          begin
+             Spec := Copy_Subprogram_Spec (Parent (Subp_Id));
+             Set_Must_Override      (Spec, False);
+             Set_Must_Not_Override  (Spec, False);
+             Set_Defining_Unit_Name (Spec, ICW_Id);
+             Mutate_Ekind  (ICW_Id, Ekind (Subp_Id));
+             Set_Is_Public (ICW_Id);
+ 
+             --  The indirect call wrapper is commonly used for indirect calls
+             --  but inlined for direct calls performed from the DTW.
+ 
+             Set_Is_Inlined (ICW_Id);
+ 
+             if Nkind (Spec) = N_Procedure_Specification then
+                Set_Null_Present (Spec, False);
+             end if;
+ 
+             Decl := Make_Subprogram_Declaration (Loc, Spec);
+ 
+             --  Link original subprogram to indirect wrapper and vice versa
+ 
+             Set_Indirect_Call_Wrapper (Subp_Id, ICW_Id);
+             Set_Class_Preconditions_Subprogram (ICW_Id, Subp_Id);
+ 
+             --  Inherit debug info flag to allow debugging the wrapper
+ 
+             if Needs_Debug_Info (Subp_Id) then
+                Set_Debug_Info_Needed (ICW_Id);
+             end if;
+ 
+             return Decl;
+          end Build_ICW_Decl;
+ 
+          --  Local Variables
+ 
+          ICW_Body : Node_Id;
+          ICW_Decl : Node_Id;
+ 
+       --  Start of processing for Add_Indirect_Call_Wrapper
+ 
+       begin
+          pragma Assert (No (Indirect_Call_Wrapper (Subp_Id)));
+ 
+          ICW_Decl := Build_ICW_Decl;
+ 
+          Append_Freeze_Action (Tagged_Type, ICW_Decl);
+          Analyze (ICW_Decl);
+ 
+          ICW_Body := Build_ICW_Body;
+          Append_Freeze_Action (Tagged_Type, ICW_Body);
+ 
+          --  We cannot defer the analysis of this ICW wrapper when it is
+          --  built as a consequence of building its partner DTW wrapper
+          --  at the freezing point of the tagged type.
+ 
+          if Is_Dispatch_Table_Wrapper (Subp_Id) then
+             Analyze (ICW_Body);
+          end if;
+       end Add_Indirect_Call_Wrapper;
+ 
+       ---------------------
+       -- Add_Call_Helper --
+       ---------------------
+ 
+       procedure Add_Call_Helper
+         (Helper_Id  : Entity_Id;
+          Is_Dynamic : Boolean)
+       is
+          function Build_Call_Helper_Body return Node_Id;
+          --  Build the body of a call helper
+ 
+          function Build_Call_Helper_Decl return Node_Id;
+          --  Build the declaration of a call helper
+ 
+          function Build_Call_Helper_Spec (Spec_Id : Entity_Id) return Node_Id;
+          --  Build the specification of the helper
+ 
+          ----------------------------
+          -- Build_Call_Helper_Body --
+          ----------------------------
+ 
+          function Build_Call_Helper_Body return Node_Id is
+ 
+             function Copy_And_Update_References
+               (Expr : Node_Id) return Node_Id;
+             --  Copy Expr updating references to formals of Helper_Id; update
+             --  also references to loop identifiers of quantified expressions.
+ 
+             --------------------------------
+             -- Copy_And_Update_References --
+             --------------------------------
+ 
+             function Copy_And_Update_References
+               (Expr : Node_Id) return Node_Id
+             is
+                Assoc_List : constant Elist_Id := New_Elmt_List;
+ 
+                procedure Map_Quantified_Expression_Loop_Identifiers;
+                --  Traverse Expr and append to Assoc_List the mapping of loop
+                --  identifers of quantified expressions with its new copy.
+ 
+                ------------------------------------------------
+                -- Map_Quantified_Expression_Loop_Identifiers --
+                ------------------------------------------------
+ 
+                procedure Map_Quantified_Expression_Loop_Identifiers is
+                   function Map_Loop_Param (N : Node_Id) return Traverse_Result;
+                   --  Append to Assoc_List the mapping of loop identifers of
+                   --  quantified expressions with its new copy.
+ 
+                   --------------------
+                   -- Map_Loop_Param --
+                   --------------------
+ 
+                   function Map_Loop_Param (N : Node_Id) return Traverse_Result
+                   is
+                   begin
+                      if Nkind (N) = N_Loop_Parameter_Specification
+                        and then Nkind (Parent (N)) = N_Quantified_Expression
+                      then
+                         declare
+                            Def_Id : constant Entity_Id :=
+                                       Defining_Identifier (N);
+                         begin
+                            Append_Elmt (Def_Id, Assoc_List);
+                            Append_Elmt (New_Copy (Def_Id), Assoc_List);
+                         end;
+                      end if;
+ 
+                      return OK;
+                   end Map_Loop_Param;
+ 
+                   procedure Map_Quantified_Expressions is
+                      new Traverse_Proc (Map_Loop_Param);
+ 
+                begin
+                   Map_Quantified_Expressions (Expr);
+                end Map_Quantified_Expression_Loop_Identifiers;
+ 
+                --  Local variables
+ 
+                Subp_Formal_Id   : Entity_Id := First_Formal (Subp_Id);
+                Helper_Formal_Id : Entity_Id := First_Formal (Helper_Id);
+ 
+             --  Start of processing for Copy_And_Update_References
+ 
+             begin
+                while Present (Subp_Formal_Id) loop
+                   Append_Elmt (Subp_Formal_Id,   Assoc_List);
+                   Append_Elmt (Helper_Formal_Id, Assoc_List);
+ 
+                   Next_Formal (Subp_Formal_Id);
+                   Next_Formal (Helper_Formal_Id);
+                end loop;
+ 
+                Map_Quantified_Expression_Loop_Identifiers;
+ 
+                return New_Copy_Tree (Expr, Map => Assoc_List);
+             end Copy_And_Update_References;
+ 
+             --  Local variables
+ 
+             Helper_Decl : constant Node_Id := Parent (Parent (Helper_Id));
+             Body_Id     : Entity_Id;
+             Body_Spec   : Node_Id;
+             Body_Stmts  : Node_Id;
+             Helper_Body : Node_Id;
+             Return_Expr : Node_Id;
+ 
+          --  Start of processing for Build_Call_Helper_Body
+ 
+          begin
+             pragma Assert (Analyzed (Unit_Declaration_Node (Helper_Id)));
+             pragma Assert (No (Corresponding_Body (Helper_Decl)));
+ 
+             Body_Id   := Make_Defining_Identifier (Loc, Chars (Helper_Id));
+             Body_Spec := Build_Call_Helper_Spec (Body_Id);
+ 
+             Set_Corresponding_Body (Helper_Decl, Body_Id);
+             Set_Must_Override (Body_Spec, False);
+ 
+             if Present (Class_Preconditions (Subp_Id)) then
+                Return_Expr :=
+                  Copy_And_Update_References (Class_Preconditions (Subp_Id));
+ 
+             --  When the subprogram is compiled with assertions disabled the
+             --  helper just returns True; done to avoid reporting errors at
+             --  link time since a unit may be compiled with assertions disabled
+             --  and another (which depends on it) compiled with assertions
+             --  enabled.
+ 
+             else
+                pragma Assert (Present (Ignored_Class_Preconditions (Subp_Id)));
+                Return_Expr := New_Occurrence_Of (Standard_True, Loc);
+             end if;
+ 
+             Body_Stmts :=
+               Make_Handled_Sequence_Of_Statements (Loc,
+                 Statements => New_List (
+                   Make_Simple_Return_Statement (Loc, Return_Expr)));
+ 
+             Helper_Body :=
+               Make_Subprogram_Body (Loc,
+                 Specification              => Body_Spec,
+                 Declarations               => New_List,
+                 Handled_Statement_Sequence => Body_Stmts);
+ 
+             return Helper_Body;
+          end Build_Call_Helper_Body;
+ 
+          ----------------------------
+          -- Build_Call_Helper_Decl --
+          ----------------------------
+ 
+          function Build_Call_Helper_Decl return Node_Id is
+             Decl : Node_Id;
+             Spec : Node_Id;
+ 
+          begin
+             Spec := Build_Call_Helper_Spec (Helper_Id);
+             Set_Must_Override      (Spec, False);
+             Set_Must_Not_Override  (Spec, False);
+             Set_Is_Inlined (Helper_Id);
+             Set_Is_Public  (Helper_Id);
+ 
+             Decl := Make_Subprogram_Declaration (Loc, Spec);
+ 
+             --  Inherit debug info flag from Subp_Id to Helper_Id to allow
+             --  debugging of the helper subprogram.
+ 
+             if Needs_Debug_Info (Subp_Id) then
+                Set_Debug_Info_Needed (Helper_Id);
+             end if;
+ 
+             return Decl;
+          end Build_Call_Helper_Decl;
+ 
+          ----------------------------
+          -- Build_Call_Helper_Spec --
+          ----------------------------
+ 
+          function Build_Call_Helper_Spec (Spec_Id : Entity_Id) return Node_Id
+          is
+             Spec         : constant Node_Id := Parent (Subp_Id);
+             Def_Id       : constant Node_Id := Defining_Unit_Name (Spec);
+             Formal       : Entity_Id;
+             Func_Formals : constant List_Id := New_List;
+             P_Spec       : constant List_Id := Parameter_Specifications (Spec);
+             Par_Formal   : Node_Id;
+             Param        : Node_Id;
+             Param_Type   : Node_Id;
+ 
+          begin
+             --  Create a list of formal parameters with the same types as the
+             --  original subprogram but changing the controlling formal.
+ 
+             Param  := First (P_Spec);
+             Formal := First_Formal (Def_Id);
+             while Present (Formal) loop
+                Par_Formal := Parent (Formal);
+ 
+                if Is_Dynamic and then Is_Controlling_Formal (Formal) then
+                   if Nkind (Parameter_Type (Par_Formal))
+                     = N_Access_Definition
+                   then
+                      Param_Type :=
+                        Copy_Separate_Tree (Parameter_Type (Par_Formal));
+                      Rewrite (Subtype_Mark (Param_Type),
+                        Make_Attribute_Reference (Loc,
+                          Prefix => Relocate_Node (Subtype_Mark (Param_Type)),
+                          Attribute_Name => Name_Class));
+ 
+                   else
+                      Param_Type :=
+                        Make_Attribute_Reference (Loc,
+                          Prefix => New_Occurrence_Of (Etype (Formal), Loc),
+                          Attribute_Name => Name_Class);
+                   end if;
+                else
+                   Param_Type := New_Occurrence_Of (Etype (Formal), Loc);
+                end if;
+ 
+                Append_To (Func_Formals,
+                  Make_Parameter_Specification (Loc,
+                    Defining_Identifier    =>
+                      Make_Defining_Identifier (Loc, Chars (Formal)),
+                    In_Present             => In_Present (Par_Formal),
+                    Out_Present            => Out_Present (Par_Formal),
+                    Null_Exclusion_Present => Null_Exclusion_Present
+                                                (Par_Formal),
+                    Parameter_Type         => Param_Type));
+ 
+                Next (Param);
+                Next_Formal (Formal);
+             end loop;
+ 
+             return
+               Make_Function_Specification (Loc,
+                 Defining_Unit_Name       => Spec_Id,
+                 Parameter_Specifications => Func_Formals,
+                 Result_Definition        =>
+                   New_Occurrence_Of (Standard_Boolean, Loc));
+          end Build_Call_Helper_Spec;
+ 
+          --  Local variables
+ 
+          Helper_Body : Node_Id;
+          Helper_Decl : Node_Id;
+ 
+       --  Start of processing for Add_Call_Helper
+ 
+       begin
+          Helper_Decl := Build_Call_Helper_Decl;
+          Mutate_Ekind (Helper_Id, Ekind (Subp_Id));
+ 
+          --  Add the helper to the freezing actions of the tagged type
+ 
+          Append_Freeze_Action (Tagged_Type, Helper_Decl);
+          Analyze (Helper_Decl);
+ 
+          Helper_Body := Build_Call_Helper_Body;
+          Append_Freeze_Action (Tagged_Type, Helper_Body);
+ 
+          --  If this helper is built as part of building the DTW at the
+          --  freezing point of its tagged type then we cannot defer
+          --  its analysis.
+ 
+          if Late_Overriding then
+             pragma Assert (Is_Dispatch_Table_Wrapper (Subp_Id));
+             Analyze (Helper_Body);
+          end if;
+       end Add_Call_Helper;
+ 
+       --  Local variables
+ 
+       Helper_Id : Entity_Id;
+ 
+    --  Start of processing for Make_Class_Precondition_Subps
+ 
+    begin
+       if Present (Class_Preconditions (Subp_Id))
+         or Present (Ignored_Class_Preconditions (Subp_Id))
+       then
+          pragma Assert
+            (Comes_From_Source (Subp_Id)
+               or else Is_Dispatch_Table_Wrapper (Subp_Id));
+ 
+          if No (Dynamic_Call_Helper (Subp_Id)) then
+ 
+             --  Build and add to the freezing actions of Tagged_Type its
+             --  dynamic-call helper.
+ 
+             Helper_Id :=
+               Make_Defining_Identifier (Loc,
+                 New_External_Name (Chars (Subp_Id),
+                 Suffix       => "DP",
+                 Suffix_Index => Source_Offset (Loc)));
+             Add_Call_Helper (Helper_Id, Is_Dynamic => True);
+ 
+             --  Link original subprogram to helper and vice versa
+ 
+             Set_Dynamic_Call_Helper (Subp_Id, Helper_Id);
+             Set_Class_Preconditions_Subprogram (Helper_Id, Subp_Id);
+          end if;
+ 
+          if not Is_Abstract_Subprogram (Subp_Id)
+            and then No (Static_Call_Helper (Subp_Id))
+          then
+             --  Build and add to the freezing actions of Tagged_Type its
+             --  static-call helper.
+ 
+             Helper_Id :=
+               Make_Defining_Identifier (Loc,
+                 New_External_Name (Chars (Subp_Id),
+                 Suffix       => "SP",
+                 Suffix_Index => Source_Offset (Loc)));
+ 
+             Add_Call_Helper (Helper_Id, Is_Dynamic => False);
+ 
+             --  Link original subprogram to helper and vice versa
+ 
+             Set_Static_Call_Helper (Subp_Id, Helper_Id);
+             Set_Class_Preconditions_Subprogram (Helper_Id, Subp_Id);
+ 
+             --  Build and add to the freezing actions of Tagged_Type the
+             --  indirect-call wrapper.
+ 
+             Add_Indirect_Call_Wrapper;
+          end if;
+       end if;
+    end Make_Class_Precondition_Subps;
+ 
+    ----------------------------------------------
+    -- Process_Class_Conditions_At_Freeze_Point --
+    ----------------------------------------------
+ 
+    procedure Process_Class_Conditions_At_Freeze_Point (Typ : Entity_Id) is
+ 
+       procedure Check_Class_Conditions (Spec_Id : Entity_Id);
+       --  Check class-wide pre/postconditions of Spec_Id
+ 
+       function Has_Class_Postconditions_Subprogram
+         (Spec_Id : Entity_Id) return Boolean;
+       --  Return True if Spec_Id has (or inherits) a postconditions subprogram.
+ 
+       function Has_Class_Preconditions_Subprogram
+         (Spec_Id : Entity_Id) return Boolean;
+       --  Return True if Spec_Id has (or inherits) a preconditions subprogram.
+ 
+       ----------------------------
+       -- Check_Class_Conditions --
+       ----------------------------
+ 
+       procedure Check_Class_Conditions (Spec_Id : Entity_Id) is
+          Par_Subp : Entity_Id;
+ 
+       begin
+          for Kind in Condition_Kind loop
+             Par_Subp := Nearest_Class_Condition_Subprogram (Kind, Spec_Id);
+ 
+             if Present (Par_Subp) then
+                Check_Class_Condition
+                  (Cond            => Class_Condition (Kind, Par_Subp),
+                   Subp            => Spec_Id,
+                   Par_Subp        => Par_Subp,
+                   Is_Precondition => Kind in Ignored_Class_Precondition
+                                            | Class_Precondition);
+             end if;
+          end loop;
+       end Check_Class_Conditions;
+ 
+       -----------------------------------------
+       -- Has_Class_Postconditions_Subprogram --
+       -----------------------------------------
+ 
+       function Has_Class_Postconditions_Subprogram
+         (Spec_Id : Entity_Id) return Boolean is
+       begin
+          return
+            Present (Nearest_Class_Condition_Subprogram
+                      (Spec_Id => Spec_Id,
+                       Kind    => Class_Postcondition))
+              or else
+            Present (Nearest_Class_Condition_Subprogram
+                      (Spec_Id => Spec_Id,
+                       Kind    => Ignored_Class_Postcondition));
+       end Has_Class_Postconditions_Subprogram;
+ 
+       ----------------------------------------
+       -- Has_Class_Preconditions_Subprogram --
+       ----------------------------------------
+ 
+       function Has_Class_Preconditions_Subprogram
+         (Spec_Id : Entity_Id) return Boolean is
+       begin
+          return
+            Present (Nearest_Class_Condition_Subprogram
+                      (Spec_Id => Spec_Id,
+                       Kind    => Class_Precondition))
+              or else
+            Present (Nearest_Class_Condition_Subprogram
+                      (Spec_Id => Spec_Id,
+                       Kind    => Ignored_Class_Precondition));
+       end Has_Class_Preconditions_Subprogram;
+ 
+       --  Local variables
+ 
+       Prim_Elmt : Elmt_Id := First_Elmt (Primitive_Operations (Typ));
+       Prim      : Entity_Id;
+ 
+    --  Start of processing for Process_Class_Conditions_At_Freeze_Point
+ 
+    begin
+       while Present (Prim_Elmt) loop
+          Prim := Node (Prim_Elmt);
+ 
+          if Has_Class_Preconditions_Subprogram (Prim)
+            or else Has_Class_Postconditions_Subprogram (Prim)
+          then
+             if Comes_From_Source (Prim) then
+                if Has_Significant_Contract (Prim) then
+                   Merge_Class_Conditions (Prim);
+                end if;
+ 
+             --  Handle wrapper of protected operation
+ 
+             elsif Is_Primitive_Wrapper (Prim) then
+                Merge_Class_Conditions (Prim);
+ 
+             --  Check inherited class-wide conditions, excluding internal
+             --  entities built for mapping of interface primitives.
+ 
+             elsif Is_Derived_Type (Typ)
+               and then Present (Alias (Prim))
+               and then No (Interface_Alias (Prim))
+             then
+                Check_Class_Conditions (Prim);
+             end if;
+          end if;
+ 
+          Next_Elmt (Prim_Elmt);
+       end loop;
+    end Process_Class_Conditions_At_Freeze_Point;
+ 
+    ----------------------------
+    -- Merge_Class_Conditions --
+    ----------------------------
+ 
+    procedure Merge_Class_Conditions (Spec_Id : Entity_Id) is
+ 
+       procedure Preanalyze_Condition
+         (Subp : Entity_Id;
+          Expr : Node_Id);
+       --  Preanalyze the class-wide condition Expr of Subp
+ 
+       procedure Process_Inherited_Conditions (Kind : Condition_Kind);
+       --  Collect all inherited class-wide conditions of Spec_Id and merge
+       --  them into one big condition.
+ 
+       --------------------------
+       -- Preanalyze_Condition --
+       --------------------------
+ 
+       procedure Preanalyze_Condition
+         (Subp : Entity_Id;
+          Expr : Node_Id)
+       is
+          procedure Clear_Unset_References;
+          --  Clear unset references on formals of Subp since preanalysis
+          --  occurs in a place unrelated to the actual code.
+ 
+          procedure Remove_Controlling_Arguments;
+          --  Traverse Expr and clear the Controlling_Argument of calls to
+          --  nonabstract functions.
+ 
+          procedure Remove_Formals (Id : Entity_Id);
+          --  Remove formals from homonym chains and make them not visible
+ 
+          procedure Restore_Original_Selected_Component;
+          --  Traverse Expr searching for dispatching calls to functions whose
+          --  original node was a selected component, and replace them with
+          --  their original node.
+ 
+          ----------------------------
+          -- Clear_Unset_References --
+          ----------------------------
+ 
+          procedure Clear_Unset_References is
+             F : Entity_Id := First_Formal (Subp);
+ 
+          begin
+             while Present (F) loop
+                Set_Unset_Reference (F, Empty);
+                Next_Formal (F);
+             end loop;
+          end Clear_Unset_References;
+ 
+          ----------------------------------
+          -- Remove_Controlling_Arguments --
+          ----------------------------------
+ 
+          procedure Remove_Controlling_Arguments is
+             function Remove_Ctrl_Arg (N : Node_Id) return Traverse_Result;
+             --  Reset the Controlling_Argument of calls to nonabstract
+             --  function calls.
+ 
+             ---------------------
+             -- Remove_Ctrl_Arg --
+             ---------------------
+ 
+             function Remove_Ctrl_Arg (N : Node_Id) return Traverse_Result is
+             begin
+                if Nkind (N) = N_Function_Call
+                  and then Present (Controlling_Argument (N))
+                  and then not Is_Abstract_Subprogram (Entity (Name (N)))
+                then
+                   Set_Controlling_Argument (N, Empty);
+                end if;
+ 
+                return OK;
+             end Remove_Ctrl_Arg;
+ 
+             procedure Remove_Ctrl_Args is new Traverse_Proc (Remove_Ctrl_Arg);
+          begin
+             Remove_Ctrl_Args (Expr);
+          end Remove_Controlling_Arguments;
+ 
+          --------------------
+          -- Remove_Formals --
+          --------------------
+ 
+          procedure Remove_Formals (Id : Entity_Id) is
+             F : Entity_Id := First_Formal (Id);
+ 
+          begin
+             while Present (F) loop
+                Set_Is_Immediately_Visible (F, False);
+                Remove_Homonym (F);
+                Next_Formal (F);
+             end loop;
+          end Remove_Formals;
+ 
+          -----------------------------------------
+          -- Restore_Original_Selected_Component --
+          -----------------------------------------
+ 
+          procedure Restore_Original_Selected_Component is
+             Restored_Nodes_List : Elist_Id := No_Elist;
+ 
+             procedure Fix_Parents (N : Node_Id);
+             --  Traverse the subtree of N fixing the Parent field of all the
+             --  nodes.
+ 
+             function Restore_Node (N : Node_Id) return Traverse_Result;
+             --  Process dispatching calls to functions whose original node was
+             --  a selected component, and replace them with their original
+             --  node. Restored nodes are stored in the Restored_Nodes_List
+             --  to fix the parent fields of their subtrees in a separate
+             --  tree traversal.
+ 
+             -----------------
+             -- Fix_Parents --
+             -----------------
+ 
+             procedure Fix_Parents (N : Node_Id) is
+ 
+                function Fix_Parent
+                  (Parent_Node : Node_Id;
+                   Node        : Node_Id) return Traverse_Result;
+                --  Process a single node
+ 
+                ----------------
+                -- Fix_Parent --
+                ----------------
+ 
+                function Fix_Parent
+                  (Parent_Node : Node_Id;
+                   Node        : Node_Id) return Traverse_Result
+                is
+                   Par : constant Node_Id := Parent (Node);
+ 
+                begin
+                   if Par /= Parent_Node then
+                      pragma Assert (not Is_List_Member (Node));
+                      Set_Parent (Node, Parent_Node);
+                   end if;
+ 
+                   return OK;
+                end Fix_Parent;
+ 
+                procedure Fix_Parents is
+                   new Traverse_Proc_With_Parent (Fix_Parent);
+ 
+             begin
+                Fix_Parents (N);
+             end Fix_Parents;
+ 
+             ------------------
+             -- Restore_Node --
+             ------------------
+ 
+             function Restore_Node (N : Node_Id) return Traverse_Result is
+             begin
+                if Nkind (N) = N_Function_Call
+                  and then Nkind (Original_Node (N)) = N_Selected_Component
+                  and then Is_Dispatching_Operation (Entity (Name (N)))
+                then
+                   Rewrite (N, Original_Node (N));
+                   Set_Original_Node (N, N);
+ 
+                   --  Save the restored node in the Restored_Nodes_List to fix
+                   --  the parent fields of their subtrees in a separate tree
+                   --  traversal.
+ 
+                   Append_New_Elmt (N, Restored_Nodes_List);
+                end if;
+ 
+                return OK;
+             end Restore_Node;
+ 
+             procedure Restore_Nodes is new Traverse_Proc (Restore_Node);
+ 
+          --  Start of processing for Restore_Original_Selected_Component
+ 
+          begin
+             Restore_Nodes (Expr);
+ 
+             --  After restoring the original node we must fix the decoration
+             --  of the Parent attribute to ensure tree consistency; required
+             --  because when the class-wide condition is inherited, calls to
+             --  New_Copy_Tree will perform copies of this subtree, and formal
+             --  occurrences with wrong Parent field cannot be mapped to the
+             --  new formals.
+ 
+             if Present (Restored_Nodes_List) then
+                declare
+                   Elmt : Elmt_Id := First_Elmt (Restored_Nodes_List);
+ 
+                begin
+                   while Present (Elmt) loop
+                      Fix_Parents (Node (Elmt));
+                      Next_Elmt (Elmt);
+                   end loop;
+                end;
+             end if;
+          end Restore_Original_Selected_Component;
+ 
+       --  Start of processing for Preanalyze_Condition
+ 
+       begin
+          pragma Assert (Present (Expr));
+          pragma Assert (Inside_Class_Condition_Preanalysis = False);
+ 
+          Push_Scope (Subp);
+          Install_Formals (Subp);
+          Inside_Class_Condition_Preanalysis := True;
+ 
+          Preanalyze_And_Resolve (Expr, Standard_Boolean);
+ 
+          Inside_Class_Condition_Preanalysis := False;
+          Remove_Formals (Subp);
+          Pop_Scope;
+ 
+          --  If this preanalyzed condition has occurrences of dispatching calls
+          --  using the Object.Operation notation, during preanalysis such calls
+          --  are rewritten as dispatching function calls; if at later stages
+          --  this condition is inherited we must have restored the original
+          --  selected-component node to ensure that the preanalysis of the
+          --  inherited condition rewrites these dispatching calls in the
+          --  correct context to avoid reporting spurious errors.
+ 
+          Restore_Original_Selected_Component;
+ 
+          --  Traverse Expr and clear the Controlling_Argument of calls to
+          --  nonabstract functions. Required since the preanalyzed condition
+          --  is not yet installed on its definite context and will be cloned
+          --  and extended in derivations with additional conditions.
+ 
+          Remove_Controlling_Arguments;
+ 
+          --  Clear also attribute Unset_Reference; again because preanalysis
+          --  occurs in a place unrelated to the actual code.
+ 
+          Clear_Unset_References;
+       end Preanalyze_Condition;
+ 
+       ----------------------------------
+       -- Process_Inherited_Conditions --
+       ----------------------------------
+ 
+       procedure Process_Inherited_Conditions (Kind : Condition_Kind) is
+          Tag_Typ : constant Entity_Id       := Find_Dispatching_Type (Spec_Id);
+          Subps   : constant Subprogram_List := Inherited_Subprograms (Spec_Id);
+          Seen    : Subprogram_List (Subps'Range) := (others => Empty);
+ 
+          function Inherit_Condition
+            (Par_Subp : Entity_Id;
+             Subp     : Entity_Id) return Node_Id;
+          --  Inherit the class-wide condition from Par_Subp to Subp and adjust
+          --  all the references to formals in the inherited condition.
+ 
+          procedure Merge_Conditions (From : Node_Id; Into : Node_Id);
+          --  Merge two class-wide preconditions or postconditions (the former
+          --  are merged using "or else", and the latter are merged using "and-
+          --  then"). The changes are accumulated in parameter Into.
+ 
+          function Seen_Subp (Id : Entity_Id) return Boolean;
+          --  Return True if the contract of subprogram Id has been processed
+ 
+          -----------------------
+          -- Inherit_Condition --
+          -----------------------
+ 
+          function Inherit_Condition
+            (Par_Subp : Entity_Id;
+             Subp     : Entity_Id) return Node_Id
+          is
+             function Check_Condition (Expr : Node_Id) return Boolean;
+             --  Used in assertion to check that Expr has no reference to the
+             --  formals of Par_Subp.
+ 
+             ---------------------
+             -- Check_Condition --
+             ---------------------
+ 
+             function Check_Condition (Expr : Node_Id) return Boolean is
+                Par_Formal_Id : Entity_Id;
+ 
+                function Check_Entity (N : Node_Id) return Traverse_Result;
+                --  Check occurrence of Par_Formal_Id
+ 
+                ------------------
+                -- Check_Entity --
+                ------------------
+ 
+                function Check_Entity (N : Node_Id) return Traverse_Result is
+                begin
+                   if Nkind (N) = N_Identifier
+                     and then Present (Entity (N))
+                     and then Entity (N) = Par_Formal_Id
+                   then
+                      return Abandon;
+                   end if;
+ 
+                   return OK;
+                end Check_Entity;
+ 
+                function Check_Expression is new Traverse_Func (Check_Entity);
+ 
+             --  Start of processing for Check_Condition
+ 
+             begin
+                Par_Formal_Id := First_Formal (Par_Subp);
+ 
+                while Present (Par_Formal_Id) loop
+                   if Check_Expression (Expr) = Abandon then
+                      return False;
+                   end if;
+ 
+                   Next_Formal (Par_Formal_Id);
+                end loop;
+ 
+                return True;
+             end Check_Condition;
+ 
+             --  Local variables
+ 
+             Assoc_List     : constant Elist_Id := New_Elmt_List;
+             Par_Formal_Id  : Entity_Id := First_Formal (Par_Subp);
+             Subp_Formal_Id : Entity_Id := First_Formal (Subp);
+             New_Condition  : Node_Id;
+ 
+          begin
+             while Present (Par_Formal_Id) loop
+                Append_Elmt (Par_Formal_Id,  Assoc_List);
+                Append_Elmt (Subp_Formal_Id, Assoc_List);
+ 
+                Next_Formal (Par_Formal_Id);
+                Next_Formal (Subp_Formal_Id);
+             end loop;
+ 
+             --  Check that Parent field of all the nodes have their correct
+             --  decoration; required because otherwise mapped nodes with
+             --  wrong Parent field are left unmodified in the copied tree
+             --  and cause reporting wrong errors at later stages.
+ 
+             pragma Assert
+               (Check_Parents (Class_Condition (Kind, Par_Subp), Assoc_List));
+ 
+             New_Condition :=
+               New_Copy_Tree
+                 (Source => Class_Condition (Kind, Par_Subp),
+                  Map    => Assoc_List);
+ 
+             --  Ensure that the inherited condition has no reference to the
+             --  formals of the parent subprogram.
+ 
+             pragma Assert (Check_Condition (New_Condition));
+ 
+             return New_Condition;
+          end Inherit_Condition;
+ 
+          ----------------------
+          -- Merge_Conditions --
+          ----------------------
+ 
+          procedure Merge_Conditions (From : Node_Id; Into : Node_Id) is
+             function Expression_Arg (Expr : Node_Id) return Node_Id;
+             --  Return the boolean expression argument of a condition while
+             --  updating its parentheses count for the subsequent merge.
+ 
+             --------------------
+             -- Expression_Arg --
+             --------------------
+ 
+             function Expression_Arg (Expr : Node_Id) return Node_Id is
+             begin
+                if Paren_Count (Expr) = 0 then
+                   Set_Paren_Count (Expr, 1);
+                end if;
+ 
+                return Expr;
+             end Expression_Arg;
+ 
+             --  Local variables
+ 
+             From_Expr : constant Node_Id := Expression_Arg (From);
+             Into_Expr : constant Node_Id := Expression_Arg (Into);
+             Loc       : constant Source_Ptr := Sloc (Into);
+ 
+          --  Start of processing for Merge_Conditions
+ 
+          begin
+             case Kind is
+ 
+                --  Merge the two preconditions by "or else"-ing them
+ 
+                when Ignored_Class_Precondition
+                   | Class_Precondition
+                =>
+                   Rewrite (Into_Expr,
+                     Make_Or_Else (Loc,
+                       Right_Opnd => Relocate_Node (Into_Expr),
+                       Left_Opnd  => From_Expr));
+ 
+                --  Merge the two postconditions by "and then"-ing them
+ 
+                when Ignored_Class_Postcondition
+                   | Class_Postcondition
+                =>
+                   Rewrite (Into_Expr,
+                     Make_And_Then (Loc,
+                       Right_Opnd => Relocate_Node (Into_Expr),
+                       Left_Opnd  => From_Expr));
+             end case;
+          end Merge_Conditions;
+ 
+          ---------------
+          -- Seen_Subp --
+          ---------------
+ 
+          function Seen_Subp (Id : Entity_Id) return Boolean is
+          begin
+             for Index in Seen'Range loop
+                if Seen (Index) = Id then
+                   return True;
+                end if;
+             end loop;
+ 
+             return False;
+          end Seen_Subp;
+ 
+          --  Local variables
+ 
+          Class_Cond      : Node_Id;
+          Cond            : Node_Id;
+          Subp_Id         : Entity_Id;
+          Par_Prim        : Entity_Id := Empty;
+          Par_Iface_Prims : Elist_Id  := No_Elist;
+ 
+       --  Start of processing for Process_Inherited_Conditions
+ 
+       begin
+          Class_Cond := Class_Condition (Kind, Spec_Id);
+ 
+          --  Process parent primitives looking for nearest ancestor with
+          --  class-wide conditions.
+ 
+          for Index in Subps'Range loop
+             Subp_Id := Subps (Index);
+ 
+             if No (Par_Prim)
+               and then Is_Ancestor (Find_Dispatching_Type (Subp_Id), Tag_Typ)
+             then
+                if Present (Alias (Subp_Id)) then
+                   Subp_Id := Ultimate_Alias (Subp_Id);
+                end if;
+ 
+                --  Wrappers of class-wide pre/postconditions reference the
+                --  parent primitive that has the inherited contract and help
+                --  us to climb fast.
+ 
+                if Is_Wrapper (Subp_Id)
+                  and then Present (LSP_Subprogram (Subp_Id))
+                then
+                   Subp_Id := LSP_Subprogram (Subp_Id);
+                end if;
+ 
+                if not Seen_Subp (Subp_Id)
+                  and then Present (Class_Condition (Kind, Subp_Id))
+                then
+                   Seen (Index)    := Subp_Id;
+                   Par_Prim        := Subp_Id;
+                   Par_Iface_Prims := Covered_Interface_Primitives (Par_Prim);
+ 
+                   Cond := Inherit_Condition
+                             (Subp     => Spec_Id,
+                              Par_Subp => Subp_Id);
+ 
+                   if Present (Class_Cond) then
+                      Merge_Conditions (Cond, Class_Cond);
+                   else
+                      Class_Cond := Cond;
+                   end if;
+ 
+                   Check_Class_Condition
+                     (Cond            => Class_Cond,
+                      Subp            => Spec_Id,
+                      Par_Subp        => Subp_Id,
+                      Is_Precondition => Kind in Ignored_Class_Precondition
+                                               | Class_Precondition);
+                   Build_Class_Wide_Expression
+                     (Pragma_Or_Expr  => Class_Cond,
+                      Subp            => Spec_Id,
+                      Par_Subp        => Subp_Id,
+                      Adjust_Sloc     => False);
+ 
+                   --  We are done as soon as we process the nearest ancestor
+ 
+                   exit;
+                end if;
+             end if;
+          end loop;
+ 
+          --  Process the contract of interface primitives not covered by
+          --  the nearest ancestor.
+ 
+          for Index in Subps'Range loop
+             Subp_Id := Subps (Index);
+ 
+             if Is_Interface (Find_Dispatching_Type (Subp_Id)) then
+                if Present (Alias (Subp_Id)) then
+                   Subp_Id := Ultimate_Alias (Subp_Id);
+                end if;
+ 
+                if not Seen_Subp (Subp_Id)
+                  and then Present (Class_Condition (Kind, Subp_Id))
+                  and then not Contains (Par_Iface_Prims, Subp_Id)
+                then
+                   Seen (Index) := Subp_Id;
+ 
+                   Cond := Inherit_Condition
+                             (Subp     => Spec_Id,
+                              Par_Subp => Subp_Id);
+ 
+                   Check_Class_Condition
+                     (Cond            => Cond,
+                      Subp            => Spec_Id,
+                      Par_Subp        => Subp_Id,
+                      Is_Precondition => Kind in Ignored_Class_Precondition
+                                               | Class_Precondition);
+                   Build_Class_Wide_Expression
+                     (Pragma_Or_Expr  => Cond,
+                      Subp            => Spec_Id,
+                      Par_Subp        => Subp_Id,
+                      Adjust_Sloc     => False);
+ 
+                   if Present (Class_Cond) then
+                      Merge_Conditions (Cond, Class_Cond);
+                   else
+                      Class_Cond := Cond;
+                   end if;
+                end if;
+             end if;
+          end loop;
+ 
+          Set_Class_Condition (Kind, Spec_Id, Class_Cond);
+       end Process_Inherited_Conditions;
+ 
+       --  Local variables
+ 
+       Cond : Node_Id;
+ 
+    --  Start of processing for Merge_Class_Conditions
+ 
+    begin
+       for Kind in Condition_Kind loop
+          Cond := Class_Condition (Kind, Spec_Id);
+ 
+          --  If this subprogram has class-wide conditions then preanalyze
+          --  them before processing inherited conditions since conditions
+          --  are checked and merged from right to left.
+ 
+          if Present (Cond) then
+             Preanalyze_Condition (Spec_Id, Cond);
+          end if;
+ 
+          Process_Inherited_Conditions (Kind);
+ 
+          --  Preanalyze merged inherited conditions
+ 
+          if Cond /= Class_Condition (Kind, Spec_Id) then
+             Preanalyze_Condition (Spec_Id,
+               Class_Condition (Kind, Spec_Id));
+          end if;
+       end loop;
+    end Merge_Class_Conditions;
+ 
     ----------------------------------------
     -- Save_Global_References_In_Contract --
     ----------------------------------------
*************** package body Contracts is
*** 3624,3633 ****
        ------------------------------------
  
        procedure Save_Global_References_In_List (First_Prag : Node_Id) is
!          Prag : Node_Id;
  
        begin
-          Prag := First_Prag;
           while Present (Prag) loop
              if Is_Generic_Contract_Pragma (Prag) then
                 Save_Global_References (Prag);
--- 4811,4819 ----
        ------------------------------------
  
        procedure Save_Global_References_In_List (First_Prag : Node_Id) is
!          Prag : Node_Id := First_Prag;
  
        begin
           while Present (Prag) loop
              if Is_Generic_Contract_Pragma (Prag) then
                 Save_Global_References (Prag);
*************** package body Contracts is
*** 3664,3667 ****
--- 4850,4878 ----
        Pop_Scope;
     end Save_Global_References_In_Contract;
  
+    -------------------------
+    -- Set_Class_Condition --
+    -------------------------
+ 
+    procedure Set_Class_Condition
+      (Kind : Condition_Kind;
+       Subp : Entity_Id;
+       Cond : Node_Id)
+    is
+    begin
+       case Kind is
+          when Class_Postcondition =>
+             Set_Class_Postconditions (Subp, Cond);
+ 
+          when Class_Precondition =>
+             Set_Class_Preconditions (Subp, Cond);
+ 
+          when Ignored_Class_Postcondition =>
+             Set_Ignored_Class_Postconditions (Subp, Cond);
+ 
+          when Ignored_Class_Precondition =>
+             Set_Ignored_Class_Preconditions (Subp, Cond);
+       end case;
+    end Set_Class_Condition;
+ 
  end Contracts;
diff -Nrcpad gcc-11.3.0/gcc/ada/contracts.ads gcc-12.1.0/gcc/ada/contracts.ads
*** gcc-11.3.0/gcc/ada/contracts.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/contracts.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2015-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2015-2022, 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- --
*************** package Contracts is
*** 216,221 ****
--- 216,246 ----
     --  subprogram declaration template denoted by Templ. The instantiated
     --  pragmas are added to list L.
  
+    procedure Make_Class_Precondition_Subps
+      (Subp_Id         : Entity_Id;
+       Late_Overriding : Boolean := False);
+    --  Build helpers that at run time evaluate statically and dynamically the
+    --  class-wide preconditions of Subp_Id; build also the indirect-call
+    --  wrapper (ICW) required to check class-wide preconditions when the
+    --  subprogram is invoked through an access-to-subprogram, or when it
+    --  overrides an inherited class-wide precondition (see AI12-0195-1).
+    --  Late_Overriding enables special handling required for late-overriding
+    --  subprograms.
+ 
+    procedure Merge_Class_Conditions (Spec_Id : Entity_Id);
+    --  Merge and preanalyze all class-wide conditions of Spec_Id (class-wide
+    --  preconditions merged with operator or-else; class-wide postconditions
+    --  merged with operator and-then). Ignored pre/postconditions are also
+    --  merged since, although they are not required to generate code, their
+    --  preanalysis is required to perform semantic checks. Resulting merged
+    --  expressions are later installed by the expander in helper subprograms
+    --  which are invoked from the caller side; they are also used to build
+    --  the dispatch-table wrapper (DTW), if required.
+ 
+    procedure Process_Class_Conditions_At_Freeze_Point (Typ : Entity_Id);
+    --  Merge, preanalyze, and check class-wide pre/postconditions of Typ
+    --  primitives.
+ 
     procedure Save_Global_References_In_Contract
       (Templ  : Node_Id;
        Gen_Id : Entity_Id);
diff -Nrcpad gcc-11.3.0/gcc/ada/csets.adb gcc-12.1.0/gcc/ada/csets.adb
*** gcc-11.3.0/gcc/ada/csets.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/csets.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Csets is
*** 1091,1128 ****
     begin
        --  Set Fold_Upper table from source code indication
  
!       if Identifier_Character_Set = '1'
!         or else Identifier_Character_Set = 'w'
!       then
!          Fold_Upper := Fold_Latin_1;
  
!       elsif Identifier_Character_Set = '2' then
!          Fold_Upper := Fold_Latin_2;
  
!       elsif Identifier_Character_Set = '3' then
!          Fold_Upper := Fold_Latin_3;
  
!       elsif Identifier_Character_Set = '4' then
!          Fold_Upper := Fold_Latin_4;
  
!       elsif Identifier_Character_Set = '5' then
!          Fold_Upper := Fold_Cyrillic;
  
!       elsif Identifier_Character_Set = 'p' then
!          Fold_Upper := Fold_IBM_PC_437;
  
!       elsif Identifier_Character_Set = '8' then
!          Fold_Upper := Fold_IBM_PC_850;
  
!       elsif Identifier_Character_Set = '9' then
!          Fold_Upper := Fold_Latin_9;
  
!       elsif Identifier_Character_Set = 'f' then
!          Fold_Upper := Fold_Full_Upper_Half;
  
!       else -- Identifier_Character_Set = 'n'
!          Fold_Upper := Fold_No_Upper_Half;
!       end if;
  
        --  Use Fold_Upper table to compute Fold_Lower table
  
--- 1091,1130 ----
     begin
        --  Set Fold_Upper table from source code indication
  
!       case Identifier_Character_Set is
!          when '1' | 'w' =>
!             Fold_Upper := Fold_Latin_1;
  
!          when '2' =>
!             Fold_Upper := Fold_Latin_2;
  
!          when '3' =>
!             Fold_Upper := Fold_Latin_3;
  
!          when '4' =>
!             Fold_Upper := Fold_Latin_4;
  
!          when '5' =>
!             Fold_Upper := Fold_Cyrillic;
  
!          when '9' =>
!             Fold_Upper := Fold_Latin_9;
  
!          when 'p' =>
!             Fold_Upper := Fold_IBM_PC_437;
  
!          when '8' =>
!             Fold_Upper := Fold_IBM_PC_850;
  
!          when 'f' =>
!             Fold_Upper := Fold_Full_Upper_Half;
  
!          when 'n' =>
!             Fold_Upper := Fold_No_Upper_Half;
! 
!          when others =>
!             raise Program_Error;
!       end case;
  
        --  Use Fold_Upper table to compute Fold_Lower table
  
diff -Nrcpad gcc-11.3.0/gcc/ada/csets.ads gcc-12.1.0/gcc/ada/csets.ads
*** gcc-11.3.0/gcc/ada/csets.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/csets.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/csinfo.adb gcc-12.1.0/gcc/ada/csinfo.adb
*** gcc-11.3.0/gcc/ada/csinfo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/csinfo.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,639 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                          GNAT SYSTEM UTILITIES                           --
- --                                                                          --
- --                               C S I N F O                                --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
- -- http://www.gnu.org/licenses for a complete copy of the license.          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Check consistency of sinfo.ads and sinfo.adb. Checks that field name usage
- --  is consistent and that assertion cross-reference lists are correct, as well
- --  as making sure that all the comments on field name usage are consistent.
- 
- --  Note that this is used both as a standalone program, and as a procedure
- --  called by XSinfo. This raises an unhandled exception if it finds any
- --  errors; we don't attempt any sophisticated error recovery.
- 
- with Ada.Strings.Unbounded;         use Ada.Strings.Unbounded;
- with Ada.Strings.Unbounded.Text_IO; use Ada.Strings.Unbounded.Text_IO;
- with Ada.Strings.Maps;              use Ada.Strings.Maps;
- with Ada.Strings.Maps.Constants;    use Ada.Strings.Maps.Constants;
- with Ada.Text_IO;                   use Ada.Text_IO;
- 
- with GNAT.Spitbol;                  use GNAT.Spitbol;
- with GNAT.Spitbol.Patterns;         use GNAT.Spitbol.Patterns;
- with GNAT.Spitbol.Table_Boolean;
- with GNAT.Spitbol.Table_VString;
- 
- procedure CSinfo is
- 
-    package TB renames GNAT.Spitbol.Table_Boolean;
-    package TV renames GNAT.Spitbol.Table_VString;
-    use TB, TV;
- 
-    Infil  : File_Type;
-    Lineno : Natural := 0;
- 
-    Err : exception;
-    --  Raised on fatal error
- 
-    Done : exception;
-    --  Raised after error is found to terminate run
- 
-    WSP : constant Pattern := Span (' ' & ASCII.HT);
- 
-    Fields   : TV.Table (300);
-    Fields1  : TV.Table (300);
-    Refs     : TV.Table (300);
-    Refscopy : TV.Table (300);
-    Special  : TB.Table (50);
-    Inlines  : TV.Table (100);
- 
-    --  The following define the standard fields used for binary operator,
-    --  unary operator, and other expression nodes. Numbers in the range 1-5
-    --  refer to the Fieldn fields. Letters D-R refer to flags:
- 
-    --      D = Flag4
-    --      E = Flag5
-    --      F = Flag6
-    --      G = Flag7
-    --      H = Flag8
-    --      I = Flag9
-    --      J = Flag10
-    --      K = Flag11
-    --      L = Flag12
-    --      M = Flag13
-    --      N = Flag14
-    --      O = Flag15
-    --      P = Flag16
-    --      Q = Flag17
-    --      R = Flag18
- 
-    Flags : TV.Table (20);
-    --  Maps flag numbers to letters
- 
-    N_Fields : constant Pattern := BreakX ("J");
-    E_Fields : constant Pattern := BreakX ("5EFGHIJOP");
-    U_Fields : constant Pattern := BreakX ("1345EFGHIJKOPQ");
-    B_Fields : constant Pattern := BreakX ("12345EFGHIJKOPQ");
- 
-    Line : VString;
-    Bad  : Boolean;
- 
-    Field       : constant VString := Nul;
-    Fields_Used : VString := Nul;
-    Name        : constant VString := Nul;
-    Next        : constant VString := Nul;
-    Node        : VString := Nul;
-    Ref         : VString := Nul;
-    Synonym     : constant VString := Nul;
-    Nxtref      : constant VString := Nul;
- 
-    Which_Field : aliased VString := Nul;
- 
-    Node_Search : constant Pattern := WSP & "--  N_" & Rest * Node;
-    Break_Punc  : constant Pattern := Break (" .,");
-    Plus_Binary : constant Pattern := WSP
-                                      & "--  plus fields for binary operator";
-    Plus_Unary  : constant Pattern := WSP
-                                      & "--  plus fields for unary operator";
-    Plus_Expr   : constant Pattern := WSP
-                                      & "--  plus fields for expression";
-    Break_Syn   : constant Pattern := WSP &  "--  "
-                                      & Break (' ') * Synonym
-                                      & " (" & Break (')') * Field;
-    Break_Field : constant Pattern := BreakX ('-') * Field;
-    Get_Field   : constant Pattern := BreakX (Decimal_Digit_Set)
-                                      & Span (Decimal_Digit_Set) * Which_Field;
-    Break_WFld  : constant Pattern := Break (Which_Field'Access);
-    Get_Funcsyn : constant Pattern := WSP & "function " & Rest * Synonym;
-    Extr_Field  : constant Pattern := BreakX ('-') & "-- " & Rest * Field;
-    Get_Procsyn : constant Pattern := WSP & "procedure Set_" & Rest * Synonym;
-    Get_Inline  : constant Pattern := WSP & "pragma Inline ("
-                                      & Break (')') * Name;
-    Set_Name    : constant Pattern := "Set_" & Rest * Name;
-    Func_Rest   : constant Pattern := "   function " & Rest * Synonym;
-    Get_Nxtref  : constant Pattern := Break (',') * Nxtref & ',';
-    Test_Syn    : constant Pattern := Break ('=') & "= N_"
-                                      & (Break (" ,)") or Rest) * Next;
-    Chop_Comma  : constant Pattern := BreakX (',') * Next;
-    Return_Fld  : constant Pattern := WSP & "return " & Break (' ') * Field;
-    Set_Syn     : constant Pattern := "   procedure Set_" & Rest * Synonym;
-    Set_Fld     : constant Pattern := WSP & "Set_" & Break (' ') * Field
-                                      & " (N, Val)";
-    Break_With  : constant Pattern := Break ('_') ** Field & "_With_Parent";
- 
-    type VStringA is array (Natural range <>) of VString;
- 
-    procedure Next_Line;
-    --  Read next line trimmed from Infil into Line and bump Lineno
- 
-    procedure Sort (A : in out VStringA);
-    --  Sort a (small) array of VString's
- 
-    procedure Next_Line is
-    begin
-       Line := Get_Line (Infil);
-       Trim (Line);
-       Lineno := Lineno + 1;
-    end Next_Line;
- 
-    procedure Sort (A : in out VStringA) is
-       Temp : VString;
-    begin
-       <<Sort>>
-          for J in 1 .. A'Length - 1 loop
-             if A (J) > A (J + 1) then
-                Temp := A (J);
-                A (J) := A (J + 1);
-                A (J + 1) := Temp;
-                goto Sort;
-             end if;
-          end loop;
-    end Sort;
- 
- --  Start of processing for CSinfo
- 
- begin
-    Anchored_Mode := True;
-    New_Line;
-    Open (Infil, In_File, "sinfo.ads");
-    Put_Line ("Check for field name consistency");
- 
-    --  Setup table for mapping flag numbers to letters
- 
-    Set (Flags, "4",  V ("D"));
-    Set (Flags, "5",  V ("E"));
-    Set (Flags, "6",  V ("F"));
-    Set (Flags, "7",  V ("G"));
-    Set (Flags, "8",  V ("H"));
-    Set (Flags, "9",  V ("I"));
-    Set (Flags, "10", V ("J"));
-    Set (Flags, "11", V ("K"));
-    Set (Flags, "12", V ("L"));
-    Set (Flags, "13", V ("M"));
-    Set (Flags, "14", V ("N"));
-    Set (Flags, "15", V ("O"));
-    Set (Flags, "16", V ("P"));
-    Set (Flags, "17", V ("Q"));
-    Set (Flags, "18", V ("R"));
- 
-    --  Special fields table. The following names are not recorded or checked
-    --  by Csinfo, since they are specially handled. This means that any field
-    --  definition or subprogram with a matching name is ignored.
- 
-    Set (Special, "Analyzed",                         True);
-    Set (Special, "Assignment_OK",                    True);
-    Set (Special, "Associated_Node",                  True);
-    Set (Special, "Cannot_Be_Constant",               True);
-    Set (Special, "Chars",                            True);
-    Set (Special, "Comes_From_Source",                True);
-    Set (Special, "Do_Overflow_Check",                True);
-    Set (Special, "Do_Range_Check",                   True);
-    Set (Special, "Entity",                           True);
-    Set (Special, "Entity_Or_Associated_Node",        True);
-    Set (Special, "Error_Posted",                     True);
-    Set (Special, "Etype",                            True);
-    Set (Special, "Evaluate_Once",                    True);
-    Set (Special, "First_Itype",                      True);
-    Set (Special, "Has_Aspect_Specifications",        True);
-    Set (Special, "Has_Dynamic_Itype",                True);
-    Set (Special, "Has_Dynamic_Length_Check",         True);
-    Set (Special, "Has_Private_View",                 True);
-    Set (Special, "Is_Controlling_Actual",            True);
-    Set (Special, "Is_Overloaded",                    True);
-    Set (Special, "Is_Static_Expression",             True);
-    Set (Special, "Left_Opnd",                        True);
-    Set (Special, "Must_Not_Freeze",                  True);
-    Set (Special, "Nkind_In",                         True);
-    Set (Special, "Parens",                           True);
-    Set (Special, "Pragma_Name",                      True);
-    Set (Special, "Raises_Constraint_Error",          True);
-    Set (Special, "Right_Opnd",                       True);
- 
-    --  Loop to acquire information from node definitions in sinfo.ads,
-    --  checking for consistency in Op/Flag assignments to each synonym
- 
-    loop
-       Bad := False;
-       Next_Line;
-       exit when Match (Line, "   -- Node Access Functions");
- 
-       if Match (Line, Node_Search)
-         and then not Match (Node, Break_Punc)
-       then
-          Fields_Used := Nul;
- 
-       elsif Node = "" then
-          null;
- 
-       elsif Line = "" then
-          Node := Nul;
- 
-       elsif Match (Line, Plus_Binary) then
-          Bad := Match (Fields_Used, B_Fields);
- 
-       elsif Match (Line, Plus_Unary) then
-          Bad := Match (Fields_Used, U_Fields);
- 
-       elsif Match (Line, Plus_Expr) then
-          Bad := Match (Fields_Used, E_Fields);
- 
-       elsif not Match (Line, Break_Syn) then
-          null;
- 
-       elsif Match (Synonym, "plus") then
-          null;
- 
-       else
-          Match (Field, Break_Field);
- 
-          if not Present (Special, Synonym) then
-             if Present (Fields, Synonym) then
-                if Field /= Get (Fields, Synonym) then
-                   Put_Line
-                     ("Inconsistent field reference at line" &
-                      Lineno'Img & " for " & Synonym);
-                   raise Done;
-                end if;
- 
-             else
-                Set (Fields, Synonym, Field);
-             end if;
- 
-             Set (Refs, Synonym, Node & ',' & Get (Refs, Synonym));
-             Match (Field, Get_Field);
- 
-             if Match (Field, "Flag") then
-                Which_Field := Get (Flags, Which_Field);
-             end if;
- 
-             if Match (Fields_Used, Break_WFld) then
-                Put_Line
-                  ("Overlapping field at line " & Lineno'Img &
-                   " for " & Synonym);
-                raise Done;
-             end if;
- 
-             Append (Fields_Used, Which_Field);
-             Bad := Bad or Match (Fields_Used, N_Fields);
-          end if;
-       end if;
- 
-       if Bad then
-          Put_Line ("fields conflict with standard fields for node " & Node);
-          raise Done;
-       end if;
-    end loop;
- 
-    Put_Line ("     OK");
-    New_Line;
-    Put_Line ("Check for function consistency");
- 
-    --  Loop through field function definitions to make sure they are OK
- 
-    Fields1 := Fields;
-    loop
-       Next_Line;
-       exit when Match (Line, "   -- Node Update");
- 
-       if Match (Line, Get_Funcsyn)
-         and then not Present (Special, Synonym)
-       then
-          if not Present (Fields1, Synonym) then
-             Put_Line
-               ("function on line " &  Lineno &
-                " is for unused synonym");
-             raise Done;
-          end if;
- 
-          Next_Line;
- 
-          if not Match (Line, Extr_Field) then
-             raise Err;
-          end if;
- 
-          if Field /= Get (Fields1, Synonym) then
-             Put_Line ("Wrong field in function " & Synonym);
-             raise Done;
- 
-          else
-             Delete (Fields1, Synonym);
-          end if;
-       end if;
-    end loop;
- 
-    Put_Line ("     OK");
-    New_Line;
-    Put_Line ("Check for missing functions");
- 
-    declare
-       List : constant TV.Table_Array := Convert_To_Array (Fields1);
- 
-    begin
-       if List'Length > 0 then
-          Put_Line ("No function for field synonym " & List (1).Name);
-          raise Done;
-       end if;
-    end;
- 
-    --  Check field set procedures
- 
-    Put_Line ("     OK");
-    New_Line;
-    Put_Line ("Check for set procedure consistency");
- 
-    Fields1 := Fields;
-    loop
-       Next_Line;
-       exit when Match (Line, "   -- Inline Pragmas");
-       exit when Match (Line, "   -- Iterator Procedures");
- 
-       if Match (Line, Get_Procsyn)
-         and then not Present (Special, Synonym)
-       then
-          if not Present (Fields1, Synonym) then
-             Put_Line
-               ("procedure on line " & Lineno & " is for unused synonym");
-             raise Done;
-          end if;
- 
-          Next_Line;
- 
-          if not Match (Line, Extr_Field) then
-             raise Err;
-          end if;
- 
-          if Field /= Get (Fields1, Synonym) then
-             Put_Line ("Wrong field in procedure Set_" & Synonym);
-             raise Done;
- 
-          else
-             Delete (Fields1, Synonym);
-          end if;
-       end if;
-    end loop;
- 
-    Put_Line ("     OK");
-    New_Line;
-    Put_Line ("Check for missing set procedures");
- 
-    declare
-       List : constant TV.Table_Array := Convert_To_Array (Fields1);
- 
-    begin
-       if List'Length > 0 then
-          Put_Line ("No procedure for field synonym Set_" & List (1).Name);
-          raise Done;
-       end if;
-    end;
- 
-    Put_Line ("     OK");
-    New_Line;
-    Put_Line ("Check pragma Inlines are all for existing subprograms");
- 
-    Clear (Fields1);
-    while not End_Of_File (Infil) loop
-       Next_Line;
- 
-       if Match (Line, Get_Inline)
-         and then not Present (Special, Name)
-       then
-          exit when Match (Name, Set_Name);
- 
-          if not Present (Fields, Name) then
-             Put_Line
-               ("Pragma Inline on line " & Lineno &
-                " does not correspond to synonym");
-             raise Done;
- 
-          else
-             Set (Inlines, Name, Get (Inlines, Name) & 'r');
-          end if;
-       end if;
-    end loop;
- 
-    Put_Line ("     OK");
-    New_Line;
-    Put_Line ("Check no pragma Inlines were omitted");
- 
-    declare
-       List : constant TV.Table_Array := Convert_To_Array (Fields);
-       Nxt  : VString := Nul;
- 
-    begin
-       for M in List'Range loop
-          Nxt := List (M).Name;
- 
-          if Get (Inlines, Nxt) /= "r" then
-             Put_Line ("Incorrect pragma Inlines for " & Nxt);
-             raise Done;
-          end if;
-       end loop;
-    end;
- 
-    Put_Line ("     OK");
-    New_Line;
-    Clear (Inlines);
- 
-    Close (Infil);
-    Open (Infil, In_File, "sinfo.adb");
-    Lineno := 0;
-    Put_Line ("Check references in functions in body");
- 
-    Refscopy := Refs;
-    loop
-       Next_Line;
-       exit when Match (Line, "   -- Field Access Functions --");
-    end loop;
- 
-    loop
-       Next_Line;
-       exit when Match (Line, "   -- Field Set Procedures --");
- 
-       if Match (Line, Func_Rest)
-         and then not Present (Special, Synonym)
-       then
-          Ref := Get (Refs, Synonym);
-          Delete (Refs, Synonym);
- 
-          if Ref = "" then
-             Put_Line
-               ("Function on line " & Lineno & " is for unknown synonym");
-             raise Err;
-          end if;
- 
-          --  Alpha sort of references for this entry
- 
-          declare
-             Refa   : VStringA (1 .. 100);
-             N      : Natural := 0;
- 
-          begin
-             loop
-                exit when not Match (Ref, Get_Nxtref, Nul);
-                N := N + 1;
-                Refa (N) := Nxtref;
-             end loop;
- 
-             Sort (Refa (1 .. N));
-             Next_Line;
-             Next_Line;
-             Next_Line;
- 
-             --  Checking references for one entry
- 
-             for M in 1 .. N loop
-                Next_Line;
- 
-                if not Match (Line, Test_Syn) then
-                   Put_Line ("Expecting N_" & Refa (M) & " at line " & Lineno);
-                   raise Done;
-                end if;
- 
-                Match (Next, Chop_Comma);
- 
-                if Next /= Refa (M) then
-                   Put_Line ("Expecting N_" & Refa (M) & " at line " & Lineno);
-                   raise Done;
-                end if;
-             end loop;
- 
-             Next_Line;
-             Match (Line, Return_Fld);
- 
-             if Field /= Get (Fields, Synonym) then
-                Put_Line
-                 ("Wrong field for function " & Synonym & " at line " &
-                  Lineno & " should be " & Get (Fields, Synonym));
-                raise Done;
-             end if;
-          end;
-       end if;
-    end loop;
- 
-    Put_Line ("     OK");
-    New_Line;
-    Put_Line ("Check for missing functions in body");
- 
-    declare
-       List : constant TV.Table_Array := Convert_To_Array (Refs);
- 
-    begin
-       if List'Length /= 0 then
-          Put_Line ("Missing function " & List (1).Name & " in body");
-          raise Done;
-       end if;
-    end;
- 
-    Put_Line ("     OK");
-    New_Line;
-    Put_Line ("Check Set procedures in body");
-    Refs := Refscopy;
- 
-    loop
-       Next_Line;
-       exit when Match (Line, "end");
-       exit when Match (Line, "   -- Iterator Procedures");
- 
-       if Match (Line, Set_Syn)
-         and then not Present (Special, Synonym)
-       then
-          Ref := Get (Refs, Synonym);
-          Delete (Refs, Synonym);
- 
-          if Ref = "" then
-             Put_Line
-               ("Function on line " & Lineno & " is for unknown synonym");
-             raise Err;
-          end if;
- 
-          --  Alpha sort of references for this entry
- 
-          declare
-             Refa   : VStringA (1 .. 100);
-             N      : Natural;
- 
-          begin
-             N := 0;
- 
-             loop
-                exit when not Match (Ref, Get_Nxtref, Nul);
-                N := N + 1;
-                Refa (N) := Nxtref;
-             end loop;
- 
-             Sort (Refa (1 .. N));
- 
-             Next_Line;
-             Next_Line;
-             Next_Line;
- 
-             --  Checking references for one entry
- 
-             for M in 1 .. N loop
-                Next_Line;
- 
-                if not Match (Line, Test_Syn)
-                  or else Next /= Refa (M)
-                then
-                   Put_Line ("Expecting N_" & Refa (M) & " at line " & Lineno);
-                   raise Err;
-                end if;
-             end loop;
- 
-             loop
-                Next_Line;
-                exit when Match (Line, Set_Fld);
-             end loop;
- 
-             Match (Field, Break_With);
- 
-             if Field /= Get (Fields, Synonym) then
-                Put_Line
-                  ("Wrong field for procedure Set_" & Synonym &
-                   " at line " & Lineno & " should be " &
-                   Get (Fields, Synonym));
-                raise Done;
-             end if;
- 
-             Delete (Fields1, Synonym);
-          end;
-       end if;
-    end loop;
- 
-    Put_Line ("     OK");
-    New_Line;
-    Put_Line ("Check for missing set procedures in body");
- 
-    declare
-       List : constant TV.Table_Array := Convert_To_Array (Fields1);
-    begin
-       if List'Length /= 0 then
-          Put_Line ("Missing procedure Set_" & List (1).Name & " in body");
-          raise Done;
-       end if;
-    end;
- 
-    Put_Line ("     OK");
-    New_Line;
-    Put_Line ("All tests completed successfully, no errors detected");
- 
- end CSinfo;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/cstand.adb gcc-12.1.0/gcc/ada/cstand.adb
*** gcc-11.3.0/gcc/ada/cstand.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/cstand.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,50 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Csets;    use Csets;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Layout;   use Layout;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Output;   use Output;
! with Set_Targ; use Set_Targ;
! with Targparm; use Targparm;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Sem_Mech; use Sem_Mech;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Uintp;    use Uintp;
! with Urealp;   use Urealp;
  
  package body CStand is
  
--- 23,54 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Csets;          use Csets;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Layout;         use Layout;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Output;         use Output;
! with Set_Targ;       use Set_Targ;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Sem_Mech;       use Sem_Mech;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Uintp;          use Uintp;
! with Urealp;         use Urealp;
  
  package body CStand is
  
*************** package body CStand is
*** 129,140 ****
     --  Returns an identifier node with the same name as the defining identifier
     --  corresponding to the given Standard_Entity_Type value.
  
!    procedure Make_Component
       (Rec : Entity_Id;
        Typ : Entity_Id;
        Nam : String);
!    --  Build a record component with the given type and name, and append to
!    --  the list of components of Rec.
  
     function Make_Formal (Typ : Entity_Id; Nam : String) return Entity_Id;
     --  Construct entity for subprogram formal with given name and type
--- 133,144 ----
     --  Returns an identifier node with the same name as the defining identifier
     --  corresponding to the given Standard_Entity_Type value.
  
!    procedure Make_Aliased_Component
       (Rec : Entity_Id;
        Typ : Entity_Id;
        Nam : String);
!    --  Build an aliased record component with the given type and name,
!    --  and append to the list of components of Rec.
  
     function Make_Formal (Typ : Entity_Id; Nam : String) return Entity_Id;
     --  Construct entity for subprogram formal with given name and type
*************** package body CStand is
*** 145,152 ****
     function New_Operator (Op : Name_Id; Typ : Entity_Id) return Entity_Id;
     --  Build entity for standard operator with given name and type
  
!    function New_Standard_Entity
!      (New_Node_Kind : Node_Kind := N_Defining_Identifier) return Entity_Id;
     --  Builds a new entity for Standard
  
     function New_Standard_Entity (Nam : String) return Entity_Id;
--- 149,155 ----
     function New_Operator (Op : Name_Id; Typ : Entity_Id) return Entity_Id;
     --  Build entity for standard operator with given name and type
  
!    function New_Standard_Entity return Entity_Id;
     --  Builds a new entity for Standard
  
     function New_Standard_Entity (Nam : String) return Entity_Id;
*************** package body CStand is
*** 199,207 ****
          Make_Floating_Point_Definition (Stloc,
            Digits_Expression => Make_Integer (UI_From_Int (Digs))));
  
!       Set_Ekind                      (E, E_Floating_Point_Type);
        Set_Etype                      (E, E);
!       Init_Digits_Value              (E, Digs);
        Set_Float_Rep                  (E, Rep);
        Init_Size                      (E, Siz);
        Set_Elem_Alignment             (E, Align);
--- 202,210 ----
          Make_Floating_Point_Definition (Stloc,
            Digits_Expression => Make_Integer (UI_From_Int (Digs))));
  
!       Mutate_Ekind                   (E, E_Floating_Point_Type);
        Set_Etype                      (E, E);
!       Set_Digits_Value               (E, UI_From_Int (Digs));
        Set_Float_Rep                  (E, Rep);
        Init_Size                      (E, Siz);
        Set_Elem_Alignment             (E, Align);
*************** package body CStand is
*** 243,249 ****
            Low_Bound  => Make_Integer (Lbound),
            High_Bound => Make_Integer (Ubound)));
  
!       Set_Ekind                      (E, E_Signed_Integer_Type);
        Set_Etype                      (E, E);
        Init_Size                      (E, Siz);
        Set_Elem_Alignment             (E);
--- 246,252 ----
            Low_Bound  => Make_Integer (Lbound),
            High_Bound => Make_Integer (Ubound)));
  
!       Mutate_Ekind                   (E, E_Signed_Integer_Type);
        Set_Etype                      (E, E);
        Init_Size                      (E, Siz);
        Set_Elem_Alignment             (E);
*************** package body CStand is
*** 268,274 ****
     begin
        Set_Defining_Identifier (Decl, Uns);
  
!       Set_Ekind                      (Uns, E_Modular_Integer_Type);
        Set_Scope                      (Uns, Standard_Standard);
        Set_Etype                      (Uns, Uns);
        Init_Size                      (Uns, Siz);
--- 271,277 ----
     begin
        Set_Defining_Identifier (Decl, Uns);
  
!       Mutate_Ekind                   (Uns, E_Modular_Integer_Type);
        Set_Scope                      (Uns, Standard_Standard);
        Set_Etype                      (Uns, Uns);
        Init_Size                      (Uns, Siz);
*************** package body CStand is
*** 463,469 ****
  
        procedure Build_Exception (S : Standard_Entity_Type) is
        begin
!          Set_Ekind     (Standard_Entity (S), E_Exception);
           Set_Etype     (Standard_Entity (S), Standard_Exception_Type);
           Set_Is_Public (Standard_Entity (S), True);
  
--- 466,472 ----
  
        procedure Build_Exception (S : Standard_Entity_Type) is
        begin
!          Mutate_Ekind  (Standard_Entity (S), E_Exception);
           Set_Etype     (Standard_Entity (S), Standard_Exception_Type);
           Set_Is_Public (Standard_Entity (S), True);
  
*************** package body CStand is
*** 574,579 ****
--- 577,584 ----
           Set_Has_Pragma_Pack (String_Type, True);
        end Pack_String_Type;
  
+       Char_Size : constant Unat := UI_From_Int (Standard_Character_Size);
+ 
     --  Start of processing for Create_Standard
  
     begin
*************** package body CStand is
*** 603,609 ****
        Set_Defining_Unit_Name (Pspec, Standard_Standard);
        Set_Visible_Declarations (Pspec, Decl_S);
  
!       Set_Ekind (Standard_Standard, E_Package);
        Set_Is_Pure (Standard_Standard);
        Set_Is_Compilation_Unit (Standard_Standard);
  
--- 608,614 ----
        Set_Defining_Unit_Name (Pspec, Standard_Standard);
        Set_Visible_Declarations (Pspec, Decl_S);
  
!       Mutate_Ekind (Standard_Standard, E_Package);
        Set_Is_Pure (Standard_Standard);
        Set_Is_Compilation_Unit (Standard_Standard);
  
*************** package body CStand is
*** 645,668 ****
        Append (Standard_True, Literals (Tdef_Node));
        Set_Type_Definition (Parent (Standard_Boolean), Tdef_Node);
  
!       Set_Ekind          (Standard_Boolean, E_Enumeration_Type);
        Set_First_Literal  (Standard_Boolean, Standard_False);
        Set_Etype          (Standard_Boolean, Standard_Boolean);
!       Init_Esize         (Standard_Boolean, Standard_Character_Size);
!       Init_RM_Size       (Standard_Boolean, 1);
        Set_Elem_Alignment (Standard_Boolean);
  
        Set_Is_Unsigned_Type           (Standard_Boolean);
        Set_Size_Known_At_Compile_Time (Standard_Boolean);
        Set_Has_Pragma_Ordered         (Standard_Boolean);
  
!       Set_Ekind           (Standard_True, E_Enumeration_Literal);
        Set_Etype           (Standard_True, Standard_Boolean);
        Set_Enumeration_Pos (Standard_True, Uint_1);
        Set_Enumeration_Rep (Standard_True, Uint_1);
        Set_Is_Known_Valid  (Standard_True, True);
  
!       Set_Ekind           (Standard_False, E_Enumeration_Literal);
        Set_Etype           (Standard_False, Standard_Boolean);
        Set_Enumeration_Pos (Standard_False, Uint_0);
        Set_Enumeration_Rep (Standard_False, Uint_0);
--- 650,673 ----
        Append (Standard_True, Literals (Tdef_Node));
        Set_Type_Definition (Parent (Standard_Boolean), Tdef_Node);
  
!       Mutate_Ekind       (Standard_Boolean, E_Enumeration_Type);
        Set_First_Literal  (Standard_Boolean, Standard_False);
        Set_Etype          (Standard_Boolean, Standard_Boolean);
!       Set_Esize          (Standard_Boolean, Char_Size);
!       Set_RM_Size        (Standard_Boolean, Uint_1);
        Set_Elem_Alignment (Standard_Boolean);
  
        Set_Is_Unsigned_Type           (Standard_Boolean);
        Set_Size_Known_At_Compile_Time (Standard_Boolean);
        Set_Has_Pragma_Ordered         (Standard_Boolean);
  
!       Mutate_Ekind        (Standard_True, E_Enumeration_Literal);
        Set_Etype           (Standard_True, Standard_Boolean);
        Set_Enumeration_Pos (Standard_True, Uint_1);
        Set_Enumeration_Rep (Standard_True, Uint_1);
        Set_Is_Known_Valid  (Standard_True, True);
  
!       Mutate_Ekind        (Standard_False, E_Enumeration_Literal);
        Set_Etype           (Standard_False, Standard_Boolean);
        Set_Enumeration_Pos (Standard_False, Uint_0);
        Set_Enumeration_Rep (Standard_False, Uint_0);
*************** package body CStand is
*** 751,760 ****
        Tdef_Node := New_Node (N_Enumeration_Type_Definition, Stloc);
        Set_Type_Definition (Parent (Standard_Character), Tdef_Node);
  
!       Set_Ekind          (Standard_Character, E_Enumeration_Type);
        Set_Etype          (Standard_Character, Standard_Character);
!       Init_Esize         (Standard_Character, Standard_Character_Size);
!       Init_RM_Size       (Standard_Character, 8);
        Set_Elem_Alignment (Standard_Character);
  
        Set_Has_Pragma_Ordered         (Standard_Character);
--- 756,765 ----
        Tdef_Node := New_Node (N_Enumeration_Type_Definition, Stloc);
        Set_Type_Definition (Parent (Standard_Character), Tdef_Node);
  
!       Mutate_Ekind       (Standard_Character, E_Enumeration_Type);
        Set_Etype          (Standard_Character, Standard_Character);
!       Set_Esize          (Standard_Character, Char_Size);
!       Set_RM_Size        (Standard_Character, Uint_8);
        Set_Elem_Alignment (Standard_Character);
  
        Set_Has_Pragma_Ordered         (Standard_Character);
*************** package body CStand is
*** 798,804 ****
        Tdef_Node := New_Node (N_Enumeration_Type_Definition, Stloc);
        Set_Type_Definition (Parent (Standard_Wide_Character), Tdef_Node);
  
!       Set_Ekind      (Standard_Wide_Character, E_Enumeration_Type);
        Set_Etype      (Standard_Wide_Character, Standard_Wide_Character);
        Init_Size      (Standard_Wide_Character, Standard_Wide_Character_Size);
  
--- 803,809 ----
        Tdef_Node := New_Node (N_Enumeration_Type_Definition, Stloc);
        Set_Type_Definition (Parent (Standard_Wide_Character), Tdef_Node);
  
!       Mutate_Ekind   (Standard_Wide_Character, E_Enumeration_Type);
        Set_Etype      (Standard_Wide_Character, Standard_Wide_Character);
        Init_Size      (Standard_Wide_Character, Standard_Wide_Character_Size);
  
*************** package body CStand is
*** 817,823 ****
  
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
!       Set_Chars                (B_Node, No_Name);    --  ???
        Set_Char_Literal_Value   (B_Node, Uint_0);
        Set_Entity               (B_Node, Empty);
        Set_Etype                (B_Node, Standard_Wide_Character);
--- 822,828 ----
  
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
!       Set_Chars                (B_Node, No_Name);
        Set_Char_Literal_Value   (B_Node, Uint_0);
        Set_Entity               (B_Node, Empty);
        Set_Etype                (B_Node, Standard_Wide_Character);
*************** package body CStand is
*** 827,833 ****
  
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
!       Set_Chars                (B_Node, No_Name);    --  ???
        Set_Char_Literal_Value   (B_Node, UI_From_Int (16#FFFF#));
        Set_Entity               (B_Node, Empty);
        Set_Etype                (B_Node, Standard_Wide_Character);
--- 832,838 ----
  
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
!       Set_Chars                (B_Node, No_Name);
        Set_Char_Literal_Value   (B_Node, UI_From_Int (16#FFFF#));
        Set_Entity               (B_Node, Empty);
        Set_Etype                (B_Node, Standard_Wide_Character);
*************** package body CStand is
*** 844,850 ****
        Tdef_Node := New_Node (N_Enumeration_Type_Definition, Stloc);
        Set_Type_Definition (Parent (Standard_Wide_Wide_Character), Tdef_Node);
  
!       Set_Ekind (Standard_Wide_Wide_Character, E_Enumeration_Type);
        Set_Etype (Standard_Wide_Wide_Character,
                   Standard_Wide_Wide_Character);
        Init_Size (Standard_Wide_Wide_Character,
--- 849,855 ----
        Tdef_Node := New_Node (N_Enumeration_Type_Definition, Stloc);
        Set_Type_Definition (Parent (Standard_Wide_Wide_Character), Tdef_Node);
  
!       Mutate_Ekind (Standard_Wide_Wide_Character, E_Enumeration_Type);
        Set_Etype (Standard_Wide_Wide_Character,
                   Standard_Wide_Wide_Character);
        Init_Size (Standard_Wide_Wide_Character,
*************** package body CStand is
*** 866,872 ****
  
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
!       Set_Chars                (B_Node, No_Name);    --  ???
        Set_Char_Literal_Value   (B_Node, Uint_0);
        Set_Entity               (B_Node, Empty);
        Set_Etype                (B_Node, Standard_Wide_Wide_Character);
--- 871,877 ----
  
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
!       Set_Chars                (B_Node, No_Name);
        Set_Char_Literal_Value   (B_Node, Uint_0);
        Set_Entity               (B_Node, Empty);
        Set_Etype                (B_Node, Standard_Wide_Wide_Character);
*************** package body CStand is
*** 876,882 ****
  
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
!       Set_Chars                (B_Node, No_Name);    --  ???
        Set_Char_Literal_Value   (B_Node, UI_From_Int (16#7FFF_FFFF#));
        Set_Entity               (B_Node, Empty);
        Set_Etype                (B_Node, Standard_Wide_Wide_Character);
--- 881,887 ----
  
        B_Node := New_Node (N_Character_Literal, Stloc);
        Set_Is_Static_Expression (B_Node);
!       Set_Chars                (B_Node, No_Name);
        Set_Char_Literal_Value   (B_Node, UI_From_Int (16#7FFF_FFFF#));
        Set_Entity               (B_Node, Empty);
        Set_Etype                (B_Node, Standard_Wide_Wide_Character);
*************** package body CStand is
*** 904,920 ****
        Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
        Set_Type_Definition (Parent (Standard_String), Tdef_Node);
  
!       Set_Ekind           (Standard_String, E_Array_Type);
        Set_Etype           (Standard_String, Standard_String);
        Set_Component_Type  (Standard_String, Standard_Character);
        Set_Component_Size  (Standard_String, Uint_8);
!       Init_Size_Align     (Standard_String);
        Set_Alignment       (Standard_String, Uint_1);
        Pack_String_Type    (Standard_String);
  
!       --  On targets where a storage unit is larger than a byte (such as AAMP),
!       --  pragma Pack has a real effect on the representation of type String,
!       --  and the type must be marked as having a nonstandard representation.
  
        if System_Storage_Unit > Uint_8 then
           Set_Has_Non_Standard_Rep (Standard_String);
--- 909,925 ----
        Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
        Set_Type_Definition (Parent (Standard_String), Tdef_Node);
  
!       Mutate_Ekind        (Standard_String, E_Array_Type);
        Set_Etype           (Standard_String, Standard_String);
        Set_Component_Type  (Standard_String, Standard_Character);
        Set_Component_Size  (Standard_String, Uint_8);
!       Reinit_Size_Align   (Standard_String);
        Set_Alignment       (Standard_String, Uint_1);
        Pack_String_Type    (Standard_String);
  
!       --  On targets where a storage unit is larger than a byte, pragma Pack
!       --  has a real effect on the representation of type String, and the type
!       --  must be marked as having a nonstandard representation.
  
        if System_Storage_Unit > Uint_8 then
           Set_Has_Non_Standard_Rep (Standard_String);
*************** package body CStand is
*** 948,958 ****
        Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
        Set_Type_Definition (Parent (Standard_Wide_String), Tdef_Node);
  
!       Set_Ekind           (Standard_Wide_String, E_Array_Type);
        Set_Etype           (Standard_Wide_String, Standard_Wide_String);
        Set_Component_Type  (Standard_Wide_String, Standard_Wide_Character);
        Set_Component_Size  (Standard_Wide_String, Uint_16);
!       Init_Size_Align     (Standard_Wide_String);
        Pack_String_Type    (Standard_Wide_String);
  
        --  Set index type of Wide_String
--- 953,963 ----
        Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
        Set_Type_Definition (Parent (Standard_Wide_String), Tdef_Node);
  
!       Mutate_Ekind        (Standard_Wide_String, E_Array_Type);
        Set_Etype           (Standard_Wide_String, Standard_Wide_String);
        Set_Component_Type  (Standard_Wide_String, Standard_Wide_Character);
        Set_Component_Size  (Standard_Wide_String, Uint_16);
!       Reinit_Size_Align   (Standard_Wide_String);
        Pack_String_Type    (Standard_Wide_String);
  
        --  Set index type of Wide_String
*************** package body CStand is
*** 983,995 ****
        Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
        Set_Type_Definition (Parent (Standard_Wide_Wide_String), Tdef_Node);
  
!       Set_Ekind            (Standard_Wide_Wide_String, E_Array_Type);
        Set_Etype            (Standard_Wide_Wide_String,
                              Standard_Wide_Wide_String);
        Set_Component_Type   (Standard_Wide_Wide_String,
                              Standard_Wide_Wide_Character);
        Set_Component_Size   (Standard_Wide_Wide_String, Uint_32);
!       Init_Size_Align      (Standard_Wide_Wide_String);
        Set_Is_Ada_2005_Only (Standard_Wide_Wide_String);
        Pack_String_Type     (Standard_Wide_Wide_String);
  
--- 988,1000 ----
        Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
        Set_Type_Definition (Parent (Standard_Wide_Wide_String), Tdef_Node);
  
!       Mutate_Ekind         (Standard_Wide_Wide_String, E_Array_Type);
        Set_Etype            (Standard_Wide_Wide_String,
                              Standard_Wide_Wide_String);
        Set_Component_Type   (Standard_Wide_Wide_String,
                              Standard_Wide_Wide_Character);
        Set_Component_Size   (Standard_Wide_Wide_String, Uint_32);
!       Reinit_Size_Align    (Standard_Wide_Wide_String);
        Set_Is_Ada_2005_Only (Standard_Wide_Wide_String);
        Pack_String_Type     (Standard_Wide_Wide_String);
  
*************** package body CStand is
*** 1005,1014 ****
  
        --  Setup entity for Natural
  
!       Set_Ekind          (Standard_Natural, E_Signed_Integer_Subtype);
!       Set_Etype          (Standard_Natural, Base_Type (Standard_Integer));
!       Init_Esize         (Standard_Natural, Standard_Integer_Size);
!       Init_RM_Size       (Standard_Natural, Standard_Integer_Size - 1);
        Set_Elem_Alignment (Standard_Natural);
        Set_Size_Known_At_Compile_Time
                           (Standard_Natural);
--- 1010,1019 ----
  
        --  Setup entity for Natural
  
!       Mutate_Ekind (Standard_Natural, E_Signed_Integer_Subtype);
!       Set_Etype (Standard_Natural, Base_Type (Standard_Integer));
!       Set_Esize (Standard_Natural, UI_From_Int (Standard_Integer_Size));
!       Set_RM_Size  (Standard_Natural, UI_From_Int (Standard_Integer_Size - 1));
        Set_Elem_Alignment (Standard_Natural);
        Set_Size_Known_At_Compile_Time
                           (Standard_Natural);
*************** package body CStand is
*** 1020,1029 ****
  
        --  Setup entity for Positive
  
!       Set_Ekind          (Standard_Positive, E_Signed_Integer_Subtype);
!       Set_Etype          (Standard_Positive, Base_Type (Standard_Integer));
!       Init_Esize         (Standard_Positive, Standard_Integer_Size);
!       Init_RM_Size       (Standard_Positive, Standard_Integer_Size - 1);
        Set_Elem_Alignment (Standard_Positive);
  
        Set_Size_Known_At_Compile_Time (Standard_Positive);
--- 1025,1035 ----
  
        --  Setup entity for Positive
  
!       Mutate_Ekind (Standard_Positive, E_Signed_Integer_Subtype);
!       Set_Etype (Standard_Positive, Base_Type (Standard_Integer));
!       Set_Esize  (Standard_Positive, UI_From_Int (Standard_Integer_Size));
!       Set_RM_Size
!         (Standard_Positive, UI_From_Int (Standard_Integer_Size - 1));
        Set_Elem_Alignment (Standard_Positive);
  
        Set_Size_Known_At_Compile_Time (Standard_Positive);
*************** package body CStand is
*** 1043,1049 ****
        Set_Specification (Decl, Pspec);
  
        Set_Defining_Unit_Name (Pspec, Standard_Entity (S_ASCII));
!       Set_Ekind (Standard_Entity (S_ASCII), E_Package);
        Set_Visible_Declarations (Pspec, Decl_A);
  
        --  Create control character definitions in package ASCII. Note that
--- 1049,1055 ----
        Set_Specification (Decl, Pspec);
  
        Set_Defining_Unit_Name (Pspec, Standard_Entity (S_ASCII));
!       Mutate_Ekind (Standard_Entity (S_ASCII), E_Package);
        Set_Visible_Declarations (Pspec, Decl_A);
  
        --  Create control character definitions in package ASCII. Note that
*************** package body CStand is
*** 1063,1069 ****
  
           begin
              Set_Sloc                   (A_Char, Staloc);
!             Set_Ekind                  (A_Char, E_Constant);
              Set_Never_Set_In_Source    (A_Char, True);
              Set_Is_True_Constant       (A_Char, True);
              Set_Etype                  (A_Char, Standard_Character);
--- 1069,1075 ----
  
           begin
              Set_Sloc                   (A_Char, Staloc);
!             Mutate_Ekind               (A_Char, E_Constant);
              Set_Never_Set_In_Source    (A_Char, True);
              Set_Is_True_Constant       (A_Char, True);
              Set_Etype                  (A_Char, Standard_Character);
*************** package body CStand is
*** 1105,1111 ****
        --  Create semantic phase entities
  
        Standard_Void_Type := New_Standard_Entity ("_void_type");
!       Set_Ekind       (Standard_Void_Type, E_Void);
        Set_Etype       (Standard_Void_Type, Standard_Void_Type);
        Set_Scope       (Standard_Void_Type, Standard_Standard);
  
--- 1111,1117 ----
        --  Create semantic phase entities
  
        Standard_Void_Type := New_Standard_Entity ("_void_type");
!       pragma Assert (Ekind (Standard_Void_Type) = E_Void); -- it's the default
        Set_Etype       (Standard_Void_Type, Standard_Void_Type);
        Set_Scope       (Standard_Void_Type, Standard_Standard);
  
*************** package body CStand is
*** 1118,1124 ****
        --  type name that is reasonable, but does not overlap any Ada name.
  
        Standard_A_String := New_Standard_Entity ("access_string");
!       Set_Ekind      (Standard_A_String, E_Access_Type);
        Set_Scope      (Standard_A_String, Standard_Standard);
        Set_Etype      (Standard_A_String, Standard_A_String);
  
--- 1124,1130 ----
        --  type name that is reasonable, but does not overlap any Ada name.
  
        Standard_A_String := New_Standard_Entity ("access_string");
!       Mutate_Ekind   (Standard_A_String, E_Access_Type);
        Set_Scope      (Standard_A_String, Standard_Standard);
        Set_Etype      (Standard_A_String, Standard_A_String);
  
*************** package body CStand is
*** 1128,1140 ****
           Init_Size   (Standard_A_String, System_Address_Size * 2);
        end if;
  
!       Init_Alignment (Standard_A_String);
  
        Set_Directly_Designated_Type
                       (Standard_A_String, Standard_String);
  
        Standard_A_Char := New_Standard_Entity ("access_character");
!       Set_Ekind          (Standard_A_Char, E_Access_Type);
        Set_Scope          (Standard_A_Char, Standard_Standard);
        Set_Etype          (Standard_A_Char, Standard_A_String);
        Init_Size          (Standard_A_Char, System_Address_Size);
--- 1134,1146 ----
           Init_Size   (Standard_A_String, System_Address_Size * 2);
        end if;
  
!       pragma Assert (not Known_Alignment (Standard_A_String));
  
        Set_Directly_Designated_Type
                       (Standard_A_String, Standard_String);
  
        Standard_A_Char := New_Standard_Entity ("access_character");
!       Mutate_Ekind       (Standard_A_Char, E_Access_Type);
        Set_Scope          (Standard_A_Char, Standard_Standard);
        Set_Etype          (Standard_A_Char, Standard_A_String);
        Init_Size          (Standard_A_Char, System_Address_Size);
*************** package body CStand is
*** 1149,1165 ****
  
        Standard_Debug_Renaming_Type := New_Standard_Entity ("_renaming_type");
  
!       Set_Ekind (Standard_Debug_Renaming_Type, E_Signed_Integer_Subtype);
        Set_Scope (Standard_Debug_Renaming_Type, Standard_Standard);
        Set_Etype (Standard_Debug_Renaming_Type, Base_Type (Standard_Integer));
!       Init_Esize          (Standard_Debug_Renaming_Type, 0);
!       Init_RM_Size        (Standard_Debug_Renaming_Type, 0);
        Set_Size_Known_At_Compile_Time (Standard_Debug_Renaming_Type);
!       Set_Integer_Bounds  (Standard_Debug_Renaming_Type,
!         Typ => Base_Type  (Standard_Debug_Renaming_Type),
          Lb  => Uint_1,
          Hb  => Uint_0);
!       Set_Is_Constrained  (Standard_Debug_Renaming_Type);
        Set_Has_Size_Clause (Standard_Debug_Renaming_Type);
  
        --  Note on type names. The type names for the following special types
--- 1155,1171 ----
  
        Standard_Debug_Renaming_Type := New_Standard_Entity ("_renaming_type");
  
!       Mutate_Ekind (Standard_Debug_Renaming_Type, E_Signed_Integer_Subtype);
        Set_Scope (Standard_Debug_Renaming_Type, Standard_Standard);
        Set_Etype (Standard_Debug_Renaming_Type, Base_Type (Standard_Integer));
!       Set_Esize (Standard_Debug_Renaming_Type, Uint_0);
!       Set_RM_Size (Standard_Debug_Renaming_Type, Uint_0);
        Set_Size_Known_At_Compile_Time (Standard_Debug_Renaming_Type);
!       Set_Integer_Bounds (Standard_Debug_Renaming_Type,
!         Typ => Base_Type (Standard_Debug_Renaming_Type),
          Lb  => Uint_1,
          Hb  => Uint_0);
!       Set_Is_Constrained (Standard_Debug_Renaming_Type);
        Set_Has_Size_Clause (Standard_Debug_Renaming_Type);
  
        --  Note on type names. The type names for the following special types
*************** package body CStand is
*** 1179,1252 ****
        Build_Signed_Integer_Type (Any_Type, Standard_Integer_Size);
  
        Any_Id := New_Standard_Entity ("any id");
!       Set_Ekind             (Any_Id, E_Variable);
        Set_Scope             (Any_Id, Standard_Standard);
        Set_Etype             (Any_Id, Any_Type);
!       Init_Esize            (Any_Id);
!       Init_Alignment        (Any_Id);
! 
!       Any_Access := New_Standard_Entity ("an access type");
!       Set_Ekind             (Any_Access, E_Access_Type);
!       Set_Scope             (Any_Access, Standard_Standard);
!       Set_Etype             (Any_Access, Any_Access);
!       Init_Size             (Any_Access, System_Address_Size);
!       Set_Elem_Alignment    (Any_Access);
!       Set_Directly_Designated_Type
!                             (Any_Access, Any_Type);
  
        Any_Character := New_Standard_Entity ("a character type");
!       Set_Ekind             (Any_Character, E_Enumeration_Type);
        Set_Scope             (Any_Character, Standard_Standard);
        Set_Etype             (Any_Character, Any_Character);
        Set_Is_Unsigned_Type  (Any_Character);
        Set_Is_Character_Type (Any_Character);
!       Init_Esize            (Any_Character, Standard_Character_Size);
!       Init_RM_Size          (Any_Character, 8);
        Set_Elem_Alignment    (Any_Character);
        Set_Scalar_Range      (Any_Character, Scalar_Range (Standard_Character));
  
        Any_Array := New_Standard_Entity ("an array type");
!       Set_Ekind             (Any_Array, E_Array_Type);
        Set_Scope             (Any_Array, Standard_Standard);
        Set_Etype             (Any_Array, Any_Array);
        Set_Component_Type    (Any_Array, Any_Character);
!       Init_Size_Align       (Any_Array);
        Make_Dummy_Index      (Any_Array);
  
        Any_Boolean := New_Standard_Entity ("a boolean type");
!       Set_Ekind             (Any_Boolean, E_Enumeration_Type);
        Set_Scope             (Any_Boolean, Standard_Standard);
        Set_Etype             (Any_Boolean, Standard_Boolean);
!       Init_Esize            (Any_Boolean, Standard_Character_Size);
!       Init_RM_Size          (Any_Boolean, 1);
        Set_Elem_Alignment    (Any_Boolean);
        Set_Is_Unsigned_Type  (Any_Boolean);
        Set_Scalar_Range      (Any_Boolean, Scalar_Range (Standard_Boolean));
  
        Any_Composite := New_Standard_Entity ("a composite type");
!       Set_Ekind             (Any_Composite, E_Array_Type);
        Set_Scope             (Any_Composite, Standard_Standard);
        Set_Etype             (Any_Composite, Any_Composite);
-       Set_Component_Size    (Any_Composite, Uint_0);
        Set_Component_Type    (Any_Composite, Standard_Integer);
!       Init_Size_Align       (Any_Composite);
  
        Any_Discrete := New_Standard_Entity ("a discrete type");
!       Set_Ekind             (Any_Discrete, E_Signed_Integer_Type);
        Set_Scope             (Any_Discrete, Standard_Standard);
        Set_Etype             (Any_Discrete, Any_Discrete);
        Init_Size             (Any_Discrete, Standard_Integer_Size);
        Set_Elem_Alignment    (Any_Discrete);
  
        Any_Fixed := New_Standard_Entity ("a fixed-point type");
!       Set_Ekind             (Any_Fixed, E_Ordinary_Fixed_Point_Type);
        Set_Scope             (Any_Fixed, Standard_Standard);
        Set_Etype             (Any_Fixed, Any_Fixed);
        Init_Size             (Any_Fixed, Standard_Integer_Size);
        Set_Elem_Alignment    (Any_Fixed);
  
        Any_Integer := New_Standard_Entity ("an integer type");
!       Set_Ekind            (Any_Integer, E_Signed_Integer_Type);
        Set_Scope            (Any_Integer, Standard_Standard);
        Set_Etype            (Any_Integer, Standard_Long_Long_Long_Integer);
        Init_Size            (Any_Integer, Standard_Long_Long_Long_Integer_Size);
--- 1185,1250 ----
        Build_Signed_Integer_Type (Any_Type, Standard_Integer_Size);
  
        Any_Id := New_Standard_Entity ("any id");
!       Mutate_Ekind          (Any_Id, E_Variable);
        Set_Scope             (Any_Id, Standard_Standard);
        Set_Etype             (Any_Id, Any_Type);
!       pragma Assert (not Known_Esize (Any_Id));
!       pragma Assert (not Known_Alignment (Any_Id));
  
        Any_Character := New_Standard_Entity ("a character type");
!       Mutate_Ekind          (Any_Character, E_Enumeration_Type);
        Set_Scope             (Any_Character, Standard_Standard);
        Set_Etype             (Any_Character, Any_Character);
        Set_Is_Unsigned_Type  (Any_Character);
        Set_Is_Character_Type (Any_Character);
!       Set_Esize             (Any_Character, Char_Size);
!       Set_RM_Size           (Any_Character, Uint_8);
        Set_Elem_Alignment    (Any_Character);
        Set_Scalar_Range      (Any_Character, Scalar_Range (Standard_Character));
  
        Any_Array := New_Standard_Entity ("an array type");
!       Mutate_Ekind          (Any_Array, E_Array_Type);
        Set_Scope             (Any_Array, Standard_Standard);
        Set_Etype             (Any_Array, Any_Array);
        Set_Component_Type    (Any_Array, Any_Character);
!       Reinit_Size_Align     (Any_Array);
        Make_Dummy_Index      (Any_Array);
  
        Any_Boolean := New_Standard_Entity ("a boolean type");
!       Mutate_Ekind          (Any_Boolean, E_Enumeration_Type);
        Set_Scope             (Any_Boolean, Standard_Standard);
        Set_Etype             (Any_Boolean, Standard_Boolean);
!       Set_Esize             (Any_Boolean, Char_Size);
!       Set_RM_Size           (Any_Boolean, Uint_1);
        Set_Elem_Alignment    (Any_Boolean);
        Set_Is_Unsigned_Type  (Any_Boolean);
        Set_Scalar_Range      (Any_Boolean, Scalar_Range (Standard_Boolean));
  
        Any_Composite := New_Standard_Entity ("a composite type");
!       Mutate_Ekind          (Any_Composite, E_Array_Type);
        Set_Scope             (Any_Composite, Standard_Standard);
        Set_Etype             (Any_Composite, Any_Composite);
        Set_Component_Type    (Any_Composite, Standard_Integer);
!       Reinit_Size_Align     (Any_Composite);
! 
!       pragma Assert (not Known_Component_Size (Any_Composite));
  
        Any_Discrete := New_Standard_Entity ("a discrete type");
!       Mutate_Ekind          (Any_Discrete, E_Signed_Integer_Type);
        Set_Scope             (Any_Discrete, Standard_Standard);
        Set_Etype             (Any_Discrete, Any_Discrete);
        Init_Size             (Any_Discrete, Standard_Integer_Size);
        Set_Elem_Alignment    (Any_Discrete);
  
        Any_Fixed := New_Standard_Entity ("a fixed-point type");
!       Mutate_Ekind          (Any_Fixed, E_Ordinary_Fixed_Point_Type);
        Set_Scope             (Any_Fixed, Standard_Standard);
        Set_Etype             (Any_Fixed, Any_Fixed);
        Init_Size             (Any_Fixed, Standard_Integer_Size);
        Set_Elem_Alignment    (Any_Fixed);
  
        Any_Integer := New_Standard_Entity ("an integer type");
!       Mutate_Ekind         (Any_Integer, E_Signed_Integer_Type);
        Set_Scope            (Any_Integer, Standard_Standard);
        Set_Etype            (Any_Integer, Standard_Long_Long_Long_Integer);
        Init_Size            (Any_Integer, Standard_Long_Long_Long_Integer_Size);
*************** package body CStand is
*** 1259,1265 ****
           Hb  => Intval (High_Bound (Scalar_Range (Standard_Integer))));
  
        Any_Modular := New_Standard_Entity ("a modular type");
!       Set_Ekind            (Any_Modular, E_Modular_Integer_Type);
        Set_Scope            (Any_Modular, Standard_Standard);
        Set_Etype            (Any_Modular, Standard_Long_Long_Long_Integer);
        Init_Size            (Any_Modular, Standard_Long_Long_Long_Integer_Size);
--- 1257,1263 ----
           Hb  => Intval (High_Bound (Scalar_Range (Standard_Integer))));
  
        Any_Modular := New_Standard_Entity ("a modular type");
!       Mutate_Ekind         (Any_Modular, E_Modular_Integer_Type);
        Set_Scope            (Any_Modular, Standard_Standard);
        Set_Etype            (Any_Modular, Standard_Long_Long_Long_Integer);
        Init_Size            (Any_Modular, Standard_Long_Long_Long_Integer_Size);
*************** package body CStand is
*** 1267,1280 ****
        Set_Is_Unsigned_Type (Any_Modular);
  
        Any_Numeric := New_Standard_Entity ("a numeric type");
!       Set_Ekind            (Any_Numeric, E_Signed_Integer_Type);
        Set_Scope            (Any_Numeric, Standard_Standard);
        Set_Etype            (Any_Numeric, Standard_Long_Long_Long_Integer);
        Init_Size            (Any_Numeric, Standard_Long_Long_Long_Integer_Size);
        Set_Elem_Alignment   (Any_Numeric);
  
        Any_Real := New_Standard_Entity ("a real type");
!       Set_Ekind             (Any_Real, E_Floating_Point_Type);
        Set_Scope             (Any_Real, Standard_Standard);
        Set_Etype             (Any_Real, Standard_Long_Long_Float);
        Init_Size             (Any_Real,
--- 1265,1278 ----
        Set_Is_Unsigned_Type (Any_Modular);
  
        Any_Numeric := New_Standard_Entity ("a numeric type");
!       Mutate_Ekind         (Any_Numeric, E_Signed_Integer_Type);
        Set_Scope            (Any_Numeric, Standard_Standard);
        Set_Etype            (Any_Numeric, Standard_Long_Long_Long_Integer);
        Init_Size            (Any_Numeric, Standard_Long_Long_Long_Integer_Size);
        Set_Elem_Alignment   (Any_Numeric);
  
        Any_Real := New_Standard_Entity ("a real type");
!       Mutate_Ekind          (Any_Real, E_Floating_Point_Type);
        Set_Scope             (Any_Real, Standard_Standard);
        Set_Etype             (Any_Real, Standard_Long_Long_Float);
        Init_Size             (Any_Real,
*************** package body CStand is
*** 1282,1299 ****
        Set_Elem_Alignment    (Any_Real);
  
        Any_Scalar := New_Standard_Entity ("a scalar type");
!       Set_Ekind             (Any_Scalar, E_Signed_Integer_Type);
        Set_Scope             (Any_Scalar, Standard_Standard);
        Set_Etype             (Any_Scalar, Any_Scalar);
        Init_Size             (Any_Scalar, Standard_Integer_Size);
        Set_Elem_Alignment    (Any_Scalar);
  
        Any_String := New_Standard_Entity ("a string type");
!       Set_Ekind             (Any_String, E_Array_Type);
        Set_Scope             (Any_String, Standard_Standard);
        Set_Etype             (Any_String, Any_String);
        Set_Component_Type    (Any_String, Any_Character);
!       Init_Size_Align       (Any_String);
        Make_Dummy_Index      (Any_String);
  
        Raise_Type := New_Standard_Entity ("raise type");
--- 1280,1297 ----
        Set_Elem_Alignment    (Any_Real);
  
        Any_Scalar := New_Standard_Entity ("a scalar type");
!       Mutate_Ekind          (Any_Scalar, E_Signed_Integer_Type);
        Set_Scope             (Any_Scalar, Standard_Standard);
        Set_Etype             (Any_Scalar, Any_Scalar);
        Init_Size             (Any_Scalar, Standard_Integer_Size);
        Set_Elem_Alignment    (Any_Scalar);
  
        Any_String := New_Standard_Entity ("a string type");
!       Mutate_Ekind          (Any_String, E_Array_Type);
        Set_Scope             (Any_String, Standard_Standard);
        Set_Etype             (Any_String, Any_String);
        Set_Component_Type    (Any_String, Any_Character);
!       Reinit_Size_Align     (Any_String);
        Make_Dummy_Index      (Any_String);
  
        Raise_Type := New_Standard_Entity ("raise type");
*************** package body CStand is
*** 1401,1407 ****
        Universal_Fixed := New_Standard_Entity ("universal_fixed");
        Decl := New_Node (N_Full_Type_Declaration, Stloc);
        Set_Defining_Identifier (Decl, Universal_Fixed);
!       Set_Ekind            (Universal_Fixed, E_Ordinary_Fixed_Point_Type);
        Set_Etype            (Universal_Fixed, Universal_Fixed);
        Set_Scope            (Universal_Fixed, Standard_Standard);
        Init_Size            (Universal_Fixed, Standard_Long_Long_Integer_Size);
--- 1399,1405 ----
        Universal_Fixed := New_Standard_Entity ("universal_fixed");
        Decl := New_Node (N_Full_Type_Declaration, Stloc);
        Set_Defining_Identifier (Decl, Universal_Fixed);
!       Mutate_Ekind         (Universal_Fixed, E_Ordinary_Fixed_Point_Type);
        Set_Etype            (Universal_Fixed, Universal_Fixed);
        Set_Scope            (Universal_Fixed, Standard_Standard);
        Init_Size            (Universal_Fixed, Standard_Long_Long_Integer_Size);
*************** package body CStand is
*** 1409,1414 ****
--- 1407,1422 ----
        Set_Size_Known_At_Compile_Time
                             (Universal_Fixed);
  
+       Universal_Access := New_Standard_Entity ("universal_access");
+       Decl := New_Node (N_Full_Type_Declaration, Stloc);
+       Set_Defining_Identifier (Decl, Universal_Access);
+       Mutate_Ekind                 (Universal_Access, E_Access_Type);
+       Set_Etype                    (Universal_Access, Universal_Access);
+       Set_Scope                    (Universal_Access, Standard_Standard);
+       Init_Size                    (Universal_Access, System_Address_Size);
+       Set_Elem_Alignment           (Universal_Access);
+       Set_Directly_Designated_Type (Universal_Access, Any_Type);
+ 
        --  Create type declaration for Duration, using a 64-bit size. The
        --  delta and size values depend on the mode set in system.ads.
  
*************** package body CStand is
*** 1446,1452 ****
  
           Set_Type_Definition (Parent (Standard_Duration), Tdef_Node);
  
!          Set_Ekind (Standard_Duration, E_Ordinary_Fixed_Point_Type);
           Set_Etype (Standard_Duration, Standard_Duration);
  
           if Duration_32_Bits_On_Target then
--- 1454,1460 ----
  
           Set_Type_Definition (Parent (Standard_Duration), Tdef_Node);
  
!          Mutate_Ekind (Standard_Duration, E_Ordinary_Fixed_Point_Type);
           Set_Etype (Standard_Duration, Standard_Duration);
  
           if Duration_32_Bits_On_Target then
*************** package body CStand is
*** 1491,1528 ****
        --  known by the run-time. Components of the record are documented in
        --  the declaration in System.Standard_Library.
  
!       Standard_Exception_Type := New_Standard_Entity ("exception");
!       Set_Ekind       (Standard_Exception_Type, E_Record_Type);
!       Set_Etype       (Standard_Exception_Type, Standard_Exception_Type);
!       Set_Scope       (Standard_Exception_Type, Standard_Standard);
!       Set_Stored_Constraint
!                       (Standard_Exception_Type, No_Elist);
!       Init_Size_Align (Standard_Exception_Type);
!       Set_Size_Known_At_Compile_Time
!                       (Standard_Exception_Type, True);
  
!       Make_Component
!         (Standard_Exception_Type, Standard_Boolean,   "Not_Handled_By_Others");
!       Make_Component
!         (Standard_Exception_Type, Standard_Character, "Lang");
!       Make_Component
!         (Standard_Exception_Type, Standard_Natural,   "Name_Length");
!       Make_Component
!         (Standard_Exception_Type, Standard_A_Char,    "Full_Name");
!       Make_Component
!         (Standard_Exception_Type, Standard_A_Char,    "HTable_Ptr");
!       Make_Component
!         (Standard_Exception_Type, Standard_A_Char,    "Foreign_Data");
!       Make_Component
!         (Standard_Exception_Type, Standard_A_Char,    "Raise_Hook");
  
!       --  Build tree for record declaration, for use by the back-end
  
!       declare
!          Comp_List : List_Id;
!          Comp      : Entity_Id;
  
-       begin
           Comp      := First_Entity (Standard_Exception_Type);
           Comp_List := New_List;
           while Present (Comp) loop
--- 1499,1539 ----
        --  known by the run-time. Components of the record are documented in
        --  the declaration in System.Standard_Library.
  
!       Build_Exception_Type : declare
!          Comp_List      : List_Id;
!          Comp           : Entity_Id;
  
!       begin
!          Standard_Exception_Type := New_Standard_Entity ("exception");
!          Mutate_Ekind    (Standard_Exception_Type, E_Record_Type);
!          Set_Etype       (Standard_Exception_Type, Standard_Exception_Type);
!          Set_Scope       (Standard_Exception_Type, Standard_Standard);
!          Set_Stored_Constraint
!                          (Standard_Exception_Type, No_Elist);
!          Set_Size_Known_At_Compile_Time
!                          (Standard_Exception_Type, True);
  
!          pragma Assert (not Known_RM_Size (Standard_Exception_Type));
  
!          Make_Aliased_Component (Standard_Exception_Type, Standard_Boolean,
!                          "Not_Handled_By_Others");
!          Make_Aliased_Component (Standard_Exception_Type, Standard_Character,
!                          "Lang");
!          Make_Aliased_Component (Standard_Exception_Type, Standard_Natural,
!                          "Name_Length");
!          Make_Aliased_Component (Standard_Exception_Type, Standard_Address,
!                          "Full_Name");
!          Make_Aliased_Component (Standard_Exception_Type, Standard_A_Char,
!                          "HTable_Ptr");
!          Make_Aliased_Component (Standard_Exception_Type, Standard_Address,
!                          "Foreign_Data");
!          Make_Aliased_Component (Standard_Exception_Type, Standard_A_Char,
!                          "Raise_Hook");
! 
!          Layout_Type (Standard_Exception_Type);
! 
!          --  Build tree for record declaration, for use by the back-end
  
           Comp      := First_Entity (Standard_Exception_Type);
           Comp_List := New_List;
           while Present (Comp) loop
*************** package body CStand is
*** 1531,1539 ****
                  Defining_Identifier => Comp,
                  Component_Definition =>
                    Make_Component_Definition (Stloc,
!                     Aliased_Present    => False,
!                     Subtype_Indication => New_Occurrence_Of (Etype (Comp),
!                                                              Stloc))),
                Comp_List);
  
              Next_Entity (Comp);
--- 1542,1550 ----
                  Defining_Identifier => Comp,
                  Component_Definition =>
                    Make_Component_Definition (Stloc,
!                     Aliased_Present    => True,
!                     Subtype_Indication =>
!                       New_Occurrence_Of (Etype (Comp), Stloc))),
                Comp_List);
  
              Next_Entity (Comp);
*************** package body CStand is
*** 1543,1557 ****
             Defining_Identifier => Standard_Exception_Type,
             Type_Definition =>
               Make_Record_Definition (Stloc,
!                End_Label => Empty,
                 Component_List =>
                   Make_Component_List (Stloc,
                     Component_Items => Comp_List)));
-       end;
  
!       Append (Decl, Decl_S);
! 
!       Layout_Type (Standard_Exception_Type);
  
        --  Create declarations of standard exceptions
  
--- 1554,1566 ----
             Defining_Identifier => Standard_Exception_Type,
             Type_Definition =>
               Make_Record_Definition (Stloc,
!                End_Label      => Empty,
                 Component_List =>
                   Make_Component_List (Stloc,
                     Component_Items => Comp_List)));
  
!          Append (Decl, Decl_S);
!       end Build_Exception_Type;
  
        --  Create declarations of standard exceptions
  
*************** package body CStand is
*** 1572,1578 ****
           Decl := New_Node (N_Exception_Renaming_Declaration, Stloc);
           E_Id := Standard_Entity (S_Numeric_Error);
  
!          Set_Ekind          (E_Id, E_Exception);
           Set_Etype          (E_Id, Standard_Exception_Type);
           Set_Is_Public      (E_Id);
           Set_Renamed_Entity (E_Id, Standard_Entity (S_Constraint_Error));
--- 1581,1587 ----
           Decl := New_Node (N_Exception_Renaming_Declaration, Stloc);
           E_Id := Standard_Entity (S_Numeric_Error);
  
!          Mutate_Ekind       (E_Id, E_Exception);
           Set_Etype          (E_Id, Standard_Exception_Type);
           Set_Is_Public      (E_Id);
           Set_Renamed_Entity (E_Id, Standard_Entity (S_Constraint_Error));
*************** package body CStand is
*** 1590,1596 ****
  
        Abort_Signal := New_Standard_Entity;
        Set_Chars     (Abort_Signal, Name_uAbort_Signal);
!       Set_Ekind     (Abort_Signal, E_Exception);
        Set_Etype     (Abort_Signal, Standard_Exception_Type);
        Set_Scope     (Abort_Signal, Standard_Standard);
        Set_Is_Public (Abort_Signal, True);
--- 1599,1605 ----
  
        Abort_Signal := New_Standard_Entity;
        Set_Chars     (Abort_Signal, Name_uAbort_Signal);
!       Mutate_Ekind  (Abort_Signal, E_Exception);
        Set_Etype     (Abort_Signal, Standard_Exception_Type);
        Set_Scope     (Abort_Signal, Standard_Standard);
        Set_Is_Public (Abort_Signal, True);
*************** package body CStand is
*** 1605,1628 ****
  
        Standard_Op_Rotate_Left := New_Standard_Entity;
        Set_Chars (Standard_Op_Rotate_Left, Name_Rotate_Left);
!       Set_Ekind (Standard_Op_Rotate_Left, E_Operator);
  
        Standard_Op_Rotate_Right := New_Standard_Entity;
        Set_Chars (Standard_Op_Rotate_Right, Name_Rotate_Right);
!       Set_Ekind (Standard_Op_Rotate_Right, E_Operator);
  
        Standard_Op_Shift_Left := New_Standard_Entity;
        Set_Chars (Standard_Op_Shift_Left, Name_Shift_Left);
!       Set_Ekind (Standard_Op_Shift_Left, E_Operator);
  
        Standard_Op_Shift_Right := New_Standard_Entity;
        Set_Chars (Standard_Op_Shift_Right, Name_Shift_Right);
!       Set_Ekind (Standard_Op_Shift_Right, E_Operator);
  
        Standard_Op_Shift_Right_Arithmetic := New_Standard_Entity;
        Set_Chars (Standard_Op_Shift_Right_Arithmetic,
                                            Name_Shift_Right_Arithmetic);
!       Set_Ekind (Standard_Op_Shift_Right_Arithmetic,
                                            E_Operator);
  
        --  Create standard operator declarations
--- 1614,1637 ----
  
        Standard_Op_Rotate_Left := New_Standard_Entity;
        Set_Chars (Standard_Op_Rotate_Left, Name_Rotate_Left);
!       Mutate_Ekind (Standard_Op_Rotate_Left, E_Operator);
  
        Standard_Op_Rotate_Right := New_Standard_Entity;
        Set_Chars (Standard_Op_Rotate_Right, Name_Rotate_Right);
!       Mutate_Ekind (Standard_Op_Rotate_Right, E_Operator);
  
        Standard_Op_Shift_Left := New_Standard_Entity;
        Set_Chars (Standard_Op_Shift_Left, Name_Shift_Left);
!       Mutate_Ekind (Standard_Op_Shift_Left, E_Operator);
  
        Standard_Op_Shift_Right := New_Standard_Entity;
        Set_Chars (Standard_Op_Shift_Right, Name_Shift_Right);
!       Mutate_Ekind (Standard_Op_Shift_Right, E_Operator);
  
        Standard_Op_Shift_Right_Arithmetic := New_Standard_Entity;
        Set_Chars (Standard_Op_Shift_Right_Arithmetic,
                                            Name_Shift_Right_Arithmetic);
!       Mutate_Ekind (Standard_Op_Shift_Right_Arithmetic,
                                            E_Operator);
  
        --  Create standard operator declarations
*************** package body CStand is
*** 1677,1683 ****
        New_Ent : constant Entity_Id := New_Copy (E);
  
     begin
!       Set_Ekind            (E, K);
        Set_Is_Constrained   (E, True);
        Set_Is_First_Subtype (E, True);
        Set_Etype            (E, New_Ent);
--- 1686,1692 ----
        New_Ent : constant Entity_Id := New_Copy (E);
  
     begin
!       Mutate_Ekind         (E, K);
        Set_Is_Constrained   (E, True);
        Set_Is_First_Subtype (E, True);
        Set_Etype            (E, New_Ent);
*************** package body CStand is
*** 1707,1717 ****
        return Ident_Node;
     end Identifier_For;
  
!    --------------------
!    -- Make_Component --
!    --------------------
  
!    procedure Make_Component
       (Rec : Entity_Id;
        Typ : Entity_Id;
        Nam : String)
--- 1716,1726 ----
        return Ident_Node;
     end Identifier_For;
  
!    ----------------------------
!    -- Make_Aliased_Component --
!    ----------------------------
  
!    procedure Make_Aliased_Component
       (Rec : Entity_Id;
        Typ : Entity_Id;
        Nam : String)
*************** package body CStand is
*** 1719,1731 ****
        Id : constant Entity_Id := New_Standard_Entity (Nam);
  
     begin
!       Set_Ekind                     (Id, E_Component);
        Set_Etype                     (Id, Typ);
        Set_Scope                     (Id, Rec);
!       Init_Component_Location       (Id);
        Set_Original_Record_Component (Id, Id);
        Append_Entity (Id, Rec);
!    end Make_Component;
  
     -----------------
     -- Make_Formal --
--- 1728,1742 ----
        Id : constant Entity_Id := New_Standard_Entity (Nam);
  
     begin
!       Mutate_Ekind                  (Id, E_Component);
        Set_Etype                     (Id, Typ);
        Set_Scope                     (Id, Rec);
!       Reinit_Component_Location     (Id);
        Set_Original_Record_Component (Id, Id);
+       Set_Is_Aliased                (Id);
+       Set_Is_Independent            (Id);
        Append_Entity (Id, Rec);
!    end Make_Aliased_Component;
  
     -----------------
     -- Make_Formal --
*************** package body CStand is
*** 1735,1741 ****
        Formal : constant Entity_Id := New_Standard_Entity (Nam);
  
     begin
!       Set_Ekind     (Formal, E_In_Parameter);
        Set_Mechanism (Formal, Default_Mechanism);
        Set_Scope     (Formal, Standard_Standard);
        Set_Etype     (Formal, Typ);
--- 1746,1752 ----
        Formal : constant Entity_Id := New_Standard_Entity (Nam);
  
     begin
!       Mutate_Ekind  (Formal, E_In_Parameter);
        Set_Mechanism (Formal, Default_Mechanism);
        Set_Scope     (Formal, Standard_Standard);
        Set_Etype     (Formal, Typ);
*************** package body CStand is
*** 1765,1771 ****
  
     begin
        Set_Is_Pure    (Ident_Node, True);
!       Set_Ekind      (Ident_Node, E_Operator);
        Set_Etype      (Ident_Node, Typ);
        Set_Scope      (Ident_Node, Standard_Standard);
        Set_Homonym    (Ident_Node, Get_Name_Entity_Id (Op));
--- 1776,1782 ----
  
     begin
        Set_Is_Pure    (Ident_Node, True);
!       Mutate_Ekind   (Ident_Node, E_Operator);
        Set_Etype      (Ident_Node, Typ);
        Set_Scope      (Ident_Node, Standard_Standard);
        Set_Homonym    (Ident_Node, Get_Name_Entity_Id (Op));
*************** package body CStand is
*** 1784,1793 ****
     -- New_Standard_Entity --
     -------------------------
  
!    function New_Standard_Entity
!      (New_Node_Kind : Node_Kind := N_Defining_Identifier) return Entity_Id
     is
!       E : constant Entity_Id := New_Entity (New_Node_Kind, Stloc);
  
     begin
        --  All standard entities are Pure and Public
--- 1795,1803 ----
     -- New_Standard_Entity --
     -------------------------
  
!    function New_Standard_Entity return Entity_Id
     is
!       E : constant Entity_Id := New_Entity (N_Defining_Identifier, Stloc);
  
     begin
        --  All standard entities are Pure and Public
diff -Nrcpad gcc-11.3.0/gcc/ada/cstand.ads gcc-12.1.0/gcc/ada/cstand.ads
*** gcc-11.3.0/gcc/ada/cstand.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/cstand.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/cstreams.c gcc-12.1.0/gcc/ada/cstreams.c
*** gcc-11.3.0/gcc/ada/cstreams.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/cstreams.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *              Auxiliary C functions for Interfaces.C.Streams              *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *              Auxiliary C functions for Interfaces.C.Streams              *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/ctrl_c.c gcc-12.1.0/gcc/ada/ctrl_c.c
*** gcc-11.3.0/gcc/ada/ctrl_c.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/ctrl_c.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *        Copyright (C) 2002-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *        Copyright (C) 2002-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/debug.adb gcc-12.1.0/gcc/ada/debug.adb
*** gcc-11.3.0/gcc/ada/debug.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/debug.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Debug is
*** 112,118 ****
     --  d.y  Disable implicit pragma Elaborate_All on task bodies
     --  d.z  Restore previous support for frontend handling of Inline_Always
  
!    --  d.A  Print Atree statistics
     --  d.B  Generate a bug box on abort_statement
     --  d.C  Generate concatenation call, do not generate inline code
     --  d.D  Disable errors on use of overriding keyword in Ada 95 mode
--- 112,118 ----
     --  d.y  Disable implicit pragma Elaborate_All on task bodies
     --  d.z  Restore previous support for frontend handling of Inline_Always
  
!    --  d.A  Enable statistics printing in Atree
     --  d.B  Generate a bug box on abort_statement
     --  d.C  Generate concatenation call, do not generate inline code
     --  d.D  Disable errors on use of overriding keyword in Ada 95 mode
*************** package body Debug is
*** 125,131 ****
     --  d.K  Do not reject components in extensions overlapping with parent
     --  d.L  Depend on back end for limited types in if and case expressions
     --  d.M  Relaxed RM semantics
!    --  d.N  Add node to all entities
     --  d.O  Dump internal SCO tables
     --  d.P  Previous (non-optimized) handling of length comparisons
     --  d.Q  Previous (incomplete) style check for binary operators
--- 125,131 ----
     --  d.K  Do not reject components in extensions overlapping with parent
     --  d.L  Depend on back end for limited types in if and case expressions
     --  d.M  Relaxed RM semantics
!    --  d.N
     --  d.O  Dump internal SCO tables
     --  d.P  Previous (non-optimized) handling of length comparisons
     --  d.Q  Previous (incomplete) style check for binary operators
*************** package body Debug is
*** 140,152 ****
     --  d.Z  Do not enable expansion in configurable run-time mode
  
     --  d_a  Stop elaboration checks on accept or select statement
!    --  d_b
     --  d_c  CUDA compilation : compile for the host
     --  d_d
     --  d_e  Ignore entry calls and requeue statements for elaboration
     --  d_f  Issue info messages related to GNATprove usage
!    --  d_g
!    --  d_h
     --  d_i  Ignore activations and calls to instances for elaboration
     --  d_j  Read JSON files and populate Repinfo tables (opposite of -gnatRjs)
     --  d_k
--- 140,152 ----
     --  d.Z  Do not enable expansion in configurable run-time mode
  
     --  d_a  Stop elaboration checks on accept or select statement
!    --  d_b  Use designated type model under No_Dynamic_Accessibility_Checks
     --  d_c  CUDA compilation : compile for the host
     --  d_d
     --  d_e  Ignore entry calls and requeue statements for elaboration
     --  d_f  Issue info messages related to GNATprove usage
!    --  d_g  Disable large static aggregates
!    --  d_h  Disable the use of (perfect) hash functions for enumeration Value
     --  d_i  Ignore activations and calls to instances for elaboration
     --  d_j  Read JSON files and populate Repinfo tables (opposite of -gnatRjs)
     --  d_k
*************** package body Debug is
*** 158,170 ****
     --  d_q
     --  d_r
     --  d_s  Stop elaboration checks on synchronous suspension
!    --  d_t
!    --  d_u
!    --  d_v
     --  d_w
!    --  d_x
     --  d_y
!    --  d_z  Enable Put_Image on tagged types
  
     --  d_A  Stop generation of ALI file
     --  d_B  Warn on build-in-place function calls
--- 158,170 ----
     --  d_q
     --  d_r
     --  d_s  Stop elaboration checks on synchronous suspension
!    --  d_t  In LLVM-based CCG, dump LLVM IR after transformations are done
!    --  d_u  In LLVM-based CCG, dump flows
!    --  d_v  Enable additional checks and debug printouts in Atree
     --  d_w
!    --  d_x  Disable inline expansion of Image attribute for enumeration types
     --  d_y
!    --  d_z
  
     --  d_A  Stop generation of ALI file
     --  d_B  Warn on build-in-place function calls
*************** package body Debug is
*** 183,192 ****
     --  d_O
     --  d_P
     --  d_Q
!    --  d_R
     --  d_S
     --  d_T  Output trace information on invocation path recording
!    --  d_U
     --  d_V  Enable verifications on the expanded tree
     --  d_W
     --  d_X
--- 183,192 ----
     --  d_O
     --  d_P
     --  d_Q
!    --  d_R  For LLVM, dump the representation of records
     --  d_S
     --  d_T  Output trace information on invocation path recording
!    --  d_U  Disable prepending messages with "error:".
     --  d_V  Enable verifications on the expanded tree
     --  d_W
     --  d_X
*************** package body Debug is
*** 210,216 ****
     --  d.5  Do not generate imported subprogram definitions in C code
     --  d.6  Do not avoid declaring unreferenced types in C code
     --  d.7  Disable unsound heuristics in gnat2scil (for CP as SPARK prover)
!    --  d.8
     --  d.9  Disable build-in-place for nonlimited types
  
     --  d_1
--- 210,216 ----
     --  d.5  Do not generate imported subprogram definitions in C code
     --  d.6  Do not avoid declaring unreferenced types in C code
     --  d.7  Disable unsound heuristics in gnat2scil (for CP as SPARK prover)
!    --  d.8  Disable unconditional inlining of expression functions
     --  d.9  Disable build-in-place for nonlimited types
  
     --  d_1
*************** package body Debug is
*** 830,836 ****
     --       handling of Inline_Always by the front end on such targets. For the
     --       targets that do not use the GCC back end, this switch is ignored.
  
!    --  d.A  Print Atree statistics
  
     --  d.B  Generate a bug box when we see an abort_statement, even though
     --       there is no bug. Useful for testing Comperr.Compiler_Abort: write
--- 830,839 ----
     --       handling of Inline_Always by the front end on such targets. For the
     --       targets that do not use the GCC back end, this switch is ignored.
  
!    --  d.A  Enable statistics printing in Atree. First set Statistics_Enabled
!    --       in gen_il-gen.adb to True, then rebuild, then run the compiler
!    --       with -gnatd.A. You might want to apply "sort -nr" to parts of the
!    --       output.
  
     --  d.B  Generate a bug box when we see an abort_statement, even though
     --       there is no bug. Useful for testing Comperr.Compiler_Abort: write
*************** package body Debug is
*** 900,909 ****
     --  d.M  Relaxed RM semantics. This flag sets Opt.Relaxed_RM_Semantics
     --       See Opt.Relaxed_RM_Semantics for more details.
  
-    --  d.N  Enlarge entities by one node (but don't attempt to use this extra
-    --       node for storage of any flags or fields). This can be used to do
-    --       experiments on the impact of increasing entity sizes.
- 
     --  d.O  Dump internal SCO tables. Before outputting the SCO information to
     --       the ALI file, the internal SCO tables (SCO_Table/SCO_Unit_Table)
     --       are dumped for debugging purposes.
--- 903,908 ----
*************** package body Debug is
*** 962,967 ****
--- 961,970 ----
     --       behavior is similar to that of No_Entry_Calls_In_Elaboration_Code,
     --       but does not penalize actual entry calls in elaboration code.
  
+    --  d_b  When the restriction No_Dynamic_Accessibility_Checks is enabled,
+    --       use the simple "designated type" accessibility model, instead of
+    --       using the implicit level of the anonymous access type declaration.
+ 
     --  d_e  The compiler ignores simple entry calls, asynchronous transfer of
     --       control, conditional entry calls, timed entry calls, and requeue
     --       statements in both the static and dynamic elaboration models.
*************** package body Debug is
*** 971,976 ****
--- 974,986 ----
     --       beginners find them confusing. Set automatically by GNATprove when
     --       switch --info is used.
  
+    --  d_g  Disable large static aggregates. The maximum size for a static
+    --       aggregate will be fairly modest, which is useful if the compiler
+    --       is using too much memory and time at compile time.
+ 
+    --  d_h  The compiler does not make use of (perfect) hash functions in the
+    --       implementation of the Value attribute for enumeration types.
+ 
     --  d_i  The compiler ignores calls and task activations when they target a
     --       subprogram or task type defined in an external instance for both
     --       the static and dynamic elaboration models.
*************** package body Debug is
*** 987,994 ****
     --       a call to routine Ada.Synchronous_Task_Control.Suspend_Until_True
     --       or Ada.Synchronous_Barriers.Wait_For_Release.
  
!    --  d_z  Enable the default Put_Image on tagged types that are not
!    --       predefined.
  
     --  d_A  Do not generate ALI files by setting Opt.Disable_ALI_File.
  
--- 997,1013 ----
     --       a call to routine Ada.Synchronous_Task_Control.Suspend_Until_True
     --       or Ada.Synchronous_Barriers.Wait_For_Release.
  
!    --  d_t  In the LLVM-based CCG, do an additional dump of the LLVM IR
!    --       after the pass that does transformations to the IR into a
!    --       filename ending with .trans.ll.
! 
!    --  d_u  In the LLVM-based CCG, dump flows, both when originally created
!    --       and after transformations.
! 
!    --  d_v  Enable additional checks and debug printouts in Atree
! 
!    --  d_x  The compiler does not expand in line the Image attribute for user-
!    --       defined enumeration types and the standard boolean type.
  
     --  d_A  Do not generate ALI files by setting Opt.Disable_ALI_File.
  
*************** package body Debug is
*** 1008,1016 ****
--- 1027,1041 ----
     --       it is checked, and the progress of the recursive trace through
     --       elaboration calls at compile time.
  
+    --  d_R  In the LLVM backend, output the internal representation of
+    --       each record
+ 
     --  d_T  The compiler outputs trace information to standard output whenever
     --       an invocation path is recorded.
  
+    --  d_U  Disable prepending 'error:' to error messages. This used to be the
+    --       default and can be seen as the opposite of -gnatU.
+ 
     --  d_V  Enable verification of the expanded code before calling the backend
     --       and generate error messages on each inconsistency found.
  
*************** package body Debug is
*** 1091,1097 ****
     --       issues (e.g., assuming that a low bound of an array parameter
     --       of an unconstrained subtype belongs to the index subtype).
  
!    --  d.9  Enable build-in-place for function calls returning some nonlimited
     --       types.
  
     ------------------------------------------
--- 1116,1126 ----
     --       issues (e.g., assuming that a low bound of an array parameter
     --       of an unconstrained subtype belongs to the index subtype).
  
!    --  d.8  By default calls to expression functions are always inlined.
!    --       This debug flag turns off this behavior, making them subject
!    --       to the usual inlining heuristics of the code generator.
! 
!    --  d.9  Disable build-in-place for function calls returning nonlimited
     --       types.
  
     ------------------------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/debug.ads gcc-12.1.0/gcc/ada/debug.ads
*** gcc-11.3.0/gcc/ada/debug.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/debug.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/debug_a.adb gcc-12.1.0/gcc/ada/debug_a.adb
*** gcc-11.3.0/gcc/ada/debug_a.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/debug_a.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,33 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;   use Atree;
! with Debug;   use Debug;
! with Sinfo;   use Sinfo;
! with Sinput;  use Sinput;
! with Output;  use Output;
  
  package body Debug_A is
  
--- 23,34 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinput;         use Sinput;
! with Output;         use Output;
  
  package body Debug_A is
  
*************** package body Debug_A is
*** 46,51 ****
--- 47,58 ----
     --  recursion levels, we just don't reset the right value on exit, which
     --  is not crucial, since this is only for debugging.
  
+    --  Note that Current_Error_Node must be maintained unconditionally (not
+    --  only when Debug_Flag_A is True), because we want to print a correct sloc
+    --  in bug boxes. Also, Current_Error_Node is not just used for printing bug
+    --  boxes. For example, an incorrect Current_Error_Node can cause some code
+    --  in Rtsfind to malfunction.
+ 
     -----------------------
     -- Local Subprograms --
     -----------------------
*************** package body Debug_A is
*** 75,82 ****
  
        --  Now push the new element
  
-       --  Why is this done unconditionally???
- 
        Debug_A_Depth := Debug_A_Depth + 1;
  
        if Debug_A_Depth <= Max_Node_Ids then
--- 82,87 ----
*************** package body Debug_A is
*** 103,110 ****
        --  We look down the stack to find something with a decent Sloc. (If
        --  we find nothing, just leave it unchanged which is not so terrible)
  
-       --  This seems nasty overhead for the normal case ???
- 
        for J in reverse 1 .. Integer'Min (Max_Node_Ids, Debug_A_Depth) loop
           if Sloc (Node_Ids (J)) > No_Location then
              Current_Error_Node := Node_Ids (J);
--- 108,113 ----
*************** package body Debug_A is
*** 130,137 ****
  
     procedure Debug_Output_Astring is
        Vbars : constant String := "|||||||||||||||||||||||||";
-       --  Should be constant, removed because of GNAT 1.78 bug ???
- 
     begin
        if Debug_A_Depth > Vbars'Length then
           for I in Vbars'Length .. Debug_A_Depth loop
--- 133,138 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/debug_a.ads gcc-12.1.0/gcc/ada/debug_a.ads
*** gcc-11.3.0/gcc/ada/debug_a.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/debug_a.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/Makefile gcc-12.1.0/gcc/ada/doc/Makefile
*** gcc-11.3.0/gcc/ada/doc/Makefile	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/Makefile	Fri May  6 07:30:56 2022
*************** ALLSPHINXOPTS   = $(PAPEROPT_$(PAPER)) $
*** 14,20 ****
  		  -c $(SOURCEDIR)/share \
  		  -d $(BUILDDIR)/$*/doctrees \
  		  $(SOURCEDIR)
! DOC_LIST=gnat_rm gnat_ugn
  FMT_LIST=html pdf txt info
  
  .PHONY: help clean
--- 14,20 ----
  		  -c $(SOURCEDIR)/share \
  		  -d $(BUILDDIR)/$*/doctrees \
  		  $(SOURCEDIR)
! DOC_LIST=gnat_rm gnat_ugn gnat-style
  FMT_LIST=html pdf txt info
  
  .PHONY: help clean
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat-style.rst gcc-12.1.0/gcc/ada/doc/gnat-style.rst
*** gcc-11.3.0/gcc/ada/doc/gnat-style.rst	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/doc/gnat-style.rst	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,691 ----
+ GNAT Coding Style: A Guide for GNAT Developers
+ ==============================================
+ 
+ General
+ -------
+ 
+ Most of GNAT is written in Ada using a consistent style to ensure
+ readability of the code.  This document has been written to help
+ maintain this consistent style, while having a large group of developers
+ work on the compiler.
+ 
+ For the coding style in the C parts of the compiler and run time,
+ see the GNU Coding Guidelines.
+ 
+ This document is structured after the Ada Reference Manual.
+ Those familiar with that document should be able to quickly
+ lookup style rules for particular constructs.
+ 
+ Lexical Elements
+ ----------------
+ 
+ Character Set and Separators
+ ****************************
+ 
+ .. index:: Character set
+ .. index:: ASCII
+ .. index:: Separators
+ .. index:: End-of-line
+ .. index:: Line length
+ .. index:: Indentation
+ 
+ * The character set used should be plain 7-bit ASCII.
+   The only separators allowed are space and the end-of-line sequence.
+   No other control character or format effector (such as ``HT``,
+   ``VT``, ``FF`` )
+   should be used.
+   The normal end-of-line sequence is used, which may be
+   ``LF``, ``CR/LF`` or ``CR``,
+   depending on the host system.  An optional ``SUB``
+   ( ``16#1A#`` ) may be present as the
+   last character in the file on hosts using that character as file terminator.
+ 
+ * Files that are checked in or distributed should be in host format.
+ 
+ * A line should never be longer than 79 characters, not counting the line
+   separator.
+ 
+ * Lines must not have trailing blanks.
+ 
+ * Indentation is 3 characters per level for ``if`` statements, loops, and
+   ``case`` statements.
+   For exact information on required spacing between lexical
+   elements, see file style.adb.
+ 
+   .. index:: style.adb file
+ 
+ Identifiers
+ ***********
+ 
+ * Identifiers will start with an upper case letter, and each letter following
+   an underscore will be upper case.
+ 
+   .. index:: Casing (for identifiers)
+ 
+   Short acronyms may be all upper case.
+   All other letters are lower case.
+   An exception is for identifiers matching a foreign language.  In particular,
+   we use all lower case where appropriate for C.
+ 
+ * Use underscores to separate words in an identifier.
+ 
+   .. index:: Underscores
+ 
+ * Try to limit your use of abbreviations in identifiers.
+   It is ok to make a few abbreviations, explain what they mean, and then
+   use them frequently, but don't use lots of obscure abbreviations.  An
+   example is the ``ALI`` word which stands for Ada Library
+   Information and is by convention always written in upper-case when
+   used in entity names.
+ 
+   .. code-block:: ada
+ 
+            procedure Find_ALI_Files;
+ 
+ * Don't use the variable name ``I``, use ``J`` instead; ``I`` is too
+   easily confused with ``1`` in some fonts.  Similarly don't use the
+   variable ``O``, which is too easily mistaken for the number ``0``.
+ 
+ Numeric Literals
+ ****************
+ 
+ * Numeric literals should include underscores where helpful for
+   readability.
+ 
+   .. index:: Underscores
+ 
+   .. code-block:: ada
+ 
+           1_000_000
+           16#8000_0000#
+           3.14159_26535_89793_23846
+ 
+ Reserved Words
+ **************
+ 
+ * Reserved words use all lower case.
+ 
+   .. index:: Casing (for reserved words)
+ 
+   .. code-block:: ada
+ 
+            return else
+ 
+ * The words ``Access``, ``Delta`` and ``Digits`` are
+   capitalized when used as attribute_designator.
+ 
+ Comments
+ ********
+ 
+ * A comment starts with ``--`` followed by two spaces.
+   The only exception to this rule (i.e. one space is tolerated) is when the
+   comment ends with a single space followed by ``--``.
+   It is also acceptable to have only one space between ``--`` and the start
+   of the comment when the comment is at the end of a line,
+   after some Ada code.
+ 
+ * Every sentence in a comment should start with an upper-case letter (including
+   the first letter of the comment).
+ 
+   .. index:: Casing (in comments)
+ 
+ * When declarations are commented with 'hanging' comments, i.e.
+   comments after the declaration, there is no blank line before the
+   comment, and if it is absolutely necessary to have blank lines within
+   the comments, e.g. to make paragraph separations within a single comment,
+   these blank lines *do* have a ``--`` (unlike the
+   normal rule, which is to use entirely blank lines for separating
+   comment paragraphs).  The comment starts at same level of indentation
+   as code it is commenting.
+ 
+   .. index:: Blank lines (in comments)
+   .. index:: Indentation
+ 
+   .. code-block:: ada
+ 
+            z : Integer;
+            --  Integer value for storing value of z
+            --
+            --  The previous line was a blank line.
+ 
+ * Comments that are dubious or incomplete, or that comment on possibly
+   wrong or incomplete code, should be preceded or followed by ``???``.
+ 
+ * Comments in a subprogram body must generally be surrounded by blank lines.
+   An exception is a comment that follows a line containing a single keyword
+   ( ``begin``, ``else``, ``loop`` ):
+ 
+   .. code-block:: ada
+ 
+            begin
+               --  Comment for the next statement
+ 
+               A := 5;
+ 
+               --  Comment for the B statement
+ 
+               B := 6;
+            end;
+ 
+ * In sequences of statements, comments at the end of the lines should be
+   aligned.
+ 
+   .. index:: Alignment (in comments)
+ 
+   .. code-block:: ada
+ 
+             My_Identifier := 5;      --  First comment
+             Other_Id := 6;           --  Second comment
+ 
+ * Short comments that fit on a single line are *not* ended with a
+   period.  Comments taking more than a line are punctuated in the normal
+   manner.
+ 
+ * Comments should focus on *why* instead of *what*.
+   Descriptions of what subprograms do go with the specification.
+ 
+ * Comments describing a subprogram spec should specifically mention the
+   formal argument names.  General rule: write a comment that does not
+   depend on the names of things.  The names are supplementary, not
+   sufficient, as comments.
+ 
+ * *Do not* put two spaces after periods in comments.
+ 
+ Declarations and Types
+ ----------------------
+ 
+ * In entity declarations, colons must be surrounded by spaces.  Colons
+   should be aligned.
+ 
+   .. index:: Alignment (in declarations)
+ 
+   .. code-block:: ada
+ 
+             Entity1   : Integer;
+             My_Entity : Integer;
+ 
+ * Declarations should be grouped in a logical order.
+   Related groups of declarations may be preceded by a header comment.
+ 
+ * All local subprograms in a subprogram or package body should be declared
+   before the first local subprogram body.
+ 
+ * Do not declare local entities that hide global entities.
+ 
+   .. index:: Hiding of outer entities
+ 
+ * Do not declare multiple variables in one declaration that spans lines.
+   Start a new declaration on each line, instead.
+ 
+ * The defining_identifiers of global declarations serve as
+   comments of a sort.  So don't choose terse names, but look for names
+   that give useful information instead.
+ 
+ * Local names can be shorter, because they are used only within
+   one context, where comments explain their purpose.
+ 
+ * When starting an initialization or default expression on the line that follows
+   the declaration line, use 2 characters for indentation.
+ 
+   .. code-block:: ada
+ 
+             Entity1 : Integer :=
+               Function_Name (Parameters, For_Call);
+ 
+ * If an initialization or default expression needs to be continued on subsequent
+   lines, the continuations should be indented from the start of the expression.
+ 
+   .. code-block:: ada
+ 
+             Entity1 : Integer := Long_Function_Name
+                                    (parameters for call);
+ 
+ Expressions and Names
+ ---------------------
+ 
+ * Every operator must be surrounded by spaces. An exception is that
+   this rule does not apply to the exponentiation operator, for which
+   there are no specific layout rules. The reason for this exception
+   is that sometimes it makes clearer reading to leave out the spaces
+   around exponentiation.
+ 
+   .. index:: Operators
+ 
+   .. code-block:: ada
+ 
+            E := A * B**2 + 3 * (C - D);
+ 
+ * Use parentheses where they clarify the intended association of operands
+   with operators:
+ 
+   .. index:: Parenthesization of expressions
+ 
+   .. code-block:: ada
+ 
+            (A / B) * C
+ 
+ Statements
+ ----------
+ 
+ Simple and Compound Statements
+ ******************************
+ 
+ * Use only one statement or label per line.
+ 
+ * A longer sequence_of_statements may be divided in logical
+   groups or separated from surrounding code using a blank line.
+ 
+ 
+ If Statements
+ *************
+ 
+ * When the ``if``, ``elsif`` or ``else`` keywords fit on the
+   same line with the condition and the ``then`` keyword, then the
+   statement is formatted as follows:
+ 
+   .. index:: Alignment (in an if statement)
+ 
+   .. code-block:: ada
+ 
+             if condition then
+                ...
+             elsif condition then
+                ...
+             else
+                ...
+             end if;
+ 
+   When the above layout is not possible, ``then`` should be aligned
+   with ``if``, and conditions should preferably be split before an
+   ``and`` or ``or`` keyword a follows:
+ 
+   .. code-block:: ada
+ 
+             if long_condition_that_has_to_be_split
+               and then continued_on_the_next_line
+             then
+                ...
+             end if;
+ 
+   The ``elsif``, ``else`` and ``end if`` always line up with
+   the ``if`` keyword.  The preferred location for splitting the line
+   is before ``and`` or ``or``.  The continuation of a condition is
+   indented with two spaces or as many as needed to make nesting clear.
+   As an exception, if conditions are closely related either of the
+   following is allowed:
+ 
+   .. code-block:: ada
+ 
+          if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf
+               or else
+             x = asldkjhalkdsjfhhfd
+               or else
+             x = asdfadsfadsf
+          then
+            ...
+          end if;
+ 
+          if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf or else
+             x = asldkjhalkdsjfhhfd                         or else
+             x = asdfadsfadsf
+          then
+            ...
+          end if;
+ 
+ * Conditions should use short-circuit forms ( ``and then``,
+   ``or else`` ), except when the operands are boolean variables
+   or boolean constants.
+ 
+   .. index:: Short-circuit forms
+ 
+ * Complex conditions in ``if`` statements are indented two characters:
+ 
+   .. index:: Indentation (in if statements)
+ 
+   .. code-block:: ada
+ 
+           if this_complex_condition
+             and then that_other_one
+             and then one_last_one
+           then
+              ...
+           end if;
+ 
+   There are some cases where complex conditionals can be laid out
+   in manners that do not follow these rules to preserve better
+   parallelism between branches, e.g.
+ 
+   .. code-block:: ada
+ 
+           if xyz.abc (gef) = 'c'
+                or else
+              xyz.abc (gef) = 'x'
+           then
+              ...
+           end if;
+ 
+ * Every ``if`` block is preceded and followed by a blank line, except
+   where it begins or ends a sequence_of_statements.
+ 
+   .. index:: Blank lines (in an if statement)
+ 
+   .. code-block:: ada
+ 
+             A := 5;
+ 
+             if A = 5 then
+                null;
+             end if;
+ 
+             A := 6;
+ 
+ Case Statements
+ ***************
+ 
+ * Layout is as below.  For long ``case`` statements, the extra indentation
+   can be saved by aligning the ``when`` clauses with the opening ``case``.
+ 
+   .. code-block:: ada
+ 
+            case expression is
+               when condition =>
+                  ...
+               when condition =>
+                  ...
+            end case;
+ 
+ Loop Statements
+ ***************
+ 
+ * When possible, have ``for`` or ``while`` on one line with the
+   condition and the ``loop`` keyword.
+ 
+   .. code-block:: ada
+ 
+            for J in S'Range loop
+               ...
+            end loop;
+ 
+   If the condition is too long, split the condition (see 'If
+   statements' above) and align ``loop`` with the ``for`` or
+   ``while`` keyword.
+ 
+   .. index:: Alignment (in a loop statement)
+ 
+   .. code-block:: ada
+ 
+           while long_condition_that_has_to_be_split
+             and then continued_on_the_next_line
+           loop
+              ...
+           end loop;
+ 
+   If the loop_statement has an identifier, it is laid out as follows:
+ 
+   .. code-block:: ada
+ 
+           Outer : while not condition loop
+              ...
+           end Outer;
+ 
+ Block Statements
+ ****************
+ 
+ * The ``declare`` (optional), ``begin`` and ``end`` words
+   are aligned, except when the block_statement is named.  There
+   is a blank line before the ``begin`` keyword:
+ 
+   .. index:: Alignment (in a block statement)
+ 
+   .. code-block:: ada
+ 
+           Some_Block : declare
+              ...
+ 
+           begin
+              ...
+           end Some_Block;
+ 
+ Subprograms
+ -----------
+ 
+ Subprogram Declarations
+ ***********************
+ 
+ * Do not write the ``in`` for parameters.
+ 
+   .. code-block:: ada
+ 
+           function Length (S : String) return Integer;
+ 
+ * When the declaration line for a procedure or a function is too long to fit
+   the entire declaration (including the keyword procedure or function) on a
+   single line, then fold it, putting a single parameter on a line, aligning
+   the colons, as in:
+ 
+   .. code-block:: ada
+ 
+          procedure Set_Heading
+            (Source : String;
+             Count  : Natural;
+             Pad    : Character := Space;
+             Fill   : Boolean   := True);
+ 
+   In the case of a function, if the entire spec does not fit on one line, then
+   the return may appear after the last parameter, as in:
+ 
+   .. code-block:: ada
+ 
+           function Head
+             (Source : String;
+              Count  : Natural;
+              Pad    : Character := Space) return String;
+ 
+   Or it may appear on its own as a separate line. This form is preferred when
+   putting the return on the same line as the last parameter would result in
+   an overlong line. The return type may optionally be aligned with the types
+   of the parameters (usually we do this aligning if it results only in a small
+   number of extra spaces, and otherwise we don't attempt to align). So two
+   alternative forms for the above spec are:
+ 
+   .. code-block:: ada
+ 
+           function Head
+             (Source : String;
+              Count  : Natural;
+              Pad    : Character := Space)
+              return   String;
+ 
+           function Head
+             (Source : String;
+              Count  : Natural;
+              Pad    : Character := Space)
+              return String;
+ 
+ Subprogram Bodies
+ *****************
+ 
+ * Function and procedure bodies should usually be sorted alphabetically. Do
+   not attempt to sort them in some logical order by functionality. For a
+   sequence of subprogram specs, a general alphabetical sorting is also
+   usually appropriate, but occasionally it makes sense to group by major
+   function, with appropriate headers.
+ 
+ * All subprograms have a header giving the function name, with the following
+   format:
+ 
+   .. code-block:: ada
+ 
+           -----------------
+           -- My_Function --
+           -----------------
+ 
+           procedure My_Function is
+           begin
+             ...
+           end My_Function;
+ 
+   Note that the name in the header is preceded by a single space,
+   not two spaces as for other comments. These headers are used on
+   nested subprograms as well as outer level subprograms. They may
+   also be used as headers for sections of comments, or collections
+   of declarations that are related.
+ 
+ * Every subprogram body must have a preceding subprogram_declaration,
+   which includes proper client documentation so that you do not need to
+   read the subprogram body in order to understand what the subprogram does and
+   how to call it. All subprograms should be documented, without exceptions.
+ 
+   .. index:: Blank lines (in subprogram bodies)
+ 
+ * A sequence of declarations may optionally be separated from the following
+   begin by a blank line.  Just as we optionally allow blank lines in general
+   between declarations, this blank line should be present only if it improves
+   readability. Generally we avoid this blank line if the declarative part is
+   small (one or two lines) and the body has no blank lines, and we include it
+   if the declarative part is long or if the body has blank lines.
+ 
+ * If the declarations in a subprogram contain at least one nested
+   subprogram body, then just before the ``begin`` of the enclosing
+   subprogram, there is a comment line and a blank line:
+ 
+   .. code-block:: ada
+ 
+         --  Start of processing for Enclosing_Subprogram
+ 
+         begin
+           ...
+         end Enclosing_Subprogram;
+ 
+ * When nested subprograms are present, variables that are referenced by any
+   nested subprogram should precede the nested subprogram specs. For variables
+   that are not referenced by nested procedures, the declarations can either also
+   be before any of the nested subprogram specs (this is the old style, more
+   generally used). Or then can come just before the begin, with a header. The
+   following example shows the two possible styles:
+ 
+   .. code-block:: ada
+ 
+         procedure Style1 is
+            Var_Referenced_In_Nested      : Integer;
+            Var_Referenced_Only_In_Style1 : Integer;
+ 
+            proc Nested;
+            --  Comments ...
+ 
+            ------------
+            -- Nested --
+            ------------
+ 
+            procedure Nested is
+            begin
+               ...
+            end Nested;
+ 
+         --  Start of processing for Style1
+ 
+         begin
+            ...
+         end Style1;
+ 
+         procedure Style2 is
+            Var_Referenced_In_Nested : Integer;
+ 
+            proc Nested;
+            --  Comments ...
+ 
+            ------------
+            -- Nested --
+            ------------
+ 
+            procedure Nested is
+            begin
+               ...
+            end Nested;
+ 
+            --  Local variables
+ 
+            Var_Referenced_Only_In_Style2 : Integer;
+ 
+         --  Start of processing for Style2
+ 
+         begin
+            ...
+         end Style2;
+ 
+   For new code, we generally prefer Style2, but we do not insist on
+   modifying all legacy occurrences of Style1, which is still much
+   more common in the sources.
+ 
+ Packages and Visibility Rules
+ -----------------------------
+ 
+ * All program units and subprograms have their name at the end:
+ 
+   .. code-block:: ada
+ 
+           package P is
+              ...
+           end P;
+ 
+ * We will use the style of ``use`` -ing ``with`` -ed packages, with
+   the context clauses looking like:
+ 
+   .. index:: use clauses
+ 
+   .. code-block:: ada
+ 
+           with A; use A;
+           with B; use B;
+ 
+ * Names declared in the visible part of packages should be
+   unique, to prevent name clashes when the packages are ``use`` d.
+ 
+   .. index:: Name clash avoidance
+ 
+   .. code-block:: ada
+ 
+           package Entity is
+              type Entity_Kind is ...;
+              ...
+           end Entity;
+ 
+ * After the file header comment, the context clause and unit specification
+   should be the first thing in a program_unit.
+ 
+ * Preelaborate, Pure and Elaborate_Body pragmas should be added right after the
+   package name, indented an extra level and using the parameterless form:
+ 
+   .. code-block:: ada
+ 
+           package Preelaborate_Package is
+              pragma Preelaborate;
+              ...
+           end Preelaborate_Package;
+ 
+ Program Structure and Compilation Issues
+ ----------------------------------------
+ 
+ * Every GNAT source file must be compiled with the ``-gnatg``
+   switch to check the coding style.
+   (Note that you should look at
+   style.adb to see the lexical rules enforced by ``-gnatg`` ).
+ 
+   .. index:: -gnatg option (to gcc)
+   .. index:: style.adb file
+ 
+ * Each source file should contain only one compilation unit.
+ 
+ * Filenames should be 8 or fewer characters, followed by the ``.adb``
+   extension for a body or ``.ads`` for a spec.
+ 
+   .. index:: File name length
+ 
+ * Unit names should be distinct when 'krunch'ed to 8 characters
+   (see krunch.ads) and the filenames should match the unit name,
+   except that they are all lower case.
+ 
+   .. index:: krunch.ads file
+ 
+ .. toctree::
+    share/gnu_free_documentation_license
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm/about_this_guide.rst gcc-12.1.0/gcc/ada/doc/gnat_rm/about_this_guide.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm/about_this_guide.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_rm/about_this_guide.rst	Fri May  6 07:30:56 2022
*************** This reference manual contains the follo
*** 96,101 ****
--- 96,104 ----
  * :ref:`Implementation_of_Ada_2012_Features`, describes the status of the
    GNAT implementation of the Ada 2012 language standard.
  
+ * :ref:`Security_Hardening_Features` documents GNAT extensions aimed
+   at security hardening.
+ 
  * :ref:`Obsolescent_Features` documents implementation dependent features,
    including pragmas and attributes, which are considered obsolescent, since
    there are other preferred ways of achieving the same results. These
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm/implementation_advice.rst gcc-12.1.0/gcc/ada/doc/gnat_rm/implementation_advice.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm/implementation_advice.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_rm/implementation_advice.rst	Fri May  6 07:30:56 2022
*************** flushed before the ``Get_Immediate`` cal
*** 799,804 ****
--- 799,820 ----
  ``Interfaces.Vxworks.IO`` is provided that contains routines to enable
  this functionality.
  
+ .. index:: Containers
+ 
+ RM A.18: ``Containers``
+ ================================
+ 
+ All implementation advice pertaining to Ada.Containers and its
+ child units (that is, all implementation advice occurring within
+ section A.18 and its subsections) is followed except for A.18.24(17):
+ 
+    "Bounded ordered set objects should be implemented without implicit pointers or dynamic allocation. "
+ 
+ The implementations of the two Reference_Preserving_Key functions of
+ the generic package Ada.Containers.Bounded_Ordered_Sets each currently make
+ use of dynamic allocation; other operations on bounded ordered set objects
+ follow the implementation advice.
+ 
  .. index:: Export
  
  RM B.1(39-41): Pragma ``Export``
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst gcc-12.1.0/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst	Fri May  6 07:30:56 2022
*************** This aspect is equivalent to :ref:`pragm
*** 397,402 ****
--- 397,415 ----
  argument specifying a root tagged type (thus this aspect can only be
  applied to such a type).
  
+ Aspect No_Task_Parts
+ ========================
+ .. index:: No_Task_Parts
+ 
+ Applies to a type. If True, requires that the type and any descendants
+ do not have any task parts. The rules for this aspect are the same as
+ for the language-defined No_Controlled_Parts aspect (see RM-H.4.1),
+ replacing "controlled" with "task".
+ 
+ If No_Task_Parts is True for a type T, then the compiler can optimize
+ away certain tasking-related code that would otherwise be needed
+ for T'Class, because descendants of T might contain tasks.
+ 
  Aspect Object_Size
  ==================
  .. index:: Object_Size
*************** Aspect Universal_Aliasing
*** 548,559 ****
  
  This boolean aspect is equivalent to :ref:`pragma Universal_Aliasing<Pragma-Universal_Aliasing>`.
  
- Aspect Universal_Data
- =====================
- .. index:: Universal_Data
- 
- This aspect is equivalent to :ref:`pragma Universal_Data<Pragma-Universal_Data>`.
- 
  Aspect Unmodified
  =================
  .. index:: Unmodified
--- 561,566 ----
*************** Aspect Unreferenced
*** 566,572 ****
  
  This boolean aspect is equivalent to :ref:`pragma Unreferenced<Pragma-Unreferenced>`.
  
! When using the ``-gnat2020`` switch, this aspect is also supported on formal
  parameters, which is in particular the only form possible for expression
  functions.
  
--- 573,579 ----
  
  This boolean aspect is equivalent to :ref:`pragma Unreferenced<Pragma-Unreferenced>`.
  
! When using the ``-gnat2022`` switch, this aspect is also supported on formal
  parameters, which is in particular the only form possible for expression
  functions.
  
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst gcc-12.1.0/gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_rm/implementation_defined_attributes.rst	Fri May  6 07:30:56 2022
*************** Attribute Default_Bit_Order
*** 196,202 ****
  .. index:: Default_Bit_Order
  
  ``Standard'Default_Bit_Order`` (``Standard`` is the only
! permissible prefix), provides the value ``System.Default_Bit_Order``
  as a ``Pos`` value (0 for ``High_Order_First``, 1 for
  ``Low_Order_First``).  This is used to construct the definition of
  ``Default_Bit_Order`` in package ``System``.
--- 196,202 ----
  .. index:: Default_Bit_Order
  
  ``Standard'Default_Bit_Order`` (``Standard`` is the only
! allowed prefix), provides the value ``System.Default_Bit_Order``
  as a ``Pos`` value (0 for ``High_Order_First``, 1 for
  ``Low_Order_First``).  This is used to construct the definition of
  ``Default_Bit_Order`` in package ``System``.
*************** Attribute Default_Scalar_Storage_Order
*** 210,216 ****
  .. index:: Default_Scalar_Storage_Order
  
  ``Standard'Default_Scalar_Storage_Order`` (``Standard`` is the only
! permissible prefix), provides the current value of the default scalar storage
  order (as specified using pragma ``Default_Scalar_Storage_Order``, or
  equal to ``Default_Bit_Order`` if unspecified) as a
  ``System.Bit_Order`` value. This is a static attribute.
--- 210,216 ----
  .. index:: Default_Scalar_Storage_Order
  
  ``Standard'Default_Scalar_Storage_Order`` (``Standard`` is the only
! allowed prefix), provides the current value of the default scalar storage
  order (as specified using pragma ``Default_Scalar_Storage_Order``, or
  equal to ``Default_Bit_Order`` if unspecified) as a
  ``System.Bit_Order`` value. This is a static attribute.
*************** Attribute Maximum_Alignment
*** 665,671 ****
  .. index:: Maximum_Alignment
  
  ``Standard'Maximum_Alignment`` (``Standard`` is the only
! permissible prefix) provides the maximum useful alignment value for the
  target.  This is a static value that can be used to specify the alignment
  for an object, guaranteeing that it is properly aligned in all
  cases.
--- 665,671 ----
  .. index:: Maximum_Alignment
  
  ``Standard'Maximum_Alignment`` (``Standard`` is the only
! allowed prefix) provides the maximum useful alignment value for the
  target.  This is a static value that can be used to specify the alignment
  for an object, guaranteeing that it is properly aligned in all
  cases.
*************** Attribute Max_Integer_Size
*** 674,680 ****
  ==========================
  .. index:: Max_Integer_Size
  
! ``Standard'Max_Integer_Size`` (``Standard`` is the only permissible
  prefix) provides the size of the largest supported integer type for
  the target. The result is a static constant.
  
--- 674,680 ----
  ==========================
  .. index:: Max_Integer_Size
  
! ``Standard'Max_Integer_Size`` (``Standard`` is the only allowed
  prefix) provides the size of the largest supported integer type for
  the target. The result is a static constant.
  
*************** If a component of ``T`` is itself of a r
*** 1057,1062 ****
--- 1057,1102 ----
  attribute definition clause must be provided for the component type as well
  if desired.
  
+ Representation changes that explicitly or implicitly toggle the scalar storage
+ order are not supported and may result in erroneous execution of the program,
+ except when performed by means of an instance of ``Ada.Unchecked_Conversion``.
+ 
+ In particular, overlays are not supported and a warning is given for them:
+ 
+ .. code-block:: ada
+ 
+      type Rec_LE is record
+         I : Integer;
+      end record;
+ 
+      for Rec_LE use record
+         I at 0 range 0 .. 31;
+      end record;
+ 
+      for Rec_LE'Bit_Order use System.Low_Order_First;
+      for Rec_LE'Scalar_Storage_Order use System.Low_Order_First;
+ 
+      type Rec_BE is record
+         I : Integer;
+      end record;
+ 
+      for Rec_BE use record
+         I at 0 range 0 .. 31;
+      end record;
+ 
+      for Rec_BE'Bit_Order use System.High_Order_First;
+      for Rec_BE'Scalar_Storage_Order use System.High_Order_First;
+ 
+      R_LE : Rec_LE;
+ 
+      R_BE : Rec_BE;
+      for R_BE'Address use R_LE'Address;
+ 
+ ``warning: overlay changes scalar storage order [enabled by default]``
+ 
+ In most cases, such representation changes ought to be replaced by an
+ instantiation of a function or procedure provided by ``GNAT.Byte_Swapping``.
+ 
  Note that the scalar storage order only affects the in-memory data
  representation. It has no effect on the representation used by stream
  attributes.
*************** Attribute Storage_Unit
*** 1164,1170 ****
  ======================
  .. index:: Storage_Unit
  
! ``Standard'Storage_Unit`` (``Standard`` is the only permissible
  prefix) provides the same value as ``System.Storage_Unit``.
  
  Attribute Stub_Type
--- 1204,1210 ----
  ======================
  .. index:: Storage_Unit
  
! ``Standard'Storage_Unit`` (``Standard`` is the only allowed
  prefix) provides the same value as ``System.Storage_Unit``.
  
  Attribute Stub_Type
*************** Attribute System_Allocator_Alignment
*** 1195,1201 ****
  .. index:: System_Allocator_Alignment
  
  ``Standard'System_Allocator_Alignment`` (``Standard`` is the only
! permissible prefix) provides the observable guaranted to be honored by
  the system allocator (malloc). This is a static value that can be used
  in user storage pools based on malloc either to reject allocation
  with alignment too large or to enable a realignment circuitry if the
--- 1235,1241 ----
  .. index:: System_Allocator_Alignment
  
  ``Standard'System_Allocator_Alignment`` (``Standard`` is the only
! allowed prefix) provides the observable guaranted to be honored by
  the system allocator (malloc). This is a static value that can be used
  in user storage pools based on malloc either to reject allocation
  with alignment too large or to enable a realignment circuitry if the
*************** Attribute Target_Name
*** 1205,1211 ****
  =====================
  .. index:: Target_Name
  
! ``Standard'Target_Name`` (``Standard`` is the only permissible
  prefix) provides a static string value that identifies the target
  for the current compilation. For GCC implementations, this is the
  standard gcc target name without the terminating slash (for
--- 1245,1251 ----
  =====================
  .. index:: Target_Name
  
! ``Standard'Target_Name`` (``Standard`` is the only allowed
  prefix) provides a static string value that identifies the target
  for the current compilation. For GCC implementations, this is the
  standard gcc target name without the terminating slash (for
*************** Attribute To_Address
*** 1216,1222 ****
  .. index:: To_Address
  
  The ``System'To_Address``
! (``System`` is the only permissible prefix)
  denotes a function identical to
  ``System.Storage_Elements.To_Address`` except that
  it is a static attribute.  This means that if its argument is
--- 1256,1262 ----
  .. index:: To_Address
  
  The ``System'To_Address``
! (``System`` is the only allowed prefix)
  denotes a function identical to
  ``System.Storage_Elements.To_Address`` except that
  it is a static attribute.  This means that if its argument is
*************** Multi-dimensional arrays can be modified
*** 1587,1592 ****
--- 1627,1641 ----
  
  which changes element (1,2) to 20 and (3,4) to 30.
  
+ Attribute Valid_Image
+ =======================
+ .. index:: Valid_Image
+ 
+ The ``'Valid_Image`` attribute is defined for enumeration types other than
+ those in package Standard. This attribute is a function that takes
+ a String, and returns Boolean. ``T'Valid_Image (S)`` returns True
+ if and only if ``T'Value (S)`` would not raise Constraint_Error.
+ 
  Attribute Valid_Scalars
  =======================
  .. index:: Valid_Scalars
*************** Attribute Wchar_T_Size
*** 1650,1656 ****
  ======================
  .. index:: Wchar_T_Size
  
! ``Standard'Wchar_T_Size`` (``Standard`` is the only permissible
  prefix) provides the size in bits of the C ``wchar_t`` type
  primarily for constructing the definition of this type in
  package ``Interfaces.C``. The result is a static constant.
--- 1699,1705 ----
  ======================
  .. index:: Wchar_T_Size
  
! ``Standard'Wchar_T_Size`` (``Standard`` is the only allowed
  prefix) provides the size in bits of the C ``wchar_t`` type
  primarily for constructing the definition of this type in
  package ``Interfaces.C``. The result is a static constant.
*************** Attribute Word_Size
*** 1659,1664 ****
  ===================
  .. index:: Word_Size
  
! ``Standard'Word_Size`` (``Standard`` is the only permissible
  prefix) provides the value ``System.Word_Size``. The result is
  a static constant.
--- 1708,1713 ----
  ===================
  .. index:: Word_Size
  
! ``Standard'Word_Size`` (``Standard`` is the only allowed
  prefix) provides the value ``System.Word_Size``. The result is
  a static constant.
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst gcc-12.1.0/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst	Fri May  6 07:30:56 2022
*************** Any *code_statement* can potentially cau
*** 53,59 ****
  See separate section on source representation.
  
  *
!   "The control functions allowed in comments.  See 2.1(14)."
  
  See separate section on source representation.
  
--- 53,60 ----
  See separate section on source representation.
  
  *
!   "The semantics of an Ada program whose text is not in
!    Normalization Form C.  See 2.1(4)."
  
  See separate section on source representation.
  
*************** parameter, checks that the optimization
*** 86,99 ****
  not.
  
  *
!   "The sequence of characters of the value returned by
!   ``S'Image`` when some of the graphic characters of
!   ``S'Wide_Image`` are not defined in ``Character``.  See
!   3.5(37)."
  
! The sequence of characters is as defined by the wide character encoding
! method used for the source.  See section on source representation for
! further details.
  
  *
    "The predefined integer types declared in
--- 87,100 ----
  not.
  
  *
!   "The message string associated with the Assertion_Error exception raised
!   by the failure of a predicate check if there is no applicable
!   Predicate_Failure aspect.  See 3.2.4(31)."
  
! In the case of a Dynamic_Predicate aspect, the string is
! "Dynamic_Predicate failed at <source position>", where
! "<source position>" might be something like "foo.adb:123".
! The Static_Predicate case is handled analogously.
  
  *
    "The predefined integer types declared in
*************** There are no nonstandard real types.
*** 129,148 ****
    "What combinations of requested decimal precision and range
    are supported for floating point types.  See 3.5.7(7)."
  
! The precision and range is as defined by the IEEE standard.
  
  *
    "The predefined floating point types declared in
    ``Standard``.  See 3.5.7(16)."
  
! ====================== ====================================================
  Type                   Representation
! ====================== ====================================================
! *Short_Float*          32 bit IEEE short
! *Float*                (Short) 32 bit IEEE short
! *Long_Float*           64 bit IEEE long
! *Long_Long_Float*      64 bit IEEE long (80 bit IEEE long on x86 processors)
! ====================== ====================================================
  
  *
    "The small of an ordinary fixed point type.  See 3.5.9(8)."
--- 130,158 ----
    "What combinations of requested decimal precision and range
    are supported for floating point types.  See 3.5.7(7)."
  
! The precision and range are defined by the IEEE Standard for Floating-Point
! Arithmetic (IEEE 754-2019).
  
  *
    "The predefined floating point types declared in
    ``Standard``.  See 3.5.7(16)."
  
! ====================== ===============================================
  Type                   Representation
! ====================== ===============================================
! *Short_Float*          IEEE Binary32 (Single)
! *Float*                IEEE Binary32 (Single)
! *Long_Float*           IEEE Binary64 (Double)
! *Long_Long_Float*      IEEE Binary64 (Double) on non-x86 architectures
!                        IEEE 80-bit Extended on x86 architecture
! ====================== ===============================================
! 
! The default rounding mode specified by the IEEE 754 Standard is assumed both
! for static and dynamic computations (that is, round to nearest, ties to even).
! The input routines yield correctly rounded values for Short_Float, Float, and
! Long_Float at least. The output routines can compute up to twice as many exact
! digits as the value of ``T'Digits`` for any type, for example 30 digits for
! Long_Float; if more digits are requested, zeros are printed.
  
  *
    "The small of an ordinary fixed point type.  See 3.5.9(8)."
*************** Block numbers of the form :samp:`B{nnn}`
*** 183,206 ****
  decimal integer are allocated.
  
  *
    "Implementation-defined attributes.  See 4.1.4(12)."
  
  See :ref:`Implementation_Defined_Attributes`.
  
  *
    "Any implementation-defined time types.  See 9.6(6)."
  
  There are no implementation-defined time types.
  
  *
!   "The time base associated with relative delays."
  
  See 9.6(20).  The time base used is that provided by the C library
  function ``gettimeofday``.
  
  *
!   "The time base of the type ``Calendar.Time``.  See
!   9.6(23)."
  
  The time base used is that provided by the C library function
  ``gettimeofday``.
--- 193,271 ----
  decimal integer are allocated.
  
  *
+   "The sequence of characters of the value returned by Tags.Expanded_Name
+   (respectively, Tags.Wide_Expanded_Name) when some of the graphic
+   characters of Tags.Wide_Wide_Expanded_Name are not defined in Character
+   (respectively, Wide_Character).  See 3.9(10.1)."
+ 
+ This is handled in the same way as the implementation-defined behavior
+ referenced in A.4.12(34).
+ 
+ *
    "Implementation-defined attributes.  See 4.1.4(12)."
  
  See :ref:`Implementation_Defined_Attributes`.
  
  *
+   "The value of the parameter to Empty for some container aggregates.
+   See 4.3.5(40)."
+ 
+ As per the suggestion given in the Annotated Ada RM, the default value
+ of the formal parameter is used if one exists and zero is used otherwise.
+ 
+ *
+   "The maximum number of chunks for a parallel reduction expression without
+   a chunk_specification.  See 4.5.10(21)."
+ 
+ Feature unimplemented.
+ 
+ *
+   "Rounding of real static expressions which are exactly half-way between
+   two machine numbers.  See 4.9(38)."
+ 
+ Round to even is used in all such cases.
+ 
+ *
+   "The maximum number of chunks for a parallel generalized iterator without
+    a chunk_specification.  See 5.5.2(10)."
+ 
+ Feature unimplemented.
+ 
+ *
+   "The number of chunks for an array component iterator.  See 5.5.2(11)."
+ 
+ Feature unimplemented.
+ 
+ *
+   "Any extensions of the Global aspect.  See 6.1.2(43)."
+ 
+ Feature unimplemented.
+ 
+ *
+   "The circumstances the implementation passes in the null value for a view
+   conversion of an access type used as an out parameter.  See 6.4.1(19)."
+ 
+ Difficult to characterize.
+ 
+ *
+   "Any extensions of the Default_Initial_Condition aspect.  See 7.3.3(11)."
+ 
+ SPARK allows specifying *null* as the Default_Initial_Condition
+ aspect of a type. See the SPARK reference manual for further details.
+ 
+ *
    "Any implementation-defined time types.  See 9.6(6)."
  
  There are no implementation-defined time types.
  
  *
!   "The time base associated with relative delays.  See 9.6(20)."
  
  See 9.6(20).  The time base used is that provided by the C library
  function ``gettimeofday``.
  
  *
!   "The time base of the type ``Calendar.Time``.  See 9.6(23)."
  
  The time base used is that provided by the C library function
  ``gettimeofday``.
*************** setting for local time, as accessed by t
*** 220,232 ****
  There are no such limits.
  
  *
!   "Whether or not two non-overlapping parts of a composite
!   object are independently addressable, in the case where packing, record
!   layout, or ``Component_Size`` is specified for the object.  See
!   9.10(1)."
  
! Separate components are independently addressable if they do not share
! overlapping storage units.
  
  *
    "The representation for a compilation.  See 10.1(2)."
--- 285,299 ----
  There are no such limits.
  
  *
!   "The result of Calendar.Formatting.Image if its argument represents more
!    than 100 hours.  See 9.6.1(86)."
  
! Calendar.Time_Error is raised.
! 
! *
!   "Implementation-defined conflict check policies.  See 9.10.1(5)."
! 
! There are no implementation-defined conflict check policies.
  
  *
    "The representation for a compilation.  See 10.1(2)."
*************** options, refer to *GNAT Make Program gna
*** 272,280 ****
  :title:`GNAT User's Guide`.
  
  *
!   "The implementation-defined means, if any, of specifying
!   which compilation units are needed by a given compilation unit.  See
!   10.2(2)."
  
  The units needed by a given compilation unit are as defined in
  the Ada Reference Manual section 10.2(2-6).  There are no
--- 339,346 ----
  :title:`GNAT User's Guide`.
  
  *
!   "The implementation-defined means, if any, of specifying which compilation
!   units are needed by a given compilation unit.  See 10.2(2)."
  
  The units needed by a given compilation unit are as defined in
  the Ada Reference Manual section 10.2(2-6).  There are no
*************** The main program is designated by provid
*** 289,305 ****
  corresponding :file:`ALI` file as the input parameter to the binder.
  
  *
!   "The order of elaboration of *library_items*.  See
!   10.2(18)."
  
  The first constraint on ordering is that it meets the requirements of
  Chapter 10 of the Ada Reference Manual.  This still leaves some
! implementation dependent choices, which are resolved by first
! elaborating bodies as early as possible (i.e., in preference to specs
! where there is a choice), and second by evaluating the immediate with
! clauses of a unit to determine the probably best choice, and
! third by elaborating in alphabetical order of unit names
! where a choice still remains.
  
  *
    "Parameter passing and function return for the main
--- 355,367 ----
  corresponding :file:`ALI` file as the input parameter to the binder.
  
  *
!   "The order of elaboration of *library_items*.  See 10.2(18)."
  
  The first constraint on ordering is that it meets the requirements of
  Chapter 10 of the Ada Reference Manual.  This still leaves some
! implementation-dependent choices, which are resolved by analyzing
! the elaboration code of each unit and identifying implicit
! elaboration-order dependencies.
  
  *
    "Parameter passing and function return for the main
*************** value is the return code of the program
*** 311,323 ****
  may have been set by a call to ``Ada.Command_Line.Set_Exit_Status``).
  
  *
!   "The mechanisms for building and running partitions.  See
!   10.2(24)."
  
! GNAT itself supports programs with only a single partition.  The GNATDIST
  tool provided with the GLADE package (which also includes an implementation
  of the PCS) provides a completely flexible method for building and running
! programs consisting of multiple partitions.  See the separate GLADE manual
  for details.
  
  *
--- 373,384 ----
  may have been set by a call to ``Ada.Command_Line.Set_Exit_Status``).
  
  *
!   "The mechanisms for building and running partitions.  See 10.2(24)."
  
! GNAT itself supports programs with only a single partition. The GNATDIST
  tool provided with the GLADE package (which also includes an implementation
  of the PCS) provides a completely flexible method for building and running
! programs consisting of multiple partitions. See the separate GLADE manual
  for details.
  
  *
*************** See separate section on compilation mode
*** 331,342 ****
    implementation.  See 10.2(28)."
  
  Passive partitions are supported on targets where shared memory is
! provided by the operating system.  See the GLADE reference manual for
  further details.
  
  *
!   "The information returned by ``Exception_Message``.  See
!   11.4.1(10)."
  
  Exception message returns the null string unless a specific message has
  been passed by the program.
--- 392,402 ----
    implementation.  See 10.2(28)."
  
  Passive partitions are supported on targets where shared memory is
! provided by the operating system. See the GLADE reference manual for
  further details.
  
  *
!   "The information returned by ``Exception_Message``.  See 11.4.1(10)."
  
  Exception message returns the null string unless a specific message has
  been passed by the program.
*************** where
*** 382,387 ****
--- 442,479 ----
       the last line is a single ``LF`` character (``16#0A#``).
  
  *
+   "The sequence of characters of the value returned by
+   Exceptions.Exception_Name (respectively, Exceptions.Wide_Exception_Name)
+   when some of the graphic characters of Exceptions.Wide_Wide_Exception_Name
+   are not defined in Character (respectively, Wide_Character).
+   See 11.4.1(12.1)."
+ 
+ This is handled in the same way as the implementation-defined behavior
+ referenced in A.4.12(34).
+ 
+ *
+   "The information returned by Exception_Information.  See 11.4.1(13)."
+ 
+ The exception name and the source location at which the exception was
+ raised are included.
+ 
+ *
+   "Implementation-defined policy_identifiers and assertion_aspect_marks
+   allowed in a pragma Assertion_Policy.  See 11.4.2(9)."
+ 
+ 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.
+ 
+ *
+   "The default assertion policy.  See 11.4.2(10)."
+ 
+ The default assertion policy is Ignore, although this can be overridden
+ via compiler switches such as "-gnata".
+ 
+ *
    "Implementation-defined check names.  See 11.5(27)."
  
  The implementation defined check names include Alignment_Check,
*************** program can add implementation-defined c
*** 391,418 ****
  Check_Name. See the description of pragma ``Suppress`` for full details.
  
  *
!   "The interpretation of each aspect of representation.  See
!   13.1(20)."
  
  See separate section on data representations.
  
  *
!   "Any restrictions placed upon representation items.  See
!   13.1(20)."
  
  See separate section on data representations.
  
  *
!   "The meaning of ``Size`` for indefinite subtypes.  See
!   13.3(48)."
  
! Size for an indefinite subtype is the maximum possible size, except that
! for the case of a subprogram parameter, the size of the parameter object
! is the actual size.
  
  *
!   "The default external representation for a type tag.  See
!   13.3(75)."
  
  The default external representation for a type tag is the fully expanded
  name of the type in upper case letters.
--- 483,536 ----
  Check_Name. See the description of pragma ``Suppress`` for full details.
  
  *
!   "Existence and meaning of second parameter of pragma Unsuppress.
!   See 11.5(27.1)."
! 
! The legality rules for and semantics of the second parameter of pragma
! Unsuppress match those for the second argument of pragma Suppress.
! 
! *
!   "The cases that cause conflicts between the representation of the
!    ancestors of a type_declaration.  See 13.1(13.1)."
! 
! No such cases exist.
! 
! *
!   "The interpretation of each representation aspect.  See 13.1(20)."
  
  See separate section on data representations.
  
  *
!   "Any restrictions placed upon the specification of representation aspects.
!   See 13.1(20)."
  
  See separate section on data representations.
  
  *
!   "Implementation-defined aspects, including the syntax for specifying
!   such aspects and the legality rules for such aspects.  See 13.1.1(38)."
  
! See :ref:`Implementation_Defined_Aspects`.
  
  *
!   "The set of machine scalars.  See 13.3(8.1)."
! 
! See separate section on data representations.
! 
! *
!   "The meaning of ``Size`` for indefinite subtypes.  See 13.3(48)."
! 
! The Size attribute of an indefinite subtype is not less than the Size
! attribute of any object of that type.
! 
! *
!   "The meaning of Object_Size for indefinite subtypes.  See 13.3(58)."
! 
! The Object_Size attribute of an indefinite subtype is not less than the
! Object_Size attribute of any object of that type.
! 
! *
!   "The default external representation for a type tag.  See 13.3(75)."
  
  The default external representation for a type tag is the fully expanded
  name of the type in upper case letters.
*************** implementation, so no non-default bit or
*** 439,450 ****
  bit ordering corresponds to the natural endianness of the target architecture.
  
  *
!   "The contents of the visible part of package ``System``
!   and its language-defined children.  See 13.7(2)."
  
! See the definition of these packages in files :file:`system.ads` and
! :file:`s-stoele.ads`. Note that two declarations are added to package
! System.
  
  .. code-block:: ada
  
--- 557,566 ----
  bit ordering corresponds to the natural endianness of the target architecture.
  
  *
!   "The contents of the visible part of package ``System``.  See 13.7(2)."
  
! See the definition of package System in :file:`system.ads`.
! Note that two declarations are added to package System.
  
  .. code-block:: ada
  
*************** System.
*** 452,465 ****
    Max_Interrupt_Priority : constant Positive := Interrupt_Priority'Last;
  
  *
!   "The contents of the visible part of package
!   ``System.Machine_Code``, and the meaning of
!   *code_statements*.  See 13.8(7)."
  
  See the definition and documentation in file :file:`s-maccod.ads`.
  
  *
!   "The effect of unchecked conversion.  See 13.9(11)."
  
  Unchecked conversion between types of the same size
  results in an uninterpreted transmission of the bits from one type
--- 568,588 ----
    Max_Interrupt_Priority : constant Positive := Interrupt_Priority'Last;
  
  *
!   "The range of Storage_Elements.Storage_Offset, the modulus of
!   Storage_Elements.Storage_Element, and the declaration of
!   Storage_Elements.Integer_Address.  See 13.7.1(11)."
! 
! See the definition of package System.Storage_Elements in :file:`s-stoele.ads`.
! 
! *
!   "The contents of the visible part of package ``System.Machine_Code``,
!   and the meaning of *code_statements*.  See 13.8(7)."
  
  See the definition and documentation in file :file:`s-maccod.ads`.
  
  *
!   "The result of unchecked conversion for instances with scalar result
!   types whose result is not defined by the language.  See 13.9(11)."
  
  Unchecked conversion between types of the same size
  results in an uninterpreted transmission of the bits from one type
*************** greater than the source alignment, then
*** 476,544 ****
  made with appropriate alignment
  
  *
!   "The semantics of operations on invalid representations.
!   See 13.9.2(10-11)."
! 
! For assignments and other operations where the use of invalid values cannot
! result in erroneous behavior, the compiler ignores the possibility of invalid
! values. An exception is raised at the point where an invalid value would
! result in erroneous behavior. For example executing:
! 
! .. code-block:: ada
! 
!   procedure invalidvals is
!     X : Integer := -1;
!     Y : Natural range 1 .. 10;
!     for Y'Address use X'Address;
!     Z : Natural range 1 .. 10;
!     A : array (Natural range 1 .. 10) of Integer;
!   begin
!     Z := Y;     -- no exception
!     A (Z) := 3; -- exception raised;
!   end;
  
! As indicated, an exception is raised on the array assignment, but not
! on the simple assignment of the invalid negative value from Y to Z.
  
  *
!   "The manner of choosing a storage pool for an access type
!   when ``Storage_Pool`` is not specified for the type.  See 13.11(17)."
  
  There are 3 different standard pools used by the compiler when
  ``Storage_Pool`` is not specified depending whether the type is local
  to a subprogram or defined at the library level and whether
! ``Storage_Size``is specified or not.  See documentation in the runtime
  library units ``System.Pool_Global``, ``System.Pool_Size`` and
  ``System.Pool_Local`` in files :file:`s-poosiz.ads`,
  :file:`s-pooglo.ads` and :file:`s-pooloc.ads` for full details on the
! default pools used.
! 
! *
!   "Whether or not the implementation provides user-accessible
!   names for the standard pool type(s).  See 13.11(17)."
! 
! See documentation in the sources of the run time mentioned in the previous
! paragraph.  All these pools are accessible by means of `with`\ ing
  these units.
  
  *
!   "The meaning of ``Storage_Size``.  See 13.11(18)."
  
  ``Storage_Size`` is measured in storage units, and refers to the
  total space available for an access type collection, or to the primary
  stack space for a task.
  
  *
!   "Implementation-defined aspects of storage pools.  See
!   13.11(22)."
  
! See documentation in the sources of the run time mentioned in the
! paragraph about standard storage pools above
! for details on GNAT-defined aspects of storage pools.
  
  *
!   "The set of restrictions allowed in a pragma
!   ``Restrictions``.  See 13.12(7)."
  
  See :ref:`Standard_and_Implementation_Defined_Restrictions`.
  
--- 599,641 ----
  made with appropriate alignment
  
  *
!   "The result of unchecked conversion for instances with nonscalar result
!   types whose result is not defined by the language.  See 13.9(11)."
  
! See preceding definition for the scalar result case.
  
  *
!   "Whether or not the implementation provides user-accessible
!   names for the standard pool type(s).  See 13.11(17)."
  
  There are 3 different standard pools used by the compiler when
  ``Storage_Pool`` is not specified depending whether the type is local
  to a subprogram or defined at the library level and whether
! ``Storage_Size``is specified or not. See documentation in the runtime
  library units ``System.Pool_Global``, ``System.Pool_Size`` and
  ``System.Pool_Local`` in files :file:`s-poosiz.ads`,
  :file:`s-pooglo.ads` and :file:`s-pooloc.ads` for full details on the
! default pools used.  All these pools are accessible by means of `with`\ ing
  these units.
  
  *
!   "The meaning of ``Storage_Size`` when neither the Storage_Size nor the
!   Storage_Pool is specified for an access type.  See 13.11(18)."
  
  ``Storage_Size`` is measured in storage units, and refers to the
  total space available for an access type collection, or to the primary
  stack space for a task.
  
  *
!   "The effect of specifying aspect Default_Storage_Pool on an instance
!   of a language-defined generic unit.  See 13.11.3(5)."
  
! Instances of language-defined generic units are treated the same as other
! instances with respect to the Default_Storage_Pool aspect.
  
  *
!   "Implementation-defined restrictions allowed in a pragma
!   ``Restrictions``.  See 13.12(8.7)."
  
  See :ref:`Standard_and_Implementation_Defined_Restrictions`.
  
*************** See :ref:`Standard_and_Implementation_De
*** 546,559 ****
    "The consequences of violating limitations on
    ``Restrictions`` pragmas.  See 13.12(9)."
  
! Restrictions that can be checked at compile time result in illegalities
! if violated.  Currently there are no other consequences of violating
! restrictions.
  
  *
!   "The representation used by the ``Read`` and
!   ``Write`` attributes of elementary types in terms of stream
!   elements.  See 13.13.2(9)."
  
  The representation is the in-memory representation of the base type of
  the type, using the number of bits corresponding to the
--- 643,661 ----
    "The consequences of violating limitations on
    ``Restrictions`` pragmas.  See 13.12(9)."
  
! Restrictions that can be checked at compile time are enforced at
! compile time; violations are illegal. For other restrictions, any
! violation during program execution results in erroneous execution.
  
  *
!   "Implementation-defined usage profiles allowed in a pragma Profile.
!   See 13.12(15)."
! 
! See :ref:`Implementation_Defined_Pragmas`.
! 
! *
!   "The contents of the stream elements read and written by the Read and
!   Write attributes of elementary types.  See 13.13.2(9)."
  
  The representation is the in-memory representation of the base type of
  the type, using the number of bits corresponding to the
*************** the type, using the number of bits corre
*** 566,577 ****
  See items describing the integer and floating-point types supported.
  
  *
!   "The string returned by ``Character_Set_Version``.
!   See A.3.5(3)."
  
! ``Ada.Wide_Characters.Handling.Character_Set_Version`` returns
! the string "Unicode 4.0", referring to version 4.0 of the
! Unicode specification.
  
  *
    "The accuracy actually achieved by the elementary
--- 668,696 ----
  See items describing the integer and floating-point types supported.
  
  *
!   "The values returned by Strings.Hash.  See A.4.9(3)."
  
! This hash function has predictable collisions and is subject to
! equivalent substring attacks. It is not suitable for construction of a
! hash table keyed on possibly malicious user input.
! 
! *
!   "The value returned by a call to a Text_Buffer Get procedure if any
!   character in the returned sequence is not defined in Character.
!   See A.4.12(34)."
! 
! The contents of a buffer is represented internally as a UTF_8 string.
! The value return by Text_Buffer.Get is the result of passing that
! UTF_8 string to UTF_Encoding.Strings.Decode.
! 
! *
!   "The value returned by a call to a Text_Buffer Wide_Get procedure if
!   any character in the returned sequence is not defined in Wide_Character.
!   See A.4.12(34)."
! 
! The contents of a buffer is represented internally as a UTF_8 string.
! The value return by Text_Buffer.Wide_Get is the result of passing that
! UTF_8 string to UTF_Encoding.Wide_Strings.Decode.
  
  *
    "The accuracy actually achieved by the elementary
*************** Maximum image width is 6864, see library
*** 601,614 ****
  Maximum image width is 6864, see library file :file:`s-rannum.ads`.
  
  *
-   "The algorithms for random number generation.  See
-   A.5.2(32)."
- 
- The algorithm is the Mersenne Twister, as documented in the source file
- :file:`s-rannum.adb`. This version of the algorithm has a period of
- 2**19937-1.
- 
- *
    "The string representation of a random number generator's
    state.  See A.5.2(38)."
  
--- 720,725 ----
*************** the fixed-width decimal representations
*** 617,648 ****
  of the state vector.
  
  *
-   "The minimum time interval between calls to the
-   time-dependent Reset procedure that are guaranteed to initiate different
-   random number sequences.  See A.5.2(45)."
- 
- The minimum period between reset calls to guarantee distinct series of
- random numbers is one microsecond.
- 
- *
    "The values of the ``Model_Mantissa``,
    ``Model_Emin``, ``Model_Epsilon``, ``Model``,
    ``Safe_First``, and ``Safe_Last`` attributes, if the Numerics
    Annex is not supported.  See A.5.3(72)."
  
! Run the compiler with *-gnatS* to produce a listing of package
! ``Standard``, has the values of all numeric attributes.
! 
! *
!   "Any implementation-defined characteristics of the
!   input-output packages.  See A.7(14)."
! 
! There are no special implementation defined characteristics for these
! packages.
  
  *
!   "The value of ``Buffer_Size`` in ``Storage_IO``.  See
!   A.9(10)."
  
  All type representations are contiguous, and the ``Buffer_Size`` is
  the value of ``type'Size`` rounded up to the next storage unit
--- 728,743 ----
  of the state vector.
  
  *
    "The values of the ``Model_Mantissa``,
    ``Model_Emin``, ``Model_Epsilon``, ``Model``,
    ``Safe_First``, and ``Safe_Last`` attributes, if the Numerics
    Annex is not supported.  See A.5.3(72)."
  
! Running the compiler with *-gnatS* to produce a listing of package
! ``Standard`` displays the values of these attributes.
  
  *
!   "The value of ``Buffer_Size`` in ``Storage_IO``.  See A.9(10)."
  
  All type representations are contiguous, and the ``Buffer_Size`` is
  the value of ``type'Size`` rounded up to the next storage unit
*************** boundary.
*** 653,669 ****
    standard error See A.10(5)."
  
  These files are mapped onto the files provided by the C streams
! libraries.  See source file :file:`i-cstrea.ads` for further details.
  
  *
!   "The accuracy of the value produced by ``Put``.  See
!   A.10.9(36)."
  
  If more digits are requested in the output than are represented by the
  precision of the value, zeroes are output in the corresponding least
  significant digit positions.
  
  *
    "The meaning of ``Argument_Count``, ``Argument``, and
    ``Command_Name``.  See A.15(1)."
  
--- 748,769 ----
    standard error See A.10(5)."
  
  These files are mapped onto the files provided by the C streams
! libraries. See source file :file:`i-cstrea.ads` for further details.
  
  *
!   "The accuracy of the value produced by ``Put``.  See A.10.9(36)."
  
  If more digits are requested in the output than are represented by the
  precision of the value, zeroes are output in the corresponding least
  significant digit positions.
  
  *
+   "Current size for a stream file for which positioning is not supported.
+   See A.12.1(1.1)."
+ 
+ Positioning is supported.
+ 
+ *
    "The meaning of ``Argument_Count``, ``Argument``, and
    ``Command_Name``.  See A.15(1)."
  
*************** These are mapped onto the ``argv`` and `
*** 671,750 ****
  main program in the natural manner.
  
  *
!   "The interpretation of the ``Form`` parameter in procedure
!   ``Create_Directory``.  See A.16(56)."
  
! The ``Form`` parameter is not used.
  
  *
!   "The interpretation of the ``Form`` parameter in procedure
!   ``Create_Path``.  See A.16(60)."
  
! The ``Form`` parameter is not used.
  
  *
!   "The interpretation of the ``Form`` parameter in procedure
!   ``Copy_File``.  See A.16(68)."
  
! The ``Form`` parameter is case-insensitive.
! Two fields are recognized in the ``Form`` parameter::
  
!   *preserve=<value>*
!   *mode=<value>*
  
! <value> starts immediately after the character '=' and ends with the
! character immediately preceding the next comma (',') or with the last
! character of the parameter.
  
! The only possible values for preserve= are:
  
! ================== ===================================================================
! Value              Meaning
! ================== ===================================================================
! *no_attributes*    Do not try to preserve any file attributes. This is the
!                    default if no preserve= is found in Form.
! *all_attributes*   Try to preserve all file attributes (timestamps, access rights).
! *timestamps*       Preserve the timestamp of the copied file, but not the other
!                    file attributes.
! ================== ===================================================================
  
! The only possible values for mode= are:
  
! ============== ===============================================================================
! Value          Meaning
! ============== ===============================================================================
! *copy*         Only do the copy if the destination file does not already exist.
!                If it already exists, Copy_File fails.
! *overwrite*    Copy the file in all cases. Overwrite an already existing destination file.
! *append*       Append the original file to the destination file. If the destination file
!                does not exist, the destination file is a copy of the source file.
!                When mode=append, the field preserve=, if it exists, is not taken into account.
! ============== ===============================================================================
  
! If the Form parameter includes one or both of the fields and the value or
! values are incorrect, Copy_file fails with Use_Error.
  
! Examples of correct Forms::
  
!   Form => "preserve=no_attributes,mode=overwrite" (the default)
!   Form => "mode=append"
!   Form => "mode=copy, preserve=all_attributes"
  
! Examples of incorrect Forms::
  
!   Form => "preserve=junk"
!   Form => "mode=internal, preserve=timestamps"
  
  *
!   "The interpretation of the ``Pattern`` parameter, when not the null string,
!   in the ``Start_Search`` and ``Search`` procedures.
!   See A.16(104) and A.16(112)."
  
! When the ``Pattern`` parameter is not the null string, it is interpreted
! according to the syntax of regular expressions as defined in the
! ``GNAT.Regexp`` package.
  
! See :ref:`GNAT.Regexp_(g-regexp.ads)`.
  
  *
    "Implementation-defined convention names.  See B.1(11)."
--- 771,836 ----
  main program in the natural manner.
  
  *
!   "The interpretation of file names and directory names.  See A.16(46)."
  
! These names are interpreted consistently with the underlying file system.
  
  *
!   "The maxium value for a file size in Directories.  See A.16(87)."
  
! Directories.File_Size'Last is equal to Long_Long_Integer'Last .
  
  *
!   "The result for Directories.Size for a directory or special file.
!    See A.16(93)."
  
! Name_Error is raised.
  
! *
!   "The result for Directories.Modification_Time for a directory or special file.
!    See A.16(93)."
  
! Name_Error is raised.
  
! *
!   "The interpretation of a nonnull search pattern in Directories.
!    See A.16(104)."
  
! When the ``Pattern`` parameter is not the null string, it is interpreted
! according to the syntax of regular expressions as defined in the
! ``GNAT.Regexp`` package.
  
! See :ref:`GNAT.Regexp_(g-regexp.ads)`.
  
! *
!   "The results of a Directories search if the contents of the directory are
!    altered while a search is in progress.  See A.16(110)."
  
! The effect of a call to Get_Next_Entry is determined by the current
! state of the directory.
  
! *
!   "The definition and meaning of an environment variable.  See A.17(1)."
  
! This definition is determined by the underlying operating system.
  
! *
!   "The circumstances where an environment variable cannot be defined.
!   See A.17(16)."
  
!   There are no such implementation-defined circumstances.
  
  *
!   "Environment names for which Set has the effect of Clear.  See A.17(17)."
  
! There are no such names.
  
! *
!   "The value of Containers.Hash_Type'Modulus. The value of
!   Containers.Count_Type'Last.  See A.18.1(7)."
! 
! Containers.Hash_Type'Modulus is 2**32.
! Containers.Count_Type'Last is 2**31 - 1.
  
  *
    "Implementation-defined convention names.  See B.1(11)."
*************** Convention Name         Interpretation
*** 797,805 ****
  Link names are the actual names used by the linker.
  
  *
!   "The manner of choosing link names when neither the link
!   name nor the address of an imported or exported entity is specified.  See
!   B.1(36)."
  
  The default linker name is that which would be assigned by the relevant
  external language, interpreting the Ada name as being in all lower case
--- 883,890 ----
  Link names are the actual names used by the linker.
  
  *
!   "The manner of choosing link names when neither the link name nor the
!   address of an imported or exported entity is specified.  See B.1(36)."
  
  The default linker name is that which would be assigned by the relevant
  external language, interpreting the Ada name as being in all lower case
*************** See files with prefix :file:`i-` in the
*** 836,841 ****
--- 921,932 ----
  See files with prefix :file:`i-` in the distributed library.
  
  *
+   "The definitions of certain types and constants in Interfaces.C.
+   See B.3(41)."
+ 
+ See source file :file:`i-c.ads`.
+ 
+ *
    "The types ``Floating``, ``Long_Floating``,
    ``Binary``, ``Long_Binary``, ``Decimal_ Element``, and
    ``COBOL_Character``; and the initialization of the variables
*************** COBOL                 Ada
*** 856,900 ****
  For initialization, see the file :file:`i-cobol.ads` in the distributed library.
  
  *
!   "Support for access to machine instructions.  See C.1(1)."
  
! See documentation in file :file:`s-maccod.ads` in the distributed library.
  
  *
!   "Implementation-defined aspects of access to machine
!   operations.  See C.1(9)."
  
! See documentation in file :file:`s-maccod.ads` in the distributed library.
  
  *
!   "Implementation-defined aspects of interrupts.  See C.3(2)."
  
! Interrupts are mapped to signals or conditions as appropriate.  See
! definition of unit
! ``Ada.Interrupt_Names`` in source file :file:`a-intnam.ads` for details
! on the interrupts supported on a particular target.
  
  *
!   "Implementation-defined aspects of pre-elaboration.  See
!   C.4(13)."
  
! GNAT does not permit a partition to be restarted without reloading,
! except under control of the debugger.
  
  *
!   "The semantics of pragma ``Discard_Names``.  See C.5(7)."
  
! Pragma ``Discard_Names`` causes names of enumeration literals to
! be suppressed.  In the presence of this pragma, the Image attribute
  provides the image of the Pos of the literal, and Value accepts
  Pos values.
  
! For tagged types, when pragmas ``Discard_Names`` and ``No_Tagged_Streams``
! simultaneously apply, their Expanded_Name and External_Tag are initialized
! with empty strings. This is useful to avoid exposing entity names at binary
  level.
  
  *
    "The result of the ``Task_Identification.Image``
    attribute.  See C.7.1(7)."
  
--- 947,1000 ----
  For initialization, see the file :file:`i-cobol.ads` in the distributed library.
  
  *
!   "The types Fortran_Integer, Real, Double_Precision, and Character_Set
!   in Interfaces.Fortran.  See B.5(17)."
  
! See source file :file:`i-fortra.ads`. These types are derived, respectively,
! from Integer, Float, Long_Float, and Character.
  
  *
!   "Implementation-defined intrinsic subprograms.  See C.1(1)."
  
! See separate section on Intrinsic Subprograms.
  
  *
!   "Any restrictions on a protected procedure or its containing type when an
!   aspect Attach_handler or Interrupt_Handler is specified.  See C.3.1(17)."
  
! There are no such restrictions.
  
  *
!   "Any other forms of interrupt handler supported by the Attach_Handler and
!   Interrupt_Handler aspects.  See C.3.1(19)."
  
! There are no such forms.
  
  *
!   "The semantics of some attributes and functions of an entity for which
!    aspect Discard_Names is True.  See C.5(7)."
  
! If Discard_Names is True for an enumeration type, the Image attribute
  provides the image of the Pos of the literal, and Value accepts
  Pos values.
  
! If both of the aspects``Discard_Names`` and ``No_Tagged_Streams`` are true
! for a tagged type, its Expanded_Name and External_Tag values are
! empty strings. This is useful to avoid exposing entity names at binary
  level.
  
  *
+   "The modulus and size of Test_and_Set_Flag.  See C.6.3(8)."
+ 
+ The modulus is 2**8. The size is 8.
+ 
+ *
+   "The value used to represent the set value for Atomic_Test_and_Set.
+   See C.6.3(10)."
+ 
+ The value is 1.
+ 
+ *
    "The result of the ``Task_Identification.Image``
    attribute.  See C.7.1(7)."
  
*************** Protected entries or interrupt handlers
*** 930,961 ****
  convenient thread, so the value of ``Current_Task`` is undefined.
  
  *
!   "The effect of calling ``Current_Task`` from an entry
!   body or interrupt handler.  See C.7.1(19)."
! 
! When GNAT can determine statically that ``Current_Task`` is called directly in
! the body of an entry (or barrier) then a warning is emitted and ``Program_Error``
! is raised at run time. Otherwise, the effect of calling ``Current_Task`` from an
! entry body or interrupt handler is to return the identification of the task
! currently executing the code.
! 
! *
!   "Implementation-defined aspects of
!   ``Task_Attributes``.  See C.7.2(19)."
! 
! There are no implementation-defined aspects of ``Task_Attributes``.
! 
! *
!   "Values of all ``Metrics``.  See D(2)."
  
! The metrics information for GNAT depends on the performance of the
! underlying operating system.  The sources of the run-time for tasking
! implementation, together with the output from *-gnatG* can be
! used to determine the exact sequence of operating systems calls made
! to implement various tasking constructs.  Together with appropriate
! information on the performance of the underlying operating system,
! on the exact target in use, this information can be used to determine
! the required metrics.
  
  *
    "The declarations of ``Any_Priority`` and
--- 1030,1040 ----
  convenient thread, so the value of ``Current_Task`` is undefined.
  
  *
!   "Granularity of locking for Task_Attributes.  See C.7.2(16)."
  
! No locking is needed if the formal type Attribute has the size and
! alignment of either Integer or System.Address and the bit representation
! of Initial_Value is all zeroes. Otherwise, locking is performed.
  
  *
    "The declarations of ``Any_Priority`` and
*************** and appropriate, these threads correspon
*** 984,1006 ****
  underlying operating system.
  
  *
!   "Implementation-defined *policy_identifiers* allowed
!   in a pragma ``Task_Dispatching_Policy``.  See D.2.2(3)."
! 
! There are no implementation-defined policy-identifiers allowed in this
! pragma.
! 
! *
!   "Implementation-defined aspects of priority inversion.  See
!   D.2.2(16)."
  
! Execution of a task cannot be preempted by the implementation processing
! of delay expirations for lower priority tasks.
  
  *
!   "Implementation-defined task dispatching.  See D.2.2(18)."
  
! The policy is the same as that of the underlying threads implementation.
  
  *
    "Implementation-defined *policy_identifiers* allowed
--- 1063,1076 ----
  underlying operating system.
  
  *
!   "Implementation-defined task dispatching policies.  See D.2.2(3)."
  
! There are no implementation-defined task dispatching policies.
  
  *
!   "The value of Default_Quantum in Dispatching.Round_Robin.  See D.2.5(4)."
  
! The value is 10 milliseconds.
  
  *
    "Implementation-defined *policy_identifiers* allowed
*************** The ceiling priority of internal protect
*** 1036,1047 ****
  There are no implementation-defined queuing policies.
  
  *
!   "On a multiprocessor, any conditions that cause the
!   completion of an aborted construct to be delayed later than what is
!   specified for a single processor.  See D.6(3)."
  
! The semantics for abort on a multi-processor is the same as on a single
! processor, there are no further delays.
  
  *
    "Any operations that implicitly require heap storage
--- 1106,1114 ----
  There are no implementation-defined queuing policies.
  
  *
!   "Implementation-defined admission policies.  See D.4.1(1)."
  
! There are no implementation-defined admission policies.
  
  *
    "Any operations that implicitly require heap storage
*************** The only operation that implicitly requi
*** 1051,1093 ****
  task creation.
  
  *
!   "What happens when a task terminates in the presence of
!   pragma ``No_Task_Termination``. See D.7(15)."
  
  Execution is erroneous in that case.
  
  *
!   "Implementation-defined aspects of pragma
!   ``Restrictions``.  See D.7(20)."
  
! There are no such implementation-defined aspects.
  
  *
!   "Implementation-defined aspects of package
!   ``Real_Time``.  See D.8(17)."
  
! There are no implementation defined aspects of package ``Real_Time``.
  
  *
!   "Implementation-defined aspects of
!   *delay_statements*.  See D.9(8)."
  
! Any difference greater than one microsecond will cause the task to be
! delayed (see D.9(7)).
  
  *
!   "The upper bound on the duration of interrupt blocking
!   caused by the implementation.  See D.12(5)."
  
! The upper bound is determined by the underlying operating system.  In
! no cases is it more than 10 milliseconds.
  
  *
    "The means for creating and executing distributed
    programs.  See E(5)."
  
  The GLADE package provides a utility GNATDIST for creating and executing
! distributed programs.  See the GLADE reference manual for further details.
  
  *
    "Any events that can result in a partition becoming
--- 1118,1192 ----
  task creation.
  
  *
!   "When restriction No_Dynamic_CPU_Assignment applies to a partition, the
!   processor on which a task with a CPU value of a Not_A_Specific_CPU will
!   execute.  See D.7(10)."
! 
! Unknown.
! 
! *
!   "When restriction No_Task_Termination applies to a partition, what happens
!    when a task terminates.  See D.7(15.1)."
  
  Execution is erroneous in that case.
  
  *
!   "The behavior when restriction Max_Storage_At_Blocking is violated.
!    See D.7(17)."
  
! Execution is erroneous in that case.
  
  *
!   "The behavior when restriction Max_Asynchronous_Select_Nesting is violated.
!   See D.7(18)."
  
! Execution is erroneous in that case.
  
  *
!   "The behavior when restriction Max_Tasks is violated.  See D.7(19)."
  
! Execution is erroneous in that case.
! 
! * "Whether the use of pragma Restrictions results in a reduction in program
!    code or data size or execution time.  See D.7(20)."
! 
!    Yes it can, but the precise circumstances and properties of such reductions
!    are difficult to characterize.
  
  *
!   "The value of Barrier_Limit'Last in Synchronous_Barriers.  See D.10.1(4)."
  
! Synchronous_Barriers.Barrier_Limit'Last is Integer'Last .
! 
! *
!   "When an aborted task that is waiting on a Synchronous_Barrier is aborted.
!   See D.10.1(13)."
! 
! Difficult to characterize.
! 
! *
!   "The value of Min_Handler_Ceiling in Execution_Time.Group_Budgets.
!    See D.14.2(7)."
! 
! See source file :file:`a-etgrbu.ads`.
! 
! *
!   "The value of CPU_Range'Last in System.Multiprocessors.  See D.16(4)."
! 
! See source file :file:`s-multip.ads`.
! 
! *
!   "The processor on which the environment task executes in the absence
!   of a value for the aspect CPU.  See D.16(13)."
! 
! Unknown.
  
  *
    "The means for creating and executing distributed
    programs.  See E(5)."
  
  The GLADE package provides a utility GNATDIST for creating and executing
! distributed programs. See the GLADE reference manual for further details.
  
  *
    "Any events that can result in a partition becoming
*************** distributed programs.  See the GLADE ref
*** 1096,1119 ****
  See the GLADE reference manual for full details on such events.
  
  *
!   "The scheduling policies, treatment of priorities, and
!   management of shared resources between partitions in certain cases.  See
!   E.1(11)."
  
  See the GLADE reference manual for full details on these aspects of
  multi-partition execution.
  
  *
-   "Events that cause the version of a compilation unit to
-   change.  See E.3(5)."
- 
- Editing the source file of a compilation unit, or the source files of
- any units on which it is dependent in a significant way cause the version
- to change.  No other actions cause the version number to change.  All changes
- are significant except those which affect only layout, capitalization or
- comments.
- 
- *
    "Whether the execution of the remote subprogram is
    immediately aborted as a result of cancellation.  See E.4(13)."
  
--- 1195,1207 ----
  See the GLADE reference manual for full details on such events.
  
  *
!   "The scheduling policies, treatment of priorities, and management of
!   shared resources between partitions in certain cases.  See E.1(11)."
  
  See the GLADE reference manual for full details on these aspects of
  multi-partition execution.
  
  *
    "Whether the execution of the remote subprogram is
    immediately aborted as a result of cancellation.  See E.4(13)."
  
*************** See the GLADE reference manual for detai
*** 1121,1134 ****
  a distributed application.
  
  *
!   "Implementation-defined aspects of the PCS.  See E.5(25)."
  
! See the GLADE reference manual for a full description of all implementation
! defined aspects of the PCS.
  
  *
!   "Implementation-defined interfaces in the PCS.  See
!   E.5(26)."
  
  See the GLADE reference manual for a full description of all
  implementation defined interfaces.
--- 1209,1220 ----
  a distributed application.
  
  *
!   "The range of type System.RPC.Partition_Id.  See E.5(14)."
  
! System.RPC.Partion_ID'Last is Integer'Last. See source file :file:`s-rpc.ads`.
  
  *
!   "Implementation-defined interfaces in the PCS.  See E.5(26)."
  
  See the GLADE reference manual for a full description of all
  implementation defined interfaces.
*************** properly generated.
*** 1219,1227 ****
  Not relevant, division is IEEE exact.
  
  *
!   "The definition of close result set, which determines the
!   accuracy of certain fixed point multiplications and divisions.  See
!   G.2.3(5)."
  
  Operations in the close result set are performed using IEEE long format
  floating-point arithmetic.  The input operands are converted to
--- 1305,1312 ----
  Not relevant, division is IEEE exact.
  
  *
!   "The definition of close result set, which determines the accuracy of
!   certain fixed point multiplications and divisions.  See G.2.3(5)."
  
  Operations in the close result set are performed using IEEE long format
  floating-point arithmetic.  The input operands are converted to
*************** IEEE infinite and Nan values are produce
*** 1282,1309 ****
  Information on those subjects is not yet available.
  
  *
!   "Information regarding bounded errors and erroneous
!   execution.  See H.2(1)."
! 
! Information on this subject is not yet available.
! 
! *
!   "Implementation-defined aspects of pragma
!   ``Inspection_Point``.  See H.3.2(8)."
  
! Pragma ``Inspection_Point`` ensures that the variable is live and can
! be examined by the debugger at the inspection point.
  
  *
!   "Implementation-defined aspects of pragma
!   ``Restrictions``.  See H.4(25)."
  
! There are no implementation-defined aspects of pragma ``Restrictions``.  The
! use of pragma ``Restrictions [No_Exceptions]`` has no effect on the
! generated code.  Checks must suppressed by use of pragma ``Suppress``.
  
  *
!   "Any restrictions on pragma ``Restrictions``.  See
!   H.4(27)."
  
! There are no restrictions on pragma ``Restrictions``.
--- 1367,1386 ----
  Information on those subjects is not yet available.
  
  *
!   "The accuracy requirements for the subprograms Solve, Inverse,
!    Determinant, Eigenvalues and Eigensystem for type Real_Matrix.
!    See G.3.1(81)."
  
! Information on those subjects is not yet available.
  
  *
!   "The accuracy requirements for the subprograms Solve, Inverse,
!    Determinant, Eigenvalues and Eigensystem for type Complex_Matrix.
!    See G.3.2(149)."
  
! Information on those subjects is not yet available.
  
  *
!   "The consequences of violating No_Hidden_Indirect_Globals.  See H.4(23.9)."
  
! Execution is erroneous in that case.
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst gcc-12.1.0/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst	Fri May  6 07:30:56 2022
*************** Compile_Time_Warning resulted in a fatal
*** 1003,1041 ****
  a warning. You can use :ref:`Compile_Time_Error` to force the generation of
  an error.
  
- Pragma Compiler_Unit
- ====================
- 
- Syntax:
- 
- 
- .. code-block:: ada
- 
-   pragma Compiler_Unit;
- 
- 
- This pragma is obsolete. It is equivalent to Compiler_Unit_Warning. It is
- retained so that old versions of the GNAT run-time that use this pragma can
- be compiled with newer versions of the compiler.
- 
- Pragma Compiler_Unit_Warning
- ============================
- 
- Syntax:
- 
- 
- .. code-block:: ada
- 
-   pragma Compiler_Unit_Warning;
- 
- 
- This pragma is intended only for internal use in the GNAT run-time library.
- It indicates that the unit is used as part of the compiler build. The effect
- is to generate warnings for the use of constructs (for example, conditional
- expressions) that would cause trouble when bootstrapping using an older
- version of GNAT. For the exact list of restrictions, see the compiler sources
- and references to Check_Compiler_Unit.
- 
  Pragma Complete_Representation
  ==============================
  
--- 1003,1008 ----
*************** string or a static string expressions th
*** 2062,2088 ****
  string. In this case, no external name is generated. This form
  still allows the specification of parameter mechanisms.
  
- Pragma Export_Value
- ===================
- 
- Syntax:
- 
- 
- ::
- 
-   pragma Export_Value (
-     [Value     =>] static_integer_EXPRESSION,
-     [Link_Name =>] static_string_EXPRESSION);
- 
- 
- This pragma serves to export a static integer value for external use.
- The first argument specifies the value to be exported. The Link_Name
- argument specifies the symbolic name to be associated with the integer
- value. This pragma is useful for defining a named static value in Ada
- that can be referenced in assembly language units to be linked with
- the application. This pragma is currently supported only for the
- AAMP target and is ignored for other targets.
- 
  Pragma Export_Valued_Procedure
  ==============================
  
--- 2029,2034 ----
*************** extension mode (the use of Off as a para
*** 2210,2216 ****
  of the *-gnatX* command switch).
  
  In extension mode, the latest version of the Ada language is
! implemented (currently Ada 202x), and in addition a small number
  of GNAT specific extensions are recognized as follows:
  
  * Constrained attribute for generic objects
--- 2156,2162 ----
  of the *-gnatX* command switch).
  
  In extension mode, the latest version of the Ada language is
! implemented (currently Ada 2022), and in addition a number
  of GNAT specific extensions are recognized as follows:
  
  * Constrained attribute for generic objects
*************** of GNAT specific extensions are recogniz
*** 2235,2240 ****
--- 2181,2396 ----
    This new aggregate syntax for arrays and containers is provided under -gnatX
    to experiment and confirm this new language syntax.
  
+ * Additional ``when`` constructs
+ 
+   In addition to the ``exit when CONDITION`` control structure, several
+   additional constructs are allowed following this format. Including
+   ``return when CONDITION``, ``goto when CONDITION``, and
+   ``raise [with EXCEPTION_MESSAGE] when CONDITION.``
+ 
+   Some examples:
+ 
+   .. code-block:: ada
+ 
+       return Result when Variable > 10;
+ 
+       raise Program_Error with "Element is null" when Element = null;
+ 
+       goto End_Of_Subprogram when Variable = -1;
+ 
+ * Casing on composite values (aka pattern matching)
+ 
+   The selector for a case statement may be of a composite type, subject to
+   some restrictions (described below). Aggregate syntax is used for choices
+   of such a case statement; however, in cases where a "normal" aggregate would
+   require a discrete value, a discrete subtype may be used instead; box
+   notation can also be used to match all values.
+ 
+   Consider this example:
+ 
+   .. code-block:: ada
+ 
+       type Rec is record
+          F1, F2 : Integer;
+       end record;
+ 
+       procedure Caser_1 (X : Rec) is
+       begin
+          case X is
+             when (F1 => Positive, F2 => Positive) =>
+                Do_This;
+             when (F1 => Natural, F2 => <>) | (F1 => <>, F2 => Natural) =>
+                Do_That;
+             when others =>
+                 Do_The_Other_Thing;
+          end case;
+       end Caser_1;
+ 
+   If Caser_1 is called and both components of X are positive, then
+   Do_This will be called; otherwise, if either component is nonnegative
+   then Do_That will be called; otherwise, Do_The_Other_Thing will be called.
+ 
+   If the set of values that match the choice(s) of an earlier alternative
+   overlaps the corresponding set of a later alternative, then the first
+   set shall be a proper subset of the second (and the later alternative
+   will not be executed if the earlier alternative "matches"). All possible
+   values of the composite type shall be covered. The composite type of the
+   selector shall be an array or record type that is neither limited
+   class-wide.
+ 
+   If a subcomponent's subtype does not meet certain restrictions, then
+   the only value that can be specified for that subcomponent in a case
+   choice expression is a "box" component association (which matches all
+   possible values for the subcomponent). This restriction applies if
+ 
+   - the component subtype is not a record, array, or discrete type; or
+ 
+   - the component subtype is subject to a non-static constraint or
+     has a predicate; or
+ 
+   - the component type is an enumeration type that is subject to an
+     enumeration representation clause; or
+ 
+   - the component type is a multidimensional array type or an
+     array type with a nonstatic index subtype.
+ 
+   Support for casing on arrays (and on records that contain arrays) is
+   currently subject to some restrictions. Non-positional
+   array aggregates are not supported as (or within) case choices. Likewise
+   for array type and subtype names. The current implementation exceeds
+   compile-time capacity limits in some annoyingly common scenarios; the
+   message generated in such cases is usually "Capacity exceeded in compiling
+   case statement with composite selector type".
+ 
+   In addition, pattern bindings are supported. This is a mechanism
+   for binding a name to a component of a matching value for use within
+   an alternative of a case statement. For a component association
+   that occurs within a case choice, the expression may be followed by
+   "is <identifier>". In the special case of a "box" component association,
+   the identifier may instead be provided within the box. Either of these
+   indicates that the given identifer denotes (a constant view of) the matching
+   subcomponent of the case selector. Binding is not yet supported for arrays
+   or subcomponents thereof.
+ 
+   Consider this example (which uses type Rec from the previous example):
+ 
+   .. code-block:: ada
+ 
+       procedure Caser_2 (X : Rec) is
+       begin
+          case X is
+             when (F1 => Positive is Abc, F2 => Positive) =>
+                Do_This (Abc)
+             when (F1 => Natural is N1, F2 => <N2>) |
+                  (F1 => <N2>, F2 => Natural is N1) =>
+                Do_That (Param_1 => N1, Param_2 => N2);
+             when others =>
+                Do_The_Other_Thing;
+          end case;
+       end Caser_2;
+ 
+   This example is the same as the previous one with respect to
+   determining whether Do_This, Do_That, or Do_The_Other_Thing will
+   be called. But for this version, Do_This takes a parameter and Do_That
+   takes two parameters. If Do_This is called, the actual parameter in the
+   call will be X.F1.
+ 
+   If Do_That is called, the situation is more complex because there are two
+   choices for that alternative. If Do_That is called because the first choice
+   matched (i.e., because X.F1 is nonnegative and either X.F1 or X.F2 is zero
+   or negative), then the actual parameters of the call will be (in order)
+   X.F1 and X.F2. If Do_That is called because the second choice matched (and
+   the first one did not), then the actual parameters will be reversed.
+ 
+   Within the choice list for single alternative, each choice must
+   define the same set of bindings and the component subtypes for
+   for a given identifer must all statically match. Currently, the case
+   of a binding for a nondiscrete component is not implemented.
+ 
+ * Fixed lower bounds for array types and subtypes
+ 
+   Unconstrained array types and subtypes can be specified with a lower bound
+   that is fixed to a certain value, by writing an index range that uses the
+   syntax "<lower-bound-expression> .. <>". This guarantees that all objects
+   of the type or subtype will have the specified lower bound.
+ 
+   For example, a matrix type with fixed lower bounds of zero for each
+   dimension can be declared by the following:
+ 
+   .. code-block:: ada
+ 
+       type Matrix is
+         array (Natural range 0 .. <>, Natural range 0 .. <>) of Integer;
+ 
+   Objects of type Matrix declared with an index constraint must have index
+   ranges starting at zero:
+ 
+   .. code-block:: ada
+ 
+       M1 : Matrix (0 .. 9, 0 .. 19);
+       M2 : Matrix (2 .. 11, 3 .. 22);  -- Warning about bounds; will raise CE
+ 
+   Similarly, a subtype of String can be declared that specifies the lower
+   bound of objects of that subtype to be 1:
+ 
+    .. code-block:: ada
+ 
+       subtype String_1 is String (1 .. <>);
+ 
+   If a string slice is passed to a formal of subtype String_1 in a call to
+   a subprogram S, the slice's bounds will "slide" so that the lower bound
+   is 1. Within S, the lower bound of the formal is known to be 1, so, unlike
+   a normal unconstrained String formal, there is no need to worry about
+   accounting for other possible lower-bound values. Sliding of bounds also
+   occurs in other contexts, such as for object declarations with an
+   unconstrained subtype with fixed lower bound, as well as in subtype
+   conversions.
+ 
+   Use of this feature increases safety by simplifying code, and can also
+   improve the efficiency of indexing operations, since the compiler statically
+   knows the lower bound of unconstrained array formals when the formal's
+   subtype has index ranges with static fixed lower bounds.
+ 
+ * Prefixed-view notation for calls to primitive subprograms of untagged types
+ 
+   Since Ada 2005, calls to primitive subprograms of a tagged type that
+   have a "prefixed view" (see RM 4.1.3(9.2)) have been allowed to be
+   written using the form of a selected_component, with the first actual
+   parameter given as the prefix and the name of the subprogram as a
+   selector. This prefixed-view notation for calls is extended so as to
+   also allow such syntax for calls to primitive subprograms of untagged
+   types. The primitives of an untagged type T that have a prefixed view
+   are those where the first formal parameter of the subprogram either
+   is of type T or is an anonymous access parameter whose designated type
+   is T. For a type that has a component that happens to have the same
+   simple name as one of the type's primitive subprograms, where the
+   component is visible at the point of a selected_component using that
+   name, preference is given to the component in a selected_component
+   (as is currently the case for tagged types with such component names).
+ 
+ * Expression defaults for generic formal functions
+ 
+   The declaration of a generic formal function is allowed to specify
+   an expression as a default, using the syntax of an expression function.
+ 
+   Here is an example of this feature:
+ 
+   .. code-block:: ada
+ 
+       generic
+          type T is private;
+          with function Copy (Item : T) return T is (Item); -- Defaults to Item
+       package Stacks is
+ 
+          type Stack is limited private;
+ 
+          procedure Push (S : in out Stack; X : T); -- Calls Copy on X
+ 
+          function Pop (S : in out Stack) return T; -- Calls Copy to return item
+ 
+       private
+          -- ...
+       end Stacks;
  
  .. _Pragma-Extensions_Visible:
  
*************** Syntax:
*** 3114,3126 ****
  
  
  This program unit pragma is supported for parameterless protected procedures
! as described in Annex C of the Ada Reference Manual. On the AAMP target
! the pragma can also be specified for nonprotected parameterless procedures
! that are declared at the library level (which includes procedures
! declared at the top level of a library package). In the case of AAMP,
! when this pragma is applied to a nonprotected procedure, the instruction
! ``IERET`` is generated for returns from the procedure, enabling
! maskable interrupts, in place of the normal return instruction.
  
  Pragma Interrupt_State
  ======================
--- 3270,3276 ----
  
  
  This program unit pragma is supported for parameterless protected procedures
! as described in Annex C of the Ada Reference Manual.
  
  Pragma Interrupt_State
  ======================
*************** aspects, but is prepared to ignore the p
*** 4772,4814 ****
  policy that controls this pragma is ``Post'Class``, not
  ``Post_Class``.
  
- Pragma Rename_Pragma
- ============================
- .. index:: Pragmas, synonyms
- 
- Syntax:
- 
- 
- ::
- 
-   pragma Rename_Pragma (
-            [New_Name =>] IDENTIFIER,
-            [Renamed  =>] pragma_IDENTIFIER);
- 
- This pragma provides a mechanism for supplying new names for existing
- pragmas. The ``New_Name`` identifier can subsequently be used as a synonym for
- the Renamed pragma. For example, suppose you have code that was originally
- developed on a compiler that supports Inline_Only as an implementation defined
- pragma. And suppose the semantics of pragma Inline_Only are identical to (or at
- least very similar to) the GNAT implementation defined pragma
- Inline_Always. You could globally replace Inline_Only with Inline_Always.
- 
- However, to avoid that source modification, you could instead add a
- configuration pragma:
- 
- .. code-block:: ada
- 
-   pragma Rename_Pragma (
-            New_Name => Inline_Only,
-            Renamed  => Inline_Always);
- 
- 
- Then GNAT will treat "pragma Inline_Only ..." as if you had written
- "pragma Inline_Always ...".
- 
- Pragma Inline_Only will not necessarily mean the same thing as the other Ada
- compiler; it's up to you to make sure the semantics are close enough.
- 
  Pragma Pre
  ==========
  .. index:: Pre
--- 4922,4927 ----
*************** In the generic unit, the formal type is
*** 5593,5598 ****
--- 5706,5748 ----
  pertaining to remote access to class-wide types. At instantiation, the
  actual type must be a remote access to class-wide type.
  
+ Pragma Rename_Pragma
+ ============================
+ .. index:: Pragmas, synonyms
+ 
+ Syntax:
+ 
+ 
+ ::
+ 
+   pragma Rename_Pragma (
+            [New_Name =>] IDENTIFIER,
+            [Renamed  =>] pragma_IDENTIFIER);
+ 
+ This pragma provides a mechanism for supplying new names for existing
+ pragmas. The ``New_Name`` identifier can subsequently be used as a synonym for
+ the Renamed pragma. For example, suppose you have code that was originally
+ developed on a compiler that supports Inline_Only as an implementation defined
+ pragma. And suppose the semantics of pragma Inline_Only are identical to (or at
+ least very similar to) the GNAT implementation defined pragma
+ Inline_Always. You could globally replace Inline_Only with Inline_Always.
+ 
+ However, to avoid that source modification, you could instead add a
+ configuration pragma:
+ 
+ .. code-block:: ada
+ 
+   pragma Rename_Pragma (
+            New_Name => Inline_Only,
+            Renamed  => Inline_Always);
+ 
+ 
+ Then GNAT will treat "pragma Inline_Only ..." as if you had written
+ "pragma Inline_Always ...".
+ 
+ Pragma Inline_Only will not necessarily mean the same thing as the other Ada
+ compiler; it's up to you to make sure the semantics are close enough.
+ 
  Pragma Restricted_Run_Time
  ==========================
  
*************** For a detailed description of the strict
*** 6914,6945 ****
  situations in which it must be suppressed, see the section on
  ``Optimization and Strict Aliasing`` in the :title:`GNAT User's Guide`.
  
- .. _Pragma-Universal_Data:
- 
- Pragma Universal_Data
- =====================
- 
- Syntax:
- 
- 
- ::
- 
-   pragma Universal_Data [(library_unit_Name)];
- 
- 
- This pragma is supported only for the AAMP target and is ignored for
- other targets. The pragma specifies that all library-level objects
- (Counter 0 data) associated with the library unit are to be accessed
- and updated using universal addressing (24-bit addresses for AAMP5)
- rather than the default of 16-bit Data Environment (DENV) addressing.
- Use of this pragma will generally result in less efficient code for
- references to global data associated with the library unit, but
- allows such data to be located anywhere in memory. This pragma is
- a library unit pragma, but can also be used as a configuration pragma
- (including use in the :file:`gnat.adc` file). The functionality
- of this pragma is also available by applying the -univ switch on the
- compilations of units where universal addressing of the data is desired.
- 
  .. _Pragma-Unmodified:
  
  Pragma Unmodified
--- 7064,7069 ----
*************** or not to be given individually for each
*** 7013,7019 ****
  
  The left hand side of an assignment does not count as a reference for the
  purpose of this pragma. Thus it is fine to assign to an entity for which
! pragma Unreferenced is given.
  
  Note that if a warning is desired for all calls to a given subprogram,
  regardless of whether they occur in the same unit as the subprogram
--- 7137,7145 ----
  
  The left hand side of an assignment does not count as a reference for the
  purpose of this pragma. Thus it is fine to assign to an entity for which
! pragma Unreferenced is given. However, use of an entity as an actual for
! an out parameter does count as a reference unless warnings for unread output
! parameters are enabled via :switch:`-gnatw.o`.
  
  Note that if a warning is desired for all calls to a given subprogram,
  regardless of whether they occur in the same unit as the subprogram
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm/implementation_of_specific_ada_features.rst gcc-12.1.0/gcc/ada/doc/gnat_rm/implementation_of_specific_ada_features.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm/implementation_of_specific_ada_features.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_rm/implementation_of_specific_ada_features.rst	Fri May  6 07:30:56 2022
*************** aliasing all views of the object (which
*** 672,677 ****
--- 672,697 ----
  say) must be consistent, so it is imperative that the object, once created,
  remain invariant.
  
+ .. _Image_Values_For_Nonscalar_Types:
+ 
+ Image Values For Nonscalar Types
+ ================================
+ 
+ Ada 2022 defines the Image, Wide_Image, and Wide_Wide image attributes
+ for nonscalar types; earlier Ada versions defined these attributes only
+ for scalar types. Ada RM 4.10 provides some general guidance regarding
+ the default implementation of these attributes and the GNAT compiler
+ follows that guidance. However, beyond that the precise details of the
+ image text generated in these cases are deliberately not documented and are
+ subject to change. In particular, users should not rely on formatting details
+ (such as spaces or line breaking), record field order, image values for access
+ types, image values for types that have ancestor or subcomponent types
+ declared in non-Ada2022 code, image values for predefined types, or the
+ compiler's choices regarding the implementation permissions described in
+ Ada RM 4.10. This list is not intended to be exhaustive. If more precise
+ control of image text is required for some type T, then T'Put_Image should be
+ explicitly specified.
+ 
  .. _Strict_Conformance_to_the_Ada_Reference_Manual:
  
  Strict Conformance to the Ada Reference Manual
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm/intrinsic_subprograms.rst gcc-12.1.0/gcc/ada/doc/gnat_rm/intrinsic_subprograms.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm/intrinsic_subprograms.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_rm/intrinsic_subprograms.rst	Fri May  6 07:30:56 2022
*************** type (signed or modular), as in this exa
*** 203,209 ****
  
       function Shift_Left
         (Value  : T;
!         Amount : Natural) return T;
  
  
  The function name must be one of
--- 203,210 ----
  
       function Shift_Left
         (Value  : T;
!         Amount : Natural) return T
!      with Import, Convention => Intrinsic;
  
  
  The function name must be one of
*************** The result type must be the same as the
*** 215,225 ****
  The shift amount must be Natural.
  The formal parameter names can be anything.
  
! A more convenient way of providing these shift operators is to use
! the Provide_Shift_Operators pragma, which provides the function declarations
! and corresponding pragma Import's for all five shift functions. Note that in
! using these provided shift operations, shifts performed on negative numbers
! will result in modification of the sign bit.
  
  .. _Source_Location:
  
--- 216,227 ----
  The shift amount must be Natural.
  The formal parameter names can be anything.
  
! A more convenient way of providing these shift operators is to use the
! Provide_Shift_Operators pragma, which provides the function declarations and
! corresponding pragma Import's for all five shift functions. For signed types
! the semantics of these operators is to interpret the bitwise result of the
! corresponding operator for modular type. In particular, shifting a negative
! number may change its sign bit to positive.
  
  .. _Source_Location:
  
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst gcc-12.1.0/gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst	Fri May  6 07:30:56 2022
*************** of the use of this pragma. This may caus
*** 1738,1744 ****
  unintended clobbering effect. The compiler avoids this for scalar
  types, but not for composite objects (where in general the effect
  of ``Initialize_Scalars`` is part of the initialization routine
! for the composite object:
  
  ::
  
--- 1738,1744 ----
  unintended clobbering effect. The compiler avoids this for scalar
  types, but not for composite objects (where in general the effect
  of ``Initialize_Scalars`` is part of the initialization routine
! for the composite object):
  
  ::
  
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm/security_hardening_features.rst gcc-12.1.0/gcc/ada/doc/gnat_rm/security_hardening_features.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm/security_hardening_features.rst	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/doc/gnat_rm/security_hardening_features.rst	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,162 ----
+ .. _Security_Hardening_Features:
+ 
+ ***************************
+ Security Hardening Features
+ ***************************
+ 
+ This chapter describes Ada extensions aimed at security hardening that
+ are provided by GNAT.
+ 
+ .. Register Scrubbing:
+ 
+ Register Scrubbing
+ ==================
+ 
+ GNAT can generate code to zero-out hardware registers before returning
+ from a subprogram.
+ 
+ It can be enabled with the *-fzero-call-used-regs* command line
+ option, to affect all subprograms in a compilation, and with a
+ :samp:`Machine_Attribute` pragma, to affect only specific subprograms.
+ 
+ .. code-block:: ada
+ 
+      procedure Foo;
+      pragma Machine_Attribute (Foo, "zero_call_used_regs", "used");
+      --  Before returning, Foo scrubs only call-clobbered registers
+      --  that it uses itself.
+ 
+      function Bar return Integer;
+      pragma Machine_Attribute (Bar, "zero_call_used_regs", "all");
+      --  Before returning, Bar scrubs all call-clobbered registers.
+ 
+ 
+ For usage and more details on the command line option, and on the
+ ``zero_call_used_regs`` attribute, see :title:`Using the GNU Compiler
+ Collection (GCC)`.
+ 
+ 
+ .. Stack Scrubbing:
+ 
+ Stack Scrubbing
+ ===============
+ 
+ GNAT can generate code to zero-out stack frames used by subprograms.
+ 
+ It can be activated with the :samp:`Machine_Attribute` pragma, on
+ specific subprograms and variables.
+ 
+ .. code-block:: ada
+ 
+      function Foo returns Integer;
+      pragma Machine_Attribute (Foo, "strub");
+      --  Foo and its callers are modified so as to scrub the stack
+      --  space used by Foo after it returns.
+ 
+      procedure Bar;
+      pragma Machine_Attribute (Bar, "strub", "internal");
+      --  Bar is turned into a wrapper for its original body,
+      --  and they scrub the stack used by the original body.
+ 
+      Var : Integer;
+      pragma Machine_Attribute (Var, "strub");
+      --  Reading from Var in a subprogram enables stack scrubbing
+      --  of the stack space used by the subprogram.
+ 
+ 
+ There are also *-fstrub* command line options to control default
+ settings.  For usage and more details on the command line option, and
+ on the ``strub`` attribute, see :title:`Using the GNU Compiler
+ Collection (GCC)`.
+ 
+ Note that Ada secondary stacks are not scrubbed.  The restriction
+ ``No_Secondary_Stack`` avoids their use, and thus their accidental
+ preservation of data that should be scrubbed.
+ 
+ Attributes ``Access`` and ``Unconstrained_Access`` of variables and
+ constants with ``strub`` enabled require types with ``strub`` enabled;
+ there is no way to express an access-to-strub type otherwise.
+ ``Unchecked_Access`` bypasses this constraint, but the resulting
+ access type designates a non-strub type.
+ 
+ .. code-block:: ada
+ 
+      VI : Integer;
+      XsVI : access Integer := VI'Access; -- Error.
+      UXsVI : access Integer := VI'Unchecked_Access; -- OK,
+      -- UXsVI.all does not enable strub in the enclosing subprogram.
+ 
+      type Strub_Int is new Integer;
+      pragma Machine_Attribute (Strub_Int, "strub");
+      VSI : Strub_Int;
+      XsVSI : access Strub_Int := VSI'Access; -- OK.
+      -- XsVSI.all enables strub in the enclosing subprogram.
+ 
+ 
+ Every access-to-subprogram type, renaming, and overriding and
+ overridden dispatching operations that may refer to a subprogram with
+ an attribute-modified interface must be annotated with the same
+ interface-modifying attribute.  Access-to-subprogram types can be
+ explicitly converted to different strub modes, as long as they are
+ interface-compatible (i.e., adding or removing ``at-calls`` is not
+ allowed).  For example, a ``strub``-``disabled`` subprogram can be
+ turned ``callable`` through such an explicit conversion:
+ 
+ .. code-block:: ada
+ 
+      type TBar is access procedure;
+ 
+      type TBar_Callable is access procedure;
+      pragma Machine_Attribute (TBar_Callable, "strub", "callable");
+ 
+      Bar_Callable_Ptr : constant TBar_Callable
+ 		:= TBar_Callable (TBar'(Bar'Access));
+ 
+      procedure Bar_Callable renames Bar_Callable_Ptr.all;
+      pragma Machine_Attribute (Bar_Callable, "strub", "callable");
+ 
+ Note that the renaming declaration is expanded to a full subprogram
+ body, it won't be just an alias.  Only if it is inlined will it be as
+ efficient as a call by dereferencing the access-to-subprogram constant
+ Bar_Callable_Ptr.
+ 
+ 
+ .. Hardened Conditionals:
+ 
+ Hardened Conditionals
+ =====================
+ 
+ GNAT can harden conditionals to protect against control flow attacks.
+ 
+ This is accomplished by two complementary transformations, each
+ activated by a separate command-line option.
+ 
+ The option *-fharden-compares* enables hardening of compares that
+ compute results stored in variables, adding verification that the
+ reversed compare yields the opposite result.
+ 
+ The option *-fharden-conditional-branches* enables hardening of
+ compares that guard conditional branches, adding verification of the
+ reversed compare to both execution paths.
+ 
+ These transformations are introduced late in the compilation pipeline,
+ long after boolean expressions are decomposed into separate compares,
+ each one turned into either a conditional branch or a compare whose
+ result is stored in a boolean variable or temporary.  Compiler
+ optimizations, if enabled, may also turn conditional branches into
+ stored compares, and vice-versa, or into operations with implied
+ conditionals (e.g. MIN and MAX).  Conditionals may also be optimized
+ out entirely, if their value can be determined at compile time, and
+ occasionally multiple compares can be combined into one.
+ 
+ It is thus difficult to predict which of these two options will affect
+ a specific compare operation expressed in source code.  Using both
+ options ensures that every compare that is neither optimized out nor
+ optimized into implied conditionals will be hardened.
+ 
+ The addition of reversed compares can be observed by enabling the dump
+ files of the corresponding passes, through command line options
+ *-fdump-tree-hardcmp* and *-fdump-tree-hardcbr*, respectively.
+ 
+ They are separate options, however, because of the significantly
+ different performance impact of the hardening transformations.
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm/standard_and_implementation_defined_restrictions.rst gcc-12.1.0/gcc/ada/doc/gnat_rm/standard_and_implementation_defined_restrictions.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm/standard_and_implementation_defined_restrictions.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_rm/standard_and_implementation_defined_restrictions.rst	Fri May  6 07:30:56 2022
*************** The following example indicates construc
*** 239,245 ****
    with Pkg; use Pkg;
    procedure Example is
      procedure Test (O : T'Class) is
!       N : Natural  := O'Size;--  Error: Dispatching call
        C : T'Class := O;      --  Error: implicit Dispatching Call
      begin
        if O in DT'Class then  --  OK   : Membership test
--- 239,245 ----
    with Pkg; use Pkg;
    procedure Example is
      procedure Test (O : T'Class) is
!       N : Natural := O'Size; --  Error: Dispatching call
        C : T'Class := O;      --  Error: implicit Dispatching Call
      begin
        if O in DT'Class then  --  OK   : Membership test
*************** To take maximum advantage of this space-
*** 656,661 ****
--- 656,673 ----
  unit declaring a tagged type should be compiled with the restriction,
  though this is not required.
  
+ No_Tagged_Type_Registration
+ ---------------------------
+ .. index:: No_Tagged_Type_Registration
+ 
+ [GNAT] If this restriction is active, then class-wide streaming
+ attributes are not supported. In addition, the subprograms in
+ Ada.Tags are not supported.
+ If this restriction is active, the generated code is simplified by
+ omitting the otherwise-required global registration of tagged types when they
+ are declared. This restriction may be necessary in order to also apply
+ the No_Elaboration_Code restriction.
+ 
  No_Task_Allocators
  ------------------
  .. index:: No_Task_Allocators
*************** used, the compiler is allowed to suppres
*** 870,875 ****
--- 882,925 ----
  associated with the unit. This counter is typically used to check for access
  before elaboration and to control multiple elaboration attempts.
  
+ No_Dynamic_Accessibility_Checks
+ -------------------------------
+ .. index:: No_Dynamic_Accessibility_Checks
+ 
+ [GNAT] No dynamic accessibility checks are generated when this restriction is
+ in effect. Instead, dangling references are prevented via more conservative
+ compile-time checking. More specifically, existing compile-time checks are
+ enforced but with more conservative assumptions about the accessibility levels
+ of the relevant entities. These conservative assumptions eliminate the need for
+ dynamic accessibility checks.
+ 
+ These new rules for computing (at compile-time) the accessibility level of an
+ anonymous access type T are as follows:
+ 
+ *
+  If T is a function result type then, from the caller's perspective, its level
+  is that of the innermost master enclosing the function call. From the callee's
+  perspective, the level of parameters and local variables of the callee is
+  statically deeper than the level of T.
+ 
+  For any other accessibility level L such that the level of parameters and local
+  variables of the callee is statically deeper than L, the level of T (from the
+  callee's perspective) is also statically deeper than L.
+ *
+  If T is the type of a formal parameter then, from the caller's perspective,
+  its level is at least as deep as that of the type of the corresponding actual
+  parameter (whatever that actual parameter might be). From the callee's
+  perspective, the level of parameters and local variables of the callee is
+  statically deeper than the level of T.
+ *
+  If T is the type of a discriminant then its level is that of the discriminated
+  type.
+ *
+  If T is the type of a stand-alone object then its level is the level of the
+  object.
+ *
+  In all other cases, the level of T is as defined by the existing rules of Ada.
+ 
  No_Dynamic_Sized_Objects
  ------------------------
  .. index:: No_Dynamic_Sized_Objects
*************** follows::
*** 1011,1014 ****
  or equivalently::
  
    gnatprove -P project.gpr --mode=check_all
- 
--- 1061,1063 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm/the_gnat_library.rst gcc-12.1.0/gcc/ada/doc/gnat_rm/the_gnat_library.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm/the_gnat_library.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_rm/the_gnat_library.rst	Fri May  6 07:30:56 2022
*************** This package provides the declaration of
*** 2163,2169 ****
  together with efficient routines (using hardware
  synchronization primitives) for incrementing, decrementing,
  and testing of these counters. This package is implemented
! on most targets, including all Alpha, ia64, PowerPC, SPARC V9,
  x86, and x86_64 platforms.
  
  .. _`System.Memory_(s-memory.ads)`:
--- 2163,2169 ----
  together with efficient routines (using hardware
  synchronization primitives) for incrementing, decrementing,
  and testing of these counters. This package is implemented
! on most targets, including all Alpha, AARCH64, ARM, ia64, PowerPC, SPARC V9,
  x86, and x86_64 platforms.
  
  .. _`System.Memory_(s-memory.ads)`:
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_rm.rst gcc-12.1.0/gcc/ada/doc/gnat_rm.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_rm.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_rm.rst	Fri May  6 07:30:56 2022
*************** GNAT Reference Manual
*** 55,60 ****
--- 55,61 ----
     gnat_rm/specialized_needs_annexes
     gnat_rm/implementation_of_specific_ada_features
     gnat_rm/implementation_of_ada_2012_features
+    gnat_rm/security_hardening_features
     gnat_rm/obsolescent_features
     gnat_rm/compatibility_and_porting_guide
  
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst gcc-12.1.0/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst	Fri May  6 07:30:56 2022
*************** Alphabetical List of All Switches
*** 1233,1238 ****
--- 1233,1245 ----
    marker is specified, the callgraph is decorated with information about
    dynamically allocated objects.
  
+ .. index:: -fdiagnostics-format   (gcc)
+ 
+ :switch:`-fdiagnostics-format=json`
+   Makes GNAT emit warning and error messages as JSON. Inhibits printing of
+   text warning and errors messages except if :switch:`-gnatv` or
+   :switch:`-gnatl` are present.
+ 
  
  .. index:: -fdump-scos  (gcc)
  
*************** Alphabetical List of All Switches
*** 1380,1385 ****
--- 1387,1398 ----
    Allow full Ada 2012 features (same as :switch:`-gnat12`)
  
  
+ .. index:: -gnat2022  (gcc)
+ 
+ :switch:`-gnat2022`
+   Allow full Ada 2022 features
+ 
+ 
  :switch:`-gnat83`
    Enforce Ada 83 restrictions.
  
*************** Alphabetical List of All Switches
*** 1463,1471 ****
  
  :switch:`-gnatd`
    Specify debug options for the compiler. The string of characters after
!   the :switch:`-gnatd` specify the specific debug options. The possible
!   characters are 0-9, a-z, A-Z, optionally preceded by a dot. See
!   compiler source file :file:`debug.adb` for details of the implemented
    debug options. Certain debug options are relevant to applications
    programmers, and these are documented at appropriate points in this
    users guide.
--- 1476,1484 ----
  
  :switch:`-gnatd`
    Specify debug options for the compiler. The string of characters after
!   the :switch:`-gnatd` specifies the specific debug options. The possible
!   characters are 0-9, a-z, A-Z, optionally preceded by a dot or underscore.
!   See compiler source file :file:`debug.adb` for details of the implemented
    debug options. Certain debug options are relevant to applications
    programmers, and these are documented at appropriate points in this
    users guide.
*************** Alphabetical List of All Switches
*** 1484,1492 ****
  
  :switch:`-gnateA`
    Check that the actual parameters of a subprogram call are not aliases of one
!   another. To qualify as aliasing, the actuals must denote objects of a composite
!   type, their memory locations must be identical or overlapping, and at least one
!   of the corresponding formal parameters must be of mode OUT or IN OUT.
  
  
    .. code-block:: ada
--- 1497,1506 ----
  
  :switch:`-gnateA`
    Check that the actual parameters of a subprogram call are not aliases of one
!   another. To qualify as aliasing, their memory locations must be identical or
!   overlapping, at least one of the corresponding formal parameters must be of
!   mode OUT or IN OUT, and at least one of the corresponding formal parameters
!   must have its parameter passing mechanism not specified.
  
  
    .. code-block:: ada
*************** Alphabetical List of All Switches
*** 1735,1742 ****
    in bits.`
  
    ``Max_Unaligned_Field`` is the maximum size for unaligned bit field, which is
!   64 for the majority of GCC targets (but can be different on some targets like
!   AAMP).
  
    ``Strict_Alignment`` is the equivalent of GCC macro ``STRICT_ALIGNMENT``
    documented as follows: `Define this macro to be the value 1 if instructions
--- 1749,1755 ----
    in bits.`
  
    ``Max_Unaligned_Field`` is the maximum size for unaligned bit field, which is
!   64 for the majority of GCC targets (but can be different on some targets).
  
    ``Strict_Alignment`` is the equivalent of GCC macro ``STRICT_ALIGNMENT``
    documented as follows: `Define this macro to be the value 1 if instructions
*************** Alphabetical List of All Switches
*** 1775,1782 ****
    where ``name`` is the string name of the type (which can have
    single spaces embedded in the name (e.g. long double), ``digs`` is
    the number of digits for the floating-point type, ``float_rep`` is
!   the float representation (I/V/A for IEEE-754-Binary, Vax_Native,
!   AAMP), ``size`` is the size in bits, ``alignment`` is the
    alignment in bits. The name is followed by at least two blanks, fields
    are separated by at least one blank, and a LF character immediately
    follows the alignment field.
--- 1788,1796 ----
    where ``name`` is the string name of the type (which can have
    single spaces embedded in the name (e.g. long double), ``digs`` is
    the number of digits for the floating-point type, ``float_rep`` is
!   the float representation (I for IEEE-754-Binary, which is
!   the only one supported at this time),
!   ``size`` is the size in bits, ``alignment`` is the
    alignment in bits. The name is followed by at least two blanks, fields
    are separated by at least one blank, and a LF character immediately
    follows the alignment field.
*************** Alphabetical List of All Switches
*** 1896,1902 ****
  .. index:: -gnati  (gcc)
  
  :switch:`-gnati{c}`
!   Identifier character set (``c`` = 1/2/3/4/8/9/p/f/n/w).
    For details of the possible selections for ``c``,
    see :ref:`Character_Set_Control`.
  
--- 1910,1916 ----
  .. index:: -gnati  (gcc)
  
  :switch:`-gnati{c}`
!   Identifier character set (``c`` = 1/2/3/4/5/9/p/8/f/n/w).
    For details of the possible selections for ``c``,
    see :ref:`Character_Set_Control`.
  
*************** Alphabetical List of All Switches
*** 1997,2004 ****
    by the front end and will be visible in the
    :switch:`-gnatG` output.
  
!   When using a gcc-based back end (in practice this means using any version
!   of GNAT other than the JGNAT, .NET or GNAAMP versions), then the use of
    :switch:`-gnatN` is deprecated, and the use of :switch:`-gnatn` is preferred.
    Historically front end inlining was more extensive than the gcc back end
    inlining, but that is no longer the case.
--- 2011,2017 ----
    by the front end and will be visible in the
    :switch:`-gnatG` output.
  
!   When using a gcc-based back end, then the use of
    :switch:`-gnatN` is deprecated, and the use of :switch:`-gnatn` is preferred.
    Historically front end inlining was more extensive than the gcc back end
    inlining, but that is no longer the case.
*************** of the pragma in the :title:`GNAT_Refere
*** 3247,3253 ****
  :switch:`-gnatw.I`
    *Disable warnings on overlapping actuals.*
  
!   This switch disables warnings on overlapping actuals in a call..
  
  
  .. index:: -gnatwj  (gcc)
--- 3260,3266 ----
  :switch:`-gnatw.I`
    *Disable warnings on overlapping actuals.*
  
!   This switch disables warnings on overlapping actuals in a call.
  
  
  .. index:: -gnatwj  (gcc)
*************** of the pragma in the :title:`GNAT_Refere
*** 3424,3430 ****
    with no size clause. The guess in both cases is that 2**x was intended
    rather than x. In addition expressions of the form 2*x for small x
    generate a warning (the almost certainly accurate guess being that
!   2**x was intended). The default is that these warnings are given.
  
  
  .. index:: -gnatw.M  (gcc)
--- 3437,3446 ----
    with no size clause. The guess in both cases is that 2**x was intended
    rather than x. In addition expressions of the form 2*x for small x
    generate a warning (the almost certainly accurate guess being that
!   2**x was intended). This switch also activates warnings for negative
!   literal values of a modular type, which are interpreted as large positive
!   integers after wrap-around. The default is that these warnings are given.
! 
  
  
  .. index:: -gnatw.M  (gcc)
*************** of the pragma in the :title:`GNAT_Refere
*** 3566,3571 ****
--- 3582,3606 ----
    ordering.
  
  
+ .. index:: -gnatw_p  (gcc)
+ 
+ :switch:`-gnatw_p`
+   *Activate warnings for pedantic checks.*
+ 
+   This switch activates warnings for the failure of certain pedantic checks.
+   The only case currently supported is a check that the subtype_marks given
+   for corresponding formal parameter and function results in a subprogram
+   declaration and its body denote the same subtype declaration. The default
+   is that such warnings are not given.
+ 
+ .. index:: -gnatw_P  (gcc)
+ 
+ :switch:`-gnatw_P`
+   *Suppress warnings for pedantic checks.*
+ 
+   This switch suppresses warnings on violations of pedantic checks.
+ 
+ 
  .. index:: -gnatwq  (gcc)
  .. index:: Parentheses, warnings
  
*************** of the pragma in the :title:`GNAT_Refere
*** 3668,3673 ****
--- 3703,3710 ----
    * Comparison of an object or (unary or binary) operation of boolean type to
      an explicit True value.
  
+   * Import of parent package.
+ 
    The default is that warnings for redundant constructs are not given.
  
  
*************** of the pragma in the :title:`GNAT_Refere
*** 4142,4157 ****
    This switch enables most warnings from the GCC back end.
    The code generator detects a number of warning situations that are missed
    by the GNAT front end, and this switch can be used to activate them.
!   The use of this switch also sets the default front end warning mode to
!   :switch:`-gnatwa`, that is, most front end warnings activated as well.
  
  
  .. index:: -w (gcc)
  
  :switch:`-w`
    Conversely, this switch suppresses warnings from the GCC back end.
!   The use of this switch also sets the default front end warning mode to
!   :switch:`-gnatws`, that is, front end warnings suppressed as well.
  
  
  .. index:: -Werror (gcc)
--- 4179,4194 ----
    This switch enables most warnings from the GCC back end.
    The code generator detects a number of warning situations that are missed
    by the GNAT front end, and this switch can be used to activate them.
!   The use of this switch also sets the default front-end warning mode to
!   :switch:`-gnatwa`, that is, most front-end warnings are activated as well.
  
  
  .. index:: -w (gcc)
  
  :switch:`-w`
    Conversely, this switch suppresses warnings from the GCC back end.
!   The use of this switch also sets the default front-end warning mode to
!   :switch:`-gnatws`, that is, front-end warnings are suppressed as well.
  
  
  .. index:: -Werror (gcc)
*************** of the pragma in the :title:`GNAT_Refere
*** 4160,4165 ****
--- 4197,4205 ----
    This switch causes warnings from the GCC back end to be treated as
    errors.  The warning string still appears, but the warning messages are
    counted as errors, and prevent the generation of an object file.
+   The use of this switch also sets the default front-end warning mode to
+   :switch:`-gnatwe`, that is, front-end warning messages and style check
+   messages are treated as errors as well.
  
  
  A string of warning parameters can be used in the same parameter. For example::
*************** checks to be performed. The following ch
*** 4620,4627 ****
    in the string after :switch:`-gnaty`
    then proper indentation is checked, with the digit indicating the
    indentation level required. A value of zero turns off this style check.
!   The general style of required indentation is as specified by
!   the examples in the Ada Reference Manual. Full line comments must be
    aligned with the ``--`` starting on a column that is a multiple of
    the alignment level, or they may be aligned the same way as the following
    non-blank line (this is useful when full line comments appear in the middle
--- 4660,4677 ----
    in the string after :switch:`-gnaty`
    then proper indentation is checked, with the digit indicating the
    indentation level required. A value of zero turns off this style check.
!   The rule checks that the following constructs start on a column that is
!   a multiple of the alignment level:
! 
!   * beginnings of declarations (except record component declarations)
!     and statements;
! 
!   * beginnings of the structural components of compound statements;
! 
!   * ``end`` keyword that completes the declaration of a program unit declaration
!     or body or that completes a compound statement.
! 
!   Full line comments must be
    aligned with the ``--`` starting on a column that is a multiple of
    the alignment level, or they may be aligned the same way as the following
    non-blank line (this is useful when full line comments appear in the middle
*************** indicate Ada 83 compatibility mode.
*** 5499,5513 ****
    for further information).
  
  
  .. index:: -gnatX  (gcc)
  .. index:: Ada language extensions
  .. index:: GNAT extensions
  
  :switch:`-gnatX` (Enable GNAT Extensions)
    This switch directs the compiler to implement the latest version of the
!   language (currently Ada 2012) and also to enable certain GNAT implementation
    extensions that are not part of any Ada standard. For a full list of these
!   extensions, see the GNAT reference manual.
  
  
  .. _Character_Set_Control:
--- 5549,5571 ----
    for further information).
  
  
+ .. index:: -gnat2022  (gcc)
+ .. index:: Ada 2022 mode
+ 
+ :switch:`-gnat2022` (Ada 2022 mode)
+   This switch directs the compiler to implement the Ada 2022 version of the
+   language.
+ 
+ 
  .. index:: -gnatX  (gcc)
  .. index:: Ada language extensions
  .. index:: GNAT extensions
  
  :switch:`-gnatX` (Enable GNAT Extensions)
    This switch directs the compiler to implement the latest version of the
!   language (currently Ada 2022) and also to enable certain GNAT implementation
    extensions that are not part of any Ada standard. For a full list of these
!   extensions, see the GNAT reference manual, ``Pragma Extensions_Allowed``.
  
  
  .. _Character_Set_Control:
*************** Subprogram Inlining Control
*** 5660,5667 ****
    This switch activates front-end inlining which also
    generates additional dependencies.
  
!   When using a gcc-based back end (in practice this means using any version
!   of GNAT other than the JGNAT, .NET or GNAAMP versions), then the use of
    :switch:`-gnatN` is deprecated, and the use of :switch:`-gnatn` is preferred.
    Historically front end inlining was more extensive than the gcc back end
    inlining, but that is no longer the case.
--- 5718,5724 ----
    This switch activates front-end inlining which also
    generates additional dependencies.
  
!   When using a gcc-based back end, then the use of
    :switch:`-gnatN` is deprecated, and the use of :switch:`-gnatn` is preferred.
    Historically front end inlining was more extensive than the gcc back end
    inlining, but that is no longer the case.
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst gcc-12.1.0/gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst	Fri May  6 07:30:56 2022
*************** execution of this erroneous program:
*** 3680,3687 ****
    The ``gnatmem`` utility monitors dynamic allocation and
    deallocation activity in a program, and displays information about
    incorrect deallocations and possible sources of memory leaks.
!   It is designed to work in association with a static runtime library
!   only and in this context provides three types of information:
  
    * General information concerning memory management, such as the total
      number of allocations and deallocations, the amount of allocated
--- 3680,3688 ----
    The ``gnatmem`` utility monitors dynamic allocation and
    deallocation activity in a program, and displays information about
    incorrect deallocations and possible sources of memory leaks.
!   It is designed to work for fixed-position executables in association
!   with a static runtime library only and in this context provides three
!   types of information:
  
    * General information concerning memory management, such as the total
      number of allocations and deallocations, the amount of allocated
*************** execution of this erroneous program:
*** 3711,3725 ****
  
         $ gnatmem [ switches ] [ DEPTH ] user_program
  
!   The program must have been linked with the instrumented version of the
    allocation and deallocation routines. This is done by linking with the
    :file:`libgmem.a` library. For correct symbolic backtrace information,
!   the user program should be compiled with debugging options
!   (see :ref:`Switches_for_gcc`). For example to build :file:`my_program`:
  
      ::
  
!        $ gnatmake -g my_program -largs -lgmem
  
    As library :file:`libgmem.a` contains an alternate body for package
    ``System.Memory``, :file:`s-memory.adb` should not be compiled and linked
--- 3712,3727 ----
  
         $ gnatmem [ switches ] [ DEPTH ] user_program
  
!   The user program must be linked with the instrumented version of the
    allocation and deallocation routines. This is done by linking with the
    :file:`libgmem.a` library. For correct symbolic backtrace information,
!   the user program should also both be compiled with debugging options
!   (see :ref:`Switches_for_gcc`) and be linked at a fixed position. For
!   example to build :file:`my_program` with ``gnatmake``:
  
      ::
  
!        $ gnatmake -g my_program -largs -lgmem -no-pie
  
    As library :file:`libgmem.a` contains an alternate body for package
    ``System.Memory``, :file:`s-memory.adb` should not be compiled and linked
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_ugn/gnat_utility_programs.rst gcc-12.1.0/gcc/ada/doc/gnat_ugn/gnat_utility_programs.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_ugn/gnat_utility_programs.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_ugn/gnat_utility_programs.rst	Fri May  6 07:30:56 2022
*************** building specialized scripts.
*** 4294,4303 ****
      Standard Output. Has no effect otherwise.
  
    :switch:`--count={N}`
!     If specified, compute the symbolic traceback ``N`` times in a row.
!     This option is mostly useful for measuring the performance of
!     ``gnatsymbolize``, particularly in the case where the cache is
!     being used.
  
    Requirements for Correct Operation
    ----------------------------------
--- 4294,4306 ----
      Standard Output. Has no effect otherwise.
  
    :switch:`--count={N}`
!     Compute the symbolic traceback ``N`` times in a row. This option
!     is mostly useful for measuring the performance of ``gnatsymbolize``,
!     particularly in the case where the cache is being used.
! 
!   :switch:`--load`
!     Interpret the first address as the load address of the executable.
!     This is needed for position-independent executables on Windows.
  
    Requirements for Correct Operation
    ----------------------------------
*************** building specialized scripts.
*** 4311,4322 ****
    This program provides a functionality similar to ``addr2line``.
    It has fewer options to tailor its output, but has been designed
    to require fewer of the DWARF sections to be present in the
!   executable. In particular, the following sections can be
!   stripped from the executable without impact to ``gnatsymbolize``'s
!   functionality:
! 
!     * ``.debug_str``
!     * ``.debug_ranges``
  
  
  .. only:: PRO or GPL
--- 4314,4320 ----
    This program provides a functionality similar to ``addr2line``.
    It has fewer options to tailor its output, but has been designed
    to require fewer of the DWARF sections to be present in the
!   executable. In particular, it works for code compiled with ``-g1``.
  
  
  .. only:: PRO or GPL
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_ugn/platform_specific_information.rst gcc-12.1.0/gcc/ada/doc/gnat_ugn/platform_specific_information.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_ugn/platform_specific_information.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_ugn/platform_specific_information.rst	Fri May  6 07:30:56 2022
*************** this in a library package body in your a
*** 217,223 ****
         (if geteuid = 0 then True else raise Program_Error with "must be root");
  
  It gets the effective user id, and if it's not 0 (i.e. root), it raises
! Program_Error.
  
  .. index:: Linux
  .. index:: GNU/Linux
--- 217,226 ----
         (if geteuid = 0 then True else raise Program_Error with "must be root");
  
  It gets the effective user id, and if it's not 0 (i.e. root), it raises
! Program_Error. Note that if you re running the code in a container, this may
! not be sufficient, as you may have sufficient priviledge on the container,
! but not on the host machine running the container, so check that you also
! have sufficient priviledge for running the container image.
  
  .. index:: Linux
  .. index:: GNU/Linux
*************** GNU/Linux Topics
*** 230,235 ****
--- 233,239 ----
  This section describes topics that are specific to GNU/Linux platforms.
  
  .. _Required_packages_on_GNU_Linux:
+ .. _A_GNU_Linux_debug_quirk:
  
  Required Packages on GNU/Linux
  ------------------------------
*************** you'll need the 32-bit version of the fo
*** 249,254 ****
--- 253,274 ----
  Other GNU/Linux distributions might be choosing a different name
  for those packages.
  
+ A GNU/Linux Debug Quirk
+ -----------------------
+ 
+ On SuSE 15, some kernels have a defect causing issues when debugging
+ programs using threads or Ada tasks. Due to the lack of documentation
+ found regarding this kernel issue, we can only provide limited
+ information about which kernels are impacted: kernel version 5.3.18 is
+ known to be impacted, and kernels in the 5.14 range or newer are
+ believed to fix this problem.
+ 
+ The bug affects the debugging of 32-bit processes on a 64-bit system.
+ Symptoms can vary: Unexpected ``SIGABRT`` signals being received by
+ the program, "The futex facility returned an unexpected error code"
+ error message, and inferior programs hanging indefinitely range among
+ the symptoms most commonly observed.
+ 
  .. index:: Windows
  
  .. _Microsoft_Windows_Topics:
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst gcc-12.1.0/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst
*** gcc-11.3.0/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst	Fri May  6 07:30:56 2022
*************** recognized by GNAT::
*** 1409,1424 ****
       Check_Float_Overflow
       Check_Name
       Check_Policy
-      Compile_Time_Error
-      Compile_Time_Warning
-      Compiler_Unit
-      Compiler_Unit_Warning
       Component_Alignment
       Convention_Identifier
       Debug_Policy
-      Detect_Blocking
       Default_Scalar_Storage_Order
       Default_Storage_Pool
       Disable_Atomic_Synchronization
       Discard_Names
       Elaboration_Checks
--- 1409,1420 ----
       Check_Float_Overflow
       Check_Name
       Check_Policy
       Component_Alignment
       Convention_Identifier
       Debug_Policy
       Default_Scalar_Storage_Order
       Default_Storage_Pool
+      Detect_Blocking
       Disable_Atomic_Synchronization
       Discard_Names
       Elaboration_Checks
*************** recognized by GNAT::
*** 1437,1443 ****
       Locking_Policy
       No_Component_Reordering
       No_Heap_Finalization
-      No_Run_Time
       No_Strict_Aliasing
       Normalize_Scalars
       Optimize_Alignment
--- 1433,1438 ----
*************** recognized by GNAT::
*** 1449,1465 ****
       Priority_Specific_Dispatching
       Profile
       Profile_Warnings
-      Propagate_Exceptions
       Queuing_Policy
-      Rational
-      Ravenscar
       Rename_Pragma
-      Restricted_Run_Time
       Restrictions
!      Restrictions_Warnings
       Reviewable
       Short_Circuit_And_Or
-      Short_Descriptors
       Source_File_Name
       Source_File_Name_Project
       SPARK_Mode
--- 1444,1455 ----
       Priority_Specific_Dispatching
       Profile
       Profile_Warnings
       Queuing_Policy
       Rename_Pragma
       Restrictions
!      Restriction_Warnings
       Reviewable
       Short_Circuit_And_Or
       Source_File_Name
       Source_File_Name_Project
       SPARK_Mode
*************** recognized by GNAT::
*** 1468,1474 ****
       Suppress_Exception_Locations
       Task_Dispatching_Policy
       Unevaluated_Use_Of_Old
-      Universal_Data
       Unsuppress
       Use_VADS_Size
       Validity_Checks
--- 1458,1463 ----
*************** only to the unit in which the pragma app
*** 1514,1520 ****
  The exception is No_Elaboration_Code which always applies to the entire
  object file from a compilation, i.e. to the body, spec, and all subunits.
  This restriction can be specified in a configuration pragma file, or it
! can be on the body and/or the spec (in eithe case it applies to all the
  relevant units). It can appear on a subunit only if it has previously
  appeared in the body of spec.
  
--- 1503,1509 ----
  The exception is No_Elaboration_Code which always applies to the entire
  object file from a compilation, i.e. to the body, spec, and all subunits.
  This restriction can be specified in a configuration pragma file, or it
! can be on the body and/or the spec (in either case it applies to all the
  relevant units). It can appear on a subunit only if it has previously
  appeared in the body of spec.
  
*************** additional source files as follows:
*** 1672,1679 ****
    not require that the code generation be optimized. Like :switch:`-gnatn`,
    the use of this switch generates additional dependencies.
  
!   When using a gcc-based back end (in practice this means using any version
!   of GNAT other than for the JVM, .NET or GNAAMP platforms), then the use of
    :switch:`-gnatN` is deprecated, and the use of :switch:`-gnatn` is preferred.
    Historically front end inlining was more extensive than the gcc back end
    inlining, but that is no longer the case.
--- 1661,1667 ----
    not require that the code generation be optimized. Like :switch:`-gnatn`,
    the use of this switch generates additional dependencies.
  
!   When using a gcc-based back end, then the use of
    :switch:`-gnatN` is deprecated, and the use of :switch:`-gnatn` is preferred.
    Historically front end inlining was more extensive than the gcc back end
    inlining, but that is no longer the case.
*************** Some of the known limitations include:
*** 4527,4534 ****
    constants. Function macros (macros with arguments) are partially translated
    as comments, to be completed manually if needed.
  * some extensions (e.g. vector types) are not supported
! * pointers to pointers or complex structures are mapped to System.Address
! * identifiers with identical name (except casing) will generate compilation
    errors (e.g. ``shm_get`` vs ``SHM_GET``).
  
  The code is generated using Ada 2012 syntax, which makes it easier to interface
--- 4515,4522 ----
    constants. Function macros (macros with arguments) are partially translated
    as comments, to be completed manually if needed.
  * some extensions (e.g. vector types) are not supported
! * pointers to pointers are mapped to System.Address
! * identifiers with identical name (except casing) may generate compilation
    errors (e.g. ``shm_get`` vs ``SHM_GET``).
  
  The code is generated using Ada 2012 syntax, which makes it easier to interface
*************** header files needed by these files trans
*** 4547,4560 ****
  
  .. code-block:: sh
  
!       $ g++ -c -fdump-ada-spec -C /usr/include/time.h
        $ gcc -c *.ads
  
  will generate, under GNU/Linux, the following files: :file:`time_h.ads`,
  :file:`bits_time_h.ads`, :file:`stddef_h.ads`, :file:`bits_types_h.ads` which
  correspond to the files :file:`/usr/include/time.h`,
! :file:`/usr/include/bits/time.h`, etc..., and will then compile these Ada specs
! in Ada 2005 mode.
  
  The :switch:`-C` switch tells ``gcc`` to extract comments from headers,
  and will attempt to generate corresponding Ada comments.
--- 4535,4551 ----
  
  .. code-block:: sh
  
!       $ gcc -c -fdump-ada-spec -C /usr/include/time.h
        $ gcc -c *.ads
  
  will generate, under GNU/Linux, the following files: :file:`time_h.ads`,
  :file:`bits_time_h.ads`, :file:`stddef_h.ads`, :file:`bits_types_h.ads` which
  correspond to the files :file:`/usr/include/time.h`,
! :file:`/usr/include/bits/time.h`, etc..., and then compile these Ada specs.
! That is to say, the name of the Ada specs is in keeping with the relative path
! under :file:`/usr/include/` of the header files. This behavior is specific to
! paths ending with :file:`/include/`; in all the other cases, the name of the
! Ada specs is derived from the simple name of the header files instead.
  
  The :switch:`-C` switch tells ``gcc`` to extract comments from headers,
  and will attempt to generate corresponding Ada comments.
*************** can use instead the :switch:`-fdump-ada-
*** 4565,4603 ****
  You can optionally specify a parent unit, of which all generated units will
  be children, using :switch:`-fada-spec-parent={unit}`.
  
! Note that we recommend when possible to use the *g++* driver to
! generate bindings, even for most C headers, since this will in general
! generate better Ada specs. For generating bindings for C++ headers, it is
! mandatory to use the *g++* command, or *gcc -x c++* which
! is equivalent in this case. If *g++* cannot work on your C headers
! because of incompatibilities between C and C++, then you can fallback to
! ``gcc`` instead.
! 
! For an example of better bindings generated from the C++ front-end,
! the name of the parameters (when available) are actually ignored by the C
! front-end. Consider the following C header:
! 
! .. code-block:: c
! 
!      extern void foo (int variable);
! 
! with the C front-end, ``variable`` is ignored, and the above is handled as:
! 
! .. code-block:: c
! 
!      extern void foo (int);
! 
! generating a generic:
! 
! .. code-block:: ada
! 
!      procedure foo (param1 : int);
! 
! with the C++ front-end, the name is available, and we generate:
! 
! .. code-block:: ada
! 
!      procedure foo (variable : int);
  
  In some cases, the generated bindings will be more complete or more meaningful
  when defining some macros, which you can do via the :switch:`-D` switch. This
--- 4556,4563 ----
  You can optionally specify a parent unit, of which all generated units will
  be children, using :switch:`-fada-spec-parent={unit}`.
  
! The simple ``gcc```-based command works only for C headers. For C++ headers
! you need to use either the ``g++`` command or the combination ``gcc -x c++```.
  
  In some cases, the generated bindings will be more complete or more meaningful
  when defining some macros, which you can do via the :switch:`-D` switch. This
*************** is for example the case with :file:`Xlib
*** 4605,4611 ****
  
  .. code-block:: sh
  
!       $ g++ -c -fdump-ada-spec -DXLIB_ILLEGAL_ACCESS -C /usr/include/X11/Xlib.h
  
  The above will generate more complete bindings than a straight call without
  the :switch:`-DXLIB_ILLEGAL_ACCESS` switch.
--- 4565,4571 ----
  
  .. code-block:: sh
  
!       $ gcc -c -fdump-ada-spec -DXLIB_ILLEGAL_ACCESS -C /usr/include/X11/Xlib.h
  
  The above will generate more complete bindings than a straight call without
  the :switch:`-DXLIB_ILLEGAL_ACCESS` switch.
*************** and then generate Ada bindings from this
*** 4627,4633 ****
  
  .. code-block:: sh
  
!       $ g++ -c -fdump-ada-spec readline1.h
  
  
  .. _Generating_bindings_for_C++_headers:
--- 4587,4593 ----
  
  .. code-block:: sh
  
!       $ gcc -c -fdump-ada-spec readline1.h
  
  
  .. _Generating_bindings_for_C++_headers:
*************** GNAT and Other Compilation Models
*** 4852,4858 ****
  =================================
  
  This section compares the GNAT model with the approaches taken in
! other environents, first the C/C++ model and then the mechanism that
  has been used in other Ada systems, in particular those traditionally
  used for Ada 83.
  
--- 4812,4818 ----
  =================================
  
  This section compares the GNAT model with the approaches taken in
! other environments, first the C/C++ model and then the mechanism that
  has been used in other Ada systems, in particular those traditionally
  used for Ada 83.
  
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/share/conf.py gcc-12.1.0/gcc/ada/doc/share/conf.py
*** gcc-11.3.0/gcc/ada/doc/share/conf.py	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/share/conf.py	Fri May  6 07:30:56 2022
*************** import latex_elements
*** 18,26 ****
  
  DOCS = {
      'gnat_rm': {
!         'title': u'GNAT Reference Manual'},
      'gnat_ugn': {
!         'title': u'GNAT User\'s Guide for Native Platforms'}}
  
  # Then retrieve the source directory
  root_source_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
--- 18,28 ----
  
  DOCS = {
      'gnat_rm': {
!         'title': 'GNAT Reference Manual'},
      'gnat_ugn': {
!         'title': 'GNAT User\'s Guide for Native Platforms'},
!     'gnat-style': {
!         'title': 'GNAT Coding Style: A Guide for GNAT Developers'}}
  
  # Then retrieve the source directory
  root_source_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
*************** gnatvsn_spec = os.path.join(root_source_
*** 28,39 ****
  basever = os.path.join(root_source_dir, '..', '..', 'BASE-VER')
  texi_fsf = True  # Set to False when FSF doc is switched to sphinx by default
  
! with open(gnatvsn_spec, 'rb') as fd:
      gnatvsn_content = fd.read()
  
  
  def get_copyright():
!     return u'2008-%s, Free Software Foundation' % time.strftime('%Y')
  
  
  def get_gnat_version():
--- 30,41 ----
  basever = os.path.join(root_source_dir, '..', '..', 'BASE-VER')
  texi_fsf = True  # Set to False when FSF doc is switched to sphinx by default
  
! with open(gnatvsn_spec, 'r') as fd:
      gnatvsn_content = fd.read()
  
  
  def get_copyright():
!     return '2008-%s, Free Software Foundation' % time.strftime('%Y')
  
  
  def get_gnat_version():
*************** def get_gnat_version():
*** 47,58 ****
              return ''
  
          try:
!             with open(basever, 'rb') as fd:
                  return fd.read()
!         except:
              pass
  
!     print 'cannot find GNAT version in gnatvsn.ads or in ' + basever
      sys.exit(1)
  
  
--- 49,60 ----
              return ''
  
          try:
!             with open(basever) as fd:
                  return fd.read()
!         except Exception:
              pass
  
!     print('cannot find GNAT version in gnatvsn.ads or in ' + basever)
      sys.exit(1)
  
  
*************** def get_gnat_build_type():
*** 64,81 ****
                  'FSF': 'FSF',
                  'GPL': 'GPL'}[m.group(1).strip()]
      else:
!         print 'cannot compute GNAT build type'
          sys.exit(1)
  
  
  # First retrieve the name of the documentation we are building
  doc_name = os.environ.get('DOC_NAME', None)
  if doc_name is None:
!     print 'DOC_NAME environment variable should be set'
      sys.exit(1)
  
  if doc_name not in DOCS:
!     print '%s is not a valid documentation name' % doc_name
      sys.exit(1)
  
  
--- 66,83 ----
                  'FSF': 'FSF',
                  'GPL': 'GPL'}[m.group(1).strip()]
      else:
!         print('cannot compute GNAT build type')
          sys.exit(1)
  
  
  # First retrieve the name of the documentation we are building
  doc_name = os.environ.get('DOC_NAME', None)
  if doc_name is None:
!     print('DOC_NAME environment variable should be set')
      sys.exit(1)
  
  if doc_name not in DOCS:
!     print('%s is not a valid documentation name' % doc_name)
      sys.exit(1)
  
  
*************** exclude_patterns = []
*** 84,94 ****
  for d in os.listdir(root_source_dir):
      if d not in ('share', doc_name, doc_name + '.rst'):
          exclude_patterns.append(d)
!         print 'ignoring %s' % d
  
  if doc_name == 'gnat_rm':
      exclude_patterns.append('share/gnat_project_manager.rst')
!     print 'ignoring share/gnat_project_manager.rst'
  
  extensions = []
  templates_path = ['_templates']
--- 86,96 ----
  for d in os.listdir(root_source_dir):
      if d not in ('share', doc_name, doc_name + '.rst'):
          exclude_patterns.append(d)
!         print('ignoring %s' % d)
  
  if doc_name == 'gnat_rm':
      exclude_patterns.append('share/gnat_project_manager.rst')
!     print('ignoring share/gnat_project_manager.rst')
  
  extensions = []
  templates_path = ['_templates']
*************** copyright = get_copyright()
*** 103,109 ****
  version = get_gnat_version()
  release = get_gnat_version()
  
! pygments_style = 'sphinx'
  tags.add(get_gnat_build_type())
  html_theme = 'sphinxdoc'
  if os.path.isfile('adacore_transparent.png'):
--- 105,111 ----
  version = get_gnat_version()
  release = get_gnat_version()
  
! pygments_style = None
  tags.add(get_gnat_build_type())
  html_theme = 'sphinxdoc'
  if os.path.isfile('adacore_transparent.png'):
*************** copyright_macros = {
*** 119,126 ****
      'date': time.strftime("%b %d, %Y"),
      'edition': 'GNAT %s Edition' % 'Pro' if get_gnat_build_type() == 'PRO'
                 else 'GPL',
!     'name': u'GNU Ada',
!     'tool': u'GNAT',
      'version': version}
  
  latex_elements = {
--- 121,128 ----
      'date': time.strftime("%b %d, %Y"),
      'edition': 'GNAT %s Edition' % 'Pro' if get_gnat_build_type() == 'PRO'
                 else 'GPL',
!     'name': 'GNU Ada',
!     'tool': 'GNAT',
      'version': version}
  
  latex_elements = {
*************** latex_elements = {
*** 134,146 ****
      'tableofcontents': latex_elements.TOC % copyright_macros}
  
  latex_documents = [
!     (master_doc, '%s.tex' % doc_name, project, u'AdaCore', 'manual')]
  
  texinfo_documents = [
      (master_doc, doc_name, project,
!      u'AdaCore', doc_name, doc_name, '')]
  
  
  def setup(app):
!     app.add_lexer('ada', ada_pygments.AdaLexer())
!     app.add_lexer('gpr', ada_pygments.GNATProjectLexer())
--- 136,148 ----
      'tableofcontents': latex_elements.TOC % copyright_macros}
  
  latex_documents = [
!     (master_doc, '%s.tex' % doc_name, project, 'AdaCore', 'manual')]
  
  texinfo_documents = [
      (master_doc, doc_name, project,
!      'AdaCore', doc_name, doc_name, '')]
  
  
  def setup(app):
!     app.add_lexer('ada', ada_pygments.AdaLexer)
!     app.add_lexer('gpr', ada_pygments.GNATProjectLexer)
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/share/gnat.sty gcc-12.1.0/gcc/ada/doc/share/gnat.sty
*** gcc-11.3.0/gcc/ada/doc/share/gnat.sty	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/doc/share/gnat.sty	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,72 ----
+ % Needed to generate footers with total number of pages
+ \RequirePackage{lastpage}
+ 
+ % AdaCore specific maketitle
+ \renewcommand{\maketitle}{%
+   \begin{titlepage}%
+     \let\footnotesize\small
+     \let\footnoterule\relax
+     \rule{\textwidth}{1pt}%
+     \ifsphinxpdfoutput
+       \begingroup
+       % These \defs are required to deal with multi-line authors; it
+       % changes \\ to ', ' (comma-space), making it pass muster for
+       % generating document info in the PDF file.
+       \def\\{, }
+       \def\and{and }
+       \pdfinfo{
+         /Author (\@author)
+         /Title (\@title)
+       }
+       \endgroup
+     \fi
+     \begin{flushright}%
+       \sphinxlogo%
+       {\rm\Huge \@title \par}%
+       {\em\LARGE\py@HeaderFamily \py@release\releaseinfo \par}
+       \vfill
+       {\LARGE\py@HeaderFamily
+         \par}
+       \vfill\vfill
+       {\large
+        \@date \par
+        \vfill
+        \py@authoraddress \par
+       }%
+     \end{flushright}%\par
+     \@thanks
+   \end{titlepage}%
+   \cleardoublepage%
+   \setcounter{footnote}{0}%
+   \let\thanks\relax\let\maketitle\relax
+ }
+ 
+ % AdaCore specific headers/footers
+ % Redefine the 'normal' header/footer style when using "fancyhdr" package:
+ \@ifundefined{fancyhf}{}{
+   % Use \pagestyle{normal} as the primary pagestyle for text.
+   \fancypagestyle{normal}{
+     \fancyhf{}
+     \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage\ of \pageref*{LastPage}}}
+     \fancyfoot[LO]{{\py@HeaderFamily\nouppercase{\rightmark}}}
+     \fancyfoot[RE]{{\py@HeaderFamily\nouppercase{\leftmark}}}
+     \fancyhead[LE,RO]{{\py@HeaderFamily \@title, \py@release}}
+     \renewcommand{\headrulewidth}{0.4pt}
+     \renewcommand{\footrulewidth}{0.4pt}
+     % define chaptermark with \@chappos when \@chappos is available for Japanese
+     \ifx\@chappos\undefined\else
+       \def\chaptermark##1{\markboth{\@chapapp\space\thechapter\space\@chappos\space ##1}{}}
+     \fi
+   }
+   % Update the plain style so we get the page number & footer line,
+   % but not a chapter or section title.  This is to keep the first
+   % page of a chapter and the blank page between chapters `clean.'
+   \fancypagestyle{plain}{
+     \fancyhf{}
+     \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage\ of \pageref*{LastPage}}}
+     \fancyfoot[LO,RE]{{\py@HeaderFamily \GNATFullDocumentName}}
+     \fancyhead[LE,RO]{{\py@HeaderFamily \@title\ \GNATVersion}}
+     \renewcommand{\headrulewidth}{0.0pt}
+     \renewcommand{\footrulewidth}{0.4pt}
+   }
+ }
diff -Nrcpad gcc-11.3.0/gcc/ada/doc/share/gnu_free_documentation_license.rst gcc-12.1.0/gcc/ada/doc/share/gnu_free_documentation_license.rst
*** gcc-11.3.0/gcc/ada/doc/share/gnu_free_documentation_license.rst	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/doc/share/gnu_free_documentation_license.rst	Fri May  6 07:30:56 2022
*************** GNU Free Documentation License
*** 7,13 ****
  Version 1.3, 3 November 2008
  
  Copyright  2000, 2001, 2002, 2007, 2008  Free Software Foundation, Inc
! http://fsf.org/
  
  Everyone is permitted to copy and distribute verbatim copies of this
  license document, but changing it is not allowed.
--- 7,13 ----
  Version 1.3, 3 November 2008
  
  Copyright  2000, 2001, 2002, 2007, 2008  Free Software Foundation, Inc
! https://fsf.org/
  
  Everyone is permitted to copy and distribute verbatim copies of this
  license document, but changing it is not allowed.
*************** The Free Software Foundation may publish
*** 383,389 ****
  of the GNU Free Documentation License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.  See
! http://www.gnu.org/copyleft/.
  
  Each version of the License is given a distinguishing version number.
  If the Document specifies that a particular numbered version of this
--- 383,389 ----
  of the GNU Free Documentation License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.  See
! https://www.gnu.org/copyleft/.
  
  Each version of the License is given a distinguishing version number.
  If the Document specifies that a particular numbered version of this
diff -Nrcpad gcc-11.3.0/gcc/ada/einfo-utils.adb gcc-12.1.0/gcc/ada/einfo-utils.adb
*** gcc-11.3.0/gcc/ada/einfo-utils.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/einfo-utils.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,3348 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                           E I N F O . U T I L S                          --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 2020-2022, Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Atree;          use Atree;
+ with Elists;         use Elists;
+ with Nlists;         use Nlists;
+ with Output;         use Output;
+ with Sinfo;          use Sinfo;
+ with Sinfo.Nodes;    use Sinfo.Nodes;
+ with Sinfo.Utils;    use Sinfo.Utils;
+ 
+ package body Einfo.Utils is
+ 
+    -----------------------
+    -- Local subprograms --
+    -----------------------
+ 
+    function Has_Option
+      (State_Id   : Entity_Id;
+       Option_Nam : Name_Id) return Boolean;
+    --  Determine whether abstract state State_Id has particular option denoted
+    --  by the name Option_Nam.
+ 
+    -------------------------------------------
+    -- Aliases/Renamings of Renamed_Or_Alias --
+    -------------------------------------------
+ 
+    function Alias (N : Entity_Id) return Entity_Id is
+    begin
+       return Val : constant Entity_Id := Renamed_Or_Alias (N) do
+          pragma Assert
+            (Is_Overloadable (N) or else Ekind (N) = E_Subprogram_Type);
+          pragma Assert (Val in N_Entity_Id | N_Empty_Id);
+       end return;
+    end Alias;
+ 
+    procedure Set_Alias (N : Entity_Id; Val : Entity_Id) is
+    begin
+       pragma Assert
+         (Is_Overloadable (N) or else Ekind (N) = E_Subprogram_Type);
+       pragma Assert (Val in N_Entity_Id | N_Empty_Id);
+ 
+       Set_Renamed_Or_Alias (N, Val);
+    end Set_Alias;
+ 
+    function Renamed_Entity (N : Entity_Id) return Entity_Id is
+    begin
+       return Val : constant Entity_Id := Renamed_Or_Alias (N) do
+          pragma Assert (not Is_Object (N) or else Etype (N) = Any_Type);
+          pragma Assert (Val in N_Entity_Id | N_Empty_Id);
+       end return;
+    end Renamed_Entity;
+ 
+    procedure Set_Renamed_Entity (N : Entity_Id; Val : Entity_Id) is
+    begin
+       pragma Assert (not Is_Object (N));
+       pragma Assert (Val in N_Entity_Id);
+ 
+       Set_Renamed_Or_Alias (N, Val);
+    end Set_Renamed_Entity;
+ 
+    function Renamed_Object (N : Entity_Id) return Node_Id is
+    begin
+       return Val : constant Node_Id := Renamed_Or_Alias (N) do
+          --  Formal_Kind uses the entity, not a name of it. This happens
+          --  in front-end inlining, which also sets to Empty. Also in
+          --  Exp_Ch9, where formals are renamed for the benefit of gdb.
+ 
+          if Ekind (N) not in Formal_Kind then
+             pragma Assert (Is_Object (N));
+             pragma Assert (Val in N_Subexpr_Id | N_Empty_Id);
+             null;
+          end if;
+       end return;
+    end Renamed_Object;
+ 
+    procedure Set_Renamed_Object (N : Entity_Id; Val : Node_Id) is
+    begin
+       if Ekind (N) not in Formal_Kind then
+          pragma Assert (Is_Object (N));
+          pragma Assert (Val in N_Subexpr_Id | N_Empty_Id);
+          null;
+       end if;
+ 
+       Set_Renamed_Or_Alias (N, Val);
+    end Set_Renamed_Object;
+ 
+    function Renamed_Entity_Or_Object (N : Entity_Id) return Node_Id is
+    begin
+       if Is_Object (N) then
+          return Renamed_Object (N);
+       else
+          return Renamed_Entity (N);
+       end if;
+    end Renamed_Entity_Or_Object;
+ 
+    procedure Set_Renamed_Object_Of_Possibly_Void
+      (N : Entity_Id; Val : Node_Id)
+    is
+    begin
+       pragma Assert (Val in N_Subexpr_Id);
+       Set_Renamed_Or_Alias (N, Val);
+    end Set_Renamed_Object_Of_Possibly_Void;
+ 
+    ----------------
+    -- Has_Option --
+    ----------------
+ 
+    function Has_Option
+      (State_Id   : Entity_Id;
+       Option_Nam : Name_Id) return Boolean
+    is
+       Decl    : constant Node_Id := Parent (State_Id);
+       Opt     : Node_Id;
+       Opt_Nam : Node_Id;
+ 
+    begin
+       pragma Assert (Ekind (State_Id) = E_Abstract_State);
+ 
+       --  The declaration of abstract states with options appear as an
+       --  extension aggregate. If this is not the case, the option is not
+       --  available.
+ 
+       if Nkind (Decl) /= N_Extension_Aggregate then
+          return False;
+       end if;
+ 
+       --  Simple options
+ 
+       Opt := First (Expressions (Decl));
+       while Present (Opt) loop
+          if Nkind (Opt) = N_Identifier and then Chars (Opt) = Option_Nam then
+             return True;
+          end if;
+ 
+          Next (Opt);
+       end loop;
+ 
+       --  Complex options with various specifiers
+ 
+       Opt := First (Component_Associations (Decl));
+       while Present (Opt) loop
+          Opt_Nam := First (Choices (Opt));
+ 
+          if Nkind (Opt_Nam) = N_Identifier
+            and then Chars (Opt_Nam) = Option_Nam
+          then
+             return True;
+          end if;
+ 
+          Next (Opt);
+       end loop;
+ 
+       return False;
+    end Has_Option;
+ 
+    ------------------------------
+    -- Classification Functions --
+    ------------------------------
+ 
+    function Is_Access_Object_Type               (Id : E) return B is
+    begin
+       return Is_Access_Type (Id)
+         and then Ekind (Directly_Designated_Type (Id)) /= E_Subprogram_Type;
+    end Is_Access_Object_Type;
+ 
+    function Is_Access_Type                      (Id : E) return B is
+    begin
+       return Ekind (Id) in Access_Kind;
+    end Is_Access_Type;
+ 
+    function Is_Access_Protected_Subprogram_Type (Id : E) return B is
+    begin
+       return Ekind (Id) in Access_Protected_Kind;
+    end Is_Access_Protected_Subprogram_Type;
+ 
+    function Is_Access_Subprogram_Type           (Id : E) return B is
+    begin
+       return Is_Access_Type (Id)
+         and then Ekind (Directly_Designated_Type (Id)) = E_Subprogram_Type;
+    end Is_Access_Subprogram_Type;
+ 
+    function Is_Aggregate_Type                   (Id : E) return B is
+    begin
+       return Ekind (Id) in Aggregate_Kind;
+    end Is_Aggregate_Type;
+ 
+    function Is_Anonymous_Access_Type            (Id : E) return B is
+    begin
+       return Ekind (Id) in Anonymous_Access_Kind;
+    end Is_Anonymous_Access_Type;
+ 
+    function Is_Array_Type                       (Id : E) return B is
+    begin
+       return Ekind (Id) in Array_Kind;
+    end Is_Array_Type;
+ 
+    function Is_Assignable                       (Id : E) return B is
+    begin
+       return Ekind (Id) in Assignable_Kind;
+    end Is_Assignable;
+ 
+    function Is_Class_Wide_Type                  (Id : E) return B is
+    begin
+       return Ekind (Id) in Class_Wide_Kind;
+    end Is_Class_Wide_Type;
+ 
+    function Is_Composite_Type                   (Id : E) return B is
+    begin
+       return Ekind (Id) in Composite_Kind;
+    end Is_Composite_Type;
+ 
+    function Is_Concurrent_Body                  (Id : E) return B is
+    begin
+       return Ekind (Id) in Concurrent_Body_Kind;
+    end Is_Concurrent_Body;
+ 
+    function Is_Concurrent_Type                  (Id : E) return B is
+    begin
+       return Ekind (Id) in Concurrent_Kind;
+    end Is_Concurrent_Type;
+ 
+    function Is_Decimal_Fixed_Point_Type         (Id : E) return B is
+    begin
+       return Ekind (Id) in Decimal_Fixed_Point_Kind;
+    end Is_Decimal_Fixed_Point_Type;
+ 
+    function Is_Digits_Type                      (Id : E) return B is
+    begin
+       return Ekind (Id) in Digits_Kind;
+    end Is_Digits_Type;
+ 
+    function Is_Discrete_Or_Fixed_Point_Type     (Id : E) return B is
+    begin
+       return Ekind (Id) in Discrete_Or_Fixed_Point_Kind;
+    end Is_Discrete_Or_Fixed_Point_Type;
+ 
+    function Is_Discrete_Type                    (Id : E) return B is
+    begin
+       return Ekind (Id) in Discrete_Kind;
+    end Is_Discrete_Type;
+ 
+    function Is_Elementary_Type                  (Id : E) return B is
+    begin
+       return Ekind (Id) in Elementary_Kind;
+    end Is_Elementary_Type;
+ 
+    function Is_Entry                            (Id : E) return B is
+    begin
+       return Ekind (Id) in Entry_Kind;
+    end Is_Entry;
+ 
+    function Is_Enumeration_Type                 (Id : E) return B is
+    begin
+       return Ekind (Id) in Enumeration_Kind;
+    end Is_Enumeration_Type;
+ 
+    function Is_Fixed_Point_Type                 (Id : E) return B is
+    begin
+       return Ekind (Id) in Fixed_Point_Kind;
+    end Is_Fixed_Point_Type;
+ 
+    function Is_Floating_Point_Type              (Id : E) return B is
+    begin
+       return Ekind (Id) in Float_Kind;
+    end Is_Floating_Point_Type;
+ 
+    function Is_Formal                           (Id : E) return B is
+    begin
+       return Ekind (Id) in Formal_Kind;
+    end Is_Formal;
+ 
+    function Is_Formal_Object                    (Id : E) return B is
+    begin
+       return Ekind (Id) in Formal_Object_Kind;
+    end Is_Formal_Object;
+ 
+    function Is_Generic_Subprogram               (Id : E) return B is
+    begin
+       return Ekind (Id) in Generic_Subprogram_Kind;
+    end Is_Generic_Subprogram;
+ 
+    function Is_Generic_Unit                     (Id : E) return B is
+    begin
+       return Ekind (Id) in Generic_Unit_Kind;
+    end Is_Generic_Unit;
+ 
+    function Is_Ghost_Entity (Id : Entity_Id) return Boolean is
+    begin
+       return Is_Checked_Ghost_Entity (Id) or else Is_Ignored_Ghost_Entity (Id);
+    end Is_Ghost_Entity;
+ 
+    function Is_Incomplete_Or_Private_Type       (Id : E) return B is
+    begin
+       return Ekind (Id) in Incomplete_Or_Private_Kind;
+    end Is_Incomplete_Or_Private_Type;
+ 
+    function Is_Incomplete_Type                  (Id : E) return B is
+    begin
+       return Ekind (Id) in Incomplete_Kind;
+    end Is_Incomplete_Type;
+ 
+    function Is_Integer_Type                     (Id : E) return B is
+    begin
+       return Ekind (Id) in Integer_Kind;
+    end Is_Integer_Type;
+ 
+    function Is_Modular_Integer_Type             (Id : E) return B is
+    begin
+       return Ekind (Id) in Modular_Integer_Kind;
+    end Is_Modular_Integer_Type;
+ 
+    function Is_Named_Access_Type                (Id : E) return B is
+    begin
+       return Ekind (Id) in Named_Access_Kind;
+    end Is_Named_Access_Type;
+ 
+    function Is_Named_Number                     (Id : E) return B is
+    begin
+       return Ekind (Id) in Named_Kind;
+    end Is_Named_Number;
+ 
+    function Is_Numeric_Type                     (Id : E) return B is
+    begin
+       return Ekind (Id) in Numeric_Kind;
+    end Is_Numeric_Type;
+ 
+    function Is_Object                           (Id : E) return B is
+    begin
+       return Ekind (Id) in Object_Kind;
+    end Is_Object;
+ 
+    function Is_Ordinary_Fixed_Point_Type        (Id : E) return B is
+    begin
+       return Ekind (Id) in Ordinary_Fixed_Point_Kind;
+    end Is_Ordinary_Fixed_Point_Type;
+ 
+    function Is_Overloadable                     (Id : E) return B is
+    begin
+       return Ekind (Id) in Overloadable_Kind;
+    end Is_Overloadable;
+ 
+    function Is_Private_Type                     (Id : E) return B is
+    begin
+       return Ekind (Id) in Private_Kind;
+    end Is_Private_Type;
+ 
+    function Is_Protected_Type                   (Id : E) return B is
+    begin
+       return Ekind (Id) in Protected_Kind;
+    end Is_Protected_Type;
+ 
+    function Is_Real_Type                        (Id : E) return B is
+    begin
+       return Ekind (Id) in Real_Kind;
+    end Is_Real_Type;
+ 
+    function Is_Record_Type                      (Id : E) return B is
+    begin
+       return Ekind (Id) in Record_Kind;
+    end Is_Record_Type;
+ 
+    function Is_Scalar_Type                      (Id : E) return B is
+    begin
+       return Ekind (Id) in Scalar_Kind;
+    end Is_Scalar_Type;
+ 
+    function Is_Signed_Integer_Type              (Id : E) return B is
+    begin
+       return Ekind (Id) in Signed_Integer_Kind;
+    end Is_Signed_Integer_Type;
+ 
+    function Is_Subprogram                       (Id : E) return B is
+    begin
+       return Ekind (Id) in Subprogram_Kind;
+    end Is_Subprogram;
+ 
+    function Is_Subprogram_Or_Entry              (Id : E) return B is
+    begin
+       return Ekind (Id) in Subprogram_Kind
+                or else
+              Ekind (Id) in Entry_Kind;
+    end Is_Subprogram_Or_Entry;
+ 
+    function Is_Subprogram_Or_Generic_Subprogram (Id : E) return B is
+    begin
+       return Ekind (Id) in Subprogram_Kind
+                or else
+              Ekind (Id) in Generic_Subprogram_Kind;
+    end Is_Subprogram_Or_Generic_Subprogram;
+ 
+    function Is_Task_Type                        (Id : E) return B is
+    begin
+       return Ekind (Id) in Task_Kind;
+    end Is_Task_Type;
+ 
+    function Is_Type                             (Id : E) return B is
+    begin
+       return Ekind (Id) in Type_Kind;
+    end Is_Type;
+ 
+    ------------------------------------------
+    -- Type Representation Attribute Fields --
+    ------------------------------------------
+ 
+    function Known_Alignment (E : Entity_Id) return B is
+    begin
+       --  For some reason, Empty is passed to this sometimes
+ 
+       return No (E) or else not Field_Is_Initial_Zero (E, F_Alignment);
+    end Known_Alignment;
+ 
+    procedure Reinit_Alignment (Id : E) is
+    begin
+       Reinit_Field_To_Zero (Id, F_Alignment);
+    end Reinit_Alignment;
+ 
+    procedure Copy_Alignment (To, From : E) is
+    begin
+       if Known_Alignment (From) then
+          Set_Alignment (To, Alignment (From));
+       else
+          Reinit_Alignment (To);
+       end if;
+    end Copy_Alignment;
+ 
+    function Known_Component_Bit_Offset (E : Entity_Id) return B is
+    begin
+       return Present (Component_Bit_Offset (E));
+    end Known_Component_Bit_Offset;
+ 
+    function Known_Static_Component_Bit_Offset (E : Entity_Id) return B is
+    begin
+       return Known_Component_Bit_Offset (E)
+         and then Component_Bit_Offset (E) >= Uint_0;
+    end Known_Static_Component_Bit_Offset;
+ 
+    function Known_Component_Size (E : Entity_Id) return B is
+    begin
+       return Present (Component_Size (E));
+    end Known_Component_Size;
+ 
+    function Known_Static_Component_Size (E : Entity_Id) return B is
+    begin
+       return Known_Component_Size (E) and then Component_Size (E) >= Uint_0;
+    end Known_Static_Component_Size;
+ 
+    function Known_Esize (E : Entity_Id) return B is
+    begin
+       return Present (Esize (E));
+    end Known_Esize;
+ 
+    function Known_Static_Esize (E : Entity_Id) return B is
+    begin
+       return Known_Esize (E)
+         and then Esize (E) >= Uint_0
+         and then not Is_Generic_Type (E);
+    end Known_Static_Esize;
+ 
+    procedure Reinit_Esize (Id : E) is
+    begin
+       Reinit_Field_To_Zero (Id, F_Esize);
+    end Reinit_Esize;
+ 
+    procedure Copy_Esize (To, From : E) is
+    begin
+       if Known_Esize (From) then
+          Set_Esize (To, Esize (From));
+       else
+          Reinit_Esize (To);
+       end if;
+    end Copy_Esize;
+ 
+    function Known_Normalized_First_Bit (E : Entity_Id) return B is
+    begin
+       return Present (Normalized_First_Bit (E));
+    end Known_Normalized_First_Bit;
+ 
+    function Known_Static_Normalized_First_Bit (E : Entity_Id) return B is
+    begin
+       return Known_Normalized_First_Bit (E)
+         and then Normalized_First_Bit (E) >= Uint_0;
+    end Known_Static_Normalized_First_Bit;
+ 
+    function Known_Normalized_Position (E : Entity_Id) return B is
+    begin
+       return Present (Normalized_Position (E));
+    end Known_Normalized_Position;
+ 
+    function Known_Static_Normalized_Position (E : Entity_Id) return B is
+    begin
+       return Known_Normalized_Position (E)
+         and then Normalized_Position (E) >= Uint_0;
+    end Known_Static_Normalized_Position;
+ 
+    function Known_RM_Size (E : Entity_Id) return B is
+    begin
+       return Present (RM_Size (E));
+    end Known_RM_Size;
+ 
+    function Known_Static_RM_Size (E : Entity_Id) return B is
+    begin
+       return Known_RM_Size (E)
+         and then RM_Size (E) >= Uint_0
+         and then not Is_Generic_Type (E);
+    end Known_Static_RM_Size;
+ 
+    procedure Reinit_RM_Size (Id : E) is
+    begin
+       Reinit_Field_To_Zero (Id, F_RM_Size);
+    end Reinit_RM_Size;
+ 
+    procedure Copy_RM_Size (To, From : E) is
+    begin
+       if Known_RM_Size (From) then
+          Set_RM_Size (To, RM_Size (From));
+       else
+          Reinit_RM_Size (To);
+       end if;
+    end Copy_RM_Size;
+ 
+    -------------------------------
+    -- Reinit_Component_Location --
+    -------------------------------
+ 
+    procedure Reinit_Component_Location (Id : E) is
+    begin
+       Set_Normalized_First_Bit (Id, No_Uint);
+       Set_Component_Bit_Offset (Id, No_Uint);
+       Reinit_Esize (Id);
+       Set_Normalized_Position (Id, No_Uint);
+    end Reinit_Component_Location;
+ 
+    ------------------------------
+    -- Reinit_Object_Size_Align --
+    ------------------------------
+ 
+    procedure Reinit_Object_Size_Align (Id : E) is
+    begin
+       Reinit_Esize (Id);
+       Reinit_Alignment (Id);
+    end Reinit_Object_Size_Align;
+ 
+    ---------------
+    -- Init_Size --
+    ---------------
+ 
+    procedure Init_Size (Id : E; V : Int) is
+    begin
+       pragma Assert (Is_Type (Id));
+       pragma Assert (not Known_Esize (Id) or else Esize (Id) = V);
+       pragma Assert (not Known_RM_Size (Id) or else RM_Size (Id) = V);
+ 
+       Set_Esize (Id, UI_From_Int (V));
+       Set_RM_Size (Id, UI_From_Int (V));
+    end Init_Size;
+ 
+    -----------------------
+    -- Reinit_Size_Align --
+    -----------------------
+ 
+    procedure Reinit_Size_Align (Id : E) is
+    begin
+       pragma Assert (Ekind (Id) in Type_Kind | E_Void);
+       Reinit_Esize (Id);
+       Reinit_RM_Size (Id);
+       Reinit_Alignment (Id);
+    end Reinit_Size_Align;
+ 
+    --------------------
+    -- Address_Clause --
+    --------------------
+ 
+    function Address_Clause (Id : E) return N is
+    begin
+       return Get_Attribute_Definition_Clause (Id, Attribute_Address);
+    end Address_Clause;
+ 
+    ---------------
+    -- Aft_Value --
+    ---------------
+ 
+    function Aft_Value (Id : E) return U is
+       Result    : Nat := 1;
+       Delta_Val : Ureal := Delta_Value (Id);
+    begin
+       while Delta_Val < Ureal_Tenth loop
+          Delta_Val := Delta_Val * Ureal_10;
+          Result := Result + 1;
+       end loop;
+ 
+       return UI_From_Int (Result);
+    end Aft_Value;
+ 
+    ----------------------
+    -- Alignment_Clause --
+    ----------------------
+ 
+    function Alignment_Clause (Id : E) return N is
+    begin
+       return Get_Attribute_Definition_Clause (Id, Attribute_Alignment);
+    end Alignment_Clause;
+ 
+    -------------------
+    -- Append_Entity --
+    -------------------
+ 
+    procedure Append_Entity (Id : Entity_Id; Scop : Entity_Id) is
+       Last : constant Entity_Id := Last_Entity (Scop);
+ 
+    begin
+       Set_Scope (Id, Scop);
+       Set_Prev_Entity (Id, Empty);  --  Empty <-- Id
+ 
+       --  The entity chain is empty
+ 
+       if No (Last) then
+          Set_First_Entity (Scop, Id);
+ 
+       --  Otherwise the entity chain has at least one element
+ 
+       else
+          Link_Entities (Last, Id);  --  Last <-- Id, Last --> Id
+       end if;
+ 
+       --  NOTE: The setting of the Next_Entity attribute of Id must happen
+       --  here as opposed to at the beginning of the routine because doing
+       --  so causes the binder to hang. It is not clear why ???
+ 
+       Set_Next_Entity (Id, Empty);  --  Id --> Empty
+ 
+       Set_Last_Entity (Scop, Id);
+    end Append_Entity;
+ 
+    ---------------
+    -- Base_Type --
+    ---------------
+ 
+    function Base_Type (Id : E) return E is
+    begin
+       if Is_Base_Type (Id) then
+          return Id;
+       else
+          pragma Assert (Is_Type (Id));
+          return Etype (Id);
+       end if;
+    end Base_Type;
+ 
+    ----------------------
+    -- Declaration_Node --
+    ----------------------
+ 
+    function Declaration_Node (Id : E) return N is
+       P : Node_Id;
+ 
+    begin
+       if Ekind (Id) = E_Incomplete_Type
+         and then Present (Full_View (Id))
+       then
+          P := Parent (Full_View (Id));
+       else
+          P := Parent (Id);
+       end if;
+ 
+       while Nkind (P) in N_Selected_Component | N_Expanded_Name
+         or else (Nkind (P) = N_Defining_Program_Unit_Name
+                    and then Is_Child_Unit (Id))
+       loop
+          P := Parent (P);
+       end loop;
+ 
+       if Is_Itype (Id)
+         and then Nkind (P) not in
+           N_Full_Type_Declaration | N_Subtype_Declaration
+       then
+          P := Empty;
+       end if;
+ 
+       --  Declarations are sometimes removed by replacing them with other
+       --  irrelevant nodes. For example, a declare expression can be turned
+       --  into a literal by constant folding. In these cases we want to
+       --  return Empty.
+ 
+       if Nkind (P) in
+           N_Assignment_Statement
+         | N_Integer_Literal
+         | N_Procedure_Call_Statement
+         | N_Subtype_Indication
+         | N_Type_Conversion
+       then
+          P := Empty;
+       end if;
+ 
+       --  The following Assert indicates what kinds of nodes can be returned;
+       --  they are not all "declarations".
+ 
+       if Serious_Errors_Detected = 0 then
+          pragma Assert
+            (Nkind (P) in N_Is_Decl | N_Empty,
+             "Declaration_Node incorrect kind: " & Node_Kind'Image (Nkind (P)));
+       end if;
+ 
+       return P;
+    end Declaration_Node;
+ 
+    ---------------------
+    -- Designated_Type --
+    ---------------------
+ 
+    function Designated_Type (Id : E) return E is
+       Desig_Type : Entity_Id;
+ 
+    begin
+       Desig_Type := Directly_Designated_Type (Id);
+ 
+       if No (Desig_Type) then
+          pragma Assert (Error_Posted (Id));
+          return Any_Type;
+       end if;
+ 
+       if Is_Incomplete_Type (Desig_Type)
+         and then Present (Full_View (Desig_Type))
+       then
+          return Full_View (Desig_Type);
+       end if;
+ 
+       if Is_Class_Wide_Type (Desig_Type)
+         and then Is_Incomplete_Type (Etype (Desig_Type))
+         and then Present (Full_View (Etype (Desig_Type)))
+         and then Present (Class_Wide_Type (Full_View (Etype (Desig_Type))))
+       then
+          return Class_Wide_Type (Full_View (Etype (Desig_Type)));
+       end if;
+ 
+       return Desig_Type;
+    end Designated_Type;
+ 
+    ----------------------
+    -- Entry_Index_Type --
+    ----------------------
+ 
+    function Entry_Index_Type (Id : E) return E is
+    begin
+       pragma Assert (Ekind (Id) = E_Entry_Family);
+       return Etype (Discrete_Subtype_Definition (Parent (Id)));
+    end Entry_Index_Type;
+ 
+    ---------------------
+    -- First_Component --
+    ---------------------
+ 
+    function First_Component (Id : E) return E is
+       Comp_Id : Entity_Id;
+ 
+    begin
+       pragma Assert
+         (Is_Concurrent_Type (Id)
+           or else Is_Incomplete_Or_Private_Type (Id)
+           or else Is_Record_Type (Id));
+ 
+       Comp_Id := First_Entity (Id);
+       while Present (Comp_Id) loop
+          exit when Ekind (Comp_Id) = E_Component;
+          Next_Entity (Comp_Id);
+       end loop;
+ 
+       return Comp_Id;
+    end First_Component;
+ 
+    -------------------------------------
+    -- First_Component_Or_Discriminant --
+    -------------------------------------
+ 
+    function First_Component_Or_Discriminant (Id : E) return E is
+       Comp_Id : Entity_Id;
+ 
+    begin
+       pragma Assert
+         (Is_Concurrent_Type (Id)
+           or else Is_Incomplete_Or_Private_Type (Id)
+           or else Is_Record_Type (Id)
+           or else Has_Discriminants (Id));
+ 
+       Comp_Id := First_Entity (Id);
+       while Present (Comp_Id) loop
+          exit when Ekind (Comp_Id) in E_Component | E_Discriminant;
+          Next_Entity (Comp_Id);
+       end loop;
+ 
+       return Comp_Id;
+    end First_Component_Or_Discriminant;
+ 
+    ------------------
+    -- First_Formal --
+    ------------------
+ 
+    function First_Formal (Id : E) return E is
+       Formal : Entity_Id;
+ 
+    begin
+       pragma Assert
+         (Is_Generic_Subprogram (Id)
+            or else Is_Overloadable (Id)
+            or else Ekind (Id) in E_Entry_Family
+                                | E_Subprogram_Body
+                                | E_Subprogram_Type);
+ 
+       if Ekind (Id) = E_Enumeration_Literal then
+          return Empty;
+ 
+       else
+          Formal := First_Entity (Id);
+ 
+          --  Deal with the common, non-generic case first
+ 
+          if No (Formal) or else Is_Formal (Formal) then
+             return Formal;
+          end if;
+ 
+          --  The first/next entity chain of a generic subprogram contains all
+          --  generic formal parameters, followed by the formal parameters.
+ 
+          if Is_Generic_Subprogram (Id) then
+             while Present (Formal) and then not Is_Formal (Formal) loop
+                Next_Entity (Formal);
+             end loop;
+             return Formal;
+          else
+             return Empty;
+          end if;
+       end if;
+    end First_Formal;
+ 
+    ------------------------------
+    -- First_Formal_With_Extras --
+    ------------------------------
+ 
+    function First_Formal_With_Extras (Id : E) return E is
+       Formal : Entity_Id;
+ 
+    begin
+       pragma Assert
+         (Is_Generic_Subprogram (Id)
+            or else Is_Overloadable (Id)
+            or else Ekind (Id) in E_Entry_Family
+                                | E_Subprogram_Body
+                                | E_Subprogram_Type);
+ 
+       if Ekind (Id) = E_Enumeration_Literal then
+          return Empty;
+ 
+       else
+          Formal := First_Entity (Id);
+ 
+          --  The first/next entity chain of a generic subprogram contains all
+          --  generic formal parameters, followed by the formal parameters. Go
+          --  directly to the parameters by skipping the formal part.
+ 
+          if Is_Generic_Subprogram (Id) then
+             while Present (Formal) and then not Is_Formal (Formal) loop
+                Next_Entity (Formal);
+             end loop;
+          end if;
+ 
+          if Present (Formal) and then Is_Formal (Formal) then
+             return Formal;
+          else
+             return Extra_Formals (Id);  -- Empty if no extra formals
+          end if;
+       end if;
+    end First_Formal_With_Extras;
+ 
+    ---------------
+    -- Float_Rep --
+    ---------------
+ 
+    function Float_Rep (N : Entity_Id) return Float_Rep_Kind is
+       pragma Unreferenced (N);
+       pragma Assert (Float_Rep_Kind'First = Float_Rep_Kind'Last);
+ 
+       --  There is only one value, so we don't need to store it, see types.ads.
+ 
+       Val : constant Float_Rep_Kind := IEEE_Binary;
+ 
+    begin
+       return Val;
+    end Float_Rep;
+ 
+    -------------------------------------
+    -- Get_Attribute_Definition_Clause --
+    -------------------------------------
+ 
+    function Get_Attribute_Definition_Clause
+      (E  : Entity_Id;
+       Id : Attribute_Id) return Node_Id
+    is
+       N : Node_Id;
+ 
+    begin
+       N := First_Rep_Item (E);
+       while Present (N) loop
+          if Nkind (N) = N_Attribute_Definition_Clause
+            and then Get_Attribute_Id (Chars (N)) = Id
+          then
+             return N;
+          else
+             Next_Rep_Item (N);
+          end if;
+       end loop;
+ 
+       return Empty;
+    end Get_Attribute_Definition_Clause;
+ 
+    ---------------------------
+    -- Get_Class_Wide_Pragma --
+    ---------------------------
+ 
+    function Get_Class_Wide_Pragma
+      (E  : Entity_Id;
+       Id : Pragma_Id) return Node_Id
+     is
+       Item  : Node_Id;
+       Items : Node_Id;
+ 
+    begin
+       Items := Contract (E);
+ 
+       if No (Items) then
+          return Empty;
+       end if;
+ 
+       Item := Pre_Post_Conditions (Items);
+       while Present (Item) loop
+          if Nkind (Item) = N_Pragma
+            and then Get_Pragma_Id (Pragma_Name_Unmapped (Item)) = Id
+            and then Class_Present (Item)
+          then
+             return Item;
+          end if;
+ 
+          Item := Next_Pragma (Item);
+       end loop;
+ 
+       return Empty;
+    end Get_Class_Wide_Pragma;
+ 
+    -------------------
+    -- Get_Full_View --
+    -------------------
+ 
+    function Get_Full_View (T : Entity_Id) return Entity_Id is
+    begin
+       if Is_Incomplete_Type (T) and then Present (Full_View (T)) then
+          return Full_View (T);
+ 
+       elsif Is_Class_Wide_Type (T)
+         and then Is_Incomplete_Type (Root_Type (T))
+         and then Present (Full_View (Root_Type (T)))
+       then
+          return Class_Wide_Type (Full_View (Root_Type (T)));
+ 
+       else
+          return T;
+       end if;
+    end Get_Full_View;
+ 
+    ----------------
+    -- Get_Pragma --
+    ----------------
+ 
+    function Get_Pragma (E : Entity_Id; Id : Pragma_Id) return Node_Id is
+ 
+       --  Classification pragmas
+ 
+       Is_CLS : constant Boolean :=
+                  Id = Pragma_Abstract_State             or else
+                  Id = Pragma_Attach_Handler             or else
+                  Id = Pragma_Async_Readers              or else
+                  Id = Pragma_Async_Writers              or else
+                  Id = Pragma_Constant_After_Elaboration or else
+                  Id = Pragma_Depends                    or else
+                  Id = Pragma_Effective_Reads            or else
+                  Id = Pragma_Effective_Writes           or else
+                  Id = Pragma_Extensions_Visible         or else
+                  Id = Pragma_Global                     or else
+                  Id = Pragma_Initial_Condition          or else
+                  Id = Pragma_Initializes                or else
+                  Id = Pragma_Interrupt_Handler          or else
+                  Id = Pragma_No_Caching                 or else
+                  Id = Pragma_Part_Of                    or else
+                  Id = Pragma_Refined_Depends            or else
+                  Id = Pragma_Refined_Global             or else
+                  Id = Pragma_Refined_State              or else
+                  Id = Pragma_Volatile_Function;
+ 
+       --  Contract / subprogram variant / test case pragmas
+ 
+       Is_CTC : constant Boolean :=
+                   Id = Pragma_Contract_Cases            or else
+                   Id = Pragma_Subprogram_Variant        or else
+                   Id = Pragma_Test_Case;
+ 
+       --  Pre / postcondition pragmas
+ 
+       Is_PPC : constant Boolean :=
+                   Id = Pragma_Precondition              or else
+                   Id = Pragma_Postcondition             or else
+                   Id = Pragma_Refined_Post;
+ 
+       In_Contract : constant Boolean := Is_CLS or Is_CTC or Is_PPC;
+ 
+       Item  : Node_Id;
+       Items : Node_Id;
+ 
+    begin
+       --  Handle pragmas that appear in N_Contract nodes. Those have to be
+       --  extracted from their specialized list.
+ 
+       if In_Contract then
+          Items := Contract (E);
+ 
+          if No (Items) then
+             return Empty;
+ 
+          elsif Is_CLS then
+             Item := Classifications (Items);
+ 
+          elsif Is_CTC then
+             Item := Contract_Test_Cases (Items);
+ 
+          else
+             Item := Pre_Post_Conditions (Items);
+          end if;
+ 
+       --  Regular pragmas
+ 
+       else
+          Item := First_Rep_Item (E);
+       end if;
+ 
+       while Present (Item) loop
+          if Nkind (Item) = N_Pragma
+            and then Get_Pragma_Id (Pragma_Name_Unmapped (Item)) = Id
+          then
+             return Item;
+ 
+          --  All nodes in N_Contract are chained using Next_Pragma
+ 
+          elsif In_Contract then
+             Item := Next_Pragma (Item);
+ 
+          --  Regular pragmas
+ 
+          else
+             Next_Rep_Item (Item);
+          end if;
+       end loop;
+ 
+       return Empty;
+    end Get_Pragma;
+ 
+    --------------------------------------
+    -- Get_Record_Representation_Clause --
+    --------------------------------------
+ 
+    function Get_Record_Representation_Clause (E : Entity_Id) return Node_Id is
+       N : Node_Id;
+ 
+    begin
+       N := First_Rep_Item (E);
+       while Present (N) loop
+          if Nkind (N) = N_Record_Representation_Clause then
+             return N;
+          end if;
+ 
+          Next_Rep_Item (N);
+       end loop;
+ 
+       return Empty;
+    end Get_Record_Representation_Clause;
+ 
+    ------------------------
+    -- Has_Attach_Handler --
+    ------------------------
+ 
+    function Has_Attach_Handler (Id : E) return B is
+       Ritem : Node_Id;
+ 
+    begin
+       pragma Assert (Is_Protected_Type (Id));
+ 
+       Ritem := First_Rep_Item (Id);
+       while Present (Ritem) loop
+          if Nkind (Ritem) = N_Pragma
+            and then Pragma_Name (Ritem) = Name_Attach_Handler
+          then
+             return True;
+          else
+             Next_Rep_Item (Ritem);
+          end if;
+       end loop;
+ 
+       return False;
+    end Has_Attach_Handler;
+ 
+    -------------
+    -- Has_DIC --
+    -------------
+ 
+    function Has_DIC (Id : E) return B is
+    begin
+       return Has_Own_DIC (Id) or else Has_Inherited_DIC (Id);
+    end Has_DIC;
+ 
+    -----------------
+    -- Has_Entries --
+    -----------------
+ 
+    function Has_Entries (Id : E) return B is
+       Ent : Entity_Id;
+ 
+    begin
+       pragma Assert (Is_Concurrent_Type (Id));
+ 
+       Ent := First_Entity (Id);
+       while Present (Ent) loop
+          if Is_Entry (Ent) then
+             return True;
+          end if;
+ 
+          Next_Entity (Ent);
+       end loop;
+ 
+       return False;
+    end Has_Entries;
+ 
+    ----------------------------
+    -- Has_Foreign_Convention --
+    ----------------------------
+ 
+    function Has_Foreign_Convention (Id : E) return B is
+    begin
+       --  While regular Intrinsics such as the Standard operators fit in the
+       --  "Ada" convention, those with an Interface_Name materialize GCC
+       --  builtin imports for which Ada special treatments shouldn't apply.
+ 
+       return Convention (Id) in Foreign_Convention
+         or else (Convention (Id) = Convention_Intrinsic
+                    and then Present (Interface_Name (Id)));
+    end Has_Foreign_Convention;
+ 
+    ---------------------------
+    -- Has_Interrupt_Handler --
+    ---------------------------
+ 
+    function Has_Interrupt_Handler (Id : E) return B is
+       Ritem : Node_Id;
+ 
+    begin
+       pragma Assert (Is_Protected_Type (Id));
+ 
+       Ritem := First_Rep_Item (Id);
+       while Present (Ritem) loop
+          if Nkind (Ritem) = N_Pragma
+            and then Pragma_Name (Ritem) = Name_Interrupt_Handler
+          then
+             return True;
+          else
+             Next_Rep_Item (Ritem);
+          end if;
+       end loop;
+ 
+       return False;
+    end Has_Interrupt_Handler;
+ 
+    --------------------
+    -- Has_Invariants --
+    --------------------
+ 
+    function Has_Invariants (Id : E) return B is
+    begin
+       return Has_Own_Invariants (Id) or else Has_Inherited_Invariants (Id);
+    end Has_Invariants;
+ 
+    --------------------------
+    -- Has_Limited_View --
+    --------------------------
+ 
+    function Has_Limited_View (Id : E) return B is
+    begin
+       return Ekind (Id) = E_Package
+         and then not Is_Generic_Instance (Id)
+         and then Present (Limited_View (Id));
+    end Has_Limited_View;
+ 
+    --------------------------
+    -- Has_Non_Limited_View --
+    --------------------------
+ 
+    function Has_Non_Limited_View (Id : E) return B is
+    begin
+       return (Ekind (Id) in Incomplete_Kind
+                or else Ekind (Id) in Class_Wide_Kind
+                or else Ekind (Id) = E_Abstract_State)
+         and then Present (Non_Limited_View (Id));
+    end Has_Non_Limited_View;
+ 
+    ---------------------------------
+    -- Has_Non_Null_Abstract_State --
+    ---------------------------------
+ 
+    function Has_Non_Null_Abstract_State (Id : E) return B is
+    begin
+       pragma Assert (Is_Package_Or_Generic_Package (Id));
+ 
+       return
+         Present (Abstract_States (Id))
+           and then
+             not Is_Null_State (Node (First_Elmt (Abstract_States (Id))));
+    end Has_Non_Null_Abstract_State;
+ 
+    -------------------------------------
+    -- Has_Non_Null_Visible_Refinement --
+    -------------------------------------
+ 
+    function Has_Non_Null_Visible_Refinement (Id : E) return B is
+       Constits : Elist_Id;
+ 
+    begin
+       --  "Refinement" is a concept applicable only to abstract states
+ 
+       pragma Assert (Ekind (Id) = E_Abstract_State);
+       Constits := Refinement_Constituents (Id);
+ 
+       --  A partial refinement is always non-null. For a full refinement to be
+       --  non-null, the first constituent must be anything other than null.
+ 
+       return
+         Has_Partial_Visible_Refinement (Id)
+           or else (Has_Visible_Refinement (Id)
+                     and then Present (Constits)
+                     and then Nkind (Node (First_Elmt (Constits))) /= N_Null);
+    end Has_Non_Null_Visible_Refinement;
+ 
+    -----------------------------
+    -- Has_Null_Abstract_State --
+    -----------------------------
+ 
+    function Has_Null_Abstract_State (Id : E) return B is
+       pragma Assert (Is_Package_Or_Generic_Package (Id));
+ 
+       States : constant Elist_Id := Abstract_States (Id);
+ 
+    begin
+       --  Check first available state of related package. A null abstract
+       --  state always appears as the sole element of the state list.
+ 
+       return
+         Present (States)
+           and then Is_Null_State (Node (First_Elmt (States)));
+    end Has_Null_Abstract_State;
+ 
+    ---------------------------------
+    -- Has_Null_Visible_Refinement --
+    ---------------------------------
+ 
+    function Has_Null_Visible_Refinement (Id : E) return B is
+       Constits : Elist_Id;
+ 
+    begin
+       --  "Refinement" is a concept applicable only to abstract states
+ 
+       pragma Assert (Ekind (Id) = E_Abstract_State);
+       Constits := Refinement_Constituents (Id);
+ 
+       --  For a refinement to be null, the state's sole constituent must be a
+       --  null.
+ 
+       return
+         Has_Visible_Refinement (Id)
+           and then Present (Constits)
+           and then Nkind (Node (First_Elmt (Constits))) = N_Null;
+    end Has_Null_Visible_Refinement;
+ 
+    --------------------
+    -- Has_Unmodified --
+    --------------------
+ 
+    function Has_Unmodified (E : Entity_Id) return Boolean is
+    begin
+       if Has_Pragma_Unmodified (E) then
+          return True;
+       elsif Warnings_Off (E) then
+          Set_Warnings_Off_Used_Unmodified (E);
+          return True;
+       else
+          return False;
+       end if;
+    end Has_Unmodified;
+ 
+    ---------------------
+    -- Has_Unreferenced --
+    ---------------------
+ 
+    function Has_Unreferenced (E : Entity_Id) return Boolean is
+    begin
+       if Has_Pragma_Unreferenced (E) then
+          return True;
+       elsif Warnings_Off (E) then
+          Set_Warnings_Off_Used_Unreferenced (E);
+          return True;
+       else
+          return False;
+       end if;
+    end Has_Unreferenced;
+ 
+    ----------------------
+    -- Has_Warnings_Off --
+    ----------------------
+ 
+    function Has_Warnings_Off (E : Entity_Id) return Boolean is
+    begin
+       if Warnings_Off (E) then
+          Set_Warnings_Off_Used (E);
+          return True;
+       else
+          return False;
+       end if;
+    end Has_Warnings_Off;
+ 
+    ------------------------------
+    -- Implementation_Base_Type --
+    ------------------------------
+ 
+    function Implementation_Base_Type (Id : E) return E is
+       Bastyp : Entity_Id;
+       Imptyp : Entity_Id;
+ 
+    begin
+       Bastyp := Base_Type (Id);
+ 
+       if Is_Incomplete_Or_Private_Type (Bastyp) then
+          Imptyp := Underlying_Type (Bastyp);
+ 
+          --  If we have an implementation type, then just return it,
+          --  otherwise we return the Base_Type anyway. This can only
+          --  happen in error situations and should avoid some error bombs.
+ 
+          if Present (Imptyp) then
+             return Base_Type (Imptyp);
+          else
+             return Bastyp;
+          end if;
+ 
+       else
+          return Bastyp;
+       end if;
+    end Implementation_Base_Type;
+ 
+    -------------------------
+    -- Invariant_Procedure --
+    -------------------------
+ 
+    function Invariant_Procedure (Id : E) return E is
+       Subp_Elmt : Elmt_Id;
+       Subp_Id   : Entity_Id;
+       Subps     : Elist_Id;
+ 
+    begin
+       pragma Assert (Is_Type (Id));
+ 
+       Subps := Subprograms_For_Type (Base_Type (Id));
+ 
+       if Present (Subps) then
+          Subp_Elmt := First_Elmt (Subps);
+          while Present (Subp_Elmt) loop
+             Subp_Id := Node (Subp_Elmt);
+ 
+             if Is_Invariant_Procedure (Subp_Id) then
+                return Subp_Id;
+             end if;
+ 
+             Next_Elmt (Subp_Elmt);
+          end loop;
+       end if;
+ 
+       return Empty;
+    end Invariant_Procedure;
+ 
+    ------------------
+    -- Is_Base_Type --
+    ------------------
+ 
+    --  Global flag table allowing rapid computation of this function
+ 
+    Entity_Is_Base_Type : constant array (Entity_Kind) of Boolean :=
+      (E_Enumeration_Subtype          |
+       E_Incomplete_Subtype           |
+       E_Signed_Integer_Subtype       |
+       E_Modular_Integer_Subtype      |
+       E_Floating_Point_Subtype       |
+       E_Ordinary_Fixed_Point_Subtype |
+       E_Decimal_Fixed_Point_Subtype  |
+       E_Array_Subtype                |
+       E_Record_Subtype               |
+       E_Private_Subtype              |
+       E_Record_Subtype_With_Private  |
+       E_Limited_Private_Subtype      |
+       E_Access_Subtype               |
+       E_Protected_Subtype            |
+       E_Task_Subtype                 |
+       E_String_Literal_Subtype       |
+       E_Class_Wide_Subtype           => False,
+       others                         => True);
+ 
+    function Is_Base_Type (Id : E) return Boolean is
+    begin
+       return Entity_Is_Base_Type (Ekind (Id));
+    end Is_Base_Type;
+ 
+    ---------------------
+    -- Is_Boolean_Type --
+    ---------------------
+ 
+    function Is_Boolean_Type (Id : E) return B is
+    begin
+       return Root_Type (Id) = Standard_Boolean;
+    end Is_Boolean_Type;
+ 
+    ------------------------
+    -- Is_Constant_Object --
+    ------------------------
+ 
+    function Is_Constant_Object (Id : E) return B is
+    begin
+       return Ekind (Id) in E_Constant | E_In_Parameter | E_Loop_Parameter;
+    end Is_Constant_Object;
+ 
+    -------------------
+    -- Is_Controlled --
+    -------------------
+ 
+    function Is_Controlled (Id : E) return B is
+    begin
+       return Is_Controlled_Active (Id) and then not Disable_Controlled (Id);
+    end Is_Controlled;
+ 
+    --------------------
+    -- Is_Discriminal --
+    --------------------
+ 
+    function Is_Discriminal (Id : E) return B is
+    begin
+       return Ekind (Id) in E_Constant | E_In_Parameter
+                and then Present (Discriminal_Link (Id));
+    end Is_Discriminal;
+ 
+    ----------------------
+    -- Is_Dynamic_Scope --
+    ----------------------
+ 
+    function Is_Dynamic_Scope (Id : E) return B is
+    begin
+       return Ekind (Id) in E_Block
+       --  Including an E_Block that came from an N_Expression_With_Actions
+                          | E_Entry
+                          | E_Entry_Family
+                          | E_Function
+                          | E_Procedure
+                          | E_Return_Statement
+                          | E_Subprogram_Body
+                          | E_Task_Type
+           or else
+         (Ekind (Id) = E_Limited_Private_Type
+           and then Present (Full_View (Id))
+           and then Ekind (Full_View (Id)) = E_Task_Type);
+    end Is_Dynamic_Scope;
+ 
+    --------------------
+    -- Is_Entity_Name --
+    --------------------
+ 
+    function Is_Entity_Name (N : Node_Id) return Boolean is
+       Kind : constant Node_Kind := Nkind (N);
+ 
+    begin
+       --  Identifiers, operator symbols, expanded names are entity names
+ 
+       return Kind = N_Identifier
+         or else Kind = N_Operator_Symbol
+         or else Kind = N_Expanded_Name
+ 
+       --  Attribute references are entity names if they refer to an entity.
+       --  Note that we don't do this by testing for the presence of the
+       --  Entity field in the N_Attribute_Reference node, since it may not
+       --  have been set yet.
+ 
+         or else (Kind = N_Attribute_Reference
+                   and then Is_Entity_Attribute_Name (Attribute_Name (N)));
+    end Is_Entity_Name;
+ 
+    ---------------------------
+    -- Is_Elaboration_Target --
+    ---------------------------
+ 
+    function Is_Elaboration_Target (Id : Entity_Id) return Boolean is
+    begin
+       return
+         Ekind (Id) in E_Constant | E_Package | E_Variable
+           or else Is_Entry        (Id)
+           or else Is_Generic_Unit (Id)
+           or else Is_Subprogram   (Id)
+           or else Is_Task_Type    (Id);
+    end Is_Elaboration_Target;
+ 
+    -----------------------
+    -- Is_External_State --
+    -----------------------
+ 
+    function Is_External_State (Id : E) return B is
+    begin
+       --  To qualify, the abstract state must appear with option "external" or
+       --  "synchronous" (SPARK RM 7.1.4(7) and (9)).
+ 
+       return
+         Ekind (Id) = E_Abstract_State
+           and then (Has_Option (Id, Name_External)
+                       or else
+                     Has_Option (Id, Name_Synchronous));
+    end Is_External_State;
+ 
+    ------------------
+    -- Is_Finalizer --
+    ------------------
+ 
+    function Is_Finalizer (Id : E) return B is
+    begin
+       return Ekind (Id) = E_Procedure and then Chars (Id) = Name_uFinalizer;
+    end Is_Finalizer;
+ 
+    ----------------------
+    -- Is_Full_Access --
+    ----------------------
+ 
+    function Is_Full_Access (Id : E) return B is
+    begin
+       return Is_Atomic (Id) or else Is_Volatile_Full_Access (Id);
+    end Is_Full_Access;
+ 
+    -------------------
+    -- Is_Null_State --
+    -------------------
+ 
+    function Is_Null_State (Id : E) return B is
+    begin
+       return
+         Ekind (Id) = E_Abstract_State and then Nkind (Parent (Id)) = N_Null;
+    end Is_Null_State;
+ 
+    -----------------------------------
+    -- Is_Package_Or_Generic_Package --
+    -----------------------------------
+ 
+    function Is_Package_Or_Generic_Package (Id : E) return B is
+    begin
+       return Ekind (Id) in E_Generic_Package | E_Package;
+    end Is_Package_Or_Generic_Package;
+ 
+    ---------------------
+    -- Is_Packed_Array --
+    ---------------------
+ 
+    function Is_Packed_Array (Id : E) return B is
+    begin
+       return Is_Array_Type (Id) and then Is_Packed (Id);
+    end Is_Packed_Array;
+ 
+    ---------------
+    -- Is_Prival --
+    ---------------
+ 
+    function Is_Prival (Id : E) return B is
+    begin
+       return Ekind (Id) in E_Constant | E_Variable
+                and then Present (Prival_Link (Id));
+    end Is_Prival;
+ 
+    ----------------------------
+    -- Is_Protected_Component --
+    ----------------------------
+ 
+    function Is_Protected_Component (Id : E) return B is
+    begin
+       return Ekind (Id) = E_Component and then Is_Protected_Type (Scope (Id));
+    end Is_Protected_Component;
+ 
+    ----------------------------
+    -- Is_Protected_Interface --
+    ----------------------------
+ 
+    function Is_Protected_Interface (Id : E) return B is
+       Typ : constant Entity_Id := Base_Type (Id);
+    begin
+       if not Is_Interface (Typ) then
+          return False;
+       elsif Is_Class_Wide_Type (Typ) then
+          return Is_Protected_Interface (Etype (Typ));
+       else
+          return Protected_Present (Type_Definition (Parent (Typ)));
+       end if;
+    end Is_Protected_Interface;
+ 
+    ------------------------------
+    -- Is_Protected_Record_Type --
+    ------------------------------
+ 
+    function Is_Protected_Record_Type (Id : E) return B is
+    begin
+       return
+         Is_Concurrent_Record_Type (Id)
+           and then Is_Protected_Type (Corresponding_Concurrent_Type (Id));
+    end Is_Protected_Record_Type;
+ 
+    -------------------------------------
+    -- Is_Relaxed_Initialization_State --
+    -------------------------------------
+ 
+    function Is_Relaxed_Initialization_State (Id : E) return B is
+    begin
+       --  To qualify, the abstract state must appear with simple option
+       --  "Relaxed_Initialization" (SPARK RM 6.10).
+ 
+       return
+         Ekind (Id) = E_Abstract_State
+           and then Has_Option (Id, Name_Relaxed_Initialization);
+    end Is_Relaxed_Initialization_State;
+ 
+    --------------------------------
+    -- Is_Standard_Character_Type --
+    --------------------------------
+ 
+    function Is_Standard_Character_Type (Id : E) return B is
+    begin
+       return Is_Type (Id)
+         and then Root_Type (Id) in Standard_Character
+                                  | Standard_Wide_Character
+                                  | Standard_Wide_Wide_Character;
+    end Is_Standard_Character_Type;
+ 
+    -----------------------------
+    -- Is_Standard_String_Type --
+    -----------------------------
+ 
+    function Is_Standard_String_Type (Id : E) return B is
+    begin
+       return Is_Type (Id)
+         and then Root_Type (Id) in Standard_String
+                                  | Standard_Wide_String
+                                  | Standard_Wide_Wide_String;
+    end Is_Standard_String_Type;
+ 
+    --------------------
+    -- Is_String_Type --
+    --------------------
+ 
+    function Is_String_Type (Id : E) return B is
+    begin
+       return Is_Array_Type (Id)
+         and then Id /= Any_Composite
+         and then Number_Dimensions (Id) = 1
+         and then Is_Character_Type (Component_Type (Id));
+    end Is_String_Type;
+ 
+    -------------------------------
+    -- Is_Synchronized_Interface --
+    -------------------------------
+ 
+    function Is_Synchronized_Interface (Id : E) return B is
+       Typ : constant Entity_Id := Base_Type (Id);
+ 
+    begin
+       if not Is_Interface (Typ) then
+          return False;
+ 
+       elsif Is_Class_Wide_Type (Typ) then
+          return Is_Synchronized_Interface (Etype (Typ));
+ 
+       else
+          return    Protected_Present    (Type_Definition (Parent (Typ)))
+            or else Synchronized_Present (Type_Definition (Parent (Typ)))
+            or else Task_Present         (Type_Definition (Parent (Typ)));
+       end if;
+    end Is_Synchronized_Interface;
+ 
+    ---------------------------
+    -- Is_Synchronized_State --
+    ---------------------------
+ 
+    function Is_Synchronized_State (Id : E) return B is
+    begin
+       --  To qualify, the abstract state must appear with simple option
+       --  "synchronous" (SPARK RM 7.1.4(9)).
+ 
+       return
+         Ekind (Id) = E_Abstract_State
+           and then Has_Option (Id, Name_Synchronous);
+    end Is_Synchronized_State;
+ 
+    -----------------------
+    -- Is_Task_Interface --
+    -----------------------
+ 
+    function Is_Task_Interface (Id : E) return B is
+       Typ : constant Entity_Id := Base_Type (Id);
+    begin
+       if not Is_Interface (Typ) then
+          return False;
+       elsif Is_Class_Wide_Type (Typ) then
+          return Is_Task_Interface (Etype (Typ));
+       else
+          return Task_Present (Type_Definition (Parent (Typ)));
+       end if;
+    end Is_Task_Interface;
+ 
+    -------------------------
+    -- Is_Task_Record_Type --
+    -------------------------
+ 
+    function Is_Task_Record_Type (Id : E) return B is
+    begin
+       return
+         Is_Concurrent_Record_Type (Id)
+           and then Is_Task_Type (Corresponding_Concurrent_Type (Id));
+    end Is_Task_Record_Type;
+ 
+    ------------------------
+    -- Is_Wrapper_Package --
+    ------------------------
+ 
+    function Is_Wrapper_Package (Id : E) return B is
+    begin
+       return Ekind (Id) = E_Package and then Present (Related_Instance (Id));
+    end Is_Wrapper_Package;
+ 
+    -----------------
+    -- Last_Formal --
+    -----------------
+ 
+    function Last_Formal (Id : E) return E is
+       Formal : Entity_Id;
+ 
+    begin
+       pragma Assert
+         (Is_Overloadable (Id)
+           or else Ekind (Id) in E_Entry_Family
+                               | E_Subprogram_Body
+                               | E_Subprogram_Type);
+ 
+       if Ekind (Id) = E_Enumeration_Literal then
+          return Empty;
+ 
+       else
+          Formal := First_Formal (Id);
+ 
+          if Present (Formal) then
+             while Present (Next_Formal (Formal)) loop
+                Next_Formal (Formal);
+             end loop;
+          end if;
+ 
+          return Formal;
+       end if;
+    end Last_Formal;
+ 
+    -------------------
+    -- Link_Entities --
+    -------------------
+ 
+    procedure Link_Entities (First, Second : Entity_Id) is
+    begin
+       if Present (Second) then
+          Set_Prev_Entity (Second, First);  --  First <-- Second
+       end if;
+ 
+       Set_Next_Entity (First, Second);     --  First --> Second
+    end Link_Entities;
+ 
+    ------------------------
+    -- Machine_Emax_Value --
+    ------------------------
+ 
+    function Machine_Emax_Value (Id : E) return Uint is
+       Digs : constant Pos := UI_To_Int (Digits_Value (Base_Type (Id)));
+ 
+    begin
+       case Float_Rep (Id) is
+          when IEEE_Binary =>
+             case Digs is
+                when  1 ..  6 => return Uint_128;
+                when  7 .. 15 => return 2**10;
+                when 16 .. 33 => return 2**14;
+                when others   => return No_Uint;
+             end case;
+       end case;
+    end Machine_Emax_Value;
+ 
+    ------------------------
+    -- Machine_Emin_Value --
+    ------------------------
+ 
+    function Machine_Emin_Value (Id : E) return Uint is
+    begin
+       case Float_Rep (Id) is
+          when IEEE_Binary => return Uint_3 - Machine_Emax_Value (Id);
+       end case;
+    end Machine_Emin_Value;
+ 
+    ----------------------------
+    -- Machine_Mantissa_Value --
+    ----------------------------
+ 
+    function Machine_Mantissa_Value (Id : E) return Uint is
+       Digs : constant Pos := UI_To_Int (Digits_Value (Base_Type (Id)));
+ 
+    begin
+       case Float_Rep (Id) is
+          when IEEE_Binary =>
+             case Digs is
+                when  1 ..  6 => return Uint_24;
+                when  7 .. 15 => return UI_From_Int (53);
+                when 16 .. 18 => return Uint_64;
+                when 19 .. 33 => return UI_From_Int (113);
+                when others   => return No_Uint;
+             end case;
+       end case;
+    end Machine_Mantissa_Value;
+ 
+    -------------------------
+    -- Machine_Radix_Value --
+    -------------------------
+ 
+    function Machine_Radix_Value (Id : E) return U is
+    begin
+       case Float_Rep (Id) is
+          when IEEE_Binary =>
+             return Uint_2;
+       end case;
+    end Machine_Radix_Value;
+ 
+    ----------------------
+    -- Model_Emin_Value --
+    ----------------------
+ 
+    function Model_Emin_Value (Id : E) return Uint is
+    begin
+       return Machine_Emin_Value (Id);
+    end Model_Emin_Value;
+ 
+    -------------------------
+    -- Model_Epsilon_Value --
+    -------------------------
+ 
+    function Model_Epsilon_Value (Id : E) return Ureal is
+       Radix : constant Ureal := UR_From_Uint (Machine_Radix_Value (Id));
+    begin
+       return Radix ** (1 - Model_Mantissa_Value (Id));
+    end Model_Epsilon_Value;
+ 
+    --------------------------
+    -- Model_Mantissa_Value --
+    --------------------------
+ 
+    function Model_Mantissa_Value (Id : E) return Uint is
+    begin
+       return Machine_Mantissa_Value (Id);
+    end Model_Mantissa_Value;
+ 
+    -----------------------
+    -- Model_Small_Value --
+    -----------------------
+ 
+    function Model_Small_Value (Id : E) return Ureal is
+       Radix : constant Ureal := UR_From_Uint (Machine_Radix_Value (Id));
+    begin
+       return Radix ** (Model_Emin_Value (Id) - 1);
+    end Model_Small_Value;
+ 
+    --------------------
+    -- Next_Component --
+    --------------------
+ 
+    function Next_Component (Id : E) return E is
+       Comp_Id : Entity_Id;
+ 
+    begin
+       Comp_Id := Next_Entity (Id);
+       while Present (Comp_Id) loop
+          exit when Ekind (Comp_Id) = E_Component;
+          Next_Entity (Comp_Id);
+       end loop;
+ 
+       return Comp_Id;
+    end Next_Component;
+ 
+    ------------------------------------
+    -- Next_Component_Or_Discriminant --
+    ------------------------------------
+ 
+    function Next_Component_Or_Discriminant (Id : E) return E is
+       Comp_Id : Entity_Id;
+ 
+    begin
+       Comp_Id := Next_Entity (Id);
+       while Present (Comp_Id) loop
+          exit when Ekind (Comp_Id) in E_Component | E_Discriminant;
+          Next_Entity (Comp_Id);
+       end loop;
+ 
+       return Comp_Id;
+    end Next_Component_Or_Discriminant;
+ 
+    -----------------------
+    -- Next_Discriminant --
+    -----------------------
+ 
+    --  This function actually implements both Next_Discriminant and
+    --  Next_Stored_Discriminant by making sure that the Discriminant
+    --  returned is of the same variety as Id.
+ 
+    function Next_Discriminant (Id : E) return E is
+ 
+       --  Derived Tagged types with private extensions look like this...
+ 
+       --       E_Discriminant d1
+       --       E_Discriminant d2
+       --       E_Component    _tag
+       --       E_Discriminant d1
+       --       E_Discriminant d2
+       --       ...
+ 
+       --  so it is critical not to go past the leading discriminants
+ 
+       D : E := Id;
+ 
+    begin
+       pragma Assert (Ekind (Id) = E_Discriminant);
+ 
+       loop
+          Next_Entity (D);
+          if No (D)
+            or else (Ekind (D) /= E_Discriminant
+                       and then not Is_Itype (D))
+          then
+             return Empty;
+          end if;
+ 
+          exit when Ekind (D) = E_Discriminant
+            and then (Is_Completely_Hidden (D) = Is_Completely_Hidden (Id));
+       end loop;
+ 
+       return D;
+    end Next_Discriminant;
+ 
+    -----------------
+    -- Next_Formal --
+    -----------------
+ 
+    function Next_Formal (Id : E) return E is
+       P : Entity_Id;
+ 
+    begin
+       --  Follow the chain of declared entities as long as the kind of the
+       --  entity corresponds to a formal parameter. Skip internal entities
+       --  that may have been created for implicit subtypes, in the process
+       --  of analyzing default expressions.
+ 
+       P := Id;
+       loop
+          Next_Entity (P);
+ 
+          if No (P) or else Is_Formal (P) then
+             return P;
+          elsif not Is_Internal (P) then
+             return Empty;
+          end if;
+       end loop;
+    end Next_Formal;
+ 
+    -----------------------------
+    -- Next_Formal_With_Extras --
+    -----------------------------
+ 
+    function Next_Formal_With_Extras (Id : E) return E is
+    begin
+       if Present (Extra_Formal (Id)) then
+          return Extra_Formal (Id);
+       else
+          return Next_Formal (Id);
+       end if;
+    end Next_Formal_With_Extras;
+ 
+    ----------------
+    -- Next_Index --
+    ----------------
+ 
+    function Next_Index (Id : Node_Id) return Node_Id is
+    begin
+       pragma Assert (Nkind (Id) in N_Is_Index);
+       pragma Assert (No (Next (Id)) or else Nkind (Next (Id)) in N_Is_Index);
+       return Next (Id);
+    end Next_Index;
+ 
+    ------------------
+    -- Next_Literal --
+    ------------------
+ 
+    function Next_Literal (Id : E) return E is
+    begin
+       pragma Assert (Nkind (Id) in N_Entity);
+       return Next (Id);
+    end Next_Literal;
+ 
+    ------------------------------
+    -- Next_Stored_Discriminant --
+    ------------------------------
+ 
+    function Next_Stored_Discriminant (Id : E) return E is
+    begin
+       --  See comment in Next_Discriminant
+ 
+       return Next_Discriminant (Id);
+    end Next_Stored_Discriminant;
+ 
+    -----------------------
+    -- Number_Dimensions --
+    -----------------------
+ 
+    function Number_Dimensions (Id : E) return Pos is
+       N : Int;
+       T : Node_Id;
+ 
+    begin
+       if Ekind (Id) = E_String_Literal_Subtype then
+          return 1;
+ 
+       else
+          N := 0;
+          T := First_Index (Id);
+          while Present (T) loop
+             N := N + 1;
+             Next_Index (T);
+          end loop;
+ 
+          return N;
+       end if;
+    end Number_Dimensions;
+ 
+    --------------------
+    -- Number_Entries --
+    --------------------
+ 
+    function Number_Entries (Id : E) return Nat is
+       N   : Int;
+       Ent : Entity_Id;
+ 
+    begin
+       pragma Assert (Is_Concurrent_Type (Id));
+ 
+       N := 0;
+       Ent := First_Entity (Id);
+       while Present (Ent) loop
+          if Is_Entry (Ent) then
+             N := N + 1;
+          end if;
+ 
+          Next_Entity (Ent);
+       end loop;
+ 
+       return N;
+    end Number_Entries;
+ 
+    --------------------
+    -- Number_Formals --
+    --------------------
+ 
+    function Number_Formals (Id : E) return Pos is
+       N      : Int;
+       Formal : Entity_Id;
+ 
+    begin
+       N := 0;
+       Formal := First_Formal (Id);
+       while Present (Formal) loop
+          N := N + 1;
+          Next_Formal (Formal);
+       end loop;
+ 
+       return N;
+    end Number_Formals;
+ 
+    ------------------------
+    -- Object_Size_Clause --
+    ------------------------
+ 
+    function Object_Size_Clause (Id : E) return N is
+    begin
+       return Get_Attribute_Definition_Clause (Id, Attribute_Object_Size);
+    end Object_Size_Clause;
+ 
+    --------------------
+    -- Parameter_Mode --
+    --------------------
+ 
+    function Parameter_Mode (Id : E) return Formal_Kind is
+    begin
+       return Ekind (Id);
+    end Parameter_Mode;
+ 
+    -------------------
+    -- DIC_Procedure --
+    -------------------
+ 
+    function DIC_Procedure (Id : E) return E is
+       Subp_Elmt : Elmt_Id;
+       Subp_Id   : Entity_Id;
+       Subps     : Elist_Id;
+ 
+    begin
+       pragma Assert (Is_Type (Id));
+ 
+       Subps := Subprograms_For_Type (Base_Type (Id));
+ 
+       if Present (Subps) then
+          Subp_Elmt := First_Elmt (Subps);
+          while Present (Subp_Elmt) loop
+             Subp_Id := Node (Subp_Elmt);
+ 
+             --  Currently the flag Is_DIC_Procedure is set for both normal DIC
+             --  check procedures as well as for partial DIC check procedures,
+             --  and we don't have a flag for the partial procedures.
+ 
+             if Is_DIC_Procedure (Subp_Id)
+               and then not Is_Partial_DIC_Procedure (Subp_Id)
+             then
+                return Subp_Id;
+             end if;
+ 
+             Next_Elmt (Subp_Elmt);
+          end loop;
+       end if;
+ 
+       return Empty;
+    end DIC_Procedure;
+ 
+    function Partial_DIC_Procedure (Id : E) return E is
+       Subp_Elmt : Elmt_Id;
+       Subp_Id   : Entity_Id;
+       Subps     : Elist_Id;
+ 
+    begin
+       pragma Assert (Is_Type (Id));
+ 
+       Subps := Subprograms_For_Type (Base_Type (Id));
+ 
+       if Present (Subps) then
+          Subp_Elmt := First_Elmt (Subps);
+          while Present (Subp_Elmt) loop
+             Subp_Id := Node (Subp_Elmt);
+ 
+             if Is_Partial_DIC_Procedure (Subp_Id) then
+                return Subp_Id;
+             end if;
+ 
+             Next_Elmt (Subp_Elmt);
+          end loop;
+       end if;
+ 
+       return Empty;
+    end Partial_DIC_Procedure;
+ 
+    function Is_Partial_DIC_Procedure (Id : E) return B is
+       Partial_DIC_Suffix : constant String := "Partial_DIC";
+       DIC_Nam            : constant String := Get_Name_String (Chars (Id));
+ 
+    begin
+       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
+ 
+       --  Instead of adding a new Entity_Id flag (which are in short supply),
+       --  we test the form of the subprogram name. When the node field and flag
+       --  situation is eased, this should be replaced with a flag. ???
+ 
+       if DIC_Nam'Length > Partial_DIC_Suffix'Length
+         and then
+           DIC_Nam
+             (DIC_Nam'Last - Partial_DIC_Suffix'Length + 1 .. DIC_Nam'Last) =
+                Partial_DIC_Suffix
+       then
+          return True;
+       else
+          return False;
+       end if;
+    end Is_Partial_DIC_Procedure;
+ 
+    ---------------------------------
+    -- Partial_Invariant_Procedure --
+    ---------------------------------
+ 
+    function Partial_Invariant_Procedure (Id : E) return E is
+       Subp_Elmt : Elmt_Id;
+       Subp_Id   : Entity_Id;
+       Subps     : Elist_Id;
+ 
+    begin
+       pragma Assert (Is_Type (Id));
+ 
+       Subps := Subprograms_For_Type (Base_Type (Id));
+ 
+       if Present (Subps) then
+          Subp_Elmt := First_Elmt (Subps);
+          while Present (Subp_Elmt) loop
+             Subp_Id := Node (Subp_Elmt);
+ 
+             if Is_Partial_Invariant_Procedure (Subp_Id) then
+                return Subp_Id;
+             end if;
+ 
+             Next_Elmt (Subp_Elmt);
+          end loop;
+       end if;
+ 
+       return Empty;
+    end Partial_Invariant_Procedure;
+ 
+    -------------------------------------
+    -- Partial_Refinement_Constituents --
+    -------------------------------------
+ 
+    function Partial_Refinement_Constituents (Id : E) return L is
+       Constits : Elist_Id := No_Elist;
+ 
+       procedure Add_Usable_Constituents (Item : E);
+       --  Add global item Item and/or its constituents to list Constits when
+       --  they can be used in a global refinement within the current scope. The
+       --  criteria are:
+       --    1) If Item is an abstract state with full refinement visible, add
+       --       its constituents.
+       --    2) If Item is an abstract state with only partial refinement
+       --       visible, add both Item and its constituents.
+       --    3) If Item is an abstract state without a visible refinement, add
+       --       it.
+       --    4) If Id is not an abstract state, add it.
+ 
+       procedure Add_Usable_Constituents (List : Elist_Id);
+       --  Apply Add_Usable_Constituents to every constituent in List
+ 
+       -----------------------------
+       -- Add_Usable_Constituents --
+       -----------------------------
+ 
+       procedure Add_Usable_Constituents (Item : E) is
+       begin
+          if Ekind (Item) = E_Abstract_State then
+             if Has_Visible_Refinement (Item) then
+                Add_Usable_Constituents (Refinement_Constituents (Item));
+ 
+             elsif Has_Partial_Visible_Refinement (Item) then
+                Append_New_Elmt (Item, Constits);
+                Add_Usable_Constituents (Part_Of_Constituents (Item));
+ 
+             else
+                Append_New_Elmt (Item, Constits);
+             end if;
+ 
+          else
+             Append_New_Elmt (Item, Constits);
+          end if;
+       end Add_Usable_Constituents;
+ 
+       procedure Add_Usable_Constituents (List : Elist_Id) is
+          Constit_Elmt : Elmt_Id;
+       begin
+          if Present (List) then
+             Constit_Elmt := First_Elmt (List);
+             while Present (Constit_Elmt) loop
+                Add_Usable_Constituents (Node (Constit_Elmt));
+                Next_Elmt (Constit_Elmt);
+             end loop;
+          end if;
+       end Add_Usable_Constituents;
+ 
+    --  Start of processing for Partial_Refinement_Constituents
+ 
+    begin
+       --  "Refinement" is a concept applicable only to abstract states
+ 
+       pragma Assert (Ekind (Id) = E_Abstract_State);
+ 
+       if Has_Visible_Refinement (Id) then
+          Constits := Refinement_Constituents (Id);
+ 
+       --  A refinement may be partially visible when objects declared in the
+       --  private part of a package are subject to a Part_Of indicator.
+ 
+       elsif Has_Partial_Visible_Refinement (Id) then
+          Add_Usable_Constituents (Part_Of_Constituents (Id));
+ 
+       --  Function should only be called when full or partial refinement is
+       --  visible.
+ 
+       else
+          raise Program_Error;
+       end if;
+ 
+       return Constits;
+    end Partial_Refinement_Constituents;
+ 
+    ------------------------
+    -- Predicate_Function --
+    ------------------------
+ 
+    function Predicate_Function (Id : E) return E is
+       Subp_Elmt : Elmt_Id;
+       Subp_Id   : Entity_Id;
+       Subps     : Elist_Id;
+       Typ       : Entity_Id;
+ 
+    begin
+       pragma Assert (Is_Type (Id));
+ 
+       --  If type is private and has a completion, predicate may be defined on
+       --  the full view.
+ 
+       if Is_Private_Type (Id)
+          and then
+            (not Has_Predicates (Id) or else No (Subprograms_For_Type (Id)))
+          and then Present (Full_View (Id))
+       then
+          Typ := Full_View (Id);
+ 
+       elsif Ekind (Id) in E_Array_Subtype
+                         | E_Record_Subtype
+                         | E_Record_Subtype_With_Private
+         and then Present (Predicated_Parent (Id))
+       then
+          Typ := Predicated_Parent (Id);
+ 
+       else
+          Typ := Id;
+       end if;
+ 
+       Subps := Subprograms_For_Type (Typ);
+ 
+       if Present (Subps) then
+          Subp_Elmt := First_Elmt (Subps);
+          while Present (Subp_Elmt) loop
+             Subp_Id := Node (Subp_Elmt);
+ 
+             if Ekind (Subp_Id) = E_Function
+               and then Is_Predicate_Function (Subp_Id)
+             then
+                return Subp_Id;
+             end if;
+ 
+             Next_Elmt (Subp_Elmt);
+          end loop;
+       end if;
+ 
+       return Empty;
+    end Predicate_Function;
+ 
+    --------------------------
+    -- Predicate_Function_M --
+    --------------------------
+ 
+    function Predicate_Function_M (Id : E) return E is
+       Subp_Elmt : Elmt_Id;
+       Subp_Id   : Entity_Id;
+       Subps     : Elist_Id;
+       Typ       : Entity_Id;
+ 
+    begin
+       pragma Assert (Is_Type (Id));
+ 
+       --  If type is private and has a completion, predicate may be defined on
+       --  the full view.
+ 
+       if Is_Private_Type (Id)
+          and then
+            (not Has_Predicates (Id) or else No (Subprograms_For_Type (Id)))
+          and then Present (Full_View (Id))
+       then
+          Typ := Full_View (Id);
+ 
+       else
+          Typ := Id;
+       end if;
+ 
+       Subps := Subprograms_For_Type (Typ);
+ 
+       if Present (Subps) then
+          Subp_Elmt := First_Elmt (Subps);
+          while Present (Subp_Elmt) loop
+             Subp_Id := Node (Subp_Elmt);
+ 
+             if Ekind (Subp_Id) = E_Function
+               and then Is_Predicate_Function_M (Subp_Id)
+             then
+                return Subp_Id;
+             end if;
+ 
+             Next_Elmt (Subp_Elmt);
+          end loop;
+       end if;
+ 
+       return Empty;
+    end Predicate_Function_M;
+ 
+    -------------------------
+    -- Present_In_Rep_Item --
+    -------------------------
+ 
+    function Present_In_Rep_Item (E : Entity_Id; N : Node_Id) return Boolean is
+       Ritem : Node_Id;
+ 
+    begin
+       Ritem := First_Rep_Item (E);
+ 
+       while Present (Ritem) loop
+          if Ritem = N then
+             return True;
+          end if;
+ 
+          Next_Rep_Item (Ritem);
+       end loop;
+ 
+       return False;
+    end Present_In_Rep_Item;
+ 
+    --------------------------
+    -- Primitive_Operations --
+    --------------------------
+ 
+    function Primitive_Operations (Id : E) return L is
+    begin
+       if Is_Concurrent_Type (Id) then
+          if Present (Corresponding_Record_Type (Id)) then
+             return Direct_Primitive_Operations
+               (Corresponding_Record_Type (Id));
+ 
+          --  When expansion is disabled, the corresponding record type is
+          --  absent, but if this is a tagged type with ancestors, or if the
+          --  extension of prefixed calls for untagged types is enabled, then
+          --  it may have associated primitive operations.
+ 
+          else
+             return Direct_Primitive_Operations (Id);
+          end if;
+ 
+       else
+          return Direct_Primitive_Operations (Id);
+       end if;
+    end Primitive_Operations;
+ 
+    ---------------------
+    -- Record_Rep_Item --
+    ---------------------
+ 
+    procedure Record_Rep_Item (E : Entity_Id; N : Node_Id) is
+    begin
+       Set_Next_Rep_Item (N, First_Rep_Item (E));
+       Set_First_Rep_Item (E, N);
+    end Record_Rep_Item;
+ 
+    -------------------
+    -- Remove_Entity --
+    -------------------
+ 
+    procedure Remove_Entity (Id : Entity_Id) is
+       Next  : constant Entity_Id := Next_Entity (Id);
+       Prev  : constant Entity_Id := Prev_Entity (Id);
+       Scop  : constant Entity_Id := Scope (Id);
+       First : constant Entity_Id := First_Entity (Scop);
+       Last  : constant Entity_Id := Last_Entity  (Scop);
+ 
+    begin
+       --  Eliminate any existing linkages from the entity
+ 
+       Set_Prev_Entity (Id, Empty);  --  Empty <-- Id
+       Set_Next_Entity (Id, Empty);  --  Id --> Empty
+ 
+       --  The eliminated entity was the only element in the entity chain
+ 
+       if Id = First and then Id = Last then
+          Set_First_Entity (Scop, Empty);
+          Set_Last_Entity  (Scop, Empty);
+ 
+       --  The eliminated entity was the head of the entity chain
+ 
+       elsif Id = First then
+          Set_First_Entity (Scop, Next);
+ 
+       --  The eliminated entity was the tail of the entity chain
+ 
+       elsif Id = Last then
+          Set_Last_Entity (Scop, Prev);
+ 
+       --  Otherwise the eliminated entity comes from the middle of the entity
+       --  chain.
+ 
+       else
+          Link_Entities (Prev, Next);  --  Prev <-- Next, Prev --> Next
+       end if;
+    end Remove_Entity;
+ 
+    ---------------
+    -- Root_Type --
+    ---------------
+ 
+    function Root_Type (Id : E) return E is
+       T, Etyp : Entity_Id;
+ 
+    begin
+       pragma Assert (Nkind (Id) in N_Entity);
+ 
+       T := Base_Type (Id);
+ 
+       if Ekind (T) = E_Class_Wide_Type then
+          return Etype (T);
+ 
+       --  Other cases
+ 
+       else
+          loop
+             Etyp := Etype (T);
+ 
+             if T = Etyp then
+                return T;
+ 
+             --  Following test catches some error cases resulting from
+             --  previous errors.
+ 
+             elsif No (Etyp) then
+                Check_Error_Detected;
+                return T;
+ 
+             elsif Is_Private_Type (T) and then Etyp = Full_View (T) then
+                return T;
+ 
+             elsif Is_Private_Type (Etyp) and then Full_View (Etyp) = T then
+                return T;
+             end if;
+ 
+             T := Etyp;
+ 
+             --  Return if there is a circularity in the inheritance chain. This
+             --  happens in some error situations and we do not want to get
+             --  stuck in this loop.
+ 
+             if T = Base_Type (Id) then
+                return T;
+             end if;
+          end loop;
+       end if;
+    end Root_Type;
+ 
+    ---------------------
+    -- Safe_Emax_Value --
+    ---------------------
+ 
+    function Safe_Emax_Value (Id : E) return Uint is
+    begin
+       return Machine_Emax_Value (Id);
+    end Safe_Emax_Value;
+ 
+    ----------------------
+    -- Safe_First_Value --
+    ----------------------
+ 
+    function Safe_First_Value (Id : E) return Ureal is
+    begin
+       return -Safe_Last_Value (Id);
+    end Safe_First_Value;
+ 
+    ---------------------
+    -- Safe_Last_Value --
+    ---------------------
+ 
+    function Safe_Last_Value (Id : E) return Ureal is
+       Radix       : constant Uint := Machine_Radix_Value (Id);
+       Mantissa    : constant Uint := Machine_Mantissa_Value (Id);
+       Emax        : constant Uint := Safe_Emax_Value (Id);
+       Significand : constant Uint := Radix ** Mantissa - 1;
+       Exponent    : constant Uint := Emax - Mantissa;
+ 
+    begin
+       if Radix = 2 then
+          return
+            UR_From_Components
+              (Num   => Significand * 2 ** (Exponent mod 4),
+               Den   => -Exponent / 4,
+               Rbase => 16);
+       else
+          return
+            UR_From_Components
+              (Num => Significand,
+               Den => -Exponent,
+               Rbase => 16);
+       end if;
+    end Safe_Last_Value;
+ 
+    -----------------
+    -- Scope_Depth --
+    -----------------
+ 
+    function Scope_Depth (Id : E) return Uint is
+       Scop : Entity_Id;
+ 
+    begin
+       Scop := Id;
+       while Is_Record_Type (Scop) loop
+          Scop := Scope (Scop);
+       end loop;
+ 
+       return Scope_Depth_Value (Scop);
+    end Scope_Depth;
+ 
+    function Scope_Depth_Default_0 (Id : E) return U is
+    begin
+       if Scope_Depth_Set (Id) then
+          return Scope_Depth (Id);
+ 
+       else
+          return Uint_0;
+       end if;
+    end Scope_Depth_Default_0;
+ 
+    ---------------------
+    -- Scope_Depth_Set --
+    ---------------------
+ 
+    function Scope_Depth_Set (Id : E) return B is
+    begin
+       return not Is_Record_Type (Id)
+         and then not Field_Is_Initial_Zero (Id, F_Scope_Depth_Value);
+       --  We can't call Scope_Depth_Value here, because Empty is not a valid
+       --  value of type Uint.
+    end Scope_Depth_Set;
+ 
+    --------------------
+    -- Set_Convention --
+    --------------------
+ 
+    procedure Set_Convention (E : Entity_Id; Val : Snames.Convention_Id) is
+    begin
+       Set_Basic_Convention (E, Val);
+ 
+       if Ekind (E) in Access_Subprogram_Kind
+         and then Has_Foreign_Convention (E)
+       then
+          Set_Can_Use_Internal_Rep (E, False);
+       end if;
+ 
+       --  If E is an object, including a component, and the type of E is an
+       --  anonymous access type with no convention set, then also set the
+       --  convention of the anonymous access type. We do not do this for
+       --  anonymous protected types, since protected types always have the
+       --  default convention.
+ 
+       if Present (Etype (E))
+         and then (Is_Object (E)
+ 
+                    --  Allow E_Void (happens for pragma Convention appearing
+                    --  in the middle of a record applying to a component)
+ 
+                    or else Ekind (E) = E_Void)
+       then
+          declare
+             Typ : constant Entity_Id := Etype (E);
+ 
+          begin
+             if Ekind (Typ) in E_Anonymous_Access_Type
+                             | E_Anonymous_Access_Subprogram_Type
+               and then not Has_Convention_Pragma (Typ)
+             then
+                Set_Basic_Convention (Typ, Val);
+                Set_Has_Convention_Pragma (Typ);
+ 
+                --  And for the access subprogram type, deal similarly with the
+                --  designated E_Subprogram_Type, which is always internal.
+ 
+                if Ekind (Typ) = E_Anonymous_Access_Subprogram_Type then
+                   declare
+                      Dtype : constant Entity_Id := Designated_Type (Typ);
+                   begin
+                      if Ekind (Dtype) = E_Subprogram_Type
+                        and then not Has_Convention_Pragma (Dtype)
+                      then
+                         Set_Basic_Convention (Dtype, Val);
+                         Set_Has_Convention_Pragma (Dtype);
+                      end if;
+                   end;
+                end if;
+             end if;
+          end;
+       end if;
+    end Set_Convention;
+ 
+    -----------------------
+    -- Set_DIC_Procedure --
+    -----------------------
+ 
+    procedure Set_DIC_Procedure (Id : E; V : E) is
+       Base_Typ  : Entity_Id;
+       Subps     : Elist_Id;
+ 
+    begin
+       pragma Assert (Is_Type (Id));
+ 
+       Base_Typ := Base_Type (Id);
+       Subps    := Subprograms_For_Type (Base_Typ);
+ 
+       if No (Subps) then
+          Subps := New_Elmt_List;
+          Set_Subprograms_For_Type (Base_Typ, Subps);
+       end if;
+ 
+       Prepend_Elmt (V, Subps);
+    end Set_DIC_Procedure;
+ 
+    procedure Set_Partial_DIC_Procedure (Id : E; V : E) is
+    begin
+       Set_DIC_Procedure (Id, V);
+    end Set_Partial_DIC_Procedure;
+ 
+    -------------------
+    -- Set_Float_Rep --
+    -------------------
+ 
+    procedure Set_Float_Rep
+      (Ignore_N : Entity_Id; Ignore_Val : Float_Rep_Kind) is
+    begin
+       pragma Assert (Float_Rep_Kind'First = Float_Rep_Kind'Last);
+       --  There is only one value, so we don't need to store it (see
+       --  types.ads).
+    end Set_Float_Rep;
+ 
+    -----------------------------
+    -- Set_Invariant_Procedure --
+    -----------------------------
+ 
+    procedure Set_Invariant_Procedure (Id : E; V : E) is
+       Base_Typ  : Entity_Id;
+       Subp_Elmt : Elmt_Id;
+       Subp_Id   : Entity_Id;
+       Subps     : Elist_Id;
+ 
+    begin
+       pragma Assert (Is_Type (Id));
+ 
+       Base_Typ := Base_Type (Id);
+       Subps    := Subprograms_For_Type (Base_Typ);
+ 
+       if No (Subps) then
+          Subps := New_Elmt_List;
+          Set_Subprograms_For_Type (Base_Typ, Subps);
+       end if;
+ 
+       Subp_Elmt := First_Elmt (Subps);
+       Prepend_Elmt (V, Subps);
+ 
+       --  Check for a duplicate invariant procedure
+ 
+       while Present (Subp_Elmt) loop
+          Subp_Id := Node (Subp_Elmt);
+ 
+          if Is_Invariant_Procedure (Subp_Id) then
+             raise Program_Error;
+          end if;
+ 
+          Next_Elmt (Subp_Elmt);
+       end loop;
+    end Set_Invariant_Procedure;
+ 
+    -------------------------------------
+    -- Set_Partial_Invariant_Procedure --
+    -------------------------------------
+ 
+    procedure Set_Partial_Invariant_Procedure (Id : E; V : E) is
+       Base_Typ  : Entity_Id;
+       Subp_Elmt : Elmt_Id;
+       Subp_Id   : Entity_Id;
+       Subps     : Elist_Id;
+ 
+    begin
+       pragma Assert (Is_Type (Id));
+ 
+       Base_Typ := Base_Type (Id);
+       Subps    := Subprograms_For_Type (Base_Typ);
+ 
+       if No (Subps) then
+          Subps := New_Elmt_List;
+          Set_Subprograms_For_Type (Base_Typ, Subps);
+       end if;
+ 
+       Subp_Elmt := First_Elmt (Subps);
+       Prepend_Elmt (V, Subps);
+ 
+       --  Check for a duplicate partial invariant procedure
+ 
+       while Present (Subp_Elmt) loop
+          Subp_Id := Node (Subp_Elmt);
+ 
+          if Is_Partial_Invariant_Procedure (Subp_Id) then
+             raise Program_Error;
+          end if;
+ 
+          Next_Elmt (Subp_Elmt);
+       end loop;
+    end Set_Partial_Invariant_Procedure;
+ 
+    ----------------------------
+    -- Set_Predicate_Function --
+    ----------------------------
+ 
+    procedure Set_Predicate_Function (Id : E; V : E) is
+       Subp_Elmt : Elmt_Id;
+       Subp_Id   : Entity_Id;
+       Subps     : Elist_Id;
+ 
+    begin
+       pragma Assert (Is_Type (Id) and then Has_Predicates (Id));
+ 
+       Subps := Subprograms_For_Type (Id);
+ 
+       if No (Subps) then
+          Subps := New_Elmt_List;
+          Set_Subprograms_For_Type (Id, Subps);
+       end if;
+ 
+       Subp_Elmt := First_Elmt (Subps);
+       Prepend_Elmt (V, Subps);
+ 
+       --  Check for a duplicate predication function
+ 
+       while Present (Subp_Elmt) loop
+          Subp_Id := Node (Subp_Elmt);
+ 
+          if Ekind (Subp_Id) = E_Function
+            and then Is_Predicate_Function (Subp_Id)
+          then
+             raise Program_Error;
+          end if;
+ 
+          Next_Elmt (Subp_Elmt);
+       end loop;
+    end Set_Predicate_Function;
+ 
+    ------------------------------
+    -- Set_Predicate_Function_M --
+    ------------------------------
+ 
+    procedure Set_Predicate_Function_M (Id : E; V : E) is
+       Subp_Elmt : Elmt_Id;
+       Subp_Id   : Entity_Id;
+       Subps     : Elist_Id;
+ 
+    begin
+       pragma Assert (Is_Type (Id) and then Has_Predicates (Id));
+ 
+       Subps := Subprograms_For_Type (Id);
+ 
+       if No (Subps) then
+          Subps := New_Elmt_List;
+          Set_Subprograms_For_Type (Id, Subps);
+       end if;
+ 
+       Subp_Elmt := First_Elmt (Subps);
+       Prepend_Elmt (V, Subps);
+ 
+       --  Check for a duplicate predication function
+ 
+       while Present (Subp_Elmt) loop
+          Subp_Id := Node (Subp_Elmt);
+ 
+          if Ekind (Subp_Id) = E_Function
+            and then Is_Predicate_Function_M (Subp_Id)
+          then
+             raise Program_Error;
+          end if;
+ 
+          Next_Elmt (Subp_Elmt);
+       end loop;
+    end Set_Predicate_Function_M;
+ 
+    -----------------
+    -- Size_Clause --
+    -----------------
+ 
+    function Size_Clause (Id : E) return N is
+       Result : N := Get_Attribute_Definition_Clause (Id, Attribute_Size);
+    begin
+       if No (Result) then
+          Result := Get_Attribute_Definition_Clause (Id, Attribute_Value_Size);
+       end if;
+ 
+       return Result;
+    end Size_Clause;
+ 
+    ------------------------
+    -- Stream_Size_Clause --
+    ------------------------
+ 
+    function Stream_Size_Clause (Id : E) return N is
+    begin
+       return Get_Attribute_Definition_Clause (Id, Attribute_Stream_Size);
+    end Stream_Size_Clause;
+ 
+    ------------------
+    -- Subtype_Kind --
+    ------------------
+ 
+    function Subtype_Kind (K : Entity_Kind) return Entity_Kind is
+       Kind : Entity_Kind;
+ 
+    begin
+       case K is
+          when Access_Kind =>
+             Kind := E_Access_Subtype;
+ 
+          when E_Array_Subtype
+             | E_Array_Type
+          =>
+             Kind := E_Array_Subtype;
+ 
+          when E_Class_Wide_Subtype
+             | E_Class_Wide_Type
+          =>
+             Kind := E_Class_Wide_Subtype;
+ 
+          when E_Decimal_Fixed_Point_Subtype
+             | E_Decimal_Fixed_Point_Type
+          =>
+             Kind := E_Decimal_Fixed_Point_Subtype;
+ 
+          when E_Ordinary_Fixed_Point_Subtype
+             | E_Ordinary_Fixed_Point_Type
+          =>
+             Kind := E_Ordinary_Fixed_Point_Subtype;
+ 
+          when E_Private_Subtype
+             | E_Private_Type
+          =>
+             Kind := E_Private_Subtype;
+ 
+          when E_Limited_Private_Subtype
+             | E_Limited_Private_Type
+          =>
+             Kind := E_Limited_Private_Subtype;
+ 
+          when E_Record_Subtype_With_Private
+             | E_Record_Type_With_Private
+          =>
+             Kind := E_Record_Subtype_With_Private;
+ 
+          when E_Record_Subtype
+             | E_Record_Type
+          =>
+             Kind := E_Record_Subtype;
+ 
+          when Enumeration_Kind =>
+             Kind := E_Enumeration_Subtype;
+ 
+          when E_Incomplete_Type =>
+             Kind := E_Incomplete_Subtype;
+ 
+          when Float_Kind =>
+             Kind := E_Floating_Point_Subtype;
+ 
+          when Signed_Integer_Kind =>
+             Kind := E_Signed_Integer_Subtype;
+ 
+          when Modular_Integer_Kind =>
+             Kind := E_Modular_Integer_Subtype;
+ 
+          when Protected_Kind =>
+             Kind := E_Protected_Subtype;
+ 
+          when Task_Kind =>
+             Kind := E_Task_Subtype;
+ 
+          when others =>
+             raise Program_Error;
+       end case;
+ 
+       return Kind;
+    end Subtype_Kind;
+ 
+    ---------------------
+    -- Type_High_Bound --
+    ---------------------
+ 
+    function Type_High_Bound (Id : E) return Node_Id is
+       Rng : constant Node_Id := Scalar_Range (Id);
+    begin
+       if Nkind (Rng) = N_Subtype_Indication then
+          return High_Bound (Range_Expression (Constraint (Rng)));
+       else
+          return High_Bound (Rng);
+       end if;
+    end Type_High_Bound;
+ 
+    --------------------
+    -- Type_Low_Bound --
+    --------------------
+ 
+    function Type_Low_Bound (Id : E) return Node_Id is
+       Rng : constant Node_Id := Scalar_Range (Id);
+    begin
+       if Nkind (Rng) = N_Subtype_Indication then
+          return Low_Bound (Range_Expression (Constraint (Rng)));
+       else
+          return Low_Bound (Rng);
+       end if;
+    end Type_Low_Bound;
+ 
+    ---------------------
+    -- Underlying_Type --
+    ---------------------
+ 
+    function Underlying_Type (Id : E) return E is
+    begin
+       --  For record_with_private the underlying type is always the direct full
+       --  view. Never try to take the full view of the parent it does not make
+       --  sense.
+ 
+       if Ekind (Id) = E_Record_Type_With_Private then
+          return Full_View (Id);
+ 
+       --  If we have a class-wide type that comes from the limited view then we
+       --  return the Underlying_Type of its nonlimited view.
+ 
+       elsif Ekind (Id) = E_Class_Wide_Type
+         and then From_Limited_With (Id)
+         and then Present (Non_Limited_View (Id))
+       then
+          return Underlying_Type (Non_Limited_View (Id));
+ 
+       elsif Ekind (Id) in Incomplete_Or_Private_Kind then
+ 
+          --  If we have an incomplete or private type with a full view, then we
+          --  return the Underlying_Type of this full view.
+ 
+          if Present (Full_View (Id)) then
+             if Id = Full_View (Id) then
+ 
+                --  Previous error in declaration
+ 
+                return Empty;
+ 
+             else
+                return Underlying_Type (Full_View (Id));
+             end if;
+ 
+          --  If we have a private type with an underlying full view, then we
+          --  return the Underlying_Type of this underlying full view.
+ 
+          elsif Ekind (Id) in Private_Kind
+            and then Present (Underlying_Full_View (Id))
+          then
+             return Underlying_Type (Underlying_Full_View (Id));
+ 
+          --  If we have an incomplete entity that comes from the limited view
+          --  then we return the Underlying_Type of its nonlimited view.
+ 
+          elsif From_Limited_With (Id)
+            and then Present (Non_Limited_View (Id))
+          then
+             return Underlying_Type (Non_Limited_View (Id));
+ 
+          --  Otherwise check for the case where we have a derived type or
+          --  subtype, and if so get the Underlying_Type of the parent type.
+ 
+          elsif Etype (Id) /= Id then
+             return Underlying_Type (Etype (Id));
+ 
+          --  Otherwise we have an incomplete or private type that has no full
+          --  view, which means that we have not encountered the completion, so
+          --  return Empty to indicate the underlying type is not yet known.
+ 
+          else
+             return Empty;
+          end if;
+ 
+       --  For non-incomplete, non-private types, return the type itself. Also
+       --  for entities that are not types at all return the entity itself.
+ 
+       else
+          return Id;
+       end if;
+    end Underlying_Type;
+ 
+    ------------------------
+    -- Unlink_Next_Entity --
+    ------------------------
+ 
+    procedure Unlink_Next_Entity (Id : Entity_Id) is
+       Next : constant Entity_Id := Next_Entity (Id);
+ 
+    begin
+       if Present (Next) then
+          Set_Prev_Entity (Next, Empty);  --  Empty <-- Next
+       end if;
+ 
+       Set_Next_Entity (Id, Empty);       --  Id --> Empty
+    end Unlink_Next_Entity;
+ 
+    ----------------------------------
+    -- Is_Volatile, Set_Is_Volatile --
+    ----------------------------------
+ 
+    function Is_Volatile (Id : E) return B is
+    begin
+       pragma Assert (Nkind (Id) in N_Entity);
+ 
+       if Is_Type (Id) then
+          return Is_Volatile_Type (Base_Type (Id));
+       else
+          return Is_Volatile_Object (Id);
+       end if;
+    end Is_Volatile;
+ 
+    procedure Set_Is_Volatile (Id : E; V : B := True) is
+    begin
+       pragma Assert (Nkind (Id) in N_Entity);
+ 
+       if Is_Type (Id) then
+          Set_Is_Volatile_Type (Id, V);
+       else
+          Set_Is_Volatile_Object (Id, V);
+       end if;
+    end Set_Is_Volatile;
+ 
+    -----------------------
+    -- Write_Entity_Info --
+    -----------------------
+ 
+    procedure Write_Entity_Info (Id : Entity_Id; Prefix : String) is
+ 
+       procedure Write_Attribute (Which : String; Nam : E);
+       --  Write attribute value with given string name
+ 
+       procedure Write_Kind (Id : Entity_Id);
+       --  Write Ekind field of entity
+ 
+       ---------------------
+       -- Write_Attribute --
+       ---------------------
+ 
+       procedure Write_Attribute (Which : String; Nam : E) is
+       begin
+          Write_Str (Prefix);
+          Write_Str (Which);
+          Write_Int (Int (Nam));
+          Write_Str (" ");
+          Write_Name (Chars (Nam));
+          Write_Str (" ");
+       end Write_Attribute;
+ 
+       ----------------
+       -- Write_Kind --
+       ----------------
+ 
+       procedure Write_Kind (Id : Entity_Id) is
+          K : constant String := Entity_Kind'Image (Ekind (Id));
+ 
+       begin
+          Write_Str (Prefix);
+          Write_Str ("   Kind    ");
+ 
+          if Is_Type (Id) and then Is_Tagged_Type (Id) then
+             Write_Str ("TAGGED ");
+          end if;
+ 
+          Write_Str (K (3 .. K'Length));
+          Write_Str (" ");
+ 
+          if Is_Type (Id) and then Depends_On_Private (Id) then
+             Write_Str ("Depends_On_Private ");
+          end if;
+       end Write_Kind;
+ 
+    --  Start of processing for Write_Entity_Info
+ 
+    begin
+       Write_Eol;
+       Write_Attribute ("Name ", Id);
+       Write_Int (Int (Id));
+       Write_Eol;
+       Write_Kind (Id);
+       Write_Eol;
+       Write_Attribute ("   Type    ", Etype (Id));
+       Write_Eol;
+       if Id /= Standard_Standard then
+          Write_Attribute ("   Scope   ", Scope (Id));
+       end if;
+       Write_Eol;
+ 
+       case Ekind (Id) is
+          when Discrete_Kind =>
+             Write_Str ("Bounds: Id = ");
+ 
+             if Present (Scalar_Range (Id)) then
+                Write_Int (Int (Type_Low_Bound (Id)));
+                Write_Str (" .. Id = ");
+                Write_Int (Int (Type_High_Bound (Id)));
+             else
+                Write_Str ("Empty");
+             end if;
+ 
+             Write_Eol;
+ 
+          when Array_Kind =>
+             declare
+                Index : Entity_Id;
+ 
+             begin
+                Write_Attribute
+                  ("   Component Type    ", Component_Type (Id));
+                Write_Eol;
+                Write_Str (Prefix);
+                Write_Str ("   Indexes ");
+ 
+                Index := First_Index (Id);
+                while Present (Index) loop
+                   Write_Attribute (" ", Etype (Index));
+                   Index := Next_Index (Index);
+                end loop;
+ 
+                Write_Eol;
+             end;
+ 
+          when Access_Kind =>
+                Write_Attribute
+                  ("   Directly Designated Type ",
+                   Directly_Designated_Type (Id));
+                Write_Eol;
+ 
+          when Overloadable_Kind =>
+             if Present (Homonym (Id)) then
+                Write_Str ("   Homonym   ");
+                Write_Name (Chars (Homonym (Id)));
+                Write_Str ("   ");
+                Write_Int (Int (Homonym (Id)));
+                Write_Eol;
+             end if;
+ 
+             Write_Eol;
+ 
+          when E_Component =>
+             if Ekind (Scope (Id)) in Record_Kind then
+                Write_Attribute (
+                   "   Original_Record_Component   ",
+                   Original_Record_Component (Id));
+                Write_Int (Int (Original_Record_Component (Id)));
+                Write_Eol;
+             end if;
+ 
+          when others =>
+             null;
+       end case;
+    end Write_Entity_Info;
+ 
+    -------------------------
+    -- Iterator Procedures --
+    -------------------------
+ 
+    procedure Proc_Next_Component                 (N : in out Node_Id) is
+    begin
+       N := Next_Component (N);
+    end Proc_Next_Component;
+ 
+    procedure Proc_Next_Component_Or_Discriminant (N : in out Node_Id) is
+    begin
+       N := Next_Entity (N);
+       while Present (N) loop
+          exit when Ekind (N) in E_Component | E_Discriminant;
+          N := Next_Entity (N);
+       end loop;
+    end Proc_Next_Component_Or_Discriminant;
+ 
+    procedure Proc_Next_Discriminant              (N : in out Node_Id) is
+    begin
+       N := Next_Discriminant (N);
+    end Proc_Next_Discriminant;
+ 
+    procedure Proc_Next_Formal                    (N : in out Node_Id) is
+    begin
+       N := Next_Formal (N);
+    end Proc_Next_Formal;
+ 
+    procedure Proc_Next_Formal_With_Extras        (N : in out Node_Id) is
+    begin
+       N := Next_Formal_With_Extras (N);
+    end Proc_Next_Formal_With_Extras;
+ 
+    procedure Proc_Next_Index                     (N : in out Node_Id) is
+    begin
+       N := Next_Index (N);
+    end Proc_Next_Index;
+ 
+    procedure Proc_Next_Inlined_Subprogram        (N : in out Node_Id) is
+    begin
+       N := Next_Inlined_Subprogram (N);
+    end Proc_Next_Inlined_Subprogram;
+ 
+    procedure Proc_Next_Literal                   (N : in out Node_Id) is
+    begin
+       N := Next_Literal (N);
+    end Proc_Next_Literal;
+ 
+    procedure Proc_Next_Stored_Discriminant       (N : in out Node_Id) is
+    begin
+       N := Next_Stored_Discriminant (N);
+    end Proc_Next_Stored_Discriminant;
+ 
+ end Einfo.Utils;
diff -Nrcpad gcc-11.3.0/gcc/ada/einfo-utils.ads gcc-12.1.0/gcc/ada/einfo-utils.ads
*** gcc-11.3.0/gcc/ada/einfo-utils.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/einfo-utils.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,672 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                           E I N F O . U T I L S                          --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --           Copyright (C) 2020-2022, Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Einfo.Entities; use Einfo.Entities;
+ 
+ package Einfo.Utils is
+ 
+    -------------------------------------------
+    -- Aliases/Renamings of Renamed_Or_Alias --
+    -------------------------------------------
+ 
+    --  See the comment in einfo.ads, "Renaming and Aliasing", which is somewhat
+    --  incorrect. Each of the following calls [Set_]Renamed_Or_Alias. Alias and
+    --  Renamed_Entity are fields of nonobject Entity_Ids, and the value of the
+    --  field is Entity_Id. Alias is only for callable entities and subprogram
+    --  types. We sometimes call Set_Renamed_Entity and then expect Alias to
+    --  return the value set. Renamed_Object is a field of Entity_Ids that are
+    --  objects, and it returns an expression, because you can rename things
+    --  like "X.all(J).Y". Renamings of entries and subprograms can also be
+    --  expressions, but those use different mechanisms; the fields here are not
+    --  used.
+ 
+    function Alias (N : Entity_Id) return Entity_Id;
+    procedure Set_Alias (N : Entity_Id; Val : Entity_Id);
+    function Renamed_Entity (N : Entity_Id) return Entity_Id;
+    procedure Set_Renamed_Entity (N : Entity_Id; Val : Entity_Id);
+    function Renamed_Object (N : Entity_Id) return Node_Id;
+    procedure Set_Renamed_Object (N : Entity_Id; Val : Node_Id);
+ 
+    function Renamed_Entity_Or_Object (N : Entity_Id) return Node_Id;
+    --  This getter is used when we don't know statically whether we want to
+    --  call Renamed_Entity or Renamed_Object.
+ 
+    procedure Set_Renamed_Object_Of_Possibly_Void
+      (N : Entity_Id; Val : Node_Id);
+    --  Set_Renamed_Object doesn't allow Void; this is used in the rare cases
+    --  where we set the field of an entity that might be Void. It might be a
+    --  good idea to get rid of calls to this.
+ 
+    pragma Inline (Alias);
+    pragma Inline (Set_Alias);
+    pragma Inline (Renamed_Entity);
+    pragma Inline (Set_Renamed_Entity);
+    pragma Inline (Renamed_Object);
+    pragma Inline (Set_Renamed_Object);
+    pragma Inline (Renamed_Entity_Or_Object);
+    pragma Inline (Set_Renamed_Object_Of_Possibly_Void);
+ 
+    -------------------
+    -- Type Synonyms --
+    -------------------
+ 
+    --  The following type synonyms are used to tidy up the function and
+    --  procedure declarations that follow.
+ 
+    subtype B is Boolean;
+    subtype C is Component_Alignment_Kind;
+    subtype E is Entity_Id;
+    subtype F is Float_Rep_Kind;
+    subtype M is Mechanism_Type;
+    subtype N is Node_Id;
+    subtype U is Uint;
+    subtype R is Ureal;
+    subtype L is Elist_Id;
+    subtype S is List_Id;
+ 
+    -------------------------------
+    -- Classification Attributes --
+    -------------------------------
+ 
+    --  These functions provide a convenient functional notation for testing
+    --  whether an Ekind value belongs to a specified kind, for example the
+    --  function Is_Elementary_Type tests if its argument is in Elementary_Kind.
+    --  In some cases, the test is of an entity attribute (e.g. in the case of
+    --  Is_Generic_Type where the Ekind does not provide the needed
+    --  information).
+ 
+    function Is_Access_Object_Type               (Id : E) return B;
+    function Is_Access_Type                      (Id : E) return B;
+    function Is_Access_Protected_Subprogram_Type (Id : E) return B;
+    function Is_Access_Subprogram_Type           (Id : E) return B;
+    function Is_Aggregate_Type                   (Id : E) return B;
+    function Is_Anonymous_Access_Type            (Id : E) return B;
+    function Is_Array_Type                       (Id : E) return B;
+    function Is_Assignable                       (Id : E) return B;
+    function Is_Class_Wide_Type                  (Id : E) return B;
+    function Is_Composite_Type                   (Id : E) return B;
+    function Is_Concurrent_Body                  (Id : E) return B;
+    function Is_Concurrent_Type                  (Id : E) return B;
+    function Is_Decimal_Fixed_Point_Type         (Id : E) return B;
+    function Is_Digits_Type                      (Id : E) return B;
+    function Is_Discrete_Or_Fixed_Point_Type     (Id : E) return B;
+    function Is_Discrete_Type                    (Id : E) return B;
+    function Is_Elementary_Type                  (Id : E) return B;
+    function Is_Entry                            (Id : E) return B;
+    function Is_Enumeration_Type                 (Id : E) return B;
+    function Is_Fixed_Point_Type                 (Id : E) return B;
+    function Is_Floating_Point_Type              (Id : E) return B;
+    function Is_Formal                           (Id : E) return B;
+    function Is_Formal_Object                    (Id : E) return B;
+    function Is_Generic_Subprogram               (Id : E) return B;
+    function Is_Generic_Unit                     (Id : E) return B;
+    function Is_Ghost_Entity                     (Id : E) return B;
+    function Is_Incomplete_Or_Private_Type       (Id : E) return B;
+    function Is_Incomplete_Type                  (Id : E) return B;
+    function Is_Integer_Type                     (Id : E) return B;
+    function Is_Modular_Integer_Type             (Id : E) return B;
+    function Is_Named_Access_Type                (Id : E) return B;
+    function Is_Named_Number                     (Id : E) return B;
+    function Is_Numeric_Type                     (Id : E) return B;
+    function Is_Object                           (Id : E) return B;
+    function Is_Ordinary_Fixed_Point_Type        (Id : E) return B;
+    function Is_Overloadable                     (Id : E) return B;
+    function Is_Private_Type                     (Id : E) return B;
+    function Is_Protected_Type                   (Id : E) return B;
+    function Is_Real_Type                        (Id : E) return B;
+    function Is_Record_Type                      (Id : E) return B;
+    function Is_Scalar_Type                      (Id : E) return B;
+    function Is_Signed_Integer_Type              (Id : E) return B;
+    function Is_Subprogram                       (Id : E) return B;
+    function Is_Subprogram_Or_Entry              (Id : E) return B;
+    function Is_Subprogram_Or_Generic_Subprogram (Id : E) return B;
+    function Is_Task_Type                        (Id : E) return B;
+    function Is_Type                             (Id : E) return B;
+ 
+    pragma Inline (Is_Access_Object_Type);
+    pragma Inline (Is_Access_Type);
+    pragma Inline (Is_Access_Protected_Subprogram_Type);
+    pragma Inline (Is_Access_Subprogram_Type);
+    pragma Inline (Is_Aggregate_Type);
+    pragma Inline (Is_Anonymous_Access_Type);
+    pragma Inline (Is_Array_Type);
+    pragma Inline (Is_Assignable);
+    pragma Inline (Is_Class_Wide_Type);
+    pragma Inline (Is_Composite_Type);
+    pragma Inline (Is_Concurrent_Body);
+    pragma Inline (Is_Concurrent_Type);
+    pragma Inline (Is_Decimal_Fixed_Point_Type);
+    pragma Inline (Is_Digits_Type);
+    pragma Inline (Is_Discrete_Type);
+    pragma Inline (Is_Elementary_Type);
+    pragma Inline (Is_Entry);
+    pragma Inline (Is_Enumeration_Type);
+    pragma Inline (Is_Fixed_Point_Type);
+    pragma Inline (Is_Floating_Point_Type);
+    pragma Inline (Is_Formal);
+    pragma Inline (Is_Formal_Object);
+    pragma Inline (Is_Generic_Subprogram);
+    pragma Inline (Is_Generic_Unit);
+    pragma Inline (Is_Ghost_Entity);
+    pragma Inline (Is_Incomplete_Or_Private_Type);
+    pragma Inline (Is_Incomplete_Type);
+    pragma Inline (Is_Integer_Type);
+    pragma Inline (Is_Modular_Integer_Type);
+    pragma Inline (Is_Named_Access_Type);
+    pragma Inline (Is_Named_Number);
+    pragma Inline (Is_Numeric_Type);
+    pragma Inline (Is_Object);
+    pragma Inline (Is_Ordinary_Fixed_Point_Type);
+    pragma Inline (Is_Overloadable);
+    pragma Inline (Is_Private_Type);
+    pragma Inline (Is_Protected_Type);
+    pragma Inline (Is_Real_Type);
+    pragma Inline (Is_Record_Type);
+    pragma Inline (Is_Scalar_Type);
+    pragma Inline (Is_Signed_Integer_Type);
+    pragma Inline (Is_Subprogram);
+    pragma Inline (Is_Subprogram_Or_Entry);
+    pragma Inline (Is_Subprogram_Or_Generic_Subprogram);
+    pragma Inline (Is_Task_Type);
+    pragma Inline (Is_Type);
+ 
+    -------------------------------------
+    -- Synthesized Attribute Functions --
+    -------------------------------------
+ 
+    --  The functions in this section synthesize attributes from the tree,
+    --  so they do not correspond to defined fields in the entity itself.
+ 
+    function Address_Clause                      (Id : E) return N;
+    function Aft_Value                           (Id : E) return U;
+    function Alignment_Clause                    (Id : E) return N;
+    function Base_Type                           (Id : E) return E;
+    function Declaration_Node                    (Id : E) return N;
+    function Designated_Type                     (Id : E) return E;
+    function Entry_Index_Type                    (Id : E) return E;
+    function First_Component                     (Id : E) return E;
+    function First_Component_Or_Discriminant     (Id : E) return E;
+    function First_Formal                        (Id : E) return E;
+    function First_Formal_With_Extras            (Id : E) return E;
+ 
+    function Float_Rep
+      (N : Entity_Id) return F with Inline, Pre =>
+       N in E_Void_Id
+          | Float_Kind_Id;
+    procedure Set_Float_Rep
+      (Ignore_N : Entity_Id; Ignore_Val : F) with Inline, Pre =>
+       Ignore_N in E_Void_Id
+          | Float_Kind_Id;
+ 
+    function Has_Attach_Handler                  (Id : E) return B;
+    function Has_DIC                             (Id : E) return B;
+    function Has_Entries                         (Id : E) return B;
+    function Has_Foreign_Convention              (Id : E) return B;
+    function Has_Interrupt_Handler               (Id : E) return B;
+    function Has_Invariants                      (Id : E) return B;
+    function Has_Limited_View                    (Id : E) return B;
+    function Has_Non_Limited_View                (Id : E) return B;
+    function Has_Non_Null_Abstract_State         (Id : E) return B;
+    function Has_Non_Null_Visible_Refinement     (Id : E) return B;
+    function Has_Null_Abstract_State             (Id : E) return B;
+    function Has_Null_Visible_Refinement         (Id : E) return B;
+    function Implementation_Base_Type            (Id : E) return E;
+    function Is_Base_Type                        (Id : E) return B;
+    --  Note that Is_Base_Type returns True for nontypes
+    function Is_Boolean_Type                     (Id : E) return B;
+    function Is_Constant_Object                  (Id : E) return B;
+    function Is_Controlled                       (Id : E) return B;
+    function Is_Discriminal                      (Id : E) return B;
+    function Is_Dynamic_Scope                    (Id : E) return B;
+    function Is_Elaboration_Target               (Id : E) return B;
+    function Is_External_State                   (Id : E) return B;
+    function Is_Finalizer                        (Id : E) return B;
+    function Is_Full_Access                      (Id : E) return B;
+    function Is_Null_State                       (Id : E) return B;
+    function Is_Package_Or_Generic_Package       (Id : E) return B;
+    function Is_Packed_Array                     (Id : E) return B;
+    function Is_Prival                           (Id : E) return B;
+    function Is_Protected_Component              (Id : E) return B;
+    function Is_Protected_Interface              (Id : E) return B;
+    function Is_Protected_Record_Type            (Id : E) return B;
+    function Is_Relaxed_Initialization_State     (Id : E) return B;
+    function Is_Standard_Character_Type          (Id : E) return B;
+    function Is_Standard_String_Type             (Id : E) return B;
+    function Is_String_Type                      (Id : E) return B;
+    function Is_Synchronized_Interface           (Id : E) return B;
+    function Is_Synchronized_State               (Id : E) return B;
+    function Is_Task_Interface                   (Id : E) return B;
+    function Is_Task_Record_Type                 (Id : E) return B;
+    function Is_Wrapper_Package                  (Id : E) return B;
+    function Last_Formal                         (Id : E) return E;
+    function Machine_Emax_Value                  (Id : E) return U;
+    function Machine_Emin_Value                  (Id : E) return U;
+    function Machine_Mantissa_Value              (Id : E) return U;
+    function Machine_Radix_Value                 (Id : E) return U;
+    function Model_Emin_Value                    (Id : E) return U;
+    function Model_Epsilon_Value                 (Id : E) return R;
+    function Model_Mantissa_Value                (Id : E) return U;
+    function Model_Small_Value                   (Id : E) return R;
+    function Next_Component                      (Id : E) return E;
+    function Next_Component_Or_Discriminant      (Id : E) return E;
+    function Next_Discriminant                   (Id : E) return E;
+    function Next_Formal                         (Id : E) return E;
+    function Next_Formal_With_Extras             (Id : E) return E;
+    function Next_Index                          (Id : N) return N;
+    function Next_Literal                        (Id : E) return E;
+    function Next_Stored_Discriminant            (Id : E) return E;
+    function Number_Dimensions                   (Id : E) return Pos;
+    function Number_Entries                      (Id : E) return Nat;
+    function Number_Formals                      (Id : E) return Pos;
+    function Object_Size_Clause                  (Id : E) return N;
+    function Parameter_Mode                      (Id : E) return Formal_Kind;
+    function Partial_Refinement_Constituents     (Id : E) return L;
+    function Primitive_Operations                (Id : E) return L;
+    function Root_Type                           (Id : E) return E;
+    function Safe_Emax_Value                     (Id : E) return U;
+    function Safe_First_Value                    (Id : E) return R;
+    function Safe_Last_Value                     (Id : E) return R;
+    function Size_Clause                         (Id : E) return N;
+    function Stream_Size_Clause                  (Id : E) return N;
+    function Type_High_Bound                     (Id : E) return N;
+    function Type_Low_Bound                      (Id : E) return N;
+    function Underlying_Type                     (Id : E) return E;
+ 
+    function Scope_Depth                         (Id : E) return U;
+    function Scope_Depth_Set                     (Id : E) return B;
+ 
+    function Scope_Depth_Default_0               (Id : E) return U;
+    --  In rare cases, the Scope_Depth_Value (queried by Scope_Depth) is
+    --  not correctly set before querying it; this may be used instead of
+    --  Scope_Depth in such cases. It returns Uint_0 if the Scope_Depth_Value
+    --  has not been set. See documentation in Einfo.
+ 
+    pragma Inline (Address_Clause);
+    pragma Inline (Alignment_Clause);
+    pragma Inline (Base_Type);
+    pragma Inline (Has_Foreign_Convention);
+    pragma Inline (Has_Non_Limited_View);
+    pragma Inline (Is_Base_Type);
+    pragma Inline (Is_Boolean_Type);
+    pragma Inline (Is_Constant_Object);
+    pragma Inline (Is_Controlled);
+    pragma Inline (Is_Discriminal);
+    pragma Inline (Is_Finalizer);
+    pragma Inline (Is_Full_Access);
+    pragma Inline (Is_Null_State);
+    pragma Inline (Is_Package_Or_Generic_Package);
+    pragma Inline (Is_Packed_Array);
+    pragma Inline (Is_Prival);
+    pragma Inline (Is_Protected_Component);
+    pragma Inline (Is_Protected_Record_Type);
+    pragma Inline (Is_String_Type);
+    pragma Inline (Is_Task_Record_Type);
+    pragma Inline (Is_Wrapper_Package);
+    pragma Inline (Scope_Depth);
+    pragma Inline (Scope_Depth_Set);
+    pragma Inline (Size_Clause);
+    pragma Inline (Stream_Size_Clause);
+    pragma Inline (Type_High_Bound);
+    pragma Inline (Type_Low_Bound);
+ 
+    ------------------------------------------
+    -- Type Representation Attribute Fields --
+    ------------------------------------------
+ 
+    function Known_Alignment (E : Entity_Id) return B with Inline;
+    procedure Reinit_Alignment (Id : E) with Inline;
+    procedure Copy_Alignment (To, From : E);
+ 
+    function Known_Component_Bit_Offset (E : Entity_Id) return B with Inline;
+    function Known_Static_Component_Bit_Offset (E : Entity_Id) return B
+      with Inline;
+ 
+    function Known_Component_Size (E : Entity_Id) return B with Inline;
+    function Known_Static_Component_Size (E : Entity_Id) return B with Inline;
+ 
+    function Known_Esize (E : Entity_Id) return B with Inline;
+    function Known_Static_Esize (E : Entity_Id) return B with Inline;
+    procedure Reinit_Esize (Id : E) with Inline;
+    procedure Copy_Esize (To, From : E);
+ 
+    function Known_Normalized_First_Bit (E : Entity_Id) return B with Inline;
+    function Known_Static_Normalized_First_Bit (E : Entity_Id) return B
+      with Inline;
+ 
+    function Known_Normalized_Position (E : Entity_Id) return B with Inline;
+    function Known_Static_Normalized_Position (E : Entity_Id) return B
+      with Inline;
+ 
+    function Known_RM_Size (E : Entity_Id) return B with Inline;
+    function Known_Static_RM_Size (E : Entity_Id) return B with Inline;
+    procedure Reinit_RM_Size (Id : E) with Inline;
+    procedure Copy_RM_Size (To, From : E);
+ 
+    --  NOTE: "known" here does not mean "known at compile time". It means that
+    --  the compiler has computed the value of the field (either by default, or
+    --  by noting some representation clauses), and the field has not been
+    --  reinitialized.
+    --
+    --  We document the Esize functions here; the others above are analogous:
+    --
+    --     Known_Esize: True if Set_Esize has been called without a subsequent
+    --     Reinit_Esize.
+    --
+    --     Known_Static_Esize: True if Known_Esize and the Esize is known at
+    --     compile time. (We're not using "static" in the Ada RM sense here. We
+    --     are using it to mean "known at compile time".)
+    --
+    --     Reinit_Esize: Set the Esize field to its initial unknown state.
+    --
+    --     Copy_Esize: Copies the Esize from From to To; Known_Esize (From) may
+    --     be False, in which case Known_Esize (To) becomes False.
+    --
+    --     Esize: This is the normal automatically-generated getter for Esize,
+    --     declared elsewhere. Returns No_Uint if not Known_Esize.
+    --
+    --     Set_Esize: This is the normal automatically-generated setter for
+    --     Esize. After a call to this, Known_Esize is True. It is an error
+    --     to call this with a No_Uint value.
+    --
+    --  Normally, we call Set_Esize first, and then query Esize (and similarly
+    --  for other fields). However in some cases, we need to check Known_Esize
+    --  before calling Esize, because the code is written in such a way that we
+    --  don't know whether Set_Esize has already been called.
+    --
+    --  In two cases, Known_Static_Esize and Known_Static_RM_Size, there is one
+    --  more consideration, which is that we always return False for generic
+    --  types. Within a template, the size can look Known_Static, because of the
+    --  fake size values we put in template types, but they are not really
+    --  Known_Static and anyone testing if they are Known_Static within the
+    --  template should get False as a result to prevent incorrect assumptions.
+ 
+    ---------------------------------------------------------
+    -- Procedures for setting multiple of the above fields --
+    ---------------------------------------------------------
+ 
+    procedure Reinit_Component_Location (Id : E);
+    --  Initializes all fields describing the location of a component
+    --  (Normalized_Position, Component_Bit_Offset, Normalized_First_Bit,
+    --  Esize) to all be Unknown.
+ 
+    procedure Init_Size (Id : E; V : Int);
+    --  Initialize both the Esize and RM_Size fields of E to V
+ 
+    procedure Reinit_Size_Align (Id : E);
+    --  This procedure initializes both size fields and the alignment
+    --  field to all be Unknown.
+ 
+    procedure Reinit_Object_Size_Align (Id : E);
+    --  Same as Reinit_Size_Align except RM_Size field (which is only for types)
+    --  is unaffected.
+ 
+    ---------------------------------------------------
+    -- Access to Subprograms in Subprograms_For_Type --
+    ---------------------------------------------------
+ 
+    --  Now that we have variable-sized nodes, it might be possible to replace
+    --  the following with regular fields, and get rid of the flags used to mark
+    --  these kinds of subprograms.
+ 
+    function Is_Partial_DIC_Procedure             (Id : E) return B;
+ 
+    function DIC_Procedure                        (Id : E) return E;
+    function Partial_DIC_Procedure                (Id : E) return E;
+    function Invariant_Procedure                  (Id : E) return E;
+    function Partial_Invariant_Procedure          (Id : E) return E;
+    function Predicate_Function                   (Id : E) return E;
+    function Predicate_Function_M                 (Id : E) return E;
+ 
+    procedure Set_DIC_Procedure                   (Id : E; V : E);
+    procedure Set_Partial_DIC_Procedure           (Id : E; V : E);
+    procedure Set_Invariant_Procedure             (Id : E; V : E);
+    procedure Set_Partial_Invariant_Procedure     (Id : E; V : E);
+    procedure Set_Predicate_Function              (Id : E; V : E);
+    procedure Set_Predicate_Function_M            (Id : E; V : E);
+ 
+    ---------------
+    -- Iterators --
+    ---------------
+ 
+    --  The call to Next_xxx (obj) is equivalent to obj := Next_xxx (obj)
+    --  We define the set of Proc_Next_xxx routines simply for the purposes
+    --  of inlining them without necessarily inlining the function.
+ 
+    procedure Proc_Next_Component                 (N : in out Node_Id);
+    procedure Proc_Next_Component_Or_Discriminant (N : in out Node_Id);
+    procedure Proc_Next_Discriminant              (N : in out Node_Id);
+    procedure Proc_Next_Formal                    (N : in out Node_Id);
+    procedure Proc_Next_Formal_With_Extras        (N : in out Node_Id);
+    procedure Proc_Next_Index                     (N : in out Node_Id);
+    procedure Proc_Next_Inlined_Subprogram        (N : in out Node_Id);
+    procedure Proc_Next_Literal                   (N : in out Node_Id);
+    procedure Proc_Next_Stored_Discriminant       (N : in out Node_Id);
+ 
+    pragma Inline (Proc_Next_Component);
+    pragma Inline (Proc_Next_Component_Or_Discriminant);
+    pragma Inline (Proc_Next_Discriminant);
+    pragma Inline (Proc_Next_Formal);
+    pragma Inline (Proc_Next_Formal_With_Extras);
+    pragma Inline (Proc_Next_Index);
+    pragma Inline (Proc_Next_Inlined_Subprogram);
+    pragma Inline (Proc_Next_Literal);
+    pragma Inline (Proc_Next_Stored_Discriminant);
+ 
+    procedure Next_Component                 (N : in out Node_Id)
+      renames Proc_Next_Component;
+ 
+    procedure Next_Component_Or_Discriminant (N : in out Node_Id)
+      renames Proc_Next_Component_Or_Discriminant;
+ 
+    procedure Next_Discriminant              (N : in out Node_Id)
+      renames Proc_Next_Discriminant;
+ 
+    procedure Next_Formal                    (N : in out Node_Id)
+      renames Proc_Next_Formal;
+ 
+    procedure Next_Formal_With_Extras        (N : in out Node_Id)
+      renames Proc_Next_Formal_With_Extras;
+ 
+    procedure Next_Index                     (N : in out Node_Id)
+      renames Proc_Next_Index;
+ 
+    procedure Next_Inlined_Subprogram        (N : in out Node_Id)
+      renames Proc_Next_Inlined_Subprogram;
+ 
+    procedure Next_Literal                   (N : in out Node_Id)
+      renames Proc_Next_Literal;
+ 
+    procedure Next_Stored_Discriminant       (N : in out Node_Id)
+      renames Proc_Next_Stored_Discriminant;
+ 
+    ---------------------------
+    -- Testing Warning Flags --
+    ---------------------------
+ 
+    --  These routines are to be used rather than testing flags Warnings_Off,
+    --  Has_Pragma_Unmodified, Has_Pragma_Unreferenced. They deal with setting
+    --  the flags Warnings_Off_Used[_Unmodified|Unreferenced] for later access.
+ 
+    function Has_Warnings_Off (E : Entity_Id) return Boolean;
+    --  If Warnings_Off is set on E, then returns True and also sets the flag
+    --  Warnings_Off_Used on E. If Warnings_Off is not set on E, returns False
+    --  and has no side effect.
+ 
+    function Has_Unmodified (E : Entity_Id) return Boolean;
+    --  If flag Has_Pragma_Unmodified is set on E, returns True with no side
+    --  effects. Otherwise if Warnings_Off is set on E, returns True and also
+    --  sets the flag Warnings_Off_Used_Unmodified on E. If neither of the flags
+    --  Warnings_Off nor Has_Pragma_Unmodified is set, returns False with no
+    --  side effects.
+ 
+    function Has_Unreferenced (E : Entity_Id) return Boolean;
+    --  If flag Has_Pragma_Unreferenced is set on E, returns True with no side
+    --  effects. Otherwise if Warnings_Off is set on E, returns True and also
+    --  sets the flag Warnings_Off_Used_Unreferenced on E. If neither of the
+    --  flags Warnings_Off nor Has_Pragma_Unreferenced is set, returns False
+    --  with no side effects.
+ 
+    ----------------------------------------------
+    -- Subprograms for Accessing Rep Item Chain --
+    ----------------------------------------------
+ 
+    --  The First_Rep_Item field of every entity points to a linked list (linked
+    --  through Next_Rep_Item) of representation pragmas, attribute definition
+    --  clauses, representation clauses, and aspect specifications that apply to
+    --  the item. Note that in the case of types, it is assumed that any such
+    --  rep items for a base type also apply to all subtypes. This is achieved
+    --  by having the chain for subtypes link onto the chain for the base type,
+    --  so that new entries for the subtype are added at the start of the chain.
+    --
+    --  Note: aspect specification nodes are linked only when evaluation of the
+    --  expression is deferred to the freeze point. For further details see
+    --  Sem_Ch13.Analyze_Aspect_Specifications.
+ 
+    function Get_Attribute_Definition_Clause
+      (E  : Entity_Id;
+       Id : Attribute_Id) return Node_Id;
+    --  Searches the Rep_Item chain for a given entity E, for an instance of an
+    --  attribute definition clause with the given attribute Id. If found, the
+    --  value returned is the N_Attribute_Definition_Clause node, otherwise
+    --  Empty is returned.
+ 
+    --  WARNING: There is a matching C declaration of this subprogram in fe.h
+ 
+    function Get_Pragma (E : Entity_Id; Id : Pragma_Id) return Node_Id;
+    --  Searches the Rep_Item chain of entity E, for an instance of a pragma
+    --  with the given pragma Id. If found, the value returned is the N_Pragma
+    --  node, otherwise Empty is returned. The following contract pragmas that
+    --  appear in N_Contract nodes are also handled by this routine:
+    --    Abstract_State
+    --    Async_Readers
+    --    Async_Writers
+    --    Attach_Handler
+    --    Constant_After_Elaboration
+    --    Contract_Cases
+    --    Depends
+    --    Effective_Reads
+    --    Effective_Writes
+    --    Global
+    --    Initial_Condition
+    --    Initializes
+    --    Interrupt_Handler
+    --    No_Caching
+    --    Part_Of
+    --    Precondition
+    --    Postcondition
+    --    Refined_Depends
+    --    Refined_Global
+    --    Refined_Post
+    --    Refined_State
+    --    Subprogram_Variant
+    --    Test_Case
+    --    Volatile_Function
+ 
+    function Get_Class_Wide_Pragma
+      (E  : Entity_Id;
+       Id : Pragma_Id) return Node_Id;
+    --  Examine Rep_Item chain to locate a classwide pre- or postcondition of a
+    --  primitive operation. Returns Empty if not present.
+ 
+    function Get_Record_Representation_Clause (E : Entity_Id) return Node_Id;
+    --  Searches the Rep_Item chain for a given entity E, for a record
+    --  representation clause, and if found, returns it. Returns Empty
+    --  if no such clause is found.
+ 
+    function Present_In_Rep_Item (E : Entity_Id; N : Node_Id) return Boolean;
+    --  Return True if N is present in the Rep_Item chain for a given entity E
+ 
+    procedure Record_Rep_Item (E : Entity_Id; N : Node_Id);
+    --  N is the node for a representation pragma, representation clause, an
+    --  attribute definition clause, or an aspect specification that applies to
+    --  entity E. This procedure links the node N onto the Rep_Item chain for
+    --  entity E. Note that it is an error to call this procedure with E being
+    --  overloadable, and N being a pragma that applies to multiple overloadable
+    --  entities (Convention, Interface, Inline, Inline_Always, Import, Export,
+    --  External). This is not allowed even in the case where the entity is not
+    --  overloaded, since we can't rely on it being present in the overloaded
+    --  case, it is not useful to have it present in the non-overloaded case.
+ 
+    -------------------------------
+    -- Miscellaneous Subprograms --
+    -------------------------------
+ 
+    procedure Append_Entity (Id : Entity_Id; Scop : Entity_Id);
+    --  Add an entity to the list of entities declared in the scope Scop
+ 
+    function Get_Full_View (T : Entity_Id) return Entity_Id;
+    --  If T is an incomplete type and the full declaration has been seen, or
+    --  is the name of a class_wide type whose root is incomplete, return the
+    --  corresponding full declaration, else return T itself.
+ 
+    function Is_Entity_Name (N : Node_Id) return Boolean;
+    --  Test if the node N is the name of an entity (i.e. is an identifier,
+    --  expanded name, or an attribute reference that returns an entity).
+ 
+    --  WARNING: There is a matching C declaration of this subprogram in fe.h
+ 
+    procedure Link_Entities (First, Second : Entity_Id);
+    --  Link entities First and Second in one entity chain.
+    --
+    --  NOTE: No updates are done to the First_Entity and Last_Entity fields
+    --  of the scope.
+ 
+    procedure Remove_Entity (Id : Entity_Id);
+    --  Remove entity Id from the entity chain of its scope
+ 
+    function Subtype_Kind (K : Entity_Kind) return Entity_Kind;
+    --  Given an entity_kind K this function returns the entity_kind
+    --  corresponding to subtype kind of the type represented by K. For
+    --  example if K is E_Signed_Integer_Type then E_Signed_Integer_Subtype
+    --  is returned. If K is already a subtype kind it itself is returned. An
+    --  internal error is generated if no such correspondence exists for K.
+ 
+    procedure Unlink_Next_Entity (Id : Entity_Id);
+    --  Unchain entity Id's forward link within the entity chain of its scope
+ 
+    function Is_Volatile (Id : E) return B;
+    procedure Set_Is_Volatile (Id : E; V : B := True);
+    --  Call [Set_]Is_Volatile_Type/Is_Volatile_Object as appropriate for the
+    --  Ekind of Id.
+ 
+    function Convention
+      (N : Entity_Id) return Convention_Id renames Basic_Convention;
+    procedure Set_Convention (E : Entity_Id; Val : Convention_Id);
+    --  Same as Set_Basic_Convention, but with an extra check for access types.
+    --  In particular, if E is an access-to-subprogram type, and Val is a
+    --  foreign convention, then we set Can_Use_Internal_Rep to False on E.
+    --  Also, if the Etype of E is set and is an anonymous access type with
+    --  no convention set, this anonymous type inherits the convention of E.
+ 
+    pragma Inline (Is_Entity_Name);
+ 
+    ----------------------------------
+    -- Debugging Output Subprograms --
+    ----------------------------------
+ 
+    procedure Write_Entity_Info (Id : Entity_Id; Prefix : String);
+    --  A debugging procedure to write out information about an entity
+ 
+ end Einfo.Utils;
diff -Nrcpad gcc-11.3.0/gcc/ada/einfo.adb gcc-12.1.0/gcc/ada/einfo.adb
*** gcc-11.3.0/gcc/ada/einfo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/einfo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,11577 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;   use Atree;
! with Elists;  use Elists;
! with Namet;   use Namet;
! with Nlists;  use Nlists;
! with Output;  use Output;
! with Sinfo;   use Sinfo;
! with Stand;   use Stand;
! 
! package body Einfo is
! 
!    use Atree.Unchecked_Access;
!    --  This is one of the packages that is allowed direct untyped access to
!    --  the fields in a node, since it provides the next level abstraction
!    --  which incorporates appropriate checks.
! 
!    ----------------------------------------------
!    -- Usage of Fields in Defining Entity Nodes --
!    ----------------------------------------------
! 
!    --  Four of these fields are defined in Sinfo, since they in are the base
!    --  part of the node. The access routines for these four fields and the
!    --  corresponding set procedures are defined in Sinfo. These fields are
!    --  present in all entities. Note that Homonym is also in the base part of
!    --  the node, but has access routines that are more properly part of Einfo,
!    --  which is why they are defined here.
! 
!    --    Chars                           Name1
!    --    Next_Entity                     Node2
!    --    Scope                           Node3
!    --    Etype                           Node5
! 
!    --  Remaining fields are present only in extended nodes (i.e. entities).
! 
!    --  The following fields are present in all entities
! 
!    --    Homonym                         Node4
!    --    First_Rep_Item                  Node6
!    --    Freeze_Node                     Node7
!    --    Prev_Entity                     Node36
!    --    Associated_Entity               Node37
! 
!    --  The usage of other fields (and the entity kinds to which it applies)
!    --  depends on the particular field (see Einfo spec for details).
! 
!    --    Associated_Node_For_Itype       Node8
!    --    Dependent_Instances             Elist8
!    --    Hiding_Loop_Variable            Node8
!    --    Mechanism                       Uint8 (but returns Mechanism_Type)
!    --    Normalized_First_Bit            Uint8
!    --    Refinement_Constituents         Elist8
!    --    Return_Applies_To               Node8
!    --    First_Exit_Statement            Node8
! 
!    --    Class_Wide_Type                 Node9
!    --    Current_Value                   Node9
!    --    Renaming_Map                    Uint9
! 
!    --    Direct_Primitive_Operations     Elist10
!    --    Discriminal_Link                Node10
!    --    Float_Rep                       Uint10 (but returns Float_Rep_Kind)
!    --    Handler_Records                 List10
!    --    Normalized_Position_Max         Uint10
!    --    Part_Of_Constituents            Elist10
! 
!    --    Block_Node                      Node11
!    --    Component_Bit_Offset            Uint11
!    --    Full_View                       Node11
!    --    Entry_Component                 Node11
!    --    Enumeration_Pos                 Uint11
!    --    Generic_Homonym                 Node11
!    --    Part_Of_References              Elist11
!    --    Protected_Body_Subprogram       Node11
! 
!    --    Barrier_Function                Node12
!    --    Enumeration_Rep                 Uint12
!    --    Esize                           Uint12
!    --    Next_Inlined_Subprogram         Node12
! 
!    --    Component_Clause                Node13
!    --    Elaboration_Entity              Node13
!    --    Extra_Accessibility             Node13
!    --    RM_Size                         Uint13
! 
!    --    Alignment                       Uint14
!    --    Normalized_Position             Uint14
!    --    Postconditions_Proc             Node14
! 
!    --    Discriminant_Number             Uint15
!    --    DT_Position                     Uint15
!    --    DT_Entry_Count                  Uint15
!    --    Entry_Parameters_Type           Node15
!    --    Extra_Formal                    Node15
!    --    Pending_Access_Types            Elist15
!    --    Related_Instance                Node15
!    --    Status_Flag_Or_Transient_Decl   Node15
! 
!    --    Access_Disp_Table               Elist16
!    --    Body_References                 Elist16
!    --    Cloned_Subtype                  Node16
!    --    DTC_Entity                      Node16
!    --    Entry_Formal                    Node16
!    --    First_Private_Entity            Node16
!    --    Lit_Strings                     Node16
!    --    Scale_Value                     Uint16
!    --    String_Literal_Length           Uint16
!    --    Unset_Reference                 Node16
! 
!    --    Actual_Subtype                  Node17
!    --    Digits_Value                    Uint17
!    --    Discriminal                     Node17
!    --    First_Entity                    Node17
!    --    First_Index                     Node17
!    --    First_Literal                   Node17
!    --    Master_Id                       Node17
!    --    Modulus                         Uint17
!    --    Prival                          Node17
! 
!    --    Alias                           Node18
!    --    Corresponding_Concurrent_Type   Node18
!    --    Corresponding_Protected_Entry   Node18
!    --    Corresponding_Record_Type       Node18
!    --    Delta_Value                     Ureal18
!    --    Enclosing_Scope                 Node18
!    --    Equivalent_Type                 Node18
!    --    Lit_Indexes                     Node18
!    --    Private_Dependents              Elist18
!    --    Renamed_Entity                  Node18
!    --    Renamed_Object                  Node18
!    --    String_Literal_Low_Bound        Node18
! 
!    --    Body_Entity                     Node19
!    --    Corresponding_Discriminant      Node19
!    --    Default_Aspect_Component_Value  Node19
!    --    Default_Aspect_Value            Node19
!    --    Entry_Bodies_Array              Node19
!    --    Extra_Accessibility_Of_Result   Node19
!    --    Non_Limited_View                Node19
!    --    Parent_Subtype                  Node19
!    --    Receiving_Entry                 Node19
!    --    Size_Check_Code                 Node19
!    --    Spec_Entity                     Node19
!    --    Underlying_Full_View            Node19
! 
!    --    Component_Type                  Node20
!    --    Default_Value                   Node20
!    --    Directly_Designated_Type        Node20
!    --    Discriminant_Checking_Func      Node20
!    --    Discriminant_Default_Value      Node20
!    --    Last_Entity                     Node20
!    --    Prival_Link                     Node20
!    --    Register_Exception_Call         Node20
!    --    Scalar_Range                    Node20
! 
!    --    Accept_Address                  Elist21
!    --    Corresponding_Record_Component  Node21
!    --    Default_Expr_Function           Node21
!    --    Discriminant_Constraint         Elist21
!    --    Interface_Name                  Node21
!    --    Original_Array_Type             Node21
!    --    Small_Value                     Ureal21
! 
!    --    Associated_Storage_Pool         Node22
!    --    Component_Size                  Uint22
!    --    Corresponding_Remote_Type       Node22
!    --    Enumeration_Rep_Expr            Node22
!    --    Original_Record_Component       Node22
!    --    Protected_Formal                Node22
!    --    Scope_Depth_Value               Uint22
!    --    Shared_Var_Procs_Instance       Node22
! 
!    --    CR_Discriminant                 Node23
!    --    Entry_Cancel_Parameter          Node23
!    --    Enum_Pos_To_Rep                 Node23
!    --    Extra_Constrained               Node23
!    --    Finalization_Master             Node23
!    --    Generic_Renamings               Elist23
!    --    Inner_Instances                 Elist23
!    --    Limited_View                    Node23
!    --    Packed_Array_Impl_Type          Node23
!    --    Protection_Object               Node23
!    --    Stored_Constraint               Elist23
! 
!    --    Incomplete_Actuals              Elist24
!    --    Minimum_Accessibility           Node24
!    --    Related_Expression              Node24
!    --    Subps_Index                     Uint24
! 
!    --    Contract_Wrapper                Node25
!    --    Debug_Renaming_Link             Node25
!    --    DT_Offset_To_Top_Func           Node25
!    --    Interface_Alias                 Node25
!    --    Interfaces                      Elist25
!    --    Related_Array_Object            Node25
!    --    Static_Discrete_Predicate       List25
!    --    Static_Real_Or_String_Predicate Node25
!    --    Task_Body_Procedure             Node25
! 
!    --    Dispatch_Table_Wrappers         Elist26
!    --    Last_Assignment                 Node26
!    --    Overridden_Operation            Node26
!    --    Package_Instantiation           Node26
!    --    Storage_Size_Variable           Node26
! 
!    --    Current_Use_Clause              Node27
!    --    Related_Type                    Node27
!    --    Wrapped_Entity                  Node27
! 
!    --    Extra_Formals                   Node28
!    --    Finalizer                       Node28
!    --    Initialization_Statements       Node28
!    --    Original_Access_Type            Node28
!    --    Relative_Deadline_Variable      Node28
!    --    Underlying_Record_View          Node28
! 
!    --    Anonymous_Masters               Elist29
!    --    BIP_Initialization_Call         Node29
!    --    Subprograms_For_Type            Elist29
! 
!    --    Access_Disp_Table_Elab_Flag     Node30
!    --    Anonymous_Object                Node30
!    --    Corresponding_Equality          Node30
!    --    Hidden_In_Formal_Instance       Elist30
!    --    Last_Aggregate_Assignment       Node30
!    --    Static_Initialization           Node30
! 
!    --    Activation_Record_Component     Node31
!    --    Derived_Type_Link               Node31
!    --    Thunk_Entity                    Node31
! 
!    --    Corresponding_Function          Node32
!    --    Corresponding_Procedure         Node32
!    --    Encapsulating_State             Node32
!    --    No_Tagged_Streams_Pragma        Node32
! 
!    --    Linker_Section_Pragma           Node33
! 
!    --    Contract                        Node34
! 
!    --    Anonymous_Designated_Type       Node35
!    --    Entry_Max_Queue_Lengths_Array   Node35
!    --    Import_Pragma                   Node35
! 
!    --    Validated_Object                Node38
!    --    Predicated_Parent               Node38
!    --    Class_Wide_Clone                Node38
! 
!    --    Protected_Subprogram            Node39
! 
!    --    SPARK_Pragma                    Node40
! 
!    --    Access_Subprogram_Wrapper       Node41
!    --    Original_Protected_Subprogram   Node41
!    --    SPARK_Aux_Pragma                Node41
! 
!    ---------------------------------------------
!    -- Usage of Flags in Defining Entity Nodes --
!    ---------------------------------------------
! 
!    --  All flags are unique, there is no overlaying, so each flag is physically
!    --  present in every entity. However, for many of the flags, it only makes
!    --  sense for them to be set true for certain subsets of entity kinds. See
!    --  the spec of Einfo for further details.
! 
!    --    Is_Inlined_Always               Flag1
!    --    Is_Hidden_Non_Overridden_Subpgm Flag2
!    --    Has_Own_DIC                     Flag3
!    --    Is_Frozen                       Flag4
!    --    Has_Discriminants               Flag5
!    --    Is_Dispatching_Operation        Flag6
!    --    Is_Immediately_Visible          Flag7
!    --    In_Use                          Flag8
!    --    Is_Potentially_Use_Visible      Flag9
!    --    Is_Public                       Flag10
! 
!    --    Is_Inlined                      Flag11
!    --    Is_Constrained                  Flag12
!    --    Is_Generic_Type                 Flag13
!    --    Depends_On_Private              Flag14
!    --    Is_Aliased                      Flag15
!    --    Is_Volatile                     Flag16
!    --    Is_Internal                     Flag17
!    --    Has_Delayed_Freeze              Flag18
!    --    Is_Abstract_Subprogram          Flag19
!    --    Is_Concurrent_Record_Type       Flag20
! 
!    --    Has_Master_Entity               Flag21
!    --    Needs_No_Actuals                Flag22
!    --    Has_Storage_Size_Clause         Flag23
!    --    Is_Imported                     Flag24
!    --    Is_Limited_Record               Flag25
!    --    Has_Completion                  Flag26
!    --    Has_Pragma_Controlled           Flag27
!    --    Is_Statically_Allocated         Flag28
!    --    Has_Size_Clause                 Flag29
!    --    Has_Task                        Flag30
! 
!    --    Checks_May_Be_Suppressed        Flag31
!    --    Kill_Elaboration_Checks         Flag32
!    --    Kill_Range_Checks               Flag33
!    --    Has_Independent_Components      Flag34
!    --    Is_Class_Wide_Equivalent_Type   Flag35
!    --    Referenced_As_LHS               Flag36
!    --    Is_Known_Non_Null               Flag37
!    --    Can_Never_Be_Null               Flag38
!    --    Has_Default_Aspect              Flag39
!    --    Body_Needed_For_SAL             Flag40
! 
!    --    Treat_As_Volatile               Flag41
!    --    Is_Controlled_Active            Flag42
!    --    Has_Controlled_Component        Flag43
!    --    Is_Pure                         Flag44
!    --    In_Private_Part                 Flag45
!    --    Has_Alignment_Clause            Flag46
!    --    Has_Exit                        Flag47
!    --    In_Package_Body                 Flag48
!    --    Reachable                       Flag49
!    --    Delay_Subprogram_Descriptors    Flag50
! 
!    --    Is_Packed                       Flag51
!    --    Is_Entry_Formal                 Flag52
!    --    Is_Private_Descendant           Flag53
!    --    Return_Present                  Flag54
!    --    Is_Tagged_Type                  Flag55
!    --    Has_Homonym                     Flag56
!    --    Is_Hidden                       Flag57
!    --    Non_Binary_Modulus              Flag58
!    --    Is_Preelaborated                Flag59
!    --    Is_Shared_Passive               Flag60
! 
!    --    Is_Remote_Types                 Flag61
!    --    Is_Remote_Call_Interface        Flag62
!    --    Is_Character_Type               Flag63
!    --    Is_Intrinsic_Subprogram         Flag64
!    --    Has_Record_Rep_Clause           Flag65
!    --    Has_Enumeration_Rep_Clause      Flag66
!    --    Has_Small_Clause                Flag67
!    --    Has_Component_Size_Clause       Flag68
!    --    Is_Access_Constant              Flag69
!    --    Is_First_Subtype                Flag70
! 
!    --    Has_Completion_In_Body          Flag71
!    --    Has_Unknown_Discriminants       Flag72
!    --    Is_Child_Unit                   Flag73
!    --    Is_CPP_Class                    Flag74
!    --    Has_Non_Standard_Rep            Flag75
!    --    Is_Constructor                  Flag76
!    --    Static_Elaboration_Desired      Flag77
!    --    Is_Tag                          Flag78
!    --    Has_All_Calls_Remote            Flag79
!    --    Is_Constr_Subt_For_U_Nominal    Flag80
! 
!    --    Is_Asynchronous                 Flag81
!    --    Has_Gigi_Rep_Item               Flag82
!    --    Has_Machine_Radix_Clause        Flag83
!    --    Machine_Radix_10                Flag84
!    --    Is_Atomic                       Flag85
!    --    Has_Atomic_Components           Flag86
!    --    Has_Volatile_Components         Flag87
!    --    Discard_Names                   Flag88
!    --    Is_Interrupt_Handler            Flag89
!    --    Returns_By_Ref                  Flag90
! 
!    --    Is_Itype                        Flag91
!    --    Size_Known_At_Compile_Time      Flag92
!    --    Reverse_Storage_Order           Flag93
!    --    Is_Generic_Actual_Type          Flag94
!    --    Uses_Sec_Stack                  Flag95
!    --    Warnings_Off                    Flag96
!    --    Is_Controlling_Formal           Flag97
!    --    Has_Controlling_Result          Flag98
!    --    Is_Exported                     Flag99
!    --    Has_Specified_Layout            Flag100
! 
!    --    Has_Nested_Block_With_Handler   Flag101
!    --    Is_Called                       Flag102
!    --    Is_Completely_Hidden            Flag103
!    --    Address_Taken                   Flag104
!    --    Suppress_Initialization         Flag105
!    --    Is_Limited_Composite            Flag106
!    --    Is_Private_Composite            Flag107
!    --    Default_Expressions_Processed   Flag108
!    --    Is_Non_Static_Subtype           Flag109
!    --    Has_Out_Or_In_Out_Parameter     Flag110
! 
!    --    Is_Formal_Subprogram            Flag111
!    --    Is_Renaming_Of_Object           Flag112
!    --    No_Return                       Flag113
!    --    Delay_Cleanups                  Flag114
!    --    Never_Set_In_Source             Flag115
!    --    Is_Visible_Lib_Unit             Flag116
!    --    Is_Unchecked_Union              Flag117
!    --    Is_CUDA_Kernel                  Flag118
!    --    Has_Convention_Pragma           Flag119
!    --    Has_Primitive_Operations        Flag120
! 
!    --    Has_Pragma_Pack                 Flag121
!    --    Is_Bit_Packed_Array             Flag122
!    --    Has_Unchecked_Union             Flag123
!    --    Is_Eliminated                   Flag124
!    --    C_Pass_By_Copy                  Flag125
!    --    Is_Instantiated                 Flag126
!    --    Is_Valued_Procedure             Flag127
!    --    (used for Component_Alignment)  Flag128
!    --    (used for Component_Alignment)  Flag129
!    --    Is_Generic_Instance             Flag130
! 
!    --    No_Pool_Assigned                Flag131
!    --    Is_DIC_Procedure                Flag132
!    --    Has_Inherited_DIC               Flag133
!    --    Has_Aliased_Components          Flag135
!    --    No_Strict_Aliasing              Flag136
!    --    Is_Machine_Code_Subprogram      Flag137
!    --    Is_Packed_Array_Impl_Type       Flag138
!    --    Has_Biased_Representation       Flag139
!    --    Has_Complex_Representation      Flag140
! 
!    --    Is_Constr_Subt_For_UN_Aliased   Flag141
!    --    Has_Missing_Return              Flag142
!    --    Has_Recursive_Call              Flag143
!    --    Is_Unsigned_Type                Flag144
!    --    Strict_Alignment                Flag145
!    --    Is_Abstract_Type                Flag146
!    --    Needs_Debug_Info                Flag147
!    --    Is_Elaboration_Checks_OK_Id     Flag148
!    --    Is_Compilation_Unit             Flag149
!    --    Has_Pragma_Elaborate_Body       Flag150
! 
!    --    Has_Private_Ancestor            Flag151
!    --    Entry_Accepted                  Flag152
!    --    Is_Obsolescent                  Flag153
!    --    Has_Per_Object_Constraint       Flag154
!    --    Has_Private_Declaration         Flag155
!    --    Referenced                      Flag156
!    --    Has_Pragma_Inline               Flag157
!    --    Finalize_Storage_Only           Flag158
!    --    From_Limited_With               Flag159
!    --    Is_Package_Body_Entity          Flag160
! 
!    --    Has_Qualified_Name              Flag161
!    --    Nonzero_Is_True                 Flag162
!    --    Is_True_Constant                Flag163
!    --    Reverse_Bit_Order               Flag164
!    --    Suppress_Style_Checks           Flag165
!    --    Debug_Info_Off                  Flag166
!    --    Sec_Stack_Needed_For_Return     Flag167
!    --    Materialize_Entity              Flag168
!    --    Has_Pragma_Thread_Local_Storage Flag169
!    --    Is_Known_Valid                  Flag170
! 
!    --    Is_Hidden_Open_Scope            Flag171
!    --    Has_Object_Size_Clause          Flag172
!    --    Has_Fully_Qualified_Name        Flag173
!    --    Elaboration_Entity_Required     Flag174
!    --    Has_Forward_Instantiation       Flag175
!    --    Is_Discrim_SO_Function          Flag176
!    --    Size_Depends_On_Discriminant    Flag177
!    --    Is_Null_Init_Proc               Flag178
!    --    Has_Pragma_Pure_Function        Flag179
!    --    Has_Pragma_Unreferenced         Flag180
! 
!    --    Has_Contiguous_Rep              Flag181
!    --    Has_Xref_Entry                  Flag182
!    --    Must_Be_On_Byte_Boundary        Flag183
!    --    Has_Stream_Size_Clause          Flag184
!    --    Is_Ada_2005_Only                Flag185
!    --    Is_Interface                    Flag186
!    --    Has_Constrained_Partial_View    Flag187
!    --    Uses_Lock_Free                  Flag188
!    --    Is_Pure_Unit_Access_Type        Flag189
!    --    Has_Specified_Stream_Input      Flag190
! 
!    --    Has_Specified_Stream_Output     Flag191
!    --    Has_Specified_Stream_Read       Flag192
!    --    Has_Specified_Stream_Write      Flag193
!    --    Is_Local_Anonymous_Access       Flag194
!    --    Is_Primitive_Wrapper            Flag195
!    --    Was_Hidden                      Flag196
!    --    Is_Limited_Interface            Flag197
!    --    Has_Pragma_Ordered              Flag198
!    --    Is_Ada_2012_Only                Flag199
! 
!    --    Has_Delayed_Aspects             Flag200
!    --    Has_Pragma_No_Inline            Flag201
!    --    Itype_Printed                   Flag202
!    --    Has_Pragma_Pure                 Flag203
!    --    Is_Known_Null                   Flag204
!    --    Low_Bound_Tested                Flag205
!    --    Is_Visible_Formal               Flag206
!    --    Known_To_Have_Preelab_Init      Flag207
!    --    Must_Have_Preelab_Init          Flag208
!    --    Is_Return_Object                Flag209
! 
!    --    Elaborate_Body_Desirable        Flag210
!    --    Has_Static_Discriminants        Flag211
!    --    Has_Pragma_Unreferenced_Objects Flag212
!    --    Requires_Overriding             Flag213
!    --    Has_RACW                        Flag214
!    --    Is_Param_Block_Component_Type   Flag215
!    --    Universal_Aliasing              Flag216
!    --    Suppress_Value_Tracking_On_Call Flag217
!    --    Is_Primitive                    Flag218
!    --    Has_Initial_Value               Flag219
! 
!    --    Has_Dispatch_Table              Flag220
!    --    Has_Pragma_Preelab_Init         Flag221
!    --    Used_As_Generic_Actual          Flag222
!    --    Is_Descendant_Of_Address        Flag223
!    --    Is_Raised                       Flag224
!    --    Is_Thunk                        Flag225
!    --    Is_Only_Out_Parameter           Flag226
!    --    Referenced_As_Out_Parameter     Flag227
!    --    Has_Thunks                      Flag228
!    --    Can_Use_Internal_Rep            Flag229
! 
!    --    Has_Pragma_Inline_Always        Flag230
!    --    Renamed_In_Spec                 Flag231
!    --    Has_Own_Invariants              Flag232
!    --    Has_Pragma_Unmodified           Flag233
!    --    Is_Dispatch_Table_Entity        Flag234
!    --    Is_Trivial_Subprogram           Flag235
!    --    Warnings_Off_Used               Flag236
!    --    Warnings_Off_Used_Unmodified    Flag237
!    --    Warnings_Off_Used_Unreferenced  Flag238
!    --    No_Reordering                   Flag239
! 
!    --    Has_Expanded_Contract           Flag240
!    --    Optimize_Alignment_Space        Flag241
!    --    Optimize_Alignment_Time         Flag242
!    --    Overlays_Constant               Flag243
!    --    Is_RACW_Stub_Type               Flag244
!    --    Is_Private_Primitive            Flag245
!    --    Is_Underlying_Record_View       Flag246
!    --    OK_To_Rename                    Flag247
!    --    Has_Inheritable_Invariants      Flag248
!    --    Is_Safe_To_Reevaluate           Flag249
! 
!    --    Has_Predicates                  Flag250
!    --    Has_Implicit_Dereference        Flag251
!    --    Is_Finalized_Transient          Flag252
!    --    Disable_Controlled              Flag253
!    --    Is_Implementation_Defined       Flag254
!    --    Is_Predicate_Function           Flag255
!    --    Is_Predicate_Function_M         Flag256
!    --    Is_Invariant_Procedure          Flag257
!    --    Has_Dynamic_Predicate_Aspect    Flag258
!    --    Has_Static_Predicate_Aspect     Flag259
! 
!    --    Has_Loop_Entry_Attributes       Flag260
!    --    Has_Delayed_Rep_Aspects         Flag261
!    --    May_Inherit_Delayed_Rep_Aspects Flag262
!    --    Has_Visible_Refinement          Flag263
!    --    Is_Discriminant_Check_Function  Flag264
!    --    SPARK_Pragma_Inherited          Flag265
!    --    SPARK_Aux_Pragma_Inherited      Flag266
!    --    Has_Shift_Operator              Flag267
!    --    Is_Independent                  Flag268
!    --    Has_Static_Predicate            Flag269
! 
!    --    Stores_Attribute_Old_Prefix     Flag270
!    --    Has_Protected                   Flag271
!    --    SSO_Set_Low_By_Default          Flag272
!    --    SSO_Set_High_By_Default         Flag273
!    --    Is_Generic_Actual_Subprogram    Flag274
!    --    No_Predicate_On_Actual          Flag275
!    --    No_Dynamic_Predicate_On_Actual  Flag276
!    --    Is_Checked_Ghost_Entity         Flag277
!    --    Is_Ignored_Ghost_Entity         Flag278
!    --    Contains_Ignored_Ghost_Code     Flag279
! 
!    --    Partial_View_Has_Unknown_Discr  Flag280
!    --    Is_Static_Type                  Flag281
!    --    Has_Nested_Subprogram           Flag282
!    --    Is_Uplevel_Referenced_Entity    Flag283
!    --    Is_Unimplemented                Flag284
!    --    Is_Volatile_Full_Access         Flag285
!    --    Is_Exception_Handler            Flag286
!    --    Rewritten_For_C                 Flag287
!    --    Predicates_Ignored              Flag288
!    --    Has_Timing_Event                Flag289
! 
!    --    Is_Class_Wide_Clone             Flag290
!    --    Has_Inherited_Invariants        Flag291
!    --    Is_Partial_Invariant_Procedure  Flag292
!    --    Is_Actual_Subtype               Flag293
!    --    Has_Pragma_Unused               Flag294
!    --    Is_Ignored_Transient            Flag295
!    --    Has_Partial_Visible_Refinement  Flag296
!    --    Is_Entry_Wrapper                Flag297
!    --    Is_Underlying_Full_View         Flag298
!    --    Body_Needed_For_Inlining        Flag299
! 
!    --    Has_Private_Extension           Flag300
!    --    Ignore_SPARK_Mode_Pragmas       Flag301
!    --    Is_Initial_Condition_Procedure  Flag302
!    --    Suppress_Elaboration_Warnings   Flag303
!    --    Is_Elaboration_Warnings_OK_Id   Flag304
!    --    Is_Activation_Record            Flag305
!    --    Needs_Activation_Record         Flag306
!    --    Is_Loop_Parameter               Flag307
!    --    Has_Yield_Aspect                Flag308
! 
!    --    (unused)                        Flag309
! 
!    --  Note: Flag310-317 are defined in atree.ads/adb, but not yet in atree.h
! 
!    -----------------------
!    -- Local subprograms --
!    -----------------------
! 
!    function Has_Option
!      (State_Id   : Entity_Id;
!       Option_Nam : Name_Id) return Boolean;
!    --  Determine whether abstract state State_Id has particular option denoted
!    --  by the name Option_Nam.
! 
!    ---------------
!    -- Float_Rep --
!    ---------------
! 
!    function Float_Rep (Id : E) return F is
!       pragma Assert (Is_Floating_Point_Type (Id));
!    begin
!       return F'Val (UI_To_Int (Uint10 (Base_Type (Id))));
!    end Float_Rep;
! 
!    ----------------
!    -- Has_Option --
!    ----------------
! 
!    function Has_Option
!      (State_Id   : Entity_Id;
!       Option_Nam : Name_Id) return Boolean
!    is
!       Decl    : constant Node_Id := Parent (State_Id);
!       Opt     : Node_Id;
!       Opt_Nam : Node_Id;
! 
!    begin
!       pragma Assert (Ekind (State_Id) = E_Abstract_State);
! 
!       --  The declaration of abstract states with options appear as an
!       --  extension aggregate. If this is not the case, the option is not
!       --  available.
! 
!       if Nkind (Decl) /= N_Extension_Aggregate then
!          return False;
!       end if;
! 
!       --  Simple options
! 
!       Opt := First (Expressions (Decl));
!       while Present (Opt) loop
!          if Nkind (Opt) = N_Identifier and then Chars (Opt) = Option_Nam then
!             return True;
!          end if;
! 
!          Next (Opt);
!       end loop;
! 
!       --  Complex options with various specifiers
! 
!       Opt := First (Component_Associations (Decl));
!       while Present (Opt) loop
!          Opt_Nam := First (Choices (Opt));
! 
!          if Nkind (Opt_Nam) = N_Identifier
!            and then Chars (Opt_Nam) = Option_Nam
!          then
!             return True;
!          end if;
! 
!          Next (Opt);
!       end loop;
! 
!       return False;
!    end Has_Option;
! 
!    --------------------------------
!    -- Attribute Access Functions --
!    --------------------------------
! 
!    function Abstract_States (Id : E) return L is
!    begin
!       pragma Assert (Is_Package_Or_Generic_Package (Id));
!       return Elist25 (Id);
!    end Abstract_States;
! 
!    function Accept_Address (Id : E) return L is
!    begin
!       return Elist21 (Id);
!    end Accept_Address;
! 
!    function Access_Disp_Table (Id : E) return L is
!    begin
!       pragma Assert (Ekind (Id) in E_Record_Subtype
!                                  | E_Record_Type
!                                  | E_Record_Type_With_Private);
!       return Elist16 (Implementation_Base_Type (Id));
!    end Access_Disp_Table;
! 
!    function Access_Disp_Table_Elab_Flag (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Record_Subtype
!                                  | E_Record_Type
!                                  | E_Record_Type_With_Private);
!       return Node30 (Implementation_Base_Type (Id));
!    end Access_Disp_Table_Elab_Flag;
! 
!    function Access_Subprogram_Wrapper (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Subprogram_Type);
!       return Node41 (Id);
!    end Access_Subprogram_Wrapper;
! 
!    function Activation_Record_Component (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant
!                                  | E_In_Parameter
!                                  | E_In_Out_Parameter
!                                  | E_Loop_Parameter
!                                  | E_Out_Parameter
!                                  | E_Variable);
!       return Node31 (Id);
!    end Activation_Record_Component;
! 
!    function Actual_Subtype (Id : E) return E is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Constant | E_Variable | E_Generic_In_Out_Parameter
!            or else Is_Formal (Id));
!       return Node17 (Id);
!    end Actual_Subtype;
! 
!    function Address_Taken (Id : E) return B is
!    begin
!       return Flag104 (Id);
!    end Address_Taken;
! 
!    function Alias (Id : E) return E is
!    begin
!       pragma Assert
!         (Is_Overloadable (Id) or else Ekind (Id) = E_Subprogram_Type);
!       return Node18 (Id);
!    end Alias;
! 
!    function Alignment (Id : E) return U is
!    begin
!       pragma Assert (Is_Type (Id)
!                        or else Is_Formal (Id)
!                        or else Ekind (Id) in E_Loop_Parameter
!                                            | E_Constant
!                                            | E_Exception
!                                            | E_Variable);
!       return Uint14 (Id);
!    end Alignment;
! 
!    function Anonymous_Designated_Type (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       return Node35 (Id);
!    end Anonymous_Designated_Type;
! 
!    function Anonymous_Masters (Id : E) return L is
!    begin
!       pragma Assert (Ekind (Id) in E_Function
!                                  | E_Package
!                                  | E_Procedure
!                                  | E_Subprogram_Body);
!       return Elist29 (Id);
!    end Anonymous_Masters;
! 
!    function Anonymous_Object (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Protected_Type | E_Task_Type);
!       return Node30 (Id);
!    end Anonymous_Object;
! 
!    function Associated_Entity (Id : E) return E is
!    begin
!       return Node37 (Id);
!    end Associated_Entity;
! 
!    function Associated_Formal_Package (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       return Node12 (Id);
!    end Associated_Formal_Package;
! 
!    function Associated_Node_For_Itype (Id : E) return N is
!    begin
!       return Node8 (Id);
!    end Associated_Node_For_Itype;
! 
!    function Associated_Storage_Pool (Id : E) return E is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       return Node22 (Root_Type (Id));
!    end Associated_Storage_Pool;
! 
!    function Barrier_Function (Id : E) return N is
!    begin
!       pragma Assert (Is_Entry (Id));
!       return Node12 (Id);
!    end Barrier_Function;
! 
!    function Block_Node (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) = E_Block);
!       return Node11 (Id);
!    end Block_Node;
! 
!    function Body_Entity (Id : E) return E is
!    begin
!       pragma Assert (Is_Package_Or_Generic_Package (Id));
!       return Node19 (Id);
!    end Body_Entity;
! 
!    function Body_Needed_For_Inlining (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       return Flag299 (Id);
!    end Body_Needed_For_Inlining;
! 
!    function Body_Needed_For_SAL (Id : E) return B is
!    begin
!       pragma Assert
!         (Ekind (Id) = E_Package
!            or else Is_Subprogram (Id)
!            or else Is_Generic_Unit (Id));
!       return Flag40 (Id);
!    end Body_Needed_For_SAL;
! 
!    function Body_References (Id : E) return L is
!    begin
!       pragma Assert (Ekind (Id) = E_Abstract_State);
!       return Elist16 (Id);
!    end Body_References;
! 
!    function BIP_Initialization_Call (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Variable);
!       return Node29 (Id);
!    end BIP_Initialization_Call;
! 
!    function C_Pass_By_Copy (Id : E) return B is
!    begin
!       pragma Assert (Is_Record_Type (Id));
!       return Flag125 (Implementation_Base_Type (Id));
!    end C_Pass_By_Copy;
! 
!    function Can_Never_Be_Null (Id : E) return B is
!    begin
!       return Flag38 (Id);
!    end Can_Never_Be_Null;
! 
!    function Checks_May_Be_Suppressed (Id : E) return B is
!    begin
!       return Flag31 (Id);
!    end Checks_May_Be_Suppressed;
! 
!    function Class_Wide_Clone (Id : E) return E is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       return Node38 (Id);
!    end Class_Wide_Clone;
! 
!    function Class_Wide_Type (Id : E) return E is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Node9 (Id);
!    end Class_Wide_Type;
! 
!    function Cloned_Subtype (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Record_Subtype | E_Class_Wide_Subtype);
!       return Node16 (Id);
!    end Cloned_Subtype;
! 
!    function Component_Bit_Offset (Id : E) return U is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Discriminant);
!       return Uint11 (Id);
!    end Component_Bit_Offset;
! 
!    function Component_Clause (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Discriminant);
!       return Node13 (Id);
!    end Component_Clause;
! 
!    function Component_Size (Id : E) return U is
!    begin
!       pragma Assert (Is_Array_Type (Id));
!       return Uint22 (Implementation_Base_Type (Id));
!    end Component_Size;
! 
!    function Component_Type (Id : E) return E is
!    begin
!       pragma Assert (Is_Array_Type (Id));
!       return Node20 (Implementation_Base_Type (Id));
!    end Component_Type;
! 
!    function Corresponding_Concurrent_Type (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Record_Type);
!       return Node18 (Id);
!    end Corresponding_Concurrent_Type;
! 
!    function Corresponding_Discriminant (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Discriminant);
!       return Node19 (Id);
!    end Corresponding_Discriminant;
! 
!    function Corresponding_Equality (Id : E) return E is
!    begin
!       pragma Assert
!         (Ekind (Id) = E_Function
!           and then not Comes_From_Source (Id)
!           and then Chars (Id) = Name_Op_Ne);
!       return Node30 (Id);
!    end Corresponding_Equality;
! 
!    function Corresponding_Function (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Procedure);
!       return Node32 (Id);
!    end Corresponding_Function;
! 
!    function Corresponding_Procedure (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Function);
!       return Node32 (Id);
!    end Corresponding_Procedure;
! 
!    function Corresponding_Protected_Entry (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Subprogram_Body);
!       return Node18 (Id);
!    end Corresponding_Protected_Entry;
! 
!    function Corresponding_Record_Component (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Discriminant);
!       return Node21 (Id);
!    end Corresponding_Record_Component;
! 
!    function Corresponding_Record_Type (Id : E) return E is
!    begin
!       pragma Assert (Is_Concurrent_Type (Id));
!       return Node18 (Id);
!    end Corresponding_Record_Type;
! 
!    function Corresponding_Remote_Type (Id : E) return E is
!    begin
!       return Node22 (Id);
!    end Corresponding_Remote_Type;
! 
!    function Current_Use_Clause (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Package or else Is_Type (Id));
!       return Node27 (Id);
!    end Current_Use_Clause;
! 
!    function Current_Value (Id : E) return N is
!    begin
!       pragma Assert (Is_Object (Id));
!       return Node9 (Id);
!    end Current_Value;
! 
!    function CR_Discriminant (Id : E) return E is
!    begin
!       return Node23 (Id);
!    end CR_Discriminant;
! 
!    function Debug_Info_Off (Id : E) return B is
!    begin
!       return Flag166 (Id);
!    end Debug_Info_Off;
! 
!    function Debug_Renaming_Link (Id : E) return E is
!    begin
!       return Node25 (Id);
!    end Debug_Renaming_Link;
! 
!    function Default_Aspect_Component_Value (Id : E) return N is
!    begin
!       pragma Assert (Is_Array_Type (Id));
!       return Node19 (Base_Type (Id));
!    end Default_Aspect_Component_Value;
! 
!    function Default_Aspect_Value (Id : E) return N is
!    begin
!       pragma Assert (Is_Scalar_Type (Id));
!       return Node19 (Base_Type (Id));
!    end Default_Aspect_Value;
! 
!    function Default_Expr_Function (Id : E) return E is
!    begin
!       pragma Assert (Is_Formal (Id));
!       return Node21 (Id);
!    end Default_Expr_Function;
! 
!    function Default_Expressions_Processed (Id : E) return B is
!    begin
!       return Flag108 (Id);
!    end Default_Expressions_Processed;
! 
!    function Default_Value (Id : E) return N is
!    begin
!       pragma Assert (Is_Formal (Id));
!       return Node20 (Id);
!    end Default_Value;
! 
!    function Delay_Cleanups (Id : E) return B is
!    begin
!       return Flag114 (Id);
!    end Delay_Cleanups;
! 
!    function Delay_Subprogram_Descriptors (Id : E) return B is
!    begin
!       return Flag50 (Id);
!    end Delay_Subprogram_Descriptors;
! 
!    function Delta_Value (Id : E) return R is
!    begin
!       pragma Assert (Is_Fixed_Point_Type (Id));
!       return Ureal18 (Id);
!    end Delta_Value;
! 
!    function Dependent_Instances (Id : E) return L is
!    begin
!       pragma Assert (Is_Generic_Instance (Id));
!       return Elist8 (Id);
!    end Dependent_Instances;
! 
!    function Depends_On_Private (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag14 (Id);
!    end Depends_On_Private;
! 
!    function Derived_Type_Link (Id : E) return E is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Node31 (Base_Type (Id));
!    end Derived_Type_Link;
! 
!    function Digits_Value (Id : E) return U is
!    begin
!       pragma Assert
!         (Is_Floating_Point_Type (Id)
!           or else Is_Decimal_Fixed_Point_Type (Id));
!       return Uint17 (Id);
!    end Digits_Value;
! 
!    function Direct_Primitive_Operations (Id : E) return L is
!    begin
!       pragma Assert (Is_Tagged_Type (Id));
!       return Elist10 (Id);
!    end Direct_Primitive_Operations;
! 
!    function Directly_Designated_Type (Id : E) return E is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       return Node20 (Id);
!    end Directly_Designated_Type;
! 
!    function Disable_Controlled (Id : E) return B is
!    begin
!       return Flag253 (Base_Type (Id));
!    end Disable_Controlled;
! 
!    function Discard_Names (Id : E) return B is
!    begin
!       return Flag88 (Id);
!    end Discard_Names;
! 
!    function Discriminal (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Discriminant);
!       return Node17 (Id);
!    end Discriminal;
! 
!    function Discriminal_Link (Id : E) return N is
!    begin
!       return Node10 (Id);
!    end Discriminal_Link;
! 
!    function Discriminant_Checking_Func (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Component);
!       return Node20 (Id);
!    end Discriminant_Checking_Func;
! 
!    function Discriminant_Constraint (Id : E) return L is
!    begin
!       pragma Assert (Is_Composite_Type (Id) and then Has_Discriminants (Id));
!       return Elist21 (Id);
!    end Discriminant_Constraint;
! 
!    function Discriminant_Default_Value (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) = E_Discriminant);
!       return Node20 (Id);
!    end Discriminant_Default_Value;
! 
!    function Discriminant_Number (Id : E) return U is
!    begin
!       pragma Assert (Ekind (Id) = E_Discriminant);
!       return Uint15 (Id);
!    end Discriminant_Number;
! 
!    function Dispatch_Table_Wrappers (Id : E) return L is
!    begin
!       pragma Assert (Ekind (Id) in E_Record_Type | E_Record_Subtype);
!       return Elist26 (Implementation_Base_Type (Id));
!    end Dispatch_Table_Wrappers;
! 
!    function DT_Entry_Count (Id : E) return U is
!    begin
!       pragma Assert (Ekind (Id) = E_Component and then Is_Tag (Id));
!       return Uint15 (Id);
!    end DT_Entry_Count;
! 
!    function DT_Offset_To_Top_Func (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Component and then Is_Tag (Id));
!       return Node25 (Id);
!    end DT_Offset_To_Top_Func;
! 
!    function DT_Position (Id : E) return U is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure
!                        and then Present (DTC_Entity (Id)));
!       return Uint15 (Id);
!    end DT_Position;
! 
!    function DTC_Entity (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Node16 (Id);
!    end DTC_Entity;
! 
!    function Elaborate_Body_Desirable (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       return Flag210 (Id);
!    end Elaborate_Body_Desirable;
! 
!    function Elaboration_Entity (Id : E) return E is
!    begin
!       pragma Assert
!         (Is_Subprogram (Id)
!            or else
!          Ekind (Id) in E_Entry | E_Entry_Family | E_Package
!            or else
!          Is_Generic_Unit (Id));
!       return Node13 (Id);
!    end Elaboration_Entity;
! 
!    function Elaboration_Entity_Required (Id : E) return B is
!    begin
!       pragma Assert
!         (Is_Subprogram (Id)
!            or else
!          Ekind (Id) in E_Entry | E_Entry_Family | E_Package
!            or else
!          Is_Generic_Unit (Id));
!       return Flag174 (Id);
!    end Elaboration_Entity_Required;
! 
!    function Encapsulating_State (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) in E_Abstract_State | E_Constant | E_Variable);
!       return Node32 (Id);
!    end Encapsulating_State;
! 
!    function Enclosing_Scope (Id : E) return E is
!    begin
!       return Node18 (Id);
!    end Enclosing_Scope;
! 
!    function Entry_Accepted (Id : E) return B is
!    begin
!       pragma Assert (Is_Entry (Id));
!       return Flag152 (Id);
!    end Entry_Accepted;
! 
!    function Entry_Bodies_Array (Id : E) return E is
!    begin
!       return Node19 (Id);
!    end Entry_Bodies_Array;
! 
!    function Entry_Cancel_Parameter (Id : E) return E is
!    begin
!       return Node23 (Id);
!    end Entry_Cancel_Parameter;
! 
!    function Entry_Component (Id : E) return E is
!    begin
!       return Node11 (Id);
!    end Entry_Component;
! 
!    function Entry_Formal (Id : E) return E is
!    begin
!       return Node16 (Id);
!    end Entry_Formal;
! 
!    function Entry_Index_Constant (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) = E_Entry_Index_Parameter);
!       return Node18 (Id);
!    end Entry_Index_Constant;
! 
!    function Entry_Max_Queue_Lengths_Array (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) = E_Protected_Type);
!       return Node35 (Id);
!    end Entry_Max_Queue_Lengths_Array;
! 
!    function Contains_Ignored_Ghost_Code (Id : E) return B is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Block
!                      | E_Function
!                      | E_Generic_Function
!                      | E_Generic_Package
!                      | E_Generic_Procedure
!                      | E_Package
!                      | E_Package_Body
!                      | E_Procedure
!                      | E_Subprogram_Body);
!       return Flag279 (Id);
!    end Contains_Ignored_Ghost_Code;
! 
!    function Contract (Id : E) return N is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Protected_Type       --  concurrent types
!                      | E_Task_Body
!                      | E_Task_Type
!            or else
!          Ekind (Id) in E_Constant             --  objects
!                      | E_Variable
!            or else
!          Ekind (Id) in E_Entry                --  overloadable
!                      | E_Entry_Family
!                      | E_Function
!                      | E_Generic_Function
!                      | E_Generic_Procedure
!                      | E_Operator
!                      | E_Procedure
!                      | E_Subprogram_Body
!            or else
!          Ekind (Id) in E_Generic_Package      --  packages
!                      | E_Package
!                      | E_Package_Body
!            or else
!          Is_Type (Id)                         --  types
!            or else
!          Ekind (Id) = E_Void);                --  special purpose
!       return Node34 (Id);
!    end Contract;
! 
!    function Contract_Wrapper (Id : E) return E is
!    begin
!       pragma Assert (Is_Entry (Id));
!       return Node25 (Id);
!    end Contract_Wrapper;
! 
!    function Entry_Parameters_Type (Id : E) return E is
!    begin
!       return Node15 (Id);
!    end Entry_Parameters_Type;
! 
!    function Enum_Pos_To_Rep (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Enumeration_Type);
!       return Node23 (Id);
!    end Enum_Pos_To_Rep;
! 
!    function Enumeration_Pos (Id : E) return Uint is
!    begin
!       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
!       return Uint11 (Id);
!    end Enumeration_Pos;
! 
!    function Enumeration_Rep (Id : E) return U is
!    begin
!       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
!       return Uint12 (Id);
!    end Enumeration_Rep;
! 
!    function Enumeration_Rep_Expr (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
!       return Node22 (Id);
!    end Enumeration_Rep_Expr;
! 
!    function Equivalent_Type (Id : E) return E is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Class_Wide_Type
!                      | E_Class_Wide_Subtype
!                      | E_Access_Subprogram_Type
!                      | E_Access_Protected_Subprogram_Type
!                      | E_Anonymous_Access_Protected_Subprogram_Type
!                      | E_Exception_Type);
!       return Node18 (Id);
!    end Equivalent_Type;
! 
!    function Esize (Id : E) return Uint is
!    begin
!       return Uint12 (Id);
!    end Esize;
! 
!    function Extra_Accessibility (Id : E) return E is
!    begin
!       pragma Assert
!         (Is_Formal (Id) or else Ekind (Id) in E_Variable | E_Constant);
!       return Node13 (Id);
!    end Extra_Accessibility;
! 
!    function Extra_Accessibility_Of_Result (Id : E) return E is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Function | E_Operator | E_Subprogram_Type);
!       return Node19 (Id);
!    end Extra_Accessibility_Of_Result;
! 
!    function Extra_Constrained (Id : E) return E is
!    begin
!       pragma Assert (Is_Formal (Id) or else Ekind (Id) = E_Variable);
!       return Node23 (Id);
!    end Extra_Constrained;
! 
!    function Extra_Formal (Id : E) return E is
!    begin
!       return Node15 (Id);
!    end Extra_Formal;
! 
!    function Extra_Formals (Id : E) return E is
!    begin
!       pragma Assert
!         (Is_Overloadable (Id)
!            or else Ekind (Id) in E_Entry_Family
!                                | E_Subprogram_Body
!                                | E_Subprogram_Type);
!       return Node28 (Id);
!    end Extra_Formals;
! 
!    function Can_Use_Internal_Rep (Id : E) return B is
!    begin
!       pragma Assert (Is_Access_Subprogram_Type (Base_Type (Id)));
!       return Flag229 (Base_Type (Id));
!    end Can_Use_Internal_Rep;
! 
!    function Finalization_Master (Id : E) return E is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       return Node23 (Root_Type (Id));
!    end Finalization_Master;
! 
!    function Finalize_Storage_Only (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag158 (Base_Type (Id));
!    end Finalize_Storage_Only;
! 
!    function Finalizer (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Package | E_Package_Body);
!       return Node28 (Id);
!    end Finalizer;
! 
!    function First_Entity (Id : E) return E is
!    begin
!       return Node17 (Id);
!    end First_Entity;
! 
!    function First_Exit_Statement (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) = E_Loop);
!       return Node8 (Id);
!    end First_Exit_Statement;
! 
!    function First_Index (Id : E) return N is
!    begin
!       pragma Assert (Is_Array_Type (Id));
!       return Node17 (Id);
!    end First_Index;
! 
!    function First_Literal (Id : E) return E is
!    begin
!       pragma Assert (Is_Enumeration_Type (Id));
!       return Node17 (Id);
!    end First_Literal;
! 
!    function First_Private_Entity (Id : E) return E is
!    begin
!       pragma Assert (Is_Package_Or_Generic_Package (Id)
!                        or else Is_Concurrent_Type (Id));
!       return Node16 (Id);
!    end First_Private_Entity;
! 
!    function First_Rep_Item (Id : E) return E is
!    begin
!       return Node6 (Id);
!    end First_Rep_Item;
! 
!    function Freeze_Node (Id : E) return N is
!    begin
!       return Node7 (Id);
!    end Freeze_Node;
! 
!    function From_Limited_With (Id : E) return B is
!    begin
!       return Flag159 (Id);
!    end From_Limited_With;
! 
!    function Full_View (Id : E) return E is
!    begin
!       pragma Assert (Is_Type (Id) or else Ekind (Id) = E_Constant);
!       return Node11 (Id);
!    end Full_View;
! 
!    function Generic_Homonym (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Generic_Package);
!       return Node11 (Id);
!    end Generic_Homonym;
! 
!    function Generic_Renamings (Id : E) return L is
!    begin
!       return Elist23 (Id);
!    end Generic_Renamings;
! 
!    function Handler_Records (Id : E) return S is
!    begin
!       return List10 (Id);
!    end Handler_Records;
! 
!    function Has_Aliased_Components (Id : E) return B is
!    begin
!       return Flag135 (Implementation_Base_Type (Id));
!    end Has_Aliased_Components;
! 
!    function Has_Alignment_Clause (Id : E) return B is
!    begin
!       return Flag46 (Id);
!    end Has_Alignment_Clause;
! 
!    function Has_All_Calls_Remote (Id : E) return B is
!    begin
!       return Flag79 (Id);
!    end Has_All_Calls_Remote;
! 
!    function Has_Atomic_Components (Id : E) return B is
!    begin
!       return Flag86 (Implementation_Base_Type (Id));
!    end Has_Atomic_Components;
! 
!    function Has_Biased_Representation (Id : E) return B is
!    begin
!       return Flag139 (Id);
!    end Has_Biased_Representation;
! 
!    function Has_Completion (Id : E) return B is
!    begin
!       return Flag26 (Id);
!    end Has_Completion;
! 
!    function Has_Completion_In_Body (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag71 (Id);
!    end Has_Completion_In_Body;
! 
!    function Has_Complex_Representation (Id : E) return B is
!    begin
!       pragma Assert (Is_Record_Type (Id));
!       return Flag140 (Implementation_Base_Type (Id));
!    end Has_Complex_Representation;
! 
!    function Has_Component_Size_Clause (Id : E) return B is
!    begin
!       pragma Assert (Is_Array_Type (Id));
!       return Flag68 (Implementation_Base_Type (Id));
!    end Has_Component_Size_Clause;
! 
!    function Has_Constrained_Partial_View (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag187 (Base_Type (Id));
!    end Has_Constrained_Partial_View;
! 
!    function Has_Controlled_Component (Id : E) return B is
!    begin
!       return Flag43 (Base_Type (Id));
!    end Has_Controlled_Component;
! 
!    function Has_Contiguous_Rep (Id : E) return B is
!    begin
!       return Flag181 (Id);
!    end Has_Contiguous_Rep;
! 
!    function Has_Controlling_Result (Id : E) return B is
!    begin
!       return Flag98 (Id);
!    end Has_Controlling_Result;
! 
!    function Has_Convention_Pragma (Id : E) return B is
!    begin
!       return Flag119 (Id);
!    end Has_Convention_Pragma;
! 
!    function Has_Default_Aspect (Id : E) return B is
!    begin
!       return Flag39 (Base_Type (Id));
!    end Has_Default_Aspect;
! 
!    function Has_Delayed_Aspects (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag200 (Id);
!    end Has_Delayed_Aspects;
! 
!    function Has_Delayed_Freeze (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag18 (Id);
!    end Has_Delayed_Freeze;
! 
!    function Has_Delayed_Rep_Aspects (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag261 (Id);
!    end Has_Delayed_Rep_Aspects;
! 
!    function Has_Discriminants (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag5 (Id);
!    end Has_Discriminants;
! 
!    function Has_Dispatch_Table (Id : E) return B is
!    begin
!       pragma Assert (Is_Tagged_Type (Id));
!       return Flag220 (Id);
!    end Has_Dispatch_Table;
! 
!    function Has_Dynamic_Predicate_Aspect (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag258 (Id);
!    end Has_Dynamic_Predicate_Aspect;
! 
!    function Has_Enumeration_Rep_Clause (Id : E) return B is
!    begin
!       pragma Assert (Is_Enumeration_Type (Id));
!       return Flag66 (Id);
!    end Has_Enumeration_Rep_Clause;
! 
!    function Has_Exit (Id : E) return B is
!    begin
!       return Flag47 (Id);
!    end Has_Exit;
! 
!    function Has_Expanded_Contract (Id : E) return B is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       return Flag240 (Id);
!    end Has_Expanded_Contract;
! 
!    function Has_Forward_Instantiation (Id : E) return B is
!    begin
!       return Flag175 (Id);
!    end Has_Forward_Instantiation;
! 
!    function Has_Fully_Qualified_Name (Id : E) return B is
!    begin
!       return Flag173 (Id);
!    end Has_Fully_Qualified_Name;
! 
!    function Has_Gigi_Rep_Item (Id : E) return B is
!    begin
!       return Flag82 (Id);
!    end Has_Gigi_Rep_Item;
! 
!    function Has_Homonym (Id : E) return B is
!    begin
!       return Flag56 (Id);
!    end Has_Homonym;
! 
!    function Has_Implicit_Dereference (Id : E) return B is
!    begin
!       return Flag251 (Id);
!    end Has_Implicit_Dereference;
! 
!    function Has_Independent_Components (Id : E) return B is
!    begin
!       return Flag34 (Implementation_Base_Type (Id));
!    end Has_Independent_Components;
! 
!    function Has_Inheritable_Invariants (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag248 (Base_Type (Id));
!    end Has_Inheritable_Invariants;
! 
!    function Has_Inherited_DIC (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag133 (Base_Type (Id));
!    end Has_Inherited_DIC;
! 
!    function Has_Inherited_Invariants (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag291 (Base_Type (Id));
!    end Has_Inherited_Invariants;
! 
!    function Has_Initial_Value (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable or else Is_Formal (Id));
!       return Flag219 (Id);
!    end Has_Initial_Value;
! 
!    function Has_Loop_Entry_Attributes (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Loop);
!       return Flag260 (Id);
!    end Has_Loop_Entry_Attributes;
! 
!    function Has_Machine_Radix_Clause (Id : E) return B is
!    begin
!       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
!       return Flag83 (Id);
!    end Has_Machine_Radix_Clause;
! 
!    function Has_Master_Entity (Id : E) return B is
!    begin
!       return Flag21 (Id);
!    end Has_Master_Entity;
! 
!    function Has_Missing_Return (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Generic_Function);
!       return Flag142 (Id);
!    end Has_Missing_Return;
! 
!    function Has_Nested_Block_With_Handler (Id : E) return B is
!    begin
!       return Flag101 (Id);
!    end Has_Nested_Block_With_Handler;
! 
!    function Has_Nested_Subprogram (Id : E) return B is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       return Flag282 (Id);
!    end Has_Nested_Subprogram;
! 
!    function Has_Non_Standard_Rep (Id : E) return B is
!    begin
!       return Flag75 (Implementation_Base_Type (Id));
!    end Has_Non_Standard_Rep;
! 
!    function Has_Object_Size_Clause (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag172 (Id);
!    end Has_Object_Size_Clause;
! 
!    function Has_Out_Or_In_Out_Parameter (Id : E) return B is
!    begin
!       pragma Assert
!         (Is_Entry (Id) or else Is_Subprogram_Or_Generic_Subprogram (Id));
!       return Flag110 (Id);
!    end Has_Out_Or_In_Out_Parameter;
! 
!    function Has_Own_DIC (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag3 (Base_Type (Id));
!    end Has_Own_DIC;
! 
!    function Has_Own_Invariants (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag232 (Base_Type (Id));
!    end Has_Own_Invariants;
! 
!    function Has_Partial_Visible_Refinement (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Abstract_State);
!       return Flag296 (Id);
!    end Has_Partial_Visible_Refinement;
! 
!    function Has_Per_Object_Constraint (Id : E) return B is
!    begin
!       return Flag154 (Id);
!    end Has_Per_Object_Constraint;
! 
!    function Has_Pragma_Controlled (Id : E) return B is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       return Flag27 (Implementation_Base_Type (Id));
!    end Has_Pragma_Controlled;
! 
!    function Has_Pragma_Elaborate_Body (Id : E) return B is
!    begin
!       return Flag150 (Id);
!    end Has_Pragma_Elaborate_Body;
! 
!    function Has_Pragma_Inline (Id : E) return B is
!    begin
!       return Flag157 (Id);
!    end Has_Pragma_Inline;
! 
!    function Has_Pragma_Inline_Always (Id : E) return B is
!    begin
!       return Flag230 (Id);
!    end Has_Pragma_Inline_Always;
! 
!    function Has_Pragma_No_Inline (Id : E) return B is
!    begin
!       return Flag201 (Id);
!    end Has_Pragma_No_Inline;
! 
!    function Has_Pragma_Ordered (Id : E) return B is
!    begin
!       pragma Assert (Is_Enumeration_Type (Id));
!       return Flag198 (Implementation_Base_Type (Id));
!    end Has_Pragma_Ordered;
! 
!    function Has_Pragma_Pack (Id : E) return B is
!    begin
!       pragma Assert (Is_Record_Type (Id) or else Is_Array_Type (Id));
!       return Flag121 (Implementation_Base_Type (Id));
!    end Has_Pragma_Pack;
! 
!    function Has_Pragma_Preelab_Init (Id : E) return B is
!    begin
!       return Flag221 (Id);
!    end Has_Pragma_Preelab_Init;
! 
!    function Has_Pragma_Pure (Id : E) return B is
!    begin
!       return Flag203 (Id);
!    end Has_Pragma_Pure;
! 
!    function Has_Pragma_Pure_Function (Id : E) return B is
!    begin
!       return Flag179 (Id);
!    end Has_Pragma_Pure_Function;
! 
!    function Has_Pragma_Thread_Local_Storage (Id : E) return B is
!    begin
!       return Flag169 (Id);
!    end Has_Pragma_Thread_Local_Storage;
! 
!    function Has_Pragma_Unmodified (Id : E) return B is
!    begin
!       return Flag233 (Id);
!    end Has_Pragma_Unmodified;
! 
!    function Has_Pragma_Unreferenced (Id : E) return B is
!    begin
!       return Flag180 (Id);
!    end Has_Pragma_Unreferenced;
! 
!    function Has_Pragma_Unreferenced_Objects (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag212 (Id);
!    end Has_Pragma_Unreferenced_Objects;
! 
!    function Has_Pragma_Unused (Id : E) return B is
!    begin
!       return Flag294 (Id);
!    end Has_Pragma_Unused;
! 
!    function Has_Predicates (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag250 (Id);
!    end Has_Predicates;
! 
!    function Has_Primitive_Operations (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag120 (Base_Type (Id));
!    end Has_Primitive_Operations;
! 
!    function Has_Private_Ancestor (Id : E) return B is
!    begin
!       return Flag151 (Id);
!    end Has_Private_Ancestor;
! 
!    function Has_Private_Declaration (Id : E) return B is
!    begin
!       return Flag155 (Id);
!    end Has_Private_Declaration;
! 
!    function Has_Private_Extension (Id : E) return B is
!    begin
!       pragma Assert (Is_Tagged_Type (Id));
!       return Flag300 (Id);
!    end Has_Private_Extension;
! 
!    function Has_Protected (Id : E) return B is
!    begin
!       return Flag271 (Base_Type (Id));
!    end Has_Protected;
! 
!    function Has_Qualified_Name (Id : E) return B is
!    begin
!       return Flag161 (Id);
!    end Has_Qualified_Name;
! 
!    function Has_RACW (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       return Flag214 (Id);
!    end Has_RACW;
! 
!    function Has_Record_Rep_Clause (Id : E) return B is
!    begin
!       pragma Assert (Is_Record_Type (Id));
!       return Flag65 (Implementation_Base_Type (Id));
!    end Has_Record_Rep_Clause;
! 
!    function Has_Recursive_Call (Id : E) return B is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       return Flag143 (Id);
!    end Has_Recursive_Call;
! 
!    function Has_Shift_Operator (Id : E) return B is
!    begin
!       pragma Assert (Is_Integer_Type (Id));
!       return Flag267 (Base_Type (Id));
!    end Has_Shift_Operator;
! 
!    function Has_Size_Clause (Id : E) return B is
!    begin
!       return Flag29 (Id);
!    end Has_Size_Clause;
! 
!    function Has_Small_Clause (Id : E) return B is
!    begin
!       pragma Assert (Is_Ordinary_Fixed_Point_Type (Id));
!       return Flag67 (Id);
!    end Has_Small_Clause;
! 
!    function Has_Specified_Layout (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag100 (Implementation_Base_Type (Id));
!    end Has_Specified_Layout;
! 
!    function Has_Specified_Stream_Input (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag190 (Id);
!    end Has_Specified_Stream_Input;
! 
!    function Has_Specified_Stream_Output (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag191 (Id);
!    end Has_Specified_Stream_Output;
! 
!    function Has_Specified_Stream_Read (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag192 (Id);
!    end Has_Specified_Stream_Read;
! 
!    function Has_Specified_Stream_Write (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag193 (Id);
!    end Has_Specified_Stream_Write;
! 
!    function Has_Static_Discriminants (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag211 (Id);
!    end Has_Static_Discriminants;
! 
!    function Has_Static_Predicate (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag269 (Id);
!    end Has_Static_Predicate;
! 
!    function Has_Static_Predicate_Aspect (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag259 (Id);
!    end Has_Static_Predicate_Aspect;
! 
!    function Has_Storage_Size_Clause (Id : E) return B is
!    begin
!       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
!       return Flag23 (Implementation_Base_Type (Id));
!    end Has_Storage_Size_Clause;
! 
!    function Has_Stream_Size_Clause (Id : E) return B is
!    begin
!       return Flag184 (Id);
!    end Has_Stream_Size_Clause;
! 
!    function Has_Task (Id : E) return B is
!    begin
!       return Flag30 (Base_Type (Id));
!    end Has_Task;
! 
!    function Has_Thunks (Id : E) return B is
!    begin
!       return Flag228 (Id);
!    end Has_Thunks;
! 
!    function Has_Timing_Event (Id : E) return B is
!    begin
!       return Flag289 (Base_Type (Id));
!    end Has_Timing_Event;
! 
!    function Has_Unchecked_Union (Id : E) return B is
!    begin
!       return Flag123 (Base_Type (Id));
!    end Has_Unchecked_Union;
! 
!    function Has_Unknown_Discriminants (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag72 (Id);
!    end Has_Unknown_Discriminants;
! 
!    function Has_Visible_Refinement (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Abstract_State);
!       return Flag263 (Id);
!    end Has_Visible_Refinement;
! 
!    function Has_Volatile_Components (Id : E) return B is
!    begin
!       return Flag87 (Implementation_Base_Type (Id));
!    end Has_Volatile_Components;
! 
!    function Has_Xref_Entry (Id : E) return B is
!    begin
!       return Flag182 (Id);
!    end Has_Xref_Entry;
! 
!    function Has_Yield_Aspect (Id : E) return B is
!    begin
!       return Flag308 (Id);
!    end Has_Yield_Aspect;
! 
!    function Hiding_Loop_Variable (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       return Node8 (Id);
!    end Hiding_Loop_Variable;
! 
!    function Hidden_In_Formal_Instance (Id : E) return L is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       return Elist30 (Id);
!    end Hidden_In_Formal_Instance;
! 
!    function Homonym (Id : E) return E is
!    begin
!       return Node4 (Id);
!    end Homonym;
! 
!    function Ignore_SPARK_Mode_Pragmas (Id : E) return B is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Protected_Body      --  concurrent types
!                      | E_Protected_Type
!                      | E_Task_Body
!                      | E_Task_Type
!           or else
!          Ekind (Id) in E_Entry               --  overloadable
!                      | E_Entry_Family
!                      | E_Function
!                      | E_Generic_Function
!                      | E_Generic_Procedure
!                      | E_Operator
!                      | E_Procedure
!                      | E_Subprogram_Body
!            or else
!          Ekind (Id) in E_Generic_Package     --  packages
!                      | E_Package
!                      | E_Package_Body);
!       return Flag301 (Id);
!    end Ignore_SPARK_Mode_Pragmas;
! 
!    function Import_Pragma (Id : E) return E is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       return Node35 (Id);
!    end Import_Pragma;
! 
!    function Incomplete_Actuals (Id : E) return L is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       return Elist24 (Id);
!    end Incomplete_Actuals;
! 
!    function Interface_Alias (Id : E) return E is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       return Node25 (Id);
!    end Interface_Alias;
! 
!    function Interfaces (Id : E) return L is
!    begin
!       pragma Assert (Is_Record_Type (Id));
!       return Elist25 (Id);
!    end Interfaces;
! 
!    function In_Package_Body (Id : E) return B is
!    begin
!       return Flag48 (Id);
!    end In_Package_Body;
! 
!    function In_Private_Part (Id : E) return B is
!    begin
!       return Flag45 (Id);
!    end In_Private_Part;
! 
!    function In_Use (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag8 (Id);
!    end In_Use;
! 
!    function Initialization_Statements (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Variable);
!       return Node28 (Id);
!    end Initialization_Statements;
! 
!    function Inner_Instances (Id : E) return L is
!    begin
!       return Elist23 (Id);
!    end Inner_Instances;
! 
!    function Interface_Name (Id : E) return N is
!    begin
!       return Node21 (Id);
!    end Interface_Name;
! 
!    function Is_Abstract_Subprogram (Id : E) return B is
!    begin
!       pragma Assert (Is_Overloadable (Id));
!       return Flag19 (Id);
!    end Is_Abstract_Subprogram;
! 
!    function Is_Abstract_Type (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag146 (Id);
!    end Is_Abstract_Type;
! 
!    function Is_Access_Constant (Id : E) return B is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       return Flag69 (Id);
!    end Is_Access_Constant;
! 
!    function Is_Activation_Record (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_In_Parameter);
!       return Flag305 (Id);
!    end Is_Activation_Record;
! 
!    function Is_Actual_Subtype (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag293 (Id);
!    end Is_Actual_Subtype;
! 
!    function Is_Ada_2005_Only (Id : E) return B is
!    begin
!       return Flag185 (Id);
!    end Is_Ada_2005_Only;
! 
!    function Is_Ada_2012_Only (Id : E) return B is
!    begin
!       return Flag199 (Id);
!    end Is_Ada_2012_Only;
! 
!    function Is_Aliased (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag15 (Id);
!    end Is_Aliased;
! 
!    function Is_Asynchronous (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Procedure or else Is_Type (Id));
!       return Flag81 (Id);
!    end Is_Asynchronous;
! 
!    function Is_Atomic (Id : E) return B is
!    begin
!       return Flag85 (Id);
!    end Is_Atomic;
! 
!    function Is_Bit_Packed_Array (Id : E) return B is
!    begin
!       return Flag122 (Implementation_Base_Type (Id));
!    end Is_Bit_Packed_Array;
! 
!    function Is_Called (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Procedure | E_Function | E_Package);
!       return Flag102 (Id);
!    end Is_Called;
! 
!    function Is_Character_Type (Id : E) return B is
!    begin
!       return Flag63 (Id);
!    end Is_Character_Type;
! 
!    function Is_Checked_Ghost_Entity (Id : E) return B is
!    begin
!       --  Allow this attribute to appear on unanalyzed entities
! 
!       pragma Assert (Nkind (Id) in N_Entity
!         or else Ekind (Id) = E_Void);
!       return Flag277 (Id);
!    end Is_Checked_Ghost_Entity;
! 
!    function Is_Child_Unit (Id : E) return B is
!    begin
!       return Flag73 (Id);
!    end Is_Child_Unit;
! 
!    function Is_Class_Wide_Clone (Id : E) return B is
!    begin
!       return Flag290 (Id);
!    end Is_Class_Wide_Clone;
! 
!    function Is_Class_Wide_Equivalent_Type (Id : E) return B is
!    begin
!       return Flag35 (Id);
!    end Is_Class_Wide_Equivalent_Type;
! 
!    function Is_Compilation_Unit (Id : E) return B is
!    begin
!       return Flag149 (Id);
!    end Is_Compilation_Unit;
! 
!    function Is_Completely_Hidden (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Discriminant);
!       return Flag103 (Id);
!    end Is_Completely_Hidden;
! 
!    function Is_Constr_Subt_For_U_Nominal (Id : E) return B is
!    begin
!       return Flag80 (Id);
!    end Is_Constr_Subt_For_U_Nominal;
! 
!    function Is_Constr_Subt_For_UN_Aliased (Id : E) return B is
!    begin
!       return Flag141 (Id);
!    end Is_Constr_Subt_For_UN_Aliased;
! 
!    function Is_Constrained (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag12 (Id);
!    end Is_Constrained;
! 
!    function Is_Constructor (Id : E) return B is
!    begin
!       return Flag76 (Id);
!    end Is_Constructor;
! 
!    function Is_Controlled_Active (Id : E) return B is
!    begin
!       return Flag42 (Base_Type (Id));
!    end Is_Controlled_Active;
! 
!    function Is_Controlling_Formal (Id : E) return B is
!    begin
!       pragma Assert (Is_Formal (Id));
!       return Flag97 (Id);
!    end Is_Controlling_Formal;
! 
!    function Is_CPP_Class (Id : E) return B is
!    begin
!       return Flag74 (Id);
!    end Is_CPP_Class;
! 
!    function Is_CUDA_Kernel (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Flag118 (Id);
!    end Is_CUDA_Kernel;
! 
!    function Is_DIC_Procedure (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Flag132 (Id);
!    end Is_DIC_Procedure;
! 
!    function Is_Descendant_Of_Address (Id : E) return B is
!    begin
!       return Flag223 (Id);
!    end Is_Descendant_Of_Address;
! 
!    function Is_Discrim_SO_Function (Id : E) return B is
!    begin
!       return Flag176 (Id);
!    end Is_Discrim_SO_Function;
! 
!    function Is_Discriminant_Check_Function (Id : E) return B is
!    begin
!       return Flag264 (Id);
!    end Is_Discriminant_Check_Function;
! 
!    function Is_Dispatch_Table_Entity (Id : E) return B is
!    begin
!       return Flag234 (Id);
!    end Is_Dispatch_Table_Entity;
! 
!    function Is_Dispatching_Operation (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag6 (Id);
!    end Is_Dispatching_Operation;
! 
!    function Is_Elaboration_Checks_OK_Id (Id : E) return B is
!    begin
!       pragma Assert (Is_Elaboration_Target (Id));
!       return Flag148 (Id);
!    end Is_Elaboration_Checks_OK_Id;
! 
!    function Is_Elaboration_Warnings_OK_Id (Id : E) return B is
!    begin
!       pragma Assert (Is_Elaboration_Target (Id) or else Ekind (Id) = E_Void);
!       return Flag304 (Id);
!    end Is_Elaboration_Warnings_OK_Id;
! 
!    function Is_Eliminated (Id : E) return B is
!    begin
!       return Flag124 (Id);
!    end Is_Eliminated;
! 
!    function Is_Entry_Formal (Id : E) return B is
!    begin
!       return Flag52 (Id);
!    end Is_Entry_Formal;
! 
!    function Is_Entry_Wrapper (Id : E) return B is
!    begin
!       return Flag297 (Id);
!    end Is_Entry_Wrapper;
! 
!    function Is_Exception_Handler (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Block);
!       return Flag286 (Id);
!    end Is_Exception_Handler;
! 
!    function Is_Exported (Id : E) return B is
!    begin
!       return Flag99 (Id);
!    end Is_Exported;
! 
!    function Is_Finalized_Transient (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Loop_Parameter | E_Variable);
!       return Flag252 (Id);
!    end Is_Finalized_Transient;
! 
!    function Is_First_Subtype (Id : E) return B is
!    begin
!       return Flag70 (Id);
!    end Is_First_Subtype;
! 
!    function Is_Formal_Subprogram (Id : E) return B is
!    begin
!       return Flag111 (Id);
!    end Is_Formal_Subprogram;
! 
!    function Is_Frozen (Id : E) return B is
!    begin
!       return Flag4 (Id);
!    end Is_Frozen;
! 
!    function Is_Generic_Actual_Subprogram (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Flag274 (Id);
!    end Is_Generic_Actual_Subprogram;
! 
!    function Is_Generic_Actual_Type (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag94 (Id);
!    end Is_Generic_Actual_Type;
! 
!    function Is_Generic_Instance (Id : E) return B is
!    begin
!       return Flag130 (Id);
!    end Is_Generic_Instance;
! 
!    function Is_Generic_Type (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag13 (Id);
!    end Is_Generic_Type;
! 
!    function Is_Hidden (Id : E) return B is
!    begin
!       return Flag57 (Id);
!    end Is_Hidden;
! 
!    function Is_Hidden_Non_Overridden_Subpgm (Id : E) return B is
!    begin
!       return Flag2 (Id);
!    end Is_Hidden_Non_Overridden_Subpgm;
! 
!    function Is_Hidden_Open_Scope (Id : E) return B is
!    begin
!       return Flag171 (Id);
!    end Is_Hidden_Open_Scope;
! 
!    function Is_Ignored_Ghost_Entity (Id : E) return B is
!    begin
!       --  Allow this attribute to appear on unanalyzed entities
! 
!       pragma Assert (Nkind (Id) in N_Entity
!         or else Ekind (Id) = E_Void);
!       return Flag278 (Id);
!    end Is_Ignored_Ghost_Entity;
! 
!    function Is_Ignored_Transient (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Loop_Parameter | E_Variable);
!       return Flag295 (Id);
!    end Is_Ignored_Transient;
! 
!    function Is_Immediately_Visible (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag7 (Id);
!    end Is_Immediately_Visible;
! 
!    function Is_Implementation_Defined (Id : E) return B is
!    begin
!       return Flag254 (Id);
!    end Is_Implementation_Defined;
! 
!    function Is_Imported (Id : E) return B is
!    begin
!       return Flag24 (Id);
!    end Is_Imported;
! 
!    function Is_Independent (Id : E) return B is
!    begin
!       return Flag268 (Id);
!    end Is_Independent;
! 
!    function Is_Initial_Condition_Procedure (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Flag302 (Id);
!    end Is_Initial_Condition_Procedure;
! 
!    function Is_Inlined (Id : E) return B is
!    begin
!       return Flag11 (Id);
!    end Is_Inlined;
! 
!    function Is_Inlined_Always (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Flag1 (Id);
!    end Is_Inlined_Always;
! 
!    function Is_Interface (Id : E) return B is
!    begin
!       return Flag186 (Id);
!    end Is_Interface;
! 
!    function Is_Instantiated (Id : E) return B is
!    begin
!       return Flag126 (Id);
!    end Is_Instantiated;
! 
!    function Is_Internal (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag17 (Id);
!    end Is_Internal;
! 
!    function Is_Interrupt_Handler (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag89 (Id);
!    end Is_Interrupt_Handler;
! 
!    function Is_Intrinsic_Subprogram (Id : E) return B is
!    begin
!       return Flag64 (Id);
!    end Is_Intrinsic_Subprogram;
! 
!    function Is_Invariant_Procedure (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Flag257 (Id);
!    end Is_Invariant_Procedure;
! 
!    function Is_Itype (Id : E) return B is
!    begin
!       return Flag91 (Id);
!    end Is_Itype;
! 
!    function Is_Known_Non_Null (Id : E) return B is
!    begin
!       return Flag37 (Id);
!    end Is_Known_Non_Null;
! 
!    function Is_Known_Null (Id : E) return B is
!    begin
!       return Flag204 (Id);
!    end Is_Known_Null;
! 
!    function Is_Known_Valid (Id : E) return B is
!    begin
!       return Flag170 (Id);
!    end Is_Known_Valid;
! 
!    function Is_Limited_Composite (Id : E) return B is
!    begin
!       return Flag106 (Id);
!    end Is_Limited_Composite;
! 
!    function Is_Limited_Interface (Id : E) return B is
!    begin
!       return Flag197 (Id);
!    end Is_Limited_Interface;
! 
!    function Is_Limited_Record (Id : E) return B is
!    begin
!       return Flag25 (Id);
!    end Is_Limited_Record;
! 
!    function Is_Local_Anonymous_Access (Id : E) return B is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       return Flag194 (Id);
!    end Is_Local_Anonymous_Access;
! 
!    function Is_Loop_Parameter (Id : E) return B is
!    begin
!       return Flag307 (Id);
!    end Is_Loop_Parameter;
! 
!    function Is_Machine_Code_Subprogram (Id : E) return B is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       return Flag137 (Id);
!    end Is_Machine_Code_Subprogram;
! 
!    function Is_Non_Static_Subtype (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag109 (Id);
!    end Is_Non_Static_Subtype;
! 
!    function Is_Null_Init_Proc (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Procedure);
!       return Flag178 (Id);
!    end Is_Null_Init_Proc;
! 
!    function Is_Obsolescent (Id : E) return B is
!    begin
!       return Flag153 (Id);
!    end Is_Obsolescent;
! 
!    function Is_Only_Out_Parameter (Id : E) return B is
!    begin
!       pragma Assert (Is_Formal (Id));
!       return Flag226 (Id);
!    end Is_Only_Out_Parameter;
! 
!    function Is_Package_Body_Entity (Id : E) return B is
!    begin
!       return Flag160 (Id);
!    end Is_Package_Body_Entity;
! 
!    function Is_Packed (Id : E) return B is
!    begin
!       return Flag51 (Implementation_Base_Type (Id));
!    end Is_Packed;
! 
!    function Is_Packed_Array_Impl_Type (Id : E) return B is
!    begin
!       return Flag138 (Id);
!    end Is_Packed_Array_Impl_Type;
! 
!    function Is_Param_Block_Component_Type (Id : E) return B is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       return Flag215 (Base_Type (Id));
!    end Is_Param_Block_Component_Type;
! 
!    function Is_Partial_DIC_Procedure (Id : E) return B is
!       Partial_DIC_Suffix : constant String := "Partial_DIC";
!       DIC_Nam            : constant String := Get_Name_String (Chars (Id));
! 
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
! 
!       --  Instead of adding a new Entity_Id flag (which are in short supply),
!       --  we test the form of the subprogram name. When the node field and flag
!       --  situation is eased, this should be replaced with a flag. ???
! 
!       if DIC_Nam'Length > Partial_DIC_Suffix'Length
!         and then
!           DIC_Nam
!             (DIC_Nam'Last - Partial_DIC_Suffix'Length + 1 .. DIC_Nam'Last) =
!                Partial_DIC_Suffix
!       then
!          return True;
!       else
!          return False;
!       end if;
!    end Is_Partial_DIC_Procedure;
! 
!    function Is_Partial_Invariant_Procedure (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Flag292 (Id);
!    end Is_Partial_Invariant_Procedure;
! 
!    function Is_Potentially_Use_Visible (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag9 (Id);
!    end Is_Potentially_Use_Visible;
! 
!    function Is_Predicate_Function (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Flag255 (Id);
!    end Is_Predicate_Function;
! 
!    function Is_Predicate_Function_M (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Flag256 (Id);
!    end Is_Predicate_Function_M;
! 
!    function Is_Preelaborated (Id : E) return B is
!    begin
!       return Flag59 (Id);
!    end Is_Preelaborated;
! 
!    function Is_Primitive (Id : E) return B is
!    begin
!       pragma Assert (Is_Overloadable (Id) or else Is_Generic_Subprogram (Id));
!       return Flag218 (Id);
!    end Is_Primitive;
! 
!    function Is_Primitive_Wrapper (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Flag195 (Id);
!    end Is_Primitive_Wrapper;
! 
!    function Is_Private_Composite (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag107 (Id);
!    end Is_Private_Composite;
! 
!    function Is_Private_Descendant (Id : E) return B is
!    begin
!       return Flag53 (Id);
!    end Is_Private_Descendant;
! 
!    function Is_Private_Primitive (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Flag245 (Id);
!    end Is_Private_Primitive;
! 
!    function Is_Public (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag10 (Id);
!    end Is_Public;
! 
!    function Is_Pure (Id : E) return B is
!    begin
!       return Flag44 (Id);
!    end Is_Pure;
! 
!    function Is_Pure_Unit_Access_Type (Id : E) return B is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       return Flag189 (Id);
!    end Is_Pure_Unit_Access_Type;
! 
!    function Is_RACW_Stub_Type (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag244 (Id);
!    end Is_RACW_Stub_Type;
! 
!    function Is_Raised (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Exception);
!       return Flag224 (Id);
!    end Is_Raised;
! 
!    function Is_Remote_Call_Interface (Id : E) return B is
!    begin
!       return Flag62 (Id);
!    end Is_Remote_Call_Interface;
! 
!    function Is_Remote_Types (Id : E) return B is
!    begin
!       return Flag61 (Id);
!    end Is_Remote_Types;
! 
!    function Is_Renaming_Of_Object (Id : E) return B is
!    begin
!       return Flag112 (Id);
!    end Is_Renaming_Of_Object;
! 
!    function Is_Return_Object (Id : E) return B is
!    begin
!       return Flag209 (Id);
!    end Is_Return_Object;
! 
!    function Is_Safe_To_Reevaluate (Id : E) return B is
!    begin
!       return Flag249 (Id);
!    end Is_Safe_To_Reevaluate;
! 
!    function Is_Shared_Passive (Id : E) return B is
!    begin
!       return Flag60 (Id);
!    end Is_Shared_Passive;
! 
!    function Is_Static_Type (Id : E) return B is
!    begin
!       return Flag281 (Id);
!    end Is_Static_Type;
! 
!    function Is_Statically_Allocated (Id : E) return B is
!    begin
!       return Flag28 (Id);
!    end Is_Statically_Allocated;
! 
!    function Is_Tag (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Flag78 (Id);
!    end Is_Tag;
! 
!    function Is_Tagged_Type (Id : E) return B is
!    begin
!       return Flag55 (Id);
!    end Is_Tagged_Type;
! 
!    function Is_Thunk (Id : E) return B is
!    begin
!       return Flag225 (Id);
!    end Is_Thunk;
! 
!    function Is_Trivial_Subprogram (Id : E) return B is
!    begin
!       return Flag235 (Id);
!    end Is_Trivial_Subprogram;
! 
!    function Is_True_Constant (Id : E) return B is
!    begin
!       return Flag163 (Id);
!    end Is_True_Constant;
! 
!    function Is_Unchecked_Union (Id : E) return B is
!    begin
!       return Flag117 (Implementation_Base_Type (Id));
!    end Is_Unchecked_Union;
! 
!    function Is_Underlying_Full_View (Id : E) return B is
!    begin
!       return Flag298 (Id);
!    end Is_Underlying_Full_View;
! 
!    function Is_Underlying_Record_View (Id : E) return B is
!    begin
!       return Flag246 (Id);
!    end Is_Underlying_Record_View;
! 
!    function Is_Unimplemented (Id : E) return B is
!    begin
!       return Flag284 (Id);
!    end Is_Unimplemented;
! 
!    function Is_Unsigned_Type (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag144 (Id);
!    end Is_Unsigned_Type;
! 
!    function Is_Uplevel_Referenced_Entity (Id : E) return B is
!    begin
!       return Flag283 (Id);
!    end Is_Uplevel_Referenced_Entity;
! 
!    function Is_Valued_Procedure (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Procedure);
!       return Flag127 (Id);
!    end Is_Valued_Procedure;
! 
!    function Is_Visible_Formal (Id : E) return B is
!    begin
!       return Flag206 (Id);
!    end Is_Visible_Formal;
! 
!    function Is_Visible_Lib_Unit (Id : E) return B is
!    begin
!       return Flag116 (Id);
!    end Is_Visible_Lib_Unit;
! 
!    function Is_Volatile (Id : E) return B is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
! 
!       if Is_Type (Id) then
!          return Flag16 (Base_Type (Id));
!       else
!          return Flag16 (Id);
!       end if;
!    end Is_Volatile;
! 
!    function Is_Volatile_Full_Access (Id : E) return B is
!    begin
!       return Flag285 (Id);
!    end Is_Volatile_Full_Access;
! 
!    function Itype_Printed (Id : E) return B is
!    begin
!       pragma Assert (Is_Itype (Id));
!       return Flag202 (Id);
!    end Itype_Printed;
! 
!    function Kill_Elaboration_Checks (Id : E) return B is
!    begin
!       return Flag32 (Id);
!    end Kill_Elaboration_Checks;
! 
!    function Kill_Range_Checks (Id : E) return B is
!    begin
!       return Flag33 (Id);
!    end Kill_Range_Checks;
! 
!    function Known_To_Have_Preelab_Init (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag207 (Id);
!    end Known_To_Have_Preelab_Init;
! 
!    function Last_Aggregate_Assignment (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Variable);
!       return Node30 (Id);
!    end Last_Aggregate_Assignment;
! 
!    function Last_Assignment (Id : E) return N is
!    begin
!       pragma Assert (Is_Assignable (Id));
!       return Node26 (Id);
!    end Last_Assignment;
! 
!    function Last_Entity (Id : E) return E is
!    begin
!       return Node20 (Id);
!    end Last_Entity;
! 
!    function Limited_View (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       return Node23 (Id);
!    end Limited_View;
! 
!    function Linker_Section_Pragma (Id : E) return N is
!    begin
!       pragma Assert
!         (Is_Object (Id) or else Is_Subprogram (Id) or else Is_Type (Id));
!       return Node33 (Id);
!    end Linker_Section_Pragma;
! 
!    function Lit_Indexes (Id : E) return E is
!    begin
!       pragma Assert (Is_Enumeration_Type (Id));
!       return Node18 (Id);
!    end Lit_Indexes;
! 
!    function Lit_Strings (Id : E) return E is
!    begin
!       pragma Assert (Is_Enumeration_Type (Id));
!       return Node16 (Id);
!    end Lit_Strings;
! 
!    function Low_Bound_Tested (Id : E) return B is
!    begin
!       return Flag205 (Id);
!    end Low_Bound_Tested;
! 
!    function Machine_Radix_10 (Id : E) return B is
!    begin
!       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
!       return Flag84 (Id);
!    end Machine_Radix_10;
! 
!    function Master_Id (Id : E) return E is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       return Node17 (Id);
!    end Master_Id;
! 
!    function Materialize_Entity (Id : E) return B is
!    begin
!       return Flag168 (Id);
!    end Materialize_Entity;
! 
!    function May_Inherit_Delayed_Rep_Aspects (Id : E) return B is
!    begin
!       return Flag262 (Id);
!    end May_Inherit_Delayed_Rep_Aspects;
! 
!    function Mechanism (Id : E) return M is
!    begin
!       pragma Assert (Ekind (Id) = E_Function or else Is_Formal (Id));
!       return UI_To_Int (Uint8 (Id));
!    end Mechanism;
! 
!    function Minimum_Accessibility (Id : E) return E is
!    begin
!       pragma Assert (Is_Formal (Id));
!       return Node24 (Id);
!    end Minimum_Accessibility;
! 
!    function Modulus (Id : E) return Uint is
!    begin
!       pragma Assert (Is_Modular_Integer_Type (Id));
!       return Uint17 (Base_Type (Id));
!    end Modulus;
! 
!    function Must_Be_On_Byte_Boundary (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag183 (Id);
!    end Must_Be_On_Byte_Boundary;
! 
!    function Must_Have_Preelab_Init (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag208 (Id);
!    end Must_Have_Preelab_Init;
! 
!    function Needs_Activation_Record (Id : E) return B is
!    begin
!       return Flag306 (Id);
!    end Needs_Activation_Record;
! 
!    function Needs_Debug_Info (Id : E) return B is
!    begin
!       return Flag147 (Id);
!    end Needs_Debug_Info;
! 
!    function Needs_No_Actuals (Id : E) return B is
!    begin
!       pragma Assert
!         (Is_Overloadable (Id)
!            or else Ekind (Id) in E_Subprogram_Type | E_Entry_Family);
!       return Flag22 (Id);
!    end Needs_No_Actuals;
! 
!    function Never_Set_In_Source (Id : E) return B is
!    begin
!       return Flag115 (Id);
!    end Never_Set_In_Source;
! 
!    function Next_Inlined_Subprogram (Id : E) return E is
!    begin
!       return Node12 (Id);
!    end Next_Inlined_Subprogram;
! 
!    function No_Dynamic_Predicate_On_Actual (Id : E) return Boolean is
!    begin
!       pragma Assert (Is_Discrete_Type (Id));
!       return Flag276 (Id);
!    end No_Dynamic_Predicate_On_Actual;
! 
!    function No_Pool_Assigned (Id : E) return B is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       return Flag131 (Root_Type (Id));
!    end No_Pool_Assigned;
! 
!    function No_Predicate_On_Actual (Id : E) return Boolean is
!    begin
!       pragma Assert (Is_Discrete_Type (Id));
!       return Flag275 (Id);
!    end No_Predicate_On_Actual;
! 
!    function No_Reordering (Id : E) return B is
!    begin
!       pragma Assert (Is_Record_Type (Id));
!       return Flag239 (Implementation_Base_Type (Id));
!    end No_Reordering;
! 
!    function No_Return (Id : E) return B is
!    begin
!       return Flag113 (Id);
!    end No_Return;
! 
!    function No_Strict_Aliasing (Id : E) return B is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       return Flag136 (Base_Type (Id));
!    end No_Strict_Aliasing;
! 
!    function No_Tagged_Streams_Pragma (Id : E) return N is
!    begin
!       pragma Assert (Is_Tagged_Type (Id));
!       return Node32 (Id);
!    end No_Tagged_Streams_Pragma;
! 
!    function Non_Binary_Modulus (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag58 (Base_Type (Id));
!    end Non_Binary_Modulus;
! 
!    function Non_Limited_View (Id : E) return E is
!    begin
!       pragma Assert
!         (Ekind (Id) in Incomplete_Kind
!            or else
!          Ekind (Id) in Class_Wide_Kind
!            or else
!          Ekind (Id) = E_Abstract_State);
!       return Node19 (Id);
!    end Non_Limited_View;
! 
!    function Nonzero_Is_True (Id : E) return B is
!    begin
!       pragma Assert (Root_Type (Id) = Standard_Boolean);
!       return Flag162 (Base_Type (Id));
!    end Nonzero_Is_True;
! 
!    function Normalized_First_Bit (Id : E) return U is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Discriminant);
!       return Uint8 (Id);
!    end Normalized_First_Bit;
! 
!    function Normalized_Position (Id : E) return U is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Discriminant);
!       return Uint14 (Id);
!    end Normalized_Position;
! 
!    function Normalized_Position_Max (Id : E) return U is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Discriminant);
!       return Uint10 (Id);
!    end Normalized_Position_Max;
! 
!    function OK_To_Rename (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       return Flag247 (Id);
!    end OK_To_Rename;
! 
!    function Optimize_Alignment_Space (Id : E) return B is
!    begin
!       pragma Assert
!         (Is_Type (Id) or else Ekind (Id) in E_Constant | E_Variable);
!       return Flag241 (Id);
!    end Optimize_Alignment_Space;
! 
!    function Optimize_Alignment_Time (Id : E) return B is
!    begin
!       pragma Assert
!         (Is_Type (Id) or else Ekind (Id) in E_Constant | E_Variable);
!       return Flag242 (Id);
!    end Optimize_Alignment_Time;
! 
!    function Original_Access_Type (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Access_Subprogram_Type);
!       return Node28 (Id);
!    end Original_Access_Type;
! 
!    function Original_Array_Type (Id : E) return E is
!    begin
!       pragma Assert (Is_Array_Type (Id) or else Is_Modular_Integer_Type (Id));
!       return Node21 (Id);
!    end Original_Array_Type;
! 
!    function Original_Protected_Subprogram (Id : E) return N is
!    begin
!       return Node41 (Id);
!    end Original_Protected_Subprogram;
! 
!    function Original_Record_Component (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Void | E_Component | E_Discriminant);
!       return Node22 (Id);
!    end Original_Record_Component;
! 
!    function Overlays_Constant (Id : E) return B is
!    begin
!       return Flag243 (Id);
!    end Overlays_Constant;
! 
!    function Overridden_Operation (Id : E) return E is
!    begin
!       pragma Assert (Is_Subprogram_Or_Generic_Subprogram (Id));
!       return Node26 (Id);
!    end Overridden_Operation;
! 
!    function Package_Instantiation (Id : E) return N is
!    begin
!       pragma Assert (Is_Package_Or_Generic_Package (Id));
!       return Node26 (Id);
!    end Package_Instantiation;
! 
!    function Packed_Array_Impl_Type (Id : E) return E is
!    begin
!       pragma Assert (Is_Array_Type (Id));
!       return Node23 (Id);
!    end Packed_Array_Impl_Type;
! 
!    function Parent_Subtype (Id : E) return E is
!    begin
!       pragma Assert (Is_Record_Type (Id));
!       return Node19 (Base_Type (Id));
!    end Parent_Subtype;
! 
!    function Part_Of_Constituents (Id : E) return L is
!    begin
!       pragma Assert (Ekind (Id) in E_Abstract_State | E_Variable);
!       return Elist10 (Id);
!    end Part_Of_Constituents;
! 
!    function Part_Of_References (Id : E) return L is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       return Elist11 (Id);
!    end Part_Of_References;
! 
!    function Partial_View_Has_Unknown_Discr (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag280 (Id);
!    end Partial_View_Has_Unknown_Discr;
! 
!    function Pending_Access_Types (Id : E) return L is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Elist15 (Id);
!    end Pending_Access_Types;
! 
!    function Postconditions_Proc (Id : E) return E is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Entry | E_Entry_Family | E_Function | E_Procedure);
!       return Node14 (Id);
!    end Postconditions_Proc;
! 
!    function Predicated_Parent (Id : E) return E is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Array_Subtype  |
!                        E_Record_Subtype |
!                        E_Record_Subtype_With_Private);
!       return Node38 (Id);
!    end Predicated_Parent;
! 
!    function Predicates_Ignored (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag288 (Id);
!    end Predicates_Ignored;
! 
!    function Prev_Entity (Id : E) return E is
!    begin
!       return Node36 (Id);
!    end Prev_Entity;
! 
!    function Prival (Id : E) return E is
!    begin
!       pragma Assert (Is_Protected_Component (Id));
!       return Node17 (Id);
!    end Prival;
! 
!    function Prival_Link (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Variable);
!       return Node20 (Id);
!    end Prival_Link;
! 
!    function Private_Dependents (Id : E) return L is
!    begin
!       pragma Assert (Is_Incomplete_Or_Private_Type (Id));
!       return Elist18 (Id);
!    end Private_Dependents;
! 
!    function Protected_Body_Subprogram (Id : E) return E is
!    begin
!       pragma Assert (Is_Subprogram_Or_Entry (Id));
!       return Node11 (Id);
!    end Protected_Body_Subprogram;
! 
!    function Protected_Formal (Id : E) return E is
!    begin
!       pragma Assert (Is_Formal (Id));
!       return Node22 (Id);
!    end Protected_Formal;
! 
!    function Protected_Subprogram (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       return Node39 (Id);
!    end Protected_Subprogram;
! 
!    function Protection_Object (Id : E) return E is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Entry | E_Entry_Family | E_Function | E_Procedure);
!       return Node23 (Id);
!    end Protection_Object;
! 
!    function Reachable (Id : E) return B is
!    begin
!       return Flag49 (Id);
!    end Reachable;
! 
!    function Receiving_Entry (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Procedure);
!       return Node19 (Id);
!    end Receiving_Entry;
! 
!    function Referenced (Id : E) return B is
!    begin
!       return Flag156 (Id);
!    end Referenced;
! 
!    function Referenced_As_LHS (Id : E) return B is
!    begin
!       return Flag36 (Id);
!    end Referenced_As_LHS;
! 
!    function Referenced_As_Out_Parameter (Id : E) return B is
!    begin
!       return Flag227 (Id);
!    end Referenced_As_Out_Parameter;
! 
!    function Refinement_Constituents (Id : E) return L is
!    begin
!       pragma Assert (Ekind (Id) = E_Abstract_State);
!       return Elist8 (Id);
!    end Refinement_Constituents;
! 
!    function Register_Exception_Call (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) = E_Exception);
!       return Node20 (Id);
!    end Register_Exception_Call;
! 
!    function Related_Array_Object (Id : E) return E is
!    begin
!       pragma Assert (Is_Array_Type (Id));
!       return Node25 (Id);
!    end Related_Array_Object;
! 
!    function Related_Expression (Id : E) return N is
!    begin
!       pragma Assert
!         (Ekind (Id) in Type_Kind | E_Constant | E_Variable | E_Function);
!       return Node24 (Id);
!    end Related_Expression;
! 
!    function Related_Instance (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Package | E_Package_Body);
!       return Node15 (Id);
!    end Related_Instance;
! 
!    function Related_Type (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Constant | E_Variable);
!       return Node27 (Id);
!    end Related_Type;
! 
!    function Relative_Deadline_Variable (Id : E) return E is
!    begin
!       pragma Assert (Is_Task_Type (Id));
!       return Node28 (Implementation_Base_Type (Id));
!    end Relative_Deadline_Variable;
! 
!    function Renamed_Entity (Id : E) return N is
!    begin
!       return Node18 (Id);
!    end Renamed_Entity;
! 
!    function Renamed_In_Spec (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       return Flag231 (Id);
!    end Renamed_In_Spec;
! 
!    function Renamed_Object (Id : E) return N is
!    begin
!       return Node18 (Id);
!    end Renamed_Object;
! 
!    function Renaming_Map (Id : E) return U is
!    begin
!       return Uint9 (Id);
!    end Renaming_Map;
! 
!    function Requires_Overriding (Id : E) return B is
!    begin
!       pragma Assert (Is_Overloadable (Id));
!       return Flag213 (Id);
!    end Requires_Overriding;
! 
!    function Return_Present (Id : E) return B is
!    begin
!       return Flag54 (Id);
!    end Return_Present;
! 
!    function Return_Applies_To (Id : E) return N is
!    begin
!       return Node8 (Id);
!    end Return_Applies_To;
! 
!    function Returns_By_Ref (Id : E) return B is
!    begin
!       return Flag90 (Id);
!    end Returns_By_Ref;
! 
!    function Reverse_Bit_Order (Id : E) return B is
!    begin
!       pragma Assert (Is_Record_Type (Id));
!       return Flag164 (Base_Type (Id));
!    end Reverse_Bit_Order;
! 
!    function Reverse_Storage_Order (Id : E) return B is
!    begin
!       pragma Assert (Is_Record_Type (Id) or else Is_Array_Type (Id));
!       return Flag93 (Base_Type (Id));
!    end Reverse_Storage_Order;
! 
!    function Rewritten_For_C (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Function);
!       return Flag287 (Id);
!    end Rewritten_For_C;
! 
!    function RM_Size (Id : E) return U is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Uint13 (Id);
!    end RM_Size;
! 
!    function Scalar_Range (Id : E) return N is
!    begin
!       return Node20 (Id);
!    end Scalar_Range;
! 
!    function Scale_Value (Id : E) return U is
!    begin
!       return Uint16 (Id);
!    end Scale_Value;
! 
!    function Scope_Depth_Value (Id : E) return U is
!    begin
!       pragma Assert
!         (Ekind (Id) in
!            Concurrent_Kind | Entry_Kind        | Generic_Unit_Kind |
!            E_Package       | E_Package_Body    | Subprogram_Kind   |
!            E_Block         | E_Subprogram_Body |
!            E_Private_Type .. E_Limited_Private_Subtype             |
!            E_Void          | E_Loop            | E_Return_Statement);
!       return Uint22 (Id);
!    end Scope_Depth_Value;
! 
!    function Sec_Stack_Needed_For_Return (Id : E) return B is
!    begin
!       return Flag167 (Id);
!    end Sec_Stack_Needed_For_Return;
! 
!    function Shared_Var_Procs_Instance (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       return Node22 (Id);
!    end Shared_Var_Procs_Instance;
! 
!    function Size_Check_Code (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Variable);
!       return Node19 (Id);
!    end Size_Check_Code;
! 
!    function Size_Depends_On_Discriminant (Id : E) return B is
!    begin
!       return Flag177 (Id);
!    end Size_Depends_On_Discriminant;
! 
!    function Size_Known_At_Compile_Time (Id : E) return B is
!    begin
!       return Flag92 (Id);
!    end Size_Known_At_Compile_Time;
! 
!    function Small_Value (Id : E) return R is
!    begin
!       pragma Assert (Is_Fixed_Point_Type (Id));
!       return Ureal21 (Id);
!    end Small_Value;
! 
!    function SPARK_Aux_Pragma (Id : E) return N is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Protected_Type      --  concurrent types
!                      | E_Task_Type
!            or else
!          Ekind (Id) in E_Generic_Package     --  packages
!                      | E_Package
!                      | E_Package_Body);
!       return Node41 (Id);
!    end SPARK_Aux_Pragma;
! 
!    function SPARK_Aux_Pragma_Inherited (Id : E) return B is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Protected_Type      --  concurrent types
!                      | E_Task_Type
!            or else
!          Ekind (Id) in E_Generic_Package     --  packages
!                      | E_Package
!                      | E_Package_Body);
!       return Flag266 (Id);
!    end SPARK_Aux_Pragma_Inherited;
! 
!    function SPARK_Pragma (Id : E) return N is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Constant            --  objects
!                      | E_Variable
!           or else
!          Ekind (Id) in E_Abstract_State      --  overloadable
!                      | E_Entry
!                      | E_Entry_Family
!                      | E_Function
!                      | E_Generic_Function
!                      | E_Generic_Procedure
!                      | E_Operator
!                      | E_Procedure
!                      | E_Subprogram_Body
!            or else
!          Ekind (Id) in E_Generic_Package     --  packages
!                      | E_Package
!                      | E_Package_Body
!            or else
!          Ekind (Id) = E_Void                 --  special purpose
!            or else
!          Ekind (Id) in E_Protected_Body      --  types
!                      | E_Task_Body
!            or else
!          Is_Type (Id));
!       return Node40 (Id);
!    end SPARK_Pragma;
! 
!    function SPARK_Pragma_Inherited (Id : E) return B is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Constant            --  objects
!                      | E_Variable
!           or else
!          Ekind (Id) in E_Abstract_State      --  overloadable
!                      | E_Entry
!                      | E_Entry_Family
!                      | E_Function
!                      | E_Generic_Function
!                      | E_Generic_Procedure
!                      | E_Operator
!                      | E_Procedure
!                      | E_Subprogram_Body
!            or else
!          Ekind (Id) in E_Generic_Package     --  packages
!                      | E_Package
!                      | E_Package_Body
!            or else
!          Ekind (Id) = E_Void                 --  special purpose
!            or else
!          Ekind (Id) in E_Protected_Body      --  types
!                      | E_Task_Body
!            or else
!          Is_Type (Id));
!       return Flag265 (Id);
!    end SPARK_Pragma_Inherited;
! 
!    function Spec_Entity (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) = E_Package_Body or else Is_Formal (Id));
!       return Node19 (Id);
!    end Spec_Entity;
! 
!    function SSO_Set_High_By_Default (Id : E) return B is
!    begin
!       pragma Assert (Is_Record_Type (Id) or else Is_Array_Type (Id));
!       return Flag273 (Base_Type (Id));
!    end SSO_Set_High_By_Default;
! 
!    function SSO_Set_Low_By_Default (Id : E) return B is
!    begin
!       pragma Assert (Is_Record_Type (Id) or else Is_Array_Type (Id));
!       return Flag272 (Base_Type (Id));
!    end SSO_Set_Low_By_Default;
! 
!    function Static_Discrete_Predicate (Id : E) return S is
!    begin
!       pragma Assert (Is_Discrete_Type (Id));
!       return List25 (Id);
!    end Static_Discrete_Predicate;
! 
!    function Static_Real_Or_String_Predicate (Id : E) return N is
!    begin
!       pragma Assert (Is_Real_Type (Id) or else Is_String_Type (Id));
!       return Node25 (Id);
!    end Static_Real_Or_String_Predicate;
! 
!    function Status_Flag_Or_Transient_Decl (Id : E) return N is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Constant | E_Loop_Parameter | E_Variable);
!       return Node15 (Id);
!    end Status_Flag_Or_Transient_Decl;
! 
!    function Storage_Size_Variable (Id : E) return E is
!    begin
!       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
!       return Node26 (Implementation_Base_Type (Id));
!    end Storage_Size_Variable;
! 
!    function Static_Elaboration_Desired (Id : E) return B is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       return Flag77 (Id);
!    end Static_Elaboration_Desired;
! 
!    function Static_Initialization (Id : E) return N is
!    begin
!       pragma Assert
!         (Ekind (Id) = E_Procedure and then not Is_Dispatching_Operation (Id));
!       return Node30 (Id);
!    end Static_Initialization;
! 
!    function Stored_Constraint (Id : E) return L is
!    begin
!       pragma Assert
!         (Is_Composite_Type (Id) and then not Is_Array_Type (Id));
!       return Elist23 (Id);
!    end Stored_Constraint;
! 
!    function Stores_Attribute_Old_Prefix (Id : E) return B is
!    begin
!       return Flag270 (Id);
!    end Stores_Attribute_Old_Prefix;
! 
!    function Strict_Alignment (Id : E) return B is
!    begin
!       return Flag145 (Implementation_Base_Type (Id));
!    end Strict_Alignment;
! 
!    function String_Literal_Length (Id : E) return U is
!    begin
!       return Uint16 (Id);
!    end String_Literal_Length;
! 
!    function String_Literal_Low_Bound (Id : E) return N is
!    begin
!       return Node18 (Id);
!    end String_Literal_Low_Bound;
! 
!    function Subprograms_For_Type (Id : E) return L is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Elist29 (Id);
!    end Subprograms_For_Type;
! 
!    function Subps_Index (Id : E) return U is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       return Uint24 (Id);
!    end Subps_Index;
! 
!    function Suppress_Elaboration_Warnings (Id : E) return B is
!    begin
!       return Flag303 (Id);
!    end Suppress_Elaboration_Warnings;
! 
!    function Suppress_Initialization (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id) or else Ekind (Id) = E_Variable);
!       return Flag105 (Id);
!    end Suppress_Initialization;
! 
!    function Suppress_Style_Checks (Id : E) return B is
!    begin
!       return Flag165 (Id);
!    end Suppress_Style_Checks;
! 
!    function Suppress_Value_Tracking_On_Call (Id : E) return B is
!    begin
!       return Flag217 (Id);
!    end Suppress_Value_Tracking_On_Call;
! 
!    function Task_Body_Procedure (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) in Task_Kind);
!       return Node25 (Id);
!    end Task_Body_Procedure;
! 
!    function Thunk_Entity (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure
!                       and then Is_Thunk (Id));
!       return Node31 (Id);
!    end Thunk_Entity;
! 
!    function Treat_As_Volatile (Id : E) return B is
!    begin
!       return Flag41 (Id);
!    end Treat_As_Volatile;
! 
!    function Underlying_Full_View (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in Private_Kind);
!       return Node19 (Id);
!    end Underlying_Full_View;
! 
!    function Underlying_Record_View (Id : E) return E is
!    begin
!       return Node28 (Id);
!    end Underlying_Record_View;
! 
!    function Universal_Aliasing (Id : E) return B is
!    begin
!       pragma Assert (Is_Type (Id));
!       return Flag216 (Implementation_Base_Type (Id));
!    end Universal_Aliasing;
! 
!    function Unset_Reference (Id : E) return N is
!    begin
!       return Node16 (Id);
!    end Unset_Reference;
! 
!    function Used_As_Generic_Actual (Id : E) return B is
!    begin
!       return Flag222 (Id);
!    end Used_As_Generic_Actual;
! 
!    function Uses_Lock_Free (Id : E) return B is
!    begin
!       pragma Assert (Is_Protected_Type (Id));
!       return Flag188 (Id);
!    end Uses_Lock_Free;
! 
!    function Uses_Sec_Stack (Id : E) return B is
!    begin
!       return Flag95 (Id);
!    end Uses_Sec_Stack;
! 
!    function Validated_Object (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       return Node38 (Id);
!    end Validated_Object;
! 
!    function Warnings_Off (Id : E) return B is
!    begin
!       return Flag96 (Id);
!    end Warnings_Off;
! 
!    function Warnings_Off_Used (Id : E) return B is
!    begin
!       return Flag236 (Id);
!    end Warnings_Off_Used;
! 
!    function Warnings_Off_Used_Unmodified (Id : E) return B is
!    begin
!       return Flag237 (Id);
!    end Warnings_Off_Used_Unmodified;
! 
!    function Warnings_Off_Used_Unreferenced (Id : E) return B is
!    begin
!       return Flag238 (Id);
!    end Warnings_Off_Used_Unreferenced;
! 
!    function Was_Hidden (Id : E) return B is
!    begin
!       return Flag196 (Id);
!    end Was_Hidden;
! 
!    function Wrapped_Entity (Id : E) return E is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure
!                        and then Is_Primitive_Wrapper (Id));
!       return Node27 (Id);
!    end Wrapped_Entity;
! 
!    ------------------------------
!    -- Classification Functions --
!    ------------------------------
! 
!    function Is_Access_Object_Type               (Id : E) return B is
!    begin
!       return Is_Access_Type (Id) and then not Is_Access_Subprogram_Type (Id);
!    end Is_Access_Object_Type;
! 
!    function Is_Access_Type                      (Id : E) return B is
!    begin
!       return Ekind (Id) in Access_Kind;
!    end Is_Access_Type;
! 
!    function Is_Access_Protected_Subprogram_Type (Id : E) return B is
!    begin
!       return Ekind (Id) in Access_Protected_Kind;
!    end Is_Access_Protected_Subprogram_Type;
! 
!    function Is_Access_Subprogram_Type           (Id : E) return B is
!    begin
!       return Ekind (Id) in Access_Subprogram_Kind;
!    end Is_Access_Subprogram_Type;
! 
!    function Is_Aggregate_Type                   (Id : E) return B is
!    begin
!       return Ekind (Id) in Aggregate_Kind;
!    end Is_Aggregate_Type;
! 
!    function Is_Anonymous_Access_Type            (Id : E) return B is
!    begin
!       return Ekind (Id) in Anonymous_Access_Kind;
!    end Is_Anonymous_Access_Type;
! 
!    function Is_Array_Type                       (Id : E) return B is
!    begin
!       return Ekind (Id) in Array_Kind;
!    end Is_Array_Type;
! 
!    function Is_Assignable                       (Id : E) return B is
!    begin
!       return Ekind (Id) in Assignable_Kind;
!    end Is_Assignable;
! 
!    function Is_Class_Wide_Type                  (Id : E) return B is
!    begin
!       return Ekind (Id) in Class_Wide_Kind;
!    end Is_Class_Wide_Type;
! 
!    function Is_Composite_Type                   (Id : E) return B is
!    begin
!       return Ekind (Id) in Composite_Kind;
!    end Is_Composite_Type;
! 
!    function Is_Concurrent_Body                  (Id : E) return B is
!    begin
!       return Ekind (Id) in Concurrent_Body_Kind;
!    end Is_Concurrent_Body;
! 
!    function Is_Concurrent_Record_Type           (Id : E) return B is
!    begin
!       return Flag20 (Id);
!    end Is_Concurrent_Record_Type;
! 
!    function Is_Concurrent_Type                  (Id : E) return B is
!    begin
!       return Ekind (Id) in Concurrent_Kind;
!    end Is_Concurrent_Type;
! 
!    function Is_Decimal_Fixed_Point_Type         (Id : E) return B is
!    begin
!       return Ekind (Id) in Decimal_Fixed_Point_Kind;
!    end Is_Decimal_Fixed_Point_Type;
! 
!    function Is_Digits_Type                      (Id : E) return B is
!    begin
!       return Ekind (Id) in Digits_Kind;
!    end Is_Digits_Type;
! 
!    function Is_Discrete_Or_Fixed_Point_Type     (Id : E) return B is
!    begin
!       return Ekind (Id) in Discrete_Or_Fixed_Point_Kind;
!    end Is_Discrete_Or_Fixed_Point_Type;
! 
!    function Is_Discrete_Type                    (Id : E) return B is
!    begin
!       return Ekind (Id) in Discrete_Kind;
!    end Is_Discrete_Type;
! 
!    function Is_Elementary_Type                  (Id : E) return B is
!    begin
!       return Ekind (Id) in Elementary_Kind;
!    end Is_Elementary_Type;
! 
!    function Is_Entry                            (Id : E) return B is
!    begin
!       return Ekind (Id) in Entry_Kind;
!    end Is_Entry;
! 
!    function Is_Enumeration_Type                 (Id : E) return B is
!    begin
!       return Ekind (Id) in Enumeration_Kind;
!    end Is_Enumeration_Type;
! 
!    function Is_Fixed_Point_Type                 (Id : E) return B is
!    begin
!       return Ekind (Id) in Fixed_Point_Kind;
!    end Is_Fixed_Point_Type;
! 
!    function Is_Floating_Point_Type              (Id : E) return B is
!    begin
!       return Ekind (Id) in Float_Kind;
!    end Is_Floating_Point_Type;
! 
!    function Is_Formal                           (Id : E) return B is
!    begin
!       return Ekind (Id) in Formal_Kind;
!    end Is_Formal;
! 
!    function Is_Formal_Object                    (Id : E) return B is
!    begin
!       return Ekind (Id) in Formal_Object_Kind;
!    end Is_Formal_Object;
! 
!    function Is_Generic_Subprogram               (Id : E) return B is
!    begin
!       return Ekind (Id) in Generic_Subprogram_Kind;
!    end Is_Generic_Subprogram;
! 
!    function Is_Generic_Unit                     (Id : E) return B is
!    begin
!       return Ekind (Id) in Generic_Unit_Kind;
!    end Is_Generic_Unit;
! 
!    function Is_Ghost_Entity (Id : Entity_Id) return Boolean is
!    begin
!       return Is_Checked_Ghost_Entity (Id) or else Is_Ignored_Ghost_Entity (Id);
!    end Is_Ghost_Entity;
! 
!    function Is_Incomplete_Or_Private_Type       (Id : E) return B is
!    begin
!       return Ekind (Id) in Incomplete_Or_Private_Kind;
!    end Is_Incomplete_Or_Private_Type;
! 
!    function Is_Incomplete_Type                  (Id : E) return B is
!    begin
!       return Ekind (Id) in Incomplete_Kind;
!    end Is_Incomplete_Type;
! 
!    function Is_Integer_Type                     (Id : E) return B is
!    begin
!       return Ekind (Id) in Integer_Kind;
!    end Is_Integer_Type;
! 
!    function Is_Modular_Integer_Type             (Id : E) return B is
!    begin
!       return Ekind (Id) in Modular_Integer_Kind;
!    end Is_Modular_Integer_Type;
! 
!    function Is_Named_Access_Type                (Id : E) return B is
!    begin
!       return Ekind (Id) in E_Access_Type ..
!                              E_Access_Protected_Subprogram_Type;
!    end Is_Named_Access_Type;
! 
!    function Is_Named_Number                     (Id : E) return B is
!    begin
!       return Ekind (Id) in Named_Kind;
!    end Is_Named_Number;
! 
!    function Is_Numeric_Type                     (Id : E) return B is
!    begin
!       return Ekind (Id) in Numeric_Kind;
!    end Is_Numeric_Type;
! 
!    function Is_Object                           (Id : E) return B is
!    begin
!       return Ekind (Id) in Object_Kind;
!    end Is_Object;
! 
!    function Is_Ordinary_Fixed_Point_Type        (Id : E) return B is
!    begin
!       return Ekind (Id) in Ordinary_Fixed_Point_Kind;
!    end Is_Ordinary_Fixed_Point_Type;
! 
!    function Is_Overloadable                     (Id : E) return B is
!    begin
!       return Ekind (Id) in Overloadable_Kind;
!    end Is_Overloadable;
! 
!    function Is_Private_Type                     (Id : E) return B is
!    begin
!       return Ekind (Id) in Private_Kind;
!    end Is_Private_Type;
! 
!    function Is_Protected_Type                   (Id : E) return B is
!    begin
!       return Ekind (Id) in Protected_Kind;
!    end Is_Protected_Type;
! 
!    function Is_Real_Type                        (Id : E) return B is
!    begin
!       return Ekind (Id) in Real_Kind;
!    end Is_Real_Type;
! 
!    function Is_Record_Type                      (Id : E) return B is
!    begin
!       return Ekind (Id) in Record_Kind;
!    end Is_Record_Type;
! 
!    function Is_Scalar_Type                      (Id : E) return B is
!    begin
!       return Ekind (Id) in Scalar_Kind;
!    end Is_Scalar_Type;
! 
!    function Is_Signed_Integer_Type              (Id : E) return B is
!    begin
!       return Ekind (Id) in Signed_Integer_Kind;
!    end Is_Signed_Integer_Type;
! 
!    function Is_Subprogram                       (Id : E) return B is
!    begin
!       return Ekind (Id) in Subprogram_Kind;
!    end Is_Subprogram;
! 
!    function Is_Subprogram_Or_Entry              (Id : E) return B is
!    begin
!       return Ekind (Id) in Subprogram_Kind
!                or else
!              Ekind (Id) in Entry_Kind;
!    end Is_Subprogram_Or_Entry;
! 
!    function Is_Subprogram_Or_Generic_Subprogram (Id : E) return B is
!    begin
!       return Ekind (Id) in Subprogram_Kind
!                or else
!              Ekind (Id) in Generic_Subprogram_Kind;
!    end Is_Subprogram_Or_Generic_Subprogram;
! 
!    function Is_Task_Type                        (Id : E) return B is
!    begin
!       return Ekind (Id) in Task_Kind;
!    end Is_Task_Type;
! 
!    function Is_Type                             (Id : E) return B is
!    begin
!       return Ekind (Id) in Type_Kind;
!    end Is_Type;
! 
!    ------------------------------
!    -- Attribute Set Procedures --
!    ------------------------------
! 
!    --  Note: in many of these set procedures an "obvious" assertion is missing.
!    --  The reason for this is that in many cases, a field is set before the
!    --  Ekind field is set, so that the field is set when Ekind = E_Void. It
!    --  it is possible to add assertions that specifically include the E_Void
!    --  possibility, but in some cases, we just omit the assertions.
! 
!    procedure Set_Abstract_States (Id : E; V : L) is
!    begin
!       pragma Assert (Is_Package_Or_Generic_Package (Id));
!       Set_Elist25 (Id, V);
!    end Set_Abstract_States;
! 
!    procedure Set_Accept_Address (Id : E; V : L) is
!    begin
!       Set_Elist21 (Id, V);
!    end Set_Accept_Address;
! 
!    procedure Set_Access_Disp_Table (Id : E; V : L) is
!    begin
!       pragma Assert (Ekind (Id) = E_Record_Type
!         and then Id = Implementation_Base_Type (Id));
!       pragma Assert (V = No_Elist or else Is_Tagged_Type (Id));
!       Set_Elist16 (Id, V);
!    end Set_Access_Disp_Table;
! 
!    procedure Set_Access_Disp_Table_Elab_Flag (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Record_Type
!         and then Id = Implementation_Base_Type (Id));
!       pragma Assert (Is_Tagged_Type (Id));
!       Set_Node30 (Id, V);
!    end Set_Access_Disp_Table_Elab_Flag;
! 
!    procedure Set_Access_Subprogram_Wrapper (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Subprogram_Type);
!       Set_Node41 (Id, V);
!    end Set_Access_Subprogram_Wrapper;
! 
!    procedure Set_Anonymous_Designated_Type (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       Set_Node35 (Id, V);
!    end Set_Anonymous_Designated_Type;
! 
!    procedure Set_Anonymous_Masters (Id : E; V : L) is
!    begin
!       pragma Assert
!         (Ekind (Id)
!            in E_Function | E_Package | E_Procedure | E_Subprogram_Body);
!       Set_Elist29 (Id, V);
!    end Set_Anonymous_Masters;
! 
!    procedure Set_Anonymous_Object (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Protected_Type | E_Task_Type);
!       Set_Node30 (Id, V);
!    end Set_Anonymous_Object;
! 
!    procedure Set_Associated_Entity (Id : E; V : E) is
!    begin
!       Set_Node37 (Id, V);
!    end Set_Associated_Entity;
! 
!    procedure Set_Associated_Formal_Package (Id : E; V : E) is
!    begin
!       Set_Node12 (Id, V);
!    end Set_Associated_Formal_Package;
! 
!    procedure Set_Associated_Node_For_Itype (Id : E; V : E) is
!    begin
!       Set_Node8 (Id, V);
!    end Set_Associated_Node_For_Itype;
! 
!    procedure Set_Associated_Storage_Pool (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Access_Type (Id) and then Is_Base_Type (Id));
!       Set_Node22 (Id, V);
!    end Set_Associated_Storage_Pool;
! 
!    procedure Set_Activation_Record_Component (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Constant
!                      | E_In_Parameter
!                      | E_In_Out_Parameter
!                      | E_Loop_Parameter
!                      | E_Out_Parameter
!                      | E_Variable);
!       Set_Node31 (Id, V);
!    end Set_Activation_Record_Component;
! 
!    procedure Set_Actual_Subtype (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Constant | E_Variable | E_Generic_In_Out_Parameter
!            or else Is_Formal (Id));
!       Set_Node17 (Id, V);
!    end Set_Actual_Subtype;
! 
!    procedure Set_Address_Taken (Id : E; V : B := True) is
!    begin
!       Set_Flag104 (Id, V);
!    end Set_Address_Taken;
! 
!    procedure Set_Alias (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Is_Overloadable (Id) or else Ekind (Id) = E_Subprogram_Type);
!       Set_Node18 (Id, V);
!    end Set_Alias;
! 
!    procedure Set_Alignment (Id : E; V : U) is
!    begin
!       pragma Assert (Is_Type (Id)
!                        or else Is_Formal (Id)
!                        or else Ekind (Id) in E_Loop_Parameter
!                                            | E_Constant
!                                            | E_Exception
!                                            | E_Variable);
!       Set_Uint14 (Id, V);
!    end Set_Alignment;
! 
!    procedure Set_Barrier_Function (Id : E; V : N) is
!    begin
!       pragma Assert (Is_Entry (Id));
!       Set_Node12 (Id, V);
!    end Set_Barrier_Function;
! 
!    procedure Set_Block_Node (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) = E_Block);
!       Set_Node11 (Id, V);
!    end Set_Block_Node;
! 
!    procedure Set_Body_Entity (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Package_Or_Generic_Package (Id));
!       Set_Node19 (Id, V);
!    end Set_Body_Entity;
! 
!    procedure Set_Body_Needed_For_Inlining (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       Set_Flag299 (Id, V);
!    end Set_Body_Needed_For_Inlining;
! 
!    procedure Set_Body_Needed_For_SAL (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Ekind (Id) = E_Package
!            or else Is_Subprogram (Id)
!            or else Is_Generic_Unit (Id));
!       Set_Flag40 (Id, V);
!    end Set_Body_Needed_For_SAL;
! 
!    procedure Set_Body_References (Id : E; V : L) is
!    begin
!       pragma Assert (Ekind (Id) = E_Abstract_State);
!       Set_Elist16 (Id, V);
!    end Set_Body_References;
! 
!    procedure Set_BIP_Initialization_Call (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Variable);
!       Set_Node29 (Id, V);
!    end Set_BIP_Initialization_Call;
! 
!    procedure Set_C_Pass_By_Copy (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Record_Type (Id) and then Is_Base_Type (Id));
!       Set_Flag125 (Id, V);
!    end Set_C_Pass_By_Copy;
! 
!    procedure Set_Can_Never_Be_Null (Id : E; V : B := True) is
!    begin
!       Set_Flag38 (Id, V);
!    end Set_Can_Never_Be_Null;
! 
!    procedure Set_Can_Use_Internal_Rep (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Access_Subprogram_Type (Id) and then Is_Base_Type (Id));
!       Set_Flag229 (Id, V);
!    end Set_Can_Use_Internal_Rep;
! 
!    procedure Set_Checks_May_Be_Suppressed (Id : E; V : B := True) is
!    begin
!       Set_Flag31 (Id, V);
!    end Set_Checks_May_Be_Suppressed;
! 
!    procedure Set_Class_Wide_Clone (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       Set_Node38 (Id, V);
!    end Set_Class_Wide_Clone;
! 
!    procedure Set_Class_Wide_Type (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Node9 (Id, V);
!    end Set_Class_Wide_Type;
! 
!    procedure Set_Cloned_Subtype (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Record_Subtype | E_Class_Wide_Subtype);
!       Set_Node16 (Id, V);
!    end Set_Cloned_Subtype;
! 
!    procedure Set_Component_Bit_Offset (Id : E; V : U) is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Discriminant);
!       Set_Uint11 (Id, V);
!    end Set_Component_Bit_Offset;
! 
!    procedure Set_Component_Clause (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Discriminant);
!       Set_Node13 (Id, V);
!    end Set_Component_Clause;
! 
!    procedure Set_Component_Size (Id : E; V : U) is
!    begin
!       pragma Assert (Is_Array_Type (Id) and then Is_Base_Type (Id));
!       Set_Uint22 (Id, V);
!    end Set_Component_Size;
! 
!    procedure Set_Component_Type (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Array_Type (Id) and then Is_Base_Type (Id));
!       Set_Node20 (Id, V);
!    end Set_Component_Type;
! 
!    procedure Set_Contains_Ignored_Ghost_Code (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Block
!                      | E_Function
!                      | E_Generic_Function
!                      | E_Generic_Package
!                      | E_Generic_Procedure
!                      | E_Package
!                      | E_Package_Body
!                      | E_Procedure
!                      | E_Subprogram_Body);
!       Set_Flag279 (Id, V);
!    end Set_Contains_Ignored_Ghost_Code;
! 
!    procedure Set_Contract (Id : E; V : N) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Protected_Type      --  concurrent types
!                      | E_Task_Body
!                      | E_Task_Type
!            or else
!          Ekind (Id) in E_Constant            --  objects
!                      | E_Variable
!            or else
!          Ekind (Id) in E_Entry               --  overloadable
!                      | E_Entry_Family
!                      | E_Function
!                      | E_Generic_Function
!                      | E_Generic_Procedure
!                      | E_Operator
!                      | E_Procedure
!                      | E_Subprogram_Body
!            or else
!          Ekind (Id) in E_Generic_Package     --  packages
!                      | E_Package
!                      | E_Package_Body
! 
!            or else
!          Is_Type (Id)                        -- types
! 
!            or else
!          Ekind (Id) = E_Void);               --  special purpose
!       Set_Node34 (Id, V);
!    end Set_Contract;
! 
!    procedure Set_Contract_Wrapper (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Entry (Id));
!       Set_Node25 (Id, V);
!    end Set_Contract_Wrapper;
! 
!    procedure Set_Corresponding_Concurrent_Type (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Ekind (Id) = E_Record_Type and then Is_Concurrent_Type (V));
!       Set_Node18 (Id, V);
!    end Set_Corresponding_Concurrent_Type;
! 
!    procedure Set_Corresponding_Discriminant (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Discriminant);
!       Set_Node19 (Id, V);
!    end Set_Corresponding_Discriminant;
! 
!    procedure Set_Corresponding_Equality (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Ekind (Id) = E_Function
!           and then not Comes_From_Source (Id)
!           and then Chars (Id) = Name_Op_Ne);
!       Set_Node30 (Id, V);
!    end Set_Corresponding_Equality;
! 
!    procedure Set_Corresponding_Function (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Procedure and then Rewritten_For_C (V));
!       Set_Node32 (Id, V);
!    end Set_Corresponding_Function;
! 
!    procedure Set_Corresponding_Procedure (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Function and then Rewritten_For_C (Id));
!       Set_Node32 (Id, V);
!    end Set_Corresponding_Procedure;
! 
!    procedure Set_Corresponding_Protected_Entry (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Void | E_Subprogram_Body);
!       Set_Node18 (Id, V);
!    end Set_Corresponding_Protected_Entry;
! 
!    procedure Set_Corresponding_Record_Component (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Discriminant);
!       Set_Node21 (Id, V);
!    end Set_Corresponding_Record_Component;
! 
!    procedure Set_Corresponding_Record_Type (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Concurrent_Type (Id));
!       Set_Node18 (Id, V);
!    end Set_Corresponding_Record_Type;
! 
!    procedure Set_Corresponding_Remote_Type (Id : E; V : E) is
!    begin
!       Set_Node22 (Id, V);
!    end Set_Corresponding_Remote_Type;
! 
!    procedure Set_Current_Use_Clause (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Package or else Is_Type (Id));
!       Set_Node27 (Id, V);
!    end Set_Current_Use_Clause;
! 
!    procedure Set_Current_Value (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) in Object_Kind or else Ekind (Id) = E_Void);
!       Set_Node9 (Id, V);
!    end Set_Current_Value;
! 
!    procedure Set_CR_Discriminant (Id : E; V : E) is
!    begin
!       Set_Node23 (Id, V);
!    end Set_CR_Discriminant;
! 
!    procedure Set_Debug_Info_Off (Id : E; V : B := True) is
!    begin
!       Set_Flag166 (Id, V);
!    end Set_Debug_Info_Off;
! 
!    procedure Set_Debug_Renaming_Link (Id : E; V : E) is
!    begin
!       Set_Node25 (Id, V);
!    end Set_Debug_Renaming_Link;
! 
!    procedure Set_Default_Aspect_Component_Value (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Array_Type (Id) and then Is_Base_Type (Id));
!       Set_Node19 (Id, V);
!    end Set_Default_Aspect_Component_Value;
! 
!    procedure Set_Default_Aspect_Value (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Scalar_Type (Id) and then Is_Base_Type (Id));
!       Set_Node19 (Id, V);
!    end Set_Default_Aspect_Value;
! 
!    procedure Set_Default_Expr_Function (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Formal (Id));
!       Set_Node21 (Id, V);
!    end Set_Default_Expr_Function;
! 
!    procedure Set_Default_Expressions_Processed (Id : E; V : B := True) is
!    begin
!       Set_Flag108 (Id, V);
!    end Set_Default_Expressions_Processed;
! 
!    procedure Set_Default_Value (Id : E; V : N) is
!    begin
!       pragma Assert (Is_Formal (Id));
!       Set_Node20 (Id, V);
!    end Set_Default_Value;
! 
!    procedure Set_Delay_Cleanups (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Subprogram (Id)
!            or else Is_Task_Type (Id)
!            or else Ekind (Id) = E_Block);
!       Set_Flag114 (Id, V);
!    end Set_Delay_Cleanups;
! 
!    procedure Set_Delay_Subprogram_Descriptors (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Subprogram (Id) or else Ekind (Id) in E_Package | E_Package_Body);
! 
!       Set_Flag50 (Id, V);
!    end Set_Delay_Subprogram_Descriptors;
! 
!    procedure Set_Delta_Value (Id : E; V : R) is
!    begin
!       pragma Assert (Is_Fixed_Point_Type (Id));
!       Set_Ureal18 (Id, V);
!    end Set_Delta_Value;
! 
!    procedure Set_Dependent_Instances (Id : E; V : L) is
!    begin
!       pragma Assert (Is_Generic_Instance (Id));
!       Set_Elist8 (Id, V);
!    end Set_Dependent_Instances;
! 
!    procedure Set_Depends_On_Private (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag14 (Id, V);
!    end Set_Depends_On_Private;
! 
!    procedure Set_Derived_Type_Link (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Type (Id) and then Is_Base_Type (Id));
!       Set_Node31 (Id, V);
!    end Set_Derived_Type_Link;
! 
!    procedure Set_Digits_Value (Id : E; V : U) is
!    begin
!       pragma Assert
!         (Is_Floating_Point_Type (Id)
!           or else Is_Decimal_Fixed_Point_Type (Id));
!       Set_Uint17 (Id, V);
!    end Set_Digits_Value;
! 
!    procedure Set_Directly_Designated_Type (Id : E; V : E) is
!    begin
!       Set_Node20 (Id, V);
!    end Set_Directly_Designated_Type;
! 
!    procedure Set_Disable_Controlled (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id) and then Is_Base_Type (Id));
!       Set_Flag253 (Id, V);
!    end Set_Disable_Controlled;
! 
!    procedure Set_Discard_Names (Id : E; V : B := True) is
!    begin
!       Set_Flag88 (Id, V);
!    end Set_Discard_Names;
! 
!    procedure Set_Discriminal (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Discriminant);
!       Set_Node17 (Id, V);
!    end Set_Discriminal;
! 
!    procedure Set_Discriminal_Link (Id : E; V : E) is
!    begin
!       Set_Node10 (Id, V);
!    end Set_Discriminal_Link;
! 
!    procedure Set_Discriminant_Checking_Func (Id  : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Component);
!       Set_Node20 (Id, V);
!    end Set_Discriminant_Checking_Func;
! 
!    procedure Set_Discriminant_Constraint (Id : E; V : L) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Elist21 (Id, V);
!    end Set_Discriminant_Constraint;
! 
!    procedure Set_Discriminant_Default_Value (Id : E; V : N) is
!    begin
!       Set_Node20 (Id, V);
!    end Set_Discriminant_Default_Value;
! 
!    procedure Set_Discriminant_Number (Id : E; V : U) is
!    begin
!       Set_Uint15 (Id, V);
!    end Set_Discriminant_Number;
! 
!    procedure Set_Dispatch_Table_Wrappers (Id : E; V : L) is
!    begin
!       pragma Assert (Ekind (Id) = E_Record_Type
!         and then Id = Implementation_Base_Type (Id));
!       pragma Assert (V = No_Elist or else Is_Tagged_Type (Id));
!       Set_Elist26 (Id, V);
!    end Set_Dispatch_Table_Wrappers;
! 
!    procedure Set_DT_Entry_Count (Id : E; V : U) is
!    begin
!       pragma Assert (Ekind (Id) = E_Component);
!       Set_Uint15 (Id, V);
!    end Set_DT_Entry_Count;
! 
!    procedure Set_DT_Offset_To_Top_Func (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Component and then Is_Tag (Id));
!       Set_Node25 (Id, V);
!    end Set_DT_Offset_To_Top_Func;
! 
!    procedure Set_DT_Position (Id : E; V : U) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       Set_Uint15 (Id, V);
!    end Set_DT_Position;
! 
!    procedure Set_DTC_Entity (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       Set_Node16 (Id, V);
!    end Set_DTC_Entity;
! 
!    procedure Set_Elaborate_Body_Desirable (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       Set_Flag210 (Id, V);
!    end Set_Elaborate_Body_Desirable;
! 
!    procedure Set_Elaboration_Entity (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Is_Subprogram (Id)
!            or else
!          Ekind (Id) in E_Entry | E_Entry_Family | E_Package
!            or else
!          Is_Generic_Unit (Id));
!       Set_Node13 (Id, V);
!    end Set_Elaboration_Entity;
! 
!    procedure Set_Elaboration_Entity_Required (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Subprogram (Id)
!            or else
!          Ekind (Id) in E_Entry | E_Entry_Family | E_Package
!            or else
!          Is_Generic_Unit (Id));
!       Set_Flag174 (Id, V);
!    end Set_Elaboration_Entity_Required;
! 
!    procedure Set_Encapsulating_State (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Abstract_State | E_Constant | E_Variable);
!       Set_Node32 (Id, V);
!    end Set_Encapsulating_State;
! 
!    procedure Set_Enclosing_Scope (Id : E; V : E) is
!    begin
!       Set_Node18 (Id, V);
!    end Set_Enclosing_Scope;
! 
!    procedure Set_Entry_Accepted (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Entry (Id));
!       Set_Flag152 (Id, V);
!    end Set_Entry_Accepted;
! 
!    procedure Set_Entry_Bodies_Array (Id : E; V : E) is
!    begin
!       Set_Node19 (Id, V);
!    end Set_Entry_Bodies_Array;
! 
!    procedure Set_Entry_Cancel_Parameter (Id : E; V : E) is
!    begin
!       Set_Node23 (Id, V);
!    end Set_Entry_Cancel_Parameter;
! 
!    procedure Set_Entry_Component (Id : E; V : E) is
!    begin
!       Set_Node11 (Id, V);
!    end Set_Entry_Component;
! 
!    procedure Set_Entry_Formal (Id : E; V : E) is
!    begin
!       Set_Node16 (Id, V);
!    end Set_Entry_Formal;
! 
!    procedure Set_Entry_Index_Constant (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Entry_Index_Parameter);
!       Set_Node18 (Id, V);
!    end Set_Entry_Index_Constant;
! 
!    procedure Set_Entry_Max_Queue_Lengths_Array (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Protected_Type);
!       Set_Node35 (Id, V);
!    end Set_Entry_Max_Queue_Lengths_Array;
! 
!    procedure Set_Entry_Parameters_Type (Id : E; V : E) is
!    begin
!       Set_Node15 (Id, V);
!    end Set_Entry_Parameters_Type;
! 
!    procedure Set_Enum_Pos_To_Rep (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Enumeration_Type);
!       Set_Node23 (Id, V);
!    end Set_Enum_Pos_To_Rep;
! 
!    procedure Set_Enumeration_Pos (Id : E; V : U) is
!    begin
!       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
!       Set_Uint11 (Id, V);
!    end Set_Enumeration_Pos;
! 
!    procedure Set_Enumeration_Rep (Id : E; V : U) is
!    begin
!       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
!       Set_Uint12 (Id, V);
!    end Set_Enumeration_Rep;
! 
!    procedure Set_Enumeration_Rep_Expr (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
!       Set_Node22 (Id, V);
!    end Set_Enumeration_Rep_Expr;
! 
!    procedure Set_Equivalent_Type (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Class_Wide_Type
!                      | E_Class_Wide_Subtype
!                      | E_Access_Protected_Subprogram_Type
!                      | E_Anonymous_Access_Protected_Subprogram_Type
!                      | E_Access_Subprogram_Type
!                      | E_Exception_Type);
!       Set_Node18 (Id, V);
!    end Set_Equivalent_Type;
! 
!    procedure Set_Esize (Id : E; V : U) is
!    begin
!       Set_Uint12 (Id, V);
!    end Set_Esize;
! 
!    procedure Set_Extra_Accessibility (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Is_Formal (Id) or else Ekind (Id) in E_Variable | E_Constant);
!       Set_Node13 (Id, V);
!    end Set_Extra_Accessibility;
! 
!    procedure Set_Extra_Accessibility_Of_Result (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Function | E_Operator | E_Subprogram_Type);
!       Set_Node19 (Id, V);
!    end Set_Extra_Accessibility_Of_Result;
! 
!    procedure Set_Extra_Constrained (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Formal (Id) or else Ekind (Id) = E_Variable);
!       Set_Node23 (Id, V);
!    end Set_Extra_Constrained;
! 
!    procedure Set_Extra_Formal (Id : E; V : E) is
!    begin
!       Set_Node15 (Id, V);
!    end Set_Extra_Formal;
! 
!    procedure Set_Extra_Formals (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Is_Overloadable (Id)
!            or else Ekind (Id) in E_Entry_Family
!                                | E_Subprogram_Body
!                                | E_Subprogram_Type);
!       Set_Node28 (Id, V);
!    end Set_Extra_Formals;
! 
!    procedure Set_Finalization_Master (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Access_Type (Id) and then Is_Base_Type (Id));
!       Set_Node23 (Id, V);
!    end Set_Finalization_Master;
! 
!    procedure Set_Finalize_Storage_Only (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id) and then Is_Base_Type (Id));
!       Set_Flag158 (Id, V);
!    end Set_Finalize_Storage_Only;
! 
!    procedure Set_Finalizer (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Package | E_Package_Body);
!       Set_Node28 (Id, V);
!    end Set_Finalizer;
! 
!    procedure Set_First_Entity (Id : E; V : E) is
!    begin
!       Set_Node17 (Id, V);
!    end Set_First_Entity;
! 
!    procedure Set_First_Exit_Statement (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) = E_Loop);
!       Set_Node8 (Id, V);
!    end Set_First_Exit_Statement;
! 
!    procedure Set_First_Index (Id : E; V : N) is
!    begin
!       pragma Assert (Is_Array_Type (Id));
!       Set_Node17 (Id, V);
!    end Set_First_Index;
! 
!    procedure Set_First_Literal (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Enumeration_Type (Id));
!       Set_Node17 (Id, V);
!    end Set_First_Literal;
! 
!    procedure Set_First_Private_Entity (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Package_Or_Generic_Package (Id)
!                        or else Is_Concurrent_Type (Id));
!       Set_Node16 (Id, V);
!    end Set_First_Private_Entity;
! 
!    procedure Set_First_Rep_Item (Id : E; V : N) is
!    begin
!       Set_Node6 (Id, V);
!    end Set_First_Rep_Item;
! 
!    procedure Set_Float_Rep (Id : E; V : F) is
!       pragma Assert (Ekind (Id) = E_Floating_Point_Type);
!    begin
!       Set_Uint10 (Id, UI_From_Int (F'Pos (V)));
!    end Set_Float_Rep;
! 
!    procedure Set_Freeze_Node (Id : E; V : N) is
!    begin
!       Set_Node7 (Id, V);
!    end Set_Freeze_Node;
! 
!    procedure Set_From_Limited_With (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Type (Id) or else Ekind (Id) in E_Abstract_State | E_Package);
!       Set_Flag159 (Id, V);
!    end Set_From_Limited_With;
! 
!    procedure Set_Full_View (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Type (Id) or else Ekind (Id) = E_Constant);
!       Set_Node11 (Id, V);
!    end Set_Full_View;
! 
!    procedure Set_Generic_Homonym (Id : E; V : E) is
!    begin
!       Set_Node11 (Id, V);
!    end Set_Generic_Homonym;
! 
!    procedure Set_Generic_Renamings (Id : E; V : L) is
!    begin
!       Set_Elist23 (Id, V);
!    end Set_Generic_Renamings;
! 
!    procedure Set_Handler_Records (Id : E; V : S) is
!    begin
!       Set_List10 (Id, V);
!    end Set_Handler_Records;
! 
!    procedure Set_Has_Aliased_Components (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag135 (Id, V);
!    end Set_Has_Aliased_Components;
! 
!    procedure Set_Has_Alignment_Clause (Id : E; V : B := True) is
!    begin
!       Set_Flag46 (Id, V);
!    end Set_Has_Alignment_Clause;
! 
!    procedure Set_Has_All_Calls_Remote (Id : E; V : B := True) is
!    begin
!       Set_Flag79 (Id, V);
!    end Set_Has_All_Calls_Remote;
! 
!    procedure Set_Has_Atomic_Components (Id : E; V : B := True) is
!    begin
!       pragma Assert (not Is_Type (Id) or else Is_Base_Type (Id));
!       Set_Flag86 (Id, V);
!    end Set_Has_Atomic_Components;
! 
!    procedure Set_Has_Biased_Representation (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         ((V = False) or else (Is_Discrete_Type (Id) or else Is_Object (Id)));
!       Set_Flag139 (Id, V);
!    end Set_Has_Biased_Representation;
! 
!    procedure Set_Has_Completion (Id : E; V : B := True) is
!    begin
!       Set_Flag26 (Id, V);
!    end Set_Has_Completion;
! 
!    procedure Set_Has_Completion_In_Body (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag71 (Id, V);
!    end Set_Has_Completion_In_Body;
! 
!    procedure Set_Has_Complex_Representation (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Record_Type (Id) and then Is_Base_Type (Id));
!       Set_Flag140 (Id, V);
!    end Set_Has_Complex_Representation;
! 
!    procedure Set_Has_Component_Size_Clause (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Array_Type);
!       Set_Flag68 (Id, V);
!    end Set_Has_Component_Size_Clause;
! 
!    procedure Set_Has_Constrained_Partial_View (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag187 (Id, V);
!    end Set_Has_Constrained_Partial_View;
! 
!    procedure Set_Has_Contiguous_Rep (Id : E; V : B := True) is
!    begin
!       Set_Flag181 (Id, V);
!    end Set_Has_Contiguous_Rep;
! 
!    procedure Set_Has_Controlled_Component (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag43 (Id, V);
!    end Set_Has_Controlled_Component;
! 
!    procedure Set_Has_Controlling_Result (Id : E; V : B := True) is
!    begin
!       Set_Flag98 (Id, V);
!    end Set_Has_Controlling_Result;
! 
!    procedure Set_Has_Convention_Pragma (Id : E; V : B := True) is
!    begin
!       Set_Flag119 (Id, V);
!    end Set_Has_Convention_Pragma;
! 
!    procedure Set_Has_Default_Aspect (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         ((Is_Scalar_Type (Id) or else Is_Array_Type (Id))
!            and then Is_Base_Type (Id));
!       Set_Flag39 (Id, V);
!    end Set_Has_Default_Aspect;
! 
!    procedure Set_Has_Delayed_Aspects (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag200 (Id, V);
!    end Set_Has_Delayed_Aspects;
! 
!    procedure Set_Has_Delayed_Freeze (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag18 (Id, V);
!    end Set_Has_Delayed_Freeze;
! 
!    procedure Set_Has_Delayed_Rep_Aspects (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag261 (Id, V);
!    end Set_Has_Delayed_Rep_Aspects;
! 
!    procedure Set_Has_Discriminants (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag5 (Id, V);
!    end Set_Has_Discriminants;
! 
!    procedure Set_Has_Dispatch_Table (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Record_Type
!         and then Is_Tagged_Type (Id));
!       Set_Flag220 (Id, V);
!    end Set_Has_Dispatch_Table;
! 
!    procedure Set_Has_Dynamic_Predicate_Aspect (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag258 (Id, V);
!    end Set_Has_Dynamic_Predicate_Aspect;
! 
!    procedure Set_Has_Enumeration_Rep_Clause (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Enumeration_Type (Id));
!       Set_Flag66 (Id, V);
!    end Set_Has_Enumeration_Rep_Clause;
! 
!    procedure Set_Has_Exit (Id : E; V : B := True) is
!    begin
!       Set_Flag47 (Id, V);
!    end Set_Has_Exit;
! 
!    procedure Set_Has_Expanded_Contract (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Entry | E_Entry_Family | E_Function | E_Procedure);
!       Set_Flag240 (Id, V);
!    end Set_Has_Expanded_Contract;
! 
!    procedure Set_Has_Forward_Instantiation (Id : E; V : B := True) is
!    begin
!       Set_Flag175 (Id, V);
!    end Set_Has_Forward_Instantiation;
! 
!    procedure Set_Has_Fully_Qualified_Name (Id : E; V : B := True) is
!    begin
!       Set_Flag173 (Id, V);
!    end Set_Has_Fully_Qualified_Name;
! 
!    procedure Set_Has_Gigi_Rep_Item (Id : E; V : B := True) is
!    begin
!       Set_Flag82 (Id, V);
!    end Set_Has_Gigi_Rep_Item;
! 
!    procedure Set_Has_Homonym (Id : E; V : B := True) is
!    begin
!       Set_Flag56 (Id, V);
!    end Set_Has_Homonym;
! 
!    procedure Set_Has_Implicit_Dereference (Id : E; V : B := True) is
!    begin
!       Set_Flag251 (Id, V);
!    end Set_Has_Implicit_Dereference;
! 
!    procedure Set_Has_Independent_Components (Id : E; V : B := True) is
!    begin
!       pragma Assert (not Is_Type (Id) or else Is_Base_Type (Id));
!       Set_Flag34 (Id, V);
!    end Set_Has_Independent_Components;
! 
!    procedure Set_Has_Inheritable_Invariants (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag248 (Base_Type (Id), V);
!    end Set_Has_Inheritable_Invariants;
! 
!    procedure Set_Has_Inherited_DIC (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag133 (Base_Type (Id), V);
!    end Set_Has_Inherited_DIC;
! 
!    procedure Set_Has_Inherited_Invariants (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag291 (Base_Type (Id), V);
!    end Set_Has_Inherited_Invariants;
! 
!    procedure Set_Has_Initial_Value (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Variable | E_Out_Parameter);
!       Set_Flag219 (Id, V);
!    end Set_Has_Initial_Value;
! 
!    procedure Set_Has_Loop_Entry_Attributes (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Loop);
!       Set_Flag260 (Id, V);
!    end Set_Has_Loop_Entry_Attributes;
! 
!    procedure Set_Has_Machine_Radix_Clause (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
!       Set_Flag83 (Id, V);
!    end Set_Has_Machine_Radix_Clause;
! 
!    procedure Set_Has_Master_Entity (Id : E; V : B := True) is
!    begin
!       Set_Flag21 (Id, V);
!    end Set_Has_Master_Entity;
! 
!    procedure Set_Has_Missing_Return (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Generic_Function);
!       Set_Flag142 (Id, V);
!    end Set_Has_Missing_Return;
! 
!    procedure Set_Has_Nested_Block_With_Handler (Id : E; V : B := True) is
!    begin
!       Set_Flag101 (Id, V);
!    end Set_Has_Nested_Block_With_Handler;
! 
!    procedure Set_Has_Nested_Subprogram (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       Set_Flag282 (Id, V);
!    end Set_Has_Nested_Subprogram;
! 
!    procedure Set_Has_Non_Standard_Rep (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag75 (Id, V);
!    end Set_Has_Non_Standard_Rep;
! 
!    procedure Set_Has_Object_Size_Clause (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag172 (Id, V);
!    end Set_Has_Object_Size_Clause;
! 
!    procedure Set_Has_Out_Or_In_Out_Parameter (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Entry (Id)
!           or else Is_Subprogram_Or_Generic_Subprogram (Id));
!       Set_Flag110 (Id, V);
!    end Set_Has_Out_Or_In_Out_Parameter;
! 
!    procedure Set_Has_Own_DIC (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag3 (Base_Type (Id), V);
!    end Set_Has_Own_DIC;
! 
!    procedure Set_Has_Own_Invariants (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag232 (Base_Type (Id), V);
!    end Set_Has_Own_Invariants;
! 
!    procedure Set_Has_Partial_Visible_Refinement (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Abstract_State);
!       Set_Flag296 (Id, V);
!    end Set_Has_Partial_Visible_Refinement;
! 
!    procedure Set_Has_Per_Object_Constraint (Id : E; V : B := True) is
!    begin
!       Set_Flag154 (Id, V);
!    end Set_Has_Per_Object_Constraint;
! 
!    procedure Set_Has_Pragma_Controlled (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       Set_Flag27 (Base_Type (Id), V);
!    end Set_Has_Pragma_Controlled;
! 
!    procedure Set_Has_Pragma_Elaborate_Body (Id : E; V : B := True) is
!    begin
!       Set_Flag150 (Id, V);
!    end Set_Has_Pragma_Elaborate_Body;
! 
!    procedure Set_Has_Pragma_Inline (Id : E; V : B := True) is
!    begin
!       Set_Flag157 (Id, V);
!    end Set_Has_Pragma_Inline;
! 
!    procedure Set_Has_Pragma_Inline_Always (Id : E; V : B := True) is
!    begin
!       Set_Flag230 (Id, V);
!    end Set_Has_Pragma_Inline_Always;
! 
!    procedure Set_Has_Pragma_No_Inline (Id : E; V : B := True) is
!    begin
!       Set_Flag201 (Id, V);
!    end Set_Has_Pragma_No_Inline;
! 
!    procedure Set_Has_Pragma_Ordered (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Enumeration_Type (Id));
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag198 (Id, V);
!    end Set_Has_Pragma_Ordered;
! 
!    procedure Set_Has_Pragma_Pack (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Array_Type (Id) or else Is_Record_Type (Id));
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag121 (Id, V);
!    end Set_Has_Pragma_Pack;
! 
!    procedure Set_Has_Pragma_Preelab_Init (Id : E; V : B := True) is
!    begin
!       Set_Flag221 (Id, V);
!    end Set_Has_Pragma_Preelab_Init;
! 
!    procedure Set_Has_Pragma_Pure (Id : E; V : B := True) is
!    begin
!       Set_Flag203 (Id, V);
!    end Set_Has_Pragma_Pure;
! 
!    procedure Set_Has_Pragma_Pure_Function (Id : E; V : B := True) is
!    begin
!       Set_Flag179 (Id, V);
!    end Set_Has_Pragma_Pure_Function;
! 
!    procedure Set_Has_Pragma_Thread_Local_Storage (Id : E; V : B := True) is
!    begin
!       Set_Flag169 (Id, V);
!    end Set_Has_Pragma_Thread_Local_Storage;
! 
!    procedure Set_Has_Pragma_Unmodified (Id : E; V : B := True) is
!    begin
!       Set_Flag233 (Id, V);
!    end Set_Has_Pragma_Unmodified;
! 
!    procedure Set_Has_Pragma_Unreferenced (Id : E; V : B := True) is
!    begin
!       Set_Flag180 (Id, V);
!    end Set_Has_Pragma_Unreferenced;
! 
!    procedure Set_Has_Pragma_Unreferenced_Objects (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag212 (Id, V);
!    end Set_Has_Pragma_Unreferenced_Objects;
! 
!    procedure Set_Has_Pragma_Unused (Id : E; V : B := True) is
!    begin
!       Set_Flag294 (Id, V);
!    end Set_Has_Pragma_Unused;
! 
!    procedure Set_Has_Predicates (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id) or else Ekind (Id) = E_Void);
!       Set_Flag250 (Id, V);
!    end Set_Has_Predicates;
! 
!    procedure Set_Has_Primitive_Operations (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag120 (Id, V);
!    end Set_Has_Primitive_Operations;
! 
!    procedure Set_Has_Private_Ancestor (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag151 (Id, V);
!    end Set_Has_Private_Ancestor;
! 
!    procedure Set_Has_Private_Declaration (Id : E; V : B := True) is
!    begin
!       Set_Flag155 (Id, V);
!    end Set_Has_Private_Declaration;
! 
!    procedure Set_Has_Private_Extension (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Tagged_Type (Id));
!       Set_Flag300 (Id, V);
!    end Set_Has_Private_Extension;
! 
!    procedure Set_Has_Protected (Id : E; V : B := True) is
!    begin
!       Set_Flag271 (Id, V);
!    end Set_Has_Protected;
! 
!    procedure Set_Has_Qualified_Name (Id : E; V : B := True) is
!    begin
!       Set_Flag161 (Id, V);
!    end Set_Has_Qualified_Name;
! 
!    procedure Set_Has_RACW (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       Set_Flag214 (Id, V);
!    end Set_Has_RACW;
! 
!    procedure Set_Has_Record_Rep_Clause (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag65 (Id, V);
!    end Set_Has_Record_Rep_Clause;
! 
!    procedure Set_Has_Recursive_Call (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       Set_Flag143 (Id, V);
!    end Set_Has_Recursive_Call;
! 
!    procedure Set_Has_Shift_Operator (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Integer_Type (Id) and then Is_Base_Type (Id));
!       Set_Flag267 (Id, V);
!    end Set_Has_Shift_Operator;
! 
!    procedure Set_Has_Size_Clause (Id : E; V : B := True) is
!    begin
!       Set_Flag29 (Id, V);
!    end Set_Has_Size_Clause;
! 
!    procedure Set_Has_Small_Clause (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Ordinary_Fixed_Point_Type (Id));
!       Set_Flag67 (Id, V);
!    end Set_Has_Small_Clause;
! 
!    procedure Set_Has_Specified_Layout (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag100 (Id, V);
!    end Set_Has_Specified_Layout;
! 
!    procedure Set_Has_Specified_Stream_Input (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag190 (Id, V);
!    end Set_Has_Specified_Stream_Input;
! 
!    procedure Set_Has_Specified_Stream_Output (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag191 (Id, V);
!    end Set_Has_Specified_Stream_Output;
! 
!    procedure Set_Has_Specified_Stream_Read (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag192 (Id, V);
!    end Set_Has_Specified_Stream_Read;
! 
!    procedure Set_Has_Specified_Stream_Write (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag193 (Id, V);
!    end Set_Has_Specified_Stream_Write;
! 
!    procedure Set_Has_Static_Discriminants (Id : E; V : B := True) is
!    begin
!       Set_Flag211 (Id, V);
!    end Set_Has_Static_Discriminants;
! 
!    procedure Set_Has_Static_Predicate (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag269 (Id, V);
!    end Set_Has_Static_Predicate;
! 
!    procedure Set_Has_Static_Predicate_Aspect (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag259 (Id, V);
!    end Set_Has_Static_Predicate_Aspect;
! 
!    procedure Set_Has_Storage_Size_Clause (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag23 (Id, V);
!    end Set_Has_Storage_Size_Clause;
! 
!    procedure Set_Has_Stream_Size_Clause (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Elementary_Type (Id));
!       Set_Flag184 (Id, V);
!    end Set_Has_Stream_Size_Clause;
! 
!    procedure Set_Has_Task (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag30 (Id, V);
!    end Set_Has_Task;
! 
!    procedure Set_Has_Thunks (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Tag (Id));
!       Set_Flag228 (Id, V);
!    end Set_Has_Thunks;
! 
!    procedure Set_Has_Timing_Event (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag289 (Id, V);
!    end Set_Has_Timing_Event;
! 
!    procedure Set_Has_Unchecked_Union (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag123 (Id, V);
!    end Set_Has_Unchecked_Union;
! 
!    procedure Set_Has_Unknown_Discriminants (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag72 (Id, V);
!    end Set_Has_Unknown_Discriminants;
! 
!    procedure Set_Has_Visible_Refinement (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Abstract_State);
!       Set_Flag263 (Id, V);
!    end Set_Has_Visible_Refinement;
! 
!    procedure Set_Has_Volatile_Components (Id : E; V : B := True) is
!    begin
!       pragma Assert (not Is_Type (Id) or else Is_Base_Type (Id));
!       Set_Flag87 (Id, V);
!    end Set_Has_Volatile_Components;
! 
!    procedure Set_Has_Xref_Entry (Id : E; V : B := True) is
!    begin
!       Set_Flag182 (Id, V);
!    end Set_Has_Xref_Entry;
! 
!    procedure Set_Has_Yield_Aspect (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Entry (Id) or else Is_Subprogram_Or_Generic_Subprogram (Id));
!       Set_Flag308 (Id, V);
!    end Set_Has_Yield_Aspect;
! 
!    procedure Set_Hiding_Loop_Variable (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       Set_Node8 (Id, V);
!    end Set_Hiding_Loop_Variable;
! 
!    procedure Set_Hidden_In_Formal_Instance (Id : E; V : L) is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       Set_Elist30 (Id, V);
!    end Set_Hidden_In_Formal_Instance;
! 
!    procedure Set_Homonym (Id : E; V : E) is
!    begin
!       pragma Assert (Id /= V);
!       Set_Node4 (Id, V);
!    end Set_Homonym;
! 
!    procedure Set_Incomplete_Actuals (Id : E; V : L) is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       Set_Elist24 (Id, V);
!    end Set_Incomplete_Actuals;
! 
!    procedure Set_Ignore_SPARK_Mode_Pragmas (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Protected_Body      --  concurrent types
!                      | E_Protected_Type
!                      | E_Task_Body
!                      | E_Task_Type
!           or else
!          Ekind (Id) in E_Entry               --  overloadable
!                      | E_Entry_Family
!                      | E_Function
!                      | E_Generic_Function
!                      | E_Generic_Procedure
!                      | E_Operator
!                      | E_Procedure
!                      | E_Subprogram_Body
!            or else
!          Ekind (Id) in E_Generic_Package     --  packages
!                      | E_Package
!                      | E_Package_Body);
!       Set_Flag301 (Id, V);
!    end Set_Ignore_SPARK_Mode_Pragmas;
! 
!    procedure Set_Import_Pragma (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       Set_Node35 (Id, V);
!    end Set_Import_Pragma;
! 
!    procedure Set_Interface_Alias (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Is_Internal (Id)
!            and then Is_Hidden (Id)
!            and then (Ekind (Id) in E_Procedure | E_Function));
!       Set_Node25 (Id, V);
!    end Set_Interface_Alias;
! 
!    procedure Set_Interfaces (Id : E; V : L) is
!    begin
!       pragma Assert (Is_Record_Type (Id));
!       Set_Elist25 (Id, V);
!    end Set_Interfaces;
! 
!    procedure Set_In_Package_Body (Id : E; V : B := True) is
!    begin
!       Set_Flag48 (Id, V);
!    end Set_In_Package_Body;
! 
!    procedure Set_In_Private_Part (Id : E; V : B := True) is
!    begin
!       Set_Flag45 (Id, V);
!    end Set_In_Private_Part;
! 
!    procedure Set_In_Use (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag8 (Id, V);
!    end Set_In_Use;
! 
!    procedure Set_Initialization_Statements (Id : E; V : N) is
!    begin
!       --  Tolerate an E_Void entity since this can be called while resolving
!       --  an aggregate used as the initialization expression for an object
!       --  declaration, and this occurs before the Ekind for the object is set.
! 
!       pragma Assert (Ekind (Id) in E_Void | E_Constant | E_Variable);
!       Set_Node28 (Id, V);
!    end Set_Initialization_Statements;
! 
!    procedure Set_Inner_Instances (Id : E; V : L) is
!    begin
!       Set_Elist23 (Id, V);
!    end Set_Inner_Instances;
! 
!    procedure Set_Interface_Name (Id : E; V : N) is
!    begin
!       Set_Node21 (Id, V);
!    end Set_Interface_Name;
! 
!    procedure Set_Is_Abstract_Subprogram (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Overloadable (Id));
!       Set_Flag19 (Id, V);
!    end Set_Is_Abstract_Subprogram;
! 
!    procedure Set_Is_Abstract_Type (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag146 (Id, V);
!    end Set_Is_Abstract_Type;
! 
!    procedure Set_Is_Local_Anonymous_Access (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       Set_Flag194 (Id, V);
!    end Set_Is_Local_Anonymous_Access;
! 
!    procedure Set_Is_Access_Constant (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       Set_Flag69 (Id, V);
!    end Set_Is_Access_Constant;
! 
!    procedure Set_Is_Activation_Record (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_In_Parameter);
!       Set_Flag305 (Id, V);
!    end Set_Is_Activation_Record;
! 
!    procedure Set_Is_Actual_Subtype (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag293 (Id, V);
!    end Set_Is_Actual_Subtype;
! 
!    procedure Set_Is_Ada_2005_Only (Id : E; V : B := True) is
!    begin
!       Set_Flag185 (Id, V);
!    end Set_Is_Ada_2005_Only;
! 
!    procedure Set_Is_Ada_2012_Only (Id : E; V : B := True) is
!    begin
!       Set_Flag199 (Id, V);
!    end Set_Is_Ada_2012_Only;
! 
!    procedure Set_Is_Aliased (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag15 (Id, V);
!    end Set_Is_Aliased;
! 
!    procedure Set_Is_Asynchronous (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Ekind (Id) = E_Procedure or else Is_Type (Id));
!       Set_Flag81 (Id, V);
!    end Set_Is_Asynchronous;
! 
!    procedure Set_Is_Atomic (Id : E; V : B := True) is
!    begin
!       Set_Flag85 (Id, V);
!    end Set_Is_Atomic;
! 
!    procedure Set_Is_Bit_Packed_Array (Id : E; V : B := True) is
!    begin
!       pragma Assert ((not V)
!         or else (Is_Array_Type (Id) and then Is_Base_Type (Id)));
!       Set_Flag122 (Id, V);
!    end Set_Is_Bit_Packed_Array;
! 
!    procedure Set_Is_Called (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Procedure | E_Function | E_Package);
!       Set_Flag102 (Id, V);
!    end Set_Is_Called;
! 
!    procedure Set_Is_Character_Type (Id : E; V : B := True) is
!    begin
!       Set_Flag63 (Id, V);
!    end Set_Is_Character_Type;
! 
!    procedure Set_Is_Checked_Ghost_Entity (Id : E; V : B := True) is
!    begin
!       --  Allow this attribute to appear on unanalyzed entities
! 
!       pragma Assert (Nkind (Id) in N_Entity
!         or else Ekind (Id) = E_Void);
!       Set_Flag277 (Id, V);
!    end Set_Is_Checked_Ghost_Entity;
! 
!    procedure Set_Is_Child_Unit (Id : E; V : B := True) is
!    begin
!       Set_Flag73 (Id, V);
!    end Set_Is_Child_Unit;
! 
!    procedure Set_Is_Class_Wide_Clone (Id : E; V : B := True) is
!    begin
!       Set_Flag290 (Id, V);
!    end Set_Is_Class_Wide_Clone;
! 
!    procedure Set_Is_Class_Wide_Equivalent_Type (Id : E; V : B := True) is
!    begin
!       Set_Flag35 (Id, V);
!    end Set_Is_Class_Wide_Equivalent_Type;
! 
!    procedure Set_Is_Compilation_Unit (Id : E; V : B := True) is
!    begin
!       Set_Flag149 (Id, V);
!    end Set_Is_Compilation_Unit;
! 
!    procedure Set_Is_Completely_Hidden (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Discriminant);
!       Set_Flag103 (Id, V);
!    end Set_Is_Completely_Hidden;
! 
!    procedure Set_Is_Concurrent_Record_Type (Id : E; V : B := True) is
!    begin
!       Set_Flag20 (Id, V);
!    end Set_Is_Concurrent_Record_Type;
! 
!    procedure Set_Is_Constr_Subt_For_U_Nominal (Id : E; V : B := True) is
!    begin
!       Set_Flag80 (Id, V);
!    end Set_Is_Constr_Subt_For_U_Nominal;
! 
!    procedure Set_Is_Constr_Subt_For_UN_Aliased (Id : E; V : B := True) is
!    begin
!       Set_Flag141 (Id, V);
!    end Set_Is_Constr_Subt_For_UN_Aliased;
! 
!    procedure Set_Is_Constrained (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag12 (Id, V);
!    end Set_Is_Constrained;
! 
!    procedure Set_Is_Constructor (Id : E; V : B := True) is
!    begin
!       Set_Flag76 (Id, V);
!    end Set_Is_Constructor;
! 
!    procedure Set_Is_Controlled_Active (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag42 (Id, V);
!    end Set_Is_Controlled_Active;
! 
!    procedure Set_Is_Controlling_Formal (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Formal (Id));
!       Set_Flag97 (Id, V);
!    end Set_Is_Controlling_Formal;
! 
!    procedure Set_Is_CPP_Class (Id : E; V : B := True) is
!    begin
!       Set_Flag74 (Id, V);
!    end Set_Is_CPP_Class;
! 
!    procedure Set_Is_CUDA_Kernel (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       Set_Flag118 (Id, V);
!    end Set_Is_CUDA_Kernel;
! 
!    procedure Set_Is_DIC_Procedure (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Procedure);
!       Set_Flag132 (Id, V);
!    end Set_Is_DIC_Procedure;
! 
!    procedure Set_Is_Descendant_Of_Address (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag223 (Id, V);
!    end Set_Is_Descendant_Of_Address;
! 
!    procedure Set_Is_Discrim_SO_Function (Id : E; V : B := True) is
!    begin
!       Set_Flag176 (Id, V);
!    end Set_Is_Discrim_SO_Function;
! 
!    procedure Set_Is_Discriminant_Check_Function (Id : E; V : B := True) is
!    begin
!       Set_Flag264 (Id, V);
!    end Set_Is_Discriminant_Check_Function;
! 
!    procedure Set_Is_Dispatch_Table_Entity (Id : E; V : B := True) is
!    begin
!       Set_Flag234 (Id, V);
!    end Set_Is_Dispatch_Table_Entity;
! 
!    procedure Set_Is_Dispatching_Operation (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (V = False
!            or else
!          Is_Overloadable (Id)
!            or else
!          Ekind (Id) = E_Subprogram_Type);
! 
!       Set_Flag6 (Id, V);
!    end Set_Is_Dispatching_Operation;
! 
!    procedure Set_Is_Elaboration_Checks_OK_Id (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Elaboration_Target (Id));
!       Set_Flag148 (Id, V);
!    end Set_Is_Elaboration_Checks_OK_Id;
! 
!    procedure Set_Is_Elaboration_Warnings_OK_Id (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Elaboration_Target (Id));
!       Set_Flag304 (Id, V);
!    end Set_Is_Elaboration_Warnings_OK_Id;
! 
!    procedure Set_Is_Eliminated (Id : E; V : B := True) is
!    begin
!       Set_Flag124 (Id, V);
!    end Set_Is_Eliminated;
! 
!    procedure Set_Is_Entry_Formal (Id : E; V : B := True) is
!    begin
!       Set_Flag52 (Id, V);
!    end Set_Is_Entry_Formal;
! 
!    procedure Set_Is_Entry_Wrapper (Id : E; V : B := True) is
!    begin
!       Set_Flag297 (Id, V);
!    end Set_Is_Entry_Wrapper;
! 
!    procedure Set_Is_Exception_Handler (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Block);
!       Set_Flag286 (Id, V);
!    end Set_Is_Exception_Handler;
! 
!    procedure Set_Is_Exported (Id : E; V : B := True) is
!    begin
!       Set_Flag99 (Id, V);
!    end Set_Is_Exported;
! 
!    procedure Set_Is_Finalized_Transient (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Loop_Parameter | E_Variable);
!       Set_Flag252 (Id, V);
!    end Set_Is_Finalized_Transient;
! 
!    procedure Set_Is_First_Subtype (Id : E; V : B := True) is
!    begin
!       Set_Flag70 (Id, V);
!    end Set_Is_First_Subtype;
! 
!    procedure Set_Is_Formal_Subprogram (Id : E; V : B := True) is
!    begin
!       Set_Flag111 (Id, V);
!    end Set_Is_Formal_Subprogram;
! 
!    procedure Set_Is_Frozen (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag4 (Id, V);
!    end Set_Is_Frozen;
! 
!    procedure Set_Is_Generic_Actual_Subprogram (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       Set_Flag274 (Id, V);
!    end Set_Is_Generic_Actual_Subprogram;
! 
!    procedure Set_Is_Generic_Actual_Type (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag94 (Id, V);
!    end Set_Is_Generic_Actual_Type;
! 
!    procedure Set_Is_Generic_Instance (Id : E; V : B := True) is
!    begin
!       Set_Flag130 (Id, V);
!    end Set_Is_Generic_Instance;
! 
!    procedure Set_Is_Generic_Type (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag13 (Id, V);
!    end Set_Is_Generic_Type;
! 
!    procedure Set_Is_Hidden (Id : E; V : B := True) is
!    begin
!       Set_Flag57 (Id, V);
!    end Set_Is_Hidden;
! 
!    procedure Set_Is_Hidden_Non_Overridden_Subpgm (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       Set_Flag2 (Id, V);
!    end Set_Is_Hidden_Non_Overridden_Subpgm;
! 
!    procedure Set_Is_Hidden_Open_Scope (Id : E; V : B := True) is
!    begin
!       Set_Flag171 (Id, V);
!    end Set_Is_Hidden_Open_Scope;
! 
!    procedure Set_Is_Ignored_Ghost_Entity (Id : E; V : B := True) is
!    begin
!       --  Allow this attribute to appear on unanalyzed entities
! 
!       pragma Assert (Nkind (Id) in N_Entity
!         or else Ekind (Id) = E_Void);
!       Set_Flag278 (Id, V);
!    end Set_Is_Ignored_Ghost_Entity;
! 
!    procedure Set_Is_Ignored_Transient (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Loop_Parameter | E_Variable);
!       Set_Flag295 (Id, V);
!    end Set_Is_Ignored_Transient;
! 
!    procedure Set_Is_Immediately_Visible (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag7 (Id, V);
!    end Set_Is_Immediately_Visible;
! 
!    procedure Set_Is_Implementation_Defined (Id : E; V : B := True) is
!    begin
!       Set_Flag254 (Id, V);
!    end Set_Is_Implementation_Defined;
! 
!    procedure Set_Is_Imported (Id : E; V : B := True) is
!    begin
!       Set_Flag24 (Id, V);
!    end Set_Is_Imported;
! 
!    procedure Set_Is_Independent (Id : E; V : B := True) is
!    begin
!       Set_Flag268 (Id, V);
!    end Set_Is_Independent;
! 
!    procedure Set_Is_Initial_Condition_Procedure (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       Set_Flag302 (Id, V);
!    end Set_Is_Initial_Condition_Procedure;
! 
!    procedure Set_Is_Inlined (Id : E; V : B := True) is
!    begin
!       Set_Flag11 (Id, V);
!    end Set_Is_Inlined;
! 
!    procedure Set_Is_Inlined_Always (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       Set_Flag1 (Id, V);
!    end Set_Is_Inlined_Always;
! 
!    procedure Set_Is_Interface (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Record_Type (Id));
!       Set_Flag186 (Id, V);
!    end Set_Is_Interface;
! 
!    procedure Set_Is_Instantiated (Id : E; V : B := True) is
!    begin
!       Set_Flag126 (Id, V);
!    end Set_Is_Instantiated;
! 
!    procedure Set_Is_Internal (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag17 (Id, V);
!    end Set_Is_Internal;
! 
!    procedure Set_Is_Interrupt_Handler (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag89 (Id, V);
!    end Set_Is_Interrupt_Handler;
! 
!    procedure Set_Is_Intrinsic_Subprogram (Id : E; V : B := True) is
!    begin
!       Set_Flag64 (Id, V);
!    end Set_Is_Intrinsic_Subprogram;
! 
!    procedure Set_Is_Invariant_Procedure (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Procedure);
!       Set_Flag257 (Id, V);
!    end Set_Is_Invariant_Procedure;
! 
!    procedure Set_Is_Itype (Id : E; V : B := True) is
!    begin
!       Set_Flag91 (Id, V);
!    end Set_Is_Itype;
! 
!    procedure Set_Is_Known_Non_Null (Id : E; V : B := True) is
!    begin
!       Set_Flag37 (Id, V);
!    end Set_Is_Known_Non_Null;
! 
!    procedure Set_Is_Known_Null (Id : E; V : B := True) is
!    begin
!       Set_Flag204 (Id, V);
!    end Set_Is_Known_Null;
! 
!    procedure Set_Is_Known_Valid (Id : E; V : B := True) is
!    begin
!       Set_Flag170 (Id, V);
!    end Set_Is_Known_Valid;
! 
!    procedure Set_Is_Limited_Composite (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag106 (Id, V);
!    end Set_Is_Limited_Composite;
! 
!    procedure Set_Is_Limited_Interface (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Interface (Id));
!       Set_Flag197 (Id, V);
!    end Set_Is_Limited_Interface;
! 
!    procedure Set_Is_Limited_Record (Id : E; V : B := True) is
!    begin
!       Set_Flag25 (Id, V);
!    end Set_Is_Limited_Record;
! 
!    procedure Set_Is_Loop_Parameter (Id : E; V : B := True) is
!    begin
!       Set_Flag307 (Id, V);
!    end Set_Is_Loop_Parameter;
! 
!    procedure Set_Is_Machine_Code_Subprogram (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       Set_Flag137 (Id, V);
!    end Set_Is_Machine_Code_Subprogram;
! 
!    procedure Set_Is_Non_Static_Subtype (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag109 (Id, V);
!    end Set_Is_Non_Static_Subtype;
! 
!    procedure Set_Is_Null_Init_Proc (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Procedure);
!       Set_Flag178 (Id, V);
!    end Set_Is_Null_Init_Proc;
! 
!    procedure Set_Is_Obsolescent (Id : E; V : B := True) is
!    begin
!       Set_Flag153 (Id, V);
!    end Set_Is_Obsolescent;
! 
!    procedure Set_Is_Only_Out_Parameter (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Out_Parameter);
!       Set_Flag226 (Id, V);
!    end Set_Is_Only_Out_Parameter;
! 
!    procedure Set_Is_Package_Body_Entity (Id : E; V : B := True) is
!    begin
!       Set_Flag160 (Id, V);
!    end Set_Is_Package_Body_Entity;
! 
!    procedure Set_Is_Packed (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag51 (Id, V);
!    end Set_Is_Packed;
! 
!    procedure Set_Is_Packed_Array_Impl_Type (Id : E; V : B := True) is
!    begin
!       Set_Flag138 (Id, V);
!    end Set_Is_Packed_Array_Impl_Type;
! 
!    procedure Set_Is_Param_Block_Component_Type (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Void | E_General_Access_Type);
!       Set_Flag215 (Id, V);
!    end Set_Is_Param_Block_Component_Type;
! 
!    procedure Set_Is_Partial_Invariant_Procedure (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Procedure);
!       Set_Flag292 (Id, V);
!    end Set_Is_Partial_Invariant_Procedure;
! 
!    procedure Set_Is_Potentially_Use_Visible (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag9 (Id, V);
!    end Set_Is_Potentially_Use_Visible;
! 
!    procedure Set_Is_Predicate_Function (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Function);
!       Set_Flag255 (Id, V);
!    end Set_Is_Predicate_Function;
! 
!    procedure Set_Is_Predicate_Function_M (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       Set_Flag256 (Id, V);
!    end Set_Is_Predicate_Function_M;
! 
!    procedure Set_Is_Preelaborated (Id : E; V : B := True) is
!    begin
!       Set_Flag59 (Id, V);
!    end Set_Is_Preelaborated;
! 
!    procedure Set_Is_Primitive (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Overloadable (Id) or else Is_Generic_Subprogram (Id));
!       Set_Flag218 (Id, V);
!    end Set_Is_Primitive;
! 
!    procedure Set_Is_Primitive_Wrapper (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       Set_Flag195 (Id, V);
!    end Set_Is_Primitive_Wrapper;
! 
!    procedure Set_Is_Private_Composite (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag107 (Id, V);
!    end Set_Is_Private_Composite;
! 
!    procedure Set_Is_Private_Descendant (Id : E; V : B := True) is
!    begin
!       Set_Flag53 (Id, V);
!    end Set_Is_Private_Descendant;
! 
!    procedure Set_Is_Private_Primitive (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       Set_Flag245 (Id, V);
!    end Set_Is_Private_Primitive;
! 
!    procedure Set_Is_Public (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag10 (Id, V);
!    end Set_Is_Public;
! 
!    procedure Set_Is_Pure (Id : E; V : B := True) is
!    begin
!       Set_Flag44 (Id, V);
!    end Set_Is_Pure;
! 
!    procedure Set_Is_Pure_Unit_Access_Type (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       Set_Flag189 (Id, V);
!    end Set_Is_Pure_Unit_Access_Type;
! 
!    procedure Set_Is_RACW_Stub_Type (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag244 (Id, V);
!    end Set_Is_RACW_Stub_Type;
! 
!    procedure Set_Is_Raised (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Exception);
!       Set_Flag224 (Id, V);
!    end Set_Is_Raised;
! 
!    procedure Set_Is_Remote_Call_Interface (Id : E; V : B := True) is
!    begin
!       Set_Flag62 (Id, V);
!    end Set_Is_Remote_Call_Interface;
! 
!    procedure Set_Is_Remote_Types (Id : E; V : B := True) is
!    begin
!       Set_Flag61 (Id, V);
!    end Set_Is_Remote_Types;
! 
!    procedure Set_Is_Renaming_Of_Object (Id : E; V : B := True) is
!    begin
!       Set_Flag112 (Id, V);
!    end Set_Is_Renaming_Of_Object;
! 
!    procedure Set_Is_Return_Object (Id : E; V : B := True) is
!    begin
!       Set_Flag209 (Id, V);
!    end Set_Is_Return_Object;
! 
!    procedure Set_Is_Safe_To_Reevaluate (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       Set_Flag249 (Id, V);
!    end Set_Is_Safe_To_Reevaluate;
! 
!    procedure Set_Is_Shared_Passive (Id : E; V : B := True) is
!    begin
!       Set_Flag60 (Id, V);
!    end Set_Is_Shared_Passive;
! 
!    procedure Set_Is_Static_Type (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag281 (Id, V);
!    end Set_Is_Static_Type;
! 
!    procedure Set_Is_Statically_Allocated (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Type (Id)
!            or else
!              Ekind (Id) in E_Exception | E_Variable | E_Constant | E_Void);
!       Set_Flag28 (Id, V);
!    end Set_Is_Statically_Allocated;
! 
!    procedure Set_Is_Tag (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Constant | E_Variable);
!       Set_Flag78 (Id, V);
!    end Set_Is_Tag;
! 
!    procedure Set_Is_Tagged_Type (Id : E; V : B := True) is
!    begin
!       Set_Flag55 (Id, V);
!    end Set_Is_Tagged_Type;
! 
!    procedure Set_Is_Thunk (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       Set_Flag225 (Id, V);
!    end Set_Is_Thunk;
! 
!    procedure Set_Is_Trivial_Subprogram (Id : E; V : B := True) is
!    begin
!       Set_Flag235 (Id, V);
!    end Set_Is_Trivial_Subprogram;
! 
!    procedure Set_Is_True_Constant (Id : E; V : B := True) is
!    begin
!       Set_Flag163 (Id, V);
!    end Set_Is_True_Constant;
! 
!    procedure Set_Is_Unchecked_Union (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag117 (Id, V);
!    end Set_Is_Unchecked_Union;
! 
!    procedure Set_Is_Underlying_Full_View (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag298 (Id, V);
!    end Set_Is_Underlying_Full_View;
! 
!    procedure Set_Is_Underlying_Record_View (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Record_Type);
!       Set_Flag246 (Id, V);
!    end Set_Is_Underlying_Record_View;
! 
!    procedure Set_Is_Unimplemented (Id : E; V : B := True) is
!    begin
!       Set_Flag284 (Id, V);
!    end Set_Is_Unimplemented;
! 
!    procedure Set_Is_Unsigned_Type (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Discrete_Or_Fixed_Point_Type (Id));
!       Set_Flag144 (Id, V);
!    end Set_Is_Unsigned_Type;
! 
!    procedure Set_Is_Uplevel_Referenced_Entity (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Constant | E_Loop_Parameter | E_Variable
!           or else Is_Formal (Id)
!           or else Is_Type (Id));
!       Set_Flag283 (Id, V);
!    end Set_Is_Uplevel_Referenced_Entity;
! 
!    procedure Set_Is_Valued_Procedure (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Procedure);
!       Set_Flag127 (Id, V);
!    end Set_Is_Valued_Procedure;
! 
!    procedure Set_Is_Visible_Formal (Id : E; V : B := True) is
!    begin
!       Set_Flag206 (Id, V);
!    end Set_Is_Visible_Formal;
! 
!    procedure Set_Is_Visible_Lib_Unit (Id : E; V : B := True) is
!    begin
!       Set_Flag116 (Id, V);
!    end Set_Is_Visible_Lib_Unit;
! 
!    procedure Set_Is_Volatile (Id : E; V : B := True) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Flag16 (Id, V);
!    end Set_Is_Volatile;
! 
!    procedure Set_Is_Volatile_Full_Access (Id : E; V : B := True) is
!    begin
!       Set_Flag285 (Id, V);
!    end Set_Is_Volatile_Full_Access;
! 
!    procedure Set_Itype_Printed (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Itype (Id));
!       Set_Flag202 (Id, V);
!    end Set_Itype_Printed;
! 
!    procedure Set_Kill_Elaboration_Checks (Id : E; V : B := True) is
!    begin
!       Set_Flag32 (Id, V);
!    end Set_Kill_Elaboration_Checks;
! 
!    procedure Set_Kill_Range_Checks (Id : E; V : B := True) is
!    begin
!       Set_Flag33 (Id, V);
!    end Set_Kill_Range_Checks;
! 
!    procedure Set_Known_To_Have_Preelab_Init (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag207 (Id, V);
!    end Set_Known_To_Have_Preelab_Init;
! 
!    procedure Set_Last_Aggregate_Assignment (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Variable);
!       Set_Node30 (Id, V);
!    end Set_Last_Aggregate_Assignment;
! 
!    procedure Set_Last_Assignment (Id : E; V : N) is
!    begin
!       pragma Assert (Is_Assignable (Id));
!       Set_Node26 (Id, V);
!    end Set_Last_Assignment;
! 
!    procedure Set_Last_Entity (Id : E; V : E) is
!    begin
!       Set_Node20 (Id, V);
!    end Set_Last_Entity;
! 
!    procedure Set_Limited_View (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Package
!         and then not Is_Generic_Instance (Id));
!       Set_Node23 (Id, V);
!    end Set_Limited_View;
! 
!    procedure Set_Linker_Section_Pragma (Id : E; V : N) is
!    begin
!       pragma Assert
!         (Is_Object (Id) or else Is_Subprogram (Id) or else Is_Type (Id));
!       Set_Node33 (Id, V);
!    end Set_Linker_Section_Pragma;
! 
!    procedure Set_Lit_Indexes (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Enumeration_Type (Id) and then Root_Type (Id) = Id);
!       Set_Node18 (Id, V);
!    end Set_Lit_Indexes;
! 
!    procedure Set_Lit_Strings (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Enumeration_Type (Id) and then Root_Type (Id) = Id);
!       Set_Node16 (Id, V);
!    end Set_Lit_Strings;
! 
!    procedure Set_Low_Bound_Tested (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Formal (Id));
!       Set_Flag205 (Id, V);
!    end Set_Low_Bound_Tested;
! 
!    procedure Set_Machine_Radix_10 (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
!       Set_Flag84 (Id, V);
!    end Set_Machine_Radix_10;
! 
!    procedure Set_Master_Id (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Access_Type (Id));
!       Set_Node17 (Id, V);
!    end Set_Master_Id;
! 
!    procedure Set_Materialize_Entity (Id : E; V : B := True) is
!    begin
!       Set_Flag168 (Id, V);
!    end Set_Materialize_Entity;
! 
!    procedure Set_May_Inherit_Delayed_Rep_Aspects (Id : E; V : B := True) is
!    begin
!       Set_Flag262 (Id, V);
!    end Set_May_Inherit_Delayed_Rep_Aspects;
! 
!    procedure Set_Mechanism (Id : E; V : M) is
!    begin
!       pragma Assert (Ekind (Id) = E_Function or else Is_Formal (Id));
!       Set_Uint8 (Id, UI_From_Int (V));
!    end Set_Mechanism;
! 
!    procedure Set_Minimum_Accessibility (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Formal (Id));
!       Set_Node24 (Id, V);
!    end Set_Minimum_Accessibility;
! 
!    procedure Set_Modulus (Id : E; V : U) is
!    begin
!       pragma Assert (Ekind (Id) = E_Modular_Integer_Type);
!       Set_Uint17 (Id, V);
!    end Set_Modulus;
! 
!    procedure Set_Must_Be_On_Byte_Boundary (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag183 (Id, V);
!    end Set_Must_Be_On_Byte_Boundary;
! 
!    procedure Set_Must_Have_Preelab_Init (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag208 (Id, V);
!    end Set_Must_Have_Preelab_Init;
! 
!    procedure Set_Needs_Activation_Record (Id : E; V : B := True) is
!    begin
!       Set_Flag306 (Id, V);
!    end Set_Needs_Activation_Record;
! 
!    procedure Set_Needs_Debug_Info (Id : E; V : B := True) is
!    begin
!       Set_Flag147 (Id, V);
!    end Set_Needs_Debug_Info;
! 
!    procedure Set_Needs_No_Actuals (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Overloadable (Id)
!            or else Ekind (Id) in E_Subprogram_Type | E_Entry_Family);
!       Set_Flag22 (Id, V);
!    end Set_Needs_No_Actuals;
! 
!    procedure Set_Never_Set_In_Source (Id : E; V : B := True) is
!    begin
!       Set_Flag115 (Id, V);
!    end Set_Never_Set_In_Source;
! 
!    procedure Set_Next_Inlined_Subprogram (Id : E; V : E) is
!    begin
!       Set_Node12 (Id, V);
!    end Set_Next_Inlined_Subprogram;
! 
!    procedure Set_No_Dynamic_Predicate_On_Actual (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Discrete_Type (Id));
!       Set_Flag276 (Id, V);
!    end Set_No_Dynamic_Predicate_On_Actual;
! 
!    procedure Set_No_Pool_Assigned (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Access_Type (Id) and then Is_Base_Type (Id));
!       Set_Flag131 (Id, V);
!    end Set_No_Pool_Assigned;
! 
!    procedure Set_No_Predicate_On_Actual (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Discrete_Type (Id));
!       Set_Flag275 (Id, V);
!    end Set_No_Predicate_On_Actual;
! 
!    procedure Set_No_Reordering (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Record_Type (Id) and then Is_Base_Type (Id));
!       Set_Flag239 (Id, V);
!    end Set_No_Reordering;
! 
!    procedure Set_No_Return (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Subprogram_Or_Generic_Subprogram (Id));
!       Set_Flag113 (Id, V);
!    end Set_No_Return;
! 
!    procedure Set_No_Strict_Aliasing (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Access_Type (Id) and then Is_Base_Type (Id));
!       Set_Flag136 (Id, V);
!    end Set_No_Strict_Aliasing;
! 
!    procedure Set_No_Tagged_Streams_Pragma (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Tagged_Type (Id));
!       Set_Node32 (Id, V);
!    end Set_No_Tagged_Streams_Pragma;
! 
!    procedure Set_Non_Binary_Modulus (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id) and then Is_Base_Type (Id));
!       Set_Flag58 (Id, V);
!    end Set_Non_Binary_Modulus;
! 
!    procedure Set_Non_Limited_View (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Ekind (Id) in Incomplete_Kind
!           or else Ekind (Id) in E_Abstract_State | E_Class_Wide_Type);
!       Set_Node19 (Id, V);
!    end Set_Non_Limited_View;
! 
!    procedure Set_Nonzero_Is_True (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Root_Type (Id) = Standard_Boolean
!           and then Ekind (Id) = E_Enumeration_Type);
!       Set_Flag162 (Id, V);
!    end Set_Nonzero_Is_True;
! 
!    procedure Set_Normalized_First_Bit (Id : E; V : U) is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Discriminant);
!       Set_Uint8 (Id, V);
!    end Set_Normalized_First_Bit;
! 
!    procedure Set_Normalized_Position (Id : E; V : U) is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Discriminant);
!       Set_Uint14 (Id, V);
!    end Set_Normalized_Position;
! 
!    procedure Set_Normalized_Position_Max (Id : E; V : U) is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Discriminant);
!       Set_Uint10 (Id, V);
!    end Set_Normalized_Position_Max;
! 
!    procedure Set_OK_To_Rename (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       Set_Flag247 (Id, V);
!    end Set_OK_To_Rename;
! 
!    procedure Set_Optimize_Alignment_Space (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Type (Id) or else Ekind (Id) in E_Constant | E_Variable);
!       Set_Flag241 (Id, V);
!    end Set_Optimize_Alignment_Space;
! 
!    procedure Set_Optimize_Alignment_Time (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Type (Id) or else Ekind (Id) in E_Constant | E_Variable);
!       Set_Flag242 (Id, V);
!    end Set_Optimize_Alignment_Time;
! 
!    procedure Set_Original_Access_Type (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Access_Subprogram_Type);
!       Set_Node28 (Id, V);
!    end Set_Original_Access_Type;
! 
!    procedure Set_Original_Array_Type (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Array_Type (Id) or else Is_Modular_Integer_Type (Id));
!       Set_Node21 (Id, V);
!    end Set_Original_Array_Type;
! 
!    procedure Set_Original_Protected_Subprogram (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       Set_Node41 (Id, V);
!    end Set_Original_Protected_Subprogram;
! 
!    procedure Set_Original_Record_Component (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Void | E_Component | E_Discriminant);
!       Set_Node22 (Id, V);
!    end Set_Original_Record_Component;
! 
!    procedure Set_Overlays_Constant (Id : E; V : B := True) is
!    begin
!       Set_Flag243 (Id, V);
!    end Set_Overlays_Constant;
! 
!    procedure Set_Overridden_Operation (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Subprogram_Or_Generic_Subprogram (Id));
!       Set_Node26 (Id, V);
!    end Set_Overridden_Operation;
! 
!    procedure Set_Package_Instantiation (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) in E_Void | E_Generic_Package | E_Package);
!       Set_Node26 (Id, V);
!    end Set_Package_Instantiation;
! 
!    procedure Set_Packed_Array_Impl_Type (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Array_Type (Id));
!       Set_Node23 (Id, V);
!    end Set_Packed_Array_Impl_Type;
! 
!    procedure Set_Parent_Subtype (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Record_Type);
!       Set_Node19 (Id, V);
!    end Set_Parent_Subtype;
! 
!    procedure Set_Part_Of_Constituents (Id : E; V : L) is
!    begin
!       pragma Assert (Ekind (Id) in E_Abstract_State | E_Variable);
!       Set_Elist10 (Id, V);
!    end Set_Part_Of_Constituents;
! 
!    procedure Set_Part_Of_References (Id : E; V : L) is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       Set_Elist11 (Id, V);
!    end Set_Part_Of_References;
! 
!    procedure Set_Partial_View_Has_Unknown_Discr (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag280 (Id, V);
!    end Set_Partial_View_Has_Unknown_Discr;
! 
!    procedure Set_Pending_Access_Types (Id : E; V : L) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Elist15 (Id, V);
!    end Set_Pending_Access_Types;
! 
!    procedure Set_Postconditions_Proc (Id : E; V : E) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Entry | E_Entry_Family | E_Function | E_Procedure);
!       Set_Node14 (Id, V);
!    end Set_Postconditions_Proc;
! 
!    procedure Set_Predicated_Parent (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Array_Subtype
!                                  | E_Record_Subtype
!                                  | E_Record_Subtype_With_Private);
!       Set_Node38 (Id, V);
!    end Set_Predicated_Parent;
! 
!    procedure Set_Predicates_Ignored (Id : E; V : B) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Flag288 (Id, V);
!    end Set_Predicates_Ignored;
! 
!    procedure Set_Direct_Primitive_Operations (Id : E; V : L) is
!    begin
!       pragma Assert (Is_Tagged_Type (Id));
!       Set_Elist10 (Id, V);
!    end Set_Direct_Primitive_Operations;
! 
!    procedure Set_Prival (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Protected_Component (Id));
!       Set_Node17 (Id, V);
!    end Set_Prival;
! 
!    procedure Set_Prival_Link (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Variable);
!       Set_Node20 (Id, V);
!    end Set_Prival_Link;
! 
!    procedure Set_Private_Dependents (Id : E; V : L) is
!    begin
!       pragma Assert (Is_Incomplete_Or_Private_Type (Id));
!       Set_Elist18 (Id, V);
!    end Set_Private_Dependents;
! 
!    procedure Set_Prev_Entity (Id : E; V : E) is
!    begin
!       Set_Node36 (Id, V);
!    end Set_Prev_Entity;
! 
!    procedure Set_Protected_Body_Subprogram (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Subprogram_Or_Entry (Id));
!       Set_Node11 (Id, V);
!    end Set_Protected_Body_Subprogram;
! 
!    procedure Set_Protected_Formal (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Formal (Id));
!       Set_Node22 (Id, V);
!    end Set_Protected_Formal;
! 
!    procedure Set_Protected_Subprogram (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure);
!       Set_Node39 (Id, V);
!    end Set_Protected_Subprogram;
! 
!    procedure Set_Protection_Object (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Entry
!                                  | E_Entry_Family
!                                  | E_Function
!                                  | E_Procedure);
!       Set_Node23 (Id, V);
!    end Set_Protection_Object;
! 
!    procedure Set_Reachable (Id : E; V : B := True) is
!    begin
!       Set_Flag49 (Id, V);
!    end Set_Reachable;
! 
!    procedure Set_Receiving_Entry (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Procedure);
!       Set_Node19 (Id, V);
!    end Set_Receiving_Entry;
! 
!    procedure Set_Referenced (Id : E; V : B := True) is
!    begin
!       Set_Flag156 (Id, V);
!    end Set_Referenced;
! 
!    procedure Set_Referenced_As_LHS (Id : E; V : B := True) is
!    begin
!       Set_Flag36 (Id, V);
!    end Set_Referenced_As_LHS;
! 
!    procedure Set_Referenced_As_Out_Parameter (Id : E; V : B := True) is
!    begin
!       Set_Flag227 (Id, V);
!    end Set_Referenced_As_Out_Parameter;
! 
!    procedure Set_Refinement_Constituents (Id : E; V : L) is
!    begin
!       pragma Assert (Ekind (Id) = E_Abstract_State);
!       Set_Elist8 (Id, V);
!    end Set_Refinement_Constituents;
! 
!    procedure Set_Register_Exception_Call (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) = E_Exception);
!       Set_Node20 (Id, V);
!    end Set_Register_Exception_Call;
! 
!    procedure Set_Related_Array_Object (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Array_Type (Id));
!       Set_Node25 (Id, V);
!    end Set_Related_Array_Object;
! 
!    procedure Set_Related_Expression (Id : E; V : N) is
!    begin
!       pragma Assert
!         (Ekind (Id) in
!            Type_Kind | E_Constant | E_Variable | E_Function | E_Void);
!       Set_Node24 (Id, V);
!    end Set_Related_Expression;
! 
!    procedure Set_Related_Instance (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Package | E_Package_Body);
!       Set_Node15 (Id, V);
!    end Set_Related_Instance;
! 
!    procedure Set_Related_Type (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Component | E_Constant | E_Variable);
!       Set_Node27 (Id, V);
!    end Set_Related_Type;
! 
!    procedure Set_Relative_Deadline_Variable (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Task_Type (Id) and then Is_Base_Type (Id));
!       Set_Node28 (Id, V);
!    end Set_Relative_Deadline_Variable;
! 
!    procedure Set_Renamed_Entity (Id : E; V : N) is
!    begin
!       Set_Node18 (Id, V);
!    end Set_Renamed_Entity;
! 
!    procedure Set_Renamed_In_Spec (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       Set_Flag231 (Id, V);
!    end Set_Renamed_In_Spec;
! 
!    procedure Set_Renamed_Object (Id : E; V : N) is
!    begin
!       Set_Node18 (Id, V);
!    end Set_Renamed_Object;
! 
!    procedure Set_Renaming_Map (Id : E; V : U) is
!    begin
!       Set_Uint9 (Id, V);
!    end Set_Renaming_Map;
! 
!    procedure Set_Requires_Overriding (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Overloadable (Id));
!       Set_Flag213 (Id, V);
!    end Set_Requires_Overriding;
! 
!    procedure Set_Return_Present (Id : E; V : B := True) is
!    begin
!       Set_Flag54 (Id, V);
!    end Set_Return_Present;
! 
!    procedure Set_Return_Applies_To (Id : E; V : N) is
!    begin
!       Set_Node8 (Id, V);
!    end Set_Return_Applies_To;
! 
!    procedure Set_Returns_By_Ref (Id : E; V : B := True) is
!    begin
!       Set_Flag90 (Id, V);
!    end Set_Returns_By_Ref;
! 
!    procedure Set_Reverse_Bit_Order (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Record_Type (Id) and then Is_Base_Type (Id));
!       Set_Flag164 (Id, V);
!    end Set_Reverse_Bit_Order;
! 
!    procedure Set_Reverse_Storage_Order (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Base_Type (Id)
!            and then (Is_Record_Type (Id) or else Is_Array_Type (Id)));
!       Set_Flag93 (Id, V);
!    end Set_Reverse_Storage_Order;
! 
!    procedure Set_Rewritten_For_C (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Function);
!       Set_Flag287 (Id, V);
!    end Set_Rewritten_For_C;
! 
!    procedure Set_RM_Size (Id : E; V : U) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Uint13 (Id, V);
!    end Set_RM_Size;
! 
!    procedure Set_Scalar_Range (Id : E; V : N) is
!    begin
!       Set_Node20 (Id, V);
!    end Set_Scalar_Range;
! 
!    procedure Set_Scale_Value (Id : E; V : U) is
!    begin
!       Set_Uint16 (Id, V);
!    end Set_Scale_Value;
! 
!    procedure Set_Scope_Depth_Value (Id : E; V : U) is
!    begin
!       pragma Assert
!         (Ekind (Id) in
!            Concurrent_Kind | Entry_Kind        | Generic_Unit_Kind |
!            E_Package       | E_Package_Body    | Subprogram_Kind   |
!            E_Block         | E_Subprogram_Body |
!            E_Private_Type .. E_Limited_Private_Subtype             |
!            E_Void          | E_Loop            | E_Return_Statement);
!       Set_Uint22 (Id, V);
!    end Set_Scope_Depth_Value;
! 
!    procedure Set_Sec_Stack_Needed_For_Return (Id : E; V : B := True) is
!    begin
!       Set_Flag167 (Id, V);
!    end Set_Sec_Stack_Needed_For_Return;
! 
!    procedure Set_Shared_Var_Procs_Instance (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       Set_Node22 (Id, V);
!    end Set_Shared_Var_Procs_Instance;
! 
!    procedure Set_Size_Check_Code (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant | E_Variable);
!       Set_Node19 (Id, V);
!    end Set_Size_Check_Code;
! 
!    procedure Set_Size_Depends_On_Discriminant (Id : E; V : B := True) is
!    begin
!       Set_Flag177 (Id, V);
!    end Set_Size_Depends_On_Discriminant;
! 
!    procedure Set_Size_Known_At_Compile_Time (Id : E; V : B := True) is
!    begin
!       Set_Flag92 (Id, V);
!    end Set_Size_Known_At_Compile_Time;
! 
!    procedure Set_Small_Value (Id : E; V : R) is
!    begin
!       pragma Assert (Is_Fixed_Point_Type (Id));
!       Set_Ureal21 (Id, V);
!    end Set_Small_Value;
! 
!    procedure Set_SPARK_Aux_Pragma (Id : E; V : N) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Protected_Type      --  concurrent types
!                      | E_Task_Type
!            or else
!          Ekind (Id) in E_Generic_Package     --  packages
!                      | E_Package
!                      | E_Package_Body);
!       Set_Node41 (Id, V);
!    end Set_SPARK_Aux_Pragma;
! 
!    procedure Set_SPARK_Aux_Pragma_Inherited (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Protected_Type      --  concurrent types
!                      | E_Task_Type
!            or else
!          Ekind (Id) in E_Generic_Package     --  packages
!                      | E_Package
!                      | E_Package_Body);
!       Set_Flag266 (Id, V);
!    end Set_SPARK_Aux_Pragma_Inherited;
! 
!    procedure Set_SPARK_Pragma (Id : E; V : N) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Constant            --  objects
!                      | E_Variable
!           or else
!          Ekind (Id) in E_Abstract_State      --  overloadable
!                      | E_Entry
!                      | E_Entry_Family
!                      | E_Function
!                      | E_Generic_Function
!                      | E_Generic_Procedure
!                      | E_Operator
!                      | E_Procedure
!                      | E_Subprogram_Body
!            or else
!          Ekind (Id) in E_Generic_Package     --  packages
!                      | E_Package
!                      | E_Package_Body
!            or else
!          Ekind (Id) = E_Void                 --  special purpose
!            or else
!          Ekind (Id) in E_Protected_Body      --  types
!                      | E_Task_Body
!            or else
!          Is_Type (Id));
!       Set_Node40 (Id, V);
!    end Set_SPARK_Pragma;
! 
!    procedure Set_SPARK_Pragma_Inherited (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Ekind (Id) in E_Constant            --  objects
!                      | E_Variable
!           or else
!          Ekind (Id) in E_Abstract_State      --  overloadable
!                      | E_Entry
!                      | E_Entry_Family
!                      | E_Function
!                      | E_Generic_Function
!                      | E_Generic_Procedure
!                      | E_Operator
!                      | E_Procedure
!                      | E_Subprogram_Body
!            or else
!          Ekind (Id) in E_Generic_Package     --  packages
!                      | E_Package
!                      | E_Package_Body
!            or else
!          Ekind (Id) = E_Void                 --  special purpose
!            or else
!          Ekind (Id) in E_Protected_Body      --  types
!                      | E_Task_Body
!            or else
!          Is_Type (Id));
!       Set_Flag265 (Id, V);
!    end Set_SPARK_Pragma_Inherited;
! 
!    procedure Set_Spec_Entity (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Package_Body or else Is_Formal (Id));
!       Set_Node19 (Id, V);
!    end Set_Spec_Entity;
! 
!    procedure Set_SSO_Set_High_By_Default (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Base_Type (Id)
!          and then (Is_Record_Type (Id) or else Is_Array_Type (Id)));
!       Set_Flag273 (Id, V);
!    end Set_SSO_Set_High_By_Default;
! 
!    procedure Set_SSO_Set_Low_By_Default (Id : E; V : B := True) is
!    begin
!       pragma Assert
!         (Is_Base_Type (Id)
!          and then (Is_Record_Type (Id) or else Is_Array_Type (Id)));
!       Set_Flag272 (Id, V);
!    end Set_SSO_Set_Low_By_Default;
! 
!    procedure Set_Static_Discrete_Predicate (Id : E; V : S) is
!    begin
!       pragma Assert (Is_Discrete_Type (Id) and then Has_Predicates (Id));
!       Set_List25 (Id, V);
!    end Set_Static_Discrete_Predicate;
! 
!    procedure Set_Static_Real_Or_String_Predicate (Id : E; V : N) is
!    begin
!       pragma Assert ((Is_Real_Type (Id) or else Is_String_Type (Id))
!                       and then Has_Predicates (Id));
!       Set_Node25 (Id, V);
!    end Set_Static_Real_Or_String_Predicate;
! 
!    procedure Set_Status_Flag_Or_Transient_Decl (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Constant
!                                  | E_Loop_Parameter
!                                  | E_Variable);
!       Set_Node15 (Id, V);
!    end Set_Status_Flag_Or_Transient_Decl;
! 
!    procedure Set_Storage_Size_Variable (Id : E; V : E) is
!    begin
!       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
!       pragma Assert (Id = Base_Type (Id));
!       Set_Node26 (Id, V);
!    end Set_Storage_Size_Variable;
! 
!    procedure Set_Static_Elaboration_Desired (Id : E; V : B) is
!    begin
!       pragma Assert (Ekind (Id) = E_Package);
!       Set_Flag77 (Id, V);
!    end Set_Static_Elaboration_Desired;
! 
!    procedure Set_Static_Initialization (Id : E; V : N) is
!    begin
!       pragma Assert
!         (Ekind (Id) = E_Procedure and then not Is_Dispatching_Operation (Id));
!       Set_Node30 (Id, V);
!    end Set_Static_Initialization;
! 
!    procedure Set_Stored_Constraint (Id : E; V : L) is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       Set_Elist23 (Id, V);
!    end Set_Stored_Constraint;
! 
!    procedure Set_Stores_Attribute_Old_Prefix (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id)
!                       or else (Ekind (Id) in E_Constant
!                                            | E_Variable));
!       Set_Flag270 (Id, V);
!    end Set_Stores_Attribute_Old_Prefix;
! 
!    procedure Set_Strict_Alignment (Id : E; V : B := True) is
!    begin
!       pragma Assert (Id = Base_Type (Id));
!       Set_Flag145 (Id, V);
!    end Set_Strict_Alignment;
! 
!    procedure Set_String_Literal_Length (Id : E; V : U) is
!    begin
!       pragma Assert (Ekind (Id) = E_String_Literal_Subtype);
!       Set_Uint16 (Id, V);
!    end Set_String_Literal_Length;
! 
!    procedure Set_String_Literal_Low_Bound (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) = E_String_Literal_Subtype);
!       Set_Node18 (Id, V);
!    end Set_String_Literal_Low_Bound;
! 
!    procedure Set_Subprograms_For_Type (Id : E; V : L) is
!    begin
!       pragma Assert (Is_Type (Id));
!       Set_Elist29 (Id, V);
!    end Set_Subprograms_For_Type;
! 
!    procedure Set_Subps_Index (Id : E; V : U) is
!    begin
!       pragma Assert (Is_Subprogram (Id));
!       Set_Uint24 (Id, V);
!    end Set_Subps_Index;
! 
!    procedure Set_Suppress_Elaboration_Warnings (Id : E; V : B := True) is
!    begin
!       Set_Flag303 (Id, V);
!    end Set_Suppress_Elaboration_Warnings;
! 
!    procedure Set_Suppress_Initialization (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id) or else Ekind (Id) = E_Variable);
!       Set_Flag105 (Id, V);
!    end Set_Suppress_Initialization;
! 
!    procedure Set_Suppress_Style_Checks (Id : E; V : B := True) is
!    begin
!       Set_Flag165 (Id, V);
!    end Set_Suppress_Style_Checks;
! 
!    procedure Set_Suppress_Value_Tracking_On_Call (Id : E; V : B := True) is
!    begin
!       Set_Flag217 (Id, V);
!    end Set_Suppress_Value_Tracking_On_Call;
! 
!    procedure Set_Task_Body_Procedure (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) in Task_Kind);
!       Set_Node25 (Id, V);
!    end Set_Task_Body_Procedure;
! 
!    procedure Set_Thunk_Entity (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure
!                        and then Is_Thunk (Id));
!       Set_Node31 (Id, V);
!    end Set_Thunk_Entity;
! 
!    procedure Set_Treat_As_Volatile (Id : E; V : B := True) is
!    begin
!       Set_Flag41 (Id, V);
!    end Set_Treat_As_Volatile;
! 
!    procedure Set_Underlying_Full_View (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in Private_Kind);
!       Set_Node19 (Id, V);
!    end Set_Underlying_Full_View;
! 
!    procedure Set_Underlying_Record_View (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) = E_Record_Type);
!       Set_Node28 (Id, V);
!    end Set_Underlying_Record_View;
! 
!    procedure Set_Universal_Aliasing (Id : E; V : B := True) is
!    begin
!       pragma Assert (Is_Type (Id) and then Is_Base_Type (Id));
!       Set_Flag216 (Id, V);
!    end Set_Universal_Aliasing;
! 
!    procedure Set_Unset_Reference (Id : E; V : N) is
!    begin
!       Set_Node16 (Id, V);
!    end Set_Unset_Reference;
! 
!    procedure Set_Used_As_Generic_Actual (Id : E; V : B := True) is
!    begin
!       Set_Flag222 (Id, V);
!    end Set_Used_As_Generic_Actual;
! 
!    procedure Set_Uses_Lock_Free (Id : E; V : B := True) is
!    begin
!       pragma Assert (Ekind (Id) = E_Protected_Type);
!       Set_Flag188 (Id, V);
!    end Set_Uses_Lock_Free;
! 
!    procedure Set_Uses_Sec_Stack (Id : E; V : B := True) is
!    begin
!       Set_Flag95 (Id, V);
!    end Set_Uses_Sec_Stack;
! 
!    procedure Set_Validated_Object (Id : E; V : N) is
!    begin
!       pragma Assert (Ekind (Id) = E_Variable);
!       Set_Node38 (Id, V);
!    end Set_Validated_Object;
! 
!    procedure Set_Warnings_Off (Id : E; V : B := True) is
!    begin
!       Set_Flag96 (Id, V);
!    end Set_Warnings_Off;
! 
!    procedure Set_Warnings_Off_Used (Id : E; V : B := True) is
!    begin
!       Set_Flag236 (Id, V);
!    end Set_Warnings_Off_Used;
! 
!    procedure Set_Warnings_Off_Used_Unmodified (Id : E; V : B := True) is
!    begin
!       Set_Flag237 (Id, V);
!    end Set_Warnings_Off_Used_Unmodified;
! 
!    procedure Set_Warnings_Off_Used_Unreferenced (Id : E; V : B := True) is
!    begin
!       Set_Flag238 (Id, V);
!    end Set_Warnings_Off_Used_Unreferenced;
! 
!    procedure Set_Was_Hidden (Id : E; V : B := True) is
!    begin
!       Set_Flag196 (Id, V);
!    end Set_Was_Hidden;
! 
!    procedure Set_Wrapped_Entity (Id : E; V : E) is
!    begin
!       pragma Assert (Ekind (Id) in E_Function | E_Procedure
!                        and then Is_Primitive_Wrapper (Id));
!       Set_Node27 (Id, V);
!    end Set_Wrapped_Entity;
! 
!    -----------------------------------
!    -- Field Initialization Routines --
!    -----------------------------------
! 
!    procedure Init_Alignment (Id : E) is
!    begin
!       Set_Uint14 (Id, Uint_0);
!    end Init_Alignment;
! 
!    procedure Init_Alignment (Id : E; V : Int) is
!    begin
!       Set_Uint14 (Id, UI_From_Int (V));
!    end Init_Alignment;
! 
!    procedure Init_Component_Bit_Offset (Id : E) is
!    begin
!       Set_Uint11 (Id, No_Uint);
!    end Init_Component_Bit_Offset;
! 
!    procedure Init_Component_Bit_Offset (Id : E; V : Int) is
!    begin
!       Set_Uint11 (Id, UI_From_Int (V));
!    end Init_Component_Bit_Offset;
! 
!    procedure Init_Component_Size (Id : E) is
!    begin
!       Set_Uint22 (Id, Uint_0);
!    end Init_Component_Size;
! 
!    procedure Init_Component_Size (Id : E; V : Int) is
!    begin
!       Set_Uint22 (Id, UI_From_Int (V));
!    end Init_Component_Size;
! 
!    procedure Init_Digits_Value (Id : E) is
!    begin
!       Set_Uint17 (Id, Uint_0);
!    end Init_Digits_Value;
! 
!    procedure Init_Digits_Value (Id : E; V : Int) is
!    begin
!       Set_Uint17 (Id, UI_From_Int (V));
!    end Init_Digits_Value;
! 
!    procedure Init_Esize (Id : E) is
!    begin
!       Set_Uint12 (Id, Uint_0);
!    end Init_Esize;
! 
!    procedure Init_Esize (Id : E; V : Int) is
!    begin
!       Set_Uint12 (Id, UI_From_Int (V));
!    end Init_Esize;
! 
!    procedure Init_Normalized_First_Bit (Id : E) is
!    begin
!       Set_Uint8 (Id, No_Uint);
!    end Init_Normalized_First_Bit;
! 
!    procedure Init_Normalized_First_Bit (Id : E; V : Int) is
!    begin
!       Set_Uint8 (Id, UI_From_Int (V));
!    end Init_Normalized_First_Bit;
! 
!    procedure Init_Normalized_Position (Id : E) is
!    begin
!       Set_Uint14 (Id, No_Uint);
!    end Init_Normalized_Position;
! 
!    procedure Init_Normalized_Position (Id : E; V : Int) is
!    begin
!       Set_Uint14 (Id, UI_From_Int (V));
!    end Init_Normalized_Position;
! 
!    procedure Init_Normalized_Position_Max (Id : E) is
!    begin
!       Set_Uint10 (Id, No_Uint);
!    end Init_Normalized_Position_Max;
! 
!    procedure Init_Normalized_Position_Max (Id : E; V : Int) is
!    begin
!       Set_Uint10 (Id, UI_From_Int (V));
!    end Init_Normalized_Position_Max;
! 
!    procedure Init_RM_Size (Id : E) is
!    begin
!       Set_Uint13 (Id, Uint_0);
!    end Init_RM_Size;
! 
!    procedure Init_RM_Size (Id : E; V : Int) is
!    begin
!       Set_Uint13 (Id, UI_From_Int (V));
!    end Init_RM_Size;
! 
!    -----------------------------
!    -- Init_Component_Location --
!    -----------------------------
! 
!    procedure Init_Component_Location (Id : E) is
!    begin
!       Set_Uint8  (Id, No_Uint);  -- Normalized_First_Bit
!       Set_Uint10 (Id, No_Uint);  -- Normalized_Position_Max
!       Set_Uint11 (Id, No_Uint);  -- Component_Bit_Offset
!       Set_Uint12 (Id, Uint_0);   -- Esize
!       Set_Uint14 (Id, No_Uint);  -- Normalized_Position
!    end Init_Component_Location;
! 
!    ----------------------------
!    -- Init_Object_Size_Align --
!    ----------------------------
! 
!    procedure Init_Object_Size_Align (Id : E) is
!    begin
!       Set_Uint12 (Id, Uint_0);  -- Esize
!       Set_Uint14 (Id, Uint_0);  -- Alignment
!    end Init_Object_Size_Align;
! 
!    ---------------
!    -- Init_Size --
!    ---------------
! 
!    procedure Init_Size (Id : E; V : Int) is
!    begin
!       pragma Assert (not Is_Object (Id));
!       Set_Uint12 (Id, UI_From_Int (V));  -- Esize
!       Set_Uint13 (Id, UI_From_Int (V));  -- RM_Size
!    end Init_Size;
! 
!    ---------------------
!    -- Init_Size_Align --
!    ---------------------
! 
!    procedure Init_Size_Align (Id : E) is
!    begin
!       pragma Assert (not Is_Object (Id));
!       Set_Uint12 (Id, Uint_0);  -- Esize
!       Set_Uint13 (Id, Uint_0);  -- RM_Size
!       Set_Uint14 (Id, Uint_0);  -- Alignment
!    end Init_Size_Align;
! 
!    ----------------------------------------------
!    -- Type Representation Attribute Predicates --
!    ----------------------------------------------
! 
!    function Known_Alignment                       (E : Entity_Id) return B is
!    begin
!       return Uint14 (E) /= Uint_0
!         and then Uint14 (E) /= No_Uint;
!    end Known_Alignment;
! 
!    function Known_Component_Bit_Offset            (E : Entity_Id) return B is
!    begin
!       return Uint11 (E) /= No_Uint;
!    end Known_Component_Bit_Offset;
! 
!    function Known_Component_Size                  (E : Entity_Id) return B is
!    begin
!       return Uint22 (Base_Type (E)) /= Uint_0
!         and then Uint22 (Base_Type (E)) /= No_Uint;
!    end Known_Component_Size;
! 
!    function Known_Esize                           (E : Entity_Id) return B is
!    begin
!       return Uint12 (E) /= Uint_0
!         and then Uint12 (E) /= No_Uint;
!    end Known_Esize;
! 
!    function Known_Normalized_First_Bit            (E : Entity_Id) return B is
!    begin
!       return Uint8 (E) /= No_Uint;
!    end Known_Normalized_First_Bit;
! 
!    function Known_Normalized_Position             (E : Entity_Id) return B is
!    begin
!       return Uint14 (E) /= No_Uint;
!    end Known_Normalized_Position;
! 
!    function Known_Normalized_Position_Max         (E : Entity_Id) return B is
!    begin
!       return Uint10 (E) /= No_Uint;
!    end Known_Normalized_Position_Max;
! 
!    function Known_RM_Size                         (E : Entity_Id) return B is
!    begin
!       return Uint13 (E) /= No_Uint
!         and then (Uint13 (E) /= Uint_0
!                     or else Is_Discrete_Type (E)
!                     or else Is_Fixed_Point_Type (E));
!    end Known_RM_Size;
! 
!    function Known_Static_Component_Bit_Offset     (E : Entity_Id) return B is
!    begin
!       return Uint11 (E) /= No_Uint
!         and then Uint11 (E) >= Uint_0;
!    end Known_Static_Component_Bit_Offset;
! 
!    function Known_Static_Component_Size           (E : Entity_Id) return B is
!    begin
!       return Uint22 (Base_Type (E)) > Uint_0;
!    end Known_Static_Component_Size;
! 
!    function Known_Static_Esize                    (E : Entity_Id) return B is
!    begin
!       return Uint12 (E) > Uint_0
!         and then not Is_Generic_Type (E);
!    end Known_Static_Esize;
! 
!    function Known_Static_Normalized_First_Bit     (E : Entity_Id) return B is
!    begin
!       return Uint8 (E) /= No_Uint
!         and then Uint8 (E) >= Uint_0;
!    end Known_Static_Normalized_First_Bit;
! 
!    function Known_Static_Normalized_Position      (E : Entity_Id) return B is
!    begin
!       return Uint14 (E) /= No_Uint
!         and then Uint14 (E) >= Uint_0;
!    end Known_Static_Normalized_Position;
! 
!    function Known_Static_Normalized_Position_Max  (E : Entity_Id) return B is
!    begin
!       return Uint10 (E) /= No_Uint
!         and then Uint10 (E) >= Uint_0;
!    end Known_Static_Normalized_Position_Max;
! 
!    function Known_Static_RM_Size                  (E : Entity_Id) return B is
!    begin
!       return (Uint13 (E) > Uint_0
!                 or else Is_Discrete_Type (E)
!                 or else Is_Fixed_Point_Type (E))
!         and then not Is_Generic_Type (E);
!    end Known_Static_RM_Size;
! 
!    function Unknown_Alignment                     (E : Entity_Id) return B is
!    begin
!       return Uint14 (E) = Uint_0
!         or else Uint14 (E) = No_Uint;
!    end Unknown_Alignment;
! 
!    function Unknown_Component_Bit_Offset          (E : Entity_Id) return B is
!    begin
!       return Uint11 (E) = No_Uint;
!    end Unknown_Component_Bit_Offset;
! 
!    function Unknown_Component_Size                (E : Entity_Id) return B is
!    begin
!       return Uint22 (Base_Type (E)) = Uint_0
!                or else
!              Uint22 (Base_Type (E)) = No_Uint;
!    end Unknown_Component_Size;
! 
!    function Unknown_Esize                         (E : Entity_Id) return B is
!    begin
!       return Uint12 (E) = No_Uint
!                or else
!              Uint12 (E) = Uint_0;
!    end Unknown_Esize;
! 
!    function Unknown_Normalized_First_Bit          (E : Entity_Id) return B is
!    begin
!       return Uint8 (E) = No_Uint;
!    end Unknown_Normalized_First_Bit;
! 
!    function Unknown_Normalized_Position           (E : Entity_Id) return B is
!    begin
!       return Uint14 (E) = No_Uint;
!    end Unknown_Normalized_Position;
! 
!    function Unknown_Normalized_Position_Max       (E : Entity_Id) return B is
!    begin
!       return Uint10 (E) = No_Uint;
!    end Unknown_Normalized_Position_Max;
! 
!    function Unknown_RM_Size                       (E : Entity_Id) return B is
!    begin
!       return (Uint13 (E) = Uint_0
!                 and then not Is_Discrete_Type (E)
!                 and then not Is_Fixed_Point_Type (E))
!         or else Uint13 (E) = No_Uint;
!    end Unknown_RM_Size;
! 
!    --------------------
!    -- Address_Clause --
!    --------------------
! 
!    function Address_Clause (Id : E) return N is
!    begin
!       return Get_Attribute_Definition_Clause (Id, Attribute_Address);
!    end Address_Clause;
! 
!    ---------------
!    -- Aft_Value --
!    ---------------
! 
!    function Aft_Value (Id : E) return U is
!       Result    : Nat := 1;
!       Delta_Val : Ureal := Delta_Value (Id);
!    begin
!       while Delta_Val < Ureal_Tenth loop
!          Delta_Val := Delta_Val * Ureal_10;
!          Result := Result + 1;
!       end loop;
! 
!       return UI_From_Int (Result);
!    end Aft_Value;
! 
!    ----------------------
!    -- Alignment_Clause --
!    ----------------------
! 
!    function Alignment_Clause (Id : E) return N is
!    begin
!       return Get_Attribute_Definition_Clause (Id, Attribute_Alignment);
!    end Alignment_Clause;
! 
!    -------------------
!    -- Append_Entity --
!    -------------------
! 
!    procedure Append_Entity (Id : Entity_Id; Scop : Entity_Id) is
!       Last : constant Entity_Id := Last_Entity (Scop);
! 
!    begin
!       Set_Scope (Id, Scop);
!       Set_Prev_Entity (Id, Empty);  --  Empty <-- Id
! 
!       --  The entity chain is empty
! 
!       if No (Last) then
!          Set_First_Entity (Scop, Id);
! 
!       --  Otherwise the entity chain has at least one element
! 
!       else
!          Link_Entities (Last, Id);  --  Last <-- Id, Last --> Id
!       end if;
! 
!       --  NOTE: The setting of the Next_Entity attribute of Id must happen
!       --  here as opposed to at the beginning of the routine because doing
!       --  so causes the binder to hang. It is not clear why ???
! 
!       Set_Next_Entity (Id, Empty);  --  Id --> Empty
! 
!       Set_Last_Entity (Scop, Id);
!    end Append_Entity;
! 
!    ---------------
!    -- Base_Type --
!    ---------------
! 
!    function Base_Type (Id : E) return E is
!    begin
!       if Is_Base_Type (Id) then
!          return Id;
!       else
!          pragma Assert (Is_Type (Id));
!          return Etype (Id);
!       end if;
!    end Base_Type;
! 
!    -------------------------
!    -- Component_Alignment --
!    -------------------------
! 
!    --  Component Alignment is encoded using two flags, Flag128/129 as
!    --  follows. Note that both flags False = Align_Default, so that the
!    --  default initialization of flags to False initializes component
!    --  alignment to the default value as required.
! 
!    --     Flag128      Flag129      Value
!    --     -------      -------      -----
!    --      False        False       Calign_Default
!    --      False        True        Calign_Component_Size
!    --      True         False       Calign_Component_Size_4
!    --      True         True        Calign_Storage_Unit
! 
!    function Component_Alignment (Id : E) return C is
!       BT : constant Node_Id := Base_Type (Id);
! 
!    begin
!       pragma Assert (Is_Array_Type (Id) or else Is_Record_Type (Id));
! 
!       if Flag128 (BT) then
!          if Flag129 (BT) then
!             return Calign_Storage_Unit;
!          else
!             return Calign_Component_Size_4;
!          end if;
! 
!       else
!          if Flag129 (BT) then
!             return Calign_Component_Size;
!          else
!             return Calign_Default;
!          end if;
!       end if;
!    end Component_Alignment;
! 
!    ----------------------
!    -- Declaration_Node --
!    ----------------------
! 
!    function Declaration_Node (Id : E) return N is
!       P : Node_Id;
! 
!    begin
!       if Ekind (Id) = E_Incomplete_Type
!         and then Present (Full_View (Id))
!       then
!          P := Parent (Full_View (Id));
!       else
!          P := Parent (Id);
!       end if;
! 
!       loop
!          if Nkind (P) in N_Selected_Component | N_Expanded_Name
!            or else (Nkind (P) = N_Defining_Program_Unit_Name
!                      and then Is_Child_Unit (Id))
!          then
!             P := Parent (P);
!          else
!             return P;
!          end if;
!       end loop;
!    end Declaration_Node;
! 
!    ---------------------
!    -- Designated_Type --
!    ---------------------
! 
!    function Designated_Type (Id : E) return E is
!       Desig_Type : Entity_Id;
! 
!    begin
!       Desig_Type := Directly_Designated_Type (Id);
! 
!       if Is_Incomplete_Type (Desig_Type)
!         and then Present (Full_View (Desig_Type))
!       then
!          return Full_View (Desig_Type);
! 
!       elsif Is_Class_Wide_Type (Desig_Type)
!         and then Is_Incomplete_Type (Etype (Desig_Type))
!         and then Present (Full_View (Etype (Desig_Type)))
!         and then Present (Class_Wide_Type (Full_View (Etype (Desig_Type))))
!       then
!          return Class_Wide_Type (Full_View (Etype (Desig_Type)));
! 
!       else
!          return Desig_Type;
!       end if;
!    end Designated_Type;
! 
!    -------------------
!    -- DIC_Procedure --
!    -------------------
! 
!    function DIC_Procedure (Id : E) return E is
!       Subp_Elmt : Elmt_Id;
!       Subp_Id   : Entity_Id;
!       Subps     : Elist_Id;
! 
!    begin
!       pragma Assert (Is_Type (Id));
! 
!       Subps := Subprograms_For_Type (Base_Type (Id));
! 
!       if Present (Subps) then
!          Subp_Elmt := First_Elmt (Subps);
!          while Present (Subp_Elmt) loop
!             Subp_Id := Node (Subp_Elmt);
! 
!             --  Currently the flag Is_DIC_Procedure is set for both normal DIC
!             --  check procedures as well as for partial DIC check procedures,
!             --  and we don't have a flag for the partial procedures.
! 
!             if Is_DIC_Procedure (Subp_Id)
!               and then not Is_Partial_DIC_Procedure (Subp_Id)
!             then
!                return Subp_Id;
!             end if;
! 
!             Next_Elmt (Subp_Elmt);
!          end loop;
!       end if;
! 
!       return Empty;
!    end DIC_Procedure;
! 
!    ----------------------
!    -- Entry_Index_Type --
!    ----------------------
! 
!    function Entry_Index_Type (Id : E) return N is
!    begin
!       pragma Assert (Ekind (Id) = E_Entry_Family);
!       return Etype (Discrete_Subtype_Definition (Parent (Id)));
!    end Entry_Index_Type;
! 
!    ---------------------
!    -- First_Component --
!    ---------------------
! 
!    function First_Component (Id : E) return E is
!       Comp_Id : Entity_Id;
! 
!    begin
!       pragma Assert
!         (Is_Concurrent_Type (Id)
!           or else Is_Incomplete_Or_Private_Type (Id)
!           or else Is_Record_Type (Id));
! 
!       Comp_Id := First_Entity (Id);
!       while Present (Comp_Id) loop
!          exit when Ekind (Comp_Id) = E_Component;
!          Next_Entity (Comp_Id);
!       end loop;
! 
!       return Comp_Id;
!    end First_Component;
! 
!    -------------------------------------
!    -- First_Component_Or_Discriminant --
!    -------------------------------------
! 
!    function First_Component_Or_Discriminant (Id : E) return E is
!       Comp_Id : Entity_Id;
! 
!    begin
!       pragma Assert
!         (Is_Concurrent_Type (Id)
!           or else Is_Incomplete_Or_Private_Type (Id)
!           or else Is_Record_Type (Id)
!           or else Has_Discriminants (Id));
! 
!       Comp_Id := First_Entity (Id);
!       while Present (Comp_Id) loop
!          exit when Ekind (Comp_Id) in E_Component | E_Discriminant;
!          Next_Entity (Comp_Id);
!       end loop;
! 
!       return Comp_Id;
!    end First_Component_Or_Discriminant;
! 
!    ------------------
!    -- First_Formal --
!    ------------------
! 
!    function First_Formal (Id : E) return E is
!       Formal : Entity_Id;
! 
!    begin
!       pragma Assert
!         (Is_Generic_Subprogram (Id)
!            or else Is_Overloadable (Id)
!            or else Ekind (Id) in E_Entry_Family
!                                | E_Subprogram_Body
!                                | E_Subprogram_Type);
! 
!       if Ekind (Id) = E_Enumeration_Literal then
!          return Empty;
! 
!       else
!          Formal := First_Entity (Id);
! 
!          --  Deal with the common, non-generic case first
! 
!          if No (Formal) or else Is_Formal (Formal) then
!             return Formal;
!          end if;
! 
!          --  The first/next entity chain of a generic subprogram contains all
!          --  generic formal parameters, followed by the formal parameters.
! 
!          if Is_Generic_Subprogram (Id) then
!             while Present (Formal) and then not Is_Formal (Formal) loop
!                Next_Entity (Formal);
!             end loop;
!             return Formal;
!          else
!             return Empty;
!          end if;
!       end if;
!    end First_Formal;
! 
!    ------------------------------
!    -- First_Formal_With_Extras --
!    ------------------------------
! 
!    function First_Formal_With_Extras (Id : E) return E is
!       Formal : Entity_Id;
! 
!    begin
!       pragma Assert
!         (Is_Generic_Subprogram (Id)
!            or else Is_Overloadable (Id)
!            or else Ekind (Id) in E_Entry_Family
!                                | E_Subprogram_Body
!                                | E_Subprogram_Type);
! 
!       if Ekind (Id) = E_Enumeration_Literal then
!          return Empty;
! 
!       else
!          Formal := First_Entity (Id);
! 
!          --  The first/next entity chain of a generic subprogram contains all
!          --  generic formal parameters, followed by the formal parameters. Go
!          --  directly to the parameters by skipping the formal part.
! 
!          if Is_Generic_Subprogram (Id) then
!             while Present (Formal) and then not Is_Formal (Formal) loop
!                Next_Entity (Formal);
!             end loop;
!          end if;
! 
!          if Present (Formal) and then Is_Formal (Formal) then
!             return Formal;
!          else
!             return Extra_Formals (Id);  -- Empty if no extra formals
!          end if;
!       end if;
!    end First_Formal_With_Extras;
! 
!    -------------------------------------
!    -- Get_Attribute_Definition_Clause --
!    -------------------------------------
! 
!    function Get_Attribute_Definition_Clause
!      (E  : Entity_Id;
!       Id : Attribute_Id) return Node_Id
!    is
!       N : Node_Id;
! 
!    begin
!       N := First_Rep_Item (E);
!       while Present (N) loop
!          if Nkind (N) = N_Attribute_Definition_Clause
!            and then Get_Attribute_Id (Chars (N)) = Id
!          then
!             return N;
!          else
!             Next_Rep_Item (N);
!          end if;
!       end loop;
! 
!       return Empty;
!    end Get_Attribute_Definition_Clause;
! 
!    ---------------------------
!    -- Get_Class_Wide_Pragma --
!    ---------------------------
! 
!    function Get_Class_Wide_Pragma
!      (E  : Entity_Id;
!       Id : Pragma_Id) return Node_Id
!     is
!       Item  : Node_Id;
!       Items : Node_Id;
! 
!    begin
!       Items := Contract (E);
! 
!       if No (Items) then
!          return Empty;
!       end if;
! 
!       Item := Pre_Post_Conditions (Items);
!       while Present (Item) loop
!          if Nkind (Item) = N_Pragma
!            and then Get_Pragma_Id (Pragma_Name_Unmapped (Item)) = Id
!            and then Class_Present (Item)
!          then
!             return Item;
!          end if;
! 
!          Item := Next_Pragma (Item);
!       end loop;
! 
!       return Empty;
!    end Get_Class_Wide_Pragma;
! 
!    -------------------
!    -- Get_Full_View --
!    -------------------
! 
!    function Get_Full_View (T : Entity_Id) return Entity_Id is
!    begin
!       if Is_Incomplete_Type (T) and then Present (Full_View (T)) then
!          return Full_View (T);
! 
!       elsif Is_Class_Wide_Type (T)
!         and then Is_Incomplete_Type (Root_Type (T))
!         and then Present (Full_View (Root_Type (T)))
!       then
!          return Class_Wide_Type (Full_View (Root_Type (T)));
! 
!       else
!          return T;
!       end if;
!    end Get_Full_View;
! 
!    ----------------
!    -- Get_Pragma --
!    ----------------
! 
!    function Get_Pragma (E : Entity_Id; Id : Pragma_Id) return Node_Id is
! 
!       --  Classification pragmas
! 
!       Is_CLS : constant Boolean :=
!                  Id = Pragma_Abstract_State             or else
!                  Id = Pragma_Attach_Handler             or else
!                  Id = Pragma_Async_Readers              or else
!                  Id = Pragma_Async_Writers              or else
!                  Id = Pragma_Constant_After_Elaboration or else
!                  Id = Pragma_Depends                    or else
!                  Id = Pragma_Effective_Reads            or else
!                  Id = Pragma_Effective_Writes           or else
!                  Id = Pragma_Extensions_Visible         or else
!                  Id = Pragma_Global                     or else
!                  Id = Pragma_Initial_Condition          or else
!                  Id = Pragma_Initializes                or else
!                  Id = Pragma_Interrupt_Handler          or else
!                  Id = Pragma_No_Caching                 or else
!                  Id = Pragma_Part_Of                    or else
!                  Id = Pragma_Refined_Depends            or else
!                  Id = Pragma_Refined_Global             or else
!                  Id = Pragma_Refined_State              or else
!                  Id = Pragma_Volatile_Function;
! 
!       --  Contract / subprogram variant / test case pragmas
! 
!       Is_CTC : constant Boolean :=
!                   Id = Pragma_Contract_Cases            or else
!                   Id = Pragma_Subprogram_Variant        or else
!                   Id = Pragma_Test_Case;
! 
!       --  Pre / postcondition pragmas
! 
!       Is_PPC : constant Boolean :=
!                   Id = Pragma_Precondition              or else
!                   Id = Pragma_Postcondition             or else
!                   Id = Pragma_Refined_Post;
! 
!       In_Contract : constant Boolean := Is_CLS or Is_CTC or Is_PPC;
! 
!       Item  : Node_Id;
!       Items : Node_Id;
! 
!    begin
!       --  Handle pragmas that appear in N_Contract nodes. Those have to be
!       --  extracted from their specialized list.
! 
!       if In_Contract then
!          Items := Contract (E);
! 
!          if No (Items) then
!             return Empty;
! 
!          elsif Is_CLS then
!             Item := Classifications (Items);
! 
!          elsif Is_CTC then
!             Item := Contract_Test_Cases (Items);
! 
!          else
!             Item := Pre_Post_Conditions (Items);
!          end if;
! 
!       --  Regular pragmas
! 
!       else
!          Item := First_Rep_Item (E);
!       end if;
! 
!       while Present (Item) loop
!          if Nkind (Item) = N_Pragma
!            and then Get_Pragma_Id (Pragma_Name_Unmapped (Item)) = Id
!          then
!             return Item;
! 
!          --  All nodes in N_Contract are chained using Next_Pragma
! 
!          elsif In_Contract then
!             Item := Next_Pragma (Item);
! 
!          --  Regular pragmas
! 
!          else
!             Next_Rep_Item (Item);
!          end if;
!       end loop;
! 
!       return Empty;
!    end Get_Pragma;
! 
!    --------------------------------------
!    -- Get_Record_Representation_Clause --
!    --------------------------------------
! 
!    function Get_Record_Representation_Clause (E : Entity_Id) return Node_Id is
!       N : Node_Id;
! 
!    begin
!       N := First_Rep_Item (E);
!       while Present (N) loop
!          if Nkind (N) = N_Record_Representation_Clause then
!             return N;
!          end if;
! 
!          Next_Rep_Item (N);
!       end loop;
! 
!       return Empty;
!    end Get_Record_Representation_Clause;
! 
!    ------------------------
!    -- Has_Attach_Handler --
!    ------------------------
! 
!    function Has_Attach_Handler (Id : E) return B is
!       Ritem : Node_Id;
! 
!    begin
!       pragma Assert (Is_Protected_Type (Id));
! 
!       Ritem := First_Rep_Item (Id);
!       while Present (Ritem) loop
!          if Nkind (Ritem) = N_Pragma
!            and then Pragma_Name (Ritem) = Name_Attach_Handler
!          then
!             return True;
!          else
!             Next_Rep_Item (Ritem);
!          end if;
!       end loop;
! 
!       return False;
!    end Has_Attach_Handler;
! 
!    -------------
!    -- Has_DIC --
!    -------------
! 
!    function Has_DIC (Id : E) return B is
!    begin
!       return Has_Own_DIC (Id) or else Has_Inherited_DIC (Id);
!    end Has_DIC;
! 
!    -----------------
!    -- Has_Entries --
!    -----------------
! 
!    function Has_Entries (Id : E) return B is
!       Ent : Entity_Id;
! 
!    begin
!       pragma Assert (Is_Concurrent_Type (Id));
! 
!       Ent := First_Entity (Id);
!       while Present (Ent) loop
!          if Is_Entry (Ent) then
!             return True;
!          end if;
! 
!          Next_Entity (Ent);
!       end loop;
! 
!       return False;
!    end Has_Entries;
! 
!    ----------------------------
!    -- Has_Foreign_Convention --
!    ----------------------------
! 
!    function Has_Foreign_Convention (Id : E) return B is
!    begin
!       --  While regular Intrinsics such as the Standard operators fit in the
!       --  "Ada" convention, those with an Interface_Name materialize GCC
!       --  builtin imports for which Ada special treatments shouldn't apply.
! 
!       return Convention (Id) in Foreign_Convention
!         or else (Convention (Id) = Convention_Intrinsic
!                    and then Present (Interface_Name (Id)));
!    end Has_Foreign_Convention;
! 
!    ---------------------------
!    -- Has_Interrupt_Handler --
!    ---------------------------
! 
!    function Has_Interrupt_Handler (Id : E) return B is
!       Ritem : Node_Id;
! 
!    begin
!       pragma Assert (Is_Protected_Type (Id));
! 
!       Ritem := First_Rep_Item (Id);
!       while Present (Ritem) loop
!          if Nkind (Ritem) = N_Pragma
!            and then Pragma_Name (Ritem) = Name_Interrupt_Handler
!          then
!             return True;
!          else
!             Next_Rep_Item (Ritem);
!          end if;
!       end loop;
! 
!       return False;
!    end Has_Interrupt_Handler;
! 
!    --------------------
!    -- Has_Invariants --
!    --------------------
! 
!    function Has_Invariants (Id : E) return B is
!    begin
!       return Has_Own_Invariants (Id) or else Has_Inherited_Invariants (Id);
!    end Has_Invariants;
! 
!    --------------------------
!    -- Has_Limited_View --
!    --------------------------
! 
!    function Has_Limited_View (Id : E) return B is
!    begin
!       return Ekind (Id) = E_Package
!         and then not Is_Generic_Instance (Id)
!         and then Present (Limited_View (Id));
!    end Has_Limited_View;
! 
!    --------------------------
!    -- Has_Non_Limited_View --
!    --------------------------
! 
!    function Has_Non_Limited_View (Id : E) return B is
!    begin
!       return (Ekind (Id) in Incomplete_Kind
!                or else Ekind (Id) in Class_Wide_Kind
!                or else Ekind (Id) = E_Abstract_State)
!         and then Present (Non_Limited_View (Id));
!    end Has_Non_Limited_View;
! 
!    ---------------------------------
!    -- Has_Non_Null_Abstract_State --
!    ---------------------------------
! 
!    function Has_Non_Null_Abstract_State (Id : E) return B is
!    begin
!       pragma Assert (Is_Package_Or_Generic_Package (Id));
! 
!       return
!         Present (Abstract_States (Id))
!           and then
!             not Is_Null_State (Node (First_Elmt (Abstract_States (Id))));
!    end Has_Non_Null_Abstract_State;
! 
!    -------------------------------------
!    -- Has_Non_Null_Visible_Refinement --
!    -------------------------------------
! 
!    function Has_Non_Null_Visible_Refinement (Id : E) return B is
!       Constits : Elist_Id;
! 
!    begin
!       --  "Refinement" is a concept applicable only to abstract states
! 
!       pragma Assert (Ekind (Id) = E_Abstract_State);
!       Constits := Refinement_Constituents (Id);
! 
!       --  A partial refinement is always non-null. For a full refinement to be
!       --  non-null, the first constituent must be anything other than null.
! 
!       return
!         Has_Partial_Visible_Refinement (Id)
!           or else (Has_Visible_Refinement (Id)
!                     and then Present (Constits)
!                     and then Nkind (Node (First_Elmt (Constits))) /= N_Null);
!    end Has_Non_Null_Visible_Refinement;
! 
!    -----------------------------
!    -- Has_Null_Abstract_State --
!    -----------------------------
! 
!    function Has_Null_Abstract_State (Id : E) return B is
!       pragma Assert (Is_Package_Or_Generic_Package (Id));
! 
!       States : constant Elist_Id := Abstract_States (Id);
! 
!    begin
!       --  Check first available state of related package. A null abstract
!       --  state always appears as the sole element of the state list.
! 
!       return
!         Present (States)
!           and then Is_Null_State (Node (First_Elmt (States)));
!    end Has_Null_Abstract_State;
! 
!    ---------------------------------
!    -- Has_Null_Visible_Refinement --
!    ---------------------------------
! 
!    function Has_Null_Visible_Refinement (Id : E) return B is
!       Constits : Elist_Id;
! 
!    begin
!       --  "Refinement" is a concept applicable only to abstract states
! 
!       pragma Assert (Ekind (Id) = E_Abstract_State);
!       Constits := Refinement_Constituents (Id);
! 
!       --  For a refinement to be null, the state's sole constituent must be a
!       --  null.
! 
!       return
!         Has_Visible_Refinement (Id)
!           and then Present (Constits)
!           and then Nkind (Node (First_Elmt (Constits))) = N_Null;
!    end Has_Null_Visible_Refinement;
! 
!    --------------------
!    -- Has_Unmodified --
!    --------------------
! 
!    function Has_Unmodified (E : Entity_Id) return Boolean is
!    begin
!       if Has_Pragma_Unmodified (E) then
!          return True;
!       elsif Warnings_Off (E) then
!          Set_Warnings_Off_Used_Unmodified (E);
!          return True;
!       else
!          return False;
!       end if;
!    end Has_Unmodified;
! 
!    ---------------------
!    -- Has_Unreferenced --
!    ---------------------
! 
!    function Has_Unreferenced (E : Entity_Id) return Boolean is
!    begin
!       if Has_Pragma_Unreferenced (E) then
!          return True;
!       elsif Warnings_Off (E) then
!          Set_Warnings_Off_Used_Unreferenced (E);
!          return True;
!       else
!          return False;
!       end if;
!    end Has_Unreferenced;
! 
!    ----------------------
!    -- Has_Warnings_Off --
!    ----------------------
! 
!    function Has_Warnings_Off (E : Entity_Id) return Boolean is
!    begin
!       if Warnings_Off (E) then
!          Set_Warnings_Off_Used (E);
!          return True;
!       else
!          return False;
!       end if;
!    end Has_Warnings_Off;
! 
!    ------------------------------
!    -- Implementation_Base_Type --
!    ------------------------------
! 
!    function Implementation_Base_Type (Id : E) return E is
!       Bastyp : Entity_Id;
!       Imptyp : Entity_Id;
! 
!    begin
!       Bastyp := Base_Type (Id);
! 
!       if Is_Incomplete_Or_Private_Type (Bastyp) then
!          Imptyp := Underlying_Type (Bastyp);
! 
!          --  If we have an implementation type, then just return it,
!          --  otherwise we return the Base_Type anyway. This can only
!          --  happen in error situations and should avoid some error bombs.
! 
!          if Present (Imptyp) then
!             return Base_Type (Imptyp);
!          else
!             return Bastyp;
!          end if;
! 
!       else
!          return Bastyp;
!       end if;
!    end Implementation_Base_Type;
! 
!    -------------------------
!    -- Invariant_Procedure --
!    -------------------------
! 
!    function Invariant_Procedure (Id : E) return E is
!       Subp_Elmt : Elmt_Id;
!       Subp_Id   : Entity_Id;
!       Subps     : Elist_Id;
! 
!    begin
!       pragma Assert (Is_Type (Id));
! 
!       Subps := Subprograms_For_Type (Base_Type (Id));
! 
!       if Present (Subps) then
!          Subp_Elmt := First_Elmt (Subps);
!          while Present (Subp_Elmt) loop
!             Subp_Id := Node (Subp_Elmt);
! 
!             if Is_Invariant_Procedure (Subp_Id) then
!                return Subp_Id;
!             end if;
! 
!             Next_Elmt (Subp_Elmt);
!          end loop;
!       end if;
! 
!       return Empty;
!    end Invariant_Procedure;
! 
!    ------------------
!    -- Is_Base_Type --
!    ------------------
! 
!    --  Global flag table allowing rapid computation of this function
! 
!    Entity_Is_Base_Type : constant array (Entity_Kind) of Boolean :=
!      (E_Enumeration_Subtype          |
!       E_Incomplete_Subtype           |
!       E_Signed_Integer_Subtype       |
!       E_Modular_Integer_Subtype      |
!       E_Floating_Point_Subtype       |
!       E_Ordinary_Fixed_Point_Subtype |
!       E_Decimal_Fixed_Point_Subtype  |
!       E_Array_Subtype                |
!       E_Record_Subtype               |
!       E_Private_Subtype              |
!       E_Record_Subtype_With_Private  |
!       E_Limited_Private_Subtype      |
!       E_Access_Subtype               |
!       E_Protected_Subtype            |
!       E_Task_Subtype                 |
!       E_String_Literal_Subtype       |
!       E_Class_Wide_Subtype           => False,
!       others                         => True);
! 
!    function Is_Base_Type (Id : E) return Boolean is
!    begin
!       return Entity_Is_Base_Type (Ekind (Id));
!    end Is_Base_Type;
! 
!    ---------------------
!    -- Is_Boolean_Type --
!    ---------------------
! 
!    function Is_Boolean_Type (Id : E) return B is
!    begin
!       return Root_Type (Id) = Standard_Boolean;
!    end Is_Boolean_Type;
! 
!    ------------------------
!    -- Is_Constant_Object --
!    ------------------------
! 
!    function Is_Constant_Object (Id : E) return B is
!    begin
!       return Ekind (Id) in E_Constant | E_In_Parameter | E_Loop_Parameter;
!    end Is_Constant_Object;
! 
!    -------------------
!    -- Is_Controlled --
!    -------------------
! 
!    function Is_Controlled (Id : E) return B is
!    begin
!       return Is_Controlled_Active (Id) and then not Disable_Controlled (Id);
!    end Is_Controlled;
! 
!    --------------------
!    -- Is_Discriminal --
!    --------------------
! 
!    function Is_Discriminal (Id : E) return B is
!    begin
!       return Ekind (Id) in E_Constant | E_In_Parameter
!                and then Present (Discriminal_Link (Id));
!    end Is_Discriminal;
! 
!    ----------------------
!    -- Is_Dynamic_Scope --
!    ----------------------
! 
!    function Is_Dynamic_Scope (Id : E) return B is
!    begin
!       return
!         Ekind (Id) = E_Block
!           or else
!         Ekind (Id) = E_Function
!           or else
!         Ekind (Id) = E_Procedure
!           or else
!         Ekind (Id) = E_Subprogram_Body
!           or else
!         Ekind (Id) = E_Task_Type
!           or else
!        (Ekind (Id) = E_Limited_Private_Type
!          and then Present (Full_View (Id))
!          and then Ekind (Full_View (Id)) = E_Task_Type)
!           or else
!         Ekind (Id) = E_Entry
!           or else
!         Ekind (Id) = E_Entry_Family
!           or else
!         Ekind (Id) = E_Return_Statement;
!    end Is_Dynamic_Scope;
! 
!    --------------------
!    -- Is_Entity_Name --
!    --------------------
! 
!    function Is_Entity_Name (N : Node_Id) return Boolean is
!       Kind : constant Node_Kind := Nkind (N);
! 
!    begin
!       --  Identifiers, operator symbols, expanded names are entity names
! 
!       return Kind in N_Identifier | N_Operator_Symbol | N_Expanded_Name
! 
!       --  Attribute references are entity names if they refer to an entity.
!       --  Note that we don't do this by testing for the presence of the
!       --  Entity field in the N_Attribute_Reference node, since it may not
!       --  have been set yet.
! 
!         or else (Kind = N_Attribute_Reference
!                   and then Is_Entity_Attribute_Name (Attribute_Name (N)));
!    end Is_Entity_Name;
! 
!    ---------------------------
!    -- Is_Elaboration_Target --
!    ---------------------------
! 
!    function Is_Elaboration_Target (Id : Entity_Id) return Boolean is
!    begin
!       return
!         Ekind (Id) in E_Constant | E_Package | E_Variable
!           or else Is_Generic_Unit        (Id)
!           or else Is_Subprogram_Or_Entry (Id)
!           or else Is_Task_Type           (Id);
!    end Is_Elaboration_Target;
! 
!    -----------------------
!    -- Is_External_State --
!    -----------------------
! 
!    function Is_External_State (Id : E) return B is
!    begin
!       --  To qualify, the abstract state must appear with option "external" or
!       --  "synchronous" (SPARK RM 7.1.4(7) and (9)).
! 
!       return
!         Ekind (Id) = E_Abstract_State
!           and then (Has_Option (Id, Name_External)
!                       or else
!                     Has_Option (Id, Name_Synchronous));
!    end Is_External_State;
! 
!    ------------------
!    -- Is_Finalizer --
!    ------------------
! 
!    function Is_Finalizer (Id : E) return B is
!    begin
!       return Ekind (Id) = E_Procedure and then Chars (Id) = Name_uFinalizer;
!    end Is_Finalizer;
! 
!    ----------------------
!    -- Is_Full_Access --
!    ----------------------
! 
!    function Is_Full_Access (Id : E) return B is
!    begin
!       return Is_Atomic (Id) or else Is_Volatile_Full_Access (Id);
!    end Is_Full_Access;
! 
!    -------------------
!    -- Is_Null_State --
!    -------------------
! 
!    function Is_Null_State (Id : E) return B is
!    begin
!       return
!         Ekind (Id) = E_Abstract_State and then Nkind (Parent (Id)) = N_Null;
!    end Is_Null_State;
! 
!    -----------------------------------
!    -- Is_Package_Or_Generic_Package --
!    -----------------------------------
! 
!    function Is_Package_Or_Generic_Package (Id : E) return B is
!    begin
!       return Ekind (Id) in E_Generic_Package | E_Package;
!    end Is_Package_Or_Generic_Package;
! 
!    ---------------------
!    -- Is_Packed_Array --
!    ---------------------
! 
!    function Is_Packed_Array (Id : E) return B is
!    begin
!       return Is_Array_Type (Id) and then Is_Packed (Id);
!    end Is_Packed_Array;
! 
!    ---------------
!    -- Is_Prival --
!    ---------------
! 
!    function Is_Prival (Id : E) return B is
!    begin
!       return Ekind (Id) in E_Constant | E_Variable
!                and then Present (Prival_Link (Id));
!    end Is_Prival;
! 
!    ----------------------------
!    -- Is_Protected_Component --
!    ----------------------------
! 
!    function Is_Protected_Component (Id : E) return B is
!    begin
!       return Ekind (Id) = E_Component and then Is_Protected_Type (Scope (Id));
!    end Is_Protected_Component;
! 
!    ----------------------------
!    -- Is_Protected_Interface --
!    ----------------------------
! 
!    function Is_Protected_Interface (Id : E) return B is
!       Typ : constant Entity_Id := Base_Type (Id);
!    begin
!       if not Is_Interface (Typ) then
!          return False;
!       elsif Is_Class_Wide_Type (Typ) then
!          return Is_Protected_Interface (Etype (Typ));
!       else
!          return Protected_Present (Type_Definition (Parent (Typ)));
!       end if;
!    end Is_Protected_Interface;
! 
!    ------------------------------
!    -- Is_Protected_Record_Type --
!    ------------------------------
! 
!    function Is_Protected_Record_Type (Id : E) return B is
!    begin
!       return
!         Is_Concurrent_Record_Type (Id)
!           and then Is_Protected_Type (Corresponding_Concurrent_Type (Id));
!    end Is_Protected_Record_Type;
! 
!    -------------------------------------
!    -- Is_Relaxed_Initialization_State --
!    -------------------------------------
! 
!    function Is_Relaxed_Initialization_State (Id : E) return B is
!    begin
!       --  To qualify, the abstract state must appear with simple option
!       --  "Relaxed_Initialization" (SPARK RM 6.10).
! 
!       return
!         Ekind (Id) = E_Abstract_State
!           and then Has_Option (Id, Name_Relaxed_Initialization);
!    end Is_Relaxed_Initialization_State;
! 
!    --------------------------------
!    -- Is_Standard_Character_Type --
!    --------------------------------
! 
!    function Is_Standard_Character_Type (Id : E) return B is
!    begin
!       return Is_Type (Id)
!         and then Root_Type (Id) in Standard_Character
!                                  | Standard_Wide_Character
!                                  | Standard_Wide_Wide_Character;
!    end Is_Standard_Character_Type;
! 
!    -----------------------------
!    -- Is_Standard_String_Type --
!    -----------------------------
! 
!    function Is_Standard_String_Type (Id : E) return B is
!    begin
!       return Is_Type (Id)
!         and then Root_Type (Id) in Standard_String
!                                  | Standard_Wide_String
!                                  | Standard_Wide_Wide_String;
!    end Is_Standard_String_Type;
! 
!    --------------------
!    -- Is_String_Type --
!    --------------------
! 
!    function Is_String_Type (Id : E) return B is
!    begin
!       return Is_Array_Type (Id)
!         and then Id /= Any_Composite
!         and then Number_Dimensions (Id) = 1
!         and then Is_Character_Type (Component_Type (Id));
!    end Is_String_Type;
! 
!    -------------------------------
!    -- Is_Synchronized_Interface --
!    -------------------------------
! 
!    function Is_Synchronized_Interface (Id : E) return B is
!       Typ : constant Entity_Id := Base_Type (Id);
! 
!    begin
!       if not Is_Interface (Typ) then
!          return False;
! 
!       elsif Is_Class_Wide_Type (Typ) then
!          return Is_Synchronized_Interface (Etype (Typ));
! 
!       else
!          return    Protected_Present    (Type_Definition (Parent (Typ)))
!            or else Synchronized_Present (Type_Definition (Parent (Typ)))
!            or else Task_Present         (Type_Definition (Parent (Typ)));
!       end if;
!    end Is_Synchronized_Interface;
! 
!    ---------------------------
!    -- Is_Synchronized_State --
!    ---------------------------
! 
!    function Is_Synchronized_State (Id : E) return B is
!    begin
!       --  To qualify, the abstract state must appear with simple option
!       --  "synchronous" (SPARK RM 7.1.4(9)).
! 
!       return
!         Ekind (Id) = E_Abstract_State
!           and then Has_Option (Id, Name_Synchronous);
!    end Is_Synchronized_State;
! 
!    -----------------------
!    -- Is_Task_Interface --
!    -----------------------
! 
!    function Is_Task_Interface (Id : E) return B is
!       Typ : constant Entity_Id := Base_Type (Id);
!    begin
!       if not Is_Interface (Typ) then
!          return False;
!       elsif Is_Class_Wide_Type (Typ) then
!          return Is_Task_Interface (Etype (Typ));
!       else
!          return Task_Present (Type_Definition (Parent (Typ)));
!       end if;
!    end Is_Task_Interface;
! 
!    -------------------------
!    -- Is_Task_Record_Type --
!    -------------------------
! 
!    function Is_Task_Record_Type (Id : E) return B is
!    begin
!       return
!         Is_Concurrent_Record_Type (Id)
!           and then Is_Task_Type (Corresponding_Concurrent_Type (Id));
!    end Is_Task_Record_Type;
! 
!    ------------------------
!    -- Is_Wrapper_Package --
!    ------------------------
! 
!    function Is_Wrapper_Package (Id : E) return B is
!    begin
!       return Ekind (Id) = E_Package and then Present (Related_Instance (Id));
!    end Is_Wrapper_Package;
! 
!    -----------------
!    -- Last_Formal --
!    -----------------
! 
!    function Last_Formal (Id : E) return E is
!       Formal : Entity_Id;
! 
!    begin
!       pragma Assert
!         (Is_Overloadable (Id)
!           or else Ekind (Id) in E_Entry_Family
!                               | E_Subprogram_Body
!                               | E_Subprogram_Type);
! 
!       if Ekind (Id) = E_Enumeration_Literal then
!          return Empty;
! 
!       else
!          Formal := First_Formal (Id);
! 
!          if Present (Formal) then
!             while Present (Next_Formal (Formal)) loop
!                Next_Formal (Formal);
!             end loop;
!          end if;
! 
!          return Formal;
!       end if;
!    end Last_Formal;
! 
!    -------------------
!    -- Link_Entities --
!    -------------------
! 
!    procedure Link_Entities (First : Entity_Id; Second : Node_Id) is
!    begin
!       if Present (Second) then
!          Set_Prev_Entity (Second, First);  --  First <-- Second
!       end if;
! 
!       Set_Next_Entity (First, Second);     --  First --> Second
!    end Link_Entities;
! 
!    ------------------------
!    -- Machine_Emax_Value --
!    ------------------------
! 
!    function Machine_Emax_Value (Id : E) return Uint is
!       Digs : constant Pos := UI_To_Int (Digits_Value (Base_Type (Id)));
! 
!    begin
!       case Float_Rep (Id) is
!          when IEEE_Binary =>
!             case Digs is
!                when  1 ..  6 => return Uint_128;
!                when  7 .. 15 => return 2**10;
!                when 16 .. 33 => return 2**14;
!                when others   => return No_Uint;
!             end case;
! 
!          when AAMP =>
!             return Uint_2 ** Uint_7 - Uint_1;
!       end case;
!    end Machine_Emax_Value;
! 
!    ------------------------
!    -- Machine_Emin_Value --
!    ------------------------
! 
!    function Machine_Emin_Value (Id : E) return Uint is
!    begin
!       case Float_Rep (Id) is
!          when IEEE_Binary => return Uint_3 - Machine_Emax_Value (Id);
!          when AAMP        => return -Machine_Emax_Value (Id);
!       end case;
!    end Machine_Emin_Value;
! 
!    ----------------------------
!    -- Machine_Mantissa_Value --
!    ----------------------------
! 
!    function Machine_Mantissa_Value (Id : E) return Uint is
!       Digs : constant Pos := UI_To_Int (Digits_Value (Base_Type (Id)));
! 
!    begin
!       case Float_Rep (Id) is
!          when IEEE_Binary =>
!             case Digs is
!                when  1 ..  6 => return Uint_24;
!                when  7 .. 15 => return UI_From_Int (53);
!                when 16 .. 18 => return Uint_64;
!                when 19 .. 33 => return UI_From_Int (113);
!                when others   => return No_Uint;
!             end case;
! 
!          when AAMP =>
!             case Digs is
!                when  1 ..  6 => return Uint_24;
!                when  7 ..  9 => return UI_From_Int (40);
!                when others   => return No_Uint;
!             end case;
!       end case;
!    end Machine_Mantissa_Value;
! 
!    -------------------------
!    -- Machine_Radix_Value --
!    -------------------------
! 
!    function Machine_Radix_Value (Id : E) return U is
!    begin
!       case Float_Rep (Id) is
!          when AAMP
!             | IEEE_Binary
!          =>
!             return Uint_2;
!       end case;
!    end Machine_Radix_Value;
! 
!    ----------------------
!    -- Model_Emin_Value --
!    ----------------------
! 
!    function Model_Emin_Value (Id : E) return Uint is
!    begin
!       return Machine_Emin_Value (Id);
!    end Model_Emin_Value;
! 
!    -------------------------
!    -- Model_Epsilon_Value --
!    -------------------------
! 
!    function Model_Epsilon_Value (Id : E) return Ureal is
!       Radix : constant Ureal := UR_From_Uint (Machine_Radix_Value (Id));
!    begin
!       return Radix ** (1 - Model_Mantissa_Value (Id));
!    end Model_Epsilon_Value;
! 
!    --------------------------
!    -- Model_Mantissa_Value --
!    --------------------------
! 
!    function Model_Mantissa_Value (Id : E) return Uint is
!    begin
!       return Machine_Mantissa_Value (Id);
!    end Model_Mantissa_Value;
! 
!    -----------------------
!    -- Model_Small_Value --
!    -----------------------
! 
!    function Model_Small_Value (Id : E) return Ureal is
!       Radix : constant Ureal := UR_From_Uint (Machine_Radix_Value (Id));
!    begin
!       return Radix ** (Model_Emin_Value (Id) - 1);
!    end Model_Small_Value;
! 
!    --------------------
!    -- Next_Component --
!    --------------------
! 
!    function Next_Component (Id : E) return E is
!       Comp_Id : Entity_Id;
! 
!    begin
!       Comp_Id := Next_Entity (Id);
!       while Present (Comp_Id) loop
!          exit when Ekind (Comp_Id) = E_Component;
!          Next_Entity (Comp_Id);
!       end loop;
! 
!       return Comp_Id;
!    end Next_Component;
! 
!    ------------------------------------
!    -- Next_Component_Or_Discriminant --
!    ------------------------------------
! 
!    function Next_Component_Or_Discriminant (Id : E) return E is
!       Comp_Id : Entity_Id;
! 
!    begin
!       Comp_Id := Next_Entity (Id);
!       while Present (Comp_Id) loop
!          exit when Ekind (Comp_Id) in E_Component | E_Discriminant;
!          Next_Entity (Comp_Id);
!       end loop;
! 
!       return Comp_Id;
!    end Next_Component_Or_Discriminant;
! 
!    -----------------------
!    -- Next_Discriminant --
!    -----------------------
! 
!    --  This function actually implements both Next_Discriminant and
!    --  Next_Stored_Discriminant by making sure that the Discriminant
!    --  returned is of the same variety as Id.
! 
!    function Next_Discriminant (Id : E) return E is
! 
!       --  Derived Tagged types with private extensions look like this...
! 
!       --       E_Discriminant d1
!       --       E_Discriminant d2
!       --       E_Component    _tag
!       --       E_Discriminant d1
!       --       E_Discriminant d2
!       --       ...
! 
!       --  so it is critical not to go past the leading discriminants
! 
!       D : E := Id;
! 
!    begin
!       pragma Assert (Ekind (Id) = E_Discriminant);
! 
!       loop
!          Next_Entity (D);
!          if No (D)
!            or else (Ekind (D) /= E_Discriminant
!                       and then not Is_Itype (D))
!          then
!             return Empty;
!          end if;
! 
!          exit when Ekind (D) = E_Discriminant
!            and then (Is_Completely_Hidden (D) = Is_Completely_Hidden (Id));
!       end loop;
! 
!       return D;
!    end Next_Discriminant;
! 
!    -----------------
!    -- Next_Formal --
!    -----------------
! 
!    function Next_Formal (Id : E) return E is
!       P : Entity_Id;
! 
!    begin
!       --  Follow the chain of declared entities as long as the kind of the
!       --  entity corresponds to a formal parameter. Skip internal entities
!       --  that may have been created for implicit subtypes, in the process
!       --  of analyzing default expressions.
! 
!       P := Id;
!       loop
!          Next_Entity (P);
! 
!          if No (P) or else Is_Formal (P) then
!             return P;
!          elsif not Is_Internal (P) then
!             return Empty;
!          end if;
!       end loop;
!    end Next_Formal;
! 
!    -----------------------------
!    -- Next_Formal_With_Extras --
!    -----------------------------
! 
!    function Next_Formal_With_Extras (Id : E) return E is
!    begin
!       if Present (Extra_Formal (Id)) then
!          return Extra_Formal (Id);
!       else
!          return Next_Formal (Id);
!       end if;
!    end Next_Formal_With_Extras;
! 
!    ----------------
!    -- Next_Index --
!    ----------------
! 
!    function Next_Index (Id : Node_Id) return Node_Id is
!    begin
!       return Next (Id);
!    end Next_Index;
! 
!    ------------------
!    -- Next_Literal --
!    ------------------
! 
!    function Next_Literal (Id : E) return E is
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
!       return Next (Id);
!    end Next_Literal;
! 
!    ------------------------------
!    -- Next_Stored_Discriminant --
!    ------------------------------
! 
!    function Next_Stored_Discriminant (Id : E) return E is
!    begin
!       --  See comment in Next_Discriminant
! 
!       return Next_Discriminant (Id);
!    end Next_Stored_Discriminant;
! 
!    -----------------------
!    -- Number_Dimensions --
!    -----------------------
! 
!    function Number_Dimensions (Id : E) return Pos is
!       N : Int;
!       T : Node_Id;
! 
!    begin
!       if Ekind (Id) = E_String_Literal_Subtype then
!          return 1;
! 
!       else
!          N := 0;
!          T := First_Index (Id);
!          while Present (T) loop
!             N := N + 1;
!             Next_Index (T);
!          end loop;
! 
!          return N;
!       end if;
!    end Number_Dimensions;
! 
!    --------------------
!    -- Number_Entries --
!    --------------------
! 
!    function Number_Entries (Id : E) return Nat is
!       N   : Int;
!       Ent : Entity_Id;
! 
!    begin
!       pragma Assert (Is_Concurrent_Type (Id));
! 
!       N := 0;
!       Ent := First_Entity (Id);
!       while Present (Ent) loop
!          if Is_Entry (Ent) then
!             N := N + 1;
!          end if;
! 
!          Next_Entity (Ent);
!       end loop;
! 
!       return N;
!    end Number_Entries;
! 
!    --------------------
!    -- Number_Formals --
!    --------------------
! 
!    function Number_Formals (Id : E) return Pos is
!       N      : Int;
!       Formal : Entity_Id;
! 
!    begin
!       N := 0;
!       Formal := First_Formal (Id);
!       while Present (Formal) loop
!          N := N + 1;
!          Next_Formal (Formal);
!       end loop;
! 
!       return N;
!    end Number_Formals;
! 
!    ------------------------
!    -- Object_Size_Clause --
!    ------------------------
! 
!    function Object_Size_Clause (Id : E) return N is
!    begin
!       return Get_Attribute_Definition_Clause (Id, Attribute_Object_Size);
!    end Object_Size_Clause;
! 
!    --------------------
!    -- Parameter_Mode --
!    --------------------
! 
!    function Parameter_Mode (Id : E) return Formal_Kind is
!    begin
!       return Ekind (Id);
!    end Parameter_Mode;
! 
!    ---------------------------
!    -- Partial_DIC_Procedure --
!    ---------------------------
! 
!    function Partial_DIC_Procedure (Id : E) return E is
!       Subp_Elmt : Elmt_Id;
!       Subp_Id   : Entity_Id;
!       Subps     : Elist_Id;
! 
!    begin
!       pragma Assert (Is_Type (Id));
! 
!       Subps := Subprograms_For_Type (Base_Type (Id));
! 
!       if Present (Subps) then
!          Subp_Elmt := First_Elmt (Subps);
!          while Present (Subp_Elmt) loop
!             Subp_Id := Node (Subp_Elmt);
! 
!             if Is_Partial_DIC_Procedure (Subp_Id) then
!                return Subp_Id;
!             end if;
! 
!             Next_Elmt (Subp_Elmt);
!          end loop;
!       end if;
! 
!       return Empty;
!    end Partial_DIC_Procedure;
! 
!    ---------------------------------
!    -- Partial_Invariant_Procedure --
!    ---------------------------------
! 
!    function Partial_Invariant_Procedure (Id : E) return E is
!       Subp_Elmt : Elmt_Id;
!       Subp_Id   : Entity_Id;
!       Subps     : Elist_Id;
! 
!    begin
!       pragma Assert (Is_Type (Id));
! 
!       Subps := Subprograms_For_Type (Base_Type (Id));
! 
!       if Present (Subps) then
!          Subp_Elmt := First_Elmt (Subps);
!          while Present (Subp_Elmt) loop
!             Subp_Id := Node (Subp_Elmt);
! 
!             if Is_Partial_Invariant_Procedure (Subp_Id) then
!                return Subp_Id;
!             end if;
! 
!             Next_Elmt (Subp_Elmt);
!          end loop;
!       end if;
! 
!       return Empty;
!    end Partial_Invariant_Procedure;
! 
!    -------------------------------------
!    -- Partial_Refinement_Constituents --
!    -------------------------------------
! 
!    function Partial_Refinement_Constituents (Id : E) return L is
!       Constits : Elist_Id := No_Elist;
! 
!       procedure Add_Usable_Constituents (Item : E);
!       --  Add global item Item and/or its constituents to list Constits when
!       --  they can be used in a global refinement within the current scope. The
!       --  criteria are:
!       --    1) If Item is an abstract state with full refinement visible, add
!       --       its constituents.
!       --    2) If Item is an abstract state with only partial refinement
!       --       visible, add both Item and its constituents.
!       --    3) If Item is an abstract state without a visible refinement, add
!       --       it.
!       --    4) If Id is not an abstract state, add it.
! 
!       procedure Add_Usable_Constituents (List : Elist_Id);
!       --  Apply Add_Usable_Constituents to every constituent in List
! 
!       -----------------------------
!       -- Add_Usable_Constituents --
!       -----------------------------
! 
!       procedure Add_Usable_Constituents (Item : E) is
!       begin
!          if Ekind (Item) = E_Abstract_State then
!             if Has_Visible_Refinement (Item) then
!                Add_Usable_Constituents (Refinement_Constituents (Item));
! 
!             elsif Has_Partial_Visible_Refinement (Item) then
!                Append_New_Elmt (Item, Constits);
!                Add_Usable_Constituents (Part_Of_Constituents (Item));
! 
!             else
!                Append_New_Elmt (Item, Constits);
!             end if;
! 
!          else
!             Append_New_Elmt (Item, Constits);
!          end if;
!       end Add_Usable_Constituents;
! 
!       procedure Add_Usable_Constituents (List : Elist_Id) is
!          Constit_Elmt : Elmt_Id;
!       begin
!          if Present (List) then
!             Constit_Elmt := First_Elmt (List);
!             while Present (Constit_Elmt) loop
!                Add_Usable_Constituents (Node (Constit_Elmt));
!                Next_Elmt (Constit_Elmt);
!             end loop;
!          end if;
!       end Add_Usable_Constituents;
! 
!    --  Start of processing for Partial_Refinement_Constituents
! 
!    begin
!       --  "Refinement" is a concept applicable only to abstract states
! 
!       pragma Assert (Ekind (Id) = E_Abstract_State);
! 
!       if Has_Visible_Refinement (Id) then
!          Constits := Refinement_Constituents (Id);
! 
!       --  A refinement may be partially visible when objects declared in the
!       --  private part of a package are subject to a Part_Of indicator.
! 
!       elsif Has_Partial_Visible_Refinement (Id) then
!          Add_Usable_Constituents (Part_Of_Constituents (Id));
! 
!       --  Function should only be called when full or partial refinement is
!       --  visible.
! 
!       else
!          raise Program_Error;
!       end if;
! 
!       return Constits;
!    end Partial_Refinement_Constituents;
! 
!    ------------------------
!    -- Predicate_Function --
!    ------------------------
! 
!    function Predicate_Function (Id : E) return E is
!       Subp_Elmt : Elmt_Id;
!       Subp_Id   : Entity_Id;
!       Subps     : Elist_Id;
!       Typ       : Entity_Id;
! 
!    begin
!       pragma Assert (Is_Type (Id));
! 
!       --  If type is private and has a completion, predicate may be defined on
!       --  the full view.
! 
!       if Is_Private_Type (Id)
!          and then
!            (not Has_Predicates (Id) or else No (Subprograms_For_Type (Id)))
!          and then Present (Full_View (Id))
!       then
!          Typ := Full_View (Id);
! 
!       elsif Ekind (Id) in E_Array_Subtype
!                         | E_Record_Subtype
!                         | E_Record_Subtype_With_Private
!         and then Present (Predicated_Parent (Id))
!       then
!          Typ := Predicated_Parent (Id);
! 
!       else
!          Typ := Id;
!       end if;
! 
!       Subps := Subprograms_For_Type (Typ);
! 
!       if Present (Subps) then
!          Subp_Elmt := First_Elmt (Subps);
!          while Present (Subp_Elmt) loop
!             Subp_Id := Node (Subp_Elmt);
! 
!             if Ekind (Subp_Id) = E_Function
!               and then Is_Predicate_Function (Subp_Id)
!             then
!                return Subp_Id;
!             end if;
! 
!             Next_Elmt (Subp_Elmt);
!          end loop;
!       end if;
! 
!       return Empty;
!    end Predicate_Function;
! 
!    --------------------------
!    -- Predicate_Function_M --
!    --------------------------
! 
!    function Predicate_Function_M (Id : E) return E is
!       Subp_Elmt : Elmt_Id;
!       Subp_Id   : Entity_Id;
!       Subps     : Elist_Id;
!       Typ       : Entity_Id;
! 
!    begin
!       pragma Assert (Is_Type (Id));
! 
!       --  If type is private and has a completion, predicate may be defined on
!       --  the full view.
! 
!       if Is_Private_Type (Id)
!          and then
!            (not Has_Predicates (Id) or else No (Subprograms_For_Type (Id)))
!          and then Present (Full_View (Id))
!       then
!          Typ := Full_View (Id);
! 
!       else
!          Typ := Id;
!       end if;
! 
!       Subps := Subprograms_For_Type (Typ);
! 
!       if Present (Subps) then
!          Subp_Elmt := First_Elmt (Subps);
!          while Present (Subp_Elmt) loop
!             Subp_Id := Node (Subp_Elmt);
! 
!             if Ekind (Subp_Id) = E_Function
!               and then Is_Predicate_Function_M (Subp_Id)
!             then
!                return Subp_Id;
!             end if;
! 
!             Next_Elmt (Subp_Elmt);
!          end loop;
!       end if;
! 
!       return Empty;
!    end Predicate_Function_M;
! 
!    -------------------------
!    -- Present_In_Rep_Item --
!    -------------------------
! 
!    function Present_In_Rep_Item (E : Entity_Id; N : Node_Id) return Boolean is
!       Ritem : Node_Id;
! 
!    begin
!       Ritem := First_Rep_Item (E);
! 
!       while Present (Ritem) loop
!          if Ritem = N then
!             return True;
!          end if;
! 
!          Next_Rep_Item (Ritem);
!       end loop;
! 
!       return False;
!    end Present_In_Rep_Item;
! 
!    --------------------------
!    -- Primitive_Operations --
!    --------------------------
! 
!    function Primitive_Operations (Id : E) return L is
!    begin
!       if Is_Concurrent_Type (Id) then
!          if Present (Corresponding_Record_Type (Id)) then
!             return Direct_Primitive_Operations
!               (Corresponding_Record_Type (Id));
! 
!          --  If expansion is disabled the corresponding record type is absent,
!          --  but if the type has ancestors it may have primitive operations.
! 
!          elsif Is_Tagged_Type (Id) then
!             return Direct_Primitive_Operations (Id);
! 
!          else
!             return No_Elist;
!          end if;
!       else
!          return Direct_Primitive_Operations (Id);
!       end if;
!    end Primitive_Operations;
! 
!    ---------------------
!    -- Record_Rep_Item --
!    ---------------------
! 
!    procedure Record_Rep_Item (E : Entity_Id; N : Node_Id) is
!    begin
!       Set_Next_Rep_Item (N, First_Rep_Item (E));
!       Set_First_Rep_Item (E, N);
!    end Record_Rep_Item;
! 
!    -------------------
!    -- Remove_Entity --
!    -------------------
! 
!    procedure Remove_Entity (Id : Entity_Id) is
!       Next  : constant Entity_Id := Next_Entity (Id);
!       Prev  : constant Entity_Id := Prev_Entity (Id);
!       Scop  : constant Entity_Id := Scope (Id);
!       First : constant Entity_Id := First_Entity (Scop);
!       Last  : constant Entity_Id := Last_Entity  (Scop);
! 
!    begin
!       --  Eliminate any existing linkages from the entity
! 
!       Set_Prev_Entity (Id, Empty);  --  Empty <-- Id
!       Set_Next_Entity (Id, Empty);  --  Id --> Empty
! 
!       --  The eliminated entity was the only element in the entity chain
! 
!       if Id = First and then Id = Last then
!          Set_First_Entity (Scop, Empty);
!          Set_Last_Entity  (Scop, Empty);
! 
!       --  The eliminated entity was the head of the entity chain
! 
!       elsif Id = First then
!          Set_First_Entity (Scop, Next);
! 
!       --  The eliminated entity was the tail of the entity chain
! 
!       elsif Id = Last then
!          Set_Last_Entity (Scop, Prev);
! 
!       --  Otherwise the eliminated entity comes from the middle of the entity
!       --  chain.
! 
!       else
!          Link_Entities (Prev, Next);  --  Prev <-- Next, Prev --> Next
!       end if;
!    end Remove_Entity;
! 
!    ---------------
!    -- Root_Type --
!    ---------------
! 
!    function Root_Type (Id : E) return E is
!       T, Etyp : Entity_Id;
! 
!    begin
!       pragma Assert (Nkind (Id) in N_Entity);
! 
!       T := Base_Type (Id);
! 
!       if Ekind (T) = E_Class_Wide_Type then
!          return Etype (T);
! 
!       --  Other cases
! 
!       else
!          loop
!             Etyp := Etype (T);
! 
!             if T = Etyp then
!                return T;
! 
!             --  Following test catches some error cases resulting from
!             --  previous errors.
! 
!             elsif No (Etyp) then
!                Check_Error_Detected;
!                return T;
! 
!             elsif Is_Private_Type (T) and then Etyp = Full_View (T) then
!                return T;
! 
!             elsif Is_Private_Type (Etyp) and then Full_View (Etyp) = T then
!                return T;
!             end if;
! 
!             T := Etyp;
! 
!             --  Return if there is a circularity in the inheritance chain. This
!             --  happens in some error situations and we do not want to get
!             --  stuck in this loop.
! 
!             if T = Base_Type (Id) then
!                return T;
!             end if;
!          end loop;
!       end if;
!    end Root_Type;
! 
!    ---------------------
!    -- Safe_Emax_Value --
!    ---------------------
! 
!    function Safe_Emax_Value (Id : E) return Uint is
!    begin
!       return Machine_Emax_Value (Id);
!    end Safe_Emax_Value;
! 
!    ----------------------
!    -- Safe_First_Value --
!    ----------------------
! 
!    function Safe_First_Value (Id : E) return Ureal is
!    begin
!       return -Safe_Last_Value (Id);
!    end Safe_First_Value;
! 
!    ---------------------
!    -- Safe_Last_Value --
!    ---------------------
! 
!    function Safe_Last_Value (Id : E) return Ureal is
!       Radix       : constant Uint := Machine_Radix_Value (Id);
!       Mantissa    : constant Uint := Machine_Mantissa_Value (Id);
!       Emax        : constant Uint := Safe_Emax_Value (Id);
!       Significand : constant Uint := Radix ** Mantissa - 1;
!       Exponent    : constant Uint := Emax - Mantissa;
! 
!    begin
!       if Radix = 2 then
!          return
!            UR_From_Components
!              (Num   => Significand * 2 ** (Exponent mod 4),
!               Den   => -Exponent / 4,
!               Rbase => 16);
!       else
!          return
!            UR_From_Components
!              (Num => Significand,
!               Den => -Exponent,
!               Rbase => 16);
!       end if;
!    end Safe_Last_Value;
! 
!    -----------------
!    -- Scope_Depth --
!    -----------------
! 
!    function Scope_Depth (Id : E) return Uint is
!       Scop : Entity_Id;
! 
!    begin
!       Scop := Id;
!       while Is_Record_Type (Scop) loop
!          Scop := Scope (Scop);
!       end loop;
! 
!       return Scope_Depth_Value (Scop);
!    end Scope_Depth;
! 
!    ---------------------
!    -- Scope_Depth_Set --
!    ---------------------
! 
!    function Scope_Depth_Set (Id : E) return B is
!    begin
!       return not Is_Record_Type (Id)
!         and then Field22 (Id) /= Union_Id (Empty);
!    end Scope_Depth_Set;
! 
!    -----------------------------
!    -- Set_Component_Alignment --
!    -----------------------------
! 
!    --  Component Alignment is encoded using two flags, Flag128/129 as
!    --  follows. Note that both flags False = Align_Default, so that the
!    --  default initialization of flags to False initializes component
!    --  alignment to the default value as required.
! 
!    --     Flag128      Flag129      Value
!    --     -------      -------      -----
!    --      False        False       Calign_Default
!    --      False        True        Calign_Component_Size
!    --      True         False       Calign_Component_Size_4
!    --      True         True        Calign_Storage_Unit
! 
!    procedure Set_Component_Alignment (Id : E; V : C) is
!    begin
!       pragma Assert ((Is_Array_Type (Id) or else Is_Record_Type (Id))
!                        and then Is_Base_Type (Id));
! 
!       case V is
!          when Calign_Default =>
!             Set_Flag128 (Id, False);
!             Set_Flag129 (Id, False);
! 
!          when Calign_Component_Size =>
!             Set_Flag128 (Id, False);
!             Set_Flag129 (Id, True);
! 
!          when Calign_Component_Size_4 =>
!             Set_Flag128 (Id, True);
!             Set_Flag129 (Id, False);
! 
!          when Calign_Storage_Unit =>
!             Set_Flag128 (Id, True);
!             Set_Flag129 (Id, True);
!       end case;
!    end Set_Component_Alignment;
! 
!    -----------------------
!    -- Set_DIC_Procedure --
!    -----------------------
! 
!    procedure Set_DIC_Procedure (Id : E; V : E) is
!       Base_Typ  : Entity_Id;
!       Subps     : Elist_Id;
! 
!    begin
!       pragma Assert (Is_Type (Id));
! 
!       Base_Typ := Base_Type (Id);
!       Subps    := Subprograms_For_Type (Base_Typ);
! 
!       if No (Subps) then
!          Subps := New_Elmt_List;
!          Set_Subprograms_For_Type (Base_Typ, Subps);
!       end if;
! 
!       Prepend_Elmt (V, Subps);
!    end Set_DIC_Procedure;
! 
!    -------------------------------------
!    -- Set_Partial_Invariant_Procedure --
!    -------------------------------------
! 
!    procedure Set_Partial_DIC_Procedure (Id : E; V : E) is
!    begin
!       Set_DIC_Procedure (Id, V);
!    end Set_Partial_DIC_Procedure;
! 
!    -----------------------------
!    -- Set_Invariant_Procedure --
!    -----------------------------
! 
!    procedure Set_Invariant_Procedure (Id : E; V : E) is
!       Base_Typ  : Entity_Id;
!       Subp_Elmt : Elmt_Id;
!       Subp_Id   : Entity_Id;
!       Subps     : Elist_Id;
! 
!    begin
!       pragma Assert (Is_Type (Id));
! 
!       Base_Typ := Base_Type (Id);
!       Subps    := Subprograms_For_Type (Base_Typ);
! 
!       if No (Subps) then
!          Subps := New_Elmt_List;
!          Set_Subprograms_For_Type (Base_Typ, Subps);
!       end if;
! 
!       Subp_Elmt := First_Elmt (Subps);
!       Prepend_Elmt (V, Subps);
! 
!       --  Check for a duplicate invariant procedure
! 
!       while Present (Subp_Elmt) loop
!          Subp_Id := Node (Subp_Elmt);
! 
!          if Is_Invariant_Procedure (Subp_Id) then
!             raise Program_Error;
!          end if;
! 
!          Next_Elmt (Subp_Elmt);
!       end loop;
!    end Set_Invariant_Procedure;
! 
!    -------------------------------------
!    -- Set_Partial_Invariant_Procedure --
!    -------------------------------------
! 
!    procedure Set_Partial_Invariant_Procedure (Id : E; V : E) is
!       Base_Typ  : Entity_Id;
!       Subp_Elmt : Elmt_Id;
!       Subp_Id   : Entity_Id;
!       Subps     : Elist_Id;
! 
!    begin
!       pragma Assert (Is_Type (Id));
! 
!       Base_Typ := Base_Type (Id);
!       Subps    := Subprograms_For_Type (Base_Typ);
! 
!       if No (Subps) then
!          Subps := New_Elmt_List;
!          Set_Subprograms_For_Type (Base_Typ, Subps);
!       end if;
! 
!       Subp_Elmt := First_Elmt (Subps);
!       Prepend_Elmt (V, Subps);
! 
!       --  Check for a duplicate partial invariant procedure
! 
!       while Present (Subp_Elmt) loop
!          Subp_Id := Node (Subp_Elmt);
! 
!          if Is_Partial_Invariant_Procedure (Subp_Id) then
!             raise Program_Error;
!          end if;
! 
!          Next_Elmt (Subp_Elmt);
!       end loop;
!    end Set_Partial_Invariant_Procedure;
! 
!    ----------------------------
!    -- Set_Predicate_Function --
!    ----------------------------
! 
!    procedure Set_Predicate_Function (Id : E; V : E) is
!       Subp_Elmt : Elmt_Id;
!       Subp_Id   : Entity_Id;
!       Subps     : Elist_Id;
! 
!    begin
!       pragma Assert (Is_Type (Id) and then Has_Predicates (Id));
! 
!       Subps := Subprograms_For_Type (Id);
! 
!       if No (Subps) then
!          Subps := New_Elmt_List;
!          Set_Subprograms_For_Type (Id, Subps);
!       end if;
! 
!       Subp_Elmt := First_Elmt (Subps);
!       Prepend_Elmt (V, Subps);
! 
!       --  Check for a duplicate predication function
! 
!       while Present (Subp_Elmt) loop
!          Subp_Id := Node (Subp_Elmt);
! 
!          if Ekind (Subp_Id) = E_Function
!            and then Is_Predicate_Function (Subp_Id)
!          then
!             raise Program_Error;
!          end if;
! 
!          Next_Elmt (Subp_Elmt);
!       end loop;
!    end Set_Predicate_Function;
! 
!    ------------------------------
!    -- Set_Predicate_Function_M --
!    ------------------------------
! 
!    procedure Set_Predicate_Function_M (Id : E; V : E) is
!       Subp_Elmt : Elmt_Id;
!       Subp_Id   : Entity_Id;
!       Subps     : Elist_Id;
! 
!    begin
!       pragma Assert (Is_Type (Id) and then Has_Predicates (Id));
! 
!       Subps := Subprograms_For_Type (Id);
! 
!       if No (Subps) then
!          Subps := New_Elmt_List;
!          Set_Subprograms_For_Type (Id, Subps);
!       end if;
! 
!       Subp_Elmt := First_Elmt (Subps);
!       Prepend_Elmt (V, Subps);
! 
!       --  Check for a duplicate predication function
! 
!       while Present (Subp_Elmt) loop
!          Subp_Id := Node (Subp_Elmt);
! 
!          if Ekind (Subp_Id) = E_Function
!            and then Is_Predicate_Function_M (Subp_Id)
!          then
!             raise Program_Error;
!          end if;
! 
!          Next_Elmt (Subp_Elmt);
!       end loop;
!    end Set_Predicate_Function_M;
! 
!    -----------------
!    -- Size_Clause --
!    -----------------
! 
!    function Size_Clause (Id : E) return N is
!    begin
!       return Get_Attribute_Definition_Clause (Id, Attribute_Size);
!    end Size_Clause;
! 
!    ------------------------
!    -- Stream_Size_Clause --
!    ------------------------
! 
!    function Stream_Size_Clause (Id : E) return N is
!    begin
!       return Get_Attribute_Definition_Clause (Id, Attribute_Stream_Size);
!    end Stream_Size_Clause;
! 
!    ------------------
!    -- Subtype_Kind --
!    ------------------
! 
!    function Subtype_Kind (K : Entity_Kind) return Entity_Kind is
!       Kind : Entity_Kind;
! 
!    begin
!       case K is
!          when Access_Kind =>
!             Kind := E_Access_Subtype;
! 
!          when E_Array_Subtype
!             | E_Array_Type
!          =>
!             Kind := E_Array_Subtype;
! 
!          when E_Class_Wide_Subtype
!             | E_Class_Wide_Type
!          =>
!             Kind := E_Class_Wide_Subtype;
! 
!          when E_Decimal_Fixed_Point_Subtype
!             | E_Decimal_Fixed_Point_Type
!          =>
!             Kind := E_Decimal_Fixed_Point_Subtype;
! 
!          when E_Ordinary_Fixed_Point_Subtype
!             | E_Ordinary_Fixed_Point_Type
!          =>
!             Kind := E_Ordinary_Fixed_Point_Subtype;
! 
!          when E_Private_Subtype
!             | E_Private_Type
!          =>
!             Kind := E_Private_Subtype;
! 
!          when E_Limited_Private_Subtype
!             | E_Limited_Private_Type
!          =>
!             Kind := E_Limited_Private_Subtype;
! 
!          when E_Record_Subtype_With_Private
!             | E_Record_Type_With_Private
!          =>
!             Kind := E_Record_Subtype_With_Private;
! 
!          when E_Record_Subtype
!             | E_Record_Type
!          =>
!             Kind := E_Record_Subtype;
! 
!          when Enumeration_Kind =>
!             Kind := E_Enumeration_Subtype;
! 
!          when E_Incomplete_Type =>
!             Kind := E_Incomplete_Subtype;
! 
!          when Float_Kind =>
!             Kind := E_Floating_Point_Subtype;
! 
!          when Signed_Integer_Kind =>
!             Kind := E_Signed_Integer_Subtype;
! 
!          when Modular_Integer_Kind =>
!             Kind := E_Modular_Integer_Subtype;
! 
!          when Protected_Kind =>
!             Kind := E_Protected_Subtype;
! 
!          when Task_Kind =>
!             Kind := E_Task_Subtype;
! 
!          when others =>
!             Kind := E_Void;
!             raise Program_Error;
!       end case;
! 
!       return Kind;
!    end Subtype_Kind;
! 
!    ---------------------
!    -- Type_High_Bound --
!    ---------------------
! 
!    function Type_High_Bound (Id : E) return Node_Id is
!       Rng : constant Node_Id := Scalar_Range (Id);
!    begin
!       if Nkind (Rng) = N_Subtype_Indication then
!          return High_Bound (Range_Expression (Constraint (Rng)));
!       else
!          return High_Bound (Rng);
!       end if;
!    end Type_High_Bound;
! 
!    --------------------
!    -- Type_Low_Bound --
!    --------------------
! 
!    function Type_Low_Bound (Id : E) return Node_Id is
!       Rng : constant Node_Id := Scalar_Range (Id);
!    begin
!       if Nkind (Rng) = N_Subtype_Indication then
!          return Low_Bound (Range_Expression (Constraint (Rng)));
!       else
!          return Low_Bound (Rng);
!       end if;
!    end Type_Low_Bound;
! 
!    ---------------------
!    -- Underlying_Type --
!    ---------------------
! 
!    function Underlying_Type (Id : E) return E is
!    begin
!       --  For record_with_private the underlying type is always the direct full
!       --  view. Never try to take the full view of the parent it does not make
!       --  sense.
! 
!       if Ekind (Id) = E_Record_Type_With_Private then
!          return Full_View (Id);
! 
!       --  If we have a class-wide type that comes from the limited view then we
!       --  return the Underlying_Type of its nonlimited view.
! 
!       elsif Ekind (Id) = E_Class_Wide_Type
!         and then From_Limited_With (Id)
!         and then Present (Non_Limited_View (Id))
!       then
!          return Underlying_Type (Non_Limited_View (Id));
! 
!       elsif Ekind (Id) in Incomplete_Or_Private_Kind then
! 
!          --  If we have an incomplete or private type with a full view, then we
!          --  return the Underlying_Type of this full view.
! 
!          if Present (Full_View (Id)) then
!             if Id = Full_View (Id) then
! 
!                --  Previous error in declaration
! 
!                return Empty;
! 
!             else
!                return Underlying_Type (Full_View (Id));
!             end if;
! 
!          --  If we have a private type with an underlying full view, then we
!          --  return the Underlying_Type of this underlying full view.
! 
!          elsif Ekind (Id) in Private_Kind
!            and then Present (Underlying_Full_View (Id))
!          then
!             return Underlying_Type (Underlying_Full_View (Id));
! 
!          --  If we have an incomplete entity that comes from the limited view
!          --  then we return the Underlying_Type of its nonlimited view.
! 
!          elsif From_Limited_With (Id)
!            and then Present (Non_Limited_View (Id))
!          then
!             return Underlying_Type (Non_Limited_View (Id));
! 
!          --  Otherwise check for the case where we have a derived type or
!          --  subtype, and if so get the Underlying_Type of the parent type.
! 
!          elsif Etype (Id) /= Id then
!             return Underlying_Type (Etype (Id));
! 
!          --  Otherwise we have an incomplete or private type that has no full
!          --  view, which means that we have not encountered the completion, so
!          --  return Empty to indicate the underlying type is not yet known.
! 
!          else
!             return Empty;
!          end if;
! 
!       --  For non-incomplete, non-private types, return the type itself. Also
!       --  for entities that are not types at all return the entity itself.
! 
!       else
!          return Id;
!       end if;
!    end Underlying_Type;
! 
!    ------------------------
!    -- Unlink_Next_Entity --
!    ------------------------
! 
!    procedure Unlink_Next_Entity (Id : Entity_Id) is
!       Next : constant Entity_Id := Next_Entity (Id);
! 
!    begin
!       if Present (Next) then
!          Set_Prev_Entity (Next, Empty);  --  Empty <-- Next
!       end if;
! 
!       Set_Next_Entity (Id, Empty);       --  Id --> Empty
!    end Unlink_Next_Entity;
! 
!    ------------------------
!    -- Write_Entity_Flags --
!    ------------------------
! 
!    procedure Write_Entity_Flags (Id : Entity_Id; Prefix : String) is
! 
!       procedure W (Flag_Name : String; Flag : Boolean);
!       --  Write out given flag if it is set
! 
!       -------
!       -- W --
!       -------
! 
!       procedure W (Flag_Name : String; Flag : Boolean) is
!       begin
!          if Flag then
!             Write_Str (Prefix);
!             Write_Str (Flag_Name);
!             Write_Str (" = True");
!             Write_Eol;
!          end if;
!       end W;
! 
!    --  Start of processing for Write_Entity_Flags
! 
!    begin
!       if (Is_Array_Type (Id) or else Is_Record_Type (Id))
!         and then Is_Base_Type (Id)
!       then
!          Write_Str (Prefix);
!          Write_Str ("Component_Alignment = ");
! 
!          case Component_Alignment (Id) is
!             when Calign_Default =>
!                Write_Str ("Calign_Default");
! 
!             when Calign_Component_Size =>
!                Write_Str ("Calign_Component_Size");
! 
!             when Calign_Component_Size_4 =>
!                Write_Str ("Calign_Component_Size_4");
! 
!             when Calign_Storage_Unit =>
!                Write_Str ("Calign_Storage_Unit");
!          end case;
! 
!          Write_Eol;
!       end if;
! 
!       W ("Address_Taken",                   Flag104 (Id));
!       W ("Body_Needed_For_Inlining",        Flag299 (Id));
!       W ("Body_Needed_For_SAL",             Flag40  (Id));
!       W ("C_Pass_By_Copy",                  Flag125 (Id));
!       W ("Can_Never_Be_Null",               Flag38  (Id));
!       W ("Checks_May_Be_Suppressed",        Flag31  (Id));
!       W ("Contains_Ignored_Ghost_Code",     Flag279 (Id));
!       W ("Debug_Info_Off",                  Flag166 (Id));
!       W ("Default_Expressions_Processed",   Flag108 (Id));
!       W ("Delay_Cleanups",                  Flag114 (Id));
!       W ("Delay_Subprogram_Descriptors",    Flag50  (Id));
!       W ("Depends_On_Private",              Flag14  (Id));
!       W ("Discard_Names",                   Flag88  (Id));
!       W ("Elaboration_Entity_Required",     Flag174 (Id));
!       W ("Elaborate_Body_Desirable",        Flag210 (Id));
!       W ("Entry_Accepted",                  Flag152 (Id));
!       W ("Can_Use_Internal_Rep",            Flag229 (Id));
!       W ("Finalize_Storage_Only",           Flag158 (Id));
!       W ("From_Limited_With",               Flag159 (Id));
!       W ("Has_Aliased_Components",          Flag135 (Id));
!       W ("Has_Alignment_Clause",            Flag46  (Id));
!       W ("Has_All_Calls_Remote",            Flag79  (Id));
!       W ("Has_Atomic_Components",           Flag86  (Id));
!       W ("Has_Biased_Representation",       Flag139 (Id));
!       W ("Has_Completion",                  Flag26  (Id));
!       W ("Has_Completion_In_Body",          Flag71  (Id));
!       W ("Has_Complex_Representation",      Flag140 (Id));
!       W ("Has_Component_Size_Clause",       Flag68  (Id));
!       W ("Has_Contiguous_Rep",              Flag181 (Id));
!       W ("Has_Controlled_Component",        Flag43  (Id));
!       W ("Has_Controlling_Result",          Flag98  (Id));
!       W ("Has_Convention_Pragma",           Flag119 (Id));
!       W ("Has_Default_Aspect",              Flag39  (Id));
!       W ("Has_Delayed_Aspects",             Flag200 (Id));
!       W ("Has_Delayed_Freeze",              Flag18  (Id));
!       W ("Has_Delayed_Rep_Aspects",         Flag261 (Id));
!       W ("Has_Discriminants",               Flag5   (Id));
!       W ("Has_Dispatch_Table",              Flag220 (Id));
!       W ("Has_Dynamic_Predicate_Aspect",    Flag258 (Id));
!       W ("Has_Enumeration_Rep_Clause",      Flag66  (Id));
!       W ("Has_Exit",                        Flag47  (Id));
!       W ("Has_Expanded_Contract",           Flag240 (Id));
!       W ("Has_Forward_Instantiation",       Flag175 (Id));
!       W ("Has_Fully_Qualified_Name",        Flag173 (Id));
!       W ("Has_Gigi_Rep_Item",               Flag82  (Id));
!       W ("Has_Homonym",                     Flag56  (Id));
!       W ("Has_Implicit_Dereference",        Flag251 (Id));
!       W ("Has_Independent_Components",      Flag34  (Id));
!       W ("Has_Inheritable_Invariants",      Flag248 (Id));
!       W ("Has_Inherited_DIC",               Flag133 (Id));
!       W ("Has_Inherited_Invariants",        Flag291 (Id));
!       W ("Has_Initial_Value",               Flag219 (Id));
!       W ("Has_Loop_Entry_Attributes",       Flag260 (Id));
!       W ("Has_Machine_Radix_Clause",        Flag83  (Id));
!       W ("Has_Master_Entity",               Flag21  (Id));
!       W ("Has_Missing_Return",              Flag142 (Id));
!       W ("Has_Nested_Block_With_Handler",   Flag101 (Id));
!       W ("Has_Nested_Subprogram",           Flag282 (Id));
!       W ("Has_Non_Standard_Rep",            Flag75  (Id));
!       W ("Has_Out_Or_In_Out_Parameter",     Flag110 (Id));
!       W ("Has_Object_Size_Clause",          Flag172 (Id));
!       W ("Has_Own_DIC",                     Flag3   (Id));
!       W ("Has_Own_Invariants",              Flag232 (Id));
!       W ("Has_Per_Object_Constraint",       Flag154 (Id));
!       W ("Has_Pragma_Controlled",           Flag27  (Id));
!       W ("Has_Pragma_Elaborate_Body",       Flag150 (Id));
!       W ("Has_Pragma_Inline",               Flag157 (Id));
!       W ("Has_Pragma_Inline_Always",        Flag230 (Id));
!       W ("Has_Pragma_No_Inline",            Flag201 (Id));
!       W ("Has_Pragma_Ordered",              Flag198 (Id));
!       W ("Has_Pragma_Pack",                 Flag121 (Id));
!       W ("Has_Pragma_Preelab_Init",         Flag221 (Id));
!       W ("Has_Pragma_Pure",                 Flag203 (Id));
!       W ("Has_Pragma_Pure_Function",        Flag179 (Id));
!       W ("Has_Pragma_Thread_Local_Storage", Flag169 (Id));
!       W ("Has_Pragma_Unmodified",           Flag233 (Id));
!       W ("Has_Pragma_Unreferenced",         Flag180 (Id));
!       W ("Has_Pragma_Unreferenced_Objects", Flag212 (Id));
!       W ("Has_Pragma_Unused",               Flag294 (Id));
!       W ("Has_Predicates",                  Flag250 (Id));
!       W ("Has_Primitive_Operations",        Flag120 (Id));
!       W ("Has_Private_Ancestor",            Flag151 (Id));
!       W ("Has_Private_Declaration",         Flag155 (Id));
!       W ("Has_Private_Extension",           Flag300 (Id));
!       W ("Has_Protected",                   Flag271 (Id));
!       W ("Has_Qualified_Name",              Flag161 (Id));
!       W ("Has_RACW",                        Flag214 (Id));
!       W ("Has_Record_Rep_Clause",           Flag65  (Id));
!       W ("Has_Recursive_Call",              Flag143 (Id));
!       W ("Has_Shift_Operator",              Flag267 (Id));
!       W ("Has_Size_Clause",                 Flag29  (Id));
!       W ("Has_Small_Clause",                Flag67  (Id));
!       W ("Has_Specified_Layout",            Flag100 (Id));
!       W ("Has_Specified_Stream_Input",      Flag190 (Id));
!       W ("Has_Specified_Stream_Output",     Flag191 (Id));
!       W ("Has_Specified_Stream_Read",       Flag192 (Id));
!       W ("Has_Specified_Stream_Write",      Flag193 (Id));
!       W ("Has_Static_Discriminants",        Flag211 (Id));
!       W ("Has_Static_Predicate",            Flag269 (Id));
!       W ("Has_Static_Predicate_Aspect",     Flag259 (Id));
!       W ("Has_Storage_Size_Clause",         Flag23  (Id));
!       W ("Has_Stream_Size_Clause",          Flag184 (Id));
!       W ("Has_Task",                        Flag30  (Id));
!       W ("Has_Timing_Event",                Flag289 (Id));
!       W ("Has_Thunks",                      Flag228 (Id));
!       W ("Has_Unchecked_Union",             Flag123 (Id));
!       W ("Has_Unknown_Discriminants",       Flag72  (Id));
!       W ("Has_Visible_Refinement",          Flag263 (Id));
!       W ("Has_Volatile_Components",         Flag87  (Id));
!       W ("Has_Xref_Entry",                  Flag182 (Id));
!       W ("Has_Yield_Aspect",                Flag308 (Id));
!       W ("Ignore_SPARK_Mode_Pragmas",       Flag301 (Id));
!       W ("In_Package_Body",                 Flag48  (Id));
!       W ("In_Private_Part",                 Flag45  (Id));
!       W ("In_Use",                          Flag8   (Id));
!       W ("Is_Abstract_Subprogram",          Flag19  (Id));
!       W ("Is_Abstract_Type",                Flag146 (Id));
!       W ("Is_Access_Constant",              Flag69  (Id));
!       W ("Is_Activation_Record",            Flag305 (Id));
!       W ("Is_Actual_Subtype",               Flag293 (Id));
!       W ("Is_Ada_2005_Only",                Flag185 (Id));
!       W ("Is_Ada_2012_Only",                Flag199 (Id));
!       W ("Is_Aliased",                      Flag15  (Id));
!       W ("Is_Asynchronous",                 Flag81  (Id));
!       W ("Is_Atomic",                       Flag85  (Id));
!       W ("Is_Bit_Packed_Array",             Flag122 (Id));
!       W ("Is_CPP_Class",                    Flag74  (Id));
!       W ("Is_CUDA_Kernel",                  Flag118  (Id));
!       W ("Is_Called",                       Flag102 (Id));
!       W ("Is_Character_Type",               Flag63  (Id));
!       W ("Is_Checked_Ghost_Entity",         Flag277 (Id));
!       W ("Is_Child_Unit",                   Flag73  (Id));
!       W ("Is_Class_Wide_Equivalent_Type",   Flag35  (Id));
!       W ("Is_Compilation_Unit",             Flag149 (Id));
!       W ("Is_Completely_Hidden",            Flag103 (Id));
!       W ("Is_Concurrent_Record_Type",       Flag20  (Id));
!       W ("Is_Constr_Subt_For_UN_Aliased",   Flag141 (Id));
!       W ("Is_Constr_Subt_For_U_Nominal",    Flag80  (Id));
!       W ("Is_Constrained",                  Flag12  (Id));
!       W ("Is_Constructor",                  Flag76  (Id));
!       W ("Is_Controlled_Active",            Flag42  (Id));
!       W ("Is_Controlling_Formal",           Flag97  (Id));
!       W ("Is_Descendant_Of_Address",        Flag223 (Id));
!       W ("Is_DIC_Procedure",                Flag132 (Id));
!       W ("Is_Discrim_SO_Function",          Flag176 (Id));
!       W ("Is_Discriminant_Check_Function",  Flag264 (Id));
!       W ("Is_Dispatch_Table_Entity",        Flag234 (Id));
!       W ("Is_Dispatching_Operation",        Flag6   (Id));
!       W ("Is_Elaboration_Checks_OK_Id",     Flag148 (Id));
!       W ("Is_Elaboration_Warnings_OK_Id",   Flag304 (Id));
!       W ("Is_Eliminated",                   Flag124 (Id));
!       W ("Is_Entry_Formal",                 Flag52  (Id));
!       W ("Is_Exception_Handler",            Flag286 (Id));
!       W ("Is_Exported",                     Flag99  (Id));
!       W ("Is_Finalized_Transient",          Flag252 (Id));
!       W ("Is_First_Subtype",                Flag70  (Id));
!       W ("Is_Formal_Subprogram",            Flag111 (Id));
!       W ("Is_Frozen",                       Flag4   (Id));
!       W ("Is_Generic_Actual_Subprogram",    Flag274 (Id));
!       W ("Is_Generic_Actual_Type",          Flag94  (Id));
!       W ("Is_Generic_Instance",             Flag130 (Id));
!       W ("Is_Generic_Type",                 Flag13  (Id));
!       W ("Is_Hidden",                       Flag57  (Id));
!       W ("Is_Hidden_Non_Overridden_Subpgm", Flag2   (Id));
!       W ("Is_Hidden_Open_Scope",            Flag171 (Id));
!       W ("Is_Ignored_Ghost_Entity",         Flag278 (Id));
!       W ("Is_Ignored_Transient",            Flag295 (Id));
!       W ("Is_Immediately_Visible",          Flag7   (Id));
!       W ("Is_Implementation_Defined",       Flag254 (Id));
!       W ("Is_Imported",                     Flag24  (Id));
!       W ("Is_Independent",                  Flag268 (Id));
!       W ("Is_Initial_Condition_Procedure",  Flag302 (Id));
!       W ("Is_Inlined",                      Flag11  (Id));
!       W ("Is_Inlined_Always",               Flag1   (Id));
!       W ("Is_Instantiated",                 Flag126 (Id));
!       W ("Is_Interface",                    Flag186 (Id));
!       W ("Is_Internal",                     Flag17  (Id));
!       W ("Is_Interrupt_Handler",            Flag89  (Id));
!       W ("Is_Intrinsic_Subprogram",         Flag64  (Id));
!       W ("Is_Invariant_Procedure",          Flag257 (Id));
!       W ("Is_Itype",                        Flag91  (Id));
!       W ("Is_Known_Non_Null",               Flag37  (Id));
!       W ("Is_Known_Null",                   Flag204 (Id));
!       W ("Is_Known_Valid",                  Flag170 (Id));
!       W ("Is_Limited_Composite",            Flag106 (Id));
!       W ("Is_Limited_Interface",            Flag197 (Id));
!       W ("Is_Limited_Record",               Flag25  (Id));
!       W ("Is_Local_Anonymous_Access",       Flag194 (Id));
!       W ("Is_Loop_Parameter",               Flag307 (Id));
!       W ("Is_Machine_Code_Subprogram",      Flag137 (Id));
!       W ("Is_Non_Static_Subtype",           Flag109 (Id));
!       W ("Is_Null_Init_Proc",               Flag178 (Id));
!       W ("Is_Obsolescent",                  Flag153 (Id));
!       W ("Is_Only_Out_Parameter",           Flag226 (Id));
!       W ("Is_Package_Body_Entity",          Flag160 (Id));
!       W ("Is_Packed",                       Flag51  (Id));
!       W ("Is_Packed_Array_Impl_Type",       Flag138 (Id));
!       W ("Is_Param_Block_Component_Type",   Flag215 (Id));
!       W ("Is_Partial_Invariant_Procedure",  Flag292 (Id));
!       W ("Is_Potentially_Use_Visible",      Flag9   (Id));
!       W ("Is_Predicate_Function",           Flag255 (Id));
!       W ("Is_Predicate_Function_M",         Flag256 (Id));
!       W ("Is_Preelaborated",                Flag59  (Id));
!       W ("Is_Primitive",                    Flag218 (Id));
!       W ("Is_Primitive_Wrapper",            Flag195 (Id));
!       W ("Is_Private_Composite",            Flag107 (Id));
!       W ("Is_Private_Descendant",           Flag53  (Id));
!       W ("Is_Private_Primitive",            Flag245 (Id));
!       W ("Is_Public",                       Flag10  (Id));
!       W ("Is_Pure",                         Flag44  (Id));
!       W ("Is_Pure_Unit_Access_Type",        Flag189 (Id));
!       W ("Is_RACW_Stub_Type",               Flag244 (Id));
!       W ("Is_Raised",                       Flag224 (Id));
!       W ("Is_Remote_Call_Interface",        Flag62  (Id));
!       W ("Is_Remote_Types",                 Flag61  (Id));
!       W ("Is_Renaming_Of_Object",           Flag112 (Id));
!       W ("Is_Return_Object",                Flag209 (Id));
!       W ("Is_Safe_To_Reevaluate",           Flag249 (Id));
!       W ("Is_Shared_Passive",               Flag60  (Id));
!       W ("Is_Static_Type",                  Flag281 (Id));
!       W ("Is_Statically_Allocated",         Flag28  (Id));
!       W ("Is_Tag",                          Flag78  (Id));
!       W ("Is_Tagged_Type",                  Flag55  (Id));
!       W ("Is_Thunk",                        Flag225 (Id));
!       W ("Is_Trivial_Subprogram",           Flag235 (Id));
!       W ("Is_True_Constant",                Flag163 (Id));
!       W ("Is_Unchecked_Union",              Flag117 (Id));
!       W ("Is_Underlying_Full_View",         Flag298 (Id));
!       W ("Is_Underlying_Record_View",       Flag246 (Id));
!       W ("Is_Unimplemented",                Flag284 (Id));
!       W ("Is_Unsigned_Type",                Flag144 (Id));
!       W ("Is_Uplevel_Referenced_Entity",    Flag283 (Id));
!       W ("Is_Valued_Procedure",             Flag127 (Id));
!       W ("Is_Visible_Formal",               Flag206 (Id));
!       W ("Is_Visible_Lib_Unit",             Flag116 (Id));
!       W ("Is_Volatile",                     Flag16  (Id));
!       W ("Is_Volatile_Full_Access",         Flag285 (Id));
!       W ("Itype_Printed",                   Flag202 (Id));
!       W ("Kill_Elaboration_Checks",         Flag32  (Id));
!       W ("Kill_Range_Checks",               Flag33  (Id));
!       W ("Known_To_Have_Preelab_Init",      Flag207 (Id));
!       W ("Low_Bound_Tested",                Flag205 (Id));
!       W ("Machine_Radix_10",                Flag84  (Id));
!       W ("Materialize_Entity",              Flag168 (Id));
!       W ("May_Inherit_Delayed_Rep_Aspects", Flag262 (Id));
!       W ("Must_Be_On_Byte_Boundary",        Flag183 (Id));
!       W ("Must_Have_Preelab_Init",          Flag208 (Id));
!       W ("Needs_Activation_Record",         Flag306 (Id));
!       W ("Needs_Debug_Info",                Flag147 (Id));
!       W ("Needs_No_Actuals",                Flag22  (Id));
!       W ("Never_Set_In_Source",             Flag115 (Id));
!       W ("No_Dynamic_Predicate_On_actual",  Flag276 (Id));
!       W ("No_Pool_Assigned",                Flag131 (Id));
!       W ("No_Predicate_On_actual",          Flag275 (Id));
!       W ("No_Reordering",                   Flag239 (Id));
!       W ("No_Return",                       Flag113 (Id));
!       W ("No_Strict_Aliasing",              Flag136 (Id));
!       W ("Non_Binary_Modulus",              Flag58  (Id));
!       W ("Nonzero_Is_True",                 Flag162 (Id));
!       W ("OK_To_Rename",                    Flag247 (Id));
!       W ("Optimize_Alignment_Space",        Flag241 (Id));
!       W ("Optimize_Alignment_Time",         Flag242 (Id));
!       W ("Overlays_Constant",               Flag243 (Id));
!       W ("Partial_View_Has_Unknown_Discr",  Flag280 (Id));
!       W ("Reachable",                       Flag49  (Id));
!       W ("Referenced",                      Flag156 (Id));
!       W ("Referenced_As_LHS",               Flag36  (Id));
!       W ("Referenced_As_Out_Parameter",     Flag227 (Id));
!       W ("Renamed_In_Spec",                 Flag231 (Id));
!       W ("Requires_Overriding",             Flag213 (Id));
!       W ("Return_Present",                  Flag54  (Id));
!       W ("Returns_By_Ref",                  Flag90  (Id));
!       W ("Reverse_Bit_Order",               Flag164 (Id));
!       W ("Reverse_Storage_Order",           Flag93  (Id));
!       W ("Rewritten_For_C",                 Flag287 (Id));
!       W ("Predicates_Ignored",              Flag288 (Id));
!       W ("Sec_Stack_Needed_For_Return",     Flag167 (Id));
!       W ("Size_Depends_On_Discriminant",    Flag177 (Id));
!       W ("Size_Known_At_Compile_Time",      Flag92  (Id));
!       W ("SPARK_Aux_Pragma_Inherited",      Flag266 (Id));
!       W ("SPARK_Pragma_Inherited",          Flag265 (Id));
!       W ("SSO_Set_High_By_Default",         Flag273 (Id));
!       W ("SSO_Set_Low_By_Default",          Flag272 (Id));
!       W ("Static_Elaboration_Desired",      Flag77  (Id));
!       W ("Stores_Attribute_Old_Prefix",     Flag270 (Id));
!       W ("Strict_Alignment",                Flag145 (Id));
!       W ("Suppress_Elaboration_Warnings",   Flag303 (Id));
!       W ("Suppress_Initialization",         Flag105 (Id));
!       W ("Suppress_Style_Checks",           Flag165 (Id));
!       W ("Suppress_Value_Tracking_On_Call", Flag217 (Id));
!       W ("Treat_As_Volatile",               Flag41  (Id));
!       W ("Universal_Aliasing",              Flag216 (Id));
!       W ("Used_As_Generic_Actual",          Flag222 (Id));
!       W ("Uses_Sec_Stack",                  Flag95  (Id));
!       W ("Warnings_Off",                    Flag96  (Id));
!       W ("Warnings_Off_Used",               Flag236 (Id));
!       W ("Warnings_Off_Used_Unmodified",    Flag237 (Id));
!       W ("Warnings_Off_Used_Unreferenced",  Flag238 (Id));
!       W ("Was_Hidden",                      Flag196 (Id));
!    end Write_Entity_Flags;
! 
!    -----------------------
!    -- Write_Entity_Info --
!    -----------------------
! 
!    procedure Write_Entity_Info (Id : Entity_Id; Prefix : String) is
! 
!       procedure Write_Attribute (Which : String; Nam : E);
!       --  Write attribute value with given string name
! 
!       procedure Write_Kind (Id : Entity_Id);
!       --  Write Ekind field of entity
! 
!       ---------------------
!       -- Write_Attribute --
!       ---------------------
! 
!       procedure Write_Attribute (Which : String; Nam : E) is
!       begin
!          Write_Str (Prefix);
!          Write_Str (Which);
!          Write_Int (Int (Nam));
!          Write_Str (" ");
!          Write_Name (Chars (Nam));
!          Write_Str (" ");
!       end Write_Attribute;
! 
!       ----------------
!       -- Write_Kind --
!       ----------------
! 
!       procedure Write_Kind (Id : Entity_Id) is
!          K : constant String := Entity_Kind'Image (Ekind (Id));
! 
!       begin
!          Write_Str (Prefix);
!          Write_Str ("   Kind    ");
! 
!          if Is_Type (Id) and then Is_Tagged_Type (Id) then
!             Write_Str ("TAGGED ");
!          end if;
! 
!          Write_Str (K (3 .. K'Length));
!          Write_Str (" ");
! 
!          if Is_Type (Id) and then Depends_On_Private (Id) then
!             Write_Str ("Depends_On_Private ");
!          end if;
!       end Write_Kind;
! 
!    --  Start of processing for Write_Entity_Info
! 
!    begin
!       Write_Eol;
!       Write_Attribute ("Name ", Id);
!       Write_Int (Int (Id));
!       Write_Eol;
!       Write_Kind (Id);
!       Write_Eol;
!       Write_Attribute ("   Type    ", Etype (Id));
!       Write_Eol;
!       if Id /= Standard_Standard then
!          Write_Attribute ("   Scope   ", Scope (Id));
!       end if;
!       Write_Eol;
! 
!       case Ekind (Id) is
!          when Discrete_Kind =>
!             Write_Str ("Bounds: Id = ");
! 
!             if Present (Scalar_Range (Id)) then
!                Write_Int (Int (Type_Low_Bound (Id)));
!                Write_Str (" .. Id = ");
!                Write_Int (Int (Type_High_Bound (Id)));
!             else
!                Write_Str ("Empty");
!             end if;
! 
!             Write_Eol;
! 
!          when Array_Kind =>
!             declare
!                Index : Entity_Id;
! 
!             begin
!                Write_Attribute
!                  ("   Component Type    ", Component_Type (Id));
!                Write_Eol;
!                Write_Str (Prefix);
!                Write_Str ("   Indexes ");
! 
!                Index := First_Index (Id);
!                while Present (Index) loop
!                   Write_Attribute (" ", Etype (Index));
!                   Index := Next_Index (Index);
!                end loop;
! 
!                Write_Eol;
!             end;
! 
!          when Access_Kind =>
!                Write_Attribute
!                  ("   Directly Designated Type ",
!                   Directly_Designated_Type (Id));
!                Write_Eol;
! 
!          when Overloadable_Kind =>
!             if Present (Homonym (Id)) then
!                Write_Str ("   Homonym   ");
!                Write_Name (Chars (Homonym (Id)));
!                Write_Str ("   ");
!                Write_Int (Int (Homonym (Id)));
!                Write_Eol;
!             end if;
! 
!             Write_Eol;
! 
!          when E_Component =>
!             if Ekind (Scope (Id)) in Record_Kind then
!                Write_Attribute (
!                   "   Original_Record_Component   ",
!                   Original_Record_Component (Id));
!                Write_Int (Int (Original_Record_Component (Id)));
!                Write_Eol;
!             end if;
! 
!          when others =>
!             null;
!       end case;
!    end Write_Entity_Info;
! 
!    -----------------------
!    -- Write_Field6_Name --
!    -----------------------
! 
!    procedure Write_Field6_Name (Id : Entity_Id) is
!       pragma Unreferenced (Id);
!    begin
!       Write_Str ("First_Rep_Item");
!    end Write_Field6_Name;
! 
!    -----------------------
!    -- Write_Field7_Name --
!    -----------------------
! 
!    procedure Write_Field7_Name (Id : Entity_Id) is
!       pragma Unreferenced (Id);
!    begin
!       Write_Str ("Freeze_Node");
!    end Write_Field7_Name;
! 
!    -----------------------
!    -- Write_Field8_Name --
!    -----------------------
! 
!    procedure Write_Field8_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when Type_Kind =>
!             Write_Str ("Associated_Node_For_Itype");
! 
!          when E_Package =>
!             Write_Str ("Dependent_Instances");
! 
!          when E_Loop =>
!             Write_Str ("First_Exit_Statement");
! 
!          when E_Variable =>
!             Write_Str ("Hiding_Loop_Variable");
! 
!          when Formal_Kind
!             | E_Function
!             | E_Subprogram_Body
!          =>
!             Write_Str ("Mechanism");
! 
!          when E_Component
!             | E_Discriminant
!          =>
!             Write_Str ("Normalized_First_Bit");
! 
!          when E_Abstract_State =>
!             Write_Str ("Refinement_Constituents");
! 
!          when E_Block
!             | E_Return_Statement
!          =>
!             Write_Str ("Return_Applies_To");
! 
!          when others =>
!             Write_Str ("Field8??");
!       end case;
!    end Write_Field8_Name;
! 
!    -----------------------
!    -- Write_Field9_Name --
!    -----------------------
! 
!    procedure Write_Field9_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when Type_Kind =>
!             Write_Str ("Class_Wide_Type");
! 
!          when Object_Kind =>
!             Write_Str ("Current_Value");
! 
!          when E_Function
!             | E_Generic_Function
!             | E_Generic_Package
!             | E_Generic_Procedure
!             | E_Package
!             | E_Procedure
!          =>
!             Write_Str ("Renaming_Map");
! 
!          when others =>
!             Write_Str ("Field9??");
!       end case;
!    end Write_Field9_Name;
! 
!    ------------------------
!    -- Write_Field10_Name --
!    ------------------------
! 
!    procedure Write_Field10_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when Class_Wide_Kind
!             | Incomplete_Kind
!             | E_Record_Type
!             | E_Record_Subtype
!             | Private_Kind
!             | Concurrent_Kind
!          =>
!             Write_Str ("Direct_Primitive_Operations");
! 
!          when E_Constant
!             | E_In_Parameter
!          =>
!             Write_Str ("Discriminal_Link");
! 
!          when Float_Kind =>
!             Write_Str ("Float_Rep");
! 
!          when E_Function
!             | E_Package
!             | E_Package_Body
!             | E_Procedure
!          =>
!             Write_Str ("Handler_Records");
! 
!          when E_Component
!             | E_Discriminant
!          =>
!             Write_Str ("Normalized_Position_Max");
! 
!          when E_Abstract_State
!             | E_Variable
!          =>
!             Write_Str ("Part_Of_Constituents");
! 
!          when others =>
!             Write_Str ("Field10??");
!       end case;
!    end Write_Field10_Name;
! 
!    ------------------------
!    -- Write_Field11_Name --
!    ------------------------
! 
!    procedure Write_Field11_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Block =>
!             Write_Str ("Block_Node");
! 
!          when E_Component
!             | E_Discriminant
!          =>
!             Write_Str ("Component_Bit_Offset");
! 
!          when Formal_Kind =>
!             Write_Str ("Entry_Component");
! 
!          when E_Enumeration_Literal =>
!             Write_Str ("Enumeration_Pos");
! 
!          when Type_Kind
!             | E_Constant
!          =>
!             Write_Str ("Full_View");
! 
!          when E_Generic_Package =>
!             Write_Str ("Generic_Homonym");
! 
!          when E_Variable =>
!             Write_Str ("Part_Of_References");
! 
!          when E_Entry
!             | E_Entry_Family
!             | E_Function
!             | E_Procedure
!          =>
!             Write_Str ("Protected_Body_Subprogram");
! 
!          when others =>
!             Write_Str ("Field11??");
!       end case;
!    end Write_Field11_Name;
! 
!    ------------------------
!    -- Write_Field12_Name --
!    ------------------------
! 
!    procedure Write_Field12_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Package =>
!             Write_Str ("Associated_Formal_Package");
! 
!          when Entry_Kind =>
!             Write_Str ("Barrier_Function");
! 
!          when E_Enumeration_Literal =>
!             Write_Str ("Enumeration_Rep");
! 
!          when Type_Kind
!             | E_Component
!             | E_Constant
!             | E_Discriminant
!             | E_Exception
!             | E_In_Parameter
!             | E_In_Out_Parameter
!             | E_Out_Parameter
!             | E_Loop_Parameter
!             | E_Variable
!          =>
!             Write_Str ("Esize");
! 
!          when E_Function
!             | E_Procedure
!          =>
!             Write_Str ("Next_Inlined_Subprogram");
! 
!          when others =>
!             Write_Str ("Field12??");
!       end case;
!    end Write_Field12_Name;
! 
!    ------------------------
!    -- Write_Field13_Name --
!    ------------------------
! 
!    procedure Write_Field13_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Component
!             | E_Discriminant
!          =>
!             Write_Str ("Component_Clause");
! 
!          when E_Entry
!             | E_Entry_Family
!             | E_Function
!             | E_Procedure
!             | E_Package
!             | Generic_Unit_Kind
!          =>
!             Write_Str ("Elaboration_Entity");
! 
!          when Formal_Kind
!             | E_Variable
!          =>
!             Write_Str ("Extra_Accessibility");
! 
!          when Type_Kind =>
!             Write_Str ("RM_Size");
! 
!          when others =>
!             Write_Str ("Field13??");
!       end case;
!    end Write_Field13_Name;
! 
!    -----------------------
!    -- Write_Field14_Name --
!    -----------------------
! 
!    procedure Write_Field14_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when Type_Kind
!             | Formal_Kind
!             | E_Constant
!             | E_Exception
!             | E_Loop_Parameter
!             | E_Variable
!          =>
!             Write_Str ("Alignment");
! 
!          when E_Component
!             | E_Discriminant
!          =>
!             Write_Str ("Normalized_Position");
! 
!          when E_Entry
!             | E_Entry_Family
!             | E_Function
!             | E_Procedure
!          =>
!             Write_Str ("Postconditions_Proc");
! 
!          when others =>
!             Write_Str ("Field14??");
!       end case;
!    end Write_Field14_Name;
! 
!    ------------------------
!    -- Write_Field15_Name --
!    ------------------------
! 
!    procedure Write_Field15_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Discriminant =>
!             Write_Str ("Discriminant_Number");
! 
!          when E_Component =>
!             Write_Str ("DT_Entry_Count");
! 
!          when E_Function
!             | E_Procedure
!          =>
!             Write_Str ("DT_Position");
! 
!          when Entry_Kind =>
!             Write_Str ("Entry_Parameters_Type");
! 
!          when Formal_Kind =>
!             Write_Str ("Extra_Formal");
! 
!          when Type_Kind =>
!             Write_Str ("Pending_Access_Types");
! 
!          when E_Package
!             | E_Package_Body
!          =>
!             Write_Str ("Related_Instance");
! 
!          when E_Constant
!             | E_Loop_Parameter
!             | E_Variable
!          =>
!             Write_Str ("Status_Flag_Or_Transient_Decl");
! 
!          when others =>
!             Write_Str ("Field15??");
!       end case;
!    end Write_Field15_Name;
! 
!    ------------------------
!    -- Write_Field16_Name --
!    ------------------------
! 
!    procedure Write_Field16_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Record_Type
!             | E_Record_Type_With_Private
!          =>
!             Write_Str ("Access_Disp_Table");
! 
!          when E_Abstract_State =>
!             Write_Str ("Body_References");
! 
!          when E_Class_Wide_Subtype
!             | E_Record_Subtype
!          =>
!             Write_Str ("Cloned_Subtype");
! 
!          when E_Function
!             | E_Procedure
!          =>
!             Write_Str ("DTC_Entity");
! 
!          when E_Component =>
!             Write_Str ("Entry_Formal");
! 
!          when Concurrent_Kind
!             | E_Generic_Package
!             | E_Package
!          =>
!             Write_Str ("First_Private_Entity");
! 
!          when Enumeration_Kind =>
!             Write_Str ("Lit_Strings");
! 
!          when Decimal_Fixed_Point_Kind =>
!             Write_Str ("Scale_Value");
! 
!          when E_String_Literal_Subtype =>
!             Write_Str ("String_Literal_Length");
! 
!          when E_Out_Parameter
!             | E_Variable
!          =>
!             Write_Str ("Unset_Reference");
! 
!          when others =>
!             Write_Str ("Field16??");
!       end case;
!    end Write_Field16_Name;
! 
!    ------------------------
!    -- Write_Field17_Name --
!    ------------------------
! 
!    procedure Write_Field17_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when Formal_Kind
!             | E_Constant
!             | E_Generic_In_Out_Parameter
!             | E_Variable
!          =>
!             Write_Str ("Actual_Subtype");
! 
!          when Digits_Kind =>
!             Write_Str ("Digits_Value");
! 
!          when E_Discriminant =>
!             Write_Str ("Discriminal");
! 
!          when Class_Wide_Kind
!             | Concurrent_Kind
!             | Private_Kind
!             | E_Block
!             | E_Entry
!             | E_Entry_Family
!             | E_Function
!             | E_Generic_Function
!             | E_Generic_Package
!             | E_Generic_Procedure
!             | E_Loop
!             | E_Operator
!             | E_Package
!             | E_Package_Body
!             | E_Procedure
!             | E_Record_Type
!             | E_Record_Subtype
!             | E_Return_Statement
!             | E_Subprogram_Body
!             | E_Subprogram_Type
!          =>
!             Write_Str ("First_Entity");
! 
!          when Array_Kind =>
!             Write_Str ("First_Index");
! 
!          when Enumeration_Kind =>
!             Write_Str ("First_Literal");
! 
!          when Access_Kind =>
!             Write_Str ("Master_Id");
! 
!          when Modular_Integer_Kind =>
!             Write_Str ("Modulus");
! 
!          when E_Component =>
!             Write_Str ("Prival");
! 
!          when others =>
!             Write_Str ("Field17??");
!       end case;
!    end Write_Field17_Name;
! 
!    ------------------------
!    -- Write_Field18_Name --
!    ------------------------
! 
!    procedure Write_Field18_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Enumeration_Literal
!             | E_Function
!             | E_Operator
!             | E_Procedure
!          =>
!             Write_Str ("Alias");
! 
!          when E_Record_Type =>
!             Write_Str ("Corresponding_Concurrent_Type");
! 
!          when E_Subprogram_Body =>
!             Write_Str ("Corresponding_Protected_Entry");
! 
!          when Concurrent_Kind =>
!             Write_Str ("Corresponding_Record_Type");
! 
!          when E_Block
!             | E_Label
!             | E_Loop
!          =>
!             Write_Str ("Enclosing_Scope");
! 
!          when E_Entry_Index_Parameter =>
!             Write_Str ("Entry_Index_Constant");
! 
!          when E_Access_Protected_Subprogram_Type
!             | E_Access_Subprogram_Type
!             | E_Anonymous_Access_Protected_Subprogram_Type
!             | E_Exception_Type
!             | E_Class_Wide_Subtype
!          =>
!             Write_Str ("Equivalent_Type");
! 
!          when Fixed_Point_Kind =>
!             Write_Str ("Delta_Value");
! 
!          when Enumeration_Kind =>
!             Write_Str ("Lit_Indexes");
! 
!          when Incomplete_Or_Private_Kind
!             | E_Record_Subtype
!          =>
!             Write_Str ("Private_Dependents");
! 
!          when E_Exception
!             | E_Generic_Function
!             | E_Generic_Package
!             | E_Generic_Procedure
!             | E_Package
!          =>
!             Write_Str ("Renamed_Entity");
! 
!          when Object_Kind =>
!             Write_Str ("Renamed_Object");
! 
!          when E_String_Literal_Subtype =>
!             Write_Str ("String_Literal_Low_Bound");
! 
!          when others =>
!             Write_Str ("Field18??");
!       end case;
!    end Write_Field18_Name;
! 
!    -----------------------
!    -- Write_Field19_Name --
!    -----------------------
! 
!    procedure Write_Field19_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Generic_Package
!             | E_Package
!          =>
!             Write_Str ("Body_Entity");
! 
!          when E_Discriminant =>
!             Write_Str ("Corresponding_Discriminant");
! 
!          when Scalar_Kind =>
!             Write_Str ("Default_Aspect_Value");
! 
!          when E_Array_Type =>
!             Write_Str ("Default_Component_Value");
! 
!          when E_Protected_Type =>
!             Write_Str ("Entry_Bodies_Array");
! 
!          when E_Function
!             | E_Operator
!             | E_Subprogram_Type
!          =>
!             Write_Str ("Extra_Accessibility_Of_Result");
! 
!          when E_Abstract_State
!             | E_Class_Wide_Type
!             | E_Incomplete_Type
!          =>
!             Write_Str ("Non_Limited_View");
! 
!          when E_Incomplete_Subtype =>
!             if From_Limited_With (Id) then
!                Write_Str ("Non_Limited_View");
!             end if;
! 
!          when E_Record_Type =>
!             Write_Str ("Parent_Subtype");
! 
!          when E_Procedure =>
!             Write_Str ("Receiving_Entry");
! 
!          when E_Constant
!             | E_Variable
!          =>
!             Write_Str ("Size_Check_Code");
! 
!          when Formal_Kind
!             | E_Package_Body
!          =>
!             Write_Str ("Spec_Entity");
! 
!          when Private_Kind =>
!             Write_Str ("Underlying_Full_View");
! 
!          when others =>
!             Write_Str ("Field19??");
!       end case;
!    end Write_Field19_Name;
! 
!    -----------------------
!    -- Write_Field20_Name --
!    -----------------------
! 
!    procedure Write_Field20_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when Array_Kind =>
!             Write_Str ("Component_Type");
! 
!          when E_Generic_In_Parameter
!             | E_In_Parameter
!          =>
!             Write_Str ("Default_Value");
! 
!          when Access_Kind =>
!             Write_Str ("Directly_Designated_Type");
! 
!          when E_Component =>
!             Write_Str ("Discriminant_Checking_Func");
! 
!          when E_Discriminant =>
!             Write_Str ("Discriminant_Default_Value");
! 
!          when Class_Wide_Kind
!             | Concurrent_Kind
!             | Private_Kind
!             | E_Block
!             | E_Entry
!             | E_Entry_Family
!             | E_Function
!             | E_Generic_Function
!             | E_Generic_Package
!             | E_Generic_Procedure
!             | E_Loop
!             | E_Operator
!             | E_Package
!             | E_Package_Body
!             | E_Procedure
!             | E_Record_Type
!             | E_Record_Subtype
!             | E_Return_Statement
!             | E_Subprogram_Body
!             | E_Subprogram_Type
!          =>
!             Write_Str ("Last_Entity");
! 
!          when E_Constant
!             | E_Variable
!          =>
!             Write_Str ("Prival_Link");
! 
!          when E_Exception =>
!             Write_Str ("Register_Exception_Call");
! 
!          when Scalar_Kind =>
!             Write_Str ("Scalar_Range");
! 
!          when others =>
!             Write_Str ("Field20??");
!       end case;
!    end Write_Field20_Name;
! 
!    -----------------------
!    -- Write_Field21_Name --
!    -----------------------
! 
!    procedure Write_Field21_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when Entry_Kind =>
!             Write_Str ("Accept_Address");
! 
!          when E_Component
!             | E_Discriminant
!          =>
!             Write_Str ("Corresponding_Record_Component");
! 
!          when E_In_Parameter =>
!             Write_Str ("Default_Expr_Function");
! 
!          when Concurrent_Kind
!             | Incomplete_Or_Private_Kind
!             | Class_Wide_Kind
!             | E_Record_Type
!             | E_Record_Subtype
!          =>
!             Write_Str ("Discriminant_Constraint");
! 
!          when E_Constant
!             | E_Exception
!             | E_Function
!             | E_Generic_Function
!             | E_Generic_Procedure
!             | E_Procedure
!             | E_Variable
!          =>
!             Write_Str ("Interface_Name");
! 
!          when Array_Kind
!             | Modular_Integer_Kind
!          =>
!             Write_Str ("Original_Array_Type");
! 
!          when Fixed_Point_Kind =>
!             Write_Str ("Small_Value");
! 
!          when others =>
!             Write_Str ("Field21??");
!       end case;
!    end Write_Field21_Name;
! 
!    -----------------------
!    -- Write_Field22_Name --
!    -----------------------
! 
!    procedure Write_Field22_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when Access_Kind =>
!             Write_Str ("Associated_Storage_Pool");
! 
!          when Array_Kind =>
!             Write_Str ("Component_Size");
! 
!          when E_Record_Type =>
!             Write_Str ("Corresponding_Remote_Type");
! 
!          when E_Component
!             | E_Discriminant
!          =>
!             Write_Str ("Original_Record_Component");
! 
!          when E_Enumeration_Literal =>
!             Write_Str ("Enumeration_Rep_Expr");
! 
!          when Formal_Kind =>
!             Write_Str ("Protected_Formal");
! 
!          when Concurrent_Kind
!             | Entry_Kind
!             | Generic_Unit_Kind
!             | E_Package
!             | E_Package_Body
!             | Subprogram_Kind
!             | E_Block
!             | E_Subprogram_Body
!             | E_Private_Type .. E_Limited_Private_Subtype
!             | E_Void
!             | E_Loop
!             | E_Return_Statement
!          =>
!             Write_Str ("Scope_Depth_Value");
! 
!          when E_Variable =>
!             Write_Str ("Shared_Var_Procs_Instance");
! 
!          when others =>
!             Write_Str ("Field22??");
!       end case;
!    end Write_Field22_Name;
! 
!    ------------------------
!    -- Write_Field23_Name --
!    ------------------------
! 
!    procedure Write_Field23_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Discriminant =>
!             Write_Str ("CR_Discriminant");
! 
!          when E_Block =>
!             Write_Str ("Entry_Cancel_Parameter");
! 
!          when E_Enumeration_Type =>
!             Write_Str ("Enum_Pos_To_Rep");
! 
!          when Formal_Kind
!             | E_Variable
!          =>
!             Write_Str ("Extra_Constrained");
! 
!          when Access_Kind =>
!             Write_Str ("Finalization_Master");
! 
!          when E_Generic_Function
!             | E_Generic_Package
!             | E_Generic_Procedure
!          =>
!             Write_Str ("Inner_Instances");
! 
!          when Array_Kind =>
!             Write_Str ("Packed_Array_Impl_Type");
! 
!          when Entry_Kind =>
!             Write_Str ("Protection_Object");
! 
!          when Class_Wide_Kind
!             | Concurrent_Kind
!             | Incomplete_Or_Private_Kind
!             | E_Record_Type
!             | E_Record_Subtype
!          =>
!             Write_Str ("Stored_Constraint");
! 
!          when E_Function
!             | E_Procedure
!          =>
!             if Present (Scope (Id))
!               and then Is_Protected_Type (Scope (Id))
!             then
!                Write_Str ("Protection_Object");
!             else
!                Write_Str ("Generic_Renamings");
!             end if;
! 
!          when E_Package =>
!             if Is_Generic_Instance (Id) then
!                Write_Str ("Generic_Renamings");
!             else
!                Write_Str ("Limited_View");
!             end if;
! 
!          when others =>
!             Write_Str ("Field23??");
!       end case;
!    end Write_Field23_Name;
! 
!    ------------------------
!    -- Write_Field24_Name --
!    ------------------------
! 
!    procedure Write_Field24_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Package =>
!             Write_Str ("Incomplete_Actuals");
! 
!          when Type_Kind
!             | E_Constant
!             | E_Loop_Parameter
!             | E_Variable
!          =>
!             Write_Str ("Related_Expression");
! 
!          when Formal_Kind =>
!             Write_Str ("Minimum_Accessibility");
! 
!          when E_Function
!             | E_Operator
!             | E_Procedure
!          =>
!             Write_Str ("Subps_Index");
! 
!          when others =>
!             Write_Str ("Field24???");
!       end case;
!    end Write_Field24_Name;
! 
!    ------------------------
!    -- Write_Field25_Name --
!    ------------------------
! 
!    procedure Write_Field25_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Generic_Package
!             | E_Package
!          =>
!             Write_Str ("Abstract_States");
! 
!          when E_Entry
!             | E_Entry_Family
!          =>
!             Write_Str ("Contract_Wrapper");
! 
!          when E_Variable =>
!             Write_Str ("Debug_Renaming_Link");
! 
!          when E_Component =>
!             Write_Str ("DT_Offset_To_Top_Func");
! 
!          when E_Function
!             | E_Procedure
!          =>
!             Write_Str ("Interface_Alias");
! 
!          when E_Record_Subtype
!             | E_Record_Subtype_With_Private
!             | E_Record_Type
!             | E_Record_Type_With_Private
!          =>
!             Write_Str ("Interfaces");
! 
!          when E_Array_Subtype
!             | E_Array_Type
!          =>
!             Write_Str ("Related_Array_Object");
! 
!          when Discrete_Kind =>
!             Write_Str ("Static_Discrete_Predicate");
! 
!          when Real_Kind =>
!             Write_Str ("Static_Real_Or_String_Predicate");
! 
!          when Task_Kind =>
!             Write_Str ("Task_Body_Procedure");
! 
!          when others =>
!             Write_Str ("Field25??");
!       end case;
!    end Write_Field25_Name;
! 
!    ------------------------
!    -- Write_Field26_Name --
!    ------------------------
! 
!    procedure Write_Field26_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Record_Type
!             | E_Record_Type_With_Private
!          =>
!             Write_Str ("Dispatch_Table_Wrappers");
! 
!          when E_In_Out_Parameter
!             | E_Out_Parameter
!             | E_Variable
!          =>
!             Write_Str ("Last_Assignment");
! 
!          when E_Function
!             | E_Procedure
!          =>
!             Write_Str ("Overridden_Operation");
! 
!          when E_Generic_Package
!             | E_Package
!          =>
!             Write_Str ("Package_Instantiation");
! 
!          when E_Component
!             | E_Constant
!          =>
!             Write_Str ("Related_Type");
! 
!          when Access_Kind
!             | Task_Kind
!          =>
!             Write_Str ("Storage_Size_Variable");
! 
!          when others =>
!             Write_Str ("Field26??");
!       end case;
!    end Write_Field26_Name;
! 
!    ------------------------
!    -- Write_Field27_Name --
!    ------------------------
! 
!    procedure Write_Field27_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when Type_Kind
!             | E_Package
!          =>
!             Write_Str ("Current_Use_Clause");
! 
!          when E_Component
!             | E_Constant
!             | E_Variable
!          =>
!             Write_Str ("Related_Type");
! 
!          when E_Function
!             | E_Procedure
!          =>
!             Write_Str ("Wrapped_Entity");
! 
!          when others =>
!             Write_Str ("Field27??");
!       end case;
!    end Write_Field27_Name;
! 
!    ------------------------
!    -- Write_Field28_Name --
!    ------------------------
! 
!    procedure Write_Field28_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Entry
!             | E_Entry_Family
!             | E_Function
!             | E_Procedure
!             | E_Subprogram_Body
!             | E_Subprogram_Type
!          =>
!             Write_Str ("Extra_Formals");
! 
!          when E_Package
!             | E_Package_Body
!          =>
!             Write_Str ("Finalizer");
! 
!          when E_Constant
!             | E_Variable
!          =>
!             Write_Str ("Initialization_Statements");
! 
!          when E_Access_Subprogram_Type =>
!             Write_Str ("Original_Access_Type");
! 
!          when Task_Kind =>
!             Write_Str ("Relative_Deadline_Variable");
! 
!          when E_Record_Type =>
!             Write_Str ("Underlying_Record_View");
! 
!          when others =>
!             Write_Str ("Field28??");
!       end case;
!    end Write_Field28_Name;
! 
!    ------------------------
!    -- Write_Field29_Name --
!    ------------------------
! 
!    procedure Write_Field29_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Function
!             | E_Package
!             | E_Procedure
!             | E_Subprogram_Body
!          =>
!             Write_Str ("Anonymous_Masters");
! 
!          when E_Constant
!             | E_Variable
!          =>
!             Write_Str ("BIP_Initialization_Call");
! 
!          when Type_Kind =>
!             Write_Str ("Subprograms_For_Type");
! 
!          when others =>
!             Write_Str ("Field29??");
!       end case;
!    end Write_Field29_Name;
! 
!    ------------------------
!    -- Write_Field30_Name --
!    ------------------------
! 
!    procedure Write_Field30_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Record_Type
!             | E_Record_Type_With_Private
!          =>
!             Write_Str ("Access_Disp_Table_Elab_Flag");
! 
!          when E_Protected_Type
!             | E_Task_Type
!          =>
!             Write_Str ("Anonymous_Object");
! 
!          when E_Function =>
!             Write_Str ("Corresponding_Equality");
! 
!          when E_Constant
!             | E_Variable
!          =>
!             Write_Str ("Last_Aggregate_Assignment");
! 
!          when E_Procedure =>
!             Write_Str ("Static_Initialization");
! 
!          when others =>
!             Write_Str ("Field30??");
!       end case;
!    end Write_Field30_Name;
! 
!    ------------------------
!    -- Write_Field31_Name --
!    ------------------------
! 
!    procedure Write_Field31_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Constant
!             | E_In_Parameter
!             | E_In_Out_Parameter
!             | E_Loop_Parameter
!             | E_Out_Parameter
!             | E_Variable
!          =>
!             Write_Str ("Activation_Record_Component");
! 
!          when Type_Kind =>
!             Write_Str ("Derived_Type_Link");
! 
!          when E_Function
!             | E_Procedure
!          =>
!             Write_Str ("Thunk_Entity");
! 
!          when others =>
!             Write_Str ("Field31??");
!       end case;
!    end Write_Field31_Name;
! 
!    ------------------------
!    -- Write_Field32_Name --
!    ------------------------
! 
!    procedure Write_Field32_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Procedure =>
!             Write_Str ("Corresponding_Function");
! 
!          when E_Function =>
!             Write_Str ("Corresponding_Procedure");
! 
!          when E_Abstract_State
!             | E_Constant
!             | E_Variable
!          =>
!             Write_Str ("Encapsulating_State");
! 
!          when Type_Kind =>
!             Write_Str ("No_Tagged_Streams_Pragma");
! 
!          when others =>
!             Write_Str ("Field32??");
!       end case;
!    end Write_Field32_Name;
! 
!    ------------------------
!    -- Write_Field33_Name --
!    ------------------------
! 
!    procedure Write_Field33_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when Subprogram_Kind
!             | Type_Kind
!             | E_Constant
!             | E_Variable
!          =>
!             Write_Str ("Linker_Section_Pragma");
! 
!          when others =>
!             Write_Str ("Field33??");
!       end case;
!    end Write_Field33_Name;
! 
!    ------------------------
!    -- Write_Field34_Name --
!    ------------------------
! 
!    procedure Write_Field34_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Constant
!             | E_Entry
!             | E_Entry_Family
!             | E_Function
!             | E_Generic_Function
!             | E_Generic_Package
!             | E_Generic_Procedure
!             | E_Operator
!             | E_Package
!             | E_Package_Body
!             | E_Procedure
!             | E_Subprogram_Body
!             | E_Task_Body
!             | E_Variable
!             | Type_Kind
!             | E_Void
!          =>
!             Write_Str ("Contract");
! 
!          when others =>
!             Write_Str ("Field34??");
!       end case;
!    end Write_Field34_Name;
! 
!    ------------------------
!    -- Write_Field35_Name --
!    ------------------------
! 
!    procedure Write_Field35_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Variable =>
!             Write_Str ("Anonymous_Designated_Type");
! 
!          when E_Entry
!             | E_Entry_Family
!          =>
!             Write_Str ("Entry_Max_Queue_Lenghts_Array");
! 
!          when Subprogram_Kind =>
!             Write_Str ("Import_Pragma");
! 
!          when others =>
!             Write_Str ("Field35??");
!       end case;
!    end Write_Field35_Name;
! 
!    ------------------------
!    -- Write_Field36_Name --
!    ------------------------
! 
!    procedure Write_Field36_Name (Id : Entity_Id) is
!       pragma Unreferenced (Id);
!    begin
!       Write_Str ("Prev_Entity");
!    end Write_Field36_Name;
! 
!    ------------------------
!    -- Write_Field37_Name --
!    ------------------------
! 
!    procedure Write_Field37_Name (Id : Entity_Id) is
!       pragma Unreferenced (Id);
!    begin
!       Write_Str ("Associated_Entity");
!    end Write_Field37_Name;
! 
!    ------------------------
!    -- Write_Field38_Name --
!    ------------------------
! 
!    procedure Write_Field38_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Function
!             | E_Procedure
!          =>
!             Write_Str ("Class_Wide_Clone");
! 
!          when E_Array_Subtype
!             | E_Record_Subtype
!             | E_Record_Subtype_With_Private
!          =>
!             Write_Str ("Predicated_Parent");
! 
!          when E_Variable =>
!             Write_Str ("Validated_Object");
! 
!          when others =>
!             Write_Str ("Field38??");
!       end case;
!    end Write_Field38_Name;
! 
!    ------------------------
!    -- Write_Field39_Name --
!    ------------------------
! 
!    procedure Write_Field39_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Function
!             | E_Procedure
!          =>
!             Write_Str ("Protected_Subprogram");
! 
!          when others =>
!             Write_Str ("Field39??");
!       end case;
!    end Write_Field39_Name;
! 
!    ------------------------
!    -- Write_Field40_Name --
!    ------------------------
! 
!    procedure Write_Field40_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Abstract_State
!             | E_Constant
!             | E_Entry
!             | E_Entry_Family
!             | E_Function
!             | E_Generic_Function
!             | E_Generic_Package
!             | E_Generic_Procedure
!             | E_Operator
!             | E_Package
!             | E_Package_Body
!             | E_Procedure
!             | E_Protected_Body
!             | E_Subprogram_Body
!             | E_Task_Body
!             | E_Variable
!             | E_Void
!             | Type_Kind
!          =>
!             Write_Str ("SPARK_Pragma");
! 
!          when others =>
!             Write_Str ("Field40??");
!       end case;
!    end Write_Field40_Name;
! 
!    ------------------------
!    -- Write_Field41_Name --
!    ------------------------
! 
!    procedure Write_Field41_Name (Id : Entity_Id) is
!    begin
!       case Ekind (Id) is
!          when E_Function
!             | E_Procedure
!          =>
!             Write_Str ("Original_Protected_Subprogram");
! 
!          when E_Generic_Package
!             | E_Package
!             | E_Package_Body
!             | E_Protected_Type
!             | E_Task_Type
!          =>
!             Write_Str ("SPARK_Aux_Pragma");
! 
!          when E_Subprogram_Type =>
!             Write_Str ("Access_Subprogram_Wrapper");
! 
!          when others =>
!             Write_Str ("Field41??");
!       end case;
!    end Write_Field41_Name;
! 
!    -------------------------
!    -- Iterator Procedures --
!    -------------------------
! 
!    procedure Proc_Next_Component                 (N : in out Node_Id) is
!    begin
!       N := Next_Component (N);
!    end Proc_Next_Component;
! 
!    procedure Proc_Next_Component_Or_Discriminant (N : in out Node_Id) is
!    begin
!       N := Next_Entity (N);
!       while Present (N) loop
!          exit when Ekind (N) in E_Component | E_Discriminant;
!          N := Next_Entity (N);
!       end loop;
!    end Proc_Next_Component_Or_Discriminant;
! 
!    procedure Proc_Next_Discriminant              (N : in out Node_Id) is
!    begin
!       N := Next_Discriminant (N);
!    end Proc_Next_Discriminant;
! 
!    procedure Proc_Next_Formal                    (N : in out Node_Id) is
!    begin
!       N := Next_Formal (N);
!    end Proc_Next_Formal;
! 
!    procedure Proc_Next_Formal_With_Extras        (N : in out Node_Id) is
!    begin
!       N := Next_Formal_With_Extras (N);
!    end Proc_Next_Formal_With_Extras;
! 
!    procedure Proc_Next_Index                     (N : in out Node_Id) is
!    begin
!       N := Next_Index (N);
!    end Proc_Next_Index;
! 
!    procedure Proc_Next_Inlined_Subprogram        (N : in out Node_Id) is
!    begin
!       N := Next_Inlined_Subprogram (N);
!    end Proc_Next_Inlined_Subprogram;
! 
!    procedure Proc_Next_Literal                   (N : in out Node_Id) is
!    begin
!       N := Next_Literal (N);
!    end Proc_Next_Literal;
! 
!    procedure Proc_Next_Stored_Discriminant       (N : in out Node_Id) is
!    begin
!       N := Next_Stored_Discriminant (N);
!    end Proc_Next_Stored_Discriminant;
! 
! end Einfo;
--- 23,26 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! pragma No_Body;
diff -Nrcpad gcc-11.3.0/gcc/ada/einfo.ads gcc-12.1.0/gcc/ada/einfo.ads
*** gcc-11.3.0/gcc/ada/einfo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/einfo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,50 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  with Snames; use Snames;
  with Types;  use Types;
  with Uintp;  use Uintp;
  with Urealp; use Urealp;
  
  package Einfo is
  
! --  This package defines the annotations to the abstract syntax tree that
! --  are needed to support semantic processing of an Ada compilation.
  
! --  Note that after editing this spec and the corresponding body it is
! --  required to run ceinfo to check the consistentcy of spec and body.
! --  See ceinfo.adb for more information about the checks made.
  
  --  These annotations are for the most part attributes of declared entities,
  --  and they correspond to conventional symbol table information. Other
  --  attributes include sets of meanings for overloaded names, possible
  --  types for overloaded expressions, flags to indicate deferred constants,
! --  incomplete types, etc. These attributes are stored in available fields in
! --  tree nodes (i.e. fields not used by the parser, as defined by the Sinfo
! --  package specification), and accessed by means of a set of subprograms
! --  which define an abstract interface.
  
  --  There are two kinds of semantic information
  
--- 23,53 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ pragma Warnings (Off); -- with/use clauses for children
+ with Namet;  use Namet;
  with Snames; use Snames;
+ with Stand;  use Stand;
  with Types;  use Types;
  with Uintp;  use Uintp;
  with Urealp; use Urealp;
+ pragma Warnings (On);
  
  package Einfo is
  
! --  This package documents the annotations to the abstract syntax tree that are
! --  needed to support semantic processing of an Ada compilation.
  
! --  See the spec of Gen_IL.Gen for instructions on making changes to this file.
! --  Note that the official definition of what entities have what fields is in
! --  Gen_IL.Gen.Gen_Entities; if there is a discrepancy between that and the
! --  comments here, Gen_IL.Gen.Gen_Entities wins.
  
  --  These annotations are for the most part attributes of declared entities,
  --  and they correspond to conventional symbol table information. Other
  --  attributes include sets of meanings for overloaded names, possible
  --  types for overloaded expressions, flags to indicate deferred constants,
! --  incomplete types, etc. These attributes are stored in fields in
! --  tree nodes.
  
  --  There are two kinds of semantic information
  
*************** package Einfo is
*** 63,123 ****
  
  --    Second, in some cases semantic information is stored directly in other
  --    kinds of nodes, e.g. the Etype field, used to indicate the type of an
! --    expression. The access functions to these fields are defined in the
! --    Sinfo package, but their full documentation is to be found in
! --    the Einfo package specification.
  
  --  Declaration processing places information in the nodes of their defining
  --  identifiers. Name resolution places in all other occurrences of an
  --  identifier a pointer to the corresponding defining occurrence.
  
- --------------------------------
- -- The XEINFO Utility Program --
- --------------------------------
- 
- --  XEINFO is a utility program which automatically produces a C header file,
- --  einfo.h from the spec and body of package Einfo. It reads the input files
- --  einfo.ads and einfo.adb and produces the output file einfo.h. XEINFO is run
- --  automatically by the build scripts when you do a full bootstrap.
- 
- --  In order for this utility program to operate correctly, the form of the
- --  einfo.ads and einfo.adb files must meet certain requirements and be laid
- --  out in a specific manner.
- 
- --  The general form of einfo.ads is as follows:
- 
- --     type declaration for type Entity_Kind
- --     subtype declarations declaring subranges of Entity_Kind
- --     subtype declarations declaring synonyms for some standard types
- --     function specs for attributes
- --     procedure specs
- --     pragma Inline declarations
- 
- --  This order must be observed. There are no restrictions on the procedures,
- --  since the C header file only includes functions (The back end is not
- --  allowed to modify the generated tree). However, functions are required to
- --  have headers that fit on a single line.
- 
- --  XEINFO reads and processes the function specs and the pragma Inlines. For
- --  functions that are declared as inlined, XEINFO reads the corresponding body
- --  from einfo.adb, and processes it into C code. This results in some strict
- --  restrictions on which functions can be inlined:
- 
- --     The function spec must be on a single line
- 
- --     There can only be a single return statement, not counting any pragma
- --     Assert statements, possibly followed by a comment.
- 
- --     This single statement must either contain a function call with simple,
- --     single token arguments, or it must contain a membership test of the form
- --     a in b, where a and b are single tokens, or it must contain an equality
- --     or inequality test of single tokens, or it must contain a disjunction of
- --     the preceding constructs.
- 
- --  For functions that are not inlined, there is no restriction on the body,
- --  and XEINFO generates a direct reference in the C header file which allows
- --  the C code in the backend to directly call the corresponding Ada body.
- 
  ----------------------------------
  -- Handling of Type'Size Values --
  ----------------------------------
--- 66,78 ----
  
  --    Second, in some cases semantic information is stored directly in other
  --    kinds of nodes, e.g. the Etype field, used to indicate the type of an
! --    expression. These fields are defined in the Sinfo package, but their
! --    full documentation is in the Einfo package specification.
  
  --  Declaration processing places information in the nodes of their defining
  --  identifiers. Name resolution places in all other occurrences of an
  --  identifier a pointer to the corresponding defining occurrence.
  
  ----------------------------------
  -- Handling of Type'Size Values --
  ----------------------------------
*************** package Einfo is
*** 128,137 ****
  --  default size of objects, creates chaos, and major incompatibilities in
  --  existing code.
  
! --  The Ada 2020 RM acknowledges it and adopts GNAT's Object_Size attribute
  --  for determining the default size of objects, but stops short of applying
  --  it universally like GNAT. Indeed the notable exceptions are nonaliased
! --  stand-alone objects, which are not covered by Object_Size in Ada 2020.
  
  --  We proceed as follows, for discrete and fixed-point subtypes, we have
  --  two separate sizes for each subtype:
--- 83,92 ----
  --  default size of objects, creates chaos, and major incompatibilities in
  --  existing code.
  
! --  The Ada 2022 RM acknowledges it and adopts GNAT's Object_Size attribute
  --  for determining the default size of objects, but stops short of applying
  --  it universally like GNAT. Indeed the notable exceptions are nonaliased
! --  stand-alone objects, which are not covered by Object_Size in Ada 2022.
  
  --  We proceed as follows, for discrete and fixed-point subtypes, we have
  --  two separate sizes for each subtype:
*************** package Einfo is
*** 158,164 ****
  --       base type, and the Object_Size of a derived first subtype is copied
  --       from the parent first subtype.
  
! --    The Ada 2020 RM defined attribute Object_Size uses this implementation.
  
  --    The Value_Size, which is the number of bits required to store a value
  --    of the type. This size can be referred to using the Value_Size
--- 113,119 ----
  --       base type, and the Object_Size of a derived first subtype is copied
  --       from the parent first subtype.
  
! --    The Ada 2022 RM defined attribute Object_Size uses this implementation.
  
  --    The Value_Size, which is the number of bits required to store a value
  --    of the type. This size can be referred to using the Value_Size
*************** package Einfo is
*** 197,203 ****
  
  --    Value_Size and Object_Size may be explicitly set for any subtype using
  --    an attribute definition clause. Note that the use of such a clause can
! --    cause the RM 13.1(14) rule to be violated, in Ada 95 and 2020 for the
  --    Value_Size attribute, but only in Ada 95 for the Object_Size attribute.
  --    If access types reference aliased objects whose subtypes have differing
  --    Object_Size values as a result of explicit attribute definition clauses,
--- 152,158 ----
  
  --    Value_Size and Object_Size may be explicitly set for any subtype using
  --    an attribute definition clause. Note that the use of such a clause can
! --    cause the RM 13.1(14) rule to be violated, in Ada 95 and 2022 for the
  --    Value_Size attribute, but only in Ada 95 for the Object_Size attribute.
  --    If access types reference aliased objects whose subtypes have differing
  --    Object_Size values as a result of explicit attribute definition clauses,
*************** package Einfo is
*** 329,342 ****
  --  type. The attribute can be referenced on a subtype (and automatically
  --  retrieves the value from the implementation base type). However, it is an
  --  error to try to set the attribute on other than the implementation base
! --  type, and if assertions are enabled, an attempt to set the attribute on a
! --  subtype will raise an assert error.
  
! --    Abstract_States (Elist25)
  --       Defined for E_Package entities. Contains a list of all the abstract
  --       states declared by the related package.
  
! --    Accept_Address (Elist21)
  --       Defined in entries. If an accept has a statement sequence, then an
  --       address variable is created, which is used to hold the address of the
  --       parameters, as passed by the runtime. Accept_Address holds an element
--- 284,305 ----
  --  type. The attribute can be referenced on a subtype (and automatically
  --  retrieves the value from the implementation base type). However, it is an
  --  error to try to set the attribute on other than the implementation base
! --  type.
  
! --  Other attributes are noted as applying to the [root type only]. The
! --  attribute can be referenced on a subtype (and automatically retrieves the
! --  value from the root type). However, it is an error to try to set the
! --  attribute on other than the root type.
! 
! --  The definitive definition of what is [... type only] is in Gen_Entities.
! --  See calls to Sm passing Base_Type_Only, Impl_Base_Type_Only, or
! --  Root_Type_Only.
! 
! --    Abstract_States
  --       Defined for E_Package entities. Contains a list of all the abstract
  --       states declared by the related package.
  
! --    Accept_Address
  --       Defined in entries. If an accept has a statement sequence, then an
  --       address variable is created, which is used to hold the address of the
  --       parameters, as passed by the runtime. Accept_Address holds an element
*************** package Einfo is
*** 345,351 ****
  --       on the list. A stack is required to handle the case of nested select
  --       statements referencing the same entry.
  
! --    Access_Disp_Table (Elist16) [implementation base type only]
  --       Defined in E_Record_Type and E_Record_Subtype entities. Set in tagged
  --       types to point to their dispatch tables. The first two entities are
  --       associated with the primary dispatch table: 1) primary dispatch table
--- 308,314 ----
  --       on the list. A stack is required to handle the case of nested select
  --       statements referencing the same entry.
  
! --    Access_Disp_Table [implementation base type only]
  --       Defined in E_Record_Type and E_Record_Subtype entities. Set in tagged
  --       types to point to their dispatch tables. The first two entities are
  --       associated with the primary dispatch table: 1) primary dispatch table
*************** package Einfo is
*** 359,365 ****
  --       used to expand dispatching calls through the primary dispatch table.
  --       For an untagged record, contains No_Elist.
  
! --    Access_Disp_Table_Elab_Flag (Node30) [implementation base type only]
  --       Defined in E_Record_Type and E_Record_Subtype entities. Set in tagged
  --       types whose dispatch table elaboration must be completed at run time
  --       by the IP routine to point to its pending elaboration flag entity.
--- 322,328 ----
  --       used to expand dispatching calls through the primary dispatch table.
  --       For an untagged record, contains No_Elist.
  
! --    Access_Disp_Table_Elab_Flag [implementation base type only]
  --       Defined in E_Record_Type and E_Record_Subtype entities. Set in tagged
  --       types whose dispatch table elaboration must be completed at run time
  --       by the IP routine to point to its pending elaboration flag entity.
*************** package Einfo is
*** 367,373 ****
  --       on attribute 'Position applied to an object of the type; it is used by
  --       the IP routine to avoid performing this elaboration twice.
  
! --    Access_Subprogram_Wrapper (Node41)
  --       Entity created for access_to_subprogram types that have pre/post
  --       conditions. Wrapper subprogram is created when analyzing corresponding
  --       aspect, and inherits said aspects. Body of subprogram includes code
--- 330,336 ----
  --       on attribute 'Position applied to an object of the type; it is used by
  --       the IP routine to avoid performing this elaboration twice.
  
! --    Access_Subprogram_Wrapper
  --       Entity created for access_to_subprogram types that have pre/post
  --       conditions. Wrapper subprogram is created when analyzing corresponding
  --       aspect, and inherits said aspects. Body of subprogram includes code
*************** package Einfo is
*** 376,388 ****
  --       The Subprogram_Type created for the Access_To_Subprogram carries the
  --       Access_Subprogram_Wrapper for use in the expansion of indirect calls.
  
! --    Activation_Record_Component (Node31)
  --       Defined for E_Variable, E_Constant, E_Loop_Parameter, and formal
  --       parameter entities. Used in Opt.Unnest_Subprogram_Mode, in which case
  --       a reference to an uplevel entity produces a corresponding component
  --       in the generated ARECnT activation record (Exp_Unst for details).
  
! --    Actual_Subtype (Node17)
  --       Defined in variables, constants, and formal parameters. This is the
  --       subtype imposed by the value of the object, as opposed to its nominal
  --       subtype, which is imposed by the declaration. The actual subtype
--- 339,351 ----
  --       The Subprogram_Type created for the Access_To_Subprogram carries the
  --       Access_Subprogram_Wrapper for use in the expansion of indirect calls.
  
! --    Activation_Record_Component
  --       Defined for E_Variable, E_Constant, E_Loop_Parameter, and formal
  --       parameter entities. Used in Opt.Unnest_Subprogram_Mode, in which case
  --       a reference to an uplevel entity produces a corresponding component
  --       in the generated ARECnT activation record (Exp_Unst for details).
  
! --    Actual_Subtype
  --       Defined in variables, constants, and formal parameters. This is the
  --       subtype imposed by the value of the object, as opposed to its nominal
  --       subtype, which is imposed by the declaration. The actual subtype
*************** package Einfo is
*** 408,414 ****
  --       defined before the entity to which the address clause applies.
  --       Note: The backend references this field in E_Task_Type entities???
  
! --    Address_Taken (Flag104)
  --       Defined in all entities. Set if the Address or Unrestricted_Access
  --       attribute is applied directly to the entity, i.e. the entity is the
  --       entity of the prefix of the attribute reference. Also set if the
--- 371,377 ----
  --       defined before the entity to which the address clause applies.
  --       Note: The backend references this field in E_Task_Type entities???
  
! --    Address_Taken
  --       Defined in all entities. Set if the Address or Unrestricted_Access
  --       attribute is applied directly to the entity, i.e. the entity is the
  --       entity of the prefix of the attribute reference. Also set if the
*************** package Einfo is
*** 425,431 ****
  --       needed after the decimal point to accommodate the delta of the type,
  --       unless the delta is greater than 0.1, in which case it is 1.
  
! --    Alias (Node18)
  --       Defined in overloadable entities (literals, subprograms, entries) and
  --       subprograms that cover a primitive operation of an abstract interface
  --       (that is, subprograms with the Interface_Alias attribute). In case of
--- 388,394 ----
  --       needed after the decimal point to accommodate the delta of the type,
  --       unless the delta is greater than 0.1, in which case it is 1.
  
! --    Alias
  --       Defined in overloadable entities (literals, subprograms, entries) and
  --       subprograms that cover a primitive operation of an abstract interface
  --       (that is, subprograms with the Interface_Alias attribute). In case of
*************** package Einfo is
*** 439,445 ****
  --       non-dispatching, and a call from inside calls the overriding operation
  --       because it hides the implicit one. Alias is always empty for entries.
  
! --    Alignment (Uint14)
  --       Defined in entities for types and also in constants, variables
  --       (including exceptions where it refers to the static data allocated for
  --       an exception), loop parameters, and formal parameters. This indicates
--- 402,408 ----
  --       non-dispatching, and a call from inside calls the overriding operation
  --       because it hides the implicit one. Alias is always empty for entries.
  
! --    Alignment
  --       Defined in entities for types and also in constants, variables
  --       (including exceptions where it refers to the static data allocated for
  --       an exception), loop parameters, and formal parameters. This indicates
*************** package Einfo is
*** 462,493 ****
  --       definition clause with an (obsolescent) mod clause is converted
  --       into an attribute definition clause for this purpose.
  
! --    Anonymous_Designated_Type (Node35)
  --       Defined in variables which represent anonymous finalization masters.
  --       Contains the designated type which is being serviced by the master.
  
! --    Anonymous_Masters (Elist29)
  --       Defined in packages, subprograms, and subprogram bodies. Contains a
  --       list of anonymous finalization masters declared within the related
  --       unit. The list acts as a mapping between a master and a designated
  --       type.
  
! --    Anonymous_Object (Node30)
  --       Present in protected and task type entities. Contains the entity of
  --       the anonymous object created for a single protected or task type.
  
! --    Associated_Entity (Node37)
  --       Defined in all entities. This field is similar to Associated_Node, but
  --       applied to entities. The attribute links an entity from the generic
  --       template with its corresponding entity in the analyzed generic copy.
  --       The global references mechanism relies on the Associated_Entity to
  --       infer the context.
  
! --    Associated_Formal_Package (Node12)
  --       Defined in packages that are the actuals of formal_packages. Points
  --       to the entity in the declaration for the formal package.
  
! --    Associated_Node_For_Itype (Node8)
  --       Defined in all type and subtype entities. Set non-Empty only for
  --       Itypes. Set to point to the associated node for the Itype, i.e.
  --       the node whose elaboration generated the Itype. This is used for
--- 425,456 ----
  --       definition clause with an (obsolescent) mod clause is converted
  --       into an attribute definition clause for this purpose.
  
! --    Anonymous_Designated_Type
  --       Defined in variables which represent anonymous finalization masters.
  --       Contains the designated type which is being serviced by the master.
  
! --    Anonymous_Masters
  --       Defined in packages, subprograms, and subprogram bodies. Contains a
  --       list of anonymous finalization masters declared within the related
  --       unit. The list acts as a mapping between a master and a designated
  --       type.
  
! --    Anonymous_Object
  --       Present in protected and task type entities. Contains the entity of
  --       the anonymous object created for a single protected or task type.
  
! --    Associated_Entity
  --       Defined in all entities. This field is similar to Associated_Node, but
  --       applied to entities. The attribute links an entity from the generic
  --       template with its corresponding entity in the analyzed generic copy.
  --       The global references mechanism relies on the Associated_Entity to
  --       infer the context.
  
! --    Associated_Formal_Package
  --       Defined in packages that are the actuals of formal_packages. Points
  --       to the entity in the declaration for the formal package.
  
! --    Associated_Node_For_Itype
  --       Defined in all type and subtype entities. Set non-Empty only for
  --       Itypes. Set to point to the associated node for the Itype, i.e.
  --       the node whose elaboration generated the Itype. This is used for
*************** package Einfo is
*** 509,522 ****
  --       Itype is the only way to determine the construct that leads to the
  --       creation of a given itype entity.
  
! --    Associated_Storage_Pool (Node22) [root type only]
  --       Defined in simple and general access type entities. References the
  --       storage pool to be used for the corresponding collection. A value of
  --       Empty means that the default pool is to be used. This is defined
  --       only in the root type, since derived types must have the same pool
  --       as the parent type.
  
! --    Barrier_Function (Node12)
  --       Defined in protected entries and entry families. This is the
  --       subprogram declaration for the body of the function that returns
  --       the value of the entry barrier.
--- 472,485 ----
  --       Itype is the only way to determine the construct that leads to the
  --       creation of a given itype entity.
  
! --    Associated_Storage_Pool [root type only]
  --       Defined in simple and general access type entities. References the
  --       storage pool to be used for the corresponding collection. A value of
  --       Empty means that the default pool is to be used. This is defined
  --       only in the root type, since derived types must have the same pool
  --       as the parent type.
  
! --    Barrier_Function
  --       Defined in protected entries and entry families. This is the
  --       subprogram declaration for the body of the function that returns
  --       the value of the entry barrier.
*************** package Einfo is
*** 532,538 ****
  --       apply Base_Type to other than a type, in which case it simply returns
  --       the entity unchanged.
  
! --    Block_Node (Node11)
  --       Defined in block entities. Points to the identifier in the
  --       Block_Statement itself. Used when retrieving the block construct
  --       for finalization purposes, the block entity has an implicit label
--- 495,501 ----
  --       apply Base_Type to other than a type, in which case it simply returns
  --       the entity unchanged.
  
! --    Block_Node
  --       Defined in block entities. Points to the identifier in the
  --       Block_Statement itself. Used when retrieving the block construct
  --       for finalization purposes, the block entity has an implicit label
*************** package Einfo is
*** 542,557 ****
  --       and not to the block_statement itself, because the statement may
  --       be rewritten, e.g. in the process of removing dead code.
  
! --    Body_Entity (Node19)
  --       Defined in package and generic package entities, points to the
  --       corresponding package body entity if one is present.
  
! --    Body_Needed_For_SAL (Flag40)
  --       Defined in package and subprogram entities that are compilation
  --       units. Indicates that the source for the body must be included
  --       when the unit is part of a standalone library.
  
! --    Body_Needed_For_Inlining (Flag299)
  --       Defined in package entities that are compilation units. Used to
  --       determine whether the body unit needs to be compiled when the
  --       package declaration appears in the list of units to inline. A body
--- 505,520 ----
  --       and not to the block_statement itself, because the statement may
  --       be rewritten, e.g. in the process of removing dead code.
  
! --    Body_Entity
  --       Defined in package and generic package entities, points to the
  --       corresponding package body entity if one is present.
  
! --    Body_Needed_For_SAL
  --       Defined in package and subprogram entities that are compilation
  --       units. Indicates that the source for the body must be included
  --       when the unit is part of a standalone library.
  
! --    Body_Needed_For_Inlining
  --       Defined in package entities that are compilation units. Used to
  --       determine whether the body unit needs to be compiled when the
  --       package declaration appears in the list of units to inline. A body
*************** package Einfo is
*** 559,571 ****
  --       functions that carry pragma Inline or Inline_Always, or if it
  --       contains a generic unit that requires a body.
  --
! --    Body_References (Elist16)
  --       Defined in abstract state entities. Contains an element list of
  --       references (identifiers) that appear in a package body whose spec
  --       defines the related state. If the body refines the said state, all
  --       references on this list are illegal due to the visible refinement.
  
! --    BIP_Initialization_Call (Node29)
  --       Defined in constants and variables whose corresponding declaration
  --       is wrapped in a transient block and the inital value is provided by
  --       a build-in-place function call. Contains the relocated build-in-place
--- 522,534 ----
  --       functions that carry pragma Inline or Inline_Always, or if it
  --       contains a generic unit that requires a body.
  --
! --    Body_References
  --       Defined in abstract state entities. Contains an element list of
  --       references (identifiers) that appear in a package body whose spec
  --       defines the related state. If the body refines the said state, all
  --       references on this list are illegal due to the visible refinement.
  
! --    BIP_Initialization_Call
  --       Defined in constants and variables whose corresponding declaration
  --       is wrapped in a transient block and the inital value is provided by
  --       a build-in-place function call. Contains the relocated build-in-place
*************** package Einfo is
*** 573,579 ****
  --       attribute is used by the finalization machinery to insert cleanup code
  --       for all additional transient objects found in the transient block.
  
! --    C_Pass_By_Copy (Flag125) [implementation base type only]
  --       Defined in record types. Set if a pragma Convention for the record
  --       type specifies convention C_Pass_By_Copy. This convention name is
  --       treated as identical in all respects to convention C, except that
--- 536,542 ----
  --       attribute is used by the finalization machinery to insert cleanup code
  --       for all additional transient objects found in the transient block.
  
! --    C_Pass_By_Copy [implementation base type only]
  --       Defined in record types. Set if a pragma Convention for the record
  --       type specifies convention C_Pass_By_Copy. This convention name is
  --       treated as identical in all respects to convention C, except that
*************** package Einfo is
*** 583,589 ****
  --       set to By_Copy (unless specifically overridden by an Import or
  --       Export pragma).
  
! --    Can_Never_Be_Null (Flag38)
  --       This flag is defined in all entities. It is set in an object which can
  --       never have a null value. Set for constant access values initialized to
  --       a non-null value. This is also set for all access parameters in Ada 83
--- 546,552 ----
  --       set to By_Copy (unless specifically overridden by an Import or
  --       Export pragma).
  
! --    Can_Never_Be_Null
  --       This flag is defined in all entities. It is set in an object which can
  --       never have a null value. Set for constant access values initialized to
  --       a non-null value. This is also set for all access parameters in Ada 83
*************** package Einfo is
*** 598,604 ****
  --       This is also set on some access types, e.g. the Etype of the anonymous
  --       access type of a controlling formal.
  
! --    Can_Use_Internal_Rep (Flag229) [base type only]
  --       Defined in Access_Subprogram_Kind nodes. This flag is set by the
  --       front end and used by the backend. False means that the backend
  --       must represent the type in the same way as Convention-C types (and
--- 561,567 ----
  --       This is also set on some access types, e.g. the Etype of the anonymous
  --       access type of a controlling formal.
  
! --    Can_Use_Internal_Rep [base type only]
  --       Defined in Access_Subprogram_Kind nodes. This flag is set by the
  --       front end and used by the backend. False means that the backend
  --       must represent the type in the same way as Convention-C types (and
*************** package Einfo is
*** 629,635 ****
  --       to have Can_Use_Internal_Rep False for an access type, but allow P to
  --       have convention Ada.
  
! --    Chars (Name1)
  --       Defined in all entities. This field contains an entry into the names
  --       table that has the character string of the identifier, character
  --       literal or operator symbol. See Namet for further details. Note that
--- 592,598 ----
  --       to have Can_Use_Internal_Rep False for an access type, but allow P to
  --       have convention Ada.
  
! --    Chars
  --       Defined in all entities. This field contains an entry into the names
  --       table that has the character string of the identifier, character
  --       literal or operator symbol. See Namet for further details. Note that
*************** package Einfo is
*** 640,665 ****
  --       point (including post backend steps, e.g. cross-reference generation),
  --       the entities will contain the encoded qualified names.
  
! --    Checks_May_Be_Suppressed (Flag31)
  --       Defined in all entities. Set if a pragma Suppress or Unsuppress
  --       mentions the entity specifically in the second argument. If this
  --       flag is set the Global_Entity_Suppress and Local_Entity_Suppress
  --       tables must be consulted to determine if there actually is an active
  --       Suppress or Unsuppress pragma that applies to the entity.
  
! --    Class_Wide_Clone (Node38)
! --       Defined on subprogram entities. Set if the subprogram has a class-wide
! --       ore- or postcondition, and the expression contains calls to other
! --       primitive funtions of the type. Used to implement properly the
! --       semantics of inherited operations whose class-wide condition may
! --       be different from that of the ancestor (See AI012-0195).
  
! --    Class_Wide_Type (Node9)
  --       Defined in all type entities. For a tagged type or subtype, returns
  --       the corresponding implicitly declared class-wide type. For a
  --       class-wide type, returns itself. Set to Empty for untagged types.
  
! --    Cloned_Subtype (Node16)
  --       Defined in E_Record_Subtype and E_Class_Wide_Subtype entities.
  --       Each such entity can either have a Discriminant_Constraint, in
  --       which case it represents a distinct type from the base type (and
--- 603,639 ----
  --       point (including post backend steps, e.g. cross-reference generation),
  --       the entities will contain the encoded qualified names.
  
! --    Checks_May_Be_Suppressed
  --       Defined in all entities. Set if a pragma Suppress or Unsuppress
  --       mentions the entity specifically in the second argument. If this
  --       flag is set the Global_Entity_Suppress and Local_Entity_Suppress
  --       tables must be consulted to determine if there actually is an active
  --       Suppress or Unsuppress pragma that applies to the entity.
  
! --    Class_Postconditions
! --       Defined on subprogram entities. Set if the subprogram has class-wide
! --       postconditions. Denotes the (and-then) expression built by merging
! --       inherited class-wide postconditions with its own class-wide
! --       postconditions.
  
! --    Class_Preconditions
! --       Defined on subprogram entities. Set if the subprogram has class-wide
! --       preconditions. Denotes the (or-else) expression built by merging
! --       inherited class-wide preconditions with its own class-wide
! --       preconditions.
! 
! --    Class_Preconditions_Subprogram
! --       Defined on subprogram entities. Set on subprogram helpers and also on
! --       the indirect-call wrapper internally built for subprograms that have
! --       class-wide preconditions. References the subprogram that has the
! --       class-wide preconditions.
! 
! --    Class_Wide_Type
  --       Defined in all type entities. For a tagged type or subtype, returns
  --       the corresponding implicitly declared class-wide type. For a
  --       class-wide type, returns itself. Set to Empty for untagged types.
  
! --    Cloned_Subtype
  --       Defined in E_Record_Subtype and E_Class_Wide_Subtype entities.
  --       Each such entity can either have a Discriminant_Constraint, in
  --       which case it represents a distinct type from the base type (and
*************** package Einfo is
*** 695,701 ****
  --       the Component_Alignment pragma. Note: this field is currently
  --       stored in a non-standard way, see body for details.
  
! --    Component_Bit_Offset (Uint11)
  --       Defined in record components (E_Component, E_Discriminant). First
  --       bit position of given component, computed from the first bit and
  --       position values given in the component clause. A value of No_Uint
--- 669,675 ----
  --       the Component_Alignment pragma. Note: this field is currently
  --       stored in a non-standard way, see body for details.
  
! --    Component_Bit_Offset
  --       Defined in record components (E_Component, E_Discriminant). First
  --       bit position of given component, computed from the first bit and
  --       position values given in the component clause. A value of No_Uint
*************** package Einfo is
*** 706,719 ****
  --       this field is always set. A negative value is used to represent
  --       a value which is not known at compile time, and must be computed
  --       at run-time (this happens if fields of a record have variable
! --       lengths). See package Layout for details of these values.
  --
  --       Note: Component_Bit_Offset is redundant with respect to the fields
  --       Normalized_First_Bit and Normalized_Position, and could in principle
  --       be eliminated, but it is convenient in several situations, including
  --       use in the backend, to have this redundant field.
  
! --    Component_Clause (Node13)
  --       Defined in record components and discriminants. If a record
  --       representation clause is present for the corresponding record type a
  --       that specifies a position for the component, then the Component_Clause
--- 680,693 ----
  --       this field is always set. A negative value is used to represent
  --       a value which is not known at compile time, and must be computed
  --       at run-time (this happens if fields of a record have variable
! --       lengths). See package Repinfo for details of these values.
  --
  --       Note: Component_Bit_Offset is redundant with respect to the fields
  --       Normalized_First_Bit and Normalized_Position, and could in principle
  --       be eliminated, but it is convenient in several situations, including
  --       use in the backend, to have this redundant field.
  
! --    Component_Clause
  --       Defined in record components and discriminants. If a record
  --       representation clause is present for the corresponding record type a
  --       that specifies a position for the component, then the Component_Clause
*************** package Einfo is
*** 721,821 ****
  --       Set to Empty if no record representation clause was present, or if
  --       there was no specification for this component.
  
! --    Component_Size (Uint22) [implementation base type only]
  --       Defined in array types. It contains the component size value for
  --       the array. A value of No_Uint means that the value is not yet set.
  --       The value can be set by the use of a component size clause, or
  --       by the front end in package Layout, or by the backend. A negative
  --       value is used to represent a value which is not known at compile
  --       time, and must be computed at run-time (this happens if the type
! --       of the component has a variable length size). See package Layout
! --       for details of these values.
  
! --    Component_Type (Node20) [implementation base type only]
  --       Defined in array types and string types. References component type.
  
! --    Contains_Ignored_Ghost_Code (Flag279)
  --       Defined in blocks, packages and their bodies, subprograms and their
  --       bodies. Set if the entity contains any ignored Ghost code in the form
  --       of declaration, procedure call, assignment statement or pragma.
  
! --    Contract (Node34)
  --       Defined in constant, entry, entry family, operator, [generic] package,
  --       package body, protected unit, [generic] subprogram, subprogram body,
  --       variable, task unit, and type entities. Points to the contract of the
  --       entity, holding various assertion items and data classifiers.
  
! --    Contract_Wrapper (Node25)
  --       Defined in entry and entry family entities. Set only when the entry
  --       [family] has contract cases, preconditions, and/or postconditions.
  --       Contains the entity of a wrapper procedure which encapsulates the
  --       original entry and implements precondition/postcondition semantics.
  
! --    Corresponding_Concurrent_Type (Node18)
  --       Defined in record types that are constructed by the expander to
  --       represent task and protected types (Is_Concurrent_Record_Type flag
  --       set). Points to the entity for the corresponding task type or the
  --       protected type.
  
! --    Corresponding_Discriminant (Node19)
  --       Defined in discriminants of a derived type, when the discriminant is
  --       used to constrain a discriminant of the parent type. Points to the
  --       corresponding discriminant in the parent type. Otherwise it is Empty.
  
! --    Corresponding_Equality (Node30)
  --       Defined in function entities for implicit inequality operators.
  --       Denotes the explicit or derived equality operation that creates
  --       the implicit inequality. Note that this field is not present in
  --       other function entities, only in implicit inequality routines,
  --       where Comes_From_Source is always False.
  
! --    Corresponding_Function (Node32)
  --       Defined on procedures internally built with an extra out parameter
  --       to return a constrained array type, when Modify_Tree_For_C is set.
  --       Denotes the function that returns the constrained array type for
  --       which this procedure was built.
  
! --    Corresponding_Procedure (Node32)
  --       Defined on functions that return a constrained array type, when
  --       Modify_Tree_For_C is set. Denotes the internally built procedure
  --       with an extra out parameter created for it.
  
! --    Corresponding_Protected_Entry (Node18)
! --       Defined in subprogram bodies. Set for subprogram bodies that implement
! --       a protected type entry to point to the entity for the entry.
! 
! --    Corresponding_Record_Component (Node21)
  --       Defined in components of a derived untagged record type, including
! --       discriminants. For a regular component or a girder discriminant,
  --       points to the corresponding component in the parent type. Set to
! --       Empty for a non-girder discriminant. It is used by the back end to
  --       ensure the layout of the derived type matches that of the parent
  --       type when there is no representation clause on the derived type.
  
! --    Corresponding_Record_Type (Node18)
  --       Defined in protected and task types and subtypes. References the
  --       entity for the corresponding record type constructed by the expander
  --       (see Exp_Ch9). This type is used to represent values of the task type.
  
! --    Corresponding_Remote_Type (Node22)
  --       Defined in record types that describe the fat pointer structure for
  --       Remote_Access_To_Subprogram types. References the original access
  --       to subprogram type.
  
! --    CR_Discriminant (Node23)
  --       Defined in discriminants of concurrent types. Denotes the homologous
  --       discriminant of the corresponding record type. The CR_Discriminant is
  --       created at the same time as the discriminal, and used to replace
  --       occurrences of the discriminant within the type declaration.
  
! --    Current_Use_Clause (Node27)
  --       Defined in packages and in types. For packages, denotes the use
  --       package clause currently in scope that makes the package use_visible.
  --       For types, it denotes the use_type clause that makes the operators of
  --       the type visible. Used for more precise warning messages on redundant
  --       use clauses.
  
! --    Current_Value (Node9)
  --       Defined in all object entities. Set in E_Variable, E_Constant, formal
  --       parameters and E_Loop_Parameter entities if we have trackable current
  --       values. Set non-Empty if the (constant) current value of the variable
--- 695,792 ----
  --       Set to Empty if no record representation clause was present, or if
  --       there was no specification for this component.
  
! --    Component_Size [implementation base type only]
  --       Defined in array types. It contains the component size value for
  --       the array. A value of No_Uint means that the value is not yet set.
  --       The value can be set by the use of a component size clause, or
  --       by the front end in package Layout, or by the backend. A negative
  --       value is used to represent a value which is not known at compile
  --       time, and must be computed at run-time (this happens if the type
! --       of the component has a variable length size). See package Repinfo
! --       for details of these values. Component_Size can also be negative in
! --       an illegal program that says e.g. "for T'Component_Size use -8;".
  
! --    Component_Type [implementation base type only]
  --       Defined in array types and string types. References component type.
  
! --    Contains_Ignored_Ghost_Code
  --       Defined in blocks, packages and their bodies, subprograms and their
  --       bodies. Set if the entity contains any ignored Ghost code in the form
  --       of declaration, procedure call, assignment statement or pragma.
  
! --    Contract
  --       Defined in constant, entry, entry family, operator, [generic] package,
  --       package body, protected unit, [generic] subprogram, subprogram body,
  --       variable, task unit, and type entities. Points to the contract of the
  --       entity, holding various assertion items and data classifiers.
  
! --    Contract_Wrapper
  --       Defined in entry and entry family entities. Set only when the entry
  --       [family] has contract cases, preconditions, and/or postconditions.
  --       Contains the entity of a wrapper procedure which encapsulates the
  --       original entry and implements precondition/postcondition semantics.
  
! --    Corresponding_Concurrent_Type
  --       Defined in record types that are constructed by the expander to
  --       represent task and protected types (Is_Concurrent_Record_Type flag
  --       set). Points to the entity for the corresponding task type or the
  --       protected type.
  
! --    Corresponding_Discriminant
  --       Defined in discriminants of a derived type, when the discriminant is
  --       used to constrain a discriminant of the parent type. Points to the
  --       corresponding discriminant in the parent type. Otherwise it is Empty.
  
! --    Corresponding_Equality
  --       Defined in function entities for implicit inequality operators.
  --       Denotes the explicit or derived equality operation that creates
  --       the implicit inequality. Note that this field is not present in
  --       other function entities, only in implicit inequality routines,
  --       where Comes_From_Source is always False.
  
! --    Corresponding_Function
  --       Defined on procedures internally built with an extra out parameter
  --       to return a constrained array type, when Modify_Tree_For_C is set.
  --       Denotes the function that returns the constrained array type for
  --       which this procedure was built.
  
! --    Corresponding_Procedure
  --       Defined on functions that return a constrained array type, when
  --       Modify_Tree_For_C is set. Denotes the internally built procedure
  --       with an extra out parameter created for it.
  
! --    Corresponding_Record_Component
  --       Defined in components of a derived untagged record type, including
! --       discriminants. For a regular component or a stored discriminant,
  --       points to the corresponding component in the parent type. Set to
! --       Empty for a non-stored discriminant. It is used by the back end to
  --       ensure the layout of the derived type matches that of the parent
  --       type when there is no representation clause on the derived type.
  
! --    Corresponding_Record_Type
  --       Defined in protected and task types and subtypes. References the
  --       entity for the corresponding record type constructed by the expander
  --       (see Exp_Ch9). This type is used to represent values of the task type.
  
! --    Corresponding_Remote_Type
  --       Defined in record types that describe the fat pointer structure for
  --       Remote_Access_To_Subprogram types. References the original access
  --       to subprogram type.
  
! --    CR_Discriminant
  --       Defined in discriminants of concurrent types. Denotes the homologous
  --       discriminant of the corresponding record type. The CR_Discriminant is
  --       created at the same time as the discriminal, and used to replace
  --       occurrences of the discriminant within the type declaration.
  
! --    Current_Use_Clause
  --       Defined in packages and in types. For packages, denotes the use
  --       package clause currently in scope that makes the package use_visible.
  --       For types, it denotes the use_type clause that makes the operators of
  --       the type visible. Used for more precise warning messages on redundant
  --       use clauses.
  
! --    Current_Value
  --       Defined in all object entities. Set in E_Variable, E_Constant, formal
  --       parameters and E_Loop_Parameter entities if we have trackable current
  --       values. Set non-Empty if the (constant) current value of the variable
*************** package Einfo is
*** 836,842 ****
  --       consulted to give information about the value of OBJ. For more details
  --       on this usage, see the procedure Exp_Util.Get_Current_Value_Condition.
  
! --    Debug_Info_Off (Flag166)
  --       Defined in all entities. Set if a pragma Suppress_Debug_Info applies
  --       to the entity, or if internal processing in the compiler determines
  --       that suppression of debug information is desirable. Note that this
--- 807,813 ----
  --       consulted to give information about the value of OBJ. For more details
  --       on this usage, see the procedure Exp_Util.Get_Current_Value_Condition.
  
! --    Debug_Info_Off
  --       Defined in all entities. Set if a pragma Suppress_Debug_Info applies
  --       to the entity, or if internal processing in the compiler determines
  --       that suppression of debug information is desirable. Note that this
*************** package Einfo is
*** 844,850 ****
  --       determining if Needs_Debug_Info should be set. The backend should
  --       always test Needs_Debug_Info, it should never test Debug_Info_Off.
  
! --    Debug_Renaming_Link (Node25)
  --       Used to link the variable associated with a debug renaming declaration
  --       to the renamed entity. See Exp_Dbug.Debug_Renaming_Declaration for
  --       details of the use of this field.
--- 815,821 ----
  --       determining if Needs_Debug_Info should be set. The backend should
  --       always test Needs_Debug_Info, it should never test Debug_Info_Off.
  
! --    Debug_Renaming_Link
  --       Used to link the variable associated with a debug renaming declaration
  --       to the renamed entity. See Exp_Dbug.Debug_Renaming_Declaration for
  --       details of the use of this field.
*************** package Einfo is
*** 858,895 ****
  --       a private type, then we obtain the declaration node denoted by the
  --       full type, i.e. the full type declaration node. Also note that for
  --       subprograms, this returns the {function,procedure}_specification, not
! --       the subprogram_declaration.
  
! --    Default_Aspect_Component_Value (Node19) [base type only]
  --       Defined in array types. Holds the static value specified in a
  --       Default_Component_Value aspect specification for the array type,
  --       or inherited on derivation.
  
! --    Default_Aspect_Value (Node19) [base type only]
  --       Defined in scalar types. Holds the static value specified in a
  --       Default_Value aspect specification for the type, or inherited
  --       on derivation.
  
! --    Default_Expr_Function (Node21)
  --       Defined in parameters. It holds the entity of the parameterless
  --       function that is built to evaluate the default expression if it is
  --       more complex than a simple identifier or literal. For the latter
  --       simple cases or if there is no default value, this field is Empty.
  
! --    Default_Expressions_Processed (Flag108)
  --       A flag in subprograms (functions, operators, procedures) and in
  --       entries and entry families used to indicate that default expressions
  --       have been processed and to avoid multiple calls to process the
  --       default expressions (see Freeze.Process_Default_Expressions), which
  --       would not only waste time, but also generate false error messages.
  
! --    Default_Value (Node20)
  --       Defined in formal parameters. Points to the node representing the
  --       expression for the default value for the parameter. Empty if the
  --       parameter has no default value (which is always the case for OUT
  --       and IN OUT parameters in the absence of errors).
  
! --    Delay_Cleanups (Flag114)
  --       Defined in entities that have finalization lists (subprograms
  --       blocks, and tasks). Set if there are pending generic body
  --       instantiations for the corresponding entity. If this flag is
--- 829,868 ----
  --       a private type, then we obtain the declaration node denoted by the
  --       full type, i.e. the full type declaration node. Also note that for
  --       subprograms, this returns the {function,procedure}_specification, not
! --       the subprogram_declaration. If the parent of an Itype is a type or
! --       subtype declaration, we return the declaration node as for any other
! --       type. For other Itypes, we return Empty.
  
! --    Default_Aspect_Component_Value [base type only]
  --       Defined in array types. Holds the static value specified in a
  --       Default_Component_Value aspect specification for the array type,
  --       or inherited on derivation.
  
! --    Default_Aspect_Value [base type only]
  --       Defined in scalar types. Holds the static value specified in a
  --       Default_Value aspect specification for the type, or inherited
  --       on derivation.
  
! --    Default_Expr_Function
  --       Defined in parameters. It holds the entity of the parameterless
  --       function that is built to evaluate the default expression if it is
  --       more complex than a simple identifier or literal. For the latter
  --       simple cases or if there is no default value, this field is Empty.
  
! --    Default_Expressions_Processed
  --       A flag in subprograms (functions, operators, procedures) and in
  --       entries and entry families used to indicate that default expressions
  --       have been processed and to avoid multiple calls to process the
  --       default expressions (see Freeze.Process_Default_Expressions), which
  --       would not only waste time, but also generate false error messages.
  
! --    Default_Value
  --       Defined in formal parameters. Points to the node representing the
  --       expression for the default value for the parameter. Empty if the
  --       parameter has no default value (which is always the case for OUT
  --       and IN OUT parameters in the absence of errors).
  
! --    Delay_Cleanups
  --       Defined in entities that have finalization lists (subprograms
  --       blocks, and tasks). Set if there are pending generic body
  --       instantiations for the corresponding entity. If this flag is
*************** package Einfo is
*** 897,903 ****
  --       entity must be delayed, since the insertion of the generic body
  --       may affect cleanup generation (see Inline for further details).
  
! --    Delay_Subprogram_Descriptors (Flag50)
  --       Defined in entities for which exception subprogram descriptors
  --       are generated (subprograms, package declarations and package
  --       bodies). Defined if there are pending generic body instantiations
--- 870,876 ----
  --       entity must be delayed, since the insertion of the generic body
  --       may affect cleanup generation (see Inline for further details).
  
! --    Delay_Subprogram_Descriptors
  --       Defined in entities for which exception subprogram descriptors
  --       are generated (subprograms, package declarations and package
  --       bodies). Defined if there are pending generic body instantiations
*************** package Einfo is
*** 914,935 ****
  --       delayed instantiations (in this case the descriptor refers to the
  --       enclosing elaboration procedure).
  
! --    Delta_Value (Ureal18)
  --       Defined in fixed and decimal types. Points to a universal real
  --       that holds value of delta for the type, as given in the declaration
  --       or as inherited by a subtype or derived type.
  
! --    Dependent_Instances (Elist8)
  --       Defined in packages that are instances. Holds list of instances
  --       of inner generics. Used to place freeze nodes for those instances
  --       after that of the current one, i.e. after the corresponding generic
  --       bodies.
  
! --    Depends_On_Private (Flag14)
  --       Defined in all type entities. Set if the type is private or if it
  --       depends on a private type.
  
! --    Derived_Type_Link (Node31)
  --       Defined in all type and subtype entities. Set in a base type if
  --       a derived type declaration is encountered which derives from
  --       this base type or one of its subtypes, and there are already
--- 887,908 ----
  --       delayed instantiations (in this case the descriptor refers to the
  --       enclosing elaboration procedure).
  
! --    Delta_Value
  --       Defined in fixed and decimal types. Points to a universal real
  --       that holds value of delta for the type, as given in the declaration
  --       or as inherited by a subtype or derived type.
  
! --    Dependent_Instances
  --       Defined in packages that are instances. Holds list of instances
  --       of inner generics. Used to place freeze nodes for those instances
  --       after that of the current one, i.e. after the corresponding generic
  --       bodies.
  
! --    Depends_On_Private
  --       Defined in all type entities. Set if the type is private or if it
  --       depends on a private type.
  
! --    Derived_Type_Link
  --       Defined in all type and subtype entities. Set in a base type if
  --       a derived type declaration is encountered which derives from
  --       this base type or one of its subtypes, and there are already
*************** package Einfo is
*** 967,989 ****
  --       Note: the reason this is marked as a synthesized attribute is that the
  --       way this is stored is as an element of the Subprograms_For_Type field.
  
! --    Digits_Value (Uint17)
  --       Defined in floating point types and subtypes and decimal types and
  --       subtypes. Contains the Digits value specified in the declaration.
  
! --    Direct_Primitive_Operations (Elist10)
  --       Defined in tagged types and subtypes (including synchronized types),
! --       in tagged private types and in tagged incomplete types. Element list
! --       of entities for primitive operations of the tagged type. Not defined
! --       in untagged types. In order to follow the C++ ABI, entities of
! --       primitives that come from source must be stored in this list in the
! --       order of their occurrence in the sources. For incomplete types the
! --       list is always empty.
! --       When expansion is disabled the corresponding record type of a
! --       synchronized type is not constructed. In that case, such types
! --       carry this attribute directly.
  
! --    Directly_Designated_Type (Node20)
  --       Defined in access types. This field points to the type that is
  --       directly designated by the access type. In the case of an access
  --       type to an incomplete type, this field references the incomplete
--- 940,964 ----
  --       Note: the reason this is marked as a synthesized attribute is that the
  --       way this is stored is as an element of the Subprograms_For_Type field.
  
! --    Digits_Value
  --       Defined in floating point types and subtypes and decimal types and
  --       subtypes. Contains the Digits value specified in the declaration.
  
! --    Direct_Primitive_Operations
  --       Defined in tagged types and subtypes (including synchronized types),
! --       in tagged private types, and in tagged incomplete types. Moreover, it
! --       is also defined for untagged types, both when Extensions_Allowed is
! --       True (-gnatX) to support the extension feature of prefixed calls for
! --       untagged types, and when Extensions_Allowed is False to get better
! --       error messages. This field is an element list of entities for
! --       primitive operations of the type. For incomplete types the list is
! --       always empty. In order to follow the C++ ABI, entities of primitives
! --       that come from source must be stored in this list in the order of
! --       their occurrence in the sources. When expansion is disabled, the
! --       corresponding record type of a synchronized type is not constructed.
! --       In that case, such types carry this attribute directly.
  
! --    Directly_Designated_Type
  --       Defined in access types. This field points to the type that is
  --       directly designated by the access type. In the case of an access
  --       type to an incomplete type, this field references the incomplete
*************** package Einfo is
*** 993,1004 ****
  --       Designated_Type obtains this full type in the case of access to an
  --       incomplete type.
  
! --    Disable_Controlled (Flag253)
  --      Present in all entities. Set for a controlled type subject to aspect
  --      Disable_Controlled which evaluates to True. This flag is taken into
  --      account in synthesized attribute Is_Controlled.
  
! --    Discard_Names (Flag88)
  --       Defined in types and exception entities. Set if pragma Discard_Names
  --       applies to the entity. It is also set for declarative regions and
  --       package specs for which a Discard_Names pragma with zero arguments
--- 968,979 ----
  --       Designated_Type obtains this full type in the case of access to an
  --       incomplete type.
  
! --    Disable_Controlled [base type only]
  --      Present in all entities. Set for a controlled type subject to aspect
  --      Disable_Controlled which evaluates to True. This flag is taken into
  --      account in synthesized attribute Is_Controlled.
  
! --    Discard_Names
  --       Defined in types and exception entities. Set if pragma Discard_Names
  --       applies to the entity. It is also set for declarative regions and
  --       package specs for which a Discard_Names pragma with zero arguments
*************** package Einfo is
*** 1007,1030 ****
  --       after the pragma within the same declarative region. This flag is
  --       set to False if a Keep_Names pragma appears for an enumeration type.
  
! --    Discriminal (Node17)
  --       Defined in discriminants (Discriminant formal: GNAT's first
  --       coinage). The entity used as a formal parameter that corresponds
  --       to a discriminant. See section "Handling of Discriminants" for
  --       full details of the use of discriminals.
  
! --    Discriminal_Link (Node10)
  --       Defined in E_In_Parameter or E_Constant entities. For discriminals,
  --       points back to corresponding discriminant. For other entities, must
  --       remain Empty.
  
! --    Discriminant_Checking_Func (Node20)
  --       Defined in components. Points to the defining identifier of the
  --       function built by the expander returns a Boolean indicating whether
  --       the given record component exists for the current discriminant
  --       values.
  
! --    Discriminant_Constraint (Elist21)
  --       Defined in entities whose Has_Discriminants flag is set (concurrent
  --       types, subtypes, record types and subtypes, private types and
  --       subtypes, limited private types and subtypes and incomplete types).
--- 982,1005 ----
  --       after the pragma within the same declarative region. This flag is
  --       set to False if a Keep_Names pragma appears for an enumeration type.
  
! --    Discriminal
  --       Defined in discriminants (Discriminant formal: GNAT's first
  --       coinage). The entity used as a formal parameter that corresponds
  --       to a discriminant. See section "Handling of Discriminants" for
  --       full details of the use of discriminals.
  
! --    Discriminal_Link
  --       Defined in E_In_Parameter or E_Constant entities. For discriminals,
  --       points back to corresponding discriminant. For other entities, must
  --       remain Empty.
  
! --    Discriminant_Checking_Func
  --       Defined in components. Points to the defining identifier of the
  --       function built by the expander returns a Boolean indicating whether
  --       the given record component exists for the current discriminant
  --       values.
  
! --    Discriminant_Constraint
  --       Defined in entities whose Has_Discriminants flag is set (concurrent
  --       types, subtypes, record types and subtypes, private types and
  --       subtypes, limited private types and subtypes and incomplete types).
*************** package Einfo is
*** 1051,1074 ****
  --       In all other cases Discriminant_Constraint contains the empty
  --       Elist (i.e. it is initialized with a call to New_Elmt_List).
  
! --    Discriminant_Default_Value (Node20)
  --       Defined in discriminants. Points to the node representing the
  --       expression for the default value of the discriminant. Set to
  --       Empty if the discriminant has no default value.
  
! --    Discriminant_Number (Uint15)
  --       Defined in discriminants. Gives the ranking of a discriminant in
  --       the list of discriminants of the type, i.e. a sequential integer
  --       index starting at 1 and ranging up to number of discriminants.
  
! --    Dispatch_Table_Wrappers (Elist26) [implementation base type only]
  --       Defined in E_Record_Type and E_Record_Subtype entities. Set in library
  --       level tagged type entities if we are generating statically allocated
  --       dispatch tables. Points to the list of dispatch table wrappers
  --       associated with the tagged type. For an untagged record, contains
  --       No_Elist.
  
! --    DTC_Entity (Node16)
  --       Defined in function and procedure entities. Set to Empty unless
  --       the subprogram is dispatching in which case it references the
  --       Dispatch Table pointer Component. For regular Ada tagged this, this
--- 1026,1054 ----
  --       In all other cases Discriminant_Constraint contains the empty
  --       Elist (i.e. it is initialized with a call to New_Elmt_List).
  
! --    Discriminant_Default_Value
  --       Defined in discriminants. Points to the node representing the
  --       expression for the default value of the discriminant. Set to
  --       Empty if the discriminant has no default value.
  
! --    Discriminant_Number
  --       Defined in discriminants. Gives the ranking of a discriminant in
  --       the list of discriminants of the type, i.e. a sequential integer
  --       index starting at 1 and ranging up to number of discriminants.
  
! --    Dispatch_Table_Wrappers [implementation base type only]
  --       Defined in E_Record_Type and E_Record_Subtype entities. Set in library
  --       level tagged type entities if we are generating statically allocated
  --       dispatch tables. Points to the list of dispatch table wrappers
  --       associated with the tagged type. For an untagged record, contains
  --       No_Elist.
  
! --    Dynamic_Call_Helper
! --       Defined on subprogram entities. Set if the subprogram has class-wide
! --       preconditions. Denotes the helper that evaluates at run time the
! --       class-wide preconditions performing dispatching calls.
! 
! --    DTC_Entity
  --       Defined in function and procedure entities. Set to Empty unless
  --       the subprogram is dispatching in which case it references the
  --       Dispatch Table pointer Component. For regular Ada tagged this, this
*************** package Einfo is
*** 1077,1092 ****
  --       Vtable pointer for the Vtable containing the entry referencing the
  --       subprogram.
  
! --    DT_Entry_Count (Uint15)
  --       Defined in E_Component entities. Only used for component marked
  --       Is_Tag. Store the number of entries in the Vtable (or Dispatch Table)
  
! --    DT_Offset_To_Top_Func (Node25)
  --       Defined in E_Component entities. Only used for component marked
  --       Is_Tag. If present it stores the Offset_To_Top function used to
  --       provide this value in tagged types whose ancestor has discriminants.
  
! --    DT_Position (Uint15)
  --       Defined in function and procedure entities which are dispatching
  --       (should not be referenced without first checking that flag
  --       Is_Dispatching_Operation is True). Contains the offset into
--- 1057,1072 ----
  --       Vtable pointer for the Vtable containing the entry referencing the
  --       subprogram.
  
! --    DT_Entry_Count
  --       Defined in E_Component entities. Only used for component marked
  --       Is_Tag. Store the number of entries in the Vtable (or Dispatch Table)
  
! --    DT_Offset_To_Top_Func
  --       Defined in E_Component entities. Only used for component marked
  --       Is_Tag. If present it stores the Offset_To_Top function used to
  --       provide this value in tagged types whose ancestor has discriminants.
  
! --    DT_Position
  --       Defined in function and procedure entities which are dispatching
  --       (should not be referenced without first checking that flag
  --       Is_Dispatching_Operation is True). Contains the offset into
*************** package Einfo is
*** 1096,1102 ****
  --       Defined in all entities. Contains a value of the enumeration type
  --       Entity_Kind declared in a subsequent section in this spec.
  
! --    Elaborate_Body_Desirable (Flag210)
  --       Defined in package entities. Set if the elaboration circuitry detects
  --       a case where there is a package body that modifies one or more visible
  --       entities in the package spec and there is no explicit Elaborate_Body
--- 1076,1082 ----
  --       Defined in all entities. Contains a value of the enumeration type
  --       Entity_Kind declared in a subsequent section in this spec.
  
! --    Elaborate_Body_Desirable
  --       Defined in package entities. Set if the elaboration circuitry detects
  --       a case where there is a package body that modifies one or more visible
  --       entities in the package spec and there is no explicit Elaborate_Body
*************** package Einfo is
*** 1104,1110 ****
  --       which attempts, but does not promise, to elaborate the body as close
  --       to the spec as possible.
  
! --    Elaboration_Entity (Node13)
  --       Defined in entry, entry family, [generic] package, and subprogram
  --       entities. This is a counter associated with the unit that is initially
  --       set to zero, is incremented when an elaboration request for the unit
--- 1084,1090 ----
  --       which attempts, but does not promise, to elaborate the body as close
  --       to the spec as possible.
  
! --    Elaboration_Entity
  --       Defined in entry, entry family, [generic] package, and subprogram
  --       entities. This is a counter associated with the unit that is initially
  --       set to zero, is incremented when an elaboration request for the unit
*************** package Einfo is
*** 1124,1130 ****
  --       allocated (since we don't know early enough whether or not there
  --       is elaboration code), but is simply not used for any purpose.
  
! --    Elaboration_Entity_Required (Flag174)
  --       Defined in entry, entry family, [generic] package, and subprogram
  --       entities. Set only if Elaboration_Entity is non-Empty to indicate that
  --       the counter is required to be non-zero even if there is no other
--- 1104,1110 ----
  --       allocated (since we don't know early enough whether or not there
  --       is elaboration code), but is simply not used for any purpose.
  
! --    Elaboration_Entity_Required
  --       Defined in entry, entry family, [generic] package, and subprogram
  --       entities. Set only if Elaboration_Entity is non-Empty to indicate that
  --       the counter is required to be non-zero even if there is no other
*************** package Einfo is
*** 1134,1163 ****
  --       then if there is no other elaboration code, obviously there is no
  --       need to set the flag.
  
! --    Encapsulating_State (Node32)
  --       Defined in abstract state, constant and variable entities. Contains
  --       the entity of an ancestor state or a single concurrent type whose
  --       refinement utilizes this item as a constituent.
  
! --    Enclosing_Scope (Node18)
  --       Defined in labels. Denotes the innermost enclosing construct that
  --       contains the label. Identical to the scope of the label, except for
  --       labels declared in the body of an accept statement, in which case the
  --       entry_name is the Enclosing_Scope. Used to validate goto's within
  --       accept statements.
  
! --    Entry_Accepted (Flag152)
  --       Defined in E_Entry and E_Entry_Family entities. Set if there is
  --       at least one accept for this entry in the task body. Used to
  --       generate warnings for missing accepts.
  
! --    Entry_Bodies_Array (Node19)
  --       Defined in protected types for which Has_Entries is true.
  --       This is the defining identifier for the array of entry body
  --       action procedures and barrier functions used by the runtime to
  --       execute the user code associated with each entry.
  
! --    Entry_Cancel_Parameter (Node23)
  --       Defined in blocks. This only applies to a block statement for
  --       which the Is_Asynchronous_Call_Block flag is set. It
  --       contains the defining identifier of an object that must be
--- 1114,1143 ----
  --       then if there is no other elaboration code, obviously there is no
  --       need to set the flag.
  
! --    Encapsulating_State
  --       Defined in abstract state, constant and variable entities. Contains
  --       the entity of an ancestor state or a single concurrent type whose
  --       refinement utilizes this item as a constituent.
  
! --    Enclosing_Scope
  --       Defined in labels. Denotes the innermost enclosing construct that
  --       contains the label. Identical to the scope of the label, except for
  --       labels declared in the body of an accept statement, in which case the
  --       entry_name is the Enclosing_Scope. Used to validate goto's within
  --       accept statements.
  
! --    Entry_Accepted
  --       Defined in E_Entry and E_Entry_Family entities. Set if there is
  --       at least one accept for this entry in the task body. Used to
  --       generate warnings for missing accepts.
  
! --    Entry_Bodies_Array
  --       Defined in protected types for which Has_Entries is true.
  --       This is the defining identifier for the array of entry body
  --       action procedures and barrier functions used by the runtime to
  --       execute the user code associated with each entry.
  
! --    Entry_Cancel_Parameter
  --       Defined in blocks. This only applies to a block statement for
  --       which the Is_Asynchronous_Call_Block flag is set. It
  --       contains the defining identifier of an object that must be
*************** package Einfo is
*** 1168,1184 ****
  --       in the case of protected entry calls. In both cases the objects
  --       are declared in outer scopes to this block.
  
! --    Entry_Component (Node11)
  --       Defined in formal parameters (in, in out and out parameters). Used
  --       only for formals of entries. References the corresponding component
  --       of the entry parameter record for the entry.
  
! --    Entry_Formal (Node16)
  --       Defined in components of the record built to correspond to entry
  --       parameters. This field points from the component to the formal. It
  --       is the back pointer corresponding to Entry_Component.
  
! --    Entry_Index_Constant (Node18)
  --       Defined in an entry index parameter. This is an identifier that
  --       eventually becomes the name of a constant representing the index
  --       of the entry family member whose entry body is being executed. Used
--- 1148,1164 ----
  --       in the case of protected entry calls. In both cases the objects
  --       are declared in outer scopes to this block.
  
! --    Entry_Component
  --       Defined in formal parameters (in, in out and out parameters). Used
  --       only for formals of entries. References the corresponding component
  --       of the entry parameter record for the entry.
  
! --    Entry_Formal
  --       Defined in components of the record built to correspond to entry
  --       parameters. This field points from the component to the formal. It
  --       is the back pointer corresponding to Entry_Component.
  
! --    Entry_Index_Constant
  --       Defined in an entry index parameter. This is an identifier that
  --       eventually becomes the name of a constant representing the index
  --       of the entry family member whose entry body is being executed. Used
*************** package Einfo is
*** 1190,1201 ****
  --       accept statement for a member of the family, and in the prefix of
  --       'COUNT when it applies to a family member.
  
! --    Entry_Max_Queue_Lengths_Array (Node35)
  --       Defined in protected types for which Has_Entries is true. Contains the
  --       defining identifier for the array of naturals used by the runtime to
  --       limit the queue size of each entry individually.
  
! --    Entry_Parameters_Type (Node15)
  --       Defined in entries. Points to the access-to-record type that is
  --       constructed by the expander to hold a reference to the parameter
  --       values. This reference is manipulated (as an address) by the
--- 1170,1181 ----
  --       accept statement for a member of the family, and in the prefix of
  --       'COUNT when it applies to a family member.
  
! --    Entry_Max_Queue_Lengths_Array
  --       Defined in protected types for which Has_Entries is true. Contains the
  --       defining identifier for the array of naturals used by the runtime to
  --       limit the queue size of each entry individually.
  
! --    Entry_Parameters_Type
  --       Defined in entries. Points to the access-to-record type that is
  --       constructed by the expander to hold a reference to the parameter
  --       values. This reference is manipulated (as an address) by the
*************** package Einfo is
*** 1204,1214 ****
  --       for further details). Entry_Parameters_Type is Empty if the entry
  --       has no parameters.
  
! --    Enumeration_Pos (Uint11)
  --       Defined in enumeration literals. Contains the position number
  --       corresponding to the value of the enumeration literal.
  
! --    Enumeration_Rep (Uint12)
  --       Defined in enumeration literals. Contains the representation that
  --       corresponds to the value of the enumeration literal. Note that
  --       this is normally the same as Enumeration_Pos except in the presence
--- 1184,1194 ----
  --       for further details). Entry_Parameters_Type is Empty if the entry
  --       has no parameters.
  
! --    Enumeration_Pos
  --       Defined in enumeration literals. Contains the position number
  --       corresponding to the value of the enumeration literal.
  
! --    Enumeration_Rep
  --       Defined in enumeration literals. Contains the representation that
  --       corresponds to the value of the enumeration literal. Note that
  --       this is normally the same as Enumeration_Pos except in the presence
*************** package Einfo is
*** 1216,1222 ****
  --       position of the literal within the type and Rep will have be the
  --       value given in the representation clause.
  
! --    Enumeration_Rep_Expr (Node22)
  --       Defined in enumeration literals. Points to the expression in an
  --       associated enumeration rep clause that provides the representation
  --       value for this literal. Empty if no enumeration rep clause for this
--- 1196,1202 ----
  --       position of the literal within the type and Rep will have be the
  --       value given in the representation clause.
  
! --    Enumeration_Rep_Expr
  --       Defined in enumeration literals. Points to the expression in an
  --       associated enumeration rep clause that provides the representation
  --       value for this literal. Empty if no enumeration rep clause for this
*************** package Einfo is
*** 1224,1230 ****
  --       an error situation). This is also used to catch duplicate entries
  --       for the same literal.
  
! --    Enum_Pos_To_Rep (Node23)
  --       Defined in enumeration types, but not enumeration subtypes. Set to
  --       Empty unless the enumeration type has a non-standard representation,
  --       i.e. at least one literal has a representation value different from
--- 1204,1210 ----
  --       an error situation). This is also used to catch duplicate entries
  --       for the same literal.
  
! --    Enum_Pos_To_Rep
  --       Defined in enumeration types, but not enumeration subtypes. Set to
  --       Empty unless the enumeration type has a non-standard representation,
  --       i.e. at least one literal has a representation value different from
*************** package Einfo is
*** 1236,1242 ****
  --       the representation is contiguous, then Enum_Pos_To_Rep is the entity
  --       of the index type defined above.
  
! --    Equivalent_Type (Node18)
  --       Defined in class wide types and subtypes, access to protected
  --       subprogram types, and in exception types. For a classwide type, it
  --       is always Empty. For a class wide subtype, it points to an entity
--- 1216,1222 ----
  --       the representation is contiguous, then Enum_Pos_To_Rep is the entity
  --       of the index type defined above.
  
! --    Equivalent_Type
  --       Defined in class wide types and subtypes, access to protected
  --       subprogram types, and in exception types. For a classwide type, it
  --       is always Empty. For a class wide subtype, it points to an entity
*************** package Einfo is
*** 1250,1256 ****
  --       protected object. For remote Access_To_Subprogram types, it denotes
  --       the record that is the fat pointer representation of an RAST.
  
! --    Esize (Uint12)
  --       Defined in all types and subtypes, and also for components, constants,
  --       and variables, including exceptions where it refers to the static data
  --       allocated for an exception. Contains the Object_Size of the type or of
--- 1230,1236 ----
  --       protected object. For remote Access_To_Subprogram types, it denotes
  --       the record that is the fat pointer representation of an RAST.
  
! --    Esize
  --       Defined in all types and subtypes, and also for components, constants,
  --       and variables, including exceptions where it refers to the static data
  --       allocated for an exception. Contains the Object_Size of the type or of
*************** package Einfo is
*** 1266,1272 ****
  --       During backend processing, the value is back annotated for all zero
  --       values, so that after the call to the backend, the value is set.
  
! --    Etype (Node5)
  --       Defined in all entities. Represents the type of the entity, which
  --       is itself another entity. For a type entity, points to the parent
  --       type for a derived type, or if the type is not derived, points to
--- 1246,1252 ----
  --       During backend processing, the value is back annotated for all zero
  --       values, so that after the call to the backend, the value is set.
  
! --    Etype
  --       Defined in all entities. Represents the type of the entity, which
  --       is itself another entity. For a type entity, points to the parent
  --       type for a derived type, or if the type is not derived, points to
*************** package Einfo is
*** 1279,1285 ****
  --       Note one obscure case: for pragma Default_Storage_Pool (null), the
  --       Etype of the N_Null node is Empty.
  
! --    Extra_Accessibility (Node13)
  --       Defined in formal parameters in the non-generic case. Normally Empty,
  --       but if expansion is active, and a parameter is one for which a
  --       dynamic accessibility check is required, then an extra formal of type
--- 1259,1265 ----
  --       Note one obscure case: for pragma Default_Storage_Pool (null), the
  --       Etype of the N_Null node is Empty.
  
! --    Extra_Accessibility
  --       Defined in formal parameters in the non-generic case. Normally Empty,
  --       but if expansion is active, and a parameter is one for which a
  --       dynamic accessibility check is required, then an extra formal of type
*************** package Einfo is
*** 1291,1297 ****
  --       must be retrieved through the entity designed by this field instead of
  --       being computed.
  
! --    Extra_Accessibility_Of_Result (Node19)
  --       Defined in (non-generic) Function, Operator, and Subprogram_Type
  --       entities. Normally Empty, but if expansion is active, and a function
  --       is one for which "the accessibility level of the result ... determined
--- 1271,1277 ----
  --       must be retrieved through the entity designed by this field instead of
  --       being computed.
  
! --    Extra_Accessibility_Of_Result
  --       Defined in (non-generic) Function, Operator, and Subprogram_Type
  --       entities. Normally Empty, but if expansion is active, and a function
  --       is one for which "the accessibility level of the result ... determined
*************** package Einfo is
*** 1300,1306 ****
  --       and the Extra_Accessibility_Of_Result field of the function points to
  --       the entity for this extra formal.
  
! --    Extra_Constrained (Node23)
  --       Defined in formal parameters in the non-generic case. Normally Empty,
  --       but if expansion is active and a parameter is one for which a dynamic
  --       indication of its constrained status is required, then an extra formal
--- 1280,1286 ----
  --       and the Extra_Accessibility_Of_Result field of the function points to
  --       the entity for this extra formal.
  
! --    Extra_Constrained
  --       Defined in formal parameters in the non-generic case. Normally Empty,
  --       but if expansion is active and a parameter is one for which a dynamic
  --       indication of its constrained status is required, then an extra formal
*************** package Einfo is
*** 1312,1318 ****
  --       must be retrieved through the entity designed by this field instead of
  --       being computed.
  
! --    Extra_Formal (Node15)
  --       Defined in formal parameters in the non-generic case. Certain
  --       parameters require extra implicit information to be passed (e.g. the
  --       flag indicating if an unconstrained variant record argument is
--- 1292,1298 ----
  --       must be retrieved through the entity designed by this field instead of
  --       being computed.
  
! --    Extra_Formal
  --       Defined in formal parameters in the non-generic case. Certain
  --       parameters require extra implicit information to be passed (e.g. the
  --       flag indicating if an unconstrained variant record argument is
*************** package Einfo is
*** 1327,1345 ****
  --       in connection with unnesting of subprograms, where the ARECnF formal
  --       that represents an activation record pointer is an extra formal.
  
! --    Extra_Formals (Node28)
  --       Applies to subprograms, subprogram types, entries, and entry
  --       families. Returns first extra formal of the subprogram or entry.
  --       Returns Empty if there are no extra formals.
  
! --    Finalization_Master (Node23) [root type only]
  --       Defined in access-to-controlled or access-to-class-wide types. The
  --       field contains the entity of the finalization master which handles
  --       dynamically allocated controlled objects referenced by the access
  --       type. Empty for access-to-subprogram types. Empty for access types
  --       whose designated type does not need finalization actions.
  
! --    Finalize_Storage_Only (Flag158) [base type only]
  --       Defined in all types. Set on direct controlled types to which a
  --       valid Finalize_Storage_Only pragma applies. This flag is also set on
  --       composite types when they have at least one controlled component and
--- 1307,1325 ----
  --       in connection with unnesting of subprograms, where the ARECnF formal
  --       that represents an activation record pointer is an extra formal.
  
! --    Extra_Formals
  --       Applies to subprograms, subprogram types, entries, and entry
  --       families. Returns first extra formal of the subprogram or entry.
  --       Returns Empty if there are no extra formals.
  
! --    Finalization_Master [root type only]
  --       Defined in access-to-controlled or access-to-class-wide types. The
  --       field contains the entity of the finalization master which handles
  --       dynamically allocated controlled objects referenced by the access
  --       type. Empty for access-to-subprogram types. Empty for access types
  --       whose designated type does not need finalization actions.
  
! --    Finalize_Storage_Only [base type only]
  --       Defined in all types. Set on direct controlled types to which a
  --       valid Finalize_Storage_Only pragma applies. This flag is also set on
  --       composite types when they have at least one controlled component and
*************** package Einfo is
*** 1348,1354 ****
  --       the Finalize_Storage_Only pragma is required at each level of
  --       derivation.
  
! --    Finalizer (Node28)
  --       Applies to package declarations and bodies. Contains the entity of the
  --       library-level program which finalizes all package-level controlled
  --       objects.
--- 1328,1334 ----
  --       the Finalize_Storage_Only pragma is required at each level of
  --       derivation.
  
! --    Finalizer
  --       Applies to package declarations and bodies. Contains the entity of the
  --       library-level program which finalizes all package-level controlled
  --       objects.
*************** package Einfo is
*** 1364,1370 ****
  --       Similar to First_Component, but discriminants are not skipped, so will
  --       find the first discriminant if discriminants are present.
  
! --    First_Entity (Node17)
  --       Defined in all entities which act as scopes to which a list of
  --       associated entities is attached (blocks, class subtypes and types,
  --       entries, functions, loops, packages, procedures, protected objects,
--- 1344,1350 ----
  --       Similar to First_Component, but discriminants are not skipped, so will
  --       find the first discriminant if discriminants are present.
  
! --    First_Entity
  --       Defined in all entities which act as scopes to which a list of
  --       associated entities is attached (blocks, class subtypes and types,
  --       entries, functions, loops, packages, procedures, protected objects,
*************** package Einfo is
*** 1372,1378 ****
  --       Points to a list of associated entities using the Next_Entity field
  --       as a chain pointer with Empty marking the end of the list.
  
! --    First_Exit_Statement (Node8)
  --       Defined in E_Loop entity. The exit statements for a loop are chained
  --       (in reverse order of appearance) using this field to point to the
  --       first entry in the chain (last exit statement in the loop). The
--- 1352,1358 ----
  --       Points to a list of associated entities using the Next_Entity field
  --       as a chain pointer with Empty marking the end of the list.
  
! --    First_Exit_Statement
  --       Defined in E_Loop entity. The exit statements for a loop are chained
  --       (in reverse order of appearance) using this field to point to the
  --       first entry in the chain (last exit statement in the loop). The
*************** package Einfo is
*** 1392,1398 ****
  --       Returns Empty if there are no formals. The list returned includes
  --       all the extra formals (see description of Extra_Formals field).
  
! --    First_Index (Node17)
  --       Defined in array types and subtypes. By introducing implicit subtypes
  --       for the index constraints, we have the same structure for constrained
  --       and unconstrained arrays, subtype marks and discrete ranges are
--- 1372,1378 ----
  --       Returns Empty if there are no formals. The list returned includes
  --       all the extra formals (see description of Extra_Formals field).
  
! --    First_Index
  --       Defined in array types and subtypes. By introducing implicit subtypes
  --       for the index constraints, we have the same structure for constrained
  --       and unconstrained arrays, subtype marks and discrete ranges are
*************** package Einfo is
*** 1402,1408 ****
  --       this field is defined for the case of string literal subtypes, but is
  --       always Empty.
  
! --    First_Literal (Node17)
  --       Defined in all enumeration types, including character and boolean
  --       types. This field points to the first enumeration literal entity
  --       for the type (i.e. it is set to First (Literals (N)) where N is
--- 1382,1388 ----
  --       this field is defined for the case of string literal subtypes, but is
  --       always Empty.
  
! --    First_Literal
  --       Defined in all enumeration types, including character and boolean
  --       types. This field points to the first enumeration literal entity
  --       for the type (i.e. it is set to First (Literals (N)) where N is
*************** package Einfo is
*** 1412,1418 ****
  --       Note that this field is set in enumeration subtypes, but it still
  --       points to the first literal of the base type in this case.
  
! --    First_Private_Entity (Node16)
  --       Defined in all entities containing private parts (packages, protected
  --       types and subtypes, task types and subtypes). The entities on the
  --       entity chain are in order of declaration, so the entries for private
--- 1392,1398 ----
  --       Note that this field is set in enumeration subtypes, but it still
  --       points to the first literal of the base type in this case.
  
! --    First_Private_Entity
  --       Defined in all entities containing private parts (packages, protected
  --       types and subtypes, task types and subtypes). The entities on the
  --       entity chain are in order of declaration, so the entries for private
*************** package Einfo is
*** 1420,1426 ****
  --       entity for the private part. It is Empty if there are no entities
  --       declared in the private part or if there is no private part.
  
! --    First_Rep_Item (Node6)
  --       Defined in all entities. If non-empty, points to a linked list of
  --       representation pragmas nodes and representation clause nodes that
  --       apply to the entity, linked using Next_Rep_Item, with Empty marking
--- 1400,1406 ----
  --       entity for the private part. It is Empty if there are no entities
  --       declared in the private part or if there is no private part.
  
! --    First_Rep_Item
  --       Defined in all entities. If non-empty, points to a linked list of
  --       representation pragmas nodes and representation clause nodes that
  --       apply to the entity, linked using Next_Rep_Item, with Empty marking
*************** package Einfo is
*** 1457,1481 ****
  --       Note in particular that size clauses are defined only for this
  --       purpose, and should only be accessed if Has_Size_Clause is set.
  
! --    Float_Rep (Uint10)
  --       Defined in floating-point entities. Contains a value of type
  --       Float_Rep_Kind. Together with the Digits_Value uniquely defines
  --       the floating-point representation to be used.
  
! --    Freeze_Node (Node7)
  --       Defined in all entities. If there is an associated freeze node for the
  --       entity, this field references this freeze node. If no freeze node is
  --       associated with the entity, then this field is Empty. See package
  --       Freeze for further details.
  
! --    From_Limited_With (Flag159)
  --       Defined in abtract states, package and type entities. Set to True when
  --       the related entity is generated by the expansion of a limited with
  --       clause. Such an entity is said to be a "shadow" - it acts as the
  --       abstract view of a state or variable or as the incomplete view of a
  --       type by inheriting relevant attributes from the said entity.
  
! --    Full_View (Node11)
  --       Defined in all type and subtype entities and in deferred constants.
  --       References the entity for the corresponding full type or constant
  --       declaration. For all types other than private and incomplete types,
--- 1437,1461 ----
  --       Note in particular that size clauses are defined only for this
  --       purpose, and should only be accessed if Has_Size_Clause is set.
  
! --    Float_Rep [base type only]
  --       Defined in floating-point entities. Contains a value of type
  --       Float_Rep_Kind. Together with the Digits_Value uniquely defines
  --       the floating-point representation to be used.
  
! --    Freeze_Node
  --       Defined in all entities. If there is an associated freeze node for the
  --       entity, this field references this freeze node. If no freeze node is
  --       associated with the entity, then this field is Empty. See package
  --       Freeze for further details.
  
! --    From_Limited_With
  --       Defined in abtract states, package and type entities. Set to True when
  --       the related entity is generated by the expansion of a limited with
  --       clause. Such an entity is said to be a "shadow" - it acts as the
  --       abstract view of a state or variable or as the incomplete view of a
  --       type by inheriting relevant attributes from the said entity.
  
! --    Full_View
  --       Defined in all type and subtype entities and in deferred constants.
  --       References the entity for the corresponding full type or constant
  --       declaration. For all types other than private and incomplete types,
*************** package Einfo is
*** 1484,1512 ****
  --       E3 then the full view of E1 is E2, and the full view of E2 is E3. See
  --       also Underlying_Type.
  
! --    Generic_Homonym (Node11)
  --       Defined in generic packages. The generic homonym is the entity of
  --       a renaming declaration inserted in every generic unit. It is used
  --       to resolve the name of a local entity that is given by a qualified
  --       name, when the generic entity itself is hidden by a local name.
  
! --    Generic_Renamings (Elist23)
  --       Defined in package and subprogram instances. Holds mapping that
  --       associates generic parameters with the corresponding instances, in
  --       those cases where the instance is an entity.
  
! --    Handler_Records (List10)
  --       Defined in subprogram and package entities. Points to a list of
  --       identifiers referencing the handler record entities for the
  --       corresponding unit.
  
! --    Has_Aliased_Components (Flag135) [implementation base type only]
  --       Defined in array type entities. Indicates that the component type
  --       of the array is aliased. Should this also be set for records to
  --       indicate that at least one component is aliased (see processing in
  --       Sem_Prag.Process_Atomic_Independent_Shared_Volatile???)
  
! --    Has_Alignment_Clause (Flag46)
  --       Defined in all type entities and objects. Indicates if an alignment
  --       clause has been given for the entity. If set, then Alignment_Clause
  --       returns the N_Attribute_Definition node for the alignment attribute
--- 1464,1492 ----
  --       E3 then the full view of E1 is E2, and the full view of E2 is E3. See
  --       also Underlying_Type.
  
! --    Generic_Homonym
  --       Defined in generic packages. The generic homonym is the entity of
  --       a renaming declaration inserted in every generic unit. It is used
  --       to resolve the name of a local entity that is given by a qualified
  --       name, when the generic entity itself is hidden by a local name.
  
! --    Generic_Renamings
  --       Defined in package and subprogram instances. Holds mapping that
  --       associates generic parameters with the corresponding instances, in
  --       those cases where the instance is an entity.
  
! --    Handler_Records
  --       Defined in subprogram and package entities. Points to a list of
  --       identifiers referencing the handler record entities for the
  --       corresponding unit.
  
! --    Has_Aliased_Components [implementation base type only]
  --       Defined in array type entities. Indicates that the component type
  --       of the array is aliased. Should this also be set for records to
  --       indicate that at least one component is aliased (see processing in
  --       Sem_Prag.Process_Atomic_Independent_Shared_Volatile???)
  
! --    Has_Alignment_Clause
  --       Defined in all type entities and objects. Indicates if an alignment
  --       clause has been given for the entity. If set, then Alignment_Clause
  --       returns the N_Attribute_Definition node for the alignment attribute
*************** package Einfo is
*** 1514,1526 ****
  --       even when Alignment_Clause returns non_Empty (this happens in the case
  --       of derived type declarations).
  
! --    Has_All_Calls_Remote (Flag79)
  --       Defined in all library unit entities. Set if the library unit has an
  --       All_Calls_Remote pragma. Note that such entities must also be RCI
  --       entities, so the flag Is_Remote_Call_Interface will always be set if
  --       this flag is set.
  
! --    Has_Atomic_Components (Flag86) [implementation base type only]
  --       Defined in all types and objects. Set only for an array type or
  --       an array object if a valid pragma Atomic_Components applies to the
  --       type or object. Note that in the case of an object, this flag is
--- 1494,1506 ----
  --       even when Alignment_Clause returns non_Empty (this happens in the case
  --       of derived type declarations).
  
! --    Has_All_Calls_Remote
  --       Defined in all library unit entities. Set if the library unit has an
  --       All_Calls_Remote pragma. Note that such entities must also be RCI
  --       entities, so the flag Is_Remote_Call_Interface will always be set if
  --       this flag is set.
  
! --    Has_Atomic_Components [implementation base type only]
  --       Defined in all types and objects. Set only for an array type or
  --       an array object if a valid pragma Atomic_Components applies to the
  --       type or object. Note that in the case of an object, this flag is
*************** package Einfo is
*** 1536,1542 ****
  --       represent protected types. Returns True if there is at least one
  --       Attach_Handler pragma in the corresponding specification.
  
! --    Has_Biased_Representation (Flag139)
  --       Defined in discrete types (where it applies to the type'size value),
  --       and to objects (both stand-alone and components), where it applies to
  --       the size of the object from a size or record component clause. In
--- 1516,1522 ----
  --       represent protected types. Returns True if there is at least one
  --       Attach_Handler pragma in the corresponding specification.
  
! --    Has_Biased_Representation
  --       Defined in discrete types (where it applies to the type'size value),
  --       and to objects (both stand-alone and components), where it applies to
  --       the size of the object from a size or record component clause. In
*************** package Einfo is
*** 1552,1578 ****
  --       size of the type, forcing biased representation for the object, but
  --       the subtype is still an unbiased type.
  
! --    Has_Completion (Flag26)
  --       Defined in all entities that require a completion (functions,
  --       procedures, private types, limited private types, incomplete types,
  --       constants and packages that require a body). The flag is set if the
  --       completion has been encountered and analyzed.
  
! --    Has_Completion_In_Body (Flag71)
  --       Defined in all entities for types and subtypes. Set only in "Taft
  --       amendment types" (incomplete types whose full declaration appears in
  --       the package body).
  
! --    Has_Complex_Representation (Flag140) [implementation base type only]
  --       Defined in record types. Set only for a base type to which a valid
  --       pragma Complex_Representation applies.
  
! --    Has_Component_Size_Clause (Flag68) [implementation base type only]
  --       Defined in all type entities. Set if a component size clause is
  --       Defined for the given type. Note that this flag can be False even
  --       if Component_Size is non-zero (happens in the case of derived types).
  
! --    Has_Constrained_Partial_View (Flag187) [base type only]
  --       Defined in private type and their completions, when the private
  --       type has no discriminants and the full view has discriminants with
  --       defaults. In Ada 2005 heap-allocated objects of such types are not
--- 1532,1558 ----
  --       size of the type, forcing biased representation for the object, but
  --       the subtype is still an unbiased type.
  
! --    Has_Completion
  --       Defined in all entities that require a completion (functions,
  --       procedures, private types, limited private types, incomplete types,
  --       constants and packages that require a body). The flag is set if the
  --       completion has been encountered and analyzed.
  
! --    Has_Completion_In_Body
  --       Defined in all entities for types and subtypes. Set only in "Taft
  --       amendment types" (incomplete types whose full declaration appears in
  --       the package body).
  
! --    Has_Complex_Representation [implementation base type only]
  --       Defined in record types. Set only for a base type to which a valid
  --       pragma Complex_Representation applies.
  
! --    Has_Component_Size_Clause [implementation base type only]
  --       Defined in all type entities. Set if a component size clause is
  --       Defined for the given type. Note that this flag can be False even
  --       if Component_Size is non-zero (happens in the case of derived types).
  
! --    Has_Constrained_Partial_View [base type only]
  --       Defined in private type and their completions, when the private
  --       type has no discriminants and the full view has discriminants with
  --       defaults. In Ada 2005 heap-allocated objects of such types are not
*************** package Einfo is
*** 1584,1609 ****
  --       partial view. The predicate Object_Type_Has_Constrained_Partial_View
  --       in sem_aux is used to test for this case.
  
! --    Has_Contiguous_Rep (Flag181)
  --       Defined in enumeration types. Set if the type has a representation
  --       clause whose entries are successive integers.
  
! --    Has_Controlled_Component (Flag43) [base type only]
  --       Defined in all type and subtype entities. Set only for composite type
  --       entities which contain a component that either is a controlled type,
  --       or itself contains controlled component (i.e. either Is_Controlled or
  --       Has_Controlled_Component is set for at least one component).
  
! --    Has_Controlling_Result (Flag98)
  --       Defined in E_Function entities. Set if the function is a primitive
  --       function of a tagged type which can dispatch on result.
  
! --    Has_Convention_Pragma (Flag119)
  --       Defined in all entities. Set for an entity for which a valid pragma
  --       Convention, Import, or Export has been given. Used to prevent more
  --       than one such pragma appearing for a given entity (RM B.1(45)).
  
! --    Has_Default_Aspect (Flag39) [base type only]
  --       Defined in entities for types and subtypes, set for scalar types with
  --       a Default_Value aspect and array types with a Default_Component_Value
  --       aspect. If this flag is set, then a corresponding aspect specification
--- 1564,1589 ----
  --       partial view. The predicate Object_Type_Has_Constrained_Partial_View
  --       in sem_aux is used to test for this case.
  
! --    Has_Contiguous_Rep
  --       Defined in enumeration types. Set if the type has a representation
  --       clause whose entries are successive integers.
  
! --    Has_Controlled_Component [base type only]
  --       Defined in all type and subtype entities. Set only for composite type
  --       entities which contain a component that either is a controlled type,
  --       or itself contains controlled component (i.e. either Is_Controlled or
  --       Has_Controlled_Component is set for at least one component).
  
! --    Has_Controlling_Result
  --       Defined in E_Function entities. Set if the function is a primitive
  --       function of a tagged type which can dispatch on result.
  
! --    Has_Convention_Pragma
  --       Defined in all entities. Set for an entity for which a valid pragma
  --       Convention, Import, or Export has been given. Used to prevent more
  --       than one such pragma appearing for a given entity (RM B.1(45)).
  
! --    Has_Default_Aspect [base type only]
  --       Defined in entities for types and subtypes, set for scalar types with
  --       a Default_Value aspect and array types with a Default_Component_Value
  --       aspect. If this flag is set, then a corresponding aspect specification
*************** package Einfo is
*** 1612,1630 ****
  --       value is set, but it may be overridden by an aspect declaration on
  --       type derivation.
  
! --    Has_Delayed_Aspects (Flag200)
  --      Defined in all entities. Set if the Rep_Item chain for the entity has
  --      one or more N_Aspect_Definition nodes chained which are not to be
  --      evaluated till the freeze point. The aspect definition expression
  --      clause has been preanalyzed to get visibility at the point of use,
  --      but no other action has been taken.
  
! --    Has_Delayed_Freeze (Flag18)
  --       Defined in all entities. Set to indicate that an explicit freeze
  --       node must be generated for the entity at its freezing point. See
  --       separate section ("Delayed Freezing and Elaboration") for details.
  
! --    Has_Delayed_Rep_Aspects (Flag261)
  --       Defined in all types and subtypes. This flag is set if there is at
  --       least one aspect for a representation characteristic that has to be
  --       delayed and is one of the characteristics that may be inherited by
--- 1592,1610 ----
  --       value is set, but it may be overridden by an aspect declaration on
  --       type derivation.
  
! --    Has_Delayed_Aspects
  --      Defined in all entities. Set if the Rep_Item chain for the entity has
  --      one or more N_Aspect_Definition nodes chained which are not to be
  --      evaluated till the freeze point. The aspect definition expression
  --      clause has been preanalyzed to get visibility at the point of use,
  --      but no other action has been taken.
  
! --    Has_Delayed_Freeze
  --       Defined in all entities. Set to indicate that an explicit freeze
  --       node must be generated for the entity at its freezing point. See
  --       separate section ("Delayed Freezing and Elaboration") for details.
  
! --    Has_Delayed_Rep_Aspects
  --       Defined in all types and subtypes. This flag is set if there is at
  --       least one aspect for a representation characteristic that has to be
  --       delayed and is one of the characteristics that may be inherited by
*************** package Einfo is
*** 1638,1651 ****
  --       when the type is subject to pragma Default_Initial_Condition (DIC), or
  --       when the type inherits a DIC pragma from a parent type.
  
! --    Has_Discriminants (Flag5)
  --       Defined in all types and subtypes. For types that are allowed to have
  --       discriminants (record types and subtypes, task types and subtypes,
  --       protected types and subtypes, private types, limited private types,
  --       and incomplete types), indicates if the corresponding type or subtype
  --       has a known discriminant part. Always false for all other types.
  
! --    Has_Dispatch_Table (Flag220)
  --       Defined in E_Record_Types that are tagged. Set to indicate that the
  --       corresponding dispatch table is already built. This flag is used to
  --       avoid duplicate construction of library level dispatch tables (because
--- 1618,1631 ----
  --       when the type is subject to pragma Default_Initial_Condition (DIC), or
  --       when the type inherits a DIC pragma from a parent type.
  
! --    Has_Discriminants
  --       Defined in all types and subtypes. For types that are allowed to have
  --       discriminants (record types and subtypes, task types and subtypes,
  --       protected types and subtypes, private types, limited private types,
  --       and incomplete types), indicates if the corresponding type or subtype
  --       has a known discriminant part. Always false for all other types.
  
! --    Has_Dispatch_Table
  --       Defined in E_Record_Types that are tagged. Set to indicate that the
  --       corresponding dispatch table is already built. This flag is used to
  --       avoid duplicate construction of library level dispatch tables (because
*************** package Einfo is
*** 1653,1659 ****
  --       of the table); otherwise the code that builds the table is added at
  --       the end of the list of declarations of the package.
  
! --    Has_Dynamic_Predicate_Aspect (Flag258)
  --       Defined in all types and subtypes. Set if a Dynamic_Predicate aspect
  --       was explicitly applied to the type. Generally we treat predicates as
  --       static if possible, regardless of whether they are specified using
--- 1633,1639 ----
  --       of the table); otherwise the code that builds the table is added at
  --       the end of the list of declarations of the package.
  
! --    Has_Dynamic_Predicate_Aspect
  --       Defined in all types and subtypes. Set if a Dynamic_Predicate aspect
  --       was explicitly applied to the type. Generally we treat predicates as
  --       static if possible, regardless of whether they are specified using
*************** package Einfo is
*** 1672,1688 ****
  --       Applies to concurrent types. True if any entries are declared
  --       within the task or protected definition for the type.
  
! --    Has_Enumeration_Rep_Clause (Flag66)
  --       Defined in enumeration types. Set if an enumeration representation
  --       clause has been given for this enumeration type. Used to prevent more
  --       than one enumeration representation clause for a given type. Note
  --       that this does not imply a representation with holes, since the rep
  --       clause may merely confirm the default 0..N representation.
  
! --    Has_Exit (Flag47)
  --       Defined in loop entities. Set if the loop contains an exit statement.
  
! --    Has_Expanded_Contract (Flag240)
  --       Defined in functions, procedures, entries, and entry families. Set
  --       when a subprogram has a N_Contract node that has been expanded. The
  --       flag prevents double expansion of a contract when a construct is
--- 1652,1668 ----
  --       Applies to concurrent types. True if any entries are declared
  --       within the task or protected definition for the type.
  
! --    Has_Enumeration_Rep_Clause
  --       Defined in enumeration types. Set if an enumeration representation
  --       clause has been given for this enumeration type. Used to prevent more
  --       than one enumeration representation clause for a given type. Note
  --       that this does not imply a representation with holes, since the rep
  --       clause may merely confirm the default 0..N representation.
  
! --    Has_Exit
  --       Defined in loop entities. Set if the loop contains an exit statement.
  
! --    Has_Expanded_Contract
  --       Defined in functions, procedures, entries, and entry families. Set
  --       when a subprogram has a N_Contract node that has been expanded. The
  --       flag prevents double expansion of a contract when a construct is
*************** package Einfo is
*** 1694,1700 ****
  --       Convention_Intrinsic, Convention_Entry, Convention_Protected,
  --       Convention_Stubbed and Convention_Ada_Pass_By_(Copy,Reference).
  
! --    Has_Forward_Instantiation (Flag175)
  --       Defined in package entities. Set for packages that instantiate local
  --       generic entities before the corresponding generic body has been seen.
  --       If a package has a forward instantiation, we cannot inline subprograms
--- 1674,1680 ----
  --       Convention_Intrinsic, Convention_Entry, Convention_Protected,
  --       Convention_Stubbed and Convention_Ada_Pass_By_(Copy,Reference).
  
! --    Has_Forward_Instantiation
  --       Defined in package entities. Set for packages that instantiate local
  --       generic entities before the corresponding generic body has been seen.
  --       If a package has a forward instantiation, we cannot inline subprograms
*************** package Einfo is
*** 1702,1714 ****
  --       the instance will conflict with the linear elaboration of front-end
  --       inlining.
  
! --    Has_Fully_Qualified_Name (Flag173)
  --       Defined in all entities. Set if the name in the Chars field has been
  --       replaced by the fully qualified name, as used for debug output. See
  --       Exp_Dbug for a full description of the use of this flag and also the
  --       related flag Has_Qualified_Name.
  
! --    Has_Gigi_Rep_Item (Flag82)
  --       Defined in all entities. Set if the rep item chain (referenced by
  --       First_Rep_Item and linked through the Next_Rep_Item chain) contains a
  --       representation item that needs to be specially processed by the back
--- 1682,1694 ----
  --       the instance will conflict with the linear elaboration of front-end
  --       inlining.
  
! --    Has_Fully_Qualified_Name
  --       Defined in all entities. Set if the name in the Chars field has been
  --       replaced by the fully qualified name, as used for debug output. See
  --       Exp_Dbug for a full description of the use of this flag and also the
  --       related flag Has_Qualified_Name.
  
! --    Has_Gigi_Rep_Item
  --       Defined in all entities. Set if the rep item chain (referenced by
  --       First_Rep_Item and linked through the Next_Rep_Item chain) contains a
  --       representation item that needs to be specially processed by the back
*************** package Einfo is
*** 1725,1740 ****
  --       to process any of these items that appear. At least one such item will
  --       be present.
  --
! --    Has_Homonym (Flag56)
  --       Defined in all entities. Set if an entity has a homonym in the same
  --       scope. Used by the backend to generate unique names for all entities.
  
! --    Has_Implicit_Dereference (Flag251)
  --       Defined in types and discriminants. Set if the type has an aspect
  --       Implicit_Dereference. Set also on the discriminant named in the aspect
  --       clause, to simplify type resolution.
  
! --    Has_Independent_Components (Flag34) [implementation base type only]
  --       Defined in all types and objects. Set only for a record type or an
  --       array type or array object if a valid pragma Independent_Components
  --       applies to the type or object. Note that in the case of an object,
--- 1705,1720 ----
  --       to process any of these items that appear. At least one such item will
  --       be present.
  --
! --    Has_Homonym
  --       Defined in all entities. Set if an entity has a homonym in the same
  --       scope. Used by the backend to generate unique names for all entities.
  
! --    Has_Implicit_Dereference
  --       Defined in types and discriminants. Set if the type has an aspect
  --       Implicit_Dereference. Set also on the discriminant named in the aspect
  --       clause, to simplify type resolution.
  
! --    Has_Independent_Components [implementation base type only]
  --       Defined in all types and objects. Set only for a record type or an
  --       array type or array object if a valid pragma Independent_Components
  --       applies to the type or object. Note that in the case of an object,
*************** package Einfo is
*** 1746,1768 ****
  --       usual manner. Also set if a pragma Has_Atomic_Components or pragma
  --       Has_Aliased_Components applies to the type or object.
  
! --    Has_Inheritable_Invariants (Flag248) [base type only]
  --       Defined in all type entities. Set on private types and interface types
  --       which define at least one class-wide invariant. Such invariants must
  --       be inherited by derived types. The flag is also set on the full view
  --       of a private type for completeness.
  
! --    Has_Inherited_DIC (Flag133) [base type only]
  --       Defined in all type entities. Set for a derived type which inherits
  --       pragma Default_Initial_Condition from a parent type.
  
! --    Has_Inherited_Invariants (Flag291) [base type only]
  --       Defined in all type entities. Set on private extensions and derived
  --       types which inherit at least one class-wide invariant from a parent or
  --       an interface type. The flag is also set on the full view of a private
  --       extension for completeness.
  
! --    Has_Initial_Value (Flag219)
  --       Defined in entities for variables and out parameters. Set if there
  --       is an explicit initial value expression in the declaration of the
  --       variable. Note that this is set only if this initial value is
--- 1726,1748 ----
  --       usual manner. Also set if a pragma Has_Atomic_Components or pragma
  --       Has_Aliased_Components applies to the type or object.
  
! --    Has_Inheritable_Invariants [base type only]
  --       Defined in all type entities. Set on private types and interface types
  --       which define at least one class-wide invariant. Such invariants must
  --       be inherited by derived types. The flag is also set on the full view
  --       of a private type for completeness.
  
! --    Has_Inherited_DIC [base type only]
  --       Defined in all type entities. Set for a derived type which inherits
  --       pragma Default_Initial_Condition from a parent type.
  
! --    Has_Inherited_Invariants [base type only]
  --       Defined in all type entities. Set on private extensions and derived
  --       types which inherit at least one class-wide invariant from a parent or
  --       an interface type. The flag is also set on the full view of a private
  --       extension for completeness.
  
! --    Has_Initial_Value
  --       Defined in entities for variables and out parameters. Set if there
  --       is an explicit initial value expression in the declaration of the
  --       variable. Note that this is set only if this initial value is
*************** package Einfo is
*** 1785,1819 ****
  --       Defined in all entities. True for non-generic package entities that
  --       are non-instances and their Limited_View attribute is present.
  
! --    Has_Loop_Entry_Attributes (Flag260)
  --       Defined in E_Loop entities. Set when the loop is subject to at least
  --       one attribute 'Loop_Entry. The flag also implies that the loop has
  --       already been transformed. See Expand_Loop_Entry_Attribute for details.
  
! --    Has_Machine_Radix_Clause (Flag83)
  --       Defined in decimal types and subtypes, set if a Machine_Radix
  --       representation clause is present. This flag is used to detect
  --       the error of multiple machine radix clauses for a single type.
  
! --    Has_Master_Entity (Flag21)
  --       Defined in entities that can appear in the scope stack (see spec
  --       of Sem). It is set if a task master entity (_master) has been
  --       declared and initialized in the corresponding scope.
  
! --    Has_Missing_Return (Flag142)
  --       Defined in functions and generic functions. Set if there is one or
  --       more missing return statements in the function. This is used to
  --       control wrapping of the body in Exp_Ch6 to ensure that the program
  --       error exception is correctly raised in this case at run time.
  
! --    Has_Nested_Block_With_Handler (Flag101)
  --       Defined in scope entities. Set if there is a nested block within the
  --       scope that has an exception handler and the two scopes are in the
  --       same procedure. This is used by the backend for controlling certain
  --       optimizations to ensure that they are consistent with exceptions.
  --       See documentation in backend for further details.
  
! --    Has_Nested_Subprogram (Flag282)
  --       Defined in subprogram entities. Set for a subprogram which contains at
  --       least one nested subprogram.
  
--- 1765,1799 ----
  --       Defined in all entities. True for non-generic package entities that
  --       are non-instances and their Limited_View attribute is present.
  
! --    Has_Loop_Entry_Attributes
  --       Defined in E_Loop entities. Set when the loop is subject to at least
  --       one attribute 'Loop_Entry. The flag also implies that the loop has
  --       already been transformed. See Expand_Loop_Entry_Attribute for details.
  
! --    Has_Machine_Radix_Clause
  --       Defined in decimal types and subtypes, set if a Machine_Radix
  --       representation clause is present. This flag is used to detect
  --       the error of multiple machine radix clauses for a single type.
  
! --    Has_Master_Entity
  --       Defined in entities that can appear in the scope stack (see spec
  --       of Sem). It is set if a task master entity (_master) has been
  --       declared and initialized in the corresponding scope.
  
! --    Has_Missing_Return
  --       Defined in functions and generic functions. Set if there is one or
  --       more missing return statements in the function. This is used to
  --       control wrapping of the body in Exp_Ch6 to ensure that the program
  --       error exception is correctly raised in this case at run time.
  
! --    Has_Nested_Block_With_Handler
  --       Defined in scope entities. Set if there is a nested block within the
  --       scope that has an exception handler and the two scopes are in the
  --       same procedure. This is used by the backend for controlling certain
  --       optimizations to ensure that they are consistent with exceptions.
  --       See documentation in backend for further details.
  
! --    Has_Nested_Subprogram
  --       Defined in subprogram entities. Set for a subprogram which contains at
  --       least one nested subprogram.
  
*************** package Einfo is
*** 1831,1837 ****
  --       refinement of at least one variable or state constituent as expressed
  --       in aspect/pragma Refined_State.
  
! --    Has_Non_Standard_Rep (Flag75) [implementation base type only]
  --       Defined in all type entities. Set when some representation clause
  --       or pragma causes the representation of the item to be significantly
  --       modified. In this category are changes of small or radix for a
--- 1811,1817 ----
  --       refinement of at least one variable or state constituent as expressed
  --       in aspect/pragma Refined_State.
  
! --    Has_Non_Standard_Rep [implementation base type only]
  --       Defined in all type entities. Set when some representation clause
  --       or pragma causes the representation of the item to be significantly
  --       modified. In this category are changes of small or radix for a
*************** package Einfo is
*** 1849,1870 ****
  --       Defined in E_Abstract_State entities. True if the state has a visible
  --       null refinement as expressed in aspect/pragma Refined_State.
  
! --    Has_Object_Size_Clause (Flag172)
  --       Defined in entities for types and subtypes. Set if an Object_Size
  --       clause has been processed for the type. Used to prevent multiple
  --       Object_Size clauses for a given entity.
  
! --    Has_Out_Or_In_Out_Parameter (Flag110)
  --       Present in subprograms, generic subprograms, entries, and entry
  --       families. Set if they have at least one OUT or IN OUT parameter
  --       (allowed for functions only in Ada 2012).
  
! --    Has_Own_DIC (Flag3) [base type only]
  --       Defined in all type entities. Set for a private type and its full view
  --       (and its underlying full view, if the full view is itself private)
  --       when the type is subject to pragma Default_Initial_Condition.
  
! --    Has_Own_Invariants (Flag232) [base type only]
  --       Defined in all type entities. Set on any type that defines at least
  --       one invariant of its own.
  
--- 1829,1850 ----
  --       Defined in E_Abstract_State entities. True if the state has a visible
  --       null refinement as expressed in aspect/pragma Refined_State.
  
! --    Has_Object_Size_Clause
  --       Defined in entities for types and subtypes. Set if an Object_Size
  --       clause has been processed for the type. Used to prevent multiple
  --       Object_Size clauses for a given entity.
  
! --    Has_Out_Or_In_Out_Parameter
  --       Present in subprograms, generic subprograms, entries, and entry
  --       families. Set if they have at least one OUT or IN OUT parameter
  --       (allowed for functions only in Ada 2012).
  
! --    Has_Own_DIC [base type only]
  --       Defined in all type entities. Set for a private type and its full view
  --       (and its underlying full view, if the full view is itself private)
  --       when the type is subject to pragma Default_Initial_Condition.
  
! --    Has_Own_Invariants [base type only]
  --       Defined in all type entities. Set on any type that defines at least
  --       one invariant of its own.
  
*************** package Einfo is
*** 1872,1878 ****
  --       an Invariant pragma or aspect applies, and on the underlying full view
  --       if the full view is private.
  
! --    Has_Partial_Visible_Refinement (Flag296)
  --       Defined in E_Abstract_State entities. Set when a state has at least
  --       one refinement constituent subject to indicator Part_Of, and analysis
  --       is in the region between the declaration of the first constituent for
--- 1852,1858 ----
  --       an Invariant pragma or aspect applies, and on the underlying full view
  --       if the full view is private.
  
! --    Has_Partial_Visible_Refinement
  --       Defined in E_Abstract_State entities. Set when a state has at least
  --       one refinement constituent subject to indicator Part_Of, and analysis
  --       is in the region between the declaration of the first constituent for
*************** package Einfo is
*** 1880,1886 ****
  --       of the package spec or body with visibility over this private part
  --       (which includes the package itself and its child packages).
  
! --    Has_Per_Object_Constraint (Flag154)
  --       Defined in E_Component entities. Set if the subtype of the component
  --       has a per object constraint. Per object constraints result from the
  --       following situations :
--- 1860,1866 ----
  --       of the package spec or body with visibility over this private part
  --       (which includes the package itself and its child packages).
  
! --    Has_Per_Object_Constraint
  --       Defined in E_Component entities. Set if the subtype of the component
  --       has a per object constraint. Per object constraints result from the
  --       following situations :
*************** package Einfo is
*** 1896,1910 ****
  --       5. N_Range_Constraint - when the range expression uses the
  --          discriminant of the enclosing type.
  
! --    Has_Pragma_Controlled (Flag27) [implementation base type only]
  --       Defined in access type entities. It is set if a pragma Controlled
  --       applies to the access type.
  
! --    Has_Pragma_Elaborate_Body (Flag150)
  --       Defined in all entities. Set in compilation unit entities if a
  --       pragma Elaborate_Body applies to the compilation unit.
  
! --    Has_Pragma_Inline (Flag157)
  --       Defined in all entities. Set for functions and procedures for which a
  --       pragma Inline or Inline_Always applies to the subprogram. Note that
  --       this flag can be set even if Is_Inlined is not set. This happens for
--- 1876,1890 ----
  --       5. N_Range_Constraint - when the range expression uses the
  --          discriminant of the enclosing type.
  
! --    Has_Pragma_Controlled [implementation base type only]
  --       Defined in access type entities. It is set if a pragma Controlled
  --       applies to the access type.
  
! --    Has_Pragma_Elaborate_Body
  --       Defined in all entities. Set in compilation unit entities if a
  --       pragma Elaborate_Body applies to the compilation unit.
  
! --    Has_Pragma_Inline
  --       Defined in all entities. Set for functions and procedures for which a
  --       pragma Inline or Inline_Always applies to the subprogram. Note that
  --       this flag can be set even if Is_Inlined is not set. This happens for
*************** package Einfo is
*** 1913,1967 ****
  --       for checking semantic correctness. The flag Is_Inlined indicates
  --       whether inlining is actually active for the entity.
  
! --    Has_Pragma_Inline_Always (Flag230)
  --       Defined in all entities. Set for functions and procedures for which a
  --       pragma Inline_Always applies. Note that if this flag is set, the flag
  --       Has_Pragma_Inline is also set.
  
! --    Has_Pragma_No_Inline (Flag201)
  --       Defined in all entities. Set for functions and procedures for which a
  --       pragma No_Inline applies. Note that if this flag is set, the flag
  --       Has_Pragma_Inline_Always cannot be set.
  
! --    Has_Pragma_Ordered (Flag198) [implementation base type only]
  --       Defined in entities for enumeration types. If set indicates that a
  --       valid pragma Ordered was given for the type. This flag is inherited
  --       by derived enumeration types. We don't need to distinguish the derived
  --       case since we allow multiple occurrences of this pragma anyway.
  
! --    Has_Pragma_Pack (Flag121) [implementation base type only]
  --       Defined in array and record type entities. If set, indicates that a
  --       valid pragma Pack was given for the type. Note that this flag is not
  --       inherited by derived type. See also the Is_Packed flag.
  
! --    Has_Pragma_Preelab_Init (Flag221)
  --       Defined in type and subtype entities. If set indicates that a valid
  --       pragma Preelaborable_Initialization applies to the type.
  
! --    Has_Pragma_Pure (Flag203)
  --       Defined in all entities. If set, indicates that a valid pragma Pure
  --       was given for the entity. In some cases, we need to test whether
  --       Is_Pure was explicitly set using this pragma.
  
! --    Has_Pragma_Pure_Function (Flag179)
  --       Defined in all entities. If set, indicates that a valid pragma
  --       Pure_Function was given for the entity. In some cases, we need to test
  --       whether Is_Pure was explicitly set using this pragma. We also set
  --       this flag for some internal entities that we know should be treated
  --       as pure for optimization purposes.
  
! --    Has_Pragma_Thread_Local_Storage (Flag169)
  --       Defined in all entities. If set, indicates that a valid pragma
  --       Thread_Local_Storage was given for the entity.
  
! --    Has_Pragma_Unmodified (Flag233)
  --       Defined in all entities. Can only be set for variables (E_Variable,
  --       E_Out_Parameter, E_In_Out_Parameter). Set if a valid pragma Unmodified
  --       applies to the variable, indicating that no warning should be given
  --       if the entity is never modified. Note that clients should generally
  --       not test this flag directly, but instead use function Has_Unmodified.
  
! --    Has_Pragma_Unreferenced (Flag180)
  --       Defined in all entities. Set if a valid pragma Unreferenced applies
  --       to the entity, indicating that no warning should be given if the
  --       entity has no references, but a warning should be given if it is
--- 1893,1947 ----
  --       for checking semantic correctness. The flag Is_Inlined indicates
  --       whether inlining is actually active for the entity.
  
! --    Has_Pragma_Inline_Always
  --       Defined in all entities. Set for functions and procedures for which a
  --       pragma Inline_Always applies. Note that if this flag is set, the flag
  --       Has_Pragma_Inline is also set.
  
! --    Has_Pragma_No_Inline
  --       Defined in all entities. Set for functions and procedures for which a
  --       pragma No_Inline applies. Note that if this flag is set, the flag
  --       Has_Pragma_Inline_Always cannot be set.
  
! --    Has_Pragma_Ordered [implementation base type only]
  --       Defined in entities for enumeration types. If set indicates that a
  --       valid pragma Ordered was given for the type. This flag is inherited
  --       by derived enumeration types. We don't need to distinguish the derived
  --       case since we allow multiple occurrences of this pragma anyway.
  
! --    Has_Pragma_Pack [implementation base type only]
  --       Defined in array and record type entities. If set, indicates that a
  --       valid pragma Pack was given for the type. Note that this flag is not
  --       inherited by derived type. See also the Is_Packed flag.
  
! --    Has_Pragma_Preelab_Init
  --       Defined in type and subtype entities. If set indicates that a valid
  --       pragma Preelaborable_Initialization applies to the type.
  
! --    Has_Pragma_Pure
  --       Defined in all entities. If set, indicates that a valid pragma Pure
  --       was given for the entity. In some cases, we need to test whether
  --       Is_Pure was explicitly set using this pragma.
  
! --    Has_Pragma_Pure_Function
  --       Defined in all entities. If set, indicates that a valid pragma
  --       Pure_Function was given for the entity. In some cases, we need to test
  --       whether Is_Pure was explicitly set using this pragma. We also set
  --       this flag for some internal entities that we know should be treated
  --       as pure for optimization purposes.
  
! --    Has_Pragma_Thread_Local_Storage
  --       Defined in all entities. If set, indicates that a valid pragma
  --       Thread_Local_Storage was given for the entity.
  
! --    Has_Pragma_Unmodified
  --       Defined in all entities. Can only be set for variables (E_Variable,
  --       E_Out_Parameter, E_In_Out_Parameter). Set if a valid pragma Unmodified
  --       applies to the variable, indicating that no warning should be given
  --       if the entity is never modified. Note that clients should generally
  --       not test this flag directly, but instead use function Has_Unmodified.
  
! --    Has_Pragma_Unreferenced
  --       Defined in all entities. Set if a valid pragma Unreferenced applies
  --       to the entity, indicating that no warning should be given if the
  --       entity has no references, but a warning should be given if it is
*************** package Einfo is
*** 1970,1990 ****
  --       that clients should generally not test this flag directly, but instead
  --       use function Has_Unreferenced.
  
! --  ??? this real description was clobbered
! 
! --    Has_Pragma_Unreferenced_Objects (Flag212)
  --       Defined in all entities. Set if a valid pragma Unused applies to an
  --       entity, indicating that warnings should be given if the entity is
  --       modified or referenced. This pragma is equivalent to a pair of
  --       Unmodified and Unreferenced pragmas.
  
! --    Has_Pragma_Unused (Flag294)
  --       Defined in all entities. Set if a valid pragma Unused applies to a
  --       variable or entity, indicating that warnings should not be given if
  --       it is never modified or referenced. Note: This pragma is exactly
  --       equivalent Unmodified and Unreference combined.
  
! --    Has_Predicates (Flag250)
  --       Defined in type and subtype entities. Set if a pragma Predicate or
  --       Predicate aspect applies to the type or subtype, or if it inherits a
  --       Predicate aspect from its parent or progenitor types.
--- 1950,1968 ----
  --       that clients should generally not test this flag directly, but instead
  --       use function Has_Unreferenced.
  
! --    Has_Pragma_Unreferenced_Objects
  --       Defined in all entities. Set if a valid pragma Unused applies to an
  --       entity, indicating that warnings should be given if the entity is
  --       modified or referenced. This pragma is equivalent to a pair of
  --       Unmodified and Unreferenced pragmas.
  
! --    Has_Pragma_Unused
  --       Defined in all entities. Set if a valid pragma Unused applies to a
  --       variable or entity, indicating that warnings should not be given if
  --       it is never modified or referenced. Note: This pragma is exactly
  --       equivalent Unmodified and Unreference combined.
  
! --    Has_Predicates
  --       Defined in type and subtype entities. Set if a pragma Predicate or
  --       Predicate aspect applies to the type or subtype, or if it inherits a
  --       Predicate aspect from its parent or progenitor types.
*************** package Einfo is
*** 1993,2003 ****
  --       a Predicate pragma or aspect applies, and on the underlying full view
  --       if the full view is private.
  
! --    Has_Primitive_Operations (Flag120) [base type only]
  --       Defined in all type entities. Set if at least one primitive operation
  --       is defined for the type.
  
! --    Has_Private_Ancestor (Flag151)
  --       Applies to type extensions. True if some ancestor is derived from a
  --       private type, making some components invisible and aggregates illegal.
  --       This flag is set at the point of derivation. The legality of the
--- 1971,1981 ----
  --       a Predicate pragma or aspect applies, and on the underlying full view
  --       if the full view is private.
  
! --    Has_Primitive_Operations [base type only]
  --       Defined in all type entities. Set if at least one primitive operation
  --       is defined for the type.
  
! --    Has_Private_Ancestor
  --       Applies to type extensions. True if some ancestor is derived from a
  --       private type, making some components invisible and aggregates illegal.
  --       This flag is set at the point of derivation. The legality of the
*************** package Einfo is
*** 2005,2023 ****
  --       at the point the aggregate is resolved. See sem_aggr.adb. This is part
  --       of AI05-0115.
  
! --    Has_Private_Declaration (Flag155)
  --       Defined in all entities. Set if it is the defining entity of a private
  --       type declaration or its corresponding full declaration. This flag is
  --       thus preserved when the full and the partial views are exchanged, to
  --       indicate if a full type declaration is a completion. Used for semantic
  --       checks in E.4(18) and elsewhere.
  
! --    Has_Private_Extension (Flag300)
  --       Defined in tagged types. Set to indicate that the tagged type has some
  --       private extension. Used to report a warning on public primitives added
  --       after defining its private extensions.
  
! --    Has_Protected (Flag271) [base type only]
  --       Defined in all type entities. Set on protected types themselves, and
  --       also (recursively) on any composite type which has a component for
  --       which Has_Protected is set, unless the protected type is declared in
--- 1983,2001 ----
  --       at the point the aggregate is resolved. See sem_aggr.adb. This is part
  --       of AI05-0115.
  
! --    Has_Private_Declaration
  --       Defined in all entities. Set if it is the defining entity of a private
  --       type declaration or its corresponding full declaration. This flag is
  --       thus preserved when the full and the partial views are exchanged, to
  --       indicate if a full type declaration is a completion. Used for semantic
  --       checks in E.4(18) and elsewhere.
  
! --    Has_Private_Extension
  --       Defined in tagged types. Set to indicate that the tagged type has some
  --       private extension. Used to report a warning on public primitives added
  --       after defining its private extensions.
  
! --    Has_Protected [base type only]
  --       Defined in all type entities. Set on protected types themselves, and
  --       also (recursively) on any composite type which has a component for
  --       which Has_Protected is set, unless the protected type is declared in
*************** package Einfo is
*** 2025,2031 ****
  --       for protected types apply to this type. Note: the flag is not set on
  --       access types, even if they designate an object that Has_Protected.
  
! --    Has_Qualified_Name (Flag161)
  --       Defined in all entities. Set if the name in the Chars field has
  --       been replaced by its qualified name, as used for debug output. See
  --       Exp_Dbug for a full description of qualification requirements. For
--- 2003,2009 ----
  --       for protected types apply to this type. Note: the flag is not set on
  --       access types, even if they designate an object that Has_Protected.
  
! --    Has_Qualified_Name
  --       Defined in all entities. Set if the name in the Chars field has
  --       been replaced by its qualified name, as used for debug output. See
  --       Exp_Dbug for a full description of qualification requirements. For
*************** package Einfo is
*** 2035,2075 ****
  --       flag Has_Fully_Qualified_Name, which is set if the name does indeed
  --       include the fully qualified name.
  
! --    Has_RACW (Flag214)
  --       Defined in package spec entities. Set if the spec contains the
  --       declaration of a remote access-to-classwide type.
  
! --    Has_Record_Rep_Clause (Flag65) [implementation base type only]
  --       Defined in record types. Set if a record representation clause has
  --       been given for this record type. Used to prevent more than one such
  --       clause for a given record type. Note that this is initially cleared
  --       for a derived type, even though the representation is inherited. See
  --       also the flag Has_Specified_Layout.
  
! --    Has_Recursive_Call (Flag143)
  --       Defined in procedures. Set if a direct parameterless recursive call
  --       is detected while analyzing the body. Used to activate some error
  --       checks for infinite recursion.
  
! --    Has_Shift_Operator (Flag267) [base type only]
  --       Defined in integer types. Set in the base type of an integer type for
  --       which at least one of the shift operators is defined.
  
! --    Has_Size_Clause (Flag29)
! --       Defined in entities for types and objects. Set if a size clause is
! --       defined for the entity. Used to prevent multiple Size clauses for a
! --       given entity. Note that it is always initially cleared for a derived
! --       type, even though the Size for such a type is inherited from a Size
! --       clause given for the parent type.
  
! --    Has_Small_Clause (Flag67)
  --       Defined in ordinary fixed point types (but not subtypes). Indicates
  --       that a small clause has been given for the entity. Used to prevent
  --       multiple Small clauses for a given entity. Note that it is always
  --       initially cleared for a derived type, even though the Small for such
  --       a type is inherited from a Small clause given for the parent type.
  
! --    Has_Specified_Layout (Flag100) [implementation base type only]
  --       Defined in all type entities. Set for a record type or subtype if
  --       the record layout has been specified by a record representation
  --       clause. Note that this differs from the flag Has_Record_Rep_Clause
--- 2013,2053 ----
  --       flag Has_Fully_Qualified_Name, which is set if the name does indeed
  --       include the fully qualified name.
  
! --    Has_RACW
  --       Defined in package spec entities. Set if the spec contains the
  --       declaration of a remote access-to-classwide type.
  
! --    Has_Record_Rep_Clause [implementation base type only]
  --       Defined in record types. Set if a record representation clause has
  --       been given for this record type. Used to prevent more than one such
  --       clause for a given record type. Note that this is initially cleared
  --       for a derived type, even though the representation is inherited. See
  --       also the flag Has_Specified_Layout.
  
! --    Has_Recursive_Call
  --       Defined in procedures. Set if a direct parameterless recursive call
  --       is detected while analyzing the body. Used to activate some error
  --       checks for infinite recursion.
  
! --    Has_Shift_Operator [base type only]
  --       Defined in integer types. Set in the base type of an integer type for
  --       which at least one of the shift operators is defined.
  
! --    Has_Size_Clause
! --       Defined in entities for types and objects. Set if a size or value size
! --       clause is defined for the entity. Used to prevent multiple clauses
! --       for a given entity. Note that it is always initially cleared for a
! --       derived type, even though the Size or Value_Size clause for such a
! --       type might be inherited from an ancestor type.
  
! --    Has_Small_Clause
  --       Defined in ordinary fixed point types (but not subtypes). Indicates
  --       that a small clause has been given for the entity. Used to prevent
  --       multiple Small clauses for a given entity. Note that it is always
  --       initially cleared for a derived type, even though the Small for such
  --       a type is inherited from a Small clause given for the parent type.
  
! --    Has_Specified_Layout [implementation base type only]
  --       Defined in all type entities. Set for a record type or subtype if
  --       the record layout has been specified by a record representation
  --       clause. Note that this differs from the flag Has_Record_Rep_Clause
*************** package Einfo is
*** 2078,2100 ****
  --       representation clause, and thus is not inherited by a derived type.
  --       This flag is always False for non-record types.
  
! --    Has_Specified_Stream_Input (Flag190)
! --    Has_Specified_Stream_Output (Flag191)
! --    Has_Specified_Stream_Read (Flag192)
! --    Has_Specified_Stream_Write (Flag193)
  --       Defined in all type and subtype entities. Set for a given view if the
  --       corresponding stream-oriented attribute has been defined by an
  --       attribute definition clause. When such a clause occurs, a TSS is set
  --       on the underlying full view; the flags are used to track visibility of
  --       the attribute definition clause for partial or incomplete views.
  
! --    Has_Static_Discriminants (Flag211)
  --       Defined in record subtypes constrained by discriminant values. Set if
  --       all the discriminant values have static values, meaning that in the
  --       case of a variant record, the component list can be trimmed down to
  --       include only the components corresponding to these discriminants.
  
! --    Has_Static_Predicate (Flag269)
  --       Defined in all types and subtypes. Set if the type (which must be a
  --       scalar type) has a predicate whose expression is predicate-static.
  --       This can result from the use of any Predicate, Static_Predicate, or
--- 2056,2078 ----
  --       representation clause, and thus is not inherited by a derived type.
  --       This flag is always False for non-record types.
  
! --    Has_Specified_Stream_Input
! --    Has_Specified_Stream_Output
! --    Has_Specified_Stream_Read
! --    Has_Specified_Stream_Write
  --       Defined in all type and subtype entities. Set for a given view if the
  --       corresponding stream-oriented attribute has been defined by an
  --       attribute definition clause. When such a clause occurs, a TSS is set
  --       on the underlying full view; the flags are used to track visibility of
  --       the attribute definition clause for partial or incomplete views.
  
! --    Has_Static_Discriminants
  --       Defined in record subtypes constrained by discriminant values. Set if
  --       all the discriminant values have static values, meaning that in the
  --       case of a variant record, the component list can be trimmed down to
  --       include only the components corresponding to these discriminants.
  
! --    Has_Static_Predicate
  --       Defined in all types and subtypes. Set if the type (which must be a
  --       scalar type) has a predicate whose expression is predicate-static.
  --       This can result from the use of any Predicate, Static_Predicate, or
*************** package Einfo is
*** 2103,2109 ****
  --       description of the latter flag for further information on dynamic
  --       predicates which are also static.
  
! --    Has_Static_Predicate_Aspect (Flag259)
  --       Defined in all types and subtypes. Set if a Static_Predicate aspect
  --       applies to the type. Note that we can tell if a static predicate is
  --       present by looking at Has_Static_Predicate, but this could have come
--- 2081,2087 ----
  --       description of the latter flag for further information on dynamic
  --       predicates which are also static.
  
! --    Has_Static_Predicate_Aspect
  --       Defined in all types and subtypes. Set if a Static_Predicate aspect
  --       applies to the type. Note that we can tell if a static predicate is
  --       present by looking at Has_Static_Predicate, but this could have come
*************** package Einfo is
*** 2112,2118 ****
  --       check policies apply, use this flag and Has_Dynamic_Predicate_Aspect
  --       to determine which case we have).
  
! --    Has_Storage_Size_Clause (Flag23) [implementation base type only]
  --       Defined in task types and access types. It is set if a Storage_Size
  --       clause is present for the type. Used to prevent multiple clauses for
  --       one type. Note that this flag is initially cleared for a derived type
--- 2090,2096 ----
  --       check policies apply, use this flag and Has_Dynamic_Predicate_Aspect
  --       to determine which case we have).
  
! --    Has_Storage_Size_Clause [implementation base type only]
  --       Defined in task types and access types. It is set if a Storage_Size
  --       clause is present for the type. Used to prevent multiple clauses for
  --       one type. Note that this flag is initially cleared for a derived type
*************** package Einfo is
*** 2121,2150 ****
  --       of access types, this flag is defined only in the root type, since a
  --       storage size clause cannot be given to a derived type.
  
! --    Has_Stream_Size_Clause (Flag184)
  --       Defined in all entities. It is set for types which have a Stream_Size
  --       clause attribute. Used to prevent multiple Stream_Size clauses for a
  --       given entity, and also whether it is necessary to check for a stream
  --       size clause.
  
! --    Has_Task (Flag30) [base type only]
  --       Defined in all type entities. Set on task types themselves, and also
  --       (recursively) on any composite type which has a component for which
  --       Has_Task is set. The meaning is that an allocator or declaration of
  --       such an object must create the required tasks. Note: the flag is not
  --       set on access types, even if they designate an object that Has_Task.
  
! --    Has_Timing_Event (Flag289) [base type only]
  --       Defined in all type entities. Set on language defined type
  --       Ada.Real_Time.Timing_Events.Timing_Event, and also (recursively) on
  --       any composite type which has a component for which Has_Timing_Event
  --       is set. Used for the No_Local_Timing_Event restriction.
  
! --    Has_Thunks (Flag228)
  --       Applies to E_Constant entities marked Is_Tag. True for secondary tag
  --       referencing a dispatch table whose contents are pointers to thunks.
  
! --    Has_Unchecked_Union (Flag123) [base type only]
  --       Defined in all type entities. Set on unchecked unions themselves
  --       and (recursively) on any composite type which has a component for
  --       which Has_Unchecked_Union is set. The meaning is that a comparison
--- 2099,2128 ----
  --       of access types, this flag is defined only in the root type, since a
  --       storage size clause cannot be given to a derived type.
  
! --    Has_Stream_Size_Clause
  --       Defined in all entities. It is set for types which have a Stream_Size
  --       clause attribute. Used to prevent multiple Stream_Size clauses for a
  --       given entity, and also whether it is necessary to check for a stream
  --       size clause.
  
! --    Has_Task [base type only]
  --       Defined in all type entities. Set on task types themselves, and also
  --       (recursively) on any composite type which has a component for which
  --       Has_Task is set. The meaning is that an allocator or declaration of
  --       such an object must create the required tasks. Note: the flag is not
  --       set on access types, even if they designate an object that Has_Task.
  
! --    Has_Timing_Event [base type only]
  --       Defined in all type entities. Set on language defined type
  --       Ada.Real_Time.Timing_Events.Timing_Event, and also (recursively) on
  --       any composite type which has a component for which Has_Timing_Event
  --       is set. Used for the No_Local_Timing_Event restriction.
  
! --    Has_Thunks
  --       Applies to E_Constant entities marked Is_Tag. True for secondary tag
  --       referencing a dispatch table whose contents are pointers to thunks.
  
! --    Has_Unchecked_Union [base type only]
  --       Defined in all type entities. Set on unchecked unions themselves
  --       and (recursively) on any composite type which has a component for
  --       which Has_Unchecked_Union is set. The meaning is that a comparison
*************** package Einfo is
*** 2152,2158 ****
  --       Note that the flag is not set on access types, even if they designate
  --       an object that has the flag Has_Unchecked_Union set.
  
! --    Has_Unknown_Discriminants (Flag72)
  --       Defined in all entities. Set for types with unknown discriminants.
  --       Types can have unknown discriminants either from their declaration or
  --       through type derivation. The use of this flag exactly meets the spec
--- 2130,2136 ----
  --       Note that the flag is not set on access types, even if they designate
  --       an object that has the flag Has_Unchecked_Union set.
  
! --    Has_Unknown_Discriminants
  --       Defined in all entities. Set for types with unknown discriminants.
  --       Types can have unknown discriminants either from their declaration or
  --       through type derivation. The use of this flag exactly meets the spec
*************** package Einfo is
*** 2165,2176 ****
  --       on the partial view, to ensure that discriminants are properly
  --       inherited in certain contexts.
  
! --    Has_Visible_Refinement (Flag263)
  --       Defined in E_Abstract_State entities. Set when a state has at least
  --       one refinement constituent and analysis is in the region between
  --       pragma Refined_State and the end of the package body declarations.
  
! --    Has_Volatile_Components (Flag87) [implementation base type only]
  --       Defined in all types and objects. Set only for an array type or array
  --       object if a valid pragma Volatile_Components or a valid pragma
  --       Atomic_Components applies to the type or object. Note that in the case
--- 2143,2154 ----
  --       on the partial view, to ensure that discriminants are properly
  --       inherited in certain contexts.
  
! --    Has_Visible_Refinement
  --       Defined in E_Abstract_State entities. Set when a state has at least
  --       one refinement constituent and analysis is in the region between
  --       pragma Refined_State and the end of the package body declarations.
  
! --    Has_Volatile_Components [implementation base type only]
  --       Defined in all types and objects. Set only for an array type or array
  --       object if a valid pragma Volatile_Components or a valid pragma
  --       Atomic_Components applies to the type or object. Note that in the case
*************** package Einfo is
*** 2181,2187 ****
  --       type the pragma will be chained to the rep item chain of the first
  --       subtype in the usual manner.
  
! --    Has_Xref_Entry (Flag182)
  --       Defined in all entities. Set if an entity has an entry in the Xref
  --       information generated in ali files. This is true for all source
  --       entities in the extended main source file. It is also true of entities
--- 2159,2165 ----
  --       type the pragma will be chained to the rep item chain of the first
  --       subtype in the usual manner.
  
! --    Has_Xref_Entry
  --       Defined in all entities. Set if an entity has an entry in the Xref
  --       information generated in ali files. This is true for all source
  --       entities in the extended main source file. It is also true of entities
*************** package Einfo is
*** 2190,2200 ****
  --       references an entity with a type reference. See package Lib.Xref for
  --       further details).
  
! --    Has_Yield_Aspect (Flag308)
  --       Defined in subprograms, generic subprograms, entries, entry families.
  --       Set if the entity has aspect Yield.
  
! --    Hiding_Loop_Variable (Node8)
  --       Defined in variables. Set only if a variable of a discrete type is
  --       hidden by a loop variable in the same local scope, in which case
  --       the Hiding_Loop_Variable field of the hidden variable points to
--- 2168,2178 ----
  --       references an entity with a type reference. See package Lib.Xref for
  --       further details).
  
! --    Has_Yield_Aspect
  --       Defined in subprograms, generic subprograms, entries, entry families.
  --       Set if the entity has aspect Yield.
  
! --    Hiding_Loop_Variable
  --       Defined in variables. Set only if a variable of a discrete type is
  --       hidden by a loop variable in the same local scope, in which case
  --       the Hiding_Loop_Variable field of the hidden variable points to
*************** package Einfo is
*** 2202,2208 ****
  --       warning messages if the hidden variable turns out to be unused
  --       or is referenced without being set.
  
! --    Hidden_In_Formal_Instance (Elist30)
  --       Defined on actuals for formal packages. Entities on the list are
  --       formals that are hidden outside of the formal package when this
  --       package is not declared with a box, or the formal itself is not
--- 2180,2186 ----
  --       warning messages if the hidden variable turns out to be unused
  --       or is referenced without being set.
  
! --    Hidden_In_Formal_Instance
  --       Defined on actuals for formal packages. Entities on the list are
  --       formals that are hidden outside of the formal package when this
  --       package is not declared with a box, or the formal itself is not
*************** package Einfo is
*** 2210,2228 ****
  --       from the current generic, because the actual for the formal package
  --       may be used subsequently in the current unit.
  
! --    Homonym (Node4)
  --       Defined in all entities. Link for list of entities that have the
  --       same source name and that are declared in the same or enclosing
  --       scopes. Homonyms in the same scope are overloaded. Used for name
  --       resolution and for the generation of debugging information.
  
! --    Ignore_SPARK_Mode_Pragmas (Flag301)
  --       Present in concurrent type, entry, operator, [generic] package,
  --       package body, [generic] subprogram, and subprogram body entities.
  --       Set when the entity appears in an instance subject to SPARK_Mode
  --       "off" and indicates that all SPARK_Mode pragmas found within must
  --       be ignored.
  
  --    Implementation_Base_Type (synthesized)
  --       Applies to all entities. For types, similar to Base_Type, but never
  --       returns a private type when applied to a non-private type. Instead in
--- 2188,2218 ----
  --       from the current generic, because the actual for the formal package
  --       may be used subsequently in the current unit.
  
! --    Homonym
  --       Defined in all entities. Link for list of entities that have the
  --       same source name and that are declared in the same or enclosing
  --       scopes. Homonyms in the same scope are overloaded. Used for name
  --       resolution and for the generation of debugging information.
  
! --    Ignore_SPARK_Mode_Pragmas
  --       Present in concurrent type, entry, operator, [generic] package,
  --       package body, [generic] subprogram, and subprogram body entities.
  --       Set when the entity appears in an instance subject to SPARK_Mode
  --       "off" and indicates that all SPARK_Mode pragmas found within must
  --       be ignored.
  
+ --    Ignored_Class_Postconditions
+ --       Defined on subprogram entities. Set if the subprogram has class-wide
+ --       postconditions. Denotes the (and-then) expression built by merging
+ --       inherited ignored class-wide postconditions with its own ignored
+ --       class-wide postconditions.
+ 
+ --    Ignored_Class_Preconditions
+ --       Defined on subprogram entities. Set if the subprogram has class-wide
+ --       preconditions. Denotes the (or-else) expression built by merging
+ --       inherited ignored class-wide preconditions with its own ignored
+ --       class-wide preconditions.
+ 
  --    Implementation_Base_Type (synthesized)
  --       Applies to all entities. For types, similar to Base_Type, but never
  --       returns a private type when applied to a non-private type. Instead in
*************** package Einfo is
*** 2230,2281 ****
  --       that we still have a concrete type. For entities other than types,
  --       returns the entity unchanged.
  
! --    Import_Pragma (Node35)
  --       Defined in subprogram entities. Set if a valid pragma Import or pragma
  --       Import_Function or pragma Import_Procedure applies to the subprogram,
  --       in which case this field points to the pragma (we can't use the normal
  --       Rep_Item chain mechanism, because a single pragma Import can apply
  --       to multiple subprogram entities).
  
! --    In_Package_Body (Flag48)
  --       Defined in package entities. Set on the entity that denotes the
  --       package (the defining occurrence of the package declaration) while
  --       analyzing and expanding the package body. Reset on completion of
  --       analysis/expansion.
  
! --    In_Private_Part (Flag45)
  --       Defined in all entities. Can be set only in package entities and
  --       objects. For package entities, this flag is set to indicate that the
  --       private part of the package is being analyzed. The flag is reset at
  --       the end of the package declaration. For objects it indicates that the
  --       declaration of the object occurs in the private part of a package.
  
! --    Incomplete_Actuals (Elist24)
  --       Defined on package entities that are instances. Indicates the actuals
  --       types in the instantiation that are limited views. If this list is
  --       not empty, the instantiation, which appears in a package declaration,
  --       is relocated to the corresponding package body, which must have a
  --       corresponding nonlimited with_clause.
  
! --    Initialization_Statements (Node28)
  --       Defined in constants and variables. For a composite object initialized
! --       initialized with an aggregate that has been converted to a sequence
! --       of assignments, points to a block statement containing the
  --       assignments.
  
! --    Inner_Instances (Elist23)
  --       Defined in generic units. Contains element list of units that are
  --       instantiated within the given generic. Used to diagnose circular
  --       instantiations.
  
! --    Interface_Alias (Node25)
  --       Defined in subprograms that cover a primitive operation of an abstract
  --       interface type. Can be set only if the Is_Hidden flag is also set,
  --       since such entities are always hidden. Points to its associated
  --       interface subprogram. It is used to register the subprogram in
  --       secondary dispatch table of the interface (Ada 2005: AI-251).
  
! --    Interface_Name (Node21)
  --       Defined in constants, variables, exceptions, functions, procedures,
  --       and packages. Set to Empty unless an export, import, or interface name
  --       pragma has explicitly specified an external name, in which case it
--- 2220,2277 ----
  --       that we still have a concrete type. For entities other than types,
  --       returns the entity unchanged.
  
! --    Import_Pragma
  --       Defined in subprogram entities. Set if a valid pragma Import or pragma
  --       Import_Function or pragma Import_Procedure applies to the subprogram,
  --       in which case this field points to the pragma (we can't use the normal
  --       Rep_Item chain mechanism, because a single pragma Import can apply
  --       to multiple subprogram entities).
  
! --    In_Package_Body
  --       Defined in package entities. Set on the entity that denotes the
  --       package (the defining occurrence of the package declaration) while
  --       analyzing and expanding the package body. Reset on completion of
  --       analysis/expansion.
  
! --    In_Private_Part
  --       Defined in all entities. Can be set only in package entities and
  --       objects. For package entities, this flag is set to indicate that the
  --       private part of the package is being analyzed. The flag is reset at
  --       the end of the package declaration. For objects it indicates that the
  --       declaration of the object occurs in the private part of a package.
  
! --    Incomplete_Actuals
  --       Defined on package entities that are instances. Indicates the actuals
  --       types in the instantiation that are limited views. If this list is
  --       not empty, the instantiation, which appears in a package declaration,
  --       is relocated to the corresponding package body, which must have a
  --       corresponding nonlimited with_clause.
  
! --    Indirect_Call_Wrapper
! --       Defined on subprogram entities. Set if the subprogram has class-wide
! --       preconditions. Denotes the internal wrapper that checks preconditions
! --       and invokes the subprogram body. Subp'Access points to the indirect
! --       call wrapper if available.
! 
! --    Initialization_Statements
  --       Defined in constants and variables. For a composite object initialized
! --       with an aggregate that has been converted to a sequence of
! --       assignments, points to a compound statement containing the
  --       assignments.
  
! --    Inner_Instances
  --       Defined in generic units. Contains element list of units that are
  --       instantiated within the given generic. Used to diagnose circular
  --       instantiations.
  
! --    Interface_Alias
  --       Defined in subprograms that cover a primitive operation of an abstract
  --       interface type. Can be set only if the Is_Hidden flag is also set,
  --       since such entities are always hidden. Points to its associated
  --       interface subprogram. It is used to register the subprogram in
  --       secondary dispatch table of the interface (Ada 2005: AI-251).
  
! --    Interface_Name
  --       Defined in constants, variables, exceptions, functions, procedures,
  --       and packages. Set to Empty unless an export, import, or interface name
  --       pragma has explicitly specified an external name, in which case it
*************** package Einfo is
*** 2286,2292 ****
  --       Interface_Name is ignored if an address clause is present (since it
  --       is meaningless in this case).
  
! --    Interfaces (Elist25)
  --       Defined in record types and subtypes. List of abstract interfaces
  --       implemented by a tagged type that are not already implemented by the
  --       ancestors (Ada 2005: AI-251).
--- 2282,2288 ----
  --       Interface_Name is ignored if an address clause is present (since it
  --       is meaningless in this case).
  
! --    Interfaces
  --       Defined in record types and subtypes. List of abstract interfaces
  --       implemented by a tagged type that are not already implemented by the
  --       ancestors (Ada 2005: AI-251).
*************** package Einfo is
*** 2307,2327 ****
  --       Note: the reason this is marked as a synthesized attribute is that the
  --       way this is stored is as an element of the Subprograms_For_Type field.
  
! --    In_Use (Flag8)
  --       Defined in packages and types. Set when analyzing a use clause for
  --       the corresponding entity. Reset at end of corresponding declarative
  --       part. The flag on a type is also used to determine the visibility of
  --       the primitive operators of the type.
  
! --    Is_Abstract_Subprogram (Flag19)
  --       Defined in all subprograms and entries. Set for abstract subprograms.
  --       Always False for enumeration literals and entries. See also
  --       Requires_Overriding.
  
! --    Is_Abstract_Type (Flag146)
  --       Defined in all types. Set for abstract types.
  
! --    Is_Access_Constant (Flag69)
  --       Defined in access types and subtypes. Indicates that the keyword
  --       constant was present in the access type definition.
  
--- 2303,2323 ----
  --       Note: the reason this is marked as a synthesized attribute is that the
  --       way this is stored is as an element of the Subprograms_For_Type field.
  
! --    In_Use
  --       Defined in packages and types. Set when analyzing a use clause for
  --       the corresponding entity. Reset at end of corresponding declarative
  --       part. The flag on a type is also used to determine the visibility of
  --       the primitive operators of the type.
  
! --    Is_Abstract_Subprogram
  --       Defined in all subprograms and entries. Set for abstract subprograms.
  --       Always False for enumeration literals and entries. See also
  --       Requires_Overriding.
  
! --    Is_Abstract_Type
  --       Defined in all types. Set for abstract types.
  
! --    Is_Access_Constant
  --       Defined in access types and subtypes. Indicates that the keyword
  --       constant was present in the access type definition.
  
*************** package Einfo is
*** 2335,2364 ****
  --    Is_Access_Object_Type (synthesized)
  --       Applies to all entities, true for access-to-object types and subtypes
  
! --    Is_Activation_Record (Flag305)
  --       Applies to E_In_Parameters generated in Exp_Unst for nested
  --       subprograms, to mark the added formal that carries the activation
  --       record created in the enclosing subprogram.
  
! --    Is_Actual_Subtype (Flag293)
  --       Defined on all types, true for the generated constrained subtypes
  --       that are built for unconstrained composite actuals.
  
! --    Is_Ada_2005_Only (Flag185)
  --       Defined in all entities, true if a valid pragma Ada_05 or Ada_2005
  --       applies to the entity which specifically names the entity, indicating
  --       that the entity is Ada 2005 only. Note that this flag is not set if
  --       the entity is part of a unit compiled with the normal no-argument form
  --       of pragma Ada_05 or Ada_2005.
  
! --    Is_Ada_2012_Only (Flag199)
  --       Defined in all entities, true if a valid pragma Ada_12 or Ada_2012
  --       applies to the entity which specifically names the entity, indicating
  --       that the entity is Ada 2012 only. Note that this flag is not set if
  --       the entity is part of a unit compiled with the normal no-argument form
  --       of pragma Ada_12 or Ada_2012.
  
! --    Is_Aliased (Flag15)
  --       Defined in all entities. Set for objects and types whose declarations
  --       carry the keyword aliased, and on record components that have the
  --       keyword. For Ada 2012, also applies to formal parameters.
--- 2331,2367 ----
  --    Is_Access_Object_Type (synthesized)
  --       Applies to all entities, true for access-to-object types and subtypes
  
! --    Is_Activation_Record
  --       Applies to E_In_Parameters generated in Exp_Unst for nested
  --       subprograms, to mark the added formal that carries the activation
  --       record created in the enclosing subprogram.
  
! --    Is_Actual_Subtype
  --       Defined on all types, true for the generated constrained subtypes
  --       that are built for unconstrained composite actuals.
  
! --    Is_Ada_2005_Only
  --       Defined in all entities, true if a valid pragma Ada_05 or Ada_2005
  --       applies to the entity which specifically names the entity, indicating
  --       that the entity is Ada 2005 only. Note that this flag is not set if
  --       the entity is part of a unit compiled with the normal no-argument form
  --       of pragma Ada_05 or Ada_2005.
  
! --    Is_Ada_2012_Only
  --       Defined in all entities, true if a valid pragma Ada_12 or Ada_2012
  --       applies to the entity which specifically names the entity, indicating
  --       that the entity is Ada 2012 only. Note that this flag is not set if
  --       the entity is part of a unit compiled with the normal no-argument form
  --       of pragma Ada_12 or Ada_2012.
  
! --    Is_Ada_2022_Only
! --       Defined in all entities, true if a valid pragma Ada_2022 applies to
! --       the entity which specifically names the entity, indicating that the
! --       entity is Ada 2022 only. Note that this flag is not set if the entity
! --       is part of a unit compiled with the normal no-argument form of pragma
! --       Ada_2022.
! 
! --    Is_Aliased
  --       Defined in all entities. Set for objects and types whose declarations
  --       carry the keyword aliased, and on record components that have the
  --       keyword. For Ada 2012, also applies to formal parameters.
*************** package Einfo is
*** 2366,2376 ****
  --    Is_Array_Type (synthesized)
  --       Applies to all entities, true for array types and subtypes
  
! --    Is_Asynchronous (Flag81)
  --       Defined in all type entities and in procedure entities. Set
  --       if a pragma Asynchronous applies to the entity.
  
! --    Is_Atomic (Flag85)
  --       Defined in all type entities, and also in constants, components, and
  --       variables. Set if a pragma Atomic or Shared applies to the entity.
  --       In the case of private and incomplete types, this flag is set in
--- 2369,2379 ----
  --    Is_Array_Type (synthesized)
  --       Applies to all entities, true for array types and subtypes
  
! --    Is_Asynchronous
  --       Defined in all type entities and in procedure entities. Set
  --       if a pragma Asynchronous applies to the entity.
  
! --    Is_Atomic
  --       Defined in all type entities, and also in constants, components, and
  --       variables. Set if a pragma Atomic or Shared applies to the entity.
  --       In the case of private and incomplete types, this flag is set in
*************** package Einfo is
*** 2379,2392 ****
  --    Is_Full_Access (synth)
  --       Defined in all type entities, and also in constants, components and
  --       variables. Set if an aspect/pragma Atomic/Shared, or an aspect/pragma
! --       Volatile_Full_Access or an Ada 2020 aspect Full_Access_Only applies
  --       to the entity. In the case of private and incomplete types, the flag
  --       applies to both the partial view and the full view.
  
  --    Is_Base_Type (synthesized)
  --       Applies to type and subtype entities. True if entity is a base type.
  
! --    Is_Bit_Packed_Array (Flag122) [implementation base type only]
  --       Defined in all entities. This flag is set for a packed array type that
  --       is bit-packed (i.e. the component size is known by the front end and
  --       is in the range 1-63 but not a multiple of 8). Is_Packed is always set
--- 2382,2395 ----
  --    Is_Full_Access (synth)
  --       Defined in all type entities, and also in constants, components and
  --       variables. Set if an aspect/pragma Atomic/Shared, or an aspect/pragma
! --       Volatile_Full_Access or an Ada 2022 aspect Full_Access_Only applies
  --       to the entity. In the case of private and incomplete types, the flag
  --       applies to both the partial view and the full view.
  
  --    Is_Base_Type (synthesized)
  --       Applies to type and subtype entities. True if entity is a base type.
  
! --    Is_Bit_Packed_Array [implementation base type only]
  --       Defined in all entities. This flag is set for a packed array type that
  --       is bit-packed (i.e. the component size is known by the front end and
  --       is in the range 1-63 but not a multiple of 8). Is_Packed is always set
*************** package Einfo is
*** 2399,2431 ****
  --       Applies to all entities, true for boolean types and subtypes,
  --       i.e. Standard.Boolean and all types ultimately derived from it.
  
! --    Is_Called (Flag102)
  --       Defined in subprograms and packages. Set if a subprogram is called
  --       from the unit being compiled or a unit in the closure. Also set for
  --       a package that contains called subprograms. Used only for inlining.
  
! --    Is_Character_Type (Flag63)
  --       Defined in all entities. Set for character types and subtypes,
  --       i.e. enumeration types that have at least one character literal.
  
! --    Is_Checked_Ghost_Entity (Flag277)
  --       Applies to all entities. Set for abstract states, [generic] packages,
  --       [generic] subprograms, components, discriminants, formal parameters,
  --       objects, package bodies, subprogram bodies, and [sub]types subject to
  --       pragma Ghost or inherit "ghostness" from an enclosing construct, and
  --       subject to Assertion_Policy Ghost => Check.
  
! --    Is_Child_Unit (Flag73)
  --       Defined in all entities. Set only for defining entities of program
  --       units that are child units (but False for subunits).
  
! --    Is_Class_Wide_Clone (Flag290)
! --       Defined on subprogram entities. Set for subprograms built in order
! --       to implement properly the inheritance of class-wide pre- or post-
! --       conditions when the condition contains calls to other primitives
! --       of the ancestor type. Used to implement AI12-0195.
! 
! --    Is_Class_Wide_Equivalent_Type (Flag35)
  --       Defined in record types and subtypes. Set to True, if the type acts
  --       as a class-wide equivalent type, i.e. the Equivalent_Type field of
  --       some class-wide subtype entity references this record type.
--- 2402,2428 ----
  --       Applies to all entities, true for boolean types and subtypes,
  --       i.e. Standard.Boolean and all types ultimately derived from it.
  
! --    Is_Called
  --       Defined in subprograms and packages. Set if a subprogram is called
  --       from the unit being compiled or a unit in the closure. Also set for
  --       a package that contains called subprograms. Used only for inlining.
  
! --    Is_Character_Type
  --       Defined in all entities. Set for character types and subtypes,
  --       i.e. enumeration types that have at least one character literal.
  
! --    Is_Checked_Ghost_Entity
  --       Applies to all entities. Set for abstract states, [generic] packages,
  --       [generic] subprograms, components, discriminants, formal parameters,
  --       objects, package bodies, subprogram bodies, and [sub]types subject to
  --       pragma Ghost or inherit "ghostness" from an enclosing construct, and
  --       subject to Assertion_Policy Ghost => Check.
  
! --    Is_Child_Unit
  --       Defined in all entities. Set only for defining entities of program
  --       units that are child units (but False for subunits).
  
! --    Is_Class_Wide_Equivalent_Type
  --       Defined in record types and subtypes. Set to True, if the type acts
  --       as a class-wide equivalent type, i.e. the Equivalent_Type field of
  --       some class-wide subtype entity references this record type.
*************** package Einfo is
*** 2433,2450 ****
  --    Is_Class_Wide_Type (synthesized)
  --       Applies to all entities, true for class wide types and subtypes
  
! --    Is_Compilation_Unit (Flag149)
  --       Defined in all entities. Set if the entity is a package or subprogram
  --       entity for a compilation unit other than a subunit (since we treat
  --       subunits as part of the same compilation operation as the ultimate
  --       parent, we do not consider them to be separate units for this flag).
  
! --    Is_Completely_Hidden (Flag103)
! --       Defined on discriminants. Only set on girder discriminants of
! --       untagged types. When set, the entity is a girder discriminant of a
  --       derived untagged type which is not directly visible in the derived
  --       type because the derived type or one of its ancestors have renamed the
! --       discriminants in the root type. Note: there are girder discriminants
  --       which are not Completely_Hidden (e.g. discriminants of a root type).
  
  --    Is_Composite_Type (synthesized)
--- 2430,2452 ----
  --    Is_Class_Wide_Type (synthesized)
  --       Applies to all entities, true for class wide types and subtypes
  
! --    Is_Class_Wide_Wrapper
! --       Defined in subprogram entities. Indicates that it has been created as
! --       a wrapper in a generic/instance scenario involving a formal type and
! --       a generic primitive operation when the actual is a class-wide type.
! 
! --    Is_Compilation_Unit
  --       Defined in all entities. Set if the entity is a package or subprogram
  --       entity for a compilation unit other than a subunit (since we treat
  --       subunits as part of the same compilation operation as the ultimate
  --       parent, we do not consider them to be separate units for this flag).
  
! --    Is_Completely_Hidden
! --       Defined on discriminants. Only set on stored discriminants of
! --       untagged types. When set, the entity is a stored discriminant of a
  --       derived untagged type which is not directly visible in the derived
  --       type because the derived type or one of its ancestors have renamed the
! --       discriminants in the root type. Note: there are stored discriminants
  --       which are not Completely_Hidden (e.g. discriminants of a root type).
  
  --    Is_Composite_Type (synthesized)
*************** package Einfo is
*** 2452,2458 ****
  --       Either Is_Composite_Type or Is_Elementary_Type (but not both) is true
  --       of any type.
  
! --    Is_Concurrent_Record_Type (Flag20)
  --       Defined in record types and subtypes. Set if the type was created
  --       by the expander to represent a task or protected type. For every
  --       concurrent type, such as record type is constructed, and task and
--- 2454,2460 ----
  --       Either Is_Composite_Type or Is_Elementary_Type (but not both) is true
  --       of any type.
  
! --    Is_Concurrent_Record_Type
  --       Defined in record types and subtypes. Set if the type was created
  --       by the expander to represent a task or protected type. For every
  --       concurrent type, such as record type is constructed, and task and
*************** package Einfo is
*** 2469,2496 ****
  --       Applies to all entities, true for E_Constant, E_Loop_Parameter, and
  --       E_In_Parameter entities.
  
! --    Is_Constrained (Flag12)
  --       Defined in types or subtypes which may have index, discriminant
  --       or range constraint (i.e. array types and subtypes, record types
  --       and subtypes, string types and subtypes, and all numeric types).
  --       Set if the type or subtype is constrained.
  
! --    Is_Constr_Subt_For_U_Nominal (Flag80)
  --       Defined in all types and subtypes. Set only for the constructed
  --       subtype of an object whose nominal subtype is unconstrained. Note
  --       that the constructed subtype itself will be constrained.
  
! --    Is_Constr_Subt_For_UN_Aliased (Flag141)
  --       Defined in all types and subtypes. This flag can be set only if
  --       Is_Constr_Subt_For_U_Nominal is also set. It indicates that in
  --       addition the object concerned is aliased. This flag is used by
  --       the backend to determine whether a template must be constructed.
  
! --    Is_Constructor (Flag76)
  --       Defined in function and procedure entities. Set if a pragma
  --       CPP_Constructor applies to the subprogram.
  
! --    Is_Controlled_Active (Flag42) [base type only]
  --       Defined in all type entities. Indicates that the type is controlled,
  --       i.e. is either a descendant of Ada.Finalization.Controlled or of
  --       Ada.Finalization.Limited_Controlled.
--- 2471,2498 ----
  --       Applies to all entities, true for E_Constant, E_Loop_Parameter, and
  --       E_In_Parameter entities.
  
! --    Is_Constrained
  --       Defined in types or subtypes which may have index, discriminant
  --       or range constraint (i.e. array types and subtypes, record types
  --       and subtypes, string types and subtypes, and all numeric types).
  --       Set if the type or subtype is constrained.
  
! --    Is_Constr_Subt_For_U_Nominal
  --       Defined in all types and subtypes. Set only for the constructed
  --       subtype of an object whose nominal subtype is unconstrained. Note
  --       that the constructed subtype itself will be constrained.
  
! --    Is_Constr_Subt_For_UN_Aliased
  --       Defined in all types and subtypes. This flag can be set only if
  --       Is_Constr_Subt_For_U_Nominal is also set. It indicates that in
  --       addition the object concerned is aliased. This flag is used by
  --       the backend to determine whether a template must be constructed.
  
! --    Is_Constructor
  --       Defined in function and procedure entities. Set if a pragma
  --       CPP_Constructor applies to the subprogram.
  
! --    Is_Controlled_Active [base type only]
  --       Defined in all type entities. Indicates that the type is controlled,
  --       i.e. is either a descendant of Ada.Finalization.Controlled or of
  --       Ada.Finalization.Limited_Controlled.
*************** package Einfo is
*** 2499,2513 ****
  --       Defined in all type entities. Set if Is_Controlled_Active is set for
  --       the type, and Disable_Controlled is not set.
  
! --    Is_Controlling_Formal (Flag97)
  --       Defined in all Formal_Kind entities. Marks the controlling parameters
  --       of dispatching operations.
  
! --    Is_CPP_Class (Flag74)
  --       Defined in all type entities, set only for tagged types to which a
  --       valid pragma Import (CPP, ...) or pragma CPP_Class has been applied.
  
! --    Is_CUDA_Kernel (Flag118)
  --       Defined in function and procedure entities. Set if the subprogram is a
  --       CUDA kernel.
  
--- 2501,2515 ----
  --       Defined in all type entities. Set if Is_Controlled_Active is set for
  --       the type, and Disable_Controlled is not set.
  
! --    Is_Controlling_Formal
  --       Defined in all Formal_Kind entities. Marks the controlling parameters
  --       of dispatching operations.
  
! --    Is_CPP_Class
  --       Defined in all type entities, set only for tagged types to which a
  --       valid pragma Import (CPP, ...) or pragma CPP_Class has been applied.
  
! --    Is_CUDA_Kernel
  --       Defined in function and procedure entities. Set if the subprogram is a
  --       CUDA kernel.
  
*************** package Einfo is
*** 2515,2525 ****
  --       Applies to all type entities, true for decimal fixed point
  --       types and subtypes.
  
! --    Is_Descendant_Of_Address (Flag223)
  --       Defined in all entities. True if the entity is type System.Address,
  --       or (recursively) a subtype or derived type of System.Address.
  
! --    Is_DIC_Procedure (Flag132)
  --       Defined in functions and procedures. Set for a generated procedure
  --       which verifies the assumption of pragma Default_Initial_Condition at
  --       run time.
--- 2517,2527 ----
  --       Applies to all type entities, true for decimal fixed point
  --       types and subtypes.
  
! --    Is_Descendant_Of_Address
  --       Defined in all entities. True if the entity is type System.Address,
  --       or (recursively) a subtype or derived type of System.Address.
  
! --    Is_DIC_Procedure
  --       Defined in functions and procedures. Set for a generated procedure
  --       which verifies the assumption of pragma Default_Initial_Condition at
  --       run time.
*************** package Einfo is
*** 2531,2541 ****
  --    Is_Discrete_Type (synthesized)
  --       Applies to all entities, true for all discrete types and subtypes
  
! --    Is_Discrim_SO_Function (Flag176)
  --       Defined in all entities. Set only in E_Function entities that Layout
  --       creates to compute discriminant-dependent dynamic size/offset values.
  
! --    Is_Discriminant_Check_Function (Flag264)
  --       Defined in all entities. Set only in E_Function entities for functions
  --       created to do discriminant checks.
  
--- 2533,2543 ----
  --    Is_Discrete_Type (synthesized)
  --       Applies to all entities, true for all discrete types and subtypes
  
! --    Is_Discrim_SO_Function
  --       Defined in all entities. Set only in E_Function entities that Layout
  --       creates to compute discriminant-dependent dynamic size/offset values.
  
! --    Is_Discriminant_Check_Function
  --       Defined in all entities. Set only in E_Function entities for functions
  --       created to do discriminant checks.
  
*************** package Einfo is
*** 2543,2553 ****
  --       Applies to all entities, true for renamings of discriminants. Such
  --       entities appear as constants or IN parameters.
  
! --    Is_Dispatch_Table_Entity (Flag234)
  --       Applies to all entities. Set to indicate to the backend that this
  --       entity is associated with a dispatch table.
  
! --    Is_Dispatching_Operation (Flag6)
  --       Defined in all entities. Set for procedures, functions, generic
  --       procedures, and generic functions if the corresponding operation
  --       is dispatching.
--- 2545,2560 ----
  --       Applies to all entities, true for renamings of discriminants. Such
  --       entities appear as constants or IN parameters.
  
! --    Is_Dispatch_Table_Entity
  --       Applies to all entities. Set to indicate to the backend that this
  --       entity is associated with a dispatch table.
  
! --    Is_Dispatch_Table_Wrapper
! --       Applies to all entities. Set on wrappers built when the subprogram has
! --       class-wide preconditions or class-wide postconditions affected by
! --       overriding (AI12-0195).
! 
! --    Is_Dispatching_Operation
  --       Defined in all entities. Set for procedures, functions, generic
  --       procedures, and generic functions if the corresponding operation
  --       is dispatching.
*************** package Einfo is
*** 2557,2563 ****
  --       scope (i.e. a block, subprogram, task_type, entry or extended return
  --       statement).
  
! --    Is_Elaboration_Checks_OK_Id (Flag148)
  --       Defined in elaboration targets (see terminology in Sem_Elab). Set when
  --       the target appears in a region which is subject to elabled elaboration
  --       checks. Such targets are allowed to generate run-time conditional ABE
--- 2564,2570 ----
  --       scope (i.e. a block, subprogram, task_type, entry or extended return
  --       statement).
  
! --    Is_Elaboration_Checks_OK_Id
  --       Defined in elaboration targets (see terminology in Sem_Elab). Set when
  --       the target appears in a region which is subject to elabled elaboration
  --       checks. Such targets are allowed to generate run-time conditional ABE
*************** package Einfo is
*** 2567,2573 ****
  --       Applies to all entities, True only for elaboration targets (see the
  --       terminology in Sem_Elab).
  
! --    Is_Elaboration_Warnings_OK_Id (Flag304)
  --       Defined in elaboration targets (see terminology in Sem_Elab). Set when
  --       the target appears in a region with elaboration warnings enabled.
  
--- 2574,2580 ----
  --       Applies to all entities, True only for elaboration targets (see the
  --       terminology in Sem_Elab).
  
! --    Is_Elaboration_Warnings_OK_Id
  --       Defined in elaboration targets (see terminology in Sem_Elab). Set when
  --       the target appears in a region with elaboration warnings enabled.
  
*************** package Einfo is
*** 2576,2582 ****
  --       Either Is_Composite_Type or Is_Elementary_Type (but not both) is true
  --       of any type.
  
! --    Is_Eliminated (Flag124)
  --       Defined in type entities, subprogram entities, and object entities.
  --       Indicates that the corresponding entity has been eliminated by use
  --       of pragma Eliminate. Also used to mark subprogram entities whose
--- 2583,2589 ----
  --       Either Is_Composite_Type or Is_Elementary_Type (but not both) is true
  --       of any type.
  
! --    Is_Eliminated
  --       Defined in type entities, subprogram entities, and object entities.
  --       Indicates that the corresponding entity has been eliminated by use
  --       of pragma Eliminate. Also used to mark subprogram entities whose
*************** package Einfo is
*** 2586,2608 ****
  --       Applies to all entities, True only for entry and entry family
  --       entities and False for all other entity kinds.
  
! --    Is_Entry_Formal (Flag52)
  --       Defined in all entities. Set only for entry formals (which can only
  --       be in, in-out or out parameters). This flag is used to speed up the
  --       test for the need to replace references in Exp_Ch2.
  
! --    Is_Entry_Wrapper (Flag297)
  --       Defined on wrappers created for entries that have precondition aspects
  
  --    Is_Enumeration_Type (synthesized)
  --       Defined in all entities, true for enumeration types and subtypes
  
! --    Is_Exception_Handler (Flag286)
  --       Defined in blocks. Set if the block serves only as a scope of an
  --       exception handler with a choice parameter. Such a block does not
  --       physically appear in the tree.
  
! --    Is_Exported (Flag99)
  --       Defined in all entities. Set if the entity is exported. For now we
  --       only allow the export of constants, exceptions, functions, procedures
  --       and variables, but that may well change later on. Exceptions can only
--- 2593,2615 ----
  --       Applies to all entities, True only for entry and entry family
  --       entities and False for all other entity kinds.
  
! --    Is_Entry_Formal
  --       Defined in all entities. Set only for entry formals (which can only
  --       be in, in-out or out parameters). This flag is used to speed up the
  --       test for the need to replace references in Exp_Ch2.
  
! --    Is_Entry_Wrapper
  --       Defined on wrappers created for entries that have precondition aspects
  
  --    Is_Enumeration_Type (synthesized)
  --       Defined in all entities, true for enumeration types and subtypes
  
! --    Is_Exception_Handler
  --       Defined in blocks. Set if the block serves only as a scope of an
  --       exception handler with a choice parameter. Such a block does not
  --       physically appear in the tree.
  
! --    Is_Exported
  --       Defined in all entities. Set if the entity is exported. For now we
  --       only allow the export of constants, exceptions, functions, procedures
  --       and variables, but that may well change later on. Exceptions can only
*************** package Einfo is
*** 2612,2618 ****
  --       Applies to all entities, true for abstract states that are subject to
  --       option External or Synchronous.
  
! --    Is_Finalized_Transient (Flag252)
  --       Defined in constants, loop parameters of generalized iterators, and
  --       variables. Set when a transient object has been finalized by one of
  --       the transient finalization mechanisms. The flag prevents the double
--- 2619,2625 ----
  --       Applies to all entities, true for abstract states that are subject to
  --       option External or Synchronous.
  
! --    Is_Finalized_Transient
  --       Defined in constants, loop parameters of generalized iterators, and
  --       variables. Set when a transient object has been finalized by one of
  --       the transient finalization mechanisms. The flag prevents the double
*************** package Einfo is
*** 2622,2628 ****
  --       Applies to all entities, true for procedures containing finalization
  --       code to process local or library level objects.
  
! --    Is_First_Subtype (Flag70)
  --       Defined in all entities. True for first subtypes (RM 3.2.1(6)),
  --       i.e. the entity in the type declaration that introduced the type.
  --       This may be the base type itself (e.g. for record declarations and
--- 2629,2635 ----
  --       Applies to all entities, true for procedures containing finalization
  --       code to process local or library level objects.
  
! --    Is_First_Subtype
  --       Defined in all entities. True for first subtypes (RM 3.2.1(6)),
  --       i.e. the entity in the type declaration that introduced the type.
  --       This may be the base type itself (e.g. for record declarations and
*************** package Einfo is
*** 2630,2635 ****
--- 2637,2652 ----
  --       an anonymous base type (e.g. for integer type declarations or
  --       constrained array declarations).
  
+ --    Is_Fixed_Lower_Bound_Array_Subtype
+ --       Defined in type entities. True for unconstrained array types and
+ --       subtypes where at least one index has a range specified with a fixed
+ --       lower bound (range syntax is "<expression> .. <>").
+ 
+ --    Is_Fixed_Lower_Bound_Index_Subtype
+ --       Defined in type entities. True for an index of an unconstrained array
+ --       type or subtype whose range is specified with a fixed lower bound
+ --       (range syntax is "<expression> .. <>").
+ 
  --    Is_Fixed_Point_Type (synthesized)
  --       Applies to all entities, true for decimal and ordinary fixed
  --       point types and subtypes.
*************** package Einfo is
*** 2643,2663 ****
  --    Is_Formal_Object (synthesized)
  --       Applies to all entities, true for generic IN and IN OUT parameters
  
! --    Is_Formal_Subprogram (Flag111)
  --       Defined in all entities. Set for generic formal subprograms.
  
! --    Is_Frozen (Flag4)
  --       Defined in all type and subtype entities. Set if type or subtype has
  --       been frozen.
  
! --    Is_Generic_Actual_Subprogram (Flag274)
  --       Defined on functions and procedures. Set on the entity of the renaming
  --       declaration created within an instance for an actual subprogram.
  --       Used to generate constraint checks on calls to these subprograms, even
  --       within an instance of a predefined run-time unit, in which checks
  --       are otherwise suppressed.
  
! --    Is_Generic_Actual_Type (Flag94)
  --       Defined in all type and subtype entities. Set in the subtype
  --       declaration that renames the generic formal as a subtype of the
  --       actual. Guarantees that the subtype is not static within the instance.
--- 2660,2680 ----
  --    Is_Formal_Object (synthesized)
  --       Applies to all entities, true for generic IN and IN OUT parameters
  
! --    Is_Formal_Subprogram
  --       Defined in all entities. Set for generic formal subprograms.
  
! --    Is_Frozen
  --       Defined in all type and subtype entities. Set if type or subtype has
  --       been frozen.
  
! --    Is_Generic_Actual_Subprogram
  --       Defined on functions and procedures. Set on the entity of the renaming
  --       declaration created within an instance for an actual subprogram.
  --       Used to generate constraint checks on calls to these subprograms, even
  --       within an instance of a predefined run-time unit, in which checks
  --       are otherwise suppressed.
  
! --    Is_Generic_Actual_Type
  --       Defined in all type and subtype entities. Set in the subtype
  --       declaration that renames the generic formal as a subtype of the
  --       actual. Guarantees that the subtype is not static within the instance.
*************** package Einfo is
*** 2665,2671 ****
  --       accidental overloading that occurs when different formal types get the
  --       same actual.
  
! --    Is_Generic_Instance (Flag130)
  --       Defined in all entities. Set to indicate that the entity is an
  --       instance of a generic unit, or a formal package (which is an instance
  --       of the template).
--- 2682,2688 ----
  --       accidental overloading that occurs when different formal types get the
  --       same actual.
  
! --    Is_Generic_Instance
  --       Defined in all entities. Set to indicate that the entity is an
  --       instance of a generic unit, or a formal package (which is an instance
  --       of the template).
*************** package Einfo is
*** 2674,2680 ****
  --       Applies to all entities. Yields True for a generic subprogram
  --       (generic function, generic subprogram), False for all other entities.
  
! --    Is_Generic_Type (Flag13)
  --       Defined in all entities. Set for types which are generic formal types.
  --       Such types have an Ekind that corresponds to their classification, so
  --       the Ekind cannot be used to identify generic formal types.
--- 2691,2697 ----
  --       Applies to all entities. Yields True for a generic subprogram
  --       (generic function, generic subprogram), False for all other entities.
  
! --    Is_Generic_Type
  --       Defined in all entities. Set for types which are generic formal types.
  --       Such types have an Ekind that corresponds to their classification, so
  --       the Ekind cannot be used to identify generic formal types.
*************** package Einfo is
*** 2691,2697 ****
  --       subject to pragma Ghost or those that inherit the Ghost property from
  --       an enclosing construct.
  
! --    Is_Hidden (Flag57)
  --       Defined in all entities. Set for all entities declared in the
  --       private part or body of a package. Also marks generic formals of a
  --       formal package declared without a box. For library level entities,
--- 2708,2714 ----
  --       subject to pragma Ghost or those that inherit the Ghost property from
  --       an enclosing construct.
  
! --    Is_Hidden
  --       Defined in all entities. Set for all entities declared in the
  --       private part or body of a package. Also marks generic formals of a
  --       formal package declared without a box. For library level entities,
*************** package Einfo is
*** 2701,2742 ****
  --       child unit, and when compiling a private child unit (see Install_
  --       Private_Declaration in sem_ch7).
  
! --    Is_Hidden_Non_Overridden_Subpgm (Flag2)
  --       Defined in all entities. Set for implicitly declared subprograms
  --       that require overriding or are null procedures, and are hidden by
  --       a non-fully conformant homograph with the same characteristics
  --       (Ada RM 8.3 12.3/2).
  
! --    Is_Hidden_Open_Scope (Flag171)
  --       Defined in all entities. Set for a scope that contains the
  --       instantiation of a child unit, and whose entities are not visible
  --       during analysis of the instance.
  
! --    Is_Ignored_Ghost_Entity (Flag278)
  --       Applies to all entities. Set for abstract states, [generic] packages,
  --       [generic] subprograms, components, discriminants, formal parameters,
  --       objects, package bodies, subprogram bodies, and [sub]types subject to
  --       pragma Ghost or inherit "ghostness" from an enclosing construct, and
  --       subject to Assertion_Policy Ghost => Ignore.
  
! --    Is_Ignored_Transient (Flag295)
  --       Defined in constants, loop parameters of generalized iterators, and
  --       variables. Set when a transient object must be processed by one of
  --       the transient finalization mechanisms. Once marked, a transient is
  --       intentionally ignored by the general finalization mechanism because
  --       its clean up actions are context specific.
  
! --    Is_Immediately_Visible (Flag7)
  --       Defined in all entities. Set if entity is immediately visible, i.e.
  --       is defined in some currently open scope (RM 8.3(4)).
  
! --    Is_Implementation_Defined (Flag254)
  --       Defined in all entities. Set if a pragma Implementation_Defined is
  --       applied to the pragma. Used to mark all implementation defined
  --       identifiers in standard library packages, and to implement the
  --       restriction No_Implementation_Identifiers.
  
! --    Is_Imported (Flag24)
  --       Defined in all entities. Set if the entity is imported. For now we
  --       only allow the import of exceptions, functions, procedures, packages,
  --       constants, and variables. Exceptions, packages, and types can only be
--- 2718,2759 ----
  --       child unit, and when compiling a private child unit (see Install_
  --       Private_Declaration in sem_ch7).
  
! --    Is_Hidden_Non_Overridden_Subpgm
  --       Defined in all entities. Set for implicitly declared subprograms
  --       that require overriding or are null procedures, and are hidden by
  --       a non-fully conformant homograph with the same characteristics
  --       (Ada RM 8.3 12.3/2).
  
! --    Is_Hidden_Open_Scope
  --       Defined in all entities. Set for a scope that contains the
  --       instantiation of a child unit, and whose entities are not visible
  --       during analysis of the instance.
  
! --    Is_Ignored_Ghost_Entity
  --       Applies to all entities. Set for abstract states, [generic] packages,
  --       [generic] subprograms, components, discriminants, formal parameters,
  --       objects, package bodies, subprogram bodies, and [sub]types subject to
  --       pragma Ghost or inherit "ghostness" from an enclosing construct, and
  --       subject to Assertion_Policy Ghost => Ignore.
  
! --    Is_Ignored_Transient
  --       Defined in constants, loop parameters of generalized iterators, and
  --       variables. Set when a transient object must be processed by one of
  --       the transient finalization mechanisms. Once marked, a transient is
  --       intentionally ignored by the general finalization mechanism because
  --       its clean up actions are context specific.
  
! --    Is_Immediately_Visible
  --       Defined in all entities. Set if entity is immediately visible, i.e.
  --       is defined in some currently open scope (RM 8.3(4)).
  
! --    Is_Implementation_Defined
  --       Defined in all entities. Set if a pragma Implementation_Defined is
  --       applied to the pragma. Used to mark all implementation defined
  --       identifiers in standard library packages, and to implement the
  --       restriction No_Implementation_Identifiers.
  
! --    Is_Imported
  --       Defined in all entities. Set if the entity is imported. For now we
  --       only allow the import of exceptions, functions, procedures, packages,
  --       constants, and variables. Exceptions, packages, and types can only be
*************** package Einfo is
*** 2748,2754 ****
  --    Is_Incomplete_Type (synthesized)
  --       Applies to all entities, true for incomplete types and subtypes
  
! --    Is_Independent (Flag268)
  --       Defined in all types and objects. Set if a valid pragma or aspect
  --       Independent applies to the entity, or for a component if a valid
  --       pragma or aspect Independent_Components applies to the enclosing
--- 2765,2771 ----
  --    Is_Incomplete_Type (synthesized)
  --       Applies to all entities, true for incomplete types and subtypes
  
! --    Is_Independent
  --       Defined in all types and objects. Set if a valid pragma or aspect
  --       Independent applies to the entity, or for a component if a valid
  --       pragma or aspect Independent_Components applies to the enclosing
*************** package Einfo is
*** 2758,2768 ****
  --       case of private and incomplete types, this flag is set in both the
  --       partial view and the full view.
  
! --    Is_Initial_Condition_Procedure (Flag302)
  --       Defined in functions and procedures. Set for a generated procedure
  --       which verifies the assumption of pragma Initial_Condition at run time.
  
! --    Is_Inlined (Flag11)
  --       Defined in all entities. Set for functions and procedures which are
  --       to be inlined. For subprograms created during expansion, this flag
  --       may be set directly by the expander to request inlining. Also set
--- 2775,2785 ----
  --       case of private and incomplete types, this flag is set in both the
  --       partial view and the full view.
  
! --    Is_Initial_Condition_Procedure
  --       Defined in functions and procedures. Set for a generated procedure
  --       which verifies the assumption of pragma Initial_Condition at run time.
  
! --    Is_Inlined
  --       Defined in all entities. Set for functions and procedures which are
  --       to be inlined. For subprograms created during expansion, this flag
  --       may be set directly by the expander to request inlining. Also set
*************** package Einfo is
*** 2771,2783 ****
  --       inherited by their instances. It is also set on the body entities
  --       of inlined subprograms. See also Has_Pragma_Inline.
  
! --    Is_Inlined_Always (Flag1)
  --       Defined in subprograms. Set for functions and procedures which are
  --       always inlined in GNATprove mode. GNATprove uses this flag to know
  --       when a body does not need to be analyzed. The value of this flag is
  --       only meaningful if Body_To_Inline is not Empty for the subprogram.
  
! --    Is_Instantiated (Flag126)
  --       Defined in generic packages and generic subprograms. Set if the unit
  --       is instantiated from somewhere in the extended main source unit. This
  --       flag is used to control warnings about the unit being uninstantiated.
--- 2788,2800 ----
  --       inherited by their instances. It is also set on the body entities
  --       of inlined subprograms. See also Has_Pragma_Inline.
  
! --    Is_Inlined_Always
  --       Defined in subprograms. Set for functions and procedures which are
  --       always inlined in GNATprove mode. GNATprove uses this flag to know
  --       when a body does not need to be analyzed. The value of this flag is
  --       only meaningful if Body_To_Inline is not Empty for the subprogram.
  
! --    Is_Instantiated
  --       Defined in generic packages and generic subprograms. Set if the unit
  --       is instantiated from somewhere in the extended main source unit. This
  --       flag is used to control warnings about the unit being uninstantiated.
*************** package Einfo is
*** 2788,2794 ****
  --    Is_Integer_Type (synthesized)
  --       Applies to all entities, true for integer types and subtypes
  
! --    Is_Interface (Flag186)
  --       Defined in record types and subtypes. Set to indicate that the current
  --       entity corresponds to an abstract interface. Because abstract
  --       interfaces are conceptually a special kind of abstract tagged type
--- 2805,2811 ----
  --    Is_Integer_Type (synthesized)
  --       Applies to all entities, true for integer types and subtypes
  
! --    Is_Interface
  --       Defined in record types and subtypes. Set to indicate that the current
  --       entity corresponds to an abstract interface. Because abstract
  --       interfaces are conceptually a special kind of abstract tagged type
*************** package Einfo is
*** 2797,2803 ****
  --       compiler support for abstract tagged types to implement interfaces
  --       (Ada 2005: AI-251).
  
! --    Is_Internal (Flag17)
  --       Defined in all entities. Set to indicate an entity created during
  --       semantic processing (e.g. an implicit type, or a temporary). The
  --       current uses of this flag are:
--- 2814,2820 ----
  --       compiler support for abstract tagged types to implement interfaces
  --       (Ada 2005: AI-251).
  
! --    Is_Internal
  --       Defined in all entities. Set to indicate an entity created during
  --       semantic processing (e.g. an implicit type, or a temporary). The
  --       current uses of this flag are:
*************** package Einfo is
*** 2821,2832 ****
  --         are used to handle secondary dispatch tables. These entities have
  --         also the attribute Interface_Alias.
  
! --    Is_Interrupt_Handler (Flag89)
  --       Defined in procedures. Set if a pragma Interrupt_Handler applies
! --       to the procedure. The procedure must be parameterless, and on all
! --       targets except AAMP it must be a protected procedure.
  
! --    Is_Intrinsic_Subprogram (Flag64)
  --       Defined in functions and procedures. It is set if a valid pragma
  --       Interface or Import is present for this subprogram specifying
  --       convention Intrinsic. Valid means that the name and profile of the
--- 2838,2849 ----
  --         are used to handle secondary dispatch tables. These entities have
  --         also the attribute Interface_Alias.
  
! --    Is_Interrupt_Handler
  --       Defined in procedures. Set if a pragma Interrupt_Handler applies
! --       to the procedure. The procedure must be a parameterless protected
! --       procedure.
  
! --    Is_Intrinsic_Subprogram
  --       Defined in functions and procedures. It is set if a valid pragma
  --       Interface or Import is present for this subprogram specifying
  --       convention Intrinsic. Valid means that the name and profile of the
*************** package Einfo is
*** 2837,2849 ****
  --       convention set to intrinsic, which causes intrinsic code to be
  --       generated.
  
! --    Is_Invariant_Procedure (Flag257)
  --       Defined in functions and procedures. Set for a generated invariant
  --       procedure which verifies the invariants of both the partial and full
  --       views of a private type or private extension as well as any inherited
  --       class-wide invariants from parent types or interfaces.
  
! --    Is_Itype (Flag91)
  --       Defined in all entities. Set to indicate that a type is an Itype,
  --       which means that the declaration for the type does not appear
  --       explicitly in the tree. Instead the backend will elaborate the type
--- 2854,2866 ----
  --       convention set to intrinsic, which causes intrinsic code to be
  --       generated.
  
! --    Is_Invariant_Procedure
  --       Defined in functions and procedures. Set for a generated invariant
  --       procedure which verifies the invariants of both the partial and full
  --       views of a private type or private extension as well as any inherited
  --       class-wide invariants from parent types or interfaces.
  
! --    Is_Itype
  --       Defined in all entities. Set to indicate that a type is an Itype,
  --       which means that the declaration for the type does not appear
  --       explicitly in the tree. Instead the backend will elaborate the type
*************** package Einfo is
*** 2853,2859 ****
  --       on Itypes is that the first use of such a type (the one that causes it
  --       to be defined) must be in the same scope as the type.
  
! --    Is_Known_Non_Null (Flag37)
  --       Defined in all entities. Relevant (and can be set) only for
  --       objects of an access type. It is set if the object is currently
  --       known to have a non-null value (meaning that no access checks
--- 2870,2876 ----
  --       on Itypes is that the first use of such a type (the one that causes it
  --       to be defined) must be in the same scope as the type.
  
! --    Is_Known_Non_Null
  --       Defined in all entities. Relevant (and can be set) only for
  --       objects of an access type. It is set if the object is currently
  --       known to have a non-null value (meaning that no access checks
*************** package Einfo is
*** 2874,2880 ****
  --       fully constructed, since it simply indicates the last state.
  --       Thus this flag has no meaning to the backend.
  
! --    Is_Known_Null (Flag204)
  --       Defined in all entities. Relevant (and can be set ) only for
  --       objects of an access type. It is set if the object is currently known
  --       to have a null value (meaning that a dereference will surely raise
--- 2891,2897 ----
  --       fully constructed, since it simply indicates the last state.
  --       Thus this flag has no meaning to the backend.
  
! --    Is_Known_Null
  --       Defined in all entities. Relevant (and can be set ) only for
  --       objects of an access type. It is set if the object is currently known
  --       to have a null value (meaning that a dereference will surely raise
*************** package Einfo is
*** 2884,2890 ****
  --       The comments above about sequential flow and aliased and volatile for
  --       the Is_Known_Non_Null flag apply equally to the Is_Known_Null flag.
  
! --    Is_Known_Valid (Flag170)
  --       Defined in all entities. Relevant for types (and subtype) and
  --       for objects (and enumeration literals) of a discrete type.
  --
--- 2901,2907 ----
  --       The comments above about sequential flow and aliased and volatile for
  --       the Is_Known_Non_Null flag apply equally to the Is_Known_Null flag.
  
! --    Is_Known_Valid
  --       Defined in all entities. Relevant for types (and subtype) and
  --       for objects (and enumeration literals) of a discrete type.
  --
*************** package Einfo is
*** 2918,2941 ****
  --       fully constructed, since it simply indicates the last state.
  --       Thus this flag has no meaning to the backend.
  
! --    Is_Limited_Composite (Flag106)
  --       Defined in all entities. Set for composite types that have a limited
  --       component. Used to enforce the rule that operations on the composite
  --       type that depend on the full view of the component do not become
  --       visible until the immediate scope of the composite type itself
  --       (RM 7.3.1 (5)).
  
! --    Is_Limited_Interface (Flag197)
  --       Defined in record types and subtypes. True for interface types, if
  --       interface is declared limited, task, protected, or synchronized, or
  --       is derived from a limited interface.
  
! --    Is_Limited_Record (Flag25)
  --       Defined in all entities. Set to true for record (sub)types if the
  --       record is declared to be limited. Note that this flag is not set
  --       simply because some components of the record are limited.
  
! --    Is_Local_Anonymous_Access (Flag194)
  --       Defined in access types. Set for an anonymous access type to indicate
  --       that the type is created for a record component with an access
  --       definition, an array component, or (pre-Ada 2012) a standalone object.
--- 2935,2958 ----
  --       fully constructed, since it simply indicates the last state.
  --       Thus this flag has no meaning to the backend.
  
! --    Is_Limited_Composite
  --       Defined in all entities. Set for composite types that have a limited
  --       component. Used to enforce the rule that operations on the composite
  --       type that depend on the full view of the component do not become
  --       visible until the immediate scope of the composite type itself
  --       (RM 7.3.1 (5)).
  
! --    Is_Limited_Interface
  --       Defined in record types and subtypes. True for interface types, if
  --       interface is declared limited, task, protected, or synchronized, or
  --       is derived from a limited interface.
  
! --    Is_Limited_Record
  --       Defined in all entities. Set to true for record (sub)types if the
  --       record is declared to be limited. Note that this flag is not set
  --       simply because some components of the record are limited.
  
! --    Is_Local_Anonymous_Access
  --       Defined in access types. Set for an anonymous access type to indicate
  --       that the type is created for a record component with an access
  --       definition, an array component, or (pre-Ada 2012) a standalone object.
*************** package Einfo is
*** 2944,2956 ****
  --       that are created for access parameters, access discriminants, and
  --       (as of Ada 2012) stand-alone objects.
  
! --    Is_Loop_Parameter (Flag307)
  --       Applies to all entities. Certain loops, in particular "for ... of"
  --       loops, get transformed so that the loop parameter is declared by a
  --       variable declaration, so the entity is an E_Variable. This is True for
  --       such E_Variables; False otherwise.
  
! --    Is_Machine_Code_Subprogram (Flag137)
  --       Defined in subprogram entities. Set to indicate that the subprogram
  --       is a machine code subprogram (i.e. its body includes at least one
  --       code statement). Also indicates that all necessary semantic checks
--- 2961,2973 ----
  --       that are created for access parameters, access discriminants, and
  --       (as of Ada 2012) stand-alone objects.
  
! --    Is_Loop_Parameter
  --       Applies to all entities. Certain loops, in particular "for ... of"
  --       loops, get transformed so that the loop parameter is declared by a
  --       variable declaration, so the entity is an E_Variable. This is True for
  --       such E_Variables; False otherwise.
  
! --    Is_Machine_Code_Subprogram
  --       Defined in subprogram entities. Set to indicate that the subprogram
  --       is a machine code subprogram (i.e. its body includes at least one
  --       code statement). Also indicates that all necessary semantic checks
*************** package Einfo is
*** 2959,2965 ****
  --    Is_Modular_Integer_Type (synthesized)
  --       Applies to all entities. True if entity is a modular integer type
  
! --    Is_Non_Static_Subtype (Flag109)
  --       Defined in all type and subtype entities. It is set in some (but not
  --       all) cases in which a subtype is known to be non-static. Before this
  --       flag was added, the computation of whether a subtype was static was
--- 2976,2982 ----
  --    Is_Modular_Integer_Type (synthesized)
  --       Applies to all entities. True if entity is a modular integer type
  
! --    Is_Non_Static_Subtype
  --       Defined in all type and subtype entities. It is set in some (but not
  --       all) cases in which a subtype is known to be non-static. Before this
  --       flag was added, the computation of whether a subtype was static was
*************** package Einfo is
*** 2975,2981 ****
  --       set right, at which point, these comments can be removed, and the
  --       tests for static subtypes greatly simplified.
  
! --    Is_Null_Init_Proc (Flag178)
  --       Defined in procedure entities. Set for generated init proc procedures
  --       (used to initialize composite types), if the code for the procedure
  --       is null (i.e. is a return and nothing else). Such null initialization
--- 2992,2998 ----
  --       set right, at which point, these comments can be removed, and the
  --       tests for static subtypes greatly simplified.
  
! --    Is_Null_Init_Proc
  --       Defined in procedure entities. Set for generated init proc procedures
  --       (used to initialize composite types), if the code for the procedure
  --       is null (i.e. is a return and nothing else). Such null initialization
*************** package Einfo is
*** 2996,3006 ****
  --       Applies to all entities, true for entities representing objects,
  --       including generic formal parameters.
  
! --    Is_Obsolescent (Flag153)
  --       Defined in all entities. Set for any entity to which a valid pragma
  --       or aspect Obsolescent applies.
  
! --    Is_Only_Out_Parameter (Flag226)
  --       Defined in formal parameter entities. Set if this parameter is the
  --       only OUT parameter for this formal part. If there is more than one
  --       out parameter, or if there is some other IN OUT parameter then this
--- 3013,3023 ----
  --       Applies to all entities, true for entities representing objects,
  --       including generic formal parameters.
  
! --    Is_Obsolescent
  --       Defined in all entities. Set for any entity to which a valid pragma
  --       or aspect Obsolescent applies.
  
! --    Is_Only_Out_Parameter
  --       Defined in formal parameter entities. Set if this parameter is the
  --       only OUT parameter for this formal part. If there is more than one
  --       out parameter, or if there is some other IN OUT parameter then this
*************** package Einfo is
*** 3010,3016 ****
  --       Applies to all entities, true for ordinary fixed point types and
  --       subtypes.
  
! --    Is_Package_Body_Entity (Flag160)
  --       Defined in all entities. Set for entities defined at the top level
  --       of a package body. Used to control externally generated names.
  
--- 3027,3033 ----
  --       Applies to all entities, true for ordinary fixed point types and
  --       subtypes.
  
! --    Is_Package_Body_Entity
  --       Defined in all entities. Set for entities defined at the top level
  --       of a package body. Used to control externally generated names.
  
*************** package Einfo is
*** 3018,3024 ****
  --       Applies to all entities. True for packages and generic packages.
  --       False for all other entities.
  
! --    Is_Packed (Flag51) [implementation base type only]
  --       Defined in all type entities. This flag is set only for record and
  --       array types which have a packed representation. There are four cases
  --       which cause packing:
--- 3035,3041 ----
  --       Applies to all entities. True for packages and generic packages.
  --       False for all other entities.
  
! --    Is_Packed [implementation base type only]
  --       Defined in all type entities. This flag is set only for record and
  --       array types which have a packed representation. There are four cases
  --       which cause packing:
*************** package Einfo is
*** 3056,3062 ****
  --    Is_Packed_Array (synth)
  --       Applies to all entities, true if entity is for a packed array.
  
! --    Is_Packed_Array_Impl_Type (Flag138)
  --       Defined in all entities. This flag is set on the entity for the type
  --       used to implement a packed array (either a modular type or a subtype
  --       of Packed_Bytes{1,2,4} in the bit-packed array case, a regular array
--- 3073,3079 ----
  --    Is_Packed_Array (synth)
  --       Applies to all entities, true if entity is for a packed array.
  
! --    Is_Packed_Array_Impl_Type
  --       Defined in all entities. This flag is set on the entity for the type
  --       used to implement a packed array (either a modular type or a subtype
  --       of Packed_Bytes{1,2,4} in the bit-packed array case, a regular array
*************** package Einfo is
*** 3068,3112 ****
  --       set in an entity, then the Original_Array_Type field of this entity
  --       points to the array type for which this is the Packed_Array_Impl_Type.
  
! --    Is_Param_Block_Component_Type (Flag215) [base type only]
  --       Defined in access types. Set to indicate that a type is the type of a
  --       component of the parameter block record type generated by the compiler
  --       for an entry or a select statement. Read by CodePeer.
  
! --    Is_Partial_Invariant_Procedure (Flag292)
  --       Defined in functions and procedures. Set for a generated invariant
  --       procedure which verifies the invariants of the partial view of a
  --       private type or private extension.
  
! --    Is_Potentially_Use_Visible (Flag9)
  --       Defined in all entities. Set if entity is potentially use visible,
  --       i.e. it is defined in a package that appears in a currently active
  --       use clause (RM 8.4(8)). Note that potentially use visible entities
  --       are not necessarily use visible (RM 8.4(9-11)).
  
! --    Is_Predicate_Function (Flag255)
  --       Present in functions and procedures. Set for generated predicate
  --       functions.
  
! --    Is_Predicate_Function_M (Flag256)
  --       Present in functions and procedures. Set for special version of
  --       predicate function generated for use in membership tests, where
  --       raise expressions are transformed to return False.
  
! --    Is_Preelaborated (Flag59)
  --       Defined in all entities, set in E_Package and E_Generic_Package
  --       entities to which a pragma Preelaborate is applied, and also in
  --       all entities within such packages. Note that the fact that this
  --       flag is set does not necesarily mean that no elaboration code is
  --       generated for the package.
  
! --    Is_Primitive (Flag218)
  --       Defined in overloadable entities and in generic subprograms. Set to
  --       indicate that this is a primitive operation of some type, which may
  --       be a tagged type or an untagged type. Used to verify overriding
  --       indicators in bodies.
  
! --    Is_Primitive_Wrapper (Flag195)
  --       Defined in functions and procedures created by the expander to serve
  --       as an indirection mechanism to overriding primitives of concurrent
  --       types, entries and protected procedures.
--- 3085,3129 ----
  --       set in an entity, then the Original_Array_Type field of this entity
  --       points to the array type for which this is the Packed_Array_Impl_Type.
  
! --    Is_Param_Block_Component_Type [base type only]
  --       Defined in access types. Set to indicate that a type is the type of a
  --       component of the parameter block record type generated by the compiler
  --       for an entry or a select statement. Read by CodePeer.
  
! --    Is_Partial_Invariant_Procedure
  --       Defined in functions and procedures. Set for a generated invariant
  --       procedure which verifies the invariants of the partial view of a
  --       private type or private extension.
  
! --    Is_Potentially_Use_Visible
  --       Defined in all entities. Set if entity is potentially use visible,
  --       i.e. it is defined in a package that appears in a currently active
  --       use clause (RM 8.4(8)). Note that potentially use visible entities
  --       are not necessarily use visible (RM 8.4(9-11)).
  
! --    Is_Predicate_Function
  --       Present in functions and procedures. Set for generated predicate
  --       functions.
  
! --    Is_Predicate_Function_M
  --       Present in functions and procedures. Set for special version of
  --       predicate function generated for use in membership tests, where
  --       raise expressions are transformed to return False.
  
! --    Is_Preelaborated
  --       Defined in all entities, set in E_Package and E_Generic_Package
  --       entities to which a pragma Preelaborate is applied, and also in
  --       all entities within such packages. Note that the fact that this
  --       flag is set does not necesarily mean that no elaboration code is
  --       generated for the package.
  
! --    Is_Primitive
  --       Defined in overloadable entities and in generic subprograms. Set to
  --       indicate that this is a primitive operation of some type, which may
  --       be a tagged type or an untagged type. Used to verify overriding
  --       indicators in bodies.
  
! --    Is_Primitive_Wrapper
  --       Defined in functions and procedures created by the expander to serve
  --       as an indirection mechanism to overriding primitives of concurrent
  --       types, entries and protected procedures.
*************** package Einfo is
*** 3115,3133 ****
  --       Applies to all entities, true for renamings of private protected
  --       components. Such entities appear as constants or variables.
  
! --    Is_Private_Composite (Flag107)
  --       Defined in composite types that have a private component. Used to
  --       enforce the rule that operations on the composite type that depend
  --       on the full view of the component, do not become visible until the
  --       immediate scope of the composite type itself (7.3.1 (5)). Both this
  --       flag and Is_Limited_Composite are needed.
  
! --    Is_Private_Descendant (Flag53)
  --       Defined in entities that can represent library units (packages,
  --       functions, procedures). Set if the library unit is itself a private
  --       child unit, or if it is the descendant of a private child unit.
  
! --    Is_Private_Primitive (Flag245)
  --       Defined in subprograms. Set if the operation is a primitive of a
  --       tagged type (procedure or function dispatching on result) whose
  --       full view has not been seen. Used in particular for primitive
--- 3132,3150 ----
  --       Applies to all entities, true for renamings of private protected
  --       components. Such entities appear as constants or variables.
  
! --    Is_Private_Composite
  --       Defined in composite types that have a private component. Used to
  --       enforce the rule that operations on the composite type that depend
  --       on the full view of the component, do not become visible until the
  --       immediate scope of the composite type itself (7.3.1 (5)). Both this
  --       flag and Is_Limited_Composite are needed.
  
! --    Is_Private_Descendant
  --       Defined in entities that can represent library units (packages,
  --       functions, procedures). Set if the library unit is itself a private
  --       child unit, or if it is the descendant of a private child unit.
  
! --    Is_Private_Primitive
  --       Defined in subprograms. Set if the operation is a primitive of a
  --       tagged type (procedure or function dispatching on result) whose
  --       full view has not been seen. Used in particular for primitive
*************** package Einfo is
*** 3154,3167 ****
  --    Is_Protected_Type (synthesized)
  --       Applies to all entities, true for protected types and subtypes
  
! --    Is_Public (Flag10)
  --       Defined in all entities. Set to indicate that an entity defined in
  --       one compilation unit can be referenced from other compilation units.
  --       If this reference causes a reference in the generated code, for
  --       example in the case of a variable name, then the backend will generate
  --       an appropriate external name for use by the linker.
  
! --    Is_Pure (Flag44)
  --       Defined in all entities. Set in all entities of a unit to which a
  --       pragma Pure is applied except for non-intrinsic imported subprograms,
  --       and also set for the entity of the unit itself. In addition, this
--- 3171,3184 ----
  --    Is_Protected_Type (synthesized)
  --       Applies to all entities, true for protected types and subtypes
  
! --    Is_Public
  --       Defined in all entities. Set to indicate that an entity defined in
  --       one compilation unit can be referenced from other compilation units.
  --       If this reference causes a reference in the generated code, for
  --       example in the case of a variable name, then the backend will generate
  --       an appropriate external name for use by the linker.
  
! --    Is_Pure
  --       Defined in all entities. Set in all entities of a unit to which a
  --       pragma Pure is applied except for non-intrinsic imported subprograms,
  --       and also set for the entity of the unit itself. In addition, this
*************** package Einfo is
*** 3171,3186 ****
  --       from side effects (other than those resulting from assignment to Out
  --       or In Out parameters, or to objects designated by access parameters).
  
! --    Is_Pure_Unit_Access_Type (Flag189)
  --       Defined in access type and subtype entities. Set if the type or
  --       subtype appears in a pure unit. Used to give an error message at
  --       freeze time if the access type has a storage pool.
  
! --    Is_RACW_Stub_Type (Flag244)
  --       Defined in all types, true for the stub types generated for remote
  --       access-to-class-wide types.
  
! --    Is_Raised (Flag224)
  --       Defined in exception entities. Set if the entity is referenced by a
  --       a raise statement.
  
--- 3188,3203 ----
  --       from side effects (other than those resulting from assignment to Out
  --       or In Out parameters, or to objects designated by access parameters).
  
! --    Is_Pure_Unit_Access_Type
  --       Defined in access type and subtype entities. Set if the type or
  --       subtype appears in a pure unit. Used to give an error message at
  --       freeze time if the access type has a storage pool.
  
! --    Is_RACW_Stub_Type
  --       Defined in all types, true for the stub types generated for remote
  --       access-to-class-wide types.
  
! --    Is_Raised
  --       Defined in exception entities. Set if the entity is referenced by a
  --       a raise statement.
  
*************** package Einfo is
*** 3195,3223 ****
  --       Applies to all entities, true for abstract states that are subject to
  --       option Relaxed_Initialization.
  
! --    Is_Remote_Call_Interface (Flag62)
  --       Defined in all entities. Set in E_Package and E_Generic_Package
  --       entities to which a pragma Remote_Call_Interface is applied, and
  --       also on entities declared in the visible part of such a package.
  
! --    Is_Remote_Types (Flag61)
  --       Defined in all entities. Set in E_Package and E_Generic_Package
  --       entities to which a pragma Remote_Types is applied, and also on
  --       entities declared in the visible part of the spec of such a package.
  --       Also set for types which are generic formal types to which the
  --       pragma Remote_Access_Type applies.
  
! --    Is_Renaming_Of_Object (Flag112)
  --       Defined in all entities, set only for a variable or constant for
  --       which the Renamed_Object field is non-empty and for which the
  --       renaming is handled by the front end, by macro substitution of
  --       a copy of the (evaluated) name tree whereever the variable is used.
  
! --    Is_Return_Object (Flag209)
  --       Defined in all object entities. True if the object is the return
  --       object of an extended_return_statement; False otherwise.
  
! --    Is_Safe_To_Reevaluate (Flag249)
  --       Defined in all entities. Set in variables that are initialized by
  --       means of an assignment statement. When initialized their contents
  --       never change and hence they can be seen by the backend as constants.
--- 3212,3240 ----
  --       Applies to all entities, true for abstract states that are subject to
  --       option Relaxed_Initialization.
  
! --    Is_Remote_Call_Interface
  --       Defined in all entities. Set in E_Package and E_Generic_Package
  --       entities to which a pragma Remote_Call_Interface is applied, and
  --       also on entities declared in the visible part of such a package.
  
! --    Is_Remote_Types
  --       Defined in all entities. Set in E_Package and E_Generic_Package
  --       entities to which a pragma Remote_Types is applied, and also on
  --       entities declared in the visible part of the spec of such a package.
  --       Also set for types which are generic formal types to which the
  --       pragma Remote_Access_Type applies.
  
! --    Is_Renaming_Of_Object
  --       Defined in all entities, set only for a variable or constant for
  --       which the Renamed_Object field is non-empty and for which the
  --       renaming is handled by the front end, by macro substitution of
  --       a copy of the (evaluated) name tree whereever the variable is used.
  
! --    Is_Return_Object
  --       Defined in all object entities. True if the object is the return
  --       object of an extended_return_statement; False otherwise.
  
! --    Is_Safe_To_Reevaluate
  --       Defined in all entities. Set in variables that are initialized by
  --       means of an assignment statement. When initialized their contents
  --       never change and hence they can be seen by the backend as constants.
*************** package Einfo is
*** 3226,3232 ****
  --    Is_Scalar_Type (synthesized)
  --       Applies to all entities, true for scalar types and subtypes
  
! --    Is_Shared_Passive (Flag60)
  --       Defined in all entities. Set in E_Package and E_Generic_Package
  --       entities to which a pragma Shared_Passive is applied, and also in
  --       all entities within such packages.
--- 3243,3249 ----
  --    Is_Scalar_Type (synthesized)
  --       Applies to all entities, true for scalar types and subtypes
  
! --    Is_Shared_Passive
  --       Defined in all entities. Set in E_Package and E_Generic_Package
  --       entities to which a pragma Shared_Passive is applied, and also in
  --       all entities within such packages.
*************** package Einfo is
*** 3241,3247 ****
  --       type is one of the standard string types (String, Wide_String, or
  --       Wide_Wide_String).
  
! --    Is_Static_Type (Flag281)
  --       Defined in entities. Only set for (sub)types. If set, indicates that
  --       the type is known to be a static type (defined as a discrete type with
  --       static bounds, a record all of whose component types are static types,
--- 3258,3264 ----
  --       type is one of the standard string types (String, Wide_String, or
  --       Wide_Wide_String).
  
! --    Is_Static_Type
  --       Defined in entities. Only set for (sub)types. If set, indicates that
  --       the type is known to be a static type (defined as a discrete type with
  --       static bounds, a record all of whose component types are static types,
*************** package Einfo is
*** 3249,3255 ****
  --       a component type that is a static type). See Set_Uplevel_Type for more
  --       information on how this flag is used.
  
! --    Is_Statically_Allocated (Flag28)
  --       Defined in all entities. This can only be set for exception,
  --       variable, constant, and type/subtype entities. If the flag is set,
  --       then the variable or constant must be allocated statically rather
--- 3266,3272 ----
  --       a component type that is a static type). See Set_Uplevel_Type for more
  --       information on how this flag is used.
  
! --    Is_Statically_Allocated
  --       Defined in all entities. This can only be set for exception,
  --       variable, constant, and type/subtype entities. If the flag is set,
  --       then the variable or constant must be allocated statically rather
*************** package Einfo is
*** 3288,3300 ****
  --       Applies to all entities, true for abstract states that are subject to
  --       option Synchronous.
  
! --    Is_Tag (Flag78)
  --       Defined in E_Component and E_Constant entities. For regular tagged
  --       type this flag is set on the tag component (whose name is Name_uTag).
  --       For CPP_Class tagged types, this flag marks the pointer to the main
  --       vtable (i.e. the one to be extended by derivation).
  
! --    Is_Tagged_Type (Flag55)
  --       Defined in all entities, set for an entity that is a tagged type
  
  --    Is_Task_Interface (synthesized)
--- 3305,3317 ----
  --       Applies to all entities, true for abstract states that are subject to
  --       option Synchronous.
  
! --    Is_Tag
  --       Defined in E_Component and E_Constant entities. For regular tagged
  --       type this flag is set on the tag component (whose name is Name_uTag).
  --       For CPP_Class tagged types, this flag marks the pointer to the main
  --       vtable (i.e. the one to be extended by derivation).
  
! --    Is_Tagged_Type
  --       Defined in all entities, set for an entity that is a tagged type
  
  --    Is_Task_Interface (synthesized)
*************** package Einfo is
*** 3308,3314 ****
  --    Is_Task_Type (synthesized)
  --       Applies to all entities. True for task types and subtypes
  
! --    Is_Thunk (Flag225)
  --       Defined in all entities. True for subprograms that are thunks: that is
  --       small subprograms built by the expander for tagged types that cover
  --       interface types. As part of the runtime call to an interface, thunks
--- 3325,3331 ----
  --    Is_Task_Type (synthesized)
  --       Applies to all entities. True for task types and subtypes
  
! --    Is_Thunk
  --       Defined in all entities. True for subprograms that are thunks: that is
  --       small subprograms built by the expander for tagged types that cover
  --       interface types. As part of the runtime call to an interface, thunks
*************** package Einfo is
*** 3321,3333 ****
  --       by Expand_Interface_Thunk and used by Expand_Call to handle extra
  --       actuals associated with accessibility level.
  
! --    Is_Trivial_Subprogram (Flag235)
  --       Defined in all entities. Set in subprograms where either the body
  --       consists of a single null statement, or the first or only statement
  --       of the body raises an exception. This is used for suppressing certain
  --       warnings, see Sem_Ch6.Analyze_Subprogram_Body discussion for details.
  
! --    Is_True_Constant (Flag163)
  --       Defined in all entities for constants and variables. Set in constants
  --       and variables which have an initial value specified but which are
  --       never assigned, partially or in the whole. For variables, it means
--- 3338,3350 ----
  --       by Expand_Interface_Thunk and used by Expand_Call to handle extra
  --       actuals associated with accessibility level.
  
! --    Is_Trivial_Subprogram
  --       Defined in all entities. Set in subprograms where either the body
  --       consists of a single null statement, or the first or only statement
  --       of the body raises an exception. This is used for suppressing certain
  --       warnings, see Sem_Ch6.Analyze_Subprogram_Body discussion for details.
  
! --    Is_True_Constant
  --       Defined in all entities for constants and variables. Set in constants
  --       and variables which have an initial value specified but which are
  --       never assigned, partially or in the whole. For variables, it means
*************** package Einfo is
*** 3340,3366 ****
  --    Is_Type (synthesized)
  --       Applies to all entities, true for a type entity
  
! --    Is_Unchecked_Union (Flag117) [implementation base type only]
  --       Defined in all entities. Set only in record types to which the
  --       pragma Unchecked_Union has been validly applied.
  
! --    Is_Underlying_Full_View (Flag298)
  --       Defined in all entities. Set for types which represent the true full
  --       view of a private type completed by another private type. For further
  --       details, see attribute Underlying_Full_View.
  
! --    Is_Underlying_Record_View (Flag246) [base type only]
  --       Defined in all entities. Set only in record types that represent the
  --       underlying record view. This view is built for derivations of types
  --       with unknown discriminants; it is a record with the same structure
  --       as its corresponding record type, but whose parent is the full view
  --       of the parent in the original type extension.
  
! --    Is_Unimplemented (Flag284)
  --       Defined in all entities. Set for any entity to which a valid pragma
  --       or aspect Unimplemented applies.
  
! --    Is_Unsigned_Type (Flag144)
  --       Defined in all types, but can be set only for discrete and fixed-point
  --       type and subtype entities. This flag is only valid if the entity is
  --       frozen. If set it indicates that the representation is known to be
--- 3357,3383 ----
  --    Is_Type (synthesized)
  --       Applies to all entities, true for a type entity
  
! --    Is_Unchecked_Union [implementation base type only]
  --       Defined in all entities. Set only in record types to which the
  --       pragma Unchecked_Union has been validly applied.
  
! --    Is_Underlying_Full_View
  --       Defined in all entities. Set for types which represent the true full
  --       view of a private type completed by another private type. For further
  --       details, see attribute Underlying_Full_View.
  
! --    Is_Underlying_Record_View [base type only]
  --       Defined in all entities. Set only in record types that represent the
  --       underlying record view. This view is built for derivations of types
  --       with unknown discriminants; it is a record with the same structure
  --       as its corresponding record type, but whose parent is the full view
  --       of the parent in the original type extension.
  
! --    Is_Unimplemented
  --       Defined in all entities. Set for any entity to which a valid pragma
  --       or aspect Unimplemented applies.
  
! --    Is_Unsigned_Type
  --       Defined in all types, but can be set only for discrete and fixed-point
  --       type and subtype entities. This flag is only valid if the entity is
  --       frozen. If set it indicates that the representation is known to be
*************** package Einfo is
*** 3376,3382 ****
  --       cannot be used to determine the comparison operator to emit in the
  --       generated code: use the base type.
  
! --    Is_Uplevel_Referenced_Entity (Flag283)
  --       Defined in all entities. Used when unnesting subprograms to indicate
  --       that an entity is locally defined within a subprogram P, and there is
  --       a reference to the entity within a subprogram nested within P (at any
--- 3393,3399 ----
  --       cannot be used to determine the comparison operator to emit in the
  --       generated code: use the base type.
  
! --    Is_Uplevel_Referenced_Entity
  --       Defined in all entities. Used when unnesting subprograms to indicate
  --       that an entity is locally defined within a subprogram P, and there is
  --       a reference to the entity within a subprogram nested within P (at any
*************** package Einfo is
*** 3387,3409 ****
  --       array. This is used internally in Exp_Unst, see this package for
  --       further details.
  
! --    Is_Valued_Procedure (Flag127)
  --       Defined in procedure entities. Set if an Import_Valued_Procedure
  --       or Export_Valued_Procedure pragma applies to the procedure entity.
  
! --    Is_Visible_Formal (Flag206)
  --       Defined in all entities. Set for instances of the formals of a
  --       formal package. Indicates that the entity must be made visible in the
  --       body of the instance, to reproduce the visibility of the generic.
  --       This simplifies visibility settings in instance bodies.
  
! --    Is_Visible_Lib_Unit (Flag116)
  --       Defined in all (root or child) library unit entities. Once compiled,
  --       library units remain chained to the entities in the parent scope, and
  --       a separate flag must be used to indicate whether the names are visible
  --       by selected notation, or not.
  
! --    Is_Volatile (Flag16)
  --       Defined in all type entities, and also in constants, components and
  --       variables. Set if a pragma Volatile applies to the entity. Also set
  --       if pragma Shared or pragma Atomic applies to entity. In the case of
--- 3404,3426 ----
  --       array. This is used internally in Exp_Unst, see this package for
  --       further details.
  
! --    Is_Valued_Procedure
  --       Defined in procedure entities. Set if an Import_Valued_Procedure
  --       or Export_Valued_Procedure pragma applies to the procedure entity.
  
! --    Is_Visible_Formal
  --       Defined in all entities. Set for instances of the formals of a
  --       formal package. Indicates that the entity must be made visible in the
  --       body of the instance, to reproduce the visibility of the generic.
  --       This simplifies visibility settings in instance bodies.
  
! --    Is_Visible_Lib_Unit
  --       Defined in all (root or child) library unit entities. Once compiled,
  --       library units remain chained to the entities in the parent scope, and
  --       a separate flag must be used to indicate whether the names are visible
  --       by selected notation, or not.
  
! --    Is_Volatile
  --       Defined in all type entities, and also in constants, components and
  --       variables. Set if a pragma Volatile applies to the entity. Also set
  --       if pragma Shared or pragma Atomic applies to entity. In the case of
*************** package Einfo is
*** 3416,3425 ****
  --       Similarly, any front end test which is concerned with suppressing
  --       optimizations on volatile objects should test Treat_As_Volatile
  --       rather than testing this flag.
  
! --    Is_Volatile_Full_Access (Flag285)
  --       Defined in all type entities, and also in constants, components, and
! --       variables. Set if an aspect/pragma Volatile_Full_Access or an Ada 2020
  --       aspect Full_Access_Only applies to the entity. In the case of private
  --       and incomplete types, this flag is set in both the partial view and
  --       the full view.
--- 3433,3446 ----
  --       Similarly, any front end test which is concerned with suppressing
  --       optimizations on volatile objects should test Treat_As_Volatile
  --       rather than testing this flag.
+ --       This is a synthesized attribute in Einfo.Utils, based on
+ --       Is_Volatile_Type and Is_Volatile_Object. The latter two should be
+ --       used in preference to Is_Volatile when we know that we have a type
+ --       or an object.
  
! --    Is_Volatile_Full_Access
  --       Defined in all type entities, and also in constants, components, and
! --       variables. Set if an aspect/pragma Volatile_Full_Access or an Ada 2022
  --       aspect Full_Access_Only applies to the entity. In the case of private
  --       and incomplete types, this flag is set in both the partial view and
  --       the full view.
*************** package Einfo is
*** 3428,3453 ****
  --       Defined in package entities. Indicates that the package has been
  --       created as a wrapper for a subprogram instantiation.
  
! --    Itype_Printed (Flag202)
  --       Defined in all type and subtype entities. Set in Itypes if the Itype
  --       has been printed by Sprint. This is used to avoid printing an Itype
  --       more than once.
  
! --    Kill_Elaboration_Checks (Flag32)
  --       Defined in all entities. Set by the expander to kill elaboration
  --       checks which are known not to be needed. Equivalent in effect to
  --       the use of pragma Suppress (Elaboration_Checks) for that entity
  --       except that the effect is permanent and cannot be undone by a
  --       subsequent pragma Unsuppress.
  
! --    Kill_Range_Checks (Flag33)
  --       Defined in all entities. Equivalent in effect to the use of pragma
  --       Suppress (Range_Checks) for that entity except that the result is
  --       permanent and cannot be undone by a subsequent pragma Unsuppress.
  --       This is currently only used in one odd situation in Sem_Ch3 for
  --       record types, and it would be good to get rid of it???
  
! --    Known_To_Have_Preelab_Init (Flag207)
  --       Defined in all type and subtype entities. If set, then the type is
  --       known to have preelaborable initialization. In the case of a partial
  --       view of a private type, it is only possible for this to be set if a
--- 3449,3479 ----
  --       Defined in package entities. Indicates that the package has been
  --       created as a wrapper for a subprogram instantiation.
  
! --    Is_Wrapper
! --       Defined in subprogram entities. Indicates that it has been created as
! --       a wrapper to handle inherited class-wide pre/post conditions that call
! --       overridden primitives or as a wrapper of a controlling function.
! 
! --    Itype_Printed
  --       Defined in all type and subtype entities. Set in Itypes if the Itype
  --       has been printed by Sprint. This is used to avoid printing an Itype
  --       more than once.
  
! --    Kill_Elaboration_Checks
  --       Defined in all entities. Set by the expander to kill elaboration
  --       checks which are known not to be needed. Equivalent in effect to
  --       the use of pragma Suppress (Elaboration_Checks) for that entity
  --       except that the effect is permanent and cannot be undone by a
  --       subsequent pragma Unsuppress.
  
! --    Kill_Range_Checks
  --       Defined in all entities. Equivalent in effect to the use of pragma
  --       Suppress (Range_Checks) for that entity except that the result is
  --       permanent and cannot be undone by a subsequent pragma Unsuppress.
  --       This is currently only used in one odd situation in Sem_Ch3 for
  --       record types, and it would be good to get rid of it???
  
! --    Known_To_Have_Preelab_Init
  --       Defined in all type and subtype entities. If set, then the type is
  --       known to have preelaborable initialization. In the case of a partial
  --       view of a private type, it is only possible for this to be set if a
*************** package Einfo is
*** 3456,3475 ****
  --       initialization, it may or may not be set if the type does have
  --       preelaborable initialization.
  
! --    Last_Aggregate_Assignment (Node30)
  --       Applies to controlled constants and variables initialized by an
  --       aggregate. Points to the last statement associated with the expansion
  --       of the aggregate. The attribute is used by the finalization machinery
  --       when marking an object as successfully initialized.
  
! --    Last_Assignment (Node26)
  --       Defined in entities for variables, and OUT or IN OUT formals. Set for
  --       a local variable or formal to point to the left side of an assignment
  --       statement assigning a value to the variable. Cleared if the value of
  --       the entity is referenced. Used to warn about dubious assignment
  --       statements whose value is not used.
  
! --    Last_Entity (Node20)
  --       Defined in all entities which act as scopes to which a list of
  --       associated entities is attached (blocks, class subtypes and types,
  --       entries, functions, loops, packages, procedures, protected objects,
--- 3482,3501 ----
  --       initialization, it may or may not be set if the type does have
  --       preelaborable initialization.
  
! --    Last_Aggregate_Assignment
  --       Applies to controlled constants and variables initialized by an
  --       aggregate. Points to the last statement associated with the expansion
  --       of the aggregate. The attribute is used by the finalization machinery
  --       when marking an object as successfully initialized.
  
! --    Last_Assignment
  --       Defined in entities for variables, and OUT or IN OUT formals. Set for
  --       a local variable or formal to point to the left side of an assignment
  --       statement assigning a value to the variable. Cleared if the value of
  --       the entity is referenced. Used to warn about dubious assignment
  --       statements whose value is not used.
  
! --    Last_Entity
  --       Defined in all entities which act as scopes to which a list of
  --       associated entities is attached (blocks, class subtypes and types,
  --       entries, functions, loops, packages, procedures, protected objects,
*************** package Einfo is
*** 3484,3518 ****
  --       a subprogram type (the designated type of an Access_To_Subprogram
  --       definition) or in an entry.
  
! --    Limited_View (Node23)
  --       Defined in non-generic package entities that are not instances. Bona
  --       fide package with the limited-view list through the first_entity and
  --       first_private attributes. The elements of this list are the shadow
  --       entities created for the types and local packages that are declared
  --       in a package appearing in a limited_with clause (Ada 2005: AI-50217).
  
! --    Linker_Section_Pragma (Node33)
  --       Present in constant, variable, type and subprogram entities. Points
  --       to a linker section pragma that applies to the entity, or is Empty if
  --       no such pragma applies. Note that for constants and variables, this
  --       field may be set as a result of a linker section pragma applied to the
  --       type of the object.
  
! --    Lit_Indexes (Node18)
  --       Defined in enumeration types and subtypes. Non-empty only for the
  --       case of an enumeration root type, where it contains the entity for
  --       the generated indexes entity. See unit Exp_Imgv for full details of
  --       the nature and use of this entity for implementing the Image and
  --       Value attributes for the enumeration type in question.
  
! --    Lit_Strings (Node16)
  --       Defined in enumeration types and subtypes. Non-empty only for the
  --       case of an enumeration root type, where it contains the entity for
  --       the literals string entity. See unit Exp_Imgv for full details of
  --       the nature and use of this entity for implementing the Image and
  --       Value attributes for the enumeration type in question.
  
! --    Low_Bound_Tested (Flag205)
  --       Defined in all entities. Currently this can only be set for formal
  --       parameter entries of a standard unconstrained one-dimensional array
  --       or string type. Indicates that an explicit test of the low bound of
--- 3510,3551 ----
  --       a subprogram type (the designated type of an Access_To_Subprogram
  --       definition) or in an entry.
  
! --    Limited_View
  --       Defined in non-generic package entities that are not instances. Bona
  --       fide package with the limited-view list through the first_entity and
  --       first_private attributes. The elements of this list are the shadow
  --       entities created for the types and local packages that are declared
  --       in a package appearing in a limited_with clause (Ada 2005: AI-50217).
  
! --    Linker_Section_Pragma
  --       Present in constant, variable, type and subprogram entities. Points
  --       to a linker section pragma that applies to the entity, or is Empty if
  --       no such pragma applies. Note that for constants and variables, this
  --       field may be set as a result of a linker section pragma applied to the
  --       type of the object.
  
! --    Lit_Hash
! --       Defined in enumeration types and subtypes. Non-empty only for the
! --       case of an enumeration root type, where it contains the entity for
! --       the generated hash function. See unit Exp_Imgv for full details of
! --       the nature and use of this entity for implementing the Value
! --       attribute for the enumeration type in question.
! 
! --    Lit_Indexes
  --       Defined in enumeration types and subtypes. Non-empty only for the
  --       case of an enumeration root type, where it contains the entity for
  --       the generated indexes entity. See unit Exp_Imgv for full details of
  --       the nature and use of this entity for implementing the Image and
  --       Value attributes for the enumeration type in question.
  
! --    Lit_Strings
  --       Defined in enumeration types and subtypes. Non-empty only for the
  --       case of an enumeration root type, where it contains the entity for
  --       the literals string entity. See unit Exp_Imgv for full details of
  --       the nature and use of this entity for implementing the Image and
  --       Value attributes for the enumeration type in question.
  
! --    Low_Bound_Tested
  --       Defined in all entities. Currently this can only be set for formal
  --       parameter entries of a standard unconstrained one-dimensional array
  --       or string type. Indicates that an explicit test of the low bound of
*************** package Einfo is
*** 3520,3533 ****
  --       flag is set, warnings about assuming the index low bound to be one
  --       are suppressed.
  
! --    Machine_Radix_10 (Flag84)
  --       Defined in decimal types and subtypes, set if the Machine_Radix is 10,
  --       as the result of the specification of a machine radix representation
  --       clause. Note that it is possible for this flag to be set without
  --       having Has_Machine_Radix_Clause True. This happens when a type is
  --       derived from a type with a clause present.
  
! --    Master_Id (Node17)
  --       Defined in access types and subtypes. Empty unless Has_Task is set for
  --       the designated type, in which case it points to the entity for the
  --       Master_Id for the access type master. Also set for access-to-limited-
--- 3553,3566 ----
  --       flag is set, warnings about assuming the index low bound to be one
  --       are suppressed.
  
! --    Machine_Radix_10
  --       Defined in decimal types and subtypes, set if the Machine_Radix is 10,
  --       as the result of the specification of a machine radix representation
  --       clause. Note that it is possible for this flag to be set without
  --       having Has_Machine_Radix_Clause True. This happens when a type is
  --       derived from a type with a clause present.
  
! --    Master_Id
  --       Defined in access types and subtypes. Empty unless Has_Task is set for
  --       the designated type, in which case it points to the entity for the
  --       Master_Id for the access type master. Also set for access-to-limited-
*************** package Einfo is
*** 3535,3547 ****
  --       for access-to-limited-interfaces because they can be used to reference
  --       tasks implementing such interface.
  
! --    Materialize_Entity (Flag168)
  --       Defined in all entities. Set only for renamed obects which should be
  --       materialized for debugging purposes. This means that a memory location
  --       containing the renamed address should be allocated. This is needed so
  --       that the debugger can find the entity.
  
! --    May_Inherit_Delayed_Rep_Aspects (Flag262)
  --       Defined in all entities for types and subtypes. Set if the type is
  --       derived from a type which has delayed rep aspects (marked by the flag
  --       Has_Delayed_Rep_Aspects being set). In this case, at the freeze point
--- 3568,3580 ----
  --       for access-to-limited-interfaces because they can be used to reference
  --       tasks implementing such interface.
  
! --    Materialize_Entity
  --       Defined in all entities. Set only for renamed obects which should be
  --       materialized for debugging purposes. This means that a memory location
  --       containing the renamed address should be allocated. This is needed so
  --       that the debugger can find the entity.
  
! --    May_Inherit_Delayed_Rep_Aspects
  --       Defined in all entities for types and subtypes. Set if the type is
  --       derived from a type which has delayed rep aspects (marked by the flag
  --       Has_Delayed_Rep_Aspects being set). In this case, at the freeze point
*************** package Einfo is
*** 3549,3562 ****
  --       a given attribute has not been set for the derived type, we copy the
  --       value from the parent type. See Freeze.Inherit_Delayed_Rep_Aspects.
  
! --    Mechanism (Uint8) (returned as Mechanism_Type)
  --       Defined in functions and non-generic formal parameters. Indicates
  --       the mechanism to be used for the function return or for the formal
  --       parameter. See full description in the spec of Sem_Mech. This field
  --       is also set (to the default value of zero = Default_Mechanism) in a
  --       subprogram body entity but not used in this context.
  
! --    Minimum_Accessibility (Node24)
  --       Defined in formal parameters in the non-generic case. Normally Empty,
  --       but if expansion is active, and a parameter exists for which a
  --       dynamic accessibility check is required, then an object is generated
--- 3582,3595 ----
  --       a given attribute has not been set for the derived type, we copy the
  --       value from the parent type. See Freeze.Inherit_Delayed_Rep_Aspects.
  
! --    Mechanism (returned as Mechanism_Type)
  --       Defined in functions and non-generic formal parameters. Indicates
  --       the mechanism to be used for the function return or for the formal
  --       parameter. See full description in the spec of Sem_Mech. This field
  --       is also set (to the default value of zero = Default_Mechanism) in a
  --       subprogram body entity but not used in this context.
  
! --    Minimum_Accessibility
  --       Defined in formal parameters in the non-generic case. Normally Empty,
  --       but if expansion is active, and a parameter exists for which a
  --       dynamic accessibility check is required, then an object is generated
*************** package Einfo is
*** 3564,3575 ****
  --       subprogram or the formal's Extra_Accessibility - whichever one is
  --       lesser. The Minimum_Accessibility field then points to this object.
  
! --    Modulus (Uint17) [base type only]
  --       Defined in modular types. Contains the modulus. For the binary case,
  --       this will be a power of 2, but if Non_Binary_Modulus is set, then it
  --       will not be a power of 2.
  
! --    Must_Be_On_Byte_Boundary (Flag183)
  --       Defined in entities for types and subtypes. Set if objects of the type
  --       must always be allocated on a byte boundary (more accurately a storage
  --       unit boundary). The front end checks that component clauses respect
--- 3597,3608 ----
  --       subprogram or the formal's Extra_Accessibility - whichever one is
  --       lesser. The Minimum_Accessibility field then points to this object.
  
! --    Modulus [base type only]
  --       Defined in modular types. Contains the modulus. For the binary case,
  --       this will be a power of 2, but if Non_Binary_Modulus is set, then it
  --       will not be a power of 2.
  
! --    Must_Be_On_Byte_Boundary
  --       Defined in entities for types and subtypes. Set if objects of the type
  --       must always be allocated on a byte boundary (more accurately a storage
  --       unit boundary). The front end checks that component clauses respect
*************** package Einfo is
*** 3577,3595 ****
  --       violate this rule. Currently the flag is set only for packed arrays
  --       longer than 64 bits where the component size is not a power of 2.
  
! --    Must_Have_Preelab_Init (Flag208)
  --       Defined in entities for types and subtypes. Set in the full type of a
  --       private type or subtype if a pragma Has_Preelaborable_Initialization
  --       is present for the private type. Used to check that the full type has
  --       preelaborable initialization at freeze time (this has to be deferred
  --       to the freeze point because of the rule about overriding Initialize).
  
! --    Needs_Activation_Record (Flag306)
  --       Defined on generated subprogram types. Indicates that a call through
  --       a named or anonymous access to subprogram requires an activation
  --       record when compiling with unnesting for C or LLVM.
  
! --    Needs_Debug_Info (Flag147)
  --       Defined in all entities. Set if the entity requires normal debugging
  --       information to be generated. This is true of all entities that have
  --       Comes_From_Source set, and also transitively for entities associated
--- 3610,3628 ----
  --       violate this rule. Currently the flag is set only for packed arrays
  --       longer than 64 bits where the component size is not a power of 2.
  
! --    Must_Have_Preelab_Init
  --       Defined in entities for types and subtypes. Set in the full type of a
  --       private type or subtype if a pragma Has_Preelaborable_Initialization
  --       is present for the private type. Used to check that the full type has
  --       preelaborable initialization at freeze time (this has to be deferred
  --       to the freeze point because of the rule about overriding Initialize).
  
! --    Needs_Activation_Record
  --       Defined on generated subprogram types. Indicates that a call through
  --       a named or anonymous access to subprogram requires an activation
  --       record when compiling with unnesting for C or LLVM.
  
! --    Needs_Debug_Info
  --       Defined in all entities. Set if the entity requires normal debugging
  --       information to be generated. This is true of all entities that have
  --       Comes_From_Source set, and also transitively for entities associated
*************** package Einfo is
*** 3600,3606 ****
  --       use Sem_Util.Set_Debug_Info_Needed, rather than Set_Needs_Debug_Info,
  --       so that the flag is set properly on subsidiary entities.
  
! --    Needs_No_Actuals (Flag22)
  --       Defined in callable entities (subprograms, entries, access to
  --       subprograms) which can be called without actuals because all of
  --       their formals (if any) have default values. This flag simplifies the
--- 3633,3639 ----
  --       use Sem_Util.Set_Debug_Info_Needed, rather than Set_Needs_Debug_Info,
  --       so that the flag is set properly on subsidiary entities.
  
! --    Needs_No_Actuals
  --       Defined in callable entities (subprograms, entries, access to
  --       subprograms) which can be called without actuals because all of
  --       their formals (if any) have default values. This flag simplifies the
*************** package Einfo is
*** 3609,3615 ****
  --       interpreted as an indexing of the result of the call. It is also
  --       used to resolve various cases of entry calls.
  
! --    Never_Set_In_Source (Flag115)
  --       Defined in all entities, but can be set only for variables and
  --       parameters. This flag is set if the object is never assigned a value
  --       in user source code, either by assignment or by being used as an out
--- 3642,3648 ----
  --       interpreted as an indexing of the result of the call. It is also
  --       used to resolve various cases of entry calls.
  
! --    Never_Set_In_Source
  --       Defined in all entities, but can be set only for variables and
  --       parameters. This flag is set if the object is never assigned a value
  --       in user source code, either by assignment or by being used as an out
*************** package Einfo is
*** 3666,3678 ****
  
  --    Next_Discriminant (synthesized)
  --       Applies to discriminants returned by First/Next_Discriminant. Returns
! --       the next language-defined (i.e. perhaps non-girder) discriminant by
  --       following the chain of declared entities as long as the kind of the
  --       entity corresponds to a discriminant. Note that the discriminants
  --       might be the only components of the record. Returns Empty if there
  --       are no more discriminants.
  
! --    Next_Entity (Node2)
  --       Defined in all entities. The entities of a scope are chained, with
  --       the head of the list being in the First_Entity field of the scope
  --       entity. All entities use the Next_Entity field as a forward pointer
--- 3699,3711 ----
  
  --    Next_Discriminant (synthesized)
  --       Applies to discriminants returned by First/Next_Discriminant. Returns
! --       the next language-defined (i.e. perhaps non-stored) discriminant by
  --       following the chain of declared entities as long as the kind of the
  --       entity corresponds to a discriminant. Note that the discriminants
  --       might be the only components of the record. Returns Empty if there
  --       are no more discriminants.
  
! --    Next_Entity
  --       Defined in all entities. The entities of a scope are chained, with
  --       the head of the list being in the First_Entity field of the scope
  --       entity. All entities use the Next_Entity field as a forward pointer
*************** package Einfo is
*** 3700,3706 ****
  --       unlike most attributes in this package, Next_Index applies to
  --       nodes for the indexes, not to entities.
  
! --    Next_Inlined_Subprogram (Node12)
  --       Defined in subprograms. Used to chain inlined subprograms used in
  --       the current compilation, in the order in which they must be compiled
  --       by the backend to ensure that all inlinings are performed.
--- 3733,3739 ----
  --       unlike most attributes in this package, Next_Index applies to
  --       nodes for the indexes, not to entities.
  
! --    Next_Inlined_Subprogram
  --       Defined in subprograms. Used to chain inlined subprograms used in
  --       the current compilation, in the order in which they must be compiled
  --       by the backend to ensure that all inlinings are performed.
*************** package Einfo is
*** 3710,3741 ****
  --       Empty if applied to the last literal. This is actually a synonym
  --       for Next, but its use is preferred in this context.
  
! --    No_Dynamic_Predicate_On_Actual (Flag276)
  --       Defined in discrete types. Set for generic formal types that are used
! --       in loops and quantified expressions. The corresponing actual cannot
  --       have dynamic predicates.
  
! --    No_Pool_Assigned (Flag131) [root type only]
  --       Defined in access types. Set if a storage size clause applies to the
  --       variable with a static expression value of zero. This flag is used to
  --       generate errors if any attempt is made to allocate or free an instance
  --       of such an access type. This is set only in the root type, since
  --       derived types must have the same pool.
  
! --    No_Predicate_On_Actual (Flag275)
  --       Defined in discrete types. Set for generic formal types that are used
  --       in the spec of a generic package, in constructs that forbid discrete
  --       types with predicates.
  
! --    No_Reordering (Flag239) [implementation base type only]
  --       Defined in record types. Set only for a base type to which a valid
  --       pragma No_Component_Reordering applies.
  
! --    No_Return (Flag113)
  --       Defined in all entities. Set for subprograms and generic subprograms
  --       to which a valid aspect or pragma No_Return applies.
  
! --    No_Strict_Aliasing (Flag136) [base type only]
  --       Defined in access types. Set to direct the backend to avoid any
  --       optimizations based on an assumption about the aliasing status of
  --       objects designated by the access type. For the case of the gcc
--- 3743,3774 ----
  --       Empty if applied to the last literal. This is actually a synonym
  --       for Next, but its use is preferred in this context.
  
! --    No_Dynamic_Predicate_On_Actual
  --       Defined in discrete types. Set for generic formal types that are used
! --       in loops and quantified expressions. The corresponding actual cannot
  --       have dynamic predicates.
  
! --    No_Pool_Assigned [root type only]
  --       Defined in access types. Set if a storage size clause applies to the
  --       variable with a static expression value of zero. This flag is used to
  --       generate errors if any attempt is made to allocate or free an instance
  --       of such an access type. This is set only in the root type, since
  --       derived types must have the same pool.
  
! --    No_Predicate_On_Actual
  --       Defined in discrete types. Set for generic formal types that are used
  --       in the spec of a generic package, in constructs that forbid discrete
  --       types with predicates.
  
! --    No_Reordering [implementation base type only]
  --       Defined in record types. Set only for a base type to which a valid
  --       pragma No_Component_Reordering applies.
  
! --    No_Return
  --       Defined in all entities. Set for subprograms and generic subprograms
  --       to which a valid aspect or pragma No_Return applies.
  
! --    No_Strict_Aliasing [base type only]
  --       Defined in access types. Set to direct the backend to avoid any
  --       optimizations based on an assumption about the aliasing status of
  --       objects designated by the access type. For the case of the gcc
*************** package Einfo is
*** 3745,3792 ****
  --       type occurs in the same source unit as the declaration of the
  --       access type, or if an explicit pragma No_Strict_Aliasing applies.
  
! --    No_Tagged_Streams_Pragma (Node32)
  --       Present in all subtype and type entities. Set for tagged types and
  --       subtypes (i.e. entities with Is_Tagged_Type set True) if a valid
  --       pragma/aspect applies to the type.
  
! --    Non_Binary_Modulus (Flag58) [base type only]
  --       Defined in all subtype and type entities. Set for modular integer
  --       types if the modulus value is other than a power of 2.
  
! --    Non_Limited_View (Node19)
  --       Defined in abstract states and incomplete types that act as shadow
  --       entities created when analysing a limited with clause (Ada 2005:
  --       AI-50217). Points to the defining entity of the original declaration.
  
! --    Nonzero_Is_True (Flag162) [base type only]
  --       Defined in enumeration types. Set if any non-zero value is to be
  --       interpreted as true. Currently this is set for derived Boolean
  --       types which have a convention of C, C++ or Fortran.
  
! --    Normalized_First_Bit (Uint8)
  --       Defined in components and discriminants. Indicates the normalized
  --       value of First_Bit for the component, i.e. the offset within the
  --       lowest addressed storage unit containing part or all of the field.
  --       Set to No_Uint if no first bit position is assigned yet.
  
! --    Normalized_Position (Uint14)
  --       Defined in components and discriminants. Indicates the normalized
  --       value of Position for the component, i.e. the offset in storage
  --       units from the start of the record to the lowest addressed storage
  --       unit containing part or all of the field.
  
- --    Normalized_Position_Max (Uint10)
- --       Defined in components and discriminants. For almost all cases, this
- --       is the same as Normalized_Position. The one exception is for the case
- --       of a discriminated record containing one or more arrays whose length
- --       depends on discriminants. In this case, the Normalized_Position_Max
- --       field represents the maximum possible value of Normalized_Position
- --       assuming min/max values for discriminant subscripts in all fields.
- --       This is used by Layout in front end layout mode to properly compute
- --       the maximum size of such records (needed for allocation purposes when
- --       there are default discriminants, and also for the 'Size value).
- 
  --    Number_Dimensions (synthesized)
  --       Applies to array types and subtypes. Returns the number of dimensions
  --       of the array type or subtype as a value of type Pos.
--- 3778,3814 ----
  --       type occurs in the same source unit as the declaration of the
  --       access type, or if an explicit pragma No_Strict_Aliasing applies.
  
! --    No_Tagged_Streams_Pragma
  --       Present in all subtype and type entities. Set for tagged types and
  --       subtypes (i.e. entities with Is_Tagged_Type set True) if a valid
  --       pragma/aspect applies to the type.
  
! --    Non_Binary_Modulus [base type only]
  --       Defined in all subtype and type entities. Set for modular integer
  --       types if the modulus value is other than a power of 2.
  
! --    Non_Limited_View
  --       Defined in abstract states and incomplete types that act as shadow
  --       entities created when analysing a limited with clause (Ada 2005:
  --       AI-50217). Points to the defining entity of the original declaration.
  
! --    Nonzero_Is_True [base type only]
  --       Defined in enumeration types. Set if any non-zero value is to be
  --       interpreted as true. Currently this is set for derived Boolean
  --       types which have a convention of C, C++ or Fortran.
  
! --    Normalized_First_Bit
  --       Defined in components and discriminants. Indicates the normalized
  --       value of First_Bit for the component, i.e. the offset within the
  --       lowest addressed storage unit containing part or all of the field.
  --       Set to No_Uint if no first bit position is assigned yet.
  
! --    Normalized_Position
  --       Defined in components and discriminants. Indicates the normalized
  --       value of Position for the component, i.e. the offset in storage
  --       units from the start of the record to the lowest addressed storage
  --       unit containing part or all of the field.
  
  --    Number_Dimensions (synthesized)
  --       Applies to array types and subtypes. Returns the number of dimensions
  --       of the array type or subtype as a value of type Pos.
*************** package Einfo is
*** 3808,3814 ****
  --       representation item chain is copied for a derived type, it can inherit
  --       an object size clause that is not applicable to the entity.
  
! --    OK_To_Rename (Flag247)
  --       Defined only in entities for variables. If this flag is set, it
  --       means that if the entity is used as the initial value of an object
  --       declaration, the object declaration can be safely converted into a
--- 3830,3836 ----
  --       representation item chain is copied for a derived type, it can inherit
  --       an object size clause that is not applicable to the entity.
  
! --    OK_To_Rename
  --       Defined only in entities for variables. If this flag is set, it
  --       means that if the entity is used as the initial value of an object
  --       declaration, the object declaration can be safely converted into a
*************** package Einfo is
*** 3819,3825 ****
  --       is only worth setting this flag for composites, since for primitive
  --       types, it is cheaper to do the copy.
  
! --    Optimize_Alignment_Space (Flag241)
  --       Defined in type, subtype, variable, and constant entities. This
  --       flag records that the type or object is to be laid out in a manner
  --       consistent with Optimize_Alignment (Space) mode. The compiler and
--- 3841,3847 ----
  --       is only worth setting this flag for composites, since for primitive
  --       types, it is cheaper to do the copy.
  
! --    Optimize_Alignment_Space
  --       Defined in type, subtype, variable, and constant entities. This
  --       flag records that the type or object is to be laid out in a manner
  --       consistent with Optimize_Alignment (Space) mode. The compiler and
*************** package Einfo is
*** 3827,3833 ****
  --       Optimize_Alignment (Off) mode applies to the type/object, then neither
  --       of the flags Optimize_Alignment_Space/Optimize_Alignment_Time is set.
  
! --    Optimize_Alignment_Time (Flag242)
  --       Defined in type, subtype, variable, and constant entities. This
  --       flag records that the type or object is to be laid out in a manner
  --       consistent with Optimize_Alignment (Time) mode. The compiler and
--- 3849,3855 ----
  --       Optimize_Alignment (Off) mode applies to the type/object, then neither
  --       of the flags Optimize_Alignment_Space/Optimize_Alignment_Time is set.
  
! --    Optimize_Alignment_Time
  --       Defined in type, subtype, variable, and constant entities. This
  --       flag records that the type or object is to be laid out in a manner
  --       consistent with Optimize_Alignment (Time) mode. The compiler and
*************** package Einfo is
*** 3835,3859 ****
  --       Optimize_Alignment (Off) mode applies to the type/object, then neither
  --       of the flags Optimize_Alignment_Space/Optimize_Alignment_Time is set.
  
! --    Original_Access_Type (Node28)
  --       Defined in E_Access_Subprogram_Type entities. Set only if the access
  --       type was generated by the expander as part of processing an access-
  --       to-protected-subprogram type. Points to the access-to-protected-
  --       subprogram type.
  
! --    Original_Array_Type (Node21)
  --       Defined in modular types and array types and subtypes. Set only if
  --       the Is_Packed_Array_Impl_Type flag is set, indicating that the type
  --       is the implementation type for a packed array, and in this case it
  --       points to the original array type for which this is the packed
  --       array implementation type.
  
! --    Original_Protected_Subprogram (Node41)
  --       Defined in functions and procedures. Set only on internally built
  --       dispatching subprograms of protected types to reference their original
  --       non-dispatching protected subprogram since their names differ.
  
! --    Original_Record_Component (Node22)
  --       Defined in components, including discriminants. The usage depends
  --       on whether the record is a base type and whether it is tagged.
  --
--- 3857,3881 ----
  --       Optimize_Alignment (Off) mode applies to the type/object, then neither
  --       of the flags Optimize_Alignment_Space/Optimize_Alignment_Time is set.
  
! --    Original_Access_Type
  --       Defined in E_Access_Subprogram_Type entities. Set only if the access
  --       type was generated by the expander as part of processing an access-
  --       to-protected-subprogram type. Points to the access-to-protected-
  --       subprogram type.
  
! --    Original_Array_Type
  --       Defined in modular types and array types and subtypes. Set only if
  --       the Is_Packed_Array_Impl_Type flag is set, indicating that the type
  --       is the implementation type for a packed array, and in this case it
  --       points to the original array type for which this is the packed
  --       array implementation type.
  
! --    Original_Protected_Subprogram
  --       Defined in functions and procedures. Set only on internally built
  --       dispatching subprograms of protected types to reference their original
  --       non-dispatching protected subprogram since their names differ.
  
! --    Original_Record_Component
  --       Defined in components, including discriminants. The usage depends
  --       on whether the record is a base type and whether it is tagged.
  --
*************** package Einfo is
*** 3867,3884 ****
  --            Rec_Ext.Comp -> Rec_Ext.Parent. ... .Parent.Comp
  --
  --       In base untagged types:
! --         Always points to itself except for non-girder discriminants, where
! --         it points to the girder discriminant it renames.
  --
  --       In subtypes (tagged and untagged):
  --         Points to the component in the base type.
  
! --    Overlays_Constant (Flag243)
  --       Defined in all entities. Set only for E_Constant or E_Variable for
  --       which there is an address clause that causes the entity to overlay
  --       a constant object.
  
! --    Overridden_Operation (Node26)
  --       Defined in subprograms. For overriding operations, points to the
  --       user-defined parent subprogram that is being overridden. Note: this
  --       attribute uses the same field as Static_Initialization. The latter
--- 3889,3906 ----
  --            Rec_Ext.Comp -> Rec_Ext.Parent. ... .Parent.Comp
  --
  --       In base untagged types:
! --         Always points to itself except for non-stored discriminants, where
! --         it points to the stored discriminant it renames.
  --
  --       In subtypes (tagged and untagged):
  --         Points to the component in the base type.
  
! --    Overlays_Constant
  --       Defined in all entities. Set only for E_Constant or E_Variable for
  --       which there is an address clause that causes the entity to overlay
  --       a constant object.
  
! --    Overridden_Operation
  --       Defined in subprograms. For overriding operations, points to the
  --       user-defined parent subprogram that is being overridden. Note: this
  --       attribute uses the same field as Static_Initialization. The latter
*************** package Einfo is
*** 3886,3892 ****
  --       Overridden_Operation is irrelevant. Thus this attribute must not be
  --       set for init_procs.
  
! --    Package_Instantiation (Node26)
  --       Defined in packages and generic packages. When defined, this field
  --       references an N_Generic_Instantiation node associated with an
  --       instantiated package. In the case where the referenced node has
--- 3908,3914 ----
  --       Overridden_Operation is irrelevant. Thus this attribute must not be
  --       set for init_procs.
  
! --    Package_Instantiation
  --       Defined in packages and generic packages. When defined, this field
  --       references an N_Generic_Instantiation node associated with an
  --       instantiated package. In the case where the referenced node has
*************** package Einfo is
*** 3898,3904 ****
  --       it should be set in all cases, including package entities associated
  --       with formal packages. ???
  
! --    Packed_Array_Impl_Type (Node23)
  --       Defined in array types and subtypes, except for the string literal
  --       subtype case, if the corresponding type is packed and implemented
  --       specially (either bit-packed or packed to eliminate holes in the
--- 3920,3926 ----
  --       it should be set in all cases, including package entities associated
  --       with formal packages. ???
  
! --    Packed_Array_Impl_Type
  --       Defined in array types and subtypes, except for the string literal
  --       subtype case, if the corresponding type is packed and implemented
  --       specially (either bit-packed or packed to eliminate holes in the
*************** package Einfo is
*** 3916,3932 ****
  --       used when obtaining the formal kind of a formal parameter (the result
  --       is one of E_[In/Out/In_Out]_Parameter).
  
! --    Parent_Subtype (Node19) [base type only]
  --       Defined in E_Record_Type. Set only for derived tagged types, in which
  --       case it points to the subtype of the parent type. This is the type
  --       that is used as the Etype of the _parent field.
  
! --    Part_Of_Constituents (Elist10)
  --       Present in abstract state and variable entities. Contains all
  --       constituents that are subject to indicator Part_Of (both aspect and
  --       option variants).
  
! --    Part_Of_References (Elist11)
  --       Present in variable entities. Contains all references to the variable
  --       when it is subject to pragma Part_Of. If the variable is a constituent
  --       of a single protected/task type, the references are examined as they
--- 3938,3954 ----
  --       used when obtaining the formal kind of a formal parameter (the result
  --       is one of E_[In/Out/In_Out]_Parameter).
  
! --    Parent_Subtype [base type only]
  --       Defined in E_Record_Type. Set only for derived tagged types, in which
  --       case it points to the subtype of the parent type. This is the type
  --       that is used as the Etype of the _parent field.
  
! --    Part_Of_Constituents
  --       Present in abstract state and variable entities. Contains all
  --       constituents that are subject to indicator Part_Of (both aspect and
  --       option variants).
  
! --    Part_Of_References
  --       Present in variable entities. Contains all references to the variable
  --       when it is subject to pragma Part_Of. If the variable is a constituent
  --       of a single protected/task type, the references are examined as they
*************** package Einfo is
*** 3965,3976 ****
  --       abstract states with no or only partial refinement visible, and those
  --       that are not themselves abstract states.
  
! --    Partial_View_Has_Unknown_Discr (Flag280)
  --       Present in all types. Set to Indicate that the partial view of a type
  --       has unknown discriminants. A default initialization of an object of
  --       the type does not require an invariant check (AI12-0133).
  
! --    Pending_Access_Types (Elist15)
  --       Defined in all types. Set for incomplete, private, Taft-amendment
  --       types, and their corresponding full views. This list contains all
  --       access types, both named and anonymous, declared between the partial
--- 3987,3998 ----
  --       abstract states with no or only partial refinement visible, and those
  --       that are not themselves abstract states.
  
! --    Partial_View_Has_Unknown_Discr
  --       Present in all types. Set to Indicate that the partial view of a type
  --       has unknown discriminants. A default initialization of an object of
  --       the type does not require an invariant check (AI12-0133).
  
! --    Pending_Access_Types
  --       Defined in all types. Set for incomplete, private, Taft-amendment
  --       types, and their corresponding full views. This list contains all
  --       access types, both named and anonymous, declared between the partial
*************** package Einfo is
*** 3978,3984 ****
  --       ensure that the finalization masters of all pending access types are
  --       fully initialized when the full view is frozen.
  
! --    Postconditions_Proc (Node14)
  --       Defined in functions, procedures, entries, and entry families. Refers
  --       to the entity of the _Postconditions procedure used to check contract
  --       assertions on exit from a subprogram.
--- 4000,4006 ----
  --       ensure that the finalization masters of all pending access types are
  --       fully initialized when the full view is frozen.
  
! --    Postconditions_Proc
  --       Defined in functions, procedures, entries, and entry families. Refers
  --       to the entity of the _Postconditions procedure used to check contract
  --       assertions on exit from a subprogram.
*************** package Einfo is
*** 4007,4013 ****
  --       is the special version created for membership tests, where if one of
  --       these raise expressions is executed, the result is to return False.
  
! --    Predicated_Parent (Node38)
  --       Defined on itypes created by subtype indications, when the parent
  --       subtype has predicates. The itype shares the Predicate_Function
  --       of the predicated parent, but this function may not have been built
--- 4029,4035 ----
  --       is the special version created for membership tests, where if one of
  --       these raise expressions is executed, the result is to return False.
  
! --    Predicated_Parent
  --       Defined on itypes created by subtype indications, when the parent
  --       subtype has predicates. The itype shares the Predicate_Function
  --       of the predicated parent, but this function may not have been built
*************** package Einfo is
*** 4015,4026 ****
  --       retrieval at the point a predicate check needs to be generated.
  --       The utility Predicate_Function takes this link into account.
  
! --    Predicates_Ignored (Flag288)
  --       Defined on all types. Indicates whether the subtype declaration is in
  --       a context where Assertion_Policy is Ignore, in which case no checks
  --       (static or dynamic) must be generated for objects of the type.
  
! --    Prev_Entity (Node36)
  --       Defined in all entities. The entities of a scope are chained, and this
  --       field is used as a backward pointer for this entity list - effectivly
  --       making the entity chain doubly-linked.
--- 4037,4048 ----
  --       retrieval at the point a predicate check needs to be generated.
  --       The utility Predicate_Function takes this link into account.
  
! --    Predicates_Ignored
  --       Defined on all types. Indicates whether the subtype declaration is in
  --       a context where Assertion_Policy is Ignore, in which case no checks
  --       (static or dynamic) must be generated for objects of the type.
  
! --    Prev_Entity
  --       Defined in all entities. The entities of a scope are chained, and this
  --       field is used as a backward pointer for this entity list - effectivly
  --       making the entity chain doubly-linked.
*************** package Einfo is
*** 4032,4047 ****
  --       Direct_Primitive_Operations of its CRT; otherwise returns No_Elist.
  --       For all the other types returns the Direct_Primitive_Operations.
  
! --    Prival (Node17)
  --       Defined in private components of protected types. Refers to the entity
  --       of the component renaming declaration generated inside protected
  --       subprograms, entries or barrier functions.
  
! --    Prival_Link (Node20)
  --       Defined in constants and variables which rename private components of
  --       protected types. Set to the original private component.
  
! --    Private_Dependents (Elist18)
  --       Defined in private (sub)types. Records the subtypes of the private
  --       type, derivations from it, and records and arrays with components
  --       dependent on the type.
--- 4054,4069 ----
  --       Direct_Primitive_Operations of its CRT; otherwise returns No_Elist.
  --       For all the other types returns the Direct_Primitive_Operations.
  
! --    Prival
  --       Defined in private components of protected types. Refers to the entity
  --       of the component renaming declaration generated inside protected
  --       subprograms, entries or barrier functions.
  
! --    Prival_Link
  --       Defined in constants and variables which rename private components of
  --       protected types. Set to the original private component.
  
! --    Private_Dependents
  --       Defined in private (sub)types. Records the subtypes of the private
  --       type, derivations from it, and records and arrays with components
  --       dependent on the type.
*************** package Einfo is
*** 4061,4122 ****
  --       declaration of the type is seen. Subprograms that have such an
  --       access parameter are also placed in the list of private_dependents.
  
! --    Protected_Body_Subprogram (Node11)
  --       Defined in protected operations. References the entity for the
  --       subprogram which implements the body of the operation.
  
! --    Protected_Formal (Node22)
  --       Defined in formal parameters (in, in out and out parameters). Used
  --       only for formals of protected operations. References corresponding
  --       formal parameter in the unprotected version of the operation that
  --       is created during expansion.
  
! --    Protected_Subprogram (Node39)
  --       Defined in functions and procedures. Set for the pair of subprograms
  --       which emulate the runtime semantics of a protected subprogram. Denotes
  --       the entity of the origial protected subprogram.
  
! --    Protection_Object (Node23)
  --       Applies to protected entries, entry families and subprograms. Denotes
  --       the entity which is used to rename the _object component of protected
  --       types.
  
! --    Reachable (Flag49)
  --       Defined in labels. The flag is set over the range of statements in
  --       which a goto to that label is legal.
  
! --    Receiving_Entry (Node19)
  --       Defined in procedures. Set for an internally generated procedure which
  --       wraps the original statements of an accept alternative. Designates the
  --       entity of the task entry being accepted.
  
! --    Referenced (Flag156)
  --       Defined in all entities. Set if the entity is referenced, except for
  --       the case of an appearance of a simple variable that is not a renaming
  --       as the left side of an assignment in which case Referenced_As_LHS is
  --       set instead, or a similar appearance as an out parameter actual, in
  --       which case Referenced_As_Out_Parameter is set.
  
! --    Referenced_As_LHS (Flag36):
  --       Defined in all entities. This flag is set instead of Referenced if a
  --       simple variable that is not a renaming appears as the left side of an
  --       assignment. The reason we distinguish this kind of reference is that
  --       we have a separate warning for variables that are only assigned and
  --       never read.
  
! --    Referenced_As_Out_Parameter (Flag227):
  --       Defined in all entities. This flag is set instead of Referenced if a
  --       simple variable that is not a renaming appears as an actual for an out
  --       formal. The reason we distinguish this kind of reference is that
  --       we have a separate warning for variables that are only assigned and
  --       never read, and out parameters are a special case.
  
! --    Refinement_Constituents (Elist8)
  --       Present in abstract state entities. Contains all the constituents that
  --       refine the state, in other words, all the hidden states that appear in
  --       the constituent_list of aspect/pragma Refined_State.
  
! --    Register_Exception_Call (Node20)
  --       Defined in exception entities. When an exception is declared,
  --       a call is expanded to Register_Exception. This field points to
  --       the expanded N_Procedure_Call_Statement node for this call. It
--- 4083,4144 ----
  --       declaration of the type is seen. Subprograms that have such an
  --       access parameter are also placed in the list of private_dependents.
  
! --    Protected_Body_Subprogram
  --       Defined in protected operations. References the entity for the
  --       subprogram which implements the body of the operation.
  
! --    Protected_Formal
  --       Defined in formal parameters (in, in out and out parameters). Used
  --       only for formals of protected operations. References corresponding
  --       formal parameter in the unprotected version of the operation that
  --       is created during expansion.
  
! --    Protected_Subprogram
  --       Defined in functions and procedures. Set for the pair of subprograms
  --       which emulate the runtime semantics of a protected subprogram. Denotes
  --       the entity of the origial protected subprogram.
  
! --    Protection_Object
  --       Applies to protected entries, entry families and subprograms. Denotes
  --       the entity which is used to rename the _object component of protected
  --       types.
  
! --    Reachable
  --       Defined in labels. The flag is set over the range of statements in
  --       which a goto to that label is legal.
  
! --    Receiving_Entry
  --       Defined in procedures. Set for an internally generated procedure which
  --       wraps the original statements of an accept alternative. Designates the
  --       entity of the task entry being accepted.
  
! --    Referenced
  --       Defined in all entities. Set if the entity is referenced, except for
  --       the case of an appearance of a simple variable that is not a renaming
  --       as the left side of an assignment in which case Referenced_As_LHS is
  --       set instead, or a similar appearance as an out parameter actual, in
  --       which case Referenced_As_Out_Parameter is set.
  
! --    Referenced_As_LHS :
  --       Defined in all entities. This flag is set instead of Referenced if a
  --       simple variable that is not a renaming appears as the left side of an
  --       assignment. The reason we distinguish this kind of reference is that
  --       we have a separate warning for variables that are only assigned and
  --       never read.
  
! --    Referenced_As_Out_Parameter :
  --       Defined in all entities. This flag is set instead of Referenced if a
  --       simple variable that is not a renaming appears as an actual for an out
  --       formal. The reason we distinguish this kind of reference is that
  --       we have a separate warning for variables that are only assigned and
  --       never read, and out parameters are a special case.
  
! --    Refinement_Constituents
  --       Present in abstract state entities. Contains all the constituents that
  --       refine the state, in other words, all the hidden states that appear in
  --       the constituent_list of aspect/pragma Refined_State.
  
! --    Register_Exception_Call
  --       Defined in exception entities. When an exception is declared,
  --       a call is expanded to Register_Exception. This field points to
  --       the expanded N_Procedure_Call_Statement node for this call. It
*************** package Einfo is
*** 4124,4136 ****
  --       register call to make appropriate entries in the special tables
  --       used for handling these pragmas at run time.
  
! --    Related_Array_Object (Node25)
  --       Defined in array types and subtypes. Used only for the base type
  --       and subtype created for an anonymous array object. Set to point
  --       to the entity of the corresponding array object. Currently used
  --       only for type-related error messages.
  
! --    Related_Expression (Node24)
  --       Defined in variables, types and functions. When Set for internally
  --       generated entities, it may be used to denote the source expression
  --       whose elaboration created the variable declaration. If set, it is used
--- 4146,4158 ----
  --       register call to make appropriate entries in the special tables
  --       used for handling these pragmas at run time.
  
! --    Related_Array_Object
  --       Defined in array types and subtypes. Used only for the base type
  --       and subtype created for an anonymous array object. Set to point
  --       to the entity of the corresponding array object. Currently used
  --       only for type-related error messages.
  
! --    Related_Expression
  --       Defined in variables, types and functions. When Set for internally
  --       generated entities, it may be used to denote the source expression
  --       whose elaboration created the variable declaration. If set, it is used
*************** package Einfo is
*** 4145,4181 ****
  --       Shouldn't it also be used for the same purpose in errout? It seems
  --       odd to have two mechanisms here???
  
! --    Related_Instance (Node15)
  --       Defined in the wrapper packages created for subprogram instances.
  --       The internal subprogram that implements the instance is inside the
  --       wrapper package, but for debugging purposes its external symbol
  --       must correspond to the name and scope of the related instance.
  
! --    Related_Type (Node27)
  --       Defined in components, constants and variables. Set when there is an
  --       associated dispatch table to point to entities containing primary or
  --       secondary tags. Not set in the _tag component of record types.
  
! --    Relative_Deadline_Variable (Node28) [implementation base type only]
  --       Defined in task type entities. This flag is set if a valid and
  --       effective pragma Relative_Deadline applies to the base type. Points
  --       to the entity for a variable that is created to hold the value given
  --       in a Relative_Deadline pragma for a task type.
  
! --    Renamed_Entity (Node18)
  --       Defined in exception, generic unit, package, and subprogram entities.
  --       Set when the entity is defined by a renaming declaration. Denotes the
  --       renamed entity, or transitively the ultimate renamed entity if there
  --       is a chain of renaming declarations. Empty if no renaming.
  
! --    Renamed_In_Spec (Flag231)
  --       Defined in package entities. If a package renaming occurs within
  --       a package spec, then this flag is set on the renamed package. The
  --       purpose is to prevent a warning about unused entities in the renamed
  --       package. Such a warning would be inappropriate since clients of the
  --       package can see the entities in the package via the renaming.
  
! --    Renamed_Object (Node18)
  --       Defined in components, constants, discriminants, formal parameters,
  --       generic formals, loop parameters, and variables. Set to non-Empty if
  --       the object was declared by a renaming declaration. For constants and
--- 4167,4203 ----
  --       Shouldn't it also be used for the same purpose in errout? It seems
  --       odd to have two mechanisms here???
  
! --    Related_Instance
  --       Defined in the wrapper packages created for subprogram instances.
  --       The internal subprogram that implements the instance is inside the
  --       wrapper package, but for debugging purposes its external symbol
  --       must correspond to the name and scope of the related instance.
  
! --    Related_Type
  --       Defined in components, constants and variables. Set when there is an
  --       associated dispatch table to point to entities containing primary or
  --       secondary tags. Not set in the _tag component of record types.
  
! --    Relative_Deadline_Variable [implementation base type only]
  --       Defined in task type entities. This flag is set if a valid and
  --       effective pragma Relative_Deadline applies to the base type. Points
  --       to the entity for a variable that is created to hold the value given
  --       in a Relative_Deadline pragma for a task type.
  
! --    Renamed_Entity
  --       Defined in exception, generic unit, package, and subprogram entities.
  --       Set when the entity is defined by a renaming declaration. Denotes the
  --       renamed entity, or transitively the ultimate renamed entity if there
  --       is a chain of renaming declarations. Empty if no renaming.
  
! --    Renamed_In_Spec
  --       Defined in package entities. If a package renaming occurs within
  --       a package spec, then this flag is set on the renamed package. The
  --       purpose is to prevent a warning about unused entities in the renamed
  --       package. Such a warning would be inappropriate since clients of the
  --       package can see the entities in the package via the renaming.
  
! --    Renamed_Object
  --       Defined in components, constants, discriminants, formal parameters,
  --       generic formals, loop parameters, and variables. Set to non-Empty if
  --       the object was declared by a renaming declaration. For constants and
*************** package Einfo is
*** 4187,4208 ****
  --       within an accept statement. For all remaining cases (discriminants,
  --       loop parameters) the field is Empty.
  
! --    Renaming_Map (Uint9)
! --       Defined in generic subprograms, generic packages, and their
! --       instances. Also defined in the instances of the corresponding
! --       bodies. Denotes the renaming map (generic entities => instance
! --       entities) used to construct the instance by giving an index into
! --       the tables used to represent these maps. See Sem_Ch12 for further
! --       details. The maps for package instances are also used when the
! --       instance is the actual corresponding to a formal package.
! 
! --    Requires_Overriding (Flag213)
  --       Defined in all subprograms and entries. Set for subprograms that
  --       require overriding as defined by RM-2005-3.9.3(6/2). Note that this
  --       is True only for implicitly declared subprograms; it is not set on the
  --       parent type's subprogram. See also Is_Abstract_Subprogram.
  
! --    Return_Applies_To (Node8)
  --       Defined in E_Return_Statement. Points to the entity representing
  --       the construct to which the return statement applies, as defined in
  --       RM-6.5(4/2). Note that a (simple) return statement within an
--- 4209,4221 ----
  --       within an accept statement. For all remaining cases (discriminants,
  --       loop parameters) the field is Empty.
  
! --    Requires_Overriding
  --       Defined in all subprograms and entries. Set for subprograms that
  --       require overriding as defined by RM-2005-3.9.3(6/2). Note that this
  --       is True only for implicitly declared subprograms; it is not set on the
  --       parent type's subprogram. See also Is_Abstract_Subprogram.
  
! --    Return_Applies_To
  --       Defined in E_Return_Statement. Points to the entity representing
  --       the construct to which the return statement applies, as defined in
  --       RM-6.5(4/2). Note that a (simple) return statement within an
*************** package Einfo is
*** 4213,4232 ****
  --       by Expand_N_Extended_Return_Statement before being turned into an
  --       E_Block by semantic analysis.
  
! --    Return_Present (Flag54)
  --       Defined in function and generic function entities. Set if the
  --       function contains a return statement (used for error checking).
  --       This flag can also be set in procedure and generic procedure
  --       entities (for convenience in setting it), but is only tested
  --       for the function case.
  
! --    Returns_By_Ref (Flag90)
  --       Defined in subprogram type entities and functions. Set if a function
  --       (or an access-to-function type) returns a result by reference, either
  --       because its return type is a by-reference-type or because the function
  --       explicitly uses the secondary stack.
  
! --    Reverse_Bit_Order (Flag164) [base type only]
  --       Defined in all record type entities. Set if entity has a Bit_Order
  --       aspect (set by an aspect clause or attribute definition clause) that
  --       has reversed the order of bits from the default value. When this flag
--- 4226,4250 ----
  --       by Expand_N_Extended_Return_Statement before being turned into an
  --       E_Block by semantic analysis.
  
! --    Return_Present
  --       Defined in function and generic function entities. Set if the
  --       function contains a return statement (used for error checking).
  --       This flag can also be set in procedure and generic procedure
  --       entities (for convenience in setting it), but is only tested
  --       for the function case.
  
! --    Return_Statement
! --       Defined in E_Variable. Set when Is_Return_Object is set, in which
! --       case it points to the N_Simple_Return_Statement made from the
! --       extended return statement.
! 
! --    Returns_By_Ref
  --       Defined in subprogram type entities and functions. Set if a function
  --       (or an access-to-function type) returns a result by reference, either
  --       because its return type is a by-reference-type or because the function
  --       explicitly uses the secondary stack.
  
! --    Reverse_Bit_Order [base type only]
  --       Defined in all record type entities. Set if entity has a Bit_Order
  --       aspect (set by an aspect clause or attribute definition clause) that
  --       has reversed the order of bits from the default value. When this flag
*************** package Einfo is
*** 4234,4240 ****
  --       a single storage unit (Ada 95) or within a single machine scalar (see
  --       Ada 2005 AI-133), or must occupy an integral number of storage units.
  
! --    Reverse_Storage_Order (Flag93) [base type only]
  --       Defined in all record and array type entities. Set if entity has a
  --       Scalar_Storage_Order aspect (set by an aspect clause or attribute
  --       definition clause) that has reversed the order of storage elements
--- 4252,4258 ----
  --       a single storage unit (Ada 95) or within a single machine scalar (see
  --       Ada 2005 AI-133), or must occupy an integral number of storage units.
  
! --    Reverse_Storage_Order [base type only]
  --       Defined in all record and array type entities. Set if entity has a
  --       Scalar_Storage_Order aspect (set by an aspect clause or attribute
  --       definition clause) that has reversed the order of storage elements
*************** package Einfo is
*** 4242,4254 ****
  --       the Bit_Order aspect must be set to the same value (either explicitly
  --       or as the target default value).
  
! --    Rewritten_For_C (Flag287)
  --       Defined on functions that return a constrained array type, when
  --       Modify_Tree_For_C is set. Indicates that a procedure with an extra
  --       out parameter has been created for it, and calls must be rewritten as
  --       calls to the new procedure.
  
! --    RM_Size (Uint13)
  --       Defined in all type and subtype entities. Contains the value of
  --       type'Size as defined in the RM. See also the Esize field and
  --       and the description on "Handling of Type'Size Values". A value
--- 4260,4272 ----
  --       the Bit_Order aspect must be set to the same value (either explicitly
  --       or as the target default value).
  
! --    Rewritten_For_C
  --       Defined on functions that return a constrained array type, when
  --       Modify_Tree_For_C is set. Indicates that a procedure with an extra
  --       out parameter has been created for it, and calls must be rewritten as
  --       calls to the new procedure.
  
! --    RM_Size
  --       Defined in all type and subtype entities. Contains the value of
  --       type'Size as defined in the RM. See also the Esize field and
  --       and the description on "Handling of Type'Size Values". A value
*************** package Einfo is
*** 4267,4273 ****
  --       does not correspond exactly to the use of root type in the RM, since
  --       in the RM root type applies to a class of types, not to a type.
  
! --    Scalar_Range (Node20)
  --       Defined in all scalar types (including modular types, where the
  --       bounds are 0 .. modulus - 1). References a node in the tree that
  --       contains the bounds for the range. Note that this information
--- 4285,4291 ----
  --       does not correspond exactly to the use of root type in the RM, since
  --       in the RM root type applies to a class of types, not to a type.
  
! --    Scalar_Range
  --       Defined in all scalar types (including modular types, where the
  --       bounds are 0 .. modulus - 1). References a node in the tree that
  --       contains the bounds for the range. Note that this information
*************** package Einfo is
*** 4278,4290 ****
  --       but not a simple subtype reference (a subtype is converted into a
  --       explicit range).
  
! --    Scale_Value (Uint16)
  --       Defined in decimal fixed-point types and subtypes. This holds the
  --       value of the Scale attribute for the type, i.e. the scale of the type
  --       defined as the integer N such that the delta is equal to 10.0**(-N).
  --       Note that, if Scale_Value is positive, then it is equal to Aft_Value.
  
! --    Scope (Node3)
  --       Defined in all entities. Points to the entity for the scope (block,
  --       loop, subprogram, package etc.) in which the entity is declared.
  --       Since this field is in the base part of the entity node, the access
--- 4296,4308 ----
  --       but not a simple subtype reference (a subtype is converted into a
  --       explicit range).
  
! --    Scale_Value
  --       Defined in decimal fixed-point types and subtypes. This holds the
  --       value of the Scale attribute for the type, i.e. the scale of the type
  --       defined as the integer N such that the delta is equal to 10.0**(-N).
  --       Note that, if Scale_Value is positive, then it is equal to Aft_Value.
  
! --    Scope
  --       Defined in all entities. Points to the entity for the scope (block,
  --       loop, subprogram, package etc.) in which the entity is declared.
  --       Since this field is in the base part of the entity node, the access
*************** package Einfo is
*** 4300,4350 ****
  --       simply the scope depth value, for record entities, it is the
  --       Scope_Depth of the record scope.
  
! --    Scope_Depth_Value (Uint22)
  --       Defined in program units, blocks, loops, return statements,
  --       concurrent types, private types and entries.
  --       Indicates the number of scopes that statically enclose the declaration
  --       of the unit or type. Library units have a depth of zero. Note that
  --       record types can act as scopes but do NOT have this field set (see
! --       Scope_Depth above).
  
  --    Scope_Depth_Set (synthesized)
  --       Applies to a special predicate function that returns a Boolean value
  --       indicating whether or not the Scope_Depth field has been set. It is
  --       needed, since returns an invalid value in this case.
  
! --    Sec_Stack_Needed_For_Return (Flag167)
  --       Defined in scope entities (blocks, entries, entry families, functions,
  --       and procedures). Set to True when secondary stack is used to hold the
  --       returned value of a function and thus should not be released on scope
  --       exit.
  
! --    Shared_Var_Procs_Instance (Node22)
  --       Defined in variables. Set non-Empty only if Is_Shared_Passive is
  --       set, in which case this is the entity for the associated instance of
  --       System.Shared_Storage.Shared_Var_Procs. See Exp_Smem for full details.
  
! --    Size_Check_Code (Node19)
  --       Defined in constants and variables. Normally Empty. Set if code is
  --       generated to check the size of the object. This field is used to
  --       suppress this code if a subsequent address clause is encountered.
  
  --    Size_Clause (synthesized)
! --       Applies to all entities. If a size clause is present in the rep
! --       item chain for an entity then the attribute definition clause node
! --       for the size clause is returned. Otherwise Size_Clause returns Empty
! --       if no item is present. Usually this is only meaningful if the flag
! --       Has_Size_Clause is set. This is because when the representation item
! --       chain is copied for a derived type, it can inherit a size clause that
! --       is not applicable to the entity.
  
! --    Size_Depends_On_Discriminant (Flag177)
  --       Defined in all entities for types and subtypes. Indicates that the
  --       size of the type depends on the value of one or more discriminants.
  --       Currently, this flag is only set for arrays which have one or more
  --       bounds depending on a discriminant value.
  
! --    Size_Known_At_Compile_Time (Flag92)
  --       Defined in all entities for types and subtypes. Indicates that the
  --       size of objects of the type is known at compile time. This flag is
  --       used to optimize some generated code sequences, and also to enable
--- 4318,4368 ----
  --       simply the scope depth value, for record entities, it is the
  --       Scope_Depth of the record scope.
  
! --    Scope_Depth_Value
  --       Defined in program units, blocks, loops, return statements,
  --       concurrent types, private types and entries.
  --       Indicates the number of scopes that statically enclose the declaration
  --       of the unit or type. Library units have a depth of zero. Note that
  --       record types can act as scopes but do NOT have this field set (see
! --       Scope_Depth above). Queries should normally be via Scope_Depth,
! --       and not call Scope_Depth_Value directly.
  
  --    Scope_Depth_Set (synthesized)
  --       Applies to a special predicate function that returns a Boolean value
  --       indicating whether or not the Scope_Depth field has been set. It is
  --       needed, since returns an invalid value in this case.
  
! --    Sec_Stack_Needed_For_Return
  --       Defined in scope entities (blocks, entries, entry families, functions,
  --       and procedures). Set to True when secondary stack is used to hold the
  --       returned value of a function and thus should not be released on scope
  --       exit.
  
! --    Shared_Var_Procs_Instance
  --       Defined in variables. Set non-Empty only if Is_Shared_Passive is
  --       set, in which case this is the entity for the associated instance of
  --       System.Shared_Storage.Shared_Var_Procs. See Exp_Smem for full details.
  
! --    Size_Check_Code
  --       Defined in constants and variables. Normally Empty. Set if code is
  --       generated to check the size of the object. This field is used to
  --       suppress this code if a subsequent address clause is encountered.
  
  --    Size_Clause (synthesized)
! --       Applies to all entities. If a size or value size clause is present in
! --       the rep item chain for an entity then that attribute definition clause
! --       is returned. Otherwise Size_Clause returns Empty. Usually this is only
! --       meaningful if the flag Has_Size_Clause is set. This is because when
! --       the representation item chain is copied for a derived type, it can
! --       inherit a size clause that is not applicable to the entity.
  
! --    Size_Depends_On_Discriminant
  --       Defined in all entities for types and subtypes. Indicates that the
  --       size of the type depends on the value of one or more discriminants.
  --       Currently, this flag is only set for arrays which have one or more
  --       bounds depending on a discriminant value.
  
! --    Size_Known_At_Compile_Time
  --       Defined in all entities for types and subtypes. Indicates that the
  --       size of objects of the type is known at compile time. This flag is
  --       used to optimize some generated code sequences, and also to enable
*************** package Einfo is
*** 4356,4367 ****
  --       to the back end, so the fact that this flag is set does not mean that
  --       the front end can access the value.
  
! --    Small_Value (Ureal21)
  --       Defined in fixed point types. Points to the universal real for the
  --       Small of the type, either as given in a representation clause, or
  --       as computed (as a power of two) by the compiler.
  
! --    SPARK_Aux_Pragma (Node41)
  --       Present in concurrent type, [generic] package spec and package body
  --       entities. For concurrent types and package specs it refers to the
  --       SPARK mode setting for the private part. This field points to the
--- 4374,4385 ----
  --       to the back end, so the fact that this flag is set does not mean that
  --       the front end can access the value.
  
! --    Small_Value
  --       Defined in fixed point types. Points to the universal real for the
  --       Small of the type, either as given in a representation clause, or
  --       as computed (as a power of two) by the compiler.
  
! --    SPARK_Aux_Pragma
  --       Present in concurrent type, [generic] package spec and package body
  --       entities. For concurrent types and package specs it refers to the
  --       SPARK mode setting for the private part. This field points to the
*************** package Einfo is
*** 4372,4383 ****
  --       inherited from the enclosing context. In all cases, if the pragma is
  --       inherited, then the SPARK_Aux_Pragma_Inherited flag is set.
  
! --    SPARK_Aux_Pragma_Inherited (Flag266)
  --       Present in concurrent type, [generic] package spec and package body
  --       entities. Set if the SPARK_Aux_Pragma field points to a pragma that is
  --       inherited, rather than a local one.
  
! --    SPARK_Pragma (Node40)
  --       Present in the following entities:
  --
  --         abstract states
--- 4390,4401 ----
  --       inherited from the enclosing context. In all cases, if the pragma is
  --       inherited, then the SPARK_Aux_Pragma_Inherited flag is set.
  
! --    SPARK_Aux_Pragma_Inherited
  --       Present in concurrent type, [generic] package spec and package body
  --       entities. Set if the SPARK_Aux_Pragma field points to a pragma that is
  --       inherited, rather than a local one.
  
! --    SPARK_Pragma
  --       Present in the following entities:
  --
  --         abstract states
*************** package Einfo is
*** 4398,4404 ****
  --       flag SPARK_Pragma_Inherited is set. Empty if no SPARK_Mode pragma is
  --       applicable.
  
! --    SPARK_Pragma_Inherited (Flag265)
  --       Present in the following entities:
  --
  --         abstract states
--- 4416,4422 ----
  --       flag SPARK_Pragma_Inherited is set. Empty if no SPARK_Mode pragma is
  --       applicable.
  
! --    SPARK_Pragma_Inherited
  --       Present in the following entities:
  --
  --         abstract states
*************** package Einfo is
*** 4415,4437 ****
  --       Set if the SPARK_Pragma attribute points to an inherited pragma rather
  --       than a local one.
  
! --    Spec_Entity (Node19)
  --       Defined in package body entities. Points to corresponding package
  --       spec entity. Also defined in subprogram body parameters in the
  --       case where there is a separate spec, where this field references
  --       the corresponding parameter entities in the spec.
  
! --    SSO_Set_High_By_Default (Flag273) [base type only]
  --       Defined for record and array types. Set in the base type if a pragma
  --       Default_Scalar_Storage_Order (High_Order_First) was active at the time
  --       the record or array was declared and therefore applies to it.
  
! --    SSO_Set_Low_By_Default (Flag272) [base type only]
  --       Defined for record and array types. Set in the base type if a pragma
  --       Default_Scalar_Storage_Order (High_Order_First) was active at the time
  --       the record or array was declared and therefore applies to it.
  
! --    Static_Discrete_Predicate (List25)
  --       Defined in discrete types/subtypes with static predicates (with the
  --       two flags Has_Predicates and Has_Static_Predicate set). Set if the
  --       type/subtype has a static predicate. Points to a list of expression
--- 4433,4460 ----
  --       Set if the SPARK_Pragma attribute points to an inherited pragma rather
  --       than a local one.
  
! --    Spec_Entity
  --       Defined in package body entities. Points to corresponding package
  --       spec entity. Also defined in subprogram body parameters in the
  --       case where there is a separate spec, where this field references
  --       the corresponding parameter entities in the spec.
  
! --    SSO_Set_High_By_Default [base type only]
  --       Defined for record and array types. Set in the base type if a pragma
  --       Default_Scalar_Storage_Order (High_Order_First) was active at the time
  --       the record or array was declared and therefore applies to it.
  
! --    SSO_Set_Low_By_Default [base type only]
  --       Defined for record and array types. Set in the base type if a pragma
  --       Default_Scalar_Storage_Order (High_Order_First) was active at the time
  --       the record or array was declared and therefore applies to it.
  
! --    Static_Call_Helper
! --       Defined on subprogram entities. Set if the subprogram has class-wide
! --       preconditions. Denotes the helper that evaluates at runtime the
! --       class-wide preconditions performing static calls.
! 
! --    Static_Discrete_Predicate
  --       Defined in discrete types/subtypes with static predicates (with the
  --       two flags Has_Predicates and Has_Static_Predicate set). Set if the
  --       type/subtype has a static predicate. Points to a list of expression
*************** package Einfo is
*** 4442,4454 ****
  --       are fully analyzed and typed with the base type of the subtype. Note
  --       that all entries are static and have values within the subtype range.
  
! --    Static_Elaboration_Desired (Flag77)
  --       Defined in library-level packages. Set by the pragma of the same
  --       name, to indicate that static initialization must be attempted for
  --       all types declared in the package, and that a warning must be emitted
  --       for those types to which static initialization is not available.
  
! --    Static_Initialization (Node30)
  --       Defined in initialization procedures for types whose objects can be
  --       initialized statically. The value of this attribute is a positional
  --       aggregate whose components are compile-time static values. Used
--- 4465,4477 ----
  --       are fully analyzed and typed with the base type of the subtype. Note
  --       that all entries are static and have values within the subtype range.
  
! --    Static_Elaboration_Desired
  --       Defined in library-level packages. Set by the pragma of the same
  --       name, to indicate that static initialization must be attempted for
  --       all types declared in the package, and that a warning must be emitted
  --       for those types to which static initialization is not available.
  
! --    Static_Initialization
  --       Defined in initialization procedures for types whose objects can be
  --       initialized statically. The value of this attribute is a positional
  --       aggregate whose components are compile-time static values. Used
*************** package Einfo is
*** 4457,4463 ****
  --       This attribute uses the same field as Overridden_Operation, which is
  --       irrelevant in init_procs.
  
! --    Static_Real_Or_String_Predicate (Node25)
  --       Defined in real types/subtypes with static predicates (with the two
  --       flags Has_Predicates and Has_Static_Predicate set). Set if the type
  --       or subtype has a static predicate. Points to the return expression
--- 4480,4486 ----
  --       This attribute uses the same field as Overridden_Operation, which is
  --       irrelevant in init_procs.
  
! --    Static_Real_Or_String_Predicate
  --       Defined in real types/subtypes with static predicates (with the two
  --       flags Has_Predicates and Has_Static_Predicate set). Set if the type
  --       or subtype has a static predicate. Points to the return expression
*************** package Einfo is
*** 4477,4483 ****
  --       from another predicate but does not add a predicate of its own, the
  --       expression may consist of the above xxxPredicate call on its own.
  
! --    Status_Flag_Or_Transient_Decl (Node15)
  --       Defined in constant, loop, and variable entities. Applies to objects
  --       that require special treatment by the finalization machinery, such as
  --       extended return results, IF and CASE expression results, and objects
--- 4500,4506 ----
  --       from another predicate but does not add a predicate of its own, the
  --       expression may consist of the above xxxPredicate call on its own.
  
! --    Status_Flag_Or_Transient_Decl
  --       Defined in constant, loop, and variable entities. Applies to objects
  --       that require special treatment by the finalization machinery, such as
  --       extended return results, IF and CASE expression results, and objects
*************** package Einfo is
*** 4486,4492 ****
  --       code or the declaration of a "hook" object.
  --       In which case is it a flag, or a hook object???
  
! --    Storage_Size_Variable (Node26) [implementation base type only]
  --       Defined in access types and task type entities. This flag is set
  --       if a valid and effective pragma Storage_Size applies to the base
  --       type. Points to the entity for a variable that is created to
--- 4509,4515 ----
  --       code or the declaration of a "hook" object.
  --       In which case is it a flag, or a hook object???
  
! --    Storage_Size_Variable [implementation base type only]
  --       Defined in access types and task type entities. This flag is set
  --       if a valid and effective pragma Storage_Size applies to the base
  --       type. Points to the entity for a variable that is created to
*************** package Einfo is
*** 4495,4530 ****
  --       this field is defined only in the root type (since derived types
  --       share the same storage pool).
  
! --    Stored_Constraint (Elist23)
  --       Defined in entities that can have discriminants (concurrent types
  --       subtypes, record types and subtypes, private types and subtypes,
  --       limited private types and subtypes and incomplete types). Points
  --       to an element list containing the expressions for each of the
  --       stored discriminants for the record (sub)type.
  
! --    Stores_Attribute_Old_Prefix (Flag270)
  --       Defined in constants, variables, and types which are created during
  --       expansion in order to save the value of attribute 'Old's prefix.
  
! --    Strict_Alignment (Flag145) [implementation base type only]
  --       Defined in all type entities. Indicates that the type is by-reference
  --       or contains an aliased part. This forbids packing a component of this
  --       type tighter than the alignment and size of the type, as specified by
  --       RM 13.2(7) modified by AI12-001 as a Binding Interpretation.
  
! --    String_Literal_Length (Uint16)
  --       Defined in string literal subtypes (which are created to correspond
  --       to string literals in the program). Contains the length of the string
  --       literal.
  
! --    String_Literal_Low_Bound (Node18)
  --       Defined in string literal subtypes (which are created to correspond
  --       to string literals in the program). Contains an expression whose
  --       value represents the low bound of the literal. This is a copy of
  --       the low bound of the applicable index constraint if there is one,
  --       or a copy of the low bound of the index base type if not.
  
! --    Subprograms_For_Type (Elist29)
  --       Defined in all types. The list may contain the entities of the default
  --       initial condition procedure, invariant procedure, and the two versions
  --       of the predicate function.
--- 4518,4553 ----
  --       this field is defined only in the root type (since derived types
  --       share the same storage pool).
  
! --    Stored_Constraint
  --       Defined in entities that can have discriminants (concurrent types
  --       subtypes, record types and subtypes, private types and subtypes,
  --       limited private types and subtypes and incomplete types). Points
  --       to an element list containing the expressions for each of the
  --       stored discriminants for the record (sub)type.
  
! --    Stores_Attribute_Old_Prefix
  --       Defined in constants, variables, and types which are created during
  --       expansion in order to save the value of attribute 'Old's prefix.
  
! --    Strict_Alignment [implementation base type only]
  --       Defined in all type entities. Indicates that the type is by-reference
  --       or contains an aliased part. This forbids packing a component of this
  --       type tighter than the alignment and size of the type, as specified by
  --       RM 13.2(7) modified by AI12-001 as a Binding Interpretation.
  
! --    String_Literal_Length
  --       Defined in string literal subtypes (which are created to correspond
  --       to string literals in the program). Contains the length of the string
  --       literal.
  
! --    String_Literal_Low_Bound
  --       Defined in string literal subtypes (which are created to correspond
  --       to string literals in the program). Contains an expression whose
  --       value represents the low bound of the literal. This is a copy of
  --       the low bound of the applicable index constraint if there is one,
  --       or a copy of the low bound of the index base type if not.
  
! --    Subprograms_For_Type
  --       Defined in all types. The list may contain the entities of the default
  --       initial condition procedure, invariant procedure, and the two versions
  --       of the predicate function.
*************** package Einfo is
*** 4533,4546 ****
  --       entities rather than an Elist. The Elist allows greater flexibility
  --       in inheritance of subprograms between views of the same type.
  
! --    Subps_Index (Uint24)
! --       Present in subprogram entries. Set if the subprogram contains nested
  --       subprograms, or is a subprogram nested within such a subprogram. Holds
  --       the index in the Exp_Unst.Subps table for the subprogram. Note that
  --       for the outer level subprogram, this is the starting index in the Subp
  --       table for the entries for this subprogram.
  
! --    Suppress_Elaboration_Warnings (Flag303)
  --       NOTE: this flag is relevant only for the legacy ABE mechanism and
  --       should not be used outside of that context.
  --
--- 4556,4569 ----
  --       entities rather than an Elist. The Elist allows greater flexibility
  --       in inheritance of subprograms between views of the same type.
  
! --    Subps_Index
! --       Present in subprogram entities. Set if the subprogram contains nested
  --       subprograms, or is a subprogram nested within such a subprogram. Holds
  --       the index in the Exp_Unst.Subps table for the subprogram. Note that
  --       for the outer level subprogram, this is the starting index in the Subp
  --       table for the entries for this subprogram.
  
! --    Suppress_Elaboration_Warnings
  --       NOTE: this flag is relevant only for the legacy ABE mechanism and
  --       should not be used outside of that context.
  --
*************** package Einfo is
*** 4554,4560 ****
  --       and it is set on variables when a warning is given to avoid multiple
  --       elaboration warnings for the same variable.
  
! --    Suppress_Initialization (Flag105)
  --       Defined in all variable, type and subtype entities. If set for a base
  --       type, then the generation of initialization procedures is suppressed
  --       for the type. Any other implicit initialization (e.g. from the use of
--- 4577,4583 ----
  --       and it is set on variables when a warning is given to avoid multiple
  --       elaboration warnings for the same variable.
  
! --    Suppress_Initialization
  --       Defined in all variable, type and subtype entities. If set for a base
  --       type, then the generation of initialization procedures is suppressed
  --       for the type. Any other implicit initialization (e.g. from the use of
*************** package Einfo is
*** 4566,4582 ****
  --       we know that no initialization is required. For example, enumeration
  --       image table entities set it.
  
! --    Suppress_Style_Checks (Flag165)
  --       Defined in all entities. Suppresses any style checks specifically
  --       associated with the given entity if set.
  
! --    Suppress_Value_Tracking_On_Call (Flag217)
  --       Defined in all entities. Set in a scope entity if value tracking is to
  --       be suppressed on any call within the scope. Used when an access to a
  --       local subprogram is computed, to deal with the possibility that this
  --       value may be passed around, and if used, may clobber a local variable.
  
! --    Task_Body_Procedure (Node25)
  --       Defined in task types and subtypes. Points to the entity for the task
  --       task body procedure (as further described in Exp_Ch9, task bodies are
  --       expanded into procedures). A convenient function to retrieve this
--- 4589,4605 ----
  --       we know that no initialization is required. For example, enumeration
  --       image table entities set it.
  
! --    Suppress_Style_Checks
  --       Defined in all entities. Suppresses any style checks specifically
  --       associated with the given entity if set.
  
! --    Suppress_Value_Tracking_On_Call
  --       Defined in all entities. Set in a scope entity if value tracking is to
  --       be suppressed on any call within the scope. Used when an access to a
  --       local subprogram is computed, to deal with the possibility that this
  --       value may be passed around, and if used, may clobber a local variable.
  
! --    Task_Body_Procedure
  --       Defined in task types and subtypes. Points to the entity for the task
  --       task body procedure (as further described in Exp_Ch9, task bodies are
  --       expanded into procedures). A convenient function to retrieve this
*************** package Einfo is
*** 4585,4595 ****
  --       The last sentence is odd??? Why not have Task_Body_Procedure go to the
  --       Underlying_Type of the Root_Type???
  
! --    Thunk_Entity (Node31)
  --       Defined in functions and procedures which have been classified as
  --       Is_Thunk. Set to the target entity called by the thunk.
  
! --    Treat_As_Volatile (Flag41)
  --       Defined in all type entities, and also in constants, components and
  --       variables. Set if this entity is to be treated as volatile for code
  --       generation purposes. Always set if Is_Volatile is set, but can also
--- 4608,4618 ----
  --       The last sentence is odd??? Why not have Task_Body_Procedure go to the
  --       Underlying_Type of the Root_Type???
  
! --    Thunk_Entity
  --       Defined in functions and procedures which have been classified as
  --       Is_Thunk. Set to the target entity called by the thunk.
  
! --    Treat_As_Volatile
  --       Defined in all type entities, and also in constants, components and
  --       variables. Set if this entity is to be treated as volatile for code
  --       generation purposes. Always set if Is_Volatile is set, but can also
*************** package Einfo is
*** 4618,4624 ****
  --       base type, but may be an expression in the case of scalar type with
  --       dynamic bounds.
  
! --    Underlying_Full_View (Node19)
  --       Defined in private subtypes that are the completion of other private
  --       types, or in private types that are derived from private subtypes. If
  --       the full view of a private type T is derived from another private type
--- 4641,4647 ----
  --       base type, but may be an expression in the case of scalar type with
  --       dynamic bounds.
  
! --    Underlying_Full_View
  --       Defined in private subtypes that are the completion of other private
  --       types, or in private types that are derived from private subtypes. If
  --       the full view of a private type T is derived from another private type
*************** package Einfo is
*** 4632,4638 ****
  --       private completion. If Td is already constrained, then its full view
  --       can serve directly as the full view of T.
  
! --    Underlying_Record_View (Node28)
  --       Defined in record types. Set for record types that are extensions of
  --       types with unknown discriminants, and also set for internally built
  --       underlying record views to reference its original record type. Record
--- 4655,4661 ----
  --       private completion. If Td is already constrained, then its full view
  --       can serve directly as the full view of T.
  
! --    Underlying_Record_View
  --       Defined in record types. Set for record types that are extensions of
  --       types with unknown discriminants, and also set for internally built
  --       underlying record views to reference its original record type. Record
*************** package Einfo is
*** 4658,4664 ****
  --       type is declared in an enclosing package, the attribute will be non-
  --       trivial only after the full view of the type has been analyzed.
  
! --    Universal_Aliasing (Flag216) [implementation base type only]
  --       Defined in all type entities. Set to direct the back-end to avoid
  --       any optimizations based on type-based alias analysis for this type.
  --       Indicates that objects of this type can alias objects of any other
--- 4681,4687 ----
  --       type is declared in an enclosing package, the attribute will be non-
  --       trivial only after the full view of the type has been analyzed.
  
! --    Universal_Aliasing [implementation base type only]
  --       Defined in all type entities. Set to direct the back-end to avoid
  --       any optimizations based on type-based alias analysis for this type.
  --       Indicates that objects of this type can alias objects of any other
*************** package Einfo is
*** 4667,4740 ****
  --       of these objects. In other words, the effect is as though access
  --       types designating this type were subject to No_Strict_Aliasing.
  
! --    Unset_Reference (Node16)
  --       Defined in variables and out parameters. This is normally Empty. It
  --       is set to point to an identifier that represents a reference to the
  --       entity before any value has been set. Only the first such reference
  --       is identified. This field is used to generate a warning message if
  --       necessary (see Sem_Warn.Check_Unset_Reference).
  
! --    Used_As_Generic_Actual (Flag222)
  --       Defined in all entities, set if the entity is used as an argument to
  --       a generic instantiation. Used to tune certain warning messages, and
  --       in checking type conformance within an instantiation that involves
  --       incomplete formal and actual types.
  
! --    Uses_Lock_Free (Flag188)
  --       Defined in protected type entities. Set to True when the Lock Free
  --       implementation is used for the protected type. This implementation is
  --       based on atomic transactions and doesn't require anymore the use of
  --       Protection object (see System.Tasking.Protected_Objects).
  
! --    Uses_Sec_Stack (Flag95)
  --       Defined in scope entities (blocks, entries, entry families, functions,
  --       loops, and procedures). Set to True when the secondary stack is used
  --       in this scope and must be released on exit unless flag
  --       Sec_Stack_Needed_For_Return is set.
  
! --    Validated_Object (Node38)
  --       Defined in variables. Contains the object whose value is captured by
  --       the variable for validity check purposes.
  
! --    Warnings_Off (Flag96)
  --       Defined in all entities. Set if a pragma Warnings (Off, entity-name)
  --       is used to suppress warnings for a given entity. It is also used by
  --       the compiler in some situations to kill spurious warnings. Note that
  --       clients should generally not test this flag directly, but instead
  --       use function Has_Warnings_Off.
  
! --    Warnings_Off_Used (Flag236)
  --       Defined in all entities. Can only be set if Warnings_Off is set. If
  --       set indicates that a warning was suppressed by the Warnings_Off flag,
  --       and Unmodified/Unreferenced would not have suppressed the warning.
  
! --    Warnings_Off_Used_Unmodified (Flag237)
  --       Defined in all entities. Can only be set if Warnings_Off is set and
  --       Has_Pragma_Unmodified is not set. If set indicates that a warning was
  --       suppressed by the Warnings_Off status but that pragma Unmodified
  --       would also have suppressed the warning.
  
! --    Warnings_Off_Used_Unreferenced (Flag238)
  --       Defined in all entities. Can only be set if Warnings_Off is set and
  --       Has_Pragma_Unreferenced is not set. If set indicates that a warning
  --       was suppressed by the Warnings_Off status but that pragma Unreferenced
  --       would also have suppressed the warning.
  
! --    Was_Hidden (Flag196)
  --       Defined in all entities. Used to save the value of the Is_Hidden
  --       attribute when the limited-view is installed (Ada 2005: AI-217).
  
! --    Wrapped_Entity (Node27)
  --       Defined in functions and procedures which have been classified as
  --       Is_Primitive_Wrapper. Set to the entity being wrapper.
  
  ---------------------------
  -- Renaming and Aliasing --
  ---------------------------
  
  --  Several entity attributes relate to renaming constructs, and to the use of
  --  different names to refer to the same entity. The following is a summary of
! --  these constructs and their prefered uses.
  
  --  There are three related attributes:
  
--- 4690,4769 ----
  --       of these objects. In other words, the effect is as though access
  --       types designating this type were subject to No_Strict_Aliasing.
  
! --    Unset_Reference
  --       Defined in variables and out parameters. This is normally Empty. It
  --       is set to point to an identifier that represents a reference to the
  --       entity before any value has been set. Only the first such reference
  --       is identified. This field is used to generate a warning message if
  --       necessary (see Sem_Warn.Check_Unset_Reference).
  
! --    Used_As_Generic_Actual
  --       Defined in all entities, set if the entity is used as an argument to
  --       a generic instantiation. Used to tune certain warning messages, and
  --       in checking type conformance within an instantiation that involves
  --       incomplete formal and actual types.
  
! --    Uses_Lock_Free
  --       Defined in protected type entities. Set to True when the Lock Free
  --       implementation is used for the protected type. This implementation is
  --       based on atomic transactions and doesn't require anymore the use of
  --       Protection object (see System.Tasking.Protected_Objects).
  
! --    Uses_Sec_Stack
  --       Defined in scope entities (blocks, entries, entry families, functions,
  --       loops, and procedures). Set to True when the secondary stack is used
  --       in this scope and must be released on exit unless flag
  --       Sec_Stack_Needed_For_Return is set.
  
! --    Validated_Object
  --       Defined in variables. Contains the object whose value is captured by
  --       the variable for validity check purposes.
  
! --    Warnings_Off
  --       Defined in all entities. Set if a pragma Warnings (Off, entity-name)
  --       is used to suppress warnings for a given entity. It is also used by
  --       the compiler in some situations to kill spurious warnings. Note that
  --       clients should generally not test this flag directly, but instead
  --       use function Has_Warnings_Off.
  
! --    Warnings_Off_Used
  --       Defined in all entities. Can only be set if Warnings_Off is set. If
  --       set indicates that a warning was suppressed by the Warnings_Off flag,
  --       and Unmodified/Unreferenced would not have suppressed the warning.
  
! --    Warnings_Off_Used_Unmodified
  --       Defined in all entities. Can only be set if Warnings_Off is set and
  --       Has_Pragma_Unmodified is not set. If set indicates that a warning was
  --       suppressed by the Warnings_Off status but that pragma Unmodified
  --       would also have suppressed the warning.
  
! --    Warnings_Off_Used_Unreferenced
  --       Defined in all entities. Can only be set if Warnings_Off is set and
  --       Has_Pragma_Unreferenced is not set. If set indicates that a warning
  --       was suppressed by the Warnings_Off status but that pragma Unreferenced
  --       would also have suppressed the warning.
  
! --    Was_Hidden
  --       Defined in all entities. Used to save the value of the Is_Hidden
  --       attribute when the limited-view is installed (Ada 2005: AI-217).
  
! --    Wrapped_Entity
  --       Defined in functions and procedures which have been classified as
  --       Is_Primitive_Wrapper. Set to the entity being wrapper.
  
+ --    LSP_Subprogram
+ --       Defined in subprogram entities. Set on wrappers created to handle
+ --       inherited class-wide pre/post conditions that call overridden
+ --       primitives. It references the parent primitive that has the
+ --       class-wide pre/post conditions.
+ 
  ---------------------------
  -- Renaming and Aliasing --
  ---------------------------
  
  --  Several entity attributes relate to renaming constructs, and to the use of
  --  different names to refer to the same entity. The following is a summary of
! --  these constructs and their preferred uses.
  
  --  There are three related attributes:
  
*************** package Einfo is
*** 4742,4753 ****
  --    Renamed_Object
  --    Alias
  
! --  They all overlap because they are supposed to apply to different entity
! --  kinds. They are semantically related, and have the following intended uses:
  
  --  a) Renamed_Entity applies to entities in renaming declarations that rename
  --  an entity, so the value of the attribute IS an entity. This applies to
! --  generic renamings, package renamings, exception renamings, and subprograms
  --  renamings that rename a subprogram (rather than an attribute, an entry, a
  --  protected operation, etc).
  
--- 4771,4782 ----
  --    Renamed_Object
  --    Alias
  
! --  These are implemented in Einfo.Utils as renamings of the Renamed_Or_Alias
! --  field. They are semantically related, and have the following intended uses:
  
  --  a) Renamed_Entity applies to entities in renaming declarations that rename
  --  an entity, so the value of the attribute IS an entity. This applies to
! --  generic renamings, package renamings, exception renamings, and subprogram
  --  renamings that rename a subprogram (rather than an attribute, an entry, a
  --  protected operation, etc).
  
*************** package Einfo is
*** 4769,4777 ****
  --  in a few cases we need to use a loop to trace a chain of object renamings
  --  where all of them happen to be entities. So:
  
! --    X : integer;
! --    Y : integer renames X;   -- renamed object is the identifier X
! --    Z : integer renames Y;   -- renamed object is the identifier Y
  
  --  The front-end does not store explicitly the fact that Z renames X.
  
--- 4798,4806 ----
  --  in a few cases we need to use a loop to trace a chain of object renamings
  --  where all of them happen to be entities. So:
  
! --    X : Integer;
! --    Y : Integer renames X;   -- renamed object is the identifier X
! --    Z : Integer renames Y;   -- renamed object is the identifier Y
  
  --  The front-end does not store explicitly the fact that Z renames X.
  
*************** package Einfo is
*** 4835,5601 ****
  --  associated with an access attribute. After resolution a specific access
  --  type will be established as determined by the context.
  
- --  Finally, the type Any_Access is used to label -null- during type
- --  resolution. Any_Access is also replaced by the context type after
- --  resolution.
- 
- --------------------------------
- -- Classification of Entities --
- --------------------------------
- 
- --  The classification of program entities which follows is a refinement of
- --  the list given in RM 3.1(1). E.g., separate entities denote subtypes of
- --  different type classes. Ada 95 entities include class wide types,
- --  protected types, subprogram types, generalized access types, generic
- --  formal derived types and generic formal packages.
- 
- --  The order chosen for these kinds allows us to classify related entities
- --  so that they are contiguous. As a result, they do not appear in the
- --  exact same order as their order of first appearance in the LRM (For
- --  example, private types are listed before packages). The contiguity
- --  allows us to define useful subtypes (see below) such as type entities,
- --  overloaded entities, etc.
- 
- --  Each entity (explicitly or implicitly declared) has a kind, which is
- --  a value of the following type:
- 
-    type Entity_Kind is (
- 
-       E_Void,
-       --  The initial Ekind value for a newly created entity. Also used as the
-       --  Ekind for Standard_Void_Type, a type entity in Standard used as a
-       --  dummy type for the return type of a procedure (the reason we create
-       --  this type is to share the circuits for performing overload resolution
-       --  on calls).
- 
-       -------------
-       -- Objects --
-       -------------
- 
-       E_Component,
-       --  Components of a record declaration, private declarations of
-       --  protected objects.
- 
-       E_Constant,
-       --  Constants created by an object declaration with a constant keyword
- 
-       E_Discriminant,
-       --  A discriminant, created by the use of a discriminant in a type
-       --  declaration.
- 
-       E_Loop_Parameter,
-       --  A loop parameter created by a for loop
- 
-       E_Variable,
-       --  Variables created by an object declaration with no constant keyword
- 
-       ------------------------
-       -- Parameter Entities --
-       ------------------------
- 
-       --  Parameters are also objects
- 
-       E_Out_Parameter,
-       --  An out parameter of a subprogram or entry
- 
-       E_In_Out_Parameter,
-       --  An in-out parameter of a subprogram or entry
- 
-       E_In_Parameter,
-       --  An in parameter of a subprogram or entry
- 
-       --------------------------------
-       -- Generic Parameter Entities --
-       --------------------------------
- 
-       --  Generic parameters are also objects
- 
-       E_Generic_In_Out_Parameter,
-       --  A generic in out parameter, created by the use of a generic in out
-       --  parameter in a generic declaration.
- 
-       E_Generic_In_Parameter,
-       --  A generic in parameter, created by the use of a generic in
-       --  parameter in a generic declaration.
- 
-       -------------------
-       -- Named Numbers --
-       -------------------
- 
-       E_Named_Integer,
-       --  Named numbers created by a number declaration with an integer value
- 
-       E_Named_Real,
-       --  Named numbers created by a number declaration with a real value
- 
-       -----------------------
-       -- Enumeration Types --
-       -----------------------
- 
-       E_Enumeration_Type,
-       --  Enumeration types, created by an enumeration type declaration
- 
-       E_Enumeration_Subtype,
-       --  Enumeration subtypes, created by an explicit or implicit subtype
-       --  declaration applied to an enumeration type or subtype.
- 
-       -------------------
-       -- Numeric Types --
-       -------------------
- 
-       E_Signed_Integer_Type,
-       --  Signed integer type, used for the anonymous base type of the
-       --  integer subtype created by an integer type declaration.
- 
-       E_Signed_Integer_Subtype,
-       --  Signed integer subtype, created by either an integer subtype or
-       --  integer type declaration (in the latter case an integer type is
-       --  created for the base type, and this is the first named subtype).
- 
-       E_Modular_Integer_Type,
-       --  Modular integer type, used for the anonymous base type of the
-       --  integer subtype created by a modular integer type declaration.
- 
-       E_Modular_Integer_Subtype,
-       --  Modular integer subtype, created by either an modular subtype
-       --  or modular type declaration (in the latter case a modular type
-       --  is created for the base type, and this is the first named subtype).
- 
-       E_Ordinary_Fixed_Point_Type,
-       --  Ordinary fixed type, used for the anonymous base type of the fixed
-       --  subtype created by an ordinary fixed point type declaration.
- 
-       E_Ordinary_Fixed_Point_Subtype,
-       --  Ordinary fixed point subtype, created by either an ordinary fixed
-       --  point subtype or ordinary fixed point type declaration (in the
-       --  latter case a fixed point type is created for the base type, and
-       --  this is the first named subtype).
- 
-       E_Decimal_Fixed_Point_Type,
-       --  Decimal fixed type, used for the anonymous base type of the decimal
-       --  fixed subtype created by an ordinary fixed point type declaration.
- 
-       E_Decimal_Fixed_Point_Subtype,
-       --  Decimal fixed point subtype, created by either a decimal fixed point
-       --  subtype or decimal fixed point type declaration (in the latter case
-       --  a fixed point type is created for the base type, and this is the
-       --  first named subtype).
- 
-       E_Floating_Point_Type,
-       --  Floating point type, used for the anonymous base type of the
-       --  floating point subtype created by a floating point type declaration.
- 
-       E_Floating_Point_Subtype,
- 
-       --  Floating point subtype, created by either a floating point subtype
-       --  or floating point type declaration (in the latter case a floating
-       --  point type is created for the base type, and this is the first
-       --  named subtype).
- 
-       ------------------
-       -- Access Types --
-       ------------------
- 
-       E_Access_Type,
-       --  An access type created by an access type declaration with no all
-       --  keyword present. Note that the predefined type Any_Access, which
-       --  has E_Access_Type Ekind, is used to label NULL in the upwards pass
-       --  of type analysis, to be replaced by the true access type in the
-       --  downwards resolution pass.
- 
-       E_Access_Subtype,
-       --  An access subtype created by a subtype declaration for any access
-       --  type (whether or not it is a general access type).
- 
-       E_Access_Attribute_Type,
-       --  An access type created for an access attribute (one of 'Access,
-       --  'Unrestricted_Access, or Unchecked_Access).
- 
-       E_Allocator_Type,
-       --  A special internal type used to label allocators and references to
-       --  objects using 'Reference. This is needed because special resolution
-       --  rules apply to these constructs. On the resolution pass, this type
-       --  is almost always replaced by the actual access type, but if the
-       --  context does not provide one, the backend will see Allocator_Type
-       --  itself (which will already have been frozen).
- 
-       E_General_Access_Type,
-       --  An access type created by an access type declaration with the all
-       --  keyword present.
- 
-       E_Access_Subprogram_Type,
-       --  An access-to-subprogram type, created by an access-to-subprogram
-       --  declaration.
- 
-       E_Access_Protected_Subprogram_Type,
-       --  An access to a protected subprogram, created by the corresponding
-       --  declaration. Values of such a type denote both a protected object
-       --  and a protected operation within, and have different compile-time
-       --  and run-time properties than other access-to-subprogram values.
- 
-       E_Anonymous_Access_Protected_Subprogram_Type,
-       --  An anonymous access-to-protected-subprogram type, created by an
-       --  access-to-subprogram declaration.
- 
-       E_Anonymous_Access_Subprogram_Type,
-       --  An anonymous access-to-subprogram type, created by an access-to-
-       --  subprogram declaration, or generated for a current instance of
-       --  a type name appearing within a component definition that has an
-       --  anonymous access-to-subprogram type.
- 
-       E_Anonymous_Access_Type,
-       --  An anonymous access type created by an access parameter or access
-       --  discriminant.
- 
-       ---------------------
-       -- Composite Types --
-       ---------------------
- 
-       E_Array_Type,
-       --  An array type created by an array type declaration. Includes all
-       --  cases of arrays, except for string types.
- 
-       E_Array_Subtype,
-       --  An array subtype, created by an explicit array subtype declaration,
-       --  or the use of an anonymous array subtype.
- 
-       E_String_Literal_Subtype,
-       --  A special string subtype, used only to describe the type of a string
-       --  literal (will always be one dimensional, with literal bounds).
- 
-       E_Class_Wide_Type,
-       --  A class wide type, created by any tagged type declaration (i.e. if
-       --  a tagged type is declared, the corresponding class type is always
-       --  created, using this Ekind value).
- 
-       E_Class_Wide_Subtype,
-       --  A subtype of a class wide type, created by a subtype declaration
-       --  used to declare a subtype of a class type.
- 
-       E_Record_Type,
-       --  A record type, created by a record type declaration
- 
-       E_Record_Subtype,
-       --  A record subtype, created by a record subtype declaration
- 
-       E_Record_Type_With_Private,
-       --  Used for types defined by a private extension declaration,
-       --  and for tagged private types. Includes the fields for both
-       --  private types and for record types (with the sole exception of
-       --  Corresponding_Concurrent_Type which is obviously not needed). This
-       --  entity is considered to be both a record type and a private type.
- 
-       E_Record_Subtype_With_Private,
-       --  A subtype of a type defined by a private extension declaration
- 
-       E_Private_Type,
-       --  A private type, created by a private type declaration that has
-       --  neither the keyword limited nor the keyword tagged.
- 
-       E_Private_Subtype,
-       --  A subtype of a private type, created by a subtype declaration used
-       --  to declare a subtype of a private type.
- 
-       E_Limited_Private_Type,
-       --  A limited private type, created by a private type declaration that
-       --  has the keyword limited, but not the keyword tagged.
- 
-       E_Limited_Private_Subtype,
-       --  A subtype of a limited private type, created by a subtype declaration
-       --  used to declare a subtype of a limited private type.
- 
-       E_Incomplete_Type,
-       --  An incomplete type, created by an incomplete type declaration
- 
-       E_Incomplete_Subtype,
-       --  An incomplete subtype, created by a subtype declaration where the
-       --  subtype mark denotes an incomplete type.
- 
-       E_Task_Type,
-       --  A task type, created by a task type declaration. An entity with this
-       --  Ekind is also created to describe the anonymous type of a task that
-       --  is created by a single task declaration.
- 
-       E_Task_Subtype,
-       --  A subtype of a task type, created by a subtype declaration used to
-       --  declare a subtype of a task type.
- 
-       E_Protected_Type,
-       --  A protected type, created by a protected type declaration. An entity
-       --  with this Ekind is also created to describe the anonymous type of
-       --  a protected object created by a single protected declaration.
- 
-       E_Protected_Subtype,
-       --  A subtype of a protected type, created by a subtype declaration used
-       --  to declare a subtype of a protected type.
- 
-       -----------------
-       -- Other Types --
-       -----------------
- 
-       E_Exception_Type,
-       --  The type of an exception created by an exception declaration
- 
-       E_Subprogram_Type,
-       --  This is the designated type of an Access_To_Subprogram. Has type and
-       --  signature like a subprogram entity, so can appear in calls, which
-       --  are resolved like regular calls, except that such an entity is not
-       --  overloadable.
- 
-       ---------------------------
-       -- Overloadable Entities --
-       ---------------------------
- 
-       E_Enumeration_Literal,
-       --  An enumeration literal, created by the use of the literal in an
-       --  enumeration type definition.
- 
-       E_Function,
-       --  A function, created by a function declaration or a function body
-       --  that acts as its own declaration.
- 
-       E_Operator,
-       --  A predefined operator, appearing in Standard, or an implicitly
-       --  defined concatenation operator created whenever an array is declared.
-       --  We do not make normal derived operators explicit in the tree, but the
-       --  concatenation operators are made explicit.
- 
-       E_Procedure,
-       --  A procedure, created by a procedure declaration or a procedure
-       --  body that acts as its own declaration.
- 
-       E_Abstract_State,
-       --  A state abstraction. Used to designate entities introduced by aspect
-       --  or pragma Abstract_State. The entity carries the various properties
-       --  of the state.
- 
-       E_Entry,
-       --  An entry, created by an entry declaration in a task or protected
-       --  object.
- 
-       --------------------
-       -- Other Entities --
-       --------------------
- 
-       E_Entry_Family,
-       --  An entry family, created by an entry family declaration in a
-       --  task or protected type definition.
- 
-       E_Block,
-       --  A block identifier, created by an explicit or implicit label on
-       --  a block or declare statement.
- 
-       E_Entry_Index_Parameter,
-       --  An entry index parameter created by an entry index specification
-       --  for the body of a protected entry family.
- 
-       E_Exception,
-       --  An exception created by an exception declaration. The exception
-       --  itself uses E_Exception for the Ekind, the implicit type that is
-       --  created to represent its type uses the Ekind E_Exception_Type.
- 
-       E_Generic_Function,
-       --  A generic function. This is the entity for a generic function
-       --  created by a generic subprogram declaration.
- 
-       E_Generic_Procedure,
-       --  A generic function. This is the entity for a generic procedure
-       --  created by a generic subprogram declaration.
- 
-       E_Generic_Package,
-       --  A generic package, this is the entity for a generic package created
-       --  by a generic package declaration.
- 
-       E_Label,
-       --  The defining entity for a label. Note that this is created by the
-       --  implicit label declaration, not the occurrence of the label itself,
-       --  which is simply a direct name referring to the label.
- 
-       E_Loop,
-       --  A loop identifier, created by an explicit or implicit label on a
-       --  loop statement.
- 
-       E_Return_Statement,
-       --  A dummy entity created for each return statement. Used to hold
-       --  information about the return statement (what it applies to) and in
-       --  rules checking. For example, a simple_return_statement that applies
-       --  to an extended_return_statement cannot have an expression; this
-       --  requires putting the E_Return_Statement entity for the
-       --  extended_return_statement on the scope stack.
- 
-       E_Package,
-       --  A package, created by a package declaration
- 
-       E_Package_Body,
-       --  A package body. This entity serves only limited functions, since
-       --  most semantic analysis uses the package entity (E_Package). However
-       --  there are some attributes that are significant for the body entity.
-       --  For example, collection of exception handlers.
- 
-       E_Protected_Body,
-       --  A protected body. This entity serves almost no function, since all
-       --  semantic analysis uses the protected entity (E_Protected_Type).
- 
-       E_Task_Body,
-       --  A task body. This entity serves almost no function, since all
-       --  semantic analysis uses the protected entity (E_Task_Type).
- 
-       E_Subprogram_Body
-       --  A subprogram body. Used when a subprogram has a separate declaration
-       --  to represent the entity for the body. This entity serves almost no
-       --  function, since all semantic analysis uses the subprogram entity
-       --  for the declaration (E_Function or E_Procedure).
-    );
- 
-    for Entity_Kind'Size use 8;
-    --  The data structures in Atree assume this
- 
-    --------------------------
-    -- Subtype Declarations --
-    --------------------------
- 
-    --  The above entities are arranged so that they can be conveniently grouped
-    --  into subtype ranges. Note that for each of the xxx_Kind ranges defined
-    --  below, there is a corresponding Is_xxx (or for types, Is_xxx_Type)
-    --  predicate which is to be used in preference to direct range tests using
-    --  the subtype name. However, the subtype names are available for direct
-    --  use, e.g. as choices in case statements.
- 
-    subtype Access_Kind                 is Entity_Kind range
-        E_Access_Type ..
-    --  E_Access_Subtype
-    --  E_Access_Attribute_Type
-    --  E_Allocator_Type
-    --  E_General_Access_Type
-    --  E_Access_Subprogram_Type
-    --  E_Access_Protected_Subprogram_Type
-    --  E_Anonymous_Access_Protected_Subprogram_Type
-    --  E_Anonymous_Access_Subprogram_Type
-        E_Anonymous_Access_Type;
- 
-    subtype Access_Subprogram_Kind      is Entity_Kind range
-        E_Access_Subprogram_Type ..
-    --  E_Access_Protected_Subprogram_Type
-    --  E_Anonymous_Access_Protected_Subprogram_Type
-        E_Anonymous_Access_Subprogram_Type;
- 
-    subtype Access_Protected_Kind       is Entity_Kind range
-       E_Access_Protected_Subprogram_Type ..
-       E_Anonymous_Access_Protected_Subprogram_Type;
- 
-    subtype Aggregate_Kind              is Entity_Kind range
-        E_Array_Type ..
-    --  E_Array_Subtype
-    --  E_String_Literal_Subtype
-    --  E_Class_Wide_Type
-    --  E_Class_Wide_Subtype
-    --  E_Record_Type
-        E_Record_Subtype;
- 
-    subtype Anonymous_Access_Kind       is Entity_Kind range
-        E_Anonymous_Access_Protected_Subprogram_Type ..
-    --  E_Anonymous_Subprogram_Type
-        E_Anonymous_Access_Type;
- 
-    subtype Array_Kind                  is Entity_Kind range
-        E_Array_Type ..
-    --  E_Array_Subtype
-        E_String_Literal_Subtype;
- 
-    subtype Assignable_Kind             is Entity_Kind range
-        E_Variable ..
-    --  E_Out_Parameter
-        E_In_Out_Parameter;
- 
-    subtype Class_Wide_Kind             is Entity_Kind range
-        E_Class_Wide_Type ..
-        E_Class_Wide_Subtype;
- 
-    subtype Composite_Kind              is Entity_Kind range
-        E_Array_Type ..
-    --  E_Array_Subtype
-    --  E_String_Literal_Subtype
-    --  E_Class_Wide_Type
-    --  E_Class_Wide_Subtype
-    --  E_Record_Type
-    --  E_Record_Subtype
-    --  E_Record_Type_With_Private
-    --  E_Record_Subtype_With_Private
-    --  E_Private_Type
-    --  E_Private_Subtype
-    --  E_Limited_Private_Type
-    --  E_Limited_Private_Subtype
-    --  E_Incomplete_Type
-    --  E_Incomplete_Subtype
-    --  E_Task_Type
-    --  E_Task_Subtype,
-    --  E_Protected_Type,
-        E_Protected_Subtype;
- 
-    subtype Concurrent_Kind             is Entity_Kind range
-        E_Task_Type ..
-    --  E_Task_Subtype,
-    --  E_Protected_Type,
-        E_Protected_Subtype;
- 
-    subtype Concurrent_Body_Kind        is Entity_Kind range
-        E_Protected_Body ..
-        E_Task_Body;
- 
-    subtype Decimal_Fixed_Point_Kind    is Entity_Kind range
-        E_Decimal_Fixed_Point_Type ..
-        E_Decimal_Fixed_Point_Subtype;
- 
-    subtype Digits_Kind                 is Entity_Kind range
-        E_Decimal_Fixed_Point_Type ..
-    --  E_Decimal_Fixed_Point_Subtype
-    --  E_Floating_Point_Type
-        E_Floating_Point_Subtype;
- 
-    subtype Discrete_Kind               is Entity_Kind range
-        E_Enumeration_Type ..
-    --  E_Enumeration_Subtype
-    --  E_Signed_Integer_Type
-    --  E_Signed_Integer_Subtype
-    --  E_Modular_Integer_Type
-        E_Modular_Integer_Subtype;
- 
-    subtype Discrete_Or_Fixed_Point_Kind is Entity_Kind range
-        E_Enumeration_Type ..
-    --  E_Enumeration_Subtype
-    --  E_Signed_Integer_Type
-    --  E_Signed_Integer_Subtype
-    --  E_Modular_Integer_Type
-    --  E_Modular_Integer_Subtype
-    --  E_Ordinary_Fixed_Point_Type
-    --  E_Ordinary_Fixed_Point_Subtype
-    --  E_Decimal_Fixed_Point_Type
-        E_Decimal_Fixed_Point_Subtype;
- 
-    subtype Elementary_Kind             is Entity_Kind range
-        E_Enumeration_Type ..
-    --  E_Enumeration_Subtype
-    --  E_Signed_Integer_Type
-    --  E_Signed_Integer_Subtype
-    --  E_Modular_Integer_Type
-    --  E_Modular_Integer_Subtype
-    --  E_Ordinary_Fixed_Point_Type
-    --  E_Ordinary_Fixed_Point_Subtype
-    --  E_Decimal_Fixed_Point_Type
-    --  E_Decimal_Fixed_Point_Subtype
-    --  E_Floating_Point_Type
-    --  E_Floating_Point_Subtype
-    --  E_Access_Type
-    --  E_Access_Subtype
-    --  E_Access_Attribute_Type
-    --  E_Allocator_Type
-    --  E_General_Access_Type
-    --  E_Access_Subprogram_Type
-    --  E_Access_Protected_Subprogram_Type
-    --  E_Anonymous_Access_Protected_Subprogram_Type
-    --  E_Anonymous_Access_Subprogram_Type
-        E_Anonymous_Access_Type;
- 
-    subtype Enumeration_Kind            is Entity_Kind range
-        E_Enumeration_Type ..
-        E_Enumeration_Subtype;
- 
-    subtype Entry_Kind                  is Entity_Kind range
-        E_Entry ..
-        E_Entry_Family;
- 
-    subtype Fixed_Point_Kind            is Entity_Kind range
-        E_Ordinary_Fixed_Point_Type ..
-    --  E_Ordinary_Fixed_Point_Subtype
-    --  E_Decimal_Fixed_Point_Type
-        E_Decimal_Fixed_Point_Subtype;
- 
-    subtype Float_Kind                  is Entity_Kind range
-        E_Floating_Point_Type ..
-        E_Floating_Point_Subtype;
- 
-    subtype Formal_Kind                 is Entity_Kind range
-        E_Out_Parameter ..
-    --  E_In_Out_Parameter
-        E_In_Parameter;
- 
-    subtype Formal_Object_Kind          is Entity_Kind range
-        E_Generic_In_Out_Parameter ..
-        E_Generic_In_Parameter;
- 
-    subtype Generic_Subprogram_Kind     is Entity_Kind range
-        E_Generic_Function ..
-        E_Generic_Procedure;
- 
-    subtype Generic_Unit_Kind           is Entity_Kind range
-        E_Generic_Function ..
-    --  E_Generic_Procedure
-        E_Generic_Package;
- 
-    subtype Incomplete_Kind             is Entity_Kind range
-        E_Incomplete_Type ..
-        E_Incomplete_Subtype;
- 
-    subtype Incomplete_Or_Private_Kind  is Entity_Kind range
-        E_Record_Type_With_Private ..
-    --  E_Record_Subtype_With_Private
-    --  E_Private_Type
-    --  E_Private_Subtype
-    --  E_Limited_Private_Type
-    --  E_Limited_Private_Subtype
-    --  E_Incomplete_Type
-        E_Incomplete_Subtype;
- 
-    subtype Integer_Kind                is Entity_Kind range
-        E_Signed_Integer_Type ..
-    --  E_Signed_Integer_Subtype
-    --  E_Modular_Integer_Type
-        E_Modular_Integer_Subtype;
- 
-    subtype Modular_Integer_Kind        is Entity_Kind range
-        E_Modular_Integer_Type ..
-        E_Modular_Integer_Subtype;
- 
-    subtype Named_Kind                  is Entity_Kind range
-        E_Named_Integer ..
-        E_Named_Real;
- 
-    subtype Numeric_Kind                is Entity_Kind range
-        E_Signed_Integer_Type ..
-    --  E_Signed_Integer_Subtype
-    --  E_Modular_Integer_Type
-    --  E_Modular_Integer_Subtype
-    --  E_Ordinary_Fixed_Point_Type
-    --  E_Ordinary_Fixed_Point_Subtype
-    --  E_Decimal_Fixed_Point_Type
-    --  E_Decimal_Fixed_Point_Subtype
-    --  E_Floating_Point_Type
-        E_Floating_Point_Subtype;
- 
-    subtype Object_Kind                 is Entity_Kind range
-        E_Component ..
-    --  E_Constant
-    --  E_Discriminant
-    --  E_Loop_Parameter
-    --  E_Variable
-    --  E_Out_Parameter
-    --  E_In_Out_Parameter
-    --  E_In_Parameter
-    --  E_Generic_In_Out_Parameter
-        E_Generic_In_Parameter;
- 
-    subtype Ordinary_Fixed_Point_Kind   is Entity_Kind range
-        E_Ordinary_Fixed_Point_Type ..
-        E_Ordinary_Fixed_Point_Subtype;
- 
-    subtype Overloadable_Kind           is Entity_Kind range
-        E_Enumeration_Literal ..
-    --  E_Function
-    --  E_Operator
-    --  E_Procedure
-    --  E_Abstract_State
-        E_Entry;
- 
-    subtype Private_Kind                is Entity_Kind range
-        E_Record_Type_With_Private ..
-    --  E_Record_Subtype_With_Private
-    --  E_Private_Type
-    --  E_Private_Subtype
-    --  E_Limited_Private_Type
-        E_Limited_Private_Subtype;
- 
-    subtype Protected_Kind              is Entity_Kind range
-        E_Protected_Type ..
-        E_Protected_Subtype;
- 
-    subtype Real_Kind                   is Entity_Kind range
-        E_Ordinary_Fixed_Point_Type ..
-    --  E_Ordinary_Fixed_Point_Subtype
-    --  E_Decimal_Fixed_Point_Type
-    --  E_Decimal_Fixed_Point_Subtype
-    --  E_Floating_Point_Type
-        E_Floating_Point_Subtype;
- 
-    subtype Record_Kind                 is Entity_Kind range
-        E_Class_Wide_Type ..
-    --  E_Class_Wide_Subtype
-    --  E_Record_Type
-    --  E_Record_Subtype
-    --  E_Record_Type_With_Private
-        E_Record_Subtype_With_Private;
- 
-    subtype Scalar_Kind                 is Entity_Kind range
-        E_Enumeration_Type ..
-    --  E_Enumeration_Subtype
-    --  E_Signed_Integer_Type
-    --  E_Signed_Integer_Subtype
-    --  E_Modular_Integer_Type
-    --  E_Modular_Integer_Subtype
-    --  E_Ordinary_Fixed_Point_Type
-    --  E_Ordinary_Fixed_Point_Subtype
-    --  E_Decimal_Fixed_Point_Type
-    --  E_Decimal_Fixed_Point_Subtype
-    --  E_Floating_Point_Type
-        E_Floating_Point_Subtype;
- 
-    subtype Subprogram_Kind             is Entity_Kind range
-        E_Function ..
-    --  E_Operator
-        E_Procedure;
- 
-    subtype Signed_Integer_Kind         is Entity_Kind range
-        E_Signed_Integer_Type ..
-        E_Signed_Integer_Subtype;
- 
-    subtype Task_Kind                   is Entity_Kind range
-        E_Task_Type ..
-        E_Task_Subtype;
- 
-    subtype Type_Kind                   is Entity_Kind range
-        E_Enumeration_Type ..
-    --  E_Enumeration_Subtype
-    --  E_Signed_Integer_Type
-    --  E_Signed_Integer_Subtype
-    --  E_Modular_Integer_Type
-    --  E_Modular_Integer_Subtype
-    --  E_Ordinary_Fixed_Point_Type
-    --  E_Ordinary_Fixed_Point_Subtype
-    --  E_Decimal_Fixed_Point_Type
-    --  E_Decimal_Fixed_Point_Subtype
-    --  E_Floating_Point_Type
-    --  E_Floating_Point_Subtype
-    --  E_Access_Type
-    --  E_Access_Subtype
-    --  E_Access_Attribute_Type
-    --  E_Allocator_Type,
-    --  E_General_Access_Type
-    --  E_Access_Subprogram_Type,
-    --  E_Access_Protected_Subprogram_Type
-    --  E_Anonymous_Access_Protected_Subprogram_Type
-    --  E_Anonymous_Access_Subprogram_Type
-    --  E_Anonymous_Access_Type
-    --  E_Array_Type
-    --  E_Array_Subtype
-    --  E_String_Literal_Subtype
-    --  E_Class_Wide_Subtype
-    --  E_Class_Wide_Type
-    --  E_Record_Type
-    --  E_Record_Subtype
-    --  E_Record_Type_With_Private
-    --  E_Record_Subtype_With_Private
-    --  E_Private_Type
-    --  E_Private_Subtype
-    --  E_Limited_Private_Type
-    --  E_Limited_Private_Subtype
-    --  E_Incomplete_Type
-    --  E_Incomplete_Subtype
-    --  E_Task_Type
-    --  E_Task_Subtype
-    --  E_Protected_Type
-    --  E_Protected_Subtype
-    --  E_Exception_Type
-        E_Subprogram_Type;
- 
     --------------------------------------------------------
     -- Description of Defined Attributes for Entity_Kinds --
     --------------------------------------------------------
--- 4864,4869 ----
*************** package Einfo is
*** 5610,5725 ****
  
     --    Ekind                               (Ekind)
  
!    --    Chars                               (Name1)
!    --    Next_Entity                         (Node2)
!    --    Scope                               (Node3)
!    --    Homonym                             (Node4)
!    --    Etype                               (Node5)
!    --    First_Rep_Item                      (Node6)
!    --    Freeze_Node                         (Node7)
!    --    Prev_Entity                         (Node36)
!    --    Associated_Entity                   (Node37)
  
!    --    Address_Taken                       (Flag104)
!    --    Can_Never_Be_Null                   (Flag38)
!    --    Checks_May_Be_Suppressed            (Flag31)
!    --    Debug_Info_Off                      (Flag166)
!    --    Has_Convention_Pragma               (Flag119)
!    --    Has_Delayed_Aspects                 (Flag200)
!    --    Has_Delayed_Freeze                  (Flag18)
!    --    Has_Fully_Qualified_Name            (Flag173)
!    --    Has_Gigi_Rep_Item                   (Flag82)
!    --    Has_Homonym                         (Flag56)
!    --    Has_Pragma_Elaborate_Body           (Flag150)
!    --    Has_Pragma_Inline                   (Flag157)
!    --    Has_Pragma_Inline_Always            (Flag230)
!    --    Has_Pragma_No_Inline                (Flag201)
!    --    Has_Pragma_Pure                     (Flag203)
!    --    Has_Pragma_Pure_Function            (Flag179)
!    --    Has_Pragma_Thread_Local_Storage     (Flag169)
!    --    Has_Pragma_Unmodified               (Flag233)
!    --    Has_Pragma_Unreferenced             (Flag180)
!    --    Has_Pragma_Unused                   (Flag294)
!    --    Has_Private_Declaration             (Flag155)
!    --    Has_Qualified_Name                  (Flag161)
!    --    Has_Stream_Size_Clause              (Flag184)
!    --    Has_Unknown_Discriminants           (Flag72)
!    --    Has_Xref_Entry                      (Flag182)
!    --    In_Private_Part                     (Flag45)
!    --    Is_Ada_2005_Only                    (Flag185)
!    --    Is_Ada_2012_Only                    (Flag199)
!    --    Is_Bit_Packed_Array                 (Flag122)  (base type only)
!    --    Is_Aliased                          (Flag15)
!    --    Is_Character_Type                   (Flag63)
!    --    Is_Checked_Ghost_Entity             (Flag277)
!    --    Is_Child_Unit                       (Flag73)
!    --    Is_Compilation_Unit                 (Flag149)
!    --    Is_Descendant_Of_Address            (Flag223)
!    --    Is_Discrim_SO_Function              (Flag176)
!    --    Is_Discriminant_Check_Function      (Flag264)
!    --    Is_Dispatch_Table_Entity            (Flag234)
!    --    Is_Dispatching_Operation            (Flag6)
!    --    Is_Entry_Formal                     (Flag52)
!    --    Is_Exported                         (Flag99)
!    --    Is_First_Subtype                    (Flag70)
!    --    Is_Formal_Subprogram                (Flag111)
!    --    Is_Generic_Instance                 (Flag130)
!    --    Is_Generic_Type                     (Flag13)
!    --    Is_Hidden                           (Flag57)
!    --    Is_Hidden_Open_Scope                (Flag171)
!    --    Is_Ignored_Ghost_Entity             (Flag278)
!    --    Is_Immediately_Visible              (Flag7)
!    --    Is_Implementation_Defined           (Flag254)
!    --    Is_Imported                         (Flag24)
!    --    Is_Inlined                          (Flag11)
!    --    Is_Internal                         (Flag17)
!    --    Is_Itype                            (Flag91)
!    --    Is_Known_Non_Null                   (Flag37)
!    --    Is_Known_Null                       (Flag204)
!    --    Is_Known_Valid                      (Flag170)
!    --    Is_Limited_Composite                (Flag106)
!    --    Is_Limited_Record                   (Flag25)
!    --    Is_Loop_Parameter                   (Flag307)
!    --    Is_Obsolescent                      (Flag153)
!    --    Is_Package_Body_Entity              (Flag160)
!    --    Is_Packed_Array_Impl_Type           (Flag138)
!    --    Is_Potentially_Use_Visible          (Flag9)
!    --    Is_Preelaborated                    (Flag59)
!    --    Is_Primitive_Wrapper                (Flag195)
!    --    Is_Public                           (Flag10)
!    --    Is_Pure                             (Flag44)
!    --    Is_Remote_Call_Interface            (Flag62)
!    --    Is_Remote_Types                     (Flag61)
!    --    Is_Renaming_Of_Object               (Flag112)
!    --    Is_Shared_Passive                   (Flag60)
!    --    Is_Statically_Allocated             (Flag28)
!    --    Is_Static_Type                      (Flag281)
!    --    Is_Tagged_Type                      (Flag55)
!    --    Is_Thunk                            (Flag225)
!    --    Is_Trivial_Subprogram               (Flag235)
!    --    Is_Unchecked_Union                  (Flag117)
!    --    Is_Unimplemented                    (Flag284)
!    --    Is_Visible_Formal                   (Flag206)
!    --    Kill_Elaboration_Checks             (Flag32)
!    --    Kill_Range_Checks                   (Flag33)
!    --    Low_Bound_Tested                    (Flag205)
!    --    Materialize_Entity                  (Flag168)
!    --    Needs_Debug_Info                    (Flag147)
!    --    Never_Set_In_Source                 (Flag115)
!    --    No_Return                           (Flag113)
!    --    Overlays_Constant                   (Flag243)
!    --    Referenced                          (Flag156)
!    --    Referenced_As_LHS                   (Flag36)
!    --    Referenced_As_Out_Parameter         (Flag227)
!    --    Suppress_Elaboration_Warnings       (Flag303)
!    --    Suppress_Style_Checks               (Flag165)
!    --    Suppress_Value_Tracking_On_Call     (Flag217)
!    --    Used_As_Generic_Actual              (Flag222)
!    --    Warnings_Off                        (Flag96)
!    --    Warnings_Off_Used                   (Flag236)
!    --    Warnings_Off_Used_Unmodified        (Flag237)
!    --    Warnings_Off_Used_Unreferenced      (Flag238)
!    --    Was_Hidden                          (Flag196)
  
     --    Declaration_Node                    (synth)
     --    Has_Foreign_Convention              (synth)
--- 4878,4995 ----
  
     --    Ekind                               (Ekind)
  
!    --    Chars
!    --    Next_Entity
!    --    Scope
!    --    Homonym
!    --    Etype
!    --    First_Rep_Item
!    --    Freeze_Node
!    --    Prev_Entity
!    --    Associated_Entity
  
!    --    Address_Taken
!    --    Can_Never_Be_Null
!    --    Checks_May_Be_Suppressed
!    --    Debug_Info_Off
!    --    Has_Convention_Pragma
!    --    Has_Delayed_Aspects
!    --    Has_Delayed_Freeze
!    --    Has_Fully_Qualified_Name
!    --    Has_Gigi_Rep_Item
!    --    Has_Homonym
!    --    Has_Pragma_Elaborate_Body
!    --    Has_Pragma_Inline
!    --    Has_Pragma_Inline_Always
!    --    Has_Pragma_No_Inline
!    --    Has_Pragma_Pure
!    --    Has_Pragma_Pure_Function
!    --    Has_Pragma_Thread_Local_Storage
!    --    Has_Pragma_Unmodified
!    --    Has_Pragma_Unreferenced
!    --    Has_Pragma_Unused
!    --    Has_Private_Declaration
!    --    Has_Qualified_Name
!    --    Has_Stream_Size_Clause
!    --    Has_Unknown_Discriminants
!    --    Has_Xref_Entry
!    --    In_Private_Part
!    --    Is_Ada_2005_Only
!    --    Is_Ada_2012_Only
!    --    Is_Ada_2022_Only
!    --    Is_Bit_Packed_Array                  (base type only)
!    --    Is_Aliased
!    --    Is_Character_Type
!    --    Is_Checked_Ghost_Entity
!    --    Is_Child_Unit
!    --    Is_Compilation_Unit
!    --    Is_Descendant_Of_Address
!    --    Is_Discrim_SO_Function
!    --    Is_Discriminant_Check_Function
!    --    Is_Dispatch_Table_Entity
!    --    Is_Dispatch_Table_Wrapper
!    --    Is_Dispatching_Operation
!    --    Is_Entry_Formal
!    --    Is_Exported
!    --    Is_First_Subtype
!    --    Is_Formal_Subprogram
!    --    Is_Generic_Instance
!    --    Is_Generic_Type
!    --    Is_Hidden
!    --    Is_Hidden_Open_Scope
!    --    Is_Ignored_Ghost_Entity
!    --    Is_Immediately_Visible
!    --    Is_Implementation_Defined
!    --    Is_Imported
!    --    Is_Inlined
!    --    Is_Internal
!    --    Is_Itype
!    --    Is_Known_Non_Null
!    --    Is_Known_Null
!    --    Is_Known_Valid
!    --    Is_Limited_Composite
!    --    Is_Limited_Record
!    --    Is_Loop_Parameter
!    --    Is_Obsolescent
!    --    Is_Package_Body_Entity
!    --    Is_Packed_Array_Impl_Type
!    --    Is_Potentially_Use_Visible
!    --    Is_Preelaborated
!    --    Is_Primitive_Wrapper
!    --    Is_Public
!    --    Is_Pure
!    --    Is_Remote_Call_Interface
!    --    Is_Remote_Types
!    --    Is_Renaming_Of_Object
!    --    Is_Shared_Passive
!    --    Is_Statically_Allocated
!    --    Is_Static_Type
!    --    Is_Tagged_Type
!    --    Is_Thunk
!    --    Is_Trivial_Subprogram
!    --    Is_Unchecked_Union
!    --    Is_Unimplemented
!    --    Is_Visible_Formal
!    --    Kill_Elaboration_Checks
!    --    Kill_Range_Checks
!    --    Low_Bound_Tested
!    --    Materialize_Entity
!    --    Needs_Debug_Info
!    --    Never_Set_In_Source
!    --    No_Return
!    --    Overlays_Constant
!    --    Referenced
!    --    Referenced_As_LHS
!    --    Referenced_As_Out_Parameter
!    --    Suppress_Elaboration_Warnings
!    --    Suppress_Style_Checks
!    --    Suppress_Value_Tracking_On_Call
!    --    Used_As_Generic_Actual
!    --    Warnings_Off
!    --    Warnings_Off_Used
!    --    Warnings_Off_Used_Unmodified
!    --    Warnings_Off_Used_Unreferenced
!    --    Was_Hidden
  
     --    Declaration_Node                    (synth)
     --    Has_Foreign_Convention              (synth)
*************** package Einfo is
*** 5734,5828 ****
     --  types and subtypes. References to this list appear subsequently as
     --  "(plus type attributes)" for each appropriate Entity_Kind.
  
!    --    Associated_Node_For_Itype           (Node8)
!    --    Class_Wide_Type                     (Node9)
!    --    Full_View                           (Node11)
!    --    Esize                               (Uint12)
!    --    RM_Size                             (Uint13)
!    --    Alignment                           (Uint14)
!    --    Pending_Access_Types                (Elist15)
!    --    Related_Expression                  (Node24)
!    --    Current_Use_Clause                  (Node27)
!    --    Subprograms_For_Type                (Elist29)
!    --    Derived_Type_Link                   (Node31)
!    --    No_Tagged_Streams_Pragma            (Node32)
!    --    Linker_Section_Pragma               (Node33)
!    --    SPARK_Pragma                        (Node40)
  
!    --    Depends_On_Private                  (Flag14)
!    --    Disable_Controlled                  (Flag253)
!    --    Discard_Names                       (Flag88)
!    --    Finalize_Storage_Only               (Flag158)  (base type only)
!    --    From_Limited_With                   (Flag159)
!    --    Has_Aliased_Components              (Flag135)  (base type only)
!    --    Has_Alignment_Clause                (Flag46)
!    --    Has_Atomic_Components               (Flag86)   (base type only)
!    --    Has_Completion_In_Body              (Flag71)
!    --    Has_Complex_Representation          (Flag140)  (base type only)
!    --    Has_Constrained_Partial_View        (Flag187)
!    --    Has_Controlled_Component            (Flag43)   (base type only)
!    --    Has_Default_Aspect                  (Flag39)   (base type only)
!    --    Has_Delayed_Rep_Aspects             (Flag261)
!    --    Has_Discriminants                   (Flag5)
!    --    Has_Dynamic_Predicate_Aspect        (Flag258)
!    --    Has_Independent_Components          (Flag34)   (base type only)
!    --    Has_Inheritable_Invariants          (Flag248)  (base type only)
!    --    Has_Inherited_DIC                   (Flag133)  (base type only)
!    --    Has_Inherited_Invariants            (Flag291)  (base type only)
!    --    Has_Non_Standard_Rep                (Flag75)   (base type only)
!    --    Has_Object_Size_Clause              (Flag172)
!    --    Has_Own_DIC                         (Flag3)    (base type only)
!    --    Has_Own_Invariants                  (Flag232)  (base type only)
!    --    Has_Pragma_Preelab_Init             (Flag221)
!    --    Has_Pragma_Unreferenced_Objects     (Flag212)
!    --    Has_Predicates                      (Flag250)
!    --    Has_Primitive_Operations            (Flag120)  (base type only)
!    --    Has_Protected                       (Flag271)  (base type only)
!    --    Has_Size_Clause                     (Flag29)
!    --    Has_Specified_Layout                (Flag100)  (base type only)
!    --    Has_Specified_Stream_Input          (Flag190)
!    --    Has_Specified_Stream_Output         (Flag191)
!    --    Has_Specified_Stream_Read           (Flag192)
!    --    Has_Specified_Stream_Write          (Flag193)
!    --    Has_Static_Predicate                (Flag269)
!    --    Has_Static_Predicate_Aspect         (Flag259)
!    --    Has_Task                            (Flag30)   (base type only)
!    --    Has_Timing_Event                    (Flag289)  (base type only)
!    --    Has_Unchecked_Union                 (Flag123)  (base type only)
!    --    Has_Volatile_Components             (Flag87)   (base type only)
!    --    In_Use                              (Flag8)
!    --    Is_Abstract_Type                    (Flag146)
!    --    Is_Asynchronous                     (Flag81)
!    --    Is_Atomic                           (Flag85)
!    --    Is_Constr_Subt_For_U_Nominal        (Flag80)
!    --    Is_Constr_Subt_For_UN_Aliased       (Flag141)
!    --    Is_Controlled_Active                (Flag42)   (base type only)
!    --    Is_Eliminated                       (Flag124)
!    --    Is_Frozen                           (Flag4)
!    --    Is_Generic_Actual_Type              (Flag94)
!    --    Is_Independent                      (Flag268)
!    --    Is_Non_Static_Subtype               (Flag109)
!    --    Is_Packed                           (Flag51)   (base type only)
!    --    Is_Private_Composite                (Flag107)
!    --    Is_RACW_Stub_Type                   (Flag244)
!    --    Is_Unsigned_Type                    (Flag144)
!    --    Is_Volatile                         (Flag16)
!    --    Is_Volatile_Full_Access             (Flag285)
!    --    Itype_Printed                       (Flag202)  (itypes only)
!    --    Known_To_Have_Preelab_Init          (Flag207)
!    --    May_Inherit_Delayed_Rep_Aspects     (Flag262)
!    --    Must_Be_On_Byte_Boundary            (Flag183)
!    --    Must_Have_Preelab_Init              (Flag208)
!    --    Optimize_Alignment_Space            (Flag241)
!    --    Optimize_Alignment_Time             (Flag242)
!    --    Partial_View_Has_Unknown_Discr      (Flag280)
!    --    Size_Depends_On_Discriminant        (Flag177)
!    --    Size_Known_At_Compile_Time          (Flag92)
!    --    SPARK_Pragma_Inherited              (Flag265)
!    --    Strict_Alignment                    (Flag145)  (base type only)
!    --    Suppress_Initialization             (Flag105)
!    --    Treat_As_Volatile                   (Flag41)
!    --    Universal_Aliasing                  (Flag216)  (impl base type only)
  
     --    Alignment_Clause                    (synth)
     --    Base_Type                           (synth)
--- 5004,5098 ----
     --  types and subtypes. References to this list appear subsequently as
     --  "(plus type attributes)" for each appropriate Entity_Kind.
  
!    --    Associated_Node_For_Itype
!    --    Class_Wide_Type
!    --    Full_View
!    --    Esize
!    --    RM_Size
!    --    Alignment
!    --    Pending_Access_Types
!    --    Related_Expression
!    --    Current_Use_Clause
!    --    Subprograms_For_Type
!    --    Derived_Type_Link
!    --    No_Tagged_Streams_Pragma
!    --    Linker_Section_Pragma
!    --    SPARK_Pragma
  
!    --    Depends_On_Private
!    --    Disable_Controlled
!    --    Discard_Names
!    --    Finalize_Storage_Only                (base type only)
!    --    From_Limited_With
!    --    Has_Aliased_Components               (base type only)
!    --    Has_Alignment_Clause
!    --    Has_Atomic_Components                (base type only)
!    --    Has_Completion_In_Body
!    --    Has_Complex_Representation           (base type only)
!    --    Has_Constrained_Partial_View
!    --    Has_Controlled_Component             (base type only)
!    --    Has_Default_Aspect                   (base type only)
!    --    Has_Delayed_Rep_Aspects
!    --    Has_Discriminants
!    --    Has_Dynamic_Predicate_Aspect
!    --    Has_Independent_Components           (base type only)
!    --    Has_Inheritable_Invariants           (base type only)
!    --    Has_Inherited_DIC                    (base type only)
!    --    Has_Inherited_Invariants             (base type only)
!    --    Has_Non_Standard_Rep                 (base type only)
!    --    Has_Object_Size_Clause
!    --    Has_Own_DIC                          (base type only)
!    --    Has_Own_Invariants                   (base type only)
!    --    Has_Pragma_Preelab_Init
!    --    Has_Pragma_Unreferenced_Objects
!    --    Has_Predicates
!    --    Has_Primitive_Operations             (base type only)
!    --    Has_Protected                        (base type only)
!    --    Has_Size_Clause
!    --    Has_Specified_Layout                 (base type only)
!    --    Has_Specified_Stream_Input
!    --    Has_Specified_Stream_Output
!    --    Has_Specified_Stream_Read
!    --    Has_Specified_Stream_Write
!    --    Has_Static_Predicate
!    --    Has_Static_Predicate_Aspect
!    --    Has_Task                             (base type only)
!    --    Has_Timing_Event                     (base type only)
!    --    Has_Unchecked_Union                  (base type only)
!    --    Has_Volatile_Components              (base type only)
!    --    In_Use
!    --    Is_Abstract_Type
!    --    Is_Asynchronous
!    --    Is_Atomic
!    --    Is_Constr_Subt_For_U_Nominal
!    --    Is_Constr_Subt_For_UN_Aliased
!    --    Is_Controlled_Active                 (base type only)
!    --    Is_Eliminated
!    --    Is_Frozen
!    --    Is_Generic_Actual_Type
!    --    Is_Independent
!    --    Is_Non_Static_Subtype
!    --    Is_Packed                            (base type only)
!    --    Is_Private_Composite
!    --    Is_RACW_Stub_Type
!    --    Is_Unsigned_Type
!    --    Is_Volatile
!    --    Is_Volatile_Full_Access
!    --    Itype_Printed                        (itypes only)
!    --    Known_To_Have_Preelab_Init
!    --    May_Inherit_Delayed_Rep_Aspects
!    --    Must_Be_On_Byte_Boundary
!    --    Must_Have_Preelab_Init
!    --    Optimize_Alignment_Space
!    --    Optimize_Alignment_Time
!    --    Partial_View_Has_Unknown_Discr
!    --    Size_Depends_On_Discriminant
!    --    Size_Known_At_Compile_Time
!    --    SPARK_Pragma_Inherited
!    --    Strict_Alignment                     (base type only)
!    --    Suppress_Initialization
!    --    Treat_As_Volatile
!    --    Universal_Aliasing                   (impl base type only)
  
     --    Alignment_Clause                    (synth)
     --    Base_Type                           (synth)
*************** package Einfo is
*** 5846,5862 ****
     -- Applicable attributes by entity kind --
     ------------------------------------------
  
     --  E_Abstract_State
!    --    Refinement_Constituents             (Elist8)
!    --    Part_Of_Constituents                (Elist10)
!    --    Body_References                     (Elist16)
!    --    Non_Limited_View                    (Node19)
!    --    Encapsulating_State                 (Node32)
!    --    SPARK_Pragma                        (Node40)
!    --    From_Limited_With                   (Flag159)
!    --    Has_Partial_Visible_Refinement      (Flag296)
!    --    Has_Visible_Refinement              (Flag263)
!    --    SPARK_Pragma_Inherited              (Flag265)
     --    Has_Non_Limited_View                (synth)
     --    Has_Non_Null_Visible_Refinement     (synth)
     --    Has_Null_Visible_Refinement         (synth)
--- 5116,5137 ----
     -- Applicable attributes by entity kind --
     ------------------------------------------
  
+    --  In the conversion to variable-sized nodes and entities, a number of
+    --  discrepancies were noticed. They are documented in comments, and marked
+    --  with "$$$".
+ 
     --  E_Abstract_State
!    --    Refinement_Constituents
!    --    Part_Of_Constituents
!    --    Body_References
!    --    Non_Limited_View
!    --    Encapsulating_State
!    --    SPARK_Pragma
!    --    From_Limited_With
!    --    Has_Partial_Visible_Refinement
!    --    Has_Visible_Refinement
!    --    SPARK_Pragma_Inherited
!    --    First_Entity $$$
     --    Has_Non_Limited_View                (synth)
     --    Has_Non_Null_Visible_Refinement     (synth)
     --    Has_Null_Visible_Refinement         (synth)
*************** package Einfo is
*** 5867,6883 ****
     --    Partial_Refinement_Constituents     (synth)
  
     --  E_Access_Protected_Subprogram_Type
!    --    Equivalent_Type                     (Node18)
!    --    Directly_Designated_Type            (Node20)
!    --    Needs_No_Actuals                    (Flag22)
!    --    Can_Use_Internal_Rep                (Flag229)
     --    (plus type attributes)
  
     --  E_Access_Subprogram_Type
!    --    Equivalent_Type                     (Node18)   (remote types only)
!    --    Directly_Designated_Type            (Node20)
!    --    Needs_No_Actuals                    (Flag22)
!    --    Original_Access_Type                (Node28)
!    --    Can_Use_Internal_Rep                (Flag229)
!    --    Needs_Activation_Record             (Flag306)
     --    (plus type attributes)
  
     --  E_Access_Type
     --  E_Access_Subtype
!    --    Master_Id                           (Node17)
!    --    Directly_Designated_Type            (Node20)
!    --    Associated_Storage_Pool             (Node22)   (base type only)
!    --    Finalization_Master                 (Node23)   (base type only)
!    --    Storage_Size_Variable               (Node26)   (base type only)
!    --    Has_Pragma_Controlled               (Flag27)   (base type only)
!    --    Has_Storage_Size_Clause             (Flag23)   (base type only)
!    --    Is_Access_Constant                  (Flag69)
!    --    Is_Local_Anonymous_Access           (Flag194)
!    --    Is_Pure_Unit_Access_Type            (Flag189)
!    --    No_Pool_Assigned                    (Flag131)  (base type only)
!    --    No_Strict_Aliasing                  (Flag136)  (base type only)
!    --    Is_Param_Block_Component_Type       (Flag215)  (base type only)
     --    (plus type attributes)
  
     --  E_Access_Attribute_Type
!    --    Directly_Designated_Type            (Node20)
     --    (plus type attributes)
  
     --  E_Allocator_Type
!    --    Directly_Designated_Type            (Node20)
     --    (plus type attributes)
  
     --  E_Anonymous_Access_Subprogram_Type
     --  E_Anonymous_Access_Protected_Subprogram_Type
!    --    Directly_Designated_Type            (Node20)
!    --    Storage_Size_Variable               (Node26)   ??? is this needed ???
!    --    Can_Use_Internal_Rep                (Flag229)
!    --    Needs_Activation_Record             (Flag306)
     --    (plus type attributes)
  
     --  E_Anonymous_Access_Type
!    --    Directly_Designated_Type            (Node20)
!    --    Finalization_Master                 (Node23)
!    --    Storage_Size_Variable               (Node26)   ??? is this needed ???
     --    (plus type attributes)
  
     --  E_Array_Type
     --  E_Array_Subtype
!    --    First_Index                         (Node17)
!    --    Default_Aspect_Component_Value      (Node19)   (base type only)
!    --    Component_Type                      (Node20)   (base type only)
!    --    Original_Array_Type                 (Node21)
!    --    Component_Size                      (Uint22)   (base type only)
!    --    Packed_Array_Impl_Type              (Node23)
!    --    Related_Array_Object                (Node25)
!    --    Predicated_Parent                   (Node38)   (subtype only)
!    --    Component_Alignment                 (special)  (base type only)
!    --    Has_Component_Size_Clause           (Flag68)   (base type only)
!    --    Has_Pragma_Pack                     (Flag121)  (impl base type only)
!    --    Is_Constrained                      (Flag12)
!    --    Reverse_Storage_Order               (Flag93)   (base type only)
!    --    SSO_Set_High_By_Default             (Flag273)  (base type only)
!    --    SSO_Set_Low_By_Default              (Flag272)  (base type only)
!    --    Next_Index                          (synth)
!    --    Number_Dimensions                   (synth)
     --    (plus type attributes)
  
     --  E_Block
!    --    Return_Applies_To                   (Node8)
!    --    Block_Node                          (Node11)
!    --    First_Entity                        (Node17)
!    --    Last_Entity                         (Node20)
!    --    Scope_Depth_Value                   (Uint22)
!    --    Entry_Cancel_Parameter              (Node23)
!    --    Contains_Ignored_Ghost_Code         (Flag279)
!    --    Delay_Cleanups                      (Flag114)
!    --    Discard_Names                       (Flag88)
!    --    Has_Master_Entity                   (Flag21)
!    --    Has_Nested_Block_With_Handler       (Flag101)
!    --    Is_Exception_Handler                (Flag286)
!    --    Sec_Stack_Needed_For_Return         (Flag167)
!    --    Uses_Sec_Stack                      (Flag95)
     --    Scope_Depth                         (synth)
  
     --  E_Class_Wide_Type
     --  E_Class_Wide_Subtype
!    --    Direct_Primitive_Operations         (Elist10)
!    --    Cloned_Subtype                      (Node16)   (subtype case only)
!    --    First_Entity                        (Node17)
!    --    Equivalent_Type                     (Node18)   (always Empty for type)
!    --    Non_Limited_View                    (Node19)
!    --    Last_Entity                         (Node20)
!    --    SSO_Set_High_By_Default             (Flag273)  (base type only)
!    --    SSO_Set_Low_By_Default              (Flag272)  (base type only)
!    --    First_Component                     (synth)
!    --    First_Component_Or_Discriminant     (synth)
!    --    Has_Non_Limited_View                (synth)
     --    (plus type attributes)
  
     --  E_Component
!    --    Normalized_First_Bit                (Uint8)
!    --    Current_Value                       (Node9)    (always Empty)
!    --    Normalized_Position_Max             (Uint10)
!    --    Component_Bit_Offset                (Uint11)
!    --    Esize                               (Uint12)
!    --    Component_Clause                    (Node13)
!    --    Normalized_Position                 (Uint14)
!    --    DT_Entry_Count                      (Uint15)
!    --    Entry_Formal                        (Node16)
!    --    Prival                              (Node17)
!    --    Renamed_Object                      (Node18)   (always Empty)
!    --    Discriminant_Checking_Func          (Node20)
!    --    Corresponding_Record_Component      (Node21)
!    --    Original_Record_Component           (Node22)
!    --    DT_Offset_To_Top_Func               (Node25)
!    --    Related_Type                        (Node27)
!    --    Has_Biased_Representation           (Flag139)
!    --    Has_Per_Object_Constraint           (Flag154)
!    --    Is_Atomic                           (Flag85)
!    --    Is_Independent                      (Flag268)
!    --    Is_Return_Object                    (Flag209)
!    --    Is_Tag                              (Flag78)
!    --    Is_Volatile                         (Flag16)
!    --    Is_Volatile_Full_Access             (Flag285)
!    --    Treat_As_Volatile                   (Flag41)
     --    Is_Full_Access                      (synth)
     --    Next_Component                      (synth)
     --    Next_Component_Or_Discriminant      (synth)
  
     --  E_Constant
     --  E_Loop_Parameter
!    --    Current_Value                       (Node9)    (always Empty)
!    --    Discriminal_Link                    (Node10)
!    --    Full_View                           (Node11)
!    --    Esize                               (Uint12)
!    --    Extra_Accessibility                 (Node13)   (constants only)
!    --    Alignment                           (Uint14)
!    --    Status_Flag_Or_Transient_Decl       (Node15)
!    --    Actual_Subtype                      (Node17)
!    --    Renamed_Object                      (Node18)
!    --    Size_Check_Code                     (Node19)   (constants only)
!    --    Prival_Link                         (Node20)   (privals only)
!    --    Interface_Name                      (Node21)   (constants only)
!    --    Related_Type                        (Node27)   (constants only)
!    --    Initialization_Statements           (Node28)
!    --    BIP_Initialization_Call             (Node29)
!    --    Last_Aggregate_Assignment           (Node30)
!    --    Activation_Record_Component         (Node31)
!    --    Encapsulating_State                 (Node32)   (constants only)
!    --    Linker_Section_Pragma               (Node33)
!    --    Contract                            (Node34)   (constants only)
!    --    SPARK_Pragma                        (Node40)   (constants only)
!    --    Has_Alignment_Clause                (Flag46)
!    --    Has_Atomic_Components               (Flag86)
!    --    Has_Biased_Representation           (Flag139)
!    --    Has_Completion                      (Flag26)   (constants only)
!    --    Has_Independent_Components          (Flag34)
!    --    Has_Size_Clause                     (Flag29)
!    --    Has_Thunks                          (Flag228)  (constants only)
!    --    Has_Volatile_Components             (Flag87)
!    --    Is_Atomic                           (Flag85)
!    --    Is_Elaboration_Checks_OK_Id         (Flag148)  (constants only)
!    --    Is_Elaboration_Warnings_OK_Id       (Flag304)  (constants only)
!    --    Is_Eliminated                       (Flag124)
!    --    Is_Finalized_Transient              (Flag252)
!    --    Is_Ignored_Transient                (Flag295)
!    --    Is_Independent                      (Flag268)
!    --    Is_Return_Object                    (Flag209)
!    --    Is_True_Constant                    (Flag163)
!    --    Is_Uplevel_Referenced_Entity        (Flag283)
!    --    Is_Volatile                         (Flag16)
!    --    Is_Volatile_Full_Access             (Flag285)
!    --    Optimize_Alignment_Space            (Flag241)  (constants only)
!    --    Optimize_Alignment_Time             (Flag242)  (constants only)
!    --    SPARK_Pragma_Inherited              (Flag265)  (constants only)
!    --    Stores_Attribute_Old_Prefix         (Flag270)  (constants only)
!    --    Treat_As_Volatile                   (Flag41)
!    --    Address_Clause                      (synth)
!    --    Alignment_Clause                    (synth)
!    --    Is_Elaboration_Target               (synth)
!    --    Is_Full_Access                      (synth)
!    --    Size_Clause                         (synth)
  
     --  E_Decimal_Fixed_Point_Type
!    --  E_Decimal_Fixed_Subtype
!    --    Scale_Value                         (Uint16)
!    --    Digits_Value                        (Uint17)
!    --    Scalar_Range                        (Node20)
!    --    Delta_Value                         (Ureal18)
!    --    Small_Value                         (Ureal21)
!    --    Static_Real_Or_String_Predicate     (Node25)
!    --    Has_Machine_Radix_Clause            (Flag83)
!    --    Machine_Radix_10                    (Flag84)
     --    Aft_Value                           (synth)
     --    Type_Low_Bound                      (synth)
     --    Type_High_Bound                     (synth)
     --    (plus type attributes)
  
     --  E_Discriminant
!    --    Normalized_First_Bit                (Uint8)
!    --    Current_Value                       (Node9)    (always Empty)
!    --    Normalized_Position_Max             (Uint10)
!    --    Component_Bit_Offset                (Uint11)
!    --    Esize                               (Uint12)
!    --    Component_Clause                    (Node13)
!    --    Normalized_Position                 (Uint14)
!    --    Discriminant_Number                 (Uint15)
!    --    Discriminal                         (Node17)
!    --    Renamed_Object                      (Node18)   (always Empty)
!    --    Corresponding_Discriminant          (Node19)
!    --    Discriminant_Default_Value          (Node20)
!    --    Corresponding_Record_Component      (Node21)
!    --    Original_Record_Component           (Node22)
!    --    CR_Discriminant                     (Node23)
!    --    Is_Completely_Hidden                (Flag103)
!    --    Is_Return_Object                    (Flag209)
     --    Next_Component_Or_Discriminant      (synth)
     --    Next_Discriminant                   (synth)
     --    Next_Stored_Discriminant            (synth)
  
     --  E_Entry
     --  E_Entry_Family
!    --    Protected_Body_Subprogram           (Node11)
!    --    Barrier_Function                    (Node12)
!    --    Elaboration_Entity                  (Node13)
!    --    Postconditions_Proc                 (Node14)
!    --    Entry_Parameters_Type               (Node15)
!    --    First_Entity                        (Node17)
!    --    Alias                               (Node18)   (for entry only. Empty)
!    --    Last_Entity                         (Node20)
!    --    Accept_Address                      (Elist21)
!    --    Scope_Depth_Value                   (Uint22)
!    --    Protection_Object                   (Node23)   (protected kind)
!    --    Contract_Wrapper                    (Node25)
!    --    Extra_Formals                       (Node28)
!    --    Contract                            (Node34)
!    --    SPARK_Pragma                        (Node40)   (protected kind)
!    --    Default_Expressions_Processed       (Flag108)
!    --    Entry_Accepted                      (Flag152)
!    --    Has_Yield_Aspect                    (Flag308)
!    --    Has_Expanded_Contract               (Flag240)
!    --    Ignore_SPARK_Mode_Pragmas           (Flag301)
!    --    Is_Elaboration_Checks_OK_Id         (Flag148)
!    --    Is_Elaboration_Warnings_OK_Id       (Flag304)
!    --    Is_Entry_Wrapper                    (Flag297)
!    --    Needs_No_Actuals                    (Flag22)
!    --    Sec_Stack_Needed_For_Return         (Flag167)
!    --    SPARK_Pragma_Inherited              (Flag265)  (protected kind)
!    --    Uses_Sec_Stack                      (Flag95)
!    --    Address_Clause                      (synth)
!    --    Entry_Index_Type                    (synth)
!    --    First_Formal                        (synth)
!    --    First_Formal_With_Extras            (synth)
!    --    Is_Elaboration_Target               (synth)
!    --    Last_Formal                         (synth)
!    --    Number_Formals                      (synth)
!    --    Scope_Depth                         (synth)
  
     --  E_Entry_Index_Parameter
!    --    Entry_Index_Constant                (Node18)
  
     --  E_Enumeration_Literal
!    --    Enumeration_Pos                     (Uint11)
!    --    Enumeration_Rep                     (Uint12)
!    --    Alias                               (Node18)
!    --    Enumeration_Rep_Expr                (Node22)
!    --    Next_Literal                        (synth)
  
     --  E_Enumeration_Type
     --  E_Enumeration_Subtype
!    --    Lit_Strings                         (Node16)   (root type only)
!    --    First_Literal                       (Node17)
!    --    Lit_Indexes                         (Node18)   (root type only)
!    --    Default_Aspect_Value                (Node19)   (base type only)
!    --    Scalar_Range                        (Node20)
!    --    Enum_Pos_To_Rep                     (Node23)   (type only)
!    --    Static_Discrete_Predicate           (List25)
!    --    Has_Biased_Representation           (Flag139)
!    --    Has_Contiguous_Rep                  (Flag181)
!    --    Has_Enumeration_Rep_Clause          (Flag66)
!    --    Has_Pragma_Ordered                  (Flag198)  (base type only)
!    --    Nonzero_Is_True                     (Flag162)  (base type only)
!    --    No_Predicate_On_Actual              (Flag275)
!    --    No_Dynamic_Predicate_On_Actual      (Flag276)
!    --    Type_Low_Bound                      (synth)
!    --    Type_High_Bound                     (synth)
     --    (plus type attributes)
  
     --  E_Exception
!    --    Esize                               (Uint12)
!    --    Alignment                           (Uint14)
!    --    Renamed_Entity                      (Node18)
!    --    Register_Exception_Call             (Node20)
!    --    Interface_Name                      (Node21)
!    --    Activation_Record_Component         (Node31)
!    --    Discard_Names                       (Flag88)
!    --    Is_Raised                           (Flag224)
  
     --  E_Exception_Type
!    --    Equivalent_Type                     (Node18)
     --    (plus type attributes)
  
     --  E_Floating_Point_Type
     --  E_Floating_Point_Subtype
!    --    Digits_Value                        (Uint17)
!    --    Float_Rep                           (Uint10)   (Float_Rep_Kind)
!    --    Default_Aspect_Value                (Node19)   (base type only)
!    --    Scalar_Range                        (Node20)
!    --    Static_Real_Or_String_Predicate     (Node25)
!    --    Machine_Emax_Value                  (synth)
!    --    Machine_Emin_Value                  (synth)
!    --    Machine_Mantissa_Value              (synth)
!    --    Machine_Radix_Value                 (synth)
!    --    Model_Emin_Value                    (synth)
!    --    Model_Epsilon_Value                 (synth)
!    --    Model_Mantissa_Value                (synth)
!    --    Model_Small_Value                   (synth)
!    --    Safe_Emax_Value                     (synth)
!    --    Safe_First_Value                    (synth)
!    --    Safe_Last_Value                     (synth)
!    --    Type_Low_Bound                      (synth)
!    --    Type_High_Bound                     (synth)
     --    (plus type attributes)
  
     --  E_Function
     --  E_Generic_Function
!    --    Mechanism                           (Uint8)    (Mechanism_Type)
!    --    Renaming_Map                        (Uint9)
!    --    Handler_Records                     (List10)   (non-generic case only)
!    --    Protected_Body_Subprogram           (Node11)
!    --    Next_Inlined_Subprogram             (Node12)
!    --    Elaboration_Entity                  (Node13)   (not implicit /=)
!    --    Postconditions_Proc                 (Node14)   (non-generic case only)
!    --    DT_Position                         (Uint15)
!    --    DTC_Entity                          (Node16)
!    --    First_Entity                        (Node17)
!    --    Alias                               (Node18)   (non-generic case only)
!    --    Renamed_Entity                      (Node18)
!    --    Extra_Accessibility_Of_Result       (Node19)   (non-generic case only)
!    --    Last_Entity                         (Node20)
!    --    Interface_Name                      (Node21)
!    --    Scope_Depth_Value                   (Uint22)
!    --    Generic_Renamings                   (Elist23)  (for an instance)
!    --    Inner_Instances                     (Elist23)  (generic case only)
!    --    Protection_Object                   (Node23)   (for concurrent kind)
!    --    Subps_Index                         (Uint24)   (non-generic case only)
!    --    Interface_Alias                     (Node25)
!    --    Overridden_Operation                (Node26)
!    --    Wrapped_Entity                      (Node27)   (non-generic case only)
!    --    Extra_Formals                       (Node28)
!    --    Anonymous_Masters                   (Elist29)  (non-generic case only)
!    --    Corresponding_Equality              (Node30)   (implicit /= only)
!    --    Thunk_Entity                        (Node31)   (thunk case only)
!    --    Corresponding_Procedure             (Node32)   (generate C code only)
!    --    Linker_Section_Pragma               (Node33)
!    --    Contract                            (Node34)
!    --    Import_Pragma                       (Node35)   (non-generic case only)
!    --    Class_Wide_Clone                    (Node38)
!    --    Protected_Subprogram                (Node39)   (non-generic case only)
!    --    SPARK_Pragma                        (Node40)
!    --    Original_Protected_Subprogram       (Node41)
!    --    Body_Needed_For_SAL                 (Flag40)
!    --    Contains_Ignored_Ghost_Code         (Flag279)
!    --    Default_Expressions_Processed       (Flag108)
!    --    Delay_Cleanups                      (Flag114)
!    --    Delay_Subprogram_Descriptors        (Flag50)
!    --    Discard_Names                       (Flag88)
!    --    Elaboration_Entity_Required         (Flag174)
!    --    Has_Completion                      (Flag26)
!    --    Has_Controlling_Result              (Flag98)
!    --    Has_Expanded_Contract               (Flag240)  (non-generic case only)
!    --    Has_Master_Entity                   (Flag21)
!    --    Has_Missing_Return                  (Flag142)
!    --    Has_Nested_Block_With_Handler       (Flag101)
!    --    Has_Nested_Subprogram               (Flag282)
!    --    Has_Out_Or_In_Out_Parameter         (Flag110)
!    --    Has_Recursive_Call                  (Flag143)
!    --    Has_Yield_Aspect                    (Flag308)
!    --    Ignore_SPARK_Mode_Pragmas           (Flag301)
!    --    Is_Abstract_Subprogram              (Flag19)   (non-generic case only)
!    --    Is_Called                           (Flag102)  (non-generic case only)
!    --    Is_Constructor                      (Flag76)
!    --    Is_CUDA_Kernel                      (Flag118)  (non-generic case only)
!    --    Is_DIC_Procedure                    (Flag132)  (non-generic case only)
!    --    Is_Discrim_SO_Function              (Flag176)
!    --    Is_Discriminant_Check_Function      (Flag264)
!    --    Is_Elaboration_Checks_OK_Id         (Flag148)
!    --    Is_Elaboration_Warnings_OK_Id       (Flag304)
!    --    Is_Eliminated                       (Flag124)
!    --    Is_Generic_Actual_Subprogram        (Flag274)  (non-generic case only)
!    --    Is_Hidden_Non_Overridden_Subpgm     (Flag2)    (non-generic case only)
!    --    Is_Initial_Condition_Procedure      (Flag302)  (non-generic case only)
!    --    Is_Inlined_Always                   (Flag1)    (non-generic case only)
!    --    Is_Instantiated                     (Flag126)  (generic case only)
!    --    Is_Intrinsic_Subprogram             (Flag64)
!    --    Is_Invariant_Procedure              (Flag257)  (non-generic case only)
!    --    Is_Machine_Code_Subprogram          (Flag137)  (non-generic case only)
!    --    Is_Partial_Invariant_Procedure      (Flag292)  (non-generic case only)
!    --    Is_Predicate_Function               (Flag255)  (non-generic case only)
!    --    Is_Predicate_Function_M             (Flag256)  (non-generic case only)
!    --    Is_Primitive                        (Flag218)
!    --    Is_Primitive_Wrapper                (Flag195)  (non-generic case only)
!    --    Is_Private_Descendant               (Flag53)
!    --    Is_Private_Primitive                (Flag245)  (non-generic case only)
!    --    Is_Pure                             (Flag44)
!    --    Is_Visible_Lib_Unit                 (Flag116)
!    --    Needs_No_Actuals                    (Flag22)
!    --    Requires_Overriding                 (Flag213)  (non-generic case only)
!    --    Return_Present                      (Flag54)
!    --    Returns_By_Ref                      (Flag90)
!    --    Rewritten_For_C                     (Flag287)  (generate C code only)
!    --    Sec_Stack_Needed_For_Return         (Flag167)
!    --    SPARK_Pragma_Inherited              (Flag265)
!    --    Uses_Sec_Stack                      (Flag95)
!    --    Address_Clause                      (synth)
!    --    First_Formal                        (synth)
!    --    First_Formal_With_Extras            (synth)
!    --    Is_Elaboration_Target               (synth)
!    --    Last_Formal                         (synth)
!    --    Number_Formals                      (synth)
!    --    Scope_Depth                         (synth)
  
     --  E_General_Access_Type
!    --    Master_Id                           (Node17)
!    --    Directly_Designated_Type            (Node20)
!    --    Associated_Storage_Pool             (Node22)   (root type only)
!    --    Finalization_Master                 (Node23)   (root type only)
!    --    Storage_Size_Variable               (Node26)   (base type only)
     --    (plus type attributes)
  
     --  E_Generic_In_Parameter
     --  E_Generic_In_Out_Parameter
!    --    Current_Value                       (Node9)    (always Empty)
!    --    Entry_Component                     (Node11)
!    --    Actual_Subtype                      (Node17)
!    --    Renamed_Object                      (Node18)   (always Empty)
!    --    Default_Value                       (Node20)
!    --    Protected_Formal                    (Node22)
!    --    Is_Controlling_Formal               (Flag97)
!    --    Is_Return_Object                    (Flag209)
!    --    Parameter_Mode                      (synth)
  
     --  E_Incomplete_Type
     --  E_Incomplete_Subtype
!    --    Direct_Primitive_Operations         (Elist10)
!    --    Non_Limited_View                    (Node19)
!    --    Private_Dependents                  (Elist18)
!    --    Discriminant_Constraint             (Elist21)
!    --    Stored_Constraint                   (Elist23)
!    --    Has_Non_Limited_View                (synth)
     --    (plus type attributes)
  
     --  E_In_Parameter
     --  E_In_Out_Parameter
     --  E_Out_Parameter
!    --    Mechanism                           (Uint8)    (Mechanism_Type)
!    --    Current_Value                       (Node9)
!    --    Discriminal_Link                    (Node10)   (discriminals only)
!    --    Entry_Component                     (Node11)
!    --    Esize                               (Uint12)
!    --    Extra_Accessibility                 (Node13)
!    --    Alignment                           (Uint14)
!    --    Extra_Formal                        (Node15)
!    --    Unset_Reference                     (Node16)
!    --    Actual_Subtype                      (Node17)
!    --    Renamed_Object                      (Node18)
!    --    Spec_Entity                         (Node19)
!    --    Default_Value                       (Node20)
!    --    Default_Expr_Function               (Node21)
!    --    Protected_Formal                    (Node22)
!    --    Extra_Constrained                   (Node23)
!    --    Minimum_Accessibility               (Node24)
!    --    Last_Assignment                     (Node26)   (OUT, IN-OUT only)
!    --    Activation_Record_Component         (Node31)
!    --    Has_Initial_Value                   (Flag219)
!    --    Is_Controlling_Formal               (Flag97)
!    --    Is_Only_Out_Parameter               (Flag226)
!    --    Low_Bound_Tested                    (Flag205)
!    --    Is_Return_Object                    (Flag209)
!    --    Is_Activation_Record                (Flag305)
!    --    Parameter_Mode                      (synth)
  
     --  E_Label
!    --    Enclosing_Scope                     (Node18)
!    --    Reachable                           (Flag49)
  
     --  E_Limited_Private_Type
     --  E_Limited_Private_Subtype
!    --    First_Entity                        (Node17)
!    --    Private_Dependents                  (Elist18)
!    --    Underlying_Full_View                (Node19)
!    --    Last_Entity                         (Node20)
!    --    Discriminant_Constraint             (Elist21)
!    --    Stored_Constraint                   (Elist23)
!    --    Has_Completion                      (Flag26)
     --    (plus type attributes)
  
     --  E_Loop
!    --    First_Exit_Statement                (Node8)
!    --    Has_Exit                            (Flag47)
!    --    Has_Loop_Entry_Attributes           (Flag260)
!    --    Has_Master_Entity                   (Flag21)
!    --    Has_Nested_Block_With_Handler       (Flag101)
!    --    Uses_Sec_Stack                      (Flag95)
  
     --  E_Modular_Integer_Type
     --  E_Modular_Integer_Subtype
!    --    Modulus                             (Uint17)   (base type only)
!    --    Default_Aspect_Value                (Node19)   (base type only)
!    --    Original_Array_Type                 (Node21)
!    --    Scalar_Range                        (Node20)
!    --    Static_Discrete_Predicate           (List25)
!    --    Non_Binary_Modulus                  (Flag58)   (base type only)
!    --    Has_Biased_Representation           (Flag139)
!    --    Has_Shift_Operator                  (Flag267)  (base type only)
!    --    No_Predicate_On_Actual              (Flag275)
!    --    No_Dynamic_Predicate_On_Actual      (Flag276)
!    --    Type_Low_Bound                      (synth)
!    --    Type_High_Bound                     (synth)
     --    (plus type attributes)
  
     --  E_Named_Integer
  
     --  E_Named_Real
  
     --  E_Operator
!    --    First_Entity                        (Node17)
!    --    Alias                               (Node18)
!    --    Extra_Accessibility_Of_Result       (Node19)
!    --    Last_Entity                         (Node20)
!    --    Subps_Index                         (Uint24)
!    --    Overridden_Operation                (Node26)
!    --    Linker_Section_Pragma               (Node33)
!    --    Contract                            (Node34)
!    --    Import_Pragma                       (Node35)
!    --    SPARK_Pragma                        (Node40)
!    --    Default_Expressions_Processed       (Flag108)
!    --    Has_Nested_Subprogram               (Flag282)
!    --    Ignore_SPARK_Mode_Pragmas           (Flag301)
!    --    Is_Elaboration_Checks_OK_Id         (Flag148)
!    --    Is_Elaboration_Warnings_OK_Id       (Flag304)
!    --    Is_Intrinsic_Subprogram             (Flag64)
!    --    Is_Machine_Code_Subprogram          (Flag137)
!    --    Is_Primitive                        (Flag218)
!    --    Is_Pure                             (Flag44)
!    --    SPARK_Pragma_Inherited              (Flag265)
!    --    Is_Elaboration_Target               (synth)
     --    Aren't there more flags and fields? seems like this list should be
     --    more similar to the E_Function list, which is much longer ???
  
     --  E_Ordinary_Fixed_Point_Type
     --  E_Ordinary_Fixed_Point_Subtype
!    --    Delta_Value                         (Ureal18)
!    --    Default_Aspect_Value                (Node19)   (base type only)
!    --    Scalar_Range                        (Node20)
!    --    Static_Real_Or_String_Predicate     (Node25)
!    --    Small_Value                         (Ureal21)
!    --    Has_Small_Clause                    (Flag67)
!    --    Aft_Value                           (synth)
!    --    Type_Low_Bound                      (synth)
!    --    Type_High_Bound                     (synth)
     --    (plus type attributes)
  
     --  E_Package
     --  E_Generic_Package
!    --    Dependent_Instances                 (Elist8)   (for an instance)
!    --    Renaming_Map                        (Uint9)
!    --    Handler_Records                     (List10)   (non-generic case only)
!    --    Generic_Homonym                     (Node11)   (generic case only)
!    --    Associated_Formal_Package           (Node12)
!    --    Elaboration_Entity                  (Node13)
!    --    Related_Instance                    (Node15)   (non-generic case only)
!    --    First_Private_Entity                (Node16)
!    --    First_Entity                        (Node17)
!    --    Renamed_Entity                      (Node18)
!    --    Body_Entity                         (Node19)
!    --    Last_Entity                         (Node20)
!    --    Interface_Name                      (Node21)
!    --    Scope_Depth_Value                   (Uint22)
!    --    Generic_Renamings                   (Elist23)  (for an instance)
!    --    Inner_Instances                     (Elist23)  (generic case only)
!    --    Limited_View                        (Node23)   (non-generic/instance)
!    --    Incomplete_Actuals                  (Elist24)  (for an instance)
!    --    Abstract_States                     (Elist25)
!    --    Package_Instantiation               (Node26)
!    --    Current_Use_Clause                  (Node27)
!    --    Finalizer                           (Node28)   (non-generic case only)
!    --    Anonymous_Masters                   (Elist29)  (non-generic case only)
!    --    Contract                            (Node34)
!    --    SPARK_Pragma                        (Node40)
!    --    SPARK_Aux_Pragma                    (Node41)
!    --    Body_Needed_For_Inlining            (Flag299)
!    --    Body_Needed_For_SAL                 (Flag40)
!    --    Contains_Ignored_Ghost_Code         (Flag279)
!    --    Delay_Subprogram_Descriptors        (Flag50)
!    --    Discard_Names                       (Flag88)
!    --    Elaborate_Body_Desirable            (Flag210)  (non-generic case only)
!    --    Elaboration_Entity_Required         (Flag174)
!    --    From_Limited_With                   (Flag159)
!    --    Has_All_Calls_Remote                (Flag79)
!    --    Has_Completion                      (Flag26)
!    --    Has_Forward_Instantiation           (Flag175)
!    --    Has_Master_Entity                   (Flag21)
!    --    Has_RACW                            (Flag214)  (non-generic case only)
!    --    Ignore_SPARK_Mode_Pragmas           (Flag301)
!    --    Is_Called                           (Flag102)  (non-generic case only)
!    --    Is_Elaboration_Checks_OK_Id         (Flag148)
!    --    Is_Elaboration_Warnings_OK_Id       (Flag304)
!    --    Is_Instantiated                     (Flag126)
!    --    In_Package_Body                     (Flag48)
!    --    Is_Private_Descendant               (Flag53)
!    --    In_Use                              (Flag8)
!    --    Is_Visible_Lib_Unit                 (Flag116)
!    --    Renamed_In_Spec                     (Flag231)  (non-generic case only)
!    --    SPARK_Aux_Pragma_Inherited          (Flag266)
!    --    SPARK_Pragma_Inherited              (Flag265)
!    --    Static_Elaboration_Desired          (Flag77)   (non-generic case only)
!    --    Has_Non_Null_Abstract_State         (synth)
!    --    Has_Null_Abstract_State             (synth)
!    --    Is_Elaboration_Target               (synth)
!    --    Is_Wrapper_Package                  (synth)    (non-generic case only)
!    --    Has_Limited_View                    (synth)    (non-generic case only)
!    --    Scope_Depth                         (synth)
  
     --  E_Package_Body
!    --    Handler_Records                     (List10)   (non-generic case only)
!    --    Related_Instance                    (Node15)   (non-generic case only)
!    --    First_Entity                        (Node17)
!    --    Spec_Entity                         (Node19)
!    --    Last_Entity                         (Node20)
!    --    Scope_Depth_Value                   (Uint22)
!    --    Finalizer                           (Node28)   (non-generic case only)
!    --    Contract                            (Node34)
!    --    SPARK_Pragma                        (Node40)
!    --    SPARK_Aux_Pragma                    (Node41)
!    --    Contains_Ignored_Ghost_Code         (Flag279)
!    --    Delay_Subprogram_Descriptors        (Flag50)
!    --    Ignore_SPARK_Mode_Pragmas           (Flag301)
!    --    SPARK_Aux_Pragma_Inherited          (Flag266)
!    --    SPARK_Pragma_Inherited              (Flag265)
!    --    Scope_Depth                         (synth)
  
     --  E_Private_Type
     --  E_Private_Subtype
!    --    Direct_Primitive_Operations         (Elist10)
!    --    First_Entity                        (Node17)
!    --    Private_Dependents                  (Elist18)
!    --    Underlying_Full_View                (Node19)
!    --    Last_Entity                         (Node20)
!    --    Discriminant_Constraint             (Elist21)
!    --    Stored_Constraint                   (Elist23)
!    --    Has_Completion                      (Flag26)
!    --    Is_Controlled_Active                (Flag42)   (base type only)
     --    (plus type attributes)
  
     --  E_Procedure
     --  E_Generic_Procedure
!    --    Renaming_Map                        (Uint9)
!    --    Handler_Records                     (List10)   (non-generic case only)
!    --    Protected_Body_Subprogram           (Node11)
!    --    Next_Inlined_Subprogram             (Node12)
!    --    Elaboration_Entity                  (Node13)
!    --    Postconditions_Proc                 (Node14)   (non-generic case only)
!    --    DT_Position                         (Uint15)
!    --    DTC_Entity                          (Node16)
!    --    First_Entity                        (Node17)
!    --    Alias                               (Node18)   (non-generic case only)
!    --    Renamed_Entity                      (Node18)
!    --    Receiving_Entry                     (Node19)   (non-generic case only)
!    --    Last_Entity                         (Node20)
!    --    Interface_Name                      (Node21)
!    --    Scope_Depth_Value                   (Uint22)
!    --    Generic_Renamings                   (Elist23)  (for an instance)
!    --    Inner_Instances                     (Elist23)  (generic case only)
!    --    Protection_Object                   (Node23)   (for concurrent kind)
!    --    Subps_Index                         (Uint24)   (non-generic case only)
!    --    Interface_Alias                     (Node25)
!    --    Overridden_Operation                (Node26)   (never for init proc)
!    --    Wrapped_Entity                      (Node27)   (non-generic case only)
!    --    Extra_Formals                       (Node28)
!    --    Anonymous_Masters                   (Elist29)  (non-generic case only)
!    --    Static_Initialization               (Node30)   (init_proc only)
!    --    Thunk_Entity                        (Node31)   (thunk case only)
!    --    Corresponding_Function              (Node32)   (generate C code only)
!    --    Linker_Section_Pragma               (Node33)
!    --    Contract                            (Node34)
!    --    Import_Pragma                       (Node35)   (non-generic case only)
!    --    Class_Wide_Clone                    (Node38)
!    --    Protected_Subprogram                (Node39)   (non-generic case only)
!    --    SPARK_Pragma                        (Node40)
!    --    Original_Protected_Subprogram       (Node41)
!    --    Body_Needed_For_SAL                 (Flag40)
!    --    Contains_Ignored_Ghost_Code         (Flag279)
!    --    Delay_Cleanups                      (Flag114)
!    --    Discard_Names                       (Flag88)
!    --    Elaboration_Entity_Required         (Flag174)
!    --    Default_Expressions_Processed       (Flag108)
!    --    Delay_Cleanups                      (Flag114)
!    --    Delay_Subprogram_Descriptors        (Flag50)
!    --    Discard_Names                       (Flag88)
!    --    Has_Completion                      (Flag26)
!    --    Has_Expanded_Contract               (Flag240)  (non-generic case only)
!    --    Has_Master_Entity                   (Flag21)
!    --    Has_Nested_Block_With_Handler       (Flag101)
!    --    Has_Nested_Subprogram               (Flag282)
!    --    Has_Yield_Aspect                    (Flag308)
!    --    Ignore_SPARK_Mode_Pragmas           (Flag301)
!    --    Is_Abstract_Subprogram              (Flag19)   (non-generic case only)
!    --    Is_Asynchronous                     (Flag81)
!    --    Is_Called                           (Flag102)  (non-generic case only)
!    --    Is_Constructor                      (Flag76)
!    --    Is_CUDA_Kernel                      (Flag118)
!    --    Is_DIC_Procedure                    (Flag132)  (non-generic case only)
!    --    Is_Elaboration_Checks_OK_Id         (Flag148)
!    --    Is_Elaboration_Warnings_OK_Id       (Flag304)
!    --    Is_Eliminated                       (Flag124)
!    --    Is_Generic_Actual_Subprogram        (Flag274)  (non-generic case only)
!    --    Is_Hidden_Non_Overridden_Subpgm     (Flag2)    (non-generic case only)
!    --    Is_Initial_Condition_Procedure      (Flag302)  (non-generic case only)
!    --    Is_Inlined_Always                   (Flag1)    (non-generic case only)
!    --    Is_Instantiated                     (Flag126)  (generic case only)
!    --    Is_Interrupt_Handler                (Flag89)
!    --    Is_Intrinsic_Subprogram             (Flag64)
!    --    Is_Invariant_Procedure              (Flag257)  (non-generic case only)
!    --    Is_Machine_Code_Subprogram          (Flag137)  (non-generic case only)
!    --    Is_Null_Init_Proc                   (Flag178)
!    --    Is_Partial_DIC_Procedure            (synth)    (non-generic case only)
!    --    Is_Partial_Invariant_Procedure      (Flag292)  (non-generic case only)
!    --    Is_Predicate_Function               (Flag255)  (non-generic case only)
!    --    Is_Predicate_Function_M             (Flag256)  (non-generic case only)
!    --    Is_Primitive                        (Flag218)
!    --    Is_Primitive_Wrapper                (Flag195)  (non-generic case only)
!    --    Is_Private_Descendant               (Flag53)
!    --    Is_Private_Primitive                (Flag245)  (non-generic case only)
!    --    Is_Pure                             (Flag44)
!    --    Is_Valued_Procedure                 (Flag127)
!    --    Is_Visible_Lib_Unit                 (Flag116)
!    --    Needs_No_Actuals                    (Flag22)
!    --    No_Return                           (Flag113)
!    --    Requires_Overriding                 (Flag213)  (non-generic case only)
!    --    Sec_Stack_Needed_For_Return         (Flag167)
!    --    SPARK_Pragma_Inherited              (Flag265)
!    --    Address_Clause                      (synth)
!    --    First_Formal                        (synth)
!    --    First_Formal_With_Extras            (synth)
!    --    Is_Elaboration_Target               (synth)
!    --    Is_Finalizer                        (synth)
!    --    Last_Formal                         (synth)
!    --    Number_Formals                      (synth)
  
     --  E_Protected_Body
!    --    SPARK_Pragma                        (Node40)
!    --    Ignore_SPARK_Mode_Pragmas           (Flag301)
!    --    SPARK_Pragma_Inherited              (Flag265)
     --    (any others??? First/Last Entity, Scope_Depth???)
  
!    --  E_Protected_Object
  
     --  E_Protected_Type
     --  E_Protected_Subtype
!    --    Direct_Primitive_Operations         (Elist10)
!    --    First_Private_Entity                (Node16)
!    --    First_Entity                        (Node17)
!    --    Corresponding_Record_Type           (Node18)
!    --    Entry_Bodies_Array                  (Node19)
!    --    Last_Entity                         (Node20)
!    --    Discriminant_Constraint             (Elist21)
!    --    Scope_Depth_Value                   (Uint22)
!    --    Stored_Constraint                   (Elist23)
!    --    Anonymous_Object                    (Node30)
!    --    Contract                            (Node34)
!    --    Entry_Max_Queue_Lengths_Array       (Node35)
!    --    SPARK_Aux_Pragma                    (Node41)
!    --    Ignore_SPARK_Mode_Pragmas           (Flag301)
!    --    SPARK_Aux_Pragma_Inherited          (Flag266)
!    --    Uses_Lock_Free                      (Flag188)
!    --    First_Component                     (synth)
!    --    First_Component_Or_Discriminant     (synth)
!    --    Has_Entries                         (synth)
!    --    Has_Interrupt_Handler               (synth)
!    --    Number_Entries                      (synth)
!    --    Scope_Depth                         (synth)
     --    (plus type attributes)
  
     --  E_Record_Type
     --  E_Record_Subtype
!    --    Direct_Primitive_Operations         (Elist10)
!    --    Access_Disp_Table                   (Elist16)  (base type only)
!    --    Cloned_Subtype                      (Node16)   (subtype case only)
!    --    First_Entity                        (Node17)
!    --    Corresponding_Concurrent_Type       (Node18)
!    --    Parent_Subtype                      (Node19)   (base type only)
!    --    Last_Entity                         (Node20)
!    --    Discriminant_Constraint             (Elist21)
!    --    Corresponding_Remote_Type           (Node22)
!    --    Stored_Constraint                   (Elist23)
!    --    Interfaces                          (Elist25)
!    --    Dispatch_Table_Wrappers             (Elist26)  (base type only)
!    --    Underlying_Record_View              (Node28)   (base type only)
!    --    Access_Disp_Table_Elab_Flag         (Node30)   (base type only)
!    --    Predicated_Parent                   (Node38)   (subtype only)
!    --    Component_Alignment                 (special)  (base type only)
!    --    C_Pass_By_Copy                      (Flag125)  (base type only)
!    --    Has_Dispatch_Table                  (Flag220)  (base tagged type only)
!    --    Has_Pragma_Pack                     (Flag121)  (impl base type only)
!    --    Has_Private_Ancestor                (Flag151)
!    --    Has_Private_Extension               (Flag300)
!    --    Has_Record_Rep_Clause               (Flag65)   (base type only)
!    --    Has_Static_Discriminants            (Flag211)  (subtype only)
!    --    Is_Class_Wide_Equivalent_Type       (Flag35)
!    --    Is_Concurrent_Record_Type           (Flag20)
!    --    Is_Constrained                      (Flag12)
!    --    Is_Controlled_Active                (Flag42)   (base type only)
!    --    Is_Interface                        (Flag186)
!    --    Is_Limited_Interface                (Flag197)
!    --    No_Reordering                       (Flag239)  (base type only)
!    --    Reverse_Bit_Order                   (Flag164)  (base type only)
!    --    Reverse_Storage_Order               (Flag93)   (base type only)
!    --    SSO_Set_High_By_Default             (Flag273)  (base type only)
!    --    SSO_Set_Low_By_Default              (Flag272)  (base type only)
!    --    First_Component                     (synth)
!    --    First_Component_Or_Discriminant     (synth)
     --    (plus type attributes)
  
     --  E_Record_Type_With_Private
     --  E_Record_Subtype_With_Private
!    --    Direct_Primitive_Operations         (Elist10)
!    --    First_Entity                        (Node17)
!    --    Private_Dependents                  (Elist18)
!    --    Underlying_Full_View                (Node19)
!    --    Last_Entity                         (Node20)
!    --    Discriminant_Constraint             (Elist21)
!    --    Stored_Constraint                   (Elist23)
!    --    Interfaces                          (Elist25)
!    --    Predicated_Parent                   (Node38)   (subtype only)
!    --    Has_Completion                      (Flag26)
!    --    Has_Private_Ancestor                (Flag151)
!    --    Has_Private_Extension               (Flag300)
!    --    Has_Record_Rep_Clause               (Flag65)   (base type only)
!    --    Is_Concurrent_Record_Type           (Flag20)
!    --    Is_Constrained                      (Flag12)
!    --    Is_Controlled_Active                (Flag42)   (base type only)
!    --    Is_Interface                        (Flag186)
!    --    Is_Limited_Interface                (Flag197)
!    --    No_Reordering                       (Flag239)  (base type only)
!    --    Reverse_Bit_Order                   (Flag164)  (base type only)
!    --    Reverse_Storage_Order               (Flag93)   (base type only)
!    --    SSO_Set_High_By_Default             (Flag273)  (base type only)
!    --    SSO_Set_Low_By_Default              (Flag272)  (base type only)
!    --    First_Component                     (synth)
!    --    First_Component_Or_Discriminant     (synth)
     --    (plus type attributes)
  
     --  E_Return_Statement
!    --    Return_Applies_To                   (Node8)
  
     --  E_Signed_Integer_Type
     --  E_Signed_Integer_Subtype
!    --    Default_Aspect_Value                (Node19)   (base type only)
!    --    Scalar_Range                        (Node20)
!    --    Static_Discrete_Predicate           (List25)
!    --    Has_Biased_Representation           (Flag139)
!    --    Has_Shift_Operator                  (Flag267)  (base type only)
!    --    No_Predicate_On_Actual              (Flag275)
!    --    No_Dynamic_Predicate_On_Actual      (Flag276)
!    --    Type_Low_Bound                      (synth)
!    --    Type_High_Bound                     (synth)
     --    (plus type attributes)
  
     --  E_String_Literal_Subtype
!    --    String_Literal_Length               (Uint16)
!    --    First_Index                         (Node17)   (always Empty)
!    --    String_Literal_Low_Bound            (Node18)
!    --    Packed_Array_Impl_Type              (Node23)
     --    (plus type attributes)
  
     --  E_Subprogram_Body
!    --    Mechanism                           (Uint8)
!    --    First_Entity                        (Node17)
!    --    Corresponding_Protected_Entry       (Node18)
!    --    Last_Entity                         (Node20)
!    --    Scope_Depth_Value                   (Uint22)
!    --    Extra_Formals                       (Node28)
!    --    Anonymous_Masters                   (Elist29)
!    --    Contract                            (Node34)
!    --    SPARK_Pragma                        (Node40)
!    --    Contains_Ignored_Ghost_Code         (Flag279)
!    --    SPARK_Pragma_Inherited              (Flag265)
!    --    Scope_Depth                         (synth)
  
     --  E_Subprogram_Type
!    --    Extra_Accessibility_Of_Result       (Node19)
!    --    Directly_Designated_Type            (Node20)
!    --    Extra_Formals                       (Node28)
!    --    Access_Subprogram_Wrapper           (Node41)
!    --    First_Formal                        (synth)
!    --    First_Formal_With_Extras            (synth)
!    --    Last_Formal                         (synth)
!    --    Number_Formals                      (synth)
!    --    Returns_By_Ref                      (Flag90)
     --    (plus type attributes)
  
     --  E_Task_Body
!    --    Contract                            (Node34)
!    --    SPARK_Pragma                        (Node40)
!    --    Ignore_SPARK_Mode_Pragmas           (Flag301)
!    --    SPARK_Pragma_Inherited              (Flag265)
     --    (any others??? First/Last Entity, Scope_Depth???)
  
     --  E_Task_Type
     --  E_Task_Subtype
!    --    Direct_Primitive_Operations         (Elist10)
!    --    First_Private_Entity                (Node16)
!    --    First_Entity                        (Node17)
!    --    Corresponding_Record_Type           (Node18)
!    --    Last_Entity                         (Node20)
!    --    Discriminant_Constraint             (Elist21)
!    --    Scope_Depth_Value                   (Uint22)
!    --    Stored_Constraint                   (Elist23)
!    --    Task_Body_Procedure                 (Node25)
!    --    Storage_Size_Variable               (Node26)   (base type only)
!    --    Relative_Deadline_Variable          (Node28)   (base type only)
!    --    Anonymous_Object                    (Node30)
!    --    Contract                            (Node34)
!    --    SPARK_Aux_Pragma                    (Node41)
!    --    Delay_Cleanups                      (Flag114)
!    --    Has_Master_Entity                   (Flag21)
!    --    Has_Storage_Size_Clause             (Flag23)   (base type only)
!    --    Ignore_SPARK_Mode_Pragmas           (Flag301)
!    --    Is_Elaboration_Checks_OK_Id         (Flag148)
!    --    Is_Elaboration_Warnings_OK_Id       (Flag304)
!    --    SPARK_Aux_Pragma_Inherited          (Flag266)
!    --    First_Component                     (synth)
!    --    First_Component_Or_Discriminant     (synth)
!    --    Has_Entries                         (synth)
!    --    Is_Elaboration_Target               (synth)
!    --    Number_Entries                      (synth)
!    --    Scope_Depth                         (synth)
     --    (plus type attributes)
  
     --  E_Variable
!    --    Hiding_Loop_Variable                (Node8)
!    --    Current_Value                       (Node9)
!    --    Part_Of_Constituents                (Elist10)
!    --    Part_Of_References                  (Elist11)
!    --    Esize                               (Uint12)
!    --    Extra_Accessibility                 (Node13)
!    --    Alignment                           (Uint14)
!    --    Status_Flag_Or_Transient_Decl       (Node15)   (transient object only)
!    --    Unset_Reference                     (Node16)
!    --    Actual_Subtype                      (Node17)
!    --    Renamed_Object                      (Node18)
!    --    Size_Check_Code                     (Node19)
!    --    Prival_Link                         (Node20)
!    --    Interface_Name                      (Node21)
!    --    Shared_Var_Procs_Instance           (Node22)
!    --    Extra_Constrained                   (Node23)
!    --    Related_Expression                  (Node24)
!    --    Debug_Renaming_Link                 (Node25)
!    --    Last_Assignment                     (Node26)
!    --    Related_Type                        (Node27)
!    --    Initialization_Statements           (Node28)
!    --    BIP_Initialization_Call             (Node29)
!    --    Last_Aggregate_Assignment           (Node30)
!    --    Activation_Record_Component         (Node31)
!    --    Encapsulating_State                 (Node32)
!    --    Linker_Section_Pragma               (Node33)
!    --    Contract                            (Node34)
!    --    Anonymous_Designated_Type           (Node35)
!    --    Validated_Object                    (Node38)
!    --    SPARK_Pragma                        (Node40)
!    --    Has_Alignment_Clause                (Flag46)
!    --    Has_Atomic_Components               (Flag86)
!    --    Has_Biased_Representation           (Flag139)
!    --    Has_Independent_Components          (Flag34)
!    --    Has_Initial_Value                   (Flag219)
!    --    Has_Size_Clause                     (Flag29)
!    --    Has_Volatile_Components             (Flag87)
!    --    Is_Atomic                           (Flag85)
!    --    Is_Elaboration_Checks_OK_Id         (Flag148)
!    --    Is_Elaboration_Warnings_OK_Id       (Flag304)
!    --    Is_Eliminated                       (Flag124)
!    --    Is_Finalized_Transient              (Flag252)
!    --    Is_Ignored_Transient                (Flag295)
!    --    Is_Independent                      (Flag268)
!    --    Is_Return_Object                    (Flag209)
!    --    Is_Safe_To_Reevaluate               (Flag249)
!    --    Is_Shared_Passive                   (Flag60)
!    --    Is_True_Constant                    (Flag163)
!    --    Is_Uplevel_Referenced_Entity        (Flag283)
!    --    Is_Volatile                         (Flag16)
!    --    Is_Volatile_Full_Access             (Flag285)
!    --    OK_To_Rename                        (Flag247)
!    --    Optimize_Alignment_Space            (Flag241)
!    --    Optimize_Alignment_Time             (Flag242)
!    --    SPARK_Pragma_Inherited              (Flag265)
!    --    Suppress_Initialization             (Flag105)
!    --    Treat_As_Volatile                   (Flag41)
!    --    Address_Clause                      (synth)
!    --    Alignment_Clause                    (synth)
!    --    Is_Elaboration_Target               (synth)
!    --    Is_Full_Access                      (synth)
!    --    Size_Clause                         (synth)
  
     --  E_Void
     --    Since E_Void is the initial Ekind value of an entity when it is first
--- 5142,6251 ----
     --    Partial_Refinement_Constituents     (synth)
  
     --  E_Access_Protected_Subprogram_Type
!    --    Equivalent_Type
!    --    Directly_Designated_Type
!    --    Needs_No_Actuals
!    --    Can_Use_Internal_Rep
     --    (plus type attributes)
  
     --  E_Access_Subprogram_Type
!    --    Equivalent_Type                       (remote types only)
!    --    Directly_Designated_Type
!    --    Needs_No_Actuals
!    --    Original_Access_Type
!    --    Can_Use_Internal_Rep
!    --    Needs_Activation_Record
!    --    Associated_Storage_Pool $$$
!    --    Interface_Name $$$
     --    (plus type attributes)
  
     --  E_Access_Type
     --  E_Access_Subtype
!    --    Direct_Primitive_Operations $$$ type
!    --    Master_Id
!    --    Directly_Designated_Type
!    --    Associated_Storage_Pool               (base type only)
!    --    Finalization_Master                   (base type only)
!    --    Storage_Size_Variable                 (base type only)
!    --    Has_Pragma_Controlled                 (base type only)
!    --    Has_Storage_Size_Clause               (base type only)
!    --    Is_Access_Constant
!    --    Is_Local_Anonymous_Access
!    --    Is_Pure_Unit_Access_Type
!    --    No_Pool_Assigned                     (base type only)
!    --    No_Strict_Aliasing                   (base type only)
!    --    Is_Param_Block_Component_Type        (base type only)
     --    (plus type attributes)
  
     --  E_Access_Attribute_Type
!    --    Renamed_Entity $$$
!    --    Directly_Designated_Type
     --    (plus type attributes)
  
     --  E_Allocator_Type
!    --    Directly_Designated_Type
!    --    Associated_Storage_Pool $$$
     --    (plus type attributes)
  
     --  E_Anonymous_Access_Subprogram_Type
     --  E_Anonymous_Access_Protected_Subprogram_Type
!    --    Interface_Name $$$ E_Anonymous_Access_Subprogram_Type
!    --    Directly_Designated_Type
!    --    Storage_Size_Variable                 is this needed ???
!    --    Can_Use_Internal_Rep
!    --    Needs_Activation_Record
     --    (plus type attributes)
  
     --  E_Anonymous_Access_Type
!    --    Directly_Designated_Type
!    --    Finalization_Master
!    --    Storage_Size_Variable                 is this needed ???
!    --    Associated_Storage_Pool $$$
     --    (plus type attributes)
  
     --  E_Array_Type
     --  E_Array_Subtype
!    --    First_Entity $$$
!    --    Direct_Primitive_Operations $$$ subtype
!    --    Renamed_Object $$$ E_Array_Subtype
!    --    First_Index
!    --    Default_Aspect_Component_Value        (base type only)
!    --    Component_Type                        (base type only)
!    --    Original_Array_Type
!    --    Component_Size                        (base type only)
!    --    Packed_Array_Impl_Type
!    --    Related_Array_Object
!    --    Predicated_Parent                     (subtype only)
!    --    Component_Alignment                   (special)  (base type only)
!    --    Has_Component_Size_Clause             (base type only)
!    --    Has_Pragma_Pack                       (impl base type only)
!    --    Is_Constrained
!    --    Reverse_Storage_Order                 (base type only)
!    --    SSO_Set_High_By_Default               (base type only)
!    --    SSO_Set_Low_By_Default                (base type only)
!    --    Next_Index                            (synth)
!    --    Number_Dimensions                     (synth)
     --    (plus type attributes)
  
     --  E_Block
!    --    Renamed_Entity $$$
!    --    Renamed_Object $$$
!    --    Return_Applies_To
!    --    Block_Node
!    --    First_Entity
!    --    Last_Entity
!    --    Scope_Depth_Value
!    --    Entry_Cancel_Parameter
!    --    Contains_Ignored_Ghost_Code
!    --    Delay_Cleanups
!    --    Discard_Names
!    --    Has_Master_Entity
!    --    Has_Nested_Block_With_Handler
!    --    Is_Exception_Handler
!    --    Sec_Stack_Needed_For_Return
!    --    Uses_Sec_Stack
     --    Scope_Depth                         (synth)
  
     --  E_Class_Wide_Type
     --  E_Class_Wide_Subtype
!    --    Direct_Primitive_Operations
!    --    Cloned_Subtype                        (subtype case only)
!    --    First_Entity
!    --    Equivalent_Type                       (always Empty for type)
!    --    Non_Limited_View
!    --    Last_Entity
!    --    SSO_Set_High_By_Default               (base type only)
!    --    SSO_Set_Low_By_Default                (base type only)
!    --    Corresponding_Remote_Type $$$ type
!    --    Renamed_Entity $$$ type
!    --    First_Component                       (synth)
!    --    First_Component_Or_Discriminant       (synth)
!    --    Has_Non_Limited_View                  (synth)
     --    (plus type attributes)
  
     --  E_Component
!    --    Linker_Section_Pragma $$$
!    --    Normalized_First_Bit
!    --    Current_Value                         (always Empty)
!    --    Component_Bit_Offset
!    --    Esize
!    --    Component_Clause
!    --    Normalized_Position
!    --    DT_Entry_Count
!    --    Entry_Formal
!    --    Prival
!    --    Renamed_Object                        (always Empty)
!    --    Discriminant_Checking_Func
!    --    Corresponding_Record_Component
!    --    Original_Record_Component
!    --    DT_Offset_To_Top_Func
!    --    Related_Type
!    --    Has_Biased_Representation
!    --    Has_Per_Object_Constraint
!    --    Is_Atomic
!    --    Is_Independent
!    --    Is_Return_Object
!    --    Is_Tag
!    --    Is_Volatile
!    --    Is_Volatile_Full_Access
!    --    Treat_As_Volatile
     --    Is_Full_Access                      (synth)
     --    Next_Component                      (synth)
     --    Next_Component_Or_Discriminant      (synth)
  
     --  E_Constant
     --  E_Loop_Parameter
!    --    Current_Value                         (always Empty)
!    --    Discriminal_Link
!    --    Full_View
!    --    Esize
!    --    Extra_Accessibility                   (constants only)
!    --    Alignment
!    --    Status_Flag_Or_Transient_Decl
!    --    Actual_Subtype
!    --    Renamed_Object
!    --    Renamed_Entity $$$
!    --    Size_Check_Code                       (constants only)
!    --    Prival_Link                           (privals only)
!    --    Interface_Name                        (constants only)
!    --    Related_Type                          (constants only)
!    --    Initialization_Statements
!    --    BIP_Initialization_Call
!    --    Last_Aggregate_Assignment
!    --    Activation_Record_Component
!    --    Encapsulating_State                   (constants only)
!    --    Linker_Section_Pragma
!    --    Contract                              (constants only)
!    --    SPARK_Pragma                          (constants only)
!    --    Has_Alignment_Clause
!    --    Has_Atomic_Components
!    --    Has_Biased_Representation
!    --    Has_Completion                        (constants only)
!    --    Has_Independent_Components
!    --    Has_Size_Clause
!    --    Has_Thunks                            (constants only)
!    --    Has_Volatile_Components
!    --    Is_Atomic
!    --    Is_Elaboration_Checks_OK_Id           (constants only)
!    --    Is_Elaboration_Warnings_OK_Id         (constants only)
!    --    Is_Eliminated
!    --    Is_Finalized_Transient
!    --    Is_Ignored_Transient
!    --    Is_Independent
!    --    Is_Return_Object
!    --    Is_True_Constant
!    --    Is_Uplevel_Referenced_Entity
!    --    Is_Volatile
!    --    Is_Volatile_Full_Access
!    --    Optimize_Alignment_Space              (constants only)
!    --    Optimize_Alignment_Time               (constants only)
!    --    SPARK_Pragma_Inherited                (constants only)
!    --    Stores_Attribute_Old_Prefix           (constants only)
!    --    Treat_As_Volatile
!    --    Address_Clause                        (synth)
!    --    Alignment_Clause                      (synth)
!    --    Is_Elaboration_Target                 (synth)
!    --    Is_Full_Access                        (synth)
!    --    Size_Clause                           (synth)
  
     --  E_Decimal_Fixed_Point_Type
!    --  E_Decimal_Fixed_Point_Subtype
!    --    Scale_Value
!    --    Digits_Value
!    --    Scalar_Range
!    --    Delta_Value
!    --    Small_Value
!    --    Static_Real_Or_String_Predicate
!    --    Has_Machine_Radix_Clause
!    --    Machine_Radix_10
     --    Aft_Value                           (synth)
     --    Type_Low_Bound                      (synth)
     --    Type_High_Bound                     (synth)
     --    (plus type attributes)
  
     --  E_Discriminant
!    --    Normalized_First_Bit
!    --    Current_Value                         (always Empty)
!    --    Component_Bit_Offset
!    --    Esize
!    --    Component_Clause
!    --    Normalized_Position
!    --    Discriminant_Number
!    --    Discriminal
!    --    Renamed_Object                        (always Empty)
!    --    Corresponding_Discriminant
!    --    Discriminant_Default_Value
!    --    Corresponding_Record_Component
!    --    Original_Record_Component
!    --    CR_Discriminant
!    --    Is_Completely_Hidden
!    --    Is_Return_Object
!    --    Entry_Formal $$$
!    --    Linker_Section_Pragma $$$
     --    Next_Component_Or_Discriminant      (synth)
     --    Next_Discriminant                   (synth)
     --    Next_Stored_Discriminant            (synth)
  
     --  E_Entry
     --  E_Entry_Family
!    --    Protected_Body_Subprogram
!    --    Barrier_Function
!    --    Elaboration_Entity
!    --    Postconditions_Proc
!    --    Entry_Parameters_Type
!    --    First_Entity
!    --    Alias                                (for entry only. Empty)
!    --    Last_Entity
!    --    Accept_Address
!    --    Scope_Depth_Value
!    --    Protection_Object                    (protected kind)
!    --    Contract_Wrapper
!    --    Extra_Formals
!    --    Contract
!    --    SPARK_Pragma                         (protected kind)
!    --    Default_Expressions_Processed
!    --    Entry_Accepted
!    --    Has_Yield_Aspect
!    --    Has_Expanded_Contract
!    --    Ignore_SPARK_Mode_Pragmas
!    --    Is_Elaboration_Checks_OK_Id
!    --    Is_Elaboration_Warnings_OK_Id
!    --    Is_Entry_Wrapper
!    --    Needs_No_Actuals
!    --    Sec_Stack_Needed_For_Return
!    --    SPARK_Pragma_Inherited               (protected kind)
!    --    Uses_Sec_Stack
!    --    Renamed_Entity $$$
!    --    Address_Clause                       (synth)
!    --    Entry_Index_Type                     (synth)
!    --    First_Formal                         (synth)
!    --    First_Formal_With_Extras             (synth)
!    --    Is_Elaboration_Target                (synth)
!    --    Last_Formal                          (synth)
!    --    Number_Formals                       (synth)
!    --    Scope_Depth                          (synth)
  
     --  E_Entry_Index_Parameter
!    --    Entry_Index_Constant
  
     --  E_Enumeration_Literal
!    --    Enumeration_Pos
!    --    Enumeration_Rep
!    --    Alias
!    --    Enumeration_Rep_Expr
!    --    Interface_Name $$$
!    --    Renamed_Object $$$
!    --    Esize $$$
!    --    Renamed_Entity $$$
!    --    Next_Literal                         (synth)
  
     --  E_Enumeration_Type
     --  E_Enumeration_Subtype
!    --    First_Entity $$$ type
!    --    Renamed_Object $$$
!    --    Lit_Strings                          (root type only)
!    --    First_Literal
!    --    Lit_Indexes                          (root type only)
!    --    Default_Aspect_Value                 (base type only)
!    --    Scalar_Range
!    --    Lit_Hash                             (root type only)
!    --    Enum_Pos_To_Rep                      (type only)
!    --    Static_Discrete_Predicate
!    --    Has_Biased_Representation
!    --    Has_Contiguous_Rep
!    --    Has_Enumeration_Rep_Clause
!    --    Has_Pragma_Ordered                   (base type only)
!    --    Nonzero_Is_True                      (base type only)
!    --    No_Predicate_On_Actual
!    --    No_Dynamic_Predicate_On_Actual
!    --    Type_Low_Bound                       (synth)
!    --    Type_High_Bound                      (synth)
     --    (plus type attributes)
  
     --  E_Exception
!    --    Esize
!    --    Alignment
!    --    Renamed_Entity
!    --    Register_Exception_Call
!    --    Interface_Name
!    --    Activation_Record_Component
!    --    Discard_Names
!    --    Is_Raised
!    --    Renamed_Object $$$
  
     --  E_Exception_Type
!    --    Equivalent_Type
     --    (plus type attributes)
  
     --  E_Floating_Point_Type
     --  E_Floating_Point_Subtype
!    --    Digits_Value
!    --    Float_Rep                            (Float_Rep_Kind)
!    --    Default_Aspect_Value                 (base type only)
!    --    Scalar_Range
!    --    Static_Real_Or_String_Predicate
!    --    Machine_Emax_Value                   (synth)
!    --    Machine_Emin_Value                   (synth)
!    --    Machine_Mantissa_Value               (synth)
!    --    Machine_Radix_Value                  (synth)
!    --    Model_Emin_Value                     (synth)
!    --    Model_Epsilon_Value                  (synth)
!    --    Model_Mantissa_Value                 (synth)
!    --    Model_Small_Value                    (synth)
!    --    Safe_Emax_Value                      (synth)
!    --    Safe_First_Value                     (synth)
!    --    Safe_Last_Value                      (synth)
!    --    Type_Low_Bound                       (synth)
!    --    Type_High_Bound                      (synth)
     --    (plus type attributes)
  
     --  E_Function
     --  E_Generic_Function
!    --    Mechanism                            (Mechanism_Type)
!    --    Handler_Records                      (non-generic case only)
!    --    Protected_Body_Subprogram
!    --    Next_Inlined_Subprogram
!    --    Elaboration_Entity                   (not implicit /=)
!    --    Postconditions_Proc                  (non-generic case only)
!    --    DT_Position
!    --    DTC_Entity
!    --    First_Entity
!    --    Alias                                (non-generic case only)
!    --    Renamed_Entity
!    --    Renamed_Object $$$
!    --    Extra_Accessibility_Of_Result        (non-generic case only)
!    --    Last_Entity
!    --    Interface_Name
!    --    Scope_Depth_Value
!    --    Generic_Renamings                    (for an instance)
!    --    Inner_Instances                      (generic case only)
!    --    Inner_Instances $$$ also E_Function
!    --    Protection_Object                    (for concurrent kind)
!    --    Subps_Index                          (non-generic case only)
!    --    Interface_Alias
!    --    LSP_Subprogram                       (non-generic case only)
!    --    Overridden_Operation
!    --    Wrapped_Entity                       (non-generic case only)
!    --    Extra_Formals
!    --    Anonymous_Masters                    (non-generic case only)
!    --    Corresponding_Equality               (implicit /= only)
!    --    Thunk_Entity                         (thunk case only)
!    --    Corresponding_Procedure              (generate C code only)
!    --    Linker_Section_Pragma
!    --    Contract
!    --    Import_Pragma                        (non-generic case only)
!    --    Class_Postconditions
!    --    Class_Preconditions
!    --    Class_Preconditions_Subprogram
!    --    Dynamic_Call_Helper
!    --    Ignored_Class_Preconditions
!    --    Ignored_Class_Postconditions
!    --    Indirect_Call_Wrapper
!    --    Static_Call_Helper
!    --    Protected_Subprogram                 (non-generic case only)
!    --    SPARK_Pragma
!    --    Original_Protected_Subprogram
!    --    Body_Needed_For_SAL
!    --    Contains_Ignored_Ghost_Code
!    --    Default_Expressions_Processed
!    --    Delay_Cleanups
!    --    Delay_Subprogram_Descriptors
!    --    Discard_Names
!    --    Elaboration_Entity_Required
!    --    Has_Completion
!    --    Has_Controlling_Result
!    --    Has_Expanded_Contract                (non-generic case only)
!    --    Has_Master_Entity
!    --    Has_Missing_Return
!    --    Has_Nested_Block_With_Handler
!    --    Has_Nested_Subprogram
!    --    Has_Out_Or_In_Out_Parameter
!    --    Has_Recursive_Call
!    --    Has_Yield_Aspect
!    --    Ignore_SPARK_Mode_Pragmas
!    --    Is_Abstract_Subprogram               (non-generic case only)
!    --    Is_Called                            (non-generic case only)
!    --    Is_Class_Wide_Wrapper
!    --    Is_Constructor
!    --    Is_CUDA_Kernel                       (non-generic case only)
!    --    Is_DIC_Procedure                     (non-generic case only)
!    --    Is_Discrim_SO_Function
!    --    Is_Discriminant_Check_Function
!    --    Is_Elaboration_Checks_OK_Id
!    --    Is_Elaboration_Warnings_OK_Id
!    --    Is_Eliminated
!    --    Is_Generic_Actual_Subprogram         (non-generic case only)
!    --    Is_Hidden_Non_Overridden_Subpgm      (non-generic case only)
!    --    Is_Initial_Condition_Procedure       (non-generic case only)
!    --    Is_Inlined_Always                    (non-generic case only)
!    --    Is_Instantiated                      (generic case only)
!    --    Is_Intrinsic_Subprogram
!    --    Is_Invariant_Procedure               (non-generic case only)
!    --    Is_Machine_Code_Subprogram           (non-generic case only)
!    --    Is_Partial_Invariant_Procedure       (non-generic case only)
!    --    Is_Predicate_Function                (non-generic case only)
!    --    Is_Predicate_Function_M              (non-generic case only)
!    --    Is_Primitive
!    --    Is_Primitive_Wrapper                 (non-generic case only)
!    --    Is_Private_Descendant
!    --    Is_Private_Primitive                 (non-generic case only)
!    --    Is_Pure
!    --    Is_Visible_Lib_Unit
!    --    Is_Wrapper
!    --    Needs_No_Actuals
!    --    Requires_Overriding                  (non-generic case only)
!    --    Return_Present
!    --    Returns_By_Ref
!    --    Rewritten_For_C                      (generate C code only)
!    --    Sec_Stack_Needed_For_Return
!    --    SPARK_Pragma_Inherited
!    --    Uses_Sec_Stack
!    --    Address_Clause                       (synth)
!    --    First_Formal                         (synth)
!    --    First_Formal_With_Extras             (synth)
!    --    Is_Elaboration_Target                (synth)
!    --    Last_Formal                          (synth)
!    --    Number_Formals                       (synth)
!    --    Scope_Depth                          (synth)
  
     --  E_General_Access_Type
!    --    First_Entity $$$
!    --    Renamed_Entity $$$
!    --    Master_Id
!    --    Directly_Designated_Type
!    --    Associated_Storage_Pool              (root type only)
!    --    Finalization_Master                  (root type only)
!    --    Storage_Size_Variable                (base type only)
     --    (plus type attributes)
  
     --  E_Generic_In_Parameter
     --  E_Generic_In_Out_Parameter
!    --    Current_Value                        (always Empty)
!    --    Entry_Component
!    --    Actual_Subtype
!    --    Renamed_Object                       (always Empty)
!    --    Default_Value
!    --    Protected_Formal
!    --    Is_Controlling_Formal
!    --    Is_Return_Object
!    --    Parameter_Mode                       (synth)
  
     --  E_Incomplete_Type
     --  E_Incomplete_Subtype
!    --    Direct_Primitive_Operations
!    --    Non_Limited_View
!    --    Private_Dependents
!    --    Discriminant_Constraint
!    --    Stored_Constraint
!    --    First_Entity $$$
!    --    Last_Entity $$$
!    --    Has_Non_Limited_View                 (synth)
     --    (plus type attributes)
  
     --  E_In_Parameter
     --  E_In_Out_Parameter
     --  E_Out_Parameter
!    --    Linker_Section_Pragma $$$
!    --    Mechanism                            (Mechanism_Type)
!    --    Current_Value
!    --    Discriminal_Link                     (discriminals only)
!    --    Entry_Component
!    --    Esize
!    --    Extra_Accessibility
!    --    Alignment
!    --    Extra_Formal
!    --    Unset_Reference
!    --    Actual_Subtype
!    --    Renamed_Object
!    --    Spec_Entity
!    --    Default_Value
!    --    Default_Expr_Function
!    --    Protected_Formal
!    --    Extra_Constrained
!    --    Minimum_Accessibility
!    --    Last_Assignment                      (OUT, IN-OUT only)
!    --    Activation_Record_Component
!    --    Has_Initial_Value
!    --    Is_Controlling_Formal
!    --    Is_Only_Out_Parameter
!    --    Low_Bound_Tested
!    --    Is_Return_Object
!    --    Is_Activation_Record
!    --    Parameter_Mode                       (synth)
  
     --  E_Label
!    --    Renamed_Object $$$
!    --    Renamed_Entity $$$
!    --    Enclosing_Scope
!    --    Reachable
  
     --  E_Limited_Private_Type
     --  E_Limited_Private_Subtype
!    --    Scalar_Range $$$ type
!    --    First_Entity
!    --    Private_Dependents
!    --    Underlying_Full_View
!    --    Last_Entity
!    --    Discriminant_Constraint
!    --    Stored_Constraint
!    --    Has_Completion
     --    (plus type attributes)
  
     --  E_Loop
!    --    First_Exit_Statement
!    --    Has_Exit
!    --    Has_Loop_Entry_Attributes
!    --    Has_Master_Entity
!    --    Has_Nested_Block_With_Handler
!    --    Uses_Sec_Stack
!    --    First_Entity $$$
!    --    Last_Entity $$$
!    --    Renamed_Object $$$
  
     --  E_Modular_Integer_Type
     --  E_Modular_Integer_Subtype
!    --    Modulus                              (base type only)
!    --    Default_Aspect_Value                 (base type only)
!    --    Original_Array_Type
!    --    Scalar_Range
!    --    Static_Discrete_Predicate
!    --    Non_Binary_Modulus                   (base type only)
!    --    Has_Biased_Representation
!    --    Has_Shift_Operator                   (base type only)
!    --    No_Predicate_On_Actual
!    --    No_Dynamic_Predicate_On_Actual
!    --    Type_Low_Bound                       (synth)
!    --    Type_High_Bound                      (synth)
     --    (plus type attributes)
  
     --  E_Named_Integer
+    --    Renamed_Object $$$
  
     --  E_Named_Real
  
     --  E_Operator
!    --    First_Entity
!    --    Alias
!    --    Extra_Accessibility_Of_Result
!    --    Last_Entity
!    --    Subps_Index
!    --    Overridden_Operation
!    --    Linker_Section_Pragma
!    --    Contract
!    --    Import_Pragma
!    --    LSP_Subprogram
!    --    SPARK_Pragma
!    --    Default_Expressions_Processed
!    --    Has_Nested_Subprogram
!    --    Ignore_SPARK_Mode_Pragmas
!    --    Is_Class_Wide_Wrapper
!    --    Is_Elaboration_Checks_OK_Id
!    --    Is_Elaboration_Warnings_OK_Id
!    --    Is_Intrinsic_Subprogram
!    --    Is_Machine_Code_Subprogram
!    --    Is_Primitive
!    --    Is_Pure
!    --    Is_Wrapper
!    --    SPARK_Pragma_Inherited
!    --    Interface_Name $$$
!    --    Renamed_Entity $$$
!    --    Renamed_Object $$$
!    --    Is_Elaboration_Target                (synth)
     --    Aren't there more flags and fields? seems like this list should be
     --    more similar to the E_Function list, which is much longer ???
  
     --  E_Ordinary_Fixed_Point_Type
     --  E_Ordinary_Fixed_Point_Subtype
!    --    Delta_Value
!    --    Default_Aspect_Value                 (base type only)
!    --    Scalar_Range
!    --    Static_Real_Or_String_Predicate
!    --    Small_Value
!    --    Has_Small_Clause
!    --    Aft_Value                            (synth)
!    --    Type_Low_Bound                       (synth)
!    --    Type_High_Bound                      (synth)
     --    (plus type attributes)
  
     --  E_Package
     --  E_Generic_Package
!    --    Dependent_Instances                  (for an instance)
!    --    Handler_Records                      (non-generic case only)
!    --    Generic_Homonym                      (generic case only)
!    --    Associated_Formal_Package
!    --    Elaboration_Entity
!    --    Related_Instance                     (non-generic case only)
!    --    First_Private_Entity
!    --    First_Entity
!    --    Renamed_Entity
!    --    Renamed_Object $$$
!    --    Body_Entity
!    --    Last_Entity
!    --    Interface_Name
!    --    Scope_Depth_Value
!    --    Generic_Renamings                    (for an instance)
!    --    Inner_Instances                      (generic case only)
!    --    Inner_Instances $$$ also E_Package
!    --    Limited_View                         (non-generic/instance)
!    --    Incomplete_Actuals                   (for an instance)
!    --    Abstract_States
!    --    Package_Instantiation
!    --    Current_Use_Clause
!    --    Finalizer                            (non-generic case only)
!    --    Anonymous_Masters                    (non-generic case only)
!    --    Contract
!    --    SPARK_Pragma
!    --    SPARK_Aux_Pragma
!    --    Body_Needed_For_Inlining
!    --    Body_Needed_For_SAL
!    --    Contains_Ignored_Ghost_Code
!    --    Delay_Subprogram_Descriptors
!    --    Discard_Names
!    --    Elaborate_Body_Desirable             (non-generic case only)
!    --    Elaboration_Entity_Required
!    --    From_Limited_With
!    --    Has_All_Calls_Remote
!    --    Has_Completion
!    --    Has_Forward_Instantiation
!    --    Has_Master_Entity
!    --    Has_RACW                             (non-generic case only)
!    --    Ignore_SPARK_Mode_Pragmas
!    --    Is_Called                            (non-generic case only)
!    --    Is_Elaboration_Checks_OK_Id
!    --    Is_Elaboration_Warnings_OK_Id
!    --    Is_Instantiated
!    --    In_Package_Body
!    --    Is_Private_Descendant
!    --    In_Use
!    --    Is_Visible_Lib_Unit
!    --    Renamed_In_Spec                      (non-generic case only)
!    --    SPARK_Aux_Pragma_Inherited
!    --    SPARK_Pragma_Inherited
!    --    Static_Elaboration_Desired           (non-generic case only)
!    --    Renamed_Object $$$
!    --    Has_Non_Null_Abstract_State          (synth)
!    --    Has_Null_Abstract_State              (synth)
!    --    Is_Elaboration_Target                (synth)
!    --    Is_Wrapper_Package                   (synth) (non-generic case only)
!    --    Has_Limited_View                     (synth) (non-generic case only)
!    --    Scope_Depth                          (synth)
  
     --  E_Package_Body
!    --    Handler_Records                      (non-generic case only)
!    --    Related_Instance                     (non-generic case only)
!    --    First_Entity
!    --    Spec_Entity
!    --    Last_Entity
!    --    Scope_Depth_Value
!    --    Finalizer                            (non-generic case only)
!    --    Contract
!    --    SPARK_Pragma
!    --    SPARK_Aux_Pragma
!    --    Contains_Ignored_Ghost_Code
!    --    Delay_Subprogram_Descriptors
!    --    Ignore_SPARK_Mode_Pragmas
!    --    SPARK_Aux_Pragma_Inherited
!    --    SPARK_Pragma_Inherited
!    --    Renamed_Entity $$$
!    --    Scope_Depth                          (synth)
  
     --  E_Private_Type
     --  E_Private_Subtype
!    --    Scalar_Range $$$ type
!    --    Direct_Primitive_Operations
!    --    First_Entity
!    --    Private_Dependents
!    --    Underlying_Full_View
!    --    Last_Entity
!    --    Discriminant_Constraint
!    --    Stored_Constraint
!    --    Has_Completion
!    --    Is_Controlled_Active                 (base type only)
!    --  $$$above in                            (plus type attributes)
     --    (plus type attributes)
  
     --  E_Procedure
     --  E_Generic_Procedure
!    --    Associated_Node_For_Itype $$$ E_Procedure
!    --    Handler_Records                      (non-generic case only)
!    --    Protected_Body_Subprogram
!    --    Next_Inlined_Subprogram
!    --    Elaboration_Entity
!    --    Postconditions_Proc                  (non-generic case only)
!    --    DT_Position
!    --    DTC_Entity
!    --    First_Entity
!    --    Alias                                (non-generic case only)
!    --    Renamed_Entity
!    --    Renamed_Object $$$
!    --    Receiving_Entry                      (non-generic case only)
!    --    Last_Entity
!    --    Interface_Name
!    --    Scope_Depth_Value
!    --    Generic_Renamings                    (for an instance)
!    --    Inner_Instances                      (generic case only)
!    --    Inner_Instances $$$ also E_Procedure
!    --    Protection_Object                    (for concurrent kind)
!    --    Subps_Index                          (non-generic case only)
!    --    Interface_Alias
!    --    LSP_Subprogram                       (non-generic case only)
!    --    Overridden_Operation                 (never for init proc)
!    --    Wrapped_Entity                       (non-generic case only)
!    --    Extra_Formals
!    --    Anonymous_Masters                    (non-generic case only)
!    --    Static_Initialization                (init_proc only)
!    --    Thunk_Entity                         (thunk case only)
!    --    Corresponding_Function               (generate C code only)
!    --    Linker_Section_Pragma
!    --    Contract
!    --    Import_Pragma                        (non-generic case only)
!    --    Class_Postconditions
!    --    Class_Preconditions
!    --    Class_Preconditions_Subprogram
!    --    Dynamic_Call_Helper
!    --    Ignored_Class_Preconditions
!    --    Ignored_Class_Postconditions
!    --    Indirect_Call_Wrapper
!    --    Static_Call_Helper
!    --    Protected_Subprogram                 (non-generic case only)
!    --    SPARK_Pragma
!    --    Original_Protected_Subprogram
!    --    Body_Needed_For_SAL
!    --    Contains_Ignored_Ghost_Code
!    --    Delay_Cleanups                      $$$Dup below
!    --    Discard_Names                       $$$Dup below
!    --    Elaboration_Entity_Required
!    --    Default_Expressions_Processed
!    --    Delay_Cleanups
!    --    Delay_Subprogram_Descriptors
!    --    Discard_Names
!    --    Has_Completion
!    --    Has_Expanded_Contract                (non-generic case only)
!    --    Has_Master_Entity
!    --    Has_Nested_Block_With_Handler
!    --    Has_Nested_Subprogram
!    --    Has_Yield_Aspect
!    --    Ignore_SPARK_Mode_Pragmas
!    --    Is_Abstract_Subprogram               (non-generic case only)
!    --    Is_Asynchronous
!    --    Is_Called                            (non-generic case only)
!    --    Is_Class_Wide_Wrapper
!    --    Is_Constructor
!    --    Is_CUDA_Kernel
!    --    Is_DIC_Procedure                     (non-generic case only)
!    --    Is_Elaboration_Checks_OK_Id
!    --    Is_Elaboration_Warnings_OK_Id
!    --    Is_Eliminated
!    --    Is_Generic_Actual_Subprogram         (non-generic case only)
!    --    Is_Hidden_Non_Overridden_Subpgm      (non-generic case only)
!    --    Is_Initial_Condition_Procedure       (non-generic case only)
!    --    Is_Inlined_Always                    (non-generic case only)
!    --    Is_Instantiated                      (generic case only)
!    --    Is_Interrupt_Handler
!    --    Is_Intrinsic_Subprogram
!    --    Is_Invariant_Procedure               (non-generic case only)
!    --    Is_Machine_Code_Subprogram           (non-generic case only)
!    --    Is_Null_Init_Proc
!    --    Is_Partial_DIC_Procedure             (synth) (non-generic case only)
!    --    Is_Partial_Invariant_Procedure       (non-generic case only)
!    --    Is_Predicate_Function                (non-generic case only)
!    --    Is_Predicate_Function_M              (non-generic case only)
!    --    Is_Primitive
!    --    Is_Primitive_Wrapper                 (non-generic case only)
!    --    Is_Private_Descendant
!    --    Is_Private_Primitive                 (non-generic case only)
!    --    Is_Pure
!    --    Is_Wrapper
!    --    Is_Valued_Procedure
!    --    Is_Visible_Lib_Unit
!    --    Needs_No_Actuals
!    --    No_Return
!    --    Requires_Overriding                  (non-generic case only)
!    --    Sec_Stack_Needed_For_Return
!    --    SPARK_Pragma_Inherited
!    --    Entry_Parameters_Type $$$
!    --    Address_Clause                       (synth)
!    --    First_Formal                         (synth)
!    --    First_Formal_With_Extras             (synth)
!    --    Is_Elaboration_Target                (synth)
!    --    Is_Finalizer                         (synth)
!    --    Last_Formal                          (synth)
!    --    Number_Formals                       (synth)
  
     --  E_Protected_Body
!    --    SPARK_Pragma
!    --    Ignore_SPARK_Mode_Pragmas
!    --    SPARK_Pragma_Inherited
     --    (any others??? First/Last Entity, Scope_Depth???)
  
!    --  E_Protected_Object$$$No such thing
  
     --  E_Protected_Type
     --  E_Protected_Subtype
!    --    Direct_Primitive_Operations
!    --    First_Private_Entity
!    --    First_Entity
!    --    Corresponding_Record_Type
!    --    Entry_Bodies_Array
!    --    Last_Entity
!    --    Discriminant_Constraint
!    --    Scope_Depth_Value
!    --    Stored_Constraint
!    --    Anonymous_Object
!    --    Contract
!    --    Entry_Max_Queue_Lengths_Array
!    --    SPARK_Aux_Pragma
!    --    Ignore_SPARK_Mode_Pragmas
!    --    SPARK_Aux_Pragma_Inherited
!    --    Uses_Lock_Free
!    --    First_Component                      (synth)
!    --    First_Component_Or_Discriminant      (synth)
!    --    Has_Entries                          (synth)
!    --    Has_Interrupt_Handler                (synth)
!    --    Number_Entries                       (synth)
!    --    Scope_Depth                          (synth)
     --    (plus type attributes)
  
     --  E_Record_Type
     --  E_Record_Subtype
!    --    Renamed_Entity $$$ type
!    --    Interface_Name $$$ type
!    --    Direct_Primitive_Operations
!    --    Access_Disp_Table                    (base type only)
!    --    Cloned_Subtype                       (subtype case only)
!    --    First_Entity
!    --    Corresponding_Concurrent_Type
!    --    Parent_Subtype                       (base type only)
!    --    Last_Entity
!    --    Discriminant_Constraint
!    --    Corresponding_Remote_Type
!    --    Stored_Constraint
!    --    Interfaces
!    --    Dispatch_Table_Wrappers              (base type only)
!    --    Underlying_Record_View               (base type only)
!    --    Access_Disp_Table_Elab_Flag          (base type only)
!    --    Predicated_Parent                    (subtype only)
!    --    Component_Alignment                  (special)  (base type only)
!    --    C_Pass_By_Copy                       (base type only)
!    --    Has_Dispatch_Table                   (base tagged type only)
!    --    Has_Pragma_Pack                      (impl base type only)
!    --    Has_Private_Ancestor
!    --    Has_Private_Extension
!    --    Has_Record_Rep_Clause                (base type only)
!    --    Has_Static_Discriminants             (subtype only)
!    --    Is_Class_Wide_Equivalent_Type
!    --    Is_Concurrent_Record_Type
!    --    Is_Constrained
!    --    Is_Controlled_Active                 (base type only)
!    --  $$$above in                            (plus type attributes)
!    --    Is_Interface
!    --    Is_Limited_Interface
!    --    No_Reordering                        (base type only)
!    --    Reverse_Bit_Order                    (base type only)
!    --    Reverse_Storage_Order                (base type only)
!    --    SSO_Set_High_By_Default              (base type only)
!    --    SSO_Set_Low_By_Default               (base type only)
!    --    First_Component                      (synth)
!    --    First_Component_Or_Discriminant      (synth)
     --    (plus type attributes)
  
     --  E_Record_Type_With_Private
     --  E_Record_Subtype_With_Private
!    --    Corresponding_Remote_Type $$$ E_Record_Subtype_With_Private
!    --    Direct_Primitive_Operations
!    --    First_Entity
!    --    Private_Dependents
!    --    Underlying_Full_View
!    --    Last_Entity
!    --    Discriminant_Constraint
!    --    Stored_Constraint
!    --    Interfaces
!    --    Underlying_Record_View $$$           (base type only)
!    --    Predicated_Parent                    (subtype only)
!    --    Has_Completion
!    --    Has_Private_Ancestor
!    --    Has_Private_Extension
!    --    Has_Record_Rep_Clause                (base type only)
!    --    Is_Concurrent_Record_Type
!    --    Is_Constrained
!    --    Is_Controlled_Active                 (base type only)
!    --  $$$above in                            (plus type attributes)
!    --    Is_Interface
!    --    Is_Limited_Interface
!    --    No_Reordering                        (base type only)
!    --    Reverse_Bit_Order                    (base type only)
!    --    Reverse_Storage_Order                (base type only)
!    --    SSO_Set_High_By_Default              (base type only)
!    --    SSO_Set_Low_By_Default               (base type only)
!    --    Corresponding_Remote_Type $$$ type
!    --    First_Component                      (synth)
!    --    First_Component_Or_Discriminant      (synth)
     --    (plus type attributes)
  
     --  E_Return_Statement
!    --    Return_Applies_To
!    --    First_Entity $$$
!    --    Last_Entity $$$
  
     --  E_Signed_Integer_Type
     --  E_Signed_Integer_Subtype
!    --    Renamed_Object $$$ subtype
!    --    Interface_Name $$$ subtype
!    --    Direct_Primitive_Operations $$$ type
!    --    First_Entity $$$
!    --    Default_Aspect_Value                 (base type only)
!    --    Scalar_Range
!    --    Static_Discrete_Predicate
!    --    Has_Biased_Representation
!    --    Has_Shift_Operator                   (base type only)
!    --    No_Predicate_On_Actual
!    --    No_Dynamic_Predicate_On_Actual
!    --    Type_Low_Bound                       (synth)
!    --    Type_High_Bound                      (synth)
     --    (plus type attributes)
  
     --  E_String_Literal_Subtype
!    --    String_Literal_Length
!    --    First_Index                          (always Empty)
!    --    String_Literal_Low_Bound
!    --    Packed_Array_Impl_Type
     --    (plus type attributes)
  
     --  E_Subprogram_Body
!    --    Mechanism
!    --    First_Entity
!    --    Corresponding_Protected_Entry
!    --    Last_Entity
!    --    Scope_Depth_Value
!    --    Extra_Formals
!    --    Anonymous_Masters
!    --    Contract
!    --    SPARK_Pragma
!    --    Contains_Ignored_Ghost_Code
!    --    SPARK_Pragma_Inherited
!    --    Interface_Name $$$
!    --    Renamed_Entity $$$
!    --    Scope_Depth                          (synth)
  
     --  E_Subprogram_Type
!    --    Extra_Accessibility_Of_Result
!    --    Directly_Designated_Type
!    --    Extra_Formals
!    --    Access_Subprogram_Wrapper
!    --    First_Formal                         (synth)
!    --    First_Formal_With_Extras             (synth)
!    --    Last_Formal                          (synth)
!    --    Number_Formals                       (synth)
!    --    Returns_By_Ref
!    --    First_Entity $$$
!    --    Last_Entity $$$
!    --    Interface_Name $$$
     --    (plus type attributes)
  
     --  E_Task_Body
!    --    Contract
!    --    SPARK_Pragma
!    --    Ignore_SPARK_Mode_Pragmas
!    --    SPARK_Pragma_Inherited
!    --    First_Entity $$$
     --    (any others??? First/Last Entity, Scope_Depth???)
  
     --  E_Task_Type
     --  E_Task_Subtype
!    --    Direct_Primitive_Operations
!    --    First_Private_Entity
!    --    First_Entity
!    --    Corresponding_Record_Type
!    --    Last_Entity
!    --    Discriminant_Constraint
!    --    Scope_Depth_Value
!    --    Stored_Constraint
!    --    Task_Body_Procedure
!    --    Storage_Size_Variable                (base type only)
!    --    Relative_Deadline_Variable           (base type only)
!    --    Anonymous_Object
!    --    Contract
!    --    SPARK_Aux_Pragma
!    --    Delay_Cleanups
!    --    Has_Master_Entity
!    --    Has_Storage_Size_Clause              (base type only)
!    --    Ignore_SPARK_Mode_Pragmas
!    --    Is_Elaboration_Checks_OK_Id
!    --    Is_Elaboration_Warnings_OK_Id
!    --    SPARK_Aux_Pragma_Inherited
!    --    First_Component                      (synth)
!    --    First_Component_Or_Discriminant      (synth)
!    --    Has_Entries                          (synth)
!    --    Is_Elaboration_Target                (synth)
!    --    Number_Entries                       (synth)
!    --    Scope_Depth                          (synth)
     --    (plus type attributes)
  
     --  E_Variable
!    --    Hiding_Loop_Variable
!    --    Current_Value
!    --    Part_Of_Constituents
!    --    Part_Of_References
!    --    Esize
!    --    Extra_Accessibility
!    --    Alignment
!    --    Status_Flag_Or_Transient_Decl        (transient object only)
!    --    Unset_Reference
!    --    Actual_Subtype
!    --    Renamed_Object
!    --    Renamed_Entity $$$
!    --    Discriminal_Link $$$
!    --    Size_Check_Code
!    --    Prival_Link
!    --    Interface_Name
!    --    Shared_Var_Procs_Instance
!    --    Extra_Constrained
!    --    Related_Expression
!    --    Debug_Renaming_Link
!    --    Last_Assignment
!    --    Related_Type
!    --    Initialization_Statements
!    --    BIP_Initialization_Call
!    --    Last_Aggregate_Assignment
!    --    Activation_Record_Component
!    --    Encapsulating_State
!    --    Linker_Section_Pragma
!    --    Contract
!    --    Anonymous_Designated_Type
!    --    Validated_Object
!    --    SPARK_Pragma
!    --    Has_Alignment_Clause
!    --    Has_Atomic_Components
!    --    Has_Biased_Representation
!    --    Has_Independent_Components
!    --    Has_Initial_Value
!    --    Has_Size_Clause
!    --    Has_Volatile_Components
!    --    Is_Atomic
!    --    Is_Elaboration_Checks_OK_Id
!    --    Is_Elaboration_Warnings_OK_Id
!    --    Is_Eliminated
!    --    Is_Finalized_Transient
!    --    Is_Ignored_Transient
!    --    Is_Independent
!    --    Is_Return_Object
!    --    Is_Safe_To_Reevaluate
!    --    Is_Shared_Passive
!    --    Is_True_Constant
!    --    Is_Uplevel_Referenced_Entity
!    --    Is_Volatile
!    --    Is_Volatile_Full_Access
!    --    OK_To_Rename
!    --    Optimize_Alignment_Space
!    --    Optimize_Alignment_Time
!    --    SPARK_Pragma_Inherited
!    --    Suppress_Initialization
!    --    Treat_As_Volatile
!    --    Address_Clause                       (synth)
!    --    Alignment_Clause                     (synth)
!    --    Is_Elaboration_Target                (synth)
!    --    Is_Full_Access                       (synth)
!    --    Size_Clause                          (synth)
  
     --  E_Void
     --    Since E_Void is the initial Ekind value of an entity when it is first
*************** package Einfo is
*** 6892,6922 ****
     --    type checking, since there is no assurance that the eventual Ekind
     --    value will be appropriate for the attributes set, and the consequence
     --    is that the dynamic type checking in the Einfo body is unnecessarily
!    --    weak. To be looked at systematically some time ???
! 
!    ---------------------------------
!    -- Component_Alignment Control --
!    ---------------------------------
! 
!    --  There are four types of alignment possible for array and record
!    --  types, and a field in the type entities contains a value of the
!    --  following type indicating which alignment choice applies. For full
!    --  details of the meaning of these alignment types, see description
!    --  of the Component_Alignment pragma.
! 
!    type Component_Alignment_Kind is (
!       Calign_Default,          -- default alignment
!       Calign_Component_Size,   -- natural alignment for component size
!       Calign_Component_Size_4, -- natural for size <= 4, 4 for size >= 4
!       Calign_Storage_Unit);    -- all components byte aligned
! 
!    -----------------------------------
!    -- Floating Point Representation --
!    -----------------------------------
! 
!    type Float_Rep_Kind is (
!       IEEE_Binary,  -- IEEE 754p conforming binary format
!       AAMP);        -- AAMP format
  
     ---------------
     -- Iterators --
--- 6260,6285 ----
     --    type checking, since there is no assurance that the eventual Ekind
     --    value will be appropriate for the attributes set, and the consequence
     --    is that the dynamic type checking in the Einfo body is unnecessarily
!    --    weak.
!    --
!    --    The following are examples of getters and setters called with E_Void:
!    --    Entry_Formal $$$
!    --    Esize $$$
!    --    First_Entity $$$
!    --    Handler_Records $$$
!    --    Interface_Name $$$
!    --    Last_Entity $$$
!    --    Renamed_Entity $$$
!    --    Renamed_Object $$$
!    --    Scalar_Range $$$
!    --    Set_Associated_Node_For_Itype $$$
!    --    Set_Debug_Renaming_Link $$$
!    --    Set_Entry_Cancel_Parameter $$$
!    --    Set_First_Entity $$$
!    --    Set_Inner_Instances $$$
!    --    Set_Last_Entity $$$
!    --    Set_Scalar_Range $$$
!    --    Set_Entry_Cancel_Parameter $$$
  
     ---------------
     -- Iterators --
*************** package Einfo is
*** 7085,9788 ****
     --  example), the expansion mechanism uses the placeholder of the component
     --  to correct the Entity and Etype of the reference.
  
-    -------------------
-    -- Type Synonyms --
-    -------------------
- 
-    --  The following type synonyms are used to tidy up the function and
-    --  procedure declarations that follow, and also to make it possible to meet
-    --  the requirement for the XEINFO utility that all function specs must fit
-    --  on a single source line.
- 
-    subtype B is Boolean;
-    subtype C is Component_Alignment_Kind;
-    subtype E is Entity_Id;
-    subtype F is Float_Rep_Kind;
-    subtype M is Mechanism_Type;
-    subtype N is Node_Id;
-    subtype U is Uint;
-    subtype R is Ureal;
-    subtype L is Elist_Id;
-    subtype S is List_Id;
- 
-    --------------------------------
-    -- Attribute Access Functions --
-    --------------------------------
- 
-    --  All attributes are manipulated through a procedural interface. This
-    --  section contains the functions used to obtain attribute values which
-    --  correspond to values in fields or flags in the entity itself.
- 
-    function Abstract_States                     (Id : E) return L;
-    function Accept_Address                      (Id : E) return L;
-    function Access_Disp_Table                   (Id : E) return L;
-    function Access_Disp_Table_Elab_Flag         (Id : E) return E;
-    function Access_Subprogram_Wrapper           (Id : E) return E;
-    function Activation_Record_Component         (Id : E) return E;
-    function Actual_Subtype                      (Id : E) return E;
-    function Address_Taken                       (Id : E) return B;
-    function Alias                               (Id : E) return E;
-    function Alignment                           (Id : E) return U;
-    function Anonymous_Designated_Type           (Id : E) return E;
-    function Anonymous_Masters                   (Id : E) return L;
-    function Anonymous_Object                    (Id : E) return E;
-    function Associated_Entity                   (Id : E) return E;
-    function Associated_Formal_Package           (Id : E) return E;
-    function Associated_Node_For_Itype           (Id : E) return N;
-    function Associated_Storage_Pool             (Id : E) return E;
-    function Barrier_Function                    (Id : E) return N;
-    function BIP_Initialization_Call             (Id : E) return N;
-    function Block_Node                          (Id : E) return N;
-    function Body_Entity                         (Id : E) return E;
-    function Body_Needed_For_SAL                 (Id : E) return B;
-    function Body_Needed_For_Inlining            (Id : E) return B;
-    function Body_References                     (Id : E) return L;
-    function C_Pass_By_Copy                      (Id : E) return B;
-    function Can_Never_Be_Null                   (Id : E) return B;
-    function Can_Use_Internal_Rep                (Id : E) return B;
-    function Checks_May_Be_Suppressed            (Id : E) return B;
-    function Class_Wide_Clone                    (Id : E) return E;
-    function Class_Wide_Type                     (Id : E) return E;
-    function Cloned_Subtype                      (Id : E) return E;
-    function Component_Bit_Offset                (Id : E) return U;
-    function Component_Clause                    (Id : E) return N;
-    function Component_Size                      (Id : E) return U;
-    function Component_Type                      (Id : E) return E;
-    function Contains_Ignored_Ghost_Code         (Id : E) return B;
-    function Contract                            (Id : E) return N;
-    function Contract_Wrapper                    (Id : E) return E;
-    function Corresponding_Concurrent_Type       (Id : E) return E;
-    function Corresponding_Discriminant          (Id : E) return E;
-    function Corresponding_Equality              (Id : E) return E;
-    function Corresponding_Function              (Id : E) return E;
-    function Corresponding_Procedure             (Id : E) return E;
-    function Corresponding_Protected_Entry       (Id : E) return E;
-    function Corresponding_Record_Component      (Id : E) return E;
-    function Corresponding_Record_Type           (Id : E) return E;
-    function Corresponding_Remote_Type           (Id : E) return E;
-    function CR_Discriminant                     (Id : E) return E;
-    function Current_Use_Clause                  (Id : E) return E;
-    function Current_Value                       (Id : E) return N;
-    function Debug_Info_Off                      (Id : E) return B;
-    function Debug_Renaming_Link                 (Id : E) return E;
-    function Default_Aspect_Component_Value      (Id : E) return N;
-    function Default_Aspect_Value                (Id : E) return N;
-    function Default_Expr_Function               (Id : E) return E;
-    function Default_Expressions_Processed       (Id : E) return B;
-    function Default_Value                       (Id : E) return N;
-    function Delay_Cleanups                      (Id : E) return B;
-    function Delay_Subprogram_Descriptors        (Id : E) return B;
-    function Delta_Value                         (Id : E) return R;
-    function Dependent_Instances                 (Id : E) return L;
-    function Depends_On_Private                  (Id : E) return B;
-    function Derived_Type_Link                   (Id : E) return E;
-    function Digits_Value                        (Id : E) return U;
-    function Direct_Primitive_Operations         (Id : E) return L;
-    function Directly_Designated_Type            (Id : E) return E;
-    function Disable_Controlled                  (Id : E) return B;
-    function Discard_Names                       (Id : E) return B;
-    function Discriminal                         (Id : E) return E;
-    function Discriminal_Link                    (Id : E) return E;
-    function Discriminant_Checking_Func          (Id : E) return E;
-    function Discriminant_Constraint             (Id : E) return L;
-    function Discriminant_Default_Value          (Id : E) return N;
-    function Discriminant_Number                 (Id : E) return U;
-    function Dispatch_Table_Wrappers             (Id : E) return L;
-    function DT_Entry_Count                      (Id : E) return U;
-    function DT_Offset_To_Top_Func               (Id : E) return E;
-    function DT_Position                         (Id : E) return U;
-    function DTC_Entity                          (Id : E) return E;
-    function Elaborate_Body_Desirable            (Id : E) return B;
-    function Elaboration_Entity                  (Id : E) return E;
-    function Elaboration_Entity_Required         (Id : E) return B;
-    function Encapsulating_State                 (Id : E) return E;
-    function Enclosing_Scope                     (Id : E) return E;
-    function Entry_Accepted                      (Id : E) return B;
-    function Entry_Bodies_Array                  (Id : E) return E;
-    function Entry_Cancel_Parameter              (Id : E) return E;
-    function Entry_Component                     (Id : E) return E;
-    function Entry_Formal                        (Id : E) return E;
-    function Entry_Index_Constant                (Id : E) return E;
-    function Entry_Index_Type                    (Id : E) return E;
-    function Entry_Max_Queue_Lengths_Array       (Id : E) return E;
-    function Entry_Parameters_Type               (Id : E) return E;
-    function Enum_Pos_To_Rep                     (Id : E) return E;
-    function Enumeration_Pos                     (Id : E) return U;
-    function Enumeration_Rep                     (Id : E) return U;
-    function Enumeration_Rep_Expr                (Id : E) return N;
-    function Equivalent_Type                     (Id : E) return E;
-    function Esize                               (Id : E) return U;
-    function Extra_Accessibility                 (Id : E) return E;
-    function Extra_Accessibility_Of_Result       (Id : E) return E;
-    function Extra_Constrained                   (Id : E) return E;
-    function Extra_Formal                        (Id : E) return E;
-    function Extra_Formals                       (Id : E) return E;
-    function Finalization_Master                 (Id : E) return E;
-    function Finalize_Storage_Only               (Id : E) return B;
-    function Finalizer                           (Id : E) return E;
-    function First_Entity                        (Id : E) return E;
-    function First_Exit_Statement                (Id : E) return N;
-    function First_Index                         (Id : E) return N;
-    function First_Literal                       (Id : E) return E;
-    function First_Private_Entity                (Id : E) return E;
-    function First_Rep_Item                      (Id : E) return N;
-    function Float_Rep                           (Id : E) return F;
-    function Freeze_Node                         (Id : E) return N;
-    function From_Limited_With                   (Id : E) return B;
-    function Full_View                           (Id : E) return E;
-    function Generic_Homonym                     (Id : E) return E;
-    function Generic_Renamings                   (Id : E) return L;
-    function Handler_Records                     (Id : E) return S;
-    function Has_Aliased_Components              (Id : E) return B;
-    function Has_Alignment_Clause                (Id : E) return B;
-    function Has_All_Calls_Remote                (Id : E) return B;
-    function Has_Atomic_Components               (Id : E) return B;
-    function Has_Biased_Representation           (Id : E) return B;
-    function Has_Completion                      (Id : E) return B;
-    function Has_Completion_In_Body              (Id : E) return B;
-    function Has_Complex_Representation          (Id : E) return B;
-    function Has_Component_Size_Clause           (Id : E) return B;
-    function Has_Constrained_Partial_View        (Id : E) return B;
-    function Has_Contiguous_Rep                  (Id : E) return B;
-    function Has_Controlled_Component            (Id : E) return B;
-    function Has_Controlling_Result              (Id : E) return B;
-    function Has_Convention_Pragma               (Id : E) return B;
-    function Has_Default_Aspect                  (Id : E) return B;
-    function Has_Delayed_Aspects                 (Id : E) return B;
-    function Has_Delayed_Freeze                  (Id : E) return B;
-    function Has_Delayed_Rep_Aspects             (Id : E) return B;
-    function Has_Discriminants                   (Id : E) return B;
-    function Has_Dispatch_Table                  (Id : E) return B;
-    function Has_Dynamic_Predicate_Aspect        (Id : E) return B;
-    function Has_Enumeration_Rep_Clause          (Id : E) return B;
-    function Has_Exit                            (Id : E) return B;
-    function Has_Expanded_Contract               (Id : E) return B;
-    function Has_Forward_Instantiation           (Id : E) return B;
-    function Has_Fully_Qualified_Name            (Id : E) return B;
-    function Has_Gigi_Rep_Item                   (Id : E) return B;
-    function Has_Homonym                         (Id : E) return B;
-    function Has_Implicit_Dereference            (Id : E) return B;
-    function Has_Independent_Components          (Id : E) return B;
-    function Has_Inheritable_Invariants          (Id : E) return B;
-    function Has_Inherited_DIC                   (Id : E) return B;
-    function Has_Inherited_Invariants            (Id : E) return B;
-    function Has_Initial_Value                   (Id : E) return B;
-    function Has_Loop_Entry_Attributes           (Id : E) return B;
-    function Has_Machine_Radix_Clause            (Id : E) return B;
-    function Has_Master_Entity                   (Id : E) return B;
-    function Has_Missing_Return                  (Id : E) return B;
-    function Has_Nested_Block_With_Handler       (Id : E) return B;
-    function Has_Nested_Subprogram               (Id : E) return B;
-    function Has_Non_Standard_Rep                (Id : E) return B;
-    function Has_Object_Size_Clause              (Id : E) return B;
-    function Has_Out_Or_In_Out_Parameter         (Id : E) return B;
-    function Has_Own_DIC                         (Id : E) return B;
-    function Has_Own_Invariants                  (Id : E) return B;
-    function Has_Partial_Visible_Refinement      (Id : E) return B;
-    function Has_Per_Object_Constraint           (Id : E) return B;
-    function Has_Pragma_Controlled               (Id : E) return B;
-    function Has_Pragma_Elaborate_Body           (Id : E) return B;
-    function Has_Pragma_Inline                   (Id : E) return B;
-    function Has_Pragma_Inline_Always            (Id : E) return B;
-    function Has_Pragma_No_Inline                (Id : E) return B;
-    function Has_Pragma_Ordered                  (Id : E) return B;
-    function Has_Pragma_Pack                     (Id : E) return B;
-    function Has_Pragma_Preelab_Init             (Id : E) return B;
-    function Has_Pragma_Pure                     (Id : E) return B;
-    function Has_Pragma_Pure_Function            (Id : E) return B;
-    function Has_Pragma_Thread_Local_Storage     (Id : E) return B;
-    function Has_Pragma_Unmodified               (Id : E) return B;
-    function Has_Pragma_Unreferenced             (Id : E) return B;
-    function Has_Pragma_Unreferenced_Objects     (Id : E) return B;
-    function Has_Pragma_Unused                   (Id : E) return B;
-    function Has_Predicates                      (Id : E) return B;
-    function Has_Primitive_Operations            (Id : E) return B;
-    function Has_Private_Ancestor                (Id : E) return B;
-    function Has_Private_Declaration             (Id : E) return B;
-    function Has_Private_Extension               (Id : E) return B;
-    function Has_Protected                       (Id : E) return B;
-    function Has_Qualified_Name                  (Id : E) return B;
-    function Has_RACW                            (Id : E) return B;
-    function Has_Record_Rep_Clause               (Id : E) return B;
-    function Has_Recursive_Call                  (Id : E) return B;
-    function Has_Shift_Operator                  (Id : E) return B;
-    function Has_Size_Clause                     (Id : E) return B;
-    function Has_Small_Clause                    (Id : E) return B;
-    function Has_Specified_Layout                (Id : E) return B;
-    function Has_Specified_Stream_Input          (Id : E) return B;
-    function Has_Specified_Stream_Output         (Id : E) return B;
-    function Has_Specified_Stream_Read           (Id : E) return B;
-    function Has_Specified_Stream_Write          (Id : E) return B;
-    function Has_Static_Discriminants            (Id : E) return B;
-    function Has_Static_Predicate                (Id : E) return B;
-    function Has_Static_Predicate_Aspect         (Id : E) return B;
-    function Has_Storage_Size_Clause             (Id : E) return B;
-    function Has_Stream_Size_Clause              (Id : E) return B;
-    function Has_Task                            (Id : E) return B;
-    function Has_Timing_Event                    (Id : E) return B;
-    function Has_Thunks                          (Id : E) return B;
-    function Has_Unchecked_Union                 (Id : E) return B;
-    function Has_Unknown_Discriminants           (Id : E) return B;
-    function Has_Visible_Refinement              (Id : E) return B;
-    function Has_Volatile_Components             (Id : E) return B;
-    function Has_Xref_Entry                      (Id : E) return B;
-    function Has_Yield_Aspect                    (Id : E) return B;
-    function Hiding_Loop_Variable                (Id : E) return E;
-    function Hidden_In_Formal_Instance           (Id : E) return L;
-    function Homonym                             (Id : E) return E;
-    function Ignore_SPARK_Mode_Pragmas           (Id : E) return B;
-    function Import_Pragma                       (Id : E) return E;
-    function Incomplete_Actuals                  (Id : E) return L;
-    function In_Package_Body                     (Id : E) return B;
-    function In_Private_Part                     (Id : E) return B;
-    function In_Use                              (Id : E) return B;
-    function Initialization_Statements           (Id : E) return N;
-    function Inner_Instances                     (Id : E) return L;
-    function Interface_Alias                     (Id : E) return E;
-    function Interface_Name                      (Id : E) return N;
-    function Interfaces                          (Id : E) return L;
-    function Is_Abstract_Subprogram              (Id : E) return B;
-    function Is_Abstract_Type                    (Id : E) return B;
-    function Is_Access_Constant                  (Id : E) return B;
-    function Is_Activation_Record                (Id : E) return B;
-    function Is_Actual_Subtype                   (Id : E) return B;
-    function Is_Ada_2005_Only                    (Id : E) return B;
-    function Is_Ada_2012_Only                    (Id : E) return B;
-    function Is_Aliased                          (Id : E) return B;
-    function Is_Asynchronous                     (Id : E) return B;
-    function Is_Atomic                           (Id : E) return B;
-    function Is_Bit_Packed_Array                 (Id : E) return B;
-    function Is_Called                           (Id : E) return B;
-    function Is_Character_Type                   (Id : E) return B;
-    function Is_Checked_Ghost_Entity             (Id : E) return B;
-    function Is_Child_Unit                       (Id : E) return B;
-    function Is_Class_Wide_Clone                 (Id : E) return B;
-    function Is_Class_Wide_Equivalent_Type       (Id : E) return B;
-    function Is_Compilation_Unit                 (Id : E) return B;
-    function Is_Completely_Hidden                (Id : E) return B;
-    function Is_Constr_Subt_For_U_Nominal        (Id : E) return B;
-    function Is_Constr_Subt_For_UN_Aliased       (Id : E) return B;
-    function Is_Constrained                      (Id : E) return B;
-    function Is_Constructor                      (Id : E) return B;
-    function Is_Controlled_Active                (Id : E) return B;
-    function Is_Controlling_Formal               (Id : E) return B;
-    function Is_CPP_Class                        (Id : E) return B;
-    function Is_CUDA_Kernel                      (Id : E) return B;
-    function Is_Descendant_Of_Address            (Id : E) return B;
-    function Is_DIC_Procedure                    (Id : E) return B;
-    function Is_Discrim_SO_Function              (Id : E) return B;
-    function Is_Discriminant_Check_Function      (Id : E) return B;
-    function Is_Dispatch_Table_Entity            (Id : E) return B;
-    function Is_Dispatching_Operation            (Id : E) return B;
-    function Is_Elaboration_Checks_OK_Id         (Id : E) return B;
-    function Is_Elaboration_Warnings_OK_Id       (Id : E) return B;
-    function Is_Eliminated                       (Id : E) return B;
-    function Is_Entry_Formal                     (Id : E) return B;
-    function Is_Entry_Wrapper                    (Id : E) return B;
-    function Is_Exception_Handler                (Id : E) return B;
-    function Is_Exported                         (Id : E) return B;
-    function Is_Finalized_Transient              (Id : E) return B;
-    function Is_First_Subtype                    (Id : E) return B;
-    function Is_Frozen                           (Id : E) return B;
-    function Is_Generic_Instance                 (Id : E) return B;
-    function Is_Hidden                           (Id : E) return B;
-    function Is_Hidden_Non_Overridden_Subpgm     (Id : E) return B;
-    function Is_Hidden_Open_Scope                (Id : E) return B;
-    function Is_Ignored_Ghost_Entity             (Id : E) return B;
-    function Is_Ignored_Transient                (Id : E) return B;
-    function Is_Immediately_Visible              (Id : E) return B;
-    function Is_Implementation_Defined           (Id : E) return B;
-    function Is_Imported                         (Id : E) return B;
-    function Is_Independent                      (Id : E) return B;
-    function Is_Initial_Condition_Procedure      (Id : E) return B;
-    function Is_Inlined                          (Id : E) return B;
-    function Is_Inlined_Always                   (Id : E) return B;
-    function Is_Instantiated                     (Id : E) return B;
-    function Is_Interface                        (Id : E) return B;
-    function Is_Internal                         (Id : E) return B;
-    function Is_Interrupt_Handler                (Id : E) return B;
-    function Is_Intrinsic_Subprogram             (Id : E) return B;
-    function Is_Invariant_Procedure              (Id : E) return B;
-    function Is_Itype                            (Id : E) return B;
-    function Is_Known_Non_Null                   (Id : E) return B;
-    function Is_Known_Null                       (Id : E) return B;
-    function Is_Known_Valid                      (Id : E) return B;
-    function Is_Limited_Composite                (Id : E) return B;
-    function Is_Limited_Interface                (Id : E) return B;
-    function Is_Local_Anonymous_Access           (Id : E) return B;
-    function Is_Loop_Parameter                   (Id : E) return B;
-    function Is_Machine_Code_Subprogram          (Id : E) return B;
-    function Is_Non_Static_Subtype               (Id : E) return B;
-    function Is_Null_Init_Proc                   (Id : E) return B;
-    function Is_Obsolescent                      (Id : E) return B;
-    function Is_Only_Out_Parameter               (Id : E) return B;
-    function Is_Package_Body_Entity              (Id : E) return B;
-    function Is_Packed                           (Id : E) return B;
-    function Is_Packed_Array_Impl_Type           (Id : E) return B;
-    function Is_Potentially_Use_Visible          (Id : E) return B;
-    function Is_Param_Block_Component_Type       (Id : E) return B;
-    function Is_Partial_DIC_Procedure            (Id : E) return B;
-    function Is_Partial_Invariant_Procedure      (Id : E) return B;
-    function Is_Predicate_Function               (Id : E) return B;
-    function Is_Predicate_Function_M             (Id : E) return B;
-    function Is_Preelaborated                    (Id : E) return B;
-    function Is_Primitive                        (Id : E) return B;
-    function Is_Primitive_Wrapper                (Id : E) return B;
-    function Is_Private_Composite                (Id : E) return B;
-    function Is_Private_Descendant               (Id : E) return B;
-    function Is_Private_Primitive                (Id : E) return B;
-    function Is_Public                           (Id : E) return B;
-    function Is_Pure                             (Id : E) return B;
-    function Is_Pure_Unit_Access_Type            (Id : E) return B;
-    function Is_RACW_Stub_Type                   (Id : E) return B;
-    function Is_Raised                           (Id : E) return B;
-    function Is_Remote_Call_Interface            (Id : E) return B;
-    function Is_Remote_Types                     (Id : E) return B;
-    function Is_Renaming_Of_Object               (Id : E) return B;
-    function Is_Return_Object                    (Id : E) return B;
-    function Is_Safe_To_Reevaluate               (Id : E) return B;
-    function Is_Shared_Passive                   (Id : E) return B;
-    function Is_Static_Type                      (Id : E) return B;
-    function Is_Statically_Allocated             (Id : E) return B;
-    function Is_Tag                              (Id : E) return B;
-    function Is_Tagged_Type                      (Id : E) return B;
-    function Is_Thunk                            (Id : E) return B;
-    function Is_Trivial_Subprogram               (Id : E) return B;
-    function Is_True_Constant                    (Id : E) return B;
-    function Is_Unchecked_Union                  (Id : E) return B;
-    function Is_Underlying_Full_View             (Id : E) return B;
-    function Is_Underlying_Record_View           (Id : E) return B;
-    function Is_Unimplemented                    (Id : E) return B;
-    function Is_Unsigned_Type                    (Id : E) return B;
-    function Is_Uplevel_Referenced_Entity        (Id : E) return B;
-    function Is_Valued_Procedure                 (Id : E) return B;
-    function Is_Visible_Formal                   (Id : E) return B;
-    function Is_Visible_Lib_Unit                 (Id : E) return B;
-    function Is_Volatile                         (Id : E) return B;
-    function Is_Volatile_Full_Access             (Id : E) return B;
-    function Itype_Printed                       (Id : E) return B;
-    function Kill_Elaboration_Checks             (Id : E) return B;
-    function Kill_Range_Checks                   (Id : E) return B;
-    function Known_To_Have_Preelab_Init          (Id : E) return B;
-    function Last_Aggregate_Assignment           (Id : E) return N;
-    function Last_Assignment                     (Id : E) return N;
-    function Last_Entity                         (Id : E) return E;
-    function Limited_View                        (Id : E) return E;
-    function Linker_Section_Pragma               (Id : E) return N;
-    function Lit_Indexes                         (Id : E) return E;
-    function Lit_Strings                         (Id : E) return E;
-    function Low_Bound_Tested                    (Id : E) return B;
-    function Machine_Radix_10                    (Id : E) return B;
-    function Master_Id                           (Id : E) return E;
-    function Materialize_Entity                  (Id : E) return B;
-    function May_Inherit_Delayed_Rep_Aspects     (Id : E) return B;
-    function Mechanism                           (Id : E) return M;
-    function Minimum_Accessibility               (Id : E) return E;
-    function Modulus                             (Id : E) return U;
-    function Must_Be_On_Byte_Boundary            (Id : E) return B;
-    function Must_Have_Preelab_Init              (Id : E) return B;
-    function Needs_Activation_Record             (Id : E) return B;
-    function Needs_Debug_Info                    (Id : E) return B;
-    function Needs_No_Actuals                    (Id : E) return B;
-    function Never_Set_In_Source                 (Id : E) return B;
-    function Next_Inlined_Subprogram             (Id : E) return E;
-    function No_Dynamic_Predicate_On_Actual      (Id : E) return B;
-    function No_Pool_Assigned                    (Id : E) return B;
-    function No_Predicate_On_Actual              (Id : E) return B;
-    function No_Reordering                       (Id : E) return B;
-    function No_Return                           (Id : E) return B;
-    function No_Strict_Aliasing                  (Id : E) return B;
-    function No_Tagged_Streams_Pragma            (Id : E) return N;
-    function Non_Binary_Modulus                  (Id : E) return B;
-    function Non_Limited_View                    (Id : E) return E;
-    function Nonzero_Is_True                     (Id : E) return B;
-    function Normalized_First_Bit                (Id : E) return U;
-    function Normalized_Position                 (Id : E) return U;
-    function Normalized_Position_Max             (Id : E) return U;
-    function OK_To_Rename                        (Id : E) return B;
-    function Optimize_Alignment_Space            (Id : E) return B;
-    function Optimize_Alignment_Time             (Id : E) return B;
-    function Original_Access_Type                (Id : E) return E;
-    function Original_Array_Type                 (Id : E) return E;
-    function Original_Protected_Subprogram       (Id : E) return N;
-    function Original_Record_Component           (Id : E) return E;
-    function Overlays_Constant                   (Id : E) return B;
-    function Overridden_Operation                (Id : E) return E;
-    function Package_Instantiation               (Id : E) return N;
-    function Packed_Array_Impl_Type              (Id : E) return E;
-    function Parent_Subtype                      (Id : E) return E;
-    function Part_Of_Constituents                (Id : E) return L;
-    function Part_Of_References                  (Id : E) return L;
-    function Partial_View_Has_Unknown_Discr      (Id : E) return B;
-    function Pending_Access_Types                (Id : E) return L;
-    function Postconditions_Proc                 (Id : E) return E;
-    function Predicated_Parent                   (Id : E) return E;
-    function Predicates_Ignored                  (Id : E) return B;
-    function Prev_Entity                         (Id : E) return E;
-    function Prival                              (Id : E) return E;
-    function Prival_Link                         (Id : E) return E;
-    function Private_Dependents                  (Id : E) return L;
-    function Protected_Body_Subprogram           (Id : E) return E;
-    function Protected_Formal                    (Id : E) return E;
-    function Protected_Subprogram                (Id : E) return N;
-    function Protection_Object                   (Id : E) return E;
-    function Reachable                           (Id : E) return B;
-    function Receiving_Entry                     (Id : E) return E;
-    function Referenced                          (Id : E) return B;
-    function Referenced_As_LHS                   (Id : E) return B;
-    function Referenced_As_Out_Parameter         (Id : E) return B;
-    function Refinement_Constituents             (Id : E) return L;
-    function Register_Exception_Call             (Id : E) return N;
-    function Related_Array_Object                (Id : E) return E;
-    function Related_Expression                  (Id : E) return N;
-    function Related_Instance                    (Id : E) return E;
-    function Related_Type                        (Id : E) return E;
-    function Relative_Deadline_Variable          (Id : E) return E;
-    function Renamed_Entity                      (Id : E) return N;
-    function Renamed_In_Spec                     (Id : E) return B;
-    function Renamed_Object                      (Id : E) return N;
-    function Renaming_Map                        (Id : E) return U;
-    function Requires_Overriding                 (Id : E) return B;
-    function Return_Applies_To                   (Id : E) return N;
-    function Return_Present                      (Id : E) return B;
-    function Returns_By_Ref                      (Id : E) return B;
-    function Reverse_Bit_Order                   (Id : E) return B;
-    function Reverse_Storage_Order               (Id : E) return B;
-    function Rewritten_For_C                     (Id : E) return B;
-    function RM_Size                             (Id : E) return U;
-    function Scalar_Range                        (Id : E) return N;
-    function Scale_Value                         (Id : E) return U;
-    function Scope_Depth_Value                   (Id : E) return U;
-    function Sec_Stack_Needed_For_Return         (Id : E) return B;
-    function Shared_Var_Procs_Instance           (Id : E) return E;
-    function Size_Check_Code                     (Id : E) return N;
-    function Size_Depends_On_Discriminant        (Id : E) return B;
-    function Size_Known_At_Compile_Time          (Id : E) return B;
-    function Small_Value                         (Id : E) return R;
-    function SPARK_Aux_Pragma                    (Id : E) return N;
-    function SPARK_Aux_Pragma_Inherited          (Id : E) return B;
-    function SPARK_Pragma                        (Id : E) return N;
-    function SPARK_Pragma_Inherited              (Id : E) return B;
-    function Spec_Entity                         (Id : E) return E;
-    function SSO_Set_High_By_Default             (Id : E) return B;
-    function SSO_Set_Low_By_Default              (Id : E) return B;
-    function Static_Discrete_Predicate           (Id : E) return S;
-    function Static_Elaboration_Desired          (Id : E) return B;
-    function Static_Initialization               (Id : E) return N;
-    function Static_Real_Or_String_Predicate     (Id : E) return N;
-    function Status_Flag_Or_Transient_Decl       (Id : E) return E;
-    function Storage_Size_Variable               (Id : E) return E;
-    function Stored_Constraint                   (Id : E) return L;
-    function Stores_Attribute_Old_Prefix         (Id : E) return B;
-    function Strict_Alignment                    (Id : E) return B;
-    function String_Literal_Length               (Id : E) return U;
-    function String_Literal_Low_Bound            (Id : E) return N;
-    function Subprograms_For_Type                (Id : E) return L;
-    function Subps_Index                         (Id : E) return U;
-    function Suppress_Elaboration_Warnings       (Id : E) return B;
-    function Suppress_Initialization             (Id : E) return B;
-    function Suppress_Style_Checks               (Id : E) return B;
-    function Suppress_Value_Tracking_On_Call     (Id : E) return B;
-    function Task_Body_Procedure                 (Id : E) return N;
-    function Thunk_Entity                        (Id : E) return E;
-    function Treat_As_Volatile                   (Id : E) return B;
-    function Underlying_Full_View                (Id : E) return E;
-    function Underlying_Record_View              (Id : E) return E;
-    function Universal_Aliasing                  (Id : E) return B;
-    function Unset_Reference                     (Id : E) return N;
-    function Used_As_Generic_Actual              (Id : E) return B;
-    function Uses_Lock_Free                      (Id : E) return B;
-    function Uses_Sec_Stack                      (Id : E) return B;
-    function Validated_Object                    (Id : E) return N;
-    function Warnings_Off                        (Id : E) return B;
-    function Warnings_Off_Used                   (Id : E) return B;
-    function Warnings_Off_Used_Unmodified        (Id : E) return B;
-    function Warnings_Off_Used_Unreferenced      (Id : E) return B;
-    function Was_Hidden                          (Id : E) return B;
-    function Wrapped_Entity                      (Id : E) return E;
- 
-    -------------------------------
-    -- Classification Attributes --
-    -------------------------------
- 
-    --  These functions provide a convenient functional notation for testing
-    --  whether an Ekind value belongs to a specified kind, for example the
-    --  function Is_Elementary_Type tests if its argument is in Elementary_Kind.
-    --  In some cases, the test is of an entity attribute (e.g. in the case of
-    --  Is_Generic_Type where the Ekind does not provide the needed
-    --  information).
- 
-    function Is_Access_Object_Type               (Id : E) return B;
-    function Is_Access_Type                      (Id : E) return B;
-    function Is_Access_Protected_Subprogram_Type (Id : E) return B;
-    function Is_Access_Subprogram_Type           (Id : E) return B;
-    function Is_Aggregate_Type                   (Id : E) return B;
-    function Is_Anonymous_Access_Type            (Id : E) return B;
-    function Is_Array_Type                       (Id : E) return B;
-    function Is_Assignable                       (Id : E) return B;
-    function Is_Class_Wide_Type                  (Id : E) return B;
-    function Is_Composite_Type                   (Id : E) return B;
-    function Is_Concurrent_Body                  (Id : E) return B;
-    function Is_Concurrent_Record_Type           (Id : E) return B;
-    function Is_Concurrent_Type                  (Id : E) return B;
-    function Is_Decimal_Fixed_Point_Type         (Id : E) return B;
-    function Is_Digits_Type                      (Id : E) return B;
-    function Is_Discrete_Or_Fixed_Point_Type     (Id : E) return B;
-    function Is_Discrete_Type                    (Id : E) return B;
-    function Is_Elementary_Type                  (Id : E) return B;
-    function Is_Entry                            (Id : E) return B;
-    function Is_Enumeration_Type                 (Id : E) return B;
-    function Is_Fixed_Point_Type                 (Id : E) return B;
-    function Is_Floating_Point_Type              (Id : E) return B;
-    function Is_Formal                           (Id : E) return B;
-    function Is_Formal_Object                    (Id : E) return B;
-    function Is_Formal_Subprogram                (Id : E) return B;
-    function Is_Generic_Actual_Subprogram        (Id : E) return B;
-    function Is_Generic_Actual_Type              (Id : E) return B;
-    function Is_Generic_Subprogram               (Id : E) return B;
-    function Is_Generic_Type                     (Id : E) return B;
-    function Is_Generic_Unit                     (Id : E) return B;
-    function Is_Ghost_Entity                     (Id : E) return B;
-    function Is_Incomplete_Or_Private_Type       (Id : E) return B;
-    function Is_Incomplete_Type                  (Id : E) return B;
-    function Is_Integer_Type                     (Id : E) return B;
-    function Is_Limited_Record                   (Id : E) return B;
-    function Is_Modular_Integer_Type             (Id : E) return B;
-    function Is_Named_Access_Type                (Id : E) return B;
-    function Is_Named_Number                     (Id : E) return B;
-    function Is_Numeric_Type                     (Id : E) return B;
-    function Is_Object                           (Id : E) return B;
-    function Is_Ordinary_Fixed_Point_Type        (Id : E) return B;
-    function Is_Overloadable                     (Id : E) return B;
-    function Is_Private_Type                     (Id : E) return B;
-    function Is_Protected_Type                   (Id : E) return B;
-    function Is_Real_Type                        (Id : E) return B;
-    function Is_Record_Type                      (Id : E) return B;
-    function Is_Scalar_Type                      (Id : E) return B;
-    function Is_Signed_Integer_Type              (Id : E) return B;
-    function Is_Subprogram                       (Id : E) return B;
-    function Is_Subprogram_Or_Entry              (Id : E) return B;
-    function Is_Subprogram_Or_Generic_Subprogram (Id : E) return B;
-    function Is_Task_Type                        (Id : E) return B;
-    function Is_Type                             (Id : E) return B;
- 
-    -------------------------------------
-    -- Synthesized Attribute Functions --
-    -------------------------------------
- 
-    --  The functions in this section synthesize attributes from the tree,
-    --  so they do not correspond to defined fields in the entity itself.
- 
-    function Address_Clause                      (Id : E) return N;
-    function Aft_Value                           (Id : E) return U;
-    function Alignment_Clause                    (Id : E) return N;
-    function Base_Type                           (Id : E) return E;
-    function Component_Alignment                 (Id : E) return C;
-    function Declaration_Node                    (Id : E) return N;
-    function Designated_Type                     (Id : E) return E;
-    function First_Component                     (Id : E) return E;
-    function First_Component_Or_Discriminant     (Id : E) return E;
-    function First_Formal                        (Id : E) return E;
-    function First_Formal_With_Extras            (Id : E) return E;
-    function Has_Attach_Handler                  (Id : E) return B;
-    function Has_DIC                             (Id : E) return B;
-    function Has_Entries                         (Id : E) return B;
-    function Has_Foreign_Convention              (Id : E) return B;
-    function Has_Interrupt_Handler               (Id : E) return B;
-    function Has_Invariants                      (Id : E) return B;
-    function Has_Limited_View                    (Id : E) return B;
-    function Has_Non_Limited_View                (Id : E) return B;
-    function Has_Non_Null_Abstract_State         (Id : E) return B;
-    function Has_Non_Null_Visible_Refinement     (Id : E) return B;
-    function Has_Null_Abstract_State             (Id : E) return B;
-    function Has_Null_Visible_Refinement         (Id : E) return B;
-    function Implementation_Base_Type            (Id : E) return E;
-    function Is_Base_Type                        (Id : E) return B;
-    function Is_Boolean_Type                     (Id : E) return B;
-    function Is_Constant_Object                  (Id : E) return B;
-    function Is_Controlled                       (Id : E) return B;
-    function Is_Discriminal                      (Id : E) return B;
-    function Is_Dynamic_Scope                    (Id : E) return B;
-    function Is_Elaboration_Target               (Id : E) return B;
-    function Is_External_State                   (Id : E) return B;
-    function Is_Finalizer                        (Id : E) return B;
-    function Is_Full_Access                      (Id : E) return B;
-    function Is_Null_State                       (Id : E) return B;
-    function Is_Package_Or_Generic_Package       (Id : E) return B;
-    function Is_Packed_Array                     (Id : E) return B;
-    function Is_Prival                           (Id : E) return B;
-    function Is_Protected_Component              (Id : E) return B;
-    function Is_Protected_Interface              (Id : E) return B;
-    function Is_Protected_Record_Type            (Id : E) return B;
-    function Is_Relaxed_Initialization_State     (Id : E) return B;
-    function Is_Standard_Character_Type          (Id : E) return B;
-    function Is_Standard_String_Type             (Id : E) return B;
-    function Is_String_Type                      (Id : E) return B;
-    function Is_Synchronized_Interface           (Id : E) return B;
-    function Is_Synchronized_State               (Id : E) return B;
-    function Is_Task_Interface                   (Id : E) return B;
-    function Is_Task_Record_Type                 (Id : E) return B;
-    function Is_Wrapper_Package                  (Id : E) return B;
-    function Last_Formal                         (Id : E) return E;
-    function Machine_Emax_Value                  (Id : E) return U;
-    function Machine_Emin_Value                  (Id : E) return U;
-    function Machine_Mantissa_Value              (Id : E) return U;
-    function Machine_Radix_Value                 (Id : E) return U;
-    function Model_Emin_Value                    (Id : E) return U;
-    function Model_Epsilon_Value                 (Id : E) return R;
-    function Model_Mantissa_Value                (Id : E) return U;
-    function Model_Small_Value                   (Id : E) return R;
-    function Next_Component                      (Id : E) return E;
-    function Next_Component_Or_Discriminant      (Id : E) return E;
-    function Next_Discriminant                   (Id : E) return E;
-    function Next_Formal                         (Id : E) return E;
-    function Next_Formal_With_Extras             (Id : E) return E;
-    function Next_Index                          (Id : N) return N;
-    function Next_Literal                        (Id : E) return E;
-    function Next_Stored_Discriminant            (Id : E) return E;
-    function Number_Dimensions                   (Id : E) return Pos;
-    function Number_Entries                      (Id : E) return Nat;
-    function Number_Formals                      (Id : E) return Pos;
-    function Object_Size_Clause                  (Id : E) return N;
-    function Parameter_Mode                      (Id : E) return Formal_Kind;
-    function Partial_Refinement_Constituents     (Id : E) return L;
-    function Primitive_Operations                (Id : E) return L;
-    function Root_Type                           (Id : E) return E;
-    function Safe_Emax_Value                     (Id : E) return U;
-    function Safe_First_Value                    (Id : E) return R;
-    function Safe_Last_Value                     (Id : E) return R;
-    function Scope_Depth                         (Id : E) return U;
-    function Scope_Depth_Set                     (Id : E) return B;
-    function Size_Clause                         (Id : E) return N;
-    function Stream_Size_Clause                  (Id : E) return N;
-    function Type_High_Bound                     (Id : E) return N;
-    function Type_Low_Bound                      (Id : E) return N;
-    function Underlying_Type                     (Id : E) return E;
- 
-    ----------------------------------------------
-    -- Type Representation Attribute Predicates --
-    ----------------------------------------------
- 
-    --  These predicates test the setting of the indicated attribute. If the
-    --  value has been set, then Known is True, and Unknown is False. If no
-    --  value is set, then Known is False and Unknown is True. The Known_Static
-    --  predicate is true only if the value is set (Known) and is set to a
-    --  compile time known value. Note that in the case of Alignment and
-    --  Normalized_First_Bit, dynamic values are not possible, so we do not
-    --  need a separate Known_Static calls in these cases. The not set (unknown)
-    --  values are as follows:
- 
-    --    Alignment               Uint_0 or No_Uint
-    --    Component_Size          Uint_0 or No_Uint
-    --    Component_Bit_Offset    No_Uint
-    --    Digits_Value            Uint_0 or No_Uint
-    --    Esize                   Uint_0 or No_Uint
-    --    Normalized_First_Bit    No_Uint
-    --    Normalized_Position     No_Uint
-    --    Normalized_Position_Max No_Uint
-    --    RM_Size                 Uint_0 or No_Uint
- 
-    --  It would be cleaner to use No_Uint in all these cases, but historically
-    --  we chose to use Uint_0 at first, and the change over will take time ???
-    --  This is particularly true for the RM_Size field, where a value of zero
-    --  is legitimate. We deal with this by a considering that the value is
-    --  always known static for discrete types (and no other types can have
-    --  an RM_Size value of zero).
- 
-    --  In two cases, Known_Static_Esize and Known_Static_RM_Size, there is one
-    --  more consideration, which is that we always return False for generic
-    --  types. Within a template, the size can look known, because of the fake
-    --  size values we put in template types, but they are not really known and
-    --  anyone testing if they are known within the template should get False as
-    --  a result to prevent incorrect assumptions.
- 
-    function Known_Alignment                       (E : Entity_Id) return B;
-    function Known_Component_Bit_Offset            (E : Entity_Id) return B;
-    function Known_Component_Size                  (E : Entity_Id) return B;
-    function Known_Esize                           (E : Entity_Id) return B;
-    function Known_Normalized_First_Bit            (E : Entity_Id) return B;
-    function Known_Normalized_Position             (E : Entity_Id) return B;
-    function Known_Normalized_Position_Max         (E : Entity_Id) return B;
-    function Known_RM_Size                         (E : Entity_Id) return B;
- 
-    function Known_Static_Component_Bit_Offset     (E : Entity_Id) return B;
-    function Known_Static_Component_Size           (E : Entity_Id) return B;
-    function Known_Static_Esize                    (E : Entity_Id) return B;
-    function Known_Static_Normalized_First_Bit     (E : Entity_Id) return B;
-    function Known_Static_Normalized_Position      (E : Entity_Id) return B;
-    function Known_Static_Normalized_Position_Max  (E : Entity_Id) return B;
-    function Known_Static_RM_Size                  (E : Entity_Id) return B;
- 
-    function Unknown_Alignment                     (E : Entity_Id) return B;
-    function Unknown_Component_Bit_Offset          (E : Entity_Id) return B;
-    function Unknown_Component_Size                (E : Entity_Id) return B;
-    function Unknown_Esize                         (E : Entity_Id) return B;
-    function Unknown_Normalized_First_Bit          (E : Entity_Id) return B;
-    function Unknown_Normalized_Position           (E : Entity_Id) return B;
-    function Unknown_Normalized_Position_Max       (E : Entity_Id) return B;
-    function Unknown_RM_Size                       (E : Entity_Id) return B;
- 
-    ------------------------------
-    -- Attribute Set Procedures --
-    ------------------------------
- 
-    --  WARNING: There is a matching C declaration of a few subprograms in fe.h
- 
-    procedure Set_Abstract_States                 (Id : E; V : L);
-    procedure Set_Accept_Address                  (Id : E; V : L);
-    procedure Set_Access_Disp_Table               (Id : E; V : L);
-    procedure Set_Access_Disp_Table_Elab_Flag     (Id : E; V : E);
-    procedure Set_Access_Subprogram_Wrapper       (Id : E; V : E);
-    procedure Set_Activation_Record_Component     (Id : E; V : E);
-    procedure Set_Actual_Subtype                  (Id : E; V : E);
-    procedure Set_Address_Taken                   (Id : E; V : B := True);
-    procedure Set_Alias                           (Id : E; V : E);
-    procedure Set_Alignment                       (Id : E; V : U);
-    procedure Set_Anonymous_Designated_Type       (Id : E; V : E);
-    procedure Set_Anonymous_Masters               (Id : E; V : L);
-    procedure Set_Anonymous_Object                (Id : E; V : E);
-    procedure Set_Associated_Entity               (Id : E; V : E);
-    procedure Set_Associated_Formal_Package       (Id : E; V : E);
-    procedure Set_Associated_Node_For_Itype       (Id : E; V : N);
-    procedure Set_Associated_Storage_Pool         (Id : E; V : E);
-    procedure Set_Barrier_Function                (Id : E; V : N);
-    procedure Set_BIP_Initialization_Call         (Id : E; V : N);
-    procedure Set_Block_Node                      (Id : E; V : N);
-    procedure Set_Body_Entity                     (Id : E; V : E);
-    procedure Set_Body_Needed_For_Inlining        (Id : E; V : B := True);
-    procedure Set_Body_Needed_For_SAL             (Id : E; V : B := True);
-    procedure Set_Body_References                 (Id : E; V : L);
-    procedure Set_C_Pass_By_Copy                  (Id : E; V : B := True);
-    procedure Set_Can_Never_Be_Null               (Id : E; V : B := True);
-    procedure Set_Can_Use_Internal_Rep            (Id : E; V : B := True);
-    procedure Set_Checks_May_Be_Suppressed        (Id : E; V : B := True);
-    procedure Set_Class_Wide_Clone                (Id : E; V : E);
-    procedure Set_Class_Wide_Type                 (Id : E; V : E);
-    procedure Set_Cloned_Subtype                  (Id : E; V : E);
-    procedure Set_Component_Alignment             (Id : E; V : C);
-    procedure Set_Component_Bit_Offset            (Id : E; V : U);
-    procedure Set_Component_Clause                (Id : E; V : N);
-    procedure Set_Component_Size                  (Id : E; V : U);
-    procedure Set_Component_Type                  (Id : E; V : E);
-    procedure Set_Contains_Ignored_Ghost_Code     (Id : E; V : B := True);
-    procedure Set_Contract                        (Id : E; V : N);
-    procedure Set_Contract_Wrapper                (Id : E; V : E);
-    procedure Set_Corresponding_Concurrent_Type   (Id : E; V : E);
-    procedure Set_Corresponding_Discriminant      (Id : E; V : E);
-    procedure Set_Corresponding_Equality          (Id : E; V : E);
-    procedure Set_Corresponding_Function          (Id : E; V : E);
-    procedure Set_Corresponding_Procedure         (Id : E; V : E);
-    procedure Set_Corresponding_Protected_Entry   (Id : E; V : E);
-    procedure Set_Corresponding_Record_Component  (Id : E; V : E);
-    procedure Set_Corresponding_Record_Type       (Id : E; V : E);
-    procedure Set_Corresponding_Remote_Type       (Id : E; V : E);
-    procedure Set_CR_Discriminant                 (Id : E; V : E);
-    procedure Set_Current_Use_Clause              (Id : E; V : E);
-    procedure Set_Current_Value                   (Id : E; V : N);
-    procedure Set_Debug_Info_Off                  (Id : E; V : B := True);
-    procedure Set_Debug_Renaming_Link             (Id : E; V : E);
-    procedure Set_Default_Aspect_Component_Value  (Id : E; V : N);
-    procedure Set_Default_Aspect_Value            (Id : E; V : N);
-    procedure Set_Default_Expr_Function           (Id : E; V : E);
-    procedure Set_Default_Expressions_Processed   (Id : E; V : B := True);
-    procedure Set_Default_Value                   (Id : E; V : N);
-    procedure Set_Delay_Cleanups                  (Id : E; V : B := True);
-    procedure Set_Delay_Subprogram_Descriptors    (Id : E; V : B := True);
-    procedure Set_Delta_Value                     (Id : E; V : R);
-    procedure Set_Dependent_Instances             (Id : E; V : L);
-    procedure Set_Depends_On_Private              (Id : E; V : B := True);
-    procedure Set_Derived_Type_Link               (Id : E; V : E);
-    procedure Set_Digits_Value                    (Id : E; V : U);
-    procedure Set_Predicated_Parent               (Id : E; V : E);
-    procedure Set_Predicates_Ignored              (Id : E; V : B);
-    procedure Set_Direct_Primitive_Operations     (Id : E; V : L);
-    procedure Set_Directly_Designated_Type        (Id : E; V : E);
-    procedure Set_Disable_Controlled              (Id : E; V : B := True);
-    procedure Set_Discard_Names                   (Id : E; V : B := True);
-    procedure Set_Discriminal                     (Id : E; V : E);
-    procedure Set_Discriminal_Link                (Id : E; V : E);
-    procedure Set_Discriminant_Checking_Func      (Id : E; V : E);
-    procedure Set_Discriminant_Constraint         (Id : E; V : L);
-    procedure Set_Discriminant_Default_Value      (Id : E; V : N);
-    procedure Set_Discriminant_Number             (Id : E; V : U);
-    procedure Set_Dispatch_Table_Wrappers         (Id : E; V : L);
-    procedure Set_DT_Entry_Count                  (Id : E; V : U);
-    procedure Set_DT_Offset_To_Top_Func           (Id : E; V : E);
-    procedure Set_DT_Position                     (Id : E; V : U);
-    procedure Set_DTC_Entity                      (Id : E; V : E);
-    procedure Set_Elaborate_Body_Desirable        (Id : E; V : B := True);
-    procedure Set_Elaboration_Entity              (Id : E; V : E);
-    procedure Set_Elaboration_Entity_Required     (Id : E; V : B := True);
-    procedure Set_Encapsulating_State             (Id : E; V : E);
-    procedure Set_Enclosing_Scope                 (Id : E; V : E);
-    procedure Set_Entry_Accepted                  (Id : E; V : B := True);
-    procedure Set_Entry_Bodies_Array              (Id : E; V : E);
-    procedure Set_Entry_Cancel_Parameter          (Id : E; V : E);
-    procedure Set_Entry_Component                 (Id : E; V : E);
-    procedure Set_Entry_Formal                    (Id : E; V : E);
-    procedure Set_Entry_Index_Constant            (Id : E; V : E);
-    procedure Set_Entry_Max_Queue_Lengths_Array   (Id : E; V : E);
-    procedure Set_Entry_Parameters_Type           (Id : E; V : E);
-    procedure Set_Enum_Pos_To_Rep                 (Id : E; V : E);
-    procedure Set_Enumeration_Pos                 (Id : E; V : U);
-    procedure Set_Enumeration_Rep                 (Id : E; V : U);
-    procedure Set_Enumeration_Rep_Expr            (Id : E; V : N);
-    procedure Set_Equivalent_Type                 (Id : E; V : E);
-    procedure Set_Esize                           (Id : E; V : U);
-    procedure Set_Extra_Accessibility             (Id : E; V : E);
-    procedure Set_Extra_Accessibility_Of_Result   (Id : E; V : E);
-    procedure Set_Extra_Constrained               (Id : E; V : E);
-    procedure Set_Extra_Formal                    (Id : E; V : E);
-    procedure Set_Extra_Formals                   (Id : E; V : E);
-    procedure Set_Finalization_Master             (Id : E; V : E);
-    procedure Set_Finalize_Storage_Only           (Id : E; V : B := True);
-    procedure Set_Finalizer                       (Id : E; V : E);
-    procedure Set_First_Entity                    (Id : E; V : E);
-    procedure Set_First_Exit_Statement            (Id : E; V : N);
-    procedure Set_First_Index                     (Id : E; V : N);
-    procedure Set_First_Literal                   (Id : E; V : E);
-    procedure Set_First_Private_Entity            (Id : E; V : E);
-    procedure Set_First_Rep_Item                  (Id : E; V : N);
-    procedure Set_Float_Rep                       (Id : E; V : F);
-    procedure Set_Freeze_Node                     (Id : E; V : N);
-    procedure Set_From_Limited_With               (Id : E; V : B := True);
-    procedure Set_Full_View                       (Id : E; V : E);
-    procedure Set_Generic_Homonym                 (Id : E; V : E);
-    procedure Set_Generic_Renamings               (Id : E; V : L);
-    procedure Set_Handler_Records                 (Id : E; V : S);
-    procedure Set_Has_Aliased_Components          (Id : E; V : B := True);
-    procedure Set_Has_Alignment_Clause            (Id : E; V : B := True);
-    procedure Set_Has_All_Calls_Remote            (Id : E; V : B := True);
-    procedure Set_Has_Atomic_Components           (Id : E; V : B := True);
-    procedure Set_Has_Biased_Representation       (Id : E; V : B := True);
-    procedure Set_Has_Completion                  (Id : E; V : B := True);
-    procedure Set_Has_Completion_In_Body          (Id : E; V : B := True);
-    procedure Set_Has_Complex_Representation      (Id : E; V : B := True);
-    procedure Set_Has_Component_Size_Clause       (Id : E; V : B := True);
-    procedure Set_Has_Constrained_Partial_View    (Id : E; V : B := True);
-    procedure Set_Has_Contiguous_Rep              (Id : E; V : B := True);
-    procedure Set_Has_Controlled_Component        (Id : E; V : B := True);
-    procedure Set_Has_Controlling_Result          (Id : E; V : B := True);
-    procedure Set_Has_Convention_Pragma           (Id : E; V : B := True);
-    procedure Set_Has_Default_Aspect              (Id : E; V : B := True);
-    procedure Set_Has_Delayed_Aspects             (Id : E; V : B := True);
-    procedure Set_Has_Delayed_Freeze              (Id : E; V : B := True);
-    procedure Set_Has_Delayed_Rep_Aspects         (Id : E; V : B := True);
-    procedure Set_Has_Discriminants               (Id : E; V : B := True);
-    procedure Set_Has_Dispatch_Table              (Id : E; V : B := True);
-    procedure Set_Has_Dynamic_Predicate_Aspect    (Id : E; V : B := True);
-    procedure Set_Has_Enumeration_Rep_Clause      (Id : E; V : B := True);
-    procedure Set_Has_Exit                        (Id : E; V : B := True);
-    procedure Set_Has_Expanded_Contract           (Id : E; V : B := True);
-    procedure Set_Has_Forward_Instantiation       (Id : E; V : B := True);
-    procedure Set_Has_Fully_Qualified_Name        (Id : E; V : B := True);
-    procedure Set_Has_Gigi_Rep_Item               (Id : E; V : B := True);
-    procedure Set_Has_Homonym                     (Id : E; V : B := True);
-    procedure Set_Has_Implicit_Dereference        (Id : E; V : B := True);
-    procedure Set_Has_Independent_Components      (Id : E; V : B := True);
-    procedure Set_Has_Inheritable_Invariants      (Id : E; V : B := True);
-    procedure Set_Has_Inherited_DIC               (Id : E; V : B := True);
-    procedure Set_Has_Inherited_Invariants        (Id : E; V : B := True);
-    procedure Set_Has_Initial_Value               (Id : E; V : B := True);
-    procedure Set_Has_Loop_Entry_Attributes       (Id : E; V : B := True);
-    procedure Set_Has_Machine_Radix_Clause        (Id : E; V : B := True);
-    procedure Set_Has_Master_Entity               (Id : E; V : B := True);
-    procedure Set_Has_Missing_Return              (Id : E; V : B := True);
-    procedure Set_Has_Nested_Block_With_Handler   (Id : E; V : B := True);
-    procedure Set_Has_Nested_Subprogram           (Id : E; V : B := True);
-    procedure Set_Has_Non_Standard_Rep            (Id : E; V : B := True);
-    procedure Set_Has_Object_Size_Clause          (Id : E; V : B := True);
-    procedure Set_Has_Out_Or_In_Out_Parameter     (Id : E; V : B := True);
-    procedure Set_Has_Own_DIC                     (Id : E; V : B := True);
-    procedure Set_Has_Own_Invariants              (Id : E; V : B := True);
-    procedure Set_Has_Partial_Visible_Refinement  (Id : E; V : B := True);
-    procedure Set_Has_Per_Object_Constraint       (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Controlled           (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Elaborate_Body       (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Inline               (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Inline_Always        (Id : E; V : B := True);
-    procedure Set_Has_Pragma_No_Inline            (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Ordered              (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Pack                 (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Preelab_Init         (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Pure                 (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Pure_Function        (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Thread_Local_Storage (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Unmodified           (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Unreferenced         (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Unreferenced_Objects (Id : E; V : B := True);
-    procedure Set_Has_Pragma_Unused               (Id : E; V : B := True);
-    procedure Set_Has_Predicates                  (Id : E; V : B := True);
-    procedure Set_Has_Primitive_Operations        (Id : E; V : B := True);
-    procedure Set_Has_Private_Ancestor            (Id : E; V : B := True);
-    procedure Set_Has_Private_Declaration         (Id : E; V : B := True);
-    procedure Set_Has_Private_Extension           (Id : E; V : B := True);
-    procedure Set_Has_Protected                   (Id : E; V : B := True);
-    procedure Set_Has_Qualified_Name              (Id : E; V : B := True);
-    procedure Set_Has_RACW                        (Id : E; V : B := True);
-    procedure Set_Has_Record_Rep_Clause           (Id : E; V : B := True);
-    procedure Set_Has_Recursive_Call              (Id : E; V : B := True);
-    procedure Set_Has_Shift_Operator              (Id : E; V : B := True);
-    procedure Set_Has_Size_Clause                 (Id : E; V : B := True);
-    procedure Set_Has_Small_Clause                (Id : E; V : B := True);
-    procedure Set_Has_Specified_Layout            (Id : E; V : B := True);
-    procedure Set_Has_Specified_Stream_Input      (Id : E; V : B := True);
-    procedure Set_Has_Specified_Stream_Output     (Id : E; V : B := True);
-    procedure Set_Has_Specified_Stream_Read       (Id : E; V : B := True);
-    procedure Set_Has_Specified_Stream_Write      (Id : E; V : B := True);
-    procedure Set_Has_Static_Discriminants        (Id : E; V : B := True);
-    procedure Set_Has_Static_Predicate            (Id : E; V : B := True);
-    procedure Set_Has_Static_Predicate_Aspect     (Id : E; V : B := True);
-    procedure Set_Has_Storage_Size_Clause         (Id : E; V : B := True);
-    procedure Set_Has_Stream_Size_Clause          (Id : E; V : B := True);
-    procedure Set_Has_Task                        (Id : E; V : B := True);
-    procedure Set_Has_Timing_Event                (Id : E; V : B := True);
-    procedure Set_Has_Thunks                      (Id : E; V : B := True);
-    procedure Set_Has_Unchecked_Union             (Id : E; V : B := True);
-    procedure Set_Has_Unknown_Discriminants       (Id : E; V : B := True);
-    procedure Set_Has_Visible_Refinement          (Id : E; V : B := True);
-    procedure Set_Has_Volatile_Components         (Id : E; V : B := True);
-    procedure Set_Has_Xref_Entry                  (Id : E; V : B := True);
-    procedure Set_Has_Yield_Aspect                (Id : E; V : B := True);
-    procedure Set_Hiding_Loop_Variable            (Id : E; V : E);
-    procedure Set_Hidden_In_Formal_Instance       (Id : E; V : L);
-    procedure Set_Homonym                         (Id : E; V : E);
-    procedure Set_Ignore_SPARK_Mode_Pragmas       (Id : E; V : B := True);
-    procedure Set_Import_Pragma                   (Id : E; V : E);
-    procedure Set_Incomplete_Actuals              (Id : E; V : L);
-    procedure Set_In_Package_Body                 (Id : E; V : B := True);
-    procedure Set_In_Private_Part                 (Id : E; V : B := True);
-    procedure Set_In_Use                          (Id : E; V : B := True);
-    procedure Set_Initialization_Statements       (Id : E; V : N);
-    procedure Set_Inner_Instances                 (Id : E; V : L);
-    procedure Set_Interface_Alias                 (Id : E; V : E);
-    procedure Set_Interface_Name                  (Id : E; V : N);
-    procedure Set_Interfaces                      (Id : E; V : L);
-    procedure Set_Is_Abstract_Subprogram          (Id : E; V : B := True);
-    procedure Set_Is_Abstract_Type                (Id : E; V : B := True);
-    procedure Set_Is_Access_Constant              (Id : E; V : B := True);
-    procedure Set_Is_Activation_Record            (Id : E; V : B := True);
-    procedure Set_Is_Actual_Subtype               (Id : E; V : B := True);
-    procedure Set_Is_Ada_2005_Only                (Id : E; V : B := True);
-    procedure Set_Is_Ada_2012_Only                (Id : E; V : B := True);
-    procedure Set_Is_Aliased                      (Id : E; V : B := True);
-    procedure Set_Is_Asynchronous                 (Id : E; V : B := True);
-    procedure Set_Is_Atomic                       (Id : E; V : B := True);
-    procedure Set_Is_Bit_Packed_Array             (Id : E; V : B := True);
-    procedure Set_Is_Called                       (Id : E; V : B := True);
-    procedure Set_Is_Character_Type               (Id : E; V : B := True);
-    procedure Set_Is_Checked_Ghost_Entity         (Id : E; V : B := True);
-    procedure Set_Is_Child_Unit                   (Id : E; V : B := True);
-    procedure Set_Is_Class_Wide_Clone             (Id : E; V : B := True);
-    procedure Set_Is_Class_Wide_Equivalent_Type   (Id : E; V : B := True);
-    procedure Set_Is_Compilation_Unit             (Id : E; V : B := True);
-    procedure Set_Is_Completely_Hidden            (Id : E; V : B := True);
-    procedure Set_Is_Concurrent_Record_Type       (Id : E; V : B := True);
-    procedure Set_Is_Constr_Subt_For_U_Nominal    (Id : E; V : B := True);
-    procedure Set_Is_Constr_Subt_For_UN_Aliased   (Id : E; V : B := True);
-    procedure Set_Is_Constrained                  (Id : E; V : B := True);
-    procedure Set_Is_Constructor                  (Id : E; V : B := True);
-    procedure Set_Is_Controlled_Active            (Id : E; V : B := True);
-    procedure Set_Is_Controlling_Formal           (Id : E; V : B := True);
-    procedure Set_Is_CPP_Class                    (Id : E; V : B := True);
-    procedure Set_Is_CUDA_Kernel                  (Id : E; V : B := True);
-    procedure Set_Is_Descendant_Of_Address        (Id : E; V : B := True);
-    procedure Set_Is_DIC_Procedure                (Id : E; V : B := True);
-    procedure Set_Is_Discrim_SO_Function          (Id : E; V : B := True);
-    procedure Set_Is_Discriminant_Check_Function  (Id : E; V : B := True);
-    procedure Set_Is_Dispatch_Table_Entity        (Id : E; V : B := True);
-    procedure Set_Is_Dispatching_Operation        (Id : E; V : B := True);
-    procedure Set_Is_Elaboration_Checks_OK_Id     (Id : E; V : B := True);
-    procedure Set_Is_Elaboration_Warnings_OK_Id   (Id : E; V : B := True);
-    procedure Set_Is_Eliminated                   (Id : E; V : B := True);
-    procedure Set_Is_Entry_Formal                 (Id : E; V : B := True);
-    procedure Set_Is_Entry_Wrapper                (Id : E; V : B := True);
-    procedure Set_Is_Exception_Handler            (Id : E; V : B := True);
-    procedure Set_Is_Exported                     (Id : E; V : B := True);
-    procedure Set_Is_Finalized_Transient          (Id : E; V : B := True);
-    procedure Set_Is_First_Subtype                (Id : E; V : B := True);
-    procedure Set_Is_Formal_Subprogram            (Id : E; V : B := True);
-    procedure Set_Is_Frozen                       (Id : E; V : B := True);
-    procedure Set_Is_Generic_Actual_Subprogram    (Id : E; V : B := True);
-    procedure Set_Is_Generic_Actual_Type          (Id : E; V : B := True);
-    procedure Set_Is_Generic_Instance             (Id : E; V : B := True);
-    procedure Set_Is_Generic_Type                 (Id : E; V : B := True);
-    procedure Set_Is_Hidden                       (Id : E; V : B := True);
-    procedure Set_Is_Hidden_Non_Overridden_Subpgm (Id : E; V : B := True);
-    procedure Set_Is_Hidden_Open_Scope            (Id : E; V : B := True);
-    procedure Set_Is_Ignored_Ghost_Entity         (Id : E; V : B := True);
-    procedure Set_Is_Ignored_Transient            (Id : E; V : B := True);
-    procedure Set_Is_Immediately_Visible          (Id : E; V : B := True);
-    procedure Set_Is_Implementation_Defined       (Id : E; V : B := True);
-    procedure Set_Is_Imported                     (Id : E; V : B := True);
-    procedure Set_Is_Independent                  (Id : E; V : B := True);
-    procedure Set_Is_Initial_Condition_Procedure  (Id : E; V : B := True);
-    procedure Set_Is_Inlined                      (Id : E; V : B := True);
-    procedure Set_Is_Inlined_Always               (Id : E; V : B := True);
-    procedure Set_Is_Instantiated                 (Id : E; V : B := True);
-    procedure Set_Is_Interface                    (Id : E; V : B := True);
-    procedure Set_Is_Internal                     (Id : E; V : B := True);
-    procedure Set_Is_Interrupt_Handler            (Id : E; V : B := True);
-    procedure Set_Is_Intrinsic_Subprogram         (Id : E; V : B := True);
-    procedure Set_Is_Invariant_Procedure          (Id : E; V : B := True);
-    procedure Set_Is_Itype                        (Id : E; V : B := True);
-    procedure Set_Is_Known_Non_Null               (Id : E; V : B := True);
-    procedure Set_Is_Known_Null                   (Id : E; V : B := True);
-    procedure Set_Is_Known_Valid                  (Id : E; V : B := True);
-    procedure Set_Is_Limited_Composite            (Id : E; V : B := True);
-    procedure Set_Is_Limited_Interface            (Id : E; V : B := True);
-    procedure Set_Is_Limited_Record               (Id : E; V : B := True);
-    procedure Set_Is_Local_Anonymous_Access       (Id : E; V : B := True);
-    procedure Set_Is_Loop_Parameter               (Id : E; V : B := True);
-    procedure Set_Is_Machine_Code_Subprogram      (Id : E; V : B := True);
-    procedure Set_Is_Non_Static_Subtype           (Id : E; V : B := True);
-    procedure Set_Is_Null_Init_Proc               (Id : E; V : B := True);
-    procedure Set_Is_Obsolescent                  (Id : E; V : B := True);
-    procedure Set_Is_Only_Out_Parameter           (Id : E; V : B := True);
-    procedure Set_Is_Package_Body_Entity          (Id : E; V : B := True);
-    procedure Set_Is_Packed                       (Id : E; V : B := True);
-    procedure Set_Is_Packed_Array_Impl_Type       (Id : E; V : B := True);
-    procedure Set_Is_Param_Block_Component_Type   (Id : E; V : B := True);
-    procedure Set_Is_Partial_Invariant_Procedure  (Id : E; V : B := True);
-    procedure Set_Is_Potentially_Use_Visible      (Id : E; V : B := True);
-    procedure Set_Is_Predicate_Function           (Id : E; V : B := True);
-    procedure Set_Is_Predicate_Function_M         (Id : E; V : B := True);
-    procedure Set_Is_Preelaborated                (Id : E; V : B := True);
-    procedure Set_Is_Primitive                    (Id : E; V : B := True);
-    procedure Set_Is_Primitive_Wrapper            (Id : E; V : B := True);
-    procedure Set_Is_Private_Composite            (Id : E; V : B := True);
-    procedure Set_Is_Private_Descendant           (Id : E; V : B := True);
-    procedure Set_Is_Private_Primitive            (Id : E; V : B := True);
-    procedure Set_Is_Public                       (Id : E; V : B := True);
-    procedure Set_Is_Pure                         (Id : E; V : B := True);
-    procedure Set_Is_Pure_Unit_Access_Type        (Id : E; V : B := True);
-    procedure Set_Is_RACW_Stub_Type               (Id : E; V : B := True);
-    procedure Set_Is_Raised                       (Id : E; V : B := True);
-    procedure Set_Is_Remote_Call_Interface        (Id : E; V : B := True);
-    procedure Set_Is_Remote_Types                 (Id : E; V : B := True);
-    procedure Set_Is_Renaming_Of_Object           (Id : E; V : B := True);
-    procedure Set_Is_Return_Object                (Id : E; V : B := True);
-    procedure Set_Is_Safe_To_Reevaluate           (Id : E; V : B := True);
-    procedure Set_Is_Shared_Passive               (Id : E; V : B := True);
-    procedure Set_Is_Static_Type                  (Id : E; V : B := True);
-    procedure Set_Is_Statically_Allocated         (Id : E; V : B := True);
-    procedure Set_Is_Tag                          (Id : E; V : B := True);
-    procedure Set_Is_Tagged_Type                  (Id : E; V : B := True);
-    procedure Set_Is_Thunk                        (Id : E; V : B := True);
-    procedure Set_Is_Trivial_Subprogram           (Id : E; V : B := True);
-    procedure Set_Is_True_Constant                (Id : E; V : B := True);
-    procedure Set_Is_Unchecked_Union              (Id : E; V : B := True);
-    procedure Set_Is_Underlying_Full_View         (Id : E; V : B := True);
-    procedure Set_Is_Underlying_Record_View       (Id : E; V : B := True);
-    procedure Set_Is_Unimplemented                (Id : E; V : B := True);
-    procedure Set_Is_Unsigned_Type                (Id : E; V : B := True);
-    procedure Set_Is_Uplevel_Referenced_Entity    (Id : E; V : B := True);
-    procedure Set_Is_Valued_Procedure             (Id : E; V : B := True);
-    procedure Set_Is_Visible_Formal               (Id : E; V : B := True);
-    procedure Set_Is_Visible_Lib_Unit             (Id : E; V : B := True);
-    procedure Set_Is_Volatile                     (Id : E; V : B := True);
-    procedure Set_Is_Volatile_Full_Access         (Id : E; V : B := True);
-    procedure Set_Itype_Printed                   (Id : E; V : B := True);
-    procedure Set_Kill_Elaboration_Checks         (Id : E; V : B := True);
-    procedure Set_Kill_Range_Checks               (Id : E; V : B := True);
-    procedure Set_Known_To_Have_Preelab_Init      (Id : E; V : B := True);
-    procedure Set_Last_Aggregate_Assignment       (Id : E; V : N);
-    procedure Set_Last_Assignment                 (Id : E; V : N);
-    procedure Set_Last_Entity                     (Id : E; V : E);
-    procedure Set_Limited_View                    (Id : E; V : E);
-    procedure Set_Linker_Section_Pragma           (Id : E; V : N);
-    procedure Set_Lit_Indexes                     (Id : E; V : E);
-    procedure Set_Lit_Strings                     (Id : E; V : E);
-    procedure Set_Low_Bound_Tested                (Id : E; V : B := True);
-    procedure Set_Machine_Radix_10                (Id : E; V : B := True);
-    procedure Set_Master_Id                       (Id : E; V : E);
-    procedure Set_Materialize_Entity              (Id : E; V : B := True);
-    procedure Set_May_Inherit_Delayed_Rep_Aspects (Id : E; V : B := True);
-    procedure Set_Mechanism                       (Id : E; V : M);
-    procedure Set_Minimum_Accessibility           (Id : E; V : E);
-    procedure Set_Modulus                         (Id : E; V : U);
-    procedure Set_Must_Be_On_Byte_Boundary        (Id : E; V : B := True);
-    procedure Set_Must_Have_Preelab_Init          (Id : E; V : B := True);
-    procedure Set_Needs_Activation_Record         (Id : E; V : B := True);
-    procedure Set_Needs_Debug_Info                (Id : E; V : B := True);
-    procedure Set_Needs_No_Actuals                (Id : E; V : B := True);
-    procedure Set_Never_Set_In_Source             (Id : E; V : B := True);
-    procedure Set_Next_Inlined_Subprogram         (Id : E; V : E);
-    procedure Set_No_Dynamic_Predicate_On_Actual  (Id : E; V : B := True);
-    procedure Set_No_Pool_Assigned                (Id : E; V : B := True);
-    procedure Set_No_Predicate_On_Actual          (Id : E; V : B := True);
-    procedure Set_No_Reordering                   (Id : E; V : B := True);
-    procedure Set_No_Return                       (Id : E; V : B := True);
-    procedure Set_No_Strict_Aliasing              (Id : E; V : B := True);
-    procedure Set_No_Tagged_Streams_Pragma        (Id : E; V : N);
-    procedure Set_Non_Binary_Modulus              (Id : E; V : B := True);
-    procedure Set_Non_Limited_View                (Id : E; V : E);
-    procedure Set_Nonzero_Is_True                 (Id : E; V : B := True);
-    procedure Set_Normalized_First_Bit            (Id : E; V : U);
-    procedure Set_Normalized_Position             (Id : E; V : U);
-    procedure Set_Normalized_Position_Max         (Id : E; V : U);
-    procedure Set_OK_To_Rename                    (Id : E; V : B := True);
-    procedure Set_Optimize_Alignment_Space        (Id : E; V : B := True);
-    procedure Set_Optimize_Alignment_Time         (Id : E; V : B := True);
-    procedure Set_Original_Access_Type            (Id : E; V : E);
-    procedure Set_Original_Array_Type             (Id : E; V : E);
-    procedure Set_Original_Protected_Subprogram   (Id : E; V : N);
-    procedure Set_Original_Record_Component       (Id : E; V : E);
-    procedure Set_Overlays_Constant               (Id : E; V : B := True);
-    procedure Set_Overridden_Operation            (Id : E; V : E);
-    procedure Set_Package_Instantiation           (Id : E; V : N);
-    procedure Set_Packed_Array_Impl_Type          (Id : E; V : E);
-    procedure Set_Parent_Subtype                  (Id : E; V : E);
-    procedure Set_Part_Of_Constituents            (Id : E; V : L);
-    procedure Set_Part_Of_References              (Id : E; V : L);
-    procedure Set_Partial_View_Has_Unknown_Discr  (Id : E; V : B := True);
-    procedure Set_Pending_Access_Types            (Id : E; V : L);
-    procedure Set_Postconditions_Proc             (Id : E; V : E);
-    procedure Set_Prev_Entity                     (Id : E; V : E);
-    procedure Set_Prival                          (Id : E; V : E);
-    procedure Set_Prival_Link                     (Id : E; V : E);
-    procedure Set_Private_Dependents              (Id : E; V : L);
-    procedure Set_Protected_Body_Subprogram       (Id : E; V : E);
-    procedure Set_Protected_Formal                (Id : E; V : E);
-    procedure Set_Protected_Subprogram            (Id : E; V : N);
-    procedure Set_Protection_Object               (Id : E; V : E);
-    procedure Set_Reachable                       (Id : E; V : B := True);
-    procedure Set_Receiving_Entry                 (Id : E; V : E);
-    procedure Set_Referenced                      (Id : E; V : B := True);
-    procedure Set_Referenced_As_LHS               (Id : E; V : B := True);
-    procedure Set_Referenced_As_Out_Parameter     (Id : E; V : B := True);
-    procedure Set_Refinement_Constituents         (Id : E; V : L);
-    procedure Set_Register_Exception_Call         (Id : E; V : N);
-    procedure Set_Related_Array_Object            (Id : E; V : E);
-    procedure Set_Related_Expression              (Id : E; V : N);
-    procedure Set_Related_Instance                (Id : E; V : E);
-    procedure Set_Related_Type                    (Id : E; V : E);
-    procedure Set_Relative_Deadline_Variable      (Id : E; V : E);
-    procedure Set_Renamed_Entity                  (Id : E; V : N);
-    procedure Set_Renamed_In_Spec                 (Id : E; V : B := True);
-    procedure Set_Renamed_Object                  (Id : E; V : N);
-    procedure Set_Renaming_Map                    (Id : E; V : U);
-    procedure Set_Requires_Overriding             (Id : E; V : B := True);
-    procedure Set_Return_Applies_To               (Id : E; V : N);
-    procedure Set_Return_Present                  (Id : E; V : B := True);
-    procedure Set_Returns_By_Ref                  (Id : E; V : B := True);
-    procedure Set_Reverse_Bit_Order               (Id : E; V : B := True);
-    procedure Set_Reverse_Storage_Order           (Id : E; V : B := True);
-    procedure Set_Rewritten_For_C                 (Id : E; V : B := True);
-    procedure Set_RM_Size                         (Id : E; V : U);
-    procedure Set_Scalar_Range                    (Id : E; V : N);
-    procedure Set_Scale_Value                     (Id : E; V : U);
-    procedure Set_Scope_Depth_Value               (Id : E; V : U);
-    procedure Set_Sec_Stack_Needed_For_Return     (Id : E; V : B := True);
-    procedure Set_Shared_Var_Procs_Instance       (Id : E; V : E);
-    procedure Set_Size_Check_Code                 (Id : E; V : N);
-    procedure Set_Size_Depends_On_Discriminant    (Id : E; V : B := True);
-    procedure Set_Size_Known_At_Compile_Time      (Id : E; V : B := True);
-    procedure Set_Small_Value                     (Id : E; V : R);
-    procedure Set_SPARK_Aux_Pragma                (Id : E; V : N);
-    procedure Set_SPARK_Aux_Pragma_Inherited      (Id : E; V : B := True);
-    procedure Set_SPARK_Pragma                    (Id : E; V : N);
-    procedure Set_SPARK_Pragma_Inherited          (Id : E; V : B := True);
-    procedure Set_Spec_Entity                     (Id : E; V : E);
-    procedure Set_SSO_Set_High_By_Default         (Id : E; V : B := True);
-    procedure Set_SSO_Set_Low_By_Default          (Id : E; V : B := True);
-    procedure Set_Static_Discrete_Predicate       (Id : E; V : S);
-    procedure Set_Static_Elaboration_Desired      (Id : E; V : B);
-    procedure Set_Static_Initialization           (Id : E; V : N);
-    procedure Set_Static_Real_Or_String_Predicate (Id : E; V : N);
-    procedure Set_Status_Flag_Or_Transient_Decl   (Id : E; V : E);
-    procedure Set_Storage_Size_Variable           (Id : E; V : E);
-    procedure Set_Stored_Constraint               (Id : E; V : L);
-    procedure Set_Stores_Attribute_Old_Prefix     (Id : E; V : B := True);
-    procedure Set_Strict_Alignment                (Id : E; V : B := True);
-    procedure Set_String_Literal_Length           (Id : E; V : U);
-    procedure Set_String_Literal_Low_Bound        (Id : E; V : N);
-    procedure Set_Subprograms_For_Type            (Id : E; V : L);
-    procedure Set_Subps_Index                     (Id : E; V : U);
-    procedure Set_Suppress_Elaboration_Warnings   (Id : E; V : B := True);
-    procedure Set_Suppress_Initialization         (Id : E; V : B := True);
-    procedure Set_Suppress_Style_Checks           (Id : E; V : B := True);
-    procedure Set_Suppress_Value_Tracking_On_Call (Id : E; V : B := True);
-    procedure Set_Task_Body_Procedure             (Id : E; V : N);
-    procedure Set_Thunk_Entity                    (Id : E; V : E);
-    procedure Set_Treat_As_Volatile               (Id : E; V : B := True);
-    procedure Set_Underlying_Full_View            (Id : E; V : E);
-    procedure Set_Underlying_Record_View          (Id : E; V : E);
-    procedure Set_Universal_Aliasing              (Id : E; V : B := True);
-    procedure Set_Unset_Reference                 (Id : E; V : N);
-    procedure Set_Used_As_Generic_Actual          (Id : E; V : B := True);
-    procedure Set_Uses_Lock_Free                  (Id : E; V : B := True);
-    procedure Set_Uses_Sec_Stack                  (Id : E; V : B := True);
-    procedure Set_Validated_Object                (Id : E; V : N);
-    procedure Set_Warnings_Off                    (Id : E; V : B := True);
-    procedure Set_Warnings_Off_Used               (Id : E; V : B := True);
-    procedure Set_Warnings_Off_Used_Unmodified    (Id : E; V : B := True);
-    procedure Set_Warnings_Off_Used_Unreferenced  (Id : E; V : B := True);
-    procedure Set_Was_Hidden                      (Id : E; V : B := True);
-    procedure Set_Wrapped_Entity                  (Id : E; V : E);
- 
-    ---------------------------------------------------
-    -- Access to Subprograms in Subprograms_For_Type --
-    ---------------------------------------------------
- 
-    function DIC_Procedure                        (Id : E) return E;
-    function Partial_DIC_Procedure                (Id : E) return E;
-    function Invariant_Procedure                  (Id : E) return E;
-    function Partial_Invariant_Procedure          (Id : E) return E;
-    function Predicate_Function                   (Id : E) return E;
-    function Predicate_Function_M                 (Id : E) return E;
- 
-    procedure Set_DIC_Procedure                   (Id : E; V : E);
-    procedure Set_Partial_DIC_Procedure           (Id : E; V : E);
-    procedure Set_Invariant_Procedure             (Id : E; V : E);
-    procedure Set_Partial_Invariant_Procedure     (Id : E; V : E);
-    procedure Set_Predicate_Function              (Id : E; V : E);
-    procedure Set_Predicate_Function_M            (Id : E; V : E);
- 
-    -----------------------------------
-    -- Field Initialization Routines --
-    -----------------------------------
- 
-    --  These routines are overloadings of some of the above Set procedures
-    --  where the argument is normally a Uint. The overloadings take an Int
-    --  parameter instead, and appropriately convert it. There are also
-    --  versions that implicitly initialize to the appropriate "not set"
-    --  value. The not set (unknown) values are as follows:
- 
-    --    Alignment                 Uint_0
-    --    Component_Size            Uint_0
-    --    Component_Bit_Offset      No_Uint
-    --    Digits_Value              Uint_0
-    --    Esize                     Uint_0
-    --    Normalized_First_Bit      No_Uint
-    --    Normalized_Position       No_Uint
-    --    Normalized_Position_Max   No_Uint
-    --    RM_Size                   Uint_0
- 
-    --  It would be cleaner to use No_Uint in all these cases, but historically
-    --  we chose to use Uint_0 at first, and the change over will take time ???
-    --  This is particularly true for the RM_Size field, where a value of zero
-    --  is legitimate and causes some special tests around the code.
- 
-    --  Contrary to the corresponding Set procedures above, these routines
-    --  do NOT check the entity kind of their argument, instead they set the
-    --  underlying Uint fields directly (this allows them to be used for
-    --  entities whose Ekind has not been set yet).
- 
-    procedure Init_Alignment                (Id : E; V : Int);
-    procedure Init_Component_Bit_Offset     (Id : E; V : Int);
-    procedure Init_Component_Size           (Id : E; V : Int);
-    procedure Init_Digits_Value             (Id : E; V : Int);
-    procedure Init_Esize                    (Id : E; V : Int);
-    procedure Init_Normalized_First_Bit     (Id : E; V : Int);
-    procedure Init_Normalized_Position      (Id : E; V : Int);
-    procedure Init_Normalized_Position_Max  (Id : E; V : Int);
-    procedure Init_RM_Size                  (Id : E; V : Int);
- 
-    procedure Init_Alignment                (Id : E);
-    procedure Init_Component_Bit_Offset     (Id : E);
-    procedure Init_Component_Size           (Id : E);
-    procedure Init_Digits_Value             (Id : E);
-    procedure Init_Esize                    (Id : E);
-    procedure Init_Normalized_First_Bit     (Id : E);
-    procedure Init_Normalized_Position      (Id : E);
-    procedure Init_Normalized_Position_Max  (Id : E);
-    procedure Init_RM_Size                  (Id : E);
- 
-    procedure Init_Component_Location (Id : E);
-    --  Initializes all fields describing the location of a component
-    --  (Normalized_Position, Component_Bit_Offset, Normalized_First_Bit,
-    --  Normalized_Position_Max, Esize) to all be Unknown.
- 
-    procedure Init_Size (Id : E; V : Int);
-    --  Initialize both the Esize and RM_Size fields of E to V
- 
-    procedure Init_Size_Align (Id : E);
-    --  This procedure initializes both size fields and the alignment
-    --  field to all be Unknown.
- 
-    procedure Init_Object_Size_Align (Id : E);
-    --  Same as Init_Size_Align except RM_Size field (which is only for types)
-    --  is unaffected.
- 
-    ---------------
-    -- Iterators --
-    ---------------
- 
-    --  The call to Next_xxx (obj) is equivalent to obj := Next_xxx (obj)
-    --  We define the set of Proc_Next_xxx routines simply for the purposes
-    --  of inlining them without necessarily inlining the function.
- 
-    procedure Proc_Next_Component                 (N : in out Node_Id);
-    procedure Proc_Next_Component_Or_Discriminant (N : in out Node_Id);
-    procedure Proc_Next_Discriminant              (N : in out Node_Id);
-    procedure Proc_Next_Formal                    (N : in out Node_Id);
-    procedure Proc_Next_Formal_With_Extras        (N : in out Node_Id);
-    procedure Proc_Next_Index                     (N : in out Node_Id);
-    procedure Proc_Next_Inlined_Subprogram        (N : in out Node_Id);
-    procedure Proc_Next_Literal                   (N : in out Node_Id);
-    procedure Proc_Next_Stored_Discriminant       (N : in out Node_Id);
- 
-    pragma Inline (Proc_Next_Component);
-    pragma Inline (Proc_Next_Component_Or_Discriminant);
-    pragma Inline (Proc_Next_Discriminant);
-    pragma Inline (Proc_Next_Formal);
-    pragma Inline (Proc_Next_Formal_With_Extras);
-    pragma Inline (Proc_Next_Index);
-    pragma Inline (Proc_Next_Inlined_Subprogram);
-    pragma Inline (Proc_Next_Literal);
-    pragma Inline (Proc_Next_Stored_Discriminant);
- 
-    procedure Next_Component                 (N : in out Node_Id)
-      renames Proc_Next_Component;
- 
-    procedure Next_Component_Or_Discriminant (N : in out Node_Id)
-      renames Proc_Next_Component_Or_Discriminant;
- 
-    procedure Next_Discriminant              (N : in out Node_Id)
-      renames Proc_Next_Discriminant;
- 
-    procedure Next_Formal                    (N : in out Node_Id)
-      renames Proc_Next_Formal;
- 
-    procedure Next_Formal_With_Extras        (N : in out Node_Id)
-      renames Proc_Next_Formal_With_Extras;
- 
-    procedure Next_Index                     (N : in out Node_Id)
-      renames Proc_Next_Index;
- 
-    procedure Next_Inlined_Subprogram        (N : in out Node_Id)
-      renames Proc_Next_Inlined_Subprogram;
- 
-    procedure Next_Literal                   (N : in out Node_Id)
-      renames Proc_Next_Literal;
- 
-    procedure Next_Stored_Discriminant       (N : in out Node_Id)
-      renames Proc_Next_Stored_Discriminant;
- 
-    ---------------------------
-    -- Testing Warning Flags --
-    ---------------------------
- 
-    --  These routines are to be used rather than testing flags Warnings_Off,
-    --  Has_Pragma_Unmodified, Has_Pragma_Unreferenced. They deal with setting
-    --  the flags Warnings_Off_Used[_Unmodified|Unreferenced] for later access.
- 
-    function Has_Warnings_Off (E : Entity_Id) return Boolean;
-    --  If Warnings_Off is set on E, then returns True and also sets the flag
-    --  Warnings_Off_Used on E. If Warnings_Off is not set on E, returns False
-    --  and has no side effect.
- 
-    function Has_Unmodified (E : Entity_Id) return Boolean;
-    --  If flag Has_Pragma_Unmodified is set on E, returns True with no side
-    --  effects. Otherwise if Warnings_Off is set on E, returns True and also
-    --  sets the flag Warnings_Off_Used_Unmodified on E. If neither of the flags
-    --  Warnings_Off nor Has_Pragma_Unmodified is set, returns False with no
-    --  side effects.
- 
-    function Has_Unreferenced (E : Entity_Id) return Boolean;
-    --  If flag Has_Pragma_Unreferenced is set on E, returns True with no side
-    --  effects. Otherwise if Warnings_Off is set on E, returns True and also
-    --  sets the flag Warnings_Off_Used_Unreferenced on E. If neither of the
-    --  flags Warnings_Off nor Has_Pragma_Unreferenced is set, returns False
-    --  with no side effects.
- 
-    ----------------------------------------------
-    -- Subprograms for Accessing Rep Item Chain --
-    ----------------------------------------------
- 
-    --  The First_Rep_Item field of every entity points to a linked list (linked
-    --  through Next_Rep_Item) of representation pragmas, attribute definition
-    --  clauses, representation clauses, and aspect specifications that apply to
-    --  the item. Note that in the case of types, it is assumed that any such
-    --  rep items for a base type also apply to all subtypes. This is achieved
-    --  by having the chain for subtypes link onto the chain for the base type,
-    --  so that new entries for the subtype are added at the start of the chain.
-    --
-    --  Note: aspect specification nodes are linked only when evaluation of the
-    --  expression is deferred to the freeze point. For further details see
-    --  Sem_Ch13.Analyze_Aspect_Specifications.
- 
-    function Get_Attribute_Definition_Clause
-      (E  : Entity_Id;
-       Id : Attribute_Id) return Node_Id;
-    --  Searches the Rep_Item chain for a given entity E, for an instance of an
-    --  attribute definition clause with the given attribute Id. If found, the
-    --  value returned is the N_Attribute_Definition_Clause node, otherwise
-    --  Empty is returned.
- 
-    --  WARNING: There is a matching C declaration of this subprogram in fe.h
- 
-    function Get_Pragma (E : Entity_Id; Id : Pragma_Id) return Node_Id;
-    --  Searches the Rep_Item chain of entity E, for an instance of a pragma
-    --  with the given pragma Id. If found, the value returned is the N_Pragma
-    --  node, otherwise Empty is returned. The following contract pragmas that
-    --  appear in N_Contract nodes are also handled by this routine:
-    --    Abstract_State
-    --    Async_Readers
-    --    Async_Writers
-    --    Attach_Handler
-    --    Constant_After_Elaboration
-    --    Contract_Cases
-    --    Depends
-    --    Effective_Reads
-    --    Effective_Writes
-    --    Global
-    --    Initial_Condition
-    --    Initializes
-    --    Interrupt_Handler
-    --    No_Caching
-    --    Part_Of
-    --    Precondition
-    --    Postcondition
-    --    Refined_Depends
-    --    Refined_Global
-    --    Refined_Post
-    --    Refined_State
-    --    Subprogram_Variant
-    --    Test_Case
-    --    Volatile_Function
- 
-    function Get_Class_Wide_Pragma
-      (E  : Entity_Id;
-       Id : Pragma_Id) return Node_Id;
-    --  Examine Rep_Item chain to locate a classwide pre- or postcondition of a
-    --  primitive operation. Returns Empty if not present.
- 
-    function Get_Record_Representation_Clause (E : Entity_Id) return Node_Id;
-    --  Searches the Rep_Item chain for a given entity E, for a record
-    --  representation clause, and if found, returns it. Returns Empty
-    --  if no such clause is found.
- 
-    function Present_In_Rep_Item (E : Entity_Id; N : Node_Id) return Boolean;
-    --  Return True if N is present in the Rep_Item chain for a given entity E
- 
-    procedure Record_Rep_Item (E : Entity_Id; N : Node_Id);
-    --  N is the node for a representation pragma, representation clause, an
-    --  attribute definition clause, or an aspect specification that applies to
-    --  entity E. This procedure links the node N onto the Rep_Item chain for
-    --  entity E. Note that it is an error to call this procedure with E being
-    --  overloadable, and N being a pragma that applies to multiple overloadable
-    --  entities (Convention, Interface, Inline, Inline_Always, Import, Export,
-    --  External). This is not allowed even in the case where the entity is not
-    --  overloaded, since we can't rely on it being present in the overloaded
-    --  case, it is not useful to have it present in the non-overloaded case.
- 
-    -------------------------------
-    -- Miscellaneous Subprograms --
-    -------------------------------
- 
-    procedure Append_Entity (Id : Entity_Id; Scop : Entity_Id);
-    --  Add an entity to the list of entities declared in the scope Scop
- 
-    function Get_Full_View (T : Entity_Id) return Entity_Id;
-    --  If T is an incomplete type and the full declaration has been seen, or
-    --  is the name of a class_wide type whose root is incomplete, return the
-    --  corresponding full declaration, else return T itself.
- 
-    function Is_Entity_Name (N : Node_Id) return Boolean;
-    --  Test if the node N is the name of an entity (i.e. is an identifier,
-    --  expanded name, or an attribute reference that returns an entity).
- 
-    --  WARNING: There is a matching C declaration of this subprogram in fe.h
- 
-    procedure Link_Entities (First : Entity_Id; Second : Entity_Id);
-    --  Link entities First and Second in one entity chain.
-    --
-    --  NOTE: No updates are done to the First_Entity and Last_Entity fields
-    --  of the scope.
- 
-    procedure Remove_Entity (Id : Entity_Id);
-    --  Remove entity Id from the entity chain of its scope
- 
-    function Subtype_Kind (K : Entity_Kind) return Entity_Kind;
-    --  Given an entity_kind K this function returns the entity_kind
-    --  corresponding to subtype kind of the type represented by K. For
-    --  example if K is E_Signed_Integer_Type then E_Signed_Integer_Subtype
-    --  is returned. If K is already a subtype kind it itself is returned. An
-    --  internal error is generated if no such correspondence exists for K.
- 
-    procedure Unlink_Next_Entity (Id : Entity_Id);
-    --  Unchain entity Id's forward link within the entity chain of its scope
- 
-    ----------------------------------
-    -- Debugging Output Subprograms --
-    ----------------------------------
- 
-    procedure Write_Entity_Flags (Id : Entity_Id; Prefix : String);
-    --  Writes a series of entries giving a line for each flag that is
-    --  set to True. Each line is prefixed by the given string.
- 
-    procedure Write_Entity_Info (Id : Entity_Id; Prefix : String);
-    --  A debugging procedure to write out information about an entity
- 
-    procedure Write_Field6_Name  (Id : Entity_Id);
-    procedure Write_Field7_Name  (Id : Entity_Id);
-    procedure Write_Field8_Name  (Id : Entity_Id);
-    procedure Write_Field9_Name  (Id : Entity_Id);
-    procedure Write_Field10_Name (Id : Entity_Id);
-    procedure Write_Field11_Name (Id : Entity_Id);
-    procedure Write_Field12_Name (Id : Entity_Id);
-    procedure Write_Field13_Name (Id : Entity_Id);
-    procedure Write_Field14_Name (Id : Entity_Id);
-    procedure Write_Field15_Name (Id : Entity_Id);
-    procedure Write_Field16_Name (Id : Entity_Id);
-    procedure Write_Field17_Name (Id : Entity_Id);
-    procedure Write_Field18_Name (Id : Entity_Id);
-    procedure Write_Field19_Name (Id : Entity_Id);
-    procedure Write_Field20_Name (Id : Entity_Id);
-    procedure Write_Field21_Name (Id : Entity_Id);
-    procedure Write_Field22_Name (Id : Entity_Id);
-    procedure Write_Field23_Name (Id : Entity_Id);
-    procedure Write_Field24_Name (Id : Entity_Id);
-    procedure Write_Field25_Name (Id : Entity_Id);
-    procedure Write_Field26_Name (Id : Entity_Id);
-    procedure Write_Field27_Name (Id : Entity_Id);
-    procedure Write_Field28_Name (Id : Entity_Id);
-    procedure Write_Field29_Name (Id : Entity_Id);
-    procedure Write_Field30_Name (Id : Entity_Id);
-    procedure Write_Field31_Name (Id : Entity_Id);
-    procedure Write_Field32_Name (Id : Entity_Id);
-    procedure Write_Field33_Name (Id : Entity_Id);
-    procedure Write_Field34_Name (Id : Entity_Id);
-    procedure Write_Field35_Name (Id : Entity_Id);
-    procedure Write_Field36_Name (Id : Entity_Id);
-    procedure Write_Field37_Name (Id : Entity_Id);
-    procedure Write_Field38_Name (Id : Entity_Id);
-    procedure Write_Field39_Name (Id : Entity_Id);
-    procedure Write_Field40_Name (Id : Entity_Id);
-    procedure Write_Field41_Name (Id : Entity_Id);
-    --  These routines are used in Treepr to output a nice symbolic name for
-    --  the given field, depending on the Ekind. No blanks or end of lines are
-    --  output, just the characters of the field name.
- 
-    ----------------------------------
-    -- Inline Pragmas for functions --
-    ----------------------------------
- 
-    --  Note that these inline pragmas are referenced by the XEINFO utility
-    --  program in preparing the corresponding C header, and only those
-    --  subprograms meeting the requirements documented in the section on
-    --  XEINFO may be referenced in this section.
- 
-    pragma Inline (Abstract_States);
-    pragma Inline (Accept_Address);
-    pragma Inline (Access_Disp_Table);
-    pragma Inline (Access_Disp_Table_Elab_Flag);
-    pragma Inline (Access_Subprogram_Wrapper);
-    pragma Inline (Activation_Record_Component);
-    pragma Inline (Actual_Subtype);
-    pragma Inline (Address_Taken);
-    pragma Inline (Alias);
-    pragma Inline (Alignment);
-    pragma Inline (Anonymous_Designated_Type);
-    pragma Inline (Anonymous_Masters);
-    pragma Inline (Anonymous_Object);
-    pragma Inline (Associated_Entity);
-    pragma Inline (Associated_Formal_Package);
-    pragma Inline (Associated_Node_For_Itype);
-    pragma Inline (Associated_Storage_Pool);
-    pragma Inline (Barrier_Function);
-    pragma Inline (BIP_Initialization_Call);
-    pragma Inline (Block_Node);
-    pragma Inline (Body_Entity);
-    pragma Inline (Body_Needed_For_Inlining);
-    pragma Inline (Body_Needed_For_SAL);
-    pragma Inline (Body_References);
-    pragma Inline (C_Pass_By_Copy);
-    pragma Inline (Can_Never_Be_Null);
-    pragma Inline (Can_Use_Internal_Rep);
-    pragma Inline (Checks_May_Be_Suppressed);
-    pragma Inline (Class_Wide_Clone);
-    pragma Inline (Class_Wide_Type);
-    pragma Inline (Cloned_Subtype);
-    pragma Inline (Component_Bit_Offset);
-    pragma Inline (Component_Clause);
-    pragma Inline (Component_Size);
-    pragma Inline (Component_Type);
-    pragma Inline (Contains_Ignored_Ghost_Code);
-    pragma Inline (Contract);
-    pragma Inline (Contract_Wrapper);
-    pragma Inline (Corresponding_Concurrent_Type);
-    pragma Inline (Corresponding_Discriminant);
-    pragma Inline (Corresponding_Equality);
-    pragma Inline (Corresponding_Function);
-    pragma Inline (Corresponding_Procedure);
-    pragma Inline (Corresponding_Protected_Entry);
-    pragma Inline (Corresponding_Record_Component);
-    pragma Inline (Corresponding_Record_Type);
-    pragma Inline (Corresponding_Remote_Type);
-    pragma Inline (CR_Discriminant);
-    pragma Inline (Current_Use_Clause);
-    pragma Inline (Current_Value);
-    pragma Inline (Debug_Info_Off);
-    pragma Inline (Debug_Renaming_Link);
-    pragma Inline (Default_Aspect_Component_Value);
-    pragma Inline (Default_Aspect_Value);
-    pragma Inline (Default_Expr_Function);
-    pragma Inline (Default_Expressions_Processed);
-    pragma Inline (Default_Value);
-    pragma Inline (Delay_Cleanups);
-    pragma Inline (Delay_Subprogram_Descriptors);
-    pragma Inline (Delta_Value);
-    pragma Inline (Dependent_Instances);
-    pragma Inline (Depends_On_Private);
-    pragma Inline (Derived_Type_Link);
-    pragma Inline (Digits_Value);
-    pragma Inline (Direct_Primitive_Operations);
-    pragma Inline (Directly_Designated_Type);
-    pragma Inline (Disable_Controlled);
-    pragma Inline (Discard_Names);
-    pragma Inline (Discriminal);
-    pragma Inline (Discriminal_Link);
-    pragma Inline (Discriminant_Checking_Func);
-    pragma Inline (Discriminant_Constraint);
-    pragma Inline (Discriminant_Default_Value);
-    pragma Inline (Discriminant_Number);
-    pragma Inline (Dispatch_Table_Wrappers);
-    pragma Inline (DT_Entry_Count);
-    pragma Inline (DT_Offset_To_Top_Func);
-    pragma Inline (DT_Position);
-    pragma Inline (DTC_Entity);
-    pragma Inline (Elaborate_Body_Desirable);
-    pragma Inline (Elaboration_Entity);
-    pragma Inline (Elaboration_Entity_Required);
-    pragma Inline (Encapsulating_State);
-    pragma Inline (Enclosing_Scope);
-    pragma Inline (Entry_Accepted);
-    pragma Inline (Entry_Bodies_Array);
-    pragma Inline (Entry_Cancel_Parameter);
-    pragma Inline (Entry_Component);
-    pragma Inline (Entry_Formal);
-    pragma Inline (Entry_Index_Constant);
-    pragma Inline (Entry_Index_Type);
-    pragma Inline (Entry_Max_Queue_Lengths_Array);
-    pragma Inline (Entry_Parameters_Type);
-    pragma Inline (Enum_Pos_To_Rep);
-    pragma Inline (Enumeration_Pos);
-    pragma Inline (Enumeration_Rep);
-    pragma Inline (Enumeration_Rep_Expr);
-    pragma Inline (Equivalent_Type);
-    pragma Inline (Esize);
-    pragma Inline (Extra_Accessibility);
-    pragma Inline (Extra_Accessibility_Of_Result);
-    pragma Inline (Extra_Constrained);
-    pragma Inline (Extra_Formal);
-    pragma Inline (Extra_Formals);
-    pragma Inline (Finalize_Storage_Only);
-    pragma Inline (Finalization_Master);
-    pragma Inline (Finalizer);
-    pragma Inline (First_Entity);
-    pragma Inline (First_Exit_Statement);
-    pragma Inline (First_Index);
-    pragma Inline (First_Literal);
-    pragma Inline (First_Private_Entity);
-    pragma Inline (First_Rep_Item);
-    pragma Inline (Freeze_Node);
-    pragma Inline (From_Limited_With);
-    pragma Inline (Full_View);
-    pragma Inline (Generic_Homonym);
-    pragma Inline (Generic_Renamings);
-    pragma Inline (Handler_Records);
-    pragma Inline (Has_Aliased_Components);
-    pragma Inline (Has_Alignment_Clause);
-    pragma Inline (Has_All_Calls_Remote);
-    pragma Inline (Has_Atomic_Components);
-    pragma Inline (Has_Biased_Representation);
-    pragma Inline (Has_Completion);
-    pragma Inline (Has_Completion_In_Body);
-    pragma Inline (Has_Complex_Representation);
-    pragma Inline (Has_Component_Size_Clause);
-    pragma Inline (Has_Constrained_Partial_View);
-    pragma Inline (Has_Contiguous_Rep);
-    pragma Inline (Has_Controlled_Component);
-    pragma Inline (Has_Controlling_Result);
-    pragma Inline (Has_Convention_Pragma);
-    pragma Inline (Has_Default_Aspect);
-    pragma Inline (Has_Delayed_Aspects);
-    pragma Inline (Has_Delayed_Freeze);
-    pragma Inline (Has_Delayed_Rep_Aspects);
-    pragma Inline (Has_DIC);
-    pragma Inline (Has_Discriminants);
-    pragma Inline (Has_Dispatch_Table);
-    pragma Inline (Has_Dynamic_Predicate_Aspect);
-    pragma Inline (Has_Enumeration_Rep_Clause);
-    pragma Inline (Has_Exit);
-    pragma Inline (Has_Expanded_Contract);
-    pragma Inline (Has_Forward_Instantiation);
-    pragma Inline (Has_Fully_Qualified_Name);
-    pragma Inline (Has_Gigi_Rep_Item);
-    pragma Inline (Has_Homonym);
-    pragma Inline (Has_Implicit_Dereference);
-    pragma Inline (Has_Independent_Components);
-    pragma Inline (Has_Inheritable_Invariants);
-    pragma Inline (Has_Inherited_DIC);
-    pragma Inline (Has_Inherited_Invariants);
-    pragma Inline (Has_Initial_Value);
-    pragma Inline (Has_Invariants);
-    pragma Inline (Has_Loop_Entry_Attributes);
-    pragma Inline (Has_Machine_Radix_Clause);
-    pragma Inline (Has_Master_Entity);
-    pragma Inline (Has_Missing_Return);
-    pragma Inline (Has_Nested_Block_With_Handler);
-    pragma Inline (Has_Nested_Subprogram);
-    pragma Inline (Has_Non_Standard_Rep);
-    pragma Inline (Has_Object_Size_Clause);
-    pragma Inline (Has_Out_Or_In_Out_Parameter);
-    pragma Inline (Has_Own_DIC);
-    pragma Inline (Has_Own_Invariants);
-    pragma Inline (Has_Partial_Visible_Refinement);
-    pragma Inline (Has_Per_Object_Constraint);
-    pragma Inline (Has_Pragma_Controlled);
-    pragma Inline (Has_Pragma_Elaborate_Body);
-    pragma Inline (Has_Pragma_Inline);
-    pragma Inline (Has_Pragma_Inline_Always);
-    pragma Inline (Has_Pragma_No_Inline);
-    pragma Inline (Has_Pragma_Ordered);
-    pragma Inline (Has_Pragma_Pack);
-    pragma Inline (Has_Pragma_Preelab_Init);
-    pragma Inline (Has_Pragma_Pure);
-    pragma Inline (Has_Pragma_Pure_Function);
-    pragma Inline (Has_Pragma_Thread_Local_Storage);
-    pragma Inline (Has_Pragma_Unmodified);
-    pragma Inline (Has_Pragma_Unreferenced);
-    pragma Inline (Has_Pragma_Unreferenced_Objects);
-    pragma Inline (Has_Pragma_Unused);
-    pragma Inline (Has_Predicates);
-    pragma Inline (Has_Primitive_Operations);
-    pragma Inline (Has_Private_Ancestor);
-    pragma Inline (Has_Private_Declaration);
-    pragma Inline (Has_Private_Extension);
-    pragma Inline (Has_Protected);
-    pragma Inline (Has_Qualified_Name);
-    pragma Inline (Has_RACW);
-    pragma Inline (Has_Record_Rep_Clause);
-    pragma Inline (Has_Recursive_Call);
-    pragma Inline (Has_Shift_Operator);
-    pragma Inline (Has_Size_Clause);
-    pragma Inline (Has_Small_Clause);
-    pragma Inline (Has_Specified_Layout);
-    pragma Inline (Has_Specified_Stream_Input);
-    pragma Inline (Has_Specified_Stream_Output);
-    pragma Inline (Has_Specified_Stream_Read);
-    pragma Inline (Has_Specified_Stream_Write);
-    pragma Inline (Has_Static_Discriminants);
-    pragma Inline (Has_Static_Predicate);
-    pragma Inline (Has_Static_Predicate_Aspect);
-    pragma Inline (Has_Storage_Size_Clause);
-    pragma Inline (Has_Stream_Size_Clause);
-    pragma Inline (Has_Task);
-    pragma Inline (Has_Timing_Event);
-    pragma Inline (Has_Thunks);
-    pragma Inline (Has_Unchecked_Union);
-    pragma Inline (Has_Unknown_Discriminants);
-    pragma Inline (Has_Visible_Refinement);
-    pragma Inline (Has_Volatile_Components);
-    pragma Inline (Has_Xref_Entry);
-    pragma Inline (Has_Yield_Aspect);
-    pragma Inline (Hiding_Loop_Variable);
-    pragma Inline (Hidden_In_Formal_Instance);
-    pragma Inline (Homonym);
-    pragma Inline (Ignore_SPARK_Mode_Pragmas);
-    pragma Inline (Import_Pragma);
-    pragma Inline (Incomplete_Actuals);
-    pragma Inline (In_Package_Body);
-    pragma Inline (In_Private_Part);
-    pragma Inline (In_Use);
-    pragma Inline (Initialization_Statements);
-    pragma Inline (Inner_Instances);
-    pragma Inline (Interface_Alias);
-    pragma Inline (Interface_Name);
-    pragma Inline (Interfaces);
-    pragma Inline (Is_Abstract_Subprogram);
-    pragma Inline (Is_Abstract_Type);
-    pragma Inline (Is_Access_Constant);
-    pragma Inline (Is_Activation_Record);
-    pragma Inline (Is_Actual_Subtype);
-    pragma Inline (Is_Access_Protected_Subprogram_Type);
-    pragma Inline (Is_Access_Subprogram_Type);
-    pragma Inline (Is_Access_Type);
-    pragma Inline (Is_Ada_2005_Only);
-    pragma Inline (Is_Ada_2012_Only);
-    pragma Inline (Is_Aggregate_Type);
-    pragma Inline (Is_Aliased);
-    pragma Inline (Is_Anonymous_Access_Type);
-    pragma Inline (Is_Array_Type);
-    pragma Inline (Is_Assignable);
-    pragma Inline (Is_Asynchronous);
-    pragma Inline (Is_Atomic);
-    pragma Inline (Is_Bit_Packed_Array);
-    pragma Inline (Is_Called);
-    pragma Inline (Is_Character_Type);
-    pragma Inline (Is_Checked_Ghost_Entity);
-    pragma Inline (Is_Child_Unit);
-    pragma Inline (Is_Class_Wide_Clone);
-    pragma Inline (Is_Class_Wide_Equivalent_Type);
-    pragma Inline (Is_Class_Wide_Type);
-    pragma Inline (Is_Compilation_Unit);
-    pragma Inline (Is_Completely_Hidden);
-    pragma Inline (Is_Composite_Type);
-    pragma Inline (Is_Concurrent_Body);
-    pragma Inline (Is_Concurrent_Record_Type);
-    pragma Inline (Is_Concurrent_Type);
-    pragma Inline (Is_Constr_Subt_For_U_Nominal);
-    pragma Inline (Is_Constr_Subt_For_UN_Aliased);
-    pragma Inline (Is_Constrained);
-    pragma Inline (Is_Constructor);
-    pragma Inline (Is_Controlled_Active);
-    pragma Inline (Is_Controlling_Formal);
-    pragma Inline (Is_CPP_Class);
-    pragma Inline (Is_CUDA_Kernel);
-    pragma Inline (Is_Decimal_Fixed_Point_Type);
-    pragma Inline (Is_Descendant_Of_Address);
-    pragma Inline (Is_DIC_Procedure);
-    pragma Inline (Is_Digits_Type);
-    pragma Inline (Is_Discrete_Or_Fixed_Point_Type);
-    pragma Inline (Is_Discrete_Type);
-    pragma Inline (Is_Discrim_SO_Function);
-    pragma Inline (Is_Discriminant_Check_Function);
-    pragma Inline (Is_Dispatch_Table_Entity);
-    pragma Inline (Is_Dispatching_Operation);
-    pragma Inline (Is_Elaboration_Checks_OK_Id);
-    pragma Inline (Is_Elaboration_Warnings_OK_Id);
-    pragma Inline (Is_Elementary_Type);
-    pragma Inline (Is_Eliminated);
-    pragma Inline (Is_Entry);
-    pragma Inline (Is_Entry_Formal);
-    pragma Inline (Is_Entry_Wrapper);
-    pragma Inline (Is_Enumeration_Type);
-    pragma Inline (Is_Exception_Handler);
-    pragma Inline (Is_Exported);
-    pragma Inline (Is_Finalized_Transient);
-    pragma Inline (Is_First_Subtype);
-    pragma Inline (Is_Fixed_Point_Type);
-    pragma Inline (Is_Floating_Point_Type);
-    pragma Inline (Is_Formal);
-    pragma Inline (Is_Formal_Object);
-    pragma Inline (Is_Formal_Subprogram);
-    pragma Inline (Is_Frozen);
-    pragma Inline (Is_Full_Access);
-    pragma Inline (Is_Generic_Actual_Subprogram);
-    pragma Inline (Is_Generic_Actual_Type);
-    pragma Inline (Is_Generic_Instance);
-    pragma Inline (Is_Generic_Subprogram);
-    pragma Inline (Is_Generic_Type);
-    pragma Inline (Is_Generic_Unit);
-    pragma Inline (Is_Ghost_Entity);
-    pragma Inline (Is_Hidden);
-    pragma Inline (Is_Hidden_Non_Overridden_Subpgm);
-    pragma Inline (Is_Hidden_Open_Scope);
-    pragma Inline (Is_Ignored_Ghost_Entity);
-    pragma Inline (Is_Ignored_Transient);
-    pragma Inline (Is_Immediately_Visible);
-    pragma Inline (Is_Implementation_Defined);
-    pragma Inline (Is_Imported);
-    pragma Inline (Is_Incomplete_Or_Private_Type);
-    pragma Inline (Is_Incomplete_Type);
-    pragma Inline (Is_Independent);
-    pragma Inline (Is_Initial_Condition_Procedure);
-    pragma Inline (Is_Inlined);
-    pragma Inline (Is_Inlined_Always);
-    pragma Inline (Is_Instantiated);
-    pragma Inline (Is_Integer_Type);
-    pragma Inline (Is_Interface);
-    pragma Inline (Is_Internal);
-    pragma Inline (Is_Interrupt_Handler);
-    pragma Inline (Is_Intrinsic_Subprogram);
-    pragma Inline (Is_Invariant_Procedure);
-    pragma Inline (Is_Itype);
-    pragma Inline (Is_Known_Non_Null);
-    pragma Inline (Is_Known_Null);
-    pragma Inline (Is_Known_Valid);
-    pragma Inline (Is_Limited_Composite);
-    pragma Inline (Is_Limited_Interface);
-    pragma Inline (Is_Limited_Record);
-    pragma Inline (Is_Local_Anonymous_Access);
-    pragma Inline (Is_Loop_Parameter);
-    pragma Inline (Is_Machine_Code_Subprogram);
-    pragma Inline (Is_Modular_Integer_Type);
-    pragma Inline (Is_Named_Number);
-    pragma Inline (Is_Non_Static_Subtype);
-    pragma Inline (Is_Null_Init_Proc);
-    pragma Inline (Is_Numeric_Type);
-    pragma Inline (Is_Object);
-    pragma Inline (Is_Obsolescent);
-    pragma Inline (Is_Only_Out_Parameter);
-    pragma Inline (Is_Ordinary_Fixed_Point_Type);
-    pragma Inline (Is_Overloadable);
-    pragma Inline (Is_Package_Body_Entity);
-    pragma Inline (Is_Packed);
-    pragma Inline (Is_Packed_Array_Impl_Type);
-    pragma Inline (Is_Param_Block_Component_Type);
-    pragma Inline (Is_Partial_Invariant_Procedure);
-    pragma Inline (Is_Potentially_Use_Visible);
-    pragma Inline (Is_Predicate_Function);
-    pragma Inline (Is_Predicate_Function_M);
-    pragma Inline (Is_Preelaborated);
-    pragma Inline (Is_Primitive);
-    pragma Inline (Is_Primitive_Wrapper);
-    pragma Inline (Is_Private_Composite);
-    pragma Inline (Is_Private_Descendant);
-    pragma Inline (Is_Private_Primitive);
-    pragma Inline (Is_Private_Type);
-    pragma Inline (Is_Protected_Type);
-    pragma Inline (Is_Public);
-    pragma Inline (Is_Pure);
-    pragma Inline (Is_Pure_Unit_Access_Type);
-    pragma Inline (Is_RACW_Stub_Type);
-    pragma Inline (Is_Raised);
-    pragma Inline (Is_Real_Type);
-    pragma Inline (Is_Record_Type);
-    pragma Inline (Is_Remote_Call_Interface);
-    pragma Inline (Is_Remote_Types);
-    pragma Inline (Is_Renaming_Of_Object);
-    pragma Inline (Is_Return_Object);
-    pragma Inline (Is_Safe_To_Reevaluate);
-    pragma Inline (Is_Scalar_Type);
-    pragma Inline (Is_Shared_Passive);
-    pragma Inline (Is_Signed_Integer_Type);
-    pragma Inline (Is_Static_Type);
-    pragma Inline (Is_Statically_Allocated);
-    pragma Inline (Is_Subprogram);
-    pragma Inline (Is_Subprogram_Or_Entry);
-    pragma Inline (Is_Subprogram_Or_Generic_Subprogram);
-    pragma Inline (Is_Tag);
-    pragma Inline (Is_Tagged_Type);
-    pragma Inline (Is_Task_Type);
-    pragma Inline (Is_Thunk);
-    pragma Inline (Is_Trivial_Subprogram);
-    pragma Inline (Is_True_Constant);
-    pragma Inline (Is_Type);
-    pragma Inline (Is_Unchecked_Union);
-    pragma Inline (Is_Underlying_Full_View);
-    pragma Inline (Is_Underlying_Record_View);
-    pragma Inline (Is_Unimplemented);
-    pragma Inline (Is_Unsigned_Type);
-    pragma Inline (Is_Uplevel_Referenced_Entity);
-    pragma Inline (Is_Valued_Procedure);
-    pragma Inline (Is_Visible_Formal);
-    pragma Inline (Is_Visible_Lib_Unit);
-    pragma Inline (Is_Volatile_Full_Access);
-    pragma Inline (Itype_Printed);
-    pragma Inline (Kill_Elaboration_Checks);
-    pragma Inline (Kill_Range_Checks);
-    pragma Inline (Known_To_Have_Preelab_Init);
-    pragma Inline (Last_Aggregate_Assignment);
-    pragma Inline (Last_Assignment);
-    pragma Inline (Last_Entity);
-    pragma Inline (Limited_View);
-    pragma Inline (Link_Entities);
-    pragma Inline (Linker_Section_Pragma);
-    pragma Inline (Lit_Indexes);
-    pragma Inline (Lit_Strings);
-    pragma Inline (Low_Bound_Tested);
-    pragma Inline (Machine_Radix_10);
-    pragma Inline (Master_Id);
-    pragma Inline (Materialize_Entity);
-    pragma Inline (May_Inherit_Delayed_Rep_Aspects);
-    pragma Inline (Mechanism);
-    pragma Inline (Minimum_Accessibility);
-    pragma Inline (Modulus);
-    pragma Inline (Must_Be_On_Byte_Boundary);
-    pragma Inline (Must_Have_Preelab_Init);
-    pragma Inline (Needs_Activation_Record);
-    pragma Inline (Needs_Debug_Info);
-    pragma Inline (Needs_No_Actuals);
-    pragma Inline (Never_Set_In_Source);
-    pragma Inline (Next_Index);
-    pragma Inline (Next_Inlined_Subprogram);
-    pragma Inline (Next_Literal);
-    pragma Inline (Next_Stored_Discriminant);
-    pragma Inline (No_Dynamic_Predicate_On_Actual);
-    pragma Inline (No_Pool_Assigned);
-    pragma Inline (No_Predicate_On_Actual);
-    pragma Inline (No_Reordering);
-    pragma Inline (No_Return);
-    pragma Inline (No_Strict_Aliasing);
-    pragma Inline (No_Tagged_Streams_Pragma);
-    pragma Inline (Non_Binary_Modulus);
-    pragma Inline (Non_Limited_View);
-    pragma Inline (Nonzero_Is_True);
-    pragma Inline (Normalized_First_Bit);
-    pragma Inline (Normalized_Position);
-    pragma Inline (Normalized_Position_Max);
-    pragma Inline (OK_To_Rename);
-    pragma Inline (Optimize_Alignment_Space);
-    pragma Inline (Optimize_Alignment_Time);
-    pragma Inline (Original_Access_Type);
-    pragma Inline (Original_Array_Type);
-    pragma Inline (Original_Protected_Subprogram);
-    pragma Inline (Original_Record_Component);
-    pragma Inline (Overlays_Constant);
-    pragma Inline (Overridden_Operation);
-    pragma Inline (Package_Instantiation);
-    pragma Inline (Packed_Array_Impl_Type);
-    pragma Inline (Parameter_Mode);
-    pragma Inline (Parent_Subtype);
-    pragma Inline (Part_Of_Constituents);
-    pragma Inline (Part_Of_References);
-    pragma Inline (Partial_View_Has_Unknown_Discr);
-    pragma Inline (Pending_Access_Types);
-    pragma Inline (Postconditions_Proc);
-    pragma Inline (Predicated_Parent);
-    pragma Inline (Predicates_Ignored);
-    pragma Inline (Prev_Entity);
-    pragma Inline (Prival);
-    pragma Inline (Prival_Link);
-    pragma Inline (Private_Dependents);
-    pragma Inline (Protected_Body_Subprogram);
-    pragma Inline (Protected_Formal);
-    pragma Inline (Protected_Subprogram);
-    pragma Inline (Protection_Object);
-    pragma Inline (Reachable);
-    pragma Inline (Receiving_Entry);
-    pragma Inline (Referenced);
-    pragma Inline (Referenced_As_LHS);
-    pragma Inline (Referenced_As_Out_Parameter);
-    pragma Inline (Refinement_Constituents);
-    pragma Inline (Register_Exception_Call);
-    pragma Inline (Related_Array_Object);
-    pragma Inline (Related_Expression);
-    pragma Inline (Related_Instance);
-    pragma Inline (Related_Type);
-    pragma Inline (Relative_Deadline_Variable);
-    pragma Inline (Remove_Entity);
-    pragma Inline (Renamed_Entity);
-    pragma Inline (Renamed_In_Spec);
-    pragma Inline (Renamed_Object);
-    pragma Inline (Renaming_Map);
-    pragma Inline (Requires_Overriding);
-    pragma Inline (Return_Applies_To);
-    pragma Inline (Return_Present);
-    pragma Inline (Returns_By_Ref);
-    pragma Inline (Reverse_Bit_Order);
-    pragma Inline (Reverse_Storage_Order);
-    pragma Inline (Rewritten_For_C);
-    pragma Inline (RM_Size);
-    pragma Inline (Scalar_Range);
-    pragma Inline (Scale_Value);
-    pragma Inline (Scope_Depth_Value);
-    pragma Inline (Sec_Stack_Needed_For_Return);
-    pragma Inline (Shared_Var_Procs_Instance);
-    pragma Inline (Size_Check_Code);
-    pragma Inline (Size_Depends_On_Discriminant);
-    pragma Inline (Size_Known_At_Compile_Time);
-    pragma Inline (Small_Value);
-    pragma Inline (SPARK_Aux_Pragma);
-    pragma Inline (SPARK_Aux_Pragma_Inherited);
-    pragma Inline (SPARK_Pragma);
-    pragma Inline (SPARK_Pragma_Inherited);
-    pragma Inline (Spec_Entity);
-    pragma Inline (SSO_Set_High_By_Default);
-    pragma Inline (SSO_Set_Low_By_Default);
-    pragma Inline (Static_Discrete_Predicate);
-    pragma Inline (Static_Elaboration_Desired);
-    pragma Inline (Static_Initialization);
-    pragma Inline (Static_Real_Or_String_Predicate);
-    pragma Inline (Status_Flag_Or_Transient_Decl);
-    pragma Inline (Storage_Size_Variable);
-    pragma Inline (Stored_Constraint);
-    pragma Inline (Stores_Attribute_Old_Prefix);
-    pragma Inline (Strict_Alignment);
-    pragma Inline (String_Literal_Length);
-    pragma Inline (String_Literal_Low_Bound);
-    pragma Inline (Subprograms_For_Type);
-    pragma Inline (Subps_Index);
-    pragma Inline (Suppress_Elaboration_Warnings);
-    pragma Inline (Suppress_Initialization);
-    pragma Inline (Suppress_Style_Checks);
-    pragma Inline (Suppress_Value_Tracking_On_Call);
-    pragma Inline (Task_Body_Procedure);
-    pragma Inline (Thunk_Entity);
-    pragma Inline (Treat_As_Volatile);
-    pragma Inline (Underlying_Full_View);
-    pragma Inline (Underlying_Record_View);
-    pragma Inline (Universal_Aliasing);
-    pragma Inline (Unlink_Next_Entity);
-    pragma Inline (Unset_Reference);
-    pragma Inline (Used_As_Generic_Actual);
-    pragma Inline (Uses_Lock_Free);
-    pragma Inline (Uses_Sec_Stack);
-    pragma Inline (Validated_Object);
-    pragma Inline (Warnings_Off);
-    pragma Inline (Warnings_Off_Used);
-    pragma Inline (Warnings_Off_Used_Unmodified);
-    pragma Inline (Warnings_Off_Used_Unreferenced);
-    pragma Inline (Was_Hidden);
-    pragma Inline (Wrapped_Entity);
- 
-    --  END XEINFO INLINES
- 
-    --  The following Inline pragmas are *not* read by XEINFO when building the
-    --  C version of this interface automatically (so the C version will end up
-    --  making out of line calls). The pragma scan in XEINFO will be terminated
-    --  on encountering the END XEINFO INLINES line. We inline things here which
-    --  are small, but not of the canonical attribute access/set format that can
-    --  be handled by XEINFO.
- 
-    pragma Inline (Address_Clause);
-    pragma Inline (Alignment_Clause);
-    pragma Inline (Base_Type);
-    pragma Inline (Float_Rep);
-    pragma Inline (Has_Foreign_Convention);
-    pragma Inline (Has_Limited_View);
-    pragma Inline (Has_Non_Limited_View);
-    pragma Inline (Is_Base_Type);
-    pragma Inline (Is_Boolean_Type);
-    pragma Inline (Is_Constant_Object);
-    pragma Inline (Is_Controlled);
-    pragma Inline (Is_Discriminal);
-    pragma Inline (Is_Entity_Name);
-    pragma Inline (Is_Finalizer);
-    pragma Inline (Is_Null_State);
-    pragma Inline (Is_Package_Or_Generic_Package);
-    pragma Inline (Is_Packed_Array);
-    pragma Inline (Is_Prival);
-    pragma Inline (Is_Protected_Component);
-    pragma Inline (Is_Protected_Record_Type);
-    pragma Inline (Is_String_Type);
-    pragma Inline (Is_Task_Record_Type);
-    pragma Inline (Is_Volatile);
-    pragma Inline (Is_Wrapper_Package);
-    pragma Inline (Scope_Depth);
-    pragma Inline (Scope_Depth_Set);
-    pragma Inline (Size_Clause);
-    pragma Inline (Stream_Size_Clause);
-    pragma Inline (Type_High_Bound);
-    pragma Inline (Type_Low_Bound);
- 
-    pragma Inline (Known_Alignment);
-    pragma Inline (Known_Component_Bit_Offset);
-    pragma Inline (Known_Component_Size);
-    pragma Inline (Known_Esize);
-    pragma Inline (Known_Normalized_First_Bit);
-    pragma Inline (Known_Normalized_Position);
-    pragma Inline (Known_Normalized_Position_Max);
-    pragma Inline (Known_RM_Size);
- 
-    pragma Inline (Known_Static_Component_Bit_Offset);
-    pragma Inline (Known_Static_Component_Size);
-    pragma Inline (Known_Static_Esize);
-    pragma Inline (Known_Static_Normalized_First_Bit);
-    pragma Inline (Known_Static_Normalized_Position);
-    pragma Inline (Known_Static_Normalized_Position_Max);
-    pragma Inline (Known_Static_RM_Size);
- 
-    pragma Inline (Unknown_Alignment);
-    pragma Inline (Unknown_Component_Bit_Offset);
-    pragma Inline (Unknown_Component_Size);
-    pragma Inline (Unknown_Esize);
-    pragma Inline (Unknown_Normalized_First_Bit);
-    pragma Inline (Unknown_Normalized_Position);
-    pragma Inline (Unknown_Normalized_Position_Max);
-    pragma Inline (Unknown_RM_Size);
- 
-    -----------------------------------
-    -- Inline Pragmas for procedures --
-    -----------------------------------
- 
-    --  The following inline pragmas are *not* referenced by the XEINFO utility
-    --  program in preparing the corresponding C header, and therefore do *not*
-    --  need to meet the requirements documented in the section on XEINFO.
- 
-    pragma Inline (Set_Abstract_States);
-    pragma Inline (Set_Accept_Address);
-    pragma Inline (Set_Access_Disp_Table);
-    pragma Inline (Set_Access_Disp_Table_Elab_Flag);
-    pragma Inline (Set_Access_Subprogram_Wrapper);
-    pragma Inline (Set_Activation_Record_Component);
-    pragma Inline (Set_Actual_Subtype);
-    pragma Inline (Set_Address_Taken);
-    pragma Inline (Set_Alias);
-    pragma Inline (Set_Alignment);
-    pragma Inline (Set_Anonymous_Designated_Type);
-    pragma Inline (Set_Anonymous_Masters);
-    pragma Inline (Set_Anonymous_Object);
-    pragma Inline (Set_Associated_Entity);
-    pragma Inline (Set_Associated_Formal_Package);
-    pragma Inline (Set_Associated_Node_For_Itype);
-    pragma Inline (Set_Associated_Storage_Pool);
-    pragma Inline (Set_Barrier_Function);
-    pragma Inline (Set_BIP_Initialization_Call);
-    pragma Inline (Set_Block_Node);
-    pragma Inline (Set_Body_Entity);
-    pragma Inline (Set_Body_Needed_For_Inlining);
-    pragma Inline (Set_Body_Needed_For_SAL);
-    pragma Inline (Set_Body_References);
-    pragma Inline (Set_C_Pass_By_Copy);
-    pragma Inline (Set_Can_Never_Be_Null);
-    pragma Inline (Set_Can_Use_Internal_Rep);
-    pragma Inline (Set_Checks_May_Be_Suppressed);
-    pragma Inline (Set_Class_Wide_Clone);
-    pragma Inline (Set_Class_Wide_Type);
-    pragma Inline (Set_Cloned_Subtype);
-    pragma Inline (Set_Component_Bit_Offset);
-    pragma Inline (Set_Component_Clause);
-    pragma Inline (Set_Component_Size);
-    pragma Inline (Set_Component_Type);
-    pragma Inline (Set_Contains_Ignored_Ghost_Code);
-    pragma Inline (Set_Contract);
-    pragma Inline (Set_Contract_Wrapper);
-    pragma Inline (Set_Corresponding_Concurrent_Type);
-    pragma Inline (Set_Corresponding_Discriminant);
-    pragma Inline (Set_Corresponding_Equality);
-    pragma Inline (Set_Corresponding_Function);
-    pragma Inline (Set_Corresponding_Procedure);
-    pragma Inline (Set_Corresponding_Protected_Entry);
-    pragma Inline (Set_Corresponding_Record_Component);
-    pragma Inline (Set_Corresponding_Record_Type);
-    pragma Inline (Set_Corresponding_Remote_Type);
-    pragma Inline (Set_CR_Discriminant);
-    pragma Inline (Set_Current_Use_Clause);
-    pragma Inline (Set_Current_Value);
-    pragma Inline (Set_Debug_Info_Off);
-    pragma Inline (Set_Debug_Renaming_Link);
-    pragma Inline (Set_Default_Aspect_Component_Value);
-    pragma Inline (Set_Default_Aspect_Value);
-    pragma Inline (Set_Default_Expr_Function);
-    pragma Inline (Set_Default_Expressions_Processed);
-    pragma Inline (Set_Default_Value);
-    pragma Inline (Set_Delay_Cleanups);
-    pragma Inline (Set_Delay_Subprogram_Descriptors);
-    pragma Inline (Set_Delta_Value);
-    pragma Inline (Set_Dependent_Instances);
-    pragma Inline (Set_Depends_On_Private);
-    pragma Inline (Set_Derived_Type_Link);
-    pragma Inline (Set_Digits_Value);
-    pragma Inline (Set_Direct_Primitive_Operations);
-    pragma Inline (Set_Directly_Designated_Type);
-    pragma Inline (Set_Disable_Controlled);
-    pragma Inline (Set_Discard_Names);
-    pragma Inline (Set_Discriminal);
-    pragma Inline (Set_Discriminal_Link);
-    pragma Inline (Set_Discriminant_Checking_Func);
-    pragma Inline (Set_Discriminant_Constraint);
-    pragma Inline (Set_Discriminant_Default_Value);
-    pragma Inline (Set_Discriminant_Number);
-    pragma Inline (Set_Dispatch_Table_Wrappers);
-    pragma Inline (Set_DT_Entry_Count);
-    pragma Inline (Set_DT_Offset_To_Top_Func);
-    pragma Inline (Set_DT_Position);
-    pragma Inline (Set_DTC_Entity);
-    pragma Inline (Set_Elaborate_Body_Desirable);
-    pragma Inline (Set_Elaboration_Entity);
-    pragma Inline (Set_Elaboration_Entity_Required);
-    pragma Inline (Set_Encapsulating_State);
-    pragma Inline (Set_Enclosing_Scope);
-    pragma Inline (Set_Entry_Accepted);
-    pragma Inline (Set_Entry_Bodies_Array);
-    pragma Inline (Set_Entry_Cancel_Parameter);
-    pragma Inline (Set_Entry_Component);
-    pragma Inline (Set_Entry_Formal);
-    pragma Inline (Set_Entry_Max_Queue_Lengths_Array);
-    pragma Inline (Set_Entry_Parameters_Type);
-    pragma Inline (Set_Enum_Pos_To_Rep);
-    pragma Inline (Set_Enumeration_Pos);
-    pragma Inline (Set_Enumeration_Rep);
-    pragma Inline (Set_Enumeration_Rep_Expr);
-    pragma Inline (Set_Equivalent_Type);
-    pragma Inline (Set_Esize);
-    pragma Inline (Set_Extra_Accessibility);
-    pragma Inline (Set_Extra_Accessibility_Of_Result);
-    pragma Inline (Set_Extra_Constrained);
-    pragma Inline (Set_Extra_Formal);
-    pragma Inline (Set_Extra_Formals);
-    pragma Inline (Set_Finalize_Storage_Only);
-    pragma Inline (Set_Finalization_Master);
-    pragma Inline (Set_Finalizer);
-    pragma Inline (Set_First_Entity);
-    pragma Inline (Set_First_Exit_Statement);
-    pragma Inline (Set_First_Index);
-    pragma Inline (Set_First_Literal);
-    pragma Inline (Set_First_Private_Entity);
-    pragma Inline (Set_First_Rep_Item);
-    pragma Inline (Set_Float_Rep);
-    pragma Inline (Set_Freeze_Node);
-    pragma Inline (Set_From_Limited_With);
-    pragma Inline (Set_Full_View);
-    pragma Inline (Set_Generic_Homonym);
-    pragma Inline (Set_Generic_Renamings);
-    pragma Inline (Set_Handler_Records);
-    pragma Inline (Set_Has_Aliased_Components);
-    pragma Inline (Set_Has_Alignment_Clause);
-    pragma Inline (Set_Has_All_Calls_Remote);
-    pragma Inline (Set_Has_Atomic_Components);
-    pragma Inline (Set_Has_Biased_Representation);
-    pragma Inline (Set_Has_Completion);
-    pragma Inline (Set_Has_Completion_In_Body);
-    pragma Inline (Set_Has_Complex_Representation);
-    pragma Inline (Set_Has_Component_Size_Clause);
-    pragma Inline (Set_Has_Constrained_Partial_View);
-    pragma Inline (Set_Has_Contiguous_Rep);
-    pragma Inline (Set_Has_Controlled_Component);
-    pragma Inline (Set_Has_Controlling_Result);
-    pragma Inline (Set_Has_Convention_Pragma);
-    pragma Inline (Set_Has_Default_Aspect);
-    pragma Inline (Set_Has_Delayed_Aspects);
-    pragma Inline (Set_Has_Delayed_Freeze);
-    pragma Inline (Set_Has_Delayed_Rep_Aspects);
-    pragma Inline (Set_Has_Discriminants);
-    pragma Inline (Set_Has_Dispatch_Table);
-    pragma Inline (Set_Has_Dynamic_Predicate_Aspect);
-    pragma Inline (Set_Has_Enumeration_Rep_Clause);
-    pragma Inline (Set_Has_Exit);
-    pragma Inline (Set_Has_Expanded_Contract);
-    pragma Inline (Set_Has_Forward_Instantiation);
-    pragma Inline (Set_Has_Fully_Qualified_Name);
-    pragma Inline (Set_Has_Gigi_Rep_Item);
-    pragma Inline (Set_Has_Homonym);
-    pragma Inline (Set_Has_Implicit_Dereference);
-    pragma Inline (Set_Has_Independent_Components);
-    pragma Inline (Set_Has_Inheritable_Invariants);
-    pragma Inline (Set_Has_Inherited_DIC);
-    pragma Inline (Set_Has_Inherited_Invariants);
-    pragma Inline (Set_Has_Initial_Value);
-    pragma Inline (Set_Has_Loop_Entry_Attributes);
-    pragma Inline (Set_Has_Machine_Radix_Clause);
-    pragma Inline (Set_Has_Master_Entity);
-    pragma Inline (Set_Has_Missing_Return);
-    pragma Inline (Set_Has_Nested_Block_With_Handler);
-    pragma Inline (Set_Has_Nested_Subprogram);
-    pragma Inline (Set_Has_Non_Standard_Rep);
-    pragma Inline (Set_Has_Object_Size_Clause);
-    pragma Inline (Set_Has_Out_Or_In_Out_Parameter);
-    pragma Inline (Set_Has_Own_DIC);
-    pragma Inline (Set_Has_Own_Invariants);
-    pragma Inline (Set_Has_Partial_Visible_Refinement);
-    pragma Inline (Set_Has_Per_Object_Constraint);
-    pragma Inline (Set_Has_Pragma_Controlled);
-    pragma Inline (Set_Has_Pragma_Elaborate_Body);
-    pragma Inline (Set_Has_Pragma_Inline);
-    pragma Inline (Set_Has_Pragma_Inline_Always);
-    pragma Inline (Set_Has_Pragma_No_Inline);
-    pragma Inline (Set_Has_Pragma_Ordered);
-    pragma Inline (Set_Has_Pragma_Pack);
-    pragma Inline (Set_Has_Pragma_Preelab_Init);
-    pragma Inline (Set_Has_Pragma_Pure);
-    pragma Inline (Set_Has_Pragma_Pure_Function);
-    pragma Inline (Set_Has_Pragma_Thread_Local_Storage);
-    pragma Inline (Set_Has_Pragma_Unmodified);
-    pragma Inline (Set_Has_Pragma_Unreferenced);
-    pragma Inline (Set_Has_Pragma_Unreferenced_Objects);
-    pragma Inline (Set_Has_Predicates);
-    pragma Inline (Set_Has_Primitive_Operations);
-    pragma Inline (Set_Has_Private_Ancestor);
-    pragma Inline (Set_Has_Private_Declaration);
-    pragma Inline (Set_Has_Private_Extension);
-    pragma Inline (Set_Has_Protected);
-    pragma Inline (Set_Has_Qualified_Name);
-    pragma Inline (Set_Has_RACW);
-    pragma Inline (Set_Has_Record_Rep_Clause);
-    pragma Inline (Set_Has_Recursive_Call);
-    pragma Inline (Set_Has_Shift_Operator);
-    pragma Inline (Set_Has_Size_Clause);
-    pragma Inline (Set_Has_Small_Clause);
-    pragma Inline (Set_Has_Specified_Layout);
-    pragma Inline (Set_Has_Specified_Stream_Input);
-    pragma Inline (Set_Has_Specified_Stream_Output);
-    pragma Inline (Set_Has_Specified_Stream_Read);
-    pragma Inline (Set_Has_Specified_Stream_Write);
-    pragma Inline (Set_Has_Static_Discriminants);
-    pragma Inline (Set_Has_Static_Predicate);
-    pragma Inline (Set_Has_Static_Predicate_Aspect);
-    pragma Inline (Set_Has_Storage_Size_Clause);
-    pragma Inline (Set_Has_Stream_Size_Clause);
-    pragma Inline (Set_Has_Task);
-    pragma Inline (Set_Has_Timing_Event);
-    pragma Inline (Set_Has_Thunks);
-    pragma Inline (Set_Has_Unchecked_Union);
-    pragma Inline (Set_Has_Unknown_Discriminants);
-    pragma Inline (Set_Has_Visible_Refinement);
-    pragma Inline (Set_Has_Volatile_Components);
-    pragma Inline (Set_Has_Xref_Entry);
-    pragma Inline (Set_Has_Yield_Aspect);
-    pragma Inline (Set_Hiding_Loop_Variable);
-    pragma Inline (Set_Hidden_In_Formal_Instance);
-    pragma Inline (Set_Homonym);
-    pragma Inline (Set_Ignore_SPARK_Mode_Pragmas);
-    pragma Inline (Set_Import_Pragma);
-    pragma Inline (Set_Incomplete_Actuals);
-    pragma Inline (Set_In_Package_Body);
-    pragma Inline (Set_In_Private_Part);
-    pragma Inline (Set_In_Use);
-    pragma Inline (Set_Initialization_Statements);
-    pragma Inline (Set_Inner_Instances);
-    pragma Inline (Set_Interface_Alias);
-    pragma Inline (Set_Interface_Name);
-    pragma Inline (Set_Interfaces);
-    pragma Inline (Set_Is_Abstract_Subprogram);
-    pragma Inline (Set_Is_Abstract_Type);
-    pragma Inline (Set_Is_Access_Constant);
-    pragma Inline (Set_Is_Activation_Record);
-    pragma Inline (Set_Is_Actual_Subtype);
-    pragma Inline (Set_Is_Ada_2005_Only);
-    pragma Inline (Set_Is_Ada_2012_Only);
-    pragma Inline (Set_Is_Aliased);
-    pragma Inline (Set_Is_Asynchronous);
-    pragma Inline (Set_Is_Atomic);
-    pragma Inline (Set_Is_Bit_Packed_Array);
-    pragma Inline (Set_Is_Called);
-    pragma Inline (Set_Is_Character_Type);
-    pragma Inline (Set_Is_Checked_Ghost_Entity);
-    pragma Inline (Set_Is_Child_Unit);
-    pragma Inline (Set_Is_Class_Wide_Clone);
-    pragma Inline (Set_Is_Class_Wide_Equivalent_Type);
-    pragma Inline (Set_Is_Compilation_Unit);
-    pragma Inline (Set_Is_Completely_Hidden);
-    pragma Inline (Set_Is_Concurrent_Record_Type);
-    pragma Inline (Set_Is_Constr_Subt_For_U_Nominal);
-    pragma Inline (Set_Is_Constr_Subt_For_UN_Aliased);
-    pragma Inline (Set_Is_Constrained);
-    pragma Inline (Set_Is_Constructor);
-    pragma Inline (Set_Is_Controlled_Active);
-    pragma Inline (Set_Is_Controlling_Formal);
-    pragma Inline (Set_Is_CPP_Class);
-    pragma Inline (Set_Is_CUDA_Kernel);
-    pragma Inline (Set_Is_Descendant_Of_Address);
-    pragma Inline (Set_Is_DIC_Procedure);
-    pragma Inline (Set_Is_Discrim_SO_Function);
-    pragma Inline (Set_Is_Discriminant_Check_Function);
-    pragma Inline (Set_Is_Dispatch_Table_Entity);
-    pragma Inline (Set_Is_Dispatching_Operation);
-    pragma Inline (Set_Is_Elaboration_Checks_OK_Id);
-    pragma Inline (Set_Is_Elaboration_Warnings_OK_Id);
-    pragma Inline (Set_Is_Eliminated);
-    pragma Inline (Set_Is_Entry_Formal);
-    pragma Inline (Set_Is_Entry_Wrapper);
-    pragma Inline (Set_Is_Exception_Handler);
-    pragma Inline (Set_Is_Exported);
-    pragma Inline (Set_Is_Finalized_Transient);
-    pragma Inline (Set_Is_First_Subtype);
-    pragma Inline (Set_Is_Formal_Subprogram);
-    pragma Inline (Set_Is_Frozen);
-    pragma Inline (Set_Is_Generic_Actual_Subprogram);
-    pragma Inline (Set_Is_Generic_Actual_Type);
-    pragma Inline (Set_Is_Generic_Instance);
-    pragma Inline (Set_Is_Generic_Type);
-    pragma Inline (Set_Is_Hidden);
-    pragma Inline (Set_Is_Hidden_Non_Overridden_Subpgm);
-    pragma Inline (Set_Is_Hidden_Open_Scope);
-    pragma Inline (Set_Is_Ignored_Ghost_Entity);
-    pragma Inline (Set_Is_Ignored_Transient);
-    pragma Inline (Set_Is_Immediately_Visible);
-    pragma Inline (Set_Is_Implementation_Defined);
-    pragma Inline (Set_Is_Imported);
-    pragma Inline (Set_Is_Independent);
-    pragma Inline (Set_Is_Initial_Condition_Procedure);
-    pragma Inline (Set_Is_Inlined);
-    pragma Inline (Set_Is_Inlined_Always);
-    pragma Inline (Set_Is_Instantiated);
-    pragma Inline (Set_Is_Interface);
-    pragma Inline (Set_Is_Internal);
-    pragma Inline (Set_Is_Interrupt_Handler);
-    pragma Inline (Set_Is_Intrinsic_Subprogram);
-    pragma Inline (Set_Is_Invariant_Procedure);
-    pragma Inline (Set_Is_Itype);
-    pragma Inline (Set_Is_Known_Non_Null);
-    pragma Inline (Set_Is_Known_Null);
-    pragma Inline (Set_Is_Known_Valid);
-    pragma Inline (Set_Is_Limited_Composite);
-    pragma Inline (Set_Is_Limited_Interface);
-    pragma Inline (Set_Is_Limited_Record);
-    pragma Inline (Set_Is_Local_Anonymous_Access);
-    pragma Inline (Set_Is_Loop_Parameter);
-    pragma Inline (Set_Is_Machine_Code_Subprogram);
-    pragma Inline (Set_Is_Non_Static_Subtype);
-    pragma Inline (Set_Is_Null_Init_Proc);
-    pragma Inline (Set_Is_Obsolescent);
-    pragma Inline (Set_Is_Only_Out_Parameter);
-    pragma Inline (Set_Is_Package_Body_Entity);
-    pragma Inline (Set_Is_Packed);
-    pragma Inline (Set_Is_Packed_Array_Impl_Type);
-    pragma Inline (Set_Is_Param_Block_Component_Type);
-    pragma Inline (Set_Is_Partial_Invariant_Procedure);
-    pragma Inline (Set_Is_Potentially_Use_Visible);
-    pragma Inline (Set_Is_Predicate_Function);
-    pragma Inline (Set_Is_Predicate_Function_M);
-    pragma Inline (Set_Is_Preelaborated);
-    pragma Inline (Set_Is_Primitive);
-    pragma Inline (Set_Is_Primitive_Wrapper);
-    pragma Inline (Set_Is_Private_Composite);
-    pragma Inline (Set_Is_Private_Descendant);
-    pragma Inline (Set_Is_Private_Primitive);
-    pragma Inline (Set_Is_Public);
-    pragma Inline (Set_Is_Pure);
-    pragma Inline (Set_Is_Pure_Unit_Access_Type);
-    pragma Inline (Set_Is_RACW_Stub_Type);
-    pragma Inline (Set_Is_Raised);
-    pragma Inline (Set_Is_Remote_Call_Interface);
-    pragma Inline (Set_Is_Remote_Types);
-    pragma Inline (Set_Is_Renaming_Of_Object);
-    pragma Inline (Set_Is_Return_Object);
-    pragma Inline (Set_Is_Safe_To_Reevaluate);
-    pragma Inline (Set_Is_Shared_Passive);
-    pragma Inline (Set_Is_Static_Type);
-    pragma Inline (Set_Is_Statically_Allocated);
-    pragma Inline (Set_Is_Tag);
-    pragma Inline (Set_Is_Tagged_Type);
-    pragma Inline (Set_Is_Thunk);
-    pragma Inline (Set_Is_Trivial_Subprogram);
-    pragma Inline (Set_Is_True_Constant);
-    pragma Inline (Set_Is_Unchecked_Union);
-    pragma Inline (Set_Is_Underlying_Full_View);
-    pragma Inline (Set_Is_Underlying_Record_View);
-    pragma Inline (Set_Is_Unimplemented);
-    pragma Inline (Set_Is_Unsigned_Type);
-    pragma Inline (Set_Is_Uplevel_Referenced_Entity);
-    pragma Inline (Set_Is_Valued_Procedure);
-    pragma Inline (Set_Is_Visible_Formal);
-    pragma Inline (Set_Is_Visible_Lib_Unit);
-    pragma Inline (Set_Is_Volatile);
-    pragma Inline (Set_Is_Volatile_Full_Access);
-    pragma Inline (Set_Itype_Printed);
-    pragma Inline (Set_Kill_Elaboration_Checks);
-    pragma Inline (Set_Kill_Range_Checks);
-    pragma Inline (Set_Known_To_Have_Preelab_Init);
-    pragma Inline (Set_Last_Aggregate_Assignment);
-    pragma Inline (Set_Last_Assignment);
-    pragma Inline (Set_Last_Entity);
-    pragma Inline (Set_Limited_View);
-    pragma Inline (Set_Linker_Section_Pragma);
-    pragma Inline (Set_Lit_Indexes);
-    pragma Inline (Set_Lit_Strings);
-    pragma Inline (Set_Low_Bound_Tested);
-    pragma Inline (Set_Machine_Radix_10);
-    pragma Inline (Set_Master_Id);
-    pragma Inline (Set_Materialize_Entity);
-    pragma Inline (Set_May_Inherit_Delayed_Rep_Aspects);
-    pragma Inline (Set_Mechanism);
-    pragma Inline (Set_Minimum_Accessibility);
-    pragma Inline (Set_Modulus);
-    pragma Inline (Set_Must_Be_On_Byte_Boundary);
-    pragma Inline (Set_Must_Have_Preelab_Init);
-    pragma Inline (Set_Needs_Activation_Record);
-    pragma Inline (Set_Needs_Debug_Info);
-    pragma Inline (Set_Needs_No_Actuals);
-    pragma Inline (Set_Never_Set_In_Source);
-    pragma Inline (Set_Next_Inlined_Subprogram);
-    pragma Inline (Set_No_Dynamic_Predicate_On_Actual);
-    pragma Inline (Set_No_Pool_Assigned);
-    pragma Inline (Set_No_Predicate_On_Actual);
-    pragma Inline (Set_No_Reordering);
-    pragma Inline (Set_No_Return);
-    pragma Inline (Set_No_Strict_Aliasing);
-    pragma Inline (Set_No_Tagged_Streams_Pragma);
-    pragma Inline (Set_Non_Binary_Modulus);
-    pragma Inline (Set_Non_Limited_View);
-    pragma Inline (Set_Nonzero_Is_True);
-    pragma Inline (Set_Normalized_First_Bit);
-    pragma Inline (Set_Normalized_Position);
-    pragma Inline (Set_Normalized_Position_Max);
-    pragma Inline (Set_OK_To_Rename);
-    pragma Inline (Set_Optimize_Alignment_Space);
-    pragma Inline (Set_Optimize_Alignment_Time);
-    pragma Inline (Set_Original_Access_Type);
-    pragma Inline (Set_Original_Array_Type);
-    pragma Inline (Set_Original_Protected_Subprogram);
-    pragma Inline (Set_Original_Record_Component);
-    pragma Inline (Set_Overlays_Constant);
-    pragma Inline (Set_Overridden_Operation);
-    pragma Inline (Set_Package_Instantiation);
-    pragma Inline (Set_Packed_Array_Impl_Type);
-    pragma Inline (Set_Parent_Subtype);
-    pragma Inline (Set_Part_Of_Constituents);
-    pragma Inline (Set_Part_Of_References);
-    pragma Inline (Set_Partial_View_Has_Unknown_Discr);
-    pragma Inline (Set_Pending_Access_Types);
-    pragma Inline (Set_Postconditions_Proc);
-    pragma Inline (Set_Predicated_Parent);
-    pragma Inline (Set_Predicates_Ignored);
-    pragma Inline (Set_Prev_Entity);
-    pragma Inline (Set_Prival);
-    pragma Inline (Set_Prival_Link);
-    pragma Inline (Set_Private_Dependents);
-    pragma Inline (Set_Protected_Body_Subprogram);
-    pragma Inline (Set_Protected_Formal);
-    pragma Inline (Set_Protected_Subprogram);
-    pragma Inline (Set_Protection_Object);
-    pragma Inline (Set_Reachable);
-    pragma Inline (Set_Receiving_Entry);
-    pragma Inline (Set_Referenced);
-    pragma Inline (Set_Referenced_As_LHS);
-    pragma Inline (Set_Referenced_As_Out_Parameter);
-    pragma Inline (Set_Refinement_Constituents);
-    pragma Inline (Set_Register_Exception_Call);
-    pragma Inline (Set_Related_Array_Object);
-    pragma Inline (Set_Related_Expression);
-    pragma Inline (Set_Related_Instance);
-    pragma Inline (Set_Related_Type);
-    pragma Inline (Set_Relative_Deadline_Variable);
-    pragma Inline (Set_Renamed_Entity);
-    pragma Inline (Set_Renamed_In_Spec);
-    pragma Inline (Set_Renamed_Object);
-    pragma Inline (Set_Renaming_Map);
-    pragma Inline (Set_Requires_Overriding);
-    pragma Inline (Set_Return_Applies_To);
-    pragma Inline (Set_Return_Present);
-    pragma Inline (Set_Returns_By_Ref);
-    pragma Inline (Set_Reverse_Bit_Order);
-    pragma Inline (Set_Reverse_Storage_Order);
-    pragma Inline (Set_Rewritten_For_C);
-    pragma Inline (Set_RM_Size);
-    pragma Inline (Set_Scalar_Range);
-    pragma Inline (Set_Scale_Value);
-    pragma Inline (Set_Scope_Depth_Value);
-    pragma Inline (Set_Sec_Stack_Needed_For_Return);
-    pragma Inline (Set_Shared_Var_Procs_Instance);
-    pragma Inline (Set_Size_Check_Code);
-    pragma Inline (Set_Size_Depends_On_Discriminant);
-    pragma Inline (Set_Size_Known_At_Compile_Time);
-    pragma Inline (Set_Small_Value);
-    pragma Inline (Set_SPARK_Aux_Pragma);
-    pragma Inline (Set_SPARK_Aux_Pragma_Inherited);
-    pragma Inline (Set_SPARK_Pragma);
-    pragma Inline (Set_SPARK_Pragma_Inherited);
-    pragma Inline (Set_Spec_Entity);
-    pragma Inline (Set_SSO_Set_High_By_Default);
-    pragma Inline (Set_SSO_Set_Low_By_Default);
-    pragma Inline (Set_Static_Discrete_Predicate);
-    pragma Inline (Set_Static_Elaboration_Desired);
-    pragma Inline (Set_Static_Initialization);
-    pragma Inline (Set_Static_Real_Or_String_Predicate);
-    pragma Inline (Set_Status_Flag_Or_Transient_Decl);
-    pragma Inline (Set_Storage_Size_Variable);
-    pragma Inline (Set_Stored_Constraint);
-    pragma Inline (Set_Stores_Attribute_Old_Prefix);
-    pragma Inline (Set_Strict_Alignment);
-    pragma Inline (Set_String_Literal_Length);
-    pragma Inline (Set_String_Literal_Low_Bound);
-    pragma Inline (Set_Subprograms_For_Type);
-    pragma Inline (Set_Subps_Index);
-    pragma Inline (Set_Suppress_Elaboration_Warnings);
-    pragma Inline (Set_Suppress_Initialization);
-    pragma Inline (Set_Suppress_Style_Checks);
-    pragma Inline (Set_Suppress_Value_Tracking_On_Call);
-    pragma Inline (Set_Task_Body_Procedure);
-    pragma Inline (Set_Thunk_Entity);
-    pragma Inline (Set_Treat_As_Volatile);
-    pragma Inline (Set_Underlying_Full_View);
-    pragma Inline (Set_Underlying_Record_View);
-    pragma Inline (Set_Universal_Aliasing);
-    pragma Inline (Set_Unset_Reference);
-    pragma Inline (Set_Used_As_Generic_Actual);
-    pragma Inline (Set_Uses_Lock_Free);
-    pragma Inline (Set_Uses_Sec_Stack);
-    pragma Inline (Set_Validated_Object);
-    pragma Inline (Set_Warnings_Off);
-    pragma Inline (Set_Warnings_Off_Used);
-    pragma Inline (Set_Warnings_Off_Used_Unmodified);
-    pragma Inline (Set_Warnings_Off_Used_Unreferenced);
-    pragma Inline (Set_Was_Hidden);
-    pragma Inline (Set_Wrapped_Entity);
- 
-    pragma Inline (Init_Alignment);
-    pragma Inline (Init_Component_Bit_Offset);
-    pragma Inline (Init_Component_Size);
-    pragma Inline (Init_Digits_Value);
-    pragma Inline (Init_Esize);
-    pragma Inline (Init_Normalized_First_Bit);
-    pragma Inline (Init_Normalized_Position);
-    pragma Inline (Init_Normalized_Position_Max);
-    pragma Inline (Init_RM_Size);
- 
  end Einfo;
--- 6448,6451 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/elists.adb gcc-12.1.0/gcc/ada/elists.adb
*** gcc-11.3.0/gcc/ada/elists.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/elists.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/elists.ads gcc-12.1.0/gcc/ada/elists.ads
*** gcc-11.3.0/gcc/ada/elists.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/elists.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/elists.h gcc-12.1.0/gcc/ada/elists.h
*** gcc-11.3.0/gcc/ada/elists.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/elists.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 1992-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/env.c gcc-12.1.0/gcc/ada/env.c
*** gcc-11.3.0/gcc/ada/env.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/env.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *            Copyright (C) 2005-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *            Copyright (C) 2005-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/env.h gcc-12.1.0/gcc/ada/env.h
*** gcc-11.3.0/gcc/ada/env.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/env.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 2009-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 2009-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/err_vars.ads gcc-12.1.0/gcc/ada/err_vars.ads
*** gcc-11.3.0/gcc/ada/err_vars.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/err_vars.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Err_Vars is
*** 61,74 ****
     --  not get reset by any Error_Msg call, so the caller is responsible
     --  for resetting it.
  
-    Warn_On_Instance : Boolean := False;
-    --  Normally if a warning is generated in a generic template from the
-    --  analysis of the template, then the warning really belongs in the
-    --  template, and the default value of False for this Boolean achieves
-    --  that effect. If Warn_On_Instance is set True, then the warnings are
-    --  generated on the instantiation (referring to the template) rather
-    --  than on the template itself.
- 
     Raise_Exception_On_Error : Nat := 0;
     --  If this value is non-zero, then any attempt to generate an error
     --  message raises the exception Error_Msg_Exception, and the error
--- 61,66 ----
*************** package Err_Vars is
*** 89,95 ****
     --  Source_Reference line, then this is initialized to No_Source_File,
     --  to force an initial reference to the real source file name.
  
!    Warning_Doc_Switch : Boolean := False;
     --  If this is set True, then the ??/?x?/?x? sequences in error messages
     --  are active (see errout.ads for details). If this switch is False, then
     --  these sequences are ignored (i.e. simply equivalent to a single ?). The
--- 81,87 ----
     --  Source_Reference line, then this is initialized to No_Source_File,
     --  to force an initial reference to the real source file name.
  
!    Warning_Doc_Switch : Boolean := True;
     --  If this is set True, then the ??/?x?/?x? sequences in error messages
     --  are active (see errout.ads for details). If this switch is False, then
     --  these sequences are ignored (i.e. simply equivalent to a single ?). The
*************** package Err_Vars is
*** 105,116 ****
     --  of the following global variables to appropriate values before making a
     --  call to one of the error message routines with a string containing the
     --  insertion character to get the value inserted in an appropriate format.
  
     Error_Msg_Col : Column_Number;
     --  Column for @ insertion character in message
  
     Error_Msg_Uint_1 : Uint;
!    Error_Msg_Uint_2 : Uint;
     --  Uint values for ^ insertion characters in message
  
     --  WARNING: There is a matching C declaration of these variables in fe.h
--- 97,111 ----
     --  of the following global variables to appropriate values before making a
     --  call to one of the error message routines with a string containing the
     --  insertion character to get the value inserted in an appropriate format.
+    --
+    --  Some of these are initialized below, because they are read before being
+    --  set by clients.
  
     Error_Msg_Col : Column_Number;
     --  Column for @ insertion character in message
  
     Error_Msg_Uint_1 : Uint;
!    Error_Msg_Uint_2 : Uint := No_Uint;
     --  Uint values for ^ insertion characters in message
  
     --  WARNING: There is a matching C declaration of these variables in fe.h
*************** package Err_Vars is
*** 119,139 ****
     --  Source location for # insertion character in message
  
     Error_Msg_Name_1 : Name_Id;
!    Error_Msg_Name_2 : Name_Id;
!    Error_Msg_Name_3 : Name_Id;
     --  Name_Id values for % insertion characters in message
  
     Error_Msg_File_1 : File_Name_Type;
!    Error_Msg_File_2 : File_Name_Type;
!    Error_Msg_File_3 : File_Name_Type;
     --  File_Name_Type values for { insertion characters in message
  
     Error_Msg_Unit_1 : Unit_Name_Type;
!    Error_Msg_Unit_2 : Unit_Name_Type;
     --  Unit_Name_Type values for $ insertion characters in message
  
     Error_Msg_Node_1 : Node_Id;
!    Error_Msg_Node_2 : Node_Id;
     --  Node_Id values for & insertion characters in message
  
     Error_Msg_Warn : Boolean;
--- 114,134 ----
     --  Source location for # insertion character in message
  
     Error_Msg_Name_1 : Name_Id;
!    Error_Msg_Name_2 : Name_Id := No_Name;
!    Error_Msg_Name_3 : Name_Id := No_Name;
     --  Name_Id values for % insertion characters in message
  
     Error_Msg_File_1 : File_Name_Type;
!    Error_Msg_File_2 : File_Name_Type := No_File;
!    Error_Msg_File_3 : File_Name_Type := No_File;
     --  File_Name_Type values for { insertion characters in message
  
     Error_Msg_Unit_1 : Unit_Name_Type;
!    Error_Msg_Unit_2 : Unit_Name_Type := No_Unit_Name;
     --  Unit_Name_Type values for $ insertion characters in message
  
     Error_Msg_Node_1 : Node_Id;
!    Error_Msg_Node_2 : Node_Id := Empty;
     --  Node_Id values for & insertion characters in message
  
     Error_Msg_Warn : Boolean;
diff -Nrcpad gcc-11.3.0/gcc/ada/errno.c gcc-12.1.0/gcc/ada/errno.c
*** gcc-11.3.0/gcc/ada/errno.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/errno.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 1992-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/errout.adb gcc-12.1.0/gcc/ada/errout.adb
*** gcc-11.3.0/gcc/ada/errout.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/errout.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,53 ****
  --  environment, and that in particular, no disallowed table expansion is
  --  allowed to occur.
  
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Csets;    use Csets;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Erroutc;  use Erroutc;
! with Gnatvsn;  use Gnatvsn;
! with Lib;      use Lib;
! with Opt;      use Opt;
! with Nlists;   use Nlists;
! with Output;   use Output;
! with Scans;    use Scans;
! with Sem_Aux;  use Sem_Aux;
! with Sinput;   use Sinput;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stylesw;  use Stylesw;
! with Uname;    use Uname;
  
  package body Errout is
  
--- 29,57 ----
  --  environment, and that in particular, no disallowed table expansion is
  --  allowed to occur.
  
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Csets;          use Csets;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Erroutc;        use Erroutc;
! with Gnatvsn;        use Gnatvsn;
! with Lib;            use Lib;
! with Opt;            use Opt;
! with Nlists;         use Nlists;
! with Output;         use Output;
! with Scans;          use Scans;
! with Sem_Aux;        use Sem_Aux;
! with Sinput;         use Sinput;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stylesw;        use Stylesw;
! with Uname;          use Uname;
  
  package body Errout is
  
*************** package body Errout is
*** 98,116 ****
  
     procedure Error_Msg_Internal
       (Msg      : String;
!       Sptr     : Source_Ptr;
!       Optr     : Source_Ptr;
        Msg_Cont : Boolean;
        Node     : Node_Id);
!    --  This is the low level routine used to post messages after dealing with
     --  the issue of messages placed on instantiations (which get broken up
!    --  into separate calls in Error_Msg). Sptr is the location on which the
     --  flag will be placed in the output. In the case where the flag is on
     --  the template, this points directly to the template, not to one of the
!    --  instantiation copies of the template. Optr is the original location
     --  used to flag the error, and this may indeed point to an instantiation
!    --  copy. So typically we can see Optr pointing to the template location
!    --  in an instantiation copy when Sptr points to the source location of
     --  the actual instantiation (i.e the line with the new). Msg_Cont is
     --  set true if this is a continuation message. Node is the relevant
     --  Node_Id for this message, to be used to compute the enclosing entity if
--- 102,120 ----
  
     procedure Error_Msg_Internal
       (Msg      : String;
!       Span     : Source_Span;
!       Opan     : Source_Span;
        Msg_Cont : Boolean;
        Node     : Node_Id);
!    --  This is the low-level routine used to post messages after dealing with
     --  the issue of messages placed on instantiations (which get broken up
!    --  into separate calls in Error_Msg). Span is the location on which the
     --  flag will be placed in the output. In the case where the flag is on
     --  the template, this points directly to the template, not to one of the
!    --  instantiation copies of the template. Opan is the original location
     --  used to flag the error, and this may indeed point to an instantiation
!    --  copy. So typically we can see Opan pointing to the template location
!    --  in an instantiation copy when Span points to the source location of
     --  the actual instantiation (i.e the line with the new). Msg_Cont is
     --  set true if this is a continuation message. Node is the relevant
     --  Node_Id for this message, to be used to compute the enclosing entity if
*************** package body Errout is
*** 126,131 ****
--- 130,140 ----
     --  or if it refers to an Etype that has an error posted on it, or if
     --  it references an Entity that has an error posted on it.
  
+    procedure Output_JSON_Message (Error_Id : Error_Msg_Id);
+    --  Output error message Error_Id and any subsequent continuation message
+    --  using a JSON format similar to the one GCC uses when passed
+    --  -fdiagnostics-format=json.
+ 
     procedure Output_Source_Line
       (L     : Physical_Line_Number;
        Sfile : Source_File_Index;
*************** package body Errout is
*** 202,213 ****
     --  This is called for warning messages only (so Warning_Msg_Char is set)
     --  and returns a corresponding string to use at the beginning of generated
     --  auxiliary messages, such as "in instantiation at ...".
!    --    'a' .. 'z'   returns "?x?"
!    --    'A' .. 'Z'   returns "?X?"
!    --    '*'          returns "?*?"
!    --    '$'          returns "?$?info: "
!    --    ' '          returns " "
!    --  No other settings are valid
  
     -----------------------
     -- Change_Error_Text --
--- 211,219 ----
     --  This is called for warning messages only (so Warning_Msg_Char is set)
     --  and returns a corresponding string to use at the beginning of generated
     --  auxiliary messages, such as "in instantiation at ...".
!    --    "?"     returns "??"
!    --    " "     returns "?"
!    --    other   trimmed, prefixed and suffixed with "?".
  
     -----------------------
     -- Change_Error_Text --
*************** package body Errout is
*** 218,224 ****
        Err_Id    : Error_Msg_Id := Error_Id;
  
     begin
!       Set_Msg_Text (New_Msg, Errors.Table (Error_Id).Sptr);
        Errors.Table (Error_Id).Text := new String'(Msg_Buffer (1 .. Msglen));
  
        --  If in immediate error message mode, output modified error message now
--- 224,230 ----
        Err_Id    : Error_Msg_Id := Error_Id;
  
     begin
!       Set_Msg_Text (New_Msg, Errors.Table (Error_Id).Sptr.Ptr);
        Errors.Table (Error_Id).Text := new String'(Msg_Buffer (1 .. Msglen));
  
        --  If in immediate error message mode, output modified error message now
*************** package body Errout is
*** 300,313 ****
     ---------------
  
     --  Error_Msg posts a flag at the given location, except that if the
!    --  Flag_Location points within a generic template and corresponds to an
!    --  instantiation of this generic template, then the actual message will be
!    --  posted on the generic instantiation, along with additional messages
!    --  referencing the generic declaration.
  
     procedure Error_Msg (Msg : String; Flag_Location : Source_Ptr) is
     begin
!       Error_Msg (Msg, Flag_Location, Current_Node);
     end Error_Msg;
  
     procedure Error_Msg
--- 306,324 ----
     ---------------
  
     --  Error_Msg posts a flag at the given location, except that if the
!    --  Flag_Location/Flag_Span points within a generic template and corresponds
!    --  to an instantiation of this generic template, then the actual message
!    --  will be posted on the generic instantiation, along with additional
!    --  messages referencing the generic declaration.
  
     procedure Error_Msg (Msg : String; Flag_Location : Source_Ptr) is
     begin
!       Error_Msg (Msg, To_Span (Flag_Location), Current_Node);
!    end Error_Msg;
! 
!    procedure Error_Msg (Msg : String; Flag_Span : Source_Span) is
!    begin
!       Error_Msg (Msg, Flag_Span, Current_Node);
     end Error_Msg;
  
     procedure Error_Msg
*************** package body Errout is
*** 318,324 ****
        Save_Is_Compile_Time_Msg : constant Boolean := Is_Compile_Time_Msg;
     begin
        Is_Compile_Time_Msg := Is_Compile_Time_Pragma;
!       Error_Msg (Msg, Flag_Location, Current_Node);
        Is_Compile_Time_Msg := Save_Is_Compile_Time_Msg;
     end Error_Msg;
  
--- 329,335 ----
        Save_Is_Compile_Time_Msg : constant Boolean := Is_Compile_Time_Msg;
     begin
        Is_Compile_Time_Msg := Is_Compile_Time_Pragma;
!       Error_Msg (Msg, To_Span (Flag_Location), Current_Node);
        Is_Compile_Time_Msg := Save_Is_Compile_Time_Msg;
     end Error_Msg;
  
*************** package body Errout is
*** 327,332 ****
--- 338,354 ----
        Flag_Location : Source_Ptr;
        N             : Node_Id)
     is
+    begin
+       Error_Msg (Msg, To_Span (Flag_Location), N);
+    end Error_Msg;
+ 
+    procedure Error_Msg
+      (Msg       : String;
+       Flag_Span : Source_Span;
+       N         : Node_Id)
+    is
+       Flag_Location : constant Source_Ptr := Flag_Span.Ptr;
+ 
        Sindex : Source_File_Index;
        --  Source index for flag location
  
*************** package body Errout is
*** 418,423 ****
--- 440,467 ----
          and then Warnings_Detected >= Maximum_Messages
        then
           return;
+ 
+       --  Suppress warnings inside a loop that is known to be null or is
+       --  probably null (i.e. when loop executes only if invalid values
+       --  present). In either case warnings in the loop are likely to be junk.
+ 
+       elsif Is_Warning_Msg and then Present (N) then
+ 
+          declare
+             P : Node_Id;
+ 
+          begin
+             P := Parent (N);
+             while Present (P) loop
+                if Nkind (P) = N_Loop_Statement
+                  and then Suppress_Loop_Warnings (P)
+                then
+                   return;
+                end if;
+ 
+                P := Parent (P);
+             end loop;
+          end;
        end if;
  
        --  The idea at this stage is that we have two kinds of messages
*************** package body Errout is
*** 429,435 ****
        --  Error_Msg_Internal to place the message in the requested location.
  
        if Instantiation (Sindex) = No_Location then
!          Error_Msg_Internal (Msg, Flag_Location, Flag_Location, False, N);
           return;
        end if;
  
--- 473,479 ----
        --  Error_Msg_Internal to place the message in the requested location.
  
        if Instantiation (Sindex) = No_Location then
!          Error_Msg_Internal (Msg, Flag_Span, Flag_Span, False, N);
           return;
        end if;
  
*************** package body Errout is
*** 525,556 ****
                    if Is_Info_Msg then
                       Error_Msg_Internal
                         (Msg      => "info: in inlined body #",
!                         Sptr     => Actual_Error_Loc,
!                         Optr     => Flag_Location,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
  
                    elsif Is_Warning_Msg then
                       Error_Msg_Internal
                         (Msg      => Warn_Insertion & "in inlined body #",
!                         Sptr     => Actual_Error_Loc,
!                         Optr     => Flag_Location,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
  
                    elsif Is_Style_Msg then
                       Error_Msg_Internal
                         (Msg      => "style: in inlined body #",
!                         Sptr     => Actual_Error_Loc,
!                         Optr     => Flag_Location,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
  
                    else
                       Error_Msg_Internal
                         (Msg      => "error in inlined body #",
!                         Sptr     => Actual_Error_Loc,
!                         Optr     => Flag_Location,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
                    end if;
--- 569,600 ----
                    if Is_Info_Msg then
                       Error_Msg_Internal
                         (Msg      => "info: in inlined body #",
!                         Span     => To_Span (Actual_Error_Loc),
!                         Opan     => Flag_Span,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
  
                    elsif Is_Warning_Msg then
                       Error_Msg_Internal
                         (Msg      => Warn_Insertion & "in inlined body #",
!                         Span     => To_Span (Actual_Error_Loc),
!                         Opan     => Flag_Span,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
  
                    elsif Is_Style_Msg then
                       Error_Msg_Internal
                         (Msg      => "style: in inlined body #",
!                         Span     => To_Span (Actual_Error_Loc),
!                         Opan     => Flag_Span,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
  
                    else
                       Error_Msg_Internal
                         (Msg      => "error in inlined body #",
!                         Span     => To_Span (Actual_Error_Loc),
!                         Opan     => Flag_Span,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
                    end if;
*************** package body Errout is
*** 561,592 ****
                    if Is_Info_Msg then
                       Error_Msg_Internal
                         (Msg      => "info: in instantiation #",
!                         Sptr     => Actual_Error_Loc,
!                         Optr     => Flag_Location,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
  
                    elsif Is_Warning_Msg then
                       Error_Msg_Internal
                         (Msg      => Warn_Insertion & "in instantiation #",
!                         Sptr     => Actual_Error_Loc,
!                         Optr     => Flag_Location,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
  
                    elsif Is_Style_Msg then
                       Error_Msg_Internal
                         (Msg      => "style: in instantiation #",
!                         Sptr     => Actual_Error_Loc,
!                         Optr     => Flag_Location,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
  
                    else
                       Error_Msg_Internal
                         (Msg      => "instantiation error #",
!                         Sptr     => Actual_Error_Loc,
!                         Optr     => Flag_Location,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
                    end if;
--- 605,636 ----
                    if Is_Info_Msg then
                       Error_Msg_Internal
                         (Msg      => "info: in instantiation #",
!                         Span     => To_Span (Actual_Error_Loc),
!                         Opan     => Flag_Span,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
  
                    elsif Is_Warning_Msg then
                       Error_Msg_Internal
                         (Msg      => Warn_Insertion & "in instantiation #",
!                         Span     => To_Span (Actual_Error_Loc),
!                         Opan     => Flag_Span,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
  
                    elsif Is_Style_Msg then
                       Error_Msg_Internal
                         (Msg      => "style: in instantiation #",
!                         Span     => To_Span (Actual_Error_Loc),
!                         Opan     => Flag_Span,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
  
                    else
                       Error_Msg_Internal
                         (Msg      => "instantiation error #",
!                         Span     => To_Span (Actual_Error_Loc),
!                         Opan     => Flag_Span,
                          Msg_Cont => Msg_Cont_Status,
                          Node     => N);
                    end if;
*************** package body Errout is
*** 605,612 ****
  
           Error_Msg_Internal
             (Msg      => Msg,
!             Sptr     => Actual_Error_Loc,
!             Optr     => Flag_Location,
              Msg_Cont => Msg_Cont_Status,
              Node     => N);
        end;
--- 649,656 ----
  
           Error_Msg_Internal
             (Msg      => Msg,
!             Span     => To_Span (Actual_Error_Loc),
!             Opan     => Flag_Span,
              Msg_Cont => Msg_Cont_Status,
              Node     => N);
        end;
*************** package body Errout is
*** 650,671 ****
     end Error_Msg_Ada_2012_Feature;
  
     --------------------------------
!    -- Error_Msg_Ada_2020_Feature --
     --------------------------------
  
!    procedure Error_Msg_Ada_2020_Feature (Feature : String; Loc : Source_Ptr) is
     begin
!       if Ada_Version < Ada_2020 then
!          Error_Msg (Feature & " is an Ada 2020 feature", Loc);
  
           if No (Ada_Version_Pragma) then
!             Error_Msg ("\unit must be compiled with -gnat2020 switch", Loc);
           else
              Error_Msg_Sloc := Sloc (Ada_Version_Pragma);
              Error_Msg ("\incompatible with Ada version set#", Loc);
           end if;
        end if;
!    end Error_Msg_Ada_2020_Feature;
  
     ------------------
     -- Error_Msg_AP --
--- 694,715 ----
     end Error_Msg_Ada_2012_Feature;
  
     --------------------------------
!    -- Error_Msg_Ada_2022_Feature --
     --------------------------------
  
!    procedure Error_Msg_Ada_2022_Feature (Feature : String; Loc : Source_Ptr) is
     begin
!       if Ada_Version < Ada_2022 then
!          Error_Msg (Feature & " is an Ada 2022 feature", Loc);
  
           if No (Ada_Version_Pragma) then
!             Error_Msg ("\unit must be compiled with -gnat2022 switch", Loc);
           else
              Error_Msg_Sloc := Sloc (Ada_Version_Pragma);
              Error_Msg ("\incompatible with Ada version set#", Loc);
           end if;
        end if;
!    end Error_Msg_Ada_2022_Feature;
  
     ------------------
     -- Error_Msg_AP --
*************** package body Errout is
*** 783,809 ****
     -------------------
  
     procedure Error_Msg_CRT (Feature : String; N : Node_Id) is
-       CNRT : constant String := " not allowed in no run time mode";
-       CCRT : constant String := " not supported by configuration>";
- 
-       S : String (1 .. Feature'Length + 1 + CCRT'Length);
-       L : Natural;
- 
     begin
-       S (1) := '|';
-       S (2 .. Feature'Length + 1) := Feature;
-       L := Feature'Length + 2;
- 
        if No_Run_Time_Mode then
!          S (L .. L + CNRT'Length - 1) := CNRT;
!          L := L + CNRT'Length - 1;
  
        else pragma Assert (Configurable_Run_Time_Mode);
!          S (L .. L + CCRT'Length - 1) := CCRT;
!          L := L + CCRT'Length - 1;
        end if;
  
-       Error_Msg_N (S (1 .. L), N);
        Configurable_Run_Time_Violations := Configurable_Run_Time_Violations + 1;
     end Error_Msg_CRT;
  
--- 827,840 ----
     -------------------
  
     procedure Error_Msg_CRT (Feature : String; N : Node_Id) is
     begin
        if No_Run_Time_Mode then
!          Error_Msg_N ('|' & Feature & " not allowed in no run time mode", N);
  
        else pragma Assert (Configurable_Run_Time_Mode);
!          Error_Msg_N ('|' & Feature & " not supported by configuration>", N);
        end if;
  
        Configurable_Run_Time_Violations := Configurable_Run_Time_Violations + 1;
     end Error_Msg_CRT;
  
*************** package body Errout is
*** 834,841 ****
     -----------------
  
     procedure Error_Msg_F (Msg : String; N : Node_Id) is
     begin
!       Error_Msg_NEL (Msg, N, N, Sloc (First_Node (N)));
     end Error_Msg_F;
  
     ------------------
--- 865,877 ----
     -----------------
  
     procedure Error_Msg_F (Msg : String; N : Node_Id) is
+       Fst, Lst : Node_Id;
     begin
!       First_And_Last_Nodes (N, Fst, Lst);
!       Error_Msg_NEL (Msg, N, N,
!                      To_Span (Ptr   => Sloc (Fst),
!                               First => First_Sloc (Fst),
!                               Last  => Last_Sloc (Lst)));
     end Error_Msg_F;
  
     ------------------
*************** package body Errout is
*** 847,867 ****
        N   : Node_Id;
        E   : Node_Or_Entity_Id)
     is
     begin
!       Error_Msg_NEL (Msg, N, E, Sloc (First_Node (N)));
     end Error_Msg_FE;
  
     ------------------------
     -- Error_Msg_Internal --
     ------------------------
  
     procedure Error_Msg_Internal
       (Msg      : String;
!       Sptr     : Source_Ptr;
!       Optr     : Source_Ptr;
        Msg_Cont : Boolean;
        Node     : Node_Id)
     is
        Next_Msg : Error_Msg_Id;
        --  Pointer to next message at insertion point
  
--- 883,924 ----
        N   : Node_Id;
        E   : Node_Or_Entity_Id)
     is
+       Fst, Lst : Node_Id;
     begin
!       First_And_Last_Nodes (N, Fst, Lst);
!       Error_Msg_NEL (Msg, N, E,
!                      To_Span (Ptr   => Sloc (Fst),
!                               First => First_Sloc (Fst),
!                               Last  => Last_Sloc (Lst)));
     end Error_Msg_FE;
  
+    ------------------------------
+    -- Error_Msg_GNAT_Extension --
+    ------------------------------
+ 
+    procedure Error_Msg_GNAT_Extension (Extension : String) is
+       Loc : constant Source_Ptr := Token_Ptr;
+    begin
+       if not Extensions_Allowed then
+          Error_Msg (Extension & " is a 'G'N'A'T specific extension", Loc);
+          Error_Msg ("\unit must be compiled with -gnatX switch", Loc);
+       end if;
+    end Error_Msg_GNAT_Extension;
+ 
     ------------------------
     -- Error_Msg_Internal --
     ------------------------
  
     procedure Error_Msg_Internal
       (Msg      : String;
!       Span     : Source_Span;
!       Opan     : Source_Span;
        Msg_Cont : Boolean;
        Node     : Node_Id)
     is
+       Sptr     : constant Source_Ptr := Span.Ptr;
+       Optr     : constant Source_Ptr := Opan.Ptr;
+ 
        Next_Msg : Error_Msg_Id;
        --  Pointer to next message at insertion point
  
*************** package body Errout is
*** 923,928 ****
--- 980,990 ----
     --  Start of processing for Error_Msg_Internal
  
     begin
+       --  Detect common mistake of prefixing or suffing the message with a
+       --  space character.
+ 
+       pragma Assert (Msg (Msg'First) /= ' ' and then Msg (Msg'Last) /= ' ');
+ 
        if Raise_Exception_On_Error /= 0 then
           raise Error_Msg_Exception;
        end if;
*************** package body Errout is
*** 989,1002 ****
           if In_Extended_Main_Source_Unit (Sptr) then
              null;
  
!          --  If the main unit has not been read yet. the warning must be on
           --  a configuration file: gnat.adc or user-defined. This means we
           --  are not parsing the main unit yet, so skip following checks.
  
           elsif No (Cunit (Main_Unit)) then
              null;
  
!          --  If the flag location is not in the main extended source unit, then
           --  we want to eliminate the warning, unless it is in the extended
           --  main code unit and we want warnings on the instance.
  
--- 1051,1064 ----
           if In_Extended_Main_Source_Unit (Sptr) then
              null;
  
!          --  If the main unit has not been read yet. The warning must be on
           --  a configuration file: gnat.adc or user-defined. This means we
           --  are not parsing the main unit yet, so skip following checks.
  
           elsif No (Cunit (Main_Unit)) then
              null;
  
!          --  If the flag location is not in the extended main source unit, then
           --  we want to eliminate the warning, unless it is in the extended
           --  main code unit and we want warnings on the instance.
  
*************** package body Errout is
*** 1121,1127 ****
                    Errors.Table (Cur_Msg).Warn := True;
                    Errors.Table (Cur_Msg).Warn_Chr := Warning_Msg_Char;
  
!                elsif Warning_Msg_Char /= ' ' then
                    Errors.Table (Cur_Msg).Warn_Chr := Warning_Msg_Char;
                 end if;
              end if;
--- 1183,1189 ----
                    Errors.Table (Cur_Msg).Warn := True;
                    Errors.Table (Cur_Msg).Warn_Chr := Warning_Msg_Char;
  
!                elsif Warning_Msg_Char /= "  " then
                    Errors.Table (Cur_Msg).Warn_Chr := Warning_Msg_Char;
                 end if;
              end if;
*************** package body Errout is
*** 1136,1142 ****
          ((Text                => new String'(Msg_Buffer (1 .. Msglen)),
            Next                => No_Error_Msg,
            Prev                => No_Error_Msg,
!           Sptr                => Sptr,
            Optr                => Optr,
            Insertion_Sloc      => (if Has_Insertion_Line then Error_Msg_Sloc
                                    else No_Location),
--- 1198,1204 ----
          ((Text                => new String'(Msg_Buffer (1 .. Msglen)),
            Next                => No_Error_Msg,
            Prev                => No_Error_Msg,
!           Sptr                => Span,
            Optr                => Optr,
            Insertion_Sloc      => (if Has_Insertion_Line then Error_Msg_Sloc
                                    else No_Location),
*************** package body Errout is
*** 1149,1154 ****
--- 1211,1217 ----
            Check               => Is_Check_Msg,
            Warn_Err            => False, -- reset below
            Warn_Chr            => Warning_Msg_Char,
+           Warn_Runtime_Raise  => Is_Runtime_Raise,
            Style               => Is_Style_Msg,
            Serious             => Is_Serious_Error,
            Uncond              => Is_Unconditional_Msg,
*************** package body Errout is
*** 1165,1174 ****
                        or else
                      Warning_Treated_As_Error (Get_Warning_Tag (Cur_Msg)));
  
!       --  Propagate Warn_Err to this message and preceding continuations
  
        for J in reverse 1 .. Errors.Last loop
!          Errors.Table (J).Warn_Err := Warn_Err;
           exit when not Errors.Table (J).Msg_Cont;
        end loop;
  
--- 1228,1242 ----
                        or else
                      Warning_Treated_As_Error (Get_Warning_Tag (Cur_Msg)));
  
!       --  Propagate Warn_Err to this message and preceding continuations.
!       --  Likewise, propagate Is_Warning_Msg and Is_Runtime_Raise, because the
!       --  current continued message could have been escalated from warning to
!       --  error.
  
        for J in reverse 1 .. Errors.Last loop
!          Errors.Table (J).Warn_Err           := Warn_Err;
!          Errors.Table (J).Warn               := Is_Warning_Msg;
!          Errors.Table (J).Warn_Runtime_Raise := Is_Runtime_Raise;
           exit when not Errors.Table (J).Msg_Cont;
        end loop;
  
*************** package body Errout is
*** 1196,1204 ****
           if Last_Error_Msg /= No_Error_Msg
             and then Errors.Table (Cur_Msg).Sfile =
                      Errors.Table (Last_Error_Msg).Sfile
!            and then (Sptr > Errors.Table (Last_Error_Msg).Sptr
                         or else
!                           (Sptr = Errors.Table (Last_Error_Msg).Sptr
                               and then
                                 Optr > Errors.Table (Last_Error_Msg).Optr))
           then
--- 1264,1272 ----
           if Last_Error_Msg /= No_Error_Msg
             and then Errors.Table (Cur_Msg).Sfile =
                      Errors.Table (Last_Error_Msg).Sfile
!            and then (Sptr > Errors.Table (Last_Error_Msg).Sptr.Ptr
                         or else
!                           (Sptr = Errors.Table (Last_Error_Msg).Sptr.Ptr
                               and then
                                 Optr > Errors.Table (Last_Error_Msg).Optr))
           then
*************** package body Errout is
*** 1216,1223 ****
  
                 if Errors.Table (Cur_Msg).Sfile = Errors.Table (Next_Msg).Sfile
                 then
!                   exit when Sptr < Errors.Table (Next_Msg).Sptr
!                     or else (Sptr = Errors.Table (Next_Msg).Sptr
                                and then Optr < Errors.Table (Next_Msg).Optr);
                 end if;
  
--- 1284,1291 ----
  
                 if Errors.Table (Cur_Msg).Sfile = Errors.Table (Next_Msg).Sfile
                 then
!                   exit when Sptr < Errors.Table (Next_Msg).Sptr.Ptr
!                     or else (Sptr = Errors.Table (Next_Msg).Sptr.Ptr
                                and then Optr < Errors.Table (Next_Msg).Optr);
                 end if;
  
*************** package body Errout is
*** 1364,1371 ****
     -----------------
  
     procedure Error_Msg_N (Msg : String; N : Node_Or_Entity_Id) is
     begin
!       Error_Msg_NEL (Msg, N, N, Sloc (N));
     end Error_Msg_N;
  
     ------------------
--- 1432,1444 ----
     -----------------
  
     procedure Error_Msg_N (Msg : String; N : Node_Or_Entity_Id) is
+       Fst, Lst : Node_Id;
     begin
!       First_And_Last_Nodes (N, Fst, Lst);
!       Error_Msg_NEL (Msg, N, N,
!                      To_Span (Ptr   => Sloc (N),
!                               First => First_Sloc (Fst),
!                               Last  => Last_Sloc (Lst)));
     end Error_Msg_N;
  
     ------------------
*************** package body Errout is
*** 1377,1384 ****
        N   : Node_Or_Entity_Id;
        E   : Node_Or_Entity_Id)
     is
     begin
!       Error_Msg_NEL (Msg, N, E, Sloc (N));
     end Error_Msg_NE;
  
     -------------------
--- 1450,1462 ----
        N   : Node_Or_Entity_Id;
        E   : Node_Or_Entity_Id)
     is
+       Fst, Lst : Node_Id;
     begin
!       First_And_Last_Nodes (N, Fst, Lst);
!       Error_Msg_NEL (Msg, N, E,
!                      To_Span (Ptr   => Sloc (N),
!                               First => First_Sloc (Fst),
!                               Last  => Last_Sloc (Lst)));
     end Error_Msg_NE;
  
     -------------------
*************** package body Errout is
*** 1391,1396 ****
--- 1469,1490 ----
        E             : Node_Or_Entity_Id;
        Flag_Location : Source_Ptr)
     is
+       Fst, Lst : Node_Id;
+    begin
+       First_And_Last_Nodes (N, Fst, Lst);
+       Error_Msg_NEL
+         (Msg, N, E,
+          To_Span (Ptr   => Flag_Location,
+                   First => Source_Ptr'Min (Flag_Location, First_Sloc (Fst)),
+                   Last  => Source_Ptr'Max (Flag_Location, Last_Sloc (Lst))));
+    end Error_Msg_NEL;
+ 
+    procedure Error_Msg_NEL
+      (Msg       : String;
+       N         : Node_Or_Entity_Id;
+       E         : Node_Or_Entity_Id;
+       Flag_Span : Source_Span)
+    is
     begin
        if Special_Msg_Delete (Msg, N, E) then
           return;
*************** package body Errout is
*** 1411,1436 ****
              Last_Killed := True;
              return;
           end if;
- 
-          --  Suppress if inside loop that is known to be null or is probably
-          --  null (case where loop executes only if invalid values present).
-          --  In either case warnings in the loop are likely to be junk.
- 
-          declare
-             P : Node_Id;
- 
-          begin
-             P := Parent (N);
-             while Present (P) loop
-                if Nkind (P) = N_Loop_Statement
-                  and then Suppress_Loop_Warnings (P)
-                then
-                   return;
-                end if;
- 
-                P := Parent (P);
-             end loop;
-          end;
        end if;
  
        --  Test for message to be output
--- 1505,1510 ----
*************** package body Errout is
*** 1443,1449 ****
        then
           Debug_Output (N);
           Error_Msg_Node_1 := E;
!          Error_Msg (Msg, Flag_Location, N);
  
        else
           Last_Killed := True;
--- 1517,1523 ----
        then
           Debug_Output (N);
           Error_Msg_Node_1 := E;
!          Error_Msg (Msg, Flag_Span, N);
  
        else
           Last_Killed := True;
*************** package body Errout is
*** 1463,1474 ****
        Msg   : String;
        N     : Node_Or_Entity_Id)
     is
     begin
        if Eflag
          and then In_Extended_Main_Source_Unit (N)
          and then Comes_From_Source (N)
        then
!          Error_Msg_NEL (Msg, N, N, Sloc (N));
        end if;
     end Error_Msg_NW;
  
--- 1537,1553 ----
        Msg   : String;
        N     : Node_Or_Entity_Id)
     is
+       Fst, Lst : Node_Id;
     begin
        if Eflag
          and then In_Extended_Main_Source_Unit (N)
          and then Comes_From_Source (N)
        then
!          First_And_Last_Nodes (N, Fst, Lst);
!          Error_Msg_NEL (Msg, N, N,
!                         To_Span (Ptr   => Sloc (N),
!                                  First => First_Sloc (Fst),
!                                  Last  => Last_Sloc (Lst)));
        end if;
     end Error_Msg_NW;
  
*************** package body Errout is
*** 1563,1569 ****
  
           F := Nxt;
           while F /= No_Error_Msg
!            and then Errors.Table (F).Sptr = Errors.Table (Cur).Sptr
           loop
              Check_Duplicate_Message (Cur, F);
              F := Errors.Table (F).Next;
--- 1642,1648 ----
  
           F := Nxt;
           while F /= No_Error_Msg
!            and then Errors.Table (F).Sptr.Ptr = Errors.Table (Cur).Sptr.Ptr
           loop
              Check_Duplicate_Message (Cur, F);
              F := Errors.Table (F).Next;
*************** package body Errout is
*** 1583,1590 ****
           begin
              if (CE.Warn and not CE.Deleted)
                and then
!                    (Warning_Specifically_Suppressed (CE.Sptr, CE.Text, Tag) /=
!                                                                    No_String
                        or else
                      Warning_Specifically_Suppressed (CE.Optr, CE.Text, Tag) /=
                                                                     No_String)
--- 1662,1669 ----
           begin
              if (CE.Warn and not CE.Deleted)
                and then
!                    (Warning_Specifically_Suppressed (CE.Sptr.Ptr, CE.Text, Tag)
!                                                                 /= No_String
                        or else
                      Warning_Specifically_Suppressed (CE.Optr, CE.Text, Tag) /=
                                                                     No_String)
*************** package body Errout is
*** 1630,1652 ****
     ----------------
  
     function First_Node (C : Node_Id) return Node_Id is
        Orig     : constant Node_Id           := Original_Node (C);
        Loc      : constant Source_Ptr        := Sloc (Orig);
        Sfile    : constant Source_File_Index := Get_Source_File_Index (Loc);
        Earliest : Node_Id;
        Eloc     : Source_Ptr;
  
!       function Test_Earlier (N : Node_Id) return Traverse_Result;
        --  Function applied to every node in the construct
  
!       procedure Search_Tree_First is new Traverse_Proc (Test_Earlier);
        --  Create traversal procedure
  
!       ------------------
!       -- Test_Earlier --
!       ------------------
  
!       function Test_Earlier (N : Node_Id) return Traverse_Result is
           Norig : constant Node_Id    := Original_Node (N);
           Loc   : constant Source_Ptr := Sloc (Norig);
  
--- 1709,1748 ----
     ----------------
  
     function First_Node (C : Node_Id) return Node_Id is
+       Fst, Lst : Node_Id;
+    begin
+       First_And_Last_Nodes (C, Fst, Lst);
+       return Fst;
+    end First_Node;
+ 
+    --------------------------
+    -- First_And_Last_Nodes --
+    --------------------------
+ 
+    procedure First_And_Last_Nodes
+      (C                     : Node_Id;
+       First_Node, Last_Node : out Node_Id)
+    is
        Orig     : constant Node_Id           := Original_Node (C);
        Loc      : constant Source_Ptr        := Sloc (Orig);
        Sfile    : constant Source_File_Index := Get_Source_File_Index (Loc);
        Earliest : Node_Id;
+       Latest   : Node_Id;
        Eloc     : Source_Ptr;
+       Lloc     : Source_Ptr;
  
!       function Test_First_And_Last (N : Node_Id) return Traverse_Result;
        --  Function applied to every node in the construct
  
!       procedure Search_Tree_First_And_Last is new
!         Traverse_Proc (Test_First_And_Last);
        --  Create traversal procedure
  
!       -------------------------
!       -- Test_First_And_Last --
!       -------------------------
  
!       function Test_First_And_Last (N : Node_Id) return Traverse_Result is
           Norig : constant Node_Id    := Original_Node (N);
           Loc   : constant Source_Ptr := Sloc (Norig);
  
*************** package body Errout is
*** 1670,1691 ****
              Eloc     := Loc;
           end if;
  
           return OK_Orig;
!       end Test_Earlier;
  
!    --  Start of processing for First_Node
  
     begin
!       if Nkind (Orig) in N_Subexpr then
           Earliest := Orig;
           Eloc := Loc;
!          Search_Tree_First (Orig);
!          return Earliest;
  
        else
!          return Orig;
        end if;
!    end First_Node;
  
     ----------------
     -- First_Sloc --
--- 1766,1828 ----
              Eloc     := Loc;
           end if;
  
+          --  Check for later
+ 
+          if Loc > Lloc
+ 
+            --  Ignore nodes with no useful location information
+ 
+            and then Loc /= Standard_Location
+            and then Loc /= No_Location
+ 
+            --  Ignore nodes from a different file. This ensures against cases
+            --  of strange foreign code somehow being present. We don't want
+            --  wild placement of messages if that happens.
+ 
+            and then Get_Source_File_Index (Loc) = Sfile
+          then
+             Latest := Norig;
+             Lloc   := Loc;
+          end if;
+ 
           return OK_Orig;
!       end Test_First_And_Last;
  
!    --  Start of processing for First_And_Last_Nodes
  
     begin
!       if Nkind (Orig) in N_Subexpr
!                        | N_Declaration
!                        | N_Access_To_Subprogram_Definition
!                        | N_Generic_Instantiation
!                        | N_Later_Decl_Item
!                        | N_Use_Package_Clause
!                        | N_Array_Type_Definition
!                        | N_Renaming_Declaration
!                        | N_Generic_Renaming_Declaration
!                        | N_Assignment_Statement
!                        | N_Raise_Statement
!                        | N_Simple_Return_Statement
!                        | N_Exit_Statement
!                        | N_Pragma
!                        | N_Use_Type_Clause
!                        | N_With_Clause
!                        | N_Attribute_Definition_Clause
!                        | N_Subtype_Indication
!       then
           Earliest := Orig;
           Eloc := Loc;
!          Latest := Orig;
!          Lloc := Loc;
!          Search_Tree_First_And_Last (Orig);
!          First_Node := Earliest;
!          Last_Node := Latest;
  
        else
!          First_Node := Orig;
!          Last_Node := Orig;
        end if;
!    end First_And_Last_Nodes;
  
     ----------------
     -- First_Sloc --
*************** package body Errout is
*** 1694,1699 ****
--- 1831,1837 ----
     function First_Sloc (N : Node_Id) return Source_Ptr is
        SI : constant Source_File_Index := Source_Index (Get_Source_Unit (N));
        SF : constant Source_Ptr        := Source_First (SI);
+       SL : constant Source_Ptr        := Source_Last (SI);
        F  : Node_Id;
        S  : Source_Ptr;
  
*************** package body Errout is
*** 1701,1706 ****
--- 1839,1848 ----
        F := First_Node (N);
        S := Sloc (F);
  
+       if S not in SF .. SL then
+          return S;
+       end if;
+ 
        --  The following circuit is a bit subtle. When we have parenthesized
        --  expressions, then the Sloc will not record the location of the paren,
        --  but we would like to post the flag on the paren. So what we do is to
*************** package body Errout is
*** 1786,1791 ****
--- 1928,2015 ----
        --  True if S starts with Size_For
     end Is_Size_Too_Small_Message;
  
+    ---------------
+    -- Last_Node --
+    ---------------
+ 
+    function Last_Node (C : Node_Id) return Node_Id is
+       Fst, Lst : Node_Id;
+    begin
+       First_And_Last_Nodes (C, Fst, Lst);
+       return Lst;
+    end Last_Node;
+ 
+    ---------------
+    -- Last_Sloc --
+    ---------------
+ 
+    function Last_Sloc (N : Node_Id) return Source_Ptr is
+       SI : constant Source_File_Index := Source_Index (Get_Source_Unit (N));
+       SF : constant Source_Ptr        := Source_First (SI);
+       SL : constant Source_Ptr        := Source_Last (SI);
+       F  : Node_Id;
+       S  : Source_Ptr;
+ 
+    begin
+       F := Last_Node (N);
+       S := Sloc (F);
+ 
+       if S not in SF .. SL then
+          return S;
+       end if;
+ 
+       --  Skip past an identifier
+ 
+       while S in SF .. SL - 1
+         and then Source_Text (SI) (S + 1)
+           in
+         '0' .. '9' | 'a' .. 'z' | 'A' .. 'Z' | '.' | '_'
+       loop
+          S := S + 1;
+       end loop;
+ 
+       --  The following circuit attempts at crawling up the tree from the
+       --  Last_Node, adjusting the Sloc value for any parentheses we know
+       --  are present, similarly to what is done in First_Sloc.
+ 
+       Node_Loop : loop
+          Paren_Loop : for J in 1 .. Paren_Count (F) loop
+ 
+             --  We don't look more than 12 characters after the current
+             --  location
+ 
+             Search_Loop : for K in 1 .. 12 loop
+                exit Node_Loop when S = SL;
+ 
+                if Source_Text (SI) (S + 1) = ')' then
+                   S := S + 1;
+                   exit Search_Loop;
+ 
+                elsif Source_Text (SI) (S + 1) <= ' ' then
+                   S := S + 1;
+ 
+                else
+                   exit Search_Loop;
+                end if;
+             end loop Search_Loop;
+          end loop Paren_Loop;
+ 
+          exit Node_Loop when F = N;
+          F := Parent (F);
+          exit Node_Loop when Nkind (F) not in N_Subexpr;
+       end loop Node_Loop;
+ 
+       --  Remove any trailing space
+ 
+       while S in SF + 1 .. SL
+         and then Source_Text (SI) (S) = ' '
+       loop
+          S := S - 1;
+       end loop;
+ 
+       return S;
+    end Last_Sloc;
+ 
     -----------------
     -- No_Warnings --
     -----------------
*************** package body Errout is
*** 1841,1846 ****
--- 2065,2222 ----
        end if;
     end OK_Node;
  
+    -------------------------
+    -- Output_JSON_Message --
+    -------------------------
+ 
+    procedure Output_JSON_Message (Error_Id : Error_Msg_Id) is
+ 
+       function Is_Continuation (E : Error_Msg_Id) return Boolean;
+       --  Return True if E is a continuation message.
+ 
+       procedure Write_JSON_Escaped_String (Str : String_Ptr);
+       --  Write each character of Str, taking care of preceding each quote and
+       --  backslash with a backslash. Note that this escaping differs from what
+       --  GCC does.
+       --
+       --  Indeed, the JSON specification mandates encoding wide characters
+       --  either as their direct UTF-8 representation or as their escaped
+       --  UTF-16 surrogate pairs representation. GCC seems to prefer escaping -
+       --  we choose to use the UTF-8 representation instead.
+ 
+       procedure Write_JSON_Location (Sptr : Source_Ptr);
+       --  Write Sptr as a JSON location, an object containing a file attribute,
+       --  a line number and a column number.
+ 
+       procedure Write_JSON_Span (Span : Source_Span);
+       --  Write Span as a JSON span, an object containing a "caret" attribute
+       --  whose value is the JSON location of Span.Ptr. If Span.First and
+       --  Span.Last are different from Span.Ptr, they will be printed as JSON
+       --  locations under the names "start" and "finish".
+ 
+       -----------------------
+       --  Is_Continuation  --
+       -----------------------
+ 
+       function Is_Continuation (E : Error_Msg_Id) return Boolean is
+       begin
+          return E <= Last_Error_Msg and then Errors.Table (E).Msg_Cont;
+       end Is_Continuation;
+ 
+       -------------------------------
+       -- Write_JSON_Escaped_String --
+       -------------------------------
+ 
+       procedure Write_JSON_Escaped_String (Str : String_Ptr) is
+       begin
+          for C of Str.all loop
+             if C = '"' or else C = '\' then
+                Write_Char ('\');
+             end if;
+ 
+             Write_Char (C);
+          end loop;
+       end Write_JSON_Escaped_String;
+ 
+       -------------------------
+       -- Write_JSON_Location --
+       -------------------------
+ 
+       procedure Write_JSON_Location (Sptr : Source_Ptr) is
+       begin
+          Write_Str ("{""file"":""");
+          Write_Name (Full_Ref_Name (Get_Source_File_Index (Sptr)));
+          Write_Str (""",""line"":");
+          Write_Int (Pos (Get_Physical_Line_Number (Sptr)));
+          Write_Str (", ""column"":");
+          Write_Int (Nat (Get_Column_Number (Sptr)));
+          Write_Str ("}");
+       end Write_JSON_Location;
+ 
+       ---------------------
+       -- Write_JSON_Span --
+       ---------------------
+ 
+       procedure Write_JSON_Span (Span : Source_Span) is
+       begin
+          Write_Str ("{""caret"":");
+          Write_JSON_Location (Span.Ptr);
+ 
+          if Span.Ptr /= Span.First then
+             Write_Str (",""start"":");
+             Write_JSON_Location (Span.First);
+          end if;
+ 
+          if Span.Ptr /= Span.Last then
+             Write_Str (",""finish"":");
+             Write_JSON_Location (Span.Last);
+          end if;
+ 
+          Write_Str ("}");
+       end Write_JSON_Span;
+ 
+       --  Local Variables
+ 
+       E : Error_Msg_Id := Error_Id;
+ 
+       Print_Continuations : constant Boolean := not Is_Continuation (E);
+       --  Do not print continuations messages as children of the current
+       --  message if the current message is a continuation message.
+ 
+    --  Start of processing for Output_JSON_Message
+ 
+    begin
+ 
+       --  Print message kind
+ 
+       Write_Str ("{""kind"":");
+ 
+       if Errors.Table (E).Warn and then not Errors.Table (E).Warn_Err then
+          Write_Str ("""warning""");
+       elsif Errors.Table (E).Info or else Errors.Table (E).Check then
+          Write_Str ("""note""");
+       else
+          Write_Str ("""error""");
+       end if;
+ 
+       --  Print message location
+ 
+       Write_Str (",""locations"":[");
+       Write_JSON_Span (Errors.Table (E).Sptr);
+ 
+       if Errors.Table (E).Optr /= Errors.Table (E).Sptr.Ptr then
+          Write_Str (",{""caret"":");
+          Write_JSON_Location (Errors.Table (E).Optr);
+          Write_Str ("}");
+       end if;
+ 
+       --  Print message content
+ 
+       Write_Str ("],""message"":""");
+       Write_JSON_Escaped_String (Errors.Table (E).Text);
+       Write_Str ("""");
+ 
+       E := E + 1;
+ 
+       if Print_Continuations and then Is_Continuation (E) then
+ 
+          Write_Str (",""children"": [");
+          Output_JSON_Message (E);
+          E := E + 1;
+ 
+          while Is_Continuation (E) loop
+             Write_Str (", ");
+             Output_JSON_Message (E);
+             E := E + 1;
+          end loop;
+ 
+          Write_Str ("]");
+ 
+       end if;
+ 
+       Write_Str ("}");
+    end Output_JSON_Message;
+ 
     ---------------------
     -- Output_Messages --
     ---------------------
*************** package body Errout is
*** 1858,1870 ****
        procedure Write_Max_Errors;
        --  Write message if max errors reached
  
!       procedure Write_Source_Code_Line (Loc : Source_Ptr);
!       --  Write the source code line corresponding to Loc, as follows:
        --
!       --  line |  actual code line here with Loc somewhere
        --       |                             ^ here
        --
!       --  where the carret on the last line points to location Loc.
  
        -------------------------
        -- Write_Error_Summary --
--- 2234,2268 ----
        procedure Write_Max_Errors;
        --  Write message if max errors reached
  
!       procedure Write_Source_Code_Lines
!         (Span     : Source_Span;
!          SGR_Span : String);
!       --  Write the source code line corresponding to Span, as follows when
!       --  Span in on one line:
        --
!       --  line |  actual code line here with Span somewhere
!       --       |                        ~~~~~^~~~
!       --
!       --  where the caret on the line points to location Span.Ptr, and the
!       --  range Span.First..Span.Last is underlined.
!       --
!       --  or when the span is over multiple lines:
!       --
!       --  line |  beginning of the Span on this line
!       --   ... |     ...
!       --  line>|  actual code line here with Span.Ptr somewhere
!       --   ... |     ...
!       --  line |  end of the Span on this line
!       --
!       --  or when the span is a simple location, as follows:
!       --
!       --  line |  actual code line here with Span somewhere
        --       |                             ^ here
        --
!       --  where the caret on the line points to location Span.Ptr
!       --
!       --  SGR_Span is the SGR string to start the section of code in the span,
!       --  that should be closed with SGR_Reset.
  
        -------------------------
        -- Write_Error_Summary --
*************** package body Errout is
*** 2056,2072 ****
           end if;
        end Write_Max_Errors;
  
!       ----------------------------
!       -- Write_Source_Code_Line --
!       ----------------------------
  
!       procedure Write_Source_Code_Line (Loc : Source_Ptr) is
  
           function Image (X : Positive; Width : Positive) return String;
           --  Output number X over Width characters, with whitespace padding.
           --  Only output the low-order Width digits of X, if X is larger than
           --  Width digits.
  
           -----------
           -- Image --
           -----------
--- 2454,2543 ----
           end if;
        end Write_Max_Errors;
  
!       -----------------------------
!       -- Write_Source_Code_Lines --
!       -----------------------------
  
!       procedure Write_Source_Code_Lines
!         (Span     : Source_Span;
!          SGR_Span : String)
!       is
!          function Get_Line_End
!            (Buf : Source_Buffer_Ptr;
!             Loc : Source_Ptr) return Source_Ptr;
!          --  Get the source location for the end of the line in Buf for Loc. If
!          --  Loc is past the end of Buf already, return Buf'Last.
! 
!          function Get_Line_Start
!            (Buf : Source_Buffer_Ptr;
!             Loc : Source_Ptr) return Source_Ptr;
!          --  Get the source location for the start of the line in Buf for Loc
  
           function Image (X : Positive; Width : Positive) return String;
           --  Output number X over Width characters, with whitespace padding.
           --  Only output the low-order Width digits of X, if X is larger than
           --  Width digits.
  
+          procedure Write_Buffer
+            (Buf   : Source_Buffer_Ptr;
+             First : Source_Ptr;
+             Last  : Source_Ptr);
+          --  Output the characters from First to Last position in Buf, using
+          --  Write_Buffer_Char.
+ 
+          procedure Write_Buffer_Char
+            (Buf : Source_Buffer_Ptr;
+             Loc : Source_Ptr);
+          --  Output the characters at position Loc in Buf, translating ASCII.HT
+          --  in a suitable number of spaces so that the output is not modified
+          --  by starting in a different column that 1.
+ 
+          procedure Write_Line_Marker
+            (Num   : Pos;
+             Mark  : Boolean;
+             Width : Positive);
+          --  Output the line number Num over Width characters, with possibly
+          --  a Mark to denote the line with the main location when reporting
+          --  a span over multiple lines.
+ 
+          ------------------
+          -- Get_Line_End --
+          ------------------
+ 
+          function Get_Line_End
+            (Buf : Source_Buffer_Ptr;
+             Loc : Source_Ptr) return Source_Ptr
+          is
+             Cur_Loc : Source_Ptr := Source_Ptr'Min (Loc, Buf'Last);
+          begin
+             while Cur_Loc < Buf'Last
+               and then Buf (Cur_Loc) /= ASCII.LF
+             loop
+                Cur_Loc := Cur_Loc + 1;
+             end loop;
+ 
+             return Cur_Loc;
+          end Get_Line_End;
+ 
+          --------------------
+          -- Get_Line_Start --
+          --------------------
+ 
+          function Get_Line_Start
+            (Buf : Source_Buffer_Ptr;
+             Loc : Source_Ptr) return Source_Ptr
+          is
+             Cur_Loc : Source_Ptr := Loc;
+          begin
+             while Cur_Loc > Buf'First
+               and then Buf (Cur_Loc - 1) /= ASCII.LF
+             loop
+                Cur_Loc := Cur_Loc - 1;
+             end loop;
+ 
+             return Cur_Loc;
+          end Get_Line_Start;
+ 
           -----------
           -- Image --
           -----------
*************** package body Errout is
*** 2087,2131 ****
              return Str;
           end Image;
  
           --  Local variables
  
!          Line    : constant Pos     := Pos (Get_Physical_Line_Number (Loc));
!          Col     : constant Natural := Natural (Get_Column_Number (Loc));
!          Width   : constant         := 5;
  
!          Buf     : Source_Buffer_Ptr;
!          Cur_Loc : Source_Ptr := Loc;
  
!       --  Start of processing for Write_Source_Code_Line
  
        begin
           if Loc >= First_Source_Ptr then
              Buf := Source_Text (Get_Source_File_Index (Loc));
  
!             --  First line with the actual source code line
  
!             Write_Str (Image (Positive (Line), Width => Width));
!             Write_Str (" |");
!             Write_Str (String (Buf (Loc - Source_Ptr (Col) + 1  .. Loc - 1)));
  
!             while Cur_Loc <= Buf'Last
!               and then Buf (Cur_Loc) /= ASCII.LF
!             loop
!                Write_Char (Buf (Cur_Loc));
!                Cur_Loc := Cur_Loc + 1;
!             end loop;
  
!             Write_Eol;
  
!             --  Second line with carret sign pointing to location Loc
  
!             Write_Str (String'(1 .. Width => ' '));
!             Write_Str (" |");
!             Write_Str (String'(1 .. Col - 1 => ' '));
!             Write_Str ("^ here");
!             Write_Eol;
           end if;
!       end Write_Source_Code_Line;
  
        --  Local variables
  
--- 2558,2757 ----
              return Str;
           end Image;
  
+          ------------------
+          -- Write_Buffer --
+          ------------------
+ 
+          procedure Write_Buffer
+            (Buf   : Source_Buffer_Ptr;
+             First : Source_Ptr;
+             Last  : Source_Ptr)
+          is
+          begin
+             for Loc in First .. Last loop
+                Write_Buffer_Char (Buf, Loc);
+             end loop;
+          end Write_Buffer;
+ 
+          -----------------------
+          -- Write_Buffer_Char --
+          -----------------------
+ 
+          procedure Write_Buffer_Char
+            (Buf : Source_Buffer_Ptr;
+             Loc : Source_Ptr)
+          is
+          begin
+             --  If the character ASCII.HT is not the last one in the file,
+             --  output as many spaces as the character represents in the
+             --  original source file.
+ 
+             if Buf (Loc) = ASCII.HT
+               and then Loc < Buf'Last
+             then
+                for X in Get_Column_Number (Loc) ..
+                         Get_Column_Number (Loc + 1) - 1
+                loop
+                   Write_Char (' ');
+                end loop;
+ 
+             --  Otherwise output the character itself
+ 
+             else
+                Write_Char (Buf (Loc));
+             end if;
+          end Write_Buffer_Char;
+ 
+          -----------------------
+          -- Write_Line_Marker --
+          -----------------------
+ 
+          procedure Write_Line_Marker
+            (Num   : Pos;
+             Mark  : Boolean;
+             Width : Positive)
+          is
+          begin
+             Write_Str (Image (Positive (Num), Width => Width));
+             Write_Str ((if Mark then ">" else " ") & "|");
+          end Write_Line_Marker;
+ 
           --  Local variables
  
!          Loc     : constant Source_Ptr := Span.Ptr;
!          Line    : constant Pos        := Pos (Get_Physical_Line_Number (Loc));
  
!          Col     : constant Natural    := Natural (Get_Column_Number (Loc));
  
!          Fst      : constant Source_Ptr := Span.First;
!          Line_Fst : constant Pos        :=
!            Pos (Get_Physical_Line_Number (Fst));
!          Col_Fst  : constant Natural    :=
!            Natural (Get_Column_Number (Fst));
!          Lst      : constant Source_Ptr := Span.Last;
!          Line_Lst : constant Pos        :=
!            Pos (Get_Physical_Line_Number (Lst));
!          Col_Lst  : constant Natural    :=
!            Natural (Get_Column_Number (Lst));
! 
!          Width    : constant := 5;
!          Buf      : Source_Buffer_Ptr;
!          Cur_Loc  : Source_Ptr := Fst;
!          Cur_Line : Pos := Line_Fst;
! 
!       --  Start of processing for Write_Source_Code_Lines
  
        begin
           if Loc >= First_Source_Ptr then
              Buf := Source_Text (Get_Source_File_Index (Loc));
  
!             --  First line of the span with actual source code. We retrieve
!             --  the beginning of the line instead of relying on Col_Fst, as
!             --  ASCII.HT characters change column numbers by possibly more
!             --  than one.
  
!             Write_Line_Marker
!               (Cur_Line,
!                Line_Fst /= Line_Lst and then Cur_Line = Line,
!                Width);
!             Write_Buffer (Buf, Get_Line_Start (Buf, Cur_Loc), Cur_Loc - 1);
  
!             --  Output the first/caret/last lines of the span, as well as
!             --  lines that are directly above/below the caret if they complete
!             --  the gap with first/last lines, otherwise use ... to denote
!             --  intermediate lines.
  
!             --  If the span is on one line and not a simple source location,
!             --  color it appropriately.
  
!             if Line_Fst = Line_Lst
!               and then Col_Fst /= Col_Lst
!             then
!                Write_Str (SGR_Span);
!             end if;
  
!             declare
!                function Do_Write_Line (Cur_Line : Pos) return Boolean is
!                   (Cur_Line in Line_Fst | Line | Line_Lst
!                      or else
!                    (Cur_Line = Line_Fst + 1 and then Cur_Line = Line - 1)
!                      or else
!                    (Cur_Line = Line + 1 and then Cur_Line = Line_Lst - 1));
!             begin
!                while Cur_Loc <= Buf'Last
!                  and then Cur_Loc <= Lst
!                loop
!                   if Do_Write_Line (Cur_Line) then
!                      Write_Buffer_Char (Buf, Cur_Loc);
!                   end if;
! 
!                   if Buf (Cur_Loc) = ASCII.LF then
!                      Cur_Line := Cur_Line + 1;
! 
!                      --  Output ... for skipped lines
! 
!                      if (Cur_Line = Line
!                           and then not Do_Write_Line (Cur_Line - 1))
!                        or else
!                         (Cur_Line = Line + 1
!                           and then not Do_Write_Line (Cur_Line))
!                      then
!                         Write_Str ((1 .. Width - 3 => ' ') & "... | ...");
!                         Write_Eol;
!                      end if;
! 
!                      --  Display the line marker if the line should be
!                      --  displayed.
! 
!                      if Do_Write_Line (Cur_Line) then
!                         Write_Line_Marker
!                           (Cur_Line,
!                            Line_Fst /= Line_Lst and then Cur_Line = Line,
!                            Width);
!                      end if;
!                   end if;
! 
!                   Cur_Loc := Cur_Loc + 1;
!                end loop;
!             end;
! 
!             if Line_Fst = Line_Lst
!               and then Col_Fst /= Col_Lst
!             then
!                Write_Str (SGR_Reset);
!             end if;
! 
!             --  Output the rest of the last line of the span
! 
!             Write_Buffer (Buf, Cur_Loc, Get_Line_End (Buf, Cur_Loc));
! 
!             --  If the span is on one line, output a second line with caret
!             --  sign pointing to location Loc
! 
!             if Line_Fst = Line_Lst then
!                Write_Str (String'(1 .. Width => ' '));
!                Write_Str (" |");
!                Write_Str (String'(1 .. Col_Fst - 1 => ' '));
! 
!                Write_Str (SGR_Span);
! 
!                Write_Str (String'(Col_Fst .. Col - 1 => '~'));
!                Write_Str ("^");
!                Write_Str (String'(Col + 1 .. Col_Lst => '~'));
! 
!                --  If the span is really just a location, add the word "here"
!                --  to clarify this is the location for the message.
! 
!                if Col_Fst = Col_Lst then
!                   Write_Str (" here");
!                end if;
! 
!                Write_Str (SGR_Reset);
! 
!                Write_Eol;
!             end if;
           end if;
!       end Write_Source_Code_Lines;
  
        --  Local variables
  
*************** package body Errout is
*** 2152,2160 ****
           Current_Error_Source_File := No_Source_File;
        end if;
  
        --  Brief Error mode
  
!       if Brief_Output or (not Full_List and not Verbose_Mode) then
           Set_Standard_Error;
  
           E := First_Error_Msg;
--- 2778,2823 ----
           Current_Error_Source_File := No_Source_File;
        end if;
  
+       if Opt.JSON_Output then
+          Set_Standard_Error;
+ 
+          E := First_Error_Msg;
+ 
+          --  Find first printable message
+ 
+          while E /= No_Error_Msg and then Errors.Table (E).Deleted loop
+             E := Errors.Table (E).Next;
+          end loop;
+ 
+          Write_Char ('[');
+ 
+          if E /= No_Error_Msg then
+ 
+             Output_JSON_Message (E);
+ 
+             E := Errors.Table (E).Next;
+ 
+             --  Skip deleted messages.
+             --  Also skip continuation messages, as they have already been
+             --  printed along the message they're attached to.
+ 
+             while E /= No_Error_Msg
+               and then not Errors.Table (E).Deleted
+               and then not Errors.Table (E).Msg_Cont
+             loop
+                Write_Char (',');
+                Output_JSON_Message (E);
+                E := Errors.Table (E).Next;
+             end loop;
+          end if;
+ 
+          Write_Char (']');
+ 
+          Set_Standard_Output;
+ 
        --  Brief Error mode
  
!       elsif Brief_Output or (not Full_List and not Verbose_Mode) then
           Set_Standard_Error;
  
           E := First_Error_Msg;
*************** package body Errout is
*** 2180,2185 ****
--- 2843,2850 ----
                 end if;
  
                 if Use_Prefix then
+                   Write_Str (SGR_Locus);
+ 
                    if Full_Path_Name_For_Brief_Errors then
                       Write_Name (Full_Ref_Name (Errors.Table (E).Sfile));
                    else
*************** package body Errout is
*** 2198,2203 ****
--- 2863,2870 ----
  
                    Write_Int (Int (Errors.Table (E).Col));
                    Write_Str (": ");
+ 
+                   Write_Str (SGR_Reset);
                 end if;
  
                 Output_Msg_Text (E);
*************** package body Errout is
*** 2217,2228 ****
                            Errors.Table (E).Insertion_Sloc;
                       begin
                          if Loc /= No_Location then
!                            Write_Source_Code_Line (Loc);
                          end if;
                       end;
  
                    else
!                      Write_Source_Code_Line (Errors.Table (E).Sptr);
                    end if;
                 end if;
              end if;
--- 2884,2906 ----
                            Errors.Table (E).Insertion_Sloc;
                       begin
                          if Loc /= No_Location then
!                            Write_Source_Code_Lines
!                              (To_Span (Loc), SGR_Span => SGR_Note);
                          end if;
                       end;
  
                    else
!                      declare
!                         SGR_Span : constant String :=
!                           (if Errors.Table (E).Info then SGR_Note
!                            elsif Errors.Table (E).Warn
!                              and then not Errors.Table (E).Warn_Err
!                            then SGR_Warning
!                            else SGR_Error);
!                      begin
!                         Write_Source_Code_Lines
!                           (Errors.Table (E).Sptr, SGR_Span);
!                      end;
                    end if;
                 end if;
              end if;
*************** package body Errout is
*** 2355,2365 ****
           --  subunits for a body).
  
           while E /= No_Error_Msg
!            and then (not In_Extended_Main_Source_Unit (Errors.Table (E).Sptr)
                         or else
                          (Debug_Flag_Dot_M
                            and then Get_Source_Unit
!                                      (Errors.Table (E).Sptr) /= Main_Unit))
           loop
              if Errors.Table (E).Deleted then
                 E := Errors.Table (E).Next;
--- 3033,3044 ----
           --  subunits for a body).
  
           while E /= No_Error_Msg
!            and then (not In_Extended_Main_Source_Unit
!                            (Errors.Table (E).Sptr.Ptr)
                         or else
                          (Debug_Flag_Dot_M
                            and then Get_Source_Unit
!                                      (Errors.Table (E).Sptr.Ptr) /= Main_Unit))
           loop
              if Errors.Table (E).Deleted then
                 E := Errors.Table (E).Next;
*************** package body Errout is
*** 2420,2426 ****
           Write_Error_Summary;
        end if;
  
!       Write_Max_Errors;
  
        --  Even though Warning_Info_Messages are a subclass of warnings, they
        --  must not be treated as errors when -gnatwe is in effect.
--- 3099,3107 ----
           Write_Error_Summary;
        end if;
  
!       if not Opt.JSON_Output then
!          Write_Max_Errors;
!       end if;
  
        --  Even though Warning_Info_Messages are a subclass of warnings, they
        --  must not be treated as errors when -gnatwe is in effect.
*************** package body Errout is
*** 2568,2574 ****
        function Check_For_Warning (N : Node_Id) return Traverse_Result;
        --  This function checks one node for a possible warning message
  
!       function Check_All_Warnings is new Traverse_Func (Check_For_Warning);
        --  This defines the traversal operation
  
        -----------------------
--- 3249,3255 ----
        function Check_For_Warning (N : Node_Id) return Traverse_Result;
        --  This function checks one node for a possible warning message
  
!       procedure Check_All_Warnings is new Traverse_Proc (Check_For_Warning);
        --  This defines the traversal operation
  
        -----------------------
*************** package body Errout is
*** 2599,2611 ****
                 --  not remove style messages here. They are warning messages
                 --  but not ones we want removed in this context.
  
!                and then Errors.Table (E).Warn
  
                 --  Don't remove unconditional messages
  
                 and then not Errors.Table (E).Uncond
              then
!                Warnings_Detected := Warnings_Detected - 1;
  
                 if Errors.Table (E).Info then
                    Warning_Info_Messages := Warning_Info_Messages - 1;
--- 3280,3296 ----
                 --  not remove style messages here. They are warning messages
                 --  but not ones we want removed in this context.
  
!                and then (Errors.Table (E).Warn
!                            or else
!                          Errors.Table (E).Warn_Runtime_Raise)
  
                 --  Don't remove unconditional messages
  
                 and then not Errors.Table (E).Uncond
              then
!                if Errors.Table (E).Warn then
!                   Warnings_Detected := Warnings_Detected - 1;
!                end if;
  
                 if Errors.Table (E).Info then
                    Warning_Info_Messages := Warning_Info_Messages - 1;
*************** package body Errout is
*** 2655,2704 ****
              --  the current tree. Given that we are in unreachable code, this
              --  modification to the tree is harmless.
  
!             declare
!                Status : Traverse_Final_Result;
! 
!             begin
!                if Is_List_Member (N) then
!                   Set_Condition (N, Original_Node (N));
!                   Status := Check_All_Warnings (Condition (N));
!                else
!                   Rewrite (N, Original_Node (N));
!                   Status := Check_All_Warnings (N);
!                end if;
! 
!                return Status;
!             end;
! 
!          else
!             return OK;
           end if;
        end Check_For_Warning;
  
     --  Start of processing for Remove_Warning_Messages
  
     begin
        if Warnings_Detected /= 0 then
!          declare
!             Discard : Traverse_Final_Result;
!             pragma Warnings (Off, Discard);
! 
!          begin
!             Discard := Check_All_Warnings (N);
!          end;
        end if;
     end Remove_Warning_Messages;
  
     procedure Remove_Warning_Messages (L : List_Id) is
        Stat : Node_Id;
     begin
!       if Is_Non_Empty_List (L) then
!          Stat := First (L);
!          while Present (Stat) loop
!             Remove_Warning_Messages (Stat);
!             Next (Stat);
!          end loop;
!       end if;
     end Remove_Warning_Messages;
  
     --------------------
--- 3340,3373 ----
              --  the current tree. Given that we are in unreachable code, this
              --  modification to the tree is harmless.
  
!             if Is_List_Member (N) then
!                Set_Condition (N, Original_Node (N));
!                Check_All_Warnings (Condition (N));
!             else
!                Rewrite (N, Original_Node (N));
!                Check_All_Warnings (N);
!             end if;
           end if;
+ 
+          return OK;
        end Check_For_Warning;
  
     --  Start of processing for Remove_Warning_Messages
  
     begin
        if Warnings_Detected /= 0 then
!          Check_All_Warnings (N);
        end if;
     end Remove_Warning_Messages;
  
     procedure Remove_Warning_Messages (L : List_Id) is
        Stat : Node_Id;
     begin
!       Stat := First (L);
!       while Present (Stat) loop
!          Remove_Warning_Messages (Stat);
!          Next (Stat);
!       end loop;
     end Remove_Warning_Messages;
  
     --------------------
*************** package body Errout is
*** 2721,2785 ****
       (Buf : in out Bounded_String;
        Loc : Source_Ptr)
     is
     begin
        --  We have an all lower case name from Namet, and now we want to set
        --  the appropriate case. If possible we copy the actual casing from
        --  the source. If not we use standard identifier casing.
  
!       declare
!          Src_Ind : constant Source_File_Index := Get_Source_File_Index (Loc);
!          Sbuffer : Source_Buffer_Ptr;
!          Ref_Ptr : Integer;
!          Src_Ptr : Source_Ptr;
! 
!       begin
!          Ref_Ptr := 1;
!          Src_Ptr := Loc;
  
!          --  For standard locations, always use mixed case
  
!          if Loc <= No_Location then
!             Set_Casing (Mixed_Case);
  
!          else
!             --  Determine if the reference we are dealing with corresponds to
!             --  text at the point of the error reference. This will often be
!             --  the case for simple identifier references, and is the case
!             --  where we can copy the casing from the source.
  
!             Sbuffer := Source_Text (Src_Ind);
  
!             while Ref_Ptr <= Buf.Length loop
!                exit when
!                  Fold_Lower (Sbuffer (Src_Ptr)) /=
!                    Fold_Lower (Buf.Chars (Ref_Ptr));
!                Ref_Ptr := Ref_Ptr + 1;
!                Src_Ptr := Src_Ptr + 1;
!             end loop;
  
!             --  If we get through the loop without a mismatch, then output the
!             --  name the way it is cased in the source program
  
!             if Ref_Ptr > Buf.Length then
!                Src_Ptr := Loc;
  
!                for J in 1 .. Buf.Length loop
!                   Buf.Chars (J) := Sbuffer (Src_Ptr);
!                   Src_Ptr := Src_Ptr + 1;
!                end loop;
  
!             --  Otherwise set the casing using the default identifier casing
  
!             else
!                Set_Casing (Buf, Identifier_Casing (Src_Ind));
!             end if;
           end if;
!       end;
!    end Adjust_Name_Case;
! 
!    procedure Adjust_Name_Case (Loc : Source_Ptr) is
!    begin
!       Adjust_Name_Case (Global_Name_Buffer, Loc);
     end Adjust_Name_Case;
  
     ---------------------------
--- 3390,3446 ----
       (Buf : in out Bounded_String;
        Loc : Source_Ptr)
     is
+       Src_Ind : constant Source_File_Index := Get_Source_File_Index (Loc);
+       Sbuffer : Source_Buffer_Ptr;
+       Ref_Ptr : Integer;
+       Src_Ptr : Source_Ptr;
+ 
     begin
        --  We have an all lower case name from Namet, and now we want to set
        --  the appropriate case. If possible we copy the actual casing from
        --  the source. If not we use standard identifier casing.
  
!       Ref_Ptr := 1;
!       Src_Ptr := Loc;
  
!       --  For standard locations, always use mixed case
  
!       if Loc <= No_Location then
!          Set_Casing (Buf, Mixed_Case);
  
!       else
!          --  Determine if the reference we are dealing with corresponds to text
!          --  at the point of the error reference. This will often be the case
!          --  for simple identifier references, and is the case where we can
!          --  copy the casing from the source.
  
!          Sbuffer := Source_Text (Src_Ind);
  
!          while Ref_Ptr <= Buf.Length loop
!             exit when
!               Fold_Lower (Sbuffer (Src_Ptr)) /=
!                 Fold_Lower (Buf.Chars (Ref_Ptr));
!             Ref_Ptr := Ref_Ptr + 1;
!             Src_Ptr := Src_Ptr + 1;
!          end loop;
  
!          --  If we get through the loop without a mismatch, then output the
!          --  name the way it is cased in the source program.
  
!          if Ref_Ptr > Buf.Length then
!             Src_Ptr := Loc;
  
!             for J in 1 .. Buf.Length loop
!                Buf.Chars (J) := Sbuffer (Src_Ptr);
!                Src_Ptr := Src_Ptr + 1;
!             end loop;
  
!          --  Otherwise set the casing using the default identifier casing
  
!          else
!             Set_Casing (Buf, Identifier_Casing (Src_Ind));
           end if;
!       end if;
     end Adjust_Name_Case;
  
     ---------------------------
*************** package body Errout is
*** 2918,2932 ****
        end if;
  
        --  The following assignment ensures that a second ampersand insertion
!       --  character will correspond to the Error_Msg_Node_2 parameter. We
!       --  suppress possible validity checks in case operating in -gnatVa mode,
!       --  and Error_Msg_Node_2 is not needed and has not been set.
  
!       declare
!          pragma Suppress (Range_Check);
!       begin
!          Error_Msg_Node_1 := Error_Msg_Node_2;
!       end;
     end Set_Msg_Insertion_Node;
  
     --------------------------------------
--- 3579,3587 ----
        end if;
  
        --  The following assignment ensures that a second ampersand insertion
!       --  character will correspond to the Error_Msg_Node_2 parameter.
  
!       Error_Msg_Node_1 := Error_Msg_Node_2;
     end Set_Msg_Insertion_Node;
  
     --------------------------------------
*************** package body Errout is
*** 2947,2954 ****
           Set_Msg_Str ("exception name");
           return;
  
!       elsif     Error_Msg_Node_1 = Any_Access
!         or else Error_Msg_Node_1 = Any_Array
          or else Error_Msg_Node_1 = Any_Boolean
          or else Error_Msg_Node_1 = Any_Character
          or else Error_Msg_Node_1 = Any_Composite
--- 3602,3608 ----
           Set_Msg_Str ("exception name");
           return;
  
!       elsif Error_Msg_Node_1 = Any_Array
          or else Error_Msg_Node_1 = Any_Boolean
          or else Error_Msg_Node_1 = Any_Character
          or else Error_Msg_Node_1 = Any_Composite
*************** package body Errout is
*** 2965,2981 ****
           Set_Msg_Name_Buffer;
           return;
  
-       elsif Error_Msg_Node_1 = Universal_Real then
-          Set_Msg_Str ("type universal real");
-          return;
- 
        elsif Error_Msg_Node_1 = Universal_Integer then
           Set_Msg_Str ("type universal integer");
           return;
  
        elsif Error_Msg_Node_1 = Universal_Fixed then
           Set_Msg_Str ("type universal fixed");
           return;
        end if;
  
        --  Special case of anonymous array
--- 3619,3639 ----
           Set_Msg_Name_Buffer;
           return;
  
        elsif Error_Msg_Node_1 = Universal_Integer then
           Set_Msg_Str ("type universal integer");
           return;
  
+       elsif Error_Msg_Node_1 = Universal_Real then
+          Set_Msg_Str ("type universal real");
+          return;
+ 
        elsif Error_Msg_Node_1 = Universal_Fixed then
           Set_Msg_Str ("type universal fixed");
           return;
+ 
+       elsif Error_Msg_Node_1 = Universal_Access then
+          Set_Msg_Str ("type universal access");
+          return;
        end if;
  
        --  Special case of anonymous array
*************** package body Errout is
*** 3106,3120 ****
        end if;
  
        --  The following assignment ensures that a second percent insertion
!       --  character will correspond to the Error_Msg_Unit_2 parameter. We
!       --  suppress possible validity checks in case operating in -gnatVa mode,
!       --  and Error_Msg_Unit_2 is not needed and has not been set.
  
!       declare
!          pragma Suppress (Range_Check);
!       begin
!          Error_Msg_Unit_1 := Error_Msg_Unit_2;
!       end;
     end Set_Msg_Insertion_Unit_Name;
  
     ------------------
--- 3764,3772 ----
        end if;
  
        --  The following assignment ensures that a second percent insertion
!       --  character will correspond to the Error_Msg_Unit_2 parameter.
  
!       Error_Msg_Unit_1 := Error_Msg_Unit_2;
     end Set_Msg_Insertion_Unit_Name;
  
     ------------------
*************** package body Errout is
*** 3255,3266 ****
        P : Natural;     -- Current index;
  
        procedure Skip_Msg_Insertion_Warning (C : Character);
!       --  Deal with ? ?? ?x? ?X? ?*? ?$? insertion sequences (and the same
        --  sequences using < instead of ?). The caller has already bumped
        --  the pointer past the initial ? or < and C is set to this initial
        --  character (? or <). This procedure skips past the rest of the
        --  sequence. We do not need to set Msg_Insertion_Char, since this
        --  was already done during the message prescan.
  
        --------------------------------
        -- Skip_Msg_Insertion_Warning --
--- 3907,3921 ----
        P : Natural;     -- Current index;
  
        procedure Skip_Msg_Insertion_Warning (C : Character);
!       --  Skip the ? ?? ?x? ?*? ?$? insertion sequences (and the same
        --  sequences using < instead of ?). The caller has already bumped
        --  the pointer past the initial ? or < and C is set to this initial
        --  character (? or <). This procedure skips past the rest of the
        --  sequence. We do not need to set Msg_Insertion_Char, since this
        --  was already done during the message prescan.
+       --  No validity check is performed as the insertion sequence is
+       --  supposed to be sane. See Prescan_Message.Parse_Message_Class in
+       --  erroutc.adb for the validity checks.
  
        --------------------------------
        -- Skip_Msg_Insertion_Warning --
*************** package body Errout is
*** 3271,3287 ****
           if P <= Text'Last and then Text (P) = C then
              P := P + 1;
  
!          elsif P + 1 <= Text'Last
!            and then (Text (P) in 'a' .. 'z'
!                        or else
!                      Text (P) in 'A' .. 'Z'
!                        or else
!                      Text (P) = '*'
!                        or else
!                      Text (P) = '$')
!            and then Text (P + 1) = C
           then
              P := P + 2;
           end if;
        end Skip_Msg_Insertion_Warning;
  
--- 3926,3941 ----
           if P <= Text'Last and then Text (P) = C then
              P := P + 1;
  
!          elsif P < Text'Last and then Text (P + 1) = C
!            and then Text (P) in 'a' .. 'z' | '*' | '$'
           then
              P := P + 2;
+ 
+          elsif P + 1 < Text'Last and then Text (P + 2) = C
+            and then Text (P) in '.' | '_'
+            and then Text (P + 1) in 'a' .. 'z'
+          then
+             P := P + 3;
           end if;
        end Skip_Msg_Insertion_Warning;
  
*************** package body Errout is
*** 3412,3418 ****
                 if Is_Warning_Msg
                   and then Warning_Mode = Treat_Run_Time_Warnings_As_Errors
                 then
!                   Is_Warning_Msg := False;
                 end if;
  
                 if Is_Warning_Msg then
--- 4066,4073 ----
                 if Is_Warning_Msg
                   and then Warning_Mode = Treat_Run_Time_Warnings_As_Errors
                 then
!                   Is_Warning_Msg   := False;
!                   Is_Runtime_Raise := True;
                 end if;
  
                 if Is_Warning_Msg then
*************** package body Errout is
*** 3535,3541 ****
           --  other errors. The reason we eliminate unfrozen types is that
           --  messages issued before the freeze type are for sure OK.
  
!          elsif Is_Frozen (E)
             and then Serious_Errors_Detected > 0
             and then Nkind (N) /= N_Component_Clause
             and then Nkind (Parent (N)) /= N_Component_Clause
--- 4190,4197 ----
           --  other errors. The reason we eliminate unfrozen types is that
           --  messages issued before the freeze type are for sure OK.
  
!          elsif Nkind (N) in N_Entity
!            and then Is_Frozen (E)
             and then Serious_Errors_Detected > 0
             and then Nkind (N) /= N_Component_Clause
             and then Nkind (Parent (N)) /= N_Component_Clause
*************** package body Errout is
*** 3731,3749 ****
  
     function Warn_Insertion return String is
     begin
!       case Warning_Msg_Char is
!          when '?' =>
!             return "??";
! 
!          when 'a' .. 'z' | 'A' .. 'Z' | '*' | '$' =>
!             return '?' & Warning_Msg_Char & '?';
! 
!          when ' ' =>
!             return "?";
! 
!          when others =>
!             raise Program_Error;
!       end case;
     end Warn_Insertion;
  
  end Errout;
--- 4387,4401 ----
  
     function Warn_Insertion return String is
     begin
!       if Warning_Msg_Char = "? " then
!          return "??";
!       elsif Warning_Msg_Char = "  " then
!          return "?";
!       elsif Warning_Msg_Char (2) = ' ' then
!          return '?' & Warning_Msg_Char (1) & '?';
!       else
!          return '?' & Warning_Msg_Char & '?';
!       end if;
     end Warn_Insertion;
  
  end Errout;
diff -Nrcpad gcc-11.3.0/gcc/ada/errout.ads gcc-12.1.0/gcc/ada/errout.ads
*** gcc-11.3.0/gcc/ada/errout.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/errout.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Errout is
*** 60,72 ****
     --  Exception raised if Raise_Exception_On_Error is true
  
     Warning_Doc_Switch : Boolean renames Err_Vars.Warning_Doc_Switch;
!    --  If this is set True, then the ??/?*?/?$?/?x?/?X? insertion sequences in
!    --  error messages generate appropriate tags for the output error messages.
!    --  If this switch is False, then these sequences are still recognized (for
!    --  the purposes of implementing the pattern matching in pragmas Warnings
!    --  (Off,..) and Warning_As_Pragma(...) but do not result in adding the
!    --  error message tag. The -gnatw.d switch sets this flag True, -gnatw.D
!    --  sets this flag False.
  
     Current_Node : Node_Id := Empty;
     --  Used by Error_Msg as a default Node_Id.
--- 60,72 ----
     --  Exception raised if Raise_Exception_On_Error is true
  
     Warning_Doc_Switch : Boolean renames Err_Vars.Warning_Doc_Switch;
!    --  If this is set True, then the ??/?*?/?$?/?x?/?.x?/?_x? insertion
!    --  sequences in error messages generate appropriate tags for the output
!    --  error messages. If this switch is False, then these sequences are still
!    --  recognized (for the purposes of implementing the pattern matching in
!    --  pragmas Warnings (Off,..) and Warning_As_Pragma(...) but do not result
!    --  in adding the error message tag. The -gnatw.d switch sets this flag
!    --  True, -gnatw.D sets this flag False.
  
     Current_Node : Node_Id := Empty;
     --  Used by Error_Msg as a default Node_Id.
*************** package Errout is
*** 272,285 ****
     --      avoided. This is currently used by the Compile_Time_Warning pragma
     --      to ensure the message for a with'ed unit is output, and for warnings
     --      on ineffective back-end inlining, which is detected in units that
!    --      contain subprograms to be inlined in the main program. It is also
!    --      used by the Compiler_Unit_Warning pragma for similar reasons.
  
!    --    Insertion character ? (Question: warning message)
     --      The character ? appearing anywhere in a message makes the message
     --      warning instead of a normal error message, and the text of the
     --      message will be preceded by "warning:" in the normal case. The
!    --      handling of warnings if further controlled by the Warning_Mode
     --      option (-w switch), see package Opt for further details, and also by
     --      the current setting from pragma Warnings. This pragma applies only
     --      to warnings issued from the semantic phase (not the parser), but
--- 272,284 ----
     --      avoided. This is currently used by the Compile_Time_Warning pragma
     --      to ensure the message for a with'ed unit is output, and for warnings
     --      on ineffective back-end inlining, which is detected in units that
!    --      contain subprograms to be inlined in the main program.
  
!    --    Insertion character ? (Question: warning message -- OBSOLETE)
     --      The character ? appearing anywhere in a message makes the message
     --      warning instead of a normal error message, and the text of the
     --      message will be preceded by "warning:" in the normal case. The
!    --      handling of warnings is further controlled by the Warning_Mode
     --      option (-w switch), see package Opt for further details, and also by
     --      the current setting from pragma Warnings. This pragma applies only
     --      to warnings issued from the semantic phase (not the parser), but
*************** package Errout is
*** 302,329 ****
     --      clear that the continuation is part of a warning message, but it is
     --      not necessary to go through any computational effort to include it.
     --
!    --      Note: this usage is obsolete, use ?? ?*? ?$? ?x? ?X? to specify
!    --      the string to be added when Warn_Doc_Switch is set to True. If this
!    --      switch is True, then for simple ? messages it has no effect. This
!    --      simple form is to ease transition and may be removed later except
!    --      for GNATprove-specific messages (info and warnings) which are not
!    --      subject to the same GNAT warning switches.
  
     --    Insertion character ?? (Two question marks: default warning)
     --      Like ?, but if the flag Warn_Doc_Switch is True, adds the string
     --      "[enabled by default]" at the end of the warning message. For
     --      continuations, use this in each continuation message.
  
!    --    Insertion character ?x? (warning with switch)
!    --      Like ?, but if the flag Warn_Doc_Switch is True, adds the string
!    --      "[-gnatwx]" at the end of the warning message. x is a lower case
!    --      letter. For continuations, use this on each continuation message.
! 
!    --    Insertion character ?X? (warning with dot switch)
     --      Like ?, but if the flag Warn_Doc_Switch is True, adds the string
!    --      "[-gnatw.x]" at the end of the warning message. X is an upper case
!    --      letter corresponding to the lower case letter x in the message.
!    --      For continuations, use this on each continuation message.
  
     --    Insertion character ?*? (restriction warning)
     --      Like ?, but if the flag Warn_Doc_Switch is True, adds the string
--- 301,323 ----
     --      clear that the continuation is part of a warning message, but it is
     --      not necessary to go through any computational effort to include it.
     --
!    --      Note: this usage is obsolete; use ?? ?*? ?$? ?x? ?.x? ?_x? to
!    --      specify the string to be added when Warn_Doc_Switch is set to True.
!    --      If this switch is True, then for simple ? messages it has no effect.
!    --      This simple form is to ease transition and may be removed later
!    --      except for GNATprove-specific messages (info and warnings) which are
!    --      not subject to the same GNAT warning switches.
  
     --    Insertion character ?? (Two question marks: default warning)
     --      Like ?, but if the flag Warn_Doc_Switch is True, adds the string
     --      "[enabled by default]" at the end of the warning message. For
     --      continuations, use this in each continuation message.
  
!    --    Insertion character ?x? ?.x? ?_x? (warning with switch)
     --      Like ?, but if the flag Warn_Doc_Switch is True, adds the string
!    --      "[-gnatwx]", "[-gnatw.x]", or "[-gnatw_x]", at the end of the
!    --      warning message. x must be lower case. For continuations, use this
!    --      on each continuation message.
  
     --    Insertion character ?*? (restriction warning)
     --      Like ?, but if the flag Warn_Doc_Switch is True, adds the string
*************** package Errout is
*** 339,346 ****
     --    Insertion character < (Less Than: conditional warning message)
     --      The character < appearing anywhere in a message is used for a
     --      conditional error message. If Error_Msg_Warn is True, then the
!    --      effect is the same as ? described above, and in particular << <X<
!    --      <x< <$< <*< have the effect of ?? ?X? ?x? ?$? ?*? respectively. If
     --      Error_Msg_Warn is False, then the < << or <X< sequence is ignored
     --      and the message is treated as a error rather than a warning.
  
--- 333,340 ----
     --    Insertion character < (Less Than: conditional warning message)
     --      The character < appearing anywhere in a message is used for a
     --      conditional error message. If Error_Msg_Warn is True, then the
!    --      effect is the same as ? described above, and in particular << <x<
!    --      <$< <*< have the effect of ?? ?x? ?$? ?*? respectively. If
     --      Error_Msg_Warn is False, then the < << or <X< sequence is ignored
     --      and the message is treated as a error rather than a warning.
  
*************** package Errout is
*** 519,525 ****
     --  The prefixes error and warning are supplied automatically (depending
     --  on the use of the ? insertion character), and the call to the error
     --  message routine supplies the text. The "error: " prefix is omitted
!    --  in brief error message formats.
  
     --  Reserved Ada keywords in the message are in the default keyword case
     --  (determined from the given source program), surrounded by quotation
--- 513,519 ----
     --  The prefixes error and warning are supplied automatically (depending
     --  on the use of the ? insertion character), and the call to the error
     --  message routine supplies the text. The "error: " prefix is omitted
!    --  if -gnatd_U is among the options given to gnat.
  
     --  Reserved Ada keywords in the message are in the default keyword case
     --  (determined from the given source program), surrounded by quotation
*************** package Errout is
*** 703,712 ****
     procedure Error_Msg
       (Msg : String; Flag_Location : Source_Ptr);
     procedure Error_Msg
       (Msg : String; Flag_Location : Source_Ptr; N : Node_Id);
     --  Output a message at specified location. Can be called from the parser
     --  or the semantic analyzer. If N is set, points to the relevant node for
!    --  this message.
  
     procedure Error_Msg
       (Msg                    : String;
--- 697,711 ----
     procedure Error_Msg
       (Msg : String; Flag_Location : Source_Ptr);
     procedure Error_Msg
+      (Msg : String; Flag_Span : Source_Span);
+    procedure Error_Msg
       (Msg : String; Flag_Location : Source_Ptr; N : Node_Id);
+    procedure Error_Msg
+      (Msg : String; Flag_Span : Source_Span; N : Node_Id);
     --  Output a message at specified location. Can be called from the parser
     --  or the semantic analyzer. If N is set, points to the relevant node for
!    --  this message. The version with a span is preferred whenever possible,
!    --  in other cases the version with a location can still be used.
  
     procedure Error_Msg
       (Msg                    : String;
*************** package Errout is
*** 782,789 ****
        N             : Node_Or_Entity_Id;
        E             : Node_Or_Entity_Id;
        Flag_Location : Source_Ptr);
     --  Exactly the same as Error_Msg_NE, except that the flag is placed at
!    --  the specified Flag_Location instead of at Sloc (N).
  
     procedure Error_Msg_NW
       (Eflag : Boolean;
--- 781,793 ----
        N             : Node_Or_Entity_Id;
        E             : Node_Or_Entity_Id;
        Flag_Location : Source_Ptr);
+    procedure Error_Msg_NEL
+      (Msg       : String;
+       N         : Node_Or_Entity_Id;
+       E         : Node_Or_Entity_Id;
+       Flag_Span : Source_Span);
     --  Exactly the same as Error_Msg_NE, except that the flag is placed at
!    --  the specified Flag_Location/Flag_Span instead of at Sloc (N).
  
     procedure Error_Msg_NW
       (Eflag : Boolean;
*************** package Errout is
*** 801,812 ****
     --  the given text. This text may contain insertion characters in the
     --  usual manner, and need not be the same length as the original text.
  
     function First_Node (C : Node_Id) return Node_Id;
!    --  Given a construct C, finds the first node in the construct, i.e. the one
!    --  with the lowest Sloc value. This is useful in placing error msgs. Note
!    --  that this procedure uses Original_Node to look at the original source
!    --  tree, since that's what we want for placing an error message flag in
!    --  the right place.
  
     function First_Sloc (N : Node_Id) return Source_Ptr;
     --  Given the node for an expression, return a source pointer value that
--- 805,821 ----
     --  the given text. This text may contain insertion characters in the
     --  usual manner, and need not be the same length as the original text.
  
+    procedure First_And_Last_Nodes
+      (C                     : Node_Id;
+       First_Node, Last_Node : out Node_Id);
+    --  Given a construct C, finds the first and last node in the construct,
+    --  i.e. the ones with the lowest and highest Sloc value. This is useful in
+    --  placing error msgs. Note that this procedure uses Original_Node to look
+    --  at the original source tree, since that's what we want for placing an
+    --  error message flag in the right place.
+ 
     function First_Node (C : Node_Id) return Node_Id;
!    --  Return the first output of First_And_Last_Nodes
  
     function First_Sloc (N : Node_Id) return Source_Ptr;
     --  Given the node for an expression, return a source pointer value that
*************** package Errout is
*** 817,822 ****
--- 826,840 ----
     function Get_Ignore_Errors return Boolean;
     --  Return True if all error calls are ignored.
  
+    function Last_Node (C : Node_Id) return Node_Id;
+    --  Return the last output of First_And_Last_Nodes
+ 
+    function Last_Sloc (N : Node_Id) return Source_Ptr;
+    --  Given the node for an expression, return a source pointer value that
+    --  points to the end of the last token in the expression. In the case
+    --  where the expression is parenthesized, an attempt is made to include
+    --  the parentheses (i.e. to return the location of the final paren).
+ 
     procedure Purge_Messages (From : Source_Ptr; To : Source_Ptr)
       renames Erroutc.Purge_Messages;
     --  All error messages whose location is in the range From .. To (not
*************** package Errout is
*** 915,922 ****
     --  contain error message insertion characters in the normal manner, and in
     --  particular may start with | to flag a non-serious error.
  
!    procedure Error_Msg_Ada_2020_Feature (Feature : String; Loc : Source_Ptr);
!    --  Analogous to Error_Msg_Ada_2012_Feature
  
     procedure dmsg (Id : Error_Msg_Id) renames Erroutc.dmsg;
     --  Debugging routine to dump an error message
--- 933,945 ----
     --  contain error message insertion characters in the normal manner, and in
     --  particular may start with | to flag a non-serious error.
  
!    procedure Error_Msg_Ada_2022_Feature (Feature : String; Loc : Source_Ptr);
!    --  Analogous to Error_Msg_Ada_2012_Feature, for Ada 2022
! 
!    procedure Error_Msg_GNAT_Extension (Extension : String);
!    --  If not operating with extensions allowed, posts errors complaining
!    --  that Extension is only supported when the -gnatX switch is enabled,
!    --  with appropriate suggestions to fix it.
  
     procedure dmsg (Id : Error_Msg_Id) renames Erroutc.dmsg;
     --  Debugging routine to dump an error message
*************** package Errout is
*** 956,968 ****
     --  the name at that source location, we copy the casing from the source,
     --  otherwise we set appropriate default casing.
  
-    procedure Adjust_Name_Case (Loc : Source_Ptr);
-    --  Uses Buf => Global_Name_Buffer. There are no calls to this in the
-    --  compiler, but it is called in SPARK 2014.
- 
     procedure Set_Identifier_Casing
       (Identifier_Name : System.Address;
        File_Name       : System.Address);
     --  This subprogram can be used by the back end for the purposes of
     --  concocting error messages that are not output via Errout, e.g.
     --  the messages generated by the gcc back end.
--- 979,988 ----
     --  the name at that source location, we copy the casing from the source,
     --  otherwise we set appropriate default casing.
  
     procedure Set_Identifier_Casing
       (Identifier_Name : System.Address;
        File_Name       : System.Address);
+    pragma Convention (C, Set_Identifier_Casing);
     --  This subprogram can be used by the back end for the purposes of
     --  concocting error messages that are not output via Errout, e.g.
     --  the messages generated by the gcc back end.
*************** package Errout is
*** 982,989 ****
     Size_Too_Small_Message : constant String :=
       "size for& too small, minimum allowed is ^";
     --  This message is printed in Freeze and Sem_Ch13. We also test for it in
!    --  the body of this package (see Special_Msg_Delete) ???which is somewhat
!    --  questionable. The Is_Size_Too_Small_Message function tests for it by
!    --  testing a prefix. The function and constant should be kept in synch.
  
  end Errout;
--- 1002,1009 ----
     Size_Too_Small_Message : constant String :=
       "size for& too small, minimum allowed is ^";
     --  This message is printed in Freeze and Sem_Ch13. We also test for it in
!    --  the body of this package (see Special_Msg_Delete).
!    --  Function Is_Size_Too_Small_Message tests for it by testing a prefix.
!    --  The function and constant should be kept in synch.
  
  end Errout;
diff -Nrcpad gcc-11.3.0/gcc/ada/erroutc.adb gcc-12.1.0/gcc/ada/erroutc.adb
*** gcc-11.3.0/gcc/ada/erroutc.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/erroutc.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Erroutc is
*** 51,61 ****
     -- Local Subprograms --
     -----------------------
  
-    function Matches (S : String; P : String) return Boolean;
-    --  Returns true if the String S matches the pattern P, which can contain
-    --  wildcard chars (*). The entire pattern must match the entire string.
-    --  Case is ignored in the comparison (so X matches x).
- 
     function Sloc_In_Range (Loc, Start, Stop : Source_Ptr) return Boolean;
     --  Return whether Loc is in the range Start .. Stop, taking instantiation
     --  locations of Loc into account. This is useful for suppressing warnings
--- 51,56 ----
*************** package body Erroutc is
*** 282,288 ****
     begin
        for J in 1 .. Errors.Last loop
           begin
!             if Errors.Table (J).Warn and Errors.Table (J).Compile_Time_Pragma
              then
                 Result := Result + 1;
              end if;
--- 277,285 ----
     begin
        for J in 1 .. Errors.Last loop
           begin
!             if Errors.Table (J).Warn
!                and then Errors.Table (J).Compile_Time_Pragma
!                and then not Errors.Table (J).Deleted
              then
                 Result := Result + 1;
              end if;
*************** package body Erroutc is
*** 321,327 ****
  
        Write_Str
          ("  Sptr     = ");
!       Write_Location (E.Sptr);
        Write_Eol;
  
        Write_Str
--- 318,324 ----
  
        Write_Str
          ("  Sptr     = ");
!       Write_Location (E.Sptr.Ptr);  --  ??? Do not write the full span for now
        Write_Eol;
  
        Write_Str
*************** package body Erroutc is
*** 350,356 ****
  
     function Get_Location (E : Error_Msg_Id) return Source_Ptr is
     begin
!       return Errors.Table (E).Sptr;
     end Get_Location;
  
     ----------------
--- 347,353 ----
  
     function Get_Location (E : Error_Msg_Id) return Source_Ptr is
     begin
!       return Errors.Table (E).Sptr.Ptr;
     end Get_Location;
  
     ----------------
*************** package body Erroutc is
*** 367,386 ****
     ---------------------
  
     function Get_Warning_Tag (Id : Error_Msg_Id) return String is
!       Warn     : constant Boolean    := Errors.Table (Id).Warn;
!       Warn_Chr : constant Character  := Errors.Table (Id).Warn_Chr;
     begin
!       if Warn and then Warn_Chr /= ' ' then
!          if Warn_Chr = '?' then
              return "[enabled by default]";
!          elsif Warn_Chr = '*' then
              return "[restriction warning]";
!          elsif Warn_Chr = '$' then
              return "[-gnatel]";
!          elsif Warn_Chr in 'a' .. 'z' then
              return "[-gnatw" & Warn_Chr & ']';
-          else pragma Assert (Warn_Chr in 'A' .. 'Z');
-             return "[-gnatw." & Fold_Lower (Warn_Chr) & ']';
           end if;
        else
           return "";
--- 364,383 ----
     ---------------------
  
     function Get_Warning_Tag (Id : Error_Msg_Id) return String is
!       Warn     : constant Boolean         := Errors.Table (Id).Warn;
!       Warn_Chr : constant String (1 .. 2) := Errors.Table (Id).Warn_Chr;
     begin
!       if Warn and then Warn_Chr /= "  " then
!          if Warn_Chr = "? " then
              return "[enabled by default]";
!          elsif Warn_Chr = "* " then
              return "[restriction warning]";
!          elsif Warn_Chr = "$ " then
              return "[-gnatel]";
!          elsif Warn_Chr (2) = ' ' then
!             return "[-gnatw" & Warn_Chr (1) & ']';
!          else
              return "[-gnatw" & Warn_Chr & ']';
           end if;
        else
           return "";
*************** package body Erroutc is
*** 477,483 ****
          and then Errors.Table (T).Line = Errors.Table (E).Line
          and then Errors.Table (T).Sfile = Errors.Table (E).Sfile
        loop
!          if Errors.Table (T).Sptr > Errors.Table (E).Sptr then
              Mult_Flags := True;
           end if;
  
--- 474,480 ----
          and then Errors.Table (T).Line = Errors.Table (E).Line
          and then Errors.Table (T).Sfile = Errors.Table (E).Sfile
        loop
!          if Errors.Table (T).Sptr.Ptr > Errors.Table (E).Sptr.Ptr then
              Mult_Flags := True;
           end if;
  
*************** package body Erroutc is
*** 490,496 ****
  
        if not Debug_Flag_2 then
           Write_Str ("        ");
!          P := Line_Start (Errors.Table (E).Sptr);
           Flag_Num := 1;
  
           --  Loop through error messages for this line to place flags
--- 487,493 ----
  
        if not Debug_Flag_2 then
           Write_Str ("        ");
!          P := Line_Start (Errors.Table (E).Sptr.Ptr);
           Flag_Num := 1;
  
           --  Loop through error messages for this line to place flags
*************** package body Erroutc is
*** 507,513 ****
              begin
                 --  Loop to output blanks till current flag position
  
!                while P < Errors.Table (T).Sptr loop
  
                    --  Horizontal tab case, just echo the tab
  
--- 504,510 ----
              begin
                 --  Loop to output blanks till current flag position
  
!                while P < Errors.Table (T).Sptr.Ptr loop
  
                    --  Horizontal tab case, just echo the tab
  
*************** package body Erroutc is
*** 536,542 ****
                 --  Output flag (unless already output, this happens if more
                 --  than one error message occurs at the same flag position).
  
!                if P = Errors.Table (T).Sptr then
                    if (Flag_Num = 1 and then not Mult_Flags)
                      or else Flag_Num > 9
                    then
--- 533,539 ----
                 --  Output flag (unless already output, this happens if more
                 --  than one error message occurs at the same flag position).
  
!                if P = Errors.Table (T).Sptr.Ptr then
                    if (Flag_Num = 1 and then not Mult_Flags)
                      or else Flag_Num > 9
                    then
*************** package body Erroutc is
*** 699,705 ****
        --  For info messages, prefix message with "info: "
  
        elsif E_Msg.Info then
!          Txt := new String'("info: " & Txt.all);
  
        --  Warning treated as error
  
--- 696,702 ----
        --  For info messages, prefix message with "info: "
  
        elsif E_Msg.Info then
!          Txt := new String'(SGR_Note & "info: " & SGR_Reset & Txt.all);
  
        --  Warning treated as error
  
*************** package body Erroutc is
*** 709,735 ****
        --  [warning-as-error] at the end.
  
           Warnings_Treated_As_Errors := Warnings_Treated_As_Errors + 1;
!          Txt := new String'("error: " & Txt.all & " [warning-as-error]");
  
        --  Normal warning, prefix with "warning: "
  
        elsif E_Msg.Warn then
!          Txt := new String'("warning: " & Txt.all);
  
!       --  No prefix needed for style message, "(style)" is there already
  
        elsif E_Msg.Style then
!          null;
  
        --  No prefix needed for check message, severity is there already
  
        elsif E_Msg.Check then
!          null;
  
        --  All other cases, add "error: " if unique error tag set
  
        elsif Opt.Unique_Error_Tag then
!          Txt := new String'("error: " & Txt.all);
        end if;
  
        --  Set error message line length and length of message
--- 706,763 ----
        --  [warning-as-error] at the end.
  
           Warnings_Treated_As_Errors := Warnings_Treated_As_Errors + 1;
!          Txt := new String'(SGR_Error & "error: " & SGR_Reset
!                             & Txt.all & " [warning-as-error]");
  
        --  Normal warning, prefix with "warning: "
  
        elsif E_Msg.Warn then
!          Txt := new String'(SGR_Warning & "warning: " & SGR_Reset & Txt.all);
  
!       --  No prefix needed for style message, "(style)" is there already,
!       --  although not necessarily in first position if -gnatdJ is used.
  
        elsif E_Msg.Style then
!          if Txt (Txt'First .. Txt'First + 6) = "(style)" then
!             Txt := new String'(SGR_Warning & "(style)" & SGR_Reset
!                                & Txt (Txt'First + 7 .. Txt'Last));
!          end if;
  
        --  No prefix needed for check message, severity is there already
  
        elsif E_Msg.Check then
! 
!          --  The message format is "severity: ..."
!          --
!          --  Enclose the severity with an SGR control string if requested
! 
!          if Use_SGR_Control then
!             declare
!                Msg   : String renames Text.all;
!                Colon : Natural := 0;
!             begin
!                --  Find first colon
! 
!                for J in Msg'Range loop
!                   if Msg (J) = ':' then
!                      Colon := J;
!                      exit;
!                   end if;
!                end loop;
! 
!                pragma Assert (Colon > 0);
! 
!                Txt := new String'(SGR_Error
!                                   & Msg (Msg'First .. Colon)
!                                   & SGR_Reset
!                                   & Msg (Colon + 1 .. Msg'Last));
!             end;
!          end if;
  
        --  All other cases, add "error: " if unique error tag set
  
        elsif Opt.Unique_Error_Tag then
!          Txt := new String'(SGR_Error & "error: " & SGR_Reset & Txt.all);
        end if;
  
        --  Set error message line length and length of message
*************** package body Erroutc is
*** 813,818 ****
--- 841,891 ----
     procedure Prescan_Message (Msg : String) is
        J : Natural;
  
+       function Parse_Message_Class return String;
+       --  Convert the warning insertion sequence to a warning class represented
+       --  as a length-two string padded, if necessary, with spaces.
+       --  Return the Message class and set the iterator J to the character
+       --  following the sequence.
+       --  Raise a Program_Error if the insertion sequence is not valid.
+ 
+       -------------------------
+       -- Parse_Message_Class --
+       -------------------------
+ 
+       function Parse_Message_Class return String is
+          C : constant Character := Msg (J - 1);
+          Message_Class : String (1 .. 2) := "  ";
+       begin
+          if J <= Msg'Last and then Msg (J) = C then
+             Message_Class := "? ";
+             J := J + 1;
+ 
+          elsif J < Msg'Last and then Msg (J + 1) = C
+            and then Msg (J) in 'a' .. 'z' | '*' | '$'
+          then
+             Message_Class := Msg (J) & " ";
+             J := J + 2;
+ 
+          elsif J + 1 < Msg'Last and then Msg (J + 2) = C
+            and then Msg (J) in '.' | '_'
+            and then Msg (J + 1) in 'a' .. 'z'
+          then
+             Message_Class := Msg (J .. J + 1);
+             J := J + 3;
+          elsif (J < Msg'Last and then Msg (J + 1) = C) or else
+             (J + 1 < Msg'Last and then Msg (J + 2) = C)
+          then
+             raise Program_Error;
+          end if;
+ 
+          --  In any other cases, this is not a warning insertion sequence
+          --  and the default "  " value is returned.
+ 
+          return Message_Class;
+       end Parse_Message_Class;
+ 
+    --  Start of processing for Prescan_Message
+ 
     begin
        --  Nothing to do for continuation line, unless -gnatdF is set
  
*************** package body Erroutc is
*** 820,826 ****
           return;
  
        --  Some global variables are not set for continuation messages, as they
!       --  only make sense for the initial mesage.
  
        elsif Msg (Msg'First) /= '\' then
  
--- 893,899 ----
           return;
  
        --  Some global variables are not set for continuation messages, as they
!       --  only make sense for the initial message.
  
        elsif Msg (Msg'First) /= '\' then
  
*************** package body Erroutc is
*** 829,834 ****
--- 902,908 ----
           Is_Serious_Error     := True;
           Is_Unconditional_Msg := False;
           Is_Warning_Msg       := False;
+          Is_Runtime_Raise     := False;
  
           --  Check style message
  
*************** package body Erroutc is
*** 872,900 ****
  
           elsif Msg (J) = '?' or else Msg (J) = '<' then
              Is_Warning_Msg := Msg (J) = '?' or else Error_Msg_Warn;
-             Warning_Msg_Char := ' ';
              J := J + 1;
  
              if Is_Warning_Msg then
!                declare
!                   C : constant Character := Msg (J - 1);
!                begin
!                   if J <= Msg'Last then
!                      if Msg (J) = C then
!                         Warning_Msg_Char := '?';
!                         J := J + 1;
! 
!                      elsif J < Msg'Last and then Msg (J + 1) = C
!                        and then (Msg (J) in 'a' .. 'z' or else
!                                  Msg (J) in 'A' .. 'Z' or else
!                                  Msg (J) = '*'         or else
!                                  Msg (J) = '$')
!                      then
!                         Warning_Msg_Char := Msg (J);
!                         J := J + 2;
!                      end if;
!                   end if;
!                end;
              end if;
  
              --  Bomb if untagged warning message. This code can be uncommented
--- 946,955 ----
  
           elsif Msg (J) = '?' or else Msg (J) = '<' then
              Is_Warning_Msg := Msg (J) = '?' or else Error_Msg_Warn;
              J := J + 1;
  
              if Is_Warning_Msg then
!                Warning_Msg_Char := Parse_Message_Class;
              end if;
  
              --  Bomb if untagged warning message. This code can be uncommented
*************** package body Erroutc is
*** 955,962 ****
        function To_Be_Purged (E : Error_Msg_Id) return Boolean is
        begin
           if E /= No_Error_Msg
!            and then Errors.Table (E).Sptr > From
!            and then Errors.Table (E).Sptr < To
           then
              if Errors.Table (E).Warn or else Errors.Table (E).Style then
                 Warnings_Detected := Warnings_Detected - 1;
--- 1010,1017 ----
        function To_Be_Purged (E : Error_Msg_Id) return Boolean is
        begin
           if E /= No_Error_Msg
!            and then Errors.Table (E).Sptr.Ptr > From
!            and then Errors.Table (E).Sptr.Ptr < To
           then
              if Errors.Table (E).Warn or else Errors.Table (E).Style then
                 Warnings_Detected := Warnings_Detected - 1;
*************** package body Erroutc is
*** 1093,1109 ****
        end if;
  
        --  The following assignments ensure that the second and third {
!       --  insertion characters will correspond to the Error_Msg_File_2 and
!       --  Error_Msg_File_3 values and We suppress possible validity checks in
!       --  case operating in -gnatVa mode, and Error_Msg_File_2 or
!       --  Error_Msg_File_3 is not needed and has not been set.
  
!       declare
!          pragma Suppress (Range_Check);
!       begin
!          Error_Msg_File_1 := Error_Msg_File_2;
!          Error_Msg_File_2 := Error_Msg_File_3;
!       end;
     end Set_Msg_Insertion_File_Name;
  
     -----------------------------------
--- 1148,1158 ----
        end if;
  
        --  The following assignments ensure that the second and third {
!       --  insertion characters will correspond to the Error_Msg_File_2
!       --  and Error_Msg_File_3 values.
  
!       Error_Msg_File_1 := Error_Msg_File_2;
!       Error_Msg_File_2 := Error_Msg_File_3;
     end Set_Msg_Insertion_File_Name;
  
     -----------------------------------
*************** package body Erroutc is
*** 1178,1184 ****
           else
              Set_At;
              Set_Msg_Str ("line ");
-             Int_File := False;
              Set_Msg_Int (Int (Get_Logical_Line_Number (Loc)));
           end if;
  
--- 1227,1232 ----
*************** package body Erroutc is
*** 1273,1288 ****
  
        --  The following assignments ensure that the second and third percent
        --  insertion characters will correspond to the Error_Msg_Name_2 and
!       --  Error_Msg_Name_3 as required. We suppress possible validity checks in
!       --  case operating in -gnatVa mode, and Error_Msg_Name_1/2 is not needed
!       --  and has not been set.
  
!       declare
!          pragma Suppress (Range_Check);
!       begin
!          Error_Msg_Name_1 := Error_Msg_Name_2;
!          Error_Msg_Name_2 := Error_Msg_Name_3;
!       end;
     end Set_Msg_Insertion_Name;
  
     ------------------------------------
--- 1321,1330 ----
  
        --  The following assignments ensure that the second and third percent
        --  insertion characters will correspond to the Error_Msg_Name_2 and
!       --  Error_Msg_Name_3 as required.
  
!       Error_Msg_Name_1 := Error_Msg_Name_2;
!       Error_Msg_Name_2 := Error_Msg_Name_3;
     end Set_Msg_Insertion_Name;
  
     ------------------------------------
*************** package body Erroutc is
*** 1308,1323 ****
  
        --  The following assignments ensure that the second and third % or %%
        --  insertion characters will correspond to the Error_Msg_Name_2 and
!       --  Error_Msg_Name_3 values and We suppress possible validity checks in
!       --  case operating in -gnatVa mode, and Error_Msg_Name_2 or
!       --  Error_Msg_Name_3 is not needed and has not been set.
  
!       declare
!          pragma Suppress (Range_Check);
!       begin
!          Error_Msg_Name_1 := Error_Msg_Name_2;
!          Error_Msg_Name_2 := Error_Msg_Name_3;
!       end;
     end Set_Msg_Insertion_Name_Literal;
  
     -------------------------------------
--- 1350,1359 ----
  
        --  The following assignments ensure that the second and third % or %%
        --  insertion characters will correspond to the Error_Msg_Name_2 and
!       --  Error_Msg_Name_3 values.
  
!       Error_Msg_Name_1 := Error_Msg_Name_2;
!       Error_Msg_Name_2 := Error_Msg_Name_3;
     end Set_Msg_Insertion_Name_Literal;
  
     -------------------------------------
*************** package body Erroutc is
*** 1401,1415 ****
        end loop;
  
        --  The following assignment ensures that a second caret insertion
!       --  character will correspond to the Error_Msg_Uint_2 parameter. We
!       --  suppress possible validity checks in case operating in -gnatVa mode,
!       --  and Error_Msg_Uint_2 is not needed and has not been set.
  
!       declare
!          pragma Suppress (Range_Check);
!       begin
!          Error_Msg_Uint_1 := Error_Msg_Uint_2;
!       end;
     end Set_Msg_Insertion_Uint;
  
     -----------------
--- 1437,1445 ----
        end loop;
  
        --  The following assignment ensures that a second caret insertion
!       --  character will correspond to the Error_Msg_Uint_2 parameter.
  
!       Error_Msg_Uint_1 := Error_Msg_Uint_2;
     end Set_Msg_Insertion_Uint;
  
     -----------------
*************** package body Erroutc is
*** 1683,1689 ****
  
                 if SWE.Open then
                    Eproc.all
!                     ("?W?pragma Warnings Off with no matching Warnings On",
                       SWE.Start);
  
                 --  Warn for ineffective Warnings (Off, ..)
--- 1713,1719 ----
  
                 if SWE.Open then
                    Eproc.all
!                     ("?.w?pragma Warnings Off with no matching Warnings On",
                       SWE.Start);
  
                 --  Warn for ineffective Warnings (Off, ..)
*************** package body Erroutc is
*** 1698,1704 ****
                     (SWE.Msg'Length > 3 and then SWE.Msg (2 .. 3) = "-W")
                 then
                    Eproc.all
!                     ("?W?no warning suppressed by this pragma", SWE.Start);
                 end if;
              end if;
           end;
--- 1728,1734 ----
                     (SWE.Msg'Length > 3 and then SWE.Msg (2 .. 3) = "-W")
                 then
                    Eproc.all
!                     ("?.w?no warning suppressed by this pragma", SWE.Start);
                 end if;
              end if;
           end;
diff -Nrcpad gcc-11.3.0/gcc/ada/erroutc.ads gcc-12.1.0/gcc/ada/erroutc.ads
*** gcc-11.3.0/gcc/ada/erroutc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/erroutc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Erroutc is
*** 69,75 ****
  
     Is_Warning_Msg : Boolean := False;
     --  Set True to indicate if current message is warning message (contains ?
!    --  or contains < and Error_Msg_Warn is True.
  
     Is_Info_Msg : Boolean := False;
     --  Set True to indicate that the current message starts with the characters
--- 69,80 ----
  
     Is_Warning_Msg : Boolean := False;
     --  Set True to indicate if current message is warning message (contains ?
!    --  or contains < and Error_Msg_Warn is True).
! 
!    Is_Runtime_Raise : Boolean := False;
!    --  Set to True to indicate that the current message is a warning about a
!    --  constraint error that will be raised at runtime (contains [ and switch
!    --  -gnatwE was given).
  
     Is_Info_Msg : Boolean := False;
     --  Set True to indicate that the current message starts with the characters
*************** package Erroutc is
*** 80,93 ****
     --  Set True to indicate that the current message starts with one of
     --  "high: ", "medium: ", "low: " and is to be treated as a check message.
  
!    Warning_Msg_Char : Character;
!    --  Warning character, valid only if Is_Warning_Msg is True
!    --    ' '      -- ?   or <   appeared on its own in message
!    --    '?'      -- ??  or <<  appeared in message
!    --    'x'      -- ?x? or <x< appeared in message (x = a .. z)
!    --    'X'      -- ?X? or <X< appeared in message (X = A .. Z)
!    --    '*'      -- ?*? or <*< appeared in message
!    --    '$'      -- ?$? or <$< appeared in message
     --  In the case of the < sequences, this is set only if the message is
     --  actually a warning, i.e. if Error_Msg_Warn is True
  
--- 85,98 ----
     --  Set True to indicate that the current message starts with one of
     --  "high: ", "medium: ", "low: " and is to be treated as a check message.
  
!    Warning_Msg_Char : String (1 .. 2);
!    --  Warning switch, valid only if Is_Warning_Msg is True
!    --    "  "      -- ?   or <   appeared on its own in message
!    --    "? "      -- ??  or <<  appeared in message
!    --    "x "      -- ?x? or <x< appeared in message
!    --              -- (x = a .. z | A .. Z | * | $)
!    --    ".x"      -- ?.x? appeared in message (x = a .. z | A .. Z)
!    --    "_x"      -- ?_x? appeared in message (x = a .. z | A .. Z)
     --  In the case of the < sequences, this is set only if the message is
     --  actually a warning, i.e. if Error_Msg_Warn is True
  
*************** package Erroutc is
*** 197,203 ****
        --  refers to a template, always references the original template
        --  not an instantiation copy.
  
!       Sptr : Source_Ptr;
        --  Flag pointer. In the case of an error that refers to a template,
        --  always references the original template, not an instantiation copy.
        --  This value is the actual place in the source that the error message
--- 202,208 ----
        --  refers to a template, always references the original template
        --  not an instantiation copy.
  
!       Sptr : Source_Span;
        --  Flag pointer. In the case of an error that refers to a template,
        --  always references the original template, not an instantiation copy.
        --  This value is the actual place in the source that the error message
*************** package Erroutc is
*** 239,254 ****
        --  True if this is a warning message which is to be treated as an error
        --  as a result of a match with a Warning_As_Error pragma.
  
!       Warn_Chr : Character;
!       --  Warning character (note: set even if Warning_Doc_Switch is False)
!       --    ' '      -- ?   or <   appeared on its own in message
!       --    '?'      -- ??  or <<  appeared in message
!       --    'x'      -- ?x? or <x< appeared in message (x = a .. z)
!       --    'X'      -- ?X? or <X< appeared in message (X = A .. Z)
!       --    '*'      -- ?*? or <*< appeared in message
!       --    '$'      -- ?$? or <$< appeared in message
!       --  In the case of the < sequences, this is set only if the message is
!       --  actually a warning, i.e. if Error_Msg_Warn is True
  
        Style : Boolean;
        --  True if style message (starts with "(style)")
--- 244,255 ----
        --  True if this is a warning message which is to be treated as an error
        --  as a result of a match with a Warning_As_Error pragma.
  
!       Warn_Runtime_Raise : Boolean;
!       --  True if this a warning about a constraint error that will be raised
!       --  at runtime.
! 
!       Warn_Chr : String (1 .. 2);
!       --  See Warning_Msg_Char
  
        Style : Boolean;
        --  True if style message (starts with "(style)")
*************** package Erroutc is
*** 390,395 ****
--- 391,456 ----
     --  find such an On entry, we cancel the indication of it being the
     --  configuration case. This seems to handle all cases we run into ok.
  
+    -------------------
+    -- Color Control --
+    -------------------
+ 
+    Use_SGR_Control : Boolean := False;
+    --  Set to True for enabling colored output. This should only be done when
+    --  outputting messages to a terminal that supports it.
+ 
+    --  Colors in messages output to a terminal are controlled using SGR
+    --  (Select Graphic Rendition).
+ 
+    Color_Separator  : constant String := ";";
+    Color_None       : constant String := "00";
+    Color_Bold       : constant String := "01";
+    Color_Underscore : constant String := "04";
+    Color_Blink      : constant String := "05";
+    Color_Reverse    : constant String := "07";
+    Color_Fg_Black   : constant String := "30";
+    Color_Fg_Red     : constant String := "31";
+    Color_Fg_Green   : constant String := "32";
+    Color_Fg_Yellow  : constant String := "33";
+    Color_Fg_Blue    : constant String := "34";
+    Color_Fg_Magenta : constant String := "35";
+    Color_Fg_Cyan    : constant String := "36";
+    Color_Fg_White   : constant String := "37";
+    Color_Bg_Black   : constant String := "40";
+    Color_Bg_Red     : constant String := "41";
+    Color_Bg_Green   : constant String := "42";
+    Color_Bg_Yellow  : constant String := "43";
+    Color_Bg_Blue    : constant String := "44";
+    Color_Bg_Magenta : constant String := "45";
+    Color_Bg_Cyan    : constant String := "46";
+    Color_Bg_White   : constant String := "47";
+ 
+    SGR_Start        : constant String := ASCII.ESC & "[";
+    SGR_End          : constant String := "m" & ASCII.ESC & "[K";
+ 
+    function SGR_Seq (Str : String) return String is
+      (if Use_SGR_Control then SGR_Start & Str & SGR_End else "");
+    --  Return the SGR control string for the commands in Str. It returns the
+    --  empty string if Use_SGR_Control is False, so that we can insert this
+    --  string unconditionally.
+ 
+    function SGR_Reset return String is (SGR_Seq (""));
+    --  This ends the current section of colored output
+ 
+    --  We're using the same colors as gcc/g++ for errors/warnings/notes/locus.
+    --  More colors are defined in gcc/g++ for other features of diagnostic
+    --  messages (e.g. inline types, fixit) and could be used in GNAT in the
+    --  future. The following functions start a section of colored output.
+ 
+    function SGR_Error return String is
+      (SGR_Seq (Color_Bold & Color_Separator & Color_Fg_Red));
+    function SGR_Warning return String is
+      (SGR_Seq (Color_Bold & Color_Separator & Color_Fg_Magenta));
+    function SGR_Note return String is
+      (SGR_Seq (Color_Bold & Color_Separator & Color_Fg_Cyan));
+    function SGR_Locus return String is
+      (SGR_Seq (Color_Bold));
+ 
     -----------------
     -- Subprograms --
     -----------------
*************** package Erroutc is
*** 436,441 ****
--- 497,507 ----
     --  Given an error message ID, return tag showing warning message class, or
     --  the null string if this option is not enabled or this is not a warning.
  
+    function Matches (S : String; P : String) return Boolean;
+    --  Returns true if the String S matches the pattern P, which can contain
+    --  wildcard chars (*). The entire pattern must match the entire string.
+    --  Case is ignored in the comparison (so X matches x).
+ 
     procedure Output_Error_Msgs (E : in out Error_Msg_Id);
     --  Output source line, error flag, and text of stored error message and all
     --  subsequent messages for the same line and unit. On return E is set to be
diff -Nrcpad gcc-11.3.0/gcc/ada/errutil.adb gcc-12.1.0/gcc/ada/errutil.adb
*** gcc-11.3.0/gcc/ada/errutil.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/errutil.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
*************** package body Errutil is
*** 207,213 ****
              Next                => No_Error_Msg,
              Prev                => No_Error_Msg,
              Sfile               => Get_Source_File_Index (Sptr),
!             Sptr                => Sptr,
              Optr                => Optr,
              Insertion_Sloc      => No_Location,
              Line                => Get_Physical_Line_Number (Sptr),
--- 207,213 ----
              Next                => No_Error_Msg,
              Prev                => No_Error_Msg,
              Sfile               => Get_Source_File_Index (Sptr),
!             Sptr                => To_Span (Sptr),
              Optr                => Optr,
              Insertion_Sloc      => No_Location,
              Line                => Get_Physical_Line_Number (Sptr),
*************** package body Errutil is
*** 217,222 ****
--- 217,223 ----
              Info                => Is_Info_Msg,
              Check               => Is_Check_Msg,
              Warn_Err            => Warning_Mode = Treat_As_Error,
+             Warn_Runtime_Raise  => Is_Runtime_Raise,
              Warn_Chr            => Warning_Msg_Char,
              Style               => Is_Style_Msg,
              Serious             => Is_Serious_Error,
*************** package body Errutil is
*** 234,240 ****
             Errors.Table (Cur_Msg).Sfile < Errors.Table (Next_Msg).Sfile;
  
           if Errors.Table (Cur_Msg).Sfile = Errors.Table (Next_Msg).Sfile then
!             exit when Sptr < Errors.Table (Next_Msg).Sptr;
           end if;
  
           Prev_Msg := Next_Msg;
--- 235,241 ----
             Errors.Table (Cur_Msg).Sfile < Errors.Table (Next_Msg).Sfile;
  
           if Errors.Table (Cur_Msg).Sfile = Errors.Table (Next_Msg).Sfile then
!             exit when Sptr < Errors.Table (Next_Msg).Sptr.Ptr;
           end if;
  
           Prev_Msg := Next_Msg;
diff -Nrcpad gcc-11.3.0/gcc/ada/errutil.ads gcc-12.1.0/gcc/ada/errutil.ads
*** gcc-11.3.0/gcc/ada/errutil.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/errutil.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/eval_fat.adb gcc-12.1.0/gcc/ada/eval_fat.adb
*** gcc-11.3.0/gcc/ada/eval_fat.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/eval_fat.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,32 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Opt;      use Opt;
! with Sem_Util; use Sem_Util;
  
  package body Eval_Fat is
  
--- 23,33 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Einfo;          use Einfo;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Opt;            use Opt;
! with Sem_Util;       use Sem_Util;
  
  package body Eval_Fat is
  
*************** package body Eval_Fat is
*** 729,758 ****
        New_Frac : T;
  
     begin
        if UR_Is_Zero (X) then
!          Exp := Emin;
        end if;
  
!       --  Set exponent such that the radix point will be directly following the
!       --  mantissa after scaling.
! 
!       if Has_Denormals (RT) or Exp /= Emin then
!          Exp := Exp - Mantissa;
!       else
!          Exp := Exp - 1;
!       end if;
  
        Frac := Scaling (RT, X, -Exp);
        New_Frac := Ceiling (RT, Frac);
  
        if New_Frac = Frac then
           if New_Frac = Scaling (RT, -Ureal_1, Mantissa - 1) then
!             New_Frac := New_Frac + Scaling (RT, Ureal_1, Uint_Minus_1);
           else
              New_Frac := New_Frac + Ureal_1;
           end if;
        end if;
  
        return Scaling (RT, New_Frac, Exp);
     end Succ;
  
--- 730,769 ----
        New_Frac : T;
  
     begin
+       --  Treat zero as a regular denormalized number if they are supported,
+       --  otherwise return the smallest normalized number.
+ 
        if UR_Is_Zero (X) then
!          if Has_Denormals (RT) then
!             Exp := Emin;
!          else
!             return Scaling (RT, Ureal_Half, Emin);
!          end if;
        end if;
  
!       --  Multiply the number by 2.0**(Mantissa-Exp) so that the radix point
!       --  will be directly following the mantissa after scaling.
  
+       Exp := Exp - Mantissa;
        Frac := Scaling (RT, X, -Exp);
+ 
+       --  Round to the neareast integer towards +Inf
+ 
        New_Frac := Ceiling (RT, Frac);
  
+       --  If the rounding was a NOP, add one, except for -2.0**(Mantissa-1)
+       --  because the exponent is going to be reduced.
+ 
        if New_Frac = Frac then
           if New_Frac = Scaling (RT, -Ureal_1, Mantissa - 1) then
!             New_Frac := New_Frac + Ureal_Half;
           else
              New_Frac := New_Frac + Ureal_1;
           end if;
        end if;
  
+       --  Divide back by 2.0**(Mantissa-Exp) to get the final result
+ 
        return Scaling (RT, New_Frac, Exp);
     end Succ;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/eval_fat.ads gcc-12.1.0/gcc/ada/eval_fat.ads
*** gcc-11.3.0/gcc/ada/eval_fat.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/eval_fat.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Eval_Fat is
*** 85,92 ****
  
     type Rounding_Mode is (Floor, Ceiling, Round, Round_Even);
     for Rounding_Mode use (0, 1, 2, 3);
     --  Used to indicate rounding mode for Machine attribute
-    --  Note that C code in gigi knows that Round_Even is 3
  
     --  The Machine attribute is special, in that it takes an extra argument
     --  indicating the rounding mode, and also an argument Enode that is a
--- 85,92 ----
  
     type Rounding_Mode is (Floor, Ceiling, Round, Round_Even);
     for Rounding_Mode use (0, 1, 2, 3);
+    pragma Convention (C, Rounding_Mode);
     --  Used to indicate rounding mode for Machine attribute
  
     --  The Machine attribute is special, in that it takes an extra argument
     --  indicating the rounding mode, and also an argument Enode that is a
*************** package Eval_Fat is
*** 99,104 ****
--- 99,106 ----
        Mode  : Rounding_Mode;
        Enode : Node_Id) return T;
  
+    --  WARNING: There is a matching C declaration of this function in urealp.h
+ 
     procedure Decompose_Int
       (RT       : R;
        X        : T;
diff -Nrcpad gcc-11.3.0/gcc/ada/exit.c gcc-12.1.0/gcc/ada/exit.c
*** gcc-11.3.0/gcc/ada/exit.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exit.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_aggr.adb gcc-12.1.0/gcc/ada/exp_aggr.adb
*** gcc-11.3.0/gcc/ada/exp_aggr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_aggr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,71 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Expander; use Expander;
! with Exp_Util; use Exp_Util;
! with Exp_Ch3;  use Exp_Ch3;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_Ch7;  use Exp_Ch7;
! with Exp_Ch9;  use Exp_Ch9;
! with Exp_Disp; use Exp_Disp;
! with Exp_Tss;  use Exp_Tss;
! with Freeze;   use Freeze;
! with Itypes;   use Itypes;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nmake;    use Nmake;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Ttypes;   use Ttypes;
! with Sem;      use Sem;
! with Sem_Aggr; use Sem_Aggr;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Ch13; use Sem_Ch13;
! with Sem_Eval; use Sem_Eval;
! with Sem_Mech; use Sem_Mech;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Urealp;   use Urealp;
  
  package body Exp_Aggr is
  
--- 23,76 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Expander;       use Expander;
! with Exp_Util;       use Exp_Util;
! with Exp_Ch3;        use Exp_Ch3;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Ch9;        use Exp_Ch9;
! with Exp_Disp;       use Exp_Disp;
! with Exp_Tss;        use Exp_Tss;
! with Freeze;         use Freeze;
! with Itypes;         use Itypes;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nmake;          use Nmake;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Ttypes;         use Ttypes;
! with Sem;            use Sem;
! with Sem_Aggr;       use Sem_Aggr;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Case;       use Sem_Case;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Mech;       use Sem_Mech;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Urealp;         use Urealp;
  
  package body Exp_Aggr is
  
*************** package body Exp_Aggr is
*** 78,92 ****
     type Case_Table_Type is array (Nat range <>) of Case_Bounds;
     --  Table type used by Check_Case_Choices procedure
  
-    procedure Collect_Initialization_Statements
-      (Obj        : Entity_Id;
-       N          : Node_Id;
-       Node_After : Node_Id);
-    --  If Obj is not frozen, collect actions inserted after N until, but not
-    --  including, Node_After, for initialization of Obj, and move them to an
-    --  expression with actions, which becomes the Initialization_Statements for
-    --  Obj.
- 
     procedure Expand_Delta_Array_Aggregate  (N : Node_Id; Deltas : List_Id);
     procedure Expand_Delta_Record_Aggregate (N : Node_Id; Deltas : List_Id);
     procedure Expand_Container_Aggregate (N : Node_Id);
--- 83,88 ----
*************** package body Exp_Aggr is
*** 128,134 ****
     --  constants that are done in place.
  
     function Must_Slide
!      (Obj_Type : Entity_Id;
        Typ      : Entity_Id) return Boolean;
     --  A static array aggregate in an object declaration can in most cases be
     --  expanded in place. The one exception is when the aggregate is given
--- 124,131 ----
     --  constants that are done in place.
  
     function Must_Slide
!      (Aggr     : Node_Id;
!       Obj_Type : Entity_Id;
        Typ      : Entity_Id) return Boolean;
     --  A static array aggregate in an object declaration can in most cases be
     --  expanded in place. The one exception is when the aggregate is given
*************** package body Exp_Aggr is
*** 172,180 ****
     --  Subsidiary to the expansion of array and record aggregates. Generate
     --  part of the necessary code to finalize a transient component. Aggr is
     --  the related aggregate. Fin_Clear is the finalization call used to clean
!    --  up the transient component. Hook_Clear is the hook reset statment. Stmts
!    --  is the initialization statement list for the component. All generated
!    --  code is added to Stmts.
  
     procedure Sort_Case_Table (Case_Table : in out Case_Table_Type);
     --  Sort the Case Table using the Lower Bound of each Choice as the key.
--- 169,177 ----
     --  Subsidiary to the expansion of array and record aggregates. Generate
     --  part of the necessary code to finalize a transient component. Aggr is
     --  the related aggregate. Fin_Clear is the finalization call used to clean
!    --  up the transient component. Hook_Clear is the hook reset statement.
!    --  Stmts is the initialization statement list for the component. All
!    --  generated code is added to Stmts.
  
     procedure Sort_Case_Table (Case_Table : in out Case_Table_Type);
     --  Sort the Case Table using the Lower Bound of each Choice as the key.
*************** package body Exp_Aggr is
*** 379,393 ****
     --  specifically optimized for the target.
  
     function Aggr_Assignment_OK_For_Backend (N : Node_Id) return Boolean is
-       Csiz      : Uint := No_Uint;
-       Ctyp      : Entity_Id;
-       Expr      : Node_Id;
-       High      : Node_Id;
-       Index     : Entity_Id;
-       Low       : Node_Id;
-       Nunits    : Int;
-       Remainder : Uint;
-       Value     : Uint;
  
        function Is_OK_Aggregate (Aggr : Node_Id) return Boolean;
        --  Return true if Aggr is suitable for back-end assignment
--- 376,381 ----
*************** package body Exp_Aggr is
*** 426,431 ****
--- 414,428 ----
           return Nkind (First (Assoc)) /= N_Iterated_Component_Association;
        end Is_OK_Aggregate;
  
+       Bounds    : Range_Nodes;
+       Csiz      : Uint := No_Uint;
+       Ctyp      : Entity_Id;
+       Expr      : Node_Id;
+       Index     : Entity_Id;
+       Nunits    : Int;
+       Remainder : Uint;
+       Value     : Uint;
+ 
     --  Start of processing for Aggr_Assignment_OK_For_Backend
  
     begin
*************** package body Exp_Aggr is
*** 448,456 ****
  
           Index := First_Index (Ctyp);
           while Present (Index) loop
!             Get_Index_Bounds (Index, Low, High);
  
!             if Is_Null_Range (Low, High) then
                 return False;
              end if;
  
--- 445,453 ----
  
           Index := First_Index (Ctyp);
           while Present (Index) loop
!             Bounds := Get_Index_Bounds (Index);
  
!             if Is_Null_Range (Bounds.First, Bounds.Last) then
                 return False;
              end if;
  
*************** package body Exp_Aggr is
*** 493,499 ****
           --  Fat pointers are rejected as they are not really elementary
           --  for the backend.
  
!          if Csiz /= System_Address_Size then
              return False;
           end if;
  
--- 490,496 ----
           --  Fat pointers are rejected as they are not really elementary
           --  for the backend.
  
!          if No (Csiz) or else Csiz /= System_Address_Size then
              return False;
           end if;
  
*************** package body Exp_Aggr is
*** 507,514 ****
  
        --  Scalar types are OK if their size is a multiple of Storage_Unit
  
!       elsif Is_Scalar_Type (Ctyp) then
!          pragma Assert (Csiz /= No_Uint);
  
           if Csiz mod System_Storage_Unit /= 0 then
              return False;
--- 504,510 ----
  
        --  Scalar types are OK if their size is a multiple of Storage_Unit
  
!       elsif Is_Scalar_Type (Ctyp) and then Present (Csiz) then
  
           if Csiz mod System_Storage_Unit /= 0 then
              return False;
*************** package body Exp_Aggr is
*** 688,696 ****
     begin
        --  We bump the maximum size unless the aggregate has a single component
        --  association, which will be more efficient if implemented with a loop.
  
!       if No (Expressions (N))
!         and then No (Next (First (Component_Associations (N))))
        then
           Max_Aggr_Size := Max_Aggregate_Size (N);
        else
--- 684,694 ----
     begin
        --  We bump the maximum size unless the aggregate has a single component
        --  association, which will be more efficient if implemented with a loop.
+       --  The -gnatd_g switch disables this bumping.
  
!       if (No (Expressions (N))
!             and then No (Next (First (Component_Associations (N)))))
!         or else Debug_Flag_Underscore_G
        then
           Max_Aggr_Size := Max_Aggregate_Size (N);
        else
*************** package body Exp_Aggr is
*** 1023,1029 ****
  
     --  2. If the aggregate contains positional elements we
  
!    --     (a) translate the positional elements in a series of assignments
  
     --     (b) Generate a final loop to cover the others choice if any.
     --         Note that this final loop has to be a while loop since the case
--- 1021,1027 ----
  
     --  2. If the aggregate contains positional elements we
  
!    --     (a) Translate the positional elements in a series of assignments
  
     --     (b) Generate a final loop to cover the others choice if any.
     --         Note that this final loop has to be a while loop since the case
*************** package body Exp_Aggr is
*** 1034,1040 ****
  
     --         cannot be handled by a for loop. Thus for the following
  
!    --             array (L .. H) := (.. positional elements.., others =>E);
  
     --         we always generate something like:
  
--- 1032,1038 ----
  
     --         cannot be handled by a for loop. Thus for the following
  
!    --             array (L .. H) := (.. positional elements.., others => E);
  
     --         we always generate something like:
  
*************** package body Exp_Aggr is
*** 1778,1784 ****
                 if Nkind (Parent (N)) = N_Assignment_Statement
                   and then Is_Array_Type (Comp_Typ)
                   and then Present (Component_Associations (Expr_Q))
!                  and then Must_Slide (Comp_Typ, Etype (Expr_Q))
                 then
                    Set_Expansion_Delayed (Expr_Q, False);
                    Set_Analyzed (Expr_Q, False);
--- 1776,1782 ----
                 if Nkind (Parent (N)) = N_Assignment_Statement
                   and then Is_Array_Type (Comp_Typ)
                   and then Present (Component_Associations (Expr_Q))
!                  and then Must_Slide (N, Comp_Typ, Etype (Expr_Q))
                 then
                    Set_Expansion_Delayed (Expr_Q, False);
                    Set_Analyzed (Expr_Q, False);
*************** package body Exp_Aggr is
*** 1874,1885 ****
                    Set_Etype (Indexed_Comp, Ctype);
                    Append_To (Stmts, Make_Invariant_Call (Indexed_Comp));
                 end if;
- 
-             elsif Is_Access_Type (Ctype) then
-                Append_To (Stmts,
-                  Make_Assignment_Statement (Loc,
-                    Name       => New_Copy_Tree (Indexed_Comp),
-                    Expression => Make_Null (Loc)));
              end if;
  
              if Needs_Finalization (Ctype) then
--- 1872,1877 ----
*************** package body Exp_Aggr is
*** 1922,1928 ****
  
        function Gen_Loop (L, H : Node_Id; Expr : Node_Id) return List_Id is
           Is_Iterated_Component : constant Boolean :=
!            Nkind (Parent (Expr)) = N_Iterated_Component_Association;
  
           L_J : Node_Id;
  
--- 1914,1920 ----
  
        function Gen_Loop (L, H : Node_Id; Expr : Node_Id) return List_Id is
           Is_Iterated_Component : constant Boolean :=
!            Parent_Kind (Expr) = N_Iterated_Component_Association;
  
           L_J : Node_Id;
  
*************** package body Exp_Aggr is
*** 2071,2081 ****
           --  Construct "for L_J in Index_Base range L .. H"
  
           L_Iteration_Scheme :=
!            Make_Iteration_Scheme
!              (Loc,
                Loop_Parameter_Specification =>
!                 Make_Loop_Parameter_Specification
!                   (Loc,
                     Defining_Identifier         => L_J,
                     Discrete_Subtype_Definition => L_Range));
  
--- 2063,2071 ----
           --  Construct "for L_J in Index_Base range L .. H"
  
           L_Iteration_Scheme :=
!            Make_Iteration_Scheme (Loc,
                Loop_Parameter_Specification =>
!                 Make_Loop_Parameter_Specification (Loc,
                     Defining_Identifier         => L_J,
                     Discrete_Subtype_Definition => L_Range));
  
*************** package body Exp_Aggr is
*** 2214,2228 ****
  
        begin
           if Box_Present (Assoc) then
!             if Is_Scalar_Type (Ctype) then
!                if Present (Default_Aspect_Component_Value (Typ)) then
!                   return Default_Aspect_Component_Value (Typ);
!                elsif Present (Default_Aspect_Value (Ctype)) then
!                   return Default_Aspect_Value (Ctype);
!                else
!                   return Empty;
!                end if;
! 
              else
                 return Empty;
              end if;
--- 2204,2213 ----
  
        begin
           if Box_Present (Assoc) then
!             if Present (Default_Aspect_Component_Value (Typ)) then
!                return Default_Aspect_Component_Value (Typ);
!             elsif Needs_Simple_Initialization (Ctype) then
!                return Get_Simple_Init_Val (Ctype, N);
              else
                 return Empty;
              end if;
*************** package body Exp_Aggr is
*** 2284,2293 ****
        Assoc  : Node_Id;
        Choice : Node_Id;
        Expr   : Node_Id;
-       High   : Node_Id;
-       Low    : Node_Id;
        Typ    : Entity_Id;
  
        Nb_Choices : Nat := 0;
        Table      : Case_Table_Type (1 .. Number_Of_Choices (N));
        --  Used to sort all the different choice values
--- 2269,2280 ----
        Assoc  : Node_Id;
        Choice : Node_Id;
        Expr   : Node_Id;
        Typ    : Entity_Id;
  
+       Bounds : Range_Nodes;
+       Low    : Node_Id renames Bounds.First;
+       High   : Node_Id renames Bounds.Last;
+ 
        Nb_Choices : Nat := 0;
        Table      : Case_Table_Type (1 .. Number_Of_Choices (N));
        --  Used to sort all the different choice values
*************** package body Exp_Aggr is
*** 2349,2355 ****
                    exit;
                 end if;
  
!                Get_Index_Bounds (Choice, Low, High);
  
                 if Low /= High then
                    Set_Loop_Actions (Assoc, New_List);
--- 2336,2342 ----
                    exit;
                 end if;
  
!                Bounds := Get_Index_Bounds (Choice);
  
                 if Low /= High then
                    Set_Loop_Actions (Assoc, New_List);
*************** package body Exp_Aggr is
*** 2438,2444 ****
  
                       Expr := Get_Assoc_Expr (Others_Assoc);
                       Dup_Expr := New_Copy_Tree (Expr);
!                      Set_Parent (Dup_Expr, Parent (Expr));
  
                       Set_Loop_Actions (Others_Assoc, New_List);
                       Append_List
--- 2425,2431 ----
  
                       Expr := Get_Assoc_Expr (Others_Assoc);
                       Dup_Expr := New_Copy_Tree (Expr);
!                      Copy_Parent (To => Dup_Expr, From => Expr);
  
                       Set_Loop_Actions (Others_Assoc, New_List);
                       Append_List
*************** package body Exp_Aggr is
*** 2471,2477 ****
              Assoc := Last (Component_Associations (N));
  
              if Nkind (Assoc) = N_Iterated_Component_Association then
!                --  Ada 2020: generate a loop to have a proper scope for
                 --  the identifier that typically appears in the expression.
                 --  The lower bound of the loop is the position after all
                 --  previous positional components.
--- 2458,2464 ----
              Assoc := Last (Component_Associations (N));
  
              if Nkind (Assoc) = N_Iterated_Component_Association then
!                --  Ada 2022: generate a loop to have a proper scope for
                 --  the identifier that typically appears in the expression.
                 --  The lower bound of the loop is the position after all
                 --  previous positional components.
*************** package body Exp_Aggr is
*** 3208,3213 ****
--- 3195,3202 ----
           Init_Stmt : Node_Id;
  
        begin
+          pragma Assert (Nkind (Init_Expr) in N_Subexpr);
+ 
           --  Protect the initialization statements from aborts. Generate:
  
           --    Abort_Defer;
*************** package body Exp_Aggr is
*** 3792,3797 ****
--- 3781,3806 ----
                  With_Default_Init => True,
                  Constructor_Ref   => Expression (Comp)));
  
+          elsif Box_Present (Comp)
+            and then Needs_Simple_Initialization (Etype (Selector))
+          then
+             Comp_Expr :=
+               Make_Selected_Component (Loc,
+                 Prefix        => New_Copy_Tree (Target),
+                 Selector_Name => New_Occurrence_Of (Selector, Loc));
+ 
+             Initialize_Record_Component
+               (Rec_Comp  => Comp_Expr,
+                Comp_Typ  => Etype (Selector),
+                Init_Expr => Get_Simple_Init_Val
+                               (Typ  => Etype (Selector),
+                                N    => Comp,
+                                Size =>
+                                  (if Known_Esize (Selector)
+                                   then Esize (Selector)
+                                   else Uint_0)),
+                Stmts     => L);
+ 
           --  Ada 2005 (AI-287): For each default-initialized component generate
           --  a call to the corresponding IP subprogram if available.
  
*************** package body Exp_Aggr is
*** 4003,4009 ****
                   and then Present (First_Index (Etype (Expr_Q)))
                 then
                    declare
!                      Expr_Q_Type : constant Node_Id := Etype (Expr_Q);
                    begin
                       Append_List_To (L,
                         Build_Array_Aggr_Code
--- 4012,4018 ----
                   and then Present (First_Index (Etype (Expr_Q)))
                 then
                    declare
!                      Expr_Q_Type : constant Entity_Id := Etype (Expr_Q);
                    begin
                       Append_List_To (L,
                         Build_Array_Aggr_Code
*************** package body Exp_Aggr is
*** 4210,4249 ****
        return L;
     end Build_Record_Aggr_Code;
  
-    ---------------------------------------
-    -- Collect_Initialization_Statements --
-    ---------------------------------------
- 
-    procedure Collect_Initialization_Statements
-      (Obj        : Entity_Id;
-       N          : Node_Id;
-       Node_After : Node_Id)
-    is
-       Loc          : constant Source_Ptr := Sloc (N);
-       Init_Actions : constant List_Id    := New_List;
-       Init_Node    : Node_Id;
-       Comp_Stmt    : Node_Id;
- 
-    begin
-       --  Nothing to do if Obj is already frozen, as in this case we known we
-       --  won't need to move the initialization statements about later on.
- 
-       if Is_Frozen (Obj) then
-          return;
-       end if;
- 
-       Init_Node := N;
-       while Next (Init_Node) /= Node_After loop
-          Append_To (Init_Actions, Remove_Next (Init_Node));
-       end loop;
- 
-       if not Is_Empty_List (Init_Actions) then
-          Comp_Stmt := Make_Compound_Statement (Loc, Actions => Init_Actions);
-          Insert_Action_After (Init_Node, Comp_Stmt);
-          Set_Initialization_Statements (Obj, Comp_Stmt);
-       end if;
-    end Collect_Initialization_Statements;
- 
     -------------------------------
     -- Convert_Aggr_In_Allocator --
     -------------------------------
--- 4219,4224 ----
*************** package body Exp_Aggr is
*** 4314,4319 ****
--- 4289,4296 ----
        Typ  : constant Entity_Id  := Etype (Aggr);
        Occ  : constant Node_Id    := New_Occurrence_Of (Obj, Loc);
  
+       Has_Transient_Scope : Boolean := False;
+ 
        function Discriminants_Ok return Boolean;
        --  If the object type is constrained, the discriminants in the
        --  aggregate must be checked against the discriminants of the subtype.
*************** package body Exp_Aggr is
*** 4405,4411 ****
        --  the finalization list of the return must be moved to the caller's
        --  finalization list to complete the return.
  
!       --  However, if the aggregate is limited, it is built in place, and the
        --  controlled components are not assigned to intermediate temporaries
        --  so there is no need for a transient scope in this case either.
  
--- 4382,4388 ----
        --  the finalization list of the return must be moved to the caller's
        --  finalization list to complete the return.
  
!       --  Similarly if the aggregate is limited, it is built in place, and the
        --  controlled components are not assigned to intermediate temporaries
        --  so there is no need for a transient scope in this case either.
  
*************** package body Exp_Aggr is
*** 4414,4429 ****
          and then not Is_Limited_Type (Typ)
        then
           Establish_Transient_Scope (Aggr, Manage_Sec_Stack => False);
        end if;
  
        declare
!          Node_After : constant Node_Id := Next (N);
        begin
!          Insert_Actions_After (N, Late_Expansion (Aggr, Typ, Occ));
!          Collect_Initialization_Statements (Obj, N, Node_After);
        end;
  
        Set_No_Initialization (N);
        Initialize_Discriminants (N, Typ);
     end Convert_Aggr_In_Object_Decl;
  
--- 4391,4462 ----
          and then not Is_Limited_Type (Typ)
        then
           Establish_Transient_Scope (Aggr, Manage_Sec_Stack => False);
+          Has_Transient_Scope := True;
        end if;
  
        declare
!          Stmts : constant List_Id := Late_Expansion (Aggr, Typ, Occ);
!          Stmt  : Node_Id;
!          Param : Node_Id;
! 
        begin
!          --  If Obj is already frozen or if N is wrapped in a transient scope,
!          --  Stmts do not need to be saved in Initialization_Statements since
!          --  there is no freezing issue.
! 
!          if Is_Frozen (Obj) or else Has_Transient_Scope then
!             Insert_Actions_After (N, Stmts);
!          else
!             Stmt := Make_Compound_Statement (Sloc (N), Actions => Stmts);
!             Insert_Action_After (N, Stmt);
! 
!             --  Insert_Action_After may freeze Obj in which case we should
!             --  remove the compound statement just created and simply insert
!             --  Stmts after N.
! 
!             if Is_Frozen (Obj) then
!                Remove (Stmt);
!                Insert_Actions_After (N, Stmts);
!             else
!                Set_Initialization_Statements (Obj, Stmt);
!             end if;
!          end if;
! 
!          --  If Typ has controlled components and a call to a Slice_Assign
!          --  procedure is part of the initialization statements, then we
!          --  need to initialize the array component since Slice_Assign will
!          --  need to adjust it.
! 
!          if Has_Controlled_Component (Typ) then
!             Stmt := First (Stmts);
! 
!             while Present (Stmt) loop
!                if Nkind (Stmt) = N_Procedure_Call_Statement
!                  and then Get_TSS_Name (Entity (Name (Stmt)))
!                             = TSS_Slice_Assign
!                then
!                   Param := First (Parameter_Associations (Stmt));
!                   Insert_Actions
!                     (Stmt,
!                      Build_Initialization_Call
!                        (Sloc (N), New_Copy_Tree (Param), Etype (Param)));
!                end if;
! 
!                Next (Stmt);
!             end loop;
!          end if;
        end;
  
        Set_No_Initialization (N);
+ 
+       --  After expansion the expression can be removed from the declaration
+       --  except if the object is class-wide, in which case the aggregate
+       --  provides the actual type.
+ 
+       if not Is_Class_Wide_Type (Etype (Obj)) then
+          Set_Expression (N, Empty);
+       end if;
+ 
        Initialize_Discriminants (N, Typ);
     end Convert_Aggr_In_Object_Decl;
  
*************** package body Exp_Aggr is
*** 4486,4496 ****
        Is_Array : constant Boolean := Is_Array_Type (Etype (N));
  
        Aggr_In     : Node_Id;
!       Aggr_Lo     : Node_Id;
!       Aggr_Hi     : Node_Id;
        Obj_In      : Node_Id;
!       Obj_Lo      : Node_Id;
!       Obj_Hi      : Node_Id;
        Parent_Kind : Node_Kind;
        Parent_Node : Node_Id;
  
--- 4519,4527 ----
        Is_Array : constant Boolean := Is_Array_Type (Etype (N));
  
        Aggr_In     : Node_Id;
!       Aggr_Bounds : Range_Nodes;
        Obj_In      : Node_Id;
!       Obj_Bounds  : Range_Nodes;
        Parent_Kind : Node_Kind;
        Parent_Node : Node_Id;
  
*************** package body Exp_Aggr is
*** 4801,4816 ****
           end if;
  
           while Present (Aggr_In) loop
!             Get_Index_Bounds (Aggr_In, Aggr_Lo, Aggr_Hi);
!             Get_Index_Bounds (Obj_In, Obj_Lo, Obj_Hi);
  
              --  We require static bounds for the target and a static matching
              --  of low bound for the aggregate.
  
!             if not Compile_Time_Known_Value (Obj_Lo)
!               or else not Compile_Time_Known_Value (Obj_Hi)
!               or else not Compile_Time_Known_Value (Aggr_Lo)
!               or else Expr_Value (Aggr_Lo) /= Expr_Value (Obj_Lo)
              then
                 return False;
  
--- 4832,4848 ----
           end if;
  
           while Present (Aggr_In) loop
!             Aggr_Bounds := Get_Index_Bounds (Aggr_In);
!             Obj_Bounds := Get_Index_Bounds (Obj_In);
  
              --  We require static bounds for the target and a static matching
              --  of low bound for the aggregate.
  
!             if not Compile_Time_Known_Value (Obj_Bounds.First)
!               or else not Compile_Time_Known_Value (Obj_Bounds.Last)
!               or else not Compile_Time_Known_Value (Aggr_Bounds.First)
!               or else Expr_Value (Aggr_Bounds.First) /=
!                       Expr_Value (Obj_Bounds.First)
              then
                 return False;
  
*************** package body Exp_Aggr is
*** 4826,4833 ****
              elsif Parent_Kind = N_Assignment_Statement
                or else Is_Constrained (Etype (Parent_Node))
              then
!                if not Compile_Time_Known_Value (Aggr_Hi)
!                  or else Expr_Value (Aggr_Hi) /= Expr_Value (Obj_Hi)
                 then
                    return False;
                 end if;
--- 4858,4866 ----
              elsif Parent_Kind = N_Assignment_Statement
                or else Is_Constrained (Etype (Parent_Node))
              then
!                if not Compile_Time_Known_Value (Aggr_Bounds.Last)
!                  or else Expr_Value (Aggr_Bounds.Last) /=
!                          Expr_Value (Obj_Bounds.Last)
                 then
                    return False;
                 end if;
*************** package body Exp_Aggr is
*** 4895,4907 ****
        --  Just set the Delay flag in the cases where the transformation will be
        --  done top down from above.
  
!       if False
! 
           --  Internal aggregate (transformed when expanding the parent)
  
!          or else Parent_Kind = N_Aggregate
!          or else Parent_Kind = N_Extension_Aggregate
!          or else Parent_Kind = N_Component_Association
  
           --  Allocator (see Convert_Aggr_In_Allocator)
  
--- 4928,4938 ----
        --  Just set the Delay flag in the cases where the transformation will be
        --  done top down from above.
  
!       if
           --  Internal aggregate (transformed when expanding the parent)
  
!          Parent_Kind in
!            N_Aggregate | N_Extension_Aggregate | N_Component_Association
  
           --  Allocator (see Convert_Aggr_In_Allocator)
  
*************** package body Exp_Aggr is
*** 5670,5676 ****
        --  type using the computable sizes of the aggregate and its sub-
        --  aggregates.
  
!       procedure Check_Bounds (Aggr_Bounds : Node_Id; Index_Bounds : Node_Id);
        --  Checks that the bounds of Aggr_Bounds are within the bounds defined
        --  by Index_Bounds.
  
--- 5701,5707 ----
        --  type using the computable sizes of the aggregate and its sub-
        --  aggregates.
  
!       procedure Check_Bounds (Aggr_Bounds_Node, Index_Bounds_Node : Node_Id);
        --  Checks that the bounds of Aggr_Bounds are within the bounds defined
        --  by Index_Bounds.
  
*************** package body Exp_Aggr is
*** 5694,5700 ****
        function Safe_Left_Hand_Side (N : Node_Id) return Boolean;
        --  In addition to Maybe_In_Place_OK, in order for an aggregate to be
        --  built directly into the target of the assignment it must be free
!       --  of side effects.
  
        ----------------------------
        -- Build_Constrained_Type --
--- 5725,5740 ----
        function Safe_Left_Hand_Side (N : Node_Id) return Boolean;
        --  In addition to Maybe_In_Place_OK, in order for an aggregate to be
        --  built directly into the target of the assignment it must be free
!       --  of side effects. N is the LHS of an assignment.
! 
!       procedure Two_Pass_Aggregate_Expansion (N : Node_Id);
!       --  If the aggregate consists only of iterated associations then the
!       --  aggregate is constructed in two steps:
!       --  a) Build an expression to compute the number of elements
!       --     generated by each iterator, and use the expression to allocate
!       --     the destination aggregate.
!       --  b) Generate the loops corresponding to each iterator to insert
!       --     the elements in their proper positions.
  
        ----------------------------
        -- Build_Constrained_Type --
*************** package body Exp_Aggr is
*** 5770,5824 ****
        -- Check_Bounds --
        ------------------
  
!       procedure Check_Bounds (Aggr_Bounds : Node_Id; Index_Bounds : Node_Id) is
!          Aggr_Lo : Node_Id;
!          Aggr_Hi : Node_Id;
! 
!          Ind_Lo  : Node_Id;
!          Ind_Hi  : Node_Id;
  
!          Cond    : Node_Id := Empty;
  
        begin
-          Get_Index_Bounds (Aggr_Bounds, Aggr_Lo, Aggr_Hi);
-          Get_Index_Bounds (Index_Bounds, Ind_Lo, Ind_Hi);
- 
           --  Generate the following test:
  
           --    [constraint_error when
!          --      Aggr_Lo <= Aggr_Hi and then
!          --        (Aggr_Lo < Ind_Lo or else Aggr_Hi > Ind_Hi)]
  
           --  As an optimization try to see if some tests are trivially vacuous
           --  because we are comparing an expression against itself.
  
!          if Aggr_Lo = Ind_Lo and then Aggr_Hi = Ind_Hi then
              Cond := Empty;
  
!          elsif Aggr_Hi = Ind_Hi then
              Cond :=
                Make_Op_Lt (Loc,
!                 Left_Opnd  => Duplicate_Subexpr_Move_Checks (Aggr_Lo),
!                 Right_Opnd => Duplicate_Subexpr_Move_Checks (Ind_Lo));
  
!          elsif Aggr_Lo = Ind_Lo then
              Cond :=
                Make_Op_Gt (Loc,
!                 Left_Opnd  => Duplicate_Subexpr_Move_Checks (Aggr_Hi),
!                 Right_Opnd => Duplicate_Subexpr_Move_Checks (Ind_Hi));
  
           else
              Cond :=
                Make_Or_Else (Loc,
                  Left_Opnd =>
                    Make_Op_Lt (Loc,
!                     Left_Opnd  => Duplicate_Subexpr_Move_Checks (Aggr_Lo),
!                     Right_Opnd => Duplicate_Subexpr_Move_Checks (Ind_Lo)),
  
                  Right_Opnd =>
                    Make_Op_Gt (Loc,
!                     Left_Opnd  => Duplicate_Subexpr (Aggr_Hi),
!                     Right_Opnd => Duplicate_Subexpr (Ind_Hi)));
           end if;
  
           if Present (Cond) then
--- 5810,5867 ----
        -- Check_Bounds --
        ------------------
  
!       procedure Check_Bounds (Aggr_Bounds_Node, Index_Bounds_Node : Node_Id) is
!          Aggr_Bounds : constant Range_Nodes :=
!            Get_Index_Bounds (Aggr_Bounds_Node);
!          Ind_Bounds  : constant Range_Nodes :=
!            Get_Index_Bounds (Index_Bounds_Node);
  
!          Cond : Node_Id := Empty;
  
        begin
           --  Generate the following test:
  
           --    [constraint_error when
!          --      Aggr_Bounds.First <= Aggr_Bounds.Last and then
!          --        (Aggr_Bounds.First < Ind_Bounds.First
!          --         or else Aggr_Bounds.Last > Ind_Bounds.Last)]
  
           --  As an optimization try to see if some tests are trivially vacuous
           --  because we are comparing an expression against itself.
  
!          if Aggr_Bounds.First = Ind_Bounds.First
!            and then Aggr_Bounds.Last = Ind_Bounds.Last
!          then
              Cond := Empty;
  
!          elsif Aggr_Bounds.Last = Ind_Bounds.Last then
              Cond :=
                Make_Op_Lt (Loc,
!                 Left_Opnd  =>
!                   Duplicate_Subexpr_Move_Checks (Aggr_Bounds.First),
!                 Right_Opnd =>
!                   Duplicate_Subexpr_Move_Checks (Ind_Bounds.First));
  
!          elsif Aggr_Bounds.First = Ind_Bounds.First then
              Cond :=
                Make_Op_Gt (Loc,
!                 Left_Opnd  => Duplicate_Subexpr_Move_Checks (Aggr_Bounds.Last),
!                 Right_Opnd => Duplicate_Subexpr_Move_Checks (Ind_Bounds.Last));
  
           else
              Cond :=
                Make_Or_Else (Loc,
                  Left_Opnd =>
                    Make_Op_Lt (Loc,
!                     Left_Opnd  =>
!                       Duplicate_Subexpr_Move_Checks (Aggr_Bounds.First),
!                     Right_Opnd =>
!                       Duplicate_Subexpr_Move_Checks (Ind_Bounds.First)),
  
                  Right_Opnd =>
                    Make_Op_Gt (Loc,
!                     Left_Opnd  => Duplicate_Subexpr (Aggr_Bounds.Last),
!                     Right_Opnd => Duplicate_Subexpr (Ind_Bounds.Last)));
           end if;
  
           if Present (Cond) then
*************** package body Exp_Aggr is
*** 5826,5833 ****
                Make_And_Then (Loc,
                  Left_Opnd =>
                    Make_Op_Le (Loc,
!                     Left_Opnd  => Duplicate_Subexpr_Move_Checks (Aggr_Lo),
!                     Right_Opnd => Duplicate_Subexpr_Move_Checks (Aggr_Hi)),
  
                  Right_Opnd => Cond);
  
--- 5869,5878 ----
                Make_And_Then (Loc,
                  Left_Opnd =>
                    Make_Op_Le (Loc,
!                     Left_Opnd  =>
!                       Duplicate_Subexpr_Move_Checks (Aggr_Bounds.First),
!                     Right_Opnd =>
!                       Duplicate_Subexpr_Move_Checks (Aggr_Bounds.Last)),
  
                  Right_Opnd => Cond);
  
*************** package body Exp_Aggr is
*** 5952,5957 ****
--- 5997,6017 ----
  
              if Nkind (First (Choice_List (Assoc))) = N_Others_Choice then
                 Others_Present (Dim) := True;
+ 
+                --  An others_clause may be superfluous if previous components
+                --  cover the full given range of a constrained array. In such
+                --  a case an others_clause does not contribute any additional
+                --  components and has not been analyzed. We analyze it now to
+                --  detect type errors in the expression, even though no code
+                --  will be generated for it.
+ 
+                if Dim = Aggr_Dimension
+                  and then Nkind (Assoc) /= N_Iterated_Component_Association
+                  and then not Analyzed (Expression (Assoc))
+                  and then not Box_Present (Assoc)
+                then
+                   Preanalyze_And_Resolve (Expression (Assoc), Ctyp);
+                end if;
              end if;
           end if;
  
*************** package body Exp_Aggr is
*** 6079,6086 ****
                 --  Used to sort all the different choice values
  
                 J    : Pos := 1;
-                Low  : Node_Id;
-                High : Node_Id;
  
              begin
                 Assoc := First (Component_Associations (Sub_Aggr));
--- 6139,6144 ----
*************** package body Exp_Aggr is
*** 6091,6099 ****
                          exit;
                       end if;
  
!                      Get_Index_Bounds (Choice, Low, High);
!                      Table (J).Choice_Lo := Low;
!                      Table (J).Choice_Hi := High;
  
                       J := J + 1;
                       Next (Choice);
--- 6149,6161 ----
                          exit;
                       end if;
  
!                      declare
!                         Bounds : constant Range_Nodes :=
!                           Get_Index_Bounds (Choice);
!                      begin
!                         Table (J).Choice_Lo := Bounds.First;
!                         Table (J).Choice_Hi := Bounds.Last;
!                      end;
  
                       J := J + 1;
                       Next (Choice);
*************** package body Exp_Aggr is
*** 6290,6295 ****
--- 6352,6548 ----
           end if;
        end Safe_Left_Hand_Side;
  
+       ----------------------------------
+       -- Two_Pass_Aggregate_Expansion --
+       ----------------------------------
+ 
+       procedure Two_Pass_Aggregate_Expansion (N : Node_Id) is
+          Loc        : constant Source_Ptr := Sloc (N);
+          Comp_Type  : constant Entity_Id := Etype (N);
+          Index_Id   : constant Entity_Id := Make_Temporary (Loc, 'I', N);
+          Index_Type : constant Entity_Id := Etype (First_Index (Etype (N)));
+          Size_Id    : constant Entity_Id := Make_Temporary (Loc, 'I', N);
+          TmpE       : constant Entity_Id := Make_Temporary (Loc, 'A', N);
+ 
+          Assoc    : Node_Id := First (Component_Associations (N));
+          Incr     : Node_Id;
+          Iter     : Node_Id;
+          New_Comp : Node_Id;
+          One_Loop : Node_Id;
+ 
+          Size_Expr_Code : List_Id;
+          Insertion_Code : List_Id := New_List;
+ 
+       begin
+          Size_Expr_Code := New_List (
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Size_Id,
+              Object_Definition   => New_Occurrence_Of (Standard_Integer, Loc),
+              Expression          => Make_Integer_Literal (Loc, 0)));
+ 
+          --  First pass: execute the iterators to count the number of elements
+          --  that will be generated.
+ 
+          while Present (Assoc) loop
+             Iter := Iterator_Specification (Assoc);
+             Incr := Make_Assignment_Statement (Loc,
+                       Name => New_Occurrence_Of (Size_Id, Loc),
+                       Expression =>
+                         Make_Op_Add (Loc,
+                          Left_Opnd  => New_Occurrence_Of (Size_Id, Loc),
+                          Right_Opnd => Make_Integer_Literal (Loc, 1)));
+ 
+             One_Loop := Make_Loop_Statement (Loc,
+               Iteration_Scheme =>
+                 Make_Iteration_Scheme (Loc,
+                   Iterator_Specification => New_Copy_Tree (Iter)),
+                 Statements => New_List (Incr));
+ 
+             Append (One_Loop, Size_Expr_Code);
+             Next (Assoc);
+          end loop;
+ 
+          Insert_Actions (N, Size_Expr_Code);
+ 
+          --  Build a constrained subtype with the calculated length
+          --  and declare the proper bounded aggregate object.
+          --  The index type is some discrete type, so the bounds of the
+          --  constructed array are computed as T'Val (T'Pos (ineger bound));
+ 
+          declare
+             Pos_Lo : constant Node_Id :=
+               Make_Attribute_Reference (Loc,
+                 Prefix => New_Occurrence_Of (Index_Type, Loc),
+                 Attribute_Name => Name_Pos,
+                 Expressions => New_List (
+                   Make_Attribute_Reference (Loc,
+                     Prefix => New_Occurrence_Of (Index_Type, Loc),
+                     Attribute_Name => Name_First)));
+ 
+             Aggr_Lo : constant Node_Id :=
+                Make_Attribute_Reference (Loc,
+                  Prefix => New_Occurrence_Of (Index_Type, Loc),
+                  Attribute_Name => Name_Val,
+                  Expressions => New_List (New_Copy_Tree (Pos_Lo)));
+ 
+             --  Hi = Index_type'Pos (Lo + Size -1).
+ 
+             Pos_Hi : constant Node_Id :=
+                Make_Op_Add (Loc,
+                  Left_Opnd => New_Copy_Tree (Pos_Lo),
+                  Right_Opnd =>
+                    Make_Op_Subtract (Loc,
+                      Left_Opnd  => New_Occurrence_Of (Size_Id, Loc),
+                      Right_Opnd => Make_Integer_Literal (Loc, 1)));
+ 
+             --  Corresponding index value
+ 
+             Aggr_Hi : constant Node_Id :=
+                Make_Attribute_Reference (Loc,
+                  Prefix => New_Occurrence_Of (Index_Type, Loc),
+                  Attribute_Name => Name_Val,
+                  Expressions => New_List (New_Copy_Tree (Pos_Hi)));
+ 
+             SubE : constant Entity_Id := Make_Temporary (Loc, 'T');
+             SubD : constant Node_Id :=
+               Make_Subtype_Declaration (Loc,
+                 Defining_Identifier => SubE,
+                 Subtype_Indication  =>
+                   Make_Subtype_Indication (Loc,
+                     Subtype_Mark =>
+                       New_Occurrence_Of (Etype (Comp_Type), Loc),
+                     Constraint =>
+                       Make_Index_Or_Discriminant_Constraint
+                         (Loc,
+                          Constraints =>
+                            New_List (Make_Range (Loc, Aggr_Lo, Aggr_Hi)))));
+ 
+                --  Create a temporary array of the above subtype which
+                --  will be used to capture the aggregate assignments.
+ 
+                TmpD : constant Node_Id :=
+                  Make_Object_Declaration (Loc,
+                    Defining_Identifier => TmpE,
+                    Object_Definition   => New_Occurrence_Of (SubE, Loc));
+          begin
+             Insert_Actions (N, New_List (SubD, TmpD));
+          end;
+ 
+          --  Second pass: use the iterators to generate the elements of the
+          --  aggregate. Insertion index starts at Index_Type'First. We
+          --  assume that the second evaluation of each iterator generates
+          --  the same number of elements as the first pass, and consider
+          --  that the execution is erroneous (even if the RM does not state
+          --  this explicitly) if the number of elements generated differs
+          --  between first and second pass.
+ 
+          Assoc := First (Component_Associations (N));
+ 
+          --  Initialize insertion position to first array component.
+ 
+          Insertion_Code := New_List (
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => Index_Id,
+              Object_Definition   =>
+                New_Occurrence_Of (Index_Type, Loc),
+              Expression =>
+                Make_Attribute_Reference (Loc,
+                  Prefix => New_Occurrence_Of (Index_Type, Loc),
+                  Attribute_Name => Name_First)));
+ 
+          while Present (Assoc) loop
+             Iter := Iterator_Specification (Assoc);
+             New_Comp := Make_Assignment_Statement (Loc,
+                Name =>
+                  Make_Indexed_Component (Loc,
+                     Prefix => New_Occurrence_Of (TmpE, Loc),
+                     Expressions =>
+                       New_List (New_Occurrence_Of (Index_Id, Loc))),
+                Expression => New_Copy_Tree (Expression (Assoc)));
+ 
+             --  Advance index position for insertion.
+ 
+             Incr := Make_Assignment_Statement (Loc,
+                       Name => New_Occurrence_Of (Index_Id, Loc),
+                       Expression =>
+                         Make_Attribute_Reference (Loc,
+                           Prefix =>
+                             New_Occurrence_Of (Index_Type, Loc),
+                           Attribute_Name => Name_Succ,
+                           Expressions =>
+                             New_List (New_Occurrence_Of (Index_Id, Loc))));
+ 
+             --  Add guard to skip last increment when upper bound is reached.
+ 
+             Incr := Make_If_Statement (Loc,
+                Condition =>
+                   Make_Op_Ne (Loc,
+                   Left_Opnd  => New_Occurrence_Of (Index_Id, Loc),
+                   Right_Opnd =>
+                     Make_Attribute_Reference (Loc,
+                       Prefix => New_Occurrence_Of (Index_Type, Loc),
+                       Attribute_Name => Name_Last)),
+                Then_Statements => New_List (Incr));
+ 
+             One_Loop := Make_Loop_Statement (Loc,
+               Iteration_Scheme =>
+                 Make_Iteration_Scheme (Loc,
+                   Iterator_Specification => Copy_Separate_Tree (Iter)),
+                 Statements => New_List (New_Comp, Incr));
+ 
+             Append (One_Loop, Insertion_Code);
+             Next (Assoc);
+          end loop;
+ 
+          Insert_Actions (N, Insertion_Code);
+ 
+          --  Depending on context this may not work for build-in-place
+          --  arrays ???
+ 
+          Rewrite (N, New_Occurrence_Of (TmpE, Loc));
+ 
+       end Two_Pass_Aggregate_Expansion;
+ 
        --  Local variables
  
        Tmp : Entity_Id;
*************** package body Exp_Aggr is
*** 6327,6332 ****
--- 6580,6594 ----
        then
           return;
  
+       elsif Present (Component_Associations (N))
+         and then Nkind (First (Component_Associations (N))) =
+                  N_Iterated_Component_Association
+         and then
+           Present (Iterator_Specification (First (Component_Associations (N))))
+       then
+          Two_Pass_Aggregate_Expansion (N);
+          return;
+ 
        --  Do not attempt expansion if error already detected. We may reach this
        --  point in spite of previous errors when compiling with -gnatq, to
        --  force all possible errors (this is the usual ACATS mode).
*************** package body Exp_Aggr is
*** 6555,6562 ****
        --  For assignments we do the assignment in place if all the component
        --  associations have compile-time known values, or are default-
        --  initialized limited components, e.g. tasks. For other cases we
!       --  create a temporary. The analysis for safety of on-line assignment
!       --  is delicate, i.e. we don't know how to do it fully yet ???
  
        --  For allocators we assign to the designated object in place if the
        --  aggregate meets the same conditions as other in-place assignments.
--- 6817,6824 ----
        --  For assignments we do the assignment in place if all the component
        --  associations have compile-time known values, or are default-
        --  initialized limited components, e.g. tasks. For other cases we
!       --  create a temporary. A full analysis for safety of in-place assignment
!       --  is delicate.
  
        --  For allocators we assign to the designated object in place if the
        --  aggregate meets the same conditions as other in-place assignments.
*************** package body Exp_Aggr is
*** 6613,6619 ****
          and then Parent_Kind = N_Object_Declaration
          and then Present (Expression (Parent_Node))
          and then not
!           Must_Slide (Etype (Defining_Identifier (Parent_Node)), Typ)
          and then not Is_Bit_Packed_Array (Typ)
        then
           In_Place_Assign_OK_For_Declaration := True;
--- 6875,6881 ----
          and then Parent_Kind = N_Object_Declaration
          and then Present (Expression (Parent_Node))
          and then not
!           Must_Slide (N, Etype (Defining_Identifier (Parent_Node)), Typ)
          and then not Is_Bit_Packed_Array (Typ)
        then
           In_Place_Assign_OK_For_Declaration := True;
*************** package body Exp_Aggr is
*** 6627,6633 ****
           --  aggregate. If the declaration has a subtype mark, use it,
           --  otherwise use the itype of the aggregate.
  
!          Set_Ekind (Tmp, E_Variable);
  
           if not Is_Constrained (Typ) then
              Build_Constrained_Type (Positional => False);
--- 6889,6895 ----
           --  aggregate. If the declaration has a subtype mark, use it,
           --  otherwise use the itype of the aggregate.
  
!          Mutate_Ekind (Tmp, E_Variable);
  
           if not Is_Constrained (Typ) then
              Build_Constrained_Type (Positional => False);
*************** package body Exp_Aggr is
*** 6655,6663 ****
           Set_Expansion_Delayed (N);
           return;
  
!       --  In the remaining cases the aggregate is the RHS of an assignment
  
        elsif Maybe_In_Place_OK
          and then Safe_Left_Hand_Side (Name (Parent_Node))
        then
           Tmp := Name (Parent_Node);
--- 6917,6929 ----
           Set_Expansion_Delayed (N);
           return;
  
!       --  In the remaining cases the aggregate appears in the RHS of an
!       --  assignment, which may be part of the expansion of an object
!       --  declaration. If the aggregate is an actual in a call, itself
!       --  possibly in a RHS, building it in the target is not possible.
  
        elsif Maybe_In_Place_OK
+         and then Nkind (Parent_Node) not in N_Subprogram_Call
          and then Safe_Left_Hand_Side (Name (Parent_Node))
        then
           Tmp := Name (Parent_Node);
*************** package body Exp_Aggr is
*** 6793,6798 ****
--- 7059,7065 ----
        --  code must be inserted after it. The defining entity might not come
        --  from source if this is part of an inlined body, but the declaration
        --  itself will.
+       --  The test below looks very specialized and kludgy???
  
        if Comes_From_Source (Tmp)
          or else
*************** package body Exp_Aggr is
*** 6800,6817 ****
              and then Comes_From_Source (Parent (N))
              and then Tmp = Defining_Entity (Parent (N)))
        then
!          declare
!             Node_After : constant Node_Id := Next (Parent_Node);
! 
!          begin
              Insert_Actions_After (Parent_Node, Aggr_Code);
! 
!             if Parent_Kind = N_Object_Declaration then
!                Collect_Initialization_Statements
!                  (Obj => Tmp, N => Parent_Node, Node_After => Node_After);
!             end if;
!          end;
! 
        else
           Insert_Actions (N, Aggr_Code);
        end if;
--- 7067,7084 ----
              and then Comes_From_Source (Parent (N))
              and then Tmp = Defining_Entity (Parent (N)))
        then
!          if Parent_Kind /= N_Object_Declaration or else Is_Frozen (Tmp) then
              Insert_Actions_After (Parent_Node, Aggr_Code);
!          else
!             declare
!                Comp_Stmt : constant Node_Id :=
!                  Make_Compound_Statement
!                    (Sloc (Parent_Node), Actions => Aggr_Code);
!             begin
!                Insert_Action_After (Parent_Node, Comp_Stmt);
!                Set_Initialization_Statements (Tmp, Comp_Stmt);
!             end;
!          end if;
        else
           Insert_Actions (N, Aggr_Code);
        end if;
*************** package body Exp_Aggr is
*** 6971,6981 ****
        Init_Stat : Node_Id;
        Siz       : Int;
  
        function Aggregate_Size return Int;
        --  Compute number of entries in aggregate, including choices
!       --  that cover a range, as well as iterated constructs.
        --  Return -1 if the size is not known statically, in which case
!       --  we allocate a default size for the aggregate.
  
        procedure Expand_Iterated_Component (Comp : Node_Id);
        --  Handle iterated_component_association and iterated_Element
--- 7238,7264 ----
        Init_Stat : Node_Id;
        Siz       : Int;
  
+       --  The following are used when the size of the aggregate is not
+       --  static and requires a dynamic evaluation.
+       Siz_Decl   : Node_Id;
+       Siz_Exp    : Node_Id := Empty;
+       Count_Type : Entity_Id;
+ 
        function Aggregate_Size return Int;
        --  Compute number of entries in aggregate, including choices
!       --  that cover a range or subtype, as well as iterated constructs.
        --  Return -1 if the size is not known statically, in which case
!       --  allocate a default size for the aggregate, or build an expression
!       --  to estimate the size dynamically.
! 
!       function Build_Siz_Exp (Comp : Node_Id) return Int;
!       --  When the aggregate contains a single Iterated_Component_Association
!       --  or Element_Association with non-static bounds, build an expression
!       --  to be used as the allocated size of the container. This may be an
!       --  overestimate if a filter is present, but is a safe approximation.
!       --  If bounds are dynamic the aggregate is created in two passes, and
!       --  the first generates a loop for the sole purpose of computing the
!       --  number of elements that will be generated on the second pass.
  
        procedure Expand_Iterated_Component (Comp : Node_Id);
        --  Handle iterated_component_association and iterated_Element
*************** package body Exp_Aggr is
*** 6994,7027 ****
           Siz     : Int := 0;
  
           procedure Add_Range_Size;
!          --  Compute size of component association given by
!          --  range or subtype name.
  
           procedure Add_Range_Size is
           begin
              if Nkind (Lo) = N_Integer_Literal then
                 Siz := Siz + UI_To_Int (Intval (Hi))
!                  - UI_To_Int (Intval (Lo)) + 1;
              end if;
           end Add_Range_Size;
  
        begin
           if Present (Expressions (N)) then
              Siz := List_Length (Expressions (N));
           end if;
  
           if Present (Component_Associations (N)) then
              Comp := First (Component_Associations (N));
  
!             --  If the component is an Iterated_Element_Association
!             --  it includes an iterator or a loop parameter, possibly
!             --  with a filter, so we do not attempt to compute its
!             --  size. Room for future optimization ???
! 
!             if Nkind (Comp) = N_Iterated_Element_Association then
!                return -1;
              end if;
  
              while Present (Comp) loop
                 Choice := First (Choice_List (Comp));
  
--- 7277,7330 ----
           Siz     : Int := 0;
  
           procedure Add_Range_Size;
!          --  Compute number of components specified by a component association
!          --  given by a range or subtype name.
! 
!          --------------------
!          -- Add_Range_Size --
!          --------------------
  
           procedure Add_Range_Size is
           begin
+             --  The bounds of the discrete range are integers or enumeration
+             --  literals
+ 
              if Nkind (Lo) = N_Integer_Literal then
                 Siz := Siz + UI_To_Int (Intval (Hi))
!                           - UI_To_Int (Intval (Lo)) + 1;
!             else
!                Siz := Siz + UI_To_Int (Enumeration_Pos (Hi))
!                           - UI_To_Int (Enumeration_Pos (Lo)) + 1;
              end if;
           end Add_Range_Size;
  
        begin
+          --  Aggregate is either all positional or all named.
+ 
           if Present (Expressions (N)) then
              Siz := List_Length (Expressions (N));
           end if;
  
           if Present (Component_Associations (N)) then
              Comp := First (Component_Associations (N));
+             --  If there is a single component association it can be
+             --  an iterated component with dynamic bounds or an element
+             --  iterator over an iterable object. If it is an array
+             --  we can use the attribute Length to get its size;
+             --  for a predefined container the function Length plays
+             --  the same role. There is no available mechanism for
+             --  user-defined containers. For now we treat all of these
+             --  as dynamic.
  
!             if List_Length (Component_Associations (N)) = 1
!               and then Nkind (Comp) in N_Iterated_Component_Association |
!                                        N_Iterated_Element_Association
!             then
!                return Build_Siz_Exp (Comp);
              end if;
  
+             --  Otherwise all associations must specify static sizes.
+ 
              while Present (Comp) loop
                 Choice := First (Choice_List (Comp));
  
*************** package body Exp_Aggr is
*** 7031,7056 ****
                    if Nkind (Choice) = N_Range then
                       Lo := Low_Bound (Choice);
                       Hi := High_Bound (Choice);
!                      if Nkind (Lo) /= N_Integer_Literal
!                        or else Nkind (Hi) /= N_Integer_Literal
!                      then
!                         return -1;
!                      else
!                         Add_Range_Size;
!                      end if;
  
                    elsif Is_Entity_Name (Choice)
                      and then Is_Type (Entity (Choice))
                    then
                       Lo := Type_Low_Bound (Entity (Choice));
                       Hi := Type_High_Bound (Entity (Choice));
!                      if Nkind (Lo) /= N_Integer_Literal
!                        or else Nkind (Hi) /= N_Integer_Literal
!                      then
!                         return -1;
!                      else
!                         Add_Range_Size;
!                      end if;
  
                       Rewrite (Choice,
                         Make_Range (Loc,
--- 7334,7347 ----
                    if Nkind (Choice) = N_Range then
                       Lo := Low_Bound (Choice);
                       Hi := High_Bound (Choice);
!                      Add_Range_Size;
  
                    elsif Is_Entity_Name (Choice)
                      and then Is_Type (Entity (Choice))
                    then
                       Lo := Type_Low_Bound (Entity (Choice));
                       Hi := Type_High_Bound (Entity (Choice));
!                      Add_Range_Size;
  
                       Rewrite (Choice,
                         Make_Range (Loc,
*************** package body Exp_Aggr is
*** 7073,7078 ****
--- 7364,7422 ----
           return Siz;
        end Aggregate_Size;
  
+       -------------------
+       -- Build_Siz_Exp --
+       -------------------
+ 
+       function Build_Siz_Exp (Comp : Node_Id) return Int is
+          Lo, Hi : Node_Id;
+       begin
+          if Nkind (Comp) = N_Range then
+             Lo := Low_Bound (Comp);
+             Hi := High_Bound (Comp);
+             Analyze (Lo);
+             Analyze (Hi);
+ 
+             --  Compute static size when possible.
+ 
+             if Is_Static_Expression (Lo)
+               and then Is_Static_Expression (Hi)
+             then
+                if Nkind (Lo) = N_Integer_Literal then
+                   Siz := UI_To_Int (Intval (Hi)) - UI_To_Int (Intval (Lo)) + 1;
+                else
+                   Siz := UI_To_Int (Enumeration_Pos (Hi))
+                        - UI_To_Int (Enumeration_Pos (Lo)) + 1;
+                end if;
+                return Siz;
+ 
+             else
+                Siz_Exp :=
+                  Make_Op_Add (Sloc (Comp),
+                    Left_Opnd =>
+                      Make_Op_Subtract (Sloc (Comp),
+                        Left_Opnd => New_Copy_Tree (Hi),
+                        Right_Opnd => New_Copy_Tree (Lo)),
+                    Right_Opnd =>
+                      Make_Integer_Literal (Loc, 1));
+                return -1;
+             end if;
+ 
+          elsif Nkind (Comp) = N_Iterated_Component_Association then
+             return Build_Siz_Exp (First (Discrete_Choices (Comp)));
+ 
+          elsif Nkind (Comp) = N_Iterated_Element_Association then
+             return -1;
+ 
+             --  ??? Need to create code for a loop and add to generated code,
+             --  as is done for array aggregates with iterated element
+             --  associations, instead of using Append operations.
+ 
+          else
+             return -1;
+          end if;
+       end Build_Siz_Exp;
+ 
        -------------------------------
        -- Expand_Iterated_Component --
        -------------------------------
*************** package body Exp_Aggr is
*** 7098,7104 ****
  
              if Present (Iterator_Specification (Comp)) then
  
!                --  Either an Iterator_Specification of a Loop_Parameter_
                 --  Specification is present.
  
                 L_Iteration_Scheme :=
--- 7442,7448 ----
  
              if Present (Iterator_Specification (Comp)) then
  
!                --  Either an Iterator_Specification or a Loop_Parameter_
                 --  Specification is present.
  
                 L_Iteration_Scheme :=
*************** package body Exp_Aggr is
*** 7138,7144 ****
                     Iterator_Specification => Iterator_Specification (Comp));
  
              else
!                --  Loop_Parameter_Specifcation is parsed with a choice list.
                 --  where the range is the first (and only) choice.
  
                 L_Range := Relocate_Node (First (Discrete_Choices (Comp)));
--- 7482,7488 ----
                     Iterator_Specification => Iterator_Specification (Comp));
  
              else
!                --  Loop_Parameter_Specification is parsed with a choice list.
                 --  where the range is the first (and only) choice.
  
                 L_Range := Relocate_Node (First (Discrete_Choices (Comp)));
*************** package body Exp_Aggr is
*** 7160,7166 ****
           --  parameter. Otherwise the key is given by the loop parameter
           --  itself.
  
!          if Present (Add_Unnamed_Subp) then
              Stats := New_List
                (Make_Procedure_Call_Statement (Loc,
                   Name => New_Occurrence_Of (Entity (Add_Unnamed_Subp), Loc),
--- 7504,7512 ----
           --  parameter. Otherwise the key is given by the loop parameter
           --  itself.
  
!          if Present (Add_Unnamed_Subp)
!            and then No (Add_Named_Subp)
!          then
              Stats := New_List
                (Make_Procedure_Call_Statement (Loc,
                   Name => New_Occurrence_Of (Entity (Add_Unnamed_Subp), Loc),
*************** package body Exp_Aggr is
*** 7187,7197 ****
                   Parameter_Associations => Params));
           end if;
  
!          Loop_Stat :=  Make_Implicit_Loop_Statement
!                          (Node             => N,
!                           Identifier       => Empty,
!                           Iteration_Scheme => L_Iteration_Scheme,
!                           Statements       => Stats);
           Append (Loop_Stat, Aggr_Code);
  
        end Expand_Iterated_Component;
--- 7533,7543 ----
                   Parameter_Associations => Params));
           end if;
  
!          Loop_Stat := Make_Implicit_Loop_Statement
!                         (Node             => N,
!                          Identifier       => Empty,
!                          Iteration_Scheme => L_Iteration_Scheme,
!                          Statements       => Stats);
           Append (Loop_Stat, Aggr_Code);
  
        end Expand_Iterated_Component;
*************** package body Exp_Aggr is
*** 7205,7242 ****
  
        --  The constructor for bounded containers is a function with
        --  a parameter that sets the size of the container. If the
!       --  size cannot be determined statically we use a default value.
  
        Siz := Aggregate_Size;
-       if Siz < 0 then
-          Siz := 10;
-       end if;
  
        if Ekind (Entity (Empty_Subp)) = E_Function
          and then Present (First_Formal (Entity (Empty_Subp)))
        then
           Default := Default_Value (First_Formal (Entity (Empty_Subp)));
!          --  If aggregate size is not static, use default value of
!          --  formal parameter for allocation. We assume that this
           --  (implementation-dependent) value is static, even though
!          --   the AI does not require it ???.
  
!          if Siz < 0 then
!             Siz := UI_To_Int (Intval (Default));
           end if;
  
!          Init_Stat :=
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => Temp,
!              Object_Definition   => New_Occurrence_Of (Typ, Loc),
!              Expression => Make_Function_Call (Loc,
!                Name => New_Occurrence_Of (Entity (Empty_Subp), Loc),
!                Parameter_Associations =>
!                  New_List (Make_Integer_Literal (Loc, Siz))));
  
           Append (Init_Stat, Aggr_Code);
  
!          --  Use default value when aggregate size is not static.
  
        else
           Decl :=
--- 7551,7630 ----
  
        --  The constructor for bounded containers is a function with
        --  a parameter that sets the size of the container. If the
!       --  size cannot be determined statically we use a default value
!       --  or a dynamic expression.
  
        Siz := Aggregate_Size;
  
        if Ekind (Entity (Empty_Subp)) = E_Function
          and then Present (First_Formal (Entity (Empty_Subp)))
        then
           Default := Default_Value (First_Formal (Entity (Empty_Subp)));
! 
!          --  If aggregate size is not static, we can use default value
!          --  of formal parameter for allocation. We assume that this
           --  (implementation-dependent) value is static, even though
!          --   the AI does not require it.
  
!          --  Create declaration for size: a constant literal in the simple
!          --  case, an expression if iterated component associations may be
!          --  involved, the default otherwise.
! 
!          Count_Type := Etype (First_Formal (Entity (Empty_Subp)));
!          if Siz = -1 then
!             if No (Siz_Exp) then
!                Siz := UI_To_Int (Intval (Default));
!                Siz_Exp := Make_Integer_Literal (Loc, Siz);
! 
!             else
!                Siz_Exp := Make_Type_Conversion (Loc,
!                   Subtype_Mark =>
!                     New_Occurrence_Of (Count_Type, Loc),
!                   Expression => Siz_Exp);
!             end if;
! 
!          else
!             Siz_Exp := Make_Integer_Literal (Loc, Siz);
           end if;
  
!          Siz_Decl := Make_Object_Declaration (Loc,
!             Defining_Identifier => Make_Temporary (Loc, 'S', N),
!             Object_Definition =>
!                New_Occurrence_Of (Count_Type, Loc),
!                Expression => Siz_Exp);
!          Append (Siz_Decl, Aggr_Code);
! 
!          if Nkind (Siz_Exp) = N_Integer_Literal then
!             Init_Stat :=
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Temp,
!                 Object_Definition   => New_Occurrence_Of (Typ, Loc),
!                 Expression => Make_Function_Call (Loc,
!                   Name => New_Occurrence_Of (Entity (Empty_Subp), Loc),
!                   Parameter_Associations =>
!                     New_List
!                       (New_Occurrence_Of
!                         (Defining_Identifier (Siz_Decl), Loc))));
! 
!          else
!             Init_Stat :=
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Temp,
!                 Object_Definition   => New_Occurrence_Of (Typ, Loc),
!                 Expression => Make_Function_Call (Loc,
!                   Name =>
!                     New_Occurrence_Of (Entity (New_Indexed_Subp), Loc),
!                   Parameter_Associations =>
!                     New_List (
!                       Make_Integer_Literal (Loc, 1),
!                       New_Occurrence_Of
!                         (Defining_Identifier (Siz_Decl), Loc))));
!          end if;
  
           Append (Init_Stat, Aggr_Code);
  
!          --  Size is dynamic: Create declaration for object, and intitialize
!          --  with a call to the null container, or an assignment to it.
  
        else
           Decl :=
*************** package body Exp_Aggr is
*** 7245,7255 ****
--- 7633,7648 ----
               Object_Definition   => New_Occurrence_Of (Typ, Loc));
  
           Insert_Action (N, Decl);
+ 
+          --  The Empty entity is either a parameterless function, or
+          --  a constant.
+ 
           if Ekind (Entity (Empty_Subp)) = E_Function then
              Init_Stat := Make_Assignment_Statement (Loc,
                Name => New_Occurrence_Of (Temp, Loc),
                Expression => Make_Function_Call (Loc,
                  Name => New_Occurrence_Of (Entity (Empty_Subp), Loc)));
+ 
           else
              Init_Stat := Make_Assignment_Statement (Loc,
                Name => New_Occurrence_Of (Temp, Loc),
*************** package body Exp_Aggr is
*** 7266,7274 ****
        --  If the aggregate is positional the aspect must include
        --  an Add_Unnamed subprogram.
  
!       if Present (Add_Unnamed_Subp)
!         and then No (Component_Associations (N))
!       then
           if Present (Expressions (N)) then
              declare
                 Insert : constant Entity_Id := Entity (Add_Unnamed_Subp);
--- 7659,7665 ----
        --  If the aggregate is positional the aspect must include
        --  an Add_Unnamed subprogram.
  
!       if Present (Add_Unnamed_Subp) then
           if Present (Expressions (N)) then
              declare
                 Insert : constant Entity_Id := Entity (Add_Unnamed_Subp);
*************** package body Exp_Aggr is
*** 7289,7301 ****
              end;
           end if;
  
!          --  Iterated component associations may also be present.
  
!          Comp := First (Component_Associations (N));
!          while Present (Comp) loop
!             Expand_Iterated_Component (Comp);
!             Next (Comp);
!          end loop;
  
        ---------------------
        -- Named_Aggregate --
--- 7680,7697 ----
              end;
           end if;
  
!          --  Indexed aggregates are handled below. Unnamed aggregates
!          --  such as sets may include iterated component associations.
  
!          if No (New_Indexed_Subp) then
!             Comp := First (Component_Associations (N));
!             while Present (Comp) loop
!                if Nkind (Comp) = N_Iterated_Component_Association then
!                   Expand_Iterated_Component (Comp);
!                end if;
!                Next (Comp);
!             end loop;
!          end if;
  
        ---------------------
        -- Named_Aggregate --
*************** package body Exp_Aggr is
*** 7346,7351 ****
--- 7742,7749 ----
        --  subprogram. Note that unlike array aggregates, a container
        --  aggregate must be fully positional or fully indexed. In the
        --  first case the expansion has already taken place.
+       --  TBA: the keys for an indexed aggregate must provide a dense
+       --  range with no repetitions.
  
        if Present (Assign_Indexed_Subp)
          and then Present (Component_Associations (N))
*************** package body Exp_Aggr is
*** 7414,7420 ****
                 --  required size for the aggregwte : call the provided
                 --  constructor rather than the Empty aggregate.
  
!                Index :=  Make_Op_Add (Loc,
                   Left_Opnd => New_Copy_Tree (Type_Low_Bound (Index_Type)),
                   Right_Opnd => Make_Integer_Literal (Loc, Siz - 1));
  
--- 7812,7818 ----
                 --  required size for the aggregwte : call the provided
                 --  constructor rather than the Empty aggregate.
  
!                Index := Make_Op_Add (Loc,
                   Left_Opnd => New_Copy_Tree (Type_Low_Bound (Index_Type)),
                   Right_Opnd => Make_Integer_Literal (Loc, Siz - 1));
  
*************** package body Exp_Aggr is
*** 7873,7879 ****
                 Discr    : Entity_Id;
                 Decl     : Node_Id;
                 Num_Disc : Nat := 0;
!                Num_Gird : Nat := 0;
  
              --  Start of processing for Generate_Aggregate_For_Derived_Type
  
--- 8271,8277 ----
                 Discr    : Entity_Id;
                 Decl     : Node_Id;
                 Num_Disc : Nat := 0;
!                Num_Stor : Nat := 0;
  
              --  Start of processing for Generate_Aggregate_For_Derived_Type
  
*************** package body Exp_Aggr is
*** 7909,7921 ****
  
                 Discr := First_Stored_Discriminant (Base_Type (Typ));
                 while Present (Discr) loop
!                   Num_Gird := Num_Gird + 1;
                    Next_Stored_Discriminant (Discr);
                 end loop;
  
                 --  Case of more stored discriminants than new discriminants
  
!                if Num_Gird > Num_Disc then
  
                    --  Create a proper subtype of the parent type, which is the
                    --  proper implementation type for the aggregate, and convert
--- 8307,8319 ----
  
                 Discr := First_Stored_Discriminant (Base_Type (Typ));
                 while Present (Discr) loop
!                   Num_Stor := Num_Stor + 1;
                    Next_Stored_Discriminant (Discr);
                 end loop;
  
                 --  Case of more stored discriminants than new discriminants
  
!                if Num_Stor > Num_Disc then
  
                    --  Create a proper subtype of the parent type, which is the
                    --  proper implementation type for the aggregate, and convert
*************** package body Exp_Aggr is
*** 8157,8166 ****
           Expr_Q : Node_Id;
  
        begin
-          if No (Comps) then
-             return True;
-          end if;
- 
           C := First (Comps);
           while Present (C) loop
  
--- 8555,8560 ----
*************** package body Exp_Aggr is
*** 8361,8366 ****
--- 8755,8765 ----
  
        elsif Is_Static_Dispatch_Table_Aggregate (N) then
           return;
+ 
+       --  Case pattern aggregates need to remain as aggregates
+ 
+       elsif Is_Case_Choice_Pattern (N) then
+          return;
        end if;
  
        --  If the pragma Aggregate_Individually_Assign is set, always convert to
*************** package body Exp_Aggr is
*** 8506,8551 ****
     ----------------------------
  
     function Has_Default_Init_Comps (N : Node_Id) return Boolean is
!       Comps : constant List_Id := Component_Associations (N);
!       C     : Node_Id;
        Expr  : Node_Id;
  
     begin
        pragma Assert (Nkind (N) in N_Aggregate | N_Extension_Aggregate);
  
-       if No (Comps) then
-          return False;
-       end if;
- 
        if Has_Self_Reference (N) then
           return True;
        end if;
  
!       --  Check if any direct component has default initialized components
  
!       C := First (Comps);
!       while Present (C) loop
!          if Box_Present (C) then
!             return True;
!          end if;
  
!          Next (C);
!       end loop;
  
!       --  Recursive call in case of aggregate expression
  
!       C := First (Comps);
!       while Present (C) loop
!          Expr := Expression (C);
  
!          if Present (Expr)
!            and then Nkind (Expr) in N_Aggregate | N_Extension_Aggregate
!            and then Has_Default_Init_Comps (Expr)
!          then
!             return True;
           end if;
  
!          Next (C);
        end loop;
  
        return False;
--- 8905,8945 ----
     ----------------------------
  
     function Has_Default_Init_Comps (N : Node_Id) return Boolean is
!       Assoc : Node_Id;
        Expr  : Node_Id;
+       --  Component association and expression, respectively
  
     begin
        pragma Assert (Nkind (N) in N_Aggregate | N_Extension_Aggregate);
  
        if Has_Self_Reference (N) then
           return True;
        end if;
  
!       Assoc := First (Component_Associations (N));
!       while Present (Assoc) loop
!          --  Each component association has either a box or an expression
  
!          pragma Assert (Box_Present (Assoc) xor Present (Expression (Assoc)));
  
!          --  Check if any direct component has default initialized components
  
!          if Box_Present (Assoc) then
!             return True;
  
!          --  Recursive call in case of aggregate expression
  
!          else
!             Expr := Expression (Assoc);
! 
!             if Nkind (Expr) in N_Aggregate | N_Extension_Aggregate
!               and then Has_Default_Init_Comps (Expr)
!             then
!                return True;
!             end if;
           end if;
  
!          Next (Assoc);
        end loop;
  
        return False;
*************** package body Exp_Aggr is
*** 8592,8602 ****
           Kind := Nkind (Node);
        end if;
  
!       if Kind not in N_Aggregate | N_Extension_Aggregate then
!          return False;
!       else
!          return Expansion_Delayed (Node);
!       end if;
     end Is_Delayed_Aggregate;
  
     --------------------------------
--- 8986,8993 ----
           Kind := Nkind (Node);
        end if;
  
!       return Kind in N_Aggregate | N_Extension_Aggregate
!         and then Expansion_Delayed (Node);
     end Is_Delayed_Aggregate;
  
     --------------------------------
*************** package body Exp_Aggr is
*** 8612,8618 ****
        --  Aggregates are not supported for nonstandard rep clauses, since they
        --  may lead to extra padding fields in CCG.
  
!       if Ekind (Etype (N)) in Record_Kind
          and then Has_Non_Standard_Rep (Etype (N))
        then
           return False;
--- 9003,9009 ----
        --  Aggregates are not supported for nonstandard rep clauses, since they
        --  may lead to extra padding fields in CCG.
  
!       if Is_Record_Type (Etype (N))
          and then Has_Non_Standard_Rep (Etype (N))
        then
           return False;
*************** package body Exp_Aggr is
*** 8667,8696 ****
     begin
        return Building_Static_Dispatch_Tables
          and then Tagged_Type_Expansion
-         and then RTU_Loaded (Ada_Tags)
  
           --  Avoid circularity when rebuilding the compiler
  
!         and then Cunit_Entity (Get_Source_Unit (N)) /= RTU_Entity (Ada_Tags)
!         and then (Typ = RTE (RE_Dispatch_Table_Wrapper)
                      or else
!                   Typ = RTE (RE_Address_Array)
                      or else
!                   Typ = RTE (RE_Type_Specific_Data)
                      or else
!                   Typ = RTE (RE_Tag_Table)
                      or else
!                   (RTE_Available (RE_Object_Specific_Data)
!                      and then Typ = RTE (RE_Object_Specific_Data))
                      or else
!                   (RTE_Available (RE_Interface_Data)
!                      and then Typ = RTE (RE_Interface_Data))
                      or else
!                   (RTE_Available (RE_Interfaces_Array)
!                      and then Typ = RTE (RE_Interfaces_Array))
                      or else
!                   (RTE_Available (RE_Interface_Data_Element)
!                      and then Typ = RTE (RE_Interface_Data_Element)));
     end Is_Static_Dispatch_Table_Aggregate;
  
     -----------------------------
--- 9058,9082 ----
     begin
        return Building_Static_Dispatch_Tables
          and then Tagged_Type_Expansion
  
           --  Avoid circularity when rebuilding the compiler
  
!         and then not Is_RTU (Cunit_Entity (Get_Source_Unit (N)), Ada_Tags)
!         and then (Is_RTE (Typ, RE_Dispatch_Table_Wrapper)
                      or else
!                   Is_RTE (Typ, RE_Address_Array)
                      or else
!                   Is_RTE (Typ, RE_Type_Specific_Data)
                      or else
!                   Is_RTE (Typ, RE_Tag_Table)
                      or else
!                   Is_RTE (Typ, RE_Object_Specific_Data)
                      or else
!                   Is_RTE (Typ, RE_Interface_Data)
                      or else
!                   Is_RTE (Typ, RE_Interfaces_Array)
                      or else
!                   Is_RTE (Typ, RE_Interface_Data_Element));
     end Is_Static_Dispatch_Table_Aggregate;
  
     -----------------------------
*************** package body Exp_Aggr is
*** 8698,8708 ****
     -----------------------------
  
     function Is_Two_Dim_Packed_Array (Typ : Entity_Id) return Boolean is
!       C : constant Int := UI_To_Int (Component_Size (Typ));
     begin
        return Number_Dimensions (Typ) = 2
          and then Is_Bit_Packed_Array (Typ)
!         and then (C = 1 or else C = 2 or else C = 4);
     end Is_Two_Dim_Packed_Array;
  
     --------------------
--- 9084,9094 ----
     -----------------------------
  
     function Is_Two_Dim_Packed_Array (Typ : Entity_Id) return Boolean is
!       C : constant Uint := Component_Size (Typ);
     begin
        return Number_Dimensions (Typ) = 2
          and then Is_Bit_Packed_Array (Typ)
!         and then C in Uint_1 | Uint_2 | Uint_4; -- False if No_Uint
     end Is_Two_Dim_Packed_Array;
  
     --------------------
*************** package body Exp_Aggr is
*** 8794,8801 ****
       (N            : Node_Id;
        Default_Size : Nat := 5000) return Nat
     is
-       Typ : constant Entity_Id := Etype (N);
- 
        function Use_Small_Size (N : Node_Id) return Boolean;
        --  True if we should return a very small size, which means large
        --  aggregates will be implemented as a loop when possible (potentially
--- 9180,9185 ----
*************** package body Exp_Aggr is
*** 8805,8810 ****
--- 9189,9198 ----
        --  Return the context in which the aggregate appears, not counting
        --  qualified expressions and similar.
  
+       ------------------
+       -- Aggr_Context --
+       ------------------
+ 
        function Aggr_Context (N : Node_Id) return Node_Id is
           Result : Node_Id := Parent (N);
        begin
*************** package body Exp_Aggr is
*** 8822,8827 ****
--- 9210,9219 ----
           return Result;
        end Aggr_Context;
  
+       --------------------
+       -- Use_Small_Size --
+       --------------------
+ 
        function Use_Small_Size (N : Node_Id) return Boolean is
           C : constant Node_Id := Aggr_Context (N);
           --  The decision depends on the context in which the aggregate occurs,
*************** package body Exp_Aggr is
*** 8843,8849 ****
  
              when N_Object_Declaration =>
                 return not Constant_Present (C)
!                  and then Ekind (Current_Scope) in Subprogram_Kind;
  
              --  False for all other contexts
  
--- 9235,9241 ----
  
              when N_Object_Declaration =>
                 return not Constant_Present (C)
!                  and then Is_Subprogram (Current_Scope);
  
              --  False for all other contexts
  
*************** package body Exp_Aggr is
*** 8852,8862 ****
           end case;
        end Use_Small_Size;
  
     --  Start of processing for Max_Aggregate_Size
  
     begin
!       --  We use a small limit in CodePeer mode where we favor loops
!       --  instead of thousands of single assignments (from large aggregates).
  
        --  We also increase the limit to 2**24 (about 16 million) if
        --  Restrictions (No_Elaboration_Code) or Restrictions
--- 9244,9258 ----
           end case;
        end Use_Small_Size;
  
+       --  Local variables
+ 
+       Typ : constant Entity_Id := Etype (N);
+ 
     --  Start of processing for Max_Aggregate_Size
  
     begin
!       --  We use a small limit in CodePeer mode where we favor loops instead of
!       --  thousands of single assignments (from large aggregates).
  
        --  We also increase the limit to 2**24 (about 16 million) if
        --  Restrictions (No_Elaboration_Code) or Restrictions
*************** package body Exp_Aggr is
*** 8968,8981 ****
        declare
           Csiz  : constant Nat := UI_To_Int (Component_Size (Typ));
  
-          Lo : Node_Id;
-          Hi : Node_Id;
-          --  Bounds of index type
- 
-          Lob : Uint;
-          Hib : Uint;
-          --  Values of bounds if compile time known
- 
           function Get_Component_Val (N : Node_Id) return Uint;
           --  Given a expression value N of the component type Ctyp, returns a
           --  value of Csiz (component size) bits representing this value. If
--- 9364,9369 ----
*************** package body Exp_Aggr is
*** 8987,8993 ****
           -----------------------
  
           function Get_Component_Val (N : Node_Id) return Uint is
!             Val  : Uint;
  
           begin
              --  We have to analyze the expression here before doing any further
--- 9375,9381 ----
           -----------------------
  
           function Get_Component_Val (N : Node_Id) return Uint is
!             Val : Uint;
  
           begin
              --  We have to analyze the expression here before doing any further
*************** package body Exp_Aggr is
*** 9017,9163 ****
              return Val mod Uint_2 ** Csiz;
           end Get_Component_Val;
  
        --  Here we know we have a one dimensional bit packed array
  
        begin
-          Get_Index_Bounds (First_Index (Typ), Lo, Hi);
- 
           --  Cannot do anything if bounds are dynamic
  
!          if not Compile_Time_Known_Value (Lo)
!               or else
!             not Compile_Time_Known_Value (Hi)
           then
              return False;
           end if;
  
!          --  Or are silly out of range of int bounds
! 
!          Lob := Expr_Value (Lo);
!          Hib := Expr_Value (Hi);
  
!          if not UI_Is_In_Int_Range (Lob)
!               or else
!             not UI_Is_In_Int_Range (Hib)
!          then
!             return False;
!          end if;
  
!          --  At this stage we have a suitable aggregate for handling at compile
!          --  time. The only remaining checks are that the values of expressions
!          --  in the aggregate are compile-time known (checks are performed by
!          --  Get_Component_Val), and that any subtypes or ranges are statically
!          --  known.
  
!          --  If the aggregate is not fully positional at this stage, then
!          --  convert it to positional form. Either this will fail, in which
!          --  case we can do nothing, or it will succeed, in which case we have
!          --  succeeded in handling the aggregate and transforming it into a
!          --  modular value, or it will stay an aggregate, in which case we
!          --  have failed to create a packed value for it.
  
!          if Present (Component_Associations (N)) then
!             Convert_To_Positional (N, Handle_Bit_Packed => True);
!             return Nkind (N) /= N_Aggregate;
!          end if;
  
!          --  Otherwise we are all positional, so convert to proper value
  
!          declare
!             Lov : constant Int := UI_To_Int (Lob);
!             Hiv : constant Int := UI_To_Int (Hib);
  
!             Len : constant Nat := Int'Max (0, Hiv - Lov + 1);
!             --  The length of the array (number of elements)
  
!             Aggregate_Val : Uint;
!             --  Value of aggregate. The value is set in the low order bits of
!             --  this value. For the little-endian case, the values are stored
!             --  from low-order to high-order and for the big-endian case the
!             --  values are stored from high-order to low-order. Note that gigi
!             --  will take care of the conversions to left justify the value in
!             --  the big endian case (because of left justified modular type
!             --  processing), so we do not have to worry about that here.
  
!             Lit : Node_Id;
!             --  Integer literal for resulting constructed value
  
!             Shift : Nat;
!             --  Shift count from low order for next value
  
!             Incr : Int;
!             --  Shift increment for loop
  
!             Expr : Node_Id;
!             --  Next expression from positional parameters of aggregate
  
!             Left_Justified : Boolean;
!             --  Set True if we are filling the high order bits of the target
!             --  value (i.e. the value is left justified).
  
!          begin
!             --  For little endian, we fill up the low order bits of the target
!             --  value. For big endian we fill up the high order bits of the
!             --  target value (which is a left justified modular value).
  
!             Left_Justified := Bytes_Big_Endian;
  
!             --  Switch justification if using -gnatd8
  
!             if Debug_Flag_8 then
!                Left_Justified := not Left_Justified;
!             end if;
  
!             --  Switch justfification if reverse storage order
  
!             if Reverse_Storage_Order (Base_Type (Typ)) then
!                Left_Justified := not Left_Justified;
!             end if;
  
!             if Left_Justified then
!                Shift := Csiz * (Len - 1);
!                Incr  := -Csiz;
!             else
!                Shift := 0;
!                Incr  := +Csiz;
!             end if;
  
!             --  Loop to set the values
  
!             if Len = 0 then
!                Aggregate_Val := Uint_0;
!             else
!                Expr := First (Expressions (N));
!                Aggregate_Val := Get_Component_Val (Expr) * Uint_2 ** Shift;
  
!                for J in 2 .. Len loop
!                   Shift := Shift + Incr;
!                   Next (Expr);
!                   Aggregate_Val :=
!                     Aggregate_Val + Get_Component_Val (Expr) * Uint_2 ** Shift;
!                end loop;
!             end if;
  
!             --  Now we can rewrite with the proper value
  
!             Lit := Make_Integer_Literal (Loc, Intval => Aggregate_Val);
!             Set_Print_In_Hex (Lit);
  
!             --  Construct the expression using this literal. Note that it is
!             --  important to qualify the literal with its proper modular type
!             --  since universal integer does not have the required range and
!             --  also this is a left justified modular type, which is important
!             --  in the big-endian case.
  
!             Rewrite (N,
!               Unchecked_Convert_To (Typ,
!                 Make_Qualified_Expression (Loc,
!                   Subtype_Mark =>
!                     New_Occurrence_Of (Packed_Array_Impl_Type (Typ), Loc),
!                   Expression   => Lit)));
  
!             Analyze_And_Resolve (N, Typ);
!             return True;
           end;
        end;
  
--- 9405,9558 ----
              return Val mod Uint_2 ** Csiz;
           end Get_Component_Val;
  
+          Bounds : constant Range_Nodes := Get_Index_Bounds (First_Index (Typ));
+ 
        --  Here we know we have a one dimensional bit packed array
  
        begin
           --  Cannot do anything if bounds are dynamic
  
!          if not (Compile_Time_Known_Value (Bounds.First)
!                    and then
!                  Compile_Time_Known_Value (Bounds.Last))
           then
              return False;
           end if;
  
!          declare
!             Bounds_Vals : Range_Values;
!             --  Compile-time known values of bounds
!          begin
!             --  Or are silly out of range of int bounds
  
!             Bounds_Vals.First := Expr_Value (Bounds.First);
!             Bounds_Vals.Last := Expr_Value (Bounds.Last);
  
!             if not UI_Is_In_Int_Range (Bounds_Vals.First)
!                  or else
!                not UI_Is_In_Int_Range (Bounds_Vals.Last)
!             then
!                return False;
!             end if;
  
!             --  At this stage we have a suitable aggregate for handling at
!             --  compile time. The only remaining checks are that the values of
!             --  expressions in the aggregate are compile-time known (checks are
!             --  performed by Get_Component_Val), and that any subtypes or
!             --  ranges are statically known.
  
!             --  If the aggregate is not fully positional at this stage, then
!             --  convert it to positional form. Either this will fail, in which
!             --  case we can do nothing, or it will succeed, in which case we
!             --  have succeeded in handling the aggregate and transforming it
!             --  into a modular value, or it will stay an aggregate, in which
!             --  case we have failed to create a packed value for it.
  
!             if Present (Component_Associations (N)) then
!                Convert_To_Positional (N, Handle_Bit_Packed => True);
!                return Nkind (N) /= N_Aggregate;
!             end if;
  
!             --  Otherwise we are all positional, so convert to proper value
  
!             declare
!                Len : constant Nat :=
!                  Int'Max (0, UI_To_Int (Bounds_Vals.Last) -
!                              UI_To_Int (Bounds_Vals.First) + 1);
!                --  The length of the array (number of elements)
  
!                Aggregate_Val : Uint;
!                --  Value of aggregate. The value is set in the low order bits
!                --  of this value. For the little-endian case, the values are
!                --  stored from low-order to high-order and for the big-endian
!                --  case the values are stored from high order to low order.
!                --  Note that gigi will take care of the conversions to left
!                --  justify the value in the big endian case (because of left
!                --  justified modular type processing), so we do not have to
!                --  worry about that here.
  
!                Lit : Node_Id;
!                --  Integer literal for resulting constructed value
  
!                Shift : Nat;
!                --  Shift count from low order for next value
  
!                Incr : Int;
!                --  Shift increment for loop
  
!                Expr : Node_Id;
!                --  Next expression from positional parameters of aggregate
  
!                Left_Justified : Boolean;
!                --  Set True if we are filling the high order bits of the target
!                --  value (i.e. the value is left justified).
  
!             begin
!                --  For little endian, we fill up the low order bits of the
!                --  target value. For big endian we fill up the high order bits
!                --  of the target value (which is a left justified modular
!                --  value).
  
!                Left_Justified := Bytes_Big_Endian;
  
!                --  Switch justification if using -gnatd8
  
!                if Debug_Flag_8 then
!                   Left_Justified := not Left_Justified;
!                end if;
  
!                --  Switch justfification if reverse storage order
  
!                if Reverse_Storage_Order (Base_Type (Typ)) then
!                   Left_Justified := not Left_Justified;
!                end if;
  
!                if Left_Justified then
!                   Shift := Csiz * (Len - 1);
!                   Incr  := -Csiz;
!                else
!                   Shift := 0;
!                   Incr  := +Csiz;
!                end if;
  
!                --  Loop to set the values
  
!                if Len = 0 then
!                   Aggregate_Val := Uint_0;
!                else
!                   Expr := First (Expressions (N));
!                   Aggregate_Val := Get_Component_Val (Expr) * Uint_2 ** Shift;
  
!                   for J in 2 .. Len loop
!                      Shift := Shift + Incr;
!                      Next (Expr);
!                      Aggregate_Val :=
!                        Aggregate_Val +
!                        Get_Component_Val (Expr) * Uint_2 ** Shift;
!                   end loop;
!                end if;
  
!                --  Now we can rewrite with the proper value
  
!                Lit := Make_Integer_Literal (Loc, Intval => Aggregate_Val);
!                Set_Print_In_Hex (Lit);
  
!                --  Construct the expression using this literal. Note that it
!                --  is important to qualify the literal with its proper modular
!                --  type since universal integer does not have the required
!                --  range and also this is a left justified modular type,
!                --  which is important in the big-endian case.
  
!                Rewrite (N,
!                  Unchecked_Convert_To (Typ,
!                    Make_Qualified_Expression (Loc,
!                      Subtype_Mark =>
!                        New_Occurrence_Of (Packed_Array_Impl_Type (Typ), Loc),
!                      Expression   => Lit)));
  
!                Analyze_And_Resolve (N, Typ);
!                return True;
!             end;
           end;
        end;
  
*************** package body Exp_Aggr is
*** 9229,9243 ****
     ----------------
  
     function Must_Slide
!      (Obj_Type : Entity_Id;
        Typ      : Entity_Id) return Boolean
     is
-       L1, L2, H1, H2 : Node_Id;
- 
     begin
        --  No sliding if the type of the object is not established yet, if it is
        --  an unconstrained type whose actual subtype comes from the aggregate,
!       --  or if the two types are identical.
  
        if not Is_Array_Type (Obj_Type) then
           return False;
--- 9624,9639 ----
     ----------------
  
     function Must_Slide
!      (Aggr     : Node_Id;
!       Obj_Type : Entity_Id;
        Typ      : Entity_Id) return Boolean
     is
     begin
        --  No sliding if the type of the object is not established yet, if it is
        --  an unconstrained type whose actual subtype comes from the aggregate,
!       --  or if the two types are identical. If the aggregate contains only
!       --  an Others_Clause it gets its type from the context and no sliding
!       --  is involved either.
  
        if not Is_Array_Type (Obj_Type) then
           return False;
*************** package body Exp_Aggr is
*** 9248,9270 ****
        elsif Typ = Obj_Type then
           return False;
  
        else
           --  Sliding can only occur along the first dimension
  
!          Get_Index_Bounds (First_Index (Typ), L1, H1);
!          Get_Index_Bounds (First_Index (Obj_Type), L2, H2);
  
!          if not Is_OK_Static_Expression (L1) or else
!             not Is_OK_Static_Expression (L2) or else
!             not Is_OK_Static_Expression (H1) or else
!             not Is_OK_Static_Expression (H2)
!          then
!             return False;
!          else
!             return Expr_Value (L1) /= Expr_Value (L2)
!                      or else
!                    Expr_Value (H1) /= Expr_Value (H2);
!          end if;
        end if;
     end Must_Slide;
  
--- 9644,9677 ----
        elsif Typ = Obj_Type then
           return False;
  
+       elsif Is_Others_Aggregate (Aggr) then
+          return False;
+ 
        else
           --  Sliding can only occur along the first dimension
+          --  If any the bounds of non-static sliding is required
+          --  to force potential range checks.
  
!          declare
!             Bounds1 : constant Range_Nodes :=
!               Get_Index_Bounds (First_Index (Typ));
!             Bounds2 : constant Range_Nodes :=
!               Get_Index_Bounds (First_Index (Obj_Type));
  
!          begin
!             if not Is_OK_Static_Expression (Bounds1.First) or else
!                not Is_OK_Static_Expression (Bounds2.First) or else
!                not Is_OK_Static_Expression (Bounds1.Last) or else
!                not Is_OK_Static_Expression (Bounds2.Last)
!             then
!                return True;
! 
!             else
!                return Expr_Value (Bounds1.First) /= Expr_Value (Bounds2.First)
!                         or else
!                       Expr_Value (Bounds1.Last) /= Expr_Value (Bounds2.Last);
!             end if;
!          end;
        end if;
     end Must_Slide;
  
*************** package body Exp_Aggr is
*** 9317,9323 ****
        --    type Res_Typ is access all Comp_Typ;
  
        Res_Typ := Make_Temporary (Loc, 'A');
!       Set_Ekind (Res_Typ, E_General_Access_Type);
        Set_Directly_Designated_Type (Res_Typ, Comp_Typ);
  
        Add_Item
--- 9724,9730 ----
        --    type Res_Typ is access all Comp_Typ;
  
        Res_Typ := Make_Temporary (Loc, 'A');
!       Mutate_Ekind (Res_Typ, E_General_Access_Type);
        Set_Directly_Designated_Type (Res_Typ, Comp_Typ);
  
        Add_Item
*************** package body Exp_Aggr is
*** 9337,9343 ****
        --  its lifetime is bounded by the current array or record component.
  
        Res_Id := Make_Temporary (Loc, 'R');
!       Set_Ekind (Res_Id, E_Constant);
        Set_Etype (Res_Id, Res_Typ);
  
        --  Mark the transient object as successfully processed to avoid double
--- 9744,9750 ----
        --  its lifetime is bounded by the current array or record component.
  
        Res_Id := Make_Temporary (Loc, 'R');
!       Mutate_Ekind (Res_Id, E_Constant);
        Set_Etype (Res_Id, Res_Typ);
  
        --  Mark the transient object as successfully processed to avoid double
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_aggr.ads gcc-12.1.0/gcc/ada/exp_aggr.ads
*** gcc-11.3.0/gcc/ada/exp_aggr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_aggr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_atag.adb gcc-12.1.0/gcc/ada/exp_atag.adb
*** gcc-11.3.0/gcc/ada/exp_atag.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_atag.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2006-2022, 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- --
***************
*** 23,44 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Exp_Disp; use Exp_Disp;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Rtsfind;  use Rtsfind;
! with Sinfo;    use Sinfo;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Disp; use Sem_Disp;
! with Sem_Util; use Sem_Util;
! with Stand;    use Stand;
! with Snames;   use Snames;
! with Tbuild;   use Tbuild;
  
  package body Exp_Atag is
  
--- 23,47 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Exp_Disp;       use Exp_Disp;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Rtsfind;        use Rtsfind;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Util;       use Sem_Util;
! with Stand;          use Stand;
! with Snames;         use Snames;
! with Tbuild;         use Tbuild;
  
  package body Exp_Atag is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_atag.ads gcc-12.1.0/gcc/ada/exp_atag.ads
*** gcc-11.3.0/gcc/ada/exp_atag.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_atag.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2006-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_attr.adb gcc-12.1.0/gcc/ada/exp_attr.adb
*** gcc-11.3.0/gcc/ada/exp_attr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_attr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,74 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Exp_Atag; use Exp_Atag;
! with Exp_Ch3;  use Exp_Ch3;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_Ch9;  use Exp_Ch9;
! with Exp_Dist; use Exp_Dist;
! with Exp_Imgv; use Exp_Imgv;
! with Exp_Pakd; use Exp_Pakd;
! with Exp_Strm; use Exp_Strm;
  with Exp_Put_Image;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Expander; use Expander;
! with Freeze;   use Freeze;
! with Gnatvsn;  use Gnatvsn;
! with Itypes;   use Itypes;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nmake;    use Nmake;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch7;  use Sem_Ch7;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Uintp;    use Uintp;
! with Uname;    use Uname;
! with Urealp;   use Urealp;
! with Validsw;  use Validsw;
  
  package body Exp_Attr is
  
--- 23,79 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Exp_Atag;       use Exp_Atag;
! with Exp_Ch3;        use Exp_Ch3;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch9;        use Exp_Ch9;
! with Exp_Dist;       use Exp_Dist;
! with Exp_Imgv;       use Exp_Imgv;
! with Exp_Pakd;       use Exp_Pakd;
! with Exp_Strm;       use Exp_Strm;
  with Exp_Put_Image;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Expander;       use Expander;
! with Freeze;         use Freeze;
! with Gnatvsn;        use Gnatvsn;
! with Itypes;         use Itypes;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nmake;          use Nmake;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Strub;          use Strub;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
! with Uname;          use Uname;
! with Urealp;         use Urealp;
! with Validsw;        use Validsw;
  
  package body Exp_Attr is
  
*************** package body Exp_Attr is
*** 113,120 ****
     procedure Compile_Stream_Body_In_Scope
       (N     : Node_Id;
        Decl  : Node_Id;
!       Arr   : Entity_Id;
!       Check : Boolean);
     --  The body for a stream subprogram may be generated outside of the scope
     --  of the type. If the type is fully private, it may depend on the full
     --  view of other types (e.g. indexes) that are currently private as well.
--- 118,124 ----
     procedure Compile_Stream_Body_In_Scope
       (N     : Node_Id;
        Decl  : Node_Id;
!       Arr   : Entity_Id);
     --  The body for a stream subprogram may be generated outside of the scope
     --  of the type. If the type is fully private, it may depend on the full
     --  view of other types (e.g. indexes) that are currently private as well.
*************** package body Exp_Attr is
*** 162,169 ****
     --  the appropriate instantiation of System.Fat_Gen. Float arguments in Args
     --  have already been converted to the floating-point type for which Pkg was
     --  instantiated. The Nam argument is the relevant attribute processing
!    --  routine to be called. This is the same as the attribute name, except in
!    --  the Unaligned_Valid case.
  
     procedure Expand_Fpt_Attribute_R (N : Node_Id);
     --  This procedure expands a call to a floating-point attribute function
--- 166,172 ----
     --  the appropriate instantiation of System.Fat_Gen. Float arguments in Args
     --  have already been converted to the floating-point type for which Pkg was
     --  instantiated. The Nam argument is the relevant attribute processing
!    --  routine to be called. This is the same as the attribute name.
  
     procedure Expand_Fpt_Attribute_R (N : Node_Id);
     --  This procedure expands a call to a floating-point attribute function
*************** package body Exp_Attr is
*** 385,391 ****
        --       Stmts
        --    end Func_Id;
  
!       Set_Ekind       (Func_Id, E_Function);
        Set_Is_Internal (Func_Id);
        Set_Is_Pure     (Func_Id);
  
--- 388,394 ----
        --       Stmts
        --    end Func_Id;
  
!       Mutate_Ekind    (Func_Id, E_Function);
        Set_Is_Internal (Func_Id);
        Set_Is_Pure     (Func_Id);
  
*************** package body Exp_Attr is
*** 401,408 ****
                Parameter_Specifications => New_List (
                  Make_Parameter_Specification (Loc,
                    Defining_Identifier => Obj_Id,
-                   In_Present          => True,
-                   Out_Present         => False,
                    Parameter_Type      => New_Occurrence_Of (Formal_Typ, Loc))),
                Result_Definition        =>
                  New_Occurrence_Of (Standard_Boolean, Loc)),
--- 404,409 ----
*************** package body Exp_Attr is
*** 733,739 ****
     --  Start of processing for Build_Record_VS_Func
  
     begin
!       Typ := Rec_Typ;
  
        --  Use the root type when dealing with a class-wide type
  
--- 734,740 ----
     --  Start of processing for Build_Record_VS_Func
  
     begin
!       Typ := Validated_View (Rec_Typ);
  
        --  Use the root type when dealing with a class-wide type
  
*************** package body Exp_Attr is
*** 828,834 ****
        --       Stmts
        --    end Func_Id;
  
!       Set_Ekind       (Func_Id, E_Function);
        Set_Is_Internal (Func_Id);
        Set_Is_Pure     (Func_Id);
  
--- 829,835 ----
        --       Stmts
        --    end Func_Id;
  
!       Mutate_Ekind    (Func_Id, E_Function);
        Set_Is_Internal (Func_Id);
        Set_Is_Pure     (Func_Id);
  
*************** package body Exp_Attr is
*** 863,870 ****
     procedure Compile_Stream_Body_In_Scope
       (N     : Node_Id;
        Decl  : Node_Id;
!       Arr   : Entity_Id;
!       Check : Boolean)
     is
        C_Type  : constant Entity_Id := Base_Type (Component_Type (Arr));
        Curr    : constant Entity_Id := Current_Scope;
--- 864,870 ----
     procedure Compile_Stream_Body_In_Scope
       (N     : Node_Id;
        Decl  : Node_Id;
!       Arr   : Entity_Id)
     is
        C_Type  : constant Entity_Id := Base_Type (Component_Type (Arr));
        Curr    : constant Entity_Id := Current_Scope;
*************** package body Exp_Attr is
*** 918,928 ****
           Install := False;
        end if;
  
!       if Check then
!          Insert_Action (N, Decl);
!       else
!          Insert_Action (N, Decl, Suppress => All_Checks);
!       end if;
  
        if Install then
  
--- 918,924 ----
           Install := False;
        end if;
  
!       Insert_Action (N, Decl);
  
        if Install then
  
*************** package body Exp_Attr is
*** 2149,2155 ****
                 --  the node with the type imposed by the context.
  
                 if Nkind (Parent (N)) = N_Unchecked_Type_Conversion
!                  and then Etype (Parent (N)) = RTE (RE_Prim_Ptr)
                 then
                    Set_Etype (N, RTE (RE_Prim_Ptr));
  
--- 2145,2151 ----
                 --  the node with the type imposed by the context.
  
                 if Nkind (Parent (N)) = N_Unchecked_Type_Conversion
!                  and then Is_RTE (Etype (Parent (N)), RE_Prim_Ptr)
                 then
                    Set_Etype (N, RTE (RE_Prim_Ptr));
  
*************** package body Exp_Attr is
*** 2165,2170 ****
--- 2161,2167 ----
  
                    begin
                       Subp_Typ := Create_Itype (E_Subprogram_Type, N);
+                      Copy_Strub_Mode (Subp_Typ, Subp);
                       Set_Etype (Subp_Typ, Etype (Subp));
                       Set_Returns_By_Ref (Subp_Typ, Returns_By_Ref (Subp));
  
*************** package body Exp_Attr is
*** 2218,2223 ****
--- 2215,2234 ----
              if Is_Access_Protected_Subprogram_Type (Btyp) then
                 Expand_Access_To_Protected_Op (N, Pref, Typ);
  
+             --  If prefix is a subprogram that has class-wide preconditions and
+             --  an indirect-call wrapper (ICW) of such subprogram is available
+             --  then replace the prefix by the ICW.
+ 
+             elsif Is_Access_Subprogram_Type (Btyp)
+               and then Is_Entity_Name (Pref)
+               and then Present (Class_Preconditions (Entity (Pref)))
+               and then Present (Indirect_Call_Wrapper (Entity (Pref)))
+             then
+                Rewrite (Pref,
+                  New_Occurrence_Of
+                    (Indirect_Call_Wrapper (Entity (Pref)), Loc));
+                Analyze_And_Resolve (N, Typ);
+ 
              --  If prefix is a type name, this is a reference to the current
              --  instance of the type, within its initialization procedure.
  
*************** package body Exp_Attr is
*** 2362,2367 ****
--- 2373,2379 ----
                           = E_Anonymous_Access_Type
                and then Present (Extra_Accessibility
                                  (Entity (Prefix (Enc_Object))))
+               and then not No_Dynamic_Accessibility_Checks_Enabled (Enc_Object)
              then
                 Apply_Accessibility_Check (Prefix (Enc_Object), Typ, N);
  
*************** package body Exp_Attr is
*** 2800,2809 ****
                  Name                   =>
                    New_Occurrence_Of (RTE (RE_Callable), Loc),
                  Parameter_Associations => New_List (
!                   Make_Unchecked_Type_Conversion (Loc,
!                     Subtype_Mark =>
!                       New_Occurrence_Of (RTE (RO_ST_Task_Id), Loc),
!                     Expression   => Build_Disp_Get_Task_Id_Call (Pref)))));
  
           else
              Rewrite (N, Build_Call_With_Task (Pref, RTE (RE_Callable)));
--- 2812,2820 ----
                  Name                   =>
                    New_Occurrence_Of (RTE (RE_Callable), Loc),
                  Parameter_Associations => New_List (
!                   Unchecked_Convert_To
!                     (RTE (RO_ST_Task_Id),
!                      Build_Disp_Get_Task_Id_Call (Pref)))));
  
           else
              Rewrite (N, Build_Call_With_Task (Pref, RTE (RE_Callable)));
*************** package body Exp_Attr is
*** 3633,3640 ****
        --             min (scale of Typ'Small, 0)
  
        --    For other ordinary fixed-point types
!       --      xx   = Real
!       --      ftyp = Universal_Real
        --      pm   = none
  
        --  Note that we know that the type is a nonstatic subtype, or Fore would
--- 3644,3651 ----
        --             min (scale of Typ'Small, 0)
  
        --    For other ordinary fixed-point types
!       --      xx   = Fixed
!       --      ftyp = Long_Float
        --      pm   = none
  
        --  Note that we know that the type is a nonstatic subtype, or Fore would
*************** package body Exp_Attr is
*** 3693,3700 ****
                       Fid  := RE_Fore_Fixed128;
                       Ftyp := RTE (RE_Integer_128);
                    else
!                      Fid  := RE_Fore_Real;
!                      Ftyp := Universal_Real;
                    end if;
                 end;
              end if;
--- 3704,3711 ----
                       Fid  := RE_Fore_Fixed128;
                       Ftyp := RTE (RE_Integer_128);
                    else
!                      Fid  := RE_Fore_Fixed;
!                      Ftyp := Standard_Long_Float;
                    end if;
                 end;
              end if;
*************** package body Exp_Attr is
*** 3723,3729 ****
              --  For ordinary fixed-point types, append Num, Den and Scale
              --  parameters and also set to do literal conversion
  
!             elsif Fid /= RE_Fore_Real then
                 Set_Conversion_OK (First (Arg_List));
                 Set_Conversion_OK (Next (First (Arg_List)));
  
--- 3734,3740 ----
              --  For ordinary fixed-point types, append Num, Den and Scale
              --  parameters and also set to do literal conversion
  
!             elsif Fid /= RE_Fore_Fixed then
                 Set_Conversion_OK (First (Arg_List));
                 Set_Conversion_OK (Next (First (Arg_List)));
  
*************** package body Exp_Attr is
*** 3773,3779 ****
        --------------
  
        when Attribute_From_Any => From_Any : declare
!          Decls  : constant List_Id   := New_List;
  
        begin
           Rewrite (N,
--- 3784,3790 ----
        --------------
  
        when Attribute_From_Any => From_Any : declare
!          Decls : constant List_Id := New_List;
  
        begin
           Rewrite (N,
*************** package body Exp_Attr is
*** 3887,3894 ****
           if Ptyp = Standard_Exception_Type then
              Id_Kind := RTE (RE_Exception_Id);
  
!             if Present (Renamed_Object (Entity (Pref))) then
!                Set_Entity (Pref, Renamed_Object (Entity (Pref)));
              end if;
  
              Rewrite (N,
--- 3898,3905 ----
           if Ptyp = Standard_Exception_Type then
              Id_Kind := RTE (RE_Exception_Id);
  
!             if Present (Renamed_Entity (Entity (Pref))) then
!                Set_Entity (Pref, Renamed_Entity (Entity (Pref)));
              end if;
  
              Rewrite (N,
*************** package body Exp_Attr is
*** 4126,4132 ****
  
              elsif Is_Array_Type (U_Type) then
                 Build_Array_Input_Function (Loc, U_Type, Decl, Fname);
!                Compile_Stream_Body_In_Scope (N, Decl, U_Type, Check => False);
  
              --  Dispatching case with class-wide type
  
--- 4137,4143 ----
  
              elsif Is_Array_Type (U_Type) then
                 Build_Array_Input_Function (Loc, U_Type, Decl, Fname);
!                Compile_Stream_Body_In_Scope (N, Decl, U_Type);
  
              --  Dispatching case with class-wide type
  
*************** package body Exp_Attr is
*** 4239,4250 ****
                 --  type if the type lacks default discriminant values.
  
                 if Is_Unchecked_Union (Base_Type (U_Type))
!                  and then No (Discriminant_Constraint (U_Type))
                 then
!                   Insert_Action (N,
                      Make_Raise_Program_Error (Loc,
                        Reason => PE_Unchecked_Union_Restriction));
! 
                    return;
                 end if;
  
--- 4250,4262 ----
                 --  type if the type lacks default discriminant values.
  
                 if Is_Unchecked_Union (Base_Type (U_Type))
!                  and then
!                  No (Discriminant_Default_Value (First_Discriminant (U_Type)))
                 then
!                   Rewrite (N,
                      Make_Raise_Program_Error (Loc,
                        Reason => PE_Unchecked_Union_Restriction));
!                   Set_Etype (N, B_Type);
                    return;
                 end if;
  
*************** package body Exp_Attr is
*** 4600,4612 ****
        ----------------------------------
  
        when Attribute_Max_Size_In_Storage_Elements => declare
!          Typ  : constant Entity_Id := Etype (N);
!          Attr : Node_Id;
!          Atyp : Entity_Id;
! 
!          Conversion_Added : Boolean := False;
!          --  A flag which tracks whether the original attribute has been
!          --  wrapped inside a type conversion.
  
        begin
           --  If the prefix is X'Class, we transform it into a direct reference
--- 4612,4618 ----
        ----------------------------------
  
        when Attribute_Max_Size_In_Storage_Elements => declare
!          Typ : constant Entity_Id := Etype (N);
  
        begin
           --  If the prefix is X'Class, we transform it into a direct reference
*************** package body Exp_Attr is
*** 4620,4659 ****
              return;
           end if;
  
-          Apply_Universal_Integer_Attribute_Checks (N);
- 
-          --  The universal integer check may sometimes add a type conversion,
-          --  retrieve the original attribute reference from the expression.
- 
-          Attr := N;
- 
-          if Nkind (Attr) = N_Type_Conversion then
-             Attr := Expression (Attr);
-             Conversion_Added := True;
-          end if;
- 
-          pragma Assert (Nkind (Attr) = N_Attribute_Reference);
- 
           --  Heap-allocated controlled objects contain two extra pointers which
           --  are not part of the actual type. Transform the attribute reference
           --  into a runtime expression to add the size of the hidden header.
  
!          if Needs_Finalization (Ptyp)
!            and then not Header_Size_Added (Attr)
!          then
!             Set_Header_Size_Added (Attr);
! 
!             Atyp := Etype (Attr);
  
              --  Generate:
              --    P'Max_Size_In_Storage_Elements +
!             --      Atyp (Header_Size_With_Padding (Ptyp'Alignment))
  
!             Rewrite (Attr,
                Make_Op_Add (Loc,
!                 Left_Opnd  => Relocate_Node (Attr),
                  Right_Opnd =>
!                   Convert_To (Atyp,
                      Make_Function_Call (Loc,
                        Name                   =>
                          New_Occurrence_Of
--- 4626,4647 ----
              return;
           end if;
  
           --  Heap-allocated controlled objects contain two extra pointers which
           --  are not part of the actual type. Transform the attribute reference
           --  into a runtime expression to add the size of the hidden header.
  
!          if Needs_Finalization (Ptyp) and then not Header_Size_Added (N) then
!             Set_Header_Size_Added (N);
  
              --  Generate:
              --    P'Max_Size_In_Storage_Elements +
!             --      Typ (Header_Size_With_Padding (Ptyp'Alignment))
  
!             Rewrite (N,
                Make_Op_Add (Loc,
!                 Left_Opnd  => Relocate_Node (N),
                  Right_Opnd =>
!                   Convert_To (Typ,
                      Make_Function_Call (Loc,
                        Name                   =>
                          New_Occurrence_Of
*************** package body Exp_Attr is
*** 4665,4680 ****
                              New_Occurrence_Of (Ptyp, Loc),
                            Attribute_Name => Name_Alignment))))));
  
!             Analyze_And_Resolve (Attr, Atyp);
! 
!             --  Add a conversion to the target type
! 
!             if not Conversion_Added then
!                Convert_To_And_Rewrite (Typ, Attr);
!             end if;
! 
              return;
           end if;
        end;
  
        --------------------
--- 4653,4665 ----
                              New_Occurrence_Of (Ptyp, Loc),
                            Attribute_Name => Name_Alignment))))));
  
!             Analyze_And_Resolve (N, Typ);
              return;
           end if;
+ 
+          --  In the other cases apply the required checks
+ 
+          Apply_Universal_Integer_Attribute_Checks (N);
        end;
  
        --------------------
*************** package body Exp_Attr is
*** 4862,4868 ****
           --  Set the entity kind now in order to mark the temporary as a
           --  handler of attribute 'Old's prefix.
  
!          Set_Ekind (Temp, E_Constant);
           Set_Stores_Attribute_Old_Prefix (Temp);
  
           --  Push the scope of the related subprogram where _Postcondition
--- 4847,4853 ----
           --  Set the entity kind now in order to mark the temporary as a
           --  handler of attribute 'Old's prefix.
  
!          Mutate_Ekind (Temp, E_Constant);
           Set_Stores_Attribute_Old_Prefix (Temp);
  
           --  Push the scope of the related subprogram where _Postcondition
*************** package body Exp_Attr is
*** 5262,5268 ****
  
              elsif Is_Array_Type (U_Type) then
                 Build_Array_Output_Procedure (Loc, U_Type, Decl, Pname);
!                Compile_Stream_Body_In_Scope (N, Decl, U_Type, Check => False);
  
              --  Class-wide case, first output external tag, then dispatch
              --  to the appropriate primitive Output function (RM 13.13.2(31)).
--- 5247,5253 ----
  
              elsif Is_Array_Type (U_Type) then
                 Build_Array_Output_Procedure (Loc, U_Type, Decl, Pname);
!                Compile_Stream_Body_In_Scope (N, Decl, U_Type);
  
              --  Class-wide case, first output external tag, then dispatch
              --  to the appropriate primitive Output function (RM 13.13.2(31)).
*************** package body Exp_Attr is
*** 5361,5372 ****
                 --  values.
  
                 if Is_Unchecked_Union (Base_Type (U_Type))
!                  and then No (Discriminant_Constraint (U_Type))
                 then
!                   Insert_Action (N,
                      Make_Raise_Program_Error (Loc,
                        Reason => PE_Unchecked_Union_Restriction));
! 
                    return;
                 end if;
  
--- 5346,5358 ----
                 --  values.
  
                 if Is_Unchecked_Union (Base_Type (U_Type))
!                  and then
!                  No (Discriminant_Default_Value (First_Discriminant (U_Type)))
                 then
!                   Rewrite (N,
                      Make_Raise_Program_Error (Loc,
                        Reason => PE_Unchecked_Union_Restriction));
!                   Set_Etype (N, Standard_Void_Type);
                    return;
                 end if;
  
*************** package body Exp_Attr is
*** 5557,5562 ****
--- 5543,5563 ----
           end if;
        end Pred;
  
+       ----------------------------------
+       -- Preelaborable_Initialization --
+       ----------------------------------
+ 
+       when Attribute_Preelaborable_Initialization =>
+ 
+          --  This attribute should already be folded during analysis, but if
+          --  for some reason it hasn't been, we fold it now.
+ 
+          Fold_Uint
+            (N,
+             UI_From_Int
+               (Boolean'Pos (Has_Preelaborable_Initialization (Ptyp))),
+             Static => False);
+ 
        --------------
        -- Priority --
        --------------
*************** package body Exp_Attr is
*** 6113,6119 ****
  
              elsif Is_Array_Type (U_Type) then
                 Build_Array_Read_Procedure (N, U_Type, Decl, Pname);
!                Compile_Stream_Body_In_Scope (N, Decl, U_Type, Check => False);
  
              --  Tagged type case, use the primitive Read function. Note that
              --  this will dispatch in the class-wide case which is what we want
--- 6114,6120 ----
  
              elsif Is_Array_Type (U_Type) then
                 Build_Array_Read_Procedure (N, U_Type, Decl, Pname);
!                Compile_Stream_Body_In_Scope (N, Decl, U_Type);
  
              --  Tagged type case, use the primitive Read function. Note that
              --  this will dispatch in the class-wide case which is what we want
*************** package body Exp_Attr is
*** 6144,6153 ****
                    return;
                 end if;
  
!                if Has_Discriminants (U_Type)
!                  and then Present
!                    (Discriminant_Default_Value (First_Discriminant (U_Type)))
!                then
                    Build_Mutable_Record_Read_Procedure
                      (Loc, Full_Base (U_Type), Decl, Pname);
                 else
--- 6145,6151 ----
                    return;
                 end if;
  
!                if Has_Defaulted_Discriminants (U_Type) then
                    Build_Mutable_Record_Read_Procedure
                      (Loc, Full_Base (U_Type), Decl, Pname);
                 else
*************** package body Exp_Attr is
*** 6155,6165 ****
                      (Loc, Full_Base (U_Type), Decl, Pname);
                 end if;
  
!                --  Suppress checks, uninitialized or otherwise invalid
!                --  data does not cause constraint errors to be raised for
!                --  a complete record read.
! 
!                Insert_Action (N, Decl, All_Checks);
              end if;
           end if;
  
--- 6153,6159 ----
                      (Loc, Full_Base (U_Type), Decl, Pname);
                 end if;
  
!                Insert_Action (N, Decl);
              end if;
           end if;
  
*************** package body Exp_Attr is
*** 6300,6306 ****
                 --  size. This applies to both types and objects. The size of an
                 --  object can be specified in the following ways:
  
!                --    An explicit size object is given for an object
                 --    A component size is specified for an indexed component
                 --    A component clause is specified for a selected component
                 --    The object is a component of a packed composite object
--- 6294,6300 ----
                 --  size. This applies to both types and objects. The size of an
                 --  object can be specified in the following ways:
  
!                --    An explicit size clause is given for an object
                 --    A component size is specified for an indexed component
                 --    A component clause is specified for a selected component
                 --    The object is a component of a packed composite object
*************** package body Exp_Attr is
*** 6316,6322 ****
                                  or else Is_Packed (Etype (Prefix (Pref)))))
                   or else
                     (Nkind (Pref) = N_Indexed_Component
!                      and then (Component_Size (Etype (Prefix (Pref))) /= 0
                                  or else Is_Packed (Etype (Prefix (Pref)))))
                 then
                    Set_Attribute_Name (N, Name_Size);
--- 6310,6316 ----
                                  or else Is_Packed (Etype (Prefix (Pref)))))
                   or else
                     (Nkind (Pref) = N_Indexed_Component
!                      and then (Known_Component_Size (Etype (Prefix (Pref)))
                                  or else Is_Packed (Etype (Prefix (Pref)))))
                 then
                    Set_Attribute_Name (N, Name_Size);
*************** package body Exp_Attr is
*** 6782,6791 ****
                  Name                   =>
                    New_Occurrence_Of (RTE (RE_Terminated), Loc),
                  Parameter_Associations => New_List (
!                   Make_Unchecked_Type_Conversion (Loc,
!                     Subtype_Mark =>
!                       New_Occurrence_Of (RTE (RO_ST_Task_Id), Loc),
!                     Expression   => Build_Disp_Get_Task_Id_Call (Pref)))));
  
           elsif Restricted_Profile then
              Rewrite (N,
--- 6776,6784 ----
                  Name                   =>
                    New_Occurrence_Of (RTE (RE_Terminated), Loc),
                  Parameter_Associations => New_List (
!                   Unchecked_Convert_To
!                     (RTE (RO_ST_Task_Id),
!                      Build_Disp_Get_Task_Id_Call (Pref)))));
  
           elsif Restricted_Profile then
              Rewrite (N,
*************** package body Exp_Attr is
*** 7118,7126 ****
              --  Start of processing for Float_Valid
  
              begin
!                --  The C and AAMP back-ends handle Valid for fpt types
  
!                if Modify_Tree_For_C or else Float_Rep (PBtyp) = AAMP then
                    Analyze_And_Resolve (Pref, Ptyp);
                    Set_Etype (N, Standard_Boolean);
                    Set_Analyzed (N);
--- 7111,7119 ----
              --  Start of processing for Float_Valid
  
              begin
!                --  The C back end handles Valid for floating-point types
  
!                if Modify_Tree_For_C then
                    Analyze_And_Resolve (Pref, Ptyp);
                    Set_Etype (N, Standard_Boolean);
                    Set_Analyzed (N);
*************** package body Exp_Attr is
*** 7331,7337 ****
           --  of the size of the type, not the range of the values). We write
           --  this as two tests, rather than a range check, so that static
           --  evaluation will easily remove either or both of the checks if
!          --  they can be -statically determined to be true (this happens
           --  when the type of X is static and the range extends to the full
           --  range of stored values).
  
--- 7324,7330 ----
           --  of the size of the type, not the range of the values). We write
           --  this as two tests, rather than a range check, so that static
           --  evaluation will easily remove either or both of the checks if
!          --  they can be statically determined to be true (this happens
           --  when the type of X is static and the range extends to the full
           --  range of stored values).
  
*************** package body Exp_Attr is
*** 7352,7363 ****
  
           else
              declare
!                Uns : constant Boolean
!                        := Is_Unsigned_Type (Ptyp)
!                             or else (Is_Private_Type (Ptyp)
!                                       and then Is_Unsigned_Type (Btyp));
              begin
!                PBtyp := Integer_Type_For (Esize (Ptyp), Uns);
                 Rewrite (N, Make_Range_Test);
              end;
           end if;
--- 7345,7384 ----
  
           else
              declare
!                Uns  : constant Boolean :=
!                         Is_Unsigned_Type (Ptyp)
!                           or else (Is_Private_Type (Ptyp)
!                                     and then Is_Unsigned_Type (Btyp));
!                Size : Uint;
!                P    : Node_Id := Pref;
! 
              begin
!                --  If the prefix is an object, use the Esize from this object
!                --  to handle in a more user friendly way the case of objects
!                --  or components with a large Size aspect: if a Size aspect is
!                --  specified, we want to read a scalar value as large as the
!                --  Size, unless the Size is larger than
!                --  System_Max_Integer_Size.
! 
!                if Nkind (P) = N_Selected_Component then
!                   P := Selector_Name (P);
!                end if;
! 
!                if Nkind (P) in N_Has_Entity
!                  and then Present (Entity (P))
!                  and then Is_Object (Entity (P))
!                  and then Known_Esize (Entity (P))
!                then
!                   if Esize (Entity (P)) <= System_Max_Integer_Size then
!                      Size := Esize (Entity (P));
!                   else
!                      Size := UI_From_Int (System_Max_Integer_Size);
!                   end if;
!                else
!                   Size := Esize (Ptyp);
!                end if;
! 
!                PBtyp := Small_Integer_Type_For (Size, Uns);
                 Rewrite (N, Make_Range_Test);
              end;
           end if;
*************** package body Exp_Attr is
*** 7382,7387 ****
--- 7403,7415 ----
           Validity_Checks_On := Save_Validity_Checks_On;
        end Valid;
  
+       -----------------
+       -- Valid_Value --
+       -----------------
+ 
+       when Attribute_Valid_Value =>
+          Exp_Imgv.Expand_Valid_Value_Attribute (N);
+ 
        -------------------
        -- Valid_Scalars --
        -------------------
*************** package body Exp_Attr is
*** 7565,7578 ****
        --    typ'Value
        --      (Wide_Wide_String_To_String (X, Wide_Character_Encoding_Method))
  
!       --  Wide_Wide_String_To_String is a runtime function that converts its
!       --  wide string argument to String, converting any non-translatable
!       --  characters into appropriate escape sequences. This preserves the
!       --  required semantics of Wide_Wide_Value in all cases, and results in a
!       --  very simple implementation approach.
! 
!       --  It's not quite right where typ = Wide_Wide_Character, because the
!       --  encoding method may not cover the whole character type ???
  
        when Attribute_Wide_Wide_Value =>
           Rewrite (N,
--- 7593,7601 ----
        --    typ'Value
        --      (Wide_Wide_String_To_String (X, Wide_Character_Encoding_Method))
  
!       --  See Wide_Value for more information. This is not quite right where
!       --  typ = Wide_Wide_Character, because the encoding method may not cover
!       --  the whole character type.
  
        when Attribute_Wide_Wide_Value =>
           Rewrite (N,
*************** package body Exp_Attr is
*** 7714,7720 ****
  
              elsif Is_Array_Type (U_Type) then
                 Build_Array_Write_Procedure (N, U_Type, Decl, Pname);
!                Compile_Stream_Body_In_Scope (N, Decl, U_Type, Check => False);
  
              --  Tagged type case, use the primitive Write function. Note that
              --  this will dispatch in the class-wide case which is what we want
--- 7737,7743 ----
  
              elsif Is_Array_Type (U_Type) then
                 Build_Array_Write_Procedure (N, U_Type, Decl, Pname);
!                Compile_Stream_Body_In_Scope (N, Decl, U_Type);
  
              --  Tagged type case, use the primitive Write function. Note that
              --  this will dispatch in the class-wide case which is what we want
*************** package body Exp_Attr is
*** 7752,7761 ****
                    end if;
                 end if;
  
!                if Has_Discriminants (U_Type)
!                  and then Present
!                    (Discriminant_Default_Value (First_Discriminant (U_Type)))
!                then
                    Build_Mutable_Record_Write_Procedure
                      (Loc, Full_Base (U_Type), Decl, Pname);
                 else
--- 7775,7781 ----
                    end if;
                 end if;
  
!                if Has_Defaulted_Discriminants (U_Type) then
                    Build_Mutable_Record_Write_Procedure
                      (Loc, Full_Base (U_Type), Decl, Pname);
                 else
*************** package body Exp_Attr is
*** 7950,7956 ****
        elsif Id = Attribute_Size
          and then Is_Entity_Name (Pref)
          and then Is_Object (Entity (Pref))
-         and then Known_Esize (Entity (Pref))
          and then Known_Static_Esize (Entity (Pref))
        then
           Siz := Esize (Entity (Pref));
--- 7970,7975 ----
*************** package body Exp_Attr is
*** 8036,8042 ****
  
        --  Common processing for record and array component case
  
!       if Siz /= No_Uint and then Siz /= 0 then
           declare
              CS : constant Boolean := Comes_From_Source (N);
  
--- 8055,8061 ----
  
        --  Common processing for record and array component case
  
!       if Present (Siz) and then Siz /= 0 then
           declare
              CS : constant Boolean := Comes_From_Source (N);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_attr.ads gcc-12.1.0/gcc/ada/exp_attr.ads
*** gcc-11.3.0/gcc/ada/exp_attr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_attr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_cg.adb gcc-12.1.0/gcc/ada/exp_cg.adb
*** gcc-11.3.0/gcc/ada/exp_cg.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_cg.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
***************
*** 23,47 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Exp_Dbug; use Exp_Dbug;
! with Exp_Tss;  use Exp_Tss;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Opt;      use Opt;
! with Output;   use Output;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Disp; use Sem_Disp;
! with Sem_Type; use Sem_Type;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with System;   use System;
  with Table;
! with Uintp;    use Uintp;
  
  package body Exp_CG is
  
--- 23,51 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Exp_Dbug;       use Exp_Dbug;
! with Exp_Tss;        use Exp_Tss;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Opt;            use Opt;
! with Output;         use Output;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with System;         use System;
  with Table;
! with Uintp;          use Uintp;
  
  package body Exp_CG is
  
*************** package body Exp_CG is
*** 376,382 ****
                   and then Nkind (Parent (Par)) /= N_Compilation_Unit
                 loop
                    Par := Parent (Par);
!                   pragma Assert (Present (Par));
                 end loop;
  
                 Set_Parent (Copy, Par);
--- 380,393 ----
                   and then Nkind (Parent (Par)) /= N_Compilation_Unit
                 loop
                    Par := Parent (Par);
! 
!                   --  Par can legitimately be empty inside a class-wide
!                   --  precondition; the "real" call will be found inside the
!                   --  generated pragma.
! 
!                   if No (Par) then
!                      return;
!                   end if;
                 end loop;
  
                 Set_Parent (Copy, Par);
*************** package body Exp_CG is
*** 429,435 ****
     procedure Write_Call_Info (Call : Node_Id) is
        Ctrl_Arg : constant Node_Id   := Controlling_Argument (Call);
        Ctrl_Typ : constant Entity_Id := Base_Type (Etype (Ctrl_Arg));
!       Prim     : constant Entity_Id := Entity (Sinfo.Name (Call));
        P        : constant Node_Id   := Parent (Call);
  
     begin
--- 440,446 ----
     procedure Write_Call_Info (Call : Node_Id) is
        Ctrl_Arg : constant Node_Id   := Controlling_Argument (Call);
        Ctrl_Typ : constant Entity_Id := Base_Type (Etype (Ctrl_Arg));
!       Prim     : constant Entity_Id := Entity (Sinfo.Nodes.Name (Call));
        P        : constant Node_Id   := Parent (Call);
  
     begin
*************** package body Exp_CG is
*** 559,571 ****
           Write_Char ('"');
           Write_Name (Chars (Parent_Typ));
  
!          --  Note: Einfo prefix not needed if this routine is moved to
           --  exp_disp???
  
!          if Present (Einfo.Interfaces (Typ))
!            and then not Is_Empty_Elmt_List (Einfo.Interfaces (Typ))
           then
!             Elmt := First_Elmt (Einfo.Interfaces (Typ));
              while Present (Elmt) loop
                 Write_Str  (", ");
                 Write_Name (Chars (Node (Elmt)));
--- 570,582 ----
           Write_Char ('"');
           Write_Name (Chars (Parent_Typ));
  
!          --  Note: Einfo.Entities prefix not needed if this routine is moved to
           --  exp_disp???
  
!          if Present (Einfo.Entities.Interfaces (Typ))
!            and then not Is_Empty_Elmt_List (Einfo.Entities.Interfaces (Typ))
           then
!             Elmt := First_Elmt (Einfo.Entities.Interfaces (Typ));
              while Present (Elmt) loop
                 Write_Str  (", ");
                 Write_Name (Chars (Node (Elmt)));
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_cg.ads gcc-12.1.0/gcc/ada/exp_cg.ads
*** gcc-11.3.0/gcc/ada/exp_cg.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_cg.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2010-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch10.ads gcc-12.1.0/gcc/ada/exp_ch10.ads
*** gcc-11.3.0/gcc/ada/exp_ch10.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch10.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch11.adb gcc-12.1.0/gcc/ada/exp_ch11.adb
*** gcc-11.3.0/gcc/ada/exp_ch11.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch11.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,55 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Exp_Ch7;  use Exp_Ch7;
! with Exp_Intr; use Exp_Intr;
! with Exp_Util; use Exp_Util;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Targparm; use Targparm;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
  
  package body Exp_Ch11 is
  
--- 23,59 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Intr;       use Exp_Intr;
! with Exp_Util;       use Exp_Util;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
  
  package body Exp_Ch11 is
  
*************** package body Exp_Ch11 is
*** 1084,1093 ****
  
     --  (protecting test only needed if not at library level)
  
!    --     exceptF : Boolean := True --  static data
     --     if exceptF then
!    --        exceptF := False;
!    --        Register_Exception (except'Unchecked_Access);
     --     end if;
  
     procedure Expand_N_Exception_Declaration (N : Node_Id) is
--- 1088,1106 ----
  
     --  (protecting test only needed if not at library level)
  
!    --     exceptF : aliased System.Atomic_Operations.Test_And_Set.
!    --                         .Test_And_Set_Flag; --  static data
!    --     if not Atomic_Test_And_Set (exceptF) then
!    --        Register_Exception (except'Unrestricted_Access);
!    --     end if;
! 
!    --  If a No_Tasking restriction is in effect, or if Test_And_Set_Flag
!    --  is unavailable, then use Boolean instead. In that case, we generate:
!    --
!    --     exceptF : Boolean := True; --  static data
     --     if exceptF then
!    --        ExceptF := False;
!    --        Register_Exception (except'Unrestricted_Access);
     --     end if;
  
     procedure Expand_N_Exception_Declaration (N : Node_Id) is
*************** package body Exp_Ch11 is
*** 1242,1257 ****
            Prefix         => New_Occurrence_Of (Ex_Id, Loc),
            Attribute_Name => Name_Length));
  
!       --  Full_Name component: Standard.A_Char!(Nam'Address)
! 
!       --  The unchecked conversion causes capacity issues for CodePeer in some
!       --  cases and is never useful, so we set the Full_Name component to null
!       --  instead for CodePeer.
  
        if CodePeer_Mode then
!          Append_To (L, Make_Null (Loc));
        else
!          Append_To (L, Unchecked_Convert_To (Standard_A_Char,
             Make_Attribute_Reference (Loc,
               Prefix         => New_Occurrence_Of (Ex_Id, Loc),
               Attribute_Name => Name_Address)));
--- 1255,1267 ----
            Prefix         => New_Occurrence_Of (Ex_Id, Loc),
            Attribute_Name => Name_Length));
  
!       --  Full_Name component: Standard_Address?(Nam'Address)
!       --  or 0 if CodePeer_Mode
  
        if CodePeer_Mode then
!          Append_To (L, Make_Integer_Literal (Loc, Uint_0));
        else
!          Append_To (L, OK_Convert_To (Standard_Address,
             Make_Attribute_Reference (Loc,
               Prefix         => New_Occurrence_Of (Ex_Id, Loc),
               Attribute_Name => Name_Address)));
*************** package body Exp_Ch11 is
*** 1261,1269 ****
  
        Append_To (L, Make_Null (Loc));
  
!       --  Foreign_Data component: null
  
!       Append_To (L, Make_Null (Loc));
  
        --  Raise_Hook component: null
  
--- 1271,1279 ----
  
        Append_To (L, Make_Null (Loc));
  
!       --  Foreign_Data component: null address
  
!       Append_To (L, Make_Integer_Literal (Loc, Uint_0));
  
        --  Raise_Hook component: null
  
*************** package body Exp_Ch11 is
*** 1274,1280 ****
  
        Force_Static_Allocation_Of_Referenced_Objects (Expression (N));
  
!       --  Register_Exception (except'Unchecked_Access);
  
        if not No_Exception_Handlers_Set
          and then not Restriction_Active (No_Exception_Registration)
--- 1284,1290 ----
  
        Force_Static_Allocation_Of_Referenced_Objects (Expression (N));
  
!       --  Register_Exception (except'Unrestricted_Access);
  
        if not No_Exception_Handlers_Set
          and then not Restriction_Active (No_Exception_Registration)
*************** package body Exp_Ch11 is
*** 1295,1321 ****
              Flag_Id :=
                Make_Defining_Identifier (Loc,
                  Chars => New_External_Name (Chars (Id), 'F'));
  
!             Insert_Action (N,
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier => Flag_Id,
!                 Object_Definition   =>
!                   New_Occurrence_Of (Standard_Boolean, Loc),
!                 Expression          =>
!                   New_Occurrence_Of (Standard_True, Loc)));
  
!             Set_Is_Statically_Allocated (Flag_Id);
  
!             Append_To (L,
!               Make_Assignment_Statement (Loc,
!                 Name       => New_Occurrence_Of (Flag_Id, Loc),
!                 Expression => New_Occurrence_Of (Standard_False, Loc)));
  
!             Insert_After_And_Analyze (N,
!               Make_Implicit_If_Statement (N,
!                 Condition       => New_Occurrence_Of (Flag_Id, Loc),
!                 Then_Statements => L));
  
           else
              Insert_List_After_And_Analyze (N, L);
           end if;
--- 1305,1361 ----
              Flag_Id :=
                Make_Defining_Identifier (Loc,
                  Chars => New_External_Name (Chars (Id), 'F'));
+             Set_Is_Statically_Allocated (Flag_Id);
  
!             declare
!                Use_Test_And_Set_Flag : constant Boolean :=
!                  (not Global_No_Tasking)
!                  and then RTE_Available (RE_Test_And_Set_Flag);
  
!                Flag_Decl : Node_Id;
!                Condition : Node_Id;
!             begin
!                if Use_Test_And_Set_Flag then
!                   Flag_Decl :=
!                     Make_Object_Declaration (Loc,
!                       Defining_Identifier => Flag_Id,
!                       Aliased_Present     => True,
!                       Object_Definition   =>
!                         New_Occurrence_Of (RTE (RE_Test_And_Set_Flag), Loc));
!                else
!                   Flag_Decl :=
!                     Make_Object_Declaration (Loc,
!                       Defining_Identifier => Flag_Id,
!                       Object_Definition   =>
!                         New_Occurrence_Of (Standard_Boolean, Loc),
!                       Expression          =>
!                         New_Occurrence_Of (Standard_True, Loc));
!                end if;
  
!                Insert_Action (N, Flag_Decl);
  
!                if Use_Test_And_Set_Flag then
!                   Condition :=
!                     Make_Op_Not (Loc,
!                       Make_Function_Call (Loc,
!                         Name => New_Occurrence_Of
!                                   (RTE (RE_Atomic_Test_And_Set), Loc),
!                         Parameter_Associations =>
!                           New_List (New_Occurrence_Of (Flag_Id, Loc))));
!                else
!                   Condition := New_Occurrence_Of (Flag_Id, Loc);
  
+                   Append_To (L,
+                     Make_Assignment_Statement (Loc,
+                     Name       => New_Occurrence_Of (Flag_Id, Loc),
+                     Expression => New_Occurrence_Of (Standard_False, Loc)));
+                end if;
+ 
+                Insert_After_And_Analyze (N,
+                  Make_Implicit_If_Statement (N,
+                    Condition       => Condition,
+                    Then_Statements => L));
+             end;
           else
              Insert_List_After_And_Analyze (N, L);
           end if;
*************** package body Exp_Ch11 is
*** 1625,1632 ****
              --  If the exception is a renaming, use the exception that it
              --  renames (which might be a predefined exception, e.g.).
  
!             if Present (Renamed_Object (Id)) then
!                Id := Renamed_Object (Id);
              end if;
  
              --  Build a C-compatible string in case of no exception handlers,
--- 1665,1672 ----
              --  If the exception is a renaming, use the exception that it
              --  renames (which might be a predefined exception, e.g.).
  
!             if Present (Renamed_Entity (Id)) then
!                Id := Renamed_Entity (Id);
              end if;
  
              --  Build a C-compatible string in case of no exception handlers,
*************** package body Exp_Ch11 is
*** 1700,1706 ****
           if No (Choice_Parameter (Ehand)) then
              E := Make_Temporary (Loc, 'E');
              Set_Choice_Parameter (Ehand, E);
!             Set_Ekind (E, E_Variable);
              Set_Etype (E, RTE (RE_Exception_Occurrence));
              Set_Scope (E, Current_Scope);
           end if;
--- 1740,1746 ----
           if No (Choice_Parameter (Ehand)) then
              E := Make_Temporary (Loc, 'E');
              Set_Choice_Parameter (Ehand, E);
!             Mutate_Ekind (E, E_Variable);
              Set_Etype (E, RTE (RE_Exception_Occurrence));
              Set_Scope (E, Current_Scope);
           end if;
*************** package body Exp_Ch11 is
*** 1735,1740 ****
--- 1775,1798 ----
        Analyze (N);
     end Expand_N_Raise_Statement;
  
+    -----------------------------------
+    -- Expand_N_Raise_When_Statement --
+    -----------------------------------
+ 
+    procedure Expand_N_Raise_When_Statement (N : Node_Id) is
+       Loc : constant Source_Ptr := Sloc (N);
+    begin
+       Rewrite (N,
+         Make_If_Statement (Loc,
+           Condition       => Condition (N),
+           Then_Statements => New_List (
+             Make_Raise_Statement (Loc,
+               Name       => Name (N),
+               Expression => Expression (N)))));
+ 
+       Analyze (N);
+    end Expand_N_Raise_When_Statement;
+ 
     ----------------------------------
     -- Expand_N_Raise_Storage_Error --
     ----------------------------------
*************** package body Exp_Ch11 is
*** 1801,1810 ****
  
              if Configurable_Run_Time_Mode then
                 Error_Msg_NE
!                  ("\?X?& may call Last_Chance_Handler", N, E);
              else
                 Error_Msg_NE
!                  ("\?X?& may result in unhandled exception", N, E);
              end if;
           end if;
        end;
--- 1859,1868 ----
  
              if Configurable_Run_Time_Mode then
                 Error_Msg_NE
!                  ("\?.x?& may call Last_Chance_Handler", N, E);
              else
                 Error_Msg_NE
!                  ("\?.x?& may result in unhandled exception", N, E);
              end if;
           end if;
        end;
*************** package body Exp_Ch11 is
*** 2103,2109 ****
           Warn_No_Exception_Propagation_Active (N);
  
           Error_Msg_N
!            ("\?X?this handler can never be entered, and has been removed", N);
        end if;
     end Warn_If_No_Local_Raise;
  
--- 2161,2167 ----
           Warn_No_Exception_Propagation_Active (N);
  
           Error_Msg_N
!            ("\?.x?this handler can never be entered, and has been removed", N);
        end if;
     end Warn_If_No_Local_Raise;
  
*************** package body Exp_Ch11 is
*** 2120,2129 ****
  
           if Configurable_Run_Time_Mode then
              Error_Msg_N
!               ("\?X?Last_Chance_Handler will be called on exception", N);
           else
              Error_Msg_N
!               ("\?X?execution may raise unhandled exception", N);
           end if;
        end if;
     end Warn_If_No_Propagation;
--- 2178,2187 ----
  
           if Configurable_Run_Time_Mode then
              Error_Msg_N
!               ("\?.x?Last_Chance_Handler will be called on exception", N);
           else
              Error_Msg_N
!               ("\?.x?execution may raise unhandled exception", N);
           end if;
        end if;
     end Warn_If_No_Propagation;
*************** package body Exp_Ch11 is
*** 2135,2141 ****
     procedure Warn_No_Exception_Propagation_Active (N : Node_Id) is
     begin
        Error_Msg_N
!         ("?X?pragma Restrictions (No_Exception_Propagation) in effect", N);
     end Warn_No_Exception_Propagation_Active;
  
  end Exp_Ch11;
--- 2193,2199 ----
     procedure Warn_No_Exception_Propagation_Active (N : Node_Id) is
     begin
        Error_Msg_N
!         ("?.x?pragma Restrictions (No_Exception_Propagation) in effect", N);
     end Warn_No_Exception_Propagation_Active;
  
  end Exp_Ch11;
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch11.ads gcc-12.1.0/gcc/ada/exp_ch11.ads
*** gcc-11.3.0/gcc/ada/exp_ch11.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch11.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Exp_Ch11 is
*** 34,39 ****
--- 34,40 ----
     procedure Expand_N_Raise_Expression               (N : Node_Id);
     procedure Expand_N_Raise_Program_Error            (N : Node_Id);
     procedure Expand_N_Raise_Statement                (N : Node_Id);
+    procedure Expand_N_Raise_When_Statement           (N : Node_Id);
     procedure Expand_N_Raise_Storage_Error            (N : Node_Id);
  
     --  Data structures for gathering information to build exception tables
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch12.adb gcc-12.1.0/gcc/ada/exp_ch12.adb
*** gcc-11.3.0/gcc/ada/exp_ch12.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch12.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
***************
*** 23,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Einfo;    use Einfo;
! with Exp_Util; use Exp_Util;
! with Nmake;    use Nmake;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Tbuild;   use Tbuild;
  
  package body Exp_Ch12 is
  
--- 23,40 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Exp_Util;       use Exp_Util;
! with Nmake;          use Nmake;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Tbuild;         use Tbuild;
  
  package body Exp_Ch12 is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch12.ads gcc-12.1.0/gcc/ada/exp_ch12.ads
*** gcc-11.3.0/gcc/ada/exp_ch12.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch12.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch13.adb gcc-12.1.0/gcc/ada/exp_ch13.adb
*** gcc-11.3.0/gcc/ada/exp_ch13.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch13.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,55 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Einfo;    use Einfo;
! with Exp_Ch3;  use Exp_Ch3;
  with Exp_Ch6;
! with Exp_Imgv; use Exp_Imgv;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch7;  use Sem_Ch7;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Eval; use Sem_Eval;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Validsw;  use Validsw;
  
  package body Exp_Ch13 is
  
--- 23,59 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Exp_Ch3;        use Exp_Ch3;
  with Exp_Ch6;
! with Exp_Imgv;       use Exp_Imgv;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Validsw;        use Validsw;
  
  package body Exp_Ch13 is
  
*************** package body Exp_Ch13 is
*** 487,493 ****
        --  a constrained type extension with inherited discriminants.
  
        if Is_Type (E_Scope)
!         and then Ekind (E_Scope) not in Concurrent_Kind
        then
           E_Scope := Scope (E_Scope);
  
--- 491,497 ----
        --  a constrained type extension with inherited discriminants.
  
        if Is_Type (E_Scope)
!         and then not Is_Concurrent_Type (E_Scope)
        then
           E_Scope := Scope (E_Scope);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch13.ads gcc-12.1.0/gcc/ada/exp_ch13.ads
*** gcc-11.3.0/gcc/ada/exp_ch13.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch13.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Exp_Ch13 is
*** 32,37 ****
--- 32,40 ----
     procedure Expand_N_Attribute_Definition_Clause  (N : Node_Id);
     procedure Expand_N_Free_Statement               (N : Node_Id);
     procedure Expand_N_Freeze_Entity                (N : Node_Id);
+    --  Note: for GNATprove we have a minimal variant of this routine in
+    --  Exp_SPARK.Expand_SPARK_N_Freeze_Entity. They need to be kept in sync.
+ 
     procedure Expand_N_Record_Representation_Clause (N : Node_Id);
  
  end Exp_Ch13;
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch2.adb gcc-12.1.0/gcc/ada/exp_ch2.adb
*** gcc-11.3.0/gcc/ada/exp_ch2.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch2.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,49 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Exp_Smem; use Exp_Smem;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Namet;    use Namet;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Output;   use Output;
! with Sem;      use Sem;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sem_Warn; use Sem_Warn;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Tbuild;   use Tbuild;
  
  package body Exp_Ch2 is
  
--- 23,53 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Exp_Smem;       use Exp_Smem;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Namet;          use Namet;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Output;         use Output;
! with Sem;            use Sem;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Tbuild;         use Tbuild;
  
  package body Exp_Ch2 is
  
*************** package body Exp_Ch2 is
*** 140,146 ****
  
           --  Do not replace lvalues
  
!          and then not May_Be_Lvalue (N)
  
           --  Check that entity is suitable for replacement
  
--- 144,150 ----
  
           --  Do not replace lvalues
  
!          and then not Known_To_Be_Assigned (N)
  
           --  Check that entity is suitable for replacement
  
*************** package body Exp_Ch2 is
*** 419,425 ****
          and then Is_Scalar_Type (Etype (N))
          and then (Is_Assignable (E) or else Is_Constant_Object (E))
          and then Comes_From_Source (N)
!         and then Is_LHS (N) = No
          and then not Is_Actual_Out_Parameter (N)
          and then (Nkind (Parent (N)) /= N_Attribute_Reference
                     or else Attribute_Name (Parent (N)) /= Name_Valid)
--- 423,429 ----
          and then Is_Scalar_Type (Etype (N))
          and then (Is_Assignable (E) or else Is_Constant_Object (E))
          and then Comes_From_Source (N)
!         and then not Known_To_Be_Assigned (N)
          and then not Is_Actual_Out_Parameter (N)
          and then (Nkind (Parent (N)) /= N_Attribute_Reference
                     or else Attribute_Name (Parent (N)) /= Name_Valid)
*************** package body Exp_Ch2 is
*** 537,587 ****
        Addr_Ent   : constant Entity_Id  := Node (Last_Elmt (Acc_Stack));
        P_Comp_Ref : Entity_Id;
  
-       function In_Assignment_Context (N : Node_Id) return Boolean;
-       --  Check whether this is a context in which the entry formal may be
-       --  assigned to.
- 
-       ---------------------------
-       -- In_Assignment_Context --
-       ---------------------------
- 
-       function In_Assignment_Context (N : Node_Id) return Boolean is
-       begin
-          --  Case of use in a call
- 
-          --  ??? passing a formal as actual for a mode IN formal is
-          --  considered as an assignment?
- 
-          if Nkind (Parent (N)) in
-               N_Procedure_Call_Statement | N_Entry_Call_Statement
-            or else (Nkind (Parent (N)) = N_Assignment_Statement
-                       and then N = Name (Parent (N)))
-          then
-             return True;
- 
-          --  Case of a parameter association: climb up to enclosing call
- 
-          elsif Nkind (Parent (N)) = N_Parameter_Association then
-             return In_Assignment_Context (Parent (N));
- 
-          --  Case of a selected component, indexed component or slice prefix:
-          --  climb up the tree, unless the prefix is of an access type (in
-          --  which case there is an implicit dereference, and the formal itself
-          --  is not being assigned to).
- 
-          elsif Nkind (Parent (N)) in
-                  N_Selected_Component | N_Indexed_Component | N_Slice
-            and then N = Prefix (Parent (N))
-            and then not Is_Access_Type (Etype (N))
-            and then In_Assignment_Context (Parent (N))
-          then
-             return True;
- 
-          else
-             return False;
-          end if;
-       end In_Assignment_Context;
- 
     --  Start of processing for Expand_Entry_Parameter
  
     begin
--- 541,546 ----
*************** package body Exp_Ch2 is
*** 600,606 ****
           --  done during semantic processing so it is called in -gnatc mode???
  
           if Ekind (Entity (N)) /= E_In_Parameter
!            and then In_Assignment_Context (N)
           then
              Note_Possible_Modification (N, Sure => True);
           end if;
--- 559,565 ----
           --  done during semantic processing so it is called in -gnatc mode???
  
           if Ekind (Entity (N)) /= E_In_Parameter
!            and then Known_To_Be_Assigned (N)
           then
              Note_Possible_Modification (N, Sure => True);
           end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch2.ads gcc-12.1.0/gcc/ada/exp_ch2.ads
*** gcc-11.3.0/gcc/ada/exp_ch2.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch2.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch3.adb gcc-12.1.0/gcc/ada/exp_ch3.adb
*** gcc-11.3.0/gcc/ada/exp_ch3.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch3.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,77 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Exp_Aggr; use Exp_Aggr;
! with Exp_Atag; use Exp_Atag;
! with Exp_Ch4;  use Exp_Ch4;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_Ch7;  use Exp_Ch7;
! with Exp_Ch9;  use Exp_Ch9;
! with Exp_Dbug; use Exp_Dbug;
! with Exp_Disp; use Exp_Disp;
! with Exp_Dist; use Exp_Dist;
  with Exp_Put_Image;
! with Exp_Smem; use Exp_Smem;
! with Exp_Strm; use Exp_Strm;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Ghost;    use Ghost;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Attr; use Sem_Attr;
! with Sem_Cat;  use Sem_Cat;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Disp; use Sem_Disp;
! with Sem_Eval; use Sem_Eval;
! with Sem_Mech; use Sem_Mech;
! with Sem_Res;  use Sem_Res;
! with Sem_SCIL; use Sem_SCIL;
! with Sem_Type; use Sem_Type;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Stand;    use Stand;
! with Snames;   use Snames;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Validsw;  use Validsw;
  
  package body Exp_Ch3 is
  
--- 23,83 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Contracts;      use Contracts;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Expander;       use Expander;
! with Exp_Aggr;       use Exp_Aggr;
! with Exp_Atag;       use Exp_Atag;
! with Exp_Ch4;        use Exp_Ch4;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Ch9;        use Exp_Ch9;
! with Exp_Dbug;       use Exp_Dbug;
! with Exp_Disp;       use Exp_Disp;
! with Exp_Dist;       use Exp_Dist;
  with Exp_Put_Image;
! with Exp_Smem;       use Exp_Smem;
! with Exp_Strm;       use Exp_Strm;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Ghost;          use Ghost;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Attr;       use Sem_Attr;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Mech;       use Sem_Mech;
! with Sem_Res;        use Sem_Res;
! with Sem_SCIL;       use Sem_SCIL;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Stand;          use Stand;
! with Snames;         use Snames;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Validsw;        use Validsw;
  
  package body Exp_Ch3 is
  
*************** package body Exp_Ch3 is
*** 124,130 ****
     --  Build assignment procedure for one-dimensional arrays of controlled
     --  types. Other array and slice assignments are expanded in-line, but
     --  the code expansion for controlled components (when control actions
!    --  are active) can lead to very large blocks that GCC3 handles poorly.
  
     procedure Build_Untagged_Equality (Typ : Entity_Id);
     --  AI05-0123: Equality on untagged records composes. This procedure
--- 130,136 ----
     --  Build assignment procedure for one-dimensional arrays of controlled
     --  types. Other array and slice assignments are expanded in-line, but
     --  the code expansion for controlled components (when control actions
!    --  are active) can lead to very large blocks that GCC handles poorly.
  
     procedure Build_Untagged_Equality (Typ : Entity_Id);
     --  AI05-0123: Equality on untagged records composes. This procedure
*************** package body Exp_Ch3 is
*** 281,310 ****
     --  controlled components that require finalization actions (the deep
     --  in the name refers to the fact that the action applies to components).
     --
!    --  The list is returned in Predef_List. The Parameter Renamed_Eq either
!    --  returns the value Empty, or else the defining unit name for the
!    --  predefined equality function in the case where the type has a primitive
!    --  operation that is a renaming of predefined equality (but only if there
!    --  is also an overriding user-defined equality function). The returned
!    --  Renamed_Eq will be passed to the corresponding parameter of
!    --  Predefined_Primitive_Bodies.
  
     function Has_New_Non_Standard_Rep (T : Entity_Id) return Boolean;
     --  Returns True if there are representation clauses for type T that are not
     --  inherited. If the result is false, the init_proc and the discriminant
     --  checking functions of the parent can be reused by a derived type.
  
-    procedure Make_Controlling_Function_Wrappers
-      (Tag_Typ   : Entity_Id;
-       Decl_List : out List_Id;
-       Body_List : out List_Id);
-    --  Ada 2005 (AI-391): Makes specs and bodies for the wrapper functions
-    --  associated with inherited functions with controlling results which
-    --  are not overridden. The body of each wrapper function consists solely
-    --  of a return statement whose expression is an extension aggregate
-    --  invoking the inherited subprogram's parent subprogram and extended
-    --  with a null association list.
- 
     function Make_Null_Procedure_Specs (Tag_Typ : Entity_Id) return List_Id;
     --  Ada 2005 (AI-251): Makes specs for null procedures associated with any
     --  null procedures inherited from an interface type that have not been
--- 287,299 ----
     --  controlled components that require finalization actions (the deep
     --  in the name refers to the fact that the action applies to components).
     --
!    --  The list of specs is returned in Predef_List
  
     function Has_New_Non_Standard_Rep (T : Entity_Id) return Boolean;
     --  Returns True if there are representation clauses for type T that are not
     --  inherited. If the result is false, the init_proc and the discriminant
     --  checking functions of the parent can be reused by a derived type.
  
     function Make_Null_Procedure_Specs (Tag_Typ : Entity_Id) return List_Id;
     --  Ada 2005 (AI-251): Makes specs for null procedures associated with any
     --  null procedures inherited from an interface type that have not been
*************** package body Exp_Ch3 is
*** 326,335 ****
     --  no declarations and no statements.
  
     function Predef_Stream_Attr_Spec
!      (Loc      : Source_Ptr;
!       Tag_Typ  : Entity_Id;
!       Name     : TSS_Name_Type;
!       For_Body : Boolean := False) return Node_Id;
     --  Specialized version of Predef_Spec_Or_Body that apply to read, write,
     --  input and output attribute whose specs are constructed in Exp_Strm.
  
--- 315,323 ----
     --  no declarations and no statements.
  
     function Predef_Stream_Attr_Spec
!      (Loc     : Source_Ptr;
!       Tag_Typ : Entity_Id;
!       Name    : TSS_Name_Type) return Node_Id;
     --  Specialized version of Predef_Spec_Or_Body that apply to read, write,
     --  input and output attribute whose specs are constructed in Exp_Strm.
  
*************** package body Exp_Ch3 is
*** 581,588 ****
  
        --  Place body in list of freeze actions for the type.
  
!       Ensure_Freeze_Node (Type_Id);
!       Append_Freeze_Actions (Type_Id, New_List (Body_Node));
     end Build_Access_Subprogram_Wrapper_Body;
  
     ---------------------------
--- 569,575 ----
  
        --  Place body in list of freeze actions for the type.
  
!       Append_Freeze_Action (Type_Id, Body_Node);
     end Build_Access_Subprogram_Wrapper_Body;
  
     ---------------------------
*************** package body Exp_Ch3 is
*** 881,887 ****
                 Make_Handled_Sequence_Of_Statements (Loc,
                   Statements => Body_Stmts)));
  
!          Set_Ekind          (Proc_Id, E_Procedure);
           Set_Is_Public      (Proc_Id, Is_Public (A_Type));
           Set_Is_Internal    (Proc_Id);
           Set_Has_Completion (Proc_Id);
--- 868,874 ----
                 Make_Handled_Sequence_Of_Statements (Loc,
                   Statements => Body_Stmts)));
  
!          Mutate_Ekind       (Proc_Id, E_Procedure);
           Set_Is_Public      (Proc_Id, Is_Public (A_Type));
           Set_Is_Internal    (Proc_Id);
           Set_Has_Completion (Proc_Id);
*************** package body Exp_Ch3 is
*** 937,947 ****
          (Case_Id : Entity_Id;
           Variant : Node_Id) return Node_Id;
        --  Build a case statement containing only two alternatives. The first
!       --  alternative corresponds exactly to the discrete choices given on the
!       --  variant with contains the components that we are generating the
!       --  checks for. If the discriminant is one of these return False. The
!       --  second alternative is an OTHERS choice that will return True
!       --  indicating the discriminant did not match.
  
        function Build_Dcheck_Function
          (Case_Id : Entity_Id;
--- 924,934 ----
          (Case_Id : Entity_Id;
           Variant : Node_Id) return Node_Id;
        --  Build a case statement containing only two alternatives. The first
!       --  alternative corresponds to the discrete choices given on the variant
!       --  that contains the components that we are generating the checks
!       --  for. If the discriminant is one of these return False. The second
!       --  alternative is an OTHERS choice that returns True indicating the
!       --  discriminant did not match.
  
        function Build_Dcheck_Function
          (Case_Id : Entity_Id;
*************** package body Exp_Ch3 is
*** 971,976 ****
--- 958,964 ----
  
        begin
           Case_Node := New_Node (N_Case_Statement, Loc);
+          Set_End_Span (Case_Node, Uint_0);
  
           --  Replace the discriminant which controls the variant with the name
           --  of the formal of the checking function.
*************** package body Exp_Ch3 is
*** 1046,1055 ****
          (Case_Id : Entity_Id;
           Variant : Node_Id) return Entity_Id
        is
!          Body_Node           : Node_Id;
!          Func_Id             : Entity_Id;
!          Parameter_List      : List_Id;
!          Spec_Node           : Node_Id;
  
        begin
           Body_Node := New_Node (N_Subprogram_Body, Loc);
--- 1034,1043 ----
          (Case_Id : Entity_Id;
           Variant : Node_Id) return Entity_Id
        is
!          Body_Node      : Node_Id;
!          Func_Id        : Entity_Id;
!          Parameter_List : List_Id;
!          Spec_Node      : Node_Id;
  
        begin
           Body_Node := New_Node (N_Subprogram_Body, Loc);
*************** package body Exp_Ch3 is
*** 1076,1082 ****
               Statements => New_List (
                 Build_Case_Statement (Case_Id, Variant))));
  
!          Set_Ekind       (Func_Id, E_Function);
           Set_Mechanism   (Func_Id, Default_Mechanism);
           Set_Is_Inlined  (Func_Id, True);
           Set_Is_Pure     (Func_Id, True);
--- 1064,1070 ----
               Statements => New_List (
                 Build_Case_Statement (Case_Id, Variant))));
  
!          Mutate_Ekind    (Func_Id, E_Function);
           Set_Mechanism   (Func_Id, Default_Mechanism);
           Set_Is_Inlined  (Func_Id, True);
           Set_Is_Pure     (Func_Id, True);
*************** package body Exp_Ch3 is
*** 1498,1504 ****
           Typ : constant Entity_Id := Etype (Discr);
  
           procedure Check_Missing_Others (V : Node_Id);
!          --  ???
  
           --------------------------
           -- Check_Missing_Others --
--- 1486,1493 ----
           Typ : constant Entity_Id := Etype (Discr);
  
           procedure Check_Missing_Others (V : Node_Id);
!          --  Check that a given variant and its nested variants have an others
!          --  choice, and generate a constraint error raise when it does not.
  
           --------------------------
           -- Check_Missing_Others --
*************** package body Exp_Ch3 is
*** 1692,1699 ****
  
        if Has_Task (Full_Type) then
           if Restriction_Active (No_Task_Hierarchy) then
!             Append_To (Args,
!               New_Occurrence_Of (RTE (RE_Library_Task_Level), Loc));
           else
              Append_To (Args, Make_Identifier (Loc, Name_uMaster));
           end if;
--- 1681,1687 ----
  
        if Has_Task (Full_Type) then
           if Restriction_Active (No_Task_Hierarchy) then
!             Append_To (Args, Make_Integer_Literal (Loc, Library_Task_Level));
           else
              Append_To (Args, Make_Identifier (Loc, Name_uMaster));
           end if;
*************** package body Exp_Ch3 is
*** 1868,1877 ****
        --  Pass the extra accessibility level parameter associated with the
        --  level of the object being initialized when required.
  
-       --  When no entity is present for Id_Ref it may not have been fully
-       --  analyzed, so allow the default value of standard standard to be
-       --  passed ???
- 
        if Is_Entity_Name (Id_Ref)
          and then Present (Init_Proc_Level_Formal (Proc))
        then
--- 1856,1861 ----
*************** package body Exp_Ch3 is
*** 1925,1930 ****
--- 1909,1915 ----
        Proc_Id   : Entity_Id;
        Rec_Type  : Entity_Id;
        Set_Tag   : Entity_Id := Empty;
+       Has_Late_Init_Comp : Boolean := False; -- set in Build_Init_Statements
  
        function Build_Assignment
          (Id      : Entity_Id;
*************** package body Exp_Ch3 is
*** 2020,2054 ****
               Selector_Name => New_Occurrence_Of (Id, Default_Loc));
           Set_Assignment_OK (Lhs);
  
-          --  Case of an access attribute applied to the current instance.
-          --  Replace the reference to the type by a reference to the actual
-          --  object. (Note that this handles the case of the top level of
-          --  the expression being given by such an attribute, but does not
-          --  cover uses nested within an initial value expression. Nested
-          --  uses are unlikely to occur in practice, but are theoretically
-          --  possible.) It is not clear how to handle them without fully
-          --  traversing the expression. ???
- 
-          if Kind = N_Attribute_Reference
-            and then Attribute_Name (Default) in Name_Unchecked_Access
-                                               | Name_Unrestricted_Access
-            and then Is_Entity_Name (Prefix (Default))
-            and then Is_Type (Entity (Prefix (Default)))
-            and then Entity (Prefix (Default)) = Rec_Type
-          then
-             Exp :=
-               Make_Attribute_Reference (Default_Loc,
-                 Prefix         =>
-                   Make_Identifier (Default_Loc, Name_uInit),
-                 Attribute_Name => Name_Unrestricted_Access);
-          end if;
- 
           --  Take a copy of Exp to ensure that later copies of this component
           --  declaration in derived types see the original tree, not a node
           --  rewritten during expansion of the init_proc. If the copy contains
           --  itypes, the scope of the new itypes is the init_proc being built.
  
!          Exp := New_Copy_Tree (Exp, New_Scope => Proc_Id);
  
           Res := New_List (
             Make_Assignment_Statement (Loc,
--- 2005,2050 ----
               Selector_Name => New_Occurrence_Of (Id, Default_Loc));
           Set_Assignment_OK (Lhs);
  
           --  Take a copy of Exp to ensure that later copies of this component
           --  declaration in derived types see the original tree, not a node
           --  rewritten during expansion of the init_proc. If the copy contains
           --  itypes, the scope of the new itypes is the init_proc being built.
  
!          declare
!             Map : Elist_Id := No_Elist;
!          begin
!             if Has_Late_Init_Comp then
!                --  Map the type to the _Init parameter in order to
!                --  handle "current instance" references.
! 
!                Map := New_Elmt_List
!                         (Elmt1 => Rec_Type,
!                          Elmt2 => Defining_Identifier (First
!                                    (Parameter_Specifications
!                                       (Parent (Proc_Id)))));
! 
!                --  If the type has an incomplete view, a current instance
!                --  may have an incomplete type. In that case, it must also be
!                --  replaced by the formal of the Init_Proc.
! 
!                if Nkind (Parent (Rec_Type)) = N_Full_Type_Declaration
!                  and then Present (Incomplete_View (Parent (Rec_Type)))
!                then
!                   Append_Elmt (
!                     N  => Defining_Identifier
!                             (Incomplete_View (Parent (Rec_Type))),
!                     To => Map);
!                   Append_Elmt (
!                     N  => Defining_Identifier
!                             (First
!                               (Parameter_Specifications
!                                 (Parent (Proc_Id)))),
!                     To => Map);
!                end if;
!             end if;
! 
!             Exp := New_Copy_Tree (Exp, New_Scope => Proc_Id, Map => Map);
!          end;
  
           Res := New_List (
             Make_Assignment_Statement (Loc,
*************** package body Exp_Ch3 is
*** 2214,2221 ****
  
           if Has_Task (Rec_Type) then
              if Restriction_Active (No_Task_Hierarchy) then
!                Append_To (Args,
!                  New_Occurrence_Of (RTE (RE_Library_Task_Level), Loc));
              else
                 Append_To (Args, Make_Identifier (Loc, Name_uMaster));
              end if;
--- 2210,2217 ----
  
           if Has_Task (Rec_Type) then
              if Restriction_Active (No_Task_Hierarchy) then
!                Append_To
!                  (Args, Make_Integer_Literal (Loc, Library_Task_Level));
              else
                 Append_To (Args, Make_Identifier (Loc, Name_uMaster));
              end if;
*************** package body Exp_Ch3 is
*** 2372,2378 ****
                                  New_Occurrence_Of (Iface_Comp, Loc)),
                            Attribute_Name => Name_Position))))));
  
!             Set_Ekind       (Func_Id, E_Function);
              Set_Mechanism   (Func_Id, Default_Mechanism);
              Set_Is_Internal (Func_Id, True);
  
--- 2368,2374 ----
                                  New_Occurrence_Of (Iface_Comp, Loc)),
                            Attribute_Name => Name_Position))))));
  
!             Mutate_Ekind    (Func_Id, E_Function);
              Set_Mechanism   (Func_Id, Default_Mechanism);
              Set_Is_Internal (Func_Id, True);
  
*************** package body Exp_Ch3 is
*** 2487,2493 ****
             Make_Defining_Identifier (Loc,
               Chars => Make_TSS_Name (Rec_Type, TSS_CPP_Init_Proc));
  
!          Set_Ekind       (Proc_Id, E_Procedure);
           Set_Is_Internal (Proc_Id);
  
           Set_Defining_Unit_Name (Proc_Spec_Node, Proc_Id);
--- 2483,2489 ----
             Make_Defining_Identifier (Loc,
               Chars => Make_TSS_Name (Rec_Type, TSS_CPP_Init_Proc));
  
!          Mutate_Ekind    (Proc_Id, E_Procedure);
           Set_Is_Internal (Proc_Id);
  
           Set_Defining_Unit_Name (Proc_Spec_Node, Proc_Id);
*************** package body Exp_Ch3 is
*** 2541,2547 ****
        begin
           Body_Stmts := New_List;
           Body_Node := New_Node (N_Subprogram_Body, Loc);
!          Set_Ekind (Proc_Id, E_Procedure);
  
           Proc_Spec_Node := New_Node (N_Procedure_Specification, Loc);
           Set_Defining_Unit_Name (Proc_Spec_Node, Proc_Id);
--- 2537,2543 ----
        begin
           Body_Stmts := New_List;
           Body_Node := New_Node (N_Subprogram_Body, Loc);
!          Mutate_Ekind (Proc_Id, E_Procedure);
  
           Proc_Spec_Node := New_Node (N_Procedure_Specification, Loc);
           Set_Defining_Unit_Name (Proc_Spec_Node, Proc_Id);
*************** package body Exp_Ch3 is
*** 2889,2897 ****
                    Fixed_Comps    => False,
                    Variable_Comps => True);
  
!                if Is_Non_Empty_List (Init_Tags_List) then
!                   Append_List_To (Body_Stmts, Init_Tags_List);
!                end if;
              end if;
           end if;
  
--- 2885,2891 ----
                    Fixed_Comps    => False,
                    Variable_Comps => True);
  
!                Append_List_To (Body_Stmts, Init_Tags_List);
              end if;
           end if;
  
*************** package body Exp_Ch3 is
*** 2980,2986 ****
           Counter_Id         : Entity_Id        := Empty;
           Comp_Loc           : Source_Ptr;
           Decl               : Node_Id;
-          Has_Late_Init_Comp : Boolean;
           Id                 : Entity_Id;
           Parent_Stmts       : List_Id;
           Stmts              : List_Id;
--- 2974,2979 ----
*************** package body Exp_Ch3 is
*** 3096,3105 ****
              function Find_Current_Instance
                (N : Node_Id) return Traverse_Result is
              begin
!                if Nkind (N) = N_Attribute_Reference
!                  and then Is_Access_Type (Etype (N))
!                  and then Is_Entity_Name (Prefix (N))
!                  and then Is_Type (Entity (Prefix (N)))
                 then
                    References_Current_Instance := True;
                    return Abandon;
--- 3089,3097 ----
              function Find_Current_Instance
                (N : Node_Id) return Traverse_Result is
              begin
!                if Is_Entity_Name (N)
!                  and then Present (Entity (N))
!                  and then Is_Current_Instance (N)
                 then
                    References_Current_Instance := True;
                    return Abandon;
*************** package body Exp_Ch3 is
*** 3213,3221 ****
           --  types moving any expanded code from the spec to the body of the
           --  init procedure.
  
!          if Is_Task_Record_Type (Rec_Type)
!            or else Is_Protected_Record_Type (Rec_Type)
!          then
              declare
                 Decl : constant Node_Id :=
                          Parent (Corresponding_Concurrent_Type (Rec_Type));
--- 3205,3211 ----
           --  types moving any expanded code from the spec to the body of the
           --  init procedure.
  
!          if Is_Concurrent_Record_Type (Rec_Type) then
              declare
                 Decl : constant Node_Id :=
                          Parent (Corresponding_Concurrent_Type (Rec_Type));
*************** package body Exp_Ch3 is
*** 3254,3261 ****
           --  step deals with regular components. The second step deals with
           --  components that require late initialization.
  
-          Has_Late_Init_Comp := False;
- 
           --  First pass : regular components
  
           Decl := First_Non_Pragma (Component_Items (Comp_List));
--- 3244,3249 ----
*************** package body Exp_Ch3 is
*** 3431,3437 ****
  
                    Clean_Task_Names (Typ, Proc_Id);
  
!                --  Simple initialization
  
                 elsif Component_Needs_Simple_Initialization (Typ) then
                    Actions :=
--- 3419,3426 ----
  
                    Clean_Task_Names (Typ, Proc_Id);
  
!                --  Simple initialization. If the Esize is not yet set, we pass
!                --  Uint_0 as expected by Get_Simple_Init_Val.
  
                 elsif Component_Needs_Simple_Initialization (Typ) then
                    Actions :=
*************** package body Exp_Ch3 is
*** 3441,3447 ****
                           Get_Simple_Init_Val
                             (Typ  => Typ,
                              N    => N,
!                             Size => Esize (Id)));
  
                 --  Nothing needed for this case
  
--- 3430,3438 ----
                           Get_Simple_Init_Val
                             (Typ  => Typ,
                              N    => N,
!                             Size =>
!                               (if Known_Esize (Id) then Esize (Id)
!                                else Uint_0)));
  
                 --  Nothing needed for this case
  
*************** package body Exp_Ch3 is
*** 3595,3606 ****
                    end loop;
                 end if;
              end;
-          end if;
  
           --  For a protected type, add statements generated by
           --  Make_Initialize_Protection.
  
!          if Is_Protected_Record_Type (Rec_Type) then
              Append_List_To (Stmts,
                Make_Initialize_Protection (Rec_Type));
           end if;
--- 3586,3596 ----
                    end loop;
                 end if;
              end;
  
           --  For a protected type, add statements generated by
           --  Make_Initialize_Protection.
  
!          elsif Is_Protected_Record_Type (Rec_Type) then
              Append_List_To (Stmts,
                Make_Initialize_Protection (Rec_Type));
           end if;
*************** package body Exp_Ch3 is
*** 4149,4155 ****
                 Set_Static_Initialization (Proc_Id, Agg);
  
                 declare
!                   Comp  : Node_Id;
                 begin
                    Comp := First (Component_Associations (Agg));
                    while Present (Comp) loop
--- 4139,4145 ----
                 Set_Static_Initialization (Proc_Id, Agg);
  
                 declare
!                   Comp : Node_Id;
                 begin
                    Comp := First (Component_Associations (Agg));
                    while Present (Comp) loop
*************** package body Exp_Ch3 is
*** 4168,4174 ****
  
     --  Generates the following subprogram:
  
!    --    procedure Assign
     --     (Source,  Target    : Array_Type,
     --      Left_Lo, Left_Hi   : Index;
     --      Right_Lo, Right_Hi : Index;
--- 4158,4164 ----
  
     --  Generates the following subprogram:
  
!    --    procedure array_typeSA
     --     (Source,  Target    : Array_Type,
     --      Left_Lo, Left_Hi   : Index;
     --      Right_Lo, Right_Hi : Index;
*************** package body Exp_Ch3 is
*** 4178,4184 ****
     --       Ri1 : Index;
  
     --    begin
- 
     --       if Left_Hi < Left_Lo then
     --          return;
     --       end if;
--- 4168,4173 ----
*************** package body Exp_Ch3 is
*** 4204,4210 ****
     --             Ri1 := Index'succ (Ri1);
     --          end if;
     --       end loop;
!    --    end Assign;
  
     procedure Build_Slice_Assignment (Typ : Entity_Id) is
        Loc   : constant Source_Ptr := Sloc (Typ);
--- 4193,4199 ----
     --             Ri1 := Index'succ (Ri1);
     --          end if;
     --       end loop;
!    --    end array_typeSA;
  
     procedure Build_Slice_Assignment (Typ : Entity_Id) is
        Loc   : constant Source_Ptr := Sloc (Typ);
*************** package body Exp_Ch3 is
*** 4386,4392 ****
  
        declare
           Spec    : Node_Id;
!          Formals : List_Id := New_List;
  
        begin
           Formals := New_List (
--- 4375,4381 ----
  
        declare
           Spec    : Node_Id;
!          Formals : List_Id;
  
        begin
           Formals := New_List (
*************** package body Exp_Ch3 is
*** 5360,5369 ****
--- 5349,5414 ----
     -------------------------------
  
     procedure Expand_Freeze_Record_Type (N : Node_Id) is
+ 
+       procedure Build_Class_Condition_Subprograms (Typ : Entity_Id);
+       --  Create internal subprograms of Typ primitives that have class-wide
+       --  preconditions or postconditions; they are invoked by the caller to
+       --  evaluate the conditions.
+ 
        procedure Build_Variant_Record_Equality (Typ  : Entity_Id);
        --  Create An Equality function for the untagged variant record Typ and
        --  attach it to the TSS list.
  
+       procedure Register_Dispatch_Table_Wrappers (Typ : Entity_Id);
+       --  Register dispatch-table wrappers in the dispatch table of Typ
+ 
+       ---------------------------------------
+       -- Build_Class_Condition_Subprograms --
+       ---------------------------------------
+ 
+       procedure Build_Class_Condition_Subprograms (Typ : Entity_Id) is
+          Prim_List : constant Elist_Id := Primitive_Operations (Typ);
+          Prim_Elmt : Elmt_Id           := First_Elmt (Prim_List);
+          Prim      : Entity_Id;
+ 
+       begin
+          while Present (Prim_Elmt) loop
+             Prim := Node (Prim_Elmt);
+ 
+             --  Primitive with class-wide preconditions
+ 
+             if Comes_From_Source (Prim)
+               and then Has_Significant_Contract (Prim)
+               and then
+                 (Present (Class_Preconditions (Prim))
+                    or else Present (Ignored_Class_Preconditions (Prim)))
+             then
+                if Expander_Active then
+                   Make_Class_Precondition_Subps (Prim);
+                end if;
+ 
+             --  Wrapper of a primitive that has or inherits class-wide
+             --  preconditions.
+ 
+             elsif Is_Primitive_Wrapper (Prim)
+               and then
+                 (Present (Nearest_Class_Condition_Subprogram
+                            (Spec_Id => Prim,
+                             Kind    => Class_Precondition))
+                    or else
+                  Present (Nearest_Class_Condition_Subprogram
+                            (Spec_Id => Prim,
+                             Kind    => Ignored_Class_Precondition)))
+             then
+                if Expander_Active then
+                   Make_Class_Precondition_Subps (Prim);
+                end if;
+             end if;
+ 
+             Next_Elmt (Prim_Elmt);
+          end loop;
+       end Build_Class_Condition_Subprograms;
+ 
        -----------------------------------
        -- Build_Variant_Record_Equality --
        -----------------------------------
*************** package body Exp_Ch3 is
*** 5425,5430 ****
--- 5470,5496 ----
           end if;
        end Build_Variant_Record_Equality;
  
+       --------------------------------------
+       -- Register_Dispatch_Table_Wrappers --
+       --------------------------------------
+ 
+       procedure Register_Dispatch_Table_Wrappers (Typ : Entity_Id) is
+          Elmt : Elmt_Id := First_Elmt (Primitive_Operations (Typ));
+          Subp : Entity_Id;
+ 
+       begin
+          while Present (Elmt) loop
+             Subp := Node (Elmt);
+ 
+             if Is_Dispatch_Table_Wrapper (Subp) then
+                Append_Freeze_Actions (Typ,
+                  Register_Primitive (Sloc (Subp), Subp));
+             end if;
+ 
+             Next_Elmt (Elmt);
+          end loop;
+       end Register_Dispatch_Table_Wrappers;
+ 
        --  Local variables
  
        Typ      : constant Node_Id := Entity (N);
*************** package body Exp_Ch3 is
*** 5434,5440 ****
        Comp_Typ    : Entity_Id;
        Predef_List : List_Id;
  
!       Wrapper_Decl_List : List_Id := No_List;
        Wrapper_Body_List : List_Id := No_List;
  
        Renamed_Eq : Node_Id := Empty;
--- 5500,5506 ----
        Comp_Typ    : Entity_Id;
        Predef_List : List_Id;
  
!       Wrapper_Decl_List : List_Id;
        Wrapper_Body_List : List_Id := No_List;
  
        Renamed_Eq : Node_Id := Empty;
*************** package body Exp_Ch3 is
*** 5478,5486 ****
                First_Component (Base_Type (Underlying_Type (Etype (Typ))));
              Comp := First_Component (Typ);
              while Present (Comp) loop
!                if Ekind (Comp) = E_Component
!                  and then Chars (Comp) = Chars (Old_Comp)
!                then
                    Set_Discriminant_Checking_Func
                      (Comp, Discriminant_Checking_Func (Old_Comp));
                 end if;
--- 5544,5550 ----
                First_Component (Base_Type (Underlying_Type (Etype (Typ))));
              Comp := First_Component (Typ);
              while Present (Comp) loop
!                if Chars (Comp) = Chars (Old_Comp) then
                    Set_Discriminant_Checking_Func
                      (Comp, Discriminant_Checking_Func (Old_Comp));
                 end if;
*************** package body Exp_Ch3 is
*** 5676,5681 ****
--- 5740,5752 ----
  
                 if not Building_Static_DT (Typ) then
                    Append_Freeze_Actions (Typ, Make_DT (Typ));
+ 
+                   --  Register dispatch table wrappers in the dispatch table.
+                   --  It could not be done when these wrappers were built
+                   --  because, at that stage, the dispatch table was not
+                   --  available.
+ 
+                   Register_Dispatch_Table_Wrappers (Typ);
                 end if;
              end if;
  
*************** package body Exp_Ch3 is
*** 5840,5848 ****
           --  Ada 2005 (AI-391): If any wrappers were created for nonoverridden
           --  inherited functions, then add their bodies to the freeze actions.
  
!          if Present (Wrapper_Body_List) then
!             Append_Freeze_Actions (Typ, Wrapper_Body_List);
!          end if;
  
           --  Create extra formals for the primitive operations of the type.
           --  This must be done before analyzing the body of the initialization
--- 5911,5917 ----
           --  Ada 2005 (AI-391): If any wrappers were created for nonoverridden
           --  inherited functions, then add their bodies to the freeze actions.
  
!          Append_Freeze_Actions (Typ, Wrapper_Body_List);
  
           --  Create extra formals for the primitive operations of the type.
           --  This must be done before analyzing the body of the initialization
*************** package body Exp_Ch3 is
*** 5867,5872 ****
--- 5936,5948 ----
              end loop;
           end;
        end if;
+ 
+       --  Build internal subprograms of primitives with class-wide
+       --  pre/postconditions.
+ 
+       if Is_Tagged_Type (Typ) then
+          Build_Class_Condition_Subprograms (Typ);
+       end if;
     end Expand_Freeze_Record_Type;
  
     ------------------------------------
*************** package body Exp_Ch3 is
*** 6013,6019 ****
        --  The parent type is private then we need to inherit any TSS operations
        --  from the full view.
  
!       if Ekind (Par_Id) in Private_Kind
          and then Present (Full_View (Par_Id))
        then
           Par_Id := Base_Type (Full_View (Par_Id));
--- 6089,6095 ----
        --  The parent type is private then we need to inherit any TSS operations
        --  from the full view.
  
!       if Is_Private_Type (Par_Id)
          and then Present (Full_View (Par_Id))
        then
           Par_Id := Base_Type (Full_View (Par_Id));
*************** package body Exp_Ch3 is
*** 6049,6055 ****
              --  If the derived type itself is private with a full view, then
              --  associate the full view with the inherited TSS_Elist as well.
  
!             if Ekind (B_Id) in Private_Kind
                and then Present (Full_View (B_Id))
              then
                 Ensure_Freeze_Node (Base_Type (Full_View (B_Id)));
--- 6125,6131 ----
              --  If the derived type itself is private with a full view, then
              --  associate the full view with the inherited TSS_Elist as well.
  
!             if Is_Private_Type (B_Id)
                and then Present (Full_View (B_Id))
              then
                 Ensure_Freeze_Node (Base_Type (Full_View (B_Id)));
*************** package body Exp_Ch3 is
*** 6154,6161 ****
  
              Comp := First_Component (Full_Type);
              while Present (Comp) loop
!                if Ekind (Comp) = E_Component
!                  and then Present (Expression (Parent (Comp)))
                   and then
                     not Is_OK_Static_Expression (Expression (Parent (Comp)))
                 then
--- 6230,6236 ----
  
              Comp := First_Component (Full_Type);
              while Present (Comp) loop
!                if Present (Expression (Parent (Comp)))
                   and then
                     not Is_OK_Static_Expression (Expression (Parent (Comp)))
                 then
*************** package body Exp_Ch3 is
*** 6187,6195 ****
  
              Comp := First_Component (Full_Type);
              while Present (Comp) loop
!                if Ekind (Comp) = E_Component
!                  and then Present (Expression (Parent (Comp)))
!                then
                    Append_To (Component_Associations (Aggr),
                      Make_Component_Association (Loc,
                        Choices    => New_List (New_Occurrence_Of (Comp, Loc)),
--- 6262,6268 ----
  
              Comp := First_Component (Full_Type);
              while Present (Comp) loop
!                if Present (Expression (Parent (Comp))) then
                    Append_To (Component_Associations (Aggr),
                      Make_Component_Association (Loc,
                        Choices    => New_List (New_Occurrence_Of (Comp, Loc)),
*************** package body Exp_Ch3 is
*** 6523,6529 ****
                      Get_Simple_Init_Val
                        (Typ  => Typ,
                         N    => Obj_Def,
!                        Size => Esize (Def_Id)));
  
                    Analyze_And_Resolve
                      (Expression (N), Typ, Suppress => All_Checks);
--- 6596,6603 ----
                      Get_Simple_Init_Val
                        (Typ  => Typ,
                         N    => Obj_Def,
!                        Size => (if Known_Esize (Def_Id) then Esize (Def_Id)
!                                 else Uint_0)));
  
                    Analyze_And_Resolve
                      (Expression (N), Typ, Suppress => All_Checks);
*************** package body Exp_Ch3 is
*** 6550,6556 ****
                Get_Simple_Init_Val
                  (Typ  => Typ,
                   N    => Obj_Def,
!                  Size => Esize (Def_Id)));
  
              Analyze_And_Resolve (Expression (N), Typ);
           end if;
--- 6624,6631 ----
                Get_Simple_Init_Val
                  (Typ  => Typ,
                   N    => Obj_Def,
!                  Size =>
!                    (if Known_Esize (Def_Id) then Esize (Def_Id) else Uint_0)));
  
              Analyze_And_Resolve (Expression (N), Typ);
           end if;
*************** package body Exp_Ch3 is
*** 6561,6567 ****
           if Needs_Finalization (Typ) and then not No_Initialization (N) then
              Obj_Init :=
                Make_Init_Call
!                 (Obj_Ref => New_Occurrence_Of (Def_Id, Loc),
                   Typ     => Typ);
           end if;
  
--- 6636,6642 ----
           if Needs_Finalization (Typ) and then not No_Initialization (N) then
              Obj_Init :=
                Make_Init_Call
!                 (Obj_Ref => New_Object_Reference,
                   Typ     => Typ);
           end if;
  
*************** package body Exp_Ch3 is
*** 6833,6841 ****
                 New_Nodes := Make_DT (Base_Typ, N);
              end if;
  
!             if not Is_Empty_List (New_Nodes) then
!                Insert_List_Before (N, New_Nodes);
!             end if;
           end;
        end if;
  
--- 6908,6914 ----
                 New_Nodes := Make_DT (Base_Typ, N);
              end if;
  
!             Insert_List_Before (N, New_Nodes);
           end;
        end if;
  
*************** package body Exp_Ch3 is
*** 6977,6987 ****
        else
           --  Obtain actual expression from qualified expression
  
!          if Nkind (Expr) = N_Qualified_Expression then
!             Expr_Q := Expression (Expr);
!          else
!             Expr_Q := Expr;
!          end if;
  
           --  When we have the appropriate type of aggregate in the expression
           --  (it has been determined during analysis of the aggregate by
--- 7050,7056 ----
        else
           --  Obtain actual expression from qualified expression
  
!          Expr_Q := Unqualify (Expr);
  
           --  When we have the appropriate type of aggregate in the expression
           --  (it has been determined during analysis of the aggregate by
*************** package body Exp_Ch3 is
*** 6995,7006 ****
              --  happen when the aggregate is limited and the declared object
              --  has a following address clause; it happens also when generating
              --  C code for an aggregate that has an alignment or address clause
!             --  (see Analyze_Object_Declaration).
  
              if (Is_Limited_Type (Typ) or else Modify_Tree_For_C)
                and then not Analyzed (Expr)
              then
                 Resolve (Expr, Typ);
              end if;
  
              Convert_Aggr_In_Object_Decl (N);
--- 7064,7079 ----
              --  happen when the aggregate is limited and the declared object
              --  has a following address clause; it happens also when generating
              --  C code for an aggregate that has an alignment or address clause
!             --  (see Analyze_Object_Declaration). Resolution is done without
!             --  expansion because it will take place when the declaration
!             --  itself is expanded.
  
              if (Is_Limited_Type (Typ) or else Modify_Tree_For_C)
                and then not Analyzed (Expr)
              then
+                Expander_Mode_Save_And_Set (False);
                 Resolve (Expr, Typ);
+                Expander_Mode_Restore;
              end if;
  
              Convert_Aggr_In_Object_Decl (N);
*************** package body Exp_Ch3 is
*** 7282,7291 ****
                       Link_Entities (New_Id, Next_Entity (Def_Id));
                       Link_Entities (Def_Id, Next_Temp);
  
!                      Set_Chars   (Defining_Identifier (N), Chars   (Def_Id));
                       Set_Homonym (Defining_Identifier (N), Homonym (Def_Id));
!                      Set_Ekind   (Defining_Identifier (N), Ekind   (Def_Id));
!                      Set_Sloc    (Defining_Identifier (N), Sloc    (Def_Id));
  
                       Set_Comes_From_Source (Def_Id, False);
  
--- 7355,7364 ----
                       Link_Entities (New_Id, Next_Entity (Def_Id));
                       Link_Entities (Def_Id, Next_Temp);
  
!                      Set_Chars (Defining_Identifier (N), Chars (Def_Id));
                       Set_Homonym (Defining_Identifier (N), Homonym (Def_Id));
!                      Mutate_Ekind (Defining_Identifier (N), Ekind (Def_Id));
!                      Set_Sloc (Defining_Identifier (N), Sloc (Def_Id));
  
                       Set_Comes_From_Source (Def_Id, False);
  
*************** package body Exp_Ch3 is
*** 7542,7548 ****
              Level_Expr : Node_Id;
  
           begin
!             Set_Ekind (Level, Ekind (Def_Id));
              Set_Etype (Level, Standard_Natural);
              Set_Scope (Level, Scope (Def_Id));
  
--- 7615,7621 ----
              Level_Expr : Node_Id;
  
           begin
!             Mutate_Ekind (Level, Ekind (Def_Id));
              Set_Etype (Level, Standard_Natural);
              Set_Scope (Level, Scope (Def_Id));
  
*************** package body Exp_Ch3 is
*** 7782,7790 ****
        --  Expand_Record_Extension is called directly from the semantics, so
        --  we must check to see whether expansion is active before proceeding,
        --  because this affects the visibility of selected components in bodies
!       --  of instances.
  
        if not Expander_Active then
           return;
        end if;
  
--- 7855,7868 ----
        --  Expand_Record_Extension is called directly from the semantics, so
        --  we must check to see whether expansion is active before proceeding,
        --  because this affects the visibility of selected components in bodies
!       --  of instances. Within a generic we still need to set Parent_Subtype
!       --  link because the visibility of inherited components will have to be
!       --  verified in subsequent instances.
  
        if not Expander_Active then
+          if Inside_A_Generic and then Ekind (T) = E_Record_Type then
+             Set_Parent_Subtype (T, Etype (T));
+          end if;
           return;
        end if;
  
*************** package body Exp_Ch3 is
*** 8517,8523 ****
              if Compile_Time_Known_Value (Lo) then
                 Lo_Val := Expr_Value (Lo);
  
!                if Lo_Bound = No_Uint or else Lo_Bound < Lo_Val then
                    Lo_Bound := Lo_Val;
                 end if;
              end if;
--- 8595,8601 ----
              if Compile_Time_Known_Value (Lo) then
                 Lo_Val := Expr_Value (Lo);
  
!                if No (Lo_Bound) or else Lo_Bound < Lo_Val then
                    Lo_Bound := Lo_Val;
                 end if;
              end if;
*************** package body Exp_Ch3 is
*** 8525,8531 ****
              if Compile_Time_Known_Value (Hi) then
                 Hi_Val := Expr_Value (Hi);
  
!                if Hi_Bound = No_Uint or else Hi_Bound > Hi_Val then
                    Hi_Bound := Hi_Val;
                 end if;
              end if;
--- 8603,8609 ----
              if Compile_Time_Known_Value (Hi) then
                 Hi_Val := Expr_Value (Hi);
  
!                if No (Hi_Bound) or else Hi_Bound > Hi_Val then
                    Hi_Bound := Hi_Val;
                 end if;
              end if;
*************** package body Exp_Ch3 is
*** 8597,8631 ****
        --------------------------------
  
        function Simple_Init_Defaulted_Type return Node_Id is
!          Subtyp : constant Entity_Id := First_Subtype (Typ);
  
        begin
-          --  Use the Sloc of the context node when constructing the initial
-          --  value because the expression of Default_Value may come from a
-          --  different unit. Updating the Sloc will result in accurate error
-          --  diagnostics.
- 
           --  When the first subtype is private, retrieve the expression of the
           --  Default_Value from the underlying type.
  
           if Is_Private_Type (Subtyp) then
!             return
!               Unchecked_Convert_To
!                 (Typ  => Typ,
!                  Expr =>
!                    New_Copy_Tree
!                      (Source   => Default_Aspect_Value (Full_View (Subtyp)),
!                       New_Sloc => Loc));
! 
!          else
!             return
!               Convert_To
!                 (Typ  => Typ,
!                  Expr =>
!                    New_Copy_Tree
!                      (Source   => Default_Aspect_Value (Subtyp),
!                       New_Sloc => Loc));
           end if;
        end Simple_Init_Defaulted_Type;
  
        -----------------------------------------
--- 8675,8702 ----
        --------------------------------
  
        function Simple_Init_Defaulted_Type return Node_Id is
!          Subtyp : Entity_Id := First_Subtype (Typ);
  
        begin
           --  When the first subtype is private, retrieve the expression of the
           --  Default_Value from the underlying type.
  
           if Is_Private_Type (Subtyp) then
!             Subtyp := Full_View (Subtyp);
           end if;
+ 
+          --  Use the Sloc of the context node when constructing the initial
+          --  value because the expression of Default_Value may come from a
+          --  different unit. Updating the Sloc will result in accurate error
+          --  diagnostics.
+ 
+          return
+            OK_Convert_To
+              (Typ  => Typ,
+               Expr =>
+                 New_Copy_Tree
+                   (Source   => Default_Aspect_Value (Subtyp),
+                    New_Sloc => Loc));
        end Simple_Init_Defaulted_Type;
  
        -----------------------------------------
*************** package body Exp_Ch3 is
*** 8661,8667 ****
           --  If zero is invalid, it is a convenient value to use that is for
           --  sure an appropriate invalid value in all situations.
  
!          elsif Lo_Bound /= No_Uint and then Lo_Bound > Uint_0 then
              return Make_Integer_Literal (Loc, 0);
  
           --  Unsigned types
--- 8732,8738 ----
           --  If zero is invalid, it is a convenient value to use that is for
           --  sure an appropriate invalid value in all situations.
  
!          elsif Present (Lo_Bound) and then Lo_Bound > Uint_0 then
              return Make_Integer_Literal (Loc, 0);
  
           --  Unsigned types
*************** package body Exp_Ch3 is
*** 8720,8726 ****
           --  If zero is invalid, it is a convenient value to use that is for
           --  sure an appropriate invalid value in all situations.
  
!          if Lo_Bound /= No_Uint and then Lo_Bound > Uint_0 then
              Expr := Make_Integer_Literal (Loc, 0);
  
           --  Cases where all one bits is the appropriate invalid value
--- 8791,8797 ----
           --  If zero is invalid, it is a convenient value to use that is for
           --  sure an appropriate invalid value in all situations.
  
!          if Present (Lo_Bound) and then Lo_Bound > Uint_0 then
              Expr := Make_Integer_Literal (Loc, 0);
  
           --  Cases where all one bits is the appropriate invalid value
*************** package body Exp_Ch3 is
*** 8759,8765 ****
  
              --  For this exceptional case, use largest positive value
  
!             if Lo_Bound /= No_Uint and then Hi_Bound /= No_Uint
                and then Lo_Bound <= (-(2 ** Signed_Size))
                and then Hi_Bound < 2 ** Signed_Size
              then
--- 8830,8836 ----
  
              --  For this exceptional case, use largest positive value
  
!             if Present (Lo_Bound) and then Present (Hi_Bound)
                and then Lo_Bound <= (-(2 ** Signed_Size))
                and then Hi_Bound < 2 ** Signed_Size
              then
*************** package body Exp_Ch3 is
*** 8829,8835 ****
           --  Determine the size of the object. This is either the size provided
           --  by the caller, or the Esize of the scalar type.
  
!          if Size = No_Uint or else Size <= Uint_0 then
              Size_To_Use := UI_Max (Uint_1, Esize (Typ));
           else
              Size_To_Use := Size;
--- 8900,8906 ----
           --  Determine the size of the object. This is either the size provided
           --  by the caller, or the Esize of the scalar type.
  
!          if No (Size) or else Size <= Uint_0 then
              Size_To_Use := UI_Max (Uint_1, Esize (Typ));
           else
              Size_To_Use := Size;
*************** package body Exp_Ch3 is
*** 8839,8845 ****
           --  will create values of type Long_Long_Long_Unsigned and the range
           --  must fit this type.
  
!          if Size_To_Use /= No_Uint
             and then Size_To_Use > System_Max_Integer_Size
           then
              Size_To_Use := UI_From_Int (System_Max_Integer_Size);
--- 8910,8916 ----
           --  will create values of type Long_Long_Long_Unsigned and the range
           --  must fit this type.
  
!          if Present (Size_To_Use)
             and then Size_To_Use > System_Max_Integer_Size
           then
              Size_To_Use := UI_From_Int (System_Max_Integer_Size);
*************** package body Exp_Ch3 is
*** 9008,9018 ****
                    begin
                       Comp := First_Component (E);
                       while Present (Comp) loop
!                         if Ekind (Comp) = E_Discriminant
!                           or else
!                             (Nkind (Parent (Comp)) = N_Component_Declaration
!                               and then Present (Expression (Parent (Comp))))
!                         then
                             Warning_Needed := True;
                             exit;
                          end if;
--- 9079,9088 ----
                    begin
                       Comp := First_Component (E);
                       while Present (Comp) loop
!                         pragma Assert
!                           (Nkind (Parent (Comp)) = N_Component_Declaration);
! 
!                         if Present (Expression (Parent (Comp))) then
                             Warning_Needed := True;
                             exit;
                          end if;
*************** package body Exp_Ch3 is
*** 9080,9086 ****
               Defining_Identifier =>
                 Make_Defining_Identifier (Loc, Name_uMaster),
               Parameter_Type      =>
!                New_Occurrence_Of (RTE (RE_Master_Id), Loc)));
  
           Set_Has_Master_Entity (Proc_Id);
  
--- 9150,9156 ----
               Defining_Identifier =>
                 Make_Defining_Identifier (Loc, Name_uMaster),
               Parameter_Type      =>
!                New_Occurrence_Of (Standard_Integer, Loc)));
  
           Set_Has_Master_Entity (Proc_Id);
  
*************** package body Exp_Ch3 is
*** 9525,9542 ****
        Decl_List : out List_Id;
        Body_List : out List_Id)
     is
!       Loc         : constant Source_Ptr := Sloc (Tag_Typ);
        Prim_Elmt   : Elmt_Id;
        Subp        : Entity_Id;
        Actual_List : List_Id;
-       Formal_List : List_Id;
        Formal      : Entity_Id;
        Par_Formal  : Entity_Id;
        Formal_Node : Node_Id;
        Func_Body   : Node_Id;
        Func_Decl   : Node_Id;
!       Func_Spec   : Node_Id;
!       Return_Stmt : Node_Id;
  
     begin
        Decl_List := New_List;
--- 9595,9634 ----
        Decl_List : out List_Id;
        Body_List : out List_Id)
     is
!       Loc : constant Source_Ptr := Sloc (Tag_Typ);
! 
!       function Make_Wrapper_Specification (Subp : Entity_Id) return Node_Id;
!       --  Returns a function specification with the same profile as Subp
! 
!       --------------------------------
!       -- Make_Wrapper_Specification --
!       --------------------------------
! 
!       function Make_Wrapper_Specification (Subp : Entity_Id) return Node_Id is
!       begin
!          return
!            Make_Function_Specification (Loc,
!              Defining_Unit_Name       =>
!                Make_Defining_Identifier (Loc,
!                  Chars => Chars (Subp)),
!              Parameter_Specifications =>
!                Copy_Parameter_List (Subp),
!              Result_Definition        =>
!                New_Occurrence_Of (Etype (Subp), Loc));
!       end Make_Wrapper_Specification;
! 
        Prim_Elmt   : Elmt_Id;
        Subp        : Entity_Id;
        Actual_List : List_Id;
        Formal      : Entity_Id;
        Par_Formal  : Entity_Id;
+       Ext_Aggr    : Node_Id;
        Formal_Node : Node_Id;
        Func_Body   : Node_Id;
        Func_Decl   : Node_Id;
!       Func_Id     : Entity_Id;
! 
!    --  Start of processing for Make_Controlling_Function_Wrappers
  
     begin
        Decl_List := New_List;
*************** package body Exp_Ch3 is
*** 9608,9650 ****
                 end;
              end if;
  
!             Formal_List := No_List;
!             Formal := First_Formal (Subp);
! 
!             if Present (Formal) then
!                Formal_List := New_List;
! 
!                while Present (Formal) loop
!                   Append
!                     (Make_Parameter_Specification
!                        (Loc,
!                         Defining_Identifier =>
!                           Make_Defining_Identifier (Sloc (Formal),
!                             Chars => Chars (Formal)),
!                         In_Present  => In_Present (Parent (Formal)),
!                         Out_Present => Out_Present (Parent (Formal)),
!                         Null_Exclusion_Present =>
!                           Null_Exclusion_Present (Parent (Formal)),
!                         Parameter_Type =>
!                           New_Occurrence_Of (Etype (Formal), Loc),
!                         Expression =>
!                           New_Copy_Tree (Expression (Parent (Formal)))),
!                      Formal_List);
! 
!                   Next_Formal (Formal);
!                end loop;
!             end if;
! 
!             Func_Spec :=
!               Make_Function_Specification (Loc,
!                 Defining_Unit_Name       =>
!                   Make_Defining_Identifier (Loc,
!                     Chars => Chars (Subp)),
!                 Parameter_Specifications => Formal_List,
!                 Result_Definition        =>
!                   New_Occurrence_Of (Etype (Subp), Loc));
  
-             Func_Decl := Make_Subprogram_Declaration (Loc, Func_Spec);
              Append_To (Decl_List, Func_Decl);
  
              --  Build a wrapper body that calls the parent function. The body
--- 9700,9709 ----
                 end;
              end if;
  
!             Func_Decl :=
!               Make_Subprogram_Declaration (Loc,
!                 Specification => Make_Wrapper_Specification (Subp));
  
              Append_To (Decl_List, Func_Decl);
  
              --  Build a wrapper body that calls the parent function. The body
*************** package body Exp_Ch3 is
*** 9657,9713 ****
  
              Formal      := First_Formal (Subp);
              Par_Formal  := First_Formal (Alias (Subp));
!             Formal_Node := First (Formal_List);
  
              if Present (Formal) then
                 Actual_List := New_List;
-             else
-                Actual_List := No_List;
-             end if;
  
!             while Present (Formal) loop
!                if Is_Controlling_Formal (Formal) then
!                   Append_To (Actual_List,
!                     Make_Type_Conversion (Loc,
!                       Subtype_Mark =>
!                         New_Occurrence_Of (Etype (Par_Formal), Loc),
!                       Expression   =>
                          New_Occurrence_Of
!                           (Defining_Identifier (Formal_Node), Loc)));
!                else
!                   Append_To
!                     (Actual_List,
!                      New_Occurrence_Of
!                        (Defining_Identifier (Formal_Node), Loc));
!                end if;
  
!                Next_Formal (Formal);
!                Next_Formal (Par_Formal);
!                Next (Formal_Node);
!             end loop;
  
!             Return_Stmt :=
!               Make_Simple_Return_Statement (Loc,
!                 Expression =>
!                   Make_Extension_Aggregate (Loc,
!                     Ancestor_Part       =>
!                       Make_Function_Call (Loc,
!                         Name                   =>
!                           New_Occurrence_Of (Alias (Subp), Loc),
!                         Parameter_Associations => Actual_List),
!                     Null_Record_Present => True));
  
!             Func_Body :=
!               Make_Subprogram_Body (Loc,
!                 Specification              => New_Copy_Tree (Func_Spec),
!                 Declarations               => Empty_List,
!                 Handled_Statement_Sequence =>
!                   Make_Handled_Sequence_Of_Statements (Loc,
!                     Statements => New_List (Return_Stmt)));
  
!             Set_Defining_Unit_Name
!               (Specification (Func_Body),
!                 Make_Defining_Identifier (Loc, Chars (Subp)));
  
              Append_To (Body_List, Func_Body);
  
--- 9716,9783 ----
  
              Formal      := First_Formal (Subp);
              Par_Formal  := First_Formal (Alias (Subp));
!             Formal_Node :=
!               First (Parameter_Specifications (Specification (Func_Decl)));
  
              if Present (Formal) then
                 Actual_List := New_List;
  
!                while Present (Formal) loop
!                   if Is_Controlling_Formal (Formal) then
!                      Append_To (Actual_List,
!                        Make_Type_Conversion (Loc,
!                          Subtype_Mark =>
!                            New_Occurrence_Of (Etype (Par_Formal), Loc),
!                          Expression   =>
!                            New_Occurrence_Of
!                              (Defining_Identifier (Formal_Node), Loc)));
!                   else
!                      Append_To
!                        (Actual_List,
                          New_Occurrence_Of
!                           (Defining_Identifier (Formal_Node), Loc));
!                   end if;
  
!                   Next_Formal (Formal);
!                   Next_Formal (Par_Formal);
!                   Next (Formal_Node);
!                end loop;
!             else
!                Actual_List := No_List;
!             end if;
  
!             Ext_Aggr :=
!               Make_Extension_Aggregate (Loc,
!                 Ancestor_Part       =>
!                   Make_Function_Call (Loc,
!                     Name                   =>
!                       New_Occurrence_Of (Alias (Subp), Loc),
!                     Parameter_Associations => Actual_List),
!                 Null_Record_Present => True);
  
!             --  GNATprove will use expression of an expression function as an
!             --  implicit postcondition. GNAT will not benefit from expression
!             --  function (and would struggle if we add an expression function
!             --  to freezing actions).
  
!             if GNATprove_Mode then
!                Func_Body :=
!                  Make_Expression_Function (Loc,
!                    Specification =>
!                      Make_Wrapper_Specification (Subp),
!                    Expression => Ext_Aggr);
!             else
!                Func_Body :=
!                  Make_Subprogram_Body (Loc,
!                    Specification              =>
!                      Make_Wrapper_Specification (Subp),
!                    Declarations               => Empty_List,
!                    Handled_Statement_Sequence =>
!                      Make_Handled_Sequence_Of_Statements (Loc,
!                        Statements => New_List (
!                          Make_Simple_Return_Statement (Loc,
!                            Expression => Ext_Aggr))));
!             end if;
  
              Append_To (Body_List, Func_Body);
  
*************** package body Exp_Ch3 is
*** 9715,9725 ****
              --  primitive operations list. We add the minimum decoration needed
              --  to override interface primitives.
  
!             Set_Ekind (Defining_Unit_Name (Func_Spec), E_Function);
  
!             Override_Dispatching_Operation
!               (Tag_Typ, Subp, New_Op => Defining_Unit_Name (Func_Spec),
!                Is_Wrapper => True);
           end if;
  
        <<Next_Prim>>
--- 9785,9796 ----
              --  primitive operations list. We add the minimum decoration needed
              --  to override interface primitives.
  
!             Func_Id := Defining_Unit_Name (Specification (Func_Decl));
  
!             Mutate_Ekind (Func_Id, E_Function);
!             Set_Is_Wrapper (Func_Id);
! 
!             Override_Dispatching_Operation (Tag_Typ, Subp, New_Op => Func_Id);
           end if;
  
        <<Next_Prim>>
*************** package body Exp_Ch3 is
*** 9746,9754 ****
     begin
        Decl :=
          Predef_Spec_Or_Body (Loc,
!           Tag_Typ => Typ,
!           Name    => Eq_Name,
!           Profile => New_List (
              Make_Parameter_Specification (Loc,
                Defining_Identifier =>
                  Make_Defining_Identifier (Loc, Name_X),
--- 9817,9825 ----
     begin
        Decl :=
          Predef_Spec_Or_Body (Loc,
!           Tag_Typ  => Typ,
!           Name     => Eq_Name,
!           Profile  => New_List (
              Make_Parameter_Specification (Loc,
                Defining_Identifier =>
                  Make_Defining_Identifier (Loc, Name_X),
*************** package body Exp_Ch3 is
*** 9789,9798 ****
               Expression =>
                 Expand_Record_Equality
                   (Typ,
!                   Typ    => Typ,
!                   Lhs    => Make_Identifier (Loc, Name_X),
!                   Rhs    => Make_Identifier (Loc, Name_Y),
!                   Bodies => Declarations (Decl))));
        end if;
  
        Set_Handled_Statement_Sequence
--- 9860,9868 ----
               Expression =>
                 Expand_Record_Equality
                   (Typ,
!                   Typ => Typ,
!                   Lhs => Make_Identifier (Loc, Name_X),
!                   Rhs => Make_Identifier (Loc, Name_Y))));
        end if;
  
        Set_Handled_Statement_Sequence
*************** package body Exp_Ch3 is
*** 10064,10070 ****
        --  Local variables
  
        Loc           : constant Source_Ptr := Sloc (Parent (Tag_Typ));
-       Stmts         : constant List_Id    := New_List;
        Decl          : Node_Id;
        Eq_Prim       : Entity_Id;
        Left_Op       : Entity_Id;
--- 10134,10139 ----
*************** package body Exp_Ch3 is
*** 10080,10086 ****
        --  the body executed is that of the overriding declaration, even if the
        --  overriding declaration is not visible at the place of the renaming;
        --  otherwise, the inherited or predefined subprogram is called, see
!       --  (RM 8.5.4(8))
  
        --  Stage 1: Search for a renaming of the inequality primitive and also
        --  search for an overriding of the equality primitive located before the
--- 10149,10155 ----
        --  the body executed is that of the overriding declaration, even if the
        --  overriding declaration is not visible at the place of the renaming;
        --  otherwise, the inherited or predefined subprogram is called, see
!       --  (RM 8.5.4(8)).
  
        --  Stage 1: Search for a renaming of the inequality primitive and also
        --  search for an overriding of the equality primitive located before the
*************** package body Exp_Ch3 is
*** 10141,10149 ****
  
        Decl :=
          Predef_Spec_Or_Body (Loc,
!           Tag_Typ => Tag_Typ,
!           Name    => Chars (Renaming_Prim),
!           Profile => New_List (
              Make_Parameter_Specification (Loc,
                Defining_Identifier =>
                  Make_Defining_Identifier (Loc, Chars (Left_Op)),
--- 10210,10218 ----
  
        Decl :=
          Predef_Spec_Or_Body (Loc,
!           Tag_Typ  => Tag_Typ,
!           Name     => Chars (Renaming_Prim),
!           Profile  => New_List (
              Make_Parameter_Specification (Loc,
                Defining_Identifier =>
                  Make_Defining_Identifier (Loc, Chars (Left_Op)),
*************** package body Exp_Ch3 is
*** 10190,10207 ****
           end;
        end if;
  
-       Append_To (Stmts,
-         Make_Simple_Return_Statement (Loc,
-           Expression =>
-             Make_Op_Not (Loc,
-               Make_Function_Call (Loc,
-                 Name                   => New_Occurrence_Of (Target, Loc),
-                 Parameter_Associations => New_List (
-                   Make_Identifier (Loc, Chars (Left_Op)),
-                   Make_Identifier (Loc, Chars (Right_Op)))))));
- 
        Set_Handled_Statement_Sequence
!         (Decl, Make_Handled_Sequence_Of_Statements (Loc, Stmts));
        return Decl;
     end Make_Neq_Body;
  
--- 10259,10276 ----
           end;
        end if;
  
        Set_Handled_Statement_Sequence
!         (Decl,
!          Make_Handled_Sequence_Of_Statements (Loc, New_List (
!            Make_Simple_Return_Statement (Loc,
!               Expression =>
!                 Make_Op_Not (Loc,
!                   Make_Function_Call (Loc,
!                   Name                   => New_Occurrence_Of (Target, Loc),
!                   Parameter_Associations => New_List (
!                     Make_Identifier (Loc, Chars (Left_Op)),
!                     Make_Identifier (Loc, Chars (Right_Op)))))))));
! 
        return Decl;
     end Make_Neq_Body;
  
*************** package body Exp_Ch3 is
*** 10213,10220 ****
        Decl_List      : constant List_Id    := New_List;
        Loc            : constant Source_Ptr := Sloc (Tag_Typ);
        Formal         : Entity_Id;
-       Formal_List    : List_Id;
        New_Param_Spec : Node_Id;
        Parent_Subp    : Entity_Id;
        Prim_Elmt      : Elmt_Id;
        Subp           : Entity_Id;
--- 10282,10289 ----
        Decl_List      : constant List_Id    := New_List;
        Loc            : constant Source_Ptr := Sloc (Tag_Typ);
        Formal         : Entity_Id;
        New_Param_Spec : Node_Id;
+       New_Spec       : Node_Id;
        Parent_Subp    : Entity_Id;
        Prim_Elmt      : Elmt_Id;
        Subp           : Entity_Id;
*************** package body Exp_Ch3 is
*** 10233,10290 ****
           if Present (Parent_Subp)
             and then Is_Null_Interface_Primitive (Parent_Subp)
           then
!             Formal_List := No_List;
!             Formal := First_Formal (Subp);
! 
!             if Present (Formal) then
!                Formal_List := New_List;
! 
!                while Present (Formal) loop
  
!                   --  Copy the parameter spec including default expressions
  
!                   New_Param_Spec :=
!                     New_Copy_Tree (Parent (Formal), New_Sloc => Loc);
  
!                   --  Generate a new defining identifier for the new formal.
!                   --  required because New_Copy_Tree does not duplicate
!                   --  semantic fields (except itypes).
  
!                   Set_Defining_Identifier (New_Param_Spec,
!                     Make_Defining_Identifier (Sloc (Formal),
!                       Chars => Chars (Formal)));
  
!                   --  For controlling arguments we must change their
!                   --  parameter type to reference the tagged type (instead
!                   --  of the interface type)
  
!                   if Is_Controlling_Formal (Formal) then
!                      if Nkind (Parameter_Type (Parent (Formal))) = N_Identifier
!                      then
!                         Set_Parameter_Type (New_Param_Spec,
!                           New_Occurrence_Of (Tag_Typ, Loc));
  
!                      else pragma Assert
!                             (Nkind (Parameter_Type (Parent (Formal))) =
!                                                         N_Access_Definition);
!                         Set_Subtype_Mark (Parameter_Type (New_Param_Spec),
!                           New_Occurrence_Of (Tag_Typ, Loc));
!                      end if;
                    end if;
  
!                   Append (New_Param_Spec, Formal_List);
! 
!                   Next_Formal (Formal);
!                end loop;
!             end if;
  
              Append_To (Decl_List,
                Make_Subprogram_Declaration (Loc,
!                 Make_Procedure_Specification (Loc,
!                   Defining_Unit_Name       =>
!                     Make_Defining_Identifier (Loc, Chars (Subp)),
!                   Parameter_Specifications => Formal_List,
!                   Null_Present             => True)));
           end if;
  
           Next_Elmt (Prim_Elmt);
--- 10302,10348 ----
           if Present (Parent_Subp)
             and then Is_Null_Interface_Primitive (Parent_Subp)
           then
!             --  The null procedure spec is copied from the inherited procedure,
!             --  except for the IS NULL (which must be added) and the overriding
!             --  indicators (which must be removed, if present).
  
!             New_Spec :=
!               Copy_Subprogram_Spec (Subprogram_Specification (Subp), Loc);
  
!             Set_Null_Present      (New_Spec, True);
!             Set_Must_Override     (New_Spec, False);
!             Set_Must_Not_Override (New_Spec, False);
  
!             Formal := First_Formal (Subp);
!             New_Param_Spec := First (Parameter_Specifications (New_Spec));
  
!             while Present (Formal) loop
  
!                --  For controlling arguments we must change their parameter
!                --  type to reference the tagged type (instead of the interface
!                --  type).
  
!                if Is_Controlling_Formal (Formal) then
!                   if Nkind (Parameter_Type (Parent (Formal))) = N_Identifier
!                   then
!                      Set_Parameter_Type (New_Param_Spec,
!                        New_Occurrence_Of (Tag_Typ, Loc));
  
!                   else pragma Assert
!                          (Nkind (Parameter_Type (Parent (Formal))) =
!                                                      N_Access_Definition);
!                      Set_Subtype_Mark (Parameter_Type (New_Param_Spec),
!                        New_Occurrence_Of (Tag_Typ, Loc));
                    end if;
+                end if;
  
!                Next_Formal (Formal);
!                Next (New_Param_Spec);
!             end loop;
  
              Append_To (Decl_List,
                Make_Subprogram_Declaration (Loc,
!                 Specification => New_Spec));
           end if;
  
           Next_Elmt (Prim_Elmt);
*************** package body Exp_Ch3 is
*** 10293,10305 ****
        return Decl_List;
     end Make_Null_Procedure_Specs;
  
!    -------------------------------------
!    -- Make_Predefined_Primitive_Specs --
!    -------------------------------------
  
!    procedure Make_Predefined_Primitive_Specs
       (Tag_Typ     : Entity_Id;
!       Predef_List : out List_Id;
        Renamed_Eq  : out Entity_Id)
     is
        function Is_Predefined_Eq_Renaming (Prim : Node_Id) return Boolean;
--- 10351,10363 ----
        return Decl_List;
     end Make_Null_Procedure_Specs;
  
!    ---------------------------------------
!    -- Make_Predefined_Primitive_Eq_Spec --
!    ---------------------------------------
  
!    procedure Make_Predefined_Primitive_Eq_Spec
       (Tag_Typ     : Entity_Id;
!       Predef_List : List_Id;
        Renamed_Eq  : out Entity_Id)
     is
        function Is_Predefined_Eq_Renaming (Prim : Node_Id) return Boolean;
*************** package body Exp_Ch3 is
*** 10321,10330 ****
  
        --  Local variables
  
!       Loc       : constant Source_Ptr := Sloc (Tag_Typ);
!       Res       : constant List_Id    := New_List;
!       Eq_Name   : Name_Id             := Name_Op_Eq;
!       Eq_Needed : Boolean;
        Eq_Spec   : Node_Id;
        Prim      : Elmt_Id;
  
--- 10379,10388 ----
  
        --  Local variables
  
!       Loc : constant Source_Ptr := Sloc (Tag_Typ);
! 
!       Eq_Name   : Name_Id := Name_Op_Eq;
!       Eq_Needed : Boolean := True;
        Eq_Spec   : Node_Id;
        Prim      : Elmt_Id;
  
*************** package body Exp_Ch3 is
*** 10332,10350 ****
        --  Set to True if Tag_Typ has a primitive that renames the predefined
        --  equality operator. Used to implement (RM 8-5-4(8)).
  
-       use Exp_Put_Image;
- 
     --  Start of processing for Make_Predefined_Primitive_Specs
  
     begin
        Renamed_Eq := Empty;
  
        --  Spec of _Size
  
        Append_To (Res, Predef_Spec_Or_Body (Loc,
!         Tag_Typ => Tag_Typ,
!         Name    => Name_uSize,
!         Profile => New_List (
            Make_Parameter_Specification (Loc,
              Defining_Identifier => Make_Defining_Identifier (Loc, Name_X),
              Parameter_Type      => New_Occurrence_Of (Tag_Typ, Loc))),
--- 10390,10539 ----
        --  Set to True if Tag_Typ has a primitive that renames the predefined
        --  equality operator. Used to implement (RM 8-5-4(8)).
  
     --  Start of processing for Make_Predefined_Primitive_Specs
  
     begin
        Renamed_Eq := Empty;
  
+       Prim := First_Elmt (Primitive_Operations (Tag_Typ));
+       while Present (Prim) loop
+ 
+          --  If a primitive is encountered that renames the predefined equality
+          --  operator before reaching any explicit equality primitive, then we
+          --  still need to create a predefined equality function, because calls
+          --  to it can occur via the renaming. A new name is created for the
+          --  equality to avoid conflicting with any user-defined equality.
+          --  (Note that this doesn't account for renamings of equality nested
+          --  within subpackages???)
+ 
+          if Is_Predefined_Eq_Renaming (Node (Prim)) then
+             Has_Predef_Eq_Renaming := True;
+             Eq_Name := New_External_Name (Chars (Node (Prim)), 'E');
+ 
+          --  User-defined equality
+ 
+          elsif Is_User_Defined_Equality (Node (Prim)) then
+             if No (Alias (Node (Prim)))
+               or else Nkind (Unit_Declaration_Node (Node (Prim))) =
+                         N_Subprogram_Renaming_Declaration
+             then
+                Eq_Needed := False;
+                exit;
+ 
+             --  If the parent is not an interface type and has an abstract
+             --  equality function explicitly defined in the sources, then the
+             --  inherited equality is abstract as well, and no body can be
+             --  created for it.
+ 
+             elsif not Is_Interface (Etype (Tag_Typ))
+               and then Present (Alias (Node (Prim)))
+               and then Comes_From_Source (Alias (Node (Prim)))
+               and then Is_Abstract_Subprogram (Alias (Node (Prim)))
+             then
+                Eq_Needed := False;
+                exit;
+ 
+             --  If the type has an equality function corresponding with a
+             --  primitive defined in an interface type, the inherited equality
+             --  is abstract as well, and no body can be created for it.
+ 
+             elsif Present (Alias (Node (Prim)))
+               and then Comes_From_Source (Ultimate_Alias (Node (Prim)))
+               and then
+                 Is_Interface
+                   (Find_Dispatching_Type (Ultimate_Alias (Node (Prim))))
+             then
+                Eq_Needed := False;
+                exit;
+             end if;
+          end if;
+ 
+          Next_Elmt (Prim);
+       end loop;
+ 
+       --  If a renaming of predefined equality was found but there was no
+       --  user-defined equality (so Eq_Needed is still true), then set the name
+       --  back to Name_Op_Eq. But in the case where a user-defined equality was
+       --  located after such a renaming, then the predefined equality function
+       --  is still needed, so Eq_Needed must be set back to True.
+ 
+       if Eq_Name /= Name_Op_Eq then
+          if Eq_Needed then
+             Eq_Name := Name_Op_Eq;
+          else
+             Eq_Needed := True;
+          end if;
+       end if;
+ 
+       if Eq_Needed then
+          Eq_Spec := Predef_Spec_Or_Body (Loc,
+            Tag_Typ  => Tag_Typ,
+            Name     => Eq_Name,
+            Profile  => New_List (
+              Make_Parameter_Specification (Loc,
+                Defining_Identifier =>
+                  Make_Defining_Identifier (Loc, Name_X),
+                Parameter_Type      => New_Occurrence_Of (Tag_Typ, Loc)),
+ 
+              Make_Parameter_Specification (Loc,
+                Defining_Identifier =>
+                  Make_Defining_Identifier (Loc, Name_Y),
+                Parameter_Type      => New_Occurrence_Of (Tag_Typ, Loc))),
+            Ret_Type => Standard_Boolean);
+          Append_To (Predef_List, Eq_Spec);
+ 
+          if Has_Predef_Eq_Renaming then
+             Renamed_Eq := Defining_Unit_Name (Specification (Eq_Spec));
+ 
+             Prim := First_Elmt (Primitive_Operations (Tag_Typ));
+             while Present (Prim) loop
+ 
+                --  Any renamings of equality that appeared before an overriding
+                --  equality must be updated to refer to the entity for the
+                --  predefined equality, otherwise calls via the renaming would
+                --  get incorrectly resolved to call the user-defined equality
+                --  function.
+ 
+                if Is_Predefined_Eq_Renaming (Node (Prim)) then
+                   Set_Alias (Node (Prim), Renamed_Eq);
+ 
+                --  Exit upon encountering a user-defined equality
+ 
+                elsif Chars (Node (Prim)) = Name_Op_Eq
+                  and then No (Alias (Node (Prim)))
+                then
+                   exit;
+                end if;
+ 
+                Next_Elmt (Prim);
+             end loop;
+          end if;
+       end if;
+    end Make_Predefined_Primitive_Eq_Spec;
+ 
+    -------------------------------------
+    -- Make_Predefined_Primitive_Specs --
+    -------------------------------------
+ 
+    procedure Make_Predefined_Primitive_Specs
+      (Tag_Typ     : Entity_Id;
+       Predef_List : out List_Id;
+       Renamed_Eq  : out Entity_Id)
+    is
+       Loc : constant Source_Ptr := Sloc (Tag_Typ);
+       Res : constant List_Id    := New_List;
+ 
+       use Exp_Put_Image;
+ 
+    begin
+       Renamed_Eq := Empty;
+ 
        --  Spec of _Size
  
        Append_To (Res, Predef_Spec_Or_Body (Loc,
!         Tag_Typ  => Tag_Typ,
!         Name     => Name_uSize,
!         Profile  => New_List (
            Make_Parameter_Specification (Loc,
              Defining_Identifier => Make_Defining_Identifier (Loc, Name_X),
              Parameter_Type      => New_Occurrence_Of (Tag_Typ, Loc))),
*************** package body Exp_Ch3 is
*** 10353,10361 ****
  
        --  Spec of Put_Image
  
!       if Enable_Put_Image (Tag_Typ)
!         and then No (TSS (Tag_Typ, TSS_Put_Image))
        then
           Append_To (Res, Predef_Spec_Or_Body (Loc,
             Tag_Typ => Tag_Typ,
             Name    => Make_TSS_Name (Tag_Typ, TSS_Put_Image),
--- 10542,10555 ----
  
        --  Spec of Put_Image
  
!       if (not No_Run_Time_Mode)
!          and then RTE_Available (RE_Root_Buffer_Type)
        then
+          --  No_Run_Time_Mode implies that the declaration of Tag_Typ
+          --  (like any tagged type) will be rejected. Given this, avoid
+          --  cascading errors associated with the Tag_Typ's TSS_Put_Image
+          --  procedure.
+ 
           Append_To (Res, Predef_Spec_Or_Body (Loc,
             Tag_Typ => Tag_Typ,
             Name    => Make_TSS_Name (Tag_Typ, TSS_Put_Image),
*************** package body Exp_Ch3 is
*** 10384,10509 ****
  
        --  Spec of "=" is expanded if the type is not limited and if a user
        --  defined "=" was not already declared for the non-full view of a
!       --  private extension
  
        if not Is_Limited_Type (Tag_Typ) then
!          Eq_Needed := True;
!          Prim := First_Elmt (Primitive_Operations (Tag_Typ));
!          while Present (Prim) loop
! 
!             --  If a primitive is encountered that renames the predefined
!             --  equality operator before reaching any explicit equality
!             --  primitive, then we still need to create a predefined equality
!             --  function, because calls to it can occur via the renaming. A
!             --  new name is created for the equality to avoid conflicting with
!             --  any user-defined equality. (Note that this doesn't account for
!             --  renamings of equality nested within subpackages???)
! 
!             if Is_Predefined_Eq_Renaming (Node (Prim)) then
!                Has_Predef_Eq_Renaming := True;
!                Eq_Name := New_External_Name (Chars (Node (Prim)), 'E');
! 
!             --  User-defined equality
! 
!             elsif Is_User_Defined_Equality (Node (Prim)) then
!                if No (Alias (Node (Prim)))
!                  or else Nkind (Unit_Declaration_Node (Node (Prim))) =
!                            N_Subprogram_Renaming_Declaration
!                then
!                   Eq_Needed := False;
!                   exit;
! 
!                --  If the parent is not an interface type and has an abstract
!                --  equality function explicitly defined in the sources, then
!                --  the inherited equality is abstract as well, and no body can
!                --  be created for it.
! 
!                elsif not Is_Interface (Etype (Tag_Typ))
!                  and then Present (Alias (Node (Prim)))
!                  and then Comes_From_Source (Alias (Node (Prim)))
!                  and then Is_Abstract_Subprogram (Alias (Node (Prim)))
!                then
!                   Eq_Needed := False;
!                   exit;
! 
!                --  If the type has an equality function corresponding with
!                --  a primitive defined in an interface type, the inherited
!                --  equality is abstract as well, and no body can be created
!                --  for it.
! 
!                elsif Present (Alias (Node (Prim)))
!                  and then Comes_From_Source (Ultimate_Alias (Node (Prim)))
!                  and then
!                    Is_Interface
!                      (Find_Dispatching_Type (Ultimate_Alias (Node (Prim))))
!                then
!                   Eq_Needed := False;
!                   exit;
!                end if;
!             end if;
! 
!             Next_Elmt (Prim);
!          end loop;
! 
!          --  If a renaming of predefined equality was found but there was no
!          --  user-defined equality (so Eq_Needed is still true), then set the
!          --  name back to Name_Op_Eq. But in the case where a user-defined
!          --  equality was located after such a renaming, then the predefined
!          --  equality function is still needed, so Eq_Needed must be set back
!          --  to True.
! 
!          if Eq_Name /= Name_Op_Eq then
!             if Eq_Needed then
!                Eq_Name := Name_Op_Eq;
!             else
!                Eq_Needed := True;
!             end if;
!          end if;
! 
!          if Eq_Needed then
!             Eq_Spec := Predef_Spec_Or_Body (Loc,
!               Tag_Typ => Tag_Typ,
!               Name    => Eq_Name,
!               Profile => New_List (
!                 Make_Parameter_Specification (Loc,
!                   Defining_Identifier =>
!                     Make_Defining_Identifier (Loc, Name_X),
!                   Parameter_Type      => New_Occurrence_Of (Tag_Typ, Loc)),
! 
!                 Make_Parameter_Specification (Loc,
!                   Defining_Identifier =>
!                     Make_Defining_Identifier (Loc, Name_Y),
!                   Parameter_Type      => New_Occurrence_Of (Tag_Typ, Loc))),
!                 Ret_Type => Standard_Boolean);
!             Append_To (Res, Eq_Spec);
! 
!             if Has_Predef_Eq_Renaming then
!                Renamed_Eq := Defining_Unit_Name (Specification (Eq_Spec));
! 
!                Prim := First_Elmt (Primitive_Operations (Tag_Typ));
!                while Present (Prim) loop
! 
!                   --  Any renamings of equality that appeared before an
!                   --  overriding equality must be updated to refer to the
!                   --  entity for the predefined equality, otherwise calls via
!                   --  the renaming would get incorrectly resolved to call the
!                   --  user-defined equality function.
! 
!                   if Is_Predefined_Eq_Renaming (Node (Prim)) then
!                      Set_Alias (Node (Prim), Renamed_Eq);
! 
!                   --  Exit upon encountering a user-defined equality
! 
!                   elsif Chars (Node (Prim)) = Name_Op_Eq
!                     and then No (Alias (Node (Prim)))
!                   then
!                      exit;
!                   end if;
! 
!                   Next_Elmt (Prim);
!                end loop;
!             end if;
!          end if;
  
           --  Spec for dispatching assignment
  
--- 10578,10587 ----
  
        --  Spec of "=" is expanded if the type is not limited and if a user
        --  defined "=" was not already declared for the non-full view of a
!       --  private extension.
  
        if not Is_Limited_Type (Tag_Typ) then
!          Make_Predefined_Primitive_Eq_Spec (Tag_Typ, Res, Renamed_Eq);
  
           --  Spec for dispatching assignment
  
*************** package body Exp_Ch3 is
*** 10532,10542 ****
        --    Disp_Requeue
        --    Disp_Timed_Select
  
!       --  Disable the generation of these bodies if No_Dispatching_Calls,
!       --  Ravenscar or ZFP is active.
  
        if Ada_Version >= Ada_2005
-         and then not Restriction_Active (No_Dispatching_Calls)
          and then not Restriction_Active (No_Select_Statements)
          and then RTE_Available (RE_Select_Specific_Data)
        then
--- 10610,10618 ----
        --    Disp_Requeue
        --    Disp_Timed_Select
  
!       --  Disable the generation of these bodies if Ravenscar or ZFP is active
  
        if Ada_Version >= Ada_2005
          and then not Restriction_Active (No_Select_Statements)
          and then RTE_Available (RE_Select_Specific_Data)
        then
*************** package body Exp_Ch3 is
*** 10827,10836 ****
     -----------------------------
  
     function Predef_Stream_Attr_Spec
!      (Loc      : Source_Ptr;
!       Tag_Typ  : Entity_Id;
!       Name     : TSS_Name_Type;
!       For_Body : Boolean := False) return Node_Id
     is
        Ret_Type : Entity_Id;
  
--- 10903,10911 ----
     -----------------------------
  
     function Predef_Stream_Attr_Spec
!      (Loc     : Source_Ptr;
!       Tag_Typ : Entity_Id;
!       Name    : TSS_Name_Type) return Node_Id
     is
        Ret_Type : Entity_Id;
  
*************** package body Exp_Ch3 is
*** 10848,10881 ****
             Tag_Typ  => Tag_Typ,
             Profile  => Build_Stream_Attr_Profile (Loc, Tag_Typ, Name),
             Ret_Type => Ret_Type,
!            For_Body => For_Body);
     end Predef_Stream_Attr_Spec;
  
!    ---------------------------------
!    -- Predefined_Primitive_Bodies --
!    ---------------------------------
  
!    function Predefined_Primitive_Bodies
!      (Tag_Typ    : Entity_Id;
!       Renamed_Eq : Entity_Id) return List_Id
     is
-       Loc       : constant Source_Ptr := Sloc (Tag_Typ);
-       Res       : constant List_Id    := New_List;
-       Adj_Call  : Node_Id;
        Decl      : Node_Id;
-       Fin_Call  : Node_Id;
-       Prim      : Elmt_Id;
        Eq_Needed : Boolean;
        Eq_Name   : Name_Id;
!       Ent       : Entity_Id;
! 
!       pragma Warnings (Off, Ent);
! 
!       use Exp_Put_Image;
  
     begin
-       pragma Assert (not Is_Interface (Tag_Typ));
- 
        --  See if we have a predefined "=" operator
  
        if Present (Renamed_Eq) then
--- 10923,10946 ----
             Tag_Typ  => Tag_Typ,
             Profile  => Build_Stream_Attr_Profile (Loc, Tag_Typ, Name),
             Ret_Type => Ret_Type,
!            For_Body => False);
     end Predef_Stream_Attr_Spec;
  
!    ----------------------------------
!    -- Predefined_Primitive_Eq_Body --
!    ----------------------------------
  
!    procedure Predefined_Primitive_Eq_Body
!      (Tag_Typ     : Entity_Id;
!       Predef_List : List_Id;
!       Renamed_Eq  : Entity_Id)
     is
        Decl      : Node_Id;
        Eq_Needed : Boolean;
        Eq_Name   : Name_Id;
!       Prim      : Elmt_Id;
  
     begin
        --  See if we have a predefined "=" operator
  
        if Present (Renamed_Eq) then
*************** package body Exp_Ch3 is
*** 10895,10910 ****
           while Present (Prim) loop
              if Chars (Node (Prim)) = Name_Op_Eq
                and then not Is_Internal (Node (Prim))
-               and then Present (First_Entity (Node (Prim)))
  
                --  The predefined equality primitive must have exactly two
!               --  formals whose type is this tagged type
  
!               and then Present (Last_Entity (Node (Prim)))
!               and then Next_Entity (First_Entity (Node (Prim)))
!                          = Last_Entity (Node (Prim))
!               and then Etype (First_Entity (Node (Prim))) = Tag_Typ
!               and then Etype (Last_Entity (Node (Prim))) = Tag_Typ
              then
                 Eq_Needed := False;
                 Eq_Name := No_Name;
--- 10960,10972 ----
           while Present (Prim) loop
              if Chars (Node (Prim)) = Name_Op_Eq
                and then not Is_Internal (Node (Prim))
  
                --  The predefined equality primitive must have exactly two
!               --  formals whose type is this tagged type.
  
!               and then Number_Formals (Node (Prim)) = 2
!               and then Etype (First_Formal (Node (Prim))) = Tag_Typ
!               and then Etype (Last_Formal (Node (Prim))) = Tag_Typ
              then
                 Eq_Needed := False;
                 Eq_Name := No_Name;
*************** package body Exp_Ch3 is
*** 10932,10937 ****
--- 10994,11041 ----
           end loop;
        end if;
  
+       --  If equality is needed, we will have its name
+ 
+       pragma Assert (Eq_Needed = Present (Eq_Name));
+ 
+       --  Body for equality
+ 
+       if Eq_Needed then
+          Decl := Make_Eq_Body (Tag_Typ, Eq_Name);
+          Append_To (Predef_List, Decl);
+       end if;
+ 
+       --  Body for inequality (if required)
+ 
+       Decl := Make_Neq_Body (Tag_Typ);
+ 
+       if Present (Decl) then
+          Append_To (Predef_List, Decl);
+       end if;
+    end Predefined_Primitive_Eq_Body;
+ 
+    ---------------------------------
+    -- Predefined_Primitive_Bodies --
+    ---------------------------------
+ 
+    function Predefined_Primitive_Bodies
+      (Tag_Typ    : Entity_Id;
+       Renamed_Eq : Entity_Id) return List_Id
+    is
+       Loc      : constant Source_Ptr := Sloc (Tag_Typ);
+       Res      : constant List_Id    := New_List;
+       Adj_Call : Node_Id;
+       Decl     : Node_Id;
+       Fin_Call : Node_Id;
+       Ent      : Entity_Id;
+ 
+       pragma Warnings (Off, Ent);
+ 
+       use Exp_Put_Image;
+ 
+    begin
+       pragma Assert (not Is_Interface (Tag_Typ));
+ 
        --  Body of _Size
  
        Decl := Predef_Spec_Or_Body (Loc,
*************** package body Exp_Ch3 is
*** 10957,10964 ****
  
        --  Body of Put_Image
  
!       if Enable_Put_Image (Tag_Typ)
!         and then No (TSS (Tag_Typ, TSS_Put_Image))
        then
           Build_Record_Put_Image_Procedure (Loc, Tag_Typ, Decl, Ent);
           Append_To (Res, Decl);
--- 11061,11069 ----
  
        --  Body of Put_Image
  
!       if No (TSS (Tag_Typ, TSS_Put_Image))
!          and then (not No_Run_Time_Mode)
!          and then RTE_Available (RE_Root_Buffer_Type)
        then
           Build_Record_Put_Image_Procedure (Loc, Tag_Typ, Decl, Ent);
           Append_To (Res, Decl);
*************** package body Exp_Ch3 is
*** 11015,11022 ****
  
        --  The interface versions will have null bodies
  
!       --  Disable the generation of these bodies if No_Dispatching_Calls,
!       --  Ravenscar or ZFP is active.
  
        --  In VM targets we define these primitives in all root tagged types
        --  that are not interface types. Done because in VM targets we don't
--- 11120,11126 ----
  
        --  The interface versions will have null bodies
  
!       --  Disable the generation of these bodies if Ravenscar or ZFP is active
  
        --  In VM targets we define these primitives in all root tagged types
        --  that are not interface types. Done because in VM targets we don't
*************** package body Exp_Ch3 is
*** 11025,11031 ****
        --  they may be ancestors of synchronized interface types).
  
        if Ada_Version >= Ada_2005
-         and then not Is_Interface (Tag_Typ)
          and then
            ((Is_Interface (Etype (Tag_Typ))
               and then Is_Limited_Record (Etype (Tag_Typ)))
--- 11129,11134 ----
*************** package body Exp_Ch3 is
*** 11035,11041 ****
             or else
               (not Tagged_Type_Expansion
                 and then Tag_Typ = Root_Type (Tag_Typ)))
-         and then not Restriction_Active (No_Dispatching_Calls)
          and then not Restriction_Active (No_Select_Statements)
          and then RTE_Available (RE_Select_Specific_Data)
        then
--- 11138,11143 ----
*************** package body Exp_Ch3 is
*** 11047,11068 ****
           Append_To (Res, Make_Disp_Timed_Select_Body        (Tag_Typ));
        end if;
  
!       if not Is_Limited_Type (Tag_Typ) and then not Is_Interface (Tag_Typ) then
! 
!          --  Body for equality
! 
!          if Eq_Needed then
!             Decl := Make_Eq_Body (Tag_Typ, Eq_Name);
!             Append_To (Res, Decl);
!          end if;
! 
!          --  Body for inequality (if required)
! 
!          Decl := Make_Neq_Body (Tag_Typ);
  
!          if Present (Decl) then
!             Append_To (Res, Decl);
!          end if;
  
           --  Body for dispatching assignment
  
--- 11149,11158 ----
           Append_To (Res, Make_Disp_Timed_Select_Body        (Tag_Typ));
        end if;
  
!       if not Is_Limited_Type (Tag_Typ) then
!          --  Body for equality and inequality
  
!          Predefined_Primitive_Eq_Body (Tag_Typ, Res, Renamed_Eq);
  
           --  Body for dispatching assignment
  
*************** package body Exp_Ch3 is
*** 11261,11272 ****
              or else not Is_Abstract_Type (Typ)
              or else not Is_Derived_Type (Typ))
          and then not Has_Unknown_Discriminants (Typ)
!         and then not
!           (Is_Interface (Typ)
!             and then
!               (Is_Task_Interface (Typ)
!                 or else Is_Protected_Interface (Typ)
!                 or else Is_Synchronized_Interface (Typ)))
          and then not Restriction_Active (No_Streams)
          and then not Restriction_Active (No_Dispatch)
          and then No (No_Tagged_Streams_Pragma (Typ))
--- 11351,11357 ----
              or else not Is_Abstract_Type (Typ)
              or else not Is_Derived_Type (Typ))
          and then not Has_Unknown_Discriminants (Typ)
!         and then not Is_Concurrent_Interface (Typ)
          and then not Restriction_Active (No_Streams)
          and then not Restriction_Active (No_Dispatch)
          and then No (No_Tagged_Streams_Pragma (Typ))
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch3.ads gcc-12.1.0/gcc/ada/exp_ch3.ads
*** gcc-11.3.0/gcc/ada/exp_ch3.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch3.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Exp_Ch3 is
*** 114,119 ****
--- 114,122 ----
     --  delete the node if it is present just for front end purpose and we don't
     --  want Gigi to see the node. This function can't delete the node itself
     --  since it would confuse any remaining processing of the freeze node.
+    --
+    --  Note: for GNATprove we have a minimal variant of this routine in
+    --  Exp_SPARK.SPARK_Freeze_Type. They need to be kept in sync.
  
     function Get_Simple_Init_Val
       (Typ  : Entity_Id;
*************** package Exp_Ch3 is
*** 155,160 ****
--- 158,188 ----
     --  initialized; if Variable_Comps is True then tags components located at
     --  variable positions of Target are initialized.
  
+    procedure Make_Controlling_Function_Wrappers
+      (Tag_Typ   : Entity_Id;
+       Decl_List : out List_Id;
+       Body_List : out List_Id);
+    --  Ada 2005 (AI-391): Makes specs and bodies for the wrapper functions
+    --  associated with inherited functions with controlling results which
+    --  are not overridden. The body of each wrapper function consists solely
+    --  of a return statement whose expression is an extension aggregate
+    --  invoking the inherited subprogram's parent subprogram and extended
+    --  with a null association list.
+ 
+    procedure Make_Predefined_Primitive_Eq_Spec
+      (Tag_Typ     : Entity_Id;
+       Predef_List : List_Id;
+       Renamed_Eq  : out Entity_Id);
+    --  Creates spec for the predefined equality on a tagged type Tag_Typ, if
+    --  required. If created, it will be appended to Predef_List.
+    --
+    --  The Parameter Renamed_Eq either returns the value Empty, or else
+    --  the defining unit name for the predefined equality function in the
+    --  case where the type has a primitive operation that is a renaming
+    --  of predefined equality (but only if there is also an overriding
+    --  user-defined equality function). The returned Renamed_Eq will be
+    --  passed to the corresponding parameter of Predefined_Primitive_Bodies.
+ 
     function Make_Tag_Assignment (N : Node_Id) return Node_Id;
     --  An object declaration that has an initialization for a tagged object
     --  requires a separate reassignment of the tag of the given type, because
*************** package Exp_Ch3 is
*** 163,166 ****
--- 191,205 ----
     --  clause the assignment is handled as part of the freezing of the object,
     --  see Check_Address_Clause.
  
+    procedure Predefined_Primitive_Eq_Body
+      (Tag_Typ     : Entity_Id;
+       Predef_List : List_Id;
+       Renamed_Eq  : Entity_Id);
+    --  Creates body for the predefined equality (and ineqality, if required) on
+    --  a tagged type Tag_Typ. If created they will be appended to Predef_List.
+    --
+    --  The spec for the equality function has been created by
+    --  Make_Predefined_Primitive_Eq_Spec; see there for description of
+    --  the Renamed_Eq parameter.
+ 
  end Exp_Ch3;
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch4.adb gcc-12.1.0/gcc/ada/exp_ch4.adb
*** gcc-11.3.0/gcc/ada/exp_ch4.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch4.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,77 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Exp_Aggr; use Exp_Aggr;
! with Exp_Atag; use Exp_Atag;
! with Exp_Ch3;  use Exp_Ch3;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_Ch7;  use Exp_Ch7;
! with Exp_Ch9;  use Exp_Ch9;
! with Exp_Disp; use Exp_Disp;
! with Exp_Fixd; use Exp_Fixd;
! with Exp_Intr; use Exp_Intr;
! with Exp_Pakd; use Exp_Pakd;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Inline;   use Inline;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Par_SCO;  use Par_SCO;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Cat;  use Sem_Cat;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch13; use Sem_Ch13;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Type; use Sem_Type;
! with Sem_Util; use Sem_Util;
! with Sem_Warn; use Sem_Warn;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with SCIL_LL;  use SCIL_LL;
! with Targparm; use Targparm;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Uintp;    use Uintp;
! with Urealp;   use Urealp;
! with Validsw;  use Validsw;
! with Warnsw;   use Warnsw;
  
  package body Exp_Ch4 is
  
--- 23,82 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Aggr;       use Exp_Aggr;
! with Exp_Atag;       use Exp_Atag;
! with Exp_Ch3;        use Exp_Ch3;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Ch9;        use Exp_Ch9;
! with Exp_Disp;       use Exp_Disp;
! with Exp_Fixd;       use Exp_Fixd;
! with Exp_Intr;       use Exp_Intr;
! with Exp_Pakd;       use Exp_Pakd;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Inline;         use Inline;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Par_SCO;        use Par_SCO;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with SCIL_LL;        use SCIL_LL;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
! with Urealp;         use Urealp;
! with Validsw;        use Validsw;
! with Warnsw;         use Warnsw;
  
  package body Exp_Ch4 is
  
*************** package body Exp_Ch4 is
*** 141,158 ****
     --  where we allow comparison of "out of range" values.
  
     function Expand_Composite_Equality
!      (Nod    : Node_Id;
!       Typ    : Entity_Id;
!       Lhs    : Node_Id;
!       Rhs    : Node_Id;
!       Bodies : List_Id) return Node_Id;
     --  Local recursive function used to expand equality for nested composite
!    --  types. Used by Expand_Record/Array_Equality, Bodies is a list on which
!    --  to attach bodies of local functions that are created in the process. It
!    --  is the responsibility of the caller to insert those bodies at the right
!    --  place. Nod provides the Sloc value for generated code. Lhs and Rhs are
!    --  the left and right sides for the comparison, and Typ is the type of the
!    --  objects to compare.
  
     procedure Expand_Concatenate (Cnode : Node_Id; Opnds : List_Id);
     --  Routine to expand concatenation of a sequence of two or more operands
--- 146,159 ----
     --  where we allow comparison of "out of range" values.
  
     function Expand_Composite_Equality
!      (Nod : Node_Id;
!       Typ : Entity_Id;
!       Lhs : Node_Id;
!       Rhs : Node_Id) return Node_Id;
     --  Local recursive function used to expand equality for nested composite
!    --  types. Used by Expand_Record/Array_Equality. Nod provides the Sloc value
!    --  for generated code. Lhs and Rhs are the left and right sides for the
!    --  comparison, and Typ is the type of the objects to compare.
  
     procedure Expand_Concatenate (Cnode : Node_Id; Opnds : List_Id);
     --  Routine to expand concatenation of a sequence of two or more operands
*************** package body Exp_Ch4 is
*** 172,187 ****
     --  routine is to find the real type by looking up the tree. We also
     --  determine if the operation must be rounded.
  
!    function Has_Inferable_Discriminants (N : Node_Id) return Boolean;
!    --  Ada 2005 (AI-216): A view of an Unchecked_Union object has inferable
!    --  discriminants if it has a constrained nominal type, unless the object
!    --  is a component of an enclosing Unchecked_Union object that is subject
!    --  to a per-object constraint and the enclosing object lacks inferable
!    --  discriminants.
!    --
!    --  An expression of an Unchecked_Union type has inferable discriminants
!    --  if it is either a name of an object with inferable discriminants or a
!    --  qualified expression whose subtype mark denotes a constrained subtype.
  
     procedure Insert_Dereference_Action (N : Node_Id);
     --  N is an expression whose type is an access. When the type of the
--- 173,181 ----
     --  routine is to find the real type by looking up the tree. We also
     --  determine if the operation must be rounded.
  
!    function Get_Size_For_Range (Lo, Hi : Uint) return Uint;
!    --  Return the size of a small signed integer type covering Lo .. Hi, the
!    --  main goal being to return a size lower than that of standard types.
  
     procedure Insert_Dereference_Action (N : Node_Id);
     --  N is an expression whose type is an access. When the type of the
*************** package body Exp_Ch4 is
*** 618,623 ****
--- 612,618 ----
             and then Is_Class_Wide_Type (DesigT)
             and then Tagged_Type_Expansion
             and then not Scope_Suppress.Suppress (Accessibility_Check)
+            and then not No_Dynamic_Accessibility_Checks_Enabled (Ref)
             and then
               (Type_Access_Level (Etype (Exp)) > Type_Access_Level (PtrT)
                 or else
*************** package body Exp_Ch4 is
*** 733,740 ****
  
              Append_To (Stmts,
                Make_Raise_Program_Error (Loc,
!                 Condition => New_Occurrence_Of (Standard_True, Loc),
!                 Reason    => PE_Accessibility_Check_Failed));
  
              --  Step 2: Create the accessibility comparison
  
--- 728,734 ----
  
              Append_To (Stmts,
                Make_Raise_Program_Error (Loc,
!                 Reason => PE_Accessibility_Check_Failed));
  
              --  Step 2: Create the accessibility comparison
  
*************** package body Exp_Ch4 is
*** 770,777 ****
              Cond :=
                Make_Op_Gt (Loc,
                  Left_Opnd  => Cond,
!                 Right_Opnd =>
!                   Make_Integer_Literal (Loc, Type_Access_Level (PtrT)));
  
              --  Due to the complexity and side effects of the check, utilize an
              --  if statement instead of the regular Program_Error circuitry.
--- 764,770 ----
              Cond :=
                Make_Op_Gt (Loc,
                  Left_Opnd  => Cond,
!                 Right_Opnd => Accessibility_Level (N, Dynamic_Level));
  
              --  Due to the complexity and side effects of the check, utilize an
              --  if statement instead of the regular Program_Error circuitry.
*************** package body Exp_Ch4 is
*** 1169,1174 ****
--- 1162,1170 ----
           --  secondary stack). In that case, the object will be moved, so we do
           --  want to Adjust. However, if it's a nonlimited build-in-place
           --  function call, Adjust is not wanted.
+          --
+          --  Needs_Finalization (DesigT) can differ from Needs_Finalization (T)
+          --  if one of the two types is class-wide, and the other is not.
  
           if Needs_Finalization (DesigT)
             and then Needs_Finalization (T)
*************** package body Exp_Ch4 is
*** 1545,1558 ****
     --          and then
     --        (B'length (1) = 0 or else B'length (2) = 0)
     --     then
!    --        return True;    -- RM 4.5.2(22)
     --     end if;
  
     --     if A'length (1) /= B'length (1)
     --               or else
     --           A'length (2) /= B'length (2)
     --     then
!    --        return False;   -- RM 4.5.2(23)
     --     end if;
  
     --     declare
--- 1541,1554 ----
     --          and then
     --        (B'length (1) = 0 or else B'length (2) = 0)
     --     then
!    --        return true;    -- RM 4.5.2(22)
     --     end if;
  
     --     if A'length (1) /= B'length (1)
     --               or else
     --           A'length (2) /= B'length (2)
     --     then
!    --        return false;   -- RM 4.5.2(23)
     --     end if;
  
     --     declare
*************** package body Exp_Ch4 is
*** 1625,1632 ****
        function Arr_Attr
          (Arr : Entity_Id;
           Nam : Name_Id;
!          Num : Int) return Node_Id;
!       --  This builds the attribute reference Arr'Nam (Expr)
  
        function Component_Equality (Typ : Entity_Id) return Node_Id;
        --  Create one statement to compare corresponding components, designated
--- 1621,1628 ----
        function Arr_Attr
          (Arr : Entity_Id;
           Nam : Name_Id;
!          Dim : Pos) return Node_Id;
!       --  This builds the attribute reference Arr'Nam (Dim)
  
        function Component_Equality (Typ : Entity_Id) return Node_Id;
        --  Create one statement to compare corresponding components, designated
*************** package body Exp_Ch4 is
*** 1637,1647 ****
        --  for that argument in the corresponding function formal
  
        function Handle_One_Dimension
!         (N     : Int;
           Index : Node_Id) return Node_Id;
        --  This procedure returns the following code
        --
        --    declare
        --       Bn : Index_T := B'First (N);
        --    begin
        --       loop
--- 1633,1644 ----
        --  for that argument in the corresponding function formal
  
        function Handle_One_Dimension
!         (N     : Pos;
           Index : Node_Id) return Node_Id;
        --  This procedure returns the following code
        --
        --    declare
+       --       An : Index_T := A'First (N);
        --       Bn : Index_T := B'First (N);
        --    begin
        --       loop
*************** package body Exp_Ch4 is
*** 1691,1704 ****
        function Arr_Attr
          (Arr : Entity_Id;
           Nam : Name_Id;
!          Num : Int) return Node_Id
        is
        begin
           return
             Make_Attribute_Reference (Loc,
               Attribute_Name => Nam,
               Prefix         => New_Occurrence_Of (Arr, Loc),
!              Expressions    => New_List (Make_Integer_Literal (Loc, Num)));
        end Arr_Attr;
  
        ------------------------
--- 1688,1701 ----
        function Arr_Attr
          (Arr : Entity_Id;
           Nam : Name_Id;
!          Dim : Pos) return Node_Id
        is
        begin
           return
             Make_Attribute_Reference (Loc,
               Attribute_Name => Nam,
               Prefix         => New_Occurrence_Of (Arr, Loc),
!              Expressions    => New_List (Make_Integer_Literal (Loc, Dim)));
        end Arr_Attr;
  
        ------------------------
*************** package body Exp_Ch4 is
*** 1722,1729 ****
               Prefix      => Make_Identifier (Loc, Chars (B)),
               Expressions => Index_List2);
  
!          Test := Expand_Composite_Equality
!                    (Nod, Component_Type (Typ), L, R, Decls);
  
           --  If some (sub)component is an unchecked_union, the whole operation
           --  will raise program error.
--- 1719,1725 ----
               Prefix      => Make_Identifier (Loc, Chars (B)),
               Expressions => Index_List2);
  
!          Test := Expand_Composite_Equality (Nod, Component_Type (Typ), L, R);
  
           --  If some (sub)component is an unchecked_union, the whole operation
           --  will raise program error.
*************** package body Exp_Ch4 is
*** 1786,1792 ****
        ---------------------------
  
        function Handle_One_Dimension
!         (N     : Int;
           Index : Node_Id) return Node_Id
        is
           Need_Separate_Indexes : constant Boolean :=
--- 1782,1788 ----
        ---------------------------
  
        function Handle_One_Dimension
!         (N     : Pos;
           Index : Node_Id) return Node_Id
        is
           Need_Separate_Indexes : constant Boolean :=
*************** package body Exp_Ch4 is
*** 1902,1942 ****
        -----------------------
  
        function Test_Empty_Arrays return Node_Id is
!          Alist : Node_Id;
!          Blist : Node_Id;
! 
!          Atest : Node_Id;
!          Btest : Node_Id;
  
        begin
-          Alist := Empty;
-          Blist := Empty;
           for J in 1 .. Number_Dimensions (Ltyp) loop
!             Atest :=
                Make_Op_Eq (Loc,
                  Left_Opnd  => Arr_Attr (A, Name_Length, J),
!                 Right_Opnd => Make_Integer_Literal (Loc, 0));
  
!             Btest :=
                Make_Op_Eq (Loc,
                  Left_Opnd  => Arr_Attr (B, Name_Length, J),
!                 Right_Opnd => Make_Integer_Literal (Loc, 0));
! 
!             if No (Alist) then
!                Alist := Atest;
!                Blist := Btest;
! 
!             else
!                Alist :=
!                  Make_Or_Else (Loc,
!                    Left_Opnd  => Relocate_Node (Alist),
!                    Right_Opnd => Atest);
! 
!                Blist :=
!                  Make_Or_Else (Loc,
!                    Left_Opnd  => Relocate_Node (Blist),
!                    Right_Opnd => Btest);
!             end if;
           end loop;
  
           return
--- 1898,1917 ----
        -----------------------
  
        function Test_Empty_Arrays return Node_Id is
!          Alist : Node_Id := Empty;
!          Blist : Node_Id := Empty;
  
        begin
           for J in 1 .. Number_Dimensions (Ltyp) loop
!             Evolve_Or_Else (Alist,
                Make_Op_Eq (Loc,
                  Left_Opnd  => Arr_Attr (A, Name_Length, J),
!                 Right_Opnd => Make_Integer_Literal (Loc, Uint_0)));
  
!             Evolve_Or_Else (Blist,
                Make_Op_Eq (Loc,
                  Left_Opnd  => Arr_Attr (B, Name_Length, J),
!                 Right_Opnd => Make_Integer_Literal (Loc, Uint_0)));
           end loop;
  
           return
*************** package body Exp_Ch4 is
*** 1950,1974 ****
        -----------------------------
  
        function Test_Lengths_Correspond return Node_Id is
!          Result : Node_Id;
!          Rtest  : Node_Id;
  
        begin
-          Result := Empty;
           for J in 1 .. Number_Dimensions (Ltyp) loop
!             Rtest :=
                Make_Op_Ne (Loc,
                  Left_Opnd  => Arr_Attr (A, Name_Length, J),
!                 Right_Opnd => Arr_Attr (B, Name_Length, J));
! 
!             if No (Result) then
!                Result := Rtest;
!             else
!                Result :=
!                  Make_Or_Else (Loc,
!                    Left_Opnd  => Relocate_Node (Result),
!                    Right_Opnd => Rtest);
!             end if;
           end loop;
  
           return Result;
--- 1925,1938 ----
        -----------------------------
  
        function Test_Lengths_Correspond return Node_Id is
!          Result : Node_Id := Empty;
  
        begin
           for J in 1 .. Number_Dimensions (Ltyp) loop
!             Evolve_Or_Else (Result,
                Make_Op_Ne (Loc,
                  Left_Opnd  => Arr_Attr (A, Name_Length, J),
!                 Right_Opnd => Arr_Attr (B, Name_Length, J)));
           end loop;
  
           return Result;
*************** package body Exp_Ch4 is
*** 2020,2033 ****
          and then Ltyp = Rtyp
          and then Is_Constrained (Ltyp)
          and then Number_Dimensions (Ltyp) = 1
!         and then Nkind (First_Idx) = N_Range
!         and then Compile_Time_Known_Value (Low_Bound (First_Idx))
!         and then Compile_Time_Known_Value (High_Bound (First_Idx))
!         and then Expr_Value (High_Bound (First_Idx)) =
!                                          Expr_Value (Low_Bound (First_Idx)) + 1
        then
           declare
              Ctyp         : constant Entity_Id := Component_Type (Ltyp);
              L, R         : Node_Id;
              TestL, TestH : Node_Id;
  
--- 1984,1999 ----
          and then Ltyp = Rtyp
          and then Is_Constrained (Ltyp)
          and then Number_Dimensions (Ltyp) = 1
!         and then Compile_Time_Known_Bounds (Ltyp)
!         and then Expr_Value (Type_High_Bound (Etype (First_Idx))) =
!                    Expr_Value (Type_Low_Bound (Etype (First_Idx))) + 1
        then
           declare
              Ctyp         : constant Entity_Id := Component_Type (Ltyp);
+             Low_B        : constant Node_Id :=
+               Type_Low_Bound (Etype (First_Idx));
+             High_B       : constant Node_Id :=
+               Type_High_Bound (Etype (First_Idx));
              L, R         : Node_Id;
              TestL, TestH : Node_Id;
  
*************** package body Exp_Ch4 is
*** 2035,2064 ****
              L :=
                Make_Indexed_Component (Loc,
                  Prefix      => New_Copy_Tree (New_Lhs),
!                 Expressions =>
!                   New_List (New_Copy_Tree (Low_Bound (First_Idx))));
  
              R :=
                Make_Indexed_Component (Loc,
                  Prefix      => New_Copy_Tree (New_Rhs),
!                 Expressions =>
!                   New_List (New_Copy_Tree (Low_Bound (First_Idx))));
  
!             TestL := Expand_Composite_Equality (Nod, Ctyp, L, R, Bodies);
  
              L :=
                Make_Indexed_Component (Loc,
                  Prefix      => New_Lhs,
!                 Expressions =>
!                   New_List (New_Copy_Tree (High_Bound (First_Idx))));
  
              R :=
                Make_Indexed_Component (Loc,
                  Prefix      => New_Rhs,
!                 Expressions =>
!                   New_List (New_Copy_Tree (High_Bound (First_Idx))));
  
!             TestH := Expand_Composite_Equality (Nod, Ctyp, L, R, Bodies);
  
              return
                Make_And_Then (Loc, Left_Opnd => TestL, Right_Opnd => TestH);
--- 2001,2026 ----
              L :=
                Make_Indexed_Component (Loc,
                  Prefix      => New_Copy_Tree (New_Lhs),
!                 Expressions => New_List (New_Copy_Tree (Low_B)));
  
              R :=
                Make_Indexed_Component (Loc,
                  Prefix      => New_Copy_Tree (New_Rhs),
!                 Expressions => New_List (New_Copy_Tree (Low_B)));
  
!             TestL := Expand_Composite_Equality (Nod, Ctyp, L, R);
  
              L :=
                Make_Indexed_Component (Loc,
                  Prefix      => New_Lhs,
!                 Expressions => New_List (New_Copy_Tree (High_B)));
  
              R :=
                Make_Indexed_Component (Loc,
                  Prefix      => New_Rhs,
!                 Expressions => New_List (New_Copy_Tree (High_B)));
  
!             TestH := Expand_Composite_Equality (Nod, Ctyp, L, R);
  
              return
                Make_And_Then (Loc, Left_Opnd => TestL, Right_Opnd => TestH);
*************** package body Exp_Ch4 is
*** 2253,2261 ****
        LLIB : constant Entity_Id := Base_Type (Standard_Long_Long_Integer);
        --  Entity for Long_Long_Integer'Base
  
-       Check : constant Overflow_Mode_Type := Overflow_Check_Mode;
-       --  Current overflow checking mode
- 
        procedure Set_True;
        procedure Set_False;
        --  These procedures rewrite N with an occurrence of Standard_True or
--- 2215,2220 ----
*************** package body Exp_Ch4 is
*** 2284,2300 ****
     --  Start of processing for Expand_Compare_Minimize_Eliminate_Overflow
  
     begin
-       --  Nothing to do unless we have a comparison operator with operands
-       --  that are signed integer types, and we are operating in either
-       --  MINIMIZED or ELIMINATED overflow checking mode.
- 
-       if Nkind (N) not in N_Op_Compare
-         or else Check not in Minimized_Or_Eliminated
-         or else not Is_Signed_Integer_Type (Etype (Left_Opnd (N)))
-       then
-          return;
-       end if;
- 
        --  OK, this is the case we are interested in. First step is to process
        --  our operands using the Minimize_Eliminate circuitry which applies
        --  this processing to the two operand subtrees.
--- 2243,2248 ----
*************** package body Exp_Ch4 is
*** 2308,2314 ****
        --  We can only do this if we in fact have full range information (which
        --  won't be the case if either operand is bignum at this stage).
  
!       if Llo /= No_Uint and then Rlo /= No_Uint then
           case N_Op_Compare (Nkind (N)) is
              when N_Op_Eq =>
                 if Llo = Lhi and then Rlo = Rhi and then Llo = Rlo then
--- 2256,2262 ----
        --  We can only do this if we in fact have full range information (which
        --  won't be the case if either operand is bignum at this stage).
  
!       if Present (Llo) and then Present (Rlo) then
           case N_Op_Compare (Nkind (N)) is
              when N_Op_Eq =>
                 if Llo = Lhi and then Rlo = Rhi and then Llo = Rlo then
*************** package body Exp_Ch4 is
*** 2485,2502 ****
     --  case because it is not possible to respect normal Ada visibility rules.
  
     function Expand_Composite_Equality
!      (Nod    : Node_Id;
!       Typ    : Entity_Id;
!       Lhs    : Node_Id;
!       Rhs    : Node_Id;
!       Bodies : List_Id) return Node_Id
     is
        Loc       : constant Source_Ptr := Sloc (Nod);
        Full_Type : Entity_Id;
        Eq_Op     : Entity_Id;
  
-    --  Start of processing for Expand_Composite_Equality
- 
     begin
        if Is_Private_Type (Typ) then
           Full_Type := Underlying_Type (Typ);
--- 2433,2447 ----
     --  case because it is not possible to respect normal Ada visibility rules.
  
     function Expand_Composite_Equality
!      (Nod : Node_Id;
!       Typ : Entity_Id;
!       Lhs : Node_Id;
!       Rhs : Node_Id) return Node_Id
     is
        Loc       : constant Source_Ptr := Sloc (Nod);
        Full_Type : Entity_Id;
        Eq_Op     : Entity_Id;
  
     begin
        if Is_Private_Type (Typ) then
           Full_Type := Underlying_Type (Typ);
*************** package body Exp_Ch4 is
*** 2523,2603 ****
           Full_Type := Underlying_Type (Full_Type);
        end if;
  
-       --  Case of array types
- 
-       if Is_Array_Type (Full_Type) then
- 
-          --  If the operand is an elementary type other than a floating-point
-          --  type, then we can simply use the built-in block bitwise equality,
-          --  since the predefined equality operators always apply and bitwise
-          --  equality is fine for all these cases.
- 
-          if Is_Elementary_Type (Component_Type (Full_Type))
-            and then not Is_Floating_Point_Type (Component_Type (Full_Type))
-          then
-             return Make_Op_Eq (Loc, Left_Opnd => Lhs, Right_Opnd => Rhs);
- 
-          --  For composite component types, and floating-point types, use the
-          --  expansion. This deals with tagged component types (where we use
-          --  the applicable equality routine) and floating-point (where we
-          --  need to worry about negative zeroes), and also the case of any
-          --  composite type recursively containing such fields.
- 
-          else
-             declare
-                Comp_Typ : Entity_Id;
-                Hi       : Node_Id;
-                Indx     : Node_Id;
-                Ityp     : Entity_Id;
-                Lo       : Node_Id;
- 
-             begin
-                --  Do the comparison in the type (or its full view) and not in
-                --  its unconstrained base type, because the latter operation is
-                --  more complex and would also require an unchecked conversion.
- 
-                if Is_Private_Type (Typ) then
-                   Comp_Typ := Underlying_Type (Typ);
-                else
-                   Comp_Typ := Typ;
-                end if;
- 
-                --  Except for the case where the bounds of the type depend on a
-                --  discriminant, or else we would run into scoping issues.
- 
-                Indx := First_Index (Comp_Typ);
-                while Present (Indx) loop
-                   Ityp := Etype (Indx);
- 
-                   Lo := Type_Low_Bound (Ityp);
-                   Hi := Type_High_Bound (Ityp);
- 
-                   if (Nkind (Lo) = N_Identifier
-                        and then Ekind (Entity (Lo)) = E_Discriminant)
-                     or else
-                      (Nkind (Hi) = N_Identifier
-                        and then Ekind (Entity (Hi)) = E_Discriminant)
-                   then
-                      Comp_Typ := Full_Type;
-                      exit;
-                   end if;
- 
-                   Next_Index (Indx);
-                end loop;
- 
-                return Expand_Array_Equality (Nod, Lhs, Rhs, Bodies, Comp_Typ);
-             end;
-          end if;
- 
        --  Case of tagged record types
  
!       elsif Is_Tagged_Type (Full_Type) then
           Eq_Op := Find_Primitive_Eq (Typ);
           pragma Assert (Present (Eq_Op));
  
           return
             Make_Function_Call (Loc,
!              Name => New_Occurrence_Of (Eq_Op, Loc),
               Parameter_Associations =>
                 New_List
                   (Unchecked_Convert_To (Etype (First_Formal (Eq_Op)), Lhs),
--- 2468,2482 ----
           Full_Type := Underlying_Type (Full_Type);
        end if;
  
        --  Case of tagged record types
  
!       if Is_Tagged_Type (Full_Type) then
           Eq_Op := Find_Primitive_Eq (Typ);
           pragma Assert (Present (Eq_Op));
  
           return
             Make_Function_Call (Loc,
!              Name                   => New_Occurrence_Of (Eq_Op, Loc),
               Parameter_Associations =>
                 New_List
                   (Unchecked_Convert_To (Etype (First_Formal (Eq_Op)), Lhs),
*************** package body Exp_Ch4 is
*** 2620,2626 ****
                 begin
                    return
                      Make_Function_Call (Loc,
!                       Name                  => New_Occurrence_Of (Eq_Op, Loc),
                        Parameter_Associations => New_List (
                          OK_Convert_To (T, Lhs),
                          OK_Convert_To (T, Rhs)));
--- 2499,2505 ----
                 begin
                    return
                      Make_Function_Call (Loc,
!                       Name                   => New_Occurrence_Of (Eq_Op, Loc),
                        Parameter_Associations => New_List (
                          OK_Convert_To (T, Lhs),
                          OK_Convert_To (T, Rhs)));
*************** package body Exp_Ch4 is
*** 2779,2788 ****
              end;
  
           else
!             return Expand_Record_Equality (Nod, Full_Type, Lhs, Rhs, Bodies);
           end if;
  
!       --  Non-composite types (always use predefined equality)
  
        else
           return Make_Op_Eq (Loc, Left_Opnd => Lhs, Right_Opnd => Rhs);
--- 2658,2667 ----
              end;
  
           else
!             return Expand_Record_Equality (Nod, Full_Type, Lhs, Rhs);
           end if;
  
!       --  Case of non-record types (always use predefined equality)
  
        else
           return Make_Op_Eq (Loc, Left_Opnd => Lhs, Right_Opnd => Rhs);
*************** package body Exp_Ch4 is
*** 2816,2824 ****
        --  lengths of operands. The choice of this type is a little subtle and
        --  is discussed in a separate section at the start of the body code.
  
-       Concatenation_Error : exception;
-       --  Raised if concatenation is sure to raise a CE
- 
        Result_May_Be_Null : Boolean := True;
        --  Reset to False if at least one operand is encountered which is known
        --  at compile time to be non-null. Used for handling the special case
--- 2695,2700 ----
*************** package body Exp_Ch4 is
*** 3035,3050 ****
        if Is_Enumeration_Type (Ityp) then
           Artyp := Standard_Integer;
  
-       --  If index type is Positive, we use the standard unsigned type, to give
-       --  more room on the top of the range, obviating the need for an overflow
-       --  check when creating the upper bound. This is needed to avoid junk
-       --  overflow checks in the common case of String types.
- 
-       --  ??? Disabled for now
- 
-       --  elsif Istyp = Standard_Positive then
-       --     Artyp := Standard_Unsigned;
- 
        --  For modular types, we use a 32-bit modular type for types whose size
        --  is in the range 1-31 bits. For 32-bit unsigned types, we use the
        --  identity type, and for larger unsigned types we use a 64-bit type.
--- 2911,2916 ----
*************** package body Exp_Ch4 is
*** 3591,3597 ****
        --  Catch the static out of range case now
  
        if Raises_Constraint_Error (High_Bound) then
!          raise Concatenation_Error;
        end if;
  
        --  Now we will generate the assignments to do the actual concatenation
--- 3457,3472 ----
        --  Catch the static out of range case now
  
        if Raises_Constraint_Error (High_Bound) then
!          --  Kill warning generated for the declaration of the static out of
!          --  range high bound, and instead generate a Constraint_Error with
!          --  an appropriate specific message.
! 
!          Kill_Dead_Code (Declaration_Node (Entity (High_Bound)));
!          Apply_Compile_Time_Constraint_Error
!            (N      => Cnode,
!             Msg    => "concatenation result upper bound out of range??",
!             Reason => CE_Range_Check_Failed);
!          return;
        end if;
  
        --  Now we will generate the assignments to do the actual concatenation
*************** package body Exp_Ch4 is
*** 3760,3778 ****
        pragma Assert (Present (Result));
        Rewrite (Cnode, Result);
        Analyze_And_Resolve (Cnode, Atyp);
- 
-    exception
-       when Concatenation_Error =>
- 
-          --  Kill warning generated for the declaration of the static out of
-          --  range high bound, and instead generate a Constraint_Error with
-          --  an appropriate specific message.
- 
-          Kill_Dead_Code (Declaration_Node (Entity (High_Bound)));
-          Apply_Compile_Time_Constraint_Error
-            (N      => Cnode,
-             Msg    => "concatenation result upper bound out of range??",
-             Reason => CE_Range_Check_Failed);
     end Expand_Concatenate;
  
     ---------------------------------------------------
--- 3635,3640 ----
*************** package body Exp_Ch4 is
*** 3803,3809 ****
        --  Bounds in Minimize calls, not used currently
  
        LLIB : constant Entity_Id := Base_Type (Standard_Long_Long_Integer);
!       --  Entity for Long_Long_Integer'Base (Standard should export this???)
  
     begin
        Minimize_Eliminate_Overflows (Lop, Lo, Hi, Top_Level => False);
--- 3665,3671 ----
        --  Bounds in Minimize calls, not used currently
  
        LLIB : constant Entity_Id := Base_Type (Standard_Long_Long_Integer);
!       --  Entity for Long_Long_Integer'Base
  
     begin
        Minimize_Eliminate_Overflows (Lop, Lo, Hi, Top_Level => False);
*************** package body Exp_Ch4 is
*** 4282,4288 ****
              --  larger type for the operands, to prevent spurious constraint
              --  errors on large legal literals of the type.
  
!             if Modulus (Etype (N)) > UI_From_Int (Int (Integer'Last)) then
                 Target_Type := Standard_Long_Long_Integer;
              else
                 Target_Type := Standard_Integer;
--- 4144,4150 ----
              --  larger type for the operands, to prevent spurious constraint
              --  errors on large legal literals of the type.
  
!             if Modulus (Etype (N)) > Int (Integer'Last) then
                 Target_Type := Standard_Long_Long_Integer;
              else
                 Target_Type := Standard_Integer;
*************** package body Exp_Ch4 is
*** 4483,4602 ****
        ------------------------------
  
        function Size_In_Storage_Elements (E : Entity_Id) return Node_Id is
        begin
           --  Logically this just returns E'Max_Size_In_Storage_Elements.
!          --  However, the reason for the existence of this function is
!          --  to construct a test for sizes too large, which means near the
!          --  32-bit limit on a 32-bit machine, and precisely the trouble
!          --  is that we get overflows when sizes are greater than 2**31.
  
           --  So what we end up doing for array types is to use the expression:
  
           --    number-of-elements * component_type'Max_Size_In_Storage_Elements
  
           --  which avoids this problem. All this is a bit bogus, but it does
!          --  mean we catch common cases of trying to allocate arrays that
!          --  are too large, and which in the absence of a check results in
           --  undetected chaos ???
  
!          --  Note in particular that this is a pessimistic estimate in the
!          --  case of packed array types, where an array element might occupy
!          --  just a fraction of a storage element???
! 
!          declare
!             Idx : Node_Id := First_Index (E);
!             Len : Node_Id;
!             Res : Node_Id := Empty;
! 
!          begin
!             for J in 1 .. Number_Dimensions (E) loop
  
!                if not Is_Modular_Integer_Type (Etype (Idx)) then
!                   Len :=
!                     Make_Attribute_Reference (Loc,
!                       Prefix         => New_Occurrence_Of (E, Loc),
!                       Attribute_Name => Name_Length,
!                       Expressions    => New_List
!                                           (Make_Integer_Literal (Loc, J)));
  
!                --  For indexes that are modular types we cannot generate code
!                --  to compute 'Length since for large arrays 'Last -'First + 1
!                --  causes overflow; therefore we compute 'Last - 'First (which
!                --  is not the exact number of components but it is valid for
!                --  the purpose of this runtime check on 32-bit targets).
  
!                else
!                   declare
!                      Len_Minus_1_Expr : Node_Id;
!                      Test_Gt          : Node_Id;
  
!                   begin
!                      Test_Gt :=
!                        Make_Op_Gt (Loc,
!                          Make_Attribute_Reference (Loc,
!                            Prefix         => New_Occurrence_Of (E, Loc),
!                            Attribute_Name => Name_Last,
!                            Expressions    =>
!                              New_List (Make_Integer_Literal (Loc, J))),
!                          Make_Attribute_Reference (Loc,
!                            Prefix         => New_Occurrence_Of (E, Loc),
!                            Attribute_Name => Name_First,
!                            Expressions    =>
!                              New_List (Make_Integer_Literal (Loc, J))));
  
!                      Len_Minus_1_Expr :=
!                        Convert_To (Standard_Unsigned,
!                          Make_Op_Subtract (Loc,
!                            Make_Attribute_Reference (Loc,
!                              Prefix => New_Occurrence_Of (E, Loc),
!                              Attribute_Name => Name_Last,
!                              Expressions =>
!                                New_List
!                                  (Make_Integer_Literal (Loc, J))),
!                            Make_Attribute_Reference (Loc,
!                              Prefix => New_Occurrence_Of (E, Loc),
!                              Attribute_Name => Name_First,
!                              Expressions =>
!                                New_List
!                                  (Make_Integer_Literal (Loc, J)))));
  
!                      --  Handle superflat arrays, i.e. arrays with such bounds
!                      --  as 4 .. 2, to ensure that the result is correct.
  
!                      --  Generate:
!                      --    (if X'Last > X'First then X'Last - X'First else 0)
  
!                      Len :=
!                        Make_If_Expression (Loc,
!                          Expressions => New_List (
!                            Test_Gt,
!                            Len_Minus_1_Expr,
!                            Make_Integer_Literal (Loc, Uint_0)));
!                   end;
!                end if;
  
!                if J = 1 then
!                   Res := Len;
  
!                else
!                   pragma Assert (Present (Res));
!                   Res :=
!                     Make_Op_Multiply (Loc,
!                       Left_Opnd  => Res,
!                       Right_Opnd => Len);
!                end if;
  
!                Next_Index (Idx);
!             end loop;
  
!             return
!               Make_Op_Multiply (Loc,
!                 Left_Opnd  => Len,
!                 Right_Opnd =>
!                   Make_Attribute_Reference (Loc,
!                     Prefix => New_Occurrence_Of (Component_Type (E), Loc),
!                     Attribute_Name => Name_Max_Size_In_Storage_Elements));
!          end;
        end Size_In_Storage_Elements;
  
        --  Local variables
--- 4345,4454 ----
        ------------------------------
  
        function Size_In_Storage_Elements (E : Entity_Id) return Node_Id is
+          Idx : Node_Id := First_Index (E);
+          Len : Node_Id;
+          Res : Node_Id := Empty;
+ 
        begin
           --  Logically this just returns E'Max_Size_In_Storage_Elements.
!          --  However, the reason for the existence of this function is to
!          --  construct a test for sizes too large, which means near the 32-bit
!          --  limit on a 32-bit machine, and precisely the trouble is that we
!          --  get overflows when sizes are greater than 2**31.
  
           --  So what we end up doing for array types is to use the expression:
  
           --    number-of-elements * component_type'Max_Size_In_Storage_Elements
  
           --  which avoids this problem. All this is a bit bogus, but it does
!          --  mean we catch common cases of trying to allocate arrays that are
!          --  too large, and which in the absence of a check results in
           --  undetected chaos ???
  
!          for J in 1 .. Number_Dimensions (E) loop
  
!             if not Is_Modular_Integer_Type (Etype (Idx)) then
!                Len :=
!                  Make_Attribute_Reference (Loc,
!                    Prefix         => New_Occurrence_Of (E, Loc),
!                    Attribute_Name => Name_Length,
!                    Expressions    => New_List (Make_Integer_Literal (Loc, J)));
  
!             --  For indexes that are modular types we cannot generate code to
!             --  compute 'Length since for large arrays 'Last -'First + 1 causes
!             --  overflow; therefore we compute 'Last - 'First (which is not the
!             --  exact number of components but it is valid for the purpose of
!             --  this runtime check on 32-bit targets).
  
!             else
!                declare
!                   Len_Minus_1_Expr : Node_Id;
!                   Test_Gt          : Node_Id;
  
!                begin
!                   Test_Gt :=
!                     Make_Op_Gt (Loc,
!                       Make_Attribute_Reference (Loc,
!                         Prefix         => New_Occurrence_Of (E, Loc),
!                         Attribute_Name => Name_Last,
!                         Expressions    =>
!                           New_List (Make_Integer_Literal (Loc, J))),
!                       Make_Attribute_Reference (Loc,
!                         Prefix         => New_Occurrence_Of (E, Loc),
!                         Attribute_Name => Name_First,
!                         Expressions    =>
!                           New_List (Make_Integer_Literal (Loc, J))));
  
!                   Len_Minus_1_Expr :=
!                     Convert_To (Standard_Unsigned,
!                       Make_Op_Subtract (Loc,
!                         Make_Attribute_Reference (Loc,
!                           Prefix => New_Occurrence_Of (E, Loc),
!                           Attribute_Name => Name_Last,
!                           Expressions =>
!                             New_List (Make_Integer_Literal (Loc, J))),
!                         Make_Attribute_Reference (Loc,
!                           Prefix => New_Occurrence_Of (E, Loc),
!                           Attribute_Name => Name_First,
!                           Expressions =>
!                             New_List (Make_Integer_Literal (Loc, J)))));
  
!                   --  Handle superflat arrays, i.e. arrays with such bounds as
!                   --  4 .. 2, to ensure that the result is correct.
  
!                   --  Generate:
!                   --    (if X'Last > X'First then X'Last - X'First else 0)
  
!                   Len :=
!                     Make_If_Expression (Loc,
!                       Expressions => New_List (
!                         Test_Gt,
!                         Len_Minus_1_Expr,
!                         Make_Integer_Literal (Loc, Uint_0)));
!                end;
!             end if;
  
!             if J = 1 then
!                Res := Len;
  
!             else
!                pragma Assert (Present (Res));
!                Res :=
!                  Make_Op_Multiply (Loc,
!                    Left_Opnd  => Res,
!                    Right_Opnd => Len);
!             end if;
  
!             Next_Index (Idx);
!          end loop;
  
!          return
!            Make_Op_Multiply (Loc,
!              Left_Opnd  => Len,
!              Right_Opnd =>
!                Make_Attribute_Reference (Loc,
!                  Prefix => New_Occurrence_Of (Component_Type (E), Loc),
!                  Attribute_Name => Name_Max_Size_In_Storage_Elements));
        end Size_In_Storage_Elements;
  
        --  Local variables
*************** package body Exp_Ch4 is
*** 4620,4632 ****
                         and then Nkind (Associated_Node_For_Itype (PtrT)) =
                                    N_Object_Declaration)
        then
!          Error_Msg_N ("??use of an anonymous access type allocator", N);
        end if;
  
        --  RM E.2.2(17). We enforce that the expected type of an allocator
!       --  shall not be a remote access-to-class-wide-limited-private type
! 
!       --  Why is this being done at expansion time, seems clearly wrong ???
  
        Validate_Remote_Access_To_Class_Wide_Type (N);
  
--- 4472,4485 ----
                         and then Nkind (Associated_Node_For_Itype (PtrT)) =
                                    N_Object_Declaration)
        then
!          Error_Msg_N ("?_a?use of an anonymous access type allocator", N);
        end if;
  
        --  RM E.2.2(17). We enforce that the expected type of an allocator
!       --  shall not be a remote access-to-class-wide-limited-private type.
!       --  We probably shouldn't be doing this legality check during expansion,
!       --  but this is only an issue for Annex E users, and is unlikely to be a
!       --  problem in practice.
  
        Validate_Remote_Access_To_Class_Wide_Type (N);
  
*************** package body Exp_Ch4 is
*** 4731,4737 ****
  
              else
                 Set_Procedure_To_Call (N,
!                  Find_Prim_Op (Etype (Pool), Name_Allocate));
              end if;
           end if;
        end if;
--- 4584,4590 ----
  
              else
                 Set_Procedure_To_Call (N,
!                  Find_Storage_Op (Etype (Pool), Name_Allocate));
              end if;
           end if;
        end if;
*************** package body Exp_Ch4 is
*** 5224,5231 ****
                    end if;
  
                    if Restriction_Active (No_Task_Hierarchy) then
!                      Append_To (Args,
!                        New_Occurrence_Of (RTE (RE_Library_Task_Level), Loc));
                    else
                       Append_To (Args,
                         New_Occurrence_Of
--- 5077,5084 ----
                    end if;
  
                    if Restriction_Active (No_Task_Hierarchy) then
!                      Append_To
!                        (Args, Make_Integer_Literal (Loc, Library_Task_Level));
                    else
                       Append_To (Args,
                         New_Occurrence_Of
*************** package body Exp_Ch4 is
*** 5308,5313 ****
--- 5161,5168 ----
                          if Ada_Version >= Ada_2005
                            and then
                              Ekind (Etype (Nod)) = E_Anonymous_Access_Type
+                           and then not
+                             No_Dynamic_Accessibility_Checks_Enabled (Nod)
                          then
                             Apply_Accessibility_Check
                               (Nod, Typ, Insert_Node => Nod);
*************** package body Exp_Ch4 is
*** 5568,5577 ****
        if Is_Copy_Type (Typ) then
           Target_Typ := Typ;
  
!          --  ??? Do not perform the optimization when the return statement is
!          --  within a predicate function, as this causes spurious errors. Could
!          --  this be a possible mismatch in handling this case somewhere else
!          --  in semantic analysis?
  
           Optimize_Return_Stmt :=
             Nkind (Par) = N_Simple_Return_Statement and then not In_Predicate;
--- 5423,5430 ----
        if Is_Copy_Type (Typ) then
           Target_Typ := Typ;
  
!          --  Do not perform the optimization when the return statement is
!          --  within a predicate function, as this causes spurious errors.
  
           Optimize_Return_Stmt :=
             Nkind (Par) = N_Simple_Return_Statement and then not In_Predicate;
*************** package body Exp_Ch4 is
*** 5813,5827 ****
  
           --  Avoid processing temporary function results multiple times when
           --  dealing with nested expression_with_actions.
  
!          elsif Nkind (Act) = N_Expression_With_Actions then
!             return Abandon;
! 
!          --  Do not process temporary function results in loops. This is done
!          --  by Expand_N_Loop_Statement and Build_Finalizer.
! 
!          elsif Nkind (Act) = N_Loop_Statement then
!             return Abandon;
           end if;
  
           return OK;
--- 5666,5679 ----
  
           --  Avoid processing temporary function results multiple times when
           --  dealing with nested expression_with_actions.
+          --  Similarly, do not process temporary function results in loops.
+          --  This is done by Expand_N_Loop_Statement and Build_Finalizer.
+          --  Note that we used to wrongly return Abandon instead of Skip here:
+          --  this is wrong since it means that we were ignoring lots of
+          --  relevant subsequent statements.
  
!          elsif Nkind (Act) in N_Expression_With_Actions | N_Loop_Statement then
!             return Skip;
           end if;
  
           return OK;
*************** package body Exp_Ch4 is
*** 5845,5851 ****
        --  Do not evaluate the expression when there are no actions because the
        --  expression_with_actions node will be replaced by the expression.
  
!       elsif No (Acts) or else Is_Empty_List (Acts) then
           null;
  
        --  Force the evaluation of the expression by capturing its value in a
--- 5697,5703 ----
        --  Do not evaluate the expression when there are no actions because the
        --  expression_with_actions node will be replaced by the expression.
  
!       elsif Is_Empty_List (Acts) then
           null;
  
        --  Force the evaluation of the expression by capturing its value in a
*************** package body Exp_Ch4 is
*** 5941,5949 ****
     --  Start of processing for Expand_N_If_Expression
  
     begin
!       --  Check for MINIMIZED/ELIMINATED overflow mode
  
!       if Minimized_Eliminated_Overflow_Check (N) then
           Apply_Arithmetic_Overflow_Check (N);
           return;
        end if;
--- 5793,5806 ----
     --  Start of processing for Expand_N_If_Expression
  
     begin
!       --  Check for MINIMIZED/ELIMINATED overflow mode.
!       --  Apply_Arithmetic_Overflow_Check will not deal with Then/Else_Actions
!       --  so skip this step if any actions are present.
  
!       if Minimized_Eliminated_Overflow_Check (N)
!         and then No (Then_Actions (N))
!         and then No (Else_Actions (N))
!       then
           Apply_Arithmetic_Overflow_Check (N);
           return;
        end if;
*************** package body Exp_Ch4 is
*** 6277,6282 ****
--- 6134,6179 ----
              return;
           end if;
  
+       --  For the sake of GNATcoverage, generate an intermediate temporary in
+       --  the case where the if-expression is a condition in an outer decision,
+       --  in order to make sure that no branch is shared between the decisions.
+ 
+       elsif Opt.Suppress_Control_Flow_Optimizations
+         and then Nkind (Original_Node (Parent (N))) in N_Case_Expression
+                                                      | N_Case_Statement
+                                                      | N_If_Expression
+                                                      | N_If_Statement
+                                                      | N_Goto_When_Statement
+                                                      | N_Loop_Statement
+                                                      | N_Return_When_Statement
+                                                      | N_Short_Circuit
+       then
+          declare
+             Cnn  : constant Entity_Id := Make_Temporary (Loc, 'C');
+             Acts : List_Id;
+ 
+          begin
+             --  Generate:
+             --    do
+             --       Cnn : constant Typ := N;
+             --    in Cnn end
+ 
+             Acts := New_List (
+               Make_Object_Declaration (Loc,
+                 Defining_Identifier => Cnn,
+                 Constant_Present    => True,
+                 Object_Definition   => New_Occurrence_Of (Typ, Loc),
+                 Expression          => Relocate_Node (N)));
+ 
+             Rewrite (N,
+               Make_Expression_With_Actions (Loc,
+                 Expression => New_Occurrence_Of (Cnn, Loc),
+                 Actions    => Acts));
+ 
+             Analyze_And_Resolve (N, Typ);
+             return;
+          end;
+ 
        --  If no actions then no expansion needed, gigi will handle it using the
        --  same approach as a C conditional expression.
  
*************** package body Exp_Ch4 is
*** 6295,6312 ****
           Set_Sloc (Parent (N), Loc);
        end if;
  
!       --  Make sure Then_Actions and Else_Actions are appropriately moved
!       --  to the new if statement.
! 
!       if Present (Then_Actions (N)) then
!          Insert_List_Before
!            (First (Then_Statements (New_If)), Then_Actions (N));
!       end if;
  
!       if Present (Else_Actions (N)) then
!          Insert_List_Before
!            (First (Else_Statements (New_If)), Else_Actions (N));
!       end if;
  
        Insert_Action (N, Decl);
        Insert_Action (N, New_If);
--- 6192,6201 ----
           Set_Sloc (Parent (N), Loc);
        end if;
  
!       --  Move Then_Actions and Else_Actions, if any, to the new if statement
  
!       Insert_List_Before (First (Then_Statements (New_If)), Then_Actions (N));
!       Insert_List_Before (First (Else_Statements (New_If)), Else_Actions (N));
  
        Insert_Action (N, Decl);
        Insert_Action (N, New_If);
*************** package body Exp_Ch4 is
*** 6355,6367 ****
              --  perspective.
  
              if Comes_From_Source (Obj_Ref) then
- 
-                --  Recover the actual object reference. There may be more cases
-                --  to consider???
- 
                 loop
                    if Nkind (Obj_Ref) in
!                        N_Type_Conversion | N_Unchecked_Type_Conversion
                    then
                       Obj_Ref := Expression (Obj_Ref);
                    else
--- 6244,6254 ----
              --  perspective.
  
              if Comes_From_Source (Obj_Ref) then
                 loop
                    if Nkind (Obj_Ref) in
!                        N_Type_Conversion |
!                        N_Unchecked_Type_Conversion |
!                        N_Qualified_Expression
                    then
                       Obj_Ref := Expression (Obj_Ref);
                    else
*************** package body Exp_Ch4 is
*** 6425,6432 ****
        --  type, then expand with a separate procedure. Note the use of the
        --  flag No_Minimize_Eliminate to prevent infinite recursion.
  
!       if Overflow_Check_Mode in Minimized_Or_Eliminated
!         and then Is_Signed_Integer_Type (Ltyp)
          and then not No_Minimize_Eliminate (N)
        then
           Expand_Membership_Minimize_Eliminate_Overflow (N);
--- 6312,6318 ----
        --  type, then expand with a separate procedure. Note the use of the
        --  flag No_Minimize_Eliminate to prevent infinite recursion.
  
!       if Minimized_Eliminated_Overflow_Check (Left_Opnd  (N))
          and then not No_Minimize_Eliminate (N)
        then
           Expand_Membership_Minimize_Eliminate_Overflow (N);
*************** package body Exp_Ch4 is
*** 6507,6514 ****
           begin
              --  If test is explicit x'First .. x'Last, replace by valid check
  
-             --  Could use some individual comments for this complex test ???
- 
              if Is_Scalar_Type (Ltyp)
  
                --  And left operand is X'First where X matches left operand
--- 6393,6398 ----
*************** package body Exp_Ch4 is
*** 6915,6925 ****
                       end if;
                    end if;
  
                    --  If a conversion of the anonymous access value to the
                    --  tested type would be illegal, then the result is False.
  
!                   if not Valid_Conversion
!                            (Lop, Rtyp, Lop, Report_Errs => False)
                    then
                       Rewrite (N, New_Occurrence_Of (Standard_False, Loc));
                       Analyze_And_Resolve (N, Restyp);
--- 6799,6824 ----
                       end if;
                    end if;
  
+                   --  When restriction No_Dynamic_Accessibility_Checks is in
+                   --  effect, expand the membership test to a static value
+                   --  since we cannot rely on dynamic levels.
+ 
+                   if No_Dynamic_Accessibility_Checks_Enabled (Lop) then
+                      if Static_Accessibility_Level
+                           (Lop, Object_Decl_Level)
+                             > Type_Access_Level (Rtyp)
+                      then
+                         Rewrite (N, New_Occurrence_Of (Standard_False, Loc));
+                      else
+                         Rewrite (N, New_Occurrence_Of (Standard_True, Loc));
+                      end if;
+                      Analyze_And_Resolve (N, Restyp);
+ 
                    --  If a conversion of the anonymous access value to the
                    --  tested type would be illegal, then the result is False.
  
!                   elsif not Valid_Conversion
!                               (Lop, Rtyp, Lop, Report_Errs => False)
                    then
                       Rewrite (N, New_Occurrence_Of (Standard_False, Loc));
                       Analyze_And_Resolve (N, Restyp);
*************** package body Exp_Ch4 is
*** 7075,7085 ****
--- 6974,7096 ----
     --------------------------------
  
     procedure Expand_N_Indexed_Component (N : Node_Id) is
+ 
+       Wild_Reads_May_Have_Bad_Side_Effects : Boolean
+         renames Validity_Check_Subscripts;
+       --  This Boolean needs to be True if reading from a bad address can
+       --  have a bad side effect (e.g., a segmentation fault that is not
+       --  transformed into a Storage_Error exception, or interactions with
+       --  memory-mapped I/O) that needs to be prevented. This refers to the
+       --  act of reading itself, not to any damage that might be caused later
+       --  by making use of whatever value was read. We assume here that
+       --  Validity_Check_Subscripts meets this requirement, but introduce
+       --  this declaration in order to document this assumption.
+ 
+       function Is_Renamed_Variable_Name (N : Node_Id) return Boolean;
+       --  Returns True if the given name occurs as part of the renaming
+       --  of a variable. In this case, the indexing operation should be
+       --  treated as a write, rather than a read, with respect to validity
+       --  checking. This is because the renamed variable can later be
+       --  written to.
+ 
+       function Type_Requires_Subscript_Validity_Checks_For_Reads
+         (Typ : Entity_Id) return Boolean;
+       --  If Wild_Reads_May_Have_Bad_Side_Effects is False and we are indexing
+       --  into an array of characters in order to read an element, it is ok
+       --  if an invalid index value goes undetected. But if it is an array of
+       --  pointers or an array of tasks, the consequences of such a read are
+       --  potentially more severe and so we want to detect an invalid index
+       --  value. This function captures that distinction; this is intended to
+       --  be consistent with the "but does not by itself lead to erroneous
+       --  ... execution" rule of RM 13.9.1(11).
+ 
+       ------------------------------
+       -- Is_Renamed_Variable_Name --
+       ------------------------------
+ 
+       function Is_Renamed_Variable_Name (N : Node_Id) return Boolean is
+          Rover : Node_Id := N;
+       begin
+          if Is_Variable (N) then
+             loop
+                declare
+                   Rover_Parent : constant Node_Id := Parent (Rover);
+                begin
+                   case Nkind (Rover_Parent) is
+                      when N_Object_Renaming_Declaration =>
+                         return Rover = Name (Rover_Parent);
+ 
+                      when N_Indexed_Component
+                         | N_Slice
+                         | N_Selected_Component
+                      =>
+                         exit when Rover /= Prefix (Rover_Parent);
+                         Rover := Rover_Parent;
+ 
+                      --  No need to check for qualified expressions or type
+                      --  conversions here, mostly because of the Is_Variable
+                      --  test. It is possible to have a view conversion for
+                      --  which Is_Variable yields True and which occurs as
+                      --  part of an object renaming, but only if the type is
+                      --  tagged; in that case this function will not be called.
+ 
+                      when others =>
+                         exit;
+                   end case;
+                end;
+             end loop;
+          end if;
+          return False;
+       end Is_Renamed_Variable_Name;
+ 
+       -------------------------------------------------------
+       -- Type_Requires_Subscript_Validity_Checks_For_Reads --
+       -------------------------------------------------------
+ 
+       function Type_Requires_Subscript_Validity_Checks_For_Reads
+         (Typ : Entity_Id) return Boolean
+       is
+          --  a shorter name for recursive calls
+          function Needs_Check (Typ : Entity_Id) return Boolean renames
+            Type_Requires_Subscript_Validity_Checks_For_Reads;
+       begin
+          if Is_Access_Type (Typ)
+            or else Is_Tagged_Type (Typ)
+            or else Is_Concurrent_Type (Typ)
+            or else (Is_Array_Type (Typ)
+                      and then Needs_Check (Component_Type (Typ)))
+            or else (Is_Scalar_Type (Typ)
+                      and then Has_Aspect (Typ, Aspect_Default_Value))
+          then
+             return True;
+          end if;
+ 
+          if Is_Record_Type (Typ) then
+             declare
+                Comp : Entity_Id := First_Component_Or_Discriminant (Typ);
+             begin
+                while Present (Comp) loop
+                   if Needs_Check (Etype (Comp)) then
+                      return True;
+                   end if;
+ 
+                   Next_Component_Or_Discriminant (Comp);
+                end loop;
+             end;
+          end if;
+ 
+          return False;
+       end Type_Requires_Subscript_Validity_Checks_For_Reads;
+ 
+       --  Local constants
+ 
        Loc : constant Source_Ptr := Sloc (N);
        Typ : constant Entity_Id  := Etype (N);
        P   : constant Node_Id    := Prefix (N);
        T   : constant Entity_Id  := Etype (P);
  
+    --  Start of processing for Expand_N_Indexed_Component
+ 
     begin
        --  A special optimization, if we have an indexed component that is
        --  selecting from a slice, then we can eliminate the slice, since, for
*************** package body Exp_Ch4 is
*** 7129,7139 ****
  
        --  Generate index and validity checks
  
!       Generate_Index_Checks (N);
  
!       if Validity_Checks_On and then Validity_Check_Subscripts then
!          Apply_Subscript_Validity_Checks (N);
!       end if;
  
        --  If selecting from an array with atomic components, and atomic sync
        --  is not suppressed for this array type, set atomic sync flag.
--- 7140,7206 ----
  
        --  Generate index and validity checks
  
!       declare
!          Dims_Checked : Dimension_Set (Dimensions =>
!                                          (if Is_Array_Type (T)
!                                           then Number_Dimensions (T)
!                                           else 1));
!          --  Dims_Checked is used to avoid generating two checks (one in
!          --  Generate_Index_Checks, one in Apply_Subscript_Validity_Checks)
!          --  for the same index value in cases where the index check eliminates
!          --  the need for the validity check. The Is_Array_Type test avoids
!          --  cascading errors.
  
!       begin
!          Generate_Index_Checks (N, Checks_Generated => Dims_Checked);
! 
!          if Validity_Checks_On
!            and then (Validity_Check_Subscripts
!                       or else Wild_Reads_May_Have_Bad_Side_Effects
!                       or else Type_Requires_Subscript_Validity_Checks_For_Reads
!                                 (Typ)
!                       or else Is_Renamed_Variable_Name (N))
!          then
!             if Validity_Check_Subscripts then
!                --  If we index into an array with an uninitialized variable
!                --  and we generate an index check that passes at run time,
!                --  passing that check does not ensure that the variable is
!                --  valid (although it does in the common case where the
!                --  object's subtype matches the index subtype).
!                --  Consider an uninitialized variable with subtype 1 .. 10
!                --  used to index into an array with bounds 1 .. 20 when the
!                --  value of the uninitialized variable happens to be 15.
!                --  The index check will succeed but the variable is invalid.
!                --  If Validity_Check_Subscripts is True then we need to
!                --  ensure validity, so we adjust Dims_Checked accordingly.
!                Dims_Checked.Elements := (others => False);
! 
!             elsif Is_Array_Type (T) then
!                --  We are only adding extra validity checks here to
!                --  deal with uninitialized variables (but this includes
!                --  assigning one uninitialized variable to another). Other
!                --  ways of producing invalid objects imply erroneousness, so
!                --  the compiler can do whatever it wants for those cases.
!                --  If an index type has the Default_Value aspect specified,
!                --  then we don't have to worry about the possibility of an
!                --  uninitialized variable, so no need for these extra
!                --  validity checks.
! 
!                declare
!                   Idx : Node_Id := First_Index (T);
!                begin
!                   for No_Check_Needed of Dims_Checked.Elements loop
!                      No_Check_Needed := No_Check_Needed
!                        or else Has_Aspect (Etype (Idx), Aspect_Default_Value);
!                      Next_Index (Idx);
!                   end loop;
!                end;
!             end if;
! 
!             Apply_Subscript_Validity_Checks
!               (N, No_Check_Needed => Dims_Checked);
!          end if;
!       end;
  
        --  If selecting from an array with atomic components, and atomic sync
        --  is not suppressed for this array type, set atomic sync flag.
*************** package body Exp_Ch4 is
*** 7790,7797 ****
  
           if Is_Unchecked_Union (Op_Type) then
              declare
!                Lhs_Type : constant Node_Id := Etype (L_Exp);
!                Rhs_Type : constant Node_Id := Etype (R_Exp);
  
                 Lhs_Discr_Vals : Elist_Id;
                 --  List of inferred discriminant values for left operand.
--- 7857,7864 ----
  
           if Is_Unchecked_Union (Op_Type) then
              declare
!                Lhs_Type : constant Entity_Id := Etype (L_Exp);
!                Rhs_Type : constant Entity_Id := Etype (R_Exp);
  
                 Lhs_Discr_Vals : Elist_Id;
                 --  List of inferred discriminant values for left operand.
*************** package body Exp_Ch4 is
*** 8113,8125 ****
        function User_Defined_Primitive_Equality_Op
          (Typ : Entity_Id) return Entity_Id
        is
!          Enclosing_Scope : constant Node_Id := Scope (Typ);
           E : Entity_Id;
        begin
-          --  Prune this search by somehow not looking at decls that precede
-          --  the declaration of the first view of Typ (which might be a partial
-          --  view)???
- 
           for Private_Entities in Boolean loop
              if Private_Entities then
                 if Ekind (Enclosing_Scope) /= E_Package then
--- 8180,8188 ----
        function User_Defined_Primitive_Equality_Op
          (Typ : Entity_Id) return Entity_Id
        is
!          Enclosing_Scope : constant Entity_Id := Scope (Typ);
           E : Entity_Id;
        begin
           for Private_Entities in Boolean loop
              if Private_Entities then
                 if Ekind (Enclosing_Scope) /= E_Package then
*************** package body Exp_Ch4 is
*** 8154,8291 ****
        function Has_Unconstrained_UU_Component
          (Typ : Entity_Id) return Boolean
        is
!          Tdef  : constant Node_Id :=
!                    Type_Definition (Declaration_Node (Base_Type (Typ)));
!          Clist : Node_Id;
!          Vpart : Node_Id;
  
!          function Component_Is_Unconstrained_UU
!            (Comp : Node_Id) return Boolean;
!          --  Determines whether the subtype of the component is an
!          --  unconstrained Unchecked_Union.
  
!          function Variant_Is_Unconstrained_UU
!            (Variant : Node_Id) return Boolean;
!          --  Determines whether a component of the variant has an unconstrained
!          --  Unchecked_Union subtype.
  
!          -----------------------------------
!          -- Component_Is_Unconstrained_UU --
!          -----------------------------------
  
!          function Component_Is_Unconstrained_UU
!            (Comp : Node_Id) return Boolean
           is
           begin
!             if Nkind (Comp) /= N_Component_Declaration then
!                return False;
!             end if;
  
!             declare
!                Sindic : constant Node_Id :=
!                           Subtype_Indication (Component_Definition (Comp));
  
!             begin
!                --  Unconstrained nominal type. In the case of a constraint
!                --  present, the node kind would have been N_Subtype_Indication.
  
!                if Nkind (Sindic) = N_Identifier then
!                   return Is_Unchecked_Union (Base_Type (Etype (Sindic)));
                 end if;
  
!                return False;
!             end;
!          end Component_Is_Unconstrained_UU;
  
!          ---------------------------------
!          -- Variant_Is_Unconstrained_UU --
!          ---------------------------------
  
!          function Variant_Is_Unconstrained_UU
!            (Variant : Node_Id) return Boolean
           is
!             Clist : constant Node_Id := Component_List (Variant);
  
           begin
!             if Is_Empty_List (Component_Items (Clist)) then
!                return False;
              end if;
  
!             --  We only need to test one component
! 
!             declare
!                Comp : Node_Id := First (Component_Items (Clist));
  
!             begin
!                while Present (Comp) loop
!                   if Component_Is_Unconstrained_UU (Comp) then
!                      return True;
!                   end if;
  
!                   Next (Comp);
!                end loop;
!             end;
  
!             --  None of the components withing the variant were of
!             --  unconstrained Unchecked_Union type.
  
!             return False;
!          end Variant_Is_Unconstrained_UU;
  
!       --  Start of processing for Has_Unconstrained_UU_Component
  
-       begin
-          if Null_Present (Tdef) then
              return False;
!          end if;
! 
!          Clist := Component_List (Tdef);
!          Vpart := Variant_Part (Clist);
! 
!          --  Inspect available components
! 
!          if Present (Component_Items (Clist)) then
!             declare
!                Comp : Node_Id := First (Component_Items (Clist));
! 
!             begin
!                while Present (Comp) loop
! 
!                   --  One component is sufficient
! 
!                   if Component_Is_Unconstrained_UU (Comp) then
!                      return True;
!                   end if;
! 
!                   Next (Comp);
!                end loop;
!             end;
!          end if;
! 
!          --  Inspect available components withing variants
! 
!          if Present (Vpart) then
!             declare
!                Variant : Node_Id := First (Variants (Vpart));
! 
!             begin
!                while Present (Variant) loop
! 
!                   --  One component within a variant is sufficient
  
!                   if Variant_Is_Unconstrained_UU (Variant) then
!                      return True;
!                   end if;
  
!                   Next (Variant);
!                end loop;
!             end;
!          end if;
  
!          --  Neither the available components, nor the components inside the
!          --  variant parts were of an unconstrained Unchecked_Union subtype.
  
!          return False;
        end Has_Unconstrained_UU_Component;
  
        --  Local variables
--- 8217,8345 ----
        function Has_Unconstrained_UU_Component
          (Typ : Entity_Id) return Boolean
        is
!          function Unconstrained_UU_In_Component_Declaration
!            (N : Node_Id) return Boolean;
  
!          function Unconstrained_UU_In_Component_Items
!            (L : List_Id) return Boolean;
  
!          function Unconstrained_UU_In_Component_List
!            (N : Node_Id) return Boolean;
  
!          function Unconstrained_UU_In_Variant_Part
!            (N : Node_Id) return Boolean;
!          --  A family of routines that determine whether a particular construct
!          --  of a record type definition contains a subcomponent of an
!          --  unchecked union type whose nominal subtype is unconstrained.
!          --
!          --  Individual routines correspond to the production rules of the Ada
!          --  grammar, as described in the Ada RM (P).
  
!          -----------------------------------------------
!          -- Unconstrained_UU_In_Component_Declaration --
!          -----------------------------------------------
! 
!          function Unconstrained_UU_In_Component_Declaration
!            (N : Node_Id) return Boolean
           is
+             pragma Assert (Nkind (N) = N_Component_Declaration);
+ 
+             Sindic : constant Node_Id :=
+                        Subtype_Indication (Component_Definition (N));
           begin
!             --  If the component declaration includes a subtype indication
!             --  it is not an unchecked_union. Otherwise verify that it carries
!             --  the Unchecked_Union flag and is either a record or a private
!             --  type. A Record_Subtype declared elsewhere does not qualify,
!             --  even if its parent type carries the flag.
  
!             return Nkind (Sindic) in N_Expanded_Name | N_Identifier
!               and then Is_Unchecked_Union (Base_Type (Etype (Sindic)))
!               and then (Ekind (Entity (Sindic)) in
!                          E_Private_Type | E_Record_Type);
!          end Unconstrained_UU_In_Component_Declaration;
  
!          -----------------------------------------
!          -- Unconstrained_UU_In_Component_Items --
!          -----------------------------------------
  
!          function Unconstrained_UU_In_Component_Items
!            (L : List_Id) return Boolean
!          is
!             N : Node_Id := First (L);
!          begin
!             while Present (N) loop
!                if Nkind (N) = N_Component_Declaration
!                  and then Unconstrained_UU_In_Component_Declaration (N)
!                then
!                   return True;
                 end if;
  
!                Next (N);
!             end loop;
  
!             return False;
!          end Unconstrained_UU_In_Component_Items;
  
!          ----------------------------------------
!          -- Unconstrained_UU_In_Component_List --
!          ----------------------------------------
! 
!          function Unconstrained_UU_In_Component_List
!            (N : Node_Id) return Boolean
           is
!             pragma Assert (Nkind (N) = N_Component_List);
  
+             Optional_Variant_Part : Node_Id;
           begin
!             if Unconstrained_UU_In_Component_Items (Component_Items (N)) then
!                return True;
              end if;
  
!             Optional_Variant_Part := Variant_Part (N);
  
!             return
!               Present (Optional_Variant_Part)
!               and then
!                 Unconstrained_UU_In_Variant_Part (Optional_Variant_Part);
!          end Unconstrained_UU_In_Component_List;
  
!          --------------------------------------
!          -- Unconstrained_UU_In_Variant_Part --
!          --------------------------------------
  
!          function Unconstrained_UU_In_Variant_Part
!            (N : Node_Id) return Boolean
!          is
!             pragma Assert (Nkind (N) = N_Variant_Part);
  
!             Variant : Node_Id := First (Variants (N));
!          begin
!             loop
!                if Unconstrained_UU_In_Component_List (Component_List (Variant))
!                then
!                   return True;
!                end if;
  
!                Next (Variant);
!                exit when No (Variant);
!             end loop;
  
              return False;
!          end Unconstrained_UU_In_Variant_Part;
  
!          Typ_Def : constant Node_Id :=
!            Type_Definition (Declaration_Node (Base_Type (Typ)));
  
!          Optional_Component_List : constant Node_Id :=
!            Component_List (Typ_Def);
  
!       --  Start of processing for Has_Unconstrained_UU_Component
  
!       begin
!          return Present (Optional_Component_List)
!            and then
!              Unconstrained_UU_In_Component_List (Optional_Component_List);
        end Has_Unconstrained_UU_Component;
  
        --  Local variables
*************** package body Exp_Ch4 is
*** 8343,8349 ****
        --  Deal with overflow checks in MINIMIZED/ELIMINATED mode and if that
        --  means we no longer have a comparison operation, we are all done.
  
!       Expand_Compare_Minimize_Eliminate_Overflow (N);
  
        if Nkind (N) /= N_Op_Eq then
           return;
--- 8397,8405 ----
        --  Deal with overflow checks in MINIMIZED/ELIMINATED mode and if that
        --  means we no longer have a comparison operation, we are all done.
  
!       if Minimized_Eliminated_Overflow_Check (Left_Opnd (N)) then
!          Expand_Compare_Minimize_Eliminate_Overflow (N);
!       end if;
  
        if Nkind (N) /= N_Op_Eq then
           return;
*************** package body Exp_Ch4 is
*** 8556,8565 ****
           else
              Remove_Side_Effects (Lhs);
              Remove_Side_Effects (Rhs);
!             Rewrite (N,
!               Expand_Record_Equality (N, Typl, Lhs, Rhs, Bodies));
  
-             Insert_Actions      (N, Bodies,           Suppress => All_Checks);
              Analyze_And_Resolve (N, Standard_Boolean, Suppress => All_Checks);
           end if;
  
--- 8612,8619 ----
           else
              Remove_Side_Effects (Lhs);
              Remove_Side_Effects (Rhs);
!             Rewrite (N, Expand_Record_Equality (N, Typl, Lhs, Rhs));
  
              Analyze_And_Resolve (N, Standard_Boolean, Suppress => All_Checks);
           end if;
  
*************** package body Exp_Ch4 is
*** 8582,8591 ****
           Rewrite (N,
             Expand_Record_Equality (N, Typl,
               Unchecked_Convert_To (Typl, Lhs),
!              Unchecked_Convert_To (Typl, Rhs),
!              Bodies));
  
-          Insert_Actions      (N, Bodies,           Suppress => All_Checks);
           Analyze_And_Resolve (N, Standard_Boolean, Suppress => All_Checks);
        end if;
  
--- 8636,8643 ----
           Rewrite (N,
             Expand_Record_Equality (N, Typl,
               Unchecked_Convert_To (Typl, Lhs),
!              Unchecked_Convert_To (Typl, Rhs)));
  
           Analyze_And_Resolve (N, Standard_Boolean, Suppress => All_Checks);
        end if;
  
*************** package body Exp_Ch4 is
*** 8608,8615 ****
        --  f'Machine (expr) to eliminate surprise from extra precision.
  
        if Is_Floating_Point_Type (Typl)
!         and then Nkind (Original_Node (Lhs)) = N_Attribute_Reference
!         and then Attribute_Name (Original_Node (Lhs)) = Name_Result
        then
           --  Stick in the Typ'Machine call if not already there
  
--- 8660,8666 ----
        --  f'Machine (expr) to eliminate surprise from extra precision.
  
        if Is_Floating_Point_Type (Typl)
!         and then Is_Attribute_Result (Original_Node (Lhs))
        then
           --  Stick in the Typ'Machine call if not already there
  
*************** package body Exp_Ch4 is
*** 9128,9142 ****
        --  overflow), and if there is an infinity generated and a range check
        --  is required, the check will fail anyway.
  
-       --  Historical note: we used to convert everything to Long_Long_Float
-       --  and call a single common routine, but this had the undesirable effect
-       --  of giving different results for small static exponent values and the
-       --  same dynamic values.
- 
        else
           pragma Assert (Is_Floating_Point_Type (Rtyp));
  
!          if Rtyp = Standard_Float then
              Etyp := Standard_Float;
              Rent := RE_Exn_Float;
  
--- 9179,9190 ----
        --  overflow), and if there is an infinity generated and a range check
        --  is required, the check will fail anyway.
  
        else
           pragma Assert (Is_Floating_Point_Type (Rtyp));
  
!          --  Short_Float and Float are the same type for GNAT
! 
!          if Rtyp = Standard_Short_Float or else Rtyp = Standard_Float then
              Etyp := Standard_Float;
              Rent := RE_Exn_Float;
  
*************** package body Exp_Ch4 is
*** 9154,9161 ****
        --  If we are in the right type, we can call runtime routine directly
  
        if Typ = Etyp
!         and then Rtyp /= Universal_Integer
!         and then Rtyp /= Universal_Real
        then
           Rewrite (N,
             Wrap_MA (
--- 9202,9208 ----
        --  If we are in the right type, we can call runtime routine directly
  
        if Typ = Etyp
!         and then not Is_Universal_Numeric_Type (Rtyp)
        then
           Rewrite (N,
             Wrap_MA (
*************** package body Exp_Ch4 is
*** 9201,9207 ****
        --  Deal with overflow checks in MINIMIZED/ELIMINATED mode and if that
        --  means we no longer have a comparison operation, we are all done.
  
!       Expand_Compare_Minimize_Eliminate_Overflow (N);
  
        if Nkind (N) /= N_Op_Ge then
           return;
--- 9248,9256 ----
        --  Deal with overflow checks in MINIMIZED/ELIMINATED mode and if that
        --  means we no longer have a comparison operation, we are all done.
  
!       if Minimized_Eliminated_Overflow_Check (Op1) then
!          Expand_Compare_Minimize_Eliminate_Overflow (N);
!       end if;
  
        if Nkind (N) /= N_Op_Ge then
           return;
*************** package body Exp_Ch4 is
*** 9250,9256 ****
        --  Deal with overflow checks in MINIMIZED/ELIMINATED mode and if that
        --  means we no longer have a comparison operation, we are all done.
  
!       Expand_Compare_Minimize_Eliminate_Overflow (N);
  
        if Nkind (N) /= N_Op_Gt then
           return;
--- 9299,9307 ----
        --  Deal with overflow checks in MINIMIZED/ELIMINATED mode and if that
        --  means we no longer have a comparison operation, we are all done.
  
!       if Minimized_Eliminated_Overflow_Check (Op1) then
!          Expand_Compare_Minimize_Eliminate_Overflow (N);
!       end if;
  
        if Nkind (N) /= N_Op_Gt then
           return;
*************** package body Exp_Ch4 is
*** 9299,9305 ****
        --  Deal with overflow checks in MINIMIZED/ELIMINATED mode and if that
        --  means we no longer have a comparison operation, we are all done.
  
!       Expand_Compare_Minimize_Eliminate_Overflow (N);
  
        if Nkind (N) /= N_Op_Le then
           return;
--- 9350,9358 ----
        --  Deal with overflow checks in MINIMIZED/ELIMINATED mode and if that
        --  means we no longer have a comparison operation, we are all done.
  
!       if Minimized_Eliminated_Overflow_Check (Op1) then
!          Expand_Compare_Minimize_Eliminate_Overflow (N);
!       end if;
  
        if Nkind (N) /= N_Op_Le then
           return;
*************** package body Exp_Ch4 is
*** 9348,9354 ****
        --  Deal with overflow checks in MINIMIZED/ELIMINATED mode and if that
        --  means we no longer have a comparison operation, we are all done.
  
!       Expand_Compare_Minimize_Eliminate_Overflow (N);
  
        if Nkind (N) /= N_Op_Lt then
           return;
--- 9401,9409 ----
        --  Deal with overflow checks in MINIMIZED/ELIMINATED mode and if that
        --  means we no longer have a comparison operation, we are all done.
  
!       if Minimized_Eliminated_Overflow_Check (Op1) then
!          Expand_Compare_Minimize_Eliminate_Overflow (N);
!       end if;
  
        if Nkind (N) /= N_Op_Lt then
           return;
*************** package body Exp_Ch4 is
*** 9667,9672 ****
--- 9722,9728 ----
  
              if ((not ROK) or else (Rlo <= (-1) and then (-1) <= Rhi))
                and then ((not LOK) or else (Llo = LLB))
+               and then not CodePeer_Mode
              then
                 Rewrite (N,
                   Make_If_Expression (Loc,
*************** package body Exp_Ch4 is
*** 9942,9948 ****
           --  Deal with overflow checks in MINIMIZED/ELIMINATED mode and if
           --  means we no longer have a /= operation, we are all done.
  
!          Expand_Compare_Minimize_Eliminate_Overflow (N);
  
           if Nkind (N) /= N_Op_Ne then
              return;
--- 9998,10006 ----
           --  Deal with overflow checks in MINIMIZED/ELIMINATED mode and if
           --  means we no longer have a /= operation, we are all done.
  
!          if Minimized_Eliminated_Overflow_Check (Left_Opnd (N)) then
!             Expand_Compare_Minimize_Eliminate_Overflow (N);
!          end if;
  
           if Nkind (N) /= N_Op_Ne then
              return;
*************** package body Exp_Ch4 is
*** 9988,9994 ****
                Make_Op_Not (Loc,
                  Right_Opnd =>
                    Make_Op_Eq (Loc,
!                     Left_Opnd =>  Left_Opnd (N),
                      Right_Opnd => Right_Opnd (N)));
  
              --  The level of parentheses is useless in GNATprove mode, and
--- 10046,10052 ----
                Make_Op_Not (Loc,
                  Right_Opnd =>
                    Make_Op_Eq (Loc,
!                     Left_Opnd  => Left_Opnd (N),
                      Right_Opnd => Right_Opnd (N)));
  
              --  The level of parentheses is useless in GNATprove mode, and
*************** package body Exp_Ch4 is
*** 10349,10356 ****
        Rneg : Boolean;
        --  Set if corresponding operand can be negative
  
-       pragma Unreferenced (Hi);
- 
     begin
        Binary_Op_Validity_Checks (N);
  
--- 10407,10412 ----
*************** package body Exp_Ch4 is
*** 10431,10437 ****
        --  types and this is really marginal). We will just assume that we need
        --  the test if the left operand can be negative at all.
  
!       if Lneg and Rneg then
           Rewrite (N,
             Make_If_Expression (Loc,
               Expressions => New_List (
--- 10487,10495 ----
        --  types and this is really marginal). We will just assume that we need
        --  the test if the left operand can be negative at all.
  
!       if (Lneg and Rneg)
!          and then not CodePeer_Mode
!       then
           Rewrite (N,
             Make_If_Expression (Loc,
               Expressions => New_List (
*************** package body Exp_Ch4 is
*** 10890,10899 ****
        Var       : Entity_Id;
  
     begin
!       --  Ensure that the bound variable is properly frozen. We must do
!       --  this before expansion because the expression is about to be
!       --  converted into a loop, and resulting freeze nodes may end up
!       --  in the wrong place in the tree.
  
        if Present (Iter_Spec) then
           Var := Defining_Identifier (Iter_Spec);
--- 10948,10958 ----
        Var       : Entity_Id;
  
     begin
!       --  Ensure that the bound variable as well as the type of Name of the
!       --  Iter_Spec if present are properly frozen. We must do this before
!       --  expansion because the expression is about to be converted into a
!       --  loop, and resulting freeze nodes may end up in the wrong place in the
!       --  tree.
  
        if Present (Iter_Spec) then
           Var := Defining_Identifier (Iter_Spec);
*************** package body Exp_Ch4 is
*** 10908,10913 ****
--- 10967,10976 ----
              P := Parent (P);
           end loop;
  
+          if Present (Iter_Spec) then
+             Freeze_Before (P, Etype (Name (Iter_Spec)));
+          end if;
+ 
           Freeze_Before (P, Etype (Var));
        end;
  
*************** package body Exp_Ch4 is
*** 11363,11369 ****
              then
                 Par := Parent (Par);
  
!                --  Any other case is not what we are looking for
  
              else
                 return False;
--- 11426,11432 ----
              then
                 Par := Parent (Par);
  
!             --  Any other case is not what we are looking for
  
              else
                 return False;
*************** package body Exp_Ch4 is
*** 11399,11405 ****
  
        --  Local variables
  
!       Pref     : constant Node_Id := Prefix (N);
  
     --  Start of processing for Expand_N_Slice
  
--- 11462,11468 ----
  
        --  Local variables
  
!       Pref : constant Node_Id := Prefix (N);
  
     --  Start of processing for Expand_N_Slice
  
*************** package body Exp_Ch4 is
*** 11425,11431 ****
        --       situation correctly in the assignment statement expansion).
  
        --    2. Prefix of indexed component (the slide is optimized away in this
!       --       case, see the start of Expand_N_Slice.)
  
        --    3. Object renaming declaration, since we want the name of the
        --       slice, not the value.
--- 11488,11494 ----
        --       situation correctly in the assignment statement expansion).
  
        --    2. Prefix of indexed component (the slide is optimized away in this
!       --       case, see the start of Expand_N_Indexed_Component.)
  
        --    3. Object renaming declaration, since we want the name of the
        --       slice, not the value.
*************** package body Exp_Ch4 is
*** 11814,11821 ****
               Reason => PE_Accessibility_Check_Failed));
           Set_Etype (N, Target_Type);
  
!          Error_Msg_N ("<<accessibility check failure", N);
!          Error_Msg_NE ("\<<& [", N, Standard_Program_Error);
        end Raise_Accessibility_Error;
  
        ----------------------
--- 11877,11884 ----
               Reason => PE_Accessibility_Check_Failed));
           Set_Etype (N, Target_Type);
  
!          Error_Msg_N ("accessibility check failure<<", N);
!          Error_Msg_N ("\Program_Error [<<", N);
        end Raise_Accessibility_Error;
  
        ----------------------
*************** package body Exp_Ch4 is
*** 12019,12027 ****
                 --  unchecked conversion to the target fixed-point type.
  
                 Conv :=
!                  Make_Unchecked_Type_Conversion (Loc,
!                    Subtype_Mark => New_Occurrence_Of (Target_Type, Loc),
!                    Expression   => New_Occurrence_Of (Expr_Id, Loc));
              end;
  
           --  All other conversions
--- 12082,12089 ----
                 --  unchecked conversion to the target fixed-point type.
  
                 Conv :=
!                  Unchecked_Convert_To
!                    (Target_Type, New_Occurrence_Of (Expr_Id, Loc));
              end;
  
           --  All other conversions
*************** package body Exp_Ch4 is
*** 12273,12278 ****
--- 12335,12375 ----
           end;
        end if;
  
+       --  If the conversion is from Universal_Integer and requires an overflow
+       --  check, try to do an intermediate conversion to a narrower type first
+       --  without overflow check, in order to avoid doing the overflow check
+       --  in Universal_Integer, which can be a very large type.
+ 
+       if Operand_Type = Universal_Integer and then Do_Overflow_Check (N) then
+          declare
+             Lo, Hi, Siz : Uint;
+             OK          : Boolean;
+             Typ         : Entity_Id;
+ 
+          begin
+             Determine_Range (Operand, OK, Lo, Hi, Assume_Valid => True);
+ 
+             if OK then
+                Siz := Get_Size_For_Range (Lo, Hi);
+ 
+                --  We use the base type instead of the first subtype because
+                --  overflow checks are done in the base type, so this avoids
+                --  the need for useless conversions.
+ 
+                if Siz < System_Max_Integer_Size then
+                   Typ := Etype (Integer_Type_For (Siz, Uns => False));
+ 
+                   Convert_To_And_Rewrite (Typ, Operand);
+                   Analyze_And_Resolve
+                     (Operand, Typ, Suppress => Overflow_Check);
+ 
+                   Analyze_And_Resolve (N, Target_Type);
+                   goto Done;
+                end if;
+             end if;
+          end;
+       end if;
+ 
        --  Do validity check if validity checking operands
  
        if Validity_Checks_On and Validity_Check_Operands then
*************** package body Exp_Ch4 is
*** 12329,12334 ****
--- 12426,12432 ----
             and then Ekind (Etype (Operand_Acc)) = E_Anonymous_Access_Type
             and then (Nkind (Original_Node (N)) /= N_Attribute_Reference
                        or else Attribute_Name (Original_Node (N)) = Name_Access)
+            and then not No_Dynamic_Accessibility_Checks_Enabled (N)
           then
              if not Comes_From_Source (N)
                and then Nkind (Parent (N)) in N_Function_Call
*************** package body Exp_Ch4 is
*** 12350,12359 ****
           --  an instantiation, otherwise the conversion will already have been
           --  rejected as illegal.
  
!          --  Note: warnings are issued by the analyzer for the instance cases
  
           elsif In_Instance_Body
             and then Statically_Deeper_Relation_Applies (Target_Type)
             and then
               Type_Access_Level (Operand_Type) > Type_Access_Level (Target_Type)
           then
--- 12448,12463 ----
           --  an instantiation, otherwise the conversion will already have been
           --  rejected as illegal.
  
!          --  Note: warnings are issued by the analyzer for the instance cases,
!          --  and, since we are late in expansion, a check is performed to
!          --  verify that neither the target type nor the operand type are
!          --  internally generated - as this can lead to spurious errors when,
!          --  for example, the operand type is a result of BIP expansion.
  
           elsif In_Instance_Body
             and then Statically_Deeper_Relation_Applies (Target_Type)
+            and then not Is_Internal (Target_Type)
+            and then not Is_Internal (Operand_Type)
             and then
               Type_Access_Level (Operand_Type) > Type_Access_Level (Target_Type)
           then
*************** package body Exp_Ch4 is
*** 12506,12515 ****
                    Conv : Node_Id;
                 begin
                    Make_Tag_Check (Class_Wide_Type (Actual_Targ_Typ));
!                   Conv :=
!                     Make_Unchecked_Type_Conversion (Loc,
!                       Subtype_Mark => New_Occurrence_Of (Target_Type, Loc),
!                       Expression   => Relocate_Node (Expression (N)));
                    Rewrite (N, Conv);
                    Analyze_And_Resolve (N, Target_Type);
                 end;
--- 12610,12616 ----
                    Conv : Node_Id;
                 begin
                    Make_Tag_Check (Class_Wide_Type (Actual_Targ_Typ));
!                   Conv := Unchecked_Convert_To (Target_Type, Expression (N));
                    Rewrite (N, Conv);
                    Analyze_And_Resolve (N, Target_Type);
                 end;
*************** package body Exp_Ch4 is
*** 12589,12594 ****
--- 12690,12702 ----
           if Is_Constrained (Target_Type) then
              Apply_Length_Check (Operand, Target_Type);
           else
+             --  If the object has an unconstrained array subtype with fixed
+             --  lower bound, then sliding to that bound may be needed.
+ 
+             if Is_Fixed_Lower_Bound_Array_Subtype (Target_Type) then
+                Expand_Sliding_Conversion (Operand, Target_Type);
+             end if;
+ 
              Apply_Range_Check (Operand, Target_Type);
           end if;
  
*************** package body Exp_Ch4 is
*** 12667,12683 ****
  
        --  At this stage, either the conversion node has been transformed into
        --  some other equivalent expression, or left as a conversion that can be
!       --  handled by Gigi, in the following cases:
! 
!       --    Conversions with no change of representation or type
! 
!       --    Numeric conversions involving integer, floating- and fixed-point
!       --    values. Fixed-point values are allowed only if Conversion_OK is
!       --    set, i.e. if the fixed-point values are to be treated as integers.
! 
!       --  No other conversions should be passed to Gigi
! 
!       --  Check: are these rules stated in sinfo??? if so, why restate here???
  
        --  The only remaining step is to generate a range check if we still have
        --  a type conversion at this stage and Do_Range_Check is set. Note that
--- 12775,12781 ----
  
        --  At this stage, either the conversion node has been transformed into
        --  some other equivalent expression, or left as a conversion that can be
!       --  handled by Gigi.
  
        --  The only remaining step is to generate a range check if we still have
        --  a type conversion at this stage and Do_Range_Check is set. Note that
*************** package body Exp_Ch4 is
*** 12742,12748 ****
        --  guard is necessary to prevent infinite recursions when we generate
        --  internal conversions for the purpose of checking predicates.
  
!       if Predicate_Enabled (Target_Type)
          and then Target_Type /= Operand_Type
          and then Comes_From_Source (N)
        then
--- 12840,12855 ----
        --  guard is necessary to prevent infinite recursions when we generate
        --  internal conversions for the purpose of checking predicates.
  
!       --  A view conversion of a tagged object is an object and can appear
!       --  in an assignment context, in which case no predicate check applies
!       --  to the now-dead value.
! 
!       if Nkind (Parent (N)) = N_Assignment_Statement
!         and then N = Name (Parent (N))
!       then
!          null;
! 
!       elsif Predicate_Enabled (Target_Type)
          and then Target_Type /= Operand_Type
          and then Comes_From_Source (N)
        then
*************** package body Exp_Ch4 is
*** 12796,12809 ****
        --  an Assignment_OK indication which must be propagated to the operand.
  
        if Operand_Type = Target_Type then
! 
!          --  Code duplicates Expand_N_Unchecked_Expression above, factor???
! 
!          if Assignment_OK (N) then
!             Set_Assignment_OK (Operand);
!          end if;
! 
!          Rewrite (N, Relocate_Node (Operand));
           return;
        end if;
  
--- 12903,12909 ----
        --  an Assignment_OK indication which must be propagated to the operand.
  
        if Operand_Type = Target_Type then
!          Expand_N_Unchecked_Expression (N);
           return;
        end if;
  
*************** package body Exp_Ch4 is
*** 12834,12842 ****
           return;
        end if;
  
-       --  Otherwise force evaluation unless Assignment_OK flag is set (this
-       --  flag indicates ??? More comments needed here)
- 
        if Assignment_OK (N) then
           null;
        else
--- 12934,12939 ----
*************** package body Exp_Ch4 is
*** 12863,12873 ****
     --  otherwise the primitive "=" is used directly.
  
     function Expand_Record_Equality
!      (Nod    : Node_Id;
!       Typ    : Entity_Id;
!       Lhs    : Node_Id;
!       Rhs    : Node_Id;
!       Bodies : List_Id) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Nod);
  
--- 12960,12969 ----
     --  otherwise the primitive "=" is used directly.
  
     function Expand_Record_Equality
!      (Nod : Node_Id;
!       Typ : Entity_Id;
!       Lhs : Node_Id;
!       Rhs : Node_Id) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Nod);
  
*************** package body Exp_Ch4 is
*** 12885,12925 ****
        ------------------------
  
        function Element_To_Compare (C : Entity_Id) return Entity_Id is
!          Comp : Entity_Id;
  
        begin
!          Comp := C;
!          loop
!             --  Exit loop when the next element to be compared is found, or
!             --  there is no more such element.
! 
!             exit when No (Comp);
! 
!             exit when Ekind (Comp) in E_Discriminant | E_Component
!               and then not (
! 
!               --  Skip inherited components
  
!               --  Note: for a tagged type, we always generate the "=" primitive
!               --  for the base type (not on the first subtype), so the test for
!               --  Comp /= Original_Record_Component (Comp) is True for
!               --  inherited components only.
  
!               (Is_Tagged_Type (Typ)
                  and then Comp /= Original_Record_Component (Comp))
  
!               --  Skip _Tag
  
                or else Chars (Comp) = Name_uTag
  
!               --  Skip interface elements (secondary tags???)
! 
!               or else Is_Interface (Etype (Comp)));
  
!             Next_Entity (Comp);
           end loop;
  
!          return Comp;
        end Element_To_Compare;
  
     --  Start of processing for Expand_Record_Equality
--- 12981,13015 ----
        ------------------------
  
        function Element_To_Compare (C : Entity_Id) return Entity_Id is
!          Comp : Entity_Id := C;
  
        begin
!          while Present (Comp) loop
!             --  Skip inherited components
  
!             --  Note: for a tagged type, we always generate the "=" primitive
!             --  for the base type (not on the first subtype), so the test for
!             --  Comp /= Original_Record_Component (Comp) is True for inherited
!             --  components only.
  
!             if (Is_Tagged_Type (Typ)
                  and then Comp /= Original_Record_Component (Comp))
  
!             --  Skip _Tag
  
                or else Chars (Comp) = Name_uTag
  
!             --  Skip interface elements (secondary tags???)
  
!               or else Is_Interface (Etype (Comp))
!             then
!                Next_Component_Or_Discriminant (Comp);
!             else
!                return Comp;
!             end if;
           end loop;
  
!          return Empty;
        end Element_To_Compare;
  
     --  Start of processing for Expand_Record_Equality
*************** package body Exp_Ch4 is
*** 12935,12941 ****
        --    and then Lhs.Cmpn = Rhs.Cmpn
  
        Result := New_Occurrence_Of (Standard_True, Loc);
!       C := Element_To_Compare (First_Entity (Typ));
        while Present (C) loop
           declare
              New_Lhs : Node_Id;
--- 13025,13031 ----
        --    and then Lhs.Cmpn = Rhs.Cmpn
  
        Result := New_Occurrence_Of (Standard_True, Loc);
!       C := Element_To_Compare (First_Component_Or_Discriminant (Typ));
        while Present (C) loop
           declare
              New_Lhs : Node_Id;
*************** package body Exp_Ch4 is
*** 12960,12967 ****
                 Rhs =>
                   Make_Selected_Component (Loc,
                     Prefix        => New_Rhs,
!                    Selector_Name => New_Occurrence_Of (C, Loc)),
!                Bodies => Bodies);
  
              --  If some (sub)component is an unchecked_union, the whole
              --  operation will raise program error.
--- 13050,13056 ----
                 Rhs =>
                   Make_Selected_Component (Loc,
                     Prefix        => New_Rhs,
!                    Selector_Name => New_Occurrence_Of (C, Loc)));
  
              --  If some (sub)component is an unchecked_union, the whole
              --  operation will raise program error.
*************** package body Exp_Ch4 is
*** 12993,12999 ****
           end;
  
           First_Time := False;
!          C := Element_To_Compare (Next_Entity (C));
        end loop;
  
        return Result;
--- 13082,13088 ----
           end;
  
           First_Time := False;
!          C := Element_To_Compare (Next_Component_Or_Discriminant (C));
        end loop;
  
        return Result;
*************** package body Exp_Ch4 is
*** 13331,13413 ****
        end if;
     end Fixup_Universal_Fixed_Operation;
  
!    ---------------------------------
!    -- Has_Inferable_Discriminants --
!    ---------------------------------
  
!    function Has_Inferable_Discriminants (N : Node_Id) return Boolean is
  
!       function Prefix_Is_Formal_Parameter (N : Node_Id) return Boolean;
!       --  Determines whether the left-most prefix of a selected component is a
!       --  formal parameter in a subprogram. Assumes N is a selected component.
  
!       --------------------------------
!       -- Prefix_Is_Formal_Parameter --
!       --------------------------------
  
!       function Prefix_Is_Formal_Parameter (N : Node_Id) return Boolean is
!          Sel_Comp : Node_Id;
  
        begin
!          --  Move to the left-most prefix by climbing up the tree
! 
!          Sel_Comp := N;
!          while Present (Parent (Sel_Comp))
!            and then Nkind (Parent (Sel_Comp)) = N_Selected_Component
!          loop
!             Sel_Comp := Parent (Sel_Comp);
!          end loop;
! 
!          return Is_Formal (Entity (Prefix (Sel_Comp)));
!       end Prefix_Is_Formal_Parameter;
  
!    --  Start of processing for Has_Inferable_Discriminants
  
     begin
!       --  For selected components, the subtype of the selector must be a
!       --  constrained Unchecked_Union. If the component is subject to a
!       --  per-object constraint, then the enclosing object must have inferable
!       --  discriminants.
! 
!       if Nkind (N) = N_Selected_Component then
!          if Has_Per_Object_Constraint (Entity (Selector_Name (N))) then
! 
!             --  A small hack. If we have a per-object constrained selected
!             --  component of a formal parameter, return True since we do not
!             --  know the actual parameter association yet.
! 
!             if Prefix_Is_Formal_Parameter (N) then
!                return True;
  
!             --  Otherwise, check the enclosing object and the selector
  
!             else
!                return Has_Inferable_Discriminants (Prefix (N))
!                  and then Has_Inferable_Discriminants (Selector_Name (N));
!             end if;
  
!          --  The call to Has_Inferable_Discriminants will determine whether
!          --  the selector has a constrained Unchecked_Union nominal type.
  
!          else
!             return Has_Inferable_Discriminants (Selector_Name (N));
!          end if;
  
!       --  A qualified expression has inferable discriminants if its subtype
!       --  mark is a constrained Unchecked_Union subtype.
  
!       elsif Nkind (N) = N_Qualified_Expression then
!          return Is_Unchecked_Union (Etype (Subtype_Mark (N)))
!            and then Is_Constrained (Etype (Subtype_Mark (N)));
  
!       --  For all other names, it is sufficient to have a constrained
!       --  Unchecked_Union nominal subtype.
  
        else
!          return Is_Unchecked_Union (Base_Type (Etype (N)))
!            and then Is_Constrained (Etype (N));
        end if;
!    end Has_Inferable_Discriminants;
  
     -------------------------------
     -- Insert_Dereference_Action --
--- 13420,13472 ----
        end if;
     end Fixup_Universal_Fixed_Operation;
  
!    ------------------------
!    -- Get_Size_For_Range --
!    ------------------------
  
!    function Get_Size_For_Range (Lo, Hi : Uint) return Uint is
  
!       function Is_OK_For_Range (Siz : Uint) return Boolean;
!       --  Return True if a signed integer with given size can cover Lo .. Hi
  
!       --------------------------
!       -- Is_OK_For_Range --
!       --------------------------
  
!       function Is_OK_For_Range (Siz : Uint) return Boolean is
!          B : constant Uint := Uint_2 ** (Siz - 1);
  
        begin
!          --  Test B = 2 ** (size - 1) (can accommodate -B .. +(B - 1))
  
!          return Lo >= -B and then Hi >= -B and then Lo < B and then Hi < B;
!       end Is_OK_For_Range;
  
     begin
!       --  This is (almost always) the size of Integer
  
!       if Is_OK_For_Range (Uint_32) then
!          return Uint_32;
  
!       --  Check 63
  
!       elsif Is_OK_For_Range (Uint_63) then
!          return Uint_63;
  
!       --  This is (almost always) the size of Long_Long_Integer
  
!       elsif Is_OK_For_Range (Uint_64) then
!          return Uint_64;
  
!       --  Check 127
  
!       elsif Is_OK_For_Range (Uint_127) then
!          return Uint_127;
  
        else
!          return Uint_128;
        end if;
!    end Get_Size_For_Range;
  
     -------------------------------
     -- Insert_Dereference_Action --
*************** package body Exp_Ch4 is
*** 13722,13730 ****
     --  do not need to generate an actual or formal generic part, just the
     --  instantiated function itself.
  
-    --  Perhaps we could have the actual generic available in the run-time,
-    --  obtained by rtsfind, and actually expand a real instantiation ???
- 
     function Make_Array_Comparison_Op
       (Typ : Entity_Id;
        Nod : Node_Id) return Node_Id
--- 13781,13786 ----
*************** package body Exp_Ch4 is
*** 14114,14122 ****
  
     function Minimized_Eliminated_Overflow_Check (N : Node_Id) return Boolean is
     begin
        return
          Is_Signed_Integer_Type (Etype (N))
!           and then Overflow_Check_Mode in Minimized_Or_Eliminated;
     end Minimized_Eliminated_Overflow_Check;
  
     ----------------------------
--- 14170,14184 ----
  
     function Minimized_Eliminated_Overflow_Check (N : Node_Id) return Boolean is
     begin
+       --  The MINIMIZED mode operates in Long_Long_Integer so we cannot use it
+       --  if the type of the expression is already larger.
+ 
        return
          Is_Signed_Integer_Type (Etype (N))
!           and then Overflow_Check_Mode in Minimized_Or_Eliminated
!           and then not (Overflow_Check_Mode = Minimized
!                          and then
!                         Esize (Etype (N)) > Standard_Long_Long_Integer_Size);
     end Minimized_Eliminated_Overflow_Check;
  
     ----------------------------
*************** package body Exp_Ch4 is
*** 14132,14189 ****
        Typ    : constant Entity_Id := Etype (R);
        Tsiz   : constant Uint      := RM_Size (Typ);
  
-       function Get_Size_For_Range (Lo, Hi : Uint) return Uint;
-       --  Return the size of a small signed integer type covering Lo .. Hi.
-       --  The important thing is to return a size lower than that of Typ.
- 
-       ------------------------
-       -- Get_Size_For_Range --
-       ------------------------
- 
-       function Get_Size_For_Range (Lo, Hi : Uint) return Uint is
- 
-          function Is_OK_For_Range (Siz : Uint) return Boolean;
-          --  Return True if a signed integer with given size can cover Lo .. Hi
- 
-          --------------------------
-          -- Is_OK_For_Range --
-          --------------------------
- 
-          function Is_OK_For_Range (Siz : Uint) return Boolean is
-             B : constant Uint := Uint_2 ** (Siz - 1);
- 
-          begin
-             --  Test B = 2 ** (size - 1) (can accommodate -B .. +(B - 1))
- 
-             return Lo >= -B and then Hi >= -B and then Lo < B and then Hi < B;
-          end Is_OK_For_Range;
- 
-       begin
-          --  This is (almost always) the size of Integer
- 
-          if Is_OK_For_Range (Uint_32) then
-             return Uint_32;
- 
-          --  If the size of Typ is 64 then check 63
- 
-          elsif Tsiz = Uint_64 and then Is_OK_For_Range (Uint_63) then
-             return Uint_63;
- 
-          --  This is (almost always) the size of Long_Long_Integer
- 
-          elsif Is_OK_For_Range (Uint_64) then
-             return Uint_64;
- 
-          --  If the size of Typ is 128 then check 127
- 
-          elsif Tsiz = Uint_128 and then Is_OK_For_Range (Uint_127) then
-             return Uint_127;
- 
-          else
-             return Uint_128;
-          end if;
-       end Get_Size_For_Range;
- 
        --  Local variables
  
        L          : Node_Id;
--- 14194,14199 ----
*************** package body Exp_Ch4 is
*** 15030,15036 ****
--- 15040,15056 ----
        --       Hook := null;
        --    end if;
  
+       --  Note that the value returned by Find_Hook_Context may be an operator
+       --  node, which is not a list member. We must locate the proper node in
+       --  in the tree after which to insert the finalization code.
+ 
        else
+          while not Is_List_Member (Fin_Context) loop
+             Fin_Context := Parent (Fin_Context);
+          end loop;
+ 
+          pragma Assert (Present (Fin_Context));
+ 
           Insert_Action_After (Fin_Context,
             Make_Implicit_If_Statement (Obj_Decl,
               Condition =>
*************** package body Exp_Ch4 is
*** 15226,15231 ****
--- 15246,15262 ----
     begin
        SCIL_Node := Empty;
  
+       --  We have to examine the corresponding record type when dealing with
+       --  protected types instead of the original, unexpanded, type.
+ 
+       if Ekind (Right_Type) = E_Protected_Type then
+          Right_Type := Corresponding_Record_Type (Right_Type);
+       end if;
+ 
+       if Ekind (Left_Type) = E_Protected_Type then
+          Left_Type := Corresponding_Record_Type (Left_Type);
+       end if;
+ 
        --  In the case where the type is an access type, the test is applied
        --  using the designated types (needed in Ada 2012 for implicit anonymous
        --  access conversions, for AI05-0149).
*************** package body Exp_Ch4 is
*** 15251,15257 ****
            Selector_Name =>
              New_Occurrence_Of (First_Tag_Component (Left_Type), Loc));
  
!       if Is_Class_Wide_Type (Right_Type) or else Is_Interface (Left_Type) then
  
           --  No need to issue a run-time check if we statically know that the
           --  result of this membership test is always true. For example,
--- 15282,15288 ----
            Selector_Name =>
              New_Occurrence_Of (First_Tag_Component (Left_Type), Loc));
  
!       if Is_Class_Wide_Type (Right_Type) then
  
           --  No need to issue a run-time check if we statically know that the
           --  result of this membership test is always true. For example,
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch4.ads gcc-12.1.0/gcc/ada/exp_ch4.ads
*** gcc-11.3.0/gcc/ada/exp_ch4.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch4.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Exp_Ch4 is
*** 89,108 ****
     --  while for records without variants only a simple expression is needed.
  
     function Expand_Record_Equality
!      (Nod    : Node_Id;
!       Typ    : Entity_Id;
!       Lhs    : Node_Id;
!       Rhs    : Node_Id;
!       Bodies : List_Id) return Node_Id;
     --  Expand a record equality into an expression that compares the fields
     --  individually to yield the required Boolean result. Loc is the
     --  location for the generated nodes. Typ is the type of the record, and
     --  Lhs, Rhs are the record expressions to be compared, these
     --  expressions need not to be analyzed but have to be side-effect free.
!    --  Bodies is a list on which to attach bodies of local functions that
!    --  are created in the process. This is the responsibility of the caller
!    --  to insert those bodies at the right place. Nod provides the Sloc
!    --  value for generated code.
  
     procedure Expand_Set_Membership (N : Node_Id);
     --  For each choice of a set membership, we create a simple equality or
--- 89,104 ----
     --  while for records without variants only a simple expression is needed.
  
     function Expand_Record_Equality
!      (Nod : Node_Id;
!       Typ : Entity_Id;
!       Lhs : Node_Id;
!       Rhs : Node_Id) return Node_Id;
     --  Expand a record equality into an expression that compares the fields
     --  individually to yield the required Boolean result. Loc is the
     --  location for the generated nodes. Typ is the type of the record, and
     --  Lhs, Rhs are the record expressions to be compared, these
     --  expressions need not to be analyzed but have to be side-effect free.
!    --  Nod provides the Sloc value for generated code.
  
     procedure Expand_Set_Membership (N : Node_Id);
     --  For each choice of a set membership, we create a simple equality or
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch5.adb gcc-12.1.0/gcc/ada/exp_ch5.adb
*** gcc-11.3.0/gcc/ada/exp_ch5.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch5.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,65 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Exp_Aggr; use Exp_Aggr;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_Ch7;  use Exp_Ch7;
! with Exp_Ch11; use Exp_Ch11;
! with Exp_Dbug; use Exp_Dbug;
! with Exp_Pakd; use Exp_Pakd;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Inline;   use Inline;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sinfo;    use Sinfo;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Ch13; use Sem_Ch13;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Validsw;  use Validsw;
  
  package body Exp_Ch5 is
  
--- 23,70 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Exp_Aggr;       use Exp_Aggr;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Ch11;       use Exp_Ch11;
! with Exp_Dbug;       use Exp_Dbug;
! with Exp_Pakd;       use Exp_Pakd;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Inline;         use Inline;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
! with Validsw;        use Validsw;
  
  package body Exp_Ch5 is
  
*************** package body Exp_Ch5 is
*** 121,128 ****
        R_Type : Entity_Id;
        Rev    : Boolean) return Node_Id;
     --  Alternative to Expand_Assign_Array_Loop for packed bitfields. Generates
!    --  a call to the System.Bitfields.Copy_Bitfield, which is more efficient
!    --  than copying component-by-component.
  
     function Expand_Assign_Array_Loop_Or_Bitfield
       (N      : Node_Id;
--- 126,141 ----
        R_Type : Entity_Id;
        Rev    : Boolean) return Node_Id;
     --  Alternative to Expand_Assign_Array_Loop for packed bitfields. Generates
!    --  a call to System.Bitfields.Copy_Bitfield, which is more efficient than
!    --  copying component-by-component.
! 
!    function Expand_Assign_Array_Bitfield_Fast
!      (N      : Node_Id;
!       Larray : Entity_Id;
!       Rarray : Entity_Id) return Node_Id;
!    --  Alternative to Expand_Assign_Array_Bitfield. Generates a call to
!    --  System.Bitfields.Fast_Copy_Bitfield, which is more efficient than
!    --  Copy_Bitfield, but only works in restricted situations.
  
     function Expand_Assign_Array_Loop_Or_Bitfield
       (N      : Node_Id;
*************** package body Exp_Ch5 is
*** 132,139 ****
        R_Type : Entity_Id;
        Ndim   : Pos;
        Rev    : Boolean) return Node_Id;
!    --  Calls either Expand_Assign_Array_Loop or Expand_Assign_Array_Bitfield as
!    --  appropriate.
  
     procedure Expand_Assign_Record (N : Node_Id);
     --  N is an assignment of an untagged record value. This routine handles
--- 145,152 ----
        R_Type : Entity_Id;
        Ndim   : Pos;
        Rev    : Boolean) return Node_Id;
!    --  Calls either Expand_Assign_Array_Loop, Expand_Assign_Array_Bitfield, or
!    --  Expand_Assign_Array_Bitfield_Fast as appropriate.
  
     procedure Expand_Assign_Record (N : Node_Id);
     --  N is an assignment of an untagged record value. This routine handles
*************** package body Exp_Ch5 is
*** 727,734 ****
        --  in the front end.
  
        declare
!          L_Index_Typ : constant Node_Id := Etype (First_Index (L_Type));
!          R_Index_Typ : constant Node_Id := Etype (First_Index (R_Type));
  
           Left_Lo  : constant Node_Id := Type_Low_Bound  (L_Index_Typ);
           Left_Hi  : constant Node_Id := Type_High_Bound (L_Index_Typ);
--- 740,747 ----
        --  in the front end.
  
        declare
!          L_Index_Typ : constant Entity_Id := Etype (First_Index (L_Type));
!          R_Index_Typ : constant Entity_Id := Etype (First_Index (R_Type));
  
           Left_Lo  : constant Node_Id := Type_Low_Bound  (L_Index_Typ);
           Left_Hi  : constant Node_Id := Type_High_Bound (L_Index_Typ);
*************** package body Exp_Ch5 is
*** 1367,1374 ****
  
        Loc  : constant Source_Ptr := Sloc (N);
  
!       L_Index_Typ : constant Node_Id := Etype (First_Index (L_Type));
!       R_Index_Typ : constant Node_Id := Etype (First_Index (R_Type));
        Left_Lo  : constant Node_Id := Type_Low_Bound  (L_Index_Typ);
        Right_Lo : constant Node_Id := Type_Low_Bound  (R_Index_Typ);
  
--- 1380,1387 ----
  
        Loc  : constant Source_Ptr := Sloc (N);
  
!       L_Index_Typ : constant Entity_Id := Etype (First_Index (L_Type));
!       R_Index_Typ : constant Entity_Id := Etype (First_Index (R_Type));
        Left_Lo  : constant Node_Id := Type_Low_Bound  (L_Index_Typ);
        Right_Lo : constant Node_Id := Type_Low_Bound  (R_Index_Typ);
  
*************** package body Exp_Ch5 is
*** 1434,1439 ****
--- 1447,1585 ----
            R_Addr, R_Bit, L_Addr, L_Bit, Size));
     end Expand_Assign_Array_Bitfield;
  
+    ---------------------------------------
+    -- Expand_Assign_Array_Bitfield_Fast --
+    ---------------------------------------
+ 
+    function Expand_Assign_Array_Bitfield_Fast
+      (N      : Node_Id;
+       Larray : Entity_Id;
+       Rarray : Entity_Id) return Node_Id
+    is
+       pragma Assert (not Change_Of_Representation (N));
+       --  This won't work, for example, to copy a packed array to an unpacked
+       --  array.
+ 
+       --  For L (A .. B) := R (C .. D), we generate:
+       --
+       --     L := Fast_Copy_Bitfield (R, <offset of R(C)>, L, <offset of L(A)>,
+       --                              L (A .. B)'Length * L'Component_Size);
+       --
+       --  with L and R suitably uncheckedly converted to/from Val_2.
+       --  The offsets are from the start of L and R.
+ 
+       Loc  : constant Source_Ptr := Sloc (N);
+ 
+       L_Typ : constant Entity_Id := Etype (Larray);
+       R_Typ : constant Entity_Id := Etype (Rarray);
+       --  The original type of the arrays
+ 
+       L_Val : constant Node_Id :=
+         Unchecked_Convert_To (RTE (RE_Val_2), Larray);
+       R_Val : constant Node_Id :=
+         Unchecked_Convert_To (RTE (RE_Val_2), Rarray);
+       --  Converted values of left- and right-hand sides
+ 
+       L_Small : constant Boolean :=
+         Known_Static_RM_Size (L_Typ)
+           and then RM_Size (L_Typ) < Standard_Long_Long_Integer_Size;
+       R_Small : constant Boolean :=
+         Known_Static_RM_Size (R_Typ)
+           and then RM_Size (R_Typ) < Standard_Long_Long_Integer_Size;
+       --  Whether the above unchecked conversions need to be padded with zeros
+ 
+       C_Size : constant Uint := Component_Size (L_Typ);
+       pragma Assert (C_Size >= 1);
+       pragma Assert (C_Size = Component_Size (R_Typ));
+ 
+       Larray_Bounds : constant Range_Values :=
+         Get_Index_Bounds (First_Index (L_Typ));
+       L_Bounds : constant Range_Values :=
+         (if Nkind (Name (N)) = N_Slice
+          then Get_Index_Bounds (Discrete_Range (Name (N)))
+          else Larray_Bounds);
+       --  If the left-hand side is A (First..Last), Larray_Bounds is A'Range,
+       --  and L_Bounds is First..Last. If it's not a slice, we treat it like
+       --  a slice starting at A'First.
+ 
+       L_Bit : constant Node_Id :=
+         Make_Integer_Literal
+           (Loc, (L_Bounds.First - Larray_Bounds.First) * C_Size);
+ 
+       Rarray_Bounds : constant Range_Values :=
+         Get_Index_Bounds (First_Index (R_Typ));
+       R_Bounds : constant Range_Values :=
+         (if Nkind (Expression (N)) = N_Slice
+          then Get_Index_Bounds (Discrete_Range (Expression (N)))
+          else Rarray_Bounds);
+ 
+       R_Bit : constant Node_Id :=
+         Make_Integer_Literal
+           (Loc, (R_Bounds.First - Rarray_Bounds.First) * C_Size);
+ 
+       Size : constant Node_Id :=
+         Make_Op_Multiply (Loc,
+           Make_Attribute_Reference (Loc,
+             Prefix =>
+               Duplicate_Subexpr (Name (N), True),
+             Attribute_Name => Name_Length),
+           Make_Attribute_Reference (Loc,
+             Prefix =>
+               Duplicate_Subexpr (Larray, True),
+             Attribute_Name => Name_Component_Size));
+ 
+       L_Arg, R_Arg, Call : Node_Id;
+ 
+    begin
+       --  The semantics of unchecked conversion between bit-packed arrays that
+       --  are implemented as modular types and modular types is precisely that
+       --  of unchecked conversion between modular types. Therefore, if it needs
+       --  to be padded with zeros, the padding must be moved to the correct end
+       --  for memory order because System.Bitfield_Utils works in memory order.
+ 
+       if L_Small
+         and then (Bytes_Big_Endian xor Reverse_Storage_Order (L_Typ))
+       then
+          L_Arg := Make_Op_Shift_Left (Loc,
+            Left_Opnd  => L_Val,
+            Right_Opnd => Make_Integer_Literal (Loc,
+                            Standard_Long_Long_Integer_Size - RM_Size (L_Typ)));
+       else
+          L_Arg := L_Val;
+       end if;
+ 
+       if R_Small
+         and then (Bytes_Big_Endian xor Reverse_Storage_Order (R_Typ))
+       then
+          R_Arg := Make_Op_Shift_Left (Loc,
+            Left_Opnd  => R_Val,
+            Right_Opnd => Make_Integer_Literal (Loc,
+                            Standard_Long_Long_Integer_Size - RM_Size (R_Typ)));
+       else
+          R_Arg := R_Val;
+       end if;
+ 
+       Call := Make_Function_Call (Loc,
+         Name => New_Occurrence_Of (RTE (RE_Fast_Copy_Bitfield), Loc),
+         Parameter_Associations => New_List (
+           R_Arg, R_Bit, L_Arg, L_Bit, Size));
+ 
+       --  Conversely, the final unchecked conversion must take significant bits
+ 
+       if L_Small
+         and then (Bytes_Big_Endian xor Reverse_Storage_Order (L_Typ))
+       then
+          Call := Make_Op_Shift_Right (Loc,
+            Left_Opnd  => Call,
+            Right_Opnd => Make_Integer_Literal (Loc,
+                            Standard_Long_Long_Integer_Size - RM_Size (L_Typ)));
+       end if;
+ 
+       return Make_Assignment_Statement (Loc,
+         Name => Duplicate_Subexpr (Larray, True),
+         Expression => Unchecked_Convert_To (L_Typ, Call));
+    end Expand_Assign_Array_Bitfield_Fast;
+ 
     ------------------------------------------
     -- Expand_Assign_Array_Loop_Or_Bitfield --
     ------------------------------------------
*************** package body Exp_Ch5 is
*** 1447,1483 ****
        Ndim   : Pos;
        Rev    : Boolean) return Node_Id
     is
        Slices : constant Boolean :=
!         Nkind (Name (N)) = N_Slice or else Nkind (Expression (N)) = N_Slice;
        L_Prefix_Comp : constant Boolean :=
          --  True if the left-hand side is a slice of a component or slice
!         Nkind (Name (N)) = N_Slice
!           and then Nkind (Prefix (Name (N))) in
                       N_Selected_Component | N_Indexed_Component | N_Slice;
        R_Prefix_Comp : constant Boolean :=
          --  Likewise for the right-hand side
!         Nkind (Expression (N)) = N_Slice
!           and then Nkind (Prefix (Expression (N))) in
                       N_Selected_Component | N_Indexed_Component | N_Slice;
  
     begin
!       --  Determine whether Copy_Bitfield is appropriate (will work, and will
!       --  be more efficient than component-by-component copy). Copy_Bitfield
!       --  doesn't work for reversed storage orders. It is efficient for slices
!       --  of bit-packed arrays. Copy_Bitfield can read and write bits that are
!       --  not part of the objects being copied, so we don't want to use it if
!       --  there are volatile or independent components. If the Prefix of the
!       --  slice is a component or slice, then it might be a part of an object
!       --  with some other volatile or independent components, so we disable the
!       --  optimization in that case as well. We could complicate this code by
!       --  actually looking for such volatile and independent components.
  
        if Is_Bit_Packed_Array (L_Type)
          and then Is_Bit_Packed_Array (R_Type)
          and then not Reverse_Storage_Order (L_Type)
          and then not Reverse_Storage_Order (R_Type)
          and then Ndim = 1
-         and then not Rev
          and then Slices
          and then not Has_Volatile_Component (L_Type)
          and then not Has_Volatile_Component (R_Type)
--- 1593,1634 ----
        Ndim   : Pos;
        Rev    : Boolean) return Node_Id
     is
+ 
+       L : constant Node_Id := Name (N);
+       R : constant Node_Id := Expression (N);
+       --  Left- and right-hand sides of the assignment statement
+ 
        Slices : constant Boolean :=
!         Nkind (L) = N_Slice or else Nkind (R) = N_Slice;
        L_Prefix_Comp : constant Boolean :=
          --  True if the left-hand side is a slice of a component or slice
!         Nkind (L) = N_Slice
!           and then Nkind (Prefix (L)) in
                       N_Selected_Component | N_Indexed_Component | N_Slice;
        R_Prefix_Comp : constant Boolean :=
          --  Likewise for the right-hand side
!         Nkind (R) = N_Slice
!           and then Nkind (Prefix (R)) in
                       N_Selected_Component | N_Indexed_Component | N_Slice;
  
     begin
!       --  Determine whether Copy_Bitfield or Fast_Copy_Bitfield is appropriate
!       --  (will work, and will be more efficient than component-by-component
!       --  copy). Copy_Bitfield doesn't work for reversed storage orders. It is
!       --  efficient for slices of bit-packed arrays. Copy_Bitfield can read and
!       --  write bits that are not part of the objects being copied, so we don't
!       --  want to use it if there are volatile or independent components. If
!       --  the Prefix of the slice is a component or slice, then it might be a
!       --  part of an object with some other volatile or independent components,
!       --  so we disable the optimization in that case as well. We could
!       --  complicate this code by actually looking for such volatile and
!       --  independent components.
  
        if Is_Bit_Packed_Array (L_Type)
          and then Is_Bit_Packed_Array (R_Type)
          and then not Reverse_Storage_Order (L_Type)
          and then not Reverse_Storage_Order (R_Type)
          and then Ndim = 1
          and then Slices
          and then not Has_Volatile_Component (L_Type)
          and then not Has_Volatile_Component (R_Type)
*************** package body Exp_Ch5 is
*** 1485,1498 ****
          and then not Has_Independent_Components (R_Type)
          and then not L_Prefix_Comp
          and then not R_Prefix_Comp
-         and then RTE_Available (RE_Copy_Bitfield)
        then
!          return Expand_Assign_Array_Bitfield
!            (N, Larray, Rarray, L_Type, R_Type, Rev);
!       else
!          return Expand_Assign_Array_Loop
!            (N, Larray, Rarray, L_Type, R_Type, Ndim, Rev);
        end if;
     end Expand_Assign_Array_Loop_Or_Bitfield;
  
     --------------------------
--- 1636,1723 ----
          and then not Has_Independent_Components (R_Type)
          and then not L_Prefix_Comp
          and then not R_Prefix_Comp
        then
!          --  Here if Copy_Bitfield can work (except for the Rev test below).
!          --  Determine whether to call Fast_Copy_Bitfield instead. If we
!          --  are assigning slices, and all the relevant bounds are known at
!          --  compile time, and the maximum object size is no greater than
!          --  System.Bitfields.Val_Bits (i.e. Long_Long_Integer'Size / 2), and
!          --  we don't have enumeration representation clauses, we can use
!          --  Fast_Copy_Bitfield. The max size test is to ensure that the slices
!          --  cannot overlap boundaries not supported by Fast_Copy_Bitfield.
! 
!          pragma Assert (Known_Component_Size (Base_Type (L_Type)));
!          pragma Assert (Known_Component_Size (Base_Type (R_Type)));
! 
!          --  Note that L_Type and R_Type do not necessarily have the same base
!          --  type, because of array type conversions. Hence the need to check
!          --  various properties of both.
! 
!          if Compile_Time_Known_Bounds (Base_Type (L_Type))
!            and then Compile_Time_Known_Bounds (Base_Type (R_Type))
!          then
!             declare
!                Left_Base_Index : constant Entity_Id :=
!                  First_Index (Base_Type (L_Type));
!                Left_Base_Range : constant Range_Values :=
!                  Get_Index_Bounds (Left_Base_Index);
! 
!                Right_Base_Index : constant Entity_Id :=
!                  First_Index (Base_Type (R_Type));
!                Right_Base_Range : constant Range_Values :=
!                  Get_Index_Bounds (Right_Base_Index);
! 
!                Known_Left_Slice_Low : constant Boolean :=
!                  (if Nkind (L) = N_Slice
!                     then Compile_Time_Known_Value
!                       (Get_Index_Bounds (Discrete_Range (L)).First));
!                Known_Right_Slice_Low : constant Boolean :=
!                  (if Nkind (R) = N_Slice
!                     then Compile_Time_Known_Value
!                       (Get_Index_Bounds (Discrete_Range (R)).Last));
! 
!                Val_Bits : constant Pos := Standard_Long_Long_Integer_Size / 2;
! 
!             begin
!                if Left_Base_Range.Last - Left_Base_Range.First < Val_Bits
!                  and then Right_Base_Range.Last - Right_Base_Range.First <
!                             Val_Bits
!                  and then Known_Esize (L_Type)
!                  and then Known_Esize (R_Type)
!                  and then Known_Left_Slice_Low
!                  and then Known_Right_Slice_Low
!                  and then Compile_Time_Known_Value
!                    (Get_Index_Bounds (First_Index (Etype (Larray))).First)
!                  and then Compile_Time_Known_Value
!                    (Get_Index_Bounds (First_Index (Etype (Rarray))).First)
!                  and then
!                    not (Is_Enumeration_Type (Etype (Left_Base_Index))
!                           and then Has_Enumeration_Rep_Clause
!                             (Etype (Left_Base_Index)))
!                  and then RTE_Available (RE_Fast_Copy_Bitfield)
!                then
!                   pragma Assert (Known_Esize (L_Type));
!                   pragma Assert (Known_Esize (R_Type));
! 
!                   return Expand_Assign_Array_Bitfield_Fast (N, Larray, Rarray);
!                end if;
!             end;
!          end if;
! 
!          --  Fast_Copy_Bitfield can work if Rev is True, because the data is
!          --  passed and returned by copy. Copy_Bitfield cannot.
! 
!          if not Rev and then RTE_Available (RE_Copy_Bitfield) then
!             return Expand_Assign_Array_Bitfield
!               (N, Larray, Rarray, L_Type, R_Type, Rev);
!          end if;
        end if;
+ 
+       --  Here if we did not return above, with Fast_Copy_Bitfield or
+       --  Copy_Bitfield.
+ 
+       return Expand_Assign_Array_Loop
+         (N, Larray, Rarray, L_Type, R_Type, Ndim, Rev);
     end Expand_Assign_Array_Loop_Or_Bitfield;
  
     --------------------------
*************** package body Exp_Ch5 is
*** 2161,2166 ****
--- 2386,2392 ----
              Ent := Name (N);
              while Nkind (Ent) in N_Has_Entity
                and then Present (Entity (Ent))
+               and then Is_Object (Entity (Ent))
                and then Present (Renamed_Object (Entity (Ent)))
              loop
                 Ent := Renamed_Object (Entity (Ent));
*************** package body Exp_Ch5 is
*** 2438,2444 ****
              Rewrite (Lhs, OK_Convert_To (Base_Type (Typ), Lhs));
              Apply_Discriminant_Check (Rhs, Typ, Lhs);
  
!          elsif Is_Array_Type (Typ) and then Is_Constrained (Typ)  then
              Rewrite (Rhs, OK_Convert_To (Base_Type (Typ), Rhs));
              Rewrite (Lhs, OK_Convert_To (Base_Type (Typ), Lhs));
              Apply_Length_Check (Rhs, Typ);
--- 2664,2670 ----
              Rewrite (Lhs, OK_Convert_To (Base_Type (Typ), Lhs));
              Apply_Discriminant_Check (Rhs, Typ, Lhs);
  
!          elsif Is_Array_Type (Typ) and then Is_Constrained (Typ) then
              Rewrite (Rhs, OK_Convert_To (Base_Type (Typ), Rhs));
              Rewrite (Lhs, OK_Convert_To (Base_Type (Typ), Lhs));
              Apply_Length_Check (Rhs, Typ);
*************** package body Exp_Ch5 is
*** 2544,2550 ****
                                              (Entity (Lhs)), Loc),
                                       Expression =>
                                         Accessibility_Level
!                                          (Rhs, Dynamic_Level));
  
           begin
              if not Accessibility_Checks_Suppressed (Entity (Lhs)) then
--- 2770,2778 ----
                                              (Entity (Lhs)), Loc),
                                       Expression =>
                                         Accessibility_Level
!                                          (Expr            => Rhs,
!                                           Level           => Dynamic_Level,
!                                           Allow_Alt_Model => False));
  
           begin
              if not Accessibility_Checks_Suppressed (Entity (Lhs)) then
*************** package body Exp_Ch5 is
*** 3027,3033 ****
--- 3255,3883 ----
        Choice         : Node_Id;
        Chlist         : List_Id;
  
+       function Expand_General_Case_Statement return Node_Id;
+       --  Expand a case statement whose selecting expression is not discrete
+ 
+       -----------------------------------
+       -- Expand_General_Case_Statement --
+       -----------------------------------
+ 
+       function Expand_General_Case_Statement return Node_Id is
+          --  expand into a block statement
+ 
+          Selector : constant Entity_Id :=
+            Make_Temporary (Loc, 'J');
+ 
+          function Selector_Subtype_Mark return Node_Id is
+            (New_Occurrence_Of (Etype (Expr), Loc));
+ 
+          Renamed_Name : constant Node_Id :=
+            (if Is_Name_Reference (Expr)
+               then Expr
+               else Make_Qualified_Expression (Loc,
+                      Subtype_Mark => Selector_Subtype_Mark,
+                      Expression   => Expr));
+ 
+          Selector_Decl : constant Node_Id :=
+            Make_Object_Renaming_Declaration (Loc,
+              Defining_Identifier => Selector,
+              Subtype_Mark        => Selector_Subtype_Mark,
+              Name                => Renamed_Name);
+ 
+          First_Alt : constant Node_Id := First (Alternatives (N));
+ 
+          function Choice_Index_Decl_If_Needed return Node_Id;
+          --  If we are going to need a choice index object (that is, if
+          --  Multidefined_Bindings is true for at least one of the case
+          --  alternatives), then create and return that object's declaration.
+          --  Otherwise, return Empty; no need for a decl in that case because
+          --  it would never be referenced.
+ 
+          ---------------------------------
+          -- Choice_Index_Decl_If_Needed --
+          ---------------------------------
+ 
+          function Choice_Index_Decl_If_Needed return Node_Id is
+             Alt : Node_Id := First_Alt;
+          begin
+             while Present (Alt) loop
+                if Multidefined_Bindings (Alt) then
+                   return Make_Object_Declaration
+                     (Sloc => Loc,
+                      Defining_Identifier =>
+                        Make_Temporary (Loc, 'K'),
+                      Object_Definition =>
+                        New_Occurrence_Of (Standard_Positive, Loc));
+                end if;
+ 
+                Next (Alt);
+             end loop;
+             return Empty; -- decl not needed
+          end Choice_Index_Decl_If_Needed;
+ 
+          Choice_Index_Decl : constant Node_Id := Choice_Index_Decl_If_Needed;
+ 
+          function Pattern_Match
+            (Pattern      : Node_Id;
+             Object       : Node_Id;
+             Choice_Index : Natural;
+             Alt          : Node_Id;
+             Suppress_Choice_Index_Update : Boolean := False) return Node_Id;
+          --  Returns a Boolean-valued expression indicating a pattern match
+          --  for a given pattern and object. If Choice_Index is nonzero,
+          --  then Choice_Index is assigned to Choice_Index_Decl (unless
+          --  Suppress_Choice_Index_Update is specified, which should only
+          --  be the case for a recursive call where the caller has already
+          --  taken care of the update). Pattern occurs as a choice (or as a
+          --  subexpression of a choice) of the case statement alternative Alt.
+ 
+          function Top_Level_Pattern_Match_Condition
+            (Alt : Node_Id) return Node_Id;
+          --  Returns a Boolean-valued expression indicating a pattern match
+          --  for the given alternative's list of choices.
+ 
+          -------------------
+          -- Pattern_Match --
+          -------------------
+ 
+          function Pattern_Match
+            (Pattern      : Node_Id;
+             Object       : Node_Id;
+             Choice_Index : Natural;
+             Alt          : Node_Id;
+             Suppress_Choice_Index_Update : Boolean := False) return Node_Id
+          is
+             procedure Finish_Binding_Object_Declaration
+               (Component_Assoc : Node_Id; Subobject : Node_Id);
+             --  Finish the work that was started during analysis to
+             --  declare a binding object. If we are generating a copy,
+             --  then initialize it. If we are generating a renaming, then
+             --  initialize the access value designating the renamed object.
+ 
+             function Update_Choice_Index return Node_Id is (
+               Make_Assignment_Statement (Loc,
+                 Name       =>
+                   New_Occurrence_Of
+                     (Defining_Identifier (Choice_Index_Decl), Loc),
+                 Expression => Make_Integer_Literal (Loc, Pos (Choice_Index))));
+ 
+             function PM
+               (Pattern      : Node_Id;
+                Object       : Node_Id;
+                Choice_Index : Natural := Pattern_Match.Choice_Index;
+                Alt          : Node_Id := Pattern_Match.Alt;
+                Suppress_Choice_Index_Update : Boolean :=
+                  Pattern_Match.Suppress_Choice_Index_Update) return Node_Id
+               renames Pattern_Match;
+             --  convenient rename for recursive calls
+ 
+             function Indexed_Element (Idx : Pos) return Node_Id;
+             --  Returns the Nth (well, ok, the Idxth) element of Object
+ 
+             ---------------------------------------
+             -- Finish_Binding_Object_Declaration --
+             ---------------------------------------
+ 
+             procedure Finish_Binding_Object_Declaration
+               (Component_Assoc : Node_Id; Subobject : Node_Id)
+             is
+                Decl_Chars   : constant Name_Id :=
+                  Binding_Chars (Component_Assoc);
+ 
+                Block_Stmt   : constant Node_Id := First (Statements (Alt));
+                pragma Assert (Nkind (Block_Stmt) = N_Block_Statement);
+                pragma Assert (No (Next (Block_Stmt)));
+ 
+                Decl         : Node_Id := First (Declarations (Block_Stmt));
+                Def_Id       : Node_Id := Empty;
+ 
+                function Declare_Copy (Decl : Node_Id) return Boolean is
+                  (Nkind (Decl) = N_Object_Declaration);
+                --  Declare_Copy indicates which of the two approaches
+                --  was chosen during analysis: declare (and initialize)
+                --  a new variable, or use access values to declare a renaming
+                --  of the appropriate subcomponent of the selector value.
+ 
+                function Make_Conditional (Stmt : Node_Id) return Node_Id;
+                --  If there is only one choice for this alternative, then
+                --  simply return the argument. If there is more than one
+                --  choice, then wrap an if-statement around the argument
+                --  so that it is only executed if the current choice matches.
+ 
+                ----------------------
+                -- Make_Conditional --
+                ----------------------
+ 
+                function Make_Conditional (Stmt : Node_Id) return Node_Id
+                is
+                   Condition : Node_Id;
+                begin
+                   if Present (Choice_Index_Decl) then
+                      Condition :=
+                        Make_Op_Eq (Loc,
+                          New_Occurrence_Of
+                            (Defining_Identifier (Choice_Index_Decl), Loc),
+                          Make_Integer_Literal (Loc, Int (Choice_Index)));
+ 
+                      return Make_If_Statement (Loc,
+                               Condition       => Condition,
+                               Then_Statements => New_List (Stmt));
+                   else
+                      --  execute Stmt unconditionally
+                      return Stmt;
+                   end if;
+                end Make_Conditional;
+ 
+             begin
+                --  find the variable to be modified (and its declaration)
+                loop
+                   if Nkind (Decl) in N_Object_Declaration
+                     | N_Object_Renaming_Declaration
+                   then
+                      Def_Id := Defining_Identifier (Decl);
+                      exit when Chars (Def_Id) = Decl_Chars;
+                   end if;
+                   Next (Decl);
+                   pragma Assert (Present (Decl));
+                end loop;
+ 
+                --  For a binding object, we sometimes make a copy and
+                --  sometimes introduce a renaming. That decision is made
+                --  elsewhere. The renaming case involves dereferencing an
+                --  access value because of the possibility of multiple
+                --  choices (with multiple binding definitions) for a single
+                --  alternative. In the copy case, we initialize the copy
+                --  here (conditionally if there are multiple choices); in the
+                --  renaming case, we initialize (again, maybe conditionally)
+                --  the access value.
+ 
+                if Declare_Copy (Decl) then
+                   declare
+                      Assign_Value : constant Node_Id  :=
+                        Make_Assignment_Statement (Loc,
+                          Name       => New_Occurrence_Of (Def_Id, Loc),
+                          Expression => Subobject);
+ 
+                      HSS : constant Node_Id :=
+                        Handled_Statement_Sequence (Block_Stmt);
+                   begin
+                      Prepend (Make_Conditional (Assign_Value),
+                               Statements (HSS));
+                      Set_Analyzed (HSS, False);
+                   end;
+                else
+                   pragma Assert (Nkind (Name (Decl)) = N_Explicit_Dereference);
+ 
+                   declare
+                      Ptr_Obj  : constant Entity_Id :=
+                        Entity (Prefix (Name (Decl)));
+                      Ptr_Decl : constant Node_Id := Parent (Ptr_Obj);
+ 
+                      Assign_Reference : constant Node_Id :=
+                        Make_Assignment_Statement (Loc,
+                          Name       => New_Occurrence_Of (Ptr_Obj, Loc),
+                          Expression =>
+                            Make_Attribute_Reference (Loc,
+                              Prefix => Subobject,
+                              Attribute_Name => Name_Unrestricted_Access));
+                   begin
+                      Insert_After
+                        (After => Ptr_Decl,
+                         Node  => Make_Conditional (Assign_Reference));
+ 
+                      if Present (Expression (Ptr_Decl)) then
+                         --  Delete bogus initial value built during analysis.
+                         --  Look for "5432" in sem_case.adb.
+                         pragma Assert (Nkind (Expression (Ptr_Decl)) =
+                                        N_Unchecked_Type_Conversion);
+                         Set_Expression (Ptr_Decl, Empty);
+                      end if;
+                   end;
+                end if;
+ 
+                Set_Analyzed (Block_Stmt, False);
+             end Finish_Binding_Object_Declaration;
+ 
+             ---------------------
+             -- Indexed_Element --
+             ---------------------
+ 
+             function Indexed_Element (Idx : Pos) return Node_Id is
+                Obj_Index : constant Node_Id :=
+                  Make_Op_Add (Loc,
+                    Left_Opnd =>
+                      Make_Attribute_Reference (Loc,
+                        Attribute_Name => Name_First,
+                        Prefix => New_Copy_Tree (Object)),
+                    Right_Opnd =>
+                      Make_Integer_Literal (Loc, Idx - 1));
+             begin
+                return Make_Indexed_Component (Loc,
+                         Prefix => New_Copy_Tree (Object),
+                         Expressions => New_List (Obj_Index));
+             end Indexed_Element;
+ 
+          --  Start of processing for Pattern_Match
+ 
+          begin
+             if Choice_Index /= 0 and not Suppress_Choice_Index_Update then
+                pragma Assert (Present (Choice_Index_Decl));
+ 
+                --  Add Choice_Index update as a side effect of evaluating
+                --  this condition and try again, this time suppressing
+                --  Choice_Index update.
+ 
+                return Make_Expression_With_Actions (Loc,
+                         Actions => New_List (Update_Choice_Index),
+                         Expression =>
+                           PM (Pattern, Object,
+                               Suppress_Choice_Index_Update => True));
+             end if;
+ 
+             if Nkind (Pattern) in N_Has_Etype
+               and then Is_Discrete_Type (Etype (Pattern))
+               and then Compile_Time_Known_Value (Pattern)
+             then
+                declare
+                   Val : Node_Id;
+                begin
+                   if Is_Enumeration_Type (Etype (Pattern)) then
+                      Val := Get_Enum_Lit_From_Pos
+                               (Etype (Pattern), Expr_Value (Pattern), Loc);
+                   else
+                      Val := Make_Integer_Literal (Loc, Expr_Value (Pattern));
+                   end if;
+                   return Make_Op_Eq (Loc, Object, Val);
+                end;
+             end if;
+ 
+             case Nkind (Pattern) is
+                when N_Aggregate =>
+                   declare
+                      Result : Node_Id;
+                   begin
+                      if Is_Array_Type (Etype (Pattern)) then
+ 
+                         --  Nonpositional aggregates currently unimplemented.
+                         --  We flag that case during analysis, so an assertion
+                         --  is ok here.
+                         --
+                         pragma Assert
+                           (not Is_Non_Empty_List
+                                  (Component_Associations (Pattern)));
+ 
+                         declare
+                            Agg_Length : constant Node_Id :=
+                              Make_Integer_Literal (Loc,
+                                List_Length (Expressions (Pattern)));
+ 
+                            Obj_Length : constant Node_Id :=
+                              Make_Attribute_Reference (Loc,
+                                Attribute_Name => Name_Length,
+                                Prefix => New_Copy_Tree (Object));
+                         begin
+                            Result := Make_Op_Eq (Loc,
+                                        Left_Opnd  => Obj_Length,
+                                        Right_Opnd => Agg_Length);
+                         end;
+ 
+                         declare
+                            Expr : Node_Id := First (Expressions (Pattern));
+                            Idx  : Pos := 1;
+                         begin
+                            while Present (Expr) loop
+                               Result :=
+                                 Make_And_Then (Loc,
+                                   Left_Opnd  => Result,
+                                   Right_Opnd =>
+                                     PM (Pattern => Expr,
+                                         Object => Indexed_Element (Idx)));
+                               Next (Expr);
+                               Idx := Idx + 1;
+                            end loop;
+                         end;
+ 
+                         return Result;
+                      end if;
+ 
+                      --  positional notation should have been normalized
+                      pragma Assert (No (Expressions (Pattern)));
+ 
+                      declare
+                         Component_Assoc : Node_Id
+                           := First (Component_Associations (Pattern));
+                         Choice : Node_Id;
+ 
+                         function Subobject return Node_Id is
+                           (Make_Selected_Component (Loc,
+                              Prefix => New_Copy_Tree (Object),
+                              Selector_Name => New_Occurrence_Of
+                                                 (Entity (Choice), Loc)));
+                      begin
+                         Result := New_Occurrence_Of (Standard_True, Loc);
+ 
+                         while Present (Component_Assoc) loop
+                            Choice := First (Choices (Component_Assoc));
+                            while Present (Choice) loop
+                               pragma Assert
+                                 (Is_Entity_Name (Choice)
+                                    and then Ekind (Entity (Choice))
+                                               in E_Discriminant | E_Component);
+ 
+                               if Box_Present (Component_Assoc) then
+                                  --  Box matches anything
+ 
+                                  pragma Assert
+                                    (No (Expression (Component_Assoc)));
+                               else
+                                  Result := Make_And_Then (Loc,
+                                              Left_Opnd  => Result,
+                                              Right_Opnd =>
+                                                PM (Pattern =>
+                                                      Expression
+                                                        (Component_Assoc),
+                                                    Object => Subobject));
+                               end if;
+ 
+                               --  If this component association defines
+                               --  (in the case where the pattern matches)
+                               --  the value of a binding object, then
+                               --  prepend to the statement list for this
+                               --  alternative an assignment to the binding
+                               --  object. This assignment will be conditional
+                               --  if there is more than one choice.
+ 
+                               if Binding_Chars (Component_Assoc) /= No_Name
+                               then
+                                  Finish_Binding_Object_Declaration
+                                    (Component_Assoc => Component_Assoc,
+                                     Subobject => Subobject);
+                               end if;
+ 
+                               Next (Choice);
+                            end loop;
+ 
+                            Next (Component_Assoc);
+                         end loop;
+                      end;
+                      return Result;
+                   end;
+ 
+                when N_String_Literal =>
+                   return Result : Node_Id do
+                      declare
+                         Char_Type : constant Entity_Id :=
+                           Root_Type (Component_Type (Etype (Pattern)));
+ 
+                         --  If the component type is not a standard character
+                         --  type then this string lit should have already been
+                         --  transformed into an aggregate in
+                         --  Resolve_String_Literal.
+                         --
+                         pragma Assert (Is_Standard_Character_Type (Char_Type));
+ 
+                         Str    : constant String_Id  := Strval (Pattern);
+                         Strlen : constant Nat        := String_Length (Str);
+ 
+                         Lit_Length : constant Node_Id :=
+                           Make_Integer_Literal (Loc, Strlen);
+ 
+                         Obj_Length : constant Node_Id :=
+                           Make_Attribute_Reference (Loc,
+                             Attribute_Name => Name_Length,
+                             Prefix => New_Copy_Tree (Object));
+                      begin
+                         Result := Make_Op_Eq (Loc,
+                                     Left_Opnd  => Obj_Length,
+                                     Right_Opnd => Lit_Length);
+ 
+                         for Idx in 1 .. Strlen loop
+                            declare
+                               C           : constant Char_Code :=
+                                 Get_String_Char (Str, Idx);
+                               Obj_Element : constant Node_Id :=
+                                 Indexed_Element (Idx);
+                               Char_Lit    : Node_Id;
+                            begin
+                               Set_Character_Literal_Name (C);
+                               Char_Lit :=
+                                 Make_Character_Literal (Loc,
+                                   Chars              => Name_Find,
+                                   Char_Literal_Value => UI_From_CC (C));
+ 
+                               Result :=
+                                 Make_And_Then (Loc,
+                                   Left_Opnd  => Result,
+                                   Right_Opnd =>
+                                     Make_Op_Eq (Loc,
+                                       Left_Opnd  => Obj_Element,
+                                       Right_Opnd => Char_Lit));
+                            end;
+                         end loop;
+                      end;
+                   end return;
+ 
+                when N_Qualified_Expression =>
+                   return Make_And_Then (Loc,
+                     Left_Opnd  => Make_In (Loc,
+                       Left_Opnd  => New_Copy_Tree (Object),
+                       Right_Opnd => New_Copy_Tree (Subtype_Mark (Pattern))),
+                     Right_Opnd =>
+                       PM (Pattern => Expression (Pattern),
+                           Object  => New_Copy_Tree (Object)));
+ 
+                when N_Identifier | N_Expanded_Name =>
+                   if Is_Type (Entity (Pattern)) then
+                      return Make_In (Loc,
+                        Left_Opnd  => New_Copy_Tree (Object),
+                        Right_Opnd => New_Occurrence_Of
+                                        (Entity (Pattern), Loc));
+                   elsif Ekind (Entity (Pattern)) = E_Constant then
+                      return PM (Pattern =>
+                                   Expression (Parent (Entity (Pattern))),
+                                 Object => Object);
+                   end if;
+ 
+                when N_Others_Choice =>
+                   return New_Occurrence_Of (Standard_True, Loc);
+ 
+                when N_Type_Conversion =>
+                   --  aggregate expansion sometimes introduces conversions
+                   if not Comes_From_Source (Pattern)
+                     and then Base_Type (Etype (Pattern))
+                            = Base_Type (Etype (Expression (Pattern)))
+                   then
+                      return PM (Expression (Pattern), Object);
+                   end if;
+ 
+                when others =>
+                   null;
+             end case;
+ 
+             --  Avoid cascading errors
+             pragma Assert (Serious_Errors_Detected > 0);
+             return New_Occurrence_Of (Standard_True, Loc);
+          end Pattern_Match;
+ 
+          ---------------------------------------
+          -- Top_Level_Pattern_Match_Condition --
+          ---------------------------------------
+ 
+          function Top_Level_Pattern_Match_Condition
+            (Alt : Node_Id) return Node_Id
+          is
+             Top_Level_Object : constant Node_Id :=
+               New_Occurrence_Of (Selector, Loc);
+ 
+             Choices : constant List_Id := Discrete_Choices (Alt);
+ 
+             First_Choice : constant Node_Id := First (Choices);
+             Subsequent : Node_Id := Next (First_Choice);
+ 
+             Choice_Index : Natural := 0;
+          begin
+             if Multidefined_Bindings (Alt) then
+                Choice_Index := 1;
+             end if;
+ 
+             return Result : Node_Id :=
+               Pattern_Match (Pattern      => First_Choice,
+                              Object       => Top_Level_Object,
+                              Choice_Index => Choice_Index,
+                              Alt          => Alt)
+             do
+                while Present (Subsequent) loop
+                   if Choice_Index /= 0 then
+                      Choice_Index := Choice_Index + 1;
+                   end if;
+ 
+                   Result := Make_Or_Else (Loc,
+                     Left_Opnd  => Result,
+                     Right_Opnd => Pattern_Match
+                                     (Pattern      => Subsequent,
+                                      Object       => Top_Level_Object,
+                                      Choice_Index => Choice_Index,
+                                      Alt          => Alt));
+                   Subsequent := Next (Subsequent);
+                end loop;
+             end return;
+          end Top_Level_Pattern_Match_Condition;
+ 
+          function Elsif_Parts return List_Id;
+          --  Process subsequent alternatives
+ 
+          -----------------
+          -- Elsif_Parts --
+          -----------------
+ 
+          function Elsif_Parts return List_Id is
+             Alt : Node_Id := First_Alt;
+             Result : constant List_Id := New_List;
+          begin
+             loop
+                Alt := Next (Alt);
+                exit when No (Alt);
+ 
+                Append (Make_Elsif_Part (Loc,
+                          Condition => Top_Level_Pattern_Match_Condition (Alt),
+                          Then_Statements => Statements (Alt)),
+                        Result);
+             end loop;
+             return Result;
+          end Elsif_Parts;
+ 
+          function Else_Statements return List_Id;
+          --  Returns a "raise Constraint_Error" statement if
+          --  exception propagate is permitted and No_List otherwise.
+ 
+          ---------------------
+          -- Else_Statements --
+          ---------------------
+ 
+          function Else_Statements return List_Id is
+          begin
+             if Restriction_Active (No_Exception_Propagation) then
+                return No_List;
+             else
+                return New_List (Make_Raise_Constraint_Error (Loc,
+                                   Reason => CE_Invalid_Data));
+             end if;
+          end Else_Statements;
+ 
+          --  Local constants
+ 
+          If_Stmt : constant Node_Id :=
+            Make_If_Statement (Loc,
+               Condition       => Top_Level_Pattern_Match_Condition (First_Alt),
+               Then_Statements => Statements (First_Alt),
+               Elsif_Parts     => Elsif_Parts,
+               Else_Statements => Else_Statements);
+ 
+          Declarations : constant List_Id := New_List (Selector_Decl);
+ 
+       --  Start of processing for Expand_General_Case_Statment
+ 
+       begin
+          if Present (Choice_Index_Decl) then
+             Append_To (Declarations, Choice_Index_Decl);
+          end if;
+ 
+          return Make_Block_Statement (Loc,
+             Declarations => Declarations,
+             Handled_Statement_Sequence =>
+               Make_Handled_Sequence_Of_Statements (Loc,
+                 Statements => New_List (If_Stmt)));
+       end Expand_General_Case_Statement;
+ 
+    --  Start of processing for Expand_N_Case_Statement
+ 
     begin
+       if Extensions_Allowed and then not Is_Discrete_Type (Etype (Expr)) then
+          Rewrite (N, Expand_General_Case_Statement);
+          Analyze (N);
+          return;
+       end if;
+ 
        --  Check for the situation where we know at compile time which branch
        --  will be taken.
  
*************** package body Exp_Ch5 is
*** 3403,3409 ****
  
        Analyze (Init_Decl);
        Init_Name := Defining_Identifier (Init_Decl);
!       Set_Ekind (Init_Name, E_Loop_Parameter);
  
        --  The cursor was marked as a loop parameter to prevent user assignments
        --  to it, however this renders the advancement step illegal as it is not
--- 4253,4259 ----
  
        Analyze (Init_Decl);
        Init_Name := Defining_Identifier (Init_Decl);
!       Mutate_Ekind (Init_Name, E_Loop_Parameter);
  
        --  The cursor was marked as a loop parameter to prevent user assignments
        --  to it, however this renders the advancement step illegal as it is not
*************** package body Exp_Ch5 is
*** 3440,3446 ****
                      Make_Defining_Identifier (Loc,
                        Chars => New_External_Name (Chars (Element), 'C'));
        Elmt_Decl : Node_Id;
-       Elmt_Ref  : Node_Id;
  
        Element_Op : constant Entity_Id :=
                       Get_Iterable_Type_Primitive (Container_Typ, Name_Element);
--- 4290,4295 ----
*************** package body Exp_Ch5 is
*** 3451,3469 ****
  
     begin
        --  For an element iterator, the Element aspect must be present,
!       --  (this is checked during analysis) and the expansion takes the form:
! 
!       --    Cursor : Cursor_Type := First (Container);
!       --    Elmt : Element_Type;
!       --    while Has_Element (Cursor, Container) loop
!       --       Elmt := Element (Container, Cursor);
!       --          <original loop statements>
!       --       Cursor := Next (Container, Cursor);
!       --    end loop;
  
!       --   However this expansion is not legal if the element is indefinite.
!       --   In that case we create a block to hold a variable declaration
!       --   initialized with a call to Element, and generate:
  
        --    Cursor : Cursor_Type := First (Container);
        --    while Has_Element (Cursor, Container) loop
--- 4300,4309 ----
  
     begin
        --  For an element iterator, the Element aspect must be present,
!       --  (this is checked during analysis).
  
!       --  We create a block to hold a variable declaration initialized with
!       --  a call to Element, and generate:
  
        --    Cursor : Cursor_Type := First (Container);
        --    while Has_Element (Cursor, Container) loop
*************** package body Exp_Ch5 is
*** 3479,3485 ****
          (N, Container, Cursor, Init, Advance, New_Loop);
        Append_To (Stats, Advance);
  
!       Set_Ekind (Cursor, E_Variable);
        Insert_Action (N, Init);
  
        --  The loop parameter is declared by an object declaration, but within
--- 4319,4325 ----
          (N, Container, Cursor, Init, Advance, New_Loop);
        Append_To (Stats, Advance);
  
!       Mutate_Ekind (Cursor, E_Variable);
        Insert_Action (N, Init);
  
        --  The loop parameter is declared by an object declaration, but within
*************** package body Exp_Ch5 is
*** 3495,3542 ****
            Defining_Identifier => Element,
            Object_Definition   => New_Occurrence_Of (Etype (Element_Op), Loc));
  
!       if not Is_Constrained (Etype (Element_Op)) then
!          Set_Expression (Elmt_Decl,
!            Make_Function_Call (Loc,
!              Name                   => New_Occurrence_Of (Element_Op, Loc),
!              Parameter_Associations => New_List (
!                Convert_To_Iterable_Type (Container, Loc),
!                New_Occurrence_Of (Cursor, Loc))));
! 
!          Set_Statements (New_Loop,
!            New_List
!              (Make_Block_Statement (Loc,
!                 Declarations => New_List (Elmt_Decl),
!                 Handled_Statement_Sequence =>
!                   Make_Handled_Sequence_Of_Statements (Loc,
!                     Statements => Stats))));
! 
!       else
!          Elmt_Ref :=
!            Make_Assignment_Statement (Loc,
!              Name       => New_Occurrence_Of (Element, Loc),
!              Expression =>
!                Make_Function_Call (Loc,
!                  Name                   => New_Occurrence_Of (Element_Op, Loc),
!                  Parameter_Associations => New_List (
!                    Convert_To_Iterable_Type (Container, Loc),
!                    New_Occurrence_Of (Cursor, Loc))));
! 
!          Prepend (Elmt_Ref, Stats);
! 
!          --  The element is assignable in the expanded code
! 
!          Set_Assignment_OK (Name (Elmt_Ref));
! 
!          --  The loop is rewritten as a block, to hold the element declaration
  
!          New_Loop :=
!            Make_Block_Statement (Loc,
!              Declarations               => New_List (Elmt_Decl),
               Handled_Statement_Sequence =>
                 Make_Handled_Sequence_Of_Statements (Loc,
!                  Statements => New_List (New_Loop)));
!       end if;
  
        --  The element is only modified in expanded code, so it appears as
        --  unassigned to the warning machinery. We must suppress this spurious
--- 4335,4354 ----
            Defining_Identifier => Element,
            Object_Definition   => New_Occurrence_Of (Etype (Element_Op), Loc));
  
!       Set_Expression (Elmt_Decl,
!         Make_Function_Call (Loc,
!           Name                   => New_Occurrence_Of (Element_Op, Loc),
!           Parameter_Associations => New_List (
!             Convert_To_Iterable_Type (Container, Loc),
!             New_Occurrence_Of (Cursor, Loc))));
  
!       Set_Statements (New_Loop,
!         New_List
!           (Make_Block_Statement (Loc,
!              Declarations => New_List (Elmt_Decl),
               Handled_Statement_Sequence =>
                 Make_Handled_Sequence_Of_Statements (Loc,
!                  Statements => Stats))));
  
        --  The element is only modified in expanded code, so it appears as
        --  unassigned to the warning machinery. We must suppress this spurious
*************** package body Exp_Ch5 is
*** 3548,3559 ****
        Analyze (N);
     end Expand_Formal_Container_Element_Loop;
  
     ---------------------------
     -- Expand_N_If_Statement --
     ---------------------------
  
     --  First we deal with the case of C and Fortran convention boolean values,
!    --  with zero/non-zero semantics.
  
     --  Second, we deal with the obvious rewriting for the cases where the
     --  condition of the IF is known at compile time to be True or False.
--- 4360,4388 ----
        Analyze (N);
     end Expand_Formal_Container_Element_Loop;
  
+    ----------------------------------
+    -- Expand_N_Goto_When_Statement --
+    ----------------------------------
+ 
+    procedure Expand_N_Goto_When_Statement (N : Node_Id) is
+       Loc : constant Source_Ptr := Sloc (N);
+    begin
+       Rewrite (N,
+         Make_If_Statement (Loc,
+           Condition       => Condition (N),
+           Then_Statements => New_List (
+             Make_Goto_Statement (Loc,
+               Name => Name (N)))));
+ 
+       Analyze (N);
+    end Expand_N_Goto_When_Statement;
+ 
     ---------------------------
     -- Expand_N_If_Statement --
     ---------------------------
  
     --  First we deal with the case of C and Fortran convention boolean values,
!    --  with zero/nonzero semantics.
  
     --  Second, we deal with the obvious rewriting for the cases where the
     --  condition of the IF is known at compile time to be True or False.
*************** package body Exp_Ch5 is
*** 3646,3654 ****
              --  entire if statement by the sequence of else statements.
  
              if No (Elsif_Parts (N)) then
!                if No (Else_Statements (N))
!                  or else Is_Empty_List (Else_Statements (N))
!                then
                    Rewrite (N,
                      Make_Null_Statement (Sloc (N)));
                 else
--- 4475,4481 ----
              --  entire if statement by the sequence of else statements.
  
              if No (Elsif_Parts (N)) then
!                if Is_Empty_List (Else_Statements (N)) then
                    Rewrite (N,
                      Make_Null_Statement (Sloc (N)));
                 else
*************** package body Exp_Ch5 is
*** 3728,3736 ****
  
                 Set_Else_Statements (N, New_List (New_If));
  
!                if Present (Condition_Actions (E)) then
!                   Insert_List_Before (New_If, Condition_Actions (E));
!                end if;
  
                 Remove (E);
  
--- 4555,4561 ----
  
                 Set_Else_Statements (N, New_List (New_If));
  
!                Insert_List_Before (New_If, Condition_Actions (E));
  
                 Remove (E);
  
*************** package body Exp_Ch5 is
*** 3788,3849 ****
  
        --     return not (expression);
  
!       --  Only do these optimizations if we are at least at -O1 level and
!       --  do not do them if control flow optimizations are suppressed.
  
!       if Optimization_Level > 0
          and then not Opt.Suppress_Control_Flow_Optimizations
        then
!          if Nkind (N) = N_If_Statement
!            and then No (Elsif_Parts (N))
!            and then Present (Else_Statements (N))
!            and then List_Length (Then_Statements (N)) = 1
!            and then List_Length (Else_Statements (N)) = 1
!          then
!             declare
!                Then_Stm : constant Node_Id := First (Then_Statements (N));
!                Else_Stm : constant Node_Id := First (Else_Statements (N));
  
!             begin
!                if Nkind (Then_Stm) = N_Simple_Return_Statement
                      and then
!                   Nkind (Else_Stm) = N_Simple_Return_Statement
                 then
!                   declare
!                      Then_Expr : constant Node_Id := Expression (Then_Stm);
!                      Else_Expr : constant Node_Id := Expression (Else_Stm);
! 
!                   begin
!                      if Nkind (Then_Expr) in N_Expanded_Name | N_Identifier
!                           and then
!                         Nkind (Else_Expr) in N_Expanded_Name | N_Identifier
!                      then
!                         if Entity (Then_Expr) = Standard_True
!                           and then Entity (Else_Expr) = Standard_False
!                         then
!                            Rewrite (N,
!                              Make_Simple_Return_Statement (Loc,
!                                Expression => Relocate_Node (Condition (N))));
!                            Analyze (N);
!                            return;
  
!                         elsif Entity (Then_Expr) = Standard_False
!                           and then Entity (Else_Expr) = Standard_True
!                         then
!                            Rewrite (N,
!                              Make_Simple_Return_Statement (Loc,
!                                Expression =>
!                                  Make_Op_Not (Loc,
!                                    Right_Opnd =>
!                                      Relocate_Node (Condition (N)))));
!                            Analyze (N);
!                            return;
!                         end if;
!                      end if;
!                   end;
                 end if;
!             end;
!          end if;
        end if;
     end Expand_N_If_Statement;
  
--- 4613,4670 ----
  
        --     return not (expression);
  
!       --  Do these optimizations only for internally generated code and only
!       --  when -fpreserve-control-flow isn't set, to preserve the original
!       --  source control flow.
  
!       if not Comes_From_Source (N)
          and then not Opt.Suppress_Control_Flow_Optimizations
+         and then Nkind (N) = N_If_Statement
+         and then No (Elsif_Parts (N))
+         and then Present (Else_Statements (N))
+         and then List_Length (Then_Statements (N)) = 1
+         and then List_Length (Else_Statements (N)) = 1
        then
!          declare
!             Then_Stm : constant Node_Id := First (Then_Statements (N));
!             Else_Stm : constant Node_Id := First (Else_Statements (N));
  
!             Then_Expr : Node_Id;
!             Else_Expr : Node_Id;
! 
!          begin
!             if Nkind (Then_Stm) = N_Simple_Return_Statement
!                  and then
!                Nkind (Else_Stm) = N_Simple_Return_Statement
!             then
!                Then_Expr := Expression (Then_Stm);
!                Else_Expr := Expression (Else_Stm);
! 
!                if Nkind (Then_Expr) in N_Expanded_Name | N_Identifier
                      and then
!                   Nkind (Else_Expr) in N_Expanded_Name | N_Identifier
                 then
!                   if Entity (Then_Expr) = Standard_True
!                     and then Entity (Else_Expr) = Standard_False
!                   then
!                      Rewrite (N,
!                        Make_Simple_Return_Statement (Loc,
!                          Expression => Relocate_Node (Condition (N))));
!                      Analyze (N);
  
!                   elsif Entity (Then_Expr) = Standard_False
!                     and then Entity (Else_Expr) = Standard_True
!                   then
!                      Rewrite (N,
!                        Make_Simple_Return_Statement (Loc,
!                          Expression =>
!                            Make_Op_Not (Loc,
!                              Right_Opnd => Relocate_Node (Condition (N)))));
!                      Analyze (N);
!                   end if;
                 end if;
!             end if;
!          end;
        end if;
     end Expand_N_If_Statement;
  
*************** package body Exp_Ch5 is
*** 3900,3906 ****
  
     begin
        if Present (Iterator_Filter (I_Spec)) then
!          pragma Assert (Ada_Version >= Ada_2020);
           Stats := New_List (Make_If_Statement (Loc,
              Condition => Iterator_Filter (I_Spec),
              Then_Statements => Stats));
--- 4721,4727 ----
  
     begin
        if Present (Iterator_Filter (I_Spec)) then
!          pragma Assert (Ada_Version >= Ada_2022);
           Stats := New_List (Make_If_Statement (Loc,
              Condition => Iterator_Filter (I_Spec),
              Then_Statements => Stats));
*************** package body Exp_Ch5 is
*** 4201,4207 ****
  
     begin
        if Present (Iterator_Filter (I_Spec)) then
!          pragma Assert (Ada_Version >= Ada_2020);
           Stats := New_List (Make_If_Statement (Loc,
              Condition => Iterator_Filter (I_Spec),
              Then_Statements => Stats));
--- 5022,5028 ----
  
     begin
        if Present (Iterator_Filter (I_Spec)) then
!          pragma Assert (Ada_Version >= Ada_2022);
           Stats := New_List (Make_If_Statement (Loc,
              Condition => Iterator_Filter (I_Spec),
              Then_Statements => Stats));
*************** package body Exp_Ch5 is
*** 4484,4490 ****
                       (Container_Typ, Aspect_Variable_Indexing))
                or else not Is_Variable (Original_Node (Container))
              then
!                Set_Ekind (Id, E_Constant);
              end if;
  
              Prepend_To (Stats, Decl);
--- 5305,5311 ----
                       (Container_Typ, Aspect_Variable_Indexing))
                or else not Is_Variable (Original_Node (Container))
              then
!                Mutate_Ekind (Id, E_Constant);
              end if;
  
              Prepend_To (Stats, Decl);
*************** package body Exp_Ch5 is
*** 4620,4626 ****
           Set_Assignment_OK (Cursor_Decl);
  
           Insert_Action (N, Cursor_Decl);
!          Set_Ekind (Cursor, Id_Kind);
        end;
  
        --  If the range of iteration is given by a function call that returns
--- 5441,5447 ----
           Set_Assignment_OK (Cursor_Decl);
  
           Insert_Action (N, Cursor_Decl);
!          Mutate_Ekind (Cursor, Id_Kind);
        end;
  
        --  If the range of iteration is given by a function call that returns
*************** package body Exp_Ch5 is
*** 4628,4636 ****
        --  Condition_Actions of the iterator. Insert them now at the head of
        --  the loop.
  
!       if Present (Condition_Actions (Isc)) then
!          Insert_List_Before (N, Condition_Actions (Isc));
!       end if;
  
        Rewrite (N, New_Loop);
        Analyze (N);
--- 5449,5455 ----
        --  Condition_Actions of the iterator. Insert them now at the head of
        --  the loop.
  
!       Insert_List_Before (N, Condition_Actions (Isc));
  
        Rewrite (N, New_Loop);
        Analyze (N);
*************** package body Exp_Ch5 is
*** 4701,4707 ****
              end if;
  
              if Present (Iterator_Filter (LPS)) then
!                pragma Assert (Ada_Version >= Ada_2020);
                 Set_Statements (N,
                    New_List (Make_If_Statement (Loc,
                      Condition => Iterator_Filter (LPS),
--- 5520,5526 ----
              end if;
  
              if Present (Iterator_Filter (LPS)) then
!                pragma Assert (Ada_Version >= Ada_2022);
                 Set_Statements (N,
                    New_List (Make_If_Statement (Loc,
                      Condition => Iterator_Filter (LPS),
*************** package body Exp_Ch5 is
*** 5081,5087 ****
              --  identifier, since there may be references in the loop body.
  
              Set_Analyzed (Loop_Id, False);
!             Set_Ekind    (Loop_Id, E_Variable);
  
              --  In most loops the loop variable is assigned in various
              --  alternatives in the body. However, in the rare case when
--- 5900,5906 ----
              --  identifier, since there may be references in the loop body.
  
              Set_Analyzed (Loop_Id, False);
!             Mutate_Ekind (Loop_Id, E_Variable);
  
              --  In most loops the loop variable is assigned in various
              --  alternatives in the body. However, in the rare case when
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch5.ads gcc-12.1.0/gcc/ada/exp_ch5.ads
*** gcc-11.3.0/gcc/ada/exp_ch5.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch5.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Exp_Ch5 is
*** 32,37 ****
--- 32,38 ----
     procedure Expand_N_Block_Statement           (N : Node_Id);
     procedure Expand_N_Case_Statement            (N : Node_Id);
     procedure Expand_N_Exit_Statement            (N : Node_Id);
+    procedure Expand_N_Goto_When_Statement       (N : Node_Id);
     procedure Expand_N_If_Statement              (N : Node_Id);
     procedure Expand_N_Loop_Statement            (N : Node_Id);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch6.adb gcc-12.1.0/gcc/ada/exp_ch6.adb
*** gcc-11.3.0/gcc/ada/exp_ch6.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch6.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,79 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;     use Atree;
! with Aspects;   use Aspects;
! with Checks;    use Checks;
! with Contracts; use Contracts;
! with Debug;     use Debug;
! with Einfo;     use Einfo;
! with Errout;    use Errout;
! with Elists;    use Elists;
! with Expander;  use Expander;
! with Exp_Aggr;  use Exp_Aggr;
! with Exp_Atag;  use Exp_Atag;
! with Exp_Ch3;   use Exp_Ch3;
! with Exp_Ch7;   use Exp_Ch7;
! with Exp_Ch9;   use Exp_Ch9;
! with Exp_Dbug;  use Exp_Dbug;
! with Exp_Disp;  use Exp_Disp;
! with Exp_Dist;  use Exp_Dist;
! with Exp_Intr;  use Exp_Intr;
! with Exp_Pakd;  use Exp_Pakd;
! with Exp_Tss;   use Exp_Tss;
! with Exp_Util;  use Exp_Util;
! with Freeze;    use Freeze;
! with Inline;    use Inline;
! with Itypes;    use Itypes;
! with Lib;       use Lib;
! with Namet;     use Namet;
! with Nlists;    use Nlists;
! with Nmake;     use Nmake;
! with Opt;       use Opt;
! with Restrict;  use Restrict;
! with Rident;    use Rident;
! with Rtsfind;   use Rtsfind;
! with Sem;       use Sem;
! with Sem_Aux;   use Sem_Aux;
! with Sem_Ch6;   use Sem_Ch6;
! with Sem_Ch8;   use Sem_Ch8;
! with Sem_Ch13;  use Sem_Ch13;
! with Sem_Dim;   use Sem_Dim;
! with Sem_Disp;  use Sem_Disp;
! with Sem_Dist;  use Sem_Dist;
! with Sem_Eval;  use Sem_Eval;
! with Sem_Mech;  use Sem_Mech;
! with Sem_Res;   use Sem_Res;
! with Sem_SCIL;  use Sem_SCIL;
! with Sem_Util;  use Sem_Util;
! with Sinfo;     use Sinfo;
! with Snames;    use Snames;
! with Stand;     use Stand;
! with Tbuild;    use Tbuild;
! with Uintp;     use Uintp;
! with Validsw;   use Validsw;
  
  package body Exp_Ch6 is
  
--- 23,85 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Aspects;        use Aspects;
! with Checks;         use Checks;
! with Contracts;      use Contracts;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Elists;         use Elists;
! with Expander;       use Expander;
! with Exp_Aggr;       use Exp_Aggr;
! with Exp_Atag;       use Exp_Atag;
! with Exp_Ch3;        use Exp_Ch3;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Ch9;        use Exp_Ch9;
! with Exp_Dbug;       use Exp_Dbug;
! with Exp_Disp;       use Exp_Disp;
! with Exp_Dist;       use Exp_Dist;
! with Exp_Intr;       use Exp_Intr;
! with Exp_Pakd;       use Exp_Pakd;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Inline;         use Inline;
! with Itypes;         use Itypes;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Dim;        use Sem_Dim;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Mech;       use Sem_Mech;
! with Sem_Res;        use Sem_Res;
! with Sem_SCIL;       use Sem_SCIL;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Validsw;        use Validsw;
  
  package body Exp_Ch6 is
  
*************** package body Exp_Ch6 is
*** 598,604 ****
        --  Use a dummy _master actual in case of No_Task_Hierarchy
  
        if Restriction_Active (No_Task_Hierarchy) then
!          Actual := New_Occurrence_Of (RTE (RE_Library_Task_Level), Loc);
  
        --  In the case where we use the master associated with an access type,
        --  the actual is an entity and requires an explicit reference.
--- 604,610 ----
        --  Use a dummy _master actual in case of No_Task_Hierarchy
  
        if Restriction_Active (No_Task_Hierarchy) then
!          Actual := Make_Integer_Literal (Loc, Library_Task_Level);
  
        --  In the case where we use the master associated with an access type,
        --  the actual is an entity and requires an explicit reference.
*************** package body Exp_Ch6 is
*** 1799,1804 ****
--- 1805,1811 ----
                   and then Is_Entity_Name (Lhs)
                   and then
                     Present (Effective_Extra_Accessibility (Entity (Lhs)))
+                  and then not No_Dynamic_Accessibility_Checks_Enabled (Lhs)
                 then
                    --  Copyback target is an Ada 2012 stand-alone object of an
                    --  anonymous access type.
*************** package body Exp_Ch6 is
*** 1892,1898 ****
  
           Reset_Packed_Prefix;
  
!          Temp := Make_Temporary (Loc, 'T', Actual);
           Incod  := Relocate_Node (Actual);
           Outcod := New_Copy_Tree (Incod);
  
--- 1899,1905 ----
  
           Reset_Packed_Prefix;
  
!          Temp   := Make_Temporary (Loc, 'T', Actual);
           Incod  := Relocate_Node (Actual);
           Outcod := New_Copy_Tree (Incod);
  
*************** package body Exp_Ch6 is
*** 1914,1920 ****
  
           elsif Inside_Init_Proc then
  
!             --  Could use a comment here to match comment below ???
  
              if Nkind (Actual) /= N_Selected_Component
                or else
--- 1921,1930 ----
  
           elsif Inside_Init_Proc then
  
!             --  Skip using the actual as the expression in Decl if we are in
!             --  an init proc and it is not a component which depends on a
!             --  discriminant, because, in this case, we need to use the actual
!             --  type of the component instead.
  
              if Nkind (Actual) /= N_Selected_Component
                or else
*************** package body Exp_Ch6 is
*** 1923,1930 ****
              then
                 Incod := Empty;
  
!             --  Otherwise, keep the component in order to generate the proper
!             --  actual subtype, that depends on enclosing discriminants.
  
              else
                 null;
--- 1933,1941 ----
              then
                 Incod := Empty;
  
!             --  Otherwise, keep the component so we can generate the proper
!             --  actual subtype - since the subtype depends on enclosing
!             --  discriminants.
  
              else
                 null;
*************** package body Exp_Ch6 is
*** 2209,2215 ****
  
           --  Check for volatility mismatch
  
!          if Is_Volatile_Object (Actual) and then not Is_Volatile (E_Formal)
           then
              if Comes_From_Source (N) then
                 Error_Msg_N
--- 2220,2226 ----
  
           --  Check for volatility mismatch
  
!          if Is_Volatile_Object_Ref (Actual) and then not Is_Volatile (E_Formal)
           then
              if Comes_From_Source (N) then
                 Error_Msg_N
*************** package body Exp_Ch6 is
*** 2285,2292 ****
                 null;
  
              elsif Is_Build_In_Place_Function_Call (Actual) then
!                Build_Activation_Chain_Entity (N);
!                Build_Master_Entity (Etype (Actual));
                 Make_Build_In_Place_Call_In_Anonymous_Context (Actual);
  
              --  Ada 2005 (AI-318-02): Specialization of the previous case for
--- 2296,2306 ----
                 null;
  
              elsif Is_Build_In_Place_Function_Call (Actual) then
!                if Might_Have_Tasks (Etype (Actual)) then
!                   Build_Activation_Chain_Entity (N);
!                   Build_Master_Entity (Etype (Actual));
!                end if;
! 
                 Make_Build_In_Place_Call_In_Anonymous_Context (Actual);
  
              --  Ada 2005 (AI-318-02): Specialization of the previous case for
*************** package body Exp_Ch6 is
*** 2661,2667 ****
        --  itself must not be rewritten, to prevent infinite recursion).
  
        Must_Rewrite_Indirect_Call : constant Boolean :=
!         Ada_Version >= Ada_2020
            and then Nkind (Name (N)) = N_Explicit_Dereference
            and then Ekind (Etype (Name (N))) = E_Subprogram_Type
            and then Present
--- 2675,2681 ----
        --  itself must not be rewritten, to prevent infinite recursion).
  
        Must_Rewrite_Indirect_Call : constant Boolean :=
!         Ada_Version >= Ada_2022
            and then Nkind (Name (N)) = N_Explicit_Dereference
            and then Ekind (Etype (Name (N))) = E_Subprogram_Type
            and then Present
*************** package body Exp_Ch6 is
*** 2803,2809 ****
  
        procedure Check_Subprogram_Variant;
        --  Emit a call to the internally generated procedure with checks for
!       --  aspect Subprogrgram_Variant, if present and enabled.
  
        function Inherited_From_Formal (S : Entity_Id) return Entity_Id;
        --  Within an instance, a type derived from an untagged formal derived
--- 2817,2823 ----
  
        procedure Check_Subprogram_Variant;
        --  Emit a call to the internally generated procedure with checks for
!       --  aspect Subprogram_Variant, if present and enabled.
  
        function Inherited_From_Formal (S : Entity_Id) return Entity_Id;
        --  Within an instance, a type derived from an untagged formal derived
*************** package body Exp_Ch6 is
*** 2925,2931 ****
                        Name       => New_Occurrence_Of (Lvl, Loc),
                        Expression =>
                          Accessibility_Level
!                           (Expression (Res_Assn), Dynamic_Level)));
                 end if;
              end Expand_Branch;
  
--- 2939,2947 ----
                        Name       => New_Occurrence_Of (Lvl, Loc),
                        Expression =>
                          Accessibility_Level
!                           (Expr            => Expression (Res_Assn),
!                            Level           => Dynamic_Level,
!                            Allow_Alt_Model => False)));
                 end if;
              end Expand_Branch;
  
*************** package body Exp_Ch6 is
*** 3134,3139 ****
--- 3150,3162 ----
        function Can_Fold_Predicate_Call (P : Entity_Id) return Boolean is
           Actual : Node_Id;
  
+          function Augments_Other_Dynamic_Predicate (DP_Aspect_Spec : Node_Id)
+            return Boolean;
+          --  Given a Dynamic_Predicate aspect aspecification for a
+          --  discrete type, returns True iff another DP specification
+          --  applies (indirectly, via a subtype type or a derived type)
+          --  to the same entity that this aspect spec applies to.
+ 
           function May_Fold (N : Node_Id) return Traverse_Result;
           --  The predicate expression is foldable if it only contains operators
           --  and literals. During this check, we also replace occurrences of
*************** package body Exp_Ch6 is
*** 3141,3146 ****
--- 3164,3199 ----
           --  value of the actual. This is done on a copy of the analyzed
           --  expression for the predicate.
  
+          --------------------------------------
+          -- Augments_Other_Dynamic_Predicate --
+          --------------------------------------
+ 
+          function Augments_Other_Dynamic_Predicate (DP_Aspect_Spec : Node_Id)
+            return Boolean
+          is
+             Aspect_Bearer : Entity_Id := Entity (DP_Aspect_Spec);
+          begin
+             loop
+                Aspect_Bearer := Nearest_Ancestor (Aspect_Bearer);
+ 
+                if not Present (Aspect_Bearer) then
+                   return False;
+                end if;
+ 
+                declare
+                   Aspect_Spec : constant Node_Id :=
+                     Find_Aspect (Aspect_Bearer, Aspect_Dynamic_Predicate);
+                begin
+                   if Present (Aspect_Spec)
+                     and then Aspect_Spec /= DP_Aspect_Spec
+                   then
+                      --  Found another Dynamic_Predicate aspect spec
+                      return True;
+                   end if;
+                end;
+             end loop;
+          end Augments_Other_Dynamic_Predicate;
+ 
           --------------
           -- May_Fold --
           --------------
*************** package body Exp_Ch6 is
*** 3183,3189 ****
  
           function Try_Fold is new Traverse_Func (May_Fold);
  
!          --  Other lLocal variables
  
           Subt   : constant Entity_Id := Etype (First_Entity (P));
           Aspect : Node_Id;
--- 3236,3242 ----
  
           function Try_Fold is new Traverse_Func (May_Fold);
  
!          --  Other Local variables
  
           Subt   : constant Entity_Id := Etype (First_Entity (P));
           Aspect : Node_Id;
*************** package body Exp_Ch6 is
*** 3211,3216 ****
--- 3264,3274 ----
             or else Nkind (Actual) /= N_Integer_Literal
             or else not Has_Dynamic_Predicate_Aspect (Subt)
             or else No (Aspect)
+ 
+            --  Do not fold if multiple applicable predicate aspects
+            or else Present (Find_Aspect (Subt, Aspect_Static_Predicate))
+            or else Present (Find_Aspect (Subt, Aspect_Predicate))
+            or else Augments_Other_Dynamic_Predicate (Aspect)
             or else CodePeer_Mode
           then
              return False;
*************** package body Exp_Ch6 is
*** 3473,3484 ****
        Scop          : Entity_Id;
        Subp          : Entity_Id;
  
-       Prev_Orig : Node_Id;
-       --  Original node for an actual, which may have been rewritten. If the
-       --  actual is a function call that has been transformed from a selected
-       --  component, the original node is unanalyzed. Otherwise, it carries
-       --  semantic information used to generate additional actuals.
- 
        CW_Interface_Formals_Present : Boolean := False;
  
     --  Start of processing for Expand_Call_Helper
--- 3531,3536 ----
*************** package body Exp_Ch6 is
*** 3591,3597 ****
                 Ren_Root := Alias (Ren_Root);
              end if;
  
!             if Present (Original_Node (Parent (Parent (Ren_Root)))) then
                 Ren_Decl := Original_Node (Parent (Parent (Ren_Root)));
  
                 if Nkind (Ren_Decl) = N_Subprogram_Renaming_Declaration then
--- 3643,3651 ----
                 Ren_Root := Alias (Ren_Root);
              end if;
  
!             if Present (Parent (Ren_Root))
!               and then Present (Original_Node (Parent (Parent (Ren_Root))))
!             then
                 Ren_Decl := Original_Node (Parent (Parent (Ren_Root)));
  
                 if Nkind (Ren_Decl) = N_Subprogram_Renaming_Declaration then
*************** package body Exp_Ch6 is
*** 3739,3745 ****
           --  Prepare to examine current entry
  
           Prev := Actual;
-          Prev_Orig := Original_Node (Prev);
  
           --  Ada 2005 (AI-251): Check if any formal is a class-wide interface
           --  to expand it in a further round.
--- 3793,3798 ----
*************** package body Exp_Ch6 is
*** 3759,3765 ****
           --  because the object has underlying discriminants with defaults.
  
           if Present (Extra_Constrained (Formal)) then
!             if Ekind (Etype (Prev)) in Private_Kind
                and then not Has_Discriminants (Base_Type (Etype (Prev)))
              then
                 Add_Extra_Actual
--- 3812,3818 ----
           --  because the object has underlying discriminants with defaults.
  
           if Present (Extra_Constrained (Formal)) then
!             if Is_Private_Type (Etype (Prev))
                and then not Has_Discriminants (Base_Type (Etype (Prev)))
              then
                 Add_Extra_Actual
*************** package body Exp_Ch6 is
*** 3801,3807 ****
                    --  is internally generated code that manipulates addresses,
                    --  e.g. when building interface tables. No check should
                    --  occur in this case, and the discriminated object is not
!                   --  directly a hand.
  
                    if not Comes_From_Source (Actual)
                      and then Nkind (Actual) = N_Unchecked_Type_Conversion
--- 3854,3860 ----
                    --  is internally generated code that manipulates addresses,
                    --  e.g. when building interface tables. No check should
                    --  occur in this case, and the discriminated object is not
!                   --  directly at hand.
  
                    if not Comes_From_Source (Actual)
                      and then Nkind (Actual) = N_Unchecked_Type_Conversion
*************** package body Exp_Ch6 is
*** 3828,3890 ****
           --  Create possible extra actual for accessibility level
  
           if Present (Extra_Accessibility (Formal)) then
- 
-             --  Ada 2005 (AI-252): If the actual was rewritten as an Access
-             --  attribute, then the original actual may be an aliased object
-             --  occurring as the prefix in a call using "Object.Operation"
-             --  notation. In that case we must pass the level of the object,
-             --  so Prev_Orig is reset to Prev and the attribute will be
-             --  processed by the code for Access attributes further below.
- 
-             if Prev_Orig /= Prev
-               and then Nkind (Prev) = N_Attribute_Reference
-               and then Get_Attribute_Id (Attribute_Name (Prev)) =
-                          Attribute_Access
-               and then Is_Aliased_View (Prev_Orig)
-             then
-                Prev_Orig := Prev;
- 
-             --  A class-wide precondition generates a test in which formals of
-             --  the subprogram are replaced by actuals that came from source.
-             --  In that case as well, the accessiblity comes from the actual.
-             --  This is the one case in which there are references to formals
-             --  outside of their subprogram.
- 
-             elsif Prev_Orig /= Prev
-               and then Is_Entity_Name (Prev_Orig)
-               and then Present (Entity (Prev_Orig))
-               and then Is_Formal (Entity (Prev_Orig))
-               and then not In_Open_Scopes (Scope (Entity (Prev_Orig)))
-             then
-                Prev_Orig := Prev;
- 
-             --  If the actual is a formal of an enclosing subprogram it is
-             --  the right entity, even if it is a rewriting. This happens
-             --  when the call is within an inherited condition or predicate.
- 
-             elsif Is_Entity_Name (Actual)
-               and then Is_Formal (Entity (Actual))
-               and then In_Open_Scopes (Scope (Entity (Actual)))
-             then
-                Prev_Orig := Prev;
- 
-             --  If the actual is an attribute reference that was expanded
-             --  into a reference to an entity, then get accessibility level
-             --  from that entity. AARM 6.1.1(27.d) says "... the implicit
-             --  constant declaration defines the accessibility level of X'Old".
- 
-             elsif Nkind (Prev_Orig) = N_Attribute_Reference
-               and then Attribute_Name (Prev_Orig) in Name_Old | Name_Loop_Entry
-               and then Is_Entity_Name (Prev)
-               and then Present (Entity (Prev))
-               and then Is_Object (Entity (Prev))
-             then
-                Prev_Orig := Prev;
- 
-             elsif Nkind (Prev_Orig) = N_Type_Conversion then
-                Prev_Orig := Expression (Prev_Orig);
-             end if;
- 
              --  Ada 2005 (AI-251): Thunks must propagate the extra actuals of
              --  accessibility levels.
  
--- 3881,3886 ----
*************** package body Exp_Ch6 is
*** 3915,3923 ****
                    end if;
  
                    Add_Extra_Actual
!                     (Expr =>
!                        New_Occurrence_Of
!                          (Get_Dynamic_Accessibility (Parm_Ent), Loc),
                       EF   => Extra_Accessibility (Formal));
                 end;
  
--- 3911,3920 ----
                    end if;
  
                    Add_Extra_Actual
!                     (Expr => Accessibility_Level
!                                (Expr            => Parm_Ent,
!                                 Level           => Dynamic_Level,
!                                 Allow_Alt_Model => False),
                       EF   => Extra_Accessibility (Formal));
                 end;
  
*************** package body Exp_Ch6 is
*** 3929,3939 ****
              then
                 Add_Cond_Expression_Extra_Actual (Formal);
  
              --  Normal case
  
              else
                 Add_Extra_Actual
!                  (Expr => Accessibility_Level (Prev, Dynamic_Level),
                    EF   => Extra_Accessibility (Formal));
              end if;
           end if;
--- 3926,3964 ----
              then
                 Add_Cond_Expression_Extra_Actual (Formal);
  
+             --  Internal constant generated to remove side effects (normally
+             --  from the expansion of dispatching calls).
+ 
+             --  First verify the actual is internal
+ 
+             elsif not Comes_From_Source (Prev)
+               and then Original_Node (Prev) = Prev
+ 
+               --  Next check that the actual is a constant
+ 
+               and then Nkind (Prev) = N_Identifier
+               and then Ekind (Entity (Prev)) = E_Constant
+               and then Nkind (Parent (Entity (Prev))) = N_Object_Declaration
+             then
+                --  Generate the accessibility level based on the expression in
+                --  the constant's declaration.
+ 
+                Add_Extra_Actual
+                  (Expr => Accessibility_Level
+                             (Expr            => Expression
+                                                   (Parent (Entity (Prev))),
+                              Level           => Dynamic_Level,
+                              Allow_Alt_Model => False),
+                   EF   => Extra_Accessibility (Formal));
+ 
              --  Normal case
  
              else
                 Add_Extra_Actual
!                  (Expr => Accessibility_Level
!                             (Expr            => Prev,
!                              Level           => Dynamic_Level,
!                              Allow_Alt_Model => False),
                    EF   => Extra_Accessibility (Formal));
              end if;
           end if;
*************** package body Exp_Ch6 is
*** 4091,4097 ****
              end;
           end if;
  
!          --  If the formal is class wide and the actual is an aggregate, force
           --  evaluation so that the back end who does not know about class-wide
           --  type, does not generate a temporary of the wrong size.
  
--- 4116,4122 ----
              end;
           end if;
  
!          --  If the formal is class-wide and the actual is an aggregate, force
           --  evaluation so that the back end who does not know about class-wide
           --  type, does not generate a temporary of the wrong size.
  
*************** package body Exp_Ch6 is
*** 4177,4184 ****
              --  Otherwise get the level normally based on the call node
  
              else
!                Level := Accessibility_Level (Call_Node, Dynamic_Level);
! 
              end if;
  
              --  It may be possible that we are re-expanding an already
--- 4202,4211 ----
              --  Otherwise get the level normally based on the call node
  
              else
!                Level := Accessibility_Level
!                           (Expr            => Call_Node,
!                            Level           => Dynamic_Level,
!                            Allow_Alt_Model => False);
              end if;
  
              --  It may be possible that we are re-expanding an already
*************** package body Exp_Ch6 is
*** 4274,4279 ****
--- 4301,4316 ----
           Expand_Interface_Actuals (Call_Node);
        end if;
  
+       --  Install class-wide preconditions runtime check when this is a
+       --  dispatching primitive that has or inherits class-wide preconditions;
+       --  otherwise no runtime check is installed.
+ 
+       if Nkind (Call_Node) in N_Subprogram_Call
+         and then Is_Dispatching_Operation (Subp)
+       then
+          Install_Class_Preconditions_Check (Call_Node);
+       end if;
+ 
        --  Deals with Dispatch_Call if we still have a call, before expanding
        --  extra actuals since this will be done on the re-analysis of the
        --  dispatching call. Note that we do not try to shorten the actual list
*************** package body Exp_Ch6 is
*** 4285,4290 ****
--- 4322,4337 ----
        if Nkind (Call_Node) in N_Subprogram_Call
          and then Present (Controlling_Argument (Call_Node))
        then
+          if Tagged_Type_Expansion then
+             Expand_Dispatching_Call (Call_Node);
+ 
+             --  Expand_Dispatching_Call takes care of all the needed processing
+ 
+             return;
+          end if;
+ 
+          --  VM targets
+ 
           declare
              Call_Typ   : constant Entity_Id := Etype (Call_Node);
              Typ        : constant Entity_Id := Find_Dispatching_Type (Subp);
*************** package body Exp_Ch6 is
*** 4294,4362 ****
              Prev_Call  : Node_Id;
  
           begin
              if not Is_Limited_Type (Typ) then
                 Eq_Prim_Op := Find_Prim_Op (Typ, Name_Op_Eq);
              end if;
  
!             if Tagged_Type_Expansion then
!                Expand_Dispatching_Call (Call_Node);
! 
!                --  The following return is worrisome. Is it really OK to skip
!                --  all remaining processing in this procedure ???
! 
!                return;
! 
!             --  VM targets
! 
!             else
!                Apply_Tag_Checks (Call_Node);
! 
!                --  If this is a dispatching "=", we must first compare the
!                --  tags so we generate: x.tag = y.tag and then x = y
! 
!                if Subp = Eq_Prim_Op then
  
!                   --  Mark the node as analyzed to avoid reanalyzing this
!                   --  dispatching call (which would cause a never-ending loop)
  
!                   Prev_Call := Relocate_Node (Call_Node);
!                   Set_Analyzed (Prev_Call);
  
!                   Param := First_Actual (Call_Node);
!                   New_Call :=
!                     Make_And_Then (Loc,
!                       Left_Opnd =>
!                            Make_Op_Eq (Loc,
!                              Left_Opnd =>
!                                Make_Selected_Component (Loc,
!                                  Prefix        => New_Value (Param),
!                                  Selector_Name =>
!                                    New_Occurrence_Of
!                                      (First_Tag_Component (Typ), Loc)),
  
!                              Right_Opnd =>
!                                Make_Selected_Component (Loc,
!                                  Prefix        =>
!                                    Unchecked_Convert_To (Typ,
!                                      New_Value (Next_Actual (Param))),
!                                  Selector_Name =>
!                                    New_Occurrence_Of
!                                      (First_Tag_Component (Typ), Loc))),
!                       Right_Opnd => Prev_Call);
  
!                   Rewrite (Call_Node, New_Call);
  
!                   Analyze_And_Resolve
!                     (Call_Node, Call_Typ, Suppress => All_Checks);
!                end if;
  
!                --  Expansion of a dispatching call results in an indirect call,
!                --  which in turn causes current values to be killed (see
!                --  Resolve_Call), so on VM targets we do the call here to
!                --  ensure consistent warnings between VM and non-VM targets.
  
!                Kill_Current_Values;
!             end if;
  
              --  If this is a dispatching "=" then we must update the reference
              --  to the call node because we generated:
--- 4341,4396 ----
              Prev_Call  : Node_Id;
  
           begin
+             Apply_Tag_Checks (Call_Node);
+ 
              if not Is_Limited_Type (Typ) then
                 Eq_Prim_Op := Find_Prim_Op (Typ, Name_Op_Eq);
              end if;
  
!             --  If this is a dispatching "=", we must first compare the
!             --  tags so we generate: x.tag = y.tag and then x = y
  
!             if Subp = Eq_Prim_Op then
  
!                --  Mark the node as analyzed to avoid reanalyzing this
!                --  dispatching call (which would cause a never-ending loop)
  
!                Prev_Call := Relocate_Node (Call_Node);
!                Set_Analyzed (Prev_Call);
  
!                Param := First_Actual (Call_Node);
!                New_Call :=
!                  Make_And_Then (Loc,
!                    Left_Opnd =>
!                         Make_Op_Eq (Loc,
!                           Left_Opnd =>
!                             Make_Selected_Component (Loc,
!                               Prefix        => New_Value (Param),
!                               Selector_Name =>
!                                 New_Occurrence_Of
!                                   (First_Tag_Component (Typ), Loc)),
  
!                           Right_Opnd =>
!                             Make_Selected_Component (Loc,
!                               Prefix        =>
!                                 Unchecked_Convert_To (Typ,
!                                   New_Value (Next_Actual (Param))),
!                               Selector_Name =>
!                                 New_Occurrence_Of
!                                   (First_Tag_Component (Typ), Loc))),
!                    Right_Opnd => Prev_Call);
  
!                Rewrite (Call_Node, New_Call);
!                Analyze_And_Resolve
!                  (Call_Node, Call_Typ, Suppress => All_Checks);
!             end if;
  
!             --  Expansion of a dispatching call results in an indirect call,
!             --  which in turn causes current values to be killed (see
!             --  Resolve_Call), so on VM targets we do the call here to
!             --  ensure consistent warnings between VM and non-VM targets.
  
!             Kill_Current_Values;
  
              --  If this is a dispatching "=" then we must update the reference
              --  to the call node because we generated:
*************** package body Exp_Ch6 is
*** 4407,4412 ****
--- 4441,4447 ----
        --  the current subprogram is called.
  
        if Is_Subprogram (Subp)
+         and then not Is_Ignored_Ghost_Entity (Subp)
          and then Same_Or_Aliased_Subprograms (Subp, Current_Scope)
        then
           Check_Subprogram_Variant;
*************** package body Exp_Ch6 is
*** 4547,4552 ****
--- 4582,4589 ----
                         or else
                           (Is_Record_Type (Formal_Typ)
                             and then Is_Record_Type (Parent_Typ)))
+                     and then Known_Esize (Formal_Typ)
+                     and then Known_Esize (Parent_Typ)
                      and then
                        (Esize (Formal_Typ) /= Esize (Parent_Typ)
                          or else Has_Pragma_Pack (Formal_Typ) /=
*************** package body Exp_Ch6 is
*** 4940,4946 ****
        --  Optimization, if the returned value (which is on the sec-stack) is
        --  returned again, no need to copy/readjust/finalize, we can just pass
        --  the value thru (see Expand_N_Simple_Return_Statement), and thus no
!       --  attachment is needed
  
        if Nkind (Parent (N)) = N_Simple_Return_Statement then
           return;
--- 4977,4983 ----
        --  Optimization, if the returned value (which is on the sec-stack) is
        --  returned again, no need to copy/readjust/finalize, we can just pass
        --  the value thru (see Expand_N_Simple_Return_Statement), and thus no
!       --  attachment is needed.
  
        if Nkind (Parent (N)) = N_Simple_Return_Statement then
           return;
*************** package body Exp_Ch6 is
*** 5164,5170 ****
                 --  Perform minor decoration in order to set the master and the
                 --  storage pool attributes.
  
!                Set_Ekind                   (Ptr_Typ, E_Access_Type);
                 Set_Finalization_Master     (Ptr_Typ, Fin_Mas_Id);
                 Set_Associated_Storage_Pool (Ptr_Typ, Pool_Id);
  
--- 5201,5207 ----
                 --  Perform minor decoration in order to set the master and the
                 --  storage pool attributes.
  
!                Mutate_Ekind                (Ptr_Typ, E_Access_Type);
                 Set_Finalization_Master     (Ptr_Typ, Fin_Mas_Id);
                 Set_Associated_Storage_Pool (Ptr_Typ, Pool_Id);
  
*************** package body Exp_Ch6 is
*** 5879,5889 ****
                               Name       =>
                                 New_Occurrence_Of (Alloc_Obj_Id, Loc),
                               Expression =>
!                                Make_Unchecked_Type_Conversion (Loc,
!                                  Subtype_Mark =>
!                                    New_Occurrence_Of (Ref_Type, Loc),
!                                  Expression   =>
!                                    New_Occurrence_Of (Obj_Acc_Formal, Loc)))),
  
                           Elsif_Parts => New_List (
                             Make_Elsif_Part (Loc,
--- 5916,5924 ----
                               Name       =>
                                 New_Occurrence_Of (Alloc_Obj_Id, Loc),
                               Expression =>
!                                Unchecked_Convert_To
!                                  (Ref_Type,
!                                   New_Occurrence_Of (Obj_Acc_Formal, Loc)))),
  
                           Elsif_Parts => New_List (
                             Make_Elsif_Part (Loc,
*************** package body Exp_Ch6 is
*** 6024,6034 ****
                           Object_Definition   =>
                             New_Occurrence_Of (Ref_Type, Loc),
                           Expression =>
!                            Make_Unchecked_Type_Conversion (Loc,
!                              Subtype_Mark =>
!                                New_Occurrence_Of (Ref_Type, Loc),
!                              Expression   =>
!                                New_Occurrence_Of (Obj_Acc_Formal, Loc)));
  
                       Insert_Before (Ret_Obj_Decl, Alloc_Obj_Decl);
  
--- 6059,6067 ----
                           Object_Definition   =>
                             New_Occurrence_Of (Ref_Type, Loc),
                           Expression =>
!                            Unchecked_Convert_To
!                              (Ref_Type,
!                               New_Occurrence_Of (Obj_Acc_Formal, Loc)));
  
                       Insert_Before (Ret_Obj_Decl, Alloc_Obj_Decl);
  
*************** package body Exp_Ch6 is
*** 6073,6078 ****
--- 6106,6112 ----
        --  Set the flag to prevent infinite recursion
  
        Set_Comes_From_Extended_Return_Statement (Return_Stmt);
+       Set_Return_Statement (Ret_Obj_Id, Return_Stmt);
  
        Rewrite (N, Result);
  
*************** package body Exp_Ch6 is
*** 6103,6108 ****
--- 6137,6159 ----
        Expand_Call (N);
     end Expand_N_Procedure_Call_Statement;
  
+    ------------------------------------
+    -- Expand_N_Return_When_Statement --
+    ------------------------------------
+ 
+    procedure Expand_N_Return_When_Statement (N : Node_Id) is
+       Loc : constant Source_Ptr := Sloc (N);
+    begin
+       Rewrite (N,
+         Make_If_Statement (Loc,
+           Condition       => Condition (N),
+           Then_Statements => New_List (
+             Make_Simple_Return_Statement (Loc,
+               Expression => Expression (N)))));
+ 
+       Analyze (N);
+    end Expand_N_Return_When_Statement;
+ 
     --------------------------------------
     -- Expand_N_Simple_Return_Statement --
     --------------------------------------
*************** package body Exp_Ch6 is
*** 6246,6252 ****
              --  has contract assertions that need to be verified on exit.
  
              --  Also, mark the successful return to signal that postconditions
!             --  need to be evaluated when finalization occurs.
  
              if Ekind (Spec_Id) = E_Procedure
                and then Present (Postconditions_Proc (Spec_Id))
--- 6297,6304 ----
              --  has contract assertions that need to be verified on exit.
  
              --  Also, mark the successful return to signal that postconditions
!             --  need to be evaluated when finalization occurs by setting
!             --  Return_Success_For_Postcond to be True.
  
              if Ekind (Spec_Id) = E_Procedure
                and then Present (Postconditions_Proc (Spec_Id))
*************** package body Exp_Ch6 is
*** 6254,6275 ****
                 --  Generate:
                 --
                 --    Return_Success_For_Postcond := True;
!                --    _postconditions;
  
                 Insert_Action (Stmt,
                   Make_Assignment_Statement (Loc,
                     Name       =>
                       New_Occurrence_Of
!                       (Get_Return_Success_For_Postcond (Spec_Id), Loc),
                     Expression => New_Occurrence_Of (Standard_True, Loc)));
  
                 Insert_Action (Stmt,
!                  Make_Procedure_Call_Statement (Loc,
!                    Name =>
!                      New_Occurrence_Of (Postconditions_Proc (Spec_Id), Loc)));
              end if;
  
!             --  Ada 2020 (AI12-0279): append the call to 'Yield unless this is
              --  a generic subprogram (since in such case it will be added to
              --  the instantiations).
  
--- 6306,6338 ----
                 --  Generate:
                 --
                 --    Return_Success_For_Postcond := True;
!                --    if Postcond_Enabled then
!                --       _postconditions;
!                --    end if;
  
                 Insert_Action (Stmt,
                   Make_Assignment_Statement (Loc,
                     Name       =>
                       New_Occurrence_Of
!                        (Get_Return_Success_For_Postcond (Spec_Id), Loc),
                     Expression => New_Occurrence_Of (Standard_True, Loc)));
  
+                --  Wrap the call to _postconditions within a test of the
+                --  Postcond_Enabled flag to delay postcondition evaluation
+                --  until after finalization when required.
+ 
                 Insert_Action (Stmt,
!                  Make_If_Statement (Loc,
!                    Condition       =>
!                      New_Occurrence_Of (Get_Postcond_Enabled (Spec_Id), Loc),
!                    Then_Statements => New_List (
!                      Make_Procedure_Call_Statement (Loc,
!                        Name =>
!                          New_Occurrence_Of
!                            (Postconditions_Proc (Spec_Id), Loc)))));
              end if;
  
!             --  Ada 2022 (AI12-0279): append the call to 'Yield unless this is
              --  a generic subprogram (since in such case it will be added to
              --  the instantiations).
  
*************** package body Exp_Ch6 is
*** 6439,6456 ****
        --  Returns_By_Ref flag is normally set when the subprogram is frozen but
        --  subprograms with no specs are not frozen.
  
!       declare
!          Typ  : constant Entity_Id := Etype (Spec_Id);
!          Utyp : constant Entity_Id := Underlying_Type (Typ);
! 
!       begin
!          if Is_Limited_View (Typ) then
!             Set_Returns_By_Ref (Spec_Id);
! 
!          elsif Present (Utyp) and then CW_Or_Has_Controlled_Part (Utyp) then
!             Set_Returns_By_Ref (Spec_Id);
!          end if;
!       end;
  
        --  For a procedure, we add a return for all possible syntactic ends of
        --  the subprogram.
--- 6502,6508 ----
        --  Returns_By_Ref flag is normally set when the subprogram is frozen but
        --  subprograms with no specs are not frozen.
  
!       Compute_Returns_By_Ref (Spec_Id);
  
        --  For a procedure, we add a return for all possible syntactic ends of
        --  the subprogram.
*************** package body Exp_Ch6 is
*** 6699,6705 ****
           --  Generate:
           --
           --    Return_Success_For_Postcond := True;
!          --    _postconditions;
  
           Insert_Action (N,
             Make_Assignment_Statement (Loc,
--- 6751,6759 ----
           --  Generate:
           --
           --    Return_Success_For_Postcond := True;
!          --    if Postcond_Enabled then
!          --       _postconditions;
!          --    end if;
  
           Insert_Action (N,
             Make_Assignment_Statement (Loc,
*************** package body Exp_Ch6 is
*** 6708,6719 ****
                  (Get_Return_Success_For_Postcond (Scope_Id), Loc),
               Expression => New_Occurrence_Of (Standard_True, Loc)));
  
           Insert_Action (N,
!            Make_Procedure_Call_Statement (Loc,
!              Name => New_Occurrence_Of (Postconditions_Proc (Scope_Id), Loc)));
        end if;
  
!       --  Ada 2020 (AI12-0279)
  
        if Has_Yield_Aspect (Scope_Id)
          and then RTE_Available (RE_Yield)
--- 6762,6783 ----
                  (Get_Return_Success_For_Postcond (Scope_Id), Loc),
               Expression => New_Occurrence_Of (Standard_True, Loc)));
  
+          --  Wrap the call to _postconditions within a test of the
+          --  Postcond_Enabled flag to delay postcondition evaluation until
+          --  after finalization when required.
+ 
           Insert_Action (N,
!            Make_If_Statement (Loc,
!              Condition       =>
!                New_Occurrence_Of (Get_Postcond_Enabled (Scope_Id), Loc),
!              Then_Statements => New_List (
!                Make_Procedure_Call_Statement (Loc,
!                  Name =>
!                    New_Occurrence_Of
!                      (Postconditions_Proc (Scope_Id), Loc)))));
        end if;
  
!       --  Ada 2022 (AI12-0279)
  
        if Has_Yield_Aspect (Scope_Id)
          and then RTE_Available (RE_Yield)
*************** package body Exp_Ch6 is
*** 7310,7324 ****
  
           Set_Enclosing_Sec_Stack_Return (N);
  
!          --  Optimize the case where the result is a function call. In this
!          --  case the result is already on the secondary stack and no further
!          --  processing is required except to set the By_Ref flag to ensure
!          --  that gigi does not attempt an extra unnecessary copy. (Actually
!          --  not just unnecessary but wrong in the case of a controlled type,
!          --  where gigi does not know how to do a copy.)
  
!          if Requires_Transient_Scope (Exp_Typ)
!            and then Exp_Is_Function_Call
           then
              Set_By_Ref (N);
  
--- 7374,7389 ----
  
           Set_Enclosing_Sec_Stack_Return (N);
  
!          --  Optimize the case where the result is a function call that also
!          --  returns on the secondary stack. In this case the result is already
!          --  on the secondary stack and no further processing is required
!          --  except to set the By_Ref flag to ensure that gigi does not attempt
!          --  an extra unnecessary copy. (Actually not just unnecessary but
!          --  wrong in the case of a controlled type, where gigi does not know
!          --  how to do a copy.)
  
!          pragma Assert (Requires_Transient_Scope (R_Type));
!          if Exp_Is_Function_Call and then Requires_Transient_Scope (Exp_Typ)
           then
              Set_By_Ref (N);
  
*************** package body Exp_Ch6 is
*** 7358,7364 ****
                 Temp       : Entity_Id;
  
              begin
!                Set_Ekind (Acc_Typ, E_Access_Type);
  
                 Set_Associated_Storage_Pool (Acc_Typ, RTE (RE_SS_Pool));
  
--- 7423,7429 ----
                 Temp       : Entity_Id;
  
              begin
!                Mutate_Ekind (Acc_Typ, E_Access_Type);
  
                 Set_Associated_Storage_Pool (Acc_Typ, RTE (RE_SS_Pool));
  
*************** package body Exp_Ch6 is
*** 7434,7439 ****
--- 7499,7508 ----
          and then not Is_Class_Wide_Type (Utyp)
          and then (Nkind (Exp) in
                        N_Type_Conversion | N_Unchecked_Type_Conversion
+                     or else (Nkind (Exp) = N_Explicit_Dereference
+                                and then Nkind (Prefix (Exp)) in
+                                           N_Type_Conversion |
+                                           N_Unchecked_Type_Conversion)
                      or else (Is_Entity_Name (Exp)
                                 and then Is_Formal (Entity (Exp))))
        then
*************** package body Exp_Ch6 is
*** 7547,7552 ****
--- 7616,7628 ----
               Suppress  => All_Checks);
        end if;
  
+       --  If the result is of an unconstrained array subtype with fixed lower
+       --  bound, then sliding to that bound may be needed.
+ 
+       if Is_Fixed_Lower_Bound_Array_Subtype (R_Type) then
+          Expand_Sliding_Conversion (Exp, R_Type);
+       end if;
+ 
        --  If we are returning a nonscalar object that is possibly unaligned,
        --  then copy the value into a temporary first. This copy may need to
        --  expand to a loop of component operations.
*************** package body Exp_Ch6 is
*** 7621,7626 ****
--- 7697,7705 ----
           --  Generate:
           --
           --    Return_Success_For_Postcond := True;
+          --    if Postcond_Enabled then
+          --       _Postconditions ([exp]);
+          --    end if;
  
           Insert_Action (Exp,
             Make_Assignment_Statement (Loc,
*************** package body Exp_Ch6 is
*** 7629,7641 ****
                  (Get_Return_Success_For_Postcond (Scope_Id), Loc),
               Expression => New_Occurrence_Of (Standard_True, Loc)));
  
!          --  Generate call to _Postconditions
  
           Insert_Action (Exp,
!            Make_Procedure_Call_Statement (Loc,
!              Name                   =>
!                New_Occurrence_Of (Postconditions_Proc (Scope_Id), Loc),
!              Parameter_Associations => New_List (New_Copy_Tree (Exp))));
        end if;
  
        --  Ada 2005 (AI-251): If this return statement corresponds with an
--- 7708,7727 ----
                  (Get_Return_Success_For_Postcond (Scope_Id), Loc),
               Expression => New_Occurrence_Of (Standard_True, Loc)));
  
!          --  Wrap the call to _postconditions within a test of the
!          --  Postcond_Enabled flag to delay postcondition evaluation until
!          --  after finalization when required.
  
           Insert_Action (Exp,
!            Make_If_Statement (Loc,
!              Condition       =>
!                New_Occurrence_Of (Get_Postcond_Enabled (Scope_Id), Loc),
!              Then_Statements => New_List (
!                Make_Procedure_Call_Statement (Loc,
!                  Name                   =>
!                    New_Occurrence_Of
!                      (Postconditions_Proc (Scope_Id), Loc),
!                  Parameter_Associations => New_List (New_Copy_Tree (Exp))))));
        end if;
  
        --  Ada 2005 (AI-251): If this return statement corresponds with an
*************** package body Exp_Ch6 is
*** 7653,7659 ****
           Analyze_And_Resolve (Exp);
        end if;
  
!       --  Ada 2020 (AI12-0279)
  
        if Has_Yield_Aspect (Scope_Id)
          and then RTE_Available (RE_Yield)
--- 7739,7745 ----
           Analyze_And_Resolve (Exp);
        end if;
  
!       --  Ada 2022 (AI12-0279)
  
        if Has_Yield_Aspect (Scope_Id)
          and then RTE_Available (RE_Yield)
*************** package body Exp_Ch6 is
*** 7830,7859 ****
        --  of the normal semantic analysis of the spec since the underlying
        --  returned type may not be known yet (for private types).
  
!       declare
!          Typ  : constant Entity_Id := Etype (Subp);
!          Utyp : constant Entity_Id := Underlying_Type (Typ);
! 
!       begin
!          if Is_Limited_View (Typ) then
!             Set_Returns_By_Ref (Subp);
! 
!          elsif Present (Utyp) and then CW_Or_Has_Controlled_Part (Utyp) then
!             Set_Returns_By_Ref (Subp);
!          end if;
!       end;
! 
!       --  Wnen freezing a null procedure, analyze its delayed aspects now
!       --  because we may not have reached the end of the declarative list when
!       --  delayed aspects are normally analyzed. This ensures that dispatching
!       --  calls are properly rewritten when the generated _Postcondition
!       --  procedure is analyzed in the null procedure body.
! 
!       if Nkind (Parent (Subp)) = N_Procedure_Specification
!         and then Null_Present (Parent (Subp))
!       then
!          Analyze_Entry_Or_Subprogram_Contract (Subp);
!       end if;
     end Freeze_Subprogram;
  
     --------------------------
--- 7916,7922 ----
        --  of the normal semantic analysis of the spec since the underlying
        --  returned type may not be known yet (for private types).
  
!       Compute_Returns_By_Ref (Subp);
     end Freeze_Subprogram;
  
     --------------------------
*************** package body Exp_Ch6 is
*** 8088,8093 ****
--- 8151,8517 ----
        end if;
     end Insert_Post_Call_Actions;
  
+    ---------------------------------------
+    -- Install_Class_Preconditions_Check --
+    ---------------------------------------
+ 
+    procedure Install_Class_Preconditions_Check (Call_Node : Node_Id) is
+       Loc : constant Source_Ptr := Sloc (Call_Node);
+ 
+       function Build_Dynamic_Check_Helper_Call return Node_Id;
+       --  Build call to the helper runtime function of the nearest ancestor
+       --  of the target subprogram that dynamically evaluates the merged
+       --  or-else preconditions.
+ 
+       function Build_Error_Message (Subp_Id : Entity_Id) return Node_Id;
+       --  Build message associated with the class-wide precondition of Subp_Id
+       --  indicating the call that caused it.
+ 
+       function Build_Static_Check_Helper_Call return Node_Id;
+       --  Build call to the helper runtime function of the nearest ancestor
+       --  of the target subprogram that dynamically evaluates the merged
+       --  or-else preconditions.
+ 
+       function Class_Preconditions_Subprogram
+         (Spec_Id : Entity_Id;
+          Dynamic : Boolean) return Node_Id;
+       --  Return the nearest ancestor of Spec_Id defining a helper function
+       --  that evaluates a combined or-else expression containing all the
+       --  inherited class-wide preconditions; Dynamic enables searching for
+       --  the helper that dynamically evaluates preconditions using dispatching
+       --  calls; if False it searches for the helper that statically evaluates
+       --  preconditions; return Empty when not available (which means that no
+       --  preconditions check is required).
+ 
+       -------------------------------------
+       -- Build_Dynamic_Check_Helper_Call --
+       -------------------------------------
+ 
+       function Build_Dynamic_Check_Helper_Call return Node_Id is
+          Spec_Id   : constant Entity_Id := Entity (Name (Call_Node));
+          CW_Subp   : constant Entity_Id :=
+                        Class_Preconditions_Subprogram (Spec_Id,
+                          Dynamic => True);
+          Helper_Id : constant Entity_Id :=
+                        Dynamic_Call_Helper (CW_Subp);
+          Actuals   : constant List_Id := New_List;
+          A         : Node_Id   := First_Actual (Call_Node);
+          F         : Entity_Id := First_Formal (Helper_Id);
+ 
+       begin
+          while Present (A) loop
+ 
+             --  Ensure that the evaluation of the actuals will not produce
+             --  side effects.
+ 
+             Remove_Side_Effects (A);
+ 
+             Append_To (Actuals, New_Copy_Tree (A));
+             Next_Formal (F);
+             Next_Actual (A);
+          end loop;
+ 
+          return
+            Make_Function_Call (Loc,
+              Name => New_Occurrence_Of (Helper_Id, Loc),
+              Parameter_Associations => Actuals);
+       end Build_Dynamic_Check_Helper_Call;
+ 
+       -------------------------
+       -- Build_Error_Message --
+       -------------------------
+ 
+       function Build_Error_Message (Subp_Id : Entity_Id) return Node_Id is
+ 
+          procedure Append_Message
+            (Id       : Entity_Id;
+             Is_First : in out Boolean);
+          --  Build the fragment of the message associated with subprogram Id;
+          --  Is_First facilitates identifying continuation messages.
+ 
+          --------------------
+          -- Append_Message --
+          --------------------
+ 
+          procedure Append_Message
+            (Id       : Entity_Id;
+             Is_First : in out Boolean)
+          is
+             Prag   : constant Node_Id := Get_Class_Wide_Pragma (Id,
+                                          Pragma_Precondition);
+             Msg    : Node_Id;
+             Str_Id : String_Id;
+ 
+          begin
+             if No (Prag) or else Is_Ignored (Prag) then
+                return;
+             end if;
+ 
+             Msg    := Expression (Last (Pragma_Argument_Associations (Prag)));
+             Str_Id := Strval (Msg);
+ 
+             if Is_First then
+                Is_First := False;
+ 
+                Append (Global_Name_Buffer, Strval (Msg));
+ 
+                if Id /= Subp_Id
+                  and then Name_Buffer (1 .. 19) = "failed precondition"
+                then
+                   Insert_Str_In_Name_Buffer ("inherited ", 8);
+                end if;
+ 
+             else
+                declare
+                   Str      : constant String := To_String (Str_Id);
+                   From_Idx : Integer;
+ 
+                begin
+                   Append (Global_Name_Buffer, ASCII.LF);
+                   Append (Global_Name_Buffer, "  or ");
+ 
+                   From_Idx := Name_Len;
+                   Append (Global_Name_Buffer, Str_Id);
+ 
+                   if Str (1 .. 19) = "failed precondition" then
+                      Insert_Str_In_Name_Buffer ("inherited ", From_Idx + 8);
+                   end if;
+                end;
+             end if;
+          end Append_Message;
+ 
+          --  Local variables
+ 
+          Str_Loc  : constant String := Build_Location_String (Loc);
+          Subps    : constant Subprogram_List :=
+                       Inherited_Subprograms (Subp_Id);
+          Is_First : Boolean := True;
+ 
+       --  Start of processing for Build_Error_Message
+ 
+       begin
+          Name_Len := 0;
+          Append_Message (Subp_Id, Is_First);
+ 
+          for Index in Subps'Range loop
+             Append_Message (Subps (Index), Is_First);
+          end loop;
+ 
+          if Present (Controlling_Argument (Call_Node)) then
+             Append (Global_Name_Buffer, " in dispatching call at ");
+          else
+             Append (Global_Name_Buffer, " in call at ");
+          end if;
+ 
+          Append (Global_Name_Buffer, Str_Loc);
+ 
+          return Make_String_Literal (Loc, Name_Buffer (1 .. Name_Len));
+       end Build_Error_Message;
+ 
+       ------------------------------------
+       -- Build_Static_Check_Helper_Call --
+       ------------------------------------
+ 
+       function Build_Static_Check_Helper_Call return Node_Id is
+          Actuals   : constant List_Id := New_List;
+          A         : Node_Id;
+          Helper_Id : Entity_Id;
+          F         : Entity_Id;
+          CW_Subp   : Entity_Id;
+          Spec_Id   : constant Entity_Id := Entity (Name (Call_Node));
+ 
+       begin
+          --  The target is the wrapper built to support inheriting body but
+          --  overriding pre/postconditions (AI12-0195).
+ 
+          if Is_Dispatch_Table_Wrapper (Spec_Id) then
+             CW_Subp := Spec_Id;
+ 
+          --  Common case
+ 
+          else
+             CW_Subp := Class_Preconditions_Subprogram (Spec_Id,
+                          Dynamic => False);
+          end if;
+ 
+          Helper_Id := Static_Call_Helper (CW_Subp);
+ 
+          F := First_Formal (Helper_Id);
+          A := First_Actual (Call_Node);
+          while Present (A) loop
+ 
+             --  Ensure that the evaluation of the actuals will not produce
+             --  side effects.
+ 
+             Remove_Side_Effects (A);
+ 
+             if Is_Controlling_Actual (A)
+               and then Etype (F) /= Etype (A)
+             then
+                Append_To (Actuals,
+                  Make_Unchecked_Type_Conversion (Loc,
+                    New_Occurrence_Of (Etype (F), Loc),
+                    New_Copy_Tree (A)));
+             else
+                Append_To (Actuals, New_Copy_Tree (A));
+             end if;
+ 
+             Next_Formal (F);
+             Next_Actual (A);
+          end loop;
+ 
+          return
+            Make_Function_Call (Loc,
+              Name => New_Occurrence_Of (Helper_Id, Loc),
+              Parameter_Associations => Actuals);
+       end Build_Static_Check_Helper_Call;
+ 
+       ------------------------------------
+       -- Class_Preconditions_Subprogram --
+       ------------------------------------
+ 
+       function Class_Preconditions_Subprogram
+         (Spec_Id : Entity_Id;
+          Dynamic : Boolean) return Node_Id
+       is
+          Subp_Id : constant Entity_Id := Ultimate_Alias (Spec_Id);
+ 
+       begin
+          --  Prevent cascaded errors
+ 
+          if not Is_Dispatching_Operation (Subp_Id) then
+             return Empty;
+ 
+          --  No need to search if this subprogram has the helper we are
+          --  searching
+ 
+          elsif Dynamic then
+             if Present (Dynamic_Call_Helper (Subp_Id)) then
+                return Subp_Id;
+             end if;
+          else
+             if Present (Static_Call_Helper (Subp_Id)) then
+                return Subp_Id;
+             end if;
+          end if;
+ 
+          --  Process inherited subprograms looking for class-wide
+          --  preconditions.
+ 
+          declare
+             Subps   : constant Subprogram_List :=
+                         Inherited_Subprograms (Subp_Id);
+             Subp_Id : Entity_Id;
+ 
+          begin
+             for Index in Subps'Range loop
+                Subp_Id := Subps (Index);
+ 
+                if Present (Alias (Subp_Id)) then
+                   Subp_Id := Ultimate_Alias (Subp_Id);
+                end if;
+ 
+                --  Wrappers of class-wide pre/postconditions reference the
+                --  parent primitive that has the inherited contract.
+ 
+                if Is_Wrapper (Subp_Id)
+                  and then Present (LSP_Subprogram (Subp_Id))
+                then
+                   Subp_Id := LSP_Subprogram (Subp_Id);
+                end if;
+ 
+                if Dynamic then
+                   if Present (Dynamic_Call_Helper (Subp_Id)) then
+                      return Subp_Id;
+                   end if;
+                else
+                   if Present (Static_Call_Helper (Subp_Id)) then
+                      return Subp_Id;
+                   end if;
+                end if;
+             end loop;
+          end;
+ 
+          return Empty;
+       end Class_Preconditions_Subprogram;
+ 
+       --  Local variables
+ 
+       Dynamic_Check : constant Boolean :=
+                         Present (Controlling_Argument (Call_Node));
+       Class_Subp    : Entity_Id;
+       Cond          : Node_Id;
+       Subp          : Entity_Id;
+ 
+    --  Start of processing for Install_Class_Preconditions_Check
+ 
+    begin
+       --  Do not expand the check if we are compiling under restriction
+       --  No_Dispatching_Calls; the semantic analyzer has previously
+       --  notified the violation of this restriction.
+ 
+       if Dynamic_Check
+         and then Restriction_Active (No_Dispatching_Calls)
+       then
+          return;
+ 
+       --  Class-wide precondition check not needed in interface thunks since
+       --  they are installed in the dispatching call that caused invoking the
+       --  thunk.
+ 
+       elsif Is_Thunk (Current_Scope) then
+          return;
+       end if;
+ 
+       Subp := Entity (Name (Call_Node));
+ 
+       --  No check needed for this subprogram call if no class-wide
+       --  preconditions apply (or if the unique available preconditions
+       --  are ignored preconditions).
+ 
+       Class_Subp := Class_Preconditions_Subprogram (Subp, Dynamic_Check);
+ 
+       if No (Class_Subp)
+         or else No (Class_Preconditions (Class_Subp))
+       then
+          return;
+       end if;
+ 
+       --  Build and install the check
+ 
+       if Dynamic_Check then
+          Cond := Build_Dynamic_Check_Helper_Call;
+       else
+          Cond := Build_Static_Check_Helper_Call;
+       end if;
+ 
+       if Exception_Locations_Suppressed then
+          Insert_Action (Call_Node,
+            Make_If_Statement (Loc,
+              Condition       => Make_Op_Not (Loc, Cond),
+              Then_Statements => New_List (
+                Make_Raise_Statement (Loc,
+                  Name =>
+                    New_Occurrence_Of
+                      (RTE (RE_Assert_Failure), Loc)))));
+ 
+       --  Failed check with message indicating the failed precondition and the
+       --  call that caused it.
+ 
+       else
+          Insert_Action (Call_Node,
+            Make_If_Statement (Loc,
+              Condition       => Make_Op_Not (Loc, Cond),
+              Then_Statements => New_List (
+                Make_Procedure_Call_Statement (Loc,
+                  Name                   =>
+                    New_Occurrence_Of
+                      (RTE (RE_Raise_Assert_Failure), Loc),
+                  Parameter_Associations =>
+                    New_List (Build_Error_Message (Subp))))));
+       end if;
+    end Install_Class_Preconditions_Check;
+ 
     -----------------------------------
     -- Is_Build_In_Place_Result_Type --
     -----------------------------------
*************** package body Exp_Ch6 is
*** 8213,8222 ****
           return False;
        end if;
  
-       --  For now we test whether E denotes a function or access-to-function
-       --  type whose result subtype is inherently limited. Later this test
-       --  may be revised to allow composite nonlimited types.
- 
        if Ekind (E) in E_Function | E_Generic_Function
          or else (Ekind (E) = E_Subprogram_Type
                    and then Etype (E) /= Standard_Void_Type)
--- 8637,8642 ----
*************** package body Exp_Ch6 is
*** 8272,8277 ****
--- 8692,8706 ----
        --  This may be a call to a protected function.
  
        elsif Nkind (Name (Exp_Node)) = N_Selected_Component then
+          --  The selector in question might not have been analyzed due to a
+          --  previous error, so analyze it here to output the appropriate
+          --  error message instead of crashing when attempting to fetch its
+          --  entity.
+ 
+          if not Analyzed (Selector_Name (Name (Exp_Node))) then
+             Analyze (Selector_Name (Name (Exp_Node)));
+          end if;
+ 
           Function_Id := Etype (Entity (Selector_Name (Name (Exp_Node))));
  
        else
*************** package body Exp_Ch6 is
*** 8504,8515 ****
  
           Alloc_Form := Caller_Allocation;
           Pool := Make_Null (No_Location);
!          Return_Obj_Actual :=
!            Make_Unchecked_Type_Conversion (Loc,
!              Subtype_Mark => New_Occurrence_Of (Result_Subt, Loc),
!              Expression   =>
!                Make_Explicit_Dereference (Loc,
!                  Prefix => New_Occurrence_Of (Return_Obj_Access, Loc)));
  
        --  When the result subtype is unconstrained, the function itself must
        --  perform the allocation of the return object, so we pass parameters
--- 8933,8942 ----
  
           Alloc_Form := Caller_Allocation;
           Pool := Make_Null (No_Location);
!          Return_Obj_Actual := Unchecked_Convert_To
!            (Result_Subt,
!             Make_Explicit_Dereference (Loc,
!               Prefix => New_Occurrence_Of (Return_Obj_Access, Loc)));
  
        --  When the result subtype is unconstrained, the function itself must
        --  perform the allocation of the return object, so we pass parameters
*************** package body Exp_Ch6 is
*** 8823,8833 ****
        --  the caller's return object.
  
        Add_Access_Actual_To_Build_In_Place_Call
!         (Func_Call,
!          Func_Id,
!          Make_Unchecked_Type_Conversion (Loc,
!            Subtype_Mark => New_Occurrence_Of (Result_Subt, Loc),
!            Expression   => Relocate_Node (Lhs)));
  
        --  Create an access type designating the function's result subtype
  
--- 9250,9256 ----
        --  the caller's return object.
  
        Add_Access_Actual_To_Build_In_Place_Call
!         (Func_Call, Func_Id, Unchecked_Convert_To (Result_Subt, Lhs));
  
        --  Create an access type designating the function's result subtype
  
*************** package body Exp_Ch6 is
*** 8851,8861 ****
  
        --  Add a conversion if it's the wrong type
  
!       if Etype (New_Expr) /= Ptr_Typ then
!          New_Expr :=
!            Make_Unchecked_Type_Conversion (Loc,
!              New_Occurrence_Of (Ptr_Typ, Loc), New_Expr);
!       end if;
  
        Obj_Id := Make_Temporary (Loc, 'R', New_Expr);
        Set_Etype (Obj_Id, Ptr_Typ);
--- 9274,9280 ----
  
        --  Add a conversion if it's the wrong type
  
!       New_Expr := Unchecked_Convert_To (Ptr_Typ, New_Expr);
  
        Obj_Id := Make_Temporary (Loc, 'R', New_Expr);
        Set_Etype (Obj_Id, Ptr_Typ);
*************** package body Exp_Ch6 is
*** 9114,9129 ****
           --  it to the access type of the callee's BIP_Object_Access formal.
  
           Caller_Object :=
!            Make_Unchecked_Type_Conversion (Loc,
!              Subtype_Mark =>
!                New_Occurrence_Of
!                  (Etype (Build_In_Place_Formal
!                     (Function_Id, BIP_Object_Access)),
!                   Loc),
!              Expression   =>
!                New_Occurrence_Of
!                  (Build_In_Place_Formal (Encl_Func, BIP_Object_Access),
!                   Loc));
  
        --  In the definite case, add an implicit actual to the function call
        --  that provides access to the declared object. An unchecked conversion
--- 9533,9542 ----
           --  it to the access type of the callee's BIP_Object_Access formal.
  
           Caller_Object :=
!            Unchecked_Convert_To
!              (Etype (Build_In_Place_Formal (Function_Id, BIP_Object_Access)),
!               New_Occurrence_Of
!                 (Build_In_Place_Formal (Encl_Func, BIP_Object_Access), Loc));
  
        --  In the definite case, add an implicit actual to the function call
        --  that provides access to the declared object. An unchecked conversion
*************** package body Exp_Ch6 is
*** 9131,9140 ****
        --  the case where the object is declared with a class-wide type.
  
        elsif Definite then
!          Caller_Object :=
!             Make_Unchecked_Type_Conversion (Loc,
!               Subtype_Mark => New_Occurrence_Of (Result_Subt, Loc),
!               Expression   => New_Occurrence_Of (Obj_Def_Id, Loc));
  
           --  When the function has a controlling result, an allocation-form
           --  parameter must be passed indicating that the caller is allocating
--- 9544,9551 ----
        --  the case where the object is declared with a class-wide type.
  
        elsif Definite then
!          Caller_Object := Unchecked_Convert_To
!            (Result_Subt, New_Occurrence_Of (Obj_Def_Id, Loc));
  
           --  When the function has a controlling result, an allocation-form
           --  parameter must be passed indicating that the caller is allocating
*************** package body Exp_Ch6 is
*** 9242,9250 ****
               Constant_Present    => True,
               Object_Definition   => New_Occurrence_Of (Ptr_Typ, Loc),
               Expression          =>
!                Make_Unchecked_Type_Conversion (Loc,
!                  New_Occurrence_Of (Ptr_Typ, Loc),
!                  Make_Reference (Loc, Relocate_Node (Func_Call))));
        else
           Res_Decl :=
             Make_Object_Declaration (Loc,
--- 9653,9660 ----
               Constant_Present    => True,
               Object_Definition   => New_Occurrence_Of (Ptr_Typ, Loc),
               Expression          =>
!                Unchecked_Convert_To
!                  (Ptr_Typ, Make_Reference (Loc, Relocate_Node (Func_Call))));
        else
           Res_Decl :=
             Make_Object_Declaration (Loc,
*************** package body Exp_Ch6 is
*** 9304,9310 ****
           --  At this point, Defining_Identifier (Obj_Decl) is no longer equal
           --  to Obj_Def_Id.
  
!          Set_Renamed_Object (Defining_Identifier (Obj_Decl), Call_Deref);
  
           --  If the original entity comes from source, then mark the new
           --  entity as needing debug information, even though it's defined
--- 9714,9722 ----
           --  At this point, Defining_Identifier (Obj_Decl) is no longer equal
           --  to Obj_Def_Id.
  
!          pragma Assert (Ekind (Defining_Identifier (Obj_Decl)) = E_Void);
!          Set_Renamed_Object_Of_Possibly_Void
!            (Defining_Identifier (Obj_Decl), Call_Deref);
  
           --  If the original entity comes from source, then mark the new
           --  entity as needing debug information, even though it's defined
*************** package body Exp_Ch6 is
*** 9616,9630 ****
          and then not No_Run_Time_Mode
          and then (Has_Task (Typ)
                      or else (Is_Class_Wide_Type (Typ)
!                                and then Is_Limited_Record (Typ)))
! 
!         --  Predefined iterator types do not contain tasks, even when
!         --  class-wide.
! 
!         and then not (In_Predefined_Unit (Typ)
!                         and then Chars (Typ) in
!                           Name_Find ("Tforward_iteratorC") |
!                           Name_Find ("Treversible_iteratorC"));
     end Might_Have_Tasks;
  
     ----------------------------
--- 10028,10036 ----
          and then not No_Run_Time_Mode
          and then (Has_Task (Typ)
                      or else (Is_Class_Wide_Type (Typ)
!                                and then Is_Limited_Record (Typ)
!                                and then not Has_Aspect
!                                  (Etype (Typ), Aspect_No_Task_Parts)));
     end Might_Have_Tasks;
  
     ----------------------------
*************** package body Exp_Ch6 is
*** 9804,9810 ****
        --  If function is inherited, a conversion may be necessary.
  
        if Nkind (Par) = N_Assignment_Statement then
!          Last_Actual :=  Name (Par);
  
           if not Comes_From_Source (Orig_Func)
             and then Etype (Orig_Func) /= Etype (Func_Id)
--- 10210,10216 ----
        --  If function is inherited, a conversion may be necessary.
  
        if Nkind (Par) = N_Assignment_Statement then
!          Last_Actual := Name (Par);
  
           if not Comes_From_Source (Orig_Func)
             and then Etype (Orig_Func) /= Etype (Func_Id)
*************** package body Exp_Ch6 is
*** 9984,9991 ****
           elsif Nkind (Expr) = N_Function_Call
             and then Nkind (Name (Expr)) in N_Has_Entity
             and then Present (Entity (Name (Expr)))
-            and then RTU_Loaded (Ada_Tags)
-            and then RTE_Available (RE_Displace)
             and then Is_RTE (Entity (Name (Expr)), RE_Displace)
           then
              Has_Pointer_Displacement := True;
--- 10390,10395 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch6.ads gcc-12.1.0/gcc/ada/exp_ch6.ads
*** gcc-11.3.0/gcc/ada/exp_ch6.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch6.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Exp_Ch6 is
*** 32,37 ****
--- 32,38 ----
     procedure Expand_N_Extended_Return_Statement (N : Node_Id);
     procedure Expand_N_Function_Call             (N : Node_Id);
     procedure Expand_N_Procedure_Call_Statement  (N : Node_Id);
+    procedure Expand_N_Return_When_Statement     (N : Node_Id);
     procedure Expand_N_Simple_Return_Statement   (N : Node_Id);
     procedure Expand_N_Subprogram_Body           (N : Node_Id);
     procedure Expand_N_Subprogram_Body_Stub      (N : Node_Id);
*************** package Exp_Ch6 is
*** 120,125 ****
--- 121,129 ----
     --  The returned node is the root of the procedure body which will replace
     --  the original function body, which is not needed for the C program.
  
+    procedure Install_Class_Preconditions_Check (Call_Node : Node_Id);
+    --  Install check of class-wide preconditions on the caller.
+ 
     function Is_Build_In_Place_Entity (E : Entity_Id) return Boolean;
     --  Ada 2005 (AI-318-02): Returns True if E is a BIP entity.
  
*************** package Exp_Ch6 is
*** 133,140 ****
     --
     --  For inherently limited types in Ada 2005, True means that calls will
     --  actually be build-in-place in all cases. For other types, build-in-place
!    --  will be used when possible, but we need to make a copy at the call site
!    --  in some cases, notably assignment statements.
  
     function Is_Build_In_Place_Function (E : Entity_Id) return Boolean;
     --  Ada 2005 (AI-318-02): Returns True if E denotes a function, generic
--- 137,147 ----
     --
     --  For inherently limited types in Ada 2005, True means that calls will
     --  actually be build-in-place in all cases. For other types, build-in-place
!    --  will be used when possible, but we need to make a copy in some
!    --  cases. For example, for "X := F(...);" if F can see X, or if F can
!    --  propagate exceptions, we need to store its result in a temp in general,
!    --  and copy the temp into X. Also, for "return Global_Var;" Global_Var
!    --  needs to be copied into the function result object.
  
     function Is_Build_In_Place_Function (E : Entity_Id) return Boolean;
     --  Ada 2005 (AI-318-02): Returns True if E denotes a function, generic
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch7.adb gcc-12.1.0/gcc/ada/exp_ch7.adb
*** gcc-11.3.0/gcc/ada/exp_ch7.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch7.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 27,69 ****
  --    - controlled types
  --    - transient scopes
  
! with Atree;     use Atree;
! with Contracts; use Contracts;
! with Debug;     use Debug;
! with Einfo;     use Einfo;
! with Elists;    use Elists;
! with Errout;    use Errout;
! with Exp_Ch6;   use Exp_Ch6;
! with Exp_Ch9;   use Exp_Ch9;
! with Exp_Ch11;  use Exp_Ch11;
! with Exp_Dbug;  use Exp_Dbug;
! with Exp_Dist;  use Exp_Dist;
! with Exp_Disp;  use Exp_Disp;
! with Exp_Prag;  use Exp_Prag;
! with Exp_Tss;   use Exp_Tss;
! with Exp_Util;  use Exp_Util;
! with Freeze;    use Freeze;
! with Lib;       use Lib;
! with Nlists;    use Nlists;
! with Nmake;     use Nmake;
! with Opt;       use Opt;
! with Output;    use Output;
! with Restrict;  use Restrict;
! with Rident;    use Rident;
! with Rtsfind;   use Rtsfind;
! with Sinfo;     use Sinfo;
! with Sem;       use Sem;
! with Sem_Aux;   use Sem_Aux;
! with Sem_Ch3;   use Sem_Ch3;
! with Sem_Ch7;   use Sem_Ch7;
! with Sem_Ch8;   use Sem_Ch8;
! with Sem_Res;   use Sem_Res;
! with Sem_Util;  use Sem_Util;
! with Snames;    use Snames;
! with Stand;     use Stand;
! with Tbuild;    use Tbuild;
! with Ttypes;    use Ttypes;
! with Uintp;     use Uintp;
  
  package body Exp_Ch7 is
  
--- 27,74 ----
  --    - controlled types
  --    - transient scopes
  
! with Atree;          use Atree;
! with Contracts;      use Contracts;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch9;        use Exp_Ch9;
! with Exp_Ch11;       use Exp_Ch11;
! with Exp_Dbug;       use Exp_Dbug;
! with Exp_Dist;       use Exp_Dist;
! with Exp_Disp;       use Exp_Disp;
! with Exp_Prag;       use Exp_Prag;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with GNAT_CUDA;      use GNAT_CUDA;
! with Lib;            use Lib;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Output;         use Output;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
  
  package body Exp_Ch7 is
  
*************** package body Exp_Ch7 is
*** 126,136 ****
     -- Transient Blocks and Finalization Management --
     --------------------------------------------------
  
-    function Find_Transient_Context (N : Node_Id) return Node_Id;
-    --  Locate a suitable context for arbitrary node N which may need to be
-    --  serviced by a transient scope. Return Empty if no suitable context is
-    --  available.
- 
     procedure Insert_Actions_In_Scope_Around
       (N         : Node_Id;
        Clean     : Boolean;
--- 131,136 ----
*************** package body Exp_Ch7 is
*** 150,161 ****
     --  involves controlled objects or secondary stack usage, the corresponding
     --  cleanup actions are performed at the end of the block.
  
-    procedure Set_Node_To_Be_Wrapped (N : Node_Id);
-    --  Set the field Node_To_Be_Wrapped of the current scope
- 
-    --  ??? The entire comment needs to be rewritten
-    --  ??? which entire comment?
- 
     procedure Store_Actions_In_Scope (AK : Scope_Action_Kind; L : List_Id);
     --  Shared processing for Store_xxx_Actions_In_Scope
  
--- 150,155 ----
*************** package body Exp_Ch7 is
*** 486,502 ****
        Skip_Self : Boolean := False) return Node_Id;
     --  Subsidiary to Make_Adjust_Call and Make_Final_Call. Given the entity of
     --  routine [Deep_]Adjust or [Deep_]Finalize and an object parameter, create
!    --  an adjust or finalization call. Wnen flag Skip_Self is set, the related
     --  action has an effect on the components only (if any).
  
     function Make_Deep_Proc
       (Prim  : Final_Primitives;
        Typ   : Entity_Id;
!       Stmts : List_Id) return Node_Id;
     --  This function generates the tree for Deep_Initialize, Deep_Adjust or
!    --  Deep_Finalize procedures according to the first parameter, these
!    --  procedures operate on the type Typ. The Stmts parameter gives the body
!    --  of the procedure.
  
     function Make_Deep_Array_Body
       (Prim : Final_Primitives;
--- 480,496 ----
        Skip_Self : Boolean := False) return Node_Id;
     --  Subsidiary to Make_Adjust_Call and Make_Final_Call. Given the entity of
     --  routine [Deep_]Adjust or [Deep_]Finalize and an object parameter, create
!    --  an adjust or finalization call. When flag Skip_Self is set, the related
     --  action has an effect on the components only (if any).
  
     function Make_Deep_Proc
       (Prim  : Final_Primitives;
        Typ   : Entity_Id;
!       Stmts : List_Id) return Entity_Id;
     --  This function generates the tree for Deep_Initialize, Deep_Adjust or
!    --  Deep_Finalize procedures according to the first parameter. These
!    --  procedures operate on the type Typ. The Stmts parameter gives the
!    --  body of the procedure.
  
     function Make_Deep_Array_Body
       (Prim : Final_Primitives;
*************** package body Exp_Ch7 is
*** 1550,1555 ****
--- 1544,1554 ----
        --  Create the spec and body of the finalizer and insert them in the
        --  proper place in the tree depending on the context.
  
+       function New_Finalizer_Name
+         (Spec_Id : Node_Id; For_Spec : Boolean) return Name_Id;
+       --  Create a fully qualified name of a package spec or body finalizer.
+       --  The generated name is of the form: xx__yy__finalize_[spec|body].
+ 
        procedure Process_Declarations
          (Decls      : List_Id;
           Preprocess : Boolean := False;
*************** package body Exp_Ch7 is
*** 1557,1563 ****
        --  Inspect a list of declarations or statements which may contain
        --  objects that need finalization. When flag Preprocess is set, the
        --  routine will simply count the total number of controlled objects in
!       --  Decls. Flag Top_Level denotes whether the processing is done for
        --  objects in nested package declarations or instances.
  
        procedure Process_Object_Declaration
--- 1556,1563 ----
        --  Inspect a list of declarations or statements which may contain
        --  objects that need finalization. When flag Preprocess is set, the
        --  routine will simply count the total number of controlled objects in
!       --  Decls and set Counter_Val accordingly. Top_Level is only relevant
!       --  when Preprocess is set and if True, the processing is performed for
        --  objects in nested package declarations or instances.
  
        procedure Process_Object_Declaration
*************** package body Exp_Ch7 is
*** 1692,1749 ****
        ----------------------
  
        procedure Create_Finalizer is
-          function New_Finalizer_Name return Name_Id;
-          --  Create a fully qualified name of a package spec or body finalizer.
-          --  The generated name is of the form: xx__yy__finalize_[spec|body].
- 
-          ------------------------
-          -- New_Finalizer_Name --
-          ------------------------
- 
-          function New_Finalizer_Name return Name_Id is
-             procedure New_Finalizer_Name (Id : Entity_Id);
-             --  Place "__<name-of-Id>" in the name buffer. If the identifier
-             --  has a non-standard scope, process the scope first.
- 
-             ------------------------
-             -- New_Finalizer_Name --
-             ------------------------
- 
-             procedure New_Finalizer_Name (Id : Entity_Id) is
-             begin
-                if Scope (Id) = Standard_Standard then
-                   Get_Name_String (Chars (Id));
- 
-                else
-                   New_Finalizer_Name (Scope (Id));
-                   Add_Str_To_Name_Buffer ("__");
-                   Add_Str_To_Name_Buffer (Get_Name_String (Chars (Id)));
-                end if;
-             end New_Finalizer_Name;
- 
-          --  Start of processing for New_Finalizer_Name
- 
-          begin
-             --  Create the fully qualified name of the enclosing scope
- 
-             New_Finalizer_Name (Spec_Id);
- 
-             --  Generate:
-             --    __finalize_[spec|body]
- 
-             Add_Str_To_Name_Buffer ("__finalize_");
- 
-             if For_Package_Spec then
-                Add_Str_To_Name_Buffer ("spec");
-             else
-                Add_Str_To_Name_Buffer ("body");
-             end if;
- 
-             return Name_Find;
-          end New_Finalizer_Name;
- 
-          --  Local variables
- 
           Body_Id    : Entity_Id;
           Fin_Body   : Node_Id;
           Fin_Spec   : Node_Id;
--- 1692,1697 ----
*************** package body Exp_Ch7 is
*** 1751,1758 ****
           Label      : Node_Id;
           Label_Id   : Entity_Id;
  
-       --  Start of processing for Create_Finalizer
- 
        begin
           --  Step 1: Creation of the finalizer name
  
--- 1699,1704 ----
*************** package body Exp_Ch7 is
*** 1763,1769 ****
           --    xx__yy__finalize_[spec|body]
  
           if For_Package then
!             Fin_Id := Make_Defining_Identifier (Loc, New_Finalizer_Name);
              Set_Has_Qualified_Name       (Fin_Id);
              Set_Has_Fully_Qualified_Name (Fin_Id);
  
--- 1709,1716 ----
           --    xx__yy__finalize_[spec|body]
  
           if For_Package then
!             Fin_Id := Make_Defining_Identifier
!                         (Loc, New_Finalizer_Name (Spec_Id, For_Package_Spec));
              Set_Has_Qualified_Name       (Fin_Id);
              Set_Has_Fully_Qualified_Name (Fin_Id);
  
*************** package body Exp_Ch7 is
*** 1839,1848 ****
                 Make_Procedure_Specification (Loc,
                   Defining_Unit_Name => Fin_Id));
  
           --  Step 3: Creation of the finalizer body
  
!          if Has_Ctrl_Objs then
  
              --  Add L0, the default destination to the jump block
  
              Label_Id := Make_Identifier (Loc, New_External_Name ('L', 0));
--- 1786,1807 ----
                 Make_Procedure_Specification (Loc,
                   Defining_Unit_Name => Fin_Id));
  
+          if For_Package then
+             Set_Is_Exported (Fin_Id);
+             Set_Interface_Name (Fin_Id,
+               Make_String_Literal (Loc,
+                 Strval => Get_Name_String (Chars (Fin_Id))));
+          end if;
+ 
           --  Step 3: Creation of the finalizer body
  
!         --  Has_Ctrl_Objs might be set because of a generic package body having
!         --  controlled objects. In this case, Jump_Alts may be empty and no
!         --  case nor goto statements are needed.
  
+          if Has_Ctrl_Objs
+            and then not Is_Empty_List (Jump_Alts)
+          then
              --  Add L0, the default destination to the jump block
  
              Label_Id := Make_Identifier (Loc, New_External_Name ('L', 0));
*************** package body Exp_Ch7 is
*** 2164,2169 ****
--- 2123,2176 ----
           Set_Is_Checked_Ghost_Entity (Fin_Id, False);
        end Create_Finalizer;
  
+       ------------------------
+       -- New_Finalizer_Name --
+       ------------------------
+ 
+       function New_Finalizer_Name
+         (Spec_Id : Node_Id; For_Spec : Boolean) return Name_Id
+       is
+          procedure New_Finalizer_Name (Id : Entity_Id);
+          --  Place "__<name-of-Id>" in the name buffer. If the identifier
+          --  has a non-standard scope, process the scope first.
+ 
+          ------------------------
+          -- New_Finalizer_Name --
+          ------------------------
+ 
+          procedure New_Finalizer_Name (Id : Entity_Id) is
+          begin
+             if Scope (Id) = Standard_Standard then
+                Get_Name_String (Chars (Id));
+ 
+             else
+                New_Finalizer_Name (Scope (Id));
+                Add_Str_To_Name_Buffer ("__");
+                Get_Name_String_And_Append (Chars (Id));
+             end if;
+          end New_Finalizer_Name;
+ 
+       --  Start of processing for New_Finalizer_Name
+ 
+       begin
+          --  Create the fully qualified name of the enclosing scope
+ 
+          New_Finalizer_Name (Spec_Id);
+ 
+          --  Generate:
+          --    __finalize_[spec|body]
+ 
+          Add_Str_To_Name_Buffer ("__finalize_");
+ 
+          if For_Spec then
+             Add_Str_To_Name_Buffer ("spec");
+          else
+             Add_Str_To_Name_Buffer ("body");
+          end if;
+ 
+          return Name_Find;
+       end New_Finalizer_Name;
+ 
        --------------------------
        -- Process_Declarations --
        --------------------------
*************** package body Exp_Ch7 is
*** 2215,2221 ****
                       Last_Top_Level_Ctrl_Construct := Decl;
                    end if;
  
!                else
                    Process_Tagged_Type_Declaration (Decl);
                 end if;
  
--- 2222,2231 ----
                       Last_Top_Level_Ctrl_Construct := Decl;
                    end if;
  
!                --  Unregister tagged type, unless No_Tagged_Type_Registration
!                --  is active.
! 
!                elsif not Restriction_Active (No_Tagged_Type_Registration) then
                    Process_Tagged_Type_Declaration (Decl);
                 end if;
  
*************** package body Exp_Ch7 is
*** 2239,2245 ****
        --  Start of processing for Process_Declarations
  
        begin
!          if No (Decls) or else Is_Empty_List (Decls) then
              return;
           end if;
  
--- 2249,2255 ----
        --  Start of processing for Process_Declarations
  
        begin
!          if Is_Empty_List (Decls) then
              return;
           end if;
  
*************** package body Exp_Ch7 is
*** 2279,2287 ****
                   and then Is_Library_Level_Entity (Typ)
                   and then Convention (Typ) = Convention_Ada
                   and then Present (Access_Disp_Table (Typ))
-                  and then RTE_Available (RE_Register_Tag)
                   and then not Is_Abstract_Type (Typ)
                   and then not No_Run_Time_Mode
                 then
                    Processing_Actions;
                 end if;
--- 2289,2298 ----
                   and then Is_Library_Level_Entity (Typ)
                   and then Convention (Typ) = Convention_Ada
                   and then Present (Access_Disp_Table (Typ))
                   and then not Is_Abstract_Type (Typ)
                   and then not No_Run_Time_Mode
+                  and then not Restriction_Active (No_Tagged_Type_Registration)
+                  and then RTE_Available (RE_Register_Tag)
                 then
                    Processing_Actions;
                 end if;
*************** package body Exp_Ch7 is
*** 2543,2548 ****
--- 2554,2626 ----
                    end if;
                 end if;
  
+                --  Call the xxx__finalize_body procedure of a library level
+                --  package instantiation if the body contains finalization
+                --  statements.
+ 
+                if Present (Generic_Parent (Spec))
+                  and then Is_Library_Level_Entity (Pack_Id)
+                  and then Present (Body_Entity (Generic_Parent (Spec)))
+                then
+                   if Preprocess then
+                      declare
+                         P : Node_Id;
+                      begin
+                         P := Parent (Body_Entity (Generic_Parent (Spec)));
+                         while Present (P)
+                           and then Nkind (P) /= N_Package_Body
+                         loop
+                            P := Parent (P);
+                         end loop;
+ 
+                         if Present (P) then
+                            Old_Counter_Val := Counter_Val;
+                            Process_Declarations (Declarations (P), Preprocess);
+ 
+                            --  Note that we are processing the generic body
+                            --  template and not the actually instantiation
+                            --  (which is generated too late for us to process
+                            --  it), so there is no need to update in particular
+                            --  to update Last_Top_Level_Ctrl_Construct here.
+ 
+                            if Counter_Val > Old_Counter_Val then
+                               Counter_Val := Old_Counter_Val;
+                               Set_Has_Controlled_Component (Pack_Id);
+                            end if;
+                         end if;
+                      end;
+ 
+                   elsif Has_Controlled_Component (Pack_Id) then
+ 
+                      --  We import the xxx__finalize_body routine since the
+                      --  generic body will be instantiated later.
+ 
+                      declare
+                         Id : constant Node_Id :=
+                           Make_Defining_Identifier (Loc,
+                             New_Finalizer_Name (Defining_Unit_Name (Spec),
+                               For_Spec => False));
+ 
+                      begin
+                         Set_Has_Qualified_Name       (Id);
+                         Set_Has_Fully_Qualified_Name (Id);
+                         Set_Is_Imported              (Id);
+                         Set_Has_Completion           (Id);
+                         Set_Interface_Name (Id,
+                           Make_String_Literal (Loc,
+                             Strval => Get_Name_String (Chars (Id))));
+ 
+                         Append_New_To (Finalizer_Stmts,
+                           Make_Subprogram_Declaration (Loc,
+                             Make_Procedure_Specification (Loc,
+                               Defining_Unit_Name => Id)));
+                         Append_To (Finalizer_Stmts,
+                           Make_Procedure_Call_Statement (Loc,
+                             Name => New_Occurrence_Of (Id, Loc)));
+                      end;
+                   end if;
+                end if;
+ 
              --  Nested package bodies, avoid generics
  
              elsif Nkind (Decl) = N_Package_Body then
*************** package body Exp_Ch7 is
*** 2553,2560 ****
                 if Is_Ignored_Ghost_Entity (Defining_Entity (Decl)) then
                    null;
  
!                elsif Ekind (Corresponding_Spec (Decl)) /=
!                        E_Generic_Package
                 then
                    Old_Counter_Val := Counter_Val;
                    Process_Declarations (Declarations (Decl), Preprocess);
--- 2631,2637 ----
                 if Is_Ignored_Ghost_Entity (Defining_Entity (Decl)) then
                    null;
  
!                elsif Ekind (Corresponding_Spec (Decl)) /= E_Generic_Package
                 then
                    Old_Counter_Val := Counter_Val;
                    Process_Declarations (Declarations (Decl), Preprocess);
*************** package body Exp_Ch7 is
*** 2729,2735 ****
              --  Perform minor decoration in order to set the master and the
              --  storage pool attributes.
  
!             Set_Ekind (Ptr_Typ, E_Access_Type);
              Set_Finalization_Master     (Ptr_Typ, Fin_Mas_Id);
              Set_Associated_Storage_Pool (Ptr_Typ, Pool_Id);
  
--- 2806,2812 ----
              --  Perform minor decoration in order to set the master and the
              --  storage pool attributes.
  
!             Mutate_Ekind (Ptr_Typ, E_Access_Type);
              Set_Finalization_Master     (Ptr_Typ, Fin_Mas_Id);
              Set_Associated_Storage_Pool (Ptr_Typ, Pool_Id);
  
*************** package body Exp_Ch7 is
*** 3044,3049 ****
--- 3121,3128 ----
              --  Otherwise the initialization calls follow the related object
  
              else
+                pragma Assert (Present (Stmt));
+ 
                 Stmt_2 := Next_Suitable_Statement (Stmt);
  
                 --  Check for an optional call to Deep_Initialize which may
*************** package body Exp_Ch7 is
*** 3538,3550 ****
          and then
            (not Is_Library_Level_Entity (Spec_Id)
  
!             --  Nested packages are considered to be library level entities,
!             --  but do not need to be processed separately. True library level
!             --  packages have a scope value of 1.
  
!             or else Scope_Depth_Value (Spec_Id) /= Uint_1
              or else (Is_Generic_Instance (Spec_Id)
                        and then Package_Instantiation (Spec_Id) /= N))
        then
           return;
        end if;
--- 3617,3636 ----
          and then
            (not Is_Library_Level_Entity (Spec_Id)
  
!             --  Nested packages are library level entities, but do not need to
!             --  be processed separately.
  
!             or else Scope_Depth (Spec_Id) /= Uint_1
              or else (Is_Generic_Instance (Spec_Id)
                        and then Package_Instantiation (Spec_Id) /= N))
+ 
+          --  Still need to process package body instantiations which may
+          --  contain objects requiring finalization.
+ 
+         and then not
+           (For_Package_Body
+             and then Is_Library_Level_Entity (Spec_Id)
+             and then Is_Generic_Instance (Spec_Id))
        then
           return;
        end if;
*************** package body Exp_Ch7 is
*** 3626,3632 ****
  
        --  Step 3: Finalizer creation
  
!       if Acts_As_Clean or else Has_Ctrl_Objs or else Has_Tagged_Types then
           Create_Finalizer;
        end if;
     end Build_Finalizer_Helper;
--- 3712,3718 ----
  
        --  Step 3: Finalizer creation
  
!       if Acts_As_Clean or Has_Ctrl_Objs or Has_Tagged_Types then
           Create_Finalizer;
        end if;
     end Build_Finalizer_Helper;
*************** package body Exp_Ch7 is
*** 3798,3804 ****
        --       --  Perform postcondition checks after general finalization, but
        --       --  before finalization of 'Old related objects.
        --
!       --       if not Raised_Finalization_Exception then
        --          begin
        --             --  Re-enable postconditions and check them
        --
--- 3884,3892 ----
        --       --  Perform postcondition checks after general finalization, but
        --       --  before finalization of 'Old related objects.
        --
!       --       if not Raised_Finalization_Exception
!       --         and then Return_Success_For_Postcond
!       --       then
        --          begin
        --             --  Re-enable postconditions and check them
        --
*************** package body Exp_Ch7 is
*** 3971,3982 ****
           end if;
  
           --  Call _postconditions when no general finalization exceptions have
!          --  occured taking care to enable the postconditions and save any
           --  exception occurrences.
  
           --  Generate:
           --
!          --    if not Raised_Finalization_Exception then
           --       begin
           --          Postcond_Enabled := True;
           --          _postconditions [(Result_Obj_For_Postcond[.all])];
--- 4059,4072 ----
           end if;
  
           --  Call _postconditions when no general finalization exceptions have
!          --  occurred taking care to enable the postconditions and save any
           --  exception occurrences.
  
           --  Generate:
           --
!          --    if not Raised_Finalization_Exception
!          --      and then Return_Success_For_Postcond
!          --    then
           --       begin
           --          Postcond_Enabled := True;
           --          _postconditions [(Result_Obj_For_Postcond[.all])];
*************** package body Exp_Ch7 is
*** 3991,4000 ****
           Append_To (Fin_Controller_Stmts,
             Make_If_Statement (Loc,
               Condition       =>
!                Make_Op_Not (Loc,
                   Right_Opnd =>
                     New_Occurrence_Of
!                      (Raised_Finalization_Exception_Id, Loc)),
               Then_Statements => New_List (
                 Make_Block_Statement (Loc,
                   Handled_Statement_Sequence =>
--- 4081,4095 ----
           Append_To (Fin_Controller_Stmts,
             Make_If_Statement (Loc,
               Condition       =>
!                Make_And_Then (Loc,
!                  Left_Opnd  =>
!                    Make_Op_Not (Loc,
!                      Right_Opnd =>
!                        New_Occurrence_Of
!                          (Raised_Finalization_Exception_Id, Loc)),
                   Right_Opnd =>
                     New_Occurrence_Of
!                      (Get_Return_Success_For_Postcond (Def_Ent), Loc)),
               Then_Statements => New_List (
                 Make_Block_Statement (Loc,
                   Handled_Statement_Sequence =>
*************** package body Exp_Ch7 is
*** 4538,4545 ****
  
        Comp := First_Component (U_Typ);
        while Present (Comp) loop
!          if Has_Task (Etype (Comp))
!            or else Has_Simple_Protected_Object (Etype (Comp))
           then
              Tsk :=
                Make_Selected_Component (Loc,
--- 4633,4641 ----
  
        Comp := First_Component (U_Typ);
        while Present (Comp) loop
!          if Chars (Comp) /= Name_uParent
!            and then (Has_Task (Etype (Comp))
!              or else Has_Simple_Protected_Object (Etype (Comp)))
           then
              Tsk :=
                Make_Selected_Component (Loc,
*************** package body Exp_Ch7 is
*** 4606,4612 ****
       (N   : Node_Id;
        Ref : Node_Id) return Node_Id
     is
!       Loc  : constant Source_Ptr := Sloc (N);
  
     begin
        --  For restricted run-time libraries (Ravenscar), tasks are
--- 4702,4708 ----
       (N   : Node_Id;
        Ref : Node_Id) return Node_Id
     is
!       Loc : constant Source_Ptr := Sloc (N);
  
     begin
        --  For restricted run-time libraries (Ravenscar), tasks are
*************** package body Exp_Ch7 is
*** 4641,4648 ****
        procedure Set_Block_Elab_Proc is
        begin
           if No (Block_Elab_Proc) then
!             Block_Elab_Proc :=
!               Make_Defining_Identifier (Loc, Chars => New_Internal_Name ('I'));
           end if;
        end Set_Block_Elab_Proc;
  
--- 4737,4743 ----
        procedure Set_Block_Elab_Proc is
        begin
           if No (Block_Elab_Proc) then
!             Block_Elab_Proc := Make_Temporary (Loc, 'I');
           end if;
        end Set_Block_Elab_Proc;
  
*************** package body Exp_Ch7 is
*** 5018,5032 ****
        end if;
     end Convert_View;
  
-    -------------------------------
-    -- CW_Or_Has_Controlled_Part --
-    -------------------------------
- 
-    function CW_Or_Has_Controlled_Part (T : Entity_Id) return Boolean is
-    begin
-       return Is_Class_Wide_Type (T) or else Needs_Finalization (T);
-    end CW_Or_Has_Controlled_Part;
- 
     ------------------------
     -- Enclosing_Function --
     ------------------------
--- 5113,5118 ----
*************** package body Exp_Ch7 is
*** 5060,5096 ****
       (N                : Node_Id;
        Manage_Sec_Stack : Boolean)
     is
!       procedure Create_Transient_Scope (Constr : Node_Id);
!       --  Place a new scope on the scope stack in order to service construct
!       --  Constr. The new scope may also manage the secondary stack.
  
        procedure Delegate_Sec_Stack_Management;
        --  Move the management of the secondary stack to the nearest enclosing
        --  suitable scope.
  
!       function Find_Enclosing_Transient_Scope return Entity_Id;
!       --  Examine the scope stack looking for the nearest enclosing transient
!       --  scope. Return Empty if no such scope exists.
! 
!       function Is_Package_Or_Subprogram (Id : Entity_Id) return Boolean;
!       --  Determine whether arbitrary Id denotes a package or subprogram [body]
  
        ----------------------------
        -- Create_Transient_Scope --
        ----------------------------
  
!       procedure Create_Transient_Scope (Constr : Node_Id) is
           Loc : constant Source_Ptr := Sloc (N);
  
           Iter_Loop  : Entity_Id;
!          Trans_Scop : Entity_Id;
  
        begin
-          Trans_Scop := New_Internal_Entity (E_Block, Current_Scope, Loc, 'B');
           Set_Etype (Trans_Scop, Standard_Void_Type);
  
           Push_Scope (Trans_Scop);
!          Set_Node_To_Be_Wrapped (Constr);
           Set_Scope_Is_Transient;
  
           --  The transient scope must also manage the secondary stack
--- 5146,5192 ----
       (N                : Node_Id;
        Manage_Sec_Stack : Boolean)
     is
!       function Is_Package_Or_Subprogram (Id : Entity_Id) return Boolean;
!       --  Determine whether arbitrary Id denotes a package or subprogram [body]
! 
!       function Find_Enclosing_Transient_Scope return Entity_Id;
!       --  Examine the scope stack looking for the nearest enclosing transient
!       --  scope within the innermost enclosing package or subprogram. Return
!       --  Empty if no such scope exists.
! 
!       function Find_Transient_Context (N : Node_Id) return Node_Id;
!       --  Locate a suitable context for arbitrary node N which may need to be
!       --  serviced by a transient scope. Return Empty if no suitable context
!       --  is available.
  
        procedure Delegate_Sec_Stack_Management;
        --  Move the management of the secondary stack to the nearest enclosing
        --  suitable scope.
  
!       procedure Create_Transient_Scope (Context : Node_Id);
!       --  Place a new scope on the scope stack in order to service construct
!       --  Context. Context is the node found by Find_Transient_Context. The
!       --  new scope may also manage the secondary stack.
  
        ----------------------------
        -- Create_Transient_Scope --
        ----------------------------
  
!       procedure Create_Transient_Scope (Context : Node_Id) is
           Loc : constant Source_Ptr := Sloc (N);
  
           Iter_Loop  : Entity_Id;
!          Trans_Scop : constant Entity_Id :=
!            New_Internal_Entity (E_Block, Current_Scope, Loc, 'B');
  
        begin
           Set_Etype (Trans_Scop, Standard_Void_Type);
  
+          --  Push a new scope, and set its Node_To_Be_Wrapped and Is_Transient
+          --  fields.
+ 
           Push_Scope (Trans_Scop);
!          Scope_Stack.Table (Scope_Stack.Last).Node_To_Be_Wrapped := Context;
           Set_Scope_Is_Transient;
  
           --  The transient scope must also manage the secondary stack
*************** package body Exp_Ch7 is
*** 5141,5177 ****
        -----------------------------------
  
        procedure Delegate_Sec_Stack_Management is
-          Scop_Id  : Entity_Id;
-          Scop_Rec : Scope_Stack_Entry;
- 
        begin
           for Index in reverse Scope_Stack.First .. Scope_Stack.Last loop
!             Scop_Rec := Scope_Stack.Table (Index);
!             Scop_Id  := Scop_Rec.Entity;
! 
!             --  Prevent the search from going too far or within the scope space
!             --  of another unit.
  
!             if Scop_Id = Standard_Standard then
!                return;
  
!             --  No transient scope should be encountered during the traversal
!             --  because Establish_Transient_Scope should have already handled
!             --  this case.
  
!             elsif Scop_Rec.Is_Transient then
!                pragma Assert (False);
!                return;
  
!             --  The construct which requires secondary stack management is
!             --  always enclosed by a package or subprogram scope.
  
!             elsif Is_Package_Or_Subprogram (Scop_Id) then
!                Set_Uses_Sec_Stack (Scop_Id);
!                Check_Restriction (No_Secondary_Stack, N);
  
!                return;
!             end if;
           end loop;
  
           --  At this point no suitable scope was found. This should never occur
--- 5237,5270 ----
        -----------------------------------
  
        procedure Delegate_Sec_Stack_Management is
        begin
           for Index in reverse Scope_Stack.First .. Scope_Stack.Last loop
!             declare
!                Scope : Scope_Stack_Entry renames Scope_Stack.Table (Index);
!             begin
!                --  Prevent the search from going too far or within the scope
!                --  space of another unit.
  
!                if Scope.Entity = Standard_Standard then
!                   return;
  
!                --  No transient scope should be encountered during the
!                --  traversal because Establish_Transient_Scope should have
!                --  already handled this case.
  
!                elsif Scope.Is_Transient then
!                   raise Program_Error;
  
!                --  The construct that requires secondary stack management is
!                --  always enclosed by a package or subprogram scope.
  
!                elsif Is_Package_Or_Subprogram (Scope.Entity) then
!                   Set_Uses_Sec_Stack (Scope.Entity);
!                   Check_Restriction (No_Secondary_Stack, N);
  
!                   return;
!                end if;
!             end;
           end loop;
  
           --  At this point no suitable scope was found. This should never occur
*************** package body Exp_Ch7 is
*** 5186,5215 ****
        ------------------------------------
  
        function Find_Enclosing_Transient_Scope return Entity_Id is
-          Scop_Id   : Entity_Id;
-          Scop_Rec  : Scope_Stack_Entry;
- 
        begin
           for Index in reverse Scope_Stack.First .. Scope_Stack.Last loop
!             Scop_Rec := Scope_Stack.Table (Index);
!             Scop_Id  := Scop_Rec.Entity;
! 
!             --  Prevent the search from going too far or within the scope space
!             --  of another unit.
  
!             if Scop_Id = Standard_Standard
!               or else Is_Package_Or_Subprogram (Scop_Id)
!             then
!                exit;
  
!             elsif Scop_Rec.Is_Transient then
!                return Scop_Id;
!             end if;
           end loop;
  
           return Empty;
        end Find_Enclosing_Transient_Scope;
  
        ------------------------------
        -- Is_Package_Or_Subprogram --
        ------------------------------
--- 5279,5476 ----
        ------------------------------------
  
        function Find_Enclosing_Transient_Scope return Entity_Id is
        begin
           for Index in reverse Scope_Stack.First .. Scope_Stack.Last loop
!             declare
!                Scope : Scope_Stack_Entry renames Scope_Stack.Table (Index);
!             begin
!                --  Prevent the search from going too far or within the scope
!                --  space of another unit.
  
!                if Scope.Entity = Standard_Standard
!                  or else Is_Package_Or_Subprogram (Scope.Entity)
!                then
!                   exit;
  
!                elsif Scope.Is_Transient then
!                   return Scope.Entity;
!                end if;
!             end;
           end loop;
  
           return Empty;
        end Find_Enclosing_Transient_Scope;
  
+       ----------------------------
+       -- Find_Transient_Context --
+       ----------------------------
+ 
+       function Find_Transient_Context (N : Node_Id) return Node_Id is
+          Curr : Node_Id := N;
+          Prev : Node_Id := Empty;
+ 
+       begin
+          while Present (Curr) loop
+             case Nkind (Curr) is
+ 
+                --  Declarations
+ 
+                --  Declarations act as a boundary for a transient scope even if
+                --  they are not wrapped, see Wrap_Transient_Declaration.
+ 
+                when N_Object_Declaration
+                   | N_Object_Renaming_Declaration
+                   | N_Subtype_Declaration
+                =>
+                   return Curr;
+ 
+                --  Statements
+ 
+                --  Statements and statement-like constructs act as a boundary
+                --  for a transient scope.
+ 
+                when N_Accept_Alternative
+                   | N_Attribute_Definition_Clause
+                   | N_Case_Statement
+                   | N_Case_Statement_Alternative
+                   | N_Code_Statement
+                   | N_Delay_Alternative
+                   | N_Delay_Until_Statement
+                   | N_Delay_Relative_Statement
+                   | N_Discriminant_Association
+                   | N_Elsif_Part
+                   | N_Entry_Body_Formal_Part
+                   | N_Exit_Statement
+                   | N_If_Statement
+                   | N_Iteration_Scheme
+                   | N_Terminate_Alternative
+                =>
+                   pragma Assert (Present (Prev));
+                   return Prev;
+ 
+                when N_Assignment_Statement =>
+                   return Curr;
+ 
+                when N_Entry_Call_Statement
+                   | N_Procedure_Call_Statement
+                =>
+                   --  When an entry or procedure call acts as the alternative
+                   --  of a conditional or timed entry call, the proper context
+                   --  is that of the alternative.
+ 
+                   if Nkind (Parent (Curr)) = N_Entry_Call_Alternative
+                     and then Nkind (Parent (Parent (Curr))) in
+                                N_Conditional_Entry_Call | N_Timed_Entry_Call
+                   then
+                      return Parent (Parent (Curr));
+ 
+                   --  General case for entry or procedure calls
+ 
+                   else
+                      return Curr;
+                   end if;
+ 
+                when N_Pragma =>
+ 
+                   --  Pragma Check is not a valid transient context in
+                   --  GNATprove mode because the pragma must remain unchanged.
+ 
+                   if GNATprove_Mode
+                     and then Get_Pragma_Id (Curr) = Pragma_Check
+                   then
+                      return Empty;
+ 
+                   --  General case for pragmas
+ 
+                   else
+                      return Curr;
+                   end if;
+ 
+                when N_Raise_Statement =>
+                   return Curr;
+ 
+                when N_Simple_Return_Statement =>
+ 
+                   --  A return statement is not a valid transient context when
+                   --  the function itself requires transient scope management
+                   --  because the result will be reclaimed too early.
+ 
+                   if Requires_Transient_Scope (Etype
+                        (Return_Applies_To (Return_Statement_Entity (Curr))))
+                   then
+                      return Empty;
+ 
+                   --  General case for return statements
+ 
+                   else
+                      return Curr;
+                   end if;
+ 
+                --  Special
+ 
+                when N_Attribute_Reference =>
+                   if Is_Procedure_Attribute_Name (Attribute_Name (Curr)) then
+                      return Curr;
+                   end if;
+ 
+                --  An Ada 2012 iterator specification is not a valid context
+                --  because Analyze_Iterator_Specification already employs
+                --  special processing for it.
+ 
+                when N_Iterator_Specification =>
+                   return Empty;
+ 
+                when N_Loop_Parameter_Specification =>
+ 
+                   --  An iteration scheme is not a valid context because
+                   --  routine Analyze_Iteration_Scheme already employs
+                   --  special processing.
+ 
+                   if Nkind (Parent (Curr)) = N_Iteration_Scheme then
+                      return Empty;
+                   else
+                      return Parent (Curr);
+                   end if;
+ 
+                --  Termination
+ 
+                --  The following nodes represent "dummy contexts" which do not
+                --  need to be wrapped.
+ 
+                when N_Component_Declaration
+                   | N_Discriminant_Specification
+                   | N_Parameter_Specification
+                =>
+                   return Empty;
+ 
+                --  If the traversal leaves a scope without having been able to
+                --  find a construct to wrap, something is going wrong, but this
+                --  can happen in error situations that are not detected yet
+                --  (such as a dynamic string in a pragma Export).
+ 
+                when N_Block_Statement
+                   | N_Entry_Body
+                   | N_Package_Body
+                   | N_Package_Declaration
+                   | N_Protected_Body
+                   | N_Subprogram_Body
+                   | N_Task_Body
+                =>
+                   return Empty;
+ 
+                --  Default
+ 
+                when others =>
+                   null;
+             end case;
+ 
+             Prev := Curr;
+             Curr := Parent (Curr);
+          end loop;
+ 
+          return Empty;
+       end Find_Transient_Context;
+ 
        ------------------------------
        -- Is_Package_Or_Subprogram --
        ------------------------------
*************** package body Exp_Ch7 is
*** 5232,5239 ****
     --  Start of processing for Establish_Transient_Scope
  
     begin
!       --  Do not create a new transient scope if there is an existing transient
!       --  scope on the stack.
  
        if Present (Trans_Id) then
  
--- 5493,5500 ----
     --  Start of processing for Establish_Transient_Scope
  
     begin
!       --  Do not create a new transient scope if there is already an enclosing
!       --  transient scope within the innermost enclosing package or subprogram.
  
        if Present (Trans_Id) then
  
*************** package body Exp_Ch7 is
*** 5247,5255 ****
           return;
        end if;
  
!       --  At this point it is known that the scope stack is free of transient
!       --  scopes. Locate the proper construct which must be serviced by a new
!       --  transient scope.
  
        Context := Find_Transient_Context (N);
  
--- 5508,5515 ----
           return;
        end if;
  
!       --  Find the construct that must be serviced by a new transient scope, if
!       --  it exists.
  
        Context := Find_Transient_Context (N);
  
*************** package body Exp_Ch7 is
*** 5661,5666 ****
--- 5921,5928 ----
              Build_Static_Dispatch_Tables (N);
           end if;
  
+          Expand_CUDA_Package (N);
+ 
           Build_Task_Activation_Call (N);
  
           --  Verify the run-time semantics of pragma Initial_Condition at the
*************** package body Exp_Ch7 is
*** 5808,5814 ****
           Pop_Scope;
        end if;
  
!       --  Build dispatch tables of library level tagged types
  
        if Tagged_Type_Expansion
          and then (Is_Compilation_Unit (Id)
--- 6070,6076 ----
           Pop_Scope;
        end if;
  
!       --  Build dispatch tables of library-level tagged types
  
        if Tagged_Type_Expansion
          and then (Is_Compilation_Unit (Id)
*************** package body Exp_Ch7 is
*** 5852,6059 ****
        end if;
     end Expand_N_Package_Declaration;
  
-    ----------------------------
-    -- Find_Transient_Context --
-    ----------------------------
- 
-    function Find_Transient_Context (N : Node_Id) return Node_Id is
-       Curr : Node_Id;
-       Prev : Node_Id;
- 
-    begin
-       Curr := N;
-       Prev := Empty;
-       while Present (Curr) loop
-          case Nkind (Curr) is
- 
-             --  Declarations
- 
-             --  Declarations act as a boundary for a transient scope even if
-             --  they are not wrapped, see Wrap_Transient_Declaration.
- 
-             when N_Object_Declaration
-                | N_Object_Renaming_Declaration
-                | N_Subtype_Declaration
-             =>
-                return Curr;
- 
-             --  Statements
- 
-             --  Statements and statement-like constructs act as a boundary for
-             --  a transient scope.
- 
-             when N_Accept_Alternative
-                | N_Attribute_Definition_Clause
-                | N_Case_Statement
-                | N_Case_Statement_Alternative
-                | N_Code_Statement
-                | N_Delay_Alternative
-                | N_Delay_Until_Statement
-                | N_Delay_Relative_Statement
-                | N_Discriminant_Association
-                | N_Elsif_Part
-                | N_Entry_Body_Formal_Part
-                | N_Exit_Statement
-                | N_If_Statement
-                | N_Iteration_Scheme
-                | N_Terminate_Alternative
-             =>
-                pragma Assert (Present (Prev));
-                return Prev;
- 
-             when N_Assignment_Statement =>
-                return Curr;
- 
-             when N_Entry_Call_Statement
-                | N_Procedure_Call_Statement
-             =>
-                --  When an entry or procedure call acts as the alternative of a
-                --  conditional or timed entry call, the proper context is that
-                --  of the alternative.
- 
-                if Nkind (Parent (Curr)) = N_Entry_Call_Alternative
-                  and then Nkind (Parent (Parent (Curr))) in
-                             N_Conditional_Entry_Call | N_Timed_Entry_Call
-                then
-                   return Parent (Parent (Curr));
- 
-                --  General case for entry or procedure calls
- 
-                else
-                   return Curr;
-                end if;
- 
-             when N_Pragma =>
- 
-                --  Pragma Check is not a valid transient context in GNATprove
-                --  mode because the pragma must remain unchanged.
- 
-                if GNATprove_Mode
-                  and then Get_Pragma_Id (Curr) = Pragma_Check
-                then
-                   return Empty;
- 
-                --  General case for pragmas
- 
-                else
-                   return Curr;
-                end if;
- 
-             when N_Raise_Statement =>
-                return Curr;
- 
-             when N_Simple_Return_Statement =>
- 
-                --  A return statement is not a valid transient context when the
-                --  function itself requires transient scope management because
-                --  the result will be reclaimed too early.
- 
-                if Requires_Transient_Scope (Etype
-                     (Return_Applies_To (Return_Statement_Entity (Curr))))
-                then
-                   return Empty;
- 
-                --  General case for return statements
- 
-                else
-                   return Curr;
-                end if;
- 
-             --  Special
- 
-             when N_Attribute_Reference =>
-                if Is_Procedure_Attribute_Name (Attribute_Name (Curr)) then
-                   return Curr;
-                end if;
- 
-             --  An Ada 2012 iterator specification is not a valid context
-             --  because Analyze_Iterator_Specification already employs special
-             --  processing for it.
- 
-             when N_Iterator_Specification =>
-                return Empty;
- 
-             when N_Loop_Parameter_Specification =>
- 
-                --  An iteration scheme is not a valid context because routine
-                --  Analyze_Iteration_Scheme already employs special processing.
- 
-                if Nkind (Parent (Curr)) = N_Iteration_Scheme then
-                   return Empty;
-                else
-                   return Parent (Curr);
-                end if;
- 
-             --  Termination
- 
-             --  The following nodes represent "dummy contexts" which do not
-             --  need to be wrapped.
- 
-             when N_Component_Declaration
-                | N_Discriminant_Specification
-                | N_Parameter_Specification
-             =>
-                return Empty;
- 
-             --  If the traversal leaves a scope without having been able to
-             --  find a construct to wrap, something is going wrong, but this
-             --  can happen in error situations that are not detected yet (such
-             --  as a dynamic string in a pragma Export).
- 
-             when N_Block_Statement
-                | N_Entry_Body
-                | N_Package_Body
-                | N_Package_Declaration
-                | N_Protected_Body
-                | N_Subprogram_Body
-                | N_Task_Body
-             =>
-                return Empty;
- 
-             --  Default
- 
-             when others =>
-                null;
-          end case;
- 
-          Prev := Curr;
-          Curr := Parent (Curr);
-       end loop;
- 
-       return Empty;
-    end Find_Transient_Context;
- 
-    ----------------------------------
-    -- Has_New_Controlled_Component --
-    ----------------------------------
- 
-    function Has_New_Controlled_Component (E : Entity_Id) return Boolean is
-       Comp : Entity_Id;
- 
-    begin
-       if not Is_Tagged_Type (E) then
-          return Has_Controlled_Component (E);
-       elsif not Is_Derived_Type (E) then
-          return Has_Controlled_Component (E);
-       end if;
- 
-       Comp := First_Component (E);
-       while Present (Comp) loop
-          if Chars (Comp) = Name_uParent then
-             null;
- 
-          elsif Scope (Original_Record_Component (Comp)) = E
-            and then Needs_Finalization (Etype (Comp))
-          then
-             return True;
-          end if;
- 
-          Next_Component (Comp);
-       end loop;
- 
-       return False;
-    end Has_New_Controlled_Component;
- 
     ---------------------------------
     -- Has_Simple_Protected_Object --
     ---------------------------------
--- 6114,6119 ----
*************** package body Exp_Ch7 is
*** 6127,6141 ****
           Last_Object  : Node_Id;
           Related_Node : Node_Id)
        is
!          Must_Hook : Boolean := False;
           --  Flag denoting whether the context requires transient object
           --  export to the outer finalizer.
  
           function Is_Subprogram_Call (N : Node_Id) return Traverse_Result;
!          --  Determine whether an arbitrary node denotes a subprogram call
  
!          procedure Detect_Subprogram_Call is
!            new Traverse_Proc (Is_Subprogram_Call);
  
           procedure Process_Transient_In_Scope
             (Obj_Decl  : Node_Id;
--- 6187,6201 ----
           Last_Object  : Node_Id;
           Related_Node : Node_Id)
        is
!          Must_Hook : Boolean;
           --  Flag denoting whether the context requires transient object
           --  export to the outer finalizer.
  
           function Is_Subprogram_Call (N : Node_Id) return Traverse_Result;
!          --  Return Abandon if arbitrary node denotes a subprogram call
  
!          function Has_Subprogram_Call is
!            new Traverse_Func (Is_Subprogram_Call);
  
           procedure Process_Transient_In_Scope
             (Obj_Decl  : Node_Id;
*************** package body Exp_Ch7 is
*** 6155,6161 ****
              --  A regular procedure or function call
  
              if Nkind (N) in N_Subprogram_Call then
-                Must_Hook := True;
                 return Abandon;
  
              --  Special cases
--- 6215,6220 ----
*************** package body Exp_Ch7 is
*** 6165,6184 ****
              --  of the call.
  
              elsif Is_Rewrite_Substitution (N) then
!                Detect_Subprogram_Call (Original_Node (N));
! 
!                if Must_Hook then
!                   return Abandon;
!                else
!                   return OK;
!                end if;
  
              --  Generalized indexing always involves a function call
  
              elsif Nkind (N) = N_Indexed_Component
                and then Present (Generalized_Indexing (N))
              then
-                Must_Hook := True;
                 return Abandon;
  
              --  Keep searching
--- 6224,6236 ----
              --  of the call.
  
              elsif Is_Rewrite_Substitution (N) then
!                return Has_Subprogram_Call (Original_Node (N));
  
              --  Generalized indexing always involves a function call
  
              elsif Nkind (N) = N_Indexed_Component
                and then Present (Generalized_Indexing (N))
              then
                 return Abandon;
  
              --  Keep searching
*************** package body Exp_Ch7 is
*** 6415,6422 ****
           --  due to the possibility of abnormal call termination.
  
           else
!             Detect_Subprogram_Call (N);
!             Blk_Ins := Last_Object;
           end if;
  
           if Clean then
--- 6467,6474 ----
           --  due to the possibility of abnormal call termination.
  
           else
!             Must_Hook := Has_Subprogram_Call (N) = Abandon;
!             Blk_Ins   := Last_Object;
           end if;
  
           if Clean then
*************** package body Exp_Ch7 is
*** 8064,8070 ****
           --       end if;
           --       ...
  
!          --  When Deep_Adjust is invokes for field _parent, a value of False is
           --  provided for the flag:
  
           --    Deep_Adjust (Obj._parent, False);
--- 8116,8122 ----
           --       end if;
           --       ...
  
!          --  When Deep_Adjust is invoked for field _parent, a value of False is
           --  provided for the flag:
  
           --    Deep_Adjust (Obj._parent, False);
*************** package body Exp_Ch7 is
*** 8219,8225 ****
           Loc     : constant Source_Ptr := Sloc (Typ);
           Typ_Def : constant Node_Id    := Type_Definition (Parent (Typ));
  
!          Counter        : Int := 0;
           Finalizer_Data : Finalization_Exception_Data;
  
           function Process_Component_List_For_Finalize
--- 8271,8277 ----
           Loc     : constant Source_Ptr := Sloc (Typ);
           Typ_Def : constant Node_Id    := Type_Definition (Parent (Typ));
  
!          Counter        : Nat := 0;
           Finalizer_Data : Finalization_Exception_Data;
  
           function Process_Component_List_For_Finalize
*************** package body Exp_Ch7 is
*** 8897,8907 ****
        Typ       : Entity_Id;
        Skip_Self : Boolean := False) return Node_Id
     is
!       Loc    : constant Source_Ptr := Sloc (Obj_Ref);
!       Atyp   : Entity_Id;
!       Fin_Id : Entity_Id := Empty;
!       Ref    : Node_Id;
!       Utyp   : Entity_Id;
  
     begin
        Ref := Obj_Ref;
--- 8949,8960 ----
        Typ       : Entity_Id;
        Skip_Self : Boolean := False) return Node_Id
     is
!       Loc      : constant Source_Ptr := Sloc (Obj_Ref);
!       Atyp     : Entity_Id;
!       Prot_Typ : Entity_Id := Empty;
!       Fin_Id   : Entity_Id := Empty;
!       Ref      : Node_Id;
!       Utyp     : Entity_Id;
  
     begin
        Ref := Obj_Ref;
*************** package body Exp_Ch7 is
*** 8979,8984 ****
--- 9032,9050 ----
           Set_Assignment_OK (Ref);
        end if;
  
+       --  Detect if Typ is a protected type or an expanded protected type and
+       --  store the relevant type within Prot_Typ for later processing.
+ 
+       if Is_Protected_Type (Typ) then
+          Prot_Typ := Typ;
+ 
+       elsif Ekind (Typ) = E_Record_Type
+         and then Present (Corresponding_Concurrent_Type (Typ))
+         and then Is_Protected_Type (Corresponding_Concurrent_Type (Typ))
+       then
+          Prot_Typ := Corresponding_Concurrent_Type (Typ);
+       end if;
+ 
        --  The underlying type may not be present due to a missing full view. In
        --  this case freezing did not take place and there is no [Deep_]Finalize
        --  primitive to call.
*************** package body Exp_Ch7 is
*** 9024,9030 ****
        --  Protected types: these also require finalization even though they
        --  are not marked controlled explicitly.
  
!       elsif Is_Protected_Type (Typ) then
           --  Protected objects do not need to be finalized on restricted
           --  runtimes.
  
--- 9090,9096 ----
        --  Protected types: these also require finalization even though they
        --  are not marked controlled explicitly.
  
!       elsif Present (Prot_Typ) then
           --  Protected objects do not need to be finalized on restricted
           --  runtimes.
  
*************** package body Exp_Ch7 is
*** 9034,9040 ****
           --  ??? Only handle the simple case for now. Will not support a record
           --  or array containing protected objects.
  
!          elsif Is_Simple_Protected_Type (Typ) then
              Fin_Id := RTE (RE_Finalize_Protection);
           else
              raise Program_Error;
--- 9100,9106 ----
           --  ??? Only handle the simple case for now. Will not support a record
           --  or array containing protected objects.
  
!          elsif Is_Simple_Protected_Type (Prot_Typ) then
              Fin_Id := RTE (RE_Finalize_Protection);
           else
              raise Program_Error;
*************** package body Exp_Ch7 is
*** 9282,9288 ****
              Dope_Id : Entity_Id;
  
           begin
!             --  Ensure that Ptr_Typ a thin pointer, generate:
              --    for Ptr_Typ'Size use System.Address'Size;
  
              Append_To (Decls,
--- 9348,9354 ----
              Dope_Id : Entity_Id;
  
           begin
!             --  Ensure that Ptr_Typ is a thin pointer; generate:
              --    for Ptr_Typ'Size use System.Address'Size;
  
              Append_To (Decls,
*************** package body Exp_Ch7 is
*** 9498,9505 ****
  
        --  If initialization procedure for an array of controlled objects is
        --  trivial, do not generate a useless call to it.
  
!       if (Is_Array_Type (Utyp) and then Is_Trivial_Subprogram (Proc))
          or else
            (not Comes_From_Source (Proc)
              and then Present (Alias (Proc))
--- 9564,9574 ----
  
        --  If initialization procedure for an array of controlled objects is
        --  trivial, do not generate a useless call to it.
+       --  The initialization procedure may be missing altogether in the case
+       --  of a derived container whose components have trivial initialization.
  
!       if No (Proc)
!         or else (Is_Array_Type (Utyp) and then Is_Trivial_Subprogram (Proc))
          or else
            (not Comes_From_Source (Proc)
              and then Present (Alias (Proc))
*************** package body Exp_Ch7 is
*** 9824,9838 ****
     end Node_To_Be_Wrapped;
  
     ----------------------------
-    -- Set_Node_To_Be_Wrapped --
-    ----------------------------
- 
-    procedure Set_Node_To_Be_Wrapped (N : Node_Id) is
-    begin
-       Scope_Stack.Table (Scope_Stack.Last).Node_To_Be_Wrapped := N;
-    end Set_Node_To_Be_Wrapped;
- 
-    ----------------------------
     -- Store_Actions_In_Scope --
     ----------------------------
  
--- 9893,9898 ----
*************** package body Exp_Ch7 is
*** 9841,9847 ****
        Actions : List_Id renames SE.Actions_To_Be_Wrapped (AK);
  
     begin
!       if No (Actions) then
           Actions := L;
  
           if Is_List_Member (SE.Node_To_Be_Wrapped) then
--- 9901,9907 ----
        Actions : List_Id renames SE.Actions_To_Be_Wrapped (AK);
  
     begin
!       if Is_Empty_List (Actions) then
           Actions := L;
  
           if Is_List_Member (SE.Node_To_Be_Wrapped) then
*************** package body Exp_Ch7 is
*** 9903,9911 ****
        Local_Scop := Entity (Identifier (Decl));
        Ent := First_Entity (Local_Scop);
  
!       Local_Proc :=
!         Make_Defining_Identifier (Loc,
!           Chars => New_Internal_Name ('P'));
  
        Local_Body :=
          Make_Subprogram_Body (Loc,
--- 9963,9969 ----
        Local_Scop := Entity (Identifier (Decl));
        Ent := First_Entity (Local_Scop);
  
!       Local_Proc := Make_Temporary (Loc, 'P');
  
        Local_Body :=
          Make_Subprogram_Body (Loc,
*************** package body Exp_Ch7 is
*** 10053,10061 ****
        Local_Scop := Entity (Identifier (Loop_Stmt));
        Ent := First_Entity (Local_Scop);
  
!       Local_Proc :=
!         Make_Defining_Identifier (Loc,
!           Chars => New_Internal_Name ('P'));
  
        Local_Body :=
          Make_Subprogram_Body (Loc,
--- 10111,10117 ----
        Local_Scop := Entity (Identifier (Loop_Stmt));
        Ent := First_Entity (Local_Scop);
  
!       Local_Proc := Make_Temporary (Loc, 'P');
  
        Local_Body :=
          Make_Subprogram_Body (Loc,
*************** package body Exp_Ch7 is
*** 10109,10117 ****
        New_Stmts  : constant List_Id := Empty_List;
  
     begin
!       Local_Proc :=
!         Make_Defining_Identifier (Loc,
!           Chars => New_Internal_Name ('P'));
  
        Local_Body :=
          Make_Subprogram_Body (Loc,
--- 10165,10171 ----
        New_Stmts  : constant List_Id := Empty_List;
  
     begin
!       Local_Proc := Make_Temporary (Loc, 'P');
  
        Local_Body :=
          Make_Subprogram_Body (Loc,
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch7.ads gcc-12.1.0/gcc/ada/exp_ch7.ads
*** gcc-11.3.0/gcc/ada/exp_ch7.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch7.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Exp_Ch7 is
*** 153,169 ****
     --  triggered by an abort, E_Id denotes the defining identifier of a local
     --  exception occurrence, Raised_Id is the entity of a local boolean flag.
  
-    function CW_Or_Has_Controlled_Part (T : Entity_Id) return Boolean;
-    --  True if T is a class-wide type, or if it has controlled parts ("part"
-    --  means T or any of its subcomponents). Same as Needs_Finalization, except
-    --  when pragma Restrictions (No_Finalization) applies, in which case we
-    --  know that class-wide objects do not contain controlled parts.
- 
-    function Has_New_Controlled_Component (E : Entity_Id) return Boolean;
-    --  E is a type entity. Give the same result as Has_Controlled_Component
-    --  except for tagged extensions where the result is True only if the
-    --  latest extension contains a controlled component.
- 
     function Make_Adjust_Call
       (Obj_Ref   : Node_Id;
        Typ       : Entity_Id;
--- 153,158 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch8.adb gcc-12.1.0/gcc/ada/exp_ch8.adb
*** gcc-11.3.0/gcc/ada/exp_ch8.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch8.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,48 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Exp_Ch3;  use Exp_Ch3;
! with Exp_Ch4;  use Exp_Ch4;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_Dbug; use Exp_Dbug;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Namet;    use Namet;
! with Nmake;    use Nmake;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Tbuild;   use Tbuild;
  
  package body Exp_Ch8 is
  
--- 23,52 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Exp_Ch3;        use Exp_Ch3;
! with Exp_Ch4;        use Exp_Ch4;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Dbug;       use Exp_Dbug;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Namet;          use Namet;
! with Nmake;          use Nmake;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Tbuild;         use Tbuild;
  
  package body Exp_Ch8 is
  
*************** package body Exp_Ch8 is
*** 72,78 ****
     --  clause applies (that can specify an arbitrary bit boundary), or where
     --  the enclosing record itself has a non-standard representation.
  
!    --  In Ada 2020, a third case arises when the renamed object is a nonatomic
     --  subcomponent of an atomic object, because reads of or writes to it must
     --  access the enclosing atomic object. That's also the case for an object
     --  subject to the Volatile_Full_Access GNAT aspect/pragma in any language
--- 76,82 ----
     --  clause applies (that can specify an arbitrary bit boundary), or where
     --  the enclosing record itself has a non-standard representation.
  
!    --  In Ada 2022, a third case arises when the renamed object is a nonatomic
     --  subcomponent of an atomic object, because reads of or writes to it must
     --  access the enclosing atomic object. That's also the case for an object
     --  subject to the Volatile_Full_Access GNAT aspect/pragma in any language
*************** package body Exp_Ch8 is
*** 291,301 ****
           Set_Alias (Id, Empty);
           Set_Has_Completion (Id, False);
           Rewrite (N,
!            Make_Subprogram_Declaration (Sloc (N),
               Specification => Specification (N)));
           Set_Has_Delayed_Freeze (Id);
  
!          Body_Id := Make_Defining_Identifier (Sloc (N), Chars (Id));
           Set_Debug_Info_Needed (Body_Id);
  
           if Has_Variant_Part (Typ) then
--- 295,305 ----
           Set_Alias (Id, Empty);
           Set_Has_Completion (Id, False);
           Rewrite (N,
!            Make_Subprogram_Declaration (Loc,
               Specification => Specification (N)));
           Set_Has_Delayed_Freeze (Id);
  
!          Body_Id := Make_Defining_Identifier (Loc, Chars (Id));
           Set_Debug_Info_Needed (Body_Id);
  
           if Has_Variant_Part (Typ) then
*************** package body Exp_Ch8 is
*** 322,340 ****
                      Result_Definition        =>
                        New_Occurrence_Of (Standard_Boolean, Loc)),
                  Declarations               => Empty_List,
!                 Handled_Statement_Sequence => Empty);
! 
!             Set_Handled_Statement_Sequence (Decl,
!               Make_Handled_Sequence_Of_Statements (Loc,
!                 Statements => New_List (
!                   Make_Simple_Return_Statement (Loc,
!                     Expression =>
!                       Expand_Record_Equality
!                         (Id,
!                          Typ    => Typ,
!                          Lhs    => Make_Identifier (Loc, Chars (Left)),
!                          Rhs    => Make_Identifier (Loc, Chars (Right)),
!                          Bodies => Declarations (Decl))))));
           end if;
  
           return Decl;
--- 326,341 ----
                      Result_Definition        =>
                        New_Occurrence_Of (Standard_Boolean, Loc)),
                  Declarations               => Empty_List,
!                 Handled_Statement_Sequence =>
!                   Make_Handled_Sequence_Of_Statements (Loc,
!                     Statements => New_List (
!                       Make_Simple_Return_Statement (Loc,
!                         Expression =>
!                           Expand_Record_Equality
!                             (Id,
!                              Typ => Typ,
!                              Lhs => Make_Identifier (Loc, Chars (Left)),
!                              Rhs => Make_Identifier (Loc, Chars (Right)))))));
           end if;
  
           return Decl;
*************** package body Exp_Ch8 is
*** 371,377 ****
          and then Scope (Entity (Nam)) = Standard_Standard
        then
           declare
!             Typ  : constant Entity_Id := Etype (First_Formal (Id));
  
           begin
              --  Check whether this is a renaming of a predefined equality on an
--- 372,378 ----
          and then Scope (Entity (Nam)) = Standard_Standard
        then
           declare
!             Typ : constant Entity_Id := Etype (First_Formal (Id));
  
           begin
              --  Check whether this is a renaming of a predefined equality on an
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch8.ads gcc-12.1.0/gcc/ada/exp_ch8.ads
*** gcc-11.3.0/gcc/ada/exp_ch8.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch8.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch9.adb gcc-12.1.0/gcc/ada/exp_ch9.adb
*** gcc-11.3.0/gcc/ada/exp_ch9.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch9.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,71 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Aspects;  use Aspects;
! with Checks;   use Checks;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Exp_Ch3;  use Exp_Ch3;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_Ch11; use Exp_Ch11;
! with Exp_Dbug; use Exp_Dbug;
! with Exp_Sel;  use Exp_Sel;
! with Exp_Smem; use Exp_Smem;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
  with Hostparm;
! with Itypes;   use Itypes;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch5;  use Sem_Ch5;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Ch9;  use Sem_Ch9;
! with Sem_Ch11; use Sem_Ch11;
! with Sem_Ch13; use Sem_Ch13;
! with Sem_Elab; use Sem_Elab;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Targparm; use Targparm;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Validsw;  use Validsw;
  
  package body Exp_Ch9 is
  
--- 23,75 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Aspects;        use Aspects;
! with Checks;         use Checks;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Ch3;        use Exp_Ch3;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch11;       use Exp_Ch11;
! with Exp_Dbug;       use Exp_Dbug;
! with Exp_Sel;        use Exp_Sel;
! with Exp_Smem;       use Exp_Smem;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
  with Hostparm;
! with Itypes;         use Itypes;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch5;        use Sem_Ch5;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch9;        use Sem_Ch9;
! with Sem_Ch11;       use Sem_Ch11;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Validsw;        use Validsw;
  
  package body Exp_Ch9 is
  
*************** package body Exp_Ch9 is
*** 120,126 ****
     function Build_Barrier_Function
       (N   : Node_Id;
        Ent : Entity_Id;
!       Pid : Node_Id) return Node_Id;
     --  Build the function body returning the value of the barrier expression
     --  for the specified entry body.
  
--- 124,130 ----
     function Build_Barrier_Function
       (N   : Node_Id;
        Ent : Entity_Id;
!       Pid : Entity_Id) return Node_Id;
     --  Build the function body returning the value of the barrier expression
     --  for the specified entry body.
  
*************** package body Exp_Ch9 is
*** 141,147 ****
  
     function Build_Corresponding_Record
       (N    : Node_Id;
!       Ctyp : Node_Id;
        Loc  : Source_Ptr) return Node_Id;
     --  Common to tasks and protected types. Copy discriminant specifications,
     --  build record declaration. N is the type declaration, Ctyp is the
--- 145,151 ----
  
     function Build_Corresponding_Record
       (N    : Node_Id;
!       Ctyp : Entity_Id;
        Loc  : Source_Ptr) return Node_Id;
     --  Common to tasks and protected types. Copy discriminant specifications,
     --  build record declaration. N is the type declaration, Ctyp is the
*************** package body Exp_Ch9 is
*** 278,284 ****
        Concval : Node_Id;
        Ename   : Node_Id;
        Index   : Node_Id);
!    --  Some comments here would be useful ???
  
     function Build_Task_Proc_Specification (T : Entity_Id) return Node_Id;
     --  This routine constructs a specification for the procedure that we will
--- 282,292 ----
        Concval : Node_Id;
        Ename   : Node_Id;
        Index   : Node_Id);
!    --  Build the call corresponding to the task entry call. N is the task entry
!    --  call, Concval is the concurrent object, Ename is the entry name and
!    --  Index is the entry family index.
!    --  Note that N might be expanded into an N_Block_Statement if it gets
!    --  inlined.
  
     function Build_Task_Proc_Specification (T : Entity_Id) return Node_Id;
     --  This routine constructs a specification for the procedure that we will
*************** package body Exp_Ch9 is
*** 735,743 ****
           Set_Debug_Info_Needed (New_F);
  
           if Ekind (Formal) = E_In_Parameter then
!             Set_Ekind (New_F, E_Constant);
           else
!             Set_Ekind (New_F, E_Variable);
              Set_Extra_Constrained (New_F, Extra_Constrained (Formal));
           end if;
  
--- 743,751 ----
           Set_Debug_Info_Needed (New_F);
  
           if Ekind (Formal) = E_In_Parameter then
!             Mutate_Ekind (New_F, E_Constant);
           else
!             Mutate_Ekind (New_F, E_Variable);
              Set_Extra_Constrained (New_F, Extra_Constrained (Formal));
           end if;
  
*************** package body Exp_Ch9 is
*** 837,843 ****
        Insert_Before (Last (Statements (Stats)), Call);
        Analyze (Call);
  
!       --  Ada 2020 (AI12-0279)
  
        if Has_Yield_Aspect (Entity (Entry_Direct_Name (Astat)))
          and then RTE_Available (RE_Yield)
--- 845,851 ----
        Insert_Before (Last (Statements (Stats)), Call);
        Analyze (Call);
  
!       --  Ada 2022 (AI12-0279)
  
        if Has_Yield_Aspect (Entity (Entry_Direct_Name (Astat)))
          and then RTE_Available (RE_Yield)
*************** package body Exp_Ch9 is
*** 860,866 ****
              Append (Call, Statements (Hand));
              Analyze (Call);
  
!             --  Ada 2020 (AI12-0279)
  
              if Has_Yield_Aspect (Entity (Entry_Direct_Name (Astat)))
                and then RTE_Available (RE_Yield)
--- 868,874 ----
              Append (Call, Statements (Hand));
              Analyze (Call);
  
!             --  Ada 2022 (AI12-0279)
  
              if Has_Yield_Aspect (Entity (Entry_Direct_Name (Astat)))
                and then RTE_Available (RE_Yield)
*************** package body Exp_Ch9 is
*** 913,919 ****
  
              Statements => New_List (Call))));
  
!       --  Ada 2020 (AI12-0279)
  
        if Has_Yield_Aspect (Entity (Entry_Direct_Name (Astat)))
          and then RTE_Available (RE_Yield)
--- 921,927 ----
  
              Statements => New_List (Call))));
  
!       --  Ada 2022 (AI12-0279)
  
        if Has_Yield_Aspect (Entity (Entry_Direct_Name (Astat)))
          and then RTE_Available (RE_Yield)
*************** package body Exp_Ch9 is
*** 1052,1058 ****
     function Build_Barrier_Function
       (N   : Node_Id;
        Ent : Entity_Id;
!       Pid : Node_Id) return Node_Id
     is
        Ent_Formals : constant Node_Id    := Entry_Body_Formal_Part (N);
        Cond        : constant Node_Id    := Condition (Ent_Formals);
--- 1060,1066 ----
     function Build_Barrier_Function
       (N   : Node_Id;
        Ent : Entity_Id;
!       Pid : Entity_Id) return Node_Id
     is
        Ent_Formals : constant Node_Id    := Entry_Body_Formal_Part (N);
        Cond        : constant Node_Id    := Condition (Ent_Formals);
*************** package body Exp_Ch9 is
*** 1575,1583 ****
     --------------------------------
  
     function Build_Corresponding_Record
!     (N    : Node_Id;
!      Ctyp : Entity_Id;
!      Loc  : Source_Ptr) return Node_Id
     is
        Rec_Ent  : constant Entity_Id :=
                     Make_Defining_Identifier
--- 1583,1591 ----
     --------------------------------
  
     function Build_Corresponding_Record
!      (N    : Node_Id;
!       Ctyp : Entity_Id;
!       Loc  : Source_Ptr) return Node_Id
     is
        Rec_Ent  : constant Entity_Id :=
                     Make_Defining_Identifier
*************** package body Exp_Ch9 is
*** 1589,1595 ****
  
     begin
        Set_Corresponding_Record_Type     (Ctyp, Rec_Ent);
!       Set_Ekind                         (Rec_Ent, E_Record_Type);
        Set_Has_Delayed_Freeze            (Rec_Ent, Has_Delayed_Freeze (Ctyp));
        Set_Is_Concurrent_Record_Type     (Rec_Ent, True);
        Set_Corresponding_Concurrent_Type (Rec_Ent, Ctyp);
--- 1597,1603 ----
  
     begin
        Set_Corresponding_Record_Type     (Ctyp, Rec_Ent);
!       Mutate_Ekind                      (Rec_Ent, E_Record_Type);
        Set_Has_Delayed_Freeze            (Rec_Ent, Has_Delayed_Freeze (Ctyp));
        Set_Is_Concurrent_Record_Type     (Rec_Ent, True);
        Set_Corresponding_Concurrent_Type (Rec_Ent, Ctyp);
*************** package body Exp_Ch9 is
*** 1752,1785 ****
        --  Generate a dummy master if tasks or tasking hierarchies are
        --  prohibited.
  
!       --    _Master : constant Master_Id := 3;
  
        if not Tasking_Allowed
          or else Restrictions.Set (No_Task_Hierarchy)
          or else not RTE_Available (RE_Current_Master)
        then
!          declare
!             Expr : Node_Id;
! 
!          begin
!             --  RE_Library_Task_Level is not always available in configurable
!             --  RunTime
! 
!             if not RTE_Available (RE_Library_Task_Level) then
!                Expr := Make_Integer_Literal (Loc, Uint_3);
!             else
!                Expr := New_Occurrence_Of (RTE (RE_Library_Task_Level), Loc);
!             end if;
! 
!             Master_Decl :=
!               Make_Object_Declaration (Loc,
!                 Defining_Identifier =>
!                   Make_Defining_Identifier (Loc, Name_uMaster),
!                 Constant_Present    => True,
!                 Object_Definition   =>
!                   New_Occurrence_Of (Standard_Integer, Loc),
!                 Expression          => Expr);
!          end;
  
        --  Generate:
        --    _master : constant Integer := Current_Master.all;
--- 1760,1780 ----
        --  Generate a dummy master if tasks or tasking hierarchies are
        --  prohibited.
  
!       --    _Master : constant Integer := Library_Task_Level;
  
        if not Tasking_Allowed
          or else Restrictions.Set (No_Task_Hierarchy)
          or else not RTE_Available (RE_Current_Master)
        then
!          Master_Decl :=
!            Make_Object_Declaration (Loc,
!              Defining_Identifier =>
!                Make_Defining_Identifier (Loc, Name_uMaster),
!              Constant_Present    => True,
!              Object_Definition   =>
!                New_Occurrence_Of (Standard_Integer, Loc),
!              Expression          =>
!                Make_Integer_Literal (Loc, Library_Task_Level));
  
        --  Generate:
        --    _master : constant Integer := Current_Master.all;
*************** package body Exp_Ch9 is
*** 2449,2457 ****
           --  Sem_Ch6.Override_Dispatching_Operation.
  
           if Ekind (Subp_Id) = E_Function then
!             Set_Ekind (Wrapper_Id, E_Function);
           else
!             Set_Ekind (Wrapper_Id, E_Procedure);
           end if;
  
           Set_Is_Primitive_Wrapper (Wrapper_Id);
--- 2444,2452 ----
           --  Sem_Ch6.Override_Dispatching_Operation.
  
           if Ekind (Subp_Id) = E_Function then
!             Mutate_Ekind (Wrapper_Id, E_Function);
           else
!             Mutate_Ekind (Wrapper_Id, E_Procedure);
           end if;
  
           Set_Is_Primitive_Wrapper (Wrapper_Id);
*************** package body Exp_Ch9 is
*** 2942,2948 ****
     --             Desired_Comp : Comp_Type := Expected_Comp;
     --             Comp         : Comp_Type renames Desired_Comp;
     --
!    --             <original delarations after the object renaming declaration
     --              of Comp>
     --
     --          begin
--- 2937,2943 ----
     --             Desired_Comp : Comp_Type := Expected_Comp;
     --             Comp         : Comp_Type renames Desired_Comp;
     --
!    --             <original declarations after the object renaming declaration
     --              of Comp>
     --
     --          begin
*************** package body Exp_Ch9 is
*** 2982,2988 ****
     --                              (_Object.Comp'Address));
     --       Comp          : Comp_Type renames Expected_Comp;
     --
!    --       <original delarations after the object renaming declaration of
     --        Comp>
     --
     --    begin
--- 2977,2983 ----
     --                              (_Object.Comp'Address));
     --       Comp          : Comp_Type renames Expected_Comp;
     --
!    --       <original declarations after the object renaming declaration of
     --        Comp>
     --
     --    begin
*************** package body Exp_Ch9 is
*** 3624,3630 ****
        Master_Decl :=
          Make_Object_Renaming_Declaration (Loc,
            Defining_Identifier => Master_Id,
!           Subtype_Mark        => New_Occurrence_Of (RTE (RE_Master_Id), Loc),
            Name                => Make_Identifier (Loc, Name_uMaster));
  
        Insert_Action (Context, Master_Decl);
--- 3619,3626 ----
        Master_Decl :=
          Make_Object_Renaming_Declaration (Loc,
            Defining_Identifier => Master_Id,
!           Subtype_Mark        =>
!             New_Occurrence_Of (Standard_Integer, Loc),
            Name                => Make_Identifier (Loc, Name_uMaster));
  
        Insert_Action (Context, Master_Decl);
*************** package body Exp_Ch9 is
*** 3775,3784 ****
                 raise Program_Error;
           end case;
  
-          --  Establish link between subprogram body entity and source entry
- 
-          Set_Corresponding_Protected_Entry (Bod_Id, Ent);
- 
           --  Create body of entry procedure. The renaming declarations are
           --  placed ahead of the block that contains the actual entry body.
  
--- 3771,3776 ----
*************** package body Exp_Ch9 is
*** 3812,3817 ****
--- 3804,3813 ----
                                 New_Occurrence_Of
                                   (RTE (RE_Get_GNAT_Exception), Loc)))))))));
  
+          --  Establish link between subprogram body and source entry body
+ 
+          Set_Corresponding_Entry_Body (Proc_Body, N);
+ 
           Reset_Scopes_To (Proc_Body, Protected_Body_Subprogram (Ent));
           return Proc_Body;
        end if;
*************** package body Exp_Ch9 is
*** 3889,3895 ****
  
           if Unprotected then
              Set_Protected_Formal (Formal, Defining_Identifier (New_Param));
!             Set_Ekind (Defining_Identifier (New_Param), Ekind (Formal));
           end if;
  
           Append (New_Param, New_Plist);
--- 3885,3891 ----
  
           if Unprotected then
              Set_Protected_Formal (Formal, Defining_Identifier (New_Param));
!             Mutate_Ekind (Defining_Identifier (New_Param), Ekind (Formal));
           end if;
  
           Append (New_Param, New_Plist);
*************** package body Exp_Ch9 is
*** 3960,3973 ****
        --  Sem_Ch4.Names_Match).
  
        if Mode = Dispatching_Mode then
!          Set_Ekind (New_Id, Ekind (Def_Id));
           Set_Original_Protected_Subprogram (New_Id, Def_Id);
        end if;
  
        --  Link the protected or unprotected version to the original subprogram
        --  it emulates.
  
!       Set_Ekind (New_Id, Ekind (Def_Id));
        Set_Protected_Subprogram (New_Id, Def_Id);
  
        --  The unprotected operation carries the user code, and debugging
--- 3956,3969 ----
        --  Sem_Ch4.Names_Match).
  
        if Mode = Dispatching_Mode then
!          Mutate_Ekind (New_Id, Ekind (Def_Id));
           Set_Original_Protected_Subprogram (New_Id, Def_Id);
        end if;
  
        --  Link the protected or unprotected version to the original subprogram
        --  it emulates.
  
!       Mutate_Ekind (New_Id, Ekind (Def_Id));
        Set_Protected_Subprogram (New_Id, Def_Id);
  
        --  The unprotected operation carries the user code, and debugging
*************** package body Exp_Ch9 is
*** 4398,4404 ****
        --  It would be better to encapsulate this as a routine in Exp_Dbug ???
  
        if Append_Char /= ' ' then
!          if Append_Char = 'P' or Append_Char = 'N' then
              Add_Char_To_Name_Buffer (Append_Char);
              return Name_Find;
           else
--- 4394,4400 ----
        --  It would be better to encapsulate this as a routine in Exp_Dbug ???
  
        if Append_Char /= ' ' then
!          if Append_Char in 'P' | 'N' then
              Add_Char_To_Name_Buffer (Append_Char);
              return Name_Find;
           else
*************** package body Exp_Ch9 is
*** 6003,6011 ****
                    Set_Debug_Info_Needed (New_F);
  
                    if Ekind (Formal) = E_In_Parameter then
!                      Set_Ekind (New_F, E_Constant);
                    else
!                      Set_Ekind (New_F, E_Variable);
                       Set_Extra_Constrained (New_F, Extra_Constrained (Formal));
                    end if;
  
--- 5999,6007 ----
                    Set_Debug_Info_Needed (New_F);
  
                    if Ekind (Formal) = E_In_Parameter then
!                      Mutate_Ekind (New_F, E_Constant);
                    else
!                      Mutate_Ekind (New_F, E_Variable);
                       Set_Extra_Constrained (New_F, Extra_Constrained (Formal));
                    end if;
  
*************** package body Exp_Ch9 is
*** 6205,6215 ****
        begin
           if Is_Static_Expression (N) then
              return True;
!          elsif Ada_Version >= Ada_2020
             and then Nkind (N) in N_Selected_Component | N_Indexed_Component
             and then Statically_Names_Object (N)
           then
!             --  Restriction relaxed in Ada2020 to allow statically named
              --  subcomponents.
              return Is_Simple_Barrier (Prefix (N));
           end if;
--- 6201,6211 ----
        begin
           if Is_Static_Expression (N) then
              return True;
!          elsif Ada_Version >= Ada_2022
             and then Nkind (N) in N_Selected_Component | N_Indexed_Component
             and then Statically_Names_Object (N)
           then
!             --  Restriction relaxed in Ada 2022 to allow statically named
              --  subcomponents.
              return Is_Simple_Barrier (Prefix (N));
           end if;
*************** package body Exp_Ch9 is
*** 6322,6329 ****
                 end if;
  
              when N_Short_Circuit
!               | N_If_Expression
!               | N_Case_Expression
              =>
                 return OK;
  
--- 6318,6325 ----
                 end if;
  
              when N_Short_Circuit
!                | N_If_Expression
!                | N_Case_Expression
              =>
                 return OK;
  
*************** package body Exp_Ch9 is
*** 6514,6527 ****
  
                    --  Task_Id (Tasknm._disp_get_task_id)
  
!                   Make_Unchecked_Type_Conversion (Loc,
!                     Subtype_Mark =>
!                       New_Occurrence_Of (RTE (RO_ST_Task_Id), Loc),
!                     Expression   =>
!                       Make_Selected_Component (Loc,
!                         Prefix        => New_Copy_Tree (Tasknm),
!                         Selector_Name =>
!                           Make_Identifier (Loc, Name_uDisp_Get_Task_Id)))));
  
           else
              Append_To (Component_Associations (Aggr),
--- 6510,6521 ----
  
                    --  Task_Id (Tasknm._disp_get_task_id)
  
!                   Unchecked_Convert_To
!                     (RTE (RO_ST_Task_Id),
!                      Make_Selected_Component (Loc,
!                        Prefix        => New_Copy_Tree (Tasknm),
!                        Selector_Name =>
!                          Make_Identifier (Loc, Name_uDisp_Get_Task_Id)))));
  
           else
              Append_To (Component_Associations (Aggr),
*************** package body Exp_Ch9 is
*** 6664,6670 ****
  
           Analyze (N);
  
!          --  Ada 2020 (AI12-0279)
  
           if Has_Yield_Aspect (Eent)
             and then RTE_Available (RE_Yield)
--- 6658,6664 ----
  
           Analyze (N);
  
!          --  Ada 2022 (AI12-0279)
  
           if Has_Yield_Aspect (Eent)
             and then RTE_Available (RE_Yield)
*************** package body Exp_Ch9 is
*** 6689,6695 ****
           --  statement if any to initialize the declarations of the block.
  
           Blkent := Make_Temporary (Loc, 'A');
!          Set_Ekind (Blkent, E_Block);
           Set_Etype (Blkent, Standard_Void_Type);
           Set_Scope (Blkent, Current_Scope);
  
--- 6683,6689 ----
           --  statement if any to initialize the declarations of the block.
  
           Blkent := Make_Temporary (Loc, 'A');
!          Mutate_Ekind (Blkent, E_Block);
           Set_Etype (Blkent, Standard_Void_Type);
           Set_Scope (Blkent, Current_Scope);
  
*************** package body Exp_Ch9 is
*** 7246,7255 ****
                Make_Assignment_Statement (Loc,
                  Name       => New_Occurrence_Of (Bnn, Loc),
                  Expression =>
!                   Make_Unchecked_Type_Conversion (Loc,
!                     Subtype_Mark =>
!                       New_Occurrence_Of (RTE (RE_Communication_Block), Loc),
!                     Expression   => Make_Identifier (Loc, Name_uD))));
  
              --  Generate:
              --    _Disp_Asynchronous_Select (<object>, S, P'Address, D, B);
--- 7240,7248 ----
                Make_Assignment_Statement (Loc,
                  Name       => New_Occurrence_Of (Bnn, Loc),
                  Expression =>
!                   Unchecked_Convert_To
!                     (RTE (RE_Communication_Block),
!                      Make_Identifier (Loc, Name_uD))));
  
              --  Generate:
              --    _Disp_Asynchronous_Select (<object>, S, P'Address, D, B);
*************** package body Exp_Ch9 is
*** 7365,7374 ****
                  Name =>
                    New_Occurrence_Of (Bnn, Loc),
                  Expression =>
!                   Make_Unchecked_Type_Conversion (Loc,
!                     Subtype_Mark =>
!                       New_Occurrence_Of (RTE (RE_Communication_Block), Loc),
!                     Expression   => Make_Identifier (Loc, Name_uD))));
  
              --  Generate:
              --    _Disp_Asynchronous_Select (<object>, S, P'Address, D, B);
--- 7358,7366 ----
                  Name =>
                    New_Occurrence_Of (Bnn, Loc),
                  Expression =>
!                   Unchecked_Convert_To
!                     (RTE (RE_Communication_Block),
!                      Make_Identifier (Loc, Name_uD))));
  
              --  Generate:
              --    _Disp_Asynchronous_Select (<object>, S, P'Address, D, B);
*************** package body Exp_Ch9 is
*** 10881,10887 ****
  
              --  Link the acceptor to the original receiving entry
  
!             Set_Ekind           (PB_Ent, E_Procedure);
              Set_Receiving_Entry (PB_Ent, Eent);
  
              if Comes_From_Source (Alt) then
--- 10873,10879 ----
  
              --  Link the acceptor to the original receiving entry
  
!             Mutate_Ekind        (PB_Ent, E_Procedure);
              Set_Receiving_Entry (PB_Ent, Eent);
  
              if Comes_From_Source (Alt) then
*************** package body Exp_Ch9 is
*** 11001,11007 ****
                 Entry_Id : constant Entity_Id :=
                             Entity (Entry_Direct_Name (Accept_Statement (Alt)));
              begin
!                --  Ada 2020 (AI12-0279)
  
                 if Has_Yield_Aspect (Entry_Id)
                   and then RTE_Available (RE_Yield)
--- 10993,10999 ----
                 Entry_Id : constant Entity_Id :=
                             Entity (Entry_Direct_Name (Accept_Statement (Alt)));
              begin
!                --  Ada 2022 (AI12-0279)
  
                 if Has_Yield_Aspect (Entry_Id)
                   and then RTE_Available (RE_Yield)
*************** package body Exp_Ch9 is
*** 12524,12536 ****
           --  procedure for this corresponding record type and we won't get it
           --  in time if we don't freeze now.
  
!          declare
!             L : constant List_Id := Freeze_Entity (Rec_Ent, N);
!          begin
!             if Is_Non_Empty_List (L) then
!                Insert_List_After (Body_Decl, L);
!             end if;
!          end;
        end if;
  
        --  Complete the expansion of access types to the current task type, if
--- 12516,12522 ----
           --  procedure for this corresponding record type and we won't get it
           --  in time if we don't freeze now.
  
!          Insert_List_After (Body_Decl, List => Freeze_Entity (Rec_Ent, N));
        end if;
  
        --  Complete the expansion of access types to the current task type, if
*************** package body Exp_Ch9 is
*** 13804,13824 ****
                 Comp    : Node_Id;
                 Comp_Id : Entity_Id;
                 Decl_Id : Entity_Id;
  
              begin
                 Comp := First (Private_Declarations (Def));
                 while Present (Comp) loop
                    if Nkind (Comp) = N_Component_Declaration then
                       Comp_Id := Defining_Identifier (Comp);
!                      Decl_Id :=
!                        Make_Defining_Identifier (Loc, Chars (Comp_Id));
  
                       --  Minimal decoration
  
                       if Ekind (Spec_Id) = E_Function then
!                         Set_Ekind (Decl_Id, E_Constant);
                       else
!                         Set_Ekind (Decl_Id, E_Variable);
                       end if;
  
                       Set_Prival         (Comp_Id, Decl_Id);
--- 13790,13811 ----
                 Comp    : Node_Id;
                 Comp_Id : Entity_Id;
                 Decl_Id : Entity_Id;
+                Nam     : Name_Id;
  
              begin
                 Comp := First (Private_Declarations (Def));
                 while Present (Comp) loop
                    if Nkind (Comp) = N_Component_Declaration then
                       Comp_Id := Defining_Identifier (Comp);
!                      Nam     := Chars (Comp_Id);
!                      Decl_Id := Make_Defining_Identifier (Sloc (Comp_Id), Nam);
  
                       --  Minimal decoration
  
                       if Ekind (Spec_Id) = E_Function then
!                         Mutate_Ekind (Decl_Id, E_Constant);
                       else
!                         Mutate_Ekind (Decl_Id, E_Variable);
                       end if;
  
                       Set_Prival         (Comp_Id, Decl_Id);
*************** package body Exp_Ch9 is
*** 13826,13831 ****
--- 13813,13826 ----
                       Set_Is_Aliased     (Decl_Id, Is_Aliased     (Comp_Id));
                       Set_Is_Independent (Decl_Id, Is_Independent (Comp_Id));
  
+                      --  Copy the Comes_From_Source flag of the component, as
+                      --  the renaming may be the only entity directly seen by
+                      --  the user in the context, but do not warn for it.
+ 
+                      Set_Comes_From_Source
+                        (Decl_Id, Comes_From_Source (Comp_Id));
+                      Set_Warnings_Off (Decl_Id);
+ 
                       --  Generate:
                       --    comp_name : comp_typ renames _object.comp_name;
  
*************** package body Exp_Ch9 is
*** 13836,13845 ****
                             New_Occurrence_Of (Etype (Comp_Id), Loc),
                           Name =>
                             Make_Selected_Component (Loc,
!                              Prefix =>
!                                New_Occurrence_Of (Obj_Ent, Loc),
!                              Selector_Name =>
!                                Make_Identifier (Loc, Chars (Comp_Id))));
                       Add (Decl);
                    end if;
  
--- 13831,13838 ----
                             New_Occurrence_Of (Etype (Comp_Id), Loc),
                           Name =>
                             Make_Selected_Component (Loc,
!                              Prefix => New_Occurrence_Of (Obj_Ent, Loc),
!                              Selector_Name => Make_Identifier (Loc, Nam)));
                       Add (Decl);
                    end if;
  
*************** package body Exp_Ch9 is
*** 13868,13874 ****
           begin
              --  Minimal decoration
  
!             Set_Ekind                (Index_Con, E_Constant);
              Set_Entry_Index_Constant (Index, Index_Con);
              Set_Discriminal_Link     (Index_Con, Index);
  
--- 13861,13867 ----
           begin
              --  Minimal decoration
  
!             Mutate_Ekind             (Index_Con, E_Constant);
              Set_Entry_Index_Constant (Index, Index_Con);
              Set_Discriminal_Link     (Index_Con, Index);
  
*************** package body Exp_Ch9 is
*** 13972,13980 ****
     begin
        return Scope (Base_Index) = Standard_Standard
          and then Base_Index = Base_Type (Standard_Integer)
!         and then Has_Discriminants (Conctyp)
!         and then
!           Present (Discriminant_Default_Value (First_Discriminant (Conctyp)))
          and then
            (Denotes_Discriminant (Lo, True)
               or else
--- 13965,13971 ----
     begin
        return Scope (Base_Index) = Standard_Standard
          and then Base_Index = Base_Type (Standard_Integer)
!         and then Has_Defaulted_Discriminants (Conctyp)
          and then
            (Denotes_Discriminant (Lo, True)
               or else
*************** package body Exp_Ch9 is
*** 14708,14715 ****
           if Restriction_Active (No_Task_Hierarchy) = False then
              Append_To (Args, Make_Identifier (Loc, Name_uMaster));
           else
!             Append_To (Args,
!               New_Occurrence_Of (RTE (RE_Library_Task_Level), Loc));
           end if;
        end if;
  
--- 14699,14705 ----
           if Restriction_Active (No_Task_Hierarchy) = False then
              Append_To (Args, Make_Identifier (Loc, Name_uMaster));
           else
!             Append_To (Args, Make_Integer_Literal (Loc, Library_Task_Level));
           end if;
        end if;
  
*************** package body Exp_Ch9 is
*** 14878,14884 ****
        Actuals : List_Id;
        Formals : List_Id;
        Decls   : List_Id;
!       Stmts   : List_Id) return Node_Id
     is
        Actual    : Entity_Id;
        Expr      : Node_Id := Empty;
--- 14868,14874 ----
        Actuals : List_Id;
        Formals : List_Id;
        Decls   : List_Id;
!       Stmts   : List_Id) return Entity_Id
     is
        Actual    : Entity_Id;
        Expr      : Node_Id := Empty;
*************** package body Exp_Ch9 is
*** 15142,15148 ****
                Make_Defining_Identifier (Sloc (D),
                  Chars => New_External_Name (Chars (D), 'D'));
  
!             Set_Ekind (D_Minal, E_Constant);
              Set_Etype (D_Minal, Etype (D));
              Set_Scope (D_Minal, Pdef);
              Set_Discriminal (D, D_Minal);
--- 15132,15138 ----
                Make_Defining_Identifier (Sloc (D),
                  Chars => New_External_Name (Chars (D), 'D'));
  
!             Mutate_Ekind (D_Minal, E_Constant);
              Set_Etype (D_Minal, Etype (D));
              Set_Scope (D_Minal, Pdef);
              Set_Discriminal (D, D_Minal);
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_ch9.ads gcc-12.1.0/gcc/ada/exp_ch9.ads
*** gcc-11.3.0/gcc/ada/exp_ch9.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_ch9.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_code.adb gcc-12.1.0/gcc/ada/exp_code.adb
*** gcc-11.3.0/gcc/ada/exp_code.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_code.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
***************
*** 23,44 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Rtsfind;  use Rtsfind;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Eval; use Sem_Eval;
! with Sem_Util; use Sem_Util;
! with Sem_Warn; use Sem_Warn;
! with Sinfo;    use Sinfo;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
  
  package body Exp_Code is
  
--- 23,48 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Rtsfind;        use Rtsfind;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
  
  package body Exp_Code is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_code.ads gcc-12.1.0/gcc/ada/exp_code.ads
*** gcc-11.3.0/gcc/ada/exp_code.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_code.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
*************** package Exp_Code is
*** 53,58 ****
--- 53,59 ----
     --  with subsequent calls to Clobber_Get_Next.
  
     function Clobber_Get_Next return System.Address;
+    pragma Convention (C, Clobber_Get_Next);
     --  Can only be called after a previous call to Clobber_Setup. The
     --  returned value is a pointer to a null terminated (C format) string
     --  for the next register argument. Null_Address is returned when there
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_dbug.adb gcc-12.1.0/gcc/ada/exp_dbug.adb
*** gcc-11.3.0/gcc/ada/exp_dbug.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_dbug.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
***************
*** 24,46 ****
  ------------------------------------------------------------------------------
  
  with Alloc;
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Exp_Util; use Exp_Util;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Output;   use Output;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Eval; use Sem_Eval;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
  with Table;
! with Tbuild;   use Tbuild;
! with Urealp;   use Urealp;
  
  package body Exp_Dbug is
  
--- 24,50 ----
  ------------------------------------------------------------------------------
  
  with Alloc;
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Exp_Util;       use Exp_Util;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Output;         use Output;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
  with Table;
! with Tbuild;         use Tbuild;
! with Urealp;         use Urealp;
  
  package body Exp_Dbug is
  
*************** package body Exp_Dbug is
*** 168,174 ****
     procedure Add_Real_To_Buffer (U : Ureal) is
     begin
        Add_Uint_To_Buffer (Norm_Num (U));
!       Add_Str_To_Name_Buffer ("_");
        Add_Uint_To_Buffer (Norm_Den (U));
     end Add_Real_To_Buffer;
  
--- 172,178 ----
     procedure Add_Real_To_Buffer (U : Ureal) is
     begin
        Add_Uint_To_Buffer (Norm_Num (U));
!       Add_Char_To_Name_Buffer ('_');
        Add_Uint_To_Buffer (Norm_Den (U));
     end Add_Real_To_Buffer;
  
*************** package body Exp_Dbug is
*** 286,291 ****
--- 290,300 ----
     --------------------------------
  
     function Debug_Renaming_Declaration (N : Node_Id) return Node_Id is
+       pragma Assert
+         (Nkind (N) in N_Object_Renaming_Declaration
+                     | N_Package_Renaming_Declaration
+                     | N_Exception_Renaming_Declaration);
+ 
        Loc : constant Source_Ptr := Sloc (N);
        Ent : constant Node_Id    := Defining_Entity (N);
        Nam : constant Node_Id    := Name (N);
*************** package body Exp_Dbug is
*** 315,322 ****
        --  output in one of these two forms. The result is prepended to the
        --  name stored in Name_Buffer.
  
!       function Scope_Contains (Sc : Node_Id; Ent : Entity_Id) return Boolean;
!       --  Return whether Ent belong to the Sc scope
  
        ----------------------------
        -- Enable_If_Packed_Array --
--- 324,334 ----
        --  output in one of these two forms. The result is prepended to the
        --  name stored in Name_Buffer.
  
!       function Scope_Contains
!         (Outer : Entity_Id;
!          Inner : Entity_Id)
!          return Boolean;
!       --  Return whether Inner belongs to the Outer scope
  
        ----------------------------
        -- Enable_If_Packed_Array --
*************** package body Exp_Dbug is
*** 344,351 ****
  
           elsif Nkind (N) = N_Identifier
             and then Scope_Contains (Scope (Entity (N)), Ent)
!            and then (Ekind (Entity (N)) = E_Constant
!                       or else Ekind (Entity (N)) = E_In_Parameter)
           then
              Prepend_String_To_Buffer (Get_Name_String (Chars (Entity (N))));
  
--- 356,362 ----
  
           elsif Nkind (N) = N_Identifier
             and then Scope_Contains (Scope (Entity (N)), Ent)
!            and then Ekind (Entity (N)) in E_Constant | E_In_Parameter
           then
              Prepend_String_To_Buffer (Get_Name_String (Chars (Entity (N))));
  
*************** package body Exp_Dbug is
*** 361,372 ****
        -- Scope_Contains --
        --------------------
  
!       function Scope_Contains (Sc : Node_Id; Ent : Entity_Id) return Boolean is
!          Cur : Node_Id := Scope (Ent);
  
        begin
           while Present (Cur) loop
!             if Cur = Sc then
                 return True;
              end if;
  
--- 372,387 ----
        -- Scope_Contains --
        --------------------
  
!       function Scope_Contains
!         (Outer : Entity_Id;
!          Inner : Entity_Id)
!          return Boolean
!       is
!          Cur : Entity_Id := Scope (Inner);
  
        begin
           while Present (Cur) loop
!             if Cur = Outer then
                 return True;
              end if;
  
*************** package body Exp_Dbug is
*** 399,412 ****
              when N_Expanded_Name
                 | N_Identifier
              =>
!                if not Present (Renamed_Object (Entity (Ren))) then
                    exit;
                 end if;
  
                 --  This is a renaming of a renaming: traverse until the final
                 --  renaming to see if anything is packed along the way.
  
!                Ren := Renamed_Object (Entity (Ren));
  
              when N_Selected_Component =>
                 declare
--- 414,429 ----
              when N_Expanded_Name
                 | N_Identifier
              =>
!                if No (Entity (Ren))
!                  or else not Present (Renamed_Entity_Or_Object (Entity (Ren)))
!                then
                    exit;
                 end if;
  
                 --  This is a renaming of a renaming: traverse until the final
                 --  renaming to see if anything is packed along the way.
  
!                Ren := Renamed_Entity_Or_Object (Entity (Ren));
  
              when N_Selected_Component =>
                 declare
*************** package body Exp_Dbug is
*** 428,434 ****
                      Enable
                        or else Is_Packed
                                  (Underlying_Type (Etype (Prefix (Ren))))
!                       or else (First_Bit /= No_Uint
                                  and then First_Bit /= Uint_0);
                 end;
  
--- 445,451 ----
                      Enable
                        or else Is_Packed
                                  (Underlying_Type (Etype (Prefix (Ren))))
!                       or else (Present (First_Bit)
                                  and then First_Bit /= Uint_0);
                 end;
  
*************** package body Exp_Dbug is
*** 645,667 ****
  
        Has_Suffix := True;
  
!       --  Fixed-point case: generate GNAT encodings when asked to
  
!       if Is_Fixed_Point_Type (E)
!         and then GNAT_Encodings = DWARF_GNAT_Encodings_All
        then
           Get_External_Name (E, True, "XF_");
           Add_Real_To_Buffer (Delta_Value (E));
  
           if Small_Value (E) /= Delta_Value (E) then
!             Add_Str_To_Name_Buffer ("_");
              Add_Real_To_Buffer (Small_Value (E));
           end if;
  
!       --  Discrete case where bounds do not match size. Not necessary if we can
!       --  emit standard DWARF.
  
!       elsif GNAT_Encodings /= DWARF_GNAT_Encodings_Minimal
          and then Is_Discrete_Type (E)
          and then not Bounds_Match_Size (E)
        then
--- 662,683 ----
  
        Has_Suffix := True;
  
!       --  Generate GNAT encodings when asked to for fixed-point case
  
!       if GNAT_Encodings = DWARF_GNAT_Encodings_All
!         and then Is_Fixed_Point_Type (E)
        then
           Get_External_Name (E, True, "XF_");
           Add_Real_To_Buffer (Delta_Value (E));
  
           if Small_Value (E) /= Delta_Value (E) then
!             Add_Char_To_Name_Buffer ('_');
              Add_Real_To_Buffer (Small_Value (E));
           end if;
  
!       --  Likewise for discrete case where bounds do not match size
  
!       elsif GNAT_Encodings = DWARF_GNAT_Encodings_All
          and then Is_Discrete_Type (E)
          and then not Bounds_Match_Size (E)
        then
*************** package body Exp_Dbug is
*** 694,700 ****
  
              if Lo_Encode or Hi_Encode then
                 if Biased then
!                   Add_Str_To_Name_Buffer ("_");
                 else
                    if Lo_Encode then
                       if Hi_Encode then
--- 710,716 ----
  
              if Lo_Encode or Hi_Encode then
                 if Biased then
!                   Add_Char_To_Name_Buffer ('_');
                 else
                    if Lo_Encode then
                       if Hi_Encode then
*************** package body Exp_Dbug is
*** 1519,1525 ****
  
                 begin
                    Set_Entity_Name (Var);
!                   Add_Str_To_Name_Buffer ("L");
                    Set_Chars (Var, Name_Enter);
                 end;
  
--- 1535,1541 ----
  
                 begin
                    Set_Entity_Name (Var);
!                   Add_Char_To_Name_Buffer ('L');
                    Set_Chars (Var, Name_Enter);
                 end;
  
*************** package body Exp_Dbug is
*** 1528,1534 ****
                and then Ekind (Scope (Homonym (Ent))) = E_Block
              then
                 Set_Entity_Name (Ent);
!                Add_Str_To_Name_Buffer ("B");
                 Set_Chars (Ent, Name_Enter);
              end if;
           end if;
--- 1544,1550 ----
                and then Ekind (Scope (Homonym (Ent))) = E_Block
              then
                 Set_Entity_Name (Ent);
!                Add_Char_To_Name_Buffer ('B');
                 Set_Chars (Ent, Name_Enter);
              end if;
           end if;
*************** package body Exp_Dbug is
*** 1547,1553 ****
        then
           Set_BNPE_Suffix (Ent);
  
!          --  Strip trailing n's and last trailing b as required. note that
           --  we know there is at least one b, or no suffix would be generated.
  
           while Name_Buffer (Name_Len) = 'n' loop
--- 1563,1569 ----
        then
           Set_BNPE_Suffix (Ent);
  
!          --  Strip trailing n's and last trailing b as required. Note that
           --  we know there is at least one b, or no suffix would be generated.
  
           while Name_Buffer (Name_Len) = 'n' loop
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_dbug.ads gcc-12.1.0/gcc/ada/exp_dbug.ads
*** gcc-11.3.0/gcc/ada/exp_dbug.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_dbug.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
***************
*** 23,31 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Expand routines for generation of special declarations used by the
! --  debugger. In accordance with the Dwarf 2.2 specification, certain
! --  type names are encoded to provide information to the debugger.
  
  with Namet; use Namet;
  with Types; use Types;
--- 23,33 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Expand routines for the generation of special declarations used by the
! --  debugger. In accordance with the DWARF specification, certain type names
! --  may also be encoded to provide additional information to the debugger, but
! --  this practice is being deprecated and some encodings described below are no
! --  longer generated by default (they are marked OBSOLETE).
  
  with Namet; use Namet;
  with Types; use Types;
*************** package Exp_Dbug is
*** 496,548 ****
     --  corresponding positive value followed by a lower case m for minus to
     --  indicate that the value is negative (e.g. 2m for -2).
  
!    -------------------------
!    -- Type Name Encodings --
!    -------------------------
  
!    --  In the following typ is the name of the type as normally encoded by the
!    --  debugger rules, i.e. a non-qualified name, all in lower case, with
!    --  standard encoding of upper half and wide characters
  
!       ------------------------
!       -- Encapsulated Types --
!       ------------------------
  
!       --  In some cases, the compiler encapsulates a type by wrapping it in a
!       --  structure. For example, this is used when a size or alignment
!       --  specification requires a larger type. Consider:
  
!       --    type y is mod 2 ** 64;
!       --    for y'size use 256;
  
!       --  In this case the compile generates a structure type y___PAD, which
!       --  has a single field whose name is F. This single field is 64 bits
!       --  long and contains the actual value. This kind of padding is used
!       --  when the logical value to be stored is shorter than the object in
!       --  which it is allocated. For example if a size clause is used to set
!       --  a size of 256 for a signed integer value, then a typical choice is
!       --  to wrap a 64-bit integer in a 256 bit PAD structure.
  
!       --  A similar encapsulation is done for some packed array types, in which
!       --  case the structure type is y___JM and the field name is OBJECT.
!       --  This is used in the case of a packed array stored using modular
!       --  representation (see section on representation of packed array
!       --  objects). In this case the JM wrapping is used to achieve correct
!       --  positioning of the packed array value (left or right justified in its
!       --  field depending on endianness.
  
!       --  When the debugger sees an object of a type whose name has a suffix of
!       --  ___PAD or ___JM, the type will be a record containing a single field,
!       --  and the name of that field will be all upper case. In this case, it
!       --  should look inside to get the value of the inner field, and neither
!       --  the outer structure name, nor the field name should appear when the
!       --  value is printed.
  
!       --  When the debugger sees a record named REP being a field inside
!       --  another record, it should treat the fields inside REP as being part
!       --  of the outer record (this REP field is only present for code
!       --  generation purposes). The REP record should not appear in the values
!       --  printed by the debugger.
  
        -----------------------
        -- Fixed-Point Types --
--- 498,601 ----
     --  corresponding positive value followed by a lower case m for minus to
     --  indicate that the value is negative (e.g. 2m for -2).
  
!    ------------------------
!    -- Encapsulated Types --
!    ------------------------
  
!    --  In some cases, the compiler may encapsulate a type by wrapping it in a
!    --  record. For example, this is used when a size or alignment specification
!    --  requires a larger type. Consider:
  
!    --    type x is mod 2 ** 64;
!    --    for x'size use 256;
  
!    --  In this case, the compiler generates a record type x___PAD, which has
!    --  a single field whose name is F. This single field is 64-bit long and
!    --  contains the actual value. This kind of padding is used when the logical
!    --  value to be stored is shorter than the object in which it is allocated.
  
!    --  A similar encapsulation is done for some packed array types, in which
!    --  case the record type is x___JM and the field name is OBJECT. This is
!    --  used in the case of a packed array stored using modular representation
!    --  (see the section on representation of packed array objects). In this
!    --  case the wrapping is used to achieve correct positioning of the packed
!    --  array value (left/right justified in its field depending on endianness).
  
!    --  When the debugger sees an object of a type whose name has a suffix of
!    --  ___PAD or ___JM, the type will be a record containing a single field,
!    --  and the name of that field will be all upper case. In this case, it
!    --  should look inside to get the value of the inner field, and neither
!    --  the outer structure name, nor the field name should appear when the
!    --  value is printed.
  
!    --  Similarly, when the debugger sees a record named REP being the type of
!    --  a field inside another record type, it should treat the fields inside
!    --  REP as being part of the outer record (this REP field is only present
!    --  for code generation purposes). The REP record should not appear in the
!    --  values printed by the debugger.
  
!    --------------------
!    -- Implicit Types --
!    --------------------
  
!    --  The compiler creates implicit type names in many situations where a
!    --  type is present semantically, but no specific name is present. For
!    --  example:
! 
!    --     S : Integer range M .. N;
! 
!    --  Here the subtype of S is not integer, but rather an anonymous subtype
!    --  of Integer. Where possible, the compiler generates names for such
!    --  anonymous types that are related to the type from which the subtype
!    --  is obtained as follows:
! 
!    --     T name suffix
! 
!    --  where name is the name from which the subtype is obtained, using
!    --  lower case letters and underscores, and suffix starts with an upper
!    --  case letter. For example the name for the above declaration might be:
! 
!    --     TintegerS4b
! 
!    --  If the debugger is asked to give the type of an entity and the type
!    --  has the form T name suffix, it is probably appropriate to just use
!    --  "name" in the response since this is what is meaningful to the
!    --  programmer.
! 
!    -------------------
!    -- Modular Types --
!    -------------------
! 
!    --  A type declared
! 
!    --    type x is mod N;
! 
!    --  is encoded as a subrange of an unsigned base type with lower bound zero
!    --  and upper bound N - 1. Thus we give these types a somewhat nonstandard
!    --  interpretation: the standard interpretation would not, in general, imply
!    --  that arithmetic operations on type x are performed modulo N (especially
!    --  not when N is not a power of 2).
! 
!    --------------------------------------
!    -- Tagged Types and Type Extensions --
!    --------------------------------------
! 
!    --  A type D derived from a tagged type P has a field named "_parent" of
!    --  type P that contains its inherited fields. The type of this field is
!    --  usually P, but may be a more distant ancestor, if P is a null extension
!    --  of that type.
! 
!    --  The type tag of a tagged type is a field named "_tag" of a pointer type.
!    --  If the type is derived from another tagged type, its _tag field is found
!    --  in its _parent field.
! 
!    ------------------------------------
!    -- Type Name Encodings (OBSOLETE) --
!    ------------------------------------
! 
!    --  In the following typ is the name of the type as normally encoded by the
!    --  debugger rules, i.e. a non-qualified name, all in lower case, with
!    --  standard encoding of upper half and wide characters.
  
        -----------------------
        -- Fixed-Point Types --
*************** package Exp_Dbug is
*** 613,634 ****
        --   or compile time known values, with the encoding first for the lower
        --   bound, then for the upper bound, as previously described.
  
-       -------------------
-       -- Modular Types --
-       -------------------
- 
-       --  A type declared
- 
-       --    type x is mod N;
- 
-       --  Is encoded as a subrange of an unsigned base type with lower bound
-       --  zero and upper bound N. That is, there is no name encoding. We use
-       --  the standard encodings provided by the debugging format. Thus we
-       --  give these types a non-standard interpretation: the standard
-       --  interpretation of our encoding would not, in general, imply that
-       --  arithmetic on type x was to be performed modulo N (especially not
-       --  when N is not a power of 2).
- 
        ------------------
        -- Biased Types --
        ------------------
--- 666,671 ----
*************** package Exp_Dbug is
*** 887,920 ****
        --  redundantly, particularly in the fixed-point case, but this
        --  information can in any case be ignored by the debugger.
  
-       ----------------------------
-       -- Note on Implicit Types --
-       ----------------------------
- 
-       --  The compiler creates implicit type names in many situations where a
-       --  type is present semantically, but no specific name is present. For
-       --  example:
- 
-       --     S : Integer range M .. N;
- 
-       --  Here the subtype of S is not integer, but rather an anonymous subtype
-       --  of Integer. Where possible, the compiler generates names for such
-       --  anonymous types that are related to the type from which the subtype
-       --  is obtained as follows:
- 
-       --     T name suffix
- 
-       --  where name is the name from which the subtype is obtained, using
-       --  lower case letters and underscores, and suffix starts with an upper
-       --  case letter. For example the name for the above declaration might be:
- 
-       --     TintegerS4b
- 
-       --  If the debugger is asked to give the type of an entity and the type
-       --  has the form T name suffix, it is probably appropriate to just use
-       --  "name" in the response since this is what is meaningful to the
-       --  programmer.
- 
     -------------------------------------------------
     -- Subprograms for Handling Encoded Type Names --
     -------------------------------------------------
--- 924,929 ----
*************** package Exp_Dbug is
*** 1062,1112 ****
     --  debug declaration, then Empty is returned. This function also takes care
     --  of setting Materialize_Entity on the renamed entity where required.
  
-    ---------------------------
-    -- Packed Array Encoding --
-    ---------------------------
- 
-    --  For every constrained packed array, two types are created, and both
-    --  appear in the debugging output:
- 
-    --    The original declared array type is a perfectly normal array type, and
-    --    its index bounds indicate the original bounds of the array.
- 
-    --    The corresponding packed array type, which may be a modular type, or
-    --    may be an array of bytes type (see Exp_Pakd for full details). This is
-    --    the type that is actually used in the generated code and for debugging
-    --    information for all objects of the packed type.
- 
-    --  The name of the corresponding packed array type is:
- 
-    --    ttt___XPnnn
- 
-    --  where
- 
-    --    ttt is the name of the original declared array
-    --    nnn is the component size in bits (1-31)
- 
-    --  Note that if the packed array is not bit-packed, the name will simply
-    --  be tttP.
- 
-    --  When the debugger sees that an object is of a type that is encoded in
-    --  this manner, it can use the original type to determine the bounds and
-    --  the component type, and the component size to determine the packing
-    --  details.
- 
-    --  For an unconstrained packed array, the corresponding packed array type
-    --  is neither used in the generated code nor for debugging information,
-    --  only the original type is used. In order to convey the packing in the
-    --  debugging information, the compiler generates the associated fat- and
-    --  thin-pointer types (see the Pointers to Unconstrained Array section
-    --  below) using the name of the corresponding packed array type as the
-    --  base name, i.e. ttt___XPnnn___XUP and ttt___XPnnn___XUT respectively.
- 
-    --  When the debugger sees that an object is of a type that is encoded in
-    --  this manner, it can use the type of the fields to determine the bounds
-    --  and the component type, and the component size to determine the packing
-    --  details.
- 
     -------------------------------------------
     -- Packed Array Representation in Memory --
     -------------------------------------------
--- 1071,1076 ----
*************** package Exp_Dbug is
*** 1204,1209 ****
--- 1168,1218 ----
     --  would mean that an assignment such as a := above would require shifts
     --  when one value is in a register and the other value is in memory.
  
+    -------------------------------------------
+    -- Packed Array Name Encoding (OBSOLETE) --
+    -------------------------------------------
+ 
+    --  For every constrained packed array, two types are created, and both
+    --  appear in the debugging output:
+ 
+    --    The original declared array type is a perfectly normal array type, and
+    --    its index bounds indicate the original bounds of the array.
+ 
+    --    The corresponding packed array type, which may be a modular type, or
+    --    may be an array of bytes type (see Exp_Pakd for full details). This is
+    --    the type that is actually used in the generated code and for debugging
+    --    information for all objects of the packed type.
+ 
+    --  The name of the corresponding packed array type is:
+ 
+    --    ttt___XPnnn
+ 
+    --  where
+ 
+    --    ttt is the name of the original declared array
+    --    nnn is the component size in bits (1-31)
+ 
+    --  Note that if the packed array is not bit-packed, the name will simply
+    --  be tttP.
+ 
+    --  When the debugger sees that an object is of a type that is encoded in
+    --  this manner, it can use the original type to determine the bounds and
+    --  the component type, and the component size to determine the packing
+    --  details.
+ 
+    --  For an unconstrained packed array, the corresponding packed array type
+    --  is neither used in the generated code nor for debugging information,
+    --  only the original type is used. In order to convey the packing in the
+    --  debugging information, the compiler generates the associated fat- and
+    --  thin-pointer types (see the Pointers to Unconstrained Array section
+    --  below) using the name of the corresponding packed array type as the
+    --  base name, i.e. ttt___XPnnn___XUP and ttt___XPnnn___XUT respectively.
+ 
+    --  When the debugger sees that an object is of a type that is encoded in
+    --  this manner, it can use the type of the fields to determine the bounds
+    --  and the component type, and the component size to determine the packing
+    --  details.
+ 
     ------------------------------------------------------
     -- Subprograms for Handling Packed Array Type Names --
     ------------------------------------------------------
*************** package Exp_Dbug is
*** 1219,1276 ****
     -- Pointers to Unconstrained Arrays --
     --------------------------------------
  
!    --  There are two kinds of pointers to arrays. The debugger can tell which
!    --  format is in use by the form of the type of the pointer.
  
     --    Fat Pointers
  
!    --      Fat pointers are represented as a struct with two fields. This
!    --      struct has two distinguished field names:
  
     --        P_ARRAY is a pointer to the array type. The name of this type is
!    --        the unconstrained type followed by "___XUA". This array will have
!    --        bounds which are the discriminants, and hence are unparsable, but
!    --        will give the number of subscripts and the component type.
  
!    --        P_BOUNDS is a pointer to a struct, the name of  whose type is the
!    --        unconstrained array name followed by "___XUB" and which has
!    --        fields of the form
  
     --           LBn (n a decimal integer) lower bound of n'th dimension
     --           UBn (n a decimal integer) upper bound of n'th dimension
  
!    --        The bounds may be any integral type. In the case of an enumeration
!    --        type, Enum_Rep values are used.
  
!    --      For a given unconstrained array type, the compiler will generate one
!    --      fat-pointer type whose name is "arr___XUP", where "arr" is the name
!    --      of the array type, and use it to represent the array type itself in
!    --      the debugging information.
  
     --      For each pointer to this unconstrained array type, the compiler will
!    --      generate a typedef that points to the above "arr___XUP" fat-pointer
!    --      type. As a consequence, when it comes to fat-pointer types:
  
!    --        1. The type name is given by the typedef
  
     --        2. If the debugger is asked to output the type, the appropriate
!    --           form is "access arr", except if the type name is "arr___XUP"
!    --           for which it is the array definition.
  
     --    Thin Pointers
  
     --      The value of a thin pointer is a pointer to the second field of a
     --      structure with two fields. The name of this structure's type is
     --      "arr___XUT", where "arr" is the name of the unconstrained array
!    --      type. Even though it actually points into middle of this structure,
!    --      the thin pointer's type in debugging information is
!    --      pointer-to-arr___XUT.
  
!    --      The first field of arr___XUT is named BOUNDS, and has a type named
!    --      arr___XUB, with the structure described for such types in fat
!    --      pointers, as described above.
  
!    --      The second field of arr___XUT is named ARRAY, and contains the
     --      actual array. Because this array has a dynamic size, determined by
     --      the BOUNDS field that precedes it, all of the information about
     --      arr___XUT is encoded in a parallel type named arr___XUT___XVE, with
--- 1228,1294 ----
     -- Pointers to Unconstrained Arrays --
     --------------------------------------
  
!    --  There are two kinds of pointer to unconstrained arrays. The debugger can
!    --  tell which format is in use by the form of the type of the pointer.
  
     --    Fat Pointers
  
!    --      Fat pointers are represented as a structure with two fields. This
!    --      structure has two distinguished field names:
  
     --        P_ARRAY is a pointer to the array type. The name of this type is
!    --        the unconstrained type followed by "___XUA". The bounds of this
!    --        array will be obtained through dereferences of P_BOUNDS below.
  
!    --        P_BOUNDS is a pointer to a structure. The name of this type is
!    --        the unconstrained array name followed by "___XUB" and it has
!    --        fields of the form:
  
     --           LBn (n a decimal integer) lower bound of n'th dimension
     --           UBn (n a decimal integer) upper bound of n'th dimension
  
!    --        The bounds may be of any integral type. In the case of enumeration
!    --        types, Enum_Rep values are used.
  
!    --      For a given unconstrained array type, the compiler will generate a
!    --      fat pointer type whose name is the name of the array type, and use
!    --      it to represent the array type itself in the debugging information.
! 
!    --      This name was historically followed by "___XUP" (OBSOLETE).
  
     --      For each pointer to this unconstrained array type, the compiler will
!    --      generate a typedef that points to the above fat pointer type. As a
!    --      consequence, when it comes to fat pointer types:
  
!    --        1. The type name is given by the typedef, if any
  
     --        2. If the debugger is asked to output the type, the appropriate
!    --           form is "access arr" if there is the typedef, otherwise it is
!    --           the array definition.
  
     --    Thin Pointers
  
     --      The value of a thin pointer is a pointer to the second field of a
+    --      structure with two fields. The first field of the structure is of
+    --      the type ___XUB described for fat pointer types above. The second
+    --      field of the structure contains the actual array.
+ 
+    --      Thin pointers are represented as a regular pointer to array in the
+    --      debugging information. The bounds of this array will be the contents
+    --      of the first field above obtained through (shifted) dereferences.
+ 
+    --    Thin Pointers (OBSOLETE)
+ 
+    --      The value of a thin pointer is a pointer to the second field of a
     --      structure with two fields. The name of this structure's type is
     --      "arr___XUT", where "arr" is the name of the unconstrained array
!    --      type. Even though it points into the middle of this structure,
!    --      the type in the debugging information is pointer to structure.
  
!    --      The first field of the structure is named BOUNDS and is of the type
!    --      ___XUB described for fat pointer types above.
  
!    --      The second field of the structure is named ARRAY, and contains the
     --      actual array. Because this array has a dynamic size, determined by
     --      the BOUNDS field that precedes it, all of the information about
     --      arr___XUT is encoded in a parallel type named arr___XUT___XVE, with
*************** package Exp_Dbug is
*** 1279,1297 ****
     --      type in this case is named arr___XUA and only its element type is
     --      meaningful, just as described for fat pointers.
  
-    --------------------------------------
-    -- Tagged Types and Type Extensions --
-    --------------------------------------
- 
-    --  A type C derived from a tagged type P has a field named "_parent" of
-    --  type P that contains its inherited fields. The type of this field is
-    --  usually P (encoded as usual if it has a dynamic size), but may be a more
-    --  distant ancestor, if P is a null extension of that type.
- 
-    --  The type tag of a tagged type is a field named _tag, of type void*. If
-    --  the type is derived from another tagged type, its _tag field is found in
-    --  its _parent field.
- 
     -----------------------------
     -- Variant Record Encoding --
     -----------------------------
--- 1297,1302 ----
*************** package Exp_Dbug is
*** 1311,1318 ****
     --  union, in which each member of the union corresponds to one variant.
     --  However, unlike a C union, the size of the type may be variable even if
     --  each of the components are fixed size, since it includes a computation
!    --  of which variant is present. In that case, it will be encoded as above
!    --  and a type with the suffix "___XVN___XVU" will be present.
  
     --  The name of the union member is encoded to indicate the choices, and
     --  is a string given by the following grammar:
--- 1316,1322 ----
     --  union, in which each member of the union corresponds to one variant.
     --  However, unlike a C union, the size of the type may be variable even if
     --  each of the components are fixed size, since it includes a computation
!    --  of which variant is present.
  
     --  The name of the union member is encoded to indicate the choices, and
     --  is a string given by the following grammar:
*************** package Exp_Dbug is
*** 1335,1343 ****
     --  to the use of the Enum_Rep attribute).
  
     --  The type of the inner record is given by the name of the union type (as
!    --  above) concatenated with the above string. Since that type may itself be
!    --  variable-sized, it may also be encoded as above with a new type with a
!    --  further suffix of "___XVU".
  
     --  As an example, consider:
  
--- 1339,1345 ----
     --  to the use of the Enum_Rep attribute).
  
     --  The type of the inner record is given by the name of the union type (as
!    --  above) concatenated with the above string.
  
     --  As an example, consider:
  
*************** package Exp_Dbug is
*** 1375,1383 ****
     --        be encoded, as in ordinary C unions, as a single field of the
     --        enclosing union type named "x" of type "T", dispensing with the
     --        enclosing struct. In this case, of course, the discriminant values
!    --        corresponding to the variant are unavailable. As for normal
!    --        variants, the field name "x" may be suffixed with ___XVL if it
!    --        has dynamic size.
  
     --  For example, the type Var in the preceding section, if followed by
     --  "pragma Unchecked_Union (Var);" may be encoded as a struct with two
--- 1377,1383 ----
     --        be encoded, as in ordinary C unions, as a single field of the
     --        enclosing union type named "x" of type "T", dispensing with the
     --        enclosing struct. In this case, of course, the discriminant values
!    --        corresponding to the variant are unavailable.
  
     --  For example, the type Var in the preceding section, if followed by
     --  "pragma Unchecked_Union (Var);" may be encoded as a struct with two
*************** package Exp_Dbug is
*** 1549,1594 ****
     --  are missing and deal as best as it can with the limited information
     --  available.
  
!    ---------------------------------
!    -- GNAT Extensions to DWARF2/3 --
!    ---------------------------------
! 
!    --  If the compiler switch "-gdwarf+" is specified, GNAT Vendor extensions
!    --  to DWARF2/3 are generated, with the following variations from the above
!    --  specification.
! 
!    --   Change in the contents of the DW_AT_name attribute
! 
!    --     The operators are represented in their natural form. (for example,
!    --     the addition operator is written as "+" instead of "Oadd"). The
!    --     component separator is "." instead of "__"
! 
!    --   Introduction of DW_AT_GNAT_encoding, encoded with value 0x2301
  
!    --     Any debugging information entry representing a program entity, named
!    --     or implicit, may have a DW_AT_GNAT_encoding attribute. The value of
!    --     this attribute is a string representing the suffix internally added
!    --     by GNAT for various purposes, mainly for representing debug
!    --     information compatible with other formats. In particular this is
!    --     useful for IDEs which need to filter out information internal to
!    --     GNAT from their graphical interfaces.
  
!    --     If a debugging information entry has multiple encodings, all of them
!    --     will be listed in DW_AT_GNAT_encoding using the list separator ':'.
  
!    --   Introduction of DW_AT_GNAT_descriptive_type, encoded with value 0x2302
  
     --     Any debugging information entry representing a type may have a
     --     DW_AT_GNAT_descriptive_type attribute whose value is a reference,
     --     pointing to a debugging information entry representing another type
     --     associated to the type.
  
-    --   Modification of the contents of the DW_AT_producer string
- 
-    --     When emitting full GNAT Vendor extensions to DWARF2/3, "-gdwarf+"
-    --     is appended to the DW_AT_producer string.
-    --
-    --     When emitting only DW_AT_GNAT_descriptive_type, "-gdwarf+-" is
-    --     appended to the DW_AT_producer string.
- 
  end Exp_Dbug;
--- 1549,1567 ----
     --  are missing and deal as best as it can with the limited information
     --  available.
  
!    -----------------------------------------
!    -- GNAT Extensions to DWARF (OBSOLETE) --
!    -----------------------------------------
  
!    --   DW_AT_use_GNAT_descriptive_type, encoded with value 0x2301
  
!    --     This extension has never been implemented in the compiler.
  
!    --   DW_AT_GNAT_descriptive_type, encoded with value 0x2302
  
     --     Any debugging information entry representing a type may have a
     --     DW_AT_GNAT_descriptive_type attribute whose value is a reference,
     --     pointing to a debugging information entry representing another type
     --     associated to the type.
  
  end Exp_Dbug;
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_disp.adb gcc-12.1.0/gcc/ada/exp_disp.adb
*** gcc-11.3.0/gcc/ada/exp_disp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_disp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,70 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Expander; use Expander;
! with Exp_Atag; use Exp_Atag;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_CG;   use Exp_CG;
! with Exp_Dbug; use Exp_Dbug;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Ghost;    use Ghost;
! with Itypes;   use Itypes;
! with Layout;   use Layout;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Namet;    use Namet;
! with Opt;      use Opt;
! with Output;   use Output;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch7;  use Sem_Ch7;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Disp; use Sem_Disp;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Type; use Sem_Type;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with SCIL_LL;  use SCIL_LL;
! with Tbuild;   use Tbuild;
  
  package body Exp_Disp is
  
--- 23,74 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Expander;       use Expander;
! with Exp_Atag;       use Exp_Atag;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_CG;         use Exp_CG;
! with Exp_Dbug;       use Exp_Dbug;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Ghost;          use Ghost;
! with Itypes;         use Itypes;
! with Layout;         use Layout;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Namet;          use Namet;
! with Opt;            use Opt;
! with Output;         use Output;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Strub;          use Strub;
! with SCIL_LL;        use SCIL_LL;
! with Tbuild;         use Tbuild;
  
  package body Exp_Disp is
  
*************** package body Exp_Disp is
*** 89,98 ****
     --  Duplicate_Subexpr with an explicit dereference when From is an access
     --  parameter.
  
-    function Original_View_In_Visible_Part (Typ : Entity_Id) return Boolean;
-    --  Check if the type has a private view or if the public view appears in
-    --  the visible part of a package spec.
- 
     function Prim_Op_Kind
       (Prim : Entity_Id;
        Typ  : Entity_Id) return Node_Id;
--- 93,98 ----
*************** package body Exp_Disp is
*** 161,169 ****
        --  This capability of dispatching directly by tag is also needed by the
        --  implementation of AI-260 (for the generic dispatching constructors).
  
!       if Ctrl_Typ = RTE (RE_Tag)
!         or else (RTE_Available (RE_Interface_Tag)
!                   and then Ctrl_Typ = RTE (RE_Interface_Tag))
        then
           CW_Typ := Class_Wide_Type (Find_Dispatching_Type (Subp));
  
--- 161,168 ----
        --  This capability of dispatching directly by tag is also needed by the
        --  implementation of AI-260 (for the generic dispatching constructors).
  
!       if Is_RTE (Ctrl_Typ, RE_Tag)
!         or else Is_RTE (Ctrl_Typ, RE_Interface_Tag)
        then
           CW_Typ := Class_Wide_Type (Find_Dispatching_Type (Subp));
  
*************** package body Exp_Disp is
*** 349,355 ****
     -- Build_Static_Dispatch_Tables --
     ----------------------------------
  
!    procedure Build_Static_Dispatch_Tables (N : Entity_Id) is
        Target_List : List_Id;
  
        procedure Build_Dispatch_Tables (List : List_Id);
--- 348,354 ----
     -- Build_Static_Dispatch_Tables --
     ----------------------------------
  
!    procedure Build_Static_Dispatch_Tables (N : Node_Id) is
        Target_List : List_Id;
  
        procedure Build_Dispatch_Tables (List : List_Id);
*************** package body Exp_Disp is
*** 527,534 ****
               and then Is_Tag (Entity (Selector_Name (Expr))))
             or else
             (Nkind (Expr) = N_Function_Call
!              and then RTE_Available (RE_Displace)
!              and then Entity (Name (Expr)) = RTE (RE_Displace))));
  
        Anon_Type := Create_Itype (E_Anonymous_Access_Type, Expr);
        Set_Directly_Designated_Type (Anon_Type, Typ);
--- 526,532 ----
               and then Is_Tag (Entity (Selector_Name (Expr))))
             or else
             (Nkind (Expr) = N_Function_Call
!              and then Is_RTE (Entity (Name (Expr)), RE_Displace))));
  
        Anon_Type := Create_Itype (E_Anonymous_Access_Type, Expr);
        Set_Directly_Designated_Type (Anon_Type, Typ);
*************** package body Exp_Disp is
*** 579,604 ****
           --  If number of primitives already set in the tag component, use it
  
           if Present (Tag_Comp)
!            and then DT_Entry_Count (Tag_Comp) /= No_Uint
           then
              return UI_To_Int (DT_Entry_Count (Tag_Comp));
  
           --  Otherwise, count the primitives of the enclosing CPP type
  
           else
!             declare
!                Count : Nat := 0;
!                Elmt  : Elmt_Id;
! 
!             begin
!                Elmt := First_Elmt (Primitive_Operations (CPP_Typ));
!                while Present (Elmt) loop
!                   Count := Count + 1;
!                   Next_Elmt (Elmt);
!                end loop;
! 
!                return Count;
!             end;
           end if;
        end if;
     end CPP_Num_Prims;
--- 577,590 ----
           --  If number of primitives already set in the tag component, use it
  
           if Present (Tag_Comp)
!            and then Present (DT_Entry_Count (Tag_Comp))
           then
              return UI_To_Int (DT_Entry_Count (Tag_Comp));
  
           --  Otherwise, count the primitives of the enclosing CPP type
  
           else
!             return List_Length (Primitive_Operations (CPP_Typ));
           end if;
        end if;
     end CPP_Num_Prims;
*************** package body Exp_Disp is
*** 711,871 ****
        Eq_Prim_Op      : Entity_Id := Empty;
        Controlling_Tag : Node_Id;
  
-       procedure Build_Class_Wide_Check;
-       --  If the denoted subprogram has a class-wide precondition, generate a
-       --  check using that precondition before the dispatching call, because
-       --  this is the only class-wide precondition that applies to the call.
- 
        function New_Value (From : Node_Id) return Node_Id;
        --  From is the original Expression. New_Value is equivalent to a call
        --  to Duplicate_Subexpr with an explicit dereference when From is an
        --  access parameter.
  
-       ----------------------------
-       -- Build_Class_Wide_Check --
-       ----------------------------
- 
-       procedure Build_Class_Wide_Check is
-          function Replace_Formals (N : Node_Id) return Traverse_Result;
-          --  Replace occurrences of the formals of the subprogram by the
-          --  corresponding actuals in the call, given that this check is
-          --  performed outside of the body of the subprogram.
- 
-          --  If the dispatching call appears in the same scope as the
-          --  declaration of the dispatching subprogram (for example in
-          --  the expression of a local expression function), the spec
-          --  has not been analyzed yet, in which case we use the Chars
-          --  field to recognize intended occurrences of the formals.
- 
-          ---------------------
-          -- Replace_Formals --
-          ---------------------
- 
-          function Replace_Formals (N : Node_Id) return Traverse_Result is
-             A : Node_Id;
-             F : Entity_Id;
-          begin
-             if Is_Entity_Name (N) then
-                F := First_Formal (Subp);
-                A := First_Actual (Call_Node);
- 
-                if Present (Entity (N)) and then Is_Formal (Entity (N)) then
-                   while Present (F) loop
-                      if F = Entity (N) then
-                         Rewrite (N, New_Copy_Tree (A));
- 
-                         --  If the formal is class-wide, and thus not a
-                         --  controlling argument, preserve its type because
-                         --  it may appear in a nested call with a class-wide
-                         --  parameter.
- 
-                         if Is_Class_Wide_Type (Etype (F)) then
-                            Set_Etype (N, Etype (F));
- 
-                         --  Conversely, if this is a controlling argument
-                         --  (in a dispatching call in the condition) that is a
-                         --  dereference, the source is an access-to-class-wide
-                         --  type, so preserve the dispatching nature of the
-                         --  call in the rewritten condition.
- 
-                         elsif Nkind (Parent (N)) = N_Explicit_Dereference
-                           and then Is_Controlling_Actual (Parent (N))
-                         then
-                            Set_Controlling_Argument (Parent (Parent (N)),
-                               Parent (N));
-                         end if;
- 
-                         exit;
-                      end if;
- 
-                      Next_Formal (F);
-                      Next_Actual (A);
-                   end loop;
- 
-                --  If the node is not analyzed, recognize occurrences of a
-                --  formal by name, as would be done when resolving the aspect
-                --  expression in the context of the subprogram.
- 
-                elsif not Analyzed (N)
-                  and then Nkind (N) = N_Identifier
-                  and then No (Entity (N))
-                then
-                   while Present (F) loop
-                      if Chars (N) = Chars (F) then
-                         Rewrite (N, New_Copy_Tree (A));
-                         return Skip;
-                      end if;
- 
-                      Next_Formal (F);
-                      Next_Actual (A);
-                   end loop;
-                end if;
-             end if;
- 
-             return OK;
-          end Replace_Formals;
- 
-          procedure Update is new Traverse_Proc (Replace_Formals);
- 
-          --  Local variables
- 
-          Str_Loc : constant String := Build_Location_String (Loc);
- 
-          Cond : Node_Id;
-          Msg  : Node_Id;
-          Prec : Node_Id;
- 
-       --  Start of processing for Build_Class_Wide_Check
- 
-       begin
- 
-          --  Locate class-wide precondition, if any
- 
-          if Present (Contract (Subp))
-            and then Present (Pre_Post_Conditions (Contract (Subp)))
-          then
-             Prec := Pre_Post_Conditions (Contract (Subp));
- 
-             while Present (Prec) loop
-                exit when Pragma_Name (Prec) = Name_Precondition
-                  and then Class_Present (Prec);
-                Prec := Next_Pragma (Prec);
-             end loop;
- 
-             if No (Prec) or else Is_Ignored (Prec) then
-                return;
-             end if;
- 
-             --  The expression for the precondition is analyzed within the
-             --  generated pragma. The message text is the last parameter of
-             --  the generated pragma, indicating source of precondition.
- 
-             Cond :=
-               New_Copy_Tree
-                 (Expression (First (Pragma_Argument_Associations (Prec))));
-             Update (Cond);
- 
-             --  Build message indicating the failed precondition and the
-             --  dispatching call that caused it.
- 
-             Msg := Expression (Last (Pragma_Argument_Associations (Prec)));
-             Name_Len := 0;
-             Append (Global_Name_Buffer, Strval (Msg));
-             Append (Global_Name_Buffer, " in dispatching call at ");
-             Append (Global_Name_Buffer, Str_Loc);
-             Msg := Make_String_Literal (Loc, Name_Buffer (1 .. Name_Len));
- 
-             Insert_Action (Call_Node,
-               Make_If_Statement (Loc,
-                 Condition       => Make_Op_Not (Loc, Cond),
-                 Then_Statements => New_List (
-                   Make_Procedure_Call_Statement (Loc,
-                     Name                   =>
-                       New_Occurrence_Of (RTE (RE_Raise_Assert_Failure), Loc),
-                     Parameter_Associations => New_List (Msg)))));
-          end if;
-       end Build_Class_Wide_Check;
- 
        ---------------
        -- New_Value --
        ---------------
--- 697,707 ----
*************** package body Exp_Disp is
*** 926,933 ****
           Subp := Alias (Subp);
        end if;
  
-       Build_Class_Wide_Check;
- 
        --  Definition of the class-wide type and the tagged type
  
        --  If the controlling argument is itself a tag rather than a tagged
--- 762,767 ----
*************** package body Exp_Disp is
*** 939,947 ****
        --  This capability of dispatching directly by tag is also needed by the
        --  implementation of AI-260 (for the generic dispatching constructors).
  
!       if Ctrl_Typ = RTE (RE_Tag)
!         or else (RTE_Available (RE_Interface_Tag)
!                   and then Ctrl_Typ = RTE (RE_Interface_Tag))
        then
           CW_Typ := Class_Wide_Type (Find_Dispatching_Type (Subp));
  
--- 773,780 ----
        --  This capability of dispatching directly by tag is also needed by the
        --  implementation of AI-260 (for the generic dispatching constructors).
  
!       if Is_RTE (Ctrl_Typ, RE_Tag)
!         or else Is_RTE (Ctrl_Typ, RE_Interface_Tag)
        then
           CW_Typ := Class_Wide_Type (Find_Dispatching_Type (Subp));
  
*************** package body Exp_Disp is
*** 959,964 ****
--- 792,801 ----
  
        Typ := Find_Specific_Type (CW_Typ);
  
+       --  The tagged type of a dispatching call must be frozen at this stage
+ 
+       pragma Assert (Is_Frozen (Typ));
+ 
        if not Is_Limited_Type (Typ) then
           Eq_Prim_Op := Find_Prim_Op (Typ, Name_Op_Eq);
        end if;
*************** package body Exp_Disp is
*** 1010,1015 ****
--- 847,853 ----
        end if;
  
        Subp_Typ     := Create_Itype (E_Subprogram_Type, Call_Node);
+       Copy_Strub_Mode (Subp_Typ, Subp);
        Subp_Ptr_Typ := Create_Itype (E_Access_Subprogram_Type, Call_Node);
        Set_Etype          (Subp_Typ, Res_Typ);
        Set_Returns_By_Ref (Subp_Typ, Returns_By_Ref (Subp));
*************** package body Exp_Disp is
*** 1124,1132 ****
        --  interface class-wide type then use it directly. Otherwise, the tag
        --  must be extracted from the controlling object.
  
!       if Ctrl_Typ = RTE (RE_Tag)
!         or else (RTE_Available (RE_Interface_Tag)
!                   and then Ctrl_Typ = RTE (RE_Interface_Tag))
        then
           Controlling_Tag := Duplicate_Subexpr (Ctrl_Arg);
  
--- 962,969 ----
        --  interface class-wide type then use it directly. Otherwise, the tag
        --  must be extracted from the controlling object.
  
!       if Is_RTE (Ctrl_Typ, RE_Tag)
!         or else Is_RTE (Ctrl_Typ, RE_Interface_Tag)
        then
           Controlling_Tag := Duplicate_Subexpr (Ctrl_Arg);
  
*************** package body Exp_Disp is
*** 1138,1148 ****
  
        elsif Nkind (Ctrl_Arg) = N_Unchecked_Type_Conversion
          and then
!           (Etype (Expression (Ctrl_Arg)) = RTE (RE_Tag)
              or else
!               (RTE_Available (RE_Interface_Tag)
!                 and then
!                   Etype (Expression (Ctrl_Arg)) = RTE (RE_Interface_Tag)))
        then
           Controlling_Tag := Duplicate_Subexpr (Expression (Ctrl_Arg));
  
--- 975,983 ----
  
        elsif Nkind (Ctrl_Arg) = N_Unchecked_Type_Conversion
          and then
!           (Is_RTE (Etype (Expression (Ctrl_Arg)), RE_Tag)
              or else
!            Is_RTE (Etype (Expression (Ctrl_Arg)), RE_Interface_Tag))
        then
           Controlling_Tag := Duplicate_Subexpr (Expression (Ctrl_Arg));
  
*************** package body Exp_Disp is
*** 2187,2193 ****
        --  with GNATcoverage, as that tool relies on it to identify
        --  thunks and exclude them from source coverage analysis.
  
!       Set_Ekind (Thunk_Id, Ekind (Prim));
        Set_Is_Thunk (Thunk_Id);
        Set_Convention (Thunk_Id, Convention (Prim));
        Set_Needs_Debug_Info (Thunk_Id, Needs_Debug_Info (Target));
--- 2022,2028 ----
        --  with GNATcoverage, as that tool relies on it to identify
        --  thunks and exclude them from source coverage analysis.
  
!       Mutate_Ekind (Thunk_Id, Ekind (Prim));
        Set_Is_Thunk (Thunk_Id);
        Set_Convention (Thunk_Id, Convention (Prim));
        Set_Needs_Debug_Info (Thunk_Id, Needs_Debug_Info (Target));
*************** package body Exp_Disp is
*** 2505,2515 ****
                          New_List (
                            Obj_Ref,
  
!                           Make_Unchecked_Type_Conversion (Loc,  --  entry index
!                             Subtype_Mark =>
!                               New_Occurrence_Of
!                                 (RTE (RE_Protected_Entry_Index), Loc),
!                             Expression => Make_Identifier (Loc, Name_uI)),
  
                            Make_Identifier (Loc, Name_uP), --  parameter block
                            New_Occurrence_Of               --  Asynchronous_Call
--- 2340,2348 ----
                          New_List (
                            Obj_Ref,
  
!                           Unchecked_Convert_To ( --  entry index
!                             RTE (RE_Protected_Entry_Index),
!                             Make_Identifier (Loc, Name_uI)),
  
                            Make_Identifier (Loc, Name_uP), --  parameter block
                            New_Occurrence_Of               --  Asynchronous_Call
*************** package body Exp_Disp is
*** 2528,2538 ****
                Make_Assignment_Statement (Loc,
                  Name => Make_Identifier (Loc, Name_uB),
                  Expression =>
!                   Make_Unchecked_Type_Conversion (Loc,
!                     Subtype_Mark =>
!                       New_Occurrence_Of
!                         (RTE (RE_Dummy_Communication_Block), Loc),
!                     Expression   => New_Occurrence_Of (Com_Block, Loc))));
  
              --  Generate:
              --    F := False;
--- 2361,2369 ----
                Make_Assignment_Statement (Loc,
                  Name => Make_Identifier (Loc, Name_uB),
                  Expression =>
!                   Unchecked_Convert_To
!                     (RTE (RE_Dummy_Communication_Block),
!                      New_Occurrence_Of (Com_Block, Loc))));
  
              --  Generate:
              --    F := False;
*************** package body Exp_Disp is
*** 2566,2575 ****
                        Prefix        => Make_Identifier (Loc, Name_uT),
                        Selector_Name => Make_Identifier (Loc, Name_uTask_Id)),
  
!                     Make_Unchecked_Type_Conversion (Loc,  --  entry index
!                       Subtype_Mark =>
!                         New_Occurrence_Of (RTE (RE_Task_Entry_Index), Loc),
!                       Expression   => Make_Identifier (Loc, Name_uI)),
  
                      Make_Identifier (Loc, Name_uP),       --  parameter block
                      New_Occurrence_Of                     --  Asynchronous_Call
--- 2397,2405 ----
                        Prefix        => Make_Identifier (Loc, Name_uT),
                        Selector_Name => Make_Identifier (Loc, Name_uTask_Id)),
  
!                     Unchecked_Convert_To ( --  entry index
!                       RTE (RE_Task_Entry_Index),
!                       Make_Identifier (Loc, Name_uI)),
  
                      Make_Identifier (Loc, Name_uP),       --  parameter block
                      New_Occurrence_Of                     --  Asynchronous_Call
*************** package body Exp_Disp is
*** 2859,2869 ****
                        Parameter_Associations => New_List (
                            Obj_Ref,
  
!                           Make_Unchecked_Type_Conversion (Loc,  --  entry index
!                             Subtype_Mark =>
!                               New_Occurrence_Of
!                                  (RTE (RE_Protected_Entry_Index), Loc),
!                             Expression => Make_Identifier (Loc, Name_uI)),
  
                            Make_Identifier (Loc, Name_uP),  --  parameter block
  
--- 2689,2697 ----
                        Parameter_Associations => New_List (
                            Obj_Ref,
  
!                           Unchecked_Convert_To ( --  entry index
!                             RTE (RE_Protected_Entry_Index),
!                             Make_Identifier (Loc, Name_uI)),
  
                            Make_Identifier (Loc, Name_uP),  --  parameter block
  
*************** package body Exp_Disp is
*** 2936,2945 ****
                        Prefix        => Make_Identifier (Loc, Name_uT),
                        Selector_Name => Make_Identifier (Loc, Name_uTask_Id)),
  
!                     Make_Unchecked_Type_Conversion (Loc,  --  entry index
!                       Subtype_Mark =>
!                         New_Occurrence_Of (RTE (RE_Task_Entry_Index), Loc),
!                       Expression   => Make_Identifier (Loc, Name_uI)),
  
                      Make_Identifier (Loc, Name_uP),       --  parameter block
                      New_Occurrence_Of                      --  Conditional_Call
--- 2764,2772 ----
                        Prefix        => Make_Identifier (Loc, Name_uT),
                        Selector_Name => Make_Identifier (Loc, Name_uTask_Id)),
  
!                     Unchecked_Convert_To ( --  entry index
!                       RTE (RE_Task_Entry_Index),
!                       Make_Identifier (Loc, Name_uI)),
  
                      Make_Identifier (Loc, Name_uP),       --  parameter block
                      New_Occurrence_Of                      --  Conditional_Call
*************** package body Exp_Disp is
*** 3149,3160 ****
           Ret :=
             Make_Simple_Return_Statement (Loc,
               Expression =>
!                Make_Unchecked_Type_Conversion (Loc,
!                  Subtype_Mark => New_Occurrence_Of (RTE (RE_Address), Loc),
!                  Expression   =>
!                    Make_Selected_Component (Loc,
!                      Prefix        => Make_Identifier (Loc, Name_uT),
!                      Selector_Name => Make_Identifier (Loc, Name_uTask_Id))));
  
        --  A null body is constructed for non-task types
  
--- 2976,2986 ----
           Ret :=
             Make_Simple_Return_Statement (Loc,
               Expression =>
!                Unchecked_Convert_To
!                  (RTE (RE_Address),
!                   Make_Selected_Component (Loc,
!                     Prefix        => Make_Identifier (Loc, Name_uT),
!                     Selector_Name => Make_Identifier (Loc, Name_uTask_Id))));
  
        --  A null body is constructed for non-task types
  
*************** package body Exp_Disp is
*** 3213,3219 ****
     begin
        pragma Assert (not Restriction_Active (No_Dispatching_Calls));
  
!       --  Null body is generated for interface types and non-concurrent
        --  tagged types.
  
        if Is_Interface (Typ)
--- 3039,3045 ----
     begin
        pragma Assert (not Restriction_Active (No_Dispatching_Calls));
  
!       --  Null body is generated for interface types and nonconcurrent
        --  tagged types.
  
        if Is_Interface (Typ)
*************** package body Exp_Disp is
*** 3267,3278 ****
                        Parameter_Associations =>
                          New_List (
  
!                           Make_Unchecked_Type_Conversion (Loc,  -- PEA (P)
!                             Subtype_Mark =>
!                               New_Occurrence_Of (
!                                 RTE (RE_Protection_Entries_Access), Loc),
!                             Expression =>
!                               Make_Identifier (Loc, Name_uP)),
  
                            Make_Attribute_Reference (Loc,      -- O._object'Acc
                              Attribute_Name =>
--- 3093,3101 ----
                        Parameter_Associations =>
                          New_List (
  
!                           Unchecked_Convert_To ( -- PEA (P)
!                             RTE (RE_Protection_Entries_Access),
!                             Make_Identifier (Loc, Name_uP)),
  
                            Make_Attribute_Reference (Loc,      -- O._object'Acc
                              Attribute_Name =>
*************** package body Exp_Disp is
*** 3284,3294 ****
                                  Selector_Name =>
                                    Make_Identifier (Loc, Name_uObject))),
  
!                           Make_Unchecked_Type_Conversion (Loc,  -- entry index
!                             Subtype_Mark =>
!                               New_Occurrence_Of
!                                 (RTE (RE_Protected_Entry_Index), Loc),
!                             Expression => Make_Identifier (Loc, Name_uI)),
  
                            Make_Identifier (Loc, Name_uA)))),   -- abort status
  
--- 3107,3115 ----
                                  Selector_Name =>
                                    Make_Identifier (Loc, Name_uObject))),
  
!                           Unchecked_Convert_To ( -- entry index
!                             RTE (RE_Protected_Entry_Index),
!                             Make_Identifier (Loc, Name_uI)),
  
                            Make_Identifier (Loc, Name_uA)))),   -- abort status
  
*************** package body Exp_Disp is
*** 3313,3323 ****
                                  Selector_Name =>
                                    Make_Identifier (Loc, Name_uObject))),
  
!                           Make_Unchecked_Type_Conversion (Loc, -- entry index
!                             Subtype_Mark =>
!                               New_Occurrence_Of
!                                 (RTE (RE_Protected_Entry_Index), Loc),
!                             Expression   => Make_Identifier (Loc, Name_uI)),
  
                            Make_Identifier (Loc, Name_uA)))))); -- abort status
           end if;
--- 3134,3142 ----
                                  Selector_Name =>
                                    Make_Identifier (Loc, Name_uObject))),
  
!                           Unchecked_Convert_To ( -- entry index
!                             RTE (RE_Protected_Entry_Index),
!                             Make_Identifier (Loc, Name_uI)),
  
                            Make_Identifier (Loc, Name_uA)))))); -- abort status
           end if;
*************** package body Exp_Disp is
*** 3354,3373 ****
  
                   Parameter_Associations => New_List (
  
!                    Make_Unchecked_Type_Conversion (Loc,  -- PEA (P)
!                      Subtype_Mark =>
!                        New_Occurrence_Of
!                          (RTE (RE_Protection_Entries_Access), Loc),
!                           Expression => Make_Identifier (Loc, Name_uP)),
  
                     Make_Selected_Component (Loc,         -- O._task_id
                       Prefix        => Make_Identifier (Loc, Name_uO),
                       Selector_Name => Make_Identifier (Loc, Name_uTask_Id)),
  
!                    Make_Unchecked_Type_Conversion (Loc,  -- entry index
!                      Subtype_Mark =>
!                        New_Occurrence_Of (RTE (RE_Task_Entry_Index), Loc),
!                      Expression   => Make_Identifier (Loc, Name_uI)),
  
                     Make_Identifier (Loc, Name_uA)))),    -- abort status
  
--- 3173,3189 ----
  
                   Parameter_Associations => New_List (
  
!                    Unchecked_Convert_To ( -- PEA (P)
!                      RTE (RE_Protection_Entries_Access),
!                      Make_Identifier (Loc, Name_uP)),
  
                     Make_Selected_Component (Loc,         -- O._task_id
                       Prefix        => Make_Identifier (Loc, Name_uO),
                       Selector_Name => Make_Identifier (Loc, Name_uTask_Id)),
  
!                    Unchecked_Convert_To ( -- entry index
!                      RTE (RE_Task_Entry_Index),
!                      Make_Identifier (Loc, Name_uI)),
  
                     Make_Identifier (Loc, Name_uA)))),    -- abort status
  
*************** package body Exp_Disp is
*** 3385,3394 ****
                       Prefix        => Make_Identifier (Loc, Name_uO),
                       Selector_Name => Make_Identifier (Loc, Name_uTask_Id)),
  
!                    Make_Unchecked_Type_Conversion (Loc,  -- entry index
!                      Subtype_Mark =>
!                        New_Occurrence_Of (RTE (RE_Task_Entry_Index), Loc),
!                      Expression   => Make_Identifier (Loc, Name_uI)),
  
                     Make_Identifier (Loc, Name_uA))))));  -- abort status
        end if;
--- 3201,3209 ----
                       Prefix        => Make_Identifier (Loc, Name_uO),
                       Selector_Name => Make_Identifier (Loc, Name_uTask_Id)),
  
!                    Unchecked_Convert_To ( -- entry index
!                      RTE (RE_Task_Entry_Index),
!                      Make_Identifier (Loc, Name_uI)),
  
                     Make_Identifier (Loc, Name_uA))))));  -- abort status
        end if;
*************** package body Exp_Disp is
*** 3673,3683 ****
                        Parameter_Associations => New_List (
                          Obj_Ref,
  
!                         Make_Unchecked_Type_Conversion (Loc,  --  entry index
!                           Subtype_Mark =>
!                             New_Occurrence_Of
!                               (RTE (RE_Protected_Entry_Index), Loc),
!                           Expression   => Make_Identifier (Loc, Name_uI)),
  
                          Make_Identifier (Loc, Name_uP),    --  parameter block
                          Make_Identifier (Loc, Name_uD),    --  delay
--- 3488,3496 ----
                        Parameter_Associations => New_List (
                          Obj_Ref,
  
!                         Unchecked_Convert_To ( --  entry index
!                          RTE (RE_Protected_Entry_Index),
!                           Make_Identifier (Loc, Name_uI)),
  
                          Make_Identifier (Loc, Name_uP),    --  parameter block
                          Make_Identifier (Loc, Name_uD),    --  delay
*************** package body Exp_Disp is
*** 3716,3725 ****
                      Prefix        => Make_Identifier (Loc, Name_uT),
                      Selector_Name => Make_Identifier (Loc, Name_uTask_Id)),
  
!                   Make_Unchecked_Type_Conversion (Loc,  --  entry index
!                     Subtype_Mark =>
!                       New_Occurrence_Of (RTE (RE_Task_Entry_Index), Loc),
!                     Expression   => Make_Identifier (Loc, Name_uI)),
  
                    Make_Identifier (Loc, Name_uP),       --  parameter block
                    Make_Identifier (Loc, Name_uD),       --  delay
--- 3529,3537 ----
                      Prefix        => Make_Identifier (Loc, Name_uT),
                      Selector_Name => Make_Identifier (Loc, Name_uTask_Id)),
  
!                   Unchecked_Convert_To ( --  entry index
!                     RTE (RE_Task_Entry_Index),
!                     Make_Identifier (Loc, Name_uI)),
  
                    Make_Identifier (Loc, Name_uP),       --  parameter block
                    Make_Identifier (Loc, Name_uD),       --  delay
*************** package body Exp_Disp is
*** 3982,3987 ****
--- 3794,3800 ----
           if Present (N)
             and then Is_Private_Type (Typ)
             and then No (Full_View (Typ))
+            and then not Has_Private_Declaration (Typ)
             and then not Is_Generic_Type (Typ)
             and then not Is_Tagged_Type (Typ)
             and then not Is_Frozen (Typ)
*************** package body Exp_Disp is
*** 4000,4005 ****
--- 3813,3819 ----
              if not Is_Tagged_Type (Typ)
                and then Present (Comp)
                and then not Is_Frozen (Comp)
+               and then not Has_Private_Declaration (Comp)
                and then not Is_Actual_For_Formal_Incomplete_Type (Comp)
              then
                 Error_Msg_Sloc := Sloc (Subp);
*************** package body Exp_Disp is
*** 4011,4017 ****
                 Error_Msg_NE
                   ("\which is a component of untagged type& in the profile "
                    & "of primitive & of type % that is frozen by the "
!                   & "declaration ", N, Typ);
              end if;
           end if;
        end Check_Premature_Freezing;
--- 3825,3831 ----
                 Error_Msg_NE
                   ("\which is a component of untagged type& in the profile "
                    & "of primitive & of type % that is frozen by the "
!                   & "declaration", N, Typ);
              end if;
           end if;
        end Check_Premature_Freezing;
*************** package body Exp_Disp is
*** 4037,4043 ****
              Count := Count + 1;
           end loop;
  
!          pragma Assert (Related_Type (Node (Elmt)) = Typ);
  
           Get_External_Name (Node (Elmt));
           Set_Interface_Name (DT,
--- 3851,3860 ----
              Count := Count + 1;
           end loop;
  
!          --  Related_Type (Node (Elmt)) should be equal to Typ here, but we
!          --  can't assert that, because it is sometimes false in illegal
!          --  programs. We can't check Serious_Errors_Detected, because the
!          --  errors have not yet been detected.
  
           Get_External_Name (Node (Elmt));
           Set_Interface_Name (DT,
*************** package body Exp_Disp is
*** 4087,4104 ****
           --  dispatch tables.
  
           if not Building_Static_DT (Typ) then
!             Set_Ekind (Predef_Prims, E_Variable);
!             Set_Ekind (Iface_DT, E_Variable);
  
           --  Statically allocated dispatch tables and related entities are
           --  constants.
  
           else
!             Set_Ekind (Predef_Prims, E_Constant);
              Set_Is_Statically_Allocated (Predef_Prims);
              Set_Is_True_Constant (Predef_Prims);
  
!             Set_Ekind (Iface_DT, E_Constant);
              Set_Is_Statically_Allocated (Iface_DT);
              Set_Is_True_Constant (Iface_DT);
           end if;
--- 3904,3921 ----
           --  dispatch tables.
  
           if not Building_Static_DT (Typ) then
!             Mutate_Ekind (Predef_Prims, E_Variable);
!             Mutate_Ekind (Iface_DT, E_Variable);
  
           --  Statically allocated dispatch tables and related entities are
           --  constants.
  
           else
!             Mutate_Ekind (Predef_Prims, E_Constant);
              Set_Is_Statically_Allocated (Predef_Prims);
              Set_Is_True_Constant (Predef_Prims);
  
!             Mutate_Ekind (Iface_DT, E_Constant);
              Set_Is_Statically_Allocated (Iface_DT);
              Set_Is_True_Constant (Iface_DT);
           end if;
*************** package body Exp_Disp is
*** 4638,4645 ****
  
        Discard_Names : constant Boolean :=
                          Present (No_Tagged_Streams_Pragma (Typ))
!                           and then (Global_Discard_Names
!                                      or else Einfo.Discard_Names (Typ));
  
        --  The following name entries are used by Make_DT to generate a number
        --  of entities related to a tagged type. These entities may be generated
--- 4455,4462 ----
  
        Discard_Names : constant Boolean :=
                          Present (No_Tagged_Streams_Pragma (Typ))
!                           and then
!         (Global_Discard_Names or else Einfo.Entities.Discard_Names (Typ));
  
        --  The following name entries are used by Make_DT to generate a number
        --  of entities related to a tagged type. These entities may be generated
*************** package body Exp_Disp is
*** 4676,4682 ****
        Exname             : Entity_Id;
        HT_Link            : Entity_Id;
        ITable             : Node_Id;
!       I_Depth            : Nat := 0;
        Iface_Table_Node   : Node_Id;
        Name_ITable        : Name_Id;
        Nb_Prim            : Nat := 0;
--- 4493,4499 ----
        Exname             : Entity_Id;
        HT_Link            : Entity_Id;
        ITable             : Node_Id;
!       I_Depth            : Nat;
        Iface_Table_Node   : Node_Id;
        Name_ITable        : Name_Id;
        Nb_Prim            : Nat := 0;
*************** package body Exp_Disp is
*** 4798,4804 ****
                 --  case concerning the need for this check, and this topic may
                 --  go back to the ARG.
  
!                if not Is_Abstract_Subprogram (Prim)  then
                    Formal := First_Formal (Prim);
                    while Present (Formal) loop
                       Check_Premature_Freezing (Prim, Typ, Etype (Formal));
--- 4615,4621 ----
                 --  case concerning the need for this check, and this topic may
                 --  go back to the ARG.
  
!                if not Is_Abstract_Subprogram (Prim) then
                    Formal := First_Formal (Prim);
                    while Present (Formal) loop
                       Check_Premature_Freezing (Prim, Typ, Etype (Formal));
*************** package body Exp_Disp is
*** 4835,4841 ****
              --  objects by making them volatile.
  
              Set_Is_Imported      (Dummy_Object);
!             Set_Ekind            (Dummy_Object, E_Constant);
              Set_Is_True_Constant (Dummy_Object);
              Set_Related_Type     (Dummy_Object, Typ);
  
--- 4652,4658 ----
              --  objects by making them volatile.
  
              Set_Is_Imported      (Dummy_Object);
!             Mutate_Ekind         (Dummy_Object, E_Constant);
              Set_Is_True_Constant (Dummy_Object);
              Set_Related_Type     (Dummy_Object, Typ);
  
*************** package body Exp_Disp is
*** 5171,5179 ****
        Set_Is_Statically_Allocated (Exname);
        Set_Is_True_Constant (Exname);
  
!       --  Declare the object used by Ada.Tags.Register_Tag
  
!       if RTE_Available (RE_Register_Tag) then
           Append_To (Result,
             Make_Object_Declaration (Loc,
               Defining_Identifier => HT_Link,
--- 4988,4999 ----
        Set_Is_Statically_Allocated (Exname);
        Set_Is_True_Constant (Exname);
  
!       --  Declare the object used by Ada.Tags.Register_Tag, unless
!       --  No_Tagged_Type_Registration is active.
  
!       if not Restriction_Active (No_Tagged_Type_Registration)
!         and then RTE_Available (RE_Register_Tag)
!       then
           Append_To (Result,
             Make_Object_Declaration (Loc,
               Defining_Identifier => HT_Link,
*************** package body Exp_Disp is
*** 5443,5449 ****
  
        --  HT_Link
  
!       if RTE_Available (RE_Register_Tag) then
           Append_To (TSD_Aggr_List,
             Unchecked_Convert_To (RTE (RE_Tag_Ptr),
               Make_Attribute_Reference (Loc,
--- 5263,5271 ----
  
        --  HT_Link
  
!       if not Restriction_Active (No_Tagged_Type_Registration)
!         and then RTE_Available (RE_Register_Tag)
!       then
           Append_To (TSD_Aggr_List,
             Unchecked_Convert_To (RTE (RE_Tag_Ptr),
               Make_Attribute_Reference (Loc,
*************** package body Exp_Disp is
*** 5888,5893 ****
--- 5710,5720 ----
  
        Set_Is_True_Constant (TSD, Building_Static_DT (Typ));
  
+       --  The debugging information for type Ada.Tags.Type_Specific_Data is
+       --  needed by the debugger in order to display values of tagged types.
+ 
+       Set_Needs_Debug_Info (TSD, Needs_Debug_Info (Typ));
+ 
        --  Initialize or declare the dispatch table object
  
        if not Has_DT (Typ) then
*************** package body Exp_Disp is
*** 6507,6519 ****
        --  up the RE_Check_TSD entity and call it in No_Run_Time mode.
  
        --  We cannot perform this check if the generation of its expanded name
!       --  was discarded.
  
        if not No_Run_Time_Mode
          and then not Discard_Names
          and then Ada_Version >= Ada_2005
-         and then RTE_Available (RE_Check_TSD)
          and then not Duplicated_Tag_Checks_Suppressed (Typ)
        then
           Append_To (Elab_Code,
             Make_Procedure_Call_Statement (Loc,
--- 6334,6347 ----
        --  up the RE_Check_TSD entity and call it in No_Run_Time mode.
  
        --  We cannot perform this check if the generation of its expanded name
!       --  was discarded or if No_Tagged_Type_Registration is active.
  
        if not No_Run_Time_Mode
          and then not Discard_Names
          and then Ada_Version >= Ada_2005
          and then not Duplicated_Tag_Checks_Suppressed (Typ)
+         and then not Restriction_Active (No_Tagged_Type_Registration)
+         and then RTE_Available (RE_Check_TSD)
        then
           Append_To (Elab_Code,
             Make_Procedure_Call_Statement (Loc,
*************** package body Exp_Disp is
*** 6536,6544 ****
--- 6364,6374 ----
        --    3) if Typ is not defined at the library level (this is required
        --       to avoid adding concurrency control to the hash table used
        --       by the run-time to register the tags).
+       --    4) No_Tagged_Type_Registration is active.
  
        if not No_Run_Time_Mode
          and then Is_Library_Level_Entity (Typ)
+         and then not Restriction_Active (No_Tagged_Type_Registration)
          and then RTE_Available (RE_Register_Tag)
        then
           Append_To (Elab_Code,
*************** package body Exp_Disp is
*** 6549,6557 ****
                 New_List (New_Occurrence_Of (DT_Ptr, Loc))));
        end if;
  
!       if not Is_Empty_List (Elab_Code) then
!          Append_List_To (Result, Elab_Code);
!       end if;
  
        --  Populate the two auxiliary tables used for dispatching asynchronous,
        --  conditional and timed selects for synchronized types that implement
--- 6379,6385 ----
                 New_List (New_Occurrence_Of (DT_Ptr, Loc))));
        end if;
  
!       Append_List_To (Result, Elab_Code);
  
        --  Populate the two auxiliary tables used for dispatching asynchronous,
        --  conditional and timed selects for synchronized types that implement
*************** package body Exp_Disp is
*** 6574,6580 ****
        Append_Elmt (DT, DT_Decl);
  
        Analyze_List (Result, Suppress => All_Checks);
-       Set_Has_Dispatch_Table (Typ);
  
        --  Mark entities containing dispatch tables. Required by the backend to
        --  handle them properly.
--- 6402,6407 ----
*************** package body Exp_Disp is
*** 6607,6612 ****
--- 6434,6441 ----
  
     <<Leave_SCIL>>
  
+       Set_Has_Dispatch_Table (Typ);
+ 
        --  Register the tagged type in the call graph nodes table
  
        Register_CG_Node (Typ);
*************** package body Exp_Disp is
*** 6646,6673 ****
        ----------------------
  
        function Find_Entry_Index (E : Entity_Id) return Uint is
!          Index     : Uint := Uint_1;
!          Subp_Decl : Entity_Id;
  
        begin
!          if Present (Decls)
!            and then not Is_Empty_List (Decls)
!          then
!             Subp_Decl := First (Decls);
!             while Present (Subp_Decl) loop
!                if Nkind (Subp_Decl) = N_Entry_Declaration then
!                   if Defining_Identifier (Subp_Decl) = E then
!                      return Index;
!                   end if;
  
!                   Index := Index + 1;
                 end if;
  
!                Next (Subp_Decl);
!             end loop;
!          end if;
  
!          return Uint_0;
        end Find_Entry_Index;
  
        --  Local variables
--- 6475,6499 ----
        ----------------------
  
        function Find_Entry_Index (E : Entity_Id) return Uint is
!          Index     : Uint := Uint_0;
!          Subp_Decl : Node_Id;
  
        begin
!          Subp_Decl := First (Decls);
!          while Present (Subp_Decl) loop
!             if Nkind (Subp_Decl) = N_Entry_Declaration then
!                Index := Index + 1;
  
!                if Defining_Identifier (Subp_Decl) = E then
!                   exit;
                 end if;
  
!             end if;
  
!             Next (Subp_Decl);
!          end loop;
! 
!          return Index;
        end Find_Entry_Index;
  
        --  Local variables
*************** package body Exp_Disp is
*** 6838,6844 ****
  
        begin
           Set_Is_Imported  (DT);
!          Set_Ekind        (DT, E_Constant);
           Set_Related_Type (DT, Typ);
  
           --  The scope must be set now to call Get_External_Name
--- 6664,6670 ----
  
        begin
           Set_Is_Imported  (DT);
!          Mutate_Ekind     (DT, E_Constant);
           Set_Related_Type (DT, Typ);
  
           --  The scope must be set now to call Get_External_Name
*************** package body Exp_Disp is
*** 6949,6955 ****
  
        --  Minimum decoration
  
!       Set_Ekind        (DT_Ptr, E_Variable);
        Set_Related_Type (DT_Ptr, Typ);
  
        --  Notify back end that the types are associated with a dispatch table
--- 6775,6781 ----
  
        --  Minimum decoration
  
!       Mutate_Ekind     (DT_Ptr, E_Variable);
        Set_Related_Type (DT_Ptr, Typ);
  
        --  Notify back end that the types are associated with a dispatch table
*************** package body Exp_Disp is
*** 7103,7109 ****
                   Make_Defining_Identifier (Loc,
                     Chars => New_External_Name (Typ_Name, 'P'));
                 Set_Etype (Iface_DT_Ptr, RTE (RE_Interface_Tag));
!                Set_Ekind (Iface_DT_Ptr, E_Variable);
                 Set_Is_Tag (Iface_DT_Ptr);
  
                 Set_Has_Thunks (Iface_DT_Ptr);
--- 6929,6935 ----
                   Make_Defining_Identifier (Loc,
                     Chars => New_External_Name (Typ_Name, 'P'));
                 Set_Etype (Iface_DT_Ptr, RTE (RE_Interface_Tag));
!                Mutate_Ekind (Iface_DT_Ptr, E_Variable);
                 Set_Is_Tag (Iface_DT_Ptr);
  
                 Set_Has_Thunks (Iface_DT_Ptr);
*************** package body Exp_Disp is
*** 7152,7158 ****
                   Make_Defining_Identifier (Loc,
                     Chars => New_External_Name (Typ_Name, 'P'));
                 Set_Etype (Iface_DT_Ptr, RTE (RE_Interface_Tag));
!                Set_Ekind (Iface_DT_Ptr, E_Constant);
                 Set_Is_Tag (Iface_DT_Ptr);
                 Set_Has_Thunks (Iface_DT_Ptr);
                 Set_Is_Statically_Allocated (Iface_DT_Ptr,
--- 6978,6984 ----
                   Make_Defining_Identifier (Loc,
                     Chars => New_External_Name (Typ_Name, 'P'));
                 Set_Etype (Iface_DT_Ptr, RTE (RE_Interface_Tag));
!                Mutate_Ekind (Iface_DT_Ptr, E_Constant);
                 Set_Is_Tag (Iface_DT_Ptr);
                 Set_Has_Thunks (Iface_DT_Ptr);
                 Set_Is_Statically_Allocated (Iface_DT_Ptr,
*************** package body Exp_Disp is
*** 7190,7196 ****
                   Make_Defining_Identifier (Loc,
                     Chars => New_External_Name (Typ_Name, 'Y'));
                 Set_Etype (Iface_DT_Ptr, RTE (RE_Address));
!                Set_Ekind (Iface_DT_Ptr, E_Constant);
                 Set_Is_Tag (Iface_DT_Ptr);
                 Set_Has_Thunks (Iface_DT_Ptr);
                 Set_Is_Statically_Allocated (Iface_DT_Ptr,
--- 7016,7022 ----
                   Make_Defining_Identifier (Loc,
                     Chars => New_External_Name (Typ_Name, 'Y'));
                 Set_Etype (Iface_DT_Ptr, RTE (RE_Address));
!                Mutate_Ekind (Iface_DT_Ptr, E_Constant);
                 Set_Is_Tag (Iface_DT_Ptr);
                 Set_Has_Thunks (Iface_DT_Ptr);
                 Set_Is_Statically_Allocated (Iface_DT_Ptr,
*************** package body Exp_Disp is
*** 7207,7213 ****
                   Make_Defining_Identifier (Loc,
                     Chars => New_External_Name (Typ_Name, 'D'));
                 Set_Etype (Iface_DT_Ptr, RTE (RE_Interface_Tag));
!                Set_Ekind (Iface_DT_Ptr, E_Constant);
                 Set_Is_Tag (Iface_DT_Ptr);
                 Set_Is_Statically_Allocated (Iface_DT_Ptr,
                   Is_Library_Level_Tagged_Type (Typ));
--- 7033,7039 ----
                   Make_Defining_Identifier (Loc,
                     Chars => New_External_Name (Typ_Name, 'D'));
                 Set_Etype (Iface_DT_Ptr, RTE (RE_Interface_Tag));
!                Mutate_Ekind (Iface_DT_Ptr, E_Constant);
                 Set_Is_Tag (Iface_DT_Ptr);
                 Set_Is_Statically_Allocated (Iface_DT_Ptr,
                   Is_Library_Level_Tagged_Type (Typ));
*************** package body Exp_Disp is
*** 7222,7228 ****
                   Make_Defining_Identifier (Loc,
                     Chars => New_External_Name (Typ_Name, 'Z'));
                 Set_Etype (Iface_DT_Ptr, RTE (RE_Address));
!                Set_Ekind (Iface_DT_Ptr, E_Constant);
                 Set_Is_Tag (Iface_DT_Ptr);
                 Set_Is_Statically_Allocated (Iface_DT_Ptr,
                   Is_Library_Level_Tagged_Type (Typ));
--- 7048,7054 ----
                   Make_Defining_Identifier (Loc,
                     Chars => New_External_Name (Typ_Name, 'Z'));
                 Set_Etype (Iface_DT_Ptr, RTE (RE_Address));
!                Mutate_Ekind (Iface_DT_Ptr, E_Constant);
                 Set_Is_Tag (Iface_DT_Ptr);
                 Set_Is_Statically_Allocated (Iface_DT_Ptr,
                   Is_Library_Level_Tagged_Type (Typ));
*************** package body Exp_Disp is
*** 7332,7340 ****
        end if;
  
        if Is_CPP_Class (Root_Type (Typ)) then
!          Set_Ekind (DT_Ptr, E_Variable);
        else
!          Set_Ekind (DT_Ptr, E_Constant);
        end if;
  
        Set_Is_Tag       (DT_Ptr);
--- 7158,7166 ----
        end if;
  
        if Is_CPP_Class (Root_Type (Typ)) then
!          Mutate_Ekind (DT_Ptr, E_Variable);
        else
!          Mutate_Ekind (DT_Ptr, E_Constant);
        end if;
  
        Set_Is_Tag       (DT_Ptr);
*************** package body Exp_Disp is
*** 7357,7387 ****
        end if;
     end New_Value;
  
-    -----------------------------------
-    -- Original_View_In_Visible_Part --
-    -----------------------------------
- 
-    function Original_View_In_Visible_Part (Typ : Entity_Id) return Boolean is
-       Scop : constant Entity_Id := Scope (Typ);
- 
-    begin
-       --  The scope must be a package
- 
-       if not Is_Package_Or_Generic_Package (Scop) then
-          return False;
-       end if;
- 
-       --  A type with a private declaration has a private view declared in
-       --  the visible part.
- 
-       if Has_Private_Declaration (Typ) then
-          return True;
-       end if;
- 
-       return List_Containing (Parent (Typ)) =
-         Visible_Declarations (Package_Specification (Scop));
-    end Original_View_In_Visible_Part;
- 
     ------------------
     -- Prim_Op_Kind --
     ------------------
--- 7183,7188 ----
*************** package body Exp_Disp is
*** 7999,8012 ****
                           (Find_Dispatching_Type (Interface_Alias (Prim)), Typ,
                            Use_Full_View => True)
              then
!                pragma Assert (DT_Position (Prim) = No_Uint
!                  and then Present (DTC_Entity (Interface_Alias (Prim))));
  
                 E := Interface_Alias (Prim);
                 Set_DT_Position_Value (Prim, DT_Position (E));
  
                 pragma Assert
!                  (DT_Position (Alias (Prim)) = No_Uint
                      or else DT_Position (Alias (Prim)) = DT_Position (E));
                 Set_DT_Position_Value (Alias (Prim), DT_Position (E));
                 Set_Fixed_Prim (UI_To_Int (DT_Position (Prim)));
--- 7800,7813 ----
                           (Find_Dispatching_Type (Interface_Alias (Prim)), Typ,
                            Use_Full_View => True)
              then
!                pragma Assert (No (DT_Position (Prim)));
!                pragma Assert (Present (DTC_Entity (Interface_Alias (Prim))));
  
                 E := Interface_Alias (Prim);
                 Set_DT_Position_Value (Prim, DT_Position (E));
  
                 pragma Assert
!                  (No (DT_Position (Alias (Prim)))
                      or else DT_Position (Alias (Prim)) = DT_Position (E));
                 Set_DT_Position_Value (Alias (Prim), DT_Position (E));
                 Set_Fixed_Prim (UI_To_Int (DT_Position (Prim)));
*************** package body Exp_Disp is
*** 8057,8063 ****
  
              --  Skip primitives previously set entries
  
!             if DT_Position (Prim) /= No_Uint then
                 null;
  
              --  Primitives covering interface primitives are handled later
--- 7858,7864 ----
  
              --  Skip primitives previously set entries
  
!             if Present (DT_Position (Prim)) then
                 null;
  
              --  Primitives covering interface primitives are handled later
*************** package body Exp_Disp is
*** 8090,8096 ****
        while Present (Prim_Elmt) loop
           Prim := Node (Prim_Elmt);
  
!          if DT_Position (Prim) = No_Uint
             and then Present (Interface_Alias (Prim))
           then
              pragma Assert (Present (Alias (Prim))
--- 7891,7897 ----
        while Present (Prim_Elmt) loop
           Prim := Node (Prim_Elmt);
  
!          if No (DT_Position (Prim))
             and then Present (Interface_Alias (Prim))
           then
              pragma Assert (Present (Alias (Prim))
*************** package body Exp_Disp is
*** 8102,8115 ****
                   (Find_Dispatching_Type (Interface_Alias (Prim)), Typ,
                    Use_Full_View => True)
              then
!                pragma Assert (DT_Position (Alias (Prim)) /= No_Uint);
                 Set_DT_Position_Value (Prim, DT_Position (Alias (Prim)));
  
              --  Otherwise it will be placed in the secondary DT
  
              else
                 pragma Assert
!                  (DT_Position (Interface_Alias (Prim)) /= No_Uint);
                 Set_DT_Position_Value (Prim,
                   DT_Position (Interface_Alias (Prim)));
              end if;
--- 7903,7916 ----
                   (Find_Dispatching_Type (Interface_Alias (Prim)), Typ,
                    Use_Full_View => True)
              then
!                pragma Assert (Present (DT_Position (Alias (Prim))));
                 Set_DT_Position_Value (Prim, DT_Position (Alias (Prim)));
  
              --  Otherwise it will be placed in the secondary DT
  
              else
                 pragma Assert
!                  (Present (DT_Position (Interface_Alias (Prim))));
                 Set_DT_Position_Value (Prim,
                   DT_Position (Interface_Alias (Prim)));
              end if;
*************** package body Exp_Disp is
*** 8138,8144 ****
           --  At this point all the primitives MUST have a position in the
           --  dispatch table.
  
!          if DT_Position (Prim) = No_Uint then
              raise Program_Error;
           end if;
  
--- 7939,7945 ----
           --  At this point all the primitives MUST have a position in the
           --  dispatch table.
  
!          if No (DT_Position (Prim)) then
              raise Program_Error;
           end if;
  
*************** package body Exp_Disp is
*** 8270,8288 ****
                 Out_Present         => True,
                 Parameter_Type      => New_Occurrence_Of (Typ, Loc)));
  
!          if Present (Parameter_Specifications (Parent (E))) then
!             P := First (Parameter_Specifications (Parent (E)));
!             while Present (P) loop
!                Append_To (Parms,
!                  Make_Parameter_Specification (Loc,
!                    Defining_Identifier =>
!                      Make_Defining_Identifier (Loc,
!                        Chars => Chars (Defining_Identifier (P))),
!                    Parameter_Type      => New_Copy_Tree (Parameter_Type (P)),
!                    Expression          => New_Copy_Tree (Expression (P))));
!                Next (P);
!             end loop;
!          end if;
  
           return Parms;
        end Gen_Parameters_Profile;
--- 8071,8087 ----
                 Out_Present         => True,
                 Parameter_Type      => New_Occurrence_Of (Typ, Loc)));
  
!          P := First (Parameter_Specifications (Parent (E)));
!          while Present (P) loop
!             Append_To (Parms,
!               Make_Parameter_Specification (Loc,
!                 Defining_Identifier =>
!                   Make_Defining_Identifier (Loc,
!                     Chars => Chars (Defining_Identifier (P))),
!                 Parameter_Type      => New_Copy_Tree (Parameter_Type (P)),
!                 Expression          => New_Copy_Tree (Expression (P))));
!             Next (P);
!          end loop;
  
           return Parms;
        end Gen_Parameters_Profile;
*************** package body Exp_Disp is
*** 8692,8698 ****
           --  with an abstract interface type
  
           if Present (DTC_Entity (Prim)) then
!             if Etype (DTC_Entity (Prim)) = RTE (RE_Tag) then
                 Write_Str ("[P] ");
              else
                 Write_Str ("[s] ");
--- 8491,8497 ----
           --  with an abstract interface type
  
           if Present (DTC_Entity (Prim)) then
!             if Is_RTE (Etype (DTC_Entity (Prim)), RE_Tag) then
                 Write_Str ("[P] ");
              else
                 Write_Str ("[s] ");
*************** package body Exp_Disp is
*** 8758,8764 ****
           --  (primary or secondary) dispatch table.
  
           if Present (DTC_Entity (Prim))
!            and then DT_Position (Prim) /= No_Uint
           then
              Write_Str (" at #");
              Write_Int (UI_To_Int (DT_Position (Prim)));
--- 8557,8563 ----
           --  (primary or secondary) dispatch table.
  
           if Present (DTC_Entity (Prim))
!            and then Present (DT_Position (Prim))
           then
              Write_Str (" at #");
              Write_Int (UI_To_Int (DT_Position (Prim)));
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_disp.ads gcc-12.1.0/gcc/ada/exp_disp.ads
*** gcc-11.3.0/gcc/ada/exp_disp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_disp.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Exp_Disp is
*** 373,381 ****
     --  target object in its first argument; such implicit argument is explicit
     --  in the IP procedures built here.
  
!    procedure Set_DT_Position_Value (Prim  : Entity_Id; Value : Uint);
!    --  Set the position of a dispatching primitive its dispatch table. For
!    --  subprogram wrappers propagate the value to the wrapped subprogram.
  
     procedure Set_DTC_Entity_Value (Tagged_Type : Entity_Id; Prim : Entity_Id);
     --  Set the definite value of the DTC_Entity value associated with a given
--- 373,381 ----
     --  target object in its first argument; such implicit argument is explicit
     --  in the IP procedures built here.
  
!    procedure Set_DT_Position_Value (Prim : Entity_Id; Value : Uint);
!    --  Set the position of a dispatching primitive in its dispatch table.
!    --  For subprogram wrappers propagate the value to the wrapped subprogram.
  
     procedure Set_DTC_Entity_Value (Tagged_Type : Entity_Id; Prim : Entity_Id);
     --  Set the definite value of the DTC_Entity value associated with a given
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_dist.adb gcc-12.1.0/gcc/ada/exp_dist.adb
*** gcc-11.3.0/gcc/ada/exp_dist.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_dist.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,57 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Exp_Atag; use Exp_Atag;
! with Exp_Strm; use Exp_Strm;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Lib;      use Lib;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Cat;  use Sem_Cat;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Ch12; use Sem_Ch12;
! with Sem_Dist; use Sem_Dist;
! with Sem_Eval; use Sem_Eval;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Uintp;    use Uintp;
  
! with GNAT.HTable; use GNAT.HTable;
  
  package body Exp_Dist is
  
--- 23,61 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Exp_Atag;       use Exp_Atag;
! with Exp_Strm;       use Exp_Strm;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Lib;            use Lib;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch12;       use Sem_Ch12;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
  
! with GNAT.HTable;    use GNAT.HTable;
  
  package body Exp_Dist is
  
*************** package body Exp_Dist is
*** 296,307 ****
        NVList      : Entity_Id;
        Parameter   : Entity_Id;
        Constrained : Boolean;
-       RACW_Ctrl   : Boolean := False;
        Any         : Entity_Id) return Node_Id;
     --  Return a call to Add_Item to add the Any corresponding to the designated
     --  formal Parameter (with the indicated Constrained status) to NVList.
-    --  RACW_Ctrl must be set to True for controlling formals of distributed
-    --  object primitive operations.
  
     --------------------
     -- Stub_Structure --
--- 300,308 ----
*************** package body Exp_Dist is
*** 1085,1091 ****
        NVList      : Entity_Id;
        Parameter   : Entity_Id;
        Constrained : Boolean;
-       RACW_Ctrl   : Boolean := False;
        Any         : Entity_Id) return Node_Id
     is
        Parameter_Name_String : String_Id;
--- 1086,1091 ----
*************** package body Exp_Dist is
*** 1142,1148 ****
  
        Parameter_Name_String := String_From_Name_Buffer;
  
!       if RACW_Ctrl or else Nkind (Parameter) = N_Defining_Identifier then
  
           --  When the parameter passed to Add_Parameter_To_NVList is an
           --  Extra_Constrained parameter, Parameter is an N_Defining_
--- 1142,1148 ----
  
        Parameter_Name_String := String_From_Name_Buffer;
  
!       if Nkind (Parameter) = N_Defining_Identifier then
  
           --  When the parameter passed to Add_Parameter_To_NVList is an
           --  Extra_Constrained parameter, Parameter is an N_Defining_
*************** package body Exp_Dist is
*** 1420,1425 ****
--- 1420,1426 ----
                and then Chars (Current_Primitive) /= Name_uAlignment
                and then not
                  (Is_TSS (Current_Primitive, TSS_Deep_Finalize) or else
+                  Is_TSS (Current_Primitive, TSS_Put_Image)     or else
                   Is_TSS (Current_Primitive, TSS_Stream_Input)  or else
                   Is_TSS (Current_Primitive, TSS_Stream_Output) or else
                   Is_TSS (Current_Primitive, TSS_Stream_Read)   or else
*************** package body Exp_Dist is
*** 1728,1734 ****
                 New_Occurrence_Of (
                   Entity (Result_Definition (Spec)), Loc));
  
!          Set_Ekind (Proc, E_Function);
           Set_Etype (Proc,
             New_Occurrence_Of (Entity (Result_Definition (Spec)), Loc));
  
--- 1729,1735 ----
                 New_Occurrence_Of (
                   Entity (Result_Definition (Spec)), Loc));
  
!          Mutate_Ekind (Proc, E_Function);
           Set_Etype (Proc,
             New_Occurrence_Of (Entity (Result_Definition (Spec)), Loc));
  
*************** package body Exp_Dist is
*** 1738,1744 ****
               Defining_Unit_Name       => Proc,
               Parameter_Specifications => Param_Specs);
  
!          Set_Ekind (Proc, E_Procedure);
           Set_Etype (Proc, Standard_Void_Type);
        end if;
  
--- 1739,1745 ----
               Defining_Unit_Name       => Proc,
               Parameter_Specifications => Param_Specs);
  
!          Mutate_Ekind (Proc, E_Procedure);
           Set_Etype (Proc, Standard_Void_Type);
        end if;
  
*************** package body Exp_Dist is
*** 1975,1981 ****
  
        Existing := False;
        Stub_Type := Make_Temporary (Loc, 'S');
!       Set_Ekind (Stub_Type, E_Record_Type);
        Set_Is_RACW_Stub_Type (Stub_Type);
        Stub_Type_Access :=
          Make_Defining_Identifier (Loc,
--- 1976,1982 ----
  
        Existing := False;
        Stub_Type := Make_Temporary (Loc, 'S');
!       Mutate_Ekind (Stub_Type, E_Record_Type);
        Set_Is_RACW_Stub_Type (Stub_Type);
        Stub_Type_Access :=
          Make_Defining_Identifier (Loc,
*************** package body Exp_Dist is
*** 2165,2171 ****
                     Object_Definition   =>
                       New_Occurrence_Of
                         (Defining_Identifier (Last (Decls)), Loc)));
!                Set_Ekind (Object, E_Variable);
  
                 --  Suppress default initialization:
                 --  pragma Import (Ada, Object);
--- 2166,2172 ----
                     Object_Definition   =>
                       New_Occurrence_Of
                         (Defining_Identifier (Last (Decls)), Loc)));
!                Mutate_Ekind (Object, E_Variable);
  
                 --  Suppress default initialization:
                 --  pragma Import (Ada, Object);
*************** package body Exp_Dist is
*** 2209,2217 ****
               Expression          => Expr));
  
           if Constant_Present (Last (Decls)) then
!             Set_Ekind (Object, E_Constant);
           else
!             Set_Ekind (Object, E_Variable);
           end if;
        end if;
     end Build_Actual_Object_Declaration;
--- 2210,2218 ----
               Expression          => Expr));
  
           if Constant_Present (Last (Decls)) then
!             Mutate_Ekind (Object, E_Constant);
           else
!             Mutate_Ekind (Object, E_Variable);
           end if;
        end if;
     end Build_Actual_Object_Declaration;
*************** package body Exp_Dist is
*** 2855,2863 ****
        if E_Calling_Stubs = Empty then
           RCI_Locator := RCI_Locator_Table.Get (RCI_Package);
  
!          --  The RCI_Locator package and calling stub are is inserted at the
!          --  top level in the current unit, and must appear in the proper scope
!          --  so that it is not prematurely removed by the GCC back end.
  
           declare
              Scop : constant Entity_Id := Cunit_Entity (Current_Sem_Unit);
--- 2856,2864 ----
        if E_Calling_Stubs = Empty then
           RCI_Locator := RCI_Locator_Table.Get (RCI_Package);
  
!          --  The RCI_Locator package and calling stub are inserted at the top
!          --  level in the current unit, and must appear in the proper scope so
!          --  that it is not prematurely removed by the GCC back end.
  
           declare
              Scop : constant Entity_Id := Cunit_Entity (Current_Sem_Unit);
*************** package body Exp_Dist is
*** 2907,2913 ****
     ---------------------------------
  
     procedure Expand_Calling_Stubs_Bodies (Unit_Node : Node_Id) is
!       Spec  : constant Node_Id := Specification (Unit_Node);
     begin
        Add_Calling_Stubs_To_Declarations (Spec);
     end Expand_Calling_Stubs_Bodies;
--- 2908,2914 ----
     ---------------------------------
  
     procedure Expand_Calling_Stubs_Bodies (Unit_Node : Node_Id) is
!       Spec : constant Node_Id := Specification (Unit_Node);
     begin
        Add_Calling_Stubs_To_Declarations (Spec);
     end Expand_Calling_Stubs_Bodies;
*************** package body Exp_Dist is
*** 3723,3729 ****
           --  Set the kind and return type of the function to prevent
           --  ambiguities between Ras_Type and Fat_Type in subsequent analysis.
  
!          Set_Ekind (Proc, E_Function);
           Set_Etype (Proc, Fat_Type);
  
           Discard_Node (
--- 3724,3730 ----
           --  Set the kind and return type of the function to prevent
           --  ambiguities between Ras_Type and Fat_Type in subsequent analysis.
  
!          Mutate_Ekind (Proc, E_Function);
           Set_Etype (Proc, Fat_Type);
  
           Discard_Node (
*************** package body Exp_Dist is
*** 6468,6474 ****
           --  Set the kind and return type of the function to prevent
           --  ambiguities between Ras_Type and Fat_Type in subsequent analysis.
  
!          Set_Ekind (Proc, E_Function);
           Set_Etype (Proc, Fat_Type);
  
           Discard_Node (
--- 6469,6475 ----
           --  Set the kind and return type of the function to prevent
           --  ambiguities between Ras_Type and Fat_Type in subsequent analysis.
  
!          Mutate_Ekind (Proc, E_Function);
           Set_Etype (Proc, Fat_Type);
  
           Discard_Node (
*************** package body Exp_Dist is
*** 8261,8267 ****
              with procedure Add_Process_Element
                (Stmts     : List_Id;
                 Container : Node_Or_Entity_Id;
!                Counter   : in out Int;
                 Rec       : Entity_Id;
                 Field     : Node_Id);
              --  Rec is the instance of the record type, or Empty.
--- 8262,8268 ----
              with procedure Add_Process_Element
                (Stmts     : List_Id;
                 Container : Node_Or_Entity_Id;
!                Counter   : in out Nat;
                 Rec       : Entity_Id;
                 Field     : Node_Id);
              --  Rec is the instance of the record type, or Empty.
*************** package body Exp_Dist is
*** 8272,8278 ****
             (Stmts     : List_Id;
              Clist     : Node_Id;
              Container : Node_Or_Entity_Id;
!             Counter   : in out Int);
           --  Process component list Clist. Individual fields are passed
           --  to Field_Processing. Each variant part is also processed.
           --  Container is the outer Any (for From_Any/To_Any),
--- 8273,8279 ----
             (Stmts     : List_Id;
              Clist     : Node_Id;
              Container : Node_Or_Entity_Id;
!             Counter   : in out Nat);
           --  Process component list Clist. Individual fields are passed
           --  to Field_Processing. Each variant part is also processed.
           --  Container is the outer Any (for From_Any/To_Any),
*************** package body Exp_Dist is
*** 8286,8292 ****
             (Stmts     : List_Id;
              Clist     : Node_Id;
              Container : Node_Or_Entity_Id;
!             Counter   : in out Int)
           is
              CI : List_Id;
              VP : Node_Id;
--- 8287,8293 ----
             (Stmts     : List_Id;
              Clist     : Node_Id;
              Container : Node_Or_Entity_Id;
!             Counter   : in out Nat)
           is
              CI : List_Id;
              VP : Node_Id;
*************** package body Exp_Dist is
*** 8444,8452 ****
           is
              Loc : constant Source_Ptr := Sloc (N);
  
!             U_Type : Entity_Id  := Underlying_Type (Typ);
  
!             Fnam    : Entity_Id := Empty;
              Lib_RE  : RE_Id := RE_Null;
              Result  : Node_Id;
  
--- 8445,8453 ----
           is
              Loc : constant Source_Ptr := Sloc (N);
  
!             U_Type : Entity_Id := Underlying_Type (Typ);
  
!             Fnam    : Entity_Id;
              Lib_RE  : RE_Id := RE_Null;
              Result  : Node_Id;
  
*************** package body Exp_Dist is
*** 8516,8522 ****
              --  Integer types
  
              elsif U_Type = RTE (RE_Integer_8) then
!                   Lib_RE := RE_FA_I8;
  
              elsif U_Type = RTE (RE_Integer_16) then
                 Lib_RE := RE_FA_I16;
--- 8517,8523 ----
              --  Integer types
  
              elsif U_Type = RTE (RE_Integer_8) then
!                Lib_RE := RE_FA_I8;
  
              elsif U_Type = RTE (RE_Integer_16) then
                 Lib_RE := RE_FA_I16;
*************** package body Exp_Dist is
*** 8599,8604 ****
--- 8600,8607 ----
  
              Use_Opaque_Representation : Boolean;
  
+             Real_Rep : Node_Id;
+ 
           begin
              --  For a derived type, we can't go past the base type (to the
              --  parent type) here, because that would cause the attribute's
*************** package body Exp_Dist is
*** 8633,8642 ****
              Use_Opaque_Representation := False;
  
              if Has_Stream_Attribute_Definition
!                  (Typ, TSS_Stream_Output, At_Any_Place => True)
                or else
                 Has_Stream_Attribute_Definition
!                  (Typ, TSS_Stream_Write, At_Any_Place => True)
              then
                 --  If user-defined stream attributes are specified for this
                 --  type, use them and transmit data as an opaque sequence of
--- 8636,8645 ----
              Use_Opaque_Representation := False;
  
              if Has_Stream_Attribute_Definition
!                  (Typ, TSS_Stream_Output, Real_Rep, At_Any_Place => True)
                or else
                 Has_Stream_Attribute_Definition
!                  (Typ, TSS_Stream_Write, Real_Rep, At_Any_Place => True)
              then
                 --  If user-defined stream attributes are specified for this
                 --  type, use them and transmit data as an opaque sequence of
*************** package body Exp_Dist is
*** 8674,8680 ****
                       Rdef                      : constant Node_Id :=
                                                     Type_Definition
                                                       (Declaration_Node (Typ));
!                      Component_Counter         : Int := 0;
  
                       --  The returned object
  
--- 8677,8683 ----
                       Rdef                      : constant Node_Id :=
                                                     Type_Definition
                                                       (Declaration_Node (Typ));
!                      Component_Counter         : Nat := 0;
  
                       --  The returned object
  
*************** package body Exp_Dist is
*** 8685,8691 ****
                       procedure FA_Rec_Add_Process_Element
                         (Stmts   : List_Id;
                          Any     : Entity_Id;
!                         Counter : in out Int;
                          Rec     : Entity_Id;
                          Field   : Node_Id);
  
--- 8688,8694 ----
                       procedure FA_Rec_Add_Process_Element
                         (Stmts   : List_Id;
                          Any     : Entity_Id;
!                         Counter : in out Nat;
                          Rec     : Entity_Id;
                          Field   : Node_Id);
  
*************** package body Exp_Dist is
*** 8701,8707 ****
                       procedure FA_Rec_Add_Process_Element
                         (Stmts   : List_Id;
                          Any     : Entity_Id;
!                         Counter : in out Int;
                          Rec     : Entity_Id;
                          Field   : Node_Id)
                       is
--- 8704,8710 ----
                       procedure FA_Rec_Add_Process_Element
                         (Stmts   : List_Id;
                          Any     : Entity_Id;
!                         Counter : in out Nat;
                          Rec     : Entity_Id;
                          Field   : Node_Id)
                       is
*************** package body Exp_Dist is
*** 8735,8741 ****
  
                             declare
                                Variant        : Node_Id;
!                               Struct_Counter : Int := 0;
  
                                Block_Decls : constant List_Id := New_List;
                                Block_Stmts : constant List_Id := New_List;
--- 8738,8744 ----
  
                             declare
                                Variant        : Node_Id;
!                               Struct_Counter : Nat := 0;
  
                                Block_Decls : constant List_Id := New_List;
                                Block_Stmts : constant List_Id := New_List;
*************** package body Exp_Dist is
*** 9243,9249 ****
              Typ    : Entity_Id := Etype (N);
              U_Type : Entity_Id;
              C_Type : Entity_Id;
!             Fnam   : Entity_Id := Empty;
              Lib_RE : RE_Id := RE_Null;
  
           begin
--- 9246,9252 ----
              Typ    : Entity_Id := Etype (N);
              U_Type : Entity_Id;
              C_Type : Entity_Id;
!             Fnam   : Entity_Id;
              Lib_RE : RE_Id := RE_Null;
  
           begin
*************** package body Exp_Dist is
*** 9437,9442 ****
--- 9440,9447 ----
              --  When True, use stream attributes and represent type as an
              --  opaque sequence of bytes.
  
+             Real_Rep : Node_Id;
+ 
           begin
              --  For a derived type, we can't go past the base type (to the
              --  parent type) here, because that would cause the attribute's
*************** package body Exp_Dist is
*** 9491,9500 ****
              Use_Opaque_Representation := False;
  
              if Has_Stream_Attribute_Definition
!                  (Typ, TSS_Stream_Output, At_Any_Place => True)
                or else
                 Has_Stream_Attribute_Definition
!                  (Typ, TSS_Stream_Write,  At_Any_Place => True)
              then
                 --  If user-defined stream attributes are specified for this
                 --  type, use them and transmit data as an opaque sequence of
--- 9496,9505 ----
              Use_Opaque_Representation := False;
  
              if Has_Stream_Attribute_Definition
!                  (Typ, TSS_Stream_Output, Real_Rep, At_Any_Place => True)
                or else
                 Has_Stream_Attribute_Definition
!                  (Typ, TSS_Stream_Write, Real_Rep, At_Any_Place => True)
              then
                 --  If user-defined stream attributes are specified for this
                 --  type, use them and transmit data as an opaque sequence of
*************** package body Exp_Dist is
*** 9540,9552 ****
                       Disc     : Entity_Id := Empty;
                       Rdef     : constant Node_Id :=
                                    Type_Definition (Declaration_Node (Typ));
!                      Counter  : Int := 0;
                       Elements : constant List_Id := New_List;
  
                       procedure TA_Rec_Add_Process_Element
                         (Stmts     : List_Id;
                          Container : Node_Or_Entity_Id;
!                         Counter   : in out Int;
                          Rec       : Entity_Id;
                          Field     : Node_Id);
                       --  Processing routine for traversal below
--- 9545,9557 ----
                       Disc     : Entity_Id := Empty;
                       Rdef     : constant Node_Id :=
                                    Type_Definition (Declaration_Node (Typ));
!                      Counter  : Nat := 0;
                       Elements : constant List_Id := New_List;
  
                       procedure TA_Rec_Add_Process_Element
                         (Stmts     : List_Id;
                          Container : Node_Or_Entity_Id;
!                         Counter   : in out Nat;
                          Rec       : Entity_Id;
                          Field     : Node_Id);
                       --  Processing routine for traversal below
*************** package body Exp_Dist is
*** 9563,9569 ****
                       procedure TA_Rec_Add_Process_Element
                         (Stmts     : List_Id;
                          Container : Node_Or_Entity_Id;
!                         Counter   : in out Int;
                          Rec       : Entity_Id;
                          Field     : Node_Id)
                       is
--- 9568,9574 ----
                       procedure TA_Rec_Add_Process_Element
                         (Stmts     : List_Id;
                          Container : Node_Or_Entity_Id;
!                         Counter   : in out Nat;
                          Rec       : Entity_Id;
                          Field     : Node_Id)
                       is
*************** package body Exp_Dist is
*** 9593,9599 ****
  
                             Variant_Part : declare
                                Variant        : Node_Id;
!                               Struct_Counter : Int := 0;
  
                                Block_Decls : constant List_Id := New_List;
                                Block_Stmts : constant List_Id := New_List;
--- 9598,9604 ----
  
                             Variant_Part : declare
                                Variant        : Node_Id;
!                               Struct_Counter : Nat := 0;
  
                                Block_Decls : constant List_Id := New_List;
                                Block_Stmts : constant List_Id := New_List;
*************** package body Exp_Dist is
*** 10101,10107 ****
              --  The full view, if Typ is private; the completion,
              --  if Typ is incomplete.
  
!             Fnam   : Entity_Id := Empty;
              Lib_RE : RE_Id := RE_Null;
              Expr   : Node_Id;
  
--- 10106,10112 ----
              --  The full view, if Typ is private; the completion,
              --  if Typ is incomplete.
  
!             Fnam   : Entity_Id;
              Lib_RE : RE_Id := RE_Null;
              Expr   : Node_Id;
  
*************** package body Exp_Dist is
*** 10396,10402 ****
              procedure TC_Rec_Add_Process_Element
                (Params  : List_Id;
                 Any     : Entity_Id;
!                Counter : in out Int;
                 Rec     : Entity_Id;
                 Field   : Node_Id);
  
--- 10401,10407 ----
              procedure TC_Rec_Add_Process_Element
                (Params  : List_Id;
                 Any     : Entity_Id;
!                Counter : in out Nat;
                 Rec     : Entity_Id;
                 Field   : Node_Id);
  
*************** package body Exp_Dist is
*** 10412,10418 ****
              procedure TC_Rec_Add_Process_Element
                (Params  : List_Id;
                 Any     : Entity_Id;
!                Counter : in out Int;
                 Rec     : Entity_Id;
                 Field   : Node_Id)
              is
--- 10417,10423 ----
              procedure TC_Rec_Add_Process_Element
                (Params  : List_Id;
                 Any     : Entity_Id;
!                Counter : in out Nat;
                 Rec     : Entity_Id;
                 Field   : Node_Id)
              is
*************** package body Exp_Dist is
*** 10451,10457 ****
                       Default : constant Node_Id :=
                                   Make_Integer_Literal (Loc, -1);
  
!                      Dummy_Counter : Int := 0;
  
                       Choice_Index : Int := 0;
                       --  Index of current choice in TypeCode, used to identify
--- 10456,10462 ----
                       Default : constant Node_Id :=
                                   Make_Integer_Literal (Loc, -1);
  
!                      Dummy_Counter : Nat := 0;
  
                       Choice_Index : Int := 0;
                       --  Index of current choice in TypeCode, used to identify
*************** package body Exp_Dist is
*** 10623,10628 ****
--- 10628,10635 ----
              Type_Name_Str    : String_Id;
              Type_Repo_Id_Str : String_Id;
  
+             Real_Rep : Node_Id;
+ 
           --  Start of processing for Build_TypeCode_Function
  
           begin
*************** package body Exp_Dist is
*** 10656,10665 ****
                (Type_Name_Str, Type_Repo_Id_Str, Parameters);
  
              if Has_Stream_Attribute_Definition
!                  (Typ, TSS_Stream_Output, At_Any_Place => True)
                or else
                 Has_Stream_Attribute_Definition
!                  (Typ, TSS_Stream_Write, At_Any_Place => True)
              then
                 --  If user-defined stream attributes are specified for this
                 --  type, use them and transmit data as an opaque sequence of
--- 10663,10672 ----
                (Type_Name_Str, Type_Repo_Id_Str, Parameters);
  
              if Has_Stream_Attribute_Definition
!                  (Typ, TSS_Stream_Output, Real_Rep, At_Any_Place => True)
                or else
                 Has_Stream_Attribute_Definition
!                  (Typ, TSS_Stream_Write, Real_Rep, At_Any_Place => True)
              then
                 --  If user-defined stream attributes are specified for this
                 --  type, use them and transmit data as an opaque sequence of
*************** package body Exp_Dist is
*** 10902,10909 ****
                 raise Program_Error;
              end if;
  
!             --  TBD: fixed point types???
!             --  TBverified numeric types with a biased representation???
  
           end Find_Numeric_Representation;
  
--- 10909,10916 ----
                 raise Program_Error;
              end if;
  
!             --  What about fixed point types and numeric types with a biased
!             --  representation???
  
           end Find_Numeric_Representation;
  
*************** package body Exp_Dist is
*** 11344,11353 ****
  
     begin
        if Nkind (Spec) = N_Function_Specification then
!          Set_Ekind (Snam, E_Function);
           Set_Etype (Snam, Entity (Result_Definition (Spec)));
        else
!          Set_Ekind (Snam, E_Procedure);
           Set_Etype (Snam, Standard_Void_Type);
        end if;
  
--- 11351,11360 ----
  
     begin
        if Nkind (Spec) = N_Function_Specification then
!          Mutate_Ekind (Snam, E_Function);
           Set_Etype (Snam, Entity (Result_Definition (Spec)));
        else
!          Mutate_Ekind (Snam, E_Procedure);
           Set_Etype (Snam, Standard_Void_Type);
        end if;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_dist.ads gcc-12.1.0/gcc/ada/exp_dist.ads
*** gcc-11.3.0/gcc/ada/exp_dist.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_dist.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_fixd.adb gcc-12.1.0/gcc/ada/exp_fixd.adb
*** gcc-11.3.0/gcc/ada/exp_fixd.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_fixd.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,47 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Einfo;    use Einfo;
! with Exp_Util; use Exp_Util;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Stand;    use Stand;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Uintp;    use Uintp;
! with Urealp;   use Urealp;
  
  package body Exp_Fixd is
  
--- 23,50 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Exp_Util;       use Exp_Util;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Stand;          use Stand;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
! with Urealp;         use Urealp;
  
  package body Exp_Fixd is
  
*************** package body Exp_Fixd is
*** 187,192 ****
--- 190,204 ----
     --  The expression returned is neither analyzed nor resolved. The Etype
     --  of the result is properly set (to Universal_Real).
  
+    function Get_Size_For_Value (V : Uint) return Pos;
+    --  Given a non-negative universal integer value, return the size of a small
+    --  signed integer type covering -V .. V, or Pos'Max if no such type exists.
+ 
+    function Get_Type_For_Size (Siz : Pos; Force : Boolean) return Entity_Id;
+    --  Return the smallest signed integer type containing at least Siz bits.
+    --  If no such type exists, return Empty if Force is False or the largest
+    --  signed integer type if Force is True.
+ 
     function Integer_Literal
       (N        : Node_Id;
        V        : Uint;
*************** package body Exp_Fixd is
*** 321,327 ****
        Right_Type  : constant Entity_Id  := Base_Type (Etype (R));
        Left_Size   : Int;
        Right_Size  : Int;
-       Rsize       : Int;
        Result_Type : Entity_Id;
        Rnode       : Node_Id;
  
--- 333,338 ----
*************** package body Exp_Fixd is
*** 351,370 ****
           --  the effective size of an operand is the RM_Size of the operand.
           --  But a special case arises with operands whose size is known at
           --  compile time. In this case, we can use the actual value of the
!          --  operand to get its size if it would fit in signed 8/16/32 bits.
  
           Left_Size := UI_To_Int (RM_Size (Left_Type));
  
           if Compile_Time_Known_Value (L) then
              declare
!                Val : constant Uint := Expr_Value (L);
              begin
!                if Val < Uint_2 ** 7 then
!                   Left_Size := 8;
!                elsif Val < Uint_2 ** 15 then
!                   Left_Size := 16;
!                elsif Val < Uint_2 ** 31 then
!                   Left_Size := 32;
                 end if;
              end;
           end if;
--- 362,378 ----
           --  the effective size of an operand is the RM_Size of the operand.
           --  But a special case arises with operands whose size is known at
           --  compile time. In this case, we can use the actual value of the
!          --  operand to get a size if it would fit in a small signed integer.
  
           Left_Size := UI_To_Int (RM_Size (Left_Type));
  
           if Compile_Time_Known_Value (L) then
              declare
!                Siz : constant Int :=
!                        Get_Size_For_Value (UI_Abs (Expr_Value (L)));
              begin
!                if Siz < Left_Size then
!                   Left_Size := Siz;
                 end if;
              end;
           end if;
*************** package body Exp_Fixd is
*** 373,407 ****
  
           if Compile_Time_Known_Value (R) then
              declare
!                Val : constant Uint := Expr_Value (R);
              begin
!                if Val <= Int'(2 ** 7) then
!                   Right_Size := 8;
!                elsif Val <= Int'(2 ** 15) then
!                   Right_Size := 16;
                 end if;
              end;
           end if;
  
           --  Do the operation using the longer of the two sizes
  
!          Rsize := Int'Max (Left_Size, Right_Size);
! 
!          if Rsize <= 8 then
!             Result_Type := Standard_Integer_8;
! 
!          elsif Rsize <= 16 then
!             Result_Type := Standard_Integer_16;
! 
!          elsif Rsize <= 32 then
!             Result_Type := Standard_Integer_32;
! 
!          elsif Rsize <= 64 or else System_Max_Integer_Size < 128 then
!             Result_Type := Standard_Integer_64;
! 
!          else
!             Result_Type := Standard_Integer_128;
!          end if;
  
           Rnode :=
              Make_Op_Divide (Loc,
--- 381,399 ----
  
           if Compile_Time_Known_Value (R) then
              declare
!                Siz : constant Int :=
!                        Get_Size_For_Value (UI_Abs (Expr_Value (R)));
              begin
!                if Siz < Right_Size then
!                   Right_Size := Siz;
                 end if;
              end;
           end if;
  
           --  Do the operation using the longer of the two sizes
  
!          Result_Type :=
!            Get_Type_For_Size (Int'Max (Left_Size, Right_Size), Force => True);
  
           Rnode :=
              Make_Op_Divide (Loc,
*************** package body Exp_Fixd is
*** 661,667 ****
        Right_Type  : constant Entity_Id  := Etype (R);
        Left_Size   : Int;
        Right_Size  : Int;
-       Rsize       : Int;
        Result_Type : Entity_Id;
        Rnode       : Node_Id;
  
--- 653,658 ----
*************** package body Exp_Fixd is
*** 694,713 ****
           --  the effective size of an operand is the RM_Size of the operand.
           --  But a special case arises with operands whose size is known at
           --  compile time. In this case, we can use the actual value of the
!          --  operand to get its size if it would fit in signed 8/16/32 bits.
  
           Left_Size := UI_To_Int (RM_Size (Left_Type));
  
           if Compile_Time_Known_Value (L) then
              declare
!                Val : constant Uint := Expr_Value (L);
              begin
!                if Val < Uint_2 ** 7 then
!                   Left_Size := 8;
!                elsif Val < Uint_2 ** 15 then
!                   Left_Size := 16;
!                elsif Val < Uint_2 ** 31 then
!                   Left_Size := 32;
                 end if;
              end;
           end if;
--- 685,701 ----
           --  the effective size of an operand is the RM_Size of the operand.
           --  But a special case arises with operands whose size is known at
           --  compile time. In this case, we can use the actual value of the
!          --  operand to get a size if it would fit in a small signed integer.
  
           Left_Size := UI_To_Int (RM_Size (Left_Type));
  
           if Compile_Time_Known_Value (L) then
              declare
!                Siz : constant Int :=
!                        Get_Size_For_Value (UI_Abs (Expr_Value (L)));
              begin
!                if Siz < Left_Size then
!                   Left_Size := Siz;
                 end if;
              end;
           end if;
*************** package body Exp_Fixd is
*** 716,727 ****
  
           if Compile_Time_Known_Value (R) then
              declare
!                Val : constant Uint := Expr_Value (R);
              begin
!                if Val <= Int'(2 ** 7) then
!                   Right_Size := 8;
!                elsif Val <= Int'(2 ** 15) then
!                   Right_Size := 16;
                 end if;
              end;
           end if;
--- 704,714 ----
  
           if Compile_Time_Known_Value (R) then
              declare
!                Siz : constant Int :=
!                        Get_Size_For_Value (UI_Abs (Expr_Value (R)));
              begin
!                if Siz < Right_Size then
!                   Right_Size := Siz;
                 end if;
              end;
           end if;
*************** package body Exp_Fixd is
*** 729,751 ****
           --  Now the result size must be at least the sum of the two sizes,
           --  to accommodate all possible results.
  
!          Rsize := Left_Size + Right_Size;
! 
!          if Rsize <= 8 then
!             Result_Type := Standard_Integer_8;
! 
!          elsif Rsize <= 16 then
!             Result_Type := Standard_Integer_16;
! 
!          elsif Rsize <= 32 then
!             Result_Type := Standard_Integer_32;
! 
!          elsif Rsize <= 64 or else System_Max_Integer_Size < 128 then
!             Result_Type := Standard_Integer_64;
! 
!          else
!             Result_Type := Standard_Integer_128;
!          end if;
  
           Rnode :=
              Make_Op_Multiply (Loc,
--- 716,723 ----
           --  Now the result size must be at least the sum of the two sizes,
           --  to accommodate all possible results.
  
!          Result_Type :=
!            Get_Type_For_Size (Left_Size + Right_Size, Force => True);
  
           Rnode :=
              Make_Op_Multiply (Loc,
*************** package body Exp_Fixd is
*** 1539,1545 ****
  
        else
           Lit_Int := Integer_Literal (N, Frac_Den, UR_Is_Negative (Frac));
!          Lit_K   := Integer_Literal (N, Frac_Num);
  
           if Present (Lit_Int) and then Present (Lit_K) then
              Set_Result (N, Build_Scaled_Divide (N, Left, Lit_K, Lit_Int));
--- 1511,1517 ----
  
        else
           Lit_Int := Integer_Literal (N, Frac_Den, UR_Is_Negative (Frac));
!          Lit_K   := Integer_Literal (N, Frac_Num, False);
  
           if Present (Lit_Int) and then Present (Lit_K) then
              Set_Result (N, Build_Scaled_Divide (N, Left, Lit_K, Lit_Int));
*************** package body Exp_Fixd is
*** 2419,2424 ****
--- 2391,2454 ----
        return Build_Conversion (N, Universal_Real, N);
     end Fpt_Value;
  
+    ------------------------
+    -- Get_Size_For_Value --
+    ------------------------
+ 
+    function Get_Size_For_Value (V : Uint) return Pos is
+    begin
+       pragma Assert (V >= Uint_0);
+ 
+       if V < Uint_2 ** 7 then
+          return 8;
+ 
+       elsif V < Uint_2 ** 15 then
+          return 16;
+ 
+       elsif V < Uint_2 ** 31 then
+          return 32;
+ 
+       elsif V < Uint_2 ** 63 then
+          return 64;
+ 
+       elsif V < Uint_2 ** 127 then
+          return 128;
+ 
+       else
+          return Pos'Last;
+       end if;
+    end Get_Size_For_Value;
+ 
+    -----------------------
+    -- Get_Type_For_Size --
+    -----------------------
+ 
+    function Get_Type_For_Size (Siz : Pos; Force : Boolean) return Entity_Id is
+    begin
+       if Siz <= 8 then
+          return Standard_Integer_8;
+ 
+       elsif Siz <= 16 then
+          return Standard_Integer_16;
+ 
+       elsif Siz <= 32 then
+          return Standard_Integer_32;
+ 
+       elsif Siz <= 64
+         or else (Force and then System_Max_Integer_Size < 128)
+       then
+          return Standard_Integer_64;
+ 
+       elsif (Siz <= 128 and then System_Max_Integer_Size = 128)
+         or else Force
+       then
+          return Standard_Integer_128;
+ 
+       else
+          return Empty;
+       end if;
+    end Get_Type_For_Size;
+ 
     ---------------------
     -- Integer_Literal --
     ---------------------
*************** package body Exp_Fixd is
*** 2432,2453 ****
        L : Node_Id;
  
     begin
!       if V < Uint_2 ** 7 then
!          T := Standard_Integer_8;
! 
!       elsif V < Uint_2 ** 15 then
!          T := Standard_Integer_16;
! 
!       elsif V < Uint_2 ** 31 then
!          T := Standard_Integer_32;
! 
!       elsif V < Uint_2 ** 63 then
!          T := Standard_Integer_64;
! 
!       elsif V < Uint_2 ** 127 and then System_Max_Integer_Size = 128 then
!          T := Standard_Integer_128;
! 
!       else
           return Empty;
        end if;
  
--- 2462,2469 ----
        L : Node_Id;
  
     begin
!       T := Get_Type_For_Size (Get_Size_For_Value (V), Force => False);
!       if No (T) then
           return Empty;
        end if;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_fixd.ads gcc-12.1.0/gcc/ada/exp_fixd.ads
*** gcc-11.3.0/gcc/ada/exp_fixd.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_fixd.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_imgv.adb gcc-12.1.0/gcc/ada/exp_imgv.adb
*** gcc-11.3.0/gcc/ada/exp_imgv.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_imgv.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
***************
*** 23,51 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Checks;   use Checks;
! with Einfo;    use Einfo;
  with Exp_Put_Image;
! with Exp_Util; use Exp_Util;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nmake;    use Nmake;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Rtsfind;  use Rtsfind;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Uintp;    use Uintp;
! with Urealp;   use Urealp;
  
  package body Exp_Imgv is
  
--- 23,61 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Checks;         use Checks;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Debug;          use Debug;
  with Exp_Put_Image;
! with Exp_Util;       use Exp_Util;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nmake;          use Nmake;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
! with Urealp;         use Urealp;
! 
! with System.Perfect_Hash_Generators;
  
  package body Exp_Imgv is
  
*************** package body Exp_Imgv is
*** 65,85 ****
     ------------------------------------
  
     procedure Build_Enumeration_Image_Tables (E : Entity_Id; N : Node_Id) is
!       Loc : constant Source_Ptr := Sloc (E);
  
        Eind : Entity_Id;
        Estr : Entity_Id;
        Ind  : List_Id;
        Ityp : Node_Id;
        Len  : Nat;
        Lit  : Entity_Id;
        Nlit : Nat;
        Str  : String_Id;
  
        Saved_SSO : constant Character := Opt.Default_SSO;
        --  Used to save the current scalar storage order during the generation
        --  of the literal lookup table.
  
     begin
        --  Nothing to do for types other than a root enumeration type
  
--- 75,170 ----
     ------------------------------------
  
     procedure Build_Enumeration_Image_Tables (E : Entity_Id; N : Node_Id) is
!       Loc          : constant Source_Ptr := Sloc (E);
!       In_Main_Unit : constant Boolean    := In_Extended_Main_Code_Unit (Loc);
  
+       Act  : List_Id;
        Eind : Entity_Id;
        Estr : Entity_Id;
+       H_Id : Entity_Id;
+       H_OK : Boolean;
+       H_Sp : Node_Id;
        Ind  : List_Id;
        Ityp : Node_Id;
        Len  : Nat;
        Lit  : Entity_Id;
        Nlit : Nat;
+       S_Id : Entity_Id;
+       S_N  : Nat := 0;
        Str  : String_Id;
  
+       package SPHG renames System.Perfect_Hash_Generators;
+ 
        Saved_SSO : constant Character := Opt.Default_SSO;
        --  Used to save the current scalar storage order during the generation
        --  of the literal lookup table.
  
+       Serial_Number_Budget : constant := 50;
+       --  We may want to compute a perfect hash function for use by the Value
+       --  attribute. However computing this function is costly and, therefore,
+       --  cannot be done when compiling every unit where the enumeration type
+       --  is referenced, so we do it only when compiling the unit where it is
+       --  declared. This means that we may need to control the internal serial
+       --  numbers of this unit, or else we would risk generating public symbols
+       --  with mismatched names later on. The strategy for this is to allocate
+       --  a fixed budget of serial numbers to be spent from a specified point
+       --  until the end of the processing and to make sure that it is always
+       --  exactly spent on all possible paths from this point.
+ 
+       Threshold : constant Nat :=
+         (if Is_Library_Level_Entity (E)
+            or else not Always_Compatible_Rep_On_Target
+          then 3
+          else Nat'Last);
+       --  Threshold above which we want to generate the hash function in the
+       --  default case. We avoid doing it if this would cause a trampoline to
+       --  be generated because the type is local and descriptors are not used.
+ 
+       Threshold_For_Size : constant Nat := Nat'Max (Threshold, 9);
+       --  But the function and its tables take a bit of space so the threshold
+       --  is raised when compiling for size.
+ 
+       procedure Append_Table_To
+         (L    : List_Id;
+          E    : Entity_Id;
+          UB   : Nat;
+          Ctyp : Entity_Id;
+          V    : List_Id);
+       --  Append to L the declaration of E as a constant array of range 0 .. UB
+       --  and component type Ctyp with initial value V.
+ 
+       ---------------------
+       -- Append_Table_To --
+       ---------------------
+ 
+       procedure Append_Table_To
+         (L    : List_Id;
+          E    : Entity_Id;
+          UB   : Nat;
+          Ctyp : Entity_Id;
+          V    : List_Id)
+       is
+       begin
+          Append_To (L,
+            Make_Object_Declaration (Loc,
+              Defining_Identifier => E,
+              Constant_Present    => True,
+              Object_Definition   =>
+                Make_Constrained_Array_Definition (Loc,
+                  Discrete_Subtype_Definitions => New_List (
+                    Make_Range (Loc,
+                      Low_Bound  => Make_Integer_Literal (Loc, 0),
+                      High_Bound => Make_Integer_Literal (Loc, UB))),
+                  Component_Definition =>
+                    Make_Component_Definition (Loc,
+                      Aliased_Present    => False,
+                      Subtype_Indication => New_Occurrence_Of (Ctyp, Loc))),
+              Expression          => Make_Aggregate (Loc, Expressions => V,
+                                       Is_Enum_Array_Aggregate => True)));
+       end Append_Table_To;
+ 
+    --  Start of Build_Enumeration_Image_Tables
+ 
     begin
        --  Nothing to do for types other than a root enumeration type
  
*************** package body Exp_Imgv is
*** 99,108 ****
        Lit := First_Literal (E);
        Len := 1;
        Nlit := 0;
  
        loop
!          Append_To (Ind,
!            Make_Integer_Literal (Loc, UI_From_Int (Len)));
  
           exit when No (Lit);
           Nlit := Nlit + 1;
--- 184,193 ----
        Lit := First_Literal (E);
        Len := 1;
        Nlit := 0;
+       H_OK := False;
  
        loop
!          Append_To (Ind, Make_Integer_Literal (Loc, UI_From_Int (Len)));
  
           exit when No (Lit);
           Nlit := Nlit + 1;
*************** package body Exp_Imgv is
*** 114,119 ****
--- 199,207 ----
           end if;
  
           Store_String_Chars (Name_Buffer (1 .. Name_Len));
+          if In_Main_Unit then
+             SPHG.Insert (Name_Buffer (1 .. Name_Len));
+          end if;
           Len := Len + Int (Name_Len);
           Next_Literal (Lit);
        end loop;
*************** package body Exp_Imgv is
*** 148,154 ****
  
        --  Generate literal table
  
!       Insert_Actions (N,
          New_List (
            Make_Object_Declaration (Loc,
              Defining_Identifier => Estr,
--- 236,242 ----
  
        --  Generate literal table
  
!       Act :=
          New_List (
            Make_Object_Declaration (Loc,
              Defining_Identifier => Estr,
*************** package body Exp_Imgv is
*** 157,183 ****
                New_Occurrence_Of (Standard_String, Loc),
              Expression          =>
                Make_String_Literal (Loc,
!                 Strval => Str)),
  
!           Make_Object_Declaration (Loc,
!             Defining_Identifier => Eind,
!             Constant_Present    => True,
  
!             Object_Definition =>
!               Make_Constrained_Array_Definition (Loc,
!                 Discrete_Subtype_Definitions => New_List (
!                   Make_Range (Loc,
!                     Low_Bound  => Make_Integer_Literal (Loc, 0),
!                     High_Bound => Make_Integer_Literal (Loc, Nlit))),
!                 Component_Definition =>
!                   Make_Component_Definition (Loc,
!                     Aliased_Present    => False,
!                     Subtype_Indication => New_Occurrence_Of (Ityp, Loc))),
  
!             Expression          =>
!               Make_Aggregate (Loc,
!                 Expressions => Ind))),
!         Suppress => All_Checks);
  
        --  Reset the scalar storage order to the saved value
  
--- 245,677 ----
                New_Occurrence_Of (Standard_String, Loc),
              Expression          =>
                Make_String_Literal (Loc,
!                 Strval => Str)));
  
!       --  Generate index table
  
!       Append_Table_To (Act, Eind, Nlit, Ityp, Ind);
  
!       --  If the number of literals is not greater than Threshold, then we are
!       --  done. Otherwise we generate a (perfect) hash function for use by the
!       --  Value attribute.
! 
!       if Nlit > Threshold then
!          --  We start to count serial numbers from here
! 
!          S_N := Increment_Serial_Number;
! 
!          --  Generate specification of hash function
! 
!          H_Id :=
!            Make_Defining_Identifier (Loc,
!              Chars => New_External_Name (Chars (E), 'H'));
!          Mutate_Ekind    (H_Id, E_Function);
!          Set_Is_Internal (H_Id);
! 
!          if not Debug_Generated_Code then
!             Set_Debug_Info_Off (H_Id);
!          end if;
! 
!          Set_Lit_Hash (E, H_Id);
! 
!          S_Id := Make_Temporary (Loc, 'S');
! 
!          H_Sp := Make_Function_Specification (Loc,
!            Defining_Unit_Name       => H_Id,
!            Parameter_Specifications => New_List (
!              Make_Parameter_Specification (Loc,
!                Defining_Identifier => S_Id,
!                Parameter_Type      =>
!                  New_Occurrence_Of (Standard_String, Loc))),
!            Result_Definition       =>
!              New_Occurrence_Of (Standard_Natural, Loc));
! 
!          --  If the unit where the type is declared is the main unit, and the
!          --  number of literals is greater than Threshold_For_Size when we are
!          --  optimizing for size, and the restriction No_Implicit_Loops is not
!          --  active, and -gnatd_h is not specified, generate the hash function.
! 
!          if In_Main_Unit
!            and then (Optimize_Size = 0 or else Nlit > Threshold_For_Size)
!            and then not Restriction_Active (No_Implicit_Loops)
!            and then not Debug_Flag_Underscore_H
!          then
!             declare
!                LB : constant Positive := 2 * Positive (Nlit) + 1;
!                UB : constant Positive := LB + 24;
! 
!             begin
!                --  Try at most 25 * 4 times to compute the hash function before
!                --  giving up and using a linear search for the Value attribute.
! 
!                for V in LB .. UB loop
!                   begin
!                      SPHG.Initialize (4321, V, SPHG.Memory_Space, Tries => 4);
!                      SPHG.Compute ("");
!                      H_OK := True;
!                      exit;
!                   exception
!                      when SPHG.Too_Many_Tries => null;
!                   end;
!                end loop;
!             end;
!          end if;
! 
!          --  If the hash function has been successfully computed, 4 more tables
!          --  named P, T1, T2 and G are needed. The hash function is of the form
! 
!          --     function Hash (S : String) return Natural is
!          --        xxxP  : constant array (0 .. X) of Natural    = [...];
!          --        xxxT1 : constant array (0 .. Y) of Index_Type = [...];
!          --        xxxT2 : constant array (0 .. Y) of Index_Type = [...];
!          --        xxxG  : constant array (0 .. Z) of Index_Type = [...];
! 
!          --        F    : constant Natural := S'First - 1;
!          --        L    : constant Natural := S'Length;
!          --        A, B : Natural := 0;
!          --        J    : Natural;
! 
!          --     begin
!          --        for K in P'Range loop
!          --           exit when L < P (K);
!          --           J := Character'Pos (S (P (K) + F));
!          --           A := (A + Natural (T1 (K) * J)) mod N;
!          --           B := (B + Natural (T2 (K) * J)) mod N;
!          --        end loop;
! 
!          --        return (Natural (G (A)) + Natural (G (B))) mod M;
!          --     end Hash;
! 
!          --  where N is the length of G and M the number of literals. Note that
!          --  we declare the tables inside the function for two reasons: first,
!          --  their analysis creates array subtypes and thus their concatenation
!          --  operators which are homonyms of the concatenation operator and may
!          --  change the homonym number of user operators declared in the scope;
!          --  second, the code generator can fold the values in the tables when
!          --  they are small and avoid emitting them in the final object code.
! 
!          if H_OK then
!             declare
!                Siz, L1, L2 : Natural;
!                I           : Int;
! 
!                Pos,  T1,  T2,  G  : List_Id;
!                EPos, ET1, ET2, EG : Entity_Id;
! 
!                F, L, A, B, J, K : Entity_Id;
!                Body_Decls       : List_Id;
!                Body_Stmts       : List_Id;
!                Loop_Stmts       : List_Id;
! 
!             begin
!                Body_Decls := New_List;
! 
!                --  Generate position table
! 
!                SPHG.Define (SPHG.Character_Position, Siz, L1, L2);
!                Pos := New_List;
!                for J in 0 .. L1 - 1 loop
!                   I := Int (SPHG.Value (SPHG.Character_Position, J));
!                   Append_To (Pos, Make_Integer_Literal (Loc, UI_From_Int (I)));
!                end loop;
! 
!                EPos :=
!                  Make_Defining_Identifier (Loc,
!                    Chars => New_External_Name (Chars (E), 'P'));
! 
!                Append_Table_To
!                  (Body_Decls, EPos, Nat (L1 - 1), Standard_Natural, Pos);
! 
!                --  Generate function table 1
! 
!                SPHG.Define (SPHG.Function_Table_1, Siz, L1, L2);
!                T1 := New_List;
!                for J in 0 .. L1 - 1 loop
!                   I := Int (SPHG.Value (SPHG.Function_Table_1, J));
!                   Append_To (T1, Make_Integer_Literal (Loc, UI_From_Int (I)));
!                end loop;
! 
!                ET1 :=
!                  Make_Defining_Identifier (Loc,
!                    Chars => New_External_Name (Chars (E), "T1"));
! 
!                Ityp :=
!                  Small_Integer_Type_For (UI_From_Int (Int (Siz)), Uns => True);
!                Append_Table_To (Body_Decls, ET1, Nat (L1 - 1), Ityp, T1);
! 
!                --  Generate function table 2
! 
!                SPHG.Define (SPHG.Function_Table_2, Siz, L1, L2);
!                T2 := New_List;
!                for J in 0 .. L1 - 1 loop
!                   I := Int (SPHG.Value (SPHG.Function_Table_2, J));
!                   Append_To (T2, Make_Integer_Literal (Loc, UI_From_Int (I)));
!                end loop;
! 
!                ET2 :=
!                  Make_Defining_Identifier (Loc,
!                    Chars => New_External_Name (Chars (E), "T2"));
! 
!                Ityp :=
!                  Small_Integer_Type_For (UI_From_Int (Int (Siz)), Uns => True);
!                Append_Table_To (Body_Decls, ET2, Nat (L1 - 1), Ityp, T2);
! 
!                --  Generate graph table
! 
!                SPHG.Define (SPHG.Graph_Table, Siz, L1, L2);
!                G := New_List;
!                for J in 0 .. L1 - 1 loop
!                   I := Int (SPHG.Value (SPHG.Graph_Table, J));
!                   Append_To (G, Make_Integer_Literal (Loc, UI_From_Int (I)));
!                end loop;
! 
!                EG :=
!                  Make_Defining_Identifier (Loc,
!                    Chars => New_External_Name (Chars (E), 'G'));
! 
!                Ityp :=
!                  Small_Integer_Type_For (UI_From_Int (Int (Siz)), Uns => True);
!                Append_Table_To (Body_Decls, EG, Nat (L1 - 1), Ityp, G);
! 
!                F := Make_Temporary (Loc, 'F');
! 
!                Append_To (Body_Decls,
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => F,
!                    Object_Definition   =>
!                      New_Occurrence_Of (Standard_Natural, Loc),
!                    Expression          =>
!                      Make_Op_Subtract (Loc,
!                        Left_Opnd  =>
!                          Make_Attribute_Reference (Loc,
!                            Prefix => New_Occurrence_Of (S_Id, Loc),
!                            Attribute_Name => Name_First),
!                        Right_Opnd =>
!                          Make_Integer_Literal (Loc, 1))));
! 
!                L := Make_Temporary (Loc, 'L');
! 
!                Append_To (Body_Decls,
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => L,
!                    Object_Definition   =>
!                      New_Occurrence_Of (Standard_Natural, Loc),
!                    Expression          =>
!                      Make_Attribute_Reference (Loc,
!                        Prefix         => New_Occurrence_Of (S_Id, Loc),
!                        Attribute_Name => Name_Length)));
! 
!                A := Make_Temporary (Loc, 'A');
! 
!                Append_To (Body_Decls,
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => A,
!                    Object_Definition   =>
!                      New_Occurrence_Of (Standard_Natural, Loc),
!                    Expression          => Make_Integer_Literal (Loc, 0)));
! 
!                B := Make_Temporary (Loc, 'B');
! 
!                Append_To (Body_Decls,
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => B,
!                    Object_Definition   =>
!                      New_Occurrence_Of (Standard_Natural, Loc),
!                    Expression          => Make_Integer_Literal (Loc, 0)));
! 
!                J := Make_Temporary (Loc, 'J');
! 
!                Append_To (Body_Decls,
!                  Make_Object_Declaration (Loc,
!                    Defining_Identifier => J,
!                    Object_Definition   =>
!                      New_Occurrence_Of (Standard_Natural, Loc)));
! 
!                K := Make_Temporary (Loc, 'K');
! 
!                --  Generate exit when L < P (K);
! 
!                Loop_Stmts := New_List (
!                  Make_Exit_Statement (Loc,
!                    Condition =>
!                      Make_Op_Lt (Loc,
!                        Left_Opnd  => New_Occurrence_Of (L, Loc),
!                        Right_Opnd =>
!                          Make_Indexed_Component (Loc,
!                            Prefix      => New_Occurrence_Of (EPos, Loc),
!                            Expressions => New_List (
!                              New_Occurrence_Of (K, Loc))))));
! 
!                --  Generate J := Character'Pos (S (P (K) + F));
! 
!                Append_To (Loop_Stmts,
!                  Make_Assignment_Statement (Loc,
!                    Name       => New_Occurrence_Of (J, Loc),
!                    Expression =>
!                      Make_Attribute_Reference (Loc,
!                        Prefix         =>
!                          New_Occurrence_Of (Standard_Character, Loc),
!                        Attribute_Name => Name_Pos,
!                        Expressions    => New_List (
!                          Make_Indexed_Component (Loc,
!                            Prefix      => New_Occurrence_Of (S_Id, Loc),
!                            Expressions => New_List (
!                               Make_Op_Add (Loc,
!                                 Left_Opnd  =>
!                                   Make_Indexed_Component (Loc,
!                                     Prefix      =>
!                                       New_Occurrence_Of (EPos, Loc),
!                                   Expressions => New_List (
!                                     New_Occurrence_Of (K, Loc))),
!                                 Right_Opnd =>
!                                   New_Occurrence_Of (F, Loc))))))));
! 
!                --  Generate A := (A + Natural (T1 (K) * J)) mod N;
! 
!                Append_To (Loop_Stmts,
!                  Make_Assignment_Statement (Loc,
!                    Name       => New_Occurrence_Of (A, Loc),
!                    Expression =>
!                      Make_Op_Mod (Loc,
!                        Left_Opnd  =>
!                           Make_Op_Add (Loc,
!                             Left_Opnd  => New_Occurrence_Of (A, Loc),
!                             Right_Opnd =>
!                               Make_Op_Multiply (Loc,
!                                 Left_Opnd  =>
!                                   Convert_To (Standard_Natural,
!                                      Make_Indexed_Component (Loc,
!                                        Prefix      =>
!                                          New_Occurrence_Of (ET1, Loc),
!                                        Expressions => New_List (
!                                          New_Occurrence_Of (K, Loc)))),
!                                 Right_Opnd => New_Occurrence_Of (J, Loc))),
!                        Right_Opnd => Make_Integer_Literal (Loc, Int (L1)))));
! 
!                --  Generate B := (B + Natural (T2 (K) * J)) mod N;
! 
!                Append_To (Loop_Stmts,
!                  Make_Assignment_Statement (Loc,
!                    Name       => New_Occurrence_Of (B, Loc),
!                    Expression =>
!                      Make_Op_Mod (Loc,
!                        Left_Opnd  =>
!                           Make_Op_Add (Loc,
!                             Left_Opnd  => New_Occurrence_Of (B, Loc),
!                             Right_Opnd =>
!                               Make_Op_Multiply (Loc,
!                                 Left_Opnd  =>
!                                   Convert_To (Standard_Natural,
!                                      Make_Indexed_Component (Loc,
!                                        Prefix      =>
!                                          New_Occurrence_Of (ET2, Loc),
!                                        Expressions => New_List (
!                                          New_Occurrence_Of (K, Loc)))),
!                                 Right_Opnd => New_Occurrence_Of (J, Loc))),
!                        Right_Opnd => Make_Integer_Literal (Loc, Int (L1)))));
! 
!             --  Generate loop
! 
!                Body_Stmts := New_List (
!                  Make_Implicit_Loop_Statement (N,
!                    Iteration_Scheme =>
!                      Make_Iteration_Scheme (Loc,
!                        Loop_Parameter_Specification =>
!                          Make_Loop_Parameter_Specification (Loc,
!                            Defining_Identifier         => K,
!                            Discrete_Subtype_Definition =>
!                              Make_Attribute_Reference (Loc,
!                                Prefix         =>
!                                  New_Occurrence_Of (EPos, Loc),
!                                Attribute_Name => Name_Range))),
!                    Statements       => Loop_Stmts));
! 
!                --  Generate return (Natural (G (A)) + Natural (G (B))) mod M;
! 
!                Append_To (Body_Stmts,
!                  Make_Simple_Return_Statement (Loc,
!                    Expression =>
!                      Make_Op_Mod (Loc,
!                        Left_Opnd  =>
!                          Make_Op_Add (Loc,
!                            Left_Opnd  =>
!                              Convert_To (Standard_Natural,
!                                Make_Indexed_Component (Loc,
!                                  Prefix      =>
!                                    New_Occurrence_Of (EG, Loc),
!                                  Expressions => New_List (
!                                    New_Occurrence_Of (A, Loc)))),
!                            Right_Opnd =>
!                              Convert_To (Standard_Natural,
!                                Make_Indexed_Component (Loc,
!                                  Prefix      =>
!                                    New_Occurrence_Of (EG, Loc),
!                                  Expressions => New_List (
!                                    New_Occurrence_Of (B, Loc))))),
!                        Right_Opnd => Make_Integer_Literal (Loc, Nlit))));
! 
!                --  Generate final body
! 
!                Append_To (Act,
!                  Make_Subprogram_Body (Loc,
!                    Specification => H_Sp,
!                    Declarations => Body_Decls,
!                    Handled_Statement_Sequence =>
!                      Make_Handled_Sequence_Of_Statements (Loc, Body_Stmts)));
!             end;
! 
!          --  If we chose not to or did not manage to compute the hash function,
!          --  we need to build a dummy function always returning Natural'Last
!          --  because other units reference it if they use the Value attribute.
! 
!          elsif In_Main_Unit then
!             declare
!                Body_Stmts : List_Id;
! 
!             begin
!                --  Generate return Natural'Last
! 
!                Body_Stmts := New_List (
!                  Make_Simple_Return_Statement (Loc,
!                    Expression =>
!                      Make_Attribute_Reference (Loc,
!                        Prefix         =>
!                          New_Occurrence_Of (Standard_Natural, Loc),
!                        Attribute_Name => Name_Last)));
! 
!                --  Generate body
! 
!                Append_To (Act,
!                  Make_Subprogram_Body (Loc,
!                    Specification => H_Sp,
!                    Declarations => Empty_List,
!                    Handled_Statement_Sequence =>
!                      Make_Handled_Sequence_Of_Statements (Loc, Body_Stmts)));
!             end;
! 
!          --  For the other units, just declare the function
! 
!          else
!             Append_To (Act,
!               Make_Subprogram_Declaration (Loc, Specification => H_Sp));
!          end if;
! 
!       else
!          Set_Lit_Hash (E, Empty);
!       end if;
! 
!       if In_Main_Unit then
!          System.Perfect_Hash_Generators.Finalize;
!       end if;
! 
!       Insert_Actions (N, Act, Suppress => All_Checks);
! 
!       --  This is where we check that our budget of serial numbers has been
!       --  entirely spent, see the declaration of Serial_Number_Budget above.
! 
!       if Nlit > Threshold then
!          Synchronize_Serial_Number (S_N + Serial_Number_Budget);
!       end if;
  
        --  Reset the scalar storage order to the saved value
  
*************** package body Exp_Imgv is
*** 233,239 ****
  
     --    For floating-point types
     --      xx = Floating_Point
!    --      tv = Long_Long_Float (Expr)
     --      pm = typ'Digits (typ = subtype of expression)
  
     --    For decimal fixed-point types
--- 727,733 ----
  
     --    For floating-point types
     --      xx = Floating_Point
!    --      tv = [Long_[Long_]]Float (Expr)
     --      pm = typ'Digits (typ = subtype of expression)
  
     --    For decimal fixed-point types
*************** package body Exp_Imgv is
*** 250,257 ****
     --           typ'Aft
  
     --    For other ordinary fixed-point types
!    --      xx = Ordinary_Fixed_Point
!    --      tv = Long_Long_Float (Expr)
     --      pm = typ'Aft (typ = subtype of expression)
  
     --  For enumeration types other than those declared in package Standard
--- 744,751 ----
     --           typ'Aft
  
     --    For other ordinary fixed-point types
!    --      xx = Fixed
!    --      tv = Long_Float (Expr)
     --      pm = typ'Aft (typ = subtype of expression)
  
     --  For enumeration types other than those declared in package Standard
*************** package body Exp_Imgv is
*** 277,302 ****
        Expr  : constant Node_Id    := Relocate_Node (First (Exprs));
        Pref  : constant Node_Id    := Prefix (N);
  
!       procedure Expand_User_Defined_Enumeration_Image;
        --  Expand attribute 'Image in user-defined enumeration types, avoiding
        --  string copy.
  
!       function Is_User_Defined_Enumeration_Type
!         (Typ : Entity_Id) return Boolean;
!       --  Return True if Typ is a user-defined enumeration type
  
        -------------------------------------------
        -- Expand_User_Defined_Enumeration_Image --
        -------------------------------------------
  
!       procedure Expand_User_Defined_Enumeration_Image is
           Ins_List : constant List_Id   := New_List;
           P1_Id    : constant Entity_Id := Make_Temporary (Loc, 'P');
           P2_Id    : constant Entity_Id := Make_Temporary (Loc, 'P');
           P3_Id    : constant Entity_Id := Make_Temporary (Loc, 'P');
           P4_Id    : constant Entity_Id := Make_Temporary (Loc, 'P');
-          Ptyp     : constant Entity_Id := Entity (Pref);
-          Rtyp     : constant Entity_Id := Root_Type (Ptyp);
           S1_Id    : constant Entity_Id := Make_Temporary (Loc, 'S');
  
        begin
--- 771,894 ----
        Expr  : constant Node_Id    := Relocate_Node (First (Exprs));
        Pref  : constant Node_Id    := Prefix (N);
  
!       procedure Expand_Standard_Boolean_Image;
!       --  Expand attribute 'Image in Standard.Boolean, avoiding string copy
! 
!       procedure Expand_User_Defined_Enumeration_Image (Typ : Entity_Id);
        --  Expand attribute 'Image in user-defined enumeration types, avoiding
        --  string copy.
  
!       -----------------------------------
!       -- Expand_Standard_Boolean_Image --
!       -----------------------------------
! 
!       procedure Expand_Standard_Boolean_Image is
!          Ins_List : constant List_Id   := New_List;
!          S1_Id    : constant Entity_Id := Make_Temporary (Loc, 'S');
!          T_Id     : constant Entity_Id := Make_Temporary (Loc, 'T');
!          F_Id     : constant Entity_Id := Make_Temporary (Loc, 'F');
!          V_Id     : constant Entity_Id := Make_Temporary (Loc, 'V');
! 
!       begin
!          --  We use a single 5-character string subtype throughout so that the
!          --  subtype of the string if-expression is constrained and, therefore,
!          --  does not force the creation of a temporary during analysis.
! 
!          --  Generate:
!          --    subtype S1 is String (1 .. 5);
! 
!          Append_To (Ins_List,
!            Make_Subtype_Declaration (Loc,
!              Defining_Identifier => S1_Id,
!              Subtype_Indication  =>
!                Make_Subtype_Indication (Loc,
!                  Subtype_Mark =>
!                    New_Occurrence_Of (Standard_String, Loc),
!                  Constraint   =>
!                    Make_Index_Or_Discriminant_Constraint (Loc,
!                      Constraints => New_List (
!                        Make_Range (Loc,
!                          Low_Bound  => Make_Integer_Literal (Loc, 1),
!                          High_Bound => Make_Integer_Literal (Loc, 5)))))));
! 
!          --  Generate:
!          --    T : constant String (1 .. 5) := "TRUE ";
! 
!          Start_String;
!          Store_String_Chars ("TRUE ");
! 
!          Append_To (Ins_List,
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => T_Id,
!              Object_Definition   =>
!                New_Occurrence_Of (S1_Id, Loc),
!              Constant_Present    => True,
!              Expression          => Make_String_Literal (Loc, End_String)));
! 
!          --  Generate:
!          --    F : constant String (1 .. 5) := "FALSE";
! 
!          Start_String;
!          Store_String_Chars ("FALSE");
! 
!          Append_To (Ins_List,
!            Make_Object_Declaration (Loc,
!              Defining_Identifier => F_Id,
!              Object_Definition   =>
!                New_Occurrence_Of (S1_Id, Loc),
!              Constant_Present    => True,
!              Expression          => Make_String_Literal (Loc, End_String)));
! 
!          --  Generate:
!          --    V : String (1 .. 5) renames (if Expr then T else F);
! 
!          Append_To (Ins_List,
!            Make_Object_Renaming_Declaration (Loc,
!              Defining_Identifier => V_Id,
!              Subtype_Mark        =>
!                New_Occurrence_Of (S1_Id, Loc),
!              Name                =>
!                Make_If_Expression (Loc,
!                  Expressions => New_List (
!                    Duplicate_Subexpr (Expr),
!                    New_Occurrence_Of (T_Id, Loc),
!                    New_Occurrence_Of (F_Id, Loc)))));
! 
!          --  Insert all the above declarations before N. We suppress checks
!          --  because everything is in range at this stage.
! 
!          Insert_Actions (N, Ins_List, Suppress => All_Checks);
! 
!          --  Final step is to rewrite the expression as a slice:
!          --  V (1 .. (if Expr then 4 else 5)) and analyze, again with no
!          --  checks, since we are sure that everything is OK.
! 
!          Rewrite (N,
!            Make_Slice (Loc,
!               Prefix         => New_Occurrence_Of (V_Id, Loc),
!               Discrete_Range =>
!                 Make_Range (Loc,
!                   Low_Bound  => Make_Integer_Literal (Loc, 1),
!                   High_Bound =>
!                     Make_If_Expression (Loc,
!                       Expressions => New_List (
!                         Duplicate_Subexpr (Expr),
!                         Make_Integer_Literal (Loc, 4),
!                         Make_Integer_Literal (Loc, 5))))));
! 
!          Analyze_And_Resolve (N, Standard_String, Suppress => All_Checks);
!       end Expand_Standard_Boolean_Image;
  
        -------------------------------------------
        -- Expand_User_Defined_Enumeration_Image --
        -------------------------------------------
  
!       procedure Expand_User_Defined_Enumeration_Image (Typ : Entity_Id) is
           Ins_List : constant List_Id   := New_List;
           P1_Id    : constant Entity_Id := Make_Temporary (Loc, 'P');
           P2_Id    : constant Entity_Id := Make_Temporary (Loc, 'P');
           P3_Id    : constant Entity_Id := Make_Temporary (Loc, 'P');
           P4_Id    : constant Entity_Id := Make_Temporary (Loc, 'P');
           S1_Id    : constant Entity_Id := Make_Temporary (Loc, 'S');
  
        begin
*************** package body Exp_Imgv is
*** 308,314 ****
           end if;
  
           --  Generate:
!          --    P1 : constant Natural := Pos;
  
           Append_To (Ins_List,
             Make_Object_Declaration (Loc,
--- 900,906 ----
           end if;
  
           --  Generate:
!          --    P1 : constant Natural := Typ'Pos (Typ?(Expr));
  
           Append_To (Ins_List,
             Make_Object_Declaration (Loc,
*************** package body Exp_Imgv is
*** 320,327 ****
                 Convert_To (Standard_Natural,
                   Make_Attribute_Reference (Loc,
                     Attribute_Name => Name_Pos,
!                    Prefix         => New_Occurrence_Of (Ptyp, Loc),
!                    Expressions    => New_List (Expr)))));
  
           --  Compute the index of the string start, generating:
           --    P2 : constant Natural := call_put_enumN (P1);
--- 912,919 ----
                 Convert_To (Standard_Natural,
                   Make_Attribute_Reference (Loc,
                     Attribute_Name => Name_Pos,
!                    Prefix         => New_Occurrence_Of (Typ, Loc),
!                    Expressions    => New_List (OK_Convert_To (Typ, Expr))))));
  
           --  Compute the index of the string start, generating:
           --    P2 : constant Natural := call_put_enumN (P1);
*************** package body Exp_Imgv is
*** 336,342 ****
                 Convert_To (Standard_Natural,
                   Make_Indexed_Component (Loc,
                     Prefix      =>
!                      New_Occurrence_Of (Lit_Indexes (Rtyp), Loc),
                     Expressions =>
                       New_List (New_Occurrence_Of (P1_Id, Loc))))));
  
--- 928,934 ----
                 Convert_To (Standard_Natural,
                   Make_Indexed_Component (Loc,
                     Prefix      =>
!                      New_Occurrence_Of (Lit_Indexes (Typ), Loc),
                     Expressions =>
                       New_List (New_Occurrence_Of (P1_Id, Loc))))));
  
*************** package body Exp_Imgv is
*** 360,372 ****
                    Convert_To (Standard_Natural,
                      Make_Indexed_Component (Loc,
                        Prefix      =>
!                         New_Occurrence_Of (Lit_Indexes (Rtyp), Loc),
                        Expressions =>
                          New_List (Add_Node)))));
           end;
  
           --  Generate:
!          --    S4 : String renames call_put_enumS (S2 .. S3 - 1);
  
           declare
              Sub_Node : constant Node_Id := New_Op_Node (N_Op_Subtract, Loc);
--- 952,964 ----
                    Convert_To (Standard_Natural,
                      Make_Indexed_Component (Loc,
                        Prefix      =>
!                         New_Occurrence_Of (Lit_Indexes (Typ), Loc),
                        Expressions =>
                          New_List (Add_Node)))));
           end;
  
           --  Generate:
!          --    P4 : String renames call_put_enumS (P2 .. P3 - 1);
  
           declare
              Sub_Node : constant Node_Id := New_Op_Node (N_Op_Subtract, Loc);
*************** package body Exp_Imgv is
*** 383,389 ****
                  Name                =>
                    Make_Slice (Loc,
                      Prefix         =>
!                       New_Occurrence_Of (Lit_Strings (Rtyp), Loc),
                      Discrete_Range =>
                        Make_Range (Loc,
                          Low_Bound  => New_Occurrence_Of (P2_Id, Loc),
--- 975,981 ----
                  Name                =>
                    Make_Slice (Loc,
                      Prefix         =>
!                       New_Occurrence_Of (Lit_Strings (Typ), Loc),
                      Discrete_Range =>
                        Make_Range (Loc,
                          Low_Bound  => New_Occurrence_Of (P2_Id, Loc),
*************** package body Exp_Imgv is
*** 391,397 ****
           end;
  
           --  Generate:
!          --    subtype S1 is string (1 .. P3 - P2);
  
           declare
              HB : constant Node_Id := New_Op_Node (N_Op_Subtract, Loc);
--- 983,989 ----
           end;
  
           --  Generate:
!          --    subtype S1 is String (1 .. P3 - P2);
  
           declare
              HB : constant Node_Id := New_Op_Node (N_Op_Subtract, Loc);
*************** package body Exp_Imgv is
*** 426,445 ****
           Analyze_And_Resolve (N, Standard_String);
        end Expand_User_Defined_Enumeration_Image;
  
-       --------------------------------------
-       -- Is_User_Defined_Enumeration_Type --
-       --------------------------------------
- 
-       function Is_User_Defined_Enumeration_Type
-         (Typ : Entity_Id) return Boolean is
-       begin
-          return Ekind (Typ) = E_Enumeration_Type
-            and then Typ /= Standard_Boolean
-            and then Typ /= Standard_Character
-            and then Typ /= Standard_Wide_Character
-            and then Typ /= Standard_Wide_Wide_Character;
-       end Is_User_Defined_Enumeration_Type;
- 
        --  Local variables
  
        Enum_Case : Boolean;
--- 1018,1023 ----
*************** package body Exp_Imgv is
*** 467,542 ****
           return;
        end if;
  
!       Ptyp := Entity (Pref);
  
!       --  Ada 2020 allows 'Image on private types, so fetch the underlying
        --  type to obtain the structure of the type. We use the base type,
!       --  not the root type, to handle properly derived types, but we use
!       --  the root type for enumeration types, because the literal map is
!       --  attached to the root. Should be inherited ???
  
!       if Is_Enumeration_Type (Ptyp) then
           Rtyp := Underlying_Type (Root_Type (Ptyp));
        else
           Rtyp := Underlying_Type (Base_Type (Ptyp));
        end if;
  
-       --  Enable speed-optimized expansion of user-defined enumeration types
-       --  if we are compiling with optimizations enabled and enumeration type
-       --  literals are generated. Otherwise the call will be expanded into a
-       --  call to the runtime library.
- 
-       if Optimization_Level > 0
-         and then not Global_Discard_Names
-         and then Is_User_Defined_Enumeration_Type (Rtyp)
-       then
-          Expand_User_Defined_Enumeration_Image;
-          return;
-       end if;
- 
-       --  Build declarations of Snn and Pnn to be inserted
- 
-       Ins_List := New_List (
- 
-          --  Snn : String (1 .. typ'Width);
- 
-          Make_Object_Declaration (Loc,
-             Defining_Identifier => Snn,
-             Object_Definition   =>
-               Make_Subtype_Indication (Loc,
-                 Subtype_Mark => New_Occurrence_Of (Standard_String, Loc),
-                 Constraint   =>
-                   Make_Index_Or_Discriminant_Constraint (Loc,
-                     Constraints => New_List (
-                       Make_Range (Loc,
-                         Low_Bound  => Make_Integer_Literal (Loc, 1),
-                         High_Bound =>
-                           Make_Attribute_Reference (Loc,
-                             Prefix         => New_Occurrence_Of (Rtyp, Loc),
-                             Attribute_Name => Name_Width)))))),
- 
-          --  Pnn : Natural;
- 
-          Make_Object_Declaration (Loc,
-            Defining_Identifier => Pnn,
-            Object_Definition   => New_Occurrence_Of (Standard_Natural, Loc)));
- 
        --  Set Imid (RE_Id of procedure to call), and Tent, target for the
        --  type conversion of the first argument for all possibilities.
  
        Enum_Case := False;
  
!       --  If this is a case where Image should be transformed using Put_Image,
!       --  then do so. See Exp_Put_Image for details.
  
!       if Exp_Put_Image.Image_Should_Call_Put_Image (N) then
!          Rewrite (N, Exp_Put_Image.Build_Image_Call (N));
!          Analyze_And_Resolve (N, Standard_String, Suppress => All_Checks);
!          return;
  
!       elsif Rtyp = Standard_Boolean then
!          Imid := RE_Image_Boolean;
!          Tent := Rtyp;
  
        --  For standard character, we have to select the version which handles
        --  soft hyphen correctly, based on the version of Ada in use (this is
--- 1045,1090 ----
           return;
        end if;
  
!       --  If Image should be transformed using Put_Image, then do so. See
!       --  Exp_Put_Image for details.
  
!       if Exp_Put_Image.Image_Should_Call_Put_Image (N) then
!          Rewrite (N, Exp_Put_Image.Build_Image_Call (N));
!          Analyze_And_Resolve (N, Standard_String, Suppress => All_Checks);
!          return;
!       end if;
! 
!       Ptyp := Underlying_Type (Entity (Pref));
! 
!       --  Ada 2022 allows 'Image on private types, so fetch the underlying
        --  type to obtain the structure of the type. We use the base type,
!       --  not the root type for discrete types, to handle properly derived
!       --  types, but we use the root type for enumeration types, because the
!       --  literal map is attached to the root. Should be inherited ???
  
!       if Is_Real_Type (Ptyp) or else Is_Enumeration_Type (Ptyp) then
           Rtyp := Underlying_Type (Root_Type (Ptyp));
        else
           Rtyp := Underlying_Type (Base_Type (Ptyp));
        end if;
  
        --  Set Imid (RE_Id of procedure to call), and Tent, target for the
        --  type conversion of the first argument for all possibilities.
  
        Enum_Case := False;
  
!       if Rtyp = Standard_Boolean then
!          --  Use inline expansion if the -gnatd_x switch is not passed to the
!          --  compiler. Otherwise expand into a call to the runtime.
  
!          if not Debug_Flag_Underscore_X then
!             Expand_Standard_Boolean_Image;
!             return;
  
!          else
!             Imid := RE_Image_Boolean;
!             Tent := Rtyp;
!          end if;
  
        --  For standard character, we have to select the version which handles
        --  soft hyphen correctly, based on the version of Ada in use (this is
*************** package body Exp_Imgv is
*** 631,644 ****
                 Imid := RE_Image_Fixed128;
                 Tent := RTE (RE_Integer_128);
              else
!                Imid := RE_Image_Ordinary_Fixed_Point;
!                Tent := Standard_Long_Long_Float;
              end if;
           end;
  
        elsif Is_Floating_Point_Type (Rtyp) then
!          Imid := RE_Image_Floating_Point;
!          Tent := Standard_Long_Long_Float;
  
        --  Only other possibility is user-defined enumeration type
  
--- 1179,1204 ----
                 Imid := RE_Image_Fixed128;
                 Tent := RTE (RE_Integer_128);
              else
!                Imid := RE_Image_Fixed;
!                Tent := Standard_Long_Float;
              end if;
           end;
  
        elsif Is_Floating_Point_Type (Rtyp) then
!          --  Short_Float and Float are the same type for GNAT
! 
!          if Rtyp = Standard_Short_Float or else Rtyp = Standard_Float then
!             Imid := RE_Image_Float;
!             Tent := Standard_Float;
! 
!          elsif Rtyp = Standard_Long_Float then
!             Imid := RE_Image_Long_Float;
!             Tent := Standard_Long_Float;
! 
!          else
!             Imid := RE_Image_Long_Long_Float;
!             Tent := Standard_Long_Long_Float;
!          end if;
  
        --  Only other possibility is user-defined enumeration type
  
*************** package body Exp_Imgv is
*** 666,674 ****
              Analyze_And_Resolve (N, Standard_String);
              return;
  
!          else
!             --  Here for enumeration type case
  
              Ttyp := Component_Type (Etype (Lit_Indexes (Rtyp)));
  
              if Ttyp = Standard_Integer_8 then
--- 1226,1239 ----
              Analyze_And_Resolve (N, Standard_String);
              return;
  
!          --  Use inline expansion if the -gnatd_x switch is not passed to the
!          --  compiler. Otherwise expand into a call to the runtime.
  
+          elsif not Debug_Flag_Underscore_X then
+             Expand_User_Defined_Enumeration_Image (Rtyp);
+             return;
+ 
+          else
              Ttyp := Component_Type (Etype (Lit_Indexes (Rtyp)));
  
              if Ttyp = Standard_Integer_8 then
*************** package body Exp_Imgv is
*** 695,721 ****
        --  Build first argument for call
  
        if Enum_Case then
!          declare
!             T : Entity_Id;
!          begin
!             --  In Ada 2020 we need the underlying type here, because 'Image is
!             --  allowed on private types. We have already checked the version
!             --  when resolving the attribute.
! 
!             if Is_Private_Type (Ptyp) then
!                T := Rtyp;
!             else
!                T := Ptyp;
!             end if;
! 
!             Arg_List := New_List (
!               Make_Attribute_Reference (Loc,
!                 Attribute_Name => Name_Pos,
!                 Prefix         => New_Occurrence_Of (T, Loc),
!                 Expressions    => New_List (Expr)));
!          end;
  
!       --  AI12-0020: Ada 2020 allows 'Image for all types, including private
        --  types. If the full type is not a fixed-point type, then it is enough
        --  to set the Conversion_OK flag. However, that would not work for
        --  fixed-point types, because that flag changes the run-time semantics
--- 1260,1272 ----
        --  Build first argument for call
  
        if Enum_Case then
!          Arg_List := New_List (
!            Make_Attribute_Reference (Loc,
!              Attribute_Name => Name_Pos,
!              Prefix         => New_Occurrence_Of (Ptyp, Loc),
!              Expressions    => New_List (Expr)));
  
!       --  AI12-0020: Ada 2022 allows 'Image for all types, including private
        --  types. If the full type is not a fixed-point type, then it is enough
        --  to set the Conversion_OK flag. However, that would not work for
        --  fixed-point types, because that flag changes the run-time semantics
*************** package body Exp_Imgv is
*** 725,730 ****
--- 1276,1282 ----
        else
           declare
              Conv : Node_Id;
+ 
           begin
              if Is_Private_Type (Etype (Expr)) then
                 if Is_Fixed_Point_Type (Rtyp) then
*************** package body Exp_Imgv is
*** 740,745 ****
--- 1292,1324 ----
           end;
        end if;
  
+       --  Build declarations of Snn and Pnn to be inserted
+ 
+       Ins_List := New_List (
+ 
+          --  Snn : String (1 .. typ'Width);
+ 
+          Make_Object_Declaration (Loc,
+             Defining_Identifier => Snn,
+             Object_Definition   =>
+               Make_Subtype_Indication (Loc,
+                 Subtype_Mark => New_Occurrence_Of (Standard_String, Loc),
+                 Constraint   =>
+                   Make_Index_Or_Discriminant_Constraint (Loc,
+                     Constraints => New_List (
+                       Make_Range (Loc,
+                         Low_Bound  => Make_Integer_Literal (Loc, 1),
+                         High_Bound =>
+                           Make_Attribute_Reference (Loc,
+                             Prefix         => New_Occurrence_Of (Rtyp, Loc),
+                             Attribute_Name => Name_Width)))))),
+ 
+          --  Pnn : Natural;
+ 
+          Make_Object_Declaration (Loc,
+            Defining_Identifier => Pnn,
+            Object_Definition   => New_Occurrence_Of (Standard_Natural, Loc)));
+ 
        --  Append Snn, Pnn arguments
  
        Append_To (Arg_List, New_Occurrence_Of (Snn, Loc));
*************** package body Exp_Imgv is
*** 787,793 ****
        --  and also set to do literal conversion.
  
        elsif Is_Ordinary_Fixed_Point_Type (Rtyp) then
!          if Imid /= RE_Image_Ordinary_Fixed_Point then
              Set_Conversion_OK (First (Arg_List));
  
              Append_To (Arg_List,
--- 1366,1372 ----
        --  and also set to do literal conversion.
  
        elsif Is_Ordinary_Fixed_Point_Type (Rtyp) then
!          if Imid /= RE_Image_Fixed then
              Set_Conversion_OK (First (Arg_List));
  
              Append_To (Arg_List,
*************** package body Exp_Imgv is
*** 850,855 ****
--- 1429,1499 ----
        Analyze_And_Resolve (N, Standard_String, Suppress => All_Checks);
     end Expand_Image_Attribute;
  
+    ----------------------------------
+    -- Expand_Valid_Value_Attribute --
+    ----------------------------------
+ 
+    procedure Expand_Valid_Value_Attribute (N : Node_Id) is
+       Loc   : constant Source_Ptr := Sloc (N);
+       Btyp  : constant Entity_Id  := Base_Type (Entity (Prefix (N)));
+       Rtyp  : constant Entity_Id  := Root_Type (Btyp);
+       pragma Assert (Is_Enumeration_Type (Rtyp));
+ 
+       Args  : constant List_Id := Expressions (N);
+       Func  : RE_Id;
+       Ttyp  : Entity_Id;
+ 
+    begin
+       --  Generate:
+ 
+       --     Valid_Value_Enumeration_NN
+       --       (typS, typN'Address, typH'Unrestricted_Access, Num, X)
+ 
+       Ttyp := Component_Type (Etype (Lit_Indexes (Rtyp)));
+ 
+       if Ttyp = Standard_Integer_8 then
+          Func := RE_Valid_Value_Enumeration_8;
+       elsif Ttyp = Standard_Integer_16 then
+          Func := RE_Valid_Value_Enumeration_16;
+       else
+          Func := RE_Valid_Value_Enumeration_32;
+       end if;
+ 
+       Prepend_To (Args,
+         Make_Attribute_Reference (Loc,
+           Prefix => New_Occurrence_Of (Rtyp, Loc),
+           Attribute_Name => Name_Pos,
+           Expressions => New_List (
+             Make_Attribute_Reference (Loc,
+               Prefix => New_Occurrence_Of (Rtyp, Loc),
+               Attribute_Name => Name_Last))));
+ 
+       if Present (Lit_Hash (Rtyp)) then
+          Prepend_To (Args,
+            Make_Attribute_Reference (Loc,
+              Prefix => New_Occurrence_Of (Lit_Hash (Rtyp), Loc),
+              Attribute_Name => Name_Unrestricted_Access));
+       else
+          Prepend_To (Args, Make_Null (Loc));
+       end if;
+ 
+       Prepend_To (Args,
+         Make_Attribute_Reference (Loc,
+           Prefix => New_Occurrence_Of (Lit_Indexes (Rtyp), Loc),
+           Attribute_Name => Name_Address));
+ 
+       Prepend_To (Args,
+         New_Occurrence_Of (Lit_Strings (Rtyp), Loc));
+ 
+       Rewrite (N,
+         Make_Function_Call (Loc,
+           Name =>
+             New_Occurrence_Of (RTE (Func), Loc),
+           Parameter_Associations => Args));
+ 
+       Analyze_And_Resolve (N, Standard_Boolean);
+    end Expand_Valid_Value_Attribute;
+ 
     ----------------------------
     -- Expand_Value_Attribute --
     ----------------------------
*************** package body Exp_Imgv is
*** 886,897 ****
  
     --    btyp?(Value_Decimal{32,64,128} (X, typ'Scale));
  
!    --  For the most common ordinary fixed-point types
  
     --    btyp?(Value_Fixed{32,64,128} (X, numerator of S, denominator of S));
     --    where S = typ'Small
  
!    --  For Wide_[Wide_]Character types, typ'Value (X) expands into:
  
     --    btyp (Value_xx (X, EM))
  
--- 1530,1545 ----
  
     --    btyp?(Value_Decimal{32,64,128} (X, typ'Scale));
  
!    --  For the most common ordinary fixed-point types, it expands into
  
     --    btyp?(Value_Fixed{32,64,128} (X, numerator of S, denominator of S));
     --    where S = typ'Small
  
!    --  For other ordinary fixed-point types, it expands into
! 
!    --    btyp (Value_Long_Float (X))
! 
!    --  For Wide_[Wide_]Character types, typ'Value (X) expands into
  
     --    btyp (Value_xx (X, EM))
  
*************** package body Exp_Imgv is
*** 900,935 ****
     --  For enumeration types other than those derived from types Boolean,
     --  Character, Wide_[Wide_]Character in Standard, typ'Value (X) expands to:
  
!    --    Enum'Val (Value_Enumeration_NN (typS, typI'Address, Num, X))
  
!    --  where typS and typI and the Lit_Strings and Lit_Indexes entities
!    --  from T's root type entity, and Num is Enum'Pos (Enum'Last). The
!    --  Value_Enumeration_NN function will search the tables looking for
     --  X and return the position number in the table if found which is
     --  used to provide the result of 'Value (using Enum'Val). If the
     --  value is not found Constraint_Error is raised. The suffix _NN
!    --  depends on the element type of typI.
  
     procedure Expand_Value_Attribute (N : Node_Id) is
        Loc   : constant Source_Ptr := Sloc (N);
!       Typ   : constant Entity_Id  := Etype (N);
!       Btyp  : constant Entity_Id  := Base_Type (Typ);
!       Rtyp  : constant Entity_Id  := Root_Type (Typ);
!       Exprs : constant List_Id    := Expressions (N);
!       Vid   : RE_Id;
!       Args  : List_Id;
!       Func  : RE_Id;
        Ttyp  : Entity_Id;
  
     begin
!       Args := Exprs;
! 
!       if Rtyp = Standard_Character then
!          Vid := RE_Value_Character;
  
!       elsif Rtyp = Standard_Boolean then
           Vid := RE_Value_Boolean;
  
        elsif Rtyp = Standard_Wide_Character then
           Vid := RE_Value_Wide_Character;
  
--- 1548,1587 ----
     --  For enumeration types other than those derived from types Boolean,
     --  Character, Wide_[Wide_]Character in Standard, typ'Value (X) expands to:
  
!    --    Enum'Val
!    --      (Value_Enumeration_NN
!    --        (typS, typN'Address, typH'Unrestricted_Access, Num, X))
  
!    --  where typS, typN and typH are the Lit_Strings, Lit_Indexes and Lit_Hash
!    --  entities from T's root type entity, and Num is Enum'Pos (Enum'Last).
!    --  The Value_Enumeration_NN function will search the tables looking for
     --  X and return the position number in the table if found which is
     --  used to provide the result of 'Value (using Enum'Val). If the
     --  value is not found Constraint_Error is raised. The suffix _NN
!    --  depends on the element type of typN.
  
     procedure Expand_Value_Attribute (N : Node_Id) is
        Loc   : constant Source_Ptr := Sloc (N);
!       Btyp  : constant Entity_Id  := Etype (N);
!       pragma Assert (Is_Base_Type (Btyp));
!       pragma Assert (Btyp = Base_Type (Entity (Prefix (N))));
!       Rtyp  : constant Entity_Id  := Root_Type (Btyp);
! 
!       Args  : constant List_Id := Expressions (N);
        Ttyp  : Entity_Id;
+       Vid   : RE_Id;
  
     begin
!       --  Fall through for all cases except user-defined enumeration type
!       --  and decimal types, with Vid set to the Id of the entity for the
!       --  Value routine and Args set to the list of parameters for the call.
  
!       if Rtyp = Standard_Boolean then
           Vid := RE_Value_Boolean;
  
+       elsif Rtyp = Standard_Character then
+          Vid := RE_Value_Character;
+ 
        elsif Rtyp = Standard_Wide_Character then
           Vid := RE_Value_Wide_Character;
  
*************** package body Exp_Imgv is
*** 1036,1056 ****
           if Rtyp = Standard_Short_Float or else Rtyp = Standard_Float then
              Vid := RE_Value_Float;
  
!          --  If Long_Float and Long_Long_Float are the same type, then use the
!          --  implementation of the former, which is faster and more accurate.
! 
!          elsif Rtyp = Standard_Long_Float
!            or else (Rtyp = Standard_Long_Long_Float
!                      and then
!                     Standard_Long_Long_Float_Size = Standard_Long_Float_Size)
!          then
              Vid := RE_Value_Long_Float;
  
-          elsif Rtyp = Standard_Long_Long_Float then
-             Vid := RE_Value_Long_Long_Float;
- 
           else
!             raise Program_Error;
           end if;
  
        --  Only other possibility is user-defined enumeration type
--- 1688,1698 ----
           if Rtyp = Standard_Short_Float or else Rtyp = Standard_Float then
              Vid := RE_Value_Float;
  
!          elsif Rtyp = Standard_Long_Float then
              Vid := RE_Value_Long_Float;
  
           else
!             Vid := RE_Value_Long_Long_Float;
           end if;
  
        --  Only other possibility is user-defined enumeration type
*************** package body Exp_Imgv is
*** 1061,1067 ****
           --  Case of pragma Discard_Names, transform the Value
           --  attribute to Btyp'Val (Long_Long_Integer'Value (Args))
  
!          if Discard_Names (First_Subtype (Typ))
             or else No (Lit_Strings (Rtyp))
           then
              Rewrite (N,
--- 1703,1709 ----
           --  Case of pragma Discard_Names, transform the Value
           --  attribute to Btyp'Val (Long_Long_Integer'Value (Args))
  
!          if Discard_Names (First_Subtype (Btyp))
             or else No (Lit_Strings (Rtyp))
           then
              Rewrite (N,
*************** package body Exp_Imgv is
*** 1077,1096 ****
  
              Analyze_And_Resolve (N, Btyp);
  
!          --  Here for normal case where we have enumeration tables, this
!          --  is where we build
  
!          --    T'Val (Value_Enumeration_NN (typS, typI'Address, Num, X))
  
           else
              Ttyp := Component_Type (Etype (Lit_Indexes (Rtyp)));
  
              if Ttyp = Standard_Integer_8 then
!                Func := RE_Value_Enumeration_8;
              elsif Ttyp = Standard_Integer_16 then
!                Func := RE_Value_Enumeration_16;
              else
!                Func := RE_Value_Enumeration_32;
              end if;
  
              Prepend_To (Args,
--- 1719,1739 ----
  
              Analyze_And_Resolve (N, Btyp);
  
!          --  Normal case where we have enumeration tables, build
  
!          --   T'Val
!          --     (Value_Enumeration_NN
!          --       (typS, typN'Address, typH'Unrestricted_Access, Num, X))
  
           else
              Ttyp := Component_Type (Etype (Lit_Indexes (Rtyp)));
  
              if Ttyp = Standard_Integer_8 then
!                Vid := RE_Value_Enumeration_8;
              elsif Ttyp = Standard_Integer_16 then
!                Vid := RE_Value_Enumeration_16;
              else
!                Vid := RE_Value_Enumeration_32;
              end if;
  
              Prepend_To (Args,
*************** package body Exp_Imgv is
*** 1102,1107 ****
--- 1745,1759 ----
                      Prefix => New_Occurrence_Of (Rtyp, Loc),
                      Attribute_Name => Name_Last))));
  
+             if Present (Lit_Hash (Rtyp)) then
+                Prepend_To (Args,
+                  Make_Attribute_Reference (Loc,
+                    Prefix => New_Occurrence_Of (Lit_Hash (Rtyp), Loc),
+                    Attribute_Name => Name_Unrestricted_Access));
+             else
+                Prepend_To (Args, Make_Null (Loc));
+             end if;
+ 
              Prepend_To (Args,
                Make_Attribute_Reference (Loc,
                  Prefix => New_Occurrence_Of (Lit_Indexes (Rtyp), Loc),
*************** package body Exp_Imgv is
*** 1112,1123 ****
  
              Rewrite (N,
                Make_Attribute_Reference (Loc,
!                 Prefix => New_Occurrence_Of (Typ, Loc),
                  Attribute_Name => Name_Val,
                  Expressions => New_List (
                    Make_Function_Call (Loc,
                      Name =>
!                       New_Occurrence_Of (RTE (Func), Loc),
                      Parameter_Associations => Args))));
  
              Analyze_And_Resolve (N, Btyp);
--- 1764,1775 ----
  
              Rewrite (N,
                Make_Attribute_Reference (Loc,
!                 Prefix => New_Occurrence_Of (Btyp, Loc),
                  Attribute_Name => Name_Val,
                  Expressions => New_List (
                    Make_Function_Call (Loc,
                      Name =>
!                       New_Occurrence_Of (RTE (Vid), Loc),
                      Parameter_Associations => Args))));
  
              Analyze_And_Resolve (N, Btyp);
*************** package body Exp_Imgv is
*** 1126,1146 ****
           return;
        end if;
  
-       --  Fall through for all cases except user-defined enumeration type
-       --  and decimal types, with Vid set to the Id of the entity for the
-       --  Value routine and Args set to the list of parameters for the call.
- 
        --  Compiling package Ada.Tags under No_Run_Time_Mode we disable the
        --  expansion of the attribute into the function call statement to avoid
        --  generating spurious errors caused by the use of Integer_Address'Value
!       --  in our implementation of Ada.Tags.Internal_Tag
! 
!       --  Seems like a bit of a odd approach, there should be a better way ???
! 
!       --  There is a better way, test RTE_Available ???
  
        if No_Run_Time_Mode
!         and then Rtyp = RTE (RE_Integer_Address)
          and then RTU_Loaded (Ada_Tags)
          and then Cunit_Entity (Current_Sem_Unit)
                     = Body_Entity (RTU_Entity (Ada_Tags))
--- 1778,1790 ----
           return;
        end if;
  
        --  Compiling package Ada.Tags under No_Run_Time_Mode we disable the
        --  expansion of the attribute into the function call statement to avoid
        --  generating spurious errors caused by the use of Integer_Address'Value
!       --  in our implementation of Ada.Tags.Internal_Tag.
  
        if No_Run_Time_Mode
!         and then Is_RTE (Rtyp, RE_Integer_Address)
          and then RTU_Loaded (Ada_Tags)
          and then Cunit_Entity (Current_Sem_Unit)
                     = Body_Entity (RTU_Entity (Ada_Tags))
*************** package body Exp_Imgv is
*** 1148,1153 ****
--- 1792,1798 ----
           Rewrite (N,
             Unchecked_Convert_To (Rtyp,
               Make_Integer_Literal (Loc, Uint_0)));
+ 
        else
           Rewrite (N,
             Convert_To (Btyp,
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_imgv.ads gcc-12.1.0/gcc/ada/exp_imgv.ads
*** gcc-11.3.0/gcc/ada/exp_imgv.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_imgv.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
*************** package Exp_Imgv is
*** 35,73 ****
     --  base type. The node N is the point in the tree where the resulting
     --  declarations are to be inserted.
     --
!    --    The form of the tables generated is as follows:
     --
!    --      xxxS : string := "chars";
!    --      xxxI : array (0 .. N) of Natural_8/16/32 := (1, n, .., n);
     --
!    --    Here xxxS is a string obtained by concatenating all the names
!    --    of the enumeration literals in sequence, representing any wide
!    --    characters according to the current wide character encoding
!    --    method, and with all letters forced to upper case.
     --
!    --    The array xxxI is an array of ones origin indexes to the start
!    --    of each name, with one extra entry at the end, which is the index
!    --    to the character just past the end of the last literal, i.e. it is
!    --    the length of xxxS + 1. The element type is the shortest of the
!    --    possible types that will hold all the values.
     --
!    --      For example, for the type
     --
!    --         type x is (hello,'!',goodbye);
     --
!    --      the generated tables would consist of
     --
!    --          xxxS : String := "hello'!'goodbye";
!    --          xxxI : array (0 .. 3) of Natural_8 := (1, 6, 9, 16);
     --
!    --      Here Natural_8 is used since 16 < 2**(8-1)
     --
!    --    If the entity E needs the tables constructing, the necessary
!    --    declarations are constructed, and the fields Lit_Strings and
!    --    Lit_Indexes of E are set to point to the corresponding entities.
!    --    If no tables are needed (E is not a user defined enumeration
!    --    root type, or pragma Discard_Names is in effect, then the
!    --    declarations are not constructed, and the fields remain Empty.
  
     procedure Expand_Image_Attribute (N : Node_Id);
     --  This procedure is called from Exp_Attr to expand an occurrence of the
--- 35,77 ----
     --  base type. The node N is the point in the tree where the resulting
     --  declarations are to be inserted.
     --
!    --  The form of the tables generated is as follows:
     --
!    --    xxxS : constant string (1 .. M) := "chars";
!    --    xxxN : constant array (0 .. N) of Index_Type := (i1, i2, .., iN, j);
     --
!    --  Here xxxS is a string obtained by concatenating all the names of the
!    --  enumeration literals in sequence, representing any wide characters
!    --  according to the current wide character encoding method, and with all
!    --  letters forced to upper case.
     --
!    --  The array xxxN is an array of indexes into xxxS pointing to the start
!    --  of each name, with one extra entry at the end, which is the index to
!    --  the character just past the end of the last literal, i.e. it is the
!    --  length of xxxS + 1. The element type is the shortest of the possible
!    --  types that will hold all the values.
     --
!    --  For example, for the type
     --
!    --     type x is (hello,'!',goodbye);
     --
!    --  the generated tables would consist of
     --
!    --      xxxS : constant string (1 .. 15) := "hello'!'goodbye";
!    --      xxxN : constant array (0 .. 3) of Integer_8 := (1, 6, 9, 16);
     --
!    --  Here Integer_8 is used since 16 < 2**(8-1).
     --
!    --  If the entity E needs the tables, the necessary declarations are built
!    --  and the fields Lit_Strings and Lit_Indexes of E are set to point to the
!    --  corresponding entities. If no tables are needed (E is not a user defined
!    --  enumeration root type, or pragma Discard_Names is in effect), then the
!    --  declarations are not constructed and the fields remain Empty.
!    --
!    --  If the number of enumeration literals is large enough, a (perfect) hash
!    --  function mapping the literals to their position number is also built and
!    --  requires additional tables. See the System.Perfect_Hash_Generators unit
!    --  for a complete description of this processing.
  
     procedure Expand_Image_Attribute (N : Node_Id);
     --  This procedure is called from Exp_Attr to expand an occurrence of the
*************** package Exp_Imgv is
*** 81,86 ****
--- 85,94 ----
     --  This procedure is called from Exp_Attr to expand an occurrence of the
     --  attribute Wide_Wide_Image.
  
+    procedure Expand_Valid_Value_Attribute (N : Node_Id);
+    --  This procedure is called from Exp_Attr to expand an occurrence of the
+    --  attribute Valid_Value.
+ 
     procedure Expand_Value_Attribute (N : Node_Id);
     --  This procedure is called from Exp_Attr to expand an occurrence of the
     --  attribute Value.
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_intr.adb gcc-12.1.0/gcc/ada/exp_intr.adb
*** gcc-11.3.0/gcc/ada/exp_intr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_intr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,60 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Expander; use Expander;
! with Exp_Atag; use Exp_Atag;
! with Exp_Ch7;  use Exp_Ch7;
! with Exp_Ch11; use Exp_Ch11;
! with Exp_Code; use Exp_Code;
! with Exp_Fixd; use Exp_Fixd;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Inline;   use Inline;
! with Nmake;    use Nmake;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Type; use Sem_Type;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Urealp;   use Urealp;
  
  package body Exp_Intr is
  
--- 23,63 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Expander;       use Expander;
! with Exp_Atag;       use Exp_Atag;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Ch11;       use Exp_Ch11;
! with Exp_Code;       use Exp_Code;
! with Exp_Fixd;       use Exp_Fixd;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Inline;         use Inline;
! with Nmake;          use Nmake;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
  
  package body Exp_Intr is
  
*************** package body Exp_Intr is
*** 66,74 ****
     --  Expand a call to an intrinsic arithmetic operator when the operand
     --  types or sizes are not identical.
  
-    procedure Expand_Is_Negative (N : Node_Id);
-    --  Expand a call to the intrinsic Is_Negative function
- 
     procedure Expand_Dispatching_Constructor_Call (N : Node_Id);
     --  Expand a call to an instantiation of Generic_Dispatching_Constructor
     --  into a dispatching call to the actual subprogram associated with the
--- 69,74 ----
*************** package body Exp_Intr is
*** 325,331 ****
        Result_Typ := Class_Wide_Type (Etype (Act_Constr));
  
        --  Check that the accessibility level of the tag is no deeper than that
!       --  of the constructor function (unless CodePeer_Mode)
  
        if not CodePeer_Mode then
           Insert_Action (N,
--- 325,331 ----
        Result_Typ := Class_Wide_Type (Etype (Act_Constr));
  
        --  Check that the accessibility level of the tag is no deeper than that
!       --  of the constructor function (unless CodePeer_Mode).
  
        if not CodePeer_Mode then
           Insert_Action (N,
*************** package body Exp_Intr is
*** 335,341 ****
                   Left_Opnd  =>
                     Build_Get_Access_Level (Loc, New_Copy_Tree (Tag_Arg)),
                   Right_Opnd =>
!                    Make_Integer_Literal (Loc, Scope_Depth (Act_Constr))),
  
               Then_Statements => New_List (
                 Make_Raise_Statement (Loc,
--- 335,342 ----
                   Left_Opnd  =>
                     Build_Get_Access_Level (Loc, New_Copy_Tree (Tag_Arg)),
                   Right_Opnd =>
!                    Make_Integer_Literal
!                      (Loc, Scope_Depth_Default_0 (Act_Constr))),
  
               Then_Statements => New_List (
                 Make_Raise_Statement (Loc,
*************** package body Exp_Intr is
*** 521,527 ****
              if No (Choice_Parameter (P)) then
                 E := Make_Temporary (Loc, 'E');
                 Set_Choice_Parameter (P, E);
!                Set_Ekind (E, E_Variable);
                 Set_Etype (E, RTE (RE_Exception_Occurrence));
                 Set_Scope (E, Current_Scope);
              end if;
--- 522,528 ----
              if No (Choice_Parameter (P)) then
                 E := Make_Temporary (Loc, 'E');
                 Set_Choice_Parameter (P, E);
!                Mutate_Ekind (E, E_Variable);
                 Set_Etype (E, RTE (RE_Exception_Occurrence));
                 Set_Scope (E, Current_Scope);
              end if;
*************** package body Exp_Intr is
*** 636,644 ****
        then
           Expand_Import_Call (N);
  
-       elsif Nam = Name_Is_Negative then
-          Expand_Is_Negative (N);
- 
        elsif Nam = Name_Rotate_Left then
           Expand_Shift (N, E, N_Op_Rotate_Left);
  
--- 637,642 ----
*************** package body Exp_Intr is
*** 696,753 ****
        end if;
     end Expand_Intrinsic_Call;
  
-    ------------------------
-    -- Expand_Is_Negative --
-    ------------------------
- 
-    procedure Expand_Is_Negative (N : Node_Id) is
-       Loc   : constant Source_Ptr := Sloc (N);
-       Opnd  : constant Node_Id    := Relocate_Node (First_Actual (N));
- 
-    begin
- 
-       --  We replace the function call by the following expression
- 
-       --    if Opnd < 0.0 then
-       --       True
-       --    else
-       --       if Opnd > 0.0 then
-       --          False;
-       --       else
-       --          Float_Unsigned!(Float (Opnd)) /= 0
-       --       end if;
-       --    end if;
- 
-       Rewrite (N,
-         Make_If_Expression (Loc,
-           Expressions => New_List (
-             Make_Op_Lt (Loc,
-               Left_Opnd  => Duplicate_Subexpr (Opnd),
-               Right_Opnd => Make_Real_Literal (Loc, Ureal_0)),
- 
-             New_Occurrence_Of (Standard_True, Loc),
- 
-             Make_If_Expression (Loc,
-              Expressions => New_List (
-                Make_Op_Gt (Loc,
-                  Left_Opnd  => Duplicate_Subexpr_No_Checks (Opnd),
-                  Right_Opnd => Make_Real_Literal (Loc, Ureal_0)),
- 
-                New_Occurrence_Of (Standard_False, Loc),
- 
-                 Make_Op_Ne (Loc,
-                   Left_Opnd =>
-                     Unchecked_Convert_To
-                       (RTE (RE_Float_Unsigned),
-                        Convert_To
-                          (Standard_Float,
-                           Duplicate_Subexpr_No_Checks (Opnd))),
-                   Right_Opnd =>
-                     Make_Integer_Literal (Loc, 0)))))));
- 
-       Analyze_And_Resolve (N, Standard_Boolean);
-    end Expand_Is_Negative;
- 
     ------------------
     -- Expand_Shift --
     ------------------
--- 694,699 ----
*************** package body Exp_Intr is
*** 1206,1212 ****
  
           else
              Set_Procedure_To_Call
!               (Free_Nod, Find_Prim_Op (Etype (Pool), Name_Deallocate));
           end if;
        end if;
  
--- 1152,1158 ----
  
           else
              Set_Procedure_To_Call
!               (Free_Nod, Find_Storage_Op (Etype (Pool), Name_Deallocate));
           end if;
        end if;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_intr.ads gcc-12.1.0/gcc/ada/exp_intr.ads
*** gcc-11.3.0/gcc/ada/exp_intr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_intr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_pakd.adb gcc-12.1.0/gcc/ada/exp_pakd.adb
*** gcc-11.3.0/gcc/ada/exp_pakd.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_pakd.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,55 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Exp_Dbug; use Exp_Dbug;
! with Exp_Util; use Exp_Util;
! with Layout;   use Layout;
! with Lib.Xref; use Lib.Xref;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Ch13; use Sem_Ch13;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Targparm; use Targparm;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Uintp;    use Uintp;
  
  package body Exp_Pakd is
  
--- 23,59 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Exp_Dbug;       use Exp_Dbug;
! with Exp_Util;       use Exp_Util;
! with Layout;         use Layout;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
  
  package body Exp_Pakd is
  
*************** package body Exp_Pakd is
*** 489,495 ****
  
        Ancest   : Entity_Id;
        PB_Type  : Entity_Id;
!       PASize   : Uint;
        Decl     : Node_Id;
        PAT      : Entity_Id;
        Len_Expr : Node_Id;
--- 493,499 ----
  
        Ancest   : Entity_Id;
        PB_Type  : Entity_Id;
!       PASize   : Uint := No_Uint;
        Decl     : Node_Id;
        PAT      : Entity_Id;
        Len_Expr : Node_Id;
*************** package body Exp_Pakd is
*** 559,577 ****
           --  Do not reset RM_Size if already set, as happens in the case of
           --  a modular type.
  
!          if Unknown_Esize (PAT) then
!             Set_Esize (PAT, PASize);
           end if;
  
!          if Unknown_RM_Size (PAT) then
!             Set_RM_Size (PAT, PASize);
           end if;
  
           Adjust_Esize_Alignment (PAT);
  
           --  Set remaining fields of packed array type
  
-          Init_Alignment                (PAT);
           Set_Parent                    (PAT, Empty);
           Set_Associated_Node_For_Itype (PAT, Typ);
           Set_Original_Array_Type       (PAT, Typ);
--- 563,595 ----
           --  Do not reset RM_Size if already set, as happens in the case of
           --  a modular type.
  
!          if Present (PASize) then
!             if not Known_Esize (PAT) then
!                Set_Esize (PAT, PASize);
!             end if;
! 
!             if not Known_RM_Size (PAT) then
!                Set_RM_Size (PAT, PASize);
!             end if;
           end if;
  
!          --  In the case of a modular type, make sure the alignment is
!          --  consistent with the Esize.
! 
!          if Is_Scalar_Type (PAT) then
!             while Alignment (PAT) * System_Storage_Unit < Esize (PAT)
!               and then Alignment (PAT) < Maximum_Alignment
!             loop
!                Set_Alignment (PAT, 2 * Alignment (PAT));
!             end loop;
           end if;
  
+          --  Then, in all cases, make sure the opposite is also true
+ 
           Adjust_Esize_Alignment (PAT);
  
           --  Set remaining fields of packed array type
  
           Set_Parent                    (PAT, Empty);
           Set_Associated_Node_For_Itype (PAT, Typ);
           Set_Original_Array_Type       (PAT, Typ);
*************** package body Exp_Pakd is
*** 609,615 ****
           --  type or component, take it into account.
  
           if Csize <= 2 or else Csize = 4 or else Csize mod 2 /= 0
!            or else Alignment (Typ) = 1
             or else Component_Alignment (Typ) = Calign_Storage_Unit
           then
              if Reverse_Storage_Order (Typ) then
--- 627,633 ----
           --  type or component, take it into account.
  
           if Csize <= 2 or else Csize = 4 or else Csize mod 2 /= 0
!            or else (Known_Alignment (Typ) and then Alignment (Typ) = 1)
             or else Component_Alignment (Typ) = Calign_Storage_Unit
           then
              if Reverse_Storage_Order (Typ) then
*************** package body Exp_Pakd is
*** 619,625 ****
              end if;
  
           elsif Csize mod 4 /= 0
!            or else Alignment (Typ) = 2
           then
              if Reverse_Storage_Order (Typ) then
                 PB_Type := RTE (RE_Rev_Packed_Bytes2);
--- 637,643 ----
              end if;
  
           elsif Csize mod 4 /= 0
!            or else (Known_Alignment (Typ) and then Alignment (Typ) = 2)
           then
              if Reverse_Storage_Order (Typ) then
                 PB_Type := RTE (RE_Rev_Packed_Bytes2);
*************** package body Exp_Pakd is
*** 676,682 ****
        --  type, since this size clearly belongs to the packed array type. The
        --  size of the conceptual unpacked type is always set to unknown.
  
!       PASize := RM_Size (Typ);
  
        --  Case of an array where at least one index is of an enumeration
        --  type with a non-standard representation, but the component size
--- 694,702 ----
        --  type, since this size clearly belongs to the packed array type. The
        --  size of the conceptual unpacked type is always set to unknown.
  
!       if Known_RM_Size (Typ) then
!          PASize := RM_Size (Typ);
!       end if;
  
        --  Case of an array where at least one index is of an enumeration
        --  type with a non-standard representation, but the component size
*************** package body Exp_Pakd is
*** 824,831 ****
  
        elsif not Is_Constrained (Typ) then
  
!          --  When generating standard DWARF (i.e when GNAT_Encodings is
!          --  DWARF_GNAT_Encodings_Minimal), the ___XP suffix will be stripped
           --  by the back-end but generate it anyway to ease compiler debugging.
           --  This will help to distinguish implementation types from original
           --  packed arrays.
--- 844,851 ----
  
        elsif not Is_Constrained (Typ) then
  
!          --  When generating standard DWARF (i.e when GNAT_Encodings is not
!          --  DWARF_GNAT_Encodings_All), the ___XP suffix will be stripped
           --  by the back-end but generate it anyway to ease compiler debugging.
           --  This will help to distinguish implementation types from original
           --  packed arrays.
*************** package body Exp_Pakd is
*** 939,945 ****
                                     Make_Integer_Literal (Loc, 0),
                                   High_Bound => Lit))));
  
!                if PASize = Uint_0 then
                    PASize := Len_Bits;
                 end if;
  
--- 959,965 ----
                                     Make_Integer_Literal (Loc, 0),
                                   High_Bound => Lit))));
  
!                if Present (PASize) then
                    PASize := Len_Bits;
                 end if;
  
*************** package body Exp_Pakd is
*** 1909,1917 ****
        --  where PAT is the packed array type. This works fine, since in the
        --  modular case we guarantee that the unused bits are always zeroes.
        --  We do have to compare the lengths because we could be comparing
!       --  two different subtypes of the same base type.
  
!       if Is_Modular_Integer_Type (PAT) then
           Rewrite (N,
             Make_And_Then (Loc,
               Left_Opnd =>
--- 1929,1938 ----
        --  where PAT is the packed array type. This works fine, since in the
        --  modular case we guarantee that the unused bits are always zeroes.
        --  We do have to compare the lengths because we could be comparing
!       --  two different subtypes of the same base type. We can only do this
!       --  if the PATs on both sides are the same.
  
!       if Is_Modular_Integer_Type (PAT) and then PAT = Etype (R) then
           Rewrite (N,
             Make_And_Then (Loc,
               Left_Opnd =>
*************** package body Exp_Pakd is
*** 1968,1973 ****
--- 1989,1995 ----
        Rtyp : Entity_Id;
        PAT  : Entity_Id;
        Lit  : Node_Id;
+       Size : Unat;
  
     begin
        Convert_To_Actual_Subtype (Opnd);
*************** package body Exp_Pakd is
*** 1989,1997 ****
  
        --  where PAT is the packed array type, Mask is a mask of all 1 bits of
        --  length equal to the size of this packed type, and Rtyp is the actual
!       --  actual subtype of the operand.
  
!       Lit := Make_Integer_Literal (Loc, 2 ** RM_Size (PAT) - 1);
        Set_Print_In_Hex (Lit);
  
        if not Is_Array_Type (PAT) then
--- 2011,2025 ----
  
        --  where PAT is the packed array type, Mask is a mask of all 1 bits of
        --  length equal to the size of this packed type, and Rtyp is the actual
!       --  actual subtype of the operand. Preserve old behavior in case size is
!       --  not set.
  
!       if Known_RM_Size (PAT) then
!          Size := RM_Size (PAT);
!       else
!          Size := Uint_0;
!       end if;
!       Lit := Make_Integer_Literal (Loc, 2 ** Size - 1);
        Set_Print_In_Hex (Lit);
  
        if not Is_Array_Type (PAT) then
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_pakd.ads gcc-12.1.0/gcc/ada/exp_pakd.ads
*** gcc-11.3.0/gcc/ada/exp_pakd.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_pakd.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_prag.adb gcc-12.1.0/gcc/ada/exp_prag.adb
*** gcc-11.3.0/gcc/ada/exp_prag.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_prag.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,60 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Exp_Ch11; use Exp_Ch11;
! with Exp_Util; use Exp_Util;
! with Expander; use Expander;
! with Inline;   use Inline;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Prag; use Sem_Prag;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stringt;  use Stringt;
! with Stand;    use Stand;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Validsw;  use Validsw;
  
  package body Exp_Prag is
  
--- 23,64 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Ch11;       use Exp_Ch11;
! with Exp_Util;       use Exp_Util;
! with Expander;       use Expander;
! with Inline;         use Inline;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stringt;        use Stringt;
! with Stand;          use Stand;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Validsw;        use Validsw;
  
  package body Exp_Prag is
  
*************** package body Exp_Prag is
*** 121,127 ****
  
     begin
        --  Suppress the expansion of an ignored assertion pragma. Such a pragma
!       --  should not be transformed into a null statment because:
        --
        --    * The pragma may be part of the rep item chain of a type, in which
        --      case rewriting it will destroy the chain.
--- 125,131 ----
  
     begin
        --  Suppress the expansion of an ignored assertion pragma. Such a pragma
!       --  should not be transformed into a null statement because:
        --
        --    * The pragma may be part of the rep item chain of a type, in which
        --      case rewriting it will destroy the chain.
*************** package body Exp_Prag is
*** 559,567 ****
              null;
  
           elsif Nam = Name_Assert then
!             Error_Msg_N ("?A?assertion will fail at run time", N);
           else
!             Error_Msg_N ("?A?check will fail at run time", N);
           end if;
        end if;
     end Expand_Pragma_Check;
--- 563,571 ----
              null;
  
           elsif Nam = Name_Assert then
!             Error_Msg_N ("?.a?assertion will fail at run time", N);
           else
!             Error_Msg_N ("?.a?check will fail at run time", N);
           end if;
        end if;
     end Expand_Pragma_Check;
*************** package body Exp_Prag is
*** 748,757 ****
        --  value of which is Init_Val if present or null if not.
  
        function Build_Simple_Declaration_With_Default
!          (Decl_Id     : Entity_Id;
!           Init_Val    : Entity_Id;
!           Typ         : Entity_Id;
!           Default_Val : Entity_Id) return Node_Id;
        --  Build a declaration the Defining_Identifier of which is Decl_Id, the
        --  Object_Definition of which is Typ, the value of which is Init_Val if
        --  present or Default otherwise.
--- 752,761 ----
        --  value of which is Init_Val if present or null if not.
  
        function Build_Simple_Declaration_With_Default
!         (Decl_Id     : Entity_Id;
!          Init_Val    : Node_Id;
!          Typ         : Node_Id;
!          Default_Val : Node_Id) return Node_Id;
        --  Build a declaration the Defining_Identifier of which is Decl_Id, the
        --  Object_Definition of which is Typ, the value of which is Init_Val if
        --  present or Default otherwise.
*************** package body Exp_Prag is
*** 771,777 ****
        function Get_Nth_Arg_Type
           (Subprogram : Entity_Id;
            N          : Positive) return Entity_Id;
!       --  Returns the type of the Nth argument of Subprogram.
  
        function To_Addresses (Elmts : Elist_Id) return List_Id;
        --  Returns a new list containing each element of Elmts wrapped in an
--- 775,781 ----
        function Get_Nth_Arg_Type
           (Subprogram : Entity_Id;
            N          : Positive) return Entity_Id;
!       --  Returns the type of the Nth argument of Subprogram
  
        function To_Addresses (Elmts : Elist_Id) return List_Id;
        --  Returns a new list containing each element of Elmts wrapped in an
*************** package body Exp_Prag is
*** 821,829 ****
           Init_Val : Node_Id) return Node_Id
        is
           --  Expressions for each component of the returned Dim3
!          Dim_X    : Node_Id;
!          Dim_Y    : Node_Id;
!          Dim_Z    : Node_Id;
  
           --  Type of CUDA.Internal.Dim3 - inferred from
           --  RE_Push_Call_Configuration to avoid needing changes in GNAT when
--- 825,833 ----
           Init_Val : Node_Id) return Node_Id
        is
           --  Expressions for each component of the returned Dim3
!          Dim_X : Node_Id;
!          Dim_Y : Node_Id;
!          Dim_Z : Node_Id;
  
           --  Type of CUDA.Internal.Dim3 - inferred from
           --  RE_Push_Call_Configuration to avoid needing changes in GNAT when
*************** package body Exp_Prag is
*** 835,846 ****
           First_Component  : Entity_Id := First_Entity (RTE (RE_Dim3));
           Second_Component : Entity_Id := Next_Entity (First_Component);
           Third_Component  : Entity_Id := Next_Entity (Second_Component);
        begin
  
!          --  Sem_prag.adb ensured that Init_Val is either a Dim3, an
!          --  aggregate of three Any_Integers or Any_Integer.
  
!          --  If Init_Val is a Dim3, use each of its components.
  
           if Etype (Init_Val) = RTE (RE_Dim3) then
              Dim_X := Make_Selected_Component (Loc,
--- 839,851 ----
           First_Component  : Entity_Id := First_Entity (RTE (RE_Dim3));
           Second_Component : Entity_Id := Next_Entity (First_Component);
           Third_Component  : Entity_Id := Next_Entity (Second_Component);
+ 
        begin
  
!          --  Sem_prag.adb ensured that Init_Val is either a Dim3, an aggregate
!          --  of three Any_Integers or Any_Integer.
  
!          --  If Init_Val is a Dim3, use each of its components
  
           if Etype (Init_Val) = RTE (RE_Dim3) then
              Dim_X := Make_Selected_Component (Loc,
*************** package body Exp_Prag is
*** 862,868 ****
                 Dim_Y := Next (Dim_X);
                 Dim_Z := Next (Dim_Y);
  
!             --  Otherwise, we know it is an integer and the rest defaults to 1.
  
              else
                 Dim_X := Init_Val;
--- 867,873 ----
                 Dim_Y := Next (Dim_X);
                 Dim_Z := Next (Dim_Y);
  
!             --  Otherwise, we know it is an integer and the rest defaults to 1
  
              else
                 Dim_X := Init_Val;
*************** package body Exp_Prag is
*** 978,984 ****
        function Build_Simple_Declaration_With_Default
          (Decl_Id     : Entity_Id;
           Init_Val    : Node_Id;
!          Typ         : Entity_Id;
           Default_Val : Node_Id) return Node_Id
        is
           Value : Node_Id := Init_Val;
--- 983,989 ----
        function Build_Simple_Declaration_With_Default
          (Decl_Id     : Entity_Id;
           Init_Val    : Node_Id;
!          Typ         : Node_Id;
           Default_Val : Node_Id) return Node_Id
        is
           Value : Node_Id := Init_Val;
*************** package body Exp_Prag is
*** 1011,1024 ****
              Default_Val => Make_Null (Loc));
        end Build_Stream_Declaration;
  
!       ------------------------
!       -- Etype_Or_Dim3  --
!       ------------------------
  
        function Etype_Or_Dim3 (N : Node_Id) return Node_Id is
        begin
!          if Nkind (N) = N_Aggregate and then Is_Composite_Type (Etype (N))
!          then
              return New_Occurrence_Of (RTE (RE_Dim3), Sloc (N));
           end if;
  
--- 1016,1028 ----
              Default_Val => Make_Null (Loc));
        end Build_Stream_Declaration;
  
!       -------------------
!       -- Etype_Or_Dim3 --
!       -------------------
  
        function Etype_Or_Dim3 (N : Node_Id) return Node_Id is
        begin
!          if Nkind (N) = N_Aggregate and then Is_Composite_Type (Etype (N)) then
              return New_Occurrence_Of (RTE (RE_Dim3), Sloc (N));
           end if;
  
*************** package body Exp_Prag is
*** 1036,1042 ****
           Argument : Entity_Id := First_Entity (Subprogram);
        begin
           for J in 2 .. N loop
!             Argument := Next_Entity (Argument);
           end loop;
  
           return Etype (Argument);
--- 1040,1046 ----
           Argument : Entity_Id := First_Entity (Subprogram);
        begin
           for J in 2 .. N loop
!             Next_Entity (Argument);
           end loop;
  
           return Etype (Argument);
*************** package body Exp_Prag is
*** 1098,1105 ****
          Object_Definition   => Etype_Or_Dim3 (Block_Dimensions),
          Expression          => Block_Dimensions);
  
!       --  List holding the entities of the copies of Procedure_Call's
!       --  arguments.
  
        Kernel_Arg_Copies : constant Elist_Id := New_Elmt_List;
  
--- 1102,1108 ----
          Object_Definition   => Etype_Or_Dim3 (Block_Dimensions),
          Expression          => Block_Dimensions);
  
!       --  List holding the entities of the copies of Procedure_Call's arguments
  
        Kernel_Arg_Copies : constant Elist_Id := New_Elmt_List;
  
*************** package body Exp_Prag is
*** 1114,1120 ****
        Pop_Call           : Node_Id;
        Push_Call          : Node_Id;
  
!       --  Declaration of all temporaries required for CUDA API Calls.
  
        Blk_Decls  : constant List_Id := New_List;
  
--- 1117,1123 ----
        Pop_Call           : Node_Id;
        Push_Call          : Node_Id;
  
!       --  Declaration of all temporaries required for CUDA API Calls
  
        Blk_Decls  : constant List_Id := New_List;
  
*************** package body Exp_Prag is
*** 1522,1530 ****
           begin
              --  Attribute 'Old
  
!             if Nkind (N) = N_Attribute_Reference
!               and then Attribute_Name (N) = Name_Old
!             then
                 Pref := Prefix (N);
  
                 Indirect := Indirect_Temp_Needed (Etype (Pref));
--- 1525,1531 ----
           begin
              --  Attribute 'Old
  
!             if Is_Attribute_Old (N) then
                 Pref := Prefix (N);
  
                 Indirect := Indirect_Temp_Needed (Etype (Pref));
*************** package body Exp_Prag is
*** 1567,1573 ****
                    --  effects). Assign prefix value to temp on Eval_Statement
                    --  list, so assignment will be executed conditionally.
  
!                   Set_Ekind (Temp, E_Variable);
                    Set_Suppress_Initialization (Temp);
                    Analyze (Decl);
  
--- 1568,1574 ----
                    --  effects). Assign prefix value to temp on Eval_Statement
                    --  list, so assignment will be executed conditionally.
  
!                   Mutate_Ekind (Temp, E_Variable);
                    Set_Suppress_Initialization (Temp);
                    Analyze (Decl);
  
*************** package body Exp_Prag is
*** 2036,2042 ****
                      Expression => Relocate_Node (Rtti_Name))))));
  
              Rewrite (Expression (Foreign_Data),
!               Unchecked_Convert_To (Standard_A_Char,
                  Make_Attribute_Reference (Loc,
                    Prefix         => Make_Identifier (Loc, Chars (Dum)),
                    Attribute_Name => Name_Address)));
--- 2037,2043 ----
                      Expression => Relocate_Node (Rtti_Name))))));
  
              Rewrite (Expression (Foreign_Data),
!               OK_Convert_To (Standard_Address,
                  Make_Attribute_Reference (Loc,
                    Prefix         => Make_Identifier (Loc, Chars (Dum)),
                    Attribute_Name => Name_Address)));
*************** package body Exp_Prag is
*** 2269,2275 ****
          Make_Defining_Identifier (Loc,
            Chars => New_External_Name (Chars (Pack_Id), "Initial_Condition"));
  
!       Set_Ekind                          (Proc_Id, E_Procedure);
        Set_Is_Initial_Condition_Procedure (Proc_Id);
  
        --  Generate:
--- 2270,2276 ----
          Make_Defining_Identifier (Loc,
            Chars => New_External_Name (Chars (Pack_Id), "Initial_Condition"));
  
!       Mutate_Ekind                       (Proc_Id, E_Procedure);
        Set_Is_Initial_Condition_Procedure (Proc_Id);
  
        --  Generate:
*************** package body Exp_Prag is
*** 2353,2362 ****
  
     procedure Expand_Pragma_Inspection_Point (N : Node_Id) is
        Loc : constant Source_Ptr := Sloc (N);
        A     : List_Id;
        Assoc : Node_Id;
-       S     : Entity_Id;
        E     : Entity_Id;
  
     begin
        if No (Pragma_Argument_Associations (N)) then
--- 2354,2365 ----
  
     procedure Expand_Pragma_Inspection_Point (N : Node_Id) is
        Loc : constant Source_Ptr := Sloc (N);
+ 
        A     : List_Id;
        Assoc : Node_Id;
        E     : Entity_Id;
+       Rip   : Boolean;
+       S     : Entity_Id;
  
     begin
        if No (Pragma_Argument_Associations (N)) then
*************** package body Exp_Prag is
*** 2369,2378 ****
                 if Comes_From_Source (E)
                   and then Is_Object (E)
                   and then not Is_Entry_Formal (E)
                   and then Ekind (E) /= E_Component
                   and then Ekind (E) /= E_Discriminant
-                  and then Ekind (E) /= E_Generic_In_Parameter
-                  and then Ekind (E) /= E_Generic_In_Out_Parameter
                 then
                    Append_To (A,
                      Make_Pragma_Argument_Association (Loc,
--- 2372,2380 ----
                 if Comes_From_Source (E)
                   and then Is_Object (E)
                   and then not Is_Entry_Formal (E)
+                  and then not Is_Formal_Object (E)
                   and then Ekind (E) /= E_Component
                   and then Ekind (E) /= E_Discriminant
                 then
                    Append_To (A,
                      Make_Pragma_Argument_Association (Loc,
*************** package body Exp_Prag is
*** 2388,2403 ****
           Set_Pragma_Argument_Associations (N, A);
        end if;
  
!       --  Expand the arguments of the pragma. Expanding an entity reference
!       --  is a noop, except in a protected operation, where a reference may
!       --  have to be transformed into a reference to the corresponding prival.
!       --  Are there other pragmas that may require this ???
  
        Assoc := First (Pragma_Argument_Associations (N));
        while Present (Assoc) loop
           Expand (Expression (Assoc));
           Next (Assoc);
        end loop;
     end Expand_Pragma_Inspection_Point;
  
     --------------------------------------
--- 2390,2437 ----
           Set_Pragma_Argument_Associations (N, A);
        end if;
  
!       --  Process the arguments of the pragma and expand them. Expanding an
!       --  entity reference is a noop, except in a protected operation, where
!       --  a reference may have to be transformed into a reference to the
!       --  corresponding prival. Are there other pragmas that require this ???
  
+       Rip := False;
        Assoc := First (Pragma_Argument_Associations (N));
        while Present (Assoc) loop
+          --  The back end may need to take the address of the object
+ 
+          Set_Address_Taken (Entity (Expression (Assoc)));
+ 
           Expand (Expression (Assoc));
+ 
+          --  If any of the objects have a freeze node, it must appear before
+          --  pragma Inspection_Point, otherwise the entity won't be elaborated
+          --  when Gigi processes the pragma.
+ 
+          if Has_Delayed_Freeze (Entity (Expression (Assoc)))
+            and then not Is_Frozen (Entity (Expression (Assoc)))
+          then
+             Error_Msg_NE
+               ("??inspection point references unfrozen object &",
+                Assoc,
+                Entity (Expression (Assoc)));
+             Rip := True;
+          end if;
+ 
           Next (Assoc);
        end loop;
+ 
+       --  When the above requirement isn't met, turn the pragma into a no-op
+ 
+       if Rip then
+          Error_Msg_N ("\pragma will be ignored", N);
+ 
+          --  We can't just remove the pragma from the tree as it might be
+          --  iterated over by the caller. Turn it into a null statement
+          --  instead.
+ 
+          Rewrite (N, Make_Null_Statement (Loc));
+       end if;
     end Expand_Pragma_Inspection_Point;
  
     --------------------------------------
*************** package body Exp_Prag is
*** 2658,2665 ****
     begin
        --  If pragma is not enabled, rewrite as Null statement. If pragma is
        --  disabled, it has already been rewritten as a Null statement.
  
!       if Is_Ignored (N) then
           Rewrite (N, Make_Null_Statement (Loc));
           Analyze (N);
           return;
--- 2692,2702 ----
     begin
        --  If pragma is not enabled, rewrite as Null statement. If pragma is
        --  disabled, it has already been rewritten as a Null statement.
+       --
+       --  Likewise, do this in CodePeer mode, because the expanded code is too
+       --  complicated for CodePeer to analyse.
  
!       if Is_Ignored (N) or else CodePeer_Mode then
           Rewrite (N, Make_Null_Statement (Loc));
           Analyze (N);
           return;
*************** package body Exp_Prag is
*** 2829,2835 ****
  
     procedure Expand_Pragma_Subprogram_Variant
       (Prag       : Node_Id;
!       Subp_Id    : Node_Id;
        Body_Decls : List_Id)
     is
        Curr_Decls : List_Id;
--- 2866,2872 ----
  
     procedure Expand_Pragma_Subprogram_Variant
       (Prag       : Node_Id;
!       Subp_Id    : Entity_Id;
        Body_Decls : List_Id)
     is
        Curr_Decls : List_Id;
*************** package body Exp_Prag is
*** 3141,3147 ****
     begin
        --  When applied to a variable, the default initialization must not be
        --  done. As it is already done when the pragma is found, we just get rid
!       --  of the call the initialization procedure which followed the object
        --  declaration. The call is inserted after the declaration, but validity
        --  checks may also have been inserted and thus the initialization call
        --  does not necessarily appear immediately after the object declaration.
--- 3178,3184 ----
     begin
        --  When applied to a variable, the default initialization must not be
        --  done. As it is already done when the pragma is found, we just get rid
!       --  of the call to the initialization procedure which followed the object
        --  declaration. The call is inserted after the declaration, but validity
        --  checks may also have been inserted and thus the initialization call
        --  does not necessarily appear immediately after the object declaration.
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_prag.ads gcc-12.1.0/gcc/ada/exp_prag.ads
*** gcc-11.3.0/gcc/ada/exp_prag.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_prag.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_put_image.adb gcc-12.1.0/gcc/ada/exp_put_image.adb
*** gcc-11.3.0/gcc/ada/exp_put_image.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_put_image.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2020-2022, 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- --
***************
*** 23,53 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util;
! with Debug;    use Debug;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Rtsfind;  use Rtsfind;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
  with Stand;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Uintp;    use Uintp;
  
  package body Exp_Put_Image is
  
-    Tagged_Put_Image_Enabled : Boolean renames Debug_Flag_Underscore_Z;
-    --  ???Set True to enable Put_Image for at least some tagged types
- 
     -----------------------
     -- Local Subprograms --
     -----------------------
--- 23,56 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Csets;          use Csets;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Rtsfind;        use Rtsfind;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
  with Stand;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
  
  package body Exp_Put_Image is
  
     -----------------------
     -- Local Subprograms --
     -----------------------
*************** package body Exp_Put_Image is
*** 335,341 ****
  
           --  For other elementary types, generate:
           --
!          --     Put_Wide_Wide_String (Sink, U_Type'Wide_Wide_Image (Item));
           --
           --  It would be more elegant to do it the other way around (define
           --  '[[Wide_]Wide_]Image in terms of 'Put_Image). But this is easier
--- 338,344 ----
  
           --  For other elementary types, generate:
           --
!          --     Wide_Wide_Put (Sink, U_Type'Wide_Wide_Image (Item));
           --
           --  It would be more elegant to do it the other way around (define
           --  '[[Wide_]Wide_]Image in terms of 'Put_Image). But this is easier
*************** package body Exp_Put_Image is
*** 362,368 ****
              Put_Call : constant Node_Id :=
                Make_Procedure_Call_Statement (Loc,
                  Name =>
!                   New_Occurrence_Of (RTE (RE_Put_Wide_Wide_String), Loc),
                  Parameter_Associations => New_List
                    (Relocate_Node (Sink), Image));
           begin
--- 365,371 ----
              Put_Call : constant Node_Id :=
                Make_Procedure_Call_Statement (Loc,
                  Name =>
!                   New_Occurrence_Of (RTE (RE_Wide_Wide_Put), Loc),
                  Parameter_Associations => New_List
                    (Relocate_Node (Sink), Image));
           begin
*************** package body Exp_Put_Image is
*** 525,530 ****
--- 528,534 ----
        Pnam : out Entity_Id)
     is
        Btyp : constant Entity_Id := Base_Type (Typ);
+       pragma Assert (not Is_Class_Wide_Type (Btyp));
        pragma Assert (not Is_Unchecked_Union (Btyp));
  
        First_Time : Boolean := True;
*************** package body Exp_Put_Image is
*** 645,676 ****
              --  Loop through components, skipping all internal components,
              --  which are not part of the value (e.g. _Tag), except that we
              --  don't skip the _Parent, since we do want to process that
!             --  recursively. If _Parent is an interface type, being abstract
!             --  with no components there is no need to handle it.
  
              while Present (Item) loop
                 if Nkind (Item) in
                      N_Component_Declaration | N_Discriminant_Specification
-                  and then
-                    ((Chars (Defining_Identifier (Item)) = Name_uParent
-                        and then not Is_Interface
-                                       (Etype (Defining_Identifier (Item))))
-                      or else
-                     not Is_Internal_Name (Chars (Defining_Identifier (Item))))
                 then
!                   if First_Time then
!                      First_Time := False;
!                   else
!                      Append_To (Result,
!                        Make_Procedure_Call_Statement (Loc,
!                          Name =>
!                            New_Occurrence_Of (RTE (RE_Record_Between), Loc),
!                          Parameter_Associations => New_List
!                            (Make_Identifier (Loc, Name_S))));
!                   end if;
  
!                   Append_To (Result, Make_Component_Name (Item));
!                   Append_Component_Attr (Result, Defining_Identifier (Item));
                 end if;
  
                 Next (Item);
--- 649,738 ----
              --  Loop through components, skipping all internal components,
              --  which are not part of the value (e.g. _Tag), except that we
              --  don't skip the _Parent, since we do want to process that
!             --  recursively.
  
              while Present (Item) loop
                 if Nkind (Item) in
                      N_Component_Declaration | N_Discriminant_Specification
                 then
!                   if Chars (Defining_Identifier (Item)) = Name_uParent then
!                      declare
!                         Parent_Type : constant Entity_Id :=
!                           Implementation_Base_Type
!                             (Etype (Defining_Identifier (Item)));
  
!                         Parent_Aspect_Spec : constant Node_Id :=
!                           Find_Aspect (Parent_Type, Aspect_Put_Image);
! 
!                         Parent_Type_Decl : constant Node_Id :=
!                           Declaration_Node (Parent_Type);
! 
!                         Parent_Rdef : Node_Id :=
!                           Type_Definition (Parent_Type_Decl);
!                      begin
!                         --  If parent type has an noninherited
!                         --  explicitly-specified Put_Image aspect spec, then
!                         --  display parent part by calling specified procedure,
!                         --  and then use extension-aggregate syntax for the
!                         --  remaining components as per RM 4.10(15/5);
!                         --  otherwise, "look through" the parent component
!                         --  to its components - we don't want the image text
!                         --  to include mention of an "_parent" component.
! 
!                         if Present (Parent_Aspect_Spec) and then
!                           Entity (Parent_Aspect_Spec) = Parent_Type
!                         then
!                            Append_Component_Attr
!                              (Result, Defining_Identifier (Item));
! 
!                            --  Omit the " with " if no subsequent components.
! 
!                            if not Is_Null_Extension_Of
!                                     (Descendant => Typ,
!                                      Ancestor => Parent_Type)
!                            then
!                               Append_To (Result,
!                                  Make_Procedure_Call_Statement (Loc,
!                                    Name =>
!                                      New_Occurrence_Of
!                                        (RTE (RE_Put_UTF_8), Loc),
!                                    Parameter_Associations => New_List
!                                      (Make_Identifier (Loc, Name_S),
!                                       Make_String_Literal (Loc, " with "))));
!                            end if;
!                         else
!                            if Nkind (Parent_Rdef) = N_Derived_Type_Definition
!                            then
!                               Parent_Rdef :=
!                                 Record_Extension_Part (Parent_Rdef);
!                            end if;
! 
!                            if Present (Component_List (Parent_Rdef)) then
!                               Append_List_To (Result,
!                                  Make_Component_List_Attributes
!                                    (Component_List (Parent_Rdef)));
!                            end if;
!                         end if;
!                      end;
! 
!                   elsif not Is_Internal_Name
!                               (Chars (Defining_Identifier (Item)))
!                   then
!                      if First_Time then
!                         First_Time := False;
!                      else
!                         Append_To (Result,
!                           Make_Procedure_Call_Statement (Loc,
!                             Name =>
!                               New_Occurrence_Of (RTE (RE_Record_Between), Loc),
!                             Parameter_Associations => New_List
!                               (Make_Identifier (Loc, Name_S))));
!                      end if;
! 
!                      Append_To (Result, Make_Component_Name (Item));
!                      Append_Component_Attr
!                        (Result, Defining_Identifier (Item));
!                   end if;
                 end if;
  
                 Next (Item);
*************** package body Exp_Put_Image is
*** 686,698 ****
  
        function Make_Component_Name (C : Entity_Id) return Node_Id is
           Name : constant Name_Id := Chars (Defining_Identifier (C));
        begin
           return
             Make_Procedure_Call_Statement (Loc,
               Name => New_Occurrence_Of (RTE (RE_Put_UTF_8), Loc),
               Parameter_Associations => New_List
                 (Make_Identifier (Loc, Name_S),
!                 Make_String_Literal (Loc, Get_Name_String (Name) & " => ")));
        end Make_Component_Name;
  
        Stms : constant List_Id := New_List;
--- 748,782 ----
  
        function Make_Component_Name (C : Entity_Id) return Node_Id is
           Name : constant Name_Id := Chars (Defining_Identifier (C));
+          pragma Assert (Name /= Name_uParent);
+ 
+          function To_Upper (S : String) return String;
+          --  Same as Ada.Characters.Handling.To_Upper, but withing
+          --  Ada.Characters.Handling seems to cause mailserver problems.
+ 
+          --------------
+          -- To_Upper --
+          --------------
+ 
+          function To_Upper (S : String) return String is
+          begin
+             return Result : String := S do
+                for Char of Result loop
+                   Char := Fold_Upper (Char);
+                end loop;
+             end return;
+          end To_Upper;
+ 
+       --  Start of processing for Make_Component_Name
+ 
        begin
           return
             Make_Procedure_Call_Statement (Loc,
               Name => New_Occurrence_Of (RTE (RE_Put_UTF_8), Loc),
               Parameter_Associations => New_List
                 (Make_Identifier (Loc, Name_S),
!                 Make_String_Literal (Loc,
!                   To_Upper (Get_Name_String (Name)) & " => ")));
        end Make_Component_Name;
  
        Stms : constant List_Id := New_List;
*************** package body Exp_Put_Image is
*** 703,740 ****
     --  Start of processing for Build_Record_Put_Image_Procedure
  
     begin
!       Append_To (Stms,
!         Make_Procedure_Call_Statement (Loc,
!           Name => New_Occurrence_Of (RTE (RE_Record_Before), Loc),
!           Parameter_Associations => New_List
!             (Make_Identifier (Loc, Name_S))));
  
!       --  Generate Put_Images for the discriminants of the type
  
!       Append_List_To (Stms,
!         Make_Component_Attributes (Discriminant_Specifications (Type_Decl)));
  
!       Rdef := Type_Definition (Type_Decl);
  
!       --  In the record extension case, the components we want, including the
!       --  _Parent component representing the parent type, are to be found in
!       --  the extension. We will process the _Parent component using the type
!       --  of the parent.
  
!       if Nkind (Rdef) = N_Derived_Type_Definition then
!          Rdef := Record_Extension_Part (Rdef);
!       end if;
  
-       if Present (Component_List (Rdef)) then
           Append_List_To (Stms,
!            Make_Component_List_Attributes (Component_List (Rdef)));
!       end if;
  
!       Append_To (Stms,
!         Make_Procedure_Call_Statement (Loc,
!           Name => New_Occurrence_Of (RTE (RE_Record_After), Loc),
!           Parameter_Associations => New_List
!             (Make_Identifier (Loc, Name_S))));
  
        Pnam := Make_Put_Image_Name (Loc, Btyp);
        Build_Put_Image_Proc (Loc, Btyp, Decl, Pnam, Stms);
--- 787,857 ----
     --  Start of processing for Build_Record_Put_Image_Procedure
  
     begin
!       if (Ada_Version < Ada_2022)
!         or else not Enable_Put_Image (Btyp)
!       then
!          --  generate a very simple Put_Image implementation
  
!          if Is_RTE (Typ, RE_Root_Buffer_Type) then
!             --  Avoid introducing a cyclic dependency between
!             --  Ada.Strings.Text_Buffers and System.Put_Images.
  
!             Append_To (Stms,
!               Make_Raise_Program_Error (Loc,
!               Reason => PE_Explicit_Raise));
!          else
!             Append_To (Stms,
!               Make_Procedure_Call_Statement (Loc,
!                 Name => New_Occurrence_Of (RTE (RE_Put_Image_Unknown), Loc),
!                 Parameter_Associations => New_List
!                   (Make_Identifier (Loc, Name_S),
!                    Make_String_Literal (Loc,
!                      To_String (Fully_Qualified_Name_String (Btyp))))));
!          end if;
!       elsif Is_Null_Record_Type (Btyp, Ignore_Privacy => True) then
  
!          --  Interface types take this path.
  
!          Append_To (Stms,
!            Make_Procedure_Call_Statement (Loc,
!              Name => New_Occurrence_Of (RTE (RE_Put_UTF_8), Loc),
!              Parameter_Associations => New_List
!                (Make_Identifier (Loc, Name_S),
!                 Make_String_Literal (Loc, "(NULL RECORD)"))));
!       else
!          Append_To (Stms,
!            Make_Procedure_Call_Statement (Loc,
!              Name => New_Occurrence_Of (RTE (RE_Record_Before), Loc),
!              Parameter_Associations => New_List
!                (Make_Identifier (Loc, Name_S))));
  
!          --  Generate Put_Images for the discriminants of the type
  
           Append_List_To (Stms,
!            Make_Component_Attributes
!              (Discriminant_Specifications (Type_Decl)));
  
!          Rdef := Type_Definition (Type_Decl);
! 
!          --  In the record extension case, the components we want are to be
!          --  found in the extension (although we have to process the
!          --  _Parent component to find inherited components).
! 
!          if Nkind (Rdef) = N_Derived_Type_Definition then
!             Rdef := Record_Extension_Part (Rdef);
!          end if;
! 
!          if Present (Component_List (Rdef)) then
!             Append_List_To (Stms,
!               Make_Component_List_Attributes (Component_List (Rdef)));
!          end if;
! 
!          Append_To (Stms,
!            Make_Procedure_Call_Statement (Loc,
!              Name => New_Occurrence_Of (RTE (RE_Record_After), Loc),
!              Parameter_Associations => New_List
!                (Make_Identifier (Loc, Name_S))));
!       end if;
  
        Pnam := Make_Put_Image_Name (Loc, Btyp);
        Build_Put_Image_Proc (Loc, Btyp, Decl, Pnam, Stms);
*************** package body Exp_Put_Image is
*** 754,760 ****
            In_Present          => True,
            Out_Present         => True,
            Parameter_Type      =>
!             New_Occurrence_Of (Class_Wide_Type (RTE (RE_Sink)), Loc)),
  
          Make_Parameter_Specification (Loc,
            Defining_Identifier => Make_Defining_Identifier (Loc, Name_V),
--- 871,878 ----
            In_Present          => True,
            Out_Present         => True,
            Parameter_Type      =>
!             New_Occurrence_Of
!               (Class_Wide_Type (RTE (RE_Root_Buffer_Type)), Loc)),
  
          Make_Parameter_Specification (Loc,
            Defining_Identifier => Make_Defining_Identifier (Loc, Name_V),
*************** package body Exp_Put_Image is
*** 812,849 ****
  
     function Enable_Put_Image (Typ : Entity_Id) return Boolean is
     begin
!       --  There's a bit of a chicken&egg problem. The compiler is likely to
!       --  have trouble if we refer to the Put_Image of Sink itself, because
!       --  Sink is part of the parameter profile:
!       --
!       --     function Sink'Put_Image (S : in out Sink'Class; V : T);
        --
!       --  Likewise, the Ada.Strings.Text_Output package, where Sink is
!       --  declared, depends on various other packages, so if we refer to
!       --  Put_Image of types declared in those other packages, we could create
!       --  cyclic dependencies. Therefore, we disable Put_Image for some
!       --  types. It's not clear exactly what types should be disabled. Scalar
!       --  types are OK, even if predefined, because calls to Put_Image of
!       --  scalar types are expanded inline. We certainly want to be able to use
!       --  Integer'Put_Image, for example.
! 
!       --  ???Temporarily disable to work around bugs:
        --
        --  Put_Image does not work for Remote_Types. We check the containing
        --  package, rather than the type itself, because we want to include
        --  types in the private part of a Remote_Types package.
-       --
-       --  Put_Image on tagged types triggers some bugs.
  
        if Is_Remote_Types (Scope (Typ))
          or else (Is_Tagged_Type (Typ) and then In_Predefined_Unit (Typ))
-         or else (Is_Tagged_Type (Typ) and then not Tagged_Put_Image_Enabled)
        then
           return False;
        end if;
  
-       --  End of workarounds.
- 
        --  No sense in generating code for Put_Image if there are errors. This
        --  avoids certain cascade errors.
  
--- 930,958 ----
  
     function Enable_Put_Image (Typ : Entity_Id) return Boolean is
     begin
!       --  If this function returns False for a non-scalar type Typ, then
!       --    a) calls to Typ'Image will result in calls to
!       --       System.Put_Images.Put_Image_Unknown to generate the image.
!       --    b) If Typ is a tagged type, then similarly the implementation
!       --       of Typ's Put_Image procedure will call Put_Image_Unknown
!       --       and will ignore its formal parameter of type Typ.
!       --       Note that Typ will still have a Put_Image procedure
!       --       in this case, albeit one with a simplified implementation.
        --
!       --  The name "Sink" here is a short nickname for
!       --  "Ada.Strings.Text_Buffers.Root_Buffer_Type".
        --
        --  Put_Image does not work for Remote_Types. We check the containing
        --  package, rather than the type itself, because we want to include
        --  types in the private part of a Remote_Types package.
  
        if Is_Remote_Types (Scope (Typ))
+         or else Is_Remote_Call_Interface (Typ)
          or else (Is_Tagged_Type (Typ) and then In_Predefined_Unit (Typ))
        then
           return False;
        end if;
  
        --  No sense in generating code for Put_Image if there are errors. This
        --  avoids certain cascade errors.
  
*************** package body Exp_Put_Image is
*** 854,866 ****
        --  If type Sink is unavailable in this runtime, disable Put_Image
        --  altogether.
  
!       if No_Run_Time_Mode or else not RTE_Available (RE_Sink) then
           return False;
        end if;
  
!       --  ???Disable Put_Image on type Sink declared in
!       --  Ada.Strings.Text_Output. Note that we can't call Is_RTU on
!       --  Ada_Strings_Text_Output, because it's not known yet (we might be
        --  compiling it). But this is insufficient to allow support for tagged
        --  predefined types.
  
--- 963,975 ----
        --  If type Sink is unavailable in this runtime, disable Put_Image
        --  altogether.
  
!       if No_Run_Time_Mode or else not RTE_Available (RE_Root_Buffer_Type) then
           return False;
        end if;
  
!       --  ???Disable Put_Image on type Root_Buffer_Type declared in
!       --  Ada.Strings.Text_Buffers. Note that we can't call Is_RTU on
!       --  Ada_Strings_Text_Buffers, because it's not known yet (we might be
        --  compiling it). But this is insufficient to allow support for tagged
        --  predefined types.
  
*************** package body Exp_Put_Image is
*** 869,875 ****
        begin
           if Present (Parent_Scope)
             and then Is_RTU (Parent_Scope, Ada_Strings)
!            and then Chars (Scope (Typ)) = Name_Find ("text_output")
           then
              return False;
           end if;
--- 978,984 ----
        begin
           if Present (Parent_Scope)
             and then Is_RTU (Parent_Scope, Ada_Strings)
!            and then Chars (Scope (Typ)) = Name_Find ("text_buffers")
           then
              return False;
           end if;
*************** package body Exp_Put_Image is
*** 896,904 ****
        return True;
     end Enable_Put_Image;
  
!    ---------------------------------
     -- Make_Put_Image_Name --
!    ---------------------------------
  
     function Make_Put_Image_Name
       (Loc : Source_Ptr; Typ : Entity_Id) return Entity_Id
--- 1005,1013 ----
        return True;
     end Enable_Put_Image;
  
!    -------------------------
     -- Make_Put_Image_Name --
!    -------------------------
  
     function Make_Put_Image_Name
       (Loc : Source_Ptr; Typ : Entity_Id) return Entity_Id
*************** package body Exp_Put_Image is
*** 919,933 ****
        return Make_Defining_Identifier (Loc, Sname);
     end Make_Put_Image_Name;
  
     function Image_Should_Call_Put_Image (N : Node_Id) return Boolean is
     begin
!       if Ada_Version < Ada_2020 then
           return False;
        end if;
  
!       --  In Ada 2020, T'Image calls T'Put_Image if there is an explicit
        --  aspect_specification for Put_Image, or if U_Type'Image is illegal
!       --  in pre-2020 versions of Ada.
  
        declare
           U_Type : constant Entity_Id := Underlying_Type (Entity (Prefix (N)));
--- 1028,1046 ----
        return Make_Defining_Identifier (Loc, Sname);
     end Make_Put_Image_Name;
  
+    ---------------------------------
+    -- Image_Should_Call_Put_Image --
+    ---------------------------------
+ 
     function Image_Should_Call_Put_Image (N : Node_Id) return Boolean is
     begin
!       if Ada_Version < Ada_2022 then
           return False;
        end if;
  
!       --  In Ada 2022, T'Image calls T'Put_Image if there is an explicit
        --  aspect_specification for Put_Image, or if U_Type'Image is illegal
!       --  in pre-2022 versions of Ada.
  
        declare
           U_Type : constant Entity_Id := Underlying_Type (Entity (Prefix (N)));
*************** package body Exp_Put_Image is
*** 940,950 ****
        end;
     end Image_Should_Call_Put_Image;
  
     function Build_Image_Call (N : Node_Id) return Node_Id is
        --  For T'Image (X) Generate an Expression_With_Actions node:
        --
        --     do
!       --        S : Buffer := New_Buffer;
        --        U_Type'Put_Image (S, X);
        --        Result : constant String := Get (S);
        --        Destroy (S);
--- 1053,1067 ----
        end;
     end Image_Should_Call_Put_Image;
  
+    ----------------------
+    -- Build_Image_Call --
+    ----------------------
+ 
     function Build_Image_Call (N : Node_Id) return Node_Id is
        --  For T'Image (X) Generate an Expression_With_Actions node:
        --
        --     do
!       --        S : Buffer;
        --        U_Type'Put_Image (S, X);
        --        Result : constant String := Get (S);
        --        Destroy (S);
*************** package body Exp_Put_Image is
*** 955,979 ****
        Loc : constant Source_Ptr := Sloc (N);
        U_Type : constant Entity_Id := Underlying_Type (Entity (Prefix (N)));
        Sink_Entity : constant Entity_Id :=
!         Make_Defining_Identifier (Loc, Chars => New_Internal_Name ('S'));
        Sink_Decl : constant Node_Id :=
          Make_Object_Declaration (Loc,
            Defining_Identifier => Sink_Entity,
            Object_Definition =>
!             New_Occurrence_Of (RTE (RE_Buffer), Loc),
!           Expression =>
!             Make_Function_Call (Loc,
!               Name => New_Occurrence_Of (RTE (RE_New_Buffer), Loc),
!               Parameter_Associations => Empty_List));
        Put_Im : constant Node_Id :=
          Make_Attribute_Reference (Loc,
            Prefix         => New_Occurrence_Of (U_Type, Loc),
            Attribute_Name => Name_Put_Image,
            Expressions    => New_List (
              New_Occurrence_Of (Sink_Entity, Loc),
!             New_Copy_Tree (First (Expressions (N)))));
        Result_Entity : constant Entity_Id :=
!         Make_Defining_Identifier (Loc, Chars => New_Internal_Name ('R'));
        Result_Decl : constant Node_Id :=
          Make_Object_Declaration (Loc,
            Defining_Identifier => Result_Entity,
--- 1072,1096 ----
        Loc : constant Source_Ptr := Sloc (N);
        U_Type : constant Entity_Id := Underlying_Type (Entity (Prefix (N)));
        Sink_Entity : constant Entity_Id :=
!         Make_Temporary (Loc, 'S');
        Sink_Decl : constant Node_Id :=
          Make_Object_Declaration (Loc,
            Defining_Identifier => Sink_Entity,
            Object_Definition =>
!             New_Occurrence_Of (RTE (RE_Buffer_Type), Loc));
! 
!       Image_Prefix : constant Node_Id :=
!         Duplicate_Subexpr (First (Expressions (N)));
! 
        Put_Im : constant Node_Id :=
          Make_Attribute_Reference (Loc,
            Prefix         => New_Occurrence_Of (U_Type, Loc),
            Attribute_Name => Name_Put_Image,
            Expressions    => New_List (
              New_Occurrence_Of (Sink_Entity, Loc),
!             Image_Prefix));
        Result_Entity : constant Entity_Id :=
!         Make_Temporary (Loc, 'R');
        Result_Decl : constant Node_Id :=
          Make_Object_Declaration (Loc,
            Defining_Identifier => Result_Entity,
*************** package body Exp_Put_Image is
*** 984,1006 ****
                Name => New_Occurrence_Of (RTE (RE_Get), Loc),
                Parameter_Associations => New_List (
                  New_Occurrence_Of (Sink_Entity, Loc))));
!       Image : constant Node_Id :=
!         Make_Expression_With_Actions (Loc,
!           Actions => New_List (Sink_Decl, Put_Im, Result_Decl),
!           Expression => New_Occurrence_Of (Result_Entity, Loc));
     begin
!       return Image;
     end Build_Image_Call;
  
!    ------------------
!    -- Preload_Sink --
!    ------------------
  
!    procedure Preload_Sink (Compilation_Unit : Node_Id) is
     begin
!       --  We can't call RTE (RE_Sink) for at least some predefined units,
!       --  because it would introduce cyclic dependences. The package where Sink
!       --  is declared, for example, and things it depends on.
        --
        --  It's only needed for tagged types, so don't do it unless Put_Image is
        --  enabled for tagged types, and we've seen a tagged type. Note that
--- 1101,1198 ----
                Name => New_Occurrence_Of (RTE (RE_Get), Loc),
                Parameter_Associations => New_List (
                  New_Occurrence_Of (Sink_Entity, Loc))));
!       Actions : List_Id;
! 
!       function Put_String_Exp (String_Exp : Node_Id;
!                                Wide_Wide  : Boolean := False) return Node_Id;
!       --  Generate a call to evaluate a String (or Wide_Wide_String, depending
!       --  on the Wide_Wide Boolean parameter) expression and output it into
!       --  the buffer.
! 
!       --------------------
!       -- Put_String_Exp --
!       --------------------
! 
!       function Put_String_Exp (String_Exp : Node_Id;
!                                Wide_Wide  : Boolean := False) return Node_Id is
!          Put_Id : constant RE_Id :=
!            (if Wide_Wide then RE_Wide_Wide_Put else RE_Put_UTF_8);
! 
!          --  We could build a nondispatching call here, but to make
!          --  that work we'd have to change Rtsfind spec to make available
!          --  corresponding callees out of Ada.Strings.Text_Buffers.Unbounded
!          --  (as opposed to from Ada.Strings.Text_Buffers). Seems simpler to
!          --  introduce a type conversion and leave it to the optimizer to
!          --  eliminate the dispatching. This does not *introduce* any problems
!          --  if a no-dispatching-allowed restriction is in effect, since we
!          --  are already in the middle of generating a call to T'Class'Image.
! 
!          Sink_Exp : constant Node_Id :=
!            Make_Type_Conversion (Loc,
!              Subtype_Mark =>
!                New_Occurrence_Of
!                  (Class_Wide_Type (RTE (RE_Root_Buffer_Type)), Loc),
!              Expression   => New_Occurrence_Of (Sink_Entity, Loc));
!       begin
!          return
!            Make_Procedure_Call_Statement (Loc,
!              Name => New_Occurrence_Of (RTE (Put_Id), Loc),
!              Parameter_Associations => New_List (Sink_Exp, String_Exp));
!       end Put_String_Exp;
! 
!    --  Start of processing for Build_Image_Call
! 
     begin
!       if Is_Class_Wide_Type (U_Type) then
!          --  Generate qualified-expression syntax; qualification name comes
!          --  from calling Ada.Tags.Wide_Wide_Expanded_Name.
! 
!          declare
!             --  The copy of Image_Prefix will be evaluated before the
!             --  original, which is ok if no side effects are involved.
! 
!             pragma Assert (Side_Effect_Free (Image_Prefix));
! 
!             Specific_Type_Name : constant Node_Id :=
!               Put_String_Exp
!                 (Make_Function_Call (Loc,
!                    Name => New_Occurrence_Of
!                              (RTE (RE_Wide_Wide_Expanded_Name), Loc),
!                    Parameter_Associations => New_List (
!                      Make_Attribute_Reference (Loc,
!                        Prefix         => Duplicate_Subexpr (Image_Prefix),
!                        Attribute_Name => Name_Tag))),
!                  Wide_Wide => True);
! 
!             Qualification : constant Node_Id :=
!               Put_String_Exp (Make_String_Literal (Loc, "'"));
!          begin
!             Actions := New_List
!                          (Sink_Decl,
!                           Specific_Type_Name,
!                           Qualification,
!                           Put_Im,
!                           Result_Decl);
!          end;
!       else
!          Actions := New_List (Sink_Decl, Put_Im, Result_Decl);
!       end if;
! 
!       return Make_Expression_With_Actions (Loc,
!         Actions    => Actions,
!         Expression => New_Occurrence_Of (Result_Entity, Loc));
     end Build_Image_Call;
  
!    ------------------------------
!    -- Preload_Root_Buffer_Type --
!    ------------------------------
  
!    procedure Preload_Root_Buffer_Type (Compilation_Unit : Node_Id) is
     begin
!       --  We can't call RTE (RE_Root_Buffer_Type) for at least some
!       --  predefined units, because it would introduce cyclic dependences.
!       --  The package where Root_Buffer_Type is declared, for example, and
!       --  things it depends on.
        --
        --  It's only needed for tagged types, so don't do it unless Put_Image is
        --  enabled for tagged types, and we've seen a tagged type. Note that
*************** package body Exp_Put_Image is
*** 1009,1033 ****
        --  It's unfortunate to have this Tagged_Seen processing so scattered
        --  about, but we need to know if there are tagged types where this is
        --  called in Analyze_Compilation_Unit, before we have analyzed any type
!       --  declarations. This mechanism also prevents doing RTE (RE_Sink) when
!       --  compiling the compiler itself. Packages Ada.Strings.Text_Output and
!       --  friends are not included in the compiler.
        --
!       --  Don't do it if type Sink is unavailable in the runtime.
  
        if not In_Predefined_Unit (Compilation_Unit)
-         and then Tagged_Put_Image_Enabled
          and then Tagged_Seen
          and then not No_Run_Time_Mode
!         and then RTE_Available (RE_Sink)
        then
           declare
!             Ignore : constant Entity_Id := RTE (RE_Sink);
           begin
              null;
           end;
        end if;
!    end Preload_Sink;
  
     -------------------------
     -- Put_Image_Base_Type --
--- 1201,1225 ----
        --  It's unfortunate to have this Tagged_Seen processing so scattered
        --  about, but we need to know if there are tagged types where this is
        --  called in Analyze_Compilation_Unit, before we have analyzed any type
!       --  declarations. This mechanism also prevents doing
!       --  RTE (RE_Root_Buffer_Type) when compiling the compiler itself.
!       --  Packages Ada.Strings.Buffer_Types and friends are not included
!       --  in the compiler.
        --
!       --  Don't do it if type Root_Buffer_Type is unavailable in the runtime.
  
        if not In_Predefined_Unit (Compilation_Unit)
          and then Tagged_Seen
          and then not No_Run_Time_Mode
!         and then RTE_Available (RE_Root_Buffer_Type)
        then
           declare
!             Ignore : constant Entity_Id := RTE (RE_Root_Buffer_Type);
           begin
              null;
           end;
        end if;
!    end Preload_Root_Buffer_Type;
  
     -------------------------
     -- Put_Image_Base_Type --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_put_image.ads gcc-12.1.0/gcc/ada/exp_put_image.ads
*** gcc-11.3.0/gcc/ada/exp_put_image.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_put_image.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020-2022, 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- --
*************** with Types; use Types;
*** 27,34 ****
  
  package Exp_Put_Image is
  
!    --  Routines to build Put_Image calls. See Ada.Strings.Text_Output.Utils and
!    --  System.Put_Images for the run-time routines we are generating calls to.
  
     --  For a call to T'Put_Image, if T is elementary, we expand the code
     --  inline. If T is a tagged type, then Put_Image is a primitive procedure
--- 27,35 ----
  
  package Exp_Put_Image is
  
!    --  Routines to build Put_Image calls. See Ada.Strings.Text_Buffers.Utils
!    --  and System.Put_Images for the run-time routines we are generating calls
!    --  to.
  
     --  For a call to T'Put_Image, if T is elementary, we expand the code
     --  inline. If T is a tagged type, then Put_Image is a primitive procedure
*************** package Exp_Put_Image is
*** 94,103 ****
     --  to call T'Put_Image into a buffer and then extract the string from the
     --  buffer.
  
!    procedure Preload_Sink (Compilation_Unit : Node_Id);
!    --  Call RTE (RE_Sink) if necessary, to load the packages involved in
!    --  Put_Image. We need to do this explicitly, fairly early during
!    --  compilation, because otherwise it happens during freezing, which
     --  triggers visibility bugs in generic instantiations.
  
  end Exp_Put_Image;
--- 95,104 ----
     --  to call T'Put_Image into a buffer and then extract the string from the
     --  buffer.
  
!    procedure Preload_Root_Buffer_Type (Compilation_Unit : Node_Id);
!    --  Call RTE (RE_Root_Buffer_Type) if necessary, to load the packages
!    --  involved in Put_Image. We need to do this explicitly, fairly early
!    --  during compilation, because otherwise it happens during freezing, which
     --  triggers visibility bugs in generic instantiations.
  
  end Exp_Put_Image;
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_sel.adb gcc-12.1.0/gcc/ada/exp_sel.adb
*** gcc-11.3.0/gcc/ada/exp_sel.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_sel.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Einfo;   use Einfo;
! with Nlists;  use Nlists;
! with Nmake;   use Nmake;
! with Opt;     use Opt;
! with Rtsfind; use Rtsfind;
! with Sinfo;   use Sinfo;
! with Snames;  use Snames;
! with Stand;   use Stand;
! with Tbuild;  use Tbuild;
  
  package body Exp_Sel is
  
--- 23,39 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Rtsfind;        use Rtsfind;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Tbuild;         use Tbuild;
  
  package body Exp_Sel is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_sel.ads gcc-12.1.0/gcc/ada/exp_sel.ads
*** gcc-11.3.0/gcc/ada/exp_sel.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_sel.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_smem.adb gcc-12.1.0/gcc/ada/exp_smem.adb
*** gcc-11.3.0/gcc/ada/exp_smem.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_smem.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
***************
*** 23,47 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Exp_Ch7;  use Exp_Ch7;
! with Exp_Ch9;  use Exp_Ch9;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Nmake;    use Nmake;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
  
  package body Exp_Smem is
  
--- 23,51 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Ch9;        use Exp_Ch9;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Nmake;          use Nmake;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
  
  package body Exp_Smem is
  
*************** package body Exp_Smem is
*** 82,88 ****
  
     function Build_Shared_Var_Proc_Call
       (Loc : Source_Ptr;
!       E   : Node_Id;
        N   : Name_Id) return Node_Id;
     --  Build a call to support procedure N for shared object E (provided by the
     --  instance of System.Shared_Storage.Shared_Var_Procs associated to E).
--- 86,92 ----
  
     function Build_Shared_Var_Proc_Call
       (Loc : Source_Ptr;
!       E   : Entity_Id;
        N   : Name_Id) return Node_Id;
     --  Build a call to support procedure N for shared object E (provided by the
     --  instance of System.Shared_Storage.Shared_Var_Procs associated to E).
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_smem.ads gcc-12.1.0/gcc/ada/exp_smem.ads
*** gcc-11.3.0/gcc/ada/exp_smem.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_smem.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_spark.adb gcc-12.1.0/gcc/ada/exp_spark.adb
*** gcc-11.3.0/gcc/ada/exp_spark.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_spark.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,50 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Einfo;    use Einfo;
  with Exp_Attr;
  with Exp_Ch4;
! with Exp_Ch5;  use Exp_Ch5;
! with Exp_Dbug; use Exp_Dbug;
! with Exp_Util; use Exp_Util;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Prag; use Sem_Prag;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
  
  package body Exp_SPARK is
  
--- 23,61 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
  with Exp_Attr;
+ with Exp_Ch3;
  with Exp_Ch4;
! with Exp_Ch5;        use Exp_Ch5;
! with Exp_Dbug;       use Exp_Dbug;
! with Exp_Util;       use Exp_Util;
! with Ghost;          use Ghost;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
  
  package body Exp_SPARK is
  
*************** package body Exp_SPARK is
*** 58,65 ****
     procedure Expand_SPARK_N_Delta_Aggregate (N : Node_Id);
     --  Perform delta-aggregate-specific expansion
  
!    procedure Expand_SPARK_N_Freeze_Type (E : Entity_Id);
!    --  Build the DIC procedure of a type when needed, if not already done
  
     procedure Expand_SPARK_N_Loop_Statement (N : Node_Id);
     --  Perform loop-statement-specific expansion
--- 69,78 ----
     procedure Expand_SPARK_N_Delta_Aggregate (N : Node_Id);
     --  Perform delta-aggregate-specific expansion
  
!    procedure Expand_SPARK_N_Freeze_Entity (N : Node_Id);
!    --  Do a minimal expansion of freeze entities required by GNATprove. It is
!    --  a subset of what is done for GNAT in Exp_Ch13.Expand_N_Freeze_Entity.
!    --  Those two routines should be kept in sync.
  
     procedure Expand_SPARK_N_Loop_Statement (N : Node_Id);
     --  Perform loop-statement-specific expansion
*************** package body Exp_SPARK is
*** 76,81 ****
--- 89,108 ----
     procedure Expand_SPARK_Delta_Or_Update (Typ : Entity_Id; Aggr : Node_Id);
     --  Common expansion for attribute Update and delta aggregates
  
+    procedure SPARK_Freeze_Type (N : Node_Id);
+    --  Do a minimal type freezing required by GNATprove. It is a subset of what
+    --  is done for GNAT in Exp_Ch3.Freeze_Type. Those two routines should be
+    --  kept in sync.
+    --
+    --  Currently in freezing we build the spec of dispatching equality. This
+    --  spec is needed to properly resolve references to the equality operator.
+    --  The body is not needed, because proof knows how to directly synthesize a
+    --  logical meaning for it. Also, for tagged types with extension the
+    --  expanded body would compare the _parent component, which is
+    --  intentionally not generated in the GNATprove mode.
+    --
+    --  We build the DIC procedure body here as well.
+ 
     ------------------
     -- Expand_SPARK --
     ------------------
*************** package body Exp_SPARK is
*** 136,143 ****
              Expand_SPARK_N_Op_Ne (N);
  
           when N_Freeze_Entity =>
              if Is_Type (Entity (N)) then
!                Expand_SPARK_N_Freeze_Type (Entity (N));
              end if;
  
           --  In SPARK mode, no other constructs require expansion
--- 163,174 ----
              Expand_SPARK_N_Op_Ne (N);
  
           when N_Freeze_Entity =>
+             --  Currently we only expand type freeze entities, so ignore other
+             --  freeze entites, because it is expensive to create a suitable
+             --  freezing environment.
+ 
              if Is_Type (Entity (N)) then
!                Expand_SPARK_N_Freeze_Entity (N);
              end if;
  
           --  In SPARK mode, no other constructs require expansion
*************** package body Exp_SPARK is
*** 346,368 ****
        end if;
     end Expand_SPARK_Delta_Or_Update;
  
!    --------------------------------
!    -- Expand_SPARK_N_Freeze_Type --
!    --------------------------------
  
-    procedure Expand_SPARK_N_Freeze_Type (E : Entity_Id) is
     begin
!       --  When a DIC is inherited by a tagged type, it may need to be
!       --  specialized to the descendant type, hence build a separate DIC
!       --  procedure for it as done during regular expansion for compilation.
  
!       if Has_DIC (E) and then Is_Tagged_Type (E) then
!          --  Why is this needed for DIC, but not for other aspects (such as
!          --  Type_Invariant)???
  
!          Build_DIC_Procedure_Body (E);
        end if;
!    end Expand_SPARK_N_Freeze_Type;
  
     ----------------------------------------
     -- Expand_SPARK_N_Attribute_Reference --
--- 377,552 ----
        end if;
     end Expand_SPARK_Delta_Or_Update;
  
!    ----------------------------------
!    -- Expand_SPARK_N_Freeze_Entity --
!    ----------------------------------
! 
!    procedure Expand_SPARK_N_Freeze_Entity (N : Entity_Id) is
!       E : constant Entity_Id := Entity (N);
! 
!       Action         : Node_Id;
!       E_Scope        : Entity_Id;
!       In_Other_Scope : Boolean;
!       In_Outer_Scope : Boolean;
  
     begin
!       --  Here E is a type or a subprogram
  
!       E_Scope := Scope (E);
  
!       --  This is an error protection against previous errors
! 
!       if No (E_Scope) then
!          Check_Error_Detected;
!          return;
        end if;
! 
!       --  The entity may be a subtype declared for a constrained record
!       --  component, in which case the relevant scope is the scope of
!       --  the record. This happens for class-wide subtypes created for
!       --  a constrained type extension with inherited discriminants.
! 
!       if Is_Type (E_Scope)
!         and then not Is_Concurrent_Type (E_Scope)
!       then
!          E_Scope := Scope (E_Scope);
! 
!       --  The entity may be a subtype declared for an iterator
! 
!       elsif Ekind (E_Scope) = E_Loop then
!          E_Scope := Scope (E_Scope);
!       end if;
! 
!       --  If we are freezing entities defined in protected types, they belong
!       --  in the enclosing scope, given that the original type has been
!       --  expanded away. The same is true for entities in task types, in
!       --  particular the parameter records of entries (Entities in bodies are
!       --  all frozen within the body). If we are in the task body, this is a
!       --  proper scope. If we are within a subprogram body, the proper scope
!       --  is the corresponding spec. This may happen for itypes generated in
!       --  the bodies of protected operations.
! 
!       if Ekind (E_Scope) = E_Protected_Type
!         or else (Ekind (E_Scope) = E_Task_Type
!                   and then not Has_Completion (E_Scope))
!       then
!          E_Scope := Scope (E_Scope);
! 
!       elsif Ekind (E_Scope) = E_Subprogram_Body then
!          E_Scope := Corresponding_Spec (Unit_Declaration_Node (E_Scope));
!       end if;
! 
!       --  If the scope of the entity is in open scopes, it is the current one
!       --  or an enclosing one, including a loop, a block, or a subprogram.
! 
!       if In_Open_Scopes (E_Scope) then
!          In_Other_Scope := False;
!          In_Outer_Scope := E_Scope /= Current_Scope;
! 
!       --  Otherwise it is a local package or a different compilation unit
! 
!       else
!          In_Other_Scope := True;
!          In_Outer_Scope := False;
!       end if;
! 
!       --  If the entity being frozen is defined in a scope that is not
!       --  currently on the scope stack, we must establish the proper
!       --  visibility before freezing the entity and related subprograms.
! 
!       if In_Other_Scope then
!          Push_Scope (E_Scope);
! 
!          --  Finalizers are little odd in terms of freezing. The spec of the
!          --  procedure appears in the declarations while the body appears in
!          --  the statement part of a single construct. Since the finalizer must
!          --  be called by the At_End handler of the construct, the spec is
!          --  manually frozen right after its declaration. The only side effect
!          --  of this action appears in contexts where the construct is not in
!          --  its final resting place. These contexts are:
! 
!          --    * Entry bodies - The declarations and statements are moved to
!          --      the procedure equivalen of the entry.
!          --    * Protected subprograms - The declarations and statements are
!          --      moved to the non-protected version of the subprogram.
!          --    * Task bodies - The declarations and statements are moved to the
!          --      task body procedure.
!          --    * Blocks that will be rewritten as subprograms when unnesting
!          --      is in effect.
! 
!          --  Visible declarations do not need to be installed in these three
!          --  cases since it does not make semantic sense to do so. All entities
!          --  referenced by a finalizer are visible and already resolved, plus
!          --  the enclosing scope may not have visible declarations at all.
! 
!          if Ekind (E) = E_Procedure
!            and then Is_Finalizer (E)
!            and then
!              (Is_Entry (E_Scope)
!                 or else (Is_Subprogram (E_Scope)
!                           and then Is_Protected_Type (Scope (E_Scope)))
!                 or else Is_Task_Type (E_Scope)
!                 or else Ekind (E_Scope) = E_Block)
!          then
!             null;
!          else
!             Install_Visible_Declarations (E_Scope);
!          end if;
! 
!          if Is_Concurrent_Type (E_Scope)
!            or else Is_Package_Or_Generic_Package (E_Scope)
!          then
!             Install_Private_Declarations (E_Scope);
!          end if;
! 
!       --  If the entity is in an outer scope, then that scope needs to
!       --  temporarily become the current scope so that operations created
!       --  during type freezing will be declared in the right scope and
!       --  can properly override any corresponding inherited operations.
! 
!       elsif In_Outer_Scope then
!          Push_Scope (E_Scope);
!       end if;
! 
!       --  Remember that we are processing a freezing entity and its freezing
!       --  nodes. This flag (non-zero = set) is used to avoid the need of
!       --  climbing through the tree while processing the freezing actions (ie.
!       --  to avoid generating spurious warnings or to avoid killing constant
!       --  indications while processing the code associated with freezing
!       --  actions). We use a counter to deal with nesting.
! 
!       Inside_Freezing_Actions := Inside_Freezing_Actions + 1;
! 
!       --  Currently only types require freezing in SPARK
! 
!       SPARK_Freeze_Type (N);
! 
!       --  Analyze actions in freeze node, if any
! 
!       Action := First (Actions (N));
!       while Present (Action) loop
!          Analyze (Action);
!          Next (Action);
!       end loop;
! 
!       --  Pop scope if we installed one for the analysis
! 
!       if In_Other_Scope then
!          if Ekind (Current_Scope) = E_Package then
!             End_Package_Scope (E_Scope);
!          else
!             End_Scope;
!          end if;
! 
!       elsif In_Outer_Scope then
!          Pop_Scope;
!       end if;
! 
!       --  Restore previous value of the nesting-level counter that records
!       --  whether we are inside a (possibly nested) call to this procedure.
! 
!       Inside_Freezing_Actions := Inside_Freezing_Actions - 1;
!    end Expand_SPARK_N_Freeze_Entity;
  
     ----------------------------------------
     -- Expand_SPARK_N_Attribute_Reference --
*************** package body Exp_SPARK is
*** 447,452 ****
--- 631,637 ----
                 Apply_Universal_Integer_Attribute_Checks (N);
  
                 if Present (Typ)
+                  and then Known_RM_Size (Typ)
                   and then RM_Size (Typ) = RM_Size (Standard_Long_Long_Integer)
                 then
                    --  ??? This should rather be a range check, but this would
*************** package body Exp_SPARK is
*** 700,703 ****
--- 885,999 ----
        end if;
     end Expand_SPARK_Potential_Renaming;
  
+    -----------------------
+    -- SPARK_Freeze_Type --
+    -----------------------
+ 
+    procedure SPARK_Freeze_Type (N : Entity_Id) is
+       Typ : constant Entity_Id := Entity (N);
+ 
+       Renamed_Eq : Node_Id;
+       --  Defining unit name for the predefined equality function in the case
+       --  where the type has a primitive operation that is a renaming of
+       --  predefined equality (but only if there is also an overriding
+       --  user-defined equality function). Used to pass this entity from
+       --  Make_Predefined_Primitive_Specs to Predefined_Primitive_Bodies.
+ 
+       Decl        : Node_Id;
+       Eq_Spec     : Node_Id := Empty;
+       Predef_List : List_Id;
+ 
+       Wrapper_Decl_List : List_Id;
+       Wrapper_Body_List : List_Id := No_List;
+ 
+       Saved_GM  : constant Ghost_Mode_Type := Ghost_Mode;
+       Saved_IGR : constant Node_Id         := Ignored_Ghost_Region;
+       --  Save the Ghost-related attributes to restore on exit
+ 
+    begin
+       --  The type being frozen may be subject to pragma Ghost. Set the mode
+       --  now to ensure that any nodes generated during freezing are properly
+       --  marked as Ghost.
+ 
+       Set_Ghost_Mode (Typ);
+ 
+       --  When a DIC is inherited by a tagged type, it may need to be
+       --  specialized to the descendant type, hence build a separate DIC
+       --  procedure for it as done during regular expansion for compilation.
+ 
+       if Has_DIC (Typ) and then Is_Tagged_Type (Typ) then
+          --  Why is this needed for DIC, but not for other aspects (such as
+          --  Type_Invariant)???
+ 
+          Build_DIC_Procedure_Body (Typ);
+       end if;
+ 
+       if Ekind (Typ) = E_Record_Type
+         and then Is_Tagged_Type (Typ)
+         and then not Is_Interface (Typ)
+         and then not Is_Limited_Type (Typ)
+       then
+          if Is_CPP_Class (Root_Type (Typ))
+            and then Convention (Typ) = Convention_CPP
+          then
+             null;
+ 
+          --  Do not add the spec of the predefined primitives if we are
+          --  compiling under restriction No_Dispatching_Calls.
+ 
+          elsif not Restriction_Active (No_Dispatching_Calls) then
+             Set_Is_Frozen (Typ, False);
+ 
+             Predef_List := New_List;
+             Exp_Ch3.Make_Predefined_Primitive_Eq_Spec
+               (Typ, Predef_List, Renamed_Eq);
+             Eq_Spec := First (Predef_List);
+             Insert_List_Before_And_Analyze (N, Predef_List);
+ 
+             Set_Is_Frozen (Typ);
+ 
+             --  Remove link from the parent list to the spec and body of
+             --  the dispatching equality, but keep the link in the opposite
+             --  direction, to allow up-traversal of the AST.
+ 
+             if Present (Eq_Spec) then
+                Decl := Parent (Eq_Spec);
+                Remove (Eq_Spec);
+                Set_Parent (Eq_Spec, Decl);
+             end if;
+          end if;
+       end if;
+ 
+       if Ekind (Typ) = E_Record_Type
+         and then Is_Tagged_Type (Typ)
+         and then not Is_CPP_Class (Typ)
+       then
+          --  Ada 2005 (AI-391): For a nonabstract null extension, create
+          --  wrapper functions for each nonoverridden inherited function
+          --  with a controlling result of the type. The wrapper for such
+          --  a function returns an extension aggregate that invokes the
+          --  parent function.
+ 
+          if Ada_Version >= Ada_2005
+            and then not Is_Abstract_Type (Typ)
+            and then Is_Null_Extension (Typ)
+          then
+             Exp_Ch3.Make_Controlling_Function_Wrappers
+               (Typ, Wrapper_Decl_List, Wrapper_Body_List);
+             Insert_List_Before_And_Analyze (N, Wrapper_Decl_List);
+          end if;
+ 
+          --  Ada 2005 (AI-391): If any wrappers were created for nonoverridden
+          --  inherited functions, then add their bodies to the AST, so they
+          --  will be processed like ordinary subprogram bodies (even though the
+          --  compiler adds them into the freezing action).
+ 
+          if not Is_Interface (Typ) then
+             Insert_List_Before_And_Analyze (N, Wrapper_Body_List);
+          end if;
+       end if;
+ 
+       Restore_Ghost_Region (Saved_GM, Saved_IGR);
+    end SPARK_Freeze_Type;
+ 
  end Exp_SPARK;
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_spark.ads gcc-12.1.0/gcc/ada/exp_spark.ads
*** gcc-11.3.0/gcc/ada/exp_spark.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_spark.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_strm.adb gcc-12.1.0/gcc/ada/exp_strm.adb
*** gcc-11.3.0/gcc/ada/exp_strm.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_strm.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,44 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Exp_Util; use Exp_Util;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Rtsfind;  use Rtsfind;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Uintp;    use Uintp;
  
  package body Exp_Strm is
  
--- 23,48 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Exp_Util;       use Exp_Util;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Rtsfind;        use Rtsfind;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
  
  package body Exp_Strm is
  
*************** package body Exp_Strm is
*** 620,626 ****
           end if;
  
        else pragma Assert (Is_Access_Type (U_Type));
!          if P_Size > System_Address_Size then
              Lib_RE := RE_I_AD;
           else
              Lib_RE := RE_I_AS;
--- 624,630 ----
           end if;
  
        else pragma Assert (Is_Access_Type (U_Type));
!          if Present (P_Size) and then P_Size > System_Address_Size then
              Lib_RE := RE_I_AD;
           else
              Lib_RE := RE_I_AS;
*************** package body Exp_Strm is
*** 864,870 ****
  
        else pragma Assert (Is_Access_Type (U_Type));
  
!          if P_Size > System_Address_Size then
              Lib_RE := RE_W_AD;
           else
              Lib_RE := RE_W_AS;
--- 868,874 ----
  
        else pragma Assert (Is_Access_Type (U_Type));
  
!          if Present (P_Size) and then P_Size > System_Address_Size then
              Lib_RE := RE_W_AD;
           else
              Lib_RE := RE_W_AS;
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_strm.ads gcc-12.1.0/gcc/ada/exp_strm.ads
*** gcc-11.3.0/gcc/ada/exp_strm.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_strm.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_tss.adb gcc-12.1.0/gcc/ada/exp_tss.adb
*** gcc-11.3.0/gcc/ada/exp_tss.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_tss.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,40 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Exp_Util; use Exp_Util;
! with Nlists;   use Nlists;
! with Lib;      use Lib;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
  
  package body Exp_Tss is
  
--- 23,43 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Exp_Util;       use Exp_Util;
! with Nlists;         use Nlists;
! with Lib;            use Lib;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
  
  package body Exp_Tss is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_tss.ads gcc-12.1.0/gcc/ada/exp_tss.ads
*** gcc-11.3.0/gcc/ada/exp_tss.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_tss.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_unst.adb gcc-12.1.0/gcc/ada/exp_unst.adb
*** gcc-11.3.0/gcc/ada/exp_unst.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_unst.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2014-2022, 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- --
***************
*** 23,52 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Exp_Util; use Exp_Util;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
  with Opt;
! with Output;   use Output;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Mech; use Sem_Mech;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
  
  package body Exp_Unst is
  
--- 23,56 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Exp_Util;       use Exp_Util;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
  with Opt;
! with Output;         use Output;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Mech;       use Sem_Mech;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
  
  package body Exp_Unst is
  
*************** package body Exp_Unst is
*** 187,193 ****
  
     begin
        Typ := Make_Temporary (Loc, 'S');
!       Set_Ekind (Typ, E_General_Access_Type);
        Set_Etype (Typ, Typ);
        Set_Scope (Typ, Scop);
        Set_Directly_Designated_Type (Typ, Etype (E));
--- 191,197 ----
  
     begin
        Typ := Make_Temporary (Loc, 'S');
!       Mutate_Ekind (Typ, E_General_Access_Type);
        Set_Etype (Typ, Typ);
        Set_Scope (Typ, Scop);
        Set_Directly_Designated_Type (Typ, Etype (E));
*************** package body Exp_Unst is
*** 266,272 ****
     begin
        pragma Assert (Is_Subprogram (E));
  
!       if Subps_Index (E) = Uint_0 then
           E := Ultimate_Alias (E);
  
           --  The body of a protected operation has a different name and
--- 270,278 ----
     begin
        pragma Assert (Is_Subprogram (E));
  
!       if Field_Is_Initial_Zero (E, F_Subps_Index)
!         or else Subps_Index (E) = Uint_0
!       then
           E := Ultimate_Alias (E);
  
           --  The body of a protected operation has a different name and
*************** package body Exp_Unst is
*** 527,540 ****
                    --  Entity name case. Make sure that the entity is declared
                    --  in a subprogram. This may not be the case for a type in a
                    --  loop appearing in a precondition.
!                   --  Exclude explicitly  discriminants (that can appear
!                   --  in bounds of discriminated components).
  
                    if Is_Entity_Name (N) then
                       if Present (Entity (N))
                         and then not Is_Type (Entity (N))
                         and then Present (Enclosing_Subprogram (Entity (N)))
!                        and then Ekind (Entity (N)) /= E_Discriminant
                       then
                          Note_Uplevel_Ref
                            (E      => Entity (N),
--- 533,549 ----
                    --  Entity name case. Make sure that the entity is declared
                    --  in a subprogram. This may not be the case for a type in a
                    --  loop appearing in a precondition.
!                   --  Exclude explicitly discriminants (that can appear
!                   --  in bounds of discriminated components) and enumeration
!                   --  literals.
  
                    if Is_Entity_Name (N) then
                       if Present (Entity (N))
                         and then not Is_Type (Entity (N))
                         and then Present (Enclosing_Subprogram (Entity (N)))
!                        and then
!                          Ekind (Entity (N))
!                            not in E_Discriminant | E_Enumeration_Literal
                       then
                          Note_Uplevel_Ref
                            (E      => Entity (N),
*************** package body Exp_Unst is
*** 876,884 ****
                       --  within Subp. Calls to Subp itself or to subprograms
                       --  outside the nested structure do not affect us.
  
!                      if Scope_Within (Ent, Subp)
!                        and then Is_Subprogram (Ent)
                         and then not Is_Imported (Ent)
                       then
                          Append_Unique_Call ((N, Current_Subprogram, Ent));
                       end if;
--- 885,895 ----
                       --  within Subp. Calls to Subp itself or to subprograms
                       --  outside the nested structure do not affect us.
  
!                      if Is_Subprogram (Ent)
!                        and then not Is_Generic_Subprogram (Ent)
                         and then not Is_Imported (Ent)
+                        and then not Is_Intrinsic_Subprogram (Ent)
+                        and then Scope_Within (Ultimate_Alias (Ent), Subp)
                       then
                          Append_Unique_Call ((N, Current_Subprogram, Ent));
                       end if;
*************** package body Exp_Unst is
*** 1558,1564 ****
  
                    --  A subprogram instantiation does not have an explicit
                    --  body. If unused, we could remove the corresponding
!                   --  wrapper package and its body (TBD).
  
                    if Present (STJ.Bod) then
                       Spec := Corresponding_Spec (STJ.Bod);
--- 1569,1575 ----
  
                    --  A subprogram instantiation does not have an explicit
                    --  body. If unused, we could remove the corresponding
!                   --  wrapper package and its body.
  
                    if Present (STJ.Bod) then
                       Spec := Corresponding_Spec (STJ.Bod);
*************** package body Exp_Unst is
*** 1744,1750 ****
  
                       procedure Add_Form_To_Spec (F : Entity_Id; S : Node_Id);
                       --  S is an N_Function/Procedure_Specification node, and F
!                      --  is the new entity to add to this subprogramn spec as
                       --  the last Extra_Formal.
  
                       ----------------------
--- 1755,1761 ----
  
                       procedure Add_Form_To_Spec (F : Entity_Id; S : Node_Id);
                       --  S is an N_Function/Procedure_Specification node, and F
!                      --  is the new entity to add to this subprogram spec as
                       --  the last Extra_Formal.
  
                       ----------------------
*************** package body Exp_Unst is
*** 1785,1791 ****
                       --  Decorate the new formal entity
  
                       Set_Scope                (Form, STJ.Ent);
!                      Set_Ekind                (Form, E_In_Parameter);
                       Set_Etype                (Form, STJE.ARECnPT);
                       Set_Mechanism            (Form, By_Copy);
                       Set_Never_Set_In_Source  (Form, True);
--- 1796,1802 ----
                       --  Decorate the new formal entity
  
                       Set_Scope                (Form, STJ.Ent);
!                      Mutate_Ekind             (Form, E_In_Parameter);
                       Set_Etype                (Form, STJE.ARECnPT);
                       Set_Mechanism            (Form, By_Copy);
                       Set_Never_Set_In_Source  (Form, True);
*************** package body Exp_Unst is
*** 2082,2088 ****
  
                                   --  Build and insert the assignment:
                                   --    ARECn.nam := nam'Address
!                                  --  or else 'Access for unconstrained array
  
                                   if Needs_Fat_Pointer (Ent) then
                                      Attr := Name_Unchecked_Access;
--- 2093,2100 ----
  
                                   --  Build and insert the assignment:
                                   --    ARECn.nam := nam'Address
!                                  --  or else 'Unchecked_Access for
!                                  --  unconstrained array.
  
                                   if Needs_Fat_Pointer (Ent) then
                                      Attr := Name_Unchecked_Access;
*************** package body Exp_Unst is
*** 2195,2201 ****
  
           begin
              --  Ignore type references, these are implicit references that do
!             --  not need rewriting (e.g. the appearence in a conversion).
              --  Also ignore if no reference was specified or if the rewriting
              --  has already been done (this can happen if the N_Identifier
              --  occurs more than one time in the tree). Also ignore references
--- 2207,2213 ----
  
           begin
              --  Ignore type references, these are implicit references that do
!             --  not need rewriting (e.g. the appearance in a conversion).
              --  Also ignore if no reference was specified or if the rewriting
              --  has already been done (this can happen if the N_Identifier
              --  occurs more than one time in the tree). Also ignore references
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_unst.ads gcc-12.1.0/gcc/ada/exp_unst.ads
*** gcc-11.3.0/gcc/ada/exp_unst.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_unst.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2014-2022, 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- --
*************** package Exp_Unst is
*** 636,642 ****
        --  the subprogram is declared but not actually referenced. We remove
        --  such subprograms from the tree, which simplifies our task, because
        --  we don't have to worry about e.g. uplevel references from such an
!       --  unreferenced subpogram, which might require (useless) activation
        --  records to be created. This is computed by setting the outer level
        --  subprogram (Subp itself) as reachable, and then doing a transitive
        --  closure following all calls.
--- 636,642 ----
        --  the subprogram is declared but not actually referenced. We remove
        --  such subprograms from the tree, which simplifies our task, because
        --  we don't have to worry about e.g. uplevel references from such an
!       --  unreferenced subprogram, which might require (useless) activation
        --  records to be created. This is computed by setting the outer level
        --  subprogram (Subp itself) as reachable, and then doing a transitive
        --  closure following all calls.
*************** package Exp_Unst is
*** 669,675 ****
        --  uplevel referenced. It contains both objects (which will be put in
        --  the corresponding AREC activation record), and types. The types are
        --  not put in the AREC activation record, but referenced bounds (i.e.
!       --  generated _FIRST and _LAST entites, and formal parameters) will be
        --  in the list in their own right.
  
        Last : SI_Type;
--- 669,675 ----
        --  uplevel referenced. It contains both objects (which will be put in
        --  the corresponding AREC activation record), and types. The types are
        --  not put in the AREC activation record, but referenced bounds (i.e.
!       --  generated _FIRST and _LAST entities, and formal parameters) will be
        --  in the list in their own right.
  
        Last : SI_Type;
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_util.adb gcc-12.1.0/gcc/ada/exp_util.adb
*** gcc-11.3.0/gcc/ada/exp_util.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_util.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,68 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Exp_Aggr; use Exp_Aggr;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_Ch7;  use Exp_Ch7;
! with Exp_Ch11; use Exp_Ch11;
! with Ghost;    use Ghost;
! with Inline;   use Inline;
! with Itypes;   use Itypes;
! with Lib;      use Lib;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch3;  use Sem_Ch3;
! 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_Disp; use Sem_Disp;
! with Sem_Elab; use Sem_Elab;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Type; use Sem_Type;
! with Sem_Util; use Sem_Util;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Validsw;  use Validsw;
  
  with GNAT.HTable;
  package body Exp_Util is
--- 23,72 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Aggr;       use Exp_Aggr;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Ch11;       use Exp_Ch11;
! with Freeze;         use Freeze;
! with Ghost;          use Ghost;
! with Inline;         use Inline;
! with Itypes;         use Itypes;
! with Lib;            use Lib;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch3;        use Sem_Ch3;
! 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_Disp;       use Sem_Disp;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Validsw;        use Validsw;
  
  with GNAT.HTable;
  package body Exp_Util is
*************** package body Exp_Util is
*** 311,320 ****
  
           if Present (Msg_Node) then
              Error_Msg_N
!               ("info: atomic synchronization set for &?N?", Msg_Node);
           else
              Error_Msg_N
!               ("info: atomic synchronization set?N?", N);
           end if;
        end if;
     end Activate_Atomic_Synchronization;
--- 315,324 ----
  
           if Present (Msg_Node) then
              Error_Msg_N
!               ("info: atomic synchronization set for &?.n?", Msg_Node);
           else
              Error_Msg_N
!               ("info: atomic synchronization set?.n?", N);
           end if;
        end if;
     end Activate_Atomic_Synchronization;
*************** package body Exp_Util is
*** 454,460 ****
        else
           Append (N, Actions (Fnode));
        end if;
- 
     end Append_Freeze_Action;
  
     ---------------------------
--- 458,463 ----
*************** package body Exp_Util is
*** 834,840 ****
        --  Optimize the case where we are using the default Global_Pool_Object,
        --  and we don't need the heavy finalization machinery.
  
!       elsif Pool_Id = RTE (RE_Global_Pool_Object)
          and then not Needs_Finalization (Desig_Typ)
        then
           return;
--- 837,843 ----
        --  Optimize the case where we are using the default Global_Pool_Object,
        --  and we don't need the heavy finalization machinery.
  
!       elsif Is_RTE (Pool_Id, RE_Global_Pool_Object)
          and then not Needs_Finalization (Desig_Typ)
        then
           return;
*************** package body Exp_Util is
*** 1266,1276 ****
     ---------------------------------
  
     procedure Build_Class_Wide_Expression
!      (Prag          : Node_Id;
!       Subp          : Entity_Id;
!       Par_Subp      : Entity_Id;
!       Adjust_Sloc   : Boolean;
!       Needs_Wrapper : out Boolean)
     is
        function Replace_Entity (N : Node_Id) return Traverse_Result;
        --  Replace reference to formal of inherited operation or to primitive
--- 1269,1278 ----
     ---------------------------------
  
     procedure Build_Class_Wide_Expression
!      (Pragma_Or_Expr : Node_Id;
!       Subp           : Entity_Id;
!       Par_Subp       : Entity_Id;
!       Adjust_Sloc    : Boolean)
     is
        function Replace_Entity (N : Node_Id) return Traverse_Result;
        --  Replace reference to formal of inherited operation or to primitive
*************** package body Exp_Util is
*** 1290,1296 ****
              Adjust_Inherited_Pragma_Sloc (N);
           end if;
  
!          if Nkind (N) = N_Identifier
             and then Present (Entity (N))
             and then
               (Is_Formal (Entity (N)) or else Is_Subprogram (Entity (N)))
--- 1292,1298 ----
              Adjust_Inherited_Pragma_Sloc (N);
           end if;
  
!          if Nkind (N) in N_Identifier | N_Expanded_Name | N_Operator_Symbol
             and then Present (Entity (N))
             and then
               (Is_Formal (Entity (N)) or else Is_Subprogram (Entity (N)))
*************** package body Exp_Util is
*** 1315,1397 ****
  
              if Present (New_E) then
                 Rewrite (N, New_Occurrence_Of (New_E, Sloc (N)));
- 
-                --  AI12-0166: a precondition for a protected operation
-                --  cannot include an internal call to a protected function
-                --  of the type. In the case of an inherited condition for an
-                --  overriding operation, both the operation and the function
-                --  are given by primitive wrappers.
-                --  Move this check to sem???
- 
-                if Ekind (New_E) = E_Function
-                  and then Is_Primitive_Wrapper (New_E)
-                  and then Is_Primitive_Wrapper (Subp)
-                  and then Scope (Subp) = Scope (New_E)
-                then
-                   Error_Msg_Node_2 := Wrapped_Entity (Subp);
-                   Error_Msg_NE
-                     ("internal call to& cannot appear in inherited "
-                      & "precondition of protected operation&",
-                      N, Wrapped_Entity (New_E));
-                end if;
- 
-                --  If the entity is an overridden primitive and we are not
-                --  in GNATprove mode, we must build a wrapper for the current
-                --  inherited operation. If the reference is the prefix of an
-                --  attribute such as 'Result (or others ???) there is no need
-                --  for a wrapper: the condition is just rewritten in terms of
-                --  the inherited subprogram.
- 
-                if Is_Subprogram (New_E)
-                   and then Nkind (Parent (N)) /= N_Attribute_Reference
-                   and then not GNATprove_Mode
-                then
-                   Needs_Wrapper := True;
-                end if;
-             end if;
- 
-             --  Check that there are no calls left to abstract operations if
-             --  the current subprogram is not abstract.
-             --  Move this check to sem???
- 
-             if Nkind (Parent (N)) = N_Function_Call
-               and then N = Name (Parent (N))
-             then
-                if not Is_Abstract_Subprogram (Subp)
-                  and then Is_Abstract_Subprogram (Entity (N))
-                then
-                   Error_Msg_Sloc   := Sloc (Current_Scope);
-                   Error_Msg_Node_2 := Subp;
-                   if Comes_From_Source (Subp) then
-                      Error_Msg_NE
-                        ("cannot call abstract subprogram & in inherited "
-                         & "condition for&#", Subp, Entity (N));
-                   else
-                      Error_Msg_NE
-                        ("cannot call abstract subprogram & in inherited "
-                         & "condition for inherited&#", Subp, Entity (N));
-                   end if;
- 
-                --  In SPARK mode, reject an inherited condition for an
-                --  inherited operation if it contains a call to an overriding
-                --  operation, because this implies that the pre/postconditions
-                --  of the inherited operation have changed silently.
- 
-                elsif SPARK_Mode = On
-                  and then Warn_On_Suspicious_Contract
-                  and then Present (Alias (Subp))
-                  and then Present (New_E)
-                  and then Comes_From_Source (New_E)
-                then
-                   Error_Msg_N
-                     ("cannot modify inherited condition (SPARK RM 6.1.1(1))",
-                      Parent (Subp));
-                   Error_Msg_Sloc   := Sloc (New_E);
-                   Error_Msg_Node_2 := Subp;
-                   Error_Msg_NE
-                     ("\overriding of&# forces overriding of&",
-                      Parent (Subp), New_E);
-                end if;
              end if;
  
              --  Update type of function call node, which should be the same as
--- 1317,1322 ----
*************** package body Exp_Util is
*** 1417,1442 ****
  
        --  Local variables
  
!       Par_Formal  : Entity_Id;
!       Subp_Formal : Entity_Id;
  
     --  Start of processing for Build_Class_Wide_Expression
  
     begin
!       Needs_Wrapper := False;
! 
!       --  Add mapping from old formals to new formals
! 
!       Par_Formal  := First_Formal (Par_Subp);
!       Subp_Formal := First_Formal (Subp);
! 
!       while Present (Par_Formal) and then Present (Subp_Formal) loop
!          Type_Map.Set (Par_Formal, Subp_Formal);
!          Next_Formal (Par_Formal);
!          Next_Formal (Subp_Formal);
!       end loop;
  
!       Replace_Condition_Entities (Prag);
     end Build_Class_Wide_Expression;
  
     --------------------
--- 1342,1358 ----
  
        --  Local variables
  
!       Par_Typ  : constant Entity_Id := Find_Dispatching_Type (Par_Subp);
!       Subp_Typ : constant Entity_Id := Find_Dispatching_Type (Subp);
  
     --  Start of processing for Build_Class_Wide_Expression
  
     begin
!       pragma Assert (Par_Typ /= Subp_Typ);
  
!       Update_Primitives_Mapping (Par_Subp, Subp);
!       Map_Formals (Par_Subp, Subp);
!       Replace_Condition_Entities (Pragma_Or_Expr);
     end Build_Class_Wide_Expression;
  
     --------------------
*************** package body Exp_Util is
*** 1462,1470 ****
          Make_Procedure_Call_Statement (Loc,
            Name                   => New_Occurrence_Of (Proc_Id, Loc),
            Parameter_Associations => New_List (
!             Make_Unchecked_Type_Conversion (Loc,
!               Subtype_Mark => New_Occurrence_Of (Formal_Typ, Loc),
!               Expression   => Obj_Name)));
     end Build_DIC_Call;
  
     ------------------------------
--- 1378,1384 ----
          Make_Procedure_Call_Statement (Loc,
            Name                   => New_Occurrence_Of (Proc_Id, Loc),
            Parameter_Associations => New_List (
!             Unchecked_Convert_To (Formal_Typ, Obj_Name)));
     end Build_DIC_Call;
  
     ------------------------------
*************** package body Exp_Util is
*** 1508,1514 ****
        --  Add a runtime check to verify assertion expression DIC_Expr of
        --  inherited pragma DIC_Prag. This routine applies class-wide pre-
        --  and postcondition-like runtime semantics to the check. Expr is
!       --  the assertion expression after substitition has been performed
        --  (via Replace_References). All generated code is added to list Stmts.
  
        procedure Add_Inherited_DICs
--- 1422,1428 ----
        --  Add a runtime check to verify assertion expression DIC_Expr of
        --  inherited pragma DIC_Prag. This routine applies class-wide pre-
        --  and postcondition-like runtime semantics to the check. Expr is
!       --  the assertion expression after substitution has been performed
        --  (via Replace_References). All generated code is added to list Stmts.
  
        procedure Add_Inherited_DICs
*************** package body Exp_Util is
*** 1854,1865 ****
           end if;
  
           --  Once the DIC assertion expression is fully processed, add a check
!          --  to the statements of the DIC procedure.
  
!          Add_DIC_Check
!            (DIC_Prag => DIC_Prag,
!             DIC_Expr => Expr,
!             Stmts    => Stmts);
        end Add_Own_DIC;
  
        ---------------------
--- 1768,1785 ----
           end if;
  
           --  Once the DIC assertion expression is fully processed, add a check
!          --  to the statements of the DIC procedure (unless the type is an
!          --  abstract type, in which case we don't want the possibility of
!          --  generating a call to an abstract function of the type; such DIC
!          --  procedures can never be called in any case, so not generating the
!          --  check at all is OK).
  
!          if not Is_Abstract_Type (DIC_Typ) or else GNATprove_Mode then
!             Add_DIC_Check
!               (DIC_Prag => DIC_Prag,
!                DIC_Expr => Expr,
!                Stmts    => Stmts);
!          end if;
        end Add_Own_DIC;
  
        ---------------------
*************** package body Exp_Util is
*** 1886,1892 ****
--- 1806,1838 ----
           Priv_Typ : Entity_Id;
           --  The partial view of Par_Typ
  
+          Op_Node  : Elmt_Id;
+          Par_Prim : Entity_Id;
+          Prim     : Entity_Id;
+ 
        begin
+          --  Map the overridden primitive to the overriding one; required by
+          --  Replace_References (called by Add_Inherited_DICs) to handle calls
+          --  to parent primitives.
+ 
+          Op_Node := First_Elmt (Primitive_Operations (T));
+          while Present (Op_Node) loop
+             Prim := Node (Op_Node);
+ 
+             if Present (Overridden_Operation (Prim))
+               and then Comes_From_Source (Prim)
+             then
+                Par_Prim := Overridden_Operation (Prim);
+ 
+                --  Create a mapping of the form:
+                --    parent type primitive -> derived type primitive
+ 
+                Type_Map.Set (Par_Prim, Prim);
+             end if;
+ 
+             Next_Elmt (Op_Node);
+          end loop;
+ 
           --  Climb the parent type chain
  
           Curr_Typ := T;
*************** package body Exp_Util is
*** 2088,2101 ****
                 Stmts    => Stmts);
           end if;
  
!       --  Otherwise the "full" DIC procedure verifies the DICs of the full
!       --  view, well as DICs inherited from parent types. In addition, it
!       --  indirectly verifies the DICs of the partial view by calling the
!       --  "partial" DIC procedure.
  
        else
-          pragma Assert (Present (Full_Typ));
- 
           --  Check the DIC of the partial view by calling the "partial" DIC
           --  procedure, unless the partial DIC body is empty. Generate:
  
--- 2034,2044 ----
                 Stmts    => Stmts);
           end if;
  
!       --  Otherwise, the "full" DIC procedure verifies the DICs inherited from
!       --  parent types, as well as indirectly verifying the DICs of the partial
!       --  view by calling the "partial" DIC procedure.
  
        else
           --  Check the DIC of the partial view by calling the "partial" DIC
           --  procedure, unless the partial DIC body is empty. Generate:
  
*************** package body Exp_Util is
*** 2109,2152 ****
                    New_Occurrence_Of (Obj_Id, Loc))));
           end if;
  
-          --  Derived subtypes do not have a partial view
- 
-          if Present (Priv_Typ) then
- 
-             --  The processing of the "full" DIC procedure intentionally
-             --  skips the partial view because a) this may result in changes of
-             --  visibility and b) lead to duplicate checks. However, when the
-             --  full view is the underlying full view of an untagged derived
-             --  type whose parent type is private, partial DICs appear on
-             --  the rep item chain of the partial view only.
- 
-             --    package Pack_1 is
-             --       type Root ... is private;
-             --    private
-             --       <full view of Root>
-             --    end Pack_1;
- 
-             --    with Pack_1;
-             --    package Pack_2 is
-             --       type Child is new Pack_1.Root with Type_DIC => ...;
-             --       <underlying full view of Child>
-             --    end Pack_2;
- 
-             --  As a result, the processing of the full view must also consider
-             --  all DICs of the partial view.
- 
-             if Is_Untagged_Private_Derivation (Priv_Typ, Full_Typ) then
-                null;
- 
-             --  Otherwise the DICs of the partial view are ignored
- 
-             else
-                --  Ignore the DICs of the partial view by eliminating the view
- 
-                Priv_Typ := Empty;
-             end if;
-          end if;
- 
           --  Process inherited Default_Initial_Conditions for all parent types
  
           Add_Parent_DICs (Work_Typ, Obj_Id, Stmts);
--- 2052,2057 ----
*************** package body Exp_Util is
*** 2180,2186 ****
  
        --  Perform minor decoration in case the body is not analyzed
  
!       Set_Ekind        (Proc_Body_Id, E_Subprogram_Body);
        Set_Etype        (Proc_Body_Id, Standard_Void_Type);
        Set_Scope        (Proc_Body_Id, Current_Scope);
        Set_SPARK_Pragma (Proc_Body_Id, SPARK_Pragma (Proc_Id));
--- 2085,2091 ----
  
        --  Perform minor decoration in case the body is not analyzed
  
!       Mutate_Ekind     (Proc_Body_Id, E_Subprogram_Body);
        Set_Etype        (Proc_Body_Id, Standard_Void_Type);
        Set_Scope        (Proc_Body_Id, Current_Scope);
        Set_SPARK_Pragma (Proc_Body_Id, SPARK_Pragma (Proc_Id));
*************** package body Exp_Util is
*** 2347,2353 ****
  
        --  Perform minor decoration in case the declaration is not analyzed
  
!       Set_Ekind                  (Proc_Id, E_Procedure);
        Set_Etype                  (Proc_Id, Standard_Void_Type);
        Set_Is_DIC_Procedure       (Proc_Id);
        Set_Scope                  (Proc_Id, Current_Scope);
--- 2252,2258 ----
  
        --  Perform minor decoration in case the declaration is not analyzed
  
!       Mutate_Ekind               (Proc_Id, E_Procedure);
        Set_Etype                  (Proc_Id, Standard_Void_Type);
        Set_Is_DIC_Procedure       (Proc_Id);
        Set_Scope                  (Proc_Id, Current_Scope);
*************** package body Exp_Util is
*** 2399,2405 ****
  
        --  Perform minor decoration in case the declaration is not analyzed
  
!       Set_Ekind (Obj_Id, E_In_Parameter);
        Set_Etype (Obj_Id, Work_Typ);
        Set_Scope (Obj_Id, Proc_Id);
  
--- 2304,2310 ----
  
        --  Perform minor decoration in case the declaration is not analyzed
  
!       Mutate_Ekind (Obj_Id, E_In_Parameter);
        Set_Etype (Obj_Id, Work_Typ);
        Set_Scope (Obj_Id, Proc_Id);
  
*************** package body Exp_Util is
*** 2943,2949 ****
           if Inherited and Opt.List_Inherited_Aspects then
              Error_Msg_Sloc := Sloc (Prag);
              Error_Msg_N
!               ("info: & inherits `Invariant''Class` aspect from #?L?", Typ);
           end if;
  
           --  Add the pragma to the list of processed pragmas
--- 2848,2854 ----
           if Inherited and Opt.List_Inherited_Aspects then
              Error_Msg_Sloc := Sloc (Prag);
              Error_Msg_N
!               ("info: & inherits `Invariant''Class` aspect from #?.l?", Typ);
           end if;
  
           --  Add the pragma to the list of processed pragmas
*************** package body Exp_Util is
*** 3669,3675 ****
  
        --  Perform minor decoration in case the body is not analyzed
  
!       Set_Ekind (Proc_Body_Id, E_Subprogram_Body);
        Set_Etype (Proc_Body_Id, Standard_Void_Type);
        Set_Scope (Proc_Body_Id, Current_Scope);
  
--- 3574,3580 ----
  
        --  Perform minor decoration in case the body is not analyzed
  
!       Mutate_Ekind (Proc_Body_Id, E_Subprogram_Body);
        Set_Etype (Proc_Body_Id, Standard_Void_Type);
        Set_Scope (Proc_Body_Id, Current_Scope);
  
*************** package body Exp_Util is
*** 3807,3813 ****
  
        --  Perform minor decoration in case the declaration is not analyzed
  
!       Set_Ekind (Proc_Id, E_Procedure);
        Set_Etype (Proc_Id, Standard_Void_Type);
        Set_Scope (Proc_Id, Current_Scope);
  
--- 3712,3718 ----
  
        --  Perform minor decoration in case the declaration is not analyzed
  
!       Mutate_Ekind (Proc_Id, E_Procedure);
        Set_Etype (Proc_Id, Standard_Void_Type);
        Set_Scope (Proc_Id, Current_Scope);
  
*************** package body Exp_Util is
*** 3847,3853 ****
        --  Anonymous arrays in object declarations have no explicit declaration
        --  so use the related object declaration as the insertion point.
  
!       elsif Is_Itype (Work_Typ) and then Is_Array_Type (Work_Typ)  then
           Typ_Decl := Associated_Node_For_Itype (Work_Typ);
  
        --  Derived types with the full view as parent do not have a partial
--- 3752,3758 ----
        --  Anonymous arrays in object declarations have no explicit declaration
        --  so use the related object declaration as the insertion point.
  
!       elsif Is_Itype (Work_Typ) and then Is_Array_Type (Work_Typ) then
           Typ_Decl := Associated_Node_For_Itype (Work_Typ);
  
        --  Derived types with the full view as parent do not have a partial
*************** package body Exp_Util is
*** 3893,3899 ****
  
        --  Perform minor decoration in case the declaration is not analyzed
  
!       Set_Ekind (Obj_Id, E_In_Parameter);
        Set_Etype (Obj_Id, Obj_Typ);
        Set_Scope (Obj_Id, Proc_Id);
  
--- 3798,3804 ----
  
        --  Perform minor decoration in case the declaration is not analyzed
  
!       Mutate_Ekind (Obj_Id, E_In_Parameter);
        Set_Etype (Obj_Id, Obj_Typ);
        Set_Scope (Obj_Id, Proc_Id);
  
*************** package body Exp_Util is
*** 4697,4703 ****
        --    type Ptr_Typ is access all Desig_Typ;
  
        Ptr_Typ := Make_Temporary (Loc, 'A');
!       Set_Ekind (Ptr_Typ, E_General_Access_Type);
        Set_Directly_Designated_Type (Ptr_Typ, Desig_Typ);
  
        Ptr_Decl :=
--- 4602,4608 ----
        --    type Ptr_Typ is access all Desig_Typ;
  
        Ptr_Typ := Make_Temporary (Loc, 'A');
!       Mutate_Ekind (Ptr_Typ, E_General_Access_Type);
        Set_Directly_Designated_Type (Ptr_Typ, Desig_Typ);
  
        Ptr_Decl :=
*************** package body Exp_Util is
*** 4714,4720 ****
        --    Hook : Ptr_Typ := null;
  
        Hook_Id := Make_Temporary (Loc, 'T');
!       Set_Ekind (Hook_Id, E_Variable);
        Set_Etype (Hook_Id, Ptr_Typ);
  
        Hook_Decl :=
--- 4619,4625 ----
        --    Hook : Ptr_Typ := null;
  
        Hook_Id := Make_Temporary (Loc, 'T');
!       Mutate_Ekind (Hook_Id, E_Variable);
        Set_Etype (Hook_Id, Ptr_Typ);
  
        Hook_Decl :=
*************** package body Exp_Util is
*** 4878,4888 ****
        --  record or bit-packed array, then everything is fine, since the back
        --  end can handle these cases correctly.
  
!       elsif Esize (Comp) <= System_Max_Integer_Size
          and then (Is_Record_Type (UT) or else Is_Bit_Packed_Array (UT))
        then
           return False;
  
        --  Otherwise if the component is not byte aligned, we know we have the
        --  nasty unaligned case.
  
--- 4783,4797 ----
        --  record or bit-packed array, then everything is fine, since the back
        --  end can handle these cases correctly.
  
!       elsif Known_Esize (Comp)
!         and then Esize (Comp) <= System_Max_Integer_Size
          and then (Is_Record_Type (UT) or else Is_Bit_Packed_Array (UT))
        then
           return False;
  
+       elsif not Known_Normalized_First_Bit (Comp) then
+          return True;
+ 
        --  Otherwise if the component is not byte aligned, we know we have the
        --  nasty unaligned case.
  
*************** package body Exp_Util is
*** 4902,4908 ****
     -- Convert_To_Actual_Subtype --
     -------------------------------
  
!    procedure Convert_To_Actual_Subtype (Exp : Entity_Id) is
        Act_ST : Entity_Id;
  
     begin
--- 4811,4817 ----
     -- Convert_To_Actual_Subtype --
     -------------------------------
  
!    procedure Convert_To_Actual_Subtype (Exp : Node_Id) is
        Act_ST : Entity_Id;
  
     begin
*************** package body Exp_Util is
*** 5305,5310 ****
--- 5214,5408 ----
        end if;
     end Evolve_Or_Else;
  
+    -------------------------------
+    -- Expand_Sliding_Conversion --
+    -------------------------------
+ 
+    procedure Expand_Sliding_Conversion (N : Node_Id; Arr_Typ : Entity_Id) is
+ 
+       pragma Assert (Is_Array_Type (Arr_Typ)
+                       and then not Is_Constrained (Arr_Typ)
+                       and then Is_Fixed_Lower_Bound_Array_Subtype (Arr_Typ));
+ 
+       Constraints : List_Id;
+       Index       : Node_Id := First_Index (Arr_Typ);
+       Loc         : constant Source_Ptr := Sloc (N);
+       Subt_Decl   : Node_Id;
+       Subt        : Entity_Id;
+       Subt_Low    : Node_Id;
+       Subt_High   : Node_Id;
+ 
+       Act_Subt    : Entity_Id;
+       Act_Index   : Node_Id;
+       Act_Low     : Node_Id;
+       Act_High    : Node_Id;
+       Adjust_Incr : Node_Id;
+       Dimension   : Int := 0;
+       All_FLBs_Match : Boolean := True;
+ 
+    begin
+       --  This procedure is called during semantic analysis, and we only expand
+       --  a sliding conversion when Expander_Active, to avoid doing it during
+       --  preanalysis (which can lead to problems with the target subtype not
+       --  getting properly expanded during later full analysis). Also, sliding
+       --  should never be needed for string literals, because their bounds are
+       --  determined directly based on the fixed lower bound of Arr_Typ and
+       --  their length.
+ 
+       if Expander_Active and then Nkind (N) /= N_String_Literal then
+          Constraints := New_List;
+ 
+          Act_Subt  := Get_Actual_Subtype (N);
+          Act_Index := First_Index (Act_Subt);
+ 
+          --  Loop over the indexes of the fixed-lower-bound array type or
+          --  subtype to build up an index constraint for constructing the
+          --  subtype that will be the target of a conversion of the array
+          --  object that may need a sliding conversion.
+ 
+          while Present (Index) loop
+             pragma Assert (Present (Act_Index));
+ 
+             Dimension := Dimension + 1;
+ 
+             Get_Index_Bounds (Act_Index, Act_Low, Act_High);
+ 
+             --  If Index defines a normal unconstrained range (range <>),
+             --  then we will simply use the bounds of the actual subtype's
+             --  corresponding index range.
+ 
+             if not Is_Fixed_Lower_Bound_Index_Subtype (Etype (Index)) then
+                Subt_Low  := Act_Low;
+                Subt_High := Act_High;
+ 
+             --  Otherwise, a range will be created with a low bound given by
+             --  the fixed lower bound of the array subtype's index, and with
+             --  high bound given by (Actual'Length + fixed lower bound - 1).
+ 
+             else
+                if Nkind (Index) = N_Subtype_Indication then
+                   Subt_Low :=
+                     New_Copy_Tree
+                       (Low_Bound (Range_Expression (Constraint (Index))));
+                else
+                   pragma Assert (Nkind (Index) = N_Range);
+ 
+                   Subt_Low := New_Copy_Tree (Low_Bound (Index));
+                end if;
+ 
+                --  If either we have a nonstatic lower bound, or the target and
+                --  source subtypes are statically known to have unequal lower
+                --  bounds, then we will need to make a subtype conversion to
+                --  slide the bounds. However, if all of the indexes' lower
+                --  bounds are static and known to be equal (the common case),
+                --  then no conversion will be needed, and we'll end up not
+                --  creating the subtype or the conversion (though we still
+                --  build up the index constraint, which will simply be unused).
+ 
+                if not (Compile_Time_Known_Value (Subt_Low)
+                         and then Compile_Time_Known_Value (Act_Low))
+                  or else Expr_Value (Subt_Low) /= Expr_Value (Act_Low)
+                then
+                   All_FLBs_Match := False;
+                end if;
+ 
+                --  Apply 'Pos to lower bound, which may be of an enumeration
+                --  type, before subtracting.
+ 
+                Adjust_Incr :=
+                  Make_Op_Subtract (Loc,
+                    Make_Attribute_Reference (Loc,
+                       Prefix         =>
+                         New_Occurrence_Of (Etype (Act_Index), Loc),
+                       Attribute_Name =>
+                         Name_Pos,
+                       Expressions    =>
+                         New_List (New_Copy_Tree (Subt_Low))),
+                    Make_Integer_Literal (Loc, 1));
+ 
+                --  Apply 'Val to the result of adding the increment to the
+                --  length, to handle indexes of enumeration types.
+ 
+                Subt_High :=
+                  Make_Attribute_Reference (Loc,
+                    Prefix         =>
+                      New_Occurrence_Of (Etype (Act_Index), Loc),
+                    Attribute_Name =>
+                      Name_Val,
+                    Expressions    =>
+                      New_List (Make_Op_Add (Loc,
+                                  Make_Attribute_Reference (Loc,
+                                    Prefix         =>
+                                      New_Occurrence_Of (Act_Subt, Loc),
+                                    Attribute_Name =>
+                                      Name_Length,
+                                    Expressions    =>
+                                      New_List
+                                        (Make_Integer_Literal
+                                           (Loc, Dimension))),
+                                  Adjust_Incr)));
+             end if;
+ 
+             Append (Make_Range (Loc, Subt_Low, Subt_High), Constraints);
+ 
+             Next (Index);
+             Next (Act_Index);
+          end loop;
+ 
+          --  If for each index with a fixed lower bound (FLB), the lower bound
+          --  of the corresponding index of the actual subtype is statically
+          --  known be equal to the FLB, then a sliding conversion isn't needed
+          --  at all, so just return without building a subtype or conversion.
+ 
+          if All_FLBs_Match then
+             return;
+          end if;
+ 
+          --  A sliding conversion is needed, so create the target subtype using
+          --  the index constraint created above, and rewrite the expression
+          --  as a conversion to that subtype.
+ 
+          Subt := Make_Temporary (Loc, 'S', Related_Node => N);
+          Set_Is_Internal (Subt);
+ 
+          Subt_Decl :=
+            Make_Subtype_Declaration (Loc,
+              Defining_Identifier => Subt,
+              Subtype_Indication  =>
+                Make_Subtype_Indication (Loc,
+                  Subtype_Mark =>
+                    New_Occurrence_Of (Arr_Typ,  Loc),
+                  Constraint   =>
+                    Make_Index_Or_Discriminant_Constraint (Loc,
+                      Constraints => Constraints)));
+ 
+          Mark_Rewrite_Insertion (Subt_Decl);
+ 
+          --  The actual subtype is an Itype, so we analyze the declaration,
+          --  but do not attach it to the tree.
+ 
+          Set_Parent (Subt_Decl, N);
+          Set_Is_Itype (Subt);
+          Analyze (Subt_Decl, Suppress => All_Checks);
+          Set_Associated_Node_For_Itype (Subt, N);
+          Set_Has_Delayed_Freeze (Subt, False);
+ 
+          --  We need to freeze the actual subtype immediately.  This is needed
+          --  because otherwise this Itype will not get frozen at all, and it is
+          --  always safe to freeze on creation because any associated types
+          --  must be frozen at this point.
+ 
+          Freeze_Itype (Subt, N);
+ 
+          Rewrite (N,
+                   Make_Type_Conversion (Loc,
+                     Subtype_Mark =>
+                       New_Occurrence_Of (Subt, Loc),
+                     Expression   => Relocate_Node (N)));
+          Analyze (N);
+       end if;
+    end Expand_Sliding_Conversion;
+ 
     -----------------------------------------
     -- Expand_Static_Predicates_In_Choices --
     -----------------------------------------
*************** package body Exp_Util is
*** 5312,5318 ****
     procedure Expand_Static_Predicates_In_Choices (N : Node_Id) is
        pragma Assert (Nkind (N) in N_Case_Statement_Alternative | N_Variant);
  
!       Choices : constant List_Id := Discrete_Choices (N);
  
        Choice : Node_Id;
        Next_C : Node_Id;
--- 5410,5416 ----
     procedure Expand_Static_Predicates_In_Choices (N : Node_Id) is
        pragma Assert (Nkind (N) in N_Case_Statement_Alternative | N_Variant);
  
!       Choices : List_Id := Discrete_Choices (N);
  
        Choice : Node_Id;
        Next_C : Node_Id;
*************** package body Exp_Util is
*** 5320,5325 ****
--- 5418,5430 ----
        C      : Node_Id;
  
     begin
+       --  If this is an "others" alternative, we need to process any static
+       --  predicates in its Others_Discrete_Choices.
+ 
+       if Nkind (First (Choices)) = N_Others_Choice then
+          Choices := Others_Discrete_Choices (First (Choices));
+       end if;
+ 
        Choice := First (Choices);
        while Present (Choice) loop
           Next_C := Next (Choice);
*************** package body Exp_Util is
*** 6151,6156 ****
--- 6256,6287 ----
        raise Program_Error;
     end Find_Protection_Type;
  
+    function Find_Storage_Op
+      (Typ : Entity_Id;
+       Nam : Name_Id) return Entity_Id
+    is
+       use Sem_Util.Storage_Model_Support;
+ 
+    begin
+       if Has_Storage_Model_Type_Aspect (Typ) then
+          declare
+             SMT_Op : constant Entity_Id :=
+                        Get_Storage_Model_Type_Entity (Typ, Nam);
+          begin
+             if not Present (SMT_Op) then
+                raise Program_Error;
+             else
+                return SMT_Op;
+             end if;
+          end;
+ 
+       --  Otherwise we assume that Typ is a descendant of Root_Storage_Pool
+ 
+       else
+          return Find_Prim_Op (Typ, Nam);
+       end if;
+    end Find_Storage_Op;
+ 
     -----------------------
     -- Find_Hook_Context --
     -----------------------
*************** package body Exp_Util is
*** 6203,6208 ****
--- 6334,6342 ----
                                          | N_Discriminant_Association
                                          | N_Parameter_Association
                                          | N_Pragma_Argument_Association
+                                         | N_Aggregate
+                                         | N_Delta_Aggregate
+                                         | N_Extension_Aggregate
                and then Nkind (Parent (Par)) not in N_Function_Call
                                                   | N_Procedure_Call_Statement
                                                   | N_Entry_Call_Statement
*************** package body Exp_Util is
*** 6381,6386 ****
--- 6515,6521 ----
        Related_Id    : Entity_Id := Empty;
        Is_Low_Bound  : Boolean   := False;
        Is_High_Bound : Boolean   := False;
+       Discr_Number  : Int       := 0;
        Mode          : Force_Evaluation_Mode := Relaxed)
     is
     begin
*************** package body Exp_Util is
*** 6392,6397 ****
--- 6527,6533 ----
           Related_Id         => Related_Id,
           Is_Low_Bound       => Is_Low_Bound,
           Is_High_Bound      => Is_High_Bound,
+          Discr_Number       => Discr_Number,
           Check_Side_Effects =>
             Is_Static_Expression (Exp)
               or else Mode = Relaxed);
*************** package body Exp_Util is
*** 6835,6841 ****
     -- Get_Index_Subtype --
     -----------------------
  
!    function Get_Index_Subtype (N : Node_Id) return Node_Id is
        P_Type : Entity_Id := Etype (Prefix (N));
        Indx   : Node_Id;
        J      : Int;
--- 6971,6977 ----
     -- Get_Index_Subtype --
     -----------------------
  
!    function Get_Index_Subtype (N : Node_Id) return Entity_Id is
        P_Type : Entity_Id := Etype (Prefix (N));
        Indx   : Node_Id;
        J      : Int;
*************** package body Exp_Util is
*** 6860,6865 ****
--- 6996,7010 ----
        return Etype (Indx);
     end Get_Index_Subtype;
  
+    -----------------------
+    -- Get_Mapped_Entity --
+    -----------------------
+ 
+    function Get_Mapped_Entity (E : Entity_Id) return Entity_Id is
+    begin
+       return Type_Map.Get (E);
+    end Get_Mapped_Entity;
+ 
     ---------------------
     -- Get_Stream_Size --
     ---------------------
*************** package body Exp_Util is
*** 7027,7033 ****
        Wrapped_Node : Node_Id := Empty;
  
     begin
!       if No (Ins_Actions) or else Is_Empty_List (Ins_Actions) then
           return;
        end if;
  
--- 7172,7178 ----
        Wrapped_Node : Node_Id := Empty;
  
     begin
!       if Is_Empty_List (Ins_Actions) then
           return;
        end if;
  
*************** package body Exp_Util is
*** 7193,7200 ****
  
                    --  Actions belong to the then expression, temporarily place
                    --  them as Then_Actions of the if expression. They will be
!                   --  moved to the proper place later when the if expression
!                   --  is expanded.
  
                    elsif N = ThenX then
                       if Present (Then_Actions (P)) then
--- 7338,7345 ----
  
                    --  Actions belong to the then expression, temporarily place
                    --  them as Then_Actions of the if expression. They will be
!                   --  moved to the proper place later when the if expression is
!                   --  expanded.
  
                    elsif N = ThenX then
                       if Present (Then_Actions (P)) then
*************** package body Exp_Util is
*** 7207,7216 ****
  
                       return;
  
!                   --  Actions belong to the else expression, temporarily place
!                   --  them as Else_Actions of the if expression. They will be
!                   --  moved to the proper place later when the if expression
!                   --  is expanded.
  
                    elsif N = ElseX then
                       if Present (Else_Actions (P)) then
--- 7352,7358 ----
  
                       return;
  
!                   --  Else_Actions is treated the same as Then_Actions above
  
                    elsif N = ElseX then
                       if Present (Else_Actions (P)) then
*************** package body Exp_Util is
*** 7477,7484 ****
                 | N_Iterated_Component_Association
                 | N_Iterated_Element_Association
              =>
!                if Nkind (Parent (P)) = N_Aggregate
!                  and then Present (Loop_Actions (P))
                 then
                    if Is_Empty_List (Loop_Actions (P)) then
                       Set_Loop_Actions (P, Ins_Actions);
--- 7619,7636 ----
                 | N_Iterated_Component_Association
                 | N_Iterated_Element_Association
              =>
!                if Nkind (Parent (P)) in N_Aggregate | N_Delta_Aggregate
! 
!                  --  We must not climb up out of an N_Iterated_xxx_Association
!                  --  because the actions might contain references to the loop
!                  --  parameter. But it turns out that setting the Loop_Actions
!                  --  attribute in the case of an N_Component_Association
!                  --  when the attribute was not already set can lead to
!                  --  (as yet not understood) bugboxes (gcc failures that are
!                  --  presumably due to malformed trees). So we don't do that.
! 
!                  and then (Nkind (P) /= N_Component_Association
!                             or else Present (Loop_Actions (P)))
                 then
                    if Is_Empty_List (Loop_Actions (P)) then
                       Set_Loop_Actions (P, Ins_Actions);
*************** package body Exp_Util is
*** 7764,7806 ****
        end if;
     end Insert_Actions_After;
  
-    ------------------------
-    -- Insert_Declaration --
-    ------------------------
- 
-    procedure Insert_Declaration (N : Node_Id; Decl : Node_Id) is
-       P : Node_Id;
- 
-    begin
-       pragma Assert (Nkind (N) in N_Subexpr);
- 
-       --  Climb until we find a procedure or a package
- 
-       P := N;
-       loop
-          pragma Assert (Present (Parent (P)));
-          P := Parent (P);
- 
-          if Is_List_Member (P) then
-             exit when Nkind (Parent (P)) in
-                         N_Package_Specification | N_Subprogram_Body;
- 
-             --  Special handling for handled sequence of statements, we must
-             --  insert in the statements not the exception handlers!
- 
-             if Nkind (Parent (P)) = N_Handled_Sequence_Of_Statements then
-                P := First (Statements (Parent (P)));
-                exit;
-             end if;
-          end if;
-       end loop;
- 
-       --  Now do the insertion
- 
-       Insert_Before (P, Decl);
-       Analyze (Decl);
-    end Insert_Declaration;
- 
     ---------------------------------
     -- Insert_Library_Level_Action --
     ---------------------------------
--- 7916,7921 ----
*************** package body Exp_Util is
*** 7852,7861 ****
     ----------------------
  
     function Inside_Init_Proc return Boolean is
-       Proc : constant Entity_Id := Enclosing_Init_Proc;
- 
     begin
!       return Proc /= Empty;
     end Inside_Init_Proc;
  
     ----------------------
--- 7967,7974 ----
     ----------------------
  
     function Inside_Init_Proc return Boolean is
     begin
!       return Present (Enclosing_Init_Proc);
     end Inside_Init_Proc;
  
     ----------------------
*************** package body Exp_Util is
*** 8630,8636 ****
     ----------------------------------
  
     function Is_Possibly_Unaligned_Object (N : Node_Id) return Boolean is
!       T  : constant Entity_Id := Etype (N);
  
     begin
        --  If renamed object, apply test to underlying object
--- 8743,8749 ----
     ----------------------------------
  
     function Is_Possibly_Unaligned_Object (N : Node_Id) return Boolean is
!       T : constant Entity_Id := Etype (N);
  
     begin
        --  If renamed object, apply test to underlying object
*************** package body Exp_Util is
*** 8727,8752 ****
                 end if;
              end if;
  
-             --  The following code is historical, it used to be present but it
-             --  is too cautious, because the front-end does not know the proper
-             --  default alignments for the target. Also, if the alignment is
-             --  not known, the front end can't know in any case. If a copy is
-             --  needed, the back-end will take care of it. This whole section
-             --  including this comment can be removed later ???
- 
-             --  If the component reference is for a record that has a specified
-             --  alignment, and we either know it is too small, or cannot tell,
-             --  then the component may be unaligned.
- 
-             --  What is the following commented out code ???
- 
-             --  if Known_Alignment (Etype (P))
-             --    and then Alignment (Etype (P)) < Ttypes.Maximum_Alignment
-             --    and then M > Alignment (Etype (P))
-             --  then
-             --     return True;
-             --  end if;
- 
              --  Case of component clause present which may specify an
              --  unaligned position.
  
--- 8840,8845 ----
*************** package body Exp_Util is
*** 8863,8869 ****
  
                 if Target_Strict_Alignment
                   and then Known_Alignment (Ptyp)
!                  and then (Unknown_Alignment (Styp)
                              or else Alignment (Styp) > Alignment (Ptyp))
                 then
                    return True;
--- 8956,8962 ----
  
                 if Target_Strict_Alignment
                   and then Known_Alignment (Ptyp)
!                  and then (not Known_Alignment (Styp)
                              or else Alignment (Styp) > Alignment (Ptyp))
                 then
                    return True;
*************** package body Exp_Util is
*** 8887,8893 ****
                 begin
                    if Present (Component_Clause (Field))
                      and then
!                       (Unknown_Alignment (Styp)
                          or else
                           (Component_Bit_Offset (Field) mod
                             (System_Storage_Unit * Alignment (Styp))) /= 0)
--- 8980,8986 ----
                 begin
                    if Present (Component_Clause (Field))
                      and then
!                       (not Known_Alignment (Styp)
                          or else
                           (Component_Bit_Offset (Field) mod
                             (System_Storage_Unit * Alignment (Styp))) /= 0)
*************** package body Exp_Util is
*** 9075,9081 ****
          Is_Class_Wide_Type (Etype (Obj_Id))
            and then Present (Expr)
            and then Nkind (Expr) = N_Unchecked_Type_Conversion
!           and then Etype (Expression (Expr)) = RTE (RE_Tag);
     end Is_Tag_To_Class_Wide_Conversion;
  
     --------------------------------
--- 9168,9174 ----
          Is_Class_Wide_Type (Etype (Obj_Id))
            and then Present (Expr)
            and then Nkind (Expr) = N_Unchecked_Type_Conversion
!           and then Is_RTE (Etype (Expression (Expr)), RE_Tag);
     end Is_Tag_To_Class_Wide_Conversion;
  
     --------------------------------
*************** package body Exp_Util is
*** 9196,9202 ****
  
        --  True if object reference with volatile type
  
!       elsif Is_Volatile_Object (N) then
           return True;
  
        --  True if reference to volatile entity
--- 9289,9295 ----
  
        --  True if object reference with volatile type
  
!       elsif Is_Volatile_Object_Ref (N) then
           return True;
  
        --  True if reference to volatile entity
*************** package body Exp_Util is
*** 9251,9278 ****
           if W then
  
              --  We suppress the warning if this code is under control of an
!             --  if statement, whose condition is a simple identifier, and
!             --  either we are in an instance, or warnings off is set for this
!             --  identifier. The reason for killing it in the instance case is
!             --  that it is common and reasonable for code to be deleted in
!             --  instances for various reasons.
  
!             --  Could we use Is_Statically_Unevaluated here???
  
!             if Nkind (Parent (N)) = N_If_Statement then
!                declare
!                   C : constant Node_Id := Condition (Parent (N));
!                begin
!                   if Nkind (C) = N_Identifier
!                     and then
!                       (In_Instance
!                         or else (Present (Entity (C))
!                                   and then Has_Warnings_Off (Entity (C))))
                    then
                       W := False;
                    end if;
!                end;
!             end if;
  
              --  Generate warning if not suppressed
  
--- 9344,9376 ----
           if W then
  
              --  We suppress the warning if this code is under control of an
!             --  if/case statement and either
!             --    a) we are in an instance and the condition/selector
!             --       has a statically known value; or
!             --    b) the condition/selector is a simple identifier and
!             --       warnings off is set for this identifier.
!             --  Dead code is common and reasonable in instances, so we don't
!             --  want a warning in that case.
  
!             declare
!                C : Node_Id := Empty;
!             begin
!                if Nkind (Parent (N)) = N_If_Statement then
!                   C := Condition (Parent (N));
!                elsif Nkind (Parent (N)) = N_Case_Statement_Alternative then
!                   C := Expression (Parent (Parent (N)));
!                end if;
  
!                if Present (C) then
!                   if (In_Instance and Compile_Time_Known_Value (C))
!                     or else (Nkind (C) = N_Identifier
!                              and then Present (Entity (C))
!                              and then Has_Warnings_Off (Entity (C)))
                    then
                       W := False;
                    end if;
!                end if;
!             end;
  
              --  Generate warning if not suppressed
  
*************** package body Exp_Util is
*** 9360,9373 ****
     begin
        W := Warn;
  
!       if Is_Non_Empty_List (L) then
!          N := First (L);
!          while Present (N) loop
!             Kill_Dead_Code (N, W);
!             W := False;
!             Next (N);
!          end loop;
!       end if;
     end Kill_Dead_Code;
  
     -----------------------------
--- 9458,9469 ----
     begin
        W := Warn;
  
!       N := First (L);
!       while Present (N) loop
!          Kill_Dead_Code (N, W);
!          W := False;
!          Next (N);
!       end loop;
     end Kill_Dead_Code;
  
     -----------------------------
*************** package body Exp_Util is
*** 9505,9511 ****
        --  end Equiv_T;
  
        Equiv_Type := Make_Temporary (Loc, 'T');
!       Set_Ekind (Equiv_Type, E_Record_Type);
        Set_Parent_Subtype (Equiv_Type, Constr_Root);
  
        --  Set Is_Class_Wide_Equivalent_Type very early to trigger the special
--- 9601,9607 ----
        --  end Equiv_T;
  
        Equiv_Type := Make_Temporary (Loc, 'T');
!       Mutate_Ekind (Equiv_Type, E_Record_Type);
        Set_Parent_Subtype (Equiv_Type, Constr_Root);
  
        --  Set Is_Class_Wide_Equivalent_Type very early to trigger the special
*************** package body Exp_Util is
*** 9830,9836 ****
              --  Nothing to do when the pragma lacks arguments, in which case it
              --  is illegal.
  
!             elsif No (Args) or else Is_Empty_List (Args) then
                 return False;
              end if;
  
--- 9926,9932 ----
              --  Nothing to do when the pragma lacks arguments, in which case it
              --  is illegal.
  
!             elsif Is_Empty_List (Args) then
                 return False;
              end if;
  
*************** package body Exp_Util is
*** 9997,10003 ****
  
           --  Define the dummy private subtype
  
!          Set_Ekind          (Priv_Subtyp, Subtype_Kind (Ekind (Unc_Typ)));
           Set_Etype          (Priv_Subtyp, Base_Type (Unc_Typ));
           Set_Scope          (Priv_Subtyp, Full_Subtyp);
           Set_Is_Constrained (Priv_Subtyp);
--- 10093,10099 ----
  
           --  Define the dummy private subtype
  
!          Mutate_Ekind       (Priv_Subtyp, Subtype_Kind (Ekind (Unc_Typ)));
           Set_Etype          (Priv_Subtyp, Base_Type (Unc_Typ));
           Set_Scope          (Priv_Subtyp, Full_Subtyp);
           Set_Is_Constrained (Priv_Subtyp);
*************** package body Exp_Util is
*** 10155,10160 ****
--- 10251,10286 ----
        end if;
     end Make_Variant_Comparison;
  
+    -----------------
+    -- Map_Formals --
+    -----------------
+ 
+    procedure Map_Formals
+      (Parent_Subp  : Entity_Id;
+       Derived_Subp : Entity_Id;
+       Force_Update : Boolean := False)
+    is
+       Par_Formal  : Entity_Id := First_Formal (Parent_Subp);
+       Subp_Formal : Entity_Id := First_Formal (Derived_Subp);
+ 
+    begin
+       if Force_Update then
+          Type_Map.Set (Parent_Subp, Derived_Subp);
+       end if;
+ 
+       --  At this stage either we are under regular processing and the caller
+       --  has previously ensured that these primitives are already mapped (by
+       --  means of calling previously to Update_Primitives_Mapping), or we are
+       --  processing a late-overriding primitive and Force_Update updated above
+       --  the mapping of these primitives.
+ 
+       while Present (Par_Formal) and then Present (Subp_Formal) loop
+          Type_Map.Set (Par_Formal, Subp_Formal);
+          Next_Formal (Par_Formal);
+          Next_Formal (Subp_Formal);
+       end loop;
+    end Map_Formals;
+ 
     ---------------
     -- Map_Types --
     ---------------
*************** package body Exp_Util is
*** 10267,10272 ****
--- 10393,10406 ----
           --  inherited ancestor primitive.
  
           elsif Present (Inher_Prim) then
+             --  It is possible that an internally generated alias could be
+             --  set to a subprogram which overrides the same aliased primitive,
+             --  so return Empty in this case.
+ 
+             if Ancestor_Primitive (Inher_Prim) = Subp then
+                return Empty;
+             end if;
+ 
              return Inher_Prim;
  
           --  Otherwise the current subprogram is the root of the inheritance or
*************** package body Exp_Util is
*** 10450,10456 ****
                    end if;
  
                 --  Otherwise the constraint denotes a reference to some name
!                --  which results in a Girder discriminant:
  
                 --    vvvv
                 --    Name : ...;
--- 10584,10590 ----
                    end if;
  
                 --  Otherwise the constraint denotes a reference to some name
!                --  which results in a Stored discriminant:
  
                 --    vvvv
                 --    Name : ...;
*************** package body Exp_Util is
*** 10471,10477 ****
                 return Find_Constraint_Value (Entity (Constr));
  
              --  Otherwise the current constraint is an expression which yields
!             --  a Girder discriminant:
  
              --    type Typ (D1 : ...; DN : ...) is
              --      new Anc (Discr => <expression>) with ...
--- 10605,10611 ----
                 return Find_Constraint_Value (Entity (Constr));
  
              --  Otherwise the current constraint is an expression which yields
!             --  a Stored discriminant:
  
              --    type Typ (D1 : ...; DN : ...) is
              --      new Anc (Discr => <expression>) with ...
*************** package body Exp_Util is
*** 10546,10552 ****
           --    that D_2 constrains D_1, therefore if the algorithm finds the
           --    value of D_2, then this would also be the value for D_1.
  
!          --    2.2) The constraint is a name (aka Girder):
  
           --      Name : ...
           --      type Ancestor_1 (D_1 : ...) is tagged ...
--- 10680,10686 ----
           --    that D_2 constrains D_1, therefore if the algorithm finds the
           --    value of D_2, then this would also be the value for D_1.
  
!          --    2.2) The constraint is a name (aka Stored):
  
           --      Name : ...
           --      type Ancestor_1 (D_1 : ...) is tagged ...
*************** package body Exp_Util is
*** 10555,10561 ****
           --    In this case the name is the final value of D_1 because the
           --    discriminant cannot be further constrained.
  
!          --    2.3) The constraint is an expression (aka Girder):
  
           --      type Ancestor_1 (D_1 : ...) is tagged ...
           --      type Ancestor_2 is new Ancestor_1 (D_1 => 1 + 2) ...
--- 10689,10695 ----
           --    In this case the name is the final value of D_1 because the
           --    discriminant cannot be further constrained.
  
!          --    2.3) The constraint is an expression (aka Stored):
  
           --      type Ancestor_1 (D_1 : ...) is tagged ...
           --      type Ancestor_2 is new Ancestor_1 (D_1 => 1 + 2) ...
*************** package body Exp_Util is
*** 10666,10672 ****
           --  they relate to the primitives of the parent type. If there is a
           --  meaningful relation, create a mapping of the form:
  
!          --    parent type primitive -> perived type primitive
  
           if Present (Direct_Primitive_Operations (Deriv_Typ)) then
              Prim_Elmt := First_Elmt (Direct_Primitive_Operations (Deriv_Typ));
--- 10800,10806 ----
           --  they relate to the primitives of the parent type. If there is a
           --  meaningful relation, create a mapping of the form:
  
!          --    parent type primitive -> derived type primitive
  
           if Present (Direct_Primitive_Operations (Deriv_Typ)) then
              Prim_Elmt := First_Elmt (Direct_Primitive_Operations (Deriv_Typ));
*************** package body Exp_Util is
*** 10802,10827 ****
     --  At the current time, the only types that we return False for (i.e. where
     --  we decide we know they cannot generate large temps) are ones where we
     --  know the size is 256 bits or less at compile time, and we are still not
!    --  doing a thorough job on arrays and records ???
  
     function May_Generate_Large_Temp (Typ : Entity_Id) return Boolean is
     begin
        if not Size_Known_At_Compile_Time (Typ) then
           return False;
  
!       elsif Esize (Typ) /= 0 and then Esize (Typ) <= 256 then
           return False;
  
!       elsif Is_Array_Type (Typ)
          and then Present (Packed_Array_Impl_Type (Typ))
        then
           return May_Generate_Large_Temp (Packed_Array_Impl_Type (Typ));
- 
-       --  We could do more here to find other small types ???
- 
-       else
-          return True;
        end if;
     end May_Generate_Large_Temp;
  
     --------------------------------------------
--- 10936,10960 ----
     --  At the current time, the only types that we return False for (i.e. where
     --  we decide we know they cannot generate large temps) are ones where we
     --  know the size is 256 bits or less at compile time, and we are still not
!    --  doing a thorough job on arrays and records.
  
     function May_Generate_Large_Temp (Typ : Entity_Id) return Boolean is
     begin
        if not Size_Known_At_Compile_Time (Typ) then
           return False;
+       end if;
  
!       if Known_Esize (Typ) and then Esize (Typ) <= 256 then
           return False;
+       end if;
  
!       if Is_Array_Type (Typ)
          and then Present (Packed_Array_Impl_Type (Typ))
        then
           return May_Generate_Large_Temp (Packed_Array_Impl_Type (Typ));
        end if;
+ 
+       return True;
     end May_Generate_Large_Temp;
  
     --------------------------------------------
*************** package body Exp_Util is
*** 10923,10929 ****
  
        Set_Associated_Node_For_Itype (Res, N);
        Set_Comes_From_Source         (Res, False);
!       Set_Ekind                     (Res, E_Class_Wide_Subtype);
        Set_Etype                     (Res, Base_Type (CW_Typ));
        Set_Freeze_Node               (Res, Empty);
        Set_Is_Frozen                 (Res, False);
--- 11056,11062 ----
  
        Set_Associated_Node_For_Itype (Res, N);
        Set_Comes_From_Source         (Res, False);
!       Mutate_Ekind                  (Res, E_Class_Wide_Subtype);
        Set_Etype                     (Res, Base_Type (CW_Typ));
        Set_Freeze_Node               (Res, Empty);
        Set_Is_Frozen                 (Res, False);
*************** package body Exp_Util is
*** 11092,11097 ****
--- 11225,11231 ----
  
           when others =>
              if Is_Entity_Name (N)
+               and then Is_Object (Entity (N))
                and then Present (Renamed_Object (Entity (N)))
              then
                 return
*************** package body Exp_Util is
*** 11343,11349 ****
  
        Init_Call : Node_Id;
  
!    --  Start of processing for Find_Init_Call
  
     begin
        if Present (Initialization_Statements (Var)) then
--- 11477,11483 ----
  
        Init_Call : Node_Id;
  
!    --  Start of processing for Remove_Init_Call
  
     begin
        if Present (Initialization_Statements (Var)) then
*************** package body Exp_Util is
*** 11395,11402 ****
--- 11529,11557 ----
        end if;
  
        if Present (Init_Call) then
+          --  If restrictions have forbidden Aborts, the initialization call
+          --  for objects that require deep initialization has not been wrapped
+          --  into the following block (see Exp_Ch3, Default_Initialize_Object)
+          --  so if present remove it as well, and include the IP call in it,
+          --  in the rare case the caller may need to simply displace the
+          --  initialization, as is done for a later address specification.
+ 
+          if Nkind (Next (Init_Call)) = N_Block_Statement
+            and then Is_Initialization_Block (Next (Init_Call))
+          then
+             declare
+                IP_Call : constant Node_Id := Init_Call;
+             begin
+                Init_Call := Next (IP_Call);
+                Remove (IP_Call);
+                Prepend (IP_Call,
+                  Statements (Handled_Statement_Sequence (Init_Call)));
+             end;
+          end if;
+ 
           Remove (Init_Call);
        end if;
+ 
        return Init_Call;
     end Remove_Init_Call;
  
*************** package body Exp_Util is
*** 11412,11417 ****
--- 11567,11573 ----
        Related_Id         : Entity_Id := Empty;
        Is_Low_Bound       : Boolean   := False;
        Is_High_Bound      : Boolean   := False;
+       Discr_Number       : Int       := 0;
        Check_Side_Effects : Boolean   := True)
     is
        function Build_Temporary
*************** package body Exp_Util is
*** 11440,11458 ****
        is
           Temp_Id  : Entity_Id;
           Temp_Nam : Name_Id;
  
        begin
!          --  The context requires an external symbol
  
           if Present (Related_Id) then
              if Is_Low_Bound then
                 Temp_Nam := New_External_Name (Chars (Related_Id), "_FIRST");
!             else pragma Assert (Is_High_Bound);
                 Temp_Nam := New_External_Name (Chars (Related_Id), "_LAST");
              end if;
  
              Temp_Id := Make_Defining_Identifier (Loc, Temp_Nam);
  
           --  Otherwise generate an internal temporary
  
           else
--- 11596,11640 ----
        is
           Temp_Id  : Entity_Id;
           Temp_Nam : Name_Id;
+          Should_Set_Related_Expression : Boolean := False;
  
        begin
!          --  The context requires an external symbol : expression is
!          --  the bound of an array, or a discriminant value. We create
!          --  a unique string using the related entity and an appropriate
!          --  suffix, rather than a numeric serial number (used for internal
!          --  entities) that may vary depending on compilation options, in
!          --  particular on the Assertions_Enabled mode. This avoids spurious
!          --  link errors.
  
           if Present (Related_Id) then
              if Is_Low_Bound then
                 Temp_Nam := New_External_Name (Chars (Related_Id), "_FIRST");
! 
!             elsif Is_High_Bound then
                 Temp_Nam := New_External_Name (Chars (Related_Id), "_LAST");
+ 
+             else
+                pragma Assert (Discr_Number > 0);
+ 
+                --  We don't have any intelligible way of printing T_DISCR in
+                --  CodePeer. Thus, set a related expression in this case.
+ 
+                Should_Set_Related_Expression := True;
+ 
+                --  Use fully qualified name to avoid ambiguities.
+ 
+                Temp_Nam :=
+                   New_External_Name
+                    (Get_Qualified_Name (Related_Id), "_DISCR", Discr_Number);
              end if;
  
              Temp_Id := Make_Defining_Identifier (Loc, Temp_Nam);
  
+             if Should_Set_Related_Expression then
+                Set_Related_Expression (Temp_Id, Related_Nod);
+             end if;
+ 
           --  Otherwise generate an internal temporary
  
           else
*************** package body Exp_Util is
*** 11477,11483 ****
           return not Inside_A_Generic
             and then Full_Analysis
             and then Nkind (Enclosing_Declaration (Exp)) in
!                       N_Full_Type_Declaration
                      | N_Iterator_Specification
                      | N_Loop_Parameter_Specification
                      | N_Object_Renaming_Declaration
--- 11659,11666 ----
           return not Inside_A_Generic
             and then Full_Analysis
             and then Nkind (Enclosing_Declaration (Exp)) in
!                       N_Component_Declaration
!                     | N_Full_Type_Declaration
                      | N_Iterator_Specification
                      | N_Loop_Parameter_Specification
                      | N_Object_Renaming_Declaration
*************** package body Exp_Util is
*** 11558,11567 ****
--- 11741,11755 ----
        --  case and it is better not to make an additional one for the attribute
        --  itself, because the return type of many of them is universal integer,
        --  which is a very large type for a temporary.
+       --  The prefix of an attribute reference Reduce may be syntactically an
+       --  aggregate, but will be expanded into a loop, so no need to remove
+       --  side-effects.
  
        if Nkind (Exp) = N_Attribute_Reference
          and then Side_Effect_Free_Attribute (Attribute_Name (Exp))
          and then Side_Effect_Free (Expressions (Exp), Name_Req, Variable_Ref)
+         and then (Attribute_Name (Exp) /= Name_Reduce
+                    or else Nkind (Prefix (Exp)) /= N_Aggregate)
          and then not Is_Name_Reference (Prefix (Exp))
        then
           Remove_Side_Effects (Prefix (Exp), Name_Req, Variable_Ref);
*************** package body Exp_Util is
*** 12063,12069 ****
  
           --  Local variables
  
!          Context : constant Node_Id    := Parent (Ref);
           Loc     : constant Source_Ptr := Sloc (Ref);
           Ref_Id  : Entity_Id;
           Result  : Traverse_Result;
--- 12251,12259 ----
  
           --  Local variables
  
!          Context : constant Node_Id :=
!            (if No (Ref) then Empty else Parent (Ref));
! 
           Loc     : constant Source_Ptr := Sloc (Ref);
           Ref_Id  : Entity_Id;
           Result  : Traverse_Result;
*************** package body Exp_Util is
*** 12195,12209 ****
                 if Nkind (Context) in N_Subprogram_Call
                   and then No (Type_Map.Get (Entity (Name (Context))))
                 then
!                   New_Ref :=
!                     Convert_To (Type_Of_Formal (Context, Old_Ref), New_Ref);
  
!                   --  Do not process the generated type conversion because
!                   --  both the parent type and the derived type are in the
!                   --  Type_Map table. This will clobber the type conversion
!                   --  by resetting its subtype mark.
  
!                   Result := Skip;
                 end if;
  
              --  Otherwise there is nothing to replace
--- 12385,12412 ----
                 if Nkind (Context) in N_Subprogram_Call
                   and then No (Type_Map.Get (Entity (Name (Context))))
                 then
!                   declare
!                      --  We need to use the Original_Node of the callee, in
!                      --  case it was already modified. Note that we are using
!                      --  Traverse_Proc to walk the tree, and it is defined to
!                      --  walk subtrees in an arbitrary order.
  
!                      Callee : constant Entity_Id :=
!                        Entity (Original_Node (Name (Context)));
!                   begin
!                      if No (Type_Map.Get (Callee)) then
!                         New_Ref :=
!                           Convert_To
!                             (Type_Of_Formal (Context, Old_Ref), New_Ref);
  
!                         --  Do not process the generated type conversion
!                         --  because both the parent type and the derived type
!                         --  are in the Type_Map table. This will clobber the
!                         --  type conversion by resetting its subtype mark.
! 
!                         Result := Skip;
!                      end if;
!                   end;
                 end if;
  
              --  Otherwise there is nothing to replace
*************** package body Exp_Util is
*** 12434,12443 ****
        Typ     : Entity_Id;
  
     begin
-       if No (L) or else Is_Empty_List (L) then
-          return False;
-       end if;
- 
        Decl := First (L);
        while Present (Decl) loop
  
--- 12637,12642 ----
*************** package body Exp_Util is
*** 12456,12464 ****
                and then Is_Library_Level_Entity (Typ)
                and then Convention (Typ) = Convention_Ada
                and then Present (Access_Disp_Table (Typ))
-               and then RTE_Available (RE_Unregister_Tag)
                and then not Is_Abstract_Type (Typ)
                and then not No_Run_Time_Mode
              then
                 return True;
              end if;
--- 12655,12664 ----
                and then Is_Library_Level_Entity (Typ)
                and then Convention (Typ) = Convention_Ada
                and then Present (Access_Disp_Table (Typ))
                and then not Is_Abstract_Type (Typ)
                and then not No_Run_Time_Mode
+               and then not Restriction_Active (No_Tagged_Type_Registration)
+               and then RTE_Available (RE_Unregister_Tag)
              then
                 return True;
              end if;
*************** package body Exp_Util is
*** 12884,12894 ****
                                             (Component_Type (Ityp))));
        end if;
  
!       if Ialign /= No_Uint and then Ialign > Maximum_Alignment then
           return True;
  
!       elsif Ialign /= No_Uint
!         and then Oalign /= No_Uint
          and then Ialign <= Oalign
        then
           return True;
--- 13084,13094 ----
                                             (Component_Type (Ityp))));
        end if;
  
!       if Present (Ialign) and then Ialign > Maximum_Alignment then
           return True;
  
!       elsif Present (Ialign)
!         and then Present (Oalign)
          and then Ialign <= Oalign
        then
           return True;
*************** package body Exp_Util is
*** 13266,13272 ****
           --  modification of that variable within the loop may incorrectly
           --  affect the execution of the loop.
  
!          elsif Nkind (Parent (Parent (N))) = N_Loop_Parameter_Specification
             and then Within_In_Parameter (Prefix (N))
             and then Variable_Ref
           then
--- 13466,13472 ----
           --  modification of that variable within the loop may incorrectly
           --  affect the execution of the loop.
  
!          elsif Parent_Kind (Parent (N)) = N_Loop_Parameter_Specification
             and then Within_In_Parameter (Prefix (N))
             and then Variable_Ref
           then
*************** package body Exp_Util is
*** 13436,13451 ****
  
           --  A binary operator is side effect free if and both operands are
           --  side effect free. For this purpose binary operators include
!          --  membership tests and short circuit forms.
  
           when N_Binary_Op
-             | N_Membership_Test
              | N_Short_Circuit
           =>
              return Side_Effect_Free (Left_Opnd  (N), Name_Req, Variable_Ref)
                       and then
                     Side_Effect_Free (Right_Opnd (N), Name_Req, Variable_Ref);
  
           --  An explicit dereference is side effect free only if it is
           --  a side effect free prefixed reference.
  
--- 13636,13661 ----
  
           --  A binary operator is side effect free if and both operands are
           --  side effect free. For this purpose binary operators include
!          --  short circuit forms.
  
           when N_Binary_Op
              | N_Short_Circuit
           =>
              return Side_Effect_Free (Left_Opnd  (N), Name_Req, Variable_Ref)
                       and then
                     Side_Effect_Free (Right_Opnd (N), Name_Req, Variable_Ref);
  
+          --  Membership tests may have either Right_Opnd or Alternatives set
+ 
+          when N_Membership_Test =>
+             return Side_Effect_Free (Left_Opnd (N), Name_Req, Variable_Ref)
+                      and then
+                    (if Present (Right_Opnd (N))
+                     then Side_Effect_Free
+                            (Right_Opnd (N), Name_Req, Variable_Ref)
+                     else Side_Effect_Free
+                            (Alternatives (N), Name_Req, Variable_Ref));
+ 
           --  An explicit dereference is side effect free only if it is
           --  a side effect free prefixed reference.
  
*************** package body Exp_Util is
*** 13855,13864 ****
       (Inher_Id : Entity_Id;
        Subp_Id  : Entity_Id)
     is
     begin
!       Map_Types
!         (Parent_Type  => Find_Dispatching_Type (Inher_Id),
!          Derived_Type => Find_Dispatching_Type (Subp_Id));
     end Update_Primitives_Mapping;
  
     ----------------------------------
--- 14065,14076 ----
       (Inher_Id : Entity_Id;
        Subp_Id  : Entity_Id)
     is
+       Parent_Type  : constant Entity_Id := Find_Dispatching_Type (Inher_Id);
+       Derived_Type : constant Entity_Id := Find_Dispatching_Type (Subp_Id);
+ 
     begin
!       pragma Assert (Parent_Type /= Derived_Type);
!       Map_Types (Parent_Type, Derived_Type);
     end Update_Primitives_Mapping;
  
     ----------------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/exp_util.ads gcc-12.1.0/gcc/ada/exp_util.ads
*** gcc-11.3.0/gcc/ada/exp_util.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/exp_util.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 25,36 ****
  
  --  Package containing utility procedures used throughout the expander
  
! with Exp_Tss; use Exp_Tss;
! with Namet;   use Namet;
! with Rtsfind; use Rtsfind;
! with Sinfo;   use Sinfo;
! with Types;   use Types;
! with Uintp;   use Uintp;
  
  package Exp_Util is
  
--- 25,37 ----
  
  --  Package containing utility procedures used throughout the expander
  
! with Exp_Tss;        use Exp_Tss;
! with Namet;          use Namet;
! with Rtsfind;        use Rtsfind;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Types;          use Types;
! with Uintp;          use Uintp;
  
  package Exp_Util is
  
*************** package Exp_Util is
*** 50,60 ****
     --    of statements, the actions are simply inserted into the list before
     --    the associated statement.
  
!    --    For an expression occurring in a declaration (declarations always
!    --    appear in lists), the actions are similarly inserted into the list
!    --    just before the associated declaration. ???Declarations do not always
!    --    appear in lists; in particular, a library unit declaration does not
!    --    appear in a list, and Insert_Action will crash in that case.
  
     --  The following special cases arise:
  
--- 51,61 ----
     --    of statements, the actions are simply inserted into the list before
     --    the associated statement.
  
!    --    For an expression occurring in a declaration the actions are similarly
!    --    inserted into the list just before the associated declaration. (But
!    --    note that although declarations usually appear in lists, they don't
!    --    always; in particular, a library unit declaration does not appear in
!    --    a list, and Insert_Action will crash in that case.)
  
     --  The following special cases arise:
  
*************** package Exp_Util is
*** 161,179 ****
     --
     --  Implementation limitation: Assoc_Node must be a statement. We can
     --  generalize to expressions if there is a need but this is tricky to
!    --  implement because of short-circuits (among other things).???
! 
!    procedure Insert_Declaration (N : Node_Id; Decl : Node_Id);
!    --  N must be a subexpression (Nkind in N_Subexpr). This is similar to
!    --  Insert_Action (N, Decl), but inserts Decl outside the expression in
!    --  which N appears. This is called Insert_Declaration because the intended
!    --  use is for declarations that have no associated code. We can't go
!    --  moving other kinds of things out of the current expression, since they
!    --  could be executed conditionally (e.g. right operand of short circuit,
!    --  or THEN/ELSE of if expression). This is currently used only in
!    --  Modify_Tree_For_C mode, where it is needed because in C we have no
!    --  way of having declarations within an expression (a really annoying
!    --  limitation).
  
     procedure Insert_Library_Level_Action (N : Node_Id);
     --  This procedure inserts and analyzes the node N as an action at the
--- 162,168 ----
     --
     --  Implementation limitation: Assoc_Node must be a statement. We can
     --  generalize to expressions if there is a need but this is tricky to
!    --  implement because of short-circuits (among other things).
  
     procedure Insert_Library_Level_Action (N : Node_Id);
     --  This procedure inserts and analyzes the node N as an action at the
*************** package Exp_Util is
*** 269,296 ****
     --  not install a call to Abort_Defer.
  
     procedure Build_Class_Wide_Expression
!      (Prag          : Node_Id;
!       Subp          : Entity_Id;
!       Par_Subp      : Entity_Id;
!       Adjust_Sloc   : Boolean;
!       Needs_Wrapper : out Boolean);
!    --  Build the expression for an inherited class-wide condition. Prag is
!    --  the pragma constructed from the corresponding aspect of the parent
!    --  subprogram, and Subp is the overriding operation, and Par_Subp is
!    --  the overridden operation that has the condition. Adjust_Sloc is True
!    --  when the sloc of nodes traversed should be adjusted for the inherited
!    --  pragma. The routine is also called to check whether an inherited
!    --  operation that is not overridden but has inherited conditions needs
!    --  a wrapper, because the inherited condition includes calls to other
!    --  primitives that have been overridden. In that case the first argument
!    --  is the expression of the original class-wide aspect. In SPARK_Mode, such
!    --  operation which are just inherited but have modified pre/postconditions
!    --  are illegal.
!    --  If there are calls to overridden operations in the condition, and the
!    --  pragma applies to an inherited operation, a wrapper must be built for
!    --  it to capture the new inherited condition. The flag Needs_Wrapper is
!    --  set in that case so that the wrapper can be built, when the controlling
!    --  type is frozen.
  
     function Build_DIC_Call
       (Loc      : Source_Ptr;
--- 258,273 ----
     --  not install a call to Abort_Defer.
  
     procedure Build_Class_Wide_Expression
!      (Pragma_Or_Expr : Node_Id;
!       Subp           : Entity_Id;
!       Par_Subp       : Entity_Id;
!       Adjust_Sloc    : Boolean);
!    --  Build the expression for an inherited class-wide condition. Pragma_Or_
!    --  _Expr is either the pragma constructed from the corresponding aspect of
!    --  the parent subprogram or the class-wide pre/postcondition built from the
!    --  parent, Subp is the overriding operation, and Par_Subp is the overridden
!    --  operation that has the condition. Adjust_Sloc is True when the sloc of
!    --  nodes traversed should be adjusted for the inherited pragma.
  
     function Build_DIC_Call
       (Loc      : Source_Ptr;
*************** package Exp_Util is
*** 477,483 ****
     --
     --  The Name_Req flag is set to ensure that the result is suitable for use
     --  in a context requiring a name (for example, the prefix of an attribute
!    --  reference) (can't this just be a qualification in Ada 2012???).
     --
     --  The Renaming_Req flag is set to produce an object renaming declaration
     --  rather than an object declaration. This is valid only if the expression
--- 454,460 ----
     --
     --  The Name_Req flag is set to ensure that the result is suitable for use
     --  in a context requiring a name (for example, the prefix of an attribute
!    --  reference).
     --
     --  The Renaming_Req flag is set to produce an object renaming declaration
     --  rather than an object declaration. This is valid only if the expression
*************** package Exp_Util is
*** 559,564 ****
--- 536,547 ----
     --  indicating that no checks were required). The Sloc field of the
     --  constructed N_Or_Else node is copied from Cond1.
  
+    procedure Expand_Sliding_Conversion (N : Node_Id; Arr_Typ : Entity_Id);
+    --  When sliding is needed for an array object N in the context of an
+    --  unconstrained array type Arr_Typ with fixed lower bound (FLB), create
+    --  a subtype with appropriate index constraint (FLB .. N'Length + FLB - 1)
+    --  and apply a conversion from N to that subtype.
+ 
     procedure Expand_Static_Predicates_In_Choices (N : Node_Id);
     --  N is either a case alternative or a variant. The Discrete_Choices field
     --  of N points to a list of choices. If any of these choices is the name
*************** package Exp_Util is
*** 605,611 ****
     function Find_Prim_Op (T : Entity_Id; Name : Name_Id) return Entity_Id;
     --  Find the first primitive operation of a tagged type T with name Name.
     --  This function allows the use of a primitive operation which is not
!    --  directly visible. If T is a class wide type, then the reference is to an
     --  operation of the corresponding root type. It is an error if no primitive
     --  operation with the given name is found.
  
--- 588,594 ----
     function Find_Prim_Op (T : Entity_Id; Name : Name_Id) return Entity_Id;
     --  Find the first primitive operation of a tagged type T with name Name.
     --  This function allows the use of a primitive operation which is not
!    --  directly visible. If T is a class-wide type, then the reference is to an
     --  operation of the corresponding root type. It is an error if no primitive
     --  operation with the given name is found.
  
*************** package Exp_Util is
*** 633,638 ****
--- 616,631 ----
     --  Given a protected type or its corresponding record, find the type of
     --  field _object.
  
+    function Find_Storage_Op
+      (Typ : Entity_Id;
+       Nam : Name_Id) return Entity_Id;
+    --  Given type Typ that's either a descendant of Root_Storage_Pool or else
+    --  specifies aspect Storage_Model_Type, returns the Entity_Id of the
+    --  subprogram associated with Nam, which must either be a primitive op of
+    --  the type in the case of a storage pool, or the operation corresponding
+    --  to Nam as specified in the aspect Storage_Model_Type. It is an error if
+    --  no operation corresponding to the given name is found.
+ 
     function Find_Hook_Context (N : Node_Id) return Node_Id;
     --  Determine a suitable node on which to attach actions related to N that
     --  need to be elaborated unconditionally. In general this is the topmost
*************** package Exp_Util is
*** 661,666 ****
--- 654,660 ----
        Related_Id    : Entity_Id := Empty;
        Is_Low_Bound  : Boolean   := False;
        Is_High_Bound : Boolean   := False;
+       Discr_Number  : Int       := 0;
        Mode          : Force_Evaluation_Mode := Relaxed);
     --  Force the evaluation of the expression right away. Similar behavior
     --  to Remove_Side_Effects when Variable_Ref is set to TRUE. That is to
*************** package Exp_Util is
*** 681,686 ****
--- 675,686 ----
     --  of the Is_xxx_Bound flags must be set. For use of these parameters see
     --  the warning in the body of Sem_Ch3.Process_Range_Expr_In_Decl.
  
+    --  Discr_Number is positive when the expression is a discriminant value
+    --  in an object or component declaration. In that case Discr_Number is
+    --  the position of the corresponding discriminant in the corresponding
+    --  type declaration, and the name for the evaluated expression is built
+    --  out of the Related_Id and the Discr_Number.
+ 
     function Fully_Qualified_Name_String
       (E          : Entity_Id;
        Append_NUL : Boolean := True) return String_Id;
*************** package Exp_Util is
*** 691,697 ****
     procedure Get_Current_Value_Condition
       (Var : Node_Id;
        Op  : out Node_Kind;
!       Val : out Node_Id);
     --  This routine processes the Current_Value field of the variable Var. If
     --  the Current_Value field is null or if it represents a known value, then
     --  on return Cond is set to N_Empty, and Val is set to Empty.
--- 691,697 ----
     procedure Get_Current_Value_Condition
       (Var : Node_Id;
        Op  : out Node_Kind;
!       Val : out Node_Id) with Post => Val /= Var;
     --  This routine processes the Current_Value field of the variable Var. If
     --  the Current_Value field is null or if it represents a known value, then
     --  on return Cond is set to N_Empty, and Val is set to Empty.
*************** package Exp_Util is
*** 725,730 ****
--- 725,734 ----
     --  Used for First, Last, and Length, when the prefix is an array type.
     --  Obtains the corresponding index subtype.
  
+    function Get_Mapped_Entity (E : Entity_Id) return Entity_Id;
+    --  Return the mapped entity of E; used to check inherited class-wide
+    --  pre/postconditions.
+ 
     function Get_Stream_Size (E : Entity_Id) return Uint;
     --  Return the stream size value of the subtype E
  
*************** package Exp_Util is
*** 904,914 ****
     --  Subprogram_Variant. Generate a comparison between Curr_Val and Old_Val
     --  depending on the variant mode (Increases / Decreases).
  
     procedure Map_Types (Parent_Type : Entity_Id; Derived_Type : Entity_Id);
     --  Establish the following mapping between the attributes of tagged parent
     --  type Parent_Type and tagged derived type Derived_Type.
     --
!    --    * Map each discriminant of Parent_Type to ether the corresponding
     --      discriminant of Derived_Type or come constraint.
  
     --    * Map each primitive operation of Parent_Type to the corresponding
--- 908,927 ----
     --  Subprogram_Variant. Generate a comparison between Curr_Val and Old_Val
     --  depending on the variant mode (Increases / Decreases).
  
+    procedure Map_Formals
+      (Parent_Subp  : Entity_Id;
+       Derived_Subp : Entity_Id;
+       Force_Update : Boolean := False);
+    --  Establish the mapping from the formals of Parent_Subp to the formals
+    --  of Derived_Subp; if Force_Update is True then mapping of Parent_Subp to
+    --  Derived_Subp is also updated; used to update mapping of late-overriding
+    --  primitives of a tagged type.
+ 
     procedure Map_Types (Parent_Type : Entity_Id; Derived_Type : Entity_Id);
     --  Establish the following mapping between the attributes of tagged parent
     --  type Parent_Type and tagged derived type Derived_Type.
     --
!    --    * Map each discriminant of Parent_Type to either the corresponding
     --      discriminant of Derived_Type or come constraint.
  
     --    * Map each primitive operation of Parent_Type to the corresponding
*************** package Exp_Util is
*** 997,1002 ****
--- 1010,1016 ----
        Related_Id         : Entity_Id := Empty;
        Is_Low_Bound       : Boolean   := False;
        Is_High_Bound      : Boolean   := False;
+       Discr_Number       : Int       := 0;
        Check_Side_Effects : Boolean   := True);
     --  Given the node for a subexpression, this function replaces the node if
     --  necessary by an equivalent subexpression that is guaranteed to be side
*************** package Exp_Util is
*** 1021,1026 ****
--- 1035,1043 ----
     --  of the Is_xxx_Bound flags must be set. For use of these parameters see
     --  the warning in the body of Sem_Ch3.Process_Range_Expr_In_Decl.
     --
+    --  If Discr_Number is positive, the expression denotes a discrimant value
+    --  in a constraint, the suffix DISCR is used to create the external name.
+ 
     --  The side effects are captured using one of the following methods:
     --
     --    1) a constant initialized with the value of the subexpression
*************** package Exp_Util is
*** 1187,1191 ****
--- 1204,1209 ----
  private
     pragma Inline (Duplicate_Subexpr);
     pragma Inline (Force_Evaluation);
+    pragma Inline (Get_Mapped_Entity);
     pragma Inline (Is_Library_Level_Tagged_Type);
  end Exp_Util;
diff -Nrcpad gcc-11.3.0/gcc/ada/expander.adb gcc-12.1.0/gcc/ada/expander.adb
*** gcc-11.3.0/gcc/ada/expander.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/expander.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,53 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;     use Atree;
! with Debug;     use Debug;
! with Debug_A;   use Debug_A;
! with Exp_Aggr;  use Exp_Aggr;
! with Exp_SPARK; use Exp_SPARK;
! with Exp_Attr;  use Exp_Attr;
! with Exp_Ch2;   use Exp_Ch2;
! with Exp_Ch3;   use Exp_Ch3;
! with Exp_Ch4;   use Exp_Ch4;
! with Exp_Ch5;   use Exp_Ch5;
! with Exp_Ch6;   use Exp_Ch6;
! with Exp_Ch7;   use Exp_Ch7;
! with Exp_Ch8;   use Exp_Ch8;
! with Exp_Ch9;   use Exp_Ch9;
! with Exp_Ch11;  use Exp_Ch11;
! with Exp_Ch12;  use Exp_Ch12;
! with Exp_Ch13;  use Exp_Ch13;
! with Exp_Prag;  use Exp_Prag;
! with Ghost;     use Ghost;
! with Opt;       use Opt;
! with Rtsfind;   use Rtsfind;
! with Sem;       use Sem;
! with Sem_Ch8;   use Sem_Ch8;
! with Sem_Util;  use Sem_Util;
! with Sinfo;     use Sinfo;
  with Table;
  
  package body Expander is
--- 23,55 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Debug_A;        use Debug_A;
! with Exp_Aggr;       use Exp_Aggr;
! with Exp_SPARK;      use Exp_SPARK;
! with Exp_Attr;       use Exp_Attr;
! with Exp_Ch2;        use Exp_Ch2;
! with Exp_Ch3;        use Exp_Ch3;
! with Exp_Ch4;        use Exp_Ch4;
! with Exp_Ch5;        use Exp_Ch5;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Ch8;        use Exp_Ch8;
! with Exp_Ch9;        use Exp_Ch9;
! with Exp_Ch11;       use Exp_Ch11;
! with Exp_Ch12;       use Exp_Ch12;
! with Exp_Ch13;       use Exp_Ch13;
! with Exp_Prag;       use Exp_Prag;
! with Ghost;          use Ghost;
! with Opt;            use Opt;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Stand;          use Stand;
  with Table;
  
  package body Expander is
*************** package body Expander is
*** 151,157 ****
        --  not take place. This prevents cascaded errors due to stack mismatch.
  
        elsif not Expander_Active then
!          Set_Analyzed (N, Full_Analysis);
  
           if Serious_Errors_Detected > 0 and then Scope_Is_Transient then
              Scope_Stack.Table
--- 153,171 ----
        --  not take place. This prevents cascaded errors due to stack mismatch.
  
        elsif not Expander_Active then
! 
!          --  Do not clear the Analyzed flag if it has been set on purpose
!          --  during preanalysis in Fold_Ureal. In that case, the Etype field
!          --  in N_Real_Literal will be set to something different than
!          --  Universal_Real.
! 
!          if Full_Analysis
!            or else not (Nkind (N) = N_Real_Literal
!                           and then Present (Etype (N))
!                           and then Etype (N) /= Universal_Real)
!          then
!             Set_Analyzed (N, Full_Analysis);
!          end if;
  
           if Serious_Errors_Detected > 0 and then Scope_Is_Transient then
              Scope_Stack.Table
*************** package body Expander is
*** 273,278 ****
--- 287,295 ----
                 when N_Generic_Instantiation =>
                    Expand_N_Generic_Instantiation (N);
  
+                when N_Goto_When_Statement =>
+                   Expand_N_Goto_When_Statement (N);
+ 
                 when N_Handled_Sequence_Of_Statements =>
                    Expand_N_Handled_Sequence_Of_Statements (N);
  
*************** package body Expander is
*** 420,425 ****
--- 437,445 ----
                 when N_Raise_Statement =>
                    Expand_N_Raise_Statement (N);
  
+                when N_Raise_When_Statement =>
+                   Expand_N_Raise_When_Statement (N);
+ 
                 when N_Raise_Constraint_Error =>
                    Expand_N_Raise_Constraint_Error (N);
  
*************** package body Expander is
*** 441,446 ****
--- 461,469 ----
                 when N_Requeue_Statement =>
                    Expand_N_Requeue_Statement (N);
  
+                when N_Return_When_Statement =>
+                   Expand_N_Return_When_Statement (N);
+ 
                 when N_Simple_Return_Statement =>
                    Expand_N_Simple_Return_Statement (N);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/expander.ads gcc-12.1.0/gcc/ada/expander.ads
*** gcc-11.3.0/gcc/ada/expander.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/expander.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/expect.c gcc-12.1.0/gcc/ada/expect.c
*** gcc-11.3.0/gcc/ada/expect.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/expect.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *                     Copyright (C) 2001-2020, AdaCore                     *
   *                                                                          *
   * 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *                     Copyright (C) 2001-2022, AdaCore                     *
   *                                                                          *
   * 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- *
*************** __gnat_waitpid (int pid)
*** 345,352 ****
  {
    int status = 0;
  
!   waitpid (pid, &status, 0);
!   status = WEXITSTATUS (status);
  
    return status;
  }
--- 345,361 ----
  {
    int status = 0;
  
!   if (waitpid (pid, &status, 0) == -1) {
!      return -1;
!   }
! 
!   if WIFEXITED (status) {
!      status = WEXITSTATUS (status);
!   } else if WIFSIGNALED (status) {
!      status = WTERMSIG (status);
!   } else if WIFSTOPPED (status) {
!      status = WSTOPSIG (status);
!   }
  
    return status;
  }
diff -Nrcpad gcc-11.3.0/gcc/ada/fe.h gcc-12.1.0/gcc/ada/fe.h
*** gcc-11.3.0/gcc/ada/fe.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/fe.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
*************** extern Nat Serious_Errors_Detected;
*** 55,82 ****
  
  #define Compiler_Abort		comperr__compiler_abort
  
! extern int Compiler_Abort (String_Pointer, String_Pointer, Boolean) ATTRIBUTE_NORETURN;
  
  /* debug: */
  
  #define Debug_Flag_Dot_KK	debug__debug_flag_dot_kk
  #define Debug_Flag_Dot_R	debug__debug_flag_dot_r
  #define Debug_Flag_NN		debug__debug_flag_nn
  
  extern Boolean Debug_Flag_Dot_KK;
  extern Boolean Debug_Flag_Dot_R;
  extern Boolean Debug_Flag_NN;
  
  /* einfo: */
  
! #define Set_Alignment			einfo__set_alignment
! #define Set_Component_Bit_Offset	einfo__set_component_bit_offset
! #define Set_Component_Size		einfo__set_component_size
! #define Set_Esize			einfo__set_esize
! #define Set_Mechanism			einfo__set_mechanism
! #define Set_Normalized_First_Bit	einfo__set_normalized_first_bit
! #define Set_Normalized_Position		einfo__set_normalized_position
! #define Set_RM_Size			einfo__set_rm_size
  
  extern void Set_Alignment		(Entity_Id, Uint);
  extern void Set_Component_Bit_Offset	(Entity_Id, Uint);
--- 55,93 ----
  
  #define Compiler_Abort		comperr__compiler_abort
  
! extern void Compiler_Abort (String_Pointer, String_Pointer, Boolean) ATTRIBUTE_NORETURN;
  
  /* debug: */
  
  #define Debug_Flag_Dot_KK	debug__debug_flag_dot_kk
  #define Debug_Flag_Dot_R	debug__debug_flag_dot_r
+ #define Debug_Flag_Dot_8	debug__debug_flag_dot_8
  #define Debug_Flag_NN		debug__debug_flag_nn
  
  extern Boolean Debug_Flag_Dot_KK;
  extern Boolean Debug_Flag_Dot_R;
+ extern Boolean Debug_Flag_Dot_8;
  extern Boolean Debug_Flag_NN;
  
  /* einfo: */
  
! /* Valid_Uint is used to preserve the old behavior of Esize and
!    friends, where Uint_0 was the default. All calls to this
!    are questionable. */
! INLINE Valid_Uint
! No_Uint_To_0 (Uint X)
! {
!   return X == No_Uint ? Uint_0 : X;
! }
! 
! #define Set_Alignment			einfo__entities__set_alignment
! #define Set_Component_Bit_Offset	einfo__entities__set_component_bit_offset
! #define Set_Component_Size		einfo__entities__set_component_size
! #define Set_Esize			einfo__entities__set_esize
! #define Set_Mechanism			einfo__entities__set_mechanism
! #define Set_Normalized_First_Bit	einfo__entities__set_normalized_first_bit
! #define Set_Normalized_Position		einfo__entities__set_normalized_position
! #define Set_RM_Size			einfo__entities__set_rm_size
  
  extern void Set_Alignment		(Entity_Id, Uint);
  extern void Set_Component_Bit_Offset	(Entity_Id, Uint);
*************** extern void Set_Normalized_First_Bit	(En
*** 87,97 ****
  extern void Set_Normalized_Position	(Entity_Id, Uint);
  extern void Set_RM_Size			(Entity_Id, Uint);
  
! #define Is_Entity_Name		einfo__is_entity_name
  
  extern Boolean Is_Entity_Name		(Node_Id);
  
! #define Get_Attribute_Definition_Clause	einfo__get_attribute_definition_clause
  
  extern Node_Id Get_Attribute_Definition_Clause (Entity_Id, unsigned char);
  
--- 98,108 ----
  extern void Set_Normalized_Position	(Entity_Id, Uint);
  extern void Set_RM_Size			(Entity_Id, Uint);
  
! #define Is_Entity_Name		einfo__utils__is_entity_name
  
  extern Boolean Is_Entity_Name		(Node_Id);
  
! #define Get_Attribute_Definition_Clause	einfo__utils__get_attribute_definition_clause
  
  extern Node_Id Get_Attribute_Definition_Clause (Entity_Id, unsigned char);
  
*************** extern Node_Id Get_Attribute_Definition_
*** 103,109 ****
  
  extern void Error_Msg_N			(String_Pointer, Node_Id);
  extern void Error_Msg_NE		(String_Pointer, Node_Id, Entity_Id);
! extern void Set_Identifier_Casing	(Char *, const Char *);
  
  /* err_vars: */
  
--- 114,120 ----
  
  extern void Error_Msg_N			(String_Pointer, Node_Id);
  extern void Error_Msg_NE		(String_Pointer, Node_Id, Entity_Id);
! extern void Set_Identifier_Casing	(void *, const void *);
  
  /* err_vars: */
  
*************** extern Uint Error_Msg_Uint_2;
*** 122,128 ****
  
  extern Entity_Id Get_Local_Raise_Call_Entity	(void);
  extern Entity_Id Get_RT_Exception_Entity	(int);
! extern void Get_RT_Exception_Name		(int);
  extern void Warn_If_No_Local_Raise		(int);
  
  /* exp_code:  */
--- 133,139 ----
  
  extern Entity_Id Get_Local_Raise_Call_Entity	(void);
  extern Entity_Id Get_RT_Exception_Entity	(int);
! extern void Get_RT_Exception_Name		(enum RT_Exception_Code);
  extern void Warn_If_No_Local_Raise		(int);
  
  /* exp_code:  */
*************** extern Node_Id Asm_Input_Value		(void);
*** 145,151 ****
  extern Node_Id Asm_Output_Constraint	(void);
  extern Node_Id Asm_Output_Variable	(void);
  extern Node_Id Asm_Template		(Node_Id);
! extern char *Clobber_Get_Next		(void);
  extern void Clobber_Setup		(Node_Id);
  extern Boolean Is_Asm_Volatile		(Node_Id);
  extern void Next_Asm_Input		(void);
--- 156,162 ----
  extern Node_Id Asm_Output_Constraint	(void);
  extern Node_Id Asm_Output_Variable	(void);
  extern Node_Id Asm_Template		(Node_Id);
! extern void *Clobber_Get_Next		(void);
  extern void Clobber_Setup		(Node_Id);
  extern Boolean Is_Asm_Volatile		(Node_Id);
  extern void Next_Asm_Input		(void);
*************** extern Boolean In_Extended_Main_Code_Uni
*** 190,195 ****
--- 201,207 ----
  /* opt: */
  
  #define Ada_Version			opt__ada_version
+ #define Assume_No_Invalid_Values	opt__assume_no_invalid_values
  #define Back_End_Inlining		opt__back_end_inlining
  #define Debug_Generated_Code		opt__debug_generated_code
  #define Enable_128bit_Types		opt__enable_128bit_types
*************** extern Boolean In_Extended_Main_Code_Uni
*** 203,209 ****
  #define Suppress_Checks			opt__suppress_checks
  
  typedef enum {
!   Ada_83, Ada_95, Ada_2005, Ada_2012, Ada_2020
  } Ada_Version_Type;
  
  typedef enum {
--- 215,221 ----
  #define Suppress_Checks			opt__suppress_checks
  
  typedef enum {
!   Ada_83, Ada_95, Ada_2005, Ada_2012, Ada_2022, Ada_With_Extensions
  } Ada_Version_Type;
  
  typedef enum {
*************** typedef enum {
*** 211,216 ****
--- 223,229 ----
  } Exception_Mechanism_Type;
  
  extern Ada_Version_Type Ada_Version;
+ extern Boolean Assume_No_Invalid_Values;
  extern Boolean Back_End_Inlining;
  extern Boolean Debug_Generated_Code;
  extern Boolean Enable_128bit_Types;
*************** extern Boolean Back_End_Exceptions	(void
*** 247,252 ****
--- 260,267 ----
    restrict__check_no_implicit_task_alloc
  #define No_Exception_Handlers_Set	\
    restrict__no_exception_handlers_set
+ #define No_Exception_Propagation_Active	\
+   restrict__no_exception_propagation_active
  
  extern void Check_Elaboration_Code_Allowed	(Node_Id);
  extern void Check_Implicit_Dynamic_Code_Allowed	(Node_Id);
*************** extern void Check_No_Implicit_Heap_Alloc
*** 254,259 ****
--- 269,275 ----
  extern void Check_No_Implicit_Protected_Alloc	(Node_Id);
  extern void Check_No_Implicit_Task_Alloc	(Node_Id);
  extern Boolean No_Exception_Handlers_Set	(void);
+ extern Boolean No_Exception_Propagation_Active	(void);
  
  /* sem_aggr:  */
  
*************** extern Boolean Requires_Transient_Scope
*** 301,309 ****
  
  /* sinfo: */
  
! #define End_Location			sinfo__end_location
! #define Set_Has_No_Elaboration_Code	sinfo__set_has_no_elaboration_code
! #define Set_Present_Expr		sinfo__set_present_expr
  
  extern Source_Ptr End_Location 		(Node_Id);
  extern void Set_Has_No_Elaboration_Code	(Node_Id, Boolean);
--- 317,325 ----
  
  /* sinfo: */
  
! #define End_Location			sinfo__utils__end_location
! #define Set_Has_No_Elaboration_Code	sinfo__nodes__set_has_no_elaboration_code
! #define Set_Present_Expr		sinfo__nodes__set_present_expr
  
  extern Source_Ptr End_Location 		(Node_Id);
  extern void Set_Has_No_Elaboration_Code	(Node_Id, Boolean);
*************** extern Boolean Stack_Check_Probes_On_Tar
*** 343,348 ****
--- 359,702 ----
  
  extern Boolean Warn_On_Questionable_Layout;
  
+ // The following corresponds to Ada code in Einfo.Utils.
+ 
+ typedef Boolean B;
+ typedef Component_Alignment_Kind C;
+ typedef Entity_Id E;
+ typedef Mechanism_Type M;
+ typedef Node_Id N;
+ typedef Uint U;
+ typedef Ureal R;
+ typedef Elist_Id L;
+ typedef List_Id S;
+ 
+ #define Is_Access_Object_Type einfo__utils__is_access_object_type
+ B Is_Access_Object_Type               (E Id);
+ 
+ #define Is_Named_Access_Type einfo__utils__is_named_access_type
+ B Is_Named_Access_Type                (E Id);
+ 
+ #define Address_Clause einfo__utils__address_clause
+ N Address_Clause                      (E Id);
+ 
+ #define Aft_Value einfo__utils__aft_value
+ U Aft_Value                           (E Id);
+ 
+ #define Alignment_Clause einfo__utils__alignment_clause
+ N Alignment_Clause                    (E Id);
+ 
+ #define Base_Type einfo__utils__base_type
+ E Base_Type                           (E Id);
+ 
+ #define Declaration_Node einfo__utils__declaration_node
+ N Declaration_Node                    (E Id);
+ 
+ #define Designated_Type einfo__utils__designated_type
+ E Designated_Type                     (E Id);
+ 
+ #define First_Component einfo__utils__first_component
+ E First_Component                     (E Id);
+ 
+ #define First_Component_Or_Discriminant einfo__utils__first_component_or_discriminant
+ E First_Component_Or_Discriminant     (E Id);
+ 
+ #define First_Formal einfo__utils__first_formal
+ E First_Formal                        (E Id);
+ 
+ #define First_Formal_With_Extras einfo__utils__first_formal_with_extras
+ E First_Formal_With_Extras            (E Id);
+ 
+ #define Has_Attach_Handler einfo__utils__has_attach_handler
+ B Has_Attach_Handler                  (E Id);
+ 
+ #define Has_Entries einfo__utils__has_entries
+ B Has_Entries                         (E Id);
+ 
+ #define Has_Foreign_Convention einfo__utils__has_foreign_convention
+ B Has_Foreign_Convention              (E Id);
+ 
+ #define Has_Interrupt_Handler einfo__utils__has_interrupt_handler
+ B Has_Interrupt_Handler               (E Id);
+ 
+ #define Has_Non_Limited_View einfo__utils__has_non_limited_view
+ B Has_Non_Limited_View                (E Id);
+ 
+ #define Has_Non_Null_Abstract_State einfo__utils__has_non_null_abstract_state
+ B Has_Non_Null_Abstract_State         (E Id);
+ 
+ #define Has_Non_Null_Visible_Refinement einfo__utils__has_non_null_visible_refinement
+ B Has_Non_Null_Visible_Refinement     (E Id);
+ 
+ #define Has_Null_Abstract_State einfo__utils__has_null_abstract_state
+ B Has_Null_Abstract_State             (E Id);
+ 
+ #define Has_Null_Visible_Refinement einfo__utils__has_null_visible_refinement
+ B Has_Null_Visible_Refinement         (E Id);
+ 
+ #define Implementation_Base_Type einfo__utils__implementation_base_type
+ E Implementation_Base_Type            (E Id);
+ 
+ #define Is_Base_Type einfo__utils__is_base_type
+ B Is_Base_Type                        (E Id);
+ 
+ #define Is_Boolean_Type einfo__utils__is_boolean_type
+ B Is_Boolean_Type                     (E Id);
+ 
+ #define Is_Constant_Object einfo__utils__is_constant_object
+ B Is_Constant_Object                  (E Id);
+ 
+ #define Is_Controlled einfo__utils__is_controlled
+ B Is_Controlled                       (E Id);
+ 
+ #define Is_Discriminal einfo__utils__is_discriminal
+ B Is_Discriminal                      (E Id);
+ 
+ #define Is_Dynamic_Scope einfo__utils__is_dynamic_scope
+ B Is_Dynamic_Scope                    (E Id);
+ 
+ #define Is_Elaboration_Target einfo__utils__is_elaboration_target
+ B Is_Elaboration_Target               (E Id);
+ 
+ #define Is_External_State einfo__utils__is_external_state
+ B Is_External_State                   (E Id);
+ 
+ #define Is_Finalizer einfo__utils__is_finalizer
+ B Is_Finalizer                        (E Id);
+ 
+ #define Is_Null_State einfo__utils__is_null_state
+ B Is_Null_State                       (E Id);
+ 
+ #define Is_Package_Or_Generic_Package einfo__utils__is_package_or_generic_package
+ B Is_Package_Or_Generic_Package       (E Id);
+ 
+ #define Is_Packed_Array einfo__utils__is_packed_array
+ B Is_Packed_Array                     (E Id);
+ 
+ #define Is_Prival einfo__utils__is_prival
+ B Is_Prival                           (E Id);
+ 
+ #define Is_Protected_Component einfo__utils__is_protected_component
+ B Is_Protected_Component              (E Id);
+ 
+ #define Is_Protected_Interface einfo__utils__is_protected_interface
+ B Is_Protected_Interface              (E Id);
+ 
+ #define Is_Protected_Record_Type einfo__utils__is_protected_record_type
+ B Is_Protected_Record_Type            (E Id);
+ 
+ #define Is_Relaxed_Initialization_State einfo__utils__is_relaxed_initialization_state
+ B Is_Relaxed_Initialization_State     (E Id);
+ 
+ #define Is_Standard_Character_Type einfo__utils__is_standard_character_type
+ B Is_Standard_Character_Type          (E Id);
+ 
+ #define Is_Standard_String_Type einfo__utils__is_standard_string_type
+ B Is_Standard_String_Type             (E Id);
+ 
+ #define Is_String_Type einfo__utils__is_string_type
+ B Is_String_Type                      (E Id);
+ 
+ #define Is_Synchronized_Interface einfo__utils__is_synchronized_interface
+ B Is_Synchronized_Interface           (E Id);
+ 
+ #define Is_Synchronized_State einfo__utils__is_synchronized_state
+ B Is_Synchronized_State               (E Id);
+ 
+ #define Is_Task_Interface einfo__utils__is_task_interface
+ B Is_Task_Interface                   (E Id);
+ 
+ #define Is_Task_Record_Type einfo__utils__is_task_record_type
+ B Is_Task_Record_Type                 (E Id);
+ 
+ #define Is_Wrapper_Package einfo__utils__is_wrapper_package
+ B Is_Wrapper_Package                  (E Id);
+ 
+ #define Last_Formal einfo__utils__last_formal
+ E Last_Formal                         (E Id);
+ 
+ #define Machine_Emax_Value einfo__utils__machine_emax_value
+ U Machine_Emax_Value                  (E Id);
+ 
+ #define Machine_Emin_Value einfo__utils__machine_emin_value
+ U Machine_Emin_Value                  (E Id);
+ 
+ #define Machine_Mantissa_Value einfo__utils__machine_mantissa_value
+ U Machine_Mantissa_Value              (E Id);
+ 
+ #define Machine_Radix_Value einfo__utils__machine_radix_value
+ U Machine_Radix_Value                 (E Id);
+ 
+ #define Model_Emin_Value einfo__utils__model_emin_value
+ U Model_Emin_Value                    (E Id);
+ 
+ #define Model_Epsilon_Value einfo__utils__model_epsilon_value
+ R Model_Epsilon_Value                 (E Id);
+ 
+ #define Model_Mantissa_Value einfo__utils__model_mantissa_value
+ U Model_Mantissa_Value                (E Id);
+ 
+ #define Model_Small_Value einfo__utils__model_small_value
+ R Model_Small_Value                   (E Id);
+ 
+ #define Next_Component einfo__utils__next_component
+ E Next_Component                      (E Id);
+ 
+ #define Next_Component_Or_Discriminant einfo__utils__next_component_or_discriminant
+ E Next_Component_Or_Discriminant      (E Id);
+ 
+ #define Next_Discriminant einfo__utils__next_discriminant
+ E Next_Discriminant                   (E Id);
+ 
+ #define Next_Formal einfo__utils__next_formal
+ E Next_Formal                         (E Id);
+ 
+ #define Next_Formal_With_Extras einfo__utils__next_formal_with_extras
+ E Next_Formal_With_Extras             (E Id);
+ 
+ #define Number_Dimensions einfo__utils__number_dimensions
+ Pos Number_Dimensions                   (E Id);
+ 
+ #define Number_Entries einfo__utils__number_entries
+ Nat Number_Entries                      (E Id);
+ 
+ #define Number_Formals einfo__utils__number_formals
+ Pos Number_Formals                      (E Id);
+ 
+ #define Object_Size_Clause einfo__utils__object_size_clause
+ N Object_Size_Clause                  (E Id);
+ 
+ #define Partial_Refinement_Constituents einfo__utils__partial_refinement_constituents
+ L Partial_Refinement_Constituents     (E Id);
+ 
+ #define Primitive_Operations einfo__utils__primitive_operations
+ L Primitive_Operations                (E Id);
+ 
+ #define Root_Type einfo__utils__root_type
+ E Root_Type                           (E Id);
+ 
+ #define Safe_Emax_Value einfo__utils__safe_emax_value
+ U Safe_Emax_Value                     (E Id);
+ 
+ #define Safe_First_Value einfo__utils__safe_first_value
+ R Safe_First_Value                    (E Id);
+ 
+ #define Safe_Last_Value einfo__utils__safe_last_value
+ R Safe_Last_Value                     (E Id);
+ 
+ #define Scope_Depth einfo__utils__scope_depth
+ U Scope_Depth                         (E Id);
+ 
+ #define Scope_Depth_Set einfo__utils__scope_depth_set
+ B Scope_Depth_Set                     (E Id);
+ 
+ #define Size_Clause einfo__utils__size_clause
+ N Size_Clause                         (E Id);
+ 
+ #define Stream_Size_Clause einfo__utils__stream_size_clause
+ N Stream_Size_Clause                  (E Id);
+ 
+ #define Type_High_Bound einfo__utils__type_high_bound
+ N Type_High_Bound                     (E Id);
+ 
+ #define Type_Low_Bound einfo__utils__type_low_bound
+ N Type_Low_Bound                      (E Id);
+ 
+ #define Underlying_Type einfo__utils__underlying_type
+ E Underlying_Type                     (E Id);
+ 
+ #define Known_Alignment einfo__utils__known_alignment
+ B Known_Alignment                       (Entity_Id E);
+ 
+ #define Known_Component_Bit_Offset einfo__utils__known_component_bit_offset
+ B Known_Component_Bit_Offset            (Entity_Id E);
+ 
+ #define Known_Component_Size einfo__utils__known_component_size
+ B Known_Component_Size                  (Entity_Id E);
+ 
+ #define Known_Esize einfo__utils__known_esize
+ B Known_Esize                           (Entity_Id E);
+ 
+ #define Known_Normalized_First_Bit einfo__utils__known_normalized_first_bit
+ B Known_Normalized_First_Bit            (Entity_Id E);
+ 
+ #define Known_Normalized_Position einfo__utils__known_normalized_position
+ B Known_Normalized_Position             (Entity_Id E);
+ 
+ #define Known_Normalized_Position_Max einfo__utils__known_normalized_position_max
+ B Known_Normalized_Position_Max         (Entity_Id E);
+ 
+ #define Known_RM_Size einfo__utils__known_rm_size
+ B Known_RM_Size                         (Entity_Id E);
+ 
+ #define Copy_Alignment einfo__utils__copy_alignment
+ B Copy_Alignment(Entity_Id To, Entity_Id From);
+ 
+ #define Copy_Esize einfo__utils__copy_esize
+ B Copy_Esize(Entity_Id To, Entity_Id From);
+ 
+ #define Copy_RM_Size einfo__utils__copy_rm_size
+ B Copy_RM_Size(Entity_Id To, Entity_Id From);
+ 
+ #define Is_Discrete_Or_Fixed_Point_Type einfo__utils__is_discrete_or_fixed_point_type
+ B Is_Discrete_Or_Fixed_Point_Type     (E Id);
+ 
+ #define Is_Floating_Point_Type einfo__utils__is_floating_point_type
+ B Is_Floating_Point_Type                      (E Id);
+ 
+ #define Is_Record_Type einfo__utils__is_record_type
+ B Is_Record_Type                      (E Id);
+ 
+ #define Has_DIC einfo__utils__has_dic
+ B Has_DIC (E Id);
+ 
+ #define Has_Invariants einfo__utils__has_invariants
+ B Has_Invariants (E Id);
+ 
+ #define Is_Full_Access einfo__utils__is_full_access
+ B Is_Full_Access (E Id);
+ 
+ #define Next_Index einfo__utils__next_index
+ Node_Id Next_Index (Node_Id Id);
+ 
+ #define Next_Literal einfo__utils__next_literal
+ E Next_Literal (E Id);
+ 
+ #define Next_Stored_Discriminant einfo__utils__next_stored_discriminant
+ E Next_Stored_Discriminant (E Id);
+ 
+ #define Parameter_Mode einfo__utils__parameter_mode
+ // Parameter_Mode really returns Formal_Kind, but that is not visible, because
+ // fe.h is included before einfo.h.
+ Entity_Kind Parameter_Mode (E Id);
+ 
+ #define Is_List_Member einfo__utils__is_list_member
+ B Is_List_Member (N Node);
+ 
+ #define List_Containing einfo__utils__list_containing
+ S List_Containing (N Node);
+ 
+ // The following is needed because Convention in Sem_Util is a renaming
+ // of Basic_Convention.
+ 
+ #define Convention einfo__entities__basic_convention
+ Convention_Id Convention (N Node);
+ 
+ // See comments regarding Entity_Or_Associated_Node in Sinfo.Utils.
+ 
+ #define Entity sinfo__nodes__entity_or_associated_node
+ Entity_Id Entity (N Node);
+ 
+ // See comments regarding Renamed_Or_Alias in Einfo.Utils
+ 
+ #define Alias einfo__entities__renamed_or_alias
+ 
+ #define Renamed_Entity einfo__entities__renamed_or_alias
+ Node_Id Renamed_Entity (N Node);
+ 
+ #define Renamed_Object einfo__entities__renamed_or_alias
+ Node_Id Renamed_Object (N Node);
+ 
  #ifdef __cplusplus
  }
  #endif
diff -Nrcpad gcc-11.3.0/gcc/ada/final.c gcc-12.1.0/gcc/ada/final.c
*** gcc-11.3.0/gcc/ada/final.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/final.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/fmap.adb gcc-12.1.0/gcc/ada/fmap.adb
*** gcc-11.3.0/gcc/ada/fmap.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/fmap.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
*************** package body Fmap is
*** 301,307 ****
        Read_Source_File (Name_Enter (File_Name), 1, Hi, Src, FD, Config);
  
        if Null_Source_Buffer_Ptr (Src) then
!          if FD = Null_FD then
              Write_Str ("warning: could not locate mapping file """);
           else
              Write_Str ("warning: no read access for mapping file """);
--- 301,307 ----
        Read_Source_File (Name_Enter (File_Name), 1, Hi, Src, FD, Config);
  
        if Null_Source_Buffer_Ptr (Src) then
!          if FD = Osint.Null_FD then
              Write_Str ("warning: could not locate mapping file """);
           else
              Write_Str ("warning: no read access for mapping file """);
diff -Nrcpad gcc-11.3.0/gcc/ada/fmap.ads gcc-12.1.0/gcc/ada/fmap.ads
*** gcc-11.3.0/gcc/ada/fmap.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/fmap.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
*************** package Fmap is
*** 68,77 ****
     --  mapping file whose file name is File_Name.
  
     procedure Reset_Tables;
!    --  Initialize all the internal data structures. This procedure is used
!    --  when several compilations are performed by the same process (by GNSA
!    --  for ASIS, for example) to remove any existing mappings from a previous
!    --  compilation.
  
     procedure Add_Forbidden_File_Name (Name : File_Name_Type);
     --  Indicate that a source file name is forbidden. This is used when there
--- 68,74 ----
     --  mapping file whose file name is File_Name.
  
     procedure Reset_Tables;
!    --  Initialize all the internal data structures
  
     procedure Add_Forbidden_File_Name (Name : File_Name_Type);
     --  Indicate that a source file name is forbidden. This is used when there
diff -Nrcpad gcc-11.3.0/gcc/ada/fname-sf.adb gcc-12.1.0/gcc/ada/fname-sf.adb
*** gcc-11.3.0/gcc/ada/fname-sf.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/fname-sf.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 24,30 ****
  ------------------------------------------------------------------------------
  
  with Casing;        use Casing;
- with Fname;         use Fname;
  with Fname.UF;      use Fname.UF;
  with SFN_Scan;      use SFN_Scan;
  with Osint;         use Osint;
--- 24,29 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/fname-sf.ads gcc-12.1.0/gcc/ada/fname-sf.ads
*** gcc-11.3.0/gcc/ada/fname-sf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/fname-sf.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/fname-uf.adb gcc-12.1.0/gcc/ada/fname-uf.adb
*** gcc-11.3.0/gcc/ada/fname-uf.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/fname-uf.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/fname-uf.ads gcc-12.1.0/gcc/ada/fname-uf.ads
*** gcc-11.3.0/gcc/ada/fname-uf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/fname-uf.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/fname.adb gcc-12.1.0/gcc/ada/fname.adb
*** gcc-11.3.0/gcc/ada/fname.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/fname.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/fname.ads gcc-12.1.0/gcc/ada/fname.ads
*** gcc-11.3.0/gcc/ada/fname.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/fname.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/freeze.adb gcc-12.1.0/gcc/ada/freeze.adb
*** gcc-11.3.0/gcc/ada/freeze.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/freeze.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,74 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;   use Aspects;
! with Atree;     use Atree;
! with Checks;    use Checks;
! with Contracts; use Contracts;
! with Debug;     use Debug;
! with Einfo;     use Einfo;
! with Elists;    use Elists;
! with Errout;    use Errout;
! with Exp_Ch3;   use Exp_Ch3;
! with Exp_Ch7;   use Exp_Ch7;
! with Exp_Pakd;  use Exp_Pakd;
! with Exp_Util;  use Exp_Util;
! with Exp_Tss;   use Exp_Tss;
! with Ghost;     use Ghost;
! with Layout;    use Layout;
! with Lib;       use Lib;
! with Namet;     use Namet;
! with Nlists;    use Nlists;
! with Nmake;     use Nmake;
! with Opt;       use Opt;
! with Restrict;  use Restrict;
! with Rident;    use Rident;
! with Rtsfind;   use Rtsfind;
! with Sem;       use Sem;
! with Sem_Aux;   use Sem_Aux;
! with Sem_Cat;   use Sem_Cat;
! with Sem_Ch3;   use Sem_Ch3;
! with Sem_Ch6;   use Sem_Ch6;
! with Sem_Ch7;   use Sem_Ch7;
! with Sem_Ch8;   use Sem_Ch8;
! with Sem_Ch13;  use Sem_Ch13;
! with Sem_Eval;  use Sem_Eval;
! with Sem_Mech;  use Sem_Mech;
! with Sem_Prag;  use Sem_Prag;
! with Sem_Res;   use Sem_Res;
! with Sem_Util;  use Sem_Util;
! with Sinfo;     use Sinfo;
! with Snames;    use Snames;
! with Stand;     use Stand;
! with Stringt;   use Stringt;
! with Targparm;  use Targparm;
! with Tbuild;    use Tbuild;
! with Ttypes;    use Ttypes;
! with Uintp;     use Uintp;
! with Urealp;    use Urealp;
! with Warnsw;    use Warnsw;
  
  package body Freeze is
  
--- 23,81 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Contracts;      use Contracts;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Ch3;        use Exp_Ch3;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Disp;       use Exp_Disp;
! with Exp_Pakd;       use Exp_Pakd;
! with Exp_Util;       use Exp_Util;
! with Exp_Tss;        use Exp_Tss;
! with Ghost;          use Ghost;
! with Layout;         use Layout;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Mech;       use Sem_Mech;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Strub;          use Strub;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
! with Urealp;         use Urealp;
! with Warnsw;         use Warnsw;
  
  package body Freeze is
  
*************** package body Freeze is
*** 128,138 ****
     --  Attribute references to outer types are freeze points for those types;
     --  this routine generates the required freeze nodes for them.
  
-    procedure Check_Inherited_Conditions (R : Entity_Id);
-    --  For a tagged derived type, create wrappers for inherited operations
-    --  that have a class-wide condition, so it can be properly rewritten if
-    --  it involves calls to other overriding primitives.
- 
     procedure Check_Strict_Alignment (E : Entity_Id);
     --  E is a base type. If E is tagged or has a component that is aliased
     --  or tagged or contains something this is aliased or tagged, set
--- 135,140 ----
*************** package body Freeze is
*** 156,162 ****
     procedure Freeze_Enumeration_Type (Typ : Entity_Id);
     --  Freeze enumeration type. The Esize field is set as processing
     --  proceeds (i.e. set by default when the type is declared and then
!    --  adjusted by rep clauses. What this procedure does is to make sure
     --  that if a foreign convention is specified, and no specific size
     --  is given, then the size must be at least Integer'Size.
  
--- 158,164 ----
     procedure Freeze_Enumeration_Type (Typ : Entity_Id);
     --  Freeze enumeration type. The Esize field is set as processing
     --  proceeds (i.e. set by default when the type is declared and then
!    --  adjusted by rep clauses). What this procedure does is to make sure
     --  that if a foreign convention is specified, and no specific size
     --  is given, then the size must be at least Integer'Size.
  
*************** package body Freeze is
*** 182,187 ****
--- 184,255 ----
     --  the designated type. Otherwise freezing the access type does not freeze
     --  the designated type.
  
+    function Should_Freeze_Type (Typ : Entity_Id; E : Entity_Id) return Boolean;
+    --  If Typ is in the current scope or in an instantiation, then return True.
+    --  ???Expression functions (represented by E) shouldn't freeze types in
+    --  general, but our current expansion and freezing model requires an early
+    --  freezing when the dispatch table is needed or when building an aggregate
+    --  with a subtype of Typ, so return True also in this case.
+    --  Note that expression function completions do freeze and are
+    --  handled in Sem_Ch6.Analyze_Expression_Function.
+ 
+    ------------------------
+    -- Should_Freeze_Type --
+    ------------------------
+ 
+    function Should_Freeze_Type
+      (Typ : Entity_Id; E : Entity_Id) return Boolean
+    is
+       function Is_Dispatching_Call_Or_Aggregate
+         (N : Node_Id) return Traverse_Result;
+       --  Return Abandon if N is a dispatching call to a subprogram
+       --  declared in the same scope as Typ or an aggregate whose type
+       --  is Typ.
+ 
+       --------------------------------------
+       -- Is_Dispatching_Call_Or_Aggregate --
+       --------------------------------------
+ 
+       function Is_Dispatching_Call_Or_Aggregate
+         (N : Node_Id) return Traverse_Result is
+       begin
+          if Nkind (N) = N_Function_Call
+            and then Present (Controlling_Argument (N))
+            and then Scope (Entity (Original_Node (Name (N))))
+                       = Scope (Typ)
+          then
+             return Abandon;
+          elsif Nkind (N) = N_Aggregate
+            and then Base_Type (Etype (N)) = Base_Type (Typ)
+          then
+             return Abandon;
+          else
+             return OK;
+          end if;
+       end Is_Dispatching_Call_Or_Aggregate;
+ 
+       -------------------------
+       -- Need_Dispatch_Table --
+       -------------------------
+ 
+       function Need_Dispatch_Table is new
+         Traverse_Func (Is_Dispatching_Call_Or_Aggregate);
+       --  Return Abandon if the input expression requires access to
+       --  Typ's dispatch table.
+ 
+       Decl : constant Node_Id :=
+         (if No (E) then E else Original_Node (Unit_Declaration_Node (E)));
+ 
+    --  Start of processing for Should_Freeze_Type
+ 
+    begin
+       return Within_Scope (Typ, Current_Scope)
+         or else In_Instance
+         or else (Present (Decl)
+                  and then Nkind (Decl) = N_Expression_Function
+                  and then Need_Dispatch_Table (Expression (Decl)) = Abandon);
+    end Should_Freeze_Type;
+ 
     procedure Process_Default_Expressions
       (E     : Entity_Id;
        After : in out Node_Id);
*************** package body Freeze is
*** 214,224 ****
     --  Full_View or Corresponding_Record_Type.
  
     procedure Warn_Overlay (Expr : Node_Id; Typ : Entity_Id; Nam : Node_Id);
!    --  Expr is the expression for an address clause for entity Nam whose type
!    --  is Typ. If Typ has a default initialization, and there is no explicit
!    --  initialization in the source declaration, check whether the address
!    --  clause might cause overlaying of an entity, and emit a warning on the
!    --  side effect that the initialization will cause.
  
     -------------------------------
     -- Adjust_Esize_For_Alignment --
--- 282,292 ----
     --  Full_View or Corresponding_Record_Type.
  
     procedure Warn_Overlay (Expr : Node_Id; Typ : Entity_Id; Nam : Node_Id);
!    --  Expr is the expression for an address clause for the entity denoted by
!    --  Nam whose type is Typ. If Typ has a default initialization, and there is
!    --  no explicit initialization in the source declaration, check whether the
!    --  address clause might cause overlaying of an entity, and emit a warning
!    --  on the side effect that the initialization will cause.
  
     -------------------------------
     -- Adjust_Esize_For_Alignment --
*************** package body Freeze is
*** 478,489 ****
           Actuals := No_List;
        end if;
  
!       if Present (Formal) then
!          while Present (Formal) loop
!             Append (New_Occurrence_Of (Formal, Loc), Actuals);
!             Next_Formal (Formal);
!          end loop;
!       end if;
  
        --  If the renamed entity is an entry, inherit its profile. For other
        --  renamings as bodies, both profiles must be subtype conformant, so it
--- 546,555 ----
           Actuals := No_List;
        end if;
  
!       while Present (Formal) loop
!          Append (New_Occurrence_Of (Formal, Loc), Actuals);
!          Next_Formal (Formal);
!       end loop;
  
        --  If the renamed entity is an entry, inherit its profile. For other
        --  renamings as bodies, both profiles must be subtype conformant, so it
*************** package body Freeze is
*** 568,580 ****
           Next (Param_Spec);
        end loop;
  
!       Body_Node :=
!         Make_Subprogram_Body (Loc,
!           Specification => Spec,
!           Declarations => New_List,
!           Handled_Statement_Sequence =>
!             Make_Handled_Sequence_Of_Statements (Loc,
!               Statements => New_List (Call_Node)));
  
        if Nkind (Decl) /= N_Subprogram_Declaration then
           Rewrite (N,
--- 634,659 ----
           Next (Param_Spec);
        end loop;
  
!       --  In GNATprove, prefer to generate an expression function whenever
!       --  possible, to benefit from the more precise analysis in that case
!       --  (as if an implicit postcondition had been generated).
! 
!       if GNATprove_Mode
!         and then Nkind (Call_Node) = N_Simple_Return_Statement
!       then
!          Body_Node :=
!            Make_Expression_Function (Loc,
!              Specification => Spec,
!              Expression    => Expression (Call_Node));
!       else
!          Body_Node :=
!            Make_Subprogram_Body (Loc,
!              Specification              => Spec,
!              Declarations               => New_List,
!              Handled_Statement_Sequence =>
!                Make_Handled_Sequence_Of_Statements (Loc,
!                  Statements => New_List (Call_Node)));
!       end if;
  
        if Nkind (Decl) /= N_Subprogram_Declaration then
           Rewrite (N,
*************** package body Freeze is
*** 787,795 ****
                 Error_Msg_NE (Size_Too_Small_Message, Size_Clause (T), T);
              end if;
  
!          --  Set size if not set already
  
!          elsif Unknown_RM_Size (T) then
              Set_RM_Size (T, S);
           end if;
        end Set_Small_Size;
--- 866,877 ----
                 Error_Msg_NE (Size_Too_Small_Message, Size_Clause (T), T);
              end if;
  
!          --  Set size if not set already. Do not set it to Uint_0, because in
!          --  some cases (notably array-of-record), the Component_Size is
!          --  No_Uint, which causes S to be Uint_0. Presumably the RM_Size and
!          --  Component_Size will eventually be set correctly by the back end.
  
!          elsif not Known_RM_Size (T) and then S /= Uint_0 then
              Set_RM_Size (T, S);
           end if;
        end Set_Small_Size;
*************** package body Freeze is
*** 799,809 ****
        ----------------
  
        function Size_Known (T : Entity_Id) return Boolean is
-          Index : Entity_Id;
           Comp  : Entity_Id;
           Ctyp  : Entity_Id;
-          Low   : Node_Id;
-          High  : Node_Id;
  
        begin
           if Size_Known_At_Compile_Time (T) then
--- 881,888 ----
*************** package body Freeze is
*** 824,831 ****
              --  String literals always have known size, and we can set it
  
              if Ekind (T) = E_String_Literal_Subtype then
!                Set_Small_Size
!                  (T, Component_Size (T) * String_Literal_Length (T));
                 return True;
  
              --  Unconstrained types never have known at compile time size
--- 903,919 ----
              --  String literals always have known size, and we can set it
  
              if Ekind (T) = E_String_Literal_Subtype then
!                if Known_Component_Size (T) then
!                   Set_Small_Size
!                     (T, Component_Size (T) * String_Literal_Length (T));
! 
!                else
!                   --  The following is wrong, but does what previous versions
!                   --  did. The Component_Size is unknown for the string in a
!                   --  pragma Warnings.
!                   Set_Small_Size (T, Uint_0);
!                end if;
! 
                 return True;
  
              --  Unconstrained types never have known at compile time size
*************** package body Freeze is
*** 850,859 ****
              --  thus may be packable).
  
              declare
!                Size : Uint := Component_Size (T);
!                Dim  : Uint;
  
              begin
                 Index := First_Index (T);
                 while Present (Index) loop
                    if Nkind (Index) = N_Range then
--- 938,956 ----
              --  thus may be packable).
  
              declare
!                Index : Entity_Id;
!                Low   : Node_Id;
!                High  : Node_Id;
!                Size  : Uint := Component_Size (T);
!                Dim   : Uint;
  
              begin
+                --  See comment in Set_Small_Size above
+ 
+                if No (Size) then
+                   Size := Uint_0;
+                end if;
+ 
                 Index := First_Index (T);
                 while Present (Index) loop
                    if Nkind (Index) = N_Range then
*************** package body Freeze is
*** 876,882 ****
                    else
                       Dim := Expr_Value (High) - Expr_Value (Low) + 1;
  
!                      if Dim >= 0 then
                          Size := Size * Dim;
                       else
                          Size := Uint_0;
--- 973,979 ----
                    else
                       Dim := Expr_Value (High) - Expr_Value (Low) + 1;
  
!                      if Dim > Uint_0 then
                          Size := Size * Dim;
                       else
                          Size := Uint_0;
*************** package body Freeze is
*** 975,981 ****
                    if not Is_Constrained (T)
                      and then
                        No (Discriminant_Default_Value (First_Discriminant (T)))
!                     and then Unknown_RM_Size (T)
                    then
                       return False;
                    end if;
--- 1072,1078 ----
                    if not Is_Constrained (T)
                      and then
                        No (Discriminant_Default_Value (First_Discriminant (T)))
!                     and then not Known_RM_Size (T)
                    then
                       return False;
                    end if;
*************** package body Freeze is
*** 1200,1208 ****
  
              if Present (Component_Clause (Comp)) then
                 Comp_Byte_Aligned :=
!                  (Normalized_First_Bit (Comp) mod System_Storage_Unit = 0)
                     and then
!                  (Esize (Comp) mod System_Storage_Unit = 0);
              else
                 Comp_Byte_Aligned := not Is_Packed (Encl_Type);
              end if;
--- 1297,1309 ----
  
              if Present (Component_Clause (Comp)) then
                 Comp_Byte_Aligned :=
!                  Known_Normalized_First_Bit (Comp)
                     and then
!                  Known_Esize (Comp)
!                    and then
!                  Normalized_First_Bit (Comp) mod System_Storage_Unit = 0
!                    and then
!                  Esize (Comp) mod System_Storage_Unit = 0;
              else
                 Comp_Byte_Aligned := not Is_Packed (Encl_Type);
              end if;
*************** package body Freeze is
*** 1280,1288 ****
              elsif Is_Record_Type (Encl_Base)
                and then not Comp_Byte_Aligned
              then
!                Error_Msg_N
!                  ("type of non-byte-aligned component must have same scalar "
!                   & "storage order as enclosing composite", Err_Node);
  
              --  Warn if specified only for the outer composite
  
--- 1381,1395 ----
              elsif Is_Record_Type (Encl_Base)
                and then not Comp_Byte_Aligned
              then
!                if Present (Component_Clause (Comp)) then
!                   Error_Msg_N
!                     ("type of non-byte-aligned component must have same scalar"
!                      & " storage order as enclosing record", Err_Node);
!                else
!                   Error_Msg_N
!                     ("type of packed component must have same scalar"
!                      & " storage order as enclosing record", Err_Node);
!                end if;
  
              --  Warn if specified only for the outer composite
  
*************** package body Freeze is
*** 1392,1481 ****
     -- Check_Inherited_Conditions --
     --------------------------------
  
!    procedure Check_Inherited_Conditions (R : Entity_Id) is
!       Prim_Ops      : constant Elist_Id := Primitive_Operations (R);
!       Decls         : List_Id;
!       Needs_Wrapper : Boolean;
!       Op_Node       : Elmt_Id;
!       Par_Prim      : Entity_Id;
!       Prim          : Entity_Id;
  
!       procedure Build_Inherited_Condition_Pragmas (Subp : Entity_Id);
        --  Build corresponding pragmas for an operation whose ancestor has
!       --  class-wide pre/postconditions. If the operation is inherited, the
!       --  pragmas force the creation of a wrapper for the inherited operation.
!       --  If the ancestor is being overridden, the pragmas are constructed only
!       --  to verify their legality, in case they contain calls to other
!       --  primitives that may haven been overridden.
  
        ---------------------------------------
        -- Build_Inherited_Condition_Pragmas --
        ---------------------------------------
  
!       procedure Build_Inherited_Condition_Pragmas (Subp : Entity_Id) is
!          A_Post   : Node_Id;
!          A_Pre    : Node_Id;
!          New_Prag : Node_Id;
  
        begin
!          A_Pre := Get_Class_Wide_Pragma (Par_Prim, Pragma_Precondition);
  
!          if Present (A_Pre) then
!             New_Prag := New_Copy_Tree (A_Pre);
!             Build_Class_Wide_Expression
!               (Prag          => New_Prag,
!                Subp          => Prim,
!                Par_Subp      => Par_Prim,
!                Adjust_Sloc   => False,
!                Needs_Wrapper => Needs_Wrapper);
  
!             if Needs_Wrapper
!               and then not Comes_From_Source (Subp)
!               and then Expander_Active
!             then
!                Append (New_Prag, Decls);
!             end if;
           end if;
  
!          A_Post := Get_Class_Wide_Pragma (Par_Prim, Pragma_Postcondition);
  
!          if Present (A_Post) then
!             New_Prag := New_Copy_Tree (A_Post);
              Build_Class_Wide_Expression
!               (Prag           => New_Prag,
!                Subp           => Prim,
                 Par_Subp       => Par_Prim,
!                Adjust_Sloc    => False,
!                Needs_Wrapper  => Needs_Wrapper);
  
!             if Needs_Wrapper
!               and then not Comes_From_Source (Subp)
!               and then Expander_Active
!             then
!                Append (New_Prag, Decls);
              end if;
           end if;
        end Build_Inherited_Condition_Pragmas;
  
     --  Start of processing for Check_Inherited_Conditions
  
     begin
!       Op_Node := First_Elmt (Prim_Ops);
!       while Present (Op_Node) loop
!          Prim := Node (Op_Node);
  
!          --  Map the overridden primitive to the overriding one. This takes
!          --  care of all overridings and is done only once.
  
!          if Present (Overridden_Operation (Prim))
!            and then Comes_From_Source (Prim)
!          then
!             Par_Prim := Overridden_Operation (Prim);
!             Update_Primitives_Mapping (Par_Prim, Prim);
!          end if;
  
!          Next_Elmt (Op_Node);
!       end loop;
  
        --  Perform validity checks on the inherited conditions of overriding
        --  operations, for conformance with LSP, and apply SPARK-specific
--- 1499,1824 ----
     -- Check_Inherited_Conditions --
     --------------------------------
  
!    procedure Check_Inherited_Conditions
!      (R               : Entity_Id;
!       Late_Overriding : Boolean := False)
!    is
!       Prim_Ops       : constant Elist_Id := Primitive_Operations (R);
!       Decls          : List_Id;
!       Op_Node        : Elmt_Id;
!       Par_Prim       : Entity_Id;
!       Prim           : Entity_Id;
!       Wrapper_Needed : Boolean;
  
!       function Build_DTW_Body
!         (Loc          : Source_Ptr;
!          DTW_Spec     : Node_Id;
!          DTW_Decls    : List_Id;
!          Par_Prim     : Entity_Id;
!          Wrapped_Subp : Entity_Id) return Node_Id;
!       --  Build the body of the dispatch table wrapper containing the given
!       --  spec and declarations; the call to the wrapped subprogram includes
!       --  the proper type conversion.
! 
!       function Build_DTW_Spec (Par_Prim : Entity_Id) return Node_Id;
!       --  Build the spec of the dispatch table wrapper
! 
!       procedure Build_Inherited_Condition_Pragmas
!         (Subp           : Entity_Id;
!          Wrapper_Needed : out Boolean);
        --  Build corresponding pragmas for an operation whose ancestor has
!       --  class-wide pre/postconditions. If the operation is inherited then
!       --  Wrapper_Needed is returned True to force the creation of a wrapper
!       --  for the inherited operation. If the ancestor is being overridden,
!       --  the pragmas are constructed only to verify their legality, in case
!       --  they contain calls to other primitives that may have been overridden.
! 
!       function Needs_Wrapper
!         (Class_Cond : Node_Id;
!          Subp       : Entity_Id;
!          Par_Subp   : Entity_Id) return Boolean;
!       --  Checks whether the dispatch-table wrapper (DTW) for Subp must be
!       --  built to evaluate the given class-wide condition.
! 
!       --------------------
!       -- Build_DTW_Body --
!       --------------------
! 
!       function Build_DTW_Body
!         (Loc          : Source_Ptr;
!          DTW_Spec     : Node_Id;
!          DTW_Decls    : List_Id;
!          Par_Prim     : Entity_Id;
!          Wrapped_Subp : Entity_Id) return Node_Id
!       is
!          Par_Typ    : constant Entity_Id := Find_Dispatching_Type (Par_Prim);
!          Actuals    : constant List_Id   := Empty_List;
!          Call       : Node_Id;
!          Formal     : Entity_Id := First_Formal (Par_Prim);
!          New_F_Spec : Entity_Id := First (Parameter_Specifications (DTW_Spec));
!          New_Formal : Entity_Id;
! 
!       begin
!          --  Build parameter association for call to wrapped subprogram
! 
!          while Present (Formal) loop
!             New_Formal := Defining_Identifier (New_F_Spec);
! 
!             --  If the controlling argument is inherited, add conversion to
!             --  parent type for the call.
! 
!             if Etype (Formal) = Par_Typ
!               and then Is_Controlling_Formal (Formal)
!             then
!                Append_To (Actuals,
!                  Make_Type_Conversion (Loc,
!                    New_Occurrence_Of (Par_Typ, Loc),
!                    New_Occurrence_Of (New_Formal, Loc)));
!             else
!                Append_To (Actuals, New_Occurrence_Of (New_Formal, Loc));
!             end if;
! 
!             Next_Formal (Formal);
!             Next (New_F_Spec);
!          end loop;
! 
!          if Ekind (Wrapped_Subp) = E_Procedure then
!             Call :=
!               Make_Procedure_Call_Statement (Loc,
!                 Name => New_Occurrence_Of (Wrapped_Subp, Loc),
!                 Parameter_Associations => Actuals);
!          else
!             Call :=
!               Make_Simple_Return_Statement (Loc,
!                 Expression =>
!                   Make_Function_Call (Loc,
!                     Name => New_Occurrence_Of (Wrapped_Subp, Loc),
!                     Parameter_Associations => Actuals));
!          end if;
! 
!          return
!            Make_Subprogram_Body (Loc,
!              Specification              => Copy_Subprogram_Spec (DTW_Spec),
!              Declarations               => DTW_Decls,
!              Handled_Statement_Sequence =>
!                Make_Handled_Sequence_Of_Statements (Loc,
!                  Statements => New_List (Call),
!                  End_Label  => Make_Identifier (Loc,
!                                  Chars (Defining_Entity (DTW_Spec)))));
!       end Build_DTW_Body;
! 
!       --------------------
!       -- Build_DTW_Spec --
!       --------------------
! 
!       function Build_DTW_Spec (Par_Prim : Entity_Id) return Node_Id is
!          DTW_Id   : Entity_Id;
!          DTW_Spec : Node_Id;
! 
!       begin
!          DTW_Spec := Build_Overriding_Spec (Par_Prim, R);
!          DTW_Id   := Defining_Entity (DTW_Spec);
! 
!          --  Add minimal decoration of fields
! 
!          Mutate_Ekind (DTW_Id, Ekind (Par_Prim));
!          Set_LSP_Subprogram (DTW_Id, Par_Prim);
!          Set_Is_Dispatch_Table_Wrapper (DTW_Id);
!          Set_Is_Wrapper (DTW_Id);
! 
!          --  The DTW wrapper is never a null procedure
! 
!          if Nkind (DTW_Spec) = N_Procedure_Specification then
!             Set_Null_Present (DTW_Spec, False);
!          end if;
! 
!          return DTW_Spec;
!       end Build_DTW_Spec;
  
        ---------------------------------------
        -- Build_Inherited_Condition_Pragmas --
        ---------------------------------------
  
!       procedure Build_Inherited_Condition_Pragmas
!         (Subp           : Entity_Id;
!          Wrapper_Needed : out Boolean)
!       is
!          Class_Pre  : constant Node_Id :=
!                         Class_Preconditions (Ultimate_Alias (Subp));
!          Class_Post : Node_Id := Class_Postconditions (Par_Prim);
!          A_Post     : Node_Id;
!          New_Prag   : Node_Id;
  
        begin
!          Wrapper_Needed := False;
  
!          if No (Class_Pre) and then No (Class_Post) then
!             return;
!          end if;
  
!          --  For class-wide preconditions we just evaluate whether the wrapper
!          --  is needed; there is no need to build the pragma since the check
!          --  is performed on the caller side.
! 
!          if Present (Class_Pre)
!            and then Needs_Wrapper (Class_Pre, Subp, Par_Prim)
!          then
!             Wrapper_Needed := True;
           end if;
  
!          --  For class-wide postconditions we evaluate whether the wrapper is
!          --  needed and we build the class-wide postcondition pragma to install
!          --  it in the wrapper.
  
!          if Present (Class_Post)
!            and then Needs_Wrapper (Class_Post, Subp, Par_Prim)
!          then
!             Wrapper_Needed := True;
! 
!             --  Update the class-wide postcondition
! 
!             Class_Post := New_Copy_Tree (Class_Post);
              Build_Class_Wide_Expression
!               (Pragma_Or_Expr => Class_Post,
!                Subp           => Subp,
                 Par_Subp       => Par_Prim,
!                Adjust_Sloc    => False);
  
!             --  Install the updated class-wide postcondition in a copy of the
!             --  pragma postcondition defined for the nearest ancestor.
! 
!             A_Post := Get_Class_Wide_Pragma (Par_Prim,
!                         Pragma_Postcondition);
! 
!             if No (A_Post) then
!                declare
!                   Subps : constant Subprogram_List :=
!                             Inherited_Subprograms (Subp);
!                begin
!                   for Index in Subps'Range loop
!                      A_Post := Get_Class_Wide_Pragma (Subps (Index),
!                                  Pragma_Postcondition);
!                      exit when Present (A_Post);
!                   end loop;
!                end;
              end if;
+ 
+             New_Prag := New_Copy_Tree (A_Post);
+             Rewrite
+               (Expression (First (Pragma_Argument_Associations (New_Prag))),
+                Class_Post);
+             Append (New_Prag, Decls);
           end if;
        end Build_Inherited_Condition_Pragmas;
  
+       -------------------
+       -- Needs_Wrapper --
+       -------------------
+ 
+       function Needs_Wrapper
+         (Class_Cond : Node_Id;
+          Subp       : Entity_Id;
+          Par_Subp   : Entity_Id) return Boolean
+       is
+          Result : Boolean := False;
+ 
+          function Check_Entity (N : Node_Id) return Traverse_Result;
+          --  Check calls to overridden primitives
+ 
+          --------------------
+          -- Replace_Entity --
+          --------------------
+ 
+          function Check_Entity (N : Node_Id) return Traverse_Result is
+             New_E : Entity_Id;
+ 
+          begin
+             if Nkind (N) = N_Identifier
+               and then Present (Entity (N))
+               and then
+                 (Is_Formal (Entity (N)) or else Is_Subprogram (Entity (N)))
+               and then
+                 (Nkind (Parent (N)) /= N_Attribute_Reference
+                   or else Attribute_Name (Parent (N)) /= Name_Class)
+             then
+                --  The check does not apply to dispatching calls within the
+                --  condition, but only to calls whose static tag is that of
+                --  the parent type.
+ 
+                if Is_Subprogram (Entity (N))
+                  and then Nkind (Parent (N)) = N_Function_Call
+                  and then Present (Controlling_Argument (Parent (N)))
+                then
+                   return OK;
+                end if;
+ 
+                --  Determine whether entity has a renaming
+ 
+                New_E := Get_Mapped_Entity (Entity (N));
+ 
+                --  If the entity is an overridden primitive and we are not
+                --  in GNATprove mode, we must build a wrapper for the current
+                --  inherited operation. If the reference is the prefix of an
+                --  attribute such as 'Result (or others ???) there is no need
+                --  for a wrapper: the condition is just rewritten in terms of
+                --  the inherited subprogram.
+ 
+                if Present (New_E)
+                  and then Comes_From_Source (New_E)
+                  and then Is_Subprogram (New_E)
+                  and then Nkind (Parent (N)) /= N_Attribute_Reference
+                  and then not GNATprove_Mode
+                then
+                   Result := True;
+                   return Abandon;
+                end if;
+             end if;
+ 
+             return OK;
+          end Check_Entity;
+ 
+          procedure Check_Condition_Entities is
+            new Traverse_Proc (Check_Entity);
+ 
+       --  Start of processing for Needs_Wrapper
+ 
+       begin
+          Update_Primitives_Mapping (Par_Subp, Subp);
+ 
+          Map_Formals (Par_Subp, Subp);
+          Check_Condition_Entities (Class_Cond);
+ 
+          return Result;
+       end Needs_Wrapper;
+ 
+       Ifaces_List    : Elist_Id := No_Elist;
+       Ifaces_Listed  : Boolean := False;
+       --  Cache the list of interface operations inherited by R
+ 
     --  Start of processing for Check_Inherited_Conditions
  
     begin
!       if Late_Overriding then
!          Op_Node := First_Elmt (Prim_Ops);
!          while Present (Op_Node) loop
!             Prim := Node (Op_Node);
  
!             --  Map the overridden primitive to the overriding one
  
!             if Present (Overridden_Operation (Prim))
!               and then Comes_From_Source (Prim)
!             then
!                Par_Prim := Overridden_Operation (Prim);
!                Update_Primitives_Mapping (Par_Prim, Prim);
  
!                --  Force discarding previous mappings of its formals
! 
!                Map_Formals (Par_Prim, Prim, Force_Update => True);
!             end if;
! 
!             Next_Elmt (Op_Node);
!          end loop;
!       end if;
  
        --  Perform validity checks on the inherited conditions of overriding
        --  operations, for conformance with LSP, and apply SPARK-specific
*************** package body Freeze is
*** 1485,1494 ****
        while Present (Op_Node) loop
           Prim := Node (Op_Node);
  
!          if Present (Overridden_Operation (Prim))
             and then Comes_From_Source (Prim)
           then
!             Par_Prim := Overridden_Operation (Prim);
  
              --  Analyze the contract items of the overridden operation, before
              --  they are rewritten as pragmas.
--- 1828,1850 ----
        while Present (Op_Node) loop
           Prim := Node (Op_Node);
  
!          Par_Prim := Overridden_Operation (Prim);
!          if Present (Par_Prim)
             and then Comes_From_Source (Prim)
           then
!             --  When the primitive is an LSP wrapper we climb to the parent
!             --  primitive that has the inherited contract.
! 
!             if Is_Wrapper (Par_Prim)
!               and then Present (LSP_Subprogram (Par_Prim))
!             then
!                Par_Prim := LSP_Subprogram (Par_Prim);
!             end if;
! 
!             --  Check that overrider and overridden operations have
!             --  the same strub mode.
! 
!             Check_Same_Strub_Mode (Prim, Par_Prim);
  
              --  Analyze the contract items of the overridden operation, before
              --  they are rewritten as pragmas.
*************** package body Freeze is
*** 1502,1514 ****
  
              if GNATprove_Mode then
                 Collect_Inherited_Class_Wide_Conditions (Prim);
  
!             --  Otherwise build the corresponding pragmas to check for legality
!             --  of the inherited condition.
  
!             else
!                Build_Inherited_Condition_Pragmas (Prim);
!             end if;
           end if;
  
           Next_Elmt (Op_Node);
--- 1858,1912 ----
  
              if GNATprove_Mode then
                 Collect_Inherited_Class_Wide_Conditions (Prim);
+             end if;
+          end if;
  
!          --  Go over operations inherited from interfaces and check
!          --  them for strub mode compatibility as well.
  
!          if Has_Interfaces (R)
!            and then Is_Dispatching_Operation (Prim)
!            and then Find_Dispatching_Type (Prim) = R
!          then
!             declare
!                Elmt        : Elmt_Id;
!                Iface_Elmt  : Elmt_Id;
!                Iface       : Entity_Id;
!                Iface_Prim  : Entity_Id;
! 
!             begin
!                --  Collect the interfaces only once. We haven't
!                --  finished freezing yet, so we can't use the faster
!                --  search from Sem_Disp.Covered_Interface_Primitives.
! 
!                if not Ifaces_Listed then
!                   Collect_Interfaces (R, Ifaces_List);
!                   Ifaces_Listed := True;
!                end if;
! 
!                Iface_Elmt := First_Elmt (Ifaces_List);
!                while Present (Iface_Elmt) loop
!                   Iface := Node (Iface_Elmt);
! 
!                   Elmt := First_Elmt (Primitive_Operations (Iface));
!                   while Present (Elmt) loop
!                      Iface_Prim := Node (Elmt);
! 
!                      if Iface_Prim /= Par_Prim
!                        and then Chars (Iface_Prim) = Chars (Prim)
!                        and then Comes_From_Source (Iface_Prim)
!                        and then (Is_Interface_Conformant
!                                    (R, Iface_Prim, Prim))
!                      then
!                         Check_Same_Strub_Mode (Prim, Iface_Prim);
!                      end if;
! 
!                      Next_Elmt (Elmt);
!                   end loop;
! 
!                   Next_Elmt (Iface_Elmt);
!                end loop;
!             end;
           end if;
  
           Next_Elmt (Op_Node);
*************** package body Freeze is
*** 1521,1532 ****
        Op_Node := First_Elmt (Prim_Ops);
  
        while Present (Op_Node) loop
!          Decls         := Empty_List;
!          Prim          := Node (Op_Node);
!          Needs_Wrapper := False;
  
!          if not Comes_From_Source (Prim) and then Present (Alias (Prim)) then
!             Par_Prim := Alias (Prim);
  
              --  Analyze the contract items of the parent operation, and
              --  determine whether a wrapper is needed. This is determined
--- 1919,1944 ----
        Op_Node := First_Elmt (Prim_Ops);
  
        while Present (Op_Node) loop
!          Decls          := Empty_List;
!          Prim           := Node (Op_Node);
!          Wrapper_Needed := False;
  
!          --  Skip internal entities built for mapping interface primitives
! 
!          if not Comes_From_Source (Prim)
!            and then Present (Alias (Prim))
!            and then No (Interface_Alias (Prim))
!          then
!             Par_Prim := Ultimate_Alias (Prim);
! 
!             --  When the primitive is an LSP wrapper we climb to the parent
!             --  primitive that has the inherited contract.
! 
!             if Is_Wrapper (Par_Prim)
!               and then Present (LSP_Subprogram (Par_Prim))
!             then
!                Par_Prim := LSP_Subprogram (Par_Prim);
!             end if;
  
              --  Analyze the contract items of the parent operation, and
              --  determine whether a wrapper is needed. This is determined
*************** package body Freeze is
*** 1535,1598 ****
              --  in the loop above.
  
              Analyze_Entry_Or_Subprogram_Contract (Par_Prim);
!             Build_Inherited_Condition_Pragmas (Prim);
           end if;
  
!          if Needs_Wrapper
             and then not Is_Abstract_Subprogram (Par_Prim)
             and then Expander_Active
           then
!             --  We need to build a new primitive that overrides the inherited
!             --  one, and whose inherited expression has been updated above.
!             --  These expressions are the arguments of pragmas that are part
!             --  of the declarations of the wrapper. The wrapper holds a single
!             --  statement that is a call to the class-wide clone, where the
!             --  controlling actuals are conversions to the corresponding type
!             --  in the parent primitive:
! 
!             --    procedure New_Prim (F1 : T1; ...);
!             --    procedure New_Prim (F1 : T1; ...) is
!             --       pragma Check (Precondition, Expr);
!             --    begin
!             --       Par_Prim_Clone (Par_Type (F1), ...);
!             --    end;
! 
!             --  If the primitive is a function the statement is a return
!             --  statement with a call.
  
              declare
                 Loc      : constant Source_Ptr := Sloc (R);
!                Par_R    : constant Node_Id    := Parent (R);
!                New_Body : Node_Id;
!                New_Decl : Node_Id;
!                New_Spec : Node_Id;
  
              begin
!                New_Spec := Build_Overriding_Spec (Par_Prim, R);
!                New_Decl :=
!                  Make_Subprogram_Declaration (Loc,
!                    Specification => New_Spec);
  
!                --  Insert the declaration and the body of the wrapper after
!                --  type declaration that generates inherited operation. For
!                --  a null procedure, the declaration implies a null body.
  
!                if Nkind (New_Spec) = N_Procedure_Specification
!                  and then Null_Present (New_Spec)
!                then
!                   Insert_After_And_Analyze (Par_R, New_Decl);
  
                 else
!                   --  Build body as wrapper to a call to the already built
!                   --  class-wide clone.
  
!                   New_Body :=
!                     Build_Class_Wide_Clone_Call
!                       (Loc, Decls, Par_Prim, New_Spec);
  
!                   Insert_List_After_And_Analyze
!                     (Par_R, New_List (New_Decl, New_Body));
                 end if;
              end;
           end if;
  
--- 1947,2117 ----
              --  in the loop above.
  
              Analyze_Entry_Or_Subprogram_Contract (Par_Prim);
!             Build_Inherited_Condition_Pragmas (Prim, Wrapper_Needed);
           end if;
  
!          if Wrapper_Needed
             and then not Is_Abstract_Subprogram (Par_Prim)
             and then Expander_Active
           then
!             --  Build the dispatch-table wrapper (DTW). The support for
!             --  AI12-0195 relies on two kind of wrappers: one for indirect
!             --  calls (also used for AI12-0220), and one for putting in the
!             --  dispatch table:
!             --
!             --    1) "indirect-call wrapper" (ICW) is needed anytime there are
!             --       class-wide preconditions. Prim'Access will point directly
!             --       at the ICW if any, or at the "pristine" body if Prim has
!             --       no class-wide preconditions.
!             --
!             --    2) "dispatch-table wrapper" (DTW) is needed anytime the class
!             --       wide preconditions *or* the class-wide postconditions are
!             --       affected by overriding.
!             --
!             --  The DTW holds a single statement that is a single call where
!             --  the controlling actuals are conversions to the corresponding
!             --  type in the parent primitive. If the primitive is a function
!             --  the statement is a return statement with a call.
  
              declare
+                Alias_Id : constant Entity_Id  := Ultimate_Alias (Prim);
                 Loc      : constant Source_Ptr := Sloc (R);
!                DTW_Body : Node_Id;
!                DTW_Decl : Node_Id;
!                DTW_Id   : Entity_Id;
!                DTW_Spec : Node_Id;
  
              begin
!                --  The wrapper must be analyzed in the scope of its wrapped
!                --  primitive (to ensure its correct decoration).
  
!                Push_Scope (Scope (Prim));
  
!                DTW_Spec := Build_DTW_Spec (Par_Prim);
!                DTW_Id   := Defining_Entity (DTW_Spec);
!                DTW_Decl := Make_Subprogram_Declaration (Loc,
!                              Specification => DTW_Spec);
! 
!                --  For inherited class-wide preconditions the DTW wrapper
!                --  reuses the ICW of the parent (which checks the parent
!                --  interpretation of the class-wide preconditions); the
!                --  interpretation of the class-wide preconditions for the
!                --  inherited subprogram is checked at the caller side.
! 
!                --  When the subprogram inherits class-wide postconditions
!                --  the DTW also checks the interpretation of the class-wide
!                --  postconditions for the inherited subprogram, and the body
!                --  of the parent checks its interpretation of the parent for
!                --  the class-wide postconditions.
! 
!                --      procedure Prim (F1 : T1; ...) is
!                --         [ pragma Check (Postcondition, Expr); ]
!                --      begin
!                --         Par_Prim_ICW (Par_Type (F1), ...);
!                --      end;
! 
!                if Present (Indirect_Call_Wrapper (Par_Prim)) then
!                   DTW_Body :=
!                     Build_DTW_Body (Loc,
!                       DTW_Spec     => DTW_Spec,
!                       DTW_Decls    => Decls,
!                       Par_Prim     => Par_Prim,
!                       Wrapped_Subp => Indirect_Call_Wrapper (Par_Prim));
! 
!                --  For subprograms that only inherit class-wide postconditions
!                --  the DTW wrapper calls the parent primitive (which on its
!                --  body checks the interpretation of the class-wide post-
!                --  conditions for the parent subprogram), and the DTW checks
!                --  the interpretation of the class-wide postconditions for the
!                --  inherited subprogram.
! 
!                --      procedure Prim (F1 : T1; ...) is
!                --         pragma Check (Postcondition, Expr);
!                --      begin
!                --         Par_Prim (Par_Type (F1), ...);
!                --      end;
  
                 else
!                   DTW_Body :=
!                     Build_DTW_Body (Loc,
!                       DTW_Spec     => DTW_Spec,
!                       DTW_Decls    => Decls,
!                       Par_Prim     => Par_Prim,
!                       Wrapped_Subp => Par_Prim);
!                end if;
  
!                --  Insert the declaration of the wrapper before the freezing
!                --  node of the record type declaration to ensure that it will
!                --  override the internal primitive built by Derive_Subprogram.
  
!                if Late_Overriding then
!                   Ensure_Freeze_Node (R);
!                   Insert_Before_And_Analyze (Freeze_Node (R), DTW_Decl);
!                else
!                   Append_Freeze_Action (R, DTW_Decl);
                 end if;
+ 
+                Analyze (DTW_Decl);
+ 
+                --  Insert the body of the wrapper in the freeze actions of
+                --  its record type declaration to ensure that it is placed
+                --  in the scope of its declaration but not too early to cause
+                --  premature freezing of other entities.
+ 
+                Append_Freeze_Action (R, DTW_Body);
+                Analyze (DTW_Body);
+ 
+                --  Ensure correct decoration
+ 
+                pragma Assert (Is_Dispatching_Operation (DTW_Id));
+                pragma Assert (Present (Overridden_Operation (DTW_Id)));
+                pragma Assert (Overridden_Operation (DTW_Id) = Alias_Id);
+ 
+                --  Inherit dispatch table slot
+ 
+                Set_DTC_Entity_Value (R, DTW_Id);
+                Set_DT_Position (DTW_Id, DT_Position (Alias_Id));
+ 
+                --  Register the wrapper in the dispatch table
+ 
+                if Late_Overriding
+                  and then not Building_Static_DT (R)
+                then
+                   Insert_List_After_And_Analyze (Freeze_Node (R),
+                     Register_Primitive (Loc, DTW_Id));
+                end if;
+ 
+                --  Build the helper and ICW for the DTW
+ 
+                if Present (Indirect_Call_Wrapper (Par_Prim)) then
+                   declare
+                      CW_Subp : Entity_Id;
+                      Decl_N  : Node_Id;
+                      Body_N  : Node_Id;
+ 
+                   begin
+                      Merge_Class_Conditions (DTW_Id);
+                      Make_Class_Precondition_Subps (DTW_Id,
+                        Late_Overriding => Late_Overriding);
+ 
+                      CW_Subp := Static_Call_Helper (DTW_Id);
+                      Decl_N  := Unit_Declaration_Node (CW_Subp);
+                      Analyze (Decl_N);
+ 
+                      --  If the DTW was built for a late-overriding primitive
+                      --  its body must be analyzed now (since the tagged type
+                      --  is already frozen).
+ 
+                      if Late_Overriding then
+                         Body_N :=
+                           Unit_Declaration_Node
+                             (Corresponding_Body (Decl_N));
+                         Analyze (Body_N);
+                      end if;
+                   end;
+                end if;
+ 
+                Pop_Scope;
              end;
           end if;
  
*************** package body Freeze is
*** 1605,1611 ****
     ----------------------------
  
     procedure Check_Strict_Alignment (E : Entity_Id) is
!       Comp  : Entity_Id;
  
     begin
        --  Bit-packed array types do not require strict alignment, even if they
--- 2124,2130 ----
     ----------------------------
  
     procedure Check_Strict_Alignment (E : Entity_Id) is
!       Comp : Entity_Id;
  
     begin
        --  Bit-packed array types do not require strict alignment, even if they
*************** package body Freeze is
*** 1835,1841 ****
        procedure Freeze_All_Ent (From : Entity_Id; After : in out Node_Id) is
           E     : Entity_Id;
           Flist : List_Id;
-          Lastn : Node_Id;
  
           procedure Process_Flist;
           --  If freeze nodes are present, insert and analyze, and reset cursor
--- 2354,2359 ----
*************** package body Freeze is
*** 1846,1851 ****
--- 2364,2370 ----
           -------------------
  
           procedure Process_Flist is
+             Lastn : Node_Id;
           begin
              if Is_Non_Empty_List (Flist) then
                 Lastn := Next (After);
*************** package body Freeze is
*** 1874,1880 ****
              --  created for entry parameters must be frozen.
  
              if Ekind (E) = E_Package
!               and then No (Renamed_Object (E))
                and then not Is_Child_Unit (E)
                and then not Is_Frozen (E)
              then
--- 2393,2399 ----
              --  created for entry parameters must be frozen.
  
              if Ekind (E) = E_Package
!               and then No (Renamed_Entity (E))
                and then not Is_Child_Unit (E)
                and then not Is_Frozen (E)
              then
*************** package body Freeze is
*** 2041,2046 ****
--- 2560,2577 ----
                 Process_Default_Expressions (E, After);
              end if;
  
+             --  Check subprogram renamings for the same strub-mode.
+             --  Avoid rechecking dispatching operations, that's taken
+             --  care of in Check_Inherited_Conditions, that covers
+             --  inherited interface operations.
+ 
+             Item := Alias (E);
+             if Present (Item)
+               and then not Is_Dispatching_Operation (E)
+             then
+                Check_Same_Strub_Mode (E, Item);
+             end if;
+ 
              if not Has_Completion (E) then
                 Decl := Unit_Declaration_Node (E);
  
*************** package body Freeze is
*** 2068,2074 ****
           elsif Is_Concurrent_Type (E) then
              Item := First_Entity (E);
              while Present (Item) loop
!                if (Is_Entry (Item) or else Is_Subprogram (Item))
                   and then not Default_Expressions_Processed (Item)
                 then
                    Process_Default_Expressions (Item, After);
--- 2599,2605 ----
           elsif Is_Concurrent_Type (E) then
              Item := First_Entity (E);
              while Present (Item) loop
!                if Is_Subprogram_Or_Entry (Item)
                   and then not Default_Expressions_Processed (Item)
                 then
                    Process_Default_Expressions (Item, After);
*************** package body Freeze is
*** 2180,2186 ****
        --  List of freezing actions, left at No_List if none
  
        Test_E : Entity_Id := E;
!       --  This could use a comment ???
  
        procedure Add_To_Result (Fnod : Node_Id);
        --  Add freeze action Fnod to list Result
--- 2711,2721 ----
        --  List of freezing actions, left at No_List if none
  
        Test_E : Entity_Id := E;
!       --  A local temporary used to test if freezing is necessary for E, since
!       --  its value can be set to something other than E in certain cases. For
!       --  example, E cannot be used directly in cases such as when it is an
!       --  Itype defined within a record - since it is the location of record
!       --  which matters.
  
        procedure Add_To_Result (Fnod : Node_Id);
        --  Add freeze action Fnod to list Result
*************** package body Freeze is
*** 2194,2199 ****
--- 2729,2742 ----
        --  which is the current instance type can only be applied when the type
        --  is limited.
  
+       procedure Check_No_Parts_Violations
+         (Typ : Entity_Id; Aspect_No_Parts : Aspect_Id) with
+          Pre => Aspect_No_Parts in
+                   Aspect_No_Controlled_Parts | Aspect_No_Task_Parts;
+       --  Check that Typ does not violate the semantics of the specified
+       --  Aspect_No_Parts (No_Controlled_Parts or No_Task_Parts) when it is
+       --  specified on Typ or one of its ancestors.
+ 
        procedure Check_Suspicious_Convention (Rec_Type : Entity_Id);
        --  Give a warning for pragma Convention with language C or C++ applied
        --  to a discriminated record type. This is suppressed for the unchecked
*************** package body Freeze is
*** 2414,2419 ****
--- 2957,3339 ----
           end if;
        end Check_Current_Instance;
  
+       -------------------------------
+       -- Check_No_Parts_Violations --
+       -------------------------------
+ 
+       procedure Check_No_Parts_Violations
+         (Typ : Entity_Id; Aspect_No_Parts : Aspect_Id)
+       is
+ 
+          function Find_Aspect_No_Parts
+            (Typ : Entity_Id) return Node_Id;
+          --  Search for Aspect_No_Parts on a given type. When
+          --  the aspect is not explicity specified Empty is returned.
+ 
+          function Get_Aspect_No_Parts_Value
+            (Typ : Entity_Id) return Entity_Id;
+          --  Obtain the value for the Aspect_No_Parts on a given
+          --  type. When the aspect is not explicitly specified Empty is
+          --  returned.
+ 
+          function Has_Aspect_No_Parts
+            (Typ : Entity_Id) return Boolean;
+          --  Predicate function which identifies whether No_Parts
+          --  is explicitly specified on a given type.
+ 
+          -------------------------------------
+          -- Find_Aspect_No_Parts --
+          -------------------------------------
+ 
+          function Find_Aspect_No_Parts
+            (Typ : Entity_Id) return Node_Id
+          is
+             Partial_View : constant Entity_Id :=
+               Incomplete_Or_Partial_View (Typ);
+ 
+             Aspect_Spec : Entity_Id :=
+               Find_Aspect (Typ, Aspect_No_Parts);
+             Curr_Aspect_Spec : Entity_Id;
+          begin
+ 
+             --  Examine Typ's associated node, when present, since aspect
+             --  specifications do not get transferred when nodes get rewritten.
+ 
+             --  For example, this can happen in the expansion of array types
+ 
+             if No (Aspect_Spec)
+               and then Present (Associated_Node_For_Itype (Typ))
+               and then Nkind (Associated_Node_For_Itype (Typ))
+                          = N_Full_Type_Declaration
+             then
+                Aspect_Spec :=
+                  Find_Aspect
+                    (Id => Defining_Identifier
+                             (Associated_Node_For_Itype (Typ)),
+                     A  => Aspect_No_Parts);
+             end if;
+ 
+             --  Examine aspects specifications on private type declarations
+ 
+             --  Should Find_Aspect be improved to handle this case ???
+ 
+             if No (Aspect_Spec)
+               and then Present (Partial_View)
+               and then Present
+                          (Aspect_Specifications
+                            (Declaration_Node
+                              (Partial_View)))
+             then
+                Curr_Aspect_Spec :=
+                  First
+                    (Aspect_Specifications
+                      (Declaration_Node
+                        (Partial_View)));
+ 
+                --  Search through aspects present on the private type
+ 
+                while Present (Curr_Aspect_Spec) loop
+                   if Get_Aspect_Id (Curr_Aspect_Spec)
+                        = Aspect_No_Parts
+                   then
+                      Aspect_Spec := Curr_Aspect_Spec;
+                      exit;
+                   end if;
+ 
+                   Next (Curr_Aspect_Spec);
+                end loop;
+ 
+             end if;
+ 
+             --  When errors are posted on the aspect return Empty
+ 
+             if Error_Posted (Aspect_Spec) then
+                return Empty;
+             end if;
+ 
+             return Aspect_Spec;
+          end Find_Aspect_No_Parts;
+ 
+          ------------------------------------------
+          -- Get_Aspect_No_Parts_Value --
+          ------------------------------------------
+ 
+          function Get_Aspect_No_Parts_Value
+            (Typ : Entity_Id) return Entity_Id
+          is
+             Aspect_Spec : constant Entity_Id :=
+               Find_Aspect_No_Parts (Typ);
+          begin
+ 
+             --  Return the value of the aspect when present
+ 
+             if Present (Aspect_Spec) then
+ 
+                --  No expression is the same as True
+ 
+                if No (Expression (Aspect_Spec)) then
+                   return Standard_True;
+                end if;
+ 
+                --  Assume its expression has already been constant folded into
+                --  a Boolean value and return its value.
+ 
+                return Entity (Expression (Aspect_Spec));
+             end if;
+ 
+             --  Otherwise, the aspect is not specified - so return Empty
+ 
+             return Empty;
+          end Get_Aspect_No_Parts_Value;
+ 
+          ------------------------------------
+          -- Has_Aspect_No_Parts --
+          ------------------------------------
+ 
+          function Has_Aspect_No_Parts
+            (Typ : Entity_Id) return Boolean
+          is (Present (Find_Aspect_No_Parts (Typ)));
+ 
+          --  Generic instances
+ 
+          -------------------------------------------
+          -- Get_Generic_Formal_Types_In_Hierarchy --
+          -------------------------------------------
+ 
+          function Get_Generic_Formal_Types_In_Hierarchy
+            is new Collect_Types_In_Hierarchy (Predicate => Is_Generic_Formal);
+          --  Return a list of all types within a given type's hierarchy which
+          --  are generic formals.
+ 
+          ----------------------------------------
+          -- Get_Types_With_Aspect_In_Hierarchy --
+          ----------------------------------------
+ 
+          function Get_Types_With_Aspect_In_Hierarchy
+            is new Collect_Types_In_Hierarchy
+                     (Predicate => Has_Aspect_No_Parts);
+          --  Returns a list of all types within a given type's hierarchy which
+          --  have the Aspect_No_Parts specified.
+ 
+          --  Local declarations
+ 
+          Aspect_Value      : Entity_Id;
+          Curr_Value        : Entity_Id;
+          Curr_Typ_Elmt     : Elmt_Id;
+          Curr_Body_Elmt    : Elmt_Id;
+          Curr_Formal_Elmt  : Elmt_Id;
+          Gen_Bodies        : Elist_Id;
+          Gen_Formals       : Elist_Id;
+          Scop              : Entity_Id;
+          Types_With_Aspect : Elist_Id;
+ 
+       --  Start of processing for Check_No_Parts_Violations
+ 
+       begin
+          --  Nothing to check if the type is elementary or artificial
+ 
+          if Is_Elementary_Type (Typ) or else not Comes_From_Source (Typ) then
+             return;
+          end if;
+ 
+          Types_With_Aspect := Get_Types_With_Aspect_In_Hierarchy (Typ);
+ 
+          --  Nothing to check if there are no types with No_Parts specified
+ 
+          if Is_Empty_Elmt_List (Types_With_Aspect) then
+             return;
+          end if;
+ 
+          --  Set name for all errors below
+ 
+          Error_Msg_Name_1 := Aspect_Names (Aspect_No_Parts);
+ 
+          --  Obtain the aspect value for No_Parts for comparison
+ 
+          Aspect_Value :=
+            Get_Aspect_No_Parts_Value
+              (Node (First_Elmt (Types_With_Aspect)));
+ 
+          --  When the value is True and there are controlled/task parts or the
+          --  type itself is controlled/task, trigger the appropriate error.
+ 
+          if Aspect_Value = Standard_True then
+             if Aspect_No_Parts = Aspect_No_Controlled_Parts then
+                if Is_Controlled (Typ) or else Has_Controlled_Component (Typ)
+                then
+                   Error_Msg_N
+                     ("aspect % applied to controlled type &", Typ);
+                end if;
+ 
+             elsif Aspect_No_Parts = Aspect_No_Task_Parts then
+                if Has_Task (Typ) then
+                   Error_Msg_N
+                     ("aspect % applied to task type &", Typ);
+                end if;
+ 
+             else
+                raise Program_Error;
+             end if;
+          end if;
+ 
+          --  Move through Types_With_Aspect - checking that the value specified
+          --  for their corresponding Aspect_No_Parts do not override each
+          --  other.
+ 
+          Curr_Typ_Elmt := First_Elmt (Types_With_Aspect);
+          while Present (Curr_Typ_Elmt) loop
+             Curr_Value :=
+               Get_Aspect_No_Parts_Value (Node (Curr_Typ_Elmt));
+ 
+             --  Compare the aspect value against the current type
+ 
+             if Curr_Value /= Aspect_Value then
+                Error_Msg_NE
+                  ("cannot override aspect % of "
+                    & "ancestor type &", Typ, Node (Curr_Typ_Elmt));
+                return;
+             end if;
+ 
+             Next_Elmt (Curr_Typ_Elmt);
+          end loop;
+ 
+          --  Issue an error if the aspect applies to a type declared inside a
+          --  generic body and if said type derives from or has a component
+          --  of ageneric formal type - since those are considered to have
+          --  controlled/task parts and have Aspect_No_Parts specified as
+          --  False by default (RM H.4.1(4/5) is about the language-defined
+          --  No_Controlled_Parts aspect, and we are using the same rules for
+          --  No_Task_Parts).
+ 
+          --  We do not check tagged types since deriving from a formal type
+          --  within an enclosing generic unit is already illegal
+          --  (RM 3.9.1 (4/2)).
+ 
+          if Aspect_Value = Standard_True
+            and then In_Generic_Body (Typ)
+            and then not Is_Tagged_Type (Typ)
+          then
+             Gen_Bodies  := New_Elmt_List;
+             Gen_Formals :=
+               Get_Generic_Formal_Types_In_Hierarchy
+                 (Typ                => Typ,
+                  Examine_Components => True);
+ 
+             --  Climb scopes collecting generic bodies
+ 
+             Scop := Scope (Typ);
+             while Present (Scop) and then Scop /= Standard_Standard loop
+ 
+                --  Generic package body
+ 
+                if Ekind (Scop) = E_Generic_Package
+                  and then In_Package_Body (Scop)
+                then
+                   Append_Elmt (Scop, Gen_Bodies);
+ 
+                --  Generic subprogram body
+ 
+                elsif Is_Generic_Subprogram (Scop) then
+                   Append_Elmt (Scop, Gen_Bodies);
+                end if;
+ 
+                Scop := Scope (Scop);
+             end loop;
+ 
+             --  Warn about the improper use of Aspect_No_Parts on a type
+             --  declaration deriving from or that has a component of a generic
+             --  formal type within the formal type's corresponding generic
+             --  body by moving through all formal types in Typ's hierarchy and
+             --  checking if they are formals in any of the enclosing generic
+             --  bodies.
+ 
+             --  However, a special exception gets made for formal types which
+             --  derive from a type which has Aspect_No_Parts True.
+ 
+             --  For example:
+ 
+             --  generic
+             --     type Form is private;
+             --  package G is
+             --     type Type_A is new Form with No_Controlled_Parts; --  OK
+             --  end;
+             --
+             --  package body G is
+             --     type Type_B is new Form with No_Controlled_Parts; --  ERROR
+             --  end;
+ 
+             --  generic
+             --     type Form is private;
+             --  package G is
+             --     type Type_A is record C : Form; end record
+             --       with No_Controlled_Parts;                       --  OK
+             --  end;
+             --
+             --  package body G is
+             --     type Type_B is record C : Form; end record
+             --       with No_Controlled_Parts;                       --  ERROR
+             --  end;
+ 
+             --  type Root is tagged null record with No_Controlled_Parts;
+             --
+             --  generic
+             --     type Form is new Root with private;
+             --  package G is
+             --     type Type_A is record C : Form; end record
+             --       with No_Controlled_Parts;                       --  OK
+             --  end;
+             --
+             --  package body G is
+             --     type Type_B is record C : Form; end record
+             --       with No_Controlled_Parts;                       --  OK
+             --  end;
+ 
+             Curr_Formal_Elmt := First_Elmt (Gen_Formals);
+             while Present (Curr_Formal_Elmt) loop
+ 
+                Curr_Body_Elmt := First_Elmt (Gen_Bodies);
+                while Present (Curr_Body_Elmt) loop
+ 
+                   --  Obtain types in the formal type's hierarchy which have
+                   --  the aspect specified.
+ 
+                   Types_With_Aspect :=
+                     Get_Types_With_Aspect_In_Hierarchy
+                       (Node (Curr_Formal_Elmt));
+ 
+                   --  We found a type declaration in a generic body where both
+                   --  Aspect_No_Parts is true and one of its ancestors is a
+                   --  generic formal type.
+ 
+                   if Scope (Node (Curr_Formal_Elmt)) =
+                        Node (Curr_Body_Elmt)
+ 
+                     --  Check that no ancestors of the formal type have
+                     --  Aspect_No_Parts True before issuing the error.
+ 
+                     and then (Is_Empty_Elmt_List (Types_With_Aspect)
+                                or else
+                                  Get_Aspect_No_Parts_Value
+                                    (Node (First_Elmt (Types_With_Aspect)))
+                                   = Standard_False)
+                   then
+                      Error_Msg_Node_1 := Typ;
+                      Error_Msg_Node_2 := Node (Curr_Formal_Elmt);
+                      Error_Msg
+                        ("aspect % cannot be applied to "
+                          & "type & which has an ancestor or component of "
+                          & "formal type & within the formal type's "
+                          & "corresponding generic body", Sloc (Typ));
+                   end if;
+ 
+                   Next_Elmt (Curr_Body_Elmt);
+                end loop;
+ 
+                Next_Elmt (Curr_Formal_Elmt);
+             end loop;
+          end if;
+       end Check_No_Parts_Violations;
+ 
        ---------------------------------
        -- Check_Suspicious_Convention --
        ---------------------------------
*************** package body Freeze is
*** 2523,2529 ****
  
                             Error_Msg_Uint_1 := Modv;
                             Error_Msg_N
!                              ("?M?2 '*'*^' may have been intended here",
                                Modulus);
                          end;
                       end if;
--- 3443,3449 ----
  
                             Error_Msg_Uint_1 := Modv;
                             Error_Msg_N
!                              ("?.m?2 '*'*^' may have been intended here",
                                Modulus);
                          end;
                       end if;
*************** package body Freeze is
*** 2811,2817 ****
                    --  cases of types whose alignment exceeds their size (the
                    --  padded type cases).
  
!                   if Csiz /= 0 then
                       declare
                          A : constant Uint := Alignment_In_Bits (Ctyp);
                       begin
--- 3731,3737 ----
                    --  cases of types whose alignment exceeds their size (the
                    --  padded type cases).
  
!                   if Csiz /= 0 and then Known_Alignment (Ctyp) then
                       declare
                          A : constant Uint := Alignment_In_Bits (Ctyp);
                       begin
*************** package body Freeze is
*** 2873,2878 ****
--- 3793,3799 ----
                       if Has_Pragma_Pack (Arr)
                         and then not Present (Comp_Size_C)
                         and then (Csiz = 7 or else Csiz = 15 or else Csiz = 31)
+                        and then Known_Esize (Base_Type (Ctyp))
                         and then Esize (Base_Type (Ctyp)) = Csiz + 1
                       then
                          Error_Msg_Uint_1 := Csiz;
*************** package body Freeze is
*** 2982,2990 ****
           --  Processing that is done only for subtypes
  
           else
!             --  Acquire alignment from base type
  
!             if Unknown_Alignment (Arr) then
                 Set_Alignment (Arr, Alignment (Base_Type (Arr)));
                 Adjust_Esize_Alignment (Arr);
              end if;
--- 3903,3914 ----
           --  Processing that is done only for subtypes
  
           else
!             --  Acquire alignment from base type. Known_Alignment of the base
!             --  type is False for Wide_String, for example.
  
!             if not Known_Alignment (Arr)
!               and then Known_Alignment (Base_Type (Arr))
!             then
                 Set_Alignment (Arr, Alignment (Base_Type (Arr)));
                 Adjust_Esize_Alignment (Arr);
              end if;
*************** package body Freeze is
*** 3141,3152 ****
                  (No (Ancestor_Subtype (Arr))
                    or else not Has_Size_Clause (Ancestor_Subtype (Arr)))
              then
!                Set_Esize     (Arr, Esize     (Packed_Array_Impl_Type (Arr)));
!                Set_RM_Size   (Arr, RM_Size   (Packed_Array_Impl_Type (Arr)));
              end if;
  
              if not Has_Alignment_Clause (Arr) then
!                Set_Alignment (Arr, Alignment (Packed_Array_Impl_Type (Arr)));
              end if;
           end if;
  
--- 4065,4077 ----
                  (No (Ancestor_Subtype (Arr))
                    or else not Has_Size_Clause (Ancestor_Subtype (Arr)))
              then
!                Copy_Esize (To => Arr, From => Packed_Array_Impl_Type (Arr));
!                Copy_RM_Size (To => Arr, From => Packed_Array_Impl_Type (Arr));
              end if;
  
              if not Has_Alignment_Clause (Arr) then
!                Copy_Alignment
!                  (To => Arr, From => Packed_Array_Impl_Type (Arr));
              end if;
           end if;
  
*************** package body Freeze is
*** 3619,3625 ****
                 Set_Etype (Formal, F_Type);
              end if;
  
!             if not From_Limited_With (F_Type) then
                 Freeze_And_Append (F_Type, N, Result);
              end if;
  
--- 4544,4552 ----
                 Set_Etype (Formal, F_Type);
              end if;
  
!             if not From_Limited_With (F_Type)
!               and then Should_Freeze_Type (F_Type, E)
!             then
                 Freeze_And_Append (F_Type, N, Result);
              end if;
  
*************** package body Freeze is
*** 3643,3651 ****
                 elsif not After_Last_Declaration
                   and then not Freezing_Library_Level_Tagged_Type
                 then
!                   Error_Msg_Node_1 := F_Type;
!                   Error_Msg
!                     ("type & must be fully defined before this point", Loc);
                 end if;
              end if;
  
--- 4570,4579 ----
                 elsif not After_Last_Declaration
                   and then not Freezing_Library_Level_Tagged_Type
                 then
!                   Error_Msg_NE
!                     ("type & must be fully defined before this point",
!                      N,
!                      F_Type);
                 end if;
              end if;
  
*************** package body Freeze is
*** 3670,3675 ****
--- 4598,4604 ----
                 --  active.
  
                 if Is_Access_Type (F_Type)
+                  and then Known_Esize (F_Type)
                   and then Esize (F_Type) > Ttypes.System_Address_Size
                   and then (not Unnest_Subprogram_Mode
                              or else not Is_Access_Subprogram_Type (F_Type))
*************** package body Freeze is
*** 3749,3756 ****
  
                 Error_Msg_NE ("?x?type of argument& is unconstrained array",
                    Warn_Node, Formal);
!                Error_Msg_NE ("?x?foreign caller must pass bounds explicitly",
!                   Warn_Node, Formal);
                 Error_Msg_Qual_Level := 0;
              end if;
  
--- 4678,4685 ----
  
                 Error_Msg_NE ("?x?type of argument& is unconstrained array",
                    Warn_Node, Formal);
!                Error_Msg_N ("\?x?foreign caller must pass bounds explicitly",
!                   Warn_Node);
                 Error_Msg_Qual_Level := 0;
              end if;
  
*************** package body Freeze is
*** 3796,3802 ****
                 Set_Etype (E, R_Type);
              end if;
  
!             Freeze_And_Append (R_Type, N, Result);
  
              --  Check suspicious return type for C function
  
--- 4725,4733 ----
                 Set_Etype (E, R_Type);
              end if;
  
!             if Should_Freeze_Type (R_Type, E) then
!                Freeze_And_Append (R_Type, N, Result);
!             end if;
  
              --  Check suspicious return type for C function
  
*************** package body Freeze is
*** 3808,3813 ****
--- 4739,4745 ----
                 --  Check suspicious return of fat C pointer
  
                 if Is_Access_Type (R_Type)
+                  and then Known_Esize (R_Type)
                   and then Esize (R_Type) > Ttypes.System_Address_Size
                   and then not Has_Warnings_Off (E)
                   and then not Has_Warnings_Off (R_Type)
*************** package body Freeze is
*** 3930,3937 ****
  
             and then Convention (E) /= Convention_Intrinsic
  
!            --  Assume that ASM interface knows what it is doing. This deals
!            --  with e.g. unsigned.ads in the AAMP back end.
  
             and then Convention (E) /= Convention_Assembler
           then
--- 4862,4868 ----
  
             and then Convention (E) /= Convention_Intrinsic
  
!            --  Assume that ASM interface knows what it is doing
  
             and then Convention (E) /= Convention_Assembler
           then
*************** package body Freeze is
*** 4002,4012 ****
           --  Set True if we find at least one component with no component
           --  clause (used to warn about useless Pack pragmas).
  
-          function Check_Allocator (N : Node_Id) return Node_Id;
-          --  If N is an allocator, possibly wrapped in one or more level of
-          --  qualified expression(s), return the inner allocator node, else
-          --  return Empty.
- 
           procedure Check_Itype (Typ : Entity_Id);
           --  If the component subtype is an access to a constrained subtype of
           --  an already frozen type, make the subtype frozen as well. It might
--- 4933,4938 ----
*************** package body Freeze is
*** 4022,4046 ****
           --  variants referenceed by the Variant_Part VP are frozen. This is
           --  a recursive routine to deal with nested variants.
  
-          ---------------------
-          -- Check_Allocator --
-          ---------------------
- 
-          function Check_Allocator (N : Node_Id) return Node_Id is
-             Inner : Node_Id;
-          begin
-             Inner := N;
-             loop
-                if Nkind (Inner) = N_Allocator then
-                   return Inner;
-                elsif Nkind (Inner) = N_Qualified_Expression then
-                   Inner := Expression (Inner);
-                else
-                   return Empty;
-                end if;
-             end loop;
-          end Check_Allocator;
- 
           -----------------
           -- Check_Itype --
           -----------------
--- 4948,4953 ----
*************** package body Freeze is
*** 4355,4376 ****
  
              elsif Is_Access_Type (Etype (Comp))
                and then Present (Parent (Comp))
                and then Present (Expression (Parent (Comp)))
              then
                 declare
                    Alloc : constant Node_Id :=
!                             Check_Allocator (Expression (Parent (Comp)));
  
                 begin
!                   if Present (Alloc) then
  
                       --  If component is pointer to a class-wide type, freeze
                       --  the specific type in the expression being allocated.
                       --  The expression may be a subtype indication, in which
                       --  case freeze the subtype mark.
  
!                      if Is_Class_Wide_Type
!                           (Designated_Type (Etype (Comp)))
                       then
                          if Is_Entity_Name (Expression (Alloc)) then
                             Freeze_And_Append
--- 5262,5285 ----
  
              elsif Is_Access_Type (Etype (Comp))
                and then Present (Parent (Comp))
+               and then
+                 Nkind (Parent (Comp))
+                   in N_Component_Declaration | N_Discriminant_Specification
                and then Present (Expression (Parent (Comp)))
              then
                 declare
                    Alloc : constant Node_Id :=
!                             Unqualify (Expression (Parent (Comp)));
  
                 begin
!                   if Nkind (Alloc) = N_Allocator then
  
                       --  If component is pointer to a class-wide type, freeze
                       --  the specific type in the expression being allocated.
                       --  The expression may be a subtype indication, in which
                       --  case freeze the subtype mark.
  
!                      if Is_Class_Wide_Type (Designated_Type (Etype (Comp)))
                       then
                          if Is_Entity_Name (Expression (Alloc)) then
                             Freeze_And_Append
*************** package body Freeze is
*** 4382,4398 ****
                              (Entity (Subtype_Mark (Expression (Alloc))),
                               N, Result);
                          end if;
- 
                       elsif Is_Itype (Designated_Type (Etype (Comp))) then
                          Check_Itype (Etype (Comp));
- 
                       else
                          Freeze_And_Append
                            (Designated_Type (Etype (Comp)), N, Result);
                       end if;
                    end if;
                 end;
- 
              elsif Is_Access_Type (Etype (Comp))
                and then Is_Itype (Designated_Type (Etype (Comp)))
              then
--- 5291,5304 ----
*************** package body Freeze is
*** 5425,5435 ****
              --  to the components of Rec.
  
           begin
!             Comp := First_Entity (E);
              while Present (Comp) loop
!                if Ekind (Comp) = E_Component
!                  and then Has_Delayed_Aspects (Comp)
!                then
                    if not Rec_Pushed then
                       Push_Scope (E);
                       Rec_Pushed := True;
--- 6331,6339 ----
              --  to the components of Rec.
  
           begin
!             Comp := First_Component (E);
              while Present (Comp) loop
!                if Has_Delayed_Aspects (Comp) then
                    if not Rec_Pushed then
                       Push_Scope (E);
                       Rec_Pushed := True;
*************** package body Freeze is
*** 5445,5451 ****
                    Analyze_Aspects_At_Freeze_Point (Comp);
                 end if;
  
!                Next_Entity (Comp);
              end loop;
  
              --  Pop the scope if Rec scope has been pushed on the scope stack
--- 6349,6355 ----
                    Analyze_Aspects_At_Freeze_Point (Comp);
                 end if;
  
!                Next_Component (Comp);
              end loop;
  
              --  Pop the scope if Rec scope has been pushed on the scope stack
*************** package body Freeze is
*** 5578,5584 ****
                          then
                             Error_Msg_NE
                               ("useless postcondition, & is marked "
!                               & "No_Return?T?", Exp, E);
                          end if;
                       end if;
  
--- 6482,6488 ----
                          then
                             Error_Msg_NE
                               ("useless postcondition, & is marked "
!                               & "No_Return?.t?", Exp, E);
                          end if;
                       end if;
  
*************** package body Freeze is
*** 5590,5600 ****
           --  Here for other than a subprogram or type
  
           else
!             --  If entity has a type, and it is not a generic unit, then freeze
!             --  it first (RM 13.14(10)).
  
              if Present (Etype (E))
                and then Ekind (E) /= E_Generic_Function
              then
                 Freeze_And_Append (Etype (E), N, Result);
  
--- 6494,6505 ----
           --  Here for other than a subprogram or type
  
           else
!             --  If entity has a type declared in the current scope, and it is
!             --  not a generic unit, then freeze it first.
  
              if Present (Etype (E))
                and then Ekind (E) /= E_Generic_Function
+               and then Within_Scope (Etype (E), Current_Scope)
              then
                 Freeze_And_Append (Etype (E), N, Result);
  
*************** package body Freeze is
*** 5769,5775 ****
              if Is_Array_Type (E) then
                 declare
                    Ctyp : constant Entity_Id := Component_Type (E);
!                   Rsiz : constant Uint      := RM_Size (Ctyp);
                    SZ   : constant Node_Id   := Size_Clause (E);
                    Btyp : constant Entity_Id := Base_Type (E);
  
--- 6674,6681 ----
              if Is_Array_Type (E) then
                 declare
                    Ctyp : constant Entity_Id := Component_Type (E);
!                   Rsiz : constant Uint :=
!                     (if Known_RM_Size (Ctyp) then RM_Size (Ctyp) else Uint_0);
                    SZ   : constant Node_Id   := Size_Clause (E);
                    Btyp : constant Entity_Id := Base_Type (E);
  
*************** package body Freeze is
*** 5829,5835 ****
  
                          Dim := Expr_Value (Hi) - Expr_Value (Lo) + 1;
  
!                         if Dim >= 0 then
                             Num_Elmts := Num_Elmts * Dim;
                          else
                             Num_Elmts := Uint_0;
--- 6735,6741 ----
  
                          Dim := Expr_Value (Hi) - Expr_Value (Lo) + 1;
  
!                         if Dim > Uint_0 then
                             Num_Elmts := Num_Elmts * Dim;
                          else
                             Num_Elmts := Uint_0;
*************** package body Freeze is
*** 5851,5859 ****
                          if Implicit_Packing then
                             Set_Component_Size (Btyp, Rsiz);
  
!                         --  Otherwise give an error message
  
!                         else
                             Error_Msg_NE
                               ("size given for& too small", SZ, E);
                             Error_Msg_N -- CODEFIX
--- 6757,6768 ----
                          if Implicit_Packing then
                             Set_Component_Size (Btyp, Rsiz);
  
!                         --  Otherwise give an error message, except that if the
!                         --  specified Size is zero, there is no need for pragma
!                         --  Pack. Note that size zero is not considered
!                         --  Addressable.
  
!                         elsif RM_Size (E) /= Uint_0 then
                             Error_Msg_NE
                               ("size given for& too small", SZ, E);
                             Error_Msg_N -- CODEFIX
*************** package body Freeze is
*** 5954,5977 ****
                    if Sloc (SC) > Sloc (AC) then
                       Loc := SC;
                       Error_Msg_NE
!                        ("?Z?size is not a multiple of alignment for &",
                          Loc, E);
                       Error_Msg_Sloc := Sloc (AC);
                       Error_Msg_Uint_1 := Alignment (E);
!                      Error_Msg_N ("\?Z?alignment of ^ specified #", Loc);
  
                    else
                       Loc := AC;
                       Error_Msg_NE
!                        ("?Z?size is not a multiple of alignment for &",
                          Loc, E);
                       Error_Msg_Sloc := Sloc (SC);
                       Error_Msg_Uint_1 := RM_Size (E);
!                      Error_Msg_N ("\?Z?size of ^ specified #", Loc);
                    end if;
  
                    Error_Msg_Uint_1 := ((RM_Size (E) / Abits) + 1) * Abits;
!                   Error_Msg_N ("\?Z?Object_Size will be increased to ^", Loc);
                 end if;
              end;
           end if;
--- 6863,6886 ----
                    if Sloc (SC) > Sloc (AC) then
                       Loc := SC;
                       Error_Msg_NE
!                        ("?.z?size is not a multiple of alignment for &",
                          Loc, E);
                       Error_Msg_Sloc := Sloc (AC);
                       Error_Msg_Uint_1 := Alignment (E);
!                      Error_Msg_N ("\?.z?alignment of ^ specified #", Loc);
  
                    else
                       Loc := AC;
                       Error_Msg_NE
!                        ("?.z?size is not a multiple of alignment for &",
                          Loc, E);
                       Error_Msg_Sloc := Sloc (SC);
                       Error_Msg_Uint_1 := RM_Size (E);
!                      Error_Msg_N ("\?.z?size of ^ specified #", Loc);
                    end if;
  
                    Error_Msg_Uint_1 := ((RM_Size (E) / Abits) + 1) * Abits;
!                   Error_Msg_N ("\?.z?Object_Size will be increased to ^", Loc);
                 end if;
              end;
           end if;
*************** package body Freeze is
*** 6215,6221 ****
  
                 if Is_Type (Full_View (E)) then
                    Set_Size_Info (E, Full_View (E));
!                   Set_RM_Size   (E, RM_Size (Full_View (E)));
                 end if;
  
                 goto Leave;
--- 7124,7130 ----
  
                 if Is_Type (Full_View (E)) then
                    Set_Size_Info (E, Full_View (E));
!                   Copy_RM_Size (To => E, From => Full_View (E));
                 end if;
  
                 goto Leave;
*************** package body Freeze is
*** 6828,6833 ****
--- 7737,7754 ----
              end;
           end if;
  
+          --  Verify at this point that No_Controlled_Parts and No_Task_Parts,
+          --  when specified on the current type or one of its ancestors, has
+          --  not been overridden and that no violation of the aspect has
+          --  occurred.
+ 
+          --  It is important that we perform the checks here after the type has
+          --  been processed because if said type depended on a private type it
+          --  will not have been marked controlled or having tasks.
+ 
+          Check_No_Parts_Violations (E, Aspect_No_Controlled_Parts);
+          Check_No_Parts_Violations (E, Aspect_No_Task_Parts);
+ 
           --  End of freeze processing for type entities
        end if;
  
*************** package body Freeze is
*** 6874,6883 ****
              begin
                 Comp := First_Component (E);
                 while Present (Comp) loop
!                   Typ  := Etype (Comp);
  
!                   if Ekind (Comp) = E_Component
!                     and then Is_Access_Type (Typ)
                      and then Scope (Typ) /= E
                      and then Base_Type (Designated_Type (Typ)) = E
                      and then Is_Itype (Designated_Type (Typ))
--- 7795,7803 ----
              begin
                 Comp := First_Component (E);
                 while Present (Comp) loop
!                   Typ := Etype (Comp);
  
!                   if Is_Access_Type (Typ)
                      and then Scope (Typ) /= E
                      and then Base_Type (Designated_Type (Typ)) = E
                      and then Is_Itype (Designated_Type (Typ))
*************** package body Freeze is
*** 6900,6906 ****
        if Is_Type (E) then
           Freeze_And_Append (First_Subtype (E), N, Result);
  
!          --  If we just froze a tagged non-class wide record, then freeze the
           --  corresponding class-wide type. This must be done after the tagged
           --  type itself is frozen, because the class-wide type refers to the
           --  tagged type which generates the class.
--- 7820,7826 ----
        if Is_Type (E) then
           Freeze_And_Append (First_Subtype (E), N, Result);
  
!          --  If we just froze a tagged non-class-wide record, then freeze the
           --  corresponding class-wide type. This must be done after the tagged
           --  type itself is frozen, because the class-wide type refers to the
           --  tagged type which generates the class.
*************** package body Freeze is
*** 6976,6982 ****
  
          and then not Target_Short_Enums
        then
!          Init_Esize (Typ, Standard_Integer_Size);
           Set_Alignment (Typ, Alignment (Standard_Integer));
  
        --  Normal Ada case or size clause present or not Long_C_Enums on target
--- 7896,7902 ----
  
          and then not Target_Short_Enums
        then
!          Set_Esize (Typ, UI_From_Int (Standard_Integer_Size));
           Set_Alignment (Typ, Alignment (Standard_Integer));
  
        --  Normal Ada case or size clause present or not Long_C_Enums on target
*************** package body Freeze is
*** 7104,7109 ****
--- 8024,8030 ----
                           or else Is_TSS (Id, TSS_Stream_Output)
                           or else Is_TSS (Id, TSS_Stream_Read)
                           or else Is_TSS (Id, TSS_Stream_Write)
+                          or else Is_TSS (Id, TSS_Put_Image)
                           or else Nkind (Original_Node (P)) =
                                               N_Subprogram_Renaming_Declaration)
              then
*************** package body Freeze is
*** 7203,7209 ****
  
        Typ := Empty;
  
!       if Nkind (N) in N_Has_Etype then
           if not Is_Frozen (Etype (N)) then
              Typ := Etype (N);
  
--- 8124,8130 ----
  
        Typ := Empty;
  
!       if Nkind (N) in N_Has_Etype and then Present (Etype (N)) then
           if not Is_Frozen (Etype (N)) then
              Typ := Etype (N);
  
*************** package body Freeze is
*** 7224,7229 ****
--- 8145,8151 ----
        --  an initialization procedure from freezing the variable.
  
        if Is_Entity_Name (N)
+         and then Present (Entity (N))
          and then not Is_Frozen (Entity (N))
          and then (Nkind (N) /= N_Identifier
                     or else Comes_From_Source (N)
*************** package body Freeze is
*** 7410,7416 ****
              --  tree. This is an unusual case, but there are some legitimate
              --  situations in which this occurs, notably when the expressions
              --  in the range of a type declaration are resolved. We simply
!             --  ignore the freeze request in this case. Is this right ???
  
              if No (Parent_P) then
                 return;
--- 8332,8338 ----
              --  tree. This is an unusual case, but there are some legitimate
              --  situations in which this occurs, notably when the expressions
              --  in the range of a type declaration are resolved. We simply
!             --  ignore the freeze request in this case.
  
              if No (Parent_P) then
                 return;
*************** package body Freeze is
*** 7670,7676 ****
              end case;
  
              --  We fall through the case if we did not yet find the proper
!             --  place in the free for inserting the freeze node, so climb.
  
              P := Parent_P;
           end loop;
--- 8592,8598 ----
              end case;
  
              --  We fall through the case if we did not yet find the proper
!             --  place in the tree for inserting the freeze node, so climb.
  
              P := Parent_P;
           end loop;
*************** package body Freeze is
*** 8076,8083 ****
        Brng  : constant Node_Id    := Scalar_Range (Btyp);
        BLo   : constant Node_Id    := Low_Bound (Brng);
        BHi   : constant Node_Id    := High_Bound (Brng);
!       Par   : constant Entity_Id  := First_Subtype (Typ);
!       Small : constant Ureal      := Small_Value (Typ);
        Loval : Ureal;
        Hival : Ureal;
        Atype : Entity_Id;
--- 8998,9006 ----
        Brng  : constant Node_Id    := Scalar_Range (Btyp);
        BLo   : constant Node_Id    := Low_Bound (Brng);
        BHi   : constant Node_Id    := High_Bound (Brng);
!       Ftyp  : constant Entity_Id  := Underlying_Type (First_Subtype (Typ));
! 
!       Small : Ureal;
        Loval : Ureal;
        Hival : Ureal;
        Atype : Entity_Id;
*************** package body Freeze is
*** 8086,8095 ****
        Orig_Hi : Ureal;
        --  Save original bounds (for shaving tests)
  
!       Actual_Size : Nat;
        --  Actual size chosen
  
!       function Fsize (Lov, Hiv : Ureal) return Nat;
        --  Returns size of type with given bounds. Also leaves these
        --  bounds set as the current bounds of the Typ.
  
--- 9009,9018 ----
        Orig_Hi : Ureal;
        --  Save original bounds (for shaving tests)
  
!       Actual_Size : Int;
        --  Actual size chosen
  
!       function Fsize (Lov, Hiv : Ureal) return Int;
        --  Returns size of type with given bounds. Also leaves these
        --  bounds set as the current bounds of the Typ.
  
*************** package body Freeze is
*** 8103,8109 ****
        -- Fsize --
        -----------
  
!       function Fsize (Lov, Hiv : Ureal) return Nat is
        begin
           Set_Realval (Lo, Lov);
           Set_Realval (Hi, Hiv);
--- 9026,9032 ----
        -- Fsize --
        -----------
  
!       function Fsize (Lov, Hiv : Ureal) return Int is
        begin
           Set_Realval (Lo, Lov);
           Set_Realval (Hi, Hiv);
*************** package body Freeze is
*** 8116,8122 ****
  
        function Larger (A, B : Ureal) return Boolean is
        begin
!          return A > B and then A - Small > B;
        end Larger;
  
        -------------
--- 9039,9045 ----
  
        function Larger (A, B : Ureal) return Boolean is
        begin
!          return A > B and then A - Small_Value (Typ) > B;
        end Larger;
  
        -------------
*************** package body Freeze is
*** 8125,8131 ****
  
        function Smaller (A, B : Ureal) return Boolean is
        begin
!          return A < B and then A + Small < B;
        end Smaller;
  
     --  Start of processing for Freeze_Fixed_Point_Type
--- 9048,9054 ----
  
        function Smaller (A, B : Ureal) return Boolean is
        begin
!          return A < B and then A + Small_Value (Typ) < B;
        end Smaller;
  
     --  Start of processing for Freeze_Fixed_Point_Type
*************** package body Freeze is
*** 8136,8168 ****
        --  so that all characteristics of the type (size, bounds) can be
        --  computed and validated in the call to Minimum_Size that follows.
  
!       if Has_Delayed_Aspects (First_Subtype (Typ)) then
!          Analyze_Aspects_At_Freeze_Point (First_Subtype (Typ));
!          Set_Has_Delayed_Aspects (First_Subtype (Typ), False);
        end if;
  
        --  If Esize of a subtype has not previously been set, set it now
  
!       if Unknown_Esize (Typ) then
           Atype := Ancestor_Subtype (Typ);
  
           if Present (Atype) then
              Set_Esize (Typ, Esize (Atype));
           else
!             Set_Esize (Typ, Esize (Btyp));
           end if;
        end if;
  
-       --  The 'small attribute may have been specified with an aspect,
-       --  in which case it is processed after a subtype declaration, so
-       --  inherit now the specified value.
- 
-       if Typ /= Par
-         and then Present (Find_Aspect (Par, Aspect_Small))
-       then
-          Set_Small_Value (Typ, Small_Value (Par));
-       end if;
- 
        --  Immediate return if the range is already analyzed. This means that
        --  the range is already set, and does not need to be computed by this
        --  routine.
--- 9059,9087 ----
        --  so that all characteristics of the type (size, bounds) can be
        --  computed and validated in the call to Minimum_Size that follows.
  
!       if Has_Delayed_Aspects (Ftyp) then
!          Analyze_Aspects_At_Freeze_Point (Ftyp);
!          Set_Has_Delayed_Aspects (Ftyp, False);
!       end if;
! 
!       --  Inherit the Small value from the first subtype in any case
! 
!       if Typ /= Ftyp then
!          Set_Small_Value (Typ, Small_Value (Ftyp));
        end if;
  
        --  If Esize of a subtype has not previously been set, set it now
  
!       if not Known_Esize (Typ) then
           Atype := Ancestor_Subtype (Typ);
  
           if Present (Atype) then
              Set_Esize (Typ, Esize (Atype));
           else
!             Copy_Esize (To => Typ, From => Btyp);
           end if;
        end if;
  
        --  Immediate return if the range is already analyzed. This means that
        --  the range is already set, and does not need to be computed by this
        --  routine.
*************** package body Freeze is
*** 8179,8184 ****
--- 9098,9104 ----
           return;
        end if;
  
+       Small := Small_Value (Typ);
        Loval := Realval (Lo);
        Hival := Realval (Hi);
  
*************** package body Freeze is
*** 8212,8222 ****
              Loval_Excl_EP : Ureal;
              Hival_Excl_EP : Ureal;
  
!             Size_Incl_EP  : Nat;
!             Size_Excl_EP  : Nat;
  
              Model_Num     : Ureal;
-             First_Subt    : Entity_Id;
              Actual_Lo     : Ureal;
              Actual_Hi     : Ureal;
  
--- 9132,9141 ----
              Loval_Excl_EP : Ureal;
              Hival_Excl_EP : Ureal;
  
!             Size_Incl_EP  : Int;
!             Size_Excl_EP  : Int;
  
              Model_Num     : Ureal;
              Actual_Lo     : Ureal;
              Actual_Hi     : Ureal;
  
*************** package body Freeze is
*** 8358,8367 ****
                 --  to get a base type whose size is smaller than the specified
                 --  size of the first subtype.
  
!                First_Subt := First_Subtype (Typ);
! 
!                if Has_Size_Clause (First_Subt)
!                  and then Size_Incl_EP <= Esize (First_Subt)
                 then
                    Actual_Size := Size_Incl_EP;
                    Actual_Lo   := Loval_Incl_EP;
--- 9277,9284 ----
                 --  to get a base type whose size is smaller than the specified
                 --  size of the first subtype.
  
!                if Has_Size_Clause (Ftyp)
!                  and then Size_Incl_EP <= Esize (Ftyp)
                 then
                    Actual_Size := Size_Incl_EP;
                    Actual_Lo   := Loval_Incl_EP;
*************** package body Freeze is
*** 8583,8589 ****
              Actual_Size := 128;
           end if;
  
!          Init_Esize (Typ, Actual_Size);
           Adjust_Esize_For_Alignment (Typ);
        end if;
  
--- 9500,9506 ----
              Actual_Size := 128;
           end if;
  
!          Set_Esize (Typ, UI_From_Int (Actual_Size));
           Adjust_Esize_For_Alignment (Typ);
        end if;
  
*************** package body Freeze is
*** 8638,8645 ****
  
        --  Set Esize to calculated size if not set already
  
!       if Unknown_Esize (Typ) then
!          Init_Esize (Typ, Actual_Size);
        end if;
  
        --  Set RM_Size if not already set. If already set, check value
--- 9555,9562 ----
  
        --  Set Esize to calculated size if not set already
  
!       if not Known_Esize (Typ) then
!          Set_Esize (Typ, UI_From_Int (Actual_Size));
        end if;
  
        --  Set RM_Size if not already set. If already set, check value
*************** package body Freeze is
*** 8648,8654 ****
           Minsiz : constant Uint := UI_From_Int (Minimum_Size (Typ));
  
        begin
!          if RM_Size (Typ) /= Uint_0 then
              if RM_Size (Typ) < Minsiz then
                 Error_Msg_Uint_1 := RM_Size (Typ);
                 Error_Msg_Uint_2 := Minsiz;
--- 9565,9571 ----
           Minsiz : constant Uint := UI_From_Int (Minimum_Size (Typ));
  
        begin
!          if Known_RM_Size (Typ) then
              if RM_Size (Typ) < Minsiz then
                 Error_Msg_Uint_1 := RM_Size (Typ);
                 Error_Msg_Uint_2 := Minsiz;
*************** package body Freeze is
*** 9081,9095 ****
        end if;
  
        --  Ensure that all anonymous access-to-subprogram types inherit the
!       --  convention of their related subprogram (RM 6.3.1 13.1/3). This is
        --  not done for a defaulted convention Ada because those types also
        --  default to Ada. Convention Protected must not be propagated when
        --  the subprogram is an entry because this would be illegal. The only
        --  way to force convention Protected on these kinds of types is to
!       --  include keyword "protected" in the access definition.
  
        if Convention (E) /= Convention_Ada
          and then Convention (E) /= Convention_Protected
        then
           Set_Profile_Convention (E);
        end if;
--- 9998,10015 ----
        end if;
  
        --  Ensure that all anonymous access-to-subprogram types inherit the
!       --  convention of their related subprogram (RM 6.3.1(13.1/5)). This is
        --  not done for a defaulted convention Ada because those types also
        --  default to Ada. Convention Protected must not be propagated when
        --  the subprogram is an entry because this would be illegal. The only
        --  way to force convention Protected on these kinds of types is to
!       --  include keyword "protected" in the access definition. Conventions
!       --  Entry and Intrinsic are also not propagated (specified by AI12-0207).
  
        if Convention (E) /= Convention_Ada
          and then Convention (E) /= Convention_Protected
+         and then Convention (E) /= Convention_Entry
+         and then Convention (E) /= Convention_Intrinsic
        then
           Set_Profile_Convention (E);
        end if;
*************** package body Freeze is
*** 9557,9563 ****
     -- Warn_Overlay --
     ------------------
  
!    procedure Warn_Overlay (Expr : Node_Id; Typ : Entity_Id; Nam : Entity_Id) is
        Ent : constant Entity_Id := Entity (Nam);
        --  The object to which the address clause applies
  
--- 10477,10483 ----
     -- Warn_Overlay --
     ------------------
  
!    procedure Warn_Overlay (Expr : Node_Id; Typ : Entity_Id; Nam : Node_Id) is
        Ent : constant Entity_Id := Entity (Nam);
        --  The object to which the address clause applies
  
diff -Nrcpad gcc-11.3.0/gcc/ada/freeze.ads gcc-12.1.0/gcc/ada/freeze.ads
*** gcc-11.3.0/gcc/ada/freeze.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/freeze.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Freeze is
*** 174,179 ****
--- 174,188 ----
     --  do not allow a size clause if the size would not otherwise be known at
     --  compile time in any case.
  
+    procedure Check_Inherited_Conditions
+     (R               : Entity_Id;
+      Late_Overriding : Boolean := False);
+    --  For a tagged derived type R, create wrappers for inherited operations
+    --  that have class-wide conditions, so it can be properly rewritten if
+    --  it involves calls to other overriding primitives. Late_Overriding is
+    --  True when we are processing the body of a primitive with no previous
+    --  spec defined after R is frozen (see Check_Dispatching_Operation).
+ 
     function Is_Full_Access_Aggregate (N : Node_Id) return Boolean;
     --  If a full access object is initialized with an aggregate or is assigned
     --  an aggregate, we have to prevent a piecemeal access or assignment to the
diff -Nrcpad gcc-11.3.0/gcc/ada/frontend.adb gcc-12.1.0/gcc/ada/frontend.adb
*** gcc-11.3.0/gcc/ada/frontend.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/frontend.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 25,71 ****
  
  with System.Strings; use System.Strings;
  
! with Atree;    use Atree;
  with Checks;
  with CStand;
! with Debug;    use Debug;
  with Elists;
  with Exp_Dbug;
  with Exp_Unst;
  with Fmap;
  with Fname.UF;
! with Ghost;    use Ghost;
! with Inline;   use Inline;
! with Lib;      use Lib;
! with Lib.Load; use Lib.Load;
  with Lib.Xref;
! with Live;     use Live;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
  with Osint;
  with Par;
  with Prep;
  with Prepcomp;
! with Restrict; use Restrict;
! with Rident;   use Rident;
  with Rtsfind;
! with Snames;   use Snames;
  with Sprint;
! with Scn;      use Scn;
! with Sem;      use Sem;
  with Sem_Aux;
  with Sem_Ch8;
  with Sem_SCIL;
! with Sem_Elab; use Sem_Elab;
! with Sem_Prag; use Sem_Prag;
  with Sem_Warn;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Sinput.L; use Sinput.L;
  with SCIL_LL;
! with Tbuild;   use Tbuild;
! with Types;    use Types;
  with VAST;
  
  procedure Frontend is
--- 25,73 ----
  
  with System.Strings; use System.Strings;
  
! with Atree;          use Atree;
  with Checks;
  with CStand;
! with Debug;          use Debug;
  with Elists;
  with Exp_Dbug;
  with Exp_Unst;
  with Fmap;
  with Fname.UF;
! with Ghost;          use Ghost;
! with Inline;         use Inline;
! with Lib;            use Lib;
! with Lib.Load;       use Lib.Load;
  with Lib.Xref;
! with Live;           use Live;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
  with Osint;
  with Par;
  with Prep;
  with Prepcomp;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
  with Rtsfind;
! with Snames;         use Snames;
  with Sprint;
! with Scn;            use Scn;
! with Sem;            use Sem;
  with Sem_Aux;
  with Sem_Ch8;
  with Sem_SCIL;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Prag;       use Sem_Prag;
  with Sem_Warn;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Sinput.L;       use Sinput.L;
  with SCIL_LL;
! with Tbuild;         use Tbuild;
! with Types;          use Types;
  with VAST;
  
  procedure Frontend is
*************** begin
*** 471,482 ****
                 Check_Elaboration_Scenarios;
              end if;
  
-             --  At this stage we can unnest subprogram bodies if required
- 
-             if Total_Errors_Detected = 0 then
-                Exp_Unst.Unnest_Subprograms (Cunit (Main_Unit));
-             end if;
- 
              --  List library units if requested
  
              if List_Units then
--- 473,478 ----
*************** begin
*** 492,503 ****
              Sem_Warn.Output_Unused_Warnings_Off_Warnings;
  
              --  Remove any ignored Ghost code as it must not appear in the
!             --  executable. This action must be performed last because it
              --  heavily alters the tree.
  
              if Operating_Mode = Generate_Code or else GNATprove_Mode then
                 Remove_Ignored_Ghost_Code;
              end if;
           end if;
        end if;
     end;
--- 488,506 ----
              Sem_Warn.Output_Unused_Warnings_Off_Warnings;
  
              --  Remove any ignored Ghost code as it must not appear in the
!             --  executable. This action must be performed very late because it
              --  heavily alters the tree.
  
              if Operating_Mode = Generate_Code or else GNATprove_Mode then
                 Remove_Ignored_Ghost_Code;
              end if;
+ 
+             --  At this stage we can unnest subprogram bodies if required
+ 
+             if Total_Errors_Detected = 0 then
+                Exp_Unst.Unnest_Subprograms (Cunit (Main_Unit));
+             end if;
+ 
           end if;
        end if;
     end;
*************** begin
*** 536,542 ****
     --  Initialize_Scalars, but others should be checked: as well???
  
     declare
!       Item  : Node_Id;
  
     begin
        Item := First (Context_Items (Cunit (Main_Unit)));
--- 539,545 ----
     --  Initialize_Scalars, but others should be checked: as well???
  
     declare
!       Item : Node_Id;
  
     begin
        Item := First (Context_Items (Cunit (Main_Unit)));
diff -Nrcpad gcc-11.3.0/gcc/ada/frontend.ads gcc-12.1.0/gcc/ada/frontend.ads
*** gcc-11.3.0/gcc/ada/frontend.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/frontend.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/Make-lang.in gcc-12.1.0/gcc/ada/gcc-interface/Make-lang.in
*** gcc-11.3.0/gcc/ada/gcc-interface/Make-lang.in	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/Make-lang.in	Fri May  6 07:30:56 2022
*************** WARN_ADAFLAGS= -W -Wall
*** 58,74 ****
  # need to be built by a recent/matching native so we might as well leave the
  # checks fully active.
  
  ifeq ($(CROSS),)
! ADAFLAGS= $(COMMON_ADAFLAGS) -gnatwns
  else
! ADAFLAGS= $(COMMON_ADAFLAGS)
  endif
  
  ALL_ADAFLAGS = \
    $(CFLAGS) $(ADA_CFLAGS) $(ADAFLAGS) $(CHECKING_ADAFLAGS) $(WARN_ADAFLAGS)
  FORCE_DEBUG_ADAFLAGS = -g
  ADA_CFLAGS =
! ADA_INCLUDES = -nostdinc -I- -I. -Iada/generated -Iada -Iada/gcc-interface -I$(srcdir)/ada -I$(srcdir)/ada/gcc-interface -Iada/libgnat -I$(srcdir)/ada/libgnat
  GNATLIBFLAGS= -W -Wall -gnatpg -nostdinc
  GNATLIBCFLAGS= -g -O2 $(TCFLAGS)
  ADA_INCLUDE_DIR = $(libsubdir)/adainclude
--- 58,102 ----
  # need to be built by a recent/matching native so we might as well leave the
  # checks fully active.
  
+ STAGE1=False
+ GNATBIND_FLAGS=
+ GNATLIB=
+ 
  ifeq ($(CROSS),)
!   ADAFLAGS=$(COMMON_ADAFLAGS) -gnatwns
! 
!   ifeq ($(if $(wildcard ../stage_current),$(shell cat ../stage_current),stage1),stage1)
!     STAGE1=True
!     GNATBIND_FLAGS=-t
!   endif
  else
!   ADAFLAGS=$(COMMON_ADAFLAGS)
  endif
  
  ALL_ADAFLAGS = \
    $(CFLAGS) $(ADA_CFLAGS) $(ADAFLAGS) $(CHECKING_ADAFLAGS) $(WARN_ADAFLAGS)
  FORCE_DEBUG_ADAFLAGS = -g
  ADA_CFLAGS =
! COMMON_ADA_INCLUDES = -I- -I. -Iada/generated -Iada -I$(srcdir)/ada
! 
! STAGE1_LIBS=
! 
! ifeq ($(strip $(filter-out linux%,$(host_os))),)
!   STAGE1_LIBS=-ldl
! endif
! 
! ifeq ($(strip $(filter-out hpux%,$(host_os))),)
!   STAGE1_LIBS=/usr/lib/libcl.a
! endif
! 
! ifeq ($(STAGE1),True)
!   ADA_INCLUDES=$(COMMON_ADA_INCLUDES)
!   adalib=$(dir $(shell $(CC) -print-libgcc-file-name))adalib
!   GNATLIB=$(adalib)/$(if $(wildcard $(adalib)/libgnat.a),libgnat.a,libgnat.so) $(STAGE1_LIBS)
! else
!   ADA_INCLUDES=-nostdinc $(COMMON_ADA_INCLUDES) -Iada/libgnat -I$(srcdir)/ada/libgnat -Iada/gcc-interface -I$(srcdir)/ada/gcc-interface
! endif
! 
  GNATLIBFLAGS= -W -Wall -gnatpg -nostdinc
  GNATLIBCFLAGS= -g -O2 $(TCFLAGS)
  ADA_INCLUDE_DIR = $(libsubdir)/adainclude
*************** ADA_FLAGS_TO_PASS = \
*** 88,105 ****
  
  # List of Ada tools to build and install
  ADA_TOOLS=gnatbind gnatchop gnat gnatkr gnatlink gnatls gnatmake \
!           gnatname gnatprep gnatxref gnatfind gnatclean
  
  # Say how to compile Ada programs.
  .SUFFIXES: .ada .adb .ads
  
! # FIXME: need to add $(ADA_CFLAGS) to .c.o suffix rule
  # Use mildly strict warnings for this front end and add special flags.
  ada-warn = $(ADA_CFLAGS) $(filter-out -pedantic, $(STRICT_WARN))
  # Unresolved warnings in specific files.
  ada/adaint.o-warn = -Wno-error
  
! ada/%.o: ada/gcc-interface/%.c
  	$(COMPILE) $<
  	$(POSTCOMPILE)
  
--- 116,133 ----
  
  # List of Ada tools to build and install
  ADA_TOOLS=gnatbind gnatchop gnat gnatkr gnatlink gnatls gnatmake \
!           gnatname gnatprep gnatclean
  
  # Say how to compile Ada programs.
  .SUFFIXES: .ada .adb .ads
  
! # FIXME: need to add $(ADA_CFLAGS) to .cc.o suffix rule
  # Use mildly strict warnings for this front end and add special flags.
  ada-warn = $(ADA_CFLAGS) $(filter-out -pedantic, $(STRICT_WARN))
  # Unresolved warnings in specific files.
  ada/adaint.o-warn = -Wno-error
  
! ada/%.o: ada/gcc-interface/%.cc
  	$(COMPILE) $<
  	$(POSTCOMPILE)
  
*************** GCC_LLINK=$(LLINKER) $(GCC_LINKERFLAGS)
*** 242,268 ****
  
  # Languages-specific object files for Ada.
  
! # Object files for gnat1 from C sources.
! GNAT1_C_OBJS = ada/adadecode.o ada/adaint.o ada/argv.o ada/cio.o \
!  ada/cstreams.o ada/env.o ada/init.o ada/initialize.o ada/raise.o \
!  ada/raise-gcc.o \
!  ada/seh_init.o ada/targext.o ada/cuintp.o ada/decl.o ada/rtfinal.o \
!  ada/rtinit.o ada/misc.o ada/utils.o ada/utils2.o ada/trans.o ada/targtyps.o
  
  # Object files from Ada sources that are used by gnat1
  GNAT_ADA_OBJS =	\
-  ada/libgnat/a-charac.o	\
-  ada/libgnat/a-chlat1.o	\
-  ada/libgnat/a-elchha.o	\
-  ada/libgnat/a-except.o	\
-  ada/libgnat/a-exctra.o \
-  ada/libgnat/a-ioexce.o	\
-  ada/libgnat/ada.o	\
   ada/spark_xrefs.o	\
   ada/ali.o	\
   ada/alloc.o	\
   ada/aspects.o  \
   ada/atree.o	\
   ada/butil.o	\
   ada/casing.o	\
   ada/checks.o	\
--- 270,297 ----
  
  # Languages-specific object files for Ada.
  
! # Object files from C sources that are used by gnat1
! # adadecode.o should not be needed with sufficiently recent compilers
! GNAT1_C_OBJS =   \
!  ada/cuintp.o    \
!  ada/decl.o      \
!  ada/misc.o      \
!  ada/utils.o     \
!  ada/utils2.o    \
!  ada/trans.o     \
!  ada/targtyps.o  \
!  ada/version.o   \
!  ada/targext.o   \
!  ada/adadecode.o
  
  # Object files from Ada sources that are used by gnat1
  GNAT_ADA_OBJS =	\
   ada/spark_xrefs.o	\
   ada/ali.o	\
   ada/alloc.o	\
   ada/aspects.o  \
   ada/atree.o	\
+  ada/backend_utils.o	\
   ada/butil.o	\
   ada/casing.o	\
   ada/checks.o	\
*************** GNAT_ADA_OBJS =	\
*** 272,277 ****
--- 301,308 ----
   ada/cstand.o	\
   ada/debug.o	\
   ada/debug_a.o	\
+  ada/einfo-entities.o \
+  ada/einfo-utils.o \
   ada/einfo.o	\
   ada/elists.o	\
   ada/err_vars.o	\
*************** GNAT_ADA_OBJS =	\
*** 316,340 ****
   ada/fname.o	\
   ada/freeze.o	\
   ada/frontend.o	\
-  ada/libgnat/g-byorma.o	\
-  ada/libgnat/g-dynhta.o	\
-  ada/libgnat/g-graphs.o \
-  ada/libgnat/g-hesora.o	\
-  ada/libgnat/g-htable.o	\
-  ada/libgnat/g-lists.o	\
-  ada/libgnat/g-sets.o	\
-  ada/libgnat/g-spchge.o	\
-  ada/libgnat/g-speche.o	\
-  ada/libgnat/g-u3spch.o	\
   ada/get_targ.o	\
   ada/ghost.o	\
   ada/gnat_cuda.o \
-  ada/libgnat/gnat.o	\
   ada/gnatvsn.o	\
   ada/hostparm.o	\
   ada/impunit.o	\
   ada/inline.o	\
-  ada/libgnat/interfac.o	\
   ada/itypes.o	\
   ada/krunch.o	\
   ada/layout.o	\
--- 347,359 ----
*************** GNAT_ADA_OBJS =	\
*** 362,428 ****
   ada/restrict.o	\
   ada/rident.o	\
   ada/rtsfind.o	\
-  ada/libgnat/s-addope.o	\
-  ada/libgnat/s-addima.o \
-  ada/libgnat/s-assert.o	\
-  ada/libgnat/s-bitops.o	\
-  ada/libgnat/s-carun8.o	\
-  ada/libgnat/s-casuti.o	\
-  ada/libgnat/s-conca2.o	\
-  ada/libgnat/s-conca3.o	\
-  ada/libgnat/s-conca4.o	\
-  ada/libgnat/s-conca5.o	\
-  ada/libgnat/s-conca6.o	\
-  ada/libgnat/s-conca7.o	\
-  ada/libgnat/s-conca8.o	\
-  ada/libgnat/s-conca9.o	\
-  ada/libgnat/s-crc32.o	\
-  ada/libgnat/s-crtl.o	\
-  ada/libgnat/s-excdeb.o	\
-  ada/libgnat/s-except.o	\
-  ada/libgnat/s-exctab.o	\
-  ada/libgnat/s-excmac.o \
-  ada/libgnat/s-htable.o	\
-  ada/libgnat/s-imenne.o	\
-  ada/libgnat/s-imgenu.o	\
-  ada/libgnat/s-imgint.o \
-  ada/libgnat/s-mastop.o	\
-  ada/libgnat/s-memory.o	\
-  ada/libgnat/s-os_lib.o	\
-  ada/libgnat/s-parame.o	\
-  ada/libgnat/s-purexc.o	\
-  ada/libgnat/s-restri.o	\
-  ada/libgnat/s-secsta.o	\
-  ada/libgnat/s-soflin.o	\
-  ada/libgnat/s-soliin.o	\
-  ada/libgnat/s-sopco3.o	\
-  ada/libgnat/s-sopco4.o	\
-  ada/libgnat/s-sopco5.o	\
-  ada/libgnat/s-stache.o	\
-  ada/libgnat/s-stalib.o	\
-  ada/libgnat/s-stoele.o	\
-  ada/libgnat/s-strcom.o	\
-  ada/libgnat/s-strhas.o	\
-  ada/libgnat/s-string.o	\
-  ada/libgnat/s-strops.o	\
-  ada/libgnat/s-traceb.o \
-  ada/libgnat/s-traent.o	\
-  ada/libgnat/s-trasym.o \
-  ada/libgnat/s-unstyp.o	\
-  ada/libgnat/s-utf_32.o	\
-  ada/libgnat/s-valint.o	\
-  ada/libgnat/s-valuns.o	\
-  ada/libgnat/s-valuti.o	\
-  ada/libgnat/s-wchcnv.o	\
-  ada/libgnat/s-wchcon.o	\
-  ada/libgnat/s-wchjis.o	\
-  ada/libgnat/s-wchstw.o \
   ada/scans.o	\
   ada/scil_ll.o	\
   ada/scn.o	\
   ada/scng.o	\
   ada/scos.o	\
   ada/sdefault.o	\
   ada/sem.o	\
   ada/sem_aggr.o	\
   ada/sem_attr.o	\
--- 381,393 ----
   ada/restrict.o	\
   ada/rident.o	\
   ada/rtsfind.o	\
   ada/scans.o	\
   ada/scil_ll.o	\
   ada/scn.o	\
   ada/scng.o	\
   ada/scos.o	\
   ada/sdefault.o	\
+  ada/seinfo.o \
   ada/sem.o	\
   ada/sem_aggr.o	\
   ada/sem_attr.o	\
*************** GNAT_ADA_OBJS =	\
*** 458,463 ****
--- 423,430 ----
   ada/sem_warn.o	\
   ada/set_targ.o \
   ada/sinfo-cn.o	\
+  ada/sinfo-nodes.o \
+  ada/sinfo-utils.o \
   ada/sinfo.o	\
   ada/sinput-d.o	\
   ada/sinput-l.o	\
*************** GNAT_ADA_OBJS =	\
*** 466,482 ****
   ada/sprint.o	\
   ada/stand.o	\
   ada/stringt.o	\
   ada/style.o	\
   ada/styleg.o	\
   ada/stylesw.o	\
   ada/switch-c.o	\
   ada/switch.o	\
-  ada/gcc-interface/system.o	\
   ada/table.o	\
   ada/targparm.o	\
   ada/tbuild.o	\
   ada/treepr.o	\
-  ada/treeprs.o	\
   ada/ttypes.o	\
   ada/types.o	\
   ada/uintp.o	\
--- 433,448 ----
   ada/sprint.o	\
   ada/stand.o	\
   ada/stringt.o	\
+  ada/strub.o	\
   ada/style.o	\
   ada/styleg.o	\
   ada/stylesw.o	\
   ada/switch-c.o	\
   ada/switch.o	\
   ada/table.o	\
   ada/targparm.o	\
   ada/tbuild.o	\
   ada/treepr.o	\
   ada/ttypes.o	\
   ada/types.o	\
   ada/uintp.o	\
*************** GNAT_ADA_OBJS =	\
*** 486,492 ****
   ada/validsw.o	\
   ada/vast.o	\
   ada/warnsw.o	\
!  ada/widechar.o
  
  # Object files for gnat executables
  GNAT1_ADA_OBJS = $(GNAT_ADA_OBJS) ada/back_end.o ada/gnat1drv.o
--- 452,549 ----
   ada/validsw.o	\
   ada/vast.o	\
   ada/warnsw.o	\
!  ada/widechar.o \
!  ada/gnat.o	\
!  ada/g-dynhta.o	\
!  ada/g-graphs.o	\
!  ada/g-lists.o	\
!  ada/g-sets.o	\
!  ada/s-pehage.o	\
!  ada/s-utf_32.o
! 
! ifeq ($(STAGE1),False)
! GNAT1_C_OBJS+=    \
!  ada/adaint.o     \
!  ada/argv.o       \
!  ada/cio.o        \
!  ada/cstreams.o   \
!  ada/env.o        \
!  ada/errno.o      \
!  ada/init.o       \
!  ada/initialize.o \
!  ada/raise.o      \
!  ada/raise-gcc.o  \
!  ada/rtfinal.o    \
!  ada/rtinit.o     \
!  ada/seh_init.o
! 
! GNAT_ADA_OBJS+= \
!  ada/gcc-interface/system.o \
!  ada/libgnat/a-assert.o	\
!  ada/libgnat/a-charac.o	\
!  ada/libgnat/a-chlat1.o	\
!  ada/libgnat/a-elchha.o	\
!  ada/libgnat/a-except.o	\
!  ada/libgnat/a-exctra.o \
!  ada/libgnat/a-ioexce.o	\
!  ada/libgnat/ada.o	\
!  ada/libgnat/g-byorma.o	\
!  ada/libgnat/g-heasor.o	\
!  ada/libgnat/g-htable.o	\
!  ada/libgnat/g-spchge.o	\
!  ada/libgnat/g-speche.o	\
!  ada/libgnat/g-table.o	\
!  ada/libgnat/g-u3spch.o	\
!  ada/libgnat/interfac.o	\
!  ada/libgnat/s-addope.o	\
!  ada/libgnat/s-addima.o \
!  ada/libgnat/s-assert.o	\
!  ada/libgnat/s-bitops.o	\
!  ada/libgnat/s-carun8.o	\
!  ada/libgnat/s-casuti.o \
!  ada/libgnat/s-crtl.o	\
!  ada/libgnat/s-conca2.o	\
!  ada/libgnat/s-conca3.o	\
!  ada/libgnat/s-conca4.o	\
!  ada/libgnat/s-conca5.o	\
!  ada/libgnat/s-conca6.o	\
!  ada/libgnat/s-conca7.o	\
!  ada/libgnat/s-conca8.o	\
!  ada/libgnat/s-conca9.o	\
!  ada/libgnat/s-crc32.o	\
!  ada/libgnat/s-excdeb.o	\
!  ada/libgnat/s-except.o	\
!  ada/libgnat/s-excmac.o	\
!  ada/libgnat/s-exctab.o	\
!  ada/libgnat/s-htable.o	\
!  ada/libgnat/s-imgint.o	\
!  ada/libgnat/s-mastop.o	\
!  ada/libgnat/s-memory.o	\
!  ada/libgnat/s-os_lib.o	\
!  ada/libgnat/s-parame.o	\
!  ada/libgnat/s-purexc.o	\
!  ada/libgnat/s-restri.o	\
!  ada/libgnat/s-secsta.o	\
!  ada/libgnat/s-soflin.o	\
!  ada/libgnat/s-soliin.o	\
!  ada/libgnat/s-stache.o	\
!  ada/libgnat/s-stalib.o	\
!  ada/libgnat/s-stoele.o	\
!  ada/libgnat/s-strcom.o	\
!  ada/libgnat/s-strhas.o	\
!  ada/libgnat/s-string.o	\
!  ada/libgnat/s-traceb.o \
!  ada/libgnat/s-traent.o	\
!  ada/libgnat/s-trasym.o \
!  ada/libgnat/s-unstyp.o	\
!  ada/libgnat/s-valint.o	\
!  ada/libgnat/s-valuns.o	\
!  ada/libgnat/s-valuti.o	\
!  ada/libgnat/s-wchcnv.o	\
!  ada/libgnat/s-wchcon.o	\
!  ada/libgnat/s-wchjis.o	\
!  ada/libgnat/s-wchstw.o
! endif
  
  # Object files for gnat executables
  GNAT1_ADA_OBJS = $(GNAT_ADA_OBJS) ada/back_end.o ada/gnat1drv.o
*************** GNAT1_ADA_OBJS = $(GNAT_ADA_OBJS) ada/ba
*** 494,507 ****
  GNAT1_OBJS = $(GNAT1_C_OBJS) $(GNAT1_ADA_OBJS) ada/b_gnat1.o
  
  GNATBIND_OBJS = \
-  ada/libgnat/a-elchha.o   \
-  ada/libgnat/a-except.o   \
-  ada/libgnat/ada.o        \
-  ada/adaint.o     \
   ada/ali-util.o   \
   ada/ali.o        \
   ada/alloc.o      \
-  ada/argv.o       \
   ada/aspects.o    \
   ada/atree.o      \
   ada/bcheck.o     \
--- 551,559 ----
*************** GNATBIND_OBJS = \
*** 520,532 ****
   ada/bindusg.o    \
   ada/butil.o      \
   ada/casing.o     \
-  ada/cio.o        \
   ada/csets.o      \
-  ada/cstreams.o   \
   ada/debug.o      \
   ada/einfo.o      \
   ada/elists.o     \
-  ada/env.o        \
   ada/err_vars.o   \
   ada/errout.o     \
   ada/erroutc.o    \
--- 572,583 ----
   ada/bindusg.o    \
   ada/butil.o      \
   ada/casing.o     \
   ada/csets.o      \
   ada/debug.o      \
+  ada/einfo-entities.o \
+  ada/einfo-utils.o \
   ada/einfo.o      \
   ada/elists.o     \
   ada/err_vars.o   \
   ada/errout.o     \
   ada/erroutc.o    \
*************** GNATBIND_OBJS = \
*** 535,554 ****
   ada/fmap.o       \
   ada/fname-uf.o   \
   ada/fname.o      \
-  ada/libgnat/g-byorma.o   \
-  ada/libgnat/g-dynhta.o   \
-  ada/libgnat/g-graphs.o   \
-  ada/libgnat/g-hesora.o   \
-  ada/libgnat/g-htable.o   \
-  ada/libgnat/g-lists.o    \
-  ada/libgnat/g-sets.o     \
-  ada/libgnat/gnat.o       \
   ada/gnatbind.o   \
   ada/gnatvsn.o    \
   ada/hostparm.o   \
-  ada/init.o       \
-  ada/initialize.o \
-  ada/libgnat/interfac.o   \
   ada/krunch.o     \
   ada/lib.o        \
   ada/link.o       \
--- 586,594 ----
*************** GNATBIND_OBJS = \
*** 558,569 ****
   ada/osint-b.o    \
   ada/osint.o      \
   ada/output.o     \
-  ada/raise.o      \
-  ada/raise-gcc.o  \
   ada/restrict.o   \
   ada/rident.o     \
   ada/rtfinal.o    \
   ada/rtinit.o     \
   ada/libgnat/s-addope.o   \
   ada/libgnat/s-assert.o   \
   ada/libgnat/s-carun8.o   \
--- 598,659 ----
   ada/osint-b.o    \
   ada/osint.o      \
   ada/output.o     \
   ada/restrict.o   \
   ada/rident.o     \
+  ada/scans.o      \
+  ada/scil_ll.o    \
+  ada/scng.o       \
+  ada/sdefault.o   \
+  ada/seinfo.o	  \
+  ada/sem_aux.o    \
+  ada/sinfo.o      \
+  ada/sinfo-nodes.o \
+  ada/sinfo-utils.o \
+  ada/sinput-c.o   \
+  ada/sinput.o     \
+  ada/snames.o     \
+  ada/stand.o      \
+  ada/stringt.o    \
+  ada/style.o      \
+  ada/styleg.o     \
+  ada/stylesw.o    \
+  ada/switch-b.o   \
+  ada/switch.o     \
+  ada/table.o      \
+  ada/targext.o    \
+  ada/targparm.o   \
+  ada/types.o      \
+  ada/uintp.o      \
+  ada/uname.o      \
+  ada/urealp.o     \
+  ada/widechar.o   \
+  ada/gnat.o       \
+  ada/g-dynhta.o   \
+  ada/g-lists.o    \
+  ada/g-graphs.o   \
+  ada/g-sets.o     \
+  ada/s-resfil.o   \
+  ada/version.o    \
+  ada/s-utf_32.o
+ 
+ ifeq ($(STAGE1),False)
+ GNATBIND_OBJS +=  \
+  ada/init.o       \
+  ada/initialize.o \
+  ada/raise.o      \
+  ada/raise-gcc.o  \
   ada/rtfinal.o    \
   ada/rtinit.o     \
+  ada/seh_init.o   \
+  ada/gcc-interface/system.o \
+  ada/libgnat/a-assert.o   \
+  ada/libgnat/a-elchha.o   \
+  ada/libgnat/a-except.o   \
+  ada/libgnat/ada.o        \
+  ada/libgnat/g-byorma.o   \
+  ada/libgnat/g-hesora.o   \
+  ada/libgnat/g-htable.o   \
+  ada/libgnat/interfac.o   \
   ada/libgnat/s-addope.o   \
   ada/libgnat/s-assert.o   \
   ada/libgnat/s-carun8.o   \
*************** GNATBIND_OBJS = \
*** 577,643 ****
   ada/libgnat/s-conca8.o   \
   ada/libgnat/s-conca9.o   \
   ada/libgnat/s-crc32.o    \
-  ada/libgnat/s-crtl.o     \
   ada/libgnat/s-excdeb.o   \
   ada/libgnat/s-except.o   \
   ada/libgnat/s-excmac.o   \
   ada/libgnat/s-exctab.o   \
   ada/libgnat/s-htable.o   \
-  ada/libgnat/s-imenne.o   \
-  ada/libgnat/s-imgenu.o   \
   ada/libgnat/s-imgint.o   \
   ada/libgnat/s-mastop.o   \
   ada/libgnat/s-memory.o   \
   ada/libgnat/s-os_lib.o   \
   ada/libgnat/s-parame.o   \
-  ada/libgnat/s-resfil.o   \
   ada/libgnat/s-restri.o   \
   ada/libgnat/s-secsta.o   \
   ada/libgnat/s-soflin.o   \
   ada/libgnat/s-soliin.o   \
-  ada/libgnat/s-sopco3.o   \
-  ada/libgnat/s-sopco4.o   \
-  ada/libgnat/s-sopco5.o   \
   ada/libgnat/s-stache.o   \
   ada/libgnat/s-stalib.o   \
   ada/libgnat/s-stoele.o   \
   ada/libgnat/s-strhas.o   \
   ada/libgnat/s-string.o   \
-  ada/libgnat/s-strops.o   \
   ada/libgnat/s-traent.o   \
   ada/libgnat/s-traceb.o   \
   ada/libgnat/s-unstyp.o   \
-  ada/libgnat/s-utf_32.o   \
   ada/libgnat/s-wchcnv.o   \
   ada/libgnat/s-wchcon.o   \
   ada/libgnat/s-wchjis.o   \
   ada/libgnat/s-wchstw.o   \
!  ada/scans.o      \
!  ada/scil_ll.o    \
!  ada/scng.o       \
!  ada/sdefault.o   \
!  ada/seh_init.o   \
!  ada/sem_aux.o    \
!  ada/sinfo.o      \
!  ada/sinput-c.o   \
!  ada/sinput.o     \
!  ada/snames.o     \
!  ada/stand.o      \
!  ada/stringt.o    \
!  ada/style.o      \
!  ada/styleg.o     \
!  ada/stylesw.o    \
!  ada/switch-b.o   \
!  ada/switch.o     \
!  ada/gcc-interface/system.o     \
!  ada/table.o      \
!  ada/targext.o    \
!  ada/targparm.o   \
!  ada/types.o      \
!  ada/uintp.o      \
!  ada/uname.o      \
!  ada/urealp.o     \
!  ada/widechar.o
  
  # Language-independent object files.
  ADA_BACKEND = $(BACKEND) attribs.o
--- 667,705 ----
   ada/libgnat/s-conca8.o   \
   ada/libgnat/s-conca9.o   \
   ada/libgnat/s-crc32.o    \
   ada/libgnat/s-excdeb.o   \
   ada/libgnat/s-except.o   \
   ada/libgnat/s-excmac.o   \
   ada/libgnat/s-exctab.o   \
   ada/libgnat/s-htable.o   \
   ada/libgnat/s-imgint.o   \
   ada/libgnat/s-mastop.o   \
   ada/libgnat/s-memory.o   \
   ada/libgnat/s-os_lib.o   \
   ada/libgnat/s-parame.o   \
   ada/libgnat/s-restri.o   \
   ada/libgnat/s-secsta.o   \
   ada/libgnat/s-soflin.o   \
   ada/libgnat/s-soliin.o   \
   ada/libgnat/s-stache.o   \
   ada/libgnat/s-stalib.o   \
   ada/libgnat/s-stoele.o   \
   ada/libgnat/s-strhas.o   \
   ada/libgnat/s-string.o   \
   ada/libgnat/s-traent.o   \
   ada/libgnat/s-traceb.o   \
   ada/libgnat/s-unstyp.o   \
   ada/libgnat/s-wchcnv.o   \
   ada/libgnat/s-wchcon.o   \
   ada/libgnat/s-wchjis.o   \
   ada/libgnat/s-wchstw.o   \
!  ada/adaint.o     \
!  ada/argv.o       \
!  ada/cio.o        \
!  ada/cstreams.o   \
!  ada/env.o        \
!  ada/errno.o
! endif
  
  # Language-independent object files.
  ADA_BACKEND = $(BACKEND) attribs.o
*************** endif
*** 655,660 ****
--- 717,730 ----
  # For unwind-pe.h
  CFLAGS-ada/raise-gcc.o += -I$(srcdir)/../libgcc -DEH_MECHANISM_$(EH_MECHANISM)
  
+ # Under aarch64 darwin, we need to include the iOS signal trampoline.
+ 
+ ifeq ($(strip $(filter-out aarch64 arm64 darwin%,$(host_cpu) $(host_os))),)
+   EXTRA_HOST_OBJS=ada/sigtramp-ios.o
+ else
+   EXTRA_HOST_OBJS =
+ endif
+ 
  ada/libgnat/s-excmac.o: ada/libgnat/s-excmac.ads ada/libgnat/s-excmac.adb
  
  ada/libgnat/s-excmac.ads: $(srcdir)/ada/libgnat/s-excmac__$(EH_MECHANISM).ads
*************** ada/libgnat/s-excmac.adb: $(srcdir)/ada/
*** 668,683 ****
  # Needs to be built with CC=gcc
  # Since the RTL should be built with the latest compiler, remove the
  #  stamp target in the parent directory whenever gnat1 is rebuilt
! gnat1$(exeext): $(TARGET_ADA_SRCS) $(GNAT1_OBJS) $(ADA_BACKEND) libcommon-target.a \
! 		$(LIBDEPS) $(ada.prev)
  	@$(call LINK_PROGRESS,$(INDEX.ada),start)
! 	+$(GCC_LLINK) -o $@ $(GNAT1_OBJS) $(ADA_BACKEND) \
! 	  libcommon-target.a $(LIBS) $(SYSLIBS) $(BACKENDLIBS) $(CFLAGS)
  	$(RM) stamp-gnatlib2-rts stamp-tools
  	@$(call LINK_PROGRESS,$(INDEX.ada),end)
  
! gnatbind$(exeext): ada/b_gnatb.o $(CONFIG_H) $(GNATBIND_OBJS) ggc-none.o libcommon-target.a $(LIBDEPS)
! 	+$(GCC_LINK) -o $@ ada/b_gnatb.o $(GNATBIND_OBJS) ggc-none.o libcommon-target.a $(LIBS) $(SYSLIBS) $(CFLAGS)
  
  # use target-gcc target-gnatmake target-gnatbind target-gnatlink
  gnattools: $(GCC_PARTS) $(CONFIG_H) prefix.o force
--- 738,753 ----
  # Needs to be built with CC=gcc
  # Since the RTL should be built with the latest compiler, remove the
  #  stamp target in the parent directory whenever gnat1 is rebuilt
! gnat1$(exeext): $(TARGET_ADA_SRCS) $(GNAT1_OBJS) $(ADA_BACKEND) $(EXTRA_HOST_OBJS) libcommon-target.a \
! 		$(EXTRA_HOST_OBJS) $(LIBDEPS) $(ada.prev)
  	@$(call LINK_PROGRESS,$(INDEX.ada),start)
! 	+$(GCC_LLINK) -o $@ $(GNAT1_OBJS) $(ADA_BACKEND) $(EXTRA_HOST_OBJS) $(CFLAGS) \
! 	  libcommon-target.a $(LIBS) $(SYSLIBS) $(BACKENDLIBS) $(GNATLIB)
  	$(RM) stamp-gnatlib2-rts stamp-tools
  	@$(call LINK_PROGRESS,$(INDEX.ada),end)
  
! gnatbind$(exeext): ada/b_gnatb.o $(CONFIG_H) $(GNATBIND_OBJS) $(EXTRA_HOST_OBJS) ggc-none.o libcommon-target.a $(LIBDEPS)
! 	+$(GCC_LINK) -o $@ $(CFLAGS) ada/b_gnatb.o $(GNATBIND_OBJS) $(EXTRA_HOST_OBJS) ggc-none.o libcommon-target.a $(LIBS) $(SYSLIBS) $(GNATLIB)
  
  # use target-gcc target-gnatmake target-gnatbind target-gnatlink
  gnattools: $(GCC_PARTS) $(CONFIG_H) prefix.o force
*************** ada.srcextra:
*** 726,733 ****
  ada.srcman:
  
  ada.tags: force
! 	cd $(srcdir)/ada && etags -o TAGS.sub *.c *.h *.ads *.adb && \
! 	etags --include TAGS.sub --include ../TAGS.sub
  
  
  # Generate documentation.
--- 796,803 ----
  ada.srcman:
  
  ada.tags: force
! 	cd $(srcdir)/ada && $(ETAGS) -o TAGS.sub *.cc *.h *.ads *.adb && \
! 	$(ETAGS) --include TAGS.sub --include ../TAGS.sub
  
  
  # Generate documentation.
*************** ada.install-info: $(DESTDIR)$(infodir)/g
*** 768,775 ****
  	$(DESTDIR)$(infodir)/gnat_rm.info \
  	$(DESTDIR)$(infodir)/gnat-style.info
  
! ada.dvi: doc/gnat_ugn.dvi \
!       doc/gnat_rm.dvi doc/gnat-style.dvi
  
  ADA_PDFFILES = doc/gnat_ugn.pdf \
                 doc/gnat_rm.pdf doc/gnat-style.pdf
--- 838,857 ----
  	$(DESTDIR)$(infodir)/gnat_rm.info \
  	$(DESTDIR)$(infodir)/gnat-style.info
  
! ADA_DVIFILES = doc/gnat_ugn.dvi \
!                doc/gnat_rm.dvi doc/gnat-style.dvi
! 
! ada.dvi: $(ADA_DVIFILES)
! 
! ada.install-dvi: $(ADA_DVIFILES)
! 	@$(NORMAL_INSTALL)
! 	test -z "$(dvidir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(dvidir)/gcc"
! 	@list='$(ADA_DVIFILES)'; for p in $$list; do \
! 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
! 	  f=$(dvi__strip_dir) \
! 	  echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/gcc/$$f'"; \
! 	  $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/gcc/$$f"; \
! 	done
  
  ADA_PDFFILES = doc/gnat_ugn.pdf \
                 doc/gnat_rm.pdf doc/gnat-style.pdf
*************** doc/gnat-style.pdf: ada/gnat-style.texi
*** 821,828 ****
  # (cross). $(prefix) comes from the --program-prefix configure option,
  # or from the --target option if the former is not specified.
  # Do the same for the rest of the Ada tools (gnatchop, gnat, gnatkr,
! # gnatlink, gnatls, gnatmake, gnatname, gnatprep, gnatxref, gnatfind,
! # gnatclean).
  # gnatdll is only used on Windows.
  ada.install-common: $(gnat_install_lib) gnat-install-tools
  
--- 903,909 ----
  # (cross). $(prefix) comes from the --program-prefix configure option,
  # or from the --target option if the former is not specified.
  # Do the same for the rest of the Ada tools (gnatchop, gnat, gnatkr,
! # gnatlink, gnatls, gnatmake, gnatname, gnatprep, gnatclean).
  # gnatdll is only used on Windows.
  ada.install-common: $(gnat_install_lib) gnat-install-tools
  
*************** ada.mostlyclean:
*** 877,883 ****
  	-$(RM) ada/*$(objext) ada/*.ali ada/b_gnat*.ads ada/b_gnat*.adb
  	-$(RM) ada/*$(objext).gnatd.n
  	-$(RM) ada/*$(coverageexts)
! 	-$(RM) ada/sdefault.adb ada/stamp-sdefault ada/stamp-snames
  	-$(RMDIR) ada/tools
  	-$(RMDIR) ada/libgnat
  	-$(RM) gnatbind$(exeext) gnat1$(exeext)
--- 958,964 ----
  	-$(RM) ada/*$(objext) ada/*.ali ada/b_gnat*.ads ada/b_gnat*.adb
  	-$(RM) ada/*$(objext).gnatd.n
  	-$(RM) ada/*$(coverageexts)
! 	-$(RM) ada/stamp-sdefault ada/stamp-snames ada/stamp-gen_il
  	-$(RMDIR) ada/tools
  	-$(RMDIR) ada/libgnat
  	-$(RM) gnatbind$(exeext) gnat1$(exeext)
*************** ada.distclean:
*** 893,900 ****
  	-$(RM) gnatmake$(exeext)
  	-$(RM) gnatname$(exeext)
  	-$(RM) gnatprep$(exeext)
- 	-$(RM) gnatfind$(exeext)
- 	-$(RM) gnatxref$(exeext)
  	-$(RM) gnatclean$(exeext)
  	-$(RM) ada/rts/*
  	-$(RMDIR) ada/rts
--- 974,979 ----
*************** ada.maintainer-clean:
*** 905,911 ****
  	-$(RM) ada/einfo.h
  	-$(RM) ada/nmake.adb
  	-$(RM) ada/nmake.ads
- 	-$(RM) ada/treeprs.ads
  	-$(RM) ada/snames.ads ada/snames.adb ada/snames.h
  
  # Stage hooks:
--- 984,989 ----
*************** $(check_acats_targets): check-acats%:
*** 1011,1017 ****
  
  ada/b_gnat1.adb : $(GNAT1_ADA_OBJS)
          # Old gnatbind do not allow a path for -o.
! 	$(GNATBIND) $(ADA_INCLUDES) -o b_gnat1.adb -n ada/gnat1drv.ali
  	$(MV) b_gnat1.adb b_gnat1.ads ada/
  
  ada/b_gnat1.o : ada/b_gnat1.adb
--- 1089,1095 ----
  
  ada/b_gnat1.adb : $(GNAT1_ADA_OBJS)
          # Old gnatbind do not allow a path for -o.
! 	$(GNATBIND) $(GNATBIND_FLAGS) $(ADA_INCLUDES) -o b_gnat1.adb -n ada/gnat1drv.ali
  	$(MV) b_gnat1.adb b_gnat1.ads ada/
  
  ada/b_gnat1.o : ada/b_gnat1.adb
*************** ada/b_gnat1.o : ada/b_gnat1.adb
*** 1020,1028 ****
  	$(CC) -c $(CFLAGS) $(ADA_CFLAGS) -gnatp -gnatws $(ADA_INCLUDES) \
  	    $< $(ADA_OUTPUT_OPTION)
  
! ada/b_gnatb.adb : $(GNATBIND_OBJS) ada/gnatbind.o ada/libgnat/interfac.o
          # Old gnatbind do not allow a path for -o.
! 	$(GNATBIND) $(ADA_INCLUDES) -o b_gnatb.adb ada/gnatbind.ali
  	$(MV) b_gnatb.adb b_gnatb.ads ada/
  
  ada/b_gnatb.o : ada/b_gnatb.adb
--- 1098,1106 ----
  	$(CC) -c $(CFLAGS) $(ADA_CFLAGS) -gnatp -gnatws $(ADA_INCLUDES) \
  	    $< $(ADA_OUTPUT_OPTION)
  
! ada/b_gnatb.adb : $(GNATBIND_OBJS) ada/gnatbind.o
          # Old gnatbind do not allow a path for -o.
! 	$(GNATBIND) $(GNATBIND_FLAGS) $(ADA_INCLUDES) -o b_gnatb.adb ada/gnatbind.ali
  	$(MV) b_gnatb.adb b_gnatb.ads ada/
  
  ada/b_gnatb.o : ada/b_gnatb.adb
*************** ada/b_gnatb.o : ada/b_gnatb.adb
*** 1031,1047 ****
  
  include $(srcdir)/ada/Make-generated.in
  
- update-sources : ada/treeprs.ads ada/einfo.h ada/sinfo.h ada/nmake.adb \
- 	ada/nmake.ads
- 	$(RM) $(addprefix $(srcdir)/ada/,$(notdir $^))
- 	$(CP) $^ $(srcdir)/ada
- 
  ada/sdefault.o : ada/libgnat/ada.ads ada/libgnat/a-except.ads ada/libgnat/a-unccon.ads \
     ada/libgnat/a-uncdea.ads ada/alloc.ads ada/debug.ads ada/hostparm.ads ada/namet.ads \
     ada/opt.ads ada/osint.ads ada/output.ads ada/sdefault.ads ada/sdefault.adb \
     ada/libgnat/s-exctab.ads ada/libgnat/s-memory.ads ada/libgnat/s-os_lib.ads ada/libgnat/s-parame.ads \
!    ada/libgnat/s-stalib.ads ada/libgnat/s-strops.ads ada/libgnat/s-sopco3.ads ada/libgnat/s-sopco4.ads \
!    ada/libgnat/s-sopco5.ads ada/libgnat/s-string.ads ada/libgnat/s-traent.ads ada/libgnat/s-unstyp.ads \
     ada/libgnat/s-wchcon.ads ada/table.adb ada/table.ads \
     ada/types.ads ada/libgnat/unchdeal.ads ada/libgnat/unchconv.ads \
     ada/gcc-interface/system.ads
--- 1109,1119 ----
  
  include $(srcdir)/ada/Make-generated.in
  
  ada/sdefault.o : ada/libgnat/ada.ads ada/libgnat/a-except.ads ada/libgnat/a-unccon.ads \
     ada/libgnat/a-uncdea.ads ada/alloc.ads ada/debug.ads ada/hostparm.ads ada/namet.ads \
     ada/opt.ads ada/osint.ads ada/output.ads ada/sdefault.ads ada/sdefault.adb \
     ada/libgnat/s-exctab.ads ada/libgnat/s-memory.ads ada/libgnat/s-os_lib.ads ada/libgnat/s-parame.ads \
!    ada/libgnat/s-stalib.ads ada/libgnat/s-string.ads ada/libgnat/s-traent.ads ada/libgnat/s-unstyp.ads \
     ada/libgnat/s-wchcon.ads ada/table.adb ada/table.ads \
     ada/types.ads ada/libgnat/unchdeal.ads ada/libgnat/unchconv.ads \
     ada/gcc-interface/system.ads
*************** ada/generated/gnatvsn.ads: ada/gnatvsn.a
*** 1083,1089 ****
  	cat $< | sed -e "/Version/s/(\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*)/($$d$$s)/g" >$@
  
  ada/gnatvsn.o : ada/gnatvsn.adb ada/generated/gnatvsn.ads
! 	$(CC) -c $(ALL_ADAFLAGS) -Iada/generated -I../ada/generated $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
  	@$(ADA_DEPS)
  
  # Dependencies for windows specific tool (mdll)
--- 1155,1161 ----
  	cat $< | sed -e "/Version/s/(\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*)/($$d$$s)/g" >$@
  
  ada/gnatvsn.o : ada/gnatvsn.adb ada/generated/gnatvsn.ads
! 	$(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
  	@$(ADA_DEPS)
  
  # Dependencies for windows specific tool (mdll)
*************** ada/mdll-fil.o : ada/mdll-fil.adb ada/md
*** 1097,1109 ****
  ada/mdll-utl.o : ada/mdll-utl.adb ada/mdll.ads ada/mdll-utl.ads ada/sdefault.ads ada/types.ads
  	$(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
  
! ada_generated_files = ada/sinfo.h ada/einfo.h ada/nmake.adb ada/nmake.ads \
! 		      ada/treeprs.ads ada/snames.ads ada/snames.adb ada/snames.h \
! 		      ada/generated/gnatvsn.ads
  
  # When building from scratch we don't have dependency files, the only thing
  # we need to ensure is that the generated files are created first.
! $(GNAT1_OBJS) $(GNATBIND_OBJS): | $(ada_generated_files)
  
  # Manually include the auto-generated dependencies for the Ada host objects.
  ADA_DEPFILES = $(foreach obj,$(GNAT1_ADA_OBJS) $(GNATBIND_OBJS),\
--- 1169,1200 ----
  ada/mdll-utl.o : ada/mdll-utl.adb ada/mdll.ads ada/mdll-utl.ads ada/sdefault.ads ada/types.ads
  	$(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
  
! # All generated files.  Perhaps we should build all of these in the same
! # subdirectory, and get rid of ada/bldtools.
! # Warning: the files starting with ada/gnat.ads are not really generated,
! # instead they are copied from the libgnat subdirectory of the source tree
! # during all the stages of the bootstrap, i.e. including stage #1, which
! # means that they still need to be compilable by the base compiler.
! ADA_GENERATED_FILES = \
!   ada/sinfo.h ada/einfo.h ada/nmake.adb ada/nmake.ads \
!   ada/snames.ads ada/snames.adb ada/snames.h \
!   ada/generated/gnatvsn.ads \
!   ada/seinfo.ads ada/seinfo_tables.ads ada/seinfo_tables.adb \
!   ada/sinfo-nodes.ads ada/sinfo-nodes.adb \
!   ada/einfo-entities.ads ada/einfo-entities.adb \
!   ada/gnat.ads ada/g-dynhta.ads ada/g-dynhta.adb \
!   ada/g-dyntab.ads ada/g-dyntab.adb ada/g-graphs.ads ada/g-graphs.adb \
!   ada/g-lists.ads ada/g-lists.adb ada/g-sets.ads ada/g-sets.adb \
!   ada/s-rident.ads ada/s-pehage.ads ada/s-pehage.adb \
!   ada/s-resfil.ads ada/s-resfil.adb ada/s-utf_32.ads ada/s-utf_32.adb
! 
! # Only used to manually trigger the creation of the generated files.
! .PHONY:
! ada_generated_files: $(ADA_GENERATED_FILES)
  
  # When building from scratch we don't have dependency files, the only thing
  # we need to ensure is that the generated files are created first.
! $(GNAT1_OBJS) $(GNATBIND_OBJS): | $(ADA_GENERATED_FILES)
  
  # Manually include the auto-generated dependencies for the Ada host objects.
  ADA_DEPFILES = $(foreach obj,$(GNAT1_ADA_OBJS) $(GNATBIND_OBJS),\
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/Makefile.in gcc-12.1.0/gcc/ada/gcc-interface/Makefile.in
*** gcc-11.3.0/gcc/ada/gcc-interface/Makefile.in	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/Makefile.in	Fri May  6 07:30:56 2022
*************** TEXI2DVI = texi2dvi
*** 104,110 ****
  TEXI2PDF = texi2pdf
  GNATBIND_FLAGS = -static -x
  ADA_CFLAGS =
! ADAFLAGS = -W -Wall -gnatpg -gnata
  FORCE_DEBUG_ADAFLAGS = -g
  NO_INLINE_ADAFLAGS = -fno-inline
  NO_OMIT_ADAFLAGS = -fno-omit-frame-pointer
--- 104,110 ----
  TEXI2PDF = texi2pdf
  GNATBIND_FLAGS = -static -x
  ADA_CFLAGS =
! ADAFLAGS = -W -Wall -gnatpg -gnata -gnatU
  FORCE_DEBUG_ADAFLAGS = -g
  NO_INLINE_ADAFLAGS = -fno-inline
  NO_OMIT_ADAFLAGS = -fno-omit-frame-pointer
*************** LIBS = $(LIBINTL) $(LIBICONV) $(LIBBACKT
*** 251,259 ****
  LIBDEPS = $(LIBINTL_DEP) $(LIBICONV_DEP) $(LIBBACKTRACE) $(LIBIBERTY)
  # Default is no TGT_LIB; one might be passed down or something
  TGT_LIB =
! TOOLS_LIBS = ../link.o ../targext.o ../../ggc-none.o ../../libcommon-target.a \
!   ../../libcommon.a ../../../libcpp/libcpp.a $(LIBGNAT) $(LIBINTL) $(LIBICONV) \
!   ../$(LIBBACKTRACE) ../$(LIBIBERTY) $(SYSLIBS) $(TGT_LIB)
  
  # Add -no-pie to TOOLS_LIBS since some of them are compiled with -fno-PIE.
  TOOLS_LIBS += @NO_PIE_FLAG@
--- 251,260 ----
  LIBDEPS = $(LIBINTL_DEP) $(LIBICONV_DEP) $(LIBBACKTRACE) $(LIBIBERTY)
  # Default is no TGT_LIB; one might be passed down or something
  TGT_LIB =
! TOOLS_LIBS = ../version.o ../link.o ../targext.o ../../ggc-none.o \
!   ../../libcommon-target.a ../../libcommon.a ../../../libcpp/libcpp.a \
!   $(LIBGNAT) $(LIBINTL) $(LIBICONV) ../$(LIBBACKTRACE) ../$(LIBIBERTY) \
!   $(SYSLIBS) $(TGT_LIB)
  
  # Add -no-pie to TOOLS_LIBS since some of them are compiled with -fno-PIE.
  TOOLS_LIBS += @NO_PIE_FLAG@
*************** ADA_INCLUDES_FOR_SUBDIR = -I. -I$(fsrcdi
*** 303,309 ****
  	$(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
  
  # how to regenerate this file
! Makefile: ../config.status $(srcdir)/ada/gcc-interface/Makefile.in $(srcdir)/ada/Makefile.in $(srcdir)/version.c
  	cd ..; \
  	LANGUAGES="$(CONFIG_LANGUAGES)" \
  	CONFIG_HEADERS= \
--- 304,310 ----
  	$(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
  
  # how to regenerate this file
! Makefile: ../config.status $(srcdir)/ada/gcc-interface/Makefile.in $(srcdir)/ada/Makefile.in $(srcdir)/ada/version.c
  	cd ..; \
  	LANGUAGES="$(CONFIG_LANGUAGES)" \
  	CONFIG_HEADERS= \
*************** GNATMAKE_OBJS = a-except.o ali.o ali-uti
*** 333,338 ****
--- 334,340 ----
   snames.o stand.o stringt.o styleg.o stylesw.o system.o validsw.o \
   switch.o switch-m.o table.o targparm.o tempdir.o types.o uintp.o \
   uname.o urealp.o usage.o widechar.o \
+  seinfo.o einfo-entities.o einfo-utils.o sinfo-nodes.o sinfo-utils.o \
   $(EXTRA_GNATMAKE_OBJS)
  
  # Make arch match the current multilib so that the RTS selection code
*************** TOOLS_FLAGS_TO_PASS=		\
*** 391,405 ****
  
  GCC_LINK=$(CXX) $(GCC_LINK_FLAGS) $(LDFLAGS)
  
! # Build directory for the tools. Let's copy the target-dependent
! # sources using the same mechanism as for gnatlib. The other sources are
! # accessed using the vpath directive below
  
  ../stamp-tools:
  	-$(RM) tools/*
  	-$(RMDIR) tools
  	-$(MKDIR) tools
! 	-(cd tools; $(LN_S) ../sdefault.adb ../snames.ads ../snames.adb .)
  	-$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
  	          $(RM) tools/$(word 1,$(subst <, ,$(PAIR)));\
  	          $(LN_S) $(fsrcpfx)ada/$(word 2,$(subst <, ,$(PAIR))) \
--- 393,412 ----
  
  GCC_LINK=$(CXX) $(GCC_LINK_FLAGS) $(LDFLAGS)
  
! # Build directory for the tools. We first need to copy the generated files,
! # then the target-dependent sources using the same mechanism as for gnatlib.
! # The other sources are accessed using the vpath directive below
! 
! GENERATED_FILES_FOR_TOOLS = \
!   einfo-entities.ads einfo-entities.adb sdefault.adb seinfo.ads \
!   sinfo-nodes.ads sinfo-nodes.adb snames.ads snames.adb
  
  ../stamp-tools:
  	-$(RM) tools/*
  	-$(RMDIR) tools
  	-$(MKDIR) tools
! 	-(cd tools; $(foreach FILE,$(GENERATED_FILES_FOR_TOOLS), \
! 			     $(LN_S) ../$(FILE) $(FILE);))
  	-$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
  	          $(RM) tools/$(word 1,$(subst <, ,$(PAIR)));\
  	          $(LN_S) $(fsrcpfx)ada/$(word 2,$(subst <, ,$(PAIR))) \
*************** gnattools2: ../stamp-tools
*** 450,456 ****
  common-tools: ../stamp-tools
  	$(GNATMAKE) -j0 -c -b $(ADA_INCLUDES) \
  	  --GNATBIND="$(GNATBIND)" --GCC="$(CC) $(ALL_ADAFLAGS)" \
! 	  gnatchop gnatcmd gnatkr gnatls gnatprep gnatxref gnatfind gnatname \
  	  gnatclean -bargs $(ADA_INCLUDES) $(GNATBIND_FLAGS)
  	$(GNATLINK) -v gnatcmd -o ../../gnat$(exeext) \
  	  --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS)
--- 457,463 ----
  common-tools: ../stamp-tools
  	$(GNATMAKE) -j0 -c -b $(ADA_INCLUDES) \
  	  --GNATBIND="$(GNATBIND)" --GCC="$(CC) $(ALL_ADAFLAGS)" \
! 	  gnatchop gnatcmd gnatkr gnatls gnatprep gnatname \
  	  gnatclean -bargs $(ADA_INCLUDES) $(GNATBIND_FLAGS)
  	$(GNATLINK) -v gnatcmd -o ../../gnat$(exeext) \
  	  --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS)
*************** common-tools: ../stamp-tools
*** 462,471 ****
  	  --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS)
  	$(GNATLINK) -v gnatprep -o ../../gnatprep$(exeext) \
  	  --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS)
- 	$(GNATLINK) -v gnatxref -o ../../gnatxref$(exeext) \
- 	  --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS)
- 	$(GNATLINK) -v gnatfind -o ../../gnatfind$(exeext) \
- 	  --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS)
  	$(GNATLINK) -v gnatname -o ../../gnatname$(exeext) \
  	  --GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS)
  	$(GNATLINK) -v gnatclean -o ../../gnatclean$(exeext) \
--- 469,474 ----
*************** gnatlib-shared-darwin:
*** 805,812 ****
  		libgnat$(soext)
  	cd $(RTSDIR); $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
  		libgnarl$(soext)
! 	cd $(RTSDIR); dsymutil libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
! 	cd $(RTSDIR); dsymutil libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext)
  
  gnatlib-shared:
  	$(MAKE) $(FLAGS_TO_PASS) \
--- 808,815 ----
  		libgnat$(soext)
  	cd $(RTSDIR); $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
  		libgnarl$(soext)
! 	cd $(RTSDIR); $(DSYMUTIL_FOR_TARGET) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
! 	cd $(RTSDIR); $(DSYMUTIL_FOR_TARGET) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext)
  
  gnatlib-shared:
  	$(MAKE) $(FLAGS_TO_PASS) \
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/ada-tree.h gcc-12.1.0/gcc/ada/gcc-interface/ada-tree.h
*** gcc-11.3.0/gcc/ada/gcc-interface/ada-tree.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/ada-tree.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2021, 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- *
*************** do {						   \
*** 410,419 ****
  
  /* Flags added to decl nodes.  */
  
- /* Nonzero in a FUNCTION_DECL that represents a stubbed function
-    discriminant.  */
- #define DECL_STUBBED_P(NODE) DECL_LANG_FLAG_0 (FUNCTION_DECL_CHECK (NODE))
- 
  /* Nonzero in a VAR_DECL if it is guaranteed to be constant after having
     been elaborated and TREE_READONLY is not set on it.  */
  #define DECL_READONLY_ONCE_ELAB(NODE) DECL_LANG_FLAG_0 (VAR_DECL_CHECK (NODE))
--- 410,415 ----
*************** do {						   \
*** 580,585 ****
  #define EXIT_STMT_LABEL(NODE)    TREE_OPERAND_CHECK_CODE (NODE, EXIT_STMT, 1)
  
  /* Small kludge to be able to define Ada built-in functions locally.
!    We overload them on top of the HSAIL/BRIG builtin functions.  */
! #define BUILT_IN_LIKELY   BUILT_IN_HSAIL_WORKITEMABSID
! #define BUILT_IN_UNLIKELY BUILT_IN_HSAIL_GRIDSIZE
--- 576,581 ----
  #define EXIT_STMT_LABEL(NODE)    TREE_OPERAND_CHECK_CODE (NODE, EXIT_STMT, 1)
  
  /* Small kludge to be able to define Ada built-in functions locally.
!    We overload them on top of the C++ coroutines builtin functions.  */
! #define BUILT_IN_LIKELY   BUILT_IN_CORO_PROMISE
! #define BUILT_IN_UNLIKELY BUILT_IN_CORO_RESUME
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/ada.h gcc-12.1.0/gcc/ada/gcc-interface/ada.h
*** gcc-11.3.0/gcc/ada/gcc-interface/ada.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/ada.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2021, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/config-lang.in gcc-12.1.0/gcc/ada/gcc-interface/config-lang.in
*** gcc-11.3.0/gcc/ada/gcc-interface/config-lang.in	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/config-lang.in	Fri May  6 07:30:56 2022
*************** gcc_subdir="ada/gcc-interface"
*** 30,36 ****
  boot_language=yes
  compilers="gnat1\$(exeext)"
  
! gtfiles="\$(srcdir)/ada/gcc-interface/ada-tree.h \$(srcdir)/ada/gcc-interface/gigi.h \$(srcdir)/ada/gcc-interface/decl.c \$(srcdir)/ada/gcc-interface/trans.c \$(srcdir)/ada/gcc-interface/utils.c \$(srcdir)/ada/gcc-interface/misc.c"
  
  outputs="ada/gcc-interface/Makefile ada/Makefile"
  
--- 30,36 ----
  boot_language=yes
  compilers="gnat1\$(exeext)"
  
! gtfiles="\$(srcdir)/ada/gcc-interface/ada-tree.h \$(srcdir)/ada/gcc-interface/gigi.h \$(srcdir)/ada/gcc-interface/decl.cc \$(srcdir)/ada/gcc-interface/trans.cc \$(srcdir)/ada/gcc-interface/utils.cc \$(srcdir)/ada/gcc-interface/misc.cc"
  
  outputs="ada/gcc-interface/Makefile ada/Makefile"
  
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/cuintp.c gcc-12.1.0/gcc/ada/gcc-interface/cuintp.c
*** gcc-11.3.0/gcc/ada/gcc-interface/cuintp.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/cuintp.c	Thu Jan  1 00:00:00 1970
***************
*** 1,181 ****
- /****************************************************************************
-  *                                                                          *
-  *                        GNAT COMPILER COMPONENTS                          *
-  *                                                                          *
-  *                               C U I N T P                                *
-  *                                                                          *
-  *                          C Implementation File                           *
-  *                                                                          *
-  *          Copyright (C) 1992-2020, Free Software Foundation, Inc.         *
-  *                                                                          *
-  * GNAT is free software;  you can  redistribute it  and/or modify it under *
-  * terms of the  GNU General Public License as published  by the Free Soft- *
-  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
-  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
-  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
-  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
-  * for  more details.  You should have received a copy of the GNU General   *
-  * Public License along with GCC; see the file COPYING3.  If not see        *
-  * <http://www.gnu.org/licenses/>.                                          *
-  *                                                                          *
-  * GNAT was originally developed  by the GNAT team at  New York University. *
-  * Extensive contributions were provided by Ada Core Technologies Inc.      *
-  *                                                                          *
-  ****************************************************************************/
- 
- /* This file corresponds to the Ada package body Uintp.  It was created
-    manually from the files uintp.ads and uintp.adb.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "tm.h"
- #include "vec.h"
- #include "alias.h"
- #include "tree.h"
- #include "inchash.h"
- #include "fold-const.h"
- 
- #include "ada.h"
- #include "types.h"
- #include "uintp.h"
- #include "ada-tree.h"
- #include "gigi.h"
- 
- /* Universal integers are represented by the Uint type which is an index into
-    the Uints_Ptr table containing Uint_Entry values.  A Uint_Entry contains an
-    index and length for getting the "digits" of the universal integer from the
-    Udigits_Ptr table.
- 
-    For efficiency, this method is used only for integer values larger than the
-    constant Uint_Bias.  If a Uint is less than this constant, then it contains
-    the integer value itself.  The origin of the Uints_Ptr table is adjusted so
-    that a Uint value of Uint_Bias indexes the first element.
- 
-    First define a utility function that is build_int_cst for integral types and
-    does a conversion for floating-point types.  */
- 
- static tree
- build_cst_from_int (tree type, HOST_WIDE_INT low)
- {
-   if (SCALAR_FLOAT_TYPE_P (type))
-     return convert (type, build_int_cst (gnat_type_for_size (32, 0), low));
-   else
-     return build_int_cst (type, low);
- }
- 
- /* Similar to UI_To_Int, but return a GCC INTEGER_CST or REAL_CST node,
-    depending on whether TYPE is an integral or real type.  Overflow is tested
-    by the constant-folding used to build the node.  TYPE is the GCC type of
-    the resulting node.  */
- 
- tree
- UI_To_gnu (Uint Input, tree type)
- {
-   /* We might have a TYPE with biased representation and be passed an unbiased
-      value that doesn't fit.  We always use an unbiased type to be able to hold
-      any such possible value for intermediate computations and then rely on a
-      conversion back to TYPE to perform the bias adjustment when need be.  */
-   tree comp_type
-     = TREE_CODE (type) == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (type)
-       ? get_base_type (type) : type;
-   tree gnu_ret;
- 
-   if (Input <= Uint_Direct_Last)
-     gnu_ret = build_cst_from_int (comp_type, Input - Uint_Direct_Bias);
-   else
-     {
-       Int Idx = Uints_Ptr[Input].Loc;
-       Pos Length = Uints_Ptr[Input].Length;
-       Int First = Udigits_Ptr[Idx];
-       tree gnu_base;
- 
-       gcc_assert (Length > 0);
- 
-       /* The computations we perform below always require a type at least as
- 	 large as an integer not to overflow.  FP types are always fine, but
- 	 INTEGER or ENUMERAL types we are handed may be too short.  We use a
- 	 base integer type node for the computations in this case and will
- 	 convert the final result back to the incoming type later on.  */
-       if (!SCALAR_FLOAT_TYPE_P (comp_type) && TYPE_PRECISION (comp_type) < 32)
- 	comp_type = gnat_type_for_size (32, 0);
- 
-       gnu_base = build_cst_from_int (comp_type, Base);
- 
-       gnu_ret = build_cst_from_int (comp_type, First);
-       if (First < 0)
- 	for (Idx++, Length--; Length; Idx++, Length--)
- 	  gnu_ret = fold_build2 (MINUS_EXPR, comp_type,
- 				 fold_build2 (MULT_EXPR, comp_type,
- 					      gnu_ret, gnu_base),
- 				 build_cst_from_int (comp_type,
- 						     Udigits_Ptr[Idx]));
-       else
- 	for (Idx++, Length--; Length; Idx++, Length--)
- 	  gnu_ret = fold_build2 (PLUS_EXPR, comp_type,
- 				 fold_build2 (MULT_EXPR, comp_type,
- 					      gnu_ret, gnu_base),
- 				 build_cst_from_int (comp_type,
- 						     Udigits_Ptr[Idx]));
-     }
- 
-   gnu_ret = convert (type, gnu_ret);
- 
-   /* We don't need any NOP_EXPR or NON_LVALUE_EXPR on GNU_RET.  */
-   while ((TREE_CODE (gnu_ret) == NOP_EXPR
- 	  || TREE_CODE (gnu_ret) == NON_LVALUE_EXPR)
- 	 && TREE_TYPE (TREE_OPERAND (gnu_ret, 0)) == TREE_TYPE (gnu_ret))
-     gnu_ret = TREE_OPERAND (gnu_ret, 0);
- 
-   return gnu_ret;
- }
- 
- /* Similar to UI_From_Int, but take a GCC INTEGER_CST.  We use UI_From_Int
-    when possible, i.e. for a 32-bit signed value, to take advantage of its
-    built-in caching mechanism.  For values of larger magnitude, we compute
-    digits into a vector and call Vector_To_Uint.  */
- 
- Uint
- UI_From_gnu (tree Input)
- {
-   tree gnu_type = TREE_TYPE (Input), gnu_base, gnu_temp;
-   /* UI_Base is defined so that 5 Uint digits is sufficient to hold the
-      largest possible signed 64-bit value.  */
-   const int Max_For_Dint = 5;
-   int v[Max_For_Dint];
-   Vector_Template temp;
-   Int_Vector vec;
- 
- #if HOST_BITS_PER_WIDE_INT < 64
- #error unsupported HOST_BITS_PER_WIDE_INT setting
- #endif
- 
-   /* On 64-bit hosts, tree_fits_shwi_p tells whether the input fits in
-      a signed 64-bit integer.  Then a truncation tells whether it fits
-      in a signed 32-bit integer.  */
-   if (tree_fits_shwi_p (Input))
-     {
-       HOST_WIDE_INT hw_input = tree_to_shwi (Input);
-       if (hw_input == (int) hw_input)
- 	return UI_From_Int (hw_input);
-     }
-   else
-     return No_Uint;
- 
-   gnu_base = build_int_cst (gnu_type, UI_Base);
-   gnu_temp = Input;
- 
-   for (int i = Max_For_Dint - 1; i >= 0; i--)
-     {
-       v[i] = tree_to_shwi (fold_build1 (ABS_EXPR, gnu_type,
- 					fold_build2 (TRUNC_MOD_EXPR, gnu_type,
- 						     gnu_temp, gnu_base)));
-       gnu_temp = fold_build2 (TRUNC_DIV_EXPR, gnu_type, gnu_temp, gnu_base);
-     }
- 
-   temp.Low_Bound = 1;
-   temp.High_Bound = Max_For_Dint;
-   vec.Bounds = &temp;
-   vec.Array = v;
-   return Vector_To_Uint (vec, tree_int_cst_sgn (Input) < 0);
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/cuintp.cc gcc-12.1.0/gcc/ada/gcc-interface/cuintp.cc
*** gcc-11.3.0/gcc/ada/gcc-interface/cuintp.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gcc-interface/cuintp.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,181 ----
+ /****************************************************************************
+  *                                                                          *
+  *                        GNAT COMPILER COMPONENTS                          *
+  *                                                                          *
+  *                               C U I N T P                                *
+  *                                                                          *
+  *                          C Implementation File                           *
+  *                                                                          *
+  *          Copyright (C) 1992-2021, Free Software Foundation, Inc.         *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
+  * for  more details.  You should have received a copy of the GNU General   *
+  * Public License along with GCC; see the file COPYING3.  If not see        *
+  * <http://www.gnu.org/licenses/>.                                          *
+  *                                                                          *
+  * GNAT was originally developed  by the GNAT team at  New York University. *
+  * Extensive contributions were provided by Ada Core Technologies Inc.      *
+  *                                                                          *
+  ****************************************************************************/
+ 
+ /* This file corresponds to the Ada package body Uintp.  It was created
+    manually from the files uintp.ads and uintp.adb.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "vec.h"
+ #include "alias.h"
+ #include "tree.h"
+ #include "inchash.h"
+ #include "fold-const.h"
+ 
+ #include "ada.h"
+ #include "types.h"
+ #include "uintp.h"
+ #include "sinfo.h"
+ #include "ada-tree.h"
+ #include "gigi.h"
+ 
+ /* Universal integers are represented by the Uint type which is an index into
+    the Uints_Ptr table containing Uint_Entry values.  A Uint_Entry contains an
+    index and length for getting the "digits" of the universal integer from the
+    Udigits_Ptr table.
+ 
+    For efficiency, this method is used only for integer values larger than the
+    constant Uint_Bias.  If a Uint is less than this constant, then it contains
+    the integer value itself.
+ 
+    First define a utility function that is build_int_cst for integral types and
+    does a conversion for floating-point types.  */
+ 
+ static tree
+ build_cst_from_int (tree type, HOST_WIDE_INT low)
+ {
+   if (SCALAR_FLOAT_TYPE_P (type))
+     return convert (type, build_int_cst (gnat_type_for_size (32, 0), low));
+   else
+     return build_int_cst (type, low);
+ }
+ 
+ /* Similar to UI_To_Int, but return a GCC INTEGER_CST or REAL_CST node,
+    depending on whether TYPE is an integral or real type.  Overflow is tested
+    by the constant-folding used to build the node.  TYPE is the GCC type of
+    the resulting node.  */
+ 
+ tree
+ UI_To_gnu (Uint Input, tree type)
+ {
+   /* We might have a TYPE with biased representation and be passed an unbiased
+      value that doesn't fit.  We always use an unbiased type to be able to hold
+      any such possible value for intermediate computations and then rely on a
+      conversion back to TYPE to perform the bias adjustment when need be.  */
+   tree comp_type
+     = TREE_CODE (type) == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (type)
+       ? get_base_type (type) : type;
+   tree gnu_ret;
+ 
+   if (Input <= Uint_Direct_Last)
+     gnu_ret = build_cst_from_int (comp_type, Input - Uint_Direct_Bias);
+   else
+     {
+       Int Idx = (*Uints_Ptr)[Input - Uint_Table_Start].Loc;
+       Pos Length = (*Uints_Ptr)[Input - Uint_Table_Start].Length;
+       Int First = (*Udigits_Ptr)[Idx];
+       tree gnu_base;
+ 
+       gcc_assert (Length > 0);
+ 
+       /* The computations we perform below always require a type at least as
+ 	 large as an integer not to overflow.  FP types are always fine, but
+ 	 INTEGER or ENUMERAL types we are handed may be too short.  We use a
+ 	 base integer type node for the computations in this case and will
+ 	 convert the final result back to the incoming type later on.  */
+       if (!SCALAR_FLOAT_TYPE_P (comp_type) && TYPE_PRECISION (comp_type) < 32)
+ 	comp_type = gnat_type_for_size (32, 0);
+ 
+       gnu_base = build_cst_from_int (comp_type, Base);
+ 
+       gnu_ret = build_cst_from_int (comp_type, First);
+       if (First < 0)
+ 	for (Idx++, Length--; Length; Idx++, Length--)
+ 	  gnu_ret = fold_build2 (MINUS_EXPR, comp_type,
+ 				 fold_build2 (MULT_EXPR, comp_type,
+ 					      gnu_ret, gnu_base),
+ 				 build_cst_from_int (comp_type,
+ 						     (*Udigits_Ptr)[Idx]));
+       else
+ 	for (Idx++, Length--; Length; Idx++, Length--)
+ 	  gnu_ret = fold_build2 (PLUS_EXPR, comp_type,
+ 				 fold_build2 (MULT_EXPR, comp_type,
+ 					      gnu_ret, gnu_base),
+ 				 build_cst_from_int (comp_type,
+ 						     (*Udigits_Ptr)[Idx]));
+     }
+ 
+   gnu_ret = convert (type, gnu_ret);
+ 
+   /* We don't need any NOP_EXPR or NON_LVALUE_EXPR on GNU_RET.  */
+   while ((TREE_CODE (gnu_ret) == NOP_EXPR
+ 	  || TREE_CODE (gnu_ret) == NON_LVALUE_EXPR)
+ 	 && TREE_TYPE (TREE_OPERAND (gnu_ret, 0)) == TREE_TYPE (gnu_ret))
+     gnu_ret = TREE_OPERAND (gnu_ret, 0);
+ 
+   return gnu_ret;
+ }
+ 
+ /* Similar to UI_From_Int, but take a GCC INTEGER_CST.  We use UI_From_Int
+    when possible, i.e. for a 32-bit signed value, to take advantage of its
+    built-in caching mechanism.  For values of larger magnitude, we compute
+    digits into a vector and call Vector_To_Uint.  */
+ 
+ Uint
+ UI_From_gnu (tree Input)
+ {
+   tree gnu_type = TREE_TYPE (Input), gnu_base, gnu_temp;
+   /* UI_Base is defined so that 5 Uint digits is sufficient to hold the
+      largest possible signed 64-bit value.  */
+   const int Max_For_Dint = 5;
+   int v[Max_For_Dint];
+   Vector_Template temp;
+   Int_Vector vec;
+ 
+ #if HOST_BITS_PER_WIDE_INT < 64
+ #error unsupported HOST_BITS_PER_WIDE_INT setting
+ #endif
+ 
+   /* On 64-bit hosts, tree_fits_shwi_p tells whether the input fits in
+      a signed 64-bit integer.  Then a truncation tells whether it fits
+      in a signed 32-bit integer.  */
+   if (tree_fits_shwi_p (Input))
+     {
+       HOST_WIDE_INT hw_input = tree_to_shwi (Input);
+       if (hw_input == (int) hw_input)
+ 	return UI_From_Int (hw_input);
+     }
+   else
+     return No_Uint;
+ 
+   gnu_base = build_int_cst (gnu_type, UI_Base);
+   gnu_temp = Input;
+ 
+   for (int i = Max_For_Dint - 1; i >= 0; i--)
+     {
+       v[i] = tree_to_shwi (fold_build1 (ABS_EXPR, gnu_type,
+ 					fold_build2 (TRUNC_MOD_EXPR, gnu_type,
+ 						     gnu_temp, gnu_base)));
+       gnu_temp = fold_build2 (TRUNC_DIV_EXPR, gnu_type, gnu_temp, gnu_base);
+     }
+ 
+   temp.Low_Bound = 1;
+   temp.High_Bound = Max_For_Dint;
+   vec.Bounds = &temp;
+   vec.Array = v;
+   return Vector_To_Uint (vec, tree_int_cst_sgn (Input) < 0);
+ }
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/decl.c gcc-12.1.0/gcc/ada/gcc-interface/decl.c
*** gcc-11.3.0/gcc/ada/gcc-interface/decl.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/decl.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10492 ****
- /****************************************************************************
-  *                                                                          *
-  *                         GNAT COMPILER COMPONENTS                         *
-  *                                                                          *
-  *                                 D E C L                                  *
-  *                                                                          *
-  *                          C Implementation File                           *
-  *                                                                          *
-  *          Copyright (C) 1992-2020, Free Software Foundation, Inc.         *
-  *                                                                          *
-  * GNAT is free software;  you can  redistribute it  and/or modify it under *
-  * terms of the  GNU General Public License as published  by the Free Soft- *
-  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
-  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
-  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
-  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
-  * for  more details.  You should have received a copy of the GNU General   *
-  * Public License along with GCC; see the file COPYING3.  If not see        *
-  * <http://www.gnu.org/licenses/>.                                          *
-  *                                                                          *
-  * GNAT was originally developed  by the GNAT team at  New York University. *
-  * Extensive contributions were provided by Ada Core Technologies Inc.      *
-  *                                                                          *
-  ****************************************************************************/
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "target.h"
- #include "tree.h"
- #include "stringpool.h"
- #include "diagnostic-core.h"
- #include "alias.h"
- #include "fold-const.h"
- #include "stor-layout.h"
- #include "tree-inline.h"
- #include "demangle.h"
- 
- #include "ada.h"
- #include "types.h"
- #include "atree.h"
- #include "elists.h"
- #include "namet.h"
- #include "nlists.h"
- #include "repinfo.h"
- #include "snames.h"
- #include "uintp.h"
- #include "urealp.h"
- #include "fe.h"
- #include "sinfo.h"
- #include "einfo.h"
- #include "ada-tree.h"
- #include "gigi.h"
- 
- /* The "stdcall" convention is really supported on 32-bit x86/Windows only.
-    The following macro is a helper to avoid having to check for a Windows
-    specific attribute throughout this unit.  */
- 
- #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
- #ifdef TARGET_64BIT
- #define Has_Stdcall_Convention(E) \
-   (!TARGET_64BIT && Convention (E) == Convention_Stdcall)
- #else
- #define Has_Stdcall_Convention(E) (Convention (E) == Convention_Stdcall)
- #endif
- #else
- #define Has_Stdcall_Convention(E) 0
- #endif
- 
- #define STDCALL_PREFIX "_imp__"
- 
- /* Stack realignment is necessary for functions with foreign conventions when
-    the ABI doesn't mandate as much as what the compiler assumes - that is, up
-    to PREFERRED_STACK_BOUNDARY.
- 
-    Such realignment can be requested with a dedicated function type attribute
-    on the targets that support it.  We define FOREIGN_FORCE_REALIGN_STACK to
-    characterize the situations where the attribute should be set.  We rely on
-    compiler configuration settings for 'main' to decide.  */
- 
- #ifdef MAIN_STACK_BOUNDARY
- #define FOREIGN_FORCE_REALIGN_STACK \
-   (MAIN_STACK_BOUNDARY < PREFERRED_STACK_BOUNDARY)
- #else
- #define FOREIGN_FORCE_REALIGN_STACK 0
- #endif
- 
- /* The largest TYPE_ARRAY_MAX_SIZE value we set on an array type.
-    It's an artibrary limit (256 MB) above which we consider that
-    the allocation is essentially unbounded.  */
- 
- #define TYPE_ARRAY_SIZE_LIMIT (1 << 28)
- 
- struct incomplete
- {
-   struct incomplete *next;
-   tree old_type;
-   Entity_Id full_type;
- };
- 
- /* These variables are used to defer recursively expanding incomplete types
-    while we are processing a record, an array or a subprogram type.  */
- static int defer_incomplete_level = 0;
- static struct incomplete *defer_incomplete_list;
- 
- /* This variable is used to delay expanding types coming from a limited with
-    clause and completed Taft Amendment types until the end of the spec.  */
- static struct incomplete *defer_limited_with_list;
- 
- typedef struct subst_pair_d {
-   tree discriminant;
-   tree replacement;
- } subst_pair;
- 
- 
- typedef struct variant_desc_d {
-   /* The type of the variant.  */
-   tree type;
- 
-   /* The associated field.  */
-   tree field;
- 
-   /* The value of the qualifier.  */
-   tree qual;
- 
-   /* The type of the variant after transformation.  */
-   tree new_type;
- 
-   /* The auxiliary data.  */
-   tree aux;
- } variant_desc;
- 
- 
- /* A map used to cache the result of annotate_value.  */
- struct value_annotation_hasher : ggc_cache_ptr_hash<tree_int_map>
- {
-   static inline hashval_t
-   hash (tree_int_map *m)
-   {
-     return htab_hash_pointer (m->base.from);
-   }
- 
-   static inline bool
-   equal (tree_int_map *a, tree_int_map *b)
-   {
-     return a->base.from == b->base.from;
-   }
- 
-   static int
-   keep_cache_entry (tree_int_map *&m)
-   {
-     return ggc_marked_p (m->base.from);
-   }
- };
- 
- static GTY ((cache)) hash_table<value_annotation_hasher> *annotate_value_cache;
- 
- /* A map used to associate a dummy type with a list of subprogram entities.  */
- struct GTY((for_user)) tree_entity_vec_map
- {
-   struct tree_map_base base;
-   vec<Entity_Id, va_gc_atomic> *to;
- };
- 
- void
- gt_pch_nx (Entity_Id &)
- {
- }
- 
- void
- gt_pch_nx (Entity_Id *x, gt_pointer_operator op, void *cookie)
- {
-   op (x, cookie);
- }
- 
- struct dummy_type_hasher : ggc_cache_ptr_hash<tree_entity_vec_map>
- {
-   static inline hashval_t
-   hash (tree_entity_vec_map *m)
-   {
-     return htab_hash_pointer (m->base.from);
-   }
- 
-   static inline bool
-   equal (tree_entity_vec_map *a, tree_entity_vec_map *b)
-   {
-     return a->base.from == b->base.from;
-   }
- 
-   static int
-   keep_cache_entry (tree_entity_vec_map *&m)
-   {
-     return ggc_marked_p (m->base.from);
-   }
- };
- 
- static GTY ((cache)) hash_table<dummy_type_hasher> *dummy_to_subprog_map;
- 
- static void prepend_one_attribute (struct attrib **,
- 				   enum attrib_type, tree, tree, Node_Id);
- static void prepend_one_attribute_pragma (struct attrib **, Node_Id);
- static void prepend_attributes (struct attrib **, Entity_Id);
- static tree elaborate_expression (Node_Id, Entity_Id, const char *, bool, bool,
- 				  bool);
- static tree elaborate_expression_1 (tree, Entity_Id, const char *, bool, bool);
- static tree elaborate_expression_2 (tree, Entity_Id, const char *, bool, bool,
- 				    unsigned int);
- static tree elaborate_reference (tree, Entity_Id, bool, tree *);
- static tree gnat_to_gnu_component_type (Entity_Id, bool, bool);
- static tree gnat_to_gnu_subprog_type (Entity_Id, bool, bool, tree *);
- static int adjust_packed (tree, tree, int);
- static tree gnat_to_gnu_field (Entity_Id, tree, int, bool, bool);
- static enum inline_status_t inline_status_for_subprog (Entity_Id);
- static tree gnu_ext_name_for_subprog (Entity_Id, tree);
- static void set_nonaliased_component_on_array_type (tree);
- static void set_reverse_storage_order_on_array_type (tree);
- static bool same_discriminant_p (Entity_Id, Entity_Id);
- static bool array_type_has_nonaliased_component (tree, Entity_Id);
- static bool compile_time_known_address_p (Node_Id);
- static bool cannot_be_superflat (Node_Id);
- static bool constructor_address_p (tree);
- static bool allocatable_size_p (tree, bool);
- static bool initial_value_needs_conversion (tree, tree);
- static tree update_n_elem (tree, tree, tree);
- static int compare_field_bitpos (const PTR, const PTR);
- static bool components_to_record (Node_Id, Entity_Id, tree, tree, int, bool,
- 				  bool, bool, bool, bool, bool, bool, tree,
- 				  tree *);
- static Uint annotate_value (tree);
- static void annotate_rep (Entity_Id, tree);
- static tree build_position_list (tree, bool, tree, tree, unsigned int, tree);
- static vec<subst_pair> build_subst_list (Entity_Id, Entity_Id, bool);
- static vec<variant_desc> build_variant_list (tree, Node_Id, vec<subst_pair>,
- 					     vec<variant_desc>);
- static tree maybe_saturate_size (tree, unsigned int align);
- static tree validate_size (Uint, tree, Entity_Id, enum tree_code, bool, bool,
- 			   const char *, const char *);
- static void set_rm_size (Uint, tree, Entity_Id);
- static unsigned int validate_alignment (Uint, Entity_Id, unsigned int);
- static unsigned int promote_object_alignment (tree, Entity_Id);
- static void check_ok_for_atomic_type (tree, Entity_Id, bool);
- static tree create_field_decl_from (tree, tree, tree, tree, tree,
- 				    vec<subst_pair>);
- static tree create_rep_part (tree, tree, tree);
- static tree get_rep_part (tree);
- static tree create_variant_part_from (tree, vec<variant_desc>, tree,
- 				      tree, vec<subst_pair>, bool);
- static void copy_and_substitute_in_size (tree, tree, vec<subst_pair>);
- static void copy_and_substitute_in_layout (Entity_Id, Entity_Id, tree, tree,
- 					   vec<subst_pair>, bool);
- static tree associate_original_type_to_packed_array (tree, Entity_Id);
- static const char *get_entity_char (Entity_Id);
- 
- /* The relevant constituents of a subprogram binding to a GCC builtin.  Used
-    to pass around calls performing profile compatibility checks.  */
- 
- typedef struct {
-   Entity_Id gnat_entity;  /* The Ada subprogram entity.  */
-   tree ada_fntype;        /* The corresponding GCC type node.  */
-   tree btin_fntype;       /* The GCC builtin function type node.  */
- } intrin_binding_t;
- 
- static bool intrin_profiles_compatible_p (intrin_binding_t *);
- 
- /* Given GNAT_ENTITY, a GNAT defining identifier node, which denotes some Ada
-    entity, return the equivalent GCC tree for that entity (a ..._DECL node)
-    and associate the ..._DECL node with the input GNAT defining identifier.
- 
-    If GNAT_ENTITY is a variable or a constant declaration, GNU_EXPR gives its
-    initial value (in GCC tree form).  This is optional for a variable.  For
-    a renamed entity, GNU_EXPR gives the object being renamed.
- 
-    DEFINITION is true if this call is intended for a definition.  This is used
-    for separate compilation where it is necessary to know whether an external
-    declaration or a definition must be created if the GCC equivalent was not
-    created previously.  */
- 
- tree
- gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
- {
-   /* The construct that declared the entity.  */
-   const Node_Id gnat_decl = Declaration_Node (gnat_entity);
-   /* The object that the entity renames, if any.  */
-   const Entity_Id gnat_renamed_obj = Renamed_Object (gnat_entity);
-   /* The kind of the entity.  */
-   const Entity_Kind kind = Ekind (gnat_entity);
-   /* True if this is a type.  */
-   const bool is_type = IN (kind, Type_Kind);
-   /* True if this is an artificial entity.  */
-   const bool artificial_p = !Comes_From_Source (gnat_entity);
-   /* True if debug info is requested for this entity.  */
-   const bool debug_info_p = Needs_Debug_Info (gnat_entity);
-   /* True if this entity is to be considered as imported.  */
-   const bool imported_p
-     = (Is_Imported (gnat_entity) && No (Address_Clause (gnat_entity)));
-   /* True if this entity has a foreign convention.  */
-   const bool foreign = Has_Foreign_Convention (gnat_entity);
-   /* For a type, contains the equivalent GNAT node to be used in gigi.  */
-   Entity_Id gnat_equiv_type = Empty;
-   /* For a type, contains the GNAT node to be used for back-annotation.  */
-   Entity_Id gnat_annotate_type = Empty;
-   /* Temporary used to walk the GNAT tree.  */
-   Entity_Id gnat_temp;
-   /* Contains the GCC DECL node which is equivalent to the input GNAT node.
-      This node will be associated with the GNAT node by calling at the end
-      of the `switch' statement.  */
-   tree gnu_decl = NULL_TREE;
-   /* Contains the GCC type to be used for the GCC node.  */
-   tree gnu_type = NULL_TREE;
-   /* Contains the GCC size tree to be used for the GCC node.  */
-   tree gnu_size = NULL_TREE;
-   /* Contains the GCC name to be used for the GCC node.  */
-   tree gnu_entity_name;
-   /* True if we have already saved gnu_decl as a GNAT association.  This can
-      also be used to purposely avoid making such an association but this use
-      case ought not to be applied to types because it can break the deferral
-      mechanism implemented for access types.  */
-   bool saved = false;
-   /* True if we incremented defer_incomplete_level.  */
-   bool this_deferred = false;
-   /* True if we incremented force_global.  */
-   bool this_global = false;
-   /* True if we should check to see if elaborated during processing.  */
-   bool maybe_present = false;
-   /* True if we made GNU_DECL and its type here.  */
-   bool this_made_decl = false;
-   /* Size and alignment of the GCC node, if meaningful.  */
-   unsigned int esize = 0, align = 0;
-   /* Contains the list of attributes directly attached to the entity.  */
-   struct attrib *attr_list = NULL;
- 
-   /* Since a use of an itype is a definition, process it as such if it is in
-      the main unit, except for E_Access_Subtype because it's actually a use
-      of its base type, see below.  */
-   if (!definition
-       && is_type
-       && Is_Itype (gnat_entity)
-       && Ekind (gnat_entity) != E_Access_Subtype
-       && !present_gnu_tree (gnat_entity)
-       && In_Extended_Main_Code_Unit (gnat_entity))
-     {
-       /* Ensure that we are in a subprogram mentioned in the Scope chain of
- 	 this entity, our current scope is global, or we encountered a task
- 	 or entry (where we can't currently accurately check scoping).  */
-       if (!current_function_decl
- 	  || DECL_ELABORATION_PROC_P (current_function_decl))
- 	{
- 	  process_type (gnat_entity);
- 	  return get_gnu_tree (gnat_entity);
- 	}
- 
-       for (gnat_temp = Scope (gnat_entity);
- 	   Present (gnat_temp);
- 	   gnat_temp = Scope (gnat_temp))
- 	{
- 	  if (Is_Type (gnat_temp))
- 	    gnat_temp = Underlying_Type (gnat_temp);
- 
- 	  if (Ekind (gnat_temp) == E_Subprogram_Body)
- 	    gnat_temp
- 	      = Corresponding_Spec (Parent (Declaration_Node (gnat_temp)));
- 
- 	  if (Is_Subprogram (gnat_temp)
- 	      && Present (Protected_Body_Subprogram (gnat_temp)))
- 	    gnat_temp = Protected_Body_Subprogram (gnat_temp);
- 
- 	  if (Ekind (gnat_temp) == E_Entry
- 	      || Ekind (gnat_temp) == E_Entry_Family
- 	      || Ekind (gnat_temp) == E_Task_Type
- 	      || (Is_Subprogram (gnat_temp)
- 		  && present_gnu_tree (gnat_temp)
- 		  && (current_function_decl
- 		      == gnat_to_gnu_entity (gnat_temp, NULL_TREE, false))))
- 	    {
- 	      process_type (gnat_entity);
- 	      return get_gnu_tree (gnat_entity);
- 	    }
- 	}
- 
-       /* This abort means the itype has an incorrect scope, i.e. that its
- 	 scope does not correspond to the subprogram it is first used in.  */
-       gcc_unreachable ();
-     }
- 
-   /* If we've already processed this entity, return what we got last time.
-      If we are defining the node, we should not have already processed it.
-      In that case, we will abort below when we try to save a new GCC tree
-      for this object.  We also need to handle the case of getting a dummy
-      type when a Full_View exists but be careful so as not to trigger its
-      premature elaboration.  Likewise for a cloned subtype without its own
-      freeze node, which typically happens when a generic gets instantiated
-      on an incomplete or private type.  */
-   if ((!definition || (is_type && imported_p))
-       && present_gnu_tree (gnat_entity))
-     {
-       gnu_decl = get_gnu_tree (gnat_entity);
- 
-       if (TREE_CODE (gnu_decl) == TYPE_DECL
- 	  && TYPE_IS_DUMMY_P (TREE_TYPE (gnu_decl))
- 	  && IN (kind, Incomplete_Or_Private_Kind)
- 	  && Present (Full_View (gnat_entity))
- 	  && (present_gnu_tree (Full_View (gnat_entity))
- 	      || No (Freeze_Node (Full_View (gnat_entity)))))
- 	{
- 	  gnu_decl
- 	    = gnat_to_gnu_entity (Full_View (gnat_entity), NULL_TREE,
- 				  false);
- 	  save_gnu_tree (gnat_entity, NULL_TREE, false);
- 	  save_gnu_tree (gnat_entity, gnu_decl, false);
- 	}
- 
-       if (TREE_CODE (gnu_decl) == TYPE_DECL
- 	  && TYPE_IS_DUMMY_P (TREE_TYPE (gnu_decl))
- 	  && Ekind (gnat_entity) == E_Record_Subtype
- 	  && No (Freeze_Node (gnat_entity))
- 	  && Present (Cloned_Subtype (gnat_entity))
- 	  && (present_gnu_tree (Cloned_Subtype (gnat_entity))
- 	      || No (Freeze_Node (Cloned_Subtype (gnat_entity)))))
- 	{
- 	  gnu_decl
- 	    = gnat_to_gnu_entity (Cloned_Subtype (gnat_entity), NULL_TREE,
- 				  false);
- 	  save_gnu_tree (gnat_entity, NULL_TREE, false);
- 	  save_gnu_tree (gnat_entity, gnu_decl, false);
- 	}
- 
-       return gnu_decl;
-     }
- 
-   /* If this is a numeric or enumeral type, or an access type, a nonzero Esize
-      must be specified unless it was specified by the programmer.  Exceptions
-      are for access-to-protected-subprogram types and all access subtypes, as
-      another GNAT type is used to lay out the GCC type for them.  */
-   gcc_assert (!is_type
- 	      || Known_Esize (gnat_entity)
- 	      || Has_Size_Clause (gnat_entity)
- 	      || (!IN (kind, Numeric_Kind)
- 		  && !IN (kind, Enumeration_Kind)
- 		  && (!IN (kind, Access_Kind)
- 		      || kind == E_Access_Protected_Subprogram_Type
- 		      || kind == E_Anonymous_Access_Protected_Subprogram_Type
- 		      || kind == E_Access_Subtype
- 		      || type_annotate_only)));
- 
-   /* The RM size must be specified for all discrete and fixed-point types.  */
-   gcc_assert (!(IN (kind, Discrete_Or_Fixed_Point_Kind)
- 		&& Unknown_RM_Size (gnat_entity)));
- 
-   /* If we get here, it means we have not yet done anything with this entity.
-      If we are not defining it, it must be a type or an entity that is defined
-      elsewhere or externally, otherwise we should have defined it already.
- 
-      In other words, the failure of this assertion typically arises when a
-      reference to an entity (type or object) is made before its declaration,
-      either directly or by means of a freeze node which is incorrectly placed.
-      This can also happen for an entity referenced out of context, for example
-      a parameter outside of the subprogram where it is declared.  GNAT_ENTITY
-      is the N_Defining_Identifier of the entity, the problematic N_Identifier
-      being the argument passed to Identifier_to_gnu in the parent frame.
- 
-      One exception is for an entity, typically an inherited operation, which is
-      a local alias for the parent's operation.  It is neither defined, since it
-      is an inherited operation, nor public, since it is declared in the current
-      compilation unit, so we test Is_Public on the Alias entity instead.  */
-   gcc_assert (definition
- 	      || is_type
- 	      || kind == E_Discriminant
- 	      || kind == E_Component
- 	      || kind == E_Label
- 	      || (kind == E_Constant && Present (Full_View (gnat_entity)))
- 	      || Is_Public (gnat_entity)
- 	      || (Present (Alias (gnat_entity))
- 		  && Is_Public (Alias (gnat_entity)))
- 	      || type_annotate_only);
- 
-   /* Get the name of the entity and set up the line number and filename of
-      the original definition for use in any decl we make.  Make sure we do
-      not inherit another source location.  */
-   gnu_entity_name = get_entity_name (gnat_entity);
-   if (!renaming_from_instantiation_p (gnat_entity))
-     Sloc_to_locus (Sloc (gnat_entity), &input_location);
- 
-   /* For cases when we are not defining (i.e., we are referencing from
-      another compilation unit) public entities, show we are at global level
-      for the purpose of computing scopes.  Don't do this for components or
-      discriminants since the relevant test is whether or not the record is
-      being defined.  */
-   if (!definition
-       && kind != E_Component
-       && kind != E_Discriminant
-       && Is_Public (gnat_entity)
-       && !Is_Statically_Allocated (gnat_entity))
-     force_global++, this_global = true;
- 
-   /* Handle any attributes directly attached to the entity.  */
-   if (Has_Gigi_Rep_Item (gnat_entity))
-     prepend_attributes (&attr_list, gnat_entity);
- 
-   /* Do some common processing for types.  */
-   if (is_type)
-     {
-       /* Compute the equivalent type to be used in gigi.  */
-       gnat_equiv_type = Gigi_Equivalent_Type (gnat_entity);
- 
-       /* Machine_Attributes on types are expected to be propagated to
- 	 subtypes.  The corresponding Gigi_Rep_Items are only attached
- 	 to the first subtype though, so we handle the propagation here.  */
-       if (Base_Type (gnat_entity) != gnat_entity
- 	  && !Is_First_Subtype (gnat_entity)
- 	  && Has_Gigi_Rep_Item (First_Subtype (Base_Type (gnat_entity))))
- 	prepend_attributes (&attr_list,
- 			    First_Subtype (Base_Type (gnat_entity)));
- 
-       /* Compute a default value for the size of an elementary type.  */
-       if (Known_Esize (gnat_entity) && Is_Elementary_Type (gnat_entity))
- 	{
- 	  unsigned int max_esize;
- 
- 	  gcc_assert (UI_Is_In_Int_Range (Esize (gnat_entity)));
- 	  esize = UI_To_Int (Esize (gnat_entity));
- 
- 	  if (IN (kind, Float_Kind))
- 	    max_esize = fp_prec_to_size (LONG_DOUBLE_TYPE_SIZE);
- 	  else if (IN (kind, Access_Kind))
- 	    max_esize = POINTER_SIZE * 2;
- 	  else
- 	    max_esize = Enable_128bit_Types ? 128 : LONG_LONG_TYPE_SIZE;
- 
- 	  if (esize > max_esize)
- 	   esize = max_esize;
- 	}
-     }
- 
-   switch (kind)
-     {
-     case E_Component:
-     case E_Discriminant:
-       {
- 	/* The GNAT record where the component was defined.  */
- 	Entity_Id gnat_record = Underlying_Type (Scope (gnat_entity));
- 
- 	/* If the entity is a discriminant of an extended tagged type used to
- 	   rename a discriminant of the parent type, return the latter.  */
- 	if (kind == E_Discriminant
- 	    && Present (Corresponding_Discriminant (gnat_entity))
- 	    && Is_Tagged_Type (gnat_record))
- 	  {
- 	    gnu_decl
- 	      = gnat_to_gnu_entity (Corresponding_Discriminant (gnat_entity),
- 				    gnu_expr, definition);
- 	    saved = true;
- 	    break;
- 	  }
- 
- 	/* If the entity is an inherited component (in the case of extended
- 	   tagged record types), just return the original entity, which must
- 	   be a FIELD_DECL.  Likewise for discriminants.  If the entity is a
- 	   non-girder discriminant (in the case of derived untagged record
- 	   types), return the stored discriminant it renames.  */
- 	if (Present (Original_Record_Component (gnat_entity))
- 	    && Original_Record_Component (gnat_entity) != gnat_entity)
- 	  {
- 	    gnu_decl
- 	      = gnat_to_gnu_entity (Original_Record_Component (gnat_entity),
- 				    gnu_expr, definition);
- 	    /* GNU_DECL contains a PLACEHOLDER_EXPR for discriminants.  */
- 	    if (kind == E_Discriminant)
- 	      saved = true;
- 	    break;
- 	  }
- 
- 	/* Otherwise, if we are not defining this and we have no GCC type
- 	   for the containing record, make one for it.  Then we should
- 	   have made our own equivalent.  */
- 	if (!definition && !present_gnu_tree (gnat_record))
- 	  {
- 	    /* ??? If this is in a record whose scope is a protected
- 	       type and we have an Original_Record_Component, use it.
- 	       This is a workaround for major problems in protected type
- 	       handling.  */
- 	    Entity_Id Scop = Scope (Scope (gnat_entity));
- 	    if (Is_Protected_Type (Underlying_Type (Scop))
- 		&& Present (Original_Record_Component (gnat_entity)))
- 	      {
- 		gnu_decl
- 		  = gnat_to_gnu_entity (Original_Record_Component
- 					(gnat_entity),
- 					gnu_expr, false);
- 	      }
- 	    else
- 	      {
- 		gnat_to_gnu_entity (Scope (gnat_entity), NULL_TREE, false);
- 		gnu_decl = get_gnu_tree (gnat_entity);
- 	      }
- 
- 	    saved = true;
- 	    break;
- 	  }
- 
- 	/* Here we have no GCC type and this is a reference rather than a
- 	   definition.  This should never happen.  Most likely the cause is
- 	   reference before declaration in the GNAT tree for gnat_entity.  */
- 	gcc_unreachable ();
-       }
- 
-     case E_Named_Integer:
-     case E_Named_Real:
-       {
- 	tree gnu_ext_name = NULL_TREE;
- 
- 	if (Is_Public (gnat_entity))
- 	  gnu_ext_name = create_concat_name (gnat_entity, NULL);
- 
- 	/* All references are supposed to be folded in the front-end.  */
- 	gcc_assert (definition && gnu_expr);
- 
- 	gnu_type = gnat_to_gnu_type (Etype (gnat_entity));
- 	gnu_expr = convert (gnu_type, gnu_expr);
- 
- 	/* Build a CONST_DECL for debugging purposes exclusively.  */
- 	gnu_decl
- 	  = create_var_decl (gnu_entity_name, gnu_ext_name, gnu_type,
- 			     gnu_expr, true, Is_Public (gnat_entity),
- 			     false, false, false, artificial_p,
- 			     debug_info_p, NULL, gnat_entity, true);
-       }
-       break;
- 
-     case E_Constant:
-       /* Ignore constant definitions already marked with the error node.  See
- 	 the N_Object_Declaration case of gnat_to_gnu for the rationale.  */
-       if (definition
- 	  && present_gnu_tree (gnat_entity)
- 	  && get_gnu_tree (gnat_entity) == error_mark_node)
- 	{
- 	  maybe_present = true;
- 	  break;
- 	}
- 
-       /* Ignore deferred constant definitions without address clause since
- 	 they are processed fully in the front-end.  If No_Initialization
- 	 is set, this is not a deferred constant but a constant whose value
- 	 is built manually.  And constants that are renamings are handled
- 	 like variables.  */
-       if (definition
- 	  && !gnu_expr
- 	  && No (Address_Clause (gnat_entity))
- 	  && !No_Initialization (gnat_decl)
- 	  && No (gnat_renamed_obj))
- 	{
- 	  gnu_decl = error_mark_node;
- 	  saved = true;
- 	  break;
- 	}
- 
-       /* If this is a use of a deferred constant without address clause,
- 	 get its full definition.  */
-       if (!definition
- 	  && No (Address_Clause (gnat_entity))
- 	  && Present (Full_View (gnat_entity)))
- 	{
- 	  gnu_decl
- 	    = gnat_to_gnu_entity (Full_View (gnat_entity), gnu_expr, false);
- 	  saved = true;
- 	  break;
- 	}
- 
-       /* If we have a constant that we are not defining, get the expression it
- 	 was defined to represent.  This is necessary to avoid generating dumb
- 	 elaboration code in simple cases, and we may throw it away later if it
- 	 is not a constant.  But do not do it for dispatch tables because they
- 	 are only referenced indirectly and we need to have a consistent view
- 	 of the exported and of the imported declarations of the tables from
- 	 external units for them to be properly merged in LTO mode.  Moreover
- 	 simply do not retrieve the expression if it is an allocator because
- 	 the designated type might still be dummy at this point.  Note that we
- 	 invoke gnat_to_gnu_external and not gnat_to_gnu because the expression
- 	 may contain N_Expression_With_Actions nodes and thus declarations of
- 	 objects from other units that we need to discard.  Note also that we
- 	 need to do it even if we are only annotating types, so as to be able
- 	 to validate representation clauses using constants.  */
-       if (!definition
- 	  && !No_Initialization (gnat_decl)
- 	  && !Is_Dispatch_Table_Entity (gnat_entity)
- 	  && Present (gnat_temp = Expression (gnat_decl))
- 	  && Nkind (gnat_temp) != N_Allocator
- 	  && (Is_Elementary_Type (Etype (gnat_entity)) || !type_annotate_only))
- 	gnu_expr = gnat_to_gnu_external (gnat_temp);
- 
-       /* ... fall through ... */
- 
-     case E_Exception:
-     case E_Loop_Parameter:
-     case E_Out_Parameter:
-     case E_Variable:
-       {
- 	const Entity_Id gnat_type = Etype (gnat_entity);
- 	/* Always create a variable for volatile objects and variables seen
- 	   constant but with a Linker_Section pragma.  */
- 	bool const_flag
- 	  = ((kind == E_Constant || kind == E_Variable)
- 	     && Is_True_Constant (gnat_entity)
- 	     && !(kind == E_Variable
- 		  && Present (Linker_Section_Pragma (gnat_entity)))
- 	     && !Treat_As_Volatile (gnat_entity)
- 	     && (((Nkind (gnat_decl) == N_Object_Declaration)
- 		  && Present (Expression (gnat_decl)))
- 		 || Present (gnat_renamed_obj)
- 		 || imported_p));
- 	bool inner_const_flag = const_flag;
- 	bool static_flag = Is_Statically_Allocated (gnat_entity);
- 	/* We implement RM 13.3(19) for exported and imported (non-constant)
- 	   objects by making them volatile.  */
- 	bool volatile_flag
- 	  = (Treat_As_Volatile (gnat_entity)
- 	     || (!const_flag && (Is_Exported (gnat_entity) || imported_p)));
- 	bool mutable_p = false;
- 	bool used_by_ref = false;
- 	tree gnu_ext_name = NULL_TREE;
- 	tree gnu_ada_size = NULL_TREE;
- 
- 	/* We need to translate the renamed object even though we are only
- 	   referencing the renaming.  But it may contain a call for which
- 	   we'll generate a temporary to hold the return value and which
- 	   is part of the definition of the renaming, so discard it.  */
- 	if (Present (gnat_renamed_obj) && !definition)
- 	  {
- 	    if (kind == E_Exception)
- 	      gnu_expr = gnat_to_gnu_entity (Renamed_Entity (gnat_entity),
- 					     NULL_TREE, false);
- 	    else
- 	      gnu_expr = gnat_to_gnu_external (gnat_renamed_obj);
- 	  }
- 
- 	/* Get the type after elaborating the renamed object.  */
- 	if (foreign && Is_Descendant_Of_Address (Underlying_Type (gnat_type)))
- 	  gnu_type = ptr_type_node;
- 	else
- 	  {
- 	    gnu_type = gnat_to_gnu_type (gnat_type);
- 
- 	    /* If this is a standard exception definition, use the standard
- 	       exception type.  This is necessary to make sure that imported
- 	       and exported views of exceptions are merged in LTO mode.  */
- 	    if (TREE_CODE (TYPE_NAME (gnu_type)) == TYPE_DECL
- 		&& DECL_NAME (TYPE_NAME (gnu_type)) == exception_data_name_id)
- 	      gnu_type = except_type_node;
- 	  }
- 
- 	/* For a debug renaming declaration, build a debug-only entity.  */
- 	if (Present (Debug_Renaming_Link (gnat_entity)))
- 	  {
- 	    /* Force a non-null value to make sure the symbol is retained.  */
- 	    tree value = build1 (INDIRECT_REF, gnu_type,
- 				 build1 (NOP_EXPR,
- 					 build_pointer_type (gnu_type),
- 					 integer_minus_one_node));
- 	    gnu_decl = build_decl (input_location,
- 				   VAR_DECL, gnu_entity_name, gnu_type);
- 	    SET_DECL_VALUE_EXPR (gnu_decl, value);
- 	    DECL_HAS_VALUE_EXPR_P (gnu_decl) = 1;
- 	    TREE_STATIC (gnu_decl) = global_bindings_p ();
- 	    gnat_pushdecl (gnu_decl, gnat_entity);
- 	    break;
- 	  }
- 
- 	/* If this is a loop variable, its type should be the base type.
- 	   This is because the code for processing a loop determines whether
- 	   a normal loop end test can be done by comparing the bounds of the
- 	   loop against those of the base type, which is presumed to be the
- 	   size used for computation.  But this is not correct when the size
- 	   of the subtype is smaller than the type.  */
- 	if (kind == E_Loop_Parameter)
- 	  gnu_type = get_base_type (gnu_type);
- 
- 	/* Reject non-renamed objects whose type is an unconstrained array or
- 	   any object whose type is a dummy type or void.  */
- 	if ((TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE
- 	     && No (gnat_renamed_obj))
- 	    || TYPE_IS_DUMMY_P (gnu_type)
- 	    || TREE_CODE (gnu_type) == VOID_TYPE)
- 	  {
- 	    gcc_assert (type_annotate_only);
- 	    if (this_global)
- 	      force_global--;
- 	    return error_mark_node;
- 	  }
- 
- 	/* If an alignment is specified, use it if valid.  Note that exceptions
- 	   are objects but don't have an alignment and there is also no point in
- 	   setting it for an address clause, since the final type of the object
- 	   will be a reference type.  */
- 	if (Known_Alignment (gnat_entity)
- 	    && kind != E_Exception
- 	    && No (Address_Clause (gnat_entity)))
- 	  align = validate_alignment (Alignment (gnat_entity), gnat_entity,
- 				      TYPE_ALIGN (gnu_type));
- 
- 	/* Likewise, if a size is specified, use it if valid.  */
- 	if (Known_Esize (gnat_entity))
- 	  gnu_size
- 	    = validate_size (Esize (gnat_entity), gnu_type, gnat_entity,
- 			     VAR_DECL, false, Has_Size_Clause (gnat_entity),
- 			     NULL, NULL);
- 	if (gnu_size)
- 	  {
- 	    gnu_type
- 	      = make_type_from_size (gnu_type, gnu_size,
- 				     Has_Biased_Representation (gnat_entity));
- 
- 	    if (operand_equal_p (TYPE_SIZE (gnu_type), gnu_size, 0))
- 	      gnu_size = NULL_TREE;
- 	  }
- 
- 	/* If this object has self-referential size, it must be a record with
- 	   a default discriminant.  We are supposed to allocate an object of
- 	   the maximum size in this case, unless it is a constant with an
- 	   initializing expression, in which case we can get the size from
- 	   that.  Note that the resulting size may still be a variable, so
- 	   this may end up with an indirect allocation.  */
- 	if (No (gnat_renamed_obj)
- 	    && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
- 	  {
- 	    if (gnu_expr && kind == E_Constant)
- 	      {
- 		gnu_size = TYPE_SIZE (TREE_TYPE (gnu_expr));
- 		gnu_ada_size = TYPE_ADA_SIZE (TREE_TYPE (gnu_expr));
- 		if (CONTAINS_PLACEHOLDER_P (gnu_size))
- 		  {
- 		    /* If the initializing expression is itself a constant,
- 		       despite having a nominal type with self-referential
- 		       size, we can get the size directly from it.  */
- 		    if (TREE_CODE (gnu_expr) == COMPONENT_REF
- 			&& TYPE_IS_PADDING_P
- 			   (TREE_TYPE (TREE_OPERAND (gnu_expr, 0)))
- 			&& TREE_CODE (TREE_OPERAND (gnu_expr, 0)) == VAR_DECL
- 			&& (TREE_READONLY (TREE_OPERAND (gnu_expr, 0))
- 			    || DECL_READONLY_ONCE_ELAB
- 			       (TREE_OPERAND (gnu_expr, 0))))
- 		      {
- 			gnu_size = DECL_SIZE (TREE_OPERAND (gnu_expr, 0));
- 			gnu_ada_size = gnu_size;
- 		      }
- 		    else
- 		      {
- 			gnu_size
- 			  = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_size,
- 							    gnu_expr);
- 			gnu_ada_size
- 			  = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_ada_size,
- 							    gnu_expr);
- 		      }
- 		  }
- 	      }
- 	    /* We may have no GNU_EXPR because No_Initialization is
- 	       set even though there's an Expression.  */
- 	    else if (kind == E_Constant
- 		     && Nkind (gnat_decl) == N_Object_Declaration
- 		     && Present (Expression (gnat_decl)))
- 	      {
- 		tree gnu_expr_type
- 		  = gnat_to_gnu_type (Etype (Expression (gnat_decl)));
- 		gnu_size = TYPE_SIZE (gnu_expr_type);
- 		gnu_ada_size = TYPE_ADA_SIZE (gnu_expr_type);
- 	      }
- 	    else
- 	      {
- 		gnu_size = max_size (TYPE_SIZE (gnu_type), true);
- 		/* We can be called on unconstrained arrays in this mode.  */
- 		if (!type_annotate_only)
- 		  gnu_ada_size = max_size (TYPE_ADA_SIZE (gnu_type), true);
- 		mutable_p = true;
- 	      }
- 
- 	    /* If the size isn't constant and we are at global level, call
- 	       elaborate_expression_1 to make a variable for it rather than
- 	       calculating it each time.  */
- 	    if (!TREE_CONSTANT (gnu_size) && global_bindings_p ())
- 	      gnu_size = elaborate_expression_1 (gnu_size, gnat_entity,
- 						 "SIZE", definition, false);
- 	  }
- 
- 	/* If the size is zero byte, make it one byte since some linkers have
- 	   troubles with zero-sized objects.  If the object will have a
- 	   template, that will make it nonzero so don't bother.  Also avoid
- 	   doing that for an object renaming or an object with an address
- 	   clause, as we would lose useful information on the view size
- 	   (e.g. for null array slices) and we are not allocating the object
- 	   here anyway.  */
- 	if (((gnu_size
- 	      && integer_zerop (gnu_size)
- 	      && !TREE_OVERFLOW (gnu_size))
- 	     || (TYPE_SIZE (gnu_type)
- 		 && integer_zerop (TYPE_SIZE (gnu_type))
- 		 && !TREE_OVERFLOW (TYPE_SIZE (gnu_type))))
- 	    && !Is_Constr_Subt_For_UN_Aliased (gnat_type)
- 	    && No (gnat_renamed_obj)
- 	    && No (Address_Clause (gnat_entity)))
- 	  gnu_size = bitsize_unit_node;
- 
- 	/* If this is an object with no specified size and alignment, and
- 	   if either it is full access or we are not optimizing alignment for
- 	   space and it is composite and not an exception, an Out parameter
- 	   or a reference to another object, and the size of its type is a
- 	   constant, set the alignment to the smallest one which is not
- 	   smaller than the size, with an appropriate cap.  */
- 	if (!gnu_size && align == 0
- 	    && (Is_Full_Access (gnat_entity)
- 		|| (!Optimize_Alignment_Space (gnat_entity)
- 		    && kind != E_Exception
- 		    && kind != E_Out_Parameter
- 		    && Is_Composite_Type (gnat_type)
- 		    && !Is_Constr_Subt_For_UN_Aliased (gnat_type)
- 		    && !Is_Exported (gnat_entity)
- 		    && !imported_p
- 		    && No (gnat_renamed_obj)
- 		    && No (Address_Clause (gnat_entity))))
- 	    && TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST)
- 	  align = promote_object_alignment (gnu_type, gnat_entity);
- 
- 	/* If the object is set to have atomic components, find the component
- 	   type and validate it.
- 
- 	   ??? Note that we ignore Has_Volatile_Components on objects; it's
- 	   not at all clear what to do in that case.  */
- 	if (Has_Atomic_Components (gnat_entity))
- 	  {
- 	    tree gnu_inner = (TREE_CODE (gnu_type) == ARRAY_TYPE
- 			      ? TREE_TYPE (gnu_type) : gnu_type);
- 
- 	    while (TREE_CODE (gnu_inner) == ARRAY_TYPE
- 		   && TYPE_MULTI_ARRAY_P (gnu_inner))
- 	      gnu_inner = TREE_TYPE (gnu_inner);
- 
- 	    check_ok_for_atomic_type (gnu_inner, gnat_entity, true);
- 	  }
- 
- 	/* If this is an aliased object with an unconstrained array nominal
- 	   subtype, make a type that includes the template.  We will either
- 	   allocate or create a variable of that type, see below.  */
- 	if (Is_Constr_Subt_For_UN_Aliased (gnat_type)
- 	    && Is_Array_Type (Underlying_Type (gnat_type))
- 	    && !type_annotate_only)
- 	  {
- 	    tree gnu_array = gnat_to_gnu_type (Base_Type (gnat_type));
- 	    gnu_type
- 	      = build_unc_object_type_from_ptr (TREE_TYPE (gnu_array),
- 						gnu_type,
- 						concat_name (gnu_entity_name,
- 							     "UNC"),
- 						debug_info_p);
- 	  }
- 
- 	/* ??? If this is an object of CW type initialized to a value, try to
- 	   ensure that the object is sufficient aligned for this value, but
- 	   without pessimizing the allocation.  This is a kludge necessary
- 	   because we don't support dynamic alignment.  */
- 	if (align == 0
- 	    && Ekind (gnat_type) == E_Class_Wide_Subtype
- 	    && No (gnat_renamed_obj)
- 	    && No (Address_Clause (gnat_entity)))
- 	  align = get_target_system_allocator_alignment () * BITS_PER_UNIT;
- 
- #ifdef MINIMUM_ATOMIC_ALIGNMENT
- 	/* If the size is a constant and no alignment is specified, force
- 	   the alignment to be the minimum valid atomic alignment.  The
- 	   restriction on constant size avoids problems with variable-size
- 	   temporaries; if the size is variable, there's no issue with
- 	   atomic access.  Also don't do this for a constant, since it isn't
- 	   necessary and can interfere with constant replacement.  Finally,
- 	   do not do it for Out parameters since that creates an
- 	   size inconsistency with In parameters.  */
- 	if (align == 0
- 	    && MINIMUM_ATOMIC_ALIGNMENT > TYPE_ALIGN (gnu_type)
- 	    && !FLOAT_TYPE_P (gnu_type)
- 	    && !const_flag && No (gnat_renamed_obj)
- 	    && !imported_p && No (Address_Clause (gnat_entity))
- 	    && kind != E_Out_Parameter
- 	    && (gnu_size ? TREE_CODE (gnu_size) == INTEGER_CST
- 		: TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST))
- 	  align = MINIMUM_ATOMIC_ALIGNMENT;
- #endif
- 
- 	/* Do not take into account aliased adjustments or alignment promotions
- 	   to compute the size of the object.  */
- 	tree gnu_object_size = gnu_size ? gnu_size : TYPE_SIZE (gnu_type);
- 
- 	/* If the object is aliased, of a constrained nominal subtype and its
- 	   size might be zero at run time, we force at least the unit size.  */
- 	if (Is_Aliased (gnat_entity)
- 	    && !Is_Constr_Subt_For_UN_Aliased (gnat_type)
- 	    && Is_Array_Type (Underlying_Type (gnat_type))
- 	    && !TREE_CONSTANT (gnu_object_size))
- 	  gnu_size = size_binop (MAX_EXPR, gnu_object_size, bitsize_unit_node);
- 
- 	/* Make a new type with the desired size and alignment, if needed.  */
- 	if (gnu_size || align > 0)
- 	  {
- 	    tree orig_type = gnu_type;
- 
- 	    gnu_type = maybe_pad_type (gnu_type, gnu_size, align, gnat_entity,
- 				       false, definition, true);
- 
- 	    /* If the nominal subtype of the object is unconstrained and its
- 	       size is not fixed, compute the Ada size from the Ada size of
- 	       the subtype and/or the expression; this will make it possible
- 	       for gnat_type_max_size to easily compute a maximum size.  */
- 	    if (gnu_ada_size && gnu_size && !TREE_CONSTANT (gnu_size))
- 	      SET_TYPE_ADA_SIZE (gnu_type, gnu_ada_size);
- 
- 	    /* If a padding record was made, declare it now since it will
- 	       never be declared otherwise.  This is necessary to ensure
- 	       that its subtrees are properly marked.  */
- 	    if (gnu_type != orig_type && !DECL_P (TYPE_NAME (gnu_type)))
- 	      create_type_decl (TYPE_NAME (gnu_type), gnu_type, true,
- 				debug_info_p, gnat_entity);
- 	  }
- 
- 	/* Now check if the type of the object allows atomic access.  */
- 	if (Is_Full_Access (gnat_entity))
- 	  check_ok_for_atomic_type (gnu_type, gnat_entity, false);
- 
- 	/* If this is a renaming, avoid as much as possible to create a new
- 	   object.  However, in some cases, creating it is required because
- 	   renaming can be applied to objects that are not names in Ada.
- 	   This processing needs to be applied to the raw expression so as
- 	   to make it more likely to rename the underlying object.  */
- 	if (Present (gnat_renamed_obj))
- 	  {
- 	    /* If the renamed object had padding, strip off the reference to
- 	       the inner object and reset our type.  */
- 	    if ((TREE_CODE (gnu_expr) == COMPONENT_REF
- 		 && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_expr, 0))))
- 		/* Strip useless conversions around the object.  */
- 		|| gnat_useless_type_conversion (gnu_expr))
- 	      {
- 		gnu_expr = TREE_OPERAND (gnu_expr, 0);
- 		gnu_type = TREE_TYPE (gnu_expr);
- 	      }
- 
- 	    /* Or else, if the renamed object has an unconstrained type with
- 	       default discriminant, use the padded type.  */
- 	    else if (type_is_padding_self_referential (TREE_TYPE (gnu_expr)))
- 	      gnu_type = TREE_TYPE (gnu_expr);
- 
- 	    /* If this is a constant renaming stemming from a function call,
- 	       treat it as a normal object whose initial value is what is being
- 	       renamed.  RM 3.3 says that the result of evaluating a function
- 	       call is a constant object.  Therefore, it can be the inner
- 	       object of a constant renaming and the renaming must be fully
- 	       instantiated, i.e. it cannot be a reference to (part of) an
- 	       existing object.  And treat other rvalues the same way.  */
- 	    tree inner = gnu_expr;
- 	    while (handled_component_p (inner) || CONVERT_EXPR_P (inner))
- 	      inner = TREE_OPERAND (inner, 0);
- 	    /* Expand_Dispatching_Call can prepend a comparison of the tags
- 	       before the call to "=".  */
- 	    if (TREE_CODE (inner) == TRUTH_ANDIF_EXPR
- 		|| TREE_CODE (inner) == COMPOUND_EXPR)
- 	      inner = TREE_OPERAND (inner, 1);
- 	    if ((TREE_CODE (inner) == CALL_EXPR
- 		 && !call_is_atomic_load (inner))
- 		|| TREE_CODE (inner) == CONSTRUCTOR
- 		|| CONSTANT_CLASS_P (inner)
- 		|| COMPARISON_CLASS_P (inner)
- 		|| BINARY_CLASS_P (inner)
- 		|| EXPRESSION_CLASS_P (inner)
- 		/* We need to detect the case where a temporary is created to
- 		   hold the return value, since we cannot safely rename it at
- 		   top level as it lives only in the elaboration routine.  */
- 		|| (TREE_CODE (inner) == VAR_DECL
- 		    && DECL_RETURN_VALUE_P (inner))
- 		/* We also need to detect the case where the front-end creates
- 		   a dangling 'reference to a function call at top level and
- 		   substitutes it in the renaming, for example:
- 
- 		     q__b : boolean renames r__f.e (1);
- 
- 	           can be rewritten into:
- 
- 		     q__R1s : constant q__A2s := r__f'reference;
- 		     [...]
- 		     q__b : boolean renames q__R1s.all.e (1);
- 
- 		   We cannot safely rename the rewritten expression since the
- 		   underlying object lives only in the elaboration routine.  */
- 		|| (TREE_CODE (inner) == INDIRECT_REF
- 		    && (inner
- 			= remove_conversions (TREE_OPERAND (inner, 0), true))
- 		    && TREE_CODE (inner) == VAR_DECL
- 		    && DECL_RETURN_VALUE_P (inner)))
- 	      ;
- 
- 	    /* Otherwise, this is an lvalue being renamed, so it needs to be
- 	       elaborated as a reference and substituted for the entity.  But
- 	       this means that we must evaluate the address of the renaming
- 	       in the definition case to instantiate the SAVE_EXPRs.  */
- 	    else
- 	      {
- 		tree gnu_init = NULL_TREE;
- 
- 		if (type_annotate_only && TREE_CODE (gnu_expr) == ERROR_MARK)
- 		  break;
- 
- 		gnu_expr
- 		  = elaborate_reference (gnu_expr, gnat_entity, definition,
- 					 &gnu_init);
- 
- 		/* No DECL_EXPR might be created so the expression needs to be
- 		   marked manually because it will likely be shared.  */
- 		if (global_bindings_p ())
- 		  MARK_VISITED (gnu_expr);
- 
- 		/* This assertion will fail if the renamed object isn't aligned
- 		   enough as to make it possible to honor the alignment set on
- 		   the renaming.  */
- 		if (align)
- 		  {
- 		    const unsigned int ralign
- 		      = DECL_P (gnu_expr)
- 			? DECL_ALIGN (gnu_expr)
- 			: TYPE_ALIGN (TREE_TYPE (gnu_expr));
- 		    gcc_assert (ralign >= align);
- 		  }
- 
- 		/* The expression might not be a DECL so save it manually.  */
- 		gnu_decl = gnu_expr;
- 		save_gnu_tree (gnat_entity, gnu_decl, true);
- 		saved = true;
- 		annotate_object (gnat_entity, gnu_type, NULL_TREE, false);
- 
- 		/* If this is only a reference to the entity, we are done.  */
- 		if (!definition)
- 		  break;
- 
- 		/* Otherwise, emit the initialization statement, if any.  */
- 		if (gnu_init)
- 		  add_stmt (gnu_init);
- 
- 		/* If it needs to be materialized for debugging purposes, build
- 		   the entity as indirect reference to the renamed object.  */
- 		if (Materialize_Entity (gnat_entity))
- 		  {
- 		    gnu_type = build_reference_type (gnu_type);
- 		    const_flag = true;
- 		    volatile_flag = false;
- 
- 		    gnu_expr = build_unary_op (ADDR_EXPR, gnu_type, gnu_expr);
- 
- 		    create_var_decl (gnu_entity_name, gnu_ext_name,
- 				     TREE_TYPE (gnu_expr), gnu_expr,
- 				     const_flag, Is_Public (gnat_entity),
- 				     imported_p, static_flag, volatile_flag,
- 				     artificial_p, debug_info_p, attr_list,
- 				     gnat_entity, false);
- 		  }
- 
- 		/* Otherwise, instantiate the SAVE_EXPRs if needed.  */
- 		else if (TREE_SIDE_EFFECTS (gnu_expr))
- 		  add_stmt (build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr));
- 
- 		break;
- 	      }
- 	  }
- 
- 	/* If we are defining an aliased object whose nominal subtype is
- 	   unconstrained, the object is a record that contains both the
- 	   template and the object.  If there is an initializer, it will
- 	   have already been converted to the right type, but we need to
- 	   create the template if there is no initializer.  */
- 	if (definition
- 	    && !gnu_expr
- 	    && TREE_CODE (gnu_type) == RECORD_TYPE
- 	    && (TYPE_CONTAINS_TEMPLATE_P (gnu_type)
- 	        /* Beware that padding might have been introduced above.  */
- 		|| (TYPE_PADDING_P (gnu_type)
- 		    && TREE_CODE (TREE_TYPE (TYPE_FIELDS (gnu_type)))
- 		       == RECORD_TYPE
- 		    && TYPE_CONTAINS_TEMPLATE_P
- 		       (TREE_TYPE (TYPE_FIELDS (gnu_type))))))
- 	  {
- 	    tree template_field
- 	      = TYPE_PADDING_P (gnu_type)
- 		? TYPE_FIELDS (TREE_TYPE (TYPE_FIELDS (gnu_type)))
- 		: TYPE_FIELDS (gnu_type);
- 	    vec<constructor_elt, va_gc> *v;
- 	    vec_alloc (v, 1);
- 	    tree t = build_template (TREE_TYPE (template_field),
- 				     TREE_TYPE (DECL_CHAIN (template_field)),
- 				     NULL_TREE);
- 	    CONSTRUCTOR_APPEND_ELT (v, template_field, t);
- 	    gnu_expr = gnat_build_constructor (gnu_type, v);
- 	  }
- 
- 	/* Convert the expression to the type of the object if need be.  */
- 	if (gnu_expr && initial_value_needs_conversion (gnu_type, gnu_expr))
- 	  gnu_expr = convert (gnu_type, gnu_expr);
- 
- 	/* If this is a pointer that doesn't have an initializing expression,
- 	   initialize it to NULL, unless the object is declared imported as
- 	   per RM B.1(24).  */
- 	if (definition
- 	    && (POINTER_TYPE_P (gnu_type) || TYPE_IS_FAT_POINTER_P (gnu_type))
- 	    && !gnu_expr
- 	    && !Is_Imported (gnat_entity))
- 	  gnu_expr = integer_zero_node;
- 
- 	/* If we are defining the object and it has an Address clause, we must
- 	   either get the address expression from the saved GCC tree for the
- 	   object if it has a Freeze node, or elaborate the address expression
- 	   here since the front-end has guaranteed that the elaboration has no
- 	   effects in this case.  */
- 	if (definition && Present (Address_Clause (gnat_entity)))
- 	  {
- 	    const Node_Id gnat_clause = Address_Clause (gnat_entity);
- 	    const Node_Id gnat_address = Expression (gnat_clause);
- 	    tree gnu_address = present_gnu_tree (gnat_entity)
- 			       ? TREE_OPERAND (get_gnu_tree (gnat_entity), 0)
- 			       : gnat_to_gnu (gnat_address);
- 
- 	    save_gnu_tree (gnat_entity, NULL_TREE, false);
- 
- 	    /* Convert the type of the object to a reference type that can
- 	       alias everything as per RM 13.3(19).  */
- 	    if (volatile_flag && !TYPE_VOLATILE (gnu_type))
- 	      gnu_type = change_qualified_type (gnu_type, TYPE_QUAL_VOLATILE);
- 	    gnu_type
- 	      = build_reference_type_for_mode (gnu_type, ptr_mode, true);
- 	    gnu_address = convert (gnu_type, gnu_address);
- 	    used_by_ref = true;
- 	    const_flag
- 	      = (!Is_Public (gnat_entity)
- 		 || compile_time_known_address_p (gnat_address));
- 	    volatile_flag = false;
- 	    gnu_size = NULL_TREE;
- 
- 	    /* If this is an aliased object with an unconstrained array nominal
- 	       subtype, then it can overlay only another aliased object with an
- 	       unconstrained array nominal subtype and compatible template.  */
- 	    if (Is_Constr_Subt_For_UN_Aliased (gnat_type)
- 		&& Is_Array_Type (Underlying_Type (gnat_type))
- 		&& !type_annotate_only)
- 	      {
- 		tree rec_type = TREE_TYPE (gnu_type);
- 		tree off = byte_position (DECL_CHAIN (TYPE_FIELDS (rec_type)));
- 
- 		/* This is the pattern built for a regular object.  */
- 		if (TREE_CODE (gnu_address) == POINTER_PLUS_EXPR
- 		    && TREE_OPERAND (gnu_address, 1) == off)
- 		  gnu_address = TREE_OPERAND (gnu_address, 0);
- 
- 		/* This is the pattern built for an overaligned object.  */
- 		else if (TREE_CODE (gnu_address) == POINTER_PLUS_EXPR
- 			 && TREE_CODE (TREE_OPERAND (gnu_address, 1))
- 			    == PLUS_EXPR
- 			 && TREE_OPERAND (TREE_OPERAND (gnu_address, 1), 1)
- 			    == off)
- 		  gnu_address
- 		    = build2 (POINTER_PLUS_EXPR, gnu_type,
- 			      TREE_OPERAND (gnu_address, 0),
- 			      TREE_OPERAND (TREE_OPERAND (gnu_address, 1), 0));
- 
- 		/* We make an exception for an absolute address but we warn
- 		   that there is a descriptor at the start of the object.  */
- 		else if (TREE_CODE (gnu_address) == INTEGER_CST)
- 		  {
- 		    post_error_ne ("??aliased object& with unconstrained "
- 				   "array nominal subtype", gnat_clause,
- 				   gnat_entity);
- 		    post_error ("\\starts with a descriptor whose size is "
- 				"given by ''Descriptor_Size", gnat_clause);
- 		  }
- 
- 		else
- 		  {
- 		    post_error_ne ("aliased object& with unconstrained array "
- 				   "nominal subtype", gnat_clause,
- 				   gnat_entity);
- 		    post_error ("\\can overlay only aliased object with "
- 				"compatible subtype", gnat_clause);
- 		  }
- 	      }
- 
- 	    /* If we don't have an initializing expression for the underlying
- 	       variable, the initializing expression for the pointer is the
- 	       specified address.  Otherwise, we have to make a COMPOUND_EXPR
- 	       to assign both the address and the initial value.  */
- 	    if (!gnu_expr)
- 	      gnu_expr = gnu_address;
- 	    else
- 	      gnu_expr
- 		= build2 (COMPOUND_EXPR, gnu_type,
- 			  build_binary_op (INIT_EXPR, NULL_TREE,
- 					   build_unary_op (INDIRECT_REF,
- 							   NULL_TREE,
- 							   gnu_address),
- 					   gnu_expr),
- 			  gnu_address);
- 	  }
- 
- 	/* If it has an address clause and we are not defining it, mark it
- 	   as an indirect object.  Likewise for Stdcall objects that are
- 	   imported.  */
- 	if ((!definition && Present (Address_Clause (gnat_entity)))
- 	    || (imported_p && Has_Stdcall_Convention (gnat_entity)))
- 	  {
- 	    /* Convert the type of the object to a reference type that can
- 	       alias everything as per RM 13.3(19).  */
- 	    if (volatile_flag && !TYPE_VOLATILE (gnu_type))
- 	      gnu_type = change_qualified_type (gnu_type, TYPE_QUAL_VOLATILE);
- 	    gnu_type
- 	      = build_reference_type_for_mode (gnu_type, ptr_mode, true);
- 	    used_by_ref = true;
- 	    const_flag = false;
- 	    volatile_flag = false;
- 	    gnu_size = NULL_TREE;
- 
- 	    /* No point in taking the address of an initializing expression
- 	       that isn't going to be used.  */
- 	    gnu_expr = NULL_TREE;
- 
- 	    /* If it has an address clause whose value is known at compile
- 	       time, make the object a CONST_DECL.  This will avoid a
- 	       useless dereference.  */
- 	    if (Present (Address_Clause (gnat_entity)))
- 	      {
- 		Node_Id gnat_address
- 		  = Expression (Address_Clause (gnat_entity));
- 
- 		if (compile_time_known_address_p (gnat_address))
- 		  {
- 		    gnu_expr = gnat_to_gnu (gnat_address);
- 		    const_flag = true;
- 		  }
- 	      }
- 	  }
- 
- 	/* If we are at top level and this object is of variable size,
- 	   make the actual type a hidden pointer to the real type and
- 	   make the initializer be a memory allocation and initialization.
- 	   Likewise for objects we aren't defining (presumed to be
- 	   external references from other packages), but there we do
- 	   not set up an initialization.
- 
- 	   If the object's size overflows, make an allocator too, so that
- 	   Storage_Error gets raised.  Note that we will never free
- 	   such memory, so we presume it never will get allocated.  */
- 	if (!allocatable_size_p (TYPE_SIZE_UNIT (gnu_type),
- 				 global_bindings_p ()
- 				 || !definition
- 				 || static_flag)
- 	    || (gnu_size
- 		&& !allocatable_size_p (convert (sizetype,
- 						 size_binop
- 						 (CEIL_DIV_EXPR, gnu_size,
- 						  bitsize_unit_node)),
- 					global_bindings_p ()
- 					|| !definition
- 					|| static_flag)))
- 	  {
- 	    if (volatile_flag && !TYPE_VOLATILE (gnu_type))
- 	      gnu_type = change_qualified_type (gnu_type, TYPE_QUAL_VOLATILE);
- 	    gnu_type = build_reference_type (gnu_type);
- 	    used_by_ref = true;
- 	    const_flag = true;
- 	    volatile_flag = false;
- 	    gnu_size = NULL_TREE;
- 
- 	    /* In case this was a aliased object whose nominal subtype is
- 	       unconstrained, the pointer above will be a thin pointer and
- 	       build_allocator will automatically make the template.
- 
- 	       If we have a template initializer only (that we made above),
- 	       pretend there is none and rely on what build_allocator creates
- 	       again anyway.  Otherwise (if we have a full initializer), get
- 	       the data part and feed that to build_allocator.
- 
- 	       If we are elaborating a mutable object, tell build_allocator to
- 	       ignore a possibly simpler size from the initializer, if any, as
- 	       we must allocate the maximum possible size in this case.  */
- 	    if (definition && !imported_p)
- 	      {
- 		tree gnu_alloc_type = TREE_TYPE (gnu_type);
- 
- 		if (TREE_CODE (gnu_alloc_type) == RECORD_TYPE
- 		    && TYPE_CONTAINS_TEMPLATE_P (gnu_alloc_type))
- 		  {
- 		    gnu_alloc_type
- 		      = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (gnu_alloc_type)));
- 
- 		    if (TREE_CODE (gnu_expr) == CONSTRUCTOR
- 			&& CONSTRUCTOR_NELTS (gnu_expr) == 1)
- 		      gnu_expr = NULL_TREE;
- 		    else
- 		      gnu_expr
- 			= build_component_ref
- 			    (gnu_expr,
- 			     DECL_CHAIN (TYPE_FIELDS (TREE_TYPE (gnu_expr))),
- 			     false);
- 		  }
- 
- 		if (TREE_CODE (TYPE_SIZE_UNIT (gnu_alloc_type)) == INTEGER_CST
- 		    && !valid_constant_size_p (TYPE_SIZE_UNIT (gnu_alloc_type)))
- 		  post_error ("?`Storage_Error` will be raised at run time!",
- 			      gnat_entity);
- 
- 		gnu_expr
- 		  = build_allocator (gnu_alloc_type, gnu_expr, gnu_type,
- 				     Empty, Empty, gnat_entity, mutable_p);
- 	      }
- 	    else
- 	      gnu_expr = NULL_TREE;
- 	  }
- 
- 	/* If this object would go into the stack and has an alignment larger
- 	   than the largest stack alignment the back-end can honor, resort to
- 	   a variable of "aligning type".  */
- 	if (definition
- 	    && TYPE_ALIGN (gnu_type) > BIGGEST_ALIGNMENT
- 	    && !imported_p
- 	    && !static_flag
- 	    && !global_bindings_p ())
- 	  {
- 	    /* Create the new variable.  No need for extra room before the
- 	       aligned field as this is in automatic storage.  */
- 	    tree gnu_new_type
- 	      = make_aligning_type (gnu_type, TYPE_ALIGN (gnu_type),
- 				    TYPE_SIZE_UNIT (gnu_type),
- 				    BIGGEST_ALIGNMENT, 0, gnat_entity);
- 	    tree gnu_new_var
- 	      = create_var_decl (create_concat_name (gnat_entity, "ALIGN"),
- 				 NULL_TREE, gnu_new_type, NULL_TREE,
- 				 false, false, false, false, false,
- 				 true, debug_info_p && definition, NULL,
- 				 gnat_entity);
- 
- 	    /* Initialize the aligned field if we have an initializer.  */
- 	    if (gnu_expr)
- 	      add_stmt_with_node
- 		(build_binary_op (INIT_EXPR, NULL_TREE,
- 				  build_component_ref
- 				  (gnu_new_var, TYPE_FIELDS (gnu_new_type),
- 				   false),
- 				  gnu_expr),
- 		 gnat_entity);
- 
- 	    /* And setup this entity as a reference to the aligned field.  */
- 	    gnu_type = build_reference_type (gnu_type);
- 	    gnu_expr
- 	      = build_unary_op
- 		(ADDR_EXPR, NULL_TREE,
- 		 build_component_ref (gnu_new_var, TYPE_FIELDS (gnu_new_type),
- 				      false));
- 	    TREE_CONSTANT (gnu_expr) = 1;
- 
- 	    used_by_ref = true;
- 	    const_flag = true;
- 	    volatile_flag = false;
- 	    gnu_size = NULL_TREE;
- 	  }
- 
- 	/* If this is an aggregate constant initialized to a constant, force it
- 	   to be statically allocated.  This saves an initialization copy.  */
- 	if (!static_flag
- 	    && const_flag
- 	    && gnu_expr
- 	    && TREE_CONSTANT (gnu_expr)
- 	    && AGGREGATE_TYPE_P (gnu_type)
- 	    && tree_fits_uhwi_p (TYPE_SIZE_UNIT (gnu_type))
- 	    && !(TYPE_IS_PADDING_P (gnu_type)
- 		 && !tree_fits_uhwi_p (TYPE_SIZE_UNIT
- 				       (TREE_TYPE (TYPE_FIELDS (gnu_type))))))
- 	  static_flag = true;
- 
- 	/* If this is an aliased object with an unconstrained array nominal
- 	   subtype, we make its type a thin reference, i.e. the reference
- 	   counterpart of a thin pointer, so it points to the array part.
- 	   This is aimed to make it easier for the debugger to decode the
- 	   object.  Note that we have to do it this late because of the
- 	   couple of allocation adjustments that might be made above.  */
- 	if (Is_Constr_Subt_For_UN_Aliased (gnat_type)
- 	    && Is_Array_Type (Underlying_Type (gnat_type))
- 	    && !type_annotate_only)
- 	  {
- 	    /* In case the object with the template has already been allocated
- 	       just above, we have nothing to do here.  */
- 	    if (!TYPE_IS_THIN_POINTER_P (gnu_type))
- 	      {
- 		/* This variable is a GNAT encoding used by Workbench: let it
- 		   go through the debugging information but mark it as
- 		   artificial: users are not interested in it.  */
- 		tree gnu_unc_var
- 		   = create_var_decl (concat_name (gnu_entity_name, "UNC"),
- 				      NULL_TREE, gnu_type, gnu_expr,
- 				      const_flag, Is_Public (gnat_entity),
- 				      imported_p || !definition, static_flag,
- 				      volatile_flag, true,
- 				      debug_info_p && definition,
- 				      NULL, gnat_entity);
- 		gnu_expr = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_unc_var);
- 		TREE_CONSTANT (gnu_expr) = 1;
- 
- 		used_by_ref = true;
- 		const_flag = true;
- 		volatile_flag = false;
- 		inner_const_flag = TREE_READONLY (gnu_unc_var);
- 		gnu_size = NULL_TREE;
- 	      }
- 
- 	    tree gnu_array = gnat_to_gnu_type (Base_Type (gnat_type));
- 	    gnu_type
- 	      = build_reference_type (TYPE_OBJECT_RECORD_TYPE (gnu_array));
- 	  }
- 
- 	/* Convert the expression to the type of the object if need be.  */
- 	if (gnu_expr && initial_value_needs_conversion (gnu_type, gnu_expr))
- 	  gnu_expr = convert (gnu_type, gnu_expr);
- 
- 	/* If this name is external or a name was specified, use it, but don't
- 	   use the Interface_Name with an address clause (see cd30005).  */
- 	if ((Is_Public (gnat_entity) && !Is_Imported (gnat_entity))
- 	    || (Present (Interface_Name (gnat_entity))
- 		&& No (Address_Clause (gnat_entity))))
- 	  gnu_ext_name = create_concat_name (gnat_entity, NULL);
- 
- 	/* Deal with a pragma Linker_Section on a constant or variable.  */
- 	if ((kind == E_Constant || kind == E_Variable)
- 	    && Present (Linker_Section_Pragma (gnat_entity)))
- 	  prepend_one_attribute_pragma (&attr_list,
- 					Linker_Section_Pragma (gnat_entity));
- 
- 	/* Now create the variable or the constant and set various flags.  */
- 	gnu_decl
- 	  = create_var_decl (gnu_entity_name, gnu_ext_name, gnu_type,
- 			     gnu_expr, const_flag, Is_Public (gnat_entity),
- 			     imported_p || !definition, static_flag,
- 			     volatile_flag, artificial_p,
- 			     debug_info_p && definition, attr_list,
- 			     gnat_entity, true);
- 	DECL_BY_REF_P (gnu_decl) = used_by_ref;
- 	DECL_POINTS_TO_READONLY_P (gnu_decl) = used_by_ref && inner_const_flag;
- 	DECL_CAN_NEVER_BE_NULL_P (gnu_decl) = Can_Never_Be_Null (gnat_entity);
- 
- 	/* If we are defining an Out parameter and optimization isn't enabled,
- 	   create a fake PARM_DECL for debugging purposes and make it point to
- 	   the VAR_DECL.  Suppress debug info for the latter but make sure it
- 	   will live in memory so that it can be accessed from within the
- 	   debugger through the PARM_DECL.  */
- 	if (kind == E_Out_Parameter
- 	    && definition
- 	    && debug_info_p
- 	    && !optimize
- 	    && !flag_generate_lto)
- 	  {
- 	    tree param = create_param_decl (gnu_entity_name, gnu_type);
- 	    gnat_pushdecl (param, gnat_entity);
- 	    SET_DECL_VALUE_EXPR (param, gnu_decl);
- 	    DECL_HAS_VALUE_EXPR_P (param) = 1;
- 	    DECL_IGNORED_P (gnu_decl) = 1;
- 	    TREE_ADDRESSABLE (gnu_decl) = 1;
- 	  }
- 
- 	/* If this is a loop parameter, set the corresponding flag.  */
- 	else if (kind == E_Loop_Parameter)
- 	  DECL_LOOP_PARM_P (gnu_decl) = 1;
- 
- 	/* If this is a constant and we are defining it or it generates a real
- 	   symbol at the object level and we are referencing it, we may want
- 	   or need to have a true variable to represent it:
- 	     - if the constant is public and not overlaid on something else,
- 	     - if its address is taken,
- 	     - if it is aliased,
- 	     - if optimization isn't enabled, for debugging purposes.  */
- 	if (TREE_CODE (gnu_decl) == CONST_DECL
- 	    && (definition || Sloc (gnat_entity) > Standard_Location)
- 	    && ((Is_Public (gnat_entity) && No (Address_Clause (gnat_entity)))
- 		|| Address_Taken (gnat_entity)
- 		|| Is_Aliased (gnat_entity)
- 		|| (!optimize && debug_info_p)))
- 	  {
- 	    tree gnu_corr_var
- 	      = create_var_decl (gnu_entity_name, gnu_ext_name, gnu_type,
- 				 gnu_expr, true, Is_Public (gnat_entity),
- 				 !definition, static_flag, volatile_flag,
- 				 artificial_p, debug_info_p && definition,
- 				 attr_list, gnat_entity, false);
- 
- 	    SET_DECL_CONST_CORRESPONDING_VAR (gnu_decl, gnu_corr_var);
- 	    DECL_IGNORED_P (gnu_decl) = 1;
- 	  }
- 
- 	/* If this is a constant, even if we don't need a true variable, we
- 	   may need to avoid returning the initializer in every case.  That
- 	   can happen for the address of a (constant) constructor because,
- 	   upon dereferencing it, the constructor will be reinjected in the
- 	   tree, which may not be valid in every case; see lvalue_required_p
- 	   for more details.  */
- 	if (TREE_CODE (gnu_decl) == CONST_DECL)
- 	  DECL_CONST_ADDRESS_P (gnu_decl) = constructor_address_p (gnu_expr);
- 
- 	/* If this object is declared in a block that contains a block with an
- 	   exception handler, and we aren't using the GCC exception mechanism,
- 	   we must force this variable in memory in order to avoid an invalid
- 	   optimization.  */
- 	if (Front_End_Exceptions ()
- 	    && Has_Nested_Block_With_Handler (Scope (gnat_entity)))
- 	  TREE_ADDRESSABLE (gnu_decl) = 1;
- 
- 	/* If this is a local variable with non-BLKmode and aggregate type,
- 	   and optimization isn't enabled, then force it in memory so that
- 	   a register won't be allocated to it with possible subparts left
- 	   uninitialized and reaching the register allocator.  */
- 	else if (TREE_CODE (gnu_decl) == VAR_DECL
- 		 && !DECL_EXTERNAL (gnu_decl)
- 		 && !TREE_STATIC (gnu_decl)
- 		 && DECL_MODE (gnu_decl) != BLKmode
- 		 && AGGREGATE_TYPE_P (TREE_TYPE (gnu_decl))
- 		 && !TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_decl))
- 		 && !optimize)
- 	  TREE_ADDRESSABLE (gnu_decl) = 1;
- 
- 	/* If we are defining an object with variable size or an object with
- 	   fixed size that will be dynamically allocated, and we are using the
- 	   front-end setjmp/longjmp exception mechanism, update the setjmp
- 	   buffer.  */
- 	if (definition
- 	    && Exception_Mechanism == Front_End_SJLJ
- 	    && get_block_jmpbuf_decl ()
- 	    && DECL_SIZE_UNIT (gnu_decl)
- 	    && (TREE_CODE (DECL_SIZE_UNIT (gnu_decl)) != INTEGER_CST
- 		|| (flag_stack_check == GENERIC_STACK_CHECK
- 		    && compare_tree_int (DECL_SIZE_UNIT (gnu_decl),
- 					 STACK_CHECK_MAX_VAR_SIZE) > 0)))
- 	  add_stmt_with_node (build_call_n_expr
- 			      (update_setjmp_buf_decl, 1,
- 			       build_unary_op (ADDR_EXPR, NULL_TREE,
- 					       get_block_jmpbuf_decl ())),
- 			      gnat_entity);
- 
- 	/* Back-annotate Esize and Alignment of the object if not already
- 	   known.  Note that we pick the values of the type, not those of
- 	   the object, to shield ourselves from low-level platform-dependent
- 	   adjustments like alignment promotion.  This is both consistent with
- 	   all the treatment above, where alignment and size are set on the
- 	   type of the object and not on the object directly, and makes it
- 	   possible to support all confirming representation clauses.  */
- 	annotate_object (gnat_entity, TREE_TYPE (gnu_decl), gnu_object_size,
- 			 used_by_ref);
-       }
-       break;
- 
-     case E_Void:
-       /* Return a TYPE_DECL for "void" that we previously made.  */
-       gnu_decl = TYPE_NAME (void_type_node);
-       break;
- 
-     case E_Enumeration_Type:
-       /* A special case: for the types Character and Wide_Character in
- 	 Standard, we do not list all the literals.  So if the literals
- 	 are not specified, make this an integer type.  */
-       if (No (First_Literal (gnat_entity)))
- 	{
- 	  if (esize == CHAR_TYPE_SIZE && flag_signed_char)
- 	    gnu_type = make_signed_type (CHAR_TYPE_SIZE);
- 	  else
- 	    gnu_type = make_unsigned_type (esize);
- 	  TYPE_NAME (gnu_type) = gnu_entity_name;
- 
- 	  /* Set TYPE_STRING_FLAG for Character and Wide_Character types.
- 	     This is needed by the DWARF-2 back-end to distinguish between
- 	     unsigned integer types and character types.  */
- 	  TYPE_STRING_FLAG (gnu_type) = 1;
- 
- 	  /* This flag is needed by the call just below.  */
- 	  TYPE_ARTIFICIAL (gnu_type) = artificial_p;
- 
- 	  finish_character_type (gnu_type);
- 	}
-       else
- 	{
- 	  /* We have a list of enumeral constants in First_Literal.  We make a
- 	     CONST_DECL for each one and build into GNU_LITERAL_LIST the list
- 	     to be placed into TYPE_FIELDS.  Each node is itself a TREE_LIST
- 	     whose TREE_VALUE is the literal name and whose TREE_PURPOSE is the
- 	     value of the literal.  But when we have a regular boolean type, we
- 	     simplify this a little by using a BOOLEAN_TYPE.  */
- 	  const bool is_boolean = Is_Boolean_Type (gnat_entity)
- 				  && !Has_Non_Standard_Rep (gnat_entity);
- 	  const bool is_unsigned = Is_Unsigned_Type (gnat_entity);
- 	  tree gnu_list = NULL_TREE;
- 	  Entity_Id gnat_literal;
- 
- 	  /* Boolean types with foreign convention have precision 1.  */
- 	  if (is_boolean && foreign)
- 	    esize = 1;
- 
- 	  gnu_type = make_node (is_boolean ? BOOLEAN_TYPE : ENUMERAL_TYPE);
- 	  TYPE_PRECISION (gnu_type) = esize;
- 	  TYPE_UNSIGNED (gnu_type) = is_unsigned;
- 	  set_min_and_max_values_for_integral_type (gnu_type, esize,
- 						    TYPE_SIGN (gnu_type));
- 	  process_attributes (&gnu_type, &attr_list, true, gnat_entity);
- 	  layout_type (gnu_type);
- 
- 	  for (gnat_literal = First_Literal (gnat_entity);
- 	       Present (gnat_literal);
- 	       gnat_literal = Next_Literal (gnat_literal))
- 	    {
- 	      tree gnu_value
- 		= UI_To_gnu (Enumeration_Rep (gnat_literal), gnu_type);
- 	      /* Do not generate debug info for individual enumerators.  */
- 	      tree gnu_literal
- 		= create_var_decl (get_entity_name (gnat_literal), NULL_TREE,
- 				   gnu_type, gnu_value, true, false, false,
- 				   false, false, artificial_p, false,
- 				   NULL, gnat_literal);
- 	      save_gnu_tree (gnat_literal, gnu_literal, false);
- 	      gnu_list
- 	        = tree_cons (DECL_NAME (gnu_literal), gnu_value, gnu_list);
- 	    }
- 
- 	  if (!is_boolean)
- 	    TYPE_VALUES (gnu_type) = nreverse (gnu_list);
- 
- 	  /* Note that the bounds are updated at the end of this function
- 	     to avoid an infinite recursion since they refer to the type.  */
- 	  goto discrete_type;
- 	}
-       break;
- 
-     case E_Signed_Integer_Type:
-       /* For integer types, just make a signed type the appropriate number
- 	 of bits.  */
-       gnu_type = make_signed_type (esize);
-       goto discrete_type;
- 
-     case E_Ordinary_Fixed_Point_Type:
-     case E_Decimal_Fixed_Point_Type:
-       {
- 	/* Small_Value is the scale factor.  */
- 	const Ureal gnat_small_value = Small_Value (gnat_entity);
- 	tree scale_factor = NULL_TREE;
- 
- 	gnu_type = make_signed_type (esize);
- 
- 	/* When encoded as 1/2**N or 1/10**N, describe the scale factor as a
- 	   binary or decimal scale: it is easier to read for humans.  */
- 	if (UI_Eq (Numerator (gnat_small_value), Uint_1)
- 	    && (Rbase (gnat_small_value) == 2
- 		|| Rbase (gnat_small_value) == 10))
- 	  {
- 	    tree base
- 	      = build_int_cst (integer_type_node, Rbase (gnat_small_value));
- 	    tree exponent
- 	      = build_int_cst (integer_type_node,
- 			       UI_To_Int (Denominator (gnat_small_value)));
- 	    scale_factor
- 	      = build2 (RDIV_EXPR, integer_type_node,
- 			integer_one_node,
- 			build2 (POWER_EXPR, integer_type_node,
- 				base, exponent));
- 	  }
- 
- 	/* Use the arbitrary scale factor description.  Note that we support
- 	   a Small_Value whose magnitude is larger than 64-bit even on 32-bit
- 	   platforms, so we unconditionally use a (dummy) 128-bit type.  */
- 	else
- 	  {
- 	    const Uint gnat_num = Norm_Num (gnat_small_value);
- 	    const Uint gnat_den = Norm_Den (gnat_small_value);
- 	    tree gnu_small_type = make_unsigned_type (128);
- 	    tree gnu_num = UI_To_gnu (gnat_num, gnu_small_type);
- 	    tree gnu_den = UI_To_gnu (gnat_den, gnu_small_type);
- 
- 	    scale_factor
- 	      = build2 (RDIV_EXPR, gnu_small_type, gnu_num, gnu_den);
- 	  }
- 
- 	TYPE_FIXED_POINT_P (gnu_type) = 1;
- 	SET_TYPE_SCALE_FACTOR (gnu_type, scale_factor);
-       }
-       goto discrete_type;
- 
-     case E_Modular_Integer_Type:
-       {
- 	/* Packed Array Impl. Types are supposed to be subtypes only.  */
- 	gcc_assert (!Is_Packed_Array_Impl_Type (gnat_entity));
- 
- 	/* For modular types, make the unsigned type of the proper number
- 	   of bits and then set up the modulus, if required.  */
- 	gnu_type = make_unsigned_type (esize);
- 
- 	/* Get the modulus in this type.  If the modulus overflows, assume
- 	   that this is because it was equal to 2**Esize.  Note that there
- 	   is no overflow checking done on unsigned types, so we detect the
- 	   overflow by looking for a modulus of zero, which is invalid.  */
- 	tree gnu_modulus = UI_To_gnu (Modulus (gnat_entity), gnu_type);
- 
- 	/* If the modulus is not 2**Esize, then this also means that the upper
- 	   bound of the type, i.e. modulus - 1, is not maximal, so we create an
- 	   extra subtype to carry it and set the modulus on the base type.  */
- 	if (!integer_zerop (gnu_modulus))
- 	  {
- 	    TYPE_NAME (gnu_type) = create_concat_name (gnat_entity, "UMT");
- 	    TYPE_MODULAR_P (gnu_type) = 1;
- 	    SET_TYPE_MODULUS (gnu_type, gnu_modulus);
- 	    tree gnu_high = fold_build2 (MINUS_EXPR, gnu_type, gnu_modulus,
- 					 build_int_cst (gnu_type, 1));
- 	    gnu_type
- 	      = create_extra_subtype (gnu_type, TYPE_MIN_VALUE (gnu_type),
- 				      gnu_high);
- 	  }
-       }
-       goto discrete_type;
- 
-     case E_Signed_Integer_Subtype:
-     case E_Enumeration_Subtype:
-     case E_Modular_Integer_Subtype:
-     case E_Ordinary_Fixed_Point_Subtype:
-     case E_Decimal_Fixed_Point_Subtype:
- 
-       /* For integral subtypes, we make a new INTEGER_TYPE.  Note that we do
- 	 not want to call create_range_type since we would like each subtype
- 	 node to be distinct.  ??? Historically this was in preparation for
- 	 when memory aliasing is implemented, but that's obsolete now given
- 	 the call to relate_alias_sets below.
- 
- 	 The TREE_TYPE field of the INTEGER_TYPE points to the base type;
- 	 this fact is used by the arithmetic conversion functions.
- 
- 	 We elaborate the Ancestor_Subtype if it is not in the current unit
- 	 and one of our bounds is non-static.  We do this to ensure consistent
- 	 naming in the case where several subtypes share the same bounds, by
- 	 elaborating the first such subtype first, thus using its name.  */
- 
-       if (!definition
- 	  && Present (Ancestor_Subtype (gnat_entity))
- 	  && !In_Extended_Main_Code_Unit (Ancestor_Subtype (gnat_entity))
- 	  && (!Compile_Time_Known_Value (Type_Low_Bound (gnat_entity))
- 	      || !Compile_Time_Known_Value (Type_High_Bound (gnat_entity))))
- 	gnat_to_gnu_entity (Ancestor_Subtype (gnat_entity), gnu_expr, false);
- 
-       /* Set the precision to the Esize except for bit-packed arrays.  */
-       if (Is_Packed_Array_Impl_Type (gnat_entity))
- 	esize = UI_To_Int (RM_Size (gnat_entity));
- 
-       /* Boolean types with foreign convention have precision 1.  */
-       if (Is_Boolean_Type (gnat_entity) && foreign)
- 	{
- 	  gnu_type = make_node (BOOLEAN_TYPE);
- 	  TYPE_PRECISION (gnu_type) = 1;
- 	  TYPE_UNSIGNED (gnu_type) = 1;
- 	  set_min_and_max_values_for_integral_type (gnu_type, 1, UNSIGNED);
- 	  layout_type (gnu_type);
- 	}
-       /* First subtypes of Character are treated as Character; otherwise
- 	 this should be an unsigned type if the base type is unsigned or
- 	 if the lower bound is constant and non-negative or if the type
- 	 is biased.  However, even if the lower bound is constant and
- 	 non-negative, we use a signed type for a subtype with the same
- 	 size as its signed base type, because this eliminates useless
- 	 conversions to it and gives more leeway to the optimizer; but
- 	 this means that we will need to explicitly test for this case
- 	 when we change the representation based on the RM size.  */
-       else if (kind == E_Enumeration_Subtype
- 	  && No (First_Literal (Etype (gnat_entity)))
- 	  && Esize (gnat_entity) == RM_Size (gnat_entity)
- 	  && esize == CHAR_TYPE_SIZE
- 	  && flag_signed_char)
- 	gnu_type = make_signed_type (CHAR_TYPE_SIZE);
-       else if (Is_Unsigned_Type (Underlying_Type (Etype (gnat_entity)))
- 	       || (Esize (Etype (gnat_entity)) != Esize (gnat_entity)
- 		   && Is_Unsigned_Type (gnat_entity))
- 	       || Has_Biased_Representation (gnat_entity))
- 	gnu_type = make_unsigned_type (esize);
-       else
- 	gnu_type = make_signed_type (esize);
-       TREE_TYPE (gnu_type) = get_unpadded_type (Etype (gnat_entity));
- 
-       SET_TYPE_RM_MIN_VALUE
- 	(gnu_type, elaborate_expression (Type_Low_Bound (gnat_entity),
- 					 gnat_entity, "L", definition, true,
- 					 debug_info_p));
- 
-       SET_TYPE_RM_MAX_VALUE
- 	(gnu_type, elaborate_expression (Type_High_Bound (gnat_entity),
- 					 gnat_entity, "U", definition, true,
- 					 debug_info_p));
- 
-       if (TREE_CODE (gnu_type) == INTEGER_TYPE)
- 	TYPE_BIASED_REPRESENTATION_P (gnu_type)
- 	  = Has_Biased_Representation (gnat_entity);
- 
-       /* Do the same processing for Character subtypes as for types.  */
-       if (TREE_CODE (TREE_TYPE (gnu_type)) == INTEGER_TYPE
- 	  && TYPE_STRING_FLAG (TREE_TYPE (gnu_type)))
- 	{
- 	  TYPE_NAME (gnu_type) = gnu_entity_name;
- 	  TYPE_STRING_FLAG (gnu_type) = 1;
- 	  TYPE_ARTIFICIAL (gnu_type) = artificial_p;
- 	  finish_character_type (gnu_type);
- 	}
- 
-       /* Inherit our alias set from what we're a subtype of.  Subtypes
- 	 are not different types and a pointer can designate any instance
- 	 within a subtype hierarchy.  */
-       relate_alias_sets (gnu_type, TREE_TYPE (gnu_type), ALIAS_SET_COPY);
- 
-       /* One of the above calls might have caused us to be elaborated,
- 	 so don't blow up if so.  */
-       if (present_gnu_tree (gnat_entity))
- 	{
- 	  maybe_present = true;
- 	  break;
- 	}
- 
-       /* Attach the TYPE_STUB_DECL in case we have a parallel type.  */
-       TYPE_STUB_DECL (gnu_type)
- 	= create_type_stub_decl (gnu_entity_name, gnu_type);
- 
-     discrete_type:
- 
-       /* We have to handle clauses that under-align the type specially.  */
-       if ((Present (Alignment_Clause (gnat_entity))
- 	   || (Is_Packed_Array_Impl_Type (gnat_entity)
- 	       && Present
- 		  (Alignment_Clause (Original_Array_Type (gnat_entity)))))
- 	  && UI_Is_In_Int_Range (Alignment (gnat_entity)))
- 	{
- 	  align = UI_To_Int (Alignment (gnat_entity)) * BITS_PER_UNIT;
- 	  if (align >= TYPE_ALIGN (gnu_type))
- 	    align = 0;
- 	}
- 
-       /* If the type we are dealing with represents a bit-packed array,
- 	 we need to have the bits left justified on big-endian targets
- 	 and right justified on little-endian targets.  We also need to
- 	 ensure that when the value is read (e.g. for comparison of two
- 	 such values), we only get the good bits, since the unused bits
- 	 are uninitialized.  Both goals are accomplished by wrapping up
- 	 the modular type in an enclosing record type.  */
-       if (Is_Packed_Array_Impl_Type (gnat_entity))
- 	{
- 	  tree gnu_field_type, gnu_field, t;
- 
- 	  gcc_assert (Is_Bit_Packed_Array (Original_Array_Type (gnat_entity)));
- 	  TYPE_BIT_PACKED_ARRAY_TYPE_P (gnu_type) = 1;
- 
- 	  /* Make the original array type a parallel/debug type.  */
- 	  if (debug_info_p)
- 	    {
- 	      tree gnu_name
- 		= associate_original_type_to_packed_array (gnu_type,
- 							   gnat_entity);
- 	      if (gnu_name)
- 		gnu_entity_name = gnu_name;
- 	    }
- 
- 	  /* Set the RM size before wrapping up the original type.  */
- 	  SET_TYPE_RM_SIZE (gnu_type,
- 			    UI_To_gnu (RM_Size (gnat_entity), bitsizetype));
- 
- 	  /* Create a stripped-down declaration, mainly for debugging.  */
- 	  t = create_type_decl (gnu_entity_name, gnu_type, true, debug_info_p,
- 				gnat_entity);
- 
- 	  /* Now save it and build the enclosing record type.  */
- 	  gnu_field_type = gnu_type;
- 
- 	  gnu_type = make_node (RECORD_TYPE);
- 	  TYPE_NAME (gnu_type) = create_concat_name (gnat_entity, "JM");
- 	  TYPE_PACKED (gnu_type) = 1;
- 	  TYPE_SIZE (gnu_type) = TYPE_SIZE (gnu_field_type);
- 	  TYPE_SIZE_UNIT (gnu_type) = TYPE_SIZE_UNIT (gnu_field_type);
- 	  SET_TYPE_ADA_SIZE (gnu_type, TYPE_RM_SIZE (gnu_field_type));
- 
- 	  /* Propagate the alignment of the modular type to the record type,
- 	     unless there is an alignment clause that under-aligns the type.
- 	     This means that bit-packed arrays are given "ceil" alignment for
- 	     their size by default, which may seem counter-intuitive but makes
- 	     it possible to overlay them on modular types easily.  */
- 	  SET_TYPE_ALIGN (gnu_type,
- 			  align > 0 ? align : TYPE_ALIGN (gnu_field_type));
- 
- 	  /* Propagate the reverse storage order flag to the record type so
- 	     that the required byte swapping is performed when retrieving the
- 	     enclosed modular value.  */
- 	  TYPE_REVERSE_STORAGE_ORDER (gnu_type)
- 	    = Reverse_Storage_Order (Original_Array_Type (gnat_entity));
- 
- 	  relate_alias_sets (gnu_type, gnu_field_type, ALIAS_SET_COPY);
- 
- 	  /* Don't declare the field as addressable since we won't be taking
- 	     its address and this would prevent create_field_decl from making
- 	     a bitfield.  */
- 	  gnu_field
- 	    = create_field_decl (get_identifier ("OBJECT"), gnu_field_type,
- 				 gnu_type, NULL_TREE, bitsize_zero_node, 1, 0);
- 
- 	  /* We will output additional debug info manually below.  */
- 	  finish_record_type (gnu_type, gnu_field, 2, false);
- 	  TYPE_JUSTIFIED_MODULAR_P (gnu_type) = 1;
- 
- 	  /* Make the original array type a parallel/debug type.  Note that
- 	     gnat_get_array_descr_info needs a TYPE_IMPL_PACKED_ARRAY_P type
- 	     so we use an intermediate step for standard DWARF.  */
- 	  if (debug_info_p)
- 	    {
- 	      if (gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
- 		SET_TYPE_DEBUG_TYPE (gnu_type, gnu_field_type);
- 	      else if (DECL_PARALLEL_TYPE (t))
- 		add_parallel_type (gnu_type, DECL_PARALLEL_TYPE (t));
- 	    }
- 	}
- 
-       /* If the type we are dealing with has got a smaller alignment than the
- 	 natural one, we need to wrap it up in a record type and misalign the
- 	 latter; we reuse the padding machinery for this purpose.  */
-       else if (align > 0)
- 	{
- 	  tree gnu_size = UI_To_gnu (RM_Size (gnat_entity), bitsizetype);
- 
- 	  /* Set the RM size before wrapping the type.  */
- 	  SET_TYPE_RM_SIZE (gnu_type, gnu_size);
- 
- 	  /* Create a stripped-down declaration, mainly for debugging.  */
- 	  create_type_decl (gnu_entity_name, gnu_type, true, debug_info_p,
- 			    gnat_entity);
- 
- 	  gnu_type
- 	    = maybe_pad_type (gnu_type, TYPE_SIZE (gnu_type), align,
- 			      gnat_entity, false, definition, false);
- 
- 	  TYPE_PACKED (gnu_type) = 1;
- 	  SET_TYPE_ADA_SIZE (gnu_type, gnu_size);
- 	}
- 
-       break;
- 
-     case E_Floating_Point_Type:
-       /* The type of the Low and High bounds can be our type if this is
- 	 a type from Standard, so set them at the end of the function.  */
-       gnu_type = make_node (REAL_TYPE);
-       TYPE_PRECISION (gnu_type) = fp_size_to_prec (esize);
-       layout_type (gnu_type);
-       break;
- 
-     case E_Floating_Point_Subtype:
-       /* See the E_Signed_Integer_Subtype case for the rationale.  */
-       if (!definition
- 	  && Present (Ancestor_Subtype (gnat_entity))
- 	  && !In_Extended_Main_Code_Unit (Ancestor_Subtype (gnat_entity))
- 	  && (!Compile_Time_Known_Value (Type_Low_Bound (gnat_entity))
- 	      || !Compile_Time_Known_Value (Type_High_Bound (gnat_entity))))
- 	gnat_to_gnu_entity (Ancestor_Subtype (gnat_entity), gnu_expr, false);
- 
-       gnu_type = make_node (REAL_TYPE);
-       TREE_TYPE (gnu_type) = get_unpadded_type (Etype (gnat_entity));
-       TYPE_PRECISION (gnu_type) = fp_size_to_prec (esize);
-       TYPE_GCC_MIN_VALUE (gnu_type)
- 	= TYPE_GCC_MIN_VALUE (TREE_TYPE (gnu_type));
-       TYPE_GCC_MAX_VALUE (gnu_type)
- 	= TYPE_GCC_MAX_VALUE (TREE_TYPE (gnu_type));
-       layout_type (gnu_type);
- 
-       SET_TYPE_RM_MIN_VALUE
- 	(gnu_type, elaborate_expression (Type_Low_Bound (gnat_entity),
- 					 gnat_entity, "L", definition, true,
- 					 debug_info_p));
- 
-       SET_TYPE_RM_MAX_VALUE
- 	(gnu_type, elaborate_expression (Type_High_Bound (gnat_entity),
- 					 gnat_entity, "U", definition, true,
- 					 debug_info_p));
- 
-       /* Inherit our alias set from what we're a subtype of, as for
- 	 integer subtypes.  */
-       relate_alias_sets (gnu_type, TREE_TYPE (gnu_type), ALIAS_SET_COPY);
- 
-       /* One of the above calls might have caused us to be elaborated,
- 	 so don't blow up if so.  */
-       maybe_present = true;
-       break;
- 
-       /* Array Types and Subtypes
- 
- 	 In GNAT unconstrained array types are represented by E_Array_Type and
- 	 constrained array types are represented by E_Array_Subtype.  They are
- 	 translated into UNCONSTRAINED_ARRAY_TYPE and ARRAY_TYPE respectively.
- 	 But there are no actual objects of an unconstrained array type; all we
- 	 have are pointers to that type.  In addition to the type node itself,
- 	 4 other types associated with it are built in the process:
- 
- 	   1. the array type (suffix XUA) containing the actual data,
- 
- 	   2. the template type (suffix XUB) containng the bounds,
- 
- 	   3. the fat pointer type (suffix XUP) representing a pointer or a
- 	      reference to the unconstrained array type:
- 		XUP = struct { XUA *, XUB * }
- 
- 	   4. the object record type (suffix XUT) containing bounds and data:
- 		XUT = struct { XUB, XUA }
- 
- 	 The bounds of the array type XUA (de)reference the XUB * field of a
- 	 PLACEHOLDER_EXPR for the fat pointer type XUP, so the array type XUA
- 	 is to be interpreted in the context of the fat pointer type XUB for
- 	 debug info purposes.  */
- 
-     case E_Array_Type:
-       {
- 	const Entity_Id PAT = Packed_Array_Impl_Type (gnat_entity);
- 	const bool convention_fortran_p
- 	  = (Convention (gnat_entity) == Convention_Fortran);
- 	const int ndim = Number_Dimensions (gnat_entity);
- 	tree gnu_template_type;
- 	tree gnu_ptr_template;
- 	tree gnu_template_reference, gnu_template_fields, gnu_fat_type;
- 	tree *gnu_index_types = XALLOCAVEC (tree, ndim);
- 	tree *gnu_temp_fields = XALLOCAVEC (tree, ndim);
- 	tree gnu_max_size = size_one_node, tem, obj;
- 	Entity_Id gnat_index;
- 	int index;
- 	tree comp_type;
- 
- 	/* Create the type for the component now, as it simplifies breaking
- 	   type reference loops.  */
- 	comp_type
- 	  = gnat_to_gnu_component_type (gnat_entity, definition, debug_info_p);
- 	if (present_gnu_tree (gnat_entity))
- 	  {
- 	    /* As a side effect, the type may have been translated.  */
- 	    maybe_present = true;
- 	    break;
- 	  }
- 
- 	/* We complete an existing dummy fat pointer type in place.  This both
- 	   avoids further complex adjustments in update_pointer_to and yields
- 	   better debugging information in DWARF by leveraging the support for
- 	   incomplete declarations of "tagged" types in the DWARF back-end.  */
- 	gnu_type = get_dummy_type (gnat_entity);
- 	if (gnu_type && TYPE_POINTER_TO (gnu_type))
- 	  {
- 	    gnu_fat_type = TYPE_MAIN_VARIANT (TYPE_POINTER_TO (gnu_type));
- 	    TYPE_NAME (gnu_fat_type) = NULL_TREE;
- 	    gnu_ptr_template =
- 	      TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (gnu_fat_type)));
- 	    gnu_template_type = TREE_TYPE (gnu_ptr_template);
- 
- 	    /* Save the contents of the dummy type for update_pointer_to.  */
- 	    TYPE_POINTER_TO (gnu_type) = copy_type (gnu_fat_type);
- 	    TYPE_FIELDS (TYPE_POINTER_TO (gnu_type))
- 	      = copy_node (TYPE_FIELDS (gnu_fat_type));
- 	    DECL_CHAIN (TYPE_FIELDS (TYPE_POINTER_TO (gnu_type)))
- 	      = copy_node (DECL_CHAIN (TYPE_FIELDS (gnu_fat_type)));
- 	  }
- 	else
- 	  {
- 	    gnu_fat_type = make_node (RECORD_TYPE);
- 	    gnu_template_type = make_node (RECORD_TYPE);
- 	    gnu_ptr_template = build_pointer_type (gnu_template_type);
- 	  }
- 
- 	/* Make a node for the array.  If we are not defining the array
- 	   suppress expanding incomplete types.  */
- 	gnu_type = make_node (UNCONSTRAINED_ARRAY_TYPE);
- 
- 	if (!definition)
- 	  {
- 	    defer_incomplete_level++;
- 	    this_deferred = true;
- 	  }
- 
- 	/* Build the fat pointer type.  Use a "void *" object instead of
- 	   a pointer to the array type since we don't have the array type
- 	   yet (it will reference the fat pointer via the bounds).  Note
- 	   that we reuse the existing fields of a dummy type because for:
- 
- 	     type Arr is array (Positive range <>) of Element_Type;
- 	     type Array_Ref is access Arr;
- 	     Var : Array_Ref := Null;
- 
- 	   in a declarative part, Arr will be frozen only after Var, which
- 	   means that the fields used in the CONSTRUCTOR built for Null are
- 	   those of the dummy type, which in turn means that COMPONENT_REFs
- 	   of Var may be built with these fields.  Now if COMPONENT_REFs of
- 	   Var are also built later with the fields of the final type, the
- 	   aliasing machinery may consider that the accesses are distinct
- 	   if the FIELD_DECLs are distinct as objects.  */
- 	if (COMPLETE_TYPE_P (gnu_fat_type))
- 	  {
- 	    tem = TYPE_FIELDS (gnu_fat_type);
- 	    TREE_TYPE (tem) = ptr_type_node;
- 	    TREE_TYPE (DECL_CHAIN (tem)) = gnu_ptr_template;
- 	    TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (gnu_fat_type)) = 0;
- 	    for (tree t = gnu_fat_type; t; t = TYPE_NEXT_VARIANT (t))
- 	      SET_TYPE_UNCONSTRAINED_ARRAY (t, gnu_type);
- 	  }
- 	else
- 	  {
- 	    /* We make the fields addressable for the sake of compatibility
- 	       with languages for which the regular fields are addressable.  */
- 	    tem
- 	      = create_field_decl (get_identifier ("P_ARRAY"),
- 				   ptr_type_node, gnu_fat_type,
- 				   NULL_TREE, NULL_TREE, 0, 1);
- 	    DECL_CHAIN (tem)
- 	      = create_field_decl (get_identifier ("P_BOUNDS"),
- 				   gnu_ptr_template, gnu_fat_type,
- 				   NULL_TREE, NULL_TREE, 0, 1);
- 	    finish_fat_pointer_type (gnu_fat_type, tem);
- 	    SET_TYPE_UNCONSTRAINED_ARRAY (gnu_fat_type, gnu_type);
- 	  }
- 
- 	/* If the GNAT encodings are used, give the fat pointer type a name.
- 	   If this is a packed type implemented specially, tell the debugger
- 	   how to interpret the underlying bits by fetching the name of the
- 	   implementation type.  But, in any case, mark it as artificial so
- 	   the debugger can skip it.  */
- 	const Entity_Id gnat_name
- 	  = Present (PAT) && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL
- 	    ? PAT
- 	    : gnat_entity;
- 	tree xup_name
- 	  = gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL
- 	    ? create_concat_name (gnat_name, "XUP")
- 	    : gnu_entity_name;
- 	create_type_decl (xup_name, gnu_fat_type, true, debug_info_p,
- 			  gnat_entity);
- 
- 	/* Build a reference to the template from a PLACEHOLDER_EXPR that
- 	   is the fat pointer.  This will be used to access the individual
- 	   fields once we build them.  */
- 	tem = build3 (COMPONENT_REF, gnu_ptr_template,
- 		      build0 (PLACEHOLDER_EXPR, gnu_fat_type),
- 		      DECL_CHAIN (TYPE_FIELDS (gnu_fat_type)), NULL_TREE);
- 	gnu_template_reference
- 	  = build_unary_op (INDIRECT_REF, gnu_template_type, tem);
- 	TREE_READONLY (gnu_template_reference) = 1;
- 	TREE_THIS_NOTRAP (gnu_template_reference) = 1;
- 
- 	/* Now create the GCC type for each index and add the fields for that
- 	   index to the template.  */
- 	for (index = (convention_fortran_p ? ndim - 1 : 0),
- 	     gnat_index = First_Index (gnat_entity);
- 	     IN_RANGE (index, 0, ndim - 1);
- 	     index += (convention_fortran_p ? - 1 : 1),
- 	     gnat_index = Next_Index (gnat_index))
- 	  {
- 	    char field_name[16];
- 	    tree gnu_index_type = get_unpadded_type (Etype (gnat_index));
- 	    tree gnu_orig_min = TYPE_MIN_VALUE (gnu_index_type);
- 	    tree gnu_orig_max = TYPE_MAX_VALUE (gnu_index_type);
- 	    tree gnu_index_base_type = get_base_type (gnu_index_type);
- 	    tree gnu_lb_field, gnu_hb_field;
- 	    tree gnu_min, gnu_max, gnu_high;
- 
- 	    /* Update the maximum size of the array in elements.  */
- 	    if (gnu_max_size)
- 	      gnu_max_size
- 		= update_n_elem (gnu_max_size, gnu_orig_min, gnu_orig_max);
- 
- 	    /* Now build the self-referential bounds of the index type.  */
- 	    gnu_index_type = maybe_character_type (gnu_index_type);
- 	    gnu_index_base_type = maybe_character_type (gnu_index_base_type);
- 
- 	    /* Make the FIELD_DECLs for the low and high bounds of this
- 	       type and then make extractions of these fields from the
- 	       template.  */
- 	    sprintf (field_name, "LB%d", index);
- 	    gnu_lb_field = create_field_decl (get_identifier (field_name),
- 					      gnu_index_type,
- 					      gnu_template_type, NULL_TREE,
- 					      NULL_TREE, 0, 0);
- 	    Sloc_to_locus (Sloc (gnat_entity),
- 			   &DECL_SOURCE_LOCATION (gnu_lb_field));
- 
- 	    field_name[0] = 'U';
- 	    gnu_hb_field = create_field_decl (get_identifier (field_name),
- 					      gnu_index_type,
- 					      gnu_template_type, NULL_TREE,
- 					      NULL_TREE, 0, 0);
- 	    Sloc_to_locus (Sloc (gnat_entity),
- 			   &DECL_SOURCE_LOCATION (gnu_hb_field));
- 
- 	    gnu_temp_fields[index] = chainon (gnu_lb_field, gnu_hb_field);
- 
- 	    /* We can't use build_component_ref here since the template type
- 	       isn't complete yet.  */
- 	    gnu_orig_min = build3 (COMPONENT_REF, TREE_TYPE (gnu_lb_field),
- 				   gnu_template_reference, gnu_lb_field,
- 				   NULL_TREE);
- 	    gnu_orig_max = build3 (COMPONENT_REF, TREE_TYPE (gnu_hb_field),
- 				   gnu_template_reference, gnu_hb_field,
- 				   NULL_TREE);
- 	    TREE_READONLY (gnu_orig_min) = TREE_READONLY (gnu_orig_max) = 1;
- 
- 	    gnu_min = convert (sizetype, gnu_orig_min);
- 	    gnu_max = convert (sizetype, gnu_orig_max);
- 
- 	    /* Compute the size of this dimension.  See the E_Array_Subtype
- 	       case below for the rationale.  */
- 	    gnu_high
- 	      = build3 (COND_EXPR, sizetype,
- 			build2 (GE_EXPR, boolean_type_node,
- 				gnu_orig_max, gnu_orig_min),
- 			gnu_max,
- 			size_binop (MINUS_EXPR, gnu_min, size_one_node));
- 
- 	    /* Make a range type with the new range in the Ada base type.
- 	       Then make an index type with the size range in sizetype.  */
- 	    gnu_index_types[index]
- 	      = create_index_type (gnu_min, gnu_high,
- 				   create_range_type (gnu_index_base_type,
- 						      gnu_orig_min,
- 						      gnu_orig_max),
- 				   gnat_entity);
- 
- 	    TYPE_NAME (gnu_index_types[index])
- 	      = create_concat_name (gnat_entity, field_name);
- 	  }
- 
- 	/* Install all the fields into the template.  */
- 	TYPE_NAME (gnu_template_type)
- 	  = create_concat_name (gnat_entity, "XUB");
- 	gnu_template_fields = NULL_TREE;
- 	for (index = 0; index < ndim; index++)
- 	  gnu_template_fields
- 	    = chainon (gnu_template_fields, gnu_temp_fields[index]);
- 	finish_record_type (gnu_template_type, gnu_template_fields, 0,
- 			    debug_info_p);
- 	TYPE_CONTEXT (gnu_template_type) = current_function_decl;
- 
- 	/* If Component_Size is not already specified, annotate it with the
- 	   size of the component.  */
- 	if (Unknown_Component_Size (gnat_entity))
- 	  Set_Component_Size (gnat_entity,
-                               annotate_value (TYPE_SIZE (comp_type)));
- 
- 	/* Compute the maximum size of the array in units.  */
- 	if (gnu_max_size)
- 	  gnu_max_size
- 	    = size_binop (MULT_EXPR, gnu_max_size, TYPE_SIZE_UNIT (comp_type));
- 
- 	/* Now build the array type.  */
-         tem = comp_type;
- 	for (index = ndim - 1; index >= 0; index--)
- 	  {
- 	    tem = build_nonshared_array_type (tem, gnu_index_types[index]);
- 	    TYPE_MULTI_ARRAY_P (tem) = (index > 0);
- 	    TYPE_CONVENTION_FORTRAN_P (tem) = convention_fortran_p;
- 	    if (index == ndim - 1 && Reverse_Storage_Order (gnat_entity))
- 	      set_reverse_storage_order_on_array_type (tem);
- 	    if (array_type_has_nonaliased_component (tem, gnat_entity))
- 	      set_nonaliased_component_on_array_type (tem);
- 	  }
- 
- 	/* If this is a packed type implemented specially, then process the
- 	   implementation type so it is elaborated in the proper scope.  */
- 	if (Present (PAT))
- 	  gnat_to_gnu_entity (PAT, NULL_TREE, false);
- 
- 	/* Otherwise, if an alignment is specified, use it if valid and, if
- 	   the alignment was requested with an explicit clause, state so.  */
- 	else if (Known_Alignment (gnat_entity))
- 	  {
- 	    SET_TYPE_ALIGN (tem,
- 			    validate_alignment (Alignment (gnat_entity),
- 						gnat_entity,
- 						TYPE_ALIGN (tem)));
- 	    if (Present (Alignment_Clause (gnat_entity)))
- 	      TYPE_USER_ALIGN (tem) = 1;
- 	  }
- 
- 	/* Tag top-level ARRAY_TYPE nodes for packed arrays and their
- 	   implementation types as such so that the debug information back-end
- 	   can output the appropriate description for them.  */
- 	TYPE_PACKED (tem)
- 	  = (Is_Packed (gnat_entity)
- 	     || Is_Packed_Array_Impl_Type (gnat_entity));
- 
- 	if (Treat_As_Volatile (gnat_entity))
- 	  tem = change_qualified_type (tem, TYPE_QUAL_VOLATILE);
- 
- 	/* Adjust the type of the pointer-to-array field of the fat pointer
- 	   and record the aliasing relationships if necessary.  If this is
- 	   a packed type implemented specially, then use a ref-all pointer
- 	   type since the implementation type may vary between constrained
- 	   subtypes and unconstrained base type.  */
- 	if (Present (PAT))
- 	  TREE_TYPE (TYPE_FIELDS (gnu_fat_type))
- 	    = build_pointer_type_for_mode (tem, ptr_mode, true);
- 	else
- 	  TREE_TYPE (TYPE_FIELDS (gnu_fat_type)) = build_pointer_type (tem);
- 	if (TYPE_ALIAS_SET_KNOWN_P (gnu_fat_type))
- 	  record_component_aliases (gnu_fat_type);
- 
- 	/* If the maximum size doesn't overflow, use it.  */
- 	if (gnu_max_size
- 	    && TREE_CODE (gnu_max_size) == INTEGER_CST
- 	    && !TREE_OVERFLOW (gnu_max_size)
- 	    && compare_tree_int (gnu_max_size, TYPE_ARRAY_SIZE_LIMIT) <= 0)
- 	  TYPE_ARRAY_MAX_SIZE (tem) = gnu_max_size;
- 
- 	/* See the above description for the rationale.  */
- 	create_type_decl (create_concat_name (gnat_entity, "XUA"), tem,
- 			  artificial_p, debug_info_p, gnat_entity);
- 	TYPE_CONTEXT (tem) = gnu_fat_type;
- 	TYPE_CONTEXT (TYPE_POINTER_TO (tem)) = gnu_fat_type;
- 
- 	/* Create the type to be designated by thin pointers: a record type for
- 	   the array and its template.  We used to shift the fields to have the
- 	   template at a negative offset, but this was somewhat of a kludge; we
- 	   now shift thin pointer values explicitly but only those which have a
- 	   TYPE_UNCONSTRAINED_ARRAY attached to the designated RECORD_TYPE.
- 	   Note that GDB can handle standard DWARF information for them, so we
- 	   don't have to name them as a GNAT encoding, except if specifically
- 	   asked to.  */
- 	tree xut_name
- 	  = (gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL)
- 	    ? create_concat_name (gnat_name, "XUT")
- 	    : gnu_entity_name;
- 	obj = build_unc_object_type (gnu_template_type, tem, xut_name,
- 				     debug_info_p);
- 
- 	SET_TYPE_UNCONSTRAINED_ARRAY (obj, gnu_type);
- 	TYPE_OBJECT_RECORD_TYPE (gnu_type) = obj;
- 
- 	/* The result type is an UNCONSTRAINED_ARRAY_TYPE that indicates the
- 	   corresponding fat pointer.  */
- 	TREE_TYPE (gnu_type) = gnu_fat_type;
- 	TYPE_POINTER_TO (gnu_type) = gnu_fat_type;
- 	TYPE_REFERENCE_TO (gnu_type) = gnu_fat_type;
- 	SET_TYPE_MODE (gnu_type, BLKmode);
- 	SET_TYPE_ALIGN (gnu_type, TYPE_ALIGN (tem));
-       }
-       break;
- 
-     case E_Array_Subtype:
- 
-       /* This is the actual data type for array variables.  Multidimensional
- 	 arrays are implemented as arrays of arrays.  Note that arrays which
- 	 have sparse enumeration subtypes as index components create sparse
- 	 arrays, which is obviously space inefficient but so much easier to
- 	 code for now.
- 
- 	 Also note that the subtype never refers to the unconstrained array
- 	 type, which is somewhat at variance with Ada semantics.
- 
- 	 First check to see if this is simply a renaming of the array type.
- 	 If so, the result is the array type.  */
- 
-       gnu_type = TYPE_MAIN_VARIANT (gnat_to_gnu_type (Etype (gnat_entity)));
-       if (!Is_Constrained (gnat_entity))
- 	;
-       else
- 	{
- 	  const Entity_Id PAT = Packed_Array_Impl_Type (gnat_entity);
- 	  Entity_Id gnat_index, gnat_base_index;
- 	  const bool convention_fortran_p
- 	    = (Convention (gnat_entity) == Convention_Fortran);
- 	  const int ndim = Number_Dimensions (gnat_entity);
- 	  tree gnu_base_type = gnu_type;
- 	  tree *gnu_index_types = XALLOCAVEC (tree, ndim);
- 	  tree gnu_max_size = size_one_node;
- 	  bool need_index_type_struct = false;
- 	  int index;
- 
- 	  /* First create the GCC type for each index and find out whether
- 	     special types are needed for debugging information.  */
- 	  for (index = (convention_fortran_p ? ndim - 1 : 0),
- 	       gnat_index = First_Index (gnat_entity),
- 	       gnat_base_index
- 		 = First_Index (Implementation_Base_Type (gnat_entity));
- 	       IN_RANGE (index, 0, ndim - 1);
- 	       index += (convention_fortran_p ? - 1 : 1),
- 	       gnat_index = Next_Index (gnat_index),
- 	       gnat_base_index = Next_Index (gnat_base_index))
- 	    {
- 	      tree gnu_index_type = get_unpadded_type (Etype (gnat_index));
- 	      tree gnu_orig_min = TYPE_MIN_VALUE (gnu_index_type);
- 	      tree gnu_orig_max = TYPE_MAX_VALUE (gnu_index_type);
- 	      tree gnu_index_base_type = get_base_type (gnu_index_type);
- 	      tree gnu_base_index_type
- 		= get_unpadded_type (Etype (gnat_base_index));
- 	      tree gnu_base_orig_min = TYPE_MIN_VALUE (gnu_base_index_type);
- 	      tree gnu_base_orig_max = TYPE_MAX_VALUE (gnu_base_index_type);
- 	      tree gnu_min, gnu_max, gnu_high;
- 
- 	      /* We try to create subtypes for discriminants used as bounds
- 		 that are more restrictive than those declared, by using the
- 		 bounds of the index type of the base array type.  This will
- 		 make it possible to calculate the maximum size of the record
- 		 type more conservatively.  This may have already been done by
- 		 the front-end (Exp_Ch3.Adjust_Discriminants), in which case
- 		 there will be a conversion that needs to be removed first.  */
- 	      if (CONTAINS_PLACEHOLDER_P (gnu_orig_min)
- 		  && TYPE_RM_SIZE (gnu_base_index_type)
- 		  && tree_int_cst_lt (TYPE_RM_SIZE (gnu_base_index_type),
- 				      TYPE_RM_SIZE (gnu_index_type)))
- 		{
- 		  gnu_orig_min = remove_conversions (gnu_orig_min, false);
- 		  TREE_TYPE (gnu_orig_min)
- 		    = create_extra_subtype (TREE_TYPE (gnu_orig_min),
- 					    gnu_base_orig_min,
- 					    gnu_base_orig_max);
- 		}
- 
- 	      if (CONTAINS_PLACEHOLDER_P (gnu_orig_max)
- 		  && TYPE_RM_SIZE (gnu_base_index_type)
- 		  && tree_int_cst_lt (TYPE_RM_SIZE (gnu_base_index_type),
- 				      TYPE_RM_SIZE (gnu_index_type)))
- 		{
- 		  gnu_orig_max = remove_conversions (gnu_orig_max, false);
- 		  TREE_TYPE (gnu_orig_max)
- 		    = create_extra_subtype (TREE_TYPE (gnu_orig_max),
- 					    gnu_base_orig_min,
- 					    gnu_base_orig_max);
- 		}
- 
- 	      /* Update the maximum size of the array in elements.  Here we
- 		 see if any constraint on the index type of the base type
- 		 can be used in the case of self-referential bounds on the
- 		 index type of the array type. We look for a non-"infinite"
- 		 and non-self-referential bound from any type involved and
- 		 handle each bound separately.  */
- 	      if (gnu_max_size)
- 		{
- 		  if (CONTAINS_PLACEHOLDER_P (gnu_orig_min))
- 		    gnu_min = gnu_base_orig_min;
- 		  else
- 		    gnu_min = gnu_orig_min;
- 
- 		  if (TREE_CODE (gnu_min) != INTEGER_CST
- 		      || TREE_OVERFLOW (gnu_min))
- 		    gnu_min = TYPE_MIN_VALUE (TREE_TYPE (gnu_min));
- 
- 		  if (CONTAINS_PLACEHOLDER_P (gnu_orig_max))
- 		    gnu_max = gnu_base_orig_max;
- 		  else
- 		    gnu_max = gnu_orig_max;
- 
- 		  if (TREE_CODE (gnu_max) != INTEGER_CST
- 		      || TREE_OVERFLOW (gnu_max))
- 		    gnu_max = TYPE_MAX_VALUE (TREE_TYPE (gnu_max));
- 
- 		  gnu_max_size
- 		    = update_n_elem (gnu_max_size, gnu_min, gnu_max);
- 		}
- 
- 	      /* Convert the bounds to the base type for consistency below.  */
- 	      gnu_index_base_type = maybe_character_type (gnu_index_base_type);
- 	      gnu_orig_min = convert (gnu_index_base_type, gnu_orig_min);
- 	      gnu_orig_max = convert (gnu_index_base_type, gnu_orig_max);
- 
- 	      gnu_min = convert (sizetype, gnu_orig_min);
- 	      gnu_max = convert (sizetype, gnu_orig_max);
- 
- 	      /* See if the base array type is already flat.  If it is, we
- 		 are probably compiling an ACATS test but it will cause the
- 		 code below to malfunction if we don't handle it specially.  */
- 	      if (TREE_CODE (gnu_base_orig_min) == INTEGER_CST
- 		  && TREE_CODE (gnu_base_orig_max) == INTEGER_CST
- 		  && tree_int_cst_lt (gnu_base_orig_max, gnu_base_orig_min))
- 		{
- 		  gnu_min = size_one_node;
- 		  gnu_max = size_zero_node;
- 		  gnu_high = gnu_max;
- 		}
- 
- 	      /* Similarly, if one of the values overflows in sizetype and the
- 		 range is null, use 1..0 for the sizetype bounds.  */
- 	      else if (TREE_CODE (gnu_min) == INTEGER_CST
- 		       && TREE_CODE (gnu_max) == INTEGER_CST
- 		       && (TREE_OVERFLOW (gnu_min) || TREE_OVERFLOW (gnu_max))
- 		       && tree_int_cst_lt (gnu_orig_max, gnu_orig_min))
- 		{
- 		  gnu_min = size_one_node;
- 		  gnu_max = size_zero_node;
- 		  gnu_high = gnu_max;
- 		}
- 
- 	      /* If the minimum and maximum values both overflow in sizetype,
- 		 but the difference in the original type does not overflow in
- 		 sizetype, ignore the overflow indication.  */
- 	      else if (TREE_CODE (gnu_min) == INTEGER_CST
- 		       && TREE_CODE (gnu_max) == INTEGER_CST
- 		       && TREE_OVERFLOW (gnu_min) && TREE_OVERFLOW (gnu_max)
- 		       && !TREE_OVERFLOW
- 			   (convert (sizetype,
- 				     fold_build2 (MINUS_EXPR,
- 						  gnu_index_base_type,
- 						  gnu_orig_max,
- 						  gnu_orig_min))))
- 		{
- 		  TREE_OVERFLOW (gnu_min) = 0;
- 		  TREE_OVERFLOW (gnu_max) = 0;
- 		  gnu_high = gnu_max;
- 		}
- 
- 	      /* Compute the size of this dimension in the general case.  We
- 		 need to provide GCC with an upper bound to use but have to
- 		 deal with the "superflat" case.  There are three ways to do
- 		 this.  If we can prove that the array can never be superflat,
- 		 we can just use the high bound of the index type.  */
- 	      else if ((Nkind (gnat_index) == N_Range
- 		        && cannot_be_superflat (gnat_index))
- 		       /* Bit-Packed Array Impl. Types are never superflat.  */
- 		       || (Is_Packed_Array_Impl_Type (gnat_entity)
- 			   && Is_Bit_Packed_Array
- 			      (Original_Array_Type (gnat_entity))))
- 		gnu_high = gnu_max;
- 
- 	      /* Otherwise, if the high bound is constant but the low bound is
- 		 not, we use the expression (hb >= lb) ? lb : hb + 1 for the
- 		 lower bound.  Note that the comparison must be done in the
- 		 original type to avoid any overflow during the conversion.  */
- 	      else if (TREE_CODE (gnu_max) == INTEGER_CST
- 		       && TREE_CODE (gnu_min) != INTEGER_CST)
- 		{
- 		  gnu_high = gnu_max;
- 		  gnu_min
- 		    = build_cond_expr (sizetype,
- 				       build_binary_op (GE_EXPR,
- 							boolean_type_node,
- 							gnu_orig_max,
- 							gnu_orig_min),
- 				       gnu_min,
- 				       int_const_binop (PLUS_EXPR, gnu_max,
- 							size_one_node));
- 		}
- 
- 	      /* Finally we use (hb >= lb) ? hb : lb - 1 for the upper bound
- 		 in all the other cases.  Note that we use int_const_binop for
- 		 the shift by 1 if the bound is constant to avoid any unwanted
- 		 overflow.  */
- 	      else
- 		gnu_high
- 		  = build_cond_expr (sizetype,
- 				     build_binary_op (GE_EXPR,
- 						      boolean_type_node,
- 						      gnu_orig_max,
- 						      gnu_orig_min),
- 				     gnu_max,
- 				     TREE_CODE (gnu_min) == INTEGER_CST
- 				     ? int_const_binop (MINUS_EXPR, gnu_min,
- 							size_one_node)
- 				     : size_binop (MINUS_EXPR, gnu_min,
- 						   size_one_node));
- 
- 	      /* Reuse the index type for the range type.  Then make an index
- 		 type with the size range in sizetype.  */
- 	      gnu_index_types[index]
- 		= create_index_type (gnu_min, gnu_high, gnu_index_type,
- 				     gnat_entity);
- 
- 	      /* We need special types for debugging information to point to
- 		 the index types if they have variable bounds, are not integer
- 		 types, are biased or are wider than sizetype.  These are GNAT
- 		 encodings, so we have to include them only when all encodings
- 		 are requested.  */
- 	      if ((TREE_CODE (gnu_orig_min) != INTEGER_CST
- 		   || TREE_CODE (gnu_orig_max) != INTEGER_CST
- 		   || TREE_CODE (gnu_index_type) != INTEGER_TYPE
- 		   || (TREE_TYPE (gnu_index_type)
- 		       && TREE_CODE (TREE_TYPE (gnu_index_type))
- 			  != INTEGER_TYPE)
- 		   || TYPE_BIASED_REPRESENTATION_P (gnu_index_type))
- 		  && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL)
- 		need_index_type_struct = true;
- 	    }
- 
- 	  /* Then flatten: create the array of arrays.  For an array type
- 	     used to implement a packed array, get the component type from
- 	     the original array type since the representation clauses that
- 	     can affect it are on the latter.  */
- 	  if (Is_Packed_Array_Impl_Type (gnat_entity)
- 	      && !Is_Bit_Packed_Array (Original_Array_Type (gnat_entity)))
- 	    {
- 	      gnu_type = gnat_to_gnu_type (Original_Array_Type (gnat_entity));
- 	      for (index = ndim - 1; index >= 0; index--)
- 		gnu_type = TREE_TYPE (gnu_type);
- 
- 	      /* One of the above calls might have caused us to be elaborated,
- 		 so don't blow up if so.  */
- 	      if (present_gnu_tree (gnat_entity))
- 		{
- 		  maybe_present = true;
- 		  break;
- 		}
- 	    }
- 	  else
- 	    {
- 	      gnu_type = gnat_to_gnu_component_type (gnat_entity, definition,
- 						     debug_info_p);
- 
- 	      /* One of the above calls might have caused us to be elaborated,
- 		 so don't blow up if so.  */
- 	      if (present_gnu_tree (gnat_entity))
- 		{
- 		  maybe_present = true;
- 		  break;
- 		}
- 	    }
- 
- 	  /* Compute the maximum size of the array in units.  */
- 	  if (gnu_max_size)
- 	    gnu_max_size
- 	      = size_binop (MULT_EXPR, gnu_max_size, TYPE_SIZE_UNIT (gnu_type));
- 
- 	  /* Now build the array type.  */
- 	  for (index = ndim - 1; index >= 0; index --)
- 	    {
- 	      gnu_type = build_nonshared_array_type (gnu_type,
- 						     gnu_index_types[index]);
- 	      TYPE_MULTI_ARRAY_P (gnu_type) = (index > 0);
- 	      TYPE_CONVENTION_FORTRAN_P (gnu_type) = convention_fortran_p;
- 	      if (index == ndim - 1 && Reverse_Storage_Order (gnat_entity))
- 		set_reverse_storage_order_on_array_type (gnu_type);
- 	      if (array_type_has_nonaliased_component (gnu_type, gnat_entity))
- 		set_nonaliased_component_on_array_type (gnu_type);
- 
- 	      /* Kludge to remove the TREE_OVERFLOW flag for the sake of LTO
- 		 on maximally-sized array types designed by access types.  */
- 	      if (integer_zerop (TYPE_SIZE (gnu_type))
- 		  && TREE_OVERFLOW (TYPE_SIZE (gnu_type))
- 		  && Is_Itype (gnat_entity)
- 		  && (gnat_temp = Associated_Node_For_Itype (gnat_entity))
- 		  && IN (Nkind (gnat_temp), N_Declaration)
- 		  && Is_Access_Type (Defining_Entity (gnat_temp))
- 		  && Is_Entity_Name (First_Index (gnat_entity))
- 		  && UI_To_Int (RM_Size (Entity (First_Index (gnat_entity))))
- 		     == BITS_PER_WORD)
- 		{
- 		  TYPE_SIZE (gnu_type) = bitsize_zero_node;
- 		  TYPE_SIZE_UNIT (gnu_type) = size_zero_node;
- 		}
- 	    }
- 
- 	  /* Attach the TYPE_STUB_DECL in case we have a parallel type.  */
- 	  TYPE_STUB_DECL (gnu_type)
- 	    = create_type_stub_decl (gnu_entity_name, gnu_type);
- 
- 	  /* If this is a multi-dimensional array and we are at global level,
- 	     we need to make a variable corresponding to the stride of the
- 	     inner dimensions.   */
- 	  if (ndim > 1 && global_bindings_p ())
- 	    {
- 	      tree gnu_arr_type;
- 
- 	      for (gnu_arr_type = TREE_TYPE (gnu_type), index = 1;
- 		   TREE_CODE (gnu_arr_type) == ARRAY_TYPE;
- 		   gnu_arr_type = TREE_TYPE (gnu_arr_type), index++)
- 		{
- 		  tree eltype = TREE_TYPE (gnu_arr_type);
- 		  char stride_name[32];
- 
- 		  sprintf (stride_name, "ST%d", index);
- 		  TYPE_SIZE (gnu_arr_type)
- 		    = elaborate_expression_1 (TYPE_SIZE (gnu_arr_type),
- 					      gnat_entity, stride_name,
- 					      definition, false);
- 
- 		  /* ??? For now, store the size as a multiple of the
- 		     alignment of the element type in bytes so that we
- 		     can see the alignment from the tree.  */
- 		  sprintf (stride_name, "ST%d_A_UNIT", index);
- 		  TYPE_SIZE_UNIT (gnu_arr_type)
- 		    = elaborate_expression_2 (TYPE_SIZE_UNIT (gnu_arr_type),
- 					      gnat_entity, stride_name,
- 					      definition, false,
- 					      TYPE_ALIGN (eltype));
- 
- 		  /* ??? create_type_decl is not invoked on the inner types so
- 		     the MULT_EXPR node built above will never be marked.  */
- 		  MARK_VISITED (TYPE_SIZE_UNIT (gnu_arr_type));
- 		}
- 	    }
- 
- 	  /* Set the TYPE_PACKED flag on packed array types and also on their
- 	     implementation types, so that the DWARF back-end can output the
- 	     appropriate description for them.  */
- 	  TYPE_PACKED (gnu_type)
- 	    = (Is_Packed (gnat_entity)
- 	       || Is_Packed_Array_Impl_Type (gnat_entity));
- 
- 	  TYPE_BIT_PACKED_ARRAY_TYPE_P (gnu_type)
- 	    = (Is_Packed_Array_Impl_Type (gnat_entity)
- 	       && Is_Bit_Packed_Array (Original_Array_Type (gnat_entity)));
- 
- 	  /* If the maximum size doesn't overflow, use it.  */
- 	  if (gnu_max_size
- 	      && TREE_CODE (gnu_max_size) == INTEGER_CST
- 	      && !TREE_OVERFLOW (gnu_max_size)
- 	      && compare_tree_int (gnu_max_size, TYPE_ARRAY_SIZE_LIMIT) <= 0)
- 	    TYPE_ARRAY_MAX_SIZE (gnu_type) = gnu_max_size;
- 
- 	  /* If we need to write out a record type giving the names of the
- 	     bounds for debugging purposes, do it now and make the record
- 	     type a parallel type.  This is not needed for a packed array
- 	     since the bounds are conveyed by the original array type.  */
- 	  if (need_index_type_struct
- 	      && debug_info_p
- 	      && !Is_Packed_Array_Impl_Type (gnat_entity))
- 	    {
- 	      tree gnu_bound_rec = make_node (RECORD_TYPE);
- 	      tree gnu_field_list = NULL_TREE;
- 	      tree gnu_field;
- 
- 	      TYPE_NAME (gnu_bound_rec)
- 		= create_concat_name (gnat_entity, "XA");
- 
- 	      for (index = ndim - 1; index >= 0; index--)
- 		{
- 		  tree gnu_index = TYPE_INDEX_TYPE (gnu_index_types[index]);
- 		  tree gnu_index_name = TYPE_IDENTIFIER (gnu_index);
- 
- 		  /* Make sure to reference the types themselves, and not just
- 		     their names, as the debugger may fall back on them.  */
- 		  gnu_field = create_field_decl (gnu_index_name, gnu_index,
- 						 gnu_bound_rec, NULL_TREE,
- 						 NULL_TREE, 0, 0);
- 		  DECL_CHAIN (gnu_field) = gnu_field_list;
- 		  gnu_field_list = gnu_field;
- 		}
- 
- 	      finish_record_type (gnu_bound_rec, gnu_field_list, 0, true);
- 	      add_parallel_type (gnu_type, gnu_bound_rec);
- 	    }
- 
- 	  /* If this is a packed array type, make the original array type a
- 	     parallel/debug type.  Otherwise, if GNAT encodings are used, do
- 	     it for the base array type if it is not artificial to make sure
- 	     that it is kept in the debug info.  */
- 	  if (debug_info_p)
- 	    {
- 	      if (Is_Packed_Array_Impl_Type (gnat_entity))
- 		{
- 		  tree gnu_name
- 		    = associate_original_type_to_packed_array (gnu_type,
- 							       gnat_entity);
- 		  if (gnu_name)
- 		    gnu_entity_name = gnu_name;
- 		}
- 
- 	      else if (gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL)
- 		{
- 		  tree gnu_base_decl
- 		    = gnat_to_gnu_entity (Etype (gnat_entity), NULL_TREE,
- 					  false);
- 
- 		  if (!DECL_ARTIFICIAL (gnu_base_decl))
- 		    add_parallel_type (gnu_type,
- 				       TREE_TYPE (TREE_TYPE (gnu_base_decl)));
- 		}
- 	    }
- 
- 	  /* Set our alias set to that of our base type.  This gives all
- 	     array subtypes the same alias set.  */
- 	  relate_alias_sets (gnu_type, gnu_base_type, ALIAS_SET_COPY);
- 
- 	  /* If this is a packed type implemented specially, then replace our
- 	     type with the implementation type.  */
- 	  if (Present (PAT))
- 	    {
- 	      /* First finish the type we had been making so that we output
- 		 debugging information for it.  */
- 	      process_attributes (&gnu_type, &attr_list, false, gnat_entity);
- 	      if (Treat_As_Volatile (gnat_entity))
- 		{
- 		  const int quals
- 		    = TYPE_QUAL_VOLATILE
- 		      | (Is_Full_Access (gnat_entity) ? TYPE_QUAL_ATOMIC : 0);
- 		  gnu_type = change_qualified_type (gnu_type, quals);
- 		}
- 	      /* Make it artificial only if the base type was artificial too.
- 		 That's sort of "morally" true and will make it possible for
- 		 the debugger to look it up by name in DWARF, which is needed
- 		 in order to decode the packed array type.  */
- 	      tree gnu_tmp_decl
- 		= create_type_decl (gnu_entity_name, gnu_type,
- 				    !Comes_From_Source (Etype (gnat_entity))
- 				    && artificial_p, debug_info_p,
- 				    gnat_entity);
- 	      /* Save it as our equivalent in case the call below elaborates
- 		 this type again.  */
- 	      save_gnu_tree (gnat_entity, gnu_tmp_decl, false);
- 
- 	      gnu_type = gnat_to_gnu_type (PAT);
- 	      save_gnu_tree (gnat_entity, NULL_TREE, false);
- 
- 	      /* Set the ___XP suffix for GNAT encodings.  */
- 	      if (gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL)
- 		gnu_entity_name = DECL_NAME (TYPE_NAME (gnu_type));
- 
- 	      tree gnu_inner = gnu_type;
- 	      while (TREE_CODE (gnu_inner) == RECORD_TYPE
- 		     && (TYPE_JUSTIFIED_MODULAR_P (gnu_inner)
- 			 || TYPE_PADDING_P (gnu_inner)))
- 		gnu_inner = TREE_TYPE (TYPE_FIELDS (gnu_inner));
- 
- 	      /* We need to attach the index type to the type we just made so
- 		 that the actual bounds can later be put into a template.  */
- 	      if ((TREE_CODE (gnu_inner) == ARRAY_TYPE
- 		   && !TYPE_ACTUAL_BOUNDS (gnu_inner))
- 		  || (TREE_CODE (gnu_inner) == INTEGER_TYPE
- 		      && !TYPE_HAS_ACTUAL_BOUNDS_P (gnu_inner)))
- 		{
- 		  if (TREE_CODE (gnu_inner) == INTEGER_TYPE)
- 		    {
- 		      /* The TYPE_ACTUAL_BOUNDS field is overloaded with the
- 			 TYPE_MODULUS for modular types so we make an extra
- 			 subtype if necessary.  */
- 		      if (TYPE_MODULAR_P (gnu_inner))
- 			gnu_inner
- 			  = create_extra_subtype (gnu_inner,
- 						  TYPE_MIN_VALUE (gnu_inner),
- 						  TYPE_MAX_VALUE (gnu_inner));
- 
- 		      TYPE_HAS_ACTUAL_BOUNDS_P (gnu_inner) = 1;
- 
- 		      /* Check for other cases of overloading.  */
- 		      gcc_checking_assert (!TYPE_ACTUAL_BOUNDS (gnu_inner));
- 		    }
- 
- 		  for (Entity_Id gnat_index = First_Index (gnat_entity);
- 		       Present (gnat_index);
- 		       gnat_index = Next_Index (gnat_index))
- 		    SET_TYPE_ACTUAL_BOUNDS
- 		      (gnu_inner,
- 		       tree_cons (NULL_TREE,
- 				  get_unpadded_type (Etype (gnat_index)),
- 				  TYPE_ACTUAL_BOUNDS (gnu_inner)));
- 
- 		  if (Convention (gnat_entity) != Convention_Fortran)
- 		    SET_TYPE_ACTUAL_BOUNDS
- 		      (gnu_inner, nreverse (TYPE_ACTUAL_BOUNDS (gnu_inner)));
- 
- 		  if (TREE_CODE (gnu_type) == RECORD_TYPE
- 		      && TYPE_JUSTIFIED_MODULAR_P (gnu_type))
- 		    TREE_TYPE (TYPE_FIELDS (gnu_type)) = gnu_inner;
- 		}
- 	    }
- 	}
-       break;
- 
-     case E_String_Literal_Subtype:
-       /* Create the type for a string literal.  */
-       {
- 	Entity_Id gnat_full_type
- 	  = (Is_Private_Type (Etype (gnat_entity))
- 	     && Present (Full_View (Etype (gnat_entity)))
- 	     ? Full_View (Etype (gnat_entity)) : Etype (gnat_entity));
- 	tree gnu_string_type = get_unpadded_type (gnat_full_type);
- 	tree gnu_string_array_type
- 	  = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_string_type))));
- 	tree gnu_string_index_type
- 	  = get_base_type (TREE_TYPE (TYPE_INDEX_TYPE
- 				      (TYPE_DOMAIN (gnu_string_array_type))));
- 	tree gnu_lower_bound
- 	  = convert (gnu_string_index_type,
- 		     gnat_to_gnu (String_Literal_Low_Bound (gnat_entity)));
- 	tree gnu_length
- 	  = UI_To_gnu (String_Literal_Length (gnat_entity),
- 		       gnu_string_index_type);
- 	tree gnu_upper_bound
- 	  = build_binary_op (PLUS_EXPR, gnu_string_index_type,
- 			     gnu_lower_bound,
- 			     int_const_binop (MINUS_EXPR, gnu_length,
- 					      convert (gnu_string_index_type,
- 						       integer_one_node)));
- 	tree gnu_index_type
- 	  = create_index_type (convert (sizetype, gnu_lower_bound),
- 			       convert (sizetype, gnu_upper_bound),
- 			       create_range_type (gnu_string_index_type,
- 						  gnu_lower_bound,
- 						  gnu_upper_bound),
- 			       gnat_entity);
- 
- 	gnu_type
- 	  = build_nonshared_array_type (gnat_to_gnu_type
- 					(Component_Type (gnat_entity)),
- 					gnu_index_type);
- 	if (array_type_has_nonaliased_component (gnu_type, gnat_entity))
- 	  set_nonaliased_component_on_array_type (gnu_type);
- 	relate_alias_sets (gnu_type, gnu_string_type, ALIAS_SET_COPY);
-       }
-       break;
- 
-     /* Record Types and Subtypes
- 
-        A record type definition is transformed into the equivalent of a C
-        struct definition.  The fields that are the discriminants which are
-        found in the Full_Type_Declaration node and the elements of the
-        Component_List found in the Record_Type_Definition node.  The
-        Component_List can be a recursive structure since each Variant of
-        the Variant_Part of the Component_List has a Component_List.
- 
-        Processing of a record type definition comprises starting the list of
-        field declarations here from the discriminants and the calling the
-        function components_to_record to add the rest of the fields from the
-        component list and return the gnu type node.  The function
-        components_to_record will call itself recursively as it traverses
-        the tree.  */
- 
-     case E_Record_Type:
-       {
- 	Node_Id record_definition = Type_Definition (gnat_decl);
- 
- 	if (Has_Complex_Representation (gnat_entity))
- 	  {
- 	    const Node_Id first_component
- 	      = First (Component_Items (Component_List (record_definition)));
- 	    tree gnu_component_type
- 	      = get_unpadded_type (Etype (Defining_Entity (first_component)));
- 	    gnu_type = build_complex_type (gnu_component_type);
- 	    break;
- 	  }
- 
- 	Node_Id gnat_constr;
- 	Entity_Id gnat_field, gnat_parent_type;
- 	tree gnu_field, gnu_field_list = NULL_TREE;
- 	tree gnu_get_parent;
- 	/* Set PACKED in keeping with gnat_to_gnu_field.  */
- 	const int packed
- 	  = Is_Packed (gnat_entity)
- 	    ? 1
- 	    : Component_Alignment (gnat_entity) == Calign_Storage_Unit
- 	      ? -1
- 	      : 0;
- 	const bool has_align = Known_Alignment (gnat_entity);
- 	const bool has_discr = Has_Discriminants (gnat_entity);
- 	const bool is_extension
- 	  = (Is_Tagged_Type (gnat_entity)
- 	     && Nkind (record_definition) == N_Derived_Type_Definition);
- 	const bool has_rep
- 	  = is_extension
- 	    ? Has_Record_Rep_Clause (gnat_entity)
- 	    : Has_Specified_Layout (gnat_entity);
- 	const bool is_unchecked_union = Is_Unchecked_Union (gnat_entity);
- 	bool all_rep = has_rep;
- 
- 	/* See if all fields have a rep clause.  Stop when we find one
- 	   that doesn't.  */
- 	if (all_rep)
- 	  for (gnat_field = First_Entity (gnat_entity);
- 	       Present (gnat_field);
- 	       gnat_field = Next_Entity (gnat_field))
- 	    if ((Ekind (gnat_field) == E_Component
- 		 || Ekind (gnat_field) == E_Discriminant)
- 		&& No (Component_Clause (gnat_field)))
- 	      {
- 		all_rep = false;
- 		break;
- 	      }
- 
- 	/* If this is a record extension, go a level further to find the
- 	   record definition.  Also, verify we have a Parent_Subtype.  */
- 	if (is_extension)
- 	  {
- 	    if (!type_annotate_only
- 		|| Present (Record_Extension_Part (record_definition)))
- 	      record_definition = Record_Extension_Part (record_definition);
- 
- 	    gcc_assert (Present (Parent_Subtype (gnat_entity))
- 		        || type_annotate_only);
- 	  }
- 
- 	/* Make a node for the record type.  */
- 	gnu_type = make_node (tree_code_for_record_type (gnat_entity));
- 	TYPE_NAME (gnu_type) = gnu_entity_name;
- 	TYPE_PACKED (gnu_type) = (packed != 0) || has_align || has_rep;
- 	TYPE_REVERSE_STORAGE_ORDER (gnu_type)
- 	  = Reverse_Storage_Order (gnat_entity);
- 
- 	/* If the record type has discriminants, pointers to it may also point
- 	   to constrained subtypes of it, so mark it as may_alias for LTO.  */
- 	if (has_discr)
- 	  prepend_one_attribute
- 	    (&attr_list, ATTR_MACHINE_ATTRIBUTE,
- 	     get_identifier ("may_alias"), NULL_TREE,
- 	     gnat_entity);
- 
- 	process_attributes (&gnu_type, &attr_list, true, gnat_entity);
- 
- 	/* If we are not defining it, suppress expanding incomplete types.  */
- 	if (!definition)
- 	  {
- 	    defer_incomplete_level++;
- 	    this_deferred = true;
- 	  }
- 
- 	/* If both a size and rep clause were specified, put the size on
- 	   the record type now so that it can get the proper layout.  */
- 	if (has_rep && Known_RM_Size (gnat_entity))
- 	  TYPE_SIZE (gnu_type)
- 	    = UI_To_gnu (RM_Size (gnat_entity), bitsizetype);
- 
- 	/* Always set the alignment on the record type here so that it can
- 	   get the proper layout.  */
- 	if (has_align)
- 	  SET_TYPE_ALIGN (gnu_type,
- 			  validate_alignment (Alignment (gnat_entity),
- 					      gnat_entity, 0));
- 	else
- 	  {
- 	    SET_TYPE_ALIGN (gnu_type, 0);
- 
- 	    /* If a type needs strict alignment, then its type size will also
- 	       be the RM size (see below).  Cap the alignment if needed, lest
- 	       it may cause this type size to become too large.  */
- 	    if (Strict_Alignment (gnat_entity) && Known_RM_Size (gnat_entity))
- 	      {
- 		unsigned int max_size = UI_To_Int (RM_Size (gnat_entity));
- 		unsigned int max_align = max_size & -max_size;
- 		if (max_align < BIGGEST_ALIGNMENT)
- 		  TYPE_MAX_ALIGN (gnu_type) = max_align;
- 	      }
- 
- 	    /* Similarly if an Object_Size clause has been specified.  */
- 	    else if (Known_Esize (gnat_entity))
- 	      {
- 		unsigned int max_size = UI_To_Int (Esize (gnat_entity));
- 		unsigned int max_align = max_size & -max_size;
- 		if (max_align < BIGGEST_ALIGNMENT)
- 		  TYPE_MAX_ALIGN (gnu_type) = max_align;
- 	      }
- 	  }
- 
- 	/* If we have a Parent_Subtype, make a field for the parent.  If
- 	   this record has rep clauses, force the position to zero.  */
- 	if (Present (Parent_Subtype (gnat_entity)))
- 	  {
- 	    Entity_Id gnat_parent = Parent_Subtype (gnat_entity);
- 	    tree gnu_dummy_parent_type = make_node (RECORD_TYPE);
- 	    tree gnu_parent;
- 	    int parent_packed = 0;
- 
- 	    /* A major complexity here is that the parent subtype will
- 	       reference our discriminants in its Stored_Constraint list.
- 	       But those must reference the parent component of this record
- 	       which is precisely of the parent subtype we have not built yet!
- 	       To break the circle we first build a dummy COMPONENT_REF which
- 	       represents the "get to the parent" operation and initialize
- 	       each of those discriminants to a COMPONENT_REF of the above
- 	       dummy parent referencing the corresponding discriminant of the
- 	       base type of the parent subtype.  */
- 	    gnu_get_parent = build3 (COMPONENT_REF, gnu_dummy_parent_type,
- 				     build0 (PLACEHOLDER_EXPR, gnu_type),
- 				     build_decl (input_location,
- 						 FIELD_DECL, NULL_TREE,
- 						 gnu_dummy_parent_type),
- 				     NULL_TREE);
- 
- 	    if (has_discr)
- 	      for (gnat_field = First_Stored_Discriminant (gnat_entity);
- 		   Present (gnat_field);
- 		   gnat_field = Next_Stored_Discriminant (gnat_field))
- 		if (Present (Corresponding_Discriminant (gnat_field)))
- 		  {
- 		    tree gnu_field
- 		      = gnat_to_gnu_field_decl (Corresponding_Discriminant
- 						(gnat_field));
- 		    save_gnu_tree
- 		      (gnat_field,
- 		       build3 (COMPONENT_REF, TREE_TYPE (gnu_field),
- 			       gnu_get_parent, gnu_field, NULL_TREE),
- 		       true);
- 		  }
- 
- 	    /* Then we build the parent subtype.  If it has discriminants but
- 	       the type itself has unknown discriminants, this means that it
- 	       doesn't contain information about how the discriminants are
- 	       derived from those of the ancestor type, so it cannot be used
- 	       directly.  Instead it is built by cloning the parent subtype
- 	       of the underlying record view of the type, for which the above
- 	       derivation of discriminants has been made explicit.  */
- 	    if (Has_Discriminants (gnat_parent)
- 		&& Has_Unknown_Discriminants (gnat_entity))
- 	      {
- 		Entity_Id gnat_uview = Underlying_Record_View (gnat_entity);
- 
- 		/* If we are defining the type, the underlying record
- 		   view must already have been elaborated at this point.
- 		   Otherwise do it now as its parent subtype cannot be
- 		   technically elaborated on its own.  */
- 		if (definition)
- 		  gcc_assert (present_gnu_tree (gnat_uview));
- 		else
- 		  gnat_to_gnu_entity (gnat_uview, NULL_TREE, false);
- 
- 		gnu_parent = gnat_to_gnu_type (Parent_Subtype (gnat_uview));
- 
- 		/* Substitute the "get to the parent" of the type for that
- 		   of its underlying record view in the cloned type.  */
- 		for (gnat_field = First_Stored_Discriminant (gnat_uview);
- 		     Present (gnat_field);
- 		     gnat_field = Next_Stored_Discriminant (gnat_field))
- 		  if (Present (Corresponding_Discriminant (gnat_field)))
- 		    {
- 		      tree gnu_field = gnat_to_gnu_field_decl (gnat_field);
- 		      tree gnu_ref
- 			= build3 (COMPONENT_REF, TREE_TYPE (gnu_field),
- 				  gnu_get_parent, gnu_field, NULL_TREE);
- 		      gnu_parent
- 			= substitute_in_type (gnu_parent, gnu_field, gnu_ref);
- 		    }
- 	      }
- 	    else
- 	      gnu_parent = gnat_to_gnu_type (gnat_parent);
- 
- 	    /* The parent field needs strict alignment so, if it is to
- 	       be created with a component clause below, then we need
- 	       to apply the same adjustment as in gnat_to_gnu_field.  */
- 	    if (has_rep && TYPE_ALIGN (gnu_type) < TYPE_ALIGN (gnu_parent))
- 	      {
- 		/* ??? For historical reasons, we do it on strict-alignment
- 		   platforms only, where it is really required.  This means
- 		   that a confirming representation clause will change the
- 		   behavior of the compiler on the other platforms.  */
- 		if (STRICT_ALIGNMENT)
- 		  SET_TYPE_ALIGN (gnu_type, TYPE_ALIGN (gnu_parent));
- 		else
- 		  parent_packed
- 		    = adjust_packed (gnu_parent, gnu_type, parent_packed);
- 	      }
- 
- 	    /* Finally we fix up both kinds of twisted COMPONENT_REF we have
- 	       initially built.  The discriminants must reference the fields
- 	       of the parent subtype and not those of its base type for the
- 	       placeholder machinery to properly work.  */
- 	    if (has_discr)
- 	      {
- 		/* The actual parent subtype is the full view.  */
- 		if (Is_Private_Type (gnat_parent))
- 		  {
- 		    if (Present (Full_View (gnat_parent)))
- 		      gnat_parent = Full_View (gnat_parent);
- 		    else
- 		      gnat_parent = Underlying_Full_View (gnat_parent);
- 		  }
- 
- 		for (gnat_field = First_Stored_Discriminant (gnat_entity);
- 		     Present (gnat_field);
- 		     gnat_field = Next_Stored_Discriminant (gnat_field))
- 		  if (Present (Corresponding_Discriminant (gnat_field)))
- 		    {
- 		      Entity_Id field;
- 		      for (field = First_Stored_Discriminant (gnat_parent);
- 			   Present (field);
- 			   field = Next_Stored_Discriminant (field))
- 			if (same_discriminant_p (gnat_field, field))
- 			  break;
- 		      gcc_assert (Present (field));
- 		      TREE_OPERAND (get_gnu_tree (gnat_field), 1)
- 			= gnat_to_gnu_field_decl (field);
- 		    }
- 	      }
- 
- 	    /* The "get to the parent" COMPONENT_REF must be given its
- 	       proper type...  */
- 	    TREE_TYPE (gnu_get_parent) = gnu_parent;
- 
- 	    /* ...and reference the _Parent field of this record.  */
- 	    gnu_field
- 	      = create_field_decl (parent_name_id,
- 				   gnu_parent, gnu_type,
- 				   has_rep
- 				   ? TYPE_SIZE (gnu_parent) : NULL_TREE,
- 				   has_rep
- 				   ? bitsize_zero_node : NULL_TREE,
- 				   parent_packed, 1);
- 	    DECL_INTERNAL_P (gnu_field) = 1;
- 	    TREE_OPERAND (gnu_get_parent, 1) = gnu_field;
- 	    TYPE_FIELDS (gnu_type) = gnu_field;
- 	  }
- 
- 	/* Make the fields for the discriminants and put them into the record
- 	   unless it's an Unchecked_Union.  */
- 	if (has_discr)
- 	  for (gnat_field = First_Stored_Discriminant (gnat_entity);
- 	       Present (gnat_field);
- 	       gnat_field = Next_Stored_Discriminant (gnat_field))
- 	    {
- 	      /* If this is a record extension and this discriminant is the
- 		 renaming of another discriminant, we've handled it above.  */
- 	      if (is_extension
- 		  && Present (Corresponding_Discriminant (gnat_field)))
- 		continue;
- 
- 	      gnu_field
- 		= gnat_to_gnu_field (gnat_field, gnu_type, packed, definition,
- 				     debug_info_p);
- 
- 	      /* Make an expression using a PLACEHOLDER_EXPR from the
- 		 FIELD_DECL node just created and link that with the
- 		 corresponding GNAT defining identifier.  */
- 	      save_gnu_tree (gnat_field,
- 			     build3 (COMPONENT_REF, TREE_TYPE (gnu_field),
- 				     build0 (PLACEHOLDER_EXPR, gnu_type),
- 				     gnu_field, NULL_TREE),
- 			     true);
- 
- 	      if (!is_unchecked_union)
- 		{
- 		  DECL_CHAIN (gnu_field) = gnu_field_list;
- 		  gnu_field_list = gnu_field;
- 		}
- 	    }
- 
- 	/* If we have a derived untagged type that renames discriminants in
- 	   the parent type, the (stored) discriminants are just a copy of the
- 	   discriminants of the parent type.  This means that any constraints
- 	   added by the renaming in the derivation are disregarded as far as
- 	   the layout of the derived type is concerned.  To rescue them, we
- 	   change the type of the (stored) discriminants to a subtype with
- 	   the bounds of the type of the visible discriminants.  */
- 	if (has_discr
- 	    && !is_extension
- 	    && Stored_Constraint (gnat_entity) != No_Elist)
- 	  for (gnat_constr = First_Elmt (Stored_Constraint (gnat_entity));
- 	       gnat_constr != No_Elmt;
- 	       gnat_constr = Next_Elmt (gnat_constr))
- 	    if (Nkind (Node (gnat_constr)) == N_Identifier
- 		/* Ignore access discriminants.  */
- 		&& !Is_Access_Type (Etype (Node (gnat_constr)))
- 		&& Ekind (Entity (Node (gnat_constr))) == E_Discriminant)
- 	      {
- 		const Entity_Id gnat_discr = Entity (Node (gnat_constr));
- 		tree gnu_discr_type = gnat_to_gnu_type (Etype (gnat_discr));
- 		tree gnu_ref
- 		  = gnat_to_gnu_entity (Original_Record_Component (gnat_discr),
- 					NULL_TREE, false);
- 
- 		/* GNU_REF must be an expression using a PLACEHOLDER_EXPR built
- 		   just above for one of the stored discriminants.  */
- 		gcc_assert (TREE_TYPE (TREE_OPERAND (gnu_ref, 0)) == gnu_type);
- 
- 		if (gnu_discr_type != TREE_TYPE (gnu_ref))
- 		  TREE_TYPE (gnu_ref)
- 		    = create_extra_subtype (TREE_TYPE (gnu_ref),
- 					    TYPE_MIN_VALUE (gnu_discr_type),
- 					    TYPE_MAX_VALUE (gnu_discr_type));
- 	      }
- 
- 	/* If this is a derived type with discriminants and these discriminants
- 	   affect the initial shape it has inherited, factor them in.  */
- 	if (has_discr
- 	    && !is_extension
- 	    && !Has_Record_Rep_Clause (gnat_entity)
- 	    && Stored_Constraint (gnat_entity) != No_Elist
- 	    && (gnat_parent_type = Underlying_Type (Etype (gnat_entity)))
- 	    && Is_Record_Type (gnat_parent_type)
- 	    && Is_Unchecked_Union (gnat_entity)
- 	       == Is_Unchecked_Union (gnat_parent_type)
- 	    && No_Reordering (gnat_entity) == No_Reordering (gnat_parent_type))
- 	  {
- 	    tree gnu_parent_type
- 	      = TYPE_MAIN_VARIANT (gnat_to_gnu_type (gnat_parent_type));
- 
- 	    if (TYPE_IS_PADDING_P (gnu_parent_type))
- 	      gnu_parent_type = TREE_TYPE (TYPE_FIELDS (gnu_parent_type));
- 
- 	    vec<subst_pair> gnu_subst_list
- 	      = build_subst_list (gnat_entity, gnat_parent_type, definition);
- 
- 	    /* Set the layout of the type to match that of the parent type,
- 	       doing required substitutions.  If we are in minimal GNAT
- 	       encodings mode, we don't need debug info for the inner record
- 	       types, as they will be part of the embedding variant record's
- 	       debug info.  */
- 	    copy_and_substitute_in_layout
- 	      (gnat_entity, gnat_parent_type, gnu_type, gnu_parent_type,
- 	       gnu_subst_list,
- 	       debug_info_p && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL);
- 	  }
- 	else
- 	  {
- 	    /* Add the fields into the record type and finish it up.  */
- 	    components_to_record (Component_List (record_definition),
- 				  gnat_entity, gnu_field_list, gnu_type,
- 				  packed, definition, false, all_rep,
- 				  is_unchecked_union, artificial_p,
- 				  debug_info_p, false,
- 				  all_rep ? NULL_TREE : bitsize_zero_node,
- 				  NULL);
- 
- 	    /* Empty classes have the size of a storage unit in C++.  */
- 	    if (TYPE_SIZE (gnu_type) == bitsize_zero_node
- 		&& Convention (gnat_entity) == Convention_CPP)
- 	      {
- 		TYPE_SIZE (gnu_type) = bitsize_unit_node;
- 		TYPE_SIZE_UNIT (gnu_type) = size_one_node;
- 		compute_record_mode (gnu_type);
- 	      }
- 
- 	    /* If the type needs strict alignment, then no object of the type
- 	       may have a size smaller than the natural size, which means that
- 	       the RM size of the type is equal to the type size.  */
- 	    if (Strict_Alignment (gnat_entity))
- 	      SET_TYPE_ADA_SIZE (gnu_type, TYPE_SIZE (gnu_type));
- 
- 	    /* If there are entities in the chain corresponding to components
- 	       that we did not elaborate, ensure we elaborate their types if
- 	       they are itypes.  */
- 	    for (gnat_temp = First_Entity (gnat_entity);
- 		 Present (gnat_temp);
- 		 gnat_temp = Next_Entity (gnat_temp))
- 	      if ((Ekind (gnat_temp) == E_Component
- 		   || Ekind (gnat_temp) == E_Discriminant)
- 		  && Is_Itype (Etype (gnat_temp))
- 		  && !present_gnu_tree (gnat_temp))
- 		gnat_to_gnu_entity (Etype (gnat_temp), NULL_TREE, false);
- 	  }
- 
- 	/* Fill in locations of fields.  */
- 	annotate_rep (gnat_entity, gnu_type);
- 
- 	/* If this is a record type associated with an exception definition,
- 	   equate its fields to those of the standard exception type.  This
- 	   will make it possible to convert between them.  */
- 	if (gnu_entity_name == exception_data_name_id)
- 	  {
- 	    tree gnu_std_field;
- 	    for (gnu_field = TYPE_FIELDS (gnu_type),
- 		 gnu_std_field = TYPE_FIELDS (except_type_node);
- 		 gnu_field;
- 		 gnu_field = DECL_CHAIN (gnu_field),
- 		 gnu_std_field = DECL_CHAIN (gnu_std_field))
- 	      SET_DECL_ORIGINAL_FIELD_TO_FIELD (gnu_field, gnu_std_field);
- 	    gcc_assert (!gnu_std_field);
- 	  }
-       }
-       break;
- 
-     case E_Class_Wide_Subtype:
-       /* If an equivalent type is present, that is what we should use.
- 	 Otherwise, fall through to handle this like a record subtype
- 	 since it may have constraints.  */
-       if (gnat_equiv_type != gnat_entity)
- 	{
- 	  gnu_decl = gnat_to_gnu_entity (gnat_equiv_type, NULL_TREE, false);
- 	  maybe_present = true;
- 	  break;
- 	}
- 
-       /* ... fall through ... */
- 
-     case E_Record_Subtype:
-       /* If Cloned_Subtype is Present it means this record subtype has
- 	 identical layout to that type or subtype and we should use
- 	 that GCC type for this one.  The front-end guarantees that
- 	 the component list is shared.  */
-       if (Present (Cloned_Subtype (gnat_entity)))
- 	{
- 	  gnu_decl = gnat_to_gnu_entity (Cloned_Subtype (gnat_entity),
- 					 NULL_TREE, false);
- 	  gnat_annotate_type = Cloned_Subtype (gnat_entity);
- 	  maybe_present = true;
- 	  break;
- 	}
- 
-       /* Otherwise, first ensure the base type is elaborated.  Then, if we are
- 	 changing the type, make a new type with each field having the type of
- 	 the field in the new subtype but the position computed by transforming
- 	 every discriminant reference according to the constraints.  We don't
- 	 see any difference between private and non-private type here since
- 	 derivations from types should have been deferred until the completion
- 	 of the private type.  */
-       else
- 	{
- 	  Entity_Id gnat_base_type = Implementation_Base_Type (gnat_entity);
- 
- 	  if (!definition)
- 	    {
- 	      defer_incomplete_level++;
- 	      this_deferred = true;
- 	    }
- 
- 	  tree gnu_base_type
- 	    = TYPE_MAIN_VARIANT (gnat_to_gnu_type (gnat_base_type));
- 
- 	  if (present_gnu_tree (gnat_entity))
- 	    {
- 	      maybe_present = true;
- 	      break;
- 	    }
- 
- 	  /* When the subtype has discriminants and these discriminants affect
- 	     the initial shape it has inherited, factor them in.  But for an
- 	     Unchecked_Union (it must be an itype), just return the type.  */
- 	  if (Has_Discriminants (gnat_entity)
- 	      && Stored_Constraint (gnat_entity) != No_Elist
- 	      && Is_Record_Type (gnat_base_type)
- 	      && !Is_Unchecked_Union (gnat_base_type))
- 	    {
- 	      vec<subst_pair> gnu_subst_list
- 		= build_subst_list (gnat_entity, gnat_base_type, definition);
- 	      tree gnu_unpad_base_type;
- 
- 	      gnu_type = make_node (RECORD_TYPE);
- 	      TYPE_NAME (gnu_type) = gnu_entity_name;
- 	      TYPE_PACKED (gnu_type) = TYPE_PACKED (gnu_base_type);
- 	      TYPE_REVERSE_STORAGE_ORDER (gnu_type)
- 		= Reverse_Storage_Order (gnat_entity);
- 	      process_attributes (&gnu_type, &attr_list, true, gnat_entity);
- 
- 	      /* Set the size, alignment and alias set of the type to match
- 		 those of the base type, doing required substitutions.  */
- 	      copy_and_substitute_in_size (gnu_type, gnu_base_type,
- 					   gnu_subst_list);
- 
- 	      if (TYPE_IS_PADDING_P (gnu_base_type))
- 		gnu_unpad_base_type = TREE_TYPE (TYPE_FIELDS (gnu_base_type));
- 	      else
- 		gnu_unpad_base_type = gnu_base_type;
- 
- 	      /* Set the layout of the type to match that of the base type,
- 	         doing required substitutions.  We will output debug info
- 	         manually below so pass false as last argument.  */
- 	      copy_and_substitute_in_layout (gnat_entity, gnat_base_type,
- 					     gnu_type, gnu_unpad_base_type,
- 					     gnu_subst_list, false);
- 
- 	      /* Fill in locations of fields.  */
- 	      annotate_rep (gnat_entity, gnu_type);
- 
- 	      /* If debugging information is being written for the type and if
- 		 we are asked to output such encodings, write a record that
- 		 shows what we are a subtype of and also make a variable that
- 		 indicates our size, if still variable.  */
- 	      if (debug_info_p
- 		  && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL)
- 		{
- 		  tree gnu_subtype_marker = make_node (RECORD_TYPE);
- 		  tree gnu_unpad_base_name
- 		    = TYPE_IDENTIFIER (gnu_unpad_base_type);
- 		  tree gnu_size_unit = TYPE_SIZE_UNIT (gnu_type);
- 
- 		  TYPE_NAME (gnu_subtype_marker)
- 		    = create_concat_name (gnat_entity, "XVS");
- 		  finish_record_type (gnu_subtype_marker,
- 				      create_field_decl (gnu_unpad_base_name,
- 							 build_reference_type
- 							 (gnu_unpad_base_type),
- 							 gnu_subtype_marker,
- 							 NULL_TREE, NULL_TREE,
- 							 0, 0),
- 				      0, true);
- 
- 		  add_parallel_type (gnu_type, gnu_subtype_marker);
- 
- 		  if (definition
- 		      && TREE_CODE (gnu_size_unit) != INTEGER_CST
- 		      && !CONTAINS_PLACEHOLDER_P (gnu_size_unit))
- 		    TYPE_SIZE_UNIT (gnu_subtype_marker)
- 		      = create_var_decl (create_concat_name (gnat_entity,
- 							     "XVZ"),
- 					 NULL_TREE, sizetype, gnu_size_unit,
- 					 false, false, false, false, false,
- 					 true, debug_info_p,
- 					 NULL, gnat_entity);
- 		}
- 
- 	      /* Or else, if the subtype is artificial and encodings are not
- 		 used, use the base record type as the debug type.  */
- 	      else if (debug_info_p
- 		       && artificial_p
- 		       && gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
- 		SET_TYPE_DEBUG_TYPE (gnu_type, gnu_unpad_base_type);
- 	    }
- 
- 	  /* Otherwise, go down all the components in the new type and make
- 	     them equivalent to those in the base type.  */
- 	  else
- 	    {
- 	      gnu_type = gnu_base_type;
- 
- 	      for (gnat_temp = First_Entity (gnat_entity);
- 		   Present (gnat_temp);
- 		   gnat_temp = Next_Entity (gnat_temp))
- 		if ((Ekind (gnat_temp) == E_Discriminant
- 		     && !Is_Unchecked_Union (gnat_base_type))
- 		    || Ekind (gnat_temp) == E_Component)
- 		  save_gnu_tree (gnat_temp,
- 				 gnat_to_gnu_field_decl
- 				 (Original_Record_Component (gnat_temp)),
- 				 false);
- 	    }
- 	}
-       break;
- 
-     case E_Access_Subprogram_Type:
-     case E_Anonymous_Access_Subprogram_Type:
-       /* Use the special descriptor type for dispatch tables if needed,
- 	 that is to say for the Prim_Ptr of a-tags.ads and its clones.
- 	 Note that we are only required to do so for static tables in
- 	 order to be compatible with the C++ ABI, but Ada 2005 allows
- 	 to extend library level tagged types at the local level so
- 	 we do it in the non-static case as well.  */
-       if (TARGET_VTABLE_USES_DESCRIPTORS
- 	  && Is_Dispatch_Table_Entity (gnat_entity))
- 	{
- 	    gnu_type = fdesc_type_node;
- 	    gnu_size = TYPE_SIZE (gnu_type);
- 	    break;
- 	}
- 
-       /* ... fall through ... */
- 
-     case E_Allocator_Type:
-     case E_Access_Type:
-     case E_Access_Attribute_Type:
-     case E_Anonymous_Access_Type:
-     case E_General_Access_Type:
-       {
- 	/* The designated type and its equivalent type for gigi.  */
- 	Entity_Id gnat_desig_type = Directly_Designated_Type (gnat_entity);
- 	Entity_Id gnat_desig_equiv = Gigi_Equivalent_Type (gnat_desig_type);
- 	/* Whether it comes from a limited with.  */
- 	const bool is_from_limited_with
- 	  = (Is_Incomplete_Type (gnat_desig_equiv)
- 	     && From_Limited_With (gnat_desig_equiv));
- 	/* Whether it is a completed Taft Amendment type.  Such a type is to
- 	   be treated as coming from a limited with clause if it is not in
- 	   the main unit, i.e. we break potential circularities here in case
- 	   the body of an external unit is loaded for inter-unit inlining.  */
-         const bool is_completed_taft_type
- 	  = (Is_Incomplete_Type (gnat_desig_equiv)
- 	     && Has_Completion_In_Body (gnat_desig_equiv)
- 	     && Present (Full_View (gnat_desig_equiv)));
- 	/* The "full view" of the designated type.  If this is an incomplete
- 	   entity from a limited with, treat its non-limited view as the full
- 	   view.  Otherwise, if this is an incomplete or private type, use the
- 	   full view.  In the former case, we might point to a private type,
- 	   in which case, we need its full view.  Also, we want to look at the
- 	   actual type used for the representation, so this takes a total of
- 	   three steps.  */
- 	Entity_Id gnat_desig_full_direct_first
- 	  = (is_from_limited_with
- 	     ? Non_Limited_View (gnat_desig_equiv)
- 	     : (Is_Incomplete_Or_Private_Type (gnat_desig_equiv)
- 		? Full_View (gnat_desig_equiv) : Empty));
- 	Entity_Id gnat_desig_full_direct
- 	  = ((is_from_limited_with
- 	      && Present (gnat_desig_full_direct_first)
- 	      && Is_Private_Type (gnat_desig_full_direct_first))
- 	     ? Full_View (gnat_desig_full_direct_first)
- 	     : gnat_desig_full_direct_first);
- 	Entity_Id gnat_desig_full
- 	  = Gigi_Equivalent_Type (gnat_desig_full_direct);
- 	/* The type actually used to represent the designated type, either
- 	   gnat_desig_full or gnat_desig_equiv.  */
- 	Entity_Id gnat_desig_rep;
- 	/* We want to know if we'll be seeing the freeze node for any
- 	   incomplete type we may be pointing to.  */
- 	const bool in_main_unit
- 	  = (Present (gnat_desig_full)
- 	     ? In_Extended_Main_Code_Unit (gnat_desig_full)
- 	     : In_Extended_Main_Code_Unit (gnat_desig_type));
- 	/* True if we make a dummy type here.  */
- 	bool made_dummy = false;
- 	/* The mode to be used for the pointer type.  */
- 	scalar_int_mode p_mode;
- 	/* The GCC type used for the designated type.  */
- 	tree gnu_desig_type = NULL_TREE;
- 
- 	if (!int_mode_for_size (esize, 0).exists (&p_mode)
- 	    || !targetm.valid_pointer_mode (p_mode))
- 	  p_mode = ptr_mode;
- 
- 	/* If either the designated type or its full view is an unconstrained
- 	   array subtype, replace it with the type it's a subtype of.  This
- 	   avoids problems with multiple copies of unconstrained array types.
- 	   Likewise, if the designated type is a subtype of an incomplete
- 	   record type, use the parent type to avoid order of elaboration
- 	   issues.  This can lose some code efficiency, but there is no
- 	   alternative.  */
- 	if (Ekind (gnat_desig_equiv) == E_Array_Subtype
- 	    && !Is_Constrained (gnat_desig_equiv))
- 	  gnat_desig_equiv = Etype (gnat_desig_equiv);
- 	if (Present (gnat_desig_full)
- 	    && ((Ekind (gnat_desig_full) == E_Array_Subtype
- 		 && !Is_Constrained (gnat_desig_full))
- 		|| (Ekind (gnat_desig_full) == E_Record_Subtype
- 		    && Ekind (Etype (gnat_desig_full)) == E_Record_Type)))
- 	  gnat_desig_full = Etype (gnat_desig_full);
- 
- 	/* Set the type that's the representation of the designated type.  */
- 	gnat_desig_rep
- 	  = Present (gnat_desig_full) ? gnat_desig_full : gnat_desig_equiv;
- 
- 	/* If we already know what the full type is, use it.  */
- 	if (Present (gnat_desig_full) && present_gnu_tree (gnat_desig_full))
- 	  gnu_desig_type = TREE_TYPE (get_gnu_tree (gnat_desig_full));
- 
- 	/* Get the type of the thing we are to point to and build a pointer to
- 	   it.  If it is a reference to an incomplete or private type with a
- 	   full view that is a record, an array or an access, make a dummy type
- 	   and get the actual type later when we have verified it is safe.  */
- 	else if ((!in_main_unit
- 		  && !present_gnu_tree (gnat_desig_equiv)
- 		  && Present (gnat_desig_full)
- 		  && (Is_Record_Type (gnat_desig_full)
- 		      || Is_Array_Type (gnat_desig_full)
- 		      || Is_Access_Type (gnat_desig_full)))
- 		 /* Likewise if this is a reference to a record, an array or a
- 		    subprogram type and we are to defer elaborating incomplete
- 		    types.  We do this because this access type may be the full
- 		    view of a private type.  */
- 		 || ((!in_main_unit || imported_p)
- 		     && defer_incomplete_level != 0
- 		     && !present_gnu_tree (gnat_desig_equiv)
- 		     && (Is_Record_Type (gnat_desig_rep)
- 			 || Is_Array_Type (gnat_desig_rep)
- 			 || Ekind (gnat_desig_rep) == E_Subprogram_Type))
- 		 /* If this is a reference from a limited_with type back to our
- 		    main unit and there's a freeze node for it, either we have
- 		    already processed the declaration and made the dummy type,
- 		    in which case we just reuse the latter, or we have not yet,
- 		    in which case we make the dummy type and it will be reused
- 		    when the declaration is finally processed.  In both cases,
- 		    the pointer eventually created below will be automatically
- 		    adjusted when the freeze node is processed.  */
- 		 || (in_main_unit
- 		     && is_from_limited_with
- 		     && Present (Freeze_Node (gnat_desig_rep))))
- 	  {
- 	    gnu_desig_type = make_dummy_type (gnat_desig_equiv);
- 	    made_dummy = true;
- 	  }
- 
- 	/* Otherwise handle the case of a pointer to itself.  */
- 	else if (gnat_desig_equiv == gnat_entity)
- 	  {
- 	    gnu_type
- 	      = build_pointer_type_for_mode (void_type_node, p_mode,
- 					     No_Strict_Aliasing (gnat_entity));
- 	    TREE_TYPE (gnu_type) = TYPE_POINTER_TO (gnu_type) = gnu_type;
- 	  }
- 
- 	/* If expansion is disabled, the equivalent type of a concurrent type
- 	   is absent, so we use the void pointer type.  */
- 	else if (type_annotate_only && No (gnat_desig_equiv))
- 	  gnu_type = ptr_type_node;
- 
- 	/* If the ultimately designated type is an incomplete type with no full
- 	   view, we use the void pointer type in LTO mode to avoid emitting a
- 	   dummy type in the GIMPLE IR.  We cannot do that in regular mode as
- 	   the name of the dummy type in used by GDB for a global lookup.  */
- 	else if (Ekind (gnat_desig_rep) == E_Incomplete_Type
- 		 && No (Full_View (gnat_desig_rep))
- 		 && flag_generate_lto)
- 	  gnu_type = ptr_type_node;
- 
- 	/* Finally, handle the default case where we can just elaborate our
- 	   designated type.  */
- 	else
- 	  gnu_desig_type = gnat_to_gnu_type (gnat_desig_equiv);
- 
- 	/* It is possible that a call to gnat_to_gnu_type above resolved our
- 	   type.  If so, just return it.  */
- 	if (present_gnu_tree (gnat_entity))
- 	  {
- 	    maybe_present = true;
- 	    break;
- 	  }
- 
- 	/* Access-to-unconstrained-array types need a special treatment.  */
- 	if (Is_Array_Type (gnat_desig_rep) && !Is_Constrained (gnat_desig_rep))
- 	  {
- 	    /* If the processing above got something that has a pointer, then
- 	       we are done.  This could have happened either because the type
- 	       was elaborated or because somebody else executed the code.  */
- 	    if (!TYPE_POINTER_TO (gnu_desig_type))
- 	      build_dummy_unc_pointer_types (gnat_desig_equiv, gnu_desig_type);
- 
- 	    gnu_type = TYPE_POINTER_TO (gnu_desig_type);
- 	  }
- 
- 	/* If we haven't done it yet, build the pointer type the usual way.  */
- 	else if (!gnu_type)
- 	  {
- 	    /* Modify the designated type if we are pointing only to constant
- 	       objects, but don't do it for a dummy type.  */
- 	    if (Is_Access_Constant (gnat_entity)
- 		&& !TYPE_IS_DUMMY_P (gnu_desig_type))
- 	      gnu_desig_type
- 		= change_qualified_type (gnu_desig_type, TYPE_QUAL_CONST);
- 
- 	    gnu_type
- 	      = build_pointer_type_for_mode (gnu_desig_type, p_mode,
- 					     No_Strict_Aliasing (gnat_entity));
- 	  }
- 
- 	/* If the designated type is not declared in the main unit and we made
- 	   a dummy node for it, save our definition, elaborate the actual type
- 	   and replace the dummy type we made with the actual one.  But if we
- 	   are to defer actually looking up the actual type, make an entry in
- 	   the deferred list instead.  If this is from a limited with, we may
- 	   have to defer until the end of the current unit.  */
- 	if (!in_main_unit && made_dummy)
- 	  {
- 	    if (TYPE_IS_FAT_POINTER_P (gnu_type) && esize == POINTER_SIZE)
- 	      gnu_type
- 		= build_pointer_type (TYPE_OBJECT_RECORD_TYPE (gnu_desig_type));
- 
- 	    process_attributes (&gnu_type, &attr_list, false, gnat_entity);
- 	    gnu_decl = create_type_decl (gnu_entity_name, gnu_type,
- 					 artificial_p, debug_info_p,
- 					 gnat_entity);
- 	    this_made_decl = true;
- 	    gnu_type = TREE_TYPE (gnu_decl);
- 	    save_gnu_tree (gnat_entity, gnu_decl, false);
- 	    saved = true;
- 
- 	    if (defer_incomplete_level == 0
- 		&& !is_from_limited_with
- 		&& !is_completed_taft_type)
- 	      {
- 		update_pointer_to (TYPE_MAIN_VARIANT (gnu_desig_type),
- 				   gnat_to_gnu_type (gnat_desig_equiv));
- 	      }
- 	    else
- 	      {
- 		struct incomplete *p = XNEW (struct incomplete);
- 		struct incomplete **head
- 		  = (is_from_limited_with || is_completed_taft_type
- 		     ? &defer_limited_with_list : &defer_incomplete_list);
- 
- 		p->old_type = gnu_desig_type;
- 		p->full_type = gnat_desig_equiv;
- 		p->next = *head;
- 		*head = p;
- 	      }
- 	  }
-       }
-       break;
- 
-     case E_Access_Protected_Subprogram_Type:
-     case E_Anonymous_Access_Protected_Subprogram_Type:
-       /* If we are just annotating types and have no equivalent record type,
- 	 just use the void pointer type.  */
-       if (type_annotate_only && gnat_equiv_type == gnat_entity)
- 	gnu_type = ptr_type_node;
- 
-       /* The run-time representation is the equivalent type.  */
-       else
- 	{
- 	  gnu_type = gnat_to_gnu_type (gnat_equiv_type);
- 	  maybe_present = true;
- 	}
- 
-       /* The designated subtype must be elaborated as well, if it does
- 	 not have its own freeze node.  */
-       if (Is_Itype (Directly_Designated_Type (gnat_entity))
- 	  && !present_gnu_tree (Directly_Designated_Type (gnat_entity))
- 	  && No (Freeze_Node (Directly_Designated_Type (gnat_entity)))
- 	  && !Is_Record_Type (Scope (Directly_Designated_Type (gnat_entity))))
- 	gnat_to_gnu_entity (Directly_Designated_Type (gnat_entity),
- 			    NULL_TREE, false);
- 
-       break;
- 
-     case E_Access_Subtype:
-       /* We treat this as identical to its base type; any constraint is
- 	 meaningful only to the front-end.  */
-       gnu_decl = gnat_to_gnu_entity (gnat_equiv_type, NULL_TREE, false);
-       maybe_present = true;
- 
-       /* The designated subtype must be elaborated as well, if it does
- 	 not have its own freeze node.  But designated subtypes created
- 	 for constrained components of records with discriminants are
- 	 not frozen by the front-end and not elaborated here, because
- 	 their use may appear before the base type is frozen and it is
- 	 not clear that they are needed in gigi.  With the current model,
- 	 there is no correct place where they could be elaborated.  */
-       if (Is_Itype (Directly_Designated_Type (gnat_entity))
- 	  && !present_gnu_tree (Directly_Designated_Type (gnat_entity))
- 	  && Is_Frozen (Directly_Designated_Type (gnat_entity))
- 	  && No (Freeze_Node (Directly_Designated_Type (gnat_entity))))
- 	{
- 	  /* If we are to defer elaborating incomplete types, make a dummy
- 	     type node and elaborate it later.  */
- 	  if (defer_incomplete_level != 0)
- 	    {
- 	      struct incomplete *p = XNEW (struct incomplete);
- 
- 	      p->old_type
- 		= make_dummy_type (Directly_Designated_Type (gnat_entity));
- 	      p->full_type = Directly_Designated_Type (gnat_entity);
- 	      p->next = defer_incomplete_list;
- 	      defer_incomplete_list = p;
- 	    }
- 	  else if (!Is_Incomplete_Or_Private_Type
- 		      (Base_Type (Directly_Designated_Type (gnat_entity))))
- 	    gnat_to_gnu_entity (Directly_Designated_Type (gnat_entity),
- 				NULL_TREE, false);
- 	}
-       break;
- 
-     /* Subprogram Entities
- 
-        The following access functions are defined for subprograms:
- 
- 		Etype       	Return type or Standard_Void_Type.
- 		First_Formal	The first formal parameter.
- 		Is_Imported     Indicates that the subprogram has appeared in
- 				an INTERFACE or IMPORT pragma.  For now we
- 				assume that the external language is C.
- 		Is_Exported     Likewise but for an EXPORT pragma.
- 		Is_Inlined      True if the subprogram is to be inlined.
- 
-        Each parameter is first checked by calling must_pass_by_ref on its
-        type to determine if it is passed by reference.  For parameters which
-        are copied in, if they are Ada In Out or Out parameters, their return
-        value becomes part of a record which becomes the return type of the
-        function (C function - note that this applies only to Ada procedures
-        so there is no Ada return type).  Additional code to store back the
-        parameters will be generated on the caller side.  This transformation
-        is done here, not in the front-end.
- 
-        The intended result of the transformation can be seen from the
-        equivalent source rewritings that follow:
- 
- 						struct temp {int a,b};
-        procedure P (A,B: In Out ...) is		temp P (int A,B)
-        begin					{
- 	 ..					  ..
-        end P;					  return {A,B};
- 						}
- 
- 						temp t;
-        P(X,Y);					t = P(X,Y);
- 						X = t.a , Y = t.b;
- 
-        For subprogram types we need to perform mainly the same conversions to
-        GCC form that are needed for procedures and function declarations.  The
-        only difference is that at the end, we make a type declaration instead
-        of a function declaration.  */
- 
-     case E_Subprogram_Type:
-     case E_Function:
-     case E_Procedure:
-       {
- 	tree gnu_ext_name
- 	  = gnu_ext_name_for_subprog (gnat_entity, gnu_entity_name);
- 	const enum inline_status_t inline_status
- 	  = inline_status_for_subprog (gnat_entity);
- 	bool public_flag = Is_Public (gnat_entity) || imported_p;
- 	/* Subprograms marked both Intrinsic and Always_Inline need not
- 	   have a body of their own.  */
- 	bool extern_flag
- 	  = ((Is_Public (gnat_entity) && !definition)
- 	     || imported_p
- 	     || (Convention (gnat_entity) == Convention_Intrinsic
- 		 && Has_Pragma_Inline_Always (gnat_entity)));
- 	tree gnu_param_list;
- 
- 	/* A parameter may refer to this type, so defer completion of any
- 	   incomplete types.  */
- 	if (kind == E_Subprogram_Type && !definition)
- 	  {
- 	    defer_incomplete_level++;
- 	    this_deferred = true;
- 	  }
- 
- 	/* If the subprogram has an alias, it is probably inherited, so
- 	   we can use the original one.  If the original "subprogram"
- 	   is actually an enumeration literal, it may be the first use
- 	   of its type, so we must elaborate that type now.  */
- 	if (Present (Alias (gnat_entity)))
- 	  {
- 	    const Entity_Id gnat_alias = Alias (gnat_entity);
- 
- 	    if (Ekind (gnat_alias) == E_Enumeration_Literal)
- 	      gnat_to_gnu_entity (Etype (gnat_alias), NULL_TREE, false);
- 
- 	    gnu_decl = gnat_to_gnu_entity (gnat_alias, gnu_expr, false);
- 
- 	    /* Elaborate any itypes in the parameters of this entity.  */
- 	    for (gnat_temp = First_Formal_With_Extras (gnat_entity);
- 		 Present (gnat_temp);
- 		 gnat_temp = Next_Formal_With_Extras (gnat_temp))
- 	      if (Is_Itype (Etype (gnat_temp)))
- 		gnat_to_gnu_entity (Etype (gnat_temp), NULL_TREE, false);
- 
- 	    /* Materialize renamed subprograms in the debugging information
- 	       when the renamed object is known at compile time; we consider
- 	       such renamings as imported declarations.
- 
- 	       Because the parameters in generic instantiations are generally
- 	       materialized as renamings, we often end up having both the
- 	       renamed subprogram and the renaming in the same context and with
- 	       the same name; in this case, renaming is both useless debug-wise
- 	       and potentially harmful as name resolution in the debugger could
- 	       return twice the same entity!  So avoid this case.  */
- 	    if (debug_info_p
- 		&& !artificial_p
- 		&& (Ekind (gnat_alias) == E_Function
- 		    || Ekind (gnat_alias) == E_Procedure)
- 		&& !(get_debug_scope (gnat_entity, NULL)
- 		     == get_debug_scope (gnat_alias, NULL)
- 		     && Name_Equals (Chars (gnat_entity), Chars (gnat_alias)))
- 		&& TREE_CODE (gnu_decl) == FUNCTION_DECL)
- 	      {
- 		tree decl = build_decl (input_location, IMPORTED_DECL,
- 					gnu_entity_name, void_type_node);
- 		IMPORTED_DECL_ASSOCIATED_DECL (decl) = gnu_decl;
- 		gnat_pushdecl (decl, gnat_entity);
- 	      }
- 
- 	    break;
- 	  }
- 
- 	/* Get the GCC tree for the (underlying) subprogram type.  If the
- 	   entity is an actual subprogram, also get the parameter list.  */
- 	gnu_type
- 	  = gnat_to_gnu_subprog_type (gnat_entity, definition, debug_info_p,
- 				      &gnu_param_list);
- 	if (DECL_P (gnu_type))
- 	  {
- 	    gnu_decl = gnu_type;
- 	    gnu_type = TREE_TYPE (gnu_decl);
- 	    break;
- 	  }
- 
- 	/* Deal with platform-specific calling conventions.  */
- 	if (Has_Stdcall_Convention (gnat_entity))
- 	  prepend_one_attribute
- 	    (&attr_list, ATTR_MACHINE_ATTRIBUTE,
- 	     get_identifier ("stdcall"), NULL_TREE,
- 	     gnat_entity);
- 
- 	/* If we should request stack realignment for a foreign convention
- 	   subprogram, do so.  Note that this applies to task entry points
- 	   in particular.  */
- 	if (FOREIGN_FORCE_REALIGN_STACK && foreign)
- 	  prepend_one_attribute
- 	    (&attr_list, ATTR_MACHINE_ATTRIBUTE,
- 	     get_identifier ("force_align_arg_pointer"), NULL_TREE,
- 	     gnat_entity);
- 
- 	/* Deal with a pragma Linker_Section on a subprogram.  */
- 	if ((kind == E_Function || kind == E_Procedure)
- 	    && Present (Linker_Section_Pragma (gnat_entity)))
- 	  prepend_one_attribute_pragma (&attr_list,
- 					Linker_Section_Pragma (gnat_entity));
- 
- 	/* If we are defining the subprogram and it has an Address clause
- 	   we must get the address expression from the saved GCC tree for the
- 	   subprogram if it has a Freeze_Node.  Otherwise, we elaborate
- 	   the address expression here since the front-end has guaranteed
- 	   in that case that the elaboration has no effects.  If there is
- 	   an Address clause and we are not defining the object, just
- 	   make it a constant.  */
- 	if (Present (Address_Clause (gnat_entity)))
- 	  {
- 	    tree gnu_address = NULL_TREE;
- 
- 	    if (definition)
- 	      gnu_address
- 		= (present_gnu_tree (gnat_entity)
- 		   ? get_gnu_tree (gnat_entity)
- 		   : gnat_to_gnu (Expression (Address_Clause (gnat_entity))));
- 
- 	    save_gnu_tree (gnat_entity, NULL_TREE, false);
- 
- 	    /* Convert the type of the object to a reference type that can
- 	       alias everything as per RM 13.3(19).  */
- 	    gnu_type
- 	      = build_reference_type_for_mode (gnu_type, ptr_mode, true);
- 	    if (gnu_address)
- 	      gnu_address = convert (gnu_type, gnu_address);
- 
- 	    gnu_decl
- 	      = create_var_decl (gnu_entity_name, gnu_ext_name, gnu_type,
- 				 gnu_address, false, Is_Public (gnat_entity),
- 				 extern_flag, false, false, artificial_p,
- 				 debug_info_p, NULL, gnat_entity);
- 	    DECL_BY_REF_P (gnu_decl) = 1;
- 	  }
- 
- 	/* If this is a mere subprogram type, just create the declaration.  */
- 	else if (kind == E_Subprogram_Type)
- 	  {
- 	    process_attributes (&gnu_type, &attr_list, false, gnat_entity);
- 
- 	    gnu_decl
- 	      = create_type_decl (gnu_entity_name, gnu_type, artificial_p,
- 				  debug_info_p, gnat_entity);
- 	  }
- 
- 	/* Otherwise create the subprogram declaration with the external name,
- 	   the type and the parameter list.  However, if this a reference to
- 	   the allocation routines, reuse the canonical declaration nodes as
- 	   they come with special properties.  */
- 	else
- 	  {
- 	    if (extern_flag && gnu_ext_name == DECL_NAME (malloc_decl))
- 	      gnu_decl = malloc_decl;
- 	    else if (extern_flag && gnu_ext_name == DECL_NAME (realloc_decl))
- 	      gnu_decl = realloc_decl;
- 	    else
- 	      {
- 		gnu_decl
- 		  = create_subprog_decl (gnu_entity_name, gnu_ext_name,
- 					 gnu_type, gnu_param_list,
- 					 inline_status, public_flag,
- 					 extern_flag, artificial_p,
- 					 debug_info_p,
- 					 definition && imported_p, attr_list,
- 					 gnat_entity);
- 
- 		DECL_STUBBED_P (gnu_decl)
- 		  = (Convention (gnat_entity) == Convention_Stubbed);
- 	      }
- 	  }
-       }
-       break;
- 
-     case E_Incomplete_Type:
-     case E_Incomplete_Subtype:
-     case E_Private_Type:
-     case E_Private_Subtype:
-     case E_Limited_Private_Type:
-     case E_Limited_Private_Subtype:
-     case E_Record_Type_With_Private:
-     case E_Record_Subtype_With_Private:
-       {
- 	const bool is_from_limited_with
- 	  = (IN (kind, Incomplete_Kind) && From_Limited_With (gnat_entity));
- 	/* Get the "full view" of this entity.  If this is an incomplete
- 	   entity from a limited with, treat its non-limited view as the
- 	   full view.  Otherwise, use either the full view or the underlying
- 	   full view, whichever is present.  This is used in all the tests
- 	   below.  */
- 	const Entity_Id full_view
- 	  = is_from_limited_with
- 	    ? Non_Limited_View (gnat_entity)
- 	    : Present (Full_View (gnat_entity))
- 	      ? Full_View (gnat_entity)
- 	      : IN (kind, Private_Kind)
- 		? Underlying_Full_View (gnat_entity)
- 		: Empty;
- 
- 	/* If this is an incomplete type with no full view, it must be a Taft
- 	   Amendment type or an incomplete type coming from a limited context,
- 	   in which cases we return a dummy type.  Otherwise, we just get the
- 	   type from its Etype.  */
- 	if (No (full_view))
- 	  {
- 	    if (kind == E_Incomplete_Type)
- 	      {
- 		gnu_type = make_dummy_type (gnat_entity);
- 		gnu_decl = TYPE_STUB_DECL (gnu_type);
- 	      }
- 	    else
- 	      {
- 		gnu_decl
- 		  = gnat_to_gnu_entity (Etype (gnat_entity), NULL_TREE, false);
- 		maybe_present = true;
- 	      }
- 	  }
- 
- 	/* Or else, if we already made a type for the full view, reuse it.  */
- 	else if (present_gnu_tree (full_view))
- 	  gnu_decl = get_gnu_tree (full_view);
- 
- 	/* Or else, if we are not defining the type or there is no freeze
- 	   node on it, get the type for the full view.  Likewise if this is
- 	   a limited_with'ed type not declared in the main unit, which can
- 	   happen for incomplete formal types instantiated on a type coming
- 	   from a limited_with clause.  */
- 	else if (!definition
- 		 || No (Freeze_Node (full_view))
- 		 || (is_from_limited_with
- 		     && !In_Extended_Main_Code_Unit (full_view)))
- 	  {
- 	    gnu_decl = gnat_to_gnu_entity (full_view, NULL_TREE, false);
- 	    maybe_present = true;
- 	  }
- 
- 	/* Otherwise, make a dummy type entry which will be replaced later.
- 	   Save it as the full declaration's type so we can do any needed
- 	   updates when we see it.  */
- 	else
- 	  {
- 	    gnu_type = make_dummy_type (gnat_entity);
- 	    gnu_decl = TYPE_STUB_DECL (gnu_type);
- 	    if (Has_Completion_In_Body (gnat_entity))
- 	      DECL_TAFT_TYPE_P (gnu_decl) = 1;
- 	    save_gnu_tree (full_view, gnu_decl, false);
- 	  }
-       }
-       break;
- 
-     case E_Class_Wide_Type:
-       /* Class-wide types are always transformed into their root type.  */
-       gnu_decl = gnat_to_gnu_entity (gnat_equiv_type, NULL_TREE, false);
-       maybe_present = true;
-       break;
- 
-     case E_Protected_Type:
-     case E_Protected_Subtype:
-     case E_Task_Type:
-     case E_Task_Subtype:
-       /* If we are just annotating types and have no equivalent record type,
- 	 just return void_type, except for root types that have discriminants
- 	 because the discriminants will very likely be used in the declarative
- 	 part of the associated body so they need to be translated.  */
-       if (type_annotate_only && gnat_equiv_type == gnat_entity)
- 	{
- 	  if (definition
- 	      && Has_Discriminants (gnat_entity)
- 	      && Root_Type (gnat_entity) == gnat_entity)
- 	    {
- 	      tree gnu_field_list = NULL_TREE;
- 	      Entity_Id gnat_field;
- 
- 	      /* This is a minimal version of the E_Record_Type handling.  */
- 	      gnu_type = make_node (RECORD_TYPE);
- 	      TYPE_NAME (gnu_type) = gnu_entity_name;
- 
- 	      for (gnat_field = First_Stored_Discriminant (gnat_entity);
- 		   Present (gnat_field);
- 		   gnat_field = Next_Stored_Discriminant (gnat_field))
- 		{
- 		  tree gnu_field
- 		    = gnat_to_gnu_field (gnat_field, gnu_type, false,
- 					 definition, debug_info_p);
- 
- 		  save_gnu_tree (gnat_field,
- 				 build3 (COMPONENT_REF, TREE_TYPE (gnu_field),
- 					 build0 (PLACEHOLDER_EXPR, gnu_type),
- 					 gnu_field, NULL_TREE),
- 				 true);
- 
- 		  DECL_CHAIN (gnu_field) = gnu_field_list;
- 		  gnu_field_list = gnu_field;
- 		}
- 
- 	      finish_record_type (gnu_type, nreverse (gnu_field_list), 0,
- 				  false);
- 	    }
- 	  else
- 	    gnu_type = void_type_node;
- 	}
- 
-       /* Concurrent types are always transformed into their record type.  */
-       else
- 	gnu_decl = gnat_to_gnu_entity (gnat_equiv_type, NULL_TREE, false);
-       maybe_present = true;
-       break;
- 
-     case E_Label:
-       gnu_decl = create_label_decl (gnu_entity_name, gnat_entity);
-       break;
- 
-     case E_Block:
-     case E_Loop:
-       /* Nothing at all to do here, so just return an ERROR_MARK and claim
- 	 we've already saved it, so we don't try to.  */
-       gnu_decl = error_mark_node;
-       saved = true;
-       break;
- 
-     case E_Abstract_State:
-       /* This is a SPARK annotation that only reaches here when compiling in
- 	 ASIS mode.  */
-       gcc_assert (type_annotate_only);
-       gnu_decl = error_mark_node;
-       saved = true;
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   /* If we had a case where we evaluated another type and it might have
-      defined this one, handle it here.  */
-   if (maybe_present && present_gnu_tree (gnat_entity))
-     {
-       gnu_decl = get_gnu_tree (gnat_entity);
-       saved = true;
-     }
- 
-   /* If we are processing a type and there is either no DECL for it or
-      we just made one, do some common processing for the type, such as
-      handling alignment and possible padding.  */
-   if (is_type && (!gnu_decl || this_made_decl))
-     {
-       const bool is_by_ref = Is_By_Reference_Type (gnat_entity);
- 
-       gcc_assert (!TYPE_IS_DUMMY_P (gnu_type));
- 
-       /* Process the attributes, if not already done.  Note that the type is
- 	 already defined so we cannot pass true for IN_PLACE here.  */
-       process_attributes (&gnu_type, &attr_list, false, gnat_entity);
- 
-       /* See if a size was specified, by means of either an Object_Size or
-          a regular Size clause, and validate it if so.
- 
- 	 ??? Don't set the size for a String_Literal since it is either
- 	 confirming or we don't handle it properly (if the low bound is
- 	 non-constant).  */
-       if (!gnu_size && kind != E_String_Literal_Subtype)
- 	{
- 	  const char *size_s = "size for %s too small{, minimum allowed is ^}";
- 	  const char *type_s = is_by_ref ? "by-reference type &" : "&";
- 
- 	  if (Known_Esize (gnat_entity))
- 	    gnu_size
- 	      = validate_size (Esize (gnat_entity), gnu_type, gnat_entity,
- 			       VAR_DECL, false, false, size_s, type_s);
- 	  else
- 	    gnu_size
- 	      = validate_size (RM_Size (gnat_entity), gnu_type, gnat_entity,
- 			       TYPE_DECL, false, Has_Size_Clause (gnat_entity),
- 			       size_s, type_s);
- 	}
- 
-       /* If a size was specified, see if we can make a new type of that size
- 	 by rearranging the type, for example from a fat to a thin pointer.  */
-       if (gnu_size)
- 	{
- 	  gnu_type
- 	    = make_type_from_size (gnu_type, gnu_size,
- 				   Has_Biased_Representation (gnat_entity));
- 
- 	  if (operand_equal_p (TYPE_SIZE (gnu_type), gnu_size, 0)
- 	      && operand_equal_p (rm_size (gnu_type), gnu_size, 0))
- 	    gnu_size = NULL_TREE;
- 	}
- 
-       /* If the alignment has not already been processed and this is not
- 	 an unconstrained array type, see if an alignment is specified.
- 	 If not, we pick a default alignment for atomic objects.  */
-       if (align != 0 || TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE)
- 	;
-       else if (Known_Alignment (gnat_entity))
- 	{
- 	  align = validate_alignment (Alignment (gnat_entity), gnat_entity,
- 				      TYPE_ALIGN (gnu_type));
- 
- 	  /* Warn on suspiciously large alignments.  This should catch
- 	     errors about the (alignment,byte)/(size,bit) discrepancy.  */
- 	  if (align > BIGGEST_ALIGNMENT && Has_Alignment_Clause (gnat_entity))
- 	    {
- 	      tree size;
- 
- 	      /* If a size was specified, take it into account.  Otherwise
- 		 use the RM size for records or unions as the type size has
- 		 already been adjusted to the alignment.  */
- 	      if (gnu_size)
- 		size = gnu_size;
- 	      else if (RECORD_OR_UNION_TYPE_P (gnu_type)
- 		       && !TYPE_FAT_POINTER_P (gnu_type))
- 		size = rm_size (gnu_type);
- 	      else
- 	        size = TYPE_SIZE (gnu_type);
- 
- 	      /* Consider an alignment as suspicious if the alignment/size
- 		 ratio is greater or equal to the byte/bit ratio.  */
- 	      if (tree_fits_uhwi_p (size)
- 		  && align >= tree_to_uhwi (size) * BITS_PER_UNIT)
- 		post_error_ne ("?suspiciously large alignment specified for&",
- 			       Expression (Alignment_Clause (gnat_entity)),
- 			       gnat_entity);
- 	    }
- 	}
-       else if (Is_Full_Access (gnat_entity) && !gnu_size
- 	       && tree_fits_uhwi_p (TYPE_SIZE (gnu_type))
- 	       && integer_pow2p (TYPE_SIZE (gnu_type)))
- 	align = MIN (BIGGEST_ALIGNMENT,
- 		     tree_to_uhwi (TYPE_SIZE (gnu_type)));
-       else if (Is_Full_Access (gnat_entity) && gnu_size
- 	       && tree_fits_uhwi_p (gnu_size)
- 	       && integer_pow2p (gnu_size))
- 	align = MIN (BIGGEST_ALIGNMENT, tree_to_uhwi (gnu_size));
- 
-       /* See if we need to pad the type.  If we did and built a new type,
- 	 then create a stripped-down declaration for the original type,
- 	 mainly for debugging, unless there was already one.  */
-       if (gnu_size || align > 0)
- 	{
- 	  tree orig_type = gnu_type;
- 
- 	  gnu_type = maybe_pad_type (gnu_type, gnu_size, align, gnat_entity,
- 				     false, definition, false);
- 
- 	  if (gnu_type != orig_type && !gnu_decl)
- 	    create_type_decl (gnu_entity_name, orig_type, true, debug_info_p,
- 			      gnat_entity);
- 	}
- 
-       /* Now set the RM size of the type.  We cannot do it before padding
- 	 because we need to accept arbitrary RM sizes on integral types.  */
-       set_rm_size (RM_Size (gnat_entity), gnu_type, gnat_entity);
- 
-       /* Back-annotate the alignment of the type if not already set.  */
-       if (Unknown_Alignment (gnat_entity))
- 	{
- 	  unsigned int double_align, align;
- 	  bool is_capped_double, align_clause;
- 
- 	  /* If the default alignment of "double" or larger scalar types is
- 	     specifically capped and this is not an array with an alignment
- 	     clause on the component type, return the cap.  */
- 	  if ((double_align = double_float_alignment) > 0)
- 	    is_capped_double
- 	      = is_double_float_or_array (gnat_entity, &align_clause);
- 	  else if ((double_align = double_scalar_alignment) > 0)
- 	    is_capped_double
- 	      = is_double_scalar_or_array (gnat_entity, &align_clause);
- 	  else
- 	    is_capped_double = align_clause = false;
- 
- 	  if (is_capped_double && !align_clause)
- 	    align = double_align;
- 	  else
- 	    align = TYPE_ALIGN (gnu_type) / BITS_PER_UNIT;
- 
- 	  Set_Alignment (gnat_entity, UI_From_Int (align));
- 	}
- 
-       /* Likewise for the size, if any.  */
-       if (Unknown_Esize (gnat_entity) && TYPE_SIZE (gnu_type))
- 	{
- 	  tree gnu_size = TYPE_SIZE (gnu_type);
- 
- 	  /* If the size is self-referential, annotate the maximum value
- 	     after saturating it, if need be, to avoid a No_Uint value.  */
- 	  if (CONTAINS_PLACEHOLDER_P (gnu_size))
- 	    {
- 	      const unsigned int align
- 		= UI_To_Int (Alignment (gnat_entity)) * BITS_PER_UNIT;
- 	      gnu_size
- 		= maybe_saturate_size (max_size (gnu_size, true), align);
- 	    }
- 
- 	  /* If we are just annotating types and the type is tagged, the tag
- 	     and the parent components are not generated by the front-end so
- 	     alignment and sizes must be adjusted.  */
- 	  if (type_annotate_only && Is_Tagged_Type (gnat_entity))
- 	    {
- 	      const bool derived_p = Is_Derived_Type (gnat_entity);
- 	      const Entity_Id gnat_parent
- 		= derived_p ? Etype (Base_Type (gnat_entity)) : Empty;
- 	      const unsigned int inherited_align
- 		= derived_p
- 		  ? UI_To_Int (Alignment (gnat_parent)) * BITS_PER_UNIT
- 		  : POINTER_SIZE;
- 	      const unsigned int align
- 		= MAX (TYPE_ALIGN (gnu_type), inherited_align);
- 
- 	      Set_Alignment (gnat_entity, UI_From_Int (align / BITS_PER_UNIT));
- 
- 	      /* If there is neither size clause nor representation clause, the
- 		 sizes need to be adjusted.  */
- 	      if (Unknown_RM_Size (gnat_entity)
- 		  && !VOID_TYPE_P (gnu_type)
- 		  && (!TYPE_FIELDS (gnu_type)
- 		      || integer_zerop (bit_position (TYPE_FIELDS (gnu_type)))))
- 		{
- 		  tree offset
- 		    = derived_p
- 		      ? UI_To_gnu (Esize (gnat_parent), bitsizetype)
- 		      : bitsize_int (POINTER_SIZE);
- 		  if (TYPE_FIELDS (gnu_type))
- 		    offset
- 		      = round_up (offset, DECL_ALIGN (TYPE_FIELDS (gnu_type)));
- 		  gnu_size = size_binop (PLUS_EXPR, gnu_size, offset);
- 		}
- 
- 	      gnu_size
- 		= maybe_saturate_size (round_up (gnu_size, align), align);
- 	      Set_Esize (gnat_entity, annotate_value (gnu_size));
- 
- 	      /* Tagged types are Strict_Alignment so RM_Size = Esize.  */
- 	      if (Unknown_RM_Size (gnat_entity))
- 		Set_RM_Size (gnat_entity, Esize (gnat_entity));
- 	    }
- 
- 	  /* Otherwise no adjustment is needed.  */
- 	  else
- 	    Set_Esize (gnat_entity, annotate_value (gnu_size));
- 	}
- 
-       /* Likewise for the RM size, if any.  */
-       if (Unknown_RM_Size (gnat_entity) && TYPE_SIZE (gnu_type))
- 	Set_RM_Size (gnat_entity, annotate_value (rm_size (gnu_type)));
- 
-       /* If we are at global level, GCC will have applied variable_size to
- 	 the type, but that won't have done anything.  So, if it's not
- 	 a constant or self-referential, call elaborate_expression_1 to
- 	 make a variable for the size rather than calculating it each time.
- 	 Handle both the RM size and the actual size.  */
-       if (TYPE_SIZE (gnu_type)
- 	  && !TREE_CONSTANT (TYPE_SIZE (gnu_type))
- 	  && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type))
- 	  && global_bindings_p ())
- 	{
- 	  tree size = TYPE_SIZE (gnu_type);
- 
- 	  TYPE_SIZE (gnu_type)
- 	    = elaborate_expression_1 (size, gnat_entity, "SIZE", definition,
- 				      false);
- 
- 	  /* ??? For now, store the size as a multiple of the alignment in
- 	     bytes so that we can see the alignment from the tree.  */
- 	  TYPE_SIZE_UNIT (gnu_type)
- 	    = elaborate_expression_2 (TYPE_SIZE_UNIT (gnu_type), gnat_entity,
- 				      "SIZE_A_UNIT", definition, false,
- 				      TYPE_ALIGN (gnu_type));
- 
- 	  /* ??? gnu_type may come from an existing type so the MULT_EXPR node
- 	     may not be marked by the call to create_type_decl below.  */
- 	  MARK_VISITED (TYPE_SIZE_UNIT (gnu_type));
- 
- 	  if (TREE_CODE (gnu_type) == RECORD_TYPE)
- 	    {
- 	      tree variant_part = get_variant_part (gnu_type);
- 	      tree ada_size = TYPE_ADA_SIZE (gnu_type);
- 
- 	      if (variant_part)
- 		{
- 		  tree union_type = TREE_TYPE (variant_part);
- 		  tree offset = DECL_FIELD_OFFSET (variant_part);
- 
- 		  /* If the position of the variant part is constant, subtract
- 		     it from the size of the type of the parent to get the new
- 		     size.  This manual CSE reduces the data size.  */
- 		  if (TREE_CODE (offset) == INTEGER_CST)
- 		    {
- 		      tree bitpos = DECL_FIELD_BIT_OFFSET (variant_part);
- 		      TYPE_SIZE (union_type)
- 			= size_binop (MINUS_EXPR, TYPE_SIZE (gnu_type),
- 				      bit_from_pos (offset, bitpos));
- 		      TYPE_SIZE_UNIT (union_type)
- 			= size_binop (MINUS_EXPR, TYPE_SIZE_UNIT (gnu_type),
- 				      byte_from_pos (offset, bitpos));
- 		    }
- 		  else
- 		    {
- 		      TYPE_SIZE (union_type)
- 			= elaborate_expression_1 (TYPE_SIZE (union_type),
- 						  gnat_entity, "VSIZE",
- 						  definition, false);
- 
- 		      /* ??? For now, store the size as a multiple of the
- 			 alignment in bytes so that we can see the alignment
- 			 from the tree.  */
- 		      TYPE_SIZE_UNIT (union_type)
- 			= elaborate_expression_2 (TYPE_SIZE_UNIT (union_type),
- 						  gnat_entity, "VSIZE_A_UNIT",
- 						  definition, false,
- 						  TYPE_ALIGN (union_type));
- 
- 		      /* ??? For now, store the offset as a multiple of the
- 			 alignment in bytes so that we can see the alignment
- 			 from the tree.  */
- 		      DECL_FIELD_OFFSET (variant_part)
- 			= elaborate_expression_2 (offset, gnat_entity,
- 						  "VOFFSET", definition, false,
- 						  DECL_OFFSET_ALIGN
- 						  (variant_part));
- 		    }
- 
- 		  DECL_SIZE (variant_part) = TYPE_SIZE (union_type);
- 		  DECL_SIZE_UNIT (variant_part) = TYPE_SIZE_UNIT (union_type);
- 		}
- 
- 	      if (operand_equal_p (ada_size, size, 0))
- 		ada_size = TYPE_SIZE (gnu_type);
- 	      else
- 		ada_size
- 		  = elaborate_expression_1 (ada_size, gnat_entity, "RM_SIZE",
- 					    definition, false);
- 	      SET_TYPE_ADA_SIZE (gnu_type, ada_size);
- 	    }
- 	}
- 
-       /* Similarly, if this is a record type or subtype at global level, call
- 	 elaborate_expression_2 on any field position.  Skip any fields that
- 	 we haven't made trees for to avoid problems with class-wide types.  */
-       if (IN (kind, Record_Kind) && global_bindings_p ())
- 	for (gnat_temp = First_Entity (gnat_entity); Present (gnat_temp);
- 	     gnat_temp = Next_Entity (gnat_temp))
- 	  if (Ekind (gnat_temp) == E_Component && present_gnu_tree (gnat_temp))
- 	    {
- 	      tree gnu_field = get_gnu_tree (gnat_temp);
- 
- 	      /* ??? For now, store the offset as a multiple of the alignment
- 		 in bytes so that we can see the alignment from the tree.  */
- 	      if (!TREE_CONSTANT (DECL_FIELD_OFFSET (gnu_field))
- 		  && !CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (gnu_field)))
- 		{
- 		  DECL_FIELD_OFFSET (gnu_field)
- 		    = elaborate_expression_2 (DECL_FIELD_OFFSET (gnu_field),
- 					      gnat_temp, "OFFSET", definition,
- 					      false,
- 					      DECL_OFFSET_ALIGN (gnu_field));
- 
- 		  /* ??? The context of gnu_field is not necessarily gnu_type
- 		     so the MULT_EXPR node built above may not be marked by
- 		     the call to create_type_decl below.  */
- 		  MARK_VISITED (DECL_FIELD_OFFSET (gnu_field));
- 		}
- 	    }
- 
-       /* Now check if the type allows atomic access.  */
-       if (Is_Full_Access (gnat_entity))
- 	check_ok_for_atomic_type (gnu_type, gnat_entity, false);
- 
-       /* If this is not an unconstrained array type, set some flags.  */
-       if (TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE)
- 	{
- 	  /* Record the property that objects of tagged types are guaranteed to
- 	     be properly aligned.  This is necessary because conversions to the
- 	     class-wide type are translated into conversions to the root type,
- 	     which can be less aligned than some of its derived types.  */
- 	  if (Is_Tagged_Type (gnat_entity)
- 	      || Is_Class_Wide_Equivalent_Type (gnat_entity))
- 	    TYPE_ALIGN_OK (gnu_type) = 1;
- 
- 	  /* Record whether the type is passed by reference.  */
- 	  if (is_by_ref && !VOID_TYPE_P (gnu_type))
- 	    TYPE_BY_REFERENCE_P (gnu_type) = 1;
- 
- 	  /* Record whether an alignment clause was specified.  */
- 	  if (Present (Alignment_Clause (gnat_entity)))
- 	    TYPE_USER_ALIGN (gnu_type) = 1;
- 
- 	  /* Record whether a pragma Universal_Aliasing was specified.  */
- 	  if (Universal_Aliasing (gnat_entity) && !TYPE_IS_DUMMY_P (gnu_type))
- 	    TYPE_UNIVERSAL_ALIASING_P (gnu_type) = 1;
- 
- 	  /* If it is passed by reference, force BLKmode to ensure that
- 	     objects of this type will always be put in memory.  */
- 	  if (AGGREGATE_TYPE_P (gnu_type) && TYPE_BY_REFERENCE_P (gnu_type))
- 	    SET_TYPE_MODE (gnu_type, BLKmode);
- 	}
- 
-       /* If this is a derived type, relate its alias set to that of its parent
- 	 to avoid troubles when a call to an inherited primitive is inlined in
- 	 a context where a derived object is accessed.  The inlined code works
- 	 on the parent view so the resulting code may access the same object
- 	 using both the parent and the derived alias sets, which thus have to
- 	 conflict.  As the same issue arises with component references, the
- 	 parent alias set also has to conflict with composite types enclosing
- 	 derived components.  For instance, if we have:
- 
- 	    type D is new T;
- 	    type R is record
- 	       Component : D;
- 	    end record;
- 
- 	 we want T to conflict with both D and R, in addition to R being a
- 	 superset of D by record/component construction.
- 
- 	 One way to achieve this is to perform an alias set copy from the
- 	 parent to the derived type.  This is not quite appropriate, though,
- 	 as we don't want separate derived types to conflict with each other:
- 
- 	    type I1 is new Integer;
- 	    type I2 is new Integer;
- 
- 	 We want I1 and I2 to both conflict with Integer but we do not want
- 	 I1 to conflict with I2, and an alias set copy on derivation would
- 	 have that effect.
- 
- 	 The option chosen is to make the alias set of the derived type a
- 	 superset of that of its parent type.  It trivially fulfills the
- 	 simple requirement for the Integer derivation example above, and
- 	 the component case as well by superset transitivity:
- 
- 		   superset      superset
- 		R ----------> D ----------> T
- 
- 	 However, for composite types, conversions between derived types are
- 	 translated into VIEW_CONVERT_EXPRs so a sequence like:
- 
- 	    type Comp1 is new Comp;
- 	    type Comp2 is new Comp;
- 	    procedure Proc (C : Comp1);
- 
- 	    C : Comp2;
- 	    Proc (Comp1 (C));
- 
- 	 is translated into:
- 
- 	    C : Comp2;
- 	    Proc ((Comp1 &) &VIEW_CONVERT_EXPR <Comp1> (C));
- 
- 	 and gimplified into:
- 
- 	    C : Comp2;
- 	    Comp1 *C.0;
- 	    C.0 = (Comp1 *) &C;
- 	    Proc (C.0);
- 
- 	 i.e. generates code involving type punning.  Therefore, Comp1 needs
- 	 to conflict with Comp2 and an alias set copy is required.
- 
- 	 The language rules ensure the parent type is already frozen here.  */
-       if (kind != E_Subprogram_Type
- 	  && Is_Derived_Type (gnat_entity)
- 	  && !type_annotate_only)
- 	{
- 	  Entity_Id gnat_parent_type = Underlying_Type (Etype (gnat_entity));
- 	  /* For constrained packed array subtypes, the implementation type is
- 	     used instead of the nominal type.  */
- 	  if (kind == E_Array_Subtype
- 	      && Is_Constrained (gnat_entity)
- 	      && Present (Packed_Array_Impl_Type (gnat_parent_type)))
- 	    gnat_parent_type = Packed_Array_Impl_Type (gnat_parent_type);
- 	  relate_alias_sets (gnu_type, gnat_to_gnu_type (gnat_parent_type),
- 			     Is_Composite_Type (gnat_entity)
- 			     ? ALIAS_SET_COPY : ALIAS_SET_SUPERSET);
- 	}
- 
-       /* Finally get to the appropriate variant, except for the implementation
- 	 type of a packed array because the GNU type might be further adjusted
- 	 when the original array type is itself processed.  */
-       if (Treat_As_Volatile (gnat_entity)
- 	  && !Is_Packed_Array_Impl_Type (gnat_entity))
- 	{
- 	  const int quals
- 	    = TYPE_QUAL_VOLATILE
- 	      | (Is_Full_Access (gnat_entity) ? TYPE_QUAL_ATOMIC : 0);
- 	  /* This is required by free_lang_data_in_type to disable the ODR.  */
- 	  if (TREE_CODE (gnu_type) == ENUMERAL_TYPE)
- 	    TYPE_STUB_DECL (gnu_type)
- 	      = create_type_stub_decl (TYPE_NAME (gnu_type), gnu_type);
- 	  gnu_type = change_qualified_type (gnu_type, quals);
- 	}
- 
-       /* If we already made a decl, just set the type, otherwise create it.  */
-       if (gnu_decl)
- 	{
- 	  TREE_TYPE (gnu_decl) = gnu_type;
- 	  TYPE_STUB_DECL (gnu_type) = gnu_decl;
- 	}
-       else
- 	gnu_decl = create_type_decl (gnu_entity_name, gnu_type, artificial_p,
- 				     debug_info_p, gnat_entity);
- 
-       /* For vector types, make the representative array the debug type.  */
-       if (VECTOR_TYPE_P (gnu_type))
- 	{
- 	  tree rep = TYPE_REPRESENTATIVE_ARRAY (gnu_type);
- 	  TYPE_NAME (rep) = DECL_NAME (gnu_decl);
- 	  SET_TYPE_DEBUG_TYPE (gnu_type, rep);
- 	}
-     }
- 
-   /* Otherwise, for a type reusing an existing DECL, back-annotate values.  */
-   else if (is_type
- 	   && !TYPE_IS_DUMMY_P (TREE_TYPE (gnu_decl))
- 	   && Present (gnat_annotate_type))
-     {
-       if (Unknown_Alignment (gnat_entity))
- 	Set_Alignment (gnat_entity, Alignment (gnat_annotate_type));
-       if (Unknown_Esize (gnat_entity))
- 	Set_Esize (gnat_entity, Esize (gnat_annotate_type));
-       if (Unknown_RM_Size (gnat_entity))
- 	Set_RM_Size (gnat_entity, RM_Size (gnat_annotate_type));
-     }
- 
-   /* If we haven't already, associate the ..._DECL node that we just made with
-      the input GNAT entity node.  */
-   if (!saved)
-     save_gnu_tree (gnat_entity, gnu_decl, false);
- 
-   /* Now we are sure gnat_entity has a corresponding ..._DECL node,
-      eliminate as many deferred computations as possible.  */
-   process_deferred_decl_context (false);
- 
-   /* If this is an enumeration or floating-point type, we were not able to set
-      the bounds since they refer to the type.  These are always static.  */
-   if ((kind == E_Enumeration_Type && Present (First_Literal (gnat_entity)))
-       || (kind == E_Floating_Point_Type))
-     {
-       tree gnu_scalar_type = gnu_type;
-       tree gnu_low_bound, gnu_high_bound;
- 
-       /* If this is a padded type, we need to use the underlying type.  */
-       if (TYPE_IS_PADDING_P (gnu_scalar_type))
- 	gnu_scalar_type = TREE_TYPE (TYPE_FIELDS (gnu_scalar_type));
- 
-       /* If this is a floating point type and we haven't set a floating
- 	 point type yet, use this in the evaluation of the bounds.  */
-       if (!longest_float_type_node && kind == E_Floating_Point_Type)
- 	longest_float_type_node = gnu_scalar_type;
- 
-       gnu_low_bound = gnat_to_gnu (Type_Low_Bound (gnat_entity));
-       gnu_high_bound = gnat_to_gnu (Type_High_Bound (gnat_entity));
- 
-       if (kind == E_Enumeration_Type)
- 	{
- 	  /* Enumeration types have specific RM bounds.  */
- 	  SET_TYPE_RM_MIN_VALUE (gnu_scalar_type, gnu_low_bound);
- 	  SET_TYPE_RM_MAX_VALUE (gnu_scalar_type, gnu_high_bound);
- 	}
-       else
- 	{
- 	  /* Floating-point types don't have specific RM bounds.  */
- 	  TYPE_GCC_MIN_VALUE (gnu_scalar_type) = gnu_low_bound;
- 	  TYPE_GCC_MAX_VALUE (gnu_scalar_type) = gnu_high_bound;
- 	}
-     }
- 
-   /* If we deferred processing of incomplete types, re-enable it.  If there
-      were no other disables and we have deferred types to process, do so.  */
-   if (this_deferred
-       && --defer_incomplete_level == 0
-       && defer_incomplete_list)
-     {
-       struct incomplete *p, *next;
- 
-       /* We are back to level 0 for the deferring of incomplete types.
- 	 But processing these incomplete types below may itself require
- 	 deferring, so preserve what we have and restart from scratch.  */
-       p = defer_incomplete_list;
-       defer_incomplete_list = NULL;
- 
-       for (; p; p = next)
- 	{
- 	  next = p->next;
- 
- 	  if (p->old_type)
- 	    update_pointer_to (TYPE_MAIN_VARIANT (p->old_type),
- 			       gnat_to_gnu_type (p->full_type));
- 	  free (p);
- 	}
-     }
- 
-   /* If we are not defining this type, see if it's on one of the lists of
-      incomplete types.  If so, handle the list entry now.  */
-   if (is_type && !definition)
-     {
-       struct incomplete *p;
- 
-       for (p = defer_incomplete_list; p; p = p->next)
- 	if (p->old_type && p->full_type == gnat_entity)
- 	  {
- 	    update_pointer_to (TYPE_MAIN_VARIANT (p->old_type),
- 			       TREE_TYPE (gnu_decl));
- 	    p->old_type = NULL_TREE;
- 	  }
- 
-       for (p = defer_limited_with_list; p; p = p->next)
- 	if (p->old_type
- 	    && (Non_Limited_View (p->full_type) == gnat_entity
- 		|| Full_View (p->full_type) == gnat_entity))
- 	  {
- 	    update_pointer_to (TYPE_MAIN_VARIANT (p->old_type),
- 			       TREE_TYPE (gnu_decl));
- 	    if (TYPE_DUMMY_IN_PROFILE_P (p->old_type))
- 	      update_profiles_with (p->old_type);
- 	    p->old_type = NULL_TREE;
- 	  }
-     }
- 
-   if (this_global)
-     force_global--;
- 
-   /* If this is a packed array type whose original array type is itself
-      an itype without freeze node, make sure the latter is processed.  */
-   if (Is_Packed_Array_Impl_Type (gnat_entity)
-       && Is_Itype (Original_Array_Type (gnat_entity))
-       && No (Freeze_Node (Original_Array_Type (gnat_entity)))
-       && !present_gnu_tree (Original_Array_Type (gnat_entity)))
-     gnat_to_gnu_entity (Original_Array_Type (gnat_entity), NULL_TREE, false);
- 
-   return gnu_decl;
- }
- 
- /* Similar, but if the returned value is a COMPONENT_REF, return the
-    FIELD_DECL.  */
- 
- tree
- gnat_to_gnu_field_decl (Entity_Id gnat_entity)
- {
-   tree gnu_field = gnat_to_gnu_entity (gnat_entity, NULL_TREE, false);
- 
-   if (TREE_CODE (gnu_field) == COMPONENT_REF)
-     gnu_field = TREE_OPERAND (gnu_field, 1);
- 
-   return gnu_field;
- }
- 
- /* Similar, but GNAT_ENTITY is assumed to refer to a GNAT type.  Return
-    the GCC type corresponding to that entity.  */
- 
- tree
- gnat_to_gnu_type (Entity_Id gnat_entity)
- {
-   tree gnu_decl;
- 
-   /* The back end never attempts to annotate generic types.  */
-   if (Is_Generic_Type (gnat_entity) && type_annotate_only)
-      return void_type_node;
- 
-   gnu_decl = gnat_to_gnu_entity (gnat_entity, NULL_TREE, false);
-   gcc_assert (TREE_CODE (gnu_decl) == TYPE_DECL);
- 
-   return TREE_TYPE (gnu_decl);
- }
- 
- /* Similar, but GNAT_ENTITY is assumed to refer to a GNAT type.  Return
-    the unpadded version of the GCC type corresponding to that entity.  */
- 
- tree
- get_unpadded_type (Entity_Id gnat_entity)
- {
-   tree type = gnat_to_gnu_type (gnat_entity);
- 
-   if (TYPE_IS_PADDING_P (type))
-     type = TREE_TYPE (TYPE_FIELDS (type));
- 
-   return type;
- }
- 
- /* Return whether the E_Subprogram_Type/E_Function/E_Procedure GNAT_ENTITY is
-    a C++ imported method or equivalent.
- 
-    We use the predicate to find out whether we need to use METHOD_TYPE instead
-    of FUNCTION_TYPE for GNAT_ENTITY for the sake compatibility with C++.  This
-    in turn determines whether the "thiscall" calling convention is used by the
-    back-end for GNAT_ENTITY on 32-bit x86/Windows.  */
- 
- static bool
- is_cplusplus_method (Entity_Id gnat_entity)
- {
-   /* A constructor is a method on the C++ side.  We deal with it now because
-      it is declared without the 'this' parameter in the sources and, although
-      the front-end will create a version with the 'this' parameter for code
-      generation purposes, we want to return true for both versions.  */
-   if (Is_Constructor (gnat_entity))
-     return true;
- 
-   /* Check that the subprogram has C++ convention.  */
-   if (Convention (gnat_entity) != Convention_CPP)
-     return false;
- 
-   /* And that the type of the first parameter (indirectly) has it too, but
-      we make an exception for Interfaces because they need not be imported.  */
-   Entity_Id gnat_first = First_Formal (gnat_entity);
-   if (No (gnat_first))
-     return false;
-   Entity_Id gnat_type = Etype (gnat_first);
-   if (Is_Access_Type (gnat_type))
-     gnat_type = Directly_Designated_Type (gnat_type);
-   if (Convention (gnat_type) != Convention_CPP && !Is_Interface (gnat_type))
-     return false;
- 
-   /* This is the main case: a C++ virtual method imported as a primitive
-      operation of a tagged type.  */
-   if (Is_Dispatching_Operation (gnat_entity))
-     return true;
- 
-   /* This is set on the E_Subprogram_Type built for a dispatching call.  */
-   if (Is_Dispatch_Table_Entity (gnat_entity))
-     return true;
- 
-   /* A thunk needs to be handled like its associated primitive operation.  */
-   if (Is_Subprogram (gnat_entity) && Is_Thunk (gnat_entity))
-     return true;
- 
-   /* Now on to the annoying case: a C++ non-virtual method, imported either
-      as a non-primitive operation of a tagged type or as a primitive operation
-      of an untagged type.  We cannot reliably differentiate these cases from
-      their static member or regular function equivalents in Ada, so we ask
-      the C++ side through the mangled name of the function, as the implicit
-      'this' parameter is not encoded in the mangled name of a method.  */
-   if (Is_Subprogram (gnat_entity) && Present (Interface_Name (gnat_entity)))
-     {
-       String_Pointer sp = { NULL, NULL };
-       Get_External_Name (gnat_entity, false, sp);
- 
-       void *mem;
-       struct demangle_component *cmp
- 	= cplus_demangle_v3_components (Name_Buffer,
- 					DMGL_GNU_V3
- 					| DMGL_TYPES
- 					| DMGL_PARAMS
- 					| DMGL_RET_DROP,
- 					&mem);
-       if (!cmp)
- 	return false;
- 
-       /* We need to release MEM once we have a successful demangling.  */
-       bool ret = false;
- 
-       if (cmp->type == DEMANGLE_COMPONENT_TYPED_NAME
- 	  && cmp->u.s_binary.right->type == DEMANGLE_COMPONENT_FUNCTION_TYPE
- 	  && (cmp = cmp->u.s_binary.right->u.s_binary.right) != NULL
- 	  && cmp->type == DEMANGLE_COMPONENT_ARGLIST)
- 	{
- 	  /* Make sure there is at least one parameter in C++ too.  */
- 	  if (cmp->u.s_binary.left)
- 	    {
- 	      unsigned int n_ada_args = 0;
- 	      do {
- 		n_ada_args++;
- 		gnat_first = Next_Formal (gnat_first);
- 	      } while (Present (gnat_first));
- 
- 	      unsigned int n_cpp_args = 0;
- 	      do {
- 		n_cpp_args++;
- 		cmp = cmp->u.s_binary.right;
- 	      } while (cmp);
- 
- 	      if (n_cpp_args < n_ada_args)
- 		ret = true;
- 	    }
- 	  else
- 	    ret = true;
- 	}
- 
-       free (mem);
- 
-       return ret;
-     }
- 
-   return false;
- }
- 
- /* Return the inlining status of the GNAT subprogram SUBPROG.  */
- 
- static enum inline_status_t
- inline_status_for_subprog (Entity_Id subprog)
- {
-   if (Has_Pragma_No_Inline (subprog))
-     return is_suppressed;
- 
-   if (Has_Pragma_Inline_Always (subprog))
-     return is_required;
- 
-   if (Is_Inlined (subprog))
-     {
-       tree gnu_type;
- 
-       /* This is a kludge to work around a pass ordering issue: for small
- 	 record types with many components, i.e. typically bit-fields, the
- 	 initialization routine can contain many assignments that will be
- 	 merged by the GIMPLE store merging pass.  But this pass runs very
- 	 late in the pipeline, in particular after the inlining decisions
- 	 are made, so the inlining heuristics cannot take its outcome into
- 	 account.  Therefore, we optimistically override the heuristics for
- 	 the initialization routine in this case.  */
-       if (Is_Init_Proc (subprog)
- 	  && flag_store_merging
- 	  && Is_Record_Type (Etype (First_Formal (subprog)))
- 	  && (gnu_type = gnat_to_gnu_type (Etype (First_Formal (subprog))))
- 	  && !TYPE_IS_BY_REFERENCE_P (gnu_type)
- 	  && tree_fits_uhwi_p (TYPE_SIZE (gnu_type))
- 	  && compare_tree_int (TYPE_SIZE (gnu_type), MAX_FIXED_MODE_SIZE) <= 0)
- 	return is_prescribed;
- 
-       return is_requested;
-     }
- 
-   return is_default;
- }
- 
- /* Finalize the processing of From_Limited_With incomplete types.  */
- 
- void
- finalize_from_limited_with (void)
- {
-   struct incomplete *p, *next;
- 
-   p = defer_limited_with_list;
-   defer_limited_with_list = NULL;
- 
-   for (; p; p = next)
-     {
-       next = p->next;
- 
-       if (p->old_type)
- 	{
- 	  update_pointer_to (TYPE_MAIN_VARIANT (p->old_type),
- 			     gnat_to_gnu_type (p->full_type));
- 	  if (TYPE_DUMMY_IN_PROFILE_P (p->old_type))
- 	    update_profiles_with (p->old_type);
- 	}
- 
-       free (p);
-     }
- }
- 
- /* Return the equivalent type to be used for GNAT_ENTITY, if it's a kind
-    of type (such E_Task_Type) that has a different type which Gigi uses
-    for its representation.  If the type does not have a special type for
-    its representation, return GNAT_ENTITY.  */
- 
- Entity_Id
- Gigi_Equivalent_Type (Entity_Id gnat_entity)
- {
-   Entity_Id gnat_equiv = gnat_entity;
- 
-   if (No (gnat_entity))
-     return gnat_entity;
- 
-   switch (Ekind (gnat_entity))
-     {
-     case E_Class_Wide_Subtype:
-       if (Present (Equivalent_Type (gnat_entity)))
- 	gnat_equiv = Equivalent_Type (gnat_entity);
-       break;
- 
-     case E_Access_Protected_Subprogram_Type:
-     case E_Anonymous_Access_Protected_Subprogram_Type:
-       if (Present (Equivalent_Type (gnat_entity)))
- 	gnat_equiv = Equivalent_Type (gnat_entity);
-       break;
- 
-     case E_Access_Subtype:
-       gnat_equiv = Etype (gnat_entity);
-       break;
- 
-     case E_Array_Subtype:
-       if (!Is_Constrained (gnat_entity))
- 	gnat_equiv = Etype (gnat_entity);
-       break;
- 
-     case E_Class_Wide_Type:
-       gnat_equiv = Root_Type (gnat_entity);
-       break;
- 
-     case E_Protected_Type:
-     case E_Protected_Subtype:
-     case E_Task_Type:
-     case E_Task_Subtype:
-       if (Present (Corresponding_Record_Type (gnat_entity)))
- 	gnat_equiv = Corresponding_Record_Type (gnat_entity);
-       break;
- 
-     default:
-       break;
-     }
- 
-   return gnat_equiv;
- }
- 
- /* Return a GCC tree for a type corresponding to the component type of the
-    array type or subtype GNAT_ARRAY.  DEFINITION is true if this component
-    is for an array being defined.  DEBUG_INFO_P is true if we need to write
-    debug information for other types that we may create in the process.  */
- 
- static tree
- gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition,
- 			    bool debug_info_p)
- {
-   const Entity_Id gnat_type = Component_Type (gnat_array);
-   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;
-   unsigned int max_align;
- 
-   /* If an alignment is specified, use it as a cap on the component type
-      so that it can be honored for the whole type, but ignore it for the
-      original type of packed array types.  */
-   if (No (Packed_Array_Impl_Type (gnat_array))
-       && Known_Alignment (gnat_array))
-     max_align = validate_alignment (Alignment (gnat_array), gnat_array, 0);
-   else
-     max_align = 0;
- 
-   /* Try to get a packable form of the component if needed.  */
-   if ((Is_Packed (gnat_array) || Has_Component_Size_Clause (gnat_array))
-       && !is_bit_packed
-       && !Has_Aliased_Components (gnat_array)
-       && !Strict_Alignment (gnat_type)
-       && RECORD_OR_UNION_TYPE_P (gnu_type)
-       && !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;
-     }
-   else
-     has_packed_components = 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_Component_Size_Clause (gnat_array), NULL, NULL);
- 
-   /* If the component type is a RECORD_TYPE that has a self-referential size,
-      then use the maximum size for the component size.  */
-   if (!gnu_comp_size
-       && TREE_CODE (gnu_type) == RECORD_TYPE
-       && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
-     gnu_comp_size = max_size (TYPE_SIZE (gnu_type), true);
- 
-   /* If the array has aliased components and the component size is zero, force
-      the unit size to ensure that the components have distinct addresses.  */
-   if (!gnu_comp_size
-       && Has_Aliased_Components (gnat_array)
-       && integer_zerop (TYPE_SIZE (gnu_type)))
-     gnu_comp_size = bitsize_unit_node;
- 
-   /* Honor the component size.  This is not needed for bit-packed arrays.  */
-   if (gnu_comp_size && !is_bit_packed)
-     {
-       tree orig_type = gnu_type;
-       unsigned int gnu_comp_align;
- 
-       gnu_type = make_type_from_size (gnu_type, gnu_comp_size, false);
-       if (max_align > 0 && TYPE_ALIGN (gnu_type) > max_align)
- 	gnu_type = orig_type;
-       else
- 	orig_type = gnu_type;
- 
-       /* We need to make sure that the size is a multiple of the alignment.
- 	 But we do not misalign the component type because of the alignment
- 	 of the array type here; this either must have been done earlier in
- 	 the packed case or should be rejected in the non-packed case.  */
-       if (TREE_CODE (gnu_comp_size) == INTEGER_CST)
- 	{
- 	  const unsigned HOST_WIDE_INT int_size = tree_to_uhwi (gnu_comp_size);
- 	  gnu_comp_align = int_size & -int_size;
- 	  if (gnu_comp_align > TYPE_ALIGN (gnu_type))
- 	    gnu_comp_align = 0;
- 	}
-        else
- 	 gnu_comp_align = 0;
- 
-       gnu_type = maybe_pad_type (gnu_type, gnu_comp_size, gnu_comp_align,
- 				 gnat_array, true, definition, true);
- 
-       /* If a padding record was made, declare it now since it will never be
- 	 declared otherwise.  This is necessary to ensure that its subtrees
- 	 are properly marked.  */
-       if (gnu_type != orig_type && !DECL_P (TYPE_NAME (gnu_type)))
- 	create_type_decl (TYPE_NAME (gnu_type), gnu_type, true, debug_info_p,
- 			  gnat_array);
-     }
- 
-   /* This is a very special case where the array has aliased components and the
-      component size might be zero at run time.  As explained above, we force at
-      least the unit size but we don't want to build a distinct padding type for
-      each invocation (they are not canonicalized if they have variable size) so
-      we cache this special padding type as TYPE_PADDING_FOR_COMPONENT.  */
-   else if (Has_Aliased_Components (gnat_array)
- 	   && TREE_CODE (gnu_type) == ARRAY_TYPE
- 	   && !TREE_CONSTANT (TYPE_SIZE (gnu_type)))
-     {
-       if (TYPE_PADDING_FOR_COMPONENT (gnu_type))
- 	gnu_type = TYPE_PADDING_FOR_COMPONENT (gnu_type);
-       else
- 	{
- 	  gnu_comp_size
- 	    = size_binop (MAX_EXPR, TYPE_SIZE (gnu_type), bitsize_unit_node);
- 	  TYPE_PADDING_FOR_COMPONENT (gnu_type)
- 	    = maybe_pad_type (gnu_type, gnu_comp_size, 0, gnat_array,
- 			      true, definition, true);
- 	  gnu_type = TYPE_PADDING_FOR_COMPONENT (gnu_type);
- 	  create_type_decl (TYPE_NAME (gnu_type), gnu_type, true, debug_info_p,
- 			    gnat_array);
- 	}
-     }
- 
-   /* Now check if the type of the component allows atomic access.  */
-   if (Has_Atomic_Components (gnat_array) || Is_Full_Access (gnat_type))
-     check_ok_for_atomic_type (gnu_type, gnat_array, true);
- 
-   /* If the component type is a padded type made for a non-bit-packed array
-      of scalars with reverse storage order, we need to propagate the reverse
-      storage order to the padding type since it is the innermost enclosing
-      aggregate type around the scalar.  */
-   if (TYPE_IS_PADDING_P (gnu_type)
-       && !is_bit_packed
-       && Reverse_Storage_Order (gnat_array)
-       && Is_Scalar_Type (gnat_type))
-     gnu_type = set_reverse_storage_order_on_pad_type (gnu_type);
- 
-   if (Has_Volatile_Components (gnat_array))
-     {
-       const int quals
- 	= TYPE_QUAL_VOLATILE
- 	  | (Has_Atomic_Components (gnat_array) ? TYPE_QUAL_ATOMIC : 0);
-       gnu_type = change_qualified_type (gnu_type, quals);
-     }
- 
-   return gnu_type;
- }
- 
- /* Return whether TYPE requires that formal parameters of TYPE be initialized
-    when they are Out parameters passed by copy.
- 
-    This just implements the set of conditions listed in RM 6.4.1(12).  */
- 
- static bool
- type_requires_init_of_formal (Entity_Id type)
- {
-   type = Underlying_Type (type);
- 
-   if (Is_Access_Type (type))
-     return true;
- 
-   if (Is_Scalar_Type (type))
-     return Has_Default_Aspect (type);
- 
-   if (Is_Array_Type (type))
-     return Has_Default_Aspect (type)
- 	   || type_requires_init_of_formal (Component_Type (type));
- 
-   if (Is_Record_Type (type))
-     for (Entity_Id field = First_Entity (type);
- 	 Present (field);
- 	 field = Next_Entity (field))
-       {
- 	if (Ekind (field) == E_Discriminant && !Is_Unchecked_Union (type))
- 	  return true;
- 
- 	if (Ekind (field) == E_Component
- 	    && (Present (Expression (Parent (field)))
- 		|| type_requires_init_of_formal (Etype (field))))
- 	  return true;
-       }
- 
-   return false;
- }
- 
- /* Return a GCC tree for a parameter corresponding to GNAT_PARAM, to be placed
-    in the parameter list of GNAT_SUBPROG.  GNU_PARAM_TYPE is the GCC tree for
-    the type of the parameter.  FIRST is true if this is the first parameter in
-    the list of GNAT_SUBPROG.  Also set CICO to true if the parameter must use
-    the copy-in copy-out implementation mechanism.
- 
-    The returned tree is a PARM_DECL, except for the cases where no parameter
-    needs to be actually passed to the subprogram; the type of this "shadow"
-    parameter is then returned instead.  */
- 
- static tree
- gnat_to_gnu_param (Entity_Id gnat_param, tree gnu_param_type, bool first,
- 		   Entity_Id gnat_subprog, bool *cico)
- {
-   Mechanism_Type mech = Mechanism (gnat_param);
-   tree gnu_param_name = get_entity_name (gnat_param);
-   bool foreign = Has_Foreign_Convention (gnat_subprog);
-   bool in_param = (Ekind (gnat_param) == E_In_Parameter);
-   /* The parameter can be indirectly modified if its address is taken.  */
-   bool ro_param = in_param && !Address_Taken (gnat_param);
-   bool by_return = false, by_component_ptr = false;
-   bool by_ref = false;
-   bool forced_by_ref = false;
-   bool restricted_aliasing_p = false;
-   location_t saved_location = input_location;
-   tree gnu_param;
- 
-   /* Make sure to use the proper SLOC for vector ABI warnings.  */
-   if (VECTOR_TYPE_P (gnu_param_type))
-     Sloc_to_locus (Sloc (gnat_subprog), &input_location);
- 
-   /* Builtins are expanded inline and there is no real call sequence involved.
-      So the type expected by the underlying expander is always the type of the
-      argument "as is".  */
-   if (Convention (gnat_subprog) == Convention_Intrinsic
-       && Present (Interface_Name (gnat_subprog)))
-     mech = By_Copy;
- 
-   /* Handle the first parameter of a valued procedure specially: it's a copy
-      mechanism for which the parameter is never allocated.  */
-   else if (first && Is_Valued_Procedure (gnat_subprog))
-     {
-       gcc_assert (Ekind (gnat_param) == E_Out_Parameter);
-       mech = By_Copy;
-       by_return = true;
-     }
- 
-   /* Or else, see if a Mechanism was supplied that forced this parameter
-      to be passed one way or another.  */
-   else if (mech == Default || mech == By_Copy || mech == By_Reference)
-     forced_by_ref
-       = (mech == By_Reference
- 	 && !foreign
- 	 && !TYPE_IS_BY_REFERENCE_P (gnu_param_type)
- 	 && !Is_Aliased (gnat_param));
- 
-   /* Positive mechanism means by copy for sufficiently small parameters.  */
-   else if (mech > 0)
-     {
-       if (TREE_CODE (gnu_param_type) == UNCONSTRAINED_ARRAY_TYPE
- 	  || TREE_CODE (TYPE_SIZE (gnu_param_type)) != INTEGER_CST
- 	  || compare_tree_int (TYPE_SIZE (gnu_param_type), mech) > 0)
- 	mech = By_Reference;
-       else
- 	mech = By_Copy;
-     }
- 
-   /* Otherwise, it's an unsupported mechanism so error out.  */
-   else
-     {
-       post_error ("unsupported mechanism for&", gnat_param);
-       mech = Default;
-     }
- 
-   /* If this is either a foreign function or if the underlying type won't
-      be passed by reference and is as aligned as the original type, strip
-      off possible padding type.  */
-   if (TYPE_IS_PADDING_P (gnu_param_type))
-     {
-       tree unpadded_type = TREE_TYPE (TYPE_FIELDS (gnu_param_type));
- 
-       if (foreign
- 	  || (mech != By_Reference
- 	      && !must_pass_by_ref (unpadded_type)
- 	      && (mech == By_Copy || !default_pass_by_ref (unpadded_type))
- 	      && TYPE_ALIGN (unpadded_type) >= TYPE_ALIGN (gnu_param_type)))
- 	gnu_param_type = unpadded_type;
-     }
- 
-   /* For foreign conventions, pass arrays as pointers to the element type.
-      First check for unconstrained array and get the underlying array.  */
-   if (foreign && TREE_CODE (gnu_param_type) == UNCONSTRAINED_ARRAY_TYPE)
-     gnu_param_type
-       = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_param_type))));
- 
-   /* Arrays are passed as pointers to element type for foreign conventions.  */
-   if (foreign && mech != By_Copy && TREE_CODE (gnu_param_type) == ARRAY_TYPE)
-     {
-       /* Strip off any multi-dimensional entries, then strip
- 	 off the last array to get the component type.  */
-       while (TREE_CODE (TREE_TYPE (gnu_param_type)) == ARRAY_TYPE
- 	     && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_param_type)))
- 	gnu_param_type = TREE_TYPE (gnu_param_type);
- 
-       gnu_param_type = TREE_TYPE (gnu_param_type);
-       gnu_param_type = build_pointer_type (gnu_param_type);
-       by_component_ptr = true;
-     }
- 
-   /* Fat pointers are passed as thin pointers for foreign conventions.  */
-   else if (foreign && TYPE_IS_FAT_POINTER_P (gnu_param_type))
-     gnu_param_type
-       = make_type_from_size (gnu_param_type, size_int (POINTER_SIZE), 0);
- 
-   /* Use a pointer type for the "this" pointer of C++ constructors.  */
-   else if (Chars (gnat_param) == Name_uInit && Is_Constructor (gnat_subprog))
-     {
-       gcc_assert (mech == By_Reference);
-       gnu_param_type = build_pointer_type (gnu_param_type);
-       by_ref = true;
-     }
- 
-   /* If we were requested or muss pass by reference, do so.
-      If we were requested to pass by copy, do so.
-      Otherwise, for foreign conventions, pass In Out or Out parameters
-      or aggregates by reference.  For COBOL and Fortran, pass all
-      integer and FP types that way too.  For Convention Ada, use
-      the standard Ada default.  */
-   else if (mech == By_Reference
- 	   || must_pass_by_ref (gnu_param_type)
- 	   || (mech != By_Copy
- 	       && ((foreign
- 		    && (!in_param || AGGREGATE_TYPE_P (gnu_param_type)))
- 		   || (foreign
- 		       && (Convention (gnat_subprog) == Convention_Fortran
- 			   || Convention (gnat_subprog) == Convention_COBOL)
- 		       && (INTEGRAL_TYPE_P (gnu_param_type)
- 			   || FLOAT_TYPE_P (gnu_param_type)))
- 		   || (!foreign
- 		       && default_pass_by_ref (gnu_param_type)))))
-     {
-       /* We take advantage of 6.2(12) by considering that references built for
- 	 parameters whose type isn't by-ref and for which the mechanism hasn't
- 	 been forced to by-ref allow only a restricted form of aliasing.  */
-       restricted_aliasing_p
- 	= !TYPE_IS_BY_REFERENCE_P (gnu_param_type) && mech != By_Reference;
-       gnu_param_type = build_reference_type (gnu_param_type);
-       by_ref = true;
-     }
- 
-   /* Pass In Out or Out parameters using copy-in copy-out mechanism.  */
-   else if (!in_param)
-     *cico = true;
- 
-   input_location = saved_location;
- 
-   if (mech == By_Copy && (by_ref || by_component_ptr))
-     post_error ("?cannot pass & by copy", gnat_param);
- 
-   /* If this is an Out parameter that isn't passed by reference and whose
-      type doesn't require the initialization of formals, we don't make a
-      PARM_DECL for it.  Instead, it will be a VAR_DECL created when we
-      process the procedure, so just return its type here.  Likewise for
-      the _Init parameter of an initialization procedure or the special
-      parameter of a valued procedure, never pass them in.  */
-   if (Ekind (gnat_param) == E_Out_Parameter
-       && !by_ref
-       && !by_component_ptr
-       && (!type_requires_init_of_formal (Etype (gnat_param))
- 	  || Is_Init_Proc (gnat_subprog)
- 	  || by_return))
-     {
-       Set_Mechanism (gnat_param, By_Copy);
-       return gnu_param_type;
-     }
- 
-   gnu_param = create_param_decl (gnu_param_name, gnu_param_type);
-   TREE_READONLY (gnu_param) = ro_param || by_ref || by_component_ptr;
-   DECL_BY_REF_P (gnu_param) = by_ref;
-   DECL_FORCED_BY_REF_P (gnu_param) = forced_by_ref;
-   DECL_BY_COMPONENT_PTR_P (gnu_param) = by_component_ptr;
-   DECL_POINTS_TO_READONLY_P (gnu_param)
-     = (ro_param && (by_ref || by_component_ptr));
-   DECL_CAN_NEVER_BE_NULL_P (gnu_param) = Can_Never_Be_Null (gnat_param);
-   DECL_RESTRICTED_ALIASING_P (gnu_param) = restricted_aliasing_p;
-   Sloc_to_locus (Sloc (gnat_param), &DECL_SOURCE_LOCATION (gnu_param));
- 
-   /* If no Mechanism was specified, indicate what we're using, then
-      back-annotate it.  */
-   if (mech == Default)
-     mech = (by_ref || by_component_ptr) ? By_Reference : By_Copy;
- 
-   Set_Mechanism (gnat_param, mech);
-   return gnu_param;
- }
- 
- /* Associate GNAT_SUBPROG with GNU_TYPE, which must be a dummy type, so that
-    GNAT_SUBPROG is updated when GNU_TYPE is completed.
- 
-    Ada 2012 (AI05-019) says that freezing a subprogram does not always freeze
-    the corresponding profile, which means that, by the time the freeze node
-    of the subprogram is encountered, types involved in its profile may still
-    be not yet frozen.  That's why we need to update GNAT_SUBPROG when we see
-    the freeze node of types involved in its profile, either types of formal
-    parameters or the return type.  */
- 
- static void
- associate_subprog_with_dummy_type (Entity_Id gnat_subprog, tree gnu_type)
- {
-   gcc_assert (TYPE_IS_DUMMY_P (gnu_type));
- 
-   struct tree_entity_vec_map in;
-   in.base.from = gnu_type;
-   struct tree_entity_vec_map **slot
-     = dummy_to_subprog_map->find_slot (&in, INSERT);
-   if (!*slot)
-     {
-       tree_entity_vec_map *e = ggc_alloc<tree_entity_vec_map> ();
-       e->base.from = gnu_type;
-       e->to = NULL;
-       *slot = e;
-     }
- 
-   /* Even if there is already a slot for GNU_TYPE, we need to set the flag
-      because the vector might have been just emptied by update_profiles_with.
-      This can happen when there are 2 freeze nodes associated with different
-      views of the same type; the type will be really complete only after the
-      second freeze node is encountered.  */
-   TYPE_DUMMY_IN_PROFILE_P (gnu_type) = 1;
- 
-   vec<Entity_Id, va_gc_atomic> *v = (*slot)->to;
- 
-   /* Make sure GNAT_SUBPROG is not associated twice with the same dummy type,
-      since this would mean updating twice its profile.  */
-   if (v)
-     {
-       const unsigned len = v->length ();
-       unsigned int l = 0, u = len;
- 
-       /* Entity_Id is a simple integer so we can implement a stable order on
- 	 the vector with an ordered insertion scheme and binary search.  */
-       while (l < u)
- 	{
- 	  unsigned int m = (l + u) / 2;
- 	  int diff = (int) (*v)[m] - (int) gnat_subprog;
- 	  if (diff > 0)
- 	    u = m;
- 	  else if (diff < 0)
- 	    l = m + 1;
- 	  else
- 	    return;
- 	}
- 
-       /* l == u and therefore is the insertion point.  */
-       vec_safe_insert (v, l, gnat_subprog);
-     }
-   else
-     vec_safe_push (v, gnat_subprog);
- 
-   (*slot)->to = v;
- }
- 
- /* Update the GCC tree previously built for the profile of GNAT_SUBPROG.  */
- 
- static void
- update_profile (Entity_Id gnat_subprog)
- {
-   tree gnu_param_list;
-   tree gnu_type = gnat_to_gnu_subprog_type (gnat_subprog, true,
- 					    Needs_Debug_Info (gnat_subprog),
- 					    &gnu_param_list);
-   if (DECL_P (gnu_type))
-     {
-       /* Builtins cannot have their address taken so we can reset them.  */
-       gcc_assert (fndecl_built_in_p (gnu_type));
-       save_gnu_tree (gnat_subprog, NULL_TREE, false);
-       save_gnu_tree (gnat_subprog, gnu_type, false);
-       return;
-     }
- 
-   tree gnu_subprog = get_gnu_tree (gnat_subprog);
- 
-   TREE_TYPE (gnu_subprog) = gnu_type;
- 
-   /* If GNAT_SUBPROG is an actual subprogram, GNU_SUBPROG is a FUNCTION_DECL
-      and needs to be adjusted too.  */
-   if (Ekind (gnat_subprog) != E_Subprogram_Type)
-     {
-       tree gnu_entity_name = get_entity_name (gnat_subprog);
-       tree gnu_ext_name
- 	= gnu_ext_name_for_subprog (gnat_subprog, gnu_entity_name);
- 
-       DECL_ARGUMENTS (gnu_subprog) = gnu_param_list;
-       finish_subprog_decl (gnu_subprog, gnu_ext_name, gnu_type);
-     }
- }
- 
- /* Update the GCC trees previously built for the profiles involving GNU_TYPE,
-    a dummy type which appears in profiles.  */
- 
- void
- update_profiles_with (tree gnu_type)
- {
-   struct tree_entity_vec_map in;
-   in.base.from = gnu_type;
-   struct tree_entity_vec_map *e = dummy_to_subprog_map->find (&in);
-   gcc_assert (e);
-   vec<Entity_Id, va_gc_atomic> *v = e->to;
-   e->to = NULL;
- 
-   /* The flag needs to be reset before calling update_profile, in case
-      associate_subprog_with_dummy_type is again invoked on GNU_TYPE.  */
-   TYPE_DUMMY_IN_PROFILE_P (gnu_type) = 0;
- 
-   unsigned int i;
-   Entity_Id *iter;
-   FOR_EACH_VEC_ELT (*v, i, iter)
-     update_profile (*iter);
- 
-   vec_free (v);
- }
- 
- /* Return the GCC tree for GNAT_TYPE present in the profile of a subprogram.
- 
-    Ada 2012 (AI05-0151) says that incomplete types coming from a limited
-    context may now appear as parameter and result types.  As a consequence,
-    we may need to defer their translation until after a freeze node is seen
-    or to the end of the current unit.  We also aim at handling temporarily
-    incomplete types created by the usual delayed elaboration scheme.  */
- 
- static tree
- gnat_to_gnu_profile_type (Entity_Id gnat_type)
- {
-   /* This is the same logic as the E_Access_Type case of gnat_to_gnu_entity
-      so the rationale is exposed in that place.  These processings probably
-      ought to be merged at some point.  */
-   Entity_Id gnat_equiv = Gigi_Equivalent_Type (gnat_type);
-   const bool is_from_limited_with
-     = (Is_Incomplete_Type (gnat_equiv)
-        && From_Limited_With (gnat_equiv));
-   Entity_Id gnat_full_direct_first
-     = (is_from_limited_with
-        ? Non_Limited_View (gnat_equiv)
-        : (Is_Incomplete_Or_Private_Type (gnat_equiv)
- 	  ? Full_View (gnat_equiv) : Empty));
-   Entity_Id gnat_full_direct
-     = ((is_from_limited_with
- 	&& Present (gnat_full_direct_first)
- 	&& Is_Private_Type (gnat_full_direct_first))
-        ? Full_View (gnat_full_direct_first)
-        : gnat_full_direct_first);
-   Entity_Id gnat_full = Gigi_Equivalent_Type (gnat_full_direct);
-   Entity_Id gnat_rep = Present (gnat_full) ? gnat_full : gnat_equiv;
-   const bool in_main_unit = In_Extended_Main_Code_Unit (gnat_rep);
-   tree gnu_type;
- 
-   if (Present (gnat_full) && present_gnu_tree (gnat_full))
-     gnu_type = TREE_TYPE (get_gnu_tree (gnat_full));
- 
-   else if (is_from_limited_with
- 	   && ((!in_main_unit
- 	        && !present_gnu_tree (gnat_equiv)
- 		&& Present (gnat_full)
- 		&& (Is_Record_Type (gnat_full)
- 		    || Is_Array_Type (gnat_full)
- 		    || Is_Access_Type (gnat_full)))
- 	       || (in_main_unit && Present (Freeze_Node (gnat_rep)))))
-     {
-       gnu_type = make_dummy_type (gnat_equiv);
- 
-       if (!in_main_unit)
- 	{
- 	  struct incomplete *p = XNEW (struct incomplete);
- 
- 	  p->old_type = gnu_type;
- 	  p->full_type = gnat_equiv;
- 	  p->next = defer_limited_with_list;
- 	  defer_limited_with_list = p;
- 	}
-     }
- 
-   else if (type_annotate_only && No (gnat_equiv))
-     gnu_type = void_type_node;
- 
-   else
-     gnu_type = gnat_to_gnu_type (gnat_equiv);
- 
-   /* Access-to-unconstrained-array types need a special treatment.  */
-   if (Is_Array_Type (gnat_rep) && !Is_Constrained (gnat_rep))
-     {
-       if (!TYPE_POINTER_TO (gnu_type))
- 	build_dummy_unc_pointer_types (gnat_equiv, gnu_type);
-     }
- 
-   return gnu_type;
- }
- 
- /* Return true if TYPE contains only integral data, recursively if need be.  */
- 
- static bool
- type_contains_only_integral_data (tree type)
- {
-   switch (TREE_CODE (type))
-     {
-     case RECORD_TYPE:
-     case UNION_TYPE:
-     case QUAL_UNION_TYPE:
-       for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
- 	if (!type_contains_only_integral_data (TREE_TYPE (field)))
- 	  return false;
-       return true;
- 
-     case ARRAY_TYPE:
-     case COMPLEX_TYPE:
-       return type_contains_only_integral_data (TREE_TYPE (type));
- 
-     default:
-       return INTEGRAL_TYPE_P (type);
-     }
- 
-   gcc_unreachable ();
- }
- 
- /* Return a GCC tree for a subprogram type corresponding to GNAT_SUBPROG.
-    DEFINITION is true if this is for a subprogram being defined.  DEBUG_INFO_P
-    is true if we need to write debug information for other types that we may
-    create in the process.  Also set PARAM_LIST to the list of parameters.
-    If GNAT_SUBPROG is bound to a GCC builtin, return the DECL for the builtin
-    directly instead of its type.  */
- 
- static tree
- gnat_to_gnu_subprog_type (Entity_Id gnat_subprog, bool definition,
- 			  bool debug_info_p, tree *param_list)
- {
-   const Entity_Kind kind = Ekind (gnat_subprog);
-   const bool method_p = is_cplusplus_method (gnat_subprog);
-   const bool variadic = IN (Convention (gnat_subprog), Convention_C_Variadic);
-   Entity_Id gnat_return_type = Etype (gnat_subprog);
-   Entity_Id gnat_param;
-   tree gnu_type = present_gnu_tree (gnat_subprog)
- 		  ? TREE_TYPE (get_gnu_tree (gnat_subprog)) : NULL_TREE;
-   tree gnu_return_type;
-   tree gnu_param_type_list = NULL_TREE;
-   tree gnu_param_list = NULL_TREE;
-   /* Non-null for subprograms containing parameters passed by copy-in copy-out
-      (In Out or Out parameters not passed by reference), in which case it is
-      the list of nodes used to specify the values of the In Out/Out parameters
-      that are returned as a record upon procedure return.  The TREE_PURPOSE of
-      an element of this list is a FIELD_DECL of the record and the TREE_VALUE
-      is the PARM_DECL corresponding to that field.  This list will be saved in
-      the TYPE_CI_CO_LIST field of the FUNCTION_TYPE node we create.  */
-   tree gnu_cico_list = NULL_TREE;
-   tree gnu_cico_return_type = NULL_TREE;
-   tree gnu_cico_field_list = NULL_TREE;
-   bool gnu_cico_only_integral_type = true;
-   /* Although the semantics of "pure" units in Ada essentially match those of
-      "const" in GNU C, the semantics of the Is_Pure flag in GNAT do not say
-      anything about access to global memory, that's why it needs to be mapped
-      to "pure" instead of "const" in GNU C.  The property is orthogonal to the
-      "nothrow" property only if the EH circuitry is explicit in the internal
-      representation of the middle-end: if we are to completely hide the EH
-      circuitry from it, we need to declare that calls to pure Ada subprograms
-      that can throw have side effects, since they can trigger an "abnormal"
-      transfer of control; therefore they cannot be "pure" in the GCC sense.  */
-   bool pure_flag = Is_Pure (gnat_subprog) && Back_End_Exceptions ();
-   bool return_by_direct_ref_p = false;
-   bool return_by_invisi_ref_p = false;
-   bool return_unconstrained_p = false;
-   bool incomplete_profile_p = false;
-   int num;
- 
-   /* Look into the return type and get its associated GCC tree if it is not
-      void, and then compute various flags for the subprogram type.  But make
-      sure not to do this processing multiple times.  */
-   if (Ekind (gnat_return_type) == E_Void)
-     gnu_return_type = void_type_node;
- 
-   else if (gnu_type
- 	   && FUNC_OR_METHOD_TYPE_P (gnu_type)
- 	   && !TYPE_IS_DUMMY_P (TREE_TYPE (gnu_type)))
-     {
-       gnu_return_type = TREE_TYPE (gnu_type);
-       return_unconstrained_p = TYPE_RETURN_UNCONSTRAINED_P (gnu_type);
-       return_by_direct_ref_p = TYPE_RETURN_BY_DIRECT_REF_P (gnu_type);
-       return_by_invisi_ref_p = TREE_ADDRESSABLE (gnu_type);
-     }
- 
-   else
-     {
-       /* For foreign convention subprograms, return System.Address as void *
- 	 or equivalent.  Note that this comprises GCC builtins.  */
-       if (Has_Foreign_Convention (gnat_subprog)
- 	  && Is_Descendant_Of_Address (Underlying_Type (gnat_return_type)))
- 	gnu_return_type = ptr_type_node;
-       else
- 	gnu_return_type = gnat_to_gnu_profile_type (gnat_return_type);
- 
-       /* If this function returns by reference, make the actual return type
- 	 the reference type and make a note of that.  */
-       if (Returns_By_Ref (gnat_subprog))
- 	{
- 	  gnu_return_type = build_reference_type (gnu_return_type);
- 	  return_by_direct_ref_p = true;
- 	}
- 
-       /* If the return type is an unconstrained array type, the return value
- 	 will be allocated on the secondary stack so the actual return type
- 	 is the fat pointer type.  */
-       else if (TREE_CODE (gnu_return_type) == UNCONSTRAINED_ARRAY_TYPE)
- 	{
- 	  gnu_return_type = TYPE_REFERENCE_TO (gnu_return_type);
- 	  return_unconstrained_p = true;
- 	}
- 
-       /* This is the same unconstrained array case, but for a dummy type.  */
-       else if (TYPE_REFERENCE_TO (gnu_return_type)
- 	       && TYPE_IS_FAT_POINTER_P (TYPE_REFERENCE_TO (gnu_return_type)))
- 	{
- 	  gnu_return_type = TYPE_REFERENCE_TO (gnu_return_type);
- 	  return_unconstrained_p = true;
- 	}
- 
-       /* Likewise, if the return type requires a transient scope, the return
- 	 value will also be allocated on the secondary stack so the actual
- 	 return type is the reference type.  */
-       else if (Requires_Transient_Scope (gnat_return_type))
- 	{
- 	  gnu_return_type = build_reference_type (gnu_return_type);
- 	  return_unconstrained_p = true;
- 	}
- 
-       /* If the Mechanism is By_Reference, ensure this function uses the
- 	 target's by-invisible-reference mechanism, which may not be the
- 	 same as above (e.g. it might be passing an extra parameter).  */
-       else if (kind == E_Function && Mechanism (gnat_subprog) == By_Reference)
- 	return_by_invisi_ref_p = true;
- 
-       /* Likewise, if the return type is itself By_Reference.  */
-       else if (TYPE_IS_BY_REFERENCE_P (gnu_return_type))
- 	return_by_invisi_ref_p = true;
- 
-       /* If the type is a padded type and the underlying type would not be
- 	 passed by reference or the function has a foreign convention, return
- 	 the underlying type.  */
-       else if (TYPE_IS_PADDING_P (gnu_return_type)
- 	       && (!default_pass_by_ref
- 		      (TREE_TYPE (TYPE_FIELDS (gnu_return_type)))
- 		   || Has_Foreign_Convention (gnat_subprog)))
- 	gnu_return_type = TREE_TYPE (TYPE_FIELDS (gnu_return_type));
- 
-       /* If the return type is unconstrained, it must have a maximum size.
- 	 Use the padded type as the effective return type.  And ensure the
- 	 function uses the target's by-invisible-reference mechanism to
- 	 avoid copying too much data when it returns.  */
-       if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_return_type)))
- 	{
- 	  tree orig_type = gnu_return_type;
- 	  tree max_return_size = max_size (TYPE_SIZE (gnu_return_type), true);
- 
- 	  /* If the size overflows to 0, set it to an arbitrary positive
- 	     value so that assignments in the type are preserved.  Their
- 	     actual size is independent of this positive value.  */
- 	  if (TREE_CODE (max_return_size) == INTEGER_CST
- 	      && TREE_OVERFLOW (max_return_size)
- 	      && integer_zerop (max_return_size))
- 	    {
- 	      max_return_size = copy_node (bitsize_unit_node);
- 	      TREE_OVERFLOW (max_return_size) = 1;
- 	    }
- 
- 	  gnu_return_type = maybe_pad_type (gnu_return_type, max_return_size,
- 					    0, gnat_subprog, false, definition,
- 					    true);
- 
- 	  /* Declare it now since it will never be declared otherwise.  This
- 	     is necessary to ensure that its subtrees are properly marked.  */
- 	  if (gnu_return_type != orig_type
- 	      && !DECL_P (TYPE_NAME (gnu_return_type)))
- 	    create_type_decl (TYPE_NAME (gnu_return_type), gnu_return_type,
- 			      true, debug_info_p, gnat_subprog);
- 
- 	  return_by_invisi_ref_p = true;
- 	}
- 
-       /* If the return type has a size that overflows, we usually cannot have
- 	 a function that returns that type.  This usage doesn't really make
- 	 sense anyway, so issue an error here.  */
-       if (!return_by_invisi_ref_p
- 	  && TYPE_SIZE_UNIT (gnu_return_type)
- 	  && TREE_CODE (TYPE_SIZE_UNIT (gnu_return_type)) == INTEGER_CST
- 	  && !valid_constant_size_p (TYPE_SIZE_UNIT (gnu_return_type)))
- 	{
- 	  post_error ("cannot return type whose size overflows", gnat_subprog);
- 	  gnu_return_type = copy_type (gnu_return_type);
- 	  TYPE_SIZE (gnu_return_type) = bitsize_zero_node;
- 	  TYPE_SIZE_UNIT (gnu_return_type) = size_zero_node;
- 	}
- 
-       /* If the return type is incomplete, there are 2 cases: if the function
- 	 returns by reference, then the return type is only linked indirectly
- 	 in the profile, so the profile can be seen as complete since it need
- 	 not be further modified, only the reference types need be adjusted;
- 	 otherwise the profile is incomplete and need be adjusted too.  */
-       if (TYPE_IS_DUMMY_P (gnu_return_type))
- 	{
- 	  associate_subprog_with_dummy_type (gnat_subprog, gnu_return_type);
- 	  incomplete_profile_p = true;
- 	}
- 
-       if (kind == E_Function)
- 	Set_Mechanism (gnat_subprog, return_unconstrained_p
- 				     || return_by_direct_ref_p
- 				     || return_by_invisi_ref_p
- 				     ? By_Reference : By_Copy);
-     }
- 
-   /* A procedure (something that doesn't return anything) shouldn't be
-      considered pure since there would be no reason for calling such a
-      subprogram.  Note that procedures with Out (or In Out) parameters
-      have already been converted into a function with a return type.
-      Similarly, if the function returns an unconstrained type, then the
-      function will allocate the return value on the secondary stack and
-      thus calls to it cannot be CSE'ed, lest the stack be reclaimed.  */
-   if (VOID_TYPE_P (gnu_return_type) || return_unconstrained_p)
-     pure_flag = false;
- 
-   /* Loop over the parameters and get their associated GCC tree.  While doing
-      this, build a copy-in copy-out structure if we need one.  */
-   for (gnat_param = First_Formal_With_Extras (gnat_subprog), num = 0;
-        Present (gnat_param);
-        gnat_param = Next_Formal_With_Extras (gnat_param), num++)
-     {
-       const bool mech_is_by_ref
- 	= Mechanism (gnat_param) == By_Reference
- 	  && !(num == 0 && Is_Valued_Procedure (gnat_subprog));
-       tree gnu_param_name = get_entity_name (gnat_param);
-       tree gnu_param, gnu_param_type;
-       bool cico = false;
- 
-       /* For a variadic C function, do not build unnamed parameters.  */
-       if (variadic
- 	  && num == (Convention (gnat_subprog) - Convention_C_Variadic_0))
- 	break;
- 
-       /* Fetch an existing parameter with complete type and reuse it.  But we
- 	 didn't save the CICO property so we can only do it for In parameters
- 	 or parameters passed by reference.  */
-       if ((Ekind (gnat_param) == E_In_Parameter || mech_is_by_ref)
- 	  && present_gnu_tree (gnat_param)
- 	  && (gnu_param = get_gnu_tree (gnat_param))
- 	  && !TYPE_IS_DUMMY_P (TREE_TYPE (gnu_param)))
- 	{
- 	  DECL_CHAIN (gnu_param) = NULL_TREE;
- 	  gnu_param_type = TREE_TYPE (gnu_param);
- 	}
- 
-       /* Otherwise translate the parameter type and act accordingly.  */
-       else
- 	{
- 	  Entity_Id gnat_param_type = Etype (gnat_param);
- 
- 	  /* For foreign convention subprograms, pass System.Address as void *
- 	     or equivalent.  Note that this comprises GCC builtins.  */
- 	  if (Has_Foreign_Convention (gnat_subprog)
- 	      && Is_Descendant_Of_Address (Underlying_Type (gnat_param_type)))
- 	    gnu_param_type = ptr_type_node;
- 	  else
- 	    gnu_param_type = gnat_to_gnu_profile_type (gnat_param_type);
- 
- 	  /* If the parameter type is incomplete, there are 2 cases: if it is
- 	     passed by reference, then the type is only linked indirectly in
- 	     the profile, so the profile can be seen as complete since it need
- 	     not be further modified, only the reference type need be adjusted;
- 	     otherwise the profile is incomplete and need be adjusted too.  */
- 	  if (TYPE_IS_DUMMY_P (gnu_param_type))
- 	    {
- 	      Node_Id gnat_decl;
- 
- 	      if (mech_is_by_ref
- 		  || (TYPE_REFERENCE_TO (gnu_param_type)
- 		      && TYPE_IS_FAT_POINTER_P
- 			 (TYPE_REFERENCE_TO (gnu_param_type)))
- 		  || TYPE_IS_BY_REFERENCE_P (gnu_param_type))
- 		{
- 		  gnu_param_type = build_reference_type (gnu_param_type);
- 		  gnu_param
- 		    = create_param_decl (gnu_param_name, gnu_param_type);
- 		  TREE_READONLY (gnu_param) = 1;
- 		  DECL_BY_REF_P (gnu_param) = 1;
- 		  DECL_POINTS_TO_READONLY_P (gnu_param)
- 		    = (Ekind (gnat_param) == E_In_Parameter
- 		       && !Address_Taken (gnat_param));
- 		  Set_Mechanism (gnat_param, By_Reference);
- 		  Sloc_to_locus (Sloc (gnat_param),
- 				 &DECL_SOURCE_LOCATION (gnu_param));
- 		}
- 
- 	      /* ??? This is a kludge to support null procedures in spec taking
- 		 a parameter with an untagged incomplete type coming from a
- 		 limited context.  The front-end creates a body without knowing
- 		 anything about the non-limited view, which is illegal Ada and
- 		 cannot be supported.  Create a parameter with a fake type.  */
- 	      else if (kind == E_Procedure
- 		       && (gnat_decl = Parent (gnat_subprog))
- 		       && Nkind (gnat_decl) == N_Procedure_Specification
- 		       && Null_Present (gnat_decl)
- 		       && Is_Incomplete_Type (gnat_param_type))
- 		gnu_param = create_param_decl (gnu_param_name, ptr_type_node);
- 
- 	      else
- 		{
- 		  /* Build a minimal PARM_DECL without DECL_ARG_TYPE so that
- 		     Call_to_gnu will stop if it encounters the PARM_DECL.  */
- 		  gnu_param
- 		    = build_decl (input_location, PARM_DECL, gnu_param_name,
- 				  gnu_param_type);
- 		  associate_subprog_with_dummy_type (gnat_subprog,
- 						     gnu_param_type);
- 		  incomplete_profile_p = true;
- 		}
- 	    }
- 
- 	  /* Otherwise build the parameter declaration normally.  */
- 	  else
- 	    {
- 	      gnu_param
- 		= gnat_to_gnu_param (gnat_param, gnu_param_type, num == 0,
- 				     gnat_subprog, &cico);
- 
- 	      /* We are returned either a PARM_DECL or a type if no parameter
- 		 needs to be passed; in either case, adjust the type.  */
- 	      if (DECL_P (gnu_param))
- 		gnu_param_type = TREE_TYPE (gnu_param);
- 	      else
- 		{
- 		  gnu_param_type = gnu_param;
- 		  gnu_param = NULL_TREE;
- 		}
- 	    }
- 	}
- 
-       /* If we have a GCC tree for the parameter, register it.  */
-       save_gnu_tree (gnat_param, NULL_TREE, false);
-       if (gnu_param)
- 	{
- 	  gnu_param_type_list
- 	    = tree_cons (NULL_TREE, gnu_param_type, gnu_param_type_list);
- 	  DECL_CHAIN (gnu_param) = gnu_param_list;
- 	  gnu_param_list = gnu_param;
- 	  save_gnu_tree (gnat_param, gnu_param, false);
- 
- 	  /* A pure function in the Ada sense which takes an access parameter
- 	     may modify memory through it and thus cannot be considered pure
- 	     in the GCC sense, unless it's access-to-function.  Likewise it if
- 	     takes a by-ref In Out or Out parameter.  But if it takes a by-ref
- 	     In parameter, then it may only read memory through it and can be
- 	     considered pure in the GCC sense.  */
- 	  if (pure_flag
- 	      && ((POINTER_TYPE_P (gnu_param_type)
- 		   && TREE_CODE (TREE_TYPE (gnu_param_type)) != FUNCTION_TYPE)
- 		  || TYPE_IS_FAT_POINTER_P (gnu_param_type)))
- 	    pure_flag = DECL_POINTS_TO_READONLY_P (gnu_param);
- 	}
- 
-       /* If the parameter uses the copy-in copy-out mechanism, allocate a field
- 	 for it in the return type and register the association.  */
-       if (cico && !incomplete_profile_p)
- 	{
- 	  if (!gnu_cico_list)
- 	    {
- 	      gnu_cico_return_type = make_node (RECORD_TYPE);
- 
- 	      /* If this is a function, we also need a field for the
- 		 return value to be placed.  */
- 	      if (!VOID_TYPE_P (gnu_return_type))
- 		{
- 		  tree gnu_field
- 		    = create_field_decl (get_identifier ("RETVAL"),
- 				         gnu_return_type,
- 				         gnu_cico_return_type, NULL_TREE,
- 				         NULL_TREE, 0, 0);
- 		  Sloc_to_locus (Sloc (gnat_subprog),
- 			         &DECL_SOURCE_LOCATION (gnu_field));
- 		  gnu_cico_field_list = gnu_field;
- 		  gnu_cico_list
- 		    = tree_cons (gnu_field, void_type_node, NULL_TREE);
- 		  if (!type_contains_only_integral_data (gnu_return_type))
- 		    gnu_cico_only_integral_type = false;
- 		}
- 
- 	      TYPE_NAME (gnu_cico_return_type) = get_identifier ("RETURN");
- 	      /* Set a default alignment to speed up accesses.  But we should
- 		 not increase the size of the structure too much, lest it does
- 		 not fit in return registers anymore.  */
- 	      SET_TYPE_ALIGN (gnu_cico_return_type,
- 			      get_mode_alignment (ptr_mode));
- 	    }
- 
- 	  tree gnu_field
- 	    = create_field_decl (gnu_param_name, gnu_param_type,
- 				 gnu_cico_return_type, NULL_TREE, NULL_TREE,
- 				 0, 0);
- 	  Sloc_to_locus (Sloc (gnat_param),
- 			 &DECL_SOURCE_LOCATION (gnu_field));
- 	  DECL_CHAIN (gnu_field) = gnu_cico_field_list;
- 	  gnu_cico_field_list = gnu_field;
- 	  gnu_cico_list = tree_cons (gnu_field, gnu_param, gnu_cico_list);
- 	  if (!type_contains_only_integral_data (gnu_param_type))
- 	    gnu_cico_only_integral_type = false;
- 	}
-     }
- 
-   /* If the subprogram uses the copy-in copy-out mechanism, possibly adjust
-      and finish up the return type.  */
-   if (gnu_cico_list && !incomplete_profile_p)
-     {
-       /* If we have a CICO list but it has only one entry, we convert
- 	 this function into a function that returns this object.  */
-       if (list_length (gnu_cico_list) == 1)
- 	gnu_cico_return_type = TREE_TYPE (TREE_PURPOSE (gnu_cico_list));
- 
-       /* Do not finalize the return type if the subprogram is stubbed
- 	 since structures are incomplete for the back-end.  */
-       else if (Convention (gnat_subprog) != Convention_Stubbed)
- 	{
- 	  finish_record_type (gnu_cico_return_type,
- 			      nreverse (gnu_cico_field_list),
- 			      0, false);
- 
- 	  /* Try to promote the mode if the return type is fully returned
- 	     in integer registers, again to speed up accesses.  */
- 	  if (TYPE_MODE (gnu_cico_return_type) == BLKmode
- 	      && gnu_cico_only_integral_type
- 	      && !targetm.calls.return_in_memory (gnu_cico_return_type,
- 						  NULL_TREE))
- 	    {
- 	      unsigned int size
- 		= TREE_INT_CST_LOW (TYPE_SIZE (gnu_cico_return_type));
- 	      unsigned int i = BITS_PER_UNIT;
- 	      scalar_int_mode mode;
- 
- 	      while (i < size)
- 		i <<= 1;
- 	      if (int_mode_for_size (i, 0).exists (&mode))
- 		{
- 		  SET_TYPE_MODE (gnu_cico_return_type, mode);
- 		  SET_TYPE_ALIGN (gnu_cico_return_type,
- 				  GET_MODE_ALIGNMENT (mode));
- 		  TYPE_SIZE (gnu_cico_return_type)
- 		    = bitsize_int (GET_MODE_BITSIZE (mode));
- 		  TYPE_SIZE_UNIT (gnu_cico_return_type)
- 		    = size_int (GET_MODE_SIZE (mode));
- 		}
- 	    }
- 
- 	  /* But demote the mode if the return type is partly returned in FP
- 	     registers to avoid creating problematic paradoxical subregs.
- 	     Note that we need to cater to historical 32-bit architectures
- 	     that incorrectly use the mode to select the return mechanism.  */
- 	  else if (INTEGRAL_MODE_P (TYPE_MODE (gnu_cico_return_type))
- 		   && !gnu_cico_only_integral_type
- 		   && BITS_PER_WORD >= 64
- 		   && !targetm.calls.return_in_memory (gnu_cico_return_type,
- 						       NULL_TREE))
- 	    SET_TYPE_MODE (gnu_cico_return_type, BLKmode);
- 
- 	  if (debug_info_p)
- 	    rest_of_record_type_compilation (gnu_cico_return_type);
- 	}
- 
-       gnu_return_type = gnu_cico_return_type;
-     }
- 
-   /* The lists have been built in reverse.  */
-   gnu_param_type_list = nreverse (gnu_param_type_list);
-   if (!variadic)
-     gnu_param_type_list = chainon (gnu_param_type_list, void_list_node);
-   gnu_param_list = nreverse (gnu_param_list);
-   gnu_cico_list = nreverse (gnu_cico_list);
- 
-   /* Turn imported C++ constructors into their callable form as done in the
-      front-end, i.e. add the "this" pointer and void the return type.  */
-   if (method_p
-       && Is_Constructor (gnat_subprog)
-       && !VOID_TYPE_P (gnu_return_type))
-     {
-       tree gnu_param_type
- 	= build_pointer_type (gnat_to_gnu_profile_type (gnat_return_type));
-       tree gnu_param_name = get_identifier (Get_Name_String (Name_uInit));
-       tree gnu_param
- 	= build_decl (input_location, PARM_DECL, gnu_param_name,
- 		      gnu_param_type);
-       gnu_param_type_list
- 	= tree_cons (NULL_TREE, gnu_param_type, gnu_param_type_list);
-       DECL_CHAIN (gnu_param) = gnu_param_list;
-       gnu_param_list = gnu_param;
-       gnu_return_type = void_type_node;
-     }
- 
-   /* If the profile is incomplete, we only set the (temporary) return and
-      parameter types; otherwise, we build the full type.  In either case,
-      we reuse an already existing GCC tree that we built previously here.  */
-   if (incomplete_profile_p)
-     {
-       if (gnu_type && FUNC_OR_METHOD_TYPE_P (gnu_type))
- 	;
-       else
- 	gnu_type = make_node (method_p ? METHOD_TYPE : FUNCTION_TYPE);
-       TREE_TYPE (gnu_type) = gnu_return_type;
-       TYPE_ARG_TYPES (gnu_type) = gnu_param_type_list;
-       TYPE_RETURN_UNCONSTRAINED_P (gnu_type) = return_unconstrained_p;
-       TYPE_RETURN_BY_DIRECT_REF_P (gnu_type) = return_by_direct_ref_p;
-       TREE_ADDRESSABLE (gnu_type) = return_by_invisi_ref_p;
-     }
-   else
-     {
-       if (gnu_type && FUNC_OR_METHOD_TYPE_P (gnu_type))
- 	{
- 	  TREE_TYPE (gnu_type) = gnu_return_type;
- 	  TYPE_ARG_TYPES (gnu_type) = gnu_param_type_list;
- 	  if (method_p)
- 	    {
- 	      tree gnu_basetype = TREE_TYPE (TREE_VALUE (gnu_param_type_list));
- 	      TYPE_METHOD_BASETYPE (gnu_type)
- 		= TYPE_MAIN_VARIANT (gnu_basetype);
- 	    }
- 	  TYPE_CI_CO_LIST (gnu_type) = gnu_cico_list;
- 	  TYPE_RETURN_UNCONSTRAINED_P (gnu_type) = return_unconstrained_p;
- 	  TYPE_RETURN_BY_DIRECT_REF_P (gnu_type) = return_by_direct_ref_p;
- 	  TREE_ADDRESSABLE (gnu_type) = return_by_invisi_ref_p;
- 	  TYPE_CANONICAL (gnu_type) = gnu_type;
- 	  layout_type (gnu_type);
- 	}
-       else
- 	{
- 	  if (method_p)
- 	    {
- 	      tree gnu_basetype = TREE_TYPE (TREE_VALUE (gnu_param_type_list));
- 	      gnu_type
- 		= build_method_type_directly (gnu_basetype, gnu_return_type,
- 					      TREE_CHAIN (gnu_param_type_list));
- 	    }
- 	  else
- 	    gnu_type
- 	      = build_function_type (gnu_return_type, gnu_param_type_list);
- 
- 	  /* GNU_TYPE may be shared since GCC hashes types.  Unshare it if it
- 	     has a different TYPE_CI_CO_LIST or flags.  */
- 	  if (!fntype_same_flags_p (gnu_type, gnu_cico_list,
- 				    return_unconstrained_p,
- 				    return_by_direct_ref_p,
- 				    return_by_invisi_ref_p))
- 	    {
- 	      gnu_type = copy_type (gnu_type);
- 	      TYPE_CI_CO_LIST (gnu_type) = gnu_cico_list;
- 	      TYPE_RETURN_UNCONSTRAINED_P (gnu_type) = return_unconstrained_p;
- 	      TYPE_RETURN_BY_DIRECT_REF_P (gnu_type) = return_by_direct_ref_p;
- 	      TREE_ADDRESSABLE (gnu_type) = return_by_invisi_ref_p;
- 	    }
- 	}
- 
-       if (pure_flag)
- 	gnu_type = change_qualified_type (gnu_type, TYPE_QUAL_RESTRICT);
- 
-       if (No_Return (gnat_subprog))
- 	gnu_type = change_qualified_type (gnu_type, TYPE_QUAL_VOLATILE);
- 
-       /* If this subprogram is expectedly bound to a GCC builtin, fetch the
- 	 corresponding DECL node and check the parameter association.  */
-       if (Convention (gnat_subprog) == Convention_Intrinsic
- 	  && Present (Interface_Name (gnat_subprog)))
- 	{
- 	  tree gnu_ext_name = create_concat_name (gnat_subprog, NULL);
- 	  tree gnu_builtin_decl = builtin_decl_for (gnu_ext_name);
- 
- 	  /* If we have a builtin DECL for that function, use it.  Check if
- 	     the profiles are compatible and warn if they are not.  Note that
- 	     the checker is expected to post diagnostics in this case.  */
- 	  if (gnu_builtin_decl)
- 	    {
- 	      intrin_binding_t inb
- 		= { gnat_subprog, gnu_type, TREE_TYPE (gnu_builtin_decl) };
- 
- 	      if (!intrin_profiles_compatible_p (&inb))
- 		post_error
- 		  ("?profile of& doesn''t match the builtin it binds!",
- 		   gnat_subprog);
- 
- 	      return gnu_builtin_decl;
- 	    }
- 
- 	  /* Inability to find the builtin DECL most often indicates a genuine
- 	     mistake, but imports of unregistered intrinsics are sometimes used
- 	     on purpose to allow hooking in alternate bodies; we post a warning
- 	     conditioned on Wshadow in this case, to let developers be notified
- 	     on demand without risking false positives with common default sets
- 	     of options.  */
- 	  if (warn_shadow)
- 	    post_error ("?gcc intrinsic not found for&!", gnat_subprog);
- 	}
-     }
- 
-   *param_list = gnu_param_list;
- 
-   return gnu_type;
- }
- 
- /* Return the external name for GNAT_SUBPROG given its entity name.  */
- 
- static tree
- gnu_ext_name_for_subprog (Entity_Id gnat_subprog, tree gnu_entity_name)
- {
-   tree gnu_ext_name = create_concat_name (gnat_subprog, NULL);
- 
-   /* If there was no specified Interface_Name and the external and
-      internal names of the subprogram are the same, only use the
-      internal name to allow disambiguation of nested subprograms.  */
-   if (No (Interface_Name (gnat_subprog)) && gnu_ext_name == gnu_entity_name)
-     gnu_ext_name = NULL_TREE;
- 
-   return gnu_ext_name;
- }
- 
- /* Set TYPE_NONALIASED_COMPONENT on an array type built by means of
-    build_nonshared_array_type.  */
- 
- static void
- set_nonaliased_component_on_array_type (tree type)
- {
-   TYPE_NONALIASED_COMPONENT (type) = 1;
-   if (TYPE_CANONICAL (type))
-     TYPE_NONALIASED_COMPONENT (TYPE_CANONICAL (type)) = 1;
- }
- 
- /* Set TYPE_REVERSE_STORAGE_ORDER on an array type built by means of
-    build_nonshared_array_type.  */
- 
- static void
- set_reverse_storage_order_on_array_type (tree type)
- {
-   TYPE_REVERSE_STORAGE_ORDER (type) = 1;
-   if (TYPE_CANONICAL (type))
-     TYPE_REVERSE_STORAGE_ORDER (TYPE_CANONICAL (type)) = 1;
- }
- 
- /* Return true if DISCR1 and DISCR2 represent the same discriminant.  */
- 
- static bool
- same_discriminant_p (Entity_Id discr1, Entity_Id discr2)
- {
-   while (Present (Corresponding_Discriminant (discr1)))
-     discr1 = Corresponding_Discriminant (discr1);
- 
-   while (Present (Corresponding_Discriminant (discr2)))
-     discr2 = Corresponding_Discriminant (discr2);
- 
-   return
-     Original_Record_Component (discr1) == Original_Record_Component (discr2);
- }
- 
- /* Return true if the array type GNU_TYPE, which represents a dimension of
-    GNAT_TYPE, has a non-aliased component in the back-end sense.  */
- 
- static bool
- array_type_has_nonaliased_component (tree gnu_type, Entity_Id gnat_type)
- {
-   /* If the array type has an aliased component in the front-end sense,
-      then it also has an aliased component in the back-end sense.  */
-   if (Has_Aliased_Components (gnat_type))
-     return false;
- 
-   /* If this is a derived type, then it has a non-aliased component if
-      and only if its parent type also has one.  */
-   if (Is_Derived_Type (gnat_type))
-     {
-       tree gnu_parent_type = gnat_to_gnu_type (Etype (gnat_type));
-       if (TREE_CODE (gnu_parent_type) == UNCONSTRAINED_ARRAY_TYPE)
- 	gnu_parent_type
- 	  = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_parent_type))));
-       return TYPE_NONALIASED_COMPONENT (gnu_parent_type);
-     }
- 
-   /* For a multi-dimensional array type, find the component type.  */
-   while (TREE_CODE (TREE_TYPE (gnu_type)) == ARRAY_TYPE
- 	 && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type)))
-     gnu_type = TREE_TYPE (gnu_type);
- 
-   /* Consider that an array of pointers has an aliased component, which is
-      sort of logical and helps with Taft Amendment types in LTO mode.  */
-   if (POINTER_TYPE_P (TREE_TYPE (gnu_type)))
-     return false;
- 
-   /* Otherwise, rely exclusively on properties of the element type.  */
-   return type_for_nonaliased_component_p (TREE_TYPE (gnu_type));
- }
- 
- /* Return true if GNAT_ADDRESS is a value known at compile-time.  */
- 
- static bool
- compile_time_known_address_p (Node_Id gnat_address)
- {
-   /* Handle reference to a constant.  */
-   if (Is_Entity_Name (gnat_address)
-       && Ekind (Entity (gnat_address)) == E_Constant)
-     {
-       gnat_address = Constant_Value (Entity (gnat_address));
-       if (No (gnat_address))
- 	return false;
-     }
- 
-   /* Catch System'To_Address.  */
-   if (Nkind (gnat_address) == N_Unchecked_Type_Conversion)
-     gnat_address = Expression (gnat_address);
- 
-   return Compile_Time_Known_Value (gnat_address);
- }
- 
- /* Return true if GNAT_RANGE, a N_Range node, cannot be superflat, i.e. if the
-    inequality HB >= LB-1 is true.  LB and HB are the low and high bounds.  */
- 
- static bool
- cannot_be_superflat (Node_Id gnat_range)
- {
-   Node_Id gnat_lb = Low_Bound (gnat_range), gnat_hb = High_Bound (gnat_range);
-   Node_Id scalar_range;
-   tree gnu_lb, gnu_hb, gnu_lb_minus_one;
- 
-   /* If the low bound is not constant, try to find an upper bound.  */
-   while (Nkind (gnat_lb) != N_Integer_Literal
- 	 && (Ekind (Etype (gnat_lb)) == E_Signed_Integer_Subtype
- 	     || Ekind (Etype (gnat_lb)) == E_Modular_Integer_Subtype)
- 	 && (scalar_range = Scalar_Range (Etype (gnat_lb)))
- 	 && (Nkind (scalar_range) == N_Signed_Integer_Type_Definition
- 	     || Nkind (scalar_range) == N_Range))
-     gnat_lb = High_Bound (scalar_range);
- 
-   /* If the high bound is not constant, try to find a lower bound.  */
-   while (Nkind (gnat_hb) != N_Integer_Literal
- 	 && (Ekind (Etype (gnat_hb)) == E_Signed_Integer_Subtype
- 	     || Ekind (Etype (gnat_hb)) == E_Modular_Integer_Subtype)
- 	 && (scalar_range = Scalar_Range (Etype (gnat_hb)))
- 	 && (Nkind (scalar_range) == N_Signed_Integer_Type_Definition
- 	     || Nkind (scalar_range) == N_Range))
-     gnat_hb = Low_Bound (scalar_range);
- 
-   /* If we have failed to find constant bounds, punt.  */
-   if (Nkind (gnat_lb) != N_Integer_Literal
-       || Nkind (gnat_hb) != N_Integer_Literal)
-     return false;
- 
-   /* We need at least a signed 64-bit type to catch most cases.  */
-   gnu_lb = UI_To_gnu (Intval (gnat_lb), sbitsizetype);
-   gnu_hb = UI_To_gnu (Intval (gnat_hb), sbitsizetype);
-   if (TREE_OVERFLOW (gnu_lb) || TREE_OVERFLOW (gnu_hb))
-     return false;
- 
-   /* If the low bound is the smallest integer, nothing can be smaller.  */
-   gnu_lb_minus_one = size_binop (MINUS_EXPR, gnu_lb, sbitsize_one_node);
-   if (TREE_OVERFLOW (gnu_lb_minus_one))
-     return true;
- 
-   return !tree_int_cst_lt (gnu_hb, gnu_lb_minus_one);
- }
- 
- /* Return true if GNU_EXPR is (essentially) the address of a CONSTRUCTOR.  */
- 
- static bool
- constructor_address_p (tree gnu_expr)
- {
-   while (TREE_CODE (gnu_expr) == NOP_EXPR
- 	 || TREE_CODE (gnu_expr) == CONVERT_EXPR
- 	 || TREE_CODE (gnu_expr) == NON_LVALUE_EXPR)
-     gnu_expr = TREE_OPERAND (gnu_expr, 0);
- 
-   return (TREE_CODE (gnu_expr) == ADDR_EXPR
- 	  && TREE_CODE (TREE_OPERAND (gnu_expr, 0)) == CONSTRUCTOR);
- }
- 
- /* Return true if the size in units represented by GNU_SIZE can be handled by
-    an allocation.  If STATIC_P is true, consider only what can be done with a
-    static allocation.  */
- 
- static bool
- allocatable_size_p (tree gnu_size, bool static_p)
- {
-   /* We can allocate a fixed size if it is a valid for the middle-end.  */
-   if (TREE_CODE (gnu_size) == INTEGER_CST)
-     return valid_constant_size_p (gnu_size);
- 
-   /* We can allocate a variable size if this isn't a static allocation.  */
-   else
-     return !static_p;
- }
- 
- /* Return true if GNU_EXPR needs a conversion to GNU_TYPE when used as the
-    initial value of an object of GNU_TYPE.  */
- 
- static bool
- initial_value_needs_conversion (tree gnu_type, tree gnu_expr)
- {
-   /* Do not convert if the object's type is unconstrained because this would
-      generate useless evaluations of the CONSTRUCTOR to compute the size.  */
-   if (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE
-       || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
-     return false;
- 
-   /* Do not convert if the object's type is a padding record whose field is of
-      self-referential size because we want to copy only the actual data.  */
-   if (type_is_padding_self_referential (gnu_type))
-     return false;
- 
-   /* Do not convert a call to a function that returns with variable size since
-      we want to use the return slot optimization in this case.  */
-   if (TREE_CODE (gnu_expr) == CALL_EXPR
-       && return_type_with_variable_size_p (TREE_TYPE (gnu_expr)))
-     return false;
- 
-   /* Do not convert to a record type with a variant part from a record type
-      without one, to keep the object simpler.  */
-   if (TREE_CODE (gnu_type) == RECORD_TYPE
-       && TREE_CODE (TREE_TYPE (gnu_expr)) == RECORD_TYPE
-       && get_variant_part (gnu_type)
-       && !get_variant_part (TREE_TYPE (gnu_expr)))
-     return false;
- 
-   /* In all the other cases, convert the expression to the object's type.  */
-   return true;
- }
- 
- /* Add the contribution of [MIN, MAX] to the current number of elements N_ELEM
-    of an array type and return the result, or NULL_TREE if it overflowed.  */
- 
- static tree
- update_n_elem (tree n_elem, tree min, tree max)
- {
-   /* First deal with the empty case.  */
-   if (TREE_CODE (min) == INTEGER_CST
-       && TREE_CODE (max) == INTEGER_CST
-       && tree_int_cst_lt (max, min))
-     return size_zero_node;
- 
-   min = convert (sizetype, min);
-   max = convert (sizetype, max);
- 
-   /* Compute the number of elements in this dimension.  */
-   tree this_n_elem
-     = size_binop (PLUS_EXPR, size_one_node, size_binop (MINUS_EXPR, max, min));
- 
-   if (TREE_CODE (this_n_elem) == INTEGER_CST && TREE_OVERFLOW (this_n_elem))
-     return NULL_TREE;
- 
-   /* Multiply the current number of elements by the result.  */
-   n_elem = size_binop (MULT_EXPR, n_elem, this_n_elem);
- 
-   if (TREE_CODE (n_elem) == INTEGER_CST && TREE_OVERFLOW (n_elem))
-     return NULL_TREE;
- 
-   return n_elem;
- }
- 
- /* Given GNAT_ENTITY, elaborate all expressions that are required to
-    be elaborated at the point of its definition, but do nothing else.  */
- 
- void
- elaborate_entity (Entity_Id gnat_entity)
- {
-   switch (Ekind (gnat_entity))
-     {
-     case E_Signed_Integer_Subtype:
-     case E_Modular_Integer_Subtype:
-     case E_Enumeration_Subtype:
-     case E_Ordinary_Fixed_Point_Subtype:
-     case E_Decimal_Fixed_Point_Subtype:
-     case E_Floating_Point_Subtype:
-       {
- 	Node_Id gnat_lb = Type_Low_Bound (gnat_entity);
- 	Node_Id gnat_hb = Type_High_Bound (gnat_entity);
- 
- 	/* ??? Tests to avoid Constraint_Error in static expressions
- 	   are needed until after the front stops generating bogus
- 	   conversions on bounds of real types.  */
- 	if (!Raises_Constraint_Error (gnat_lb))
- 	  elaborate_expression (gnat_lb, gnat_entity, "L", true, false,
- 				Needs_Debug_Info (gnat_entity));
- 	if (!Raises_Constraint_Error (gnat_hb))
- 	  elaborate_expression (gnat_hb, gnat_entity, "U", true, false,
- 				Needs_Debug_Info (gnat_entity));
-       break;
-       }
- 
-     case E_Record_Subtype:
-     case E_Private_Subtype:
-     case E_Limited_Private_Subtype:
-     case E_Record_Subtype_With_Private:
-       if (Has_Discriminants (gnat_entity) && Is_Constrained (gnat_entity))
- 	{
- 	  Node_Id gnat_discriminant_expr;
- 	  Entity_Id gnat_field;
- 
- 	  for (gnat_field
- 	       = First_Discriminant (Implementation_Base_Type (gnat_entity)),
- 	       gnat_discriminant_expr
- 	       = First_Elmt (Discriminant_Constraint (gnat_entity));
- 	       Present (gnat_field);
- 	       gnat_field = Next_Discriminant (gnat_field),
- 	       gnat_discriminant_expr = Next_Elmt (gnat_discriminant_expr))
- 	    /* Ignore access discriminants.  */
- 	    if (!Is_Access_Type (Etype (Node (gnat_discriminant_expr))))
- 	      elaborate_expression (Node (gnat_discriminant_expr),
- 				    gnat_entity, get_entity_char (gnat_field),
- 				    true, false, false);
- 	}
-       break;
- 
-     }
- }
- 
- /* Prepend to ATTR_LIST an entry for an attribute with provided TYPE,
-    NAME, ARGS and ERROR_POINT.  */
- 
- static void
- prepend_one_attribute (struct attrib **attr_list,
- 		       enum attrib_type attrib_type,
- 		       tree attr_name,
- 		       tree attr_args,
- 		       Node_Id attr_error_point)
- {
-   struct attrib * attr = (struct attrib *) xmalloc (sizeof (struct attrib));
- 
-   attr->type = attrib_type;
-   attr->name = attr_name;
-   attr->args = attr_args;
-   attr->error_point = attr_error_point;
- 
-   attr->next = *attr_list;
-   *attr_list = attr;
- }
- 
- /* Prepend to ATTR_LIST an entry for an attribute provided by GNAT_PRAGMA.  */
- 
- static void
- prepend_one_attribute_pragma (struct attrib **attr_list, Node_Id gnat_pragma)
- {
-   const Node_Id gnat_arg = First (Pragma_Argument_Associations (gnat_pragma));
-   Node_Id gnat_next_arg = Next (gnat_arg);
-   tree gnu_arg1 = NULL_TREE, gnu_arg_list = NULL_TREE;
-   enum attrib_type etype;
- 
-   /* Map the pragma at hand.  Skip if this isn't one we know how to handle.  */
-   switch (Get_Pragma_Id (Chars (Pragma_Identifier (gnat_pragma))))
-     {
-     case Pragma_Linker_Alias:
-       etype = ATTR_LINK_ALIAS;
-       break;
- 
-     case Pragma_Linker_Constructor:
-       etype = ATTR_LINK_CONSTRUCTOR;
-       break;
- 
-     case Pragma_Linker_Destructor:
-       etype = ATTR_LINK_DESTRUCTOR;
-       break;
- 
-     case Pragma_Linker_Section:
-       etype = ATTR_LINK_SECTION;
-       break;
- 
-     case Pragma_Machine_Attribute:
-       etype = ATTR_MACHINE_ATTRIBUTE;
-       break;
- 
-     case Pragma_Thread_Local_Storage:
-       etype = ATTR_THREAD_LOCAL_STORAGE;
-       break;
- 
-     case Pragma_Weak_External:
-       etype = ATTR_WEAK_EXTERNAL;
-       break;
- 
-     default:
-       return;
-     }
- 
-   /* See what arguments we have and turn them into GCC trees for attribute
-      handlers.  The first one is always expected to be a string meant to be
-      turned into an identifier.  The next ones are all static expressions,
-      among which strings meant to be turned into an identifier, except for
-      a couple of specific attributes that require raw strings.  */
-   if (Present (gnat_next_arg))
-     {
-       gnu_arg1 = gnat_to_gnu (Expression (gnat_next_arg));
-       gcc_assert (TREE_CODE (gnu_arg1) == STRING_CST);
- 
-       const char *const p = TREE_STRING_POINTER (gnu_arg1);
-       const bool string_args
- 	= strcmp (p, "target") == 0 || strcmp (p, "target_clones") == 0;
-       gnu_arg1 = get_identifier (p);
-       if (IDENTIFIER_LENGTH (gnu_arg1) == 0)
- 	return;
-       gnat_next_arg = Next (gnat_next_arg);
- 
-       while (Present (gnat_next_arg))
- 	{
- 	  tree gnu_arg = gnat_to_gnu (Expression (gnat_next_arg));
- 	  if (TREE_CODE (gnu_arg) == STRING_CST && !string_args)
- 	    gnu_arg = get_identifier (TREE_STRING_POINTER (gnu_arg));
- 	  gnu_arg_list
- 	    = chainon (gnu_arg_list, build_tree_list (NULL_TREE, gnu_arg));
- 	  gnat_next_arg = Next (gnat_next_arg);
- 	}
-     }
- 
-   prepend_one_attribute (attr_list, etype, gnu_arg1, gnu_arg_list,
- 			 Present (Next (gnat_arg))
- 			 ? Expression (Next (gnat_arg)) : gnat_pragma);
- }
- 
- /* Prepend to ATTR_LIST the list of attributes for GNAT_ENTITY, if any.  */
- 
- static void
- prepend_attributes (struct attrib **attr_list, Entity_Id gnat_entity)
- {
-   Node_Id gnat_temp;
- 
-   /* Attributes are stored as Representation Item pragmas.  */
-   for (gnat_temp = First_Rep_Item (gnat_entity);
-        Present (gnat_temp);
-        gnat_temp = Next_Rep_Item (gnat_temp))
-     if (Nkind (gnat_temp) == N_Pragma)
-       prepend_one_attribute_pragma (attr_list, gnat_temp);
- }
- 
- /* Given a GNAT tree GNAT_EXPR, for an expression which is a value within a
-    type definition (either a bound or a discriminant value) for GNAT_ENTITY,
-    return the GCC tree to use for that expression.  S is the suffix to use
-    if a variable needs to be created and DEFINITION is true if this is done
-    for a definition of GNAT_ENTITY.  If NEED_VALUE is true, we need a result;
-    otherwise, we are just elaborating the expression for side-effects.  If
-    NEED_DEBUG is true, we need a variable for debugging purposes even if it
-    isn't needed for code generation.  */
- 
- static tree
- elaborate_expression (Node_Id gnat_expr, Entity_Id gnat_entity, const char *s,
- 		      bool definition, bool need_value, bool need_debug)
- {
-   tree gnu_expr;
- 
-   /* If we already elaborated this expression (e.g. it was involved
-      in the definition of a private type), use the old value.  */
-   if (present_gnu_tree (gnat_expr))
-     return get_gnu_tree (gnat_expr);
- 
-   /* If we don't need a value and this is static or a discriminant,
-      we don't need to do anything.  */
-   if (!need_value
-       && (Compile_Time_Known_Value (gnat_expr)
- 	  || (Nkind (gnat_expr) == N_Identifier
- 	      && Ekind (Entity (gnat_expr)) == E_Discriminant)))
-     return NULL_TREE;
- 
-   /* If it's a static expression, we don't need a variable for debugging.  */
-   if (need_debug && Compile_Time_Known_Value (gnat_expr))
-     need_debug = false;
- 
-   /* Otherwise, convert this tree to its GCC equivalent and elaborate it.  */
-   gnu_expr = elaborate_expression_1 (gnat_to_gnu (gnat_expr), gnat_entity, s,
- 				     definition, need_debug);
- 
-   /* Save the expression in case we try to elaborate this entity again.  Since
-      it's not a DECL, don't check it.  Don't save if it's a discriminant.  */
-   if (!CONTAINS_PLACEHOLDER_P (gnu_expr))
-     save_gnu_tree (gnat_expr, gnu_expr, true);
- 
-   return need_value ? gnu_expr : error_mark_node;
- }
- 
- /* Similar, but take a GNU expression and always return a result.  */
- 
- static tree
- elaborate_expression_1 (tree gnu_expr, Entity_Id gnat_entity, const char *s,
- 			bool definition, bool need_debug)
- {
-   const bool expr_public_p = Is_Public (gnat_entity);
-   const bool expr_global_p = expr_public_p || global_bindings_p ();
-   bool expr_variable_p, use_variable;
- 
-   /* If GNU_EXPR contains a placeholder, just return it.  We rely on the fact
-      that an expression cannot contain both a discriminant and a variable.  */
-   if (CONTAINS_PLACEHOLDER_P (gnu_expr))
-     return gnu_expr;
- 
-   /* If GNU_EXPR is neither a constant nor based on a read-only variable, make
-      a variable that is initialized to contain the expression when the package
-      containing the definition is elaborated.  If this entity is defined at top
-      level, replace the expression by the variable; otherwise use a SAVE_EXPR
-      if this is necessary.  */
-   if (TREE_CONSTANT (gnu_expr))
-     expr_variable_p = false;
-   else
-     {
-       /* Skip any conversions and simple constant arithmetics to see if the
- 	 expression is based on a read-only variable.  */
-       tree inner = remove_conversions (gnu_expr, true);
- 
-       inner = skip_simple_constant_arithmetic (inner);
- 
-       if (handled_component_p (inner))
- 	inner = get_inner_constant_reference (inner);
- 
-       expr_variable_p
- 	= !(inner
- 	    && TREE_CODE (inner) == VAR_DECL
- 	    && (TREE_READONLY (inner) || DECL_READONLY_ONCE_ELAB (inner)));
-     }
- 
-   /* We only need to use the variable if we are in a global context since GCC
-      can do the right thing in the local case.  However, when not optimizing,
-      use it for bounds of loop iteration scheme to avoid code duplication.  */
-   use_variable = expr_variable_p
- 		 && (expr_global_p
- 		     || (!optimize
- 		         && definition
- 			 && Is_Itype (gnat_entity)
- 			 && Nkind (Associated_Node_For_Itype (gnat_entity))
- 			    == N_Loop_Parameter_Specification));
- 
-   /* If the GNAT encodings are not used, we don't need a variable for debug
-      info purposes if the expression is a constant or another variable, but
-      we need to be careful because we do not generate debug info for external
-      variables so DECL_IGNORED_P is not stable across units.  */
-   if (need_debug
-       && gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL
-       && (TREE_CONSTANT (gnu_expr)
- 	  || (!expr_public_p
- 	      && DECL_P (gnu_expr)
- 	      && !DECL_IGNORED_P (gnu_expr))))
-     need_debug = false;
- 
-   /* Now create it, possibly only for debugging purposes.  */
-   if (use_variable || need_debug)
-     {
-       /* The following variable creation can happen when processing the body
- 	 of subprograms that are defined out of the extended main unit and
- 	 inlined.  In this case, we are not at the global scope, and thus the
- 	 new variable must not be tagged "external", as we used to do here as
- 	 soon as DEFINITION was false.  */
-       tree gnu_decl
- 	= create_var_decl (create_concat_name (gnat_entity, s), NULL_TREE,
- 			   TREE_TYPE (gnu_expr), gnu_expr, true,
- 			   expr_public_p, !definition && expr_global_p,
- 			   expr_global_p, false, true, need_debug,
- 			   NULL, gnat_entity);
- 
-       /* Using this variable at debug time (if need_debug is true) requires a
- 	 proper location.  The back-end will compute a location for this
- 	 variable only if the variable is used by the generated code.
- 	 Returning the variable ensures the caller will use it in generated
- 	 code.  Note that there is no need for a location if the debug info
- 	 contains an integer constant.  */
-       if (use_variable || (need_debug && !TREE_CONSTANT (gnu_expr)))
- 	return gnu_decl;
-     }
- 
-   return expr_variable_p ? gnat_save_expr (gnu_expr) : gnu_expr;
- }
- 
- /* Similar, but take an alignment factor and make it explicit in the tree.  */
- 
- static tree
- elaborate_expression_2 (tree gnu_expr, Entity_Id gnat_entity, const char *s,
- 			bool definition, bool need_debug, unsigned int align)
- {
-   tree unit_align = size_int (align / BITS_PER_UNIT);
-   return
-     size_binop (MULT_EXPR,
- 		elaborate_expression_1 (size_binop (EXACT_DIV_EXPR,
- 						    gnu_expr,
- 						    unit_align),
- 					gnat_entity, s, definition,
- 					need_debug),
- 		unit_align);
- }
- 
- /* Structure to hold internal data for elaborate_reference.  */
- 
- struct er_data
- {
-   Entity_Id entity;
-   bool definition;
-   unsigned int n;
- };
- 
- /* Wrapper function around elaborate_expression_1 for elaborate_reference.  */
- 
- static tree
- elaborate_reference_1 (tree ref, void *data)
- {
-   struct er_data *er = (struct er_data *)data;
-   char suffix[16];
- 
-   /* This is what elaborate_expression_1 does if NEED_DEBUG is false.  */
-   if (TREE_CONSTANT (ref))
-     return ref;
- 
-   /* If this is a COMPONENT_REF of a fat pointer, elaborate the entire fat
-      pointer.  This may be more efficient, but will also allow us to more
-      easily find the match for the PLACEHOLDER_EXPR.  */
-   if (TREE_CODE (ref) == COMPONENT_REF
-       && TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (ref, 0))))
-     return build3 (COMPONENT_REF, TREE_TYPE (ref),
- 		   elaborate_reference_1 (TREE_OPERAND (ref, 0), data),
- 		   TREE_OPERAND (ref, 1), NULL_TREE);
- 
-   /* If this is the displacement of a pointer, elaborate the pointer and then
-      displace the result.  The actual purpose here is to drop the location on
-      the expression, which may be problematic if replicated on references.  */
-   if (TREE_CODE (ref) == POINTER_PLUS_EXPR
-       && TREE_CODE (TREE_OPERAND (ref, 1)) == INTEGER_CST)
-     return build2 (POINTER_PLUS_EXPR, TREE_TYPE (ref),
- 		   elaborate_reference_1 (TREE_OPERAND (ref, 0), data),
- 		   TREE_OPERAND (ref, 1));
- 
-   sprintf (suffix, "EXP%d", ++er->n);
-   return
-     elaborate_expression_1 (ref, er->entity, suffix, er->definition, false);
- }
- 
- /* Elaborate the reference REF to be used as renamed object for GNAT_ENTITY.
-    DEFINITION is true if this is done for a definition of GNAT_ENTITY and
-    INIT is set to the first arm of a COMPOUND_EXPR present in REF, if any.  */
- 
- static tree
- elaborate_reference (tree ref, Entity_Id gnat_entity, bool definition,
- 		     tree *init)
- {
-   struct er_data er = { gnat_entity, definition, 0 };
-   return gnat_rewrite_reference (ref, elaborate_reference_1, &er, init);
- }
- 
- /* Given a GNU tree and a GNAT list of choices, generate an expression to test
-    the value passed against the list of choices.  */
- 
- static tree
- choices_to_gnu (tree gnu_operand, Node_Id gnat_choices)
- {
-   tree gnu_result = boolean_false_node, gnu_type;
- 
-   gnu_operand = maybe_character_value (gnu_operand);
-   gnu_type = TREE_TYPE (gnu_operand);
- 
-   for (Node_Id gnat_choice = First (gnat_choices);
-        Present (gnat_choice);
-        gnat_choice = Next (gnat_choice))
-     {
-       tree gnu_low = NULL_TREE, gnu_high = NULL_TREE;
-       tree gnu_test;
- 
-       switch (Nkind (gnat_choice))
- 	{
- 	case N_Range:
- 	  gnu_low = gnat_to_gnu (Low_Bound (gnat_choice));
- 	  gnu_high = gnat_to_gnu (High_Bound (gnat_choice));
- 	  break;
- 
- 	case N_Subtype_Indication:
- 	  gnu_low = gnat_to_gnu (Low_Bound (Range_Expression
- 					    (Constraint (gnat_choice))));
- 	  gnu_high = gnat_to_gnu (High_Bound (Range_Expression
- 					      (Constraint (gnat_choice))));
- 	  break;
- 
- 	case N_Identifier:
- 	case N_Expanded_Name:
- 	  /* This represents either a subtype range or a static value of
- 	     some kind; Ekind says which.  */
- 	  if (Is_Type (Entity (gnat_choice)))
- 	    {
- 	      tree gnu_type = get_unpadded_type (Entity (gnat_choice));
- 
- 	      gnu_low = TYPE_MIN_VALUE (gnu_type);
- 	      gnu_high = TYPE_MAX_VALUE (gnu_type);
- 	      break;
- 	    }
- 
- 	  /* ... fall through ... */
- 
- 	case N_Character_Literal:
- 	case N_Integer_Literal:
- 	  gnu_low = gnat_to_gnu (gnat_choice);
- 	  break;
- 
- 	case N_Others_Choice:
- 	  break;
- 
- 	default:
- 	  gcc_unreachable ();
- 	}
- 
-       /* Everything should be folded into constants at this point.  */
-       gcc_assert (!gnu_low  || TREE_CODE (gnu_low)  == INTEGER_CST);
-       gcc_assert (!gnu_high || TREE_CODE (gnu_high) == INTEGER_CST);
- 
-       if (gnu_low && TREE_TYPE (gnu_low) != gnu_type)
- 	gnu_low = convert (gnu_type, gnu_low);
-       if (gnu_high && TREE_TYPE (gnu_high) != gnu_type)
- 	gnu_high = convert (gnu_type, gnu_high);
- 
-       if (gnu_low && gnu_high)
- 	gnu_test
- 	  = build_binary_op (TRUTH_ANDIF_EXPR, boolean_type_node,
- 			     build_binary_op (GE_EXPR, boolean_type_node,
- 					      gnu_operand, gnu_low, true),
- 			     build_binary_op (LE_EXPR, boolean_type_node,
- 					      gnu_operand, gnu_high, true),
- 			     true);
-       else if (gnu_low == boolean_true_node
- 	       && TREE_TYPE (gnu_operand) == boolean_type_node)
- 	gnu_test = gnu_operand;
-       else if (gnu_low)
- 	gnu_test
- 	  = build_binary_op (EQ_EXPR, boolean_type_node, gnu_operand, gnu_low,
- 			     true);
-       else
- 	gnu_test = boolean_true_node;
- 
-       if (gnu_result == boolean_false_node)
- 	gnu_result = gnu_test;
-       else
- 	gnu_result
- 	  = build_binary_op (TRUTH_ORIF_EXPR, boolean_type_node, gnu_result,
- 			     gnu_test, true);
-     }
- 
-   return gnu_result;
- }
- 
- /* Adjust PACKED setting as passed to gnat_to_gnu_field for a field of
-    type FIELD_TYPE to be placed in RECORD_TYPE.  Return the result.  */
- 
- static int
- adjust_packed (tree field_type, tree record_type, int packed)
- {
-   /* If the field contains an array with self-referential size, we'd better
-      not pack it because this would misalign it and, therefore, cause large
-      temporaries to be created in case we need to take the address of the
-      field.  See addressable_p and the notes on the addressability issues
-      for further details.  */
-   if (AGGREGATE_TYPE_P (field_type)
-       && aggregate_type_contains_array_p (field_type, true))
-     return 0;
- 
-   /* In the other cases, we can honor the packing.  */
-   if (packed)
-     return packed;
- 
-   /* If the alignment of the record is specified and the field type
-      is over-aligned, request Storage_Unit alignment for the field.  */
-   if (TYPE_ALIGN (record_type)
-       && TYPE_ALIGN (field_type) > TYPE_ALIGN (record_type))
-     return -1;
- 
-   /* Likewise if the maximum alignment of the record is specified.  */
-   if (TYPE_MAX_ALIGN (record_type)
-       && TYPE_ALIGN (field_type) > TYPE_MAX_ALIGN (record_type))
-     return -1;
- 
-   return 0;
- }
- 
- /* Return a GCC tree for a field corresponding to GNAT_FIELD to be
-    placed in GNU_RECORD_TYPE.
- 
-    PACKED is 1 if the enclosing record is packed or -1 if the enclosing
-    record has Component_Alignment of Storage_Unit.
- 
-    DEFINITION is true if this field is for a record being defined.
- 
-    DEBUG_INFO_P is true if we need to write debug information for types
-    that we may create in the process.  */
- 
- static tree
- gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed,
- 		   bool definition, bool debug_info_p)
- {
-   const Node_Id gnat_clause = Component_Clause (gnat_field);
-   const Entity_Id gnat_record_type = Underlying_Type (Scope (gnat_field));
-   const Entity_Id gnat_field_type = Etype (gnat_field);
-   tree gnu_field_type = gnat_to_gnu_type (gnat_field_type);
-   tree gnu_field_id = get_entity_name (gnat_field);
-   const bool is_aliased = Is_Aliased (gnat_field);
-   const bool is_full_access
-     = (Is_Full_Access (gnat_field) || Is_Full_Access (gnat_field_type));
-   const bool is_independent
-     = (Is_Independent (gnat_field) || Is_Independent (gnat_field_type));
-   const bool is_volatile
-     = (Treat_As_Volatile (gnat_field) || Treat_As_Volatile (gnat_field_type));
-   const bool is_by_ref = TYPE_IS_BY_REFERENCE_P (gnu_field_type);
-   const bool is_strict_alignment = Strict_Alignment (gnat_field_type);
-   /* We used to consider that volatile fields also require strict alignment,
-      but that was an interpolation and would cause us to reject a pragma
-      volatile on a packed record type containing boolean components, while
-      there is no basis to do so in the RM.  In such cases, the writes will
-      involve load-modify-store sequences, but that's OK for volatile.  The
-      only constraint is the implementation advice whereby only the bits of
-      the components should be accessed if they both start and end on byte
-      boundaries, but that should be guaranteed by the GCC memory model.
-      Note that we have some redundancies (is_full_access => is_independent,
-      is_aliased => is_independent and is_by_ref => is_strict_alignment)
-      so the following formula is sufficient.  */
-   const bool needs_strict_alignment = (is_independent || is_strict_alignment);
-   const char *field_s, *size_s;
-   tree gnu_field, gnu_size, gnu_pos;
-   bool is_bitfield;
- 
-   /* The qualifier to be used in messages.  */
-   if (is_aliased)
-     field_s = "aliased&";
-   else if (is_full_access)
-     {
-       if (Is_Volatile_Full_Access (gnat_field)
- 	  || Is_Volatile_Full_Access (gnat_field_type))
- 	field_s = "volatile full access&";
-       else
- 	field_s = "atomic&";
-     }
-   else if (is_independent)
-     field_s = "independent&";
-   else if (is_by_ref)
-     field_s = "& with by-reference type";
-   else if (is_strict_alignment)
-     field_s = "& with aliased part";
-   else
-     field_s = "&";
- 
-   /* The message to be used for incompatible size.  */
-   if (is_aliased || is_full_access)
-     size_s = "size for %s must be ^";
-   else if (field_s)
-     size_s = "size for %s too small{, minimum allowed is ^}";
- 
-   /* If a field requires strict alignment, we cannot pack it (RM 13.2(7)).  */
-   if (needs_strict_alignment)
-     packed = 0;
-   else
-     packed = adjust_packed (gnu_field_type, gnu_record_type, packed);
- 
-   /* If a size is specified, use it.  Otherwise, if the record type is packed,
-      use the official RM size.  See "Handling of Type'Size Values" in Einfo
-      for further details.  */
-   if (Present (gnat_clause) || Known_Esize (gnat_field))
-     gnu_size = validate_size (Esize (gnat_field), gnu_field_type, gnat_field,
- 			      FIELD_DECL, false, true, size_s, field_s);
-   else if (packed == 1)
-     {
-       gnu_size = rm_size (gnu_field_type);
-       if (TREE_CODE (gnu_size) != INTEGER_CST)
- 	gnu_size = NULL_TREE;
-     }
-   else
-     gnu_size = NULL_TREE;
- 
-   /* Likewise for the position.  */
-   if (Present (gnat_clause))
-     {
-       gnu_pos = UI_To_gnu (Component_Bit_Offset (gnat_field), bitsizetype);
-       is_bitfield = !value_factor_p (gnu_pos, BITS_PER_UNIT);
-     }
- 
-   /* If the record has rep clauses and this is the tag field, make a rep
-      clause for it as well.  */
-   else if (Has_Specified_Layout (gnat_record_type)
- 	   && Chars (gnat_field) == Name_uTag)
-     {
-       gnu_pos = bitsize_zero_node;
-       gnu_size = TYPE_SIZE (gnu_field_type);
-       is_bitfield = false;
-     }
- 
-   else
-     {
-       gnu_pos = NULL_TREE;
-       is_bitfield = false;
-     }
- 
-   /* If the field's type is a fixed-size record that does not require strict
-      alignment, and the record is packed or we have a position specified for
-      the field that makes it a bitfield or we have a specified size that is
-      smaller than that of the field's type, then see if we can get either an
-      integral mode form of the field's type or a smaller form.  If we can,
-      consider that a size was specified for the field if there wasn't one
-      already, so we know to make it a bitfield and avoid making things wider.
- 
-      Changing to an integral mode form is useful when the record is packed as
-      we can then place the field at a non-byte-aligned position and so achieve
-      tighter packing.  This is in addition required if the field shares a byte
-      with another field and the front-end lets the back-end handle the access
-      to the field, because GCC cannot handle non-byte-aligned BLKmode fields.
- 
-      Changing to a smaller form is required if the specified size is smaller
-      than that of the field's type and the type contains sub-fields that are
-      padded, in order to avoid generating accesses to these sub-fields that
-      are wider than the field.
- 
-      We avoid the transformation if it is not required or potentially useful,
-      as it might entail an increase of the field's alignment and have ripple
-      effects on the outer record type.  A typical case is a field known to be
-      byte-aligned and not to share a byte with another field.  */
-   if (!needs_strict_alignment
-       && RECORD_OR_UNION_TYPE_P (gnu_field_type)
-       && !TYPE_FAT_POINTER_P (gnu_field_type)
-       && tree_fits_uhwi_p (TYPE_SIZE (gnu_field_type))
-       && (packed == 1
- 	  || is_bitfield
- 	  || (gnu_size
- 	      && tree_int_cst_lt (gnu_size, TYPE_SIZE (gnu_field_type)))))
-     {
-       tree gnu_packable_type
- 	= make_packable_type (gnu_field_type, true, is_bitfield ? 1 : 0);
-       if (gnu_packable_type != gnu_field_type)
- 	{
- 	  gnu_field_type = gnu_packable_type;
- 	  if (!gnu_size)
- 	    gnu_size = rm_size (gnu_field_type);
- 	}
-     }
- 
-   /* Now check if the type of the field allows atomic access.  */
-   if (Is_Full_Access (gnat_field))
-     {
-       const unsigned int align
- 	= promote_object_alignment (gnu_field_type, gnat_field);
-       if (align > 0)
- 	gnu_field_type
- 	  = maybe_pad_type (gnu_field_type, NULL_TREE, align, gnat_field,
- 			    false, definition, true);
-       check_ok_for_atomic_type (gnu_field_type, gnat_field, false);
-     }
- 
-   /* If a position is specified, check that it is valid.  */
-   if (gnu_pos)
-     {
-       Entity_Id gnat_parent = Parent_Subtype (gnat_record_type);
- 
-       /* Ensure the position doesn't overlap with the parent subtype if there
- 	 is one.  It would be impossible to build CONSTRUCTORs and accessing
- 	 the parent could clobber the component in the extension if directly
- 	 done.  We accept it with -gnatd.K for the sake of compatibility.  */
-       if (Present (gnat_parent)
- 	  && !(Debug_Flag_Dot_KK && Is_Fully_Repped_Tagged_Type (gnat_parent)))
- 	{
- 	  tree gnu_parent = gnat_to_gnu_type (gnat_parent);
- 
- 	  if (TREE_CODE (TYPE_SIZE (gnu_parent)) == INTEGER_CST
- 	      && tree_int_cst_lt (gnu_pos, TYPE_SIZE (gnu_parent)))
- 	    post_error_ne_tree
- 	      ("position for& must be beyond parent{, minimum allowed is ^}",
- 	       Position (gnat_clause), gnat_field, TYPE_SIZE_UNIT (gnu_parent));
- 	}
- 
-       /* If this field needs strict alignment, make sure that the record is
- 	 sufficiently aligned and that the position and size are consistent
- 	 with the type.  But don't do it if we are just annotating types and
- 	 the field's type is tagged, since tagged types aren't fully laid out
- 	 in this mode.  Also, note that atomic implies volatile so the inner
- 	 test sequences ordering is significant here.  */
-       if (needs_strict_alignment
- 	  && !(type_annotate_only && Is_Tagged_Type (gnat_field_type)))
- 	{
- 	  const unsigned int type_align = TYPE_ALIGN (gnu_field_type);
- 
- 	  if (TYPE_ALIGN (gnu_record_type)
- 	      && TYPE_ALIGN (gnu_record_type) < type_align)
- 	    SET_TYPE_ALIGN (gnu_record_type, type_align);
- 
- 	  /* If the position is not a multiple of the storage unit, then error
- 	     out and reset the position.  */
- 	  if (!integer_zerop (size_binop (TRUNC_MOD_EXPR, gnu_pos,
- 					  bitsize_unit_node)))
- 	    {
- 	      char s[128];
- 	      snprintf (s, sizeof (s), "position for %s must be "
- 			"multiple of Storage_Unit", field_s);
- 	      post_error_ne (s, First_Bit (gnat_clause), gnat_field);
- 	      gnu_pos = NULL_TREE;
- 	    }
- 
- 	  /* If the position is not a multiple of the alignment of the type,
- 	     then error out and reset the position.  */
- 	  else if (type_align > BITS_PER_UNIT
- 		   && !integer_zerop (size_binop (TRUNC_MOD_EXPR, gnu_pos,
- 						  bitsize_int (type_align))))
- 	    {
- 	      char s[128];
-               snprintf (s, sizeof (s), "position for %s must be multiple of ^",
- 			field_s);
- 	      post_error_ne_num (s, First_Bit (gnat_clause), gnat_field,
- 				 type_align / BITS_PER_UNIT);
- 	      post_error_ne_num ("\\because alignment of its type& is ^",
- 				 First_Bit (gnat_clause), Etype (gnat_field),
- 				 type_align / BITS_PER_UNIT);
- 	      gnu_pos = NULL_TREE;
- 	    }
- 
- 	  if (gnu_size)
- 	    {
- 	      tree type_size = TYPE_SIZE (gnu_field_type);
- 	      int cmp;
- 
- 	      /* If the size is not a multiple of the storage unit, then error
- 		 out and reset the size.  */
- 	      if (!integer_zerop (size_binop (TRUNC_MOD_EXPR, gnu_size,
- 					      bitsize_unit_node)))
- 		{
- 		  char s[128];
- 		  snprintf (s, sizeof (s), "size for %s must be "
- 			    "multiple of Storage_Unit", field_s);
- 		  post_error_ne (s, Last_Bit (gnat_clause), gnat_field);
- 		  gnu_size = NULL_TREE;
- 		}
- 
- 	      /* If the size is lower than that of the type, or greater for
- 		 atomic and aliased, then error out and reset the size.  */
- 	      else if ((cmp = tree_int_cst_compare (gnu_size, type_size)) < 0
- 		       || (cmp > 0 && (is_aliased || is_full_access)))
- 		{
- 		  char s[128];
- 		  snprintf (s, sizeof (s), size_s, field_s);
- 		  post_error_ne_tree (s, Last_Bit (gnat_clause), gnat_field,
- 				      type_size);
- 		  gnu_size = NULL_TREE;
- 		}
- 	    }
- 	}
-     }
- 
-   else
-     {
-       /* If we are packing the record and the field is BLKmode, round the
- 	 size up to a byte boundary.  */
-       if (packed && TYPE_MODE (gnu_field_type) == BLKmode && gnu_size)
- 	gnu_size = round_up (gnu_size, BITS_PER_UNIT);
-     }
- 
-   /* We need to make the size the maximum for the type if it is
-      self-referential and an unconstrained type.  In that case, we can't
-      pack the field since we can't make a copy to align it.  */
-   if (TREE_CODE (gnu_field_type) == RECORD_TYPE
-       && !gnu_size
-       && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_field_type))
-       && !Is_Constrained (Underlying_Type (gnat_field_type)))
-     {
-       gnu_size = max_size (TYPE_SIZE (gnu_field_type), true);
-       packed = 0;
-     }
- 
-   /* If a size is specified, adjust the field's type to it.  */
-   if (gnu_size)
-     {
-       tree orig_field_type;
- 
-       /* If the field's type is justified modular, we would need to remove
- 	 the wrapper to (better) meet the layout requirements.  However we
- 	 can do so only if the field is not aliased to preserve the unique
- 	 layout, if it has the same storage order as the enclosing record
- 	 and if the prescribed size is not greater than that of the packed
- 	 array to preserve the justification.  */
-       if (!needs_strict_alignment
- 	  && TREE_CODE (gnu_field_type) == RECORD_TYPE
- 	  && TYPE_JUSTIFIED_MODULAR_P (gnu_field_type)
- 	  && TYPE_REVERSE_STORAGE_ORDER (gnu_field_type)
- 	     == Reverse_Storage_Order (gnat_record_type)
- 	  && tree_int_cst_compare (gnu_size, TYPE_ADA_SIZE (gnu_field_type))
- 	       <= 0)
- 	gnu_field_type = TREE_TYPE (TYPE_FIELDS (gnu_field_type));
- 
-       /* Similarly if the field's type is a misaligned integral type, but
- 	 there is no restriction on the size as there is no justification.  */
-       if (!needs_strict_alignment
- 	  && TYPE_IS_PADDING_P (gnu_field_type)
- 	  && INTEGRAL_TYPE_P (TREE_TYPE (TYPE_FIELDS (gnu_field_type))))
- 	gnu_field_type = TREE_TYPE (TYPE_FIELDS (gnu_field_type));
- 
-       orig_field_type = gnu_field_type;
-       gnu_field_type
- 	= make_type_from_size (gnu_field_type, gnu_size,
- 			       Has_Biased_Representation (gnat_field));
- 
-       /* If the type has been extended, we may need to cap the alignment.  */
-       if (!needs_strict_alignment
- 	  && gnu_field_type != orig_field_type
- 	  && tree_int_cst_lt (TYPE_SIZE (orig_field_type), gnu_size))
- 	packed = adjust_packed (gnu_field_type, gnu_record_type, packed);
- 
-       orig_field_type = gnu_field_type;
-       gnu_field_type = maybe_pad_type (gnu_field_type, gnu_size, 0, gnat_field,
- 				       false, definition, true);
- 
-       /* If a padding record was made, declare it now since it will never be
- 	 declared otherwise.  This is necessary to ensure that its subtrees
- 	 are properly marked.  */
-       if (gnu_field_type != orig_field_type
- 	  && !DECL_P (TYPE_NAME (gnu_field_type)))
- 	create_type_decl (TYPE_NAME (gnu_field_type), gnu_field_type, true,
- 			  debug_info_p, gnat_field);
-     }
- 
-   /* Otherwise (or if there was an error), don't specify a position.  */
-   else
-     gnu_pos = NULL_TREE;
- 
-   /* If the field's type is a padded type made for a scalar field of a record
-      type with reverse storage order, we need to propagate the reverse storage
-      order to the padding type since it is the innermost enclosing aggregate
-      type around the scalar.  */
-   if (TYPE_IS_PADDING_P (gnu_field_type)
-       && TYPE_REVERSE_STORAGE_ORDER (gnu_record_type)
-       && Is_Scalar_Type (gnat_field_type))
-     gnu_field_type = set_reverse_storage_order_on_pad_type (gnu_field_type);
- 
-   gcc_assert (TREE_CODE (gnu_field_type) != RECORD_TYPE
- 	      || !TYPE_CONTAINS_TEMPLATE_P (gnu_field_type));
- 
-   /* Now create the decl for the field.  */
-   gnu_field
-     = create_field_decl (gnu_field_id, gnu_field_type, gnu_record_type,
- 			 gnu_size, gnu_pos, packed, is_aliased);
-   Sloc_to_locus (Sloc (gnat_field), &DECL_SOURCE_LOCATION (gnu_field));
-   DECL_ALIASED_P (gnu_field) = is_aliased;
-   TREE_SIDE_EFFECTS (gnu_field) = TREE_THIS_VOLATILE (gnu_field) = is_volatile;
- 
-   /* If this is a discriminant, then we treat it specially: first, we set its
-      index number for the back-annotation; second, we record whether it cannot
-      be changed once it has been set for the computation of loop invariants;
-      third, we make it addressable in order for the optimizer to more easily
-      see that it cannot be modified by assignments to the other fields of the
-      record (see create_field_decl for a more detailed explanation), which is
-      crucial to hoist the offset and size computations of dynamic fields.  */
-   if (Ekind (gnat_field) == E_Discriminant)
-     {
-       DECL_DISCRIMINANT_NUMBER (gnu_field)
- 	= UI_To_gnu (Discriminant_Number (gnat_field), sizetype);
-       DECL_INVARIANT_P (gnu_field)
- 	= No (Discriminant_Default_Value (gnat_field));
-       DECL_NONADDRESSABLE_P (gnu_field) = 0;
-     }
- 
-   return gnu_field;
- }
- 
- /* Return true if at least one member of COMPONENT_LIST needs strict
-    alignment.  */
- 
- static bool
- components_need_strict_alignment (Node_Id component_list)
- {
-   Node_Id component_decl;
- 
-   for (component_decl = First_Non_Pragma (Component_Items (component_list));
-        Present (component_decl);
-        component_decl = Next_Non_Pragma (component_decl))
-     {
-       Entity_Id gnat_field = Defining_Entity (component_decl);
- 
-       if (Is_Independent (gnat_field) || Is_Independent (Etype (gnat_field)))
- 	return true;
- 
-       if (Strict_Alignment (Etype (gnat_field)))
- 	return true;
-     }
- 
-   return false;
- }
- 
- /* Return true if FIELD is an artificial field.  */
- 
- static bool
- field_is_artificial (tree field)
- {
-   /* These fields are generated by the front-end proper.  */
-   if (IDENTIFIER_POINTER (DECL_NAME (field)) [0] == '_')
-     return true;
- 
-   /* These fields are generated by gigi.  */
-   if (DECL_INTERNAL_P (field))
-     return true;
- 
-   return false;
- }
- 
- /* Return true if FIELD is a non-artificial field with self-referential
-    size.  */
- 
- static bool
- field_has_self_size (tree field)
- {
-   if (field_is_artificial (field))
-     return false;
- 
-   if (DECL_SIZE (field) && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST)
-     return false;
- 
-   return CONTAINS_PLACEHOLDER_P (TYPE_SIZE (TREE_TYPE (field)));
- }
- 
- /* Return true if FIELD is a non-artificial field with variable size.  */
- 
- static bool
- field_has_variable_size (tree field)
- {
-   if (field_is_artificial (field))
-     return false;
- 
-   if (DECL_SIZE (field) && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST)
-     return false;
- 
-   return TREE_CODE (TYPE_SIZE (TREE_TYPE (field))) != INTEGER_CST;
- }
- 
- /* qsort comparer for the bit positions of two record components.  */
- 
- static int
- compare_field_bitpos (const PTR rt1, const PTR rt2)
- {
-   const_tree const field1 = * (const_tree const *) rt1;
-   const_tree const field2 = * (const_tree const *) rt2;
-   const int ret
-     = tree_int_cst_compare (bit_position (field1), bit_position (field2));
- 
-   return ret ? ret : (int) (DECL_UID (field1) - DECL_UID (field2));
- }
- 
- /* Sort the LIST of fields in reverse order of increasing position.  */
- 
- static tree
- reverse_sort_field_list (tree list)
- {
-   const int len = list_length (list);
-   tree *field_arr = XALLOCAVEC (tree, len);
- 
-   for (int i = 0; list; list = DECL_CHAIN (list), i++)
-     field_arr[i] = list;
- 
-   qsort (field_arr, len, sizeof (tree), compare_field_bitpos);
- 
-   for (int i = 0; i < len; i++)
-     {
-       DECL_CHAIN (field_arr[i]) = list;
-       list = field_arr[i];
-     }
- 
-   return list;
- }
- 
- /* Reverse function from gnat_to_gnu_field: return the GNAT field present in
-    either GNAT_COMPONENT_LIST or the discriminants of GNAT_RECORD_TYPE, and
-    corresponding to the GNU tree GNU_FIELD.  */
- 
- static Entity_Id
- gnu_field_to_gnat (tree gnu_field, Node_Id gnat_component_list,
- 		   Entity_Id gnat_record_type)
- {
-   Entity_Id gnat_component_decl, gnat_field;
- 
-   if (Present (Component_Items (gnat_component_list)))
-     for (gnat_component_decl
- 	   = First_Non_Pragma (Component_Items (gnat_component_list));
- 	 Present (gnat_component_decl);
- 	 gnat_component_decl = Next_Non_Pragma (gnat_component_decl))
-       {
- 	gnat_field = Defining_Entity (gnat_component_decl);
- 	if (gnat_to_gnu_field_decl (gnat_field) == gnu_field)
- 	  return gnat_field;
-       }
- 
-   if (Has_Discriminants (gnat_record_type))
-     for (gnat_field = First_Stored_Discriminant (gnat_record_type);
- 	 Present (gnat_field);
- 	 gnat_field = Next_Stored_Discriminant (gnat_field))
-       if (gnat_to_gnu_field_decl (gnat_field) == gnu_field)
- 	return gnat_field;
- 
-   return Empty;
- }
- 
- /* Issue a warning for the problematic placement of GNU_FIELD present in
-    either GNAT_COMPONENT_LIST or the discriminants of GNAT_RECORD_TYPE.
-    IN_VARIANT is true if GNAT_COMPONENT_LIST is the list of a variant.
-    DO_REORDER is true if fields of GNAT_RECORD_TYPE are being reordered.  */
- 
- static void
- warn_on_field_placement (tree gnu_field, Node_Id gnat_component_list,
- 			 Entity_Id gnat_record_type, bool in_variant,
- 			 bool do_reorder)
- {
-   if (!Comes_From_Source (gnat_record_type))
-     return;
- 
-   Entity_Id gnat_field
-     = gnu_field_to_gnat (gnu_field, gnat_component_list, gnat_record_type);
-   gcc_assert (Present (gnat_field));
- 
-   const char *msg1
-     = in_variant
-       ? "?variant layout may cause performance issues"
-       : "?record layout may cause performance issues";
-   const char *msg2
-     = Ekind (gnat_field) == E_Discriminant
-       ? "?discriminant & whose length is not multiple of a byte"
-       : field_has_self_size (gnu_field)
- 	? "?component & whose length depends on a discriminant"
- 	: field_has_variable_size (gnu_field)
- 	  ? "?component & whose length is not fixed"
- 	  : "?component & whose length is not multiple of a byte";
-   const char *msg3
-     = do_reorder
-       ? "?comes too early and was moved down"
-       : "?comes too early and ought to be moved down";
- 
-   post_error (msg1, gnat_field);
-   post_error_ne (msg2, gnat_field, gnat_field);
-   post_error (msg3, gnat_field);
- }
- 
- /* Likewise but for every field present on GNU_FIELD_LIST.  */
- 
- static void
- warn_on_list_placement (tree gnu_field_list, Node_Id gnat_component_list,
- 		        Entity_Id gnat_record_type, bool in_variant,
- 		        bool do_reorder)
- {
-   for (tree gnu_tmp = gnu_field_list; gnu_tmp; gnu_tmp = DECL_CHAIN (gnu_tmp))
-     warn_on_field_placement (gnu_tmp, gnat_component_list, gnat_record_type,
- 			     in_variant, do_reorder);
- }
- 
- /* Structure holding information for a given variant.  */
- typedef struct vinfo
- {
-   /* The record type of the variant.  */
-   tree type;
- 
-   /* The name of the variant.  */
-   tree name;
- 
-   /* The qualifier of the variant.  */
-   tree qual;
- 
-   /* Whether the variant has a rep clause.  */
-   bool has_rep;
- 
-   /* Whether the variant is packed.  */
-   bool packed;
- 
- } vinfo_t;
- 
- /* Translate and chain GNAT_COMPONENT_LIST present in GNAT_RECORD_TYPE to
-    GNU_FIELD_LIST, set the result as the field list of GNU_RECORD_TYPE and
-    finish it up.  Return true if GNU_RECORD_TYPE has a rep clause that affects
-    the layout (see below).  When called from gnat_to_gnu_entity during the
-    processing of a record definition, the GCC node for the parent, if any,
-    will be the single field of GNU_RECORD_TYPE and the GCC nodes for the
-    discriminants will be on GNU_FIELD_LIST.  The other call to this function
-    is a recursive call for the component list of a variant and, in this case,
-    GNU_FIELD_LIST is empty.
- 
-    PACKED is 1 if this is for a packed record or -1 if this is for a record
-    with Component_Alignment of Storage_Unit.
- 
-    DEFINITION is true if we are defining this record type.
- 
-    CANCEL_ALIGNMENT is true if the alignment should be zeroed before laying
-    out the record.  This means the alignment only serves to force fields to
-    be bitfields, but not to require the record to be that aligned.  This is
-    used for variants.
- 
-    ALL_REP is true if a rep clause is present for all the fields.
- 
-    UNCHECKED_UNION is true if we are building this type for a record with a
-    Pragma Unchecked_Union.
- 
-    ARTIFICIAL is true if this is a type that was generated by the compiler.
- 
-    DEBUG_INFO is true if we need to write debug information about the type.
- 
-    MAYBE_UNUSED is true if this type may be unused in the end; this doesn't
-    mean that its contents may be unused as well, only the container itself.
- 
-    FIRST_FREE_POS, if nonzero, is the first (lowest) free field position in
-    the outer record type down to this variant level.  It is nonzero only if
-    all the fields down to this level have a rep clause and ALL_REP is false.
- 
-    P_GNU_REP_LIST, if nonzero, is a pointer to a list to which each field
-    with a rep clause is to be added; in this case, that is all that should
-    be done with such fields and the return value will be false.  */
- 
- static bool
- components_to_record (Node_Id gnat_component_list, Entity_Id gnat_record_type,
- 		      tree gnu_field_list, tree gnu_record_type, int packed,
- 		      bool definition, bool cancel_alignment, bool all_rep,
- 		      bool unchecked_union, bool artificial, bool debug_info,
- 		      bool maybe_unused, tree first_free_pos,
- 		      tree *p_gnu_rep_list)
- {
-   const bool needs_xv_encodings
-     = debug_info && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL;
-   bool all_rep_and_size = all_rep && TYPE_SIZE (gnu_record_type);
-   bool variants_have_rep = all_rep;
-   bool layout_with_rep = false;
-   bool has_non_packed_fixed_size_field = false;
-   bool has_self_field = false;
-   bool has_aliased_after_self_field = false;
-   Entity_Id gnat_component_decl, gnat_variant_part;
-   tree gnu_field, gnu_next, gnu_last;
-   tree gnu_variant_part = NULL_TREE;
-   tree gnu_rep_list = NULL_TREE;
- 
-   /* For each component referenced in a component declaration create a GCC
-      field and add it to the list, skipping pragmas in the GNAT list.  */
-   gnu_last = tree_last (gnu_field_list);
-   if (Present (Component_Items (gnat_component_list)))
-     for (gnat_component_decl
- 	   = First_Non_Pragma (Component_Items (gnat_component_list));
- 	 Present (gnat_component_decl);
- 	 gnat_component_decl = Next_Non_Pragma (gnat_component_decl))
-       {
- 	Entity_Id gnat_field = Defining_Entity (gnat_component_decl);
- 	Name_Id gnat_name = Chars (gnat_field);
- 
- 	/* If present, the _Parent field must have been created as the single
- 	   field of the record type.  Put it before any other fields.  */
- 	if (gnat_name == Name_uParent)
- 	  {
- 	    gnu_field = TYPE_FIELDS (gnu_record_type);
- 	    gnu_field_list = chainon (gnu_field_list, gnu_field);
- 	  }
- 	else
- 	  {
- 	    gnu_field = gnat_to_gnu_field (gnat_field, gnu_record_type, packed,
- 					   definition, debug_info);
- 
- 	    /* If this is the _Tag field, put it before any other fields.  */
- 	    if (gnat_name == Name_uTag)
- 	      gnu_field_list = chainon (gnu_field_list, gnu_field);
- 
- 	    /* If this is the _Controller field, put it before the other
- 	       fields except for the _Tag or _Parent field.  */
- 	    else if (gnat_name == Name_uController && gnu_last)
- 	      {
- 		DECL_CHAIN (gnu_field) = DECL_CHAIN (gnu_last);
- 		DECL_CHAIN (gnu_last) = gnu_field;
- 	      }
- 
- 	    /* If this is a regular field, put it after the other fields.  */
- 	    else
- 	      {
- 		DECL_CHAIN (gnu_field) = gnu_field_list;
- 		gnu_field_list = gnu_field;
- 		if (!gnu_last)
- 		  gnu_last = gnu_field;
- 
- 		/* And record information for the final layout.  */
- 		if (field_has_self_size (gnu_field))
- 		  has_self_field = true;
- 		else if (has_self_field && DECL_ALIASED_P (gnu_field))
- 		  has_aliased_after_self_field = true;
- 		else if (!DECL_FIELD_OFFSET (gnu_field)
- 			 && !DECL_PACKED (gnu_field)
- 			 && !field_has_variable_size (gnu_field))
- 		  has_non_packed_fixed_size_field = true;
- 	      }
- 	  }
- 
- 	save_gnu_tree (gnat_field, gnu_field, false);
-       }
- 
-   /* At the end of the component list there may be a variant part.  */
-   gnat_variant_part = Variant_Part (gnat_component_list);
- 
-   /* We create a QUAL_UNION_TYPE for the variant part since the variants are
-      mutually exclusive and should go in the same memory.  To do this we need
-      to treat each variant as a record whose elements are created from the
-      component list for the variant.  So here we create the records from the
-      lists for the variants and put them all into the QUAL_UNION_TYPE.
-      If this is an Unchecked_Union, we make a UNION_TYPE instead or
-      use GNU_RECORD_TYPE if there are no fields so far.  */
-   if (Present (gnat_variant_part))
-     {
-       Node_Id gnat_discr = Name (gnat_variant_part), variant;
-       tree gnu_discr = gnat_to_gnu (gnat_discr);
-       tree gnu_name = TYPE_IDENTIFIER (gnu_record_type);
-       tree gnu_var_name
- 	= concat_name (get_identifier (Get_Name_String (Chars (gnat_discr))),
- 		       "XVN");
-       tree gnu_union_name
- 	= concat_name (gnu_name, IDENTIFIER_POINTER (gnu_var_name));
-       tree gnu_union_type;
-       tree this_first_free_pos, gnu_variant_list = NULL_TREE;
-       bool union_field_needs_strict_alignment = false;
-       auto_vec <vinfo_t, 16> variant_types;
-       vinfo_t *gnu_variant;
-       unsigned int variants_align = 0;
-       unsigned int i;
- 
-       /* Reuse the enclosing union if this is an Unchecked_Union whose fields
- 	 are all in the variant part, to match the layout of C unions.  There
- 	 is an associated check below.  */
-       if (TREE_CODE (gnu_record_type) == UNION_TYPE)
- 	gnu_union_type = gnu_record_type;
-       else
- 	{
- 	  gnu_union_type
- 	    = make_node (unchecked_union ? UNION_TYPE : QUAL_UNION_TYPE);
- 
- 	  TYPE_NAME (gnu_union_type) = gnu_union_name;
- 	  SET_TYPE_ALIGN (gnu_union_type, 0);
- 	  TYPE_PACKED (gnu_union_type) = TYPE_PACKED (gnu_record_type);
- 	  TYPE_REVERSE_STORAGE_ORDER (gnu_union_type)
- 	    = TYPE_REVERSE_STORAGE_ORDER (gnu_record_type);
- 	}
- 
-       /* If all the fields down to this level have a rep clause, find out
- 	 whether all the fields at this level also have one.  If so, then
- 	 compute the new first free position to be passed downward.  */
-       this_first_free_pos = first_free_pos;
-       if (this_first_free_pos)
- 	{
- 	  for (gnu_field = gnu_field_list;
- 	       gnu_field;
- 	       gnu_field = DECL_CHAIN (gnu_field))
- 	    if (DECL_FIELD_OFFSET (gnu_field))
- 	      {
- 		tree pos = bit_position (gnu_field);
- 		if (!tree_int_cst_lt (pos, this_first_free_pos))
- 		  this_first_free_pos
- 		    = size_binop (PLUS_EXPR, pos, DECL_SIZE (gnu_field));
- 	      }
- 	    else
- 	      {
- 		this_first_free_pos = NULL_TREE;
- 		break;
- 	      }
- 	}
- 
-       /* We build the variants in two passes.  The bulk of the work is done in
- 	 the first pass, that is to say translating the GNAT nodes, building
- 	 the container types and computing the associated properties.  However
- 	 we cannot finish up the container types during this pass because we
- 	 don't know where the variant part will be placed until the end.  */
-       for (variant = First_Non_Pragma (Variants (gnat_variant_part));
- 	   Present (variant);
- 	   variant = Next_Non_Pragma (variant))
- 	{
- 	  tree gnu_variant_type = make_node (RECORD_TYPE);
- 	  tree gnu_inner_name, gnu_qual;
- 	  bool has_rep;
- 	  int field_packed;
- 	  vinfo_t vinfo;
- 
- 	  Get_Variant_Encoding (variant);
- 	  gnu_inner_name = get_identifier_with_length (Name_Buffer, Name_Len);
- 	  TYPE_NAME (gnu_variant_type)
- 	    = concat_name (gnu_union_name,
- 			   IDENTIFIER_POINTER (gnu_inner_name));
- 
- 	  /* Set the alignment of the inner type in case we need to make
- 	     inner objects into bitfields, but then clear it out so the
- 	     record actually gets only the alignment required.  */
- 	  SET_TYPE_ALIGN (gnu_variant_type, TYPE_ALIGN (gnu_record_type));
- 	  TYPE_PACKED (gnu_variant_type) = TYPE_PACKED (gnu_record_type);
- 	  TYPE_REVERSE_STORAGE_ORDER (gnu_variant_type)
- 	    = TYPE_REVERSE_STORAGE_ORDER (gnu_record_type);
- 
- 	  /* Similarly, if the outer record has a size specified and all
- 	     the fields have a rep clause, we can propagate the size.  */
- 	  if (all_rep_and_size)
- 	    {
- 	      TYPE_SIZE (gnu_variant_type) = TYPE_SIZE (gnu_record_type);
- 	      TYPE_SIZE_UNIT (gnu_variant_type)
- 		= TYPE_SIZE_UNIT (gnu_record_type);
- 	    }
- 
- 	  /* Add the fields into the record type for the variant.  Note that
- 	     we aren't sure to really use it at this point, see below.  */
- 	  has_rep
- 	    = components_to_record (Component_List (variant), gnat_record_type,
- 				    NULL_TREE, gnu_variant_type, packed,
- 				    definition, !all_rep_and_size, all_rep,
- 				    unchecked_union, true, needs_xv_encodings,
- 				    true, this_first_free_pos,
- 				    all_rep || this_first_free_pos
- 				    ? NULL : &gnu_rep_list);
- 
- 	  /* Translate the qualifier and annotate the GNAT node.  */
- 	  gnu_qual = choices_to_gnu (gnu_discr, Discrete_Choices (variant));
- 	  Set_Present_Expr (variant, annotate_value (gnu_qual));
- 
- 	  /* Deal with packedness like in gnat_to_gnu_field.  */
- 	  if (components_need_strict_alignment (Component_List (variant)))
- 	    {
- 	      field_packed = 0;
- 	      union_field_needs_strict_alignment = true;
- 	    }
- 	  else
- 	    field_packed
- 	      = adjust_packed (gnu_variant_type, gnu_record_type, packed);
- 
- 	  /* Push this variant onto the stack for the second pass.  */
- 	  vinfo.type = gnu_variant_type;
- 	  vinfo.name = gnu_inner_name;
- 	  vinfo.qual = gnu_qual;
- 	  vinfo.has_rep = has_rep;
- 	  vinfo.packed = field_packed;
- 	  variant_types.safe_push (vinfo);
- 
- 	  /* Compute the global properties that will determine the placement of
- 	     the variant part.  */
- 	  variants_have_rep |= has_rep;
- 	  if (!field_packed && TYPE_ALIGN (gnu_variant_type) > variants_align)
- 	    variants_align = TYPE_ALIGN (gnu_variant_type);
- 	}
- 
-       /* Round up the first free position to the alignment of the variant part
- 	 for the variants without rep clause.  This will guarantee a consistent
- 	 layout independently of the placement of the variant part.  */
-       if (variants_have_rep && variants_align > 0 && this_first_free_pos)
- 	this_first_free_pos = round_up (this_first_free_pos, variants_align);
- 
-       /* In the second pass, the container types are adjusted if necessary and
- 	 finished up, then the corresponding fields of the variant part are
- 	 built with their qualifier, unless this is an unchecked union.  */
-       FOR_EACH_VEC_ELT (variant_types, i, gnu_variant)
- 	{
- 	  tree gnu_variant_type = gnu_variant->type;
- 	  tree gnu_field_list = TYPE_FIELDS (gnu_variant_type);
- 
- 	  /* If this is an Unchecked_Union whose fields are all in the variant
- 	     part and we have a single field with no representation clause or
- 	     placed at offset zero, use the field directly to match the layout
- 	     of C unions.  */
- 	  if (TREE_CODE (gnu_record_type) == UNION_TYPE
- 	      && gnu_field_list
- 	      && !DECL_CHAIN (gnu_field_list)
- 	      && (!DECL_FIELD_OFFSET (gnu_field_list)
- 		  || integer_zerop (bit_position (gnu_field_list))))
- 	    {
- 	      gnu_field = gnu_field_list;
- 	      DECL_CONTEXT (gnu_field) = gnu_record_type;
- 	    }
- 	  else
- 	    {
- 	      /* Finalize the variant type now.  We used to throw away empty
- 		 record types but we no longer do that because we need them to
- 		 generate complete debug info for the variant; otherwise, the
- 		 union type definition will be lacking the fields associated
- 		 with these empty variants.  */
- 	      if (gnu_field_list && variants_have_rep && !gnu_variant->has_rep)
- 		{
- 		  /* The variant part will be at offset 0 so we need to ensure
- 		     that the fields are laid out starting from the first free
- 		     position at this level.  */
- 		  tree gnu_rep_type = make_node (RECORD_TYPE);
- 		  tree gnu_rep_part;
- 		  TYPE_REVERSE_STORAGE_ORDER (gnu_rep_type)
- 		    = TYPE_REVERSE_STORAGE_ORDER (gnu_variant_type);
- 		  finish_record_type (gnu_rep_type, NULL_TREE, 0, debug_info);
- 		  gnu_rep_part
- 		    = create_rep_part (gnu_rep_type, gnu_variant_type,
- 				       this_first_free_pos);
- 		  DECL_CHAIN (gnu_rep_part) = gnu_field_list;
- 		  gnu_field_list = gnu_rep_part;
- 		  finish_record_type (gnu_variant_type, gnu_field_list, 0,
- 				      false);
- 		}
- 
- 	      if (debug_info)
- 		rest_of_record_type_compilation (gnu_variant_type);
- 	      create_type_decl (TYPE_NAME (gnu_variant_type), gnu_variant_type,
- 				true, needs_xv_encodings, gnat_component_list);
- 
- 	      gnu_field
- 		= create_field_decl (gnu_variant->name, gnu_variant_type,
- 				     gnu_union_type,
- 				     all_rep_and_size
- 				     ? TYPE_SIZE (gnu_variant_type) : 0,
- 				     variants_have_rep ? bitsize_zero_node : 0,
- 				     gnu_variant->packed, 0);
- 
- 	      DECL_INTERNAL_P (gnu_field) = 1;
- 
- 	      if (!unchecked_union)
- 		DECL_QUALIFIER (gnu_field) = gnu_variant->qual;
- 	    }
- 
- 	  DECL_CHAIN (gnu_field) = gnu_variant_list;
- 	  gnu_variant_list = gnu_field;
- 	}
- 
-       /* Only make the QUAL_UNION_TYPE if there are non-empty variants.  */
-       if (gnu_variant_list)
- 	{
- 	  int union_field_packed;
- 
- 	  if (all_rep_and_size)
- 	    {
- 	      TYPE_SIZE (gnu_union_type) = TYPE_SIZE (gnu_record_type);
- 	      TYPE_SIZE_UNIT (gnu_union_type)
- 		= TYPE_SIZE_UNIT (gnu_record_type);
- 	    }
- 
- 	  finish_record_type (gnu_union_type, nreverse (gnu_variant_list),
- 			      all_rep_and_size ? 1 : 0, needs_xv_encodings);
- 
- 	  /* If GNU_UNION_TYPE is our record type, it means we must have an
- 	     Unchecked_Union with no fields.  Verify that and, if so, just
- 	     return.  */
- 	  if (gnu_union_type == gnu_record_type)
- 	    {
- 	      gcc_assert (unchecked_union
- 			  && !gnu_field_list
- 			  && !gnu_rep_list);
- 	      return variants_have_rep;
- 	    }
- 
- 	  create_type_decl (TYPE_NAME (gnu_union_type), gnu_union_type, true,
- 			    needs_xv_encodings, gnat_component_list);
- 
- 	  /* Deal with packedness like in gnat_to_gnu_field.  */
- 	  if (union_field_needs_strict_alignment)
- 	    union_field_packed = 0;
- 	  else
- 	    union_field_packed
- 	      = adjust_packed (gnu_union_type, gnu_record_type, packed);
- 
- 	  gnu_variant_part
- 	    = create_field_decl (gnu_var_name, gnu_union_type, gnu_record_type,
- 				 all_rep_and_size
- 				 ? TYPE_SIZE (gnu_union_type) : 0,
- 				 variants_have_rep ? bitsize_zero_node : 0,
- 				 union_field_packed, 0);
- 
- 	  DECL_INTERNAL_P (gnu_variant_part) = 1;
- 	}
-     }
- 
-   /* Scan GNU_FIELD_LIST and see if any fields have rep clauses.  If they do,
-      pull them out and put them onto the appropriate list.
- 
-      Similarly, pull out the fields with zero size and no rep clause, as they
-      would otherwise modify the layout and thus very likely run afoul of the
-      Ada semantics, which are different from those of C here.
- 
-      Finally, if there is an aliased field placed in the list after fields
-      with self-referential size, pull out the latter in the same way.
- 
-      Optionally, if the reordering mechanism is enabled, pull out the fields
-      with self-referential size, variable size and fixed size not a multiple
-      of a byte, so that they don't cause the regular fields to be either at
-      self-referential/variable offset or misaligned.  Note, in the latter
-      case, that this can only happen in packed record types so the alignment
-      is effectively capped to the byte for the whole record.  But we don't
-      do it for packed record types if not all fixed-size fiels can be packed
-      and for non-packed record types if pragma Optimize_Alignment (Space) is
-      specified, because this can prevent alignment gaps from being filled.
- 
-      Optionally, if the layout warning is enabled, keep track of the above 4
-      different kinds of fields and issue a warning if some of them would be
-      (or are being) reordered by the reordering mechanism.
- 
-      ??? If we reorder fields, the debugging information will be affected and
-      the debugger print fields in a different order from the source code.  */
-   const bool do_reorder
-     = (Convention (gnat_record_type) == Convention_Ada
-        && !No_Reordering (gnat_record_type)
-        && !(Is_Packed (gnat_record_type)
- 	    ? has_non_packed_fixed_size_field
- 	    : Optimize_Alignment_Space (gnat_record_type))
-        && !Debug_Flag_Dot_R);
-   const bool w_reorder
-     = (Convention (gnat_record_type) == Convention_Ada
-        && Warn_On_Questionable_Layout
-        && !(No_Reordering (gnat_record_type) && GNAT_Mode));
-   const bool in_variant = (p_gnu_rep_list != NULL);
-   tree gnu_zero_list = NULL_TREE;
-   tree gnu_self_list = NULL_TREE;
-   tree gnu_var_list = NULL_TREE;
-   tree gnu_bitp_list = NULL_TREE;
-   tree gnu_tmp_bitp_list = NULL_TREE;
-   unsigned int tmp_bitp_size = 0;
-   unsigned int last_reorder_field_type = -1;
-   unsigned int tmp_last_reorder_field_type = -1;
- 
- #define MOVE_FROM_FIELD_LIST_TO(LIST)	\
-   do {					\
-     if (gnu_last)			\
-       DECL_CHAIN (gnu_last) = gnu_next;	\
-     else				\
-       gnu_field_list = gnu_next;	\
- 					\
-     DECL_CHAIN (gnu_field) = (LIST);	\
-     (LIST) = gnu_field;			\
-   } while (0)
- 
-   gnu_last = NULL_TREE;
-   for (gnu_field = gnu_field_list; gnu_field; gnu_field = gnu_next)
-     {
-       gnu_next = DECL_CHAIN (gnu_field);
- 
-       if (DECL_FIELD_OFFSET (gnu_field))
- 	{
- 	  MOVE_FROM_FIELD_LIST_TO (gnu_rep_list);
- 	  continue;
- 	}
- 
-       if (DECL_SIZE (gnu_field) && integer_zerop (DECL_SIZE (gnu_field)))
- 	{
- 	  DECL_SIZE_UNIT (gnu_field) = size_zero_node;
- 	  DECL_FIELD_OFFSET (gnu_field) = size_zero_node;
- 	  SET_DECL_OFFSET_ALIGN (gnu_field, BIGGEST_ALIGNMENT);
- 	  DECL_FIELD_BIT_OFFSET (gnu_field) = bitsize_zero_node;
- 	  if (DECL_ALIASED_P (gnu_field))
- 	    SET_TYPE_ALIGN (gnu_record_type,
- 			    MAX (TYPE_ALIGN (gnu_record_type),
- 				 TYPE_ALIGN (TREE_TYPE (gnu_field))));
- 	  MOVE_FROM_FIELD_LIST_TO (gnu_zero_list);
- 	  continue;
- 	}
- 
-       if (has_aliased_after_self_field && field_has_self_size (gnu_field))
- 	{
- 	  MOVE_FROM_FIELD_LIST_TO (gnu_self_list);
- 	  continue;
- 	}
- 
-       /* We don't need further processing in default mode.  */
-       if (!w_reorder && !do_reorder)
- 	{
- 	  gnu_last = gnu_field;
- 	  continue;
- 	}
- 
-       if (field_has_self_size (gnu_field))
- 	{
- 	  if (w_reorder)
- 	    {
- 	      if (last_reorder_field_type < 4)
- 		warn_on_field_placement (gnu_field, gnat_component_list,
- 					 gnat_record_type, in_variant,
- 					 do_reorder);
- 	      else
- 		last_reorder_field_type = 4;
- 	    }
- 
- 	  if (do_reorder)
- 	    {
- 	      MOVE_FROM_FIELD_LIST_TO (gnu_self_list);
- 	      continue;
- 	    }
- 	}
- 
-       else if (field_has_variable_size (gnu_field))
- 	{
- 	  if (w_reorder)
- 	    {
- 	      if (last_reorder_field_type < 3)
- 		warn_on_field_placement (gnu_field, gnat_component_list,
- 					 gnat_record_type, in_variant,
- 					 do_reorder);
- 	      else
- 		last_reorder_field_type = 3;
- 	    }
- 
- 	  if (do_reorder)
- 	    {
- 	      MOVE_FROM_FIELD_LIST_TO (gnu_var_list);
- 	      continue;
- 	    }
- 	}
- 
-       else
- 	{
- 	  /* If the field has no size, then it cannot be bit-packed.  */
- 	  const unsigned int bitp_size
- 	    = DECL_SIZE (gnu_field)
- 	      ? TREE_INT_CST_LOW (DECL_SIZE (gnu_field)) % BITS_PER_UNIT
- 	      : 0;
- 
- 	  /* If the field is bit-packed, we move it to a temporary list that
- 	     contains the contiguously preceding bit-packed fields, because
- 	     we want to be able to put them back if the misalignment happens
- 	     to cancel itself after several bit-packed fields.  */
- 	  if (bitp_size != 0)
- 	    {
- 	      tmp_bitp_size = (tmp_bitp_size + bitp_size) % BITS_PER_UNIT;
- 
- 	      if (last_reorder_field_type != 2)
- 		{
- 		  tmp_last_reorder_field_type = last_reorder_field_type;
- 		  last_reorder_field_type = 2;
- 		}
- 
- 	      if (do_reorder)
- 		{
- 		  MOVE_FROM_FIELD_LIST_TO (gnu_tmp_bitp_list);
- 		  continue;
- 		}
- 	    }
- 
- 	  /* No more bit-packed fields, move the existing ones to the end or
- 	     put them back at their original location.  */
- 	  else if (last_reorder_field_type == 2 || gnu_tmp_bitp_list)
- 	    {
- 	      last_reorder_field_type = 1;
- 
- 	      if (tmp_bitp_size != 0)
- 		{
- 		  if (w_reorder && tmp_last_reorder_field_type < 2)
- 		    {
- 		      if (gnu_tmp_bitp_list)
- 			warn_on_list_placement (gnu_tmp_bitp_list,
- 						gnat_component_list,
- 						gnat_record_type, in_variant,
- 						do_reorder);
- 		      else
- 			warn_on_field_placement (gnu_last,
- 						 gnat_component_list,
- 						 gnat_record_type, in_variant,
- 						 do_reorder);
- 		    }
- 
- 		  if (do_reorder)
- 		    gnu_bitp_list = chainon (gnu_tmp_bitp_list, gnu_bitp_list);
- 
- 		  gnu_tmp_bitp_list = NULL_TREE;
- 		  tmp_bitp_size = 0;
- 		}
- 	      else
- 		{
- 		  /* Rechain the temporary list in front of GNU_FIELD.  */
- 		  tree gnu_bitp_field = gnu_field;
- 		  while (gnu_tmp_bitp_list)
- 		    {
- 		      tree gnu_bitp_next = DECL_CHAIN (gnu_tmp_bitp_list);
- 		      DECL_CHAIN (gnu_tmp_bitp_list) = gnu_bitp_field;
- 		      if (gnu_last)
- 			DECL_CHAIN (gnu_last) = gnu_tmp_bitp_list;
- 		      else
- 			gnu_field_list = gnu_tmp_bitp_list;
- 		      gnu_bitp_field = gnu_tmp_bitp_list;
- 		      gnu_tmp_bitp_list = gnu_bitp_next;
- 		    }
- 		}
- 	    }
- 
- 	  else
- 	    last_reorder_field_type = 1;
- 	}
- 
-       gnu_last = gnu_field;
-     }
- 
- #undef MOVE_FROM_FIELD_LIST_TO
- 
-   gnu_field_list = nreverse (gnu_field_list);
- 
-   /* If permitted, we reorder the fields as follows:
- 
-       1) all (groups of) fields whose length is fixed and multiple of a byte,
-       2) the remaining fields whose length is fixed and not multiple of a byte,
-       3) the remaining fields whose length doesn't depend on discriminants,
-       4) all fields whose length depends on discriminants,
-       5) the variant part,
- 
-      within the record and within each variant recursively.  */
- 
-   if (w_reorder)
-     {
-       /* If we have pending bit-packed fields, warn if they would be moved
- 	 to after regular fields.  */
-       if (last_reorder_field_type == 2
- 	  && tmp_bitp_size != 0
- 	  && tmp_last_reorder_field_type < 2)
- 	{
- 	  if (gnu_tmp_bitp_list)
- 	    warn_on_list_placement (gnu_tmp_bitp_list,
- 				    gnat_component_list, gnat_record_type,
- 				    in_variant, do_reorder);
- 	  else
- 	    warn_on_field_placement (gnu_field_list,
- 				     gnat_component_list, gnat_record_type,
- 				     in_variant, do_reorder);
- 	}
-     }
- 
-   if (do_reorder)
-     {
-       /* If we have pending bit-packed fields on the temporary list, we put
- 	 them either on the bit-packed list or back on the regular list.  */
-       if (gnu_tmp_bitp_list)
- 	{
- 	  if (tmp_bitp_size != 0)
- 	    gnu_bitp_list = chainon (gnu_tmp_bitp_list, gnu_bitp_list);
- 	  else
- 	    gnu_field_list = chainon (gnu_tmp_bitp_list, gnu_field_list);
- 	}
- 
-       gnu_field_list
- 	= chainon (gnu_field_list,
- 		   chainon (gnu_bitp_list,
- 			    chainon (gnu_var_list, gnu_self_list)));
-     }
- 
-   /* Otherwise, if there is an aliased field placed after a field whose length
-      depends on discriminants, we put all the fields of the latter sort, last.
-      We need to do this in case an object of this record type is mutable.  */
-   else if (has_aliased_after_self_field)
-     gnu_field_list = chainon (gnu_field_list, gnu_self_list);
- 
-   /* If P_REP_LIST is nonzero, this means that we are asked to move the fields
-      in our REP list to the previous level because this level needs them in
-      order to do a correct layout, i.e. avoid having overlapping fields.  */
-   if (p_gnu_rep_list && gnu_rep_list)
-     *p_gnu_rep_list = chainon (*p_gnu_rep_list, gnu_rep_list);
- 
-   /* Deal with the case of an extension of a record type with variable size and
-      partial rep clause, for which the _Parent field is forced at offset 0 and
-      has variable size.  Note that we cannot do it if the field has fixed size
-      because we rely on the presence of the REP part built below to trigger the
-      reordering of the fields in a derived record type when all the fields have
-      a fixed position.  */
-   else if (gnu_rep_list
- 	   && !DECL_CHAIN (gnu_rep_list)
- 	   && TREE_CODE (DECL_SIZE (gnu_rep_list)) != INTEGER_CST
- 	   && !variants_have_rep
- 	   && first_free_pos
- 	   && integer_zerop (first_free_pos)
- 	   && integer_zerop (bit_position (gnu_rep_list)))
-     {
-       DECL_CHAIN (gnu_rep_list) = gnu_field_list;
-       gnu_field_list = gnu_rep_list;
-       gnu_rep_list = NULL_TREE;
-     }
- 
-   /* Otherwise, sort the fields by bit position and put them into their own
-      record, before the others, if we also have fields without rep clause.  */
-   else if (gnu_rep_list)
-     {
-       tree gnu_parent, gnu_rep_type;
- 
-       /* If all the fields have a rep clause, we can do a flat layout.  */
-       layout_with_rep = !gnu_field_list
- 			&& (!gnu_variant_part || variants_have_rep);
- 
-       /* Same as above but the extension itself has a rep clause, in which case
- 	 we need to set aside the _Parent field to lay out the REP part.  */
-       if (TREE_CODE (DECL_SIZE (gnu_rep_list)) != INTEGER_CST
- 	  && !layout_with_rep
- 	  && !variants_have_rep
- 	  && first_free_pos
- 	  && integer_zerop (first_free_pos)
- 	  && integer_zerop (bit_position (gnu_rep_list)))
- 	{
- 	  gnu_parent = gnu_rep_list;
- 	  gnu_rep_list = DECL_CHAIN (gnu_rep_list);
- 	}
-       else
- 	gnu_parent = NULL_TREE;
- 
-       gnu_rep_type
- 	= layout_with_rep ? gnu_record_type : make_node (RECORD_TYPE);
- 
-       /* Sort the fields in order of increasing bit position.  */
-       const int len = list_length (gnu_rep_list);
-       tree *gnu_arr = XALLOCAVEC (tree, len);
- 
-       gnu_field = gnu_rep_list;
-       for (int i = 0; i < len; i++)
- 	{
- 	  gnu_arr[i] = gnu_field;
- 	  gnu_field = DECL_CHAIN (gnu_field);
- 	}
- 
-       qsort (gnu_arr, len, sizeof (tree), compare_field_bitpos);
- 
-       gnu_rep_list = NULL_TREE;
-       for (int i = len - 1; i >= 0; i--)
- 	{
- 	  DECL_CHAIN (gnu_arr[i]) = gnu_rep_list;
- 	  gnu_rep_list = gnu_arr[i];
- 	  DECL_CONTEXT (gnu_arr[i]) = gnu_rep_type;
- 	}
- 
-       /* Do the layout of the REP part, if any.  */
-       if (layout_with_rep)
- 	gnu_field_list = gnu_rep_list;
-       else
- 	{
- 	  TYPE_NAME (gnu_rep_type)
- 	    = create_concat_name (gnat_record_type, "REP");
- 	  TYPE_REVERSE_STORAGE_ORDER (gnu_rep_type)
- 	    = TYPE_REVERSE_STORAGE_ORDER (gnu_record_type);
- 	  finish_record_type (gnu_rep_type, gnu_rep_list, 1, false);
- 
- 	  /* If FIRST_FREE_POS is nonzero, we need to ensure that the fields
- 	     without rep clause are laid out starting from this position.
- 	     Therefore, we force it as a minimal size on the REP part.  */
- 	  tree gnu_rep_part
- 	    = create_rep_part (gnu_rep_type, gnu_record_type, first_free_pos);
- 
- 	  /* If this is an extension, put back the _Parent field as the first
- 	     field of the REP part at offset 0 and update its layout.  */
- 	  if (gnu_parent)
- 	    {
- 	      const unsigned int align = DECL_ALIGN (gnu_parent);
- 	      DECL_CHAIN (gnu_parent) = TYPE_FIELDS (gnu_rep_type);
- 	      TYPE_FIELDS (gnu_rep_type) = gnu_parent;
- 	      DECL_CONTEXT (gnu_parent) = gnu_rep_type;
- 	      if (align > TYPE_ALIGN (gnu_rep_type))
- 		{
- 		  SET_TYPE_ALIGN (gnu_rep_type, align);
- 		  TYPE_SIZE (gnu_rep_type)
- 		    = round_up (TYPE_SIZE (gnu_rep_type), align);
- 		  TYPE_SIZE_UNIT (gnu_rep_type)
- 		    = round_up (TYPE_SIZE_UNIT (gnu_rep_type), align);
- 		  SET_DECL_ALIGN (gnu_rep_part, align);
- 		}
- 	    }
- 
- 	  if (debug_info)
- 	    rest_of_record_type_compilation (gnu_rep_type);
- 
- 	  /* Chain the REP part at the beginning of the field list.  */
- 	  DECL_CHAIN (gnu_rep_part) = gnu_field_list;
- 	  gnu_field_list = gnu_rep_part;
- 	}
-     }
- 
-   /* Chain the variant part at the end of the field list.  */
-   if (gnu_variant_part)
-     gnu_field_list = chainon (gnu_field_list, gnu_variant_part);
- 
-   if (cancel_alignment)
-     SET_TYPE_ALIGN (gnu_record_type, 0);
- 
-   TYPE_ARTIFICIAL (gnu_record_type) = artificial;
- 
-   finish_record_type (gnu_record_type, gnu_field_list, layout_with_rep ? 1 : 0,
- 		      debug_info && !maybe_unused);
- 
-   /* Chain the fields with zero size at the beginning of the field list.  */
-   if (gnu_zero_list)
-     TYPE_FIELDS (gnu_record_type)
-       = chainon (gnu_zero_list, TYPE_FIELDS (gnu_record_type));
- 
-   return (gnu_rep_list && !p_gnu_rep_list) || variants_have_rep;
- }
- 
- /* Given GNU_SIZE, a GCC tree representing a size, return a Uint to be
-    placed into an Esize, Component_Bit_Offset, or Component_Size value
-    in the GNAT tree.  */
- 
- static Uint
- annotate_value (tree gnu_size)
- {
-   static int var_count = 0;
-   TCode tcode;
-   Node_Ref_Or_Val ops[3] = { No_Uint, No_Uint, No_Uint };
-   struct tree_int_map in;
- 
-   /* See if we've already saved the value for this node.  */
-   if (EXPR_P (gnu_size) || DECL_P (gnu_size))
-     {
-       struct tree_int_map *e;
- 
-       in.base.from = gnu_size;
-       e = annotate_value_cache->find (&in);
- 
-       if (e)
- 	return (Node_Ref_Or_Val) e->to;
-     }
-   else
-     in.base.from = NULL_TREE;
- 
-   /* If we do not return inside this switch, TCODE will be set to the
-      code to be used in a call to Create_Node.  */
-   switch (TREE_CODE (gnu_size))
-     {
-     case INTEGER_CST:
-       /* For negative values, build NEGATE_EXPR of the opposite.  Such values
- 	 can appear for discriminants in expressions for variants.  */
-       if (tree_int_cst_sgn (gnu_size) < 0)
- 	{
- 	  tree t = wide_int_to_tree (sizetype, -wi::to_wide (gnu_size));
- 	  tcode = Negate_Expr;
- 	  ops[0] = UI_From_gnu (t);
- 	}
-       else
- 	return TREE_OVERFLOW (gnu_size) ? No_Uint : UI_From_gnu (gnu_size);
-       break;
- 
-     case COMPONENT_REF:
-       /* The only case we handle here is a simple discriminant reference.  */
-       if (DECL_DISCRIMINANT_NUMBER (TREE_OPERAND (gnu_size, 1)))
- 	{
- 	  tree ref = gnu_size;
- 	  gnu_size = TREE_OPERAND (ref, 1);
- 
- 	  /* Climb up the chain of successive extensions, if any.  */
- 	  while (TREE_CODE (TREE_OPERAND (ref, 0)) == COMPONENT_REF
- 		 && DECL_NAME (TREE_OPERAND (TREE_OPERAND (ref, 0), 1))
- 		    == parent_name_id)
- 	    ref = TREE_OPERAND (ref, 0);
- 
- 	  if (TREE_CODE (TREE_OPERAND (ref, 0)) == PLACEHOLDER_EXPR)
- 	    {
- 	      /* Fall through to common processing as a FIELD_DECL.  */
- 	      tcode = Discrim_Val;
- 	      ops[0] = UI_From_gnu (DECL_DISCRIMINANT_NUMBER (gnu_size));
- 	    }
- 	  else
- 	    return No_Uint;
- 	}
-       else
- 	return No_Uint;
-       break;
- 
-     case VAR_DECL:
-       tcode = Dynamic_Val;
-       ops[0] = UI_From_Int (++var_count);
-       break;
- 
-     CASE_CONVERT:
-     case NON_LVALUE_EXPR:
-       return annotate_value (TREE_OPERAND (gnu_size, 0));
- 
-       /* Now just list the operations we handle.  */
-     case COND_EXPR:		tcode = Cond_Expr; break;
-     case MINUS_EXPR:		tcode = Minus_Expr; break;
-     case TRUNC_DIV_EXPR:	tcode = Trunc_Div_Expr; break;
-     case CEIL_DIV_EXPR:		tcode = Ceil_Div_Expr; break;
-     case FLOOR_DIV_EXPR:	tcode = Floor_Div_Expr; break;
-     case TRUNC_MOD_EXPR:	tcode = Trunc_Mod_Expr; break;
-     case CEIL_MOD_EXPR:		tcode = Ceil_Mod_Expr; break;
-     case FLOOR_MOD_EXPR:	tcode = Floor_Mod_Expr; break;
-     case EXACT_DIV_EXPR:	tcode = Exact_Div_Expr; break;
-     case NEGATE_EXPR:		tcode = Negate_Expr; break;
-     case MIN_EXPR:		tcode = Min_Expr; break;
-     case MAX_EXPR:		tcode = Max_Expr; break;
-     case ABS_EXPR:		tcode = Abs_Expr; break;
-     case TRUTH_ANDIF_EXPR:
-     case TRUTH_AND_EXPR:	tcode = Truth_And_Expr; break;
-     case TRUTH_ORIF_EXPR:
-     case TRUTH_OR_EXPR:		tcode = Truth_Or_Expr; break;
-     case TRUTH_XOR_EXPR:	tcode = Truth_Xor_Expr; break;
-     case TRUTH_NOT_EXPR:	tcode = Truth_Not_Expr; break;
-     case LT_EXPR:		tcode = Lt_Expr; break;
-     case LE_EXPR:		tcode = Le_Expr; break;
-     case GT_EXPR:		tcode = Gt_Expr; break;
-     case GE_EXPR:		tcode = Ge_Expr; break;
-     case EQ_EXPR:		tcode = Eq_Expr; break;
-     case NE_EXPR:		tcode = Ne_Expr; break;
- 
-     case PLUS_EXPR:
-       /* Turn addition of negative constant into subtraction.  */
-       if (TREE_CODE (TREE_OPERAND (gnu_size, 1)) == INTEGER_CST
- 	  && tree_int_cst_sign_bit (TREE_OPERAND (gnu_size, 1)))
- 	{
- 	  tcode = Minus_Expr;
- 	  wide_int wop1 = -wi::to_wide (TREE_OPERAND (gnu_size, 1));
- 	  ops[1] = annotate_value (wide_int_to_tree (sizetype, wop1));
- 	  break;
- 	}
- 
-       /* ... fall through ... */
- 
-     case MULT_EXPR:
-       tcode = (TREE_CODE (gnu_size) == MULT_EXPR ? Mult_Expr : Plus_Expr);
-       /* Fold conversions from bytes to bits into inner operations.  */
-       if (TREE_CODE (TREE_OPERAND (gnu_size, 1)) == INTEGER_CST
- 	  && CONVERT_EXPR_P (TREE_OPERAND (gnu_size, 0)))
- 	{
- 	  tree inner_op = TREE_OPERAND (TREE_OPERAND (gnu_size, 0), 0);
- 	  if (TREE_CODE (inner_op) == TREE_CODE (gnu_size)
- 	      && TREE_CODE (TREE_OPERAND (inner_op, 1)) == INTEGER_CST)
- 	    {
- 	      ops[0] = annotate_value (TREE_OPERAND (inner_op, 0));
- 	      tree inner_op_op1 = TREE_OPERAND (inner_op, 1);
- 	      tree gnu_size_op1 = TREE_OPERAND (gnu_size, 1);
- 	      widest_int op1;
- 	      if (TREE_CODE (gnu_size) == MULT_EXPR)
- 		op1 = (wi::to_widest (inner_op_op1)
- 		       * wi::to_widest (gnu_size_op1));
- 	      else
- 		{
- 		  op1 = (wi::to_widest (inner_op_op1)
- 			 + wi::to_widest (gnu_size_op1));
- 		  if (wi::zext (op1, TYPE_PRECISION (sizetype)) == 0)
- 		    return ops[0];
- 		}
- 	      ops[1] = annotate_value (wide_int_to_tree (sizetype, op1));
- 	    }
- 	}
-       break;
- 
-     case BIT_AND_EXPR:
-       tcode = Bit_And_Expr;
-       /* For negative values in sizetype, build NEGATE_EXPR of the opposite.
- 	 Such values can appear in expressions with aligning patterns.  */
-       if (TREE_CODE (TREE_OPERAND (gnu_size, 1)) == INTEGER_CST)
- 	{
- 	  wide_int wop1 = -wi::to_wide (TREE_OPERAND (gnu_size, 1));
- 	  tree op1 = wide_int_to_tree (sizetype, wop1);
- 	  ops[1] = annotate_value (build1 (NEGATE_EXPR, sizetype, op1));
- 	}
-       break;
- 
-     case CALL_EXPR:
-       /* In regular mode, inline back only if symbolic annotation is requested
- 	 in order to avoid memory explosion on big discriminated record types.
- 	 But not in ASIS mode, as symbolic annotation is required for DDA.  */
-       if (List_Representation_Info >= 3 || type_annotate_only)
- 	{
- 	  tree t = maybe_inline_call_in_expr (gnu_size);
- 	  return t ? annotate_value (t) : No_Uint;
- 	}
-       else
- 	return Uint_Minus_1;
- 
-     default:
-       return No_Uint;
-     }
- 
-   /* Now get each of the operands that's relevant for this code.  If any
-      cannot be expressed as a repinfo node, say we can't.  */
-   for (int i = 0; i < TREE_CODE_LENGTH (TREE_CODE (gnu_size)); i++)
-     if (ops[i] == No_Uint)
-       {
- 	ops[i] = annotate_value (TREE_OPERAND (gnu_size, i));
- 	if (ops[i] == No_Uint)
- 	  return No_Uint;
-       }
- 
-   Node_Ref_Or_Val ret = Create_Node (tcode, ops[0], ops[1], ops[2]);
- 
-   /* Save the result in the cache.  */
-   if (in.base.from)
-     {
-       struct tree_int_map **h;
-       /* We can't assume the hash table data hasn't moved since the initial
- 	 look up, so we have to search again.  Allocating and inserting an
- 	 entry at that point would be an alternative, but then we'd better
- 	 discard the entry if we decided not to cache it.  */
-       h = annotate_value_cache->find_slot (&in, INSERT);
-       gcc_assert (!*h);
-       *h = ggc_alloc<tree_int_map> ();
-       (*h)->base.from = in.base.from;
-       (*h)->to = ret;
-     }
- 
-   return ret;
- }
- 
- /* Given GNAT_ENTITY, an object (constant, variable, parameter, exception)
-    and GNU_TYPE, its corresponding GCC type, set Esize and Alignment to the
-    size and alignment used by Gigi.  Prefer SIZE over TYPE_SIZE if non-null.
-    BY_REF is true if the object is used by reference.  */
- 
- void
- annotate_object (Entity_Id gnat_entity, tree gnu_type, tree size, bool by_ref)
- {
-   if (by_ref)
-     {
-       if (TYPE_IS_FAT_POINTER_P (gnu_type))
- 	gnu_type = TYPE_UNCONSTRAINED_ARRAY (gnu_type);
-       else
- 	gnu_type = TREE_TYPE (gnu_type);
-     }
- 
-   if (Unknown_Esize (gnat_entity))
-     {
-       if (TREE_CODE (gnu_type) == RECORD_TYPE
- 	  && TYPE_CONTAINS_TEMPLATE_P (gnu_type))
- 	size = TYPE_SIZE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (gnu_type))));
-       else if (!size)
- 	size = TYPE_SIZE (gnu_type);
- 
-       if (size)
- 	Set_Esize (gnat_entity, annotate_value (size));
-     }
- 
-   if (Unknown_Alignment (gnat_entity))
-     Set_Alignment (gnat_entity,
- 		   UI_From_Int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT));
- }
- 
- /* Return first element of field list whose TREE_PURPOSE is the same as ELEM.
-    Return NULL_TREE if there is no such element in the list.  */
- 
- static tree
- purpose_member_field (const_tree elem, tree list)
- {
-   while (list)
-     {
-       tree field = TREE_PURPOSE (list);
-       if (SAME_FIELD_P (field, elem))
- 	return list;
-       list = TREE_CHAIN (list);
-     }
-   return NULL_TREE;
- }
- 
- /* Given GNAT_ENTITY, a record type, and GNU_TYPE, its corresponding GCC type,
-    set Component_Bit_Offset and Esize of the components to the position and
-    size used by Gigi.  */
- 
- static void
- annotate_rep (Entity_Id gnat_entity, tree gnu_type)
- {
-   /* For an extension, the inherited components have not been translated because
-      they are fetched from the _Parent component on the fly.  */
-   const bool is_extension
-     = Is_Tagged_Type (gnat_entity) && Is_Derived_Type (gnat_entity);
- 
-   /* We operate by first making a list of all fields and their position (we
-      can get the size easily) and then update all the sizes in the tree.  */
-   tree gnu_list
-     = build_position_list (gnu_type, false, size_zero_node, bitsize_zero_node,
- 			   BIGGEST_ALIGNMENT, NULL_TREE);
- 
-   for (Entity_Id gnat_field = First_Entity (gnat_entity);
-        Present (gnat_field);
-        gnat_field = Next_Entity (gnat_field))
-     if ((Ekind (gnat_field) == E_Component
- 	 && (is_extension || present_gnu_tree (gnat_field)))
- 	|| (Ekind (gnat_field) == E_Discriminant
- 	    && !Is_Unchecked_Union (Scope (gnat_field))))
-       {
- 	tree t = purpose_member_field (gnat_to_gnu_field_decl (gnat_field),
- 				       gnu_list);
- 	if (t)
- 	  {
- 	    tree offset = TREE_VEC_ELT (TREE_VALUE (t), 0);
- 	    tree bit_offset = TREE_VEC_ELT (TREE_VALUE (t), 2);
- 
- 	    /* If we are just annotating types and the type is tagged, the tag
- 	       and the parent components are not generated by the front-end so
- 	       we need to add the appropriate offset to each component without
- 	       representation clause.  */
- 	    if (type_annotate_only
- 		&& Is_Tagged_Type (gnat_entity)
- 		&& No (Component_Clause (gnat_field)))
- 	      {
- 		tree parent_bit_offset;
- 
- 		/* For a component appearing in the current extension, the
- 		   offset is the size of the parent.  */
- 		if (Is_Derived_Type (gnat_entity)
- 		    && Original_Record_Component (gnat_field) == gnat_field)
- 		  parent_bit_offset
- 		    = UI_To_gnu (Esize (Etype (Base_Type (gnat_entity))),
- 				 bitsizetype);
- 		else
- 		  parent_bit_offset = bitsize_int (POINTER_SIZE);
- 
- 		if (TYPE_FIELDS (gnu_type))
- 		  parent_bit_offset
- 		    = round_up (parent_bit_offset,
- 				DECL_ALIGN (TYPE_FIELDS (gnu_type)));
- 
- 		offset
- 		  = size_binop (PLUS_EXPR, offset,
- 				fold_convert (sizetype,
- 					      size_binop (TRUNC_DIV_EXPR,
- 							  parent_bit_offset,
- 							  bitsize_unit_node)));
- 	      }
- 
- 	    /* If the field has a variable offset, also compute the normalized
- 	       position since it's easier to do on trees here than to deduce
- 	       it from the annotated expression of Component_Bit_Offset.  */
- 	    if (TREE_CODE (offset) != INTEGER_CST)
- 	      {
- 		normalize_offset (&offset, &bit_offset, BITS_PER_UNIT);
- 		Set_Normalized_Position (gnat_field,
- 					 annotate_value (offset));
- 		Set_Normalized_First_Bit (gnat_field,
- 					  annotate_value (bit_offset));
- 	      }
- 
- 	    Set_Component_Bit_Offset
- 	      (gnat_field,
- 	       annotate_value (bit_from_pos (offset, bit_offset)));
- 
- 	    Set_Esize (gnat_field,
- 		       annotate_value (DECL_SIZE (TREE_PURPOSE (t))));
- 	  }
- 	else if (is_extension)
- 	  {
- 	    /* If there is no entry, this is an inherited component whose
- 	       position is the same as in the parent type.  */
- 	    Entity_Id gnat_orig = Original_Record_Component (gnat_field);
- 
- 	    /* If we are just annotating types, discriminants renaming those of
- 	       the parent have no entry so deal with them specifically.  */
- 	    if (type_annotate_only
- 		&& gnat_orig == gnat_field
- 		&& Ekind (gnat_field) == E_Discriminant)
- 	      gnat_orig = Corresponding_Discriminant (gnat_field);
- 
- 	    if (Known_Normalized_Position (gnat_orig))
- 	      {
- 		Set_Normalized_Position (gnat_field,
- 					 Normalized_Position (gnat_orig));
- 		Set_Normalized_First_Bit (gnat_field,
- 					  Normalized_First_Bit (gnat_orig));
- 	      }
- 
- 	    Set_Component_Bit_Offset (gnat_field,
- 				      Component_Bit_Offset (gnat_orig));
- 
- 	    Set_Esize (gnat_field, Esize (gnat_orig));
- 	  }
-       }
- }
- 
- /* Scan all fields in GNU_TYPE and return a TREE_LIST where TREE_PURPOSE is
-    the FIELD_DECL and TREE_VALUE a TREE_VEC containing the byte position, the
-    value to be placed into DECL_OFFSET_ALIGN and the bit position.  The list
-    of fields is flattened, except for variant parts if DO_NOT_FLATTEN_VARIANT
-    is set to true.  GNU_POS is to be added to the position, GNU_BITPOS to the
-    bit position, OFFSET_ALIGN is the present offset alignment.  GNU_LIST is a
-    pre-existing list to be chained to the newly created entries.  */
- 
- static tree
- build_position_list (tree gnu_type, bool do_not_flatten_variant, tree gnu_pos,
- 		     tree gnu_bitpos, unsigned int offset_align, tree gnu_list)
- {
-   tree gnu_field;
- 
-   for (gnu_field = TYPE_FIELDS (gnu_type);
-        gnu_field;
-        gnu_field = DECL_CHAIN (gnu_field))
-     {
-       tree gnu_our_bitpos = size_binop (PLUS_EXPR, gnu_bitpos,
- 					DECL_FIELD_BIT_OFFSET (gnu_field));
-       tree gnu_our_offset = size_binop (PLUS_EXPR, gnu_pos,
- 					DECL_FIELD_OFFSET (gnu_field));
-       unsigned int our_offset_align
- 	= MIN (offset_align, DECL_OFFSET_ALIGN (gnu_field));
-       tree v = make_tree_vec (3);
- 
-       TREE_VEC_ELT (v, 0) = gnu_our_offset;
-       TREE_VEC_ELT (v, 1) = size_int (our_offset_align);
-       TREE_VEC_ELT (v, 2) = gnu_our_bitpos;
-       gnu_list = tree_cons (gnu_field, v, gnu_list);
- 
-       /* Recurse on internal fields, flattening the nested fields except for
- 	 those in the variant part, if requested.  */
-       if (DECL_INTERNAL_P (gnu_field))
- 	{
- 	  tree gnu_field_type = TREE_TYPE (gnu_field);
- 	  if (do_not_flatten_variant
- 	      && TREE_CODE (gnu_field_type) == QUAL_UNION_TYPE)
- 	    gnu_list
- 	      = build_position_list (gnu_field_type, do_not_flatten_variant,
- 				     size_zero_node, bitsize_zero_node,
- 				     BIGGEST_ALIGNMENT, gnu_list);
- 	  else
- 	    gnu_list
- 	      = build_position_list (gnu_field_type, do_not_flatten_variant,
- 				     gnu_our_offset, gnu_our_bitpos,
- 				     our_offset_align, gnu_list);
- 	}
-     }
- 
-   return gnu_list;
- }
- 
- /* Return a list describing the substitutions needed to reflect the
-    discriminant substitutions from GNAT_TYPE to GNAT_SUBTYPE.  They can
-    be in any order.  The values in an element of the list are in the form
-    of operands to SUBSTITUTE_IN_EXPR.  DEFINITION is true if this is for
-    a definition of GNAT_SUBTYPE.  */
- 
- static vec<subst_pair>
- build_subst_list (Entity_Id gnat_subtype, Entity_Id gnat_type, bool definition)
- {
-   vec<subst_pair> gnu_list = vNULL;
-   Entity_Id gnat_discrim;
-   Node_Id gnat_constr;
- 
-   for (gnat_discrim = First_Stored_Discriminant (gnat_type),
-        gnat_constr = First_Elmt (Stored_Constraint (gnat_subtype));
-        Present (gnat_discrim);
-        gnat_discrim = Next_Stored_Discriminant (gnat_discrim),
-        gnat_constr = Next_Elmt (gnat_constr))
-     /* Ignore access discriminants.  */
-     if (!Is_Access_Type (Etype (Node (gnat_constr))))
-       {
- 	tree gnu_field = gnat_to_gnu_field_decl (gnat_discrim);
- 	tree replacement
- 	  = elaborate_expression (Node (gnat_constr), gnat_subtype,
- 				  get_entity_char (gnat_discrim),
- 				  definition, true, false);
- 	/* If this is a definition, we need to make sure that the SAVE_EXPRs
- 	   are instantiated on every possibly path in size computations.  */
- 	if (definition && TREE_CODE (replacement) == SAVE_EXPR)
- 	  add_stmt (replacement);
- 	replacement = convert (TREE_TYPE (gnu_field), replacement);
- 	subst_pair s = { gnu_field, replacement };
- 	gnu_list.safe_push (s);
-       }
- 
-   return gnu_list;
- }
- 
- /* Scan all fields in {GNU_QUAL_UNION_TYPE,GNAT_VARIANT_PART} and return a list
-    describing the variants of GNU_QUAL_UNION_TYPE that are still relevant after
-    applying the substitutions described in SUBST_LIST.  GNU_LIST is an existing
-    list to be prepended to the newly created entries.  */
- 
- static vec<variant_desc>
- build_variant_list (tree gnu_qual_union_type, Node_Id gnat_variant_part,
- 		    vec<subst_pair> subst_list, vec<variant_desc> gnu_list)
- {
-   Node_Id gnat_variant;
-   tree gnu_field;
- 
-   for (gnu_field = TYPE_FIELDS (gnu_qual_union_type),
-        gnat_variant
- 	= Present (gnat_variant_part)
- 	  ? First_Non_Pragma (Variants (gnat_variant_part))
- 	  : Empty;
-        gnu_field;
-        gnu_field = DECL_CHAIN (gnu_field),
-        gnat_variant
- 	= Present (gnat_variant_part)
- 	  ? Next_Non_Pragma (gnat_variant)
- 	  : Empty)
-     {
-       tree qual = DECL_QUALIFIER (gnu_field);
-       unsigned int i;
-       subst_pair *s;
- 
-       FOR_EACH_VEC_ELT (subst_list, i, s)
- 	qual = SUBSTITUTE_IN_EXPR (qual, s->discriminant, s->replacement);
- 
-       /* If the new qualifier is not unconditionally false, its variant may
- 	 still be accessed.  */
-       if (!integer_zerop (qual))
- 	{
- 	  tree variant_type = TREE_TYPE (gnu_field), variant_subpart;
- 	  variant_desc v
- 	    = { variant_type, gnu_field, qual, NULL_TREE, NULL_TREE };
- 
- 	  gnu_list.safe_push (v);
- 
- 	  /* Annotate the GNAT node if present.  */
- 	  if (Present (gnat_variant))
- 	    Set_Present_Expr (gnat_variant, annotate_value (qual));
- 
- 	  /* Recurse on the variant subpart of the variant, if any.  */
- 	  variant_subpart = get_variant_part (variant_type);
- 	  if (variant_subpart)
- 	    gnu_list
- 	      = build_variant_list (TREE_TYPE (variant_subpart),
- 				    Present (gnat_variant)
- 				    ? Variant_Part
- 				      (Component_List (gnat_variant))
- 				    : Empty,
- 				    subst_list,
- 				    gnu_list);
- 
- 	  /* If the new qualifier is unconditionally true, the subsequent
- 	     variants cannot be accessed.  */
- 	  if (integer_onep (qual))
- 	    break;
- 	}
-     }
- 
-   return gnu_list;
- }
- 
- /* If SIZE has overflowed, return the maximum valid size, which is the upper
-    bound of the signed sizetype in bits, rounded down to ALIGN.  Otherwise
-    return SIZE unmodified.  */
- 
- static tree
- maybe_saturate_size (tree size, unsigned int align)
- {
-   if (TREE_CODE (size) == INTEGER_CST && TREE_OVERFLOW (size))
-     {
-       size
- 	= size_binop (MULT_EXPR,
- 		      fold_convert (bitsizetype, TYPE_MAX_VALUE (ssizetype)),
- 		      build_int_cst (bitsizetype, BITS_PER_UNIT));
-       size = round_down (size, align);
-     }
- 
-   return size;
- }
- 
- /* UINT_SIZE is a Uint giving the specified size for an object of GNU_TYPE
-    corresponding to GNAT_OBJECT.  If the size is valid, return an INTEGER_CST
-    corresponding to its value.  Otherwise, return NULL_TREE.  KIND is set to
-    VAR_DECL if we are specifying the size of an object, TYPE_DECL for the
-    size of a type, and FIELD_DECL for the size of a field.  COMPONENT_P is
-    true if we are being called to process the Component_Size of GNAT_OBJECT;
-    this is used only for error messages.  ZERO_OK is true if a size of zero
-    is permitted; if ZERO_OK is false, it means that a size of zero should be
-    treated as an unspecified size.  S1 and S2 are used for error messages.  */
- 
- static tree
- validate_size (Uint uint_size, tree gnu_type, Entity_Id gnat_object,
- 	       enum tree_code kind, bool component_p, bool zero_ok,
- 	       const char *s1, const char *s2)
- {
-   Node_Id gnat_error_node;
-   tree old_size, size;
- 
-   /* Return 0 if no size was specified.  */
-   if (uint_size == No_Uint)
-     return NULL_TREE;
- 
-   /* Ignore a negative size since that corresponds to our back-annotation.  */
-   if (UI_Lt (uint_size, Uint_0))
-     return NULL_TREE;
- 
-   /* Find the node to use for error messages.  */
-   if ((Ekind (gnat_object) == E_Component
-        || Ekind (gnat_object) == E_Discriminant)
-       && Present (Component_Clause (gnat_object)))
-     gnat_error_node = Last_Bit (Component_Clause (gnat_object));
-   else if (Present (Size_Clause (gnat_object)))
-     gnat_error_node = Expression (Size_Clause (gnat_object));
-   else if (Has_Object_Size_Clause (gnat_object))
-     gnat_error_node = Expression (Object_Size_Clause (gnat_object));
-   else
-     gnat_error_node = gnat_object;
- 
-   /* Get the size as an INTEGER_CST.  Issue an error if a size was specified
-      but cannot be represented in bitsizetype.  */
-   size = UI_To_gnu (uint_size, bitsizetype);
-   if (TREE_OVERFLOW (size))
-     {
-       if (component_p)
- 	post_error_ne ("component size for& is too large", gnat_error_node,
- 		       gnat_object);
-       else
- 	post_error_ne ("size for& is too large", gnat_error_node,
- 		       gnat_object);
-       return NULL_TREE;
-     }
- 
-   /* Ignore a zero size if it is not permitted.  */
-   if (!zero_ok && integer_zerop (size))
-     return NULL_TREE;
- 
-   /* The size of objects is always a multiple of a byte.  */
-   if (kind == VAR_DECL
-       && !integer_zerop (size_binop (TRUNC_MOD_EXPR, size, bitsize_unit_node)))
-     {
-       if (component_p)
- 	post_error_ne ("component size for& must be multiple of Storage_Unit",
- 		       gnat_error_node, gnat_object);
-       else
- 	post_error_ne ("size for& must be multiple of Storage_Unit",
- 		       gnat_error_node, gnat_object);
-       return NULL_TREE;
-     }
- 
-   /* If this is an integral type or a bit-packed array type, the front-end has
-      already verified the size, so we need not do it again (which would mean
-      checking against the bounds).  However, if this is an aliased object, it
-      may not be smaller than the type of the object.  */
-   if ((INTEGRAL_TYPE_P (gnu_type) || BIT_PACKED_ARRAY_TYPE_P (gnu_type))
-       && !(kind == VAR_DECL && Is_Aliased (gnat_object)))
-     return size;
- 
-   /* If the object is a record that contains a template, add the size of the
-      template to the specified size.  */
-   if (TREE_CODE (gnu_type) == RECORD_TYPE
-       && TYPE_CONTAINS_TEMPLATE_P (gnu_type))
-     size = size_binop (PLUS_EXPR, DECL_SIZE (TYPE_FIELDS (gnu_type)), size);
- 
-   old_size = (kind == VAR_DECL ? TYPE_SIZE (gnu_type) : rm_size (gnu_type));
- 
-   /* If the old size is self-referential, get the maximum size.  */
-   if (CONTAINS_PLACEHOLDER_P (old_size))
-     old_size = max_size (old_size, true);
- 
-   /* If this is an access type or a fat pointer, the minimum size is that given
-      by the smallest integral mode that's valid for pointers.  */
-   if (TREE_CODE (gnu_type) == POINTER_TYPE || TYPE_IS_FAT_POINTER_P (gnu_type))
-     {
-       scalar_int_mode p_mode = NARROWEST_INT_MODE;
-       while (!targetm.valid_pointer_mode (p_mode))
- 	p_mode = GET_MODE_WIDER_MODE (p_mode).require ();
-       old_size = bitsize_int (GET_MODE_BITSIZE (p_mode));
-     }
- 
-   /* Issue an error either if the default size of the object isn't a constant
-      or if the new size is smaller than it.  */
-   if (TREE_CODE (old_size) != INTEGER_CST
-       || (!TREE_OVERFLOW (old_size) && tree_int_cst_lt (size, old_size)))
-     {
-       char buf[128];
-       const char *s;
- 
-       if (s1 && s2)
- 	{
- 	  snprintf (buf, sizeof (buf), s1, s2);
- 	  s = buf;
- 	}
-       else if (component_p)
- 	s = "component size for& too small{, minimum allowed is ^}";
-       else
- 	s = "size for& too small{, minimum allowed is ^}";
- 
-       post_error_ne_tree (s, gnat_error_node, gnat_object, old_size);
- 
-       return NULL_TREE;
-     }
- 
-   return size;
- }
- 
- /* Similarly, but both validate and process a value of RM size.  This routine
-    is only called for types.  */
- 
- static void
- set_rm_size (Uint uint_size, tree gnu_type, Entity_Id gnat_entity)
- {
-   Node_Id gnat_attr_node;
-   tree old_size, size;
- 
-   /* Do nothing if no size was specified.  */
-   if (uint_size == No_Uint)
-     return;
- 
-   /* Only issue an error if a Value_Size clause was explicitly given for the
-      entity; otherwise, we'd be duplicating an error on the Size clause.  */
-   gnat_attr_node
-     = Get_Attribute_Definition_Clause (gnat_entity, Attr_Value_Size);
-   if (Present (gnat_attr_node) && Entity (gnat_attr_node) != gnat_entity)
-     gnat_attr_node = Empty;
- 
-   /* Get the size as an INTEGER_CST.  Issue an error if a size was specified
-      but cannot be represented in bitsizetype.  */
-   size = UI_To_gnu (uint_size, bitsizetype);
-   if (TREE_OVERFLOW (size))
-     {
-       if (Present (gnat_attr_node))
- 	post_error_ne ("Value_Size for& is too large", gnat_attr_node,
- 		       gnat_entity);
-       return;
-     }
- 
-   /* Ignore a zero size unless a Value_Size clause exists, or a size clause
-      exists, or this is an integer type, in which case the front-end will
-      have always set it.  */
-   if (No (gnat_attr_node)
-       && integer_zerop (size)
-       && !Has_Size_Clause (gnat_entity)
-       && !Is_Discrete_Or_Fixed_Point_Type (gnat_entity))
-     return;
- 
-   old_size = rm_size (gnu_type);
- 
-   /* If the old size is self-referential, get the maximum size.  */
-   if (CONTAINS_PLACEHOLDER_P (old_size))
-     old_size = max_size (old_size, true);
- 
-   /* Issue an error either if the old size of the object isn't a constant or
-      if the new size is smaller than it.  The front-end has already verified
-      this for scalar and bit-packed array types.  */
-   if (TREE_CODE (old_size) != INTEGER_CST
-       || TREE_OVERFLOW (old_size)
-       || (AGGREGATE_TYPE_P (gnu_type)
- 	  && !BIT_PACKED_ARRAY_TYPE_P (gnu_type)
- 	  && !(TYPE_IS_PADDING_P (gnu_type)
- 	       && BIT_PACKED_ARRAY_TYPE_P (TREE_TYPE (TYPE_FIELDS (gnu_type))))
- 	  && tree_int_cst_lt (size, old_size)))
-     {
-       if (Present (gnat_attr_node))
- 	post_error_ne_tree
- 	  ("Value_Size for& too small{, minimum allowed is ^}",
- 	   gnat_attr_node, gnat_entity, old_size);
-       return;
-     }
- 
-   /* Otherwise, set the RM size proper for integral types...  */
-   if ((TREE_CODE (gnu_type) == INTEGER_TYPE
-        && Is_Discrete_Or_Fixed_Point_Type (gnat_entity))
-       || (TREE_CODE (gnu_type) == ENUMERAL_TYPE
- 	  || TREE_CODE (gnu_type) == BOOLEAN_TYPE))
-     SET_TYPE_RM_SIZE (gnu_type, size);
- 
-   /* ...or the Ada size for record and union types.  */
-   else if (RECORD_OR_UNION_TYPE_P (gnu_type)
- 	   && !TYPE_FAT_POINTER_P (gnu_type))
-     SET_TYPE_ADA_SIZE (gnu_type, size);
- }
- 
- /* ALIGNMENT is a Uint giving the alignment specified for GNAT_ENTITY,
-    a type or object whose present alignment is ALIGN.  If this alignment is
-    valid, return it.  Otherwise, give an error and return ALIGN.  */
- 
- static unsigned int
- validate_alignment (Uint alignment, Entity_Id gnat_entity, unsigned int align)
- {
-   unsigned int max_allowed_alignment = get_target_maximum_allowed_alignment ();
-   unsigned int new_align;
-   Node_Id gnat_error_node;
- 
-   /* Don't worry about checking alignment if alignment was not specified
-      by the source program and we already posted an error for this entity.  */
-   if (Error_Posted (gnat_entity) && !Has_Alignment_Clause (gnat_entity))
-     return align;
- 
-   /* Post the error on the alignment clause if any.  Note, for the implicit
-      base type of an array type, the alignment clause is on the first
-      subtype.  */
-   if (Present (Alignment_Clause (gnat_entity)))
-     gnat_error_node = Expression (Alignment_Clause (gnat_entity));
- 
-   else if (Is_Itype (gnat_entity)
-            && Is_Array_Type (gnat_entity)
-            && Etype (gnat_entity) == gnat_entity
-            && Present (Alignment_Clause (First_Subtype (gnat_entity))))
-     gnat_error_node =
-       Expression (Alignment_Clause (First_Subtype (gnat_entity)));
- 
-   else
-     gnat_error_node = gnat_entity;
- 
-   /* Within GCC, an alignment is an integer, so we must make sure a value is
-      specified that fits in that range.  Also, there is an upper bound to
-      alignments we can support/allow.  */
-   if (!UI_Is_In_Int_Range (alignment)
-       || ((new_align = UI_To_Int (alignment)) > max_allowed_alignment))
-     post_error_ne_num ("largest supported alignment for& is ^",
- 		       gnat_error_node, gnat_entity, max_allowed_alignment);
-   else if (!(Present (Alignment_Clause (gnat_entity))
- 	     && From_At_Mod (Alignment_Clause (gnat_entity)))
- 	   && new_align * BITS_PER_UNIT < align)
-     {
-       unsigned int double_align;
-       bool is_capped_double, align_clause;
- 
-       /* If the default alignment of "double" or larger scalar types is
- 	 specifically capped and the new alignment is above the cap, do
- 	 not post an error and change the alignment only if there is an
- 	 alignment clause; this makes it possible to have the associated
- 	 GCC type overaligned by default for performance reasons.  */
-       if ((double_align = double_float_alignment) > 0)
- 	{
- 	  Entity_Id gnat_type
- 	    = Is_Type (gnat_entity) ? gnat_entity : Etype (gnat_entity);
- 	  is_capped_double
- 	    = is_double_float_or_array (gnat_type, &align_clause);
- 	}
-       else if ((double_align = double_scalar_alignment) > 0)
- 	{
- 	  Entity_Id gnat_type
- 	    = Is_Type (gnat_entity) ? gnat_entity : Etype (gnat_entity);
- 	  is_capped_double
- 	    = is_double_scalar_or_array (gnat_type, &align_clause);
- 	}
-       else
- 	is_capped_double = align_clause = false;
- 
-       if (is_capped_double && new_align >= double_align)
- 	{
- 	  if (align_clause)
- 	    align = new_align * BITS_PER_UNIT;
- 	}
-       else
- 	{
- 	  if (is_capped_double)
- 	    align = double_align * BITS_PER_UNIT;
- 
- 	  post_error_ne_num ("alignment for& must be at least ^",
- 			     gnat_error_node, gnat_entity,
- 			     align / BITS_PER_UNIT);
- 	}
-     }
-   else
-     {
-       new_align = (new_align > 0 ? new_align * BITS_PER_UNIT : 1);
-       if (new_align > align)
- 	align = new_align;
-     }
- 
-   return align;
- }
- 
- /* Promote the alignment of GNU_TYPE corresponding to GNAT_ENTITY.  Return
-    a positive value on success or zero on failure.  */
- 
- static unsigned int
- promote_object_alignment (tree gnu_type, Entity_Id gnat_entity)
- {
-   unsigned int align, size_cap, align_cap;
- 
-   /* No point in promoting the alignment if this doesn't prevent BLKmode access
-      to the object, in particular block copy, as this will for example disable
-      the NRV optimization for it.  No point in jumping through all the hoops
-      needed in order to support BIGGEST_ALIGNMENT if we don't really have to.
-      So we cap to the smallest alignment that corresponds to a known efficient
-      memory access pattern, except for a full access entity.  */
-   if (Is_Full_Access (gnat_entity))
-     {
-       size_cap = UINT_MAX;
-       align_cap = BIGGEST_ALIGNMENT;
-     }
-   else
-     {
-       size_cap = MAX_FIXED_MODE_SIZE;
-       align_cap = get_mode_alignment (ptr_mode);
-     }
- 
-   /* Do the promotion within the above limits.  */
-   if (!tree_fits_uhwi_p (TYPE_SIZE (gnu_type))
-       || compare_tree_int (TYPE_SIZE (gnu_type), size_cap) > 0)
-     align = 0;
-   else if (compare_tree_int (TYPE_SIZE (gnu_type), align_cap) > 0)
-     align = align_cap;
-   else
-     align = ceil_pow2 (tree_to_uhwi (TYPE_SIZE (gnu_type)));
- 
-   /* But make sure not to under-align the object.  */
-   if (align <= TYPE_ALIGN (gnu_type))
-     align = 0;
- 
-    /* And honor the minimum valid atomic alignment, if any.  */
- #ifdef MINIMUM_ATOMIC_ALIGNMENT
-   else if (align < MINIMUM_ATOMIC_ALIGNMENT)
-     align = MINIMUM_ATOMIC_ALIGNMENT;
- #endif
- 
-   return align;
- }
- 
- /* Verify that TYPE is something we can implement atomically.  If not, issue
-    an error for GNAT_ENTITY.  COMPONENT_P is true if we are being called to
-    process a component type.  */
- 
- static void
- check_ok_for_atomic_type (tree type, Entity_Id gnat_entity, bool component_p)
- {
-   Node_Id gnat_error_point = gnat_entity;
-   Node_Id gnat_node;
-   machine_mode mode;
-   enum mode_class mclass;
-   unsigned int align;
-   tree size;
- 
-   /* If this is an anonymous base type, nothing to check, the error will be
-      reported on the source type if need be.  */
-   if (!Comes_From_Source (gnat_entity))
-     return;
- 
-   mode = TYPE_MODE (type);
-   mclass = GET_MODE_CLASS (mode);
-   align = TYPE_ALIGN (type);
-   size = TYPE_SIZE (type);
- 
-   /* Consider all aligned floating-point types atomic and any aligned types
-      that are represented by integers no wider than a machine word.  */
-   scalar_int_mode int_mode;
-   if ((mclass == MODE_FLOAT
-        || (is_a <scalar_int_mode> (mode, &int_mode)
- 	   && GET_MODE_BITSIZE (int_mode) <= BITS_PER_WORD))
-       && align >= GET_MODE_ALIGNMENT (mode))
-     return;
- 
-   /* For the moment, also allow anything that has an alignment equal to its
-      size and which is smaller than a word.  */
-   if (size
-       && TREE_CODE (size) == INTEGER_CST
-       && compare_tree_int (size, align) == 0
-       && align <= BITS_PER_WORD)
-     return;
- 
-   for (gnat_node = First_Rep_Item (gnat_entity);
-        Present (gnat_node);
-        gnat_node = Next_Rep_Item (gnat_node))
-     if (Nkind (gnat_node) == N_Pragma)
-       {
- 	unsigned char pragma_id
- 	  = Get_Pragma_Id (Chars (Pragma_Identifier (gnat_node)));
- 
- 	if ((pragma_id == Pragma_Atomic && !component_p)
- 	    || (pragma_id == Pragma_Atomic_Components && component_p))
- 	  {
- 	    gnat_error_point = First (Pragma_Argument_Associations (gnat_node));
- 	    break;
- 	  }
-       }
- 
-   if (component_p)
-     post_error_ne ("atomic access to component of & cannot be guaranteed",
- 		   gnat_error_point, gnat_entity);
-   else if (Is_Volatile_Full_Access (gnat_entity))
-     post_error_ne ("volatile full access to & cannot be guaranteed",
- 		   gnat_error_point, gnat_entity);
-   else
-     post_error_ne ("atomic access to & cannot be guaranteed",
- 		   gnat_error_point, gnat_entity);
- }
- 
- 
- /* Helper for the intrin compatibility checks family.  Evaluate whether
-    two types are definitely incompatible.  */
- 
- static bool
- intrin_types_incompatible_p (tree t1, tree t2)
- {
-   enum tree_code code;
- 
-   if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
-     return false;
- 
-   if (TYPE_MODE (t1) != TYPE_MODE (t2))
-     return true;
- 
-   if (TREE_CODE (t1) != TREE_CODE (t2))
-     return true;
- 
-   code = TREE_CODE (t1);
- 
-   switch (code)
-     {
-     case INTEGER_TYPE:
-     case REAL_TYPE:
-       return TYPE_PRECISION (t1) != TYPE_PRECISION (t2);
- 
-     case POINTER_TYPE:
-     case REFERENCE_TYPE:
-       /* Assume designated types are ok.  We'd need to account for char * and
- 	 void * variants to do better, which could rapidly get messy and isn't
- 	 clearly worth the effort.  */
-       return false;
- 
-     default:
-       break;
-     }
- 
-   return false;
- }
- 
- /* Helper for intrin_profiles_compatible_p, to perform compatibility checks
-    on the Ada/builtin argument lists for the INB binding.  */
- 
- static bool
- intrin_arglists_compatible_p (intrin_binding_t * inb)
- {
-   function_args_iterator ada_iter, btin_iter;
- 
-   function_args_iter_init (&ada_iter, inb->ada_fntype);
-   function_args_iter_init (&btin_iter, inb->btin_fntype);
- 
-   /* Sequence position of the last argument we checked.  */
-   int argpos = 0;
- 
-   while (true)
-     {
-       tree ada_type = function_args_iter_cond (&ada_iter);
-       tree btin_type = function_args_iter_cond (&btin_iter);
- 
-       /* If we've exhausted both lists simultaneously, we're done.  */
-       if (!ada_type && !btin_type)
- 	break;
- 
-       /* If the internal builtin uses a variable list, accept anything.  */
-       if (!btin_type)
- 	break;
- 
-       /* If we're done with the Ada args and not with the internal builtin
- 	 args, or the other way around, complain.  */
-       if (ada_type == void_type_node
- 	  && btin_type != void_type_node)
- 	{
- 	  post_error ("?Ada arguments list too short!", inb->gnat_entity);
- 	  return false;
- 	}
- 
-       if (btin_type == void_type_node
- 	  && ada_type != void_type_node)
- 	{
- 	  post_error_ne_num ("?Ada arguments list too long ('> ^)!",
- 			     inb->gnat_entity, inb->gnat_entity, argpos);
- 	  return false;
- 	}
- 
-       /* Otherwise, check that types match for the current argument.  */
-       argpos ++;
-       if (intrin_types_incompatible_p (ada_type, btin_type))
- 	{
- 	  post_error_ne_num ("?intrinsic binding type mismatch on argument ^!",
- 			     inb->gnat_entity, inb->gnat_entity, argpos);
- 	  return false;
- 	}
- 
- 
-       function_args_iter_next (&ada_iter);
-       function_args_iter_next (&btin_iter);
-     }
- 
-   return true;
- }
- 
- /* Helper for intrin_profiles_compatible_p, to perform compatibility checks
-    on the Ada/builtin return values for the INB binding.  */
- 
- static bool
- intrin_return_compatible_p (intrin_binding_t * inb)
- {
-   tree ada_return_type = TREE_TYPE (inb->ada_fntype);
-   tree btin_return_type = TREE_TYPE (inb->btin_fntype);
- 
-   /* Accept function imported as procedure, common and convenient.  */
-   if (VOID_TYPE_P (ada_return_type)
-       && !VOID_TYPE_P (btin_return_type))
-     return true;
- 
-   /* Check return types compatibility otherwise.  Note that this
-      handles void/void as well.  */
-   if (intrin_types_incompatible_p (btin_return_type, ada_return_type))
-     {
-       post_error ("?intrinsic binding type mismatch on return value!",
- 		  inb->gnat_entity);
-       return false;
-     }
- 
-   return true;
- }
- 
- /* Check and return whether the Ada and gcc builtin profiles bound by INB are
-    compatible.  Issue relevant warnings when they are not.
- 
-    This is intended as a light check to diagnose the most obvious cases, not
-    as a full fledged type compatibility predicate.  It is the programmer's
-    responsibility to ensure correctness of the Ada declarations in Imports,
-    especially when binding straight to a compiler internal.  */
- 
- static bool
- intrin_profiles_compatible_p (intrin_binding_t * inb)
- {
-   /* Check compatibility on return values and argument lists, each responsible
-      for posting warnings as appropriate.  Ensure use of the proper sloc for
-      this purpose.  */
- 
-   bool arglists_compatible_p, return_compatible_p;
-   location_t saved_location = input_location;
- 
-   Sloc_to_locus (Sloc (inb->gnat_entity), &input_location);
- 
-   return_compatible_p = intrin_return_compatible_p (inb);
-   arglists_compatible_p = intrin_arglists_compatible_p (inb);
- 
-   input_location = saved_location;
- 
-   return return_compatible_p && arglists_compatible_p;
- }
- 
- /* Return a FIELD_DECL node modeled on OLD_FIELD.  FIELD_TYPE is its type
-    and RECORD_TYPE is the type of the parent.  If SIZE is nonzero, it is the
-    specified size for this field.  POS_LIST is a position list describing
-    the layout of OLD_FIELD and SUBST_LIST a substitution list to be applied
-    to this layout.  */
- 
- static tree
- create_field_decl_from (tree old_field, tree field_type, tree record_type,
- 			tree size, tree pos_list,
- 			vec<subst_pair> subst_list)
- {
-   tree t = TREE_VALUE (purpose_member (old_field, pos_list));
-   tree pos = TREE_VEC_ELT (t, 0), bitpos = TREE_VEC_ELT (t, 2);
-   unsigned int offset_align = tree_to_uhwi (TREE_VEC_ELT (t, 1));
-   tree new_pos, new_field;
-   unsigned int i;
-   subst_pair *s;
- 
-   if (CONTAINS_PLACEHOLDER_P (pos))
-     FOR_EACH_VEC_ELT (subst_list, i, s)
-       pos = SUBSTITUTE_IN_EXPR (pos, s->discriminant, s->replacement);
- 
-   /* If the position is now a constant, we can set it as the position of the
-      field when we make it.  Otherwise, we need to deal with it specially.  */
-   if (TREE_CONSTANT (pos))
-     new_pos = bit_from_pos (pos, bitpos);
-   else
-     new_pos = NULL_TREE;
- 
-   new_field
-     = create_field_decl (DECL_NAME (old_field), field_type, record_type,
- 			 size, new_pos, DECL_PACKED (old_field),
- 			 !DECL_NONADDRESSABLE_P (old_field));
- 
-   if (!new_pos)
-     {
-       normalize_offset (&pos, &bitpos, offset_align);
-       /* Finalize the position.  */
-       DECL_FIELD_OFFSET (new_field) = variable_size (pos);
-       DECL_FIELD_BIT_OFFSET (new_field) = bitpos;
-       SET_DECL_OFFSET_ALIGN (new_field, offset_align);
-       DECL_SIZE (new_field) = size;
-       DECL_SIZE_UNIT (new_field)
- 	= convert (sizetype,
- 		   size_binop (CEIL_DIV_EXPR, size, bitsize_unit_node));
-       layout_decl (new_field, DECL_OFFSET_ALIGN (new_field));
-     }
- 
-   DECL_INTERNAL_P (new_field) = DECL_INTERNAL_P (old_field);
-   SET_DECL_ORIGINAL_FIELD_TO_FIELD (new_field, old_field);
-   DECL_DISCRIMINANT_NUMBER (new_field) = DECL_DISCRIMINANT_NUMBER (old_field);
-   TREE_THIS_VOLATILE (new_field) = TREE_THIS_VOLATILE (old_field);
- 
-   return new_field;
- }
- 
- /* Create the REP part of RECORD_TYPE with REP_TYPE.  If MIN_SIZE is nonzero,
-    it is the minimal size the REP_PART must have.  */
- 
- static tree
- create_rep_part (tree rep_type, tree record_type, tree min_size)
- {
-   tree field;
- 
-   if (min_size && !tree_int_cst_lt (TYPE_SIZE (rep_type), min_size))
-     min_size = NULL_TREE;
- 
-   field = create_field_decl (get_identifier ("REP"), rep_type, record_type,
- 			     min_size, NULL_TREE, 0, 1);
-   DECL_INTERNAL_P (field) = 1;
- 
-   return field;
- }
- 
- /* Return the REP part of RECORD_TYPE, if any.  Otherwise return NULL.  */
- 
- static tree
- get_rep_part (tree record_type)
- {
-   tree field = TYPE_FIELDS (record_type);
- 
-   /* The REP part is the first field, internal, another record, and its name
-      starts with an 'R'.  */
-   if (field
-       && DECL_INTERNAL_P (field)
-       && TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
-       && IDENTIFIER_POINTER (DECL_NAME (field)) [0] == 'R')
-     return field;
- 
-   return NULL_TREE;
- }
- 
- /* Return the variant part of RECORD_TYPE, if any.  Otherwise return NULL.  */
- 
- tree
- get_variant_part (tree record_type)
- {
-   tree field;
- 
-   /* The variant part is the only internal field that is a qualified union.  */
-   for (field = TYPE_FIELDS (record_type); field; field = DECL_CHAIN (field))
-     if (DECL_INTERNAL_P (field)
- 	&& TREE_CODE (TREE_TYPE (field)) == QUAL_UNION_TYPE)
-       return field;
- 
-   return NULL_TREE;
- }
- 
- /* Return a new variant part modeled on OLD_VARIANT_PART.  VARIANT_LIST is
-    the list of variants to be used and RECORD_TYPE is the type of the parent.
-    POS_LIST is a position list describing the layout of fields present in
-    OLD_VARIANT_PART and SUBST_LIST a substitution list to be applied to this
-    layout.  DEBUG_INFO_P is true if we need to write debug information.  */
- 
- static tree
- create_variant_part_from (tree old_variant_part,
- 			  vec<variant_desc> variant_list,
- 			  tree record_type, tree pos_list,
- 			  vec<subst_pair> subst_list,
- 			  bool debug_info_p)
- {
-   tree offset = DECL_FIELD_OFFSET (old_variant_part);
-   tree old_union_type = TREE_TYPE (old_variant_part);
-   tree new_union_type, new_variant_part;
-   tree union_field_list = NULL_TREE;
-   variant_desc *v;
-   unsigned int i;
- 
-   /* First create the type of the variant part from that of the old one.  */
-   new_union_type = make_node (QUAL_UNION_TYPE);
-   TYPE_NAME (new_union_type)
-     = concat_name (TYPE_NAME (record_type),
- 		   IDENTIFIER_POINTER (DECL_NAME (old_variant_part)));
- 
-   /* If the position of the variant part is constant, subtract it from the
-      size of the type of the parent to get the new size.  This manual CSE
-      reduces the code size when not optimizing.  */
-   if (TREE_CODE (offset) == INTEGER_CST
-       && TYPE_SIZE (record_type)
-       && TYPE_SIZE_UNIT (record_type))
-     {
-       tree bitpos = DECL_FIELD_BIT_OFFSET (old_variant_part);
-       tree first_bit = bit_from_pos (offset, bitpos);
-       TYPE_SIZE (new_union_type)
- 	= size_binop (MINUS_EXPR, TYPE_SIZE (record_type), first_bit);
-       TYPE_SIZE_UNIT (new_union_type)
- 	= size_binop (MINUS_EXPR, TYPE_SIZE_UNIT (record_type),
- 		      byte_from_pos (offset, bitpos));
-       SET_TYPE_ADA_SIZE (new_union_type,
- 			 size_binop (MINUS_EXPR, TYPE_ADA_SIZE (record_type),
-  				     first_bit));
-       SET_TYPE_ALIGN (new_union_type, TYPE_ALIGN (old_union_type));
-       relate_alias_sets (new_union_type, old_union_type, ALIAS_SET_COPY);
-     }
-   else
-     copy_and_substitute_in_size (new_union_type, old_union_type, subst_list);
- 
-   /* Now finish up the new variants and populate the union type.  */
-   FOR_EACH_VEC_ELT_REVERSE (variant_list, i, v)
-     {
-       tree old_field = v->field, new_field;
-       tree old_variant, old_variant_subpart, new_variant, field_list;
- 
-       /* Skip variants that don't belong to this nesting level.  */
-       if (DECL_CONTEXT (old_field) != old_union_type)
- 	continue;
- 
-       /* Retrieve the list of fields already added to the new variant.  */
-       new_variant = v->new_type;
-       field_list = TYPE_FIELDS (new_variant);
- 
-       /* If the old variant had a variant subpart, we need to create a new
- 	 variant subpart and add it to the field list.  */
-       old_variant = v->type;
-       old_variant_subpart = get_variant_part (old_variant);
-       if (old_variant_subpart)
- 	{
- 	  tree new_variant_subpart
- 	    = create_variant_part_from (old_variant_subpart, variant_list,
- 					new_variant, pos_list, subst_list,
- 					debug_info_p);
- 	  DECL_CHAIN (new_variant_subpart) = field_list;
- 	  field_list = new_variant_subpart;
- 	}
- 
-       /* Finish up the new variant and create the field.  */
-       finish_record_type (new_variant, nreverse (field_list), 2, debug_info_p);
-       create_type_decl (TYPE_NAME (new_variant), new_variant, true,
- 			debug_info_p, Empty);
- 
-       new_field
- 	= create_field_decl_from (old_field, new_variant, new_union_type,
- 				  TYPE_SIZE (new_variant),
- 				  pos_list, subst_list);
-       DECL_QUALIFIER (new_field) = v->qual;
-       DECL_INTERNAL_P (new_field) = 1;
-       DECL_CHAIN (new_field) = union_field_list;
-       union_field_list = new_field;
-     }
- 
-   /* Finish up the union type and create the variant part.  Note that we don't
-      reverse the field list because VARIANT_LIST has been traversed in reverse
-      order.  */
-   finish_record_type (new_union_type, union_field_list, 2, debug_info_p);
-   create_type_decl (TYPE_NAME (new_union_type), new_union_type, true,
- 		    debug_info_p, Empty);
- 
-   new_variant_part
-     = create_field_decl_from (old_variant_part, new_union_type, record_type,
- 			      TYPE_SIZE (new_union_type),
- 			      pos_list, subst_list);
-   DECL_INTERNAL_P (new_variant_part) = 1;
- 
-   /* With multiple discriminants it is possible for an inner variant to be
-      statically selected while outer ones are not; in this case, the list
-      of fields of the inner variant is not flattened and we end up with a
-      qualified union with a single member.  Drop the useless container.  */
-   if (!DECL_CHAIN (union_field_list))
-     {
-       DECL_CONTEXT (union_field_list) = record_type;
-       DECL_FIELD_OFFSET (union_field_list)
- 	= DECL_FIELD_OFFSET (new_variant_part);
-       DECL_FIELD_BIT_OFFSET (union_field_list)
- 	= DECL_FIELD_BIT_OFFSET (new_variant_part);
-       SET_DECL_OFFSET_ALIGN (union_field_list,
- 			     DECL_OFFSET_ALIGN (new_variant_part));
-       new_variant_part = union_field_list;
-     }
- 
-   return new_variant_part;
- }
- 
- /* Copy the size (and alignment and alias set) from OLD_TYPE to NEW_TYPE,
-    which are both RECORD_TYPE, after applying the substitutions described
-    in SUBST_LIST.  */
- 
- static void
- copy_and_substitute_in_size (tree new_type, tree old_type,
- 			     vec<subst_pair> subst_list)
- {
-   unsigned int i;
-   subst_pair *s;
- 
-   TYPE_SIZE (new_type) = TYPE_SIZE (old_type);
-   TYPE_SIZE_UNIT (new_type) = TYPE_SIZE_UNIT (old_type);
-   SET_TYPE_ADA_SIZE (new_type, TYPE_ADA_SIZE (old_type));
-   SET_TYPE_ALIGN (new_type, TYPE_ALIGN (old_type));
-   relate_alias_sets (new_type, old_type, ALIAS_SET_COPY);
- 
-   if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (new_type)))
-     FOR_EACH_VEC_ELT (subst_list, i, s)
-       TYPE_SIZE (new_type)
- 	= SUBSTITUTE_IN_EXPR (TYPE_SIZE (new_type),
- 			      s->discriminant, s->replacement);
- 
-   if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (new_type)))
-     FOR_EACH_VEC_ELT (subst_list, i, s)
-       TYPE_SIZE_UNIT (new_type)
- 	= SUBSTITUTE_IN_EXPR (TYPE_SIZE_UNIT (new_type),
- 			      s->discriminant, s->replacement);
- 
-   if (CONTAINS_PLACEHOLDER_P (TYPE_ADA_SIZE (new_type)))
-     FOR_EACH_VEC_ELT (subst_list, i, s)
-       SET_TYPE_ADA_SIZE
- 	(new_type, SUBSTITUTE_IN_EXPR (TYPE_ADA_SIZE (new_type),
- 				       s->discriminant, s->replacement));
- 
-   /* Finalize the size.  */
-   TYPE_SIZE (new_type) = variable_size (TYPE_SIZE (new_type));
-   TYPE_SIZE_UNIT (new_type) = variable_size (TYPE_SIZE_UNIT (new_type));
- }
- 
- /* Return true if DISC is a stored discriminant of RECORD_TYPE.  */
- 
- static inline bool
- is_stored_discriminant (Entity_Id discr, Entity_Id record_type)
- {
-   if (Is_Unchecked_Union (record_type))
-     return false;
-   else if (Is_Tagged_Type (record_type))
-     return No (Corresponding_Discriminant (discr));
-   else if (Ekind (record_type) == E_Record_Type)
-     return Original_Record_Component (discr) == discr;
-   else
-     return true;
- }
- 
- /* Copy the layout from {GNAT,GNU}_OLD_TYPE to {GNAT,GNU}_NEW_TYPE, which are
-    both record types, after applying the substitutions described in SUBST_LIST.
-    DEBUG_INFO_P is true if we need to write debug information for NEW_TYPE.  */
- 
- static void
- copy_and_substitute_in_layout (Entity_Id gnat_new_type,
- 			       Entity_Id gnat_old_type,
- 			       tree gnu_new_type,
- 			       tree gnu_old_type,
- 			       vec<subst_pair> subst_list,
- 			       bool debug_info_p)
- {
-   const bool is_subtype = (Ekind (gnat_new_type) == E_Record_Subtype);
-   tree gnu_field_list = NULL_TREE;
-   tree gnu_variable_field_list = NULL_TREE;
-   bool selected_variant;
-   vec<variant_desc> gnu_variant_list;
- 
-   /* Look for REP and variant parts in the old type.  */
-   tree gnu_rep_part = get_rep_part (gnu_old_type);
-   tree gnu_variant_part = get_variant_part (gnu_old_type);
- 
-   /* If there is a variant part, we must compute whether the constraints
-      statically select a particular variant.  If so, we simply drop the
-      qualified union and flatten the list of fields.  Otherwise we will
-      build a new qualified union for the variants that are still relevant.  */
-   if (gnu_variant_part)
-     {
-       const Node_Id gnat_decl = Declaration_Node (gnat_new_type);
-       variant_desc *v;
-       unsigned int i;
- 
-       gnu_variant_list
- 	= build_variant_list (TREE_TYPE (gnu_variant_part),
- 			      is_subtype
- 			      ? Empty
- 			      : Variant_Part
- 				(Component_List (Type_Definition (gnat_decl))),
- 			      subst_list,
- 			      vNULL);
- 
-       /* If all the qualifiers are unconditionally true, the innermost variant
- 	 is statically selected.  */
-       selected_variant = true;
-       FOR_EACH_VEC_ELT (gnu_variant_list, i, v)
- 	if (!integer_onep (v->qual))
- 	  {
- 	    selected_variant = false;
- 	    break;
- 	  }
- 
-       /* Otherwise, create the new variants.  */
-       if (!selected_variant)
- 	FOR_EACH_VEC_ELT (gnu_variant_list, i, v)
- 	  {
- 	    tree old_variant = v->type;
- 	    tree new_variant = make_node (RECORD_TYPE);
- 	    tree suffix
- 	      = concat_name (DECL_NAME (gnu_variant_part),
- 			     IDENTIFIER_POINTER (DECL_NAME (v->field)));
- 	    TYPE_NAME (new_variant)
- 	      = concat_name (TYPE_NAME (gnu_new_type),
- 			     IDENTIFIER_POINTER (suffix));
- 	    TYPE_REVERSE_STORAGE_ORDER (new_variant)
- 	      = TYPE_REVERSE_STORAGE_ORDER (gnu_new_type);
- 	    copy_and_substitute_in_size (new_variant, old_variant, subst_list);
- 	    v->new_type = new_variant;
- 	  }
-     }
-   else
-     {
-       gnu_variant_list.create (0);
-       selected_variant = false;
-     }
- 
-   /* Make a list of fields and their position in the old type.  */
-   tree gnu_pos_list
-     = build_position_list (gnu_old_type,
- 			   gnu_variant_list.exists () && !selected_variant,
- 			   size_zero_node, bitsize_zero_node,
- 			   BIGGEST_ALIGNMENT, NULL_TREE);
- 
-   /* Now go down every component in the new type and compute its size and
-      position from those of the component in the old type and the stored
-      constraints of the new type.  */
-   Entity_Id gnat_field, gnat_old_field;
-   for (gnat_field = First_Entity (gnat_new_type);
-        Present (gnat_field);
-        gnat_field = Next_Entity (gnat_field))
-     if ((Ekind (gnat_field) == E_Component
- 	 || (Ekind (gnat_field) == E_Discriminant
- 	     && is_stored_discriminant (gnat_field, gnat_new_type)))
-         && (gnat_old_field = is_subtype
- 			     ? Original_Record_Component (gnat_field)
- 			     : Corresponding_Record_Component (gnat_field))
- 	&& Underlying_Type (Scope (gnat_old_field)) == gnat_old_type
- 	&& present_gnu_tree (gnat_old_field))
-       {
- 	Name_Id gnat_name = Chars (gnat_field);
- 	tree gnu_old_field = get_gnu_tree (gnat_old_field);
- 	if (TREE_CODE (gnu_old_field) == COMPONENT_REF)
- 	  gnu_old_field = TREE_OPERAND (gnu_old_field, 1);
-         tree gnu_context = DECL_CONTEXT (gnu_old_field);
- 	tree gnu_field, gnu_field_type, gnu_size, gnu_pos;
- 	tree gnu_cont_type, gnu_last = NULL_TREE;
- 	variant_desc *v = NULL;
- 
- 	/* If the type is the same, retrieve the GCC type from the
- 	   old field to take into account possible adjustments.  */
- 	if (Etype (gnat_field) == Etype (gnat_old_field))
- 	  gnu_field_type = TREE_TYPE (gnu_old_field);
- 	else
- 	  gnu_field_type = gnat_to_gnu_type (Etype (gnat_field));
- 
- 	/* If there was a component clause, the field types must be the same
- 	   for the old and new types, so copy the data from the old field to
- 	   avoid recomputation here.  Also if the field is justified modular
- 	   and the optimization in gnat_to_gnu_field was applied.  */
- 	if (Present (Component_Clause (gnat_old_field))
- 	    || (TREE_CODE (gnu_field_type) == RECORD_TYPE
- 		&& TYPE_JUSTIFIED_MODULAR_P (gnu_field_type)
- 		&& TREE_TYPE (TYPE_FIELDS (gnu_field_type))
- 		   == TREE_TYPE (gnu_old_field)))
- 	  {
- 	    gnu_size = DECL_SIZE (gnu_old_field);
- 	    gnu_field_type = TREE_TYPE (gnu_old_field);
- 	  }
- 
- 	/* If the old field was packed and of constant size, we have to get the
- 	   old size here as it might differ from what the Etype conveys and the
- 	   latter might overlap with the following field.  Try to arrange the
- 	   type for possible better packing along the way.  */
- 	else if (DECL_PACKED (gnu_old_field)
- 		 && TREE_CODE (DECL_SIZE (gnu_old_field)) == INTEGER_CST)
- 	  {
- 	    gnu_size = DECL_SIZE (gnu_old_field);
- 	    if (RECORD_OR_UNION_TYPE_P (gnu_field_type)
- 		&& !TYPE_FAT_POINTER_P (gnu_field_type)
- 		&& tree_fits_uhwi_p (TYPE_SIZE (gnu_field_type)))
- 	      gnu_field_type = make_packable_type (gnu_field_type, true, 0);
- 	  }
- 
- 	else
- 	  gnu_size = TYPE_SIZE (gnu_field_type);
- 
- 	/* If the context of the old field is the old type or its REP part,
- 	   put the field directly in the new type; otherwise look up the
- 	   context in the variant list and put the field either in the new
- 	   type if there is a selected variant or in one new variant.  */
- 	if (gnu_context == gnu_old_type
- 	    || (gnu_rep_part && gnu_context == TREE_TYPE (gnu_rep_part)))
- 	  gnu_cont_type = gnu_new_type;
- 	else
- 	  {
- 	    unsigned int i;
- 	    tree rep_part;
- 
- 	    FOR_EACH_VEC_ELT (gnu_variant_list, i, v)
- 	      if (gnu_context == v->type
- 		  || ((rep_part = get_rep_part (v->type))
- 		      && gnu_context == TREE_TYPE (rep_part)))
- 		break;
- 
- 	    if (v)
- 	      gnu_cont_type = selected_variant ? gnu_new_type : v->new_type;
- 	    else
- 	      /* The front-end may pass us zombie components if it fails to
- 		 recognize that a constrain statically selects a particular
- 		 variant.  Discard them.  */
- 	      continue;
- 	  }
- 
- 	/* Now create the new field modeled on the old one.  */
- 	gnu_field
- 	  = create_field_decl_from (gnu_old_field, gnu_field_type,
- 				    gnu_cont_type, gnu_size,
- 				    gnu_pos_list, subst_list);
- 	gnu_pos = DECL_FIELD_OFFSET (gnu_field);
- 
- 	/* If the context is a variant, put it in the new variant directly.  */
- 	if (gnu_cont_type != gnu_new_type)
- 	  {
- 	    if (TREE_CODE (gnu_pos) == INTEGER_CST)
- 	      {
- 		DECL_CHAIN (gnu_field) = TYPE_FIELDS (gnu_cont_type);
- 		TYPE_FIELDS (gnu_cont_type) = gnu_field;
- 	      }
- 	    else
- 	      {
- 		DECL_CHAIN (gnu_field) = v->aux;
- 		v->aux = gnu_field;
- 	      }
- 	  }
- 
- 	/* To match the layout crafted in components_to_record, if this is
- 	   the _Tag or _Parent field, put it before any other fields.  */
- 	else if (gnat_name == Name_uTag || gnat_name == Name_uParent)
- 	  gnu_field_list = chainon (gnu_field_list, gnu_field);
- 
- 	/* Similarly, if this is the _Controller field, put it before the
- 	   other fields except for the _Tag or _Parent field.  */
- 	else if (gnat_name == Name_uController && gnu_last)
- 	  {
- 	    DECL_CHAIN (gnu_field) = DECL_CHAIN (gnu_last);
- 	    DECL_CHAIN (gnu_last) = gnu_field;
- 	  }
- 
- 	/* Otherwise, put it after the other fields.  */
- 	else
- 	  {
- 	    if (TREE_CODE (gnu_pos) == INTEGER_CST)
- 	      {
- 		DECL_CHAIN (gnu_field) = gnu_field_list;
- 		gnu_field_list = gnu_field;
- 		if (!gnu_last)
- 		  gnu_last = gnu_field;
- 	      }
- 	    else
- 	      {
- 		DECL_CHAIN (gnu_field) = gnu_variable_field_list;
- 		gnu_variable_field_list = gnu_field;
- 	      }
- 	  }
- 
- 	/* For a stored discriminant in a derived type, replace the field.  */
- 	if (!is_subtype && Ekind (gnat_field) == E_Discriminant)
- 	  {
- 	    tree gnu_ref = get_gnu_tree (gnat_field);
- 	    TREE_OPERAND (gnu_ref, 1) = gnu_field;
- 	  }
- 	else
- 	  save_gnu_tree (gnat_field, gnu_field, false);
-       }
- 
-   /* Put the fields with fixed position in order of increasing position.  */
-   if (gnu_field_list)
-     gnu_field_list = reverse_sort_field_list (gnu_field_list);
- 
-   /* Put the fields with variable position at the end.  */
-   if (gnu_variable_field_list)
-     gnu_field_list = chainon (gnu_variable_field_list, gnu_field_list);
- 
-   /* If there is a variant list and no selected variant, we need to create the
-      nest of variant parts from the old nest.  */
-   if (gnu_variant_list.exists () && !selected_variant)
-     {
-       variant_desc *v;
-       unsigned int i;
- 
-       /* Same processing as above for the fields of each variant.  */
-       FOR_EACH_VEC_ELT (gnu_variant_list, i, v)
- 	{
- 	  if (TYPE_FIELDS (v->new_type))
- 	    TYPE_FIELDS (v->new_type)
- 	      = reverse_sort_field_list (TYPE_FIELDS (v->new_type));
- 	  if (v->aux)
- 	    TYPE_FIELDS (v->new_type)
- 	      = chainon (v->aux, TYPE_FIELDS (v->new_type));
- 	}
- 
-       tree new_variant_part
- 	= create_variant_part_from (gnu_variant_part, gnu_variant_list,
- 				    gnu_new_type, gnu_pos_list,
- 				    subst_list, debug_info_p);
-       DECL_CHAIN (new_variant_part) = gnu_field_list;
-       gnu_field_list = new_variant_part;
-     }
- 
-   gnu_variant_list.release ();
-   subst_list.release ();
- 
-   /* If NEW_TYPE is a subtype, it inherits all the attributes from OLD_TYPE.
-      Otherwise sizes and alignment must be computed independently.  */
-   finish_record_type (gnu_new_type, nreverse (gnu_field_list),
- 		      is_subtype ? 2 : 1, debug_info_p);
- 
-   /* Now go through the entities again looking for itypes that we have not yet
-      elaborated (e.g. Etypes of fields that have Original_Components).  */
-   for (Entity_Id gnat_field = First_Entity (gnat_new_type);
-        Present (gnat_field);
-        gnat_field = Next_Entity (gnat_field))
-     if ((Ekind (gnat_field) == E_Component
- 	 || Ekind (gnat_field) == E_Discriminant)
- 	&& Is_Itype (Etype (gnat_field))
- 	&& !present_gnu_tree (Etype (gnat_field)))
-       gnat_to_gnu_entity (Etype (gnat_field), NULL_TREE, false);
- }
- 
- /* Associate to the implementation type of a packed array type specified by
-    GNU_TYPE, which is the translation of GNAT_ENTITY, the original array type
-    if it has been translated.  This association is a parallel type for GNAT
-    encodings or a debug type for standard DWARF.  Note that for standard DWARF,
-    we also want to get the original type name and therefore we return it.  */
- 
- static tree
- associate_original_type_to_packed_array (tree gnu_type, Entity_Id gnat_entity)
- {
-   const Entity_Id gnat_original_array_type
-     = Underlying_Type (Original_Array_Type (gnat_entity));
-   tree gnu_original_array_type;
- 
-   if (!present_gnu_tree (gnat_original_array_type))
-     return NULL_TREE;
- 
-   gnu_original_array_type = gnat_to_gnu_type (gnat_original_array_type);
- 
-   if (TYPE_IS_DUMMY_P (gnu_original_array_type))
-     return NULL_TREE;
- 
-   gcc_assert (TYPE_IMPL_PACKED_ARRAY_P (gnu_type));
- 
-   if (gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
-     {
-       SET_TYPE_ORIGINAL_PACKED_ARRAY (gnu_type, gnu_original_array_type);
- 
-       tree original_name = TYPE_NAME (gnu_original_array_type);
-       if (TREE_CODE (original_name) == TYPE_DECL)
- 	original_name = DECL_NAME (original_name);
-       return original_name;
-     }
-   else
-     {
-       add_parallel_type (gnu_type, gnu_original_array_type);
-       return NULL_TREE;
-     }
- }
- 
- /* Given a type T, a FIELD_DECL F, and a replacement value R, return an
-    equivalent type with adjusted size expressions where all occurrences
-    of references to F in a PLACEHOLDER_EXPR have been replaced by R.
- 
-    The function doesn't update the layout of the type, i.e. it assumes
-    that the substitution is purely formal.  That's why the replacement
-    value R must itself contain a PLACEHOLDER_EXPR.  */
- 
- tree
- substitute_in_type (tree t, tree f, tree r)
- {
-   tree nt;
- 
-   gcc_assert (CONTAINS_PLACEHOLDER_P (r));
- 
-   switch (TREE_CODE (t))
-     {
-     case INTEGER_TYPE:
-     case ENUMERAL_TYPE:
-     case BOOLEAN_TYPE:
-     case REAL_TYPE:
- 
-       /* First the domain types of arrays.  */
-       if (CONTAINS_PLACEHOLDER_P (TYPE_GCC_MIN_VALUE (t))
- 	  || CONTAINS_PLACEHOLDER_P (TYPE_GCC_MAX_VALUE (t)))
- 	{
- 	  tree low = SUBSTITUTE_IN_EXPR (TYPE_GCC_MIN_VALUE (t), f, r);
- 	  tree high = SUBSTITUTE_IN_EXPR (TYPE_GCC_MAX_VALUE (t), f, r);
- 
- 	  if (low == TYPE_GCC_MIN_VALUE (t) && high == TYPE_GCC_MAX_VALUE (t))
- 	    return t;
- 
- 	  nt = copy_type (t);
- 	  TYPE_GCC_MIN_VALUE (nt) = low;
- 	  TYPE_GCC_MAX_VALUE (nt) = high;
- 
- 	  if (TREE_CODE (t) == INTEGER_TYPE && TYPE_INDEX_TYPE (t))
- 	    SET_TYPE_INDEX_TYPE
- 	      (nt, substitute_in_type (TYPE_INDEX_TYPE (t), f, r));
- 
- 	  return nt;
- 	}
- 
-       /* Then the subtypes.  */
-       if (CONTAINS_PLACEHOLDER_P (TYPE_RM_MIN_VALUE (t))
- 	  || CONTAINS_PLACEHOLDER_P (TYPE_RM_MAX_VALUE (t)))
- 	{
- 	  tree low = SUBSTITUTE_IN_EXPR (TYPE_RM_MIN_VALUE (t), f, r);
- 	  tree high = SUBSTITUTE_IN_EXPR (TYPE_RM_MAX_VALUE (t), f, r);
- 
- 	  if (low == TYPE_RM_MIN_VALUE (t) && high == TYPE_RM_MAX_VALUE (t))
- 	    return t;
- 
- 	  nt = copy_type (t);
- 	  SET_TYPE_RM_MIN_VALUE (nt, low);
- 	  SET_TYPE_RM_MAX_VALUE (nt, high);
- 
- 	  return nt;
- 	}
- 
-       return t;
- 
-     case COMPLEX_TYPE:
-       nt = substitute_in_type (TREE_TYPE (t), f, r);
-       if (nt == TREE_TYPE (t))
- 	return t;
- 
-       return build_complex_type (nt);
- 
-     case FUNCTION_TYPE:
-     case METHOD_TYPE:
-       /* These should never show up here.  */
-       gcc_unreachable ();
- 
-     case ARRAY_TYPE:
-       {
- 	tree component = substitute_in_type (TREE_TYPE (t), f, r);
- 	tree domain = substitute_in_type (TYPE_DOMAIN (t), f, r);
- 
- 	if (component == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
- 	  return t;
- 
- 	nt = build_nonshared_array_type (component, domain);
- 	SET_TYPE_ALIGN (nt, TYPE_ALIGN (t));
- 	TYPE_USER_ALIGN (nt) = TYPE_USER_ALIGN (t);
- 	SET_TYPE_MODE (nt, TYPE_MODE (t));
- 	TYPE_SIZE (nt) = SUBSTITUTE_IN_EXPR (TYPE_SIZE (t), f, r);
- 	TYPE_SIZE_UNIT (nt) = SUBSTITUTE_IN_EXPR (TYPE_SIZE_UNIT (t), f, r);
- 	TYPE_MULTI_ARRAY_P (nt) = TYPE_MULTI_ARRAY_P (t);
- 	TYPE_CONVENTION_FORTRAN_P (nt) = TYPE_CONVENTION_FORTRAN_P (t);
- 	if (TYPE_REVERSE_STORAGE_ORDER (t))
- 	  set_reverse_storage_order_on_array_type (nt);
- 	if (TYPE_NONALIASED_COMPONENT (t))
- 	  set_nonaliased_component_on_array_type (nt);
- 	return nt;
-       }
- 
-     case RECORD_TYPE:
-     case UNION_TYPE:
-     case QUAL_UNION_TYPE:
-       {
- 	bool changed_field = false;
- 	tree field;
- 
- 	/* Start out with no fields, make new fields, and chain them
- 	   in.  If we haven't actually changed the type of any field,
- 	   discard everything we've done and return the old type.  */
- 	nt = copy_type (t);
- 	TYPE_FIELDS (nt) = NULL_TREE;
- 
- 	for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
- 	  {
- 	    tree new_field = copy_node (field), new_n;
- 
- 	    new_n = substitute_in_type (TREE_TYPE (field), f, r);
- 	    if (new_n != TREE_TYPE (field))
- 	      {
- 		TREE_TYPE (new_field) = new_n;
- 		changed_field = true;
- 	      }
- 
- 	    new_n = SUBSTITUTE_IN_EXPR (DECL_FIELD_OFFSET (field), f, r);
- 	    if (new_n != DECL_FIELD_OFFSET (field))
- 	      {
- 		DECL_FIELD_OFFSET (new_field) = new_n;
- 		changed_field = true;
- 	      }
- 
- 	    /* Do the substitution inside the qualifier, if any.  */
- 	    if (TREE_CODE (t) == QUAL_UNION_TYPE)
- 	      {
- 		new_n = SUBSTITUTE_IN_EXPR (DECL_QUALIFIER (field), f, r);
- 		if (new_n != DECL_QUALIFIER (field))
- 		  {
- 		    DECL_QUALIFIER (new_field) = new_n;
- 		    changed_field = true;
- 		  }
- 	      }
- 
- 	    DECL_CONTEXT (new_field) = nt;
- 	    SET_DECL_ORIGINAL_FIELD_TO_FIELD (new_field, field);
- 
- 	    DECL_CHAIN (new_field) = TYPE_FIELDS (nt);
- 	    TYPE_FIELDS (nt) = new_field;
- 	  }
- 
- 	if (!changed_field)
- 	  return t;
- 
- 	TYPE_FIELDS (nt) = nreverse (TYPE_FIELDS (nt));
- 	TYPE_SIZE (nt) = SUBSTITUTE_IN_EXPR (TYPE_SIZE (t), f, r);
- 	TYPE_SIZE_UNIT (nt) = SUBSTITUTE_IN_EXPR (TYPE_SIZE_UNIT (t), f, r);
- 	SET_TYPE_ADA_SIZE (nt, SUBSTITUTE_IN_EXPR (TYPE_ADA_SIZE (t), f, r));
- 	return nt;
-       }
- 
-     default:
-       return t;
-     }
- }
- 
- /* Return the RM size of GNU_TYPE.  This is the actual number of bits
-    needed to represent the object.  */
- 
- tree
- rm_size (tree gnu_type)
- {
-   /* For integral types, we store the RM size explicitly.  */
-   if (INTEGRAL_TYPE_P (gnu_type) && TYPE_RM_SIZE (gnu_type))
-     return TYPE_RM_SIZE (gnu_type);
- 
-   /* If the type contains a template, return the padded size of the template
-      plus the RM size of the actual data.  */
-   if (TREE_CODE (gnu_type) == RECORD_TYPE
-       && TYPE_CONTAINS_TEMPLATE_P (gnu_type))
-     return
-       size_binop (PLUS_EXPR,
- 		  bit_position (DECL_CHAIN (TYPE_FIELDS (gnu_type))),
- 		  rm_size (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (gnu_type)))));
- 
-   /* For record or union types, we store the size explicitly.  */
-   if (RECORD_OR_UNION_TYPE_P (gnu_type)
-       && !TYPE_FAT_POINTER_P (gnu_type)
-       && TYPE_ADA_SIZE (gnu_type))
-     return TYPE_ADA_SIZE (gnu_type);
- 
-   /* For other types, this is just the size.  */
-   return TYPE_SIZE (gnu_type);
- }
- 
- /* Return the name to be used for GNAT_ENTITY.  If a type, create a
-    fully-qualified name, possibly with type information encoding.
-    Otherwise, return the name.  */
- 
- static const char *
- get_entity_char (Entity_Id gnat_entity)
- {
-   Get_Encoded_Name (gnat_entity);
-   return ggc_strdup (Name_Buffer);
- }
- 
- tree
- get_entity_name (Entity_Id gnat_entity)
- {
-   Get_Encoded_Name (gnat_entity);
-   return get_identifier_with_length (Name_Buffer, Name_Len);
- }
- 
- /* Return an identifier representing the external name to be used for
-    GNAT_ENTITY.  If SUFFIX is specified, the name is followed by "___"
-    and the specified suffix.  */
- 
- tree
- create_concat_name (Entity_Id gnat_entity, const char *suffix)
- {
-   const Entity_Kind kind = Ekind (gnat_entity);
-   const bool has_suffix = (suffix != NULL);
-   String_Template temp = {1, has_suffix ? (int) strlen (suffix) : 0};
-   String_Pointer sp = {suffix, &temp};
- 
-   Get_External_Name (gnat_entity, has_suffix, sp);
- 
-   /* A variable using the Stdcall convention lives in a DLL.  We adjust
-      its name to use the jump table, the _imp__NAME contains the address
-      for the NAME variable.  */
-   if ((kind == E_Variable || kind == E_Constant)
-       && Has_Stdcall_Convention (gnat_entity))
-     {
-       const int len = strlen (STDCALL_PREFIX) + Name_Len;
-       char *new_name = (char *) alloca (len + 1);
-       strcpy (new_name, STDCALL_PREFIX);
-       strcat (new_name, Name_Buffer);
-       return get_identifier_with_length (new_name, len);
-     }
- 
-   return get_identifier_with_length (Name_Buffer, Name_Len);
- }
- 
- /* Given GNU_NAME, an IDENTIFIER_NODE containing a name and SUFFIX, a
-    string, return a new IDENTIFIER_NODE that is the concatenation of
-    the name followed by "___" and the specified suffix.  */
- 
- tree
- concat_name (tree gnu_name, const char *suffix)
- {
-   const int len = IDENTIFIER_LENGTH (gnu_name) + 3 + strlen (suffix);
-   char *new_name = (char *) alloca (len + 1);
-   strcpy (new_name, IDENTIFIER_POINTER (gnu_name));
-   strcat (new_name, "___");
-   strcat (new_name, suffix);
-   return get_identifier_with_length (new_name, len);
- }
- 
- /* Initialize the data structures of the decl.c module.  */
- 
- void
- init_gnat_decl (void)
- {
-   /* Initialize the cache of annotated values.  */
-   annotate_value_cache = hash_table<value_annotation_hasher>::create_ggc (512);
- 
-   /* Initialize the association of dummy types with subprograms.  */
-   dummy_to_subprog_map = hash_table<dummy_type_hasher>::create_ggc (512);
- }
- 
- /* Destroy the data structures of the decl.c module.  */
- 
- void
- destroy_gnat_decl (void)
- {
-   /* Destroy the cache of annotated values.  */
-   annotate_value_cache->empty ();
-   annotate_value_cache = NULL;
- 
-   /* Destroy the association of dummy types with subprograms.  */
-   dummy_to_subprog_map->empty ();
-   dummy_to_subprog_map = NULL;
- }
- 
- #include "gt-ada-decl.h"
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/decl.cc gcc-12.1.0/gcc/ada/gcc-interface/decl.cc
*** gcc-11.3.0/gcc/ada/gcc-interface/decl.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gcc-interface/decl.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,10661 ----
+ /****************************************************************************
+  *                                                                          *
+  *                         GNAT COMPILER COMPONENTS                         *
+  *                                                                          *
+  *                                 D E C L                                  *
+  *                                                                          *
+  *                          C Implementation File                           *
+  *                                                                          *
+  *          Copyright (C) 1992-2021, Free Software Foundation, Inc.         *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
+  * for  more details.  You should have received a copy of the GNU General   *
+  * Public License along with GCC; see the file COPYING3.  If not see        *
+  * <http://www.gnu.org/licenses/>.                                          *
+  *                                                                          *
+  * GNAT was originally developed  by the GNAT team at  New York University. *
+  * Extensive contributions were provided by Ada Core Technologies Inc.      *
+  *                                                                          *
+  ****************************************************************************/
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "target.h"
+ #include "tree.h"
+ #include "gimple-expr.h"
+ #include "stringpool.h"
+ #include "diagnostic-core.h"
+ #include "alias.h"
+ #include "fold-const.h"
+ #include "stor-layout.h"
+ #include "tree-inline.h"
+ #include "demangle.h"
+ 
+ #include "ada.h"
+ #include "types.h"
+ #include "atree.h"
+ #include "elists.h"
+ #include "namet.h"
+ #include "nlists.h"
+ #include "repinfo.h"
+ #include "snames.h"
+ #include "uintp.h"
+ #include "urealp.h"
+ #include "fe.h"
+ #include "sinfo.h"
+ #include "einfo.h"
+ #include "ada-tree.h"
+ #include "gigi.h"
+ 
+ /* The "stdcall" convention is really supported on 32-bit x86/Windows only.
+    The following macro is a helper to avoid having to check for a Windows
+    specific attribute throughout this unit.  */
+ 
+ #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
+ #ifdef TARGET_64BIT
+ #define Has_Stdcall_Convention(E) \
+   (!TARGET_64BIT && Convention (E) == Convention_Stdcall)
+ #else
+ #define Has_Stdcall_Convention(E) (Convention (E) == Convention_Stdcall)
+ #endif
+ #else
+ #define Has_Stdcall_Convention(E) 0
+ #endif
+ 
+ #define STDCALL_PREFIX "_imp__"
+ 
+ /* Stack realignment is necessary for functions with foreign conventions when
+    the ABI doesn't mandate as much as what the compiler assumes - that is, up
+    to PREFERRED_STACK_BOUNDARY.
+ 
+    Such realignment can be requested with a dedicated function type attribute
+    on the targets that support it.  We define FOREIGN_FORCE_REALIGN_STACK to
+    characterize the situations where the attribute should be set.  We rely on
+    compiler configuration settings for 'main' to decide.  */
+ 
+ #ifdef MAIN_STACK_BOUNDARY
+ #define FOREIGN_FORCE_REALIGN_STACK \
+   (MAIN_STACK_BOUNDARY < PREFERRED_STACK_BOUNDARY)
+ #else
+ #define FOREIGN_FORCE_REALIGN_STACK 0
+ #endif
+ 
+ /* The largest TYPE_ARRAY_MAX_SIZE value we set on an array type.
+    It's an artibrary limit (256 MB) above which we consider that
+    the allocation is essentially unbounded.  */
+ 
+ #define TYPE_ARRAY_SIZE_LIMIT (1 << 28)
+ 
+ struct incomplete
+ {
+   struct incomplete *next;
+   tree old_type;
+   Entity_Id full_type;
+ };
+ 
+ /* These variables are used to defer recursively expanding incomplete types
+    while we are processing a record, an array or a subprogram type.  */
+ static int defer_incomplete_level = 0;
+ static struct incomplete *defer_incomplete_list;
+ 
+ /* This variable is used to delay expanding types coming from a limited with
+    clause and completed Taft Amendment types until the end of the spec.  */
+ static struct incomplete *defer_limited_with_list;
+ 
+ typedef struct subst_pair_d {
+   tree discriminant;
+   tree replacement;
+ } subst_pair;
+ 
+ 
+ typedef struct variant_desc_d {
+   /* The type of the variant.  */
+   tree type;
+ 
+   /* The associated field.  */
+   tree field;
+ 
+   /* The value of the qualifier.  */
+   tree qual;
+ 
+   /* The type of the variant after transformation.  */
+   tree new_type;
+ 
+   /* The auxiliary data.  */
+   tree aux;
+ } variant_desc;
+ 
+ 
+ /* A map used to cache the result of annotate_value.  */
+ struct value_annotation_hasher : ggc_cache_ptr_hash<tree_int_map>
+ {
+   static inline hashval_t
+   hash (tree_int_map *m)
+   {
+     return htab_hash_pointer (m->base.from);
+   }
+ 
+   static inline bool
+   equal (tree_int_map *a, tree_int_map *b)
+   {
+     return a->base.from == b->base.from;
+   }
+ 
+   static int
+   keep_cache_entry (tree_int_map *&m)
+   {
+     return ggc_marked_p (m->base.from);
+   }
+ };
+ 
+ static GTY ((cache)) hash_table<value_annotation_hasher> *annotate_value_cache;
+ 
+ /* A map used to associate a dummy type with a list of subprogram entities.  */
+ struct GTY((for_user)) tree_entity_vec_map
+ {
+   struct tree_map_base base;
+   vec<Entity_Id, va_gc_atomic> *to;
+ };
+ 
+ void
+ gt_pch_nx (Entity_Id &)
+ {
+ }
+ 
+ void
+ gt_pch_nx (Entity_Id *x, gt_pointer_operator op, void *cookie)
+ {
+   op (x, NULL, cookie);
+ }
+ 
+ struct dummy_type_hasher : ggc_cache_ptr_hash<tree_entity_vec_map>
+ {
+   static inline hashval_t
+   hash (tree_entity_vec_map *m)
+   {
+     return htab_hash_pointer (m->base.from);
+   }
+ 
+   static inline bool
+   equal (tree_entity_vec_map *a, tree_entity_vec_map *b)
+   {
+     return a->base.from == b->base.from;
+   }
+ 
+   static int
+   keep_cache_entry (tree_entity_vec_map *&m)
+   {
+     return ggc_marked_p (m->base.from);
+   }
+ };
+ 
+ static GTY ((cache)) hash_table<dummy_type_hasher> *dummy_to_subprog_map;
+ 
+ static void prepend_one_attribute (struct attrib **,
+ 				   enum attrib_type, tree, tree, Node_Id);
+ static void prepend_one_attribute_pragma (struct attrib **, Node_Id);
+ static void prepend_attributes (struct attrib **, Entity_Id);
+ static tree elaborate_expression (Node_Id, Entity_Id, const char *, bool, bool,
+ 				  bool);
+ static tree elaborate_expression_1 (tree, Entity_Id, const char *, bool, bool);
+ static tree elaborate_expression_2 (tree, Entity_Id, const char *, bool, bool,
+ 				    unsigned int);
+ static tree elaborate_reference (tree, Entity_Id, bool, tree *);
+ static tree gnat_to_gnu_component_type (Entity_Id, bool, bool);
+ static tree gnat_to_gnu_subprog_type (Entity_Id, bool, bool, tree *);
+ static int adjust_packed (tree, tree, int);
+ static tree gnat_to_gnu_field (Entity_Id, tree, int, bool, bool);
+ static enum inline_status_t inline_status_for_subprog (Entity_Id);
+ static tree gnu_ext_name_for_subprog (Entity_Id, tree);
+ static void set_nonaliased_component_on_array_type (tree);
+ static void set_reverse_storage_order_on_array_type (tree);
+ static bool same_discriminant_p (Entity_Id, Entity_Id);
+ static bool array_type_has_nonaliased_component (tree, Entity_Id);
+ static bool compile_time_known_address_p (Node_Id);
+ static bool flb_cannot_be_superflat (Node_Id);
+ static bool range_cannot_be_superflat (Node_Id);
+ static bool constructor_address_p (tree);
+ static bool allocatable_size_p (tree, bool);
+ static bool initial_value_needs_conversion (tree, tree);
+ static tree update_n_elem (tree, tree, tree);
+ static int compare_field_bitpos (const PTR, const PTR);
+ static bool components_to_record (Node_Id, Entity_Id, tree, tree, int, bool,
+ 				  bool, bool, bool, bool, bool, bool, tree,
+ 				  tree *);
+ static Uint annotate_value (tree);
+ static void annotate_rep (Entity_Id, tree);
+ static tree build_position_list (tree, bool, tree, tree, unsigned int, tree);
+ static vec<subst_pair> build_subst_list (Entity_Id, Entity_Id, bool);
+ static vec<variant_desc> build_variant_list (tree, Node_Id, vec<subst_pair>,
+ 					     vec<variant_desc>);
+ static tree maybe_saturate_size (tree, unsigned int align);
+ static tree validate_size (Uint, tree, Entity_Id, enum tree_code, bool, bool,
+ 			   const char *, const char *);
+ static void set_rm_size (Uint, tree, Entity_Id);
+ static unsigned int validate_alignment (Uint, Entity_Id, unsigned int);
+ static unsigned int promote_object_alignment (tree, tree, Entity_Id);
+ static void check_ok_for_atomic_type (tree, Entity_Id, bool);
+ static bool type_for_atomic_builtin_p (tree);
+ static tree resolve_atomic_builtin (enum built_in_function, tree);
+ static tree create_field_decl_from (tree, tree, tree, tree, tree,
+ 				    vec<subst_pair>);
+ static tree create_rep_part (tree, tree, tree);
+ static tree get_rep_part (tree);
+ static tree create_variant_part_from (tree, vec<variant_desc>, tree,
+ 				      tree, vec<subst_pair>, bool);
+ static void copy_and_substitute_in_size (tree, tree, vec<subst_pair>);
+ static void copy_and_substitute_in_layout (Entity_Id, Entity_Id, tree, tree,
+ 					   vec<subst_pair>, bool);
+ static tree associate_original_type_to_packed_array (tree, Entity_Id);
+ static const char *get_entity_char (Entity_Id);
+ 
+ /* The relevant constituents of a subprogram binding to a GCC builtin.  Used
+    to pass around calls performing profile compatibility checks.  */
+ 
+ typedef struct {
+   Entity_Id gnat_entity;  /* The Ada subprogram entity.  */
+   tree ada_fntype;        /* The corresponding GCC type node.  */
+   tree btin_fntype;       /* The GCC builtin function type node.  */
+ } intrin_binding_t;
+ 
+ static bool intrin_profiles_compatible_p (const intrin_binding_t *);
+ 
+ /* Given GNAT_ENTITY, a GNAT defining identifier node, which denotes some Ada
+    entity, return the equivalent GCC tree for that entity (a ..._DECL node)
+    and associate the ..._DECL node with the input GNAT defining identifier.
+ 
+    If GNAT_ENTITY is a variable or a constant declaration, GNU_EXPR gives its
+    initial value (in GCC tree form).  This is optional for a variable.  For
+    a renamed entity, GNU_EXPR gives the object being renamed.
+ 
+    DEFINITION is true if this call is intended for a definition.  This is used
+    for separate compilation where it is necessary to know whether an external
+    declaration or a definition must be created if the GCC equivalent was not
+    created previously.  */
+ 
+ tree
+ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
+ {
+   /* The construct that declared the entity.  */
+   const Node_Id gnat_decl = Declaration_Node (gnat_entity);
+   /* The object that the entity renames, if any.  */
+   const Entity_Id gnat_renamed_obj = Renamed_Object (gnat_entity);
+   /* The kind of the entity.  */
+   const Entity_Kind kind = Ekind (gnat_entity);
+   /* True if this is a type.  */
+   const bool is_type = IN (kind, Type_Kind);
+   /* True if this is an artificial entity.  */
+   const bool artificial_p = !Comes_From_Source (gnat_entity);
+   /* True if debug info is requested for this entity.  */
+   const bool debug_info_p = Needs_Debug_Info (gnat_entity);
+   /* True if this entity is to be considered as imported.  */
+   const bool imported_p
+     = (Is_Imported (gnat_entity) && No (Address_Clause (gnat_entity)));
+   /* True if this entity has a foreign convention.  */
+   const bool foreign = Has_Foreign_Convention (gnat_entity);
+   /* For a type, contains the equivalent GNAT node to be used in gigi.  */
+   Entity_Id gnat_equiv_type = Empty;
+   /* For a type, contains the GNAT node to be used for back-annotation.  */
+   Entity_Id gnat_annotate_type = Empty;
+   /* Temporary used to walk the GNAT tree.  */
+   Entity_Id gnat_temp;
+   /* Contains the GCC DECL node which is equivalent to the input GNAT node.
+      This node will be associated with the GNAT node by calling at the end
+      of the `switch' statement.  */
+   tree gnu_decl = NULL_TREE;
+   /* Contains the GCC type to be used for the GCC node.  */
+   tree gnu_type = NULL_TREE;
+   /* Contains the GCC size tree to be used for the GCC node.  */
+   tree gnu_size = NULL_TREE;
+   /* Contains the GCC name to be used for the GCC node.  */
+   tree gnu_entity_name;
+   /* True if we have already saved gnu_decl as a GNAT association.  This can
+      also be used to purposely avoid making such an association but this use
+      case ought not to be applied to types because it can break the deferral
+      mechanism implemented for access types.  */
+   bool saved = false;
+   /* True if we incremented defer_incomplete_level.  */
+   bool this_deferred = false;
+   /* True if we incremented force_global.  */
+   bool this_global = false;
+   /* True if we should check to see if elaborated during processing.  */
+   bool maybe_present = false;
+   /* True if we made GNU_DECL and its type here.  */
+   bool this_made_decl = false;
+   /* Size and alignment of the GCC node, if meaningful.  */
+   unsigned int esize = 0, align = 0;
+   /* Contains the list of attributes directly attached to the entity.  */
+   struct attrib *attr_list = NULL;
+ 
+   /* Since a use of an itype is a definition, process it as such if it is in
+      the main unit, except for E_Access_Subtype because it's actually a use
+      of its base type, and for E_Class_Wide_Subtype with an Equivalent_Type
+      because it's actually a use of the latter type.  */
+   if (!definition
+       && is_type
+       && Is_Itype (gnat_entity)
+       && Ekind (gnat_entity) != E_Access_Subtype
+       && !(Ekind (gnat_entity) == E_Class_Wide_Subtype
+ 	   && Present (Equivalent_Type (gnat_entity)))
+       && !present_gnu_tree (gnat_entity)
+       && In_Extended_Main_Code_Unit (gnat_entity))
+     {
+       /* Ensure that we are in a subprogram mentioned in the Scope chain of
+ 	 this entity, our current scope is global, or we encountered a task
+ 	 or entry (where we can't currently accurately check scoping).  */
+       if (!current_function_decl
+ 	  || DECL_ELABORATION_PROC_P (current_function_decl))
+ 	{
+ 	  process_type (gnat_entity);
+ 	  return get_gnu_tree (gnat_entity);
+ 	}
+ 
+       for (gnat_temp = Scope (gnat_entity);
+ 	   Present (gnat_temp);
+ 	   gnat_temp = Scope (gnat_temp))
+ 	{
+ 	  if (Is_Type (gnat_temp))
+ 	    gnat_temp = Underlying_Type (gnat_temp);
+ 
+ 	  if (Ekind (gnat_temp) == E_Subprogram_Body)
+ 	    gnat_temp
+ 	      = Corresponding_Spec (Parent (Declaration_Node (gnat_temp)));
+ 
+ 	  if (Is_Subprogram (gnat_temp)
+ 	      && Present (Protected_Body_Subprogram (gnat_temp)))
+ 	    gnat_temp = Protected_Body_Subprogram (gnat_temp);
+ 
+ 	  if (Ekind (gnat_temp) == E_Entry
+ 	      || Ekind (gnat_temp) == E_Entry_Family
+ 	      || Ekind (gnat_temp) == E_Task_Type
+ 	      || (Is_Subprogram (gnat_temp)
+ 		  && present_gnu_tree (gnat_temp)
+ 		  && (current_function_decl
+ 		      == gnat_to_gnu_entity (gnat_temp, NULL_TREE, false))))
+ 	    {
+ 	      process_type (gnat_entity);
+ 	      return get_gnu_tree (gnat_entity);
+ 	    }
+ 	}
+ 
+       /* This abort means the itype has an incorrect scope, i.e. that its
+ 	 scope does not correspond to the subprogram it is first used in.  */
+       gcc_unreachable ();
+     }
+ 
+   /* If we've already processed this entity, return what we got last time.
+      If we are defining the node, we should not have already processed it.
+      In that case, we will abort below when we try to save a new GCC tree
+      for this object.  We also need to handle the case of getting a dummy
+      type when a Full_View exists but be careful so as not to trigger its
+      premature elaboration.  Likewise for a cloned subtype without its own
+      freeze node, which typically happens when a generic gets instantiated
+      on an incomplete or private type.  */
+   if ((!definition || (is_type && imported_p))
+       && present_gnu_tree (gnat_entity))
+     {
+       gnu_decl = get_gnu_tree (gnat_entity);
+ 
+       if (TREE_CODE (gnu_decl) == TYPE_DECL
+ 	  && TYPE_IS_DUMMY_P (TREE_TYPE (gnu_decl))
+ 	  && IN (kind, Incomplete_Or_Private_Kind)
+ 	  && Present (Full_View (gnat_entity))
+ 	  && (present_gnu_tree (Full_View (gnat_entity))
+ 	      || No (Freeze_Node (Full_View (gnat_entity)))))
+ 	{
+ 	  gnu_decl
+ 	    = gnat_to_gnu_entity (Full_View (gnat_entity), NULL_TREE,
+ 				  false);
+ 	  save_gnu_tree (gnat_entity, NULL_TREE, false);
+ 	  save_gnu_tree (gnat_entity, gnu_decl, false);
+ 	}
+ 
+       if (TREE_CODE (gnu_decl) == TYPE_DECL
+ 	  && TYPE_IS_DUMMY_P (TREE_TYPE (gnu_decl))
+ 	  && Ekind (gnat_entity) == E_Record_Subtype
+ 	  && No (Freeze_Node (gnat_entity))
+ 	  && Present (Cloned_Subtype (gnat_entity))
+ 	  && (present_gnu_tree (Cloned_Subtype (gnat_entity))
+ 	      || No (Freeze_Node (Cloned_Subtype (gnat_entity)))))
+ 	{
+ 	  gnu_decl
+ 	    = gnat_to_gnu_entity (Cloned_Subtype (gnat_entity), NULL_TREE,
+ 				  false);
+ 	  save_gnu_tree (gnat_entity, NULL_TREE, false);
+ 	  save_gnu_tree (gnat_entity, gnu_decl, false);
+ 	}
+ 
+       return gnu_decl;
+     }
+ 
+   /* If this is a numeric or enumeral type, or an access type, a nonzero Esize
+      must be specified unless it was specified by the programmer.  Exceptions
+      are for access-to-protected-subprogram types and all access subtypes, as
+      another GNAT type is used to lay out the GCC type for them.  */
+   gcc_assert (!is_type
+ 	      || Known_Esize (gnat_entity)
+ 	      || Has_Size_Clause (gnat_entity)
+ 	      || (!Is_In_Numeric_Kind (kind)
+ 		  && !IN (kind, Enumeration_Kind)
+ 		  && (!IN (kind, Access_Kind)
+ 		      || kind == E_Access_Protected_Subprogram_Type
+ 		      || kind == E_Anonymous_Access_Protected_Subprogram_Type
+ 		      || kind == E_Access_Subtype
+ 		      || type_annotate_only)));
+ 
+   /* The RM size must be specified for all discrete and fixed-point types.  */
+   gcc_assert (!(Is_In_Discrete_Or_Fixed_Point_Kind (kind)
+ 		&& !Known_RM_Size (gnat_entity)));
+ 
+   /* If we get here, it means we have not yet done anything with this entity.
+      If we are not defining it, it must be a type or an entity that is defined
+      elsewhere or externally, otherwise we should have defined it already.
+ 
+      In other words, the failure of this assertion typically arises when a
+      reference to an entity (type or object) is made before its declaration,
+      either directly or by means of a freeze node which is incorrectly placed.
+      This can also happen for an entity referenced out of context, for example
+      a parameter outside of the subprogram where it is declared.  GNAT_ENTITY
+      is the N_Defining_Identifier of the entity, the problematic N_Identifier
+      being the argument passed to Identifier_to_gnu in the parent frame.
+ 
+      One exception is for an entity, typically an inherited operation, which is
+      a local alias for the parent's operation.  It is neither defined, since it
+      is an inherited operation, nor public, since it is declared in the current
+      compilation unit, so we test Is_Public on the Alias entity instead.  */
+   gcc_assert (definition
+ 	      || is_type
+ 	      || kind == E_Discriminant
+ 	      || kind == E_Component
+ 	      || kind == E_Label
+ 	      || (kind == E_Constant && Present (Full_View (gnat_entity)))
+ 	      || Is_Public (gnat_entity)
+ 	      || (Present (Alias (gnat_entity))
+ 		  && Is_Public (Alias (gnat_entity)))
+ 	      || type_annotate_only);
+ 
+   /* Get the name of the entity and set up the line number and filename of
+      the original definition for use in any decl we make.  Make sure we do
+      not inherit another source location.  */
+   gnu_entity_name = get_entity_name (gnat_entity);
+   if (!renaming_from_instantiation_p (gnat_entity))
+     Sloc_to_locus (Sloc (gnat_entity), &input_location);
+ 
+   /* For cases when we are not defining (i.e., we are referencing from
+      another compilation unit) public entities, show we are at global level
+      for the purpose of computing scopes.  Don't do this for components or
+      discriminants since the relevant test is whether or not the record is
+      being defined.  */
+   if (!definition
+       && kind != E_Component
+       && kind != E_Discriminant
+       && Is_Public (gnat_entity)
+       && !Is_Statically_Allocated (gnat_entity))
+     force_global++, this_global = true;
+ 
+   /* Handle any attributes directly attached to the entity.  */
+   if (Has_Gigi_Rep_Item (gnat_entity))
+     prepend_attributes (&attr_list, gnat_entity);
+ 
+   /* Do some common processing for types.  */
+   if (is_type)
+     {
+       /* Compute the equivalent type to be used in gigi.  */
+       gnat_equiv_type = Gigi_Equivalent_Type (gnat_entity);
+ 
+       /* Machine_Attributes on types are expected to be propagated to
+ 	 subtypes.  The corresponding Gigi_Rep_Items are only attached
+ 	 to the first subtype though, so we handle the propagation here.  */
+       if (Base_Type (gnat_entity) != gnat_entity
+ 	  && !Is_First_Subtype (gnat_entity)
+ 	  && Has_Gigi_Rep_Item (First_Subtype (Base_Type (gnat_entity))))
+ 	prepend_attributes (&attr_list,
+ 			    First_Subtype (Base_Type (gnat_entity)));
+ 
+       /* Compute a default value for the size of an elementary type.  */
+       if (Known_Esize (gnat_entity) && Is_Elementary_Type (gnat_entity))
+ 	{
+ 	  unsigned int max_esize;
+ 
+ 	  gcc_assert (UI_Is_In_Int_Range (Esize (gnat_entity)));
+ 	  esize = UI_To_Int (Esize (gnat_entity));
+ 
+ 	  if (IN (kind, Float_Kind))
+ 	    max_esize = fp_prec_to_size (LONG_DOUBLE_TYPE_SIZE);
+ 	  else if (IN (kind, Access_Kind))
+ 	    max_esize = POINTER_SIZE * 2;
+ 	  else
+ 	    max_esize = Enable_128bit_Types ? 128 : LONG_LONG_TYPE_SIZE;
+ 
+ 	  if (esize > max_esize)
+ 	   esize = max_esize;
+ 	}
+     }
+ 
+   switch (kind)
+     {
+     case E_Component:
+     case E_Discriminant:
+       {
+ 	/* The GNAT record where the component was defined.  */
+ 	Entity_Id gnat_record = Underlying_Type (Scope (gnat_entity));
+ 
+ 	/* If the entity is a discriminant of an extended tagged type used to
+ 	   rename a discriminant of the parent type, return the latter.  */
+ 	if (kind == E_Discriminant
+ 	    && Present (Corresponding_Discriminant (gnat_entity))
+ 	    && Is_Tagged_Type (gnat_record))
+ 	  {
+ 	    gnu_decl
+ 	      = gnat_to_gnu_entity (Corresponding_Discriminant (gnat_entity),
+ 				    gnu_expr, definition);
+ 	    saved = true;
+ 	    break;
+ 	  }
+ 
+ 	/* If the entity is an inherited component (in the case of extended
+ 	   tagged record types), just return the original entity, which must
+ 	   be a FIELD_DECL.  Likewise for discriminants.  If the entity is a
+ 	   non-stored discriminant (in the case of derived untagged record
+ 	   types), return the stored discriminant it renames.  */
+ 	if (Present (Original_Record_Component (gnat_entity))
+ 	    && Original_Record_Component (gnat_entity) != gnat_entity)
+ 	  {
+ 	    gnu_decl
+ 	      = gnat_to_gnu_entity (Original_Record_Component (gnat_entity),
+ 				    gnu_expr, definition);
+ 	    /* GNU_DECL contains a PLACEHOLDER_EXPR for discriminants.  */
+ 	    if (kind == E_Discriminant)
+ 	      saved = true;
+ 	    break;
+ 	  }
+ 
+ 	/* Otherwise, if we are not defining this and we have no GCC type
+ 	   for the containing record, make one for it.  Then we should
+ 	   have made our own equivalent.  */
+ 	if (!definition && !present_gnu_tree (gnat_record))
+ 	  {
+ 	    /* ??? If this is in a record whose scope is a protected
+ 	       type and we have an Original_Record_Component, use it.
+ 	       This is a workaround for major problems in protected type
+ 	       handling.  */
+ 	    Entity_Id Scop = Scope (Scope (gnat_entity));
+ 	    if (Is_Protected_Type (Underlying_Type (Scop))
+ 		&& Present (Original_Record_Component (gnat_entity)))
+ 	      {
+ 		gnu_decl
+ 		  = gnat_to_gnu_entity (Original_Record_Component
+ 					(gnat_entity),
+ 					gnu_expr, false);
+ 	      }
+ 	    else
+ 	      {
+ 		gnat_to_gnu_entity (Scope (gnat_entity), NULL_TREE, false);
+ 		gnu_decl = get_gnu_tree (gnat_entity);
+ 	      }
+ 
+ 	    saved = true;
+ 	    break;
+ 	  }
+ 
+ 	/* Here we have no GCC type and this is a reference rather than a
+ 	   definition.  This should never happen.  Most likely the cause is
+ 	   reference before declaration in the GNAT tree for gnat_entity.  */
+ 	gcc_unreachable ();
+       }
+ 
+     case E_Named_Integer:
+     case E_Named_Real:
+       {
+ 	tree gnu_ext_name = NULL_TREE;
+ 
+ 	if (Is_Public (gnat_entity))
+ 	  gnu_ext_name = create_concat_name (gnat_entity, NULL);
+ 
+ 	/* All references are supposed to be folded in the front-end.  */
+ 	gcc_assert (definition && gnu_expr);
+ 
+ 	gnu_type = gnat_to_gnu_type (Etype (gnat_entity));
+ 	gnu_expr = convert (gnu_type, gnu_expr);
+ 
+ 	/* Build a CONST_DECL for debugging purposes exclusively.  */
+ 	gnu_decl
+ 	  = create_var_decl (gnu_entity_name, gnu_ext_name, gnu_type,
+ 			     gnu_expr, true, Is_Public (gnat_entity),
+ 			     false, false, false, artificial_p,
+ 			     debug_info_p, NULL, gnat_entity);
+       }
+       break;
+ 
+     case E_Constant:
+       /* Ignore constant definitions already marked with the error node.  See
+ 	 the N_Object_Declaration case of gnat_to_gnu for the rationale.  */
+       if (definition
+ 	  && present_gnu_tree (gnat_entity)
+ 	  && get_gnu_tree (gnat_entity) == error_mark_node)
+ 	{
+ 	  maybe_present = true;
+ 	  break;
+ 	}
+ 
+       /* Ignore deferred constant definitions without address clause since
+ 	 they are processed fully in the front-end.  If No_Initialization
+ 	 is set, this is not a deferred constant but a constant whose value
+ 	 is built manually.  And constants that are renamings are handled
+ 	 like variables.  */
+       if (definition
+ 	  && !gnu_expr
+ 	  && No (Address_Clause (gnat_entity))
+ 	  && !No_Initialization (gnat_decl)
+ 	  && No (gnat_renamed_obj))
+ 	{
+ 	  gnu_decl = error_mark_node;
+ 	  saved = true;
+ 	  break;
+ 	}
+ 
+       /* If this is a use of a deferred constant without address clause,
+ 	 get its full definition.  */
+       if (!definition
+ 	  && No (Address_Clause (gnat_entity))
+ 	  && Present (Full_View (gnat_entity)))
+ 	{
+ 	  gnu_decl
+ 	    = gnat_to_gnu_entity (Full_View (gnat_entity), gnu_expr, false);
+ 	  saved = true;
+ 	  break;
+ 	}
+ 
+       /* If we have a constant that we are not defining, get the expression it
+ 	 was defined to represent.  This is necessary to avoid generating dumb
+ 	 elaboration code in simple cases, and we may throw it away later if it
+ 	 is not a constant.  But do not do it for dispatch tables because they
+ 	 are only referenced indirectly and we need to have a consistent view
+ 	 of the exported and of the imported declarations of the tables from
+ 	 external units for them to be properly merged in LTO mode.  Moreover
+ 	 simply do not retrieve the expression if it is an allocator because
+ 	 the designated type might still be dummy at this point.  Note that we
+ 	 invoke gnat_to_gnu_external and not gnat_to_gnu because the expression
+ 	 may contain N_Expression_With_Actions nodes and thus declarations of
+ 	 objects from other units that we need to discard.  Note also that we
+ 	 need to do it even if we are only annotating types, so as to be able
+ 	 to validate representation clauses using constants.  */
+       if (!definition
+ 	  && !No_Initialization (gnat_decl)
+ 	  && !Is_Dispatch_Table_Entity (gnat_entity)
+ 	  && Present (gnat_temp = Expression (gnat_decl))
+ 	  && Nkind (gnat_temp) != N_Allocator
+ 	  && (Is_Elementary_Type (Etype (gnat_entity)) || !type_annotate_only))
+ 	gnu_expr = gnat_to_gnu_external (gnat_temp);
+ 
+       /* ... fall through ... */
+ 
+     case E_Exception:
+     case E_Loop_Parameter:
+     case E_Out_Parameter:
+     case E_Variable:
+       {
+ 	const Entity_Id gnat_type = Etype (gnat_entity);
+ 	/* Always create a variable for volatile objects and variables seen
+ 	   constant but with a Linker_Section pragma.  */
+ 	bool const_flag
+ 	  = ((kind == E_Constant || kind == E_Variable)
+ 	     && Is_True_Constant (gnat_entity)
+ 	     && !(kind == E_Variable
+ 		  && Present (Linker_Section_Pragma (gnat_entity)))
+ 	     && !Treat_As_Volatile (gnat_entity)
+ 	     && (((Nkind (gnat_decl) == N_Object_Declaration)
+ 		  && Present (Expression (gnat_decl)))
+ 		 || Present (gnat_renamed_obj)
+ 		 || imported_p));
+ 	bool inner_const_flag = const_flag;
+ 	bool static_flag = Is_Statically_Allocated (gnat_entity);
+ 	/* We implement RM 13.3(19) for exported and imported (non-constant)
+ 	   objects by making them volatile.  */
+ 	bool volatile_flag
+ 	  = (Treat_As_Volatile (gnat_entity)
+ 	     || (!const_flag && (Is_Exported (gnat_entity) || imported_p)));
+ 	bool mutable_p = false;
+ 	bool used_by_ref = false;
+ 	tree gnu_ext_name = NULL_TREE;
+ 	tree gnu_ada_size = NULL_TREE;
+ 
+ 	/* We need to translate the renamed object even though we are only
+ 	   referencing the renaming.  But it may contain a call for which
+ 	   we'll generate a temporary to hold the return value and which
+ 	   is part of the definition of the renaming, so discard it.  */
+ 	if (Present (gnat_renamed_obj) && !definition)
+ 	  {
+ 	    if (kind == E_Exception)
+ 	      gnu_expr = gnat_to_gnu_entity (Renamed_Entity (gnat_entity),
+ 					     NULL_TREE, false);
+ 	    else
+ 	      gnu_expr = gnat_to_gnu_external (gnat_renamed_obj);
+ 	  }
+ 
+ 	/* Get the type after elaborating the renamed object.  */
+ 	if (foreign && Is_Descendant_Of_Address (Underlying_Type (gnat_type)))
+ 	  gnu_type = ptr_type_node;
+ 	else
+ 	  gnu_type = gnat_to_gnu_type (gnat_type);
+ 
+ 	/* For a debug renaming declaration, build a debug-only entity.  */
+ 	if (Present (Debug_Renaming_Link (gnat_entity)))
+ 	  {
+ 	    /* Force a non-null value to make sure the symbol is retained.  */
+ 	    tree value = build1 (INDIRECT_REF, gnu_type,
+ 				 build1 (NOP_EXPR,
+ 					 build_pointer_type (gnu_type),
+ 					 integer_minus_one_node));
+ 	    gnu_decl = build_decl (input_location,
+ 				   VAR_DECL, gnu_entity_name, gnu_type);
+ 	    SET_DECL_VALUE_EXPR (gnu_decl, value);
+ 	    DECL_HAS_VALUE_EXPR_P (gnu_decl) = 1;
+ 	    TREE_STATIC (gnu_decl) = global_bindings_p ();
+ 	    gnat_pushdecl (gnu_decl, gnat_entity);
+ 	    break;
+ 	  }
+ 
+ 	/* If this is a loop variable, its type should be the base type.
+ 	   This is because the code for processing a loop determines whether
+ 	   a normal loop end test can be done by comparing the bounds of the
+ 	   loop against those of the base type, which is presumed to be the
+ 	   size used for computation.  But this is not correct when the size
+ 	   of the subtype is smaller than the type.  */
+ 	if (kind == E_Loop_Parameter)
+ 	  gnu_type = get_base_type (gnu_type);
+ 
+ 	/* Reject non-renamed objects whose type is an unconstrained array or
+ 	   any object whose type is a dummy type or void.  */
+ 	if ((TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE
+ 	     && No (gnat_renamed_obj))
+ 	    || TYPE_IS_DUMMY_P (gnu_type)
+ 	    || TREE_CODE (gnu_type) == VOID_TYPE)
+ 	  {
+ 	    gcc_assert (type_annotate_only);
+ 	    if (this_global)
+ 	      force_global--;
+ 	    return error_mark_node;
+ 	  }
+ 
+ 	/* If an alignment is specified, use it if valid.  Note that exceptions
+ 	   are objects but don't have an alignment and there is also no point in
+ 	   setting it for an address clause, since the final type of the object
+ 	   will be a reference type.  */
+ 	if (Known_Alignment (gnat_entity)
+ 	    && kind != E_Exception
+ 	    && No (Address_Clause (gnat_entity)))
+ 	  align = validate_alignment (Alignment (gnat_entity), gnat_entity,
+ 				      TYPE_ALIGN (gnu_type));
+ 
+ 	/* Likewise, if a size is specified, use it if valid.  */
+ 	if (Known_Esize (gnat_entity))
+ 	  gnu_size
+ 	    = validate_size (Esize (gnat_entity), gnu_type, gnat_entity,
+ 			     VAR_DECL, false, Has_Size_Clause (gnat_entity),
+ 			     NULL, NULL);
+ 	if (gnu_size)
+ 	  {
+ 	    gnu_type
+ 	      = make_type_from_size (gnu_type, gnu_size,
+ 				     Has_Biased_Representation (gnat_entity));
+ 
+ 	    if (operand_equal_p (TYPE_SIZE (gnu_type), gnu_size, 0))
+ 	      gnu_size = NULL_TREE;
+ 	  }
+ 
+ 	/* If this object has self-referential size, it must be a record with
+ 	   a default discriminant.  We are supposed to allocate an object of
+ 	   the maximum size in this case, unless it is a constant with an
+ 	   initializing expression, in which case we can get the size from
+ 	   that.  Note that the resulting size may still be a variable, so
+ 	   this may end up with an indirect allocation.  */
+ 	if (No (gnat_renamed_obj)
+ 	    && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
+ 	  {
+ 	    if (gnu_expr && kind == E_Constant)
+ 	      {
+ 		gnu_size = TYPE_SIZE (TREE_TYPE (gnu_expr));
+ 		gnu_ada_size = TYPE_ADA_SIZE (TREE_TYPE (gnu_expr));
+ 		if (CONTAINS_PLACEHOLDER_P (gnu_size))
+ 		  {
+ 		    /* If the initializing expression is itself a constant,
+ 		       despite having a nominal type with self-referential
+ 		       size, we can get the size directly from it.  */
+ 		    if (TREE_CODE (gnu_expr) == COMPONENT_REF
+ 			&& TYPE_IS_PADDING_P
+ 			   (TREE_TYPE (TREE_OPERAND (gnu_expr, 0)))
+ 			&& TREE_CODE (TREE_OPERAND (gnu_expr, 0)) == VAR_DECL
+ 			&& (TREE_READONLY (TREE_OPERAND (gnu_expr, 0))
+ 			    || DECL_READONLY_ONCE_ELAB
+ 			       (TREE_OPERAND (gnu_expr, 0))))
+ 		      {
+ 			gnu_size = DECL_SIZE (TREE_OPERAND (gnu_expr, 0));
+ 			gnu_ada_size = gnu_size;
+ 		      }
+ 		    else
+ 		      {
+ 			gnu_size
+ 			  = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_size,
+ 							    gnu_expr);
+ 			gnu_ada_size
+ 			  = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_ada_size,
+ 							    gnu_expr);
+ 		      }
+ 		  }
+ 	      }
+ 	    /* We may have no GNU_EXPR because No_Initialization is
+ 	       set even though there's an Expression.  */
+ 	    else if (kind == E_Constant
+ 		     && Nkind (gnat_decl) == N_Object_Declaration
+ 		     && Present (Expression (gnat_decl)))
+ 	      {
+ 		tree gnu_expr_type
+ 		  = gnat_to_gnu_type (Etype (Expression (gnat_decl)));
+ 		gnu_size = TYPE_SIZE (gnu_expr_type);
+ 		gnu_ada_size = TYPE_ADA_SIZE (gnu_expr_type);
+ 	      }
+ 	    else
+ 	      {
+ 		gnu_size = max_size (TYPE_SIZE (gnu_type), true);
+ 		/* We can be called on unconstrained arrays in this mode.  */
+ 		if (!type_annotate_only)
+ 		  gnu_ada_size = max_size (TYPE_ADA_SIZE (gnu_type), true);
+ 		mutable_p = true;
+ 	      }
+ 
+ 	    /* If the size isn't constant and we are at global level, call
+ 	       elaborate_expression_1 to make a variable for it rather than
+ 	       calculating it each time.  */
+ 	    if (!TREE_CONSTANT (gnu_size) && global_bindings_p ())
+ 	      gnu_size = elaborate_expression_1 (gnu_size, gnat_entity,
+ 						 "SIZE", definition, false);
+ 	  }
+ 
+ 	/* If the size is zero byte, make it one byte since some linkers have
+ 	   troubles with zero-sized objects.  If the object will have a
+ 	   template, that will make it nonzero so don't bother.  Also avoid
+ 	   doing that for an object renaming or an object with an address
+ 	   clause, as we would lose useful information on the view size
+ 	   (e.g. for null array slices) and we are not allocating the object
+ 	   here anyway.  */
+ 	if (((gnu_size
+ 	      && integer_zerop (gnu_size)
+ 	      && !TREE_OVERFLOW (gnu_size))
+ 	     || (TYPE_SIZE (gnu_type)
+ 		 && integer_zerop (TYPE_SIZE (gnu_type))
+ 		 && !TREE_OVERFLOW (TYPE_SIZE (gnu_type))))
+ 	    && !Is_Constr_Subt_For_UN_Aliased (gnat_type)
+ 	    && No (gnat_renamed_obj)
+ 	    && No (Address_Clause (gnat_entity)))
+ 	  gnu_size = bitsize_unit_node;
+ 
+ 	/* If this is an object with no specified size and alignment, and
+ 	   if either it is full access or we are not optimizing alignment for
+ 	   space and it is composite and not an exception, an Out parameter
+ 	   or a reference to another object, and the size of its type is a
+ 	   constant, set the alignment to the smallest one which is not
+ 	   smaller than the size, with an appropriate cap.  */
+ 	if (!Known_Esize (gnat_entity)
+ 	    && !Known_Alignment (gnat_entity)
+ 	    && (Is_Full_Access (gnat_entity)
+ 		|| (!Optimize_Alignment_Space (gnat_entity)
+ 		    && kind != E_Exception
+ 		    && kind != E_Out_Parameter
+ 		    && Is_Composite_Type (gnat_type)
+ 		    && !Is_Constr_Subt_For_UN_Aliased (gnat_type)
+ 		    && !Is_Exported (gnat_entity)
+ 		    && !imported_p
+ 		    && No (gnat_renamed_obj)
+ 		    && No (Address_Clause (gnat_entity))))
+ 	    && (TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST || gnu_size))
+ 	  align = promote_object_alignment (gnu_type, gnu_size, gnat_entity);
+ 
+ 	/* If the object is set to have atomic components, find the component
+ 	   type and validate it.
+ 
+ 	   ??? Note that we ignore Has_Volatile_Components on objects; it's
+ 	   not at all clear what to do in that case.  */
+ 	if (Has_Atomic_Components (gnat_entity))
+ 	  {
+ 	    tree gnu_inner = (TREE_CODE (gnu_type) == ARRAY_TYPE
+ 			      ? TREE_TYPE (gnu_type) : gnu_type);
+ 
+ 	    while (TREE_CODE (gnu_inner) == ARRAY_TYPE
+ 		   && TYPE_MULTI_ARRAY_P (gnu_inner))
+ 	      gnu_inner = TREE_TYPE (gnu_inner);
+ 
+ 	    check_ok_for_atomic_type (gnu_inner, gnat_entity, true);
+ 	  }
+ 
+ 	/* If this is an aliased object with an unconstrained array nominal
+ 	   subtype, make a type that includes the template.  We will either
+ 	   allocate or create a variable of that type, see below.  */
+ 	if (Is_Constr_Subt_For_UN_Aliased (gnat_type)
+ 	    && Is_Array_Type (Underlying_Type (gnat_type))
+ 	    && !type_annotate_only)
+ 	  {
+ 	    tree gnu_array = gnat_to_gnu_type (Base_Type (gnat_type));
+ 	    gnu_type
+ 	      = build_unc_object_type_from_ptr (TREE_TYPE (gnu_array),
+ 						gnu_type,
+ 						concat_name (gnu_entity_name,
+ 							     "UNC"),
+ 						debug_info_p);
+ 	  }
+ 
+ 	/* ??? If this is an object of CW type initialized to a value, try to
+ 	   ensure that the object is sufficient aligned for this value, but
+ 	   without pessimizing the allocation.  This is a kludge necessary
+ 	   because we don't support dynamic alignment.  */
+ 	if (align == 0
+ 	    && Ekind (gnat_type) == E_Class_Wide_Subtype
+ 	    && No (gnat_renamed_obj)
+ 	    && No (Address_Clause (gnat_entity)))
+ 	  align = get_target_system_allocator_alignment () * BITS_PER_UNIT;
+ 
+ #ifdef MINIMUM_ATOMIC_ALIGNMENT
+ 	/* If the size is a constant and no alignment is specified, force
+ 	   the alignment to be the minimum valid atomic alignment.  The
+ 	   restriction on constant size avoids problems with variable-size
+ 	   temporaries; if the size is variable, there's no issue with
+ 	   atomic access.  Also don't do this for a constant, since it isn't
+ 	   necessary and can interfere with constant replacement.  Finally,
+ 	   do not do it for Out parameters since that creates an
+ 	   size inconsistency with In parameters.  */
+ 	if (align == 0
+ 	    && MINIMUM_ATOMIC_ALIGNMENT > TYPE_ALIGN (gnu_type)
+ 	    && !FLOAT_TYPE_P (gnu_type)
+ 	    && !const_flag && No (gnat_renamed_obj)
+ 	    && !imported_p && No (Address_Clause (gnat_entity))
+ 	    && kind != E_Out_Parameter
+ 	    && (gnu_size ? TREE_CODE (gnu_size) == INTEGER_CST
+ 		: TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST))
+ 	  align = MINIMUM_ATOMIC_ALIGNMENT;
+ #endif
+ 
+ 	/* Do not take into account aliased adjustments or alignment promotions
+ 	   to compute the size of the object.  */
+ 	tree gnu_object_size = gnu_size ? gnu_size : TYPE_SIZE (gnu_type);
+ 
+ 	/* If the object is aliased, of a constrained nominal subtype and its
+ 	   size might be zero at run time, we force at least the unit size.  */
+ 	if (Is_Aliased (gnat_entity)
+ 	    && !Is_Constr_Subt_For_UN_Aliased (gnat_type)
+ 	    && Is_Array_Type (Underlying_Type (gnat_type))
+ 	    && !TREE_CONSTANT (gnu_object_size))
+ 	  gnu_size = size_binop (MAX_EXPR, gnu_object_size, bitsize_unit_node);
+ 
+ 	/* Make a new type with the desired size and alignment, if needed.  */
+ 	if (gnu_size || align > 0)
+ 	  {
+ 	    tree orig_type = gnu_type;
+ 
+ 	    gnu_type = maybe_pad_type (gnu_type, gnu_size, align, gnat_entity,
+ 				       false, definition, true);
+ 
+ 	    /* If the nominal subtype of the object is unconstrained and its
+ 	       size is not fixed, compute the Ada size from the Ada size of
+ 	       the subtype and/or the expression; this will make it possible
+ 	       for gnat_type_max_size to easily compute a maximum size.  */
+ 	    if (gnu_ada_size && gnu_size && !TREE_CONSTANT (gnu_size))
+ 	      SET_TYPE_ADA_SIZE (gnu_type, gnu_ada_size);
+ 
+ 	    /* If a padding record was made, declare it now since it will
+ 	       never be declared otherwise.  This is necessary to ensure
+ 	       that its subtrees are properly marked.  */
+ 	    if (gnu_type != orig_type && !DECL_P (TYPE_NAME (gnu_type)))
+ 	      create_type_decl (TYPE_NAME (gnu_type), gnu_type, true,
+ 				debug_info_p, gnat_entity);
+ 	  }
+ 
+ 	/* Now check if the type of the object allows atomic access.  */
+ 	if (Is_Full_Access (gnat_entity))
+ 	  check_ok_for_atomic_type (gnu_type, gnat_entity, false);
+ 
+ 	/* If this is a renaming, avoid as much as possible to create a new
+ 	   object.  However, in some cases, creating it is required because
+ 	   renaming can be applied to objects that are not names in Ada.
+ 	   This processing needs to be applied to the raw expression so as
+ 	   to make it more likely to rename the underlying object.  */
+ 	if (Present (gnat_renamed_obj))
+ 	  {
+ 	    /* If the renamed object had padding, strip off the reference to
+ 	       the inner object and reset our type.  */
+ 	    if ((TREE_CODE (gnu_expr) == COMPONENT_REF
+ 		 && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_expr, 0))))
+ 		/* Strip useless conversions around the object.  */
+ 		|| gnat_useless_type_conversion (gnu_expr))
+ 	      {
+ 		gnu_expr = TREE_OPERAND (gnu_expr, 0);
+ 		gnu_type = TREE_TYPE (gnu_expr);
+ 	      }
+ 
+ 	    /* Or else, if the renamed object has an unconstrained type with
+ 	       default discriminant, use the padded type.  */
+ 	    else if (type_is_padding_self_referential (TREE_TYPE (gnu_expr)))
+ 	      gnu_type = TREE_TYPE (gnu_expr);
+ 
+ 	    /* If this is a constant renaming stemming from a function call,
+ 	       treat it as a normal object whose initial value is what is being
+ 	       renamed.  RM 3.3 says that the result of evaluating a function
+ 	       call is a constant object.  Therefore, it can be the inner
+ 	       object of a constant renaming and the renaming must be fully
+ 	       instantiated, i.e. it cannot be a reference to (part of) an
+ 	       existing object.  And treat other rvalues the same way.  */
+ 	    tree inner = gnu_expr;
+ 	    while (handled_component_p (inner) || CONVERT_EXPR_P (inner))
+ 	      inner = TREE_OPERAND (inner, 0);
+ 	    /* Expand_Dispatching_Call can prepend a comparison of the tags
+ 	       before the call to "=".  */
+ 	    if (TREE_CODE (inner) == TRUTH_ANDIF_EXPR
+ 		|| TREE_CODE (inner) == COMPOUND_EXPR)
+ 	      inner = TREE_OPERAND (inner, 1);
+ 	    if ((TREE_CODE (inner) == CALL_EXPR
+ 		 && !call_is_atomic_load (inner))
+ 		|| TREE_CODE (inner) == CONSTRUCTOR
+ 		|| CONSTANT_CLASS_P (inner)
+ 		|| COMPARISON_CLASS_P (inner)
+ 		|| BINARY_CLASS_P (inner)
+ 		|| EXPRESSION_CLASS_P (inner)
+ 		/* We need to detect the case where a temporary is created to
+ 		   hold the return value, since we cannot safely rename it at
+ 		   top level as it lives only in the elaboration routine.  */
+ 		|| (TREE_CODE (inner) == VAR_DECL
+ 		    && DECL_RETURN_VALUE_P (inner))
+ 		/* We also need to detect the case where the front-end creates
+ 		   a dangling 'reference to a function call at top level and
+ 		   substitutes it in the renaming, for example:
+ 
+ 		     q__b : boolean renames r__f.e (1);
+ 
+ 	           can be rewritten into:
+ 
+ 		     q__R1s : constant q__A2s := r__f'reference;
+ 		     [...]
+ 		     q__b : boolean renames q__R1s.all.e (1);
+ 
+ 		   We cannot safely rename the rewritten expression since the
+ 		   underlying object lives only in the elaboration routine.  */
+ 		|| (TREE_CODE (inner) == INDIRECT_REF
+ 		    && (inner
+ 			= remove_conversions (TREE_OPERAND (inner, 0), true))
+ 		    && TREE_CODE (inner) == VAR_DECL
+ 		    && DECL_RETURN_VALUE_P (inner)))
+ 	      ;
+ 
+ 	    /* Otherwise, this is an lvalue being renamed, so it needs to be
+ 	       elaborated as a reference and substituted for the entity.  But
+ 	       this means that we must evaluate the address of the renaming
+ 	       in the definition case to instantiate the SAVE_EXPRs.  */
+ 	    else
+ 	      {
+ 		tree gnu_init = NULL_TREE;
+ 
+ 		if (type_annotate_only && TREE_CODE (gnu_expr) == ERROR_MARK)
+ 		  break;
+ 
+ 		gnu_expr
+ 		  = elaborate_reference (gnu_expr, gnat_entity, definition,
+ 					 &gnu_init);
+ 
+ 		/* No DECL_EXPR might be created so the expression needs to be
+ 		   marked manually because it will likely be shared.  */
+ 		if (global_bindings_p ())
+ 		  MARK_VISITED (gnu_expr);
+ 
+ 		/* This assertion will fail if the renamed object isn't aligned
+ 		   enough as to make it possible to honor the alignment set on
+ 		   the renaming.  */
+ 		if (align)
+ 		  {
+ 		    const unsigned int ralign
+ 		      = DECL_P (gnu_expr)
+ 			? DECL_ALIGN (gnu_expr)
+ 			: TYPE_ALIGN (TREE_TYPE (gnu_expr));
+ 		    gcc_assert (ralign >= align);
+ 		  }
+ 
+ 		/* The expression might not be a DECL so save it manually.  */
+ 		gnu_decl = gnu_expr;
+ 		save_gnu_tree (gnat_entity, gnu_decl, true);
+ 		saved = true;
+ 		annotate_object (gnat_entity, gnu_type, NULL_TREE, false);
+ 
+ 		/* If this is only a reference to the entity, we are done.  */
+ 		if (!definition)
+ 		  break;
+ 
+ 		/* Otherwise, emit the initialization statement, if any.  */
+ 		if (gnu_init)
+ 		  add_stmt (gnu_init);
+ 
+ 		/* If it needs to be materialized for debugging purposes, build
+ 		   the entity as indirect reference to the renamed object.  */
+ 		if (Materialize_Entity (gnat_entity))
+ 		  {
+ 		    gnu_type = build_reference_type (gnu_type);
+ 		    const_flag = true;
+ 		    volatile_flag = false;
+ 
+ 		    gnu_expr = build_unary_op (ADDR_EXPR, gnu_type, gnu_expr);
+ 
+ 		    create_var_decl (gnu_entity_name, gnu_ext_name,
+ 				     TREE_TYPE (gnu_expr), gnu_expr,
+ 				     const_flag, Is_Public (gnat_entity),
+ 				     imported_p, static_flag, volatile_flag,
+ 				     artificial_p, debug_info_p, attr_list,
+ 				     gnat_entity, false);
+ 		  }
+ 
+ 		/* Otherwise, instantiate the SAVE_EXPRs if needed.  */
+ 		else if (TREE_SIDE_EFFECTS (gnu_expr))
+ 		  add_stmt (build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr));
+ 
+ 		break;
+ 	      }
+ 	  }
+ 
+ 	/* If we are defining an aliased object whose nominal subtype is
+ 	   unconstrained, the object is a record that contains both the
+ 	   template and the object.  If there is an initializer, it will
+ 	   have already been converted to the right type, but we need to
+ 	   create the template if there is no initializer.  */
+ 	if (definition
+ 	    && !gnu_expr
+ 	    && TREE_CODE (gnu_type) == RECORD_TYPE
+ 	    && (TYPE_CONTAINS_TEMPLATE_P (gnu_type)
+ 	        /* Beware that padding might have been introduced above.  */
+ 		|| (TYPE_PADDING_P (gnu_type)
+ 		    && TREE_CODE (TREE_TYPE (TYPE_FIELDS (gnu_type)))
+ 		       == RECORD_TYPE
+ 		    && TYPE_CONTAINS_TEMPLATE_P
+ 		       (TREE_TYPE (TYPE_FIELDS (gnu_type))))))
+ 	  {
+ 	    tree template_field
+ 	      = TYPE_PADDING_P (gnu_type)
+ 		? TYPE_FIELDS (TREE_TYPE (TYPE_FIELDS (gnu_type)))
+ 		: TYPE_FIELDS (gnu_type);
+ 	    vec<constructor_elt, va_gc> *v;
+ 	    vec_alloc (v, 1);
+ 	    tree t = build_template (TREE_TYPE (template_field),
+ 				     TREE_TYPE (DECL_CHAIN (template_field)),
+ 				     NULL_TREE);
+ 	    CONSTRUCTOR_APPEND_ELT (v, template_field, t);
+ 	    gnu_expr = gnat_build_constructor (gnu_type, v);
+ 	  }
+ 
+ 	/* Convert the expression to the type of the object if need be.  */
+ 	if (gnu_expr && initial_value_needs_conversion (gnu_type, gnu_expr))
+ 	  gnu_expr = convert (gnu_type, gnu_expr);
+ 
+ 	/* If this is a pointer that doesn't have an initializing expression,
+ 	   initialize it to NULL, unless the object is declared imported as
+ 	   per RM B.1(24).  */
+ 	if (definition
+ 	    && (POINTER_TYPE_P (gnu_type) || TYPE_IS_FAT_POINTER_P (gnu_type))
+ 	    && !gnu_expr
+ 	    && !Is_Imported (gnat_entity))
+ 	  gnu_expr = integer_zero_node;
+ 
+ 	/* If we are defining the object and it has an Address clause, we must
+ 	   either get the address expression from the saved GCC tree for the
+ 	   object if it has a Freeze node, or elaborate the address expression
+ 	   here since the front-end has guaranteed that the elaboration has no
+ 	   effects in this case.  */
+ 	if (definition && Present (Address_Clause (gnat_entity)))
+ 	  {
+ 	    const Node_Id gnat_clause = Address_Clause (gnat_entity);
+ 	    const Node_Id gnat_address = Expression (gnat_clause);
+ 	    tree gnu_address = present_gnu_tree (gnat_entity)
+ 			       ? TREE_OPERAND (get_gnu_tree (gnat_entity), 0)
+ 			       : gnat_to_gnu (gnat_address);
+ 
+ 	    save_gnu_tree (gnat_entity, NULL_TREE, false);
+ 
+ 	    /* Convert the type of the object to a reference type that can
+ 	       alias everything as per RM 13.3(19).  */
+ 	    if (volatile_flag && !TYPE_VOLATILE (gnu_type))
+ 	      gnu_type = change_qualified_type (gnu_type, TYPE_QUAL_VOLATILE);
+ 	    gnu_type
+ 	      = build_reference_type_for_mode (gnu_type, ptr_mode, true);
+ 	    gnu_address = convert (gnu_type, gnu_address);
+ 	    used_by_ref = true;
+ 	    const_flag
+ 	      = (!Is_Public (gnat_entity)
+ 		 || compile_time_known_address_p (gnat_address));
+ 	    volatile_flag = false;
+ 	    gnu_size = NULL_TREE;
+ 
+ 	    /* If this is an aliased object with an unconstrained array nominal
+ 	       subtype, then it can overlay only another aliased object with an
+ 	       unconstrained array nominal subtype and compatible template.  */
+ 	    if (Is_Constr_Subt_For_UN_Aliased (gnat_type)
+ 		&& Is_Array_Type (Underlying_Type (gnat_type))
+ 		&& !type_annotate_only)
+ 	      {
+ 		tree rec_type = TREE_TYPE (gnu_type);
+ 		tree off = byte_position (DECL_CHAIN (TYPE_FIELDS (rec_type)));
+ 
+ 		/* This is the pattern built for a regular object.  */
+ 		if (TREE_CODE (gnu_address) == POINTER_PLUS_EXPR
+ 		    && TREE_OPERAND (gnu_address, 1) == off)
+ 		  gnu_address = TREE_OPERAND (gnu_address, 0);
+ 
+ 		/* This is the pattern built for an overaligned object.  */
+ 		else if (TREE_CODE (gnu_address) == POINTER_PLUS_EXPR
+ 			 && TREE_CODE (TREE_OPERAND (gnu_address, 1))
+ 			    == PLUS_EXPR
+ 			 && TREE_OPERAND (TREE_OPERAND (gnu_address, 1), 1)
+ 			    == off)
+ 		  gnu_address
+ 		    = build2 (POINTER_PLUS_EXPR, gnu_type,
+ 			      TREE_OPERAND (gnu_address, 0),
+ 			      TREE_OPERAND (TREE_OPERAND (gnu_address, 1), 0));
+ 
+ 		/* We make an exception for an absolute address but we warn
+ 		   that there is a descriptor at the start of the object.  */
+ 		else if (TREE_CODE (gnu_address) == INTEGER_CST)
+ 		  {
+ 		    post_error_ne ("??aliased object& with unconstrained "
+ 				   "array nominal subtype", gnat_clause,
+ 				   gnat_entity);
+ 		    post_error ("\\starts with a descriptor whose size is "
+ 				"given by ''Descriptor_Size", gnat_clause);
+ 		  }
+ 
+ 		else
+ 		  {
+ 		    post_error_ne ("aliased object& with unconstrained array "
+ 				   "nominal subtype", gnat_clause,
+ 				   gnat_entity);
+ 		    post_error ("\\can overlay only aliased object with "
+ 				"compatible subtype", gnat_clause);
+ 		  }
+ 	      }
+ 
+ 	    /* If we don't have an initializing expression for the underlying
+ 	       variable, the initializing expression for the pointer is the
+ 	       specified address.  Otherwise, we have to make a COMPOUND_EXPR
+ 	       to assign both the address and the initial value.  */
+ 	    if (!gnu_expr)
+ 	      gnu_expr = gnu_address;
+ 	    else
+ 	      gnu_expr
+ 		= build2 (COMPOUND_EXPR, gnu_type,
+ 			  build_binary_op (INIT_EXPR, NULL_TREE,
+ 					   build_unary_op (INDIRECT_REF,
+ 							   NULL_TREE,
+ 							   gnu_address),
+ 					   gnu_expr),
+ 			  gnu_address);
+ 	  }
+ 
+ 	/* If it has an address clause and we are not defining it, mark it
+ 	   as an indirect object.  Likewise for Stdcall objects that are
+ 	   imported.  */
+ 	if ((!definition && Present (Address_Clause (gnat_entity)))
+ 	    || (imported_p && Has_Stdcall_Convention (gnat_entity)))
+ 	  {
+ 	    /* Convert the type of the object to a reference type that can
+ 	       alias everything as per RM 13.3(19).  */
+ 	    if (volatile_flag && !TYPE_VOLATILE (gnu_type))
+ 	      gnu_type = change_qualified_type (gnu_type, TYPE_QUAL_VOLATILE);
+ 	    gnu_type
+ 	      = build_reference_type_for_mode (gnu_type, ptr_mode, true);
+ 	    used_by_ref = true;
+ 	    const_flag = false;
+ 	    volatile_flag = false;
+ 	    gnu_size = NULL_TREE;
+ 
+ 	    /* No point in taking the address of an initializing expression
+ 	       that isn't going to be used.  */
+ 	    gnu_expr = NULL_TREE;
+ 
+ 	    /* If it has an address clause whose value is known at compile
+ 	       time, make the object a CONST_DECL.  This will avoid a
+ 	       useless dereference.  */
+ 	    if (Present (Address_Clause (gnat_entity)))
+ 	      {
+ 		Node_Id gnat_address
+ 		  = Expression (Address_Clause (gnat_entity));
+ 
+ 		if (compile_time_known_address_p (gnat_address))
+ 		  {
+ 		    gnu_expr = gnat_to_gnu (gnat_address);
+ 		    const_flag = true;
+ 		  }
+ 	      }
+ 	  }
+ 
+ 	/* If we are at top level and this object is of variable size,
+ 	   make the actual type a hidden pointer to the real type and
+ 	   make the initializer be a memory allocation and initialization.
+ 	   Likewise for objects we aren't defining (presumed to be
+ 	   external references from other packages), but there we do
+ 	   not set up an initialization.
+ 
+ 	   If the object's size overflows, make an allocator too, so that
+ 	   Storage_Error gets raised.  Note that we will never free
+ 	   such memory, so we presume it never will get allocated.  */
+ 	if (!allocatable_size_p (TYPE_SIZE_UNIT (gnu_type),
+ 				 global_bindings_p ()
+ 				 || !definition
+ 				 || static_flag)
+ 	    || (gnu_size
+ 		&& !allocatable_size_p (convert (sizetype,
+ 						 size_binop
+ 						 (EXACT_DIV_EXPR, gnu_size,
+ 						  bitsize_unit_node)),
+ 					global_bindings_p ()
+ 					|| !definition
+ 					|| static_flag)))
+ 	  {
+ 	    if (volatile_flag && !TYPE_VOLATILE (gnu_type))
+ 	      gnu_type = change_qualified_type (gnu_type, TYPE_QUAL_VOLATILE);
+ 	    gnu_type = build_reference_type (gnu_type);
+ 	    used_by_ref = true;
+ 	    const_flag = true;
+ 	    volatile_flag = false;
+ 	    gnu_size = NULL_TREE;
+ 
+ 	    /* In case this was a aliased object whose nominal subtype is
+ 	       unconstrained, the pointer above will be a thin pointer and
+ 	       build_allocator will automatically make the template.
+ 
+ 	       If we have a template initializer only (that we made above),
+ 	       pretend there is none and rely on what build_allocator creates
+ 	       again anyway.  Otherwise (if we have a full initializer), get
+ 	       the data part and feed that to build_allocator.
+ 
+ 	       If we are elaborating a mutable object, tell build_allocator to
+ 	       ignore a possibly simpler size from the initializer, if any, as
+ 	       we must allocate the maximum possible size in this case.  */
+ 	    if (definition && !imported_p)
+ 	      {
+ 		tree gnu_alloc_type = TREE_TYPE (gnu_type);
+ 
+ 		if (TREE_CODE (gnu_alloc_type) == RECORD_TYPE
+ 		    && TYPE_CONTAINS_TEMPLATE_P (gnu_alloc_type))
+ 		  {
+ 		    gnu_alloc_type
+ 		      = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (gnu_alloc_type)));
+ 
+ 		    if (TREE_CODE (gnu_expr) == CONSTRUCTOR
+ 			&& CONSTRUCTOR_NELTS (gnu_expr) == 1)
+ 		      gnu_expr = NULL_TREE;
+ 		    else
+ 		      gnu_expr
+ 			= build_component_ref
+ 			    (gnu_expr,
+ 			     DECL_CHAIN (TYPE_FIELDS (TREE_TYPE (gnu_expr))),
+ 			     false);
+ 		  }
+ 
+ 		if (TREE_CODE (TYPE_SIZE_UNIT (gnu_alloc_type)) == INTEGER_CST
+ 		    && !valid_constant_size_p (TYPE_SIZE_UNIT (gnu_alloc_type)))
+ 		  post_error ("??Storage_Error will be raised at run time!",
+ 			      gnat_entity);
+ 
+ 		gnu_expr
+ 		  = build_allocator (gnu_alloc_type, gnu_expr, gnu_type,
+ 				     Empty, Empty, gnat_entity, mutable_p);
+ 	      }
+ 	    else
+ 	      gnu_expr = NULL_TREE;
+ 	  }
+ 
+ 	/* If this object would go into the stack and has an alignment larger
+ 	   than the largest stack alignment the back-end can honor, resort to
+ 	   a variable of "aligning type".  */
+ 	if (definition
+ 	    && TYPE_ALIGN (gnu_type) > BIGGEST_ALIGNMENT
+ 	    && !imported_p
+ 	    && !static_flag
+ 	    && !global_bindings_p ())
+ 	  {
+ 	    /* Create the new variable.  No need for extra room before the
+ 	       aligned field as this is in automatic storage.  */
+ 	    tree gnu_new_type
+ 	      = make_aligning_type (gnu_type, TYPE_ALIGN (gnu_type),
+ 				    TYPE_SIZE_UNIT (gnu_type),
+ 				    BIGGEST_ALIGNMENT, 0, gnat_entity);
+ 	    tree gnu_new_var
+ 	      = create_var_decl (create_concat_name (gnat_entity, "ALIGN"),
+ 				 NULL_TREE, gnu_new_type, NULL_TREE,
+ 				 false, false, false, false, false,
+ 				 true, debug_info_p && definition, NULL,
+ 				 gnat_entity);
+ 
+ 	    /* Initialize the aligned field if we have an initializer.  */
+ 	    if (gnu_expr)
+ 	      add_stmt_with_node
+ 		(build_binary_op (INIT_EXPR, NULL_TREE,
+ 				  build_component_ref
+ 				  (gnu_new_var, TYPE_FIELDS (gnu_new_type),
+ 				   false),
+ 				  gnu_expr),
+ 		 gnat_entity);
+ 
+ 	    /* And setup this entity as a reference to the aligned field.  */
+ 	    gnu_type = build_reference_type (gnu_type);
+ 	    gnu_expr
+ 	      = build_unary_op
+ 		(ADDR_EXPR, NULL_TREE,
+ 		 build_component_ref (gnu_new_var, TYPE_FIELDS (gnu_new_type),
+ 				      false));
+ 	    TREE_CONSTANT (gnu_expr) = 1;
+ 
+ 	    used_by_ref = true;
+ 	    const_flag = true;
+ 	    volatile_flag = false;
+ 	    gnu_size = NULL_TREE;
+ 	  }
+ 
+ 	/* If this is an aggregate constant initialized to a constant, force it
+ 	   to be statically allocated.  This saves an initialization copy.  */
+ 	if (!static_flag
+ 	    && const_flag
+ 	    && gnu_expr
+ 	    && TREE_CONSTANT (gnu_expr)
+ 	    && AGGREGATE_TYPE_P (gnu_type)
+ 	    && tree_fits_uhwi_p (TYPE_SIZE_UNIT (gnu_type))
+ 	    && !(TYPE_IS_PADDING_P (gnu_type)
+ 		 && !tree_fits_uhwi_p (TYPE_SIZE_UNIT
+ 				       (TREE_TYPE (TYPE_FIELDS (gnu_type))))))
+ 	  static_flag = true;
+ 
+ 	/* If this is an aliased object with an unconstrained array nominal
+ 	   subtype, we make its type a thin reference, i.e. the reference
+ 	   counterpart of a thin pointer, so it points to the array part.
+ 	   This is aimed to make it easier for the debugger to decode the
+ 	   object.  Note that we have to do it this late because of the
+ 	   couple of allocation adjustments that might be made above.  */
+ 	if (Is_Constr_Subt_For_UN_Aliased (gnat_type)
+ 	    && Is_Array_Type (Underlying_Type (gnat_type))
+ 	    && !type_annotate_only)
+ 	  {
+ 	    /* In case the object with the template has already been allocated
+ 	       just above, we have nothing to do here.  */
+ 	    if (!TYPE_IS_THIN_POINTER_P (gnu_type))
+ 	      {
+ 		/* This variable is a GNAT encoding used by Workbench: let it
+ 		   go through the debugging information but mark it as
+ 		   artificial: users are not interested in it.  */
+ 		tree gnu_unc_var
+ 		   = create_var_decl (concat_name (gnu_entity_name, "UNC"),
+ 				      NULL_TREE, gnu_type, gnu_expr,
+ 				      const_flag, Is_Public (gnat_entity),
+ 				      imported_p || !definition, static_flag,
+ 				      volatile_flag, true,
+ 				      debug_info_p && definition,
+ 				      NULL, gnat_entity);
+ 		gnu_expr = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_unc_var);
+ 		TREE_CONSTANT (gnu_expr) = 1;
+ 
+ 		used_by_ref = true;
+ 		const_flag = true;
+ 		volatile_flag = false;
+ 		inner_const_flag = TREE_READONLY (gnu_unc_var);
+ 		gnu_size = NULL_TREE;
+ 	      }
+ 
+ 	    tree gnu_array = gnat_to_gnu_type (Base_Type (gnat_type));
+ 	    gnu_type
+ 	      = build_reference_type (TYPE_OBJECT_RECORD_TYPE (gnu_array));
+ 	  }
+ 
+ 	/* Convert the expression to the type of the object if need be.  */
+ 	if (gnu_expr && initial_value_needs_conversion (gnu_type, gnu_expr))
+ 	  gnu_expr = convert (gnu_type, gnu_expr);
+ 
+ 	/* If this name is external or a name was specified, use it, but don't
+ 	   use the Interface_Name with an address clause (see cd30005).  */
+ 	if ((Is_Public (gnat_entity) && !Is_Imported (gnat_entity))
+ 	    || (Present (Interface_Name (gnat_entity))
+ 		&& No (Address_Clause (gnat_entity))))
+ 	  gnu_ext_name = create_concat_name (gnat_entity, NULL);
+ 
+ 	/* Deal with a pragma Linker_Section on a constant or variable.  */
+ 	if ((kind == E_Constant || kind == E_Variable)
+ 	    && Present (Linker_Section_Pragma (gnat_entity)))
+ 	  prepend_one_attribute_pragma (&attr_list,
+ 					Linker_Section_Pragma (gnat_entity));
+ 
+ 	/* Now create the variable or the constant and set various flags.  */
+ 	gnu_decl
+ 	  = create_var_decl (gnu_entity_name, gnu_ext_name, gnu_type,
+ 			     gnu_expr, const_flag, Is_Public (gnat_entity),
+ 			     imported_p || !definition, static_flag,
+ 			     volatile_flag, artificial_p,
+ 			     debug_info_p && definition, attr_list,
+ 			     gnat_entity);
+ 	DECL_BY_REF_P (gnu_decl) = used_by_ref;
+ 	DECL_POINTS_TO_READONLY_P (gnu_decl) = used_by_ref && inner_const_flag;
+ 	DECL_CAN_NEVER_BE_NULL_P (gnu_decl) = Can_Never_Be_Null (gnat_entity);
+ 
+ 	/* If we are defining an Out parameter and optimization isn't enabled,
+ 	   create a fake PARM_DECL for debugging purposes and make it point to
+ 	   the VAR_DECL.  Suppress debug info for the latter but make sure it
+ 	   will live in memory so that it can be accessed from within the
+ 	   debugger through the PARM_DECL.  */
+ 	if (kind == E_Out_Parameter
+ 	    && definition
+ 	    && debug_info_p
+ 	    && !optimize
+ 	    && !flag_generate_lto)
+ 	  {
+ 	    tree param = create_param_decl (gnu_entity_name, gnu_type);
+ 	    gnat_pushdecl (param, gnat_entity);
+ 	    SET_DECL_VALUE_EXPR (param, gnu_decl);
+ 	    DECL_HAS_VALUE_EXPR_P (param) = 1;
+ 	    DECL_IGNORED_P (gnu_decl) = 1;
+ 	    TREE_ADDRESSABLE (gnu_decl) = 1;
+ 	  }
+ 
+ 	/* If this is a loop parameter, set the corresponding flag.  */
+ 	else if (kind == E_Loop_Parameter)
+ 	  DECL_LOOP_PARM_P (gnu_decl) = 1;
+ 
+ 	/* If this is a constant and we are defining it or it generates a real
+ 	   symbol at the object level and we are referencing it, we may want
+ 	   or need to have a true variable to represent it:
+ 	     - if the constant is public and not overlaid on something else,
+ 	     - if its address is taken,
+ 	     - if it is aliased,
+ 	     - if optimization isn't enabled, for debugging purposes.  */
+ 	if (TREE_CODE (gnu_decl) == CONST_DECL
+ 	    && (definition || Sloc (gnat_entity) > Standard_Location)
+ 	    && ((Is_Public (gnat_entity) && No (Address_Clause (gnat_entity)))
+ 		|| Address_Taken (gnat_entity)
+ 		|| Is_Aliased (gnat_entity)
+ 		|| (!optimize && debug_info_p)))
+ 	  {
+ 	    tree gnu_corr_var
+ 	      = create_var_decl (gnu_entity_name, gnu_ext_name, gnu_type,
+ 				 gnu_expr, true, Is_Public (gnat_entity),
+ 				 !definition, static_flag, volatile_flag,
+ 				 artificial_p, debug_info_p && definition,
+ 				 attr_list, gnat_entity, false);
+ 
+ 	    SET_DECL_CONST_CORRESPONDING_VAR (gnu_decl, gnu_corr_var);
+ 	    DECL_IGNORED_P (gnu_decl) = 1;
+ 	  }
+ 
+ 	/* If this is a constant, even if we don't need a true variable, we
+ 	   may need to avoid returning the initializer in every case.  That
+ 	   can happen for the address of a (constant) constructor because,
+ 	   upon dereferencing it, the constructor will be reinjected in the
+ 	   tree, which may not be valid in every case; see lvalue_required_p
+ 	   for more details.  */
+ 	if (TREE_CODE (gnu_decl) == CONST_DECL)
+ 	  DECL_CONST_ADDRESS_P (gnu_decl) = constructor_address_p (gnu_expr);
+ 
+ 	/* If this object is declared in a block that contains a block with an
+ 	   exception handler, and we aren't using the GCC exception mechanism,
+ 	   we must force this variable in memory in order to avoid an invalid
+ 	   optimization.  */
+ 	if (Front_End_Exceptions ()
+ 	    && Has_Nested_Block_With_Handler (Scope (gnat_entity)))
+ 	  TREE_ADDRESSABLE (gnu_decl) = 1;
+ 
+ 	/* If this is a local variable with non-BLKmode and aggregate type,
+ 	   and optimization isn't enabled, then force it in memory so that
+ 	   a register won't be allocated to it with possible subparts left
+ 	   uninitialized and reaching the register allocator.  */
+ 	else if (TREE_CODE (gnu_decl) == VAR_DECL
+ 		 && !DECL_EXTERNAL (gnu_decl)
+ 		 && !TREE_STATIC (gnu_decl)
+ 		 && DECL_MODE (gnu_decl) != BLKmode
+ 		 && AGGREGATE_TYPE_P (TREE_TYPE (gnu_decl))
+ 		 && !TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_decl))
+ 		 && !optimize)
+ 	  TREE_ADDRESSABLE (gnu_decl) = 1;
+ 
+ 	/* If we are defining an object with variable size or an object with
+ 	   fixed size that will be dynamically allocated, and we are using the
+ 	   front-end setjmp/longjmp exception mechanism, update the setjmp
+ 	   buffer.  */
+ 	if (definition
+ 	    && Exception_Mechanism == Front_End_SJLJ
+ 	    && get_block_jmpbuf_decl ()
+ 	    && DECL_SIZE_UNIT (gnu_decl)
+ 	    && (TREE_CODE (DECL_SIZE_UNIT (gnu_decl)) != INTEGER_CST
+ 		|| (flag_stack_check == GENERIC_STACK_CHECK
+ 		    && compare_tree_int (DECL_SIZE_UNIT (gnu_decl),
+ 					 STACK_CHECK_MAX_VAR_SIZE) > 0)))
+ 	  add_stmt_with_node (build_call_n_expr
+ 			      (update_setjmp_buf_decl, 1,
+ 			       build_unary_op (ADDR_EXPR, NULL_TREE,
+ 					       get_block_jmpbuf_decl ())),
+ 			      gnat_entity);
+ 
+ 	/* Back-annotate Esize and Alignment of the object if not already
+ 	   known.  Note that we pick the values of the type, not those of
+ 	   the object, to shield ourselves from low-level platform-dependent
+ 	   adjustments like alignment promotion.  This is both consistent with
+ 	   all the treatment above, where alignment and size are set on the
+ 	   type of the object and not on the object directly, and makes it
+ 	   possible to support all confirming representation clauses.  */
+ 	annotate_object (gnat_entity, TREE_TYPE (gnu_decl), gnu_object_size,
+ 			 used_by_ref);
+       }
+       break;
+ 
+     case E_Void:
+       /* Return a TYPE_DECL for "void" that we previously made.  */
+       gnu_decl = TYPE_NAME (void_type_node);
+       break;
+ 
+     case E_Enumeration_Type:
+       /* A special case: for the types Character and Wide_Character in
+ 	 Standard, we do not list all the literals.  So if the literals
+ 	 are not specified, make this an integer type.  */
+       if (No (First_Literal (gnat_entity)))
+ 	{
+ 	  if (esize == CHAR_TYPE_SIZE && flag_signed_char)
+ 	    gnu_type = make_signed_type (CHAR_TYPE_SIZE);
+ 	  else
+ 	    gnu_type = make_unsigned_type (esize);
+ 	  TYPE_NAME (gnu_type) = gnu_entity_name;
+ 
+ 	  /* Set TYPE_STRING_FLAG for Character and Wide_Character types.
+ 	     This is needed by the DWARF-2 back-end to distinguish between
+ 	     unsigned integer types and character types.  */
+ 	  TYPE_STRING_FLAG (gnu_type) = 1;
+ 
+ 	  /* This flag is needed by the call just below.  */
+ 	  TYPE_ARTIFICIAL (gnu_type) = artificial_p;
+ 
+ 	  finish_character_type (gnu_type);
+ 	}
+       else
+ 	{
+ 	  /* We have a list of enumeral constants in First_Literal.  We make a
+ 	     CONST_DECL for each one and build into GNU_LITERAL_LIST the list
+ 	     to be placed into TYPE_FIELDS.  Each node is itself a TREE_LIST
+ 	     whose TREE_VALUE is the literal name and whose TREE_PURPOSE is the
+ 	     value of the literal.  But when we have a regular boolean type, we
+ 	     simplify this a little by using a BOOLEAN_TYPE.  */
+ 	  const bool is_boolean = Is_Boolean_Type (gnat_entity)
+ 				  && !Has_Non_Standard_Rep (gnat_entity);
+ 	  const bool is_unsigned = Is_Unsigned_Type (gnat_entity);
+ 	  tree gnu_list = NULL_TREE;
+ 	  Entity_Id gnat_literal;
+ 
+ 	  /* Boolean types with foreign convention have precision 1.  */
+ 	  if (is_boolean && foreign)
+ 	    esize = 1;
+ 
+ 	  gnu_type = make_node (is_boolean ? BOOLEAN_TYPE : ENUMERAL_TYPE);
+ 	  TYPE_PRECISION (gnu_type) = esize;
+ 	  TYPE_UNSIGNED (gnu_type) = is_unsigned;
+ 	  set_min_and_max_values_for_integral_type (gnu_type, esize,
+ 						    TYPE_SIGN (gnu_type));
+ 	  process_attributes (&gnu_type, &attr_list, true, gnat_entity);
+ 	  layout_type (gnu_type);
+ 
+ 	  for (gnat_literal = First_Literal (gnat_entity);
+ 	       Present (gnat_literal);
+ 	       gnat_literal = Next_Literal (gnat_literal))
+ 	    {
+ 	      tree gnu_value
+ 		= UI_To_gnu (Enumeration_Rep (gnat_literal), gnu_type);
+ 	      /* Do not generate debug info for individual enumerators.  */
+ 	      tree gnu_literal
+ 		= create_var_decl (get_entity_name (gnat_literal), NULL_TREE,
+ 				   gnu_type, gnu_value, true, false, false,
+ 				   false, false, artificial_p, false,
+ 				   NULL, gnat_literal);
+ 	      save_gnu_tree (gnat_literal, gnu_literal, false);
+ 	      gnu_list
+ 	        = tree_cons (DECL_NAME (gnu_literal), gnu_value, gnu_list);
+ 	    }
+ 
+ 	  if (!is_boolean)
+ 	    TYPE_VALUES (gnu_type) = nreverse (gnu_list);
+ 
+ 	  /* Note that the bounds are updated at the end of this function
+ 	     to avoid an infinite recursion since they refer to the type.  */
+ 	  goto discrete_type;
+ 	}
+       break;
+ 
+     case E_Signed_Integer_Type:
+       /* For integer types, just make a signed type the appropriate number
+ 	 of bits.  */
+       gnu_type = make_signed_type (esize);
+       goto discrete_type;
+ 
+     case E_Ordinary_Fixed_Point_Type:
+     case E_Decimal_Fixed_Point_Type:
+       {
+ 	/* Small_Value is the scale factor.  */
+ 	const Ureal gnat_small_value = Small_Value (gnat_entity);
+ 	tree scale_factor = NULL_TREE;
+ 
+ 	gnu_type = make_signed_type (esize);
+ 
+ 	/* When encoded as 1/2**N or 1/10**N, describe the scale factor as a
+ 	   binary or decimal scale: it is easier to read for humans.  */
+ 	if (UI_Eq (Numerator (gnat_small_value), Uint_1)
+ 	    && (Rbase (gnat_small_value) == 2
+ 		|| Rbase (gnat_small_value) == 10))
+ 	  {
+ 	    tree base
+ 	      = build_int_cst (integer_type_node, Rbase (gnat_small_value));
+ 	    tree exponent
+ 	      = build_int_cst (integer_type_node,
+ 			       UI_To_Int (Denominator (gnat_small_value)));
+ 	    scale_factor
+ 	      = build2 (RDIV_EXPR, integer_type_node,
+ 			integer_one_node,
+ 			build2 (POWER_EXPR, integer_type_node,
+ 				base, exponent));
+ 	  }
+ 
+ 	/* Use the arbitrary scale factor description.  Note that we support
+ 	   a Small_Value whose magnitude is larger than 64-bit even on 32-bit
+ 	   platforms, so we unconditionally use a (dummy) 128-bit type.  */
+ 	else
+ 	  {
+ 	    const Uint gnat_num = Norm_Num (gnat_small_value);
+ 	    const Uint gnat_den = Norm_Den (gnat_small_value);
+ 	    tree gnu_small_type = make_unsigned_type (128);
+ 	    tree gnu_num = UI_To_gnu (gnat_num, gnu_small_type);
+ 	    tree gnu_den = UI_To_gnu (gnat_den, gnu_small_type);
+ 
+ 	    scale_factor
+ 	      = build2 (RDIV_EXPR, gnu_small_type, gnu_num, gnu_den);
+ 	  }
+ 
+ 	TYPE_FIXED_POINT_P (gnu_type) = 1;
+ 	SET_TYPE_SCALE_FACTOR (gnu_type, scale_factor);
+       }
+       goto discrete_type;
+ 
+     case E_Modular_Integer_Type:
+       {
+ 	/* Packed Array Impl. Types are supposed to be subtypes only.  */
+ 	gcc_assert (!Is_Packed_Array_Impl_Type (gnat_entity));
+ 
+ 	/* For modular types, make the unsigned type of the proper number
+ 	   of bits and then set up the modulus, if required.  */
+ 	gnu_type = make_unsigned_type (esize);
+ 
+ 	/* Get the modulus in this type.  If the modulus overflows, assume
+ 	   that this is because it was equal to 2**Esize.  Note that there
+ 	   is no overflow checking done on unsigned types, so we detect the
+ 	   overflow by looking for a modulus of zero, which is invalid.  */
+ 	tree gnu_modulus = UI_To_gnu (Modulus (gnat_entity), gnu_type);
+ 
+ 	/* If the modulus is not 2**Esize, then this also means that the upper
+ 	   bound of the type, i.e. modulus - 1, is not maximal, so we create an
+ 	   extra subtype to carry it and set the modulus on the base type.  */
+ 	if (!integer_zerop (gnu_modulus))
+ 	  {
+ 	    TYPE_NAME (gnu_type) = create_concat_name (gnat_entity, "UMT");
+ 	    TYPE_MODULAR_P (gnu_type) = 1;
+ 	    SET_TYPE_MODULUS (gnu_type, gnu_modulus);
+ 	    tree gnu_high = fold_build2 (MINUS_EXPR, gnu_type, gnu_modulus,
+ 					 build_int_cst (gnu_type, 1));
+ 	    gnu_type
+ 	      = create_extra_subtype (gnu_type, TYPE_MIN_VALUE (gnu_type),
+ 				      gnu_high);
+ 	  }
+       }
+       goto discrete_type;
+ 
+     case E_Signed_Integer_Subtype:
+     case E_Enumeration_Subtype:
+     case E_Modular_Integer_Subtype:
+     case E_Ordinary_Fixed_Point_Subtype:
+     case E_Decimal_Fixed_Point_Subtype:
+ 
+       /* For integral subtypes, we make a new INTEGER_TYPE.  Note that we do
+ 	 not want to call create_range_type since we would like each subtype
+ 	 node to be distinct.  ??? Historically this was in preparation for
+ 	 when memory aliasing is implemented, but that's obsolete now given
+ 	 the call to relate_alias_sets below.
+ 
+ 	 The TREE_TYPE field of the INTEGER_TYPE points to the base type;
+ 	 this fact is used by the arithmetic conversion functions.
+ 
+ 	 We elaborate the Ancestor_Subtype if it is not in the current unit
+ 	 and one of our bounds is non-static.  We do this to ensure consistent
+ 	 naming in the case where several subtypes share the same bounds, by
+ 	 elaborating the first such subtype first, thus using its name.  */
+ 
+       if (!definition
+ 	  && Present (Ancestor_Subtype (gnat_entity))
+ 	  && !In_Extended_Main_Code_Unit (Ancestor_Subtype (gnat_entity))
+ 	  && (!Compile_Time_Known_Value (Type_Low_Bound (gnat_entity))
+ 	      || !Compile_Time_Known_Value (Type_High_Bound (gnat_entity))))
+ 	gnat_to_gnu_entity (Ancestor_Subtype (gnat_entity), gnu_expr, false);
+ 
+       /* Set the precision to the Esize except for bit-packed arrays.  */
+       if (Is_Packed_Array_Impl_Type (gnat_entity))
+ 	esize = UI_To_Int (RM_Size (gnat_entity));
+ 
+       /* Boolean types with foreign convention have precision 1.  */
+       if (Is_Boolean_Type (gnat_entity) && foreign)
+ 	{
+ 	  gnu_type = make_node (BOOLEAN_TYPE);
+ 	  TYPE_PRECISION (gnu_type) = 1;
+ 	  TYPE_UNSIGNED (gnu_type) = 1;
+ 	  set_min_and_max_values_for_integral_type (gnu_type, 1, UNSIGNED);
+ 	  layout_type (gnu_type);
+ 	}
+       /* First subtypes of Character are treated as Character; otherwise
+ 	 this should be an unsigned type if the base type is unsigned or
+ 	 if the lower bound is constant and non-negative or if the type
+ 	 is biased.  However, even if the lower bound is constant and
+ 	 non-negative, we use a signed type for a subtype with the same
+ 	 size as its signed base type, because this eliminates useless
+ 	 conversions to it and gives more leeway to the optimizer; but
+ 	 this means that we will need to explicitly test for this case
+ 	 when we change the representation based on the RM size.  */
+       else if (kind == E_Enumeration_Subtype
+ 	  && No (First_Literal (Etype (gnat_entity)))
+ 	  && Esize (gnat_entity) == RM_Size (gnat_entity)
+ 	  && esize == CHAR_TYPE_SIZE
+ 	  && flag_signed_char)
+ 	gnu_type = make_signed_type (CHAR_TYPE_SIZE);
+       else if (Is_Unsigned_Type (Underlying_Type (Etype (gnat_entity)))
+ 	       || (Esize (Etype (gnat_entity)) != Esize (gnat_entity)
+ 		   && Is_Unsigned_Type (gnat_entity))
+ 	       || Has_Biased_Representation (gnat_entity))
+ 	gnu_type = make_unsigned_type (esize);
+       else
+ 	gnu_type = make_signed_type (esize);
+       TREE_TYPE (gnu_type) = get_unpadded_type (Etype (gnat_entity));
+ 
+       SET_TYPE_RM_MIN_VALUE
+ 	(gnu_type, elaborate_expression (Type_Low_Bound (gnat_entity),
+ 					 gnat_entity, "L", definition, true,
+ 					 debug_info_p));
+ 
+       SET_TYPE_RM_MAX_VALUE
+ 	(gnu_type, elaborate_expression (Type_High_Bound (gnat_entity),
+ 					 gnat_entity, "U", definition, true,
+ 					 debug_info_p));
+ 
+       if (TREE_CODE (gnu_type) == INTEGER_TYPE)
+ 	TYPE_BIASED_REPRESENTATION_P (gnu_type)
+ 	  = Has_Biased_Representation (gnat_entity);
+ 
+       /* Do the same processing for Character subtypes as for types.  */
+       if (TREE_CODE (TREE_TYPE (gnu_type)) == INTEGER_TYPE
+ 	  && TYPE_STRING_FLAG (TREE_TYPE (gnu_type)))
+ 	{
+ 	  TYPE_NAME (gnu_type) = gnu_entity_name;
+ 	  TYPE_STRING_FLAG (gnu_type) = 1;
+ 	  TYPE_ARTIFICIAL (gnu_type) = artificial_p;
+ 	  finish_character_type (gnu_type);
+ 	}
+ 
+       /* Inherit our alias set from what we're a subtype of.  Subtypes
+ 	 are not different types and a pointer can designate any instance
+ 	 within a subtype hierarchy.  */
+       relate_alias_sets (gnu_type, TREE_TYPE (gnu_type), ALIAS_SET_COPY);
+ 
+       /* One of the above calls might have caused us to be elaborated,
+ 	 so don't blow up if so.  */
+       if (present_gnu_tree (gnat_entity))
+ 	{
+ 	  maybe_present = true;
+ 	  break;
+ 	}
+ 
+       /* Attach the TYPE_STUB_DECL in case we have a parallel type.  */
+       TYPE_STUB_DECL (gnu_type)
+ 	= create_type_stub_decl (gnu_entity_name, gnu_type);
+ 
+     discrete_type:
+ 
+       /* We have to handle clauses that under-align the type specially.  */
+       if ((Present (Alignment_Clause (gnat_entity))
+ 	   || (Is_Packed_Array_Impl_Type (gnat_entity)
+ 	       && Present
+ 		  (Alignment_Clause (Original_Array_Type (gnat_entity)))))
+ 	  && UI_Is_In_Int_Range (Alignment (gnat_entity)))
+ 	{
+ 	  align = UI_To_Int (Alignment (gnat_entity)) * BITS_PER_UNIT;
+ 	  if (align >= TYPE_ALIGN (gnu_type))
+ 	    align = 0;
+ 	}
+ 
+       /* If the type we are dealing with represents a bit-packed array,
+ 	 we need to have the bits left justified on big-endian targets
+ 	 and right justified on little-endian targets.  We also need to
+ 	 ensure that when the value is read (e.g. for comparison of two
+ 	 such values), we only get the good bits, since the unused bits
+ 	 are uninitialized.  Both goals are accomplished by wrapping up
+ 	 the modular type in an enclosing record type.  */
+       if (Is_Packed_Array_Impl_Type (gnat_entity))
+ 	{
+ 	  tree gnu_field_type, gnu_field, t;
+ 
+ 	  gcc_assert (Is_Bit_Packed_Array (Original_Array_Type (gnat_entity)));
+ 	  TYPE_BIT_PACKED_ARRAY_TYPE_P (gnu_type) = 1;
+ 
+ 	  /* Make the original array type a parallel/debug type.  */
+ 	  if (debug_info_p)
+ 	    {
+ 	      tree gnu_name
+ 		= associate_original_type_to_packed_array (gnu_type,
+ 							   gnat_entity);
+ 	      if (gnu_name)
+ 		gnu_entity_name = gnu_name;
+ 	    }
+ 
+ 	  /* Set the RM size before wrapping up the original type.  */
+ 	  SET_TYPE_RM_SIZE (gnu_type,
+ 			    UI_To_gnu (RM_Size (gnat_entity), bitsizetype));
+ 
+ 	  /* Create a stripped-down declaration, mainly for debugging.  */
+ 	  t = create_type_decl (gnu_entity_name, gnu_type, true, debug_info_p,
+ 				gnat_entity);
+ 
+ 	  /* Now save it and build the enclosing record type.  */
+ 	  gnu_field_type = gnu_type;
+ 
+ 	  gnu_type = make_node (RECORD_TYPE);
+ 	  TYPE_NAME (gnu_type) = create_concat_name (gnat_entity, "JM");
+ 	  TYPE_PACKED (gnu_type) = 1;
+ 	  TYPE_SIZE (gnu_type) = TYPE_SIZE (gnu_field_type);
+ 	  TYPE_SIZE_UNIT (gnu_type) = TYPE_SIZE_UNIT (gnu_field_type);
+ 	  SET_TYPE_ADA_SIZE (gnu_type, TYPE_RM_SIZE (gnu_field_type));
+ 
+ 	  /* Propagate the alignment of the modular type to the record type,
+ 	     unless there is an alignment clause that under-aligns the type.
+ 	     This means that bit-packed arrays are given "ceil" alignment for
+ 	     their size by default, which may seem counter-intuitive but makes
+ 	     it possible to overlay them on modular types easily.  */
+ 	  SET_TYPE_ALIGN (gnu_type,
+ 			  align > 0 ? align : TYPE_ALIGN (gnu_field_type));
+ 
+ 	  /* Propagate the reverse storage order flag to the record type so
+ 	     that the required byte swapping is performed when retrieving the
+ 	     enclosed modular value.  */
+ 	  TYPE_REVERSE_STORAGE_ORDER (gnu_type)
+ 	    = Reverse_Storage_Order (Original_Array_Type (gnat_entity));
+ 
+ 	  relate_alias_sets (gnu_type, gnu_field_type, ALIAS_SET_COPY);
+ 
+ 	  /* Don't declare the field as addressable since we won't be taking
+ 	     its address and this would prevent create_field_decl from making
+ 	     a bitfield.  */
+ 	  gnu_field
+ 	    = create_field_decl (get_identifier ("OBJECT"), gnu_field_type,
+ 				 gnu_type, NULL_TREE, bitsize_zero_node, 1, 0);
+ 
+ 	  /* We will output additional debug info manually below.  */
+ 	  finish_record_type (gnu_type, gnu_field, 2, false);
+ 	  TYPE_JUSTIFIED_MODULAR_P (gnu_type) = 1;
+ 
+ 	  /* Make the original array type a parallel/debug type.  Note that
+ 	     gnat_get_array_descr_info needs a TYPE_IMPL_PACKED_ARRAY_P type
+ 	     so we use an intermediate step for standard DWARF.  */
+ 	  if (debug_info_p)
+ 	    {
+ 	      if (gnat_encodings != DWARF_GNAT_ENCODINGS_ALL)
+ 		SET_TYPE_DEBUG_TYPE (gnu_type, gnu_field_type);
+ 	      else if (DECL_PARALLEL_TYPE (t))
+ 		add_parallel_type (gnu_type, DECL_PARALLEL_TYPE (t));
+ 	    }
+ 	}
+ 
+       /* If the type we are dealing with has got a smaller alignment than the
+ 	 natural one, we need to wrap it up in a record type and misalign the
+ 	 latter; we reuse the padding machinery for this purpose.  */
+       else if (align > 0)
+ 	{
+ 	  tree gnu_size = UI_To_gnu (RM_Size (gnat_entity), bitsizetype);
+ 
+ 	  /* Set the RM size before wrapping the type.  */
+ 	  SET_TYPE_RM_SIZE (gnu_type, gnu_size);
+ 
+ 	  /* Create a stripped-down declaration, mainly for debugging.  */
+ 	  create_type_decl (gnu_entity_name, gnu_type, true, debug_info_p,
+ 			    gnat_entity);
+ 
+ 	  gnu_type
+ 	    = maybe_pad_type (gnu_type, TYPE_SIZE (gnu_type), align,
+ 			      gnat_entity, false, definition, false);
+ 
+ 	  TYPE_PACKED (gnu_type) = 1;
+ 	  SET_TYPE_ADA_SIZE (gnu_type, gnu_size);
+ 	}
+ 
+       break;
+ 
+     case E_Floating_Point_Type:
+       /* The type of the Low and High bounds can be our type if this is
+ 	 a type from Standard, so set them at the end of the function.  */
+       gnu_type = make_node (REAL_TYPE);
+       TYPE_PRECISION (gnu_type) = fp_size_to_prec (esize);
+       layout_type (gnu_type);
+       break;
+ 
+     case E_Floating_Point_Subtype:
+       /* See the E_Signed_Integer_Subtype case for the rationale.  */
+       if (!definition
+ 	  && Present (Ancestor_Subtype (gnat_entity))
+ 	  && !In_Extended_Main_Code_Unit (Ancestor_Subtype (gnat_entity))
+ 	  && (!Compile_Time_Known_Value (Type_Low_Bound (gnat_entity))
+ 	      || !Compile_Time_Known_Value (Type_High_Bound (gnat_entity))))
+ 	gnat_to_gnu_entity (Ancestor_Subtype (gnat_entity), gnu_expr, false);
+ 
+       gnu_type = make_node (REAL_TYPE);
+       TREE_TYPE (gnu_type) = get_unpadded_type (Etype (gnat_entity));
+       TYPE_PRECISION (gnu_type) = fp_size_to_prec (esize);
+       TYPE_GCC_MIN_VALUE (gnu_type)
+ 	= TYPE_GCC_MIN_VALUE (TREE_TYPE (gnu_type));
+       TYPE_GCC_MAX_VALUE (gnu_type)
+ 	= TYPE_GCC_MAX_VALUE (TREE_TYPE (gnu_type));
+       layout_type (gnu_type);
+ 
+       SET_TYPE_RM_MIN_VALUE
+ 	(gnu_type, elaborate_expression (Type_Low_Bound (gnat_entity),
+ 					 gnat_entity, "L", definition, true,
+ 					 debug_info_p));
+ 
+       SET_TYPE_RM_MAX_VALUE
+ 	(gnu_type, elaborate_expression (Type_High_Bound (gnat_entity),
+ 					 gnat_entity, "U", definition, true,
+ 					 debug_info_p));
+ 
+       /* Inherit our alias set from what we're a subtype of, as for
+ 	 integer subtypes.  */
+       relate_alias_sets (gnu_type, TREE_TYPE (gnu_type), ALIAS_SET_COPY);
+ 
+       /* One of the above calls might have caused us to be elaborated,
+ 	 so don't blow up if so.  */
+       maybe_present = true;
+       break;
+ 
+       /* Array Types and Subtypes
+ 
+ 	 In GNAT unconstrained array types are represented by E_Array_Type and
+ 	 constrained array types are represented by E_Array_Subtype.  They are
+ 	 translated into UNCONSTRAINED_ARRAY_TYPE and ARRAY_TYPE respectively.
+ 	 But there are no actual objects of an unconstrained array type; all we
+ 	 have are pointers to that type.  In addition to the type node itself,
+ 	 4 other types associated with it are built in the process:
+ 
+ 	   1. the array type (suffix XUA) containing the actual data,
+ 
+ 	   2. the template type (suffix XUB) containng the bounds,
+ 
+ 	   3. the fat pointer type (suffix XUP) representing a pointer or a
+ 	      reference to the unconstrained array type:
+ 		XUP = struct { XUA *, XUB * }
+ 
+ 	   4. the object record type (suffix XUT) containing bounds and data:
+ 		XUT = struct { XUB, XUA }
+ 
+ 	 The bounds of the array type XUA (de)reference the XUB * field of a
+ 	 PLACEHOLDER_EXPR for the fat pointer type XUP, so the array type XUA
+ 	 is to be interpreted in the context of the fat pointer type XUB for
+ 	 debug info purposes.  */
+ 
+     case E_Array_Type:
+       {
+ 	const Entity_Id PAT = Packed_Array_Impl_Type (gnat_entity);
+ 	const bool convention_fortran_p
+ 	  = (Convention (gnat_entity) == Convention_Fortran);
+ 	const int ndim = Number_Dimensions (gnat_entity);
+ 	tree gnu_template_type;
+ 	tree gnu_ptr_template;
+ 	tree gnu_template_reference, gnu_template_fields, gnu_fat_type;
+ 	tree *gnu_index_types = XALLOCAVEC (tree, ndim);
+ 	tree *gnu_temp_fields = XALLOCAVEC (tree, ndim);
+ 	tree gnu_max_size = size_one_node, tem, obj;
+ 	Entity_Id gnat_index;
+ 	int index;
+ 	tree comp_type;
+ 
+ 	/* Create the type for the component now, as it simplifies breaking
+ 	   type reference loops.  */
+ 	comp_type
+ 	  = gnat_to_gnu_component_type (gnat_entity, definition, debug_info_p);
+ 	if (present_gnu_tree (gnat_entity))
+ 	  {
+ 	    /* As a side effect, the type may have been translated.  */
+ 	    maybe_present = true;
+ 	    break;
+ 	  }
+ 
+ 	/* We complete an existing dummy fat pointer type in place.  This both
+ 	   avoids further complex adjustments in update_pointer_to and yields
+ 	   better debugging information in DWARF by leveraging the support for
+ 	   incomplete declarations of "tagged" types in the DWARF back-end.  */
+ 	gnu_type = get_dummy_type (gnat_entity);
+ 	if (gnu_type && TYPE_POINTER_TO (gnu_type))
+ 	  {
+ 	    gnu_fat_type = TYPE_MAIN_VARIANT (TYPE_POINTER_TO (gnu_type));
+ 	    TYPE_NAME (gnu_fat_type) = NULL_TREE;
+ 	    gnu_ptr_template =
+ 	      TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (gnu_fat_type)));
+ 	    gnu_template_type = TREE_TYPE (gnu_ptr_template);
+ 
+ 	    /* Save the contents of the dummy type for update_pointer_to.  */
+ 	    TYPE_POINTER_TO (gnu_type) = copy_type (gnu_fat_type);
+ 	    TYPE_FIELDS (TYPE_POINTER_TO (gnu_type))
+ 	      = copy_node (TYPE_FIELDS (gnu_fat_type));
+ 	    DECL_CHAIN (TYPE_FIELDS (TYPE_POINTER_TO (gnu_type)))
+ 	      = copy_node (DECL_CHAIN (TYPE_FIELDS (gnu_fat_type)));
+ 	  }
+ 	else
+ 	  {
+ 	    gnu_fat_type = make_node (RECORD_TYPE);
+ 	    gnu_template_type = make_node (RECORD_TYPE);
+ 	    gnu_ptr_template = build_pointer_type (gnu_template_type);
+ 	  }
+ 
+ 	/* Make a node for the array.  If we are not defining the array
+ 	   suppress expanding incomplete types.  */
+ 	gnu_type = make_node (UNCONSTRAINED_ARRAY_TYPE);
+ 
+ 	if (!definition)
+ 	  {
+ 	    defer_incomplete_level++;
+ 	    this_deferred = true;
+ 	  }
+ 
+ 	/* Build the fat pointer type.  Use a "void *" object instead of
+ 	   a pointer to the array type since we don't have the array type
+ 	   yet (it will reference the fat pointer via the bounds).  Note
+ 	   that we reuse the existing fields of a dummy type because for:
+ 
+ 	     type Arr is array (Positive range <>) of Element_Type;
+ 	     type Array_Ref is access Arr;
+ 	     Var : Array_Ref := Null;
+ 
+ 	   in a declarative part, Arr will be frozen only after Var, which
+ 	   means that the fields used in the CONSTRUCTOR built for Null are
+ 	   those of the dummy type, which in turn means that COMPONENT_REFs
+ 	   of Var may be built with these fields.  Now if COMPONENT_REFs of
+ 	   Var are also built later with the fields of the final type, the
+ 	   aliasing machinery may consider that the accesses are distinct
+ 	   if the FIELD_DECLs are distinct as objects.  */
+ 	if (COMPLETE_TYPE_P (gnu_fat_type))
+ 	  {
+ 	    tem = TYPE_FIELDS (gnu_fat_type);
+ 	    TREE_TYPE (tem) = ptr_type_node;
+ 	    TREE_TYPE (DECL_CHAIN (tem)) = gnu_ptr_template;
+ 	    TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (gnu_fat_type)) = 0;
+ 	    for (tree t = gnu_fat_type; t; t = TYPE_NEXT_VARIANT (t))
+ 	      SET_TYPE_UNCONSTRAINED_ARRAY (t, gnu_type);
+ 	  }
+ 	else
+ 	  {
+ 	    /* We make the fields addressable for the sake of compatibility
+ 	       with languages for which the regular fields are addressable.  */
+ 	    tem
+ 	      = create_field_decl (get_identifier ("P_ARRAY"),
+ 				   ptr_type_node, gnu_fat_type,
+ 				   NULL_TREE, NULL_TREE, 0, 1);
+ 	    DECL_CHAIN (tem)
+ 	      = create_field_decl (get_identifier ("P_BOUNDS"),
+ 				   gnu_ptr_template, gnu_fat_type,
+ 				   NULL_TREE, NULL_TREE, 0, 1);
+ 	    finish_fat_pointer_type (gnu_fat_type, tem);
+ 	    SET_TYPE_UNCONSTRAINED_ARRAY (gnu_fat_type, gnu_type);
+ 	  }
+ 
+ 	/* If the GNAT encodings are used, give the fat pointer type a name.
+ 	   If this is a packed type implemented specially, tell the debugger
+ 	   how to interpret the underlying bits by fetching the name of the
+ 	   implementation type.  But, in any case, mark it as artificial so
+ 	   the debugger can skip it.  */
+ 	const Entity_Id gnat_name
+ 	  = Present (PAT) && gnat_encodings == DWARF_GNAT_ENCODINGS_ALL
+ 	    ? PAT
+ 	    : gnat_entity;
+ 	tree xup_name
+ 	  = gnat_encodings == DWARF_GNAT_ENCODINGS_ALL
+ 	    ? create_concat_name (gnat_name, "XUP")
+ 	    : gnu_entity_name;
+ 	create_type_decl (xup_name, gnu_fat_type, true, debug_info_p,
+ 			  gnat_entity);
+ 
+ 	/* Build a reference to the template from a PLACEHOLDER_EXPR that
+ 	   is the fat pointer.  This will be used to access the individual
+ 	   fields once we build them.  */
+ 	tem = build3 (COMPONENT_REF, gnu_ptr_template,
+ 		      build0 (PLACEHOLDER_EXPR, gnu_fat_type),
+ 		      DECL_CHAIN (TYPE_FIELDS (gnu_fat_type)), NULL_TREE);
+ 	gnu_template_reference
+ 	  = build_unary_op (INDIRECT_REF, gnu_template_type, tem);
+ 	TREE_READONLY (gnu_template_reference) = 1;
+ 	TREE_THIS_NOTRAP (gnu_template_reference) = 1;
+ 
+ 	/* Now create the GCC type for each index and add the fields for that
+ 	   index to the template.  */
+ 	for (index = (convention_fortran_p ? ndim - 1 : 0),
+ 	     gnat_index = First_Index (gnat_entity);
+ 	     IN_RANGE (index, 0, ndim - 1);
+ 	     index += (convention_fortran_p ? - 1 : 1),
+ 	     gnat_index = Next_Index (gnat_index))
+ 	  {
+ 	    const bool is_flb
+ 	      = Is_Fixed_Lower_Bound_Index_Subtype (Etype (gnat_index));
+ 	    tree gnu_index_type = get_unpadded_type (Etype (gnat_index));
+ 	    tree gnu_orig_min = TYPE_MIN_VALUE (gnu_index_type);
+ 	    tree gnu_orig_max = TYPE_MAX_VALUE (gnu_index_type);
+ 	    tree gnu_index_base_type = get_base_type (gnu_index_type);
+ 	    tree gnu_lb_field, gnu_hb_field;
+ 	    tree gnu_min, gnu_max, gnu_high;
+ 	    char field_name[16];
+ 
+ 	    /* Update the maximum size of the array in elements.  */
+ 	    if (gnu_max_size)
+ 	      gnu_max_size
+ 		= update_n_elem (gnu_max_size, gnu_orig_min, gnu_orig_max);
+ 
+ 	    /* Now build the self-referential bounds of the index type.  */
+ 	    gnu_index_type = maybe_character_type (gnu_index_type);
+ 	    gnu_index_base_type = maybe_character_type (gnu_index_base_type);
+ 
+ 	    /* Make the FIELD_DECLs for the low and high bounds of this
+ 	       type and then make extractions of these fields from the
+ 	       template.  */
+ 	    sprintf (field_name, "LB%d", index);
+ 	    gnu_lb_field = create_field_decl (get_identifier (field_name),
+ 					      gnu_index_type,
+ 					      gnu_template_type, NULL_TREE,
+ 					      NULL_TREE, 0, 0);
+ 	    Sloc_to_locus (Sloc (gnat_entity),
+ 			   &DECL_SOURCE_LOCATION (gnu_lb_field));
+ 
+ 	    field_name[0] = 'U';
+ 	    gnu_hb_field = create_field_decl (get_identifier (field_name),
+ 					      gnu_index_type,
+ 					      gnu_template_type, NULL_TREE,
+ 					      NULL_TREE, 0, 0);
+ 	    Sloc_to_locus (Sloc (gnat_entity),
+ 			   &DECL_SOURCE_LOCATION (gnu_hb_field));
+ 
+ 	    gnu_temp_fields[index] = chainon (gnu_lb_field, gnu_hb_field);
+ 
+ 	    /* We can't use build_component_ref here since the template type
+ 	       isn't complete yet.  */
+ 	    if (!is_flb)
+ 	      {
+ 		gnu_orig_min = build3 (COMPONENT_REF, TREE_TYPE (gnu_lb_field),
+ 				       gnu_template_reference, gnu_lb_field,
+ 				       NULL_TREE);
+ 		TREE_READONLY (gnu_orig_min) = 1;
+ 	      }
+ 
+ 	    gnu_orig_max = build3 (COMPONENT_REF, TREE_TYPE (gnu_hb_field),
+ 				   gnu_template_reference, gnu_hb_field,
+ 				   NULL_TREE);
+ 	    TREE_READONLY (gnu_orig_max) = 1;
+ 
+ 	    gnu_min = convert (sizetype, gnu_orig_min);
+ 	    gnu_max = convert (sizetype, gnu_orig_max);
+ 
+ 	    /* Compute the size of this dimension.  See the E_Array_Subtype
+ 	       case below for the rationale.  */
+ 	    if (is_flb
+ 		&& Nkind (gnat_index) == N_Subtype_Indication
+ 	        && flb_cannot_be_superflat (gnat_index))
+ 	      gnu_high = gnu_max;
+ 
+ 	    else
+ 	      gnu_high
+ 		= build3 (COND_EXPR, sizetype,
+ 			  build2 (GE_EXPR, boolean_type_node,
+ 				  gnu_orig_max, gnu_orig_min),
+ 			  gnu_max,
+ 			  TREE_CODE (gnu_min) == INTEGER_CST
+ 			  ? int_const_binop (MINUS_EXPR, gnu_min, size_one_node)
+ 			  : size_binop (MINUS_EXPR, gnu_min, size_one_node));
+ 
+ 	    /* Make a range type with the new range in the Ada base type.
+ 	       Then make an index type with the size range in sizetype.  */
+ 	    gnu_index_types[index]
+ 	      = create_index_type (gnu_min, gnu_high,
+ 				   create_range_type (gnu_index_base_type,
+ 						      gnu_orig_min,
+ 						      gnu_orig_max),
+ 				   gnat_entity);
+ 
+ 	    TYPE_NAME (gnu_index_types[index])
+ 	      = create_concat_name (gnat_entity, field_name);
+ 	  }
+ 
+ 	/* Install all the fields into the template.  */
+ 	TYPE_NAME (gnu_template_type)
+ 	  = create_concat_name (gnat_entity, "XUB");
+ 	gnu_template_fields = NULL_TREE;
+ 	for (index = 0; index < ndim; index++)
+ 	  gnu_template_fields
+ 	    = chainon (gnu_template_fields, gnu_temp_fields[index]);
+ 	finish_record_type (gnu_template_type, gnu_template_fields, 0,
+ 			    debug_info_p);
+ 	TYPE_CONTEXT (gnu_template_type) = current_function_decl;
+ 
+ 	/* If Component_Size is not already specified, annotate it with the
+ 	   size of the component.  */
+ 	if (!Known_Component_Size (gnat_entity))
+ 	  Set_Component_Size (gnat_entity,
+                               annotate_value (TYPE_SIZE (comp_type)));
+ 
+ 	/* Compute the maximum size of the array in units.  */
+ 	if (gnu_max_size)
+ 	  gnu_max_size
+ 	    = size_binop (MULT_EXPR, gnu_max_size, TYPE_SIZE_UNIT (comp_type));
+ 
+ 	/* Now build the array type.  */
+         tem = comp_type;
+ 	for (index = ndim - 1; index >= 0; index--)
+ 	  {
+ 	    tem = build_nonshared_array_type (tem, gnu_index_types[index]);
+ 	    TYPE_MULTI_ARRAY_P (tem) = (index > 0);
+ 	    TYPE_CONVENTION_FORTRAN_P (tem) = convention_fortran_p;
+ 	    if (index == ndim - 1 && Reverse_Storage_Order (gnat_entity))
+ 	      set_reverse_storage_order_on_array_type (tem);
+ 	    if (array_type_has_nonaliased_component (tem, gnat_entity))
+ 	      set_nonaliased_component_on_array_type (tem);
+ 	  }
+ 
+ 	/* If this is a packed type implemented specially, then process the
+ 	   implementation type so it is elaborated in the proper scope.  */
+ 	if (Present (PAT))
+ 	  gnat_to_gnu_entity (PAT, NULL_TREE, false);
+ 
+ 	/* Otherwise, if an alignment is specified, use it if valid and, if
+ 	   the alignment was requested with an explicit clause, state so.  */
+ 	else if (Known_Alignment (gnat_entity))
+ 	  {
+ 	    SET_TYPE_ALIGN (tem,
+ 			    validate_alignment (Alignment (gnat_entity),
+ 						gnat_entity,
+ 						TYPE_ALIGN (tem)));
+ 	    if (Present (Alignment_Clause (gnat_entity)))
+ 	      TYPE_USER_ALIGN (tem) = 1;
+ 	  }
+ 
+ 	/* Tag top-level ARRAY_TYPE nodes for packed arrays and their
+ 	   implementation types as such so that the debug information back-end
+ 	   can output the appropriate description for them.  */
+ 	TYPE_PACKED (tem)
+ 	  = (Is_Packed (gnat_entity)
+ 	     || Is_Packed_Array_Impl_Type (gnat_entity));
+ 
+ 	if (Treat_As_Volatile (gnat_entity))
+ 	  tem = change_qualified_type (tem, TYPE_QUAL_VOLATILE);
+ 
+ 	/* Adjust the type of the pointer-to-array field of the fat pointer
+ 	   and record the aliasing relationships if necessary.  If this is
+ 	   a packed type implemented specially, then use a ref-all pointer
+ 	   type since the implementation type may vary between constrained
+ 	   subtypes and unconstrained base type.  */
+ 	if (Present (PAT))
+ 	  TREE_TYPE (TYPE_FIELDS (gnu_fat_type))
+ 	    = build_pointer_type_for_mode (tem, ptr_mode, true);
+ 	else
+ 	  TREE_TYPE (TYPE_FIELDS (gnu_fat_type)) = build_pointer_type (tem);
+ 	if (TYPE_ALIAS_SET_KNOWN_P (gnu_fat_type))
+ 	  record_component_aliases (gnu_fat_type);
+ 
+ 	/* If the maximum size doesn't overflow, use it.  */
+ 	if (gnu_max_size
+ 	    && TREE_CODE (gnu_max_size) == INTEGER_CST
+ 	    && !TREE_OVERFLOW (gnu_max_size)
+ 	    && compare_tree_int (gnu_max_size, TYPE_ARRAY_SIZE_LIMIT) <= 0)
+ 	  TYPE_ARRAY_MAX_SIZE (tem) = gnu_max_size;
+ 
+ 	/* See the above description for the rationale.  */
+ 	create_type_decl (create_concat_name (gnat_entity, "XUA"), tem,
+ 			  artificial_p, debug_info_p, gnat_entity);
+ 	TYPE_CONTEXT (tem) = gnu_fat_type;
+ 	TYPE_CONTEXT (TYPE_POINTER_TO (tem)) = gnu_fat_type;
+ 
+ 	/* Create the type to be designated by thin pointers: a record type for
+ 	   the array and its template.  We used to shift the fields to have the
+ 	   template at a negative offset, but this was somewhat of a kludge; we
+ 	   now shift thin pointer values explicitly but only those which have a
+ 	   TYPE_UNCONSTRAINED_ARRAY attached to the designated RECORD_TYPE.
+ 	   If the GNAT encodings are used, give it a name.  */
+ 	tree xut_name
+ 	  = (gnat_encodings == DWARF_GNAT_ENCODINGS_ALL)
+ 	    ? create_concat_name (gnat_name, "XUT")
+ 	    : gnu_entity_name;
+ 	obj = build_unc_object_type (gnu_template_type, tem, xut_name,
+ 				     debug_info_p);
+ 
+ 	SET_TYPE_UNCONSTRAINED_ARRAY (obj, gnu_type);
+ 	TYPE_OBJECT_RECORD_TYPE (gnu_type) = obj;
+ 
+ 	/* The result type is an UNCONSTRAINED_ARRAY_TYPE that indicates the
+ 	   corresponding fat pointer.  */
+ 	TREE_TYPE (gnu_type) = gnu_fat_type;
+ 	TYPE_POINTER_TO (gnu_type) = gnu_fat_type;
+ 	TYPE_REFERENCE_TO (gnu_type) = gnu_fat_type;
+ 	SET_TYPE_MODE (gnu_type, BLKmode);
+ 	SET_TYPE_ALIGN (gnu_type, TYPE_ALIGN (tem));
+       }
+       break;
+ 
+     case E_Array_Subtype:
+ 
+       /* This is the actual data type for array variables.  Multidimensional
+ 	 arrays are implemented as arrays of arrays.  Note that arrays which
+ 	 have sparse enumeration subtypes as index components create sparse
+ 	 arrays, which is obviously space inefficient but so much easier to
+ 	 code for now.
+ 
+ 	 Also note that the subtype never refers to the unconstrained array
+ 	 type, which is somewhat at variance with Ada semantics.
+ 
+ 	 First check to see if this is simply a renaming of the array type.
+ 	 If so, the result is the array type.  */
+ 
+       gnu_type = TYPE_MAIN_VARIANT (gnat_to_gnu_type (Etype (gnat_entity)));
+       if (!Is_Constrained (gnat_entity))
+ 	;
+       else
+ 	{
+ 	  const Entity_Id PAT = Packed_Array_Impl_Type (gnat_entity);
+ 	  Entity_Id gnat_index, gnat_base_index;
+ 	  const bool convention_fortran_p
+ 	    = (Convention (gnat_entity) == Convention_Fortran);
+ 	  const int ndim = Number_Dimensions (gnat_entity);
+ 	  tree gnu_base_type = gnu_type;
+ 	  tree *gnu_index_types = XALLOCAVEC (tree, ndim);
+ 	  tree gnu_max_size = size_one_node;
+ 	  bool need_index_type_struct = false;
+ 	  int index;
+ 
+ 	  /* First create the GCC type for each index and find out whether
+ 	     special types are needed for debugging information.  */
+ 	  for (index = (convention_fortran_p ? ndim - 1 : 0),
+ 	       gnat_index = First_Index (gnat_entity),
+ 	       gnat_base_index
+ 		 = First_Index (Implementation_Base_Type (gnat_entity));
+ 	       IN_RANGE (index, 0, ndim - 1);
+ 	       index += (convention_fortran_p ? - 1 : 1),
+ 	       gnat_index = Next_Index (gnat_index),
+ 	       gnat_base_index = Next_Index (gnat_base_index))
+ 	    {
+ 	      tree gnu_index_type = get_unpadded_type (Etype (gnat_index));
+ 	      tree gnu_orig_min = TYPE_MIN_VALUE (gnu_index_type);
+ 	      tree gnu_orig_max = TYPE_MAX_VALUE (gnu_index_type);
+ 	      tree gnu_index_base_type = get_base_type (gnu_index_type);
+ 	      tree gnu_base_index_type
+ 		= get_unpadded_type (Etype (gnat_base_index));
+ 	      tree gnu_base_orig_min = TYPE_MIN_VALUE (gnu_base_index_type);
+ 	      tree gnu_base_orig_max = TYPE_MAX_VALUE (gnu_base_index_type);
+ 	      tree gnu_min, gnu_max, gnu_high;
+ 
+ 	      /* We try to create subtypes for discriminants used as bounds
+ 		 that are more restrictive than those declared, by using the
+ 		 bounds of the index type of the base array type.  This will
+ 		 make it possible to calculate the maximum size of the record
+ 		 type more conservatively.  This may have already been done by
+ 		 the front-end (Exp_Ch3.Adjust_Discriminants), in which case
+ 		 there will be a conversion that needs to be removed first.  */
+ 	      if (CONTAINS_PLACEHOLDER_P (gnu_orig_min)
+ 		  && TYPE_RM_SIZE (gnu_base_index_type)
+ 		  && tree_int_cst_lt (TYPE_RM_SIZE (gnu_base_index_type),
+ 				      TYPE_RM_SIZE (gnu_index_type)))
+ 		{
+ 		  gnu_orig_min = remove_conversions (gnu_orig_min, false);
+ 		  TREE_TYPE (gnu_orig_min)
+ 		    = create_extra_subtype (TREE_TYPE (gnu_orig_min),
+ 					    gnu_base_orig_min,
+ 					    gnu_base_orig_max);
+ 		}
+ 
+ 	      if (CONTAINS_PLACEHOLDER_P (gnu_orig_max)
+ 		  && TYPE_RM_SIZE (gnu_base_index_type)
+ 		  && tree_int_cst_lt (TYPE_RM_SIZE (gnu_base_index_type),
+ 				      TYPE_RM_SIZE (gnu_index_type)))
+ 		{
+ 		  gnu_orig_max = remove_conversions (gnu_orig_max, false);
+ 		  TREE_TYPE (gnu_orig_max)
+ 		    = create_extra_subtype (TREE_TYPE (gnu_orig_max),
+ 					    gnu_base_orig_min,
+ 					    gnu_base_orig_max);
+ 		}
+ 
+ 	      /* Update the maximum size of the array in elements.  Here we
+ 		 see if any constraint on the index type of the base type
+ 		 can be used in the case of self-referential bounds on the
+ 		 index type of the array type. We look for a non-"infinite"
+ 		 and non-self-referential bound from any type involved and
+ 		 handle each bound separately.  */
+ 	      if (gnu_max_size)
+ 		{
+ 		  if (CONTAINS_PLACEHOLDER_P (gnu_orig_min))
+ 		    gnu_min = gnu_base_orig_min;
+ 		  else
+ 		    gnu_min = gnu_orig_min;
+ 
+ 		  if (TREE_CODE (gnu_min) != INTEGER_CST
+ 		      || TREE_OVERFLOW (gnu_min))
+ 		    gnu_min = TYPE_MIN_VALUE (TREE_TYPE (gnu_min));
+ 
+ 		  if (CONTAINS_PLACEHOLDER_P (gnu_orig_max))
+ 		    gnu_max = gnu_base_orig_max;
+ 		  else
+ 		    gnu_max = gnu_orig_max;
+ 
+ 		  if (TREE_CODE (gnu_max) != INTEGER_CST
+ 		      || TREE_OVERFLOW (gnu_max))
+ 		    gnu_max = TYPE_MAX_VALUE (TREE_TYPE (gnu_max));
+ 
+ 		  gnu_max_size
+ 		    = update_n_elem (gnu_max_size, gnu_min, gnu_max);
+ 		}
+ 
+ 	      /* Convert the bounds to the base type for consistency below.  */
+ 	      gnu_index_base_type = maybe_character_type (gnu_index_base_type);
+ 	      gnu_orig_min = convert (gnu_index_base_type, gnu_orig_min);
+ 	      gnu_orig_max = convert (gnu_index_base_type, gnu_orig_max);
+ 
+ 	      gnu_min = convert (sizetype, gnu_orig_min);
+ 	      gnu_max = convert (sizetype, gnu_orig_max);
+ 
+ 	      /* See if the base array type is already flat.  If it is, we
+ 		 are probably compiling an ACATS test but it will cause the
+ 		 code below to malfunction if we don't handle it specially.  */
+ 	      if (TREE_CODE (gnu_base_orig_min) == INTEGER_CST
+ 		  && TREE_CODE (gnu_base_orig_max) == INTEGER_CST
+ 		  && tree_int_cst_lt (gnu_base_orig_max, gnu_base_orig_min))
+ 		{
+ 		  gnu_min = size_one_node;
+ 		  gnu_max = size_zero_node;
+ 		  gnu_high = gnu_max;
+ 		}
+ 
+ 	      /* Similarly, if one of the values overflows in sizetype and the
+ 		 range is null, use 1..0 for the sizetype bounds.  */
+ 	      else if (TREE_CODE (gnu_min) == INTEGER_CST
+ 		       && TREE_CODE (gnu_max) == INTEGER_CST
+ 		       && (TREE_OVERFLOW (gnu_min) || TREE_OVERFLOW (gnu_max))
+ 		       && tree_int_cst_lt (gnu_orig_max, gnu_orig_min))
+ 		{
+ 		  gnu_min = size_one_node;
+ 		  gnu_max = size_zero_node;
+ 		  gnu_high = gnu_max;
+ 		}
+ 
+ 	      /* If the minimum and maximum values both overflow in sizetype,
+ 		 but the difference in the original type does not overflow in
+ 		 sizetype, ignore the overflow indication.  */
+ 	      else if (TREE_CODE (gnu_min) == INTEGER_CST
+ 		       && TREE_CODE (gnu_max) == INTEGER_CST
+ 		       && TREE_OVERFLOW (gnu_min) && TREE_OVERFLOW (gnu_max)
+ 		       && !TREE_OVERFLOW
+ 			   (convert (sizetype,
+ 				     fold_build2 (MINUS_EXPR,
+ 						  gnu_index_base_type,
+ 						  gnu_orig_max,
+ 						  gnu_orig_min))))
+ 		{
+ 		  TREE_OVERFLOW (gnu_min) = 0;
+ 		  TREE_OVERFLOW (gnu_max) = 0;
+ 		  gnu_high = gnu_max;
+ 		}
+ 
+ 	      /* Compute the size of this dimension in the general case.  We
+ 		 need to provide GCC with an upper bound to use but have to
+ 		 deal with the "superflat" case.  There are three ways to do
+ 		 this.  If we can prove that the array can never be superflat,
+ 		 we can just use the high bound of the index type.  */
+ 	      else if ((Nkind (gnat_index) == N_Range
+ 		        && range_cannot_be_superflat (gnat_index))
+ 		       /* Bit-Packed Array Impl. Types are never superflat.  */
+ 		       || (Is_Packed_Array_Impl_Type (gnat_entity)
+ 			   && Is_Bit_Packed_Array
+ 			      (Original_Array_Type (gnat_entity))))
+ 		gnu_high = gnu_max;
+ 
+ 	      /* Otherwise, if the high bound is constant but the low bound is
+ 		 not, we use the expression (hb >= lb) ? lb : hb + 1 for the
+ 		 lower bound.  Note that the comparison must be done in the
+ 		 original type to avoid any overflow during the conversion.  */
+ 	      else if (TREE_CODE (gnu_max) == INTEGER_CST
+ 		       && TREE_CODE (gnu_min) != INTEGER_CST)
+ 		{
+ 		  gnu_high = gnu_max;
+ 		  gnu_min
+ 		    = build_cond_expr (sizetype,
+ 				       build_binary_op (GE_EXPR,
+ 							boolean_type_node,
+ 							gnu_orig_max,
+ 							gnu_orig_min),
+ 				       gnu_min,
+ 				       int_const_binop (PLUS_EXPR, gnu_max,
+ 							size_one_node));
+ 		}
+ 
+ 	      /* Finally we use (hb >= lb) ? hb : lb - 1 for the upper bound
+ 		 in all the other cases.  Note that we use int_const_binop for
+ 		 the shift by 1 if the bound is constant to avoid any unwanted
+ 		 overflow.  */
+ 	      else
+ 		gnu_high
+ 		  = build_cond_expr (sizetype,
+ 				     build_binary_op (GE_EXPR,
+ 						      boolean_type_node,
+ 						      gnu_orig_max,
+ 						      gnu_orig_min),
+ 				     gnu_max,
+ 				     TREE_CODE (gnu_min) == INTEGER_CST
+ 				     ? int_const_binop (MINUS_EXPR, gnu_min,
+ 							size_one_node)
+ 				     : size_binop (MINUS_EXPR, gnu_min,
+ 						   size_one_node));
+ 
+ 	      /* Reuse the index type for the range type.  Then make an index
+ 		 type with the size range in sizetype.  */
+ 	      gnu_index_types[index]
+ 		= create_index_type (gnu_min, gnu_high, gnu_index_type,
+ 				     gnat_entity);
+ 
+ 	      /* We need special types for debugging information to point to
+ 		 the index types if they have variable bounds, are not integer
+ 		 types, are biased or are wider than sizetype.  These are GNAT
+ 		 encodings, so we have to include them only when all encodings
+ 		 are requested.  */
+ 	      if ((TREE_CODE (gnu_orig_min) != INTEGER_CST
+ 		   || TREE_CODE (gnu_orig_max) != INTEGER_CST
+ 		   || TREE_CODE (gnu_index_type) != INTEGER_TYPE
+ 		   || (TREE_TYPE (gnu_index_type)
+ 		       && TREE_CODE (TREE_TYPE (gnu_index_type))
+ 			  != INTEGER_TYPE)
+ 		   || TYPE_BIASED_REPRESENTATION_P (gnu_index_type))
+ 		  && gnat_encodings == DWARF_GNAT_ENCODINGS_ALL)
+ 		need_index_type_struct = true;
+ 	    }
+ 
+ 	  /* Then flatten: create the array of arrays.  For an array type
+ 	     used to implement a packed array, get the component type from
+ 	     the original array type since the representation clauses that
+ 	     can affect it are on the latter.  */
+ 	  if (Is_Packed_Array_Impl_Type (gnat_entity)
+ 	      && !Is_Bit_Packed_Array (Original_Array_Type (gnat_entity)))
+ 	    {
+ 	      gnu_type = gnat_to_gnu_type (Original_Array_Type (gnat_entity));
+ 	      for (index = ndim - 1; index >= 0; index--)
+ 		gnu_type = TREE_TYPE (gnu_type);
+ 
+ 	      /* One of the above calls might have caused us to be elaborated,
+ 		 so don't blow up if so.  */
+ 	      if (present_gnu_tree (gnat_entity))
+ 		{
+ 		  maybe_present = true;
+ 		  break;
+ 		}
+ 	    }
+ 	  else
+ 	    {
+ 	      gnu_type = gnat_to_gnu_component_type (gnat_entity, definition,
+ 						     debug_info_p);
+ 
+ 	      /* One of the above calls might have caused us to be elaborated,
+ 		 so don't blow up if so.  */
+ 	      if (present_gnu_tree (gnat_entity))
+ 		{
+ 		  maybe_present = true;
+ 		  break;
+ 		}
+ 	    }
+ 
+ 	  /* Compute the maximum size of the array in units.  */
+ 	  if (gnu_max_size)
+ 	    gnu_max_size
+ 	      = size_binop (MULT_EXPR, gnu_max_size, TYPE_SIZE_UNIT (gnu_type));
+ 
+ 	  /* Now build the array type.  */
+ 	  for (index = ndim - 1; index >= 0; index --)
+ 	    {
+ 	      gnu_type = build_nonshared_array_type (gnu_type,
+ 						     gnu_index_types[index]);
+ 	      TYPE_MULTI_ARRAY_P (gnu_type) = (index > 0);
+ 	      TYPE_CONVENTION_FORTRAN_P (gnu_type) = convention_fortran_p;
+ 	      if (index == ndim - 1 && Reverse_Storage_Order (gnat_entity))
+ 		set_reverse_storage_order_on_array_type (gnu_type);
+ 	      if (array_type_has_nonaliased_component (gnu_type, gnat_entity))
+ 		set_nonaliased_component_on_array_type (gnu_type);
+ 
+ 	      /* Kludge to remove the TREE_OVERFLOW flag for the sake of LTO
+ 		 on maximally-sized array types designed by access types.  */
+ 	      if (integer_zerop (TYPE_SIZE (gnu_type))
+ 		  && TREE_OVERFLOW (TYPE_SIZE (gnu_type))
+ 		  && Is_Itype (gnat_entity)
+ 		  && (gnat_temp = Associated_Node_For_Itype (gnat_entity))
+ 		  && IN (Nkind (gnat_temp), N_Declaration)
+ 		  && Is_Access_Type (Defining_Entity (gnat_temp))
+ 		  && Is_Entity_Name (First_Index (gnat_entity))
+ 		  && UI_To_Int (RM_Size (Entity (First_Index (gnat_entity))))
+ 		     == BITS_PER_WORD)
+ 		{
+ 		  TYPE_SIZE (gnu_type) = bitsize_zero_node;
+ 		  TYPE_SIZE_UNIT (gnu_type) = size_zero_node;
+ 		}
+ 	    }
+ 
+ 	  /* Attach the TYPE_STUB_DECL in case we have a parallel type.  */
+ 	  TYPE_STUB_DECL (gnu_type)
+ 	    = create_type_stub_decl (gnu_entity_name, gnu_type);
+ 
+ 	  /* If this is a multi-dimensional array and we are at global level,
+ 	     we need to make a variable corresponding to the stride of the
+ 	     inner dimensions.   */
+ 	  if (ndim > 1 && global_bindings_p ())
+ 	    {
+ 	      tree gnu_arr_type;
+ 
+ 	      for (gnu_arr_type = TREE_TYPE (gnu_type), index = 1;
+ 		   TREE_CODE (gnu_arr_type) == ARRAY_TYPE;
+ 		   gnu_arr_type = TREE_TYPE (gnu_arr_type), index++)
+ 		{
+ 		  tree eltype = TREE_TYPE (gnu_arr_type);
+ 		  char stride_name[32];
+ 
+ 		  sprintf (stride_name, "ST%d", index);
+ 		  TYPE_SIZE (gnu_arr_type)
+ 		    = elaborate_expression_1 (TYPE_SIZE (gnu_arr_type),
+ 					      gnat_entity, stride_name,
+ 					      definition, false);
+ 
+ 		  /* ??? For now, store the size as a multiple of the
+ 		     alignment of the element type in bytes so that we
+ 		     can see the alignment from the tree.  */
+ 		  sprintf (stride_name, "ST%d_A_UNIT", index);
+ 		  TYPE_SIZE_UNIT (gnu_arr_type)
+ 		    = elaborate_expression_2 (TYPE_SIZE_UNIT (gnu_arr_type),
+ 					      gnat_entity, stride_name,
+ 					      definition, false,
+ 					      TYPE_ALIGN (eltype));
+ 
+ 		  /* ??? create_type_decl is not invoked on the inner types so
+ 		     the MULT_EXPR node built above will never be marked.  */
+ 		  MARK_VISITED (TYPE_SIZE_UNIT (gnu_arr_type));
+ 		}
+ 	    }
+ 
+ 	  /* Set the TYPE_PACKED flag on packed array types and also on their
+ 	     implementation types, so that the DWARF back-end can output the
+ 	     appropriate description for them.  */
+ 	  TYPE_PACKED (gnu_type)
+ 	    = (Is_Packed (gnat_entity)
+ 	       || Is_Packed_Array_Impl_Type (gnat_entity));
+ 
+ 	  TYPE_BIT_PACKED_ARRAY_TYPE_P (gnu_type)
+ 	    = (Is_Packed_Array_Impl_Type (gnat_entity)
+ 	       && Is_Bit_Packed_Array (Original_Array_Type (gnat_entity)));
+ 
+ 	  /* If the maximum size doesn't overflow, use it.  */
+ 	  if (gnu_max_size
+ 	      && TREE_CODE (gnu_max_size) == INTEGER_CST
+ 	      && !TREE_OVERFLOW (gnu_max_size)
+ 	      && compare_tree_int (gnu_max_size, TYPE_ARRAY_SIZE_LIMIT) <= 0)
+ 	    TYPE_ARRAY_MAX_SIZE (gnu_type) = gnu_max_size;
+ 
+ 	  /* If we need to write out a record type giving the names of the
+ 	     bounds for debugging purposes, do it now and make the record
+ 	     type a parallel type.  This is not needed for a packed array
+ 	     since the bounds are conveyed by the original array type.  */
+ 	  if (need_index_type_struct
+ 	      && debug_info_p
+ 	      && !Is_Packed_Array_Impl_Type (gnat_entity))
+ 	    {
+ 	      tree gnu_bound_rec = make_node (RECORD_TYPE);
+ 	      tree gnu_field_list = NULL_TREE;
+ 	      tree gnu_field;
+ 
+ 	      TYPE_NAME (gnu_bound_rec)
+ 		= create_concat_name (gnat_entity, "XA");
+ 
+ 	      for (index = ndim - 1; index >= 0; index--)
+ 		{
+ 		  tree gnu_index = TYPE_INDEX_TYPE (gnu_index_types[index]);
+ 		  tree gnu_index_name = TYPE_IDENTIFIER (gnu_index);
+ 
+ 		  /* Make sure to reference the types themselves, and not just
+ 		     their names, as the debugger may fall back on them.  */
+ 		  gnu_field = create_field_decl (gnu_index_name, gnu_index,
+ 						 gnu_bound_rec, NULL_TREE,
+ 						 NULL_TREE, 0, 0);
+ 		  DECL_CHAIN (gnu_field) = gnu_field_list;
+ 		  gnu_field_list = gnu_field;
+ 		}
+ 
+ 	      finish_record_type (gnu_bound_rec, gnu_field_list, 0, true);
+ 	      add_parallel_type (gnu_type, gnu_bound_rec);
+ 	    }
+ 
+ 	  /* If this is a packed array type, make the original array type a
+ 	     parallel/debug type.  Otherwise, if GNAT encodings are used, do
+ 	     it for the base array type if it is not artificial to make sure
+ 	     that it is kept in the debug info.  */
+ 	  if (debug_info_p)
+ 	    {
+ 	      if (Is_Packed_Array_Impl_Type (gnat_entity))
+ 		{
+ 		  tree gnu_name
+ 		    = associate_original_type_to_packed_array (gnu_type,
+ 							       gnat_entity);
+ 		  if (gnu_name)
+ 		    gnu_entity_name = gnu_name;
+ 		}
+ 
+ 	      else if (gnat_encodings == DWARF_GNAT_ENCODINGS_ALL)
+ 		{
+ 		  tree gnu_base_decl
+ 		    = gnat_to_gnu_entity (Etype (gnat_entity), NULL_TREE,
+ 					  false);
+ 
+ 		  if (!DECL_ARTIFICIAL (gnu_base_decl))
+ 		    add_parallel_type (gnu_type,
+ 				       TREE_TYPE (TREE_TYPE (gnu_base_decl)));
+ 		}
+ 	    }
+ 
+ 	  /* Set our alias set to that of our base type.  This gives all
+ 	     array subtypes the same alias set.  */
+ 	  relate_alias_sets (gnu_type, gnu_base_type, ALIAS_SET_COPY);
+ 
+ 	  /* If this is a packed type implemented specially, then replace our
+ 	     type with the implementation type.  */
+ 	  if (Present (PAT))
+ 	    {
+ 	      /* First finish the type we had been making so that we output
+ 		 debugging information for it.  */
+ 	      process_attributes (&gnu_type, &attr_list, false, gnat_entity);
+ 	      if (Treat_As_Volatile (gnat_entity))
+ 		{
+ 		  const int quals
+ 		    = TYPE_QUAL_VOLATILE
+ 		      | (Is_Full_Access (gnat_entity) ? TYPE_QUAL_ATOMIC : 0);
+ 		  gnu_type = change_qualified_type (gnu_type, quals);
+ 		}
+ 	      /* Make it artificial only if the base type was artificial too.
+ 		 That's sort of "morally" true and will make it possible for
+ 		 the debugger to look it up by name in DWARF, which is needed
+ 		 in order to decode the packed array type.  */
+ 	      tree gnu_tmp_decl
+ 		= create_type_decl (gnu_entity_name, gnu_type,
+ 				    !Comes_From_Source (Etype (gnat_entity))
+ 				    && artificial_p, debug_info_p,
+ 				    gnat_entity);
+ 	      /* Save it as our equivalent in case the call below elaborates
+ 		 this type again.  */
+ 	      save_gnu_tree (gnat_entity, gnu_tmp_decl, false);
+ 
+ 	      gnu_type = gnat_to_gnu_type (PAT);
+ 	      save_gnu_tree (gnat_entity, NULL_TREE, false);
+ 
+ 	      /* Set the ___XP suffix for GNAT encodings.  */
+ 	      if (gnat_encodings == DWARF_GNAT_ENCODINGS_ALL)
+ 		gnu_entity_name = DECL_NAME (TYPE_NAME (gnu_type));
+ 
+ 	      tree gnu_inner = gnu_type;
+ 	      while (TREE_CODE (gnu_inner) == RECORD_TYPE
+ 		     && (TYPE_JUSTIFIED_MODULAR_P (gnu_inner)
+ 			 || TYPE_PADDING_P (gnu_inner)))
+ 		gnu_inner = TREE_TYPE (TYPE_FIELDS (gnu_inner));
+ 
+ 	      /* We need to attach the index type to the type we just made so
+ 		 that the actual bounds can later be put into a template.  */
+ 	      if ((TREE_CODE (gnu_inner) == ARRAY_TYPE
+ 		   && !TYPE_ACTUAL_BOUNDS (gnu_inner))
+ 		  || (TREE_CODE (gnu_inner) == INTEGER_TYPE
+ 		      && !TYPE_HAS_ACTUAL_BOUNDS_P (gnu_inner)))
+ 		{
+ 		  if (TREE_CODE (gnu_inner) == INTEGER_TYPE)
+ 		    {
+ 		      /* The TYPE_ACTUAL_BOUNDS field is overloaded with the
+ 			 TYPE_MODULUS for modular types so we make an extra
+ 			 subtype if necessary.  */
+ 		      if (TYPE_MODULAR_P (gnu_inner))
+ 			gnu_inner
+ 			  = create_extra_subtype (gnu_inner,
+ 						  TYPE_MIN_VALUE (gnu_inner),
+ 						  TYPE_MAX_VALUE (gnu_inner));
+ 
+ 		      TYPE_HAS_ACTUAL_BOUNDS_P (gnu_inner) = 1;
+ 
+ 		      /* Check for other cases of overloading.  */
+ 		      gcc_checking_assert (!TYPE_ACTUAL_BOUNDS (gnu_inner));
+ 		    }
+ 
+ 		  for (Entity_Id gnat_index = First_Index (gnat_entity);
+ 		       Present (gnat_index);
+ 		       gnat_index = Next_Index (gnat_index))
+ 		    SET_TYPE_ACTUAL_BOUNDS
+ 		      (gnu_inner,
+ 		       tree_cons (NULL_TREE,
+ 				  get_unpadded_type (Etype (gnat_index)),
+ 				  TYPE_ACTUAL_BOUNDS (gnu_inner)));
+ 
+ 		  if (Convention (gnat_entity) != Convention_Fortran)
+ 		    SET_TYPE_ACTUAL_BOUNDS
+ 		      (gnu_inner, nreverse (TYPE_ACTUAL_BOUNDS (gnu_inner)));
+ 
+ 		  if (TREE_CODE (gnu_type) == RECORD_TYPE
+ 		      && TYPE_JUSTIFIED_MODULAR_P (gnu_type))
+ 		    TREE_TYPE (TYPE_FIELDS (gnu_type)) = gnu_inner;
+ 		}
+ 	    }
+ 	}
+       break;
+ 
+     case E_String_Literal_Subtype:
+       /* Create the type for a string literal.  */
+       {
+ 	Entity_Id gnat_full_type
+ 	  = (Is_Private_Type (Etype (gnat_entity))
+ 	     && Present (Full_View (Etype (gnat_entity)))
+ 	     ? Full_View (Etype (gnat_entity)) : Etype (gnat_entity));
+ 	tree gnu_string_type = get_unpadded_type (gnat_full_type);
+ 	tree gnu_string_array_type
+ 	  = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_string_type))));
+ 	tree gnu_string_index_type
+ 	  = get_base_type (TREE_TYPE (TYPE_INDEX_TYPE
+ 				      (TYPE_DOMAIN (gnu_string_array_type))));
+ 	tree gnu_lower_bound
+ 	  = convert (gnu_string_index_type,
+ 		     gnat_to_gnu (String_Literal_Low_Bound (gnat_entity)));
+ 	tree gnu_length
+ 	  = UI_To_gnu (String_Literal_Length (gnat_entity),
+ 		       gnu_string_index_type);
+ 	tree gnu_upper_bound
+ 	  = build_binary_op (PLUS_EXPR, gnu_string_index_type,
+ 			     gnu_lower_bound,
+ 			     int_const_binop (MINUS_EXPR, gnu_length,
+ 					      convert (gnu_string_index_type,
+ 						       integer_one_node)));
+ 	tree gnu_index_type
+ 	  = create_index_type (convert (sizetype, gnu_lower_bound),
+ 			       convert (sizetype, gnu_upper_bound),
+ 			       create_range_type (gnu_string_index_type,
+ 						  gnu_lower_bound,
+ 						  gnu_upper_bound),
+ 			       gnat_entity);
+ 
+ 	gnu_type
+ 	  = build_nonshared_array_type (gnat_to_gnu_type
+ 					(Component_Type (gnat_entity)),
+ 					gnu_index_type);
+ 	if (array_type_has_nonaliased_component (gnu_type, gnat_entity))
+ 	  set_nonaliased_component_on_array_type (gnu_type);
+ 	relate_alias_sets (gnu_type, gnu_string_type, ALIAS_SET_COPY);
+       }
+       break;
+ 
+     /* Record Types and Subtypes
+ 
+        A record type definition is transformed into the equivalent of a C
+        struct definition.  The fields that are the discriminants which are
+        found in the Full_Type_Declaration node and the elements of the
+        Component_List found in the Record_Type_Definition node.  The
+        Component_List can be a recursive structure since each Variant of
+        the Variant_Part of the Component_List has a Component_List.
+ 
+        Processing of a record type definition comprises starting the list of
+        field declarations here from the discriminants and the calling the
+        function components_to_record to add the rest of the fields from the
+        component list and return the gnu type node.  The function
+        components_to_record will call itself recursively as it traverses
+        the tree.  */
+ 
+     case E_Record_Type:
+       {
+ 	Node_Id record_definition = Type_Definition (gnat_decl);
+ 
+ 	if (Has_Complex_Representation (gnat_entity))
+ 	  {
+ 	    const Node_Id first_component
+ 	      = First (Component_Items (Component_List (record_definition)));
+ 	    tree gnu_component_type
+ 	      = get_unpadded_type (Etype (Defining_Entity (first_component)));
+ 	    gnu_type = build_complex_type (gnu_component_type);
+ 	    break;
+ 	  }
+ 
+ 	Node_Id gnat_constr;
+ 	Entity_Id gnat_field, gnat_parent_type;
+ 	tree gnu_field, gnu_field_list = NULL_TREE;
+ 	tree gnu_get_parent;
+ 	/* Set PACKED in keeping with gnat_to_gnu_field.  */
+ 	const int packed
+ 	  = Is_Packed (gnat_entity)
+ 	    ? 1
+ 	    : Component_Alignment (gnat_entity) == Calign_Storage_Unit
+ 	      ? -1
+ 	      : 0;
+ 	const bool has_align = Known_Alignment (gnat_entity);
+ 	const bool has_discr = Has_Discriminants (gnat_entity);
+ 	const bool is_extension
+ 	  = (Is_Tagged_Type (gnat_entity)
+ 	     && Nkind (record_definition) == N_Derived_Type_Definition);
+ 	const bool has_rep
+ 	  = is_extension
+ 	    ? Has_Record_Rep_Clause (gnat_entity)
+ 	    : Has_Specified_Layout (gnat_entity);
+ 	const bool is_unchecked_union = Is_Unchecked_Union (gnat_entity);
+ 	bool all_rep = has_rep;
+ 
+ 	/* See if all fields have a rep clause.  Stop when we find one
+ 	   that doesn't.  */
+ 	if (all_rep)
+ 	  for (gnat_field = First_Entity (gnat_entity);
+ 	       Present (gnat_field);
+ 	       gnat_field = Next_Entity (gnat_field))
+ 	    if ((Ekind (gnat_field) == E_Component
+ 		 || (Ekind (gnat_field) == E_Discriminant
+ 		     && !is_unchecked_union))
+ 		&& No (Component_Clause (gnat_field)))
+ 	      {
+ 		all_rep = false;
+ 		break;
+ 	      }
+ 
+ 	/* If this is a record extension, go a level further to find the
+ 	   record definition.  Also, verify we have a Parent_Subtype.  */
+ 	if (is_extension)
+ 	  {
+ 	    if (!type_annotate_only
+ 		|| Present (Record_Extension_Part (record_definition)))
+ 	      record_definition = Record_Extension_Part (record_definition);
+ 
+ 	    gcc_assert (Present (Parent_Subtype (gnat_entity))
+ 		        || type_annotate_only);
+ 	  }
+ 
+ 	/* Make a node for the record type.  */
+ 	gnu_type = make_node (tree_code_for_record_type (gnat_entity));
+ 	TYPE_NAME (gnu_type) = gnu_entity_name;
+ 	TYPE_PACKED (gnu_type) = (packed != 0) || has_align || has_rep;
+ 	TYPE_REVERSE_STORAGE_ORDER (gnu_type)
+ 	  = Reverse_Storage_Order (gnat_entity);
+ 
+ 	/* If the record type has discriminants, pointers to it may also point
+ 	   to constrained subtypes of it, so mark it as may_alias for LTO.  */
+ 	if (has_discr)
+ 	  prepend_one_attribute
+ 	    (&attr_list, ATTR_MACHINE_ATTRIBUTE,
+ 	     get_identifier ("may_alias"), NULL_TREE,
+ 	     gnat_entity);
+ 
+ 	process_attributes (&gnu_type, &attr_list, true, gnat_entity);
+ 
+ 	/* If we are not defining it, suppress expanding incomplete types.  */
+ 	if (!definition)
+ 	  {
+ 	    defer_incomplete_level++;
+ 	    this_deferred = true;
+ 	  }
+ 
+ 	/* If both a size and rep clause were specified, put the size on
+ 	   the record type now so that it can get the proper layout.  */
+ 	if (has_rep && Known_RM_Size (gnat_entity))
+ 	  TYPE_SIZE (gnu_type)
+ 	    = UI_To_gnu (RM_Size (gnat_entity), bitsizetype);
+ 
+ 	/* Always set the alignment on the record type here so that it can
+ 	   get the proper layout.  */
+ 	if (has_align)
+ 	  SET_TYPE_ALIGN (gnu_type,
+ 			  validate_alignment (Alignment (gnat_entity),
+ 					      gnat_entity, 0));
+ 	else
+ 	  {
+ 	    SET_TYPE_ALIGN (gnu_type, 0);
+ 
+ 	    /* If a type needs strict alignment, then its type size will also
+ 	       be the RM size (see below).  Cap the alignment if needed, lest
+ 	       it may cause this type size to become too large.  */
+ 	    if (Strict_Alignment (gnat_entity) && Known_RM_Size (gnat_entity))
+ 	      {
+ 		unsigned int max_size = UI_To_Int (RM_Size (gnat_entity));
+ 		unsigned int max_align = max_size & -max_size;
+ 		if (max_align < BIGGEST_ALIGNMENT)
+ 		  TYPE_MAX_ALIGN (gnu_type) = max_align;
+ 	      }
+ 
+ 	    /* Similarly if an Object_Size clause has been specified.  */
+ 	    else if (Known_Esize (gnat_entity))
+ 	      {
+ 		unsigned int max_size = UI_To_Int (Esize (gnat_entity));
+ 		unsigned int max_align = max_size & -max_size;
+ 		if (max_align < BIGGEST_ALIGNMENT)
+ 		  TYPE_MAX_ALIGN (gnu_type) = max_align;
+ 	      }
+ 	  }
+ 
+ 	/* If we have a Parent_Subtype, make a field for the parent.  If
+ 	   this record has rep clauses, force the position to zero.  */
+ 	if (Present (Parent_Subtype (gnat_entity)))
+ 	  {
+ 	    Entity_Id gnat_parent = Parent_Subtype (gnat_entity);
+ 	    tree gnu_dummy_parent_type = make_node (RECORD_TYPE);
+ 	    tree gnu_parent;
+ 	    int parent_packed = 0;
+ 
+ 	    /* A major complexity here is that the parent subtype will
+ 	       reference our discriminants in its Stored_Constraint list.
+ 	       But those must reference the parent component of this record
+ 	       which is precisely of the parent subtype we have not built yet!
+ 	       To break the circle we first build a dummy COMPONENT_REF which
+ 	       represents the "get to the parent" operation and initialize
+ 	       each of those discriminants to a COMPONENT_REF of the above
+ 	       dummy parent referencing the corresponding discriminant of the
+ 	       base type of the parent subtype.  */
+ 	    gnu_get_parent = build3 (COMPONENT_REF, gnu_dummy_parent_type,
+ 				     build0 (PLACEHOLDER_EXPR, gnu_type),
+ 				     build_decl (input_location,
+ 						 FIELD_DECL, NULL_TREE,
+ 						 gnu_dummy_parent_type),
+ 				     NULL_TREE);
+ 
+ 	    if (has_discr)
+ 	      for (gnat_field = First_Stored_Discriminant (gnat_entity);
+ 		   Present (gnat_field);
+ 		   gnat_field = Next_Stored_Discriminant (gnat_field))
+ 		if (Present (Corresponding_Discriminant (gnat_field)))
+ 		  {
+ 		    tree gnu_field
+ 		      = gnat_to_gnu_field_decl (Corresponding_Discriminant
+ 						(gnat_field));
+ 		    save_gnu_tree
+ 		      (gnat_field,
+ 		       build3 (COMPONENT_REF, TREE_TYPE (gnu_field),
+ 			       gnu_get_parent, gnu_field, NULL_TREE),
+ 		       true);
+ 		  }
+ 
+ 	    /* Then we build the parent subtype.  If it has discriminants but
+ 	       the type itself has unknown discriminants, this means that it
+ 	       doesn't contain information about how the discriminants are
+ 	       derived from those of the ancestor type, so it cannot be used
+ 	       directly.  Instead it is built by cloning the parent subtype
+ 	       of the underlying record view of the type, for which the above
+ 	       derivation of discriminants has been made explicit.  */
+ 	    if (Has_Discriminants (gnat_parent)
+ 		&& Has_Unknown_Discriminants (gnat_entity))
+ 	      {
+ 		Entity_Id gnat_uview = Underlying_Record_View (gnat_entity);
+ 
+ 		/* If we are defining the type, the underlying record
+ 		   view must already have been elaborated at this point.
+ 		   Otherwise do it now as its parent subtype cannot be
+ 		   technically elaborated on its own.  */
+ 		if (definition)
+ 		  gcc_assert (present_gnu_tree (gnat_uview));
+ 		else
+ 		  gnat_to_gnu_entity (gnat_uview, NULL_TREE, false);
+ 
+ 		gnu_parent = gnat_to_gnu_type (Parent_Subtype (gnat_uview));
+ 
+ 		/* Substitute the "get to the parent" of the type for that
+ 		   of its underlying record view in the cloned type.  */
+ 		for (gnat_field = First_Stored_Discriminant (gnat_uview);
+ 		     Present (gnat_field);
+ 		     gnat_field = Next_Stored_Discriminant (gnat_field))
+ 		  if (Present (Corresponding_Discriminant (gnat_field)))
+ 		    {
+ 		      tree gnu_field = gnat_to_gnu_field_decl (gnat_field);
+ 		      tree gnu_ref
+ 			= build3 (COMPONENT_REF, TREE_TYPE (gnu_field),
+ 				  gnu_get_parent, gnu_field, NULL_TREE);
+ 		      gnu_parent
+ 			= substitute_in_type (gnu_parent, gnu_field, gnu_ref);
+ 		    }
+ 	      }
+ 	    else
+ 	      gnu_parent = gnat_to_gnu_type (gnat_parent);
+ 
+ 	    /* The parent field needs strict alignment so, if it is to
+ 	       be created with a component clause below, then we need
+ 	       to apply the same adjustment as in gnat_to_gnu_field.  */
+ 	    if (has_rep && TYPE_ALIGN (gnu_type) < TYPE_ALIGN (gnu_parent))
+ 	      {
+ 		/* ??? For historical reasons, we do it on strict-alignment
+ 		   platforms only, where it is really required.  This means
+ 		   that a confirming representation clause will change the
+ 		   behavior of the compiler on the other platforms.  */
+ 		if (STRICT_ALIGNMENT)
+ 		  SET_TYPE_ALIGN (gnu_type, TYPE_ALIGN (gnu_parent));
+ 		else
+ 		  parent_packed
+ 		    = adjust_packed (gnu_parent, gnu_type, parent_packed);
+ 	      }
+ 
+ 	    /* Finally we fix up both kinds of twisted COMPONENT_REF we have
+ 	       initially built.  The discriminants must reference the fields
+ 	       of the parent subtype and not those of its base type for the
+ 	       placeholder machinery to properly work.  */
+ 	    if (has_discr)
+ 	      {
+ 		/* The actual parent subtype is the full view.  */
+ 		if (Is_Private_Type (gnat_parent))
+ 		  {
+ 		    if (Present (Full_View (gnat_parent)))
+ 		      gnat_parent = Full_View (gnat_parent);
+ 		    else
+ 		      gnat_parent = Underlying_Full_View (gnat_parent);
+ 		  }
+ 
+ 		for (gnat_field = First_Stored_Discriminant (gnat_entity);
+ 		     Present (gnat_field);
+ 		     gnat_field = Next_Stored_Discriminant (gnat_field))
+ 		  if (Present (Corresponding_Discriminant (gnat_field)))
+ 		    {
+ 		      Entity_Id field;
+ 		      for (field = First_Stored_Discriminant (gnat_parent);
+ 			   Present (field);
+ 			   field = Next_Stored_Discriminant (field))
+ 			if (same_discriminant_p (gnat_field, field))
+ 			  break;
+ 		      gcc_assert (Present (field));
+ 		      TREE_OPERAND (get_gnu_tree (gnat_field), 1)
+ 			= gnat_to_gnu_field_decl (field);
+ 		    }
+ 	      }
+ 
+ 	    /* The "get to the parent" COMPONENT_REF must be given its
+ 	       proper type...  */
+ 	    TREE_TYPE (gnu_get_parent) = gnu_parent;
+ 
+ 	    /* ...and reference the _Parent field of this record.  */
+ 	    gnu_field
+ 	      = create_field_decl (parent_name_id,
+ 				   gnu_parent, gnu_type,
+ 				   has_rep
+ 				   ? TYPE_SIZE (gnu_parent) : NULL_TREE,
+ 				   has_rep
+ 				   ? bitsize_zero_node : NULL_TREE,
+ 				   parent_packed, 1);
+ 	    DECL_INTERNAL_P (gnu_field) = 1;
+ 	    TREE_OPERAND (gnu_get_parent, 1) = gnu_field;
+ 	    TYPE_FIELDS (gnu_type) = gnu_field;
+ 	  }
+ 
+ 	/* Make the fields for the discriminants and put them into the record
+ 	   unless it's an Unchecked_Union.  */
+ 	if (has_discr)
+ 	  for (gnat_field = First_Stored_Discriminant (gnat_entity);
+ 	       Present (gnat_field);
+ 	       gnat_field = Next_Stored_Discriminant (gnat_field))
+ 	    {
+ 	      /* If this is a record extension and this discriminant is the
+ 		 renaming of another discriminant, we've handled it above.  */
+ 	      if (is_extension
+ 		  && Present (Corresponding_Discriminant (gnat_field)))
+ 		continue;
+ 
+ 	      gnu_field
+ 		= gnat_to_gnu_field (gnat_field, gnu_type, packed, definition,
+ 				     debug_info_p);
+ 
+ 	      /* Make an expression using a PLACEHOLDER_EXPR from the
+ 		 FIELD_DECL node just created and link that with the
+ 		 corresponding GNAT defining identifier.  */
+ 	      save_gnu_tree (gnat_field,
+ 			     build3 (COMPONENT_REF, TREE_TYPE (gnu_field),
+ 				     build0 (PLACEHOLDER_EXPR, gnu_type),
+ 				     gnu_field, NULL_TREE),
+ 			     true);
+ 
+ 	      if (!is_unchecked_union)
+ 		{
+ 		  DECL_CHAIN (gnu_field) = gnu_field_list;
+ 		  gnu_field_list = gnu_field;
+ 		}
+ 	    }
+ 
+ 	/* If we have a derived untagged type that renames discriminants in
+ 	   the parent type, the (stored) discriminants are just a copy of the
+ 	   discriminants of the parent type.  This means that any constraints
+ 	   added by the renaming in the derivation are disregarded as far as
+ 	   the layout of the derived type is concerned.  To rescue them, we
+ 	   change the type of the (stored) discriminants to a subtype with
+ 	   the bounds of the type of the visible discriminants.  */
+ 	if (has_discr
+ 	    && !is_extension
+ 	    && Stored_Constraint (gnat_entity) != No_Elist)
+ 	  for (gnat_constr = First_Elmt (Stored_Constraint (gnat_entity));
+ 	       gnat_constr != No_Elmt;
+ 	       gnat_constr = Next_Elmt (gnat_constr))
+ 	    if (Nkind (Node (gnat_constr)) == N_Identifier
+ 		/* Ignore access discriminants.  */
+ 		&& !Is_Access_Type (Etype (Node (gnat_constr)))
+ 		&& Ekind (Entity (Node (gnat_constr))) == E_Discriminant)
+ 	      {
+ 		const Entity_Id gnat_discr = Entity (Node (gnat_constr));
+ 		tree gnu_discr_type = gnat_to_gnu_type (Etype (gnat_discr));
+ 		tree gnu_ref
+ 		  = gnat_to_gnu_entity (Original_Record_Component (gnat_discr),
+ 					NULL_TREE, false);
+ 
+ 		/* GNU_REF must be an expression using a PLACEHOLDER_EXPR built
+ 		   just above for one of the stored discriminants.  */
+ 		gcc_assert (TREE_TYPE (TREE_OPERAND (gnu_ref, 0)) == gnu_type);
+ 
+ 		if (gnu_discr_type != TREE_TYPE (gnu_ref))
+ 		  TREE_TYPE (gnu_ref)
+ 		    = create_extra_subtype (TREE_TYPE (gnu_ref),
+ 					    TYPE_MIN_VALUE (gnu_discr_type),
+ 					    TYPE_MAX_VALUE (gnu_discr_type));
+ 	      }
+ 
+ 	/* If this is a derived type with discriminants and these discriminants
+ 	   affect the initial shape it has inherited, factor them in.  */
+ 	if (has_discr
+ 	    && !is_extension
+ 	    && !Has_Record_Rep_Clause (gnat_entity)
+ 	    && Stored_Constraint (gnat_entity) != No_Elist
+ 	    && (gnat_parent_type = Underlying_Type (Etype (gnat_entity)))
+ 	    && Is_Record_Type (gnat_parent_type)
+ 	    && Is_Unchecked_Union (gnat_entity)
+ 	       == Is_Unchecked_Union (gnat_parent_type)
+ 	    && No_Reordering (gnat_entity) == No_Reordering (gnat_parent_type))
+ 	  {
+ 	    tree gnu_parent_type
+ 	      = TYPE_MAIN_VARIANT (gnat_to_gnu_type (gnat_parent_type));
+ 
+ 	    if (TYPE_IS_PADDING_P (gnu_parent_type))
+ 	      gnu_parent_type = TREE_TYPE (TYPE_FIELDS (gnu_parent_type));
+ 
+ 	    vec<subst_pair> gnu_subst_list
+ 	      = build_subst_list (gnat_entity, gnat_parent_type, definition);
+ 
+ 	    /* Set the layout of the type to match that of the parent type,
+ 	       doing required substitutions.  Note that, if we do not use the
+ 	       GNAT encodings, we don't need debug info for the inner record
+ 	       types, as they will be part of the embedding variant record's
+ 	       debug info.  */
+ 	    copy_and_substitute_in_layout
+ 	      (gnat_entity, gnat_parent_type, gnu_type, gnu_parent_type,
+ 	       gnu_subst_list,
+ 	       debug_info_p && gnat_encodings == DWARF_GNAT_ENCODINGS_ALL);
+ 	  }
+ 	else
+ 	  {
+ 	    /* Add the fields into the record type and finish it up.  */
+ 	    components_to_record (Component_List (record_definition),
+ 				  gnat_entity, gnu_field_list, gnu_type,
+ 				  packed, definition, false, all_rep,
+ 				  is_unchecked_union, artificial_p,
+ 				  debug_info_p, false,
+ 				  all_rep ? NULL_TREE : bitsize_zero_node,
+ 				  NULL);
+ 
+ 	    /* Empty classes have the size of a storage unit in C++.  */
+ 	    if (TYPE_SIZE (gnu_type) == bitsize_zero_node
+ 		&& Convention (gnat_entity) == Convention_CPP)
+ 	      {
+ 		TYPE_SIZE (gnu_type) = bitsize_unit_node;
+ 		TYPE_SIZE_UNIT (gnu_type) = size_one_node;
+ 		compute_record_mode (gnu_type);
+ 	      }
+ 
+ 	    /* If the type needs strict alignment, then no object of the type
+ 	       may have a size smaller than the natural size, which means that
+ 	       the RM size of the type is equal to the type size.  */
+ 	    if (Strict_Alignment (gnat_entity))
+ 	      SET_TYPE_ADA_SIZE (gnu_type, TYPE_SIZE (gnu_type));
+ 
+ 	    /* If there are entities in the chain corresponding to components
+ 	       that we did not elaborate, ensure we elaborate their types if
+ 	       they are itypes.  */
+ 	    for (gnat_temp = First_Entity (gnat_entity);
+ 		 Present (gnat_temp);
+ 		 gnat_temp = Next_Entity (gnat_temp))
+ 	      if ((Ekind (gnat_temp) == E_Component
+ 		   || Ekind (gnat_temp) == E_Discriminant)
+ 		  && Is_Itype (Etype (gnat_temp))
+ 		  && !present_gnu_tree (gnat_temp))
+ 		gnat_to_gnu_entity (Etype (gnat_temp), NULL_TREE, false);
+ 	  }
+ 
+ 	/* Fill in locations of fields.  */
+ 	annotate_rep (gnat_entity, gnu_type);
+       }
+       break;
+ 
+     case E_Class_Wide_Subtype:
+       /* If an equivalent type is present, that is what we should use.
+ 	 Otherwise, fall through to handle this like a record subtype
+ 	 since it may have constraints.  */
+       if (gnat_equiv_type != gnat_entity)
+ 	{
+ 	  gnu_decl = gnat_to_gnu_entity (gnat_equiv_type, NULL_TREE, false);
+ 	  maybe_present = true;
+ 	  break;
+ 	}
+ 
+       /* ... fall through ... */
+ 
+     case E_Record_Subtype:
+       /* If Cloned_Subtype is Present it means this record subtype has
+ 	 identical layout to that type or subtype and we should use
+ 	 that GCC type for this one.  The front-end guarantees that
+ 	 the component list is shared.  */
+       if (Present (Cloned_Subtype (gnat_entity)))
+ 	{
+ 	  gnu_decl = gnat_to_gnu_entity (Cloned_Subtype (gnat_entity),
+ 					 NULL_TREE, false);
+ 	  gnat_annotate_type = Cloned_Subtype (gnat_entity);
+ 	  maybe_present = true;
+ 	  break;
+ 	}
+ 
+       /* Otherwise, first ensure the base type is elaborated.  Then, if we are
+ 	 changing the type, make a new type with each field having the type of
+ 	 the field in the new subtype but the position computed by transforming
+ 	 every discriminant reference according to the constraints.  We don't
+ 	 see any difference between private and non-private type here since
+ 	 derivations from types should have been deferred until the completion
+ 	 of the private type.  */
+       else
+ 	{
+ 	  Entity_Id gnat_base_type = Implementation_Base_Type (gnat_entity);
+ 
+ 	  if (!definition)
+ 	    {
+ 	      defer_incomplete_level++;
+ 	      this_deferred = true;
+ 	    }
+ 
+ 	  tree gnu_base_type
+ 	    = TYPE_MAIN_VARIANT (gnat_to_gnu_type (gnat_base_type));
+ 
+ 	  if (present_gnu_tree (gnat_entity))
+ 	    {
+ 	      maybe_present = true;
+ 	      break;
+ 	    }
+ 
+ 	  /* When the subtype has discriminants and these discriminants affect
+ 	     the initial shape it has inherited, factor them in.  But for an
+ 	     Unchecked_Union (it must be an itype), just return the type.  */
+ 	  if (Has_Discriminants (gnat_entity)
+ 	      && Stored_Constraint (gnat_entity) != No_Elist
+ 	      && Is_Record_Type (gnat_base_type)
+ 	      && !Is_Unchecked_Union (gnat_base_type))
+ 	    {
+ 	      vec<subst_pair> gnu_subst_list
+ 		= build_subst_list (gnat_entity, gnat_base_type, definition);
+ 	      tree gnu_unpad_base_type;
+ 
+ 	      gnu_type = make_node (RECORD_TYPE);
+ 	      TYPE_NAME (gnu_type) = gnu_entity_name;
+ 	      TYPE_PACKED (gnu_type) = TYPE_PACKED (gnu_base_type);
+ 	      TYPE_REVERSE_STORAGE_ORDER (gnu_type)
+ 		= Reverse_Storage_Order (gnat_entity);
+ 	      process_attributes (&gnu_type, &attr_list, true, gnat_entity);
+ 
+ 	      /* Set the size, alignment and alias set of the type to match
+ 		 those of the base type, doing required substitutions.  */
+ 	      copy_and_substitute_in_size (gnu_type, gnu_base_type,
+ 					   gnu_subst_list);
+ 
+ 	      if (TYPE_IS_PADDING_P (gnu_base_type))
+ 		gnu_unpad_base_type = TREE_TYPE (TYPE_FIELDS (gnu_base_type));
+ 	      else
+ 		gnu_unpad_base_type = gnu_base_type;
+ 
+ 	      /* Set the layout of the type to match that of the base type,
+ 	         doing required substitutions.  We will output debug info
+ 	         manually below so pass false as last argument.  */
+ 	      copy_and_substitute_in_layout (gnat_entity, gnat_base_type,
+ 					     gnu_type, gnu_unpad_base_type,
+ 					     gnu_subst_list, false);
+ 
+ 	      /* Fill in locations of fields.  */
+ 	      annotate_rep (gnat_entity, gnu_type);
+ 
+ 	      /* If debugging information is being written for the type and if
+ 		 we are asked to output GNAT encodings, write a record that
+ 		 shows what we are a subtype of and also make a variable that
+ 		 indicates our size, if still variable.  */
+ 	      if (debug_info_p
+ 		  && gnat_encodings == DWARF_GNAT_ENCODINGS_ALL)
+ 		{
+ 		  tree gnu_subtype_marker = make_node (RECORD_TYPE);
+ 		  tree gnu_unpad_base_name
+ 		    = TYPE_IDENTIFIER (gnu_unpad_base_type);
+ 		  tree gnu_size_unit = TYPE_SIZE_UNIT (gnu_type);
+ 
+ 		  TYPE_NAME (gnu_subtype_marker)
+ 		    = create_concat_name (gnat_entity, "XVS");
+ 		  finish_record_type (gnu_subtype_marker,
+ 				      create_field_decl (gnu_unpad_base_name,
+ 							 build_reference_type
+ 							 (gnu_unpad_base_type),
+ 							 gnu_subtype_marker,
+ 							 NULL_TREE, NULL_TREE,
+ 							 0, 0),
+ 				      0, true);
+ 
+ 		  add_parallel_type (gnu_type, gnu_subtype_marker);
+ 
+ 		  if (definition
+ 		      && TREE_CODE (gnu_size_unit) != INTEGER_CST
+ 		      && !CONTAINS_PLACEHOLDER_P (gnu_size_unit))
+ 		    TYPE_SIZE_UNIT (gnu_subtype_marker)
+ 		      = create_var_decl (create_concat_name (gnat_entity,
+ 							     "XVZ"),
+ 					 NULL_TREE, sizetype, gnu_size_unit,
+ 					 true, false, false, false, false,
+ 					 true, true, NULL, gnat_entity, false);
+ 		}
+ 
+ 	      /* Or else, if the subtype is artificial and GNAT encodings are
+ 		 not used, use the base record type as the debug type.  */
+ 	      else if (debug_info_p
+ 		       && artificial_p
+ 		       && gnat_encodings != DWARF_GNAT_ENCODINGS_ALL)
+ 		SET_TYPE_DEBUG_TYPE (gnu_type, gnu_unpad_base_type);
+ 	    }
+ 
+ 	  /* Otherwise, go down all the components in the new type and make
+ 	     them equivalent to those in the base type.  */
+ 	  else
+ 	    {
+ 	      gnu_type = gnu_base_type;
+ 
+ 	      for (gnat_temp = First_Entity (gnat_entity);
+ 		   Present (gnat_temp);
+ 		   gnat_temp = Next_Entity (gnat_temp))
+ 		if ((Ekind (gnat_temp) == E_Discriminant
+ 		     && !Is_Unchecked_Union (gnat_base_type))
+ 		    || Ekind (gnat_temp) == E_Component)
+ 		  save_gnu_tree (gnat_temp,
+ 				 gnat_to_gnu_field_decl
+ 				 (Original_Record_Component (gnat_temp)),
+ 				 false);
+ 	    }
+ 	}
+       break;
+ 
+     case E_Access_Subprogram_Type:
+     case E_Anonymous_Access_Subprogram_Type:
+       /* Use the special descriptor type for dispatch tables if needed,
+ 	 that is to say for the Prim_Ptr of a-tags.ads and its clones.
+ 	 Note that we are only required to do so for static tables in
+ 	 order to be compatible with the C++ ABI, but Ada 2005 allows
+ 	 to extend library level tagged types at the local level so
+ 	 we do it in the non-static case as well.  */
+       if (TARGET_VTABLE_USES_DESCRIPTORS
+ 	  && Is_Dispatch_Table_Entity (gnat_entity))
+ 	{
+ 	    gnu_type = fdesc_type_node;
+ 	    gnu_size = TYPE_SIZE (gnu_type);
+ 	    break;
+ 	}
+ 
+       /* ... fall through ... */
+ 
+     case E_Allocator_Type:
+     case E_Access_Type:
+     case E_Access_Attribute_Type:
+     case E_Anonymous_Access_Type:
+     case E_General_Access_Type:
+       {
+ 	/* The designated type and its equivalent type for gigi.  */
+ 	Entity_Id gnat_desig_type = Directly_Designated_Type (gnat_entity);
+ 	Entity_Id gnat_desig_equiv = Gigi_Equivalent_Type (gnat_desig_type);
+ 	/* Whether it comes from a limited with.  */
+ 	const bool is_from_limited_with
+ 	  = (Is_Incomplete_Type (gnat_desig_equiv)
+ 	     && From_Limited_With (gnat_desig_equiv));
+ 	/* Whether it is a completed Taft Amendment type.  Such a type is to
+ 	   be treated as coming from a limited with clause if it is not in
+ 	   the main unit, i.e. we break potential circularities here in case
+ 	   the body of an external unit is loaded for inter-unit inlining.  */
+         const bool is_completed_taft_type
+ 	  = (Is_Incomplete_Type (gnat_desig_equiv)
+ 	     && Has_Completion_In_Body (gnat_desig_equiv)
+ 	     && Present (Full_View (gnat_desig_equiv)));
+ 	/* The "full view" of the designated type.  If this is an incomplete
+ 	   entity from a limited with, treat its non-limited view as the full
+ 	   view.  Otherwise, if this is an incomplete or private type, use the
+ 	   full view.  In the former case, we might point to a private type,
+ 	   in which case, we need its full view.  Also, we want to look at the
+ 	   actual type used for the representation, so this takes a total of
+ 	   three steps.  */
+ 	Entity_Id gnat_desig_full_direct_first
+ 	  = (is_from_limited_with
+ 	     ? Non_Limited_View (gnat_desig_equiv)
+ 	     : (Is_Incomplete_Or_Private_Type (gnat_desig_equiv)
+ 		? Full_View (gnat_desig_equiv) : Empty));
+ 	Entity_Id gnat_desig_full_direct
+ 	  = ((is_from_limited_with
+ 	      && Present (gnat_desig_full_direct_first)
+ 	      && Is_Private_Type (gnat_desig_full_direct_first))
+ 	     ? Full_View (gnat_desig_full_direct_first)
+ 	     : gnat_desig_full_direct_first);
+ 	Entity_Id gnat_desig_full
+ 	  = Gigi_Equivalent_Type (gnat_desig_full_direct);
+ 	/* The type actually used to represent the designated type, either
+ 	   gnat_desig_full or gnat_desig_equiv.  */
+ 	Entity_Id gnat_desig_rep;
+ 	/* We want to know if we'll be seeing the freeze node for any
+ 	   incomplete type we may be pointing to.  */
+ 	const bool in_main_unit
+ 	  = (Present (gnat_desig_full)
+ 	     ? In_Extended_Main_Code_Unit (gnat_desig_full)
+ 	     : In_Extended_Main_Code_Unit (gnat_desig_type));
+ 	/* True if we make a dummy type here.  */
+ 	bool made_dummy = false;
+ 	/* The mode to be used for the pointer type.  */
+ 	scalar_int_mode p_mode;
+ 	/* The GCC type used for the designated type.  */
+ 	tree gnu_desig_type = NULL_TREE;
+ 
+ 	if (!int_mode_for_size (esize, 0).exists (&p_mode)
+ 	    || !targetm.valid_pointer_mode (p_mode))
+ 	  p_mode = ptr_mode;
+ 
+ 	/* If either the designated type or its full view is an unconstrained
+ 	   array subtype, replace it with the type it's a subtype of.  This
+ 	   avoids problems with multiple copies of unconstrained array types.
+ 	   Likewise, if the designated type is a subtype of an incomplete
+ 	   record type, use the parent type to avoid order of elaboration
+ 	   issues.  This can lose some code efficiency, but there is no
+ 	   alternative.  */
+ 	if (Ekind (gnat_desig_equiv) == E_Array_Subtype
+ 	    && !Is_Constrained (gnat_desig_equiv))
+ 	  gnat_desig_equiv = Etype (gnat_desig_equiv);
+ 	if (Present (gnat_desig_full)
+ 	    && ((Ekind (gnat_desig_full) == E_Array_Subtype
+ 		 && !Is_Constrained (gnat_desig_full))
+ 		|| (Ekind (gnat_desig_full) == E_Record_Subtype
+ 		    && Ekind (Etype (gnat_desig_full)) == E_Record_Type)))
+ 	  gnat_desig_full = Etype (gnat_desig_full);
+ 
+ 	/* Set the type that's the representation of the designated type.  */
+ 	gnat_desig_rep
+ 	  = Present (gnat_desig_full) ? gnat_desig_full : gnat_desig_equiv;
+ 
+ 	/* If we already know what the full type is, use it.  */
+ 	if (Present (gnat_desig_full) && present_gnu_tree (gnat_desig_full))
+ 	  gnu_desig_type = TREE_TYPE (get_gnu_tree (gnat_desig_full));
+ 
+ 	/* Get the type of the thing we are to point to and build a pointer to
+ 	   it.  If it is a reference to an incomplete or private type with a
+ 	   full view that is a record, an array or an access, make a dummy type
+ 	   and get the actual type later when we have verified it is safe.  */
+ 	else if ((!in_main_unit
+ 		  && !present_gnu_tree (gnat_desig_equiv)
+ 		  && Present (gnat_desig_full)
+ 		  && (Is_Record_Type (gnat_desig_full)
+ 		      || Is_Array_Type (gnat_desig_full)
+ 		      || Is_Access_Type (gnat_desig_full)))
+ 		 /* Likewise if this is a reference to a record, an array or a
+ 		    subprogram type and we are to defer elaborating incomplete
+ 		    types.  We do this because this access type may be the full
+ 		    view of a private type.  */
+ 		 || ((!in_main_unit || imported_p)
+ 		     && defer_incomplete_level != 0
+ 		     && !present_gnu_tree (gnat_desig_equiv)
+ 		     && (Is_Record_Type (gnat_desig_rep)
+ 			 || Is_Array_Type (gnat_desig_rep)
+ 			 || Ekind (gnat_desig_rep) == E_Subprogram_Type))
+ 		 /* If this is a reference from a limited_with type back to our
+ 		    main unit and there's a freeze node for it, either we have
+ 		    already processed the declaration and made the dummy type,
+ 		    in which case we just reuse the latter, or we have not yet,
+ 		    in which case we make the dummy type and it will be reused
+ 		    when the declaration is finally processed.  In both cases,
+ 		    the pointer eventually created below will be automatically
+ 		    adjusted when the freeze node is processed.  */
+ 		 || (in_main_unit
+ 		     && is_from_limited_with
+ 		     && Present (Freeze_Node (gnat_desig_rep))))
+ 	  {
+ 	    gnu_desig_type = make_dummy_type (gnat_desig_equiv);
+ 	    made_dummy = true;
+ 	  }
+ 
+ 	/* Otherwise handle the case of a pointer to itself.  */
+ 	else if (gnat_desig_equiv == gnat_entity)
+ 	  {
+ 	    gnu_type
+ 	      = build_pointer_type_for_mode (void_type_node, p_mode,
+ 					     No_Strict_Aliasing (gnat_entity));
+ 	    TREE_TYPE (gnu_type) = TYPE_POINTER_TO (gnu_type) = gnu_type;
+ 	  }
+ 
+ 	/* If expansion is disabled, the equivalent type of a concurrent type
+ 	   is absent, so we use the void pointer type.  */
+ 	else if (type_annotate_only && No (gnat_desig_equiv))
+ 	  gnu_type = ptr_type_node;
+ 
+ 	/* If the ultimately designated type is an incomplete type with no full
+ 	   view, we use the void pointer type in LTO mode to avoid emitting a
+ 	   dummy type in the GIMPLE IR.  We cannot do that in regular mode as
+ 	   the name of the dummy type in used by GDB for a global lookup.  */
+ 	else if (Ekind (gnat_desig_rep) == E_Incomplete_Type
+ 		 && No (Full_View (gnat_desig_rep))
+ 		 && flag_generate_lto)
+ 	  gnu_type = ptr_type_node;
+ 
+ 	/* Finally, handle the default case where we can just elaborate our
+ 	   designated type.  */
+ 	else
+ 	  gnu_desig_type = gnat_to_gnu_type (gnat_desig_equiv);
+ 
+ 	/* It is possible that a call to gnat_to_gnu_type above resolved our
+ 	   type.  If so, just return it.  */
+ 	if (present_gnu_tree (gnat_entity))
+ 	  {
+ 	    maybe_present = true;
+ 	    break;
+ 	  }
+ 
+ 	/* Access-to-unconstrained-array types need a special treatment.  */
+ 	if (Is_Array_Type (gnat_desig_rep) && !Is_Constrained (gnat_desig_rep))
+ 	  {
+ 	    /* If the processing above got something that has a pointer, then
+ 	       we are done.  This could have happened either because the type
+ 	       was elaborated or because somebody else executed the code.  */
+ 	    if (!TYPE_POINTER_TO (gnu_desig_type))
+ 	      build_dummy_unc_pointer_types (gnat_desig_equiv, gnu_desig_type);
+ 
+ 	    gnu_type = TYPE_POINTER_TO (gnu_desig_type);
+ 	  }
+ 
+ 	/* If we haven't done it yet, build the pointer type the usual way.  */
+ 	else if (!gnu_type)
+ 	  {
+ 	    /* Modify the designated type if we are pointing only to constant
+ 	       objects, but don't do it for a dummy type.  */
+ 	    if (Is_Access_Constant (gnat_entity)
+ 		&& !TYPE_IS_DUMMY_P (gnu_desig_type))
+ 	      gnu_desig_type
+ 		= change_qualified_type (gnu_desig_type, TYPE_QUAL_CONST);
+ 
+ 	    gnu_type
+ 	      = build_pointer_type_for_mode (gnu_desig_type, p_mode,
+ 					     No_Strict_Aliasing (gnat_entity));
+ 	  }
+ 
+ 	/* If the designated type is not declared in the main unit and we made
+ 	   a dummy node for it, save our definition, elaborate the actual type
+ 	   and replace the dummy type we made with the actual one.  But if we
+ 	   are to defer actually looking up the actual type, make an entry in
+ 	   the deferred list instead.  If this is from a limited with, we may
+ 	   have to defer until the end of the current unit.  */
+ 	if (!in_main_unit && made_dummy)
+ 	  {
+ 	    if (TYPE_IS_FAT_POINTER_P (gnu_type) && esize == POINTER_SIZE)
+ 	      gnu_type
+ 		= build_pointer_type (TYPE_OBJECT_RECORD_TYPE (gnu_desig_type));
+ 
+ 	    process_attributes (&gnu_type, &attr_list, false, gnat_entity);
+ 	    gnu_decl = create_type_decl (gnu_entity_name, gnu_type,
+ 					 artificial_p, debug_info_p,
+ 					 gnat_entity);
+ 	    this_made_decl = true;
+ 	    gnu_type = TREE_TYPE (gnu_decl);
+ 	    save_gnu_tree (gnat_entity, gnu_decl, false);
+ 	    saved = true;
+ 
+ 	    if (defer_incomplete_level == 0
+ 		&& !is_from_limited_with
+ 		&& !is_completed_taft_type)
+ 	      {
+ 		update_pointer_to (TYPE_MAIN_VARIANT (gnu_desig_type),
+ 				   gnat_to_gnu_type (gnat_desig_equiv));
+ 	      }
+ 	    else
+ 	      {
+ 		struct incomplete *p = XNEW (struct incomplete);
+ 		struct incomplete **head
+ 		  = (is_from_limited_with || is_completed_taft_type
+ 		     ? &defer_limited_with_list : &defer_incomplete_list);
+ 
+ 		p->old_type = gnu_desig_type;
+ 		p->full_type = gnat_desig_equiv;
+ 		p->next = *head;
+ 		*head = p;
+ 	      }
+ 	  }
+       }
+       break;
+ 
+     case E_Access_Protected_Subprogram_Type:
+     case E_Anonymous_Access_Protected_Subprogram_Type:
+       /* If we are just annotating types and have no equivalent record type,
+ 	 just use the void pointer type.  */
+       if (type_annotate_only && gnat_equiv_type == gnat_entity)
+ 	gnu_type = ptr_type_node;
+ 
+       /* The run-time representation is the equivalent type.  */
+       else
+ 	{
+ 	  gnu_type = gnat_to_gnu_type (gnat_equiv_type);
+ 	  maybe_present = true;
+ 	}
+ 
+       /* The designated subtype must be elaborated as well, if it does
+ 	 not have its own freeze node.  */
+       if (Is_Itype (Directly_Designated_Type (gnat_entity))
+ 	  && !present_gnu_tree (Directly_Designated_Type (gnat_entity))
+ 	  && No (Freeze_Node (Directly_Designated_Type (gnat_entity)))
+ 	  && !Is_Record_Type (Scope (Directly_Designated_Type (gnat_entity))))
+ 	gnat_to_gnu_entity (Directly_Designated_Type (gnat_entity),
+ 			    NULL_TREE, false);
+ 
+       break;
+ 
+     case E_Access_Subtype:
+       /* We treat this as identical to its base type; any constraint is
+ 	 meaningful only to the front-end.  */
+       gnu_decl = gnat_to_gnu_entity (gnat_equiv_type, NULL_TREE, false);
+       maybe_present = true;
+ 
+       /* The designated subtype must be elaborated as well, if it does
+ 	 not have its own freeze node.  But designated subtypes created
+ 	 for constrained components of records with discriminants are
+ 	 not frozen by the front-end and not elaborated here, because
+ 	 their use may appear before the base type is frozen and it is
+ 	 not clear that they are needed in gigi.  With the current model,
+ 	 there is no correct place where they could be elaborated.  */
+       if (Is_Itype (Directly_Designated_Type (gnat_entity))
+ 	  && !present_gnu_tree (Directly_Designated_Type (gnat_entity))
+ 	  && Is_Frozen (Directly_Designated_Type (gnat_entity))
+ 	  && No (Freeze_Node (Directly_Designated_Type (gnat_entity))))
+ 	{
+ 	  /* If we are to defer elaborating incomplete types, make a dummy
+ 	     type node and elaborate it later.  */
+ 	  if (defer_incomplete_level != 0)
+ 	    {
+ 	      struct incomplete *p = XNEW (struct incomplete);
+ 
+ 	      p->old_type
+ 		= make_dummy_type (Directly_Designated_Type (gnat_entity));
+ 	      p->full_type = Directly_Designated_Type (gnat_entity);
+ 	      p->next = defer_incomplete_list;
+ 	      defer_incomplete_list = p;
+ 	    }
+ 	  else if (!Is_Incomplete_Or_Private_Type
+ 		      (Base_Type (Directly_Designated_Type (gnat_entity))))
+ 	    gnat_to_gnu_entity (Directly_Designated_Type (gnat_entity),
+ 				NULL_TREE, false);
+ 	}
+       break;
+ 
+     /* Subprogram Entities
+ 
+        The following access functions are defined for subprograms:
+ 
+ 		Etype       	Return type or Standard_Void_Type.
+ 		First_Formal	The first formal parameter.
+ 		Is_Imported     Indicates that the subprogram has appeared in
+ 				an INTERFACE or IMPORT pragma.  For now we
+ 				assume that the external language is C.
+ 		Is_Exported     Likewise but for an EXPORT pragma.
+ 		Is_Inlined      True if the subprogram is to be inlined.
+ 
+        Each parameter is first checked by calling must_pass_by_ref on its
+        type to determine if it is passed by reference.  For parameters which
+        are copied in, if they are Ada In Out or Out parameters, their return
+        value becomes part of a record which becomes the return type of the
+        function (C function - note that this applies only to Ada procedures
+        so there is no Ada return type).  Additional code to store back the
+        parameters will be generated on the caller side.  This transformation
+        is done here, not in the front-end.
+ 
+        The intended result of the transformation can be seen from the
+        equivalent source rewritings that follow:
+ 
+ 						struct temp {int a,b};
+        procedure P (A,B: In Out ...) is		temp P (int A,B)
+        begin					{
+ 	 ..					  ..
+        end P;					  return {A,B};
+ 						}
+ 
+ 						temp t;
+        P(X,Y);					t = P(X,Y);
+ 						X = t.a , Y = t.b;
+ 
+        For subprogram types we need to perform mainly the same conversions to
+        GCC form that are needed for procedures and function declarations.  The
+        only difference is that at the end, we make a type declaration instead
+        of a function declaration.  */
+ 
+     case E_Subprogram_Type:
+     case E_Function:
+     case E_Procedure:
+       {
+ 	tree gnu_ext_name
+ 	  = gnu_ext_name_for_subprog (gnat_entity, gnu_entity_name);
+ 	const enum inline_status_t inline_status
+ 	  = inline_status_for_subprog (gnat_entity);
+ 	bool public_flag = Is_Public (gnat_entity) || imported_p;
+ 	/* Subprograms marked both Intrinsic and Always_Inline need not
+ 	   have a body of their own.  */
+ 	bool extern_flag
+ 	  = ((Is_Public (gnat_entity) && !definition)
+ 	     || imported_p
+ 	     || (Is_Intrinsic_Subprogram (gnat_entity)
+ 		 && Has_Pragma_Inline_Always (gnat_entity)));
+ 	tree gnu_param_list;
+ 
+ 	/* A parameter may refer to this type, so defer completion of any
+ 	   incomplete types.  */
+ 	if (kind == E_Subprogram_Type && !definition)
+ 	  {
+ 	    defer_incomplete_level++;
+ 	    this_deferred = true;
+ 	  }
+ 
+ 	/* If the subprogram has an alias, it is probably inherited, so
+ 	   we can use the original one.  If the original "subprogram"
+ 	   is actually an enumeration literal, it may be the first use
+ 	   of its type, so we must elaborate that type now.  */
+ 	if (Present (Alias (gnat_entity)))
+ 	  {
+ 	    const Entity_Id gnat_alias = Alias (gnat_entity);
+ 
+ 	    if (Ekind (gnat_alias) == E_Enumeration_Literal)
+ 	      gnat_to_gnu_entity (Etype (gnat_alias), NULL_TREE, false);
+ 
+ 	    gnu_decl = gnat_to_gnu_entity (gnat_alias, gnu_expr, false);
+ 
+ 	    /* Elaborate any itypes in the parameters of this entity.  */
+ 	    for (gnat_temp = First_Formal_With_Extras (gnat_entity);
+ 		 Present (gnat_temp);
+ 		 gnat_temp = Next_Formal_With_Extras (gnat_temp))
+ 	      if (Is_Itype (Etype (gnat_temp)))
+ 		gnat_to_gnu_entity (Etype (gnat_temp), NULL_TREE, false);
+ 
+ 	    /* Materialize renamed subprograms in the debugging information
+ 	       when the renamed object is known at compile time; we consider
+ 	       such renamings as imported declarations.
+ 
+ 	       Because the parameters in generic instantiations are generally
+ 	       materialized as renamings, we often end up having both the
+ 	       renamed subprogram and the renaming in the same context and with
+ 	       the same name; in this case, renaming is both useless debug-wise
+ 	       and potentially harmful as name resolution in the debugger could
+ 	       return twice the same entity!  So avoid this case.  */
+ 	    if (debug_info_p
+ 		&& !artificial_p
+ 		&& (Ekind (gnat_alias) == E_Function
+ 		    || Ekind (gnat_alias) == E_Procedure)
+ 		&& !(get_debug_scope (gnat_entity, NULL)
+ 		     == get_debug_scope (gnat_alias, NULL)
+ 		     && Name_Equals (Chars (gnat_entity), Chars (gnat_alias)))
+ 		&& TREE_CODE (gnu_decl) == FUNCTION_DECL)
+ 	      {
+ 		tree decl = build_decl (input_location, IMPORTED_DECL,
+ 					gnu_entity_name, void_type_node);
+ 		IMPORTED_DECL_ASSOCIATED_DECL (decl) = gnu_decl;
+ 		gnat_pushdecl (decl, gnat_entity);
+ 	      }
+ 
+ 	    break;
+ 	  }
+ 
+ 	/* Get the GCC tree for the (underlying) subprogram type.  If the
+ 	   entity is an actual subprogram, also get the parameter list.  */
+ 	gnu_type
+ 	  = gnat_to_gnu_subprog_type (gnat_entity, definition, debug_info_p,
+ 				      &gnu_param_list);
+ 	if (DECL_P (gnu_type))
+ 	  {
+ 	    gnu_decl = gnu_type;
+ 	    gnu_type = TREE_TYPE (gnu_decl);
+ 	    break;
+ 	  }
+ 
+ 	/* Deal with platform-specific calling conventions.  */
+ 	if (Has_Stdcall_Convention (gnat_entity))
+ 	  prepend_one_attribute
+ 	    (&attr_list, ATTR_MACHINE_ATTRIBUTE,
+ 	     get_identifier ("stdcall"), NULL_TREE,
+ 	     gnat_entity);
+ 
+ 	/* If we should request stack realignment for a foreign convention
+ 	   subprogram, do so.  Note that this applies to task entry points
+ 	   in particular.  */
+ 	if (FOREIGN_FORCE_REALIGN_STACK && foreign)
+ 	  prepend_one_attribute
+ 	    (&attr_list, ATTR_MACHINE_ATTRIBUTE,
+ 	     get_identifier ("force_align_arg_pointer"), NULL_TREE,
+ 	     gnat_entity);
+ 
+ 	/* Deal with a pragma Linker_Section on a subprogram.  */
+ 	if ((kind == E_Function || kind == E_Procedure)
+ 	    && Present (Linker_Section_Pragma (gnat_entity)))
+ 	  prepend_one_attribute_pragma (&attr_list,
+ 					Linker_Section_Pragma (gnat_entity));
+ 
+ 	/* If we are defining the subprogram and it has an Address clause
+ 	   we must get the address expression from the saved GCC tree for the
+ 	   subprogram if it has a Freeze_Node.  Otherwise, we elaborate
+ 	   the address expression here since the front-end has guaranteed
+ 	   in that case that the elaboration has no effects.  If there is
+ 	   an Address clause and we are not defining the object, just
+ 	   make it a constant.  */
+ 	if (Present (Address_Clause (gnat_entity)))
+ 	  {
+ 	    tree gnu_address = NULL_TREE;
+ 
+ 	    if (definition)
+ 	      gnu_address
+ 		= (present_gnu_tree (gnat_entity)
+ 		   ? get_gnu_tree (gnat_entity)
+ 		   : gnat_to_gnu (Expression (Address_Clause (gnat_entity))));
+ 
+ 	    save_gnu_tree (gnat_entity, NULL_TREE, false);
+ 
+ 	    /* Convert the type of the object to a reference type that can
+ 	       alias everything as per RM 13.3(19).  */
+ 	    gnu_type
+ 	      = build_reference_type_for_mode (gnu_type, ptr_mode, true);
+ 	    if (gnu_address)
+ 	      gnu_address = convert (gnu_type, gnu_address);
+ 
+ 	    gnu_decl
+ 	      = create_var_decl (gnu_entity_name, gnu_ext_name, gnu_type,
+ 				 gnu_address, false, Is_Public (gnat_entity),
+ 				 extern_flag, false, false, artificial_p,
+ 				 debug_info_p, NULL, gnat_entity);
+ 	    DECL_BY_REF_P (gnu_decl) = 1;
+ 	  }
+ 
+ 	/* If this is a mere subprogram type, just create the declaration.  */
+ 	else if (kind == E_Subprogram_Type)
+ 	  {
+ 	    process_attributes (&gnu_type, &attr_list, false, gnat_entity);
+ 
+ 	    gnu_decl
+ 	      = create_type_decl (gnu_entity_name, gnu_type, artificial_p,
+ 				  debug_info_p, gnat_entity);
+ 	  }
+ 
+ 	/* Otherwise create the subprogram declaration with the external name,
+ 	   the type and the parameter list.  However, if this a reference to
+ 	   the allocation routines, reuse the canonical declaration nodes as
+ 	   they come with special properties.  */
+ 	else
+ 	  {
+ 	    if (extern_flag && gnu_ext_name == DECL_NAME (malloc_decl))
+ 	      gnu_decl = malloc_decl;
+ 	    else if (extern_flag && gnu_ext_name == DECL_NAME (realloc_decl))
+ 	      gnu_decl = realloc_decl;
+ 	    else
+ 	      gnu_decl
+ 		= create_subprog_decl (gnu_entity_name, gnu_ext_name,
+ 				       gnu_type, gnu_param_list,
+ 				       inline_status, public_flag,
+ 				       extern_flag, artificial_p,
+ 				       debug_info_p,
+ 				       definition && imported_p, attr_list,
+ 				       gnat_entity);
+ 	  }
+       }
+       break;
+ 
+     case E_Incomplete_Type:
+     case E_Incomplete_Subtype:
+     case E_Private_Type:
+     case E_Private_Subtype:
+     case E_Limited_Private_Type:
+     case E_Limited_Private_Subtype:
+     case E_Record_Type_With_Private:
+     case E_Record_Subtype_With_Private:
+       {
+ 	const bool is_from_limited_with
+ 	  = (IN (kind, Incomplete_Kind) && From_Limited_With (gnat_entity));
+ 	/* Get the "full view" of this entity.  If this is an incomplete
+ 	   entity from a limited with, treat its non-limited view as the
+ 	   full view.  Otherwise, use either the full view or the underlying
+ 	   full view, whichever is present.  This is used in all the tests
+ 	   below.  */
+ 	const Entity_Id full_view
+ 	  = is_from_limited_with
+ 	    ? Non_Limited_View (gnat_entity)
+ 	    : Present (Full_View (gnat_entity))
+ 	      ? Full_View (gnat_entity)
+ 	      : IN (kind, Private_Kind)
+ 		? Underlying_Full_View (gnat_entity)
+ 		: Empty;
+ 
+ 	/* If this is an incomplete type with no full view, it must be a Taft
+ 	   Amendment type or an incomplete type coming from a limited context,
+ 	   in which cases we return a dummy type.  Otherwise, we just get the
+ 	   type from its Etype.  */
+ 	if (No (full_view))
+ 	  {
+ 	    if (kind == E_Incomplete_Type)
+ 	      {
+ 		gnu_type = make_dummy_type (gnat_entity);
+ 		gnu_decl = TYPE_STUB_DECL (gnu_type);
+ 	      }
+ 	    else
+ 	      {
+ 		gnu_decl
+ 		  = gnat_to_gnu_entity (Etype (gnat_entity), NULL_TREE, false);
+ 		maybe_present = true;
+ 	      }
+ 	  }
+ 
+ 	/* Or else, if we already made a type for the full view, reuse it.  */
+ 	else if (present_gnu_tree (full_view))
+ 	  gnu_decl = get_gnu_tree (full_view);
+ 
+ 	/* Or else, if we are not defining the type or there is no freeze
+ 	   node on it, get the type for the full view.  Likewise if this is
+ 	   a limited_with'ed type not declared in the main unit, which can
+ 	   happen for incomplete formal types instantiated on a type coming
+ 	   from a limited_with clause.  */
+ 	else if (!definition
+ 		 || No (Freeze_Node (full_view))
+ 		 || (is_from_limited_with
+ 		     && !In_Extended_Main_Code_Unit (full_view)))
+ 	  {
+ 	    gnu_decl = gnat_to_gnu_entity (full_view, NULL_TREE, false);
+ 	    maybe_present = true;
+ 	  }
+ 
+ 	/* Otherwise, make a dummy type entry which will be replaced later.
+ 	   Save it as the full declaration's type so we can do any needed
+ 	   updates when we see it.  */
+ 	else
+ 	  {
+ 	    gnu_type = make_dummy_type (gnat_entity);
+ 	    gnu_decl = TYPE_STUB_DECL (gnu_type);
+ 	    if (Has_Completion_In_Body (gnat_entity))
+ 	      DECL_TAFT_TYPE_P (gnu_decl) = 1;
+ 	    save_gnu_tree (full_view, gnu_decl, false);
+ 	  }
+       }
+       break;
+ 
+     case E_Class_Wide_Type:
+       /* Class-wide types are always transformed into their root type.  */
+       gnu_decl = gnat_to_gnu_entity (gnat_equiv_type, NULL_TREE, false);
+       maybe_present = true;
+       break;
+ 
+     case E_Protected_Type:
+     case E_Protected_Subtype:
+     case E_Task_Type:
+     case E_Task_Subtype:
+       /* If we are just annotating types and have no equivalent record type,
+ 	 just return void_type, except for root types that have discriminants
+ 	 because the discriminants will very likely be used in the declarative
+ 	 part of the associated body so they need to be translated.  */
+       if (type_annotate_only && gnat_equiv_type == gnat_entity)
+ 	{
+ 	  if (definition
+ 	      && Has_Discriminants (gnat_entity)
+ 	      && Root_Type (gnat_entity) == gnat_entity)
+ 	    {
+ 	      tree gnu_field_list = NULL_TREE;
+ 	      Entity_Id gnat_field;
+ 
+ 	      /* This is a minimal version of the E_Record_Type handling.  */
+ 	      gnu_type = make_node (RECORD_TYPE);
+ 	      TYPE_NAME (gnu_type) = gnu_entity_name;
+ 
+ 	      for (gnat_field = First_Stored_Discriminant (gnat_entity);
+ 		   Present (gnat_field);
+ 		   gnat_field = Next_Stored_Discriminant (gnat_field))
+ 		{
+ 		  tree gnu_field
+ 		    = gnat_to_gnu_field (gnat_field, gnu_type, false,
+ 					 definition, debug_info_p);
+ 
+ 		  save_gnu_tree (gnat_field,
+ 				 build3 (COMPONENT_REF, TREE_TYPE (gnu_field),
+ 					 build0 (PLACEHOLDER_EXPR, gnu_type),
+ 					 gnu_field, NULL_TREE),
+ 				 true);
+ 
+ 		  DECL_CHAIN (gnu_field) = gnu_field_list;
+ 		  gnu_field_list = gnu_field;
+ 		}
+ 
+ 	      finish_record_type (gnu_type, nreverse (gnu_field_list), 0,
+ 				  false);
+ 	    }
+ 	  else
+ 	    gnu_type = void_type_node;
+ 	}
+ 
+       /* Concurrent types are always transformed into their record type.  */
+       else
+ 	gnu_decl = gnat_to_gnu_entity (gnat_equiv_type, NULL_TREE, false);
+       maybe_present = true;
+       break;
+ 
+     case E_Label:
+       gnu_decl = create_label_decl (gnu_entity_name, gnat_entity);
+       break;
+ 
+     case E_Block:
+     case E_Loop:
+       /* Nothing at all to do here, so just return an ERROR_MARK and claim
+ 	 we've already saved it, so we don't try to.  */
+       gnu_decl = error_mark_node;
+       saved = true;
+       break;
+ 
+     case E_Abstract_State:
+       /* This is a SPARK annotation that only reaches here when compiling in
+ 	 ASIS mode.  */
+       gcc_assert (type_annotate_only);
+       gnu_decl = error_mark_node;
+       saved = true;
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   /* If we had a case where we evaluated another type and it might have
+      defined this one, handle it here.  */
+   if (maybe_present && present_gnu_tree (gnat_entity))
+     {
+       gnu_decl = get_gnu_tree (gnat_entity);
+       saved = true;
+     }
+ 
+   /* If we are processing a type and there is either no DECL for it or
+      we just made one, do some common processing for the type, such as
+      handling alignment and possible padding.  */
+   if (is_type && (!gnu_decl || this_made_decl))
+     {
+       const bool is_by_ref = Is_By_Reference_Type (gnat_entity);
+ 
+       gcc_assert (!TYPE_IS_DUMMY_P (gnu_type));
+ 
+       /* Process the attributes, if not already done.  Note that the type is
+ 	 already defined so we cannot pass true for IN_PLACE here.  */
+       process_attributes (&gnu_type, &attr_list, false, gnat_entity);
+ 
+       /* See if a size was specified, by means of either an Object_Size or
+          a regular Size clause, and validate it if so.
+ 
+ 	 ??? Don't set the size for a String_Literal since it is either
+ 	 confirming or we don't handle it properly (if the low bound is
+ 	 non-constant).  */
+       if (!gnu_size && kind != E_String_Literal_Subtype)
+ 	{
+ 	  const char *size_s = "size for %s too small{, minimum allowed is ^}";
+ 	  const char *type_s = is_by_ref ? "by-reference type &" : "&";
+ 
+ 	  if (Known_Esize (gnat_entity))
+ 	    gnu_size
+ 	      = validate_size (Esize (gnat_entity), gnu_type, gnat_entity,
+ 			       VAR_DECL, false, false, size_s, type_s);
+ 
+ 	  /* ??? The test on Has_Size_Clause must be removed when "unknown" is
+ 	     no longer represented as Uint_0 (i.e. Use_New_Unknown_Rep).  */
+ 	  else if (Known_RM_Size (gnat_entity)
+ 		   || Has_Size_Clause (gnat_entity))
+ 	    gnu_size
+ 	      = validate_size (RM_Size (gnat_entity), gnu_type, gnat_entity,
+ 			       TYPE_DECL, false, Has_Size_Clause (gnat_entity),
+ 			       size_s, type_s);
+ 	}
+ 
+       /* If a size was specified, see if we can make a new type of that size
+ 	 by rearranging the type, for example from a fat to a thin pointer.  */
+       if (gnu_size)
+ 	{
+ 	  gnu_type
+ 	    = make_type_from_size (gnu_type, gnu_size,
+ 				   Has_Biased_Representation (gnat_entity));
+ 
+ 	  if (operand_equal_p (TYPE_SIZE (gnu_type), gnu_size, 0)
+ 	      && operand_equal_p (rm_size (gnu_type), gnu_size, 0))
+ 	    gnu_size = NULL_TREE;
+ 	}
+ 
+       /* If the alignment has not already been processed and this is not
+ 	 an unconstrained array type, see if an alignment is specified.
+ 	 If not, we pick a default alignment for atomic objects.  */
+       if (align != 0 || TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE)
+ 	;
+       else if (Known_Alignment (gnat_entity))
+ 	{
+ 	  align = validate_alignment (Alignment (gnat_entity), gnat_entity,
+ 				      TYPE_ALIGN (gnu_type));
+ 
+ 	  /* Warn on suspiciously large alignments.  This should catch
+ 	     errors about the (alignment,byte)/(size,bit) discrepancy.  */
+ 	  if (align > BIGGEST_ALIGNMENT && Has_Alignment_Clause (gnat_entity))
+ 	    {
+ 	      tree size;
+ 
+ 	      /* If a size was specified, take it into account.  Otherwise
+ 		 use the RM size for records or unions as the type size has
+ 		 already been adjusted to the alignment.  */
+ 	      if (gnu_size)
+ 		size = gnu_size;
+ 	      else if (RECORD_OR_UNION_TYPE_P (gnu_type)
+ 		       && !TYPE_FAT_POINTER_P (gnu_type))
+ 		size = rm_size (gnu_type);
+ 	      else
+ 	        size = TYPE_SIZE (gnu_type);
+ 
+ 	      /* Consider an alignment as suspicious if the alignment/size
+ 		 ratio is greater or equal to the byte/bit ratio.  */
+ 	      if (tree_fits_uhwi_p (size)
+ 		  && align >= tree_to_uhwi (size) * BITS_PER_UNIT)
+ 		post_error_ne ("??suspiciously large alignment specified for&",
+ 			       Expression (Alignment_Clause (gnat_entity)),
+ 			       gnat_entity);
+ 	    }
+ 	}
+       else if (Is_Full_Access (gnat_entity) && !gnu_size
+ 	       && tree_fits_uhwi_p (TYPE_SIZE (gnu_type))
+ 	       && integer_pow2p (TYPE_SIZE (gnu_type)))
+ 	align = MIN (BIGGEST_ALIGNMENT,
+ 		     tree_to_uhwi (TYPE_SIZE (gnu_type)));
+       else if (Is_Full_Access (gnat_entity) && gnu_size
+ 	       && tree_fits_uhwi_p (gnu_size)
+ 	       && integer_pow2p (gnu_size))
+ 	align = MIN (BIGGEST_ALIGNMENT, tree_to_uhwi (gnu_size));
+ 
+       /* See if we need to pad the type.  If we did and built a new type,
+ 	 then create a stripped-down declaration for the original type,
+ 	 mainly for debugging, unless there was already one.  */
+       if (gnu_size || align > 0)
+ 	{
+ 	  tree orig_type = gnu_type;
+ 
+ 	  gnu_type = maybe_pad_type (gnu_type, gnu_size, align, gnat_entity,
+ 				     false, definition, false);
+ 
+ 	  if (gnu_type != orig_type && !gnu_decl)
+ 	    create_type_decl (gnu_entity_name, orig_type, true, debug_info_p,
+ 			      gnat_entity);
+ 	}
+ 
+       /* Now set the RM size of the type.  We cannot do it before padding
+ 	 because we need to accept arbitrary RM sizes on integral types.  */
+       if (Known_RM_Size (gnat_entity))
+ 	set_rm_size (RM_Size (gnat_entity), gnu_type, gnat_entity);
+ 
+       /* Back-annotate the alignment of the type if not already set.  */
+       if (!Known_Alignment (gnat_entity))
+ 	{
+ 	  unsigned int double_align, align;
+ 	  bool is_capped_double, align_clause;
+ 
+ 	  /* If the default alignment of "double" or larger scalar types is
+ 	     specifically capped and this is not an array with an alignment
+ 	     clause on the component type, return the cap.  */
+ 	  if ((double_align = double_float_alignment) > 0)
+ 	    is_capped_double
+ 	      = is_double_float_or_array (gnat_entity, &align_clause);
+ 	  else if ((double_align = double_scalar_alignment) > 0)
+ 	    is_capped_double
+ 	      = is_double_scalar_or_array (gnat_entity, &align_clause);
+ 	  else
+ 	    is_capped_double = align_clause = false;
+ 
+ 	  if (is_capped_double && !align_clause)
+ 	    align = double_align;
+ 	  else
+ 	    align = TYPE_ALIGN (gnu_type) / BITS_PER_UNIT;
+ 
+ 	  Set_Alignment (gnat_entity, UI_From_Int (align));
+ 	}
+ 
+       /* Likewise for the size, if any.  */
+       if (!Known_Esize (gnat_entity) && TYPE_SIZE (gnu_type))
+ 	{
+ 	  tree size = TYPE_SIZE (gnu_type);
+ 
+ 	  /* If the size is self-referential, annotate the maximum value
+ 	     after saturating it, if need be, to avoid a No_Uint value.
+ 	     But do not do it for cases where Analyze_Object_Declaration
+ 	     in Sem_Ch3 would build a default subtype for objects.  */
+ 	  if (CONTAINS_PLACEHOLDER_P (size)
+ 	      && !Is_Limited_Record (gnat_entity)
+ 	      && !Is_Concurrent_Type (gnat_entity))
+ 	    {
+ 	      const unsigned int align
+ 		= UI_To_Int (Alignment (gnat_entity)) * BITS_PER_UNIT;
+ 	      size = maybe_saturate_size (max_size (size, true), align);
+ 	    }
+ 
+ 	  /* If we are just annotating types and the type is tagged, the tag
+ 	     and the parent components are not generated by the front-end so
+ 	     alignment and sizes must be adjusted.  */
+ 	  if (type_annotate_only && Is_Tagged_Type (gnat_entity))
+ 	    {
+ 	      const bool derived_p = Is_Derived_Type (gnat_entity);
+ 	      const Entity_Id gnat_parent
+ 		= derived_p ? Etype (Base_Type (gnat_entity)) : Empty;
+ 	      /* The following test for Known_Alignment preserves the old behavior,
+ 		 but is probably wrong. */
+ 	      const unsigned int inherited_align
+ 		= derived_p
+ 		  ? (Known_Alignment (gnat_parent)
+ 		     ? UI_To_Int (Alignment (gnat_parent)) * BITS_PER_UNIT
+ 		     : 0)
+ 		  : POINTER_SIZE;
+ 	      const unsigned int align
+ 		= MAX (TYPE_ALIGN (gnu_type), inherited_align);
+ 
+ 	      Set_Alignment (gnat_entity, UI_From_Int (align / BITS_PER_UNIT));
+ 
+ 	      /* If there is neither size clause nor representation clause, the
+ 		 sizes need to be adjusted.  */
+ 	      if (!Known_RM_Size (gnat_entity)
+ 		  && !VOID_TYPE_P (gnu_type)
+ 		  && (!TYPE_FIELDS (gnu_type)
+ 		      || integer_zerop (bit_position (TYPE_FIELDS (gnu_type)))))
+ 		{
+ 		  tree offset
+ 		    = derived_p
+ 		      ? UI_To_gnu (Esize (gnat_parent), bitsizetype)
+ 		      : bitsize_int (POINTER_SIZE);
+ 		  if (TYPE_FIELDS (gnu_type))
+ 		    offset
+ 		      = round_up (offset, DECL_ALIGN (TYPE_FIELDS (gnu_type)));
+ 		  size = size_binop (PLUS_EXPR, size, offset);
+ 		}
+ 
+ 	      size = maybe_saturate_size (round_up (size, align), align);
+ 	      Set_Esize (gnat_entity, annotate_value (size));
+ 
+ 	      /* Tagged types are Strict_Alignment so RM_Size = Esize.  */
+ 	      if (!Known_RM_Size (gnat_entity))
+ 		Set_RM_Size (gnat_entity, Esize (gnat_entity));
+ 	    }
+ 
+ 	  /* Otherwise no adjustment is needed.  */
+ 	  else
+ 	    Set_Esize (gnat_entity, No_Uint_To_0 (annotate_value (size)));
+ 	}
+ 
+       /* Likewise for the RM size, if any.  */
+       if (!Known_RM_Size (gnat_entity) && TYPE_SIZE (gnu_type))
+ 	Set_RM_Size (gnat_entity,
+ 		     annotate_value (rm_size (gnu_type)));
+ 
+       /* If we are at global level, GCC applied variable_size to the size but
+ 	 this has done nothing.  So, if it's not constant or self-referential,
+ 	 call elaborate_expression_1 to make a variable for it rather than
+ 	 calculating it each time.  */
+       if (TYPE_SIZE (gnu_type)
+ 	  && !TREE_CONSTANT (TYPE_SIZE (gnu_type))
+ 	  && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type))
+ 	  && global_bindings_p ())
+ 	{
+ 	  tree orig_size = TYPE_SIZE (gnu_type);
+ 
+ 	  TYPE_SIZE (gnu_type)
+ 	    = elaborate_expression_1 (TYPE_SIZE (gnu_type), gnat_entity,
+ 				      "SIZE", definition, false);
+ 
+ 	  /* ??? For now, store the size as a multiple of the alignment in
+ 	     bytes so that we can see the alignment from the tree.  */
+ 	  TYPE_SIZE_UNIT (gnu_type)
+ 	    = elaborate_expression_2 (TYPE_SIZE_UNIT (gnu_type), gnat_entity,
+ 				      "SIZE_A_UNIT", definition, false,
+ 				      TYPE_ALIGN (gnu_type));
+ 
+ 	  /* ??? gnu_type may come from an existing type so the MULT_EXPR node
+ 	     may not be marked by the call to create_type_decl below.  */
+ 	  MARK_VISITED (TYPE_SIZE_UNIT (gnu_type));
+ 
+ 	  /* For a record type, deal with the variant part, if any, and handle
+ 	     the Ada size as well.  */
+ 	  if (RECORD_OR_UNION_TYPE_P (gnu_type))
+ 	    {
+ 	      tree variant_part = get_variant_part (gnu_type);
+ 	      tree ada_size = TYPE_ADA_SIZE (gnu_type);
+ 
+ 	      if (variant_part)
+ 		{
+ 		  tree union_type = TREE_TYPE (variant_part);
+ 		  tree offset = DECL_FIELD_OFFSET (variant_part);
+ 
+ 		  /* If the position of the variant part is constant, subtract
+ 		     it from the size of the type of the parent to get the new
+ 		     size.  This manual CSE reduces the data size.  */
+ 		  if (TREE_CODE (offset) == INTEGER_CST)
+ 		    {
+ 		      tree bitpos = DECL_FIELD_BIT_OFFSET (variant_part);
+ 		      TYPE_SIZE (union_type)
+ 			= size_binop (MINUS_EXPR, TYPE_SIZE (gnu_type),
+ 				      bit_from_pos (offset, bitpos));
+ 		      TYPE_SIZE_UNIT (union_type)
+ 			= size_binop (MINUS_EXPR, TYPE_SIZE_UNIT (gnu_type),
+ 				      byte_from_pos (offset, bitpos));
+ 		    }
+ 		  else
+ 		    {
+ 		      TYPE_SIZE (union_type)
+ 			= elaborate_expression_1 (TYPE_SIZE (union_type),
+ 						  gnat_entity, "VSIZE",
+ 						  definition, false);
+ 
+ 		      /* ??? For now, store the size as a multiple of the
+ 			 alignment in bytes so that we can see the alignment
+ 			 from the tree.  */
+ 		      TYPE_SIZE_UNIT (union_type)
+ 			= elaborate_expression_2 (TYPE_SIZE_UNIT (union_type),
+ 						  gnat_entity, "VSIZE_A_UNIT",
+ 						  definition, false,
+ 						  TYPE_ALIGN (union_type));
+ 
+ 		      /* ??? For now, store the offset as a multiple of the
+ 			 alignment in bytes so that we can see the alignment
+ 			 from the tree.  */
+ 		      DECL_FIELD_OFFSET (variant_part)
+ 			= elaborate_expression_2 (offset, gnat_entity,
+ 						  "VOFFSET", definition, false,
+ 						  DECL_OFFSET_ALIGN
+ 						  (variant_part));
+ 		    }
+ 
+ 		  DECL_SIZE (variant_part) = TYPE_SIZE (union_type);
+ 		  DECL_SIZE_UNIT (variant_part) = TYPE_SIZE_UNIT (union_type);
+ 		}
+ 
+ 	      if (operand_equal_p (ada_size, orig_size, 0))
+ 		ada_size = TYPE_SIZE (gnu_type);
+ 	      else
+ 		ada_size
+ 		  = elaborate_expression_1 (ada_size, gnat_entity, "RM_SIZE",
+ 					    definition, false);
+ 	      SET_TYPE_ADA_SIZE (gnu_type, ada_size);
+ 	    }
+ 	}
+ 
+       /* Similarly, if this is a record type or subtype at global level, call
+ 	 elaborate_expression_2 on any field position.  Skip any fields that
+ 	 we haven't made trees for to avoid problems with class-wide types.  */
+       if (Is_In_Record_Kind (kind) && global_bindings_p ())
+ 	for (gnat_temp = First_Entity (gnat_entity); Present (gnat_temp);
+ 	     gnat_temp = Next_Entity (gnat_temp))
+ 	  if (Ekind (gnat_temp) == E_Component && present_gnu_tree (gnat_temp))
+ 	    {
+ 	      tree gnu_field = get_gnu_tree (gnat_temp);
+ 
+ 	      /* ??? For now, store the offset as a multiple of the alignment
+ 		 in bytes so that we can see the alignment from the tree.  */
+ 	      if (!TREE_CONSTANT (DECL_FIELD_OFFSET (gnu_field))
+ 		  && !CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (gnu_field)))
+ 		{
+ 		  DECL_FIELD_OFFSET (gnu_field)
+ 		    = elaborate_expression_2 (DECL_FIELD_OFFSET (gnu_field),
+ 					      gnat_temp, "OFFSET", definition,
+ 					      false,
+ 					      DECL_OFFSET_ALIGN (gnu_field));
+ 
+ 		  /* ??? The context of gnu_field is not necessarily gnu_type
+ 		     so the MULT_EXPR node built above may not be marked by
+ 		     the call to create_type_decl below.  */
+ 		  MARK_VISITED (DECL_FIELD_OFFSET (gnu_field));
+ 		}
+ 	    }
+ 
+       /* Now check if the type allows atomic access.  */
+       if (Is_Full_Access (gnat_entity))
+ 	check_ok_for_atomic_type (gnu_type, gnat_entity, false);
+ 
+       /* If this is not an unconstrained array type, set some flags.  */
+       if (TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE)
+ 	{
+ 	  /* Record the property that objects of tagged types are guaranteed to
+ 	     be properly aligned.  This is necessary because conversions to the
+ 	     class-wide type are translated into conversions to the root type,
+ 	     which can be less aligned than some of its derived types.  */
+ 	  if (Is_Tagged_Type (gnat_entity)
+ 	      || Is_Class_Wide_Equivalent_Type (gnat_entity))
+ 	    TYPE_ALIGN_OK (gnu_type) = 1;
+ 
+ 	  /* Record whether the type is passed by reference.  */
+ 	  if (is_by_ref && !VOID_TYPE_P (gnu_type))
+ 	    TYPE_BY_REFERENCE_P (gnu_type) = 1;
+ 
+ 	  /* Record whether an alignment clause was specified.  */
+ 	  if (Present (Alignment_Clause (gnat_entity)))
+ 	    TYPE_USER_ALIGN (gnu_type) = 1;
+ 
+ 	  /* Record whether a pragma Universal_Aliasing was specified.  */
+ 	  if (Universal_Aliasing (gnat_entity) && !TYPE_IS_DUMMY_P (gnu_type))
+ 	    TYPE_UNIVERSAL_ALIASING_P (gnu_type) = 1;
+ 
+ 	  /* If it is passed by reference, force BLKmode to ensure that
+ 	     objects of this type will always be put in memory.  */
+ 	  if (AGGREGATE_TYPE_P (gnu_type) && TYPE_BY_REFERENCE_P (gnu_type))
+ 	    SET_TYPE_MODE (gnu_type, BLKmode);
+ 	}
+ 
+       /* If this is a derived type, relate its alias set to that of its parent
+ 	 to avoid troubles when a call to an inherited primitive is inlined in
+ 	 a context where a derived object is accessed.  The inlined code works
+ 	 on the parent view so the resulting code may access the same object
+ 	 using both the parent and the derived alias sets, which thus have to
+ 	 conflict.  As the same issue arises with component references, the
+ 	 parent alias set also has to conflict with composite types enclosing
+ 	 derived components.  For instance, if we have:
+ 
+ 	    type D is new T;
+ 	    type R is record
+ 	       Component : D;
+ 	    end record;
+ 
+ 	 we want T to conflict with both D and R, in addition to R being a
+ 	 superset of D by record/component construction.
+ 
+ 	 One way to achieve this is to perform an alias set copy from the
+ 	 parent to the derived type.  This is not quite appropriate, though,
+ 	 as we don't want separate derived types to conflict with each other:
+ 
+ 	    type I1 is new Integer;
+ 	    type I2 is new Integer;
+ 
+ 	 We want I1 and I2 to both conflict with Integer but we do not want
+ 	 I1 to conflict with I2, and an alias set copy on derivation would
+ 	 have that effect.
+ 
+ 	 The option chosen is to make the alias set of the derived type a
+ 	 superset of that of its parent type.  It trivially fulfills the
+ 	 simple requirement for the Integer derivation example above, and
+ 	 the component case as well by superset transitivity:
+ 
+ 		   superset      superset
+ 		R ----------> D ----------> T
+ 
+ 	 However, for composite types, conversions between derived types are
+ 	 translated into VIEW_CONVERT_EXPRs so a sequence like:
+ 
+ 	    type Comp1 is new Comp;
+ 	    type Comp2 is new Comp;
+ 	    procedure Proc (C : Comp1);
+ 
+ 	    C : Comp2;
+ 	    Proc (Comp1 (C));
+ 
+ 	 is translated into:
+ 
+ 	    C : Comp2;
+ 	    Proc ((Comp1 &) &VIEW_CONVERT_EXPR <Comp1> (C));
+ 
+ 	 and gimplified into:
+ 
+ 	    C : Comp2;
+ 	    Comp1 *C.0;
+ 	    C.0 = (Comp1 *) &C;
+ 	    Proc (C.0);
+ 
+ 	 i.e. generates code involving type punning.  Therefore, Comp1 needs
+ 	 to conflict with Comp2 and an alias set copy is required.
+ 
+ 	 The language rules ensure the parent type is already frozen here.  */
+       if (kind != E_Subprogram_Type
+ 	  && Is_Derived_Type (gnat_entity)
+ 	  && !type_annotate_only)
+ 	{
+ 	  Entity_Id gnat_parent_type = Underlying_Type (Etype (gnat_entity));
+ 	  /* For constrained packed array subtypes, the implementation type is
+ 	     used instead of the nominal type.  */
+ 	  if (kind == E_Array_Subtype
+ 	      && Is_Constrained (gnat_entity)
+ 	      && Present (Packed_Array_Impl_Type (gnat_parent_type)))
+ 	    gnat_parent_type = Packed_Array_Impl_Type (gnat_parent_type);
+ 	  relate_alias_sets (gnu_type, gnat_to_gnu_type (gnat_parent_type),
+ 			     Is_Composite_Type (gnat_entity)
+ 			     ? ALIAS_SET_COPY : ALIAS_SET_SUPERSET);
+ 	}
+ 
+       /* Finally get to the appropriate variant, except for the implementation
+ 	 type of a packed array because the GNU type might be further adjusted
+ 	 when the original array type is itself processed.  */
+       if (Treat_As_Volatile (gnat_entity)
+ 	  && !Is_Packed_Array_Impl_Type (gnat_entity))
+ 	{
+ 	  const int quals
+ 	    = TYPE_QUAL_VOLATILE
+ 	      | (Is_Full_Access (gnat_entity) ? TYPE_QUAL_ATOMIC : 0);
+ 	  /* This is required by free_lang_data_in_type to disable the ODR.  */
+ 	  if (TREE_CODE (gnu_type) == ENUMERAL_TYPE)
+ 	    TYPE_STUB_DECL (gnu_type)
+ 	      = create_type_stub_decl (TYPE_NAME (gnu_type), gnu_type);
+ 	  gnu_type = change_qualified_type (gnu_type, quals);
+ 	}
+ 
+       /* If we already made a decl, just set the type, otherwise create it.  */
+       if (gnu_decl)
+ 	{
+ 	  TREE_TYPE (gnu_decl) = gnu_type;
+ 	  TYPE_STUB_DECL (gnu_type) = gnu_decl;
+ 	}
+       else
+ 	gnu_decl = create_type_decl (gnu_entity_name, gnu_type, artificial_p,
+ 				     debug_info_p, gnat_entity);
+ 
+       /* For vector types, make the representative array the debug type.  */
+       if (VECTOR_TYPE_P (gnu_type))
+ 	{
+ 	  tree rep = TYPE_REPRESENTATIVE_ARRAY (gnu_type);
+ 	  TYPE_NAME (rep) = DECL_NAME (gnu_decl);
+ 	  SET_TYPE_DEBUG_TYPE (gnu_type, rep);
+ 	}
+     }
+ 
+   /* Otherwise, for a type reusing an existing DECL, back-annotate values.  */
+   else if (is_type
+ 	   && !TYPE_IS_DUMMY_P (TREE_TYPE (gnu_decl))
+ 	   && Present (gnat_annotate_type))
+     {
+       if (!Known_Alignment (gnat_entity))
+ 	Copy_Alignment (gnat_entity, gnat_annotate_type);
+       if (!Known_Esize (gnat_entity))
+ 	Copy_Esize (gnat_entity, gnat_annotate_type);
+       if (!Known_RM_Size (gnat_entity))
+ 	Copy_RM_Size (gnat_entity, gnat_annotate_type);
+     }
+ 
+   /* If we haven't already, associate the ..._DECL node that we just made with
+      the input GNAT entity node.  */
+   if (!saved)
+     save_gnu_tree (gnat_entity, gnu_decl, false);
+ 
+   /* Now we are sure gnat_entity has a corresponding ..._DECL node,
+      eliminate as many deferred computations as possible.  */
+   process_deferred_decl_context (false);
+ 
+   /* If this is an enumeration or floating-point type, we were not able to set
+      the bounds since they refer to the type.  These are always static.  */
+   if ((kind == E_Enumeration_Type && Present (First_Literal (gnat_entity)))
+       || (kind == E_Floating_Point_Type))
+     {
+       tree gnu_scalar_type = gnu_type;
+       tree gnu_low_bound, gnu_high_bound;
+ 
+       /* If this is a padded type, we need to use the underlying type.  */
+       if (TYPE_IS_PADDING_P (gnu_scalar_type))
+ 	gnu_scalar_type = TREE_TYPE (TYPE_FIELDS (gnu_scalar_type));
+ 
+       /* If this is a floating point type and we haven't set a floating
+ 	 point type yet, use this in the evaluation of the bounds.  */
+       if (!longest_float_type_node && kind == E_Floating_Point_Type)
+ 	longest_float_type_node = gnu_scalar_type;
+ 
+       gnu_low_bound = gnat_to_gnu (Type_Low_Bound (gnat_entity));
+       gnu_high_bound = gnat_to_gnu (Type_High_Bound (gnat_entity));
+ 
+       if (kind == E_Enumeration_Type)
+ 	{
+ 	  /* Enumeration types have specific RM bounds.  */
+ 	  SET_TYPE_RM_MIN_VALUE (gnu_scalar_type, gnu_low_bound);
+ 	  SET_TYPE_RM_MAX_VALUE (gnu_scalar_type, gnu_high_bound);
+ 	}
+       else
+ 	{
+ 	  /* Floating-point types don't have specific RM bounds.  */
+ 	  TYPE_GCC_MIN_VALUE (gnu_scalar_type) = gnu_low_bound;
+ 	  TYPE_GCC_MAX_VALUE (gnu_scalar_type) = gnu_high_bound;
+ 	}
+     }
+ 
+   /* If we deferred processing of incomplete types, re-enable it.  If there
+      were no other disables and we have deferred types to process, do so.  */
+   if (this_deferred
+       && --defer_incomplete_level == 0
+       && defer_incomplete_list)
+     {
+       struct incomplete *p, *next;
+ 
+       /* We are back to level 0 for the deferring of incomplete types.
+ 	 But processing these incomplete types below may itself require
+ 	 deferring, so preserve what we have and restart from scratch.  */
+       p = defer_incomplete_list;
+       defer_incomplete_list = NULL;
+ 
+       for (; p; p = next)
+ 	{
+ 	  next = p->next;
+ 
+ 	  if (p->old_type)
+ 	    update_pointer_to (TYPE_MAIN_VARIANT (p->old_type),
+ 			       gnat_to_gnu_type (p->full_type));
+ 	  free (p);
+ 	}
+     }
+ 
+   /* If we are not defining this type, see if it's on one of the lists of
+      incomplete types.  If so, handle the list entry now.  */
+   if (is_type && !definition)
+     {
+       struct incomplete *p;
+ 
+       for (p = defer_incomplete_list; p; p = p->next)
+ 	if (p->old_type && p->full_type == gnat_entity)
+ 	  {
+ 	    update_pointer_to (TYPE_MAIN_VARIANT (p->old_type),
+ 			       TREE_TYPE (gnu_decl));
+ 	    p->old_type = NULL_TREE;
+ 	  }
+ 
+       for (p = defer_limited_with_list; p; p = p->next)
+ 	if (p->old_type
+ 	    && (Non_Limited_View (p->full_type) == gnat_entity
+ 		|| Full_View (p->full_type) == gnat_entity))
+ 	  {
+ 	    update_pointer_to (TYPE_MAIN_VARIANT (p->old_type),
+ 			       TREE_TYPE (gnu_decl));
+ 	    if (TYPE_DUMMY_IN_PROFILE_P (p->old_type))
+ 	      update_profiles_with (p->old_type);
+ 	    p->old_type = NULL_TREE;
+ 	  }
+     }
+ 
+   if (this_global)
+     force_global--;
+ 
+   /* If this is a packed array type whose original array type is itself
+      an itype without freeze node, make sure the latter is processed.  */
+   if (Is_Packed_Array_Impl_Type (gnat_entity)
+       && Is_Itype (Original_Array_Type (gnat_entity))
+       && No (Freeze_Node (Original_Array_Type (gnat_entity)))
+       && !present_gnu_tree (Original_Array_Type (gnat_entity)))
+     gnat_to_gnu_entity (Original_Array_Type (gnat_entity), NULL_TREE, false);
+ 
+   return gnu_decl;
+ }
+ 
+ /* Similar, but if the returned value is a COMPONENT_REF, return the
+    FIELD_DECL.  */
+ 
+ tree
+ gnat_to_gnu_field_decl (Entity_Id gnat_entity)
+ {
+   tree gnu_field = gnat_to_gnu_entity (gnat_entity, NULL_TREE, false);
+ 
+   if (TREE_CODE (gnu_field) == COMPONENT_REF)
+     gnu_field = TREE_OPERAND (gnu_field, 1);
+ 
+   return gnu_field;
+ }
+ 
+ /* Similar, but GNAT_ENTITY is assumed to refer to a GNAT type.  Return
+    the GCC type corresponding to that entity.  */
+ 
+ tree
+ gnat_to_gnu_type (Entity_Id gnat_entity)
+ {
+   tree gnu_decl;
+ 
+   /* The back end never attempts to annotate generic types.  */
+   if (Is_Generic_Type (gnat_entity) && type_annotate_only)
+      return void_type_node;
+ 
+   gnu_decl = gnat_to_gnu_entity (gnat_entity, NULL_TREE, false);
+   gcc_assert (TREE_CODE (gnu_decl) == TYPE_DECL);
+ 
+   return TREE_TYPE (gnu_decl);
+ }
+ 
+ /* Similar, but GNAT_ENTITY is assumed to refer to a GNAT type.  Return
+    the unpadded version of the GCC type corresponding to that entity.  */
+ 
+ tree
+ get_unpadded_type (Entity_Id gnat_entity)
+ {
+   tree type = gnat_to_gnu_type (gnat_entity);
+ 
+   if (TYPE_IS_PADDING_P (type))
+     type = TREE_TYPE (TYPE_FIELDS (type));
+ 
+   return type;
+ }
+ 
+ /* Return whether the E_Subprogram_Type/E_Function/E_Procedure GNAT_ENTITY is
+    a C++ imported method or equivalent.
+ 
+    We use the predicate to find out whether we need to use METHOD_TYPE instead
+    of FUNCTION_TYPE for GNAT_ENTITY for the sake compatibility with C++.  This
+    in turn determines whether the "thiscall" calling convention is used by the
+    back-end for GNAT_ENTITY on 32-bit x86/Windows.  */
+ 
+ static bool
+ is_cplusplus_method (Entity_Id gnat_entity)
+ {
+   /* A constructor is a method on the C++ side.  We deal with it now because
+      it is declared without the 'this' parameter in the sources and, although
+      the front-end will create a version with the 'this' parameter for code
+      generation purposes, we want to return true for both versions.  */
+   if (Is_Constructor (gnat_entity))
+     return true;
+ 
+   /* Check that the subprogram has C++ convention.  */
+   if (Convention (gnat_entity) != Convention_CPP)
+     return false;
+ 
+   /* And that the type of the first parameter (indirectly) has it too, but
+      we make an exception for Interfaces because they need not be imported.  */
+   Entity_Id gnat_first = First_Formal (gnat_entity);
+   if (No (gnat_first))
+     return false;
+   Entity_Id gnat_type = Etype (gnat_first);
+   if (Is_Access_Type (gnat_type))
+     gnat_type = Directly_Designated_Type (gnat_type);
+   if (Convention (gnat_type) != Convention_CPP && !Is_Interface (gnat_type))
+     return false;
+ 
+   /* This is the main case: a C++ virtual method imported as a primitive
+      operation of a tagged type.  */
+   if (Is_Dispatching_Operation (gnat_entity))
+     return true;
+ 
+   /* This is set on the E_Subprogram_Type built for a dispatching call.  */
+   if (Is_Dispatch_Table_Entity (gnat_entity))
+     return true;
+ 
+   /* A thunk needs to be handled like its associated primitive operation.  */
+   if (Is_Subprogram (gnat_entity) && Is_Thunk (gnat_entity))
+     return true;
+ 
+   /* Now on to the annoying case: a C++ non-virtual method, imported either
+      as a non-primitive operation of a tagged type or as a primitive operation
+      of an untagged type.  We cannot reliably differentiate these cases from
+      their static member or regular function equivalents in Ada, so we ask
+      the C++ side through the mangled name of the function, as the implicit
+      'this' parameter is not encoded in the mangled name of a method.  */
+   if (Is_Subprogram (gnat_entity) && Present (Interface_Name (gnat_entity)))
+     {
+       String_Pointer sp = { NULL, NULL };
+       Get_External_Name (gnat_entity, false, sp);
+ 
+       void *mem;
+       struct demangle_component *cmp
+ 	= cplus_demangle_v3_components (Name_Buffer,
+ 					DMGL_GNU_V3
+ 					| DMGL_TYPES
+ 					| DMGL_PARAMS
+ 					| DMGL_RET_DROP,
+ 					&mem);
+       if (!cmp)
+ 	return false;
+ 
+       /* We need to release MEM once we have a successful demangling.  */
+       bool ret = false;
+ 
+       if (cmp->type == DEMANGLE_COMPONENT_TYPED_NAME
+ 	  && cmp->u.s_binary.right->type == DEMANGLE_COMPONENT_FUNCTION_TYPE
+ 	  && (cmp = cmp->u.s_binary.right->u.s_binary.right) != NULL
+ 	  && cmp->type == DEMANGLE_COMPONENT_ARGLIST)
+ 	{
+ 	  /* Make sure there is at least one parameter in C++ too.  */
+ 	  if (cmp->u.s_binary.left)
+ 	    {
+ 	      unsigned int n_ada_args = 0;
+ 	      do {
+ 		n_ada_args++;
+ 		gnat_first = Next_Formal (gnat_first);
+ 	      } while (Present (gnat_first));
+ 
+ 	      unsigned int n_cpp_args = 0;
+ 	      do {
+ 		n_cpp_args++;
+ 		cmp = cmp->u.s_binary.right;
+ 	      } while (cmp);
+ 
+ 	      if (n_cpp_args < n_ada_args)
+ 		ret = true;
+ 	    }
+ 	  else
+ 	    ret = true;
+ 	}
+ 
+       free (mem);
+ 
+       return ret;
+     }
+ 
+   return false;
+ }
+ 
+ /* Return the inlining status of the GNAT subprogram SUBPROG.  */
+ 
+ static enum inline_status_t
+ inline_status_for_subprog (Entity_Id subprog)
+ {
+   if (Has_Pragma_No_Inline (subprog))
+     return is_suppressed;
+ 
+   if (Has_Pragma_Inline_Always (subprog))
+     return is_required;
+ 
+   if (Is_Inlined (subprog))
+     {
+       tree gnu_type;
+ 
+       /* This is a kludge to work around a pass ordering issue: for small
+ 	 record types with many components, i.e. typically bit-fields, the
+ 	 initialization routine can contain many assignments that will be
+ 	 merged by the GIMPLE store merging pass.  But this pass runs very
+ 	 late in the pipeline, in particular after the inlining decisions
+ 	 are made, so the inlining heuristics cannot take its outcome into
+ 	 account.  Therefore, we optimistically override the heuristics for
+ 	 the initialization routine in this case.  */
+       if (Is_Init_Proc (subprog)
+ 	  && flag_store_merging
+ 	  && Is_Record_Type (Etype (First_Formal (subprog)))
+ 	  && (gnu_type = gnat_to_gnu_type (Etype (First_Formal (subprog))))
+ 	  && !TYPE_IS_BY_REFERENCE_P (gnu_type)
+ 	  && tree_fits_uhwi_p (TYPE_SIZE (gnu_type))
+ 	  && compare_tree_int (TYPE_SIZE (gnu_type), MAX_FIXED_MODE_SIZE) <= 0)
+ 	return is_prescribed;
+ 
+       return is_requested;
+     }
+ 
+   return is_default;
+ }
+ 
+ /* Finalize the processing of From_Limited_With incomplete types.  */
+ 
+ void
+ finalize_from_limited_with (void)
+ {
+   struct incomplete *p, *next;
+ 
+   p = defer_limited_with_list;
+   defer_limited_with_list = NULL;
+ 
+   for (; p; p = next)
+     {
+       next = p->next;
+ 
+       if (p->old_type)
+ 	{
+ 	  update_pointer_to (TYPE_MAIN_VARIANT (p->old_type),
+ 			     gnat_to_gnu_type (p->full_type));
+ 	  if (TYPE_DUMMY_IN_PROFILE_P (p->old_type))
+ 	    update_profiles_with (p->old_type);
+ 	}
+ 
+       free (p);
+     }
+ }
+ 
+ /* Return the equivalent type to be used for GNAT_ENTITY, if it's a kind
+    of type (such E_Task_Type) that has a different type which Gigi uses
+    for its representation.  If the type does not have a special type for
+    its representation, return GNAT_ENTITY.  */
+ 
+ Entity_Id
+ Gigi_Equivalent_Type (Entity_Id gnat_entity)
+ {
+   Entity_Id gnat_equiv = gnat_entity;
+ 
+   if (No (gnat_entity))
+     return gnat_entity;
+ 
+   switch (Ekind (gnat_entity))
+     {
+     case E_Class_Wide_Subtype:
+       if (Present (Equivalent_Type (gnat_entity)))
+ 	gnat_equiv = Equivalent_Type (gnat_entity);
+       break;
+ 
+     case E_Access_Protected_Subprogram_Type:
+     case E_Anonymous_Access_Protected_Subprogram_Type:
+       if (Present (Equivalent_Type (gnat_entity)))
+ 	gnat_equiv = Equivalent_Type (gnat_entity);
+       break;
+ 
+     case E_Access_Subtype:
+       gnat_equiv = Etype (gnat_entity);
+       break;
+ 
+     case E_Array_Subtype:
+       if (!Is_Constrained (gnat_entity))
+ 	gnat_equiv = Etype (gnat_entity);
+       break;
+ 
+     case E_Class_Wide_Type:
+       gnat_equiv = Root_Type (gnat_entity);
+       break;
+ 
+     case E_Protected_Type:
+     case E_Protected_Subtype:
+     case E_Task_Type:
+     case E_Task_Subtype:
+       if (Present (Corresponding_Record_Type (gnat_entity)))
+ 	gnat_equiv = Corresponding_Record_Type (gnat_entity);
+       break;
+ 
+     default:
+       break;
+     }
+ 
+   return gnat_equiv;
+ }
+ 
+ /* Return a GCC tree for a type corresponding to the component type of the
+    array type or subtype GNAT_ARRAY.  DEFINITION is true if this component
+    is for an array being defined.  DEBUG_INFO_P is true if we need to write
+    debug information for other types that we may create in the process.  */
+ 
+ static tree
+ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition,
+ 			    bool debug_info_p)
+ {
+   const Entity_Id gnat_type = Component_Type (gnat_array);
+   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;
+   unsigned int max_align;
+ 
+   /* If an alignment is specified, use it as a cap on the component type
+      so that it can be honored for the whole type, but ignore it for the
+      original type of packed array types.  */
+   if (No (Packed_Array_Impl_Type (gnat_array))
+       && Known_Alignment (gnat_array))
+     max_align = validate_alignment (Alignment (gnat_array), gnat_array, 0);
+   else
+     max_align = 0;
+ 
+   /* Try to get a packable form of the component if needed.  */
+   if ((Is_Packed (gnat_array) || Has_Component_Size_Clause (gnat_array))
+       && !is_bit_packed
+       && !Has_Aliased_Components (gnat_array)
+       && !Strict_Alignment (gnat_type)
+       && RECORD_OR_UNION_TYPE_P (gnu_type)
+       && !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;
+     }
+   else
+     has_packed_components = 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_Component_Size_Clause (gnat_array), NULL, NULL);
+ 
+   /* If the component type is a RECORD_TYPE that has a self-referential size,
+      then use the maximum size for the component size.  */
+   if (!gnu_comp_size
+       && TREE_CODE (gnu_type) == RECORD_TYPE
+       && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
+     gnu_comp_size = max_size (TYPE_SIZE (gnu_type), true);
+ 
+   /* If the array has aliased components and the component size is zero, force
+      the unit size to ensure that the components have distinct addresses.  */
+   if (!gnu_comp_size
+       && Has_Aliased_Components (gnat_array)
+       && integer_zerop (TYPE_SIZE (gnu_type)))
+     gnu_comp_size = bitsize_unit_node;
+ 
+   /* Honor the component size.  This is not needed for bit-packed arrays.  */
+   if (gnu_comp_size && !is_bit_packed)
+     {
+       tree orig_type = gnu_type;
+       unsigned int gnu_comp_align;
+ 
+       gnu_type = make_type_from_size (gnu_type, gnu_comp_size, false);
+       if (max_align > 0 && TYPE_ALIGN (gnu_type) > max_align)
+ 	gnu_type = orig_type;
+       else
+ 	orig_type = gnu_type;
+ 
+       /* We need to make sure that the size is a multiple of the alignment.
+ 	 But we do not misalign the component type because of the alignment
+ 	 of the array type here; this either must have been done earlier in
+ 	 the packed case or should be rejected in the non-packed case.  */
+       if (TREE_CODE (gnu_comp_size) == INTEGER_CST)
+ 	{
+ 	  const unsigned HOST_WIDE_INT int_size = tree_to_uhwi (gnu_comp_size);
+ 	  gnu_comp_align = int_size & -int_size;
+ 	  if (gnu_comp_align > TYPE_ALIGN (gnu_type))
+ 	    gnu_comp_align = 0;
+ 	}
+        else
+ 	 gnu_comp_align = 0;
+ 
+       gnu_type = maybe_pad_type (gnu_type, gnu_comp_size, gnu_comp_align,
+ 				 gnat_array, true, definition, true);
+ 
+       /* If a padding record was made, declare it now since it will never be
+ 	 declared otherwise.  This is necessary to ensure that its subtrees
+ 	 are properly marked.  */
+       if (gnu_type != orig_type && !DECL_P (TYPE_NAME (gnu_type)))
+ 	create_type_decl (TYPE_NAME (gnu_type), gnu_type, true, debug_info_p,
+ 			  gnat_array);
+     }
+ 
+   /* This is a very special case where the array has aliased components and the
+      component size might be zero at run time.  As explained above, we force at
+      least the unit size but we don't want to build a distinct padding type for
+      each invocation (they are not canonicalized if they have variable size) so
+      we cache this special padding type as TYPE_PADDING_FOR_COMPONENT.  */
+   else if (Has_Aliased_Components (gnat_array)
+ 	   && TREE_CODE (gnu_type) == ARRAY_TYPE
+ 	   && !TREE_CONSTANT (TYPE_SIZE (gnu_type)))
+     {
+       if (TYPE_PADDING_FOR_COMPONENT (gnu_type))
+ 	gnu_type = TYPE_PADDING_FOR_COMPONENT (gnu_type);
+       else
+ 	{
+ 	  gnu_comp_size
+ 	    = size_binop (MAX_EXPR, TYPE_SIZE (gnu_type), bitsize_unit_node);
+ 	  TYPE_PADDING_FOR_COMPONENT (gnu_type)
+ 	    = maybe_pad_type (gnu_type, gnu_comp_size, 0, gnat_array,
+ 			      true, definition, true);
+ 	  gnu_type = TYPE_PADDING_FOR_COMPONENT (gnu_type);
+ 	  create_type_decl (TYPE_NAME (gnu_type), gnu_type, true, debug_info_p,
+ 			    gnat_array);
+ 	}
+     }
+ 
+   /* Now check if the type of the component allows atomic access.  */
+   if (Has_Atomic_Components (gnat_array) || Is_Full_Access (gnat_type))
+     check_ok_for_atomic_type (gnu_type, gnat_array, true);
+ 
+   /* If the component type is a padded type made for a non-bit-packed array
+      of scalars with reverse storage order, we need to propagate the reverse
+      storage order to the padding type since it is the innermost enclosing
+      aggregate type around the scalar.  */
+   if (TYPE_IS_PADDING_P (gnu_type)
+       && !is_bit_packed
+       && Reverse_Storage_Order (gnat_array)
+       && Is_Scalar_Type (gnat_type))
+     gnu_type = set_reverse_storage_order_on_pad_type (gnu_type);
+ 
+   if (Has_Volatile_Components (gnat_array))
+     {
+       const int quals
+ 	= TYPE_QUAL_VOLATILE
+ 	  | (Has_Atomic_Components (gnat_array) ? TYPE_QUAL_ATOMIC : 0);
+       gnu_type = change_qualified_type (gnu_type, quals);
+     }
+ 
+   return gnu_type;
+ }
+ 
+ /* Return whether TYPE requires that formal parameters of TYPE be initialized
+    when they are Out parameters passed by copy.
+ 
+    This just implements the set of conditions listed in RM 6.4.1(12).  */
+ 
+ static bool
+ type_requires_init_of_formal (Entity_Id type)
+ {
+   type = Underlying_Type (type);
+ 
+   if (Is_Access_Type (type))
+     return true;
+ 
+   if (Is_Scalar_Type (type))
+     return Has_Default_Aspect (type);
+ 
+   if (Is_Array_Type (type))
+     return Has_Default_Aspect (type)
+ 	   || type_requires_init_of_formal (Component_Type (type));
+ 
+   if (Is_Record_Type (type))
+     for (Entity_Id field = First_Entity (type);
+ 	 Present (field);
+ 	 field = Next_Entity (field))
+       {
+ 	if (Ekind (field) == E_Discriminant && !Is_Unchecked_Union (type))
+ 	  return true;
+ 
+ 	if (Ekind (field) == E_Component
+ 	    && (Present (Expression (Parent (field)))
+ 		|| type_requires_init_of_formal (Etype (field))))
+ 	  return true;
+       }
+ 
+   return false;
+ }
+ 
+ /* Return a GCC tree for a parameter corresponding to GNAT_PARAM, to be placed
+    in the parameter list of GNAT_SUBPROG.  GNU_PARAM_TYPE is the GCC tree for
+    the type of the parameter.  FIRST is true if this is the first parameter in
+    the list of GNAT_SUBPROG.  Also set CICO to true if the parameter must use
+    the copy-in copy-out implementation mechanism.
+ 
+    The returned tree is a PARM_DECL, except for the cases where no parameter
+    needs to be actually passed to the subprogram; the type of this "shadow"
+    parameter is then returned instead.  */
+ 
+ static tree
+ gnat_to_gnu_param (Entity_Id gnat_param, tree gnu_param_type, bool first,
+ 		   Entity_Id gnat_subprog, bool *cico)
+ {
+   Mechanism_Type mech = Mechanism (gnat_param);
+   tree gnu_param_name = get_entity_name (gnat_param);
+   bool foreign = Has_Foreign_Convention (gnat_subprog);
+   bool in_param = (Ekind (gnat_param) == E_In_Parameter);
+   /* The parameter can be indirectly modified if its address is taken.  */
+   bool ro_param = in_param && !Address_Taken (gnat_param);
+   bool by_return = false, by_component_ptr = false;
+   bool by_ref = false;
+   bool forced_by_ref = false;
+   bool restricted_aliasing_p = false;
+   location_t saved_location = input_location;
+   tree gnu_param;
+ 
+   /* Make sure to use the proper SLOC for vector ABI warnings.  */
+   if (VECTOR_TYPE_P (gnu_param_type))
+     Sloc_to_locus (Sloc (gnat_subprog), &input_location);
+ 
+   /* Builtins are expanded inline and there is no real call sequence involved.
+      So the type expected by the underlying expander is always the type of the
+      argument "as is".  */
+   if (Is_Intrinsic_Subprogram (gnat_subprog)
+       && Present (Interface_Name (gnat_subprog)))
+     mech = By_Copy;
+ 
+   /* Handle the first parameter of a valued procedure specially: it's a copy
+      mechanism for which the parameter is never allocated.  */
+   else if (first && Is_Valued_Procedure (gnat_subprog))
+     {
+       gcc_assert (Ekind (gnat_param) == E_Out_Parameter);
+       mech = By_Copy;
+       by_return = true;
+     }
+ 
+   /* Or else, see if a Mechanism was supplied that forced this parameter
+      to be passed one way or another.  */
+   else if (mech == Default || mech == By_Copy || mech == By_Reference)
+     forced_by_ref
+       = (mech == By_Reference
+ 	 && !foreign
+ 	 && !TYPE_IS_BY_REFERENCE_P (gnu_param_type)
+ 	 && !Is_Aliased (gnat_param));
+ 
+   /* Positive mechanism means by copy for sufficiently small parameters.  */
+   else if (mech > 0)
+     {
+       if (TREE_CODE (gnu_param_type) == UNCONSTRAINED_ARRAY_TYPE
+ 	  || TREE_CODE (TYPE_SIZE (gnu_param_type)) != INTEGER_CST
+ 	  || compare_tree_int (TYPE_SIZE (gnu_param_type), mech) > 0)
+ 	mech = By_Reference;
+       else
+ 	mech = By_Copy;
+     }
+ 
+   /* Otherwise, it's an unsupported mechanism so error out.  */
+   else
+     {
+       post_error ("unsupported mechanism for&", gnat_param);
+       mech = Default;
+     }
+ 
+   /* Either for foreign conventions, or if the underlying type is not passed
+      by reference and is as large and aligned as the original type, strip off
+      a possible padding type.  */
+   if (TYPE_IS_PADDING_P (gnu_param_type))
+     {
+       tree inner_type = TREE_TYPE (TYPE_FIELDS (gnu_param_type));
+ 
+       if (foreign
+ 	  || (mech != By_Reference
+ 	      && !must_pass_by_ref (inner_type)
+ 	      && (mech == By_Copy || !default_pass_by_ref (inner_type))
+ 	      && ((TYPE_SIZE (inner_type) == TYPE_SIZE (gnu_param_type)
+ 		   && TYPE_ALIGN (inner_type) >= TYPE_ALIGN (gnu_param_type))
+ 		  || Is_Init_Proc (gnat_subprog))))
+ 	gnu_param_type = inner_type;
+     }
+ 
+   /* For foreign conventions, pass arrays as pointers to the element type.
+      First check for unconstrained array and get the underlying array.  */
+   if (foreign && TREE_CODE (gnu_param_type) == UNCONSTRAINED_ARRAY_TYPE)
+     gnu_param_type
+       = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_param_type))));
+ 
+   /* Arrays are passed as pointers to element type for foreign conventions.  */
+   if (foreign && mech != By_Copy && TREE_CODE (gnu_param_type) == ARRAY_TYPE)
+     {
+       /* Strip off any multi-dimensional entries, then strip
+ 	 off the last array to get the component type.  */
+       while (TREE_CODE (TREE_TYPE (gnu_param_type)) == ARRAY_TYPE
+ 	     && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_param_type)))
+ 	gnu_param_type = TREE_TYPE (gnu_param_type);
+ 
+       gnu_param_type = TREE_TYPE (gnu_param_type);
+       gnu_param_type = build_pointer_type (gnu_param_type);
+       by_component_ptr = true;
+     }
+ 
+   /* Fat pointers are passed as thin pointers for foreign conventions.  */
+   else if (foreign && TYPE_IS_FAT_POINTER_P (gnu_param_type))
+     gnu_param_type
+       = make_type_from_size (gnu_param_type, size_int (POINTER_SIZE), 0);
+ 
+   /* Use a pointer type for the "this" pointer of C++ constructors.  */
+   else if (Chars (gnat_param) == Name_uInit && Is_Constructor (gnat_subprog))
+     {
+       gcc_assert (mech == By_Reference);
+       gnu_param_type = build_pointer_type (gnu_param_type);
+       by_ref = true;
+     }
+ 
+   /* If we were requested or muss pass by reference, do so.
+      If we were requested to pass by copy, do so.
+      Otherwise, for foreign conventions, pass In Out or Out parameters
+      or aggregates by reference.  For COBOL and Fortran, pass all
+      integer and FP types that way too.  For Convention Ada, use
+      the standard Ada default.  */
+   else if (mech == By_Reference
+ 	   || must_pass_by_ref (gnu_param_type)
+ 	   || (mech != By_Copy
+ 	       && ((foreign
+ 		    && (!in_param || AGGREGATE_TYPE_P (gnu_param_type)))
+ 		   || (foreign
+ 		       && (Convention (gnat_subprog) == Convention_Fortran
+ 			   || Convention (gnat_subprog) == Convention_COBOL)
+ 		       && (INTEGRAL_TYPE_P (gnu_param_type)
+ 			   || FLOAT_TYPE_P (gnu_param_type)))
+ 		   || (!foreign
+ 		       && default_pass_by_ref (gnu_param_type)))))
+     {
+       /* We take advantage of 6.2(12) by considering that references built for
+ 	 parameters whose type isn't by-ref and for which the mechanism hasn't
+ 	 been forced to by-ref allow only a restricted form of aliasing.  */
+       restricted_aliasing_p
+ 	= !TYPE_IS_BY_REFERENCE_P (gnu_param_type) && mech != By_Reference;
+       gnu_param_type = build_reference_type (gnu_param_type);
+       by_ref = true;
+     }
+ 
+   /* Pass In Out or Out parameters using copy-in copy-out mechanism.  */
+   else if (!in_param)
+     *cico = true;
+ 
+   input_location = saved_location;
+ 
+   if (mech == By_Copy && (by_ref || by_component_ptr))
+     post_error ("??cannot pass & by copy", gnat_param);
+ 
+   /* If this is an Out parameter that isn't passed by reference and whose
+      type doesn't require the initialization of formals, we don't make a
+      PARM_DECL for it.  Instead, it will be a VAR_DECL created when we
+      process the procedure, so just return its type here.  Likewise for
+      the _Init parameter of an initialization procedure or the special
+      parameter of a valued procedure, never pass them in.  */
+   if (Ekind (gnat_param) == E_Out_Parameter
+       && !by_ref
+       && !by_component_ptr
+       && (!type_requires_init_of_formal (Etype (gnat_param))
+ 	  || Is_Init_Proc (gnat_subprog)
+ 	  || by_return))
+     {
+       Set_Mechanism (gnat_param, By_Copy);
+       return gnu_param_type;
+     }
+ 
+   gnu_param = create_param_decl (gnu_param_name, gnu_param_type);
+   TREE_READONLY (gnu_param) = ro_param || by_ref || by_component_ptr;
+   DECL_BY_REF_P (gnu_param) = by_ref;
+   DECL_FORCED_BY_REF_P (gnu_param) = forced_by_ref;
+   DECL_BY_COMPONENT_PTR_P (gnu_param) = by_component_ptr;
+   DECL_POINTS_TO_READONLY_P (gnu_param)
+     = (ro_param && (by_ref || by_component_ptr));
+   DECL_CAN_NEVER_BE_NULL_P (gnu_param) = Can_Never_Be_Null (gnat_param);
+   DECL_RESTRICTED_ALIASING_P (gnu_param) = restricted_aliasing_p;
+   Sloc_to_locus (Sloc (gnat_param), &DECL_SOURCE_LOCATION (gnu_param));
+ 
+   /* If no Mechanism was specified, indicate what we're using, then
+      back-annotate it.  */
+   if (mech == Default)
+     mech = (by_ref || by_component_ptr) ? By_Reference : By_Copy;
+ 
+   Set_Mechanism (gnat_param, mech);
+   return gnu_param;
+ }
+ 
+ /* Associate GNAT_SUBPROG with GNU_TYPE, which must be a dummy type, so that
+    GNAT_SUBPROG is updated when GNU_TYPE is completed.
+ 
+    Ada 2012 (AI05-019) says that freezing a subprogram does not always freeze
+    the corresponding profile, which means that, by the time the freeze node
+    of the subprogram is encountered, types involved in its profile may still
+    be not yet frozen.  That's why we need to update GNAT_SUBPROG when we see
+    the freeze node of types involved in its profile, either types of formal
+    parameters or the return type.  */
+ 
+ static void
+ associate_subprog_with_dummy_type (Entity_Id gnat_subprog, tree gnu_type)
+ {
+   gcc_assert (TYPE_IS_DUMMY_P (gnu_type));
+ 
+   struct tree_entity_vec_map in;
+   in.base.from = gnu_type;
+   struct tree_entity_vec_map **slot
+     = dummy_to_subprog_map->find_slot (&in, INSERT);
+   if (!*slot)
+     {
+       tree_entity_vec_map *e = ggc_alloc<tree_entity_vec_map> ();
+       e->base.from = gnu_type;
+       e->to = NULL;
+       *slot = e;
+     }
+ 
+   /* Even if there is already a slot for GNU_TYPE, we need to set the flag
+      because the vector might have been just emptied by update_profiles_with.
+      This can happen when there are 2 freeze nodes associated with different
+      views of the same type; the type will be really complete only after the
+      second freeze node is encountered.  */
+   TYPE_DUMMY_IN_PROFILE_P (gnu_type) = 1;
+ 
+   vec<Entity_Id, va_gc_atomic> *v = (*slot)->to;
+ 
+   /* Make sure GNAT_SUBPROG is not associated twice with the same dummy type,
+      since this would mean updating twice its profile.  */
+   if (v)
+     {
+       const unsigned len = v->length ();
+       unsigned int l = 0, u = len;
+ 
+       /* Entity_Id is a simple integer so we can implement a stable order on
+ 	 the vector with an ordered insertion scheme and binary search.  */
+       while (l < u)
+ 	{
+ 	  unsigned int m = (l + u) / 2;
+ 	  int diff = (int) (*v)[m] - (int) gnat_subprog;
+ 	  if (diff > 0)
+ 	    u = m;
+ 	  else if (diff < 0)
+ 	    l = m + 1;
+ 	  else
+ 	    return;
+ 	}
+ 
+       /* l == u and therefore is the insertion point.  */
+       vec_safe_insert (v, l, gnat_subprog);
+     }
+   else
+     vec_safe_push (v, gnat_subprog);
+ 
+   (*slot)->to = v;
+ }
+ 
+ /* Update the GCC tree previously built for the profile of GNAT_SUBPROG.  */
+ 
+ static void
+ update_profile (Entity_Id gnat_subprog)
+ {
+   tree gnu_param_list;
+   tree gnu_type = gnat_to_gnu_subprog_type (gnat_subprog, true,
+ 					    Needs_Debug_Info (gnat_subprog),
+ 					    &gnu_param_list);
+   if (DECL_P (gnu_type))
+     {
+       /* Builtins cannot have their address taken so we can reset them.  */
+       gcc_assert (fndecl_built_in_p (gnu_type));
+       save_gnu_tree (gnat_subprog, NULL_TREE, false);
+       save_gnu_tree (gnat_subprog, gnu_type, false);
+       return;
+     }
+ 
+   tree gnu_subprog = get_gnu_tree (gnat_subprog);
+ 
+   TREE_TYPE (gnu_subprog) = gnu_type;
+ 
+   /* If GNAT_SUBPROG is an actual subprogram, GNU_SUBPROG is a FUNCTION_DECL
+      and needs to be adjusted too.  */
+   if (Ekind (gnat_subprog) != E_Subprogram_Type)
+     {
+       tree gnu_entity_name = get_entity_name (gnat_subprog);
+       tree gnu_ext_name
+ 	= gnu_ext_name_for_subprog (gnat_subprog, gnu_entity_name);
+ 
+       DECL_ARGUMENTS (gnu_subprog) = gnu_param_list;
+       finish_subprog_decl (gnu_subprog, gnu_ext_name, gnu_type);
+     }
+ }
+ 
+ /* Update the GCC trees previously built for the profiles involving GNU_TYPE,
+    a dummy type which appears in profiles.  */
+ 
+ void
+ update_profiles_with (tree gnu_type)
+ {
+   struct tree_entity_vec_map in;
+   in.base.from = gnu_type;
+   struct tree_entity_vec_map *e = dummy_to_subprog_map->find (&in);
+   gcc_assert (e);
+   vec<Entity_Id, va_gc_atomic> *v = e->to;
+   e->to = NULL;
+ 
+   /* The flag needs to be reset before calling update_profile, in case
+      associate_subprog_with_dummy_type is again invoked on GNU_TYPE.  */
+   TYPE_DUMMY_IN_PROFILE_P (gnu_type) = 0;
+ 
+   unsigned int i;
+   Entity_Id *iter;
+   FOR_EACH_VEC_ELT (*v, i, iter)
+     update_profile (*iter);
+ 
+   vec_free (v);
+ }
+ 
+ /* Return the GCC tree for GNAT_TYPE present in the profile of a subprogram.
+ 
+    Ada 2012 (AI05-0151) says that incomplete types coming from a limited
+    context may now appear as parameter and result types.  As a consequence,
+    we may need to defer their translation until after a freeze node is seen
+    or to the end of the current unit.  We also aim at handling temporarily
+    incomplete types created by the usual delayed elaboration scheme.  */
+ 
+ static tree
+ gnat_to_gnu_profile_type (Entity_Id gnat_type)
+ {
+   /* This is the same logic as the E_Access_Type case of gnat_to_gnu_entity
+      so the rationale is exposed in that place.  These processings probably
+      ought to be merged at some point.  */
+   Entity_Id gnat_equiv = Gigi_Equivalent_Type (gnat_type);
+   const bool is_from_limited_with
+     = (Is_Incomplete_Type (gnat_equiv)
+        && From_Limited_With (gnat_equiv));
+   Entity_Id gnat_full_direct_first
+     = (is_from_limited_with
+        ? Non_Limited_View (gnat_equiv)
+        : (Is_Incomplete_Or_Private_Type (gnat_equiv)
+ 	  ? Full_View (gnat_equiv) : Empty));
+   Entity_Id gnat_full_direct
+     = ((is_from_limited_with
+ 	&& Present (gnat_full_direct_first)
+ 	&& Is_Private_Type (gnat_full_direct_first))
+        ? Full_View (gnat_full_direct_first)
+        : gnat_full_direct_first);
+   Entity_Id gnat_full = Gigi_Equivalent_Type (gnat_full_direct);
+   Entity_Id gnat_rep = Present (gnat_full) ? gnat_full : gnat_equiv;
+   const bool in_main_unit = In_Extended_Main_Code_Unit (gnat_rep);
+   tree gnu_type;
+ 
+   if (Present (gnat_full) && present_gnu_tree (gnat_full))
+     gnu_type = TREE_TYPE (get_gnu_tree (gnat_full));
+ 
+   else if (is_from_limited_with
+ 	   && ((!in_main_unit
+ 	        && !present_gnu_tree (gnat_equiv)
+ 		&& Present (gnat_full)
+ 		&& (Is_Record_Type (gnat_full)
+ 		    || Is_Array_Type (gnat_full)
+ 		    || Is_Access_Type (gnat_full)))
+ 	       || (in_main_unit && Present (Freeze_Node (gnat_rep)))))
+     {
+       gnu_type = make_dummy_type (gnat_equiv);
+ 
+       if (!in_main_unit)
+ 	{
+ 	  struct incomplete *p = XNEW (struct incomplete);
+ 
+ 	  p->old_type = gnu_type;
+ 	  p->full_type = gnat_equiv;
+ 	  p->next = defer_limited_with_list;
+ 	  defer_limited_with_list = p;
+ 	}
+     }
+ 
+   else if (type_annotate_only && No (gnat_equiv))
+     gnu_type = void_type_node;
+ 
+   else
+     gnu_type = gnat_to_gnu_type (gnat_equiv);
+ 
+   /* Access-to-unconstrained-array types need a special treatment.  */
+   if (Is_Array_Type (gnat_rep) && !Is_Constrained (gnat_rep))
+     {
+       if (!TYPE_POINTER_TO (gnu_type))
+ 	build_dummy_unc_pointer_types (gnat_equiv, gnu_type);
+     }
+ 
+   return gnu_type;
+ }
+ 
+ /* Return true if TYPE contains only integral data, recursively if need be.  */
+ 
+ static bool
+ type_contains_only_integral_data (tree type)
+ {
+   switch (TREE_CODE (type))
+     {
+     case RECORD_TYPE:
+     case UNION_TYPE:
+     case QUAL_UNION_TYPE:
+       for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+ 	if (!type_contains_only_integral_data (TREE_TYPE (field)))
+ 	  return false;
+       return true;
+ 
+     case ARRAY_TYPE:
+     case COMPLEX_TYPE:
+       return type_contains_only_integral_data (TREE_TYPE (type));
+ 
+     default:
+       return INTEGRAL_TYPE_P (type);
+     }
+ 
+   gcc_unreachable ();
+ }
+ 
+ /* Return a GCC tree for a subprogram type corresponding to GNAT_SUBPROG.
+    DEFINITION is true if this is for a subprogram being defined.  DEBUG_INFO_P
+    is true if we need to write debug information for other types that we may
+    create in the process.  Also set PARAM_LIST to the list of parameters.
+    If GNAT_SUBPROG is bound to a GCC builtin, return the DECL for the builtin
+    directly instead of its type.  */
+ 
+ static tree
+ gnat_to_gnu_subprog_type (Entity_Id gnat_subprog, bool definition,
+ 			  bool debug_info_p, tree *param_list)
+ {
+   const Entity_Kind kind = Ekind (gnat_subprog);
+   const bool method_p = is_cplusplus_method (gnat_subprog);
+   const bool variadic = IN (Convention (gnat_subprog), Convention_C_Variadic);
+   Entity_Id gnat_return_type = Etype (gnat_subprog);
+   Entity_Id gnat_param;
+   tree gnu_type = present_gnu_tree (gnat_subprog)
+ 		  ? TREE_TYPE (get_gnu_tree (gnat_subprog)) : NULL_TREE;
+   tree gnu_return_type;
+   tree gnu_param_type_list = NULL_TREE;
+   tree gnu_param_list = NULL_TREE;
+   /* Non-null for subprograms containing parameters passed by copy-in copy-out
+      (In Out or Out parameters not passed by reference), in which case it is
+      the list of nodes used to specify the values of the In Out/Out parameters
+      that are returned as a record upon procedure return.  The TREE_PURPOSE of
+      an element of this list is a FIELD_DECL of the record and the TREE_VALUE
+      is the PARM_DECL corresponding to that field.  This list will be saved in
+      the TYPE_CI_CO_LIST field of the FUNCTION_TYPE node we create.  */
+   tree gnu_cico_list = NULL_TREE;
+   tree gnu_cico_return_type = NULL_TREE;
+   tree gnu_cico_field_list = NULL_TREE;
+   bool gnu_cico_only_integral_type = true;
+   /* Although the semantics of "pure" units in Ada essentially match those of
+      "const" in GNU C, the semantics of the Is_Pure flag in GNAT do not say
+      anything about access to global memory, that's why it needs to be mapped
+      to "pure" instead of "const" in GNU C.  The property is orthogonal to the
+      "nothrow" property only if the EH circuitry is explicit in the internal
+      representation of the middle-end: if we are to completely hide the EH
+      circuitry from it, we need to declare that calls to pure Ada subprograms
+      that can throw have side effects, since they can trigger an "abnormal"
+      transfer of control; therefore they cannot be "pure" in the GCC sense.  */
+   bool pure_flag = Is_Pure (gnat_subprog) && Back_End_Exceptions ();
+   bool return_by_direct_ref_p = false;
+   bool return_by_invisi_ref_p = false;
+   bool return_unconstrained_p = false;
+   bool incomplete_profile_p = false;
+   int num;
+ 
+   /* Look into the return type and get its associated GCC tree if it is not
+      void, and then compute various flags for the subprogram type.  But make
+      sure not to do this processing multiple times.  */
+   if (Ekind (gnat_return_type) == E_Void)
+     gnu_return_type = void_type_node;
+ 
+   else if (gnu_type
+ 	   && FUNC_OR_METHOD_TYPE_P (gnu_type)
+ 	   && !TYPE_IS_DUMMY_P (TREE_TYPE (gnu_type)))
+     {
+       gnu_return_type = TREE_TYPE (gnu_type);
+       return_unconstrained_p = TYPE_RETURN_UNCONSTRAINED_P (gnu_type);
+       return_by_direct_ref_p = TYPE_RETURN_BY_DIRECT_REF_P (gnu_type);
+       return_by_invisi_ref_p = TREE_ADDRESSABLE (gnu_type);
+     }
+ 
+   else
+     {
+       /* For foreign convention/intrinsic subprograms, return System.Address
+ 	 as void * or equivalent; this comprises GCC builtins.  */
+       if ((Has_Foreign_Convention (gnat_subprog)
+ 	   || Is_Intrinsic_Subprogram (gnat_subprog))
+ 	  && Is_Descendant_Of_Address (Underlying_Type (gnat_return_type)))
+ 	gnu_return_type = ptr_type_node;
+       else
+ 	gnu_return_type = gnat_to_gnu_profile_type (gnat_return_type);
+ 
+       /* If this function returns by reference, make the actual return type
+ 	 the reference type and make a note of that.  */
+       if (Returns_By_Ref (gnat_subprog))
+ 	{
+ 	  gnu_return_type = build_reference_type (gnu_return_type);
+ 	  return_by_direct_ref_p = true;
+ 	}
+ 
+       /* If the return type is an unconstrained array type, the return value
+ 	 will be allocated on the secondary stack so the actual return type
+ 	 is the fat pointer type.  */
+       else if (TREE_CODE (gnu_return_type) == UNCONSTRAINED_ARRAY_TYPE)
+ 	{
+ 	  gnu_return_type = TYPE_REFERENCE_TO (gnu_return_type);
+ 	  return_unconstrained_p = true;
+ 	}
+ 
+       /* This is the same unconstrained array case, but for a dummy type.  */
+       else if (TYPE_REFERENCE_TO (gnu_return_type)
+ 	       && TYPE_IS_FAT_POINTER_P (TYPE_REFERENCE_TO (gnu_return_type)))
+ 	{
+ 	  gnu_return_type = TYPE_REFERENCE_TO (gnu_return_type);
+ 	  return_unconstrained_p = true;
+ 	}
+ 
+       /* Likewise, if the return type requires a transient scope, the return
+ 	 value will also be allocated on the secondary stack so the actual
+ 	 return type is the reference type.  */
+       else if (Requires_Transient_Scope (gnat_return_type))
+ 	{
+ 	  gnu_return_type = build_reference_type (gnu_return_type);
+ 	  return_unconstrained_p = true;
+ 	}
+ 
+       /* If the Mechanism is By_Reference, ensure this function uses the
+ 	 target's by-invisible-reference mechanism, which may not be the
+ 	 same as above (e.g. it might be passing an extra parameter).  */
+       else if (kind == E_Function && Mechanism (gnat_subprog) == By_Reference)
+ 	return_by_invisi_ref_p = true;
+ 
+       /* Likewise, if the return type is itself By_Reference.  */
+       else if (TYPE_IS_BY_REFERENCE_P (gnu_return_type))
+ 	return_by_invisi_ref_p = true;
+ 
+       /* If the type is a padded type and the underlying type would not be
+ 	 passed by reference or the function has a foreign convention, return
+ 	 the underlying type.  */
+       else if (TYPE_IS_PADDING_P (gnu_return_type)
+ 	       && (!default_pass_by_ref
+ 		      (TREE_TYPE (TYPE_FIELDS (gnu_return_type)))
+ 		   || Has_Foreign_Convention (gnat_subprog)))
+ 	gnu_return_type = TREE_TYPE (TYPE_FIELDS (gnu_return_type));
+ 
+       /* If the return type is unconstrained, it must have a maximum size.
+ 	 Use the padded type as the effective return type.  And ensure the
+ 	 function uses the target's by-invisible-reference mechanism to
+ 	 avoid copying too much data when it returns.  */
+       if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_return_type)))
+ 	{
+ 	  tree orig_type = gnu_return_type;
+ 	  tree max_return_size = max_size (TYPE_SIZE (gnu_return_type), true);
+ 
+ 	  /* If the size overflows to 0, set it to an arbitrary positive
+ 	     value so that assignments in the type are preserved.  Their
+ 	     actual size is independent of this positive value.  */
+ 	  if (TREE_CODE (max_return_size) == INTEGER_CST
+ 	      && TREE_OVERFLOW (max_return_size)
+ 	      && integer_zerop (max_return_size))
+ 	    {
+ 	      max_return_size = copy_node (bitsize_unit_node);
+ 	      TREE_OVERFLOW (max_return_size) = 1;
+ 	    }
+ 
+ 	  gnu_return_type = maybe_pad_type (gnu_return_type, max_return_size,
+ 					    0, gnat_subprog, false, definition,
+ 					    true);
+ 
+ 	  /* Declare it now since it will never be declared otherwise.  This
+ 	     is necessary to ensure that its subtrees are properly marked.  */
+ 	  if (gnu_return_type != orig_type
+ 	      && !DECL_P (TYPE_NAME (gnu_return_type)))
+ 	    create_type_decl (TYPE_NAME (gnu_return_type), gnu_return_type,
+ 			      true, debug_info_p, gnat_subprog);
+ 
+ 	  return_by_invisi_ref_p = true;
+ 	}
+ 
+       /* If the return type has a size that overflows, we usually cannot have
+ 	 a function that returns that type.  This usage doesn't really make
+ 	 sense anyway, so issue an error here.  */
+       if (!return_by_invisi_ref_p
+ 	  && TYPE_SIZE_UNIT (gnu_return_type)
+ 	  && TREE_CODE (TYPE_SIZE_UNIT (gnu_return_type)) == INTEGER_CST
+ 	  && !valid_constant_size_p (TYPE_SIZE_UNIT (gnu_return_type)))
+ 	{
+ 	  post_error ("cannot return type whose size overflows", gnat_subprog);
+ 	  gnu_return_type = copy_type (gnu_return_type);
+ 	  TYPE_SIZE (gnu_return_type) = bitsize_zero_node;
+ 	  TYPE_SIZE_UNIT (gnu_return_type) = size_zero_node;
+ 	}
+ 
+       /* If the return type is incomplete, there are 2 cases: if the function
+ 	 returns by reference, then the return type is only linked indirectly
+ 	 in the profile, so the profile can be seen as complete since it need
+ 	 not be further modified, only the reference types need be adjusted;
+ 	 otherwise the profile is incomplete and need be adjusted too.  */
+       if (TYPE_IS_DUMMY_P (gnu_return_type))
+ 	{
+ 	  associate_subprog_with_dummy_type (gnat_subprog, gnu_return_type);
+ 	  incomplete_profile_p = true;
+ 	}
+ 
+       if (kind == E_Function)
+ 	Set_Mechanism (gnat_subprog, return_unconstrained_p
+ 				     || return_by_direct_ref_p
+ 				     || return_by_invisi_ref_p
+ 				     ? By_Reference : By_Copy);
+     }
+ 
+   /* A procedure (something that doesn't return anything) shouldn't be
+      considered pure since there would be no reason for calling such a
+      subprogram.  Note that procedures with Out (or In Out) parameters
+      have already been converted into a function with a return type.
+      Similarly, if the function returns an unconstrained type, then the
+      function will allocate the return value on the secondary stack and
+      thus calls to it cannot be CSE'ed, lest the stack be reclaimed.  */
+   if (VOID_TYPE_P (gnu_return_type) || return_unconstrained_p)
+     pure_flag = false;
+ 
+   /* Loop over the parameters and get their associated GCC tree.  While doing
+      this, build a copy-in copy-out structure if we need one.  */
+   for (gnat_param = First_Formal_With_Extras (gnat_subprog), num = 0;
+        Present (gnat_param);
+        gnat_param = Next_Formal_With_Extras (gnat_param), num++)
+     {
+       const bool mech_is_by_ref
+ 	= Mechanism (gnat_param) == By_Reference
+ 	  && !(num == 0 && Is_Valued_Procedure (gnat_subprog));
+       tree gnu_param_name = get_entity_name (gnat_param);
+       tree gnu_param, gnu_param_type;
+       bool cico = false;
+ 
+       /* For a variadic C function, do not build unnamed parameters.  */
+       if (variadic
+ 	  && num == (Convention (gnat_subprog) - Convention_C_Variadic_0))
+ 	break;
+ 
+       /* Fetch an existing parameter with complete type and reuse it.  But we
+ 	 didn't save the CICO property so we can only do it for In parameters
+ 	 or parameters passed by reference.  */
+       if ((Ekind (gnat_param) == E_In_Parameter || mech_is_by_ref)
+ 	  && present_gnu_tree (gnat_param)
+ 	  && (gnu_param = get_gnu_tree (gnat_param))
+ 	  && !TYPE_IS_DUMMY_P (TREE_TYPE (gnu_param)))
+ 	{
+ 	  DECL_CHAIN (gnu_param) = NULL_TREE;
+ 	  gnu_param_type = TREE_TYPE (gnu_param);
+ 	}
+ 
+       /* Otherwise translate the parameter type and act accordingly.  */
+       else
+ 	{
+ 	  Entity_Id gnat_param_type = Etype (gnat_param);
+ 
+ 	  /* For foreign convention/intrinsic subprograms, pass System.Address
+ 	     as void * or equivalent; this comprises GCC builtins.  */
+ 	  if ((Has_Foreign_Convention (gnat_subprog)
+ 	       || Is_Intrinsic_Subprogram (gnat_subprog))
+ 	      && Is_Descendant_Of_Address (Underlying_Type (gnat_param_type)))
+ 	    gnu_param_type = ptr_type_node;
+ 	  else
+ 	    gnu_param_type = gnat_to_gnu_profile_type (gnat_param_type);
+ 
+ 	  /* If the parameter type is incomplete, there are 2 cases: if it is
+ 	     passed by reference, then the type is only linked indirectly in
+ 	     the profile, so the profile can be seen as complete since it need
+ 	     not be further modified, only the reference type need be adjusted;
+ 	     otherwise the profile is incomplete and need be adjusted too.  */
+ 	  if (TYPE_IS_DUMMY_P (gnu_param_type))
+ 	    {
+ 	      Node_Id gnat_decl;
+ 
+ 	      if (mech_is_by_ref
+ 		  || (TYPE_REFERENCE_TO (gnu_param_type)
+ 		      && TYPE_IS_FAT_POINTER_P
+ 			 (TYPE_REFERENCE_TO (gnu_param_type)))
+ 		  || TYPE_IS_BY_REFERENCE_P (gnu_param_type))
+ 		{
+ 		  gnu_param_type = build_reference_type (gnu_param_type);
+ 		  gnu_param
+ 		    = create_param_decl (gnu_param_name, gnu_param_type);
+ 		  TREE_READONLY (gnu_param) = 1;
+ 		  DECL_BY_REF_P (gnu_param) = 1;
+ 		  DECL_POINTS_TO_READONLY_P (gnu_param)
+ 		    = (Ekind (gnat_param) == E_In_Parameter
+ 		       && !Address_Taken (gnat_param));
+ 		  Set_Mechanism (gnat_param, By_Reference);
+ 		  Sloc_to_locus (Sloc (gnat_param),
+ 				 &DECL_SOURCE_LOCATION (gnu_param));
+ 		}
+ 
+ 	      /* ??? This is a kludge to support null procedures in spec taking
+ 		 a parameter with an untagged incomplete type coming from a
+ 		 limited context.  The front-end creates a body without knowing
+ 		 anything about the non-limited view, which is illegal Ada and
+ 		 cannot be supported.  Create a parameter with a fake type.  */
+ 	      else if (kind == E_Procedure
+ 		       && (gnat_decl = Parent (gnat_subprog))
+ 		       && Nkind (gnat_decl) == N_Procedure_Specification
+ 		       && Null_Present (gnat_decl)
+ 		       && Is_Incomplete_Type (gnat_param_type))
+ 		gnu_param = create_param_decl (gnu_param_name, ptr_type_node);
+ 
+ 	      else
+ 		{
+ 		  /* Build a minimal PARM_DECL without DECL_ARG_TYPE so that
+ 		     Call_to_gnu will stop if it encounters the PARM_DECL.  */
+ 		  gnu_param
+ 		    = build_decl (input_location, PARM_DECL, gnu_param_name,
+ 				  gnu_param_type);
+ 		  associate_subprog_with_dummy_type (gnat_subprog,
+ 						     gnu_param_type);
+ 		  incomplete_profile_p = true;
+ 		}
+ 	    }
+ 
+ 	  /* Otherwise build the parameter declaration normally.  */
+ 	  else
+ 	    {
+ 	      gnu_param
+ 		= gnat_to_gnu_param (gnat_param, gnu_param_type, num == 0,
+ 				     gnat_subprog, &cico);
+ 
+ 	      /* We are returned either a PARM_DECL or a type if no parameter
+ 		 needs to be passed; in either case, adjust the type.  */
+ 	      if (DECL_P (gnu_param))
+ 		gnu_param_type = TREE_TYPE (gnu_param);
+ 	      else
+ 		{
+ 		  gnu_param_type = gnu_param;
+ 		  gnu_param = NULL_TREE;
+ 		}
+ 	    }
+ 	}
+ 
+       /* If we have a GCC tree for the parameter, register it.  */
+       save_gnu_tree (gnat_param, NULL_TREE, false);
+       if (gnu_param)
+ 	{
+ 	  gnu_param_type_list
+ 	    = tree_cons (NULL_TREE, gnu_param_type, gnu_param_type_list);
+ 	  DECL_CHAIN (gnu_param) = gnu_param_list;
+ 	  gnu_param_list = gnu_param;
+ 	  save_gnu_tree (gnat_param, gnu_param, false);
+ 
+ 	  /* A pure function in the Ada sense which takes an access parameter
+ 	     may modify memory through it and thus cannot be considered pure
+ 	     in the GCC sense, unless it's access-to-function.  Likewise it if
+ 	     takes a by-ref In Out or Out parameter.  But if it takes a by-ref
+ 	     In parameter, then it may only read memory through it and can be
+ 	     considered pure in the GCC sense.  */
+ 	  if (pure_flag
+ 	      && ((POINTER_TYPE_P (gnu_param_type)
+ 		   && TREE_CODE (TREE_TYPE (gnu_param_type)) != FUNCTION_TYPE)
+ 		  || TYPE_IS_FAT_POINTER_P (gnu_param_type)))
+ 	    pure_flag = DECL_POINTS_TO_READONLY_P (gnu_param);
+ 	}
+ 
+       /* If the parameter uses the copy-in copy-out mechanism, allocate a field
+ 	 for it in the return type and register the association.  */
+       if (cico && !incomplete_profile_p)
+ 	{
+ 	  if (!gnu_cico_list)
+ 	    {
+ 	      gnu_cico_return_type = make_node (RECORD_TYPE);
+ 
+ 	      /* If this is a function, we also need a field for the
+ 		 return value to be placed.  */
+ 	      if (!VOID_TYPE_P (gnu_return_type))
+ 		{
+ 		  tree gnu_field
+ 		    = create_field_decl (get_identifier ("RETVAL"),
+ 				         gnu_return_type,
+ 				         gnu_cico_return_type, NULL_TREE,
+ 				         NULL_TREE, 0, 0);
+ 		  Sloc_to_locus (Sloc (gnat_subprog),
+ 			         &DECL_SOURCE_LOCATION (gnu_field));
+ 		  gnu_cico_field_list = gnu_field;
+ 		  gnu_cico_list
+ 		    = tree_cons (gnu_field, void_type_node, NULL_TREE);
+ 		  if (!type_contains_only_integral_data (gnu_return_type))
+ 		    gnu_cico_only_integral_type = false;
+ 		}
+ 
+ 	      TYPE_NAME (gnu_cico_return_type) = get_identifier ("RETURN");
+ 	      /* Set a default alignment to speed up accesses.  But we should
+ 		 not increase the size of the structure too much, lest it does
+ 		 not fit in return registers anymore.  */
+ 	      SET_TYPE_ALIGN (gnu_cico_return_type,
+ 			      get_mode_alignment (ptr_mode));
+ 	    }
+ 
+ 	  tree gnu_field
+ 	    = create_field_decl (gnu_param_name, gnu_param_type,
+ 				 gnu_cico_return_type, NULL_TREE, NULL_TREE,
+ 				 0, 0);
+ 	  Sloc_to_locus (Sloc (gnat_param),
+ 			 &DECL_SOURCE_LOCATION (gnu_field));
+ 	  DECL_CHAIN (gnu_field) = gnu_cico_field_list;
+ 	  gnu_cico_field_list = gnu_field;
+ 	  gnu_cico_list = tree_cons (gnu_field, gnu_param, gnu_cico_list);
+ 	  if (!type_contains_only_integral_data (gnu_param_type))
+ 	    gnu_cico_only_integral_type = false;
+ 	}
+     }
+ 
+   /* If the subprogram uses the copy-in copy-out mechanism, possibly adjust
+      and finish up the return type.  */
+   if (gnu_cico_list && !incomplete_profile_p)
+     {
+       /* If we have a CICO list but it has only one entry, we convert
+ 	 this function into a function that returns this object.  */
+       if (list_length (gnu_cico_list) == 1)
+ 	gnu_cico_return_type = TREE_TYPE (TREE_PURPOSE (gnu_cico_list));
+ 
+       /* Do not finalize the return type if the subprogram is stubbed
+ 	 since structures are incomplete for the back-end.  */
+       else if (Convention (gnat_subprog) != Convention_Stubbed)
+ 	{
+ 	  finish_record_type (gnu_cico_return_type,
+ 			      nreverse (gnu_cico_field_list),
+ 			      0, false);
+ 
+ 	  /* Try to promote the mode if the return type is fully returned
+ 	     in integer registers, again to speed up accesses.  */
+ 	  if (TYPE_MODE (gnu_cico_return_type) == BLKmode
+ 	      && gnu_cico_only_integral_type
+ 	      && !targetm.calls.return_in_memory (gnu_cico_return_type,
+ 						  NULL_TREE))
+ 	    {
+ 	      unsigned int size
+ 		= TREE_INT_CST_LOW (TYPE_SIZE (gnu_cico_return_type));
+ 	      unsigned int i = BITS_PER_UNIT;
+ 	      scalar_int_mode mode;
+ 
+ 	      while (i < size)
+ 		i <<= 1;
+ 	      if (int_mode_for_size (i, 0).exists (&mode))
+ 		{
+ 		  SET_TYPE_MODE (gnu_cico_return_type, mode);
+ 		  SET_TYPE_ALIGN (gnu_cico_return_type,
+ 				  GET_MODE_ALIGNMENT (mode));
+ 		  TYPE_SIZE (gnu_cico_return_type)
+ 		    = bitsize_int (GET_MODE_BITSIZE (mode));
+ 		  TYPE_SIZE_UNIT (gnu_cico_return_type)
+ 		    = size_int (GET_MODE_SIZE (mode));
+ 		}
+ 	    }
+ 
+ 	  /* But demote the mode if the return type is partly returned in FP
+ 	     registers to avoid creating problematic paradoxical subregs.
+ 	     Note that we need to cater to historical 32-bit architectures
+ 	     that incorrectly use the mode to select the return mechanism.  */
+ 	  else if (INTEGRAL_MODE_P (TYPE_MODE (gnu_cico_return_type))
+ 		   && !gnu_cico_only_integral_type
+ 		   && BITS_PER_WORD >= 64
+ 		   && !targetm.calls.return_in_memory (gnu_cico_return_type,
+ 						       NULL_TREE))
+ 	    SET_TYPE_MODE (gnu_cico_return_type, BLKmode);
+ 
+ 	  if (debug_info_p)
+ 	    rest_of_record_type_compilation (gnu_cico_return_type);
+ 	}
+ 
+       gnu_return_type = gnu_cico_return_type;
+     }
+ 
+   /* The lists have been built in reverse.  */
+   gnu_param_type_list = nreverse (gnu_param_type_list);
+   if (!variadic)
+     gnu_param_type_list = chainon (gnu_param_type_list, void_list_node);
+   gnu_param_list = nreverse (gnu_param_list);
+   gnu_cico_list = nreverse (gnu_cico_list);
+ 
+   /* Turn imported C++ constructors into their callable form as done in the
+      front-end, i.e. add the "this" pointer and void the return type.  */
+   if (method_p
+       && Is_Constructor (gnat_subprog)
+       && !VOID_TYPE_P (gnu_return_type))
+     {
+       tree gnu_param_type
+ 	= build_pointer_type (gnat_to_gnu_profile_type (gnat_return_type));
+       tree gnu_param_name = get_identifier (Get_Name_String (Name_uInit));
+       tree gnu_param
+ 	= build_decl (input_location, PARM_DECL, gnu_param_name,
+ 		      gnu_param_type);
+       gnu_param_type_list
+ 	= tree_cons (NULL_TREE, gnu_param_type, gnu_param_type_list);
+       DECL_CHAIN (gnu_param) = gnu_param_list;
+       gnu_param_list = gnu_param;
+       gnu_return_type = void_type_node;
+     }
+ 
+   /* If the profile is incomplete, we only set the (temporary) return and
+      parameter types; otherwise, we build the full type.  In either case,
+      we reuse an already existing GCC tree that we built previously here.  */
+   if (incomplete_profile_p)
+     {
+       if (gnu_type && FUNC_OR_METHOD_TYPE_P (gnu_type))
+ 	;
+       else
+ 	gnu_type = make_node (method_p ? METHOD_TYPE : FUNCTION_TYPE);
+       TREE_TYPE (gnu_type) = gnu_return_type;
+       TYPE_ARG_TYPES (gnu_type) = gnu_param_type_list;
+       TYPE_RETURN_UNCONSTRAINED_P (gnu_type) = return_unconstrained_p;
+       TYPE_RETURN_BY_DIRECT_REF_P (gnu_type) = return_by_direct_ref_p;
+       TREE_ADDRESSABLE (gnu_type) = return_by_invisi_ref_p;
+     }
+   else
+     {
+       if (gnu_type && FUNC_OR_METHOD_TYPE_P (gnu_type))
+ 	{
+ 	  TREE_TYPE (gnu_type) = gnu_return_type;
+ 	  TYPE_ARG_TYPES (gnu_type) = gnu_param_type_list;
+ 	  if (method_p)
+ 	    {
+ 	      tree gnu_basetype = TREE_TYPE (TREE_VALUE (gnu_param_type_list));
+ 	      TYPE_METHOD_BASETYPE (gnu_type)
+ 		= TYPE_MAIN_VARIANT (gnu_basetype);
+ 	    }
+ 	  TYPE_CI_CO_LIST (gnu_type) = gnu_cico_list;
+ 	  TYPE_RETURN_UNCONSTRAINED_P (gnu_type) = return_unconstrained_p;
+ 	  TYPE_RETURN_BY_DIRECT_REF_P (gnu_type) = return_by_direct_ref_p;
+ 	  TREE_ADDRESSABLE (gnu_type) = return_by_invisi_ref_p;
+ 	  TYPE_CANONICAL (gnu_type) = gnu_type;
+ 	  layout_type (gnu_type);
+ 	}
+       else
+ 	{
+ 	  if (method_p)
+ 	    {
+ 	      tree gnu_basetype = TREE_TYPE (TREE_VALUE (gnu_param_type_list));
+ 	      gnu_type
+ 		= build_method_type_directly (gnu_basetype, gnu_return_type,
+ 					      TREE_CHAIN (gnu_param_type_list));
+ 	    }
+ 	  else
+ 	    gnu_type
+ 	      = build_function_type (gnu_return_type, gnu_param_type_list);
+ 
+ 	  /* GNU_TYPE may be shared since GCC hashes types.  Unshare it if it
+ 	     has a different TYPE_CI_CO_LIST or flags.  */
+ 	  if (!fntype_same_flags_p (gnu_type, gnu_cico_list,
+ 				    return_unconstrained_p,
+ 				    return_by_direct_ref_p,
+ 				    return_by_invisi_ref_p))
+ 	    {
+ 	      gnu_type = copy_type (gnu_type);
+ 	      TYPE_CI_CO_LIST (gnu_type) = gnu_cico_list;
+ 	      TYPE_RETURN_UNCONSTRAINED_P (gnu_type) = return_unconstrained_p;
+ 	      TYPE_RETURN_BY_DIRECT_REF_P (gnu_type) = return_by_direct_ref_p;
+ 	      TREE_ADDRESSABLE (gnu_type) = return_by_invisi_ref_p;
+ 	    }
+ 	}
+ 
+       if (pure_flag)
+ 	gnu_type = change_qualified_type (gnu_type, TYPE_QUAL_RESTRICT);
+ 
+       if (No_Return (gnat_subprog))
+ 	gnu_type = change_qualified_type (gnu_type, TYPE_QUAL_VOLATILE);
+ 
+       /* If this subprogram is expectedly bound to a GCC builtin, fetch the
+ 	 corresponding DECL node and check the parameter association.  */
+       if (Is_Intrinsic_Subprogram (gnat_subprog)
+ 	  && Present (Interface_Name (gnat_subprog)))
+ 	{
+ 	  tree gnu_ext_name = create_concat_name (gnat_subprog, NULL);
+ 	  tree gnu_builtin_decl = builtin_decl_for (gnu_ext_name);
+ 
+ 	  /* If we have a builtin DECL for that function, use it.  Check if
+ 	     the profiles are compatible and warn if they are not.  Note that
+ 	     the checker is expected to post diagnostics in this case.  */
+ 	  if (gnu_builtin_decl)
+ 	    {
+ 	      if (fndecl_built_in_p (gnu_builtin_decl, BUILT_IN_NORMAL))
+ 		{
+ 		  const enum built_in_function fncode
+ 		    = DECL_FUNCTION_CODE (gnu_builtin_decl);
+ 
+ 		  switch (fncode)
+ 		  {
+ 		    case BUILT_IN_SYNC_FETCH_AND_ADD_N:
+ 		    case BUILT_IN_SYNC_FETCH_AND_SUB_N:
+ 		    case BUILT_IN_SYNC_FETCH_AND_OR_N:
+ 		    case BUILT_IN_SYNC_FETCH_AND_AND_N:
+ 		    case BUILT_IN_SYNC_FETCH_AND_XOR_N:
+ 		    case BUILT_IN_SYNC_FETCH_AND_NAND_N:
+ 		    case BUILT_IN_SYNC_ADD_AND_FETCH_N:
+ 		    case BUILT_IN_SYNC_SUB_AND_FETCH_N:
+ 		    case BUILT_IN_SYNC_OR_AND_FETCH_N:
+ 		    case BUILT_IN_SYNC_AND_AND_FETCH_N:
+ 		    case BUILT_IN_SYNC_XOR_AND_FETCH_N:
+ 		    case BUILT_IN_SYNC_NAND_AND_FETCH_N:
+ 		    case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_N:
+ 		    case BUILT_IN_SYNC_LOCK_TEST_AND_SET_N:
+ 		    case BUILT_IN_ATOMIC_EXCHANGE_N:
+ 		    case BUILT_IN_ATOMIC_LOAD_N:
+ 		    case BUILT_IN_ATOMIC_ADD_FETCH_N:
+ 		    case BUILT_IN_ATOMIC_SUB_FETCH_N:
+ 		    case BUILT_IN_ATOMIC_AND_FETCH_N:
+ 		    case BUILT_IN_ATOMIC_NAND_FETCH_N:
+ 		    case BUILT_IN_ATOMIC_XOR_FETCH_N:
+ 		    case BUILT_IN_ATOMIC_OR_FETCH_N:
+ 		    case BUILT_IN_ATOMIC_FETCH_ADD_N:
+ 		    case BUILT_IN_ATOMIC_FETCH_SUB_N:
+ 		    case BUILT_IN_ATOMIC_FETCH_AND_N:
+ 		    case BUILT_IN_ATOMIC_FETCH_NAND_N:
+ 		    case BUILT_IN_ATOMIC_FETCH_XOR_N:
+ 		    case BUILT_IN_ATOMIC_FETCH_OR_N:
+ 		      /* This is a generic builtin overloaded on its return
+ 			 type, so do type resolution based on it.  */
+ 		      if (!VOID_TYPE_P (gnu_return_type)
+ 			  && type_for_atomic_builtin_p (gnu_return_type))
+ 			gnu_builtin_decl
+ 			  = resolve_atomic_builtin (fncode, gnu_return_type);
+ 		      else
+ 			{
+ 			  post_error
+ 			    ("??cannot import type-generic 'G'C'C builtin!",
+ 			     gnat_subprog);
+ 			  post_error
+ 			    ("\\?use a supported result type",
+ 			     gnat_subprog);
+ 			  gnu_builtin_decl = NULL_TREE;
+ 			}
+ 		      break;
+ 
+ 		    case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_N:
+ 		      /* This is a generic builtin overloaded on its third
+ 			 parameter type, so do type resolution based on it.  */
+ 		      if (list_length (gnu_param_type_list) >= 4
+ 			  && type_for_atomic_builtin_p
+ 			       (list_third (gnu_param_type_list)))
+ 			gnu_builtin_decl
+ 			  = resolve_atomic_builtin
+ 			      (fncode, list_third (gnu_param_type_list));
+ 		      else
+ 			{
+ 			  post_error
+ 			    ("??cannot import type-generic 'G'C'C builtin!",
+ 			     gnat_subprog);
+ 			  post_error
+ 			    ("\\?use a supported third parameter type",
+ 			     gnat_subprog);
+ 			  gnu_builtin_decl = NULL_TREE;
+ 			}
+ 		      break;
+ 
+ 		    case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_N:
+ 		    case BUILT_IN_SYNC_LOCK_RELEASE_N:
+ 		    case BUILT_IN_ATOMIC_STORE_N:
+ 		      post_error
+ 			("??unsupported type-generic 'G'C'C builtin!",
+ 			 gnat_subprog);
+ 		      gnu_builtin_decl = NULL_TREE;
+ 		      break;
+ 
+ 		    default:
+ 		      break;
+ 		  }
+ 		}
+ 
+ 	      if (gnu_builtin_decl)
+ 		{
+ 		  const intrin_binding_t inb
+ 		    = { gnat_subprog, gnu_type, TREE_TYPE (gnu_builtin_decl) };
+ 
+ 		  if (!intrin_profiles_compatible_p (&inb))
+ 		    post_error
+ 		      ("??profile of& doesn''t match the builtin it binds!",
+ 		       gnat_subprog);
+ 
+ 		  return gnu_builtin_decl;
+ 		}
+ 	    }
+ 
+ 	  /* Inability to find the builtin DECL most often indicates a genuine
+ 	     mistake, but imports of unregistered intrinsics are sometimes used
+ 	     on purpose to allow hooking in alternate bodies; we post a warning
+ 	     conditioned on Wshadow in this case, to let developers be notified
+ 	     on demand without risking false positives with common default sets
+ 	     of options.  */
+ 	  if (warn_shadow)
+ 	    post_error ("'G'C'C builtin not found for&!??", gnat_subprog);
+ 	}
+     }
+ 
+   *param_list = gnu_param_list;
+ 
+   return gnu_type;
+ }
+ 
+ /* Return the external name for GNAT_SUBPROG given its entity name.  */
+ 
+ static tree
+ gnu_ext_name_for_subprog (Entity_Id gnat_subprog, tree gnu_entity_name)
+ {
+   tree gnu_ext_name = create_concat_name (gnat_subprog, NULL);
+ 
+   /* If there was no specified Interface_Name and the external and
+      internal names of the subprogram are the same, only use the
+      internal name to allow disambiguation of nested subprograms.  */
+   if (No (Interface_Name (gnat_subprog)) && gnu_ext_name == gnu_entity_name)
+     gnu_ext_name = NULL_TREE;
+ 
+   return gnu_ext_name;
+ }
+ 
+ /* Set TYPE_NONALIASED_COMPONENT on an array type built by means of
+    build_nonshared_array_type.  */
+ 
+ static void
+ set_nonaliased_component_on_array_type (tree type)
+ {
+   TYPE_NONALIASED_COMPONENT (type) = 1;
+   if (TYPE_CANONICAL (type))
+     TYPE_NONALIASED_COMPONENT (TYPE_CANONICAL (type)) = 1;
+ }
+ 
+ /* Set TYPE_REVERSE_STORAGE_ORDER on an array type built by means of
+    build_nonshared_array_type.  */
+ 
+ static void
+ set_reverse_storage_order_on_array_type (tree type)
+ {
+   TYPE_REVERSE_STORAGE_ORDER (type) = 1;
+   if (TYPE_CANONICAL (type))
+     TYPE_REVERSE_STORAGE_ORDER (TYPE_CANONICAL (type)) = 1;
+ }
+ 
+ /* Return true if DISCR1 and DISCR2 represent the same discriminant.  */
+ 
+ static bool
+ same_discriminant_p (Entity_Id discr1, Entity_Id discr2)
+ {
+   while (Present (Corresponding_Discriminant (discr1)))
+     discr1 = Corresponding_Discriminant (discr1);
+ 
+   while (Present (Corresponding_Discriminant (discr2)))
+     discr2 = Corresponding_Discriminant (discr2);
+ 
+   return
+     Original_Record_Component (discr1) == Original_Record_Component (discr2);
+ }
+ 
+ /* Return true if the array type GNU_TYPE, which represents a dimension of
+    GNAT_TYPE, has a non-aliased component in the back-end sense.  */
+ 
+ static bool
+ array_type_has_nonaliased_component (tree gnu_type, Entity_Id gnat_type)
+ {
+   /* If the array type has an aliased component in the front-end sense,
+      then it also has an aliased component in the back-end sense.  */
+   if (Has_Aliased_Components (gnat_type))
+     return false;
+ 
+   /* If this is a derived type, then it has a non-aliased component if
+      and only if its parent type also has one.  */
+   if (Is_Derived_Type (gnat_type))
+     {
+       tree gnu_parent_type = gnat_to_gnu_type (Etype (gnat_type));
+       if (TREE_CODE (gnu_parent_type) == UNCONSTRAINED_ARRAY_TYPE)
+ 	gnu_parent_type
+ 	  = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_parent_type))));
+       return TYPE_NONALIASED_COMPONENT (gnu_parent_type);
+     }
+ 
+   /* For a multi-dimensional array type, find the component type.  */
+   while (TREE_CODE (TREE_TYPE (gnu_type)) == ARRAY_TYPE
+ 	 && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type)))
+     gnu_type = TREE_TYPE (gnu_type);
+ 
+   /* Consider that an array of pointers has an aliased component, which is
+      sort of logical and helps with Taft Amendment types in LTO mode.  */
+   if (POINTER_TYPE_P (TREE_TYPE (gnu_type)))
+     return false;
+ 
+   /* Otherwise, rely exclusively on properties of the element type.  */
+   return type_for_nonaliased_component_p (TREE_TYPE (gnu_type));
+ }
+ 
+ /* Return true if GNAT_ADDRESS is a value known at compile-time.  */
+ 
+ static bool
+ compile_time_known_address_p (Node_Id gnat_address)
+ {
+   /* Handle reference to a constant.  */
+   if (Is_Entity_Name (gnat_address)
+       && Ekind (Entity (gnat_address)) == E_Constant)
+     {
+       gnat_address = Constant_Value (Entity (gnat_address));
+       if (No (gnat_address))
+ 	return false;
+     }
+ 
+   /* Catch System'To_Address.  */
+   if (Nkind (gnat_address) == N_Unchecked_Type_Conversion)
+     gnat_address = Expression (gnat_address);
+ 
+   return Compile_Time_Known_Value (gnat_address);
+ }
+ 
+ /* Return true if GNAT_INDIC, a N_Subtype_Indication node for the index of a
+    FLB, cannot yield superflat objects, i.e. if the inequality HB >= LB - 1
+    is true for these objects.  LB and HB are the low and high bounds.  */
+ 
+ static bool
+ flb_cannot_be_superflat (Node_Id gnat_indic)
+ {
+   const Entity_Id gnat_type = Entity (Subtype_Mark (gnat_indic));
+   const Entity_Id gnat_subtype = Etype (gnat_indic);
+   Node_Id gnat_scalar_range, gnat_lb, gnat_hb;
+   tree gnu_lb, gnu_hb, gnu_lb_minus_one;
+ 
+   /* This is a FLB so LB is fixed.  */
+   if ((Ekind (gnat_subtype) == E_Signed_Integer_Subtype
+        || Ekind (gnat_subtype) == E_Modular_Integer_Subtype)
+       && (gnat_scalar_range = Scalar_Range (gnat_subtype)))
+     {
+       gnat_lb = Low_Bound (gnat_scalar_range);
+       gcc_assert (Nkind (gnat_lb) == N_Integer_Literal);
+     }
+   else
+     return false;
+ 
+   /* The low bound of the type is a lower bound for HB.  */
+   if ((Ekind (gnat_type) == E_Signed_Integer_Subtype
+        || Ekind (gnat_type) == E_Modular_Integer_Subtype)
+       && (gnat_scalar_range = Scalar_Range (gnat_type)))
+     {
+       gnat_hb = Low_Bound (gnat_scalar_range);
+       gcc_assert (Nkind (gnat_hb) == N_Integer_Literal);
+     }
+   else
+     return false;
+ 
+   /* We need at least a signed 64-bit type to catch most cases.  */
+   gnu_lb = UI_To_gnu (Intval (gnat_lb), sbitsizetype);
+   gnu_hb = UI_To_gnu (Intval (gnat_hb), sbitsizetype);
+   if (TREE_OVERFLOW (gnu_lb) || TREE_OVERFLOW (gnu_hb))
+     return false;
+ 
+   /* If the low bound is the smallest integer, nothing can be smaller.  */
+   gnu_lb_minus_one = size_binop (MINUS_EXPR, gnu_lb, sbitsize_one_node);
+   if (TREE_OVERFLOW (gnu_lb_minus_one))
+     return true;
+ 
+   return !tree_int_cst_lt (gnu_hb, gnu_lb_minus_one);
+ }
+ 
+ /* Return true if GNAT_RANGE, a N_Range node, cannot be superflat, i.e. if the
+    inequality HB >= LB - 1 is true.  LB and HB are the low and high bounds.  */
+ 
+ static bool
+ range_cannot_be_superflat (Node_Id gnat_range)
+ {
+   Node_Id gnat_lb = Low_Bound (gnat_range), gnat_hb = High_Bound (gnat_range);
+   Node_Id gnat_scalar_range;
+   tree gnu_lb, gnu_hb, gnu_lb_minus_one;
+ 
+   /* If the low bound is not constant, take the worst case by finding an upper
+      bound for its type, repeatedly if need be.  */
+   while (Nkind (gnat_lb) != N_Integer_Literal
+ 	 && (Ekind (Etype (gnat_lb)) == E_Signed_Integer_Subtype
+ 	     || Ekind (Etype (gnat_lb)) == E_Modular_Integer_Subtype)
+ 	 && (gnat_scalar_range = Scalar_Range (Etype (gnat_lb)))
+ 	 && (Nkind (gnat_scalar_range) == N_Signed_Integer_Type_Definition
+ 	     || Nkind (gnat_scalar_range) == N_Range))
+     gnat_lb = High_Bound (gnat_scalar_range);
+ 
+   /* If the high bound is not constant, take the worst case by finding a lower
+      bound for its type, repeatedly if need be.  */
+   while (Nkind (gnat_hb) != N_Integer_Literal
+ 	 && (Ekind (Etype (gnat_hb)) == E_Signed_Integer_Subtype
+ 	     || Ekind (Etype (gnat_hb)) == E_Modular_Integer_Subtype)
+ 	 && (gnat_scalar_range = Scalar_Range (Etype (gnat_hb)))
+ 	 && (Nkind (gnat_scalar_range) == N_Signed_Integer_Type_Definition
+ 	     || Nkind (gnat_scalar_range) == N_Range))
+     gnat_hb = Low_Bound (gnat_scalar_range);
+ 
+   /* If we have failed to find constant bounds, punt.  */
+   if (Nkind (gnat_lb) != N_Integer_Literal
+       || Nkind (gnat_hb) != N_Integer_Literal)
+     return false;
+ 
+   /* We need at least a signed 64-bit type to catch most cases.  */
+   gnu_lb = UI_To_gnu (Intval (gnat_lb), sbitsizetype);
+   gnu_hb = UI_To_gnu (Intval (gnat_hb), sbitsizetype);
+   if (TREE_OVERFLOW (gnu_lb) || TREE_OVERFLOW (gnu_hb))
+     return false;
+ 
+   /* If the low bound is the smallest integer, nothing can be smaller.  */
+   gnu_lb_minus_one = size_binop (MINUS_EXPR, gnu_lb, sbitsize_one_node);
+   if (TREE_OVERFLOW (gnu_lb_minus_one))
+     return true;
+ 
+   return !tree_int_cst_lt (gnu_hb, gnu_lb_minus_one);
+ }
+ 
+ /* Return true if GNU_EXPR is (essentially) the address of a CONSTRUCTOR.  */
+ 
+ static bool
+ constructor_address_p (tree gnu_expr)
+ {
+   while (TREE_CODE (gnu_expr) == NOP_EXPR
+ 	 || TREE_CODE (gnu_expr) == CONVERT_EXPR
+ 	 || TREE_CODE (gnu_expr) == NON_LVALUE_EXPR)
+     gnu_expr = TREE_OPERAND (gnu_expr, 0);
+ 
+   return (TREE_CODE (gnu_expr) == ADDR_EXPR
+ 	  && TREE_CODE (TREE_OPERAND (gnu_expr, 0)) == CONSTRUCTOR);
+ }
+ 
+ /* Return true if the size in units represented by GNU_SIZE can be handled by
+    an allocation.  If STATIC_P is true, consider only what can be done with a
+    static allocation.  */
+ 
+ static bool
+ allocatable_size_p (tree gnu_size, bool static_p)
+ {
+   /* We can allocate a fixed size if it is a valid for the middle-end.  */
+   if (TREE_CODE (gnu_size) == INTEGER_CST)
+     return valid_constant_size_p (gnu_size);
+ 
+   /* We can allocate a variable size if this isn't a static allocation.  */
+   else
+     return !static_p;
+ }
+ 
+ /* Return true if GNU_EXPR needs a conversion to GNU_TYPE when used as the
+    initial value of an object of GNU_TYPE.  */
+ 
+ static bool
+ initial_value_needs_conversion (tree gnu_type, tree gnu_expr)
+ {
+   /* Do not convert if the object's type is unconstrained because this would
+      generate useless evaluations of the CONSTRUCTOR to compute the size.  */
+   if (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE
+       || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
+     return false;
+ 
+   /* Do not convert if the object's type is a padding record whose field is of
+      self-referential size because we want to copy only the actual data.  */
+   if (type_is_padding_self_referential (gnu_type))
+     return false;
+ 
+   /* Do not convert a call to a function that returns with variable size since
+      we want to use the return slot optimization in this case.  */
+   if (TREE_CODE (gnu_expr) == CALL_EXPR
+       && return_type_with_variable_size_p (TREE_TYPE (gnu_expr)))
+     return false;
+ 
+   /* Do not convert to a record type with a variant part from a record type
+      without one, to keep the object simpler.  */
+   if (TREE_CODE (gnu_type) == RECORD_TYPE
+       && TREE_CODE (TREE_TYPE (gnu_expr)) == RECORD_TYPE
+       && get_variant_part (gnu_type)
+       && !get_variant_part (TREE_TYPE (gnu_expr)))
+     return false;
+ 
+   /* In all the other cases, convert the expression to the object's type.  */
+   return true;
+ }
+ 
+ /* Add the contribution of [MIN, MAX] to the current number of elements N_ELEM
+    of an array type and return the result, or NULL_TREE if it overflowed.  */
+ 
+ static tree
+ update_n_elem (tree n_elem, tree min, tree max)
+ {
+   /* First deal with the empty case.  */
+   if (TREE_CODE (min) == INTEGER_CST
+       && TREE_CODE (max) == INTEGER_CST
+       && tree_int_cst_lt (max, min))
+     return size_zero_node;
+ 
+   min = convert (sizetype, min);
+   max = convert (sizetype, max);
+ 
+   /* Compute the number of elements in this dimension.  */
+   tree this_n_elem
+     = size_binop (PLUS_EXPR, size_one_node, size_binop (MINUS_EXPR, max, min));
+ 
+   if (TREE_CODE (this_n_elem) == INTEGER_CST && TREE_OVERFLOW (this_n_elem))
+     return NULL_TREE;
+ 
+   /* Multiply the current number of elements by the result.  */
+   n_elem = size_binop (MULT_EXPR, n_elem, this_n_elem);
+ 
+   if (TREE_CODE (n_elem) == INTEGER_CST && TREE_OVERFLOW (n_elem))
+     return NULL_TREE;
+ 
+   return n_elem;
+ }
+ 
+ /* Given GNAT_ENTITY, elaborate all expressions that are required to
+    be elaborated at the point of its definition, but do nothing else.  */
+ 
+ void
+ elaborate_entity (Entity_Id gnat_entity)
+ {
+   switch (Ekind (gnat_entity))
+     {
+     case E_Signed_Integer_Subtype:
+     case E_Modular_Integer_Subtype:
+     case E_Enumeration_Subtype:
+     case E_Ordinary_Fixed_Point_Subtype:
+     case E_Decimal_Fixed_Point_Subtype:
+     case E_Floating_Point_Subtype:
+       {
+ 	Node_Id gnat_lb = Type_Low_Bound (gnat_entity);
+ 	Node_Id gnat_hb = Type_High_Bound (gnat_entity);
+ 
+ 	/* ??? Tests to avoid Constraint_Error in static expressions
+ 	   are needed until after the front stops generating bogus
+ 	   conversions on bounds of real types.  */
+ 	if (!Raises_Constraint_Error (gnat_lb))
+ 	  elaborate_expression (gnat_lb, gnat_entity, "L", true, false,
+ 				Needs_Debug_Info (gnat_entity));
+ 	if (!Raises_Constraint_Error (gnat_hb))
+ 	  elaborate_expression (gnat_hb, gnat_entity, "U", true, false,
+ 				Needs_Debug_Info (gnat_entity));
+       break;
+       }
+ 
+     case E_Record_Subtype:
+     case E_Private_Subtype:
+     case E_Limited_Private_Subtype:
+     case E_Record_Subtype_With_Private:
+       if (Has_Discriminants (gnat_entity) && Is_Constrained (gnat_entity))
+ 	{
+ 	  Node_Id gnat_discriminant_expr;
+ 	  Entity_Id gnat_field;
+ 
+ 	  for (gnat_field
+ 	       = First_Discriminant (Implementation_Base_Type (gnat_entity)),
+ 	       gnat_discriminant_expr
+ 	       = First_Elmt (Discriminant_Constraint (gnat_entity));
+ 	       Present (gnat_field);
+ 	       gnat_field = Next_Discriminant (gnat_field),
+ 	       gnat_discriminant_expr = Next_Elmt (gnat_discriminant_expr))
+ 	    /* Ignore access discriminants.  */
+ 	    if (!Is_Access_Type (Etype (Node (gnat_discriminant_expr))))
+ 	      elaborate_expression (Node (gnat_discriminant_expr),
+ 				    gnat_entity, get_entity_char (gnat_field),
+ 				    true, false, false);
+ 	}
+       break;
+ 
+     }
+ }
+ 
+ /* Prepend to ATTR_LIST an entry for an attribute with provided TYPE,
+    NAME, ARGS and ERROR_POINT.  */
+ 
+ static void
+ prepend_one_attribute (struct attrib **attr_list,
+ 		       enum attrib_type attrib_type,
+ 		       tree attr_name,
+ 		       tree attr_args,
+ 		       Node_Id attr_error_point)
+ {
+   struct attrib * attr = (struct attrib *) xmalloc (sizeof (struct attrib));
+ 
+   attr->type = attrib_type;
+   attr->name = attr_name;
+   attr->args = attr_args;
+   attr->error_point = attr_error_point;
+ 
+   attr->next = *attr_list;
+   *attr_list = attr;
+ }
+ 
+ /* Prepend to ATTR_LIST an entry for an attribute provided by GNAT_PRAGMA.  */
+ 
+ static void
+ prepend_one_attribute_pragma (struct attrib **attr_list, Node_Id gnat_pragma)
+ {
+   const Node_Id gnat_arg = First (Pragma_Argument_Associations (gnat_pragma));
+   Node_Id gnat_next_arg = Next (gnat_arg);
+   tree gnu_arg1 = NULL_TREE, gnu_arg_list = NULL_TREE;
+   enum attrib_type etype;
+ 
+   /* Map the pragma at hand.  Skip if this isn't one we know how to handle.  */
+   switch (Get_Pragma_Id (Chars (Pragma_Identifier (gnat_pragma))))
+     {
+     case Pragma_Linker_Alias:
+       etype = ATTR_LINK_ALIAS;
+       break;
+ 
+     case Pragma_Linker_Constructor:
+       etype = ATTR_LINK_CONSTRUCTOR;
+       break;
+ 
+     case Pragma_Linker_Destructor:
+       etype = ATTR_LINK_DESTRUCTOR;
+       break;
+ 
+     case Pragma_Linker_Section:
+       etype = ATTR_LINK_SECTION;
+       break;
+ 
+     case Pragma_Machine_Attribute:
+       etype = ATTR_MACHINE_ATTRIBUTE;
+       break;
+ 
+     case Pragma_Thread_Local_Storage:
+       etype = ATTR_THREAD_LOCAL_STORAGE;
+       break;
+ 
+     case Pragma_Weak_External:
+       etype = ATTR_WEAK_EXTERNAL;
+       break;
+ 
+     default:
+       return;
+     }
+ 
+   /* See what arguments we have and turn them into GCC trees for attribute
+      handlers.  The first one is always expected to be a string meant to be
+      turned into an identifier.  The next ones are all static expressions,
+      among which strings meant to be turned into an identifier, except for
+      a couple of specific attributes that require raw strings.  */
+   if (Present (gnat_next_arg))
+     {
+       gnu_arg1 = gnat_to_gnu (Expression (gnat_next_arg));
+       gcc_assert (TREE_CODE (gnu_arg1) == STRING_CST);
+ 
+       const char *const p = TREE_STRING_POINTER (gnu_arg1);
+       const bool string_args
+ 	= strcmp (p, "target") == 0 || strcmp (p, "target_clones") == 0;
+       gnu_arg1 = get_identifier (p);
+       if (IDENTIFIER_LENGTH (gnu_arg1) == 0)
+ 	return;
+       gnat_next_arg = Next (gnat_next_arg);
+ 
+       while (Present (gnat_next_arg))
+ 	{
+ 	  tree gnu_arg = gnat_to_gnu (Expression (gnat_next_arg));
+ 	  if (TREE_CODE (gnu_arg) == STRING_CST && !string_args)
+ 	    gnu_arg = get_identifier (TREE_STRING_POINTER (gnu_arg));
+ 	  gnu_arg_list
+ 	    = chainon (gnu_arg_list, build_tree_list (NULL_TREE, gnu_arg));
+ 	  gnat_next_arg = Next (gnat_next_arg);
+ 	}
+     }
+ 
+   prepend_one_attribute (attr_list, etype, gnu_arg1, gnu_arg_list,
+ 			 Present (Next (gnat_arg))
+ 			 ? Expression (Next (gnat_arg)) : gnat_pragma);
+ }
+ 
+ /* Prepend to ATTR_LIST the list of attributes for GNAT_ENTITY, if any.  */
+ 
+ static void
+ prepend_attributes (struct attrib **attr_list, Entity_Id gnat_entity)
+ {
+   Node_Id gnat_temp;
+ 
+   /* Attributes are stored as Representation Item pragmas.  */
+   for (gnat_temp = First_Rep_Item (gnat_entity);
+        Present (gnat_temp);
+        gnat_temp = Next_Rep_Item (gnat_temp))
+     if (Nkind (gnat_temp) == N_Pragma)
+       prepend_one_attribute_pragma (attr_list, gnat_temp);
+ }
+ 
+ /* Given a GNAT tree GNAT_EXPR, for an expression which is a value within a
+    type definition (either a bound or a discriminant value) for GNAT_ENTITY,
+    return the GCC tree to use for that expression.  S is the suffix to use
+    if a variable needs to be created and DEFINITION is true if this is done
+    for a definition of GNAT_ENTITY.  If NEED_VALUE is true, we need a result;
+    otherwise, we are just elaborating the expression for side-effects.  If
+    NEED_FOR_DEBUG is true, we need a variable for debugging purposes even
+    if it isn't needed for code generation.  */
+ 
+ static tree
+ elaborate_expression (Node_Id gnat_expr, Entity_Id gnat_entity, const char *s,
+ 		      bool definition, bool need_value, bool need_for_debug)
+ {
+   tree gnu_expr;
+ 
+   /* If we already elaborated this expression (e.g. it was involved
+      in the definition of a private type), use the old value.  */
+   if (present_gnu_tree (gnat_expr))
+     return get_gnu_tree (gnat_expr);
+ 
+   /* If we don't need a value and this is static or a discriminant,
+      we don't need to do anything.  */
+   if (!need_value
+       && (Compile_Time_Known_Value (gnat_expr)
+ 	  || (Nkind (gnat_expr) == N_Identifier
+ 	      && Ekind (Entity (gnat_expr)) == E_Discriminant)))
+     return NULL_TREE;
+ 
+   /* If it's a static expression, we don't need a variable for debugging.  */
+   if (need_for_debug && Compile_Time_Known_Value (gnat_expr))
+     need_for_debug = false;
+ 
+   /* Otherwise, convert this tree to its GCC equivalent and elaborate it.  */
+   gnu_expr = elaborate_expression_1 (gnat_to_gnu (gnat_expr), gnat_entity, s,
+ 				     definition, need_for_debug);
+ 
+   /* Save the expression in case we try to elaborate this entity again.  Since
+      it's not a DECL, don't check it.  Don't save if it's a discriminant.  */
+   if (!CONTAINS_PLACEHOLDER_P (gnu_expr))
+     save_gnu_tree (gnat_expr, gnu_expr, true);
+ 
+   return need_value ? gnu_expr : error_mark_node;
+ }
+ 
+ /* Similar, but take a GNU expression and always return a result.  */
+ 
+ static tree
+ elaborate_expression_1 (tree gnu_expr, Entity_Id gnat_entity, const char *s,
+ 			bool definition, bool need_for_debug)
+ {
+   const bool expr_public_p = Is_Public (gnat_entity);
+   const bool expr_global_p = expr_public_p || global_bindings_p ();
+   bool expr_variable_p, use_variable;
+ 
+   /* If GNU_EXPR contains a placeholder, just return it.  We rely on the fact
+      that an expression cannot contain both a discriminant and a variable.  */
+   if (CONTAINS_PLACEHOLDER_P (gnu_expr))
+     return gnu_expr;
+ 
+   /* If GNU_EXPR is neither a constant nor based on a read-only variable, make
+      a variable that is initialized to contain the expression when the package
+      containing the definition is elaborated.  If this entity is defined at top
+      level, replace the expression by the variable; otherwise use a SAVE_EXPR
+      if this is necessary.  */
+   if (TREE_CONSTANT (gnu_expr))
+     expr_variable_p = false;
+   else
+     {
+       /* Skip any conversions and simple constant arithmetics to see if the
+ 	 expression is based on a read-only variable.  */
+       tree inner = remove_conversions (gnu_expr, true);
+ 
+       inner = skip_simple_constant_arithmetic (inner);
+ 
+       if (handled_component_p (inner))
+ 	inner = get_inner_constant_reference (inner);
+ 
+       expr_variable_p
+ 	= !(inner
+ 	    && TREE_CODE (inner) == VAR_DECL
+ 	    && (TREE_READONLY (inner) || DECL_READONLY_ONCE_ELAB (inner)));
+     }
+ 
+   /* We only need to use the variable if we are in a global context since GCC
+      can do the right thing in the local case.  However, when not optimizing,
+      use it for bounds of loop iteration scheme to avoid code duplication.  */
+   use_variable = expr_variable_p
+ 		 && (expr_global_p
+ 		     || (!optimize
+ 		         && definition
+ 			 && Is_Itype (gnat_entity)
+ 			 && Nkind (Associated_Node_For_Itype (gnat_entity))
+ 			    == N_Loop_Parameter_Specification));
+ 
+   /* If the GNAT encodings are not used, we don't need a variable for debug
+      info purposes if the expression is a constant or another variable, but
+      we must be careful because we do not generate debug info for external
+      variables so DECL_IGNORED_P is not stable across units.  */
+   if (need_for_debug
+       && gnat_encodings != DWARF_GNAT_ENCODINGS_ALL
+       && (TREE_CONSTANT (gnu_expr)
+ 	  || (!expr_public_p
+ 	      && DECL_P (gnu_expr)
+ 	      && !DECL_IGNORED_P (gnu_expr))))
+     need_for_debug = false;
+ 
+   /* Now create it, possibly only for debugging purposes.  */
+   if (use_variable || need_for_debug)
+     {
+       /* The following variable creation can happen when processing the body
+ 	 of subprograms that are defined outside of the extended main unit and
+ 	 inlined.  In this case, we are not at the global scope, and thus the
+ 	 new variable must not be tagged "external", as we used to do here as
+ 	 soon as DEFINITION was false.  And note that we test Needs_Debug_Info
+ 	 here instead of NEED_FOR_DEBUG because, once the variable is created,
+ 	 whether or not debug information is generated for it is orthogonal to
+ 	 the reason why it was created in the first place.  */
+       tree gnu_decl
+ 	= create_var_decl (create_concat_name (gnat_entity, s), NULL_TREE,
+ 			   TREE_TYPE (gnu_expr), gnu_expr, true,
+ 			   expr_public_p, !definition && expr_global_p,
+ 			   expr_global_p, false, true,
+ 			   Needs_Debug_Info (gnat_entity),
+ 			   NULL, gnat_entity, false);
+ 
+       /* Using this variable for debug (if need_for_debug is true) requires
+ 	 a proper location.  The back-end will compute a location for this
+ 	 variable only if the variable is used by the generated code.
+ 	 Returning the variable ensures the caller will use it in generated
+ 	 code.  Note that there is no need for a location if the debug info
+ 	 contains an integer constant.  */
+       if (use_variable || (need_for_debug && !TREE_CONSTANT (gnu_expr)))
+ 	return gnu_decl;
+     }
+ 
+   return expr_variable_p ? gnat_save_expr (gnu_expr) : gnu_expr;
+ }
+ 
+ /* Similar, but take an alignment factor and make it explicit in the tree.  */
+ 
+ static tree
+ elaborate_expression_2 (tree gnu_expr, Entity_Id gnat_entity, const char *s,
+ 			bool definition, bool need_for_debug, unsigned int align)
+ {
+   tree unit_align = size_int (align / BITS_PER_UNIT);
+   return
+     size_binop (MULT_EXPR,
+ 		elaborate_expression_1 (size_binop (EXACT_DIV_EXPR,
+ 						    gnu_expr,
+ 						    unit_align),
+ 					gnat_entity, s, definition,
+ 					need_for_debug),
+ 		unit_align);
+ }
+ 
+ /* Structure to hold internal data for elaborate_reference.  */
+ 
+ struct er_data
+ {
+   Entity_Id entity;
+   bool definition;
+   unsigned int n;
+ };
+ 
+ /* Wrapper function around elaborate_expression_1 for elaborate_reference.  */
+ 
+ static tree
+ elaborate_reference_1 (tree ref, void *data)
+ {
+   struct er_data *er = (struct er_data *)data;
+   char suffix[16];
+ 
+   /* This is what elaborate_expression_1 does if NEED_DEBUG is false.  */
+   if (TREE_CONSTANT (ref))
+     return ref;
+ 
+   /* If this is a COMPONENT_REF of a fat pointer, elaborate the entire fat
+      pointer.  This may be more efficient, but will also allow us to more
+      easily find the match for the PLACEHOLDER_EXPR.  */
+   if (TREE_CODE (ref) == COMPONENT_REF
+       && TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (ref, 0))))
+     return build3 (COMPONENT_REF, TREE_TYPE (ref),
+ 		   elaborate_reference_1 (TREE_OPERAND (ref, 0), data),
+ 		   TREE_OPERAND (ref, 1), NULL_TREE);
+ 
+   /* If this is the displacement of a pointer, elaborate the pointer and then
+      displace the result.  The actual purpose here is to drop the location on
+      the expression, which may be problematic if replicated on references.  */
+   if (TREE_CODE (ref) == POINTER_PLUS_EXPR
+       && TREE_CODE (TREE_OPERAND (ref, 1)) == INTEGER_CST)
+     return build2 (POINTER_PLUS_EXPR, TREE_TYPE (ref),
+ 		   elaborate_reference_1 (TREE_OPERAND (ref, 0), data),
+ 		   TREE_OPERAND (ref, 1));
+ 
+   sprintf (suffix, "EXP%d", ++er->n);
+   return
+     elaborate_expression_1 (ref, er->entity, suffix, er->definition, false);
+ }
+ 
+ /* Elaborate the reference REF to be used as renamed object for GNAT_ENTITY.
+    DEFINITION is true if this is done for a definition of GNAT_ENTITY and
+    INIT is set to the first arm of a COMPOUND_EXPR present in REF, if any.  */
+ 
+ static tree
+ elaborate_reference (tree ref, Entity_Id gnat_entity, bool definition,
+ 		     tree *init)
+ {
+   struct er_data er = { gnat_entity, definition, 0 };
+   return gnat_rewrite_reference (ref, elaborate_reference_1, &er, init);
+ }
+ 
+ /* Given a GNU tree and a GNAT list of choices, generate an expression to test
+    the value passed against the list of choices.  */
+ 
+ static tree
+ choices_to_gnu (tree gnu_operand, Node_Id gnat_choices)
+ {
+   tree gnu_result = boolean_false_node, gnu_type;
+ 
+   gnu_operand = maybe_character_value (gnu_operand);
+   gnu_type = TREE_TYPE (gnu_operand);
+ 
+   for (Node_Id gnat_choice = First (gnat_choices);
+        Present (gnat_choice);
+        gnat_choice = Next (gnat_choice))
+     {
+       tree gnu_low = NULL_TREE, gnu_high = NULL_TREE;
+       tree gnu_test;
+ 
+       switch (Nkind (gnat_choice))
+ 	{
+ 	case N_Range:
+ 	  gnu_low = gnat_to_gnu (Low_Bound (gnat_choice));
+ 	  gnu_high = gnat_to_gnu (High_Bound (gnat_choice));
+ 	  break;
+ 
+ 	case N_Subtype_Indication:
+ 	  gnu_low = gnat_to_gnu (Low_Bound (Range_Expression
+ 					    (Constraint (gnat_choice))));
+ 	  gnu_high = gnat_to_gnu (High_Bound (Range_Expression
+ 					      (Constraint (gnat_choice))));
+ 	  break;
+ 
+ 	case N_Identifier:
+ 	case N_Expanded_Name:
+ 	  /* This represents either a subtype range or a static value of
+ 	     some kind; Ekind says which.  */
+ 	  if (Is_Type (Entity (gnat_choice)))
+ 	    {
+ 	      tree gnu_type = get_unpadded_type (Entity (gnat_choice));
+ 
+ 	      gnu_low = TYPE_MIN_VALUE (gnu_type);
+ 	      gnu_high = TYPE_MAX_VALUE (gnu_type);
+ 	      break;
+ 	    }
+ 
+ 	  /* ... fall through ... */
+ 
+ 	case N_Character_Literal:
+ 	case N_Integer_Literal:
+ 	  gnu_low = gnat_to_gnu (gnat_choice);
+ 	  break;
+ 
+ 	case N_Others_Choice:
+ 	  break;
+ 
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+ 
+       /* Everything should be folded into constants at this point.  */
+       gcc_assert (!gnu_low  || TREE_CODE (gnu_low)  == INTEGER_CST);
+       gcc_assert (!gnu_high || TREE_CODE (gnu_high) == INTEGER_CST);
+ 
+       if (gnu_low && TREE_TYPE (gnu_low) != gnu_type)
+ 	gnu_low = convert (gnu_type, gnu_low);
+       if (gnu_high && TREE_TYPE (gnu_high) != gnu_type)
+ 	gnu_high = convert (gnu_type, gnu_high);
+ 
+       if (gnu_low && gnu_high)
+ 	gnu_test
+ 	  = build_binary_op (TRUTH_ANDIF_EXPR, boolean_type_node,
+ 			     build_binary_op (GE_EXPR, boolean_type_node,
+ 					      gnu_operand, gnu_low, true),
+ 			     build_binary_op (LE_EXPR, boolean_type_node,
+ 					      gnu_operand, gnu_high, true),
+ 			     true);
+       else if (gnu_low == boolean_true_node
+ 	       && TREE_TYPE (gnu_operand) == boolean_type_node)
+ 	gnu_test = gnu_operand;
+       else if (gnu_low)
+ 	gnu_test
+ 	  = build_binary_op (EQ_EXPR, boolean_type_node, gnu_operand, gnu_low,
+ 			     true);
+       else
+ 	gnu_test = boolean_true_node;
+ 
+       if (gnu_result == boolean_false_node)
+ 	gnu_result = gnu_test;
+       else
+ 	gnu_result
+ 	  = build_binary_op (TRUTH_ORIF_EXPR, boolean_type_node, gnu_result,
+ 			     gnu_test, true);
+     }
+ 
+   return gnu_result;
+ }
+ 
+ /* Adjust PACKED setting as passed to gnat_to_gnu_field for a field of
+    type FIELD_TYPE to be placed in RECORD_TYPE.  Return the result.  */
+ 
+ static int
+ adjust_packed (tree field_type, tree record_type, int packed)
+ {
+   /* If the field is an array of variable size, we'd better not pack it because
+      this would misalign it and, therefore, probably cause large temporarie to
+      be created in case we need to take its address.  See addressable_p and the
+      notes on the addressability issues for further details.  */
+   if (TREE_CODE (field_type) == ARRAY_TYPE
+       && type_has_variable_size (field_type))
+     return 0;
+ 
+   /* In the other cases, we can honor the packing.  */
+   if (packed)
+     return packed;
+ 
+   /* If the alignment of the record is specified and the field type
+      is over-aligned, request Storage_Unit alignment for the field.  */
+   if (TYPE_ALIGN (record_type)
+       && TYPE_ALIGN (field_type) > TYPE_ALIGN (record_type))
+     return -1;
+ 
+   /* Likewise if the maximum alignment of the record is specified.  */
+   if (TYPE_MAX_ALIGN (record_type)
+       && TYPE_ALIGN (field_type) > TYPE_MAX_ALIGN (record_type))
+     return -1;
+ 
+   return 0;
+ }
+ 
+ /* Return a GCC tree for a field corresponding to GNAT_FIELD to be
+    placed in GNU_RECORD_TYPE.
+ 
+    PACKED is 1 if the enclosing record is packed or -1 if the enclosing
+    record has Component_Alignment of Storage_Unit.
+ 
+    DEFINITION is true if this field is for a record being defined.
+ 
+    DEBUG_INFO_P is true if we need to write debug information for types
+    that we may create in the process.  */
+ 
+ static tree
+ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed,
+ 		   bool definition, bool debug_info_p)
+ {
+   const Node_Id gnat_clause = Component_Clause (gnat_field);
+   const Entity_Id gnat_record_type = Underlying_Type (Scope (gnat_field));
+   const Entity_Id gnat_field_type = Etype (gnat_field);
+   tree gnu_field_type = gnat_to_gnu_type (gnat_field_type);
+   tree gnu_field_id = get_entity_name (gnat_field);
+   const bool is_aliased = Is_Aliased (gnat_field);
+   const bool is_full_access
+     = (Is_Full_Access (gnat_field) || Is_Full_Access (gnat_field_type));
+   const bool is_independent
+     = (Is_Independent (gnat_field) || Is_Independent (gnat_field_type));
+   const bool is_volatile
+     = (Treat_As_Volatile (gnat_field) || Treat_As_Volatile (gnat_field_type));
+   const bool is_by_ref = TYPE_IS_BY_REFERENCE_P (gnu_field_type);
+   const bool is_strict_alignment = Strict_Alignment (gnat_field_type);
+   /* We used to consider that volatile fields also require strict alignment,
+      but that was an interpolation and would cause us to reject a pragma
+      volatile on a packed record type containing boolean components, while
+      there is no basis to do so in the RM.  In such cases, the writes will
+      involve load-modify-store sequences, but that's OK for volatile.  The
+      only constraint is the implementation advice whereby only the bits of
+      the components should be accessed if they both start and end on byte
+      boundaries, but that should be guaranteed by the GCC memory model.
+      Note that we have some redundancies (is_full_access => is_independent,
+      is_aliased => is_independent and is_by_ref => is_strict_alignment)
+      so the following formula is sufficient.  */
+   const bool needs_strict_alignment = (is_independent || is_strict_alignment);
+   const char *field_s, *size_s;
+   tree gnu_field, gnu_size, gnu_pos;
+   bool is_bitfield;
+ 
+   /* Force the type of the Not_Handled_By_Others field to be that of the
+      field in struct Exception_Data declared in raise.h instead of using
+      the declared boolean type.  We need to do that because there is no
+      easy way to make use of a C compatible boolean type for the latter.  */
+   if (gnu_field_id == not_handled_by_others_name_id
+       && gnu_field_type == boolean_type_node)
+     gnu_field_type = char_type_node;
+ 
+   /* The qualifier to be used in messages.  */
+   if (is_aliased)
+     field_s = "aliased&";
+   else if (is_full_access)
+     {
+       if (Is_Volatile_Full_Access (gnat_field)
+ 	  || Is_Volatile_Full_Access (gnat_field_type))
+ 	field_s = "volatile full access&";
+       else
+ 	field_s = "atomic&";
+     }
+   else if (is_independent)
+     field_s = "independent&";
+   else if (is_by_ref)
+     field_s = "& with by-reference type";
+   else if (is_strict_alignment)
+     field_s = "& with aliased part";
+   else
+     field_s = "&";
+ 
+   /* The message to be used for incompatible size.  */
+   if (is_aliased || is_full_access)
+     size_s = "size for %s must be ^";
+   else if (field_s)
+     size_s = "size for %s too small{, minimum allowed is ^}";
+ 
+   /* If a field requires strict alignment, we cannot pack it (RM 13.2(7)).  */
+   if (needs_strict_alignment)
+     packed = 0;
+   else
+     packed = adjust_packed (gnu_field_type, gnu_record_type, packed);
+ 
+   /* If a size is specified, use it.  Otherwise, if the record type is packed,
+      use the official RM size.  See "Handling of Type'Size Values" in Einfo
+      for further details.  */
+   if (Present (gnat_clause) || Known_Esize (gnat_field))
+     gnu_size = validate_size (Esize (gnat_field), gnu_field_type, gnat_field,
+ 			      FIELD_DECL, false, true, size_s, field_s);
+   else if (packed == 1)
+     {
+       gnu_size = rm_size (gnu_field_type);
+       if (TREE_CODE (gnu_size) != INTEGER_CST)
+ 	gnu_size = NULL_TREE;
+     }
+   else
+     gnu_size = NULL_TREE;
+ 
+   /* Likewise for the position.  */
+   if (Present (gnat_clause))
+     {
+       gnu_pos = UI_To_gnu (Component_Bit_Offset (gnat_field), bitsizetype);
+       is_bitfield = !value_factor_p (gnu_pos, BITS_PER_UNIT);
+     }
+ 
+   /* If the record has rep clauses and this is the tag field, make a rep
+      clause for it as well.  */
+   else if (Has_Specified_Layout (gnat_record_type)
+ 	   && Chars (gnat_field) == Name_uTag)
+     {
+       gnu_pos = bitsize_zero_node;
+       gnu_size = TYPE_SIZE (gnu_field_type);
+       is_bitfield = false;
+     }
+ 
+   else
+     {
+       gnu_pos = NULL_TREE;
+       is_bitfield = false;
+     }
+ 
+   /* If the field's type is a fixed-size record that does not require strict
+      alignment, and the record is packed or we have a position specified for
+      the field that makes it a bitfield or we have a specified size that is
+      smaller than that of the field's type, then see if we can get either an
+      integral mode form of the field's type or a smaller form.  If we can,
+      consider that a size was specified for the field if there wasn't one
+      already, so we know to make it a bitfield and avoid making things wider.
+ 
+      Changing to an integral mode form is useful when the record is packed as
+      we can then place the field at a non-byte-aligned position and so achieve
+      tighter packing.  This is in addition required if the field shares a byte
+      with another field and the front-end lets the back-end handle the access
+      to the field, because GCC cannot handle non-byte-aligned BLKmode fields.
+ 
+      Changing to a smaller form is required if the specified size is smaller
+      than that of the field's type and the type contains sub-fields that are
+      padded, in order to avoid generating accesses to these sub-fields that
+      are wider than the field.
+ 
+      We avoid the transformation if it is not required or potentially useful,
+      as it might entail an increase of the field's alignment and have ripple
+      effects on the outer record type.  A typical case is a field known to be
+      byte-aligned and not to share a byte with another field.  */
+   if (!needs_strict_alignment
+       && RECORD_OR_UNION_TYPE_P (gnu_field_type)
+       && !TYPE_FAT_POINTER_P (gnu_field_type)
+       && tree_fits_uhwi_p (TYPE_SIZE (gnu_field_type))
+       && (packed == 1
+ 	  || is_bitfield
+ 	  || (gnu_size
+ 	      && tree_int_cst_lt (gnu_size, TYPE_SIZE (gnu_field_type)))))
+     {
+       tree gnu_packable_type
+ 	= make_packable_type (gnu_field_type, true, is_bitfield ? 1 : 0);
+       if (gnu_packable_type != gnu_field_type)
+ 	{
+ 	  gnu_field_type = gnu_packable_type;
+ 	  if (!gnu_size)
+ 	    gnu_size = rm_size (gnu_field_type);
+ 	}
+     }
+ 
+   /* Now check if the type of the field allows atomic access.  */
+   if (Is_Full_Access (gnat_field))
+     {
+       const unsigned int align
+ 	= promote_object_alignment (gnu_field_type, NULL_TREE, gnat_field);
+       if (align > 0)
+ 	gnu_field_type
+ 	  = maybe_pad_type (gnu_field_type, NULL_TREE, align, gnat_field,
+ 			    false, definition, true);
+       check_ok_for_atomic_type (gnu_field_type, gnat_field, false);
+     }
+ 
+   /* If a position is specified, check that it is valid.  */
+   if (gnu_pos)
+     {
+       Entity_Id gnat_parent = Parent_Subtype (gnat_record_type);
+ 
+       /* Ensure the position doesn't overlap with the parent subtype if there
+ 	 is one.  It would be impossible to build CONSTRUCTORs and accessing
+ 	 the parent could clobber the component in the extension if directly
+ 	 done.  We accept it with -gnatd.K for the sake of compatibility.  */
+       if (Present (gnat_parent)
+ 	  && !(Debug_Flag_Dot_KK && Is_Fully_Repped_Tagged_Type (gnat_parent)))
+ 	{
+ 	  tree gnu_parent = gnat_to_gnu_type (gnat_parent);
+ 
+ 	  if (TREE_CODE (TYPE_SIZE (gnu_parent)) == INTEGER_CST
+ 	      && tree_int_cst_lt (gnu_pos, TYPE_SIZE (gnu_parent)))
+ 	    post_error_ne_tree
+ 	      ("position for& must be beyond parent{, minimum allowed is ^}",
+ 	       Position (gnat_clause), gnat_field, TYPE_SIZE_UNIT (gnu_parent));
+ 	}
+ 
+       /* If this field needs strict alignment, make sure that the record is
+ 	 sufficiently aligned and that the position and size are consistent
+ 	 with the type.  But don't do it if we are just annotating types and
+ 	 the field's type is tagged, since tagged types aren't fully laid out
+ 	 in this mode.  Also, note that atomic implies volatile so the inner
+ 	 test sequences ordering is significant here.  */
+       if (needs_strict_alignment
+ 	  && !(type_annotate_only && Is_Tagged_Type (gnat_field_type)))
+ 	{
+ 	  const unsigned int type_align = TYPE_ALIGN (gnu_field_type);
+ 
+ 	  if (TYPE_ALIGN (gnu_record_type)
+ 	      && TYPE_ALIGN (gnu_record_type) < type_align)
+ 	    SET_TYPE_ALIGN (gnu_record_type, type_align);
+ 
+ 	  /* If the position is not a multiple of the storage unit, then error
+ 	     out and reset the position.  */
+ 	  if (!integer_zerop (size_binop (TRUNC_MOD_EXPR, gnu_pos,
+ 					  bitsize_unit_node)))
+ 	    {
+ 	      char s[128];
+ 	      snprintf (s, sizeof (s), "position for %s must be "
+ 			"multiple of Storage_Unit", field_s);
+ 	      post_error_ne (s, First_Bit (gnat_clause), gnat_field);
+ 	      gnu_pos = NULL_TREE;
+ 	    }
+ 
+ 	  /* If the position is not a multiple of the alignment of the type,
+ 	     then error out and reset the position.  */
+ 	  else if (type_align > BITS_PER_UNIT
+ 		   && !integer_zerop (size_binop (TRUNC_MOD_EXPR, gnu_pos,
+ 						  bitsize_int (type_align))))
+ 	    {
+ 	      char s[128];
+               snprintf (s, sizeof (s), "position for %s must be multiple of ^",
+ 			field_s);
+ 	      post_error_ne_num (s, First_Bit (gnat_clause), gnat_field,
+ 				 type_align / BITS_PER_UNIT);
+ 	      post_error_ne_num ("\\because alignment of its type& is ^",
+ 				 First_Bit (gnat_clause), Etype (gnat_field),
+ 				 type_align / BITS_PER_UNIT);
+ 	      gnu_pos = NULL_TREE;
+ 	    }
+ 
+ 	  if (gnu_size)
+ 	    {
+ 	      tree type_size = TYPE_SIZE (gnu_field_type);
+ 	      int cmp;
+ 
+ 	      /* If the size is not a multiple of the storage unit, then error
+ 		 out and reset the size.  */
+ 	      if (!integer_zerop (size_binop (TRUNC_MOD_EXPR, gnu_size,
+ 					      bitsize_unit_node)))
+ 		{
+ 		  char s[128];
+ 		  snprintf (s, sizeof (s), "size for %s must be "
+ 			    "multiple of Storage_Unit", field_s);
+ 		  post_error_ne (s, Last_Bit (gnat_clause), gnat_field);
+ 		  gnu_size = NULL_TREE;
+ 		}
+ 
+ 	      /* If the size is lower than that of the type, or greater for
+ 		 atomic and aliased, then error out and reset the size.  */
+ 	      else if ((cmp = tree_int_cst_compare (gnu_size, type_size)) < 0
+ 		       || (cmp > 0 && (is_aliased || is_full_access)))
+ 		{
+ 		  char s[128];
+ 		  snprintf (s, sizeof (s), size_s, field_s);
+ 		  post_error_ne_tree (s, Last_Bit (gnat_clause), gnat_field,
+ 				      type_size);
+ 		  gnu_size = NULL_TREE;
+ 		}
+ 	    }
+ 	}
+     }
+ 
+   else
+     {
+       /* If we are packing the record and the field is BLKmode, round the
+ 	 size up to a byte boundary.  */
+       if (packed && TYPE_MODE (gnu_field_type) == BLKmode && gnu_size)
+ 	gnu_size = round_up (gnu_size, BITS_PER_UNIT);
+     }
+ 
+   /* We need to make the size the maximum for the type if it is
+      self-referential and an unconstrained type.  In that case, we can't
+      pack the field since we can't make a copy to align it.  */
+   if (TREE_CODE (gnu_field_type) == RECORD_TYPE
+       && !gnu_size
+       && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_field_type))
+       && !Is_Constrained (Underlying_Type (gnat_field_type)))
+     {
+       gnu_size = max_size (TYPE_SIZE (gnu_field_type), true);
+       packed = 0;
+     }
+ 
+   /* If a size is specified, adjust the field's type to it.  */
+   if (gnu_size)
+     {
+       tree orig_field_type;
+ 
+       /* If the field's type is justified modular, we would need to remove
+ 	 the wrapper to (better) meet the layout requirements.  However we
+ 	 can do so only if the field is not aliased to preserve the unique
+ 	 layout, if it has the same storage order as the enclosing record
+ 	 and if the prescribed size is not greater than that of the packed
+ 	 array to preserve the justification.  */
+       if (!needs_strict_alignment
+ 	  && TREE_CODE (gnu_field_type) == RECORD_TYPE
+ 	  && TYPE_JUSTIFIED_MODULAR_P (gnu_field_type)
+ 	  && TYPE_REVERSE_STORAGE_ORDER (gnu_field_type)
+ 	     == Reverse_Storage_Order (gnat_record_type)
+ 	  && tree_int_cst_compare (gnu_size, TYPE_ADA_SIZE (gnu_field_type))
+ 	       <= 0)
+ 	gnu_field_type = TREE_TYPE (TYPE_FIELDS (gnu_field_type));
+ 
+       /* Similarly if the field's type is a misaligned integral type, but
+ 	 there is no restriction on the size as there is no justification.  */
+       if (!needs_strict_alignment
+ 	  && TYPE_IS_PADDING_P (gnu_field_type)
+ 	  && INTEGRAL_TYPE_P (TREE_TYPE (TYPE_FIELDS (gnu_field_type))))
+ 	gnu_field_type = TREE_TYPE (TYPE_FIELDS (gnu_field_type));
+ 
+       orig_field_type = gnu_field_type;
+       gnu_field_type
+ 	= make_type_from_size (gnu_field_type, gnu_size,
+ 			       Has_Biased_Representation (gnat_field));
+ 
+       /* If the type has been extended, we may need to cap the alignment.  */
+       if (!needs_strict_alignment
+ 	  && gnu_field_type != orig_field_type
+ 	  && tree_int_cst_lt (TYPE_SIZE (orig_field_type), gnu_size))
+ 	packed = adjust_packed (gnu_field_type, gnu_record_type, packed);
+ 
+       orig_field_type = gnu_field_type;
+       gnu_field_type = maybe_pad_type (gnu_field_type, gnu_size, 0, gnat_field,
+ 				       false, definition, true);
+ 
+       /* If a padding record was made, declare it now since it will never be
+ 	 declared otherwise.  This is necessary to ensure that its subtrees
+ 	 are properly marked.  */
+       if (gnu_field_type != orig_field_type
+ 	  && !DECL_P (TYPE_NAME (gnu_field_type)))
+ 	create_type_decl (TYPE_NAME (gnu_field_type), gnu_field_type, true,
+ 			  debug_info_p, gnat_field);
+     }
+ 
+   /* Otherwise (or if there was an error), don't specify a position.  */
+   else
+     gnu_pos = NULL_TREE;
+ 
+   /* If the field's type is a padded type made for a scalar field of a record
+      type with reverse storage order, we need to propagate the reverse storage
+      order to the padding type since it is the innermost enclosing aggregate
+      type around the scalar.  */
+   if (TYPE_IS_PADDING_P (gnu_field_type)
+       && TYPE_REVERSE_STORAGE_ORDER (gnu_record_type)
+       && Is_Scalar_Type (gnat_field_type))
+     gnu_field_type = set_reverse_storage_order_on_pad_type (gnu_field_type);
+ 
+   gcc_assert (TREE_CODE (gnu_field_type) != RECORD_TYPE
+ 	      || !TYPE_CONTAINS_TEMPLATE_P (gnu_field_type));
+ 
+   /* Now create the decl for the field.  */
+   gnu_field
+     = create_field_decl (gnu_field_id, gnu_field_type, gnu_record_type,
+ 			 gnu_size, gnu_pos, packed, is_aliased);
+   Sloc_to_locus (Sloc (gnat_field), &DECL_SOURCE_LOCATION (gnu_field));
+   DECL_ALIASED_P (gnu_field) = is_aliased;
+   TREE_SIDE_EFFECTS (gnu_field) = TREE_THIS_VOLATILE (gnu_field) = is_volatile;
+ 
+   /* If this is a discriminant, then we treat it specially: first, we set its
+      index number for the back-annotation; second, we record whether it cannot
+      be changed once it has been set for the computation of loop invariants;
+      third, we make it addressable in order for the optimizer to more easily
+      see that it cannot be modified by assignments to the other fields of the
+      record (see create_field_decl for a more detailed explanation), which is
+      crucial to hoist the offset and size computations of dynamic fields.  */
+   if (Ekind (gnat_field) == E_Discriminant)
+     {
+       DECL_DISCRIMINANT_NUMBER (gnu_field)
+ 	= UI_To_gnu (Discriminant_Number (gnat_field), sizetype);
+       DECL_INVARIANT_P (gnu_field)
+ 	= No (Discriminant_Default_Value (gnat_field));
+       DECL_NONADDRESSABLE_P (gnu_field) = 0;
+     }
+ 
+   return gnu_field;
+ }
+ 
+ /* Return true if at least one member of COMPONENT_LIST needs strict
+    alignment.  */
+ 
+ static bool
+ components_need_strict_alignment (Node_Id component_list)
+ {
+   Node_Id component_decl;
+ 
+   for (component_decl = First_Non_Pragma (Component_Items (component_list));
+        Present (component_decl);
+        component_decl = Next_Non_Pragma (component_decl))
+     {
+       Entity_Id gnat_field = Defining_Entity (component_decl);
+ 
+       if (Is_Independent (gnat_field) || Is_Independent (Etype (gnat_field)))
+ 	return true;
+ 
+       if (Strict_Alignment (Etype (gnat_field)))
+ 	return true;
+     }
+ 
+   return false;
+ }
+ 
+ /* Return true if FIELD is an artificial field.  */
+ 
+ static bool
+ field_is_artificial (tree field)
+ {
+   /* These fields are generated by the front-end proper.  */
+   if (IDENTIFIER_POINTER (DECL_NAME (field)) [0] == '_')
+     return true;
+ 
+   /* These fields are generated by gigi.  */
+   if (DECL_INTERNAL_P (field))
+     return true;
+ 
+   return false;
+ }
+ 
+ /* Return true if FIELD is a non-artificial field with self-referential
+    size.  */
+ 
+ static bool
+ field_has_self_size (tree field)
+ {
+   if (field_is_artificial (field))
+     return false;
+ 
+   if (DECL_SIZE (field) && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST)
+     return false;
+ 
+   return CONTAINS_PLACEHOLDER_P (TYPE_SIZE (TREE_TYPE (field)));
+ }
+ 
+ /* Return true if FIELD is a non-artificial field with variable size.  */
+ 
+ static bool
+ field_has_variable_size (tree field)
+ {
+   if (field_is_artificial (field))
+     return false;
+ 
+   if (DECL_SIZE (field) && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST)
+     return false;
+ 
+   return TREE_CODE (TYPE_SIZE (TREE_TYPE (field))) != INTEGER_CST;
+ }
+ 
+ /* qsort comparer for the bit positions of two record components.  */
+ 
+ static int
+ compare_field_bitpos (const PTR rt1, const PTR rt2)
+ {
+   const_tree const field1 = * (const_tree const *) rt1;
+   const_tree const field2 = * (const_tree const *) rt2;
+   const int ret
+     = tree_int_cst_compare (bit_position (field1), bit_position (field2));
+ 
+   return ret ? ret : (int) (DECL_UID (field1) - DECL_UID (field2));
+ }
+ 
+ /* Sort the LIST of fields in reverse order of increasing position.  */
+ 
+ static tree
+ reverse_sort_field_list (tree list)
+ {
+   const int len = list_length (list);
+   tree *field_arr = XALLOCAVEC (tree, len);
+ 
+   for (int i = 0; list; list = DECL_CHAIN (list), i++)
+     field_arr[i] = list;
+ 
+   qsort (field_arr, len, sizeof (tree), compare_field_bitpos);
+ 
+   for (int i = 0; i < len; i++)
+     {
+       DECL_CHAIN (field_arr[i]) = list;
+       list = field_arr[i];
+     }
+ 
+   return list;
+ }
+ 
+ /* Reverse function from gnat_to_gnu_field: return the GNAT field present in
+    either GNAT_COMPONENT_LIST or the discriminants of GNAT_RECORD_TYPE, and
+    corresponding to the GNU tree GNU_FIELD.  */
+ 
+ static Entity_Id
+ gnu_field_to_gnat (tree gnu_field, Node_Id gnat_component_list,
+ 		   Entity_Id gnat_record_type)
+ {
+   Entity_Id gnat_component_decl, gnat_field;
+ 
+   if (Present (Component_Items (gnat_component_list)))
+     for (gnat_component_decl
+ 	   = First_Non_Pragma (Component_Items (gnat_component_list));
+ 	 Present (gnat_component_decl);
+ 	 gnat_component_decl = Next_Non_Pragma (gnat_component_decl))
+       {
+ 	gnat_field = Defining_Entity (gnat_component_decl);
+ 	if (gnat_to_gnu_field_decl (gnat_field) == gnu_field)
+ 	  return gnat_field;
+       }
+ 
+   if (Has_Discriminants (gnat_record_type))
+     for (gnat_field = First_Stored_Discriminant (gnat_record_type);
+ 	 Present (gnat_field);
+ 	 gnat_field = Next_Stored_Discriminant (gnat_field))
+       if (gnat_to_gnu_field_decl (gnat_field) == gnu_field)
+ 	return gnat_field;
+ 
+   return Empty;
+ }
+ 
+ /* Issue a warning for the problematic placement of GNU_FIELD present in
+    either GNAT_COMPONENT_LIST or the discriminants of GNAT_RECORD_TYPE.
+    IN_VARIANT is true if GNAT_COMPONENT_LIST is the list of a variant.
+    DO_REORDER is true if fields of GNAT_RECORD_TYPE are being reordered.  */
+ 
+ static void
+ warn_on_field_placement (tree gnu_field, Node_Id gnat_component_list,
+ 			 Entity_Id gnat_record_type, bool in_variant,
+ 			 bool do_reorder)
+ {
+   if (!Comes_From_Source (gnat_record_type))
+     return;
+ 
+   Entity_Id gnat_field
+     = gnu_field_to_gnat (gnu_field, gnat_component_list, gnat_record_type);
+   gcc_assert (Present (gnat_field));
+ 
+   const char *msg1
+     = in_variant
+       ? "??variant layout may cause performance issues"
+       : "??record layout may cause performance issues";
+   const char *msg2
+     = Ekind (gnat_field) == E_Discriminant
+       ? "??discriminant & whose length is not multiple of a byte"
+       : field_has_self_size (gnu_field)
+ 	? "??component & whose length depends on a discriminant"
+ 	: field_has_variable_size (gnu_field)
+ 	  ? "??component & whose length is not fixed"
+ 	  : "??component & whose length is not multiple of a byte";
+   const char *msg3
+     = do_reorder
+       ? "??comes too early and was moved down"
+       : "??comes too early and ought to be moved down";
+ 
+   post_error (msg1, gnat_field);
+   post_error_ne (msg2, gnat_field, gnat_field);
+   post_error (msg3, gnat_field);
+ }
+ 
+ /* Likewise but for every field present on GNU_FIELD_LIST.  */
+ 
+ static void
+ warn_on_list_placement (tree gnu_field_list, Node_Id gnat_component_list,
+ 		        Entity_Id gnat_record_type, bool in_variant,
+ 		        bool do_reorder)
+ {
+   for (tree gnu_tmp = gnu_field_list; gnu_tmp; gnu_tmp = DECL_CHAIN (gnu_tmp))
+     warn_on_field_placement (gnu_tmp, gnat_component_list, gnat_record_type,
+ 			     in_variant, do_reorder);
+ }
+ 
+ /* Structure holding information for a given variant.  */
+ typedef struct vinfo
+ {
+   /* The record type of the variant.  */
+   tree type;
+ 
+   /* The name of the variant.  */
+   tree name;
+ 
+   /* The qualifier of the variant.  */
+   tree qual;
+ 
+   /* Whether the variant has a rep clause.  */
+   bool has_rep;
+ 
+   /* Whether the variant is packed.  */
+   bool packed;
+ 
+ } vinfo_t;
+ 
+ /* Translate and chain GNAT_COMPONENT_LIST present in GNAT_RECORD_TYPE to
+    GNU_FIELD_LIST, set the result as the field list of GNU_RECORD_TYPE and
+    finish it up.  Return true if GNU_RECORD_TYPE has a rep clause that affects
+    the layout (see below).  When called from gnat_to_gnu_entity during the
+    processing of a record definition, the GCC node for the parent, if any,
+    will be the single field of GNU_RECORD_TYPE and the GCC nodes for the
+    discriminants will be on GNU_FIELD_LIST.  The other call to this function
+    is a recursive call for the component list of a variant and, in this case,
+    GNU_FIELD_LIST is empty.  Note that GNAT_COMPONENT_LIST may be Empty.
+ 
+    PACKED is 1 if this is for a packed record or -1 if this is for a record
+    with Component_Alignment of Storage_Unit.
+ 
+    DEFINITION is true if we are defining this record type.
+ 
+    CANCEL_ALIGNMENT is true if the alignment should be zeroed before laying
+    out the record.  This means the alignment only serves to force fields to
+    be bitfields, but not to require the record to be that aligned.  This is
+    used for variants.
+ 
+    ALL_REP is true if a rep clause is present for all the fields.
+ 
+    UNCHECKED_UNION is true if we are building this type for a record with a
+    Pragma Unchecked_Union.
+ 
+    ARTIFICIAL is true if this is a type that was generated by the compiler.
+ 
+    DEBUG_INFO is true if we need to write debug information about the type.
+ 
+    IN_VARIANT is true if the componennt list is that of a variant.
+ 
+    FIRST_FREE_POS, if nonzero, is the first (lowest) free field position in
+    the outer record type down to this variant level.  It is nonzero only if
+    all the fields down to this level have a rep clause and ALL_REP is false.
+ 
+    P_GNU_REP_LIST, if nonzero, is a pointer to a list to which each field
+    with a rep clause is to be added; in this case, that is all that should
+    be done with such fields and the return value will be false.  */
+ 
+ static bool
+ components_to_record (Node_Id gnat_component_list, Entity_Id gnat_record_type,
+ 		      tree gnu_field_list, tree gnu_record_type, int packed,
+ 		      bool definition, bool cancel_alignment, bool all_rep,
+ 		      bool unchecked_union, bool artificial, bool debug_info,
+ 		      bool in_variant, tree first_free_pos,
+ 		      tree *p_gnu_rep_list)
+ {
+   const bool needs_xv_encodings
+     = debug_info && gnat_encodings == DWARF_GNAT_ENCODINGS_ALL;
+   bool all_rep_and_size = all_rep && TYPE_SIZE (gnu_record_type);
+   bool variants_have_rep = all_rep;
+   bool layout_with_rep = false;
+   bool has_non_packed_fixed_size_field = false;
+   bool has_self_field = false;
+   bool has_aliased_after_self_field = false;
+   Entity_Id gnat_component_decl, gnat_variant_part;
+   tree gnu_field, gnu_next, gnu_last;
+   tree gnu_variant_part = NULL_TREE;
+   tree gnu_rep_list = NULL_TREE;
+ 
+   /* For each component referenced in a component declaration create a GCC
+      field and add it to the list, skipping pragmas in the GNAT list.  */
+   gnu_last = tree_last (gnu_field_list);
+   if (Present (gnat_component_list)
+       && (Present (Component_Items (gnat_component_list))))
+     for (gnat_component_decl
+ 	   = First_Non_Pragma (Component_Items (gnat_component_list));
+ 	 Present (gnat_component_decl);
+ 	 gnat_component_decl = Next_Non_Pragma (gnat_component_decl))
+       {
+ 	Entity_Id gnat_field = Defining_Entity (gnat_component_decl);
+ 	Name_Id gnat_name = Chars (gnat_field);
+ 
+ 	/* If present, the _Parent field must have been created as the single
+ 	   field of the record type.  Put it before any other fields.  */
+ 	if (gnat_name == Name_uParent)
+ 	  {
+ 	    gnu_field = TYPE_FIELDS (gnu_record_type);
+ 	    gnu_field_list = chainon (gnu_field_list, gnu_field);
+ 	  }
+ 	else
+ 	  {
+ 	    gnu_field = gnat_to_gnu_field (gnat_field, gnu_record_type, packed,
+ 					   definition, debug_info);
+ 
+ 	    /* If this is the _Tag field, put it before any other fields.  */
+ 	    if (gnat_name == Name_uTag)
+ 	      gnu_field_list = chainon (gnu_field_list, gnu_field);
+ 
+ 	    /* If this is the _Controller field, put it before the other
+ 	       fields except for the _Tag or _Parent field.  */
+ 	    else if (gnat_name == Name_uController && gnu_last)
+ 	      {
+ 		DECL_CHAIN (gnu_field) = DECL_CHAIN (gnu_last);
+ 		DECL_CHAIN (gnu_last) = gnu_field;
+ 	      }
+ 
+ 	    /* If this is a regular field, put it after the other fields.  */
+ 	    else
+ 	      {
+ 		DECL_CHAIN (gnu_field) = gnu_field_list;
+ 		gnu_field_list = gnu_field;
+ 		if (!gnu_last)
+ 		  gnu_last = gnu_field;
+ 
+ 		/* And record information for the final layout.  */
+ 		if (field_has_self_size (gnu_field))
+ 		  has_self_field = true;
+ 		else if (has_self_field && DECL_ALIASED_P (gnu_field))
+ 		  has_aliased_after_self_field = true;
+ 		else if (!DECL_FIELD_OFFSET (gnu_field)
+ 			 && !DECL_PACKED (gnu_field)
+ 			 && !field_has_variable_size (gnu_field))
+ 		  has_non_packed_fixed_size_field = true;
+ 	      }
+ 	  }
+ 
+ 	save_gnu_tree (gnat_field, gnu_field, false);
+       }
+ 
+   /* At the end of the component list there may be a variant part.  */
+   if (Present (gnat_component_list))
+     gnat_variant_part = Variant_Part (gnat_component_list);
+   else
+     gnat_variant_part = Empty;
+ 
+   /* We create a QUAL_UNION_TYPE for the variant part since the variants are
+      mutually exclusive and should go in the same memory.  To do this we need
+      to treat each variant as a record whose elements are created from the
+      component list for the variant.  So here we create the records from the
+      lists for the variants and put them all into the QUAL_UNION_TYPE.
+      If this is an Unchecked_Union, we make a UNION_TYPE instead or
+      use GNU_RECORD_TYPE if there are no fields so far.  */
+   if (Present (gnat_variant_part))
+     {
+       Node_Id gnat_discr = Name (gnat_variant_part), variant;
+       tree gnu_discr = gnat_to_gnu (gnat_discr);
+       tree gnu_name = TYPE_IDENTIFIER (gnu_record_type);
+       tree gnu_var_name
+ 	= concat_name (get_identifier (Get_Name_String (Chars (gnat_discr))),
+ 		       "XVN");
+       tree gnu_union_name
+ 	= concat_name (gnu_name, IDENTIFIER_POINTER (gnu_var_name));
+       tree gnu_union_type;
+       tree this_first_free_pos, gnu_variant_list = NULL_TREE;
+       bool union_field_needs_strict_alignment = false;
+       auto_vec <vinfo_t, 16> variant_types;
+       vinfo_t *gnu_variant;
+       unsigned int variants_align = 0;
+       unsigned int i;
+ 
+       /* Reuse the enclosing union if this is an Unchecked_Union whose fields
+ 	 are all in the variant part, to match the layout of C unions.  There
+ 	 is an associated check below.  */
+       if (TREE_CODE (gnu_record_type) == UNION_TYPE)
+ 	gnu_union_type = gnu_record_type;
+       else
+ 	{
+ 	  gnu_union_type
+ 	    = make_node (unchecked_union ? UNION_TYPE : QUAL_UNION_TYPE);
+ 
+ 	  TYPE_NAME (gnu_union_type) = gnu_union_name;
+ 	  SET_TYPE_ALIGN (gnu_union_type, 0);
+ 	  TYPE_PACKED (gnu_union_type) = TYPE_PACKED (gnu_record_type);
+ 	  TYPE_REVERSE_STORAGE_ORDER (gnu_union_type)
+ 	    = TYPE_REVERSE_STORAGE_ORDER (gnu_record_type);
+ 	}
+ 
+       /* If all the fields down to this level have a rep clause, find out
+ 	 whether all the fields at this level also have one.  If so, then
+ 	 compute the new first free position to be passed downward.  */
+       this_first_free_pos = first_free_pos;
+       if (this_first_free_pos)
+ 	{
+ 	  for (gnu_field = gnu_field_list;
+ 	       gnu_field;
+ 	       gnu_field = DECL_CHAIN (gnu_field))
+ 	    if (DECL_FIELD_OFFSET (gnu_field))
+ 	      {
+ 		tree pos = bit_position (gnu_field);
+ 		if (!tree_int_cst_lt (pos, this_first_free_pos))
+ 		  this_first_free_pos
+ 		    = size_binop (PLUS_EXPR, pos, DECL_SIZE (gnu_field));
+ 	      }
+ 	    else
+ 	      {
+ 		this_first_free_pos = NULL_TREE;
+ 		break;
+ 	      }
+ 	}
+ 
+       /* We build the variants in two passes.  The bulk of the work is done in
+ 	 the first pass, that is to say translating the GNAT nodes, building
+ 	 the container types and computing the associated properties.  However
+ 	 we cannot finish up the container types during this pass because we
+ 	 don't know where the variant part will be placed until the end.  */
+       for (variant = First_Non_Pragma (Variants (gnat_variant_part));
+ 	   Present (variant);
+ 	   variant = Next_Non_Pragma (variant))
+ 	{
+ 	  tree gnu_variant_type = make_node (RECORD_TYPE);
+ 	  tree gnu_inner_name, gnu_qual;
+ 	  bool has_rep;
+ 	  int field_packed;
+ 	  vinfo_t vinfo;
+ 
+ 	  Get_Variant_Encoding (variant);
+ 	  gnu_inner_name = get_identifier_with_length (Name_Buffer, Name_Len);
+ 	  TYPE_NAME (gnu_variant_type)
+ 	    = concat_name (gnu_union_name,
+ 			   IDENTIFIER_POINTER (gnu_inner_name));
+ 
+ 	  /* Set the alignment of the inner type in case we need to make
+ 	     inner objects into bitfields, but then clear it out so the
+ 	     record actually gets only the alignment required.  */
+ 	  SET_TYPE_ALIGN (gnu_variant_type, TYPE_ALIGN (gnu_record_type));
+ 	  TYPE_PACKED (gnu_variant_type) = TYPE_PACKED (gnu_record_type);
+ 	  TYPE_REVERSE_STORAGE_ORDER (gnu_variant_type)
+ 	    = TYPE_REVERSE_STORAGE_ORDER (gnu_record_type);
+ 
+ 	  /* Similarly, if the outer record has a size specified and all
+ 	     the fields have a rep clause, we can propagate the size.  */
+ 	  if (all_rep_and_size)
+ 	    {
+ 	      TYPE_SIZE (gnu_variant_type) = TYPE_SIZE (gnu_record_type);
+ 	      TYPE_SIZE_UNIT (gnu_variant_type)
+ 		= TYPE_SIZE_UNIT (gnu_record_type);
+ 	    }
+ 
+ 	  /* Add the fields into the record type for the variant but note that
+ 	     we aren't sure to really use it at this point, see below.  In the
+ 	     case of an unchecked union, we force the fields with a rep clause
+ 	     present in a nested variant to be moved to the outermost variant,
+ 	     so as to flatten the rep-ed layout as much as possible, the reason
+ 	     being that we cannot do any flattening when a subtype statically
+ 	     selects a variant later on, for example for an aggregate.  */
+ 	  has_rep
+ 	    = components_to_record (Component_List (variant), gnat_record_type,
+ 				    NULL_TREE, gnu_variant_type, packed,
+ 				    definition, !all_rep_and_size, all_rep,
+ 				    unchecked_union, true, needs_xv_encodings,
+ 				    true, this_first_free_pos,
+ 				    (all_rep || this_first_free_pos)
+ 				    && !(in_variant && unchecked_union)
+ 				    ? NULL : &gnu_rep_list);
+ 
+ 	  /* Translate the qualifier and annotate the GNAT node.  */
+ 	  gnu_qual = choices_to_gnu (gnu_discr, Discrete_Choices (variant));
+ 	  Set_Present_Expr (variant, annotate_value (gnu_qual));
+ 
+ 	  /* Deal with packedness like in gnat_to_gnu_field.  */
+ 	  if (components_need_strict_alignment (Component_List (variant)))
+ 	    {
+ 	      field_packed = 0;
+ 	      union_field_needs_strict_alignment = true;
+ 	    }
+ 	  else
+ 	    field_packed
+ 	      = adjust_packed (gnu_variant_type, gnu_record_type, packed);
+ 
+ 	  /* Push this variant onto the stack for the second pass.  */
+ 	  vinfo.type = gnu_variant_type;
+ 	  vinfo.name = gnu_inner_name;
+ 	  vinfo.qual = gnu_qual;
+ 	  vinfo.has_rep = has_rep;
+ 	  vinfo.packed = field_packed;
+ 	  variant_types.safe_push (vinfo);
+ 
+ 	  /* Compute the global properties that will determine the placement of
+ 	     the variant part.  */
+ 	  variants_have_rep |= has_rep;
+ 	  if (!field_packed && TYPE_ALIGN (gnu_variant_type) > variants_align)
+ 	    variants_align = TYPE_ALIGN (gnu_variant_type);
+ 	}
+ 
+       /* Round up the first free position to the alignment of the variant part
+ 	 for the variants without rep clause.  This will guarantee a consistent
+ 	 layout independently of the placement of the variant part.  */
+       if (variants_have_rep && variants_align > 0 && this_first_free_pos)
+ 	this_first_free_pos = round_up (this_first_free_pos, variants_align);
+ 
+       /* In the second pass, the container types are adjusted if necessary and
+ 	 finished up, then the corresponding fields of the variant part are
+ 	 built with their qualifier, unless this is an unchecked union.  */
+       FOR_EACH_VEC_ELT (variant_types, i, gnu_variant)
+ 	{
+ 	  tree gnu_variant_type = gnu_variant->type;
+ 	  tree gnu_field_list = TYPE_FIELDS (gnu_variant_type);
+ 
+ 	  /* If this is an Unchecked_Union whose fields are all in the variant
+ 	     part and we have a single field with no representation clause or
+ 	     placed at offset zero, use the field directly to match the layout
+ 	     of C unions.  */
+ 	  if (TREE_CODE (gnu_record_type) == UNION_TYPE
+ 	      && gnu_field_list
+ 	      && !DECL_CHAIN (gnu_field_list)
+ 	      && (!DECL_FIELD_OFFSET (gnu_field_list)
+ 		  || integer_zerop (bit_position (gnu_field_list))))
+ 	    {
+ 	      gnu_field = gnu_field_list;
+ 	      DECL_CONTEXT (gnu_field) = gnu_record_type;
+ 	    }
+ 	  else
+ 	    {
+ 	      /* Finalize the variant type now.  We used to throw away empty
+ 		 record types but we no longer do that because we need them to
+ 		 generate complete debug info for the variant; otherwise, the
+ 		 union type definition will be lacking the fields associated
+ 		 with these empty variants.  */
+ 	      if (gnu_field_list && variants_have_rep && !gnu_variant->has_rep)
+ 		{
+ 		  /* The variant part will be at offset 0 so we need to ensure
+ 		     that the fields are laid out starting from the first free
+ 		     position at this level.  */
+ 		  tree gnu_rep_type = make_node (RECORD_TYPE);
+ 		  tree gnu_rep_part;
+ 		  TYPE_REVERSE_STORAGE_ORDER (gnu_rep_type)
+ 		    = TYPE_REVERSE_STORAGE_ORDER (gnu_variant_type);
+ 		  finish_record_type (gnu_rep_type, NULL_TREE, 0, debug_info);
+ 		  gnu_rep_part
+ 		    = create_rep_part (gnu_rep_type, gnu_variant_type,
+ 				       this_first_free_pos);
+ 		  DECL_CHAIN (gnu_rep_part) = gnu_field_list;
+ 		  gnu_field_list = gnu_rep_part;
+ 		  finish_record_type (gnu_variant_type, gnu_field_list, 0,
+ 				      false);
+ 		}
+ 
+ 	      if (debug_info)
+ 		rest_of_record_type_compilation (gnu_variant_type);
+ 	      create_type_decl (TYPE_NAME (gnu_variant_type), gnu_variant_type,
+ 				true, needs_xv_encodings, gnat_component_list);
+ 
+ 	      gnu_field
+ 		= create_field_decl (gnu_variant->name, gnu_variant_type,
+ 				     gnu_union_type,
+ 				     all_rep_and_size
+ 				     ? TYPE_SIZE (gnu_variant_type) : 0,
+ 				     variants_have_rep ? bitsize_zero_node : 0,
+ 				     gnu_variant->packed, 0);
+ 
+ 	      DECL_INTERNAL_P (gnu_field) = 1;
+ 
+ 	      if (!unchecked_union)
+ 		DECL_QUALIFIER (gnu_field) = gnu_variant->qual;
+ 	    }
+ 
+ 	  DECL_CHAIN (gnu_field) = gnu_variant_list;
+ 	  gnu_variant_list = gnu_field;
+ 	}
+ 
+       /* Only make the QUAL_UNION_TYPE if there are non-empty variants.  */
+       if (gnu_variant_list)
+ 	{
+ 	  int union_field_packed;
+ 
+ 	  if (all_rep_and_size)
+ 	    {
+ 	      TYPE_SIZE (gnu_union_type) = TYPE_SIZE (gnu_record_type);
+ 	      TYPE_SIZE_UNIT (gnu_union_type)
+ 		= TYPE_SIZE_UNIT (gnu_record_type);
+ 	    }
+ 
+ 	  finish_record_type (gnu_union_type, nreverse (gnu_variant_list),
+ 			      all_rep_and_size ? 1 : 0, needs_xv_encodings);
+ 
+ 	  /* If GNU_UNION_TYPE is our record type, this means that we must have
+ 	     an Unchecked_Union whose fields are all in the variant part.  Now
+ 	     verify that and, if so, just return.  */
+ 	  if (gnu_union_type == gnu_record_type)
+ 	    {
+ 	      gcc_assert (unchecked_union
+ 			  && !gnu_field_list
+ 			  && !gnu_rep_list);
+ 	      return variants_have_rep;
+ 	    }
+ 
+ 	  create_type_decl (TYPE_NAME (gnu_union_type), gnu_union_type, true,
+ 			    needs_xv_encodings, gnat_component_list);
+ 
+ 	  /* Deal with packedness like in gnat_to_gnu_field.  */
+ 	  if (union_field_needs_strict_alignment)
+ 	    union_field_packed = 0;
+ 	  else
+ 	    union_field_packed
+ 	      = adjust_packed (gnu_union_type, gnu_record_type, packed);
+ 
+ 	  gnu_variant_part
+ 	    = create_field_decl (gnu_var_name, gnu_union_type, gnu_record_type,
+ 				 all_rep_and_size
+ 				 ? TYPE_SIZE (gnu_union_type) : 0,
+ 				 variants_have_rep ? bitsize_zero_node : 0,
+ 				 union_field_packed, 0);
+ 
+ 	  DECL_INTERNAL_P (gnu_variant_part) = 1;
+ 	}
+     }
+ 
+   /* Scan GNU_FIELD_LIST and see if any fields have rep clauses.  If they do,
+      pull them out and put them onto the appropriate list.
+ 
+      Similarly, pull out the fields with zero size and no rep clause, as they
+      would otherwise modify the layout and thus very likely run afoul of the
+      Ada semantics, which are different from those of C here.
+ 
+      Finally, if there is an aliased field placed in the list after fields
+      with self-referential size, pull out the latter in the same way.
+ 
+      Optionally, if the reordering mechanism is enabled, pull out the fields
+      with self-referential size, variable size and fixed size not a multiple
+      of a byte, so that they don't cause the regular fields to be either at
+      self-referential/variable offset or misaligned.  Note, in the latter
+      case, that this can only happen in packed record types so the alignment
+      is effectively capped to the byte for the whole record.  But we don't
+      do it for packed record types if not all fixed-size fiels can be packed
+      and for non-packed record types if pragma Optimize_Alignment (Space) is
+      specified, because this can prevent alignment gaps from being filled.
+ 
+      Optionally, if the layout warning is enabled, keep track of the above 4
+      different kinds of fields and issue a warning if some of them would be
+      (or are being) reordered by the reordering mechanism.
+ 
+      ??? If we reorder fields, the debugging information will be affected and
+      the debugger print fields in a different order from the source code.  */
+   const bool do_reorder
+     = (Convention (gnat_record_type) == Convention_Ada
+        && !No_Reordering (gnat_record_type)
+        && !(Is_Packed (gnat_record_type)
+ 	    ? has_non_packed_fixed_size_field
+ 	    : Optimize_Alignment_Space (gnat_record_type))
+        && !Debug_Flag_Dot_R);
+   const bool w_reorder
+     = (Convention (gnat_record_type) == Convention_Ada
+        && Warn_On_Questionable_Layout
+        && !(No_Reordering (gnat_record_type) && GNAT_Mode));
+   tree gnu_zero_list = NULL_TREE;
+   tree gnu_self_list = NULL_TREE;
+   tree gnu_var_list = NULL_TREE;
+   tree gnu_bitp_list = NULL_TREE;
+   tree gnu_tmp_bitp_list = NULL_TREE;
+   unsigned int tmp_bitp_size = 0;
+   unsigned int last_reorder_field_type = -1;
+   unsigned int tmp_last_reorder_field_type = -1;
+ 
+ #define MOVE_FROM_FIELD_LIST_TO(LIST)	\
+   do {					\
+     if (gnu_last)			\
+       DECL_CHAIN (gnu_last) = gnu_next;	\
+     else				\
+       gnu_field_list = gnu_next;	\
+ 					\
+     DECL_CHAIN (gnu_field) = (LIST);	\
+     (LIST) = gnu_field;			\
+   } while (0)
+ 
+   gnu_last = NULL_TREE;
+   for (gnu_field = gnu_field_list; gnu_field; gnu_field = gnu_next)
+     {
+       gnu_next = DECL_CHAIN (gnu_field);
+ 
+       if (DECL_FIELD_OFFSET (gnu_field))
+ 	{
+ 	  MOVE_FROM_FIELD_LIST_TO (gnu_rep_list);
+ 	  continue;
+ 	}
+ 
+       if (DECL_SIZE (gnu_field) && integer_zerop (DECL_SIZE (gnu_field)))
+ 	{
+ 	  DECL_SIZE_UNIT (gnu_field) = size_zero_node;
+ 	  DECL_FIELD_OFFSET (gnu_field) = size_zero_node;
+ 	  SET_DECL_OFFSET_ALIGN (gnu_field, BIGGEST_ALIGNMENT);
+ 	  DECL_FIELD_BIT_OFFSET (gnu_field) = bitsize_zero_node;
+ 	  if (DECL_ALIASED_P (gnu_field))
+ 	    SET_TYPE_ALIGN (gnu_record_type,
+ 			    MAX (TYPE_ALIGN (gnu_record_type),
+ 				 TYPE_ALIGN (TREE_TYPE (gnu_field))));
+ 	  MOVE_FROM_FIELD_LIST_TO (gnu_zero_list);
+ 	  continue;
+ 	}
+ 
+       if (has_aliased_after_self_field && field_has_self_size (gnu_field))
+ 	{
+ 	  MOVE_FROM_FIELD_LIST_TO (gnu_self_list);
+ 	  continue;
+ 	}
+ 
+       /* We don't need further processing in default mode.  */
+       if (!w_reorder && !do_reorder)
+ 	{
+ 	  gnu_last = gnu_field;
+ 	  continue;
+ 	}
+ 
+       if (field_has_self_size (gnu_field))
+ 	{
+ 	  if (w_reorder)
+ 	    {
+ 	      if (last_reorder_field_type < 4)
+ 		warn_on_field_placement (gnu_field, gnat_component_list,
+ 					 gnat_record_type, in_variant,
+ 					 do_reorder);
+ 	      else
+ 		last_reorder_field_type = 4;
+ 	    }
+ 
+ 	  if (do_reorder)
+ 	    {
+ 	      MOVE_FROM_FIELD_LIST_TO (gnu_self_list);
+ 	      continue;
+ 	    }
+ 	}
+ 
+       else if (field_has_variable_size (gnu_field))
+ 	{
+ 	  if (w_reorder)
+ 	    {
+ 	      if (last_reorder_field_type < 3)
+ 		warn_on_field_placement (gnu_field, gnat_component_list,
+ 					 gnat_record_type, in_variant,
+ 					 do_reorder);
+ 	      else
+ 		last_reorder_field_type = 3;
+ 	    }
+ 
+ 	  if (do_reorder)
+ 	    {
+ 	      MOVE_FROM_FIELD_LIST_TO (gnu_var_list);
+ 	      continue;
+ 	    }
+ 	}
+ 
+       else
+ 	{
+ 	  /* If the field has no size, then it cannot be bit-packed.  */
+ 	  const unsigned int bitp_size
+ 	    = DECL_SIZE (gnu_field)
+ 	      ? TREE_INT_CST_LOW (DECL_SIZE (gnu_field)) % BITS_PER_UNIT
+ 	      : 0;
+ 
+ 	  /* If the field is bit-packed, we move it to a temporary list that
+ 	     contains the contiguously preceding bit-packed fields, because
+ 	     we want to be able to put them back if the misalignment happens
+ 	     to cancel itself after several bit-packed fields.  */
+ 	  if (bitp_size != 0)
+ 	    {
+ 	      tmp_bitp_size = (tmp_bitp_size + bitp_size) % BITS_PER_UNIT;
+ 
+ 	      if (last_reorder_field_type != 2)
+ 		{
+ 		  tmp_last_reorder_field_type = last_reorder_field_type;
+ 		  last_reorder_field_type = 2;
+ 		}
+ 
+ 	      if (do_reorder)
+ 		{
+ 		  MOVE_FROM_FIELD_LIST_TO (gnu_tmp_bitp_list);
+ 		  continue;
+ 		}
+ 	    }
+ 
+ 	  /* No more bit-packed fields, move the existing ones to the end or
+ 	     put them back at their original location.  */
+ 	  else if (last_reorder_field_type == 2 || gnu_tmp_bitp_list)
+ 	    {
+ 	      last_reorder_field_type = 1;
+ 
+ 	      if (tmp_bitp_size != 0)
+ 		{
+ 		  if (w_reorder && tmp_last_reorder_field_type < 2)
+ 		    {
+ 		      if (gnu_tmp_bitp_list)
+ 			warn_on_list_placement (gnu_tmp_bitp_list,
+ 						gnat_component_list,
+ 						gnat_record_type, in_variant,
+ 						do_reorder);
+ 		      else
+ 			warn_on_field_placement (gnu_last,
+ 						 gnat_component_list,
+ 						 gnat_record_type, in_variant,
+ 						 do_reorder);
+ 		    }
+ 
+ 		  if (do_reorder)
+ 		    gnu_bitp_list = chainon (gnu_tmp_bitp_list, gnu_bitp_list);
+ 
+ 		  gnu_tmp_bitp_list = NULL_TREE;
+ 		  tmp_bitp_size = 0;
+ 		}
+ 	      else
+ 		{
+ 		  /* Rechain the temporary list in front of GNU_FIELD.  */
+ 		  tree gnu_bitp_field = gnu_field;
+ 		  while (gnu_tmp_bitp_list)
+ 		    {
+ 		      tree gnu_bitp_next = DECL_CHAIN (gnu_tmp_bitp_list);
+ 		      DECL_CHAIN (gnu_tmp_bitp_list) = gnu_bitp_field;
+ 		      if (gnu_last)
+ 			DECL_CHAIN (gnu_last) = gnu_tmp_bitp_list;
+ 		      else
+ 			gnu_field_list = gnu_tmp_bitp_list;
+ 		      gnu_bitp_field = gnu_tmp_bitp_list;
+ 		      gnu_tmp_bitp_list = gnu_bitp_next;
+ 		    }
+ 		}
+ 	    }
+ 
+ 	  else
+ 	    last_reorder_field_type = 1;
+ 	}
+ 
+       gnu_last = gnu_field;
+     }
+ 
+ #undef MOVE_FROM_FIELD_LIST_TO
+ 
+   gnu_field_list = nreverse (gnu_field_list);
+ 
+   /* If permitted, we reorder the fields as follows:
+ 
+       1) all (groups of) fields whose length is fixed and multiple of a byte,
+       2) the remaining fields whose length is fixed and not multiple of a byte,
+       3) the remaining fields whose length doesn't depend on discriminants,
+       4) all fields whose length depends on discriminants,
+       5) the variant part,
+ 
+      within the record and within each variant recursively.  */
+ 
+   if (w_reorder)
+     {
+       /* If we have pending bit-packed fields, warn if they would be moved
+ 	 to after regular fields.  */
+       if (last_reorder_field_type == 2
+ 	  && tmp_bitp_size != 0
+ 	  && tmp_last_reorder_field_type < 2)
+ 	{
+ 	  if (gnu_tmp_bitp_list)
+ 	    warn_on_list_placement (gnu_tmp_bitp_list,
+ 				    gnat_component_list, gnat_record_type,
+ 				    in_variant, do_reorder);
+ 	  else
+ 	    warn_on_field_placement (gnu_field_list,
+ 				     gnat_component_list, gnat_record_type,
+ 				     in_variant, do_reorder);
+ 	}
+     }
+ 
+   if (do_reorder)
+     {
+       /* If we have pending bit-packed fields on the temporary list, we put
+ 	 them either on the bit-packed list or back on the regular list.  */
+       if (gnu_tmp_bitp_list)
+ 	{
+ 	  if (tmp_bitp_size != 0)
+ 	    gnu_bitp_list = chainon (gnu_tmp_bitp_list, gnu_bitp_list);
+ 	  else
+ 	    gnu_field_list = chainon (gnu_tmp_bitp_list, gnu_field_list);
+ 	}
+ 
+       gnu_field_list
+ 	= chainon (gnu_field_list,
+ 		   chainon (gnu_bitp_list,
+ 			    chainon (gnu_var_list, gnu_self_list)));
+     }
+ 
+   /* Otherwise, if there is an aliased field placed after a field whose length
+      depends on discriminants, we put all the fields of the latter sort, last.
+      We need to do this in case an object of this record type is mutable.  */
+   else if (has_aliased_after_self_field)
+     gnu_field_list = chainon (gnu_field_list, gnu_self_list);
+ 
+   /* If P_REP_LIST is nonzero, this means that we are asked to move the fields
+      in our REP list to the previous level because this level needs them in
+      order to do a correct layout, i.e. avoid having overlapping fields.  */
+   if (p_gnu_rep_list && gnu_rep_list)
+     *p_gnu_rep_list = chainon (*p_gnu_rep_list, gnu_rep_list);
+ 
+   /* Deal with the case of an extension of a record type with variable size and
+      partial rep clause, for which the _Parent field is forced at offset 0 and
+      has variable size.  Note that we cannot do it if the field has fixed size
+      because we rely on the presence of the REP part built below to trigger the
+      reordering of the fields in a derived record type when all the fields have
+      a fixed position.  */
+   else if (gnu_rep_list
+ 	   && !DECL_CHAIN (gnu_rep_list)
+ 	   && TREE_CODE (DECL_SIZE (gnu_rep_list)) != INTEGER_CST
+ 	   && !variants_have_rep
+ 	   && first_free_pos
+ 	   && integer_zerop (first_free_pos)
+ 	   && integer_zerop (bit_position (gnu_rep_list)))
+     {
+       DECL_CHAIN (gnu_rep_list) = gnu_field_list;
+       gnu_field_list = gnu_rep_list;
+       gnu_rep_list = NULL_TREE;
+     }
+ 
+   /* Otherwise, sort the fields by bit position and put them into their own
+      record, before the others, if we also have fields without rep clause.  */
+   else if (gnu_rep_list)
+     {
+       tree gnu_parent, gnu_rep_type;
+ 
+       /* If all the fields have a rep clause, we can do a flat layout.  */
+       layout_with_rep = !gnu_field_list
+ 			&& (!gnu_variant_part || variants_have_rep);
+ 
+       /* Same as above but the extension itself has a rep clause, in which case
+ 	 we need to set aside the _Parent field to lay out the REP part.  */
+       if (TREE_CODE (DECL_SIZE (gnu_rep_list)) != INTEGER_CST
+ 	  && !layout_with_rep
+ 	  && !variants_have_rep
+ 	  && first_free_pos
+ 	  && integer_zerop (first_free_pos)
+ 	  && integer_zerop (bit_position (gnu_rep_list)))
+ 	{
+ 	  gnu_parent = gnu_rep_list;
+ 	  gnu_rep_list = DECL_CHAIN (gnu_rep_list);
+ 	}
+       else
+ 	gnu_parent = NULL_TREE;
+ 
+       gnu_rep_type
+ 	= layout_with_rep ? gnu_record_type : make_node (RECORD_TYPE);
+ 
+       /* Sort the fields in order of increasing bit position.  */
+       const int len = list_length (gnu_rep_list);
+       tree *gnu_arr = XALLOCAVEC (tree, len);
+ 
+       gnu_field = gnu_rep_list;
+       for (int i = 0; i < len; i++)
+ 	{
+ 	  gnu_arr[i] = gnu_field;
+ 	  gnu_field = DECL_CHAIN (gnu_field);
+ 	}
+ 
+       qsort (gnu_arr, len, sizeof (tree), compare_field_bitpos);
+ 
+       gnu_rep_list = NULL_TREE;
+       for (int i = len - 1; i >= 0; i--)
+ 	{
+ 	  DECL_CHAIN (gnu_arr[i]) = gnu_rep_list;
+ 	  gnu_rep_list = gnu_arr[i];
+ 	  DECL_CONTEXT (gnu_arr[i]) = gnu_rep_type;
+ 	}
+ 
+       /* Do the layout of the REP part, if any.  */
+       if (layout_with_rep)
+ 	gnu_field_list = gnu_rep_list;
+       else
+ 	{
+ 	  TYPE_NAME (gnu_rep_type)
+ 	    = create_concat_name (gnat_record_type, "REP");
+ 	  TYPE_REVERSE_STORAGE_ORDER (gnu_rep_type)
+ 	    = TYPE_REVERSE_STORAGE_ORDER (gnu_record_type);
+ 	  finish_record_type (gnu_rep_type, gnu_rep_list, 1, false);
+ 
+ 	  /* If FIRST_FREE_POS is nonzero, we need to ensure that the fields
+ 	     without rep clause are laid out starting from this position.
+ 	     Therefore, we force it as a minimal size on the REP part.  */
+ 	  tree gnu_rep_part
+ 	    = create_rep_part (gnu_rep_type, gnu_record_type, first_free_pos);
+ 
+ 	  /* If this is an extension, put back the _Parent field as the first
+ 	     field of the REP part at offset 0 and update its layout.  */
+ 	  if (gnu_parent)
+ 	    {
+ 	      const unsigned int align = DECL_ALIGN (gnu_parent);
+ 	      DECL_CHAIN (gnu_parent) = TYPE_FIELDS (gnu_rep_type);
+ 	      TYPE_FIELDS (gnu_rep_type) = gnu_parent;
+ 	      DECL_CONTEXT (gnu_parent) = gnu_rep_type;
+ 	      if (align > TYPE_ALIGN (gnu_rep_type))
+ 		{
+ 		  SET_TYPE_ALIGN (gnu_rep_type, align);
+ 		  TYPE_SIZE (gnu_rep_type)
+ 		    = round_up (TYPE_SIZE (gnu_rep_type), align);
+ 		  TYPE_SIZE_UNIT (gnu_rep_type)
+ 		    = round_up (TYPE_SIZE_UNIT (gnu_rep_type), align);
+ 		  SET_DECL_ALIGN (gnu_rep_part, align);
+ 		}
+ 	    }
+ 
+ 	  if (debug_info)
+ 	    rest_of_record_type_compilation (gnu_rep_type);
+ 
+ 	  /* Chain the REP part at the beginning of the field list.  */
+ 	  DECL_CHAIN (gnu_rep_part) = gnu_field_list;
+ 	  gnu_field_list = gnu_rep_part;
+ 	}
+     }
+ 
+   /* Chain the variant part at the end of the field list.  */
+   if (gnu_variant_part)
+     gnu_field_list = chainon (gnu_field_list, gnu_variant_part);
+ 
+   if (cancel_alignment)
+     SET_TYPE_ALIGN (gnu_record_type, 0);
+ 
+   TYPE_ARTIFICIAL (gnu_record_type) = artificial;
+ 
+   finish_record_type (gnu_record_type, gnu_field_list, layout_with_rep ? 1 : 0,
+ 		      debug_info && !in_variant);
+ 
+   /* Chain the fields with zero size at the beginning of the field list.  */
+   if (gnu_zero_list)
+     TYPE_FIELDS (gnu_record_type)
+       = chainon (gnu_zero_list, TYPE_FIELDS (gnu_record_type));
+ 
+   return (gnu_rep_list && !p_gnu_rep_list) || variants_have_rep;
+ }
+ 
+ /* Given GNU_SIZE, a GCC tree representing a size, return a Uint to be
+    placed into an Esize, Component_Bit_Offset, or Component_Size value
+    in the GNAT tree.  */
+ 
+ static Uint
+ annotate_value (tree gnu_size)
+ {
+   static int var_count = 0;
+   TCode tcode;
+   Node_Ref_Or_Val ops[3] = { No_Uint, No_Uint, No_Uint };
+   struct tree_int_map in;
+ 
+   /* See if we've already saved the value for this node.  */
+   if (EXPR_P (gnu_size) || DECL_P (gnu_size))
+     {
+       struct tree_int_map *e;
+ 
+       in.base.from = gnu_size;
+       e = annotate_value_cache->find (&in);
+ 
+       if (e)
+ 	return (Node_Ref_Or_Val) e->to;
+     }
+   else
+     in.base.from = NULL_TREE;
+ 
+   /* If we do not return inside this switch, TCODE will be set to the
+      code to be used in a call to Create_Node.  */
+   switch (TREE_CODE (gnu_size))
+     {
+     case INTEGER_CST:
+       /* For negative values, build NEGATE_EXPR of the opposite.  Such values
+ 	 can appear for discriminants in expressions for variants.  */
+       if (tree_int_cst_sgn (gnu_size) < 0)
+ 	{
+ 	  tree t = wide_int_to_tree (sizetype, -wi::to_wide (gnu_size));
+ 	  tcode = Negate_Expr;
+ 	  ops[0] = UI_From_gnu (t);
+ 	}
+       else
+ 	return TREE_OVERFLOW (gnu_size) ? No_Uint : UI_From_gnu (gnu_size);
+       break;
+ 
+     case COMPONENT_REF:
+       /* The only case we handle here is a simple discriminant reference.  */
+       if (DECL_DISCRIMINANT_NUMBER (TREE_OPERAND (gnu_size, 1)))
+ 	{
+ 	  tree ref = gnu_size;
+ 	  gnu_size = TREE_OPERAND (ref, 1);
+ 
+ 	  /* Climb up the chain of successive extensions, if any.  */
+ 	  while (TREE_CODE (TREE_OPERAND (ref, 0)) == COMPONENT_REF
+ 		 && DECL_NAME (TREE_OPERAND (TREE_OPERAND (ref, 0), 1))
+ 		    == parent_name_id)
+ 	    ref = TREE_OPERAND (ref, 0);
+ 
+ 	  if (TREE_CODE (TREE_OPERAND (ref, 0)) == PLACEHOLDER_EXPR)
+ 	    {
+ 	      /* Fall through to common processing as a FIELD_DECL.  */
+ 	      tcode = Discrim_Val;
+ 	      ops[0] = UI_From_gnu (DECL_DISCRIMINANT_NUMBER (gnu_size));
+ 	    }
+ 	  else
+ 	    return No_Uint;
+ 	}
+       else
+ 	return No_Uint;
+       break;
+ 
+     case VAR_DECL:
+       tcode = Dynamic_Val;
+       ops[0] = UI_From_Int (++var_count);
+       break;
+ 
+     CASE_CONVERT:
+     case NON_LVALUE_EXPR:
+       return annotate_value (TREE_OPERAND (gnu_size, 0));
+ 
+       /* Now just list the operations we handle.  */
+     case COND_EXPR:		tcode = Cond_Expr; break;
+     case MINUS_EXPR:		tcode = Minus_Expr; break;
+     case TRUNC_DIV_EXPR:	tcode = Trunc_Div_Expr; break;
+     case CEIL_DIV_EXPR:		tcode = Ceil_Div_Expr; break;
+     case FLOOR_DIV_EXPR:	tcode = Floor_Div_Expr; break;
+     case TRUNC_MOD_EXPR:	tcode = Trunc_Mod_Expr; break;
+     case CEIL_MOD_EXPR:		tcode = Ceil_Mod_Expr; break;
+     case FLOOR_MOD_EXPR:	tcode = Floor_Mod_Expr; break;
+     case EXACT_DIV_EXPR:	tcode = Exact_Div_Expr; break;
+     case NEGATE_EXPR:		tcode = Negate_Expr; break;
+     case MIN_EXPR:		tcode = Min_Expr; break;
+     case MAX_EXPR:		tcode = Max_Expr; break;
+     case ABS_EXPR:		tcode = Abs_Expr; break;
+     case TRUTH_ANDIF_EXPR:
+     case TRUTH_AND_EXPR:	tcode = Truth_And_Expr; break;
+     case TRUTH_ORIF_EXPR:
+     case TRUTH_OR_EXPR:		tcode = Truth_Or_Expr; break;
+     case TRUTH_XOR_EXPR:	tcode = Truth_Xor_Expr; break;
+     case TRUTH_NOT_EXPR:	tcode = Truth_Not_Expr; break;
+     case LT_EXPR:		tcode = Lt_Expr; break;
+     case LE_EXPR:		tcode = Le_Expr; break;
+     case GT_EXPR:		tcode = Gt_Expr; break;
+     case GE_EXPR:		tcode = Ge_Expr; break;
+     case EQ_EXPR:		tcode = Eq_Expr; break;
+     case NE_EXPR:		tcode = Ne_Expr; break;
+ 
+     case PLUS_EXPR:
+       /* Turn addition of negative constant into subtraction.  */
+       if (TREE_CODE (TREE_OPERAND (gnu_size, 1)) == INTEGER_CST
+ 	  && tree_int_cst_sign_bit (TREE_OPERAND (gnu_size, 1)))
+ 	{
+ 	  tcode = Minus_Expr;
+ 	  wide_int wop1 = -wi::to_wide (TREE_OPERAND (gnu_size, 1));
+ 	  ops[1] = annotate_value (wide_int_to_tree (sizetype, wop1));
+ 	  break;
+ 	}
+ 
+       /* ... fall through ... */
+ 
+     case MULT_EXPR:
+       tcode = (TREE_CODE (gnu_size) == MULT_EXPR ? Mult_Expr : Plus_Expr);
+       /* Fold conversions from bytes to bits into inner operations.  */
+       if (TREE_CODE (TREE_OPERAND (gnu_size, 1)) == INTEGER_CST
+ 	  && CONVERT_EXPR_P (TREE_OPERAND (gnu_size, 0)))
+ 	{
+ 	  tree inner_op = TREE_OPERAND (TREE_OPERAND (gnu_size, 0), 0);
+ 	  if (TREE_CODE (inner_op) == TREE_CODE (gnu_size)
+ 	      && TREE_CODE (TREE_OPERAND (inner_op, 1)) == INTEGER_CST)
+ 	    {
+ 	      ops[0] = annotate_value (TREE_OPERAND (inner_op, 0));
+ 	      tree inner_op_op1 = TREE_OPERAND (inner_op, 1);
+ 	      tree gnu_size_op1 = TREE_OPERAND (gnu_size, 1);
+ 	      widest_int op1;
+ 	      if (TREE_CODE (gnu_size) == MULT_EXPR)
+ 		op1 = (wi::to_widest (inner_op_op1)
+ 		       * wi::to_widest (gnu_size_op1));
+ 	      else
+ 		{
+ 		  op1 = (wi::to_widest (inner_op_op1)
+ 			 + wi::to_widest (gnu_size_op1));
+ 		  if (wi::zext (op1, TYPE_PRECISION (sizetype)) == 0)
+ 		    return ops[0];
+ 		}
+ 	      ops[1] = annotate_value (wide_int_to_tree (sizetype, op1));
+ 	    }
+ 	}
+       break;
+ 
+     case BIT_AND_EXPR:
+       tcode = Bit_And_Expr;
+       /* For negative values in sizetype, build NEGATE_EXPR of the opposite.
+ 	 Such values can appear in expressions with aligning patterns.  */
+       if (TREE_CODE (TREE_OPERAND (gnu_size, 1)) == INTEGER_CST)
+ 	{
+ 	  wide_int wop1 = -wi::to_wide (TREE_OPERAND (gnu_size, 1));
+ 	  tree op1 = wide_int_to_tree (sizetype, wop1);
+ 	  ops[1] = annotate_value (build1 (NEGATE_EXPR, sizetype, op1));
+ 	}
+       break;
+ 
+     case CALL_EXPR:
+       /* In regular mode, inline back only if symbolic annotation is requested
+ 	 in order to avoid memory explosion on big discriminated record types.
+ 	 But not in ASIS mode, as symbolic annotation is required for DDA.  */
+       if (List_Representation_Info >= 3 || type_annotate_only)
+ 	{
+ 	  tree t = maybe_inline_call_in_expr (gnu_size);
+ 	  return t ? annotate_value (t) : No_Uint;
+ 	}
+       else
+ 	return Uint_Minus_1;
+ 
+     default:
+       return No_Uint;
+     }
+ 
+   /* Now get each of the operands that's relevant for this code.  If any
+      cannot be expressed as a repinfo node, say we can't.  */
+   for (int i = 0; i < TREE_CODE_LENGTH (TREE_CODE (gnu_size)); i++)
+     if (ops[i] == No_Uint)
+       {
+ 	ops[i] = annotate_value (TREE_OPERAND (gnu_size, i));
+ 	if (ops[i] == No_Uint)
+ 	  return No_Uint;
+       }
+ 
+   Node_Ref_Or_Val ret = Create_Node (tcode, ops[0], ops[1], ops[2]);
+ 
+   /* Save the result in the cache.  */
+   if (in.base.from)
+     {
+       struct tree_int_map **h;
+       /* We can't assume the hash table data hasn't moved since the initial
+ 	 look up, so we have to search again.  Allocating and inserting an
+ 	 entry at that point would be an alternative, but then we'd better
+ 	 discard the entry if we decided not to cache it.  */
+       h = annotate_value_cache->find_slot (&in, INSERT);
+       gcc_assert (!*h);
+       *h = ggc_alloc<tree_int_map> ();
+       (*h)->base.from = in.base.from;
+       (*h)->to = ret;
+     }
+ 
+   return ret;
+ }
+ 
+ /* Given GNAT_ENTITY, an object (constant, variable, parameter, exception)
+    and GNU_TYPE, its corresponding GCC type, set Esize and Alignment to the
+    size and alignment used by Gigi.  Prefer SIZE over TYPE_SIZE if non-null.
+    BY_REF is true if the object is used by reference.  */
+ 
+ void
+ annotate_object (Entity_Id gnat_entity, tree gnu_type, tree size, bool by_ref)
+ {
+   if (by_ref)
+     {
+       if (TYPE_IS_FAT_POINTER_P (gnu_type))
+ 	gnu_type = TYPE_UNCONSTRAINED_ARRAY (gnu_type);
+       else
+ 	gnu_type = TREE_TYPE (gnu_type);
+     }
+ 
+   if (!Known_Esize (gnat_entity))
+     {
+       if (TREE_CODE (gnu_type) == RECORD_TYPE
+ 	  && TYPE_CONTAINS_TEMPLATE_P (gnu_type))
+ 	size = TYPE_SIZE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (gnu_type))));
+       else if (!size)
+ 	size = TYPE_SIZE (gnu_type);
+ 
+       if (size)
+ 	Set_Esize (gnat_entity, No_Uint_To_0 (annotate_value (size)));
+     }
+ 
+   if (!Known_Alignment (gnat_entity))
+     Set_Alignment (gnat_entity,
+ 		   UI_From_Int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT));
+ }
+ 
+ /* Return first element of field list whose TREE_PURPOSE is the same as ELEM.
+    Return NULL_TREE if there is no such element in the list.  */
+ 
+ static tree
+ purpose_member_field (const_tree elem, tree list)
+ {
+   while (list)
+     {
+       tree field = TREE_PURPOSE (list);
+       if (SAME_FIELD_P (field, elem))
+ 	return list;
+       list = TREE_CHAIN (list);
+     }
+   return NULL_TREE;
+ }
+ 
+ /* Given GNAT_ENTITY, a record type, and GNU_TYPE, its corresponding GCC type,
+    set Component_Bit_Offset and Esize of the components to the position and
+    size used by Gigi.  */
+ 
+ static void
+ annotate_rep (Entity_Id gnat_entity, tree gnu_type)
+ {
+   /* For an extension, the inherited components have not been translated because
+      they are fetched from the _Parent component on the fly.  */
+   const bool is_extension
+     = Is_Tagged_Type (gnat_entity) && Is_Derived_Type (gnat_entity);
+ 
+   /* We operate by first making a list of all fields and their position (we
+      can get the size easily) and then update all the sizes in the tree.  */
+   tree gnu_list
+     = build_position_list (gnu_type, false, size_zero_node, bitsize_zero_node,
+ 			   BIGGEST_ALIGNMENT, NULL_TREE);
+ 
+   for (Entity_Id gnat_field = First_Entity (gnat_entity);
+        Present (gnat_field);
+        gnat_field = Next_Entity (gnat_field))
+     if ((Ekind (gnat_field) == E_Component
+ 	 && (is_extension || present_gnu_tree (gnat_field)))
+ 	|| (Ekind (gnat_field) == E_Discriminant
+ 	    && !Is_Unchecked_Union (Scope (gnat_field))))
+       {
+ 	tree t = purpose_member_field (gnat_to_gnu_field_decl (gnat_field),
+ 				       gnu_list);
+ 	if (t)
+ 	  {
+ 	    tree offset = TREE_VEC_ELT (TREE_VALUE (t), 0);
+ 	    tree bit_offset = TREE_VEC_ELT (TREE_VALUE (t), 2);
+ 
+ 	    /* If we are just annotating types and the type is tagged, the tag
+ 	       and the parent components are not generated by the front-end so
+ 	       we need to add the appropriate offset to each component without
+ 	       representation clause.  */
+ 	    if (type_annotate_only
+ 		&& Is_Tagged_Type (gnat_entity)
+ 		&& No (Component_Clause (gnat_field)))
+ 	      {
+ 		tree parent_bit_offset;
+ 
+ 		/* For a component appearing in the current extension, the
+ 		   offset is the size of the parent.  */
+ 		if (Is_Derived_Type (gnat_entity)
+ 		    && Original_Record_Component (gnat_field) == gnat_field)
+ 		  parent_bit_offset
+ 		    = UI_To_gnu (Esize (Etype (Base_Type (gnat_entity))),
+ 				 bitsizetype);
+ 		else
+ 		  parent_bit_offset = bitsize_int (POINTER_SIZE);
+ 
+ 		if (TYPE_FIELDS (gnu_type))
+ 		  parent_bit_offset
+ 		    = round_up (parent_bit_offset,
+ 				DECL_ALIGN (TYPE_FIELDS (gnu_type)));
+ 
+ 		offset
+ 		  = size_binop (PLUS_EXPR, offset,
+ 				fold_convert (sizetype,
+ 					      size_binop (TRUNC_DIV_EXPR,
+ 							  parent_bit_offset,
+ 							  bitsize_unit_node)));
+ 	      }
+ 
+ 	    /* If the field has a variable offset, also compute the normalized
+ 	       position since it's easier to do on trees here than to deduce
+ 	       it from the annotated expression of Component_Bit_Offset.  */
+ 	    if (TREE_CODE (offset) != INTEGER_CST)
+ 	      {
+ 		normalize_offset (&offset, &bit_offset, BITS_PER_UNIT);
+ 		Set_Normalized_Position (gnat_field,
+ 					 annotate_value (offset));
+ 		Set_Normalized_First_Bit (gnat_field,
+ 					  annotate_value (bit_offset));
+ 	      }
+ 
+ 	    Set_Component_Bit_Offset
+ 	      (gnat_field,
+ 	       annotate_value (bit_from_pos (offset, bit_offset)));
+ 
+ 	    Set_Esize
+ 	      (gnat_field,
+ 	       No_Uint_To_0 (annotate_value (DECL_SIZE (TREE_PURPOSE (t)))));
+ 	  }
+ 	else if (is_extension)
+ 	  {
+ 	    /* If there is no entry, this is an inherited component whose
+ 	       position is the same as in the parent type.  */
+ 	    Entity_Id gnat_orig = Original_Record_Component (gnat_field);
+ 
+ 	    /* If we are just annotating types, discriminants renaming those of
+ 	       the parent have no entry so deal with them specifically.  */
+ 	    if (type_annotate_only
+ 		&& gnat_orig == gnat_field
+ 		&& Ekind (gnat_field) == E_Discriminant)
+ 	      gnat_orig = Corresponding_Discriminant (gnat_field);
+ 
+ 	    if (Known_Normalized_Position (gnat_orig))
+ 	      {
+ 		Set_Normalized_Position (gnat_field,
+ 					 Normalized_Position (gnat_orig));
+ 		Set_Normalized_First_Bit (gnat_field,
+ 					  Normalized_First_Bit (gnat_orig));
+ 	      }
+ 
+ 	    Set_Component_Bit_Offset (gnat_field,
+ 				      Component_Bit_Offset (gnat_orig));
+ 
+ 	    Set_Esize (gnat_field, Esize (gnat_orig));
+ 	  }
+       }
+ }
+ 
+ /* Scan all fields in GNU_TYPE and return a TREE_LIST where TREE_PURPOSE is
+    the FIELD_DECL and TREE_VALUE a TREE_VEC containing the byte position, the
+    value to be placed into DECL_OFFSET_ALIGN and the bit position.  The list
+    of fields is flattened, except for variant parts if DO_NOT_FLATTEN_VARIANT
+    is set to true.  GNU_POS is to be added to the position, GNU_BITPOS to the
+    bit position, OFFSET_ALIGN is the present offset alignment.  GNU_LIST is a
+    pre-existing list to be chained to the newly created entries.  */
+ 
+ static tree
+ build_position_list (tree gnu_type, bool do_not_flatten_variant, tree gnu_pos,
+ 		     tree gnu_bitpos, unsigned int offset_align, tree gnu_list)
+ {
+   tree gnu_field;
+ 
+   for (gnu_field = TYPE_FIELDS (gnu_type);
+        gnu_field;
+        gnu_field = DECL_CHAIN (gnu_field))
+     {
+       tree gnu_our_bitpos = size_binop (PLUS_EXPR, gnu_bitpos,
+ 					DECL_FIELD_BIT_OFFSET (gnu_field));
+       tree gnu_our_offset = size_binop (PLUS_EXPR, gnu_pos,
+ 					DECL_FIELD_OFFSET (gnu_field));
+       unsigned int our_offset_align
+ 	= MIN (offset_align, DECL_OFFSET_ALIGN (gnu_field));
+       tree v = make_tree_vec (3);
+ 
+       TREE_VEC_ELT (v, 0) = gnu_our_offset;
+       TREE_VEC_ELT (v, 1) = size_int (our_offset_align);
+       TREE_VEC_ELT (v, 2) = gnu_our_bitpos;
+       gnu_list = tree_cons (gnu_field, v, gnu_list);
+ 
+       /* Recurse on internal fields, flattening the nested fields except for
+ 	 those in the variant part, if requested.  */
+       if (DECL_INTERNAL_P (gnu_field))
+ 	{
+ 	  tree gnu_field_type = TREE_TYPE (gnu_field);
+ 	  if (do_not_flatten_variant
+ 	      && TREE_CODE (gnu_field_type) == QUAL_UNION_TYPE)
+ 	    gnu_list
+ 	      = build_position_list (gnu_field_type, do_not_flatten_variant,
+ 				     size_zero_node, bitsize_zero_node,
+ 				     BIGGEST_ALIGNMENT, gnu_list);
+ 	  else
+ 	    gnu_list
+ 	      = build_position_list (gnu_field_type, do_not_flatten_variant,
+ 				     gnu_our_offset, gnu_our_bitpos,
+ 				     our_offset_align, gnu_list);
+ 	}
+     }
+ 
+   return gnu_list;
+ }
+ 
+ /* Return a list describing the substitutions needed to reflect the
+    discriminant substitutions from GNAT_TYPE to GNAT_SUBTYPE.  They can
+    be in any order.  The values in an element of the list are in the form
+    of operands to SUBSTITUTE_IN_EXPR.  DEFINITION is true if this is for
+    a definition of GNAT_SUBTYPE.  */
+ 
+ static vec<subst_pair>
+ build_subst_list (Entity_Id gnat_subtype, Entity_Id gnat_type, bool definition)
+ {
+   vec<subst_pair> gnu_list = vNULL;
+   Entity_Id gnat_discrim;
+   Node_Id gnat_constr;
+ 
+   for (gnat_discrim = First_Stored_Discriminant (gnat_type),
+        gnat_constr = First_Elmt (Stored_Constraint (gnat_subtype));
+        Present (gnat_discrim);
+        gnat_discrim = Next_Stored_Discriminant (gnat_discrim),
+        gnat_constr = Next_Elmt (gnat_constr))
+     /* Ignore access discriminants.  */
+     if (!Is_Access_Type (Etype (Node (gnat_constr))))
+       {
+ 	tree gnu_field = gnat_to_gnu_field_decl (gnat_discrim);
+ 	tree replacement
+ 	  = elaborate_expression (Node (gnat_constr), gnat_subtype,
+ 				  get_entity_char (gnat_discrim),
+ 				  definition, true, false);
+ 	/* If this is a definition, we need to make sure that the SAVE_EXPRs
+ 	   are instantiated on every possibly path in size computations.  */
+ 	if (definition && TREE_CODE (replacement) == SAVE_EXPR)
+ 	  add_stmt (replacement);
+ 	replacement = convert (TREE_TYPE (gnu_field), replacement);
+ 	subst_pair s = { gnu_field, replacement };
+ 	gnu_list.safe_push (s);
+       }
+ 
+   return gnu_list;
+ }
+ 
+ /* Scan all fields in {GNU_QUAL_UNION_TYPE,GNAT_VARIANT_PART} and return a list
+    describing the variants of GNU_QUAL_UNION_TYPE that are still relevant after
+    applying the substitutions described in SUBST_LIST.  GNU_LIST is an existing
+    list to be prepended to the newly created entries.  */
+ 
+ static vec<variant_desc>
+ build_variant_list (tree gnu_qual_union_type, Node_Id gnat_variant_part,
+ 		    vec<subst_pair> subst_list, vec<variant_desc> gnu_list)
+ {
+   Node_Id gnat_variant;
+   tree gnu_field;
+ 
+   for (gnu_field = TYPE_FIELDS (gnu_qual_union_type),
+        gnat_variant
+ 	= Present (gnat_variant_part)
+ 	  ? First_Non_Pragma (Variants (gnat_variant_part))
+ 	  : Empty;
+        gnu_field;
+        gnu_field = DECL_CHAIN (gnu_field),
+        gnat_variant
+ 	= Present (gnat_variant_part)
+ 	  ? Next_Non_Pragma (gnat_variant)
+ 	  : Empty)
+     {
+       tree qual = DECL_QUALIFIER (gnu_field);
+       unsigned int i;
+       subst_pair *s;
+ 
+       FOR_EACH_VEC_ELT (subst_list, i, s)
+ 	qual = SUBSTITUTE_IN_EXPR (qual, s->discriminant, s->replacement);
+ 
+       /* If the new qualifier is not unconditionally false, its variant may
+ 	 still be accessed.  */
+       if (!integer_zerop (qual))
+ 	{
+ 	  tree variant_type = TREE_TYPE (gnu_field), variant_subpart;
+ 	  variant_desc v
+ 	    = { variant_type, gnu_field, qual, NULL_TREE, NULL_TREE };
+ 
+ 	  gnu_list.safe_push (v);
+ 
+ 	  /* Annotate the GNAT node if present.  */
+ 	  if (Present (gnat_variant))
+ 	    Set_Present_Expr (gnat_variant, annotate_value (qual));
+ 
+ 	  /* Recurse on the variant subpart of the variant, if any.  */
+ 	  variant_subpart = get_variant_part (variant_type);
+ 	  if (variant_subpart)
+ 	    gnu_list
+ 	      = build_variant_list (TREE_TYPE (variant_subpart),
+ 				    Present (gnat_variant)
+ 				    ? Variant_Part
+ 				      (Component_List (gnat_variant))
+ 				    : Empty,
+ 				    subst_list,
+ 				    gnu_list);
+ 
+ 	  /* If the new qualifier is unconditionally true, the subsequent
+ 	     variants cannot be accessed.  */
+ 	  if (integer_onep (qual))
+ 	    break;
+ 	}
+     }
+ 
+   return gnu_list;
+ }
+ 
+ /* If SIZE has overflowed, return the maximum valid size, which is the upper
+    bound of the signed sizetype in bits, rounded down to ALIGN.  Otherwise
+    return SIZE unmodified.  */
+ 
+ static tree
+ maybe_saturate_size (tree size, unsigned int align)
+ {
+   if (TREE_CODE (size) == INTEGER_CST && TREE_OVERFLOW (size))
+     {
+       size
+ 	= size_binop (MULT_EXPR,
+ 		      fold_convert (bitsizetype, TYPE_MAX_VALUE (ssizetype)),
+ 		      build_int_cst (bitsizetype, BITS_PER_UNIT));
+       size = round_down (size, align);
+     }
+ 
+   return size;
+ }
+ 
+ /* UINT_SIZE is a Uint giving the specified size for an object of GNU_TYPE
+    corresponding to GNAT_OBJECT.  If the size is valid, return an INTEGER_CST
+    corresponding to its value.  Otherwise, return NULL_TREE.  KIND is set to
+    VAR_DECL if we are specifying the size of an object, TYPE_DECL for the
+    size of a type, and FIELD_DECL for the size of a field.  COMPONENT_P is
+    true if we are being called to process the Component_Size of GNAT_OBJECT;
+    this is used only for error messages.  ZERO_OK is true if a size of zero
+    is permitted; if ZERO_OK is false, it means that a size of zero should be
+    treated as an unspecified size.  S1 and S2 are used for error messages.  */
+ 
+ static tree
+ validate_size (Uint uint_size, tree gnu_type, Entity_Id gnat_object,
+ 	       enum tree_code kind, bool component_p, bool zero_ok,
+ 	       const char *s1, const char *s2)
+ {
+   Node_Id gnat_error_node;
+   tree old_size, size;
+ 
+   /* Return 0 if no size was specified.  */
+   if (uint_size == No_Uint)
+     return NULL_TREE;
+ 
+   /* Ignore a negative size since that corresponds to our back-annotation.  */
+   if (UI_Lt (uint_size, Uint_0))
+     return NULL_TREE;
+ 
+   /* Find the node to use for error messages.  */
+   if ((Ekind (gnat_object) == E_Component
+        || Ekind (gnat_object) == E_Discriminant)
+       && Present (Component_Clause (gnat_object)))
+     gnat_error_node = Last_Bit (Component_Clause (gnat_object));
+   else if (Present (Size_Clause (gnat_object)))
+     gnat_error_node = Expression (Size_Clause (gnat_object));
+   else if (Has_Object_Size_Clause (gnat_object))
+     gnat_error_node = Expression (Object_Size_Clause (gnat_object));
+   else
+     gnat_error_node = gnat_object;
+ 
+   /* Get the size as an INTEGER_CST.  Issue an error if a size was specified
+      but cannot be represented in bitsizetype.  */
+   size = UI_To_gnu (uint_size, bitsizetype);
+   if (TREE_OVERFLOW (size))
+     {
+       if (component_p)
+ 	post_error_ne ("component size for& is too large", gnat_error_node,
+ 		       gnat_object);
+       else
+ 	post_error_ne ("size for& is too large", gnat_error_node,
+ 		       gnat_object);
+       return NULL_TREE;
+     }
+ 
+   /* Ignore a zero size if it is not permitted.  */
+   if (!zero_ok && integer_zerop (size))
+     return NULL_TREE;
+ 
+   /* The size of objects is always a multiple of a byte.  */
+   if (kind == VAR_DECL
+       && !integer_zerop (size_binop (TRUNC_MOD_EXPR, size, bitsize_unit_node)))
+     {
+       if (component_p)
+ 	post_error_ne ("component size for& must be multiple of Storage_Unit",
+ 		       gnat_error_node, gnat_object);
+       else
+ 	post_error_ne ("size for& must be multiple of Storage_Unit",
+ 		       gnat_error_node, gnat_object);
+       return NULL_TREE;
+     }
+ 
+   /* If this is an integral type or a bit-packed array type, the front-end has
+      already verified the size, so we need not do it again (which would mean
+      checking against the bounds).  However, if this is an aliased object, it
+      may not be smaller than the type of the object.  */
+   if ((INTEGRAL_TYPE_P (gnu_type) || BIT_PACKED_ARRAY_TYPE_P (gnu_type))
+       && !(kind == VAR_DECL && Is_Aliased (gnat_object)))
+     return size;
+ 
+   /* If the object is a record that contains a template, add the size of the
+      template to the specified size.  */
+   if (TREE_CODE (gnu_type) == RECORD_TYPE
+       && TYPE_CONTAINS_TEMPLATE_P (gnu_type))
+     size = size_binop (PLUS_EXPR, DECL_SIZE (TYPE_FIELDS (gnu_type)), size);
+ 
+   old_size = (kind == VAR_DECL ? TYPE_SIZE (gnu_type) : rm_size (gnu_type));
+ 
+   /* If the old size is self-referential, get the maximum size.  */
+   if (CONTAINS_PLACEHOLDER_P (old_size))
+     old_size = max_size (old_size, true);
+ 
+   /* If this is an access type or a fat pointer, the minimum size is that given
+      by the smallest integral mode that's valid for pointers.  */
+   if (TREE_CODE (gnu_type) == POINTER_TYPE || TYPE_IS_FAT_POINTER_P (gnu_type))
+     {
+       scalar_int_mode p_mode = NARROWEST_INT_MODE;
+       while (!targetm.valid_pointer_mode (p_mode))
+ 	p_mode = GET_MODE_WIDER_MODE (p_mode).require ();
+       old_size = bitsize_int (GET_MODE_BITSIZE (p_mode));
+     }
+ 
+   /* Issue an error either if the default size of the object isn't a constant
+      or if the new size is smaller than it.  */
+   if (TREE_CODE (old_size) != INTEGER_CST
+       || (!TREE_OVERFLOW (old_size) && tree_int_cst_lt (size, old_size)))
+     {
+       char buf[128];
+       const char *s;
+ 
+       if (s1 && s2)
+ 	{
+ 	  snprintf (buf, sizeof (buf), s1, s2);
+ 	  s = buf;
+ 	}
+       else if (component_p)
+ 	s = "component size for& too small{, minimum allowed is ^}";
+       else
+ 	s = "size for& too small{, minimum allowed is ^}";
+ 
+       post_error_ne_tree (s, gnat_error_node, gnat_object, old_size);
+ 
+       return NULL_TREE;
+     }
+ 
+   return size;
+ }
+ 
+ /* Similarly, but both validate and process a value of RM size.  This routine
+    is only called for types.  */
+ 
+ static void
+ set_rm_size (Uint uint_size, tree gnu_type, Entity_Id gnat_entity)
+ {
+   Node_Id gnat_attr_node;
+   tree old_size, size;
+ 
+   /* Do nothing if no size was specified.  */
+   if (uint_size == No_Uint)
+     return;
+ 
+   /* Only issue an error if a Value_Size clause was explicitly given for the
+      entity; otherwise, we'd be duplicating an error on the Size clause.  */
+   gnat_attr_node
+     = Get_Attribute_Definition_Clause (gnat_entity, Attr_Value_Size);
+   if (Present (gnat_attr_node) && Entity (gnat_attr_node) != gnat_entity)
+     gnat_attr_node = Empty;
+ 
+   /* Get the size as an INTEGER_CST.  Issue an error if a size was specified
+      but cannot be represented in bitsizetype.  */
+   size = UI_To_gnu (uint_size, bitsizetype);
+   if (TREE_OVERFLOW (size))
+     {
+       if (Present (gnat_attr_node))
+ 	post_error_ne ("Value_Size for& is too large", gnat_attr_node,
+ 		       gnat_entity);
+       return;
+     }
+ 
+   /* Ignore a zero size unless a Value_Size clause exists, or a size clause
+      exists, or this is an integer type, in which case the front-end will
+      have always set it.  */
+   if (No (gnat_attr_node)
+       && integer_zerop (size)
+       && !Has_Size_Clause (gnat_entity)
+       && !Is_Discrete_Or_Fixed_Point_Type (gnat_entity))
+     return;
+ 
+   old_size = rm_size (gnu_type);
+ 
+   /* If the old size is self-referential, get the maximum size.  */
+   if (CONTAINS_PLACEHOLDER_P (old_size))
+     old_size = max_size (old_size, true);
+ 
+   /* Issue an error either if the old size of the object isn't a constant or
+      if the new size is smaller than it.  The front-end has already verified
+      this for scalar and bit-packed array types.  */
+   if (TREE_CODE (old_size) != INTEGER_CST
+       || TREE_OVERFLOW (old_size)
+       || (AGGREGATE_TYPE_P (gnu_type)
+ 	  && !BIT_PACKED_ARRAY_TYPE_P (gnu_type)
+ 	  && !(TYPE_IS_PADDING_P (gnu_type)
+ 	       && BIT_PACKED_ARRAY_TYPE_P (TREE_TYPE (TYPE_FIELDS (gnu_type))))
+ 	  && tree_int_cst_lt (size, old_size)))
+     {
+       if (Present (gnat_attr_node))
+ 	post_error_ne_tree
+ 	  ("Value_Size for& too small{, minimum allowed is ^}",
+ 	   gnat_attr_node, gnat_entity, old_size);
+       return;
+     }
+ 
+   /* Otherwise, set the RM size proper for integral types...  */
+   if ((TREE_CODE (gnu_type) == INTEGER_TYPE
+        && Is_Discrete_Or_Fixed_Point_Type (gnat_entity))
+       || (TREE_CODE (gnu_type) == ENUMERAL_TYPE
+ 	  || TREE_CODE (gnu_type) == BOOLEAN_TYPE))
+     SET_TYPE_RM_SIZE (gnu_type, size);
+ 
+   /* ...or the Ada size for record and union types.  */
+   else if (RECORD_OR_UNION_TYPE_P (gnu_type)
+ 	   && !TYPE_FAT_POINTER_P (gnu_type))
+     SET_TYPE_ADA_SIZE (gnu_type, size);
+ }
+ 
+ /* ALIGNMENT is a Uint giving the alignment specified for GNAT_ENTITY,
+    a type or object whose present alignment is ALIGN.  If this alignment is
+    valid, return it.  Otherwise, give an error and return ALIGN.  */
+ 
+ static unsigned int
+ validate_alignment (Uint alignment, Entity_Id gnat_entity, unsigned int align)
+ {
+   unsigned int max_allowed_alignment = get_target_maximum_allowed_alignment ();
+   unsigned int new_align;
+   Node_Id gnat_error_node;
+ 
+   /* Don't worry about checking alignment if alignment was not specified
+      by the source program and we already posted an error for this entity.  */
+   if (Error_Posted (gnat_entity) && !Has_Alignment_Clause (gnat_entity))
+     return align;
+ 
+   /* Post the error on the alignment clause if any.  Note, for the implicit
+      base type of an array type, the alignment clause is on the first
+      subtype.  */
+   if (Present (Alignment_Clause (gnat_entity)))
+     gnat_error_node = Expression (Alignment_Clause (gnat_entity));
+ 
+   else if (Is_Itype (gnat_entity)
+            && Is_Array_Type (gnat_entity)
+            && Etype (gnat_entity) == gnat_entity
+            && Present (Alignment_Clause (First_Subtype (gnat_entity))))
+     gnat_error_node =
+       Expression (Alignment_Clause (First_Subtype (gnat_entity)));
+ 
+   else
+     gnat_error_node = gnat_entity;
+ 
+   /* Within GCC, an alignment is an integer, so we must make sure a value is
+      specified that fits in that range.  Also, there is an upper bound to
+      alignments we can support/allow.  */
+   if (!UI_Is_In_Int_Range (alignment)
+       || ((new_align = UI_To_Int (alignment)) > max_allowed_alignment))
+     post_error_ne_num ("largest supported alignment for& is ^",
+ 		       gnat_error_node, gnat_entity, max_allowed_alignment);
+   else if (!(Present (Alignment_Clause (gnat_entity))
+ 	     && From_At_Mod (Alignment_Clause (gnat_entity)))
+ 	   && new_align * BITS_PER_UNIT < align)
+     {
+       unsigned int double_align;
+       bool is_capped_double, align_clause;
+ 
+       /* If the default alignment of "double" or larger scalar types is
+ 	 specifically capped and the new alignment is above the cap, do
+ 	 not post an error and change the alignment only if there is an
+ 	 alignment clause; this makes it possible to have the associated
+ 	 GCC type overaligned by default for performance reasons.  */
+       if ((double_align = double_float_alignment) > 0)
+ 	{
+ 	  Entity_Id gnat_type
+ 	    = Is_Type (gnat_entity) ? gnat_entity : Etype (gnat_entity);
+ 	  is_capped_double
+ 	    = is_double_float_or_array (gnat_type, &align_clause);
+ 	}
+       else if ((double_align = double_scalar_alignment) > 0)
+ 	{
+ 	  Entity_Id gnat_type
+ 	    = Is_Type (gnat_entity) ? gnat_entity : Etype (gnat_entity);
+ 	  is_capped_double
+ 	    = is_double_scalar_or_array (gnat_type, &align_clause);
+ 	}
+       else
+ 	is_capped_double = align_clause = false;
+ 
+       if (is_capped_double && new_align >= double_align)
+ 	{
+ 	  if (align_clause)
+ 	    align = new_align * BITS_PER_UNIT;
+ 	}
+       else
+ 	{
+ 	  if (is_capped_double)
+ 	    align = double_align * BITS_PER_UNIT;
+ 
+ 	  post_error_ne_num ("alignment for& must be at least ^",
+ 			     gnat_error_node, gnat_entity,
+ 			     align / BITS_PER_UNIT);
+ 	}
+     }
+   else
+     {
+       new_align = (new_align > 0 ? new_align * BITS_PER_UNIT : 1);
+       if (new_align > align)
+ 	align = new_align;
+     }
+ 
+   return align;
+ }
+ 
+ /* Promote the alignment of GNU_TYPE for an object with GNU_SIZE corresponding
+    to GNAT_ENTITY.  Return a positive value on success or zero on failure.  */
+ 
+ static unsigned int
+ promote_object_alignment (tree gnu_type, tree gnu_size, Entity_Id gnat_entity)
+ {
+   unsigned int align, size_cap, align_cap;
+ 
+   /* No point in promoting the alignment if this doesn't prevent BLKmode access
+      to the object, in particular block copy, as this will for example disable
+      the NRV optimization for it.  No point in jumping through all the hoops
+      needed in order to support BIGGEST_ALIGNMENT if we don't really have to.
+      So we cap to the smallest alignment that corresponds to a known efficient
+      memory access pattern, except for a full access entity.  */
+   if (Is_Full_Access (gnat_entity))
+     {
+       size_cap = UINT_MAX;
+       align_cap = BIGGEST_ALIGNMENT;
+     }
+   else
+     {
+       size_cap = MAX_FIXED_MODE_SIZE;
+       align_cap = get_mode_alignment (ptr_mode);
+     }
+ 
+   if (!gnu_size)
+     gnu_size = TYPE_SIZE (gnu_type);
+ 
+   /* Do the promotion within the above limits.  */
+   if (!tree_fits_uhwi_p (gnu_size)
+       || compare_tree_int (gnu_size, size_cap) > 0)
+     align = 0;
+   else if (compare_tree_int (gnu_size, align_cap) > 0)
+     align = align_cap;
+   else
+     align = ceil_pow2 (tree_to_uhwi (gnu_size));
+ 
+   /* But make sure not to under-align the object.  */
+   if (align <= TYPE_ALIGN (gnu_type))
+     align = 0;
+ 
+    /* And honor the minimum valid atomic alignment, if any.  */
+ #ifdef MINIMUM_ATOMIC_ALIGNMENT
+   else if (align < MINIMUM_ATOMIC_ALIGNMENT)
+     align = MINIMUM_ATOMIC_ALIGNMENT;
+ #endif
+ 
+   return align;
+ }
+ 
+ /* Verify that TYPE is something we can implement atomically.  If not, issue
+    an error for GNAT_ENTITY.  COMPONENT_P is true if we are being called to
+    process a component type.  */
+ 
+ static void
+ check_ok_for_atomic_type (tree type, Entity_Id gnat_entity, bool component_p)
+ {
+   Node_Id gnat_error_point = gnat_entity;
+   Node_Id gnat_node;
+   machine_mode mode;
+   enum mode_class mclass;
+   unsigned int align;
+   tree size;
+ 
+   /* If this is an anonymous base type, nothing to check, the error will be
+      reported on the source type if need be.  */
+   if (!Comes_From_Source (gnat_entity))
+     return;
+ 
+   mode = TYPE_MODE (type);
+   mclass = GET_MODE_CLASS (mode);
+   align = TYPE_ALIGN (type);
+   size = TYPE_SIZE (type);
+ 
+   /* Consider all aligned floating-point types atomic and any aligned types
+      that are represented by integers no wider than a machine word.  */
+   scalar_int_mode int_mode;
+   if ((mclass == MODE_FLOAT
+        || (is_a <scalar_int_mode> (mode, &int_mode)
+ 	   && GET_MODE_BITSIZE (int_mode) <= BITS_PER_WORD))
+       && align >= GET_MODE_ALIGNMENT (mode))
+     return;
+ 
+   /* For the moment, also allow anything that has an alignment equal to its
+      size and which is smaller than a word.  */
+   if (size
+       && TREE_CODE (size) == INTEGER_CST
+       && compare_tree_int (size, align) == 0
+       && align <= BITS_PER_WORD)
+     return;
+ 
+   for (gnat_node = First_Rep_Item (gnat_entity);
+        Present (gnat_node);
+        gnat_node = Next_Rep_Item (gnat_node))
+     if (Nkind (gnat_node) == N_Pragma)
+       {
+ 	unsigned char pragma_id
+ 	  = Get_Pragma_Id (Chars (Pragma_Identifier (gnat_node)));
+ 
+ 	if ((pragma_id == Pragma_Atomic && !component_p)
+ 	    || (pragma_id == Pragma_Atomic_Components && component_p))
+ 	  {
+ 	    gnat_error_point = First (Pragma_Argument_Associations (gnat_node));
+ 	    break;
+ 	  }
+       }
+ 
+   if (component_p)
+     post_error_ne ("atomic access to component of & cannot be guaranteed",
+ 		   gnat_error_point, gnat_entity);
+   else if (Is_Volatile_Full_Access (gnat_entity))
+     post_error_ne ("volatile full access to & cannot be guaranteed",
+ 		   gnat_error_point, gnat_entity);
+   else
+     post_error_ne ("atomic access to & cannot be guaranteed",
+ 		   gnat_error_point, gnat_entity);
+ }
+ 
+ /* Return true if TYPE is suitable for a type-generic atomic builtin.  */
+ 
+ static bool
+ type_for_atomic_builtin_p (tree type)
+ {
+   const enum machine_mode mode = TYPE_MODE (type);
+   if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+     return true;
+ 
+   scalar_int_mode imode;
+   if (is_a <scalar_int_mode> (mode, &imode) && GET_MODE_SIZE (imode) <= 16)
+     return true;
+ 
+   return false;
+ }
+ 
+ /* Return the GCC atomic builtin based on CODE and sized for TYPE.  */
+ 
+ static tree
+ resolve_atomic_builtin (enum built_in_function code, tree type)
+ {
+   const unsigned int size = resolve_atomic_size (type);
+   code = (enum built_in_function) ((int) code + exact_log2 (size) + 1);
+ 
+   return builtin_decl_implicit (code);
+ }
+ 
+ /* Helper for intrin_profiles_compatible_p, to perform compatibility checks
+    on the Ada/builtin argument lists for the INB binding.  */
+ 
+ static bool
+ intrin_arglists_compatible_p (const intrin_binding_t *inb)
+ {
+   function_args_iterator ada_iter, btin_iter;
+ 
+   function_args_iter_init (&ada_iter, inb->ada_fntype);
+   function_args_iter_init (&btin_iter, inb->btin_fntype);
+ 
+   /* Sequence position of the last argument we checked.  */
+   int argpos = 0;
+ 
+   while (true)
+     {
+       tree ada_type = function_args_iter_cond (&ada_iter);
+       tree btin_type = function_args_iter_cond (&btin_iter);
+ 
+       /* If we've exhausted both lists simultaneously, we're done.  */
+       if (!ada_type && !btin_type)
+ 	break;
+ 
+       /* If the internal builtin uses a variable list, accept anything.  */
+       if (!btin_type)
+ 	break;
+ 
+       /* If we're done with the Ada args and not with the internal builtin
+ 	 args, or the other way around, complain.  */
+       if (ada_type == void_type_node && btin_type != void_type_node)
+ 	{
+ 	  post_error ("??Ada parameter list too short!", inb->gnat_entity);
+ 	  return false;
+ 	}
+ 
+       if (btin_type == void_type_node && ada_type != void_type_node)
+ 	{
+ 	  post_error_ne_num ("??Ada parameter list too long ('> ^)!",
+ 			     inb->gnat_entity, inb->gnat_entity, argpos);
+ 	  return false;
+ 	}
+ 
+       /* Otherwise, check that types match for the current argument.  */
+       argpos++;
+       if (!types_compatible_p (ada_type, btin_type))
+ 	{
+ 	  /* For vector builtins, issue an error to avoid an ICE.  */
+ 	  if (VECTOR_TYPE_P (btin_type))
+ 	    post_error_ne_num
+ 	      ("intrinsic binding type mismatch on parameter ^",
+ 	       inb->gnat_entity, inb->gnat_entity, argpos);
+ 	  else
+ 	    post_error_ne_num
+ 	      ("??intrinsic binding type mismatch on parameter ^!",
+ 	       inb->gnat_entity, inb->gnat_entity, argpos);
+ 	  return false;
+ 	}
+ 
+ 
+       function_args_iter_next (&ada_iter);
+       function_args_iter_next (&btin_iter);
+     }
+ 
+   return true;
+ }
+ 
+ /* Helper for intrin_profiles_compatible_p, to perform compatibility checks
+    on the Ada/builtin return values for the INB binding.  */
+ 
+ static bool
+ intrin_return_compatible_p (const intrin_binding_t *inb)
+ {
+   tree ada_return_type = TREE_TYPE (inb->ada_fntype);
+   tree btin_return_type = TREE_TYPE (inb->btin_fntype);
+ 
+   /* Accept function imported as procedure, common and convenient.  */
+   if (VOID_TYPE_P (ada_return_type) && !VOID_TYPE_P (btin_return_type))
+     return true;
+ 
+   /* Check return types compatibility otherwise.  Note that this
+      handles void/void as well.  */
+   if (!types_compatible_p (btin_return_type, ada_return_type))
+     {
+       /* For vector builtins, issue an error to avoid an ICE.  */
+       if (VECTOR_TYPE_P (btin_return_type))
+ 	post_error ("intrinsic binding type mismatch on result",
+ 		    inb->gnat_entity);
+       else
+ 	post_error ("??intrinsic binding type mismatch on result",
+ 		    inb->gnat_entity);
+       return false;
+     }
+ 
+   return true;
+ }
+ 
+ /* Check and return whether the Ada and gcc builtin profiles bound by INB are
+    compatible.  Issue relevant warnings when they are not.
+ 
+    This is intended as a light check to diagnose the most obvious cases, not
+    as a full fledged type compatibility predicate.  It is the programmer's
+    responsibility to ensure correctness of the Ada declarations in Imports,
+    especially when binding straight to a compiler internal.  */
+ 
+ static bool
+ intrin_profiles_compatible_p (const intrin_binding_t *inb)
+ {
+   /* Check compatibility on return values and argument lists, each responsible
+      for posting warnings as appropriate.  Ensure use of the proper sloc for
+      this purpose.  */
+ 
+   bool arglists_compatible_p, return_compatible_p;
+   location_t saved_location = input_location;
+ 
+   Sloc_to_locus (Sloc (inb->gnat_entity), &input_location);
+ 
+   return_compatible_p = intrin_return_compatible_p (inb);
+   arglists_compatible_p = intrin_arglists_compatible_p (inb);
+ 
+   input_location = saved_location;
+ 
+   return return_compatible_p && arglists_compatible_p;
+ }
+ 
+ /* Return a FIELD_DECL node modeled on OLD_FIELD.  FIELD_TYPE is its type
+    and RECORD_TYPE is the type of the parent.  If SIZE is nonzero, it is the
+    specified size for this field.  POS_LIST is a position list describing
+    the layout of OLD_FIELD and SUBST_LIST a substitution list to be applied
+    to this layout.  */
+ 
+ static tree
+ create_field_decl_from (tree old_field, tree field_type, tree record_type,
+ 			tree size, tree pos_list,
+ 			vec<subst_pair> subst_list)
+ {
+   tree t = TREE_VALUE (purpose_member (old_field, pos_list));
+   tree pos = TREE_VEC_ELT (t, 0), bitpos = TREE_VEC_ELT (t, 2);
+   unsigned int offset_align = tree_to_uhwi (TREE_VEC_ELT (t, 1));
+   tree new_pos, new_field;
+   unsigned int i;
+   subst_pair *s;
+ 
+   if (CONTAINS_PLACEHOLDER_P (pos))
+     FOR_EACH_VEC_ELT (subst_list, i, s)
+       pos = SUBSTITUTE_IN_EXPR (pos, s->discriminant, s->replacement);
+ 
+   /* If the position is now a constant, we can set it as the position of the
+      field when we make it.  Otherwise, we need to deal with it specially.  */
+   if (TREE_CONSTANT (pos))
+     new_pos = bit_from_pos (pos, bitpos);
+   else
+     new_pos = NULL_TREE;
+ 
+   new_field
+     = create_field_decl (DECL_NAME (old_field), field_type, record_type,
+ 			 size, new_pos, DECL_PACKED (old_field),
+ 			 !DECL_NONADDRESSABLE_P (old_field));
+ 
+   if (!new_pos)
+     {
+       normalize_offset (&pos, &bitpos, offset_align);
+       /* Finalize the position.  */
+       DECL_FIELD_OFFSET (new_field) = variable_size (pos);
+       DECL_FIELD_BIT_OFFSET (new_field) = bitpos;
+       SET_DECL_OFFSET_ALIGN (new_field, offset_align);
+       DECL_SIZE (new_field) = size;
+       DECL_SIZE_UNIT (new_field)
+ 	= convert (sizetype,
+ 		   size_binop (CEIL_DIV_EXPR, size, bitsize_unit_node));
+       layout_decl (new_field, DECL_OFFSET_ALIGN (new_field));
+     }
+ 
+   DECL_INTERNAL_P (new_field) = DECL_INTERNAL_P (old_field);
+   SET_DECL_ORIGINAL_FIELD_TO_FIELD (new_field, old_field);
+   DECL_DISCRIMINANT_NUMBER (new_field) = DECL_DISCRIMINANT_NUMBER (old_field);
+   TREE_THIS_VOLATILE (new_field) = TREE_THIS_VOLATILE (old_field);
+ 
+   return new_field;
+ }
+ 
+ /* Create the REP part of RECORD_TYPE with REP_TYPE.  If MIN_SIZE is nonzero,
+    it is the minimal size the REP_PART must have.  */
+ 
+ static tree
+ create_rep_part (tree rep_type, tree record_type, tree min_size)
+ {
+   tree field;
+ 
+   if (min_size && !tree_int_cst_lt (TYPE_SIZE (rep_type), min_size))
+     min_size = NULL_TREE;
+ 
+   field = create_field_decl (get_identifier ("REP"), rep_type, record_type,
+ 			     min_size, NULL_TREE, 0, 1);
+   DECL_INTERNAL_P (field) = 1;
+ 
+   return field;
+ }
+ 
+ /* Return the REP part of RECORD_TYPE, if any.  Otherwise return NULL.  */
+ 
+ static tree
+ get_rep_part (tree record_type)
+ {
+   tree field = TYPE_FIELDS (record_type);
+ 
+   /* The REP part is the first field, internal, another record, and its name
+      starts with an 'R'.  */
+   if (field
+       && DECL_INTERNAL_P (field)
+       && TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
+       && IDENTIFIER_POINTER (DECL_NAME (field)) [0] == 'R')
+     return field;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Return the variant part of RECORD_TYPE, if any.  Otherwise return NULL.  */
+ 
+ tree
+ get_variant_part (tree record_type)
+ {
+   tree field;
+ 
+   /* The variant part is the only internal field that is a qualified union.  */
+   for (field = TYPE_FIELDS (record_type); field; field = DECL_CHAIN (field))
+     if (DECL_INTERNAL_P (field)
+ 	&& TREE_CODE (TREE_TYPE (field)) == QUAL_UNION_TYPE)
+       return field;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Return a new variant part modeled on OLD_VARIANT_PART.  VARIANT_LIST is
+    the list of variants to be used and RECORD_TYPE is the type of the parent.
+    POS_LIST is a position list describing the layout of fields present in
+    OLD_VARIANT_PART and SUBST_LIST a substitution list to be applied to this
+    layout.  DEBUG_INFO_P is true if we need to write debug information.  */
+ 
+ static tree
+ create_variant_part_from (tree old_variant_part,
+ 			  vec<variant_desc> variant_list,
+ 			  tree record_type, tree pos_list,
+ 			  vec<subst_pair> subst_list,
+ 			  bool debug_info_p)
+ {
+   tree offset = DECL_FIELD_OFFSET (old_variant_part);
+   tree old_union_type = TREE_TYPE (old_variant_part);
+   tree new_union_type, new_variant_part;
+   tree union_field_list = NULL_TREE;
+   variant_desc *v;
+   unsigned int i;
+ 
+   /* First create the type of the variant part from that of the old one.  */
+   new_union_type = make_node (QUAL_UNION_TYPE);
+   TYPE_NAME (new_union_type)
+     = concat_name (TYPE_NAME (record_type),
+ 		   IDENTIFIER_POINTER (DECL_NAME (old_variant_part)));
+ 
+   /* If the position of the variant part is constant, subtract it from the
+      size of the type of the parent to get the new size.  This manual CSE
+      reduces the code size when not optimizing.  */
+   if (TREE_CODE (offset) == INTEGER_CST
+       && TYPE_SIZE (record_type)
+       && TYPE_SIZE_UNIT (record_type))
+     {
+       tree bitpos = DECL_FIELD_BIT_OFFSET (old_variant_part);
+       tree first_bit = bit_from_pos (offset, bitpos);
+       TYPE_SIZE (new_union_type)
+ 	= size_binop (MINUS_EXPR, TYPE_SIZE (record_type), first_bit);
+       TYPE_SIZE_UNIT (new_union_type)
+ 	= size_binop (MINUS_EXPR, TYPE_SIZE_UNIT (record_type),
+ 		      byte_from_pos (offset, bitpos));
+       SET_TYPE_ADA_SIZE (new_union_type,
+ 			 size_binop (MINUS_EXPR, TYPE_ADA_SIZE (record_type),
+  				     first_bit));
+       SET_TYPE_ALIGN (new_union_type, TYPE_ALIGN (old_union_type));
+       relate_alias_sets (new_union_type, old_union_type, ALIAS_SET_COPY);
+     }
+   else
+     copy_and_substitute_in_size (new_union_type, old_union_type, subst_list);
+ 
+   /* Now finish up the new variants and populate the union type.  */
+   FOR_EACH_VEC_ELT_REVERSE (variant_list, i, v)
+     {
+       tree old_field = v->field, new_field;
+       tree old_variant, old_variant_subpart, new_variant, field_list;
+ 
+       /* Skip variants that don't belong to this nesting level.  */
+       if (DECL_CONTEXT (old_field) != old_union_type)
+ 	continue;
+ 
+       /* Retrieve the list of fields already added to the new variant.  */
+       new_variant = v->new_type;
+       field_list = TYPE_FIELDS (new_variant);
+ 
+       /* If the old variant had a variant subpart, we need to create a new
+ 	 variant subpart and add it to the field list.  */
+       old_variant = v->type;
+       old_variant_subpart = get_variant_part (old_variant);
+       if (old_variant_subpart)
+ 	{
+ 	  tree new_variant_subpart
+ 	    = create_variant_part_from (old_variant_subpart, variant_list,
+ 					new_variant, pos_list, subst_list,
+ 					debug_info_p);
+ 	  DECL_CHAIN (new_variant_subpart) = field_list;
+ 	  field_list = new_variant_subpart;
+ 	}
+ 
+       /* Finish up the new variant and create the field.  */
+       finish_record_type (new_variant, nreverse (field_list), 2, debug_info_p);
+       create_type_decl (TYPE_NAME (new_variant), new_variant, true,
+ 			debug_info_p, Empty);
+ 
+       new_field
+ 	= create_field_decl_from (old_field, new_variant, new_union_type,
+ 				  TYPE_SIZE (new_variant),
+ 				  pos_list, subst_list);
+       DECL_QUALIFIER (new_field) = v->qual;
+       DECL_INTERNAL_P (new_field) = 1;
+       DECL_CHAIN (new_field) = union_field_list;
+       union_field_list = new_field;
+     }
+ 
+   /* Finish up the union type and create the variant part.  Note that we don't
+      reverse the field list because VARIANT_LIST has been traversed in reverse
+      order.  */
+   finish_record_type (new_union_type, union_field_list, 2, debug_info_p);
+   create_type_decl (TYPE_NAME (new_union_type), new_union_type, true,
+ 		    debug_info_p, Empty);
+ 
+   new_variant_part
+     = create_field_decl_from (old_variant_part, new_union_type, record_type,
+ 			      TYPE_SIZE (new_union_type),
+ 			      pos_list, subst_list);
+   DECL_INTERNAL_P (new_variant_part) = 1;
+ 
+   /* With multiple discriminants it is possible for an inner variant to be
+      statically selected while outer ones are not; in this case, the list
+      of fields of the inner variant is not flattened and we end up with a
+      qualified union with a single member.  Drop the useless container.  */
+   if (!DECL_CHAIN (union_field_list))
+     {
+       DECL_CONTEXT (union_field_list) = record_type;
+       DECL_FIELD_OFFSET (union_field_list)
+ 	= DECL_FIELD_OFFSET (new_variant_part);
+       DECL_FIELD_BIT_OFFSET (union_field_list)
+ 	= DECL_FIELD_BIT_OFFSET (new_variant_part);
+       SET_DECL_OFFSET_ALIGN (union_field_list,
+ 			     DECL_OFFSET_ALIGN (new_variant_part));
+       new_variant_part = union_field_list;
+     }
+ 
+   return new_variant_part;
+ }
+ 
+ /* Copy the size (and alignment and alias set) from OLD_TYPE to NEW_TYPE,
+    which are both RECORD_TYPE, after applying the substitutions described
+    in SUBST_LIST.  */
+ 
+ static void
+ copy_and_substitute_in_size (tree new_type, tree old_type,
+ 			     vec<subst_pair> subst_list)
+ {
+   unsigned int i;
+   subst_pair *s;
+ 
+   TYPE_SIZE (new_type) = TYPE_SIZE (old_type);
+   TYPE_SIZE_UNIT (new_type) = TYPE_SIZE_UNIT (old_type);
+   SET_TYPE_ADA_SIZE (new_type, TYPE_ADA_SIZE (old_type));
+   SET_TYPE_ALIGN (new_type, TYPE_ALIGN (old_type));
+   relate_alias_sets (new_type, old_type, ALIAS_SET_COPY);
+ 
+   if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (new_type)))
+     FOR_EACH_VEC_ELT (subst_list, i, s)
+       TYPE_SIZE (new_type)
+ 	= SUBSTITUTE_IN_EXPR (TYPE_SIZE (new_type),
+ 			      s->discriminant, s->replacement);
+ 
+   if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (new_type)))
+     FOR_EACH_VEC_ELT (subst_list, i, s)
+       TYPE_SIZE_UNIT (new_type)
+ 	= SUBSTITUTE_IN_EXPR (TYPE_SIZE_UNIT (new_type),
+ 			      s->discriminant, s->replacement);
+ 
+   if (CONTAINS_PLACEHOLDER_P (TYPE_ADA_SIZE (new_type)))
+     FOR_EACH_VEC_ELT (subst_list, i, s)
+       SET_TYPE_ADA_SIZE
+ 	(new_type, SUBSTITUTE_IN_EXPR (TYPE_ADA_SIZE (new_type),
+ 				       s->discriminant, s->replacement));
+ 
+   /* Finalize the size.  */
+   TYPE_SIZE (new_type) = variable_size (TYPE_SIZE (new_type));
+   TYPE_SIZE_UNIT (new_type) = variable_size (TYPE_SIZE_UNIT (new_type));
+ }
+ 
+ /* Return true if DISC is a stored discriminant of RECORD_TYPE.  */
+ 
+ static inline bool
+ is_stored_discriminant (Entity_Id discr, Entity_Id record_type)
+ {
+   if (Is_Unchecked_Union (record_type))
+     return false;
+   else if (Is_Tagged_Type (record_type))
+     return No (Corresponding_Discriminant (discr));
+   else if (Ekind (record_type) == E_Record_Type)
+     return Original_Record_Component (discr) == discr;
+   else
+     return true;
+ }
+ 
+ /* Copy the layout from {GNAT,GNU}_OLD_TYPE to {GNAT,GNU}_NEW_TYPE, which are
+    both record types, after applying the substitutions described in SUBST_LIST.
+    DEBUG_INFO_P is true if we need to write debug information for NEW_TYPE.  */
+ 
+ static void
+ copy_and_substitute_in_layout (Entity_Id gnat_new_type,
+ 			       Entity_Id gnat_old_type,
+ 			       tree gnu_new_type,
+ 			       tree gnu_old_type,
+ 			       vec<subst_pair> subst_list,
+ 			       bool debug_info_p)
+ {
+   const bool is_subtype = (Ekind (gnat_new_type) == E_Record_Subtype);
+   tree gnu_field_list = NULL_TREE;
+   tree gnu_variable_field_list = NULL_TREE;
+   bool selected_variant;
+   vec<variant_desc> gnu_variant_list;
+ 
+   /* Look for REP and variant parts in the old type.  */
+   tree gnu_rep_part = get_rep_part (gnu_old_type);
+   tree gnu_variant_part = get_variant_part (gnu_old_type);
+ 
+   /* If there is a variant part, we must compute whether the constraints
+      statically select a particular variant.  If so, we simply drop the
+      qualified union and flatten the list of fields.  Otherwise we will
+      build a new qualified union for the variants that are still relevant.  */
+   if (gnu_variant_part)
+     {
+       const Node_Id gnat_decl = Declaration_Node (gnat_new_type);
+       variant_desc *v;
+       unsigned int i;
+ 
+       gnu_variant_list
+ 	= build_variant_list (TREE_TYPE (gnu_variant_part),
+ 			      is_subtype
+ 			      ? Empty
+ 			      : Variant_Part
+ 				(Component_List (Type_Definition (gnat_decl))),
+ 			      subst_list,
+ 			      vNULL);
+ 
+       /* If all the qualifiers are unconditionally true, the innermost variant
+ 	 is statically selected.  */
+       selected_variant = true;
+       FOR_EACH_VEC_ELT (gnu_variant_list, i, v)
+ 	if (!integer_onep (v->qual))
+ 	  {
+ 	    selected_variant = false;
+ 	    break;
+ 	  }
+ 
+       /* Otherwise, create the new variants.  */
+       if (!selected_variant)
+ 	FOR_EACH_VEC_ELT (gnu_variant_list, i, v)
+ 	  {
+ 	    tree old_variant = v->type;
+ 	    tree new_variant = make_node (RECORD_TYPE);
+ 	    tree suffix
+ 	      = concat_name (DECL_NAME (gnu_variant_part),
+ 			     IDENTIFIER_POINTER (DECL_NAME (v->field)));
+ 	    TYPE_NAME (new_variant)
+ 	      = concat_name (TYPE_NAME (gnu_new_type),
+ 			     IDENTIFIER_POINTER (suffix));
+ 	    TYPE_REVERSE_STORAGE_ORDER (new_variant)
+ 	      = TYPE_REVERSE_STORAGE_ORDER (gnu_new_type);
+ 	    copy_and_substitute_in_size (new_variant, old_variant, subst_list);
+ 	    v->new_type = new_variant;
+ 	  }
+     }
+   else
+     {
+       gnu_variant_list.create (0);
+       selected_variant = false;
+     }
+ 
+   /* Make a list of fields and their position in the old type.  */
+   tree gnu_pos_list
+     = build_position_list (gnu_old_type,
+ 			   gnu_variant_list.exists () && !selected_variant,
+ 			   size_zero_node, bitsize_zero_node,
+ 			   BIGGEST_ALIGNMENT, NULL_TREE);
+ 
+   /* Now go down every component in the new type and compute its size and
+      position from those of the component in the old type and the stored
+      constraints of the new type.  */
+   Entity_Id gnat_field, gnat_old_field;
+   for (gnat_field = First_Entity (gnat_new_type);
+        Present (gnat_field);
+        gnat_field = Next_Entity (gnat_field))
+     if ((Ekind (gnat_field) == E_Component
+ 	 || (Ekind (gnat_field) == E_Discriminant
+ 	     && is_stored_discriminant (gnat_field, gnat_new_type)))
+         && (gnat_old_field = is_subtype
+ 			     ? Original_Record_Component (gnat_field)
+ 			     : Corresponding_Record_Component (gnat_field))
+ 	&& Underlying_Type (Scope (gnat_old_field)) == gnat_old_type
+ 	&& present_gnu_tree (gnat_old_field))
+       {
+ 	Name_Id gnat_name = Chars (gnat_field);
+ 	tree gnu_old_field = get_gnu_tree (gnat_old_field);
+ 	if (TREE_CODE (gnu_old_field) == COMPONENT_REF)
+ 	  gnu_old_field = TREE_OPERAND (gnu_old_field, 1);
+         tree gnu_context = DECL_CONTEXT (gnu_old_field);
+ 	tree gnu_field, gnu_field_type, gnu_size, gnu_pos;
+ 	tree gnu_cont_type, gnu_last = NULL_TREE;
+ 	variant_desc *v = NULL;
+ 
+ 	/* If the type is the same, retrieve the GCC type from the
+ 	   old field to take into account possible adjustments.  */
+ 	if (Etype (gnat_field) == Etype (gnat_old_field))
+ 	  gnu_field_type = TREE_TYPE (gnu_old_field);
+ 	else
+ 	  gnu_field_type = gnat_to_gnu_type (Etype (gnat_field));
+ 
+ 	/* If there was a component clause, the field types must be the same
+ 	   for the old and new types, so copy the data from the old field to
+ 	   avoid recomputation here.  Also if the field is justified modular
+ 	   and the optimization in gnat_to_gnu_field was applied.  */
+ 	if (Present (Component_Clause (gnat_old_field))
+ 	    || (TREE_CODE (gnu_field_type) == RECORD_TYPE
+ 		&& TYPE_JUSTIFIED_MODULAR_P (gnu_field_type)
+ 		&& TREE_TYPE (TYPE_FIELDS (gnu_field_type))
+ 		   == TREE_TYPE (gnu_old_field)))
+ 	  {
+ 	    gnu_size = DECL_SIZE (gnu_old_field);
+ 	    gnu_field_type = TREE_TYPE (gnu_old_field);
+ 	  }
+ 
+ 	/* If the old field was packed and of constant size, we have to get the
+ 	   old size here as it might differ from what the Etype conveys and the
+ 	   latter might overlap with the following field.  Try to arrange the
+ 	   type for possible better packing along the way.  */
+ 	else if (DECL_PACKED (gnu_old_field)
+ 		 && TREE_CODE (DECL_SIZE (gnu_old_field)) == INTEGER_CST)
+ 	  {
+ 	    gnu_size = DECL_SIZE (gnu_old_field);
+ 	    if (RECORD_OR_UNION_TYPE_P (gnu_field_type)
+ 		&& !TYPE_FAT_POINTER_P (gnu_field_type)
+ 		&& tree_fits_uhwi_p (TYPE_SIZE (gnu_field_type)))
+ 	      gnu_field_type = make_packable_type (gnu_field_type, true, 0);
+ 	  }
+ 
+ 	else
+ 	  gnu_size = TYPE_SIZE (gnu_field_type);
+ 
+ 	/* If the context of the old field is the old type or its REP part,
+ 	   put the field directly in the new type; otherwise look up the
+ 	   context in the variant list and put the field either in the new
+ 	   type if there is a selected variant or in one new variant.  */
+ 	if (gnu_context == gnu_old_type
+ 	    || (gnu_rep_part && gnu_context == TREE_TYPE (gnu_rep_part)))
+ 	  gnu_cont_type = gnu_new_type;
+ 	else
+ 	  {
+ 	    unsigned int i;
+ 	    tree rep_part;
+ 
+ 	    FOR_EACH_VEC_ELT (gnu_variant_list, i, v)
+ 	      if (gnu_context == v->type
+ 		  || ((rep_part = get_rep_part (v->type))
+ 		      && gnu_context == TREE_TYPE (rep_part)))
+ 		break;
+ 
+ 	    if (v)
+ 	      gnu_cont_type = selected_variant ? gnu_new_type : v->new_type;
+ 	    else
+ 	      /* The front-end may pass us zombie components if it fails to
+ 		 recognize that a constrain statically selects a particular
+ 		 variant.  Discard them.  */
+ 	      continue;
+ 	  }
+ 
+ 	/* Now create the new field modeled on the old one.  */
+ 	gnu_field
+ 	  = create_field_decl_from (gnu_old_field, gnu_field_type,
+ 				    gnu_cont_type, gnu_size,
+ 				    gnu_pos_list, subst_list);
+ 	gnu_pos = DECL_FIELD_OFFSET (gnu_field);
+ 
+ 	/* If the context is a variant, put it in the new variant directly.  */
+ 	if (gnu_cont_type != gnu_new_type)
+ 	  {
+ 	    if (TREE_CODE (gnu_pos) == INTEGER_CST)
+ 	      {
+ 		DECL_CHAIN (gnu_field) = TYPE_FIELDS (gnu_cont_type);
+ 		TYPE_FIELDS (gnu_cont_type) = gnu_field;
+ 	      }
+ 	    else
+ 	      {
+ 		DECL_CHAIN (gnu_field) = v->aux;
+ 		v->aux = gnu_field;
+ 	      }
+ 	  }
+ 
+ 	/* To match the layout crafted in components_to_record, if this is
+ 	   the _Tag or _Parent field, put it before any other fields.  */
+ 	else if (gnat_name == Name_uTag || gnat_name == Name_uParent)
+ 	  gnu_field_list = chainon (gnu_field_list, gnu_field);
+ 
+ 	/* Similarly, if this is the _Controller field, put it before the
+ 	   other fields except for the _Tag or _Parent field.  */
+ 	else if (gnat_name == Name_uController && gnu_last)
+ 	  {
+ 	    DECL_CHAIN (gnu_field) = DECL_CHAIN (gnu_last);
+ 	    DECL_CHAIN (gnu_last) = gnu_field;
+ 	  }
+ 
+ 	/* Otherwise, put it after the other fields.  */
+ 	else
+ 	  {
+ 	    if (TREE_CODE (gnu_pos) == INTEGER_CST)
+ 	      {
+ 		DECL_CHAIN (gnu_field) = gnu_field_list;
+ 		gnu_field_list = gnu_field;
+ 		if (!gnu_last)
+ 		  gnu_last = gnu_field;
+ 	      }
+ 	    else
+ 	      {
+ 		DECL_CHAIN (gnu_field) = gnu_variable_field_list;
+ 		gnu_variable_field_list = gnu_field;
+ 	      }
+ 	  }
+ 
+ 	/* For a stored discriminant in a derived type, replace the field.  */
+ 	if (!is_subtype && Ekind (gnat_field) == E_Discriminant)
+ 	  {
+ 	    tree gnu_ref = get_gnu_tree (gnat_field);
+ 	    TREE_OPERAND (gnu_ref, 1) = gnu_field;
+ 	  }
+ 	else
+ 	  save_gnu_tree (gnat_field, gnu_field, false);
+       }
+ 
+   /* Put the fields with fixed position in order of increasing position.  */
+   if (gnu_field_list)
+     gnu_field_list = reverse_sort_field_list (gnu_field_list);
+ 
+   /* Put the fields with variable position at the end.  */
+   if (gnu_variable_field_list)
+     gnu_field_list = chainon (gnu_variable_field_list, gnu_field_list);
+ 
+   /* If there is a variant list and no selected variant, we need to create the
+      nest of variant parts from the old nest.  */
+   if (gnu_variant_list.exists () && !selected_variant)
+     {
+       variant_desc *v;
+       unsigned int i;
+ 
+       /* Same processing as above for the fields of each variant.  */
+       FOR_EACH_VEC_ELT (gnu_variant_list, i, v)
+ 	{
+ 	  if (TYPE_FIELDS (v->new_type))
+ 	    TYPE_FIELDS (v->new_type)
+ 	      = reverse_sort_field_list (TYPE_FIELDS (v->new_type));
+ 	  if (v->aux)
+ 	    TYPE_FIELDS (v->new_type)
+ 	      = chainon (v->aux, TYPE_FIELDS (v->new_type));
+ 	}
+ 
+       tree new_variant_part
+ 	= create_variant_part_from (gnu_variant_part, gnu_variant_list,
+ 				    gnu_new_type, gnu_pos_list,
+ 				    subst_list, debug_info_p);
+       DECL_CHAIN (new_variant_part) = gnu_field_list;
+       gnu_field_list = new_variant_part;
+     }
+ 
+   gnu_variant_list.release ();
+   subst_list.release ();
+ 
+   /* If NEW_TYPE is a subtype, it inherits all the attributes from OLD_TYPE.
+      Otherwise sizes and alignment must be computed independently.  */
+   finish_record_type (gnu_new_type, nreverse (gnu_field_list),
+ 		      is_subtype ? 2 : 1, debug_info_p);
+ 
+   /* Now go through the entities again looking for itypes that we have not yet
+      elaborated (e.g. Etypes of fields that have Original_Components).  */
+   for (Entity_Id gnat_field = First_Entity (gnat_new_type);
+        Present (gnat_field);
+        gnat_field = Next_Entity (gnat_field))
+     if ((Ekind (gnat_field) == E_Component
+ 	 || Ekind (gnat_field) == E_Discriminant)
+ 	&& Is_Itype (Etype (gnat_field))
+ 	&& !present_gnu_tree (Etype (gnat_field)))
+       gnat_to_gnu_entity (Etype (gnat_field), NULL_TREE, false);
+ }
+ 
+ /* Associate to the implementation type of a packed array type specified by
+    GNU_TYPE, which is the translation of GNAT_ENTITY, the original array type
+    if it has been translated.  This association is a parallel type for GNAT
+    encodings or a debug type for standard DWARF.  Note that for standard DWARF,
+    we also want to get the original type name and therefore we return it.  */
+ 
+ static tree
+ associate_original_type_to_packed_array (tree gnu_type, Entity_Id gnat_entity)
+ {
+   const Entity_Id gnat_original_array_type
+     = Underlying_Type (Original_Array_Type (gnat_entity));
+   tree gnu_original_array_type;
+ 
+   if (!present_gnu_tree (gnat_original_array_type))
+     return NULL_TREE;
+ 
+   gnu_original_array_type = gnat_to_gnu_type (gnat_original_array_type);
+ 
+   if (TYPE_IS_DUMMY_P (gnu_original_array_type))
+     return NULL_TREE;
+ 
+   gcc_assert (TYPE_IMPL_PACKED_ARRAY_P (gnu_type));
+ 
+   if (gnat_encodings == DWARF_GNAT_ENCODINGS_ALL)
+     {
+       add_parallel_type (gnu_type, gnu_original_array_type);
+       return NULL_TREE;
+     }
+   else
+     {
+       SET_TYPE_ORIGINAL_PACKED_ARRAY (gnu_type, gnu_original_array_type);
+ 
+       tree original_name = TYPE_NAME (gnu_original_array_type);
+       if (TREE_CODE (original_name) == TYPE_DECL)
+ 	original_name = DECL_NAME (original_name);
+       return original_name;
+     }
+ }
+ 
+ /* Given a type T, a FIELD_DECL F, and a replacement value R, return an
+    equivalent type with adjusted size expressions where all occurrences
+    of references to F in a PLACEHOLDER_EXPR have been replaced by R.
+ 
+    The function doesn't update the layout of the type, i.e. it assumes
+    that the substitution is purely formal.  That's why the replacement
+    value R must itself contain a PLACEHOLDER_EXPR.  */
+ 
+ tree
+ substitute_in_type (tree t, tree f, tree r)
+ {
+   tree nt;
+ 
+   gcc_assert (CONTAINS_PLACEHOLDER_P (r));
+ 
+   switch (TREE_CODE (t))
+     {
+     case INTEGER_TYPE:
+     case ENUMERAL_TYPE:
+     case BOOLEAN_TYPE:
+     case REAL_TYPE:
+ 
+       /* First the domain types of arrays.  */
+       if (CONTAINS_PLACEHOLDER_P (TYPE_GCC_MIN_VALUE (t))
+ 	  || CONTAINS_PLACEHOLDER_P (TYPE_GCC_MAX_VALUE (t)))
+ 	{
+ 	  tree low = SUBSTITUTE_IN_EXPR (TYPE_GCC_MIN_VALUE (t), f, r);
+ 	  tree high = SUBSTITUTE_IN_EXPR (TYPE_GCC_MAX_VALUE (t), f, r);
+ 
+ 	  if (low == TYPE_GCC_MIN_VALUE (t) && high == TYPE_GCC_MAX_VALUE (t))
+ 	    return t;
+ 
+ 	  nt = copy_type (t);
+ 	  TYPE_GCC_MIN_VALUE (nt) = low;
+ 	  TYPE_GCC_MAX_VALUE (nt) = high;
+ 
+ 	  if (TREE_CODE (t) == INTEGER_TYPE && TYPE_INDEX_TYPE (t))
+ 	    SET_TYPE_INDEX_TYPE
+ 	      (nt, substitute_in_type (TYPE_INDEX_TYPE (t), f, r));
+ 
+ 	  return nt;
+ 	}
+ 
+       /* Then the subtypes.  */
+       if (CONTAINS_PLACEHOLDER_P (TYPE_RM_MIN_VALUE (t))
+ 	  || CONTAINS_PLACEHOLDER_P (TYPE_RM_MAX_VALUE (t)))
+ 	{
+ 	  tree low = SUBSTITUTE_IN_EXPR (TYPE_RM_MIN_VALUE (t), f, r);
+ 	  tree high = SUBSTITUTE_IN_EXPR (TYPE_RM_MAX_VALUE (t), f, r);
+ 
+ 	  if (low == TYPE_RM_MIN_VALUE (t) && high == TYPE_RM_MAX_VALUE (t))
+ 	    return t;
+ 
+ 	  nt = copy_type (t);
+ 	  SET_TYPE_RM_MIN_VALUE (nt, low);
+ 	  SET_TYPE_RM_MAX_VALUE (nt, high);
+ 
+ 	  return nt;
+ 	}
+ 
+       return t;
+ 
+     case COMPLEX_TYPE:
+       nt = substitute_in_type (TREE_TYPE (t), f, r);
+       if (nt == TREE_TYPE (t))
+ 	return t;
+ 
+       return build_complex_type (nt);
+ 
+     case FUNCTION_TYPE:
+     case METHOD_TYPE:
+       /* These should never show up here.  */
+       gcc_unreachable ();
+ 
+     case ARRAY_TYPE:
+       {
+ 	tree component = substitute_in_type (TREE_TYPE (t), f, r);
+ 	tree domain = substitute_in_type (TYPE_DOMAIN (t), f, r);
+ 
+ 	if (component == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
+ 	  return t;
+ 
+ 	nt = build_nonshared_array_type (component, domain);
+ 	SET_TYPE_ALIGN (nt, TYPE_ALIGN (t));
+ 	TYPE_USER_ALIGN (nt) = TYPE_USER_ALIGN (t);
+ 	SET_TYPE_MODE (nt, TYPE_MODE (t));
+ 	TYPE_SIZE (nt) = SUBSTITUTE_IN_EXPR (TYPE_SIZE (t), f, r);
+ 	TYPE_SIZE_UNIT (nt) = SUBSTITUTE_IN_EXPR (TYPE_SIZE_UNIT (t), f, r);
+ 	TYPE_MULTI_ARRAY_P (nt) = TYPE_MULTI_ARRAY_P (t);
+ 	TYPE_CONVENTION_FORTRAN_P (nt) = TYPE_CONVENTION_FORTRAN_P (t);
+ 	if (TYPE_REVERSE_STORAGE_ORDER (t))
+ 	  set_reverse_storage_order_on_array_type (nt);
+ 	if (TYPE_NONALIASED_COMPONENT (t))
+ 	  set_nonaliased_component_on_array_type (nt);
+ 	return nt;
+       }
+ 
+     case RECORD_TYPE:
+     case UNION_TYPE:
+     case QUAL_UNION_TYPE:
+       {
+ 	bool changed_field = false;
+ 	tree field;
+ 
+ 	/* Start out with no fields, make new fields, and chain them
+ 	   in.  If we haven't actually changed the type of any field,
+ 	   discard everything we've done and return the old type.  */
+ 	nt = copy_type (t);
+ 	TYPE_FIELDS (nt) = NULL_TREE;
+ 
+ 	for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
+ 	  {
+ 	    tree new_field = copy_node (field), new_n;
+ 
+ 	    new_n = substitute_in_type (TREE_TYPE (field), f, r);
+ 	    if (new_n != TREE_TYPE (field))
+ 	      {
+ 		TREE_TYPE (new_field) = new_n;
+ 		changed_field = true;
+ 	      }
+ 
+ 	    new_n = SUBSTITUTE_IN_EXPR (DECL_FIELD_OFFSET (field), f, r);
+ 	    if (new_n != DECL_FIELD_OFFSET (field))
+ 	      {
+ 		DECL_FIELD_OFFSET (new_field) = new_n;
+ 		changed_field = true;
+ 	      }
+ 
+ 	    /* Do the substitution inside the qualifier, if any.  */
+ 	    if (TREE_CODE (t) == QUAL_UNION_TYPE)
+ 	      {
+ 		new_n = SUBSTITUTE_IN_EXPR (DECL_QUALIFIER (field), f, r);
+ 		if (new_n != DECL_QUALIFIER (field))
+ 		  {
+ 		    DECL_QUALIFIER (new_field) = new_n;
+ 		    changed_field = true;
+ 		  }
+ 	      }
+ 
+ 	    DECL_CONTEXT (new_field) = nt;
+ 	    SET_DECL_ORIGINAL_FIELD_TO_FIELD (new_field, field);
+ 
+ 	    DECL_CHAIN (new_field) = TYPE_FIELDS (nt);
+ 	    TYPE_FIELDS (nt) = new_field;
+ 	  }
+ 
+ 	if (!changed_field)
+ 	  return t;
+ 
+ 	TYPE_FIELDS (nt) = nreverse (TYPE_FIELDS (nt));
+ 	TYPE_SIZE (nt) = SUBSTITUTE_IN_EXPR (TYPE_SIZE (t), f, r);
+ 	TYPE_SIZE_UNIT (nt) = SUBSTITUTE_IN_EXPR (TYPE_SIZE_UNIT (t), f, r);
+ 	SET_TYPE_ADA_SIZE (nt, SUBSTITUTE_IN_EXPR (TYPE_ADA_SIZE (t), f, r));
+ 	return nt;
+       }
+ 
+     default:
+       return t;
+     }
+ }
+ 
+ /* Return the RM size of GNU_TYPE.  This is the actual number of bits
+    needed to represent the object.  */
+ 
+ tree
+ rm_size (tree gnu_type)
+ {
+   /* For integral types, we store the RM size explicitly.  */
+   if (INTEGRAL_TYPE_P (gnu_type) && TYPE_RM_SIZE (gnu_type))
+     return TYPE_RM_SIZE (gnu_type);
+ 
+   /* If the type contains a template, return the padded size of the template
+      plus the RM size of the actual data.  */
+   if (TREE_CODE (gnu_type) == RECORD_TYPE
+       && TYPE_CONTAINS_TEMPLATE_P (gnu_type))
+     return
+       size_binop (PLUS_EXPR,
+ 		  bit_position (DECL_CHAIN (TYPE_FIELDS (gnu_type))),
+ 		  rm_size (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (gnu_type)))));
+ 
+   /* For record or union types, we store the size explicitly.  */
+   if (RECORD_OR_UNION_TYPE_P (gnu_type)
+       && !TYPE_FAT_POINTER_P (gnu_type)
+       && TYPE_ADA_SIZE (gnu_type))
+     return TYPE_ADA_SIZE (gnu_type);
+ 
+   /* For other types, this is just the size.  */
+   return TYPE_SIZE (gnu_type);
+ }
+ 
+ /* Return the name to be used for GNAT_ENTITY.  If a type, create a
+    fully-qualified name, possibly with type information encoding.
+    Otherwise, return the name.  */
+ 
+ static const char *
+ get_entity_char (Entity_Id gnat_entity)
+ {
+   Get_Encoded_Name (gnat_entity);
+   return ggc_strdup (Name_Buffer);
+ }
+ 
+ tree
+ get_entity_name (Entity_Id gnat_entity)
+ {
+   Get_Encoded_Name (gnat_entity);
+   return get_identifier_with_length (Name_Buffer, Name_Len);
+ }
+ 
+ /* Return an identifier representing the external name to be used for
+    GNAT_ENTITY.  If SUFFIX is specified, the name is followed by "___"
+    and the specified suffix.  */
+ 
+ tree
+ create_concat_name (Entity_Id gnat_entity, const char *suffix)
+ {
+   const Entity_Kind kind = Ekind (gnat_entity);
+   const bool has_suffix = (suffix != NULL);
+   String_Template temp = {1, has_suffix ? (int) strlen (suffix) : 0};
+   String_Pointer sp = {suffix, &temp};
+ 
+   Get_External_Name (gnat_entity, has_suffix, sp);
+ 
+   /* A variable using the Stdcall convention lives in a DLL.  We adjust
+      its name to use the jump table, the _imp__NAME contains the address
+      for the NAME variable.  */
+   if ((kind == E_Variable || kind == E_Constant)
+       && Has_Stdcall_Convention (gnat_entity))
+     {
+       const int len = strlen (STDCALL_PREFIX) + Name_Len;
+       char *new_name = (char *) alloca (len + 1);
+       strcpy (new_name, STDCALL_PREFIX);
+       strcat (new_name, Name_Buffer);
+       return get_identifier_with_length (new_name, len);
+     }
+ 
+   return get_identifier_with_length (Name_Buffer, Name_Len);
+ }
+ 
+ /* Given GNU_NAME, an IDENTIFIER_NODE containing a name and SUFFIX, a
+    string, return a new IDENTIFIER_NODE that is the concatenation of
+    the name followed by "___" and the specified suffix.  */
+ 
+ tree
+ concat_name (tree gnu_name, const char *suffix)
+ {
+   const int len = IDENTIFIER_LENGTH (gnu_name) + 3 + strlen (suffix);
+   char *new_name = (char *) alloca (len + 1);
+   strcpy (new_name, IDENTIFIER_POINTER (gnu_name));
+   strcat (new_name, "___");
+   strcat (new_name, suffix);
+   return get_identifier_with_length (new_name, len);
+ }
+ 
+ /* Initialize the data structures of the decl.cc module.  */
+ 
+ void
+ init_gnat_decl (void)
+ {
+   /* Initialize the cache of annotated values.  */
+   annotate_value_cache = hash_table<value_annotation_hasher>::create_ggc (512);
+ 
+   /* Initialize the association of dummy types with subprograms.  */
+   dummy_to_subprog_map = hash_table<dummy_type_hasher>::create_ggc (512);
+ }
+ 
+ /* Destroy the data structures of the decl.cc module.  */
+ 
+ void
+ destroy_gnat_decl (void)
+ {
+   /* Destroy the cache of annotated values.  */
+   annotate_value_cache->empty ();
+   annotate_value_cache = NULL;
+ 
+   /* Destroy the association of dummy types with subprograms.  */
+   dummy_to_subprog_map->empty ();
+   dummy_to_subprog_map = NULL;
+ }
+ 
+ #include "gt-ada-decl.h"
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/gadaint.h gcc-12.1.0/gcc/ada/gcc-interface/gadaint.h
*** gcc-11.3.0/gcc/ada/gcc-interface/gadaint.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/gadaint.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *           Copyright (C) 2010-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *           Copyright (C) 2010-2021, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/gigi.h gcc-12.1.0/gcc/ada/gcc-interface/gigi.h
*** gcc-11.3.0/gcc/ada/gcc-interface/gigi.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/gigi.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2021, 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- *
*************** extern tree create_concat_name (Entity_I
*** 203,212 ****
     the name followed by "___" and the specified suffix.  */
  extern tree concat_name (tree gnu_name, const char *suffix);
  
! /* Initialize data structures of the decl.c module.  */
  extern void init_gnat_decl (void);
  
! /* Destroy data structures of the decl.c module.  */
  extern void destroy_gnat_decl (void);
  
  /* Highest number in the front-end node table.  */
--- 203,212 ----
     the name followed by "___" and the specified suffix.  */
  extern tree concat_name (tree gnu_name, const char *suffix);
  
! /* Initialize data structures of the decl.cc module.  */
  extern void init_gnat_decl (void);
  
! /* Destroy data structures of the decl.cc module.  */
  extern void destroy_gnat_decl (void);
  
  /* Highest number in the front-end node table.  */
*************** extern "C" {
*** 233,256 ****
     structures and then generates code.  */
  extern void gigi (Node_Id gnat_root,
  	          int max_gnat_node,
!                   int number_name,
! 		  struct Node *nodes_ptr,
! 		  struct Flags *Flags_Ptr,
  		  Node_Id *next_node_ptr,
  		  Node_Id *prev_node_ptr,
  		  struct Elist_Header *elists_ptr,
!                   struct Elmt_Item *elmts_ptr,
!                   struct String_Entry *strings_ptr,
!                   Char_Code *strings_chars_ptr,
!                   struct List_Header *list_headers_ptr,
!                   Nat number_file,
!                   struct File_Info_Type *file_info_ptr,
!                   Entity_Id standard_boolean,
!                   Entity_Id standard_integer,
!                   Entity_Id standard_character,
!                   Entity_Id standard_long_long_float,
!                   Entity_Id standard_exception_type,
!                   Int gigi_operating_mode);
  
  #ifdef __cplusplus
  }
--- 233,256 ----
     structures and then generates code.  */
  extern void gigi (Node_Id gnat_root,
  	          int max_gnat_node,
! 		  int number_name,
! 		  Node_Header *node_offsets_ptr,
! 		  any_slot *slots_ptr,
  		  Node_Id *next_node_ptr,
  		  Node_Id *prev_node_ptr,
  		  struct Elist_Header *elists_ptr,
! 		  struct Elmt_Item *elmts_ptr,
! 		  struct String_Entry *strings_ptr,
! 		  Char_Code *strings_chars_ptr,
! 		  struct List_Header *list_headers_ptr,
! 		  Nat number_file,
! 		  struct File_Info_Type *file_info_ptr,
! 		  Entity_Id standard_boolean,
! 		  Entity_Id standard_integer,
! 		  Entity_Id standard_character,
! 		  Entity_Id standard_long_long_float,
! 		  Entity_Id standard_exception_type,
! 		  Int gigi_operating_mode);
  
  #ifdef __cplusplus
  }
*************** enum standard_datatypes
*** 396,403 ****
    /* Identifier for the name of the _Parent field in tagged record types.  */
    ADT_parent_name_id,
  
!   /* Identifier for the name of the Exception_Data type.  */
!   ADT_exception_data_name_id,
  
    /* Types and decls used by the SJLJ exception mechanism.  */
    ADT_jmpbuf_type,
--- 396,403 ----
    /* Identifier for the name of the _Parent field in tagged record types.  */
    ADT_parent_name_id,
  
!   /* Identifier for the name of the Not_Handled_By_Others field.  */
!   ADT_not_handled_by_others_name_id,
  
    /* Types and decls used by the SJLJ exception mechanism.  */
    ADT_jmpbuf_type,
*************** extern GTY(()) tree gnat_raise_decls_ext
*** 467,473 ****
  #define mulv64_decl gnat_std_decls[(int) ADT_mulv64_decl]
  #define mulv128_decl gnat_std_decls[(int) ADT_mulv128_decl]
  #define parent_name_id gnat_std_decls[(int) ADT_parent_name_id]
! #define exception_data_name_id gnat_std_decls[(int) ADT_exception_data_name_id]
  #define jmpbuf_type gnat_std_decls[(int) ADT_jmpbuf_type]
  #define jmpbuf_ptr_type gnat_std_decls[(int) ADT_jmpbuf_ptr_type]
  #define get_jmpbuf_decl gnat_std_decls[(int) ADT_get_jmpbuf_decl]
--- 467,474 ----
  #define mulv64_decl gnat_std_decls[(int) ADT_mulv64_decl]
  #define mulv128_decl gnat_std_decls[(int) ADT_mulv128_decl]
  #define parent_name_id gnat_std_decls[(int) ADT_parent_name_id]
! #define not_handled_by_others_name_id \
! 	  gnat_std_decls[(int) ADT_not_handled_by_others_name_id]
  #define jmpbuf_type gnat_std_decls[(int) ADT_jmpbuf_type]
  #define jmpbuf_ptr_type gnat_std_decls[(int) ADT_jmpbuf_ptr_type]
  #define get_jmpbuf_decl gnat_std_decls[(int) ADT_get_jmpbuf_decl]
*************** extern tree convert_to_index_type (tree
*** 562,571 ****
  /* Routines created solely for the tree translator's sake. Their prototypes
     can be changed as desired.  */
  
! /* Initialize data structures of the utils.c module.  */
  extern void init_gnat_utils (void);
  
! /* Destroy data structures of the utils.c module.  */
  extern void destroy_gnat_utils (void);
  
  /* GNAT_ENTITY is a GNAT tree node for a defining identifier.
--- 563,572 ----
  /* Routines created solely for the tree translator's sake. Their prototypes
     can be changed as desired.  */
  
! /* Initialize data structures of the utils.cc module.  */
  extern void init_gnat_utils (void);
  
! /* Destroy data structures of the utils.cc module.  */
  extern void destroy_gnat_utils (void);
  
  /* GNAT_ENTITY is a GNAT tree node for a defining identifier.
*************** extern tree get_base_type (tree type);
*** 837,846 ****
     in bits.  If we don't know anything about the alignment, return 0.  */
  extern unsigned int known_alignment (tree exp);
  
! /* Return true if TYPE, an aggregate type, contains (or is) an array.
!    If SELF_REFERENTIAL is true, then an additional requirement on the
!    array is that it be self-referential.  */
! extern bool aggregate_type_contains_array_p (tree type, bool self_referential);
  
  /* Return true if VALUE is a multiple of FACTOR. FACTOR must be a power
     of 2.  */
--- 838,846 ----
     in bits.  If we don't know anything about the alignment, return 0.  */
  extern unsigned int known_alignment (tree exp);
  
! /* Return true if TYPE is a type with variable size or a padding type with a
!    field of variable size or a record that has a field with such a type.  */
! extern bool type_has_variable_size (tree type);
  
  /* Return true if VALUE is a multiple of FACTOR. FACTOR must be a power
     of 2.  */
*************** extern tree build_call_raise_range (int
*** 904,910 ****
  				    tree index, tree first, tree last);
  
  /* Return a CONSTRUCTOR of TYPE whose elements are V.  This is not the
!    same as build_constructor in the language-independent tree.c.  */
  extern tree gnat_build_constructor (tree type, vec<constructor_elt, va_gc> *v);
  
  /* Return a COMPONENT_REF to access FIELD in RECORD, or NULL_EXPR and generate
--- 904,910 ----
  				    tree index, tree first, tree last);
  
  /* Return a CONSTRUCTOR of TYPE whose elements are V.  This is not the
!    same as build_constructor in the language-independent tree.cc.  */
  extern tree gnat_build_constructor (tree type, vec<constructor_elt, va_gc> *v);
  
  /* Return a COMPONENT_REF to access FIELD in RECORD, or NULL_EXPR and generate
*************** extern tree build_allocator (tree type,
*** 943,949 ****
     should not be allocated in a register.  Returns true if successful.  */
  extern bool gnat_mark_addressable (tree t);
  
! /* Save EXP for later use or reuse.  This is equivalent to save_expr in tree.c
     but we know how to handle our own nodes.  */
  extern tree gnat_save_expr (tree exp);
  
--- 943,949 ----
     should not be allocated in a register.  Returns true if successful.  */
  extern bool gnat_mark_addressable (tree t);
  
! /* Save EXP for later use or reuse.  This is equivalent to save_expr in tree.cc
     but we know how to handle our own nodes.  */
  extern tree gnat_save_expr (tree exp);
  
*************** extern tree gnat_save_expr (tree exp);
*** 952,958 ****
     its subsequent reuse(s) except through its potential reevaluation.  */
  extern tree gnat_protect_expr (tree exp);
  
! /* This is equivalent to stabilize_reference in tree.c but we know how to
     handle our own nodes and we take extra arguments.  FORCE says whether to
     force evaluation of everything in REF.  INIT is set to the first arm of
     a COMPOUND_EXPR present in REF, if any.  */
--- 952,958 ----
     its subsequent reuse(s) except through its potential reevaluation.  */
  extern tree gnat_protect_expr (tree exp);
  
! /* This is equivalent to stabilize_reference in tree.cc but we know how to
     handle our own nodes and we take extra arguments.  FORCE says whether to
     force evaluation of everything in REF.  INIT is set to the first arm of
     a COMPOUND_EXPR present in REF, if any.  */
*************** typedef tree (*rewrite_fn) (tree, void *
*** 965,971 ****
  extern tree gnat_rewrite_reference (tree ref, rewrite_fn func, void *data,
  				    tree *init);
  
! /* This is equivalent to get_inner_reference in expr.c but it returns the
     ultimate containing object only if the reference (lvalue) is constant,
     i.e. if it doesn't depend on the context in which it is evaluated.  */
  extern tree get_inner_constant_reference (tree exp);
--- 965,971 ----
  extern tree gnat_rewrite_reference (tree ref, rewrite_fn func, void *data,
  				    tree *init);
  
! /* This is equivalent to get_inner_reference in expr.cc but it returns the
     ultimate containing object only if the reference (lvalue) is constant,
     i.e. if it doesn't depend on the context in which it is evaluated.  */
  extern tree get_inner_constant_reference (tree exp);
*************** extern Entity_Id get_debug_scope (Node_I
*** 1025,1030 ****
--- 1025,1033 ----
     should be synchronized with Exp_Dbug.Debug_Renaming_Declaration.  */
  extern bool can_materialize_object_renaming_p (Node_Id expr);
  
+ /* Return the size of TYPE, which must be a positive power of 2.  */
+ extern unsigned int resolve_atomic_size (tree type);
+ 
  #ifdef __cplusplus
  extern "C" {
  #endif
*************** operand_type (tree expr)
*** 1222,1224 ****
--- 1225,1235 ----
  {
    return TREE_TYPE (TREE_OPERAND (expr, 0));
  }
+ 
+ /* Return the third value of a list.  */
+ 
+ static inline tree
+ list_third (tree list)
+ {
+   return TREE_VALUE (TREE_CHAIN (TREE_CHAIN (list)));
+ }
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/lang-specs.h gcc-12.1.0/gcc/ada/gcc-interface/lang-specs.h
*** gcc-11.3.0/gcc/ada/gcc-interface/lang-specs.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/lang-specs.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *           Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *           Copyright (C) 1992-2021, 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- *
***************
*** 27,33 ****
     extensions to .ada in dump file names.  */
  #define ADA_DUMPS_OPTIONS DUMPS_OPTIONS ("%{!.adb:%{!.ads:.ada}}")
  
! /* This is the contribution to the `default_compilers' array in gcc.c for
     GNAT.  */
  
    {".ads", "@ada", 0, 0, 0},
--- 27,33 ----
     extensions to .ada in dump file names.  */
  #define ADA_DUMPS_OPTIONS DUMPS_OPTIONS ("%{!.adb:%{!.ads:.ada}}")
  
! /* This is the contribution to the `default_compilers' array in gcc.cc for
     GNAT.  */
  
    {".ads", "@ada", 0, 0, 0},
***************
*** 36,42 ****
     "\
   %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
   %{!S:%{!c:%e-c or -S required for Ada}}\
!  gnat1 %{I*} %{k8:-gnatk8} %{Wall:-gnatwa} %{w:-gnatws} %{!Q:-quiet}\
      %{nostdinc*} %{nostdlib*}\
      %{fcompare-debug-second:-gnatd_A} \
      %{O*} %{W*} %{w} %{p} %{pg:-p} " ADA_DUMPS_OPTIONS " \
--- 36,42 ----
     "\
   %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
   %{!S:%{!c:%e-c or -S required for Ada}}\
!  gnat1 %{I*} %{k8:-gnatk8} %{!Q:-quiet}\
      %{nostdinc*} %{nostdlib*}\
      %{fcompare-debug-second:-gnatd_A} \
      %{O*} %{W*} %{w} %{p} %{pg:-p} " ADA_DUMPS_OPTIONS " \
***************
*** 44,51 ****
  #if defined(TARGET_VXWORKS_RTP)
     "%{fRTS=rtp|fRTS=rtp-smp|fRTS=ravenscar-cert-rtp:-mrtp} "
  #endif
!    "%{gnatea:-gnatez} %{g*&m*&f*} "
!    "%1 %{!S:%{o*:%w%*-gnatO}} \
      %i %{S:%W{o*}%{!o*:-o %w%b.s}} \
      %{gnatc*|gnats*: -o %j} %{-param*} \
      %{!gnatc*:%{!gnats*:%(invoke_as)}}", 0, 0, 0},
--- 44,52 ----
  #if defined(TARGET_VXWORKS_RTP)
     "%{fRTS=rtp|fRTS=rtp-smp|fRTS=ravenscar-cert-rtp:-mrtp} "
  #endif
!    "%{Wall:-gnatwa} %{Werror:-gnatwe} %{w:-gnatws} \
!     %{gnatea:-gnatez} %{g*&m*&f*} \
!     %1 %{!S:%{o*:%w%*-gnatO}} \
      %i %{S:%W{o*}%{!o*:-o %w%b.s}} \
      %{gnatc*|gnats*: -o %j} %{-param*} \
      %{!gnatc*:%{!gnats*:%(invoke_as)}}", 0, 0, 0},
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/misc.c gcc-12.1.0/gcc/ada/gcc-interface/misc.c
*** gcc-11.3.0/gcc/ada/gcc-interface/misc.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/misc.c	Thu Jan  1 00:00:00 1970
***************
*** 1,1424 ****
- /****************************************************************************
-  *                                                                          *
-  *                         GNAT COMPILER COMPONENTS                         *
-  *                                                                          *
-  *                                 M I S C                                  *
-  *                                                                          *
-  *                           C Implementation File                          *
-  *                                                                          *
-  *          Copyright (C) 1992-2020, Free Software Foundation, Inc.         *
-  *                                                                          *
-  * GNAT is free software;  you can  redistribute it  and/or modify it under *
-  * terms of the  GNU General Public License as published  by the Free Soft- *
-  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
-  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
-  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
-  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
-  * for  more details.  You should have  received  a copy of the GNU General *
-  * Public License  distributed  with GNAT;  see file  COPYING3.  If not see *
-  * <http://www.gnu.org/licenses/>.                                          *
-  *                                                                          *
-  * GNAT was originally developed  by the GNAT team at  New York University. *
-  * Extensive contributions were provided by Ada Core Technologies Inc.      *
-  *                                                                          *
-  ****************************************************************************/
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "target.h"
- #include "tree.h"
- #include "diagnostic.h"
- #include "opts.h"
- #include "alias.h"
- #include "fold-const.h"
- #include "stor-layout.h"
- #include "print-tree.h"
- #include "toplev.h"
- #include "tree-pass.h"
- #include "langhooks.h"
- #include "langhooks-def.h"
- #include "plugin.h"
- #include "calls.h"	/* For pass_by_reference.  */
- #include "dwarf2out.h"
- 
- #include "ada.h"
- #include "adadecode.h"
- #include "types.h"
- #include "atree.h"
- #include "namet.h"
- #include "nlists.h"
- #include "snames.h"
- #include "uintp.h"
- #include "fe.h"
- #include "sinfo.h"
- #include "einfo.h"
- #include "ada-tree.h"
- #include "gigi.h"
- 
- /* Command-line argc and argv.  These variables are global since they are
-    imported in back_end.adb.  */
- unsigned int save_argc;
- const char **save_argv;
- 
- /* GNAT argc and argv generated by the binder for all Ada programs.  */
- extern int gnat_argc;
- extern const char **gnat_argv;
- 
- /* Ada code requires variables for these settings rather than elements
-    of the global_options structure because they are imported.  */
- #undef gnat_encodings
- enum dwarf_gnat_encodings gnat_encodings = DWARF_GNAT_ENCODINGS_DEFAULT;
- 
- #undef optimize
- int optimize;
- 
- #undef optimize_size
- int optimize_size;
- 
- #undef flag_short_enums
- int flag_short_enums;
- 
- #undef flag_stack_check
- enum stack_check_type flag_stack_check = NO_STACK_CHECK;
- 
- #ifdef __cplusplus
- extern "C" {
- #endif
- 
- /* Declare functions we use as part of startup.  */
- extern void __gnat_initialize (void *);
- extern void __gnat_install_SEH_handler (void *);
- extern void adainit (void);
- extern void _ada_gnat1drv (void);
- 
- #ifdef __cplusplus
- }
- #endif
- 
- /* The parser for the language.  For us, we process the GNAT tree.  */
- 
- static void
- gnat_parse_file (void)
- {
-   int seh[2];
- 
-   /* Call the target specific initializations.  */
-   __gnat_initialize (NULL);
- 
-   /* ??? Call the SEH initialization routine.  This is to workaround
-   a bootstrap path problem.  The call below should be removed at some
-   point and the SEH pointer passed to __gnat_initialize above.  */
-   __gnat_install_SEH_handler ((void *)seh);
- 
-   /* Call the front-end elaboration procedures.  */
-   adainit ();
- 
-   /* Call the front end.  */
-   _ada_gnat1drv ();
- 
-   /* Write the global declarations.  */
-   gnat_write_global_declarations ();
- }
- 
- /* Return language mask for option processing.  */
- 
- static unsigned int
- gnat_option_lang_mask (void)
- {
-   return CL_Ada;
- }
- 
- /* Decode all the language specific options that cannot be decoded by GCC.
-    The option decoding phase of GCC calls this routine on the flags that
-    are marked as Ada-specific.  Return true on success or false on failure.  */
- 
- static bool
- gnat_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value,
- 		    int kind, location_t loc,
- 		    const struct cl_option_handlers *handlers)
- {
-   enum opt_code code = (enum opt_code) scode;
- 
-   switch (code)
-     {
-     case OPT_Wall:
-       handle_generated_option (&global_options, &global_options_set,
- 			       OPT_Wunused, NULL, value,
- 			       gnat_option_lang_mask (), kind, loc,
- 			       handlers, true, global_dc);
-       warn_uninitialized = value;
-       warn_maybe_uninitialized = value;
-       break;
- 
-     case OPT_gant:
-       warning (0, "%<-gnat%> misspelled as %<-gant%>");
- 
-       /* ... fall through ... */
- 
-     case OPT_gnat:
-     case OPT_gnatO:
-     case OPT_fRTS_:
-     case OPT_I:
-     case OPT_fdump_scos:
-     case OPT_nostdinc:
-     case OPT_nostdlib:
-       /* These are handled by the front-end.  */
-       break;
- 
-     case OPT_fshort_enums:
-     case OPT_fsigned_char:
-     case OPT_funsigned_char:
-       /* These are handled by the middle-end.  */
-       break;
- 
-     case OPT_fbuiltin_printf:
-       /* This is ignored in Ada but needs to be accepted so it can be
- 	 defaulted.  */
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   Ada_handle_option_auto (&global_options, &global_options_set,
- 			  scode, arg, value,
- 			  gnat_option_lang_mask (), kind, loc,
- 			  handlers, global_dc);
-   return true;
- }
- 
- /* Initialize options structure OPTS.  */
- 
- static void
- gnat_init_options_struct (struct gcc_options *opts)
- {
-   /* Uninitialized really means uninitialized in Ada.  */
-   opts->x_flag_zero_initialized_in_bss = 0;
- 
-   /* We don't care about errno in Ada and it causes __builtin_sqrt to
-      call the libm function rather than do it inline.  */
-   opts->x_flag_errno_math = 0;
-   opts->frontend_set_flag_errno_math = true;
- }
- 
- /* Initialize for option processing.  */
- 
- static void
- gnat_init_options (unsigned int decoded_options_count,
- 		   struct cl_decoded_option *decoded_options)
- {
-   /* Reconstruct an argv array for use of back_end.adb.
- 
-      ??? back_end.adb should not rely on this; instead, it should work with
-      decoded options without such reparsing, to ensure consistency in how
-      options are decoded.  */
-   save_argv = XNEWVEC (const char *, 2 * decoded_options_count + 1);
-   save_argc = 0;
-   for (unsigned int i = 0; i < decoded_options_count; i++)
-     {
-       size_t num_elements = decoded_options[i].canonical_option_num_elements;
- 
-       if (decoded_options[i].errors
- 	  || decoded_options[i].opt_index == OPT_SPECIAL_unknown
- 	  || num_elements == 0)
- 	continue;
- 
-       /* Deal with -I- specially since it must be a single switch.  */
-       if (decoded_options[i].opt_index == OPT_I
- 	  && num_elements == 2
- 	  && decoded_options[i].canonical_option[1][0] == '-'
- 	  && decoded_options[i].canonical_option[1][1] == '\0')
- 	save_argv[save_argc++] = "-I-";
-       else
- 	{
- 	  gcc_assert (num_elements >= 1 && num_elements <= 2);
- 	  save_argv[save_argc++] = decoded_options[i].canonical_option[0];
- 	  if (num_elements >= 2)
- 	    save_argv[save_argc++] = decoded_options[i].canonical_option[1];
- 	}
-     }
-   save_argv[save_argc] = NULL;
- 
-   /* Pass just the name of the command through the regular channel.  */
-   gnat_argv = (const char **) xmalloc (sizeof (char *));
-   gnat_argv[0] = xstrdup (save_argv[0]);
-   gnat_argc = 1;
- }
- 
- /* Settings adjustments after switches processing by the back-end.
-    Note that the front-end switches processing (Scan_Compiler_Arguments)
-    has not been done yet at this point!  */
- 
- static bool
- gnat_post_options (const char **pfilename ATTRIBUTE_UNUSED)
- {
-   /* Excess precision other than "fast" requires front-end support.  */
-   if (flag_excess_precision == EXCESS_PRECISION_STANDARD)
-     sorry ("%<-fexcess-precision=standard%> for Ada");
-   flag_excess_precision = EXCESS_PRECISION_FAST;
- 
-   /* No psABI change warnings for Ada.  */
-   warn_psabi = 0;
- 
-   /* No return type warnings for Ada.  */
-   warn_return_type = 0;
- 
-   /* No string overflow warnings for Ada.  */
-   warn_stringop_overflow = 0;
- 
-   /* No caret by default for Ada.  */
-   if (!global_options_set.x_flag_diagnostics_show_caret)
-     global_dc->show_caret = false;
- 
-   /* Warn only if STABS is not the default: we don't want to emit a warning if
-      the user did not use a -gstabs option.  */
-   if (PREFERRED_DEBUGGING_TYPE != DBX_DEBUG && write_symbols == DBX_DEBUG)
-     warning (0, "STABS debugging information for Ada is obsolete and not "
- 		"supported anymore");
- 
-   /* Copy global settings to local versions.  */
-   gnat_encodings = global_options.x_gnat_encodings;
-   optimize = global_options.x_optimize;
-   optimize_size = global_options.x_optimize_size;
-   flag_stack_check = global_options.x_flag_stack_check;
-   flag_short_enums = global_options.x_flag_short_enums;
- 
-   /* Unfortunately the post_options hook is called before the value of
-      flag_short_enums is autodetected, if need be.  Mimic the process
-      for our private flag_short_enums.  */
-   if (flag_short_enums == 2)
-     flag_short_enums = targetm.default_short_enums ();
- 
-   return false;
- }
- 
- /* Here is the function to handle the compiler error processing in GCC.  */
- 
- static void
- internal_error_function (diagnostic_context *context, const char *msgid,
- 			 va_list *ap)
- {
-   text_info tinfo;
-   char *buffer, *p, *loc;
-   String_Template temp, temp_loc;
-   String_Pointer sp, sp_loc;
-   expanded_location xloc;
- 
-   /* Warn if plugins present.  */
-   warn_if_plugins ();
- 
-   /* Dump the representation of the function.  */
-   emergency_dump_function ();
- 
-   /* Reset the pretty-printer.  */
-   pp_clear_output_area (context->printer);
- 
-   /* Format the message into the pretty-printer.  */
-   tinfo.format_spec = msgid;
-   tinfo.args_ptr = ap;
-   tinfo.err_no = errno;
-   pp_format_verbatim (context->printer, &tinfo);
- 
-   /* Extract a (writable) pointer to the formatted text.  */
-   buffer = xstrdup (pp_formatted_text (context->printer));
- 
-   /* Go up to the first newline.  */
-   for (p = buffer; *p; p++)
-     if (*p == '\n')
-       {
- 	*p = '\0';
- 	break;
-       }
- 
-   temp.Low_Bound = 1;
-   temp.High_Bound = p - buffer;
-   sp.Bounds = &temp;
-   sp.Array = buffer;
- 
-   xloc = expand_location (input_location);
-   if (context->show_column && xloc.column != 0)
-     loc = xasprintf ("%s:%d:%d", xloc.file, xloc.line, xloc.column);
-   else
-     loc = xasprintf ("%s:%d", xloc.file, xloc.line);
-   temp_loc.Low_Bound = 1;
-   temp_loc.High_Bound = strlen (loc);
-   sp_loc.Bounds = &temp_loc;
-   sp_loc.Array = loc;
- 
-   Compiler_Abort (sp, sp_loc, true);
- }
- 
- /* Perform all the initialization steps that are language-specific.  */
- 
- static bool
- gnat_init (void)
- {
-   /* Do little here, most of the standard declarations are set up after the
-      front-end has been run.  Use the same `char' as C for Interfaces.C.  */
-   build_common_tree_nodes (flag_signed_char);
- 
-   /* In Ada, we use an unsigned 8-bit type for the default boolean type.  */
-   boolean_type_node = make_unsigned_type (8);
-   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
-   SET_TYPE_RM_MAX_VALUE (boolean_type_node,
- 			 build_int_cst (boolean_type_node, 1));
-   SET_TYPE_RM_SIZE (boolean_type_node, bitsize_int (1));
-   boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
-   boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
- 
-   sbitsize_one_node = sbitsize_int (1);
-   sbitsize_unit_node = sbitsize_int (BITS_PER_UNIT);
- 
-   /* In Ada, we do not use location ranges.  */
-   line_table->default_range_bits = 0;
- 
-   /* Register our internal error function.  */
-   global_dc->internal_error = &internal_error_function;
- 
-   return true;
- }
- 
- /* Initialize the GCC support for exception handling.  */
- 
- void
- gnat_init_gcc_eh (void)
- {
-   /* We shouldn't do anything if the No_Exceptions_Handler pragma is set,
-      though. This could for instance lead to the emission of tables with
-      references to symbols (such as the Ada eh personality routine) within
-      libraries we won't link against.  */
-   if (No_Exception_Handlers_Set ())
-     return;
- 
-   /* Tell GCC we are handling cleanup actions through exception propagation.
-      This opens possibilities that we don't take advantage of yet, but is
-      nonetheless necessary to ensure that fixup code gets assigned to the
-      right exception regions.  */
-   using_eh_for_cleanups ();
- 
-   /* Turn on -fexceptions, -fnon-call-exceptions and -fdelete-dead-exceptions.
-      The first one activates the support for exceptions in the compiler.
-      The second one is useful for two reasons: 1/ we map some asynchronous
-      signals like SEGV to exceptions, so we need to ensure that the insns
-      which can lead to such signals are correctly attached to the exception
-      region they pertain to, 2/ some calls to pure subprograms are handled as
-      libcall blocks and then marked as "cannot trap" if the flag is not set
-      (see emit_libcall_block).  We should not let this be since it is possible
-      for such calls to actually raise in Ada.
-      The third one is an optimization that makes it possible to delete dead
-      instructions that may throw exceptions, most notably loads and stores,
-      as permitted in Ada.
-      Turn off -faggressive-loop-optimizations because it may optimize away
-      out-of-bound array accesses that we want to be able to catch.
-      If checks are disabled, we use the same settings as the C++ compiler,
-      except for the runtime on platforms where S'Machine_Overflow is true
-      because the runtime depends on FP (hardware) checks being properly
-      handled despite being compiled in -gnatp mode.  */
-   flag_exceptions = 1;
-   flag_delete_dead_exceptions = 1;
-   if (Suppress_Checks)
-     {
-       if (!global_options_set.x_flag_non_call_exceptions)
- 	flag_non_call_exceptions = Machine_Overflows_On_Target && GNAT_Mode;
-     }
-   else
-     {
-       if (!global_options_set.x_flag_non_call_exceptions)
-         flag_non_call_exceptions = 1;
-       flag_aggressive_loop_optimizations = 0;
-       warn_aggressive_loop_optimizations = 0;
-     }
- 
-   init_eh ();
- }
- 
- /* Initialize the GCC support for floating-point operations.  */
- 
- void
- gnat_init_gcc_fp (void)
- {
-   /* Disable FP optimizations that ignore the signedness of zero if
-      S'Signed_Zeros is true, but don't override the user if not.  */
-   if (Signed_Zeros_On_Target)
-     flag_signed_zeros = 1;
-   else if (!global_options_set.x_flag_signed_zeros)
-     flag_signed_zeros = 0;
- 
-   /* Assume that FP operations can trap if S'Machine_Overflow is true,
-      but don't override the user if not.  */
-   if (Machine_Overflows_On_Target)
-     flag_trapping_math = 1;
-   else if (!global_options_set.x_flag_trapping_math)
-     flag_trapping_math = 0;
- }
- 
- /* Print language-specific items in declaration NODE.  */
- 
- static void
- gnat_print_decl (FILE *file, tree node, int indent)
- {
-   switch (TREE_CODE (node))
-     {
-     case CONST_DECL:
-       print_node (file, "corresponding var",
- 		  DECL_CONST_CORRESPONDING_VAR (node), indent + 4);
-       break;
- 
-     case FIELD_DECL:
-       print_node (file, "original field", DECL_ORIGINAL_FIELD (node),
- 		  indent + 4);
-       break;
- 
-     case VAR_DECL:
-       if (DECL_LOOP_PARM_P (node))
- 	print_node (file, "induction var", DECL_INDUCTION_VAR (node),
- 		    indent + 4);
-       break;
- 
-     default:
-       break;
-     }
- }
- 
- /* Print language-specific items in type NODE.  */
- 
- static void
- gnat_print_type (FILE *file, tree node, int indent)
- {
-   switch (TREE_CODE (node))
-     {
-     case FUNCTION_TYPE:
-     case METHOD_TYPE:
-       print_node (file, "ci/co list", TYPE_CI_CO_LIST (node), indent + 4);
-       break;
- 
-     case INTEGER_TYPE:
-       if (TYPE_MODULAR_P (node))
- 	print_node_brief (file, "modulus", TYPE_MODULUS (node), indent + 4);
-       else if (TYPE_FIXED_POINT_P (node))
- 	print_node (file, "scale factor", TYPE_SCALE_FACTOR (node),
- 		    indent + 4);
-       else if (TYPE_HAS_ACTUAL_BOUNDS_P (node))
- 	print_node (file, "actual bounds", TYPE_ACTUAL_BOUNDS (node),
- 		    indent + 4);
-       else
- 	print_node (file, "index type", TYPE_INDEX_TYPE (node), indent + 4);
- 
-       /* ... fall through ... */
- 
-     case ENUMERAL_TYPE:
-     case BOOLEAN_TYPE:
-       print_node_brief (file, "RM size", TYPE_RM_SIZE (node), indent + 4);
- 
-       /* ... fall through ... */
- 
-     case REAL_TYPE:
-       print_node_brief (file, "RM min", TYPE_RM_MIN_VALUE (node), indent + 4);
-       print_node_brief (file, "RM max", TYPE_RM_MAX_VALUE (node), indent + 4);
-       break;
- 
-     case ARRAY_TYPE:
-       print_node (file,"actual bounds", TYPE_ACTUAL_BOUNDS (node), indent + 4);
-       break;
- 
-     case VECTOR_TYPE:
-       print_node (file,"representative array",
- 		  TYPE_REPRESENTATIVE_ARRAY (node), indent + 4);
-       break;
- 
-     case RECORD_TYPE:
-       if (TYPE_FAT_POINTER_P (node) || TYPE_CONTAINS_TEMPLATE_P (node))
- 	print_node (file, "unconstrained array",
- 		    TYPE_UNCONSTRAINED_ARRAY (node), indent + 4);
-       else
- 	print_node (file, "Ada size", TYPE_ADA_SIZE (node), indent + 4);
-       break;
- 
-     case UNION_TYPE:
-     case QUAL_UNION_TYPE:
-       print_node (file, "Ada size", TYPE_ADA_SIZE (node), indent + 4);
-       break;
- 
-     default:
-       break;
-     }
- 
-   if (TYPE_CAN_HAVE_DEBUG_TYPE_P (node) && TYPE_DEBUG_TYPE (node))
-     print_node_brief (file, "debug type", TYPE_DEBUG_TYPE (node), indent + 4);
- 
-   if (TYPE_IMPL_PACKED_ARRAY_P (node) && TYPE_ORIGINAL_PACKED_ARRAY (node))
-     print_node_brief (file, "original packed array",
- 		      TYPE_ORIGINAL_PACKED_ARRAY (node), indent + 4);
- }
- 
- /* Return the name to be printed for DECL.  */
- 
- static const char *
- gnat_printable_name (tree decl, int verbosity)
- {
-   const char *coded_name = IDENTIFIER_POINTER (DECL_NAME (decl));
-   char *ada_name = (char *) ggc_alloc_atomic (strlen (coded_name) * 2 + 60);
- 
-   __gnat_decode (coded_name, ada_name, 0);
- 
-   if (verbosity == 2 && !DECL_IS_UNDECLARED_BUILTIN (decl))
-     {
-       Set_Identifier_Casing (ada_name, DECL_SOURCE_FILE (decl));
-       return ggc_strdup (Name_Buffer);
-     }
- 
-   return ada_name;
- }
- 
- /* Return the name to be used in DWARF debug info for DECL.  */
- 
- static const char *
- gnat_dwarf_name (tree decl, int verbosity ATTRIBUTE_UNUSED)
- {
-   gcc_assert (DECL_P (decl));
-   return (const char *) IDENTIFIER_POINTER (DECL_NAME (decl));
- }
- 
- /* Return the descriptive type associated with TYPE, if any.  */
- 
- static tree
- gnat_descriptive_type (const_tree type)
- {
-   if (TYPE_STUB_DECL (type))
-     return DECL_PARALLEL_TYPE (TYPE_STUB_DECL (type));
-   else
-     return NULL_TREE;
- }
- 
- /* Return the underlying base type of an enumeration type.  */
- 
- static tree
- gnat_enum_underlying_base_type (const_tree)
- {
-   /* Enumeration types are base types in Ada.  */
-   return void_type_node;
- }
- 
- /* Return the type to be used for debugging information instead of TYPE or
-    NULL_TREE if TYPE is fine.  */
- 
- static tree
- gnat_get_debug_type (const_tree type)
- {
-   if (TYPE_CAN_HAVE_DEBUG_TYPE_P (type))
-     return TYPE_DEBUG_TYPE (type);
-   else
-     return NULL_TREE;
- }
- 
- /* Provide information in INFO for debugging output about the TYPE fixed-point
-    type.  Return whether TYPE is handled.  */
- 
- static bool
- gnat_get_fixed_point_type_info (const_tree type,
- 				struct fixed_point_type_info *info)
- {
-   tree scale_factor;
- 
-   /* Do nothing if the GNAT encodings are used.  */
-   if (!TYPE_IS_FIXED_POINT_P (type)
-       || gnat_encodings == DWARF_GNAT_ENCODINGS_ALL)
-     return false;
- 
-   scale_factor = TYPE_SCALE_FACTOR (type);
- 
-   /* We expect here only a finite set of pattern.  See fixed-point types
-      handling in gnat_to_gnu_entity.  */
- 
-   if (TREE_CODE (scale_factor) == RDIV_EXPR)
-     {
-       tree num = TREE_OPERAND (scale_factor, 0);
-       tree den = TREE_OPERAND (scale_factor, 1);
- 
-       /* See if we have a binary or decimal scale.  */
-       if (TREE_CODE (den) == POWER_EXPR)
- 	{
- 	  tree base = TREE_OPERAND (den, 0);
- 	  tree exponent = TREE_OPERAND (den, 1);
- 
- 	  /* We expect the scale factor to be 1 / 2 ** N or 1 / 10 ** N.  */
- 	  gcc_assert (num == integer_one_node
- 		      && TREE_CODE (base) == INTEGER_CST
- 		      && TREE_CODE (exponent) == INTEGER_CST);
- 
- 	  switch (tree_to_shwi (base))
- 	    {
- 	    case 2:
- 	      info->scale_factor_kind = fixed_point_scale_factor_binary;
- 	      info->scale_factor.binary = -tree_to_shwi (exponent);
- 	      return true;
- 
- 	    case 10:
- 	      info->scale_factor_kind = fixed_point_scale_factor_decimal;
- 	      info->scale_factor.decimal = -tree_to_shwi (exponent);
- 	      return true;
- 
- 	    default:
- 	      gcc_unreachable ();
- 	    }
- 	}
- 
-       /* If we reach this point, we are handling an arbitrary scale factor.  We
- 	 expect N / D with constant operands.  */
-       gcc_assert (TREE_CODE (num) == INTEGER_CST
- 		  && TREE_CODE (den) == INTEGER_CST);
- 
-       info->scale_factor_kind = fixed_point_scale_factor_arbitrary;
-       info->scale_factor.arbitrary.numerator = num;
-       info->scale_factor.arbitrary.denominator = den;
-       return true;
-     }
- 
-   gcc_unreachable ();
- }
- 
- /* Return true if types T1 and T2 are identical for type hashing purposes.
-    Called only after doing all language independent checks.  At present,
-    this is only called when both types are FUNCTION_TYPE or METHOD_TYPE.  */
- 
- static bool
- gnat_type_hash_eq (const_tree t1, const_tree t2)
- {
-   gcc_assert (FUNC_OR_METHOD_TYPE_P (t1) && TREE_CODE (t1) == TREE_CODE (t2));
-   return fntype_same_flags_p (t1, TYPE_CI_CO_LIST (t2),
- 			      TYPE_RETURN_UNCONSTRAINED_P (t2),
- 			      TYPE_RETURN_BY_DIRECT_REF_P (t2),
- 			      TREE_ADDRESSABLE (t2));
- }
- 
- /* Do nothing (return the tree node passed).  */
- 
- static tree
- gnat_return_tree (tree t)
- {
-   return t;
- }
- 
- /* Get the alias set corresponding to a type or expression.  */
- 
- static alias_set_type
- gnat_get_alias_set (tree type)
- {
-   /* If this is a padding type, use the type of the first field.  */
-   if (TYPE_IS_PADDING_P (type))
-     return get_alias_set (TREE_TYPE (TYPE_FIELDS (type)));
- 
-   /* If this is an extra subtype, use the base type.  */
-   else if (TYPE_IS_EXTRA_SUBTYPE_P (type))
-     return get_alias_set (get_base_type (type));
- 
-   /* If the type is an unconstrained array, use the type of the
-      self-referential array we make.  */
-   else if (TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE)
-     return
-       get_alias_set (TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (type)))));
- 
-   /* If the type can alias any other types, return the alias set 0.  */
-   else if (TYPE_P (type)
- 	   && !TYPE_IS_DUMMY_P (type)
- 	   && TYPE_UNIVERSAL_ALIASING_P (type))
-     return 0;
- 
-   return -1;
- }
- 
- /* GNU_TYPE is a type.  Return its maximum size in bytes, if known,
-    as a constant when possible.  */
- 
- static tree
- gnat_type_max_size (const_tree gnu_type)
- {
-   /* First see what we can get from TYPE_SIZE_UNIT, which might not
-      be constant even for simple expressions if it has already been
-      elaborated and possibly replaced by a VAR_DECL.  */
-   tree max_size_unit = max_size (TYPE_SIZE_UNIT (gnu_type), true);
- 
-   /* If we don't have a constant, see what we can get from TYPE_ADA_SIZE,
-      which should stay untouched.  */
-   if (!tree_fits_uhwi_p (max_size_unit)
-       && RECORD_OR_UNION_TYPE_P (gnu_type)
-       && !TYPE_FAT_POINTER_P (gnu_type)
-       && TYPE_ADA_SIZE (gnu_type))
-     {
-       tree max_ada_size = max_size (TYPE_ADA_SIZE (gnu_type), true);
- 
-       /* If we have succeeded in finding a constant, round it up to the
- 	 type's alignment and return the result in units.  */
-       if (tree_fits_uhwi_p (max_ada_size))
- 	max_size_unit
- 	  = size_binop (CEIL_DIV_EXPR,
- 			round_up (max_ada_size, TYPE_ALIGN (gnu_type)),
- 			bitsize_unit_node);
-     }
- 
-   return max_size_unit;
- }
- 
- static tree get_array_bit_stride (tree);
- 
- /* Provide information in INFO for debug output about the TYPE array type.
-    Return whether TYPE is handled.  */
- 
- static bool
- gnat_get_array_descr_info (const_tree const_type,
- 			   struct array_descr_info *info)
- {
-   tree type = const_cast<tree> (const_type);
-   tree first_dimen, dimen;
-   bool is_packed_array, is_array;
-   int i;
- 
-   /* Temporaries created in the first pass and used in the second one for thin
-      pointers.  The first one is an expression that yields the template record
-      from the base address (i.e. the PLACEHOLDER_EXPR).  The second one is just
-      a cursor through this record's fields.  */
-   tree thinptr_template_expr = NULL_TREE;
-   tree thinptr_bound_field = NULL_TREE;
- 
-   /* If we have an implementation type for a packed array, get the orignial
-      array type.  */
-   if (TYPE_IMPL_PACKED_ARRAY_P (type) && TYPE_ORIGINAL_PACKED_ARRAY (type))
-     {
-       type = TYPE_ORIGINAL_PACKED_ARRAY (type);
-       is_packed_array = true;
-     }
-   else
-     is_packed_array = false;
- 
-   /* First pass: gather all information about this array except everything
-      related to dimensions.  */
- 
-   /* Only handle ARRAY_TYPE nodes that come from GNAT.  */
-   if (TREE_CODE (type) == ARRAY_TYPE
-       && TYPE_DOMAIN (type)
-       && TYPE_INDEX_TYPE (TYPE_DOMAIN (type)))
-     {
-       is_array = true;
-       first_dimen = type;
-     }
- 
-   /* As well as array types embedded in a record type with their bounds.  */
-   else if (TREE_CODE (type) == RECORD_TYPE
- 	   && TYPE_CONTAINS_TEMPLATE_P (type)
- 	   && gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
-     {
-       /* This will be our base object address.  Note that we assume that
- 	 pointers to this will actually point to the array field (thin
- 	 pointers are shifted).  */
-       tree placeholder_expr = build0 (PLACEHOLDER_EXPR, type);
-       tree placeholder_addr
- 	= build_unary_op (ADDR_EXPR, NULL_TREE, placeholder_expr);
- 
-       tree bounds_field = TYPE_FIELDS (type);
-       tree bounds_type = TREE_TYPE (bounds_field);
-       tree array_field = DECL_CHAIN (bounds_field);
-       tree array_type = TREE_TYPE (array_field);
- 
-       /* Shift back the address to get the address of the template.  */
-       tree shift_amount
- 	= fold_build1 (NEGATE_EXPR, sizetype, byte_position (array_field));
-       tree template_addr
- 	= build_binary_op (POINTER_PLUS_EXPR, TREE_TYPE (placeholder_addr),
- 			   placeholder_addr, shift_amount);
-       template_addr
- 	= fold_convert (TYPE_POINTER_TO (bounds_type), template_addr);
- 
-       thinptr_template_expr
- 	= build_unary_op (INDIRECT_REF, NULL_TREE, template_addr);
-       thinptr_bound_field = TYPE_FIELDS (bounds_type);
- 
-       is_array = false;
-       first_dimen = array_type;
-     }
- 
-   else
-     return false;
- 
-   /* Second pass: compute the remaining information: dimensions and
-      corresponding bounds.  */
- 
-   /* If this array has fortran convention, it's arranged in column-major
-      order, so our view here has reversed dimensions.  */
-   const bool convention_fortran_p = TYPE_CONVENTION_FORTRAN_P (first_dimen);
- 
-   if (TYPE_PACKED (first_dimen))
-     is_packed_array = true;
- 
-   /* ??? For row major ordering, we probably want to emit nothing and
-      instead specify it as the default in Dw_TAG_compile_unit.  */
-   info->ordering = (convention_fortran_p
- 		    ? array_descr_ordering_column_major
- 		    : array_descr_ordering_row_major);
-   info->rank = NULL_TREE;
- 
-   /* Count the number of dimensions and determine the element type.  */
-   i = 1;
-   dimen = TREE_TYPE (first_dimen);
-   while (TREE_CODE (dimen) == ARRAY_TYPE && TYPE_MULTI_ARRAY_P (dimen))
-     {
-       i++;
-       dimen = TREE_TYPE (dimen);
-     }
-   info->ndimensions = i;
-   info->element_type = dimen;
- 
-   /* Too many dimensions?  Give up generating proper description: yield instead
-      nested arrays.  Note that in this case, this hook is invoked once on each
-      intermediate array type: be consistent and output nested arrays for all
-      dimensions.  */
-   if (info->ndimensions > DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN
-       || TYPE_MULTI_ARRAY_P (first_dimen))
-     {
-       info->ndimensions = 1;
-       info->element_type = TREE_TYPE (first_dimen);
-     }
- 
-   /* Now iterate over all dimensions in source order and fill the info
-      structure.  */
-   for (i = (convention_fortran_p ? info->ndimensions - 1 : 0),
-        dimen = first_dimen;
-        IN_RANGE (i, 0, info->ndimensions - 1);
-        i += (convention_fortran_p ? -1 : 1),
-        dimen = TREE_TYPE (dimen))
-     {
-       /* We are interested in the stored bounds for the debug info.  */
-       tree index_type = TYPE_INDEX_TYPE (TYPE_DOMAIN (dimen));
- 
-       if (is_array)
- 	{
- 	  /* GDB does not handle very well the self-referencial bound
- 	     expressions we are able to generate here for XUA types (they are
- 	     used only by XUP encodings) so avoid them in this case.  Note that
- 	     there are two cases where we generate self-referencial bound
- 	     expressions:  arrays that are constrained by record discriminants
- 	     and XUA types.  */
- 	  if (TYPE_CONTEXT (first_dimen)
- 	      && TREE_CODE (TYPE_CONTEXT (first_dimen)) != RECORD_TYPE
- 	      && CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (index_type))
- 	      && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL)
- 	    {
- 	      info->dimen[i].lower_bound = NULL_TREE;
- 	      info->dimen[i].upper_bound = NULL_TREE;
- 	    }
- 	  else
- 	    {
- 	      info->dimen[i].lower_bound
- 		= maybe_character_value (TYPE_MIN_VALUE (index_type));
- 	      info->dimen[i].upper_bound
- 		= maybe_character_value (TYPE_MAX_VALUE (index_type));
- 	    }
- 	}
- 
-       /* This is a thin pointer.  */
-       else
- 	{
- 	  info->dimen[i].lower_bound
- 	    = build_component_ref (thinptr_template_expr, thinptr_bound_field,
- 				   false);
- 	  thinptr_bound_field = DECL_CHAIN (thinptr_bound_field);
- 
- 	  info->dimen[i].upper_bound
- 	    = build_component_ref (thinptr_template_expr, thinptr_bound_field,
- 				   false);
- 	  thinptr_bound_field = DECL_CHAIN (thinptr_bound_field);
- 	}
- 
-       /* The DWARF back-end will output BOUNDS_TYPE as the base type of
- 	 the array index, so get to the base type of INDEX_TYPE.  */
-       while (TREE_TYPE (index_type))
- 	index_type = TREE_TYPE (index_type);
- 
-       info->dimen[i].bounds_type = maybe_debug_type (index_type);
-       info->dimen[i].stride = NULL_TREE;
-     }
- 
-   /* These are Fortran-specific fields.  They make no sense here.  */
-   info->allocated = NULL_TREE;
-   info->associated = NULL_TREE;
-   info->data_location = NULL_TREE;
- 
-   if (gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
-     {
-       /* When arrays contain dynamically-sized elements, we usually wrap them
- 	 in padding types, or we create constrained types for them.  Then, if
- 	 such types are stripped in the debugging information output, the
- 	 debugger needs a way to know the size that is reserved for each
- 	 element.  This is why we emit a stride in such situations.  */
-       tree source_element_type = info->element_type;
- 
-       while (true)
- 	{
- 	  if (TYPE_DEBUG_TYPE (source_element_type))
- 	    source_element_type = TYPE_DEBUG_TYPE (source_element_type);
- 	  else if (TYPE_IS_PADDING_P (source_element_type))
- 	    source_element_type
- 	      = TREE_TYPE (TYPE_FIELDS (source_element_type));
- 	  else
- 	    break;
- 	}
- 
-       if (TREE_CODE (TYPE_SIZE_UNIT (source_element_type)) != INTEGER_CST)
- 	{
- 	  info->stride = TYPE_SIZE_UNIT (info->element_type);
- 	  info->stride_in_bits = false;
- 	}
- 
-       /* We need to specify a bit stride when it does not correspond to the
- 	 natural size of the contained elements.  ??? Note that we do not
- 	 support packed records and nested packed arrays.  */
-       else if (is_packed_array)
- 	{
- 	  info->stride = get_array_bit_stride (info->element_type);
- 	  info->stride_in_bits = true;
- 	}
-     }
- 
-   return true;
- }
- 
- /* Given the component type COMP_TYPE of a packed array, return an expression
-    that computes the bit stride of this packed array.  Return NULL_TREE when
-    unsuccessful.  */
- 
- static tree
- get_array_bit_stride (tree comp_type)
- {
-   struct array_descr_info info;
-   tree stride;
- 
-   /* Simple case: the array contains an integral type: return its RM size.  */
-   if (INTEGRAL_TYPE_P (comp_type))
-     return TYPE_RM_SIZE (comp_type);
- 
-   /* Likewise for record or union types.  */
-   if (RECORD_OR_UNION_TYPE_P (comp_type) && !TYPE_FAT_POINTER_P (comp_type))
-     return TYPE_ADA_SIZE (comp_type);
- 
-   /* The gnat_get_array_descr_info debug hook expects a debug tyoe.  */
-   comp_type = maybe_debug_type (comp_type);
- 
-   /* Otherwise, see if this is an array we can analyze; if it's not, punt.  */
-   memset (&info, 0, sizeof (info));
-   if (!gnat_get_array_descr_info (comp_type, &info) || !info.stride)
-     return NULL_TREE;
- 
-   /* Otherwise, the array stride is the inner array's stride multiplied by the
-      number of elements it contains.  Note that if the inner array is not
-      packed, then the stride is "natural" and thus does not deserve an
-      attribute.  */
-   stride = info.stride;
-   if (!info.stride_in_bits)
-     {
-       stride = fold_convert (bitsizetype, stride);
-       stride = build_binary_op (MULT_EXPR, bitsizetype,
- 				stride, build_int_cst (bitsizetype, 8));
-     }
- 
-   for (int i = 0; i < info.ndimensions; ++i)
-     {
-       tree count;
- 
-       if (!info.dimen[i].lower_bound || !info.dimen[i].upper_bound)
- 	return NULL_TREE;
- 
-       /* Put in count an expression that computes the length of this
- 	 dimension.  */
-       count = build_binary_op (MINUS_EXPR, sbitsizetype,
- 			       fold_convert (sbitsizetype,
- 					     info.dimen[i].upper_bound),
- 			       fold_convert (sbitsizetype,
- 					     info.dimen[i].lower_bound)),
-       count = build_binary_op (PLUS_EXPR, sbitsizetype,
- 			       count, build_int_cst (sbitsizetype, 1));
-       count = build_binary_op (MAX_EXPR, sbitsizetype,
- 			       count,
- 			       build_int_cst (sbitsizetype, 0));
-       count = fold_convert (bitsizetype, count);
-       stride = build_binary_op (MULT_EXPR, bitsizetype, stride, count);
-     }
- 
-   return stride;
- }
- 
- /* GNU_TYPE is a subtype of an integral type.  Set LOWVAL to the low bound
-    and HIGHVAL to the high bound, respectively.  */
- 
- static void
- gnat_get_subrange_bounds (const_tree gnu_type, tree *lowval, tree *highval)
- {
-   *lowval = TYPE_MIN_VALUE (gnu_type);
-   *highval = TYPE_MAX_VALUE (gnu_type);
- }
- 
- /* Return the bias of GNU_TYPE, if any.  */
- 
- static tree
- gnat_get_type_bias (const_tree gnu_type)
- {
-   if (TREE_CODE (gnu_type) == INTEGER_TYPE
-       && TYPE_BIASED_REPRESENTATION_P (gnu_type)
-       && gnat_encodings != DWARF_GNAT_ENCODINGS_ALL)
-     return TYPE_RM_MIN_VALUE (gnu_type);
- 
-   return NULL_TREE;
- }
- 
- /* GNU_TYPE is the type of a subprogram parameter.  Determine if it should be
-    passed by reference by default.  */
- 
- bool
- default_pass_by_ref (tree gnu_type)
- {
-   /* We pass aggregates by reference if they are sufficiently large for
-      their alignment.  The ratio is somewhat arbitrary.  We also pass by
-      reference if the target machine would either pass or return by
-      reference.  Strictly speaking, we need only check the return if this
-      is an In Out parameter, but it's probably best to err on the side of
-      passing more things by reference.  */
- 
-   if (AGGREGATE_TYPE_P (gnu_type)
-       && (!valid_constant_size_p (TYPE_SIZE_UNIT (gnu_type))
- 	  || compare_tree_int (TYPE_SIZE_UNIT (gnu_type),
- 			       TYPE_ALIGN (gnu_type)) > 0))
-     return true;
- 
-   if (pass_by_reference (NULL, function_arg_info (gnu_type, /*named=*/true)))
-     return true;
- 
-   if (targetm.calls.return_in_memory (gnu_type, NULL_TREE))
-     return true;
- 
-   return false;
- }
- 
- /* GNU_TYPE is the type of a subprogram parameter.  Determine if it must be
-    passed by reference.  */
- 
- bool
- must_pass_by_ref (tree gnu_type)
- {
-   /* We pass only unconstrained objects, those required by the language
-      to be passed by reference, and objects of variable size.  The latter
-      is more efficient, avoids problems with variable size temporaries,
-      and does not produce compatibility problems with C, since C does
-      not have such objects.  */
-   return (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE
- 	  || TYPE_IS_BY_REFERENCE_P (gnu_type)
- 	  || (TYPE_SIZE_UNIT (gnu_type)
- 	      && TREE_CODE (TYPE_SIZE_UNIT (gnu_type)) != INTEGER_CST));
- }
- 
- /* This function is called by the front-end to enumerate all the supported
-    modes for the machine, as well as some predefined C types.  F is a function
-    which is called back with the parameters as listed below, first a string,
-    then seven ints.  The name is any arbitrary null-terminated string and has
-    no particular significance, except for the case of predefined C types, where
-    it should be the name of the C type.  For integer types, only signed types
-    should be listed, unsigned versions are assumed.  The order of types should
-    be in order of preference, with the smallest/cheapest types first.
- 
-    In particular, C predefined types should be listed before other types,
-    binary floating point types before decimal ones, and narrower/cheaper
-    type versions before more expensive ones.  In type selection the first
-    matching variant will be used.
- 
-    NAME		pointer to first char of type name
-    DIGS		number of decimal digits for floating-point modes, else 0
-    COMPLEX_P	nonzero is this represents a complex mode
-    COUNT	count of number of items, nonzero for vector mode
-    FLOAT_REP	Float_Rep_Kind for FP, otherwise undefined
-    PRECISION	number of bits used to store data
-    SIZE		number of bits occupied by the mode
-    ALIGN	number of bits to which mode is aligned.  */
- 
- void
- enumerate_modes (void (*f) (const char *, int, int, int, int, int, int, int))
- {
-   tree const c_types[]
-     = { float_type_node, double_type_node, long_double_type_node };
-   const char *const c_names[]
-     = { "float", "double", "long double" };
-   int iloop;
- 
-   /* We are going to compute it below.  */
-   fp_arith_may_widen = false;
- 
-   for (iloop = 0; iloop < NUM_MACHINE_MODES; iloop++)
-     {
-       machine_mode i = (machine_mode) iloop;
-       machine_mode inner_mode = i;
-       bool float_p = false;
-       bool complex_p = false;
-       bool vector_p = false;
-       bool skip_p = false;
-       int digs = 0;
-       unsigned int nameloop;
-       Float_Rep_Kind float_rep = IEEE_Binary; /* Until proven otherwise */
- 
-       switch (GET_MODE_CLASS (i))
- 	{
- 	case MODE_INT:
- 	  break;
- 	case MODE_FLOAT:
- 	  float_p = true;
- 	  break;
- 	case MODE_COMPLEX_INT:
- 	  complex_p = true;
- 	  inner_mode = GET_MODE_INNER (i);
- 	  break;
- 	case MODE_COMPLEX_FLOAT:
- 	  float_p = true;
- 	  complex_p = true;
- 	  inner_mode = GET_MODE_INNER (i);
- 	  break;
- 	case MODE_VECTOR_INT:
- 	  vector_p = true;
- 	  inner_mode = GET_MODE_INNER (i);
- 	  break;
- 	case MODE_VECTOR_FLOAT:
- 	  float_p = true;
- 	  vector_p = true;
- 	  inner_mode = GET_MODE_INNER (i);
- 	  break;
- 	default:
- 	  skip_p = true;
- 	}
- 
-       if (float_p)
- 	{
- 	  const struct real_format *fmt = REAL_MODE_FORMAT (inner_mode);
- 
- 	  /* ??? Cope with the ghost XFmode of the ARM port.  */
- 	  if (!fmt)
- 	    continue;
- 
- 	  /* Be conservative and consider that floating-point arithmetics may
- 	     use wider intermediate results as soon as there is an extended
- 	     Motorola or Intel mode supported by the machine.  */
- 	  if (fmt == &ieee_extended_motorola_format
- 	      || fmt == &ieee_extended_intel_96_format
- 	      || fmt == &ieee_extended_intel_96_round_53_format
- 	      || fmt == &ieee_extended_intel_128_format)
- 	    {
- #ifdef TARGET_FPMATH_DEFAULT
- 	      if (TARGET_FPMATH_DEFAULT == FPMATH_387)
- #endif
- 		fp_arith_may_widen = true;
- 	    }
- 
- 	  if (fmt->b == 2)
- 	    digs = (fmt->p - 1) * 1233 / 4096; /* scale by log (2) */
- 
- 	  else if (fmt->b == 10)
- 	    digs = fmt->p;
- 
- 	  else
- 	    gcc_unreachable ();
- 	}
- 
-       /* First register any C types for this mode that the front end
- 	 may need to know about, unless the mode should be skipped.  */
-       if (!skip_p && !vector_p)
- 	for (nameloop = 0; nameloop < ARRAY_SIZE (c_types); nameloop++)
- 	  {
- 	    tree type = c_types[nameloop];
- 	    const char *name = c_names[nameloop];
- 
- 	    if (TYPE_MODE (type) == i)
- 	      {
- 		f (name, digs, complex_p, 0, float_rep, TYPE_PRECISION (type),
- 		   TREE_INT_CST_LOW (TYPE_SIZE (type)), TYPE_ALIGN (type));
- 		skip_p = true;
- 	      }
- 	  }
- 
-       /* If no predefined C types were found, register the mode itself.  */
-       int nunits, precision, bitsize;
-       if (!skip_p
- 	  && GET_MODE_NUNITS (i).is_constant (&nunits)
- 	  && GET_MODE_PRECISION (i).is_constant (&precision)
- 	  && GET_MODE_BITSIZE (i).is_constant (&bitsize))
- 	f (GET_MODE_NAME (i), digs, complex_p,
- 	   vector_p ? nunits : 0, float_rep,
- 	   precision, bitsize, GET_MODE_ALIGNMENT (i));
-     }
- }
- 
- /* Return the size of the FP mode with precision PREC.  */
- 
- int
- fp_prec_to_size (int prec)
- {
-   opt_scalar_float_mode opt_mode;
- 
-   FOR_EACH_MODE_IN_CLASS (opt_mode, MODE_FLOAT)
-     {
-       scalar_float_mode mode = opt_mode.require ();
-       if (GET_MODE_PRECISION (mode) == prec)
- 	return GET_MODE_BITSIZE (mode);
-     }
- 
-   gcc_unreachable ();
- }
- 
- /* Return the precision of the FP mode with size SIZE.  */
- 
- int
- fp_size_to_prec (int size)
- {
-   opt_scalar_float_mode opt_mode;
- 
-   FOR_EACH_MODE_IN_CLASS (opt_mode, MODE_FLOAT)
-     {
-       scalar_mode mode = opt_mode.require ();
-       if (GET_MODE_BITSIZE (mode) == size)
- 	return GET_MODE_PRECISION (mode);
-     }
- 
-   gcc_unreachable ();
- }
- 
- static GTY(()) tree gnat_eh_personality_decl;
- 
- /* Return the GNAT personality function decl.  */
- 
- static tree
- gnat_eh_personality (void)
- {
-   if (!gnat_eh_personality_decl)
-     gnat_eh_personality_decl = build_personality_function ("gnat");
-   return gnat_eh_personality_decl;
- }
- 
- /* Initialize language-specific bits of tree_contains_struct.  */
- 
- static void
- gnat_init_ts (void)
- {
-   MARK_TS_COMMON (UNCONSTRAINED_ARRAY_TYPE);
- 
-   MARK_TS_TYPED (UNCONSTRAINED_ARRAY_REF);
-   MARK_TS_TYPED (NULL_EXPR);
-   MARK_TS_TYPED (PLUS_NOMOD_EXPR);
-   MARK_TS_TYPED (MINUS_NOMOD_EXPR);
-   MARK_TS_TYPED (POWER_EXPR);
-   MARK_TS_TYPED (ATTR_ADDR_EXPR);
-   MARK_TS_TYPED (STMT_STMT);
-   MARK_TS_TYPED (LOOP_STMT);
-   MARK_TS_TYPED (EXIT_STMT);
- }
- 
- /* Return the size of a tree with CODE, which is a language-specific tree code
-    in category tcc_constant, tcc_exceptional or tcc_type.  The default expects
-    never to be called.  */
- 
- static size_t
- gnat_tree_size (enum tree_code code)
- {
-   gcc_checking_assert (code >= NUM_TREE_CODES);
-   switch (code)
-     {
-     case UNCONSTRAINED_ARRAY_TYPE:
-       return sizeof (tree_type_non_common);
-     default:
-       gcc_unreachable ();
-     }
- }
- 
- /* Return the lang specific structure attached to NODE.  Allocate it (cleared)
-    if needed.  */
- 
- struct lang_type *
- get_lang_specific (tree node)
- {
-   if (!TYPE_LANG_SPECIFIC (node))
-     TYPE_LANG_SPECIFIC (node) = ggc_cleared_alloc<struct lang_type> ();
-   return TYPE_LANG_SPECIFIC (node);
- }
- 
- /* Definitions for our language-specific hooks.  */
- 
- #undef  LANG_HOOKS_NAME
- #define LANG_HOOKS_NAME			"GNU Ada"
- #undef  LANG_HOOKS_IDENTIFIER_SIZE
- #define LANG_HOOKS_IDENTIFIER_SIZE	sizeof (struct tree_identifier)
- #undef  LANG_HOOKS_TREE_SIZE
- #define LANG_HOOKS_TREE_SIZE		gnat_tree_size
- #undef  LANG_HOOKS_INIT
- #define LANG_HOOKS_INIT			gnat_init
- #undef  LANG_HOOKS_OPTION_LANG_MASK
- #define LANG_HOOKS_OPTION_LANG_MASK	gnat_option_lang_mask
- #undef  LANG_HOOKS_INIT_OPTIONS_STRUCT
- #define LANG_HOOKS_INIT_OPTIONS_STRUCT	gnat_init_options_struct
- #undef  LANG_HOOKS_INIT_OPTIONS
- #define LANG_HOOKS_INIT_OPTIONS		gnat_init_options
- #undef  LANG_HOOKS_HANDLE_OPTION
- #define LANG_HOOKS_HANDLE_OPTION	gnat_handle_option
- #undef  LANG_HOOKS_POST_OPTIONS
- #define LANG_HOOKS_POST_OPTIONS		gnat_post_options
- #undef  LANG_HOOKS_PARSE_FILE
- #define LANG_HOOKS_PARSE_FILE		gnat_parse_file
- #undef  LANG_HOOKS_TYPE_HASH_EQ
- #define LANG_HOOKS_TYPE_HASH_EQ		gnat_type_hash_eq
- #undef  LANG_HOOKS_GETDECLS
- #define LANG_HOOKS_GETDECLS		hook_tree_void_null
- #undef  LANG_HOOKS_PUSHDECL
- #define LANG_HOOKS_PUSHDECL		gnat_return_tree
- #undef  LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL
- #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL hook_bool_const_tree_false
- #undef  LANG_HOOKS_GET_ALIAS_SET
- #define LANG_HOOKS_GET_ALIAS_SET	gnat_get_alias_set
- #undef  LANG_HOOKS_PRINT_DECL
- #define LANG_HOOKS_PRINT_DECL		gnat_print_decl
- #undef  LANG_HOOKS_PRINT_TYPE
- #define LANG_HOOKS_PRINT_TYPE		gnat_print_type
- #undef  LANG_HOOKS_TYPE_MAX_SIZE
- #define LANG_HOOKS_TYPE_MAX_SIZE	gnat_type_max_size
- #undef  LANG_HOOKS_DECL_PRINTABLE_NAME
- #define LANG_HOOKS_DECL_PRINTABLE_NAME	gnat_printable_name
- #undef  LANG_HOOKS_DWARF_NAME
- #define LANG_HOOKS_DWARF_NAME		gnat_dwarf_name
- #undef  LANG_HOOKS_GIMPLIFY_EXPR
- #define LANG_HOOKS_GIMPLIFY_EXPR	gnat_gimplify_expr
- #undef  LANG_HOOKS_TYPE_FOR_MODE
- #define LANG_HOOKS_TYPE_FOR_MODE	gnat_type_for_mode
- #undef  LANG_HOOKS_TYPE_FOR_SIZE
- #define LANG_HOOKS_TYPE_FOR_SIZE	gnat_type_for_size
- #undef  LANG_HOOKS_TYPES_COMPATIBLE_P
- #define LANG_HOOKS_TYPES_COMPATIBLE_P	gnat_types_compatible_p
- #undef  LANG_HOOKS_GET_ARRAY_DESCR_INFO
- #define LANG_HOOKS_GET_ARRAY_DESCR_INFO	gnat_get_array_descr_info
- #undef  LANG_HOOKS_GET_SUBRANGE_BOUNDS
- #define LANG_HOOKS_GET_SUBRANGE_BOUNDS  gnat_get_subrange_bounds
- #undef  LANG_HOOKS_GET_TYPE_BIAS
- #define LANG_HOOKS_GET_TYPE_BIAS	gnat_get_type_bias
- #undef  LANG_HOOKS_DESCRIPTIVE_TYPE
- #define LANG_HOOKS_DESCRIPTIVE_TYPE	gnat_descriptive_type
- #undef  LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE
- #define LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE gnat_enum_underlying_base_type
- #undef  LANG_HOOKS_GET_DEBUG_TYPE
- #define LANG_HOOKS_GET_DEBUG_TYPE	gnat_get_debug_type
- #undef  LANG_HOOKS_GET_FIXED_POINT_TYPE_INFO
- #define LANG_HOOKS_GET_FIXED_POINT_TYPE_INFO gnat_get_fixed_point_type_info
- #undef  LANG_HOOKS_ATTRIBUTE_TABLE
- #define LANG_HOOKS_ATTRIBUTE_TABLE	gnat_internal_attribute_table
- #undef  LANG_HOOKS_BUILTIN_FUNCTION
- #define LANG_HOOKS_BUILTIN_FUNCTION	gnat_builtin_function
- #undef  LANG_HOOKS_INIT_TS
- #define LANG_HOOKS_INIT_TS		gnat_init_ts
- #undef  LANG_HOOKS_EH_PERSONALITY
- #define LANG_HOOKS_EH_PERSONALITY	gnat_eh_personality
- #undef  LANG_HOOKS_DEEP_UNSHARING
- #define LANG_HOOKS_DEEP_UNSHARING	true
- #undef  LANG_HOOKS_CUSTOM_FUNCTION_DESCRIPTORS
- #define LANG_HOOKS_CUSTOM_FUNCTION_DESCRIPTORS true
- 
- struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
- 
- #include "gt-ada-misc.h"
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/misc.cc gcc-12.1.0/gcc/ada/gcc-interface/misc.cc
*** gcc-11.3.0/gcc/ada/gcc-interface/misc.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gcc-interface/misc.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,1421 ----
+ /****************************************************************************
+  *                                                                          *
+  *                         GNAT COMPILER COMPONENTS                         *
+  *                                                                          *
+  *                                 M I S C                                  *
+  *                                                                          *
+  *                           C Implementation File                          *
+  *                                                                          *
+  *          Copyright (C) 1992-2021, Free Software Foundation, Inc.         *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
+  * for  more details.  You should have  received  a copy of the GNU General *
+  * Public License  distributed  with GNAT;  see file  COPYING3.  If not see *
+  * <http://www.gnu.org/licenses/>.                                          *
+  *                                                                          *
+  * GNAT was originally developed  by the GNAT team at  New York University. *
+  * Extensive contributions were provided by Ada Core Technologies Inc.      *
+  *                                                                          *
+  ****************************************************************************/
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "target.h"
+ #include "tree.h"
+ #include "diagnostic.h"
+ #include "opts.h"
+ #include "alias.h"
+ #include "fold-const.h"
+ #include "stor-layout.h"
+ #include "print-tree.h"
+ #include "toplev.h"
+ #include "tree-pass.h"
+ #include "langhooks.h"
+ #include "langhooks-def.h"
+ #include "plugin.h"
+ #include "calls.h"	/* For pass_by_reference.  */
+ #include "dwarf2out.h"
+ 
+ #include "ada.h"
+ #include "adadecode.h"
+ #include "types.h"
+ #include "atree.h"
+ #include "namet.h"
+ #include "nlists.h"
+ #include "snames.h"
+ #include "uintp.h"
+ #include "fe.h"
+ #include "sinfo.h"
+ #include "einfo.h"
+ #include "ada-tree.h"
+ #include "gigi.h"
+ 
+ /* Command-line argc and argv.  These variables are global since they are
+    imported in back_end.adb.  */
+ unsigned int save_argc;
+ const char **save_argv;
+ 
+ /* GNAT argc and argv generated by the binder for all Ada programs.  */
+ extern int gnat_argc;
+ extern char **gnat_argv;
+ 
+ /* Ada code requires variables for these settings rather than elements
+    of the global_options structure because they are imported.  */
+ #undef gnat_encodings
+ enum dwarf_gnat_encodings gnat_encodings = DWARF_GNAT_ENCODINGS_DEFAULT;
+ 
+ #undef optimize
+ int optimize;
+ 
+ #undef optimize_size
+ int optimize_size;
+ 
+ #undef flag_short_enums
+ int flag_short_enums;
+ 
+ #undef flag_stack_check
+ enum stack_check_type flag_stack_check = NO_STACK_CHECK;
+ 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ /* Declare functions we use as part of startup.  */
+ extern void __gnat_initialize (void *);
+ extern void __gnat_install_SEH_handler (void *);
+ extern void adainit (void);
+ extern void _ada_gnat1drv (void);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ /* The parser for the language.  For us, we process the GNAT tree.  */
+ 
+ static void
+ gnat_parse_file (void)
+ {
+   int seh[2];
+ 
+   /* Call the target specific initializations.  */
+   __gnat_initialize (NULL);
+ 
+   /* ??? Call the SEH initialization routine.  This is to workaround
+   a bootstrap path problem.  The call below should be removed at some
+   point and the SEH pointer passed to __gnat_initialize above.  */
+   __gnat_install_SEH_handler ((void *)seh);
+ 
+   /* Call the front-end elaboration procedures.  */
+   adainit ();
+ 
+   /* Call the front end.  */
+   _ada_gnat1drv ();
+ 
+   /* Write the global declarations.  */
+   gnat_write_global_declarations ();
+ }
+ 
+ /* Return language mask for option processing.  */
+ 
+ static unsigned int
+ gnat_option_lang_mask (void)
+ {
+   return CL_Ada;
+ }
+ 
+ /* Decode all the language specific options that cannot be decoded by GCC.
+    The option decoding phase of GCC calls this routine on the flags that
+    are marked as Ada-specific.  Return true on success or false on failure.  */
+ 
+ static bool
+ gnat_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value,
+ 		    int kind, location_t loc,
+ 		    const struct cl_option_handlers *handlers)
+ {
+   enum opt_code code = (enum opt_code) scode;
+ 
+   switch (code)
+     {
+     case OPT_Wall:
+       handle_generated_option (&global_options, &global_options_set,
+ 			       OPT_Wunused, NULL, value,
+ 			       gnat_option_lang_mask (), kind, loc,
+ 			       handlers, true, global_dc);
+       warn_uninitialized = value;
+       warn_maybe_uninitialized = value;
+       break;
+ 
+     case OPT_gant:
+       warning (0, "%<-gnat%> misspelled as %<-gant%>");
+ 
+       /* ... fall through ... */
+ 
+     case OPT_gnat:
+     case OPT_gnatO:
+     case OPT_fRTS_:
+     case OPT_I:
+     case OPT_fdump_scos:
+     case OPT_nostdinc:
+     case OPT_nostdlib:
+       /* These are handled by the front-end.  */
+       break;
+ 
+     case OPT_fshort_enums:
+     case OPT_fsigned_char:
+     case OPT_funsigned_char:
+       /* These are handled by the middle-end.  */
+       break;
+ 
+     case OPT_fbuiltin_printf:
+       /* This is ignored in Ada but needs to be accepted so it can be
+ 	 defaulted.  */
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   Ada_handle_option_auto (&global_options, &global_options_set,
+ 			  scode, arg, value,
+ 			  gnat_option_lang_mask (), kind, loc,
+ 			  handlers, global_dc);
+   return true;
+ }
+ 
+ /* Initialize options structure OPTS.  */
+ 
+ static void
+ gnat_init_options_struct (struct gcc_options *opts)
+ {
+   /* Uninitialized really means uninitialized in Ada.  */
+   opts->x_flag_zero_initialized_in_bss = 0;
+ 
+   /* We don't care about errno in Ada and it causes __builtin_sqrt to
+      call the libm function rather than do it inline.  */
+   opts->x_flag_errno_math = 0;
+   opts->frontend_set_flag_errno_math = true;
+ }
+ 
+ /* Initialize for option processing.  */
+ 
+ static void
+ gnat_init_options (unsigned int decoded_options_count,
+ 		   struct cl_decoded_option *decoded_options)
+ {
+   /* Reconstruct an argv array for use of back_end.adb.
+ 
+      ??? back_end.adb should not rely on this; instead, it should work with
+      decoded options without such reparsing, to ensure consistency in how
+      options are decoded.  */
+   save_argv = XNEWVEC (const char *, 2 * decoded_options_count + 1);
+   save_argc = 0;
+   for (unsigned int i = 0; i < decoded_options_count; i++)
+     {
+       size_t num_elements = decoded_options[i].canonical_option_num_elements;
+ 
+       if (decoded_options[i].errors
+ 	  || decoded_options[i].opt_index == OPT_SPECIAL_unknown
+ 	  || num_elements == 0)
+ 	continue;
+ 
+       /* Deal with -I- specially since it must be a single switch.  */
+       if (decoded_options[i].opt_index == OPT_I
+ 	  && num_elements == 2
+ 	  && decoded_options[i].canonical_option[1][0] == '-'
+ 	  && decoded_options[i].canonical_option[1][1] == '\0')
+ 	save_argv[save_argc++] = "-I-";
+       else
+ 	{
+ 	  gcc_assert (num_elements >= 1 && num_elements <= 2);
+ 	  save_argv[save_argc++] = decoded_options[i].canonical_option[0];
+ 	  if (num_elements >= 2)
+ 	    save_argv[save_argc++] = decoded_options[i].canonical_option[1];
+ 	}
+     }
+   save_argv[save_argc] = NULL;
+ 
+   /* Pass just the name of the command through the regular channel.  */
+   gnat_argv = (char **) xmalloc (sizeof (char *));
+   gnat_argv[0] = xstrdup (save_argv[0]);
+   gnat_argc = 1;
+ }
+ 
+ /* Settings adjustments after switches processing by the back-end.
+    Note that the front-end switches processing (Scan_Compiler_Arguments)
+    has not been done yet at this point!  */
+ 
+ static bool
+ gnat_post_options (const char **pfilename ATTRIBUTE_UNUSED)
+ {
+   /* Excess precision other than "fast" requires front-end support.  */
+   if (flag_excess_precision == EXCESS_PRECISION_STANDARD)
+     sorry ("%<-fexcess-precision=standard%> for Ada");
+   else if (flag_excess_precision == EXCESS_PRECISION_FLOAT16)
+     sorry ("%<-fexcess-precision=16%> for Ada");
+ 
+   flag_excess_precision = EXCESS_PRECISION_FAST;
+ 
+   /* No psABI change warnings for Ada.  */
+   warn_psabi = 0;
+ 
+   /* No return type warnings for Ada.  */
+   warn_return_type = 0;
+ 
+   /* No string overflow warnings for Ada.  */
+   warn_stringop_overflow = 0;
+ 
+   /* No caret by default for Ada.  */
+   if (!OPTION_SET_P (flag_diagnostics_show_caret))
+     global_dc->show_caret = false;
+ 
+   /* Copy global settings to local versions.  */
+   gnat_encodings = global_options.x_gnat_encodings;
+   optimize = global_options.x_optimize;
+   optimize_size = global_options.x_optimize_size;
+   flag_stack_check = global_options.x_flag_stack_check;
+   flag_short_enums = global_options.x_flag_short_enums;
+ 
+   /* Unfortunately the post_options hook is called before the value of
+      flag_short_enums is autodetected, if need be.  Mimic the process
+      for our private flag_short_enums.  */
+   if (flag_short_enums == 2)
+     flag_short_enums = targetm.default_short_enums ();
+ 
+   return false;
+ }
+ 
+ /* Here is the function to handle the compiler error processing in GCC.  */
+ 
+ static void
+ internal_error_function (diagnostic_context *context, const char *msgid,
+ 			 va_list *ap)
+ {
+   text_info tinfo;
+   char *buffer, *p, *loc;
+   String_Template temp, temp_loc;
+   String_Pointer sp, sp_loc;
+   expanded_location xloc;
+ 
+   /* Warn if plugins present.  */
+   warn_if_plugins ();
+ 
+   /* Dump the representation of the function.  */
+   emergency_dump_function ();
+ 
+   /* Reset the pretty-printer.  */
+   pp_clear_output_area (context->printer);
+ 
+   /* Format the message into the pretty-printer.  */
+   tinfo.format_spec = msgid;
+   tinfo.args_ptr = ap;
+   tinfo.err_no = errno;
+   pp_format_verbatim (context->printer, &tinfo);
+ 
+   /* Extract a (writable) pointer to the formatted text.  */
+   buffer = xstrdup (pp_formatted_text (context->printer));
+ 
+   /* Go up to the first newline.  */
+   for (p = buffer; *p; p++)
+     if (*p == '\n')
+       {
+ 	*p = '\0';
+ 	break;
+       }
+ 
+   temp.Low_Bound = 1;
+   temp.High_Bound = p - buffer;
+   sp.Bounds = &temp;
+   sp.Array = buffer;
+ 
+   xloc = expand_location (input_location);
+   if (context->show_column && xloc.column != 0)
+     loc = xasprintf ("%s:%d:%d", xloc.file, xloc.line, xloc.column);
+   else
+     loc = xasprintf ("%s:%d", xloc.file, xloc.line);
+   temp_loc.Low_Bound = 1;
+   temp_loc.High_Bound = strlen (loc);
+   sp_loc.Bounds = &temp_loc;
+   sp_loc.Array = loc;
+ 
+   Compiler_Abort (sp, sp_loc, true);
+ }
+ 
+ /* Perform all the initialization steps that are language-specific.  */
+ 
+ static bool
+ gnat_init (void)
+ {
+   /* Do little here, most of the standard declarations are set up after the
+      front-end has been run.  Use the same `char' as C for Interfaces.C.  */
+   build_common_tree_nodes (flag_signed_char);
+ 
+   /* In Ada, we use an unsigned 8-bit type for the default boolean type.  */
+   boolean_type_node = make_unsigned_type (8);
+   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
+   SET_TYPE_RM_MAX_VALUE (boolean_type_node,
+ 			 build_int_cst (boolean_type_node, 1));
+   SET_TYPE_RM_SIZE (boolean_type_node, bitsize_int (1));
+   boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
+   boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
+ 
+   sbitsize_one_node = sbitsize_int (1);
+   sbitsize_unit_node = sbitsize_int (BITS_PER_UNIT);
+ 
+   /* In Ada, we do not use location ranges.  */
+   line_table->default_range_bits = 0;
+ 
+   /* Register our internal error function.  */
+   global_dc->internal_error = &internal_error_function;
+ 
+   return true;
+ }
+ 
+ /* Initialize the GCC support for exception handling.  */
+ 
+ void
+ gnat_init_gcc_eh (void)
+ {
+   /* We shouldn't do anything if the No_Exceptions_Handler pragma is set,
+      though. This could for instance lead to the emission of tables with
+      references to symbols (such as the Ada eh personality routine) within
+      libraries we won't link against.  */
+   if (No_Exception_Handlers_Set ())
+     return;
+ 
+   /* Tell GCC we are handling cleanup actions through exception propagation.
+      This opens possibilities that we don't take advantage of yet, but is
+      nonetheless necessary to ensure that fixup code gets assigned to the
+      right exception regions.  */
+   using_eh_for_cleanups ();
+ 
+   /* Turn on -fexceptions, -fnon-call-exceptions and -fdelete-dead-exceptions.
+      The first one activates the support for exceptions in the compiler.
+      The second one is useful for two reasons: 1/ we map some asynchronous
+      signals like SEGV to exceptions, so we need to ensure that the insns
+      which can lead to such signals are correctly attached to the exception
+      region they pertain to, 2/ some calls to pure subprograms are handled as
+      libcall blocks and then marked as "cannot trap" if the flag is not set
+      (see emit_libcall_block).  We should not let this be since it is possible
+      for such calls to actually raise in Ada.
+      The third one is an optimization that makes it possible to delete dead
+      instructions that may throw exceptions, most notably loads and stores,
+      as permitted in Ada.
+      Turn off -faggressive-loop-optimizations because it may optimize away
+      out-of-bound array accesses that we want to be able to catch.
+      If checks are disabled, we use the same settings as the C++ compiler,
+      except for the runtime on platforms where S'Machine_Overflow is true
+      because the runtime depends on FP (hardware) checks being properly
+      handled despite being compiled in -gnatp mode.  */
+   flag_exceptions = 1;
+   flag_delete_dead_exceptions = 1;
+   if (Suppress_Checks)
+     {
+       if (!OPTION_SET_P (flag_non_call_exceptions))
+ 	flag_non_call_exceptions = Machine_Overflows_On_Target && GNAT_Mode;
+     }
+   else
+     {
+       if (!OPTION_SET_P (flag_non_call_exceptions))
+         flag_non_call_exceptions = 1;
+       flag_aggressive_loop_optimizations = 0;
+       warn_aggressive_loop_optimizations = 0;
+     }
+ 
+   init_eh ();
+ }
+ 
+ /* Initialize the GCC support for floating-point operations.  */
+ 
+ void
+ gnat_init_gcc_fp (void)
+ {
+   /* Disable FP optimizations that ignore the signedness of zero if
+      S'Signed_Zeros is true, but don't override the user if not.  */
+   if (Signed_Zeros_On_Target)
+     flag_signed_zeros = 1;
+   else if (!OPTION_SET_P (flag_signed_zeros))
+     flag_signed_zeros = 0;
+ 
+   /* Assume that FP operations can trap if S'Machine_Overflow is true,
+      but don't override the user if not.  */
+   if (Machine_Overflows_On_Target)
+     flag_trapping_math = 1;
+   else if (!OPTION_SET_P (flag_trapping_math))
+     flag_trapping_math = 0;
+ }
+ 
+ /* Print language-specific items in declaration NODE.  */
+ 
+ static void
+ gnat_print_decl (FILE *file, tree node, int indent)
+ {
+   switch (TREE_CODE (node))
+     {
+     case CONST_DECL:
+       print_node (file, "corresponding var",
+ 		  DECL_CONST_CORRESPONDING_VAR (node), indent + 4);
+       break;
+ 
+     case FIELD_DECL:
+       print_node (file, "original field", DECL_ORIGINAL_FIELD (node),
+ 		  indent + 4);
+       break;
+ 
+     case VAR_DECL:
+       if (DECL_LOOP_PARM_P (node))
+ 	print_node (file, "induction var", DECL_INDUCTION_VAR (node),
+ 		    indent + 4);
+       break;
+ 
+     default:
+       break;
+     }
+ }
+ 
+ /* Print language-specific items in type NODE.  */
+ 
+ static void
+ gnat_print_type (FILE *file, tree node, int indent)
+ {
+   switch (TREE_CODE (node))
+     {
+     case FUNCTION_TYPE:
+     case METHOD_TYPE:
+       print_node (file, "ci/co list", TYPE_CI_CO_LIST (node), indent + 4);
+       break;
+ 
+     case INTEGER_TYPE:
+       if (TYPE_MODULAR_P (node))
+ 	print_node_brief (file, "modulus", TYPE_MODULUS (node), indent + 4);
+       else if (TYPE_FIXED_POINT_P (node))
+ 	print_node (file, "scale factor", TYPE_SCALE_FACTOR (node),
+ 		    indent + 4);
+       else if (TYPE_HAS_ACTUAL_BOUNDS_P (node))
+ 	print_node (file, "actual bounds", TYPE_ACTUAL_BOUNDS (node),
+ 		    indent + 4);
+       else
+ 	print_node (file, "index type", TYPE_INDEX_TYPE (node), indent + 4);
+ 
+       /* ... fall through ... */
+ 
+     case ENUMERAL_TYPE:
+     case BOOLEAN_TYPE:
+       print_node_brief (file, "RM size", TYPE_RM_SIZE (node), indent + 4);
+ 
+       /* ... fall through ... */
+ 
+     case REAL_TYPE:
+       print_node_brief (file, "RM min", TYPE_RM_MIN_VALUE (node), indent + 4);
+       print_node_brief (file, "RM max", TYPE_RM_MAX_VALUE (node), indent + 4);
+       break;
+ 
+     case ARRAY_TYPE:
+       print_node (file,"actual bounds", TYPE_ACTUAL_BOUNDS (node), indent + 4);
+       break;
+ 
+     case VECTOR_TYPE:
+       print_node (file,"representative array",
+ 		  TYPE_REPRESENTATIVE_ARRAY (node), indent + 4);
+       break;
+ 
+     case RECORD_TYPE:
+       if (TYPE_FAT_POINTER_P (node) || TYPE_CONTAINS_TEMPLATE_P (node))
+ 	print_node (file, "unconstrained array",
+ 		    TYPE_UNCONSTRAINED_ARRAY (node), indent + 4);
+       else
+ 	print_node (file, "Ada size", TYPE_ADA_SIZE (node), indent + 4);
+       break;
+ 
+     case UNION_TYPE:
+     case QUAL_UNION_TYPE:
+       print_node (file, "Ada size", TYPE_ADA_SIZE (node), indent + 4);
+       break;
+ 
+     default:
+       break;
+     }
+ 
+   if (TYPE_CAN_HAVE_DEBUG_TYPE_P (node) && TYPE_DEBUG_TYPE (node))
+     print_node_brief (file, "debug type", TYPE_DEBUG_TYPE (node), indent + 4);
+ 
+   if (TYPE_IMPL_PACKED_ARRAY_P (node) && TYPE_ORIGINAL_PACKED_ARRAY (node))
+     print_node_brief (file, "original packed array",
+ 		      TYPE_ORIGINAL_PACKED_ARRAY (node), indent + 4);
+ }
+ 
+ /* Return the name to be printed for DECL.  */
+ 
+ static const char *
+ gnat_printable_name (tree decl, int verbosity)
+ {
+   const char *coded_name = IDENTIFIER_POINTER (DECL_NAME (decl));
+   char *ada_name = (char *) ggc_alloc_atomic (strlen (coded_name) * 2 + 60);
+ 
+   __gnat_decode (coded_name, ada_name, 0);
+ 
+   if (verbosity == 2 && !DECL_IS_UNDECLARED_BUILTIN (decl))
+     {
+       Set_Identifier_Casing (ada_name, DECL_SOURCE_FILE (decl));
+       return ggc_strdup (Name_Buffer);
+     }
+ 
+   return ada_name;
+ }
+ 
+ /* Return the name to be used in DWARF debug info for DECL.  */
+ 
+ static const char *
+ gnat_dwarf_name (tree decl, int verbosity ATTRIBUTE_UNUSED)
+ {
+   gcc_assert (DECL_P (decl));
+   return (const char *) IDENTIFIER_POINTER (DECL_NAME (decl));
+ }
+ 
+ /* Return the descriptive type associated with TYPE, if any.  */
+ 
+ static tree
+ gnat_descriptive_type (const_tree type)
+ {
+   if (TYPE_STUB_DECL (type))
+     return DECL_PARALLEL_TYPE (TYPE_STUB_DECL (type));
+   else
+     return NULL_TREE;
+ }
+ 
+ /* Return the underlying base type of an enumeration type.  */
+ 
+ static tree
+ gnat_enum_underlying_base_type (const_tree)
+ {
+   /* Enumeration types are base types in Ada.  */
+   return void_type_node;
+ }
+ 
+ /* Return the type to be used for debugging information instead of TYPE or
+    NULL_TREE if TYPE is fine.  */
+ 
+ static tree
+ gnat_get_debug_type (const_tree type)
+ {
+   if (TYPE_CAN_HAVE_DEBUG_TYPE_P (type))
+     return TYPE_DEBUG_TYPE (type);
+   else
+     return NULL_TREE;
+ }
+ 
+ /* Provide information in INFO for debugging output about the TYPE fixed-point
+    type.  Return whether TYPE is handled.  */
+ 
+ static bool
+ gnat_get_fixed_point_type_info (const_tree type,
+ 				struct fixed_point_type_info *info)
+ {
+   tree scale_factor;
+ 
+   /* Do nothing if the GNAT encodings are used.  */
+   if (!TYPE_IS_FIXED_POINT_P (type)
+       || gnat_encodings == DWARF_GNAT_ENCODINGS_ALL)
+     return false;
+ 
+   scale_factor = TYPE_SCALE_FACTOR (type);
+ 
+   /* We expect here only a finite set of pattern.  See fixed-point types
+      handling in gnat_to_gnu_entity.  */
+ 
+   if (TREE_CODE (scale_factor) == RDIV_EXPR)
+     {
+       tree num = TREE_OPERAND (scale_factor, 0);
+       tree den = TREE_OPERAND (scale_factor, 1);
+ 
+       /* See if we have a binary or decimal scale.  */
+       if (TREE_CODE (den) == POWER_EXPR)
+ 	{
+ 	  tree base = TREE_OPERAND (den, 0);
+ 	  tree exponent = TREE_OPERAND (den, 1);
+ 
+ 	  /* We expect the scale factor to be 1 / 2 ** N or 1 / 10 ** N.  */
+ 	  gcc_assert (num == integer_one_node
+ 		      && TREE_CODE (base) == INTEGER_CST
+ 		      && TREE_CODE (exponent) == INTEGER_CST);
+ 
+ 	  switch (tree_to_shwi (base))
+ 	    {
+ 	    case 2:
+ 	      info->scale_factor_kind = fixed_point_scale_factor_binary;
+ 	      info->scale_factor.binary = -tree_to_shwi (exponent);
+ 	      return true;
+ 
+ 	    case 10:
+ 	      info->scale_factor_kind = fixed_point_scale_factor_decimal;
+ 	      info->scale_factor.decimal = -tree_to_shwi (exponent);
+ 	      return true;
+ 
+ 	    default:
+ 	      gcc_unreachable ();
+ 	    }
+ 	}
+ 
+       /* If we reach this point, we are handling an arbitrary scale factor.  We
+ 	 expect N / D with constant operands.  */
+       gcc_assert (TREE_CODE (num) == INTEGER_CST
+ 		  && TREE_CODE (den) == INTEGER_CST);
+ 
+       info->scale_factor_kind = fixed_point_scale_factor_arbitrary;
+       info->scale_factor.arbitrary.numerator = num;
+       info->scale_factor.arbitrary.denominator = den;
+       return true;
+     }
+ 
+   gcc_unreachable ();
+ }
+ 
+ /* Return true if types T1 and T2 are identical for type hashing purposes.
+    Called only after doing all language independent checks.  At present,
+    this is only called when both types are FUNCTION_TYPE or METHOD_TYPE.  */
+ 
+ static bool
+ gnat_type_hash_eq (const_tree t1, const_tree t2)
+ {
+   gcc_assert (FUNC_OR_METHOD_TYPE_P (t1) && TREE_CODE (t1) == TREE_CODE (t2));
+   return fntype_same_flags_p (t1, TYPE_CI_CO_LIST (t2),
+ 			      TYPE_RETURN_UNCONSTRAINED_P (t2),
+ 			      TYPE_RETURN_BY_DIRECT_REF_P (t2),
+ 			      TREE_ADDRESSABLE (t2));
+ }
+ 
+ /* Do nothing (return the tree node passed).  */
+ 
+ static tree
+ gnat_return_tree (tree t)
+ {
+   return t;
+ }
+ 
+ /* Get the alias set corresponding to a type or expression.  */
+ 
+ static alias_set_type
+ gnat_get_alias_set (tree type)
+ {
+   /* If this is a padding type, use the type of the first field.  */
+   if (TYPE_IS_PADDING_P (type))
+     return get_alias_set (TREE_TYPE (TYPE_FIELDS (type)));
+ 
+   /* If this is an extra subtype, use the base type.  */
+   else if (TYPE_IS_EXTRA_SUBTYPE_P (type))
+     return get_alias_set (get_base_type (type));
+ 
+   /* If the type is an unconstrained array, use the type of the
+      self-referential array we make.  */
+   else if (TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE)
+     return
+       get_alias_set (TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (type)))));
+ 
+   /* If the type can alias any other types, return the alias set 0.  */
+   else if (TYPE_P (type)
+ 	   && !TYPE_IS_DUMMY_P (type)
+ 	   && TYPE_UNIVERSAL_ALIASING_P (type))
+     return 0;
+ 
+   return -1;
+ }
+ 
+ /* GNU_TYPE is a type.  Return its maximum size in bytes, if known,
+    as a constant when possible.  */
+ 
+ static tree
+ gnat_type_max_size (const_tree gnu_type)
+ {
+   /* First see what we can get from TYPE_SIZE_UNIT, which might not
+      be constant even for simple expressions if it has already been
+      elaborated and possibly replaced by a VAR_DECL.  */
+   tree max_size_unit = max_size (TYPE_SIZE_UNIT (gnu_type), true);
+ 
+   /* If we don't have a constant, see what we can get from TYPE_ADA_SIZE,
+      which should stay untouched.  */
+   if (!tree_fits_uhwi_p (max_size_unit)
+       && RECORD_OR_UNION_TYPE_P (gnu_type)
+       && !TYPE_FAT_POINTER_P (gnu_type)
+       && TYPE_ADA_SIZE (gnu_type))
+     {
+       tree max_ada_size = max_size (TYPE_ADA_SIZE (gnu_type), true);
+ 
+       /* If we have succeeded in finding a constant, round it up to the
+ 	 type's alignment and return the result in units.  */
+       if (tree_fits_uhwi_p (max_ada_size))
+ 	max_size_unit
+ 	  = size_binop (EXACT_DIV_EXPR,
+ 			round_up (max_ada_size, TYPE_ALIGN (gnu_type)),
+ 			bitsize_unit_node);
+     }
+ 
+   return max_size_unit;
+ }
+ 
+ static tree get_array_bit_stride (tree);
+ 
+ /* Provide information in INFO for debug output about the TYPE array type.
+    Return whether TYPE is handled.  */
+ 
+ static bool
+ gnat_get_array_descr_info (const_tree const_type,
+ 			   struct array_descr_info *info)
+ {
+   tree type = const_cast<tree> (const_type);
+   tree first_dimen, dimen;
+   bool is_packed_array, is_array;
+   int i;
+ 
+   /* Temporaries created in the first pass and used in the second one for thin
+      pointers.  The first one is an expression that yields the template record
+      from the base address (i.e. the PLACEHOLDER_EXPR).  The second one is just
+      a cursor through this record's fields.  */
+   tree thinptr_template_expr = NULL_TREE;
+   tree thinptr_bound_field = NULL_TREE;
+ 
+   /* If we have an implementation type for a packed array, get the orignial
+      array type.  */
+   if (TYPE_IMPL_PACKED_ARRAY_P (type) && TYPE_ORIGINAL_PACKED_ARRAY (type))
+     {
+       type = TYPE_ORIGINAL_PACKED_ARRAY (type);
+       is_packed_array = true;
+     }
+   else
+     is_packed_array = false;
+ 
+   /* First pass: gather all information about this array except everything
+      related to dimensions.  */
+ 
+   /* Only handle ARRAY_TYPE nodes that come from GNAT.  */
+   if (TREE_CODE (type) == ARRAY_TYPE
+       && TYPE_DOMAIN (type)
+       && TYPE_INDEX_TYPE (TYPE_DOMAIN (type)))
+     {
+       is_array = true;
+       first_dimen = type;
+     }
+ 
+   /* As well as array types embedded in a record type with their bounds.  */
+   else if (TREE_CODE (type) == RECORD_TYPE
+ 	   && TYPE_CONTAINS_TEMPLATE_P (type)
+ 	   && gnat_encodings != DWARF_GNAT_ENCODINGS_ALL)
+     {
+       /* This will be our base object address.  Note that we assume that
+ 	 pointers to this will actually point to the array field (thin
+ 	 pointers are shifted).  */
+       tree placeholder_expr = build0 (PLACEHOLDER_EXPR, type);
+       tree placeholder_addr
+ 	= build_unary_op (ADDR_EXPR, NULL_TREE, placeholder_expr);
+ 
+       tree bounds_field = TYPE_FIELDS (type);
+       tree bounds_type = TREE_TYPE (bounds_field);
+       tree array_field = DECL_CHAIN (bounds_field);
+       tree array_type = TREE_TYPE (array_field);
+ 
+       /* Shift back the address to get the address of the template.  */
+       tree shift_amount
+ 	= fold_build1 (NEGATE_EXPR, sizetype, byte_position (array_field));
+       tree template_addr
+ 	= build_binary_op (POINTER_PLUS_EXPR, TREE_TYPE (placeholder_addr),
+ 			   placeholder_addr, shift_amount);
+       template_addr
+ 	= fold_convert (TYPE_POINTER_TO (bounds_type), template_addr);
+ 
+       thinptr_template_expr
+ 	= build_unary_op (INDIRECT_REF, NULL_TREE, template_addr);
+       thinptr_bound_field = TYPE_FIELDS (bounds_type);
+ 
+       is_array = false;
+       first_dimen = array_type;
+     }
+ 
+   else
+     return false;
+ 
+   /* Second pass: compute the remaining information: dimensions and
+      corresponding bounds.  */
+ 
+   /* If this array has fortran convention, it's arranged in column-major
+      order, so our view here has reversed dimensions.  */
+   const bool convention_fortran_p = TYPE_CONVENTION_FORTRAN_P (first_dimen);
+ 
+   if (TYPE_PACKED (first_dimen))
+     is_packed_array = true;
+ 
+   /* ??? For row major ordering, we probably want to emit nothing and
+      instead specify it as the default in Dw_TAG_compile_unit.  */
+   info->ordering = (convention_fortran_p
+ 		    ? array_descr_ordering_column_major
+ 		    : array_descr_ordering_row_major);
+   info->rank = NULL_TREE;
+ 
+   /* Count the number of dimensions and determine the element type.  */
+   i = 1;
+   dimen = TREE_TYPE (first_dimen);
+   while (TREE_CODE (dimen) == ARRAY_TYPE && TYPE_MULTI_ARRAY_P (dimen))
+     {
+       i++;
+       dimen = TREE_TYPE (dimen);
+     }
+   info->ndimensions = i;
+   info->element_type = dimen;
+ 
+   /* Too many dimensions?  Give up generating proper description: yield instead
+      nested arrays.  Note that in this case, this hook is invoked once on each
+      intermediate array type: be consistent and output nested arrays for all
+      dimensions.  */
+   if (info->ndimensions > DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN
+       || TYPE_MULTI_ARRAY_P (first_dimen))
+     {
+       info->ndimensions = 1;
+       info->element_type = TREE_TYPE (first_dimen);
+     }
+ 
+   /* Now iterate over all dimensions in source order and fill the info
+      structure.  */
+   for (i = (convention_fortran_p ? info->ndimensions - 1 : 0),
+        dimen = first_dimen;
+        IN_RANGE (i, 0, info->ndimensions - 1);
+        i += (convention_fortran_p ? -1 : 1),
+        dimen = TREE_TYPE (dimen))
+     {
+       /* We are interested in the stored bounds for the debug info.  */
+       tree index_type = TYPE_INDEX_TYPE (TYPE_DOMAIN (dimen));
+ 
+       if (is_array)
+ 	{
+ 	  /* GDB does not handle very well the self-referencial bound
+ 	     expressions we are able to generate here for XUA types (they are
+ 	     used only by XUP encodings) so avoid them in this case.  Note that
+ 	     there are two cases where we generate self-referencial bound
+ 	     expressions:  arrays that are constrained by record discriminants
+ 	     and XUA types.  */
+ 	  if (TYPE_CONTEXT (first_dimen)
+ 	      && TREE_CODE (TYPE_CONTEXT (first_dimen)) != RECORD_TYPE
+ 	      && CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (index_type))
+ 	      && gnat_encodings == DWARF_GNAT_ENCODINGS_ALL)
+ 	    {
+ 	      info->dimen[i].lower_bound = NULL_TREE;
+ 	      info->dimen[i].upper_bound = NULL_TREE;
+ 	    }
+ 	  else
+ 	    {
+ 	      info->dimen[i].lower_bound
+ 		= maybe_character_value (TYPE_MIN_VALUE (index_type));
+ 	      info->dimen[i].upper_bound
+ 		= maybe_character_value (TYPE_MAX_VALUE (index_type));
+ 	    }
+ 	}
+ 
+       /* This is a thin pointer.  */
+       else
+ 	{
+ 	  info->dimen[i].lower_bound
+ 	    = build_component_ref (thinptr_template_expr, thinptr_bound_field,
+ 				   false);
+ 	  thinptr_bound_field = DECL_CHAIN (thinptr_bound_field);
+ 
+ 	  info->dimen[i].upper_bound
+ 	    = build_component_ref (thinptr_template_expr, thinptr_bound_field,
+ 				   false);
+ 	  thinptr_bound_field = DECL_CHAIN (thinptr_bound_field);
+ 	}
+ 
+       /* The DWARF back-end will output BOUNDS_TYPE as the base type of
+ 	 the array index, so get to the base type of INDEX_TYPE.  */
+       while (TREE_TYPE (index_type))
+ 	index_type = TREE_TYPE (index_type);
+ 
+       info->dimen[i].bounds_type = maybe_debug_type (index_type);
+       info->dimen[i].stride = NULL_TREE;
+     }
+ 
+   /* These are Fortran-specific fields.  They make no sense here.  */
+   info->allocated = NULL_TREE;
+   info->associated = NULL_TREE;
+   info->data_location = NULL_TREE;
+ 
+   if (gnat_encodings != DWARF_GNAT_ENCODINGS_ALL)
+     {
+       /* When arrays contain dynamically-sized elements, we usually wrap them
+ 	 in padding types, or we create constrained types for them.  Then, if
+ 	 such types are stripped in the debugging information output, the
+ 	 debugger needs a way to know the size that is reserved for each
+ 	 element.  This is why we emit a stride in such situations.  */
+       tree source_element_type = info->element_type;
+ 
+       while (true)
+ 	{
+ 	  if (TYPE_DEBUG_TYPE (source_element_type))
+ 	    source_element_type = TYPE_DEBUG_TYPE (source_element_type);
+ 	  else if (TYPE_IS_PADDING_P (source_element_type))
+ 	    source_element_type
+ 	      = TREE_TYPE (TYPE_FIELDS (source_element_type));
+ 	  else
+ 	    break;
+ 	}
+ 
+       if (TREE_CODE (TYPE_SIZE_UNIT (source_element_type)) != INTEGER_CST)
+ 	{
+ 	  info->stride = TYPE_SIZE_UNIT (info->element_type);
+ 	  info->stride_in_bits = false;
+ 	}
+ 
+       /* We need to specify a bit stride when it does not correspond to the
+ 	 natural size of the contained elements.  ??? Note that we do not
+ 	 support packed records and nested packed arrays.  */
+       else if (is_packed_array)
+ 	{
+ 	  info->stride = get_array_bit_stride (info->element_type);
+ 	  info->stride_in_bits = true;
+ 	}
+     }
+ 
+   return true;
+ }
+ 
+ /* Given the component type COMP_TYPE of a packed array, return an expression
+    that computes the bit stride of this packed array.  Return NULL_TREE when
+    unsuccessful.  */
+ 
+ static tree
+ get_array_bit_stride (tree comp_type)
+ {
+   struct array_descr_info info;
+   tree stride;
+ 
+   /* Simple case: the array contains an integral type: return its RM size.  */
+   if (INTEGRAL_TYPE_P (comp_type))
+     return TYPE_RM_SIZE (comp_type);
+ 
+   /* Likewise for record or union types.  */
+   if (RECORD_OR_UNION_TYPE_P (comp_type) && !TYPE_FAT_POINTER_P (comp_type))
+     return TYPE_ADA_SIZE (comp_type);
+ 
+   /* The gnat_get_array_descr_info debug hook expects a debug tyoe.  */
+   comp_type = maybe_debug_type (comp_type);
+ 
+   /* Otherwise, see if this is an array we can analyze; if it's not, punt.  */
+   memset (&info, 0, sizeof (info));
+   if (!gnat_get_array_descr_info (comp_type, &info) || !info.stride)
+     return NULL_TREE;
+ 
+   /* Otherwise, the array stride is the inner array's stride multiplied by the
+      number of elements it contains.  Note that if the inner array is not
+      packed, then the stride is "natural" and thus does not deserve an
+      attribute.  */
+   stride = info.stride;
+   if (!info.stride_in_bits)
+     {
+       stride = fold_convert (bitsizetype, stride);
+       stride = build_binary_op (MULT_EXPR, bitsizetype,
+ 				stride, build_int_cst (bitsizetype, 8));
+     }
+ 
+   for (int i = 0; i < info.ndimensions; ++i)
+     {
+       tree count;
+ 
+       if (!info.dimen[i].lower_bound || !info.dimen[i].upper_bound)
+ 	return NULL_TREE;
+ 
+       /* Put in count an expression that computes the length of this
+ 	 dimension.  */
+       count = build_binary_op (MINUS_EXPR, sbitsizetype,
+ 			       fold_convert (sbitsizetype,
+ 					     info.dimen[i].upper_bound),
+ 			       fold_convert (sbitsizetype,
+ 					     info.dimen[i].lower_bound)),
+       count = build_binary_op (PLUS_EXPR, sbitsizetype,
+ 			       count, build_int_cst (sbitsizetype, 1));
+       count = build_binary_op (MAX_EXPR, sbitsizetype,
+ 			       count,
+ 			       build_int_cst (sbitsizetype, 0));
+       count = fold_convert (bitsizetype, count);
+       stride = build_binary_op (MULT_EXPR, bitsizetype, stride, count);
+     }
+ 
+   return stride;
+ }
+ 
+ /* GNU_TYPE is a subtype of an integral type.  Set LOWVAL to the low bound
+    and HIGHVAL to the high bound, respectively.  */
+ 
+ static void
+ gnat_get_subrange_bounds (const_tree gnu_type, tree *lowval, tree *highval)
+ {
+   *lowval = TYPE_MIN_VALUE (gnu_type);
+   *highval = TYPE_MAX_VALUE (gnu_type);
+ }
+ 
+ /* Return the bias of GNU_TYPE, if any.  */
+ 
+ static tree
+ gnat_get_type_bias (const_tree gnu_type)
+ {
+   if (TREE_CODE (gnu_type) == INTEGER_TYPE
+       && TYPE_BIASED_REPRESENTATION_P (gnu_type)
+       && gnat_encodings != DWARF_GNAT_ENCODINGS_ALL)
+     return TYPE_RM_MIN_VALUE (gnu_type);
+ 
+   return NULL_TREE;
+ }
+ 
+ /* GNU_TYPE is the type of a subprogram parameter.  Determine if it should be
+    passed by reference by default.  */
+ 
+ bool
+ default_pass_by_ref (tree gnu_type)
+ {
+   /* We pass aggregates by reference if they are sufficiently large for
+      their alignment.  The ratio is somewhat arbitrary.  We also pass by
+      reference if the target machine would either pass or return by
+      reference.  Strictly speaking, we need only check the return if this
+      is an In Out parameter, but it's probably best to err on the side of
+      passing more things by reference.  */
+ 
+   if (AGGREGATE_TYPE_P (gnu_type)
+       && (!valid_constant_size_p (TYPE_SIZE_UNIT (gnu_type))
+ 	  || compare_tree_int (TYPE_SIZE_UNIT (gnu_type),
+ 			       TYPE_ALIGN (gnu_type)) > 0))
+     return true;
+ 
+   if (pass_by_reference (NULL, function_arg_info (gnu_type, /*named=*/true)))
+     return true;
+ 
+   if (targetm.calls.return_in_memory (gnu_type, NULL_TREE))
+     return true;
+ 
+   return false;
+ }
+ 
+ /* GNU_TYPE is the type of a subprogram parameter.  Determine if it must be
+    passed by reference.  */
+ 
+ bool
+ must_pass_by_ref (tree gnu_type)
+ {
+   /* We pass only unconstrained objects, those required by the language
+      to be passed by reference, and objects of variable size.  The latter
+      is more efficient, avoids problems with variable size temporaries,
+      and does not produce compatibility problems with C, since C does
+      not have such objects.  */
+   return (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE
+ 	  || TYPE_IS_BY_REFERENCE_P (gnu_type)
+ 	  || (TYPE_SIZE_UNIT (gnu_type)
+ 	      && TREE_CODE (TYPE_SIZE_UNIT (gnu_type)) != INTEGER_CST));
+ }
+ 
+ /* This function is called by the front-end to enumerate all the supported
+    modes for the machine, as well as some predefined C types.  F is a function
+    which is called back with the parameters as listed below, first a string,
+    then seven ints.  The name is any arbitrary null-terminated string and has
+    no particular significance, except for the case of predefined C types, where
+    it should be the name of the C type.  For integer types, only signed types
+    should be listed, unsigned versions are assumed.  The order of types should
+    be in order of preference, with the smallest/cheapest types first.
+ 
+    In particular, C predefined types should be listed before other types,
+    binary floating point types before decimal ones, and narrower/cheaper
+    type versions before more expensive ones.  In type selection the first
+    matching variant will be used.
+ 
+    NAME		pointer to first char of type name
+    DIGS		number of decimal digits for floating-point modes, else 0
+    COMPLEX_P	nonzero is this represents a complex mode
+    COUNT	count of number of items, nonzero for vector mode
+    FLOAT_REP	Float_Rep_Kind for FP, otherwise undefined
+    PRECISION	number of bits used to store data
+    SIZE		number of bits occupied by the mode
+    ALIGN	number of bits to which mode is aligned.  */
+ 
+ void
+ enumerate_modes (void (*f) (const char *, int, int, int, int, int, int, int))
+ {
+   tree const c_types[]
+     = { float_type_node, double_type_node, long_double_type_node };
+   const char *const c_names[]
+     = { "float", "double", "long double" };
+   int iloop;
+ 
+   /* We are going to compute it below.  */
+   fp_arith_may_widen = false;
+ 
+   for (iloop = 0; iloop < NUM_MACHINE_MODES; iloop++)
+     {
+       machine_mode i = (machine_mode) iloop;
+       machine_mode inner_mode = i;
+       bool float_p = false;
+       bool complex_p = false;
+       bool vector_p = false;
+       bool skip_p = false;
+       int digs = 0;
+       unsigned int nameloop;
+       Float_Rep_Kind float_rep = IEEE_Binary; /* Until proven otherwise */
+ 
+       switch (GET_MODE_CLASS (i))
+ 	{
+ 	case MODE_INT:
+ 	  break;
+ 	case MODE_FLOAT:
+ 	  float_p = true;
+ 	  break;
+ 	case MODE_COMPLEX_INT:
+ 	  complex_p = true;
+ 	  inner_mode = GET_MODE_INNER (i);
+ 	  break;
+ 	case MODE_COMPLEX_FLOAT:
+ 	  float_p = true;
+ 	  complex_p = true;
+ 	  inner_mode = GET_MODE_INNER (i);
+ 	  break;
+ 	case MODE_VECTOR_INT:
+ 	  vector_p = true;
+ 	  inner_mode = GET_MODE_INNER (i);
+ 	  break;
+ 	case MODE_VECTOR_FLOAT:
+ 	  float_p = true;
+ 	  vector_p = true;
+ 	  inner_mode = GET_MODE_INNER (i);
+ 	  break;
+ 	default:
+ 	  skip_p = true;
+ 	}
+ 
+       if (float_p)
+ 	{
+ 	  const struct real_format *fmt = REAL_MODE_FORMAT (inner_mode);
+ 
+ 	  /* ??? Cope with the ghost XFmode of the ARM port.  */
+ 	  if (!fmt)
+ 	    continue;
+ 
+ 	  /* Be conservative and consider that floating-point arithmetics may
+ 	     use wider intermediate results as soon as there is an extended
+ 	     Motorola or Intel mode supported by the machine.  */
+ 	  if (fmt == &ieee_extended_motorola_format
+ 	      || fmt == &ieee_extended_intel_96_format
+ 	      || fmt == &ieee_extended_intel_96_round_53_format
+ 	      || fmt == &ieee_extended_intel_128_format)
+ 	    {
+ #ifdef TARGET_FPMATH_DEFAULT
+ 	      if (TARGET_FPMATH_DEFAULT == FPMATH_387)
+ #endif
+ 		fp_arith_may_widen = true;
+ 	    }
+ 
+ 	  if (fmt->b == 2)
+ 	    digs = (fmt->p - 1) * 1233 / 4096; /* scale by log (2) */
+ 
+ 	  else if (fmt->b == 10)
+ 	    digs = fmt->p;
+ 
+ 	  else
+ 	    gcc_unreachable ();
+ 	}
+ 
+       /* First register any C types for this mode that the front end
+ 	 may need to know about, unless the mode should be skipped.  */
+       if (!skip_p && !vector_p)
+ 	for (nameloop = 0; nameloop < ARRAY_SIZE (c_types); nameloop++)
+ 	  {
+ 	    tree type = c_types[nameloop];
+ 	    const char *name = c_names[nameloop];
+ 
+ 	    if (TYPE_MODE (type) == i)
+ 	      {
+ 		f (name, digs, complex_p, 0, float_rep, TYPE_PRECISION (type),
+ 		   TREE_INT_CST_LOW (TYPE_SIZE (type)), TYPE_ALIGN (type));
+ 		skip_p = true;
+ 	      }
+ 	  }
+ 
+       /* If no predefined C types were found, register the mode itself.  */
+       int nunits, precision, bitsize;
+       if (!skip_p
+ 	  && GET_MODE_NUNITS (i).is_constant (&nunits)
+ 	  && GET_MODE_PRECISION (i).is_constant (&precision)
+ 	  && GET_MODE_BITSIZE (i).is_constant (&bitsize))
+ 	f (GET_MODE_NAME (i), digs, complex_p,
+ 	   vector_p ? nunits : 0, float_rep,
+ 	   precision, bitsize, GET_MODE_ALIGNMENT (i));
+     }
+ }
+ 
+ /* Return the size of the FP mode with precision PREC.  */
+ 
+ int
+ fp_prec_to_size (int prec)
+ {
+   opt_scalar_float_mode opt_mode;
+ 
+   FOR_EACH_MODE_IN_CLASS (opt_mode, MODE_FLOAT)
+     {
+       scalar_float_mode mode = opt_mode.require ();
+       if (GET_MODE_PRECISION (mode) == prec)
+ 	return GET_MODE_BITSIZE (mode);
+     }
+ 
+   gcc_unreachable ();
+ }
+ 
+ /* Return the precision of the FP mode with size SIZE.  */
+ 
+ int
+ fp_size_to_prec (int size)
+ {
+   opt_scalar_float_mode opt_mode;
+ 
+   FOR_EACH_MODE_IN_CLASS (opt_mode, MODE_FLOAT)
+     {
+       scalar_mode mode = opt_mode.require ();
+       if (GET_MODE_BITSIZE (mode) == size)
+ 	return GET_MODE_PRECISION (mode);
+     }
+ 
+   gcc_unreachable ();
+ }
+ 
+ static GTY(()) tree gnat_eh_personality_decl;
+ 
+ /* Return the GNAT personality function decl.  */
+ 
+ static tree
+ gnat_eh_personality (void)
+ {
+   if (!gnat_eh_personality_decl)
+     gnat_eh_personality_decl = build_personality_function ("gnat");
+   return gnat_eh_personality_decl;
+ }
+ 
+ /* Initialize language-specific bits of tree_contains_struct.  */
+ 
+ static void
+ gnat_init_ts (void)
+ {
+   MARK_TS_COMMON (UNCONSTRAINED_ARRAY_TYPE);
+ 
+   MARK_TS_TYPED (UNCONSTRAINED_ARRAY_REF);
+   MARK_TS_TYPED (NULL_EXPR);
+   MARK_TS_TYPED (PLUS_NOMOD_EXPR);
+   MARK_TS_TYPED (MINUS_NOMOD_EXPR);
+   MARK_TS_TYPED (POWER_EXPR);
+   MARK_TS_TYPED (ATTR_ADDR_EXPR);
+   MARK_TS_TYPED (STMT_STMT);
+   MARK_TS_TYPED (LOOP_STMT);
+   MARK_TS_TYPED (EXIT_STMT);
+ }
+ 
+ /* Return the size of a tree with CODE, which is a language-specific tree code
+    in category tcc_constant, tcc_exceptional or tcc_type.  The default expects
+    never to be called.  */
+ 
+ static size_t
+ gnat_tree_size (enum tree_code code)
+ {
+   gcc_checking_assert (code >= NUM_TREE_CODES);
+   switch (code)
+     {
+     case UNCONSTRAINED_ARRAY_TYPE:
+       return sizeof (tree_type_non_common);
+     default:
+       gcc_unreachable ();
+     }
+ }
+ 
+ /* Return the lang specific structure attached to NODE.  Allocate it (cleared)
+    if needed.  */
+ 
+ struct lang_type *
+ get_lang_specific (tree node)
+ {
+   if (!TYPE_LANG_SPECIFIC (node))
+     TYPE_LANG_SPECIFIC (node) = ggc_cleared_alloc<struct lang_type> ();
+   return TYPE_LANG_SPECIFIC (node);
+ }
+ 
+ /* Definitions for our language-specific hooks.  */
+ 
+ #undef  LANG_HOOKS_NAME
+ #define LANG_HOOKS_NAME			"GNU Ada"
+ #undef  LANG_HOOKS_IDENTIFIER_SIZE
+ #define LANG_HOOKS_IDENTIFIER_SIZE	sizeof (struct tree_identifier)
+ #undef  LANG_HOOKS_TREE_SIZE
+ #define LANG_HOOKS_TREE_SIZE		gnat_tree_size
+ #undef  LANG_HOOKS_INIT
+ #define LANG_HOOKS_INIT			gnat_init
+ #undef  LANG_HOOKS_OPTION_LANG_MASK
+ #define LANG_HOOKS_OPTION_LANG_MASK	gnat_option_lang_mask
+ #undef  LANG_HOOKS_INIT_OPTIONS_STRUCT
+ #define LANG_HOOKS_INIT_OPTIONS_STRUCT	gnat_init_options_struct
+ #undef  LANG_HOOKS_INIT_OPTIONS
+ #define LANG_HOOKS_INIT_OPTIONS		gnat_init_options
+ #undef  LANG_HOOKS_HANDLE_OPTION
+ #define LANG_HOOKS_HANDLE_OPTION	gnat_handle_option
+ #undef  LANG_HOOKS_POST_OPTIONS
+ #define LANG_HOOKS_POST_OPTIONS		gnat_post_options
+ #undef  LANG_HOOKS_PARSE_FILE
+ #define LANG_HOOKS_PARSE_FILE		gnat_parse_file
+ #undef  LANG_HOOKS_TYPE_HASH_EQ
+ #define LANG_HOOKS_TYPE_HASH_EQ		gnat_type_hash_eq
+ #undef  LANG_HOOKS_GETDECLS
+ #define LANG_HOOKS_GETDECLS		hook_tree_void_null
+ #undef  LANG_HOOKS_PUSHDECL
+ #define LANG_HOOKS_PUSHDECL		gnat_return_tree
+ #undef  LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL
+ #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL hook_bool_const_tree_false
+ #undef  LANG_HOOKS_GET_ALIAS_SET
+ #define LANG_HOOKS_GET_ALIAS_SET	gnat_get_alias_set
+ #undef  LANG_HOOKS_PRINT_DECL
+ #define LANG_HOOKS_PRINT_DECL		gnat_print_decl
+ #undef  LANG_HOOKS_PRINT_TYPE
+ #define LANG_HOOKS_PRINT_TYPE		gnat_print_type
+ #undef  LANG_HOOKS_TYPE_MAX_SIZE
+ #define LANG_HOOKS_TYPE_MAX_SIZE	gnat_type_max_size
+ #undef  LANG_HOOKS_DECL_PRINTABLE_NAME
+ #define LANG_HOOKS_DECL_PRINTABLE_NAME	gnat_printable_name
+ #undef  LANG_HOOKS_DWARF_NAME
+ #define LANG_HOOKS_DWARF_NAME		gnat_dwarf_name
+ #undef  LANG_HOOKS_GIMPLIFY_EXPR
+ #define LANG_HOOKS_GIMPLIFY_EXPR	gnat_gimplify_expr
+ #undef  LANG_HOOKS_TYPE_FOR_MODE
+ #define LANG_HOOKS_TYPE_FOR_MODE	gnat_type_for_mode
+ #undef  LANG_HOOKS_TYPE_FOR_SIZE
+ #define LANG_HOOKS_TYPE_FOR_SIZE	gnat_type_for_size
+ #undef  LANG_HOOKS_TYPES_COMPATIBLE_P
+ #define LANG_HOOKS_TYPES_COMPATIBLE_P	gnat_types_compatible_p
+ #undef  LANG_HOOKS_GET_ARRAY_DESCR_INFO
+ #define LANG_HOOKS_GET_ARRAY_DESCR_INFO	gnat_get_array_descr_info
+ #undef  LANG_HOOKS_GET_SUBRANGE_BOUNDS
+ #define LANG_HOOKS_GET_SUBRANGE_BOUNDS  gnat_get_subrange_bounds
+ #undef  LANG_HOOKS_GET_TYPE_BIAS
+ #define LANG_HOOKS_GET_TYPE_BIAS	gnat_get_type_bias
+ #undef  LANG_HOOKS_DESCRIPTIVE_TYPE
+ #define LANG_HOOKS_DESCRIPTIVE_TYPE	gnat_descriptive_type
+ #undef  LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE
+ #define LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE gnat_enum_underlying_base_type
+ #undef  LANG_HOOKS_GET_DEBUG_TYPE
+ #define LANG_HOOKS_GET_DEBUG_TYPE	gnat_get_debug_type
+ #undef  LANG_HOOKS_GET_FIXED_POINT_TYPE_INFO
+ #define LANG_HOOKS_GET_FIXED_POINT_TYPE_INFO gnat_get_fixed_point_type_info
+ #undef  LANG_HOOKS_ATTRIBUTE_TABLE
+ #define LANG_HOOKS_ATTRIBUTE_TABLE	gnat_internal_attribute_table
+ #undef  LANG_HOOKS_BUILTIN_FUNCTION
+ #define LANG_HOOKS_BUILTIN_FUNCTION	gnat_builtin_function
+ #undef  LANG_HOOKS_INIT_TS
+ #define LANG_HOOKS_INIT_TS		gnat_init_ts
+ #undef  LANG_HOOKS_EH_PERSONALITY
+ #define LANG_HOOKS_EH_PERSONALITY	gnat_eh_personality
+ #undef  LANG_HOOKS_DEEP_UNSHARING
+ #define LANG_HOOKS_DEEP_UNSHARING	true
+ #undef  LANG_HOOKS_CUSTOM_FUNCTION_DESCRIPTORS
+ #define LANG_HOOKS_CUSTOM_FUNCTION_DESCRIPTORS true
+ 
+ struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
+ 
+ #include "gt-ada-misc.h"
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/system.ads gcc-12.1.0/gcc/ada/gcc-interface/system.ads
*** gcc-11.3.0/gcc/ada/gcc-interface/system.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/system.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                            (Compiler Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                            (Compiler Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2021, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Restrictions (No_Finalization);
*** 50,55 ****
--- 50,59 ----
  --  access type on incomplete type Perm_Tree_Wrapper (which is required for
  --  defining a recursive type).
  
+ pragma Restrictions (No_Tasking);
+ --  Make it explicit that tasking is not used in the compiler, which also
+ --  allows generating simpler and more efficient code.
+ 
  package System is
     pragma Pure;
     --  Note that we take advantage of the implementation permission to make
*************** private
*** 145,151 ****
     --  parameters is not too critical for the compiler version (e.g. we
     --  do not use floating-point anyway in the compiler).
  
-    AAMP                      : constant Boolean := False;
     Backend_Divide_Checks     : constant Boolean := False;
     Backend_Overflow_Checks   : constant Boolean := False;
     Command_Line_Args         : constant Boolean := True;
--- 149,154 ----
*************** private
*** 153,160 ****
     Denorm                    : constant Boolean := True;
     Duration_32_Bits          : constant Boolean := False;
     Exit_Status_Supported     : constant Boolean := True;
-    Fractional_Fixed_Ops      : constant Boolean := False;
-    Frontend_Layout           : constant Boolean := False;
     Machine_Overflows         : constant Boolean := False;
     Machine_Rounds            : constant Boolean := True;
     Preallocated_Stacks       : constant Boolean := False;
--- 156,161 ----
*************** private
*** 172,184 ****
     Frontend_Exceptions       : constant Boolean := False;
     ZCX_By_Default            : constant Boolean := True;
  
-    --  Obsolete entries, to be removed eventually (bootstrap issues)
- 
-    Front_End_ZCX_Support     : constant Boolean := False;
-    High_Integrity_Mode       : constant Boolean := False;
-    Long_Shifts_Inlined       : constant Boolean := True;
-    Functions_Return_By_DSP   : constant Boolean := False;
-    Support_64_Bit_Divides    : constant Boolean := True;
-    GCC_ZCX_Support           : constant Boolean := True;
- 
  end System;
--- 173,176 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/targtyps.c gcc-12.1.0/gcc/ada/gcc-interface/targtyps.c
*** gcc-11.3.0/gcc/ada/gcc-interface/targtyps.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/targtyps.c	Thu Jan  1 00:00:00 1970
***************
*** 1,237 ****
- /****************************************************************************
-  *                                                                          *
-  *                         GNAT COMPILER COMPONENTS                         *
-  *                                                                          *
-  *                            T A R G T Y P S                               *
-  *                                                                          *
-  *                                  Body                                    *
-  *                                                                          *
-  *          Copyright (C) 1992-2020, Free Software Foundation, Inc.         *
-  *                                                                          *
-  * GNAT is free software;  you can  redistribute it  and/or modify it under *
-  * terms of the  GNU General Public License as published  by the Free Soft- *
-  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
-  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
-  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
-  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
-  * for  more details.  You should have  received  a copy of the GNU General *
-  * Public License  distributed  with GNAT;  see file  COPYING3.  If not see *
-  * <http://www.gnu.org/licenses/>.                                          *
-  *                                                                          *
-  * GNAT was originally developed  by the GNAT team at  New York University. *
-  * Extensive contributions were provided by Ada Core Technologies Inc.      *
-  *                                                                          *
-  ****************************************************************************/
- 
- /* Functions for retrieving target types.  See Ada package Get_Targ.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "tm.h"
- #include "target.h"
- #include "tree.h"
- 
- #include "ada.h"
- #include "types.h"
- #include "ada-tree.h"
- #include "gigi.h"
- 
- /* If we don't have a specific size for Ada's equivalent of `long', use that
-    of C.  */
- #ifndef ADA_LONG_TYPE_SIZE
- #define ADA_LONG_TYPE_SIZE LONG_TYPE_SIZE
- #endif
- 
- /* The following provide a functional interface for the front end Ada code
-    to determine the sizes that are used for various C types. */
- 
- Pos
- get_target_bits_per_unit (void)
- {
-   return BITS_PER_UNIT;
- }
- 
- Pos
- get_target_bits_per_word (void)
- {
-   return BITS_PER_WORD;
- }
- 
- Pos
- get_target_char_size (void)
- {
-   return CHAR_TYPE_SIZE;
- }
- 
- Pos
- get_target_wchar_t_size (void)
- {
-   /* We never want wide characters less than "short" in Ada.  */
-   return MAX (SHORT_TYPE_SIZE, WCHAR_TYPE_SIZE);
- }
- 
- Pos
- get_target_short_size (void)
- {
-   return SHORT_TYPE_SIZE;
- }
- 
- Pos
- get_target_int_size (void)
- {
-   return INT_TYPE_SIZE;
- }
- 
- Pos
- get_target_long_size (void)
- {
-   return ADA_LONG_TYPE_SIZE;
- }
- 
- Pos
- get_target_long_long_size (void)
- {
-   return LONG_LONG_TYPE_SIZE;
- }
- 
- Pos
- get_target_long_long_long_size (void)
- {
-   if (targetm.scalar_mode_supported_p (TImode))
-     return GET_MODE_BITSIZE (TImode);
-   else
-     return LONG_LONG_TYPE_SIZE;
- }
- 
- Pos
- get_target_pointer_size (void)
- {
-   return POINTER_SIZE;
- }
- 
- /* Alignment related values, mapped to attributes for functional and
-    documentation purposes.  */
- 
- /* Standard'Maximum_Default_Alignment.  Maximum alignment that the compiler
-    might choose by default for a type or object.
- 
-    Stricter alignment requests trigger gigi's aligning_type circuitry for
-    stack objects or objects allocated by the default allocator.  */
- 
- Pos
- get_target_maximum_default_alignment (void)
- {
-   return BIGGEST_ALIGNMENT / BITS_PER_UNIT;
- }
- 
- /* Standard'System_Allocator_Alignment.  Alignment guaranteed to be honored
-    by the default allocator (System.Memory.Alloc or malloc if we have no
-    run-time library at hand).
- 
-    Stricter alignment requests trigger gigi's aligning_type circuitry for
-    objects allocated by the default allocator.  */
- 
- /* ??? Need a way to get info about __gnat_malloc from here (whether it is
-    handy and what alignment it honors).  In the meantime, resort to malloc
-    considerations only.  */
- 
- /* Account for MALLOC_OBSERVABLE_ALIGNMENTs here.  Use this or the ABI
-    guaranteed alignment if greater.  */
- 
- #ifdef MALLOC_OBSERVABLE_ALIGNMENT
- #define MALLOC_ALIGNMENT MALLOC_OBSERVABLE_ALIGNMENT
- #else
- #define MALLOC_OBSERVABLE_ALIGNMENT (2 * POINTER_SIZE)
- #define MALLOC_ALIGNMENT \
-   MAX (MALLOC_ABI_ALIGNMENT, MALLOC_OBSERVABLE_ALIGNMENT)
- #endif
- 
- Pos
- get_target_system_allocator_alignment (void)
- {
-   return MALLOC_ALIGNMENT / BITS_PER_UNIT;
- }
- 
- /* Standard'Maximum_Allowed_Alignment.  Maximum alignment that we may
-    accept for any type or object.  */
- 
- #ifndef MAX_OFILE_ALIGNMENT
- #define MAX_OFILE_ALIGNMENT BIGGEST_ALIGNMENT
- #endif
- 
- Pos
- get_target_maximum_allowed_alignment (void)
- {
-   return MAX_OFILE_ALIGNMENT / BITS_PER_UNIT;
- }
- 
- /* Standard'Maximum_Alignment.  The single attribute initially made
-    available, now a synonym of Standard'Maximum_Default_Alignment.  */
- 
- Pos
- get_target_maximum_alignment (void)
- {
-   return get_target_maximum_default_alignment ();
- }
- 
- #ifndef FLOAT_WORDS_BIG_ENDIAN
- #define FLOAT_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
- #endif
- 
- Nat
- get_target_float_words_be (void)
- {
-   return FLOAT_WORDS_BIG_ENDIAN;
- }
- 
- Nat
- get_target_words_be (void)
- {
-   return WORDS_BIG_ENDIAN;
- }
- 
- Nat
- get_target_bytes_be (void)
- {
-   return BYTES_BIG_ENDIAN;
- }
- 
- Nat
- get_target_bits_be (void)
- {
-   return BITS_BIG_ENDIAN;
- }
- 
- Nat
- get_target_strict_alignment (void)
- {
-   return STRICT_ALIGNMENT;
- }
- 
- Nat
- get_target_double_float_alignment (void)
- {
- #ifdef TARGET_ALIGN_NATURAL
-   /* This macro is only defined by the rs6000 port.  */
-   if (!TARGET_ALIGN_NATURAL
-       && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN))
-     return 32 / BITS_PER_UNIT;
- #endif
-   return 0;
- }
- 
- Nat
- get_target_double_scalar_alignment (void)
- {
- #ifdef TARGET_ALIGN_DOUBLE
-   /* This macro is only defined by the i386 and sh ports.  */
-   if (!TARGET_ALIGN_DOUBLE
- #ifdef TARGET_64BIT
-       && !TARGET_64BIT
- #endif
-      )
-     return 32 / BITS_PER_UNIT;
- #endif
-   return 0;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/targtyps.cc gcc-12.1.0/gcc/ada/gcc-interface/targtyps.cc
*** gcc-11.3.0/gcc/ada/gcc-interface/targtyps.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gcc-interface/targtyps.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,238 ----
+ /****************************************************************************
+  *                                                                          *
+  *                         GNAT COMPILER COMPONENTS                         *
+  *                                                                          *
+  *                            T A R G T Y P S                               *
+  *                                                                          *
+  *                                  Body                                    *
+  *                                                                          *
+  *          Copyright (C) 1992-2021, Free Software Foundation, Inc.         *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
+  * for  more details.  You should have  received  a copy of the GNU General *
+  * Public License  distributed  with GNAT;  see file  COPYING3.  If not see *
+  * <http://www.gnu.org/licenses/>.                                          *
+  *                                                                          *
+  * GNAT was originally developed  by the GNAT team at  New York University. *
+  * Extensive contributions were provided by Ada Core Technologies Inc.      *
+  *                                                                          *
+  ****************************************************************************/
+ 
+ /* Functions for retrieving target types.  See Ada package Get_Targ.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "target.h"
+ #include "tree.h"
+ 
+ #include "ada.h"
+ #include "types.h"
+ #include "sinfo.h"
+ #include "ada-tree.h"
+ #include "gigi.h"
+ 
+ /* If we don't have a specific size for Ada's equivalent of `long', use that
+    of C.  */
+ #ifndef ADA_LONG_TYPE_SIZE
+ #define ADA_LONG_TYPE_SIZE LONG_TYPE_SIZE
+ #endif
+ 
+ /* The following provide a functional interface for the front end Ada code
+    to determine the sizes that are used for various C types. */
+ 
+ Pos
+ get_target_bits_per_unit (void)
+ {
+   return BITS_PER_UNIT;
+ }
+ 
+ Pos
+ get_target_bits_per_word (void)
+ {
+   return BITS_PER_WORD;
+ }
+ 
+ Pos
+ get_target_char_size (void)
+ {
+   return CHAR_TYPE_SIZE;
+ }
+ 
+ Pos
+ get_target_wchar_t_size (void)
+ {
+   /* We never want wide characters less than "short" in Ada.  */
+   return MAX (SHORT_TYPE_SIZE, WCHAR_TYPE_SIZE);
+ }
+ 
+ Pos
+ get_target_short_size (void)
+ {
+   return SHORT_TYPE_SIZE;
+ }
+ 
+ Pos
+ get_target_int_size (void)
+ {
+   return INT_TYPE_SIZE;
+ }
+ 
+ Pos
+ get_target_long_size (void)
+ {
+   return ADA_LONG_TYPE_SIZE;
+ }
+ 
+ Pos
+ get_target_long_long_size (void)
+ {
+   return LONG_LONG_TYPE_SIZE;
+ }
+ 
+ Pos
+ get_target_long_long_long_size (void)
+ {
+   if (targetm.scalar_mode_supported_p (TImode))
+     return GET_MODE_BITSIZE (TImode);
+   else
+     return LONG_LONG_TYPE_SIZE;
+ }
+ 
+ Pos
+ get_target_pointer_size (void)
+ {
+   return POINTER_SIZE;
+ }
+ 
+ /* Alignment related values, mapped to attributes for functional and
+    documentation purposes.  */
+ 
+ /* Standard'Maximum_Default_Alignment.  Maximum alignment that the compiler
+    might choose by default for a type or object.
+ 
+    Stricter alignment requests trigger gigi's aligning_type circuitry for
+    stack objects or objects allocated by the default allocator.  */
+ 
+ Pos
+ get_target_maximum_default_alignment (void)
+ {
+   return BIGGEST_ALIGNMENT / BITS_PER_UNIT;
+ }
+ 
+ /* Standard'System_Allocator_Alignment.  Alignment guaranteed to be honored
+    by the default allocator (System.Memory.Alloc or malloc if we have no
+    run-time library at hand).
+ 
+    Stricter alignment requests trigger gigi's aligning_type circuitry for
+    objects allocated by the default allocator.  */
+ 
+ /* ??? Need a way to get info about __gnat_malloc from here (whether it is
+    handy and what alignment it honors).  In the meantime, resort to malloc
+    considerations only.  */
+ 
+ /* Account for MALLOC_OBSERVABLE_ALIGNMENTs here.  Use this or the ABI
+    guaranteed alignment if greater.  */
+ 
+ #ifdef MALLOC_OBSERVABLE_ALIGNMENT
+ #define MALLOC_ALIGNMENT MALLOC_OBSERVABLE_ALIGNMENT
+ #else
+ #define MALLOC_OBSERVABLE_ALIGNMENT (2 * POINTER_SIZE)
+ #define MALLOC_ALIGNMENT \
+   MAX (MALLOC_ABI_ALIGNMENT, MALLOC_OBSERVABLE_ALIGNMENT)
+ #endif
+ 
+ Pos
+ get_target_system_allocator_alignment (void)
+ {
+   return MALLOC_ALIGNMENT / BITS_PER_UNIT;
+ }
+ 
+ /* Standard'Maximum_Allowed_Alignment.  Maximum alignment that we may
+    accept for any type or object.  */
+ 
+ #ifndef MAX_OFILE_ALIGNMENT
+ #define MAX_OFILE_ALIGNMENT BIGGEST_ALIGNMENT
+ #endif
+ 
+ Pos
+ get_target_maximum_allowed_alignment (void)
+ {
+   return MAX_OFILE_ALIGNMENT / BITS_PER_UNIT;
+ }
+ 
+ /* Standard'Maximum_Alignment.  The single attribute initially made
+    available, now a synonym of Standard'Maximum_Default_Alignment.  */
+ 
+ Pos
+ get_target_maximum_alignment (void)
+ {
+   return get_target_maximum_default_alignment ();
+ }
+ 
+ #ifndef FLOAT_WORDS_BIG_ENDIAN
+ #define FLOAT_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
+ #endif
+ 
+ Nat
+ get_target_float_words_be (void)
+ {
+   return FLOAT_WORDS_BIG_ENDIAN;
+ }
+ 
+ Nat
+ get_target_words_be (void)
+ {
+   return WORDS_BIG_ENDIAN;
+ }
+ 
+ Nat
+ get_target_bytes_be (void)
+ {
+   return BYTES_BIG_ENDIAN;
+ }
+ 
+ Nat
+ get_target_bits_be (void)
+ {
+   return BITS_BIG_ENDIAN;
+ }
+ 
+ Nat
+ get_target_strict_alignment (void)
+ {
+   return STRICT_ALIGNMENT;
+ }
+ 
+ Nat
+ get_target_double_float_alignment (void)
+ {
+ #ifdef TARGET_ALIGN_NATURAL
+   /* This macro is only defined by the rs6000 port.  */
+   if (!TARGET_ALIGN_NATURAL
+       && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN))
+     return 32 / BITS_PER_UNIT;
+ #endif
+   return 0;
+ }
+ 
+ Nat
+ get_target_double_scalar_alignment (void)
+ {
+ #ifdef TARGET_ALIGN_DOUBLE
+   /* This macro is only defined by the i386 and sh ports.  */
+   if (!TARGET_ALIGN_DOUBLE
+ #ifdef TARGET_64BIT
+       && !TARGET_64BIT
+ #endif
+      )
+     return 32 / BITS_PER_UNIT;
+ #endif
+   return 0;
+ }
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/trans.c gcc-12.1.0/gcc/ada/gcc-interface/trans.c
*** gcc-11.3.0/gcc/ada/gcc-interface/trans.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/trans.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10819 ****
- /****************************************************************************
-  *                                                                          *
-  *                         GNAT COMPILER COMPONENTS                         *
-  *                                                                          *
-  *                                T R A N S                                 *
-  *                                                                          *
-  *                          C Implementation File                           *
-  *                                                                          *
-  *          Copyright (C) 1992-2020, Free Software Foundation, Inc.         *
-  *                                                                          *
-  * GNAT is free software;  you can  redistribute it  and/or modify it under *
-  * terms of the  GNU General Public License as published  by the Free Soft- *
-  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
-  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
-  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
-  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
-  * for  more details.  You should have  received  a copy of the GNU General *
-  * Public License  distributed  with GNAT;  see file  COPYING3.  If not see *
-  * <http://www.gnu.org/licenses/>.                                          *
-  *                                                                          *
-  * GNAT was originally developed  by the GNAT team at  New York University. *
-  * Extensive contributions were provided by Ada Core Technologies Inc.      *
-  *                                                                          *
-  ****************************************************************************/
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "target.h"
- #include "function.h"
- #include "bitmap.h"
- #include "tree.h"
- #include "gimple-expr.h"
- #include "stringpool.h"
- #include "cgraph.h"
- #include "predict.h"
- #include "diagnostic.h"
- #include "alias.h"
- #include "fold-const.h"
- #include "stor-layout.h"
- #include "stmt.h"
- #include "varasm.h"
- #include "output.h"
- #include "debug.h"
- #include "libfuncs.h"	/* For set_stack_check_libfunc.  */
- #include "tree-iterator.h"
- #include "gimplify.h"
- #include "opts.h"
- #include "common/common-target.h"
- #include "gomp-constants.h"
- #include "stringpool.h"
- #include "attribs.h"
- #include "tree-nested.h"
- 
- #include "ada.h"
- #include "adadecode.h"
- #include "types.h"
- #include "atree.h"
- #include "namet.h"
- #include "nlists.h"
- #include "snames.h"
- #include "stringt.h"
- #include "uintp.h"
- #include "urealp.h"
- #include "fe.h"
- #include "sinfo.h"
- #include "einfo.h"
- #include "gadaint.h"
- #include "ada-tree.h"
- #include "gigi.h"
- 
- /* We should avoid allocating more than ALLOCA_THRESHOLD bytes via alloca,
-    for fear of running out of stack space.  If we need more, we use xmalloc
-    instead.  */
- #define ALLOCA_THRESHOLD 1000
- 
- /* Pointers to front-end tables accessed through macros.  */
- struct Node *Nodes_Ptr;
- struct Flags *Flags_Ptr;
- Node_Id *Next_Node_Ptr;
- Node_Id *Prev_Node_Ptr;
- struct Elist_Header *Elists_Ptr;
- struct Elmt_Item *Elmts_Ptr;
- struct String_Entry *Strings_Ptr;
- Char_Code *String_Chars_Ptr;
- struct List_Header *List_Headers_Ptr;
- 
- /* Highest number in the front-end node table.  */
- int max_gnat_nodes;
- 
- /* True when gigi is being called on an analyzed but unexpanded
-    tree, and the only purpose of the call is to properly annotate
-    types with representation information.  */
- bool type_annotate_only;
- 
- /* List of N_Validate_Unchecked_Conversion nodes in the unit.  */
- static vec<Node_Id> gnat_validate_uc_list;
- 
- /* List of expressions of pragma Compile_Time_{Error|Warning} in the unit.  */
- static vec<Node_Id> gnat_compile_time_expr_list;
- 
- /* When not optimizing, we cache the 'First, 'Last and 'Length attributes
-    of unconstrained array IN parameters to avoid emitting a great deal of
-    redundant instructions to recompute them each time.  */
- struct GTY (()) parm_attr_d {
-   int id; /* GTY doesn't like Entity_Id.  */
-   int dim;
-   tree first;
-   tree last;
-   tree length;
- };
- 
- typedef struct parm_attr_d *parm_attr;
- 
- 
- struct GTY(()) language_function {
-   vec<parm_attr, va_gc> *parm_attr_cache;
-   bitmap named_ret_val;
-   vec<tree, va_gc> *other_ret_val;
-   int gnat_ret;
- };
- 
- #define f_parm_attr_cache \
-   DECL_STRUCT_FUNCTION (current_function_decl)->language->parm_attr_cache
- 
- #define f_named_ret_val \
-   DECL_STRUCT_FUNCTION (current_function_decl)->language->named_ret_val
- 
- #define f_other_ret_val \
-   DECL_STRUCT_FUNCTION (current_function_decl)->language->other_ret_val
- 
- #define f_gnat_ret \
-   DECL_STRUCT_FUNCTION (current_function_decl)->language->gnat_ret
- 
- /* A structure used to gather together information about a statement group.
-    We use this to gather related statements, for example the "then" part
-    of a IF.  In the case where it represents a lexical scope, we may also
-    have a BLOCK node corresponding to it and/or cleanups.  */
- 
- struct GTY((chain_next ("%h.previous"))) stmt_group {
-   struct stmt_group *previous;	/* Previous code group.  */
-   tree stmt_list;		/* List of statements for this code group.  */
-   tree block;			/* BLOCK for this code group, if any.  */
-   tree cleanups;		/* Cleanups for this code group, if any.  */
- };
- 
- static GTY(()) struct stmt_group *current_stmt_group;
- 
- /* List of unused struct stmt_group nodes.  */
- static GTY((deletable)) struct stmt_group *stmt_group_free_list;
- 
- /* A structure used to record information on elaboration procedures
-    we've made and need to process.
- 
-    ??? gnat_node should be Node_Id, but gengtype gets confused.  */
- 
- struct GTY((chain_next ("%h.next"))) elab_info {
-   struct elab_info *next;	/* Pointer to next in chain.  */
-   tree elab_proc;		/* Elaboration procedure.  */
-   int gnat_node;		/* The N_Compilation_Unit.  */
- };
- 
- static GTY(()) struct elab_info *elab_info_list;
- 
- /* Stack of exception pointer variables.  Each entry is the VAR_DECL
-    that stores the address of the raised exception.  Nonzero means we
-    are in an exception handler.  Not used in the zero-cost case.  */
- static GTY(()) vec<tree, va_gc> *gnu_except_ptr_stack;
- 
- /* In ZCX case, current exception pointer.  Used to re-raise it.  */
- static GTY(()) tree gnu_incoming_exc_ptr;
- 
- /* Stack for storing the current elaboration procedure decl.  */
- static GTY(()) vec<tree, va_gc> *gnu_elab_proc_stack;
- 
- /* Stack of labels to be used as a goto target instead of a return in
-    some functions.  See processing for N_Subprogram_Body.  */
- static GTY(()) vec<tree, va_gc> *gnu_return_label_stack;
- 
- /* Stack of variable for the return value of a function with copy-in/copy-out
-    parameters.  See processing for N_Subprogram_Body.  */
- static GTY(()) vec<tree, va_gc> *gnu_return_var_stack;
- 
- /* Structure used to record information for a range check.  */
- struct GTY(()) range_check_info_d {
-   tree low_bound;
-   tree high_bound;
-   tree disp;
-   bool neg_p;
-   tree type;
-   tree invariant_cond;
-   tree inserted_cond;
- };
- 
- typedef struct range_check_info_d *range_check_info;
- 
- 
- /* Structure used to record information for a loop.  */
- struct GTY(()) loop_info_d {
-   tree stmt;
-   tree loop_var;
-   tree low_bound;
-   tree high_bound;
-   tree omp_loop_clauses;
-   tree omp_construct_clauses;
-   enum tree_code omp_code;
-   vec<range_check_info, va_gc> *checks;
- };
- 
- typedef struct loop_info_d *loop_info;
- 
- 
- /* Stack of loop_info structures associated with LOOP_STMT nodes.  */
- static GTY(()) vec<loop_info, va_gc> *gnu_loop_stack;
- 
- /* The stacks for N_{Push,Pop}_*_Label.  */
- static vec<Entity_Id> gnu_constraint_error_label_stack;
- static vec<Entity_Id> gnu_storage_error_label_stack;
- static vec<Entity_Id> gnu_program_error_label_stack;
- 
- /* Map GNAT tree codes to GCC tree codes for simple expressions.  */
- static enum tree_code gnu_codes[Number_Node_Kinds];
- 
- static void init_code_table (void);
- static tree get_elaboration_procedure (void);
- static void Compilation_Unit_to_gnu (Node_Id);
- static bool empty_stmt_list_p (tree);
- static void record_code_position (Node_Id);
- static void insert_code_for (Node_Id);
- static void add_cleanup (tree, Node_Id);
- static void add_stmt_list (List_Id);
- static tree build_stmt_group (List_Id, bool);
- static inline bool stmt_group_may_fallthru (void);
- static enum gimplify_status gnat_gimplify_stmt (tree *);
- static void elaborate_all_entities (Node_Id);
- static void process_freeze_entity (Node_Id);
- static void process_decls (List_Id, List_Id, Node_Id, bool, bool);
- 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 tree assoc_to_constructor (Entity_Id, Node_Id, tree);
- static tree pos_to_constructor (Node_Id, tree);
- static void validate_unchecked_conversion (Node_Id);
- static void set_expr_location_from_node (tree, Node_Id, bool = false);
- static void set_gnu_expr_location_from_node (tree, Node_Id);
- static bool set_end_locus_from_node (tree, Node_Id);
- static int lvalue_required_p (Node_Id, tree, bool, bool);
- static tree build_raise_check (int, enum exception_info_kind);
- static tree create_init_temporary (const char *, tree, tree *, Node_Id);
- static bool maybe_make_gnu_thunk (Entity_Id gnat_thunk, tree gnu_thunk);
- 
- /* This makes gigi's file_info_ptr visible in this translation unit,
-    so that Sloc_to_locus can look it up when deciding whether to map
-    decls to instances.  */
- 
- static struct File_Info_Type *file_map;
- 
- /* Return the string of the identifier allocated for the file name Id.  */
- 
- static const char*
- File_Name_to_gnu (Name_Id Id)
- {
-   /* __gnat_to_canonical_file_spec translates file names from pragmas
-      Source_Reference that contain host style syntax not understood by GDB.  */
-   const char *name = __gnat_to_canonical_file_spec (Get_Name_String (Id));
- 
-   /* Use the identifier table to make a permanent copy of the file name as
-      the name table gets reallocated after Gigi returns but before all the
-      debugging information is output.  */
-   return IDENTIFIER_POINTER (get_identifier (name));
- }
- 
- /* This is the main program of the back-end.  It sets up all the table
-    structures and then generates code.  */
- 
- void
- gigi (Node_Id gnat_root,
-       int max_gnat_node,
-       int number_name ATTRIBUTE_UNUSED,
-       struct Node *nodes_ptr,
-       struct Flags *flags_ptr,
-       Node_Id *next_node_ptr,
-       Node_Id *prev_node_ptr,
-       struct Elist_Header *elists_ptr,
-       struct Elmt_Item *elmts_ptr,
-       struct String_Entry *strings_ptr,
-       Char_Code *string_chars_ptr,
-       struct List_Header *list_headers_ptr,
-       Nat number_file,
-       struct File_Info_Type *file_info_ptr,
-       Entity_Id standard_boolean,
-       Entity_Id standard_integer,
-       Entity_Id standard_character,
-       Entity_Id standard_long_long_float,
-       Entity_Id standard_exception_type,
-       Int gigi_operating_mode)
- {
-   Node_Id gnat_iter;
-   Entity_Id gnat_literal;
-   tree t, ftype, int64_type;
-   struct elab_info *info;
-   int i;
- 
-   max_gnat_nodes = max_gnat_node;
- 
-   Nodes_Ptr = nodes_ptr;
-   Flags_Ptr = flags_ptr;
-   Next_Node_Ptr = next_node_ptr;
-   Prev_Node_Ptr = prev_node_ptr;
-   Elists_Ptr = elists_ptr;
-   Elmts_Ptr = elmts_ptr;
-   Strings_Ptr = strings_ptr;
-   String_Chars_Ptr = string_chars_ptr;
-   List_Headers_Ptr = list_headers_ptr;
- 
-   type_annotate_only = (gigi_operating_mode == 1);
- 
-   if (Generate_SCO_Instance_Table != 0)
-     {
-       file_map = file_info_ptr;
-       maybe_create_decl_to_instance_map (number_file);
-     }
- 
-   for (i = 0; i < number_file; i++)
-     {
-       /* We rely on the order isomorphism between files and line maps.  */
-       if ((int) LINEMAPS_ORDINARY_USED (line_table) != i)
- 	{
- 	  gcc_assert (i > 0);
- 	  error ("%s contains too many lines",
- 		 File_Name_to_gnu (file_info_ptr[i - 1].File_Name));
- 	}
- 
-       /* We create the line map for a source file at once, with a fixed number
- 	 of columns chosen to avoid jumping over the next power of 2.  */
-       linemap_add (line_table, LC_ENTER, 0,
- 		   File_Name_to_gnu (file_info_ptr[i].File_Name), 1);
-       linemap_line_start (line_table, file_info_ptr[i].Num_Source_Lines, 252);
-       linemap_position_for_column (line_table, 252 - 1);
-       linemap_add (line_table, LC_LEAVE, 0, NULL, 0);
-     }
- 
-   gcc_assert (Nkind (gnat_root) == N_Compilation_Unit);
- 
-   /* Declare the name of the compilation unit as the first global
-      name in order to make the middle-end fully deterministic.  */
-   t = create_concat_name (Defining_Entity (Unit (gnat_root)), NULL);
-   first_global_object_name = ggc_strdup (IDENTIFIER_POINTER (t));
- 
-   /* Initialize ourselves.  */
-   init_code_table ();
-   init_gnat_decl ();
-   init_gnat_utils ();
- 
-   /* If we are just annotating types, give VOID_TYPE zero sizes to avoid
-      errors.  */
-   if (type_annotate_only)
-     {
-       TYPE_SIZE (void_type_node) = bitsize_zero_node;
-       TYPE_SIZE_UNIT (void_type_node) = size_zero_node;
-     }
- 
-   /* Enable GNAT stack checking method if needed */
-   if (!Stack_Check_Probes_On_Target)
-     set_stack_check_libfunc ("_gnat_stack_check");
- 
-   /* Retrieve alignment settings.  */
-   double_float_alignment = get_target_double_float_alignment ();
-   double_scalar_alignment = get_target_double_scalar_alignment ();
- 
-   /* Record the builtin types.  Define `integer' and `character' first so that
-      dbx will output them first.  */
-   record_builtin_type ("integer", integer_type_node, false);
-   record_builtin_type ("character", char_type_node, false);
-   record_builtin_type ("boolean", boolean_type_node, false);
-   record_builtin_type ("void", void_type_node, false);
- 
-   /* Save the type we made for integer as the type for Standard.Integer.  */
-   save_gnu_tree (Base_Type (standard_integer),
- 		 TYPE_NAME (integer_type_node),
- 		 false);
- 
-   /* Likewise for character as the type for Standard.Character.  */
-   finish_character_type (char_type_node);
-   save_gnu_tree (Base_Type (standard_character),
- 		 TYPE_NAME (char_type_node),
- 		 false);
- 
-   /* Likewise for boolean as the type for Standard.Boolean.  */
-   save_gnu_tree (Base_Type (standard_boolean),
- 		 TYPE_NAME (boolean_type_node),
- 		 false);
-   gnat_literal = First_Literal (Base_Type (standard_boolean));
-   t = UI_To_gnu (Enumeration_Rep (gnat_literal), boolean_type_node);
-   gcc_assert (t == boolean_false_node);
-   t = create_var_decl (get_entity_name (gnat_literal), NULL_TREE,
- 		       boolean_type_node, t, true, false, false, false, false,
- 		       true, false, NULL, gnat_literal);
-   save_gnu_tree (gnat_literal, t, false);
-   gnat_literal = Next_Literal (gnat_literal);
-   t = UI_To_gnu (Enumeration_Rep (gnat_literal), boolean_type_node);
-   gcc_assert (t == boolean_true_node);
-   t = create_var_decl (get_entity_name (gnat_literal), NULL_TREE,
- 		       boolean_type_node, t, true, false, false, false, false,
- 		       true, false, NULL, gnat_literal);
-   save_gnu_tree (gnat_literal, t, false);
- 
-   /* Declare the building blocks of function nodes.  */
-   void_list_node = build_tree_list (NULL_TREE, void_type_node);
-   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
-   ptr_void_ftype = build_pointer_type (void_ftype);
- 
-   /* Now declare run-time functions.  */
-   malloc_decl
-     = create_subprog_decl (get_identifier ("__gnat_malloc"), NULL_TREE,
- 			   build_function_type_list (ptr_type_node, sizetype,
- 						     NULL_TREE),
- 			   NULL_TREE, is_default, true, true, true, false,
- 			   false, NULL, Empty);
-   DECL_IS_MALLOC (malloc_decl) = 1;
- 
-   free_decl
-     = create_subprog_decl (get_identifier ("__gnat_free"), NULL_TREE,
- 			   build_function_type_list (void_type_node,
- 						     ptr_type_node, NULL_TREE),
- 			   NULL_TREE, is_default, true, true, true, false,
- 			   false, NULL, Empty);
- 
-   realloc_decl
-     = create_subprog_decl (get_identifier ("__gnat_realloc"), NULL_TREE,
- 			   build_function_type_list (ptr_type_node,
- 						     ptr_type_node, sizetype,
- 						     NULL_TREE),
- 			   NULL_TREE, is_default, true, true, true, false,
- 			   false, NULL, Empty);
- 
-   /* This is used for 64-bit multiplication with overflow checking.  */
-   int64_type = gnat_type_for_size (64, 0);
-   mulv64_decl
-     = create_subprog_decl (get_identifier ("__gnat_mulv64"), NULL_TREE,
- 			   build_function_type_list (int64_type, int64_type,
- 						     int64_type, NULL_TREE),
- 			   NULL_TREE, is_default, true, true, true, false,
- 			   false, NULL, Empty);
- 
-   if (Enable_128bit_Types)
-     {
-       tree int128_type = gnat_type_for_size (128, 0);
-       mulv128_decl
- 	= create_subprog_decl (get_identifier ("__gnat_mulv128"), NULL_TREE,
- 			       build_function_type_list (int128_type,
- 							 int128_type,
- 							 int128_type,
- 							 NULL_TREE),
- 			       NULL_TREE, is_default, true, true, true, false,
- 			       false, NULL, Empty);
-     }
- 
-   /* Name of the _Parent field in tagged record types.  */
-   parent_name_id = get_identifier (Get_Name_String (Name_uParent));
- 
-   /* Name of the Exception_Data type defined in System.Standard_Library.  */
-   exception_data_name_id
-     = get_identifier ("system__standard_library__exception_data");
- 
-   /* Make the types and functions used for exception processing.  */
-   except_type_node = gnat_to_gnu_type (Base_Type (standard_exception_type));
- 
-   jmpbuf_type
-     = build_array_type (gnat_type_for_mode (Pmode, 0),
- 			build_index_type (size_int (5)));
-   record_builtin_type ("JMPBUF_T", jmpbuf_type, true);
-   jmpbuf_ptr_type = build_pointer_type (jmpbuf_type);
- 
-   /* Functions to get and set the jumpbuf pointer for the current thread.  */
-   get_jmpbuf_decl
-     = create_subprog_decl
-       (get_identifier ("system__soft_links__get_jmpbuf_address_soft"),
-        NULL_TREE, build_function_type_list (jmpbuf_ptr_type, NULL_TREE),
-        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
- 
-   set_jmpbuf_decl
-     = create_subprog_decl
-       (get_identifier ("system__soft_links__set_jmpbuf_address_soft"),
-        NULL_TREE, build_function_type_list (void_type_node, jmpbuf_ptr_type,
- 					    NULL_TREE),
-        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
- 
-   get_excptr_decl
-     = create_subprog_decl
-       (get_identifier ("system__soft_links__get_gnat_exception"), NULL_TREE,
-        build_function_type_list (build_pointer_type (except_type_node),
- 				 NULL_TREE),
-        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
- 
-   not_handled_by_others_decl = get_identifier ("not_handled_by_others");
-   for (t = TYPE_FIELDS (except_type_node); t; t = DECL_CHAIN (t))
-     if (DECL_NAME (t) == not_handled_by_others_decl)
-       {
- 	not_handled_by_others_decl = t;
- 	break;
-       }
-   gcc_assert (DECL_P (not_handled_by_others_decl));
- 
-   /* setjmp returns an integer and has one operand, which is a pointer to
-      a jmpbuf.  */
-   setjmp_decl
-     = create_subprog_decl
-       (get_identifier ("__builtin_setjmp"), NULL_TREE,
-        build_function_type_list (integer_type_node, jmpbuf_ptr_type,
- 				 NULL_TREE),
-        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
-   set_decl_built_in_function (setjmp_decl, BUILT_IN_NORMAL, BUILT_IN_SETJMP);
- 
-   /* update_setjmp_buf updates a setjmp buffer from the current stack pointer
-      address.  */
-   update_setjmp_buf_decl
-     = create_subprog_decl
-       (get_identifier ("__builtin_update_setjmp_buf"), NULL_TREE,
-        build_function_type_list (void_type_node, jmpbuf_ptr_type, NULL_TREE),
-        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
-   set_decl_built_in_function (update_setjmp_buf_decl, BUILT_IN_NORMAL,
- 			      BUILT_IN_UPDATE_SETJMP_BUF);
- 
-   /* Indicate that it never returns.  */
-   ftype = build_function_type_list (void_type_node,
- 				    build_pointer_type (except_type_node),
- 				    NULL_TREE);
-   ftype = build_qualified_type (ftype, TYPE_QUAL_VOLATILE);
-   raise_nodefer_decl
-     = create_subprog_decl
-       (get_identifier ("__gnat_raise_nodefer_with_msg"), NULL_TREE, ftype,
-        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
- 
-   set_exception_parameter_decl
-     = create_subprog_decl
-       (get_identifier ("__gnat_set_exception_parameter"), NULL_TREE,
-        build_function_type_list (void_type_node, ptr_type_node, ptr_type_node,
- 				 NULL_TREE),
-        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
- 
-   /* Hooks to call when entering/leaving an exception handler.  */
-   ftype = build_function_type_list (ptr_type_node,
- 				    ptr_type_node, NULL_TREE);
-   begin_handler_decl
-     = create_subprog_decl (get_identifier ("__gnat_begin_handler_v1"),
- 			   NULL_TREE, ftype, NULL_TREE,
- 			   is_default, true, true, true, false, false, NULL,
- 			   Empty);
-   /* __gnat_begin_handler_v1 is not a dummy procedure, but we arrange
-      for it not to throw.  */
-   TREE_NOTHROW (begin_handler_decl) = 1;
- 
-   ftype = build_function_type_list (ptr_type_node,
- 				    ptr_type_node, ptr_type_node,
- 				    ptr_type_node, NULL_TREE);
-   end_handler_decl
-     = create_subprog_decl (get_identifier ("__gnat_end_handler_v1"), NULL_TREE,
- 			   ftype, NULL_TREE,
- 			   is_default, true, true, true, false, false, NULL,
- 			   Empty);
- 
-   ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
-   unhandled_except_decl
-     = create_subprog_decl (get_identifier ("__gnat_unhandled_except_handler"),
- 			   NULL_TREE, ftype, NULL_TREE,
- 			   is_default, true, true, true, false, false, NULL,
- 			   Empty);
- 
-   /* Indicate that it never returns.  */
-   ftype = build_qualified_type (ftype, TYPE_QUAL_VOLATILE);
-   reraise_zcx_decl
-     = create_subprog_decl (get_identifier ("__gnat_reraise_zcx"), NULL_TREE,
- 			   ftype, NULL_TREE,
- 			   is_default, true, true, true, false, false, NULL,
- 			   Empty);
- 
-   /* Dummy objects to materialize "others" and "all others" in the exception
-      tables.  These are exported by a-exexpr-gcc.adb, so see this unit for
-      the types to use.  */
-   others_decl
-     = create_var_decl (get_identifier ("OTHERS"),
- 		       get_identifier ("__gnat_others_value"),
- 		       char_type_node, NULL_TREE,
- 		       true, false, true, false, false, true, false,
- 		       NULL, Empty);
- 
-   all_others_decl
-     = create_var_decl (get_identifier ("ALL_OTHERS"),
- 		       get_identifier ("__gnat_all_others_value"),
- 		       char_type_node, NULL_TREE,
- 		       true, false, true, false, false, true, false,
- 		       NULL, Empty);
- 
-   unhandled_others_decl
-     = create_var_decl (get_identifier ("UNHANDLED_OTHERS"),
- 		       get_identifier ("__gnat_unhandled_others_value"),
- 		       char_type_node, NULL_TREE,
- 		       true, false, true, false, false, true, false,
- 		       NULL, Empty);
- 
-   /* If in no exception handlers mode, all raise statements are redirected to
-      __gnat_last_chance_handler.  No need to redefine raise_nodefer_decl since
-      this procedure will never be called in this mode.  */
-   if (No_Exception_Handlers_Set ())
-     {
-       /* Indicate that it never returns.  */
-       ftype = build_function_type_list (void_type_node,
- 					build_pointer_type (char_type_node),
- 					integer_type_node, NULL_TREE);
-       ftype = build_qualified_type (ftype, TYPE_QUAL_VOLATILE);
-       tree decl
- 	= create_subprog_decl
- 	  (get_identifier ("__gnat_last_chance_handler"), NULL_TREE, ftype,
- 	   NULL_TREE, is_default, true, true, true, false, false, NULL,
- 	   Empty);
-       for (i = 0; i < (int) ARRAY_SIZE (gnat_raise_decls); i++)
- 	gnat_raise_decls[i] = decl;
-     }
-   else
-     {
-       /* Otherwise, make one decl for each exception reason.  */
-       for (i = 0; i < (int) ARRAY_SIZE (gnat_raise_decls); i++)
- 	gnat_raise_decls[i] = build_raise_check (i, exception_simple);
-       for (i = 0; i < (int) ARRAY_SIZE (gnat_raise_decls_ext); i++)
- 	gnat_raise_decls_ext[i]
- 	  = build_raise_check (i,
- 			       i == CE_Index_Check_Failed
- 			       || i == CE_Range_Check_Failed
- 			       || i == CE_Invalid_Data
- 			       ? exception_range : exception_column);
-     }
- 
-   /* Build the special descriptor type and its null node if needed.  */
-   if (TARGET_VTABLE_USES_DESCRIPTORS)
-     {
-       tree null_node = fold_convert (ptr_void_ftype, null_pointer_node);
-       tree field_list = NULL_TREE;
-       int j;
-       vec<constructor_elt, va_gc> *null_vec = NULL;
-       constructor_elt *elt;
- 
-       fdesc_type_node = make_node (RECORD_TYPE);
-       vec_safe_grow (null_vec, TARGET_VTABLE_USES_DESCRIPTORS, true);
-       elt = (null_vec->address () + TARGET_VTABLE_USES_DESCRIPTORS - 1);
- 
-       for (j = 0; j < TARGET_VTABLE_USES_DESCRIPTORS; j++)
- 	{
- 	  tree field
- 	    = create_field_decl (NULL_TREE, ptr_void_ftype, fdesc_type_node,
- 				 NULL_TREE, NULL_TREE, 0, 1);
- 	  DECL_CHAIN (field) = field_list;
- 	  field_list = field;
- 	  elt->index = field;
- 	  elt->value = null_node;
- 	  elt--;
- 	}
- 
-       finish_record_type (fdesc_type_node, nreverse (field_list), 0, false);
-       record_builtin_type ("descriptor", fdesc_type_node, true);
-       null_fdesc_node = gnat_build_constructor (fdesc_type_node, null_vec);
-     }
- 
-   longest_float_type_node
-     = get_unpadded_type (Base_Type (standard_long_long_float));
- 
-   main_identifier_node = get_identifier ("main");
- 
-   /* If we are using the GCC exception mechanism, let GCC know.  */
-   if (Back_End_Exceptions ())
-     gnat_init_gcc_eh ();
- 
-   /* Initialize the GCC support for FP operations.  */
-   gnat_init_gcc_fp ();
- 
-   /* Install the builtins we might need, either internally or as user-available
-      facilities for Intrinsic imports.  Note that this must be done after the
-      GCC exception mechanism is initialized.  */
-   gnat_install_builtins ();
- 
-   vec_safe_push (gnu_except_ptr_stack, NULL_TREE);
- 
-   gnu_constraint_error_label_stack.safe_push (Empty);
-   gnu_storage_error_label_stack.safe_push (Empty);
-   gnu_program_error_label_stack.safe_push (Empty);
- 
-   /* Process any Pragma Ident for the main unit.  */
-   if (Present (Ident_String (Main_Unit)))
-     targetm.asm_out.output_ident
-       (TREE_STRING_POINTER (gnat_to_gnu (Ident_String (Main_Unit))));
- 
-   /* Force -fno-strict-aliasing if the configuration pragma was seen.  */
-   if (No_Strict_Aliasing_CP)
-     flag_strict_aliasing = 0;
- 
-   /* Save the current optimization options again after the above possible
-      global_options changes.  */
-   optimization_default_node
-     = build_optimization_node (&global_options, &global_options_set);
-   optimization_current_node = optimization_default_node;
- 
-   /* Now translate the compilation unit proper.  */
-   Compilation_Unit_to_gnu (gnat_root);
- 
-   /* Then process the N_Validate_Unchecked_Conversion nodes.  We do this at
-      the very end to avoid having to second-guess the front-end when we run
-      into dummy nodes during the regular processing.  */
-   for (i = 0; gnat_validate_uc_list.iterate (i, &gnat_iter); i++)
-     validate_unchecked_conversion (gnat_iter);
-   gnat_validate_uc_list.release ();
- 
-   /* Finally see if we have any elaboration procedures to deal with.  */
-   for (info = elab_info_list; info; info = info->next)
-     {
-       tree gnu_body = DECL_SAVED_TREE (info->elab_proc);
- 
-       /* We should have a BIND_EXPR but it may not have any statements in it.
- 	 If it doesn't have any, we have nothing to do except for setting the
- 	 flag on the GNAT node.  Otherwise, process the function as others.  */
-       tree gnu_stmts = gnu_body;
-       if (TREE_CODE (gnu_stmts) == BIND_EXPR)
- 	gnu_stmts = BIND_EXPR_BODY (gnu_stmts);
-       if (!gnu_stmts || empty_stmt_list_p (gnu_stmts))
- 	Set_Has_No_Elaboration_Code (info->gnat_node, 1);
-       else
- 	{
- 	  begin_subprog_body (info->elab_proc);
- 	  end_subprog_body (gnu_body);
- 	  rest_of_subprog_body_compilation (info->elab_proc);
- 	}
-     }
- 
-   /* Destroy ourselves.  */
-   file_map = NULL;
-   destroy_gnat_decl ();
-   destroy_gnat_utils ();
- 
-   /* We cannot track the location of errors past this point.  */
-   Current_Error_Node = Empty;
- }
- 
- /* Return a subprogram decl corresponding to __gnat_rcheck_xx for the given
-    CHECK if KIND is EXCEPTION_SIMPLE, or else to __gnat_rcheck_xx_ext.  */
- 
- static tree
- build_raise_check (int check, enum exception_info_kind kind)
- {
-   tree result, ftype;
-   const char pfx[] = "__gnat_rcheck_";
- 
-   strcpy (Name_Buffer, pfx);
-   Name_Len = sizeof (pfx) - 1;
-   Get_RT_Exception_Name (check);
- 
-   if (kind == exception_simple)
-     {
-       Name_Buffer[Name_Len] = 0;
-       ftype
- 	= build_function_type_list (void_type_node,
- 				    build_pointer_type (char_type_node),
- 				    integer_type_node, NULL_TREE);
-     }
-   else
-     {
-       tree t = (kind == exception_column ? NULL_TREE : integer_type_node);
- 
-       strcpy (Name_Buffer + Name_Len, "_ext");
-       Name_Buffer[Name_Len + 4] = 0;
-       ftype
- 	= build_function_type_list (void_type_node,
- 				    build_pointer_type (char_type_node),
- 				    integer_type_node, integer_type_node,
- 				    t, t, NULL_TREE);
-     }
- 
-   /* Indicate that it never returns.  */
-   ftype = build_qualified_type (ftype, TYPE_QUAL_VOLATILE);
-   result
-     = create_subprog_decl (get_identifier (Name_Buffer), NULL_TREE, ftype,
- 			   NULL_TREE, is_default, true, true, true, false,
- 			   false, NULL, Empty);
- 
-   return result;
- }
- 
- /* Return a positive value if an lvalue is required for GNAT_NODE, which is
-    an N_Attribute_Reference.  */
- 
- static int
- lvalue_required_for_attribute_p (Node_Id gnat_node)
- {
-   switch (Get_Attribute_Id (Attribute_Name (gnat_node)))
-     {
-     case Attr_Pred:
-     case Attr_Succ:
-     case Attr_First:
-     case Attr_Last:
-     case Attr_Range_Length:
-     case Attr_Length:
-     case Attr_Object_Size:
-     case Attr_Size:
-     case Attr_Value_Size:
-     case Attr_Component_Size:
-     case Attr_Descriptor_Size:
-     case Attr_Max_Size_In_Storage_Elements:
-     case Attr_Min:
-     case Attr_Max:
-     case Attr_Null_Parameter:
-     case Attr_Passed_By_Reference:
-     case Attr_Mechanism_Code:
-     case Attr_Machine:
-     case Attr_Model:
-       return 0;
- 
-     case Attr_Address:
-     case Attr_Access:
-     case Attr_Unchecked_Access:
-     case Attr_Unrestricted_Access:
-     case Attr_Code_Address:
-     case Attr_Pool_Address:
-     case Attr_Alignment:
-     case Attr_Bit_Position:
-     case Attr_Position:
-     case Attr_First_Bit:
-     case Attr_Last_Bit:
-     case Attr_Bit:
-     case Attr_Asm_Input:
-     case Attr_Asm_Output:
-     default:
-       return 1;
-     }
- }
- 
- /* Return a positive value if an lvalue is required for GNAT_NODE.  GNU_TYPE
-    is the type that will be used for GNAT_NODE in the translated GNU tree.
-    CONSTANT indicates whether the underlying object represented by GNAT_NODE
-    is constant in the Ada sense.  If it is, ADDRESS_OF_CONSTANT indicates
-    whether its value is the address of another constant.  If it isn't, then
-    ADDRESS_OF_CONSTANT is ignored.
- 
-    The function climbs up the GNAT tree starting from the node and returns 1
-    upon encountering a node that effectively requires an lvalue downstream.
-    It returns int instead of bool to facilitate usage in non-purely binary
-    logic contexts.  */
- 
- static int
- lvalue_required_p (Node_Id gnat_node, tree gnu_type, bool constant,
- 		   bool address_of_constant)
- {
-   Node_Id gnat_parent = Parent (gnat_node), gnat_temp;
- 
-   switch (Nkind (gnat_parent))
-     {
-     case N_Reference:
-       return 1;
- 
-     case N_Attribute_Reference:
-       return lvalue_required_for_attribute_p (gnat_parent);
- 
-     case N_Parameter_Association:
-     case N_Function_Call:
-     case N_Procedure_Call_Statement:
-       /* If the parameter is by reference, an lvalue is required.  */
-       return (!constant
- 	      || must_pass_by_ref (gnu_type)
- 	      || default_pass_by_ref (gnu_type));
- 
-     case N_Indexed_Component:
-       /* Only the array expression can require an lvalue.  */
-       if (Prefix (gnat_parent) != gnat_node)
- 	return 0;
- 
-       /* ??? Consider that referencing an indexed component with a variable
- 	 index forces the whole aggregate to memory.  Note that testing only
- 	 for literals is conservative, any static expression in the RM sense
- 	 could probably be accepted with some additional work.  */
-       for (gnat_temp = First (Expressions (gnat_parent));
- 	   Present (gnat_temp);
- 	   gnat_temp = Next (gnat_temp))
- 	if (Nkind (gnat_temp) != N_Character_Literal
- 	    && Nkind (gnat_temp) != N_Integer_Literal
- 	    && !(Is_Entity_Name (gnat_temp)
- 		 && Ekind (Entity (gnat_temp)) == E_Enumeration_Literal))
- 	  return 1;
- 
-       /* ... fall through ... */
- 
-     case N_Selected_Component:
-     case N_Slice:
-       /* Only the prefix expression can require an lvalue.  */
-       if (Prefix (gnat_parent) != gnat_node)
- 	return 0;
- 
-       return lvalue_required_p (gnat_parent,
- 				get_unpadded_type (Etype (gnat_parent)),
- 				constant, address_of_constant);
- 
-     case N_Object_Renaming_Declaration:
-       /* We need to preserve addresses through a renaming.  */
-       return 1;
- 
-     case N_Object_Declaration:
-       /* We cannot use a constructor if this is an atomic object because
- 	 the actual assignment might end up being done component-wise.  */
-       return (!constant
- 	      ||(Is_Composite_Type (Underlying_Type (Etype (gnat_node)))
- 		 && Is_Full_Access (Defining_Entity (gnat_parent)))
- 	      /* We don't use a constructor if this is a class-wide object
- 		 because the effective type of the object is the equivalent
- 		 type of the class-wide subtype and it smashes most of the
- 		 data into an array of bytes to which we cannot convert.  */
- 	      || Ekind ((Etype (Defining_Entity (gnat_parent))))
- 		 == E_Class_Wide_Subtype);
- 
-     case N_Assignment_Statement:
-       /* We cannot use a constructor if the LHS is an atomic object because
- 	 the actual assignment might end up being done component-wise.  */
-       return (!constant
- 	      || Name (gnat_parent) == gnat_node
- 	      || (Is_Composite_Type (Underlying_Type (Etype (gnat_node)))
- 		  && Is_Entity_Name (Name (gnat_parent))
- 		  && Is_Full_Access (Entity (Name (gnat_parent)))));
- 
-     case N_Unchecked_Type_Conversion:
- 	if (!constant)
- 	  return 1;
- 
-       /* ... fall through ... */
- 
-     case N_Type_Conversion:
-     case N_Qualified_Expression:
-       /* We must look through all conversions because we may need to bypass
- 	 an intermediate conversion that is meant to be purely formal.  */
-      return lvalue_required_p (gnat_parent,
- 			       get_unpadded_type (Etype (gnat_parent)),
- 			       constant, address_of_constant);
- 
-    case N_Explicit_Dereference:
-       /* We look through dereferences for address of constant because we need
- 	 to handle the special cases listed above.  */
-       if (constant && address_of_constant)
- 	return lvalue_required_p (gnat_parent,
- 				  get_unpadded_type (Etype (gnat_parent)),
- 				  true, false);
- 
-       /* ... fall through ... */
- 
-     default:
-       return 0;
-     }
- 
-   gcc_unreachable ();
- }
- 
- /* Return true if an lvalue should be used for GNAT_NODE.  GNU_TYPE is the type
-    that will be used for GNAT_NODE in the translated GNU tree and is assumed to
-    be an aggregate type.
- 
-    The function climbs up the GNAT tree starting from the node and returns true
-    upon encountering a node that makes it doable to decide.  lvalue_required_p
-    should have been previously invoked on the arguments and returned false.  */
- 
- static bool
- lvalue_for_aggregate_p (Node_Id gnat_node, tree gnu_type)
- {
-   Node_Id gnat_parent = Parent (gnat_node);
- 
-   switch (Nkind (gnat_parent))
-     {
-     case N_Parameter_Association:
-     case N_Function_Call:
-     case N_Procedure_Call_Statement:
-       /* Even if the parameter is by copy, prefer an lvalue.  */
-       return true;
- 
-     case N_Simple_Return_Statement:
-       /* Likewise for a return value.  */
-       return true;
- 
-     case N_Indexed_Component:
-     case N_Selected_Component:
-       /* If an elementary component is used, take it from the constant.  */
-       if (!Is_Composite_Type (Underlying_Type (Etype (gnat_parent))))
- 	return false;
- 
-       /* ... fall through ... */
- 
-     case N_Slice:
-       return lvalue_for_aggregate_p (gnat_parent,
- 				     get_unpadded_type (Etype (gnat_parent)));
- 
-     case N_Object_Declaration:
-       /* For an aggregate object declaration, return false consistently.  */
-       return false;
- 
-     case N_Assignment_Statement:
-       /* For an aggregate assignment, decide based on the size.  */
-       {
- 	const HOST_WIDE_INT size = int_size_in_bytes (gnu_type);
- 	return size < 0 || size >= param_large_stack_frame / 4;
-       }
- 
-     case N_Unchecked_Type_Conversion:
-     case N_Type_Conversion:
-     case N_Qualified_Expression:
-       return lvalue_for_aggregate_p (gnat_parent,
- 				     get_unpadded_type (Etype (gnat_parent)));
- 
-     case N_Allocator:
-       /* We should only reach here through the N_Qualified_Expression case.
- 	 Force an lvalue for aggregate types since a block-copy to the newly
- 	 allocated area of memory is made.  */
-       return true;
- 
-     default:
-       return false;
-     }
- 
-   gcc_unreachable ();
- }
- 
- 
- /* Return true if T is a constant DECL node that can be safely replaced
-    by its initializer.  */
- 
- static bool
- constant_decl_with_initializer_p (tree t)
- {
-   if (!TREE_CONSTANT (t) || !DECL_P (t) || !DECL_INITIAL (t))
-     return false;
- 
-   /* Return false for aggregate types that contain a placeholder since
-      their initializers cannot be manipulated easily.  */
-   if (AGGREGATE_TYPE_P (TREE_TYPE (t))
-       && !TYPE_IS_FAT_POINTER_P (TREE_TYPE (t))
-       && type_contains_placeholder_p (TREE_TYPE (t)))
-     return false;
- 
-   return true;
- }
- 
- /* Return an expression equivalent to EXP but where constant DECL nodes
-    have been replaced by their initializer.  */
- 
- static tree
- fold_constant_decl_in_expr (tree exp)
- {
-   enum tree_code code = TREE_CODE (exp);
-   tree op0;
- 
-   switch (code)
-     {
-     case CONST_DECL:
-     case VAR_DECL:
-       if (!constant_decl_with_initializer_p (exp))
- 	return exp;
- 
-       return DECL_INITIAL (exp);
- 
-     case COMPONENT_REF:
-       op0 = fold_constant_decl_in_expr (TREE_OPERAND (exp, 0));
-       if (op0 == TREE_OPERAND (exp, 0))
- 	return exp;
- 
-       return fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0,
- 			  TREE_OPERAND (exp, 1), NULL_TREE);
- 
-     case BIT_FIELD_REF:
-       op0 = fold_constant_decl_in_expr (TREE_OPERAND (exp, 0));
-       if (op0 == TREE_OPERAND (exp, 0))
- 	return exp;
- 
-       return fold_build3 (BIT_FIELD_REF, TREE_TYPE (exp), op0,
- 			  TREE_OPERAND (exp, 1), TREE_OPERAND (exp, 2));
- 
-     case ARRAY_REF:
-     case ARRAY_RANGE_REF:
-       /* If the index is not itself constant, then nothing can be folded.  */
-       if (!TREE_CONSTANT (TREE_OPERAND (exp, 1)))
- 	return exp;
-       op0 = fold_constant_decl_in_expr (TREE_OPERAND (exp, 0));
-       if (op0 == TREE_OPERAND (exp, 0))
- 	return exp;
- 
-       return fold (build4 (code, TREE_TYPE (exp), op0, TREE_OPERAND (exp, 1),
- 			   TREE_OPERAND (exp, 2), NULL_TREE));
- 
-     case REALPART_EXPR:
-     case IMAGPART_EXPR:
-     case VIEW_CONVERT_EXPR:
-       op0 = fold_constant_decl_in_expr (TREE_OPERAND (exp, 0));
-       if (op0 == TREE_OPERAND (exp, 0))
- 	return exp;
- 
-       return fold_build1 (code, TREE_TYPE (exp), op0);
- 
-     default:
-       return exp;
-     }
- 
-   gcc_unreachable ();
- }
- 
- /* Return true if TYPE and DEF_TYPE are compatible GNAT types for Gigi.  */
- 
- static bool
- Gigi_Types_Compatible (Entity_Id type, Entity_Id def_type)
- {
-   /* The trivial case.  */
-   if (type == def_type)
-     return true;
- 
-   /* A class-wide type is equivalent to a subtype of itself.  */
-   if (Is_Class_Wide_Type (type))
-     return true;
- 
-   /* A packed array type is compatible with its implementation type.  */
-   if (Is_Packed (def_type) && type == Packed_Array_Impl_Type (def_type))
-     return true;
- 
-   /* If both types are Itypes, one may be a copy of the other.  */
-   if (Is_Itype (def_type) && Is_Itype (type))
-     return true;
- 
-   /* If the type is incomplete and comes from a limited context, then also
-      consider its non-limited view.  */
-   if (Is_Incomplete_Type (def_type)
-       && From_Limited_With (def_type)
-       && Present (Non_Limited_View (def_type)))
-     return Gigi_Types_Compatible (type, Non_Limited_View (def_type));
- 
-   /* If the type is incomplete/private, then also consider its full view.  */
-   if (Is_Incomplete_Or_Private_Type (def_type)
-       && Present (Full_View (def_type)))
-     return Gigi_Types_Compatible (type, Full_View (def_type));
- 
-   return false;
- }
- 
- /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Identifier,
-    to a GCC tree, which is returned.  GNU_RESULT_TYPE_P is a pointer
-    to where we should place the result type.  */
- 
- static tree
- Identifier_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p)
- {
-   /* The entity of GNAT_NODE and its type.  */
-   Node_Id gnat_entity = (Nkind (gnat_node) == N_Defining_Identifier
- 			 || Nkind (gnat_node) == N_Defining_Operator_Symbol)
- 			? gnat_node : Entity (gnat_node);
-   Node_Id gnat_entity_type = Etype (gnat_entity);
-   /* If GNAT_NODE is a constant, whether we should use the initialization
-      value instead of the constant entity, typically for scalars with an
-      address clause when the parent doesn't require an lvalue.  */
-   bool use_constant_initializer = false;
-   /* Whether we should require an lvalue for GNAT_NODE.  Needed in
-      specific circumstances only, so evaluated lazily.  < 0 means
-      unknown, > 0 means known true, 0 means known false.  */
-   int require_lvalue = -1;
-   Node_Id gnat_result_type;
-   tree gnu_result, gnu_result_type;
- 
-   /* If the Etype of this node is not the same as that of the Entity, then
-      something went wrong, probably in generic instantiation.  However, this
-      does not apply to types.  Since we sometime have strange Ekind's, just
-      do this test for objects, except for discriminants because their type
-      may have been changed to a subtype by Exp_Ch3.Adjust_Discriminants.  */
-   gcc_assert (!Is_Object (gnat_entity)
- 	      || Ekind (gnat_entity) == E_Discriminant
- 	      || Etype (gnat_node) == gnat_entity_type
- 	      || Gigi_Types_Compatible (Etype (gnat_node), gnat_entity_type));
- 
-   /* If this is a reference to a deferred constant whose partial view is an
-      unconstrained private type, the proper type is on the full view of the
-      constant, not on the full view of the type, which may be unconstrained.
- 
-      This may be a reference to a type, for example in the prefix of the
-      attribute Position, generated for dispatching code (see Make_DT in
-      exp_disp,adb). In that case we need the type itself, not is parent,
-      in particular if it is a derived type  */
-   if (Ekind (gnat_entity) == E_Constant
-       && Is_Private_Type (gnat_entity_type)
-       && (Has_Unknown_Discriminants (gnat_entity_type)
- 	  || (Present (Full_View (gnat_entity_type))
-  	      && Has_Discriminants (Full_View (gnat_entity_type))))
-       && Present (Full_View (gnat_entity)))
-     {
-       gnat_entity = Full_View (gnat_entity);
-       gnat_result_type = Etype (gnat_entity);
-     }
-   else
-     {
-       /* We use the Actual_Subtype only if it has already been elaborated,
- 	 as we may be invoked precisely during its elaboration, otherwise
- 	 the Etype.  Avoid using it for packed arrays to simplify things,
- 	 except in a return statement because we need the actual size and
- 	 the front-end does not make it explicit in this case.  */
-       if ((Ekind (gnat_entity) == E_Constant
- 	   || Ekind (gnat_entity) == E_Variable
- 	   || Is_Formal (gnat_entity))
- 	  && !(Is_Array_Type (Etype (gnat_entity))
- 	       && Present (Packed_Array_Impl_Type (Etype (gnat_entity)))
- 	       && Nkind (Parent (gnat_node)) != N_Simple_Return_Statement)
- 	  && Present (Actual_Subtype (gnat_entity))
- 	  && present_gnu_tree (Actual_Subtype (gnat_entity)))
- 	gnat_result_type = Actual_Subtype (gnat_entity);
-       else
- 	gnat_result_type = Etype (gnat_node);
-     }
- 
-   /* Expand the type of this identifier first, in case it is an enumeral
-      literal, which only get made when the type is expanded.  There is no
-      order-of-elaboration issue here.  */
-   gnu_result_type = get_unpadded_type (gnat_result_type);
- 
-   /* If this is a non-imported elementary constant with an address clause,
-      retrieve the value instead of a pointer to be dereferenced unless
-      an lvalue is required.  This is generally more efficient and actually
-      required if this is a static expression because it might be used
-      in a context where a dereference is inappropriate, such as a case
-      statement alternative or a record discriminant.  There is no possible
-      volatile-ness short-circuit here since Volatile constants must be
-      imported per C.6.  */
-   if (Ekind (gnat_entity) == E_Constant
-       && Is_Elementary_Type (gnat_result_type)
-       && !Is_Imported (gnat_entity)
-       && Present (Address_Clause (gnat_entity)))
-     {
-       require_lvalue
- 	= lvalue_required_p (gnat_node, gnu_result_type, true, false);
-       use_constant_initializer = !require_lvalue;
-     }
- 
-   if (use_constant_initializer)
-     {
-       /* If this is a deferred constant, the initializer is attached to
- 	 the full view.  */
-       if (Present (Full_View (gnat_entity)))
- 	gnat_entity = Full_View (gnat_entity);
- 
-       gnu_result = gnat_to_gnu (Expression (Declaration_Node (gnat_entity)));
-     }
-   else
-     gnu_result = gnat_to_gnu_entity (gnat_entity, NULL_TREE, false);
- 
-   /* Some objects (such as parameters passed by reference, globals of
-      variable size, and renamed objects) actually represent the address
-      of the object.  In that case, we must do the dereference.  Likewise,
-      deal with parameters to foreign convention subprograms.  */
-   if (DECL_P (gnu_result)
-       && (DECL_BY_REF_P (gnu_result)
- 	  || (TREE_CODE (gnu_result) == PARM_DECL
- 	      && DECL_BY_COMPONENT_PTR_P (gnu_result))))
-     {
-       const bool read_only = DECL_POINTS_TO_READONLY_P (gnu_result);
- 
-       /* If it's a PARM_DECL to foreign convention subprogram, convert it.  */
-       if (TREE_CODE (gnu_result) == PARM_DECL
- 	  && DECL_BY_COMPONENT_PTR_P (gnu_result))
- 	gnu_result
- 	  = convert (build_pointer_type (gnu_result_type), gnu_result);
- 
-       /* If it's a CONST_DECL, return the underlying constant like below.  */
-       else if (TREE_CODE (gnu_result) == CONST_DECL
- 	       && !(DECL_CONST_ADDRESS_P (gnu_result)
- 		    && lvalue_required_p (gnat_node, gnu_result_type, true,
- 					  true)))
- 	gnu_result = DECL_INITIAL (gnu_result);
- 
-       /* Do the final dereference.  */
-       gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_result);
- 
-       if ((TREE_CODE (gnu_result) == INDIRECT_REF
- 	   || TREE_CODE (gnu_result) == UNCONSTRAINED_ARRAY_REF)
- 	  && No (Address_Clause (gnat_entity)))
- 	TREE_THIS_NOTRAP (gnu_result) = 1;
- 
-       if (read_only)
- 	TREE_READONLY (gnu_result) = 1;
-     }
- 
-   /* If we have a constant declaration and its initializer, try to return the
-      latter to avoid the need to call fold in lots of places and the need for
-      elaboration code if this identifier is used as an initializer itself.  */
-   if (constant_decl_with_initializer_p (gnu_result))
-     {
-       bool constant_only = (TREE_CODE (gnu_result) == CONST_DECL
- 			    && !DECL_CONST_CORRESPONDING_VAR (gnu_result));
-       bool address_of_constant = (TREE_CODE (gnu_result) == CONST_DECL
- 				  && DECL_CONST_ADDRESS_P (gnu_result));
- 
-       /* If there is a (corresponding) variable or this is the address of a
- 	 constant, we only want to return the initializer if an lvalue isn't
- 	 required.  Evaluate this now if we have not already done so.  */
-       if ((!constant_only || address_of_constant) && require_lvalue < 0)
- 	require_lvalue
- 	  = lvalue_required_p (gnat_node, gnu_result_type, true,
- 			       address_of_constant)
- 	    || (AGGREGATE_TYPE_P (gnu_result_type)
- 		&& lvalue_for_aggregate_p (gnat_node, gnu_result_type));
- 
-       /* Finally retrieve the initializer if this is deemed valid.  */
-       if ((constant_only && !address_of_constant) || !require_lvalue)
- 	gnu_result = DECL_INITIAL (gnu_result);
-     }
- 
-   /* But for a constant renaming we couldn't do that incrementally for its
-      definition because of the need to return an lvalue so, if the present
-      context doesn't itself require an lvalue, we try again here.  */
-   else if (Ekind (gnat_entity) == E_Constant
- 	   && Is_Elementary_Type (gnat_result_type)
- 	   && Present (Renamed_Object (gnat_entity)))
-     {
-       if (require_lvalue < 0)
- 	require_lvalue
- 	  = lvalue_required_p (gnat_node, gnu_result_type, true, false);
-       if (!require_lvalue)
- 	gnu_result = fold_constant_decl_in_expr (gnu_result);
-     }
- 
-   /* The GNAT tree has the type of a function set to its result type, so we
-      adjust here.  Also use the type of the result if the Etype is a subtype
-      that is nominally unconstrained.  Likewise if this is a deferred constant
-      of a discriminated type whose full view can be elaborated statically, to
-      avoid problematic conversions to the nominal subtype.  But remove any
-      padding from the resulting type.  */
-   if (FUNC_OR_METHOD_TYPE_P (TREE_TYPE (gnu_result))
-       || Is_Constr_Subt_For_UN_Aliased (gnat_result_type)
-       || (Ekind (gnat_entity) == E_Constant
- 	  && Present (Full_View (gnat_entity))
- 	  && Has_Discriminants (gnat_result_type)
- 	  && TREE_CODE (gnu_result) == CONSTRUCTOR))
-     {
-       gnu_result_type = TREE_TYPE (gnu_result);
-       if (TYPE_IS_PADDING_P (gnu_result_type))
- 	gnu_result_type = TREE_TYPE (TYPE_FIELDS (gnu_result_type));
-     }
- 
-   *gnu_result_type_p = gnu_result_type;
- 
-   return gnu_result;
- }
- 
- /* Subroutine of gnat_to_gnu to process gnat_node, an N_Pragma.  Return
-    any statements we generate.  */
- 
- static tree
- Pragma_to_gnu (Node_Id gnat_node)
- {
-   tree gnu_result = alloc_stmt_list ();
-   Node_Id gnat_temp;
- 
-   /* Check for (and ignore) unrecognized pragmas.  */
-   if (!Is_Pragma_Name (Chars (Pragma_Identifier (gnat_node))))
-     return gnu_result;
- 
-   const unsigned char id
-     = Get_Pragma_Id (Chars (Pragma_Identifier (gnat_node)));
- 
-   /* Save the expression of pragma Compile_Time_{Error|Warning} for later.  */
-   if (id == Pragma_Compile_Time_Error || id == Pragma_Compile_Time_Warning)
-     {
-       gnat_temp = First (Pragma_Argument_Associations (gnat_node));
-       gnat_compile_time_expr_list.safe_push (Expression (gnat_temp));
-       return gnu_result;
-     }
- 
-   /* Stop there if we are just annotating types.  */
-   if (type_annotate_only)
-     return gnu_result;
- 
-   switch (id)
-     {
-     case Pragma_Inspection_Point:
-       /* Do nothing at top level: all such variables are already viewable.  */
-       if (global_bindings_p ())
- 	break;
- 
-       for (gnat_temp = First (Pragma_Argument_Associations (gnat_node));
- 	   Present (gnat_temp);
- 	   gnat_temp = Next (gnat_temp))
- 	{
- 	  Node_Id gnat_expr = Expression (gnat_temp);
- 	  tree gnu_expr = gnat_to_gnu (gnat_expr);
- 	  tree asm_constraint = NULL_TREE;
- #ifdef ASM_COMMENT_START
- 	  char *comment;
- #endif
- 	  gnu_expr = maybe_unconstrained_array (gnu_expr);
- 	  gnat_mark_addressable (gnu_expr);
- 
- #ifdef ASM_COMMENT_START
- 	  comment = concat (ASM_COMMENT_START,
- 			    " inspection point: ",
- 			    Get_Name_String (Chars (gnat_expr)),
- 			    " is at %0",
- 			    NULL);
- 	  asm_constraint = build_string (strlen (comment), comment);
- 	  free (comment);
- #endif
- 	  gnu_expr = build5 (ASM_EXPR, void_type_node,
- 			     asm_constraint,
- 			     NULL_TREE,
- 			     tree_cons
- 			     (build_tree_list (NULL_TREE,
- 					       build_string (1, "m")),
- 					       gnu_expr, NULL_TREE),
- 			     NULL_TREE, NULL_TREE);
- 	  ASM_VOLATILE_P (gnu_expr) = 1;
- 	  set_expr_location_from_node (gnu_expr, gnat_node);
- 	  append_to_statement_list (gnu_expr, &gnu_result);
- 	}
-       break;
- 
-     case Pragma_Loop_Optimize:
-       for (gnat_temp = First (Pragma_Argument_Associations (gnat_node));
- 	   Present (gnat_temp);
- 	   gnat_temp = Next (gnat_temp))
- 	{
- 	  tree gnu_loop_stmt = gnu_loop_stack->last ()->stmt;
- 
- 	  switch (Chars (Expression (gnat_temp)))
- 	    {
- 	    case Name_Ivdep:
- 	      LOOP_STMT_IVDEP (gnu_loop_stmt) = 1;
- 	      break;
- 
- 	    case Name_No_Unroll:
- 	      LOOP_STMT_NO_UNROLL (gnu_loop_stmt) = 1;
- 	      break;
- 
- 	    case Name_Unroll:
- 	      LOOP_STMT_UNROLL (gnu_loop_stmt) = 1;
- 	      break;
- 
- 	    case Name_No_Vector:
- 	      LOOP_STMT_NO_VECTOR (gnu_loop_stmt) = 1;
- 	      break;
- 
- 	    case Name_Vector:
- 	      LOOP_STMT_VECTOR (gnu_loop_stmt) = 1;
- 	      break;
- 
- 	    default:
- 	      gcc_unreachable ();
- 	    }
- 	}
-       break;
- 
-     case Pragma_Optimize:
-       switch (Chars (Expression
- 		     (First (Pragma_Argument_Associations (gnat_node)))))
- 	{
- 	case Name_Off:
- 	  if (optimize)
- 	    post_error ("must specify -O0?", gnat_node);
- 	  break;
- 
- 	case Name_Space:
- 	  if (!optimize_size)
- 	    post_error ("must specify -Os?", gnat_node);
- 	  break;
- 
- 	case Name_Time:
- 	  if (!optimize)
- 	    post_error ("insufficient -O value?", gnat_node);
- 	  break;
- 
- 	default:
- 	  gcc_unreachable ();
- 	}
-       break;
- 
-     case Pragma_Reviewable:
-       if (write_symbols == NO_DEBUG)
- 	post_error ("must specify -g?", gnat_node);
-       break;
- 
-     case Pragma_Warning_As_Error:
-     case Pragma_Warnings:
-       {
- 	Node_Id gnat_expr;
- 	/* Preserve the location of the pragma.  */
- 	const location_t location = input_location;
- 	struct cl_option_handlers handlers;
- 	unsigned int option_index;
- 	diagnostic_t kind;
- 	bool imply;
- 
- 	gnat_temp = First (Pragma_Argument_Associations (gnat_node));
- 
- 	/* This is the String form: pragma Warning{s|_As_Error}(String).  */
- 	if (Nkind (Expression (gnat_temp)) == N_String_Literal)
- 	  {
- 	    switch (id)
- 	      {
- 	      case Pragma_Warning_As_Error:
- 		kind = DK_ERROR;
- 		imply = false;
- 		break;
- 
- 	      case Pragma_Warnings:
- 		kind = DK_WARNING;
- 		imply = true;
- 		break;
- 
- 	      default:
- 		gcc_unreachable ();
- 	      }
- 
- 	    gnat_expr = Expression (gnat_temp);
- 	  }
- 
- 	/* This is the On/Off form: pragma Warnings (On | Off [,String]).  */
- 	else if (Nkind (Expression (gnat_temp)) == N_Identifier)
- 	  {
- 	    switch (Chars (Expression (gnat_temp)))
- 	      {
- 		case Name_Off:
- 		  kind = DK_IGNORED;
- 		  break;
- 
- 		case Name_On:
- 		  kind = DK_WARNING;
- 		  break;
- 
- 		default:
- 		  gcc_unreachable ();
- 	      }
- 
- 	    /* Deal with optional pattern (but ignore Reason => "...").  */
- 	    if (Present (Next (gnat_temp))
- 		&& Chars (Next (gnat_temp)) != Name_Reason)
- 	      {
- 		/* pragma Warnings (On | Off, Name) is handled differently.  */
- 		if (Nkind (Expression (Next (gnat_temp))) != N_String_Literal)
- 		  break;
- 
- 	        gnat_expr = Expression (Next (gnat_temp));
- 	      }
- 	    else
- 	      {
- 		gnat_expr = Empty;
- 
- 		/* For pragma Warnings (Off), we save the current state...  */
- 		if (kind == DK_IGNORED)
- 		  diagnostic_push_diagnostics (global_dc, location);
- 
- 		/* ...so that, for pragma Warnings (On), we do not enable all
- 		   the warnings but just restore the previous state.  */
- 		else
- 		  {
- 		    diagnostic_pop_diagnostics (global_dc, location);
- 		    break;
- 		  }
- 	      }
- 
- 	    imply = false;
- 	  }
- 
- 	else
- 	  gcc_unreachable ();
- 
- 	/* This is the same implementation as in the C family of compilers.  */
- 	const unsigned int lang_mask = CL_Ada | CL_COMMON;
- 	const char *arg = NULL;
- 	if (Present (gnat_expr))
- 	  {
- 	    tree gnu_expr = gnat_to_gnu (gnat_expr);
- 	    const char *option_string = TREE_STRING_POINTER (gnu_expr);
- 	    const int len = TREE_STRING_LENGTH (gnu_expr);
- 	    if (len < 3 || option_string[0] != '-' || option_string[1] != 'W')
- 	      break;
- 	    option_index = find_opt (option_string + 1, lang_mask);
- 	    if (option_index == OPT_SPECIAL_unknown)
- 	      {
- 		post_error ("?unknown -W switch", gnat_node);
- 		break;
- 	      }
- 	    else if (!(cl_options[option_index].flags & CL_WARNING))
- 	      {
- 		post_error ("?-W switch does not control warning", gnat_node);
- 		break;
- 	      }
- 	    else if (!(cl_options[option_index].flags & lang_mask))
- 	      {
- 		post_error ("?-W switch not valid for Ada", gnat_node);
- 		break;
- 	      }
- 	    if (cl_options[option_index].flags & CL_JOINED)
- 	      arg = option_string + 1 + cl_options[option_index].opt_len;
- 	  }
- 	else
- 	  option_index = 0;
- 
- 	set_default_handlers (&handlers, NULL);
- 	control_warning_option (option_index, (int) kind, arg, imply, location,
- 				lang_mask, &handlers, &global_options,
- 				&global_options_set, global_dc);
-       }
-       break;
- 
-     default:
-       break;
-     }
- 
-   return gnu_result;
- }
- 
- /* Check the inline status of nested function FNDECL wrt its parent function.
- 
-    If a non-inline nested function is referenced from an inline external
-    function, we cannot honor both requests at the same time without cloning
-    the nested function in the current unit since it is private to its unit.
-    We could inline it as well but it's probably better to err on the side
-    of too little inlining.
- 
-    This must be done only on nested functions present in the source code
-    and not on nested functions generated by the compiler, e.g. finalizers,
-    because they may be not marked inline and we don't want them to block
-    the inlining of the parent function.  */
- 
- static void
- check_inlining_for_nested_subprog (tree fndecl)
- {
-   if (DECL_IGNORED_P (current_function_decl) || DECL_IGNORED_P (fndecl))
-     return;
- 
-   if (DECL_DECLARED_INLINE_P (fndecl))
-     return;
- 
-   tree parent_decl = decl_function_context (fndecl);
-   if (DECL_EXTERNAL (parent_decl) && DECL_DECLARED_INLINE_P (parent_decl))
-     {
-       const location_t loc1 = DECL_SOURCE_LOCATION (fndecl);
-       const location_t loc2 = DECL_SOURCE_LOCATION (parent_decl);
- 
-       if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (parent_decl)))
- 	{
- 	  error_at (loc1, "subprogram %q+F not marked %<Inline_Always%>",
- 		    fndecl);
- 	  error_at (loc2, "parent subprogram cannot be inlined");
- 	}
-       else
- 	{
- 	  warning_at (loc1, OPT_Winline, "subprogram %q+F not marked %<Inline%>",
- 		      fndecl);
- 	  warning_at (loc2, OPT_Winline, "parent subprogram cannot be inlined");
- 	}
- 
-       DECL_DECLARED_INLINE_P (parent_decl) = 0;
-       DECL_UNINLINABLE (parent_decl) = 1;
-     }
- }
- 
- /* Return an expression for the length of TYPE, an integral type, computed in
-    RESULT_TYPE, another integral type.
- 
-    We used to compute the length as MAX (hb - lb + 1, 0) which could overflow
-    when lb == TYPE'First.  We now compute it as (hb >= lb) ? hb - lb + 1 : 0
-    which would only overflow in much rarer cases, for extremely large arrays
-    we expect never to encounter in practice.  Besides, the former computation
-    required the use of potentially constraining signed arithmetics while the
-    latter does not.  Note that the comparison must be done in the original
-    base index type in order to avoid any overflow during the conversion.  */
- 
- static tree
- get_type_length (tree type, tree result_type)
- {
-   tree comp_type = get_base_type (result_type);
-   tree base_type = maybe_character_type (get_base_type (type));
-   tree lb = convert (base_type, TYPE_MIN_VALUE (type));
-   tree hb = convert (base_type, TYPE_MAX_VALUE (type));
-   tree length
-     = build_binary_op (PLUS_EXPR, comp_type,
- 		       build_binary_op (MINUS_EXPR, comp_type,
- 					convert (comp_type, hb),
- 					convert (comp_type, lb)),
- 		       build_int_cst (comp_type, 1));
-   length
-     = build_cond_expr (result_type,
- 		       build_binary_op (GE_EXPR, boolean_type_node, hb, lb),
- 		       convert (result_type, length),
- 		       build_int_cst (result_type, 0));
-   return length;
- }
- 
- /* Subroutine of gnat_to_gnu to translate GNAT_NODE, an N_Attribute node,
-    to a GCC tree, which is returned.  GNU_RESULT_TYPE_P is a pointer to
-    where we should place the result type.  ATTRIBUTE is the attribute ID.  */
- 
- static tree
- Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute)
- {
-   const Node_Id gnat_prefix = Prefix (gnat_node);
-   tree gnu_prefix = gnat_to_gnu (gnat_prefix);
-   tree gnu_type = TREE_TYPE (gnu_prefix);
-   tree gnu_expr, gnu_result_type, gnu_result = error_mark_node;
-   bool prefix_unused = false;
- 
-   /* If the input is a NULL_EXPR, make a new one.  */
-   if (TREE_CODE (gnu_prefix) == NULL_EXPR)
-     {
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       *gnu_result_type_p = gnu_result_type;
-       return build1 (NULL_EXPR, gnu_result_type, TREE_OPERAND (gnu_prefix, 0));
-     }
- 
-   switch (attribute)
-     {
-     case Attr_Pred:
-     case Attr_Succ:
-       /* These just add or subtract the constant 1 since representation
- 	 clauses for enumeration types are handled in the front-end.  */
-       gnu_expr = gnat_to_gnu (First (Expressions (gnat_node)));
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       gnu_type = maybe_character_type (gnu_result_type);
-       if (TREE_TYPE (gnu_expr) != gnu_type)
- 	gnu_expr = convert (gnu_type, gnu_expr);
-       gnu_result
- 	= build_binary_op (attribute == Attr_Pred ? MINUS_EXPR : PLUS_EXPR,
- 			   gnu_type, gnu_expr, build_int_cst (gnu_type, 1));
-       break;
- 
-     case Attr_Address:
-     case Attr_Unrestricted_Access:
-       /* Conversions don't change the address of references but can cause
- 	 build_unary_op to miss the references below, so strip them off.
- 	 On the contrary, if the address-of operation causes a temporary
- 	 to be created, then it must be created with the proper type.  */
-       gnu_expr = remove_conversions (gnu_prefix,
- 				     !Must_Be_Byte_Aligned (gnat_node));
-       if (REFERENCE_CLASS_P (gnu_expr))
- 	gnu_prefix = gnu_expr;
- 
-       /* If we are taking 'Address of an unconstrained object, this is the
- 	 pointer to the underlying array.  */
-       if (attribute == Attr_Address)
- 	gnu_prefix = maybe_unconstrained_array (gnu_prefix);
- 
-       /* If we are building a static dispatch table, we have to honor
- 	 TARGET_VTABLE_USES_DESCRIPTORS if we want to be compatible
- 	 with the C++ ABI.  We do it in the non-static case as well,
- 	 see gnat_to_gnu_entity, case E_Access_Subprogram_Type.  */
-       else if (TARGET_VTABLE_USES_DESCRIPTORS
- 	       && Is_Dispatch_Table_Entity (Etype (gnat_node)))
- 	{
- 	  tree gnu_field, t;
- 	  /* Descriptors can only be built here for top-level functions.  */
- 	  bool build_descriptor = (global_bindings_p () != 0);
- 	  int i;
- 	  vec<constructor_elt, va_gc> *gnu_vec = NULL;
- 	  constructor_elt *elt;
- 
- 	  gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	  /* If we're not going to build the descriptor, we have to retrieve
- 	     the one which will be built by the linker (or by the compiler
- 	     later if a static chain is requested).  */
- 	  if (!build_descriptor)
- 	    {
- 	      gnu_result = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_prefix);
- 	      gnu_result = fold_convert (build_pointer_type (gnu_result_type),
- 					 gnu_result);
- 	      gnu_result = build1 (INDIRECT_REF, gnu_result_type, gnu_result);
- 	    }
- 
- 	  vec_safe_grow (gnu_vec, TARGET_VTABLE_USES_DESCRIPTORS, true);
- 	  elt = (gnu_vec->address () + TARGET_VTABLE_USES_DESCRIPTORS - 1);
- 	  for (gnu_field = TYPE_FIELDS (gnu_result_type), i = 0;
- 	       i < TARGET_VTABLE_USES_DESCRIPTORS;
- 	       gnu_field = DECL_CHAIN (gnu_field), i++)
- 	    {
- 	      if (build_descriptor)
- 		{
- 		  t = build2 (FDESC_EXPR, TREE_TYPE (gnu_field), gnu_prefix,
- 			      build_int_cst (NULL_TREE, i));
- 		  TREE_CONSTANT (t) = 1;
- 		}
- 	      else
- 		t = build3 (COMPONENT_REF, ptr_void_ftype, gnu_result,
- 			    gnu_field, NULL_TREE);
- 
- 	      elt->index = gnu_field;
- 	      elt->value = t;
- 	      elt--;
- 	    }
- 
- 	  gnu_result = gnat_build_constructor (gnu_result_type, gnu_vec);
- 	  break;
- 	}
- 
-       /* ... fall through ... */
- 
-     case Attr_Access:
-     case Attr_Unchecked_Access:
-     case Attr_Code_Address:
-       /* Taking the address of a type does not make sense.  */
-       gcc_assert (TREE_CODE (gnu_prefix) != TYPE_DECL);
- 
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       gnu_result
- 	= build_unary_op (((attribute == Attr_Address
- 			    || attribute == Attr_Unrestricted_Access)
- 			   && !Must_Be_Byte_Aligned (gnat_node))
- 			  ? ATTR_ADDR_EXPR : ADDR_EXPR,
- 			  gnu_result_type, gnu_prefix);
- 
-       /* For 'Code_Address, find an inner ADDR_EXPR and mark it so that we
- 	 don't try to build a trampoline.  */
-       if (attribute == Attr_Code_Address)
- 	{
- 	  gnu_expr = remove_conversions (gnu_result, false);
- 
- 	  if (TREE_CODE (gnu_expr) == ADDR_EXPR)
- 	    TREE_NO_TRAMPOLINE (gnu_expr) = TREE_CONSTANT (gnu_expr) = 1;
- 
- 	  /* On targets for which function symbols denote a descriptor, the
- 	     code address is stored within the first slot of the descriptor
- 	     so we do an additional dereference:
- 	       result = *((result_type *) result)
- 	     where we expect result to be of some pointer type already.  */
- 	  if (targetm.calls.custom_function_descriptors == 0)
- 	    gnu_result
- 	      = build_unary_op (INDIRECT_REF, NULL_TREE,
- 				convert (build_pointer_type (gnu_result_type),
- 					 gnu_result));
- 	}
- 
-       /* For 'Access, issue an error message if the prefix is a C++ method
- 	 since it can use a special calling convention on some platforms,
- 	 which cannot be propagated to the access type.  */
-       else if (attribute == Attr_Access
- 	       && TREE_CODE (TREE_TYPE (gnu_prefix)) == METHOD_TYPE)
- 	post_error ("access to C++ constructor or member function not allowed",
- 		    gnat_node);
- 
-       /* For other address attributes applied to a nested function,
- 	 find an inner ADDR_EXPR and annotate it so that we can issue
- 	 a useful warning with -Wtrampolines.  */
-       else if (FUNC_OR_METHOD_TYPE_P (TREE_TYPE (gnu_prefix))
- 	       && (gnu_expr = remove_conversions (gnu_result, false))
- 	       && TREE_CODE (gnu_expr) == ADDR_EXPR
- 	       && decl_function_context (TREE_OPERAND (gnu_expr, 0)))
- 	{
- 	  set_expr_location_from_node (gnu_expr, gnat_node);
- 
- 	  /* Also check the inlining status.  */
- 	  check_inlining_for_nested_subprog (TREE_OPERAND (gnu_expr, 0));
- 
- 	  /* Moreover, for 'Access or 'Unrestricted_Access with non-
- 	     foreign-compatible representation, mark the ADDR_EXPR so
- 	     that we can build a descriptor instead of a trampoline.  */
- 	  if ((attribute == Attr_Access
- 	       || attribute == Attr_Unrestricted_Access)
- 	      && targetm.calls.custom_function_descriptors > 0
- 	      && Can_Use_Internal_Rep (Underlying_Type (Etype (gnat_node))))
- 	    FUNC_ADDR_BY_DESCRIPTOR (gnu_expr) = 1;
- 
- 	  /* Otherwise, we need to check that we are not violating the
- 	     No_Implicit_Dynamic_Code restriction.  */
- 	  else if (targetm.calls.custom_function_descriptors != 0)
- 	    Check_Implicit_Dynamic_Code_Allowed (gnat_node);
- 	}
-       break;
- 
-     case Attr_Pool_Address:
-       {
- 	tree gnu_ptr = gnu_prefix;
- 	tree gnu_obj_type;
- 
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	/* If this is fat pointer, the object must have been allocated with the
- 	   template in front of the array.  So compute the template address; do
- 	   it by converting to a thin pointer.  */
- 	if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_ptr)))
- 	  gnu_ptr
- 	    = convert (build_pointer_type
- 		       (TYPE_OBJECT_RECORD_TYPE
- 			(TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (gnu_ptr)))),
- 		       gnu_ptr);
- 
- 	gnu_obj_type = TREE_TYPE (TREE_TYPE (gnu_ptr));
- 
- 	/* If this is a thin pointer, the object must have been allocated with
- 	   the template in front of the array.  So compute the template address
- 	   and return it.  */
- 	if (TYPE_IS_THIN_POINTER_P (TREE_TYPE (gnu_ptr)))
- 	  gnu_ptr
- 	    = build_binary_op (POINTER_PLUS_EXPR, TREE_TYPE (gnu_ptr),
- 			       gnu_ptr,
- 			       fold_build1 (NEGATE_EXPR, sizetype,
- 					    byte_position
- 					    (DECL_CHAIN
- 					     TYPE_FIELDS ((gnu_obj_type)))));
- 
- 	gnu_result = convert (gnu_result_type, gnu_ptr);
-       }
-       break;
- 
-     case Attr_Size:
-     case Attr_Object_Size:
-     case Attr_Value_Size:
-     case Attr_Max_Size_In_Storage_Elements:
-       /* Strip NOPs, conversions between original and packable versions, and
- 	 unpadding from GNU_PREFIX.  Note that we cannot simply strip every
- 	 VIEW_CONVERT_EXPR because some of them may give the actual size, e.g.
- 	 for nominally unconstrained packed array.  We use GNU_EXPR to see
- 	 if a COMPONENT_REF was involved.  */
-       while (CONVERT_EXPR_P (gnu_prefix)
- 	     || TREE_CODE (gnu_prefix) == NON_LVALUE_EXPR
- 	     || (TREE_CODE (gnu_prefix) == VIEW_CONVERT_EXPR
- 		 && TREE_CODE (TREE_TYPE (gnu_prefix)) == RECORD_TYPE
- 		 && TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))
- 		    == RECORD_TYPE
- 		 && TYPE_NAME (TREE_TYPE (gnu_prefix))
- 		    == TYPE_NAME (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))))
- 	gnu_prefix = TREE_OPERAND (gnu_prefix, 0);
-       gnu_expr = gnu_prefix;
-       if (TREE_CODE (gnu_prefix) == COMPONENT_REF
- 	  && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0))))
- 	gnu_prefix = TREE_OPERAND (gnu_prefix, 0);
-       prefix_unused = true;
-       gnu_type = TREE_TYPE (gnu_prefix);
- 
-       /* Replace an unconstrained array type with the type of the underlying
- 	 array, except for 'Max_Size_In_Storage_Elements because we need to
- 	 return the (maximum) size requested for an allocator.  */
-       if (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE)
- 	{
- 	  gnu_type = TYPE_OBJECT_RECORD_TYPE (gnu_type);
- 	  if (attribute != Attr_Max_Size_In_Storage_Elements)
- 	    gnu_type = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (gnu_type)));
- 	}
- 
-       /* The type must be frozen at this point.  */
-       gcc_assert (COMPLETE_TYPE_P (gnu_type));
- 
-       /* If we're looking for the size of a field, return the field size.  */
-       if (TREE_CODE (gnu_prefix) == COMPONENT_REF)
- 	gnu_result = DECL_SIZE (TREE_OPERAND (gnu_prefix, 1));
- 
-       /* Otherwise, if the prefix is an object, or if we are looking for
- 	 'Object_Size or 'Max_Size_In_Storage_Elements, the result is the
- 	 GCC size of the type.  We make an exception for padded objects,
- 	 as we do not take into account alignment promotions for the size.
- 	 This is in keeping with the object case of gnat_to_gnu_entity.  */
-       else if ((TREE_CODE (gnu_prefix) != TYPE_DECL
- 		&& !(TYPE_IS_PADDING_P (gnu_type)
- 		     && TREE_CODE (gnu_expr) == COMPONENT_REF
- 		     && pad_type_has_rm_size (gnu_type)))
- 	       || attribute == Attr_Object_Size
- 	       || attribute == Attr_Max_Size_In_Storage_Elements)
- 	{
- 	  /* If this is a dereference and we have a special dynamic constrained
- 	     subtype on the prefix, use it to compute the size; otherwise, use
- 	     the designated subtype.  */
- 	  if (Nkind (gnat_prefix) == N_Explicit_Dereference)
- 	    {
- 	      Node_Id gnat_actual_subtype
- 		= Actual_Designated_Subtype (gnat_prefix);
- 	      tree gnu_ptr_type
- 		= TREE_TYPE (gnat_to_gnu (Prefix (gnat_prefix)));
- 
- 	      if (TYPE_IS_FAT_OR_THIN_POINTER_P (gnu_ptr_type)
- 		  && Present (gnat_actual_subtype))
- 		{
- 		  tree gnu_actual_obj_type
- 		    = gnat_to_gnu_type (gnat_actual_subtype);
- 		  gnu_type
- 		    = build_unc_object_type_from_ptr (gnu_ptr_type,
- 						      gnu_actual_obj_type,
- 						      get_identifier ("SIZE"),
- 						      false);
- 		}
- 	    }
- 
- 	  gnu_result = TYPE_SIZE (gnu_type);
- 	}
- 
-       /* Otherwise, the result is the RM size of the type.  */
-       else
- 	gnu_result = rm_size (gnu_type);
- 
-       /* Deal with a self-referential size by qualifying the size with the
- 	 object or returning the maximum size for a type.  */
-       if (TREE_CODE (gnu_prefix) != TYPE_DECL)
- 	gnu_result = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_result, gnu_prefix);
-       else if (CONTAINS_PLACEHOLDER_P (gnu_result))
- 	gnu_result = max_size (gnu_result, true);
- 
-       /* If the type contains a template, subtract the padded size of the
- 	 template, except for 'Max_Size_In_Storage_Elements because we need
- 	 to return the (maximum) size requested for an allocator.  */
-       if (TREE_CODE (gnu_type) == RECORD_TYPE
- 	  && TYPE_CONTAINS_TEMPLATE_P (gnu_type)
- 	  && attribute != Attr_Max_Size_In_Storage_Elements)
- 	gnu_result
- 	  = size_binop (MINUS_EXPR, gnu_result,
- 			bit_position (DECL_CHAIN (TYPE_FIELDS (gnu_type))));
- 
-       /* For 'Max_Size_In_Storage_Elements, adjust the unit.  */
-       if (attribute == Attr_Max_Size_In_Storage_Elements)
- 	gnu_result = size_binop (CEIL_DIV_EXPR, gnu_result, bitsize_unit_node);
- 
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       break;
- 
-     case Attr_Alignment:
-       {
- 	unsigned int align;
- 
- 	if (TREE_CODE (gnu_prefix) == COMPONENT_REF
- 	    && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0))))
- 	  gnu_prefix = TREE_OPERAND (gnu_prefix, 0);
- 
- 	gnu_type = TREE_TYPE (gnu_prefix);
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 	prefix_unused = true;
- 
- 	if (TREE_CODE (gnu_prefix) == COMPONENT_REF)
- 	  align = DECL_ALIGN (TREE_OPERAND (gnu_prefix, 1)) / BITS_PER_UNIT;
- 	else
- 	  {
- 	    Entity_Id gnat_type = Etype (gnat_prefix);
- 	    unsigned int double_align;
- 	    bool is_capped_double, align_clause;
- 
- 	    /* If the default alignment of "double" or larger scalar types is
- 	       specifically capped and there is an alignment clause neither
- 	       on the type nor on the prefix itself, return the cap.  */
- 	    if ((double_align = double_float_alignment) > 0)
- 	      is_capped_double
- 		= is_double_float_or_array (gnat_type, &align_clause);
- 	    else if ((double_align = double_scalar_alignment) > 0)
- 	      is_capped_double
- 		= is_double_scalar_or_array (gnat_type, &align_clause);
- 	    else
- 	      is_capped_double = align_clause = false;
- 
- 	    if (is_capped_double
- 		&& Nkind (gnat_prefix) == N_Identifier
- 		&& Present (Alignment_Clause (Entity (gnat_prefix))))
- 	      align_clause = true;
- 
- 	    if (is_capped_double && !align_clause)
- 	      align = double_align;
- 	    else
- 	      align = TYPE_ALIGN (gnu_type) / BITS_PER_UNIT;
- 	  }
- 
- 	gnu_result = size_int (align);
-       }
-       break;
- 
-     case Attr_First:
-     case Attr_Last:
-     case Attr_Range_Length:
-       prefix_unused = true;
- 
-       if (INTEGRAL_TYPE_P (gnu_type) || SCALAR_FLOAT_TYPE_P (gnu_type))
- 	{
- 	  gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	  if (attribute == Attr_First)
- 	    gnu_result = TYPE_MIN_VALUE (gnu_type);
- 	  else if (attribute == Attr_Last)
- 	    gnu_result = TYPE_MAX_VALUE (gnu_type);
- 	  else
- 	    gnu_result = get_type_length (gnu_type, gnu_result_type);
- 	  break;
- 	}
- 
-       /* ... fall through ... */
- 
-     case Attr_Length:
-       {
- 	int Dimension = (Present (Expressions (gnat_node))
- 			 ? UI_To_Int (Intval (First (Expressions (gnat_node))))
- 			 : 1), i;
- 	struct parm_attr_d *pa = NULL;
- 	Entity_Id gnat_param = Empty;
- 	bool unconstrained_ptr_deref = false;
- 
- 	gnu_prefix = maybe_padded_object (gnu_prefix);
- 	gnu_prefix = maybe_unconstrained_array (gnu_prefix);
- 
- 	/* We treat unconstrained array In parameters specially.  We also note
- 	   whether we are dereferencing a pointer to unconstrained array.  */
- 	if (!Is_Constrained (Etype (gnat_prefix)))
- 	  switch (Nkind (gnat_prefix))
- 	    {
- 	    case N_Identifier:
- 	      /* This is the direct case.  */
- 	      if (Ekind (Entity (gnat_prefix)) == E_In_Parameter)
- 		gnat_param = Entity (gnat_prefix);
- 	      break;
- 
- 	    case N_Explicit_Dereference:
- 	      /* This is the indirect case.  Note that we need to be sure that
- 		 the access value cannot be null as we'll hoist the load.  */
- 	      if (Nkind (Prefix (gnat_prefix)) == N_Identifier
- 		  && Ekind (Entity (Prefix (gnat_prefix))) == E_In_Parameter)
- 		{
- 		  if (Can_Never_Be_Null (Entity (Prefix (gnat_prefix))))
- 		    gnat_param = Entity (Prefix (gnat_prefix));
- 		}
- 	      else
- 		unconstrained_ptr_deref = true;
- 	      break;
- 
- 	    default:
- 	      break;
- 	  }
- 
- 	/* If the prefix is the view conversion of a constrained array to an
- 	   unconstrained form, we retrieve the constrained array because we
- 	   might not be able to substitute the PLACEHOLDER_EXPR coming from
- 	   the conversion.  This can occur with the 'Old attribute applied
- 	   to a parameter with an unconstrained type, which gets rewritten
- 	   into a constrained local variable very late in the game.  */
- 	if (TREE_CODE (gnu_prefix) == VIEW_CONVERT_EXPR
- 	    && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (TREE_TYPE (gnu_prefix)))
- 	    && !CONTAINS_PLACEHOLDER_P
- 	        (TYPE_SIZE (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))))
- 	  gnu_type = TREE_TYPE (TREE_OPERAND (gnu_prefix, 0));
- 	else
- 	  gnu_type = TREE_TYPE (gnu_prefix);
- 
- 	prefix_unused = true;
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	if (TYPE_CONVENTION_FORTRAN_P (gnu_type))
- 	  {
- 	    int ndim;
- 	    tree gnu_type_temp;
- 
- 	    for (ndim = 1, gnu_type_temp = gnu_type;
- 		 TREE_CODE (TREE_TYPE (gnu_type_temp)) == ARRAY_TYPE
- 		 && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type_temp));
- 		 ndim++, gnu_type_temp = TREE_TYPE (gnu_type_temp))
- 	      ;
- 
- 	    Dimension = ndim + 1 - Dimension;
- 	  }
- 
- 	for (i = 1; i < Dimension; i++)
- 	  gnu_type = TREE_TYPE (gnu_type);
- 
- 	gcc_assert (TREE_CODE (gnu_type) == ARRAY_TYPE);
- 
- 	/* When not optimizing, look up the slot associated with the parameter
- 	   and the dimension in the cache and create a new one on failure.
- 	   Don't do this when the actual subtype needs debug info (this happens
- 	   with -gnatD): in elaborate_expression_1, we create variables that
- 	   hold the bounds, so caching attributes isn't very interesting and
- 	   causes dependency issues between these variables and cached
- 	   expressions.  */
- 	if (!optimize
- 	    && Present (gnat_param)
- 	    && !(Present (Actual_Subtype (gnat_param))
- 		 && Needs_Debug_Info (Actual_Subtype (gnat_param))))
- 	  {
- 	    FOR_EACH_VEC_SAFE_ELT (f_parm_attr_cache, i, pa)
- 	      if (pa->id == gnat_param && pa->dim == Dimension)
- 		break;
- 
- 	    if (!pa)
- 	      {
- 		pa = ggc_cleared_alloc<parm_attr_d> ();
- 		pa->id = gnat_param;
- 		pa->dim = Dimension;
- 		vec_safe_push (f_parm_attr_cache, pa);
- 	      }
- 	  }
- 
- 	/* Return the cached expression or build a new one.  */
- 	if (attribute == Attr_First)
- 	  {
- 	    if (pa && pa->first)
- 	      {
- 		gnu_result = pa->first;
- 		break;
- 	      }
- 
- 	    gnu_result
- 	      = TYPE_MIN_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type)));
- 	  }
- 
- 	else if (attribute == Attr_Last)
- 	  {
- 	    if (pa && pa->last)
- 	      {
- 		gnu_result = pa->last;
- 		break;
- 	      }
- 
- 	    gnu_result
- 	      = TYPE_MAX_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type)));
- 	  }
- 
- 	else /* attribute == Attr_Range_Length || attribute == Attr_Length  */
- 	  {
- 	    if (pa && pa->length)
- 	      {
- 		gnu_result = pa->length;
- 		break;
- 	      }
- 
- 	    gnu_result
- 	      = get_type_length (TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type)),
- 				 gnu_result_type);
- 	  }
- 
- 	/* If this has a PLACEHOLDER_EXPR, qualify it by the object we are
- 	   handling.  Note that these attributes could not have been used on
- 	   an unconstrained array type.  */
- 	gnu_result = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_result, gnu_prefix);
- 
- 	/* Cache the expression we have just computed.  Since we want to do it
- 	   at run time, we force the use of a SAVE_EXPR and let the gimplifier
- 	   create the temporary in the outermost binding level.  We will make
- 	   sure in Subprogram_Body_to_gnu that it is evaluated on all possible
- 	   paths by forcing its evaluation on entry of the function.  */
- 	if (pa)
- 	  {
- 	    gnu_result
- 	      = build1 (SAVE_EXPR, TREE_TYPE (gnu_result), gnu_result);
- 	    switch (attribute)
- 	      {
- 	      case Attr_First:
- 		pa->first = gnu_result;
- 		break;
- 
- 	      case Attr_Last:
- 		pa->last = gnu_result;
- 		break;
- 
- 	      case Attr_Length:
- 	      case Attr_Range_Length:
- 		pa->length = gnu_result;
- 		break;
- 
- 	      default:
- 		gcc_unreachable ();
- 	      }
- 	  }
- 
- 	/* Otherwise, evaluate it each time it is referenced.  */
- 	else
- 	  switch (attribute)
- 	    {
- 	    case Attr_First:
- 	    case Attr_Last:
- 	      /* If we are dereferencing a pointer to unconstrained array, we
- 		 need to capture the value because the pointed-to bounds may
- 		 subsequently be released.  */
- 	      if (unconstrained_ptr_deref)
- 		gnu_result
- 		  = build1 (SAVE_EXPR, TREE_TYPE (gnu_result), gnu_result);
- 	      break;
- 
- 	    case Attr_Length:
- 	    case Attr_Range_Length:
- 	      /* Set the source location onto the predicate of the condition
- 		 but not if the expression is cached to avoid messing up the
- 		 debug info.  */
- 	      if (TREE_CODE (gnu_result) == COND_EXPR
- 		  && EXPR_P (TREE_OPERAND (gnu_result, 0)))
- 		set_expr_location_from_node (TREE_OPERAND (gnu_result, 0),
- 					     gnat_node);
- 	      break;
- 
- 	    default:
- 	      gcc_unreachable ();
- 	    }
- 
- 	break;
-       }
- 
-     case Attr_Bit_Position:
-     case Attr_Position:
-     case Attr_First_Bit:
-     case Attr_Last_Bit:
-     case Attr_Bit:
-       {
- 	poly_int64 bitsize;
- 	poly_int64 bitpos;
- 	tree gnu_offset;
- 	tree gnu_field_bitpos;
- 	tree gnu_field_offset;
- 	tree gnu_inner;
- 	machine_mode mode;
- 	int unsignedp, reversep, volatilep;
- 
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 	gnu_prefix = remove_conversions (gnu_prefix, true);
- 	prefix_unused = true;
- 
- 	/* We can have 'Bit on any object, but if it isn't a COMPONENT_REF,
- 	   the result is 0.  Don't allow 'Bit on a bare component, though.  */
- 	if (attribute == Attr_Bit
- 	    && TREE_CODE (gnu_prefix) != COMPONENT_REF
- 	    && TREE_CODE (gnu_prefix) != FIELD_DECL)
- 	  {
- 	    gnu_result = integer_zero_node;
- 	    break;
- 	  }
- 
- 	else
- 	  gcc_assert (TREE_CODE (gnu_prefix) == COMPONENT_REF
- 		      || (attribute == Attr_Bit_Position
- 			  && TREE_CODE (gnu_prefix) == FIELD_DECL));
- 
- 	get_inner_reference (gnu_prefix, &bitsize, &bitpos, &gnu_offset,
- 			     &mode, &unsignedp, &reversep, &volatilep);
- 
- 	if (TREE_CODE (gnu_prefix) == COMPONENT_REF)
- 	  {
- 	    gnu_field_bitpos = bit_position (TREE_OPERAND (gnu_prefix, 1));
- 	    gnu_field_offset = byte_position (TREE_OPERAND (gnu_prefix, 1));
- 
- 	    for (gnu_inner = TREE_OPERAND (gnu_prefix, 0);
- 		 TREE_CODE (gnu_inner) == COMPONENT_REF
- 		 && DECL_INTERNAL_P (TREE_OPERAND (gnu_inner, 1));
- 		 gnu_inner = TREE_OPERAND (gnu_inner, 0))
- 	      {
- 		gnu_field_bitpos
- 		  = size_binop (PLUS_EXPR, gnu_field_bitpos,
- 				bit_position (TREE_OPERAND (gnu_inner, 1)));
- 		gnu_field_offset
- 		  = size_binop (PLUS_EXPR, gnu_field_offset,
- 				byte_position (TREE_OPERAND (gnu_inner, 1)));
- 	      }
- 	  }
- 	else if (TREE_CODE (gnu_prefix) == FIELD_DECL)
- 	  {
- 	    gnu_field_bitpos = bit_position (gnu_prefix);
- 	    gnu_field_offset = byte_position (gnu_prefix);
- 	  }
- 	else
- 	  {
- 	    gnu_field_bitpos = bitsize_zero_node;
- 	    gnu_field_offset = size_zero_node;
- 	  }
- 
- 	switch (attribute)
- 	  {
- 	  case Attr_Position:
- 	    gnu_result = gnu_field_offset;
- 	    break;
- 
- 	  case Attr_First_Bit:
- 	  case Attr_Bit:
- 	    gnu_result = size_int (num_trailing_bits (bitpos));
- 	    break;
- 
- 	  case Attr_Last_Bit:
- 	    gnu_result = bitsize_int (num_trailing_bits (bitpos));
- 	    gnu_result = size_binop (PLUS_EXPR, gnu_result,
- 				     TYPE_SIZE (TREE_TYPE (gnu_prefix)));
- 	    /* ??? Avoid a large unsigned result that will overflow when
- 	       converted to the signed universal_integer.  */
- 	    if (integer_zerop (gnu_result))
- 	      gnu_result = integer_minus_one_node;
- 	    else
- 	      gnu_result
- 		= size_binop (MINUS_EXPR, gnu_result, bitsize_one_node);
- 	    break;
- 
- 	  case Attr_Bit_Position:
- 	    gnu_result = gnu_field_bitpos;
- 	    break;
- 	  }
- 
- 	/* If this has a PLACEHOLDER_EXPR, qualify it by the object we are
- 	   handling.  */
- 	gnu_result = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_result, gnu_prefix);
- 	break;
-       }
- 
-     case Attr_Min:
-     case Attr_Max:
-       {
- 	tree gnu_lhs = gnat_to_gnu (First (Expressions (gnat_node)));
- 	tree gnu_rhs = gnat_to_gnu (Next (First (Expressions (gnat_node))));
- 
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	/* The result of {MIN,MAX}_EXPR is unspecified if either operand is
- 	   a NaN so we implement the semantics of C99 f{min,max} to make it
- 	   predictable in this case: if either operand is a NaN, the other
- 	   is returned; if both operands are NaN's, a NaN is returned.  */
- 	if (SCALAR_FLOAT_TYPE_P (gnu_result_type)
- 	    && !Machine_Overflows_On_Target)
- 	  {
- 	    const bool lhs_side_effects_p = TREE_SIDE_EFFECTS (gnu_lhs);
- 	    const bool rhs_side_effects_p = TREE_SIDE_EFFECTS (gnu_rhs);
- 	    tree t = builtin_decl_explicit (BUILT_IN_ISNAN);
- 	    tree lhs_is_nan, rhs_is_nan;
- 
- 	    /* If the operands have side-effects, they need to be evaluated
- 	       only once in spite of the multiple references in the result.  */
- 	    if (lhs_side_effects_p)
- 	      gnu_lhs = gnat_protect_expr (gnu_lhs);
- 	    if (rhs_side_effects_p)
- 	      gnu_rhs = gnat_protect_expr (gnu_rhs);
- 
- 	    lhs_is_nan = fold_build2 (NE_EXPR, boolean_type_node,
- 				      build_call_expr (t, 1, gnu_lhs),
- 				      integer_zero_node);
- 
- 	    rhs_is_nan = fold_build2 (NE_EXPR, boolean_type_node,
- 				      build_call_expr (t, 1, gnu_rhs),
- 				      integer_zero_node);
- 
- 	    gnu_result = build_binary_op (attribute == Attr_Min
- 					  ? MIN_EXPR : MAX_EXPR,
- 					  gnu_result_type, gnu_lhs, gnu_rhs);
- 	    gnu_result = fold_build3 (COND_EXPR, gnu_result_type,
- 				      rhs_is_nan, gnu_lhs, gnu_result);
- 	    gnu_result = fold_build3 (COND_EXPR, gnu_result_type,
- 				      lhs_is_nan, gnu_rhs, gnu_result);
- 
- 	    /* If the operands have side-effects, they need to be evaluated
- 	       before doing the tests above since the place they otherwise
- 	       would end up being evaluated at run time could be wrong.  */
- 	    if (lhs_side_effects_p)
- 	      gnu_result
- 		= build2 (COMPOUND_EXPR, gnu_result_type, gnu_lhs, gnu_result);
- 
- 	    if (rhs_side_effects_p)
- 	      gnu_result
- 		= build2 (COMPOUND_EXPR, gnu_result_type, gnu_rhs, gnu_result);
- 	  }
- 	else
- 	  gnu_result = build_binary_op (attribute == Attr_Min
- 					? MIN_EXPR : MAX_EXPR,
- 					gnu_result_type, gnu_lhs, gnu_rhs);
-       }
-       break;
- 
-     case Attr_Passed_By_Reference:
-       gnu_result = size_int (default_pass_by_ref (gnu_type)
- 			     || must_pass_by_ref (gnu_type));
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       break;
- 
-     case Attr_Component_Size:
-       gnu_prefix = maybe_padded_object (gnu_prefix);
-       gnu_type = TREE_TYPE (gnu_prefix);
- 
-       if (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE)
- 	gnu_type = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_type))));
- 
-       while (TREE_CODE (TREE_TYPE (gnu_type)) == ARRAY_TYPE
- 	     && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type)))
- 	gnu_type = TREE_TYPE (gnu_type);
- 
-       gcc_assert (TREE_CODE (gnu_type) == ARRAY_TYPE);
- 
-       /* Note this size cannot be self-referential.  */
-       gnu_result = TYPE_SIZE (TREE_TYPE (gnu_type));
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       prefix_unused = true;
-       break;
- 
-     case Attr_Descriptor_Size:
-       gnu_type = TREE_TYPE (gnu_prefix);
-       gcc_assert (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE);
- 
-       /* Return the padded size of the template in the object record type.  */
-       gnu_type = TYPE_OBJECT_RECORD_TYPE (gnu_type);
-       gnu_result = bit_position (DECL_CHAIN (TYPE_FIELDS (gnu_type)));
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       prefix_unused = true;
-       break;
- 
-     case Attr_Null_Parameter:
-       /* This is just a zero cast to the pointer type for our prefix and
- 	 dereferenced.  */
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       gnu_result
- 	= build_unary_op (INDIRECT_REF, NULL_TREE,
- 			  convert (build_pointer_type (gnu_result_type),
- 				   integer_zero_node));
-       break;
- 
-     case Attr_Mechanism_Code:
-       {
- 	Entity_Id gnat_obj = Entity (gnat_prefix);
- 	int code;
- 
- 	prefix_unused = true;
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 	if (Present (Expressions (gnat_node)))
- 	  {
- 	    int i = UI_To_Int (Intval (First (Expressions (gnat_node))));
- 
- 	    for (gnat_obj = First_Formal (gnat_obj); i > 1;
- 		 i--, gnat_obj = Next_Formal (gnat_obj))
- 	      ;
- 	  }
- 
- 	code = Mechanism (gnat_obj);
- 	if (code == Default)
- 	  code = ((present_gnu_tree (gnat_obj)
- 		   && (DECL_BY_REF_P (get_gnu_tree (gnat_obj))
- 		       || ((TREE_CODE (get_gnu_tree (gnat_obj))
- 			    == PARM_DECL)
- 			   && (DECL_BY_COMPONENT_PTR_P
- 			       (get_gnu_tree (gnat_obj))))))
- 		  ? By_Reference : By_Copy);
- 	gnu_result = convert (gnu_result_type, size_int (- code));
-       }
-       break;
- 
-     case Attr_Model:
-       /* We treat Model as identical to Machine.  This is true for at least
- 	 IEEE and some other nice floating-point systems.  */
- 
-       /* ... fall through ... */
- 
-     case Attr_Machine:
-       /* The trick is to force the compiler to store the result in memory so
- 	 that we do not have extra precision used.  But do this only when this
- 	 is necessary, i.e. if FP_ARITH_MAY_WIDEN is true and the precision of
- 	 the type is lower than that of the longest floating-point type.  */
-       prefix_unused = true;
-       gnu_expr = gnat_to_gnu (First (Expressions (gnat_node)));
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       gnu_result = convert (gnu_result_type, gnu_expr);
- 
-       if (TREE_CODE (gnu_result) != REAL_CST
- 	  && fp_arith_may_widen
- 	  && TYPE_PRECISION (gnu_result_type)
- 	     < TYPE_PRECISION (longest_float_type_node))
- 	{
- 	  tree rec_type = make_node (RECORD_TYPE);
- 	  tree field
- 	    = create_field_decl (get_identifier ("OBJ"), gnu_result_type,
- 				 rec_type, NULL_TREE, NULL_TREE, 0, 0);
- 	  tree rec_val, asm_expr;
- 
- 	  finish_record_type (rec_type, field, 0, false);
- 
- 	  rec_val = build_constructor_single (rec_type, field, gnu_result);
- 	  rec_val = build1 (SAVE_EXPR, rec_type, rec_val);
- 
- 	  asm_expr
- 	    = build5 (ASM_EXPR, void_type_node,
- 		      build_string (0, ""),
- 		      tree_cons (build_tree_list (NULL_TREE,
- 						  build_string (2, "=m")),
- 				 rec_val, NULL_TREE),
- 		      tree_cons (build_tree_list (NULL_TREE,
- 						  build_string (1, "m")),
- 				 rec_val, NULL_TREE),
- 		      NULL_TREE, NULL_TREE);
- 	  ASM_VOLATILE_P (asm_expr) = 1;
- 
- 	  gnu_result
- 	    = build_compound_expr (gnu_result_type, asm_expr,
- 				   build_component_ref (rec_val, field,
- 							false));
- 	}
-       break;
- 
-     case Attr_Deref:
-       prefix_unused = true;
-       gnu_expr = gnat_to_gnu (First (Expressions (gnat_node)));
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       /* This can be a random address so build an alias-all pointer type.  */
-       gnu_expr
- 	= convert (build_pointer_type_for_mode (gnu_result_type, ptr_mode,
- 						true),
- 		   gnu_expr);
-       gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_expr);
-       break;
- 
-     default:
-       /* This abort means that we have an unimplemented attribute.  */
-       gcc_unreachable ();
-     }
- 
-   /* If this is an attribute where the prefix was unused, force a use of it if
-      it has a side-effect.  But don't do it if the prefix is just an entity
-      name.  However, if an access check is needed, we must do it.  See second
-      example in AARM 11.6(5.e).  */
-   if (prefix_unused
-       && TREE_SIDE_EFFECTS (gnu_prefix)
-       && !Is_Entity_Name (gnat_prefix))
-     gnu_result
-       = build_compound_expr (TREE_TYPE (gnu_result), gnu_prefix, gnu_result);
- 
-   *gnu_result_type_p = gnu_result_type;
-   return gnu_result;
- }
- 
- /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Case_Statement,
-    to a GCC tree, which is returned.  */
- 
- static tree
- Case_Statement_to_gnu (Node_Id gnat_node)
- {
-   tree gnu_result, gnu_expr, gnu_type, gnu_label;
-   Node_Id gnat_when;
-   location_t end_locus;
-   bool may_fallthru = false;
- 
-   gnu_expr = gnat_to_gnu (Expression (gnat_node));
-   gnu_expr = convert (get_base_type (TREE_TYPE (gnu_expr)), gnu_expr);
-   gnu_expr = maybe_character_value (gnu_expr);
-   gnu_type = TREE_TYPE (gnu_expr);
- 
-   /* We build a SWITCH_EXPR that contains the code with interspersed
-      CASE_LABEL_EXPRs for each label.  */
-   if (!Sloc_to_locus (End_Location (gnat_node), &end_locus))
-     end_locus = input_location;
-   gnu_label = create_artificial_label (end_locus);
-   start_stmt_group ();
- 
-   for (gnat_when = First_Non_Pragma (Alternatives (gnat_node));
-        Present (gnat_when);
-        gnat_when = Next_Non_Pragma (gnat_when))
-     {
-       bool choices_added_p = false;
-       Node_Id gnat_choice;
- 
-       /* First compile all the different case choices for the current WHEN
- 	 alternative.  */
-       for (gnat_choice = First (Discrete_Choices (gnat_when));
- 	   Present (gnat_choice);
- 	   gnat_choice = Next (gnat_choice))
- 	{
- 	  tree gnu_low = NULL_TREE, gnu_high = NULL_TREE;
- 	  tree label = create_artificial_label (input_location);
- 
- 	  switch (Nkind (gnat_choice))
- 	    {
- 	    case N_Range:
- 	      gnu_low = gnat_to_gnu (Low_Bound (gnat_choice));
- 	      gnu_high = gnat_to_gnu (High_Bound (gnat_choice));
- 	      break;
- 
- 	    case N_Subtype_Indication:
- 	      gnu_low = gnat_to_gnu (Low_Bound (Range_Expression
- 						(Constraint (gnat_choice))));
- 	      gnu_high = gnat_to_gnu (High_Bound (Range_Expression
- 						  (Constraint (gnat_choice))));
- 	      break;
- 
- 	    case N_Identifier:
- 	    case N_Expanded_Name:
- 	      /* This represents either a subtype range or a static value of
- 		 some kind; Ekind says which.  */
- 	      if (Is_Type (Entity (gnat_choice)))
- 		{
- 		  tree gnu_type = get_unpadded_type (Entity (gnat_choice));
- 
- 		  gnu_low = TYPE_MIN_VALUE (gnu_type);
- 		  gnu_high = TYPE_MAX_VALUE (gnu_type);
- 		  break;
- 		}
- 
- 	      /* ... fall through ... */
- 
- 	    case N_Character_Literal:
- 	    case N_Integer_Literal:
- 	      gnu_low = gnat_to_gnu (gnat_choice);
- 	      break;
- 
- 	    case N_Others_Choice:
- 	      break;
- 
- 	    default:
- 	      gcc_unreachable ();
- 	    }
- 
- 	  /* Everything should be folded into constants at this point.  */
- 	  gcc_assert (!gnu_low  || TREE_CODE (gnu_low)  == INTEGER_CST);
- 	  gcc_assert (!gnu_high || TREE_CODE (gnu_high) == INTEGER_CST);
- 
- 	  if (gnu_low && TREE_TYPE (gnu_low) != gnu_type)
- 	    gnu_low = convert (gnu_type, gnu_low);
- 	  if (gnu_high && TREE_TYPE (gnu_high) != gnu_type)
- 	    gnu_high = convert (gnu_type, gnu_high);
- 
- 	  add_stmt_with_node (build_case_label (gnu_low, gnu_high, label),
- 			      gnat_choice);
- 	  choices_added_p = true;
- 	}
- 
-       /* This construct doesn't define a scope so we shouldn't push a binding
- 	 level around the statement list.  Except that we have always done so
- 	 historically and this makes it possible to reduce stack usage.  As a
- 	 compromise, we keep doing it for case statements, for which this has
- 	 never been problematic, but not for case expressions in Ada 2012.  */
-       if (choices_added_p)
- 	{
- 	  const bool is_case_expression
- 	    = (Nkind (Parent (gnat_node)) == N_Expression_With_Actions);
- 	  tree group
- 	    = build_stmt_group (Statements (gnat_when), !is_case_expression);
- 	  bool group_may_fallthru = block_may_fallthru (group);
- 	  add_stmt (group);
- 	  if (group_may_fallthru)
- 	    {
- 	      tree stmt = build1 (GOTO_EXPR, void_type_node, gnu_label);
- 	      SET_EXPR_LOCATION (stmt, end_locus);
- 	      add_stmt (stmt);
- 	      may_fallthru = true;
- 	    }
- 	}
-     }
- 
-   /* Now emit a definition of the label the cases branch to, if any.  */
-   if (may_fallthru)
-     add_stmt (build1 (LABEL_EXPR, void_type_node, gnu_label));
-   gnu_result = build2 (SWITCH_EXPR, gnu_type, gnu_expr, end_stmt_group ());
- 
-   return gnu_result;
- }
- 
- /* Return true if we are in the body of a loop.  */
- 
- static inline bool
- inside_loop_p (void)
- {
-   return !vec_safe_is_empty (gnu_loop_stack);
- }
- 
- /* Find out whether EXPR is a simple additive expression based on the iteration
-    variable of some enclosing loop in the current function.  If so, return the
-    loop and set *DISP to the displacement and *NEG_P to true if this is for a
-    subtraction; otherwise, return NULL.  */
- 
- static struct loop_info_d *
- find_loop_for (tree expr, tree *disp, bool *neg_p)
- {
-   tree var, add, cst;
-   bool minus_p;
-   struct loop_info_d *iter = NULL;
-   unsigned int i;
- 
-   if (is_simple_additive_expression (expr, &add, &cst, &minus_p))
-     {
-       var = add;
-       if (disp)
- 	*disp = cst;
-       if (neg_p)
- 	*neg_p = minus_p;
-     }
-   else
-     {
-       var = expr;
-       if (disp)
- 	*disp =  NULL_TREE;
-       if (neg_p)
- 	*neg_p = false;
-     }
- 
-   var = remove_conversions (var, false);
- 
-   if (TREE_CODE (var) != VAR_DECL)
-     return NULL;
- 
-   if (decl_function_context (var) != current_function_decl)
-     return NULL;
- 
-   gcc_assert (vec_safe_length (gnu_loop_stack) > 0);
- 
-   FOR_EACH_VEC_ELT_REVERSE (*gnu_loop_stack, i, iter)
-     if (var == iter->loop_var)
-       break;
- 
-   return iter;
- }
- 
- /* Return true if VAL (of type TYPE) can equal the minimum value if MAX is
-    false, or the maximum value if MAX is true, of TYPE.  */
- 
- static bool
- can_equal_min_or_max_val_p (tree val, tree type, bool max)
- {
-   tree min_or_max_val = (max ? TYPE_MAX_VALUE (type) : TYPE_MIN_VALUE (type));
- 
-   if (TREE_CODE (min_or_max_val) != INTEGER_CST)
-     return true;
- 
-   if (TREE_CODE (val) == NOP_EXPR)
-     val = (max
- 	   ? TYPE_MAX_VALUE (TREE_TYPE (TREE_OPERAND (val, 0)))
- 	   : TYPE_MIN_VALUE (TREE_TYPE (TREE_OPERAND (val, 0))));
- 
-   if (TREE_CODE (val) != INTEGER_CST)
-     return true;
- 
-   if (max)
-     return tree_int_cst_lt (val, min_or_max_val) == 0;
-   else
-     return tree_int_cst_lt (min_or_max_val, val) == 0;
- }
- 
- /* Return true if VAL (of type TYPE) can equal the minimum value of TYPE.
-    If REVERSE is true, minimum value is taken as maximum value.  */
- 
- static inline bool
- can_equal_min_val_p (tree val, tree type, bool reverse)
- {
-   return can_equal_min_or_max_val_p (val, type, reverse);
- }
- 
- /* Return true if VAL (of type TYPE) can equal the maximum value of TYPE.
-    If REVERSE is true, maximum value is taken as minimum value.  */
- 
- static inline bool
- can_equal_max_val_p (tree val, tree type, bool reverse)
- {
-   return can_equal_min_or_max_val_p (val, type, !reverse);
- }
- 
- /* Replace EXPR1 and EXPR2 by invariant expressions if possible.  Return
-    true if both expressions have been replaced and false otherwise.  */
- 
- static bool
- make_invariant (tree *expr1, tree *expr2)
- {
-   tree inv_expr1 = gnat_invariant_expr (*expr1);
-   tree inv_expr2 = gnat_invariant_expr (*expr2);
- 
-   if (inv_expr1)
-     *expr1 = inv_expr1;
- 
-   if (inv_expr2)
-     *expr2 = inv_expr2;
- 
-   return inv_expr1 && inv_expr2;
- }
- 
- /* Helper function for walk_tree, used by independent_iterations_p below.  */
- 
- static tree
- scan_rhs_r (tree *tp, int *walk_subtrees, void *data)
- {
-   bitmap *params = (bitmap *)data;
-   tree t = *tp;
- 
-   /* No need to walk into types or decls.  */
-   if (IS_TYPE_OR_DECL_P (t))
-     *walk_subtrees = 0;
- 
-   if (TREE_CODE (t) == PARM_DECL && bitmap_bit_p (*params, DECL_UID (t)))
-     return t;
- 
-   return NULL_TREE;
- }
- 
- /* Return true if STMT_LIST generates independent iterations in a loop.  */
- 
- static bool
- independent_iterations_p (tree stmt_list)
- {
-   tree_stmt_iterator tsi;
-   bitmap params = BITMAP_GGC_ALLOC();
-   auto_vec<tree, 16> rhs;
-   tree iter;
-   int i;
- 
-   if (TREE_CODE (stmt_list) == BIND_EXPR)
-     stmt_list = BIND_EXPR_BODY (stmt_list);
- 
-   /* Scan the list and return false on anything that is not either a check
-      or an assignment to a parameter with restricted aliasing.  */
-   for (tsi = tsi_start (stmt_list); !tsi_end_p (tsi); tsi_next (&tsi))
-     {
-       tree stmt = tsi_stmt (tsi);
- 
-       switch (TREE_CODE (stmt))
- 	{
- 	case COND_EXPR:
- 	  {
- 	    if (COND_EXPR_ELSE (stmt))
- 	      return false;
- 	    if (TREE_CODE (COND_EXPR_THEN (stmt)) != CALL_EXPR)
- 	      return false;
- 	    tree func = get_callee_fndecl (COND_EXPR_THEN (stmt));
- 	    if (!(func && TREE_THIS_VOLATILE (func)))
- 	      return false;
- 	    break;
- 	  }
- 
- 	case MODIFY_EXPR:
- 	  {
- 	    tree lhs = TREE_OPERAND (stmt, 0);
- 	    while (handled_component_p (lhs))
- 	      lhs = TREE_OPERAND (lhs, 0);
- 	    if (TREE_CODE (lhs) != INDIRECT_REF)
- 	      return false;
- 	    lhs = TREE_OPERAND (lhs, 0);
- 	    if (!(TREE_CODE (lhs) == PARM_DECL
- 		  && DECL_RESTRICTED_ALIASING_P (lhs)))
- 	      return false;
- 	    bitmap_set_bit (params, DECL_UID (lhs));
- 	    rhs.safe_push (TREE_OPERAND (stmt, 1));
- 	    break;
- 	  }
- 
- 	default:
- 	  return false;
- 	}
-     }
- 
-   /* At this point we know that the list contains only statements that will
-      modify parameters with restricted aliasing.  Check that the statements
-      don't at the time read from these parameters.  */
-   FOR_EACH_VEC_ELT (rhs, i, iter)
-     if (walk_tree_without_duplicates (&iter, scan_rhs_r, &params))
-       return false;
- 
-   return true;
- }
- 
- /* Helper for Loop_Statement_to_gnu, to translate the body of a loop not
-    subject to any sort of parallelization directive or restriction, designated
-    by GNAT_NODE.
- 
-    We expect the top of gnu_loop_stack to hold a pointer to the loop info
-    setup for the translation, which holds a pointer to the initial gnu loop
-    stmt node.  We return the new gnu loop statement to use.
- 
-    We might also set *GNU_COND_EXPR_P to request a variant of the translation
-    scheme in Loop_Statement_to_gnu.  */
- 
- static tree
- Regular_Loop_to_gnu (Node_Id gnat_node, tree *gnu_cond_expr_p)
- {
-   const Node_Id gnat_iter_scheme = Iteration_Scheme (gnat_node);
-   struct loop_info_d *const gnu_loop_info = gnu_loop_stack->last ();
-   tree gnu_loop_stmt = gnu_loop_info->stmt;
-   tree gnu_loop_label = LOOP_STMT_LABEL (gnu_loop_stmt);
-   tree gnu_cond_expr = *gnu_cond_expr_p;
-   tree gnu_low = NULL_TREE, gnu_high = NULL_TREE;
- 
-   /* Set the condition under which the loop must keep going.  If we have an
-      explicit condition, use it to set the location information throughout
-      the translation of the loop statement to avoid having multiple SLOCs.
- 
-      For the case "LOOP .... END LOOP;" the condition is always true.  */
-   if (No (gnat_iter_scheme))
-     ;
- 
-   /* For the case "WHILE condition LOOP ..... END LOOP;" it's immediate.  */
-   else if (Present (Condition (gnat_iter_scheme)))
-     {
-       LOOP_STMT_COND (gnu_loop_stmt)
- 	= gnat_to_gnu (Condition (gnat_iter_scheme));
- 
-       set_expr_location_from_node (gnu_loop_stmt, gnat_iter_scheme);
-     }
- 
-   /* Otherwise we have an iteration scheme and the condition is given by the
-      bounds of the subtype of the iteration variable.  */
-   else
-     {
-       Node_Id gnat_loop_spec = Loop_Parameter_Specification (gnat_iter_scheme);
-       Entity_Id gnat_loop_var = Defining_Entity (gnat_loop_spec);
-       Entity_Id gnat_type = Etype (gnat_loop_var);
-       tree gnu_type = get_unpadded_type (gnat_type);
-       tree gnu_base_type = maybe_character_type (get_base_type (gnu_type));
-       tree gnu_one_node = build_int_cst (gnu_base_type, 1);
-       tree gnu_loop_var, gnu_loop_iv, gnu_first, gnu_last, gnu_stmt;
-       enum tree_code update_code, test_code, shift_code;
-       bool reverse = Reverse_Present (gnat_loop_spec), use_iv = false;
- 
-       gnu_low = convert (gnu_base_type, TYPE_MIN_VALUE (gnu_type));
-       gnu_high = convert (gnu_base_type, TYPE_MAX_VALUE (gnu_type));
- 
-       /* We must disable modulo reduction for the iteration variable, if any,
- 	 in order for the loop comparison to be effective.  */
-       if (reverse)
- 	{
- 	  gnu_first = gnu_high;
- 	  gnu_last = gnu_low;
- 	  update_code = MINUS_NOMOD_EXPR;
- 	  test_code = GE_EXPR;
- 	  shift_code = PLUS_NOMOD_EXPR;
- 	}
-       else
- 	{
- 	  gnu_first = gnu_low;
- 	  gnu_last = gnu_high;
- 	  update_code = PLUS_NOMOD_EXPR;
- 	  test_code = LE_EXPR;
- 	  shift_code = MINUS_NOMOD_EXPR;
- 	}
- 
-       /* We use two different strategies to translate the loop, depending on
- 	 whether optimization is enabled.
- 
- 	 If it is, we generate the canonical loop form expected by the loop
- 	 optimizer and the loop vectorizer, which is the do-while form:
- 
- 	     ENTRY_COND
- 	   loop:
- 	     TOP_UPDATE
- 	     BODY
- 	     BOTTOM_COND
- 	     GOTO loop
- 
- 	 This avoids an implicit dependency on loop header copying and makes
- 	 it possible to turn BOTTOM_COND into an inequality test.
- 
- 	 If optimization is disabled, loop header copying doesn't come into
- 	 play and we try to generate the loop form with the fewer conditional
- 	 branches.  First, the default form, which is:
- 
- 	   loop:
- 	     TOP_COND
- 	     BODY
- 	     BOTTOM_UPDATE
- 	     GOTO loop
- 
- 	 It should catch most loops with constant ending point.  Then, if we
- 	 cannot, we try to generate the shifted form:
- 
- 	   loop:
- 	     TOP_COND
- 	     TOP_UPDATE
- 	     BODY
- 	     GOTO loop
- 
- 	 which should catch loops with constant starting point.  Otherwise, if
- 	 we cannot, we generate the fallback form:
- 
- 	     ENTRY_COND
- 	   loop:
- 	     BODY
- 	     BOTTOM_COND
- 	     BOTTOM_UPDATE
- 	     GOTO loop
- 
- 	 which works in all cases.  */
- 
-       if (optimize && !optimize_debug)
- 	{
- 	  /* We can use the do-while form directly if GNU_FIRST-1 doesn't
- 	     overflow.  */
- 	  if (!can_equal_min_val_p (gnu_first, gnu_base_type, reverse))
- 	    ;
- 
- 	  /* Otherwise, use the do-while form with the help of a special
- 	     induction variable in the unsigned version of the base type
- 	     or the unsigned version of the size type, whichever is the
- 	     largest, in order to have wrap-around arithmetics for it.  */
- 	  else
- 	    {
- 	      if (TYPE_PRECISION (gnu_base_type)
- 		  > TYPE_PRECISION (size_type_node))
- 		gnu_base_type
- 		  = gnat_type_for_size (TYPE_PRECISION (gnu_base_type), 1);
- 	      else
- 		gnu_base_type = size_type_node;
- 
- 	      gnu_first = convert (gnu_base_type, gnu_first);
- 	      gnu_last = convert (gnu_base_type, gnu_last);
- 	      gnu_one_node = build_int_cst (gnu_base_type, 1);
- 	      use_iv = true;
- 	    }
- 
- 	  gnu_first
- 	    = build_binary_op (shift_code, gnu_base_type, gnu_first,
- 			       gnu_one_node);
- 	  LOOP_STMT_TOP_UPDATE_P (gnu_loop_stmt) = 1;
- 	  LOOP_STMT_BOTTOM_COND_P (gnu_loop_stmt) = 1;
- 	}
-       else
- 	{
- 	  /* We can use the default form if GNU_LAST+1 doesn't overflow.  */
- 	  if (!can_equal_max_val_p (gnu_last, gnu_base_type, reverse))
- 	    ;
- 
- 	  /* Otherwise, we can use the shifted form if neither GNU_FIRST-1 nor
- 	     GNU_LAST-1 does.  */
- 	  else if (!can_equal_min_val_p (gnu_first, gnu_base_type, reverse)
- 		   && !can_equal_min_val_p (gnu_last, gnu_base_type, reverse))
- 	    {
- 	      gnu_first
- 		= build_binary_op (shift_code, gnu_base_type, gnu_first,
- 				   gnu_one_node);
- 	      gnu_last
- 		= build_binary_op (shift_code, gnu_base_type, gnu_last,
- 				   gnu_one_node);
- 	      LOOP_STMT_TOP_UPDATE_P (gnu_loop_stmt) = 1;
- 	    }
- 
- 	  /* Otherwise, use the fallback form.  */
- 	  else
- 	    LOOP_STMT_BOTTOM_COND_P (gnu_loop_stmt) = 1;
- 	}
- 
-       /* If we use the BOTTOM_COND, we can turn the test into an inequality
- 	 test but we have to add ENTRY_COND to protect the empty loop.  */
-       if (LOOP_STMT_BOTTOM_COND_P (gnu_loop_stmt))
- 	{
- 	  test_code = NE_EXPR;
- 	  gnu_cond_expr
- 	    = build3 (COND_EXPR, void_type_node,
- 		      build_binary_op (LE_EXPR, boolean_type_node,
- 				       gnu_low, gnu_high),
- 		      NULL_TREE, alloc_stmt_list ());
- 	  set_expr_location_from_node (gnu_cond_expr, gnat_iter_scheme);
- 	}
- 
-       /* Open a new nesting level that will surround the loop to declare the
- 	 iteration variable.  */
-       start_stmt_group ();
-       gnat_pushlevel ();
- 
-       /* If we use the special induction variable, create it and set it to
- 	 its initial value.  Morever, the regular iteration variable cannot
- 	 itself be initialized, lest the initial value wrapped around.  */
-       if (use_iv)
- 	{
- 	  gnu_loop_iv
- 	    = create_init_temporary ("I", gnu_first, &gnu_stmt, gnat_loop_var);
- 	  add_stmt (gnu_stmt);
- 	  gnu_first = NULL_TREE;
- 	}
-       else
- 	gnu_loop_iv = NULL_TREE;
- 
-       /* Declare the iteration variable and set it to its initial value.  */
-       gnu_loop_var = gnat_to_gnu_entity (gnat_loop_var, gnu_first, true);
-       if (DECL_BY_REF_P (gnu_loop_var))
- 	gnu_loop_var = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_loop_var);
-       else if (use_iv)
- 	{
- 	  gcc_assert (DECL_LOOP_PARM_P (gnu_loop_var));
- 	  SET_DECL_INDUCTION_VAR (gnu_loop_var, gnu_loop_iv);
- 	}
-       gnu_loop_info->loop_var = gnu_loop_var;
-       gnu_loop_info->low_bound = gnu_low;
-       gnu_loop_info->high_bound = gnu_high;
- 
-       /* Do all the arithmetics in the base type.  */
-       gnu_loop_var = convert (gnu_base_type, gnu_loop_var);
- 
-       /* Set either the top or bottom exit condition.  */
-       if (use_iv)
-         LOOP_STMT_COND (gnu_loop_stmt)
- 	  = build_binary_op (test_code, boolean_type_node, gnu_loop_iv,
- 			     gnu_last);
-       else
-         LOOP_STMT_COND (gnu_loop_stmt)
- 	  = build_binary_op (test_code, boolean_type_node, gnu_loop_var,
- 			     gnu_last);
- 
-       /* Set either the top or bottom update statement and give it the source
- 	 location of the iteration for better coverage info.  */
-       if (use_iv)
- 	{
- 	  gnu_stmt
- 	    = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_loop_iv,
- 			       build_binary_op (update_code, gnu_base_type,
- 						gnu_loop_iv, gnu_one_node));
- 	  set_expr_location_from_node (gnu_stmt, gnat_iter_scheme);
- 	  append_to_statement_list (gnu_stmt,
- 				    &LOOP_STMT_UPDATE (gnu_loop_stmt));
- 	  gnu_stmt
- 	    = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_loop_var,
- 			       gnu_loop_iv);
- 	  set_expr_location_from_node (gnu_stmt, gnat_iter_scheme);
- 	  append_to_statement_list (gnu_stmt,
- 				    &LOOP_STMT_UPDATE (gnu_loop_stmt));
- 	}
-       else
- 	{
- 	  gnu_stmt
- 	    = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_loop_var,
- 			       build_binary_op (update_code, gnu_base_type,
- 						gnu_loop_var, gnu_one_node));
- 	  set_expr_location_from_node (gnu_stmt, gnat_iter_scheme);
- 	  LOOP_STMT_UPDATE (gnu_loop_stmt) = gnu_stmt;
- 	}
- 
-       set_expr_location_from_node (gnu_loop_stmt, gnat_iter_scheme);
-     }
- 
-   /* If the loop was named, have the name point to this loop.  In this case,
-      the association is not a DECL node, but the end label of the loop.  */
-   if (Present (Identifier (gnat_node)))
-     save_gnu_tree (Entity (Identifier (gnat_node)), gnu_loop_label, true);
- 
-   /* Make the loop body into its own block, so any allocated storage will be
-      released every iteration.  This is needed for stack allocation.  */
-   LOOP_STMT_BODY (gnu_loop_stmt)
-     = build_stmt_group (Statements (gnat_node), true);
-   TREE_SIDE_EFFECTS (gnu_loop_stmt) = 1;
- 
-   /* If we have an iteration scheme, then we are in a statement group.  Add
-      the LOOP_STMT to it, finish it and make it the "loop".  */
-   if (Present (gnat_iter_scheme) && No (Condition (gnat_iter_scheme)))
-     {
-       /* First, if we have computed invariant conditions for range (or index)
- 	 checks applied to the iteration variable, find out whether they can
- 	 be evaluated to false at compile time; otherwise, if there are not
- 	 too many of them, combine them with the original checks.  If loop
- 	 unswitching is enabled, do not require the loop bounds to be also
- 	 invariant, as their evaluation will still be ahead of the loop.  */
-       if (vec_safe_length (gnu_loop_info->checks) > 0
- 	 && (make_invariant (&gnu_low, &gnu_high) || optimize >= 3))
- 	{
- 	  struct range_check_info_d *rci;
- 	  unsigned int i, n_remaining_checks = 0;
- 
- 	  FOR_EACH_VEC_ELT (*gnu_loop_info->checks, i, rci)
- 	    {
- 	      tree low_ok, high_ok;
- 
- 	      if (rci->low_bound)
- 		{
- 		  tree gnu_adjusted_low = convert (rci->type, gnu_low);
- 		  if (rci->disp)
- 		    gnu_adjusted_low
- 		      = fold_build2 (rci->neg_p ? MINUS_EXPR : PLUS_EXPR,
- 				     rci->type, gnu_adjusted_low, rci->disp);
- 		  low_ok
- 		    = build_binary_op (GE_EXPR, boolean_type_node,
- 				       gnu_adjusted_low, rci->low_bound);
- 		}
- 	      else
- 		low_ok = boolean_true_node;
- 
- 	      if (rci->high_bound)
- 		{
- 		  tree gnu_adjusted_high = convert (rci->type, gnu_high);
- 		  if (rci->disp)
- 		    gnu_adjusted_high
- 		      = fold_build2 (rci->neg_p ? MINUS_EXPR : PLUS_EXPR,
- 				     rci->type, gnu_adjusted_high, rci->disp);
- 		  high_ok
- 		    = build_binary_op (LE_EXPR, boolean_type_node,
- 				       gnu_adjusted_high, rci->high_bound);
- 		}
- 	      else
- 		high_ok = boolean_true_node;
- 
- 	      tree range_ok
- 		= build_binary_op (TRUTH_ANDIF_EXPR, boolean_type_node,
- 				   low_ok, high_ok);
- 
- 	      rci->invariant_cond
- 		= build_unary_op (TRUTH_NOT_EXPR, boolean_type_node, range_ok);
- 
- 	      if (rci->invariant_cond == boolean_false_node)
- 		TREE_OPERAND (rci->inserted_cond, 0) = rci->invariant_cond;
- 	      else
- 		n_remaining_checks++;
- 	    }
- 
- 	  /* Note that loop unswitching can only be applied a small number of
- 	     times to a given loop (PARAM_MAX_UNSWITCH_LEVEL default to 3).  */
- 	  if (IN_RANGE (n_remaining_checks, 1, 3)
- 	      && optimize >= 2
- 	      && !optimize_size)
- 	    FOR_EACH_VEC_ELT (*gnu_loop_info->checks, i, rci)
- 	      if (rci->invariant_cond != boolean_false_node)
- 		{
- 		  TREE_OPERAND (rci->inserted_cond, 0) = rci->invariant_cond;
- 
- 		  if (optimize >= 3)
- 		    add_stmt_with_node_force (rci->inserted_cond, gnat_node);
- 		}
- 	}
- 
-       /* Second, if loop vectorization is enabled and the iterations of the
- 	 loop can easily be proved as independent, mark the loop.  */
-       if (optimize >= 3
- 	  && independent_iterations_p (LOOP_STMT_BODY (gnu_loop_stmt)))
- 	LOOP_STMT_IVDEP (gnu_loop_stmt) = 1;
- 
-       add_stmt (gnu_loop_stmt);
-       gnat_poplevel ();
-       gnu_loop_stmt = end_stmt_group ();
-     }
- 
-   *gnu_cond_expr_p = gnu_cond_expr;
- 
-   return gnu_loop_stmt;
- }
- 
- /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Loop_Statement,
-    to a GCC tree, which is returned.  */
- 
- static tree
- Loop_Statement_to_gnu (Node_Id gnat_node)
- {
-   struct loop_info_d *gnu_loop_info = ggc_cleared_alloc<loop_info_d> ();
- 
-   tree gnu_loop_stmt = build4 (LOOP_STMT, void_type_node, NULL_TREE,
- 			       NULL_TREE, NULL_TREE, NULL_TREE);
-   tree gnu_cond_expr = NULL_TREE;
-   tree gnu_loop_label = create_artificial_label (input_location);
-   tree gnu_result;
- 
-   /* Push the loop_info structure associated with the LOOP_STMT.  */
-   vec_safe_push (gnu_loop_stack, gnu_loop_info);
- 
-   /* Set location information for statement and end label.  */
-   set_expr_location_from_node (gnu_loop_stmt, gnat_node);
-   Sloc_to_locus (Sloc (End_Label (gnat_node)),
- 		 &DECL_SOURCE_LOCATION (gnu_loop_label));
-   LOOP_STMT_LABEL (gnu_loop_stmt) = gnu_loop_label;
- 
-   /* Save the statement for later reuse.  */
-   gnu_loop_info->stmt = gnu_loop_stmt;
- 
-   /* Perform the core loop body translation.  */
-   gnu_loop_stmt = Regular_Loop_to_gnu (gnat_node, &gnu_cond_expr);
- 
-   /* If we have an outer COND_EXPR, that's our result and this loop is its
-      "true" statement.  Otherwise, the result is the LOOP_STMT.  */
-   if (gnu_cond_expr)
-     {
-       COND_EXPR_THEN (gnu_cond_expr) = gnu_loop_stmt;
-       TREE_SIDE_EFFECTS (gnu_cond_expr) = 1;
-       gnu_result = gnu_cond_expr;
-     }
-   else
-     gnu_result = gnu_loop_stmt;
- 
-   gnu_loop_stack->pop ();
- 
-   return gnu_result;
- }
- 
- /* This page implements a form of Named Return Value optimization modeled
-    on the C++ optimization of the same name.  The main difference is that
-    we disregard any semantical considerations when applying it here, the
-    counterpart being that we don't try to apply it to semantically loaded
-    return types, i.e. types with the TYPE_BY_REFERENCE_P flag set.
- 
-    We consider a function body of the following GENERIC form:
- 
-      return_type R1;
-        [...]
-      RETURN_EXPR [<retval> = ...]
-        [...]
-      RETURN_EXPR [<retval> = R1]
-        [...]
-      return_type Ri;
-        [...]
-      RETURN_EXPR [<retval> = ...]
-        [...]
-      RETURN_EXPR [<retval> = Ri]
-        [...]
- 
-    where the Ri are not addressable and we try to fulfill a simple criterion
-    that would make it possible to replace one or several Ri variables by the
-    single RESULT_DECL of the function.
- 
-    The first observation is that RETURN_EXPRs that don't directly reference
-    any of the Ri variables on the RHS of their assignment are transparent wrt
-    the optimization.  This is because the Ri variables aren't addressable so
-    any transformation applied to them doesn't affect the RHS; moreover, the
-    assignment writes the full <retval> object so existing values are entirely
-    discarded.
- 
-    This property can be extended to some forms of RETURN_EXPRs that reference
-    the Ri variables, for example CONSTRUCTORs, but isn't true in the general
-    case, in particular when function calls are involved.
- 
-    Therefore the algorithm is as follows:
- 
-      1. Collect the list of candidates for a Named Return Value (Ri variables
- 	on the RHS of assignments of RETURN_EXPRs) as well as the list of the
- 	other expressions on the RHS of such assignments.
- 
-      2. Prune the members of the first list (candidates) that are referenced
- 	by a member of the second list (expressions).
- 
-      3. Extract a set of candidates with non-overlapping live ranges from the
- 	first list.  These are the Named Return Values.
- 
-      4. Adjust the relevant RETURN_EXPRs and replace the occurrences of the
- 	Named Return Values in the function with the RESULT_DECL.
- 
-    If the function returns an unconstrained type, things are a bit different
-    because the anonymous return object is allocated on the secondary stack
-    and RESULT_DECL is only a pointer to it.  Each return object can be of a
-    different size and is allocated separately so we need not care about the
-    addressability and the aforementioned overlapping issues.  Therefore, we
-    don't collect the other expressions and skip step #2 in the algorithm.  */
- 
- struct nrv_data
- {
-   bitmap nrv;
-   tree result;
-   Node_Id gnat_ret;
-   hash_set<tree> *visited;
- };
- 
- /* Return true if T is a Named Return Value.  */
- 
- static inline bool
- is_nrv_p (bitmap nrv, tree t)
- {
-   return TREE_CODE (t) == VAR_DECL && bitmap_bit_p (nrv, DECL_UID (t));
- }
- 
- /* Helper function for walk_tree, used by finalize_nrv below.  */
- 
- static tree
- prune_nrv_r (tree *tp, int *walk_subtrees, void *data)
- {
-   struct nrv_data *dp = (struct nrv_data *)data;
-   tree t = *tp;
- 
-   /* No need to walk into types or decls.  */
-   if (IS_TYPE_OR_DECL_P (t))
-     *walk_subtrees = 0;
- 
-   if (is_nrv_p (dp->nrv, t))
-     bitmap_clear_bit (dp->nrv, DECL_UID (t));
- 
-   return NULL_TREE;
- }
- 
- /* Prune Named Return Values in BLOCK and return true if there is still a
-    Named Return Value in BLOCK or one of its sub-blocks.  */
- 
- static bool
- prune_nrv_in_block (bitmap nrv, tree block)
- {
-   bool has_nrv = false;
-   tree t;
- 
-   /* First recurse on the sub-blocks.  */
-   for (t = BLOCK_SUBBLOCKS (block); t; t = BLOCK_CHAIN (t))
-     has_nrv |= prune_nrv_in_block (nrv, t);
- 
-   /* Then make sure to keep at most one NRV per block.  */
-   for (t = BLOCK_VARS (block); t; t = DECL_CHAIN (t))
-     if (is_nrv_p (nrv, t))
-       {
- 	if (has_nrv)
- 	  bitmap_clear_bit (nrv, DECL_UID (t));
- 	else
- 	  has_nrv = true;
-       }
- 
-   return has_nrv;
- }
- 
- /* Helper function for walk_tree, used by finalize_nrv below.  */
- 
- static tree
- finalize_nrv_r (tree *tp, int *walk_subtrees, void *data)
- {
-   struct nrv_data *dp = (struct nrv_data *)data;
-   tree t = *tp;
- 
-   /* No need to walk into types.  */
-   if (TYPE_P (t))
-     *walk_subtrees = 0;
- 
-   /* Change RETURN_EXPRs of NRVs to just refer to the RESULT_DECL; this is a
-      nop, but differs from using NULL_TREE in that it indicates that we care
-      about the value of the RESULT_DECL.  */
-   else if (TREE_CODE (t) == RETURN_EXPR
- 	   && TREE_CODE (TREE_OPERAND (t, 0)) == INIT_EXPR)
-     {
-       tree ret_val = TREE_OPERAND (TREE_OPERAND (t, 0), 1);
- 
-       /* Strip useless conversions around the return value.  */
-       if (gnat_useless_type_conversion (ret_val))
- 	ret_val = TREE_OPERAND (ret_val, 0);
- 
-       if (is_nrv_p (dp->nrv, ret_val))
- 	TREE_OPERAND (t, 0) = dp->result;
-     }
- 
-   /* Replace the DECL_EXPR of NRVs with an initialization of the RESULT_DECL,
-      if needed.  */
-   else if (TREE_CODE (t) == DECL_EXPR
- 	   && is_nrv_p (dp->nrv, DECL_EXPR_DECL (t)))
-     {
-       tree var = DECL_EXPR_DECL (t), init;
- 
-       if (DECL_INITIAL (var))
- 	{
- 	  init = build_binary_op (INIT_EXPR, NULL_TREE, dp->result,
- 				  DECL_INITIAL (var));
- 	  SET_EXPR_LOCATION (init, EXPR_LOCATION (t));
- 	  DECL_INITIAL (var) = NULL_TREE;
- 	}
-       else
- 	init = build_empty_stmt (EXPR_LOCATION (t));
-       *tp = init;
- 
-       /* Identify the NRV to the RESULT_DECL for debugging purposes.  */
-       SET_DECL_VALUE_EXPR (var, dp->result);
-       DECL_HAS_VALUE_EXPR_P (var) = 1;
-       /* ??? Kludge to avoid an assertion failure during inlining.  */
-       DECL_SIZE (var) = bitsize_unit_node;
-       DECL_SIZE_UNIT (var) = size_one_node;
-     }
- 
-   /* And replace all uses of NRVs with the RESULT_DECL.  */
-   else if (is_nrv_p (dp->nrv, t))
-     *tp = convert (TREE_TYPE (t), dp->result);
- 
-   /* Avoid walking into the same tree more than once.  Unfortunately, we
-      can't just use walk_tree_without_duplicates because it would only
-      call us for the first occurrence of NRVs in the function body.  */
-   if (dp->visited->add (*tp))
-     *walk_subtrees = 0;
- 
-   return NULL_TREE;
- }
- 
- /* Likewise, but used when the function returns an unconstrained type.  */
- 
- static tree
- finalize_nrv_unc_r (tree *tp, int *walk_subtrees, void *data)
- {
-   struct nrv_data *dp = (struct nrv_data *)data;
-   tree t = *tp;
- 
-   /* No need to walk into types.  */
-   if (TYPE_P (t))
-     *walk_subtrees = 0;
- 
-   /* We need to see the DECL_EXPR of NRVs before any other references so we
-      walk the body of BIND_EXPR before walking its variables.  */
-   else if (TREE_CODE (t) == BIND_EXPR)
-     walk_tree (&BIND_EXPR_BODY (t), finalize_nrv_unc_r, data, NULL);
- 
-   /* Change RETURN_EXPRs of NRVs to assign to the RESULT_DECL only the final
-      return value built by the allocator instead of the whole construct.  */
-   else if (TREE_CODE (t) == RETURN_EXPR
- 	   && TREE_CODE (TREE_OPERAND (t, 0)) == INIT_EXPR)
-     {
-       tree ret_val = TREE_OPERAND (TREE_OPERAND (t, 0), 1);
- 
-       /* This is the construct returned by the allocator.  */
-       if (TREE_CODE (ret_val) == COMPOUND_EXPR
- 	  && TREE_CODE (TREE_OPERAND (ret_val, 0)) == INIT_EXPR)
- 	{
- 	  tree rhs = TREE_OPERAND (TREE_OPERAND (ret_val, 0), 1);
- 
- 	  if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (ret_val)))
- 	    ret_val = CONSTRUCTOR_ELT (rhs, 1)->value;
- 	  else
- 	    ret_val = rhs;
- 	}
- 
-       /* Strip useless conversions around the return value.  */
-       if (gnat_useless_type_conversion (ret_val)
- 	  || TREE_CODE (ret_val) == VIEW_CONVERT_EXPR)
- 	ret_val = TREE_OPERAND (ret_val, 0);
- 
-       /* Strip unpadding around the return value.  */
-       if (TREE_CODE (ret_val) == COMPONENT_REF
- 	  && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (ret_val, 0))))
- 	ret_val = TREE_OPERAND (ret_val, 0);
- 
-       /* Assign the new return value to the RESULT_DECL.  */
-       if (is_nrv_p (dp->nrv, ret_val))
- 	TREE_OPERAND (TREE_OPERAND (t, 0), 1)
- 	  = TREE_OPERAND (DECL_INITIAL (ret_val), 0);
-     }
- 
-   /* Adjust the DECL_EXPR of NRVs to call the allocator and save the result
-      into a new variable.  */
-   else if (TREE_CODE (t) == DECL_EXPR
- 	   && is_nrv_p (dp->nrv, DECL_EXPR_DECL (t)))
-     {
-       tree saved_current_function_decl = current_function_decl;
-       tree var = DECL_EXPR_DECL (t);
-       tree alloc, p_array, new_var, new_ret;
-       vec<constructor_elt, va_gc> *v;
-       vec_alloc (v, 2);
- 
-       /* Create an artificial context to build the allocation.  */
-       current_function_decl = decl_function_context (var);
-       start_stmt_group ();
-       gnat_pushlevel ();
- 
-       /* This will return a COMPOUND_EXPR with the allocation in the first
- 	 arm and the final return value in the second arm.  */
-       alloc = build_allocator (TREE_TYPE (var), DECL_INITIAL (var),
- 			       TREE_TYPE (dp->result),
- 			       Procedure_To_Call (dp->gnat_ret),
- 			       Storage_Pool (dp->gnat_ret),
- 			       Empty, false);
- 
-       /* The new variable is built as a reference to the allocated space.  */
-       new_var
- 	= build_decl (DECL_SOURCE_LOCATION (var), VAR_DECL, DECL_NAME (var),
- 		      build_reference_type (TREE_TYPE (var)));
-       DECL_BY_REFERENCE (new_var) = 1;
- 
-       if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (alloc)))
- 	{
- 	  tree cst = TREE_OPERAND (alloc, 1);
- 
- 	  /* The new initial value is a COMPOUND_EXPR with the allocation in
- 	     the first arm and the value of P_ARRAY in the second arm.  */
- 	  DECL_INITIAL (new_var)
- 	    = build2 (COMPOUND_EXPR, TREE_TYPE (new_var),
- 		      TREE_OPERAND (alloc, 0),
- 		      CONSTRUCTOR_ELT (cst, 0)->value);
- 
- 	  /* Build a modified CONSTRUCTOR that references NEW_VAR.  */
- 	  p_array = TYPE_FIELDS (TREE_TYPE (alloc));
- 	  CONSTRUCTOR_APPEND_ELT (v, p_array,
- 				  fold_convert (TREE_TYPE (p_array), new_var));
- 	  CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (p_array),
- 				  CONSTRUCTOR_ELT (cst, 1)->value);
- 	  new_ret = build_constructor (TREE_TYPE (alloc), v);
- 	}
-       else
- 	{
- 	  /* The new initial value is just the allocation.  */
- 	  DECL_INITIAL (new_var) = alloc;
- 	  new_ret = fold_convert (TREE_TYPE (alloc), new_var);
- 	}
- 
-       gnat_pushdecl (new_var, Empty);
- 
-       /* Destroy the artificial context and insert the new statements.  */
-       gnat_zaplevel ();
-       *tp = end_stmt_group ();
-       current_function_decl = saved_current_function_decl;
- 
-       /* Chain NEW_VAR immediately after VAR and ignore the latter.  */
-       DECL_CHAIN (new_var) = DECL_CHAIN (var);
-       DECL_CHAIN (var) = new_var;
-       DECL_IGNORED_P (var) = 1;
- 
-       /* Save the new return value and the dereference of NEW_VAR.  */
-       DECL_INITIAL (var)
- 	= build2 (COMPOUND_EXPR, TREE_TYPE (var), new_ret,
- 		  build1 (INDIRECT_REF, TREE_TYPE (var), new_var));
-       /* ??? Kludge to avoid messing up during inlining.  */
-       DECL_CONTEXT (var) = NULL_TREE;
-     }
- 
-   /* And replace all uses of NRVs with the dereference of NEW_VAR.  */
-   else if (is_nrv_p (dp->nrv, t))
-     *tp = TREE_OPERAND (DECL_INITIAL (t), 1);
- 
-   /* Avoid walking into the same tree more than once.  Unfortunately, we
-      can't just use walk_tree_without_duplicates because it would only
-      call us for the first occurrence of NRVs in the function body.  */
-   if (dp->visited->add (*tp))
-     *walk_subtrees = 0;
- 
-   return NULL_TREE;
- }
- 
- /* Apply FUNC to all the sub-trees of nested functions in NODE.  FUNC is called
-    with the DATA and the address of each sub-tree.  If FUNC returns a non-NULL
-    value, the traversal is stopped.  */
- 
- static void
- walk_nesting_tree (struct cgraph_node *node, walk_tree_fn func, void *data)
- {
-   for (node = first_nested_function (node);
-        node; node = next_nested_function (node))
-     {
-       walk_tree_without_duplicates (&DECL_SAVED_TREE (node->decl), func, data);
-       walk_nesting_tree (node, func, data);
-     }
- }
- 
- /* Finalize the Named Return Value optimization for FNDECL.  The NRV bitmap
-    contains the candidates for Named Return Value and OTHER is a list of
-    the other return values.  GNAT_RET is a representative return node.  */
- 
- static void
- finalize_nrv (tree fndecl, bitmap nrv, vec<tree, va_gc> *other, Node_Id gnat_ret)
- {
-   struct nrv_data data;
-   walk_tree_fn func;
-   unsigned int i;
-   tree iter;
- 
-   /* We shouldn't be applying the optimization to return types that we aren't
-      allowed to manipulate freely.  */
-   gcc_assert (!TYPE_IS_BY_REFERENCE_P (TREE_TYPE (TREE_TYPE (fndecl))));
- 
-   /* Prune the candidates that are referenced by other return values.  */
-   data.nrv = nrv;
-   data.result = NULL_TREE;
-   data.gnat_ret = Empty;
-   data.visited = NULL;
-   FOR_EACH_VEC_SAFE_ELT (other, i, iter)
-     walk_tree_without_duplicates (&iter, prune_nrv_r, &data);
-   if (bitmap_empty_p (nrv))
-     return;
- 
-   /* Prune also the candidates that are referenced by nested functions.  */
-   walk_nesting_tree (cgraph_node::get_create (fndecl), prune_nrv_r, &data);
-   if (bitmap_empty_p (nrv))
-     return;
- 
-   /* Extract a set of NRVs with non-overlapping live ranges.  */
-   if (!prune_nrv_in_block (nrv, DECL_INITIAL (fndecl)))
-     return;
- 
-   /* Adjust the relevant RETURN_EXPRs and replace the occurrences of NRVs.  */
-   data.nrv = nrv;
-   data.result = DECL_RESULT (fndecl);
-   data.gnat_ret = gnat_ret;
-   data.visited = new hash_set<tree>;
-   if (TYPE_RETURN_UNCONSTRAINED_P (TREE_TYPE (fndecl)))
-     func = finalize_nrv_unc_r;
-   else
-     func = finalize_nrv_r;
-   walk_tree (&DECL_SAVED_TREE (fndecl), func, &data, NULL);
-   delete data.visited;
- }
- 
- /* Return true if RET_VAL can be used as a Named Return Value for the
-    anonymous return object RET_OBJ.  */
- 
- static bool
- return_value_ok_for_nrv_p (tree ret_obj, tree ret_val)
- {
-   if (TREE_CODE (ret_val) != VAR_DECL)
-     return false;
- 
-   if (TREE_THIS_VOLATILE (ret_val))
-     return false;
- 
-   if (DECL_CONTEXT (ret_val) != current_function_decl)
-     return false;
- 
-   if (TREE_STATIC (ret_val))
-     return false;
- 
-   /* For the constrained case, test for addressability.  */
-   if (ret_obj && TREE_ADDRESSABLE (ret_val))
-     return false;
- 
-   /* For the constrained case, test for overalignment.  */
-   if (ret_obj && DECL_ALIGN (ret_val) > DECL_ALIGN (ret_obj))
-     return false;
- 
-   /* For the unconstrained case, test for bogus initialization.  */
-   if (!ret_obj
-       && DECL_INITIAL (ret_val)
-       && TREE_CODE (DECL_INITIAL (ret_val)) == NULL_EXPR)
-     return false;
- 
-   return true;
- }
- 
- /* Build a RETURN_EXPR.  If RET_VAL is non-null, build a RETURN_EXPR around
-    the assignment of RET_VAL to RET_OBJ.  Otherwise build a bare RETURN_EXPR
-    around RESULT_OBJ, which may be null in this case.  */
- 
- static tree
- build_return_expr (tree ret_obj, tree ret_val)
- {
-   tree result_expr;
- 
-   if (ret_val)
-     {
-       /* The gimplifier explicitly enforces the following invariant:
- 
- 	      RETURN_EXPR
- 		  |
- 	       INIT_EXPR
- 	      /        \
- 	     /          \
- 	 RET_OBJ        ...
- 
- 	 As a consequence, type consistency dictates that we use the type
- 	 of the RET_OBJ as the operation type.  */
-       tree operation_type = TREE_TYPE (ret_obj);
- 
-       /* Convert the right operand to the operation type.  Note that this is
- 	 the transformation applied in the INIT_EXPR case of build_binary_op,
- 	 with the assumption that the type cannot involve a placeholder.  */
-       if (operation_type != TREE_TYPE (ret_val))
- 	ret_val = convert (operation_type, ret_val);
- 
-       /* We always can use an INIT_EXPR for the return object.  */
-       result_expr = build2 (INIT_EXPR, void_type_node, ret_obj, ret_val);
- 
-       /* If the function returns an aggregate type, find out whether this is
- 	 a candidate for Named Return Value.  If so, record it.  Otherwise,
- 	 if this is an expression of some kind, record it elsewhere.  */
-       if (optimize
- 	  && !optimize_debug
- 	  && AGGREGATE_TYPE_P (operation_type)
- 	  && !TYPE_IS_FAT_POINTER_P (operation_type)
- 	  && TYPE_MODE (operation_type) == BLKmode
- 	  && aggregate_value_p (operation_type, current_function_decl))
- 	{
- 	  /* Strip useless conversions around the return value.  */
- 	  if (gnat_useless_type_conversion (ret_val))
- 	    ret_val = TREE_OPERAND (ret_val, 0);
- 
- 	  /* Now apply the test to the return value.  */
- 	  if (return_value_ok_for_nrv_p (ret_obj, ret_val))
- 	    {
- 	      if (!f_named_ret_val)
- 		f_named_ret_val = BITMAP_GGC_ALLOC ();
- 	      bitmap_set_bit (f_named_ret_val, DECL_UID (ret_val));
- 	    }
- 
- 	  /* Note that we need not care about CONSTRUCTORs here, as they are
- 	     totally transparent given the read-compose-write semantics of
- 	     assignments from CONSTRUCTORs.  */
- 	  else if (EXPR_P (ret_val))
- 	    vec_safe_push (f_other_ret_val, ret_val);
- 	}
-     }
-   else
-     result_expr = ret_obj;
- 
-   return build1 (RETURN_EXPR, void_type_node, result_expr);
- }
- 
- /* Subroutine of gnat_to_gnu to process gnat_node, an N_Subprogram_Body.  We
-    don't return anything.  */
- 
- static void
- Subprogram_Body_to_gnu (Node_Id gnat_node)
- {
-   /* Defining identifier of a parameter to the subprogram.  */
-   Entity_Id gnat_param;
-   /* The defining identifier for the subprogram body. Note that if a
-      specification has appeared before for this body, then the identifier
-      occurring in that specification will also be a defining identifier and all
-      the calls to this subprogram will point to that specification.  */
-   Entity_Id gnat_subprog_id
-     = (Present (Corresponding_Spec (gnat_node))
-        ? Corresponding_Spec (gnat_node) : Defining_Entity (gnat_node));
-   /* The FUNCTION_DECL node corresponding to the subprogram spec.   */
-   tree gnu_subprog_decl;
-   /* Its RESULT_DECL node.  */
-   tree gnu_result_decl;
-   /* Its FUNCTION_TYPE node.  */
-   tree gnu_subprog_type;
-   /* The TYPE_CI_CO_LIST of its FUNCTION_TYPE node, if any.  */
-   tree gnu_cico_list;
-   /* The entry in the CI_CO_LIST that represents a function return, if any.  */
-   tree gnu_return_var_elmt = NULL_TREE;
-   tree gnu_result;
-   location_t locus;
-   struct language_function *gnu_subprog_language;
-   vec<parm_attr, va_gc> *cache;
- 
-   /* If this is a generic object or if it has been eliminated,
-      ignore it.  */
-   if (Ekind (gnat_subprog_id) == E_Generic_Procedure
-       || Ekind (gnat_subprog_id) == E_Generic_Function
-       || Is_Eliminated (gnat_subprog_id))
-     return;
- 
-   /* If this subprogram acts as its own spec, define it.  Otherwise, just get
-      the already-elaborated tree node.  However, if this subprogram had its
-      elaboration deferred, we will already have made a tree node for it.  So
-      treat it as not being defined in that case.  Such a subprogram cannot
-      have an address clause or a freeze node, so this test is safe, though it
-      does disable some otherwise-useful error checking.  */
-   gnu_subprog_decl
-     = gnat_to_gnu_entity (gnat_subprog_id, NULL_TREE,
- 			  Acts_As_Spec (gnat_node)
- 			  && !present_gnu_tree (gnat_subprog_id));
-   DECL_FUNCTION_IS_DEF (gnu_subprog_decl) = true;
-   gnu_result_decl = DECL_RESULT (gnu_subprog_decl);
-   gnu_subprog_type = TREE_TYPE (gnu_subprog_decl);
-   gnu_cico_list = TYPE_CI_CO_LIST (gnu_subprog_type);
-   if (gnu_cico_list && TREE_VALUE (gnu_cico_list) == void_type_node)
-     gnu_return_var_elmt = gnu_cico_list;
- 
-   /* If the function returns by invisible reference, make it explicit in the
-      function body.  See gnat_to_gnu_entity, E_Subprogram_Type case.  */
-   if (TREE_ADDRESSABLE (gnu_subprog_type))
-     {
-       TREE_TYPE (gnu_result_decl)
- 	= build_reference_type (TREE_TYPE (gnu_result_decl));
-       relayout_decl (gnu_result_decl);
-     }
- 
-   /* Set the line number in the decl to correspond to that of the body.  */
-   if (!Sloc_to_locus (Sloc (gnat_node), &locus, false, gnu_subprog_decl))
-     locus = input_location;
-   DECL_SOURCE_LOCATION (gnu_subprog_decl) = locus;
- 
-   /* If the body comes from an expression function, arrange it to be inlined
-      in almost all cases.  */
-   if (Was_Expression_Function (gnat_node))
-     DECL_DISREGARD_INLINE_LIMITS (gnu_subprog_decl) = 1;
- 
-   /* Try to create a bona-fide thunk and hand it over to the middle-end.  */
-   if (Is_Thunk (gnat_subprog_id)
-       && maybe_make_gnu_thunk (gnat_subprog_id, gnu_subprog_decl))
-     return;
- 
-   /* Initialize the information structure for the function.  */
-   allocate_struct_function (gnu_subprog_decl, false);
-   gnu_subprog_language = ggc_cleared_alloc<language_function> ();
-   DECL_STRUCT_FUNCTION (gnu_subprog_decl)->language = gnu_subprog_language;
-   DECL_STRUCT_FUNCTION (gnu_subprog_decl)->function_start_locus = locus;
-   set_cfun (NULL);
- 
-   begin_subprog_body (gnu_subprog_decl);
- 
-   /* If there are copy-in/copy-out parameters, we need to ensure that they are
-      properly copied out by the return statement.  We do this by making a new
-      block and converting any return into a goto to a label at the end of the
-      block.  */
-   if (gnu_cico_list)
-     {
-       tree gnu_return_var = NULL_TREE;
- 
-       vec_safe_push (gnu_return_label_stack,
- 		     create_artificial_label (input_location));
- 
-       start_stmt_group ();
-       gnat_pushlevel ();
- 
-       /* If this is a function with copy-in/copy-out parameters and which does
- 	 not return by invisible reference, we also need a variable for the
- 	 return value to be placed.  */
-       if (gnu_return_var_elmt && !TREE_ADDRESSABLE (gnu_subprog_type))
- 	{
- 	  tree gnu_return_type
- 	    = TREE_TYPE (TREE_PURPOSE (gnu_return_var_elmt));
- 
- 	  gnu_return_var
- 	    = create_var_decl (get_identifier ("RETVAL"), NULL_TREE,
- 			       gnu_return_type, NULL_TREE,
- 			       false, false, false, false, false,
- 			       true, false, NULL, gnat_subprog_id);
- 	  TREE_VALUE (gnu_return_var_elmt) = gnu_return_var;
- 	}
- 
-       vec_safe_push (gnu_return_var_stack, gnu_return_var);
- 
-       /* See whether there are parameters for which we don't have a GCC tree
- 	 yet.  These must be Out parameters.  Make a VAR_DECL for them and
- 	 put it into TYPE_CI_CO_LIST, which must contain an empty entry too.
- 	 We can match up the entries because TYPE_CI_CO_LIST is in the order
- 	 of the parameters.  */
-       for (gnat_param = First_Formal_With_Extras (gnat_subprog_id);
- 	   Present (gnat_param);
- 	   gnat_param = Next_Formal_With_Extras (gnat_param))
- 	if (!present_gnu_tree (gnat_param))
- 	  {
- 	    tree gnu_cico_entry = gnu_cico_list;
- 	    tree gnu_decl;
- 
- 	    /* Skip any entries that have been already filled in; they must
- 	       correspond to In Out parameters.  */
- 	    while (gnu_cico_entry && TREE_VALUE (gnu_cico_entry))
- 	      gnu_cico_entry = TREE_CHAIN (gnu_cico_entry);
- 
- 	    /* Do any needed dereferences for by-ref objects.  */
- 	    gnu_decl = gnat_to_gnu_entity (gnat_param, NULL_TREE, true);
- 	    gcc_assert (DECL_P (gnu_decl));
- 	    if (DECL_BY_REF_P (gnu_decl))
- 	      gnu_decl = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_decl);
- 
- 	    /* Do any needed references for padded types.  */
- 	    TREE_VALUE (gnu_cico_entry)
- 	      = convert (TREE_TYPE (TREE_PURPOSE (gnu_cico_entry)), gnu_decl);
- 	  }
-     }
-   else
-     vec_safe_push (gnu_return_label_stack, NULL_TREE);
- 
-   /* Get a tree corresponding to the code for the subprogram.  */
-   start_stmt_group ();
-   gnat_pushlevel ();
- 
-   process_decls (Declarations (gnat_node), Empty, Empty, true, true);
- 
-   /* Generate the code of the subprogram itself.  A return statement will be
-      present and any Out parameters will be handled there.  */
-   add_stmt (gnat_to_gnu (Handled_Statement_Sequence (gnat_node)));
-   gnat_poplevel ();
-   gnu_result = end_stmt_group ();
- 
-   /* Attempt setting the end_locus of our GCC body tree, typically a BIND_EXPR,
-      then the end_locus of our GCC subprogram declaration tree.  */
-   set_end_locus_from_node (gnu_result, gnat_node);
-   set_end_locus_from_node (gnu_subprog_decl, gnat_node);
- 
-   /* If we populated the parameter attributes cache, we need to make sure that
-      the cached expressions are evaluated on all the possible paths leading to
-      their uses.  So we force their evaluation on entry of the function.  */
-   cache = gnu_subprog_language->parm_attr_cache;
-   if (cache)
-     {
-       struct parm_attr_d *pa;
-       int i;
- 
-       start_stmt_group ();
- 
-       FOR_EACH_VEC_ELT (*cache, i, pa)
- 	{
- 	  if (pa->first)
- 	    add_stmt_with_node_force (pa->first, gnat_node);
- 	  if (pa->last)
- 	    add_stmt_with_node_force (pa->last, gnat_node);
- 	  if (pa->length)
- 	    add_stmt_with_node_force (pa->length, gnat_node);
- 	}
- 
-       add_stmt (gnu_result);
-       gnu_result = end_stmt_group ();
- 
-       gnu_subprog_language->parm_attr_cache = NULL;
-     }
- 
-   /* If we are dealing with a return from an Ada procedure with parameters
-      passed by copy-in/copy-out, we need to return a record containing the
-      final values of these parameters.  If the list contains only one entry,
-      return just that entry though.
- 
-      For a full description of the copy-in/copy-out parameter mechanism, see
-      the part of the gnat_to_gnu_entity routine dealing with the translation
-      of subprograms.
- 
-      We need to make a block that contains the definition of that label and
-      the copying of the return value.  It first contains the function, then
-      the label and copy statement.  */
-   if (gnu_cico_list)
-     {
-       const Node_Id gnat_end_label
- 	= End_Label (Handled_Statement_Sequence (gnat_node));
- 
-       gnu_return_var_stack->pop ();
- 
-       add_stmt (gnu_result);
-       add_stmt (build1 (LABEL_EXPR, void_type_node,
- 			gnu_return_label_stack->last ()));
- 
-       /* If this is a function which returns by invisible reference, the
- 	 return value has already been dealt with at the return statements,
- 	 so we only need to indirectly copy out the parameters.  */
-       if (TREE_ADDRESSABLE (gnu_subprog_type))
- 	{
- 	  tree gnu_ret_deref
- 	    = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_result_decl);
- 	  tree t;
- 
- 	  gcc_assert (TREE_VALUE (gnu_cico_list) == void_type_node);
- 
- 	  for (t = TREE_CHAIN (gnu_cico_list); t; t = TREE_CHAIN (t))
- 	    {
- 	      tree gnu_field_deref
- 		= build_component_ref (gnu_ret_deref, TREE_PURPOSE (t), true);
- 	      gnu_result = build2 (MODIFY_EXPR, void_type_node,
- 				   gnu_field_deref, TREE_VALUE (t));
- 	      add_stmt_with_node (gnu_result, gnat_end_label);
- 	    }
- 	}
- 
-       /* Otherwise, if this is a procedure or a function which does not return
- 	 by invisible reference, we can do a direct block-copy out.  */
-       else
- 	{
- 	  tree gnu_retval;
- 
- 	  if (list_length (gnu_cico_list) == 1)
- 	    gnu_retval = TREE_VALUE (gnu_cico_list);
- 	  else
- 	    gnu_retval
- 	      = build_constructor_from_list (TREE_TYPE (gnu_subprog_type),
- 					     gnu_cico_list);
- 
- 	  gnu_result = build_return_expr (gnu_result_decl, gnu_retval);
- 	  add_stmt_with_node (gnu_result, gnat_end_label);
- 	}
- 
-       gnat_poplevel ();
-       gnu_result = end_stmt_group ();
-     }
- 
-   gnu_return_label_stack->pop ();
- 
-   /* On SEH targets, install an exception handler around the main entry
-      point to catch unhandled exceptions.  */
-   if (DECL_NAME (gnu_subprog_decl) == main_identifier_node
-       && targetm_common.except_unwind_info (&global_options) == UI_SEH)
-     {
-       tree t;
-       tree etype;
- 
-       t = build_call_expr (builtin_decl_explicit (BUILT_IN_EH_POINTER),
- 			   1, integer_zero_node);
-       t = build_call_n_expr (unhandled_except_decl, 1, t);
- 
-       etype = build_unary_op (ADDR_EXPR, NULL_TREE, unhandled_others_decl);
-       etype = tree_cons (NULL_TREE, etype, NULL_TREE);
- 
-       t = build2 (CATCH_EXPR, void_type_node, etype, t);
-       gnu_result = build2 (TRY_CATCH_EXPR, TREE_TYPE (gnu_result),
- 			   gnu_result, t);
-     }
- 
-   end_subprog_body (gnu_result);
- 
-   /* Finally annotate the parameters and disconnect the trees for parameters
-      that we have turned into variables since they are now unusable.  */
-   for (gnat_param = First_Formal_With_Extras (gnat_subprog_id);
-        Present (gnat_param);
-        gnat_param = Next_Formal_With_Extras (gnat_param))
-     {
-       tree gnu_param = get_gnu_tree (gnat_param);
-       bool is_var_decl = (TREE_CODE (gnu_param) == VAR_DECL);
- 
-       annotate_object (gnat_param, TREE_TYPE (gnu_param), NULL_TREE,
- 		       DECL_BY_REF_P (gnu_param));
- 
-       if (is_var_decl)
- 	save_gnu_tree (gnat_param, NULL_TREE, false);
-     }
- 
-   /* Disconnect the variable created for the return value.  */
-   if (gnu_return_var_elmt)
-     TREE_VALUE (gnu_return_var_elmt) = void_type_node;
- 
-   /* If the function returns an aggregate type and we have candidates for
-      a Named Return Value, finalize the optimization.  */
-   if (optimize && !optimize_debug && gnu_subprog_language->named_ret_val)
-     {
-       finalize_nrv (gnu_subprog_decl,
- 		    gnu_subprog_language->named_ret_val,
- 		    gnu_subprog_language->other_ret_val,
- 		    gnu_subprog_language->gnat_ret);
-       gnu_subprog_language->named_ret_val = NULL;
-       gnu_subprog_language->other_ret_val = NULL;
-     }
- 
-   /* If this is an inlined external function that has been marked uninlinable,
-      drop the body and stop there.  Otherwise compile the body.  */
-   if (DECL_EXTERNAL (gnu_subprog_decl) && DECL_UNINLINABLE (gnu_subprog_decl))
-     DECL_SAVED_TREE (gnu_subprog_decl) = NULL_TREE;
-   else
-     rest_of_subprog_body_compilation (gnu_subprog_decl);
- }
- 
- /* The type of an atomic access.  */
- 
- typedef enum { NOT_ATOMIC, SIMPLE_ATOMIC, OUTER_ATOMIC } atomic_acces_t;
- 
- /* Return true if GNAT_NODE references an Atomic entity.  This is modeled on
-    the Is_Atomic_Object predicate of the front-end, but additionally handles
-    explicit dereferences.  */
- 
- static bool
- node_is_atomic (Node_Id gnat_node)
- {
-   Entity_Id gnat_entity;
- 
-   switch (Nkind (gnat_node))
-     {
-     case N_Identifier:
-     case N_Expanded_Name:
-       gnat_entity = Entity (gnat_node);
-       if (Ekind (gnat_entity) != E_Variable)
- 	break;
-       return Is_Atomic (gnat_entity) || Is_Atomic (Etype (gnat_entity));
- 
-     case N_Selected_Component:
-       return Is_Atomic (Etype (gnat_node))
- 	     || Is_Atomic (Entity (Selector_Name (gnat_node)));
- 
-     case N_Indexed_Component:
-       return Is_Atomic (Etype (gnat_node))
- 	     || Has_Atomic_Components (Etype (Prefix (gnat_node)))
- 	     || (Is_Entity_Name (Prefix (gnat_node))
- 		 && Has_Atomic_Components (Entity (Prefix (gnat_node))));
- 
-     case N_Explicit_Dereference:
-       return Is_Atomic (Etype (gnat_node));
- 
-     default:
-       break;
-     }
- 
-   return false;
- }
- 
- /* Return true if GNAT_NODE references a Volatile_Full_Access entity.  This is
-    modeled on the Is_Volatile_Full_Access_Object predicate of the front-end,
-    but additionally handles explicit dereferences.  */
- 
- static bool
- node_is_volatile_full_access (Node_Id gnat_node)
- {
-   Entity_Id gnat_entity;
- 
-   switch (Nkind (gnat_node))
-     {
-     case N_Identifier:
-     case N_Expanded_Name:
-       gnat_entity = Entity (gnat_node);
-       if (!Is_Object (gnat_entity))
- 	break;
-       return Is_Volatile_Full_Access (gnat_entity)
- 	     || Is_Volatile_Full_Access (Etype (gnat_entity));
- 
-     case N_Selected_Component:
-       return Is_Volatile_Full_Access (Etype (gnat_node))
- 	     || Is_Volatile_Full_Access (Entity (Selector_Name (gnat_node)));
- 
-     case N_Indexed_Component:
-     case N_Explicit_Dereference:
-       return Is_Volatile_Full_Access (Etype (gnat_node));
- 
-     default:
-       break;
-     }
- 
-   return false;
- }
- 
- /* Return true if GNAT_NODE references a component of a larger object.  */
- 
- static inline bool
- node_is_component (Node_Id gnat_node)
- {
-   const Node_Kind k = Nkind (gnat_node);
-   return
-     (k == N_Indexed_Component || k == N_Selected_Component || k == N_Slice);
- }
- 
- /* Compute whether GNAT_NODE requires atomic access and set TYPE to the type
-    of access and SYNC according to the associated synchronization setting.
- 
-    We implement 3 different semantics of atomicity in this function:
- 
-      1. the Ada 95/2005/2012 semantics of the Atomic aspect/pragma,
-      2. the Ada 2020 semantics of the Atomic aspect/pragma,
-      3. the semantics of the Volatile_Full_Access GNAT aspect/pragma.
- 
-   They are mutually exclusive and the FE should have rejected conflicts.  */
- 
- static void
- get_atomic_access (Node_Id gnat_node, atomic_acces_t *type, bool *sync)
- {
-   Node_Id gnat_parent, gnat_temp;
-   unsigned char attr_id;
- 
-   /* First, scan the parent to filter out irrelevant cases.  */
-   gnat_parent = Parent (gnat_node);
-   switch (Nkind (gnat_parent))
-     {
-     case N_Attribute_Reference:
-       attr_id = Get_Attribute_Id (Attribute_Name (gnat_parent));
-       /* Do not mess up machine code insertions.  */
-       if (attr_id == Attr_Asm_Input || attr_id == Attr_Asm_Output)
- 	goto not_atomic;
- 
-       /* Nothing to do if we are the prefix of an attribute, since we do not
- 	 want an atomic access for things like 'Size.  */
- 
-       /* ... fall through ... */
- 
-     case N_Reference:
-       /* The N_Reference node is like an attribute.  */
-       if (Prefix (gnat_parent) == gnat_node)
- 	goto not_atomic;
-       break;
- 
-     case N_Object_Renaming_Declaration:
-       /* Nothing to do for the identifier in an object renaming declaration,
-          the renaming itself does not need atomic access.  */
-       goto not_atomic;
- 
-     default:
-       break;
-     }
- 
-   /* Now strip any type conversion from GNAT_NODE.  */
-   if (Nkind (gnat_node) == N_Type_Conversion
-       || Nkind (gnat_node) == N_Unchecked_Type_Conversion)
-     gnat_node = Expression (gnat_node);
- 
-   /* Up to Ada 2012, for Atomic itself, only reads and updates of the object as
-      a whole require atomic access (RM C.6(15)).  But, starting with Ada 2020,
-      reads of or writes to a nonatomic subcomponent of the object also require
-      atomic access (RM C.6(19)).  */
-   if (node_is_atomic (gnat_node))
-     {
-       bool as_a_whole = true;
- 
-       /* If we are the prefix of the parent, then the access is partial.  */
-       for (gnat_temp = gnat_node, gnat_parent = Parent (gnat_temp);
- 	   node_is_component (gnat_parent) && Prefix (gnat_parent) == gnat_temp;
- 	   gnat_temp = gnat_parent, gnat_parent = Parent (gnat_temp))
- 	if (Ada_Version < Ada_2020 || node_is_atomic (gnat_parent))
- 	  goto not_atomic;
- 	else
- 	  as_a_whole = false;
- 
-       /* We consider that partial accesses are not sequential actions and,
- 	 therefore, do not require synchronization.  */
-       *type = SIMPLE_ATOMIC;
-       *sync = as_a_whole ? Atomic_Sync_Required (gnat_node) : false;
-       return;
-     }
- 
-   /* Look for an outer atomic access of a nonatomic subcomponent.  Note that,
-      for VFA, we do this before looking at the node itself because we need to
-      access the outermost VFA object atomically, unlike for Atomic where it is
-      the innermost atomic object (RM C.6(19)).  */
-   for (gnat_temp = gnat_node;
-        node_is_component (gnat_temp);
-        gnat_temp = Prefix (gnat_temp))
-     if ((Ada_Version >= Ada_2020 && node_is_atomic (Prefix (gnat_temp)))
- 	|| node_is_volatile_full_access (Prefix (gnat_temp)))
-       {
- 	*type = OUTER_ATOMIC;
- 	*sync = false;
- 	return;
-       }
- 
-   /* Unlike Atomic, accessing a VFA object always requires atomic access.  */
-   if (node_is_volatile_full_access (gnat_node))
-     {
-       *type = SIMPLE_ATOMIC;
-       *sync = false;
-       return;
-     }
- 
- not_atomic:
-   *type = NOT_ATOMIC;
-   *sync = false;
- }
- 
- /* Return true if GNAT_NODE requires simple atomic access and, if so, set SYNC
-    according to the associated synchronization setting.  */
- 
- static inline bool
- simple_atomic_access_required_p (Node_Id gnat_node, bool *sync)
- {
-   atomic_acces_t type;
-   get_atomic_access (gnat_node, &type, sync);
-   return type == SIMPLE_ATOMIC;
- }
- 
- /* Create a temporary variable with PREFIX and TYPE, and return it.  */
- 
- static tree
- create_temporary (const char *prefix, tree type)
- {
-   tree gnu_temp
-     = create_var_decl (create_tmp_var_name (prefix), NULL_TREE,
- 		      type, NULL_TREE,
- 		      false, false, false, false, false,
- 		      true, false, NULL, Empty);
-   return gnu_temp;
- }
- 
- /* Create a temporary variable with PREFIX and initialize it with GNU_INIT.
-    Put the initialization statement into GNU_INIT_STMT and annotate it with
-    the SLOC of GNAT_NODE.  Return the temporary variable.  */
- 
- static tree
- create_init_temporary (const char *prefix, tree gnu_init, tree *gnu_init_stmt,
- 		       Node_Id gnat_node)
- {
-   tree gnu_temp = create_temporary (prefix, TREE_TYPE (gnu_init));
- 
-   *gnu_init_stmt = build_binary_op (INIT_EXPR, NULL_TREE, gnu_temp, gnu_init);
-   set_expr_location_from_node (*gnu_init_stmt, gnat_node);
- 
-   return gnu_temp;
- }
- 
- /* Subroutine of gnat_to_gnu to translate gnat_node, either an N_Function_Call
-    or an N_Procedure_Call_Statement, to a GCC tree, which is returned.
-    GNU_RESULT_TYPE_P is a pointer to where we should place the result type.
-    If GNU_TARGET is non-null, this must be a function call on the RHS of a
-    N_Assignment_Statement and the result is to be placed into that object.
-    ATOMIC_ACCESS is the type of atomic access to be used for the assignment
-    to GNU_TARGET.  If, in addition, ATOMIC_SYNC is true, then the assignment
-    to GNU_TARGET requires atomic synchronization.  */
- 
- static tree
- Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target,
- 	     atomic_acces_t atomic_access, bool atomic_sync)
- {
-   const bool function_call = (Nkind (gnat_node) == N_Function_Call);
-   const bool returning_value = (function_call && !gnu_target);
-   /* The GCC node corresponding to the GNAT subprogram name.  This can either
-      be a FUNCTION_DECL node if we are dealing with a standard subprogram call,
-      or an indirect reference expression (an INDIRECT_REF node) pointing to a
-      subprogram.  */
-   tree gnu_subprog = gnat_to_gnu (Name (gnat_node));
-   /* The FUNCTION_TYPE node giving the GCC type of the subprogram.  */
-   tree gnu_subprog_type = TREE_TYPE (gnu_subprog);
-   /* The return type of the FUNCTION_TYPE.  */
-   tree gnu_result_type = TREE_TYPE (gnu_subprog_type);
-   const bool frontend_builtin
-     = (TREE_CODE (gnu_subprog) == FUNCTION_DECL
-        && DECL_BUILT_IN_CLASS (gnu_subprog) == BUILT_IN_FRONTEND);
-   auto_vec<tree, 16> gnu_actual_vec;
-   tree gnu_name_list = NULL_TREE;
-   tree gnu_stmt_list = NULL_TREE;
-   tree gnu_after_list = NULL_TREE;
-   tree gnu_retval = NULL_TREE;
-   tree gnu_call, gnu_result;
-   bool went_into_elab_proc = false;
-   bool pushed_binding_level = false;
-   bool variadic;
-   bool by_descriptor;
-   Entity_Id gnat_formal;
-   Node_Id gnat_actual;
-   atomic_acces_t aa_type;
-   bool aa_sync;
- 
-   gcc_assert (FUNC_OR_METHOD_TYPE_P (gnu_subprog_type));
- 
-   /* If we are calling a stubbed function, raise Program_Error, but Elaborate
-      all our args first.  */
-   if (TREE_CODE (gnu_subprog) == FUNCTION_DECL && DECL_STUBBED_P (gnu_subprog))
-     {
-       tree call_expr = build_call_raise (PE_Stubbed_Subprogram_Called,
- 					 gnat_node, N_Raise_Program_Error);
- 
-       for (gnat_actual = First_Actual (gnat_node);
- 	   Present (gnat_actual);
- 	   gnat_actual = Next_Actual (gnat_actual))
- 	add_stmt (gnat_to_gnu (gnat_actual));
- 
-       if (returning_value)
- 	{
- 	  *gnu_result_type_p = gnu_result_type;
- 	  return build1 (NULL_EXPR, gnu_result_type, call_expr);
- 	}
- 
-       return call_expr;
-     }
- 
-   if (TREE_CODE (gnu_subprog) == FUNCTION_DECL)
-     {
-       /* For a call to a nested function, check the inlining status.  */
-       if (decl_function_context (gnu_subprog))
- 	check_inlining_for_nested_subprog (gnu_subprog);
- 
-       /* For a recursive call, avoid explosion due to recursive inlining.  */
-       if (gnu_subprog == current_function_decl)
- 	DECL_DISREGARD_INLINE_LIMITS (gnu_subprog) = 0;
-     }
- 
-   /* The only way we can be making a call via an access type is if Name is an
-      explicit dereference.  In that case, get the list of formal args from the
-      type the access type is pointing to.  Otherwise, get the formals from the
-      entity being called.  */
-   if (Nkind (Name (gnat_node)) == N_Explicit_Dereference)
-     {
-       const Entity_Id gnat_prefix_type
- 	= Underlying_Type (Etype (Prefix (Name (gnat_node))));
- 
-       gnat_formal = First_Formal_With_Extras (Etype (Name (gnat_node)));
-       variadic = IN (Convention (gnat_prefix_type), Convention_C_Variadic);
- 
-       /* If the access type doesn't require foreign-compatible representation,
- 	 be prepared for descriptors.  */
-       by_descriptor
- 	= targetm.calls.custom_function_descriptors > 0
- 	  && Can_Use_Internal_Rep (gnat_prefix_type);
-     }
-   else if (Nkind (Name (gnat_node)) == N_Attribute_Reference)
-     {
-       /* Assume here that this must be 'Elab_Body or 'Elab_Spec.  */
-       gnat_formal = Empty;
-       variadic = false;
-       by_descriptor = false;
-     }
-   else
-     {
-       gnat_formal = First_Formal_With_Extras (Entity (Name (gnat_node)));
-       variadic
- 	= IN (Convention (Entity (Name (gnat_node))), Convention_C_Variadic);
-       by_descriptor = false;
-     }
- 
-   /* The lifetime of the temporaries created for the call ends right after the
-      return value is copied, so we can give them the scope of the elaboration
-      routine at top level.  */
-   if (!current_function_decl)
-     {
-       current_function_decl = get_elaboration_procedure ();
-       went_into_elab_proc = true;
-     }
- 
-   /* First, create the temporary for the return value when:
- 
-        1. There is no target and the function has copy-in/copy-out parameters,
- 	  because we need to preserve the return value before copying back the
- 	  parameters.
- 
-        2. There is no target and the call is made for neither an object, nor a
- 	  renaming declaration, nor a return statement, nor an allocator, and
- 	  the return type has variable size because in this case the gimplifier
- 	  cannot create the temporary, or more generally is an aggregate type,
- 	  because the gimplifier would create the temporary in the outermost
- 	  scope instead of locally.  But there is an exception for an allocator
- 	  of an unconstrained record type with default discriminant because we
- 	  allocate the actual size in this case, unlike the other 3 cases, so
- 	  we need a temporary to fetch the discriminant and we create it here.
- 
-        3. There is a target and it is a slice or an array with fixed size,
- 	  and the return type has variable size, because the gimplifier
- 	  doesn't handle these cases.
- 
-        4. There is a target which is a bit-field and the function returns an
- 	  unconstrained record type with default discriminant, because the
- 	  return may copy more data than the bit-field can contain.
- 
-        5. There is no target and we have misaligned In Out or Out parameters
- 	  passed by reference, because we need to preserve the return value
- 	  before copying back the parameters.  However, in this case, we'll
- 	  defer creating the temporary, see below.
- 
-      This must be done before we push a binding level around the call, since
-      we will pop it before copying the return value.  */
-   if (function_call
-       && ((!gnu_target && TYPE_CI_CO_LIST (gnu_subprog_type))
- 	  || (!gnu_target
- 	      && Nkind (Parent (gnat_node)) != N_Object_Declaration
- 	      && Nkind (Parent (gnat_node)) != N_Object_Renaming_Declaration
- 	      && Nkind (Parent (gnat_node)) != N_Simple_Return_Statement
- 	      && (!(Nkind (Parent (gnat_node)) == N_Qualified_Expression
- 		    && Nkind (Parent (Parent (gnat_node))) == N_Allocator)
- 		  || type_is_padding_self_referential (gnu_result_type))
- 	      && AGGREGATE_TYPE_P (gnu_result_type)
- 	      && !TYPE_IS_FAT_POINTER_P (gnu_result_type))
- 	  || (gnu_target
- 	      && (TREE_CODE (gnu_target) == ARRAY_RANGE_REF
- 		  || (TREE_CODE (TREE_TYPE (gnu_target)) == ARRAY_TYPE
- 		      && TREE_CODE (TYPE_SIZE (TREE_TYPE (gnu_target)))
- 			 == INTEGER_CST))
- 	      && TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST)
- 	  || (gnu_target
- 	      && TREE_CODE (gnu_target) == COMPONENT_REF
- 	      && DECL_BIT_FIELD (TREE_OPERAND (gnu_target, 1))
- 	      && DECL_SIZE (TREE_OPERAND (gnu_target, 1))
- 		 != TYPE_SIZE (TREE_TYPE (gnu_target))
- 	      && type_is_padding_self_referential (gnu_result_type))))
-     {
-       gnu_retval = create_temporary ("R", gnu_result_type);
-       DECL_RETURN_VALUE_P (gnu_retval) = 1;
-     }
- 
-   /* If we don't need a value or have already created it, push a binding level
-      around the call.  This will narrow the lifetime of the temporaries we may
-      need to make when translating the parameters as much as possible.  */
-   if (!returning_value || gnu_retval)
-     {
-       start_stmt_group ();
-       gnat_pushlevel ();
-       pushed_binding_level = true;
-     }
- 
-   /* Create the list of the actual parameters as GCC expects it, namely a
-      chain of TREE_LIST nodes in which the TREE_VALUE field of each node
-      is an expression and the TREE_PURPOSE field is null.  But skip Out
-      parameters not passed by reference and that need not be copied in.  */
-   for (gnat_actual = First_Actual (gnat_node);
-        Present (gnat_actual);
-        gnat_formal = Next_Formal_With_Extras (gnat_formal),
-        gnat_actual = Next_Actual (gnat_actual))
-     {
-       Entity_Id gnat_formal_type = Etype (gnat_formal);
-       tree gnu_formal_type = gnat_to_gnu_type (gnat_formal_type);
-       tree gnu_formal = present_gnu_tree (gnat_formal)
- 			? get_gnu_tree (gnat_formal) : NULL_TREE;
-       const bool in_param = (Ekind (gnat_formal) == E_In_Parameter);
-       const bool is_true_formal_parm
- 	= gnu_formal && TREE_CODE (gnu_formal) == PARM_DECL;
-       const bool is_by_ref_formal_parm
- 	= is_true_formal_parm
- 	  && (DECL_BY_REF_P (gnu_formal)
- 	      || DECL_BY_COMPONENT_PTR_P (gnu_formal));
-       /* In the In Out or Out case, we must suppress conversions that yield
- 	 an lvalue but can nevertheless cause the creation of a temporary,
- 	 because we need the real object in this case, either to pass its
- 	 address if it's passed by reference or as target of the back copy
- 	 done after the call if it uses the copy-in/copy-out mechanism.
- 	 We do it in the In case too, except for an unchecked conversion
- 	 to an elementary type or a constrained composite type because it
- 	 alone can cause the actual to be misaligned and the addressability
- 	 test is applied to the real object.  */
-       const bool suppress_type_conversion
- 	= ((Nkind (gnat_actual) == N_Unchecked_Type_Conversion
- 	    && (!in_param
- 		|| !is_by_ref_formal_parm
- 		|| (Is_Composite_Type (Underlying_Type (gnat_formal_type))
- 		    && !Is_Constrained (Underlying_Type (gnat_formal_type)))))
- 	   || (Nkind (gnat_actual) == N_Type_Conversion
- 	       && Is_Composite_Type (Underlying_Type (gnat_formal_type))));
-       Node_Id gnat_name = suppress_type_conversion
- 			  ? Expression (gnat_actual) : gnat_actual;
-       tree gnu_name = gnat_to_gnu (gnat_name), gnu_name_type;
- 
-       /* If it's possible we may need to use this expression twice, make sure
- 	 that any side-effects are handled via SAVE_EXPRs; likewise if we need
- 	 to force side-effects before the call.  */
-       if (!in_param && !is_by_ref_formal_parm)
- 	{
- 	  tree init = NULL_TREE;
- 	  gnu_name = gnat_stabilize_reference (gnu_name, true, &init);
- 	  if (init)
- 	    gnu_name
- 	      = build_compound_expr (TREE_TYPE (gnu_name), init, gnu_name);
- 	}
- 
-       /* If we are passing a non-addressable parameter by reference, pass the
- 	 address of a copy.  In the In Out or Out case, set up to copy back
- 	 out after the call.  */
-       if (is_by_ref_formal_parm
- 	  && (gnu_name_type = gnat_to_gnu_type (Etype (gnat_name)))
- 	  && !addressable_p (gnu_name, gnu_name_type))
- 	{
- 	  tree gnu_orig = gnu_name, gnu_temp, gnu_stmt;
- 
- 	  /* Do not issue warnings for CONSTRUCTORs since this is not a copy
- 	     but sort of an instantiation for them.  */
- 	  if (TREE_CODE (remove_conversions (gnu_name, true)) == CONSTRUCTOR)
- 	    ;
- 
- 	  /* If the formal is passed by reference, a copy is not allowed.  */
- 	  else if (TYPE_IS_BY_REFERENCE_P (gnu_formal_type)
- 		   || Is_Aliased (gnat_formal))
- 	    post_error ("misaligned actual cannot be passed by reference",
- 		        gnat_actual);
- 
- 	  /* If the mechanism was forced to by-ref, a copy is not allowed but
- 	     we issue only a warning because this case is not strict Ada.  */
- 	  else if (DECL_FORCED_BY_REF_P (gnu_formal))
- 	    post_error ("misaligned actual cannot be passed by reference??",
- 			gnat_actual);
- 
- 	  /* If the actual type of the object is already the nominal type,
- 	     we have nothing to do, except if the size is self-referential
- 	     in which case we'll remove the unpadding below.  */
- 	  if (TREE_TYPE (gnu_name) == gnu_name_type
- 	      && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_name_type)))
- 	    ;
- 
- 	  /* Otherwise remove the unpadding from all the objects.  */
- 	  else if (TREE_CODE (gnu_name) == COMPONENT_REF
- 		   && TYPE_IS_PADDING_P
- 		      (TREE_TYPE (TREE_OPERAND (gnu_name, 0))))
- 	    gnu_orig = gnu_name = TREE_OPERAND (gnu_name, 0);
- 
- 	  /* Otherwise convert to the nominal type of the object if needed.
- 	     There are several cases in which we need to make the temporary
- 	     using this type instead of the actual type of the object when
- 	     they are distinct, because the expectations of the callee would
- 	     otherwise not be met:
- 	       - if it's a justified modular type,
- 	       - if the actual type is a smaller form of it,
- 	       - if it's a smaller form of the actual type.  */
- 	  else if ((TREE_CODE (gnu_name_type) == RECORD_TYPE
- 		    && (TYPE_JUSTIFIED_MODULAR_P (gnu_name_type)
- 		        || smaller_form_type_p (TREE_TYPE (gnu_name),
- 					        gnu_name_type)))
- 		   || (INTEGRAL_TYPE_P (gnu_name_type)
- 		       && smaller_form_type_p (gnu_name_type,
- 					       TREE_TYPE (gnu_name))))
- 	    gnu_name = convert (gnu_name_type, gnu_name);
- 
- 	  /* If this is an In Out or Out parameter and we're returning a value,
- 	     we need to create a temporary for the return value because we must
- 	     preserve it before copying back at the very end.  */
- 	  if (!in_param && returning_value && !gnu_retval)
- 	    {
- 	      gnu_retval = create_temporary ("R", gnu_result_type);
- 	      DECL_RETURN_VALUE_P (gnu_retval) = 1;
- 	    }
- 
- 	  /* If we haven't pushed a binding level, push it now.  This will
- 	     narrow the lifetime of the temporary we are about to make as
- 	     much as possible.  */
- 	  if (!pushed_binding_level && (!returning_value || gnu_retval))
- 	    {
- 	      start_stmt_group ();
- 	      gnat_pushlevel ();
- 	      pushed_binding_level = true;
- 	    }
- 
- 	  /* Create an explicit temporary holding the copy.  */
- 	  /* 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 (Name (gnat_node))
- 	      && Is_Init_Proc (Entity (Name (gnat_node))))
- 	    gnu_name = gnu_temp = create_temporary ("A", TREE_TYPE (gnu_name));
- 
- 	  /* Initialize it on the fly like for an implicit temporary in the
- 	     other cases, as we don't necessarily have a statement list.  */
- 	  else
- 	    {
- 	      gnu_temp = create_init_temporary ("A", gnu_name, &gnu_stmt,
- 						gnat_actual);
- 	      gnu_name = build_compound_expr (TREE_TYPE (gnu_name), gnu_stmt,
- 					      gnu_temp);
- 	    }
- 
- 	  /* Set up to move the copy back to the original if needed.  */
- 	  if (!in_param)
- 	    {
- 	      /* If the original is a COND_EXPR whose first arm isn't meant to
- 		 be further used, just deal with the second arm.  This is very
- 		 likely the conditional expression built for a check.  */
- 	      if (TREE_CODE (gnu_orig) == COND_EXPR
- 		  && TREE_CODE (TREE_OPERAND (gnu_orig, 1)) == COMPOUND_EXPR
- 		  && integer_zerop
- 		     (TREE_OPERAND (TREE_OPERAND (gnu_orig, 1), 1)))
- 		gnu_orig = TREE_OPERAND (gnu_orig, 2);
- 
- 	      gnu_stmt
- 		= build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_orig, gnu_temp);
- 	      set_expr_location_from_node (gnu_stmt, gnat_node);
- 
- 	      append_to_statement_list (gnu_stmt, &gnu_after_list);
- 	    }
- 	}
- 
-       /* Start from the real object and build the actual.  */
-       tree gnu_actual = gnu_name;
- 
-       /* If atomic access is required for an In or In Out actual parameter,
- 	 build the atomic load.  */
-       if (is_true_formal_parm
- 	  && !is_by_ref_formal_parm
- 	  && Ekind (gnat_formal) != E_Out_Parameter
- 	  && simple_atomic_access_required_p (gnat_actual, &aa_sync))
- 	gnu_actual = build_atomic_load (gnu_actual, aa_sync);
- 
-       /* If this was a procedure call, we may not have removed any padding.
- 	 So do it here for the part we will use as an input, if any.  */
-       if (Ekind (gnat_formal) != E_Out_Parameter
- 	  && TYPE_IS_PADDING_P (TREE_TYPE (gnu_actual)))
- 	gnu_actual
- 	  = convert (get_unpadded_type (Etype (gnat_actual)), gnu_actual);
- 
-       /* Put back the conversion we suppressed above in the computation of the
- 	 real object.  And even if we didn't suppress any conversion there, we
- 	 may have suppressed a conversion to the Etype of the actual earlier,
- 	 since the parent is a procedure call, so put it back here.  Note that
- 	 we might have a dummy type here if the actual is the dereference of a
- 	 pointer to it, but that's OK if the formal is passed by reference.  */
-       tree gnu_actual_type = get_unpadded_type (Etype (gnat_actual));
-       if (TYPE_IS_DUMMY_P (gnu_actual_type))
- 	gcc_assert (is_true_formal_parm && DECL_BY_REF_P (gnu_formal));
-       else if (suppress_type_conversion
- 	       && Nkind (gnat_actual) == N_Unchecked_Type_Conversion)
- 	gnu_actual = unchecked_convert (gnu_actual_type, gnu_actual,
- 				        No_Truncation (gnat_actual));
-       else
- 	gnu_actual = convert (gnu_actual_type, gnu_actual);
- 
-       gigi_checking_assert (!Do_Range_Check (gnat_actual));
- 
-       /* First see if the parameter is passed by reference.  */
-       if (is_true_formal_parm && DECL_BY_REF_P (gnu_formal))
- 	{
- 	  if (!in_param)
- 	    {
- 	      /* In Out or Out parameters passed by reference don't use the
- 		 copy-in/copy-out mechanism so the address of the real object
- 		 must be passed to the function.  */
- 	      gnu_actual = gnu_name;
- 
- 	      /* If we have a padded type, be sure we've removed padding.  */
- 	      if (TYPE_IS_PADDING_P (TREE_TYPE (gnu_actual)))
- 		gnu_actual = convert (get_unpadded_type (Etype (gnat_actual)),
- 				      gnu_actual);
- 
- 	      /* If we have the constructed subtype of an aliased object
- 		 with an unconstrained nominal subtype, the type of the
- 		 actual includes the template, although it is formally
- 		 constrained.  So we need to convert it back to the real
- 		 constructed subtype to retrieve the constrained part
- 		 and takes its address.  */
- 	      if (TREE_CODE (TREE_TYPE (gnu_actual)) == RECORD_TYPE
- 		  && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (gnu_actual))
- 		  && Is_Constr_Subt_For_UN_Aliased (Etype (gnat_actual))
- 		  && Is_Array_Type (Underlying_Type (Etype (gnat_actual))))
- 		gnu_actual = convert (gnu_actual_type, gnu_actual);
- 	    }
- 
- 	  /* There is no need to convert the actual to the formal's type before
- 	     taking its address.  The only exception is for unconstrained array
- 	     types because of the way we build fat pointers.  */
- 	  if (TREE_CODE (gnu_formal_type) == UNCONSTRAINED_ARRAY_TYPE)
- 	    {
- 	      /* Put back the conversion we suppressed above for In Out or Out
- 		 parameters, since it may set the bounds of the actual.  */
- 	      if (!in_param && suppress_type_conversion)
- 		gnu_actual = convert (gnu_actual_type, gnu_actual);
- 	      gnu_actual = convert (gnu_formal_type, gnu_actual);
- 	    }
- 
- 	  /* Take the address of the object and convert to the proper pointer
- 	     type.  */
- 	  gnu_formal_type = TREE_TYPE (gnu_formal);
- 	  gnu_actual = build_unary_op (ADDR_EXPR, gnu_formal_type, gnu_actual);
- 	}
- 
-       /* Then see if the parameter is an array passed to a foreign convention
- 	 subprogram.  */
-       else if (is_true_formal_parm && DECL_BY_COMPONENT_PTR_P (gnu_formal))
- 	{
- 	  gnu_actual = maybe_padded_object (gnu_actual);
- 	  gnu_actual = maybe_unconstrained_array (gnu_actual);
- 
- 	  /* Take the address of the object and convert to the proper pointer
- 	     type.  We'd like to actually compute the address of the beginning
- 	     of the array using an ADDR_EXPR of an ARRAY_REF, but there's a
- 	     possibility that the ARRAY_REF might return a constant and we'd be
- 	     getting the wrong address.  Neither approach is exactly correct,
- 	     but this is the most likely to work in all cases.  */
- 	  gnu_formal_type = TREE_TYPE (gnu_formal);
- 	  gnu_actual = build_unary_op (ADDR_EXPR, gnu_formal_type, gnu_actual);
- 	}
- 
-       /* Then see if the parameter is passed by copy.  */
-       else if (is_true_formal_parm)
- 	{
- 	  if (!in_param)
- 	    gnu_name_list = tree_cons (NULL_TREE, gnu_name, gnu_name_list);
- 
- 	  gnu_actual = convert (gnu_formal_type, gnu_actual);
- 
- 	  /* If this is a front-end built-in function, there is no need to
- 	     convert to the type used to pass the argument.  */
- 	  if (!frontend_builtin)
- 	    gnu_actual = convert (DECL_ARG_TYPE (gnu_formal), gnu_actual);
- 	}
- 
-       /* Then see if this is an unnamed parameter in a variadic C function.  */
-       else if (variadic)
- 	{
- 	  /* This is based on the processing done in gnat_to_gnu_param, but
- 	     we expect the mechanism to be set in (almost) all cases.  */
- 	  const Mechanism_Type mech = Mechanism (gnat_formal);
- 
- 	  /* Strip off possible padding type.  */
- 	  if (TYPE_IS_PADDING_P (gnu_formal_type))
- 	    gnu_formal_type = TREE_TYPE (TYPE_FIELDS (gnu_formal_type));
- 
- 	  /* Arrays are passed as pointers to element type.  First check for
- 	     unconstrained array and get the underlying array.  */
- 	  if (TREE_CODE (gnu_formal_type) == UNCONSTRAINED_ARRAY_TYPE)
- 	    gnu_formal_type
- 	      = TREE_TYPE
- 		(TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_formal_type))));
- 
- 	  /* Arrays are passed as pointers to element type.  */
- 	  if (mech != By_Copy && TREE_CODE (gnu_formal_type) == ARRAY_TYPE)
- 	    {
- 	      gnu_actual = maybe_padded_object (gnu_actual);
- 	      gnu_actual = maybe_unconstrained_array (gnu_actual);
- 
- 	      /* Strip off any multi-dimensional entries, then strip
- 		 off the last array to get the component type.  */
- 	      while (TREE_CODE (TREE_TYPE (gnu_formal_type)) == ARRAY_TYPE
- 		     && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_formal_type)))
- 		gnu_formal_type = TREE_TYPE (gnu_formal_type);
- 
- 	      gnu_formal_type = TREE_TYPE (gnu_formal_type);
- 	      gnu_formal_type = build_pointer_type (gnu_formal_type);
- 	      gnu_actual
- 		= build_unary_op (ADDR_EXPR, gnu_formal_type, gnu_actual);
- 	    }
- 
- 	  /* Fat pointers are passed as thin pointers.  */
- 	  else if (TYPE_IS_FAT_POINTER_P (gnu_formal_type))
- 	    gnu_formal_type
- 	      = make_type_from_size (gnu_formal_type,
- 				     size_int (POINTER_SIZE), 0);
- 
- 	  /* If we were requested or muss pass by reference, do so.
- 	     If we were requested to pass by copy, do so.
- 	     Otherwise, pass In Out or Out parameters or aggregates by
- 	     reference.  */
- 	  else if (mech == By_Reference
- 		   || must_pass_by_ref (gnu_formal_type)
- 		   || (mech != By_Copy
- 		       && (!in_param || AGGREGATE_TYPE_P (gnu_formal_type))))
- 	    {
- 	      gnu_formal_type = build_reference_type (gnu_formal_type);
- 	      gnu_actual
- 		= build_unary_op (ADDR_EXPR, gnu_formal_type, gnu_actual);
- 	    }
- 
- 	  /* Otherwise pass by copy after applying default C promotions.  */
- 	  else
- 	    {
- 	      if (INTEGRAL_TYPE_P (gnu_formal_type)
- 		  && TYPE_PRECISION (gnu_formal_type)
- 		     < TYPE_PRECISION (integer_type_node))
- 		gnu_formal_type = integer_type_node;
- 
- 	      else if (SCALAR_FLOAT_TYPE_P (gnu_formal_type)
- 		       && TYPE_PRECISION (gnu_formal_type)
- 			  < TYPE_PRECISION (double_type_node))
- 		gnu_formal_type = double_type_node;
- 	    }
- 
- 	  gnu_actual = convert (gnu_formal_type, gnu_actual);
- 	}
- 
-       /* If we didn't create a PARM_DECL for the formal, this means that
- 	 it is an Out parameter not passed by reference and that need not
- 	 be copied in.  In this case, the value of the actual need not be
- 	 read.  However, we still need to make sure that its side-effects
- 	 are evaluated before the call, so we evaluate its address.  */
-       else
- 	{
- 	  if (!in_param)
- 	    gnu_name_list = tree_cons (NULL_TREE, gnu_name, gnu_name_list);
- 
- 	  if (TREE_SIDE_EFFECTS (gnu_name))
- 	    {
- 	      tree addr = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_name);
- 	      append_to_statement_list (addr, &gnu_stmt_list);
- 	    }
- 
- 	  continue;
- 	}
- 
-       gnu_actual_vec.safe_push (gnu_actual);
-     }
- 
-   if (frontend_builtin)
-     {
-       tree pred_cst = build_int_cst (integer_type_node, PRED_BUILTIN_EXPECT);
-       enum internal_fn icode = IFN_BUILTIN_EXPECT;
- 
-       switch (DECL_FE_FUNCTION_CODE (gnu_subprog))
- 	{
- 	case BUILT_IN_EXPECT:
- 	  break;
- 	case BUILT_IN_LIKELY:
- 	  gnu_actual_vec.safe_push (boolean_true_node);
- 	  break;
- 	case BUILT_IN_UNLIKELY:
- 	  gnu_actual_vec.safe_push (boolean_false_node);
- 	  break;
- 	default:
- 	  gcc_unreachable ();
- 	}
- 
-       gnu_actual_vec.safe_push (pred_cst);
- 
-       gnu_call
- 	= build_call_expr_internal_loc_array (UNKNOWN_LOCATION,
- 					      icode,
- 					      gnu_result_type,
- 					      gnu_actual_vec.length (),
- 					      gnu_actual_vec.begin ());
-     }
-   else
-     {
-       gnu_call
-         = build_call_array_loc (UNKNOWN_LOCATION,
- 				gnu_result_type,
- 				build_unary_op (ADDR_EXPR, NULL_TREE,
- 						gnu_subprog),
- 				gnu_actual_vec.length (),
- 			        gnu_actual_vec.begin ());
-       CALL_EXPR_BY_DESCRIPTOR (gnu_call) = by_descriptor;
-     }
- 
-   set_expr_location_from_node (gnu_call, gnat_node);
- 
-   /* If we have created a temporary for the return value, initialize it.  */
-   if (gnu_retval)
-     {
-       tree gnu_stmt
- 	= build_binary_op (INIT_EXPR, NULL_TREE, gnu_retval, gnu_call);
-       set_expr_location_from_node (gnu_stmt, gnat_node);
-       append_to_statement_list (gnu_stmt, &gnu_stmt_list);
-       gnu_call = gnu_retval;
-     }
- 
-   /* If this is a subprogram with copy-in/copy-out parameters, we need to
-      unpack the valued returned from the function into the In Out or Out
-      parameters.  We deal with the function return (if this is an Ada
-      function) below.  */
-   if (TYPE_CI_CO_LIST (gnu_subprog_type))
-     {
-       /* List of FIELD_DECLs associated with the PARM_DECLs of the copy-in/
- 	 copy-out parameters.  */
-       tree gnu_cico_list = TYPE_CI_CO_LIST (gnu_subprog_type);
-       const int length = list_length (gnu_cico_list);
- 
-       /* The call sequence must contain one and only one call, even though the
- 	 function is pure.  Save the result into a temporary if needed.  */
-       if (length > 1)
- 	{
- 	  if (!gnu_retval)
- 	    {
- 	      tree gnu_stmt;
- 	      gnu_call
- 		= create_init_temporary ("P", gnu_call, &gnu_stmt, gnat_node);
- 	      append_to_statement_list (gnu_stmt, &gnu_stmt_list);
- 	    }
- 
- 	  gnu_name_list = nreverse (gnu_name_list);
- 	}
- 
-       /* The first entry is for the actual return value if this is a
- 	 function, so skip it.  */
-       if (function_call)
- 	gnu_cico_list = TREE_CHAIN (gnu_cico_list);
- 
-       if (Nkind (Name (gnat_node)) == N_Explicit_Dereference)
- 	gnat_formal = First_Formal_With_Extras (Etype (Name (gnat_node)));
-       else
- 	gnat_formal = First_Formal_With_Extras (Entity (Name (gnat_node)));
- 
-       for (gnat_actual = First_Actual (gnat_node);
- 	   Present (gnat_actual);
- 	   gnat_formal = Next_Formal_With_Extras (gnat_formal),
- 	   gnat_actual = Next_Actual (gnat_actual))
- 	/* If we are dealing with a copy-in/copy-out parameter, we must
- 	   retrieve its value from the record returned in the call.  */
- 	if (!(present_gnu_tree (gnat_formal)
- 	      && TREE_CODE (get_gnu_tree (gnat_formal)) == PARM_DECL
- 	      && (DECL_BY_REF_P (get_gnu_tree (gnat_formal))
- 		  || DECL_BY_COMPONENT_PTR_P (get_gnu_tree (gnat_formal))))
- 	    && Ekind (gnat_formal) != E_In_Parameter)
- 	  {
- 	    /* Get the value to assign to this In Out or Out parameter.  It is
- 	       either the result of the function if there is only a single such
- 	       parameter or the appropriate field from the record returned.  */
- 	    tree gnu_result
- 	      = length == 1
- 		? gnu_call
- 		: build_component_ref (gnu_call, TREE_PURPOSE (gnu_cico_list),
- 				       false);
- 
- 	    /* If the actual is a conversion, get the inner expression, which
- 	       will be the real destination, and convert the result to the
- 	       type of the actual parameter.  */
- 	    tree gnu_actual
- 	      = maybe_unconstrained_array (TREE_VALUE (gnu_name_list));
- 
- 	    /* If the result is padded, remove the padding.  */
- 	    gnu_result = maybe_padded_object (gnu_result);
- 
- 	    /* If the actual is a type conversion, the real target object is
- 	       denoted by the inner Expression and we need to convert the
- 	       result to the associated type.
- 	       We also need to convert our gnu assignment target to this type
- 	       if the corresponding GNU_NAME was constructed from the GNAT
- 	       conversion node and not from the inner Expression.  */
- 	    if (Nkind (gnat_actual) == N_Type_Conversion)
- 	      {
- 		const Node_Id gnat_expr = Expression (gnat_actual);
- 
- 		gigi_checking_assert (!Do_Range_Check (gnat_expr));
- 
- 		gnu_result
- 		  = convert_with_check (Etype (gnat_expr), gnu_result,
- 					Do_Overflow_Check (gnat_actual),
- 					Float_Truncate (gnat_actual),
- 					gnat_actual);
- 
- 		if (!Is_Composite_Type (Underlying_Type (Etype (gnat_formal))))
- 		  gnu_actual = convert (TREE_TYPE (gnu_result), gnu_actual);
- 	      }
- 
- 	    /* Unchecked conversions as actuals for Out parameters are not
- 	       allowed in user code because they are not variables, but do
- 	       occur in front-end expansions.  The associated GNU_NAME is
- 	       always obtained from the inner expression in such cases.  */
- 	    else if (Nkind (gnat_actual) == N_Unchecked_Type_Conversion)
- 	      gnu_result = unchecked_convert (TREE_TYPE (gnu_actual),
- 					      gnu_result,
- 					      No_Truncation (gnat_actual));
- 	    else
- 	      {
- 		gigi_checking_assert (!Do_Range_Check (gnat_actual));
- 
- 		if (!(!TREE_CONSTANT (TYPE_SIZE (TREE_TYPE (gnu_actual)))
- 		      && TREE_CONSTANT (TYPE_SIZE (TREE_TYPE (gnu_result)))))
- 		  gnu_result = convert (TREE_TYPE (gnu_actual), gnu_result);
- 	      }
- 
- 	    get_atomic_access (gnat_actual, &aa_type, &aa_sync);
- 
- 	    /* If an outer atomic access is required for an actual parameter,
- 	       build the load-modify-store sequence.  */
- 	    if (aa_type == OUTER_ATOMIC)
- 	      gnu_result
- 		= build_load_modify_store (gnu_actual, gnu_result, gnat_node);
- 
- 	    /* Or else, if a simple atomic access is required, build the atomic
- 	       store.  */
- 	    else if (aa_type == SIMPLE_ATOMIC)
- 	      gnu_result
- 		= build_atomic_store (gnu_actual, gnu_result, aa_sync);
- 
- 	    /* Otherwise build a regular assignment.  */
- 	    else
- 	      gnu_result = build_binary_op (MODIFY_EXPR, NULL_TREE,
- 					    gnu_actual, gnu_result);
- 
- 	    if (EXPR_P (gnu_result))
- 	      set_expr_location_from_node (gnu_result, gnat_node);
- 	    append_to_statement_list (gnu_result, &gnu_stmt_list);
- 	    gnu_cico_list = TREE_CHAIN (gnu_cico_list);
- 	    gnu_name_list = TREE_CHAIN (gnu_name_list);
- 	  }
-     }
- 
-   /* If this is a function call, the result is the call expression unless a
-      target is specified, in which case we copy the result into the target
-      and return the assignment statement.  */
-   if (function_call)
-     {
-       /* If this is a function with copy-in/copy-out parameters, extract the
- 	 return value from it and update the return type.  */
-       if (TYPE_CI_CO_LIST (gnu_subprog_type))
- 	{
- 	  tree gnu_elmt = TYPE_CI_CO_LIST (gnu_subprog_type);
- 	  gnu_call
- 	    = build_component_ref (gnu_call, TREE_PURPOSE (gnu_elmt), false);
- 	  gnu_result_type = TREE_TYPE (gnu_call);
- 	}
- 
-       /* If the function returns an unconstrained array or by direct reference,
- 	 we have to dereference the pointer.  */
-       if (TYPE_RETURN_UNCONSTRAINED_P (gnu_subprog_type)
- 	  || TYPE_RETURN_BY_DIRECT_REF_P (gnu_subprog_type))
- 	gnu_call = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_call);
- 
-       if (gnu_target)
- 	{
- 	  Node_Id gnat_parent = Parent (gnat_node);
- 	  enum tree_code op_code;
- 
- 	  gigi_checking_assert (!Do_Range_Check (gnat_node));
- 
- 	  /* ??? If the return type has variable size, then force the return
- 	     slot optimization as we would not be able to create a temporary.
- 	     That's what has been done historically.  */
- 	  if (return_type_with_variable_size_p (gnu_result_type))
- 	    op_code = INIT_EXPR;
- 	  else
- 	    op_code = MODIFY_EXPR;
- 
- 	  /* Use the required method to move the result to the target.  */
- 	  if (atomic_access == OUTER_ATOMIC)
- 	    gnu_call
- 	      = build_load_modify_store (gnu_target, gnu_call, gnat_node);
- 	  else if (atomic_access == SIMPLE_ATOMIC)
- 	    gnu_call = build_atomic_store (gnu_target, gnu_call, atomic_sync);
- 	  else
- 	    gnu_call
- 	      = build_binary_op (op_code, NULL_TREE, gnu_target, gnu_call);
- 
- 	  if (EXPR_P (gnu_call))
- 	    set_expr_location_from_node (gnu_call, gnat_parent);
- 	  append_to_statement_list (gnu_call, &gnu_stmt_list);
- 	}
-       else
- 	*gnu_result_type_p = get_unpadded_type (Etype (gnat_node));
-     }
- 
-   /* Otherwise, if this is a procedure call statement without copy-in/copy-out
-      parameters, the result is just the call statement.  */
-   else if (!TYPE_CI_CO_LIST (gnu_subprog_type))
-     append_to_statement_list (gnu_call, &gnu_stmt_list);
- 
-   /* Finally, add the copy back statements, if any.  */
-   append_to_statement_list (gnu_after_list, &gnu_stmt_list);
- 
-   if (went_into_elab_proc)
-     current_function_decl = NULL_TREE;
- 
-   /* If we have pushed a binding level, pop it and finish up the enclosing
-      statement group.  */
-   if (pushed_binding_level)
-     {
-       add_stmt (gnu_stmt_list);
-       gnat_poplevel ();
-       gnu_result = end_stmt_group ();
-     }
- 
-   /* Otherwise, retrieve the statement list, if any.  */
-   else if (gnu_stmt_list)
-     gnu_result = gnu_stmt_list;
- 
-   /* Otherwise, just return the call expression.  */
-   else
-     return gnu_call;
- 
-   /* If we nevertheless need a value, make a COMPOUND_EXPR to return it.
-      But first simplify if we have only one statement in the list.  */
-   if (returning_value)
-     {
-       tree first = expr_first (gnu_result), last = expr_last (gnu_result);
-       if (first == last)
- 	gnu_result = first;
-       gnu_result
- 	= build_compound_expr (TREE_TYPE (gnu_call), gnu_result, gnu_call);
-     }
- 
-   return gnu_result;
- }
- 
- /* Subroutine of gnat_to_gnu to translate gnat_node, an
-    N_Handled_Sequence_Of_Statements, to a GCC tree, which is returned.  */
- 
- static tree
- Handled_Sequence_Of_Statements_to_gnu (Node_Id gnat_node)
- {
-   /* If just annotating, ignore all EH and cleanups.  */
-   const bool gcc_eh
-     = (!type_annotate_only
-        && Present (Exception_Handlers (gnat_node))
-        && Back_End_Exceptions ());
-   const bool fe_sjlj_eh
-     = (!type_annotate_only
-        && Present (Exception_Handlers (gnat_node))
-        && Exception_Mechanism == Front_End_SJLJ);
-   const bool at_end = !type_annotate_only && Present (At_End_Proc (gnat_node));
-   const bool binding_for_block = (at_end || gcc_eh || fe_sjlj_eh);
-   tree gnu_jmpsave_decl = NULL_TREE;
-   tree gnu_jmpbuf_decl = NULL_TREE;
-   tree gnu_inner_block; /* The statement(s) for the block itself.  */
-   tree gnu_result;
-   tree gnu_expr;
-   Node_Id gnat_temp;
- 
-   /* The GCC exception handling mechanism can handle both ZCX and SJLJ schemes
-      and the front-end has its own SJLJ mechanism.  To call the GCC mechanism,
-      we call add_cleanup, and when we leave the binding, end_stmt_group will
-      create the TRY_FINALLY_EXPR construct.
- 
-      ??? The region level calls down there have been specifically put in place
-      for a ZCX context and currently the order in which things are emitted
-      (region/handlers) is different from the SJLJ case.  Instead of putting
-      other calls with different conditions at other places for the SJLJ case,
-      it seems cleaner to reorder things for the SJLJ case and generalize the
-      condition to make it not ZCX specific.
- 
-      If there are any exceptions or cleanup processing involved, we need an
-      outer statement group (for front-end SJLJ) and binding level.  */
-   if (binding_for_block)
-     {
-       start_stmt_group ();
-       gnat_pushlevel ();
-     }
- 
-   /* If using fe_sjlj_eh, make the variables for the setjmp buffer and save
-      area for address of previous buffer.  Do this first since we need to have
-      the setjmp buf known for any decls in this block.  */
-   if (fe_sjlj_eh)
-     {
-       gnu_jmpsave_decl
- 	= create_var_decl (get_identifier ("JMPBUF_SAVE"), NULL_TREE,
- 			   jmpbuf_ptr_type,
- 			   build_call_n_expr (get_jmpbuf_decl, 0),
- 			   false, false, false, false, false, true, false,
- 			   NULL, gnat_node);
- 
-       /* The __builtin_setjmp receivers will immediately reinstall it.  Now
- 	 because of the unstructured form of EH used by fe_sjlj_eh, there
- 	 might be forward edges going to __builtin_setjmp receivers on which
- 	 it is uninitialized, although they will never be actually taken.  */
-       TREE_NO_WARNING (gnu_jmpsave_decl) = 1;
-       gnu_jmpbuf_decl
- 	= create_var_decl (get_identifier ("JMP_BUF"), NULL_TREE,
- 			   jmpbuf_type,
- 			   NULL_TREE,
- 			   false, false, false, false, false, true, false,
- 			   NULL, gnat_node);
- 
-       set_block_jmpbuf_decl (gnu_jmpbuf_decl);
- 
-       /* When we exit this block, restore the saved value.  */
-       add_cleanup (build_call_n_expr (set_jmpbuf_decl, 1, gnu_jmpsave_decl),
- 		   Present (End_Label (gnat_node))
- 		   ? End_Label (gnat_node) : gnat_node);
-     }
- 
-   /* If we are to call a function when exiting this block, add a cleanup
-      to the binding level we made above.  Note that add_cleanup is FIFO
-      so we must register this cleanup after the EH cleanup just above.  */
-   if (at_end)
-     {
-       tree proc_decl = gnat_to_gnu (At_End_Proc (gnat_node));
- 
-       /* When not optimizing, disable inlining of finalizers as this can
- 	 create a more complex CFG in the parent function.  */
-       if (!optimize || optimize_debug)
- 	DECL_DECLARED_INLINE_P (proc_decl) = 0;
- 
-       /* If there is no end label attached, we use the location of the At_End
- 	 procedure because Expand_Cleanup_Actions might reset the location of
- 	 the enclosing construct to that of an inner statement.  */
-       add_cleanup (build_call_n_expr (proc_decl, 0),
- 		   Present (End_Label (gnat_node))
- 		   ? End_Label (gnat_node) : At_End_Proc (gnat_node));
-     }
- 
-   /* Now build the tree for the declarations and statements inside this block.
-      If this is SJLJ, set our jmp_buf as the current buffer.  */
-   start_stmt_group ();
- 
-   if (fe_sjlj_eh)
-     {
-       gnu_expr = build_call_n_expr (set_jmpbuf_decl, 1,
- 				    build_unary_op (ADDR_EXPR, NULL_TREE,
- 						    gnu_jmpbuf_decl));
-       set_expr_location_from_node (gnu_expr, gnat_node);
-       add_stmt (gnu_expr);
-     }
- 
-   if (Present (First_Real_Statement (gnat_node)))
-     process_decls (Statements (gnat_node), Empty,
- 		   First_Real_Statement (gnat_node), true, true);
- 
-   /* Generate code for each statement in the block.  */
-   for (gnat_temp = (Present (First_Real_Statement (gnat_node))
- 		    ? First_Real_Statement (gnat_node)
- 		    : First (Statements (gnat_node)));
-        Present (gnat_temp); gnat_temp = Next (gnat_temp))
-     add_stmt (gnat_to_gnu (gnat_temp));
- 
-   gnu_inner_block = end_stmt_group ();
- 
-   /* Now generate code for the two exception models, if either is relevant for
-      this block.  */
-   if (fe_sjlj_eh)
-     {
-       tree *gnu_else_ptr = 0;
-       tree gnu_handler;
- 
-       /* Make a binding level for the exception handling declarations and code
- 	 and set up gnu_except_ptr_stack for the handlers to use.  */
-       start_stmt_group ();
-       gnat_pushlevel ();
- 
-       vec_safe_push (gnu_except_ptr_stack,
- 		     create_var_decl (get_identifier ("EXCEPT_PTR"), NULL_TREE,
- 				      build_pointer_type (except_type_node),
- 				      build_call_n_expr (get_excptr_decl, 0),
- 				      false, false, false, false, false,
- 				      true, false, NULL, gnat_node));
- 
-       /* Generate code for each handler. The N_Exception_Handler case does the
- 	 real work and returns a COND_EXPR for each handler, which we chain
- 	 together here.  */
-       for (gnat_temp = First_Non_Pragma (Exception_Handlers (gnat_node));
- 	   Present (gnat_temp); gnat_temp = Next_Non_Pragma (gnat_temp))
- 	{
- 	  gnu_expr = gnat_to_gnu (gnat_temp);
- 
- 	  /* If this is the first one, set it as the outer one. Otherwise,
- 	     point the "else" part of the previous handler to us. Then point
- 	     to our "else" part.  */
- 	  if (!gnu_else_ptr)
- 	    add_stmt (gnu_expr);
- 	  else
- 	    *gnu_else_ptr = gnu_expr;
- 
- 	  gnu_else_ptr = &COND_EXPR_ELSE (gnu_expr);
- 	}
- 
-       /* If none of the exception handlers did anything, re-raise but do not
- 	 defer abortion.  */
-       gnu_expr = build_call_n_expr (raise_nodefer_decl, 1,
- 				    gnu_except_ptr_stack->last ());
-       set_expr_location_from_node
- 	(gnu_expr,
- 	 Present (End_Label (gnat_node)) ? End_Label (gnat_node) : gnat_node);
- 
-       if (gnu_else_ptr)
- 	*gnu_else_ptr = gnu_expr;
-       else
- 	add_stmt (gnu_expr);
- 
-       /* End the binding level dedicated to the exception handlers and get the
- 	 whole statement group.  */
-       gnu_except_ptr_stack->pop ();
-       gnat_poplevel ();
-       gnu_handler = end_stmt_group ();
- 
-       /* If the setjmp returns 1, we restore our incoming longjmp value and
- 	 then check the handlers.  */
-       start_stmt_group ();
-       add_stmt_with_node (build_call_n_expr (set_jmpbuf_decl, 1,
- 					     gnu_jmpsave_decl),
- 			  gnat_node);
-       add_stmt (gnu_handler);
-       gnu_handler = end_stmt_group ();
- 
-       /* This block is now "if (setjmp) ... <handlers> else <block>".  */
-       gnu_result = build3 (COND_EXPR, void_type_node,
- 			   (build_call_n_expr
- 			    (setjmp_decl, 1,
- 			     build_unary_op (ADDR_EXPR, NULL_TREE,
- 					     gnu_jmpbuf_decl))),
- 			   gnu_handler, gnu_inner_block);
-     }
-   else if (gcc_eh)
-     {
-       tree gnu_handlers;
-       location_t locus;
- 
-       /* First make a block containing the handlers.  */
-       start_stmt_group ();
-       for (gnat_temp = First_Non_Pragma (Exception_Handlers (gnat_node));
- 	   Present (gnat_temp);
- 	   gnat_temp = Next_Non_Pragma (gnat_temp))
- 	add_stmt (gnat_to_gnu (gnat_temp));
-       gnu_handlers = end_stmt_group ();
- 
-       /* Now make the TRY_CATCH_EXPR for the block.  */
-       gnu_result = build2 (TRY_CATCH_EXPR, void_type_node,
- 			   gnu_inner_block, gnu_handlers);
-       /* Set a location.  We need to find a unique location for the dispatching
- 	 code, otherwise we can get coverage or debugging issues.  Try with
- 	 the location of the end label.  */
-       if (Present (End_Label (gnat_node))
- 	  && Sloc_to_locus (Sloc (End_Label (gnat_node)), &locus))
- 	SET_EXPR_LOCATION (gnu_result, locus);
-       else
-         /* Clear column information so that the exception handler of an
-            implicit transient block does not incorrectly inherit the slocs
-            of a decision, which would otherwise confuse control flow based
-            coverage analysis tools.  */
- 	set_expr_location_from_node (gnu_result, gnat_node, true);
-     }
-   else
-     gnu_result = gnu_inner_block;
- 
-   /* Now close our outer block, if we had to make one.  */
-   if (binding_for_block)
-     {
-       add_stmt (gnu_result);
-       gnat_poplevel ();
-       gnu_result = end_stmt_group ();
-     }
- 
-   return gnu_result;
- }
- 
- /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Exception_Handler,
-    to a GCC tree, which is returned.  This is the variant for front-end sjlj
-    exception handling.  */
- 
- static tree
- Exception_Handler_to_gnu_fe_sjlj (Node_Id gnat_node)
- {
-   /* Unless this is "Others" or the special "Non-Ada" exception for Ada, make
-      an "if" statement to select the proper exceptions.  For "Others", exclude
-      exceptions where Handled_By_Others is nonzero unless the All_Others flag
-      is set. For "Non-ada", accept an exception if "Lang" is 'V'.  */
-   tree gnu_choice = boolean_false_node;
-   tree gnu_body = build_stmt_group (Statements (gnat_node), false);
-   Node_Id gnat_temp;
- 
-   for (gnat_temp = First (Exception_Choices (gnat_node));
-        gnat_temp; gnat_temp = Next (gnat_temp))
-     {
-       tree this_choice;
- 
-       if (Nkind (gnat_temp) == N_Others_Choice)
- 	{
- 	  if (All_Others (gnat_temp))
- 	    this_choice = boolean_true_node;
- 	  else
- 	    this_choice
- 	      = build_binary_op
- 		(EQ_EXPR, boolean_type_node,
- 		 convert
- 		 (integer_type_node,
- 		  build_component_ref
- 		  (build_unary_op
- 		   (INDIRECT_REF, NULL_TREE,
- 		    gnu_except_ptr_stack->last ()),
- 		   not_handled_by_others_decl,
- 		   false)),
- 		 integer_zero_node);
- 	}
- 
-       else if (Nkind (gnat_temp) == N_Identifier
- 	       || Nkind (gnat_temp) == N_Expanded_Name)
- 	{
- 	  Entity_Id gnat_ex_id = Entity (gnat_temp);
- 	  tree gnu_expr;
- 
- 	  /* Exception may be a renaming. Recover original exception which is
- 	     the one elaborated and registered.  */
- 	  if (Present (Renamed_Object (gnat_ex_id)))
- 	    gnat_ex_id = Renamed_Object (gnat_ex_id);
- 
- 	  gnu_expr = gnat_to_gnu_entity (gnat_ex_id, NULL_TREE, false);
- 
- 	  this_choice
- 	    = build_binary_op
- 	      (EQ_EXPR, boolean_type_node,
- 	       gnu_except_ptr_stack->last (),
- 	       convert (TREE_TYPE (gnu_except_ptr_stack->last ()),
- 			build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr)));
- }
-       else
- 	gcc_unreachable ();
- 
-       gnu_choice = build_binary_op (TRUTH_ORIF_EXPR, boolean_type_node,
- 				    gnu_choice, this_choice);
-     }
- 
-   return build3 (COND_EXPR, void_type_node, gnu_choice, gnu_body, NULL_TREE);
- }
- 
- /* Return true if no statement in GNAT_LIST can alter the control flow.  */
- 
- static bool
- stmt_list_cannot_alter_control_flow_p (List_Id gnat_list)
- {
-   if (No (gnat_list))
-     return true;
- 
-   /* This is very conservative, we reject everything except for simple
-      assignments between identifiers or literals.  */
-   for (Node_Id gnat_node = First (gnat_list);
-        Present (gnat_node);
-        gnat_node = Next (gnat_node))
-     {
-       if (Nkind (gnat_node) != N_Assignment_Statement)
- 	return false;
- 
-       if (Nkind (Name (gnat_node)) != N_Identifier)
- 	return false;
- 
-       Node_Kind nkind = Nkind (Expression (gnat_node));
-       if (nkind != N_Identifier
- 	  && nkind != N_Integer_Literal
- 	  && nkind != N_Real_Literal)
- 	return false;
-     }
- 
-   return true;
- }
- 
- /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Exception_Handler,
-    to a GCC tree, which is returned.  This is the variant for GCC exception
-    schemes.  */
- 
- static tree
- Exception_Handler_to_gnu_gcc (Node_Id gnat_node)
- {
-   tree gnu_etypes_list = NULL_TREE;
- 
-   /* We build a TREE_LIST of nodes representing what exception types this
-      handler can catch, with special cases for others and all others cases.
- 
-      Each exception type is actually identified by a pointer to the exception
-      id, or to a dummy object for "others" and "all others".  */
-   for (Node_Id gnat_temp = First (Exception_Choices (gnat_node));
-        gnat_temp;
-        gnat_temp = Next (gnat_temp))
-     {
-       tree gnu_expr, gnu_etype;
- 
-       if (Nkind (gnat_temp) == N_Others_Choice)
- 	{
- 	  gnu_expr = All_Others (gnat_temp) ? all_others_decl : others_decl;
- 	  gnu_etype = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr);
- 	}
-       else if (Nkind (gnat_temp) == N_Identifier
- 	       || Nkind (gnat_temp) == N_Expanded_Name)
- 	{
- 	  Entity_Id gnat_ex_id = Entity (gnat_temp);
- 
- 	  /* Exception may be a renaming.  Recover original exception which is
- 	     the one elaborated and registered.  */
- 	  if (Present (Renamed_Object (gnat_ex_id)))
- 	    gnat_ex_id = Renamed_Object (gnat_ex_id);
- 
- 	  gnu_expr = gnat_to_gnu_entity (gnat_ex_id, NULL_TREE, false);
- 	  gnu_etype = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr);
- 	}
-       else
- 	gcc_unreachable ();
- 
-       /* The GCC interface expects NULL to be passed for catch all handlers, so
- 	 it would be quite tempting to set gnu_etypes_list to NULL if gnu_etype
- 	 is integer_zero_node.  It would not work, however, because GCC's
- 	 notion of "catch all" is stronger than our notion of "others".  Until
- 	 we correctly use the cleanup interface as well, doing that would
- 	 prevent the "all others" handlers from being seen, because nothing
- 	 can be caught beyond a catch all from GCC's point of view.  */
-       gnu_etypes_list = tree_cons (NULL_TREE, gnu_etype, gnu_etypes_list);
-     }
- 
-   start_stmt_group ();
-   gnat_pushlevel ();
- 
-   /* Expand a call to the begin_handler hook at the beginning of the
-      handler, and arrange for a call to the end_handler hook to occur
-      on every possible exit path.  GDB sets a breakpoint in the
-      begin_handler for catchpoints.
- 
-      A v1 begin handler saves the cleanup from the exception object,
-      and marks the exception as in use, so that it will not be
-      released by other handlers.  A v1 end handler restores the
-      cleanup and releases the exception object, unless it is still
-      claimed, or the exception is being propagated (reraised).
- 
-      __builtin_eh_pointer references the exception occurrence being
-      handled or propagated.  Within the handler region, it is the
-      former, but within the else branch of the EH_ELSE_EXPR, i.e. the
-      exceptional cleanup path, it is the latter, so we must save the
-      occurrence being handled early on, so that, should an exception
-      be (re)raised, we can release the current exception, or figure
-      out we're not to release it because we're propagating a reraise
-      thereof.
- 
-      We use local variables to retrieve the incoming value at handler
-      entry time (EXPTR), the saved cleanup (EXCLN) and the token
-      (EXVTK), and reuse them to feed the end_handler hook's argument
-      at exit.  */
- 
-   /* CODE: void *EXPTR = __builtin_eh_pointer (0); */
-   tree gnu_current_exc_ptr
-     = build_call_expr (builtin_decl_explicit (BUILT_IN_EH_POINTER),
- 		       1, integer_zero_node);
-   tree exc_ptr
-     = create_var_decl (get_identifier ("EXPTR"), NULL_TREE,
- 		       ptr_type_node, gnu_current_exc_ptr,
- 		       true, false, false, false, false, true, true,
- 		       NULL, gnat_node);
- 
-   tree prev_gnu_incoming_exc_ptr = gnu_incoming_exc_ptr;
-   gnu_incoming_exc_ptr = exc_ptr;
- 
-   /* begin_handler_decl must not throw, so we can use it as an
-      initializer for a variable used in cleanups.
- 
-      CODE: void *EXCLN = __gnat_begin_handler_v1 (EXPTR); */
-   tree exc_cleanup
-     = create_var_decl (get_identifier ("EXCLN"), NULL_TREE,
- 		       ptr_type_node,
- 		       build_call_n_expr (begin_handler_decl, 1,
- 					  exc_ptr),
- 		       true, false, false, false, false,
- 		       true, true, NULL, gnat_node);
- 
-   /* Declare and initialize the choice parameter, if present.  */
-   if (Present (Choice_Parameter (gnat_node)))
-     {
-       tree gnu_param
- 	= gnat_to_gnu_entity (Choice_Parameter (gnat_node), NULL_TREE, true);
- 
-       /* CODE: __gnat_set_exception_parameter (&choice_param, EXPTR); */
-       add_stmt (build_call_n_expr
- 		(set_exception_parameter_decl, 2,
- 		 build_unary_op (ADDR_EXPR, NULL_TREE, gnu_param),
- 		 gnu_incoming_exc_ptr));
-     }
- 
-   /* CODE: <handler proper> */
-   add_stmt_list (Statements (gnat_node));
- 
-   tree call = build_call_n_expr (end_handler_decl, 3,
- 				 exc_ptr,
- 				 exc_cleanup,
- 				 null_pointer_node);
-   /* If the handler can only end by falling off the end, don't bother
-      with cleanups.  */
-   if (stmt_list_cannot_alter_control_flow_p (Statements (gnat_node)))
-     /* CODE: __gnat_end_handler_v1 (EXPTR, EXCLN, NULL);  */
-     add_stmt_with_node (call, gnat_node);
-   /* Otherwise, all of the above is after
-      CODE: try {
- 
-      The call above will appear after
-      CODE: } finally {
- 
-      And the code below will appear after
-      CODE: } else {
- 
-      The else block to a finally block is taken instead of the finally
-      block when an exception propagates out of the try block.  */
-   else
-     {
-       start_stmt_group ();
-       gnat_pushlevel ();
-       /* CODE: void *EXPRP = __builtin_eh_handler (0); */
-       tree prop_ptr
- 	= create_var_decl (get_identifier ("EXPRP"), NULL_TREE,
- 			   ptr_type_node,
- 			   build_call_expr (builtin_decl_explicit
- 					    (BUILT_IN_EH_POINTER),
- 					    1, integer_zero_node),
- 			   true, false, false, false, false,
- 			   true, true, NULL, gnat_node);
- 
-       /* CODE: __gnat_end_handler_v1 (EXPTR, EXCLN, EXPRP);  */
-       tree ecall = build_call_n_expr (end_handler_decl, 3,
- 				      exc_ptr,
- 				      exc_cleanup,
- 				      prop_ptr);
- 
-       add_stmt_with_node (ecall, gnat_node);
- 
-       /* CODE: } */
-       gnat_poplevel ();
-       tree eblk = end_stmt_group ();
-       tree ehls = build2 (EH_ELSE_EXPR, void_type_node, call, eblk);
-       add_cleanup (ehls, gnat_node);
-     }
- 
-   gnat_poplevel ();
- 
-   gnu_incoming_exc_ptr = prev_gnu_incoming_exc_ptr;
- 
-   return
-     build2 (CATCH_EXPR, void_type_node, gnu_etypes_list, end_stmt_group ());
- }
- 
- /* Subroutine of gnat_to_gnu to generate code for an N_Compilation unit.  */
- 
- static void
- Compilation_Unit_to_gnu (Node_Id gnat_node)
- {
-   const Node_Id gnat_unit = Unit (gnat_node);
-   const bool body_p = (Nkind (gnat_unit) == N_Package_Body
- 		       || Nkind (gnat_unit) == N_Subprogram_Body);
-   const Entity_Id gnat_unit_entity = Defining_Entity (gnat_unit);
-   Entity_Id gnat_entity;
-   Node_Id gnat_pragma, gnat_iter;
-   /* Make the decl for the elaboration procedure.  Emit debug info for it, so
-      that users can break into their elaboration code in debuggers.  Kludge:
-      don't consider it as a definition so that we have a line map for its
-      body, but no subprogram description in debug info.  In addition, don't
-      qualify it as artificial, even though it is not a user subprogram per se,
-      in particular for specs.  Unlike, say, clones created internally by the
-      compiler, this subprogram materializes specific user code and flagging it
-      artificial would take elab code away from gcov's analysis.  */
-   tree gnu_elab_proc_decl
-     = create_subprog_decl
-       (create_concat_name (gnat_unit_entity, body_p ? "elabb" : "elabs"),
-        NULL_TREE, void_ftype, NULL_TREE,
-        is_default, true, false, false, true, false, NULL, gnat_unit);
-   struct elab_info *info;
- 
-   vec_safe_push (gnu_elab_proc_stack, gnu_elab_proc_decl);
-   DECL_ELABORATION_PROC_P (gnu_elab_proc_decl) = 1;
- 
-   /* Initialize the information structure for the function.  */
-   allocate_struct_function (gnu_elab_proc_decl, false);
-   set_cfun (NULL);
- 
-   current_function_decl = NULL_TREE;
- 
-   start_stmt_group ();
-   gnat_pushlevel ();
- 
-   /* For a body, first process the spec if there is one.  */
-   if (Nkind (gnat_unit) == N_Package_Body
-       || (Nkind (gnat_unit) == N_Subprogram_Body && !Acts_As_Spec (gnat_node)))
-     add_stmt (gnat_to_gnu (Library_Unit (gnat_node)));
- 
-   if (type_annotate_only && gnat_node == Cunit (Main_Unit))
-     {
-       elaborate_all_entities (gnat_node);
- 
-       if (Nkind (gnat_unit) == N_Subprogram_Declaration
- 	  || Nkind (gnat_unit) == N_Generic_Package_Declaration
- 	  || Nkind (gnat_unit) == N_Generic_Subprogram_Declaration)
- 	return;
-     }
- 
-   /* Then process any pragmas and declarations preceding the unit.  */
-   for (gnat_pragma = First (Context_Items (gnat_node));
-        Present (gnat_pragma);
-        gnat_pragma = Next (gnat_pragma))
-     if (Nkind (gnat_pragma) == N_Pragma)
-       add_stmt (gnat_to_gnu (gnat_pragma));
-   process_decls (Declarations (Aux_Decls_Node (gnat_node)), Empty, Empty,
- 		 true, true);
- 
-   /* Process the unit itself.  */
-   add_stmt (gnat_to_gnu (gnat_unit));
- 
-   /* Generate code for all the inlined subprograms.  */
-   for (gnat_entity = First_Inlined_Subprogram (gnat_node);
-        Present (gnat_entity);
-        gnat_entity = Next_Inlined_Subprogram (gnat_entity))
-     {
-       Node_Id gnat_body;
- 
-       /* Without optimization, process only the required subprograms.  */
-       if (!optimize && !Has_Pragma_Inline_Always (gnat_entity))
- 	continue;
- 
-       /* The set of inlined subprograms is computed from data recorded early
- 	 during expansion and it can be a strict superset of the final set
- 	 computed after semantic analysis, for example if a call to such a
- 	 subprogram occurs in a pragma Assert and assertions are disabled.
- 	 In that case, semantic analysis resets Is_Public to false but the
- 	 entry for the subprogram in the inlining tables is stalled.  */
-       if (!Is_Public (gnat_entity))
- 	continue;
- 
-       gnat_body = Parent (Declaration_Node (gnat_entity));
-       if (Nkind (gnat_body) != N_Subprogram_Body)
- 	{
- 	  /* ??? This happens when only the spec of a package is provided.  */
- 	  if (No (Corresponding_Body (gnat_body)))
- 	    continue;
- 
- 	  gnat_body
- 	    = Parent (Declaration_Node (Corresponding_Body (gnat_body)));
- 	}
- 
-       /* Define the entity first so we set DECL_EXTERNAL.  */
-       gnat_to_gnu_entity (gnat_entity, NULL_TREE, false);
-       add_stmt (gnat_to_gnu (gnat_body));
-     }
- 
-   /* Process any pragmas and actions following the unit.  */
-   add_stmt_list (Pragmas_After (Aux_Decls_Node (gnat_node)));
-   add_stmt_list (Actions (Aux_Decls_Node (gnat_node)));
-   finalize_from_limited_with ();
- 
-   /* Then process the expressions of pragma Compile_Time_{Error|Warning} to
-      annotate types referenced therein if they have not been annotated.  */
-   for (int i = 0; gnat_compile_time_expr_list.iterate (i, &gnat_iter); i++)
-     (void) gnat_to_gnu_external (gnat_iter);
-   gnat_compile_time_expr_list.release ();
- 
-   /* Save away what we've made so far and finish it up.  */
-   set_current_block_context (gnu_elab_proc_decl);
-   gnat_poplevel ();
-   DECL_SAVED_TREE (gnu_elab_proc_decl) = end_stmt_group ();
-   set_end_locus_from_node (gnu_elab_proc_decl, gnat_unit);
-   gnu_elab_proc_stack->pop ();
- 
-   /* Record this potential elaboration procedure for later processing.  */
-   info = ggc_alloc<elab_info> ();
-   info->next = elab_info_list;
-   info->elab_proc = gnu_elab_proc_decl;
-   info->gnat_node = gnat_node;
-   elab_info_list = info;
- 
-   /* Force the processing for all nodes that remain in the queue.  */
-   process_deferred_decl_context (true);
- }
- 
- /* Mark COND, a boolean expression, as predicating a call to a noreturn
-    function, i.e. predict that it is very likely false, and return it.
- 
-    The compiler will automatically predict the last edge leading to a call
-    to a noreturn function as very unlikely taken.  This function makes it
-    possible to extend the prediction to predecessors in case the condition
-    is made up of several short-circuit operators.  */
- 
- static tree
- build_noreturn_cond (tree cond)
- {
-   tree pred_cst = build_int_cst (integer_type_node, PRED_NORETURN);
-   return
-     build_call_expr_internal_loc (UNKNOWN_LOCATION, IFN_BUILTIN_EXPECT,
- 				  boolean_type_node, 3, cond,
- 				  boolean_false_node, pred_cst);
- }
- 
- /* Subroutine of gnat_to_gnu to translate GNAT_RANGE, a node representing a
-    range of values, into GNU_LOW and GNU_HIGH bounds.  */
- 
- static void
- Range_to_gnu (Node_Id gnat_range, tree *gnu_low, tree *gnu_high)
- {
-   /* GNAT_RANGE is either an N_Range or an identifier denoting a subtype.  */
-   switch (Nkind (gnat_range))
-     {
-     case N_Range:
-       *gnu_low = gnat_to_gnu (Low_Bound (gnat_range));
-       *gnu_high = gnat_to_gnu (High_Bound (gnat_range));
-       break;
- 
-     case N_Expanded_Name:
-     case N_Identifier:
-       {
- 	tree gnu_range_type = get_unpadded_type (Entity (gnat_range));
- 	tree gnu_range_base_type = get_base_type (gnu_range_type);
- 
- 	*gnu_low
- 	  = convert (gnu_range_base_type, TYPE_MIN_VALUE (gnu_range_type));
- 	*gnu_high
- 	  = convert (gnu_range_base_type, TYPE_MAX_VALUE (gnu_range_type));
-       }
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- }
- 
- /* Subroutine of gnat_to_gnu to translate GNAT_NODE, an N_Raise_xxx_Error,
-    to a GCC tree and return it.  GNU_RESULT_TYPE_P is a pointer to where
-    we should place the result type.  */
- 
- static tree
- Raise_Error_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p)
- {
-   const Node_Kind kind = Nkind (gnat_node);
-   const Node_Id gnat_cond = Condition (gnat_node);
-   const int reason = UI_To_Int (Reason (gnat_node));
-   const bool with_extra_info
-     = Exception_Extra_Info
-       && !No_Exception_Handlers_Set ()
-       && No (get_exception_label (kind));
-   tree gnu_result = NULL_TREE, gnu_cond = NULL_TREE;
-   Node_Id gnat_rcond;
- 
-   /* The following processing is not required for correctness.  Its purpose is
-      to give more precise error messages and to record some information.  */
-   switch (reason)
-     {
-     case CE_Access_Check_Failed:
-       if (with_extra_info)
- 	gnu_result = build_call_raise_column (reason, gnat_node, kind);
-       break;
- 
-     case CE_Index_Check_Failed:
-     case CE_Range_Check_Failed:
-     case CE_Invalid_Data:
-       if (No (gnat_cond) || Nkind (gnat_cond) != N_Op_Not)
- 	break;
-       gnat_rcond = Right_Opnd (gnat_cond);
-       if (Nkind (gnat_rcond) == N_In
- 	  || Nkind (gnat_rcond) == N_Op_Ge
- 	  || Nkind (gnat_rcond) == N_Op_Le)
- 	{
- 	  const Node_Id gnat_index = Left_Opnd (gnat_rcond);
- 	  const Node_Id gnat_type = Etype (gnat_index);
- 	  tree gnu_index = gnat_to_gnu (gnat_index);
- 	  tree gnu_type = get_unpadded_type (gnat_type);
- 	  tree gnu_low_bound, gnu_high_bound, disp;
- 	  struct loop_info_d *loop;
- 	  bool neg_p;
- 
- 	  switch (Nkind (gnat_rcond))
- 	    {
- 	    case N_In:
- 	      Range_to_gnu (Right_Opnd (gnat_rcond),
- 			    &gnu_low_bound, &gnu_high_bound);
- 	      break;
- 
- 	    case N_Op_Ge:
- 	      gnu_low_bound = gnat_to_gnu (Right_Opnd (gnat_rcond));
- 	      gnu_high_bound = TYPE_MAX_VALUE (gnu_type);
- 	      break;
- 
- 	    case N_Op_Le:
- 	      gnu_low_bound = TYPE_MIN_VALUE (gnu_type);
- 	      gnu_high_bound = gnat_to_gnu (Right_Opnd (gnat_rcond));
- 	      break;
- 
- 	    default:
- 	      gcc_unreachable ();
- 	    }
- 
- 	  gnu_type = maybe_character_type (gnu_type);
- 	  if (TREE_TYPE (gnu_index) != gnu_type)
- 	    {
- 	      gnu_low_bound = convert (gnu_type, gnu_low_bound);
- 	      gnu_high_bound = convert (gnu_type, gnu_high_bound);
- 	      gnu_index = convert (gnu_type, gnu_index);
- 	    }
- 
- 	  if (with_extra_info
- 	      && Known_Esize (gnat_type)
- 	      && UI_To_Int (Esize (gnat_type)) <= 32)
- 	    gnu_result
- 	      = build_call_raise_range (reason, gnat_node, kind, gnu_index,
- 					gnu_low_bound, gnu_high_bound);
- 
- 	  /* If optimization is enabled and we are inside a loop, we try to
- 	     compute invariant conditions for checks applied to the iteration
- 	     variable, i.e. conditions that are independent of the variable
- 	     and necessary in order for the checks to fail in the course of
- 	     some iteration.  If we succeed, we consider an alternative:
- 
- 	       1. If loop unswitching is enabled, we prepend these conditions
- 		  to the original conditions of the checks.  This will make it
- 		  possible for the loop unswitching pass to replace the loop
- 		  with two loops, one of which has the checks eliminated and
- 		  the other has the original checks reinstated, and a prologue
- 		  implementing a run-time selection.  The former loop will be
- 		  for example suitable for vectorization.
- 
- 	       2. Otherwise, we instead append the conditions to the original
- 		  conditions of the checks.  At worse, if the conditions cannot
- 		  be evaluated at compile time, they will be evaluated as true
- 		  at run time only when the checks have already failed, thus
- 		  contributing negatively only to the size of the executable.
- 		  But the hope is that these invariant conditions be evaluated
- 		  at compile time to false, thus taking away the entire checks
- 		  with them.  */
- 	  if (optimize
- 	      && inside_loop_p ()
- 	      && (!gnu_low_bound
- 		  || (gnu_low_bound = gnat_invariant_expr (gnu_low_bound)))
- 	      && (!gnu_high_bound
- 		  || (gnu_high_bound = gnat_invariant_expr (gnu_high_bound)))
- 	      && (loop = find_loop_for (gnu_index, &disp, &neg_p)))
- 	    {
- 	      struct range_check_info_d *rci = ggc_alloc<range_check_info_d> ();
- 	      rci->low_bound = gnu_low_bound;
- 	      rci->high_bound = gnu_high_bound;
- 	      rci->disp = disp;
- 	      rci->neg_p = neg_p;
- 	      rci->type = gnu_type;
- 	      rci->inserted_cond
- 		= build1 (SAVE_EXPR, boolean_type_node, boolean_true_node);
- 	      vec_safe_push (loop->checks, rci);
- 	      gnu_cond = build_noreturn_cond (gnat_to_gnu (gnat_cond));
- 	      if (optimize >= 3)
- 		gnu_cond = build_binary_op (TRUTH_ANDIF_EXPR,
- 					    boolean_type_node,
- 					    rci->inserted_cond,
- 					    gnu_cond);
- 	      else
- 		gnu_cond = build_binary_op (TRUTH_ANDIF_EXPR,
- 					    boolean_type_node,
- 					    gnu_cond,
- 					    rci->inserted_cond);
- 	    }
- 	}
-       break;
- 
-     default:
-       break;
-     }
- 
-   /* The following processing does the real work, but we must nevertheless make
-      sure not to override the result of the previous processing.  */
-   if (!gnu_result)
-     gnu_result = build_call_raise (reason, gnat_node, kind);
-   set_expr_location_from_node (gnu_result, gnat_node);
- 
-   *gnu_result_type_p = get_unpadded_type (Etype (gnat_node));
- 
-   /* If the type is VOID, this is a statement, so we need to generate the code
-      for the call.  Handle a condition, if there is one.  */
-   if (VOID_TYPE_P (*gnu_result_type_p))
-     {
-       if (Present (gnat_cond))
- 	{
- 	  if (!gnu_cond)
- 	    gnu_cond = gnat_to_gnu (gnat_cond);
- 	  gnu_result = build3 (COND_EXPR, void_type_node, gnu_cond, gnu_result,
- 			       alloc_stmt_list ());
- 	}
-     }
-   else
-     gnu_result = build1 (NULL_EXPR, *gnu_result_type_p, gnu_result);
- 
-   return gnu_result;
- }
- 
- /* Return true if GNAT_NODE is on the LHS of an assignment or an actual
-    parameter of a call.  */
- 
- static bool
- lhs_or_actual_p (Node_Id gnat_node)
- {
-   const Node_Id gnat_parent = Parent (gnat_node);
-   const Node_Kind kind = Nkind (gnat_parent);
- 
-   if (kind == N_Assignment_Statement && Name (gnat_parent) == gnat_node)
-     return true;
- 
-   if ((kind == N_Procedure_Call_Statement || kind == N_Function_Call)
-       && Name (gnat_parent) != gnat_node)
-     return true;
- 
-   if (kind == N_Parameter_Association)
-     return true;
- 
-   return false;
- }
- 
- /* Return true if either GNAT_NODE or a view of GNAT_NODE is on the LHS
-    of an assignment or an actual parameter of a call.  */
- 
- static bool
- present_in_lhs_or_actual_p (Node_Id gnat_node)
- {
-   if (lhs_or_actual_p (gnat_node))
-     return true;
- 
-   const Node_Kind kind = Nkind (Parent (gnat_node));
- 
-   if ((kind == N_Type_Conversion || kind == N_Unchecked_Type_Conversion)
-       && lhs_or_actual_p (Parent (gnat_node)))
-     return true;
- 
-   return false;
- }
- 
- /* Return true if GNAT_NODE, an unchecked type conversion, is a no-op as far
-    as gigi is concerned.  This is used to avoid conversions on the LHS.  */
- 
- static bool
- unchecked_conversion_nop (Node_Id gnat_node)
- {
-   Entity_Id from_type, to_type;
- 
-   /* The conversion must be on the LHS of an assignment or an actual parameter
-      of a call.  Otherwise, even if the conversion was essentially a no-op, it
-      could de facto ensure type consistency and this should be preserved.  */
-   if (!lhs_or_actual_p (gnat_node))
-     return false;
- 
-   from_type = Etype (Expression (gnat_node));
- 
-   /* We're interested in artificial conversions generated by the front-end
-      to make private types explicit, e.g. in Expand_Assign_Array.  */
-   if (!Is_Private_Type (from_type))
-     return false;
- 
-   from_type = Underlying_Type (from_type);
-   to_type = Etype (gnat_node);
- 
-   /* The direct conversion to the underlying type is a no-op.  */
-   if (to_type == from_type)
-     return true;
- 
-   /* For an array subtype, the conversion to the PAIT is a no-op.  */
-   if (Ekind (from_type) == E_Array_Subtype
-       && to_type == Packed_Array_Impl_Type (from_type))
-     return true;
- 
-   /* For a record subtype, the conversion to the type is a no-op.  */
-   if (Ekind (from_type) == E_Record_Subtype
-       && to_type == Etype (from_type))
-     return true;
- 
-   return false;
- }
- 
- /* Return true if GNAT_NODE represents a statement.  */
- 
- static bool
- statement_node_p (Node_Id gnat_node)
- {
-   const Node_Kind kind = Nkind (gnat_node);
- 
-   if (kind == N_Label)
-     return true;
- 
-   if (IN (kind, N_Statement_Other_Than_Procedure_Call))
-     return true;
- 
-   if (kind == N_Procedure_Call_Statement)
-     return true;
- 
-   if (IN (kind, N_Raise_xxx_Error) && Ekind (Etype (gnat_node)) == E_Void)
-     return true;
- 
-   return false;
- }
- 
- /* This function is the driver of the GNAT to GCC tree transformation process.
-    It is the entry point of the tree transformer.  GNAT_NODE is the root of
-    some GNAT tree.  Return the root of the corresponding GCC tree.  If this
-    is an expression, return the GCC equivalent of the expression.  If this
-    is a statement, return the statement or add it to the current statement
-    group, in which case anything returned is to be interpreted as occurring
-    after anything added.  */
- 
- tree
- gnat_to_gnu (Node_Id gnat_node)
- {
-   const Node_Kind kind = Nkind (gnat_node);
-   bool went_into_elab_proc = false;
-   tree gnu_result = error_mark_node; /* Default to no value.  */
-   tree gnu_result_type = void_type_node;
-   tree gnu_expr, gnu_lhs, gnu_rhs;
-   Node_Id gnat_temp;
-   atomic_acces_t aa_type;
-   bool aa_sync;
- 
-   /* Save node number for error message and set location information.  */
-   Current_Error_Node = gnat_node;
-   Sloc_to_locus (Sloc (gnat_node), &input_location);
- 
-   /* If we are only annotating types and this node is a statement, return
-      an empty statement list.  */
-   if (type_annotate_only && statement_node_p (gnat_node))
-     return alloc_stmt_list ();
- 
-   /* If we are only annotating types and this node is a subexpression, return
-      a NULL_EXPR, but filter out nodes appearing in the expressions attached
-      to packed array implementation types.  */
-   if (type_annotate_only
-       && IN (kind, N_Subexpr)
-       && !(((IN (kind, N_Op) && kind != N_Op_Expon)
- 	    || kind == N_Type_Conversion)
- 	   && Is_Integer_Type (Etype (gnat_node)))
-       && !(kind == N_Attribute_Reference
- 	   && (Get_Attribute_Id (Attribute_Name (gnat_node)) == Attr_Length
- 	       || Get_Attribute_Id (Attribute_Name (gnat_node)) == Attr_Size)
- 	   && Is_Constrained (Etype (Prefix (gnat_node)))
- 	   && !Is_Constr_Subt_For_U_Nominal (Etype (Prefix (gnat_node))))
-       && kind != N_Expanded_Name
-       && kind != N_Identifier
-       && !Compile_Time_Known_Value (gnat_node))
-     return build1 (NULL_EXPR, get_unpadded_type (Etype (gnat_node)),
- 		   build_call_raise (CE_Range_Check_Failed, gnat_node,
- 				     N_Raise_Constraint_Error));
- 
-   if ((statement_node_p (gnat_node) && kind != N_Null_Statement)
-       || kind == N_Handled_Sequence_Of_Statements
-       || kind == N_Implicit_Label_Declaration)
-     {
-       tree current_elab_proc = get_elaboration_procedure ();
- 
-       /* If this is a statement and we are at top level, it must be part of
- 	 the elaboration procedure, so mark us as being in that procedure.  */
-       if (!current_function_decl)
- 	{
- 	  current_function_decl = current_elab_proc;
- 	  went_into_elab_proc = true;
- 	}
- 
-       /* If we are in the elaboration procedure, check if we are violating a
- 	 No_Elaboration_Code restriction by having a statement there.  Don't
- 	 check for a possible No_Elaboration_Code restriction violation on
- 	 N_Handled_Sequence_Of_Statements, as we want to signal an error on
- 	 every nested real statement instead.  This also avoids triggering
- 	 spurious errors on dummy (empty) sequences created by the front-end
- 	 for package bodies in some cases.  */
-       if (current_function_decl == current_elab_proc
- 	  && kind != N_Handled_Sequence_Of_Statements
- 	  && kind != N_Implicit_Label_Declaration)
- 	Check_Elaboration_Code_Allowed (gnat_node);
-     }
- 
-   switch (kind)
-     {
-       /********************************/
-       /* Chapter 2: Lexical Elements  */
-       /********************************/
- 
-     case N_Identifier:
-     case N_Expanded_Name:
-     case N_Operator_Symbol:
-     case N_Defining_Identifier:
-     case N_Defining_Operator_Symbol:
-       gnu_result = Identifier_to_gnu (gnat_node, &gnu_result_type);
- 
-       /* If atomic access is required on the RHS, build the atomic load.  */
-       if (simple_atomic_access_required_p (gnat_node, &aa_sync)
- 	  && !present_in_lhs_or_actual_p (gnat_node))
- 	gnu_result = build_atomic_load (gnu_result, aa_sync);
-       break;
- 
-     case N_Integer_Literal:
-       {
- 	tree gnu_type;
- 
- 	/* Get the type of the result, looking inside any padding and
- 	   justified modular types.  Then get the value in that type.  */
- 	gnu_type = gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	if (TREE_CODE (gnu_type) == RECORD_TYPE
- 	    && TYPE_JUSTIFIED_MODULAR_P (gnu_type))
- 	  gnu_type = TREE_TYPE (TYPE_FIELDS (gnu_type));
- 
- 	gnu_result = UI_To_gnu (Intval (gnat_node), gnu_type);
- 
- 	/* If the result overflows (meaning it doesn't fit in its base type),
- 	   abort, unless this is for a named number because that's not fatal.
- 	   We would like to check that the value is within the range of the
- 	   subtype, but that causes problems with subtypes whose usage will
- 	   raise Constraint_Error and also with biased representation.  */
- 	if (TREE_OVERFLOW (gnu_result))
- 	  {
- 	    if (Nkind (Parent (gnat_node)) == N_Number_Declaration)
- 	      gnu_result = error_mark_node;
- 	    else
- 	      gcc_unreachable ();
- 	  }
-       }
-       break;
- 
-     case N_Character_Literal:
-       /* If a Entity is present, it means that this was one of the
- 	 literals in a user-defined character type.  In that case,
- 	 just return the value in the CONST_DECL.  Otherwise, use the
- 	 character code.  In that case, the base type should be an
- 	 INTEGER_TYPE, but we won't bother checking for that.  */
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       if (Present (Entity (gnat_node)))
- 	gnu_result = DECL_INITIAL (get_gnu_tree (Entity (gnat_node)));
-       else
- 	gnu_result
- 	  = build_int_cst (gnu_result_type,
- 			   UI_To_CC (Char_Literal_Value (gnat_node)));
-       break;
- 
-     case N_Real_Literal:
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
-       /* If this is of a fixed-point type, the value we want is the value of
- 	 the corresponding integer.  */
-       if (Is_Fixed_Point_Type (Underlying_Type (Etype (gnat_node))))
- 	{
- 	  gnu_result = UI_To_gnu (Corresponding_Integer_Value (gnat_node),
- 				  gnu_result_type);
- 	  gcc_assert (!TREE_OVERFLOW (gnu_result));
- 	}
- 
-       else
- 	{
- 	  Ureal ur_realval = Realval (gnat_node);
- 
- 	  /* First convert the value to a machine number if it isn't already.
- 	     That will force the base to 2 for non-zero values and simplify
- 	     the rest of the logic.  */
- 	  if (!Is_Machine_Number (gnat_node))
- 	    ur_realval
- 	      = Machine (Base_Type (Underlying_Type (Etype (gnat_node))),
- 			 ur_realval, Round_Even, gnat_node);
- 
- 	  if (UR_Is_Zero (ur_realval))
- 	    gnu_result = build_real (gnu_result_type, dconst0);
- 	  else
- 	    {
- 	      REAL_VALUE_TYPE tmp;
- 
- 	      gnu_result = UI_To_gnu (Numerator (ur_realval), gnu_result_type);
- 
- 	      /* The base must be 2 as Machine guarantees this, so we scale
- 		 the value, which we know can fit in the mantissa of the type
- 		 (hence the use of that type above).  */
- 	      gcc_assert (Rbase (ur_realval) == 2);
- 	      real_ldexp (&tmp, &TREE_REAL_CST (gnu_result),
- 			  - UI_To_Int (Denominator (ur_realval)));
- 	      gnu_result = build_real (gnu_result_type, tmp);
- 	    }
- 
- 	  /* Now see if we need to negate the result.  Do it this way to
- 	     properly handle -0.  */
- 	  if (UR_Is_Negative (Realval (gnat_node)))
- 	    gnu_result
- 	      = build_unary_op (NEGATE_EXPR, get_base_type (gnu_result_type),
- 				gnu_result);
- 	}
- 
-       break;
- 
-     case N_String_Literal:
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       if (TYPE_PRECISION (TREE_TYPE (gnu_result_type)) == HOST_BITS_PER_CHAR)
- 	{
- 	  String_Id gnat_string = Strval (gnat_node);
- 	  int length = String_Length (gnat_string);
- 	  int i;
- 	  char *string;
- 	  if (length >= ALLOCA_THRESHOLD)
- 	    string = XNEWVEC (char, length);
- 	  else
- 	    string = (char *) alloca (length);
- 
- 	  /* Build the string with the characters in the literal.  Note
- 	     that Ada strings are 1-origin.  */
- 	  for (i = 0; i < length; i++)
- 	    string[i] = Get_String_Char (gnat_string, i + 1);
- 
- 	  gnu_result = build_string (length, string);
- 
- 	  /* Strings in GCC don't normally have types, but we want
- 	     this to not be converted to the array type.  */
- 	  TREE_TYPE (gnu_result) = gnu_result_type;
- 
- 	  if (length >= ALLOCA_THRESHOLD)
- 	    free (string);
- 	}
-       else
- 	{
- 	  /* Build a list consisting of each character, then make
- 	     the aggregate.  */
- 	  String_Id gnat_string = Strval (gnat_node);
- 	  int length = String_Length (gnat_string);
- 	  int i;
- 	  tree gnu_idx = TYPE_MIN_VALUE (TYPE_DOMAIN (gnu_result_type));
- 	  tree gnu_one_node = convert (TREE_TYPE (gnu_idx), integer_one_node);
- 	  vec<constructor_elt, va_gc> *gnu_vec;
- 	  vec_alloc (gnu_vec, length);
- 
- 	  for (i = 0; i < length; i++)
- 	    {
- 	      tree t = build_int_cst (TREE_TYPE (gnu_result_type),
- 				      Get_String_Char (gnat_string, i + 1));
- 
- 	      CONSTRUCTOR_APPEND_ELT (gnu_vec, gnu_idx, t);
- 	      gnu_idx = int_const_binop (PLUS_EXPR, gnu_idx, gnu_one_node);
- 	    }
- 
- 	  gnu_result = gnat_build_constructor (gnu_result_type, gnu_vec);
- 	}
-       break;
- 
-     case N_Pragma:
-       gnu_result = Pragma_to_gnu (gnat_node);
-       break;
- 
-     /**************************************/
-     /* Chapter 3: Declarations and Types  */
-     /**************************************/
- 
-     case N_Subtype_Declaration:
-     case N_Full_Type_Declaration:
-     case N_Incomplete_Type_Declaration:
-     case N_Private_Type_Declaration:
-     case N_Private_Extension_Declaration:
-     case N_Task_Type_Declaration:
-       process_type (Defining_Entity (gnat_node));
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Object_Declaration:
-     case N_Number_Declaration:
-     case N_Exception_Declaration:
-       gnat_temp = Defining_Entity (gnat_node);
-       gnu_result = alloc_stmt_list ();
- 
-       /* If we are just annotating types and this object has an unconstrained
- 	 or task type, don't elaborate it.   */
-       if (type_annotate_only
- 	  && (((Is_Array_Type (Etype (gnat_temp))
- 		|| Is_Record_Type (Etype (gnat_temp)))
- 	       && !Is_Constrained (Etype (gnat_temp)))
- 	      || Is_Concurrent_Type (Etype (gnat_temp))))
- 	break;
- 
-       if (Present (Expression (gnat_node))
- 	  && !(kind == N_Object_Declaration && No_Initialization (gnat_node))
- 	  && (!type_annotate_only
- 	      || Compile_Time_Known_Value (Expression (gnat_node))))
- 	{
- 	  gigi_checking_assert (!Do_Range_Check (Expression (gnat_node)));
- 
- 	  gnu_expr = gnat_to_gnu (Expression (gnat_node));
- 
- 	  /* First deal with erroneous expressions.  */
- 	  if (TREE_CODE (gnu_expr) == ERROR_MARK)
- 	    {
- 	      /* If this is a named number for which we cannot manipulate
- 		 the value, just skip the declaration altogether.  */
- 	      if (kind == N_Number_Declaration)
- 		break;
- 	      else if (type_annotate_only)
- 		gnu_expr = NULL_TREE;
- 	    }
- 
- 	  /* Then a special case: we do not want the SLOC of the expression
- 	     of the tag to pop up every time it is referenced somewhere.  */
- 	  else if (EXPR_P (gnu_expr) && Is_Tag (gnat_temp))
- 	    SET_EXPR_LOCATION (gnu_expr, UNKNOWN_LOCATION);
- 	}
-       else
- 	gnu_expr = NULL_TREE;
- 
-       /* If this is a deferred constant with an address clause, we ignore the
- 	 full view since the clause is on the partial view and we cannot have
- 	 2 different GCC trees for the object.  The only bits of the full view
- 	 we will use is the initializer, but it will be directly fetched.  */
-       if (Ekind (gnat_temp) == E_Constant
- 	  && Present (Address_Clause (gnat_temp))
- 	  && Present (Full_View (gnat_temp)))
- 	save_gnu_tree (Full_View (gnat_temp), error_mark_node, true);
- 
-       /* If this object has its elaboration delayed, we must force evaluation
- 	 of GNU_EXPR now and save it for the freeze point.  Note that we need
- 	 not do anything special at the global level since the lifetime of the
- 	 temporary is fully contained within the elaboration routine.  */
-       if (Present (Freeze_Node (gnat_temp)))
- 	{
- 	  if (gnu_expr)
- 	    {
- 	      gnu_result = gnat_save_expr (gnu_expr);
- 	      save_gnu_tree (gnat_node, gnu_result, true);
- 	    }
- 	}
-       else
- 	gnat_to_gnu_entity (gnat_temp, gnu_expr, true);
-       break;
- 
-     case N_Object_Renaming_Declaration:
-       gnat_temp = Defining_Entity (gnat_node);
-       gnu_result = alloc_stmt_list ();
- 
-       /* Don't do anything if this renaming is handled by the front end and it
- 	 does not need debug info.  Note that we consider renamings don't need
- 	 debug info when optimizing: our way to describe them has a
- 	 memory/elaboration footprint.
- 
- 	 Don't do anything neither if we are just annotating types and this
- 	 object has a composite or task type, don't elaborate it.  */
-       if ((!Is_Renaming_Of_Object (gnat_temp)
- 	   || (Needs_Debug_Info (gnat_temp)
- 	       && !optimize
- 	       && can_materialize_object_renaming_p
- 		    (Renamed_Object (gnat_temp))))
- 	  && ! (type_annotate_only
- 		&& (Is_Array_Type (Etype (gnat_temp))
- 		    || Is_Record_Type (Etype (gnat_temp))
- 		    || Is_Concurrent_Type (Etype (gnat_temp)))))
- 	gnat_to_gnu_entity (gnat_temp,
- 			    gnat_to_gnu (Renamed_Object (gnat_temp)),
- 			    true);
-       break;
- 
-     case N_Exception_Renaming_Declaration:
-       gnat_temp = Defining_Entity (gnat_node);
-       gnu_result = alloc_stmt_list ();
- 
-       if (Present (Renamed_Entity (gnat_temp)))
- 	gnat_to_gnu_entity (gnat_temp,
- 			    gnat_to_gnu (Renamed_Entity (gnat_temp)),
- 			    true);
-       break;
- 
-     case N_Subprogram_Renaming_Declaration:
-       {
- 	const Node_Id gnat_renaming = Defining_Entity (gnat_node);
- 	const Node_Id gnat_renamed = Renamed_Entity (gnat_renaming);
- 
- 	gnu_result = alloc_stmt_list ();
- 
- 	/* Materializing renamed subprograms will only benefit the debugging
- 	   information as they aren't referenced in the generated code.  So
- 	   skip them when they aren't needed.  Avoid doing this if:
- 
- 	     - there is a freeze node: in this case the renamed entity is not
- 	       elaborated yet,
- 	     - the renamed subprogram is intrinsic: it will not be available in
- 	       the debugging information (note that both or only one of the
- 	       renaming and the renamed subprograms can be intrinsic).  */
- 	if (!type_annotate_only
- 	    && Needs_Debug_Info (gnat_renaming)
- 	    && No (Freeze_Node (gnat_renaming))
- 	    && Present (gnat_renamed)
- 	    && (Ekind (gnat_renamed) == E_Function
- 		|| Ekind (gnat_renamed) == E_Procedure)
- 	    && !Is_Intrinsic_Subprogram (gnat_renaming)
- 	    && !Is_Intrinsic_Subprogram (gnat_renamed))
- 	  gnat_to_gnu_entity (gnat_renaming, gnat_to_gnu (gnat_renamed), true);
- 	break;
-       }
- 
-     case N_Implicit_Label_Declaration:
-       gnat_to_gnu_entity (Defining_Entity (gnat_node), NULL_TREE, true);
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Package_Renaming_Declaration:
-       /* These are fully handled in the front end.  */
-       /* ??? For package renamings, find a way to use GENERIC namespaces so
- 	 that we get proper debug information for them.  */
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     /*************************************/
-     /* Chapter 4: Names and Expressions  */
-     /*************************************/
- 
-     case N_Explicit_Dereference:
-       /* Make sure the designated type is complete before dereferencing.  */
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       gnu_result = gnat_to_gnu (Prefix (gnat_node));
-       gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_result);
- 
-       /* If atomic access is required on the RHS, build the atomic load.  */
-       if (simple_atomic_access_required_p (gnat_node, &aa_sync)
- 	  && !present_in_lhs_or_actual_p (gnat_node))
- 	gnu_result = build_atomic_load (gnu_result, aa_sync);
-       break;
- 
-     case N_Indexed_Component:
-       {
- 	tree gnu_array_object = gnat_to_gnu ((Prefix (gnat_node)));
- 	tree gnu_type;
- 	int ndim, i;
- 	Node_Id *gnat_expr_array;
- 
- 	gnu_array_object = maybe_padded_object (gnu_array_object);
- 	gnu_array_object = maybe_unconstrained_array (gnu_array_object);
- 
- 	/* Convert vector inputs to their representative array type, to fit
- 	   what the code below expects.  */
- 	if (VECTOR_TYPE_P (TREE_TYPE (gnu_array_object)))
- 	  {
- 	    if (present_in_lhs_or_actual_p (gnat_node))
- 	      gnat_mark_addressable (gnu_array_object);
- 	    gnu_array_object = maybe_vector_array (gnu_array_object);
- 	  }
- 
- 	/* The failure of this assertion will very likely come from a missing
- 	   expansion for a packed array access.  */
- 	gcc_assert (TREE_CODE (TREE_TYPE (gnu_array_object)) == ARRAY_TYPE);
- 
- 	/* First compute the number of dimensions of the array, then
- 	   fill the expression array, the order depending on whether
- 	   this is a Convention_Fortran array or not.  */
- 	for (ndim = 1, gnu_type = TREE_TYPE (gnu_array_object);
- 	     TREE_CODE (TREE_TYPE (gnu_type)) == ARRAY_TYPE
- 	     && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type));
- 	     ndim++, gnu_type = TREE_TYPE (gnu_type))
- 	  ;
- 
- 	gnat_expr_array = XALLOCAVEC (Node_Id, ndim);
- 
- 	if (TYPE_CONVENTION_FORTRAN_P (TREE_TYPE (gnu_array_object)))
- 	  for (i = ndim - 1, gnat_temp = First (Expressions (gnat_node));
- 	       i >= 0;
- 	       i--, gnat_temp = Next (gnat_temp))
- 	    gnat_expr_array[i] = gnat_temp;
- 	else
- 	  for (i = 0, gnat_temp = First (Expressions (gnat_node));
- 	       i < ndim;
- 	       i++, gnat_temp = Next (gnat_temp))
- 	    gnat_expr_array[i] = gnat_temp;
- 
- 	/* Start with the prefix and build the successive references.  */
- 	gnu_result = gnu_array_object;
- 
- 	for (i = 0, gnu_type = TREE_TYPE (gnu_array_object);
- 	     i < ndim;
- 	     i++, gnu_type = TREE_TYPE (gnu_type))
- 	  {
- 	    gcc_assert (TREE_CODE (gnu_type) == ARRAY_TYPE);
- 	    gnat_temp = gnat_expr_array[i];
- 	    gnu_expr = maybe_character_value (gnat_to_gnu (gnat_temp));
- 
- 	    gnu_result
- 	      = build_binary_op (ARRAY_REF, NULL_TREE, gnu_result, gnu_expr);
- 	  }
- 
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	/* If atomic access is required on the RHS, build the atomic load.  */
- 	if (simple_atomic_access_required_p (gnat_node, &aa_sync)
- 	    && !present_in_lhs_or_actual_p (gnat_node))
- 	  gnu_result = build_atomic_load (gnu_result, aa_sync);
-       }
-       break;
- 
-     case N_Slice:
-       {
- 	tree gnu_array_object = gnat_to_gnu (Prefix (gnat_node));
- 
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	gnu_array_object = maybe_padded_object (gnu_array_object);
- 	gnu_array_object = maybe_unconstrained_array (gnu_array_object);
- 
- 	gnu_expr = TYPE_MIN_VALUE (TYPE_DOMAIN (gnu_result_type));
- 	gnu_expr = maybe_character_value (gnu_expr);
- 
- 	/* If this is a slice with non-constant size of an array with constant
- 	   size, set the maximum size for the allocation of temporaries.  */
- 	if (!TREE_CONSTANT (TYPE_SIZE_UNIT (gnu_result_type))
- 	    && TREE_CONSTANT (TYPE_SIZE_UNIT (TREE_TYPE (gnu_array_object))))
- 	  TYPE_ARRAY_MAX_SIZE (gnu_result_type)
- 	    = TYPE_SIZE_UNIT (TREE_TYPE (gnu_array_object));
- 
- 	gnu_result = build_binary_op (ARRAY_RANGE_REF, gnu_result_type,
- 				      gnu_array_object, gnu_expr);
-       }
-       break;
- 
-     case N_Selected_Component:
-       {
- 	const Entity_Id gnat_prefix = Prefix (gnat_node);
- 	Entity_Id gnat_field = Entity (Selector_Name (gnat_node));
- 	tree gnu_prefix = gnat_to_gnu (gnat_prefix);
- 
- 	gnu_prefix = maybe_padded_object (gnu_prefix);
- 
- 	/* gnat_to_gnu_entity does not save the GNU tree made for renamed
- 	   discriminants so avoid making recursive calls on each reference
- 	   to them by following the appropriate link directly here.  */
- 	if (Ekind (gnat_field) == E_Discriminant)
- 	  {
- 	    /* For discriminant references in tagged types always substitute
- 	       the corresponding discriminant as the actual component.  */
- 	    if (Is_Tagged_Type (Underlying_Type (Etype (gnat_prefix))))
- 	      while (Present (Corresponding_Discriminant (gnat_field)))
- 		gnat_field = Corresponding_Discriminant (gnat_field);
- 
- 	    /* For discriminant references in untagged types always substitute
- 	       the corresponding stored discriminant.  */
- 	    else if (Present (Corresponding_Discriminant (gnat_field)))
- 	      gnat_field = Original_Record_Component (gnat_field);
- 	  }
- 
- 	/* Handle extracting the real or imaginary part of a complex.
- 	   The real part is the first field and the imaginary the last.  */
- 	if (TREE_CODE (TREE_TYPE (gnu_prefix)) == COMPLEX_TYPE)
- 	  gnu_result = build_unary_op (Present (Next_Entity (gnat_field))
- 				       ? REALPART_EXPR : IMAGPART_EXPR,
- 				       NULL_TREE, gnu_prefix);
- 	else
- 	  {
- 	    tree gnu_field = gnat_to_gnu_field_decl (gnat_field);
- 
- 	    gnu_result
- 	      = build_component_ref (gnu_prefix, gnu_field,
- 				     (Nkind (Parent (gnat_node))
- 				      == N_Attribute_Reference)
- 				     && lvalue_required_for_attribute_p
- 					(Parent (gnat_node)));
- 	  }
- 
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	/* If atomic access is required on the RHS, build the atomic load.  */
- 	if (simple_atomic_access_required_p (gnat_node, &aa_sync)
- 	    && !present_in_lhs_or_actual_p (gnat_node))
- 	  gnu_result = build_atomic_load (gnu_result, aa_sync);
-       }
-       break;
- 
-     case N_Attribute_Reference:
-       {
- 	/* The attribute designator.  */
- 	const int attr = Get_Attribute_Id (Attribute_Name (gnat_node));
- 
- 	/* The Elab_Spec and Elab_Body attributes are special in that Prefix
- 	   is a unit, not an object with a GCC equivalent.  */
- 	if (attr == Attr_Elab_Spec || attr == Attr_Elab_Body)
- 	  return
- 	    create_subprog_decl (create_concat_name
- 				 (Entity (Prefix (gnat_node)),
- 				  attr == Attr_Elab_Body ? "elabb" : "elabs"),
- 				 NULL_TREE, void_ftype, NULL_TREE, is_default,
- 				 true, true, true, true, false, NULL,
- 				 gnat_node);
- 
- 	gnu_result = Attribute_to_gnu (gnat_node, &gnu_result_type, attr);
-       }
-       break;
- 
-     case N_Reference:
-       /* Like 'Access as far as we are concerned.  */
-       gnu_result = gnat_to_gnu (Prefix (gnat_node));
-       gnu_result = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_result);
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       break;
- 
-     case N_Aggregate:
-     case N_Extension_Aggregate:
-       {
- 	tree gnu_aggr_type;
- 
- 	/* Check that this aggregate has not slipped through the cracks.  */
- 	gcc_assert (!Expansion_Delayed (gnat_node));
- 
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	if (TREE_CODE (gnu_result_type) == RECORD_TYPE
- 	    && TYPE_CONTAINS_TEMPLATE_P (gnu_result_type))
- 	  gnu_aggr_type
- 	    = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (gnu_result_type)));
- 	else if (TREE_CODE (gnu_result_type) == VECTOR_TYPE)
- 	  gnu_aggr_type = TYPE_REPRESENTATIVE_ARRAY (gnu_result_type);
- 	else
- 	  gnu_aggr_type = gnu_result_type;
- 
- 	if (Null_Record_Present (gnat_node))
- 	  gnu_result = gnat_build_constructor (gnu_aggr_type, NULL);
- 
- 	else if (TREE_CODE (gnu_aggr_type) == RECORD_TYPE
- 		 || TREE_CODE (gnu_aggr_type) == UNION_TYPE)
- 	  gnu_result
- 	    = assoc_to_constructor (Etype (gnat_node),
- 				    First (Component_Associations (gnat_node)),
- 				    gnu_aggr_type);
- 	else if (TREE_CODE (gnu_aggr_type) == ARRAY_TYPE)
- 	  gnu_result = pos_to_constructor (First (Expressions (gnat_node)),
- 					   gnu_aggr_type);
- 	else if (TREE_CODE (gnu_aggr_type) == COMPLEX_TYPE)
- 	  gnu_result
- 	    = build_binary_op
- 	      (COMPLEX_EXPR, gnu_aggr_type,
- 	       gnat_to_gnu (Expression (First
- 					(Component_Associations (gnat_node)))),
- 	       gnat_to_gnu (Expression
- 			    (Next
- 			     (First (Component_Associations (gnat_node))))));
- 	else
- 	  gcc_unreachable ();
- 
- 	gnu_result = convert (gnu_result_type, gnu_result);
-       }
-       break;
- 
-     case N_Null:
-       if (TARGET_VTABLE_USES_DESCRIPTORS
- 	  && Ekind (Etype (gnat_node)) == E_Access_Subprogram_Type
- 	  && Is_Dispatch_Table_Entity (Etype (gnat_node)))
- 	gnu_result = null_fdesc_node;
-       else
- 	gnu_result = null_pointer_node;
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       break;
- 
-     case N_Type_Conversion:
-     case N_Qualified_Expression:
-       gnu_expr = maybe_character_value (gnat_to_gnu (Expression (gnat_node)));
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
-       /* If this is a qualified expression for a tagged type, we mark the type
- 	 as used.  Because of polymorphism, this might be the only reference to
- 	 the tagged type in the program while objects have it as dynamic type.
- 	 The debugger needs to see it to display these objects properly.  */
-       if (kind == N_Qualified_Expression && Is_Tagged_Type (Etype (gnat_node)))
- 	used_types_insert (gnu_result_type);
- 
-       gigi_checking_assert (!Do_Range_Check (Expression (gnat_node)));
- 
-       gnu_result
- 	= convert_with_check (Etype (gnat_node), gnu_expr,
- 			      Do_Overflow_Check (gnat_node),
- 			      kind == N_Type_Conversion
- 			      && Float_Truncate (gnat_node), gnat_node);
-       break;
- 
-     case N_Unchecked_Type_Conversion:
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       gnu_expr = maybe_character_value (gnat_to_gnu (Expression (gnat_node)));
- 
-       /* Skip further processing if the conversion is deemed a no-op.  */
-       if (unchecked_conversion_nop (gnat_node))
- 	{
- 	  gnu_result = gnu_expr;
- 	  gnu_result_type = TREE_TYPE (gnu_result);
- 	  break;
- 	}
- 
-       /* If the result is a pointer type, see if we are improperly
- 	 converting to a stricter alignment.  */
-       if (STRICT_ALIGNMENT && POINTER_TYPE_P (gnu_result_type)
- 	  && Is_Access_Type (Etype (gnat_node)))
- 	{
- 	  unsigned int align = known_alignment (gnu_expr);
- 	  tree gnu_obj_type = TREE_TYPE (gnu_result_type);
- 	  unsigned int oalign = TYPE_ALIGN (gnu_obj_type);
- 
- 	  if (align != 0 && align < oalign && !TYPE_ALIGN_OK (gnu_obj_type))
- 	    post_error_ne_tree_2
- 	      ("?source alignment (^) '< alignment of & (^)",
- 	       gnat_node, Designated_Type (Etype (gnat_node)),
- 	       size_int (align / BITS_PER_UNIT), oalign / BITS_PER_UNIT);
- 	}
- 
-       /* If we are converting a descriptor to a function pointer, first
- 	 build the pointer.  */
-       if (TARGET_VTABLE_USES_DESCRIPTORS
- 	  && TREE_TYPE (gnu_expr) == fdesc_type_node
- 	  && POINTER_TYPE_P (gnu_result_type))
- 	gnu_expr = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr);
- 
-       gnu_result = unchecked_convert (gnu_result_type, gnu_expr,
- 				      No_Truncation (gnat_node));
-       break;
- 
-     case N_In:
-     case N_Not_In:
-       {
- 	tree gnu_obj = gnat_to_gnu (Left_Opnd (gnat_node));
- 	tree gnu_low, gnu_high;
- 
- 	Range_to_gnu (Right_Opnd (gnat_node), &gnu_low, &gnu_high);
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	tree gnu_op_type = maybe_character_type (TREE_TYPE (gnu_obj));
- 	if (TREE_TYPE (gnu_obj) != gnu_op_type)
- 	  {
- 	    gnu_obj = convert (gnu_op_type, gnu_obj);
- 	    gnu_low = convert (gnu_op_type, gnu_low);
- 	    gnu_high = convert (gnu_op_type, gnu_high);
- 	  }
- 
- 	/* If LOW and HIGH are identical, perform an equality test.  Otherwise,
- 	   ensure that GNU_OBJ is evaluated only once and perform a full range
- 	   test.  */
- 	if (operand_equal_p (gnu_low, gnu_high, 0))
- 	  gnu_result
- 	    = build_binary_op (EQ_EXPR, gnu_result_type, gnu_obj, gnu_low);
- 	else
- 	  {
- 	    tree t1, t2;
- 	    gnu_obj = gnat_protect_expr (gnu_obj);
- 	    t1 = build_binary_op (GE_EXPR, gnu_result_type, gnu_obj, gnu_low);
- 	    if (EXPR_P (t1))
- 	      set_expr_location_from_node (t1, gnat_node);
- 	    t2 = build_binary_op (LE_EXPR, gnu_result_type, gnu_obj, gnu_high);
- 	    if (EXPR_P (t2))
- 	      set_expr_location_from_node (t2, gnat_node);
- 	    gnu_result
- 	      = build_binary_op (TRUTH_ANDIF_EXPR, gnu_result_type, t1, t2);
- 	  }
- 
- 	if (kind == N_Not_In)
- 	  gnu_result
- 	    = invert_truthvalue_loc (EXPR_LOCATION (gnu_result), gnu_result);
-       }
-       break;
- 
-     case N_Op_Divide:
-       gnu_lhs = gnat_to_gnu (Left_Opnd (gnat_node));
-       gnu_rhs = gnat_to_gnu (Right_Opnd (gnat_node));
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       gnu_result = build_binary_op (FLOAT_TYPE_P (gnu_result_type)
- 				    ? RDIV_EXPR
- 				    : (Rounded_Result (gnat_node)
- 				       ? ROUND_DIV_EXPR : TRUNC_DIV_EXPR),
- 				    gnu_result_type, gnu_lhs, gnu_rhs);
-       break;
- 
-     case N_Op_Eq:
-     case N_Op_Ne:
-     case N_Op_Lt:
-     case N_Op_Le:
-     case N_Op_Gt:
-     case N_Op_Ge:
-     case N_Op_Add:
-     case N_Op_Subtract:
-     case N_Op_Multiply:
-     case N_Op_Mod:
-     case N_Op_Rem:
-     case N_Op_Rotate_Left:
-     case N_Op_Rotate_Right:
-     case N_Op_Shift_Left:
-     case N_Op_Shift_Right:
-     case N_Op_Shift_Right_Arithmetic:
-     case N_Op_And:
-     case N_Op_Or:
-     case N_Op_Xor:
-     case N_And_Then:
-     case N_Or_Else:
-       {
- 	enum tree_code code = gnu_codes[kind];
- 	bool ignore_lhs_overflow = false;
- 	location_t saved_location = input_location;
- 	tree gnu_type, gnu_max_shift = NULL_TREE;
- 
- 	/* Fix operations set up for boolean types in GNU_CODES above.  */
- 	if (Is_Modular_Integer_Type (Underlying_Type (Etype (gnat_node))))
- 	  switch (kind)
- 	    {
- 	    case N_Op_And:
- 	      code = BIT_AND_EXPR;
- 	      break;
- 	    case N_Op_Or:
- 	      code = BIT_IOR_EXPR;
- 	      break;
- 	    case N_Op_Xor:
- 	      code = BIT_XOR_EXPR;
- 	      break;
- 	    default:
- 	      break;
- 	    }
- 
- 	gnu_lhs = gnat_to_gnu (Left_Opnd (gnat_node));
- 	gnu_rhs = gnat_to_gnu (Right_Opnd (gnat_node));
- 	gnu_type = gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
- 	/* If this is a shift, take the count as unsigned since that is what
- 	   most machines do and will generate simpler adjustments below.  */
- 	if (IN (kind, N_Op_Shift))
- 	  {
- 	    tree gnu_count_type
- 	      = gnat_unsigned_type_for (get_base_type (TREE_TYPE (gnu_rhs)));
- 	    gnu_rhs = convert (gnu_count_type, gnu_rhs);
- 	    gnu_max_shift
- 	      = convert (TREE_TYPE (gnu_rhs), TYPE_SIZE (gnu_type));
- 	  }
- 
- 	/* Pending generic support for efficient vector logical operations in
- 	   GCC, convert vectors to their representative array type view and
- 	   fallthrough.  */
- 	gnu_lhs = maybe_vector_array (gnu_lhs);
- 	gnu_rhs = maybe_vector_array (gnu_rhs);
- 
- 	/* If this is a comparison operator, convert any references to an
- 	   unconstrained array value into a reference to the actual array.  */
- 	if (TREE_CODE_CLASS (code) == tcc_comparison)
- 	  {
- 	    gnu_lhs = maybe_unconstrained_array (gnu_lhs);
- 	    gnu_rhs = maybe_unconstrained_array (gnu_rhs);
- 
- 	    tree gnu_op_type = maybe_character_type (TREE_TYPE (gnu_lhs));
- 	    if (TREE_TYPE (gnu_lhs) != gnu_op_type)
- 	      {
- 		gnu_lhs = convert (gnu_op_type, gnu_lhs);
- 		gnu_rhs = convert (gnu_op_type, gnu_rhs);
- 	      }
- 	  }
- 
- 	/* If this is a shift whose count is not guaranteed to be correct,
- 	   we need to adjust the shift count.  */
- 	if ((kind == N_Op_Rotate_Left || kind == N_Op_Rotate_Right)
- 	    && !Shift_Count_OK (gnat_node))
- 	  gnu_rhs = build_binary_op (TRUNC_MOD_EXPR, TREE_TYPE (gnu_rhs),
- 				     gnu_rhs, gnu_max_shift);
- 	else if (kind == N_Op_Shift_Right_Arithmetic
- 		 && !Shift_Count_OK (gnat_node))
- 	  gnu_rhs
- 	    = build_binary_op (MIN_EXPR, TREE_TYPE (gnu_rhs),
- 			       build_binary_op (MINUS_EXPR,
- 						TREE_TYPE (gnu_rhs),
- 						gnu_max_shift,
- 						build_int_cst
- 						(TREE_TYPE (gnu_rhs), 1)),
- 			       gnu_rhs);
- 
- 	/* For right shifts, the type says what kind of shift to do,
- 	   so we may need to choose a different type.  In this case,
- 	   we have to ignore integer overflow lest it propagates all
- 	   the way down and causes a CE to be explicitly raised.  */
- 	if (kind == N_Op_Shift_Right && !TYPE_UNSIGNED (gnu_type))
- 	  {
- 	    gnu_type = gnat_unsigned_type_for (gnu_type);
- 	    ignore_lhs_overflow = true;
- 	  }
- 	else if (kind == N_Op_Shift_Right_Arithmetic
- 		 && TYPE_UNSIGNED (gnu_type))
- 	  {
- 	    gnu_type = gnat_signed_type_for (gnu_type);
- 	    ignore_lhs_overflow = true;
- 	  }
- 
- 	if (gnu_type != gnu_result_type)
- 	  {
- 	    tree gnu_old_lhs = gnu_lhs;
- 	    gnu_lhs = convert (gnu_type, gnu_lhs);
- 	    if (TREE_CODE (gnu_lhs) == INTEGER_CST && ignore_lhs_overflow)
- 	      TREE_OVERFLOW (gnu_lhs) = TREE_OVERFLOW (gnu_old_lhs);
- 	    gnu_rhs = convert (gnu_type, gnu_rhs);
- 	    if (gnu_max_shift)
- 	      gnu_max_shift = convert (gnu_type, gnu_max_shift);
- 	  }
- 
- 	/* For signed integer addition, subtraction and multiplication, do an
- 	   overflow check if required.  */
- 	if (Do_Overflow_Check (gnat_node)
- 	    && (code == PLUS_EXPR || code == MINUS_EXPR || code == MULT_EXPR)
- 	    && !TYPE_UNSIGNED (gnu_type)
- 	    && !FLOAT_TYPE_P (gnu_type))
- 	  gnu_result
- 	    = build_binary_op_trapv (code, gnu_type, gnu_lhs, gnu_rhs,
- 				     gnat_node);
- 	else
- 	  {
- 	    /* Some operations, e.g. comparisons of arrays, generate complex
- 	       trees that need to be annotated while they are being built.  */
- 	    input_location = saved_location;
- 	    gnu_result = build_binary_op (code, gnu_type, gnu_lhs, gnu_rhs);
- 	  }
- 
- 	/* If this is a logical shift with the shift count not verified,
- 	   we must return zero if it is too large.  We cannot compensate
- 	   beforehand in this case.  */
- 	if ((kind == N_Op_Shift_Left || kind == N_Op_Shift_Right)
- 	    && !Shift_Count_OK (gnat_node))
- 	  gnu_result
- 	    = build_cond_expr (gnu_type,
- 			       build_binary_op (GE_EXPR, boolean_type_node,
- 						gnu_rhs, gnu_max_shift),
- 			       build_int_cst (gnu_type, 0),
- 			       gnu_result);
-       }
-       break;
- 
-     case N_If_Expression:
-       {
- 	tree gnu_cond = gnat_to_gnu (First (Expressions (gnat_node)));
- 	tree gnu_true = gnat_to_gnu (Next (First (Expressions (gnat_node))));
- 	tree gnu_false
- 	  = gnat_to_gnu (Next (Next (First (Expressions (gnat_node)))));
- 
- 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 	gnu_result
- 	  = build_cond_expr (gnu_result_type, gnu_cond, gnu_true, gnu_false);
-       }
-       break;
- 
-     case N_Op_Plus:
-       gnu_result = gnat_to_gnu (Right_Opnd (gnat_node));
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       break;
- 
-     case N_Op_Not:
-       /* This case can apply to a boolean or a modular type.
- 	 Fall through for a boolean operand since GNU_CODES is set
- 	 up to handle this.  */
-       if (Is_Modular_Integer_Type (Underlying_Type (Etype (gnat_node))))
- 	{
- 	  gnu_expr = gnat_to_gnu (Right_Opnd (gnat_node));
- 	  gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 	  gnu_result = build_unary_op (BIT_NOT_EXPR, gnu_result_type,
- 				       gnu_expr);
- 	  break;
- 	}
- 
-       /* ... fall through ... */
- 
-     case N_Op_Minus:
-     case N_Op_Abs:
-       gnu_expr = gnat_to_gnu (Right_Opnd (gnat_node));
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
- 
-       /* For signed integer negation and absolute value, do an overflow check
- 	 if required.  */
-       if (Do_Overflow_Check (gnat_node)
- 	  && !TYPE_UNSIGNED (gnu_result_type)
- 	  && !FLOAT_TYPE_P (gnu_result_type))
- 	gnu_result
- 	  = build_unary_op_trapv (gnu_codes[kind], gnu_result_type, gnu_expr,
- 				  gnat_node);
-       else
- 	gnu_result
- 	  = build_unary_op (gnu_codes[kind], gnu_result_type, gnu_expr);
-       break;
- 
-     case N_Allocator:
-       {
- 	tree gnu_type, gnu_init;
- 	bool ignore_init_type;
- 
- 	gnat_temp = Expression (gnat_node);
- 
- 	/* The expression can be either an N_Identifier or an Expanded_Name,
- 	   which must represent a type, or a N_Qualified_Expression, which
- 	   contains both the type and an initial value for the object.  */
- 	if (Nkind (gnat_temp) == N_Identifier
- 	    || Nkind (gnat_temp) == N_Expanded_Name)
- 	  {
- 	    ignore_init_type = false;
- 	    gnu_init = NULL_TREE;
- 	    gnu_type = gnat_to_gnu_type (Entity (gnat_temp));
- 	  }
- 
- 	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));
- 	    gnu_init = maybe_unconstrained_array (gnu_init);
- 
- 	    gigi_checking_assert (!Do_Range_Check (Expression (gnat_temp)));
- 
- 	    if (Is_Elementary_Type (gnat_desig_type)
- 		|| Is_Constrained (gnat_desig_type))
- 	      gnu_type = gnat_to_gnu_type (gnat_desig_type);
- 	    else
- 	      {
- 		gnu_type = gnat_to_gnu_type (Etype (Expression (gnat_temp)));
- 		if (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE)
- 		  gnu_type = TREE_TYPE (gnu_init);
- 	      }
- 
- 	    /* See the N_Qualified_Expression case for the rationale.  */
- 	    if (Is_Tagged_Type (gnat_desig_type))
- 	      used_types_insert (gnu_type);
- 
- 	    gnu_init = convert (gnu_type, gnu_init);
- 	  }
- 	else
- 	  gcc_unreachable ();
- 
- 	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);
-       }
-       break;
- 
-     /**************************/
-     /* Chapter 5: Statements  */
-     /**************************/
- 
-     case N_Label:
-       gnu_result = build1 (LABEL_EXPR, void_type_node,
- 			   gnat_to_gnu (Identifier (gnat_node)));
-       break;
- 
-     case N_Null_Statement:
-       /* When not optimizing, turn null statements from source into gotos to
- 	 the next statement that the middle-end knows how to preserve.  */
-       if (!optimize && Comes_From_Source (gnat_node))
- 	{
- 	  tree stmt, label = create_label_decl (NULL_TREE, gnat_node);
- 	  DECL_IGNORED_P (label) = 1;
- 	  start_stmt_group ();
- 	  stmt = build1 (GOTO_EXPR, void_type_node, label);
- 	  set_expr_location_from_node (stmt, gnat_node);
- 	  add_stmt (stmt);
- 	  stmt = build1 (LABEL_EXPR, void_type_node, label);
- 	  set_expr_location_from_node (stmt, gnat_node);
- 	  add_stmt (stmt);
- 	  gnu_result = end_stmt_group ();
- 	}
-       else
- 	gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Assignment_Statement:
-       /* Get the LHS and RHS of the statement and convert any reference to an
- 	 unconstrained array into a reference to the underlying array.  */
-       gnu_lhs = maybe_unconstrained_array (gnat_to_gnu (Name (gnat_node)));
- 
-       /* If the type has a size that overflows, convert this into raise of
- 	 Storage_Error: execution shouldn't have gotten here anyway.  */
-       if (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (gnu_lhs))) == INTEGER_CST
- 	   && !valid_constant_size_p (TYPE_SIZE_UNIT (TREE_TYPE (gnu_lhs))))
- 	gnu_result = build_call_raise (SE_Object_Too_Large, gnat_node,
- 				       N_Raise_Storage_Error);
-       else if (Nkind (Expression (gnat_node)) == N_Function_Call)
- 	{
- 	  get_atomic_access (Name (gnat_node), &aa_type, &aa_sync);
- 	  gnu_result
- 	    = Call_to_gnu (Expression (gnat_node), &gnu_result_type, gnu_lhs,
- 			   aa_type, aa_sync);
- 	}
-       else
- 	{
- 	  const Node_Id gnat_expr = Expression (gnat_node);
- 	  const Node_Id gnat_inner
- 	    = Nkind (gnat_expr) == N_Qualified_Expression
- 	      ? Expression (gnat_expr)
- 	      : gnat_expr;
- 	  const Entity_Id gnat_type
- 	    = Underlying_Type (Etype (Name (gnat_node)));
- 	  const bool use_memset_p
- 	    = Is_Array_Type (gnat_type)
- 	      && Nkind (gnat_inner) == N_Aggregate
- 	      && Is_Single_Aggregate (gnat_inner);
- 
- 	  /* If we use memset, we need to find the innermost expression.  */
- 	  if (use_memset_p)
- 	    {
- 	      gnat_temp = gnat_inner;
- 	      do {
- 		gnat_temp
- 		  = Expression (First (Component_Associations (gnat_temp)));
- 	      } while (Nkind (gnat_temp) == N_Aggregate
- 		       && Is_Single_Aggregate (gnat_temp));
- 	      gnu_rhs = gnat_to_gnu (gnat_temp);
- 	    }
- 	  else
- 	    gnu_rhs = maybe_unconstrained_array (gnat_to_gnu (gnat_expr));
- 
- 	  gigi_checking_assert (!Do_Range_Check (gnat_expr));
- 
- 	  get_atomic_access (Name (gnat_node), &aa_type, &aa_sync);
- 
- 	  /* If an outer atomic access is required on the LHS, build the load-
- 	     modify-store sequence.  */
- 	  if (aa_type == OUTER_ATOMIC)
- 	    gnu_result = build_load_modify_store (gnu_lhs, gnu_rhs, gnat_node);
- 
- 	  /* Or else, if a simple atomic access is required, build the atomic
- 	     store.  */
- 	  else if (aa_type == SIMPLE_ATOMIC)
- 	    gnu_result = build_atomic_store (gnu_lhs, gnu_rhs, aa_sync);
- 
- 	  /* Or else, use memset when the conditions are met.  This has already
- 	     been validated by Aggr_Assignment_OK_For_Backend in the front-end
- 	     and the RHS is thus guaranteed to be of the appropriate form.  */
- 	  else if (use_memset_p)
- 	    {
- 	      tree value
- 		= real_zerop (gnu_rhs)
- 		  ? integer_zero_node
- 		  : fold_convert (integer_type_node, gnu_rhs);
- 	      tree dest = build_fold_addr_expr (gnu_lhs);
- 	      tree t = builtin_decl_explicit (BUILT_IN_MEMSET);
- 	      /* Be extra careful not to write too much data.  */
- 	      tree size;
- 	      if (TREE_CODE (gnu_lhs) == COMPONENT_REF)
- 		size = DECL_SIZE_UNIT (TREE_OPERAND (gnu_lhs, 1));
- 	      else if (DECL_P (gnu_lhs))
- 		size = DECL_SIZE_UNIT (gnu_lhs);
- 	      else
- 		size = TYPE_SIZE_UNIT (TREE_TYPE (gnu_lhs));
- 	      size = SUBSTITUTE_PLACEHOLDER_IN_EXPR (size, gnu_lhs);
- 	      if (TREE_CODE (value) == INTEGER_CST && !integer_zerop (value))
- 		{
- 		  tree mask
- 		    = build_int_cst (integer_type_node,
- 				     ((HOST_WIDE_INT) 1 << BITS_PER_UNIT) - 1);
- 		  value = int_const_binop (BIT_AND_EXPR, value, mask);
- 		}
- 	      gnu_result = build_call_expr (t, 3, dest, value, size);
- 	    }
- 
- 	  /* Otherwise build a regular assignment.  */
- 	  else
- 	    gnu_result
- 	      = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_lhs, gnu_rhs);
- 
- 	  /* If the assignment type is a regular array and the two sides are
- 	     not completely disjoint, play safe and use memmove.  But don't do
- 	     it for a bit-packed array as it might not be byte-aligned.  */
- 	  if (TREE_CODE (gnu_result) == MODIFY_EXPR
- 	      && Is_Array_Type (gnat_type)
- 	      && !Is_Bit_Packed_Array (gnat_type)
- 	      && !(Forwards_OK (gnat_node) && Backwards_OK (gnat_node)))
- 	    {
- 	      tree to = TREE_OPERAND (gnu_result, 0);
- 	      tree from = TREE_OPERAND (gnu_result, 1);
- 	      tree type = TREE_TYPE (from);
- 	      tree size
- 	        = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_SIZE_UNIT (type), from);
- 	      tree to_ptr = build_fold_addr_expr (to);
- 	      tree from_ptr = build_fold_addr_expr (from);
- 	      tree t = builtin_decl_explicit (BUILT_IN_MEMMOVE);
- 	      gnu_result = build_call_expr (t, 3, to_ptr, from_ptr, size);
- 	   }
- 	}
-       break;
- 
-     case N_If_Statement:
-       {
- 	tree *gnu_else_ptr; /* Point to put next "else if" or "else".  */
- 
- 	/* Make the outer COND_EXPR.  Avoid non-determinism.  */
- 	gnu_result = build3 (COND_EXPR, void_type_node,
- 			     gnat_to_gnu (Condition (gnat_node)),
- 			     NULL_TREE, NULL_TREE);
- 	COND_EXPR_THEN (gnu_result)
- 	  = build_stmt_group (Then_Statements (gnat_node), false);
- 	TREE_SIDE_EFFECTS (gnu_result) = 1;
- 	gnu_else_ptr = &COND_EXPR_ELSE (gnu_result);
- 
- 	/* Now make a COND_EXPR for each of the "else if" parts.  Put each
- 	   into the previous "else" part and point to where to put any
- 	   outer "else".  Also avoid non-determinism.  */
- 	if (Present (Elsif_Parts (gnat_node)))
- 	  for (gnat_temp = First (Elsif_Parts (gnat_node));
- 	       Present (gnat_temp); gnat_temp = Next (gnat_temp))
- 	    {
- 	      gnu_expr = build3 (COND_EXPR, void_type_node,
- 				 gnat_to_gnu (Condition (gnat_temp)),
- 				 NULL_TREE, NULL_TREE);
- 	      COND_EXPR_THEN (gnu_expr)
- 		= build_stmt_group (Then_Statements (gnat_temp), false);
- 	      TREE_SIDE_EFFECTS (gnu_expr) = 1;
- 	      set_expr_location_from_node (gnu_expr, gnat_temp);
- 	      *gnu_else_ptr = gnu_expr;
- 	      gnu_else_ptr = &COND_EXPR_ELSE (gnu_expr);
- 	    }
- 
- 	*gnu_else_ptr = build_stmt_group (Else_Statements (gnat_node), false);
-       }
-       break;
- 
-     case N_Case_Statement:
-       gnu_result = Case_Statement_to_gnu (gnat_node);
-       break;
- 
-     case N_Loop_Statement:
-       gnu_result = Loop_Statement_to_gnu (gnat_node);
-       break;
- 
-     case N_Block_Statement:
-       /* The only way to enter the block is to fall through to it.  */
-       if (stmt_group_may_fallthru ())
- 	{
- 	  start_stmt_group ();
- 	  gnat_pushlevel ();
- 	  process_decls (Declarations (gnat_node), Empty, Empty, true, true);
- 	  add_stmt (gnat_to_gnu (Handled_Statement_Sequence (gnat_node)));
- 	  gnat_poplevel ();
- 	  gnu_result = end_stmt_group ();
- 	}
-       else
- 	gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Exit_Statement:
-       gnu_result
- 	= build2 (EXIT_STMT, void_type_node,
- 		  (Present (Condition (gnat_node))
- 		   ? gnat_to_gnu (Condition (gnat_node)) : NULL_TREE),
- 		  (Present (Name (gnat_node))
- 		   ? get_gnu_tree (Entity (Name (gnat_node)))
- 		   : LOOP_STMT_LABEL (gnu_loop_stack->last ()->stmt)));
-       break;
- 
-     case N_Simple_Return_Statement:
-       {
- 	tree gnu_ret_obj, gnu_ret_val;
- 
- 	/* If the subprogram is a function, we must return the expression.  */
- 	if (Present (Expression (gnat_node)))
- 	  {
- 	    tree gnu_subprog_type = TREE_TYPE (current_function_decl);
- 
- 	    /* If this function has copy-in/copy-out parameters parameters and
- 	       doesn't return by invisible reference, get the real object for
- 	       the return.  See Subprogram_Body_to_gnu.  */
- 	    if (TYPE_CI_CO_LIST (gnu_subprog_type)
- 		&& !TREE_ADDRESSABLE (gnu_subprog_type))
- 	      gnu_ret_obj = gnu_return_var_stack->last ();
- 	    else
- 	      gnu_ret_obj = DECL_RESULT (current_function_decl);
- 
- 	    /* Get the GCC tree for the expression to be returned.  */
- 	    gnu_ret_val = gnat_to_gnu (Expression (gnat_node));
- 
- 	    /* Do not remove the padding from GNU_RET_VAL if the inner type is
- 	       self-referential since we want to allocate the fixed size.  */
- 	    if (TREE_CODE (gnu_ret_val) == COMPONENT_REF
- 		&& type_is_padding_self_referential
- 		   (TREE_TYPE (TREE_OPERAND (gnu_ret_val, 0))))
- 	      gnu_ret_val = TREE_OPERAND (gnu_ret_val, 0);
- 
- 	    /* If the function returns by direct reference, return a pointer
- 	       to the return value.  */
- 	    if (TYPE_RETURN_BY_DIRECT_REF_P (gnu_subprog_type)
- 		|| By_Ref (gnat_node))
- 	      gnu_ret_val = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_ret_val);
- 
- 	    /* Otherwise, if it returns an unconstrained array, we have to
- 	       allocate a new version of the result and return it.  */
- 	    else if (TYPE_RETURN_UNCONSTRAINED_P (gnu_subprog_type))
- 	      {
- 		gnu_ret_val = maybe_unconstrained_array (gnu_ret_val);
- 
- 		/* And find out whether this is a candidate for Named Return
- 		   Value.  If so, record it.  */
- 		if (optimize
- 		    && !optimize_debug
- 		    && !TYPE_CI_CO_LIST (gnu_subprog_type))
- 		  {
- 		    tree ret_val = gnu_ret_val;
- 
- 		    /* Strip useless conversions around the return value.  */
- 		    if (gnat_useless_type_conversion (ret_val))
- 		      ret_val = TREE_OPERAND (ret_val, 0);
- 
- 		    /* Strip unpadding around the return value.  */
- 		    if (TREE_CODE (ret_val) == COMPONENT_REF
- 			&& TYPE_IS_PADDING_P
- 			   (TREE_TYPE (TREE_OPERAND (ret_val, 0))))
- 		      ret_val = TREE_OPERAND (ret_val, 0);
- 
- 		    /* Now apply the test to the return value.  */
- 		    if (return_value_ok_for_nrv_p (NULL_TREE, ret_val))
- 		      {
- 			if (!f_named_ret_val)
- 			  f_named_ret_val = BITMAP_GGC_ALLOC ();
- 			bitmap_set_bit (f_named_ret_val, DECL_UID (ret_val));
- 			if (!f_gnat_ret)
- 			  f_gnat_ret = gnat_node;
- 		      }
- 		  }
- 
- 		gnu_ret_val = build_allocator (TREE_TYPE (gnu_ret_val),
- 					       gnu_ret_val,
- 					       TREE_TYPE (gnu_ret_obj),
- 					       Procedure_To_Call (gnat_node),
- 					       Storage_Pool (gnat_node),
- 					       gnat_node, false);
- 	      }
- 
- 	    /* Otherwise, if it returns by invisible reference, dereference
- 	       the pointer it is passed using the type of the return value
- 	       and build the copy operation manually.  This ensures that we
- 	       don't copy too much data, for example if the return type is
- 	       unconstrained with a maximum size.  */
- 	    else if (TREE_ADDRESSABLE (gnu_subprog_type))
- 	      {
- 		tree gnu_ret_deref
- 		  = build_unary_op (INDIRECT_REF, TREE_TYPE (gnu_ret_val),
- 				    gnu_ret_obj);
- 		gnu_result = build2 (INIT_EXPR, void_type_node,
- 				     gnu_ret_deref, gnu_ret_val);
- 		add_stmt_with_node (gnu_result, gnat_node);
- 		gnu_ret_val = NULL_TREE;
- 	      }
- 	  }
- 
- 	else
- 	  gnu_ret_obj = gnu_ret_val = NULL_TREE;
- 
- 	/* If we have a return label defined, convert this into a branch to
- 	   that label.  The return proper will be handled elsewhere.  */
- 	if (gnu_return_label_stack->last ())
- 	  {
- 	    if (gnu_ret_val)
- 	      add_stmt_with_node (build_binary_op (MODIFY_EXPR,
- 						   NULL_TREE, gnu_ret_obj,
- 						   gnu_ret_val),
- 				  gnat_node);
- 
- 	    gnu_result = build1 (GOTO_EXPR, void_type_node,
- 				 gnu_return_label_stack->last ());
- 
- 	    /* When not optimizing, make sure the return is preserved.  */
- 	    if (!optimize && Comes_From_Source (gnat_node))
- 	      DECL_ARTIFICIAL (gnu_return_label_stack->last ()) = 0;
- 	  }
- 
- 	/* Otherwise, build a regular return.  */
- 	else
- 	  gnu_result = build_return_expr (gnu_ret_obj, gnu_ret_val);
-       }
-       break;
- 
-     case N_Goto_Statement:
-       gnu_expr = gnat_to_gnu (Name (gnat_node));
-       gnu_result = build1 (GOTO_EXPR, void_type_node, gnu_expr);
-       TREE_USED (gnu_expr) = 1;
-       break;
- 
-     /***************************/
-     /* Chapter 6: Subprograms  */
-     /***************************/
- 
-     case N_Subprogram_Declaration:
-       /* Unless there is a freeze node, declare the entity.  We consider
- 	 this a definition even though we're not generating code for the
- 	 subprogram because we will be making the corresponding GCC node.
- 	 When there is a freeze node, it is considered the definition of
- 	 the subprogram and we do nothing until after it is encountered.
- 	 That's an efficiency issue: the types involved in the profile
- 	 are far more likely to be frozen between the declaration and
- 	 the freeze node than before the declaration, so we save some
- 	 updates of the GCC node by waiting until the freeze node.
- 	 The counterpart is that we assume that there is no reference
- 	 to the subprogram between the declaration and the freeze node
- 	 in the expanded code; otherwise, it will be interpreted as an
- 	 external reference and very likely give rise to a link failure.  */
-       if (No (Freeze_Node (Defining_Entity (Specification (gnat_node)))))
- 	gnat_to_gnu_entity (Defining_Entity (Specification (gnat_node)),
- 			    NULL_TREE, true);
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Abstract_Subprogram_Declaration:
-       /* This subprogram doesn't exist for code generation purposes, but we
- 	 have to elaborate the types of any parameters and result, unless
- 	 they are imported types (nothing to generate in this case).
- 
- 	 The parameter list may contain types with freeze nodes, e.g. not null
- 	 subtypes, so the subprogram itself may carry a freeze node, in which
- 	 case its elaboration must be deferred.  */
- 
-       /* Process the parameter types first.  */
-       if (No (Freeze_Node (Defining_Entity (Specification (gnat_node)))))
-       for (gnat_temp
- 	   = First_Formal_With_Extras
- 	      (Defining_Entity (Specification (gnat_node)));
- 	   Present (gnat_temp);
- 	   gnat_temp = Next_Formal_With_Extras (gnat_temp))
- 	if (Is_Itype (Etype (gnat_temp))
- 	    && !From_Limited_With (Etype (gnat_temp)))
- 	  gnat_to_gnu_entity (Etype (gnat_temp), NULL_TREE, false);
- 
-       /* Then the result type, set to Standard_Void_Type for procedures.  */
-       {
- 	Entity_Id gnat_temp_type
- 	  = Etype (Defining_Entity (Specification (gnat_node)));
- 
- 	if (Is_Itype (gnat_temp_type) && !From_Limited_With (gnat_temp_type))
- 	  gnat_to_gnu_entity (Etype (gnat_temp_type), NULL_TREE, false);
-       }
- 
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Defining_Program_Unit_Name:
-       /* For a child unit identifier go up a level to get the specification.
- 	 We get this when we try to find the spec of a child unit package
- 	 that is the compilation unit being compiled.  */
-       gnu_result = gnat_to_gnu (Parent (gnat_node));
-       break;
- 
-     case N_Subprogram_Body:
-       Subprogram_Body_to_gnu (gnat_node);
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Function_Call:
-     case N_Procedure_Call_Statement:
-       gnu_result = Call_to_gnu (gnat_node, &gnu_result_type, NULL_TREE,
- 				NOT_ATOMIC, false);
-       break;
- 
-     /************************/
-     /* Chapter 7: Packages  */
-     /************************/
- 
-     case N_Package_Declaration:
-       gnu_result = gnat_to_gnu (Specification (gnat_node));
-       break;
- 
-     case N_Package_Specification:
- 
-       start_stmt_group ();
-       process_decls (Visible_Declarations (gnat_node),
- 		     Private_Declarations (gnat_node), Empty, true, true);
-       gnu_result = end_stmt_group ();
-       break;
- 
-     case N_Package_Body:
- 
-       /* If this is the body of a generic package - do nothing.  */
-       if (Ekind (Corresponding_Spec (gnat_node)) == E_Generic_Package)
- 	{
- 	  gnu_result = alloc_stmt_list ();
- 	  break;
- 	}
- 
-       start_stmt_group ();
-       process_decls (Declarations (gnat_node), Empty, Empty, true, true);
- 
-       if (Present (Handled_Statement_Sequence (gnat_node)))
- 	add_stmt (gnat_to_gnu (Handled_Statement_Sequence (gnat_node)));
- 
-       gnu_result = end_stmt_group ();
-       break;
- 
-     /********************************/
-     /* Chapter 8: Visibility Rules  */
-     /********************************/
- 
-     case N_Use_Package_Clause:
-     case N_Use_Type_Clause:
-       /* Nothing to do here - but these may appear in list of declarations.  */
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     /*********************/
-     /* Chapter 9: Tasks  */
-     /*********************/
- 
-     case N_Protected_Type_Declaration:
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Single_Task_Declaration:
-       gnat_to_gnu_entity (Defining_Entity (gnat_node), NULL_TREE, true);
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     /*********************************************************/
-     /* Chapter 10: Program Structure and Compilation Issues  */
-     /*********************************************************/
- 
-     case N_Compilation_Unit:
-       /* This is not called for the main unit on which gigi is invoked.  */
-       Compilation_Unit_to_gnu (gnat_node);
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Subunit:
-       gnu_result = gnat_to_gnu (Proper_Body (gnat_node));
-       break;
- 
-     case N_Entry_Body:
-     case N_Protected_Body:
-     case N_Task_Body:
-       /* These nodes should only be present when annotating types.  */
-       gcc_assert (type_annotate_only);
-       process_decls (Declarations (gnat_node), Empty, Empty, true, true);
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Subprogram_Body_Stub:
-     case N_Package_Body_Stub:
-     case N_Protected_Body_Stub:
-     case N_Task_Body_Stub:
-       /* Simply process whatever unit is being inserted.  */
-       if (Present (Library_Unit (gnat_node)))
- 	gnu_result = gnat_to_gnu (Unit (Library_Unit (gnat_node)));
-       else
- 	{
- 	  gcc_assert (type_annotate_only);
- 	  gnu_result = alloc_stmt_list ();
- 	}
-       break;
- 
-     /***************************/
-     /* Chapter 11: Exceptions  */
-     /***************************/
- 
-     case N_Handled_Sequence_Of_Statements:
-       /* If there is an At_End procedure attached to this node, and the EH
- 	 mechanism is front-end, we must have at least a corresponding At_End
- 	 handler, unless the No_Exception_Handlers restriction is set.  */
-       gcc_assert (type_annotate_only
- 		  || !Front_End_Exceptions ()
- 		  || No (At_End_Proc (gnat_node))
- 		  || Present (Exception_Handlers (gnat_node))
- 		  || No_Exception_Handlers_Set ());
- 
-       gnu_result = Handled_Sequence_Of_Statements_to_gnu (gnat_node);
-       break;
- 
-     case N_Exception_Handler:
-       if (Back_End_Exceptions ())
- 	gnu_result = Exception_Handler_to_gnu_gcc (gnat_node);
-       else if (Exception_Mechanism == Front_End_SJLJ)
- 	gnu_result = Exception_Handler_to_gnu_fe_sjlj (gnat_node);
-       else
- 	gcc_unreachable ();
-       break;
- 
-     case N_Raise_Statement:
-       /* Only for reraise in back-end exceptions mode.  */
-       gcc_assert (No (Name (gnat_node)) && Back_End_Exceptions ());
- 
-       start_stmt_group ();
- 
-       add_stmt_with_node (build_call_n_expr (reraise_zcx_decl, 1,
- 					     gnu_incoming_exc_ptr),
- 			  gnat_node);
- 
-       gnu_result = end_stmt_group ();
-       break;
- 
-     case N_Push_Constraint_Error_Label:
-       gnu_constraint_error_label_stack.safe_push (Exception_Label (gnat_node));
-       break;
- 
-     case N_Push_Storage_Error_Label:
-       gnu_storage_error_label_stack.safe_push (Exception_Label (gnat_node));
-       break;
- 
-     case N_Push_Program_Error_Label:
-       gnu_program_error_label_stack.safe_push (Exception_Label (gnat_node));
-       break;
- 
-     case N_Pop_Constraint_Error_Label:
-       gnat_temp = gnu_constraint_error_label_stack.pop ();
-       if (Present (gnat_temp)
- 	  && !TREE_USED (gnat_to_gnu_entity (gnat_temp, NULL_TREE, false)))
- 	Warn_If_No_Local_Raise (gnat_temp);
-       break;
- 
-     case N_Pop_Storage_Error_Label:
-       gnat_temp = gnu_storage_error_label_stack.pop ();
-       if (Present (gnat_temp)
- 	  && !TREE_USED (gnat_to_gnu_entity (gnat_temp, NULL_TREE, false)))
- 	Warn_If_No_Local_Raise (gnat_temp);
-       break;
- 
-     case N_Pop_Program_Error_Label:
-       gnat_temp = gnu_program_error_label_stack.pop ();
-       if (Present (gnat_temp)
- 	  && !TREE_USED (gnat_to_gnu_entity (gnat_temp, NULL_TREE, false)))
- 	Warn_If_No_Local_Raise (gnat_temp);
-       break;
- 
-     /******************************/
-     /* Chapter 12: Generic Units  */
-     /******************************/
- 
-     case N_Generic_Function_Renaming_Declaration:
-     case N_Generic_Package_Renaming_Declaration:
-     case N_Generic_Procedure_Renaming_Declaration:
-     case N_Generic_Package_Declaration:
-     case N_Generic_Subprogram_Declaration:
-     case N_Package_Instantiation:
-     case N_Procedure_Instantiation:
-     case N_Function_Instantiation:
-       /* These nodes can appear on a declaration list but there is nothing to
- 	 to be done with them.  */
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     /**************************************************/
-     /* Chapter 13: Representation Clauses and         */
-     /*             Implementation-Dependent Features  */
-     /**************************************************/
- 
-     case N_Attribute_Definition_Clause:
-       gnu_result = alloc_stmt_list ();
- 
-       /* The only one we need to deal with is 'Address since, for the others,
- 	 the front-end puts the information elsewhere.  */
-       if (Get_Attribute_Id (Chars (gnat_node)) != Attr_Address)
- 	break;
- 
-       /* And we only deal with 'Address if the object has a Freeze node.  */
-       gnat_temp = Entity (Name (gnat_node));
-       if (Freeze_Node (gnat_temp))
- 	{
- 	  tree gnu_address = gnat_to_gnu (Expression (gnat_node)), gnu_temp;
- 
- 	  /* Get the value to use as the address and save it as the equivalent
- 	     for the object; when it is frozen, gnat_to_gnu_entity will do the
- 	     right thing.  For a subprogram, put the naked address but build a
- 	     meaningfull expression for an object in case its address is taken
- 	     before the Freeze node is encountered; this can happen if the type
- 	     of the object is limited and it is initialized with the result of
- 	     a function call.  */
- 	  if (Is_Subprogram (gnat_temp))
- 	    gnu_temp = gnu_address;
- 	  else
- 	    {
- 	      tree gnu_type = gnat_to_gnu_type (Etype (gnat_temp));
- 	      /* Drop atomic and volatile qualifiers for the expression.  */
- 	      gnu_type = TYPE_MAIN_VARIANT (gnu_type);
- 	      gnu_type
- 		= build_reference_type_for_mode (gnu_type, ptr_mode, true);
- 	      gnu_address = convert (gnu_type, gnu_address);
- 	      gnu_temp
- 		= build_unary_op (INDIRECT_REF, NULL_TREE, gnu_address);
- 	    }
- 
- 	  save_gnu_tree (gnat_temp, gnu_temp, true);
- 	}
-       break;
- 
-     case N_Enumeration_Representation_Clause:
-     case N_Record_Representation_Clause:
-     case N_At_Clause:
-       /* We do nothing with these.  SEM puts the information elsewhere.  */
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Code_Statement:
-       if (!type_annotate_only)
- 	{
- 	  tree gnu_template = gnat_to_gnu (Asm_Template (gnat_node));
- 	  tree gnu_inputs = NULL_TREE, gnu_outputs = NULL_TREE;
- 	  tree gnu_clobbers = NULL_TREE, tail;
- 	  bool allows_mem, allows_reg, fake;
- 	  int ninputs, noutputs, i;
- 	  const char **oconstraints;
- 	  const char *constraint;
- 	  char *clobber;
- 
- 	  /* First retrieve the 3 operand lists built by the front-end.  */
- 	  Setup_Asm_Outputs (gnat_node);
- 	  while (Present (gnat_temp = Asm_Output_Variable ()))
- 	    {
- 	      tree gnu_value = gnat_to_gnu (gnat_temp);
- 	      tree gnu_constr = build_tree_list (NULL_TREE, gnat_to_gnu
- 						 (Asm_Output_Constraint ()));
- 
- 	      gnu_outputs = tree_cons (gnu_constr, gnu_value, gnu_outputs);
- 	      Next_Asm_Output ();
- 	    }
- 
- 	  Setup_Asm_Inputs (gnat_node);
- 	  while (Present (gnat_temp = Asm_Input_Value ()))
- 	    {
- 	      tree gnu_value = gnat_to_gnu (gnat_temp);
- 	      tree gnu_constr = build_tree_list (NULL_TREE, gnat_to_gnu
- 						 (Asm_Input_Constraint ()));
- 
- 	      gnu_inputs = tree_cons (gnu_constr, gnu_value, gnu_inputs);
- 	      Next_Asm_Input ();
- 	    }
- 
- 	  Clobber_Setup (gnat_node);
- 	  while ((clobber = Clobber_Get_Next ()))
- 	    gnu_clobbers
- 	      = tree_cons (NULL_TREE,
- 			   build_string (strlen (clobber) + 1, clobber),
- 			   gnu_clobbers);
- 
- 	  /* Then perform some standard checking and processing on the
- 	     operands.  In particular, mark them addressable if needed.  */
- 	  gnu_outputs = nreverse (gnu_outputs);
- 	  noutputs = list_length (gnu_outputs);
- 	  gnu_inputs = nreverse (gnu_inputs);
- 	  ninputs = list_length (gnu_inputs);
- 	  oconstraints = XALLOCAVEC (const char *, noutputs);
- 
- 	  for (i = 0, tail = gnu_outputs; tail; ++i, tail = TREE_CHAIN (tail))
- 	    {
- 	      tree output = TREE_VALUE (tail);
- 	      constraint
- 		= TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
- 	      oconstraints[i] = constraint;
- 
- 	      if (parse_output_constraint (&constraint, i, ninputs, noutputs,
- 					   &allows_mem, &allows_reg, &fake))
- 		{
- 		  /* If the operand is going to end up in memory,
- 		     mark it addressable.  Note that we don't test
- 		     allows_mem like in the input case below; this
- 		     is modeled on the C front-end.  */
- 		  if (!allows_reg)
- 		    {
- 		      output = remove_conversions (output, false);
- 		      if (TREE_CODE (output) == CONST_DECL
- 			  && DECL_CONST_CORRESPONDING_VAR (output))
- 			output = DECL_CONST_CORRESPONDING_VAR (output);
- 		      if (!gnat_mark_addressable (output))
- 			output = error_mark_node;
- 		    }
- 		}
- 	      else
- 		output = error_mark_node;
- 
- 	      TREE_VALUE (tail) = output;
- 	    }
- 
- 	  for (i = 0, tail = gnu_inputs; tail; ++i, tail = TREE_CHAIN (tail))
- 	    {
- 	      tree input = TREE_VALUE (tail);
- 	      constraint
- 		= TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
- 
- 	      if (parse_input_constraint (&constraint, i, ninputs, noutputs,
- 					  0, oconstraints,
- 					  &allows_mem, &allows_reg))
- 		{
- 		  /* If the operand is going to end up in memory,
- 		     mark it addressable.  */
- 		  if (!allows_reg && allows_mem)
- 		    {
- 		      input = remove_conversions (input, false);
- 		      if (TREE_CODE (input) == CONST_DECL
- 			  && DECL_CONST_CORRESPONDING_VAR (input))
- 			input = DECL_CONST_CORRESPONDING_VAR (input);
- 		      if (!gnat_mark_addressable (input))
- 			input = error_mark_node;
- 		    }
- 		}
- 	      else
- 		input = error_mark_node;
- 
- 	      TREE_VALUE (tail) = input;
- 	    }
- 
- 	  gnu_result = build5 (ASM_EXPR,  void_type_node,
- 			       gnu_template, gnu_outputs,
- 			       gnu_inputs, gnu_clobbers, NULL_TREE);
- 	  ASM_VOLATILE_P (gnu_result) = Is_Asm_Volatile (gnat_node);
- 	}
-       else
- 	gnu_result = alloc_stmt_list ();
- 
-       break;
- 
-     /****************/
-     /* Added Nodes  */
-     /****************/
- 
-     /* Markers are created by the ABE mechanism to capture information which
-        is either unavailable of expensive to recompute.  Markers do not have
-        and runtime semantics, and should be ignored.  */
- 
-     case N_Call_Marker:
-     case N_Variable_Reference_Marker:
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Expression_With_Actions:
-       /* This construct doesn't define a scope so we don't push a binding
- 	 level around the statement list, but we wrap it in a SAVE_EXPR to
- 	 protect it from unsharing.  Elaborate the expression as part of the
- 	 same statement group as the actions so that the type declaration
- 	 gets inserted there as well.  This ensures that the type elaboration
- 	 code is issued past the actions computing values on which it might
- 	 depend.  */
-       start_stmt_group ();
-       add_stmt_list (Actions (gnat_node));
-       gnu_expr = gnat_to_gnu (Expression (gnat_node));
-       gnu_result = end_stmt_group ();
- 
-       gnu_result = build1 (SAVE_EXPR, void_type_node, gnu_result);
-       TREE_SIDE_EFFECTS (gnu_result) = 1;
- 
-       gnu_result
- 	= build_compound_expr (TREE_TYPE (gnu_expr), gnu_result, gnu_expr);
-       gnu_result_type = get_unpadded_type (Etype (gnat_node));
-       break;
- 
-     case N_Freeze_Entity:
-       start_stmt_group ();
-       process_freeze_entity (gnat_node);
-       process_decls (Actions (gnat_node), Empty, Empty, true, true);
-       gnu_result = end_stmt_group ();
-       break;
- 
-     case N_Freeze_Generic_Entity:
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Itype_Reference:
-       if (!present_gnu_tree (Itype (gnat_node)))
- 	process_type (Itype (gnat_node));
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Free_Statement:
-       gnat_temp = Expression (gnat_node);
- 
-       if (!type_annotate_only)
- 	{
- 	  tree gnu_ptr, gnu_ptr_type, gnu_obj_type, gnu_actual_obj_type;
- 
- 	  const Entity_Id gnat_desig_type
- 	    = Designated_Type (Underlying_Type (Etype (gnat_temp)));
- 
- 	  /* Make sure the designated type is complete before dereferencing,
- 	     in case it is a Taft Amendment type.  */
- 	  (void) gnat_to_gnu_entity (gnat_desig_type, NULL_TREE, false);
- 
- 	  gnu_ptr = gnat_to_gnu (gnat_temp);
- 	  gnu_ptr_type = TREE_TYPE (gnu_ptr);
- 
- 	  /* If this is a thin pointer, we must first dereference it to create
- 	     a fat pointer, then go back below to a thin pointer.  The reason
- 	     for this is that we need to have a fat pointer someplace in order
- 	     to properly compute the size.  */
- 	  if (TYPE_IS_THIN_POINTER_P (TREE_TYPE (gnu_ptr)))
- 	    gnu_ptr = build_unary_op (ADDR_EXPR, NULL_TREE,
- 				      build_unary_op (INDIRECT_REF, NULL_TREE,
- 						      gnu_ptr));
- 
- 	  /* If this is a fat pointer, the object must have been allocated with
- 	     the template in front of the array.  So pass the template address,
- 	     and get the total size; do it by converting to a thin pointer.  */
- 	  if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_ptr)))
- 	    gnu_ptr
- 	      = convert (build_pointer_type
- 			 (TYPE_OBJECT_RECORD_TYPE
- 			  (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (gnu_ptr)))),
- 			 gnu_ptr);
- 
- 	  gnu_obj_type = TREE_TYPE (TREE_TYPE (gnu_ptr));
- 
- 	  /* If this is a thin pointer, the object must have been allocated with
- 	     the template in front of the array.  So pass the template address,
- 	     and get the total size.  */
- 	  if (TYPE_IS_THIN_POINTER_P (TREE_TYPE (gnu_ptr)))
- 	    gnu_ptr
- 	      = build_binary_op (POINTER_PLUS_EXPR, TREE_TYPE (gnu_ptr),
- 				 gnu_ptr,
- 				 fold_build1 (NEGATE_EXPR, sizetype,
- 					      byte_position
- 					      (DECL_CHAIN
- 					       TYPE_FIELDS ((gnu_obj_type)))));
- 
- 	  /* If we have a special dynamic constrained subtype on the node, use
- 	     it to compute the size; otherwise, use the designated subtype.  */
- 	  if (Present (Actual_Designated_Subtype (gnat_node)))
- 	    {
- 	      gnu_actual_obj_type
- 		= gnat_to_gnu_type (Actual_Designated_Subtype (gnat_node));
- 
- 	      if (TYPE_IS_FAT_OR_THIN_POINTER_P (gnu_ptr_type))
- 		gnu_actual_obj_type
- 		  = build_unc_object_type_from_ptr (gnu_ptr_type,
- 						    gnu_actual_obj_type,
- 						    get_identifier ("DEALLOC"),
- 						    false);
- 	    }
- 	  else
- 	    gnu_actual_obj_type = gnu_obj_type;
- 
- 	  tree gnu_size = TYPE_SIZE_UNIT (gnu_actual_obj_type);
- 	  gnu_size = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_size, gnu_ptr);
- 
- 	  gnu_result
- 	      = build_call_alloc_dealloc (gnu_ptr, gnu_size, gnu_obj_type,
- 					  Procedure_To_Call (gnat_node),
- 					  Storage_Pool (gnat_node),
- 					  gnat_node);
- 	}
-       break;
- 
-     case N_Raise_Constraint_Error:
-     case N_Raise_Program_Error:
-     case N_Raise_Storage_Error:
-       if (type_annotate_only)
- 	gnu_result = alloc_stmt_list ();
-       else
- 	gnu_result = Raise_Error_to_gnu (gnat_node, &gnu_result_type);
-       break;
- 
-     case N_Validate_Unchecked_Conversion:
-       /* The only validation we currently do on an unchecked conversion is
- 	 that of aliasing assumptions.  */
-       if (flag_strict_aliasing)
- 	gnat_validate_uc_list.safe_push (gnat_node);
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     case N_Function_Specification:
-     case N_Procedure_Specification:
-     case N_Op_Concat:
-     case N_Component_Association:
-       /* These nodes should only be present when annotating types.  */
-       gcc_assert (type_annotate_only);
-       gnu_result = alloc_stmt_list ();
-       break;
- 
-     default:
-       /* Other nodes are not supposed to reach here.  */
-       gcc_unreachable ();
-     }
- 
-   /* If we pushed the processing of the elaboration routine, pop it back.  */
-   if (went_into_elab_proc)
-     current_function_decl = NULL_TREE;
- 
-   /* When not optimizing, turn boolean rvalues B into B != false tests
-      so that we can put the location information of the reference to B on
-      the inequality operator for better debug info.  */
-   if (!optimize
-       && TREE_CODE (gnu_result) != INTEGER_CST
-       && TREE_CODE (gnu_result) != TYPE_DECL
-       && (kind == N_Identifier
- 	  || kind == N_Expanded_Name
- 	  || kind == N_Explicit_Dereference
- 	  || kind == N_Indexed_Component
- 	  || kind == N_Selected_Component)
-       && TREE_CODE (get_base_type (gnu_result_type)) == BOOLEAN_TYPE
-       && Nkind (Parent (gnat_node)) != N_Attribute_Reference
-       && Nkind (Parent (gnat_node)) != N_Variant_Part
-       && !lvalue_required_p (gnat_node, gnu_result_type, false, false))
-     {
-       gnu_result
- 	= build_binary_op (NE_EXPR, gnu_result_type,
- 			   convert (gnu_result_type, gnu_result),
- 			   convert (gnu_result_type, boolean_false_node));
-       if (TREE_CODE (gnu_result) != INTEGER_CST)
- 	set_gnu_expr_location_from_node (gnu_result, gnat_node);
-     }
- 
-   /* Set the location information on the result if it's not a simple name
-      or something that contains a simple name, for example a tag, because
-      we don"t want all the references to get the location of the first use.
-      Note that we may have no result if we tried to build a CALL_EXPR node
-      to a procedure with no side-effects and optimization is enabled.  */
-   else if (kind != N_Identifier
- 	   && !(kind == N_Selected_Component
- 		&& Chars (Selector_Name (gnat_node)) == Name_uTag)
- 	   && gnu_result
- 	   && EXPR_P (gnu_result))
-     set_gnu_expr_location_from_node (gnu_result, gnat_node);
- 
-   /* If we're supposed to return something of void_type, it means we have
-      something we're elaborating for effect, so just return.  */
-   if (TREE_CODE (gnu_result_type) == VOID_TYPE)
-     return gnu_result;
- 
-   /* If the result is a constant that overflowed, raise Constraint_Error.  */
-   if (TREE_CODE (gnu_result) == INTEGER_CST && TREE_OVERFLOW (gnu_result))
-     {
-       post_error ("?`Constraint_Error` will be raised at run time", gnat_node);
-       gnu_result
- 	= build1 (NULL_EXPR, gnu_result_type,
- 		  build_call_raise (CE_Overflow_Check_Failed, gnat_node,
- 				    N_Raise_Constraint_Error));
-     }
- 
-   /* If the result has side-effects and is of an unconstrained type, protect
-      the expression in case it will be referenced multiple times, i.e. for
-      its value and to compute the size of an object.  But do it neither for
-      an object nor a renaming declaration, nor a return statement of a call
-      to a function that returns an unconstrained record type with default
-      discriminant, because there is no size to be computed in these cases
-      and this will create a useless temporary.  We must do this before any
-      conversions.  */
-   if (TREE_SIDE_EFFECTS (gnu_result)
-       && (TREE_CODE (gnu_result_type) == UNCONSTRAINED_ARRAY_TYPE
- 	  || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_result_type)))
-       && !(TREE_CODE (gnu_result) == CALL_EXPR
- 	   && type_is_padding_self_referential (TREE_TYPE (gnu_result))
- 	   && (Nkind (Parent (gnat_node)) == N_Object_Declaration
- 	       || Nkind (Parent (gnat_node)) == N_Object_Renaming_Declaration
- 	       || Nkind (Parent (gnat_node)) == N_Simple_Return_Statement)))
-     gnu_result = gnat_protect_expr (gnu_result);
- 
-   /* Now convert the result to the result type, unless we are in one of the
-      following cases:
- 
-        1. If this is the LHS of an assignment or an actual parameter of a
- 	  call, return the result almost unmodified since the RHS will have
- 	  to be converted to our type in that case, unless the result type
- 	  has a simpler size or for array types because this size might be
- 	  changed in-between. Likewise if there is just a no-op unchecked
- 	  conversion in-between.  Similarly, don't convert integral types
- 	  that are the operands of an unchecked conversion since we need
- 	  to ignore those conversions (for 'Valid).
- 
-        2. If we have a label (which doesn't have any well-defined type), a
- 	  field or an error, return the result almost unmodified.  Similarly,
- 	  if the two types are record types with the same name, don't convert.
- 	  This will be the case when we are converting from a packable version
- 	  of a type to its original type and we need those conversions to be
- 	  NOPs in order for assignments into these types to work properly.
- 
-        3. If the type is void or if we have no result, return error_mark_node
- 	  to show we have no result.
- 
-        4. If this is a call to a function that returns with variable size and
- 	  the call is used as the expression in either an object or a renaming
- 	  declaration, return the result unmodified because we want to use the
- 	  return slot optimization in this case.
- 
-        5. If this is a reference to an unconstrained array which is used as the
- 	  prefix of an attribute reference that requires an lvalue, return the
- 	  result unmodified because we want to return the original bounds.
- 
-        6. Finally, if the type of the result is already correct.  */
- 
-   if (Present (Parent (gnat_node))
-       && (lhs_or_actual_p (gnat_node)
- 	  || (Nkind (Parent (gnat_node)) == N_Unchecked_Type_Conversion
- 	      && unchecked_conversion_nop (Parent (gnat_node)))
- 	  || (Nkind (Parent (gnat_node)) == N_Unchecked_Type_Conversion
- 	      && !AGGREGATE_TYPE_P (gnu_result_type)
- 	      && !AGGREGATE_TYPE_P (TREE_TYPE (gnu_result))))
-       && !(TYPE_SIZE (gnu_result_type)
- 	   && TYPE_SIZE (TREE_TYPE (gnu_result))
- 	   && AGGREGATE_TYPE_P (gnu_result_type)
- 	      == AGGREGATE_TYPE_P (TREE_TYPE (gnu_result))
- 	   && ((TREE_CODE (TYPE_SIZE (gnu_result_type)) == INTEGER_CST
- 		&& (TREE_CODE (TYPE_SIZE (TREE_TYPE (gnu_result)))
- 		    != INTEGER_CST))
- 	       || (TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST
- 		   && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_result_type))
- 		   && (CONTAINS_PLACEHOLDER_P
- 		       (TYPE_SIZE (TREE_TYPE (gnu_result)))))
- 	       || (TREE_CODE (gnu_result_type) == ARRAY_TYPE
- 		   && TREE_CODE (TREE_TYPE (gnu_result)) == ARRAY_TYPE))
- 	   && !(TREE_CODE (gnu_result_type) == RECORD_TYPE
- 		&& TYPE_JUSTIFIED_MODULAR_P (gnu_result_type))))
-     {
-       /* Remove padding only if the inner object is of self-referential
- 	 size: in that case it must be an object of unconstrained type
- 	 with a default discriminant and we want to avoid copying too
- 	 much data.  But do not remove it if it is already too small.  */
-       if (type_is_padding_self_referential (TREE_TYPE (gnu_result))
- 	  && !(TREE_CODE (gnu_result) == COMPONENT_REF
- 	       && DECL_BIT_FIELD (TREE_OPERAND (gnu_result, 1))
- 	       && DECL_SIZE (TREE_OPERAND (gnu_result, 1))
- 		  != TYPE_SIZE (TREE_TYPE (gnu_result))))
- 	gnu_result = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_result))),
- 			      gnu_result);
-     }
- 
-   else if (TREE_CODE (gnu_result) == LABEL_DECL
- 	   || TREE_CODE (gnu_result) == FIELD_DECL
- 	   || TREE_CODE (gnu_result) == ERROR_MARK
- 	   || (TYPE_NAME (gnu_result_type)
- 	       == TYPE_NAME (TREE_TYPE (gnu_result))
- 	       && TREE_CODE (gnu_result_type) == RECORD_TYPE
- 	       && TREE_CODE (TREE_TYPE (gnu_result)) == RECORD_TYPE))
-     {
-       /* Remove any padding.  */
-       gnu_result = maybe_padded_object (gnu_result);
-     }
- 
-   else if (gnu_result == error_mark_node || gnu_result_type == void_type_node)
-     gnu_result = error_mark_node;
- 
-   else if (TREE_CODE (gnu_result) == CALL_EXPR
- 	   && Present (Parent (gnat_node))
- 	   && (Nkind (Parent (gnat_node)) == N_Object_Declaration
- 	       || Nkind (Parent (gnat_node)) == N_Object_Renaming_Declaration)
- 	   && return_type_with_variable_size_p (TREE_TYPE (gnu_result)))
-     ;
- 
-   else if (TREE_CODE (gnu_result) == UNCONSTRAINED_ARRAY_REF
- 	   && Present (Parent (gnat_node))
- 	   && Nkind (Parent (gnat_node)) == N_Attribute_Reference
- 	   && lvalue_required_for_attribute_p (Parent (gnat_node)))
-     ;
- 
-   else if (TREE_TYPE (gnu_result) != gnu_result_type)
-     gnu_result = convert (gnu_result_type, gnu_result);
- 
-   /* We don't need any NOP_EXPR or NON_LVALUE_EXPR on the result.  */
-   while ((TREE_CODE (gnu_result) == NOP_EXPR
- 	  || TREE_CODE (gnu_result) == NON_LVALUE_EXPR)
- 	 && TREE_TYPE (TREE_OPERAND (gnu_result, 0)) == TREE_TYPE (gnu_result))
-     gnu_result = TREE_OPERAND (gnu_result, 0);
- 
-   return gnu_result;
- }
- 
- /* Similar to gnat_to_gnu, but discard any object that might be created in
-    the course of the translation of GNAT_NODE, which must be an "external"
-    expression in the sense that it will be elaborated elsewhere.  */
- 
- tree
- gnat_to_gnu_external (Node_Id gnat_node)
- {
-   const int save_force_global = force_global;
-   bool went_into_elab_proc = false;
- 
-   /* Force the local context and create a fake scope that we zap
-      at the end so declarations will not be stuck either in the
-      global varpool or in the current scope.  */
-   if (!current_function_decl)
-     {
-       current_function_decl = get_elaboration_procedure ();
-       went_into_elab_proc = true;
-     }
-   force_global = 0;
-   gnat_pushlevel ();
- 
-   tree gnu_result = gnat_to_gnu (gnat_node);
- 
-   gnat_zaplevel ();
-   force_global = save_force_global;
-   if (went_into_elab_proc)
-     current_function_decl = NULL_TREE;
- 
-   /* Do not import locations from external units.  */
-   if (gnu_result && EXPR_P (gnu_result))
-     SET_EXPR_LOCATION (gnu_result, UNKNOWN_LOCATION);
- 
-   return gnu_result;
- }
- 
- /* Return true if the statement list STMT_LIST is empty.  */
- 
- static bool
- empty_stmt_list_p (tree stmt_list)
- {
-   tree_stmt_iterator tsi;
- 
-   for (tsi = tsi_start (stmt_list); !tsi_end_p (tsi); tsi_next (&tsi))
-     {
-       tree stmt = tsi_stmt (tsi);
- 
-       /* Anything else than an empty STMT_STMT counts as something.  */
-       if (TREE_CODE (stmt) != STMT_STMT || STMT_STMT_STMT (stmt))
- 	return false;
-     }
- 
-   return true;
- }
- 
- /* Record the current code position in GNAT_NODE.  */
- 
- static void
- record_code_position (Node_Id gnat_node)
- {
-   tree stmt_stmt = build1 (STMT_STMT, void_type_node, NULL_TREE);
- 
-   add_stmt_with_node (stmt_stmt, gnat_node);
-   save_gnu_tree (gnat_node, stmt_stmt, true);
- }
- 
- /* Insert the code for GNAT_NODE at the position saved for that node.  */
- 
- static void
- insert_code_for (Node_Id gnat_node)
- {
-   tree code = gnat_to_gnu (gnat_node);
- 
-   /* It's too late to remove the STMT_STMT itself at this point.  */
-   if (!empty_stmt_list_p (code))
-     STMT_STMT_STMT (get_gnu_tree (gnat_node)) = code;
- 
-   save_gnu_tree (gnat_node, NULL_TREE, true);
- }
- 
- /* Start a new statement group chained to the previous group.  */
- 
- void
- start_stmt_group (void)
- {
-   struct stmt_group *group = stmt_group_free_list;
- 
-   /* First see if we can get one from the free list.  */
-   if (group)
-     stmt_group_free_list = group->previous;
-   else
-     group = ggc_alloc<stmt_group> ();
- 
-   group->previous = current_stmt_group;
-   group->stmt_list = group->block = group->cleanups = NULL_TREE;
-   current_stmt_group = group;
- }
- 
- /* Add GNU_STMT to the current statement group.  If it is an expression with
-    no effects, it is ignored.  */
- 
- void
- add_stmt (tree gnu_stmt)
- {
-   append_to_statement_list (gnu_stmt, &current_stmt_group->stmt_list);
- }
- 
- /* Similar, but the statement is always added, regardless of side-effects.  */
- 
- void
- add_stmt_force (tree gnu_stmt)
- {
-   append_to_statement_list_force (gnu_stmt, &current_stmt_group->stmt_list);
- }
- 
- /* Like add_stmt, but set the location of GNU_STMT to that of GNAT_NODE.  */
- 
- void
- add_stmt_with_node (tree gnu_stmt, Node_Id gnat_node)
- {
-   if (Present (gnat_node))
-     set_expr_location_from_node (gnu_stmt, gnat_node);
-   add_stmt (gnu_stmt);
- }
- 
- /* Similar, but the statement is always added, regardless of side-effects.  */
- 
- void
- add_stmt_with_node_force (tree gnu_stmt, Node_Id gnat_node)
- {
-   if (Present (gnat_node))
-     set_expr_location_from_node (gnu_stmt, gnat_node);
-   add_stmt_force (gnu_stmt);
- }
- 
- /* Add a declaration statement for GNU_DECL to the current statement group.
-    Get the SLOC to be put onto the statement from GNAT_NODE.  */
- 
- void
- add_decl_expr (tree gnu_decl, Node_Id gnat_node)
- {
-   tree type = TREE_TYPE (gnu_decl);
-   tree gnu_stmt, gnu_init;
- 
-   /* If this is a variable that Gigi is to ignore, we may have been given
-      an ERROR_MARK.  So test for it.  We also might have been given a
-      reference for a renaming.  So only do something for a decl.  Also
-      ignore a TYPE_DECL for an UNCONSTRAINED_ARRAY_TYPE.  */
-   if (!DECL_P (gnu_decl)
-       || (TREE_CODE (gnu_decl) == TYPE_DECL
- 	  && TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE))
-     return;
- 
-   gnu_stmt = build1 (DECL_EXPR, void_type_node, gnu_decl);
- 
-   /* If we are external or global, we don't want to output the DECL_EXPR for
-      this DECL node since we already have evaluated the expressions in the
-      sizes and positions as globals and doing it again would be wrong.  */
-   if (DECL_EXTERNAL (gnu_decl) || global_bindings_p ())
-     {
-       /* Mark everything as used to prevent node sharing with subprograms.
- 	 Note that walk_tree knows how to deal with TYPE_DECL, but neither
- 	 VAR_DECL nor CONST_DECL.  This appears to be somewhat arbitrary.  */
-       MARK_VISITED (gnu_stmt);
-       if (TREE_CODE (gnu_decl) == VAR_DECL
- 	  || TREE_CODE (gnu_decl) == CONST_DECL)
- 	{
- 	  MARK_VISITED (DECL_SIZE (gnu_decl));
- 	  MARK_VISITED (DECL_SIZE_UNIT (gnu_decl));
- 	  MARK_VISITED (DECL_INITIAL (gnu_decl));
- 	}
-     }
-   else
-     add_stmt_with_node (gnu_stmt, gnat_node);
- 
-   /* Mark our TYPE_ADA_SIZE field now since it will not be gimplified.  */
-   if (TREE_CODE (gnu_decl) == TYPE_DECL
-       && RECORD_OR_UNION_TYPE_P (type)
-       && !TYPE_FAT_POINTER_P (type))
-     MARK_VISITED (TYPE_ADA_SIZE (type));
- 
-   /* If this is a variable and an initializer is attached to it, it must be
-      valid for the context.  Similar to init_const in create_var_decl.  */
-   if (TREE_CODE (gnu_decl) == VAR_DECL
-       && (gnu_init = DECL_INITIAL (gnu_decl))
-       && (!gnat_types_compatible_p (type, TREE_TYPE (gnu_init))
- 	  || (TREE_STATIC (gnu_decl)
- 	      && !initializer_constant_valid_p (gnu_init,
- 						TREE_TYPE (gnu_init)))))
-     {
-       DECL_INITIAL (gnu_decl) = NULL_TREE;
-       if (TREE_READONLY (gnu_decl))
- 	{
- 	  TREE_READONLY (gnu_decl) = 0;
- 	  DECL_READONLY_ONCE_ELAB (gnu_decl) = 1;
- 	}
- 
-       /* Remove any padding so the assignment is done properly.  */
-       gnu_decl = maybe_padded_object (gnu_decl);
- 
-       gnu_stmt = build_binary_op (INIT_EXPR, NULL_TREE, gnu_decl, gnu_init);
-       add_stmt_with_node (gnu_stmt, gnat_node);
-     }
- }
- 
- /* Callback for walk_tree to mark the visited trees rooted at *TP.  */
- 
- static tree
- mark_visited_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
- {
-   tree t = *tp;
- 
-   if (TREE_VISITED (t))
-     *walk_subtrees = 0;
- 
-   /* Don't mark a dummy type as visited because we want to mark its sizes
-      and fields once it's filled in.  */
-   else if (!TYPE_IS_DUMMY_P (t))
-     TREE_VISITED (t) = 1;
- 
-   /* The test in gimplify_type_sizes is on the main variant.  */
-   if (TYPE_P (t))
-     TYPE_SIZES_GIMPLIFIED (TYPE_MAIN_VARIANT (t)) = 1;
- 
-   return NULL_TREE;
- }
- 
- /* Mark nodes rooted at T with TREE_VISITED and types as having their
-    sized gimplified.  We use this to indicate all variable sizes and
-    positions in global types may not be shared by any subprogram.  */
- 
- void
- mark_visited (tree t)
- {
-   walk_tree (&t, mark_visited_r, NULL, NULL);
- }
- 
- /* Add GNU_CLEANUP, a cleanup action, to the current code group and
-    set its location to that of GNAT_NODE if present, but with column info
-    cleared so that conditional branches generated as part of the cleanup
-    code do not interfere with coverage analysis tools.  */
- 
- static void
- add_cleanup (tree gnu_cleanup, Node_Id gnat_node)
- {
-   if (Present (gnat_node))
-     set_expr_location_from_node (gnu_cleanup, gnat_node, true);
- 
-   /* An EH_ELSE_EXPR must be by itself, and that's all we need when we
-      use it.  The assert below makes sure that is so.  Should we ever
-      need more than that, we could combine EH_ELSE_EXPRs, and copy
-      non-EH_ELSE_EXPR stmts into both cleanup paths of an
-      EH_ELSE_EXPR.  */
-   if (TREE_CODE (gnu_cleanup) == EH_ELSE_EXPR)
-     {
-       gcc_assert (!current_stmt_group->cleanups);
-       current_stmt_group->cleanups = gnu_cleanup;
-     }
-   else
-     {
-       gcc_assert (!current_stmt_group->cleanups
- 		  || (TREE_CODE (current_stmt_group->cleanups)
- 		      != EH_ELSE_EXPR));
-       append_to_statement_list (gnu_cleanup, &current_stmt_group->cleanups);
-     }
- }
- 
- /* Set the BLOCK node corresponding to the current code group to GNU_BLOCK.  */
- 
- void
- set_block_for_group (tree gnu_block)
- {
-   gcc_assert (!current_stmt_group->block);
-   current_stmt_group->block = gnu_block;
- }
- 
- /* Return code corresponding to the current code group.  It is normally
-    a STATEMENT_LIST, but may also be a BIND_EXPR or TRY_FINALLY_EXPR if
-    BLOCK or cleanups were set.  */
- 
- tree
- end_stmt_group (void)
- {
-   struct stmt_group *group = current_stmt_group;
-   tree gnu_retval = group->stmt_list;
- 
-   /* If this is a null list, allocate a new STATEMENT_LIST.  Then, if there
-      are cleanups, make a TRY_FINALLY_EXPR.  Last, if there is a BLOCK,
-      make a BIND_EXPR.  Note that we nest in that because the cleanup may
-      reference variables in the block.  */
-   if (!gnu_retval)
-     gnu_retval = alloc_stmt_list ();
- 
-   if (group->cleanups)
-     gnu_retval = build2 (TRY_FINALLY_EXPR, void_type_node, gnu_retval,
- 			 group->cleanups);
- 
-   if (current_stmt_group->block)
-     gnu_retval = build3 (BIND_EXPR, void_type_node, BLOCK_VARS (group->block),
- 			 gnu_retval, group->block);
- 
-   /* Remove this group from the stack and add it to the free list.  */
-   current_stmt_group = group->previous;
-   group->previous = stmt_group_free_list;
-   stmt_group_free_list = group;
- 
-   return gnu_retval;
- }
- 
- /* Return whether the current statement group may fall through.  */
- 
- static inline bool
- stmt_group_may_fallthru (void)
- {
-   if (current_stmt_group->stmt_list)
-     return block_may_fallthru (current_stmt_group->stmt_list);
-   else
-     return true;
- }
- 
- /* Add a list of statements from GNAT_LIST, a possibly-empty list of
-    statements.*/
- 
- static void
- add_stmt_list (List_Id gnat_list)
- {
-   Node_Id gnat_node;
- 
-   if (Present (gnat_list))
-     for (gnat_node = First (gnat_list); Present (gnat_node);
- 	 gnat_node = Next (gnat_node))
-       add_stmt (gnat_to_gnu (gnat_node));
- }
- 
- /* Build a tree from GNAT_LIST, a possibly-empty list of statements.
-    If BINDING_P is true, push and pop a binding level around the list.  */
- 
- static tree
- build_stmt_group (List_Id gnat_list, bool binding_p)
- {
-   start_stmt_group ();
- 
-   if (binding_p)
-     gnat_pushlevel ();
- 
-   add_stmt_list (gnat_list);
- 
-   if (binding_p)
-     gnat_poplevel ();
- 
-   return end_stmt_group ();
- }
- 
- /* Generate GIMPLE in place for the expression at *EXPR_P.  */
- 
- int
- gnat_gimplify_expr (tree *expr_p, gimple_seq *pre_p,
- 		    gimple_seq *post_p ATTRIBUTE_UNUSED)
- {
-   tree expr = *expr_p;
-   tree type = TREE_TYPE (expr);
-   tree op;
- 
-   if (IS_ADA_STMT (expr))
-     return gnat_gimplify_stmt (expr_p);
- 
-   switch (TREE_CODE (expr))
-     {
-     case NULL_EXPR:
-       /* If this is an aggregate type, build a null pointer of the appropriate
- 	 type and dereference it.  */
-       if (AGGREGATE_TYPE_P (type)
- 	  || TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE)
- 	*expr_p = build_unary_op (INDIRECT_REF, NULL_TREE,
- 				  convert (build_pointer_type (type),
- 					   integer_zero_node));
-       /* Otherwise, just make a VAR_DECL.  */
-       else
- 	{
- 	  *expr_p = create_tmp_var (type, NULL);
- 	  TREE_NO_WARNING (*expr_p) = 1;
- 	}
- 
-       gimplify_and_add (TREE_OPERAND (expr, 0), pre_p);
-       return GS_OK;
- 
-     case UNCONSTRAINED_ARRAY_REF:
-       /* We should only do this if we are just elaborating for side-effects,
- 	 but we can't know that yet.  */
-       *expr_p = TREE_OPERAND (*expr_p, 0);
-       return GS_OK;
- 
-     case ADDR_EXPR:
-       op = TREE_OPERAND (expr, 0);
- 
-       /* If we are taking the address of a constant CONSTRUCTOR, make sure it
- 	 is put into static memory.  We know that it's going to be read-only
- 	 given the semantics we have and it must be in static memory when the
- 	 reference is in an elaboration procedure.  */
-       if (TREE_CODE (op) == CONSTRUCTOR && TREE_CONSTANT (op))
- 	{
- 	  tree addr = build_fold_addr_expr (tree_output_constant_def (op));
- 	  *expr_p = fold_convert (type, addr);
- 	  return GS_ALL_DONE;
- 	}
- 
-       /* Replace atomic loads with their first argument.  That's necessary
- 	 because the gimplifier would create a temporary otherwise.  */
-       if (TREE_SIDE_EFFECTS (op))
- 	while (handled_component_p (op) || CONVERT_EXPR_P (op))
- 	  {
- 	    tree inner = TREE_OPERAND (op, 0);
- 	    if (TREE_CODE (inner) == CALL_EXPR && call_is_atomic_load (inner))
- 	      {
- 		tree t = CALL_EXPR_ARG (inner, 0);
- 		if (TREE_CODE (t) == NOP_EXPR)
- 		  t = TREE_OPERAND (t, 0);
- 		if (TREE_CODE (t) == ADDR_EXPR)
- 		  TREE_OPERAND (op, 0) = TREE_OPERAND (t, 0);
- 		else
- 		  TREE_OPERAND (op, 0) = build_fold_indirect_ref (t);
- 	      }
- 	    else
- 	      op = inner;
- 	  }
- 
-       return GS_UNHANDLED;
- 
-     case VIEW_CONVERT_EXPR:
-       op = TREE_OPERAND (expr, 0);
- 
-       /* If we are view-converting a CONSTRUCTOR or a call from an aggregate
- 	 type to a scalar one, explicitly create the local temporary.  That's
- 	 required if the type is passed by reference.  */
-       if ((TREE_CODE (op) == CONSTRUCTOR || TREE_CODE (op) == CALL_EXPR)
- 	  && AGGREGATE_TYPE_P (TREE_TYPE (op))
- 	  && !AGGREGATE_TYPE_P (type))
- 	{
- 	  tree mod, new_var = create_tmp_var_raw (TREE_TYPE (op), "C");
- 	  gimple_add_tmp_var (new_var);
- 
- 	  mod = build2 (INIT_EXPR, TREE_TYPE (new_var), new_var, op);
- 	  gimplify_and_add (mod, pre_p);
- 
- 	  TREE_OPERAND (expr, 0) = new_var;
- 	  return GS_OK;
- 	}
- 
-       return GS_UNHANDLED;
- 
-     case DECL_EXPR:
-       op = DECL_EXPR_DECL (expr);
- 
-       /* The expressions for the RM bounds must be gimplified to ensure that
- 	 they are properly elaborated.  See gimplify_decl_expr.  */
-       if ((TREE_CODE (op) == TYPE_DECL || TREE_CODE (op) == VAR_DECL)
- 	  && !TYPE_SIZES_GIMPLIFIED (TREE_TYPE (op)))
- 	switch (TREE_CODE (TREE_TYPE (op)))
- 	  {
- 	  case INTEGER_TYPE:
- 	  case ENUMERAL_TYPE:
- 	  case BOOLEAN_TYPE:
- 	  case REAL_TYPE:
- 	    {
- 	      tree type = TYPE_MAIN_VARIANT (TREE_TYPE (op)), t, val;
- 
- 	      val = TYPE_RM_MIN_VALUE (type);
- 	      if (val)
- 		{
- 		  gimplify_one_sizepos (&val, pre_p);
- 		  for (t = type; t; t = TYPE_NEXT_VARIANT (t))
- 		    SET_TYPE_RM_MIN_VALUE (t, val);
- 		}
- 
- 	      val = TYPE_RM_MAX_VALUE (type);
- 	      if (val)
- 		{
- 		  gimplify_one_sizepos (&val, pre_p);
- 		  for (t = type; t; t = TYPE_NEXT_VARIANT (t))
- 		    SET_TYPE_RM_MAX_VALUE (t, val);
- 		}
- 
- 	    }
- 	    break;
- 
- 	  default:
- 	    break;
- 	  }
- 
-       /* ... fall through ... */
- 
-     default:
-       return GS_UNHANDLED;
-     }
- }
- 
- /* Generate GIMPLE in place for the statement at *STMT_P.  */
- 
- static enum gimplify_status
- gnat_gimplify_stmt (tree *stmt_p)
- {
-   tree stmt = *stmt_p;
- 
-   switch (TREE_CODE (stmt))
-     {
-     case STMT_STMT:
-       *stmt_p = STMT_STMT_STMT (stmt);
-       return GS_OK;
- 
-     case LOOP_STMT:
-       {
- 	tree gnu_start_label = create_artificial_label (input_location);
- 	tree gnu_cond = LOOP_STMT_COND (stmt);
- 	tree gnu_update = LOOP_STMT_UPDATE (stmt);
- 	tree gnu_end_label = LOOP_STMT_LABEL (stmt);
- 
- 	/* Build the condition expression from the test, if any.  */
- 	if (gnu_cond)
- 	  {
- 	    /* Deal with the optimization hints.  */
- 	    if (LOOP_STMT_IVDEP (stmt))
- 	      gnu_cond = build3 (ANNOTATE_EXPR, TREE_TYPE (gnu_cond), gnu_cond,
- 				 build_int_cst (integer_type_node,
- 						annot_expr_ivdep_kind),
- 				 integer_zero_node);
- 	    if (LOOP_STMT_NO_UNROLL (stmt))
- 	      gnu_cond = build3 (ANNOTATE_EXPR, TREE_TYPE (gnu_cond), gnu_cond,
- 				 build_int_cst (integer_type_node,
- 						annot_expr_unroll_kind),
- 				 integer_one_node);
- 	    if (LOOP_STMT_UNROLL (stmt))
- 	      gnu_cond = build3 (ANNOTATE_EXPR, TREE_TYPE (gnu_cond), gnu_cond,
- 				 build_int_cst (integer_type_node,
- 						annot_expr_unroll_kind),
- 				 build_int_cst (NULL_TREE, USHRT_MAX));
- 	    if (LOOP_STMT_NO_VECTOR (stmt))
- 	      gnu_cond = build3 (ANNOTATE_EXPR, TREE_TYPE (gnu_cond), gnu_cond,
- 				 build_int_cst (integer_type_node,
- 						annot_expr_no_vector_kind),
- 				 integer_zero_node);
- 	    if (LOOP_STMT_VECTOR (stmt))
- 	      gnu_cond = build3 (ANNOTATE_EXPR, TREE_TYPE (gnu_cond), gnu_cond,
- 				 build_int_cst (integer_type_node,
- 						annot_expr_vector_kind),
- 				 integer_zero_node);
- 
- 	    gnu_cond
- 	      = build3 (COND_EXPR, void_type_node, gnu_cond, NULL_TREE,
- 			build1 (GOTO_EXPR, void_type_node, gnu_end_label));
- 	  }
- 
- 	/* Set to emit the statements of the loop.  */
- 	*stmt_p = NULL_TREE;
- 
- 	/* We first emit the start label and then a conditional jump to the
- 	   end label if there's a top condition, then the update if it's at
- 	   the top, then the body of the loop, then a conditional jump to
- 	   the end label if there's a bottom condition, then the update if
- 	   it's at the bottom, and finally a jump to the start label and the
- 	   definition of the end label.  */
- 	append_to_statement_list (build1 (LABEL_EXPR, void_type_node,
- 					  gnu_start_label),
- 				  stmt_p);
- 
-         if (gnu_cond && !LOOP_STMT_BOTTOM_COND_P (stmt))
- 	  append_to_statement_list (gnu_cond, stmt_p);
- 
-         if (gnu_update && LOOP_STMT_TOP_UPDATE_P (stmt))
- 	  append_to_statement_list (gnu_update, stmt_p);
- 
- 	append_to_statement_list (LOOP_STMT_BODY (stmt), stmt_p);
- 
-         if (gnu_cond && LOOP_STMT_BOTTOM_COND_P (stmt))
- 	  append_to_statement_list (gnu_cond, stmt_p);
- 
-         if (gnu_update && !LOOP_STMT_TOP_UPDATE_P (stmt))
- 	  append_to_statement_list (gnu_update, stmt_p);
- 
- 	tree t = build1 (GOTO_EXPR, void_type_node, gnu_start_label);
- 	SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (gnu_end_label));
- 	append_to_statement_list (t, stmt_p);
- 
- 	append_to_statement_list (build1 (LABEL_EXPR, void_type_node,
- 					  gnu_end_label),
- 				  stmt_p);
- 	return GS_OK;
-       }
- 
-     case EXIT_STMT:
-       /* Build a statement to jump to the corresponding end label, then
- 	 see if it needs to be conditional.  */
-       *stmt_p = build1 (GOTO_EXPR, void_type_node, EXIT_STMT_LABEL (stmt));
-       if (EXIT_STMT_COND (stmt))
- 	*stmt_p = build3 (COND_EXPR, void_type_node,
- 			  EXIT_STMT_COND (stmt), *stmt_p, alloc_stmt_list ());
-       return GS_OK;
- 
-     default:
-       gcc_unreachable ();
-     }
- }
- 
- /* Force a reference to each of the entities in GNAT_PACKAGE recursively.
- 
-    This routine is exclusively called in type_annotate mode, to compute DDA
-    information for types in withed units, for ASIS use.  */
- 
- static void
- elaborate_all_entities_for_package (Entity_Id gnat_package)
- {
-   Entity_Id gnat_entity;
- 
-   for (gnat_entity = First_Entity (gnat_package);
-        Present (gnat_entity);
-        gnat_entity = Next_Entity (gnat_entity))
-     {
-       const Entity_Kind kind = Ekind (gnat_entity);
- 
-       /* We are interested only in entities visible from the main unit.  */
-       if (!Is_Public (gnat_entity))
- 	continue;
- 
-       /* Skip stuff internal to the compiler.  */
-       if (Convention (gnat_entity) == Convention_Intrinsic)
- 	continue;
-       if (kind == E_Operator)
- 	continue;
-       if (IN (kind, Subprogram_Kind)
- 	  && (Present (Alias (gnat_entity))
- 	      || Is_Intrinsic_Subprogram (gnat_entity)))
- 	continue;
-       if (Is_Itype (gnat_entity))
- 	continue;
- 
-       /* Skip named numbers.  */
-       if (IN (kind, Named_Kind))
- 	continue;
- 
-       /* Skip generic declarations.  */
-       if (IN (kind, Generic_Unit_Kind))
- 	continue;
- 
-       /* Skip formal objects.  */
-       if (IN (kind, Formal_Object_Kind))
- 	continue;
- 
-       /* Skip package bodies.  */
-       if (kind == E_Package_Body)
- 	continue;
- 
-       /* Skip limited views that point back to the main unit.  */
-       if (IN (kind, Incomplete_Kind)
- 	  && From_Limited_With (gnat_entity)
- 	  && In_Extended_Main_Code_Unit (Non_Limited_View (gnat_entity)))
- 	continue;
- 
-       /* Skip types that aren't frozen.  */
-       if (IN (kind, Type_Kind) && !Is_Frozen (gnat_entity))
- 	continue;
- 
-       /* Recurse on real packages that aren't in the main unit.  */
-       if (kind == E_Package)
- 	{
- 	  if (No (Renamed_Entity (gnat_entity))
- 	      && !In_Extended_Main_Code_Unit (gnat_entity))
- 	    elaborate_all_entities_for_package (gnat_entity);
- 	}
-       else
- 	gnat_to_gnu_entity (gnat_entity, NULL_TREE, false);
-     }
- }
- 
- /* Force a reference to each of the entities in packages withed by GNAT_NODE.
-    Operate recursively but check that we aren't elaborating something more
-    than once.
- 
-    This routine is exclusively called in type_annotate mode, to compute DDA
-    information for types in withed units, for ASIS use.  */
- 
- static void
- elaborate_all_entities (Node_Id gnat_node)
- {
-   Entity_Id gnat_with_clause;
- 
-   /* Process each unit only once.  As we trace the context of all relevant
-      units transitively, including generic bodies, we may encounter the
-      same generic unit repeatedly.  */
-   if (!present_gnu_tree (gnat_node))
-      save_gnu_tree (gnat_node, integer_zero_node, true);
- 
-   /* Save entities in all context units.  A body may have an implicit_with
-      on its own spec, if the context includes a child unit, so don't save
-      the spec twice.  */
-   for (gnat_with_clause = First (Context_Items (gnat_node));
-        Present (gnat_with_clause);
-        gnat_with_clause = Next (gnat_with_clause))
-     if (Nkind (gnat_with_clause) == N_With_Clause
- 	&& !present_gnu_tree (Library_Unit (gnat_with_clause))
- 	&& Library_Unit (gnat_with_clause) != Library_Unit (Cunit (Main_Unit)))
-       {
- 	Node_Id gnat_unit = Library_Unit (gnat_with_clause);
- 	Entity_Id gnat_entity = Entity (Name (gnat_with_clause));
- 
- 	elaborate_all_entities (gnat_unit);
- 
- 	if (Ekind (gnat_entity) == E_Package
- 	    && No (Renamed_Entity (gnat_entity)))
- 	  elaborate_all_entities_for_package (gnat_entity);
- 
- 	else if (Ekind (gnat_entity) == E_Generic_Package)
- 	  {
- 	    Node_Id gnat_body = Corresponding_Body (Unit (gnat_unit));
- 
- 	    /* Retrieve compilation unit node of generic body.  */
- 	    while (Present (gnat_body)
- 		   && Nkind (gnat_body) != N_Compilation_Unit)
- 	      gnat_body = Parent (gnat_body);
- 
- 	    /* If body is available, elaborate its context.  */
- 	    if (Present (gnat_body))
- 	      elaborate_all_entities (gnat_body);
- 	  }
-       }
- 
-   if (Nkind (Unit (gnat_node)) == N_Package_Body)
-     elaborate_all_entities (Library_Unit (gnat_node));
- }
- 
- /* Do the processing of GNAT_NODE, an N_Freeze_Entity.  */
- 
- static void
- process_freeze_entity (Node_Id gnat_node)
- {
-   const Entity_Id gnat_entity = Entity (gnat_node);
-   const Entity_Kind kind = Ekind (gnat_entity);
-   tree gnu_old, gnu_new;
- 
-   /* If this is a package, generate code for the package body, if any.  */
-   if (kind == E_Package)
-     {
-       const Node_Id gnat_decl = Parent (Declaration_Node (gnat_entity));
-       if (Present (Corresponding_Body (gnat_decl)))
- 	insert_code_for (Parent (Corresponding_Body (gnat_decl)));
-       return;
-     }
- 
-   /* Don't do anything for class-wide types as they are always transformed
-      into their root type.  */
-   if (kind == E_Class_Wide_Type)
-     return;
- 
-   /* Check for an old definition if this isn't an object with address clause,
-      since the saved GCC tree is the address expression in that case.  */
-   gnu_old
-     = present_gnu_tree (gnat_entity) && No (Address_Clause (gnat_entity))
-       ? get_gnu_tree (gnat_entity) : NULL_TREE;
- 
-   /* Don't do anything for subprograms that may have been elaborated before
-      their freeze nodes.  This can happen, for example, because of an inner
-      call in an instance body or because of previous compilation of a spec
-      for inlining purposes.  */
-   if (gnu_old
-       && ((TREE_CODE (gnu_old) == FUNCTION_DECL
- 	   && (kind == E_Function || kind == E_Procedure))
- 	  || (FUNC_OR_METHOD_TYPE_P (TREE_TYPE (gnu_old))
- 	      && kind == E_Subprogram_Type)))
-     return;
- 
-   /* If we have a non-dummy type old tree, we have nothing to do, except for
-      aborting, since this node was never delayed as it should have been.  We
-      let this happen for concurrent types and their Corresponding_Record_Type,
-      however, because each might legitimately be elaborated before its own
-      freeze node, e.g. while processing the other.  */
-   if (gnu_old
-       && !(TREE_CODE (gnu_old) == TYPE_DECL
- 	   && TYPE_IS_DUMMY_P (TREE_TYPE (gnu_old))))
-     {
-       gcc_assert (Is_Concurrent_Type (gnat_entity)
- 		  || (Is_Record_Type (gnat_entity)
- 		      && Is_Concurrent_Record_Type (gnat_entity)));
-       return;
-     }
- 
-   /* Reset the saved tree, if any, and elaborate the object or type for real.
-      If there is a full view, elaborate it and use the result.  And, if this
-      is the root type of a class-wide type, reuse it for the latter.  */
-   if (gnu_old)
-     {
-       save_gnu_tree (gnat_entity, NULL_TREE, false);
- 
-       if (Is_Incomplete_Or_Private_Type (gnat_entity)
- 	  && Present (Full_View (gnat_entity)))
- 	{
- 	  Entity_Id full_view = Full_View (gnat_entity);
- 
- 	  save_gnu_tree (full_view, NULL_TREE, false);
- 
-           if (Is_Private_Type (full_view)
- 	      && Present (Underlying_Full_View (full_view)))
- 	    {
- 	      full_view = Underlying_Full_View (full_view);
- 	      save_gnu_tree (full_view, NULL_TREE, false);
- 	    }
- 	}
- 
-       if (Is_Type (gnat_entity)
- 	  && Present (Class_Wide_Type (gnat_entity))
- 	  && Root_Type (Class_Wide_Type (gnat_entity)) == gnat_entity)
- 	save_gnu_tree (Class_Wide_Type (gnat_entity), NULL_TREE, false);
-     }
- 
-   if (Is_Incomplete_Or_Private_Type (gnat_entity)
-       && Present (Full_View (gnat_entity)))
-     {
-       Entity_Id full_view = Full_View (gnat_entity);
- 
-       if (Is_Private_Type (full_view)
- 	  && Present (Underlying_Full_View (full_view)))
- 	full_view = Underlying_Full_View (full_view);
- 
-       gnu_new = gnat_to_gnu_entity (full_view, NULL_TREE, true);
- 
-       /* Propagate back-annotations from full view to partial view.  */
-       if (Unknown_Alignment (gnat_entity))
- 	Set_Alignment (gnat_entity, Alignment (full_view));
- 
-       if (Unknown_Esize (gnat_entity))
- 	Set_Esize (gnat_entity, Esize (full_view));
- 
-       if (Unknown_RM_Size (gnat_entity))
- 	Set_RM_Size (gnat_entity, RM_Size (full_view));
- 
-       /* The above call may have defined this entity (the simplest example
- 	 of this is when we have a private enumeral type since the bounds
- 	 will have the public view).  */
-       if (!present_gnu_tree (gnat_entity))
- 	save_gnu_tree (gnat_entity, gnu_new, false);
-     }
-   else
-     {
-       tree gnu_init
- 	= (Nkind (Declaration_Node (gnat_entity)) == N_Object_Declaration
- 	   && present_gnu_tree (Declaration_Node (gnat_entity)))
- 	  ? get_gnu_tree (Declaration_Node (gnat_entity)) : NULL_TREE;
- 
-       gnu_new = gnat_to_gnu_entity (gnat_entity, gnu_init, true);
-     }
- 
-   if (Is_Type (gnat_entity)
-       && Present (Class_Wide_Type (gnat_entity))
-       && Root_Type (Class_Wide_Type (gnat_entity)) == gnat_entity)
-     save_gnu_tree (Class_Wide_Type (gnat_entity), gnu_new, false);
- 
-   /* If we have an old type and we've made pointers to this type, update those
-      pointers.  If this is a Taft amendment type in the main unit, we need to
-      mark the type as used since other units referencing it don't see the full
-      declaration and, therefore, cannot mark it as used themselves.  */
-   if (gnu_old)
-     {
-       update_pointer_to (TYPE_MAIN_VARIANT (TREE_TYPE (gnu_old)),
- 			 TREE_TYPE (gnu_new));
-       if (TYPE_DUMMY_IN_PROFILE_P (TREE_TYPE (gnu_old)))
- 	update_profiles_with (TREE_TYPE (gnu_old));
-       if (DECL_TAFT_TYPE_P (gnu_old))
- 	used_types_insert (TREE_TYPE (gnu_new));
-     }
- }
- 
- /* Elaborate decls in the lists GNAT_DECLS and GNAT_DECLS2, if present.
-    We make two passes, one to elaborate anything other than bodies (but
-    we declare a function if there was no spec).  The second pass
-    elaborates the bodies.
- 
-    GNAT_END_LIST gives the element in the list past the end.  Normally,
-    this is Empty, but can be First_Real_Statement for a
-    Handled_Sequence_Of_Statements.
- 
-    We make a complete pass through both lists if PASS1P is true, then make
-    the second pass over both lists if PASS2P is true.  The lists usually
-    correspond to the public and private parts of a package.  */
- 
- static void
- process_decls (List_Id gnat_decls, List_Id gnat_decls2,
- 	       Node_Id gnat_end_list, bool pass1p, bool pass2p)
- {
-   List_Id gnat_decl_array[2];
-   Node_Id gnat_decl;
-   int i;
- 
-   gnat_decl_array[0] = gnat_decls, gnat_decl_array[1] = gnat_decls2;
- 
-   if (pass1p)
-     for (i = 0; i <= 1; i++)
-       if (Present (gnat_decl_array[i]))
- 	for (gnat_decl = First (gnat_decl_array[i]);
- 	     gnat_decl != gnat_end_list; gnat_decl = Next (gnat_decl))
- 	  {
- 	    /* For package specs, we recurse inside the declarations,
- 	       thus taking the two pass approach inside the boundary.  */
- 	    if (Nkind (gnat_decl) == N_Package_Declaration
- 		&& (Nkind (Specification (gnat_decl)
- 			   == N_Package_Specification)))
- 	      process_decls (Visible_Declarations (Specification (gnat_decl)),
- 			     Private_Declarations (Specification (gnat_decl)),
- 			     Empty, true, false);
- 
- 	    /* Similarly for any declarations in the actions of a
- 	       freeze node.  */
- 	    else if (Nkind (gnat_decl) == N_Freeze_Entity)
- 	      {
- 		process_freeze_entity (gnat_decl);
- 		process_decls (Actions (gnat_decl), Empty, Empty, true, false);
- 	      }
- 
- 	    /* Package bodies with freeze nodes get their elaboration deferred
- 	       until the freeze node, but the code must be placed in the right
- 	       place, so record the code position now.  */
- 	    else if (Nkind (gnat_decl) == N_Package_Body
- 		     && Present (Freeze_Node (Corresponding_Spec (gnat_decl))))
- 	      record_code_position (gnat_decl);
- 
- 	    else if (Nkind (gnat_decl) == N_Package_Body_Stub
- 		     && Present (Library_Unit (gnat_decl))
- 		     && Present (Freeze_Node
- 				 (Corresponding_Spec
- 				  (Proper_Body (Unit
- 						(Library_Unit (gnat_decl)))))))
- 	      record_code_position
- 		(Proper_Body (Unit (Library_Unit (gnat_decl))));
- 
- 	    /* We defer most subprogram bodies to the second pass.  */
- 	    else if (Nkind (gnat_decl) == N_Subprogram_Body)
- 	      {
- 		if (Acts_As_Spec (gnat_decl))
- 		  {
- 		    Node_Id gnat_subprog_id = Defining_Entity (gnat_decl);
- 
- 		    if (Ekind (gnat_subprog_id) != E_Generic_Procedure
- 			&& Ekind (gnat_subprog_id) != E_Generic_Function)
- 		      gnat_to_gnu_entity (gnat_subprog_id, NULL_TREE, true);
- 		  }
- 	      }
- 
- 	    /* For bodies and stubs that act as their own specs, the entity
- 	       itself must be elaborated in the first pass, because it may
- 	       be used in other declarations.  */
- 	    else if (Nkind (gnat_decl) == N_Subprogram_Body_Stub)
- 	      {
- 		Node_Id gnat_subprog_id
- 		  = Defining_Entity (Specification (gnat_decl));
- 
- 		    if (Ekind (gnat_subprog_id) != E_Subprogram_Body
- 			&& Ekind (gnat_subprog_id) != E_Generic_Procedure
- 			&& Ekind (gnat_subprog_id) != E_Generic_Function)
- 		      gnat_to_gnu_entity (gnat_subprog_id, NULL_TREE, true);
- 	      }
- 
- 	    /* Concurrent stubs stand for the corresponding subprogram bodies,
- 	       which are deferred like other bodies.  */
- 	    else if (Nkind (gnat_decl) == N_Task_Body_Stub
- 		     || Nkind (gnat_decl) == N_Protected_Body_Stub)
- 	      ;
- 
- 	    /* Renamed subprograms may not be elaborated yet at this point
- 	       since renamings do not trigger freezing.  Wait for the second
- 	       pass to take care of them.  */
- 	    else if (Nkind (gnat_decl) == N_Subprogram_Renaming_Declaration)
- 	      ;
- 
- 	    else
- 	      add_stmt (gnat_to_gnu (gnat_decl));
- 	  }
- 
-   /* Here we elaborate everything we deferred above except for package bodies,
-      which are elaborated at their freeze nodes.  Note that we must also
-      go inside things (package specs and freeze nodes) the first pass did.  */
-   if (pass2p)
-     for (i = 0; i <= 1; i++)
-       if (Present (gnat_decl_array[i]))
- 	for (gnat_decl = First (gnat_decl_array[i]);
- 	     gnat_decl != gnat_end_list; gnat_decl = Next (gnat_decl))
- 	  {
- 	    if (Nkind (gnat_decl) == N_Subprogram_Body
- 		|| Nkind (gnat_decl) == N_Subprogram_Body_Stub
- 		|| Nkind (gnat_decl) == N_Task_Body_Stub
- 		|| Nkind (gnat_decl) == N_Protected_Body_Stub)
- 	      add_stmt (gnat_to_gnu (gnat_decl));
- 
- 	    else if (Nkind (gnat_decl) == N_Package_Declaration
- 		     && (Nkind (Specification (gnat_decl)
- 				== N_Package_Specification)))
- 	      process_decls (Visible_Declarations (Specification (gnat_decl)),
- 			     Private_Declarations (Specification (gnat_decl)),
- 			     Empty, false, true);
- 
- 	    else if (Nkind (gnat_decl) == N_Freeze_Entity)
- 	      process_decls (Actions (gnat_decl), Empty, Empty, false, true);
- 
- 	    else if (Nkind (gnat_decl) == N_Subprogram_Renaming_Declaration)
- 	      add_stmt (gnat_to_gnu (gnat_decl));
- 	  }
- }
- 
- /* Make a unary operation of kind CODE using build_unary_op, but guard
-    the operation by an overflow check.  CODE can be one of NEGATE_EXPR
-    or ABS_EXPR.  GNU_TYPE is the type desired for the result.  Usually
-    the operation is to be performed in that type.  GNAT_NODE is the gnat
-    node conveying the source location for which the error should be
-    signaled.  */
- 
- static tree
- build_unary_op_trapv (enum tree_code code, tree gnu_type, tree operand,
- 		      Node_Id gnat_node)
- {
-   gcc_assert (code == NEGATE_EXPR || code == ABS_EXPR);
- 
-   operand = gnat_protect_expr (operand);
- 
-   return emit_check (build_binary_op (EQ_EXPR, boolean_type_node,
- 				      operand, TYPE_MIN_VALUE (gnu_type)),
- 		     build_unary_op (code, gnu_type, operand),
- 		     CE_Overflow_Check_Failed, gnat_node);
- }
- 
- /* Make a binary operation of kind CODE using build_binary_op, but guard
-    the operation by an overflow check.  CODE can be one of PLUS_EXPR,
-    MINUS_EXPR or MULT_EXPR.  GNU_TYPE is the type desired for the result.
-    Usually the operation is to be performed in that type.  GNAT_NODE is
-    the GNAT node conveying the source location for which the error should
-    be signaled.  */
- 
- static tree
- build_binary_op_trapv (enum tree_code code, tree gnu_type, tree left,
- 		       tree right, Node_Id gnat_node)
- {
-   const unsigned int precision = TYPE_PRECISION (gnu_type);
-   tree lhs = gnat_protect_expr (left);
-   tree rhs = gnat_protect_expr (right);
-   tree type_max = TYPE_MAX_VALUE (gnu_type);
-   tree type_min = TYPE_MIN_VALUE (gnu_type);
-   tree gnu_expr, check;
-   int sgn;
- 
-   /* Assert that the precision is a power of 2.  */
-   gcc_assert ((precision & (precision - 1)) == 0);
- 
-   /* Prefer a constant on the RHS to simplify checks.  */
-   if (TREE_CODE (rhs) != INTEGER_CST
-       && TREE_CODE (lhs) == INTEGER_CST
-       && (code == PLUS_EXPR || code == MULT_EXPR))
-     {
-       tree tmp = lhs;
-       lhs = rhs;
-       rhs = tmp;
-     }
- 
-   gnu_expr = build_binary_op (code, gnu_type, lhs, rhs);
- 
-   /* If we can fold the expression to a constant, just return it.
-      The caller will deal with overflow, no need to generate a check.  */
-   if (TREE_CODE (gnu_expr) == INTEGER_CST)
-     return gnu_expr;
- 
-   /* If no operand is a constant, we use the generic implementation.  */
-   if (TREE_CODE (lhs) != INTEGER_CST && TREE_CODE (rhs) != INTEGER_CST)
-     {
-       /* First convert the operands to the result type like build_binary_op.
- 	 This is where the bias is made explicit for biased types.  */
-       lhs = convert (gnu_type, lhs);
-       rhs = convert (gnu_type, rhs);
- 
-       /* Never inline a 64-bit mult for a 32-bit target, it's way too long.  */
-       if (code == MULT_EXPR && precision == 64 && BITS_PER_WORD < 64)
- 	{
- 	  tree int64 = gnat_type_for_size (64, 0);
- 	  return convert (gnu_type, build_call_n_expr (mulv64_decl, 2,
- 						       convert (int64, lhs),
- 						       convert (int64, rhs)));
- 	}
- 
-       /* Likewise for a 128-bit mult and a 64-bit target.  */
-       else if (code == MULT_EXPR && precision == 128 && BITS_PER_WORD < 128)
- 	{
- 	  tree int128 = gnat_type_for_size (128, 0);
- 	  return convert (gnu_type, build_call_n_expr (mulv128_decl, 2,
- 						       convert (int128, lhs),
- 						       convert (int128, rhs)));
- 	}
- 
-       enum internal_fn icode;
- 
-       switch (code)
- 	{
- 	case PLUS_EXPR:
- 	  icode = IFN_ADD_OVERFLOW;
- 	  break;
- 	case MINUS_EXPR:
- 	  icode = IFN_SUB_OVERFLOW;
- 	  break;
- 	case MULT_EXPR:
- 	  icode = IFN_MUL_OVERFLOW;
- 	  break;
- 	default:
- 	  gcc_unreachable ();
- 	}
- 
-       tree gnu_ctype = build_complex_type (gnu_type);
-       tree call
- 	= build_call_expr_internal_loc (UNKNOWN_LOCATION, icode, gnu_ctype, 2,
- 					lhs, rhs);
-       tree tgt = save_expr (call);
-       gnu_expr = build1 (REALPART_EXPR, gnu_type, tgt);
-       check = fold_build2 (NE_EXPR, boolean_type_node,
- 			   build1 (IMAGPART_EXPR, gnu_type, tgt),
- 			   build_int_cst (gnu_type, 0));
-       return
- 	emit_check (check, gnu_expr, CE_Overflow_Check_Failed, gnat_node);
-    }
- 
-   /* If one operand is a constant, we expose the overflow condition to enable
-      a subsequent simplication or even elimination.  */
-   switch (code)
-     {
-     case PLUS_EXPR:
-       sgn = tree_int_cst_sgn (rhs);
-       if (sgn > 0)
- 	/* When rhs > 0, overflow when lhs > type_max - rhs.  */
- 	check = build_binary_op (GT_EXPR, boolean_type_node, lhs,
- 				 build_binary_op (MINUS_EXPR, gnu_type,
- 						  type_max, rhs));
-       else if (sgn < 0)
- 	/* When rhs < 0, overflow when lhs < type_min - rhs.  */
- 	check = build_binary_op (LT_EXPR, boolean_type_node, lhs,
- 				 build_binary_op (MINUS_EXPR, gnu_type,
- 						  type_min, rhs));
-       else
- 	return gnu_expr;
-       break;
- 
-     case MINUS_EXPR:
-       if (TREE_CODE (lhs) == INTEGER_CST)
- 	{
- 	  sgn = tree_int_cst_sgn (lhs);
- 	  if (sgn > 0)
- 	    /* When lhs > 0, overflow when rhs < lhs - type_max.  */
- 	    check = build_binary_op (LT_EXPR, boolean_type_node, rhs,
- 				     build_binary_op (MINUS_EXPR, gnu_type,
- 						      lhs, type_max));
- 	  else if (sgn < 0)
- 	    /* When lhs < 0, overflow when rhs > lhs - type_min.  */
- 	    check = build_binary_op (GT_EXPR, boolean_type_node, rhs,
- 				     build_binary_op (MINUS_EXPR, gnu_type,
- 						      lhs, type_min));
- 	  else
- 	    return gnu_expr;
- 	}
-       else
- 	{
- 	  sgn = tree_int_cst_sgn (rhs);
- 	  if (sgn > 0)
- 	    /* When rhs > 0, overflow when lhs < type_min + rhs.  */
- 	    check = build_binary_op (LT_EXPR, boolean_type_node, lhs,
- 				     build_binary_op (PLUS_EXPR, gnu_type,
- 						      type_min, rhs));
- 	  else if (sgn < 0)
- 	    /* When rhs < 0, overflow when lhs > type_max + rhs.  */
- 	    check = build_binary_op (GT_EXPR, boolean_type_node, lhs,
- 				     build_binary_op (PLUS_EXPR, gnu_type,
- 						      type_max, rhs));
- 	  else
- 	    return gnu_expr;
- 	}
-       break;
- 
-     case MULT_EXPR:
-       sgn = tree_int_cst_sgn (rhs);
-       if (sgn > 0)
- 	{
- 	  if (integer_onep (rhs))
- 	    return gnu_expr;
- 
- 	  tree lb = build_binary_op (TRUNC_DIV_EXPR, gnu_type, type_min, rhs);
- 	  tree ub = build_binary_op (TRUNC_DIV_EXPR, gnu_type, type_max, rhs);
- 
- 	  /* When rhs > 1, overflow outside [type_min/rhs; type_max/rhs].  */
- 	  check
- 	    = build_binary_op (TRUTH_ORIF_EXPR, boolean_type_node,
- 			       build_binary_op (LT_EXPR, boolean_type_node,
- 						lhs, lb),
- 			       build_binary_op (GT_EXPR, boolean_type_node,
- 						lhs, ub));
- 	}
-       else if (sgn < 0)
- 	{
- 	  tree lb = build_binary_op (TRUNC_DIV_EXPR, gnu_type, type_max, rhs);
- 	  tree ub = build_binary_op (TRUNC_DIV_EXPR, gnu_type, type_min, rhs);
- 
- 	  if (integer_minus_onep (rhs))
- 	    /* When rhs == -1, overflow if lhs == type_min.  */
- 	    check
- 	      = build_binary_op (EQ_EXPR, boolean_type_node, lhs, type_min);
- 	  else
- 	    /* When rhs < -1, overflow outside [type_max/rhs; type_min/rhs].  */
- 	    check
- 	      = build_binary_op (TRUTH_ORIF_EXPR, boolean_type_node,
- 				 build_binary_op (LT_EXPR, boolean_type_node,
- 						  lhs, lb),
- 				 build_binary_op (GT_EXPR, boolean_type_node,
- 						  lhs, ub));
- 	}
-       else
- 	return gnu_expr;
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   return emit_check (check, gnu_expr, CE_Overflow_Check_Failed, gnat_node);
- }
- 
- /* GNU_COND contains the condition corresponding to an index, overflow or
-    range check of value GNU_EXPR.  Build a COND_EXPR that returns GNU_EXPR
-    if GNU_COND is false and raises a CONSTRAINT_ERROR if GNU_COND is true.
-    REASON is the code that says why the exception is raised.  GNAT_NODE is
-    the node conveying the source location for which the error should be
-    signaled.
- 
-    We used to propagate TREE_SIDE_EFFECTS from GNU_EXPR to the COND_EXPR,
-    overwriting the setting inherited from the call statement, on the ground
-    that the expression need not be evaluated just for the check.  However
-    that's incorrect because, in the GCC type system, its value is presumed
-    to be valid so its comparison against the type bounds always yields true
-    and, therefore, could be done without evaluating it; given that it can
-    be a computation that overflows the bounds, the language may require the
-    check to fail and thus the expression to be evaluated in this case.  */
- 
- static tree
- emit_check (tree gnu_cond, tree gnu_expr, int reason, Node_Id gnat_node)
- {
-   tree gnu_call
-     = build_call_raise (reason, gnat_node, N_Raise_Constraint_Error);
-   return
-     fold_build3 (COND_EXPR, TREE_TYPE (gnu_expr), gnu_cond,
- 		 build2 (COMPOUND_EXPR, TREE_TYPE (gnu_expr), gnu_call,
- 			 SCALAR_FLOAT_TYPE_P (TREE_TYPE (gnu_expr))
- 			 ? build_real (TREE_TYPE (gnu_expr), dconst0)
- 			 : build_int_cst (TREE_TYPE (gnu_expr), 0)),
- 		 gnu_expr);
- }
- 
- /* Return an expression that converts GNU_EXPR to GNAT_TYPE, doing overflow
-    checks if OVERFLOW_P is true.  If TRUNCATE_P is true, do a fp-to-integer
-    conversion with truncation, otherwise round.  GNAT_NODE is the GNAT node
-    conveying the source location for which the error should be signaled.  */
- 
- static tree
- convert_with_check (Entity_Id gnat_type, tree gnu_expr, bool overflow_p,
- 		    bool truncate_p, Node_Id gnat_node)
- {
-   tree gnu_type = get_unpadded_type (gnat_type);
-   tree gnu_base_type = get_base_type (gnu_type);
-   tree gnu_in_type = TREE_TYPE (gnu_expr);
-   tree gnu_in_base_type = get_base_type (gnu_in_type);
-   tree gnu_result = gnu_expr;
- 
-   /* If we are not doing any checks, the output is an integral type and the
-      input is not a floating-point type, just do the conversion.  This is
-      required for packed array types and is simpler in all cases anyway.   */
-   if (!overflow_p
-       && INTEGRAL_TYPE_P (gnu_base_type)
-       && !FLOAT_TYPE_P (gnu_in_base_type))
-     return convert (gnu_type, gnu_expr);
- 
-   /* If the mode of the input base type is larger, then converting to it below
-      may pessimize the final conversion step, for example generate a libcall
-      instead of a simple instruction, so use a narrower type in this case.  */
-   if (TYPE_MODE (gnu_in_base_type) != TYPE_MODE (gnu_in_type)
-       && !(TREE_CODE (gnu_in_type) == INTEGER_TYPE
- 	   && TYPE_BIASED_REPRESENTATION_P (gnu_in_type)))
-     gnu_in_base_type = gnat_type_for_mode (TYPE_MODE (gnu_in_type),
- 					   TYPE_UNSIGNED (gnu_in_type));
- 
-   /* First convert the expression to the base type.  This will never generate
-      code, but makes the tests below simpler.  But don't do this if converting
-      from an integer type to an unconstrained array type since then we need to
-      get the bounds from the original (unpacked) type.  */
-   if (TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE)
-     gnu_result = convert (gnu_in_base_type, gnu_result);
- 
-   /* If overflow checks are requested,  we need to be sure the result will fit
-      in the output base type.  But don't do this if the input is integer and
-      the output floating-point.  */
-   if (overflow_p
-       && !(FLOAT_TYPE_P (gnu_base_type) && INTEGRAL_TYPE_P (gnu_in_base_type)))
-     {
-       /* Ensure GNU_EXPR only gets evaluated once.  */
-       tree gnu_input = gnat_protect_expr (gnu_result);
-       tree gnu_cond = boolean_false_node;
-       tree gnu_in_lb = TYPE_MIN_VALUE (gnu_in_base_type);
-       tree gnu_in_ub = TYPE_MAX_VALUE (gnu_in_base_type);
-       tree gnu_out_lb = TYPE_MIN_VALUE (gnu_base_type);
-       tree gnu_out_ub
- 	= (TREE_CODE (gnu_base_type) == INTEGER_TYPE
- 	   && TYPE_MODULAR_P (gnu_base_type))
- 	  ? fold_build2 (MINUS_EXPR, gnu_base_type,
- 			 TYPE_MODULUS (gnu_base_type),
- 			 build_int_cst (gnu_base_type, 1))
- 	  : TYPE_MAX_VALUE (gnu_base_type);
- 
-       /* Convert the lower bounds to signed types, so we're sure we're
- 	 comparing them properly.  Likewise, convert the upper bounds
- 	 to unsigned types.  */
-       if (INTEGRAL_TYPE_P (gnu_in_base_type)
- 	  && TYPE_UNSIGNED (gnu_in_base_type))
- 	gnu_in_lb
- 	  = convert (gnat_signed_type_for (gnu_in_base_type), gnu_in_lb);
- 
-       if (INTEGRAL_TYPE_P (gnu_in_base_type)
- 	  && !TYPE_UNSIGNED (gnu_in_base_type))
- 	gnu_in_ub
- 	  = convert (gnat_unsigned_type_for (gnu_in_base_type), gnu_in_ub);
- 
-       if (INTEGRAL_TYPE_P (gnu_base_type) && TYPE_UNSIGNED (gnu_base_type))
- 	gnu_out_lb
- 	  = convert (gnat_signed_type_for (gnu_base_type), gnu_out_lb);
- 
-       if (INTEGRAL_TYPE_P (gnu_base_type) && !TYPE_UNSIGNED (gnu_base_type))
- 	gnu_out_ub
- 	  = convert (gnat_unsigned_type_for (gnu_base_type), gnu_out_ub);
- 
-       /* Check each bound separately and only if the result bound
- 	 is tighter than the bound on the input type.  Note that all the
- 	 types are base types, so the bounds must be constant. Also,
- 	 the comparison is done in the base type of the input, which
- 	 always has the proper signedness.  First check for input
- 	 integer (which means output integer), output float (which means
- 	 both float), or mixed, in which case we always compare.
- 	 Note that we have to do the comparison which would *fail* in the
- 	 case of an error since if it's an FP comparison and one of the
- 	 values is a NaN or Inf, the comparison will fail.  */
-       if (INTEGRAL_TYPE_P (gnu_in_base_type)
- 	  ? tree_int_cst_lt (gnu_in_lb, gnu_out_lb)
- 	  : (FLOAT_TYPE_P (gnu_base_type)
- 	     ? real_less (&TREE_REAL_CST (gnu_in_lb),
- 			  &TREE_REAL_CST (gnu_out_lb))
- 	     : 1))
- 	gnu_cond
- 	  = invert_truthvalue
- 	    (build_binary_op (GE_EXPR, boolean_type_node,
- 			      gnu_input, convert (gnu_in_base_type,
- 						  gnu_out_lb)));
- 
-       if (INTEGRAL_TYPE_P (gnu_in_base_type)
- 	  ? tree_int_cst_lt (gnu_out_ub, gnu_in_ub)
- 	  : (FLOAT_TYPE_P (gnu_base_type)
- 	     ? real_less (&TREE_REAL_CST (gnu_out_ub),
- 			  &TREE_REAL_CST (gnu_in_ub))
- 	     : 1))
- 	gnu_cond
- 	  = build_binary_op (TRUTH_ORIF_EXPR, boolean_type_node, gnu_cond,
- 			     invert_truthvalue
- 			     (build_binary_op (LE_EXPR, boolean_type_node,
- 					       gnu_input,
- 					       convert (gnu_in_base_type,
- 							gnu_out_ub))));
- 
-       if (!integer_zerop (gnu_cond))
- 	gnu_result = emit_check (gnu_cond, gnu_input,
- 				 CE_Overflow_Check_Failed, gnat_node);
-     }
- 
-   /* Now convert to the result base type.  If this is a non-truncating
-      float-to-integer conversion, round.  */
-   if (INTEGRAL_TYPE_P (gnu_base_type)
-       && FLOAT_TYPE_P (gnu_in_base_type)
-       && !truncate_p)
-     {
-       REAL_VALUE_TYPE half_minus_pred_half, pred_half;
-       tree gnu_conv, gnu_zero, gnu_comp, calc_type;
-       tree gnu_pred_half, gnu_add_pred_half, gnu_subtract_pred_half;
-       const struct real_format *fmt;
- 
-       /* The following calculations depend on proper rounding to even
- 	 of each arithmetic operation.  In order to prevent excess
- 	 precision from spoiling this property, use the widest hardware
- 	 floating-point type if FP_ARITH_MAY_WIDEN is true.  */
-       calc_type
- 	= fp_arith_may_widen ? longest_float_type_node : gnu_in_base_type;
- 
-       /* Compute the exact value calc_type'Pred (0.5) at compile time.  */
-       fmt = REAL_MODE_FORMAT (TYPE_MODE (calc_type));
-       real_2expN (&half_minus_pred_half, -(fmt->p) - 1, TYPE_MODE (calc_type));
-       real_arithmetic (&pred_half, MINUS_EXPR, &dconsthalf,
- 		       &half_minus_pred_half);
-       gnu_pred_half = build_real (calc_type, pred_half);
- 
-       /* If the input is strictly negative, subtract this value
- 	 and otherwise add it from the input.  For 0.5, the result
- 	 is exactly between 1.0 and the machine number preceding 1.0
- 	 (for calc_type).  Since the last bit of 1.0 is even, this 0.5
- 	 will round to 1.0, while all other number with an absolute
- 	 value less than 0.5 round to 0.0.  For larger numbers exactly
- 	 halfway between integers, rounding will always be correct as
- 	 the true mathematical result will be closer to the higher
- 	 integer compared to the lower one.  So, this constant works
- 	 for all floating-point numbers.
- 
- 	 The reason to use the same constant with subtract/add instead
- 	 of a positive and negative constant is to allow the comparison
- 	 to be scheduled in parallel with retrieval of the constant and
- 	 conversion of the input to the calc_type (if necessary).  */
- 
-       gnu_zero = build_real (gnu_in_base_type, dconst0);
-       gnu_result = gnat_protect_expr (gnu_result);
-       gnu_conv = convert (calc_type, gnu_result);
-       gnu_comp
- 	= fold_build2 (GE_EXPR, boolean_type_node, gnu_result, gnu_zero);
-       gnu_add_pred_half
- 	= fold_build2 (PLUS_EXPR, calc_type, gnu_conv, gnu_pred_half);
-       gnu_subtract_pred_half
- 	= fold_build2 (MINUS_EXPR, calc_type, gnu_conv, gnu_pred_half);
-       gnu_result = fold_build3 (COND_EXPR, calc_type, gnu_comp,
- 				gnu_add_pred_half, gnu_subtract_pred_half);
-     }
- 
-   if (TREE_CODE (gnu_base_type) == INTEGER_TYPE
-       && TYPE_HAS_ACTUAL_BOUNDS_P (gnu_base_type)
-       && TREE_CODE (gnu_result) == UNCONSTRAINED_ARRAY_REF)
-     gnu_result = unchecked_convert (gnu_base_type, gnu_result, false);
-   else
-     gnu_result = convert (gnu_base_type, gnu_result);
- 
-   return convert (gnu_type, gnu_result);
- }
- 
- /* Return true if GNU_EXPR can be directly addressed.  This is the case
-    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.
- 
-    *** Notes on addressability issues in the Ada compiler ***
- 
-    This predicate is necessary in order to bridge the gap between Gigi
-    and the middle-end about addressability of GENERIC trees.  A tree
-    is said to be addressable if it can be directly addressed, i.e. if
-    its address can be taken, is a multiple of the type's alignment on
-    strict-alignment architectures and returns the first storage unit
-    assigned to the object represented by the tree.
- 
-    In the C family of languages, everything is in practice addressable
-    at the language level, except for bit-fields.  This means that these
-    compilers will take the address of any tree that doesn't represent
-    a bit-field reference and expect the result to be the first storage
-    unit assigned to the object.  Even in cases where this will result
-    in unaligned accesses at run time, nothing is supposed to be done
-    and the program is considered as erroneous instead (see PR c/18287).
- 
-    The implicit assumptions made in the middle-end are in keeping with
-    the C viewpoint described above:
-      - the address of a bit-field reference is supposed to be never
-        taken; the compiler (generally) will stop on such a construct,
-      - any other tree is addressable if it is formally addressable,
-        i.e. if it is formally allowed to be the operand of ADDR_EXPR.
- 
-    In Ada, the viewpoint is the opposite one: nothing is addressable
-    at the language level unless explicitly declared so.  This means
-    that the compiler will both make sure that the trees representing
-    references to addressable ("aliased" in Ada parlance) objects are
-    addressable and make no real attempts at ensuring that the trees
-    representing references to non-addressable objects are addressable.
- 
-    In the first case, Ada is effectively equivalent to C and handing
-    down the direct result of applying ADDR_EXPR to these trees to the
-    middle-end works flawlessly.  In the second case, Ada cannot afford
-    to consider the program as erroneous if the address of trees that
-    are not addressable is requested for technical reasons, unlike C;
-    as a consequence, the Ada compiler must arrange for either making
-    sure that this address is not requested in the middle-end or for
-    compensating by inserting temporaries if it is requested in Gigi.
- 
-    The first goal can be achieved because the middle-end should not
-    request the address of non-addressable trees on its own; the only
-    exception is for the invocation of low-level block operations like
-    memcpy, for which the addressability requirements are lower since
-    the type's alignment can be disregarded.  In practice, this means
-    that Gigi must make sure that such operations cannot be applied to
-    non-BLKmode bit-fields.
- 
-    The second goal is achieved by means of the addressable_p predicate,
-    which computes whether a temporary must be inserted by Gigi when the
-    address of a tree is requested; if so, the address of the temporary
-    will be used in lieu of that of the original tree and some glue code
-    generated to connect everything together.  */
- 
- static bool
- addressable_p (tree gnu_expr, tree gnu_type)
- {
-   /* 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
-      in the latter type wouldn't correctly set all the bits of the object.  */
-   if (gnu_type
-       && INTEGRAL_TYPE_P (gnu_type)
-       && smaller_form_type_p (gnu_type, TREE_TYPE (gnu_expr)))
-     return false;
- 
-   /* The size of the actual type of the object may not be smaller than that
-      of the expected type, otherwise an indirect access in the latter type
-      would be larger than the object.  But only record types need to be
-      considered in practice for this case.  */
-   if (gnu_type
-       && TREE_CODE (gnu_type) == RECORD_TYPE
-       && smaller_form_type_p (TREE_TYPE (gnu_expr), gnu_type))
-     return false;
- 
-   switch (TREE_CODE (gnu_expr))
-     {
-     case VAR_DECL:
-     case PARM_DECL:
-     case FUNCTION_DECL:
-     case RESULT_DECL:
-       /* All DECLs are addressable: if they are in a register, we can force
- 	 them to memory.  */
-       return true;
- 
-     case UNCONSTRAINED_ARRAY_REF:
-     case INDIRECT_REF:
-       /* Taking the address of a dereference yields the original pointer.  */
-       return true;
- 
-     case STRING_CST:
-     case INTEGER_CST:
-     case REAL_CST:
-       /* Taking the address yields a pointer to the constant pool.  */
-       return true;
- 
-     case CONSTRUCTOR:
-       /* Taking the address of a static constructor yields a pointer to the
- 	 tree constant pool.  */
-       return TREE_STATIC (gnu_expr) ? true : false;
- 
-     case NULL_EXPR:
-     case ADDR_EXPR:
-     case SAVE_EXPR:
-     case CALL_EXPR:
-     case PLUS_EXPR:
-     case MINUS_EXPR:
-     case BIT_IOR_EXPR:
-     case BIT_XOR_EXPR:
-     case BIT_AND_EXPR:
-     case BIT_NOT_EXPR:
-       /* All rvalues are deemed addressable since taking their address will
- 	 force a temporary to be created by the middle-end.  */
-       return true;
- 
-     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);
- 
-     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));
- 
-     case COMPONENT_REF:
-       return (((!DECL_BIT_FIELD (TREE_OPERAND (gnu_expr, 1))
- 		/* Even with DECL_BIT_FIELD cleared, we have to ensure that
- 		   the field is sufficiently aligned, in case it is subject
- 		   to a pragma Component_Alignment.  But we don't need to
- 		   check the alignment of the containing record, as it is
- 		   guaranteed to be not smaller than that of its most
- 		   aligned field that is not a bit-field.  */
- 		&& (!STRICT_ALIGNMENT
- 		    || DECL_ALIGN (TREE_OPERAND (gnu_expr, 1))
- 		       >= TYPE_ALIGN (TREE_TYPE (gnu_expr))))
- 	       /* 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));
- 
-     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);
- 
-     case CONVERT_EXPR:
-       return (AGGREGATE_TYPE_P (TREE_TYPE (gnu_expr))
- 	      && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE));
- 
-     case VIEW_CONVERT_EXPR:
-       {
- 	/* This is addressable if we can avoid a copy.  */
- 	tree type = TREE_TYPE (gnu_expr);
- 	tree inner_type = TREE_TYPE (TREE_OPERAND (gnu_expr, 0));
- 	return (((TYPE_MODE (type) == TYPE_MODE (inner_type)
- 		  && (!STRICT_ALIGNMENT
- 		      || TYPE_ALIGN (type) <= TYPE_ALIGN (inner_type)
- 		      || TYPE_ALIGN (inner_type) >= BIGGEST_ALIGNMENT))
- 		 || ((TYPE_MODE (type) == BLKmode
- 		      || TYPE_MODE (inner_type) == BLKmode)
- 		     && (!STRICT_ALIGNMENT
- 			 || TYPE_ALIGN (type) <= TYPE_ALIGN (inner_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));
-       }
- 
-     default:
-       return false;
-     }
- }
- 
- /* Do the processing for the declaration of a GNAT_ENTITY, a type or subtype.
-    If a Freeze node exists for the entity, delay the bulk of the processing.
-    Otherwise make a GCC type for GNAT_ENTITY and set up the correspondence.  */
- 
- void
- process_type (Entity_Id gnat_entity)
- {
-   tree gnu_old
-     = present_gnu_tree (gnat_entity) ? get_gnu_tree (gnat_entity) : NULL_TREE;
- 
-   /* If we are to delay elaboration of this type, just do any elaboration
-      needed for expressions within the declaration and make a dummy node
-      for it and its Full_View (if any), in case something points to it.
-      Do not do this if it has already been done (the only way that can
-      happen is if the private completion is also delayed).  */
-   if (Present (Freeze_Node (gnat_entity)))
-     {
-       elaborate_entity (gnat_entity);
- 
-       if (!gnu_old)
- 	{
- 	  tree gnu_decl = TYPE_STUB_DECL (make_dummy_type (gnat_entity));
- 	  save_gnu_tree (gnat_entity, gnu_decl, false);
- 	  if (Is_Incomplete_Or_Private_Type (gnat_entity)
- 	      && Present (Full_View (gnat_entity)))
- 	    {
- 	      if (Has_Completion_In_Body (gnat_entity))
- 		DECL_TAFT_TYPE_P (gnu_decl) = 1;
- 	      save_gnu_tree (Full_View (gnat_entity), gnu_decl, false);
- 	    }
- 	}
- 
-       return;
-     }
- 
-   /* If we saved away a dummy type for this node, it means that this made the
-      type that corresponds to the full type of an incomplete type.  Clear that
-      type for now and then update the type in the pointers below.  But, if the
-      saved type is not dummy, it very likely means that we have a use before
-      declaration for the type in the tree, what we really cannot handle.  */
-   if (gnu_old)
-     {
-       gcc_assert (TREE_CODE (gnu_old) == TYPE_DECL
- 		  && TYPE_IS_DUMMY_P (TREE_TYPE (gnu_old)));
- 
-       save_gnu_tree (gnat_entity, NULL_TREE, false);
-     }
- 
-   /* Now fully elaborate the type.  */
-   tree gnu_new = gnat_to_gnu_entity (gnat_entity, NULL_TREE, true);
-   gcc_assert (TREE_CODE (gnu_new) == TYPE_DECL);
- 
-   /* If we have an old type and we've made pointers to this type, update those
-      pointers.  If this is a Taft amendment type in the main unit, we need to
-      mark the type as used since other units referencing it don't see the full
-      declaration and, therefore, cannot mark it as used themselves.  */
-   if (gnu_old)
-     {
-       update_pointer_to (TYPE_MAIN_VARIANT (TREE_TYPE (gnu_old)),
- 			 TREE_TYPE (gnu_new));
-       if (DECL_TAFT_TYPE_P (gnu_old))
- 	used_types_insert (TREE_TYPE (gnu_new));
-     }
- 
-   /* If this is a record type corresponding to a task or protected type
-      that is a completion of an incomplete type, perform a similar update
-      on the type.  ??? Including protected types here is a guess.  */
-   if (Is_Record_Type (gnat_entity)
-       && Is_Concurrent_Record_Type (gnat_entity)
-       && present_gnu_tree (Corresponding_Concurrent_Type (gnat_entity)))
-     {
-       tree gnu_task_old
- 	= get_gnu_tree (Corresponding_Concurrent_Type (gnat_entity));
- 
-       save_gnu_tree (Corresponding_Concurrent_Type (gnat_entity),
- 		     NULL_TREE, false);
-       save_gnu_tree (Corresponding_Concurrent_Type (gnat_entity),
- 		     gnu_new, false);
- 
-       update_pointer_to (TYPE_MAIN_VARIANT (TREE_TYPE (gnu_task_old)),
- 			 TREE_TYPE (gnu_new));
-     }
- }
- 
- /* Subroutine of assoc_to_constructor: VALUES is a list of field associations,
-    some of which are from RECORD_TYPE.  Return a CONSTRUCTOR consisting of the
-    associations that are from RECORD_TYPE.  If we see an internal record, make
-    a recursive call to fill it in as well.  */
- 
- static tree
- extract_values (tree values, tree record_type)
- {
-   vec<constructor_elt, va_gc> *v = NULL;
-   tree field;
- 
-   for (field = TYPE_FIELDS (record_type); field; field = DECL_CHAIN (field))
-     {
-       tree tem, value = NULL_TREE;
- 
-       /* _Parent is an internal field, but may have values in the aggregate,
- 	 so check for values first.  */
-       if ((tem = purpose_member (field, values)))
- 	{
- 	  value = TREE_VALUE (tem);
- 	  TREE_ADDRESSABLE (tem) = 1;
- 	}
- 
-       else if (DECL_INTERNAL_P (field))
- 	{
- 	  value = extract_values (values, TREE_TYPE (field));
- 	  if (TREE_CODE (value) == CONSTRUCTOR
- 	      && vec_safe_is_empty (CONSTRUCTOR_ELTS (value)))
- 	    value = NULL_TREE;
- 	}
-       else
- 	/* If we have a record subtype, the names will match, but not the
- 	   actual FIELD_DECLs.  */
- 	for (tem = values; tem; tem = TREE_CHAIN (tem))
- 	  if (DECL_NAME (TREE_PURPOSE (tem)) == DECL_NAME (field))
- 	    {
- 	      value = convert (TREE_TYPE (field), TREE_VALUE (tem));
- 	      TREE_ADDRESSABLE (tem) = 1;
- 	    }
- 
-       if (!value)
- 	continue;
- 
-       CONSTRUCTOR_APPEND_ELT (v, field, value);
-     }
- 
-   return gnat_build_constructor (record_type, v);
- }
- 
- /* GNAT_ENTITY is the type of the resulting constructor, GNAT_ASSOC is the
-    front of the Component_Associations of an N_Aggregate and GNU_TYPE is the
-    GCC type of the corresponding record type.  Return the CONSTRUCTOR.  */
- 
- static tree
- assoc_to_constructor (Entity_Id gnat_entity, Node_Id gnat_assoc, tree gnu_type)
- {
-   tree gnu_list = NULL_TREE, gnu_result;
- 
-   /* We test for GNU_FIELD being empty in the case where a variant
-      was the last thing since we don't take things off GNAT_ASSOC in
-      that case.  We check GNAT_ASSOC in case we have a variant, but it
-      has no fields.  */
- 
-   for (; Present (gnat_assoc); gnat_assoc = Next (gnat_assoc))
-     {
-       const Node_Id gnat_field = First (Choices (gnat_assoc));
-       const Node_Id gnat_expr = Expression (gnat_assoc);
-       tree gnu_field = gnat_to_gnu_field_decl (Entity (gnat_field));
-       tree gnu_expr = gnat_to_gnu (Expression (gnat_assoc));
- 
-       /* The expander is supposed to put a single component selector name
- 	 in every record component association.  */
-       gcc_assert (No (Next (gnat_field)));
- 
-       /* Ignore discriminants that have Corresponding_Discriminants in tagged
- 	 types since we'll be setting those fields in the parent subtype.  */
-       if (Ekind (Entity (gnat_field)) == E_Discriminant
- 	  && Present (Corresponding_Discriminant (Entity (gnat_field)))
- 	  && Is_Tagged_Type (Scope (Entity (gnat_field))))
- 	continue;
- 
-       /* Also ignore discriminants of Unchecked_Unions.  */
-       if (Ekind (Entity (gnat_field)) == E_Discriminant
- 	  && Is_Unchecked_Union (gnat_entity))
- 	continue;
- 
-       gigi_checking_assert (!Do_Range_Check (gnat_expr));
- 
-       /* Convert to the type of the field.  */
-       gnu_expr = convert (TREE_TYPE (gnu_field), gnu_expr);
- 
-       /* Add the field and expression to the list.  */
-       gnu_list = tree_cons (gnu_field, gnu_expr, gnu_list);
-     }
- 
-   gnu_result = extract_values (gnu_list, gnu_type);
- 
-   if (flag_checking)
-     {
-       /* Verify that every entry in GNU_LIST was used.  */
-       for (; gnu_list; gnu_list = TREE_CHAIN (gnu_list))
- 	gcc_assert (TREE_ADDRESSABLE (gnu_list));
-     }
- 
-   return gnu_result;
- }
- 
- /* Build a possibly nested constructor for array aggregates.  GNAT_EXPR is
-    the first element of an array aggregate.  It may itself be an aggregate.
-    GNU_ARRAY_TYPE is the GCC type corresponding to the array aggregate.  */
- 
- static tree
- pos_to_constructor (Node_Id gnat_expr, tree gnu_array_type)
- {
-   tree gnu_index = TYPE_MIN_VALUE (TYPE_DOMAIN (gnu_array_type));
-   vec<constructor_elt, va_gc> *gnu_expr_vec = NULL;
- 
-   for (; Present (gnat_expr); gnat_expr = Next (gnat_expr))
-     {
-       tree gnu_expr;
- 
-       /* If the expression is itself an array aggregate then first build the
- 	 innermost constructor if it is part of our array (multi-dimensional
- 	 case).  */
-       if (Nkind (gnat_expr) == N_Aggregate
- 	  && TREE_CODE (TREE_TYPE (gnu_array_type)) == ARRAY_TYPE
- 	  && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_array_type)))
- 	gnu_expr = pos_to_constructor (First (Expressions (gnat_expr)),
- 				       TREE_TYPE (gnu_array_type));
-       else
- 	{
- 	  /* If the expression is a conversion to an unconstrained array type,
- 	     skip it to avoid spilling to memory.  */
- 	  if (Nkind (gnat_expr) == N_Type_Conversion
- 	      && Is_Array_Type (Etype (gnat_expr))
- 	      && !Is_Constrained (Etype (gnat_expr)))
- 	    gnu_expr = gnat_to_gnu (Expression (gnat_expr));
- 	  else
- 	    gnu_expr = gnat_to_gnu (gnat_expr);
- 
- 	  gigi_checking_assert (!Do_Range_Check (gnat_expr));
- 	}
- 
-       CONSTRUCTOR_APPEND_ELT (gnu_expr_vec, gnu_index,
- 			      convert (TREE_TYPE (gnu_array_type), gnu_expr));
- 
-       gnu_index = int_const_binop (PLUS_EXPR, gnu_index,
- 				   convert (TREE_TYPE (gnu_index),
- 					    integer_one_node));
-     }
- 
-   return gnat_build_constructor (gnu_array_type, gnu_expr_vec);
- }
- 
- /* Process a N_Validate_Unchecked_Conversion node.  */
- 
- static void
- validate_unchecked_conversion (Node_Id gnat_node)
- {
-   tree gnu_source_type = gnat_to_gnu_type (Source_Type (gnat_node));
-   tree gnu_target_type = gnat_to_gnu_type (Target_Type (gnat_node));
- 
-   /* If the target is a pointer type, see if we are either converting from a
-      non-pointer or from a pointer to a type with a different alias set and
-      warn if so, unless the pointer has been marked to alias everything.  */
-   if (POINTER_TYPE_P (gnu_target_type)
-       && !TYPE_REF_CAN_ALIAS_ALL (gnu_target_type))
-     {
-       tree gnu_source_desig_type = POINTER_TYPE_P (gnu_source_type)
- 				   ? TREE_TYPE (gnu_source_type)
- 				   : NULL_TREE;
-       tree gnu_target_desig_type = TREE_TYPE (gnu_target_type);
-       alias_set_type target_alias_set = get_alias_set (gnu_target_desig_type);
- 
-       if (target_alias_set != 0
- 	  && (!POINTER_TYPE_P (gnu_source_type)
- 	      || !alias_sets_conflict_p (get_alias_set (gnu_source_desig_type),
- 					 target_alias_set)))
- 	{
- 	  post_error_ne ("?possible aliasing problem for type&",
- 			 gnat_node, Target_Type (gnat_node));
- 	  post_error ("\\?use -fno-strict-aliasing switch for references",
- 		      gnat_node);
- 	  post_error_ne ("\\?or use `pragma No_Strict_Aliasing (&);`",
- 			 gnat_node, Target_Type (gnat_node));
- 	}
-     }
- 
-   /* Likewise if the target is a fat pointer type, but we have no mechanism to
-      mitigate the problem in this case, so we unconditionally warn.  */
-   else if (TYPE_IS_FAT_POINTER_P (gnu_target_type))
-     {
-       tree gnu_source_desig_type
- 	= TYPE_IS_FAT_POINTER_P (gnu_source_type)
- 	  ? TREE_TYPE (TREE_TYPE (TYPE_FIELDS (gnu_source_type)))
- 	  : NULL_TREE;
-       tree gnu_target_desig_type
- 	= TREE_TYPE (TREE_TYPE (TYPE_FIELDS (gnu_target_type)));
-       alias_set_type target_alias_set = get_alias_set (gnu_target_desig_type);
- 
-       if (target_alias_set != 0
- 	  && (!TYPE_IS_FAT_POINTER_P (gnu_source_type)
- 	      || !alias_sets_conflict_p (get_alias_set (gnu_source_desig_type),
- 					 target_alias_set)))
- 	{
- 	  post_error_ne ("?possible aliasing problem for type&",
- 			 gnat_node, Target_Type (gnat_node));
- 	  post_error ("\\?use -fno-strict-aliasing switch for references",
- 		      gnat_node);
- 	}
-     }
- }
- 
- /* Convert SLOC into LOCUS.  Return true if SLOC corresponds to a
-    source code location and false if it doesn't.  If CLEAR_COLUMN is
-    true, set the column information to 0.  If DECL is given and SLOC
-    refers to a File with an instance, map DECL to that instance.  */
- 
- bool
- Sloc_to_locus (Source_Ptr Sloc, location_t *locus, bool clear_column,
- 	       const_tree decl)
- {
-   if (Sloc == No_Location)
-     return false;
- 
-   if (Sloc <= Standard_Location)
-     {
-       *locus = BUILTINS_LOCATION;
-       return false;
-     }
- 
-   Source_File_Index file = Get_Source_File_Index (Sloc);
-   Line_Number_Type line = Get_Logical_Line_Number (Sloc);
-   Column_Number_Type column = (clear_column ? 0 : Get_Column_Number (Sloc));
-   line_map_ordinary *map = LINEMAPS_ORDINARY_MAP_AT (line_table, file - 1);
- 
-   /* We can have zero if pragma Source_Reference is in effect.  */
-   if (line < 1)
-     line = 1;
- 
-   /* Translate the location.  */
-   *locus
-     = linemap_position_for_line_and_column (line_table, map, line, column);
- 
-   if (file_map && file_map[file - 1].Instance)
-     decl_to_instance_map->put (decl, file_map[file - 1].Instance);
- 
-   return true;
- }
- 
- /* Return whether GNAT_NODE is a defining identifier for a renaming that comes
-    from the parameter association for the instantiation of a generic.  We do
-    not want to emit source location for them: the code generated for their
-    initialization is likely to disturb debugging.  */
- 
- bool
- renaming_from_instantiation_p (Node_Id gnat_node)
- {
-   if (Nkind (gnat_node) != N_Defining_Identifier
-       || !Is_Object (gnat_node)
-       || Comes_From_Source (gnat_node)
-       || !Present (Renamed_Object (gnat_node)))
-     return false;
- 
-   /* Get the object declaration of the renamed object, if any and if the
-      renamed object is a mere identifier.  */
-   gnat_node = Renamed_Object (gnat_node);
-   if (Nkind (gnat_node) != N_Identifier)
-     return false;
- 
-   gnat_node = Parent (Entity (gnat_node));
-   return (Present (gnat_node)
- 	  && Nkind (gnat_node) == N_Object_Declaration
- 	  && Present (Corresponding_Generic_Association (gnat_node)));
- }
- 
- /* Similar to set_expr_location, but start with the Sloc of GNAT_NODE and
-    don't do anything if it doesn't correspond to a source location.  And,
-    if CLEAR_COLUMN is true, set the column information to 0.  */
- 
- static void
- set_expr_location_from_node (tree node, Node_Id gnat_node, bool clear_column)
- {
-   location_t locus;
- 
-   /* Do not set a location for constructs likely to disturb debugging.  */
-   if (Nkind (gnat_node) == N_Defining_Identifier)
-     {
-       if (Is_Type (gnat_node) && Is_Actual_Subtype (gnat_node))
- 	return;
- 
-       if (renaming_from_instantiation_p (gnat_node))
- 	return;
-     }
- 
-   if (!Sloc_to_locus (Sloc (gnat_node), &locus, clear_column))
-     return;
- 
-   SET_EXPR_LOCATION (node, locus);
- }
- 
- /* More elaborate version of set_expr_location_from_node to be used in more
-    general contexts, for example the result of the translation of a generic
-    GNAT node.  */
- 
- static void
- set_gnu_expr_location_from_node (tree node, Node_Id gnat_node)
- {
-   /* Set the location information on the node if it is a real expression.
-      References can be reused for multiple GNAT nodes and they would get
-      the location information of their last use.  Also make sure not to
-      overwrite an existing location as it is probably more precise.  */
- 
-   switch (TREE_CODE (node))
-     {
-     CASE_CONVERT:
-     case NON_LVALUE_EXPR:
-     case SAVE_EXPR:
-       break;
- 
-     case COMPOUND_EXPR:
-       if (EXPR_P (TREE_OPERAND (node, 1)))
- 	set_gnu_expr_location_from_node (TREE_OPERAND (node, 1), gnat_node);
- 
-       /* ... fall through ... */
- 
-     default:
-       if (!REFERENCE_CLASS_P (node) && !EXPR_HAS_LOCATION (node))
- 	{
- 	  set_expr_location_from_node (node, gnat_node);
- 	  set_end_locus_from_node (node, gnat_node);
- 	}
-       break;
-     }
- }
- 
- /* Set the end_locus information for GNU_NODE, if any, from an explicit end
-    location associated with GNAT_NODE or GNAT_NODE itself, whichever makes
-    most sense.  Return true if a sensible assignment was performed.  */
- 
- static bool
- set_end_locus_from_node (tree gnu_node, Node_Id gnat_node)
- {
-   Node_Id gnat_end_label;
-   location_t end_locus;
- 
-   /* Pick the GNAT node of which we'll take the sloc to assign to the GCC node
-      end_locus when there is one.  We consider only GNAT nodes with a possible
-      End_Label attached.  If the End_Label actually was unassigned, fallback
-      on the original node.  We'd better assign an explicit sloc associated with
-      the outer construct in any case.  */
- 
-   switch (Nkind (gnat_node))
-     {
-     case N_Package_Body:
-     case N_Subprogram_Body:
-     case N_Block_Statement:
-       gnat_end_label = End_Label (Handled_Statement_Sequence (gnat_node));
-       break;
- 
-     case N_Package_Declaration:
-       gnat_end_label = End_Label (Specification (gnat_node));
-       break;
- 
-     default:
-       return false;
-     }
- 
-   if (Present (gnat_end_label))
-     gnat_node = gnat_end_label;
- 
-   /* Some expanded subprograms have neither an End_Label nor a Sloc
-      attached.  Notify that to callers.  For a block statement with no
-      End_Label, clear column information, so that the tree for a
-      transient block does not receive the sloc of a source condition.  */
-   if (!Sloc_to_locus (Sloc (gnat_node), &end_locus,
-                       No (gnat_end_label)
-                       && (Nkind (gnat_node) == N_Block_Statement)))
-     return false;
- 
-   switch (TREE_CODE (gnu_node))
-     {
-     case BIND_EXPR:
-       BLOCK_SOURCE_END_LOCATION (BIND_EXPR_BLOCK (gnu_node)) = end_locus;
-       return true;
- 
-     case FUNCTION_DECL:
-       DECL_STRUCT_FUNCTION (gnu_node)->function_end_locus = end_locus;
-       return true;
- 
-     default:
-       return false;
-     }
- }
- 
- /* Post an error message.  MSG is the error message, properly annotated.
-    NODE is the node at which to post the error and the node to use for the
-    '&' substitution.  */
- 
- void
- post_error (const char *msg, Node_Id node)
- {
-   String_Template temp;
-   String_Pointer sp;
- 
-   if (No (node))
-     return;
- 
-   temp.Low_Bound = 1;
-   temp.High_Bound = strlen (msg);
-   sp.Bounds = &temp;
-   sp.Array = msg;
-   Error_Msg_N (sp, node);
- }
- 
- /* Similar to post_error, but NODE is the node at which to post the error and
-    ENT is the node to use for the '&' substitution.  */
- 
- void
- post_error_ne (const char *msg, Node_Id node, Entity_Id ent)
- {
-   String_Template temp;
-   String_Pointer sp;
- 
-   if (No (node))
-     return;
- 
-   temp.Low_Bound = 1;
-   temp.High_Bound = strlen (msg);
-   sp.Bounds = &temp;
-   sp.Array = msg;
-   Error_Msg_NE (sp, node, ent);
- }
- 
- /* Similar to post_error_ne, but NUM is the number to use for the '^'.  */
- 
- void
- post_error_ne_num (const char *msg, Node_Id node, Entity_Id ent, int num)
- {
-   Error_Msg_Uint_1 = UI_From_Int (num);
-   post_error_ne (msg, node, ent);
- }
- 
- /* Similar to post_error_ne, but T is a GCC tree representing the number to
-    write.  If T represents a constant, the text inside curly brackets in
-    MSG will be output (presumably including a '^').  Otherwise it will not
-    be output and the text inside square brackets will be output instead.  */
- 
- void
- post_error_ne_tree (const char *msg, Node_Id node, Entity_Id ent, tree t)
- {
-   char *new_msg = XALLOCAVEC (char, strlen (msg) + 1);
-   char start_yes, end_yes, start_no, end_no;
-   const char *p;
-   char *q;
- 
-   if (TREE_CODE (t) == INTEGER_CST)
-     {
-       Error_Msg_Uint_1 = UI_From_gnu (t);
-       start_yes = '{', end_yes = '}', start_no = '[', end_no = ']';
-     }
-   else
-     start_yes = '[', end_yes = ']', start_no = '{', end_no = '}';
- 
-   for (p = msg, q = new_msg; *p; p++)
-     {
-       if (*p == start_yes)
- 	for (p++; *p != end_yes; p++)
- 	  *q++ = *p;
-       else if (*p == start_no)
- 	for (p++; *p != end_no; p++)
- 	  ;
-       else
- 	*q++ = *p;
-     }
- 
-   *q = 0;
- 
-   post_error_ne (new_msg, node, ent);
- }
- 
- /* Similar to post_error_ne_tree, but NUM is a second integer to write.  */
- 
- void
- post_error_ne_tree_2 (const char *msg, Node_Id node, Entity_Id ent, tree t,
- 		      int num)
- {
-   Error_Msg_Uint_2 = UI_From_Int (num);
-   post_error_ne_tree (msg, node, ent, t);
- }
- 
- /* Return a label to branch to for the exception type in KIND or Empty
-    if none.  */
- 
- Entity_Id
- get_exception_label (char kind)
- {
-   switch (kind)
-     {
-     case N_Raise_Constraint_Error:
-       return gnu_constraint_error_label_stack.last ();
- 
-     case N_Raise_Storage_Error:
-       return gnu_storage_error_label_stack.last ();
- 
-     case N_Raise_Program_Error:
-       return gnu_program_error_label_stack.last ();
- 
-     default:
-       return Empty;
-     }
- 
-   gcc_unreachable ();
- }
- 
- /* Return the decl for the current elaboration procedure.  */
- 
- static tree
- get_elaboration_procedure (void)
- {
-   return gnu_elab_proc_stack->last ();
- }
- 
- /* Return the controlling type of a dispatching subprogram.  */
- 
- static Entity_Id
- get_controlling_type (Entity_Id subprog)
- {
-   /* This is modeled on Expand_Interface_Thunk.  */
-   Entity_Id controlling_type = Etype (First_Formal (subprog));
-   if (Is_Access_Type (controlling_type))
-     controlling_type = Directly_Designated_Type (controlling_type);
-   controlling_type = Underlying_Type (controlling_type);
-   if (Is_Concurrent_Type (controlling_type))
-     controlling_type = Corresponding_Record_Type (controlling_type);
-   controlling_type = Base_Type (controlling_type);
-   return controlling_type;
- }
- 
- /* Return whether we should use an alias for the TARGET of a thunk
-    in order to make the call generated in the thunk local.  */
- 
- static bool
- use_alias_for_thunk_p (tree target)
- {
-   /* We cannot generate a local call in this case.  */
-   if (DECL_EXTERNAL (target))
-     return false;
- 
-   /* The call is already local in this case.  */
-   if (TREE_CODE (DECL_CONTEXT (target)) == FUNCTION_DECL)
-     return false;
- 
-   return TARGET_USE_LOCAL_THUNK_ALIAS_P (target);
- }
- 
- static GTY(()) unsigned long thunk_labelno = 0;
- 
- /* Create an alias for TARGET to be used as the target of a thunk.  */
- 
- static tree
- make_alias_for_thunk (tree target)
- {
-   char buf[64];
-   targetm.asm_out.generate_internal_label (buf, "LTHUNK", thunk_labelno++);
- 
-   tree alias = build_decl (DECL_SOURCE_LOCATION (target), TREE_CODE (target),
- 			   get_identifier (buf), TREE_TYPE (target));
- 
-   DECL_LANG_SPECIFIC (alias) = DECL_LANG_SPECIFIC (target);
-   DECL_CONTEXT (alias) = DECL_CONTEXT (target);
-   TREE_READONLY (alias) = TREE_READONLY (target);
-   TREE_THIS_VOLATILE (alias) = TREE_THIS_VOLATILE (target);
-   DECL_ARTIFICIAL (alias) = 1;
-   DECL_INITIAL (alias) = error_mark_node;
-   DECL_ARGUMENTS (alias) = copy_list (DECL_ARGUMENTS (target));
-   TREE_ADDRESSABLE (alias) = 1;
-   SET_DECL_ASSEMBLER_NAME (alias, DECL_NAME (alias));
- 
-   cgraph_node *n = cgraph_node::create_same_body_alias (alias, target);
-   gcc_assert (n);
- 
-   return alias;
- }
- 
- /* Create the local covariant part of {GNAT,GNU}_THUNK.  */
- 
- static tree
- make_covariant_thunk (Entity_Id gnat_thunk, tree gnu_thunk)
- {
-   tree gnu_name = create_concat_name (gnat_thunk, "CV");
-   tree gnu_cv_thunk
-     = build_decl (DECL_SOURCE_LOCATION (gnu_thunk), TREE_CODE (gnu_thunk),
- 		  gnu_name, TREE_TYPE (gnu_thunk));
- 
-   DECL_ARGUMENTS (gnu_cv_thunk) = copy_list (DECL_ARGUMENTS (gnu_thunk));
-   for (tree param_decl = DECL_ARGUMENTS (gnu_cv_thunk);
-        param_decl;
-        param_decl = DECL_CHAIN (param_decl))
-     DECL_CONTEXT (param_decl) = gnu_cv_thunk;
- 
-   DECL_RESULT (gnu_cv_thunk) = copy_node (DECL_RESULT (gnu_thunk));
-   DECL_CONTEXT (DECL_RESULT (gnu_cv_thunk)) = gnu_cv_thunk;
- 
-   DECL_LANG_SPECIFIC (gnu_cv_thunk) = DECL_LANG_SPECIFIC (gnu_thunk);
-   DECL_CONTEXT (gnu_cv_thunk) = DECL_CONTEXT (gnu_thunk);
-   TREE_READONLY (gnu_cv_thunk) = TREE_READONLY (gnu_thunk);
-   TREE_THIS_VOLATILE (gnu_cv_thunk) = TREE_THIS_VOLATILE (gnu_thunk);
-   DECL_ARTIFICIAL (gnu_cv_thunk) = 1;
- 
-   return gnu_cv_thunk;
- }
- 
- /* Try to create a GNU thunk for {GNAT,GNU}_THUNK and return true on success.
- 
-    GNU thunks are more efficient than GNAT thunks because they don't call into
-    the runtime to retrieve the offset used in the displacement operation, but
-    they are tailored to C++ and thus too limited to support the full range of
-    thunks generated in Ada.  Here's the complete list of limitations:
- 
-      1. Multi-controlling thunks, i.e thunks with more than one controlling
- 	parameter, are simply not supported.
- 
-      2. Covariant thunks, i.e. thunks for which the result is also controlling,
- 	are split into a pair of (this, covariant-only) thunks.
- 
-      3. Variable-offset thunks, i.e. thunks for which the offset depends on the
- 	object and not only on its type, are supported as 2nd class citizens.
- 
-      4. External thunks, i.e. thunks for which the target is not declared in
- 	the same unit as the thunk, are supported as 2nd class citizens.
- 
-      5. Local thunks, i.e. thunks generated for a local type, are supported as
- 	2nd class citizens.  */
- 
- static bool
- maybe_make_gnu_thunk (Entity_Id gnat_thunk, tree gnu_thunk)
- {
-   const Entity_Id gnat_target = Thunk_Entity (gnat_thunk);
- 
-   /* Check that the first formal of the target is the only controlling one.  */
-   Entity_Id gnat_formal = First_Formal (gnat_target);
-   if (!Is_Controlling_Formal (gnat_formal))
-     return false;
-   for (gnat_formal = Next_Formal (gnat_formal);
-        Present (gnat_formal);
-        gnat_formal = Next_Formal (gnat_formal))
-     if (Is_Controlling_Formal (gnat_formal))
-       return false;
- 
-   /* Look for the types that control the target and the thunk.  */
-   const Entity_Id gnat_controlling_type = get_controlling_type (gnat_target);
-   const Entity_Id gnat_interface_type = get_controlling_type (gnat_thunk);
- 
-   /* We must have an interface type at this point.  */
-   gcc_assert (Is_Interface (gnat_interface_type));
- 
-   /* Now compute whether the former covers the latter.  */
-   const Entity_Id gnat_interface_tag
-     = Find_Interface_Tag (gnat_controlling_type, gnat_interface_type);
-   tree gnu_interface_tag
-     = Present (gnat_interface_tag)
-       ? gnat_to_gnu_field_decl (gnat_interface_tag)
-       : NULL_TREE;
-   tree gnu_interface_offset
-     = gnu_interface_tag ? byte_position (gnu_interface_tag) : NULL_TREE;
- 
-   /* There are three ways to retrieve the offset between the interface view
-      and the base object.  Either the controlling type covers the interface
-      type and the offset of the corresponding tag is fixed, in which case it
-      can be statically encoded in the thunk (see FIXED_OFFSET below).  Or the
-      controlling type doesn't cover the interface type but is of fixed size,
-      in which case the offset is stored in the dispatch table, two pointers
-      above the dispatch table address (see VIRTUAL_VALUE below).  Otherwise,
-      the offset is variable and is stored right after the tag in every object
-      (see INDIRECT_OFFSET below).  See also a-tags.ads for more details.  */
-   HOST_WIDE_INT fixed_offset, virtual_value, indirect_offset;
-   tree virtual_offset;
- 
-   if (gnu_interface_offset && TREE_CODE (gnu_interface_offset) == INTEGER_CST)
-     {
-       fixed_offset = - tree_to_shwi (gnu_interface_offset);
-       virtual_value = 0;
-       virtual_offset = NULL_TREE;
-       indirect_offset = 0;
-     }
-   else if (!gnu_interface_offset
- 	   && !Is_Variable_Size_Record (gnat_controlling_type))
-     {
-       fixed_offset = 0;
-       virtual_value = - 2 * (HOST_WIDE_INT) (POINTER_SIZE / BITS_PER_UNIT);
-       virtual_offset = build_int_cst (integer_type_node, virtual_value);
-       indirect_offset = 0;
-     }
-   else
-     {
-       /* Covariant thunks with variable offset are not supported.  */
-       if (Has_Controlling_Result (gnat_target))
- 	return false;
- 
-       fixed_offset = 0;
-       virtual_value = 0;
-       virtual_offset = NULL_TREE;
-       indirect_offset = (HOST_WIDE_INT) (POINTER_SIZE / BITS_PER_UNIT);
-     }
- 
-   tree gnu_target = gnat_to_gnu_entity (gnat_target, NULL_TREE, false);
- 
-   /* If the target is local, then thunk and target must have the same context
-      because cgraph_node::expand_thunk can only forward the static chain.  */
-   if (DECL_STATIC_CHAIN (gnu_target)
-       && DECL_CONTEXT (gnu_thunk) != DECL_CONTEXT (gnu_target))
-     return false;
- 
-   /* If the target returns by invisible reference and is external, apply the
-      same transformation as Subprogram_Body_to_gnu here.  */
-   if (TREE_ADDRESSABLE (TREE_TYPE (gnu_target))
-       && DECL_EXTERNAL (gnu_target)
-       && !POINTER_TYPE_P (TREE_TYPE (DECL_RESULT (gnu_target))))
-     {
-       TREE_TYPE (DECL_RESULT (gnu_target))
- 	= build_reference_type (TREE_TYPE (DECL_RESULT (gnu_target)));
-       relayout_decl (DECL_RESULT (gnu_target));
-     }
- 
-   /* The thunk expander requires the return types of thunk and target to be
-      compatible, which is not fully the case with the CICO mechanism.  */
-   if (TYPE_CI_CO_LIST (TREE_TYPE (gnu_thunk)))
-     {
-       tree gnu_target_type = TREE_TYPE (gnu_target);
-       gcc_assert (TYPE_CI_CO_LIST (gnu_target_type));
-       TYPE_CANONICAL (TREE_TYPE (TREE_TYPE (gnu_thunk)))
- 	= TYPE_CANONICAL (TREE_TYPE (gnu_target_type));
-     }
- 
-   cgraph_node *target_node = cgraph_node::get_create (gnu_target);
- 
-   /* We may also need to create an alias for the target in order to make
-      the call local, depending on the linkage of the target.  */
-   tree gnu_alias = use_alias_for_thunk_p (gnu_target)
- 		  ? make_alias_for_thunk (gnu_target)
- 		  : gnu_target;
- 
-   /* If the return type of the target is a controlling type, then we need
-      both an usual this thunk and a covariant thunk in this order:
- 
-        this thunk  -->  covariant thunk  -->  target
- 
-      For covariant thunks, we can only handle a fixed offset.  */
-   if (Has_Controlling_Result (gnat_target))
-     {
-       gcc_assert (fixed_offset < 0);
-       tree gnu_cv_thunk = make_covariant_thunk (gnat_thunk, gnu_thunk);
-       target_node->create_thunk (gnu_cv_thunk, gnu_target, false,
- 				 - fixed_offset, 0, 0,
- 				 NULL_TREE, gnu_alias);
- 
-       gnu_alias = gnu_target = gnu_cv_thunk;
-     }
- 
-   target_node->create_thunk (gnu_thunk, gnu_target, true,
- 			     fixed_offset, virtual_value, indirect_offset,
- 			     virtual_offset, gnu_alias);
- 
-   return true;
- }
- 
- /* Initialize the table that maps GNAT codes to GCC codes for simple
-    binary and unary operations.  */
- 
- static void
- init_code_table (void)
- {
-   gnu_codes[N_Op_And] = TRUTH_AND_EXPR;
-   gnu_codes[N_Op_Or] = TRUTH_OR_EXPR;
-   gnu_codes[N_Op_Xor] = TRUTH_XOR_EXPR;
-   gnu_codes[N_Op_Eq] = EQ_EXPR;
-   gnu_codes[N_Op_Ne] = NE_EXPR;
-   gnu_codes[N_Op_Lt] = LT_EXPR;
-   gnu_codes[N_Op_Le] = LE_EXPR;
-   gnu_codes[N_Op_Gt] = GT_EXPR;
-   gnu_codes[N_Op_Ge] = GE_EXPR;
-   gnu_codes[N_Op_Add] = PLUS_EXPR;
-   gnu_codes[N_Op_Subtract] = MINUS_EXPR;
-   gnu_codes[N_Op_Multiply] = MULT_EXPR;
-   gnu_codes[N_Op_Mod] = FLOOR_MOD_EXPR;
-   gnu_codes[N_Op_Rem] = TRUNC_MOD_EXPR;
-   gnu_codes[N_Op_Minus] = NEGATE_EXPR;
-   gnu_codes[N_Op_Abs] = ABS_EXPR;
-   gnu_codes[N_Op_Not] = TRUTH_NOT_EXPR;
-   gnu_codes[N_Op_Rotate_Left] = LROTATE_EXPR;
-   gnu_codes[N_Op_Rotate_Right] = RROTATE_EXPR;
-   gnu_codes[N_Op_Shift_Left] = LSHIFT_EXPR;
-   gnu_codes[N_Op_Shift_Right] = RSHIFT_EXPR;
-   gnu_codes[N_Op_Shift_Right_Arithmetic] = RSHIFT_EXPR;
-   gnu_codes[N_And_Then] = TRUTH_ANDIF_EXPR;
-   gnu_codes[N_Or_Else] = TRUTH_ORIF_EXPR;
- }
- 
- #include "gt-ada-trans.h"
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/trans.cc gcc-12.1.0/gcc/ada/gcc-interface/trans.cc
*** gcc-11.3.0/gcc/ada/gcc-interface/trans.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gcc-interface/trans.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,11009 ----
+ /****************************************************************************
+  *                                                                          *
+  *                         GNAT COMPILER COMPONENTS                         *
+  *                                                                          *
+  *                                T R A N S                                 *
+  *                                                                          *
+  *                          C Implementation File                           *
+  *                                                                          *
+  *          Copyright (C) 1992-2021, Free Software Foundation, Inc.         *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
+  * for  more details.  You should have  received  a copy of the GNU General *
+  * Public License  distributed  with GNAT;  see file  COPYING3.  If not see *
+  * <http://www.gnu.org/licenses/>.                                          *
+  *                                                                          *
+  * GNAT was originally developed  by the GNAT team at  New York University. *
+  * Extensive contributions were provided by Ada Core Technologies Inc.      *
+  *                                                                          *
+  ****************************************************************************/
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "target.h"
+ #include "function.h"
+ #include "bitmap.h"
+ #include "tree.h"
+ #include "gimple-expr.h"
+ #include "stringpool.h"
+ #include "cgraph.h"
+ #include "predict.h"
+ #include "diagnostic.h"
+ #include "alias.h"
+ #include "fold-const.h"
+ #include "stor-layout.h"
+ #include "stmt.h"
+ #include "varasm.h"
+ #include "output.h"
+ #include "debug.h"
+ #include "libfuncs.h"	/* For set_stack_check_libfunc.  */
+ #include "tree-iterator.h"
+ #include "gimplify.h"
+ #include "opts.h"
+ #include "common/common-target.h"
+ #include "gomp-constants.h"
+ #include "stringpool.h"
+ #include "attribs.h"
+ #include "tree-nested.h"
+ 
+ #include "ada.h"
+ #include "adadecode.h"
+ #include "types.h"
+ #include "atree.h"
+ #include "namet.h"
+ #include "nlists.h"
+ #include "snames.h"
+ #include "stringt.h"
+ #include "uintp.h"
+ #include "urealp.h"
+ #include "fe.h"
+ #include "sinfo.h"
+ #include "einfo.h"
+ #include "gadaint.h"
+ #include "ada-tree.h"
+ #include "gigi.h"
+ 
+ /* We should avoid allocating more than ALLOCA_THRESHOLD bytes via alloca,
+    for fear of running out of stack space.  If we need more, we use xmalloc
+    instead.  */
+ #define ALLOCA_THRESHOLD 1000
+ 
+ /* Pointers to front-end tables accessed through macros.  */
+ Node_Header *Node_Offsets_Ptr;
+ any_slot *Slots_Ptr;
+ Node_Id *Next_Node_Ptr;
+ Node_Id *Prev_Node_Ptr;
+ struct Elist_Header *Elists_Ptr;
+ struct Elmt_Item *Elmts_Ptr;
+ struct String_Entry *Strings_Ptr;
+ Char_Code *String_Chars_Ptr;
+ struct List_Header *List_Headers_Ptr;
+ 
+ /* Highest number in the front-end node table.  */
+ int max_gnat_nodes;
+ 
+ /* True when gigi is being called on an analyzed but unexpanded
+    tree, and the only purpose of the call is to properly annotate
+    types with representation information.  */
+ bool type_annotate_only;
+ 
+ /* List of N_Validate_Unchecked_Conversion nodes in the unit.  */
+ static vec<Node_Id> gnat_validate_uc_list;
+ 
+ /* List of expressions of pragma Compile_Time_{Error|Warning} in the unit.  */
+ static vec<Node_Id> gnat_compile_time_expr_list;
+ 
+ /* When not optimizing, we cache the 'First, 'Last and 'Length attributes
+    of unconstrained array IN parameters to avoid emitting a great deal of
+    redundant instructions to recompute them each time.  */
+ struct GTY (()) parm_attr_d {
+   int id; /* GTY doesn't like Entity_Id.  */
+   int dim;
+   tree first;
+   tree last;
+   tree length;
+ };
+ 
+ typedef struct parm_attr_d *parm_attr;
+ 
+ /* Structure used to record information for a function.  */
+ struct GTY(()) language_function {
+   vec<parm_attr, va_gc> *parm_attr_cache;
+   bitmap named_ret_val;
+   vec<tree, va_gc> *other_ret_val;
+   int gnat_ret;
+ };
+ 
+ #define f_parm_attr_cache \
+   DECL_STRUCT_FUNCTION (current_function_decl)->language->parm_attr_cache
+ 
+ #define f_named_ret_val \
+   DECL_STRUCT_FUNCTION (current_function_decl)->language->named_ret_val
+ 
+ #define f_other_ret_val \
+   DECL_STRUCT_FUNCTION (current_function_decl)->language->other_ret_val
+ 
+ #define f_gnat_ret \
+   DECL_STRUCT_FUNCTION (current_function_decl)->language->gnat_ret
+ 
+ /* A structure used to gather together information about a statement group.
+    We use this to gather related statements, for example the "then" part
+    of a IF.  In the case where it represents a lexical scope, we may also
+    have a BLOCK node corresponding to it and/or cleanups.  */
+ 
+ struct GTY((chain_next ("%h.previous"))) stmt_group {
+   struct stmt_group *previous;	/* Previous code group.  */
+   tree stmt_list;		/* List of statements for this code group.  */
+   tree block;			/* BLOCK for this code group, if any.  */
+   tree cleanups;		/* Cleanups for this code group, if any.  */
+ };
+ 
+ static GTY(()) struct stmt_group *current_stmt_group;
+ 
+ /* List of unused struct stmt_group nodes.  */
+ static GTY((deletable)) struct stmt_group *stmt_group_free_list;
+ 
+ /* A structure used to record information on elaboration procedures
+    we've made and need to process.
+ 
+    ??? gnat_node should be Node_Id, but gengtype gets confused.  */
+ 
+ struct GTY((chain_next ("%h.next"))) elab_info {
+   struct elab_info *next;	/* Pointer to next in chain.  */
+   tree elab_proc;		/* Elaboration procedure.  */
+   int gnat_node;		/* The N_Compilation_Unit.  */
+ };
+ 
+ static GTY(()) struct elab_info *elab_info_list;
+ 
+ /* Stack of exception pointer variables.  Each entry is the VAR_DECL
+    that stores the address of the raised exception.  Nonzero means we
+    are in an exception handler.  Not used in the zero-cost case.  */
+ static GTY(()) vec<tree, va_gc> *gnu_except_ptr_stack;
+ 
+ /* In ZCX case, current exception pointer.  Used to re-raise it.  */
+ static GTY(()) tree gnu_incoming_exc_ptr;
+ 
+ /* Stack for storing the current elaboration procedure decl.  */
+ static GTY(()) vec<tree, va_gc> *gnu_elab_proc_stack;
+ 
+ /* Stack of labels to be used as a goto target instead of a return in
+    some functions.  See processing for N_Subprogram_Body.  */
+ static GTY(()) vec<tree, va_gc> *gnu_return_label_stack;
+ 
+ /* Stack of variable for the return value of a function with copy-in/copy-out
+    parameters.  See processing for N_Subprogram_Body.  */
+ static GTY(()) vec<tree, va_gc> *gnu_return_var_stack;
+ 
+ /* Structure used to record information for a range check.  */
+ struct GTY(()) range_check_info_d {
+   tree low_bound;
+   tree high_bound;
+   tree disp;
+   bool neg_p;
+   tree type;
+   tree invariant_cond;
+   tree inserted_cond;
+ };
+ 
+ typedef struct range_check_info_d *range_check_info;
+ 
+ /* Structure used to record information for a loop.  */
+ struct GTY(()) loop_info_d {
+   tree fndecl;
+   tree stmt;
+   tree loop_var;
+   tree low_bound;
+   tree high_bound;
+   tree omp_loop_clauses;
+   tree omp_construct_clauses;
+   enum tree_code omp_code;
+   vec<range_check_info, va_gc> *checks;
+   vec<tree, va_gc> *invariants;
+ };
+ 
+ typedef struct loop_info_d *loop_info;
+ 
+ /* Stack of loop_info structures associated with LOOP_STMT nodes.  */
+ static GTY(()) vec<loop_info, va_gc> *gnu_loop_stack;
+ 
+ /* The stacks for N_{Push,Pop}_*_Label.  */
+ static vec<Entity_Id> gnu_constraint_error_label_stack;
+ static vec<Entity_Id> gnu_storage_error_label_stack;
+ static vec<Entity_Id> gnu_program_error_label_stack;
+ 
+ /* Map GNAT tree codes to GCC tree codes for simple expressions.  */
+ static enum tree_code gnu_codes[Number_Node_Kinds];
+ 
+ static void init_code_table (void);
+ static tree get_elaboration_procedure (void);
+ static void Compilation_Unit_to_gnu (Node_Id);
+ static bool empty_stmt_list_p (tree);
+ static void record_code_position (Node_Id);
+ static void insert_code_for (Node_Id);
+ static void add_cleanup (tree, Node_Id);
+ static void add_stmt_list (List_Id);
+ static tree build_stmt_group (List_Id, bool);
+ static inline bool stmt_group_may_fallthru (void);
+ static enum gimplify_status gnat_gimplify_stmt (tree *);
+ static void elaborate_all_entities (Node_Id);
+ static void process_freeze_entity (Node_Id);
+ static void process_decls (List_Id, List_Id, Node_Id, bool, bool);
+ 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 tree assoc_to_constructor (Entity_Id, Node_Id, tree);
+ static tree pos_to_constructor (Node_Id, tree);
+ static void validate_unchecked_conversion (Node_Id);
+ static void set_expr_location_from_node (tree, Node_Id, bool = false);
+ static void set_gnu_expr_location_from_node (tree, Node_Id);
+ static bool set_end_locus_from_node (tree, Node_Id);
+ static int lvalue_required_p (Node_Id, tree, bool, bool);
+ static tree build_raise_check (int, enum exception_info_kind);
+ static tree create_init_temporary (const char *, tree, tree *, Node_Id);
+ static bool maybe_make_gnu_thunk (Entity_Id gnat_thunk, tree gnu_thunk);
+ 
+ /* This makes gigi's file_info_ptr visible in this translation unit,
+    so that Sloc_to_locus can look it up when deciding whether to map
+    decls to instances.  */
+ 
+ static struct File_Info_Type *file_map;
+ 
+ /* Return the string of the identifier allocated for the file name Id.  */
+ 
+ static const char*
+ File_Name_to_gnu (Name_Id Id)
+ {
+   /* __gnat_to_canonical_file_spec translates file names from pragmas
+      Source_Reference that contain host style syntax not understood by GDB.  */
+   const char *name = __gnat_to_canonical_file_spec (Get_Name_String (Id));
+ 
+   /* Use the identifier table to make a permanent copy of the file name as
+      the name table gets reallocated after Gigi returns but before all the
+      debugging information is output.  */
+   return IDENTIFIER_POINTER (get_identifier (name));
+ }
+ 
+ /* This is the main program of the back-end.  It sets up all the table
+    structures and then generates code.  */
+ 
+ void
+ gigi (Node_Id gnat_root,
+       int max_gnat_node,
+       int number_name ATTRIBUTE_UNUSED,
+       Node_Header *node_offsets_ptr,
+       any_slot *slots_ptr,
+       Node_Id *next_node_ptr,
+       Node_Id *prev_node_ptr,
+       struct Elist_Header *elists_ptr,
+       struct Elmt_Item *elmts_ptr,
+       struct String_Entry *strings_ptr,
+       Char_Code *string_chars_ptr,
+       struct List_Header *list_headers_ptr,
+       Nat number_file,
+       struct File_Info_Type *file_info_ptr,
+       Entity_Id standard_boolean,
+       Entity_Id standard_integer,
+       Entity_Id standard_character,
+       Entity_Id standard_long_long_float,
+       Entity_Id standard_exception_type,
+       Int gigi_operating_mode)
+ {
+   Node_Id gnat_iter;
+   Entity_Id gnat_literal;
+   tree t, ftype, int64_type;
+   struct elab_info *info;
+   int i;
+ 
+   max_gnat_nodes = max_gnat_node;
+ 
+   Node_Offsets_Ptr = node_offsets_ptr;
+   Slots_Ptr = slots_ptr;
+   Next_Node_Ptr = next_node_ptr;
+   Prev_Node_Ptr = prev_node_ptr;
+   Elists_Ptr = elists_ptr;
+   Elmts_Ptr = elmts_ptr;
+   Strings_Ptr = strings_ptr;
+   String_Chars_Ptr = string_chars_ptr;
+   List_Headers_Ptr = list_headers_ptr;
+ 
+   type_annotate_only = (gigi_operating_mode == 1);
+ 
+   if (Generate_SCO_Instance_Table != 0)
+     {
+       file_map = file_info_ptr;
+       maybe_create_decl_to_instance_map (number_file);
+     }
+ 
+   for (i = 0; i < number_file; i++)
+     {
+       /* We rely on the order isomorphism between files and line maps.  */
+       if ((int) LINEMAPS_ORDINARY_USED (line_table) != i)
+ 	{
+ 	  gcc_assert (i > 0);
+ 	  error ("%s contains too many lines",
+ 		 File_Name_to_gnu (file_info_ptr[i - 1].File_Name));
+ 	}
+ 
+       /* We create the line map for a source file at once, with a fixed number
+ 	 of columns chosen to avoid jumping over the next power of 2.  */
+       linemap_add (line_table, LC_ENTER, 0,
+ 		   File_Name_to_gnu (file_info_ptr[i].File_Name), 1);
+       linemap_line_start (line_table, file_info_ptr[i].Num_Source_Lines, 252);
+       linemap_position_for_column (line_table, 252 - 1);
+       linemap_add (line_table, LC_LEAVE, 0, NULL, 0);
+     }
+ 
+   gcc_assert (Nkind (gnat_root) == N_Compilation_Unit);
+ 
+   /* Declare the name of the compilation unit as the first global
+      name in order to make the middle-end fully deterministic.  */
+   t = create_concat_name (Defining_Entity (Unit (gnat_root)), NULL);
+   first_global_object_name = ggc_strdup (IDENTIFIER_POINTER (t));
+ 
+   /* Initialize ourselves.  */
+   init_code_table ();
+   init_gnat_decl ();
+   init_gnat_utils ();
+ 
+   /* If we are just annotating types, give VOID_TYPE zero sizes to avoid
+      errors.  */
+   if (type_annotate_only)
+     {
+       TYPE_SIZE (void_type_node) = bitsize_zero_node;
+       TYPE_SIZE_UNIT (void_type_node) = size_zero_node;
+     }
+ 
+   /* Enable GNAT stack checking method if needed */
+   if (!Stack_Check_Probes_On_Target)
+     set_stack_check_libfunc ("_gnat_stack_check");
+ 
+   /* Retrieve alignment settings.  */
+   double_float_alignment = get_target_double_float_alignment ();
+   double_scalar_alignment = get_target_double_scalar_alignment ();
+ 
+   /* Record the builtin types.  Define `integer' and `character' first so that
+      dbx will output them first.  */
+   record_builtin_type ("integer", integer_type_node, false);
+   record_builtin_type ("character", char_type_node, false);
+   record_builtin_type ("boolean", boolean_type_node, false);
+   record_builtin_type ("void", void_type_node, false);
+ 
+   /* Save the type we made for integer as the type for Standard.Integer.  */
+   save_gnu_tree (Base_Type (standard_integer),
+ 		 TYPE_NAME (integer_type_node),
+ 		 false);
+ 
+   /* Likewise for character as the type for Standard.Character.  */
+   finish_character_type (char_type_node);
+   save_gnu_tree (Base_Type (standard_character),
+ 		 TYPE_NAME (char_type_node),
+ 		 false);
+ 
+   /* Likewise for boolean as the type for Standard.Boolean.  */
+   save_gnu_tree (Base_Type (standard_boolean),
+ 		 TYPE_NAME (boolean_type_node),
+ 		 false);
+   gnat_literal = First_Literal (Base_Type (standard_boolean));
+   t = UI_To_gnu (Enumeration_Rep (gnat_literal), boolean_type_node);
+   gcc_assert (t == boolean_false_node);
+   t = create_var_decl (get_entity_name (gnat_literal), NULL_TREE,
+ 		       boolean_type_node, t, true, false, false, false, false,
+ 		       true, false, NULL, gnat_literal);
+   save_gnu_tree (gnat_literal, t, false);
+   gnat_literal = Next_Literal (gnat_literal);
+   t = UI_To_gnu (Enumeration_Rep (gnat_literal), boolean_type_node);
+   gcc_assert (t == boolean_true_node);
+   t = create_var_decl (get_entity_name (gnat_literal), NULL_TREE,
+ 		       boolean_type_node, t, true, false, false, false, false,
+ 		       true, false, NULL, gnat_literal);
+   save_gnu_tree (gnat_literal, t, false);
+ 
+   /* Declare the building blocks of function nodes.  */
+   void_list_node = build_tree_list (NULL_TREE, void_type_node);
+   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
+   ptr_void_ftype = build_pointer_type (void_ftype);
+ 
+   /* Now declare run-time functions.  */
+   malloc_decl
+     = create_subprog_decl (get_identifier ("__gnat_malloc"), NULL_TREE,
+ 			   build_function_type_list (ptr_type_node, sizetype,
+ 						     NULL_TREE),
+ 			   NULL_TREE, is_default, true, true, true, false,
+ 			   false, NULL, Empty);
+   DECL_IS_MALLOC (malloc_decl) = 1;
+ 
+   free_decl
+     = create_subprog_decl (get_identifier ("__gnat_free"), NULL_TREE,
+ 			   build_function_type_list (void_type_node,
+ 						     ptr_type_node, NULL_TREE),
+ 			   NULL_TREE, is_default, true, true, true, false,
+ 			   false, NULL, Empty);
+ 
+   realloc_decl
+     = create_subprog_decl (get_identifier ("__gnat_realloc"), NULL_TREE,
+ 			   build_function_type_list (ptr_type_node,
+ 						     ptr_type_node, sizetype,
+ 						     NULL_TREE),
+ 			   NULL_TREE, is_default, true, true, true, false,
+ 			   false, NULL, Empty);
+ 
+   /* This is used for 64-bit multiplication with overflow checking.  */
+   int64_type = gnat_type_for_size (64, 0);
+   mulv64_decl
+     = create_subprog_decl (get_identifier ("__gnat_mulv64"), NULL_TREE,
+ 			   build_function_type_list (int64_type, int64_type,
+ 						     int64_type, NULL_TREE),
+ 			   NULL_TREE, is_default, true, true, true, false,
+ 			   false, NULL, Empty);
+ 
+   if (Enable_128bit_Types)
+     {
+       tree int128_type = gnat_type_for_size (128, 0);
+       mulv128_decl
+ 	= create_subprog_decl (get_identifier ("__gnat_mulv128"), NULL_TREE,
+ 			       build_function_type_list (int128_type,
+ 							 int128_type,
+ 							 int128_type,
+ 							 NULL_TREE),
+ 			       NULL_TREE, is_default, true, true, true, false,
+ 			       false, NULL, Empty);
+     }
+ 
+   /* Name of the _Parent field in tagged record types.  */
+   parent_name_id = get_identifier (Get_Name_String (Name_uParent));
+ 
+   /* Name of the Not_Handled_By_Others field in exception record types.  */
+   not_handled_by_others_name_id = get_identifier ("not_handled_by_others");
+ 
+   /* Make the types and functions used for exception processing.  */
+   except_type_node = gnat_to_gnu_type (Base_Type (standard_exception_type));
+ 
+   for (t = TYPE_FIELDS (except_type_node); t; t = DECL_CHAIN (t))
+     if (DECL_NAME (t) == not_handled_by_others_name_id)
+       {
+ 	not_handled_by_others_decl = t;
+ 	break;
+       }
+   gcc_assert (DECL_P (not_handled_by_others_decl));
+ 
+   jmpbuf_type
+     = build_array_type (gnat_type_for_mode (Pmode, 0),
+ 			build_index_type (size_int (5)));
+   record_builtin_type ("JMPBUF_T", jmpbuf_type, true);
+   jmpbuf_ptr_type = build_pointer_type (jmpbuf_type);
+ 
+   /* Functions to get and set the jumpbuf pointer for the current thread.  */
+   get_jmpbuf_decl
+     = create_subprog_decl
+       (get_identifier ("system__soft_links__get_jmpbuf_address_soft"),
+        NULL_TREE, build_function_type_list (jmpbuf_ptr_type, NULL_TREE),
+        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
+ 
+   set_jmpbuf_decl
+     = create_subprog_decl
+       (get_identifier ("system__soft_links__set_jmpbuf_address_soft"),
+        NULL_TREE, build_function_type_list (void_type_node, jmpbuf_ptr_type,
+ 					    NULL_TREE),
+        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
+ 
+   get_excptr_decl
+     = create_subprog_decl
+       (get_identifier ("system__soft_links__get_gnat_exception"), NULL_TREE,
+        build_function_type_list (build_pointer_type (except_type_node),
+ 				 NULL_TREE),
+        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
+ 
+   /* setjmp returns an integer and has one operand, which is a pointer to
+      a jmpbuf.  */
+   setjmp_decl
+     = create_subprog_decl
+       (get_identifier ("__builtin_setjmp"), NULL_TREE,
+        build_function_type_list (integer_type_node, jmpbuf_ptr_type,
+ 				 NULL_TREE),
+        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
+   set_decl_built_in_function (setjmp_decl, BUILT_IN_NORMAL, BUILT_IN_SETJMP);
+ 
+   /* update_setjmp_buf updates a setjmp buffer from the current stack pointer
+      address.  */
+   update_setjmp_buf_decl
+     = create_subprog_decl
+       (get_identifier ("__builtin_update_setjmp_buf"), NULL_TREE,
+        build_function_type_list (void_type_node, jmpbuf_ptr_type, NULL_TREE),
+        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
+   set_decl_built_in_function (update_setjmp_buf_decl, BUILT_IN_NORMAL,
+ 			      BUILT_IN_UPDATE_SETJMP_BUF);
+ 
+   /* Indicate that it never returns.  */
+   ftype = build_function_type_list (void_type_node,
+ 				    build_pointer_type (except_type_node),
+ 				    NULL_TREE);
+   ftype = build_qualified_type (ftype, TYPE_QUAL_VOLATILE);
+   raise_nodefer_decl
+     = create_subprog_decl
+       (get_identifier ("__gnat_raise_nodefer_with_msg"), NULL_TREE, ftype,
+        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
+ 
+   set_exception_parameter_decl
+     = create_subprog_decl
+       (get_identifier ("__gnat_set_exception_parameter"), NULL_TREE,
+        build_function_type_list (void_type_node, ptr_type_node, ptr_type_node,
+ 				 NULL_TREE),
+        NULL_TREE, is_default, true, true, true, false, false, NULL, Empty);
+ 
+   /* Hooks to call when entering/leaving an exception handler.  */
+   ftype = build_function_type_list (ptr_type_node,
+ 				    ptr_type_node, NULL_TREE);
+   begin_handler_decl
+     = create_subprog_decl (get_identifier ("__gnat_begin_handler_v1"),
+ 			   NULL_TREE, ftype, NULL_TREE,
+ 			   is_default, true, true, true, false, false, NULL,
+ 			   Empty);
+   /* __gnat_begin_handler_v1 is not a dummy procedure, but we arrange
+      for it not to throw.  */
+   TREE_NOTHROW (begin_handler_decl) = 1;
+ 
+   ftype = build_function_type_list (ptr_type_node,
+ 				    ptr_type_node, ptr_type_node,
+ 				    ptr_type_node, NULL_TREE);
+   end_handler_decl
+     = create_subprog_decl (get_identifier ("__gnat_end_handler_v1"), NULL_TREE,
+ 			   ftype, NULL_TREE,
+ 			   is_default, true, true, true, false, false, NULL,
+ 			   Empty);
+ 
+   ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
+   unhandled_except_decl
+     = create_subprog_decl (get_identifier ("__gnat_unhandled_except_handler"),
+ 			   NULL_TREE, ftype, NULL_TREE,
+ 			   is_default, true, true, true, false, false, NULL,
+ 			   Empty);
+ 
+   /* Indicate that it never returns.  */
+   ftype = build_qualified_type (ftype, TYPE_QUAL_VOLATILE);
+   reraise_zcx_decl
+     = create_subprog_decl (get_identifier ("__gnat_reraise_zcx"), NULL_TREE,
+ 			   ftype, NULL_TREE,
+ 			   is_default, true, true, true, false, false, NULL,
+ 			   Empty);
+ 
+   /* Dummy objects to materialize "others" and "all others" in the exception
+      tables.  These are exported by a-exexpr-gcc.adb, so see this unit for
+      the types to use.  */
+   others_decl
+     = create_var_decl (get_identifier ("OTHERS"),
+ 		       get_identifier ("__gnat_others_value"),
+ 		       char_type_node, NULL_TREE,
+ 		       true, false, true, false, false, true, false,
+ 		       NULL, Empty);
+ 
+   all_others_decl
+     = create_var_decl (get_identifier ("ALL_OTHERS"),
+ 		       get_identifier ("__gnat_all_others_value"),
+ 		       char_type_node, NULL_TREE,
+ 		       true, false, true, false, false, true, false,
+ 		       NULL, Empty);
+ 
+   unhandled_others_decl
+     = create_var_decl (get_identifier ("UNHANDLED_OTHERS"),
+ 		       get_identifier ("__gnat_unhandled_others_value"),
+ 		       char_type_node, NULL_TREE,
+ 		       true, false, true, false, false, true, false,
+ 		       NULL, Empty);
+ 
+   /* If in no exception handlers mode, all raise statements are redirected to
+      __gnat_last_chance_handler.  No need to redefine raise_nodefer_decl since
+      this procedure will never be called in this mode.  */
+   if (No_Exception_Handlers_Set ())
+     {
+       /* Indicate that it never returns.  */
+       ftype = build_function_type_list (void_type_node,
+ 					build_pointer_type (char_type_node),
+ 					integer_type_node, NULL_TREE);
+       ftype = build_qualified_type (ftype, TYPE_QUAL_VOLATILE);
+       tree decl
+ 	= create_subprog_decl
+ 	  (get_identifier ("__gnat_last_chance_handler"), NULL_TREE, ftype,
+ 	   NULL_TREE, is_default, true, true, true, false, false, NULL,
+ 	   Empty);
+       for (i = 0; i < (int) ARRAY_SIZE (gnat_raise_decls); i++)
+ 	gnat_raise_decls[i] = decl;
+     }
+   else
+     {
+       /* Otherwise, make one decl for each exception reason.  */
+       for (i = 0; i < (int) ARRAY_SIZE (gnat_raise_decls); i++)
+ 	gnat_raise_decls[i] = build_raise_check (i, exception_simple);
+       for (i = 0; i < (int) ARRAY_SIZE (gnat_raise_decls_ext); i++)
+ 	gnat_raise_decls_ext[i]
+ 	  = build_raise_check (i,
+ 			       i == CE_Index_Check_Failed
+ 			       || i == CE_Range_Check_Failed
+ 			       || i == CE_Invalid_Data
+ 			       ? exception_range : exception_column);
+     }
+ 
+   /* Build the special descriptor type and its null node if needed.  */
+   if (TARGET_VTABLE_USES_DESCRIPTORS)
+     {
+       tree null_node = fold_convert (ptr_void_ftype, null_pointer_node);
+       tree field_list = NULL_TREE;
+       int j;
+       vec<constructor_elt, va_gc> *null_vec = NULL;
+       constructor_elt *elt;
+ 
+       fdesc_type_node = make_node (RECORD_TYPE);
+       vec_safe_grow (null_vec, TARGET_VTABLE_USES_DESCRIPTORS, true);
+       elt = (null_vec->address () + TARGET_VTABLE_USES_DESCRIPTORS - 1);
+ 
+       for (j = 0; j < TARGET_VTABLE_USES_DESCRIPTORS; j++)
+ 	{
+ 	  tree field
+ 	    = create_field_decl (NULL_TREE, ptr_void_ftype, fdesc_type_node,
+ 				 NULL_TREE, NULL_TREE, 0, 1);
+ 	  DECL_CHAIN (field) = field_list;
+ 	  field_list = field;
+ 	  elt->index = field;
+ 	  elt->value = null_node;
+ 	  elt--;
+ 	}
+ 
+       finish_record_type (fdesc_type_node, nreverse (field_list), 0, false);
+       record_builtin_type ("descriptor", fdesc_type_node, true);
+       null_fdesc_node = gnat_build_constructor (fdesc_type_node, null_vec);
+     }
+ 
+   longest_float_type_node
+     = get_unpadded_type (Base_Type (standard_long_long_float));
+ 
+   main_identifier_node = get_identifier ("main");
+ 
+   /* If we are using the GCC exception mechanism, let GCC know.  */
+   if (Back_End_Exceptions ())
+     gnat_init_gcc_eh ();
+ 
+   /* Initialize the GCC support for FP operations.  */
+   gnat_init_gcc_fp ();
+ 
+   /* Install the builtins we might need, either internally or as user-available
+      facilities for Intrinsic imports.  Note that this must be done after the
+      GCC exception mechanism is initialized.  */
+   gnat_install_builtins ();
+ 
+   vec_safe_push (gnu_except_ptr_stack, NULL_TREE);
+ 
+   gnu_constraint_error_label_stack.safe_push (Empty);
+   gnu_storage_error_label_stack.safe_push (Empty);
+   gnu_program_error_label_stack.safe_push (Empty);
+ 
+   /* Process any Pragma Ident for the main unit.  */
+   if (Present (Ident_String (Main_Unit)))
+     targetm.asm_out.output_ident
+       (TREE_STRING_POINTER (gnat_to_gnu (Ident_String (Main_Unit))));
+ 
+   /* Force -fno-strict-aliasing if the configuration pragma was seen.  */
+   if (No_Strict_Aliasing_CP)
+     flag_strict_aliasing = 0;
+ 
+   /* Save the current optimization options again after the above possible
+      global_options changes.  */
+   optimization_default_node
+     = build_optimization_node (&global_options, &global_options_set);
+   optimization_current_node = optimization_default_node;
+ 
+   /* Now translate the compilation unit proper.  */
+   Compilation_Unit_to_gnu (gnat_root);
+ 
+   /* Then process the N_Validate_Unchecked_Conversion nodes.  We do this at
+      the very end to avoid having to second-guess the front-end when we run
+      into dummy nodes during the regular processing.  */
+   for (i = 0; gnat_validate_uc_list.iterate (i, &gnat_iter); i++)
+     validate_unchecked_conversion (gnat_iter);
+   gnat_validate_uc_list.release ();
+ 
+   /* Finally see if we have any elaboration procedures to deal with.  */
+   for (info = elab_info_list; info; info = info->next)
+     {
+       tree gnu_body = DECL_SAVED_TREE (info->elab_proc);
+ 
+       /* We should have a BIND_EXPR but it may not have any statements in it.
+ 	 If it doesn't have any, we have nothing to do except for setting the
+ 	 flag on the GNAT node.  Otherwise, process the function as others.  */
+       tree gnu_stmts = gnu_body;
+       if (TREE_CODE (gnu_stmts) == BIND_EXPR)
+ 	gnu_stmts = BIND_EXPR_BODY (gnu_stmts);
+       if (!gnu_stmts || empty_stmt_list_p (gnu_stmts))
+ 	Set_Has_No_Elaboration_Code (info->gnat_node, 1);
+       else
+ 	{
+ 	  begin_subprog_body (info->elab_proc);
+ 	  end_subprog_body (gnu_body);
+ 	  rest_of_subprog_body_compilation (info->elab_proc);
+ 	}
+     }
+ 
+   /* Destroy ourselves.  */
+   file_map = NULL;
+   destroy_gnat_decl ();
+   destroy_gnat_utils ();
+ 
+   /* We cannot track the location of errors past this point.  */
+   Current_Error_Node = Empty;
+ }
+ 
+ /* Return a subprogram decl corresponding to __gnat_rcheck_xx for the given
+    CHECK if KIND is EXCEPTION_SIMPLE, or else to __gnat_rcheck_xx_ext.  */
+ 
+ static tree
+ build_raise_check (int check, enum exception_info_kind kind)
+ {
+   tree result, ftype;
+   const char pfx[] = "__gnat_rcheck_";
+ 
+   strcpy (Name_Buffer, pfx);
+   Name_Len = sizeof (pfx) - 1;
+   Get_RT_Exception_Name ((enum RT_Exception_Code) check);
+ 
+   if (kind == exception_simple)
+     {
+       Name_Buffer[Name_Len] = 0;
+       ftype
+ 	= build_function_type_list (void_type_node,
+ 				    build_pointer_type (char_type_node),
+ 				    integer_type_node, NULL_TREE);
+     }
+   else
+     {
+       tree t = (kind == exception_column ? NULL_TREE : integer_type_node);
+ 
+       strcpy (Name_Buffer + Name_Len, "_ext");
+       Name_Buffer[Name_Len + 4] = 0;
+       ftype
+ 	= build_function_type_list (void_type_node,
+ 				    build_pointer_type (char_type_node),
+ 				    integer_type_node, integer_type_node,
+ 				    t, t, NULL_TREE);
+     }
+ 
+   /* Indicate that it never returns.  */
+   ftype = build_qualified_type (ftype, TYPE_QUAL_VOLATILE);
+   result
+     = create_subprog_decl (get_identifier (Name_Buffer), NULL_TREE, ftype,
+ 			   NULL_TREE, is_default, true, true, true, false,
+ 			   false, NULL, Empty);
+ 
+   return result;
+ }
+ 
+ /* Return a positive value if an lvalue is required for GNAT_NODE, which is
+    an N_Attribute_Reference.  */
+ 
+ static int
+ lvalue_required_for_attribute_p (Node_Id gnat_node)
+ {
+   switch (Get_Attribute_Id (Attribute_Name (gnat_node)))
+     {
+     case Attr_Pred:
+     case Attr_Succ:
+     case Attr_First:
+     case Attr_Last:
+     case Attr_Range_Length:
+     case Attr_Length:
+     case Attr_Object_Size:
+     case Attr_Size:
+     case Attr_Value_Size:
+     case Attr_Component_Size:
+     case Attr_Descriptor_Size:
+     case Attr_Max_Size_In_Storage_Elements:
+     case Attr_Min:
+     case Attr_Max:
+     case Attr_Null_Parameter:
+     case Attr_Passed_By_Reference:
+     case Attr_Mechanism_Code:
+     case Attr_Machine:
+     case Attr_Model:
+       return 0;
+ 
+     case Attr_Address:
+     case Attr_Access:
+     case Attr_Unchecked_Access:
+     case Attr_Unrestricted_Access:
+     case Attr_Code_Address:
+     case Attr_Pool_Address:
+     case Attr_Alignment:
+     case Attr_Bit_Position:
+     case Attr_Position:
+     case Attr_First_Bit:
+     case Attr_Last_Bit:
+     case Attr_Bit:
+     case Attr_Asm_Input:
+     case Attr_Asm_Output:
+     default:
+       return 1;
+     }
+ }
+ 
+ /* Return a positive value if an lvalue is required for GNAT_NODE.  GNU_TYPE
+    is the type that will be used for GNAT_NODE in the translated GNU tree.
+    CONSTANT indicates whether the underlying object represented by GNAT_NODE
+    is constant in the Ada sense.  If it is, ADDRESS_OF_CONSTANT indicates
+    whether its value is the address of another constant.  If it isn't, then
+    ADDRESS_OF_CONSTANT is ignored.
+ 
+    The function climbs up the GNAT tree starting from the node and returns 1
+    upon encountering a node that effectively requires an lvalue downstream.
+    It returns int instead of bool to facilitate usage in non-purely binary
+    logic contexts.  */
+ 
+ static int
+ lvalue_required_p (Node_Id gnat_node, tree gnu_type, bool constant,
+ 		   bool address_of_constant)
+ {
+   Node_Id gnat_parent = Parent (gnat_node), gnat_temp;
+ 
+   switch (Nkind (gnat_parent))
+     {
+     case N_Reference:
+       return 1;
+ 
+     case N_Attribute_Reference:
+       return lvalue_required_for_attribute_p (gnat_parent);
+ 
+     case N_Parameter_Association:
+     case N_Function_Call:
+     case N_Procedure_Call_Statement:
+       /* If the parameter is by reference, an lvalue is required.  */
+       return (!constant
+ 	      || must_pass_by_ref (gnu_type)
+ 	      || default_pass_by_ref (gnu_type));
+ 
+     case N_Pragma_Argument_Association:
+       return lvalue_required_p (gnat_parent, gnu_type, constant,
+ 				address_of_constant);
+ 
+     case N_Pragma:
+       if (Is_Pragma_Name (Chars (Pragma_Identifier (gnat_parent))))
+ 	{
+ 	  const unsigned char id
+ 	    = Get_Pragma_Id (Chars (Pragma_Identifier (gnat_parent)));
+ 	  return id == Pragma_Inspection_Point;
+ 	}
+       else
+ 	return 0;
+ 
+     case N_Indexed_Component:
+       /* Only the array expression can require an lvalue.  */
+       if (Prefix (gnat_parent) != gnat_node)
+ 	return 0;
+ 
+       /* ??? Consider that referencing an indexed component with a variable
+ 	 index forces the whole aggregate to memory.  Note that testing only
+ 	 for literals is conservative, any static expression in the RM sense
+ 	 could probably be accepted with some additional work.  */
+       for (gnat_temp = First (Expressions (gnat_parent));
+ 	   Present (gnat_temp);
+ 	   gnat_temp = Next (gnat_temp))
+ 	if (Nkind (gnat_temp) != N_Character_Literal
+ 	    && Nkind (gnat_temp) != N_Integer_Literal
+ 	    && !(Is_Entity_Name (gnat_temp)
+ 		 && Ekind (Entity (gnat_temp)) == E_Enumeration_Literal))
+ 	  return 1;
+ 
+       /* ... fall through ... */
+ 
+     case N_Selected_Component:
+     case N_Slice:
+       /* Only the prefix expression can require an lvalue.  */
+       if (Prefix (gnat_parent) != gnat_node)
+ 	return 0;
+ 
+       return lvalue_required_p (gnat_parent,
+ 				get_unpadded_type (Etype (gnat_parent)),
+ 				constant, address_of_constant);
+ 
+     case N_Object_Renaming_Declaration:
+       /* We need to preserve addresses through a renaming.  */
+       return 1;
+ 
+     case N_Object_Declaration:
+       /* We cannot use a constructor if this is an atomic object because
+ 	 the actual assignment might end up being done component-wise.  */
+       return (!constant
+ 	      ||(Is_Composite_Type (Underlying_Type (Etype (gnat_node)))
+ 		 && Is_Full_Access (Defining_Entity (gnat_parent)))
+ 	      /* We don't use a constructor if this is a class-wide object
+ 		 because the effective type of the object is the equivalent
+ 		 type of the class-wide subtype and it smashes most of the
+ 		 data into an array of bytes to which we cannot convert.  */
+ 	      || Ekind ((Etype (Defining_Entity (gnat_parent))))
+ 		 == E_Class_Wide_Subtype);
+ 
+     case N_Assignment_Statement:
+       /* We cannot use a constructor if the LHS is an atomic object because
+ 	 the actual assignment might end up being done component-wise.  */
+       return (!constant
+ 	      || Name (gnat_parent) == gnat_node
+ 	      || (Is_Composite_Type (Underlying_Type (Etype (gnat_node)))
+ 		  && Is_Entity_Name (Name (gnat_parent))
+ 		  && Is_Full_Access (Entity (Name (gnat_parent)))));
+ 
+     case N_Unchecked_Type_Conversion:
+ 	if (!constant)
+ 	  return 1;
+ 
+       /* ... fall through ... */
+ 
+     case N_Type_Conversion:
+     case N_Qualified_Expression:
+       /* We must look through all conversions because we may need to bypass
+ 	 an intermediate conversion that is meant to be purely formal.  */
+      return lvalue_required_p (gnat_parent,
+ 			       get_unpadded_type (Etype (gnat_parent)),
+ 			       constant, address_of_constant);
+ 
+    case N_Explicit_Dereference:
+       /* We look through dereferences for address of constant because we need
+ 	 to handle the special cases listed above.  */
+       if (constant && address_of_constant)
+ 	return lvalue_required_p (gnat_parent,
+ 				  get_unpadded_type (Etype (gnat_parent)),
+ 				  true, false);
+ 
+       /* ... fall through ... */
+ 
+     default:
+       return 0;
+     }
+ 
+   gcc_unreachable ();
+ }
+ 
+ /* Return true if an lvalue should be used for GNAT_NODE.  GNU_TYPE is the type
+    that will be used for GNAT_NODE in the translated GNU tree and is assumed to
+    be an aggregate type.
+ 
+    The function climbs up the GNAT tree starting from the node and returns true
+    upon encountering a node that makes it doable to decide.  lvalue_required_p
+    should have been previously invoked on the arguments and returned false.  */
+ 
+ static bool
+ lvalue_for_aggregate_p (Node_Id gnat_node, tree gnu_type)
+ {
+   Node_Id gnat_parent = Parent (gnat_node);
+ 
+   switch (Nkind (gnat_parent))
+     {
+     case N_Parameter_Association:
+     case N_Function_Call:
+     case N_Procedure_Call_Statement:
+       /* Even if the parameter is by copy, prefer an lvalue.  */
+       return true;
+ 
+     case N_Simple_Return_Statement:
+       /* Likewise for a return value.  */
+       return true;
+ 
+     case N_Indexed_Component:
+     case N_Selected_Component:
+       /* If an elementary component is used, take it from the constant.  */
+       if (!Is_Composite_Type (Underlying_Type (Etype (gnat_parent))))
+ 	return false;
+ 
+       /* ... fall through ... */
+ 
+     case N_Slice:
+       return lvalue_for_aggregate_p (gnat_parent,
+ 				     get_unpadded_type (Etype (gnat_parent)));
+ 
+     case N_Object_Declaration:
+       /* For an aggregate object declaration, return false consistently.  */
+       return false;
+ 
+     case N_Assignment_Statement:
+       /* For an aggregate assignment, decide based on the size.  */
+       {
+ 	const HOST_WIDE_INT size = int_size_in_bytes (gnu_type);
+ 	return size < 0 || size >= param_large_stack_frame / 4;
+       }
+ 
+     case N_Unchecked_Type_Conversion:
+     case N_Type_Conversion:
+     case N_Qualified_Expression:
+       return lvalue_for_aggregate_p (gnat_parent,
+ 				     get_unpadded_type (Etype (gnat_parent)));
+ 
+     case N_Allocator:
+       /* We should only reach here through the N_Qualified_Expression case.
+ 	 Force an lvalue for aggregate types since a block-copy to the newly
+ 	 allocated area of memory is made.  */
+       return true;
+ 
+     default:
+       return false;
+     }
+ 
+   gcc_unreachable ();
+ }
+ 
+ 
+ /* Return true if T is a constant DECL node that can be safely replaced
+    by its initializer.  */
+ 
+ static bool
+ constant_decl_with_initializer_p (tree t)
+ {
+   if (!TREE_CONSTANT (t) || !DECL_P (t) || !DECL_INITIAL (t))
+     return false;
+ 
+   /* Return false for aggregate types that contain a placeholder since
+      their initializers cannot be manipulated easily.  */
+   if (AGGREGATE_TYPE_P (TREE_TYPE (t))
+       && !TYPE_IS_FAT_POINTER_P (TREE_TYPE (t))
+       && type_contains_placeholder_p (TREE_TYPE (t)))
+     return false;
+ 
+   return true;
+ }
+ 
+ /* Return an expression equivalent to EXP but where constant DECL nodes
+    have been replaced by their initializer.  */
+ 
+ static tree
+ fold_constant_decl_in_expr (tree exp)
+ {
+   enum tree_code code = TREE_CODE (exp);
+   tree op0;
+ 
+   switch (code)
+     {
+     case CONST_DECL:
+     case VAR_DECL:
+       if (!constant_decl_with_initializer_p (exp))
+ 	return exp;
+ 
+       return DECL_INITIAL (exp);
+ 
+     case COMPONENT_REF:
+       op0 = fold_constant_decl_in_expr (TREE_OPERAND (exp, 0));
+       if (op0 == TREE_OPERAND (exp, 0))
+ 	return exp;
+ 
+       return fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0,
+ 			  TREE_OPERAND (exp, 1), NULL_TREE);
+ 
+     case BIT_FIELD_REF:
+       op0 = fold_constant_decl_in_expr (TREE_OPERAND (exp, 0));
+       if (op0 == TREE_OPERAND (exp, 0))
+ 	return exp;
+ 
+       return fold_build3 (BIT_FIELD_REF, TREE_TYPE (exp), op0,
+ 			  TREE_OPERAND (exp, 1), TREE_OPERAND (exp, 2));
+ 
+     case ARRAY_REF:
+     case ARRAY_RANGE_REF:
+       /* If the index is not itself constant, then nothing can be folded.  */
+       if (!TREE_CONSTANT (TREE_OPERAND (exp, 1)))
+ 	return exp;
+       op0 = fold_constant_decl_in_expr (TREE_OPERAND (exp, 0));
+       if (op0 == TREE_OPERAND (exp, 0))
+ 	return exp;
+ 
+       return fold (build4 (code, TREE_TYPE (exp), op0, TREE_OPERAND (exp, 1),
+ 			   TREE_OPERAND (exp, 2), NULL_TREE));
+ 
+     case REALPART_EXPR:
+     case IMAGPART_EXPR:
+     case VIEW_CONVERT_EXPR:
+       op0 = fold_constant_decl_in_expr (TREE_OPERAND (exp, 0));
+       if (op0 == TREE_OPERAND (exp, 0))
+ 	return exp;
+ 
+       return fold_build1 (code, TREE_TYPE (exp), op0);
+ 
+     default:
+       return exp;
+     }
+ 
+   gcc_unreachable ();
+ }
+ 
+ /* Return true if TYPE and DEF_TYPE are compatible GNAT types for Gigi.  */
+ 
+ static bool
+ Gigi_Types_Compatible (Entity_Id type, Entity_Id def_type)
+ {
+   /* The trivial case.  */
+   if (type == def_type)
+     return true;
+ 
+   /* A class-wide type is equivalent to a subtype of itself.  */
+   if (Is_Class_Wide_Type (type))
+     return true;
+ 
+   /* A packed array type is compatible with its implementation type.  */
+   if (Is_Packed (def_type) && type == Packed_Array_Impl_Type (def_type))
+     return true;
+ 
+   /* If both types are Itypes, one may be a copy of the other.  */
+   if (Is_Itype (def_type) && Is_Itype (type))
+     return true;
+ 
+   /* If the type is incomplete and comes from a limited context, then also
+      consider its non-limited view.  */
+   if (Is_Incomplete_Type (def_type)
+       && From_Limited_With (def_type)
+       && Present (Non_Limited_View (def_type)))
+     return Gigi_Types_Compatible (type, Non_Limited_View (def_type));
+ 
+   /* If the type is incomplete/private, then also consider its full view.  */
+   if (Is_Incomplete_Or_Private_Type (def_type)
+       && Present (Full_View (def_type)))
+     return Gigi_Types_Compatible (type, Full_View (def_type));
+ 
+   return false;
+ }
+ 
+ /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Identifier,
+    to a GCC tree, which is returned.  GNU_RESULT_TYPE_P is a pointer
+    to where we should place the result type.  */
+ 
+ static tree
+ Identifier_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p)
+ {
+   /* The entity of GNAT_NODE and its type.  */
+   Node_Id gnat_entity = (Nkind (gnat_node) == N_Defining_Identifier
+ 			 || Nkind (gnat_node) == N_Defining_Operator_Symbol)
+ 			? gnat_node : Entity (gnat_node);
+   Node_Id gnat_entity_type = Etype (gnat_entity);
+   /* If GNAT_NODE is a constant, whether we should use the initialization
+      value instead of the constant entity, typically for scalars with an
+      address clause when the parent doesn't require an lvalue.  */
+   bool use_constant_initializer = false;
+   /* Whether we should require an lvalue for GNAT_NODE.  Needed in
+      specific circumstances only, so evaluated lazily.  < 0 means
+      unknown, > 0 means known true, 0 means known false.  */
+   int require_lvalue = -1;
+   Entity_Id gnat_result_type;
+   tree gnu_result, gnu_result_type;
+ 
+   /* If the Etype of this node is not the same as that of the Entity, then
+      something went wrong, probably in generic instantiation.  However, this
+      does not apply to types.  Since we sometime have strange Ekind's, just
+      do this test for objects, except for discriminants because their type
+      may have been changed to a subtype by Exp_Ch3.Adjust_Discriminants.  */
+   gcc_assert (!Is_Object (gnat_entity)
+ 	      || Ekind (gnat_entity) == E_Discriminant
+ 	      || Etype (gnat_node) == gnat_entity_type
+ 	      || Gigi_Types_Compatible (Etype (gnat_node), gnat_entity_type));
+ 
+   /* If this is a reference to a deferred constant whose partial view is an
+      unconstrained private type, the proper type is on the full view of the
+      constant, not on the full view of the type, which may be unconstrained.
+ 
+      This may be a reference to a type, for example in the prefix of the
+      attribute Position, generated for dispatching code (see Make_DT in
+      exp_disp,adb). In that case we need the type itself, not is parent,
+      in particular if it is a derived type  */
+   if (Ekind (gnat_entity) == E_Constant
+       && Is_Private_Type (gnat_entity_type)
+       && (Has_Unknown_Discriminants (gnat_entity_type)
+ 	  || (Present (Full_View (gnat_entity_type))
+  	      && Has_Discriminants (Full_View (gnat_entity_type))))
+       && Present (Full_View (gnat_entity)))
+     {
+       gnat_entity = Full_View (gnat_entity);
+       gnat_result_type = Etype (gnat_entity);
+     }
+   else
+     {
+       /* We use the Actual_Subtype only if it has already been elaborated,
+ 	 as we may be invoked precisely during its elaboration, otherwise
+ 	 the Etype.  Avoid using it for packed arrays to simplify things,
+ 	 except in a return statement because we need the actual size and
+ 	 the front-end does not make it explicit in this case.  */
+       if ((Ekind (gnat_entity) == E_Constant
+ 	   || Ekind (gnat_entity) == E_Variable
+ 	   || Is_Formal (gnat_entity))
+ 	  && !(Is_Array_Type (Etype (gnat_entity))
+ 	       && Present (Packed_Array_Impl_Type (Etype (gnat_entity)))
+ 	       && Nkind (Parent (gnat_node)) != N_Simple_Return_Statement)
+ 	  && Present (Actual_Subtype (gnat_entity))
+ 	  && present_gnu_tree (Actual_Subtype (gnat_entity)))
+ 	gnat_result_type = Actual_Subtype (gnat_entity);
+       else
+ 	gnat_result_type = Etype (gnat_node);
+     }
+ 
+   /* Expand the type of this identifier first, in case it is an enumeral
+      literal, which only get made when the type is expanded.  There is no
+      order-of-elaboration issue here.  */
+   gnu_result_type = get_unpadded_type (gnat_result_type);
+ 
+   /* If this is a non-imported elementary constant with an address clause,
+      retrieve the value instead of a pointer to be dereferenced unless
+      an lvalue is required.  This is generally more efficient and actually
+      required if this is a static expression because it might be used
+      in a context where a dereference is inappropriate, such as a case
+      statement alternative or a record discriminant.  There is no possible
+      volatile-ness short-circuit here since Volatile constants must be
+      imported per C.6.  */
+   if (Ekind (gnat_entity) == E_Constant
+       && Is_Elementary_Type (gnat_result_type)
+       && !Is_Imported (gnat_entity)
+       && Present (Address_Clause (gnat_entity)))
+     {
+       require_lvalue
+ 	= lvalue_required_p (gnat_node, gnu_result_type, true, false);
+       use_constant_initializer = !require_lvalue;
+     }
+ 
+   if (use_constant_initializer)
+     {
+       /* If this is a deferred constant, the initializer is attached to
+ 	 the full view.  */
+       if (Present (Full_View (gnat_entity)))
+ 	gnat_entity = Full_View (gnat_entity);
+ 
+       gnu_result = gnat_to_gnu (Expression (Declaration_Node (gnat_entity)));
+     }
+   else
+     gnu_result = gnat_to_gnu_entity (gnat_entity, NULL_TREE, false);
+ 
+   /* Some objects (such as parameters passed by reference, globals of
+      variable size, and renamed objects) actually represent the address
+      of the object.  In that case, we must do the dereference.  Likewise,
+      deal with parameters to foreign convention subprograms.  */
+   if (DECL_P (gnu_result)
+       && (DECL_BY_REF_P (gnu_result)
+ 	  || (TREE_CODE (gnu_result) == PARM_DECL
+ 	      && DECL_BY_COMPONENT_PTR_P (gnu_result))))
+     {
+       const bool read_only = DECL_POINTS_TO_READONLY_P (gnu_result);
+ 
+       /* If it's a PARM_DECL to foreign convention subprogram, convert it.  */
+       if (TREE_CODE (gnu_result) == PARM_DECL
+ 	  && DECL_BY_COMPONENT_PTR_P (gnu_result))
+ 	gnu_result
+ 	  = convert (build_pointer_type (gnu_result_type), gnu_result);
+ 
+       /* If it's a CONST_DECL, return the underlying constant like below.  */
+       else if (TREE_CODE (gnu_result) == CONST_DECL
+ 	       && !(DECL_CONST_ADDRESS_P (gnu_result)
+ 		    && lvalue_required_p (gnat_node, gnu_result_type, true,
+ 					  true)))
+ 	gnu_result = DECL_INITIAL (gnu_result);
+ 
+       /* Do the final dereference.  */
+       gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_result);
+ 
+       if ((TREE_CODE (gnu_result) == INDIRECT_REF
+ 	   || TREE_CODE (gnu_result) == UNCONSTRAINED_ARRAY_REF)
+ 	  && No (Address_Clause (gnat_entity)))
+ 	TREE_THIS_NOTRAP (gnu_result) = 1;
+ 
+       if (read_only)
+ 	TREE_READONLY (gnu_result) = 1;
+     }
+ 
+   /* If we have a constant declaration and its initializer, try to return the
+      latter to avoid the need to call fold in lots of places and the need for
+      elaboration code if this identifier is used as an initializer itself.  */
+   if (constant_decl_with_initializer_p (gnu_result))
+     {
+       bool constant_only = (TREE_CODE (gnu_result) == CONST_DECL
+ 			    && !DECL_CONST_CORRESPONDING_VAR (gnu_result));
+       bool address_of_constant = (TREE_CODE (gnu_result) == CONST_DECL
+ 				  && DECL_CONST_ADDRESS_P (gnu_result));
+ 
+       /* If there is a (corresponding) variable or this is the address of a
+ 	 constant, we only want to return the initializer if an lvalue isn't
+ 	 required.  Evaluate this now if we have not already done so.  */
+       if ((!constant_only || address_of_constant) && require_lvalue < 0)
+ 	require_lvalue
+ 	  = lvalue_required_p (gnat_node, gnu_result_type, true,
+ 			       address_of_constant)
+ 	    || (AGGREGATE_TYPE_P (gnu_result_type)
+ 		&& lvalue_for_aggregate_p (gnat_node, gnu_result_type));
+ 
+       /* Finally retrieve the initializer if this is deemed valid.  */
+       if ((constant_only && !address_of_constant) || !require_lvalue)
+ 	gnu_result = DECL_INITIAL (gnu_result);
+     }
+ 
+   /* But for a constant renaming we couldn't do that incrementally for its
+      definition because of the need to return an lvalue so, if the present
+      context doesn't itself require an lvalue, we try again here.  */
+   else if (Ekind (gnat_entity) == E_Constant
+ 	   && Is_Elementary_Type (gnat_result_type)
+ 	   && Present (Renamed_Object (gnat_entity)))
+     {
+       if (require_lvalue < 0)
+ 	require_lvalue
+ 	  = lvalue_required_p (gnat_node, gnu_result_type, true, false);
+       if (!require_lvalue)
+ 	gnu_result = fold_constant_decl_in_expr (gnu_result);
+     }
+ 
+   /* The GNAT tree has the type of a function set to its result type, so we
+      adjust here.  Also use the type of the result if the Etype is a subtype
+      that is nominally unconstrained.  Likewise if this is a deferred constant
+      of a discriminated type whose full view can be elaborated statically, to
+      avoid problematic conversions to the nominal subtype.  But remove any
+      padding from the resulting type.  */
+   if (FUNC_OR_METHOD_TYPE_P (TREE_TYPE (gnu_result))
+       || Is_Constr_Subt_For_UN_Aliased (gnat_result_type)
+       || (Ekind (gnat_entity) == E_Constant
+ 	  && Present (Full_View (gnat_entity))
+ 	  && Has_Discriminants (gnat_result_type)
+ 	  && TREE_CODE (gnu_result) == CONSTRUCTOR))
+     {
+       gnu_result_type = TREE_TYPE (gnu_result);
+       if (TYPE_IS_PADDING_P (gnu_result_type))
+ 	gnu_result_type = TREE_TYPE (TYPE_FIELDS (gnu_result_type));
+     }
+ 
+   *gnu_result_type_p = gnu_result_type;
+ 
+   return gnu_result;
+ }
+ 
+ /* Subroutine of gnat_to_gnu to process gnat_node, an N_Pragma.  Return
+    any statements we generate.  */
+ 
+ static tree
+ Pragma_to_gnu (Node_Id gnat_node)
+ {
+   tree gnu_result = alloc_stmt_list ();
+   Node_Id gnat_temp;
+ 
+   /* Check for (and ignore) unrecognized pragmas.  */
+   if (!Is_Pragma_Name (Chars (Pragma_Identifier (gnat_node))))
+     return gnu_result;
+ 
+   const unsigned char id
+     = Get_Pragma_Id (Chars (Pragma_Identifier (gnat_node)));
+ 
+   /* Save the expression of pragma Compile_Time_{Error|Warning} for later.  */
+   if (id == Pragma_Compile_Time_Error || id == Pragma_Compile_Time_Warning)
+     {
+       gnat_temp = First (Pragma_Argument_Associations (gnat_node));
+       gnat_compile_time_expr_list.safe_push (Expression (gnat_temp));
+       return gnu_result;
+     }
+ 
+   /* Stop there if we are just annotating types.  */
+   if (type_annotate_only)
+     return gnu_result;
+ 
+   switch (id)
+     {
+     case Pragma_Inspection_Point:
+       /* Do nothing at top level: all such variables are already viewable.  */
+       if (global_bindings_p ())
+ 	break;
+ 
+       for (gnat_temp = First (Pragma_Argument_Associations (gnat_node));
+ 	   Present (gnat_temp);
+ 	   gnat_temp = Next (gnat_temp))
+ 	{
+ 	  Node_Id gnat_expr = Expression (gnat_temp);
+ 	  tree gnu_expr = gnat_to_gnu (gnat_expr);
+ 	  tree asm_constraint = NULL_TREE;
+ #ifdef ASM_COMMENT_START
+ 	  char *comment;
+ #endif
+ 	  gnu_expr = maybe_unconstrained_array (gnu_expr);
+ 	  if (TREE_CODE (gnu_expr) == CONST_DECL
+ 	      && DECL_CONST_CORRESPONDING_VAR (gnu_expr))
+ 	    gnu_expr = DECL_CONST_CORRESPONDING_VAR (gnu_expr);
+ 	  gnat_mark_addressable (gnu_expr);
+ 
+ #ifdef ASM_COMMENT_START
+ 	  comment = concat (ASM_COMMENT_START,
+ 			    " inspection point: ",
+ 			    Get_Name_String (Chars (gnat_expr)),
+ 			    " is at %0",
+ 			    NULL);
+ 	  asm_constraint = build_string (strlen (comment), comment);
+ 	  free (comment);
+ #endif
+ 	  gnu_expr = build5 (ASM_EXPR, void_type_node,
+ 			     asm_constraint,
+ 			     NULL_TREE,
+ 			     tree_cons
+ 			     (build_tree_list (NULL_TREE,
+ 					       build_string (1, "m")),
+ 					       gnu_expr, NULL_TREE),
+ 			     NULL_TREE, NULL_TREE);
+ 	  ASM_VOLATILE_P (gnu_expr) = 1;
+ 	  set_expr_location_from_node (gnu_expr, gnat_node);
+ 	  append_to_statement_list (gnu_expr, &gnu_result);
+ 	}
+       break;
+ 
+     case Pragma_Loop_Optimize:
+       for (gnat_temp = First (Pragma_Argument_Associations (gnat_node));
+ 	   Present (gnat_temp);
+ 	   gnat_temp = Next (gnat_temp))
+ 	{
+ 	  tree gnu_loop_stmt = gnu_loop_stack->last ()->stmt;
+ 
+ 	  switch (Chars (Expression (gnat_temp)))
+ 	    {
+ 	    case Name_Ivdep:
+ 	      LOOP_STMT_IVDEP (gnu_loop_stmt) = 1;
+ 	      break;
+ 
+ 	    case Name_No_Unroll:
+ 	      LOOP_STMT_NO_UNROLL (gnu_loop_stmt) = 1;
+ 	      break;
+ 
+ 	    case Name_Unroll:
+ 	      LOOP_STMT_UNROLL (gnu_loop_stmt) = 1;
+ 	      break;
+ 
+ 	    case Name_No_Vector:
+ 	      LOOP_STMT_NO_VECTOR (gnu_loop_stmt) = 1;
+ 	      break;
+ 
+ 	    case Name_Vector:
+ 	      LOOP_STMT_VECTOR (gnu_loop_stmt) = 1;
+ 	      break;
+ 
+ 	    default:
+ 	      gcc_unreachable ();
+ 	    }
+ 	}
+       break;
+ 
+     case Pragma_Optimize:
+       switch (Chars (Expression
+ 		     (First (Pragma_Argument_Associations (gnat_node)))))
+ 	{
+ 	case Name_Off:
+ 	  if (optimize)
+ 	    post_error ("must specify -O0??", gnat_node);
+ 	  break;
+ 
+ 	case Name_Space:
+ 	  if (!optimize_size)
+ 	    post_error ("must specify -Os??", gnat_node);
+ 	  break;
+ 
+ 	case Name_Time:
+ 	  if (!optimize)
+ 	    post_error ("insufficient -O value??", gnat_node);
+ 	  break;
+ 
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+       break;
+ 
+     case Pragma_Reviewable:
+       if (write_symbols == NO_DEBUG)
+ 	post_error ("must specify -g??", gnat_node);
+       break;
+ 
+     case Pragma_Warning_As_Error:
+     case Pragma_Warnings:
+       {
+ 	Node_Id gnat_expr;
+ 	/* Preserve the location of the pragma.  */
+ 	const location_t location = input_location;
+ 	struct cl_option_handlers handlers;
+ 	unsigned int option_index;
+ 	diagnostic_t kind;
+ 	bool imply;
+ 
+ 	gnat_temp = First (Pragma_Argument_Associations (gnat_node));
+ 
+ 	/* This is the String form: pragma Warning{s|_As_Error}(String).  */
+ 	if (Nkind (Expression (gnat_temp)) == N_String_Literal)
+ 	  {
+ 	    switch (id)
+ 	      {
+ 	      case Pragma_Warning_As_Error:
+ 		kind = DK_ERROR;
+ 		imply = false;
+ 		break;
+ 
+ 	      case Pragma_Warnings:
+ 		kind = DK_WARNING;
+ 		imply = true;
+ 		break;
+ 
+ 	      default:
+ 		gcc_unreachable ();
+ 	      }
+ 
+ 	    gnat_expr = Expression (gnat_temp);
+ 	  }
+ 
+ 	/* This is the On/Off form: pragma Warnings (On | Off [,String]).  */
+ 	else if (Nkind (Expression (gnat_temp)) == N_Identifier)
+ 	  {
+ 	    switch (Chars (Expression (gnat_temp)))
+ 	      {
+ 		case Name_Off:
+ 		  kind = DK_IGNORED;
+ 		  break;
+ 
+ 		case Name_On:
+ 		  kind = DK_WARNING;
+ 		  break;
+ 
+ 		default:
+ 		  gcc_unreachable ();
+ 	      }
+ 
+ 	    /* Deal with optional pattern (but ignore Reason => "...").  */
+ 	    if (Present (Next (gnat_temp))
+ 		&& Chars (Next (gnat_temp)) != Name_Reason)
+ 	      {
+ 		/* pragma Warnings (On | Off, Name) is handled differently.  */
+ 		if (Nkind (Expression (Next (gnat_temp))) != N_String_Literal)
+ 		  break;
+ 
+ 	        gnat_expr = Expression (Next (gnat_temp));
+ 	      }
+ 	    else
+ 	      {
+ 		gnat_expr = Empty;
+ 
+ 		/* For pragma Warnings (Off), we save the current state...  */
+ 		if (kind == DK_IGNORED)
+ 		  diagnostic_push_diagnostics (global_dc, location);
+ 
+ 		/* ...so that, for pragma Warnings (On), we do not enable all
+ 		   the warnings but just restore the previous state.  */
+ 		else
+ 		  {
+ 		    diagnostic_pop_diagnostics (global_dc, location);
+ 		    break;
+ 		  }
+ 	      }
+ 
+ 	    imply = false;
+ 	  }
+ 
+ 	else
+ 	  gcc_unreachable ();
+ 
+ 	/* This is the same implementation as in the C family of compilers.  */
+ 	const unsigned int lang_mask = CL_Ada | CL_COMMON;
+ 	const char *arg = NULL;
+ 	if (Present (gnat_expr))
+ 	  {
+ 	    tree gnu_expr = gnat_to_gnu (gnat_expr);
+ 	    const char *option_string = TREE_STRING_POINTER (gnu_expr);
+ 	    const int len = TREE_STRING_LENGTH (gnu_expr);
+ 	    if (len < 3 || option_string[0] != '-' || option_string[1] != 'W')
+ 	      break;
+ 	    option_index = find_opt (option_string + 1, lang_mask);
+ 	    if (option_index == OPT_SPECIAL_unknown)
+ 	      {
+ 		post_error ("unknown -W switch??", gnat_node);
+ 		break;
+ 	      }
+ 	    else if (!(cl_options[option_index].flags & CL_WARNING))
+ 	      {
+ 		post_error ("-W switch does not control warning??", gnat_node);
+ 		break;
+ 	      }
+ 	    else if (!(cl_options[option_index].flags & lang_mask))
+ 	      {
+ 		post_error ("-W switch not valid for Ada??", gnat_node);
+ 		break;
+ 	      }
+ 	    if (cl_options[option_index].flags & CL_JOINED)
+ 	      arg = option_string + 1 + cl_options[option_index].opt_len;
+ 	  }
+ 	else
+ 	  option_index = 0;
+ 
+ 	set_default_handlers (&handlers, NULL);
+ 	control_warning_option (option_index, (int) kind, arg, imply, location,
+ 				lang_mask, &handlers, &global_options,
+ 				&global_options_set, global_dc);
+       }
+       break;
+ 
+     default:
+       break;
+     }
+ 
+   return gnu_result;
+ }
+ 
+ /* Check the inline status of nested function FNDECL wrt its parent function.
+ 
+    If a non-inline nested function is referenced from an inline external
+    function, we cannot honor both requests at the same time without cloning
+    the nested function in the current unit since it is private to its unit.
+    We could inline it as well but it's probably better to err on the side
+    of too little inlining.
+ 
+    This must be done only on nested functions present in the source code
+    and not on nested functions generated by the compiler, e.g. finalizers,
+    because they may be not marked inline and we don't want them to block
+    the inlining of the parent function.  */
+ 
+ static void
+ check_inlining_for_nested_subprog (tree fndecl)
+ {
+   if (DECL_IGNORED_P (current_function_decl) || DECL_IGNORED_P (fndecl))
+     return;
+ 
+   if (DECL_DECLARED_INLINE_P (fndecl))
+     return;
+ 
+   tree parent_decl = decl_function_context (fndecl);
+   if (DECL_EXTERNAL (parent_decl) && DECL_DECLARED_INLINE_P (parent_decl))
+     {
+       const location_t loc1 = DECL_SOURCE_LOCATION (fndecl);
+       const location_t loc2 = DECL_SOURCE_LOCATION (parent_decl);
+ 
+       if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (parent_decl)))
+ 	{
+ 	  error_at (loc1, "subprogram %q+F not marked %<Inline_Always%>",
+ 		    fndecl);
+ 	  error_at (loc2, "parent subprogram cannot be inlined");
+ 	}
+       else
+ 	{
+ 	  warning_at (loc1, OPT_Winline, "subprogram %q+F not marked %<Inline%>",
+ 		      fndecl);
+ 	  warning_at (loc2, OPT_Winline, "parent subprogram cannot be inlined");
+ 	}
+ 
+       DECL_DECLARED_INLINE_P (parent_decl) = 0;
+       DECL_UNINLINABLE (parent_decl) = 1;
+     }
+ }
+ 
+ /* Return an expression for the length of TYPE, an integral type, computed in
+    RESULT_TYPE, another integral type.
+ 
+    We used to compute the length as MAX (hb - lb + 1, 0) which could overflow
+    when lb == TYPE'First.  We now compute it as (hb >= lb) ? hb - lb + 1 : 0
+    which would only overflow in much rarer cases, for extremely large arrays
+    we expect never to encounter in practice.  Besides, the former computation
+    required the use of potentially constraining signed arithmetics while the
+    latter does not.  Note that the comparison must be done in the original
+    base index type in order to avoid any overflow during the conversion.  */
+ 
+ static tree
+ get_type_length (tree type, tree result_type)
+ {
+   tree comp_type = get_base_type (result_type);
+   tree base_type = maybe_character_type (get_base_type (type));
+   tree lb = convert (base_type, TYPE_MIN_VALUE (type));
+   tree hb = convert (base_type, TYPE_MAX_VALUE (type));
+   tree length
+     = build_binary_op (PLUS_EXPR, comp_type,
+ 		       build_binary_op (MINUS_EXPR, comp_type,
+ 					convert (comp_type, hb),
+ 					convert (comp_type, lb)),
+ 		       build_int_cst (comp_type, 1));
+   length
+     = build_cond_expr (result_type,
+ 		       build_binary_op (GE_EXPR, boolean_type_node, hb, lb),
+ 		       convert (result_type, length),
+ 		       build_int_cst (result_type, 0));
+   return length;
+ }
+ 
+ /* Subroutine of gnat_to_gnu to translate GNAT_NODE, an N_Attribute node,
+    to a GCC tree, which is returned.  GNU_RESULT_TYPE_P is a pointer to
+    where we should place the result type.  ATTRIBUTE is the attribute ID.  */
+ 
+ static tree
+ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute)
+ {
+   const Node_Id gnat_prefix = Prefix (gnat_node);
+   tree gnu_prefix = gnat_to_gnu (gnat_prefix);
+   tree gnu_type = TREE_TYPE (gnu_prefix);
+   tree gnu_expr, gnu_result_type, gnu_result = error_mark_node;
+   bool prefix_unused = false;
+ 
+   /* If the input is a NULL_EXPR, make a new one.  */
+   if (TREE_CODE (gnu_prefix) == NULL_EXPR)
+     {
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       *gnu_result_type_p = gnu_result_type;
+       return build1 (NULL_EXPR, gnu_result_type, TREE_OPERAND (gnu_prefix, 0));
+     }
+ 
+   switch (attribute)
+     {
+     case Attr_Pred:
+     case Attr_Succ:
+       /* These just add or subtract the constant 1 since representation
+ 	 clauses for enumeration types are handled in the front-end.  */
+       gnu_expr = gnat_to_gnu (First (Expressions (gnat_node)));
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       gnu_type = maybe_character_type (gnu_result_type);
+       if (TREE_TYPE (gnu_expr) != gnu_type)
+ 	gnu_expr = convert (gnu_type, gnu_expr);
+       gnu_result
+ 	= build_binary_op (attribute == Attr_Pred ? MINUS_EXPR : PLUS_EXPR,
+ 			   gnu_type, gnu_expr, build_int_cst (gnu_type, 1));
+       break;
+ 
+     case Attr_Address:
+     case Attr_Unrestricted_Access:
+       /* Conversions don't change the address of references but can cause
+ 	 build_unary_op to miss the references below, so strip them off.
+ 	 On the contrary, if the address-of operation causes a temporary
+ 	 to be created, then it must be created with the proper type.  */
+       gnu_expr = remove_conversions (gnu_prefix,
+ 				     !Must_Be_Byte_Aligned (gnat_node));
+       if (REFERENCE_CLASS_P (gnu_expr))
+ 	gnu_prefix = gnu_expr;
+ 
+       /* If we are taking 'Address of an unconstrained object, this is the
+ 	 pointer to the underlying array.  */
+       if (attribute == Attr_Address)
+ 	gnu_prefix = maybe_unconstrained_array (gnu_prefix);
+ 
+       /* If we are building a static dispatch table, we have to honor
+ 	 TARGET_VTABLE_USES_DESCRIPTORS if we want to be compatible
+ 	 with the C++ ABI.  We do it in the non-static case as well,
+ 	 see gnat_to_gnu_entity, case E_Access_Subprogram_Type.  */
+       else if (TARGET_VTABLE_USES_DESCRIPTORS
+ 	       && Is_Dispatch_Table_Entity (Etype (gnat_node)))
+ 	{
+ 	  tree gnu_field, t;
+ 	  /* Descriptors can only be built here for top-level functions.  */
+ 	  bool build_descriptor = (global_bindings_p () != 0);
+ 	  int i;
+ 	  vec<constructor_elt, va_gc> *gnu_vec = NULL;
+ 	  constructor_elt *elt;
+ 
+ 	  gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+ 	  /* If we're not going to build the descriptor, we have to retrieve
+ 	     the one which will be built by the linker (or by the compiler
+ 	     later if a static chain is requested).  */
+ 	  if (!build_descriptor)
+ 	    {
+ 	      gnu_result = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_prefix);
+ 	      gnu_result = fold_convert (build_pointer_type (gnu_result_type),
+ 					 gnu_result);
+ 	      gnu_result = build1 (INDIRECT_REF, gnu_result_type, gnu_result);
+ 	    }
+ 
+ 	  vec_safe_grow (gnu_vec, TARGET_VTABLE_USES_DESCRIPTORS, true);
+ 	  elt = (gnu_vec->address () + TARGET_VTABLE_USES_DESCRIPTORS - 1);
+ 	  for (gnu_field = TYPE_FIELDS (gnu_result_type), i = 0;
+ 	       i < TARGET_VTABLE_USES_DESCRIPTORS;
+ 	       gnu_field = DECL_CHAIN (gnu_field), i++)
+ 	    {
+ 	      if (build_descriptor)
+ 		{
+ 		  t = build2 (FDESC_EXPR, TREE_TYPE (gnu_field), gnu_prefix,
+ 			      build_int_cst (NULL_TREE, i));
+ 		  TREE_CONSTANT (t) = 1;
+ 		}
+ 	      else
+ 		t = build3 (COMPONENT_REF, ptr_void_ftype, gnu_result,
+ 			    gnu_field, NULL_TREE);
+ 
+ 	      elt->index = gnu_field;
+ 	      elt->value = t;
+ 	      elt--;
+ 	    }
+ 
+ 	  gnu_result = gnat_build_constructor (gnu_result_type, gnu_vec);
+ 	  break;
+ 	}
+ 
+       /* ... fall through ... */
+ 
+     case Attr_Access:
+     case Attr_Unchecked_Access:
+     case Attr_Code_Address:
+       /* Taking the address of a type does not make sense.  */
+       gcc_assert (TREE_CODE (gnu_prefix) != TYPE_DECL);
+ 
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       gnu_result
+ 	= build_unary_op (((attribute == Attr_Address
+ 			    || attribute == Attr_Unrestricted_Access)
+ 			   && !Must_Be_Byte_Aligned (gnat_node))
+ 			  ? ATTR_ADDR_EXPR : ADDR_EXPR,
+ 			  gnu_result_type, gnu_prefix);
+ 
+       /* For 'Code_Address, find an inner ADDR_EXPR and mark it so that we
+ 	 don't try to build a trampoline.  */
+       if (attribute == Attr_Code_Address)
+ 	{
+ 	  gnu_expr = remove_conversions (gnu_result, false);
+ 
+ 	  if (TREE_CODE (gnu_expr) == ADDR_EXPR)
+ 	    TREE_NO_TRAMPOLINE (gnu_expr) = TREE_CONSTANT (gnu_expr) = 1;
+ 
+ 	  /* On targets for which function symbols denote a descriptor, the
+ 	     code address is stored within the first slot of the descriptor
+ 	     so we do an additional dereference:
+ 	       result = *((result_type *) result)
+ 	     where we expect result to be of some pointer type already.  */
+ 	  if (targetm.calls.custom_function_descriptors == 0)
+ 	    gnu_result
+ 	      = build_unary_op (INDIRECT_REF, NULL_TREE,
+ 				convert (build_pointer_type (gnu_result_type),
+ 					 gnu_result));
+ 	}
+ 
+       /* For 'Access, issue an error message if the prefix is a C++ method
+ 	 since it can use a special calling convention on some platforms,
+ 	 which cannot be propagated to the access type.  */
+       else if (attribute == Attr_Access
+ 	       && TREE_CODE (TREE_TYPE (gnu_prefix)) == METHOD_TYPE)
+ 	post_error ("access to C++ constructor or member function not allowed",
+ 		    gnat_node);
+ 
+       /* For other address attributes applied to a nested function,
+ 	 find an inner ADDR_EXPR and annotate it so that we can issue
+ 	 a useful warning with -Wtrampolines.  */
+       else if (FUNC_OR_METHOD_TYPE_P (TREE_TYPE (gnu_prefix))
+ 	       && (gnu_expr = remove_conversions (gnu_result, false))
+ 	       && TREE_CODE (gnu_expr) == ADDR_EXPR
+ 	       && decl_function_context (TREE_OPERAND (gnu_expr, 0)))
+ 	{
+ 	  set_expr_location_from_node (gnu_expr, gnat_node);
+ 
+ 	  /* Also check the inlining status.  */
+ 	  check_inlining_for_nested_subprog (TREE_OPERAND (gnu_expr, 0));
+ 
+ 	  /* Moreover, for 'Access or 'Unrestricted_Access with non-
+ 	     foreign-compatible representation, mark the ADDR_EXPR so
+ 	     that we can build a descriptor instead of a trampoline.  */
+ 	  if ((attribute == Attr_Access
+ 	       || attribute == Attr_Unrestricted_Access)
+ 	      && targetm.calls.custom_function_descriptors > 0
+ 	      && Can_Use_Internal_Rep (Underlying_Type (Etype (gnat_node))))
+ 	    FUNC_ADDR_BY_DESCRIPTOR (gnu_expr) = 1;
+ 
+ 	  /* Otherwise, we need to check that we are not violating the
+ 	     No_Implicit_Dynamic_Code restriction.  */
+ 	  else if (targetm.calls.custom_function_descriptors != 0)
+ 	    Check_Implicit_Dynamic_Code_Allowed (gnat_node);
+ 	}
+       break;
+ 
+     case Attr_Pool_Address:
+       {
+ 	tree gnu_ptr = gnu_prefix;
+ 	tree gnu_obj_type;
+ 
+ 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+ 	/* If this is fat pointer, the object must have been allocated with the
+ 	   template in front of the array.  So compute the template address; do
+ 	   it by converting to a thin pointer.  */
+ 	if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_ptr)))
+ 	  gnu_ptr
+ 	    = convert (build_pointer_type
+ 		       (TYPE_OBJECT_RECORD_TYPE
+ 			(TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (gnu_ptr)))),
+ 		       gnu_ptr);
+ 
+ 	gnu_obj_type = TREE_TYPE (TREE_TYPE (gnu_ptr));
+ 
+ 	/* If this is a thin pointer, the object must have been allocated with
+ 	   the template in front of the array.  So compute the template address
+ 	   and return it.  */
+ 	if (TYPE_IS_THIN_POINTER_P (TREE_TYPE (gnu_ptr)))
+ 	  gnu_ptr
+ 	    = build_binary_op (POINTER_PLUS_EXPR, TREE_TYPE (gnu_ptr),
+ 			       gnu_ptr,
+ 			       fold_build1 (NEGATE_EXPR, sizetype,
+ 					    byte_position
+ 					    (DECL_CHAIN
+ 					     TYPE_FIELDS ((gnu_obj_type)))));
+ 
+ 	gnu_result = convert (gnu_result_type, gnu_ptr);
+       }
+       break;
+ 
+     case Attr_Size:
+     case Attr_Object_Size:
+     case Attr_Value_Size:
+     case Attr_Max_Size_In_Storage_Elements:
+       /* Strip NOPs, conversions between original and packable versions, and
+ 	 unpadding from GNU_PREFIX.  Note that we cannot simply strip every
+ 	 VIEW_CONVERT_EXPR because some of them may give the actual size, e.g.
+ 	 for nominally unconstrained packed array.  We use GNU_EXPR to see
+ 	 if a COMPONENT_REF was involved.  */
+       while (CONVERT_EXPR_P (gnu_prefix)
+ 	     || TREE_CODE (gnu_prefix) == NON_LVALUE_EXPR
+ 	     || (TREE_CODE (gnu_prefix) == VIEW_CONVERT_EXPR
+ 		 && TREE_CODE (TREE_TYPE (gnu_prefix)) == RECORD_TYPE
+ 		 && TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))
+ 		    == RECORD_TYPE
+ 		 && TYPE_NAME (TREE_TYPE (gnu_prefix))
+ 		    == TYPE_NAME (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))))
+ 	gnu_prefix = TREE_OPERAND (gnu_prefix, 0);
+       gnu_expr = gnu_prefix;
+       if (TREE_CODE (gnu_prefix) == COMPONENT_REF
+ 	  && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0))))
+ 	gnu_prefix = TREE_OPERAND (gnu_prefix, 0);
+       prefix_unused = true;
+       gnu_type = TREE_TYPE (gnu_prefix);
+ 
+       /* Replace an unconstrained array type with the type of the underlying
+ 	 array, except for 'Max_Size_In_Storage_Elements because we need to
+ 	 return the (maximum) size requested for an allocator.  */
+       if (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE)
+ 	{
+ 	  gnu_type = TYPE_OBJECT_RECORD_TYPE (gnu_type);
+ 	  if (attribute != Attr_Max_Size_In_Storage_Elements)
+ 	    gnu_type = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (gnu_type)));
+ 	}
+ 
+       /* The type must be frozen at this point.  */
+       gcc_assert (COMPLETE_TYPE_P (gnu_type));
+ 
+       /* If we're looking for the size of a field, return the field size.  */
+       if (TREE_CODE (gnu_prefix) == COMPONENT_REF)
+ 	gnu_result = DECL_SIZE (TREE_OPERAND (gnu_prefix, 1));
+ 
+       /* Otherwise, if the prefix is an object, or if we are looking for
+ 	 'Object_Size or 'Max_Size_In_Storage_Elements, the result is the
+ 	 GCC size of the type.  We make an exception for padded objects,
+ 	 as we do not take into account alignment promotions for the size.
+ 	 This is in keeping with the object case of gnat_to_gnu_entity.  */
+       else if ((TREE_CODE (gnu_prefix) != TYPE_DECL
+ 		&& !(TYPE_IS_PADDING_P (gnu_type)
+ 		     && TREE_CODE (gnu_expr) == COMPONENT_REF
+ 		     && pad_type_has_rm_size (gnu_type)))
+ 	       || attribute == Attr_Object_Size
+ 	       || attribute == Attr_Max_Size_In_Storage_Elements)
+ 	{
+ 	  /* If this is a dereference and we have a special dynamic constrained
+ 	     subtype on the prefix, use it to compute the size; otherwise, use
+ 	     the designated subtype.  */
+ 	  if (Nkind (gnat_prefix) == N_Explicit_Dereference)
+ 	    {
+ 	      Node_Id gnat_actual_subtype
+ 		= Actual_Designated_Subtype (gnat_prefix);
+ 	      tree gnu_ptr_type
+ 		= TREE_TYPE (gnat_to_gnu (Prefix (gnat_prefix)));
+ 
+ 	      if (TYPE_IS_FAT_OR_THIN_POINTER_P (gnu_ptr_type)
+ 		  && Present (gnat_actual_subtype))
+ 		{
+ 		  tree gnu_actual_obj_type
+ 		    = gnat_to_gnu_type (gnat_actual_subtype);
+ 		  gnu_type
+ 		    = build_unc_object_type_from_ptr (gnu_ptr_type,
+ 						      gnu_actual_obj_type,
+ 						      get_identifier ("SIZE"),
+ 						      false);
+ 		}
+ 	    }
+ 
+ 	  gnu_result = TYPE_SIZE (gnu_type);
+ 	}
+ 
+       /* Otherwise, the result is the RM size of the type.  */
+       else
+ 	gnu_result = rm_size (gnu_type);
+ 
+       /* Deal with a self-referential size by qualifying the size with the
+ 	 object or returning the maximum size for a type.  */
+       if (TREE_CODE (gnu_prefix) != TYPE_DECL)
+ 	gnu_result = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_result, gnu_prefix);
+       else if (CONTAINS_PLACEHOLDER_P (gnu_result))
+ 	gnu_result = max_size (gnu_result, true);
+ 
+       /* If the type contains a template, subtract the padded size of the
+ 	 template, except for 'Max_Size_In_Storage_Elements because we need
+ 	 to return the (maximum) size requested for an allocator.  */
+       if (TREE_CODE (gnu_type) == RECORD_TYPE
+ 	  && TYPE_CONTAINS_TEMPLATE_P (gnu_type)
+ 	  && attribute != Attr_Max_Size_In_Storage_Elements)
+ 	gnu_result
+ 	  = size_binop (MINUS_EXPR, gnu_result,
+ 			bit_position (DECL_CHAIN (TYPE_FIELDS (gnu_type))));
+ 
+       /* For 'Max_Size_In_Storage_Elements, adjust the unit.  */
+       if (attribute == Attr_Max_Size_In_Storage_Elements)
+ 	gnu_result = size_binop (CEIL_DIV_EXPR, gnu_result, bitsize_unit_node);
+ 
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       break;
+ 
+     case Attr_Alignment:
+       {
+ 	unsigned int align;
+ 
+ 	if (TREE_CODE (gnu_prefix) == COMPONENT_REF
+ 	    && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0))))
+ 	  gnu_prefix = TREE_OPERAND (gnu_prefix, 0);
+ 
+ 	gnu_type = TREE_TYPE (gnu_prefix);
+ 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 	prefix_unused = true;
+ 
+ 	if (TREE_CODE (gnu_prefix) == COMPONENT_REF)
+ 	  align = DECL_ALIGN (TREE_OPERAND (gnu_prefix, 1)) / BITS_PER_UNIT;
+ 	else
+ 	  {
+ 	    Entity_Id gnat_type = Etype (gnat_prefix);
+ 	    unsigned int double_align;
+ 	    bool is_capped_double, align_clause;
+ 
+ 	    /* If the default alignment of "double" or larger scalar types is
+ 	       specifically capped and there is an alignment clause neither
+ 	       on the type nor on the prefix itself, return the cap.  */
+ 	    if ((double_align = double_float_alignment) > 0)
+ 	      is_capped_double
+ 		= is_double_float_or_array (gnat_type, &align_clause);
+ 	    else if ((double_align = double_scalar_alignment) > 0)
+ 	      is_capped_double
+ 		= is_double_scalar_or_array (gnat_type, &align_clause);
+ 	    else
+ 	      is_capped_double = align_clause = false;
+ 
+ 	    if (is_capped_double
+ 		&& Nkind (gnat_prefix) == N_Identifier
+ 		&& Present (Alignment_Clause (Entity (gnat_prefix))))
+ 	      align_clause = true;
+ 
+ 	    if (is_capped_double && !align_clause)
+ 	      align = double_align;
+ 	    else
+ 	      align = TYPE_ALIGN (gnu_type) / BITS_PER_UNIT;
+ 	  }
+ 
+ 	gnu_result = size_int (align);
+       }
+       break;
+ 
+     case Attr_First:
+     case Attr_Last:
+     case Attr_Range_Length:
+       prefix_unused = true;
+ 
+       if (INTEGRAL_TYPE_P (gnu_type) || SCALAR_FLOAT_TYPE_P (gnu_type))
+ 	{
+ 	  gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+ 	  if (attribute == Attr_First)
+ 	    gnu_result = TYPE_MIN_VALUE (gnu_type);
+ 	  else if (attribute == Attr_Last)
+ 	    gnu_result = TYPE_MAX_VALUE (gnu_type);
+ 	  else
+ 	    gnu_result = get_type_length (gnu_type, gnu_result_type);
+ 	  break;
+ 	}
+ 
+       /* ... fall through ... */
+ 
+     case Attr_Length:
+       {
+ 	int Dimension = (Present (Expressions (gnat_node))
+ 			 ? UI_To_Int (Intval (First (Expressions (gnat_node))))
+ 			 : 1), i;
+ 	struct parm_attr_d *pa = NULL;
+ 	Entity_Id gnat_param = Empty;
+ 	bool unconstrained_ptr_deref = false;
+ 
+ 	gnu_prefix = maybe_padded_object (gnu_prefix);
+ 	gnu_prefix = maybe_unconstrained_array (gnu_prefix);
+ 
+ 	/* We treat unconstrained array In parameters specially.  We also note
+ 	   whether we are dereferencing a pointer to unconstrained array.  */
+ 	if (!Is_Constrained (Etype (gnat_prefix)))
+ 	  switch (Nkind (gnat_prefix))
+ 	    {
+ 	    case N_Identifier:
+ 	      /* This is the direct case.  */
+ 	      if (Ekind (Entity (gnat_prefix)) == E_In_Parameter)
+ 		gnat_param = Entity (gnat_prefix);
+ 	      break;
+ 
+ 	    case N_Explicit_Dereference:
+ 	      /* This is the indirect case.  Note that we need to be sure that
+ 		 the access value cannot be null as we'll hoist the load.  */
+ 	      if (Nkind (Prefix (gnat_prefix)) == N_Identifier
+ 		  && Ekind (Entity (Prefix (gnat_prefix))) == E_In_Parameter)
+ 		{
+ 		  if (Can_Never_Be_Null (Entity (Prefix (gnat_prefix))))
+ 		    gnat_param = Entity (Prefix (gnat_prefix));
+ 		}
+ 	      else
+ 		unconstrained_ptr_deref = true;
+ 	      break;
+ 
+ 	    default:
+ 	      break;
+ 	  }
+ 
+ 	/* If the prefix is the view conversion of a constrained array to an
+ 	   unconstrained form, we retrieve the constrained array because we
+ 	   might not be able to substitute the PLACEHOLDER_EXPR coming from
+ 	   the conversion.  This can occur with the 'Old attribute applied
+ 	   to a parameter with an unconstrained type, which gets rewritten
+ 	   into a constrained local variable very late in the game.  */
+ 	if (TREE_CODE (gnu_prefix) == VIEW_CONVERT_EXPR
+ 	    && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (TREE_TYPE (gnu_prefix)))
+ 	    && !CONTAINS_PLACEHOLDER_P
+ 	        (TYPE_SIZE (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))))
+ 	  gnu_type = TREE_TYPE (TREE_OPERAND (gnu_prefix, 0));
+ 	else
+ 	  gnu_type = TREE_TYPE (gnu_prefix);
+ 
+ 	prefix_unused = true;
+ 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+ 	if (TYPE_CONVENTION_FORTRAN_P (gnu_type))
+ 	  {
+ 	    int ndim;
+ 	    tree gnu_type_temp;
+ 
+ 	    for (ndim = 1, gnu_type_temp = gnu_type;
+ 		 TREE_CODE (TREE_TYPE (gnu_type_temp)) == ARRAY_TYPE
+ 		 && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type_temp));
+ 		 ndim++, gnu_type_temp = TREE_TYPE (gnu_type_temp))
+ 	      ;
+ 
+ 	    Dimension = ndim + 1 - Dimension;
+ 	  }
+ 
+ 	for (i = 1; i < Dimension; i++)
+ 	  gnu_type = TREE_TYPE (gnu_type);
+ 
+ 	gcc_assert (TREE_CODE (gnu_type) == ARRAY_TYPE);
+ 
+ 	/* When not optimizing, look up the slot associated with the parameter
+ 	   and the dimension in the cache and create a new one on failure.
+ 	   Don't do this when the actual subtype needs debug info (this happens
+ 	   with -gnatD): in elaborate_expression_1, we create variables that
+ 	   hold the bounds, so caching attributes isn't very interesting and
+ 	   causes dependency issues between these variables and cached
+ 	   expressions.  */
+ 	if (!optimize
+ 	    && Present (gnat_param)
+ 	    && !(Present (Actual_Subtype (gnat_param))
+ 		 && Needs_Debug_Info (Actual_Subtype (gnat_param))))
+ 	  {
+ 	    FOR_EACH_VEC_SAFE_ELT (f_parm_attr_cache, i, pa)
+ 	      if (pa->id == gnat_param && pa->dim == Dimension)
+ 		break;
+ 
+ 	    if (!pa)
+ 	      {
+ 		pa = ggc_cleared_alloc<parm_attr_d> ();
+ 		pa->id = gnat_param;
+ 		pa->dim = Dimension;
+ 		vec_safe_push (f_parm_attr_cache, pa);
+ 	      }
+ 	  }
+ 
+ 	/* Return the cached expression or build a new one.  */
+ 	if (attribute == Attr_First)
+ 	  {
+ 	    if (pa && pa->first)
+ 	      {
+ 		gnu_result = pa->first;
+ 		break;
+ 	      }
+ 
+ 	    gnu_result
+ 	      = TYPE_MIN_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type)));
+ 	  }
+ 
+ 	else if (attribute == Attr_Last)
+ 	  {
+ 	    if (pa && pa->last)
+ 	      {
+ 		gnu_result = pa->last;
+ 		break;
+ 	      }
+ 
+ 	    gnu_result
+ 	      = TYPE_MAX_VALUE (TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type)));
+ 	  }
+ 
+ 	else /* attribute == Attr_Range_Length || attribute == Attr_Length  */
+ 	  {
+ 	    if (pa && pa->length)
+ 	      {
+ 		gnu_result = pa->length;
+ 		break;
+ 	      }
+ 
+ 	    gnu_result
+ 	      = get_type_length (TYPE_INDEX_TYPE (TYPE_DOMAIN (gnu_type)),
+ 				 gnu_result_type);
+ 	  }
+ 
+ 	/* If this has a PLACEHOLDER_EXPR, qualify it by the object we are
+ 	   handling.  Note that these attributes could not have been used on
+ 	   an unconstrained array type.  */
+ 	gnu_result = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_result, gnu_prefix);
+ 
+ 	/* Cache the expression we have just computed.  Since we want to do it
+ 	   at run time, we force the use of a SAVE_EXPR and let the gimplifier
+ 	   create the temporary in the outermost binding level.  We will make
+ 	   sure in Subprogram_Body_to_gnu that it is evaluated on all possible
+ 	   paths by forcing its evaluation on entry of the function.  */
+ 	if (pa)
+ 	  {
+ 	    gnu_result
+ 	      = build1 (SAVE_EXPR, TREE_TYPE (gnu_result), gnu_result);
+ 	    switch (attribute)
+ 	      {
+ 	      case Attr_First:
+ 		pa->first = gnu_result;
+ 		break;
+ 
+ 	      case Attr_Last:
+ 		pa->last = gnu_result;
+ 		break;
+ 
+ 	      case Attr_Length:
+ 	      case Attr_Range_Length:
+ 		pa->length = gnu_result;
+ 		break;
+ 
+ 	      default:
+ 		gcc_unreachable ();
+ 	      }
+ 	  }
+ 
+ 	/* Otherwise, evaluate it each time it is referenced.  */
+ 	else
+ 	  switch (attribute)
+ 	    {
+ 	    case Attr_First:
+ 	    case Attr_Last:
+ 	      /* If we are dereferencing a pointer to unconstrained array, we
+ 		 need to capture the value because the pointed-to bounds may
+ 		 subsequently be released.  */
+ 	      if (unconstrained_ptr_deref)
+ 		gnu_result
+ 		  = build1 (SAVE_EXPR, TREE_TYPE (gnu_result), gnu_result);
+ 	      break;
+ 
+ 	    case Attr_Length:
+ 	    case Attr_Range_Length:
+ 	      /* Set the source location onto the predicate of the condition
+ 		 but not if the expression is cached to avoid messing up the
+ 		 debug info.  */
+ 	      if (TREE_CODE (gnu_result) == COND_EXPR
+ 		  && EXPR_P (TREE_OPERAND (gnu_result, 0)))
+ 		set_expr_location_from_node (TREE_OPERAND (gnu_result, 0),
+ 					     gnat_node);
+ 	      break;
+ 
+ 	    default:
+ 	      gcc_unreachable ();
+ 	    }
+ 
+ 	break;
+       }
+ 
+     case Attr_Bit_Position:
+     case Attr_Position:
+     case Attr_First_Bit:
+     case Attr_Last_Bit:
+     case Attr_Bit:
+       {
+ 	poly_int64 bitsize;
+ 	poly_int64 bitpos;
+ 	tree gnu_offset;
+ 	tree gnu_field_bitpos;
+ 	tree gnu_field_offset;
+ 	tree gnu_inner;
+ 	machine_mode mode;
+ 	int unsignedp, reversep, volatilep;
+ 
+ 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 	gnu_prefix = remove_conversions (gnu_prefix, true);
+ 	prefix_unused = true;
+ 
+ 	/* We can have 'Bit on any object, but if it isn't a COMPONENT_REF,
+ 	   the result is 0.  Don't allow 'Bit on a bare component, though.  */
+ 	if (attribute == Attr_Bit
+ 	    && TREE_CODE (gnu_prefix) != COMPONENT_REF
+ 	    && TREE_CODE (gnu_prefix) != FIELD_DECL)
+ 	  {
+ 	    gnu_result = integer_zero_node;
+ 	    break;
+ 	  }
+ 
+ 	else
+ 	  gcc_assert (TREE_CODE (gnu_prefix) == COMPONENT_REF
+ 		      || (attribute == Attr_Bit_Position
+ 			  && TREE_CODE (gnu_prefix) == FIELD_DECL));
+ 
+ 	get_inner_reference (gnu_prefix, &bitsize, &bitpos, &gnu_offset,
+ 			     &mode, &unsignedp, &reversep, &volatilep);
+ 
+ 	if (TREE_CODE (gnu_prefix) == COMPONENT_REF)
+ 	  {
+ 	    gnu_field_bitpos = bit_position (TREE_OPERAND (gnu_prefix, 1));
+ 	    gnu_field_offset = byte_position (TREE_OPERAND (gnu_prefix, 1));
+ 
+ 	    for (gnu_inner = TREE_OPERAND (gnu_prefix, 0);
+ 		 TREE_CODE (gnu_inner) == COMPONENT_REF
+ 		 && DECL_INTERNAL_P (TREE_OPERAND (gnu_inner, 1));
+ 		 gnu_inner = TREE_OPERAND (gnu_inner, 0))
+ 	      {
+ 		gnu_field_bitpos
+ 		  = size_binop (PLUS_EXPR, gnu_field_bitpos,
+ 				bit_position (TREE_OPERAND (gnu_inner, 1)));
+ 		gnu_field_offset
+ 		  = size_binop (PLUS_EXPR, gnu_field_offset,
+ 				byte_position (TREE_OPERAND (gnu_inner, 1)));
+ 	      }
+ 	  }
+ 	else if (TREE_CODE (gnu_prefix) == FIELD_DECL)
+ 	  {
+ 	    gnu_field_bitpos = bit_position (gnu_prefix);
+ 	    gnu_field_offset = byte_position (gnu_prefix);
+ 	  }
+ 	else
+ 	  {
+ 	    gnu_field_bitpos = bitsize_zero_node;
+ 	    gnu_field_offset = size_zero_node;
+ 	  }
+ 
+ 	switch (attribute)
+ 	  {
+ 	  case Attr_Position:
+ 	    gnu_result = gnu_field_offset;
+ 	    break;
+ 
+ 	  case Attr_First_Bit:
+ 	  case Attr_Bit:
+ 	    gnu_result = size_int (num_trailing_bits (bitpos));
+ 	    break;
+ 
+ 	  case Attr_Last_Bit:
+ 	    gnu_result = bitsize_int (num_trailing_bits (bitpos));
+ 	    gnu_result = size_binop (PLUS_EXPR, gnu_result,
+ 				     TYPE_SIZE (TREE_TYPE (gnu_prefix)));
+ 	    /* ??? Avoid a large unsigned result that will overflow when
+ 	       converted to the signed universal_integer.  */
+ 	    if (integer_zerop (gnu_result))
+ 	      gnu_result = integer_minus_one_node;
+ 	    else
+ 	      gnu_result
+ 		= size_binop (MINUS_EXPR, gnu_result, bitsize_one_node);
+ 	    break;
+ 
+ 	  case Attr_Bit_Position:
+ 	    gnu_result = gnu_field_bitpos;
+ 	    break;
+ 	  }
+ 
+ 	/* If this has a PLACEHOLDER_EXPR, qualify it by the object we are
+ 	   handling.  */
+ 	gnu_result = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_result, gnu_prefix);
+ 	break;
+       }
+ 
+     case Attr_Min:
+     case Attr_Max:
+       {
+ 	tree gnu_lhs = gnat_to_gnu (First (Expressions (gnat_node)));
+ 	tree gnu_rhs = gnat_to_gnu (Next (First (Expressions (gnat_node))));
+ 
+ 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+ 	/* The result of {MIN,MAX}_EXPR is unspecified if either operand is
+ 	   a NaN so we implement the semantics of C99 f{min,max} to make it
+ 	   predictable in this case: if either operand is a NaN, the other
+ 	   is returned; if both operands are NaN's, a NaN is returned.  */
+ 	if (SCALAR_FLOAT_TYPE_P (gnu_result_type)
+ 	    && !Machine_Overflows_On_Target)
+ 	  {
+ 	    const bool lhs_side_effects_p = TREE_SIDE_EFFECTS (gnu_lhs);
+ 	    const bool rhs_side_effects_p = TREE_SIDE_EFFECTS (gnu_rhs);
+ 	    tree t = builtin_decl_explicit (BUILT_IN_ISNAN);
+ 	    tree lhs_is_nan, rhs_is_nan;
+ 
+ 	    /* If the operands have side-effects, they need to be evaluated
+ 	       only once in spite of the multiple references in the result.  */
+ 	    if (lhs_side_effects_p)
+ 	      gnu_lhs = gnat_protect_expr (gnu_lhs);
+ 	    if (rhs_side_effects_p)
+ 	      gnu_rhs = gnat_protect_expr (gnu_rhs);
+ 
+ 	    lhs_is_nan = fold_build2 (NE_EXPR, boolean_type_node,
+ 				      build_call_expr (t, 1, gnu_lhs),
+ 				      integer_zero_node);
+ 
+ 	    rhs_is_nan = fold_build2 (NE_EXPR, boolean_type_node,
+ 				      build_call_expr (t, 1, gnu_rhs),
+ 				      integer_zero_node);
+ 
+ 	    gnu_result = build_binary_op (attribute == Attr_Min
+ 					  ? MIN_EXPR : MAX_EXPR,
+ 					  gnu_result_type, gnu_lhs, gnu_rhs);
+ 	    gnu_result = fold_build3 (COND_EXPR, gnu_result_type,
+ 				      rhs_is_nan, gnu_lhs, gnu_result);
+ 	    gnu_result = fold_build3 (COND_EXPR, gnu_result_type,
+ 				      lhs_is_nan, gnu_rhs, gnu_result);
+ 
+ 	    /* If the operands have side-effects, they need to be evaluated
+ 	       before doing the tests above since the place they otherwise
+ 	       would end up being evaluated at run time could be wrong.  */
+ 	    if (lhs_side_effects_p)
+ 	      gnu_result
+ 		= build2 (COMPOUND_EXPR, gnu_result_type, gnu_lhs, gnu_result);
+ 
+ 	    if (rhs_side_effects_p)
+ 	      gnu_result
+ 		= build2 (COMPOUND_EXPR, gnu_result_type, gnu_rhs, gnu_result);
+ 	  }
+ 	else
+ 	  gnu_result = build_binary_op (attribute == Attr_Min
+ 					? MIN_EXPR : MAX_EXPR,
+ 					gnu_result_type, gnu_lhs, gnu_rhs);
+       }
+       break;
+ 
+     case Attr_Passed_By_Reference:
+       gnu_result = size_int (default_pass_by_ref (gnu_type)
+ 			     || must_pass_by_ref (gnu_type));
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       break;
+ 
+     case Attr_Component_Size:
+       gnu_prefix = maybe_padded_object (gnu_prefix);
+       gnu_type = TREE_TYPE (gnu_prefix);
+ 
+       if (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE)
+ 	gnu_type = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_type))));
+ 
+       while (TREE_CODE (TREE_TYPE (gnu_type)) == ARRAY_TYPE
+ 	     && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type)))
+ 	gnu_type = TREE_TYPE (gnu_type);
+ 
+       gcc_assert (TREE_CODE (gnu_type) == ARRAY_TYPE);
+ 
+       /* Note this size cannot be self-referential.  */
+       gnu_result = TYPE_SIZE (TREE_TYPE (gnu_type));
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       prefix_unused = true;
+       break;
+ 
+     case Attr_Descriptor_Size:
+       gnu_type = TREE_TYPE (gnu_prefix);
+       gcc_assert (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE);
+ 
+       /* Return the padded size of the template in the object record type.  */
+       gnu_type = TYPE_OBJECT_RECORD_TYPE (gnu_type);
+       gnu_result = bit_position (DECL_CHAIN (TYPE_FIELDS (gnu_type)));
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       prefix_unused = true;
+       break;
+ 
+     case Attr_Null_Parameter:
+       /* This is just a zero cast to the pointer type for our prefix and
+ 	 dereferenced.  */
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       gnu_result
+ 	= build_unary_op (INDIRECT_REF, NULL_TREE,
+ 			  convert (build_pointer_type (gnu_result_type),
+ 				   integer_zero_node));
+       break;
+ 
+     case Attr_Mechanism_Code:
+       {
+ 	Entity_Id gnat_obj = Entity (gnat_prefix);
+ 	int code;
+ 
+ 	prefix_unused = true;
+ 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 	if (Present (Expressions (gnat_node)))
+ 	  {
+ 	    int i = UI_To_Int (Intval (First (Expressions (gnat_node))));
+ 
+ 	    for (gnat_obj = First_Formal (gnat_obj); i > 1;
+ 		 i--, gnat_obj = Next_Formal (gnat_obj))
+ 	      ;
+ 	  }
+ 
+ 	code = Mechanism (gnat_obj);
+ 	if (code == Default)
+ 	  code = ((present_gnu_tree (gnat_obj)
+ 		   && (DECL_BY_REF_P (get_gnu_tree (gnat_obj))
+ 		       || ((TREE_CODE (get_gnu_tree (gnat_obj))
+ 			    == PARM_DECL)
+ 			   && (DECL_BY_COMPONENT_PTR_P
+ 			       (get_gnu_tree (gnat_obj))))))
+ 		  ? By_Reference : By_Copy);
+ 	gnu_result = convert (gnu_result_type, size_int (- code));
+       }
+       break;
+ 
+     case Attr_Model:
+       /* We treat Model as identical to Machine.  This is true for at least
+ 	 IEEE and some other nice floating-point systems.  */
+ 
+       /* ... fall through ... */
+ 
+     case Attr_Machine:
+       /* The trick is to force the compiler to store the result in memory so
+ 	 that we do not have extra precision used.  But do this only when this
+ 	 is necessary, i.e. if FP_ARITH_MAY_WIDEN is true and the precision of
+ 	 the type is lower than that of the longest floating-point type.  */
+       prefix_unused = true;
+       gnu_expr = gnat_to_gnu (First (Expressions (gnat_node)));
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       gnu_result = convert (gnu_result_type, gnu_expr);
+ 
+       if (TREE_CODE (gnu_result) != REAL_CST
+ 	  && fp_arith_may_widen
+ 	  && TYPE_PRECISION (gnu_result_type)
+ 	     < TYPE_PRECISION (longest_float_type_node))
+ 	{
+ 	  tree rec_type = make_node (RECORD_TYPE);
+ 	  tree field
+ 	    = create_field_decl (get_identifier ("OBJ"), gnu_result_type,
+ 				 rec_type, NULL_TREE, NULL_TREE, 0, 0);
+ 	  tree rec_val, asm_expr;
+ 
+ 	  finish_record_type (rec_type, field, 0, false);
+ 
+ 	  rec_val = build_constructor_single (rec_type, field, gnu_result);
+ 	  rec_val = build1 (SAVE_EXPR, rec_type, rec_val);
+ 
+ 	  asm_expr
+ 	    = build5 (ASM_EXPR, void_type_node,
+ 		      build_string (0, ""),
+ 		      tree_cons (build_tree_list (NULL_TREE,
+ 						  build_string (2, "=m")),
+ 				 rec_val, NULL_TREE),
+ 		      tree_cons (build_tree_list (NULL_TREE,
+ 						  build_string (1, "m")),
+ 				 rec_val, NULL_TREE),
+ 		      NULL_TREE, NULL_TREE);
+ 	  ASM_VOLATILE_P (asm_expr) = 1;
+ 
+ 	  gnu_result
+ 	    = build_compound_expr (gnu_result_type, asm_expr,
+ 				   build_component_ref (rec_val, field,
+ 							false));
+ 	}
+       break;
+ 
+     case Attr_Deref:
+       prefix_unused = true;
+       gnu_expr = gnat_to_gnu (First (Expressions (gnat_node)));
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       /* This can be a random address so build an alias-all pointer type.  */
+       gnu_expr
+ 	= convert (build_pointer_type_for_mode (gnu_result_type, ptr_mode,
+ 						true),
+ 		   gnu_expr);
+       gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_expr);
+       break;
+ 
+     default:
+       /* This abort means that we have an unimplemented attribute.  */
+       gcc_unreachable ();
+     }
+ 
+   /* If this is an attribute where the prefix was unused, force a use of it if
+      it has a side-effect.  But don't do it if the prefix is just an entity
+      name.  However, if an access check is needed, we must do it.  See second
+      example in AARM 11.6(5.e).  */
+   if (prefix_unused
+       && TREE_SIDE_EFFECTS (gnu_prefix)
+       && !Is_Entity_Name (gnat_prefix))
+     gnu_result
+       = build_compound_expr (TREE_TYPE (gnu_result), gnu_prefix, gnu_result);
+ 
+   *gnu_result_type_p = gnu_result_type;
+   return gnu_result;
+ }
+ 
+ /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Case_Statement,
+    to a GCC tree, which is returned.  */
+ 
+ static tree
+ Case_Statement_to_gnu (Node_Id gnat_node)
+ {
+   tree gnu_result, gnu_expr, gnu_type, gnu_label;
+   Node_Id gnat_when;
+   location_t end_locus;
+   bool may_fallthru = false;
+ 
+   gnu_expr = gnat_to_gnu (Expression (gnat_node));
+   gnu_expr = convert (get_base_type (TREE_TYPE (gnu_expr)), gnu_expr);
+   gnu_expr = maybe_character_value (gnu_expr);
+   gnu_type = TREE_TYPE (gnu_expr);
+ 
+   /* We build a SWITCH_EXPR that contains the code with interspersed
+      CASE_LABEL_EXPRs for each label.  */
+   if (!Sloc_to_locus (End_Location (gnat_node), &end_locus))
+     end_locus = input_location;
+   gnu_label = create_artificial_label (end_locus);
+   start_stmt_group ();
+ 
+   for (gnat_when = First_Non_Pragma (Alternatives (gnat_node));
+        Present (gnat_when);
+        gnat_when = Next_Non_Pragma (gnat_when))
+     {
+       bool choices_added_p = false;
+       Node_Id gnat_choice;
+ 
+       /* First compile all the different case choices for the current WHEN
+ 	 alternative.  */
+       for (gnat_choice = First (Discrete_Choices (gnat_when));
+ 	   Present (gnat_choice);
+ 	   gnat_choice = Next (gnat_choice))
+ 	{
+ 	  tree gnu_low = NULL_TREE, gnu_high = NULL_TREE;
+ 	  tree label = create_artificial_label (input_location);
+ 
+ 	  switch (Nkind (gnat_choice))
+ 	    {
+ 	    case N_Range:
+ 	      gnu_low = gnat_to_gnu (Low_Bound (gnat_choice));
+ 	      gnu_high = gnat_to_gnu (High_Bound (gnat_choice));
+ 	      break;
+ 
+ 	    case N_Subtype_Indication:
+ 	      gnu_low = gnat_to_gnu (Low_Bound (Range_Expression
+ 						(Constraint (gnat_choice))));
+ 	      gnu_high = gnat_to_gnu (High_Bound (Range_Expression
+ 						  (Constraint (gnat_choice))));
+ 	      break;
+ 
+ 	    case N_Identifier:
+ 	    case N_Expanded_Name:
+ 	      /* This represents either a subtype range or a static value of
+ 		 some kind; Ekind says which.  */
+ 	      if (Is_Type (Entity (gnat_choice)))
+ 		{
+ 		  tree gnu_type = get_unpadded_type (Entity (gnat_choice));
+ 
+ 		  gnu_low = TYPE_MIN_VALUE (gnu_type);
+ 		  gnu_high = TYPE_MAX_VALUE (gnu_type);
+ 		  break;
+ 		}
+ 
+ 	      /* ... fall through ... */
+ 
+ 	    case N_Character_Literal:
+ 	    case N_Integer_Literal:
+ 	      gnu_low = gnat_to_gnu (gnat_choice);
+ 	      break;
+ 
+ 	    case N_Others_Choice:
+ 	      break;
+ 
+ 	    default:
+ 	      gcc_unreachable ();
+ 	    }
+ 
+ 	  /* Everything should be folded into constants at this point.  */
+ 	  gcc_assert (!gnu_low  || TREE_CODE (gnu_low)  == INTEGER_CST);
+ 	  gcc_assert (!gnu_high || TREE_CODE (gnu_high) == INTEGER_CST);
+ 
+ 	  if (gnu_low && TREE_TYPE (gnu_low) != gnu_type)
+ 	    gnu_low = convert (gnu_type, gnu_low);
+ 	  if (gnu_high && TREE_TYPE (gnu_high) != gnu_type)
+ 	    gnu_high = convert (gnu_type, gnu_high);
+ 
+ 	  add_stmt_with_node (build_case_label (gnu_low, gnu_high, label),
+ 			      gnat_choice);
+ 	  choices_added_p = true;
+ 	}
+ 
+       /* This construct doesn't define a scope so we shouldn't push a binding
+ 	 level around the statement list.  Except that we have always done so
+ 	 historically and this makes it possible to reduce stack usage.  As a
+ 	 compromise, we keep doing it for case statements, for which this has
+ 	 never been problematic, but not for case expressions in Ada 2012.  */
+       if (choices_added_p)
+ 	{
+ 	  const bool is_case_expression
+ 	    = (Nkind (Parent (gnat_node)) == N_Expression_With_Actions);
+ 	  tree group
+ 	    = build_stmt_group (Statements (gnat_when), !is_case_expression);
+ 	  bool group_may_fallthru = block_may_fallthru (group);
+ 	  add_stmt (group);
+ 	  if (group_may_fallthru)
+ 	    {
+ 	      tree stmt = build1 (GOTO_EXPR, void_type_node, gnu_label);
+ 	      SET_EXPR_LOCATION (stmt, end_locus);
+ 	      add_stmt (stmt);
+ 	      may_fallthru = true;
+ 	    }
+ 	}
+     }
+ 
+   /* Now emit a definition of the label the cases branch to, if any.  */
+   if (may_fallthru)
+     add_stmt (build1 (LABEL_EXPR, void_type_node, gnu_label));
+   gnu_result = build2 (SWITCH_EXPR, gnu_type, gnu_expr, end_stmt_group ());
+ 
+   return gnu_result;
+ }
+ 
+ /* Return true if we are in the body of a loop.  */
+ 
+ static inline bool
+ inside_loop_p (void)
+ {
+   return !vec_safe_is_empty (gnu_loop_stack);
+ }
+ 
+ /* Find out whether EXPR is a simple additive expression based on the iteration
+    variable of some enclosing loop in the current function.  If so, return the
+    loop and set *DISP to the displacement and *NEG_P to true if this is for a
+    subtraction; otherwise, return NULL.  */
+ 
+ static struct loop_info_d *
+ find_loop_for (tree expr, tree *disp, bool *neg_p)
+ {
+   tree var, add, cst;
+   bool minus_p;
+   struct loop_info_d *iter = NULL;
+   unsigned int i;
+ 
+   if (is_simple_additive_expression (expr, &add, &cst, &minus_p))
+     {
+       var = add;
+       if (disp)
+ 	*disp = cst;
+       if (neg_p)
+ 	*neg_p = minus_p;
+     }
+   else
+     {
+       var = expr;
+       if (disp)
+ 	*disp =  NULL_TREE;
+       if (neg_p)
+ 	*neg_p = false;
+     }
+ 
+   var = remove_conversions (var, false);
+ 
+   if (TREE_CODE (var) != VAR_DECL)
+     return NULL;
+ 
+   gcc_checking_assert (vec_safe_length (gnu_loop_stack) > 0);
+ 
+   FOR_EACH_VEC_ELT_REVERSE (*gnu_loop_stack, i, iter)
+     if (iter->loop_var == var && iter->fndecl == current_function_decl)
+       break;
+ 
+   return iter;
+ }
+ 
+ /* Return the innermost enclosing loop in the current function.  */
+ 
+ static struct loop_info_d *
+ find_loop (void)
+ {
+   struct loop_info_d *iter = NULL;
+   unsigned int i;
+ 
+   gcc_checking_assert (vec_safe_length (gnu_loop_stack) > 0);
+ 
+   FOR_EACH_VEC_ELT_REVERSE (*gnu_loop_stack, i, iter)
+     if (iter->fndecl == current_function_decl)
+       break;
+ 
+   return iter;
+ }
+ 
+ /* Return true if VAL (of type TYPE) can equal the minimum value if MAX is
+    false, or the maximum value if MAX is true, of TYPE.  */
+ 
+ static bool
+ can_equal_min_or_max_val_p (tree val, tree type, bool max)
+ {
+   tree min_or_max_val = (max ? TYPE_MAX_VALUE (type) : TYPE_MIN_VALUE (type));
+ 
+   if (TREE_CODE (min_or_max_val) != INTEGER_CST)
+     return true;
+ 
+   if (TREE_CODE (val) == NOP_EXPR)
+     val = (max
+ 	   ? TYPE_MAX_VALUE (TREE_TYPE (TREE_OPERAND (val, 0)))
+ 	   : TYPE_MIN_VALUE (TREE_TYPE (TREE_OPERAND (val, 0))));
+ 
+   if (TREE_CODE (val) != INTEGER_CST)
+     return true;
+ 
+   if (max)
+     return tree_int_cst_lt (val, min_or_max_val) == 0;
+   else
+     return tree_int_cst_lt (min_or_max_val, val) == 0;
+ }
+ 
+ /* Return true if VAL (of type TYPE) can equal the minimum value of TYPE.
+    If REVERSE is true, minimum value is taken as maximum value.  */
+ 
+ static inline bool
+ can_equal_min_val_p (tree val, tree type, bool reverse)
+ {
+   return can_equal_min_or_max_val_p (val, type, reverse);
+ }
+ 
+ /* Return true if VAL (of type TYPE) can equal the maximum value of TYPE.
+    If REVERSE is true, maximum value is taken as minimum value.  */
+ 
+ static inline bool
+ can_equal_max_val_p (tree val, tree type, bool reverse)
+ {
+   return can_equal_min_or_max_val_p (val, type, !reverse);
+ }
+ 
+ /* Replace EXPR1 and EXPR2 by invariant expressions if possible.  Return
+    true if both expressions have been replaced and false otherwise.  */
+ 
+ static bool
+ make_invariant (tree *expr1, tree *expr2)
+ {
+   tree inv_expr1 = gnat_invariant_expr (*expr1);
+   tree inv_expr2 = gnat_invariant_expr (*expr2);
+ 
+   if (inv_expr1)
+     *expr1 = inv_expr1;
+ 
+   if (inv_expr2)
+     *expr2 = inv_expr2;
+ 
+   return inv_expr1 && inv_expr2;
+ }
+ 
+ /* Helper function for walk_tree, used by independent_iterations_p below.  */
+ 
+ static tree
+ scan_rhs_r (tree *tp, int *walk_subtrees, void *data)
+ {
+   bitmap *params = (bitmap *)data;
+   tree t = *tp;
+ 
+   /* No need to walk into types or decls.  */
+   if (IS_TYPE_OR_DECL_P (t))
+     *walk_subtrees = 0;
+ 
+   if (TREE_CODE (t) == PARM_DECL && bitmap_bit_p (*params, DECL_UID (t)))
+     return t;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Return true if STMT_LIST generates independent iterations in a loop.  */
+ 
+ static bool
+ independent_iterations_p (tree stmt_list)
+ {
+   tree_stmt_iterator tsi;
+   bitmap params = BITMAP_GGC_ALLOC();
+   auto_vec<tree, 16> rhs;
+   tree iter;
+   int i;
+ 
+   if (TREE_CODE (stmt_list) == BIND_EXPR)
+     stmt_list = BIND_EXPR_BODY (stmt_list);
+ 
+   /* Scan the list and return false on anything that is not either a check
+      or an assignment to a parameter with restricted aliasing.  */
+   for (tsi = tsi_start (stmt_list); !tsi_end_p (tsi); tsi_next (&tsi))
+     {
+       tree stmt = tsi_stmt (tsi);
+ 
+       switch (TREE_CODE (stmt))
+ 	{
+ 	case COND_EXPR:
+ 	  {
+ 	    if (COND_EXPR_ELSE (stmt))
+ 	      return false;
+ 	    if (TREE_CODE (COND_EXPR_THEN (stmt)) != CALL_EXPR)
+ 	      return false;
+ 	    tree func = get_callee_fndecl (COND_EXPR_THEN (stmt));
+ 	    if (!(func && TREE_THIS_VOLATILE (func)))
+ 	      return false;
+ 	    break;
+ 	  }
+ 
+ 	case MODIFY_EXPR:
+ 	  {
+ 	    tree lhs = TREE_OPERAND (stmt, 0);
+ 	    while (handled_component_p (lhs))
+ 	      lhs = TREE_OPERAND (lhs, 0);
+ 	    if (TREE_CODE (lhs) != INDIRECT_REF)
+ 	      return false;
+ 	    lhs = TREE_OPERAND (lhs, 0);
+ 	    if (!(TREE_CODE (lhs) == PARM_DECL
+ 		  && DECL_RESTRICTED_ALIASING_P (lhs)))
+ 	      return false;
+ 	    bitmap_set_bit (params, DECL_UID (lhs));
+ 	    rhs.safe_push (TREE_OPERAND (stmt, 1));
+ 	    break;
+ 	  }
+ 
+ 	default:
+ 	  return false;
+ 	}
+     }
+ 
+   /* At this point we know that the list contains only statements that will
+      modify parameters with restricted aliasing.  Check that the statements
+      don't at the time read from these parameters.  */
+   FOR_EACH_VEC_ELT (rhs, i, iter)
+     if (walk_tree_without_duplicates (&iter, scan_rhs_r, &params))
+       return false;
+ 
+   return true;
+ }
+ 
+ /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Loop_Statement,
+    to a GCC tree, which is returned.  */
+ 
+ static tree
+ Loop_Statement_to_gnu (Node_Id gnat_node)
+ {
+   const Node_Id gnat_iter_scheme = Iteration_Scheme (gnat_node);
+   struct loop_info_d *gnu_loop_info = ggc_cleared_alloc<loop_info_d> ();
+   tree gnu_loop_stmt = build4 (LOOP_STMT, void_type_node, NULL_TREE,
+ 			       NULL_TREE, NULL_TREE, NULL_TREE);
+   tree gnu_loop_label = create_artificial_label (input_location);
+   tree gnu_cond_expr = NULL_TREE, gnu_low = NULL_TREE, gnu_high = NULL_TREE;
+   tree gnu_result;
+ 
+   /* Push the loop_info structure associated with the LOOP_STMT.  */
+   gnu_loop_info->fndecl = current_function_decl;
+   gnu_loop_info->stmt = gnu_loop_stmt;
+   vec_safe_push (gnu_loop_stack, gnu_loop_info);
+ 
+   /* Set location information for statement and end label.  */
+   set_expr_location_from_node (gnu_loop_stmt, gnat_node);
+   Sloc_to_locus (Sloc (End_Label (gnat_node)),
+ 		 &DECL_SOURCE_LOCATION (gnu_loop_label));
+   LOOP_STMT_LABEL (gnu_loop_stmt) = gnu_loop_label;
+ 
+   /* Set the condition under which the loop must keep going.  If we have an
+      explicit condition, use it to set the location information throughout
+      the translation of the loop statement to avoid having multiple SLOCs.
+ 
+      For the case "LOOP .... END LOOP;" the condition is always true.  */
+   if (No (gnat_iter_scheme))
+     ;
+ 
+   /* For the case "WHILE condition LOOP ..... END LOOP;" it's immediate.  */
+   else if (Present (Condition (gnat_iter_scheme)))
+     {
+       LOOP_STMT_COND (gnu_loop_stmt)
+ 	= gnat_to_gnu (Condition (gnat_iter_scheme));
+ 
+       set_expr_location_from_node (gnu_loop_stmt, gnat_iter_scheme);
+     }
+ 
+   /* Otherwise we have an iteration scheme and the condition is given by the
+      bounds of the subtype of the iteration variable.  */
+   else
+     {
+       Node_Id gnat_loop_spec = Loop_Parameter_Specification (gnat_iter_scheme);
+       Entity_Id gnat_loop_var = Defining_Entity (gnat_loop_spec);
+       Entity_Id gnat_type = Etype (gnat_loop_var);
+       tree gnu_type = get_unpadded_type (gnat_type);
+       tree gnu_base_type = maybe_character_type (get_base_type (gnu_type));
+       tree gnu_one_node = build_int_cst (gnu_base_type, 1);
+       tree gnu_loop_var, gnu_loop_iv, gnu_first, gnu_last, gnu_stmt;
+       enum tree_code update_code, test_code, shift_code;
+       bool reverse = Reverse_Present (gnat_loop_spec), use_iv = false;
+ 
+       gnu_low = convert (gnu_base_type, TYPE_MIN_VALUE (gnu_type));
+       gnu_high = convert (gnu_base_type, TYPE_MAX_VALUE (gnu_type));
+ 
+       /* We must disable modulo reduction for the iteration variable, if any,
+ 	 in order for the loop comparison to be effective.  */
+       if (reverse)
+ 	{
+ 	  gnu_first = gnu_high;
+ 	  gnu_last = gnu_low;
+ 	  update_code = MINUS_NOMOD_EXPR;
+ 	  test_code = GE_EXPR;
+ 	  shift_code = PLUS_NOMOD_EXPR;
+ 	}
+       else
+ 	{
+ 	  gnu_first = gnu_low;
+ 	  gnu_last = gnu_high;
+ 	  update_code = PLUS_NOMOD_EXPR;
+ 	  test_code = LE_EXPR;
+ 	  shift_code = MINUS_NOMOD_EXPR;
+ 	}
+ 
+       /* We use two different strategies to translate the loop, depending on
+ 	 whether optimization is enabled.
+ 
+ 	 If it is, we generate the canonical loop form expected by the loop
+ 	 optimizer and the loop vectorizer, which is the do-while form:
+ 
+ 	     ENTRY_COND
+ 	   loop:
+ 	     TOP_UPDATE
+ 	     BODY
+ 	     BOTTOM_COND
+ 	     GOTO loop
+ 
+ 	 This avoids an implicit dependency on loop header copying and makes
+ 	 it possible to turn BOTTOM_COND into an inequality test.
+ 
+ 	 If optimization is disabled, loop header copying doesn't come into
+ 	 play and we try to generate the loop form with the fewer conditional
+ 	 branches.  First, the default form, which is:
+ 
+ 	   loop:
+ 	     TOP_COND
+ 	     BODY
+ 	     BOTTOM_UPDATE
+ 	     GOTO loop
+ 
+ 	 It should catch most loops with constant ending point.  Then, if we
+ 	 cannot, we try to generate the shifted form:
+ 
+ 	   loop:
+ 	     TOP_COND
+ 	     TOP_UPDATE
+ 	     BODY
+ 	     GOTO loop
+ 
+ 	 which should catch loops with constant starting point.  Otherwise, if
+ 	 we cannot, we generate the fallback form:
+ 
+ 	     ENTRY_COND
+ 	   loop:
+ 	     BODY
+ 	     BOTTOM_COND
+ 	     BOTTOM_UPDATE
+ 	     GOTO loop
+ 
+ 	 which works in all cases.  */
+ 
+       if (optimize && !optimize_debug)
+ 	{
+ 	  /* We can use the do-while form directly if GNU_FIRST-1 doesn't
+ 	     overflow.  */
+ 	  if (!can_equal_min_val_p (gnu_first, gnu_base_type, reverse))
+ 	    ;
+ 
+ 	  /* Otherwise, use the do-while form with the help of a special
+ 	     induction variable in the unsigned version of the base type
+ 	     or the unsigned version of the size type, whichever is the
+ 	     largest, in order to have wrap-around arithmetics for it.  */
+ 	  else
+ 	    {
+ 	      if (TYPE_PRECISION (gnu_base_type)
+ 		  > TYPE_PRECISION (size_type_node))
+ 		gnu_base_type
+ 		  = gnat_type_for_size (TYPE_PRECISION (gnu_base_type), 1);
+ 	      else
+ 		gnu_base_type = size_type_node;
+ 
+ 	      gnu_first = convert (gnu_base_type, gnu_first);
+ 	      gnu_last = convert (gnu_base_type, gnu_last);
+ 	      gnu_one_node = build_int_cst (gnu_base_type, 1);
+ 	      use_iv = true;
+ 	    }
+ 
+ 	  gnu_first
+ 	    = build_binary_op (shift_code, gnu_base_type, gnu_first,
+ 			       gnu_one_node);
+ 	  LOOP_STMT_TOP_UPDATE_P (gnu_loop_stmt) = 1;
+ 	  LOOP_STMT_BOTTOM_COND_P (gnu_loop_stmt) = 1;
+ 	}
+       else
+ 	{
+ 	  /* We can use the default form if GNU_LAST+1 doesn't overflow.  */
+ 	  if (!can_equal_max_val_p (gnu_last, gnu_base_type, reverse))
+ 	    ;
+ 
+ 	  /* Otherwise, we can use the shifted form if neither GNU_FIRST-1 nor
+ 	     GNU_LAST-1 does.  */
+ 	  else if (!can_equal_min_val_p (gnu_first, gnu_base_type, reverse)
+ 		   && !can_equal_min_val_p (gnu_last, gnu_base_type, reverse))
+ 	    {
+ 	      gnu_first
+ 		= build_binary_op (shift_code, gnu_base_type, gnu_first,
+ 				   gnu_one_node);
+ 	      gnu_last
+ 		= build_binary_op (shift_code, gnu_base_type, gnu_last,
+ 				   gnu_one_node);
+ 	      LOOP_STMT_TOP_UPDATE_P (gnu_loop_stmt) = 1;
+ 	    }
+ 
+ 	  /* Otherwise, use the fallback form.  */
+ 	  else
+ 	    LOOP_STMT_BOTTOM_COND_P (gnu_loop_stmt) = 1;
+ 	}
+ 
+       /* If we use the BOTTOM_COND, we can turn the test into an inequality
+ 	 test but we have to add ENTRY_COND to protect the empty loop.  */
+       if (LOOP_STMT_BOTTOM_COND_P (gnu_loop_stmt))
+ 	{
+ 	  test_code = NE_EXPR;
+ 	  gnu_cond_expr
+ 	    = build3 (COND_EXPR, void_type_node,
+ 		      build_binary_op (LE_EXPR, boolean_type_node,
+ 				       gnu_low, gnu_high),
+ 		      NULL_TREE, alloc_stmt_list ());
+ 	  set_expr_location_from_node (gnu_cond_expr, gnat_iter_scheme);
+ 	}
+ 
+       /* Open a new nesting level that will surround the loop to declare the
+ 	 iteration variable.  */
+       start_stmt_group ();
+       gnat_pushlevel ();
+ 
+       /* If we use the special induction variable, create it and set it to
+ 	 its initial value.  Morever, the regular iteration variable cannot
+ 	 itself be initialized, lest the initial value wrapped around.  */
+       if (use_iv)
+ 	{
+ 	  gnu_loop_iv
+ 	    = create_init_temporary ("I", gnu_first, &gnu_stmt, gnat_loop_var);
+ 	  add_stmt (gnu_stmt);
+ 	  gnu_first = NULL_TREE;
+ 	}
+       else
+ 	gnu_loop_iv = NULL_TREE;
+ 
+       /* Declare the iteration variable and set it to its initial value.  */
+       gnu_loop_var = gnat_to_gnu_entity (gnat_loop_var, gnu_first, true);
+       if (DECL_BY_REF_P (gnu_loop_var))
+ 	gnu_loop_var = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_loop_var);
+       else if (use_iv)
+ 	{
+ 	  gcc_assert (DECL_LOOP_PARM_P (gnu_loop_var));
+ 	  SET_DECL_INDUCTION_VAR (gnu_loop_var, gnu_loop_iv);
+ 	}
+       gnu_loop_info->loop_var = gnu_loop_var;
+       gnu_loop_info->low_bound = gnu_low;
+       gnu_loop_info->high_bound = gnu_high;
+ 
+       /* Do all the arithmetics in the base type.  */
+       gnu_loop_var = convert (gnu_base_type, gnu_loop_var);
+ 
+       /* Set either the top or bottom exit condition.  */
+       if (use_iv)
+         LOOP_STMT_COND (gnu_loop_stmt)
+ 	  = build_binary_op (test_code, boolean_type_node, gnu_loop_iv,
+ 			     gnu_last);
+       else
+         LOOP_STMT_COND (gnu_loop_stmt)
+ 	  = build_binary_op (test_code, boolean_type_node, gnu_loop_var,
+ 			     gnu_last);
+ 
+       /* Set either the top or bottom update statement and give it the source
+ 	 location of the iteration for better coverage info.  */
+       if (use_iv)
+ 	{
+ 	  gnu_stmt
+ 	    = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_loop_iv,
+ 			       build_binary_op (update_code, gnu_base_type,
+ 						gnu_loop_iv, gnu_one_node));
+ 	  set_expr_location_from_node (gnu_stmt, gnat_iter_scheme);
+ 	  append_to_statement_list (gnu_stmt,
+ 				    &LOOP_STMT_UPDATE (gnu_loop_stmt));
+ 	  gnu_stmt
+ 	    = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_loop_var,
+ 			       gnu_loop_iv);
+ 	  set_expr_location_from_node (gnu_stmt, gnat_iter_scheme);
+ 	  append_to_statement_list (gnu_stmt,
+ 				    &LOOP_STMT_UPDATE (gnu_loop_stmt));
+ 	}
+       else
+ 	{
+ 	  gnu_stmt
+ 	    = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_loop_var,
+ 			       build_binary_op (update_code, gnu_base_type,
+ 						gnu_loop_var, gnu_one_node));
+ 	  set_expr_location_from_node (gnu_stmt, gnat_iter_scheme);
+ 	  LOOP_STMT_UPDATE (gnu_loop_stmt) = gnu_stmt;
+ 	}
+ 
+       set_expr_location_from_node (gnu_loop_stmt, gnat_iter_scheme);
+     }
+ 
+   /* If the loop was named, have the name point to this loop.  In this case,
+      the association is not a DECL node, but the end label of the loop.  */
+   if (Present (Identifier (gnat_node)))
+     save_gnu_tree (Entity (Identifier (gnat_node)), gnu_loop_label, true);
+ 
+   /* Make the loop body into its own block, so any allocated storage will be
+      released every iteration.  This is needed for stack allocation.  */
+   LOOP_STMT_BODY (gnu_loop_stmt)
+     = build_stmt_group (Statements (gnat_node), true);
+   TREE_SIDE_EFFECTS (gnu_loop_stmt) = 1;
+ 
+   /* If we have an iteration scheme, then we are in a statement group.  Add
+      the LOOP_STMT to it, finish it and make it the "loop".  */
+   if (Present (gnat_iter_scheme) && No (Condition (gnat_iter_scheme)))
+     {
+       /* First, if we have computed invariant conditions for range (or index)
+ 	 checks applied to the iteration variable, find out whether they can
+ 	 be evaluated to false at compile time; otherwise, if there are not
+ 	 too many of them, combine them with the original checks.  If loop
+ 	 unswitching is enabled, do not require the loop bounds to be also
+ 	 invariant, as their evaluation will still be ahead of the loop.  */
+       if (vec_safe_length (gnu_loop_info->checks) > 0
+ 	 && (make_invariant (&gnu_low, &gnu_high) || optimize >= 3))
+ 	{
+ 	  struct range_check_info_d *rci;
+ 	  unsigned int i, n_remaining_checks = 0;
+ 
+ 	  FOR_EACH_VEC_ELT (*gnu_loop_info->checks, i, rci)
+ 	    {
+ 	      tree low_ok, high_ok;
+ 
+ 	      if (rci->low_bound)
+ 		{
+ 		  tree gnu_adjusted_low = convert (rci->type, gnu_low);
+ 		  if (rci->disp)
+ 		    gnu_adjusted_low
+ 		      = fold_build2 (rci->neg_p ? MINUS_EXPR : PLUS_EXPR,
+ 				     rci->type, gnu_adjusted_low, rci->disp);
+ 		  low_ok
+ 		    = build_binary_op (GE_EXPR, boolean_type_node,
+ 				       gnu_adjusted_low, rci->low_bound);
+ 		}
+ 	      else
+ 		low_ok = boolean_true_node;
+ 
+ 	      if (rci->high_bound)
+ 		{
+ 		  tree gnu_adjusted_high = convert (rci->type, gnu_high);
+ 		  if (rci->disp)
+ 		    gnu_adjusted_high
+ 		      = fold_build2 (rci->neg_p ? MINUS_EXPR : PLUS_EXPR,
+ 				     rci->type, gnu_adjusted_high, rci->disp);
+ 		  high_ok
+ 		    = build_binary_op (LE_EXPR, boolean_type_node,
+ 				       gnu_adjusted_high, rci->high_bound);
+ 		}
+ 	      else
+ 		high_ok = boolean_true_node;
+ 
+ 	      tree range_ok
+ 		= build_binary_op (TRUTH_ANDIF_EXPR, boolean_type_node,
+ 				   low_ok, high_ok);
+ 
+ 	      rci->invariant_cond
+ 		= build_unary_op (TRUTH_NOT_EXPR, boolean_type_node, range_ok);
+ 
+ 	      if (rci->invariant_cond == boolean_false_node)
+ 		TREE_OPERAND (rci->inserted_cond, 0) = rci->invariant_cond;
+ 	      else
+ 		n_remaining_checks++;
+ 	    }
+ 
+ 	  /* Note that loop unswitching can only be applied a small number of
+ 	     times to a given loop (PARAM_MAX_UNSWITCH_LEVEL default to 3).  */
+ 	  if (IN_RANGE (n_remaining_checks, 1, 3)
+ 	      && optimize >= 2
+ 	      && !optimize_size)
+ 	    FOR_EACH_VEC_ELT (*gnu_loop_info->checks, i, rci)
+ 	      if (rci->invariant_cond != boolean_false_node)
+ 		{
+ 		  TREE_OPERAND (rci->inserted_cond, 0) = rci->invariant_cond;
+ 
+ 		  if (optimize >= 3)
+ 		    add_stmt_with_node_force (rci->inserted_cond, gnat_node);
+ 		}
+ 	}
+ 
+       /* Second, if we have recorded invariants to be hoisted, emit them.  */
+       if (vec_safe_length (gnu_loop_info->invariants) > 0)
+ 	{
+ 	  tree *iter;
+ 	  unsigned int i;
+ 	  FOR_EACH_VEC_ELT (*gnu_loop_info->invariants, i, iter)
+ 	    add_stmt_with_node_force (*iter, gnat_node);
+ 	}
+ 
+       /* Third, if loop vectorization is enabled and the iterations of the
+ 	 loop can easily be proved as independent, mark the loop.  */
+       if (optimize >= 3
+ 	  && independent_iterations_p (LOOP_STMT_BODY (gnu_loop_stmt)))
+ 	LOOP_STMT_IVDEP (gnu_loop_stmt) = 1;
+ 
+       add_stmt (gnu_loop_stmt);
+       gnat_poplevel ();
+       gnu_loop_stmt = end_stmt_group ();
+     }
+ 
+   /* If we have an outer COND_EXPR, that's our result and this loop is its
+      "true" statement.  Otherwise, the result is the LOOP_STMT.  */
+   if (gnu_cond_expr)
+     {
+       COND_EXPR_THEN (gnu_cond_expr) = gnu_loop_stmt;
+       TREE_SIDE_EFFECTS (gnu_cond_expr) = 1;
+       gnu_result = gnu_cond_expr;
+     }
+   else
+     gnu_result = gnu_loop_stmt;
+ 
+   gnu_loop_stack->pop ();
+ 
+   return gnu_result;
+ }
+ 
+ /* This page implements a form of Named Return Value optimization modeled
+    on the C++ optimization of the same name.  The main difference is that
+    we disregard any semantical considerations when applying it here, the
+    counterpart being that we don't try to apply it to semantically loaded
+    return types, i.e. types with the TYPE_BY_REFERENCE_P flag set.
+ 
+    We consider a function body of the following GENERIC form:
+ 
+      return_type R1;
+        [...]
+      RETURN_EXPR [<retval> = ...]
+        [...]
+      RETURN_EXPR [<retval> = R1]
+        [...]
+      return_type Ri;
+        [...]
+      RETURN_EXPR [<retval> = ...]
+        [...]
+      RETURN_EXPR [<retval> = Ri]
+        [...]
+ 
+    where the Ri are not addressable and we try to fulfill a simple criterion
+    that would make it possible to replace one or several Ri variables by the
+    single RESULT_DECL of the function.
+ 
+    The first observation is that RETURN_EXPRs that don't directly reference
+    any of the Ri variables on the RHS of their assignment are transparent wrt
+    the optimization.  This is because the Ri variables aren't addressable so
+    any transformation applied to them doesn't affect the RHS; moreover, the
+    assignment writes the full <retval> object so existing values are entirely
+    discarded.
+ 
+    This property can be extended to some forms of RETURN_EXPRs that reference
+    the Ri variables, for example CONSTRUCTORs, but isn't true in the general
+    case, in particular when function calls are involved.
+ 
+    Therefore the algorithm is as follows:
+ 
+      1. Collect the list of candidates for a Named Return Value (Ri variables
+ 	on the RHS of assignments of RETURN_EXPRs) as well as the list of the
+ 	other expressions on the RHS of such assignments.
+ 
+      2. Prune the members of the first list (candidates) that are referenced
+ 	by a member of the second list (expressions).
+ 
+      3. Extract a set of candidates with non-overlapping live ranges from the
+ 	first list.  These are the Named Return Values.
+ 
+      4. Adjust the relevant RETURN_EXPRs and replace the occurrences of the
+ 	Named Return Values in the function with the RESULT_DECL.
+ 
+    If the function returns an unconstrained type, things are a bit different
+    because the anonymous return object is allocated on the secondary stack
+    and RESULT_DECL is only a pointer to it.  Each return object can be of a
+    different size and is allocated separately so we need not care about the
+    addressability and the aforementioned overlapping issues.  Therefore, we
+    don't collect the other expressions and skip step #2 in the algorithm.  */
+ 
+ struct nrv_data
+ {
+   bitmap nrv;
+   tree result;
+   Node_Id gnat_ret;
+   hash_set<tree> *visited;
+ };
+ 
+ /* Return true if T is a Named Return Value.  */
+ 
+ static inline bool
+ is_nrv_p (bitmap nrv, tree t)
+ {
+   return TREE_CODE (t) == VAR_DECL && bitmap_bit_p (nrv, DECL_UID (t));
+ }
+ 
+ /* Helper function for walk_tree, used by finalize_nrv below.  */
+ 
+ static tree
+ prune_nrv_r (tree *tp, int *walk_subtrees, void *data)
+ {
+   struct nrv_data *dp = (struct nrv_data *)data;
+   tree t = *tp;
+ 
+   /* No need to walk into types or decls.  */
+   if (IS_TYPE_OR_DECL_P (t))
+     *walk_subtrees = 0;
+ 
+   if (is_nrv_p (dp->nrv, t))
+     bitmap_clear_bit (dp->nrv, DECL_UID (t));
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Prune Named Return Values in BLOCK and return true if there is still a
+    Named Return Value in BLOCK or one of its sub-blocks.  */
+ 
+ static bool
+ prune_nrv_in_block (bitmap nrv, tree block)
+ {
+   bool has_nrv = false;
+   tree t;
+ 
+   /* First recurse on the sub-blocks.  */
+   for (t = BLOCK_SUBBLOCKS (block); t; t = BLOCK_CHAIN (t))
+     has_nrv |= prune_nrv_in_block (nrv, t);
+ 
+   /* Then make sure to keep at most one NRV per block.  */
+   for (t = BLOCK_VARS (block); t; t = DECL_CHAIN (t))
+     if (is_nrv_p (nrv, t))
+       {
+ 	if (has_nrv)
+ 	  bitmap_clear_bit (nrv, DECL_UID (t));
+ 	else
+ 	  has_nrv = true;
+       }
+ 
+   return has_nrv;
+ }
+ 
+ /* Helper function for walk_tree, used by finalize_nrv below.  */
+ 
+ static tree
+ finalize_nrv_r (tree *tp, int *walk_subtrees, void *data)
+ {
+   struct nrv_data *dp = (struct nrv_data *)data;
+   tree t = *tp;
+ 
+   /* No need to walk into types.  */
+   if (TYPE_P (t))
+     *walk_subtrees = 0;
+ 
+   /* Change RETURN_EXPRs of NRVs to just refer to the RESULT_DECL; this is a
+      nop, but differs from using NULL_TREE in that it indicates that we care
+      about the value of the RESULT_DECL.  */
+   else if (TREE_CODE (t) == RETURN_EXPR
+ 	   && TREE_CODE (TREE_OPERAND (t, 0)) == INIT_EXPR)
+     {
+       tree ret_val = TREE_OPERAND (TREE_OPERAND (t, 0), 1);
+ 
+       /* Strip useless conversions around the return value.  */
+       if (gnat_useless_type_conversion (ret_val))
+ 	ret_val = TREE_OPERAND (ret_val, 0);
+ 
+       if (is_nrv_p (dp->nrv, ret_val))
+ 	TREE_OPERAND (t, 0) = dp->result;
+     }
+ 
+   /* Replace the DECL_EXPR of NRVs with an initialization of the RESULT_DECL,
+      if needed.  */
+   else if (TREE_CODE (t) == DECL_EXPR
+ 	   && is_nrv_p (dp->nrv, DECL_EXPR_DECL (t)))
+     {
+       tree var = DECL_EXPR_DECL (t), init;
+ 
+       if (DECL_INITIAL (var))
+ 	{
+ 	  init = build_binary_op (INIT_EXPR, NULL_TREE, dp->result,
+ 				  DECL_INITIAL (var));
+ 	  SET_EXPR_LOCATION (init, EXPR_LOCATION (t));
+ 	  DECL_INITIAL (var) = NULL_TREE;
+ 	}
+       else
+ 	init = build_empty_stmt (EXPR_LOCATION (t));
+       *tp = init;
+ 
+       /* Identify the NRV to the RESULT_DECL for debugging purposes.  */
+       SET_DECL_VALUE_EXPR (var, dp->result);
+       DECL_HAS_VALUE_EXPR_P (var) = 1;
+       /* ??? Kludge to avoid an assertion failure during inlining.  */
+       DECL_SIZE (var) = bitsize_unit_node;
+       DECL_SIZE_UNIT (var) = size_one_node;
+     }
+ 
+   /* And replace all uses of NRVs with the RESULT_DECL.  */
+   else if (is_nrv_p (dp->nrv, t))
+     *tp = convert (TREE_TYPE (t), dp->result);
+ 
+   /* Avoid walking into the same tree more than once.  Unfortunately, we
+      can't just use walk_tree_without_duplicates because it would only
+      call us for the first occurrence of NRVs in the function body.  */
+   if (dp->visited->add (*tp))
+     *walk_subtrees = 0;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Likewise, but used when the function returns an unconstrained type.  */
+ 
+ static tree
+ finalize_nrv_unc_r (tree *tp, int *walk_subtrees, void *data)
+ {
+   struct nrv_data *dp = (struct nrv_data *)data;
+   tree t = *tp;
+ 
+   /* No need to walk into types.  */
+   if (TYPE_P (t))
+     *walk_subtrees = 0;
+ 
+   /* We need to see the DECL_EXPR of NRVs before any other references so we
+      walk the body of BIND_EXPR before walking its variables.  */
+   else if (TREE_CODE (t) == BIND_EXPR)
+     walk_tree (&BIND_EXPR_BODY (t), finalize_nrv_unc_r, data, NULL);
+ 
+   /* Change RETURN_EXPRs of NRVs to assign to the RESULT_DECL only the final
+      return value built by the allocator instead of the whole construct.  */
+   else if (TREE_CODE (t) == RETURN_EXPR
+ 	   && TREE_CODE (TREE_OPERAND (t, 0)) == INIT_EXPR)
+     {
+       tree ret_val = TREE_OPERAND (TREE_OPERAND (t, 0), 1);
+ 
+       /* This is the construct returned by the allocator.  */
+       if (TREE_CODE (ret_val) == COMPOUND_EXPR
+ 	  && TREE_CODE (TREE_OPERAND (ret_val, 0)) == INIT_EXPR)
+ 	{
+ 	  tree rhs = TREE_OPERAND (TREE_OPERAND (ret_val, 0), 1);
+ 
+ 	  if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (ret_val)))
+ 	    ret_val = CONSTRUCTOR_ELT (rhs, 1)->value;
+ 	  else
+ 	    ret_val = rhs;
+ 	}
+ 
+       /* Strip useless conversions around the return value.  */
+       if (gnat_useless_type_conversion (ret_val)
+ 	  || TREE_CODE (ret_val) == VIEW_CONVERT_EXPR)
+ 	ret_val = TREE_OPERAND (ret_val, 0);
+ 
+       /* Strip unpadding around the return value.  */
+       if (TREE_CODE (ret_val) == COMPONENT_REF
+ 	  && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (ret_val, 0))))
+ 	ret_val = TREE_OPERAND (ret_val, 0);
+ 
+       /* Assign the new return value to the RESULT_DECL.  */
+       if (is_nrv_p (dp->nrv, ret_val))
+ 	TREE_OPERAND (TREE_OPERAND (t, 0), 1)
+ 	  = TREE_OPERAND (DECL_INITIAL (ret_val), 0);
+     }
+ 
+   /* Adjust the DECL_EXPR of NRVs to call the allocator and save the result
+      into a new variable.  */
+   else if (TREE_CODE (t) == DECL_EXPR
+ 	   && is_nrv_p (dp->nrv, DECL_EXPR_DECL (t)))
+     {
+       tree saved_current_function_decl = current_function_decl;
+       tree var = DECL_EXPR_DECL (t);
+       tree alloc, p_array, new_var, new_ret;
+       vec<constructor_elt, va_gc> *v;
+       vec_alloc (v, 2);
+ 
+       /* Create an artificial context to build the allocation.  */
+       current_function_decl = decl_function_context (var);
+       start_stmt_group ();
+       gnat_pushlevel ();
+ 
+       /* This will return a COMPOUND_EXPR with the allocation in the first
+ 	 arm and the final return value in the second arm.  */
+       alloc = build_allocator (TREE_TYPE (var), DECL_INITIAL (var),
+ 			       TREE_TYPE (dp->result),
+ 			       Procedure_To_Call (dp->gnat_ret),
+ 			       Storage_Pool (dp->gnat_ret),
+ 			       Empty, false);
+ 
+       /* The new variable is built as a reference to the allocated space.  */
+       new_var
+ 	= build_decl (DECL_SOURCE_LOCATION (var), VAR_DECL, DECL_NAME (var),
+ 		      build_reference_type (TREE_TYPE (var)));
+       DECL_BY_REFERENCE (new_var) = 1;
+ 
+       if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (alloc)))
+ 	{
+ 	  tree cst = TREE_OPERAND (alloc, 1);
+ 
+ 	  /* The new initial value is a COMPOUND_EXPR with the allocation in
+ 	     the first arm and the value of P_ARRAY in the second arm.  */
+ 	  DECL_INITIAL (new_var)
+ 	    = build2 (COMPOUND_EXPR, TREE_TYPE (new_var),
+ 		      TREE_OPERAND (alloc, 0),
+ 		      CONSTRUCTOR_ELT (cst, 0)->value);
+ 
+ 	  /* Build a modified CONSTRUCTOR that references NEW_VAR.  */
+ 	  p_array = TYPE_FIELDS (TREE_TYPE (alloc));
+ 	  CONSTRUCTOR_APPEND_ELT (v, p_array,
+ 				  fold_convert (TREE_TYPE (p_array), new_var));
+ 	  CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (p_array),
+ 				  CONSTRUCTOR_ELT (cst, 1)->value);
+ 	  new_ret = build_constructor (TREE_TYPE (alloc), v);
+ 	}
+       else
+ 	{
+ 	  /* The new initial value is just the allocation.  */
+ 	  DECL_INITIAL (new_var) = alloc;
+ 	  new_ret = fold_convert (TREE_TYPE (alloc), new_var);
+ 	}
+ 
+       gnat_pushdecl (new_var, Empty);
+ 
+       /* Destroy the artificial context and insert the new statements.  */
+       gnat_zaplevel ();
+       *tp = end_stmt_group ();
+       current_function_decl = saved_current_function_decl;
+ 
+       /* Chain NEW_VAR immediately after VAR and ignore the latter.  */
+       DECL_CHAIN (new_var) = DECL_CHAIN (var);
+       DECL_CHAIN (var) = new_var;
+       DECL_IGNORED_P (var) = 1;
+ 
+       /* Save the new return value and the dereference of NEW_VAR.  */
+       DECL_INITIAL (var)
+ 	= build2 (COMPOUND_EXPR, TREE_TYPE (var), new_ret,
+ 		  build1 (INDIRECT_REF, TREE_TYPE (var), new_var));
+       /* ??? Kludge to avoid messing up during inlining.  */
+       DECL_CONTEXT (var) = NULL_TREE;
+     }
+ 
+   /* And replace all uses of NRVs with the dereference of NEW_VAR.  */
+   else if (is_nrv_p (dp->nrv, t))
+     *tp = TREE_OPERAND (DECL_INITIAL (t), 1);
+ 
+   /* Avoid walking into the same tree more than once.  Unfortunately, we
+      can't just use walk_tree_without_duplicates because it would only
+      call us for the first occurrence of NRVs in the function body.  */
+   if (dp->visited->add (*tp))
+     *walk_subtrees = 0;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Apply FUNC to all the sub-trees of nested functions in NODE.  FUNC is called
+    with the DATA and the address of each sub-tree.  If FUNC returns a non-NULL
+    value, the traversal is stopped.  */
+ 
+ static void
+ walk_nesting_tree (struct cgraph_node *node, walk_tree_fn func, void *data)
+ {
+   for (node = first_nested_function (node);
+        node; node = next_nested_function (node))
+     {
+       walk_tree_without_duplicates (&DECL_SAVED_TREE (node->decl), func, data);
+       walk_nesting_tree (node, func, data);
+     }
+ }
+ 
+ /* Finalize the Named Return Value optimization for FNDECL.  The NRV bitmap
+    contains the candidates for Named Return Value and OTHER is a list of
+    the other return values.  GNAT_RET is a representative return node.  */
+ 
+ static void
+ finalize_nrv (tree fndecl, bitmap nrv, vec<tree, va_gc> *other, Node_Id gnat_ret)
+ {
+   struct nrv_data data;
+   walk_tree_fn func;
+   unsigned int i;
+   tree iter;
+ 
+   /* We shouldn't be applying the optimization to return types that we aren't
+      allowed to manipulate freely.  */
+   gcc_assert (!TYPE_IS_BY_REFERENCE_P (TREE_TYPE (TREE_TYPE (fndecl))));
+ 
+   /* Prune the candidates that are referenced by other return values.  */
+   data.nrv = nrv;
+   data.result = NULL_TREE;
+   data.gnat_ret = Empty;
+   data.visited = NULL;
+   FOR_EACH_VEC_SAFE_ELT (other, i, iter)
+     walk_tree_without_duplicates (&iter, prune_nrv_r, &data);
+   if (bitmap_empty_p (nrv))
+     return;
+ 
+   /* Prune also the candidates that are referenced by nested functions.  */
+   walk_nesting_tree (cgraph_node::get_create (fndecl), prune_nrv_r, &data);
+   if (bitmap_empty_p (nrv))
+     return;
+ 
+   /* Extract a set of NRVs with non-overlapping live ranges.  */
+   if (!prune_nrv_in_block (nrv, DECL_INITIAL (fndecl)))
+     return;
+ 
+   /* Adjust the relevant RETURN_EXPRs and replace the occurrences of NRVs.  */
+   data.nrv = nrv;
+   data.result = DECL_RESULT (fndecl);
+   data.gnat_ret = gnat_ret;
+   data.visited = new hash_set<tree>;
+   if (TYPE_RETURN_UNCONSTRAINED_P (TREE_TYPE (fndecl)))
+     func = finalize_nrv_unc_r;
+   else
+     func = finalize_nrv_r;
+   walk_tree (&DECL_SAVED_TREE (fndecl), func, &data, NULL);
+   delete data.visited;
+ }
+ 
+ /* Return true if RET_VAL can be used as a Named Return Value for the
+    anonymous return object RET_OBJ.  */
+ 
+ static bool
+ return_value_ok_for_nrv_p (tree ret_obj, tree ret_val)
+ {
+   if (TREE_CODE (ret_val) != VAR_DECL)
+     return false;
+ 
+   if (TREE_THIS_VOLATILE (ret_val))
+     return false;
+ 
+   if (DECL_CONTEXT (ret_val) != current_function_decl)
+     return false;
+ 
+   if (TREE_STATIC (ret_val))
+     return false;
+ 
+   /* For the constrained case, test for addressability.  */
+   if (ret_obj && TREE_ADDRESSABLE (ret_val))
+     return false;
+ 
+   /* For the constrained case, test for overalignment.  */
+   if (ret_obj && DECL_ALIGN (ret_val) > DECL_ALIGN (ret_obj))
+     return false;
+ 
+   /* For the unconstrained case, test for bogus initialization.  */
+   if (!ret_obj
+       && DECL_INITIAL (ret_val)
+       && TREE_CODE (DECL_INITIAL (ret_val)) == NULL_EXPR)
+     return false;
+ 
+   return true;
+ }
+ 
+ /* Build a RETURN_EXPR.  If RET_VAL is non-null, build a RETURN_EXPR around
+    the assignment of RET_VAL to RET_OBJ.  Otherwise build a bare RETURN_EXPR
+    around RESULT_OBJ, which may be null in this case.  */
+ 
+ static tree
+ build_return_expr (tree ret_obj, tree ret_val)
+ {
+   tree result_expr;
+ 
+   if (ret_val)
+     {
+       /* The gimplifier explicitly enforces the following invariant:
+ 
+ 	      RETURN_EXPR
+ 		  |
+ 	       INIT_EXPR
+ 	      /        \
+ 	     /          \
+ 	 RET_OBJ        ...
+ 
+ 	 As a consequence, type consistency dictates that we use the type
+ 	 of the RET_OBJ as the operation type.  */
+       tree operation_type = TREE_TYPE (ret_obj);
+ 
+       /* Convert the right operand to the operation type.  Note that this is
+ 	 the transformation applied in the INIT_EXPR case of build_binary_op,
+ 	 with the assumption that the type cannot involve a placeholder.  */
+       if (operation_type != TREE_TYPE (ret_val))
+ 	ret_val = convert (operation_type, ret_val);
+ 
+       /* We always can use an INIT_EXPR for the return object.  */
+       result_expr = build2 (INIT_EXPR, void_type_node, ret_obj, ret_val);
+ 
+       /* If the function returns an aggregate type, find out whether this is
+ 	 a candidate for Named Return Value.  If so, record it.  Otherwise,
+ 	 if this is an expression of some kind, record it elsewhere.  */
+       if (optimize
+ 	  && !optimize_debug
+ 	  && AGGREGATE_TYPE_P (operation_type)
+ 	  && !TYPE_IS_FAT_POINTER_P (operation_type)
+ 	  && TYPE_MODE (operation_type) == BLKmode
+ 	  && aggregate_value_p (operation_type, current_function_decl))
+ 	{
+ 	  /* Strip useless conversions around the return value.  */
+ 	  if (gnat_useless_type_conversion (ret_val))
+ 	    ret_val = TREE_OPERAND (ret_val, 0);
+ 
+ 	  /* Now apply the test to the return value.  */
+ 	  if (return_value_ok_for_nrv_p (ret_obj, ret_val))
+ 	    {
+ 	      if (!f_named_ret_val)
+ 		f_named_ret_val = BITMAP_GGC_ALLOC ();
+ 	      bitmap_set_bit (f_named_ret_val, DECL_UID (ret_val));
+ 	    }
+ 
+ 	  /* Note that we need not care about CONSTRUCTORs here, as they are
+ 	     totally transparent given the read-compose-write semantics of
+ 	     assignments from CONSTRUCTORs.  */
+ 	  else if (EXPR_P (ret_val))
+ 	    vec_safe_push (f_other_ret_val, ret_val);
+ 	}
+     }
+   else
+     result_expr = ret_obj;
+ 
+   return build1 (RETURN_EXPR, void_type_node, result_expr);
+ }
+ 
+ /* Subroutine of gnat_to_gnu to process gnat_node, an N_Subprogram_Body.  We
+    don't return anything.  */
+ 
+ static void
+ Subprogram_Body_to_gnu (Node_Id gnat_node)
+ {
+   /* Defining identifier of a parameter to the subprogram.  */
+   Entity_Id gnat_param;
+   /* The defining identifier for the subprogram body. Note that if a
+      specification has appeared before for this body, then the identifier
+      occurring in that specification will also be a defining identifier and all
+      the calls to this subprogram will point to that specification.  */
+   Entity_Id gnat_subprog_id
+     = (Present (Corresponding_Spec (gnat_node))
+        ? Corresponding_Spec (gnat_node) : Defining_Entity (gnat_node));
+   /* The FUNCTION_DECL node corresponding to the subprogram spec.   */
+   tree gnu_subprog_decl;
+   /* Its RESULT_DECL node.  */
+   tree gnu_result_decl;
+   /* Its FUNCTION_TYPE node.  */
+   tree gnu_subprog_type;
+   /* The TYPE_CI_CO_LIST of its FUNCTION_TYPE node, if any.  */
+   tree gnu_cico_list;
+   /* The entry in the CI_CO_LIST that represents a function return, if any.  */
+   tree gnu_return_var_elmt = NULL_TREE;
+   tree gnu_result;
+   location_t locus;
+   struct language_function *gnu_subprog_language;
+   vec<parm_attr, va_gc> *cache;
+ 
+   /* If this is a generic object or if it has been eliminated,
+      ignore it.  */
+   if (Ekind (gnat_subprog_id) == E_Generic_Procedure
+       || Ekind (gnat_subprog_id) == E_Generic_Function
+       || Is_Eliminated (gnat_subprog_id))
+     return;
+ 
+   /* If this subprogram acts as its own spec, define it.  Otherwise, just get
+      the already-elaborated tree node.  However, if this subprogram had its
+      elaboration deferred, we will already have made a tree node for it.  So
+      treat it as not being defined in that case.  Such a subprogram cannot
+      have an address clause or a freeze node, so this test is safe, though it
+      does disable some otherwise-useful error checking.  */
+   gnu_subprog_decl
+     = gnat_to_gnu_entity (gnat_subprog_id, NULL_TREE,
+ 			  Acts_As_Spec (gnat_node)
+ 			  && !present_gnu_tree (gnat_subprog_id));
+   DECL_FUNCTION_IS_DEF (gnu_subprog_decl) = true;
+   gnu_result_decl = DECL_RESULT (gnu_subprog_decl);
+   gnu_subprog_type = TREE_TYPE (gnu_subprog_decl);
+   gnu_cico_list = TYPE_CI_CO_LIST (gnu_subprog_type);
+   if (gnu_cico_list && TREE_VALUE (gnu_cico_list) == void_type_node)
+     gnu_return_var_elmt = gnu_cico_list;
+ 
+   /* If the function returns by invisible reference, make it explicit in the
+      function body.  See gnat_to_gnu_entity, E_Subprogram_Type case.  */
+   if (TREE_ADDRESSABLE (gnu_subprog_type))
+     {
+       TREE_TYPE (gnu_result_decl)
+ 	= build_reference_type (TREE_TYPE (gnu_result_decl));
+       relayout_decl (gnu_result_decl);
+     }
+ 
+   /* Set the line number in the decl to correspond to that of the body.  */
+   if (DECL_IGNORED_P (gnu_subprog_decl))
+     locus = UNKNOWN_LOCATION;
+   else if (!Sloc_to_locus (Sloc (gnat_node), &locus, false, gnu_subprog_decl))
+     locus = input_location;
+   DECL_SOURCE_LOCATION (gnu_subprog_decl) = locus;
+ 
+   /* If the body comes from an expression function, arrange it to be inlined
+      in almost all cases.  */
+   if (Was_Expression_Function (gnat_node) && !Debug_Flag_Dot_8)
+     DECL_DISREGARD_INLINE_LIMITS (gnu_subprog_decl) = 1;
+ 
+   /* Try to create a bona-fide thunk and hand it over to the middle-end.  */
+   if (Is_Thunk (gnat_subprog_id)
+       && maybe_make_gnu_thunk (gnat_subprog_id, gnu_subprog_decl))
+     return;
+ 
+   /* Initialize the information structure for the function.  */
+   allocate_struct_function (gnu_subprog_decl, false);
+   gnu_subprog_language = ggc_cleared_alloc<language_function> ();
+   DECL_STRUCT_FUNCTION (gnu_subprog_decl)->language = gnu_subprog_language;
+   DECL_STRUCT_FUNCTION (gnu_subprog_decl)->function_start_locus = locus;
+   set_cfun (NULL);
+ 
+   begin_subprog_body (gnu_subprog_decl);
+ 
+   /* If there are copy-in/copy-out parameters, we need to ensure that they are
+      properly copied out by the return statement.  We do this by making a new
+      block and converting any return into a goto to a label at the end of the
+      block.  */
+   if (gnu_cico_list)
+     {
+       tree gnu_return_var = NULL_TREE;
+ 
+       vec_safe_push (gnu_return_label_stack,
+ 		     create_artificial_label (input_location));
+ 
+       start_stmt_group ();
+       gnat_pushlevel ();
+ 
+       /* If this is a function with copy-in/copy-out parameters and which does
+ 	 not return by invisible reference, we also need a variable for the
+ 	 return value to be placed.  */
+       if (gnu_return_var_elmt && !TREE_ADDRESSABLE (gnu_subprog_type))
+ 	{
+ 	  tree gnu_return_type
+ 	    = TREE_TYPE (TREE_PURPOSE (gnu_return_var_elmt));
+ 
+ 	  gnu_return_var
+ 	    = create_var_decl (get_identifier ("RETVAL"), NULL_TREE,
+ 			       gnu_return_type, NULL_TREE,
+ 			       false, false, false, false, false,
+ 			       true, false, NULL, gnat_subprog_id);
+ 	  TREE_VALUE (gnu_return_var_elmt) = gnu_return_var;
+ 	}
+ 
+       vec_safe_push (gnu_return_var_stack, gnu_return_var);
+ 
+       /* See whether there are parameters for which we don't have a GCC tree
+ 	 yet.  These must be Out parameters.  Make a VAR_DECL for them and
+ 	 put it into TYPE_CI_CO_LIST, which must contain an empty entry too.
+ 	 We can match up the entries because TYPE_CI_CO_LIST is in the order
+ 	 of the parameters.  */
+       for (gnat_param = First_Formal_With_Extras (gnat_subprog_id);
+ 	   Present (gnat_param);
+ 	   gnat_param = Next_Formal_With_Extras (gnat_param))
+ 	if (!present_gnu_tree (gnat_param))
+ 	  {
+ 	    tree gnu_cico_entry = gnu_cico_list;
+ 	    tree gnu_decl;
+ 
+ 	    /* Skip any entries that have been already filled in; they must
+ 	       correspond to In Out parameters.  */
+ 	    while (gnu_cico_entry && TREE_VALUE (gnu_cico_entry))
+ 	      gnu_cico_entry = TREE_CHAIN (gnu_cico_entry);
+ 
+ 	    /* Do any needed dereferences for by-ref objects.  */
+ 	    gnu_decl = gnat_to_gnu_entity (gnat_param, NULL_TREE, true);
+ 	    gcc_assert (DECL_P (gnu_decl));
+ 	    if (DECL_BY_REF_P (gnu_decl))
+ 	      gnu_decl = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_decl);
+ 
+ 	    /* Do any needed references for padded types.  */
+ 	    TREE_VALUE (gnu_cico_entry)
+ 	      = convert (TREE_TYPE (TREE_PURPOSE (gnu_cico_entry)), gnu_decl);
+ 	  }
+     }
+   else
+     vec_safe_push (gnu_return_label_stack, NULL_TREE);
+ 
+   /* Get a tree corresponding to the code for the subprogram.  */
+   start_stmt_group ();
+   gnat_pushlevel ();
+ 
+   process_decls (Declarations (gnat_node), Empty, Empty, true, true);
+ 
+   /* Generate the code of the subprogram itself.  A return statement will be
+      present and any Out parameters will be handled there.  */
+   add_stmt (gnat_to_gnu (Handled_Statement_Sequence (gnat_node)));
+   gnat_poplevel ();
+   gnu_result = end_stmt_group ();
+ 
+   /* Attempt setting the end_locus of our GCC body tree, typically a BIND_EXPR,
+      then the end_locus of our GCC subprogram declaration tree.  */
+   set_end_locus_from_node (gnu_result, gnat_node);
+   set_end_locus_from_node (gnu_subprog_decl, gnat_node);
+ 
+   /* If we populated the parameter attributes cache, we need to make sure that
+      the cached expressions are evaluated on all the possible paths leading to
+      their uses.  So we force their evaluation on entry of the function.  */
+   cache = gnu_subprog_language->parm_attr_cache;
+   if (cache)
+     {
+       struct parm_attr_d *pa;
+       int i;
+ 
+       start_stmt_group ();
+ 
+       FOR_EACH_VEC_ELT (*cache, i, pa)
+ 	{
+ 	  if (pa->first)
+ 	    add_stmt_with_node_force (pa->first, gnat_node);
+ 	  if (pa->last)
+ 	    add_stmt_with_node_force (pa->last, gnat_node);
+ 	  if (pa->length)
+ 	    add_stmt_with_node_force (pa->length, gnat_node);
+ 	}
+ 
+       add_stmt (gnu_result);
+       gnu_result = end_stmt_group ();
+ 
+       gnu_subprog_language->parm_attr_cache = NULL;
+     }
+ 
+   /* If we are dealing with a return from an Ada procedure with parameters
+      passed by copy-in/copy-out, we need to return a record containing the
+      final values of these parameters.  If the list contains only one entry,
+      return just that entry though.
+ 
+      For a full description of the copy-in/copy-out parameter mechanism, see
+      the part of the gnat_to_gnu_entity routine dealing with the translation
+      of subprograms.
+ 
+      We need to make a block that contains the definition of that label and
+      the copying of the return value.  It first contains the function, then
+      the label and copy statement.  */
+   if (gnu_cico_list)
+     {
+       const Node_Id gnat_end_label
+ 	= End_Label (Handled_Statement_Sequence (gnat_node));
+ 
+       gnu_return_var_stack->pop ();
+ 
+       add_stmt (gnu_result);
+       add_stmt (build1 (LABEL_EXPR, void_type_node,
+ 			gnu_return_label_stack->last ()));
+ 
+       /* If this is a function which returns by invisible reference, the
+ 	 return value has already been dealt with at the return statements,
+ 	 so we only need to indirectly copy out the parameters.  */
+       if (TREE_ADDRESSABLE (gnu_subprog_type))
+ 	{
+ 	  tree gnu_ret_deref
+ 	    = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_result_decl);
+ 	  tree t;
+ 
+ 	  gcc_assert (TREE_VALUE (gnu_cico_list) == void_type_node);
+ 
+ 	  for (t = TREE_CHAIN (gnu_cico_list); t; t = TREE_CHAIN (t))
+ 	    {
+ 	      tree gnu_field_deref
+ 		= build_component_ref (gnu_ret_deref, TREE_PURPOSE (t), true);
+ 	      gnu_result = build2 (MODIFY_EXPR, void_type_node,
+ 				   gnu_field_deref, TREE_VALUE (t));
+ 	      add_stmt_with_node (gnu_result, gnat_end_label);
+ 	    }
+ 	}
+ 
+       /* Otherwise, if this is a procedure or a function which does not return
+ 	 by invisible reference, we can do a direct block-copy out.  */
+       else
+ 	{
+ 	  tree gnu_retval;
+ 
+ 	  if (list_length (gnu_cico_list) == 1)
+ 	    gnu_retval = TREE_VALUE (gnu_cico_list);
+ 	  else
+ 	    gnu_retval
+ 	      = build_constructor_from_list (TREE_TYPE (gnu_subprog_type),
+ 					     gnu_cico_list);
+ 
+ 	  gnu_result = build_return_expr (gnu_result_decl, gnu_retval);
+ 	  add_stmt_with_node (gnu_result, gnat_end_label);
+ 	}
+ 
+       gnat_poplevel ();
+       gnu_result = end_stmt_group ();
+     }
+ 
+   gnu_return_label_stack->pop ();
+ 
+   /* On SEH targets, install an exception handler around the main entry
+      point to catch unhandled exceptions.  */
+   if (DECL_NAME (gnu_subprog_decl) == main_identifier_node
+       && targetm_common.except_unwind_info (&global_options) == UI_SEH)
+     {
+       tree t;
+       tree etype;
+ 
+       t = build_call_expr (builtin_decl_explicit (BUILT_IN_EH_POINTER),
+ 			   1, integer_zero_node);
+       t = build_call_n_expr (unhandled_except_decl, 1, t);
+ 
+       etype = build_unary_op (ADDR_EXPR, NULL_TREE, unhandled_others_decl);
+       etype = tree_cons (NULL_TREE, etype, NULL_TREE);
+ 
+       t = build2 (CATCH_EXPR, void_type_node, etype, t);
+       gnu_result = build2 (TRY_CATCH_EXPR, TREE_TYPE (gnu_result),
+ 			   gnu_result, t);
+     }
+ 
+   end_subprog_body (gnu_result);
+ 
+   /* Finally annotate the parameters and disconnect the trees for parameters
+      that we have turned into variables since they are now unusable.  */
+   for (gnat_param = First_Formal_With_Extras (gnat_subprog_id);
+        Present (gnat_param);
+        gnat_param = Next_Formal_With_Extras (gnat_param))
+     {
+       tree gnu_param = get_gnu_tree (gnat_param);
+       bool is_var_decl = (TREE_CODE (gnu_param) == VAR_DECL);
+ 
+       annotate_object (gnat_param, TREE_TYPE (gnu_param), NULL_TREE,
+ 		       DECL_BY_REF_P (gnu_param));
+ 
+       if (is_var_decl)
+ 	save_gnu_tree (gnat_param, NULL_TREE, false);
+     }
+ 
+   /* Disconnect the variable created for the return value.  */
+   if (gnu_return_var_elmt)
+     TREE_VALUE (gnu_return_var_elmt) = void_type_node;
+ 
+   /* If the function returns an aggregate type and we have candidates for
+      a Named Return Value, finalize the optimization.  */
+   if (optimize && !optimize_debug && gnu_subprog_language->named_ret_val)
+     {
+       finalize_nrv (gnu_subprog_decl,
+ 		    gnu_subprog_language->named_ret_val,
+ 		    gnu_subprog_language->other_ret_val,
+ 		    gnu_subprog_language->gnat_ret);
+       gnu_subprog_language->named_ret_val = NULL;
+       gnu_subprog_language->other_ret_val = NULL;
+     }
+ 
+   /* If this is an inlined external function that has been marked uninlinable,
+      drop the body and stop there.  Otherwise compile the body.  */
+   if (DECL_EXTERNAL (gnu_subprog_decl) && DECL_UNINLINABLE (gnu_subprog_decl))
+     DECL_SAVED_TREE (gnu_subprog_decl) = NULL_TREE;
+   else
+     rest_of_subprog_body_compilation (gnu_subprog_decl);
+ }
+ 
+ /* The type of an atomic access.  */
+ 
+ typedef enum { NOT_ATOMIC, SIMPLE_ATOMIC, OUTER_ATOMIC } atomic_acces_t;
+ 
+ /* Return true if GNAT_NODE references an Atomic entity.  This is modeled on
+    the Is_Atomic_Object predicate of the front-end, but additionally handles
+    explicit dereferences.  */
+ 
+ static bool
+ node_is_atomic (Node_Id gnat_node)
+ {
+   Entity_Id gnat_entity;
+ 
+   switch (Nkind (gnat_node))
+     {
+     case N_Identifier:
+     case N_Expanded_Name:
+       gnat_entity = Entity (gnat_node);
+       if (Ekind (gnat_entity) != E_Variable)
+ 	break;
+       return Is_Atomic (gnat_entity) || Is_Atomic (Etype (gnat_entity));
+ 
+     case N_Selected_Component:
+       return Is_Atomic (Etype (gnat_node))
+ 	     || Is_Atomic (Entity (Selector_Name (gnat_node)));
+ 
+     case N_Indexed_Component:
+       return Is_Atomic (Etype (gnat_node))
+ 	     || Has_Atomic_Components (Etype (Prefix (gnat_node)))
+ 	     || (Is_Entity_Name (Prefix (gnat_node))
+ 		 && Has_Atomic_Components (Entity (Prefix (gnat_node))));
+ 
+     case N_Explicit_Dereference:
+       return Is_Atomic (Etype (gnat_node));
+ 
+     default:
+       break;
+     }
+ 
+   return false;
+ }
+ 
+ /* Return true if GNAT_NODE references a Volatile_Full_Access entity.  This is
+    modeled on the Is_Volatile_Full_Access_Object predicate of the front-end,
+    but additionally handles explicit dereferences.  */
+ 
+ static bool
+ node_is_volatile_full_access (Node_Id gnat_node)
+ {
+   Entity_Id gnat_entity;
+ 
+   switch (Nkind (gnat_node))
+     {
+     case N_Identifier:
+     case N_Expanded_Name:
+       gnat_entity = Entity (gnat_node);
+       if (!Is_Object (gnat_entity))
+ 	break;
+       return Is_Volatile_Full_Access (gnat_entity)
+ 	     || Is_Volatile_Full_Access (Etype (gnat_entity));
+ 
+     case N_Selected_Component:
+       return Is_Volatile_Full_Access (Etype (gnat_node))
+ 	     || Is_Volatile_Full_Access (Entity (Selector_Name (gnat_node)));
+ 
+     case N_Indexed_Component:
+     case N_Explicit_Dereference:
+       return Is_Volatile_Full_Access (Etype (gnat_node));
+ 
+     default:
+       break;
+     }
+ 
+   return false;
+ }
+ 
+ /* Return true if GNAT_NODE references a component of a larger object.  */
+ 
+ static inline bool
+ node_is_component (Node_Id gnat_node)
+ {
+   const Node_Kind k = Nkind (gnat_node);
+   return
+     (k == N_Indexed_Component || k == N_Selected_Component || k == N_Slice);
+ }
+ 
+ /* Compute whether GNAT_NODE requires atomic access and set TYPE to the type
+    of access and SYNC according to the associated synchronization setting.
+ 
+    We implement 3 different semantics of atomicity in this function:
+ 
+      1. the Ada 95/2005/2012 semantics of the Atomic aspect/pragma,
+      2. the Ada 2022 semantics of the Atomic aspect/pragma,
+      3. the semantics of the Volatile_Full_Access GNAT aspect/pragma.
+ 
+   They are mutually exclusive and the FE should have rejected conflicts.  */
+ 
+ static void
+ get_atomic_access (Node_Id gnat_node, atomic_acces_t *type, bool *sync)
+ {
+   Node_Id gnat_parent, gnat_temp;
+   unsigned char attr_id;
+ 
+   /* First, scan the parent to filter out irrelevant cases.  */
+   gnat_parent = Parent (gnat_node);
+   switch (Nkind (gnat_parent))
+     {
+     case N_Attribute_Reference:
+       attr_id = Get_Attribute_Id (Attribute_Name (gnat_parent));
+       /* Do not mess up machine code insertions.  */
+       if (attr_id == Attr_Asm_Input || attr_id == Attr_Asm_Output)
+ 	goto not_atomic;
+ 
+       /* Nothing to do if we are the prefix of an attribute, since we do not
+ 	 want an atomic access for things like 'Size.  */
+ 
+       /* ... fall through ... */
+ 
+     case N_Reference:
+       /* The N_Reference node is like an attribute.  */
+       if (Prefix (gnat_parent) == gnat_node)
+ 	goto not_atomic;
+       break;
+ 
+     case N_Object_Renaming_Declaration:
+       /* Nothing to do for the identifier in an object renaming declaration,
+          the renaming itself does not need atomic access.  */
+       goto not_atomic;
+ 
+     default:
+       break;
+     }
+ 
+   /* Now strip any type conversion from GNAT_NODE.  */
+   if (Nkind (gnat_node) == N_Type_Conversion
+       || Nkind (gnat_node) == N_Unchecked_Type_Conversion)
+     gnat_node = Expression (gnat_node);
+ 
+   /* Up to Ada 2012, for Atomic itself, only reads and updates of the object as
+      a whole require atomic access (RM C.6(15)).  But, starting with Ada 2022,
+      reads of or writes to a nonatomic subcomponent of the object also require
+      atomic access (RM C.6(19)).  */
+   if (node_is_atomic (gnat_node))
+     {
+       bool as_a_whole = true;
+ 
+       /* If we are the prefix of the parent, then the access is partial.  */
+       for (gnat_temp = gnat_node, gnat_parent = Parent (gnat_temp);
+ 	   node_is_component (gnat_parent) && Prefix (gnat_parent) == gnat_temp;
+ 	   gnat_temp = gnat_parent, gnat_parent = Parent (gnat_temp))
+ 	if (Ada_Version < Ada_2022 || node_is_atomic (gnat_parent))
+ 	  goto not_atomic;
+ 	else
+ 	  as_a_whole = false;
+ 
+       /* We consider that partial accesses are not sequential actions and,
+ 	 therefore, do not require synchronization.  */
+       *type = SIMPLE_ATOMIC;
+       *sync = as_a_whole ? Atomic_Sync_Required (gnat_node) : false;
+       return;
+     }
+ 
+   /* Look for an outer atomic access of a nonatomic subcomponent.  Note that,
+      for VFA, we do this before looking at the node itself because we need to
+      access the outermost VFA object atomically, unlike for Atomic where it is
+      the innermost atomic object (RM C.6(19)).  */
+   for (gnat_temp = gnat_node;
+        node_is_component (gnat_temp);
+        gnat_temp = Prefix (gnat_temp))
+     if ((Ada_Version >= Ada_2022 && node_is_atomic (Prefix (gnat_temp)))
+ 	|| node_is_volatile_full_access (Prefix (gnat_temp)))
+       {
+ 	*type = OUTER_ATOMIC;
+ 	*sync = false;
+ 	return;
+       }
+ 
+   /* Unlike Atomic, accessing a VFA object always requires atomic access.  */
+   if (node_is_volatile_full_access (gnat_node))
+     {
+       *type = SIMPLE_ATOMIC;
+       *sync = false;
+       return;
+     }
+ 
+ not_atomic:
+   *type = NOT_ATOMIC;
+   *sync = false;
+ }
+ 
+ /* Return true if GNAT_NODE requires simple atomic access and, if so, set SYNC
+    according to the associated synchronization setting.  */
+ 
+ static inline bool
+ simple_atomic_access_required_p (Node_Id gnat_node, bool *sync)
+ {
+   atomic_acces_t type;
+   get_atomic_access (gnat_node, &type, sync);
+   return type == SIMPLE_ATOMIC;
+ }
+ 
+ /* Create a temporary variable with PREFIX and TYPE, and return it.  */
+ 
+ static tree
+ create_temporary (const char *prefix, tree type)
+ {
+   tree gnu_temp
+     = create_var_decl (create_tmp_var_name (prefix), NULL_TREE,
+ 		      type, NULL_TREE,
+ 		      false, false, false, false, false,
+ 		      true, false, NULL, Empty);
+   return gnu_temp;
+ }
+ 
+ /* Create a temporary variable with PREFIX and initialize it with GNU_INIT.
+    Put the initialization statement into GNU_INIT_STMT and annotate it with
+    the SLOC of GNAT_NODE.  Return the temporary variable.  */
+ 
+ static tree
+ create_init_temporary (const char *prefix, tree gnu_init, tree *gnu_init_stmt,
+ 		       Node_Id gnat_node)
+ {
+   tree gnu_temp = create_temporary (prefix, TREE_TYPE (gnu_init));
+ 
+   *gnu_init_stmt = build_binary_op (INIT_EXPR, NULL_TREE, gnu_temp, gnu_init);
+   set_expr_location_from_node (*gnu_init_stmt, gnat_node);
+ 
+   return gnu_temp;
+ }
+ 
+ /* Return true if TYPE is an array of scalar type.  */
+ 
+ static bool
+ is_array_of_scalar_type (tree type)
+ {
+   if (TREE_CODE (type) != ARRAY_TYPE)
+     return false;
+ 
+   type = TREE_TYPE (type);
+ 
+   return !AGGREGATE_TYPE_P (type) && !POINTER_TYPE_P (type);
+ }
+ 
+ /* Helper function for walk_tree, used by return_slot_opt_for_pure_call_p.  */
+ 
+ static tree
+ find_decls_r (tree *tp, int *walk_subtrees, void *data)
+ {
+   bitmap decls = (bitmap) data;
+ 
+   if (TYPE_P (*tp))
+     *walk_subtrees = 0;
+ 
+   else if (DECL_P (*tp))
+     bitmap_set_bit (decls, DECL_UID (*tp));
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Return whether the assignment TARGET = CALL can be subject to the return
+    slot optimization, under the assumption that the called function be pure
+    in the Ada sense and return an array of scalar type.  */
+ 
+ static bool
+ return_slot_opt_for_pure_call_p (tree target, tree call)
+ {
+   /* Check that the target is a DECL.  */
+   if (!DECL_P (target))
+     return false;
+ 
+   const bitmap decls = BITMAP_GGC_ALLOC ();
+   call_expr_arg_iterator iter;
+   tree arg;
+ 
+   /* Check that all the arguments have either a scalar type (we assume that
+      this means by-copy passing mechanism) or array of scalar type.  */
+   FOR_EACH_CALL_EXPR_ARG (arg, iter, call)
+     {
+       tree arg_type = TREE_TYPE (arg);
+       if (TREE_CODE (arg_type) == REFERENCE_TYPE)
+ 	arg_type = TREE_TYPE (arg_type);
+ 
+       if (is_array_of_scalar_type (arg_type))
+ 	walk_tree_without_duplicates (&arg, find_decls_r, decls);
+ 
+       else if (AGGREGATE_TYPE_P (arg_type) || POINTER_TYPE_P (arg_type))
+ 	return false;
+     }
+ 
+   /* Check that the target is not referenced by the non-scalar arguments.  */
+   return !bitmap_bit_p (decls, DECL_UID (target));
+ }
+ 
+ /* Elaborate types referenced in the profile (FIRST_FORMAL, RESULT_TYPE).  */
+ 
+ static void
+ elaborate_profile (Entity_Id first_formal, Entity_Id result_type)
+ {
+   Entity_Id formal;
+ 
+   for (formal = first_formal;
+        Present (formal);
+        formal = Next_Formal_With_Extras (formal))
+     (void) gnat_to_gnu_type (Etype (formal));
+ 
+   if (Present (result_type) && Ekind (result_type) != E_Void)
+     (void) gnat_to_gnu_type (result_type);
+ }
+ 
+ /* Subroutine of gnat_to_gnu to translate gnat_node, either an N_Function_Call
+    or an N_Procedure_Call_Statement, to a GCC tree, which is returned.
+    GNU_RESULT_TYPE_P is a pointer to where we should place the result type.
+    If GNU_TARGET is non-null, this must be a function call on the RHS of a
+    N_Assignment_Statement and the result is to be placed into that object.
+    ATOMIC_ACCESS is the type of atomic access to be used for the assignment
+    to GNU_TARGET.  If, in addition, ATOMIC_SYNC is true, then the assignment
+    to GNU_TARGET requires atomic synchronization.  */
+ 
+ static tree
+ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target,
+ 	     atomic_acces_t atomic_access, bool atomic_sync)
+ {
+   const bool function_call = (Nkind (gnat_node) == N_Function_Call);
+   const bool returning_value = (function_call && !gnu_target);
+   /* The GCC node corresponding to the GNAT subprogram name.  This can either
+      be a FUNCTION_DECL node if we are dealing with a standard subprogram call,
+      or an indirect reference expression (an INDIRECT_REF node) pointing to a
+      subprogram.  */
+   const Node_Id gnat_subprog = Name (gnat_node);
+   tree gnu_subprog = gnat_to_gnu (gnat_subprog);
+   /* The FUNCTION_TYPE node giving the GCC type of the subprogram.  */
+   tree gnu_subprog_type = TREE_TYPE (gnu_subprog);
+   /* The return type of the FUNCTION_TYPE.  */
+   tree gnu_result_type;;
+   const bool frontend_builtin
+     = (TREE_CODE (gnu_subprog) == FUNCTION_DECL
+        && DECL_BUILT_IN_CLASS (gnu_subprog) == BUILT_IN_FRONTEND);
+   auto_vec<tree, 16> gnu_actual_vec;
+   tree gnu_name_list = NULL_TREE;
+   tree gnu_stmt_list = NULL_TREE;
+   tree gnu_after_list = NULL_TREE;
+   tree gnu_retval = NULL_TREE;
+   tree gnu_call, gnu_result;
+   bool went_into_elab_proc;
+   bool pushed_binding_level;
+   bool variadic;
+   bool by_descriptor;
+   Entity_Id gnat_formal;
+   Entity_Id gnat_result_type;
+   Node_Id gnat_actual;
+   atomic_acces_t aa_type;
+   bool aa_sync;
+ 
+   /* The only way we can make a call via an access type is if GNAT_NAME is an
+      explicit dereference.  In that case, get the list of formal args from the
+      type the access type is pointing to.  Otherwise, get the formals from the
+      entity being called.  */
+   if (Nkind (gnat_subprog) == N_Explicit_Dereference)
+     {
+       const Entity_Id gnat_prefix_type
+ 	= Underlying_Type (Etype (Prefix (gnat_subprog)));
+ 
+       gnat_formal = First_Formal_With_Extras (Etype (gnat_subprog));
+       gnat_result_type = Etype (Etype (gnat_subprog));
+       variadic = IN (Convention (gnat_prefix_type), Convention_C_Variadic);
+ 
+       /* If the access type doesn't require foreign-compatible representation,
+ 	 be prepared for descriptors.  */
+       by_descriptor
+ 	= targetm.calls.custom_function_descriptors > 0
+ 	  && Can_Use_Internal_Rep (gnat_prefix_type);
+     }
+ 
+   else if (Nkind (gnat_subprog) == N_Attribute_Reference)
+     {
+       /* Assume here that this must be 'Elab_Body or 'Elab_Spec.  */
+       gnat_formal = Empty;
+       gnat_result_type = Empty;
+       variadic = false;
+       by_descriptor = false;
+     }
+ 
+   else
+     {
+       gcc_checking_assert (Is_Entity_Name (gnat_subprog));
+ 
+       gnat_formal = First_Formal_With_Extras (Entity (gnat_subprog));
+       gnat_result_type = Etype (Entity_Id (gnat_subprog));
+       variadic = IN (Convention (Entity (gnat_subprog)), Convention_C_Variadic);
+       by_descriptor = false;
+ 
+       /* If we are calling a stubbed function, then raise Program_Error, but
+ 	 elaborate all our args first.  */
+       if (Convention (Entity (gnat_subprog)) == Convention_Stubbed)
+ 	{
+ 	  tree call_expr = build_call_raise (PE_Stubbed_Subprogram_Called,
+ 					     gnat_node, N_Raise_Program_Error);
+ 
+ 	  for (gnat_actual = First_Actual (gnat_node);
+ 	       Present (gnat_actual);
+ 	       gnat_actual = Next_Actual (gnat_actual))
+ 	    add_stmt (gnat_to_gnu (gnat_actual));
+ 
+ 	  if (returning_value)
+ 	    {
+ 	      gnu_result_type = TREE_TYPE (gnu_subprog_type);
+ 	      *gnu_result_type_p = gnu_result_type;
+ 	      return build1 (NULL_EXPR, gnu_result_type, call_expr);
+ 	    }
+ 
+ 	  return call_expr;
+ 	}
+     }
+ 
+   /* We must elaborate the entire profile now because, if it references types
+      that were initially incomplete,, their elaboration changes the contents
+      of GNU_SUBPROG_TYPE and, in particular, may change the result type.  */
+   elaborate_profile (gnat_formal, gnat_result_type);
+ 
+   gcc_assert (FUNC_OR_METHOD_TYPE_P (gnu_subprog_type));
+   gnu_result_type = TREE_TYPE (gnu_subprog_type);
+ 
+   if (TREE_CODE (gnu_subprog) == FUNCTION_DECL)
+     {
+       /* For a call to a nested function, check the inlining status.  */
+       if (decl_function_context (gnu_subprog))
+ 	check_inlining_for_nested_subprog (gnu_subprog);
+ 
+       /* For a recursive call, avoid explosion due to recursive inlining.  */
+       if (gnu_subprog == current_function_decl)
+ 	DECL_DISREGARD_INLINE_LIMITS (gnu_subprog) = 0;
+     }
+ 
+   /* The lifetime of the temporaries created for the call ends right after the
+      return value is copied, so we can give them the scope of the elaboration
+      routine at top level.  */
+   if (!current_function_decl)
+     {
+       current_function_decl = get_elaboration_procedure ();
+       went_into_elab_proc = true;
+     }
+   else
+     went_into_elab_proc = false;
+ 
+   /* First, create the temporary for the return value when:
+ 
+        1. There is no target and the function has copy-in/copy-out parameters,
+ 	  because we need to preserve the return value before copying back the
+ 	  parameters.
+ 
+        2. There is no target and the call is made for neither the declaration
+ 	  of an object (regular or renaming), nor a return statement, nor an
+ 	  allocator, nor an aggregate, and the return type has variable size
+ 	  because in this case the gimplifier cannot create the temporary, or
+ 	  more generally is an aggregate type, because the gimplifier would
+ 	  create the temporary in the outermost scope instead of locally here.
+ 	  But there is an exception for an allocator of unconstrained record
+ 	  type with default discriminant because we allocate the actual size
+ 	  in this case, unlike in the other cases, so we need a temporary to
+ 	  fetch the discriminant and we create it here.
+ 
+        3. There is a target and it is a slice or an array with fixed size,
+ 	  and the return type has variable size, because the gimplifier
+ 	  doesn't handle these cases.
+ 
+        4. There is a target which is a bit-field and the function returns an
+ 	  unconstrained record type with default discriminant, because the
+ 	  return may copy more data than the bit-field can contain.
+ 
+        5. There is no target and we have misaligned In Out or Out parameters
+ 	  passed by reference, because we need to preserve the return value
+ 	  before copying back the parameters.  However, in this case, we'll
+ 	  defer creating the temporary, see below.
+ 
+      This must be done before we push a binding level around the call, since
+      we will pop it before copying the return value.  */
+   if (function_call
+       && ((!gnu_target && TYPE_CI_CO_LIST (gnu_subprog_type))
+ 	  || (!gnu_target
+ 	      && Nkind (Parent (gnat_node)) != N_Object_Declaration
+ 	      && Nkind (Parent (gnat_node)) != N_Object_Renaming_Declaration
+ 	      && Nkind (Parent (gnat_node)) != N_Simple_Return_Statement
+ 	      && (!(Nkind (Parent (gnat_node)) == N_Qualified_Expression
+ 		    && Nkind (Parent (Parent (gnat_node))) == N_Allocator)
+ 		  || type_is_padding_self_referential (gnu_result_type))
+ 	      && Nkind (Parent (gnat_node)) != N_Aggregate
+ 	      && AGGREGATE_TYPE_P (gnu_result_type)
+ 	      && !TYPE_IS_FAT_POINTER_P (gnu_result_type))
+ 	  || (gnu_target
+ 	      && (TREE_CODE (gnu_target) == ARRAY_RANGE_REF
+ 		  || (TREE_CODE (TREE_TYPE (gnu_target)) == ARRAY_TYPE
+ 		      && TREE_CODE (TYPE_SIZE (TREE_TYPE (gnu_target)))
+ 			 == INTEGER_CST))
+ 	      && TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST)
+ 	  || (gnu_target
+ 	      && TREE_CODE (gnu_target) == COMPONENT_REF
+ 	      && DECL_BIT_FIELD (TREE_OPERAND (gnu_target, 1))
+ 	      && DECL_SIZE (TREE_OPERAND (gnu_target, 1))
+ 		 != TYPE_SIZE (TREE_TYPE (gnu_target))
+ 	      && type_is_padding_self_referential (gnu_result_type))))
+     {
+       gnu_retval = create_temporary ("R", gnu_result_type);
+       DECL_RETURN_VALUE_P (gnu_retval) = 1;
+     }
+ 
+   /* If we don't need a value or have already created it, push a binding level
+      around the call.  This will narrow the lifetime of the temporaries we may
+      need to make when translating the parameters as much as possible.  */
+   if (!returning_value || gnu_retval)
+     {
+       start_stmt_group ();
+       gnat_pushlevel ();
+       pushed_binding_level = true;
+     }
+   else
+     pushed_binding_level = false;
+ 
+   /* Create the list of the actual parameters as GCC expects it, namely a
+      chain of TREE_LIST nodes in which the TREE_VALUE field of each node
+      is an expression and the TREE_PURPOSE field is null.  But skip Out
+      parameters not passed by reference and that need not be copied in.  */
+   for (gnat_actual = First_Actual (gnat_node);
+        Present (gnat_actual);
+        gnat_formal = Next_Formal_With_Extras (gnat_formal),
+        gnat_actual = Next_Actual (gnat_actual))
+     {
+       Entity_Id gnat_formal_type = Etype (gnat_formal);
+       tree gnu_formal_type = gnat_to_gnu_type (gnat_formal_type);
+       tree gnu_formal = present_gnu_tree (gnat_formal)
+ 			? get_gnu_tree (gnat_formal) : NULL_TREE;
+       const bool in_param = (Ekind (gnat_formal) == E_In_Parameter);
+       const bool is_true_formal_parm
+ 	= gnu_formal && TREE_CODE (gnu_formal) == PARM_DECL;
+       const bool is_by_ref_formal_parm
+ 	= is_true_formal_parm
+ 	  && (DECL_BY_REF_P (gnu_formal)
+ 	      || DECL_BY_COMPONENT_PTR_P (gnu_formal));
+       /* In the In Out or Out case, we must suppress conversions that yield
+ 	 an lvalue but can nevertheless cause the creation of a temporary,
+ 	 because we need the real object in this case, either to pass its
+ 	 address if it's passed by reference or as target of the back copy
+ 	 done after the call if it uses the copy-in/copy-out mechanism.
+ 	 We do it in the In case too, except for an unchecked conversion
+ 	 to an elementary type or a constrained composite type because it
+ 	 alone can cause the actual to be misaligned and the addressability
+ 	 test is applied to the real object.  */
+       const bool suppress_type_conversion
+ 	= ((Nkind (gnat_actual) == N_Unchecked_Type_Conversion
+ 	    && (!in_param
+ 		|| !is_by_ref_formal_parm
+ 		|| (Is_Composite_Type (Underlying_Type (gnat_formal_type))
+ 		    && !Is_Constrained (Underlying_Type (gnat_formal_type)))))
+ 	   || (Nkind (gnat_actual) == N_Type_Conversion
+ 	       && Is_Composite_Type (Underlying_Type (gnat_formal_type))));
+       Node_Id gnat_name = suppress_type_conversion
+ 			  ? Expression (gnat_actual) : gnat_actual;
+       tree gnu_name = gnat_to_gnu (gnat_name), gnu_name_type;
+ 
+       /* If it's possible we may need to use this expression twice, make sure
+ 	 that any side-effects are handled via SAVE_EXPRs; likewise if we need
+ 	 to force side-effects before the call.  */
+       if (!in_param && !is_by_ref_formal_parm)
+ 	{
+ 	  tree init = NULL_TREE;
+ 	  gnu_name = gnat_stabilize_reference (gnu_name, true, &init);
+ 	  if (init)
+ 	    gnu_name
+ 	      = build_compound_expr (TREE_TYPE (gnu_name), init, gnu_name);
+ 	}
+ 
+       /* If we are passing a non-addressable parameter by reference, pass the
+ 	 address of a copy.  In the In Out or Out case, set up to copy back
+ 	 out after the call.  */
+       if (is_by_ref_formal_parm
+ 	  && (gnu_name_type = gnat_to_gnu_type (Etype (gnat_name)))
+ 	  && !addressable_p (gnu_name, gnu_name_type))
+ 	{
+ 	  tree gnu_orig = gnu_name, gnu_temp, gnu_stmt;
+ 
+ 	  /* Do not issue warnings for CONSTRUCTORs since this is not a copy
+ 	     but sort of an instantiation for them.  */
+ 	  if (TREE_CODE (remove_conversions (gnu_name, true)) == CONSTRUCTOR)
+ 	    ;
+ 
+ 	  /* If the formal is passed by reference, a copy is not allowed.  */
+ 	  else if (TYPE_IS_BY_REFERENCE_P (gnu_formal_type)
+ 		   || Is_Aliased (gnat_formal))
+ 	    post_error ("misaligned actual cannot be passed by reference",
+ 		        gnat_actual);
+ 
+ 	  /* If the mechanism was forced to by-ref, a copy is not allowed but
+ 	     we issue only a warning because this case is not strict Ada.  */
+ 	  else if (DECL_FORCED_BY_REF_P (gnu_formal))
+ 	    post_error ("misaligned actual cannot be passed by reference??",
+ 			gnat_actual);
+ 
+ 	  /* If the actual type of the object is already the nominal type,
+ 	     we have nothing to do, except if the size is self-referential
+ 	     in which case we'll remove the unpadding below.  */
+ 	  if (TREE_TYPE (gnu_name) == gnu_name_type
+ 	      && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_name_type)))
+ 	    ;
+ 
+ 	  /* Otherwise remove the unpadding from all the objects.  */
+ 	  else if (TREE_CODE (gnu_name) == COMPONENT_REF
+ 		   && TYPE_IS_PADDING_P
+ 		      (TREE_TYPE (TREE_OPERAND (gnu_name, 0))))
+ 	    gnu_orig = gnu_name = TREE_OPERAND (gnu_name, 0);
+ 
+ 	  /* Otherwise convert to the nominal type of the object if needed.
+ 	     There are several cases in which we need to make the temporary
+ 	     using this type instead of the actual type of the object when
+ 	     they are distinct, because the expectations of the callee would
+ 	     otherwise not be met:
+ 	       - if it's a justified modular type,
+ 	       - if the actual type is a smaller form of it,
+ 	       - if it's a smaller form of the actual type.  */
+ 	  else if ((TREE_CODE (gnu_name_type) == RECORD_TYPE
+ 		    && (TYPE_JUSTIFIED_MODULAR_P (gnu_name_type)
+ 		        || smaller_form_type_p (TREE_TYPE (gnu_name),
+ 					        gnu_name_type)))
+ 		   || (INTEGRAL_TYPE_P (gnu_name_type)
+ 		       && smaller_form_type_p (gnu_name_type,
+ 					       TREE_TYPE (gnu_name))))
+ 	    gnu_name = convert (gnu_name_type, gnu_name);
+ 
+ 	  /* If this is an In Out or Out parameter and we're returning a value,
+ 	     we need to create a temporary for the return value because we must
+ 	     preserve it before copying back at the very end.  */
+ 	  if (!in_param && returning_value && !gnu_retval)
+ 	    {
+ 	      gnu_retval = create_temporary ("R", gnu_result_type);
+ 	      DECL_RETURN_VALUE_P (gnu_retval) = 1;
+ 	    }
+ 
+ 	  /* If we haven't pushed a binding level, push it now.  This will
+ 	     narrow the lifetime of the temporary we are about to make as
+ 	     much as possible.  */
+ 	  if (!pushed_binding_level && (!returning_value || gnu_retval))
+ 	    {
+ 	      start_stmt_group ();
+ 	      gnat_pushlevel ();
+ 	      pushed_binding_level = true;
+ 	    }
+ 
+ 	  /* Create an explicit temporary holding the copy.  */
+ 	  /* 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)))
+ 	    gnu_name = gnu_temp = create_temporary ("A", TREE_TYPE (gnu_name));
+ 
+ 	  /* Initialize it on the fly like for an implicit temporary in the
+ 	     other cases, as we don't necessarily have a statement list.  */
+ 	  else
+ 	    {
+ 	      gnu_temp = create_init_temporary ("A", gnu_name, &gnu_stmt,
+ 						gnat_actual);
+ 	      gnu_name = build_compound_expr (TREE_TYPE (gnu_name), gnu_stmt,
+ 					      gnu_temp);
+ 	    }
+ 
+ 	  /* Set up to move the copy back to the original if needed.  */
+ 	  if (!in_param)
+ 	    {
+ 	      /* If the original is a COND_EXPR whose first arm isn't meant to
+ 		 be further used, just deal with the second arm.  This is very
+ 		 likely the conditional expression built for a check.  */
+ 	      if (TREE_CODE (gnu_orig) == COND_EXPR
+ 		  && TREE_CODE (TREE_OPERAND (gnu_orig, 1)) == COMPOUND_EXPR
+ 		  && integer_zerop
+ 		     (TREE_OPERAND (TREE_OPERAND (gnu_orig, 1), 1)))
+ 		gnu_orig = TREE_OPERAND (gnu_orig, 2);
+ 
+ 	      gnu_stmt
+ 		= build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_orig, gnu_temp);
+ 	      set_expr_location_from_node (gnu_stmt, gnat_node);
+ 
+ 	      append_to_statement_list (gnu_stmt, &gnu_after_list);
+ 	    }
+ 	}
+ 
+       /* Start from the real object and build the actual.  */
+       tree gnu_actual = gnu_name;
+ 
+       /* If atomic access is required for an In or In Out actual parameter,
+ 	 build the atomic load.  */
+       if (is_true_formal_parm
+ 	  && !is_by_ref_formal_parm
+ 	  && Ekind (gnat_formal) != E_Out_Parameter
+ 	  && simple_atomic_access_required_p (gnat_actual, &aa_sync))
+ 	gnu_actual = build_atomic_load (gnu_actual, aa_sync);
+ 
+       /* If this was a procedure call, we may not have removed any padding.
+ 	 So do it here for the part we will use as an input, if any.  */
+       if (Ekind (gnat_formal) != E_Out_Parameter
+ 	  && TYPE_IS_PADDING_P (TREE_TYPE (gnu_actual)))
+ 	gnu_actual
+ 	  = convert (get_unpadded_type (Etype (gnat_actual)), gnu_actual);
+ 
+       /* Put back the conversion we suppressed above in the computation of the
+ 	 real object.  And even if we didn't suppress any conversion there, we
+ 	 may have suppressed a conversion to the Etype of the actual earlier,
+ 	 since the parent is a procedure call, so put it back here.  Note that
+ 	 we might have a dummy type here if the actual is the dereference of a
+ 	 pointer to it, but that's OK when the formal is passed by reference.
+ 	 We also do not put back a conversion between an actual and a formal
+ 	 that are unconstrained array types to avoid creating local bounds.  */
+       tree gnu_actual_type = get_unpadded_type (Etype (gnat_actual));
+       if (TYPE_IS_DUMMY_P (gnu_actual_type))
+ 	gcc_assert (is_true_formal_parm && DECL_BY_REF_P (gnu_formal));
+       else if (suppress_type_conversion
+ 	       && Nkind (gnat_actual) == N_Unchecked_Type_Conversion)
+ 	gnu_actual = unchecked_convert (gnu_actual_type, gnu_actual,
+ 				        No_Truncation (gnat_actual));
+       else if ((TREE_CODE (TREE_TYPE (gnu_actual)) == UNCONSTRAINED_ARRAY_TYPE
+ 		|| (TREE_CODE (TREE_TYPE (gnu_actual)) == RECORD_TYPE
+ 		    && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (gnu_actual))))
+ 	       && TREE_CODE (gnu_formal_type) == UNCONSTRAINED_ARRAY_TYPE)
+ 	;
+       else
+ 	gnu_actual = convert (gnu_actual_type, gnu_actual);
+ 
+       gigi_checking_assert (!Do_Range_Check (gnat_actual));
+ 
+       /* First see if the parameter is passed by reference.  */
+       if (is_true_formal_parm && DECL_BY_REF_P (gnu_formal))
+ 	{
+ 	  if (!in_param)
+ 	    {
+ 	      /* In Out or Out parameters passed by reference don't use the
+ 		 copy-in/copy-out mechanism so the address of the real object
+ 		 must be passed to the function.  */
+ 	      gnu_actual = gnu_name;
+ 
+ 	      /* If we have a padded type, be sure we've removed padding.  */
+ 	      if (TYPE_IS_PADDING_P (TREE_TYPE (gnu_actual)))
+ 		gnu_actual = convert (get_unpadded_type (Etype (gnat_actual)),
+ 				      gnu_actual);
+ 
+ 	      /* If we have the constructed subtype of an aliased object
+ 		 with an unconstrained nominal subtype, the type of the
+ 		 actual includes the template, although it is formally
+ 		 constrained.  So we need to convert it back to the real
+ 		 constructed subtype to retrieve the constrained part
+ 		 and takes its address.  */
+ 	      if (TREE_CODE (TREE_TYPE (gnu_actual)) == RECORD_TYPE
+ 		  && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (gnu_actual))
+ 		  && Is_Constr_Subt_For_UN_Aliased (Etype (gnat_actual))
+ 		  && Is_Array_Type (Underlying_Type (Etype (gnat_actual))))
+ 		gnu_actual = convert (gnu_actual_type, gnu_actual);
+ 	    }
+ 
+ 	  /* There is no need to convert the actual to the formal's type before
+ 	     taking its address.  The only exception is for unconstrained array
+ 	     types because of the way we build fat pointers.  */
+ 	  if (TREE_CODE (gnu_formal_type) == UNCONSTRAINED_ARRAY_TYPE)
+ 	    {
+ 	      /* Put back the conversion we suppressed above for In Out or Out
+ 		 parameters, since it may set the bounds of the actual.  */
+ 	      if (!in_param && suppress_type_conversion)
+ 		gnu_actual = convert (gnu_actual_type, gnu_actual);
+ 	      gnu_actual = convert (gnu_formal_type, gnu_actual);
+ 	    }
+ 
+ 	  /* Take the address of the object and convert to the proper pointer
+ 	     type.  */
+ 	  gnu_formal_type = TREE_TYPE (gnu_formal);
+ 	  gnu_actual = build_unary_op (ADDR_EXPR, gnu_formal_type, gnu_actual);
+ 	}
+ 
+       /* Then see if the parameter is an array passed to a foreign convention
+ 	 subprogram.  */
+       else if (is_true_formal_parm && DECL_BY_COMPONENT_PTR_P (gnu_formal))
+ 	{
+ 	  gnu_actual = maybe_padded_object (gnu_actual);
+ 	  gnu_actual = maybe_unconstrained_array (gnu_actual);
+ 
+ 	  /* Take the address of the object and convert to the proper pointer
+ 	     type.  We'd like to actually compute the address of the beginning
+ 	     of the array using an ADDR_EXPR of an ARRAY_REF, but there's a
+ 	     possibility that the ARRAY_REF might return a constant and we'd be
+ 	     getting the wrong address.  Neither approach is exactly correct,
+ 	     but this is the most likely to work in all cases.  */
+ 	  gnu_formal_type = TREE_TYPE (gnu_formal);
+ 	  gnu_actual = build_unary_op (ADDR_EXPR, gnu_formal_type, gnu_actual);
+ 	}
+ 
+       /* Then see if the parameter is passed by copy.  */
+       else if (is_true_formal_parm)
+ 	{
+ 	  if (!in_param)
+ 	    gnu_name_list = tree_cons (NULL_TREE, gnu_name, gnu_name_list);
+ 
+ 	  gnu_actual = convert (gnu_formal_type, gnu_actual);
+ 
+ 	  /* If this is a front-end built-in function, there is no need to
+ 	     convert to the type used to pass the argument.  */
+ 	  if (!frontend_builtin)
+ 	    gnu_actual = convert (DECL_ARG_TYPE (gnu_formal), gnu_actual);
+ 	}
+ 
+       /* Then see if this is an unnamed parameter in a variadic C function.  */
+       else if (variadic)
+ 	{
+ 	  /* This is based on the processing done in gnat_to_gnu_param, but
+ 	     we expect the mechanism to be set in (almost) all cases.  */
+ 	  const Mechanism_Type mech = Mechanism (gnat_formal);
+ 
+ 	  /* Strip off possible padding type.  */
+ 	  if (TYPE_IS_PADDING_P (gnu_formal_type))
+ 	    gnu_formal_type = TREE_TYPE (TYPE_FIELDS (gnu_formal_type));
+ 
+ 	  /* Arrays are passed as pointers to element type.  First check for
+ 	     unconstrained array and get the underlying array.  */
+ 	  if (TREE_CODE (gnu_formal_type) == UNCONSTRAINED_ARRAY_TYPE)
+ 	    gnu_formal_type
+ 	      = TREE_TYPE
+ 		(TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_formal_type))));
+ 
+ 	  /* Arrays are passed as pointers to element type.  */
+ 	  if (mech != By_Copy && TREE_CODE (gnu_formal_type) == ARRAY_TYPE)
+ 	    {
+ 	      gnu_actual = maybe_padded_object (gnu_actual);
+ 	      gnu_actual = maybe_unconstrained_array (gnu_actual);
+ 
+ 	      /* Strip off any multi-dimensional entries, then strip
+ 		 off the last array to get the component type.  */
+ 	      while (TREE_CODE (TREE_TYPE (gnu_formal_type)) == ARRAY_TYPE
+ 		     && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_formal_type)))
+ 		gnu_formal_type = TREE_TYPE (gnu_formal_type);
+ 
+ 	      gnu_formal_type = TREE_TYPE (gnu_formal_type);
+ 	      gnu_formal_type = build_pointer_type (gnu_formal_type);
+ 	      gnu_actual
+ 		= build_unary_op (ADDR_EXPR, gnu_formal_type, gnu_actual);
+ 	    }
+ 
+ 	  /* Fat pointers are passed as thin pointers.  */
+ 	  else if (TYPE_IS_FAT_POINTER_P (gnu_formal_type))
+ 	    gnu_formal_type
+ 	      = make_type_from_size (gnu_formal_type,
+ 				     size_int (POINTER_SIZE), 0);
+ 
+ 	  /* If we were requested or muss pass by reference, do so.
+ 	     If we were requested to pass by copy, do so.
+ 	     Otherwise, pass In Out or Out parameters or aggregates by
+ 	     reference.  */
+ 	  else if (mech == By_Reference
+ 		   || must_pass_by_ref (gnu_formal_type)
+ 		   || (mech != By_Copy
+ 		       && (!in_param || AGGREGATE_TYPE_P (gnu_formal_type))))
+ 	    {
+ 	      gnu_formal_type = build_reference_type (gnu_formal_type);
+ 	      gnu_actual
+ 		= build_unary_op (ADDR_EXPR, gnu_formal_type, gnu_actual);
+ 	    }
+ 
+ 	  /* Otherwise pass by copy after applying default C promotions.  */
+ 	  else
+ 	    {
+ 	      if (INTEGRAL_TYPE_P (gnu_formal_type)
+ 		  && TYPE_PRECISION (gnu_formal_type)
+ 		     < TYPE_PRECISION (integer_type_node))
+ 		gnu_formal_type = integer_type_node;
+ 
+ 	      else if (SCALAR_FLOAT_TYPE_P (gnu_formal_type)
+ 		       && TYPE_PRECISION (gnu_formal_type)
+ 			  < TYPE_PRECISION (double_type_node))
+ 		gnu_formal_type = double_type_node;
+ 	    }
+ 
+ 	  gnu_actual = convert (gnu_formal_type, gnu_actual);
+ 	}
+ 
+       /* If we didn't create a PARM_DECL for the formal, this means that
+ 	 it is an Out parameter not passed by reference and that need not
+ 	 be copied in.  In this case, the value of the actual need not be
+ 	 read.  However, we still need to make sure that its side-effects
+ 	 are evaluated before the call, so we evaluate its address.  */
+       else
+ 	{
+ 	  if (!in_param)
+ 	    gnu_name_list = tree_cons (NULL_TREE, gnu_name, gnu_name_list);
+ 
+ 	  if (TREE_SIDE_EFFECTS (gnu_name))
+ 	    {
+ 	      tree addr = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_name);
+ 	      append_to_statement_list (addr, &gnu_stmt_list);
+ 	    }
+ 
+ 	  continue;
+ 	}
+ 
+       gnu_actual_vec.safe_push (gnu_actual);
+     }
+ 
+   if (frontend_builtin)
+     {
+       tree pred_cst = build_int_cst (integer_type_node, PRED_BUILTIN_EXPECT);
+       enum internal_fn icode = IFN_BUILTIN_EXPECT;
+ 
+       switch (DECL_FE_FUNCTION_CODE (gnu_subprog))
+ 	{
+ 	case BUILT_IN_EXPECT:
+ 	  break;
+ 	case BUILT_IN_LIKELY:
+ 	  gnu_actual_vec.safe_push (boolean_true_node);
+ 	  break;
+ 	case BUILT_IN_UNLIKELY:
+ 	  gnu_actual_vec.safe_push (boolean_false_node);
+ 	  break;
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+ 
+       gnu_actual_vec.safe_push (pred_cst);
+ 
+       gnu_call
+ 	= build_call_expr_internal_loc_array (UNKNOWN_LOCATION,
+ 					      icode,
+ 					      gnu_result_type,
+ 					      gnu_actual_vec.length (),
+ 					      gnu_actual_vec.begin ());
+     }
+   else
+     {
+       gnu_call
+         = build_call_array_loc (UNKNOWN_LOCATION,
+ 				gnu_result_type,
+ 				build_unary_op (ADDR_EXPR, NULL_TREE,
+ 						gnu_subprog),
+ 				gnu_actual_vec.length (),
+ 			        gnu_actual_vec.begin ());
+       CALL_EXPR_BY_DESCRIPTOR (gnu_call) = by_descriptor;
+     }
+ 
+   set_expr_location_from_node (gnu_call, gnat_node);
+ 
+   /* If we have created a temporary for the return value, initialize it.  */
+   if (gnu_retval)
+     {
+       tree gnu_stmt
+ 	= build_binary_op (INIT_EXPR, NULL_TREE, gnu_retval, gnu_call);
+       set_expr_location_from_node (gnu_stmt, gnat_node);
+       append_to_statement_list (gnu_stmt, &gnu_stmt_list);
+       gnu_call = gnu_retval;
+     }
+ 
+   /* If this is a subprogram with copy-in/copy-out parameters, we need to
+      unpack the valued returned from the function into the In Out or Out
+      parameters.  We deal with the function return (if this is an Ada
+      function) below.  */
+   if (TYPE_CI_CO_LIST (gnu_subprog_type))
+     {
+       /* List of FIELD_DECLs associated with the PARM_DECLs of the copy-in/
+ 	 copy-out parameters.  */
+       tree gnu_cico_list = TYPE_CI_CO_LIST (gnu_subprog_type);
+       const int length = list_length (gnu_cico_list);
+ 
+       /* The call sequence must contain one and only one call, even though the
+ 	 function is pure.  Save the result into a temporary if needed.  */
+       if (length > 1)
+ 	{
+ 	  if (!gnu_retval)
+ 	    {
+ 	      tree gnu_stmt;
+ 	      gnu_call
+ 		= create_init_temporary ("P", gnu_call, &gnu_stmt, gnat_node);
+ 	      append_to_statement_list (gnu_stmt, &gnu_stmt_list);
+ 	    }
+ 
+ 	  gnu_name_list = nreverse (gnu_name_list);
+ 	}
+ 
+       /* The first entry is for the actual return value if this is a
+ 	 function, so skip it.  */
+       if (function_call)
+ 	gnu_cico_list = TREE_CHAIN (gnu_cico_list);
+ 
+       if (Nkind (gnat_subprog) == N_Explicit_Dereference)
+ 	gnat_formal = First_Formal_With_Extras (Etype (gnat_subprog));
+       else
+ 	gnat_formal = First_Formal_With_Extras (Entity (gnat_subprog));
+ 
+       for (gnat_actual = First_Actual (gnat_node);
+ 	   Present (gnat_actual);
+ 	   gnat_formal = Next_Formal_With_Extras (gnat_formal),
+ 	   gnat_actual = Next_Actual (gnat_actual))
+ 	/* If we are dealing with a copy-in/copy-out parameter, we must
+ 	   retrieve its value from the record returned in the call.  */
+ 	if (!(present_gnu_tree (gnat_formal)
+ 	      && TREE_CODE (get_gnu_tree (gnat_formal)) == PARM_DECL
+ 	      && (DECL_BY_REF_P (get_gnu_tree (gnat_formal))
+ 		  || DECL_BY_COMPONENT_PTR_P (get_gnu_tree (gnat_formal))))
+ 	    && Ekind (gnat_formal) != E_In_Parameter)
+ 	  {
+ 	    /* Get the value to assign to this In Out or Out parameter.  It is
+ 	       either the result of the function if there is only a single such
+ 	       parameter or the appropriate field from the record returned.  */
+ 	    tree gnu_result
+ 	      = length == 1
+ 		? gnu_call
+ 		: build_component_ref (gnu_call, TREE_PURPOSE (gnu_cico_list),
+ 				       false);
+ 
+ 	    /* If the actual is a conversion, get the inner expression, which
+ 	       will be the real destination, and convert the result to the
+ 	       type of the actual parameter.  */
+ 	    tree gnu_actual
+ 	      = maybe_unconstrained_array (TREE_VALUE (gnu_name_list));
+ 
+ 	    /* If the result is padded, remove the padding.  */
+ 	    gnu_result = maybe_padded_object (gnu_result);
+ 
+ 	    /* If the actual is a type conversion, the real target object is
+ 	       denoted by the inner Expression and we need to convert the
+ 	       result to the associated type.
+ 	       We also need to convert our gnu assignment target to this type
+ 	       if the corresponding GNU_NAME was constructed from the GNAT
+ 	       conversion node and not from the inner Expression.  */
+ 	    if (Nkind (gnat_actual) == N_Type_Conversion)
+ 	      {
+ 		const Node_Id gnat_expr = Expression (gnat_actual);
+ 
+ 		gigi_checking_assert (!Do_Range_Check (gnat_expr));
+ 
+ 		gnu_result
+ 		  = convert_with_check (Etype (gnat_expr), gnu_result,
+ 					Do_Overflow_Check (gnat_actual),
+ 					Float_Truncate (gnat_actual),
+ 					gnat_actual);
+ 
+ 		if (!Is_Composite_Type (Underlying_Type (Etype (gnat_formal))))
+ 		  gnu_actual = convert (TREE_TYPE (gnu_result), gnu_actual);
+ 	      }
+ 
+ 	    /* Unchecked conversions as actuals for Out parameters are not
+ 	       allowed in user code because they are not variables, but do
+ 	       occur in front-end expansions.  The associated GNU_NAME is
+ 	       always obtained from the inner expression in such cases.  */
+ 	    else if (Nkind (gnat_actual) == N_Unchecked_Type_Conversion)
+ 	      gnu_result = unchecked_convert (TREE_TYPE (gnu_actual),
+ 					      gnu_result,
+ 					      No_Truncation (gnat_actual));
+ 	    else
+ 	      {
+ 		gigi_checking_assert (!Do_Range_Check (gnat_actual));
+ 
+ 		if (!(!TREE_CONSTANT (TYPE_SIZE (TREE_TYPE (gnu_actual)))
+ 		      && TREE_CONSTANT (TYPE_SIZE (TREE_TYPE (gnu_result)))))
+ 		  gnu_result = convert (TREE_TYPE (gnu_actual), gnu_result);
+ 	      }
+ 
+ 	    get_atomic_access (gnat_actual, &aa_type, &aa_sync);
+ 
+ 	    /* If an outer atomic access is required for an actual parameter,
+ 	       build the load-modify-store sequence.  */
+ 	    if (aa_type == OUTER_ATOMIC)
+ 	      gnu_result
+ 		= build_load_modify_store (gnu_actual, gnu_result, gnat_node);
+ 
+ 	    /* Or else, if a simple atomic access is required, build the atomic
+ 	       store.  */
+ 	    else if (aa_type == SIMPLE_ATOMIC)
+ 	      gnu_result
+ 		= build_atomic_store (gnu_actual, gnu_result, aa_sync);
+ 
+ 	    /* Otherwise build a regular assignment.  */
+ 	    else
+ 	      gnu_result = build_binary_op (MODIFY_EXPR, NULL_TREE,
+ 					    gnu_actual, gnu_result);
+ 
+ 	    if (EXPR_P (gnu_result))
+ 	      set_expr_location_from_node (gnu_result, gnat_node);
+ 	    append_to_statement_list (gnu_result, &gnu_stmt_list);
+ 	    gnu_cico_list = TREE_CHAIN (gnu_cico_list);
+ 	    gnu_name_list = TREE_CHAIN (gnu_name_list);
+ 	  }
+     }
+ 
+   /* If this is a function call, the result is the call expression unless a
+      target is specified, in which case we copy the result into the target
+      and return the assignment statement.  */
+   if (function_call)
+     {
+       /* If this is a function with copy-in/copy-out parameters, extract the
+ 	 return value from it and update the return type.  */
+       if (TYPE_CI_CO_LIST (gnu_subprog_type))
+ 	{
+ 	  tree gnu_elmt = TYPE_CI_CO_LIST (gnu_subprog_type);
+ 	  gnu_call
+ 	    = build_component_ref (gnu_call, TREE_PURPOSE (gnu_elmt), false);
+ 	  gnu_result_type = TREE_TYPE (gnu_call);
+ 	}
+ 
+       /* If the function returns an unconstrained array or by direct reference,
+ 	 we have to dereference the pointer.  */
+       if (TYPE_RETURN_UNCONSTRAINED_P (gnu_subprog_type)
+ 	  || TYPE_RETURN_BY_DIRECT_REF_P (gnu_subprog_type))
+ 	gnu_call = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_call);
+ 
+       if (gnu_target)
+ 	{
+ 	  Node_Id gnat_parent = Parent (gnat_node);
+ 	  enum tree_code op_code;
+ 
+ 	  gigi_checking_assert (!Do_Range_Check (gnat_node));
+ 
+ 	  /* ??? If the return type has variable size, then force the return
+ 	     slot optimization as we would not be able to create a temporary.
+ 	     That's what has been done historically.  */
+ 	  if (return_type_with_variable_size_p (gnu_result_type))
+ 	    op_code = INIT_EXPR;
+ 
+ 	  /* If this is a call to a pure function returning an array of scalar
+ 	     type, try to apply the return slot optimization.  */
+ 	  else if ((TYPE_READONLY (gnu_subprog_type)
+ 		    || TYPE_RESTRICT (gnu_subprog_type))
+ 		   && is_array_of_scalar_type (gnu_result_type)
+ 		   && TYPE_MODE (gnu_result_type) == BLKmode
+ 		   && aggregate_value_p (gnu_result_type, gnu_subprog_type)
+ 		   && return_slot_opt_for_pure_call_p (gnu_target, gnu_call))
+ 	    op_code = INIT_EXPR;
+ 
+ 	  else
+ 	    op_code = MODIFY_EXPR;
+ 
+ 	  /* Use the required method to move the result to the target.  */
+ 	  if (atomic_access == OUTER_ATOMIC)
+ 	    gnu_call
+ 	      = build_load_modify_store (gnu_target, gnu_call, gnat_node);
+ 	  else if (atomic_access == SIMPLE_ATOMIC)
+ 	    gnu_call = build_atomic_store (gnu_target, gnu_call, atomic_sync);
+ 	  else
+ 	    gnu_call
+ 	      = build_binary_op (op_code, NULL_TREE, gnu_target, gnu_call);
+ 
+ 	  if (EXPR_P (gnu_call))
+ 	    set_expr_location_from_node (gnu_call, gnat_parent);
+ 	  append_to_statement_list (gnu_call, &gnu_stmt_list);
+ 	}
+       else
+ 	*gnu_result_type_p = get_unpadded_type (Etype (gnat_node));
+     }
+ 
+   /* Otherwise, if this is a procedure call statement without copy-in/copy-out
+      parameters, the result is just the call statement.  */
+   else if (!TYPE_CI_CO_LIST (gnu_subprog_type))
+     append_to_statement_list (gnu_call, &gnu_stmt_list);
+ 
+   /* Finally, add the copy back statements, if any.  */
+   append_to_statement_list (gnu_after_list, &gnu_stmt_list);
+ 
+   if (went_into_elab_proc)
+     current_function_decl = NULL_TREE;
+ 
+   /* If we have pushed a binding level, pop it and finish up the enclosing
+      statement group.  */
+   if (pushed_binding_level)
+     {
+       add_stmt (gnu_stmt_list);
+       gnat_poplevel ();
+       gnu_result = end_stmt_group ();
+     }
+ 
+   /* Otherwise, retrieve the statement list, if any.  */
+   else if (gnu_stmt_list)
+     gnu_result = gnu_stmt_list;
+ 
+   /* Otherwise, just return the call expression.  */
+   else
+     return gnu_call;
+ 
+   /* If we nevertheless need a value, make a COMPOUND_EXPR to return it.
+      But first simplify if we have only one statement in the list.  */
+   if (returning_value)
+     {
+       tree first = expr_first (gnu_result), last = expr_last (gnu_result);
+       if (first == last)
+ 	gnu_result = first;
+       gnu_result
+ 	= build_compound_expr (TREE_TYPE (gnu_call), gnu_result, gnu_call);
+     }
+ 
+   return gnu_result;
+ }
+ 
+ /* Subroutine of gnat_to_gnu to translate gnat_node, an
+    N_Handled_Sequence_Of_Statements, to a GCC tree, which is returned.  */
+ 
+ static tree
+ Handled_Sequence_Of_Statements_to_gnu (Node_Id gnat_node)
+ {
+   /* If just annotating, ignore all EH and cleanups.  */
+   const bool gcc_eh
+     = (!type_annotate_only
+        && Present (Exception_Handlers (gnat_node))
+        && Back_End_Exceptions ());
+   const bool fe_sjlj_eh
+     = (!type_annotate_only
+        && Present (Exception_Handlers (gnat_node))
+        && Exception_Mechanism == Front_End_SJLJ);
+   const bool at_end = !type_annotate_only && Present (At_End_Proc (gnat_node));
+   const bool binding_for_block = (at_end || gcc_eh || fe_sjlj_eh);
+   tree gnu_jmpsave_decl = NULL_TREE;
+   tree gnu_jmpbuf_decl = NULL_TREE;
+   tree gnu_inner_block; /* The statement(s) for the block itself.  */
+   tree gnu_result;
+   tree gnu_expr;
+   Node_Id gnat_temp;
+ 
+   /* The GCC exception handling mechanism can handle both ZCX and SJLJ schemes
+      and the front-end has its own SJLJ mechanism.  To call the GCC mechanism,
+      we call add_cleanup, and when we leave the binding, end_stmt_group will
+      create the TRY_FINALLY_EXPR construct.
+ 
+      ??? The region level calls down there have been specifically put in place
+      for a ZCX context and currently the order in which things are emitted
+      (region/handlers) is different from the SJLJ case.  Instead of putting
+      other calls with different conditions at other places for the SJLJ case,
+      it seems cleaner to reorder things for the SJLJ case and generalize the
+      condition to make it not ZCX specific.
+ 
+      If there are any exceptions or cleanup processing involved, we need an
+      outer statement group (for front-end SJLJ) and binding level.  */
+   if (binding_for_block)
+     {
+       start_stmt_group ();
+       gnat_pushlevel ();
+     }
+ 
+   /* If using fe_sjlj_eh, make the variables for the setjmp buffer and save
+      area for address of previous buffer.  Do this first since we need to have
+      the setjmp buf known for any decls in this block.  */
+   if (fe_sjlj_eh)
+     {
+       gnu_jmpsave_decl
+ 	= create_var_decl (get_identifier ("JMPBUF_SAVE"), NULL_TREE,
+ 			   jmpbuf_ptr_type,
+ 			   build_call_n_expr (get_jmpbuf_decl, 0),
+ 			   false, false, false, false, false, true, false,
+ 			   NULL, gnat_node);
+ 
+       /* The __builtin_setjmp receivers will immediately reinstall it.  Now
+ 	 because of the unstructured form of EH used by fe_sjlj_eh, there
+ 	 might be forward edges going to __builtin_setjmp receivers on which
+ 	 it is uninitialized, although they will never be actually taken.  */
+       suppress_warning (gnu_jmpsave_decl, OPT_Wuninitialized);
+       gnu_jmpbuf_decl
+ 	= create_var_decl (get_identifier ("JMP_BUF"), NULL_TREE,
+ 			   jmpbuf_type,
+ 			   NULL_TREE,
+ 			   false, false, false, false, false, true, false,
+ 			   NULL, gnat_node);
+ 
+       set_block_jmpbuf_decl (gnu_jmpbuf_decl);
+ 
+       /* When we exit this block, restore the saved value.  */
+       add_cleanup (build_call_n_expr (set_jmpbuf_decl, 1, gnu_jmpsave_decl),
+ 		   Present (End_Label (gnat_node))
+ 		   ? End_Label (gnat_node) : gnat_node);
+     }
+ 
+   /* If we are to call a function when exiting this block, add a cleanup
+      to the binding level we made above.  Note that add_cleanup is FIFO
+      so we must register this cleanup after the EH cleanup just above.  */
+   if (at_end)
+     {
+       tree proc_decl = gnat_to_gnu (At_End_Proc (gnat_node));
+ 
+       /* When not optimizing, disable inlining of finalizers as this can
+ 	 create a more complex CFG in the parent function.  */
+       if (!optimize || optimize_debug)
+ 	DECL_DECLARED_INLINE_P (proc_decl) = 0;
+ 
+       /* If there is no end label attached, we use the location of the At_End
+ 	 procedure because Expand_Cleanup_Actions might reset the location of
+ 	 the enclosing construct to that of an inner statement.  */
+       add_cleanup (build_call_n_expr (proc_decl, 0),
+ 		   Present (End_Label (gnat_node))
+ 		   ? End_Label (gnat_node) : At_End_Proc (gnat_node));
+     }
+ 
+   /* Now build the tree for the declarations and statements inside this block.
+      If this is SJLJ, set our jmp_buf as the current buffer.  */
+   start_stmt_group ();
+ 
+   if (fe_sjlj_eh)
+     {
+       gnu_expr = build_call_n_expr (set_jmpbuf_decl, 1,
+ 				    build_unary_op (ADDR_EXPR, NULL_TREE,
+ 						    gnu_jmpbuf_decl));
+       set_expr_location_from_node (gnu_expr, gnat_node);
+       add_stmt (gnu_expr);
+     }
+ 
+   if (Present (First_Real_Statement (gnat_node)))
+     process_decls (Statements (gnat_node), Empty,
+ 		   First_Real_Statement (gnat_node), true, true);
+ 
+   /* Generate code for each statement in the block.  */
+   for (gnat_temp = (Present (First_Real_Statement (gnat_node))
+ 		    ? First_Real_Statement (gnat_node)
+ 		    : First (Statements (gnat_node)));
+        Present (gnat_temp); gnat_temp = Next (gnat_temp))
+     add_stmt (gnat_to_gnu (gnat_temp));
+ 
+   gnu_inner_block = end_stmt_group ();
+ 
+   /* Now generate code for the two exception models, if either is relevant for
+      this block.  */
+   if (fe_sjlj_eh)
+     {
+       tree *gnu_else_ptr = 0;
+       tree gnu_handler;
+ 
+       /* Make a binding level for the exception handling declarations and code
+ 	 and set up gnu_except_ptr_stack for the handlers to use.  */
+       start_stmt_group ();
+       gnat_pushlevel ();
+ 
+       vec_safe_push (gnu_except_ptr_stack,
+ 		     create_var_decl (get_identifier ("EXCEPT_PTR"), NULL_TREE,
+ 				      build_pointer_type (except_type_node),
+ 				      build_call_n_expr (get_excptr_decl, 0),
+ 				      false, false, false, false, false,
+ 				      true, false, NULL, gnat_node));
+ 
+       /* Generate code for each handler. The N_Exception_Handler case does the
+ 	 real work and returns a COND_EXPR for each handler, which we chain
+ 	 together here.  */
+       for (gnat_temp = First_Non_Pragma (Exception_Handlers (gnat_node));
+ 	   Present (gnat_temp); gnat_temp = Next_Non_Pragma (gnat_temp))
+ 	{
+ 	  gnu_expr = gnat_to_gnu (gnat_temp);
+ 
+ 	  /* If this is the first one, set it as the outer one. Otherwise,
+ 	     point the "else" part of the previous handler to us. Then point
+ 	     to our "else" part.  */
+ 	  if (!gnu_else_ptr)
+ 	    add_stmt (gnu_expr);
+ 	  else
+ 	    *gnu_else_ptr = gnu_expr;
+ 
+ 	  gnu_else_ptr = &COND_EXPR_ELSE (gnu_expr);
+ 	}
+ 
+       /* If none of the exception handlers did anything, re-raise but do not
+ 	 defer abortion.  */
+       gnu_expr = build_call_n_expr (raise_nodefer_decl, 1,
+ 				    gnu_except_ptr_stack->last ());
+       set_expr_location_from_node
+ 	(gnu_expr,
+ 	 Present (End_Label (gnat_node)) ? End_Label (gnat_node) : gnat_node);
+ 
+       if (gnu_else_ptr)
+ 	*gnu_else_ptr = gnu_expr;
+       else
+ 	add_stmt (gnu_expr);
+ 
+       /* End the binding level dedicated to the exception handlers and get the
+ 	 whole statement group.  */
+       gnu_except_ptr_stack->pop ();
+       gnat_poplevel ();
+       gnu_handler = end_stmt_group ();
+ 
+       /* If the setjmp returns 1, we restore our incoming longjmp value and
+ 	 then check the handlers.  */
+       start_stmt_group ();
+       add_stmt_with_node (build_call_n_expr (set_jmpbuf_decl, 1,
+ 					     gnu_jmpsave_decl),
+ 			  gnat_node);
+       add_stmt (gnu_handler);
+       gnu_handler = end_stmt_group ();
+ 
+       /* This block is now "if (setjmp) ... <handlers> else <block>".  */
+       gnu_result = build3 (COND_EXPR, void_type_node,
+ 			   (build_call_n_expr
+ 			    (setjmp_decl, 1,
+ 			     build_unary_op (ADDR_EXPR, NULL_TREE,
+ 					     gnu_jmpbuf_decl))),
+ 			   gnu_handler, gnu_inner_block);
+     }
+   else if (gcc_eh)
+     {
+       tree gnu_handlers;
+       location_t locus;
+ 
+       /* First make a block containing the handlers.  */
+       start_stmt_group ();
+       for (gnat_temp = First_Non_Pragma (Exception_Handlers (gnat_node));
+ 	   Present (gnat_temp);
+ 	   gnat_temp = Next_Non_Pragma (gnat_temp))
+ 	add_stmt (gnat_to_gnu (gnat_temp));
+       gnu_handlers = end_stmt_group ();
+ 
+       /* Now make the TRY_CATCH_EXPR for the block.  */
+       gnu_result = build2 (TRY_CATCH_EXPR, void_type_node,
+ 			   gnu_inner_block, gnu_handlers);
+       /* Set a location.  We need to find a unique location for the dispatching
+ 	 code, otherwise we can get coverage or debugging issues.  Try with
+ 	 the location of the end label.  */
+       if (Present (End_Label (gnat_node))
+ 	  && Sloc_to_locus (Sloc (End_Label (gnat_node)), &locus))
+ 	SET_EXPR_LOCATION (gnu_result, locus);
+       else
+         /* Clear column information so that the exception handler of an
+            implicit transient block does not incorrectly inherit the slocs
+            of a decision, which would otherwise confuse control flow based
+            coverage analysis tools.  */
+ 	set_expr_location_from_node (gnu_result, gnat_node, true);
+     }
+   else
+     gnu_result = gnu_inner_block;
+ 
+   /* Now close our outer block, if we had to make one.  */
+   if (binding_for_block)
+     {
+       add_stmt (gnu_result);
+       gnat_poplevel ();
+       gnu_result = end_stmt_group ();
+     }
+ 
+   return gnu_result;
+ }
+ 
+ /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Exception_Handler,
+    to a GCC tree, which is returned.  This is the variant for front-end sjlj
+    exception handling.  */
+ 
+ static tree
+ Exception_Handler_to_gnu_fe_sjlj (Node_Id gnat_node)
+ {
+   /* Unless this is "Others" or the special "Non-Ada" exception for Ada, make
+      an "if" statement to select the proper exceptions.  For "Others", exclude
+      exceptions where Handled_By_Others is nonzero unless the All_Others flag
+      is set. For "Non-ada", accept an exception if "Lang" is 'V'.  */
+   tree gnu_choice = boolean_false_node;
+   tree gnu_body = build_stmt_group (Statements (gnat_node), false);
+   Node_Id gnat_temp;
+ 
+   for (gnat_temp = First (Exception_Choices (gnat_node));
+        gnat_temp; gnat_temp = Next (gnat_temp))
+     {
+       tree this_choice;
+ 
+       if (Nkind (gnat_temp) == N_Others_Choice)
+ 	{
+ 	  if (All_Others (gnat_temp))
+ 	    this_choice = boolean_true_node;
+ 	  else
+ 	    this_choice
+ 	      = build_binary_op
+ 		(EQ_EXPR, boolean_type_node,
+ 		 convert
+ 		 (integer_type_node,
+ 		  build_component_ref
+ 		  (build_unary_op
+ 		   (INDIRECT_REF, NULL_TREE,
+ 		    gnu_except_ptr_stack->last ()),
+ 		   not_handled_by_others_decl,
+ 		   false)),
+ 		 integer_zero_node);
+ 	}
+ 
+       else if (Nkind (gnat_temp) == N_Identifier
+ 	       || Nkind (gnat_temp) == N_Expanded_Name)
+ 	{
+ 	  Entity_Id gnat_ex_id = Entity (gnat_temp);
+ 	  tree gnu_expr;
+ 
+ 	  /* Exception may be a renaming. Recover original exception which is
+ 	     the one elaborated and registered.  */
+ 	  if (Present (Renamed_Object (gnat_ex_id)))
+ 	    gnat_ex_id = Renamed_Object (gnat_ex_id);
+ 
+ 	  gnu_expr = gnat_to_gnu_entity (gnat_ex_id, NULL_TREE, false);
+ 
+ 	  this_choice
+ 	    = build_binary_op
+ 	      (EQ_EXPR, boolean_type_node,
+ 	       gnu_except_ptr_stack->last (),
+ 	       convert (TREE_TYPE (gnu_except_ptr_stack->last ()),
+ 			build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr)));
+ 	}
+       else
+ 	gcc_unreachable ();
+ 
+       gnu_choice = build_binary_op (TRUTH_ORIF_EXPR, boolean_type_node,
+ 				    gnu_choice, this_choice);
+     }
+ 
+   return build3 (COND_EXPR, void_type_node, gnu_choice, gnu_body, NULL_TREE);
+ }
+ 
+ /* Return true if no statement in GNAT_LIST can alter the control flow.  */
+ 
+ static bool
+ stmt_list_cannot_alter_control_flow_p (List_Id gnat_list)
+ {
+   if (No (gnat_list))
+     return true;
+ 
+   /* This is very conservative, we reject everything except for simple
+      assignments between identifiers or literals.  */
+   for (Node_Id gnat_node = First (gnat_list);
+        Present (gnat_node);
+        gnat_node = Next (gnat_node))
+     {
+       if (Nkind (gnat_node) != N_Assignment_Statement)
+ 	return false;
+ 
+       if (Nkind (Name (gnat_node)) != N_Identifier)
+ 	return false;
+ 
+       Node_Kind nkind = Nkind (Expression (gnat_node));
+       if (nkind != N_Identifier
+ 	  && nkind != N_Integer_Literal
+ 	  && nkind != N_Real_Literal)
+ 	return false;
+     }
+ 
+   return true;
+ }
+ 
+ /* Subroutine of gnat_to_gnu to translate gnat_node, an N_Exception_Handler,
+    to a GCC tree, which is returned.  This is the variant for GCC exception
+    schemes.  */
+ 
+ static tree
+ Exception_Handler_to_gnu_gcc (Node_Id gnat_node)
+ {
+   tree gnu_etypes_list = NULL_TREE;
+ 
+   /* We build a TREE_LIST of nodes representing what exception types this
+      handler can catch, with special cases for others and all others cases.
+ 
+      Each exception type is actually identified by a pointer to the exception
+      id, or to a dummy object for "others" and "all others".  */
+   for (Node_Id gnat_temp = First (Exception_Choices (gnat_node));
+        gnat_temp;
+        gnat_temp = Next (gnat_temp))
+     {
+       tree gnu_expr, gnu_etype;
+ 
+       if (Nkind (gnat_temp) == N_Others_Choice)
+ 	{
+ 	  gnu_expr = All_Others (gnat_temp) ? all_others_decl : others_decl;
+ 	  gnu_etype = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr);
+ 	}
+       else if (Nkind (gnat_temp) == N_Identifier
+ 	       || Nkind (gnat_temp) == N_Expanded_Name)
+ 	{
+ 	  Entity_Id gnat_ex_id = Entity (gnat_temp);
+ 
+ 	  /* Exception may be a renaming.  Recover original exception which is
+ 	     the one elaborated and registered.  */
+ 	  if (Present (Renamed_Object (gnat_ex_id)))
+ 	    gnat_ex_id = Renamed_Object (gnat_ex_id);
+ 
+ 	  gnu_expr = gnat_to_gnu_entity (gnat_ex_id, NULL_TREE, false);
+ 	  gnu_etype = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr);
+ 	}
+       else
+ 	gcc_unreachable ();
+ 
+       /* The GCC interface expects NULL to be passed for catch all handlers, so
+ 	 it would be quite tempting to set gnu_etypes_list to NULL if gnu_etype
+ 	 is integer_zero_node.  It would not work, however, because GCC's
+ 	 notion of "catch all" is stronger than our notion of "others".  Until
+ 	 we correctly use the cleanup interface as well, doing that would
+ 	 prevent the "all others" handlers from being seen, because nothing
+ 	 can be caught beyond a catch all from GCC's point of view.  */
+       gnu_etypes_list = tree_cons (NULL_TREE, gnu_etype, gnu_etypes_list);
+     }
+ 
+   start_stmt_group ();
+   gnat_pushlevel ();
+ 
+   /* Expand a call to the begin_handler hook at the beginning of the
+      handler, and arrange for a call to the end_handler hook to occur
+      on every possible exit path.  GDB sets a breakpoint in the
+      begin_handler for catchpoints.
+ 
+      A v1 begin handler saves the cleanup from the exception object,
+      and marks the exception as in use, so that it will not be
+      released by other handlers.  A v1 end handler restores the
+      cleanup and releases the exception object, unless it is still
+      claimed, or the exception is being propagated (reraised).
+ 
+      __builtin_eh_pointer references the exception occurrence being
+      handled or propagated.  Within the handler region, it is the
+      former, but within the else branch of the EH_ELSE_EXPR, i.e. the
+      exceptional cleanup path, it is the latter, so we must save the
+      occurrence being handled early on, so that, should an exception
+      be (re)raised, we can release the current exception, or figure
+      out we're not to release it because we're propagating a reraise
+      thereof.
+ 
+      We use local variables to retrieve the incoming value at handler
+      entry time (EXPTR), the saved cleanup (EXCLN) and the token
+      (EXVTK), and reuse them to feed the end_handler hook's argument
+      at exit.  */
+ 
+   /* CODE: void *EXPTR = __builtin_eh_pointer (0); */
+   tree gnu_current_exc_ptr
+     = build_call_expr (builtin_decl_explicit (BUILT_IN_EH_POINTER),
+ 		       1, integer_zero_node);
+   tree exc_ptr
+     = create_var_decl (get_identifier ("EXPTR"), NULL_TREE,
+ 		       ptr_type_node, gnu_current_exc_ptr,
+ 		       true, false, false, false, false, true, true,
+ 		       NULL, gnat_node);
+ 
+   tree prev_gnu_incoming_exc_ptr = gnu_incoming_exc_ptr;
+   gnu_incoming_exc_ptr = exc_ptr;
+ 
+   /* begin_handler_decl must not throw, so we can use it as an
+      initializer for a variable used in cleanups.
+ 
+      CODE: void *EXCLN = __gnat_begin_handler_v1 (EXPTR); */
+   tree exc_cleanup
+     = create_var_decl (get_identifier ("EXCLN"), NULL_TREE,
+ 		       ptr_type_node,
+ 		       build_call_n_expr (begin_handler_decl, 1,
+ 					  exc_ptr),
+ 		       true, false, false, false, false,
+ 		       true, true, NULL, gnat_node);
+ 
+   /* Declare and initialize the choice parameter, if present.  */
+   if (Present (Choice_Parameter (gnat_node)))
+     {
+       tree gnu_param
+ 	= gnat_to_gnu_entity (Choice_Parameter (gnat_node), NULL_TREE, true);
+ 
+       /* CODE: __gnat_set_exception_parameter (&choice_param, EXPTR); */
+       add_stmt (build_call_n_expr
+ 		(set_exception_parameter_decl, 2,
+ 		 build_unary_op (ADDR_EXPR, NULL_TREE, gnu_param),
+ 		 gnu_incoming_exc_ptr));
+     }
+ 
+   /* CODE: <handler proper> */
+   add_stmt_list (Statements (gnat_node));
+ 
+   tree call = build_call_n_expr (end_handler_decl, 3,
+ 				 exc_ptr,
+ 				 exc_cleanup,
+ 				 null_pointer_node);
+   /* If the handler can only end by falling off the end, don't bother
+      with cleanups.  */
+   if (stmt_list_cannot_alter_control_flow_p (Statements (gnat_node)))
+     /* CODE: __gnat_end_handler_v1 (EXPTR, EXCLN, NULL);  */
+     add_stmt_with_node (call, gnat_node);
+   /* Otherwise, all of the above is after
+      CODE: try {
+ 
+      The call above will appear after
+      CODE: } finally {
+ 
+      And the code below will appear after
+      CODE: } else {
+ 
+      The else block to a finally block is taken instead of the finally
+      block when an exception propagates out of the try block.  */
+   else
+     {
+       start_stmt_group ();
+       gnat_pushlevel ();
+       /* CODE: void *EXPRP = __builtin_eh_handler (0); */
+       tree prop_ptr
+ 	= create_var_decl (get_identifier ("EXPRP"), NULL_TREE,
+ 			   ptr_type_node,
+ 			   build_call_expr (builtin_decl_explicit
+ 					    (BUILT_IN_EH_POINTER),
+ 					    1, integer_zero_node),
+ 			   true, false, false, false, false,
+ 			   true, true, NULL, gnat_node);
+ 
+       /* CODE: __gnat_end_handler_v1 (EXPTR, EXCLN, EXPRP);  */
+       tree ecall = build_call_n_expr (end_handler_decl, 3,
+ 				      exc_ptr,
+ 				      exc_cleanup,
+ 				      prop_ptr);
+ 
+       add_stmt_with_node (ecall, gnat_node);
+ 
+       /* CODE: } */
+       gnat_poplevel ();
+       tree eblk = end_stmt_group ();
+       tree ehls = build2 (EH_ELSE_EXPR, void_type_node, call, eblk);
+       add_cleanup (ehls, gnat_node);
+     }
+ 
+   gnat_poplevel ();
+ 
+   gnu_incoming_exc_ptr = prev_gnu_incoming_exc_ptr;
+ 
+   return
+     build2 (CATCH_EXPR, void_type_node, gnu_etypes_list, end_stmt_group ());
+ }
+ 
+ /* Subroutine of gnat_to_gnu to generate code for an N_Compilation unit.  */
+ 
+ static void
+ Compilation_Unit_to_gnu (Node_Id gnat_node)
+ {
+   const Node_Id gnat_unit = Unit (gnat_node);
+   const bool body_p = (Nkind (gnat_unit) == N_Package_Body
+ 		       || Nkind (gnat_unit) == N_Subprogram_Body);
+   const Entity_Id gnat_unit_entity = Defining_Entity (gnat_unit);
+   Entity_Id gnat_entity;
+   Node_Id gnat_pragma, gnat_iter;
+   /* Make the decl for the elaboration procedure.  Emit debug info for it, so
+      that users can break into their elaboration code in debuggers.  Kludge:
+      don't consider it as a definition so that we have a line map for its
+      body, but no subprogram description in debug info.  In addition, don't
+      qualify it as artificial, even though it is not a user subprogram per se,
+      in particular for specs.  Unlike, say, clones created internally by the
+      compiler, this subprogram materializes specific user code and flagging it
+      artificial would take elab code away from gcov's analysis.  */
+   tree gnu_elab_proc_decl
+     = create_subprog_decl
+       (create_concat_name (gnat_unit_entity, body_p ? "elabb" : "elabs"),
+        NULL_TREE, void_ftype, NULL_TREE,
+        is_default, true, false, false, true, false, NULL, gnat_unit);
+   struct elab_info *info;
+ 
+   vec_safe_push (gnu_elab_proc_stack, gnu_elab_proc_decl);
+   DECL_ELABORATION_PROC_P (gnu_elab_proc_decl) = 1;
+ 
+   /* Initialize the information structure for the function.  */
+   allocate_struct_function (gnu_elab_proc_decl, false);
+   set_cfun (NULL);
+ 
+   current_function_decl = NULL_TREE;
+ 
+   start_stmt_group ();
+   gnat_pushlevel ();
+ 
+   /* For a body, first process the spec if there is one.  */
+   if (Nkind (gnat_unit) == N_Package_Body
+       || (Nkind (gnat_unit) == N_Subprogram_Body && !Acts_As_Spec (gnat_node)))
+     add_stmt (gnat_to_gnu (Library_Unit (gnat_node)));
+ 
+   if (type_annotate_only && gnat_node == Cunit (Main_Unit))
+     {
+       elaborate_all_entities (gnat_node);
+ 
+       if (Nkind (gnat_unit) == N_Subprogram_Declaration
+ 	  || Nkind (gnat_unit) == N_Generic_Package_Declaration
+ 	  || Nkind (gnat_unit) == N_Generic_Subprogram_Declaration)
+ 	return;
+     }
+ 
+   /* Then process any pragmas and declarations preceding the unit.  */
+   for (gnat_pragma = First (Context_Items (gnat_node));
+        Present (gnat_pragma);
+        gnat_pragma = Next (gnat_pragma))
+     if (Nkind (gnat_pragma) == N_Pragma)
+       add_stmt (gnat_to_gnu (gnat_pragma));
+   process_decls (Declarations (Aux_Decls_Node (gnat_node)), Empty, Empty,
+ 		 true, true);
+ 
+   /* Process the unit itself.  */
+   add_stmt (gnat_to_gnu (gnat_unit));
+ 
+   /* Generate code for all the inlined subprograms.  */
+   for (gnat_entity = First_Inlined_Subprogram (gnat_node);
+        Present (gnat_entity);
+        gnat_entity = Next_Inlined_Subprogram (gnat_entity))
+     {
+       Node_Id gnat_body;
+ 
+       /* Without optimization, process only the required subprograms.  */
+       if (!optimize && !Has_Pragma_Inline_Always (gnat_entity))
+ 	continue;
+ 
+       /* The set of inlined subprograms is computed from data recorded early
+ 	 during expansion and it can be a strict superset of the final set
+ 	 computed after semantic analysis, for example if a call to such a
+ 	 subprogram occurs in a pragma Assert and assertions are disabled.
+ 	 In that case, semantic analysis resets Is_Public to false but the
+ 	 entry for the subprogram in the inlining tables is stalled.  */
+       if (!Is_Public (gnat_entity))
+ 	continue;
+ 
+       gnat_body = Parent (Declaration_Node (gnat_entity));
+       if (Nkind (gnat_body) != N_Subprogram_Body)
+ 	{
+ 	  /* ??? This happens when only the spec of a package is provided.  */
+ 	  if (No (Corresponding_Body (gnat_body)))
+ 	    continue;
+ 
+ 	  gnat_body
+ 	    = Parent (Declaration_Node (Corresponding_Body (gnat_body)));
+ 	}
+ 
+       /* Define the entity first so we set DECL_EXTERNAL.  */
+       gnat_to_gnu_entity (gnat_entity, NULL_TREE, false);
+       add_stmt (gnat_to_gnu (gnat_body));
+     }
+ 
+   /* Process any pragmas and actions following the unit.  */
+   add_stmt_list (Pragmas_After (Aux_Decls_Node (gnat_node)));
+   add_stmt_list (Actions (Aux_Decls_Node (gnat_node)));
+   finalize_from_limited_with ();
+ 
+   /* Then process the expressions of pragma Compile_Time_{Error|Warning} to
+      annotate types referenced therein if they have not been annotated.  */
+   for (int i = 0; gnat_compile_time_expr_list.iterate (i, &gnat_iter); i++)
+     (void) gnat_to_gnu_external (gnat_iter);
+   gnat_compile_time_expr_list.release ();
+ 
+   /* Save away what we've made so far and finish it up.  */
+   set_current_block_context (gnu_elab_proc_decl);
+   gnat_poplevel ();
+   DECL_SAVED_TREE (gnu_elab_proc_decl) = end_stmt_group ();
+   set_end_locus_from_node (gnu_elab_proc_decl, gnat_unit);
+   gnu_elab_proc_stack->pop ();
+ 
+   /* Record this potential elaboration procedure for later processing.  */
+   info = ggc_alloc<elab_info> ();
+   info->next = elab_info_list;
+   info->elab_proc = gnu_elab_proc_decl;
+   info->gnat_node = gnat_node;
+   elab_info_list = info;
+ 
+   /* Force the processing for all nodes that remain in the queue.  */
+   process_deferred_decl_context (true);
+ }
+ 
+ /* Mark COND, a boolean expression, as predicating a call to a noreturn
+    function, i.e. predict that it is very likely false, and return it.
+ 
+    The compiler will automatically predict the last edge leading to a call
+    to a noreturn function as very unlikely taken.  This function makes it
+    possible to extend the prediction to predecessors in case the condition
+    is made up of several short-circuit operators.  */
+ 
+ static tree
+ build_noreturn_cond (tree cond)
+ {
+   tree pred_cst = build_int_cst (integer_type_node, PRED_NORETURN);
+   return
+     build_call_expr_internal_loc (UNKNOWN_LOCATION, IFN_BUILTIN_EXPECT,
+ 				  boolean_type_node, 3, cond,
+ 				  boolean_false_node, pred_cst);
+ }
+ 
+ /* Subroutine of gnat_to_gnu to translate GNAT_RANGE, a node representing a
+    range of values, into GNU_LOW and GNU_HIGH bounds.  */
+ 
+ static void
+ Range_to_gnu (Node_Id gnat_range, tree *gnu_low, tree *gnu_high)
+ {
+   /* GNAT_RANGE is either an N_Range or an identifier denoting a subtype.  */
+   switch (Nkind (gnat_range))
+     {
+     case N_Range:
+       *gnu_low = gnat_to_gnu (Low_Bound (gnat_range));
+       *gnu_high = gnat_to_gnu (High_Bound (gnat_range));
+       break;
+ 
+     case N_Expanded_Name:
+     case N_Identifier:
+       {
+ 	tree gnu_range_type = get_unpadded_type (Entity (gnat_range));
+ 	tree gnu_range_base_type = get_base_type (gnu_range_type);
+ 
+ 	*gnu_low
+ 	  = convert (gnu_range_base_type, TYPE_MIN_VALUE (gnu_range_type));
+ 	*gnu_high
+ 	  = convert (gnu_range_base_type, TYPE_MAX_VALUE (gnu_range_type));
+       }
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ }
+ 
+ /* Subroutine of gnat_to_gnu to translate GNAT_NODE, an N_Raise_xxx_Error,
+    to a GCC tree and return it.  GNU_RESULT_TYPE_P is a pointer to where
+    we should place the result type.  */
+ 
+ static tree
+ Raise_Error_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p)
+ {
+   const Node_Kind kind = Nkind (gnat_node);
+   const Node_Id gnat_cond = Condition (gnat_node);
+   const int reason = UI_To_Int (Reason (gnat_node));
+   const bool with_extra_info
+     = Exception_Extra_Info
+       && !No_Exception_Handlers_Set ()
+       && No (get_exception_label (kind));
+   tree gnu_result = NULL_TREE, gnu_cond = NULL_TREE;
+   Node_Id gnat_rcond;
+ 
+   /* The following processing is not required for correctness.  Its purpose is
+      to give more precise error messages and to record some information.  */
+   switch (reason)
+     {
+     case CE_Access_Check_Failed:
+       if (with_extra_info)
+ 	gnu_result = build_call_raise_column (reason, gnat_node, kind);
+       break;
+ 
+     case CE_Index_Check_Failed:
+     case CE_Range_Check_Failed:
+     case CE_Invalid_Data:
+       if (No (gnat_cond) || Nkind (gnat_cond) != N_Op_Not)
+ 	break;
+       gnat_rcond = Right_Opnd (gnat_cond);
+       if (Nkind (gnat_rcond) == N_In
+ 	  || Nkind (gnat_rcond) == N_Op_Ge
+ 	  || Nkind (gnat_rcond) == N_Op_Le)
+ 	{
+ 	  const Node_Id gnat_index = Left_Opnd (gnat_rcond);
+ 	  const Node_Id gnat_type = Etype (gnat_index);
+ 	  tree gnu_index = gnat_to_gnu (gnat_index);
+ 	  tree gnu_type = get_unpadded_type (gnat_type);
+ 	  tree gnu_low_bound, gnu_high_bound, disp;
+ 	  struct loop_info_d *loop;
+ 	  bool neg_p;
+ 
+ 	  switch (Nkind (gnat_rcond))
+ 	    {
+ 	    case N_In:
+ 	      Range_to_gnu (Right_Opnd (gnat_rcond),
+ 			    &gnu_low_bound, &gnu_high_bound);
+ 	      break;
+ 
+ 	    case N_Op_Ge:
+ 	      gnu_low_bound = gnat_to_gnu (Right_Opnd (gnat_rcond));
+ 	      gnu_high_bound = TYPE_MAX_VALUE (gnu_type);
+ 	      break;
+ 
+ 	    case N_Op_Le:
+ 	      gnu_low_bound = TYPE_MIN_VALUE (gnu_type);
+ 	      gnu_high_bound = gnat_to_gnu (Right_Opnd (gnat_rcond));
+ 	      break;
+ 
+ 	    default:
+ 	      gcc_unreachable ();
+ 	    }
+ 
+ 	  gnu_type = maybe_character_type (gnu_type);
+ 	  if (TREE_TYPE (gnu_index) != gnu_type)
+ 	    {
+ 	      gnu_low_bound = convert (gnu_type, gnu_low_bound);
+ 	      gnu_high_bound = convert (gnu_type, gnu_high_bound);
+ 	      gnu_index = convert (gnu_type, gnu_index);
+ 	    }
+ 
+ 	  if (with_extra_info
+ 	      && Known_Esize (gnat_type)
+ 	      && UI_To_Int (Esize (gnat_type)) <= 32)
+ 	    gnu_result
+ 	      = build_call_raise_range (reason, gnat_node, kind, gnu_index,
+ 					gnu_low_bound, gnu_high_bound);
+ 
+ 	  /* If optimization is enabled and we are inside a loop, we try to
+ 	     compute invariant conditions for checks applied to the iteration
+ 	     variable, i.e. conditions that are independent of the variable
+ 	     and necessary in order for the checks to fail in the course of
+ 	     some iteration.  If we succeed, we consider an alternative:
+ 
+ 	       1. If loop unswitching is enabled, we prepend these conditions
+ 		  to the original conditions of the checks.  This will make it
+ 		  possible for the loop unswitching pass to replace the loop
+ 		  with two loops, one of which has the checks eliminated and
+ 		  the other has the original checks reinstated, and a prologue
+ 		  implementing a run-time selection.  The former loop will be
+ 		  for example suitable for vectorization.
+ 
+ 	       2. Otherwise, we instead append the conditions to the original
+ 		  conditions of the checks.  At worse, if the conditions cannot
+ 		  be evaluated at compile time, they will be evaluated as true
+ 		  at run time only when the checks have already failed, thus
+ 		  contributing negatively only to the size of the executable.
+ 		  But the hope is that these invariant conditions be evaluated
+ 		  at compile time to false, thus taking away the entire checks
+ 		  with them.  */
+ 	  if (optimize
+ 	      && inside_loop_p ()
+ 	      && (!gnu_low_bound
+ 		  || (gnu_low_bound = gnat_invariant_expr (gnu_low_bound)))
+ 	      && (!gnu_high_bound
+ 		  || (gnu_high_bound = gnat_invariant_expr (gnu_high_bound)))
+ 	      && (loop = find_loop_for (gnu_index, &disp, &neg_p)))
+ 	    {
+ 	      struct range_check_info_d *rci = ggc_alloc<range_check_info_d> ();
+ 	      rci->low_bound = gnu_low_bound;
+ 	      rci->high_bound = gnu_high_bound;
+ 	      rci->disp = disp;
+ 	      rci->neg_p = neg_p;
+ 	      rci->type = gnu_type;
+ 	      rci->inserted_cond
+ 		= build1 (SAVE_EXPR, boolean_type_node, boolean_true_node);
+ 	      vec_safe_push (loop->checks, rci);
+ 	      gnu_cond = build_noreturn_cond (gnat_to_gnu (gnat_cond));
+ 	      if (optimize >= 3)
+ 		gnu_cond = build_binary_op (TRUTH_ANDIF_EXPR,
+ 					    boolean_type_node,
+ 					    rci->inserted_cond,
+ 					    gnu_cond);
+ 	      else
+ 		gnu_cond = build_binary_op (TRUTH_ANDIF_EXPR,
+ 					    boolean_type_node,
+ 					    gnu_cond,
+ 					    rci->inserted_cond);
+ 	    }
+ 	}
+       break;
+ 
+     default:
+       break;
+     }
+ 
+   /* The following processing does the real work, but we must nevertheless make
+      sure not to override the result of the previous processing.  */
+   if (!gnu_result)
+     gnu_result = build_call_raise (reason, gnat_node, kind);
+   set_expr_location_from_node (gnu_result, gnat_node);
+ 
+   *gnu_result_type_p = get_unpadded_type (Etype (gnat_node));
+ 
+   /* If the type is VOID, this is a statement, so we need to generate the code
+      for the call.  Handle a condition, if there is one.  */
+   if (VOID_TYPE_P (*gnu_result_type_p))
+     {
+       if (Present (gnat_cond))
+ 	{
+ 	  if (!gnu_cond)
+ 	    gnu_cond = gnat_to_gnu (gnat_cond);
+ 	  if (integer_zerop (gnu_cond))
+ 	    return alloc_stmt_list ();
+ 	  gnu_result = build3 (COND_EXPR, void_type_node, gnu_cond, gnu_result,
+ 			       alloc_stmt_list ());
+ 	}
+     }
+   else
+     {
+       /* The condition field must not be present when the node is used as an
+ 	 expression form.  */
+       gigi_checking_assert (No (gnat_cond));
+       gnu_result = build1 (NULL_EXPR, *gnu_result_type_p, gnu_result);
+     }
+ 
+   return gnu_result;
+ }
+ 
+ /* Return true if GNAT_NODE is on the LHS of an assignment or an actual
+    parameter of a call.  */
+ 
+ static bool
+ lhs_or_actual_p (Node_Id gnat_node)
+ {
+   const Node_Id gnat_parent = Parent (gnat_node);
+   const Node_Kind kind = Nkind (gnat_parent);
+ 
+   if (kind == N_Assignment_Statement && Name (gnat_parent) == gnat_node)
+     return true;
+ 
+   if ((kind == N_Procedure_Call_Statement || kind == N_Function_Call)
+       && Name (gnat_parent) != gnat_node)
+     return true;
+ 
+   if (kind == N_Parameter_Association)
+     return true;
+ 
+   return false;
+ }
+ 
+ /* Return true if either GNAT_NODE or a view of GNAT_NODE is on the LHS
+    of an assignment or an actual parameter of a call.  */
+ 
+ static bool
+ present_in_lhs_or_actual_p (Node_Id gnat_node)
+ {
+   if (lhs_or_actual_p (gnat_node))
+     return true;
+ 
+   const Node_Kind kind = Nkind (Parent (gnat_node));
+ 
+   if ((kind == N_Type_Conversion || kind == N_Unchecked_Type_Conversion)
+       && lhs_or_actual_p (Parent (gnat_node)))
+     return true;
+ 
+   return false;
+ }
+ 
+ /* Return true if GNAT_NODE, an unchecked type conversion, is a no-op as far
+    as gigi is concerned.  This is used to avoid conversions on the LHS.  */
+ 
+ static bool
+ unchecked_conversion_nop (Node_Id gnat_node)
+ {
+   Entity_Id from_type, to_type;
+ 
+   /* The conversion must be on the LHS of an assignment or an actual parameter
+      of a call.  Otherwise, even if the conversion was essentially a no-op, it
+      could de facto ensure type consistency and this should be preserved.  */
+   if (!lhs_or_actual_p (gnat_node))
+     return false;
+ 
+   from_type = Etype (Expression (gnat_node));
+ 
+   /* We're interested in artificial conversions generated by the front-end
+      to make private types explicit, e.g. in Expand_Assign_Array.  */
+   if (!Is_Private_Type (from_type))
+     return false;
+ 
+   from_type = Underlying_Type (from_type);
+   to_type = Etype (gnat_node);
+ 
+   /* The direct conversion to the underlying type is a no-op.  */
+   if (to_type == from_type)
+     return true;
+ 
+   /* For an array subtype, the conversion to the PAIT is a no-op.  */
+   if (Ekind (from_type) == E_Array_Subtype
+       && to_type == Packed_Array_Impl_Type (from_type))
+     return true;
+ 
+   /* For a record subtype, the conversion to the type is a no-op.  */
+   if (Ekind (from_type) == E_Record_Subtype
+       && to_type == Etype (from_type))
+     return true;
+ 
+   return false;
+ }
+ 
+ /* Return true if GNAT_NODE represents a statement.  */
+ 
+ static bool
+ statement_node_p (Node_Id gnat_node)
+ {
+   const Node_Kind kind = Nkind (gnat_node);
+ 
+   if (kind == N_Label)
+     return true;
+ 
+   if (IN (kind, N_Statement_Other_Than_Procedure_Call))
+     return true;
+ 
+   if (kind == N_Procedure_Call_Statement)
+     return true;
+ 
+   if (IN (kind, N_Raise_xxx_Error) && Ekind (Etype (gnat_node)) == E_Void)
+     return true;
+ 
+   return false;
+ }
+ 
+ /* This function is the driver of the GNAT to GCC tree transformation process.
+    It is the entry point of the tree transformer.  GNAT_NODE is the root of
+    some GNAT tree.  Return the root of the corresponding GCC tree.  If this
+    is an expression, return the GCC equivalent of the expression.  If this
+    is a statement, return the statement or add it to the current statement
+    group, in which case anything returned is to be interpreted as occurring
+    after anything added.  */
+ 
+ tree
+ gnat_to_gnu (Node_Id gnat_node)
+ {
+   const Node_Kind kind = Nkind (gnat_node);
+   tree gnu_result = error_mark_node; /* Default to no value.  */
+   tree gnu_result_type = void_type_node;
+   tree gnu_expr, gnu_lhs, gnu_rhs;
+   Node_Id gnat_temp;
+   atomic_acces_t aa_type;
+   bool went_into_elab_proc;
+   bool aa_sync;
+ 
+   /* Save node number for error message and set location information.  */
+   Current_Error_Node = gnat_node;
+   Sloc_to_locus (Sloc (gnat_node), &input_location);
+ 
+   /* If we are only annotating types and this node is a statement, return
+      an empty statement list.  */
+   if (type_annotate_only && statement_node_p (gnat_node))
+     return alloc_stmt_list ();
+ 
+   /* If we are only annotating types and this node is a subexpression, return
+      a NULL_EXPR, but filter out nodes appearing in the expressions attached
+      to packed array implementation types.  */
+   if (type_annotate_only
+       && IN (kind, N_Subexpr)
+       && !(((IN (kind, N_Op) && kind != N_Op_Expon)
+ 	    || kind == N_Type_Conversion)
+ 	   && Is_Integer_Type (Etype (gnat_node)))
+       && !(kind == N_Attribute_Reference
+ 	   && (Get_Attribute_Id (Attribute_Name (gnat_node)) == Attr_Length
+ 	       || Get_Attribute_Id (Attribute_Name (gnat_node)) == Attr_Size)
+ 	   && Is_Constrained (Etype (Prefix (gnat_node)))
+ 	   && !Is_Constr_Subt_For_U_Nominal (Etype (Prefix (gnat_node))))
+       && kind != N_Expanded_Name
+       && kind != N_Identifier
+       && !Compile_Time_Known_Value (gnat_node))
+     return build1 (NULL_EXPR, get_unpadded_type (Etype (gnat_node)),
+ 		   build_call_raise (CE_Range_Check_Failed, gnat_node,
+ 				     N_Raise_Constraint_Error));
+ 
+   /* If this is a statement and we are at top level, it must be part of the
+      elaboration procedure, so mark us as being in that procedure.  */
+   if ((statement_node_p (gnat_node)
+        || kind == N_Handled_Sequence_Of_Statements
+        || kind == N_Implicit_Label_Declaration)
+       && !current_function_decl)
+     {
+       current_function_decl = get_elaboration_procedure ();
+       went_into_elab_proc = true;
+     }
+   else
+     went_into_elab_proc = false;
+ 
+   switch (kind)
+     {
+       /********************************/
+       /* Chapter 2: Lexical Elements  */
+       /********************************/
+ 
+     case N_Identifier:
+     case N_Expanded_Name:
+     case N_Operator_Symbol:
+     case N_Defining_Identifier:
+     case N_Defining_Operator_Symbol:
+       gnu_result = Identifier_to_gnu (gnat_node, &gnu_result_type);
+ 
+       /* If atomic access is required on the RHS, build the atomic load.  */
+       if (simple_atomic_access_required_p (gnat_node, &aa_sync)
+ 	  && !present_in_lhs_or_actual_p (gnat_node))
+ 	gnu_result = build_atomic_load (gnu_result, aa_sync);
+       break;
+ 
+     case N_Integer_Literal:
+       {
+ 	tree gnu_type;
+ 
+ 	/* Get the type of the result, looking inside any padding and
+ 	   justified modular types.  Then get the value in that type.  */
+ 	gnu_type = gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+ 	if (TREE_CODE (gnu_type) == RECORD_TYPE
+ 	    && TYPE_JUSTIFIED_MODULAR_P (gnu_type))
+ 	  gnu_type = TREE_TYPE (TYPE_FIELDS (gnu_type));
+ 
+ 	gnu_result = UI_To_gnu (Intval (gnat_node), gnu_type);
+ 
+ 	/* If the result overflows (meaning it doesn't fit in its base type),
+ 	   abort, unless this is for a named number because that's not fatal.
+ 	   We would like to check that the value is within the range of the
+ 	   subtype, but that causes problems with subtypes whose usage will
+ 	   raise Constraint_Error and also with biased representation.  */
+ 	if (TREE_OVERFLOW (gnu_result))
+ 	  {
+ 	    if (Nkind (Parent (gnat_node)) == N_Number_Declaration)
+ 	      gnu_result = error_mark_node;
+ 	    else
+ 	      gcc_unreachable ();
+ 	  }
+       }
+       break;
+ 
+     case N_Character_Literal:
+       /* If a Entity is present, it means that this was one of the
+ 	 literals in a user-defined character type.  In that case,
+ 	 just return the value in the CONST_DECL.  Otherwise, use the
+ 	 character code.  In that case, the base type should be an
+ 	 INTEGER_TYPE, but we won't bother checking for that.  */
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       if (Present (Entity (gnat_node)))
+ 	gnu_result = DECL_INITIAL (get_gnu_tree (Entity (gnat_node)));
+       else
+ 	gnu_result
+ 	  = build_int_cst (gnu_result_type,
+ 			   UI_To_CC (Char_Literal_Value (gnat_node)));
+       break;
+ 
+     case N_Real_Literal:
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+       /* If this is of a fixed-point type, the value we want is the value of
+ 	 the corresponding integer.  */
+       if (Is_Fixed_Point_Type (Underlying_Type (Etype (gnat_node))))
+ 	{
+ 	  gnu_result = UI_To_gnu (Corresponding_Integer_Value (gnat_node),
+ 				  gnu_result_type);
+ 	  gcc_assert (!TREE_OVERFLOW (gnu_result));
+ 	}
+ 
+       else
+ 	{
+ 	  Ureal ur_realval = Realval (gnat_node);
+ 
+ 	  /* First convert the value to a machine number if it isn't already.
+ 	     That will force the base to 2 for non-zero values and simplify
+ 	     the rest of the logic.  */
+ 	  if (!Is_Machine_Number (gnat_node))
+ 	    ur_realval
+ 	      = Machine (Base_Type (Underlying_Type (Etype (gnat_node))),
+ 			 ur_realval, Round_Even, gnat_node);
+ 
+ 	  if (UR_Is_Zero (ur_realval))
+ 	    gnu_result = build_real (gnu_result_type, dconst0);
+ 	  else
+ 	    {
+ 	      REAL_VALUE_TYPE tmp;
+ 
+ 	      gnu_result = UI_To_gnu (Numerator (ur_realval), gnu_result_type);
+ 
+ 	      /* The base must be 2 as Machine guarantees this, so we scale
+ 		 the value, which we know can fit in the mantissa of the type
+ 		 (hence the use of that type above).  */
+ 	      gcc_assert (Rbase (ur_realval) == 2);
+ 	      real_ldexp (&tmp, &TREE_REAL_CST (gnu_result),
+ 			  - UI_To_Int (Denominator (ur_realval)));
+ 	      gnu_result = build_real (gnu_result_type, tmp);
+ 	    }
+ 
+ 	  /* Now see if we need to negate the result.  Do it this way to
+ 	     properly handle -0.  */
+ 	  if (UR_Is_Negative (Realval (gnat_node)))
+ 	    gnu_result
+ 	      = build_unary_op (NEGATE_EXPR, get_base_type (gnu_result_type),
+ 				gnu_result);
+ 	}
+ 
+       break;
+ 
+     case N_String_Literal:
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       if (TYPE_PRECISION (TREE_TYPE (gnu_result_type)) == HOST_BITS_PER_CHAR)
+ 	{
+ 	  String_Id gnat_string = Strval (gnat_node);
+ 	  int length = String_Length (gnat_string);
+ 	  int i;
+ 	  char *string;
+ 	  if (length >= ALLOCA_THRESHOLD)
+ 	    string = XNEWVEC (char, length);
+ 	  else
+ 	    string = (char *) alloca (length);
+ 
+ 	  /* Build the string with the characters in the literal.  Note
+ 	     that Ada strings are 1-origin.  */
+ 	  for (i = 0; i < length; i++)
+ 	    string[i] = Get_String_Char (gnat_string, i + 1);
+ 
+ 	  gnu_result = build_string (length, string);
+ 
+ 	  /* Strings in GCC don't normally have types, but we want
+ 	     this to not be converted to the array type.  */
+ 	  TREE_TYPE (gnu_result) = gnu_result_type;
+ 
+ 	  if (length >= ALLOCA_THRESHOLD)
+ 	    free (string);
+ 	}
+       else
+ 	{
+ 	  /* Build a list consisting of each character, then make
+ 	     the aggregate.  */
+ 	  String_Id gnat_string = Strval (gnat_node);
+ 	  int length = String_Length (gnat_string);
+ 	  int i;
+ 	  tree gnu_idx = TYPE_MIN_VALUE (TYPE_DOMAIN (gnu_result_type));
+ 	  tree gnu_one_node = convert (TREE_TYPE (gnu_idx), integer_one_node);
+ 	  vec<constructor_elt, va_gc> *gnu_vec;
+ 	  vec_alloc (gnu_vec, length);
+ 
+ 	  for (i = 0; i < length; i++)
+ 	    {
+ 	      tree t = build_int_cst (TREE_TYPE (gnu_result_type),
+ 				      Get_String_Char (gnat_string, i + 1));
+ 
+ 	      CONSTRUCTOR_APPEND_ELT (gnu_vec, gnu_idx, t);
+ 	      gnu_idx = int_const_binop (PLUS_EXPR, gnu_idx, gnu_one_node);
+ 	    }
+ 
+ 	  gnu_result = gnat_build_constructor (gnu_result_type, gnu_vec);
+ 	}
+       break;
+ 
+     case N_Pragma:
+       gnu_result = Pragma_to_gnu (gnat_node);
+       break;
+ 
+     /**************************************/
+     /* Chapter 3: Declarations and Types  */
+     /**************************************/
+ 
+     case N_Subtype_Declaration:
+     case N_Full_Type_Declaration:
+     case N_Incomplete_Type_Declaration:
+     case N_Private_Type_Declaration:
+     case N_Private_Extension_Declaration:
+     case N_Task_Type_Declaration:
+       process_type (Defining_Entity (gnat_node));
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Object_Declaration:
+     case N_Number_Declaration:
+     case N_Exception_Declaration:
+       gnat_temp = Defining_Entity (gnat_node);
+       gnu_result = alloc_stmt_list ();
+ 
+       /* If we are just annotating types and this object has an unconstrained
+ 	 or task type, don't elaborate it.   */
+       if (type_annotate_only
+ 	  && (((Is_Array_Type (Etype (gnat_temp))
+ 		|| Is_Record_Type (Etype (gnat_temp)))
+ 	       && !Is_Constrained (Etype (gnat_temp)))
+ 	      || Is_Concurrent_Type (Etype (gnat_temp))))
+ 	break;
+ 
+       if (Present (Expression (gnat_node))
+ 	  && !(kind == N_Object_Declaration && No_Initialization (gnat_node))
+ 	  && (!type_annotate_only
+ 	      || Compile_Time_Known_Value (Expression (gnat_node))))
+ 	{
+ 	  gigi_checking_assert (!Do_Range_Check (Expression (gnat_node)));
+ 
+ 	  gnu_expr = gnat_to_gnu (Expression (gnat_node));
+ 
+ 	  /* First deal with erroneous expressions.  */
+ 	  if (TREE_CODE (gnu_expr) == ERROR_MARK)
+ 	    {
+ 	      /* If this is a named number for which we cannot manipulate
+ 		 the value, just skip the declaration altogether.  */
+ 	      if (kind == N_Number_Declaration)
+ 		break;
+ 	      else if (type_annotate_only)
+ 		gnu_expr = NULL_TREE;
+ 	    }
+ 
+ 	  /* Then a special case: we do not want the SLOC of the expression
+ 	     of the tag to pop up every time it is referenced somewhere.  */
+ 	  else if (EXPR_P (gnu_expr) && Is_Tag (gnat_temp))
+ 	    SET_EXPR_LOCATION (gnu_expr, UNKNOWN_LOCATION);
+ 	}
+       else
+ 	gnu_expr = NULL_TREE;
+ 
+       /* If this is a deferred constant with an address clause, we ignore the
+ 	 full view since the clause is on the partial view and we cannot have
+ 	 2 different GCC trees for the object.  The only bits of the full view
+ 	 we will use is the initializer, but it will be directly fetched.  */
+       if (Ekind (gnat_temp) == E_Constant
+ 	  && Present (Address_Clause (gnat_temp))
+ 	  && Present (Full_View (gnat_temp)))
+ 	save_gnu_tree (Full_View (gnat_temp), error_mark_node, true);
+ 
+       /* If this object has its elaboration delayed, we must force evaluation
+ 	 of GNU_EXPR now and save it for the freeze point.  Note that we need
+ 	 not do anything special at the global level since the lifetime of the
+ 	 temporary is fully contained within the elaboration routine.  */
+       if (Present (Freeze_Node (gnat_temp)))
+ 	{
+ 	  if (gnu_expr)
+ 	    {
+ 	      gnu_result = gnat_save_expr (gnu_expr);
+ 	      save_gnu_tree (gnat_node, gnu_result, true);
+ 	    }
+ 	}
+       else
+ 	gnat_to_gnu_entity (gnat_temp, gnu_expr, true);
+       break;
+ 
+     case N_Object_Renaming_Declaration:
+       gnat_temp = Defining_Entity (gnat_node);
+       gnu_result = alloc_stmt_list ();
+ 
+       /* Don't do anything if this renaming is handled by the front end and it
+ 	 does not need debug info.  Note that we consider renamings don't need
+ 	 debug info when optimizing: our way to describe them has a
+ 	 memory/elaboration footprint.
+ 
+ 	 Don't do anything neither if we are just annotating types and this
+ 	 object has a composite or task type, don't elaborate it.  */
+       if ((!Is_Renaming_Of_Object (gnat_temp)
+ 	   || (Needs_Debug_Info (gnat_temp)
+ 	       && !optimize
+ 	       && can_materialize_object_renaming_p
+ 		    (Renamed_Object (gnat_temp))))
+ 	  && ! (type_annotate_only
+ 		&& (Is_Array_Type (Etype (gnat_temp))
+ 		    || Is_Record_Type (Etype (gnat_temp))
+ 		    || Is_Concurrent_Type (Etype (gnat_temp)))))
+ 	gnat_to_gnu_entity (gnat_temp,
+ 			    gnat_to_gnu (Renamed_Object (gnat_temp)),
+ 			    true);
+       break;
+ 
+     case N_Exception_Renaming_Declaration:
+       gnat_temp = Defining_Entity (gnat_node);
+       gnu_result = alloc_stmt_list ();
+ 
+       if (Present (Renamed_Entity (gnat_temp)))
+ 	gnat_to_gnu_entity (gnat_temp,
+ 			    gnat_to_gnu (Renamed_Entity (gnat_temp)),
+ 			    true);
+       break;
+ 
+     case N_Subprogram_Renaming_Declaration:
+       {
+ 	const Node_Id gnat_renaming = Defining_Entity (gnat_node);
+ 	const Node_Id gnat_renamed = Renamed_Entity (gnat_renaming);
+ 
+ 	gnu_result = alloc_stmt_list ();
+ 
+ 	/* Materializing renamed subprograms will only benefit the debugging
+ 	   information as they aren't referenced in the generated code.  So
+ 	   skip them when they aren't needed.  Avoid doing this if:
+ 
+ 	     - there is a freeze node: in this case the renamed entity is not
+ 	       elaborated yet,
+ 	     - the renamed subprogram is intrinsic: it will not be available in
+ 	       the debugging information (note that both or only one of the
+ 	       renaming and the renamed subprograms can be intrinsic).  */
+ 	if (!type_annotate_only
+ 	    && Needs_Debug_Info (gnat_renaming)
+ 	    && No (Freeze_Node (gnat_renaming))
+ 	    && Present (gnat_renamed)
+ 	    && (Ekind (gnat_renamed) == E_Function
+ 		|| Ekind (gnat_renamed) == E_Procedure)
+ 	    && !Is_Intrinsic_Subprogram (gnat_renaming)
+ 	    && !Is_Intrinsic_Subprogram (gnat_renamed))
+ 	  gnat_to_gnu_entity (gnat_renaming, gnat_to_gnu (gnat_renamed), true);
+ 	break;
+       }
+ 
+     case N_Implicit_Label_Declaration:
+       gnat_to_gnu_entity (Defining_Entity (gnat_node), NULL_TREE, true);
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Package_Renaming_Declaration:
+       /* These are fully handled in the front end.  */
+       /* ??? For package renamings, find a way to use GENERIC namespaces so
+ 	 that we get proper debug information for them.  */
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     /*************************************/
+     /* Chapter 4: Names and Expressions  */
+     /*************************************/
+ 
+     case N_Explicit_Dereference:
+       /* Make sure the designated type is complete before dereferencing.  */
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       gnu_result = gnat_to_gnu (Prefix (gnat_node));
+       gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_result);
+ 
+       /* If atomic access is required on the RHS, build the atomic load.  */
+       if (simple_atomic_access_required_p (gnat_node, &aa_sync)
+ 	  && !present_in_lhs_or_actual_p (gnat_node))
+ 	gnu_result = build_atomic_load (gnu_result, aa_sync);
+       break;
+ 
+     case N_Indexed_Component:
+       {
+ 	tree gnu_array_object = gnat_to_gnu ((Prefix (gnat_node)));
+ 	tree gnu_type;
+ 	int ndim, i;
+ 	Node_Id *gnat_expr_array;
+ 
+ 	gnu_array_object = maybe_padded_object (gnu_array_object);
+ 	gnu_array_object = maybe_unconstrained_array (gnu_array_object);
+ 
+ 	/* Convert vector inputs to their representative array type, to fit
+ 	   what the code below expects.  */
+ 	if (VECTOR_TYPE_P (TREE_TYPE (gnu_array_object)))
+ 	  {
+ 	    if (present_in_lhs_or_actual_p (gnat_node))
+ 	      gnat_mark_addressable (gnu_array_object);
+ 	    gnu_array_object = maybe_vector_array (gnu_array_object);
+ 	  }
+ 
+ 	/* The failure of this assertion will very likely come from a missing
+ 	   expansion for a packed array access.  */
+ 	gcc_assert (TREE_CODE (TREE_TYPE (gnu_array_object)) == ARRAY_TYPE);
+ 
+ 	/* First compute the number of dimensions of the array, then
+ 	   fill the expression array, the order depending on whether
+ 	   this is a Convention_Fortran array or not.  */
+ 	for (ndim = 1, gnu_type = TREE_TYPE (gnu_array_object);
+ 	     TREE_CODE (TREE_TYPE (gnu_type)) == ARRAY_TYPE
+ 	     && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_type));
+ 	     ndim++, gnu_type = TREE_TYPE (gnu_type))
+ 	  ;
+ 
+ 	gnat_expr_array = XALLOCAVEC (Node_Id, ndim);
+ 
+ 	if (TYPE_CONVENTION_FORTRAN_P (TREE_TYPE (gnu_array_object)))
+ 	  for (i = ndim - 1, gnat_temp = First (Expressions (gnat_node));
+ 	       i >= 0;
+ 	       i--, gnat_temp = Next (gnat_temp))
+ 	    gnat_expr_array[i] = gnat_temp;
+ 	else
+ 	  for (i = 0, gnat_temp = First (Expressions (gnat_node));
+ 	       i < ndim;
+ 	       i++, gnat_temp = Next (gnat_temp))
+ 	    gnat_expr_array[i] = gnat_temp;
+ 
+ 	/* Start with the prefix and build the successive references.  */
+ 	gnu_result = gnu_array_object;
+ 
+ 	for (i = 0, gnu_type = TREE_TYPE (gnu_array_object);
+ 	     i < ndim;
+ 	     i++, gnu_type = TREE_TYPE (gnu_type))
+ 	  {
+ 	    gcc_assert (TREE_CODE (gnu_type) == ARRAY_TYPE);
+ 	    gnat_temp = gnat_expr_array[i];
+ 	    gnu_expr = maybe_character_value (gnat_to_gnu (gnat_temp));
+ 
+ 	    gnu_result
+ 	      = build_binary_op (ARRAY_REF, NULL_TREE, gnu_result, gnu_expr);
+ 	  }
+ 
+ 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+ 	/* If atomic access is required on the RHS, build the atomic load.  */
+ 	if (simple_atomic_access_required_p (gnat_node, &aa_sync)
+ 	    && !present_in_lhs_or_actual_p (gnat_node))
+ 	  gnu_result = build_atomic_load (gnu_result, aa_sync);
+       }
+       break;
+ 
+     case N_Slice:
+       {
+ 	tree gnu_array_object = gnat_to_gnu (Prefix (gnat_node));
+ 
+ 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+ 	gnu_array_object = maybe_padded_object (gnu_array_object);
+ 	gnu_array_object = maybe_unconstrained_array (gnu_array_object);
+ 
+ 	gnu_expr = TYPE_MIN_VALUE (TYPE_DOMAIN (gnu_result_type));
+ 	gnu_expr = maybe_character_value (gnu_expr);
+ 
+ 	/* If this is a slice with non-constant size of an array with constant
+ 	   size, set the maximum size for the allocation of temporaries.  */
+ 	if (!TREE_CONSTANT (TYPE_SIZE_UNIT (gnu_result_type))
+ 	    && TREE_CONSTANT (TYPE_SIZE_UNIT (TREE_TYPE (gnu_array_object))))
+ 	  TYPE_ARRAY_MAX_SIZE (gnu_result_type)
+ 	    = TYPE_SIZE_UNIT (TREE_TYPE (gnu_array_object));
+ 
+ 	gnu_result = build_binary_op (ARRAY_RANGE_REF, gnu_result_type,
+ 				      gnu_array_object, gnu_expr);
+       }
+       break;
+ 
+     case N_Selected_Component:
+       {
+ 	const Entity_Id gnat_prefix = Prefix (gnat_node);
+ 	Entity_Id gnat_field = Entity (Selector_Name (gnat_node));
+ 	tree gnu_prefix = gnat_to_gnu (gnat_prefix);
+ 
+ 	gnu_prefix = maybe_padded_object (gnu_prefix);
+ 
+ 	/* gnat_to_gnu_entity does not save the GNU tree made for renamed
+ 	   discriminants so avoid making recursive calls on each reference
+ 	   to them by following the appropriate link directly here.  */
+ 	if (Ekind (gnat_field) == E_Discriminant)
+ 	  {
+ 	    /* For discriminant references in tagged types always substitute
+ 	       the corresponding discriminant as the actual component.  */
+ 	    if (Is_Tagged_Type (Underlying_Type (Etype (gnat_prefix))))
+ 	      while (Present (Corresponding_Discriminant (gnat_field)))
+ 		gnat_field = Corresponding_Discriminant (gnat_field);
+ 
+ 	    /* For discriminant references in untagged types always substitute
+ 	       the corresponding stored discriminant.  */
+ 	    else if (Present (Corresponding_Discriminant (gnat_field)))
+ 	      gnat_field = Original_Record_Component (gnat_field);
+ 	  }
+ 
+ 	/* Handle extracting the real or imaginary part of a complex.
+ 	   The real part is the first field and the imaginary the last.  */
+ 	if (TREE_CODE (TREE_TYPE (gnu_prefix)) == COMPLEX_TYPE)
+ 	  gnu_result = build_unary_op (Present (Next_Entity (gnat_field))
+ 				       ? REALPART_EXPR : IMAGPART_EXPR,
+ 				       NULL_TREE, gnu_prefix);
+ 	else
+ 	  {
+ 	    tree gnu_field = gnat_to_gnu_field_decl (gnat_field);
+ 	    tree gnu_offset;
+ 	    struct loop_info_d *loop;
+ 
+ 	    gnu_result
+ 	      = build_component_ref (gnu_prefix, gnu_field,
+ 				     (Nkind (Parent (gnat_node))
+ 				      == N_Attribute_Reference)
+ 				     && lvalue_required_for_attribute_p
+ 					(Parent (gnat_node)));
+ 
+ 	    /* If optimization is enabled and we are inside a loop, we try to
+ 	       hoist nonconstant but invariant offset computations outside of
+ 	       the loop, since they very likely contain loads that could turn
+ 	       out to be hard to move if they end up in active EH regions.  */
+ 	    if (optimize
+ 		&& inside_loop_p ()
+ 		&& TREE_CODE (gnu_result) == COMPONENT_REF
+ 		&& (gnu_offset = component_ref_field_offset (gnu_result))
+ 		&& !TREE_CONSTANT (gnu_offset)
+ 		&& (gnu_offset = gnat_invariant_expr (gnu_offset))
+ 		&& (loop = find_loop ()))
+ 	      {
+ 		tree invariant
+ 		  = build1 (SAVE_EXPR, TREE_TYPE (gnu_offset), gnu_offset);
+ 		vec_safe_push (loop->invariants, invariant);
+ 		tree field = TREE_OPERAND (gnu_result, 1);
+ 		tree factor
+ 		  = size_int (DECL_OFFSET_ALIGN (field) / BITS_PER_UNIT);
+ 		/* Divide the offset by its alignment.  */
+ 		TREE_OPERAND (gnu_result, 2)
+ 		  = size_binop (EXACT_DIV_EXPR, invariant, factor);
+ 	      }
+ 	  }
+ 
+ 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+ 	/* If atomic access is required on the RHS, build the atomic load.  */
+ 	if (simple_atomic_access_required_p (gnat_node, &aa_sync)
+ 	    && !present_in_lhs_or_actual_p (gnat_node))
+ 	  gnu_result = build_atomic_load (gnu_result, aa_sync);
+       }
+       break;
+ 
+     case N_Attribute_Reference:
+       {
+ 	/* The attribute designator.  */
+ 	const int attr = Get_Attribute_Id (Attribute_Name (gnat_node));
+ 
+ 	/* The Elab_Spec and Elab_Body attributes are special in that Prefix
+ 	   is a unit, not an object with a GCC equivalent.  */
+ 	if (attr == Attr_Elab_Spec || attr == Attr_Elab_Body)
+ 	  return
+ 	    create_subprog_decl (create_concat_name
+ 				 (Entity (Prefix (gnat_node)),
+ 				  attr == Attr_Elab_Body ? "elabb" : "elabs"),
+ 				 NULL_TREE, void_ftype, NULL_TREE, is_default,
+ 				 true, true, true, true, false, NULL,
+ 				 gnat_node);
+ 
+ 	gnu_result = Attribute_to_gnu (gnat_node, &gnu_result_type, attr);
+       }
+       break;
+ 
+     case N_Reference:
+       /* Like 'Access as far as we are concerned.  */
+       gnu_result = gnat_to_gnu (Prefix (gnat_node));
+       gnu_result = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_result);
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       break;
+ 
+     case N_Aggregate:
+     case N_Extension_Aggregate:
+       {
+ 	tree gnu_aggr_type;
+ 
+ 	/* Check that this aggregate has not slipped through the cracks.  */
+ 	gcc_assert (!Expansion_Delayed (gnat_node));
+ 
+ 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+ 	if (TREE_CODE (gnu_result_type) == RECORD_TYPE
+ 	    && TYPE_CONTAINS_TEMPLATE_P (gnu_result_type))
+ 	  gnu_aggr_type
+ 	    = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (gnu_result_type)));
+ 	else if (TREE_CODE (gnu_result_type) == VECTOR_TYPE)
+ 	  gnu_aggr_type = TYPE_REPRESENTATIVE_ARRAY (gnu_result_type);
+ 	else
+ 	  gnu_aggr_type = gnu_result_type;
+ 
+ 	if (Null_Record_Present (gnat_node))
+ 	  gnu_result = gnat_build_constructor (gnu_aggr_type, NULL);
+ 
+ 	else if (TREE_CODE (gnu_aggr_type) == RECORD_TYPE
+ 		 || TREE_CODE (gnu_aggr_type) == UNION_TYPE)
+ 	  gnu_result
+ 	    = assoc_to_constructor (Etype (gnat_node),
+ 				    First (Component_Associations (gnat_node)),
+ 				    gnu_aggr_type);
+ 	else if (TREE_CODE (gnu_aggr_type) == ARRAY_TYPE)
+ 	  gnu_result = pos_to_constructor (First (Expressions (gnat_node)),
+ 					   gnu_aggr_type);
+ 	else if (TREE_CODE (gnu_aggr_type) == COMPLEX_TYPE)
+ 	  gnu_result
+ 	    = build_binary_op
+ 	      (COMPLEX_EXPR, gnu_aggr_type,
+ 	       gnat_to_gnu (Expression (First
+ 					(Component_Associations (gnat_node)))),
+ 	       gnat_to_gnu (Expression
+ 			    (Next
+ 			     (First (Component_Associations (gnat_node))))));
+ 	else
+ 	  gcc_unreachable ();
+ 
+ 	gnu_result = convert (gnu_result_type, gnu_result);
+       }
+       break;
+ 
+     case N_Null:
+       if (TARGET_VTABLE_USES_DESCRIPTORS
+ 	  && Ekind (Etype (gnat_node)) == E_Access_Subprogram_Type
+ 	  && Is_Dispatch_Table_Entity (Etype (gnat_node)))
+ 	gnu_result = null_fdesc_node;
+       else
+ 	gnu_result = null_pointer_node;
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       break;
+ 
+     case N_Type_Conversion:
+     case N_Qualified_Expression:
+       gnu_expr = maybe_character_value (gnat_to_gnu (Expression (gnat_node)));
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+       /* If this is a qualified expression for a tagged type, we mark the type
+ 	 as used.  Because of polymorphism, this might be the only reference to
+ 	 the tagged type in the program while objects have it as dynamic type.
+ 	 The debugger needs to see it to display these objects properly.  */
+       if (kind == N_Qualified_Expression && Is_Tagged_Type (Etype (gnat_node)))
+ 	used_types_insert (gnu_result_type);
+ 
+       gigi_checking_assert (!Do_Range_Check (Expression (gnat_node)));
+ 
+       gnu_result
+ 	= convert_with_check (Etype (gnat_node), gnu_expr,
+ 			      Do_Overflow_Check (gnat_node),
+ 			      kind == N_Type_Conversion
+ 			      && Float_Truncate (gnat_node), gnat_node);
+       break;
+ 
+     case N_Unchecked_Type_Conversion:
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       gnu_expr = maybe_character_value (gnat_to_gnu (Expression (gnat_node)));
+ 
+       /* Skip further processing if the conversion is deemed a no-op.  */
+       if (unchecked_conversion_nop (gnat_node))
+ 	{
+ 	  gnu_result = gnu_expr;
+ 	  gnu_result_type = TREE_TYPE (gnu_result);
+ 	  break;
+ 	}
+ 
+       /* If the result is a pointer type, see if we are improperly
+ 	 converting to a stricter alignment.  */
+       if (STRICT_ALIGNMENT && POINTER_TYPE_P (gnu_result_type)
+ 	  && Is_Access_Type (Etype (gnat_node)))
+ 	{
+ 	  unsigned int align = known_alignment (gnu_expr);
+ 	  tree gnu_obj_type = TREE_TYPE (gnu_result_type);
+ 	  unsigned int oalign = TYPE_ALIGN (gnu_obj_type);
+ 
+ 	  if (align != 0 && align < oalign && !TYPE_ALIGN_OK (gnu_obj_type))
+ 	    post_error_ne_tree_2
+ 	      ("??source alignment (^) '< alignment of & (^)",
+ 	       gnat_node, Designated_Type (Etype (gnat_node)),
+ 	       size_int (align / BITS_PER_UNIT), oalign / BITS_PER_UNIT);
+ 	}
+ 
+       /* If we are converting a descriptor to a function pointer, first
+ 	 build the pointer.  */
+       if (TARGET_VTABLE_USES_DESCRIPTORS
+ 	  && TREE_TYPE (gnu_expr) == fdesc_type_node
+ 	  && POINTER_TYPE_P (gnu_result_type))
+ 	gnu_expr = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_expr);
+ 
+       gnu_result = unchecked_convert (gnu_result_type, gnu_expr,
+ 				      No_Truncation (gnat_node));
+       break;
+ 
+     case N_In:
+     case N_Not_In:
+       {
+ 	tree gnu_obj = gnat_to_gnu (Left_Opnd (gnat_node));
+ 	tree gnu_low, gnu_high;
+ 
+ 	Range_to_gnu (Right_Opnd (gnat_node), &gnu_low, &gnu_high);
+ 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+ 	tree gnu_op_type = maybe_character_type (TREE_TYPE (gnu_obj));
+ 	if (TREE_TYPE (gnu_obj) != gnu_op_type)
+ 	  {
+ 	    gnu_obj = convert (gnu_op_type, gnu_obj);
+ 	    gnu_low = convert (gnu_op_type, gnu_low);
+ 	    gnu_high = convert (gnu_op_type, gnu_high);
+ 	  }
+ 
+ 	/* If LOW and HIGH are identical, perform an equality test.  Otherwise,
+ 	   ensure that GNU_OBJ is evaluated only once and perform a full range
+ 	   test.  */
+ 	if (operand_equal_p (gnu_low, gnu_high, 0))
+ 	  gnu_result
+ 	    = build_binary_op (EQ_EXPR, gnu_result_type, gnu_obj, gnu_low);
+ 	else
+ 	  {
+ 	    tree t1, t2;
+ 	    gnu_obj = gnat_protect_expr (gnu_obj);
+ 	    t1 = build_binary_op (GE_EXPR, gnu_result_type, gnu_obj, gnu_low);
+ 	    if (EXPR_P (t1))
+ 	      set_expr_location_from_node (t1, gnat_node);
+ 	    t2 = build_binary_op (LE_EXPR, gnu_result_type, gnu_obj, gnu_high);
+ 	    if (EXPR_P (t2))
+ 	      set_expr_location_from_node (t2, gnat_node);
+ 	    gnu_result
+ 	      = build_binary_op (TRUTH_ANDIF_EXPR, gnu_result_type, t1, t2);
+ 	  }
+ 
+ 	if (kind == N_Not_In)
+ 	  gnu_result
+ 	    = invert_truthvalue_loc (EXPR_LOCATION (gnu_result), gnu_result);
+       }
+       break;
+ 
+     case N_Op_Divide:
+       gnu_lhs = gnat_to_gnu (Left_Opnd (gnat_node));
+       gnu_rhs = gnat_to_gnu (Right_Opnd (gnat_node));
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       gnu_result = build_binary_op (FLOAT_TYPE_P (gnu_result_type)
+ 				    ? RDIV_EXPR
+ 				    : (Rounded_Result (gnat_node)
+ 				       ? ROUND_DIV_EXPR : TRUNC_DIV_EXPR),
+ 				    gnu_result_type, gnu_lhs, gnu_rhs);
+       break;
+ 
+     case N_Op_Eq:
+     case N_Op_Ne:
+     case N_Op_Lt:
+     case N_Op_Le:
+     case N_Op_Gt:
+     case N_Op_Ge:
+     case N_Op_Add:
+     case N_Op_Subtract:
+     case N_Op_Multiply:
+     case N_Op_Mod:
+     case N_Op_Rem:
+     case N_Op_Rotate_Left:
+     case N_Op_Rotate_Right:
+     case N_Op_Shift_Left:
+     case N_Op_Shift_Right:
+     case N_Op_Shift_Right_Arithmetic:
+     case N_Op_And:
+     case N_Op_Or:
+     case N_Op_Xor:
+     case N_And_Then:
+     case N_Or_Else:
+       {
+ 	enum tree_code code = gnu_codes[kind];
+ 	bool ignore_lhs_overflow = false;
+ 	location_t saved_location = input_location;
+ 	tree gnu_type, gnu_max_shift = NULL_TREE;
+ 
+ 	/* Fix operations set up for boolean types in GNU_CODES above.  */
+ 	if (Is_Modular_Integer_Type (Underlying_Type (Etype (gnat_node))))
+ 	  switch (kind)
+ 	    {
+ 	    case N_Op_And:
+ 	      code = BIT_AND_EXPR;
+ 	      break;
+ 	    case N_Op_Or:
+ 	      code = BIT_IOR_EXPR;
+ 	      break;
+ 	    case N_Op_Xor:
+ 	      code = BIT_XOR_EXPR;
+ 	      break;
+ 	    default:
+ 	      break;
+ 	    }
+ 
+ 	gnu_lhs = gnat_to_gnu (Left_Opnd (gnat_node));
+ 	gnu_rhs = gnat_to_gnu (Right_Opnd (gnat_node));
+ 	gnu_type = gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+ 	/* If this is a shift, take the count as unsigned since that is what
+ 	   most machines do and will generate simpler adjustments below.  */
+ 	if (IN (kind, N_Op_Shift))
+ 	  {
+ 	    tree gnu_count_type
+ 	      = gnat_unsigned_type_for (get_base_type (TREE_TYPE (gnu_rhs)));
+ 	    gnu_rhs = convert (gnu_count_type, gnu_rhs);
+ 	    gnu_max_shift
+ 	      = convert (TREE_TYPE (gnu_rhs), TYPE_SIZE (gnu_type));
+ 	  }
+ 
+ 	/* Pending generic support for efficient vector logical operations in
+ 	   GCC, convert vectors to their representative array type view and
+ 	   fallthrough.  */
+ 	gnu_lhs = maybe_vector_array (gnu_lhs);
+ 	gnu_rhs = maybe_vector_array (gnu_rhs);
+ 
+ 	/* If this is a comparison operator, convert any references to an
+ 	   unconstrained array value into a reference to the actual array.  */
+ 	if (TREE_CODE_CLASS (code) == tcc_comparison)
+ 	  {
+ 	    gnu_lhs = maybe_unconstrained_array (gnu_lhs);
+ 	    gnu_rhs = maybe_unconstrained_array (gnu_rhs);
+ 
+ 	    tree gnu_op_type = maybe_character_type (TREE_TYPE (gnu_lhs));
+ 	    if (TREE_TYPE (gnu_lhs) != gnu_op_type)
+ 	      {
+ 		gnu_lhs = convert (gnu_op_type, gnu_lhs);
+ 		gnu_rhs = convert (gnu_op_type, gnu_rhs);
+ 	      }
+ 	  }
+ 
+ 	/* If this is a shift whose count is not guaranteed to be correct,
+ 	   we need to adjust the shift count.  */
+ 	if ((kind == N_Op_Rotate_Left || kind == N_Op_Rotate_Right)
+ 	    && !Shift_Count_OK (gnat_node))
+ 	  gnu_rhs = build_binary_op (TRUNC_MOD_EXPR, TREE_TYPE (gnu_rhs),
+ 				     gnu_rhs, gnu_max_shift);
+ 	else if (kind == N_Op_Shift_Right_Arithmetic
+ 		 && !Shift_Count_OK (gnat_node))
+ 	  gnu_rhs
+ 	    = build_binary_op (MIN_EXPR, TREE_TYPE (gnu_rhs),
+ 			       build_binary_op (MINUS_EXPR,
+ 						TREE_TYPE (gnu_rhs),
+ 						gnu_max_shift,
+ 						build_int_cst
+ 						(TREE_TYPE (gnu_rhs), 1)),
+ 			       gnu_rhs);
+ 
+ 	/* For right shifts, the type says what kind of shift to do,
+ 	   so we may need to choose a different type.  In this case,
+ 	   we have to ignore integer overflow lest it propagates all
+ 	   the way down and causes a CE to be explicitly raised.  */
+ 	if (kind == N_Op_Shift_Right && !TYPE_UNSIGNED (gnu_type))
+ 	  {
+ 	    gnu_type = gnat_unsigned_type_for (gnu_type);
+ 	    ignore_lhs_overflow = true;
+ 	  }
+ 	else if (kind == N_Op_Shift_Right_Arithmetic
+ 		 && TYPE_UNSIGNED (gnu_type))
+ 	  {
+ 	    gnu_type = gnat_signed_type_for (gnu_type);
+ 	    ignore_lhs_overflow = true;
+ 	  }
+ 
+ 	if (gnu_type != gnu_result_type)
+ 	  {
+ 	    tree gnu_old_lhs = gnu_lhs;
+ 	    gnu_lhs = convert (gnu_type, gnu_lhs);
+ 	    if (TREE_CODE (gnu_lhs) == INTEGER_CST && ignore_lhs_overflow)
+ 	      TREE_OVERFLOW (gnu_lhs) = TREE_OVERFLOW (gnu_old_lhs);
+ 	    gnu_rhs = convert (gnu_type, gnu_rhs);
+ 	    if (gnu_max_shift)
+ 	      gnu_max_shift = convert (gnu_type, gnu_max_shift);
+ 	  }
+ 
+ 	/* For signed integer addition, subtraction and multiplication, do an
+ 	   overflow check if required.  */
+ 	if (Do_Overflow_Check (gnat_node)
+ 	    && (code == PLUS_EXPR || code == MINUS_EXPR || code == MULT_EXPR)
+ 	    && !TYPE_UNSIGNED (gnu_type)
+ 	    && !FLOAT_TYPE_P (gnu_type))
+ 	  gnu_result
+ 	    = build_binary_op_trapv (code, gnu_type, gnu_lhs, gnu_rhs,
+ 				     gnat_node);
+ 	else
+ 	  {
+ 	    /* Some operations, e.g. comparisons of arrays, generate complex
+ 	       trees that need to be annotated while they are being built.  */
+ 	    input_location = saved_location;
+ 	    gnu_result = build_binary_op (code, gnu_type, gnu_lhs, gnu_rhs);
+ 	  }
+ 
+ 	/* If this is a logical shift with the shift count not verified,
+ 	   we must return zero if it is too large.  We cannot compensate
+ 	   beforehand in this case.  */
+ 	if ((kind == N_Op_Shift_Left || kind == N_Op_Shift_Right)
+ 	    && !Shift_Count_OK (gnat_node))
+ 	  gnu_result
+ 	    = build_cond_expr (gnu_type,
+ 			       build_binary_op (GE_EXPR, boolean_type_node,
+ 						gnu_rhs, gnu_max_shift),
+ 			       build_int_cst (gnu_type, 0),
+ 			       gnu_result);
+       }
+       break;
+ 
+     case N_If_Expression:
+       {
+ 	tree gnu_cond = gnat_to_gnu (First (Expressions (gnat_node)));
+ 	tree gnu_true = gnat_to_gnu (Next (First (Expressions (gnat_node))));
+ 	tree gnu_false
+ 	  = gnat_to_gnu (Next (Next (First (Expressions (gnat_node)))));
+ 
+ 	gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 	gnu_result
+ 	  = build_cond_expr (gnu_result_type, gnu_cond, gnu_true, gnu_false);
+       }
+       break;
+ 
+     case N_Op_Plus:
+       gnu_result = gnat_to_gnu (Right_Opnd (gnat_node));
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       break;
+ 
+     case N_Op_Not:
+       /* This case can apply to a boolean or a modular type.
+ 	 Fall through for a boolean operand since GNU_CODES is set
+ 	 up to handle this.  */
+       if (Is_Modular_Integer_Type (Underlying_Type (Etype (gnat_node))))
+ 	{
+ 	  gnu_expr = gnat_to_gnu (Right_Opnd (gnat_node));
+ 	  gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 	  gnu_result = build_unary_op (BIT_NOT_EXPR, gnu_result_type,
+ 				       gnu_expr);
+ 	  break;
+ 	}
+ 
+       /* ... fall through ... */
+ 
+     case N_Op_Minus:
+     case N_Op_Abs:
+       gnu_expr = gnat_to_gnu (Right_Opnd (gnat_node));
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ 
+       /* For signed integer negation and absolute value, do an overflow check
+ 	 if required.  */
+       if (Do_Overflow_Check (gnat_node)
+ 	  && !TYPE_UNSIGNED (gnu_result_type)
+ 	  && !FLOAT_TYPE_P (gnu_result_type))
+ 	gnu_result
+ 	  = build_unary_op_trapv (gnu_codes[kind], gnu_result_type, gnu_expr,
+ 				  gnat_node);
+       else
+ 	gnu_result
+ 	  = build_unary_op (gnu_codes[kind], gnu_result_type, gnu_expr);
+       break;
+ 
+     case N_Allocator:
+       {
+ 	tree gnu_type, gnu_init;
+ 	bool ignore_init_type;
+ 
+ 	gnat_temp = Expression (gnat_node);
+ 
+ 	/* The expression can be either an N_Identifier or an Expanded_Name,
+ 	   which must represent a type, or a N_Qualified_Expression, which
+ 	   contains both the type and an initial value for the object.  */
+ 	if (Nkind (gnat_temp) == N_Identifier
+ 	    || Nkind (gnat_temp) == N_Expanded_Name)
+ 	  {
+ 	    ignore_init_type = false;
+ 	    gnu_init = NULL_TREE;
+ 	    gnu_type = gnat_to_gnu_type (Entity (gnat_temp));
+ 	  }
+ 
+ 	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));
+ 	    gnu_init = maybe_unconstrained_array (gnu_init);
+ 
+ 	    gigi_checking_assert (!Do_Range_Check (Expression (gnat_temp)));
+ 
+ 	    if (Is_Elementary_Type (gnat_desig_type)
+ 		|| Is_Constrained (gnat_desig_type))
+ 	      gnu_type = gnat_to_gnu_type (gnat_desig_type);
+ 	    else
+ 	      {
+ 		gnu_type = gnat_to_gnu_type (Etype (Expression (gnat_temp)));
+ 		if (TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE)
+ 		  gnu_type = TREE_TYPE (gnu_init);
+ 	      }
+ 
+ 	    /* See the N_Qualified_Expression case for the rationale.  */
+ 	    if (Is_Tagged_Type (gnat_desig_type))
+ 	      used_types_insert (gnu_type);
+ 
+ 	    gnu_init = convert (gnu_type, gnu_init);
+ 	  }
+ 	else
+ 	  gcc_unreachable ();
+ 
+ 	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);
+       }
+       break;
+ 
+     /**************************/
+     /* Chapter 5: Statements  */
+     /**************************/
+ 
+     case N_Label:
+       gnu_result = build1 (LABEL_EXPR, void_type_node,
+ 			   gnat_to_gnu (Identifier (gnat_node)));
+       break;
+ 
+     case N_Null_Statement:
+       /* When not optimizing, turn null statements from source into gotos to
+ 	 the next statement that the middle-end knows how to preserve.  */
+       if (!optimize && Comes_From_Source (gnat_node))
+ 	{
+ 	  tree stmt, label = create_label_decl (NULL_TREE, gnat_node);
+ 	  DECL_IGNORED_P (label) = 1;
+ 	  start_stmt_group ();
+ 	  stmt = build1 (GOTO_EXPR, void_type_node, label);
+ 	  set_expr_location_from_node (stmt, gnat_node);
+ 	  add_stmt (stmt);
+ 	  stmt = build1 (LABEL_EXPR, void_type_node, label);
+ 	  set_expr_location_from_node (stmt, gnat_node);
+ 	  add_stmt (stmt);
+ 	  gnu_result = end_stmt_group ();
+ 	}
+       else
+ 	gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Assignment_Statement:
+       /* Get the LHS and RHS of the statement and convert any reference to an
+ 	 unconstrained array into a reference to the underlying array.  */
+       gnu_lhs = maybe_unconstrained_array (gnat_to_gnu (Name (gnat_node)));
+ 
+       /* If the type has a size that overflows, convert this into raise of
+ 	 Storage_Error: execution shouldn't have gotten here anyway.  */
+       if (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (gnu_lhs))) == INTEGER_CST
+ 	   && !valid_constant_size_p (TYPE_SIZE_UNIT (TREE_TYPE (gnu_lhs))))
+ 	gnu_result = build_call_raise (SE_Object_Too_Large, gnat_node,
+ 				       N_Raise_Storage_Error);
+       else if (Nkind (Expression (gnat_node)) == N_Function_Call)
+ 	{
+ 	  get_atomic_access (Name (gnat_node), &aa_type, &aa_sync);
+ 	  gnu_result
+ 	    = Call_to_gnu (Expression (gnat_node), &gnu_result_type, gnu_lhs,
+ 			   aa_type, aa_sync);
+ 	}
+       else
+ 	{
+ 	  const Node_Id gnat_expr = Expression (gnat_node);
+ 	  const Node_Id gnat_inner
+ 	    = Nkind (gnat_expr) == N_Qualified_Expression
+ 	      ? Expression (gnat_expr)
+ 	      : gnat_expr;
+ 	  const Entity_Id gnat_type
+ 	    = Underlying_Type (Etype (Name (gnat_node)));
+ 	  const bool use_memset_p
+ 	    = Is_Array_Type (gnat_type)
+ 	      && Nkind (gnat_inner) == N_Aggregate
+ 	      && Is_Single_Aggregate (gnat_inner);
+ 
+ 	  /* If we use memset, we need to find the innermost expression.  */
+ 	  if (use_memset_p)
+ 	    {
+ 	      gnat_temp = gnat_inner;
+ 	      do {
+ 		gnat_temp
+ 		  = Expression (First (Component_Associations (gnat_temp)));
+ 	      } while (Nkind (gnat_temp) == N_Aggregate
+ 		       && Is_Single_Aggregate (gnat_temp));
+ 	      gnu_rhs = gnat_to_gnu (gnat_temp);
+ 	    }
+ 	  else
+ 	    gnu_rhs = maybe_unconstrained_array (gnat_to_gnu (gnat_expr));
+ 
+ 	  gigi_checking_assert (!Do_Range_Check (gnat_expr));
+ 
+ 	  get_atomic_access (Name (gnat_node), &aa_type, &aa_sync);
+ 
+ 	  /* If an outer atomic access is required on the LHS, build the load-
+ 	     modify-store sequence.  */
+ 	  if (aa_type == OUTER_ATOMIC)
+ 	    gnu_result = build_load_modify_store (gnu_lhs, gnu_rhs, gnat_node);
+ 
+ 	  /* Or else, if a simple atomic access is required, build the atomic
+ 	     store.  */
+ 	  else if (aa_type == SIMPLE_ATOMIC)
+ 	    gnu_result = build_atomic_store (gnu_lhs, gnu_rhs, aa_sync);
+ 
+ 	  /* Or else, use memset when the conditions are met.  This has already
+ 	     been validated by Aggr_Assignment_OK_For_Backend in the front-end
+ 	     and the RHS is thus guaranteed to be of the appropriate form.  */
+ 	  else if (use_memset_p)
+ 	    {
+ 	      tree value
+ 		= real_zerop (gnu_rhs)
+ 		  ? integer_zero_node
+ 		  : fold_convert (integer_type_node, gnu_rhs);
+ 	      tree dest = build_fold_addr_expr (gnu_lhs);
+ 	      tree t = builtin_decl_explicit (BUILT_IN_MEMSET);
+ 	      /* Be extra careful not to write too much data.  */
+ 	      tree size;
+ 	      if (TREE_CODE (gnu_lhs) == COMPONENT_REF)
+ 		size = DECL_SIZE_UNIT (TREE_OPERAND (gnu_lhs, 1));
+ 	      else if (DECL_P (gnu_lhs))
+ 		size = DECL_SIZE_UNIT (gnu_lhs);
+ 	      else
+ 		size = TYPE_SIZE_UNIT (TREE_TYPE (gnu_lhs));
+ 	      size = SUBSTITUTE_PLACEHOLDER_IN_EXPR (size, gnu_lhs);
+ 	      if (TREE_CODE (value) == INTEGER_CST && !integer_zerop (value))
+ 		{
+ 		  tree mask
+ 		    = build_int_cst (integer_type_node,
+ 				     ((HOST_WIDE_INT) 1 << BITS_PER_UNIT) - 1);
+ 		  value = int_const_binop (BIT_AND_EXPR, value, mask);
+ 		}
+ 	      gnu_result = build_call_expr (t, 3, dest, value, size);
+ 	    }
+ 
+ 	  /* Otherwise build a regular assignment.  */
+ 	  else
+ 	    gnu_result
+ 	      = build_binary_op (MODIFY_EXPR, NULL_TREE, gnu_lhs, gnu_rhs);
+ 
+ 	  /* If the assignment type is a regular array and the two sides are
+ 	     not completely disjoint, play safe and use memmove.  But don't do
+ 	     it for a bit-packed array as it might not be byte-aligned.  */
+ 	  if (TREE_CODE (gnu_result) == MODIFY_EXPR
+ 	      && Is_Array_Type (gnat_type)
+ 	      && !Is_Bit_Packed_Array (gnat_type)
+ 	      && !(Forwards_OK (gnat_node) && Backwards_OK (gnat_node)))
+ 	    {
+ 	      tree to = TREE_OPERAND (gnu_result, 0);
+ 	      tree from = TREE_OPERAND (gnu_result, 1);
+ 	      tree type = TREE_TYPE (from);
+ 	      tree size
+ 	        = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_SIZE_UNIT (type), from);
+ 	      tree to_ptr = build_fold_addr_expr (to);
+ 	      tree from_ptr = build_fold_addr_expr (from);
+ 	      tree t = builtin_decl_explicit (BUILT_IN_MEMMOVE);
+ 	      gnu_result = build_call_expr (t, 3, to_ptr, from_ptr, size);
+ 	   }
+ 	}
+       break;
+ 
+     case N_If_Statement:
+       {
+ 	tree *gnu_else_ptr; /* Point to put next "else if" or "else".  */
+ 
+ 	/* Make the outer COND_EXPR.  Avoid non-determinism.  */
+ 	gnu_result = build3 (COND_EXPR, void_type_node,
+ 			     gnat_to_gnu (Condition (gnat_node)),
+ 			     NULL_TREE, NULL_TREE);
+ 	COND_EXPR_THEN (gnu_result)
+ 	  = build_stmt_group (Then_Statements (gnat_node), false);
+ 	TREE_SIDE_EFFECTS (gnu_result) = 1;
+ 	gnu_else_ptr = &COND_EXPR_ELSE (gnu_result);
+ 
+ 	/* Now make a COND_EXPR for each of the "else if" parts.  Put each
+ 	   into the previous "else" part and point to where to put any
+ 	   outer "else".  Also avoid non-determinism.  */
+ 	if (Present (Elsif_Parts (gnat_node)))
+ 	  for (gnat_temp = First (Elsif_Parts (gnat_node));
+ 	       Present (gnat_temp); gnat_temp = Next (gnat_temp))
+ 	    {
+ 	      gnu_expr = build3 (COND_EXPR, void_type_node,
+ 				 gnat_to_gnu (Condition (gnat_temp)),
+ 				 NULL_TREE, NULL_TREE);
+ 	      COND_EXPR_THEN (gnu_expr)
+ 		= build_stmt_group (Then_Statements (gnat_temp), false);
+ 	      TREE_SIDE_EFFECTS (gnu_expr) = 1;
+ 	      set_expr_location_from_node (gnu_expr, gnat_temp);
+ 	      *gnu_else_ptr = gnu_expr;
+ 	      gnu_else_ptr = &COND_EXPR_ELSE (gnu_expr);
+ 	    }
+ 
+ 	*gnu_else_ptr = build_stmt_group (Else_Statements (gnat_node), false);
+       }
+       break;
+ 
+     case N_Case_Statement:
+       gnu_result = Case_Statement_to_gnu (gnat_node);
+       break;
+ 
+     case N_Loop_Statement:
+       gnu_result = Loop_Statement_to_gnu (gnat_node);
+       break;
+ 
+     case N_Block_Statement:
+       /* The only way to enter the block is to fall through to it.  */
+       if (stmt_group_may_fallthru ())
+ 	{
+ 	  start_stmt_group ();
+ 	  gnat_pushlevel ();
+ 	  process_decls (Declarations (gnat_node), Empty, Empty, true, true);
+ 	  add_stmt (gnat_to_gnu (Handled_Statement_Sequence (gnat_node)));
+ 	  gnat_poplevel ();
+ 	  gnu_result = end_stmt_group ();
+ 	}
+       else
+ 	gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Exit_Statement:
+       gnu_result
+ 	= build2 (EXIT_STMT, void_type_node,
+ 		  (Present (Condition (gnat_node))
+ 		   ? gnat_to_gnu (Condition (gnat_node)) : NULL_TREE),
+ 		  (Present (Name (gnat_node))
+ 		   ? get_gnu_tree (Entity (Name (gnat_node)))
+ 		   : LOOP_STMT_LABEL (gnu_loop_stack->last ()->stmt)));
+       break;
+ 
+     case N_Simple_Return_Statement:
+       {
+ 	tree gnu_ret_obj, gnu_ret_val;
+ 
+ 	/* If the subprogram is a function, we must return the expression.  */
+ 	if (Present (Expression (gnat_node)))
+ 	  {
+ 	    tree gnu_subprog_type = TREE_TYPE (current_function_decl);
+ 
+ 	    /* If this function has copy-in/copy-out parameters parameters and
+ 	       doesn't return by invisible reference, get the real object for
+ 	       the return.  See Subprogram_Body_to_gnu.  */
+ 	    if (TYPE_CI_CO_LIST (gnu_subprog_type)
+ 		&& !TREE_ADDRESSABLE (gnu_subprog_type))
+ 	      gnu_ret_obj = gnu_return_var_stack->last ();
+ 	    else
+ 	      gnu_ret_obj = DECL_RESULT (current_function_decl);
+ 
+ 	    /* Get the GCC tree for the expression to be returned.  */
+ 	    gnu_ret_val = gnat_to_gnu (Expression (gnat_node));
+ 
+ 	    /* Do not remove the padding from GNU_RET_VAL if the inner type is
+ 	       self-referential since we want to allocate the fixed size.  */
+ 	    if (TREE_CODE (gnu_ret_val) == COMPONENT_REF
+ 		&& type_is_padding_self_referential
+ 		   (TREE_TYPE (TREE_OPERAND (gnu_ret_val, 0))))
+ 	      gnu_ret_val = TREE_OPERAND (gnu_ret_val, 0);
+ 
+ 	    /* If the function returns by direct reference, return a pointer
+ 	       to the return value.  */
+ 	    if (TYPE_RETURN_BY_DIRECT_REF_P (gnu_subprog_type)
+ 		|| By_Ref (gnat_node))
+ 	      gnu_ret_val = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_ret_val);
+ 
+ 	    /* Otherwise, if it returns an unconstrained array, we have to
+ 	       allocate a new version of the result and return it.  */
+ 	    else if (TYPE_RETURN_UNCONSTRAINED_P (gnu_subprog_type))
+ 	      {
+ 		gnu_ret_val = maybe_unconstrained_array (gnu_ret_val);
+ 
+ 		/* And find out whether this is a candidate for Named Return
+ 		   Value.  If so, record it.  */
+ 		if (optimize
+ 		    && !optimize_debug
+ 		    && !TYPE_CI_CO_LIST (gnu_subprog_type))
+ 		  {
+ 		    tree ret_val = gnu_ret_val;
+ 
+ 		    /* Strip useless conversions around the return value.  */
+ 		    if (gnat_useless_type_conversion (ret_val))
+ 		      ret_val = TREE_OPERAND (ret_val, 0);
+ 
+ 		    /* Strip unpadding around the return value.  */
+ 		    if (TREE_CODE (ret_val) == COMPONENT_REF
+ 			&& TYPE_IS_PADDING_P
+ 			   (TREE_TYPE (TREE_OPERAND (ret_val, 0))))
+ 		      ret_val = TREE_OPERAND (ret_val, 0);
+ 
+ 		    /* Now apply the test to the return value.  */
+ 		    if (return_value_ok_for_nrv_p (NULL_TREE, ret_val))
+ 		      {
+ 			if (!f_named_ret_val)
+ 			  f_named_ret_val = BITMAP_GGC_ALLOC ();
+ 			bitmap_set_bit (f_named_ret_val, DECL_UID (ret_val));
+ 			if (!f_gnat_ret)
+ 			  f_gnat_ret = gnat_node;
+ 		      }
+ 		  }
+ 
+ 		gnu_ret_val = build_allocator (TREE_TYPE (gnu_ret_val),
+ 					       gnu_ret_val,
+ 					       TREE_TYPE (gnu_ret_obj),
+ 					       Procedure_To_Call (gnat_node),
+ 					       Storage_Pool (gnat_node),
+ 					       gnat_node, false);
+ 	      }
+ 
+ 	    /* Otherwise, if it returns by invisible reference, dereference
+ 	       the pointer it is passed using the type of the return value
+ 	       and build the copy operation manually.  This ensures that we
+ 	       don't copy too much data, for example if the return type is
+ 	       unconstrained with a maximum size.  */
+ 	    else if (TREE_ADDRESSABLE (gnu_subprog_type))
+ 	      {
+ 		tree gnu_ret_deref
+ 		  = build_unary_op (INDIRECT_REF, TREE_TYPE (gnu_ret_val),
+ 				    gnu_ret_obj);
+ 		gnu_result = build2 (INIT_EXPR, void_type_node,
+ 				     gnu_ret_deref, gnu_ret_val);
+ 		add_stmt_with_node (gnu_result, gnat_node);
+ 		gnu_ret_val = NULL_TREE;
+ 	      }
+ 	  }
+ 
+ 	else
+ 	  gnu_ret_obj = gnu_ret_val = NULL_TREE;
+ 
+ 	/* If we have a return label defined, convert this into a branch to
+ 	   that label.  The return proper will be handled elsewhere.  */
+ 	if (gnu_return_label_stack->last ())
+ 	  {
+ 	    if (gnu_ret_val)
+ 	      add_stmt_with_node (build_binary_op (MODIFY_EXPR,
+ 						   NULL_TREE, gnu_ret_obj,
+ 						   gnu_ret_val),
+ 				  gnat_node);
+ 
+ 	    gnu_result = build1 (GOTO_EXPR, void_type_node,
+ 				 gnu_return_label_stack->last ());
+ 
+ 	    /* When not optimizing, make sure the return is preserved.  */
+ 	    if (!optimize && Comes_From_Source (gnat_node))
+ 	      DECL_ARTIFICIAL (gnu_return_label_stack->last ()) = 0;
+ 	  }
+ 
+ 	/* Otherwise, build a regular return.  */
+ 	else
+ 	  gnu_result = build_return_expr (gnu_ret_obj, gnu_ret_val);
+       }
+       break;
+ 
+     case N_Goto_Statement:
+       gnu_expr = gnat_to_gnu (Name (gnat_node));
+       gnu_result = build1 (GOTO_EXPR, void_type_node, gnu_expr);
+       TREE_USED (gnu_expr) = 1;
+       break;
+ 
+     /***************************/
+     /* Chapter 6: Subprograms  */
+     /***************************/
+ 
+     case N_Subprogram_Declaration:
+       /* Unless there is a freeze node, declare the entity.  We consider
+ 	 this a definition even though we're not generating code for the
+ 	 subprogram because we will be making the corresponding GCC node.
+ 	 When there is a freeze node, it is considered the definition of
+ 	 the subprogram and we do nothing until after it is encountered.
+ 	 That's an efficiency issue: the types involved in the profile
+ 	 are far more likely to be frozen between the declaration and
+ 	 the freeze node than before the declaration, so we save some
+ 	 updates of the GCC node by waiting until the freeze node.
+ 	 The counterpart is that we assume that there is no reference
+ 	 to the subprogram between the declaration and the freeze node
+ 	 in the expanded code; otherwise, it will be interpreted as an
+ 	 external reference and very likely give rise to a link failure.  */
+       if (No (Freeze_Node (Defining_Entity (Specification (gnat_node)))))
+ 	gnat_to_gnu_entity (Defining_Entity (Specification (gnat_node)),
+ 			    NULL_TREE, true);
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Abstract_Subprogram_Declaration:
+       /* This subprogram doesn't exist for code generation purposes, but we
+ 	 have to elaborate the types of any parameters and result, unless
+ 	 they are imported types (nothing to generate in this case).
+ 
+ 	 The parameter list may contain types with freeze nodes, e.g. not null
+ 	 subtypes, so the subprogram itself may carry a freeze node, in which
+ 	 case its elaboration must be deferred.  */
+ 
+       /* Process the parameter types first.  */
+       if (No (Freeze_Node (Defining_Entity (Specification (gnat_node)))))
+       for (gnat_temp
+ 	   = First_Formal_With_Extras
+ 	      (Defining_Entity (Specification (gnat_node)));
+ 	   Present (gnat_temp);
+ 	   gnat_temp = Next_Formal_With_Extras (gnat_temp))
+ 	if (Is_Itype (Etype (gnat_temp))
+ 	    && !From_Limited_With (Etype (gnat_temp)))
+ 	  gnat_to_gnu_entity (Etype (gnat_temp), NULL_TREE, false);
+ 
+       /* Then the result type, set to Standard_Void_Type for procedures.  */
+       {
+ 	Entity_Id gnat_temp_type
+ 	  = Etype (Defining_Entity (Specification (gnat_node)));
+ 
+ 	if (Is_Itype (gnat_temp_type) && !From_Limited_With (gnat_temp_type))
+ 	  gnat_to_gnu_entity (Etype (gnat_temp_type), NULL_TREE, false);
+       }
+ 
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Defining_Program_Unit_Name:
+       /* For a child unit identifier go up a level to get the specification.
+ 	 We get this when we try to find the spec of a child unit package
+ 	 that is the compilation unit being compiled.  */
+       gnu_result = gnat_to_gnu (Parent (gnat_node));
+       break;
+ 
+     case N_Subprogram_Body:
+       Subprogram_Body_to_gnu (gnat_node);
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Function_Call:
+     case N_Procedure_Call_Statement:
+       gnu_result = Call_to_gnu (gnat_node, &gnu_result_type, NULL_TREE,
+ 				NOT_ATOMIC, false);
+       break;
+ 
+     /************************/
+     /* Chapter 7: Packages  */
+     /************************/
+ 
+     case N_Package_Declaration:
+       gnu_result = gnat_to_gnu (Specification (gnat_node));
+       break;
+ 
+     case N_Package_Specification:
+ 
+       start_stmt_group ();
+       process_decls (Visible_Declarations (gnat_node),
+ 		     Private_Declarations (gnat_node), Empty, true, true);
+       gnu_result = end_stmt_group ();
+       break;
+ 
+     case N_Package_Body:
+ 
+       /* If this is the body of a generic package - do nothing.  */
+       if (Ekind (Corresponding_Spec (gnat_node)) == E_Generic_Package)
+ 	{
+ 	  gnu_result = alloc_stmt_list ();
+ 	  break;
+ 	}
+ 
+       start_stmt_group ();
+       process_decls (Declarations (gnat_node), Empty, Empty, true, true);
+ 
+       if (Present (Handled_Statement_Sequence (gnat_node)))
+ 	add_stmt (gnat_to_gnu (Handled_Statement_Sequence (gnat_node)));
+ 
+       gnu_result = end_stmt_group ();
+       break;
+ 
+     /********************************/
+     /* Chapter 8: Visibility Rules  */
+     /********************************/
+ 
+     case N_Use_Package_Clause:
+     case N_Use_Type_Clause:
+       /* Nothing to do here - but these may appear in list of declarations.  */
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     /*********************/
+     /* Chapter 9: Tasks  */
+     /*********************/
+ 
+     case N_Protected_Type_Declaration:
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Single_Task_Declaration:
+       gnat_to_gnu_entity (Defining_Entity (gnat_node), NULL_TREE, true);
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     /*********************************************************/
+     /* Chapter 10: Program Structure and Compilation Issues  */
+     /*********************************************************/
+ 
+     case N_Compilation_Unit:
+       /* This is not called for the main unit on which gigi is invoked.  */
+       Compilation_Unit_to_gnu (gnat_node);
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Subunit:
+       gnu_result = gnat_to_gnu (Proper_Body (gnat_node));
+       break;
+ 
+     case N_Entry_Body:
+     case N_Protected_Body:
+     case N_Task_Body:
+       /* These nodes should only be present when annotating types.  */
+       gcc_assert (type_annotate_only);
+       process_decls (Declarations (gnat_node), Empty, Empty, true, true);
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Subprogram_Body_Stub:
+     case N_Package_Body_Stub:
+     case N_Protected_Body_Stub:
+     case N_Task_Body_Stub:
+       /* Simply process whatever unit is being inserted.  */
+       if (Present (Library_Unit (gnat_node)))
+ 	gnu_result = gnat_to_gnu (Unit (Library_Unit (gnat_node)));
+       else
+ 	{
+ 	  gcc_assert (type_annotate_only);
+ 	  gnu_result = alloc_stmt_list ();
+ 	}
+       break;
+ 
+     /***************************/
+     /* Chapter 11: Exceptions  */
+     /***************************/
+ 
+     case N_Handled_Sequence_Of_Statements:
+       /* If there is an At_End procedure attached to this node, and the EH
+ 	 mechanism is front-end, we must have at least a corresponding At_End
+ 	 handler, unless the No_Exception_Handlers restriction is set.  */
+       gcc_assert (type_annotate_only
+ 		  || !Front_End_Exceptions ()
+ 		  || No (At_End_Proc (gnat_node))
+ 		  || Present (Exception_Handlers (gnat_node))
+ 		  || No_Exception_Handlers_Set ());
+ 
+       gnu_result = Handled_Sequence_Of_Statements_to_gnu (gnat_node);
+       break;
+ 
+     case N_Exception_Handler:
+       if (Back_End_Exceptions ())
+ 	gnu_result = Exception_Handler_to_gnu_gcc (gnat_node);
+       else if (Exception_Mechanism == Front_End_SJLJ)
+ 	gnu_result = Exception_Handler_to_gnu_fe_sjlj (gnat_node);
+       else
+ 	gcc_unreachable ();
+       break;
+ 
+     case N_Raise_Statement:
+       /* Only for reraise in back-end exceptions mode.  */
+       gcc_assert (No (Name (gnat_node)) && Back_End_Exceptions ());
+ 
+       start_stmt_group ();
+ 
+       add_stmt_with_node (build_call_n_expr (reraise_zcx_decl, 1,
+ 					     gnu_incoming_exc_ptr),
+ 			  gnat_node);
+ 
+       gnu_result = end_stmt_group ();
+       break;
+ 
+     case N_Push_Constraint_Error_Label:
+       gnu_constraint_error_label_stack.safe_push (Exception_Label (gnat_node));
+       break;
+ 
+     case N_Push_Storage_Error_Label:
+       gnu_storage_error_label_stack.safe_push (Exception_Label (gnat_node));
+       break;
+ 
+     case N_Push_Program_Error_Label:
+       gnu_program_error_label_stack.safe_push (Exception_Label (gnat_node));
+       break;
+ 
+     case N_Pop_Constraint_Error_Label:
+       gnat_temp = gnu_constraint_error_label_stack.pop ();
+       if (Present (gnat_temp)
+ 	  && !TREE_USED (gnat_to_gnu_entity (gnat_temp, NULL_TREE, false))
+ 	  && No_Exception_Propagation_Active ())
+ 	Warn_If_No_Local_Raise (gnat_temp);
+       break;
+ 
+     case N_Pop_Storage_Error_Label:
+       gnat_temp = gnu_storage_error_label_stack.pop ();
+       if (Present (gnat_temp)
+ 	  && !TREE_USED (gnat_to_gnu_entity (gnat_temp, NULL_TREE, false))
+ 	  && No_Exception_Propagation_Active ())
+ 	Warn_If_No_Local_Raise (gnat_temp);
+       break;
+ 
+     case N_Pop_Program_Error_Label:
+       gnat_temp = gnu_program_error_label_stack.pop ();
+       if (Present (gnat_temp)
+ 	  && !TREE_USED (gnat_to_gnu_entity (gnat_temp, NULL_TREE, false))
+ 	  && No_Exception_Propagation_Active ())
+ 	Warn_If_No_Local_Raise (gnat_temp);
+       break;
+ 
+     /******************************/
+     /* Chapter 12: Generic Units  */
+     /******************************/
+ 
+     case N_Generic_Function_Renaming_Declaration:
+     case N_Generic_Package_Renaming_Declaration:
+     case N_Generic_Procedure_Renaming_Declaration:
+     case N_Generic_Package_Declaration:
+     case N_Generic_Subprogram_Declaration:
+     case N_Package_Instantiation:
+     case N_Procedure_Instantiation:
+     case N_Function_Instantiation:
+       /* These nodes can appear on a declaration list but there is nothing to
+ 	 to be done with them.  */
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     /**************************************************/
+     /* Chapter 13: Representation Clauses and         */
+     /*             Implementation-Dependent Features  */
+     /**************************************************/
+ 
+     case N_Attribute_Definition_Clause:
+       gnu_result = alloc_stmt_list ();
+ 
+       /* The only one we need to deal with is 'Address since, for the others,
+ 	 the front-end puts the information elsewhere.  */
+       if (Get_Attribute_Id (Chars (gnat_node)) != Attr_Address)
+ 	break;
+ 
+       /* And we only deal with 'Address if the object has a Freeze node.  */
+       gnat_temp = Entity (Name (gnat_node));
+       if (Freeze_Node (gnat_temp))
+ 	{
+ 	  tree gnu_address = gnat_to_gnu (Expression (gnat_node)), gnu_temp;
+ 
+ 	  /* Get the value to use as the address and save it as the equivalent
+ 	     for the object; when it is frozen, gnat_to_gnu_entity will do the
+ 	     right thing.  For a subprogram, put the naked address but build a
+ 	     meaningfull expression for an object in case its address is taken
+ 	     before the Freeze node is encountered; this can happen if the type
+ 	     of the object is limited and it is initialized with the result of
+ 	     a function call.  */
+ 	  if (Is_Subprogram (gnat_temp))
+ 	    gnu_temp = gnu_address;
+ 	  else
+ 	    {
+ 	      tree gnu_type = gnat_to_gnu_type (Etype (gnat_temp));
+ 	      /* Drop atomic and volatile qualifiers for the expression.  */
+ 	      gnu_type = TYPE_MAIN_VARIANT (gnu_type);
+ 	      gnu_type
+ 		= build_reference_type_for_mode (gnu_type, ptr_mode, true);
+ 	      gnu_address = convert (gnu_type, gnu_address);
+ 	      gnu_temp
+ 		= build_unary_op (INDIRECT_REF, NULL_TREE, gnu_address);
+ 	    }
+ 
+ 	  save_gnu_tree (gnat_temp, gnu_temp, true);
+ 	}
+       break;
+ 
+     case N_Enumeration_Representation_Clause:
+     case N_Record_Representation_Clause:
+     case N_At_Clause:
+       /* We do nothing with these.  SEM puts the information elsewhere.  */
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Code_Statement:
+       if (!type_annotate_only)
+ 	{
+ 	  tree gnu_template = gnat_to_gnu (Asm_Template (gnat_node));
+ 	  tree gnu_inputs = NULL_TREE, gnu_outputs = NULL_TREE;
+ 	  tree gnu_clobbers = NULL_TREE, tail;
+ 	  bool allows_mem, allows_reg, fake;
+ 	  int ninputs, noutputs, i;
+ 	  const char **oconstraints;
+ 	  const char *constraint;
+ 	  char *clobber;
+ 
+ 	  /* First retrieve the 3 operand lists built by the front-end.  */
+ 	  Setup_Asm_Outputs (gnat_node);
+ 	  while (Present (gnat_temp = Asm_Output_Variable ()))
+ 	    {
+ 	      tree gnu_value = gnat_to_gnu (gnat_temp);
+ 	      tree gnu_constr = build_tree_list (NULL_TREE, gnat_to_gnu
+ 						 (Asm_Output_Constraint ()));
+ 
+ 	      gnu_outputs = tree_cons (gnu_constr, gnu_value, gnu_outputs);
+ 	      Next_Asm_Output ();
+ 	    }
+ 
+ 	  Setup_Asm_Inputs (gnat_node);
+ 	  while (Present (gnat_temp = Asm_Input_Value ()))
+ 	    {
+ 	      tree gnu_value = gnat_to_gnu (gnat_temp);
+ 	      tree gnu_constr = build_tree_list (NULL_TREE, gnat_to_gnu
+ 						 (Asm_Input_Constraint ()));
+ 
+ 	      gnu_inputs = tree_cons (gnu_constr, gnu_value, gnu_inputs);
+ 	      Next_Asm_Input ();
+ 	    }
+ 
+ 	  Clobber_Setup (gnat_node);
+ 	  while ((clobber = (char *) Clobber_Get_Next ()))
+ 	    gnu_clobbers
+ 	      = tree_cons (NULL_TREE,
+ 			   build_string (strlen (clobber) + 1, clobber),
+ 			   gnu_clobbers);
+ 
+ 	  /* Then perform some standard checking and processing on the
+ 	     operands.  In particular, mark them addressable if needed.  */
+ 	  gnu_outputs = nreverse (gnu_outputs);
+ 	  noutputs = list_length (gnu_outputs);
+ 	  gnu_inputs = nreverse (gnu_inputs);
+ 	  ninputs = list_length (gnu_inputs);
+ 	  oconstraints = XALLOCAVEC (const char *, noutputs);
+ 
+ 	  for (i = 0, tail = gnu_outputs; tail; ++i, tail = TREE_CHAIN (tail))
+ 	    {
+ 	      tree output = TREE_VALUE (tail);
+ 	      constraint
+ 		= TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
+ 	      oconstraints[i] = constraint;
+ 
+ 	      if (parse_output_constraint (&constraint, i, ninputs, noutputs,
+ 					   &allows_mem, &allows_reg, &fake))
+ 		{
+ 		  /* If the operand is going to end up in memory,
+ 		     mark it addressable.  Note that we don't test
+ 		     allows_mem like in the input case below; this
+ 		     is modeled on the C front-end.  */
+ 		  if (!allows_reg)
+ 		    {
+ 		      output = remove_conversions (output, false);
+ 		      if (TREE_CODE (output) == CONST_DECL
+ 			  && DECL_CONST_CORRESPONDING_VAR (output))
+ 			output = DECL_CONST_CORRESPONDING_VAR (output);
+ 		      if (!gnat_mark_addressable (output))
+ 			output = error_mark_node;
+ 		    }
+ 		}
+ 	      else
+ 		output = error_mark_node;
+ 
+ 	      TREE_VALUE (tail) = output;
+ 	    }
+ 
+ 	  for (i = 0, tail = gnu_inputs; tail; ++i, tail = TREE_CHAIN (tail))
+ 	    {
+ 	      tree input = TREE_VALUE (tail);
+ 	      constraint
+ 		= TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
+ 
+ 	      if (parse_input_constraint (&constraint, i, ninputs, noutputs,
+ 					  0, oconstraints,
+ 					  &allows_mem, &allows_reg))
+ 		{
+ 		  /* If the operand is going to end up in memory,
+ 		     mark it addressable.  */
+ 		  if (!allows_reg && allows_mem)
+ 		    {
+ 		      input = remove_conversions (input, false);
+ 		      if (TREE_CODE (input) == CONST_DECL
+ 			  && DECL_CONST_CORRESPONDING_VAR (input))
+ 			input = DECL_CONST_CORRESPONDING_VAR (input);
+ 		      if (!gnat_mark_addressable (input))
+ 			input = error_mark_node;
+ 		    }
+ 		}
+ 	      else
+ 		input = error_mark_node;
+ 
+ 	      TREE_VALUE (tail) = input;
+ 	    }
+ 
+ 	  gnu_result = build5 (ASM_EXPR,  void_type_node,
+ 			       gnu_template, gnu_outputs,
+ 			       gnu_inputs, gnu_clobbers, NULL_TREE);
+ 	  ASM_VOLATILE_P (gnu_result) = Is_Asm_Volatile (gnat_node);
+ 	}
+       else
+ 	gnu_result = alloc_stmt_list ();
+ 
+       break;
+ 
+     /****************/
+     /* Added Nodes  */
+     /****************/
+ 
+     /* Markers are created by the ABE mechanism to capture information which
+        is either unavailable of expensive to recompute.  Markers do not have
+        and runtime semantics, and should be ignored.  */
+ 
+     case N_Call_Marker:
+     case N_Variable_Reference_Marker:
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Expression_With_Actions:
+       /* This construct doesn't define a scope so we don't push a binding
+ 	 level around the statement list, but we wrap it in a SAVE_EXPR to
+ 	 protect it from unsharing.  Elaborate the expression as part of the
+ 	 same statement group as the actions so that the type declaration
+ 	 gets inserted there as well.  This ensures that the type elaboration
+ 	 code is issued past the actions computing values on which it might
+ 	 depend.  */
+       start_stmt_group ();
+       add_stmt_list (Actions (gnat_node));
+       gnu_expr = gnat_to_gnu (Expression (gnat_node));
+       gnu_result = end_stmt_group ();
+ 
+       gnu_result = build1 (SAVE_EXPR, void_type_node, gnu_result);
+       TREE_SIDE_EFFECTS (gnu_result) = 1;
+ 
+       gnu_result
+ 	= build_compound_expr (TREE_TYPE (gnu_expr), gnu_result, gnu_expr);
+       gnu_result_type = get_unpadded_type (Etype (gnat_node));
+       break;
+ 
+     case N_Freeze_Entity:
+       start_stmt_group ();
+       process_freeze_entity (gnat_node);
+       process_decls (Actions (gnat_node), Empty, Empty, true, true);
+       gnu_result = end_stmt_group ();
+       break;
+ 
+     case N_Freeze_Generic_Entity:
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Itype_Reference:
+       if (!present_gnu_tree (Itype (gnat_node)))
+ 	process_type (Itype (gnat_node));
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Free_Statement:
+       gnat_temp = Expression (gnat_node);
+ 
+       if (!type_annotate_only)
+ 	{
+ 	  tree gnu_ptr, gnu_ptr_type, gnu_obj_type, gnu_actual_obj_type;
+ 
+ 	  const Entity_Id gnat_desig_type
+ 	    = Designated_Type (Underlying_Type (Etype (gnat_temp)));
+ 
+ 	  /* Make sure the designated type is complete before dereferencing,
+ 	     in case it is a Taft Amendment type.  */
+ 	  (void) gnat_to_gnu_entity (gnat_desig_type, NULL_TREE, false);
+ 
+ 	  gnu_ptr = gnat_to_gnu (gnat_temp);
+ 	  gnu_ptr_type = TREE_TYPE (gnu_ptr);
+ 
+ 	  /* If this is a thin pointer, we must first dereference it to create
+ 	     a fat pointer, then go back below to a thin pointer.  The reason
+ 	     for this is that we need to have a fat pointer someplace in order
+ 	     to properly compute the size.  */
+ 	  if (TYPE_IS_THIN_POINTER_P (TREE_TYPE (gnu_ptr)))
+ 	    gnu_ptr = build_unary_op (ADDR_EXPR, NULL_TREE,
+ 				      build_unary_op (INDIRECT_REF, NULL_TREE,
+ 						      gnu_ptr));
+ 
+ 	  /* If this is a fat pointer, the object must have been allocated with
+ 	     the template in front of the array.  So pass the template address,
+ 	     and get the total size; do it by converting to a thin pointer.  */
+ 	  if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_ptr)))
+ 	    gnu_ptr
+ 	      = convert (build_pointer_type
+ 			 (TYPE_OBJECT_RECORD_TYPE
+ 			  (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (gnu_ptr)))),
+ 			 gnu_ptr);
+ 
+ 	  gnu_obj_type = TREE_TYPE (TREE_TYPE (gnu_ptr));
+ 
+ 	  /* If this is a thin pointer, the object must have been allocated with
+ 	     the template in front of the array.  So pass the template address,
+ 	     and get the total size.  */
+ 	  if (TYPE_IS_THIN_POINTER_P (TREE_TYPE (gnu_ptr)))
+ 	    gnu_ptr
+ 	      = build_binary_op (POINTER_PLUS_EXPR, TREE_TYPE (gnu_ptr),
+ 				 gnu_ptr,
+ 				 fold_build1 (NEGATE_EXPR, sizetype,
+ 					      byte_position
+ 					      (DECL_CHAIN
+ 					       TYPE_FIELDS ((gnu_obj_type)))));
+ 
+ 	  /* If we have a special dynamic constrained subtype on the node, use
+ 	     it to compute the size; otherwise, use the designated subtype.  */
+ 	  if (Present (Actual_Designated_Subtype (gnat_node)))
+ 	    {
+ 	      gnu_actual_obj_type
+ 		= gnat_to_gnu_type (Actual_Designated_Subtype (gnat_node));
+ 
+ 	      if (TYPE_IS_FAT_OR_THIN_POINTER_P (gnu_ptr_type))
+ 		gnu_actual_obj_type
+ 		  = build_unc_object_type_from_ptr (gnu_ptr_type,
+ 						    gnu_actual_obj_type,
+ 						    get_identifier ("DEALLOC"),
+ 						    false);
+ 	    }
+ 	  else
+ 	    gnu_actual_obj_type = gnu_obj_type;
+ 
+ 	  tree gnu_size = TYPE_SIZE_UNIT (gnu_actual_obj_type);
+ 	  gnu_size = SUBSTITUTE_PLACEHOLDER_IN_EXPR (gnu_size, gnu_ptr);
+ 
+ 	  gnu_result
+ 	      = build_call_alloc_dealloc (gnu_ptr, gnu_size, gnu_obj_type,
+ 					  Procedure_To_Call (gnat_node),
+ 					  Storage_Pool (gnat_node),
+ 					  gnat_node);
+ 	}
+       break;
+ 
+     case N_Raise_Constraint_Error:
+     case N_Raise_Program_Error:
+     case N_Raise_Storage_Error:
+       if (type_annotate_only)
+ 	gnu_result = alloc_stmt_list ();
+       else
+ 	gnu_result = Raise_Error_to_gnu (gnat_node, &gnu_result_type);
+       break;
+ 
+     case N_Validate_Unchecked_Conversion:
+       /* The only validation we currently do on an unchecked conversion is
+ 	 that of aliasing assumptions.  */
+       if (flag_strict_aliasing)
+ 	gnat_validate_uc_list.safe_push (gnat_node);
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     case N_Function_Specification:
+     case N_Procedure_Specification:
+     case N_Op_Concat:
+     case N_Component_Association:
+       /* These nodes should only be present when annotating types.  */
+       gcc_assert (type_annotate_only);
+       gnu_result = alloc_stmt_list ();
+       break;
+ 
+     default:
+       /* Other nodes are not supposed to reach here.  */
+       gcc_unreachable ();
+     }
+ 
+   /* If we are in the elaboration procedure, check if we are violating the
+      No_Elaboration_Code restriction by having a non-empty statement.  */
+   if (statement_node_p (gnat_node)
+       && !(TREE_CODE (gnu_result) == STATEMENT_LIST
+ 	   && empty_stmt_list_p (gnu_result))
+       && current_function_decl == get_elaboration_procedure ())
+     Check_Elaboration_Code_Allowed (gnat_node);
+ 
+   /* If we pushed the processing of the elaboration routine, pop it back.  */
+   if (went_into_elab_proc)
+     current_function_decl = NULL_TREE;
+ 
+   /* When not optimizing, turn boolean rvalues B into B != false tests
+      so that we can put the location information of the reference to B on
+      the inequality operator for better debug info.  */
+   if (!optimize
+       && TREE_CODE (gnu_result) != INTEGER_CST
+       && TREE_CODE (gnu_result) != TYPE_DECL
+       && (kind == N_Identifier
+ 	  || kind == N_Expanded_Name
+ 	  || kind == N_Explicit_Dereference
+ 	  || kind == N_Indexed_Component
+ 	  || kind == N_Selected_Component)
+       && TREE_CODE (get_base_type (gnu_result_type)) == BOOLEAN_TYPE
+       && Nkind (Parent (gnat_node)) != N_Attribute_Reference
+       && Nkind (Parent (gnat_node)) != N_Pragma_Argument_Association
+       && Nkind (Parent (gnat_node)) != N_Variant_Part
+       && !lvalue_required_p (gnat_node, gnu_result_type, false, false))
+     {
+       gnu_result
+ 	= build_binary_op (NE_EXPR, gnu_result_type,
+ 			   convert (gnu_result_type, gnu_result),
+ 			   convert (gnu_result_type, boolean_false_node));
+       if (TREE_CODE (gnu_result) != INTEGER_CST)
+ 	set_gnu_expr_location_from_node (gnu_result, gnat_node);
+     }
+ 
+   /* Set the location information on the result if it's not a simple name
+      or something that contains a simple name, for example a tag, because
+      we don"t want all the references to get the location of the first use.
+      Note that we may have no result if we tried to build a CALL_EXPR node
+      to a procedure with no side-effects and optimization is enabled.  */
+   else if (kind != N_Identifier
+ 	   && !(kind == N_Selected_Component
+ 		&& Chars (Selector_Name (gnat_node)) == Name_uTag)
+ 	   && gnu_result
+ 	   && EXPR_P (gnu_result))
+     set_gnu_expr_location_from_node (gnu_result, gnat_node);
+ 
+   /* If we're supposed to return something of void_type, it means we have
+      something we're elaborating for effect, so just return.  */
+   if (TREE_CODE (gnu_result_type) == VOID_TYPE)
+     return gnu_result;
+ 
+   /* If the result is a constant that overflowed, raise Constraint_Error.  */
+   if (TREE_CODE (gnu_result) == INTEGER_CST && TREE_OVERFLOW (gnu_result))
+     {
+       post_error ("??Constraint_Error will be raised at run time", gnat_node);
+       gnu_result
+ 	= build1 (NULL_EXPR, gnu_result_type,
+ 		  build_call_raise (CE_Overflow_Check_Failed, gnat_node,
+ 				    N_Raise_Constraint_Error));
+     }
+ 
+   /* If the result has side-effects and is of an unconstrained type, protect
+      the expression in case it will be referenced multiple times, i.e. for
+      its value and to compute the size of an object.  But do it neither for
+      an object nor a renaming declaration, nor a return statement of a call
+      to a function that returns an unconstrained record type with default
+      discriminant, because there is no size to be computed in these cases
+      and this will create a useless temporary.  We must do this before any
+      conversions.  */
+   if (TREE_SIDE_EFFECTS (gnu_result)
+       && (TREE_CODE (gnu_result_type) == UNCONSTRAINED_ARRAY_TYPE
+ 	  || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_result_type)))
+       && !(TREE_CODE (gnu_result) == CALL_EXPR
+ 	   && type_is_padding_self_referential (TREE_TYPE (gnu_result))
+ 	   && (Nkind (Parent (gnat_node)) == N_Object_Declaration
+ 	       || Nkind (Parent (gnat_node)) == N_Object_Renaming_Declaration
+ 	       || Nkind (Parent (gnat_node)) == N_Simple_Return_Statement)))
+     gnu_result = gnat_protect_expr (gnu_result);
+ 
+   /* Now convert the result to the result type, unless we are in one of the
+      following cases:
+ 
+        1. If this is the LHS of an assignment or an actual parameter of a
+ 	  call, return the result almost unmodified since the RHS will have
+ 	  to be converted to our type in that case, unless the result type
+ 	  has a simpler size or for array types because this size might be
+ 	  changed in-between. Likewise if there is just a no-op unchecked
+ 	  conversion in-between.  Similarly, don't convert integral types
+ 	  that are the operands of an unchecked conversion since we need
+ 	  to ignore those conversions (for 'Valid).
+ 
+        2. If we have a label (which doesn't have any well-defined type), a
+ 	  field or an error, return the result almost unmodified.  Similarly,
+ 	  if the two types are record types with the same name, don't convert.
+ 	  This will be the case when we are converting from a packable version
+ 	  of a type to its original type and we need those conversions to be
+ 	  NOPs in order for assignments into these types to work properly.
+ 
+        3. If the type is void or if we have no result, return error_mark_node
+ 	  to show we have no result.
+ 
+        4. If this is a call to a function that returns with variable size and
+ 	  the call is used as the expression in either an object or a renaming
+ 	  declaration, return the result unmodified because we want to use the
+ 	  return slot optimization in this case.
+ 
+        5. If this is a reference to an unconstrained array which is used as the
+ 	  prefix of an attribute reference that requires an lvalue, return the
+ 	  result unmodified because we want to return the original bounds.
+ 
+        6. Finally, if the type of the result is already correct.  */
+ 
+   if (Present (Parent (gnat_node))
+       && (lhs_or_actual_p (gnat_node)
+ 	  || (Nkind (Parent (gnat_node)) == N_Unchecked_Type_Conversion
+ 	      && unchecked_conversion_nop (Parent (gnat_node)))
+ 	  || (Nkind (Parent (gnat_node)) == N_Unchecked_Type_Conversion
+ 	      && !AGGREGATE_TYPE_P (gnu_result_type)
+ 	      && !AGGREGATE_TYPE_P (TREE_TYPE (gnu_result))))
+       && !(TYPE_SIZE (gnu_result_type)
+ 	   && TYPE_SIZE (TREE_TYPE (gnu_result))
+ 	   && AGGREGATE_TYPE_P (gnu_result_type)
+ 	      == AGGREGATE_TYPE_P (TREE_TYPE (gnu_result))
+ 	   && ((TREE_CODE (TYPE_SIZE (gnu_result_type)) == INTEGER_CST
+ 		&& (TREE_CODE (TYPE_SIZE (TREE_TYPE (gnu_result)))
+ 		    != INTEGER_CST))
+ 	       || (TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST
+ 		   && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_result_type))
+ 		   && (CONTAINS_PLACEHOLDER_P
+ 		       (TYPE_SIZE (TREE_TYPE (gnu_result)))))
+ 	       || (TREE_CODE (gnu_result_type) == ARRAY_TYPE
+ 		   && TREE_CODE (TREE_TYPE (gnu_result)) == ARRAY_TYPE))
+ 	   && !(TREE_CODE (gnu_result_type) == RECORD_TYPE
+ 		&& TYPE_JUSTIFIED_MODULAR_P (gnu_result_type))))
+     {
+       /* Remove padding only if the inner object is of self-referential
+ 	 size: in that case it must be an object of unconstrained type
+ 	 with a default discriminant and we want to avoid copying too
+ 	 much data.  But do not remove it if it is already too small.  */
+       if (type_is_padding_self_referential (TREE_TYPE (gnu_result))
+ 	  && !(TREE_CODE (gnu_result) == COMPONENT_REF
+ 	       && DECL_BIT_FIELD (TREE_OPERAND (gnu_result, 1))
+ 	       && DECL_SIZE (TREE_OPERAND (gnu_result, 1))
+ 		  != TYPE_SIZE (TREE_TYPE (gnu_result))))
+ 	gnu_result = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_result))),
+ 			      gnu_result);
+     }
+ 
+   else if (TREE_CODE (gnu_result) == LABEL_DECL
+ 	   || TREE_CODE (gnu_result) == FIELD_DECL
+ 	   || TREE_CODE (gnu_result) == ERROR_MARK
+ 	   || (TYPE_NAME (gnu_result_type)
+ 	       == TYPE_NAME (TREE_TYPE (gnu_result))
+ 	       && TREE_CODE (gnu_result_type) == RECORD_TYPE
+ 	       && TREE_CODE (TREE_TYPE (gnu_result)) == RECORD_TYPE))
+     {
+       /* Remove any padding.  */
+       gnu_result = maybe_padded_object (gnu_result);
+     }
+ 
+   else if (gnu_result == error_mark_node || gnu_result_type == void_type_node)
+     gnu_result = error_mark_node;
+ 
+   else if (TREE_CODE (gnu_result) == CALL_EXPR
+ 	   && Present (Parent (gnat_node))
+ 	   && (Nkind (Parent (gnat_node)) == N_Object_Declaration
+ 	       || Nkind (Parent (gnat_node)) == N_Object_Renaming_Declaration)
+ 	   && return_type_with_variable_size_p (TREE_TYPE (gnu_result)))
+     ;
+ 
+   else if (TREE_CODE (gnu_result) == UNCONSTRAINED_ARRAY_REF
+ 	   && Present (Parent (gnat_node))
+ 	   && Nkind (Parent (gnat_node)) == N_Attribute_Reference
+ 	   && lvalue_required_for_attribute_p (Parent (gnat_node)))
+     ;
+ 
+   else if (TREE_TYPE (gnu_result) != gnu_result_type)
+     gnu_result = convert (gnu_result_type, gnu_result);
+ 
+   /* We don't need any NOP_EXPR or NON_LVALUE_EXPR on the result.  */
+   while ((TREE_CODE (gnu_result) == NOP_EXPR
+ 	  || TREE_CODE (gnu_result) == NON_LVALUE_EXPR)
+ 	 && TREE_TYPE (TREE_OPERAND (gnu_result, 0)) == TREE_TYPE (gnu_result))
+     gnu_result = TREE_OPERAND (gnu_result, 0);
+ 
+   return gnu_result;
+ }
+ 
+ /* Similar to gnat_to_gnu, but discard any object that might be created in
+    the course of the translation of GNAT_NODE, which must be an "external"
+    expression in the sense that it will be elaborated elsewhere.  */
+ 
+ tree
+ gnat_to_gnu_external (Node_Id gnat_node)
+ {
+   const int save_force_global = force_global;
+   bool went_into_elab_proc;
+ 
+   /* Force the local context and create a fake scope that we zap
+      at the end so declarations will not be stuck either in the
+      global varpool or in the current scope.  */
+   if (!current_function_decl)
+     {
+       current_function_decl = get_elaboration_procedure ();
+       went_into_elab_proc = true;
+     }
+   else
+     went_into_elab_proc = false;
+   force_global = 0;
+   gnat_pushlevel ();
+ 
+   tree gnu_result = gnat_to_gnu (gnat_node);
+ 
+   gnat_zaplevel ();
+   force_global = save_force_global;
+   if (went_into_elab_proc)
+     current_function_decl = NULL_TREE;
+ 
+   /* Do not import locations from external units.  */
+   if (gnu_result && EXPR_P (gnu_result))
+     SET_EXPR_LOCATION (gnu_result, UNKNOWN_LOCATION);
+ 
+   return gnu_result;
+ }
+ 
+ /* Return true if the statement list STMT_LIST is empty.  */
+ 
+ static bool
+ empty_stmt_list_p (tree stmt_list)
+ {
+   tree_stmt_iterator tsi;
+ 
+   for (tsi = tsi_start (stmt_list); !tsi_end_p (tsi); tsi_next (&tsi))
+     {
+       tree stmt = tsi_stmt (tsi);
+ 
+       /* Anything else than an empty STMT_STMT counts as something.  */
+       if (TREE_CODE (stmt) != STMT_STMT || STMT_STMT_STMT (stmt))
+ 	return false;
+     }
+ 
+   return true;
+ }
+ 
+ /* Record the current code position in GNAT_NODE.  */
+ 
+ static void
+ record_code_position (Node_Id gnat_node)
+ {
+   tree stmt_stmt = build1 (STMT_STMT, void_type_node, NULL_TREE);
+ 
+   add_stmt_with_node (stmt_stmt, gnat_node);
+   save_gnu_tree (gnat_node, stmt_stmt, true);
+ }
+ 
+ /* Insert the code for GNAT_NODE at the position saved for that node.  */
+ 
+ static void
+ insert_code_for (Node_Id gnat_node)
+ {
+   tree code = gnat_to_gnu (gnat_node);
+ 
+   /* It's too late to remove the STMT_STMT itself at this point.  */
+   if (!empty_stmt_list_p (code))
+     STMT_STMT_STMT (get_gnu_tree (gnat_node)) = code;
+ 
+   save_gnu_tree (gnat_node, NULL_TREE, true);
+ }
+ 
+ /* Start a new statement group chained to the previous group.  */
+ 
+ void
+ start_stmt_group (void)
+ {
+   struct stmt_group *group = stmt_group_free_list;
+ 
+   /* First see if we can get one from the free list.  */
+   if (group)
+     stmt_group_free_list = group->previous;
+   else
+     group = ggc_alloc<stmt_group> ();
+ 
+   group->previous = current_stmt_group;
+   group->stmt_list = group->block = group->cleanups = NULL_TREE;
+   current_stmt_group = group;
+ }
+ 
+ /* Add GNU_STMT to the current statement group.  If it is an expression with
+    no effects, it is ignored.  */
+ 
+ void
+ add_stmt (tree gnu_stmt)
+ {
+   append_to_statement_list (gnu_stmt, &current_stmt_group->stmt_list);
+ }
+ 
+ /* Similar, but the statement is always added, regardless of side-effects.  */
+ 
+ void
+ add_stmt_force (tree gnu_stmt)
+ {
+   append_to_statement_list_force (gnu_stmt, &current_stmt_group->stmt_list);
+ }
+ 
+ /* Like add_stmt, but set the location of GNU_STMT to that of GNAT_NODE.  */
+ 
+ void
+ add_stmt_with_node (tree gnu_stmt, Node_Id gnat_node)
+ {
+   if (Present (gnat_node))
+     set_expr_location_from_node (gnu_stmt, gnat_node);
+   add_stmt (gnu_stmt);
+ }
+ 
+ /* Similar, but the statement is always added, regardless of side-effects.  */
+ 
+ void
+ add_stmt_with_node_force (tree gnu_stmt, Node_Id gnat_node)
+ {
+   if (Present (gnat_node))
+     set_expr_location_from_node (gnu_stmt, gnat_node);
+   add_stmt_force (gnu_stmt);
+ }
+ 
+ /* Add a declaration statement for GNU_DECL to the current statement group.
+    Get the SLOC to be put onto the statement from GNAT_NODE.  */
+ 
+ void
+ add_decl_expr (tree gnu_decl, Node_Id gnat_node)
+ {
+   tree type = TREE_TYPE (gnu_decl);
+   tree gnu_stmt, gnu_init;
+ 
+   /* If this is a variable that Gigi is to ignore, we may have been given
+      an ERROR_MARK.  So test for it.  We also might have been given a
+      reference for a renaming.  So only do something for a decl.  Also
+      ignore a TYPE_DECL for an UNCONSTRAINED_ARRAY_TYPE.  */
+   if (!DECL_P (gnu_decl)
+       || (TREE_CODE (gnu_decl) == TYPE_DECL
+ 	  && TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE))
+     return;
+ 
+   gnu_stmt = build1 (DECL_EXPR, void_type_node, gnu_decl);
+ 
+   /* If we are external or global, we don't want to output the DECL_EXPR for
+      this DECL node since we already have evaluated the expressions in the
+      sizes and positions as globals and doing it again would be wrong.  */
+   if (DECL_EXTERNAL (gnu_decl) || global_bindings_p ())
+     {
+       /* Mark everything as used to prevent node sharing with subprograms.
+ 	 Note that walk_tree knows how to deal with TYPE_DECL, but neither
+ 	 VAR_DECL nor CONST_DECL.  This appears to be somewhat arbitrary.  */
+       MARK_VISITED (gnu_stmt);
+       if (TREE_CODE (gnu_decl) == VAR_DECL
+ 	  || TREE_CODE (gnu_decl) == CONST_DECL)
+ 	{
+ 	  MARK_VISITED (DECL_SIZE (gnu_decl));
+ 	  MARK_VISITED (DECL_SIZE_UNIT (gnu_decl));
+ 	  MARK_VISITED (DECL_INITIAL (gnu_decl));
+ 	}
+     }
+   else
+     add_stmt_with_node (gnu_stmt, gnat_node);
+ 
+   /* Mark our TYPE_ADA_SIZE field now since it will not be gimplified.  */
+   if (TREE_CODE (gnu_decl) == TYPE_DECL
+       && RECORD_OR_UNION_TYPE_P (type)
+       && !TYPE_FAT_POINTER_P (type))
+     MARK_VISITED (TYPE_ADA_SIZE (type));
+ 
+   /* If this is a variable and an initializer is attached to it, it must be
+      valid for the context.  Similar to init_const in create_var_decl.  */
+   if (TREE_CODE (gnu_decl) == VAR_DECL
+       && (gnu_init = DECL_INITIAL (gnu_decl))
+       && (!gnat_types_compatible_p (type, TREE_TYPE (gnu_init))
+ 	  || (TREE_STATIC (gnu_decl)
+ 	      && !initializer_constant_valid_p (gnu_init,
+ 						TREE_TYPE (gnu_init)))))
+     {
+       DECL_INITIAL (gnu_decl) = NULL_TREE;
+       if (TREE_READONLY (gnu_decl))
+ 	{
+ 	  TREE_READONLY (gnu_decl) = 0;
+ 	  DECL_READONLY_ONCE_ELAB (gnu_decl) = 1;
+ 	}
+ 
+       /* Remove any padding so the assignment is done properly.  */
+       gnu_decl = maybe_padded_object (gnu_decl);
+ 
+       gnu_stmt = build_binary_op (INIT_EXPR, NULL_TREE, gnu_decl, gnu_init);
+       add_stmt_with_node (gnu_stmt, gnat_node);
+     }
+ }
+ 
+ /* Callback for walk_tree to mark the visited trees rooted at *TP.  */
+ 
+ static tree
+ mark_visited_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
+ {
+   tree t = *tp;
+ 
+   if (TREE_VISITED (t))
+     *walk_subtrees = 0;
+ 
+   /* Don't mark a dummy type as visited because we want to mark its sizes
+      and fields once it's filled in.  */
+   else if (!TYPE_IS_DUMMY_P (t))
+     TREE_VISITED (t) = 1;
+ 
+   /* The test in gimplify_type_sizes is on the main variant.  */
+   if (TYPE_P (t))
+     TYPE_SIZES_GIMPLIFIED (TYPE_MAIN_VARIANT (t)) = 1;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Mark nodes rooted at T with TREE_VISITED and types as having their
+    sized gimplified.  We use this to indicate all variable sizes and
+    positions in global types may not be shared by any subprogram.  */
+ 
+ void
+ mark_visited (tree t)
+ {
+   walk_tree (&t, mark_visited_r, NULL, NULL);
+ }
+ 
+ /* Add GNU_CLEANUP, a cleanup action, to the current code group and
+    set its location to that of GNAT_NODE if present, but with column info
+    cleared so that conditional branches generated as part of the cleanup
+    code do not interfere with coverage analysis tools.  */
+ 
+ static void
+ add_cleanup (tree gnu_cleanup, Node_Id gnat_node)
+ {
+   if (Present (gnat_node))
+     set_expr_location_from_node (gnu_cleanup, gnat_node, true);
+ 
+   /* An EH_ELSE_EXPR must be by itself, and that's all we need when we
+      use it.  The assert below makes sure that is so.  Should we ever
+      need more than that, we could combine EH_ELSE_EXPRs, and copy
+      non-EH_ELSE_EXPR stmts into both cleanup paths of an
+      EH_ELSE_EXPR.  */
+   if (TREE_CODE (gnu_cleanup) == EH_ELSE_EXPR)
+     {
+       gcc_assert (!current_stmt_group->cleanups);
+       current_stmt_group->cleanups = gnu_cleanup;
+     }
+   else
+     {
+       gcc_assert (!current_stmt_group->cleanups
+ 		  || (TREE_CODE (current_stmt_group->cleanups)
+ 		      != EH_ELSE_EXPR));
+       append_to_statement_list (gnu_cleanup, &current_stmt_group->cleanups);
+     }
+ }
+ 
+ /* Set the BLOCK node corresponding to the current code group to GNU_BLOCK.  */
+ 
+ void
+ set_block_for_group (tree gnu_block)
+ {
+   gcc_assert (!current_stmt_group->block);
+   current_stmt_group->block = gnu_block;
+ }
+ 
+ /* Return code corresponding to the current code group.  It is normally
+    a STATEMENT_LIST, but may also be a BIND_EXPR or TRY_FINALLY_EXPR if
+    BLOCK or cleanups were set.  */
+ 
+ tree
+ end_stmt_group (void)
+ {
+   struct stmt_group *group = current_stmt_group;
+   tree gnu_retval = group->stmt_list;
+ 
+   /* If this is a null list, allocate a new STATEMENT_LIST.  Then, if there
+      are cleanups, make a TRY_FINALLY_EXPR.  Last, if there is a BLOCK,
+      make a BIND_EXPR.  Note that we nest in that because the cleanup may
+      reference variables in the block.  */
+   if (!gnu_retval)
+     gnu_retval = alloc_stmt_list ();
+ 
+   if (group->cleanups)
+     gnu_retval = build2 (TRY_FINALLY_EXPR, void_type_node, gnu_retval,
+ 			 group->cleanups);
+ 
+   if (current_stmt_group->block)
+     gnu_retval = build3 (BIND_EXPR, void_type_node, BLOCK_VARS (group->block),
+ 			 gnu_retval, group->block);
+ 
+   /* Remove this group from the stack and add it to the free list.  */
+   current_stmt_group = group->previous;
+   group->previous = stmt_group_free_list;
+   stmt_group_free_list = group;
+ 
+   return gnu_retval;
+ }
+ 
+ /* Return whether the current statement group may fall through.  */
+ 
+ static inline bool
+ stmt_group_may_fallthru (void)
+ {
+   if (current_stmt_group->stmt_list)
+     return block_may_fallthru (current_stmt_group->stmt_list);
+   else
+     return true;
+ }
+ 
+ /* Add a list of statements from GNAT_LIST, a possibly-empty list of
+    statements.*/
+ 
+ static void
+ add_stmt_list (List_Id gnat_list)
+ {
+   Node_Id gnat_node;
+ 
+   if (Present (gnat_list))
+     for (gnat_node = First (gnat_list); Present (gnat_node);
+ 	 gnat_node = Next (gnat_node))
+       add_stmt (gnat_to_gnu (gnat_node));
+ }
+ 
+ /* Build a tree from GNAT_LIST, a possibly-empty list of statements.
+    If BINDING_P is true, push and pop a binding level around the list.  */
+ 
+ static tree
+ build_stmt_group (List_Id gnat_list, bool binding_p)
+ {
+   start_stmt_group ();
+ 
+   if (binding_p)
+     gnat_pushlevel ();
+ 
+   add_stmt_list (gnat_list);
+ 
+   if (binding_p)
+     gnat_poplevel ();
+ 
+   return end_stmt_group ();
+ }
+ 
+ /* Generate GIMPLE in place for the expression at *EXPR_P.  */
+ 
+ int
+ gnat_gimplify_expr (tree *expr_p, gimple_seq *pre_p,
+ 		    gimple_seq *post_p ATTRIBUTE_UNUSED)
+ {
+   tree expr = *expr_p;
+   tree type = TREE_TYPE (expr);
+   tree op;
+ 
+   if (IS_ADA_STMT (expr))
+     return gnat_gimplify_stmt (expr_p);
+ 
+   switch (TREE_CODE (expr))
+     {
+     case NULL_EXPR:
+       /* If this is an aggregate type, build a null pointer of the appropriate
+ 	 type and dereference it.  */
+       if (AGGREGATE_TYPE_P (type)
+ 	  || TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE)
+ 	*expr_p = build_unary_op (INDIRECT_REF, NULL_TREE,
+ 				  convert (build_pointer_type (type),
+ 					   integer_zero_node));
+       /* Otherwise, just make a VAR_DECL.  */
+       else
+ 	{
+ 	  *expr_p = create_tmp_var (type, NULL);
+ 	  suppress_warning (*expr_p);
+ 	}
+ 
+       gimplify_and_add (TREE_OPERAND (expr, 0), pre_p);
+       return GS_OK;
+ 
+     case UNCONSTRAINED_ARRAY_REF:
+       /* We should only do this if we are just elaborating for side-effects,
+ 	 but we can't know that yet.  */
+       *expr_p = TREE_OPERAND (*expr_p, 0);
+       return GS_OK;
+ 
+     case ADDR_EXPR:
+       op = TREE_OPERAND (expr, 0);
+ 
+       /* If we are taking the address of a constant CONSTRUCTOR, make sure it
+ 	 is put into static memory.  We know that it's going to be read-only
+ 	 given the semantics we have and it must be in static memory when the
+ 	 reference is in an elaboration procedure.  */
+       if (TREE_CODE (op) == CONSTRUCTOR && TREE_CONSTANT (op))
+ 	{
+ 	  tree addr = build_fold_addr_expr (tree_output_constant_def (op));
+ 	  *expr_p = fold_convert (type, addr);
+ 	  return GS_ALL_DONE;
+ 	}
+ 
+       /* Replace atomic loads with their first argument.  That's necessary
+ 	 because the gimplifier would create a temporary otherwise.  */
+       if (TREE_SIDE_EFFECTS (op))
+ 	while (handled_component_p (op) || CONVERT_EXPR_P (op))
+ 	  {
+ 	    tree inner = TREE_OPERAND (op, 0);
+ 	    if (TREE_CODE (inner) == CALL_EXPR && call_is_atomic_load (inner))
+ 	      {
+ 		tree t = CALL_EXPR_ARG (inner, 0);
+ 		if (TREE_CODE (t) == NOP_EXPR)
+ 		  t = TREE_OPERAND (t, 0);
+ 		if (TREE_CODE (t) == ADDR_EXPR)
+ 		  TREE_OPERAND (op, 0) = TREE_OPERAND (t, 0);
+ 		else
+ 		  TREE_OPERAND (op, 0) = build_fold_indirect_ref (t);
+ 	      }
+ 	    else
+ 	      op = inner;
+ 	  }
+ 
+       return GS_UNHANDLED;
+ 
+     case CALL_EXPR:
+       /* If we are passing a constant fat pointer CONSTRUCTOR, make sure it is
+ 	 put into static memory; this performs a restricted version of constant
+ 	 propagation on fat pointers in calls.  But do not do it for strings to
+ 	 avoid blocking concatenation in the caller when it is inlined.  */
+       for (int i = 0; i < call_expr_nargs (expr); i++)
+ 	{
+ 	  tree arg = *(CALL_EXPR_ARGP (expr) + i);
+ 
+ 	  if (TREE_CODE (arg) == CONSTRUCTOR
+ 	      && TREE_CONSTANT (arg)
+ 	      && TYPE_IS_FAT_POINTER_P (TREE_TYPE (arg)))
+ 	    {
+ 	      tree t = CONSTRUCTOR_ELT (arg, 0)->value;
+ 	      if (TREE_CODE (t) == NOP_EXPR)
+ 		t = TREE_OPERAND (t, 0);
+ 	      if (TREE_CODE (t) == ADDR_EXPR)
+ 		t = TREE_OPERAND (t, 0);
+ 	      if (TREE_CODE (t) != STRING_CST)
+ 		*(CALL_EXPR_ARGP (expr) + i) = tree_output_constant_def (arg);
+ 	    }
+ 	}
+ 
+       return GS_UNHANDLED;
+ 
+     case VIEW_CONVERT_EXPR:
+       op = TREE_OPERAND (expr, 0);
+ 
+       /* If we are view-converting a CONSTRUCTOR or a call from an aggregate
+ 	 type to a scalar one, explicitly create the local temporary.  That's
+ 	 required if the type is passed by reference.  */
+       if ((TREE_CODE (op) == CONSTRUCTOR || TREE_CODE (op) == CALL_EXPR)
+ 	  && AGGREGATE_TYPE_P (TREE_TYPE (op))
+ 	  && !AGGREGATE_TYPE_P (type))
+ 	{
+ 	  tree mod, new_var = create_tmp_var_raw (TREE_TYPE (op), "C");
+ 	  gimple_add_tmp_var (new_var);
+ 
+ 	  mod = build2 (INIT_EXPR, TREE_TYPE (new_var), new_var, op);
+ 	  gimplify_and_add (mod, pre_p);
+ 
+ 	  TREE_OPERAND (expr, 0) = new_var;
+ 	  return GS_OK;
+ 	}
+ 
+       return GS_UNHANDLED;
+ 
+     case DECL_EXPR:
+       op = DECL_EXPR_DECL (expr);
+ 
+       /* The expressions for the RM bounds must be gimplified to ensure that
+ 	 they are properly elaborated.  See gimplify_decl_expr.  */
+       if ((TREE_CODE (op) == TYPE_DECL || TREE_CODE (op) == VAR_DECL)
+ 	  && !TYPE_SIZES_GIMPLIFIED (TREE_TYPE (op)))
+ 	switch (TREE_CODE (TREE_TYPE (op)))
+ 	  {
+ 	  case INTEGER_TYPE:
+ 	  case ENUMERAL_TYPE:
+ 	  case BOOLEAN_TYPE:
+ 	  case REAL_TYPE:
+ 	    {
+ 	      tree type = TYPE_MAIN_VARIANT (TREE_TYPE (op)), t, val;
+ 
+ 	      val = TYPE_RM_MIN_VALUE (type);
+ 	      if (val)
+ 		{
+ 		  gimplify_one_sizepos (&val, pre_p);
+ 		  for (t = type; t; t = TYPE_NEXT_VARIANT (t))
+ 		    SET_TYPE_RM_MIN_VALUE (t, val);
+ 		}
+ 
+ 	      val = TYPE_RM_MAX_VALUE (type);
+ 	      if (val)
+ 		{
+ 		  gimplify_one_sizepos (&val, pre_p);
+ 		  for (t = type; t; t = TYPE_NEXT_VARIANT (t))
+ 		    SET_TYPE_RM_MAX_VALUE (t, val);
+ 		}
+ 
+ 	    }
+ 	    break;
+ 
+ 	  default:
+ 	    break;
+ 	  }
+ 
+       /* ... fall through ... */
+ 
+     default:
+       return GS_UNHANDLED;
+     }
+ }
+ 
+ /* Generate GIMPLE in place for the statement at *STMT_P.  */
+ 
+ static enum gimplify_status
+ gnat_gimplify_stmt (tree *stmt_p)
+ {
+   tree stmt = *stmt_p;
+ 
+   switch (TREE_CODE (stmt))
+     {
+     case STMT_STMT:
+       *stmt_p = STMT_STMT_STMT (stmt);
+       return GS_OK;
+ 
+     case LOOP_STMT:
+       {
+ 	tree gnu_start_label = create_artificial_label (input_location);
+ 	tree gnu_cond = LOOP_STMT_COND (stmt);
+ 	tree gnu_update = LOOP_STMT_UPDATE (stmt);
+ 	tree gnu_end_label = LOOP_STMT_LABEL (stmt);
+ 
+ 	/* Build the condition expression from the test, if any.  */
+ 	if (gnu_cond)
+ 	  {
+ 	    /* Deal with the optimization hints.  */
+ 	    if (LOOP_STMT_IVDEP (stmt))
+ 	      gnu_cond = build3 (ANNOTATE_EXPR, TREE_TYPE (gnu_cond), gnu_cond,
+ 				 build_int_cst (integer_type_node,
+ 						annot_expr_ivdep_kind),
+ 				 integer_zero_node);
+ 	    if (LOOP_STMT_NO_UNROLL (stmt))
+ 	      gnu_cond = build3 (ANNOTATE_EXPR, TREE_TYPE (gnu_cond), gnu_cond,
+ 				 build_int_cst (integer_type_node,
+ 						annot_expr_unroll_kind),
+ 				 integer_one_node);
+ 	    if (LOOP_STMT_UNROLL (stmt))
+ 	      gnu_cond = build3 (ANNOTATE_EXPR, TREE_TYPE (gnu_cond), gnu_cond,
+ 				 build_int_cst (integer_type_node,
+ 						annot_expr_unroll_kind),
+ 				 build_int_cst (NULL_TREE, USHRT_MAX));
+ 	    if (LOOP_STMT_NO_VECTOR (stmt))
+ 	      gnu_cond = build3 (ANNOTATE_EXPR, TREE_TYPE (gnu_cond), gnu_cond,
+ 				 build_int_cst (integer_type_node,
+ 						annot_expr_no_vector_kind),
+ 				 integer_zero_node);
+ 	    if (LOOP_STMT_VECTOR (stmt))
+ 	      gnu_cond = build3 (ANNOTATE_EXPR, TREE_TYPE (gnu_cond), gnu_cond,
+ 				 build_int_cst (integer_type_node,
+ 						annot_expr_vector_kind),
+ 				 integer_zero_node);
+ 
+ 	    gnu_cond
+ 	      = build3 (COND_EXPR, void_type_node, gnu_cond, NULL_TREE,
+ 			build1 (GOTO_EXPR, void_type_node, gnu_end_label));
+ 	  }
+ 
+ 	/* Set to emit the statements of the loop.  */
+ 	*stmt_p = NULL_TREE;
+ 
+ 	/* We first emit the start label and then a conditional jump to the
+ 	   end label if there's a top condition, then the update if it's at
+ 	   the top, then the body of the loop, then a conditional jump to
+ 	   the end label if there's a bottom condition, then the update if
+ 	   it's at the bottom, and finally a jump to the start label and the
+ 	   definition of the end label.  */
+ 	append_to_statement_list (build1 (LABEL_EXPR, void_type_node,
+ 					  gnu_start_label),
+ 				  stmt_p);
+ 
+         if (gnu_cond && !LOOP_STMT_BOTTOM_COND_P (stmt))
+ 	  append_to_statement_list (gnu_cond, stmt_p);
+ 
+         if (gnu_update && LOOP_STMT_TOP_UPDATE_P (stmt))
+ 	  append_to_statement_list (gnu_update, stmt_p);
+ 
+ 	append_to_statement_list (LOOP_STMT_BODY (stmt), stmt_p);
+ 
+         if (gnu_cond && LOOP_STMT_BOTTOM_COND_P (stmt))
+ 	  append_to_statement_list (gnu_cond, stmt_p);
+ 
+         if (gnu_update && !LOOP_STMT_TOP_UPDATE_P (stmt))
+ 	  append_to_statement_list (gnu_update, stmt_p);
+ 
+ 	tree t = build1 (GOTO_EXPR, void_type_node, gnu_start_label);
+ 	SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (gnu_end_label));
+ 	append_to_statement_list (t, stmt_p);
+ 
+ 	append_to_statement_list (build1 (LABEL_EXPR, void_type_node,
+ 					  gnu_end_label),
+ 				  stmt_p);
+ 	return GS_OK;
+       }
+ 
+     case EXIT_STMT:
+       /* Build a statement to jump to the corresponding end label, then
+ 	 see if it needs to be conditional.  */
+       *stmt_p = build1 (GOTO_EXPR, void_type_node, EXIT_STMT_LABEL (stmt));
+       if (EXIT_STMT_COND (stmt))
+ 	*stmt_p = build3 (COND_EXPR, void_type_node,
+ 			  EXIT_STMT_COND (stmt), *stmt_p, alloc_stmt_list ());
+       return GS_OK;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ }
+ 
+ /* Force a reference to each of the entities in GNAT_PACKAGE recursively.
+ 
+    This routine is exclusively called in type_annotate mode, to compute DDA
+    information for types in withed units, for ASIS use.  */
+ 
+ static void
+ elaborate_all_entities_for_package (Entity_Id gnat_package)
+ {
+   Entity_Id gnat_entity;
+ 
+   for (gnat_entity = First_Entity (gnat_package);
+        Present (gnat_entity);
+        gnat_entity = Next_Entity (gnat_entity))
+     {
+       const Entity_Kind kind = Ekind (gnat_entity);
+ 
+       /* We are interested only in entities visible from the main unit.  */
+       if (!Is_Public (gnat_entity))
+ 	continue;
+ 
+       /* Skip stuff internal to the compiler.  */
+       if (Is_Intrinsic_Subprogram (gnat_entity))
+ 	continue;
+       if (kind == E_Operator)
+ 	continue;
+       if (IN (kind, Subprogram_Kind)
+ 	  && (Present (Alias (gnat_entity))
+ 	      || Is_Intrinsic_Subprogram (gnat_entity)))
+ 	continue;
+       if (Is_Itype (gnat_entity))
+ 	continue;
+ 
+       /* Skip named numbers.  */
+       if (IN (kind, Named_Kind))
+ 	continue;
+ 
+       /* Skip generic declarations.  */
+       if (IN (kind, Generic_Unit_Kind))
+ 	continue;
+ 
+       /* Skip formal objects.  */
+       if (IN (kind, Formal_Object_Kind))
+ 	continue;
+ 
+       /* Skip package bodies.  */
+       if (kind == E_Package_Body)
+ 	continue;
+ 
+       /* Skip limited views that point back to the main unit.  */
+       if (IN (kind, Incomplete_Kind)
+ 	  && From_Limited_With (gnat_entity)
+ 	  && In_Extended_Main_Code_Unit (Non_Limited_View (gnat_entity)))
+ 	continue;
+ 
+       /* Skip types that aren't frozen.  */
+       if (IN (kind, Type_Kind) && !Is_Frozen (gnat_entity))
+ 	continue;
+ 
+       /* Recurse on real packages that aren't in the main unit.  */
+       if (kind == E_Package)
+ 	{
+ 	  if (No (Renamed_Entity (gnat_entity))
+ 	      && !In_Extended_Main_Code_Unit (gnat_entity))
+ 	    elaborate_all_entities_for_package (gnat_entity);
+ 	}
+       else
+ 	gnat_to_gnu_entity (gnat_entity, NULL_TREE, false);
+     }
+ }
+ 
+ /* Force a reference to each of the entities in packages withed by GNAT_NODE.
+    Operate recursively but check that we aren't elaborating something more
+    than once.
+ 
+    This routine is exclusively called in type_annotate mode, to compute DDA
+    information for types in withed units, for ASIS use.  */
+ 
+ static void
+ elaborate_all_entities (Node_Id gnat_node)
+ {
+   Entity_Id gnat_with_clause;
+ 
+   /* Process each unit only once.  As we trace the context of all relevant
+      units transitively, including generic bodies, we may encounter the
+      same generic unit repeatedly.  */
+   if (!present_gnu_tree (gnat_node))
+      save_gnu_tree (gnat_node, integer_zero_node, true);
+ 
+   /* Save entities in all context units.  A body may have an implicit_with
+      on its own spec, if the context includes a child unit, so don't save
+      the spec twice.  */
+   for (gnat_with_clause = First (Context_Items (gnat_node));
+        Present (gnat_with_clause);
+        gnat_with_clause = Next (gnat_with_clause))
+     if (Nkind (gnat_with_clause) == N_With_Clause
+ 	&& !present_gnu_tree (Library_Unit (gnat_with_clause))
+ 	&& Library_Unit (gnat_with_clause) != Library_Unit (Cunit (Main_Unit)))
+       {
+ 	Node_Id gnat_unit = Library_Unit (gnat_with_clause);
+ 	Entity_Id gnat_entity = Entity (Name (gnat_with_clause));
+ 
+ 	elaborate_all_entities (gnat_unit);
+ 
+ 	if (Ekind (gnat_entity) == E_Package
+ 	    && No (Renamed_Entity (gnat_entity)))
+ 	  elaborate_all_entities_for_package (gnat_entity);
+ 
+ 	else if (Ekind (gnat_entity) == E_Generic_Package)
+ 	  {
+ 	    Node_Id gnat_body = Corresponding_Body (Unit (gnat_unit));
+ 
+ 	    /* Retrieve compilation unit node of generic body.  */
+ 	    while (Present (gnat_body)
+ 		   && Nkind (gnat_body) != N_Compilation_Unit)
+ 	      gnat_body = Parent (gnat_body);
+ 
+ 	    /* If body is available, elaborate its context.  */
+ 	    if (Present (gnat_body))
+ 	      elaborate_all_entities (gnat_body);
+ 	  }
+       }
+ 
+   if (Nkind (Unit (gnat_node)) == N_Package_Body)
+     elaborate_all_entities (Library_Unit (gnat_node));
+ }
+ 
+ /* Do the processing of GNAT_NODE, an N_Freeze_Entity.  */
+ 
+ static void
+ process_freeze_entity (Node_Id gnat_node)
+ {
+   const Entity_Id gnat_entity = Entity (gnat_node);
+   const Entity_Kind kind = Ekind (gnat_entity);
+   tree gnu_old, gnu_new;
+ 
+   /* If this is a package, generate code for the package body, if any.  */
+   if (kind == E_Package)
+     {
+       const Node_Id gnat_decl = Parent (Declaration_Node (gnat_entity));
+       if (Present (Corresponding_Body (gnat_decl)))
+ 	insert_code_for (Parent (Corresponding_Body (gnat_decl)));
+       return;
+     }
+ 
+   /* Don't do anything for class-wide types as they are always transformed
+      into their root type.  */
+   if (kind == E_Class_Wide_Type)
+     return;
+ 
+   /* Check for an old definition if this isn't an object with address clause,
+      since the saved GCC tree is the address expression in that case.  */
+   gnu_old
+     = present_gnu_tree (gnat_entity) && No (Address_Clause (gnat_entity))
+       ? get_gnu_tree (gnat_entity) : NULL_TREE;
+ 
+   /* Don't do anything for subprograms that may have been elaborated before
+      their freeze nodes.  This can happen, for example, because of an inner
+      call in an instance body or because of previous compilation of a spec
+      for inlining purposes.  */
+   if (gnu_old
+       && ((TREE_CODE (gnu_old) == FUNCTION_DECL
+ 	   && (kind == E_Function || kind == E_Procedure))
+ 	  || (FUNC_OR_METHOD_TYPE_P (TREE_TYPE (gnu_old))
+ 	      && kind == E_Subprogram_Type)))
+     return;
+ 
+   /* If we have a non-dummy type old tree, we have nothing to do, except for
+      aborting, since this node was never delayed as it should have been.  We
+      let this happen for concurrent types and their Corresponding_Record_Type,
+      however, because each might legitimately be elaborated before its own
+      freeze node, e.g. while processing the other.  */
+   if (gnu_old
+       && !(TREE_CODE (gnu_old) == TYPE_DECL
+ 	   && TYPE_IS_DUMMY_P (TREE_TYPE (gnu_old))))
+     {
+       gcc_assert (Is_Concurrent_Type (gnat_entity)
+ 		  || (Is_Record_Type (gnat_entity)
+ 		      && Is_Concurrent_Record_Type (gnat_entity)));
+       return;
+     }
+ 
+   /* Reset the saved tree, if any, and elaborate the object or type for real.
+      If there is a full view, elaborate it and use the result.  And, if this
+      is the root type of a class-wide type, reuse it for the latter.  */
+   if (gnu_old)
+     {
+       save_gnu_tree (gnat_entity, NULL_TREE, false);
+ 
+       if (Is_Incomplete_Or_Private_Type (gnat_entity)
+ 	  && Present (Full_View (gnat_entity)))
+ 	{
+ 	  Entity_Id full_view = Full_View (gnat_entity);
+ 
+ 	  save_gnu_tree (full_view, NULL_TREE, false);
+ 
+           if (Is_Private_Type (full_view)
+ 	      && Present (Underlying_Full_View (full_view)))
+ 	    {
+ 	      full_view = Underlying_Full_View (full_view);
+ 	      save_gnu_tree (full_view, NULL_TREE, false);
+ 	    }
+ 	}
+ 
+       if (Is_Type (gnat_entity)
+ 	  && Present (Class_Wide_Type (gnat_entity))
+ 	  && Root_Type (Class_Wide_Type (gnat_entity)) == gnat_entity)
+ 	save_gnu_tree (Class_Wide_Type (gnat_entity), NULL_TREE, false);
+     }
+ 
+   if (Is_Incomplete_Or_Private_Type (gnat_entity)
+       && Present (Full_View (gnat_entity)))
+     {
+       Entity_Id full_view = Full_View (gnat_entity);
+ 
+       if (Is_Private_Type (full_view)
+ 	  && Present (Underlying_Full_View (full_view)))
+ 	full_view = Underlying_Full_View (full_view);
+ 
+       gnu_new = gnat_to_gnu_entity (full_view, NULL_TREE, true);
+ 
+       /* Propagate back-annotations from full view to partial view.  */
+       if (!Known_Alignment (gnat_entity))
+ 	Copy_Alignment (gnat_entity, full_view);
+ 
+       if (!Known_Esize (gnat_entity))
+ 	Copy_Esize (gnat_entity, full_view);
+ 
+       if (!Known_RM_Size (gnat_entity))
+ 	Copy_RM_Size (gnat_entity, full_view);
+ 
+       /* The above call may have defined this entity (the simplest example
+ 	 of this is when we have a private enumeral type since the bounds
+ 	 will have the public view).  */
+       if (!present_gnu_tree (gnat_entity))
+ 	save_gnu_tree (gnat_entity, gnu_new, false);
+     }
+   else
+     {
+       tree gnu_init
+ 	= (Nkind (Declaration_Node (gnat_entity)) == N_Object_Declaration
+ 	   && present_gnu_tree (Declaration_Node (gnat_entity)))
+ 	  ? get_gnu_tree (Declaration_Node (gnat_entity)) : NULL_TREE;
+ 
+       gnu_new = gnat_to_gnu_entity (gnat_entity, gnu_init, true);
+     }
+ 
+   if (Is_Type (gnat_entity)
+       && Present (Class_Wide_Type (gnat_entity))
+       && Root_Type (Class_Wide_Type (gnat_entity)) == gnat_entity)
+     save_gnu_tree (Class_Wide_Type (gnat_entity), gnu_new, false);
+ 
+   /* If we have an old type and we've made pointers to this type, update those
+      pointers.  If this is a Taft amendment type in the main unit, we need to
+      mark the type as used since other units referencing it don't see the full
+      declaration and, therefore, cannot mark it as used themselves.  */
+   if (gnu_old)
+     {
+       update_pointer_to (TYPE_MAIN_VARIANT (TREE_TYPE (gnu_old)),
+ 			 TREE_TYPE (gnu_new));
+       if (TYPE_DUMMY_IN_PROFILE_P (TREE_TYPE (gnu_old)))
+ 	update_profiles_with (TREE_TYPE (gnu_old));
+       if (DECL_TAFT_TYPE_P (gnu_old))
+ 	used_types_insert (TREE_TYPE (gnu_new));
+     }
+ }
+ 
+ /* Elaborate decls in the lists GNAT_DECLS and GNAT_DECLS2, if present.
+    We make two passes, one to elaborate anything other than bodies (but
+    we declare a function if there was no spec).  The second pass
+    elaborates the bodies.
+ 
+    GNAT_END_LIST gives the element in the list past the end.  Normally,
+    this is Empty, but can be First_Real_Statement for a
+    Handled_Sequence_Of_Statements.
+ 
+    We make a complete pass through both lists if PASS1P is true, then make
+    the second pass over both lists if PASS2P is true.  The lists usually
+    correspond to the public and private parts of a package.  */
+ 
+ static void
+ process_decls (List_Id gnat_decls, List_Id gnat_decls2,
+ 	       Node_Id gnat_end_list, bool pass1p, bool pass2p)
+ {
+   List_Id gnat_decl_array[2];
+   Node_Id gnat_decl;
+   int i;
+ 
+   gnat_decl_array[0] = gnat_decls, gnat_decl_array[1] = gnat_decls2;
+ 
+   if (pass1p)
+     for (i = 0; i <= 1; i++)
+       if (Present (gnat_decl_array[i]))
+ 	for (gnat_decl = First (gnat_decl_array[i]);
+ 	     gnat_decl != gnat_end_list; gnat_decl = Next (gnat_decl))
+ 	  {
+ 	    /* For package specs, we recurse inside the declarations,
+ 	       thus taking the two pass approach inside the boundary.  */
+ 	    if (Nkind (gnat_decl) == N_Package_Declaration
+ 		&& (Nkind (Specification (gnat_decl)
+ 			   == N_Package_Specification)))
+ 	      process_decls (Visible_Declarations (Specification (gnat_decl)),
+ 			     Private_Declarations (Specification (gnat_decl)),
+ 			     Empty, true, false);
+ 
+ 	    /* Similarly for any declarations in the actions of a
+ 	       freeze node.  */
+ 	    else if (Nkind (gnat_decl) == N_Freeze_Entity)
+ 	      {
+ 		process_freeze_entity (gnat_decl);
+ 		process_decls (Actions (gnat_decl), Empty, Empty, true, false);
+ 	      }
+ 
+ 	    /* Package bodies with freeze nodes get their elaboration deferred
+ 	       until the freeze node, but the code must be placed in the right
+ 	       place, so record the code position now.  */
+ 	    else if (Nkind (gnat_decl) == N_Package_Body
+ 		     && Present (Freeze_Node (Corresponding_Spec (gnat_decl))))
+ 	      record_code_position (gnat_decl);
+ 
+ 	    else if (Nkind (gnat_decl) == N_Package_Body_Stub
+ 		     && Present (Library_Unit (gnat_decl))
+ 		     && Present (Freeze_Node
+ 				 (Corresponding_Spec
+ 				  (Proper_Body (Unit
+ 						(Library_Unit (gnat_decl)))))))
+ 	      record_code_position
+ 		(Proper_Body (Unit (Library_Unit (gnat_decl))));
+ 
+ 	    /* We defer most subprogram bodies to the second pass.  */
+ 	    else if (Nkind (gnat_decl) == N_Subprogram_Body)
+ 	      {
+ 		if (Acts_As_Spec (gnat_decl))
+ 		  {
+ 		    Node_Id gnat_subprog_id = Defining_Entity (gnat_decl);
+ 
+ 		    if (Ekind (gnat_subprog_id) != E_Generic_Procedure
+ 			&& Ekind (gnat_subprog_id) != E_Generic_Function)
+ 		      gnat_to_gnu_entity (gnat_subprog_id, NULL_TREE, true);
+ 		  }
+ 	      }
+ 
+ 	    /* For bodies and stubs that act as their own specs, the entity
+ 	       itself must be elaborated in the first pass, because it may
+ 	       be used in other declarations.  */
+ 	    else if (Nkind (gnat_decl) == N_Subprogram_Body_Stub)
+ 	      {
+ 		Node_Id gnat_subprog_id
+ 		  = Defining_Entity (Specification (gnat_decl));
+ 
+ 		    if (Ekind (gnat_subprog_id) != E_Subprogram_Body
+ 			&& Ekind (gnat_subprog_id) != E_Generic_Procedure
+ 			&& Ekind (gnat_subprog_id) != E_Generic_Function)
+ 		      gnat_to_gnu_entity (gnat_subprog_id, NULL_TREE, true);
+ 	      }
+ 
+ 	    /* Concurrent stubs stand for the corresponding subprogram bodies,
+ 	       which are deferred like other bodies.  */
+ 	    else if (Nkind (gnat_decl) == N_Task_Body_Stub
+ 		     || Nkind (gnat_decl) == N_Protected_Body_Stub)
+ 	      ;
+ 
+ 	    /* Renamed subprograms may not be elaborated yet at this point
+ 	       since renamings do not trigger freezing.  Wait for the second
+ 	       pass to take care of them.  */
+ 	    else if (Nkind (gnat_decl) == N_Subprogram_Renaming_Declaration)
+ 	      ;
+ 
+ 	    else
+ 	      add_stmt (gnat_to_gnu (gnat_decl));
+ 	  }
+ 
+   /* Here we elaborate everything we deferred above except for package bodies,
+      which are elaborated at their freeze nodes.  Note that we must also
+      go inside things (package specs and freeze nodes) the first pass did.  */
+   if (pass2p)
+     for (i = 0; i <= 1; i++)
+       if (Present (gnat_decl_array[i]))
+ 	for (gnat_decl = First (gnat_decl_array[i]);
+ 	     gnat_decl != gnat_end_list; gnat_decl = Next (gnat_decl))
+ 	  {
+ 	    if (Nkind (gnat_decl) == N_Subprogram_Body
+ 		|| Nkind (gnat_decl) == N_Subprogram_Body_Stub
+ 		|| Nkind (gnat_decl) == N_Task_Body_Stub
+ 		|| Nkind (gnat_decl) == N_Protected_Body_Stub)
+ 	      add_stmt (gnat_to_gnu (gnat_decl));
+ 
+ 	    else if (Nkind (gnat_decl) == N_Package_Declaration
+ 		     && (Nkind (Specification (gnat_decl)
+ 				== N_Package_Specification)))
+ 	      process_decls (Visible_Declarations (Specification (gnat_decl)),
+ 			     Private_Declarations (Specification (gnat_decl)),
+ 			     Empty, false, true);
+ 
+ 	    else if (Nkind (gnat_decl) == N_Freeze_Entity)
+ 	      process_decls (Actions (gnat_decl), Empty, Empty, false, true);
+ 
+ 	    else if (Nkind (gnat_decl) == N_Subprogram_Renaming_Declaration)
+ 	      add_stmt (gnat_to_gnu (gnat_decl));
+ 	  }
+ }
+ 
+ /* Make a unary operation of kind CODE using build_unary_op, but guard
+    the operation by an overflow check.  CODE can be one of NEGATE_EXPR
+    or ABS_EXPR.  GNU_TYPE is the type desired for the result.  Usually
+    the operation is to be performed in that type.  GNAT_NODE is the gnat
+    node conveying the source location for which the error should be
+    signaled.  */
+ 
+ static tree
+ build_unary_op_trapv (enum tree_code code, tree gnu_type, tree operand,
+ 		      Node_Id gnat_node)
+ {
+   gcc_assert (code == NEGATE_EXPR || code == ABS_EXPR);
+ 
+   operand = gnat_protect_expr (operand);
+ 
+   return emit_check (build_binary_op (EQ_EXPR, boolean_type_node,
+ 				      operand, TYPE_MIN_VALUE (gnu_type)),
+ 		     build_unary_op (code, gnu_type, operand),
+ 		     CE_Overflow_Check_Failed, gnat_node);
+ }
+ 
+ /* Make a binary operation of kind CODE using build_binary_op, but guard
+    the operation by an overflow check.  CODE can be one of PLUS_EXPR,
+    MINUS_EXPR or MULT_EXPR.  GNU_TYPE is the type desired for the result.
+    Usually the operation is to be performed in that type.  GNAT_NODE is
+    the GNAT node conveying the source location for which the error should
+    be signaled.  */
+ 
+ static tree
+ build_binary_op_trapv (enum tree_code code, tree gnu_type, tree left,
+ 		       tree right, Node_Id gnat_node)
+ {
+   const unsigned int precision = TYPE_PRECISION (gnu_type);
+   tree lhs = gnat_protect_expr (left);
+   tree rhs = gnat_protect_expr (right);
+   tree type_max = TYPE_MAX_VALUE (gnu_type);
+   tree type_min = TYPE_MIN_VALUE (gnu_type);
+   tree gnu_expr, check;
+   int sgn;
+ 
+   /* Assert that the precision is a power of 2.  */
+   gcc_assert ((precision & (precision - 1)) == 0);
+ 
+   /* Prefer a constant on the RHS to simplify checks.  */
+   if (TREE_CODE (rhs) != INTEGER_CST
+       && TREE_CODE (lhs) == INTEGER_CST
+       && (code == PLUS_EXPR || code == MULT_EXPR))
+     {
+       tree tmp = lhs;
+       lhs = rhs;
+       rhs = tmp;
+     }
+ 
+   gnu_expr = build_binary_op (code, gnu_type, lhs, rhs);
+ 
+   /* If we can fold the expression to a constant, just return it.
+      The caller will deal with overflow, no need to generate a check.  */
+   if (TREE_CODE (gnu_expr) == INTEGER_CST)
+     return gnu_expr;
+ 
+   /* If no operand is a constant, we use the generic implementation.  */
+   if (TREE_CODE (lhs) != INTEGER_CST && TREE_CODE (rhs) != INTEGER_CST)
+     {
+       /* First convert the operands to the result type like build_binary_op.
+ 	 This is where the bias is made explicit for biased types.  */
+       lhs = convert (gnu_type, lhs);
+       rhs = convert (gnu_type, rhs);
+ 
+       /* Never inline a 64-bit mult for a 32-bit target, it's way too long.  */
+       if (code == MULT_EXPR && precision == 64 && BITS_PER_WORD < 64)
+ 	{
+ 	  tree int64 = gnat_type_for_size (64, 0);
+ 	  return convert (gnu_type, build_call_n_expr (mulv64_decl, 2,
+ 						       convert (int64, lhs),
+ 						       convert (int64, rhs)));
+ 	}
+ 
+       /* Likewise for a 128-bit mult and a 64-bit target.  */
+       else if (code == MULT_EXPR && precision == 128 && BITS_PER_WORD < 128)
+ 	{
+ 	  tree int128 = gnat_type_for_size (128, 0);
+ 	  return convert (gnu_type, build_call_n_expr (mulv128_decl, 2,
+ 						       convert (int128, lhs),
+ 						       convert (int128, rhs)));
+ 	}
+ 
+       enum internal_fn icode;
+ 
+       switch (code)
+ 	{
+ 	case PLUS_EXPR:
+ 	  icode = IFN_ADD_OVERFLOW;
+ 	  break;
+ 	case MINUS_EXPR:
+ 	  icode = IFN_SUB_OVERFLOW;
+ 	  break;
+ 	case MULT_EXPR:
+ 	  icode = IFN_MUL_OVERFLOW;
+ 	  break;
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+ 
+       tree gnu_ctype = build_complex_type (gnu_type);
+       tree call
+ 	= build_call_expr_internal_loc (UNKNOWN_LOCATION, icode, gnu_ctype, 2,
+ 					lhs, rhs);
+       tree tgt = save_expr (call);
+       gnu_expr = build1 (REALPART_EXPR, gnu_type, tgt);
+       check = fold_build2 (NE_EXPR, boolean_type_node,
+ 			   build1 (IMAGPART_EXPR, gnu_type, tgt),
+ 			   build_int_cst (gnu_type, 0));
+       return
+ 	emit_check (check, gnu_expr, CE_Overflow_Check_Failed, gnat_node);
+    }
+ 
+   /* If one operand is a constant, we expose the overflow condition to enable
+      a subsequent simplication or even elimination.  */
+   switch (code)
+     {
+     case PLUS_EXPR:
+       sgn = tree_int_cst_sgn (rhs);
+       if (sgn > 0)
+ 	/* When rhs > 0, overflow when lhs > type_max - rhs.  */
+ 	check = build_binary_op (GT_EXPR, boolean_type_node, lhs,
+ 				 build_binary_op (MINUS_EXPR, gnu_type,
+ 						  type_max, rhs));
+       else if (sgn < 0)
+ 	/* When rhs < 0, overflow when lhs < type_min - rhs.  */
+ 	check = build_binary_op (LT_EXPR, boolean_type_node, lhs,
+ 				 build_binary_op (MINUS_EXPR, gnu_type,
+ 						  type_min, rhs));
+       else
+ 	return gnu_expr;
+       break;
+ 
+     case MINUS_EXPR:
+       if (TREE_CODE (lhs) == INTEGER_CST)
+ 	{
+ 	  sgn = tree_int_cst_sgn (lhs);
+ 	  if (sgn > 0)
+ 	    /* When lhs > 0, overflow when rhs < lhs - type_max.  */
+ 	    check = build_binary_op (LT_EXPR, boolean_type_node, rhs,
+ 				     build_binary_op (MINUS_EXPR, gnu_type,
+ 						      lhs, type_max));
+ 	  else if (sgn < 0)
+ 	    /* When lhs < 0, overflow when rhs > lhs - type_min.  */
+ 	    check = build_binary_op (GT_EXPR, boolean_type_node, rhs,
+ 				     build_binary_op (MINUS_EXPR, gnu_type,
+ 						      lhs, type_min));
+ 	  else
+ 	    return gnu_expr;
+ 	}
+       else
+ 	{
+ 	  sgn = tree_int_cst_sgn (rhs);
+ 	  if (sgn > 0)
+ 	    /* When rhs > 0, overflow when lhs < type_min + rhs.  */
+ 	    check = build_binary_op (LT_EXPR, boolean_type_node, lhs,
+ 				     build_binary_op (PLUS_EXPR, gnu_type,
+ 						      type_min, rhs));
+ 	  else if (sgn < 0)
+ 	    /* When rhs < 0, overflow when lhs > type_max + rhs.  */
+ 	    check = build_binary_op (GT_EXPR, boolean_type_node, lhs,
+ 				     build_binary_op (PLUS_EXPR, gnu_type,
+ 						      type_max, rhs));
+ 	  else
+ 	    return gnu_expr;
+ 	}
+       break;
+ 
+     case MULT_EXPR:
+       sgn = tree_int_cst_sgn (rhs);
+       if (sgn > 0)
+ 	{
+ 	  if (integer_onep (rhs))
+ 	    return gnu_expr;
+ 
+ 	  tree lb = build_binary_op (TRUNC_DIV_EXPR, gnu_type, type_min, rhs);
+ 	  tree ub = build_binary_op (TRUNC_DIV_EXPR, gnu_type, type_max, rhs);
+ 
+ 	  /* When rhs > 1, overflow outside [type_min/rhs; type_max/rhs].  */
+ 	  check
+ 	    = build_binary_op (TRUTH_ORIF_EXPR, boolean_type_node,
+ 			       build_binary_op (LT_EXPR, boolean_type_node,
+ 						lhs, lb),
+ 			       build_binary_op (GT_EXPR, boolean_type_node,
+ 						lhs, ub));
+ 	}
+       else if (sgn < 0)
+ 	{
+ 	  tree lb = build_binary_op (TRUNC_DIV_EXPR, gnu_type, type_max, rhs);
+ 	  tree ub = build_binary_op (TRUNC_DIV_EXPR, gnu_type, type_min, rhs);
+ 
+ 	  if (integer_minus_onep (rhs))
+ 	    /* When rhs == -1, overflow if lhs == type_min.  */
+ 	    check
+ 	      = build_binary_op (EQ_EXPR, boolean_type_node, lhs, type_min);
+ 	  else
+ 	    /* When rhs < -1, overflow outside [type_max/rhs; type_min/rhs].  */
+ 	    check
+ 	      = build_binary_op (TRUTH_ORIF_EXPR, boolean_type_node,
+ 				 build_binary_op (LT_EXPR, boolean_type_node,
+ 						  lhs, lb),
+ 				 build_binary_op (GT_EXPR, boolean_type_node,
+ 						  lhs, ub));
+ 	}
+       else
+ 	return gnu_expr;
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   return emit_check (check, gnu_expr, CE_Overflow_Check_Failed, gnat_node);
+ }
+ 
+ /* GNU_COND contains the condition corresponding to an index, overflow or
+    range check of value GNU_EXPR.  Build a COND_EXPR that returns GNU_EXPR
+    if GNU_COND is false and raises a CONSTRAINT_ERROR if GNU_COND is true.
+    REASON is the code that says why the exception is raised.  GNAT_NODE is
+    the node conveying the source location for which the error should be
+    signaled.
+ 
+    We used to propagate TREE_SIDE_EFFECTS from GNU_EXPR to the COND_EXPR,
+    overwriting the setting inherited from the call statement, on the ground
+    that the expression need not be evaluated just for the check.  However
+    that's incorrect because, in the GCC type system, its value is presumed
+    to be valid so its comparison against the type bounds always yields true
+    and, therefore, could be done without evaluating it; given that it can
+    be a computation that overflows the bounds, the language may require the
+    check to fail and thus the expression to be evaluated in this case.  */
+ 
+ static tree
+ emit_check (tree gnu_cond, tree gnu_expr, int reason, Node_Id gnat_node)
+ {
+   tree gnu_call
+     = build_call_raise (reason, gnat_node, N_Raise_Constraint_Error);
+   return
+     fold_build3 (COND_EXPR, TREE_TYPE (gnu_expr), gnu_cond,
+ 		 build2 (COMPOUND_EXPR, TREE_TYPE (gnu_expr), gnu_call,
+ 			 SCALAR_FLOAT_TYPE_P (TREE_TYPE (gnu_expr))
+ 			 ? build_real (TREE_TYPE (gnu_expr), dconst0)
+ 			 : build_int_cst (TREE_TYPE (gnu_expr), 0)),
+ 		 gnu_expr);
+ }
+ 
+ /* Return an expression that converts GNU_EXPR to GNAT_TYPE, doing overflow
+    checks if OVERFLOW_P is true.  If TRUNCATE_P is true, do a fp-to-integer
+    conversion with truncation, otherwise round.  GNAT_NODE is the GNAT node
+    conveying the source location for which the error should be signaled.  */
+ 
+ static tree
+ convert_with_check (Entity_Id gnat_type, tree gnu_expr, bool overflow_p,
+ 		    bool truncate_p, Node_Id gnat_node)
+ {
+   tree gnu_type = get_unpadded_type (gnat_type);
+   tree gnu_base_type = get_base_type (gnu_type);
+   tree gnu_in_type = TREE_TYPE (gnu_expr);
+   tree gnu_in_base_type = get_base_type (gnu_in_type);
+   tree gnu_result = gnu_expr;
+ 
+   /* If we are not doing any checks, the output is an integral type and the
+      input is not a floating-point type, just do the conversion.  This is
+      required for packed array types and is simpler in all cases anyway.   */
+   if (!overflow_p
+       && INTEGRAL_TYPE_P (gnu_base_type)
+       && !FLOAT_TYPE_P (gnu_in_base_type))
+     return convert (gnu_type, gnu_expr);
+ 
+   /* If the mode of the input base type is larger, then converting to it below
+      may pessimize the final conversion step, for example generate a libcall
+      instead of a simple instruction, so use a narrower type in this case.  */
+   if (TYPE_MODE (gnu_in_base_type) != TYPE_MODE (gnu_in_type)
+       && !(TREE_CODE (gnu_in_type) == INTEGER_TYPE
+ 	   && TYPE_BIASED_REPRESENTATION_P (gnu_in_type)))
+     gnu_in_base_type = gnat_type_for_mode (TYPE_MODE (gnu_in_type),
+ 					   TYPE_UNSIGNED (gnu_in_type));
+ 
+   /* First convert the expression to the base type.  This will never generate
+      code, but makes the tests below simpler.  But don't do this if converting
+      from an integer type to an unconstrained array type since then we need to
+      get the bounds from the original (unpacked) type.  */
+   if (TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE)
+     gnu_result = convert (gnu_in_base_type, gnu_result);
+ 
+   /* If overflow checks are requested,  we need to be sure the result will fit
+      in the output base type.  But don't do this if the input is integer and
+      the output floating-point.  */
+   if (overflow_p
+       && !(FLOAT_TYPE_P (gnu_base_type) && INTEGRAL_TYPE_P (gnu_in_base_type)))
+     {
+       /* Ensure GNU_EXPR only gets evaluated once.  */
+       tree gnu_input = gnat_protect_expr (gnu_result);
+       tree gnu_cond = boolean_false_node;
+       tree gnu_in_lb = TYPE_MIN_VALUE (gnu_in_base_type);
+       tree gnu_in_ub = TYPE_MAX_VALUE (gnu_in_base_type);
+       tree gnu_out_lb = TYPE_MIN_VALUE (gnu_base_type);
+       tree gnu_out_ub
+ 	= (TREE_CODE (gnu_base_type) == INTEGER_TYPE
+ 	   && TYPE_MODULAR_P (gnu_base_type))
+ 	  ? fold_build2 (MINUS_EXPR, gnu_base_type,
+ 			 TYPE_MODULUS (gnu_base_type),
+ 			 build_int_cst (gnu_base_type, 1))
+ 	  : TYPE_MAX_VALUE (gnu_base_type);
+ 
+       /* Convert the lower bounds to signed types, so we're sure we're
+ 	 comparing them properly.  Likewise, convert the upper bounds
+ 	 to unsigned types.  */
+       if (INTEGRAL_TYPE_P (gnu_in_base_type)
+ 	  && TYPE_UNSIGNED (gnu_in_base_type))
+ 	gnu_in_lb
+ 	  = convert (gnat_signed_type_for (gnu_in_base_type), gnu_in_lb);
+ 
+       if (INTEGRAL_TYPE_P (gnu_in_base_type)
+ 	  && !TYPE_UNSIGNED (gnu_in_base_type))
+ 	gnu_in_ub
+ 	  = convert (gnat_unsigned_type_for (gnu_in_base_type), gnu_in_ub);
+ 
+       if (INTEGRAL_TYPE_P (gnu_base_type) && TYPE_UNSIGNED (gnu_base_type))
+ 	gnu_out_lb
+ 	  = convert (gnat_signed_type_for (gnu_base_type), gnu_out_lb);
+ 
+       if (INTEGRAL_TYPE_P (gnu_base_type) && !TYPE_UNSIGNED (gnu_base_type))
+ 	gnu_out_ub
+ 	  = convert (gnat_unsigned_type_for (gnu_base_type), gnu_out_ub);
+ 
+       /* Check each bound separately and only if the result bound
+ 	 is tighter than the bound on the input type.  Note that all the
+ 	 types are base types, so the bounds must be constant. Also,
+ 	 the comparison is done in the base type of the input, which
+ 	 always has the proper signedness.  First check for input
+ 	 integer (which means output integer), output float (which means
+ 	 both float), or mixed, in which case we always compare.
+ 	 Note that we have to do the comparison which would *fail* in the
+ 	 case of an error since if it's an FP comparison and one of the
+ 	 values is a NaN or Inf, the comparison will fail.  */
+       if (INTEGRAL_TYPE_P (gnu_in_base_type)
+ 	  ? tree_int_cst_lt (gnu_in_lb, gnu_out_lb)
+ 	  : (FLOAT_TYPE_P (gnu_base_type)
+ 	     ? real_less (&TREE_REAL_CST (gnu_in_lb),
+ 			  &TREE_REAL_CST (gnu_out_lb))
+ 	     : 1))
+ 	gnu_cond
+ 	  = invert_truthvalue
+ 	    (build_binary_op (GE_EXPR, boolean_type_node,
+ 			      gnu_input, convert (gnu_in_base_type,
+ 						  gnu_out_lb)));
+ 
+       if (INTEGRAL_TYPE_P (gnu_in_base_type)
+ 	  ? tree_int_cst_lt (gnu_out_ub, gnu_in_ub)
+ 	  : (FLOAT_TYPE_P (gnu_base_type)
+ 	     ? real_less (&TREE_REAL_CST (gnu_out_ub),
+ 			  &TREE_REAL_CST (gnu_in_ub))
+ 	     : 1))
+ 	gnu_cond
+ 	  = build_binary_op (TRUTH_ORIF_EXPR, boolean_type_node, gnu_cond,
+ 			     invert_truthvalue
+ 			     (build_binary_op (LE_EXPR, boolean_type_node,
+ 					       gnu_input,
+ 					       convert (gnu_in_base_type,
+ 							gnu_out_ub))));
+ 
+       if (!integer_zerop (gnu_cond))
+ 	gnu_result = emit_check (gnu_cond, gnu_input,
+ 				 CE_Overflow_Check_Failed, gnat_node);
+     }
+ 
+   /* Now convert to the result base type.  If this is a non-truncating
+      float-to-integer conversion, round.  */
+   if (INTEGRAL_TYPE_P (gnu_base_type)
+       && FLOAT_TYPE_P (gnu_in_base_type)
+       && !truncate_p)
+     {
+       REAL_VALUE_TYPE half_minus_pred_half, pred_half;
+       tree gnu_conv, gnu_zero, gnu_comp, calc_type;
+       tree gnu_pred_half, gnu_add_pred_half, gnu_subtract_pred_half;
+       const struct real_format *fmt;
+ 
+       /* The following calculations depend on proper rounding to even
+ 	 of each arithmetic operation.  In order to prevent excess
+ 	 precision from spoiling this property, use the widest hardware
+ 	 floating-point type if FP_ARITH_MAY_WIDEN is true.  */
+       calc_type
+ 	= fp_arith_may_widen ? longest_float_type_node : gnu_in_base_type;
+ 
+       /* Compute the exact value calc_type'Pred (0.5) at compile time.  */
+       fmt = REAL_MODE_FORMAT (TYPE_MODE (calc_type));
+       real_2expN (&half_minus_pred_half, -(fmt->p) - 1, TYPE_MODE (calc_type));
+       real_arithmetic (&pred_half, MINUS_EXPR, &dconsthalf,
+ 		       &half_minus_pred_half);
+       gnu_pred_half = build_real (calc_type, pred_half);
+ 
+       /* If the input is strictly negative, subtract this value
+ 	 and otherwise add it from the input.  For 0.5, the result
+ 	 is exactly between 1.0 and the machine number preceding 1.0
+ 	 (for calc_type).  Since the last bit of 1.0 is even, this 0.5
+ 	 will round to 1.0, while all other number with an absolute
+ 	 value less than 0.5 round to 0.0.  For larger numbers exactly
+ 	 halfway between integers, rounding will always be correct as
+ 	 the true mathematical result will be closer to the higher
+ 	 integer compared to the lower one.  So, this constant works
+ 	 for all floating-point numbers.
+ 
+ 	 The reason to use the same constant with subtract/add instead
+ 	 of a positive and negative constant is to allow the comparison
+ 	 to be scheduled in parallel with retrieval of the constant and
+ 	 conversion of the input to the calc_type (if necessary).  */
+ 
+       gnu_zero = build_real (gnu_in_base_type, dconst0);
+       gnu_result = gnat_protect_expr (gnu_result);
+       gnu_conv = convert (calc_type, gnu_result);
+       gnu_comp
+ 	= fold_build2 (GE_EXPR, boolean_type_node, gnu_result, gnu_zero);
+       gnu_add_pred_half
+ 	= fold_build2 (PLUS_EXPR, calc_type, gnu_conv, gnu_pred_half);
+       gnu_subtract_pred_half
+ 	= fold_build2 (MINUS_EXPR, calc_type, gnu_conv, gnu_pred_half);
+       gnu_result = fold_build3 (COND_EXPR, calc_type, gnu_comp,
+ 				gnu_add_pred_half, gnu_subtract_pred_half);
+     }
+ 
+   if (TREE_CODE (gnu_base_type) == INTEGER_TYPE
+       && TYPE_HAS_ACTUAL_BOUNDS_P (gnu_base_type)
+       && TREE_CODE (gnu_result) == UNCONSTRAINED_ARRAY_REF)
+     gnu_result = unchecked_convert (gnu_base_type, gnu_result, false);
+   else
+     gnu_result = convert (gnu_base_type, gnu_result);
+ 
+   return convert (gnu_type, gnu_result);
+ }
+ 
+ /* Return true if GNU_EXPR can be directly addressed.  This is the case
+    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.
+ 
+    *** Notes on addressability issues in the Ada compiler ***
+ 
+    This predicate is necessary in order to bridge the gap between Gigi
+    and the middle-end about addressability of GENERIC trees.  A tree
+    is said to be addressable if it can be directly addressed, i.e. if
+    its address can be taken, is a multiple of the type's alignment on
+    strict-alignment architectures and returns the first storage unit
+    assigned to the object represented by the tree.
+ 
+    In the C family of languages, everything is in practice addressable
+    at the language level, except for bit-fields.  This means that these
+    compilers will take the address of any tree that doesn't represent
+    a bit-field reference and expect the result to be the first storage
+    unit assigned to the object.  Even in cases where this will result
+    in unaligned accesses at run time, nothing is supposed to be done
+    and the program is considered as erroneous instead (see PR c/18287).
+ 
+    The implicit assumptions made in the middle-end are in keeping with
+    the C viewpoint described above:
+      - the address of a bit-field reference is supposed to be never
+        taken; the compiler (generally) will stop on such a construct,
+      - any other tree is addressable if it is formally addressable,
+        i.e. if it is formally allowed to be the operand of ADDR_EXPR.
+ 
+    In Ada, the viewpoint is the opposite one: nothing is addressable
+    at the language level unless explicitly declared so.  This means
+    that the compiler will both make sure that the trees representing
+    references to addressable ("aliased" in Ada parlance) objects are
+    addressable and make no real attempts at ensuring that the trees
+    representing references to non-addressable objects are addressable.
+ 
+    In the first case, Ada is effectively equivalent to C and handing
+    down the direct result of applying ADDR_EXPR to these trees to the
+    middle-end works flawlessly.  In the second case, Ada cannot afford
+    to consider the program as erroneous if the address of trees that
+    are not addressable is requested for technical reasons, unlike C;
+    as a consequence, the Ada compiler must arrange for either making
+    sure that this address is not requested in the middle-end or for
+    compensating by inserting temporaries if it is requested in Gigi.
+ 
+    The first goal can be achieved because the middle-end should not
+    request the address of non-addressable trees on its own; the only
+    exception is for the invocation of low-level block operations like
+    memcpy, for which the addressability requirements are lower since
+    the type's alignment can be disregarded.  In practice, this means
+    that Gigi must make sure that such operations cannot be applied to
+    non-BLKmode bit-fields.
+ 
+    The second goal is achieved by means of the addressable_p predicate,
+    which computes whether a temporary must be inserted by Gigi when the
+    address of a tree is requested; if so, the address of the temporary
+    will be used in lieu of that of the original tree and some glue code
+    generated to connect everything together.  */
+ 
+ static bool
+ addressable_p (tree gnu_expr, tree gnu_type)
+ {
+   /* 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
+      in the latter type wouldn't correctly set all the bits of the object.  */
+   if (gnu_type
+       && INTEGRAL_TYPE_P (gnu_type)
+       && smaller_form_type_p (gnu_type, TREE_TYPE (gnu_expr)))
+     return false;
+ 
+   /* The size of the actual type of the object may not be smaller than that
+      of the expected type, otherwise an indirect access in the latter type
+      would be larger than the object.  But only record types need to be
+      considered in practice for this case.  */
+   if (gnu_type
+       && TREE_CODE (gnu_type) == RECORD_TYPE
+       && smaller_form_type_p (TREE_TYPE (gnu_expr), gnu_type))
+     return false;
+ 
+   switch (TREE_CODE (gnu_expr))
+     {
+     case VAR_DECL:
+     case PARM_DECL:
+     case FUNCTION_DECL:
+     case RESULT_DECL:
+       /* All DECLs are addressable: if they are in a register, we can force
+ 	 them to memory.  */
+       return true;
+ 
+     case UNCONSTRAINED_ARRAY_REF:
+     case INDIRECT_REF:
+       /* Taking the address of a dereference yields the original pointer.  */
+       return true;
+ 
+     case STRING_CST:
+     case INTEGER_CST:
+     case REAL_CST:
+       /* Taking the address yields a pointer to the constant pool.  */
+       return true;
+ 
+     case CONSTRUCTOR:
+       /* Taking the address of a static constructor yields a pointer to the
+ 	 tree constant pool.  */
+       return TREE_STATIC (gnu_expr) ? true : false;
+ 
+     case NULL_EXPR:
+     case ADDR_EXPR:
+     case SAVE_EXPR:
+     case CALL_EXPR:
+     case PLUS_EXPR:
+     case MINUS_EXPR:
+     case BIT_IOR_EXPR:
+     case BIT_XOR_EXPR:
+     case BIT_AND_EXPR:
+     case BIT_NOT_EXPR:
+       /* All rvalues are deemed addressable since taking their address will
+ 	 force a temporary to be created by the middle-end.  */
+       return true;
+ 
+     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);
+ 
+     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));
+ 
+     case COMPONENT_REF:
+       return (((!DECL_BIT_FIELD (TREE_OPERAND (gnu_expr, 1))
+ 		/* Even with DECL_BIT_FIELD cleared, we have to ensure that
+ 		   the field is sufficiently aligned, in case it is subject
+ 		   to a pragma Component_Alignment.  But we don't need to
+ 		   check the alignment of the containing record, as it is
+ 		   guaranteed to be not smaller than that of its most
+ 		   aligned field that is not a bit-field.  */
+ 		&& (!STRICT_ALIGNMENT
+ 		    || DECL_ALIGN (TREE_OPERAND (gnu_expr, 1))
+ 		       >= TYPE_ALIGN (TREE_TYPE (gnu_expr))))
+ 	       /* 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));
+ 
+     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);
+ 
+     case CONVERT_EXPR:
+       return (AGGREGATE_TYPE_P (TREE_TYPE (gnu_expr))
+ 	      && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE));
+ 
+     case VIEW_CONVERT_EXPR:
+       {
+ 	/* This is addressable if we can avoid a copy.  */
+ 	tree type = TREE_TYPE (gnu_expr);
+ 	tree inner_type = TREE_TYPE (TREE_OPERAND (gnu_expr, 0));
+ 	return (((TYPE_MODE (type) == TYPE_MODE (inner_type)
+ 		  && (!STRICT_ALIGNMENT
+ 		      || TYPE_ALIGN (type) <= TYPE_ALIGN (inner_type)
+ 		      || TYPE_ALIGN (inner_type) >= BIGGEST_ALIGNMENT))
+ 		 || ((TYPE_MODE (type) == BLKmode
+ 		      || TYPE_MODE (inner_type) == BLKmode)
+ 		     && (!STRICT_ALIGNMENT
+ 			 || TYPE_ALIGN (type) <= TYPE_ALIGN (inner_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));
+       }
+ 
+     default:
+       return false;
+     }
+ }
+ 
+ /* Do the processing for the declaration of a GNAT_ENTITY, a type or subtype.
+    If a Freeze node exists for the entity, delay the bulk of the processing.
+    Otherwise make a GCC type for GNAT_ENTITY and set up the correspondence.  */
+ 
+ void
+ process_type (Entity_Id gnat_entity)
+ {
+   tree gnu_old
+     = present_gnu_tree (gnat_entity) ? get_gnu_tree (gnat_entity) : NULL_TREE;
+ 
+   /* If we are to delay elaboration of this type, just do any elaboration
+      needed for expressions within the declaration and make a dummy node
+      for it and its Full_View (if any), in case something points to it.
+      Do not do this if it has already been done (the only way that can
+      happen is if the private completion is also delayed).  */
+   if (Present (Freeze_Node (gnat_entity)))
+     {
+       elaborate_entity (gnat_entity);
+ 
+       if (!gnu_old)
+ 	{
+ 	  tree gnu_decl = TYPE_STUB_DECL (make_dummy_type (gnat_entity));
+ 	  save_gnu_tree (gnat_entity, gnu_decl, false);
+ 	  if (Is_Incomplete_Or_Private_Type (gnat_entity)
+ 	      && Present (Full_View (gnat_entity)))
+ 	    {
+ 	      if (Has_Completion_In_Body (gnat_entity))
+ 		DECL_TAFT_TYPE_P (gnu_decl) = 1;
+ 	      save_gnu_tree (Full_View (gnat_entity), gnu_decl, false);
+ 	    }
+ 	}
+ 
+       return;
+     }
+ 
+   /* If we saved away a dummy type for this node, it means that this made the
+      type that corresponds to the full type of an incomplete type.  Clear that
+      type for now and then update the type in the pointers below.  But, if the
+      saved type is not dummy, it very likely means that we have a use before
+      declaration for the type in the tree, what we really cannot handle.  */
+   if (gnu_old)
+     {
+       gcc_assert (TREE_CODE (gnu_old) == TYPE_DECL
+ 		  && TYPE_IS_DUMMY_P (TREE_TYPE (gnu_old)));
+ 
+       save_gnu_tree (gnat_entity, NULL_TREE, false);
+     }
+ 
+   /* Now fully elaborate the type.  */
+   tree gnu_new = gnat_to_gnu_entity (gnat_entity, NULL_TREE, true);
+   gcc_assert (TREE_CODE (gnu_new) == TYPE_DECL);
+ 
+   /* If we have an old type and we've made pointers to this type, update those
+      pointers.  If this is a Taft amendment type in the main unit, we need to
+      mark the type as used since other units referencing it don't see the full
+      declaration and, therefore, cannot mark it as used themselves.  */
+   if (gnu_old)
+     {
+       update_pointer_to (TYPE_MAIN_VARIANT (TREE_TYPE (gnu_old)),
+ 			 TREE_TYPE (gnu_new));
+       if (DECL_TAFT_TYPE_P (gnu_old))
+ 	used_types_insert (TREE_TYPE (gnu_new));
+     }
+ 
+   /* If this is a record type corresponding to a task or protected type
+      that is a completion of an incomplete type, perform a similar update
+      on the type.  ??? Including protected types here is a guess.  */
+   if (Is_Record_Type (gnat_entity)
+       && Is_Concurrent_Record_Type (gnat_entity)
+       && present_gnu_tree (Corresponding_Concurrent_Type (gnat_entity)))
+     {
+       tree gnu_task_old
+ 	= get_gnu_tree (Corresponding_Concurrent_Type (gnat_entity));
+ 
+       save_gnu_tree (Corresponding_Concurrent_Type (gnat_entity),
+ 		     NULL_TREE, false);
+       save_gnu_tree (Corresponding_Concurrent_Type (gnat_entity),
+ 		     gnu_new, false);
+ 
+       update_pointer_to (TYPE_MAIN_VARIANT (TREE_TYPE (gnu_task_old)),
+ 			 TREE_TYPE (gnu_new));
+     }
+ }
+ 
+ /* Subroutine of assoc_to_constructor: VALUES is a list of field associations,
+    some of which are from RECORD_TYPE.  Return a CONSTRUCTOR consisting of the
+    associations that are from RECORD_TYPE.  If we see an internal record, make
+    a recursive call to fill it in as well.  */
+ 
+ static tree
+ extract_values (tree values, tree record_type)
+ {
+   vec<constructor_elt, va_gc> *v = NULL;
+   tree field;
+ 
+   for (field = TYPE_FIELDS (record_type); field; field = DECL_CHAIN (field))
+     {
+       tree tem, value = NULL_TREE;
+ 
+       /* _Parent is an internal field, but may have values in the aggregate,
+ 	 so check for values first.  */
+       if ((tem = purpose_member (field, values)))
+ 	{
+ 	  value = TREE_VALUE (tem);
+ 	  TREE_ADDRESSABLE (tem) = 1;
+ 	}
+ 
+       else if (DECL_INTERNAL_P (field))
+ 	{
+ 	  value = extract_values (values, TREE_TYPE (field));
+ 	  if (TREE_CODE (value) == CONSTRUCTOR
+ 	      && vec_safe_is_empty (CONSTRUCTOR_ELTS (value)))
+ 	    value = NULL_TREE;
+ 	}
+       else
+ 	/* If we have a record subtype, the names will match, but not the
+ 	   actual FIELD_DECLs.  */
+ 	for (tem = values; tem; tem = TREE_CHAIN (tem))
+ 	  if (DECL_NAME (TREE_PURPOSE (tem)) == DECL_NAME (field))
+ 	    {
+ 	      value = convert (TREE_TYPE (field), TREE_VALUE (tem));
+ 	      TREE_ADDRESSABLE (tem) = 1;
+ 	    }
+ 
+       if (!value)
+ 	continue;
+ 
+       CONSTRUCTOR_APPEND_ELT (v, field, value);
+     }
+ 
+   return gnat_build_constructor (record_type, v);
+ }
+ 
+ /* GNAT_ENTITY is the type of the resulting constructor, GNAT_ASSOC is the
+    front of the Component_Associations of an N_Aggregate and GNU_TYPE is the
+    GCC type of the corresponding record type.  Return the CONSTRUCTOR.  */
+ 
+ static tree
+ assoc_to_constructor (Entity_Id gnat_entity, Node_Id gnat_assoc, tree gnu_type)
+ {
+   tree gnu_list = NULL_TREE, gnu_result;
+ 
+   /* We test for GNU_FIELD being empty in the case where a variant
+      was the last thing since we don't take things off GNAT_ASSOC in
+      that case.  We check GNAT_ASSOC in case we have a variant, but it
+      has no fields.  */
+ 
+   for (; Present (gnat_assoc); gnat_assoc = Next (gnat_assoc))
+     {
+       const Node_Id gnat_field = First (Choices (gnat_assoc));
+       const Node_Id gnat_expr = Expression (gnat_assoc);
+       tree gnu_field = gnat_to_gnu_field_decl (Entity (gnat_field));
+       tree gnu_expr = gnat_to_gnu (Expression (gnat_assoc));
+ 
+       /* The expander is supposed to put a single component selector name
+ 	 in every record component association.  */
+       gcc_assert (No (Next (gnat_field)));
+ 
+       /* Ignore discriminants that have Corresponding_Discriminants in tagged
+ 	 types since we'll be setting those fields in the parent subtype.  */
+       if (Ekind (Entity (gnat_field)) == E_Discriminant
+ 	  && Present (Corresponding_Discriminant (Entity (gnat_field)))
+ 	  && Is_Tagged_Type (Scope (Entity (gnat_field))))
+ 	continue;
+ 
+       /* Also ignore discriminants of Unchecked_Unions.  */
+       if (Ekind (Entity (gnat_field)) == E_Discriminant
+ 	  && Is_Unchecked_Union (gnat_entity))
+ 	continue;
+ 
+       gigi_checking_assert (!Do_Range_Check (gnat_expr));
+ 
+       /* Convert to the type of the field.  */
+       gnu_expr = convert (TREE_TYPE (gnu_field), gnu_expr);
+ 
+       /* Add the field and expression to the list.  */
+       gnu_list = tree_cons (gnu_field, gnu_expr, gnu_list);
+     }
+ 
+   gnu_result = extract_values (gnu_list, gnu_type);
+ 
+   if (flag_checking)
+     {
+       /* Verify that every entry in GNU_LIST was used.  */
+       for (; gnu_list; gnu_list = TREE_CHAIN (gnu_list))
+ 	gcc_assert (TREE_ADDRESSABLE (gnu_list));
+     }
+ 
+   return gnu_result;
+ }
+ 
+ /* Build a possibly nested constructor for array aggregates.  GNAT_EXPR is
+    the first element of an array aggregate.  It may itself be an aggregate.
+    GNU_ARRAY_TYPE is the GCC type corresponding to the array aggregate.  */
+ 
+ static tree
+ pos_to_constructor (Node_Id gnat_expr, tree gnu_array_type)
+ {
+   tree gnu_index = TYPE_MIN_VALUE (TYPE_DOMAIN (gnu_array_type));
+   vec<constructor_elt, va_gc> *gnu_expr_vec = NULL;
+ 
+   for (; Present (gnat_expr); gnat_expr = Next (gnat_expr))
+     {
+       tree gnu_expr;
+ 
+       /* If the expression is itself an array aggregate then first build the
+ 	 innermost constructor if it is part of our array (multi-dimensional
+ 	 case).  */
+       if (Nkind (gnat_expr) == N_Aggregate
+ 	  && TREE_CODE (TREE_TYPE (gnu_array_type)) == ARRAY_TYPE
+ 	  && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_array_type)))
+ 	gnu_expr = pos_to_constructor (First (Expressions (gnat_expr)),
+ 				       TREE_TYPE (gnu_array_type));
+       else
+ 	{
+ 	  /* If the expression is a conversion to an unconstrained array type,
+ 	     skip it to avoid spilling to memory.  */
+ 	  if (Nkind (gnat_expr) == N_Type_Conversion
+ 	      && Is_Array_Type (Etype (gnat_expr))
+ 	      && !Is_Constrained (Etype (gnat_expr)))
+ 	    gnu_expr = gnat_to_gnu (Expression (gnat_expr));
+ 	  else
+ 	    gnu_expr = gnat_to_gnu (gnat_expr);
+ 
+ 	  gigi_checking_assert (!Do_Range_Check (gnat_expr));
+ 	}
+ 
+       CONSTRUCTOR_APPEND_ELT (gnu_expr_vec, gnu_index,
+ 			      convert (TREE_TYPE (gnu_array_type), gnu_expr));
+ 
+       gnu_index = int_const_binop (PLUS_EXPR, gnu_index,
+ 				   convert (TREE_TYPE (gnu_index),
+ 					    integer_one_node));
+     }
+ 
+   return gnat_build_constructor (gnu_array_type, gnu_expr_vec);
+ }
+ 
+ /* Process a N_Validate_Unchecked_Conversion node.  */
+ 
+ static void
+ validate_unchecked_conversion (Node_Id gnat_node)
+ {
+   tree gnu_source_type = gnat_to_gnu_type (Source_Type (gnat_node));
+   tree gnu_target_type = gnat_to_gnu_type (Target_Type (gnat_node));
+ 
+   /* If the target is a pointer type, see if we are either converting from a
+      non-pointer or from a pointer to a type with a different alias set and
+      warn if so, unless the pointer has been marked to alias everything.  */
+   if (POINTER_TYPE_P (gnu_target_type)
+       && !TYPE_REF_CAN_ALIAS_ALL (gnu_target_type))
+     {
+       tree gnu_source_desig_type = POINTER_TYPE_P (gnu_source_type)
+ 				   ? TREE_TYPE (gnu_source_type)
+ 				   : NULL_TREE;
+       tree gnu_target_desig_type = TREE_TYPE (gnu_target_type);
+       alias_set_type target_alias_set = get_alias_set (gnu_target_desig_type);
+ 
+       if (target_alias_set != 0
+ 	  && (!POINTER_TYPE_P (gnu_source_type)
+ 	      || !alias_sets_conflict_p (get_alias_set (gnu_source_desig_type),
+ 					 target_alias_set)))
+ 	{
+ 	  post_error_ne ("??possible aliasing problem for type&",
+ 			 gnat_node, Target_Type (gnat_node));
+ 	  post_error ("\\?use -fno-strict-aliasing switch for references",
+ 		      gnat_node);
+ 	  post_error_ne ("\\?or use `pragma No_Strict_Aliasing (&);`",
+ 			 gnat_node, Target_Type (gnat_node));
+ 	}
+     }
+ 
+   /* Likewise if the target is a fat pointer type, but we have no mechanism to
+      mitigate the problem in this case, so we unconditionally warn.  */
+   else if (TYPE_IS_FAT_POINTER_P (gnu_target_type))
+     {
+       tree gnu_source_desig_type
+ 	= TYPE_IS_FAT_POINTER_P (gnu_source_type)
+ 	  ? TREE_TYPE (TREE_TYPE (TYPE_FIELDS (gnu_source_type)))
+ 	  : NULL_TREE;
+       tree gnu_target_desig_type
+ 	= TREE_TYPE (TREE_TYPE (TYPE_FIELDS (gnu_target_type)));
+       alias_set_type target_alias_set = get_alias_set (gnu_target_desig_type);
+ 
+       if (target_alias_set != 0
+ 	  && (!TYPE_IS_FAT_POINTER_P (gnu_source_type)
+ 	      || !alias_sets_conflict_p (get_alias_set (gnu_source_desig_type),
+ 					 target_alias_set)))
+ 	{
+ 	  post_error_ne ("??possible aliasing problem for type&",
+ 			 gnat_node, Target_Type (gnat_node));
+ 	  post_error ("\\?use -fno-strict-aliasing switch for references",
+ 		      gnat_node);
+ 	}
+     }
+ }
+ 
+ /* Convert SLOC into LOCUS.  Return true if SLOC corresponds to a
+    source code location and false if it doesn't.  If CLEAR_COLUMN is
+    true, set the column information to 0.  If DECL is given and SLOC
+    refers to a File with an instance, map DECL to that instance.  */
+ 
+ bool
+ Sloc_to_locus (Source_Ptr Sloc, location_t *locus, bool clear_column,
+ 	       const_tree decl)
+ {
+   if (Sloc == No_Location)
+     return false;
+ 
+   if (Sloc <= Standard_Location)
+     {
+       *locus = BUILTINS_LOCATION;
+       return false;
+     }
+ 
+   Source_File_Index file = Get_Source_File_Index (Sloc);
+   Line_Number_Type line = Get_Logical_Line_Number (Sloc);
+   Column_Number_Type column = (clear_column ? 0 : Get_Column_Number (Sloc));
+   line_map_ordinary *map = LINEMAPS_ORDINARY_MAP_AT (line_table, file - 1);
+ 
+   /* We can have zero if pragma Source_Reference is in effect.  */
+   if (line < 1)
+     line = 1;
+ 
+   /* Translate the location.  */
+   *locus
+     = linemap_position_for_line_and_column (line_table, map, line, column);
+ 
+   if (file_map && file_map[file - 1].Instance)
+     decl_to_instance_map->put (decl, file_map[file - 1].Instance);
+ 
+   return true;
+ }
+ 
+ /* Return whether GNAT_NODE is a defining identifier for a renaming that comes
+    from the parameter association for the instantiation of a generic.  We do
+    not want to emit source location for them: the code generated for their
+    initialization is likely to disturb debugging.  */
+ 
+ bool
+ renaming_from_instantiation_p (Node_Id gnat_node)
+ {
+   if (Nkind (gnat_node) != N_Defining_Identifier
+       || !Is_Object (gnat_node)
+       || Comes_From_Source (gnat_node)
+       || !Present (Renamed_Object (gnat_node)))
+     return false;
+ 
+   /* Get the object declaration of the renamed object, if any and if the
+      renamed object is a mere identifier.  */
+   gnat_node = Renamed_Object (gnat_node);
+   if (Nkind (gnat_node) != N_Identifier)
+     return false;
+ 
+   gnat_node = Parent (Entity (gnat_node));
+   return (Present (gnat_node)
+ 	  && Nkind (gnat_node) == N_Object_Declaration
+ 	  && Present (Corresponding_Generic_Association (gnat_node)));
+ }
+ 
+ /* Similar to set_expr_location, but start with the Sloc of GNAT_NODE and
+    don't do anything if it doesn't correspond to a source location.  And,
+    if CLEAR_COLUMN is true, set the column information to 0.  */
+ 
+ static void
+ set_expr_location_from_node (tree node, Node_Id gnat_node, bool clear_column)
+ {
+   location_t locus;
+ 
+   /* Do not set a location for constructs likely to disturb debugging.  */
+   if (Nkind (gnat_node) == N_Defining_Identifier)
+     {
+       if (Is_Type (gnat_node) && Is_Actual_Subtype (gnat_node))
+ 	return;
+ 
+       if (renaming_from_instantiation_p (gnat_node))
+ 	return;
+     }
+ 
+   if (!Sloc_to_locus (Sloc (gnat_node), &locus, clear_column))
+     return;
+ 
+   SET_EXPR_LOCATION (node, locus);
+ }
+ 
+ /* More elaborate version of set_expr_location_from_node to be used in more
+    general contexts, for example the result of the translation of a generic
+    GNAT node.  */
+ 
+ static void
+ set_gnu_expr_location_from_node (tree node, Node_Id gnat_node)
+ {
+   /* Set the location information on the node if it is a real expression.
+      References can be reused for multiple GNAT nodes and they would get
+      the location information of their last use.  Also make sure not to
+      overwrite an existing location as it is probably more precise.  */
+ 
+   switch (TREE_CODE (node))
+     {
+     CASE_CONVERT:
+     case NON_LVALUE_EXPR:
+     case SAVE_EXPR:
+       break;
+ 
+     case COMPOUND_EXPR:
+       if (EXPR_P (TREE_OPERAND (node, 1)))
+ 	set_gnu_expr_location_from_node (TREE_OPERAND (node, 1), gnat_node);
+ 
+       /* ... fall through ... */
+ 
+     default:
+       if (!REFERENCE_CLASS_P (node) && !EXPR_HAS_LOCATION (node))
+ 	{
+ 	  set_expr_location_from_node (node, gnat_node);
+ 	  set_end_locus_from_node (node, gnat_node);
+ 	}
+       break;
+     }
+ }
+ 
+ /* Set the end_locus information for GNU_NODE, if any, from an explicit end
+    location associated with GNAT_NODE or GNAT_NODE itself, whichever makes
+    most sense.  Return true if a sensible assignment was performed.  */
+ 
+ static bool
+ set_end_locus_from_node (tree gnu_node, Node_Id gnat_node)
+ {
+   Node_Id gnat_end_label;
+   location_t end_locus;
+ 
+   /* Pick the GNAT node of which we'll take the sloc to assign to the GCC node
+      end_locus when there is one.  We consider only GNAT nodes with a possible
+      End_Label attached.  If the End_Label actually was unassigned, fallback
+      on the original node.  We'd better assign an explicit sloc associated with
+      the outer construct in any case.  */
+ 
+   switch (Nkind (gnat_node))
+     {
+     case N_Package_Body:
+     case N_Subprogram_Body:
+     case N_Block_Statement:
+       if (Present (Handled_Statement_Sequence (gnat_node)))
+ 	gnat_end_label = End_Label (Handled_Statement_Sequence (gnat_node));
+       else
+ 	gnat_end_label = Empty;
+ 
+       break;
+ 
+     case N_Package_Declaration:
+       gcc_checking_assert (Present (Specification (gnat_node)));
+       gnat_end_label = End_Label (Specification (gnat_node));
+       break;
+ 
+     default:
+       return false;
+     }
+ 
+   if (Present (gnat_end_label))
+     gnat_node = gnat_end_label;
+ 
+   /* Some expanded subprograms have neither an End_Label nor a Sloc
+      attached.  Notify that to callers.  For a block statement with no
+      End_Label, clear column information, so that the tree for a
+      transient block does not receive the sloc of a source condition.  */
+   if (!Sloc_to_locus (Sloc (gnat_node), &end_locus,
+                       No (gnat_end_label)
+                       && (Nkind (gnat_node) == N_Block_Statement)))
+     return false;
+ 
+   switch (TREE_CODE (gnu_node))
+     {
+     case BIND_EXPR:
+       BLOCK_SOURCE_END_LOCATION (BIND_EXPR_BLOCK (gnu_node)) = end_locus;
+       return true;
+ 
+     case FUNCTION_DECL:
+       DECL_STRUCT_FUNCTION (gnu_node)->function_end_locus = end_locus;
+       return true;
+ 
+     default:
+       return false;
+     }
+ }
+ 
+ /* Post an error message.  MSG is the error message, properly annotated.
+    NODE is the node at which to post the error and the node to use for the
+    '&' substitution.  */
+ 
+ void
+ post_error (const char *msg, Node_Id node)
+ {
+   String_Template temp;
+   String_Pointer sp;
+ 
+   if (No (node))
+     return;
+ 
+   temp.Low_Bound = 1;
+   temp.High_Bound = strlen (msg);
+   sp.Bounds = &temp;
+   sp.Array = msg;
+   Error_Msg_N (sp, node);
+ }
+ 
+ /* Similar to post_error, but NODE is the node at which to post the error and
+    ENT is the node to use for the '&' substitution.  */
+ 
+ void
+ post_error_ne (const char *msg, Node_Id node, Entity_Id ent)
+ {
+   String_Template temp;
+   String_Pointer sp;
+ 
+   if (No (node))
+     return;
+ 
+   temp.Low_Bound = 1;
+   temp.High_Bound = strlen (msg);
+   sp.Bounds = &temp;
+   sp.Array = msg;
+   Error_Msg_NE (sp, node, ent);
+ }
+ 
+ /* Similar to post_error_ne, but NUM is the number to use for the '^'.  */
+ 
+ void
+ post_error_ne_num (const char *msg, Node_Id node, Entity_Id ent, int num)
+ {
+   Error_Msg_Uint_1 = UI_From_Int (num);
+   post_error_ne (msg, node, ent);
+ }
+ 
+ /* Similar to post_error_ne, but T is a GCC tree representing the number to
+    write.  If T represents a constant, the text inside curly brackets in
+    MSG will be output (presumably including a '^').  Otherwise it will not
+    be output and the text inside square brackets will be output instead.  */
+ 
+ void
+ post_error_ne_tree (const char *msg, Node_Id node, Entity_Id ent, tree t)
+ {
+   char *new_msg = XALLOCAVEC (char, strlen (msg) + 1);
+   char start_yes, end_yes, start_no, end_no;
+   const char *p;
+   char *q;
+ 
+   if (TREE_CODE (t) == INTEGER_CST)
+     {
+       Error_Msg_Uint_1 = UI_From_gnu (t);
+       start_yes = '{', end_yes = '}', start_no = '[', end_no = ']';
+     }
+   else
+     start_yes = '[', end_yes = ']', start_no = '{', end_no = '}';
+ 
+   for (p = msg, q = new_msg; *p; p++)
+     {
+       if (*p == start_yes)
+ 	for (p++; *p != end_yes; p++)
+ 	  *q++ = *p;
+       else if (*p == start_no)
+ 	for (p++; *p != end_no; p++)
+ 	  ;
+       else
+ 	*q++ = *p;
+     }
+ 
+   *q = 0;
+ 
+   post_error_ne (new_msg, node, ent);
+ }
+ 
+ /* Similar to post_error_ne_tree, but NUM is a second integer to write.  */
+ 
+ void
+ post_error_ne_tree_2 (const char *msg, Node_Id node, Entity_Id ent, tree t,
+ 		      int num)
+ {
+   Error_Msg_Uint_2 = UI_From_Int (num);
+   post_error_ne_tree (msg, node, ent, t);
+ }
+ 
+ /* Return a label to branch to for the exception type in KIND or Empty
+    if none.  */
+ 
+ Entity_Id
+ get_exception_label (char kind)
+ {
+   switch (kind)
+     {
+     case N_Raise_Constraint_Error:
+       return gnu_constraint_error_label_stack.last ();
+ 
+     case N_Raise_Storage_Error:
+       return gnu_storage_error_label_stack.last ();
+ 
+     case N_Raise_Program_Error:
+       return gnu_program_error_label_stack.last ();
+ 
+     default:
+       return Empty;
+     }
+ 
+   gcc_unreachable ();
+ }
+ 
+ /* Return the decl for the current elaboration procedure.  */
+ 
+ static tree
+ get_elaboration_procedure (void)
+ {
+   return gnu_elab_proc_stack->last ();
+ }
+ 
+ /* Return the controlling type of a dispatching subprogram.  */
+ 
+ static Entity_Id
+ get_controlling_type (Entity_Id subprog)
+ {
+   /* This is modeled on Expand_Interface_Thunk.  */
+   Entity_Id controlling_type = Etype (First_Formal (subprog));
+   if (Is_Access_Type (controlling_type))
+     controlling_type = Directly_Designated_Type (controlling_type);
+   controlling_type = Underlying_Type (controlling_type);
+   if (Is_Concurrent_Type (controlling_type))
+     controlling_type = Corresponding_Record_Type (controlling_type);
+   controlling_type = Base_Type (controlling_type);
+   return controlling_type;
+ }
+ 
+ /* Return whether we should use an alias for the TARGET of a thunk
+    in order to make the call generated in the thunk local.  */
+ 
+ static bool
+ use_alias_for_thunk_p (tree target)
+ {
+   /* We cannot generate a local call in this case.  */
+   if (DECL_EXTERNAL (target))
+     return false;
+ 
+   /* The call is already local in this case.  */
+   if (TREE_CODE (DECL_CONTEXT (target)) == FUNCTION_DECL)
+     return false;
+ 
+   return TARGET_USE_LOCAL_THUNK_ALIAS_P (target);
+ }
+ 
+ static GTY(()) unsigned long thunk_labelno = 0;
+ 
+ /* Create an alias for TARGET to be used as the target of a thunk.  */
+ 
+ static tree
+ make_alias_for_thunk (tree target)
+ {
+   char buf[64];
+   targetm.asm_out.generate_internal_label (buf, "LTHUNK", thunk_labelno++);
+ 
+   tree alias = build_decl (DECL_SOURCE_LOCATION (target), TREE_CODE (target),
+ 			   get_identifier (buf), TREE_TYPE (target));
+ 
+   DECL_LANG_SPECIFIC (alias) = DECL_LANG_SPECIFIC (target);
+   DECL_CONTEXT (alias) = DECL_CONTEXT (target);
+   TREE_READONLY (alias) = TREE_READONLY (target);
+   TREE_THIS_VOLATILE (alias) = TREE_THIS_VOLATILE (target);
+   DECL_ARTIFICIAL (alias) = 1;
+   DECL_INITIAL (alias) = error_mark_node;
+   DECL_ARGUMENTS (alias) = copy_list (DECL_ARGUMENTS (target));
+   TREE_ADDRESSABLE (alias) = 1;
+   SET_DECL_ASSEMBLER_NAME (alias, DECL_NAME (alias));
+ 
+   cgraph_node *n = cgraph_node::create_same_body_alias (alias, target);
+   gcc_assert (n);
+ 
+   return alias;
+ }
+ 
+ /* Create the local covariant part of {GNAT,GNU}_THUNK.  */
+ 
+ static tree
+ make_covariant_thunk (Entity_Id gnat_thunk, tree gnu_thunk)
+ {
+   tree gnu_name = create_concat_name (gnat_thunk, "CV");
+   tree gnu_cv_thunk
+     = build_decl (DECL_SOURCE_LOCATION (gnu_thunk), TREE_CODE (gnu_thunk),
+ 		  gnu_name, TREE_TYPE (gnu_thunk));
+ 
+   DECL_ARGUMENTS (gnu_cv_thunk) = copy_list (DECL_ARGUMENTS (gnu_thunk));
+   for (tree param_decl = DECL_ARGUMENTS (gnu_cv_thunk);
+        param_decl;
+        param_decl = DECL_CHAIN (param_decl))
+     DECL_CONTEXT (param_decl) = gnu_cv_thunk;
+ 
+   DECL_RESULT (gnu_cv_thunk) = copy_node (DECL_RESULT (gnu_thunk));
+   DECL_CONTEXT (DECL_RESULT (gnu_cv_thunk)) = gnu_cv_thunk;
+ 
+   DECL_LANG_SPECIFIC (gnu_cv_thunk) = DECL_LANG_SPECIFIC (gnu_thunk);
+   DECL_CONTEXT (gnu_cv_thunk) = DECL_CONTEXT (gnu_thunk);
+   TREE_READONLY (gnu_cv_thunk) = TREE_READONLY (gnu_thunk);
+   TREE_THIS_VOLATILE (gnu_cv_thunk) = TREE_THIS_VOLATILE (gnu_thunk);
+   DECL_ARTIFICIAL (gnu_cv_thunk) = 1;
+ 
+   return gnu_cv_thunk;
+ }
+ 
+ /* Try to create a GNU thunk for {GNAT,GNU}_THUNK and return true on success.
+ 
+    GNU thunks are more efficient than GNAT thunks because they don't call into
+    the runtime to retrieve the offset used in the displacement operation, but
+    they are tailored to C++ and thus too limited to support the full range of
+    thunks generated in Ada.  Here's the complete list of limitations:
+ 
+      1. Multi-controlling thunks, i.e thunks with more than one controlling
+ 	parameter, are simply not supported.
+ 
+      2. Covariant thunks, i.e. thunks for which the result is also controlling,
+ 	are split into a pair of (this, covariant-only) thunks.
+ 
+      3. Variable-offset thunks, i.e. thunks for which the offset depends on the
+ 	object and not only on its type, are supported as 2nd class citizens.
+ 
+      4. External thunks, i.e. thunks for which the target is not declared in
+ 	the same unit as the thunk, are supported as 2nd class citizens.
+ 
+      5. Local thunks, i.e. thunks generated for a local type, are supported as
+ 	2nd class citizens.  */
+ 
+ static bool
+ maybe_make_gnu_thunk (Entity_Id gnat_thunk, tree gnu_thunk)
+ {
+   const Entity_Id gnat_target = Thunk_Entity (gnat_thunk);
+ 
+   /* Check that the first formal of the target is the only controlling one.  */
+   Entity_Id gnat_formal = First_Formal (gnat_target);
+   if (!Is_Controlling_Formal (gnat_formal))
+     return false;
+   for (gnat_formal = Next_Formal (gnat_formal);
+        Present (gnat_formal);
+        gnat_formal = Next_Formal (gnat_formal))
+     if (Is_Controlling_Formal (gnat_formal))
+       return false;
+ 
+   /* Look for the types that control the target and the thunk.  */
+   const Entity_Id gnat_controlling_type = get_controlling_type (gnat_target);
+   const Entity_Id gnat_interface_type = get_controlling_type (gnat_thunk);
+ 
+   /* We must have an interface type at this point.  */
+   gcc_assert (Is_Interface (gnat_interface_type));
+ 
+   /* Now compute whether the former covers the latter.  */
+   const Entity_Id gnat_interface_tag
+     = Find_Interface_Tag (gnat_controlling_type, gnat_interface_type);
+   tree gnu_interface_tag
+     = Present (gnat_interface_tag)
+       ? gnat_to_gnu_field_decl (gnat_interface_tag)
+       : NULL_TREE;
+   tree gnu_interface_offset
+     = gnu_interface_tag ? byte_position (gnu_interface_tag) : NULL_TREE;
+ 
+   /* There are three ways to retrieve the offset between the interface view
+      and the base object.  Either the controlling type covers the interface
+      type and the offset of the corresponding tag is fixed, in which case it
+      can be statically encoded in the thunk (see FIXED_OFFSET below).  Or the
+      controlling type doesn't cover the interface type but is of fixed size,
+      in which case the offset is stored in the dispatch table, two pointers
+      above the dispatch table address (see VIRTUAL_VALUE below).  Otherwise,
+      the offset is variable and is stored right after the tag in every object
+      (see INDIRECT_OFFSET below).  See also a-tags.ads for more details.  */
+   HOST_WIDE_INT fixed_offset, virtual_value, indirect_offset;
+   tree virtual_offset;
+ 
+   if (gnu_interface_offset && TREE_CODE (gnu_interface_offset) == INTEGER_CST)
+     {
+       fixed_offset = - tree_to_shwi (gnu_interface_offset);
+       virtual_value = 0;
+       virtual_offset = NULL_TREE;
+       indirect_offset = 0;
+     }
+   else if (!gnu_interface_offset
+ 	   && !Is_Variable_Size_Record (gnat_controlling_type))
+     {
+       fixed_offset = 0;
+       virtual_value = - 2 * (HOST_WIDE_INT) (POINTER_SIZE / BITS_PER_UNIT);
+       virtual_offset = build_int_cst (integer_type_node, virtual_value);
+       indirect_offset = 0;
+     }
+   else
+     {
+       /* Covariant thunks with variable offset are not supported.  */
+       if (Has_Controlling_Result (gnat_target))
+ 	return false;
+ 
+       fixed_offset = 0;
+       virtual_value = 0;
+       virtual_offset = NULL_TREE;
+       indirect_offset = (HOST_WIDE_INT) (POINTER_SIZE / BITS_PER_UNIT);
+     }
+ 
+   tree gnu_target = gnat_to_gnu_entity (gnat_target, NULL_TREE, false);
+ 
+   /* If the target is local, then thunk and target must have the same context
+      because cgraph_node::expand_thunk can only forward the static chain.  */
+   if (DECL_STATIC_CHAIN (gnu_target)
+       && DECL_CONTEXT (gnu_thunk) != DECL_CONTEXT (gnu_target))
+     return false;
+ 
+   /* If the target returns by invisible reference and is external, apply the
+      same transformation as Subprogram_Body_to_gnu here.  */
+   if (TREE_ADDRESSABLE (TREE_TYPE (gnu_target))
+       && DECL_EXTERNAL (gnu_target)
+       && !POINTER_TYPE_P (TREE_TYPE (DECL_RESULT (gnu_target))))
+     {
+       TREE_TYPE (DECL_RESULT (gnu_target))
+ 	= build_reference_type (TREE_TYPE (DECL_RESULT (gnu_target)));
+       relayout_decl (DECL_RESULT (gnu_target));
+     }
+ 
+   /* The thunk expander requires the return types of thunk and target to be
+      compatible, which is not fully the case with the CICO mechanism.  */
+   if (TYPE_CI_CO_LIST (TREE_TYPE (gnu_thunk)))
+     {
+       tree gnu_target_type = TREE_TYPE (gnu_target);
+       gcc_assert (TYPE_CI_CO_LIST (gnu_target_type));
+       TYPE_CANONICAL (TREE_TYPE (TREE_TYPE (gnu_thunk)))
+ 	= TYPE_CANONICAL (TREE_TYPE (gnu_target_type));
+     }
+ 
+   cgraph_node *target_node = cgraph_node::get_create (gnu_target);
+ 
+   /* We may also need to create an alias for the target in order to make
+      the call local, depending on the linkage of the target.  */
+   tree gnu_alias = use_alias_for_thunk_p (gnu_target)
+ 		  ? make_alias_for_thunk (gnu_target)
+ 		  : gnu_target;
+ 
+   /* If the return type of the target is a controlling type, then we need
+      both an usual this thunk and a covariant thunk in this order:
+ 
+        this thunk  -->  covariant thunk  -->  target
+ 
+      For covariant thunks, we can only handle a fixed offset.  */
+   if (Has_Controlling_Result (gnat_target))
+     {
+       gcc_assert (fixed_offset < 0);
+       tree gnu_cv_thunk = make_covariant_thunk (gnat_thunk, gnu_thunk);
+       target_node->create_thunk (gnu_cv_thunk, gnu_target, false,
+ 				 - fixed_offset, 0, 0,
+ 				 NULL_TREE, gnu_alias);
+ 
+       gnu_alias = gnu_target = gnu_cv_thunk;
+     }
+ 
+   target_node->create_thunk (gnu_thunk, gnu_target, true,
+ 			     fixed_offset, virtual_value, indirect_offset,
+ 			     virtual_offset, gnu_alias);
+ 
+   return true;
+ }
+ 
+ /* Initialize the table that maps GNAT codes to GCC codes for simple
+    binary and unary operations.  */
+ 
+ static void
+ init_code_table (void)
+ {
+   gnu_codes[N_Op_And] = TRUTH_AND_EXPR;
+   gnu_codes[N_Op_Or] = TRUTH_OR_EXPR;
+   gnu_codes[N_Op_Xor] = TRUTH_XOR_EXPR;
+   gnu_codes[N_Op_Eq] = EQ_EXPR;
+   gnu_codes[N_Op_Ne] = NE_EXPR;
+   gnu_codes[N_Op_Lt] = LT_EXPR;
+   gnu_codes[N_Op_Le] = LE_EXPR;
+   gnu_codes[N_Op_Gt] = GT_EXPR;
+   gnu_codes[N_Op_Ge] = GE_EXPR;
+   gnu_codes[N_Op_Add] = PLUS_EXPR;
+   gnu_codes[N_Op_Subtract] = MINUS_EXPR;
+   gnu_codes[N_Op_Multiply] = MULT_EXPR;
+   gnu_codes[N_Op_Mod] = FLOOR_MOD_EXPR;
+   gnu_codes[N_Op_Rem] = TRUNC_MOD_EXPR;
+   gnu_codes[N_Op_Minus] = NEGATE_EXPR;
+   gnu_codes[N_Op_Abs] = ABS_EXPR;
+   gnu_codes[N_Op_Not] = TRUTH_NOT_EXPR;
+   gnu_codes[N_Op_Rotate_Left] = LROTATE_EXPR;
+   gnu_codes[N_Op_Rotate_Right] = RROTATE_EXPR;
+   gnu_codes[N_Op_Shift_Left] = LSHIFT_EXPR;
+   gnu_codes[N_Op_Shift_Right] = RSHIFT_EXPR;
+   gnu_codes[N_Op_Shift_Right_Arithmetic] = RSHIFT_EXPR;
+   gnu_codes[N_And_Then] = TRUTH_ANDIF_EXPR;
+   gnu_codes[N_Or_Else] = TRUTH_ORIF_EXPR;
+ }
+ 
+ #include "gt-ada-trans.h"
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/utils.c gcc-12.1.0/gcc/ada/gcc-interface/utils.c
*** gcc-11.3.0/gcc/ada/gcc-interface/utils.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/utils.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7089 ****
- /****************************************************************************
-  *                                                                          *
-  *                         GNAT COMPILER COMPONENTS                         *
-  *                                                                          *
-  *                                U T I L S                                 *
-  *                                                                          *
-  *                          C Implementation File                           *
-  *                                                                          *
-  *          Copyright (C) 1992-2020, Free Software Foundation, Inc.         *
-  *                                                                          *
-  * GNAT is free software;  you can  redistribute it  and/or modify it under *
-  * terms of the  GNU General Public License as published  by the Free Soft- *
-  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
-  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
-  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
-  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
-  * for  more details.  You should have received a copy of the GNU General   *
-  * Public License along with GCC; see the file COPYING3.  If not see        *
-  * <http://www.gnu.org/licenses/>.                                          *
-  *                                                                          *
-  * GNAT was originally developed  by the GNAT team at  New York University. *
-  * Extensive contributions were provided by Ada Core Technologies Inc.      *
-  *                                                                          *
-  ****************************************************************************/
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "target.h"
- #include "function.h"
- #include "tree.h"
- #include "stringpool.h"
- #include "cgraph.h"
- #include "diagnostic.h"
- #include "alias.h"
- #include "fold-const.h"
- #include "stor-layout.h"
- #include "attribs.h"
- #include "varasm.h"
- #include "toplev.h"
- #include "output.h"
- #include "debug.h"
- #include "convert.h"
- #include "common/common-target.h"
- #include "langhooks.h"
- #include "tree-dump.h"
- #include "tree-inline.h"
- 
- #include "ada.h"
- #include "types.h"
- #include "atree.h"
- #include "nlists.h"
- #include "snames.h"
- #include "uintp.h"
- #include "fe.h"
- #include "sinfo.h"
- #include "einfo.h"
- #include "ada-tree.h"
- #include "gigi.h"
- 
- /* If nonzero, pretend we are allocating at global level.  */
- int force_global;
- 
- /* The default alignment of "double" floating-point types, i.e. floating
-    point types whose size is equal to 64 bits, or 0 if this alignment is
-    not specifically capped.  */
- int double_float_alignment;
- 
- /* The default alignment of "double" or larger scalar types, i.e. scalar
-    types whose size is greater or equal to 64 bits, or 0 if this alignment
-    is not specifically capped.  */
- int double_scalar_alignment;
- 
- /* True if floating-point arithmetics may use wider intermediate results.  */
- bool fp_arith_may_widen = true;
- 
- /* Tree nodes for the various types and decls we create.  */
- tree gnat_std_decls[(int) ADT_LAST];
- 
- /* Functions to call for each of the possible raise reasons.  */
- tree gnat_raise_decls[(int) LAST_REASON_CODE + 1];
- 
- /* Likewise, but with extra info for each of the possible raise reasons.  */
- tree gnat_raise_decls_ext[(int) LAST_REASON_CODE + 1];
- 
- /* Forward declarations for handlers of attributes.  */
- static tree handle_const_attribute (tree *, tree, tree, int, bool *);
- static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
- static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
- static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
- static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
- static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
- static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
- static tree handle_stack_protect_attribute (tree *, tree, tree, int, bool *);
- static tree handle_no_stack_protector_attribute (tree *, tree, tree, int, bool *);
- static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
- static tree handle_noclone_attribute (tree *, tree, tree, int, bool *);
- static tree handle_noicf_attribute (tree *, tree, tree, int, bool *);
- static tree handle_noipa_attribute (tree *, tree, tree, int, bool *);
- static tree handle_leaf_attribute (tree *, tree, tree, int, bool *);
- static tree handle_always_inline_attribute (tree *, tree, tree, int, bool *);
- static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
- static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
- static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
- static tree handle_used_attribute (tree *, tree, tree, int, bool *);
- static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
- static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
- static tree handle_target_attribute (tree *, tree, tree, int, bool *);
- static tree handle_target_clones_attribute (tree *, tree, tree, int, bool *);
- static tree handle_vector_size_attribute (tree *, tree, tree, int, bool *);
- static tree handle_vector_type_attribute (tree *, tree, tree, int, bool *);
- 
- static const struct attribute_spec::exclusions attr_cold_hot_exclusions[] =
- {
-   { "cold", true,  true,  true  },
-   { "hot" , true,  true,  true  },
-   { NULL  , false, false, false }
- };
- 
- static const struct attribute_spec::exclusions attr_stack_protect_exclusions[] =
- {
-   { "stack_protect", true, false, false },
-   { "no_stack_protector", true, false, false },
-   { NULL, false, false, false },
- };
- 
- /* Fake handler for attributes we don't properly support, typically because
-    they'd require dragging a lot of the common-c front-end circuitry.  */
- static tree fake_attribute_handler (tree *, tree, tree, int, bool *);
- 
- /* Table of machine-independent internal attributes for Ada.  We support
-    this minimal set of attributes to accommodate the needs of builtins.  */
- const struct attribute_spec gnat_internal_attribute_table[] =
- {
-   /* { name, min_len, max_len, decl_req, type_req, fn_type_req,
-        affects_type_identity, handler, exclude } */
-   { "const",        0, 0,  true,  false, false, false,
-     handle_const_attribute, NULL },
-   { "nothrow",      0, 0,  true,  false, false, false,
-     handle_nothrow_attribute, NULL },
-   { "pure",         0, 0,  true,  false, false, false,
-     handle_pure_attribute, NULL },
-   { "no vops",      0, 0,  true,  false, false, false,
-     handle_novops_attribute, NULL },
-   { "nonnull",      0, -1, false, true,  true,  false,
-     handle_nonnull_attribute, NULL },
-   { "sentinel",     0, 1,  false, true,  true,  false,
-     handle_sentinel_attribute, NULL },
-   { "noreturn",     0, 0,  true,  false, false, false,
-     handle_noreturn_attribute, NULL },
-   { "stack_protect",0, 0, true,  false, false, false,
-     handle_stack_protect_attribute,
-     attr_stack_protect_exclusions },
-   { "no_stack_protector",0, 0, true,  false, false, false,
-     handle_no_stack_protector_attribute,
-     attr_stack_protect_exclusions },
-   { "noinline",     0, 0,  true,  false, false, false,
-     handle_noinline_attribute, NULL },
-   { "noclone",      0, 0,  true,  false, false, false,
-     handle_noclone_attribute, NULL },
-   { "no_icf",       0, 0,  true,  false, false, false,
-     handle_noicf_attribute, NULL },
-   { "noipa",        0, 0,  true,  false, false, false,
-     handle_noipa_attribute, NULL },
-   { "leaf",         0, 0,  true,  false, false, false,
-     handle_leaf_attribute, NULL },
-   { "always_inline",0, 0,  true,  false, false, false,
-     handle_always_inline_attribute, NULL },
-   { "malloc",       0, 0,  true,  false, false, false,
-     handle_malloc_attribute, NULL },
-   { "type generic", 0, 0,  false, true,  true,  false,
-     handle_type_generic_attribute, NULL },
- 
-   { "flatten",      0, 0,  true,  false, false, false,
-     handle_flatten_attribute, NULL },
-   { "used",         0, 0,  true,  false, false, false,
-     handle_used_attribute, NULL },
-   { "cold",         0, 0,  true,  false, false, false,
-     handle_cold_attribute, attr_cold_hot_exclusions },
-   { "hot",          0, 0,  true,  false, false, false,
-     handle_hot_attribute, attr_cold_hot_exclusions },
-   { "target",       1, -1, true,  false, false, false,
-     handle_target_attribute, NULL },
-   { "target_clones",1, -1, true,  false, false, false,
-     handle_target_clones_attribute, NULL },
- 
-   { "vector_size",  1, 1,  false, true,  false, false,
-     handle_vector_size_attribute, NULL },
-   { "vector_type",  0, 0,  false, true,  false, false,
-     handle_vector_type_attribute, NULL },
-   { "may_alias",    0, 0,  false, true,  false, false,
-     NULL, NULL },
- 
-   /* ??? format and format_arg are heavy and not supported, which actually
-      prevents support for stdio builtins, which we however declare as part
-      of the common builtins.def contents.  */
-   { "format",       3, 3,  false, true,  true,  false,
-     fake_attribute_handler, NULL },
-   { "format_arg",   1, 1,  false, true,  true,  false,
-     fake_attribute_handler, NULL },
- 
-   { NULL,           0, 0,  false, false, false, false,
-     NULL, NULL }
- };
- 
- /* Associates a GNAT tree node to a GCC tree node. It is used in
-    `save_gnu_tree', `get_gnu_tree' and `present_gnu_tree'. See documentation
-    of `save_gnu_tree' for more info.  */
- static GTY((length ("max_gnat_nodes"))) tree *associate_gnat_to_gnu;
- 
- #define GET_GNU_TREE(GNAT_ENTITY)	\
-   associate_gnat_to_gnu[(GNAT_ENTITY) - First_Node_Id]
- 
- #define SET_GNU_TREE(GNAT_ENTITY,VAL)	\
-   associate_gnat_to_gnu[(GNAT_ENTITY) - First_Node_Id] = (VAL)
- 
- #define PRESENT_GNU_TREE(GNAT_ENTITY)	\
-   (associate_gnat_to_gnu[(GNAT_ENTITY) - First_Node_Id] != NULL_TREE)
- 
- /* Associates a GNAT entity to a GCC tree node used as a dummy, if any.  */
- static GTY((length ("max_gnat_nodes"))) tree *dummy_node_table;
- 
- #define GET_DUMMY_NODE(GNAT_ENTITY)	\
-   dummy_node_table[(GNAT_ENTITY) - First_Node_Id]
- 
- #define SET_DUMMY_NODE(GNAT_ENTITY,VAL)	\
-   dummy_node_table[(GNAT_ENTITY) - First_Node_Id] = (VAL)
- 
- #define PRESENT_DUMMY_NODE(GNAT_ENTITY)	\
-   (dummy_node_table[(GNAT_ENTITY) - First_Node_Id] != NULL_TREE)
- 
- /* This variable keeps a table for types for each precision so that we only
-    allocate each of them once. Signed and unsigned types are kept separate.
- 
-    Note that these types are only used when fold-const requests something
-    special.  Perhaps we should NOT share these types; we'll see how it
-    goes later.  */
- static GTY(()) tree signed_and_unsigned_types[2 * MAX_BITS_PER_WORD + 1][2];
- 
- /* Likewise for float types, but record these by mode.  */
- static GTY(()) tree float_types[NUM_MACHINE_MODES];
- 
- /* For each binding contour we allocate a binding_level structure to indicate
-    the binding depth.  */
- 
- struct GTY((chain_next ("%h.chain"))) gnat_binding_level {
-   /* The binding level containing this one (the enclosing binding level). */
-   struct gnat_binding_level *chain;
-   /* The BLOCK node for this level.  */
-   tree block;
-   /* If nonzero, the setjmp buffer that needs to be updated for any
-      variable-sized definition within this context.  */
-   tree jmpbuf_decl;
- };
- 
- /* The binding level currently in effect.  */
- static GTY(()) struct gnat_binding_level *current_binding_level;
- 
- /* A chain of gnat_binding_level structures awaiting reuse.  */
- static GTY((deletable)) struct gnat_binding_level *free_binding_level;
- 
- /* The context to be used for global declarations.  */
- static GTY(()) tree global_context;
- 
- /* An array of global declarations.  */
- static GTY(()) vec<tree, va_gc> *global_decls;
- 
- /* An array of builtin function declarations.  */
- static GTY(()) vec<tree, va_gc> *builtin_decls;
- 
- /* A chain of unused BLOCK nodes. */
- static GTY((deletable)) tree free_block_chain;
- 
- /* A hash table of packable types.  It is modelled on the generic type
-    hash table in tree.c, which must thus be used as a reference.  */
- 
- struct GTY((for_user)) packable_type_hash
- {
-   hashval_t hash;
-   tree type;
- };
- 
- struct packable_type_hasher : ggc_cache_ptr_hash<packable_type_hash>
- {
-   static inline hashval_t hash (packable_type_hash *t) { return t->hash; }
-   static bool equal (packable_type_hash *a, packable_type_hash *b);
- 
-   static int
-   keep_cache_entry (packable_type_hash *&t)
-   {
-     return ggc_marked_p (t->type);
-   }
- };
- 
- static GTY ((cache)) hash_table<packable_type_hasher> *packable_type_hash_table;
- 
- /* A hash table of padded types.  It is modelled on the generic type
-    hash table in tree.c, which must thus be used as a reference.  */
- 
- struct GTY((for_user)) pad_type_hash
- {
-   hashval_t hash;
-   tree type;
- };
- 
- struct pad_type_hasher : ggc_cache_ptr_hash<pad_type_hash>
- {
-   static inline hashval_t hash (pad_type_hash *t) { return t->hash; }
-   static bool equal (pad_type_hash *a, pad_type_hash *b);
- 
-   static int
-   keep_cache_entry (pad_type_hash *&t)
-   {
-     return ggc_marked_p (t->type);
-   }
- };
- 
- static GTY ((cache)) hash_table<pad_type_hasher> *pad_type_hash_table;
- 
- static tree merge_sizes (tree, tree, tree, bool, bool);
- static tree fold_bit_position (const_tree);
- static tree compute_related_constant (tree, tree);
- static tree split_plus (tree, tree *);
- static tree float_type_for_precision (int, machine_mode);
- static tree convert_to_fat_pointer (tree, tree);
- static unsigned int scale_by_factor_of (tree, unsigned int);
- 
- /* Linked list used as a queue to defer the initialization of the DECL_CONTEXT
-    of ..._DECL nodes and of the TYPE_CONTEXT of ..._TYPE nodes.  */
- struct deferred_decl_context_node
- {
-   /* The ..._DECL node to work on.  */
-   tree decl;
- 
-   /* The corresponding entity's Scope.  */
-   Entity_Id gnat_scope;
- 
-   /* The value of force_global when DECL was pushed.  */
-   int force_global;
- 
-   /* The list of ..._TYPE nodes to propagate the context to.  */
-   vec<tree> types;
- 
-   /* The next queue item.  */
-   struct deferred_decl_context_node *next;
- };
- 
- static struct deferred_decl_context_node *deferred_decl_context_queue = NULL;
- 
- /* Defer the initialization of DECL's DECL_CONTEXT attribute, scheduling to
-    feed it with the elaboration of GNAT_SCOPE.  */
- static struct deferred_decl_context_node *
- add_deferred_decl_context (tree decl, Entity_Id gnat_scope, int force_global);
- 
- /* Defer the initialization of TYPE's TYPE_CONTEXT attribute, scheduling to
-    feed it with the DECL_CONTEXT computed as part of N as soon as it is
-    computed.  */
- static void add_deferred_type_context (struct deferred_decl_context_node *n,
- 				       tree type);
- 
- /* Initialize data structures of the utils.c module.  */
- 
- void
- init_gnat_utils (void)
- {
-   /* Initialize the association of GNAT nodes to GCC trees.  */
-   associate_gnat_to_gnu = ggc_cleared_vec_alloc<tree> (max_gnat_nodes);
- 
-   /* Initialize the association of GNAT nodes to GCC trees as dummies.  */
-   dummy_node_table = ggc_cleared_vec_alloc<tree> (max_gnat_nodes);
- 
-   /* Initialize the hash table of packable types.  */
-   packable_type_hash_table = hash_table<packable_type_hasher>::create_ggc (512);
- 
-   /* Initialize the hash table of padded types.  */
-   pad_type_hash_table = hash_table<pad_type_hasher>::create_ggc (512);
- }
- 
- /* Destroy data structures of the utils.c module.  */
- 
- void
- destroy_gnat_utils (void)
- {
-   /* Destroy the association of GNAT nodes to GCC trees.  */
-   ggc_free (associate_gnat_to_gnu);
-   associate_gnat_to_gnu = NULL;
- 
-   /* Destroy the association of GNAT nodes to GCC trees as dummies.  */
-   ggc_free (dummy_node_table);
-   dummy_node_table = NULL;
- 
-   /* Destroy the hash table of packable types.  */
-   packable_type_hash_table->empty ();
-   packable_type_hash_table = NULL;
- 
-   /* Destroy the hash table of padded types.  */
-   pad_type_hash_table->empty ();
-   pad_type_hash_table = NULL;
- }
- 
- /* GNAT_ENTITY is a GNAT tree node for an entity.  Associate GNU_DECL, a GCC
-    tree node, with GNAT_ENTITY.  If GNU_DECL is not a ..._DECL node, abort.
-    If NO_CHECK is true, the latter check is suppressed.
- 
-    If GNU_DECL is zero, reset a previous association.  */
- 
- void
- save_gnu_tree (Entity_Id gnat_entity, tree gnu_decl, bool no_check)
- {
-   /* Check that GNAT_ENTITY is not already defined and that it is being set
-      to something which is a decl.  If that is not the case, this usually
-      means GNAT_ENTITY is defined twice, but occasionally is due to some
-      Gigi problem.  */
-   gcc_assert (!(gnu_decl
- 		&& (PRESENT_GNU_TREE (gnat_entity)
- 		    || (!no_check && !DECL_P (gnu_decl)))));
- 
-   SET_GNU_TREE (gnat_entity, gnu_decl);
- }
- 
- /* GNAT_ENTITY is a GNAT tree node for an entity.  Return the GCC tree node
-    that was associated with it.  If there is no such tree node, abort.
- 
-    In some cases, such as delayed elaboration or expressions that need to
-    be elaborated only once, GNAT_ENTITY is really not an entity.  */
- 
- tree
- get_gnu_tree (Entity_Id gnat_entity)
- {
-   gcc_assert (PRESENT_GNU_TREE (gnat_entity));
-   return GET_GNU_TREE (gnat_entity);
- }
- 
- /* Return nonzero if a GCC tree has been associated with GNAT_ENTITY.  */
- 
- bool
- present_gnu_tree (Entity_Id gnat_entity)
- {
-   return PRESENT_GNU_TREE (gnat_entity);
- }
- 
- /* Make a dummy type corresponding to GNAT_TYPE.  */
- 
- tree
- make_dummy_type (Entity_Id gnat_type)
- {
-   Entity_Id gnat_equiv = Gigi_Equivalent_Type (Underlying_Type (gnat_type));
-   tree gnu_type, debug_type;
- 
-   /* If there was no equivalent type (can only happen when just annotating
-      types) or underlying type, go back to the original type.  */
-   if (No (gnat_equiv))
-     gnat_equiv = gnat_type;
- 
-   /* If it there already a dummy type, use that one.  Else make one.  */
-   if (PRESENT_DUMMY_NODE (gnat_equiv))
-     return GET_DUMMY_NODE (gnat_equiv);
- 
-   /* If this is a record, make a RECORD_TYPE or UNION_TYPE; else make
-      an ENUMERAL_TYPE.  */
-   gnu_type = make_node (Is_Record_Type (gnat_equiv)
- 			? tree_code_for_record_type (gnat_equiv)
- 			: ENUMERAL_TYPE);
-   TYPE_NAME (gnu_type) = get_entity_name (gnat_type);
-   TYPE_DUMMY_P (gnu_type) = 1;
-   TYPE_STUB_DECL (gnu_type)
-     = create_type_stub_decl (TYPE_NAME (gnu_type), gnu_type);
-   if (Is_By_Reference_Type (gnat_equiv))
-     TYPE_BY_REFERENCE_P (gnu_type) = 1;
-   if (Has_Discriminants (gnat_equiv))
-     decl_attributes (&gnu_type,
- 		     tree_cons (get_identifier ("may_alias"), NULL_TREE,
- 				NULL_TREE),
- 		     ATTR_FLAG_TYPE_IN_PLACE);
- 
-   SET_DUMMY_NODE (gnat_equiv, gnu_type);
- 
-   /* Create a debug type so that debuggers only see an unspecified type.  */
-   if (Needs_Debug_Info (gnat_type))
-     {
-       debug_type = make_node (LANG_TYPE);
-       TYPE_NAME (debug_type) = TYPE_NAME (gnu_type);
-       TYPE_ARTIFICIAL (debug_type) = TYPE_ARTIFICIAL (gnu_type);
-       SET_TYPE_DEBUG_TYPE (gnu_type, debug_type);
-     }
- 
-   return gnu_type;
- }
- 
- /* Return the dummy type that was made for GNAT_TYPE, if any.  */
- 
- tree
- get_dummy_type (Entity_Id gnat_type)
- {
-   return GET_DUMMY_NODE (gnat_type);
- }
- 
- /* Build dummy fat and thin pointer types whose designated type is specified
-    by GNAT_DESIG_TYPE/GNU_DESIG_TYPE and attach them to the latter.  */
- 
- void
- build_dummy_unc_pointer_types (Entity_Id gnat_desig_type, tree gnu_desig_type)
- {
-   tree gnu_template_type, gnu_ptr_template, gnu_array_type, gnu_ptr_array;
-   tree gnu_fat_type, fields, gnu_object_type;
- 
-   gnu_template_type = make_node (RECORD_TYPE);
-   TYPE_NAME (gnu_template_type) = create_concat_name (gnat_desig_type, "XUB");
-   TYPE_DUMMY_P (gnu_template_type) = 1;
-   gnu_ptr_template = build_pointer_type (gnu_template_type);
- 
-   gnu_array_type = make_node (ENUMERAL_TYPE);
-   TYPE_NAME (gnu_array_type) = create_concat_name (gnat_desig_type, "XUA");
-   TYPE_DUMMY_P (gnu_array_type) = 1;
-   gnu_ptr_array = build_pointer_type (gnu_array_type);
- 
-   gnu_fat_type = make_node (RECORD_TYPE);
-   /* Build a stub DECL to trigger the special processing for fat pointer types
-      in gnat_pushdecl.  */
-   TYPE_NAME (gnu_fat_type)
-     = create_type_stub_decl (create_concat_name (gnat_desig_type, "XUP"),
- 			     gnu_fat_type);
-   fields = create_field_decl (get_identifier ("P_ARRAY"), gnu_ptr_array,
- 			      gnu_fat_type, NULL_TREE, NULL_TREE, 0, 1);
-   DECL_CHAIN (fields)
-     = create_field_decl (get_identifier ("P_BOUNDS"), gnu_ptr_template,
- 			 gnu_fat_type, NULL_TREE, NULL_TREE, 0, 1);
-   finish_fat_pointer_type (gnu_fat_type, fields);
-   SET_TYPE_UNCONSTRAINED_ARRAY (gnu_fat_type, gnu_desig_type);
-   /* Suppress debug info until after the type is completed.  */
-   TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (gnu_fat_type)) = 1;
- 
-   gnu_object_type = make_node (RECORD_TYPE);
-   TYPE_NAME (gnu_object_type) = create_concat_name (gnat_desig_type, "XUT");
-   TYPE_DUMMY_P (gnu_object_type) = 1;
- 
-   TYPE_POINTER_TO (gnu_desig_type) = gnu_fat_type;
-   TYPE_REFERENCE_TO (gnu_desig_type) = gnu_fat_type;
-   TYPE_OBJECT_RECORD_TYPE (gnu_desig_type) = gnu_object_type;
- }
- 
- /* Return true if we are in the global binding level.  */
- 
- bool
- global_bindings_p (void)
- {
-   return force_global || !current_function_decl;
- }
- 
- /* Enter a new binding level.  */
- 
- void
- gnat_pushlevel (void)
- {
-   struct gnat_binding_level *newlevel = NULL;
- 
-   /* Reuse a struct for this binding level, if there is one.  */
-   if (free_binding_level)
-     {
-       newlevel = free_binding_level;
-       free_binding_level = free_binding_level->chain;
-     }
-   else
-     newlevel = ggc_alloc<gnat_binding_level> ();
- 
-   /* Use a free BLOCK, if any; otherwise, allocate one.  */
-   if (free_block_chain)
-     {
-       newlevel->block = free_block_chain;
-       free_block_chain = BLOCK_CHAIN (free_block_chain);
-       BLOCK_CHAIN (newlevel->block) = NULL_TREE;
-     }
-   else
-     newlevel->block = make_node (BLOCK);
- 
-   /* Point the BLOCK we just made to its parent.  */
-   if (current_binding_level)
-     BLOCK_SUPERCONTEXT (newlevel->block) = current_binding_level->block;
- 
-   BLOCK_VARS (newlevel->block) = NULL_TREE;
-   BLOCK_SUBBLOCKS (newlevel->block) = NULL_TREE;
-   TREE_USED (newlevel->block) = 1;
- 
-   /* Add this level to the front of the chain (stack) of active levels.  */
-   newlevel->chain = current_binding_level;
-   newlevel->jmpbuf_decl = NULL_TREE;
-   current_binding_level = newlevel;
- }
- 
- /* Set SUPERCONTEXT of the BLOCK for the current binding level to FNDECL
-    and point FNDECL to this BLOCK.  */
- 
- void
- set_current_block_context (tree fndecl)
- {
-   BLOCK_SUPERCONTEXT (current_binding_level->block) = fndecl;
-   DECL_INITIAL (fndecl) = current_binding_level->block;
-   set_block_for_group (current_binding_level->block);
- }
- 
- /* Set the jmpbuf_decl for the current binding level to DECL.  */
- 
- void
- set_block_jmpbuf_decl (tree decl)
- {
-   current_binding_level->jmpbuf_decl = decl;
- }
- 
- /* Get the jmpbuf_decl, if any, for the current binding level.  */
- 
- tree
- get_block_jmpbuf_decl (void)
- {
-   return current_binding_level->jmpbuf_decl;
- }
- 
- /* Exit a binding level.  Set any BLOCK into the current code group.  */
- 
- void
- gnat_poplevel (void)
- {
-   struct gnat_binding_level *level = current_binding_level;
-   tree block = level->block;
- 
-   BLOCK_VARS (block) = nreverse (BLOCK_VARS (block));
-   BLOCK_SUBBLOCKS (block) = blocks_nreverse (BLOCK_SUBBLOCKS (block));
- 
-   /* If this is a function-level BLOCK don't do anything.  Otherwise, if there
-      are no variables free the block and merge its subblocks into those of its
-      parent block.  Otherwise, add it to the list of its parent.  */
-   if (TREE_CODE (BLOCK_SUPERCONTEXT (block)) == FUNCTION_DECL)
-     ;
-   else if (!BLOCK_VARS (block))
-     {
-       BLOCK_SUBBLOCKS (level->chain->block)
- 	= block_chainon (BLOCK_SUBBLOCKS (block),
- 			 BLOCK_SUBBLOCKS (level->chain->block));
-       BLOCK_CHAIN (block) = free_block_chain;
-       free_block_chain = block;
-     }
-   else
-     {
-       BLOCK_CHAIN (block) = BLOCK_SUBBLOCKS (level->chain->block);
-       BLOCK_SUBBLOCKS (level->chain->block) = block;
-       TREE_USED (block) = 1;
-       set_block_for_group (block);
-     }
- 
-   /* Free this binding structure.  */
-   current_binding_level = level->chain;
-   level->chain = free_binding_level;
-   free_binding_level = level;
- }
- 
- /* Exit a binding level and discard the associated BLOCK.  */
- 
- void
- gnat_zaplevel (void)
- {
-   struct gnat_binding_level *level = current_binding_level;
-   tree block = level->block;
- 
-   BLOCK_CHAIN (block) = free_block_chain;
-   free_block_chain = block;
- 
-   /* Free this binding structure.  */
-   current_binding_level = level->chain;
-   level->chain = free_binding_level;
-   free_binding_level = level;
- }
- 
- /* Set the context of TYPE and its parallel types (if any) to CONTEXT.  */
- 
- static void
- gnat_set_type_context (tree type, tree context)
- {
-   tree decl = TYPE_STUB_DECL (type);
- 
-   TYPE_CONTEXT (type) = context;
- 
-   while (decl && DECL_PARALLEL_TYPE (decl))
-     {
-       tree parallel_type = DECL_PARALLEL_TYPE (decl);
- 
-       /* Give a context to the parallel types and their stub decl, if any.
- 	 Some parallel types seems to be present in multiple parallel type
- 	 chains, so don't mess with their context if they already have one.  */
-       if (!TYPE_CONTEXT (parallel_type))
- 	{
- 	  if (TYPE_STUB_DECL (parallel_type))
- 	    DECL_CONTEXT (TYPE_STUB_DECL (parallel_type)) = context;
- 	  TYPE_CONTEXT (parallel_type) = context;
- 	}
- 
-       decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
-     }
- }
- 
- /* Return the innermost scope, starting at GNAT_NODE, we are be interested in
-    the debug info, or Empty if there is no such scope.  If not NULL, set
-    IS_SUBPROGRAM to whether the returned entity is a subprogram.  */
- 
- Entity_Id
- get_debug_scope (Node_Id gnat_node, bool *is_subprogram)
- {
-   Entity_Id gnat_entity;
- 
-   if (is_subprogram)
-     *is_subprogram = false;
- 
-   if (Nkind (gnat_node) == N_Defining_Identifier
-       || Nkind (gnat_node) == N_Defining_Operator_Symbol)
-     gnat_entity = Scope (gnat_node);
-   else
-     return Empty;
- 
-   while (Present (gnat_entity))
-     {
-       switch (Ekind (gnat_entity))
- 	{
- 	case E_Function:
- 	case E_Procedure:
- 	  if (Present (Protected_Body_Subprogram (gnat_entity)))
- 	    gnat_entity = Protected_Body_Subprogram (gnat_entity);
- 
- 	  /* If the scope is a subprogram, then just rely on
- 	     current_function_decl, so that we don't have to defer
- 	     anything.  This is needed because other places rely on the
- 	     validity of the DECL_CONTEXT attribute of FUNCTION_DECL nodes. */
- 	  if (is_subprogram)
- 	    *is_subprogram = true;
- 	  return gnat_entity;
- 
- 	case E_Record_Type:
- 	case E_Record_Subtype:
- 	  return gnat_entity;
- 
- 	default:
- 	  /* By default, we are not interested in this particular scope: go to
- 	     the outer one.  */
- 	  break;
- 	}
- 
-       gnat_entity = Scope (gnat_entity);
-     }
- 
-   return Empty;
- }
- 
- /* If N is NULL, set TYPE's context to CONTEXT.  Defer this to the processing
-    of N otherwise.  */
- 
- static void
- defer_or_set_type_context (tree type, tree context,
- 			   struct deferred_decl_context_node *n)
- {
-   if (n)
-     add_deferred_type_context (n, type);
-   else
-     gnat_set_type_context (type, context);
- }
- 
- /* Return global_context, but create it first if need be.  */
- 
- static tree
- get_global_context (void)
- {
-   if (!global_context)
-     {
-       global_context
- 	= build_translation_unit_decl (get_identifier (main_input_filename));
-       debug_hooks->register_main_translation_unit (global_context);
-     }
- 
-   return global_context;
- }
- 
- /* Record DECL as belonging to the current lexical scope and use GNAT_NODE
-    for location information and flag propagation.  */
- 
- void
- gnat_pushdecl (tree decl, Node_Id gnat_node)
- {
-   tree context = NULL_TREE;
-   struct deferred_decl_context_node *deferred_decl_context = NULL;
- 
-   /* If explicitely asked to make DECL global or if it's an imported nested
-      object, short-circuit the regular Scope-based context computation.  */
-   if (!((TREE_PUBLIC (decl) && DECL_EXTERNAL (decl)) || force_global == 1))
-     {
-       /* Rely on the GNAT scope, or fallback to the current_function_decl if
- 	 the GNAT scope reached the global scope, if it reached a subprogram
- 	 or the declaration is a subprogram or a variable (for them we skip
- 	 intermediate context types because the subprogram body elaboration
- 	 machinery and the inliner both expect a subprogram context).
- 
- 	 Falling back to current_function_decl is necessary for implicit
- 	 subprograms created by gigi, such as the elaboration subprograms.  */
-       bool context_is_subprogram = false;
-       const Entity_Id gnat_scope
-         = get_debug_scope (gnat_node, &context_is_subprogram);
- 
-       if (Present (gnat_scope)
- 	  && !context_is_subprogram
- 	  && TREE_CODE (decl) != FUNCTION_DECL
- 	  && TREE_CODE (decl) != VAR_DECL)
- 	/* Always assume the scope has not been elaborated, thus defer the
- 	   context propagation to the time its elaboration will be
- 	   available.  */
- 	deferred_decl_context
- 	  = add_deferred_decl_context (decl, gnat_scope, force_global);
- 
-       /* External declarations (when force_global > 0) may not be in a
- 	 local context.  */
-       else if (current_function_decl && force_global == 0)
- 	context = current_function_decl;
-     }
- 
-   /* If either we are forced to be in global mode or if both the GNAT scope and
-      the current_function_decl did not help in determining the context, use the
-      global scope.  */
-   if (!deferred_decl_context && !context)
-     context = get_global_context ();
- 
-   /* Functions imported in another function are not really nested.
-      For really nested functions mark them initially as needing
-      a static chain for uses of that flag before unnesting;
-      lower_nested_functions will then recompute it.  */
-   if (TREE_CODE (decl) == FUNCTION_DECL
-       && !TREE_PUBLIC (decl)
-       && context
-       && (TREE_CODE (context) == FUNCTION_DECL
- 	  || decl_function_context (context)))
-     DECL_STATIC_CHAIN (decl) = 1;
- 
-   if (!deferred_decl_context)
-     DECL_CONTEXT (decl) = context;
- 
-   TREE_NO_WARNING (decl) = (No (gnat_node) || Warnings_Off (gnat_node));
- 
-   /* Set the location of DECL and emit a declaration for it.  */
-   if (Present (gnat_node) && !renaming_from_instantiation_p (gnat_node))
-     Sloc_to_locus (Sloc (gnat_node), &DECL_SOURCE_LOCATION (decl));
- 
-   add_decl_expr (decl, gnat_node);
- 
-   /* Put the declaration on the list.  The list of declarations is in reverse
-      order.  The list will be reversed later.  Put global declarations in the
-      globals list and local ones in the current block.  But skip TYPE_DECLs
-      for UNCONSTRAINED_ARRAY_TYPE in both cases, as they will cause trouble
-      with the debugger and aren't needed anyway.  */
-   if (!(TREE_CODE (decl) == TYPE_DECL
-         && TREE_CODE (TREE_TYPE (decl)) == UNCONSTRAINED_ARRAY_TYPE))
-     {
-       /* External declarations must go to the binding level they belong to.
- 	 This will make corresponding imported entities are available in the
- 	 debugger at the proper time.  */
-       if (DECL_EXTERNAL (decl)
- 	  && TREE_CODE (decl) == FUNCTION_DECL
- 	  && fndecl_built_in_p (decl))
- 	vec_safe_push (builtin_decls, decl);
-       else if (global_bindings_p ())
- 	vec_safe_push (global_decls, decl);
-       else
- 	{
- 	  DECL_CHAIN (decl) = BLOCK_VARS (current_binding_level->block);
- 	  BLOCK_VARS (current_binding_level->block) = decl;
- 	}
-     }
- 
-   /* For the declaration of a type, set its name either if it isn't already
-      set or if the previous type name was not derived from a source name.
-      We'd rather have the type named with a real name and all the pointer
-      types to the same object have the same node, except when the names are
-      both derived from source names.  */
-   if (TREE_CODE (decl) == TYPE_DECL && DECL_NAME (decl))
-     {
-       tree t = TREE_TYPE (decl);
- 
-       /* Array and pointer types aren't tagged types in the C sense so we need
- 	 to generate a typedef in DWARF for them and make sure it is preserved,
- 	 unless the type is artificial.  */
-       if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL)
- 	  && ((TREE_CODE (t) != ARRAY_TYPE && TREE_CODE (t) != POINTER_TYPE)
- 	      || DECL_ARTIFICIAL (decl)))
- 	;
-       /* For array and pointer types, create the DECL_ORIGINAL_TYPE that will
- 	 generate the typedef in DWARF.  Also do that for fat pointer types
- 	 because, even though they are tagged types in the C sense, they are
- 	 still XUP types attached to the base array type at this point.  */
-       else if (!DECL_ARTIFICIAL (decl)
- 	       && (TREE_CODE (t) == ARRAY_TYPE
- 		   || TREE_CODE (t) == POINTER_TYPE
- 		   || TYPE_IS_FAT_POINTER_P (t)))
- 	{
- 	  tree tt = build_variant_type_copy (t);
- 	  TYPE_NAME (tt) = decl;
- 	  defer_or_set_type_context (tt,
- 				     DECL_CONTEXT (decl),
- 				     deferred_decl_context);
- 	  TREE_TYPE (decl) = tt;
- 	  if (TYPE_NAME (t)
- 	      && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
- 	      && DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
- 	    DECL_ORIGINAL_TYPE (decl) = DECL_ORIGINAL_TYPE (TYPE_NAME (t));
- 	  else
- 	    DECL_ORIGINAL_TYPE (decl) = t;
- 	  /* Array types need to have a name so that they can be related to
- 	     their GNAT encodings.  */
- 	  if (TREE_CODE (t) == ARRAY_TYPE && !TYPE_NAME (t))
- 	    TYPE_NAME (t) = DECL_NAME (decl);
- 	  /* Remark the canonical fat pointer type as artificial.  */
- 	  if (TYPE_IS_FAT_POINTER_P (t))
- 	    TYPE_ARTIFICIAL (t) = 1;
- 	  t = NULL_TREE;
- 	}
-       else if (TYPE_NAME (t)
- 	       && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
- 	       && DECL_ARTIFICIAL (TYPE_NAME (t)) && !DECL_ARTIFICIAL (decl))
- 	;
-       else
- 	t = NULL_TREE;
- 
-       /* Propagate the name to all the variants, this is needed for the type
- 	 qualifiers machinery to work properly (see check_qualified_type).
- 	 Also propagate the context to them.  Note that it will be propagated
- 	 to all parallel types too thanks to gnat_set_type_context.  */
-       if (t)
- 	for (t = TYPE_MAIN_VARIANT (t); t; t = TYPE_NEXT_VARIANT (t))
- 	  /* ??? Because of the previous kludge, we can have variants of fat
- 	     pointer types with different names.  */
- 	  if (!(TYPE_IS_FAT_POINTER_P (t)
- 		&& TYPE_NAME (t)
- 		&& TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
- 	    {
- 	      TYPE_NAME (t) = decl;
- 	      defer_or_set_type_context (t,
- 					 DECL_CONTEXT (decl),
- 					 deferred_decl_context);
- 	    }
-     }
- }
- 
- /* Create a record type that contains a SIZE bytes long field of TYPE with a
-    starting bit position so that it is aligned to ALIGN bits, and leaving at
-    least ROOM bytes free before the field.  BASE_ALIGN is the alignment the
-    record is guaranteed to get.  GNAT_NODE is used for the position of the
-    associated TYPE_DECL.  */
- 
- tree
- make_aligning_type (tree type, unsigned int align, tree size,
- 		    unsigned int base_align, int room, Node_Id gnat_node)
- {
-   /* We will be crafting a record type with one field at a position set to be
-      the next multiple of ALIGN past record'address + room bytes.  We use a
-      record placeholder to express record'address.  */
-   tree record_type = make_node (RECORD_TYPE);
-   tree record = build0 (PLACEHOLDER_EXPR, record_type);
- 
-   tree record_addr_st
-     = convert (sizetype, build_unary_op (ADDR_EXPR, NULL_TREE, record));
- 
-   /* The diagram below summarizes the shape of what we manipulate:
- 
-                     <--------- pos ---------->
-                 {  +------------+-------------+-----------------+
-       record  =>{  |############|     ...     | field (type)    |
-                 {  +------------+-------------+-----------------+
- 		   |<-- room -->|<- voffset ->|<---- size ----->|
- 		   o            o
- 		   |            |
- 		   record_addr  vblock_addr
- 
-      Every length is in sizetype bytes there, except "pos" which has to be
-      set as a bit position in the GCC tree for the record.  */
-   tree room_st = size_int (room);
-   tree vblock_addr_st = size_binop (PLUS_EXPR, record_addr_st, room_st);
-   tree voffset_st, pos, field;
- 
-   tree name = TYPE_IDENTIFIER (type);
- 
-   name = concat_name (name, "ALIGN");
-   TYPE_NAME (record_type) = name;
- 
-   /* Compute VOFFSET and then POS.  The next byte position multiple of some
-      alignment after some address is obtained by "and"ing the alignment minus
-      1 with the two's complement of the address.   */
-   voffset_st = size_binop (BIT_AND_EXPR,
- 			   fold_build1 (NEGATE_EXPR, sizetype, vblock_addr_st),
- 			   size_int ((align / BITS_PER_UNIT) - 1));
- 
-   /* POS = (ROOM + VOFFSET) * BIT_PER_UNIT, in bitsizetype.  */
-   pos = size_binop (MULT_EXPR,
- 		    convert (bitsizetype,
- 			     size_binop (PLUS_EXPR, room_st, voffset_st)),
-                     bitsize_unit_node);
- 
-   /* Craft the GCC record representation.  We exceptionally do everything
-      manually here because 1) our generic circuitry is not quite ready to
-      handle the complex position/size expressions we are setting up, 2) we
-      have a strong simplifying factor at hand: we know the maximum possible
-      value of voffset, and 3) we have to set/reset at least the sizes in
-      accordance with this maximum value anyway, as we need them to convey
-      what should be "alloc"ated for this type.
- 
-      Use -1 as the 'addressable' indication for the field to prevent the
-      creation of a bitfield.  We don't need one, it would have damaging
-      consequences on the alignment computation, and create_field_decl would
-      make one without this special argument, for instance because of the
-      complex position expression.  */
-   field = create_field_decl (get_identifier ("F"), type, record_type, size,
- 			     pos, 1, -1);
-   TYPE_FIELDS (record_type) = field;
- 
-   SET_TYPE_ALIGN (record_type, base_align);
-   TYPE_USER_ALIGN (record_type) = 1;
- 
-   TYPE_SIZE (record_type)
-     = size_binop (PLUS_EXPR,
-                   size_binop (MULT_EXPR, convert (bitsizetype, size),
-                               bitsize_unit_node),
- 		  bitsize_int (align + room * BITS_PER_UNIT));
-   TYPE_SIZE_UNIT (record_type)
-     = size_binop (PLUS_EXPR, size,
- 		  size_int (room + align / BITS_PER_UNIT));
- 
-   SET_TYPE_MODE (record_type, BLKmode);
-   relate_alias_sets (record_type, type, ALIAS_SET_COPY);
- 
-   /* Declare it now since it will never be declared otherwise.  This is
-      necessary to ensure that its subtrees are properly marked.  */
-   create_type_decl (name, record_type, true, false, gnat_node);
- 
-   return record_type;
- }
- 
- /* Return true iff the packable types are equivalent.  */
- 
- bool
- packable_type_hasher::equal (packable_type_hash *t1, packable_type_hash *t2)
- {
-   tree type1, type2;
- 
-   if (t1->hash != t2->hash)
-     return 0;
- 
-   type1 = t1->type;
-   type2 = t2->type;
- 
-   /* We consider that packable types are equivalent if they have the same name,
-      size, alignment, RM size and storage order. Taking the mode into account
-      is redundant since it is determined by the others.  */
-   return
-     TYPE_NAME (type1) == TYPE_NAME (type2)
-     && TYPE_SIZE (type1) == TYPE_SIZE (type2)
-     && TYPE_ALIGN (type1) == TYPE_ALIGN (type2)
-     && TYPE_ADA_SIZE (type1) == TYPE_ADA_SIZE (type2)
-     && TYPE_REVERSE_STORAGE_ORDER (type1) == TYPE_REVERSE_STORAGE_ORDER (type2);
- }
- 
- /* Compute the hash value for the packable TYPE.  */
- 
- static hashval_t
- hash_packable_type (tree type)
- {
-   hashval_t hashcode;
- 
-   hashcode = iterative_hash_expr (TYPE_NAME (type), 0);
-   hashcode = iterative_hash_expr (TYPE_SIZE (type), hashcode);
-   hashcode = iterative_hash_hashval_t (TYPE_ALIGN (type), hashcode);
-   hashcode = iterative_hash_expr (TYPE_ADA_SIZE (type), hashcode);
-   hashcode
-     = iterative_hash_hashval_t (TYPE_REVERSE_STORAGE_ORDER (type), hashcode);
- 
-   return hashcode;
- }
- 
- /* Look up the packable TYPE in the hash table and return its canonical version
-    if it exists; otherwise, insert it into the hash table.  */
- 
- static tree
- canonicalize_packable_type (tree type)
- {
-   const hashval_t hashcode = hash_packable_type (type);
-   struct packable_type_hash in, *h, **slot;
- 
-   in.hash = hashcode;
-   in.type = type;
-   slot = packable_type_hash_table->find_slot_with_hash (&in, hashcode, INSERT);
-   h = *slot;
-   if (!h)
-     {
-       h = ggc_alloc<packable_type_hash> ();
-       h->hash = hashcode;
-       h->type = type;
-       *slot = h;
-     }
- 
-   return h->type;
- }
- 
- /* TYPE is an ARRAY_TYPE that is being used as the type of a field in a packed
-    record.  See if we can rewrite it as a type that has non-BLKmode, which we
-    can pack tighter in the packed record.  If so, return the new type; if not,
-    return the original type.  */
- 
- static tree
- make_packable_array_type (tree type)
- {
-   const unsigned HOST_WIDE_INT size = tree_to_uhwi (TYPE_SIZE (type));
-   unsigned HOST_WIDE_INT new_size;
-   unsigned int new_align;
- 
-   /* No point in doing anything if the size is either zero or too large for an
-      integral mode, or if the type already has non-BLKmode.  */
-   if (size == 0 || size > MAX_FIXED_MODE_SIZE || TYPE_MODE (type) != BLKmode)
-     return type;
- 
-   /* Punt if the component type is an aggregate type for now.  */
-   if (AGGREGATE_TYPE_P (TREE_TYPE (type)))
-     return type;
- 
-   tree new_type = copy_type (type);
- 
-   new_size = ceil_pow2 (size);
-   new_align = MIN (new_size, BIGGEST_ALIGNMENT);
-   SET_TYPE_ALIGN (new_type, new_align);
- 
-   TYPE_SIZE (new_type) = bitsize_int (new_size);
-   TYPE_SIZE_UNIT (new_type) = size_int (new_size / BITS_PER_UNIT);
- 
-   SET_TYPE_MODE (new_type, mode_for_size (new_size, MODE_INT, 1).else_blk ());
- 
-   return new_type;
- }
- 
- /* TYPE is a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE that is being used
-    as the type of a field in a packed record if IN_RECORD is true, or as
-    the component type of a packed array if IN_RECORD is false.  See if we
-    can rewrite it either as a type that has non-BLKmode, which we can pack
-    tighter in the packed record case, or as a smaller type with at most
-    MAX_ALIGN alignment if the value is non-zero.  If so, return the new
-    type; if not, return the original type.  */
- 
- tree
- make_packable_type (tree type, bool in_record, unsigned int max_align)
- {
-   const unsigned HOST_WIDE_INT size = tree_to_uhwi (TYPE_SIZE (type));
-   const unsigned int align = TYPE_ALIGN (type);
-   unsigned HOST_WIDE_INT new_size;
-   unsigned int new_align;
- 
-   /* No point in doing anything if the size is zero.  */
-   if (size == 0)
-     return type;
- 
-   tree new_type = make_node (TREE_CODE (type));
- 
-   /* Copy the name and flags from the old type to that of the new.
-      Note that we rely on the pointer equality created here for
-      TYPE_NAME to look through conversions in various places.  */
-   TYPE_NAME (new_type) = TYPE_NAME (type);
-   TYPE_PACKED (new_type) = 1;
-   TYPE_JUSTIFIED_MODULAR_P (new_type) = TYPE_JUSTIFIED_MODULAR_P (type);
-   TYPE_CONTAINS_TEMPLATE_P (new_type) = TYPE_CONTAINS_TEMPLATE_P (type);
-   TYPE_REVERSE_STORAGE_ORDER (new_type) = TYPE_REVERSE_STORAGE_ORDER (type);
-   if (TREE_CODE (type) == RECORD_TYPE)
-     TYPE_PADDING_P (new_type) = TYPE_PADDING_P (type);
- 
-   /* If we are in a record and have a small size, set the alignment to
-      try for an integral mode.  Otherwise set it to try for a smaller
-      type with BLKmode.  */
-   if (in_record && size <= MAX_FIXED_MODE_SIZE)
-     {
-       new_size = ceil_pow2 (size);
-       new_align = MIN (new_size, BIGGEST_ALIGNMENT);
-       SET_TYPE_ALIGN (new_type, new_align);
-     }
-   else
-     {
-       tree ada_size = TYPE_ADA_SIZE (type);
- 
-       /* Do not try to shrink the size if the RM size is not constant.  */
-       if (TYPE_CONTAINS_TEMPLATE_P (type) || !tree_fits_uhwi_p (ada_size))
- 	return type;
- 
-       /* Round the RM size up to a unit boundary to get the minimal size
- 	 for a BLKmode record.  Give up if it's already the size and we
- 	 don't need to lower the alignment.  */
-       new_size = tree_to_uhwi (ada_size);
-       new_size = (new_size + BITS_PER_UNIT - 1) & -BITS_PER_UNIT;
-       if (new_size == size && (max_align == 0 || align <= max_align))
- 	return type;
- 
-       new_align = MIN (new_size & -new_size, BIGGEST_ALIGNMENT);
-       if (max_align > 0 && new_align > max_align)
- 	new_align = max_align;
-       SET_TYPE_ALIGN (new_type, MIN (align, new_align));
-     }
- 
-   TYPE_USER_ALIGN (new_type) = 1;
- 
-   /* Now copy the fields, keeping the position and size as we don't want
-      to change the layout by propagating the packedness downwards.  */
-   tree new_field_list = NULL_TREE;
-   for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
-     {
-       tree new_field_type = TREE_TYPE (field);
-       tree new_field, new_field_size;
- 
-       if (AGGREGATE_TYPE_P (new_field_type)
- 	  && tree_fits_uhwi_p (TYPE_SIZE (new_field_type)))
- 	{
- 	  if (RECORD_OR_UNION_TYPE_P (new_field_type)
- 	      && !TYPE_FAT_POINTER_P (new_field_type))
- 	    new_field_type
- 	      = make_packable_type (new_field_type, true, max_align);
- 	  else if (in_record
- 		   && max_align > 0
- 		   && max_align < BITS_PER_UNIT
- 		   && TREE_CODE (new_field_type) == ARRAY_TYPE)
- 	    new_field_type = make_packable_array_type (new_field_type);
- 	}
- 
-       /* However, for the last field in a not already packed record type
- 	 that is of an aggregate type, we need to use the RM size in the
- 	 packable version of the record type, see finish_record_type.  */
-       if (!DECL_CHAIN (field)
- 	  && !TYPE_PACKED (type)
- 	  && RECORD_OR_UNION_TYPE_P (new_field_type)
- 	  && !TYPE_FAT_POINTER_P (new_field_type)
- 	  && !TYPE_CONTAINS_TEMPLATE_P (new_field_type)
- 	  && TYPE_ADA_SIZE (new_field_type))
- 	new_field_size = TYPE_ADA_SIZE (new_field_type);
-       else
- 	{
- 	  new_field_size = DECL_SIZE (field);
- 
- 	  /* Make sure not to use too small a type for the size.  */
- 	  if (TYPE_MODE (new_field_type) == BLKmode)
- 	    new_field_type = TREE_TYPE (field);
- 	}
- 
-       /* This is a layout with full representation, alignment and size clauses
- 	 so we simply pass 0 as PACKED like gnat_to_gnu_field in this case.  */
-       new_field
- 	= create_field_decl (DECL_NAME (field), new_field_type, new_type,
- 			     new_field_size, bit_position (field), 0,
- 			     !DECL_NONADDRESSABLE_P (field));
- 
-       DECL_INTERNAL_P (new_field) = DECL_INTERNAL_P (field);
-       SET_DECL_ORIGINAL_FIELD_TO_FIELD (new_field, field);
-       if (TREE_CODE (new_type) == QUAL_UNION_TYPE)
- 	DECL_QUALIFIER (new_field) = DECL_QUALIFIER (field);
- 
-       DECL_CHAIN (new_field) = new_field_list;
-       new_field_list = new_field;
-     }
- 
-   /* If this is a padding record, we never want to make the size smaller
-      than what was specified.  For QUAL_UNION_TYPE, also copy the size.  */
-   if (TYPE_IS_PADDING_P (type) || TREE_CODE (type) == QUAL_UNION_TYPE)
-     {
-       TYPE_SIZE (new_type) = TYPE_SIZE (type);
-       TYPE_SIZE_UNIT (new_type) = TYPE_SIZE_UNIT (type);
-       new_size = size;
-     }
-   else
-     {
-       TYPE_SIZE (new_type) = bitsize_int (new_size);
-       TYPE_SIZE_UNIT (new_type) = size_int (new_size / BITS_PER_UNIT);
-     }
- 
-   if (!TYPE_CONTAINS_TEMPLATE_P (type))
-     SET_TYPE_ADA_SIZE (new_type, TYPE_ADA_SIZE (type));
- 
-   finish_record_type (new_type, nreverse (new_field_list), 2, false);
-   relate_alias_sets (new_type, type, ALIAS_SET_COPY);
-   if (gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
-     SET_TYPE_DEBUG_TYPE (new_type, TYPE_DEBUG_TYPE (type));
-   else if (TYPE_STUB_DECL (type))
-     SET_DECL_PARALLEL_TYPE (TYPE_STUB_DECL (new_type),
- 			    DECL_PARALLEL_TYPE (TYPE_STUB_DECL (type)));
- 
-   /* Try harder to get a packable type if necessary, for example in case
-      the record itself contains a BLKmode field.  */
-   if (in_record && TYPE_MODE (new_type) == BLKmode)
-     SET_TYPE_MODE (new_type,
- 		   mode_for_size_tree (TYPE_SIZE (new_type),
- 				       MODE_INT, 1).else_blk ());
- 
-   /* If neither mode nor size nor alignment shrunk, return the old type.  */
-   if (TYPE_MODE (new_type) == BLKmode && new_size >= size && max_align == 0)
-     return type;
- 
-   /* If the packable type is named, we canonicalize it by means of the hash
-      table.  This is consistent with the language semantics and ensures that
-      gigi and the middle-end have a common view of these packable types.  */
-   return
-     TYPE_NAME (new_type) ? canonicalize_packable_type (new_type) : new_type;
- }
- 
- /* Return true if TYPE has an unsigned representation.  This needs to be used
-    when the representation of types whose precision is not equal to their size
-    is manipulated based on the RM size.  */
- 
- static inline bool
- type_unsigned_for_rm (tree type)
- {
-   /* This is the common case.  */
-   if (TYPE_UNSIGNED (type))
-     return true;
- 
-   /* See the E_Signed_Integer_Subtype case of gnat_to_gnu_entity.  */
-   if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
-       && tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
-     return true;
- 
-   return false;
- }
- 
- /* Given a type TYPE, return a new type whose size is appropriate for SIZE.
-    If TYPE is the best type, return it.  Otherwise, make a new type.  We
-    only support new integral and pointer types.  FOR_BIASED is true if
-    we are making a biased type.  */
- 
- tree
- make_type_from_size (tree type, tree size_tree, bool for_biased)
- {
-   unsigned HOST_WIDE_INT size;
-   bool biased_p;
-   tree new_type;
- 
-   /* If size indicates an error, just return TYPE to avoid propagating
-      the error.  Likewise if it's too large to represent.  */
-   if (!size_tree || !tree_fits_uhwi_p (size_tree))
-     return type;
- 
-   size = tree_to_uhwi (size_tree);
- 
-   switch (TREE_CODE (type))
-     {
-     case BOOLEAN_TYPE:
-       /* Do not mess with boolean types that have foreign convention.  */
-       if (TYPE_PRECISION (type) == 1 && TYPE_SIZE (type) == size_tree)
- 	break;
- 
-       /* ... fall through ... */
- 
-     case INTEGER_TYPE:
-     case ENUMERAL_TYPE:
-       biased_p = (TREE_CODE (type) == INTEGER_TYPE
- 		  && TYPE_BIASED_REPRESENTATION_P (type));
- 
-       /* Integer types with precision 0 are forbidden.  */
-       if (size == 0)
- 	size = 1;
- 
-       /* Only do something if the type is not a bit-packed array type and does
- 	 not already have the proper size and the size is not too large.  */
-       if (BIT_PACKED_ARRAY_TYPE_P (type)
- 	  || (TYPE_PRECISION (type) == size && biased_p == for_biased)
- 	  || size > (Enable_128bit_Types ? 128 : LONG_LONG_TYPE_SIZE))
- 	break;
- 
-       biased_p |= for_biased;
- 
-       /* The type should be an unsigned type if the original type is unsigned
- 	 or if the lower bound is constant and non-negative or if the type is
- 	 biased, see E_Signed_Integer_Subtype case of gnat_to_gnu_entity.  */
-       if (type_unsigned_for_rm (type) || biased_p)
- 	new_type = make_unsigned_type (size);
-       else
- 	new_type = make_signed_type (size);
-       TREE_TYPE (new_type) = TREE_TYPE (type) ? TREE_TYPE (type) : type;
-       SET_TYPE_RM_MIN_VALUE (new_type, TYPE_MIN_VALUE (type));
-       SET_TYPE_RM_MAX_VALUE (new_type, TYPE_MAX_VALUE (type));
-       /* Copy the name to show that it's essentially the same type and
- 	 not a subrange type.  */
-       TYPE_NAME (new_type) = TYPE_NAME (type);
-       TYPE_BIASED_REPRESENTATION_P (new_type) = biased_p;
-       SET_TYPE_RM_SIZE (new_type, bitsize_int (size));
-       return new_type;
- 
-     case RECORD_TYPE:
-       /* Do something if this is a fat pointer, in which case we
- 	 may need to return the thin pointer.  */
-       if (TYPE_FAT_POINTER_P (type) && size < POINTER_SIZE * 2)
- 	{
- 	  scalar_int_mode p_mode;
- 	  if (!int_mode_for_size (size, 0).exists (&p_mode)
- 	      || !targetm.valid_pointer_mode (p_mode))
- 	    p_mode = ptr_mode;
- 	  return
- 	    build_pointer_type_for_mode
- 	      (TYPE_OBJECT_RECORD_TYPE (TYPE_UNCONSTRAINED_ARRAY (type)),
- 	       p_mode, 0);
- 	}
-       break;
- 
-     case POINTER_TYPE:
-       /* Only do something if this is a thin pointer, in which case we
- 	 may need to return the fat pointer.  */
-       if (TYPE_IS_THIN_POINTER_P (type) && size >= POINTER_SIZE * 2)
- 	return
- 	  build_pointer_type (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type)));
-       break;
- 
-     default:
-       break;
-     }
- 
-   return type;
- }
- 
- /* Return true iff the padded types are equivalent.  */
- 
- bool
- pad_type_hasher::equal (pad_type_hash *t1, pad_type_hash *t2)
- {
-   tree type1, type2;
- 
-   if (t1->hash != t2->hash)
-     return 0;
- 
-   type1 = t1->type;
-   type2 = t2->type;
- 
-   /* We consider that padded types are equivalent if they pad the same type
-      and have the same size, alignment, RM size and storage order.  Taking the
-      mode into account is redundant since it is determined by the others.  */
-   return
-     TREE_TYPE (TYPE_FIELDS (type1)) == TREE_TYPE (TYPE_FIELDS (type2))
-     && TYPE_SIZE (type1) == TYPE_SIZE (type2)
-     && TYPE_ALIGN (type1) == TYPE_ALIGN (type2)
-     && TYPE_ADA_SIZE (type1) == TYPE_ADA_SIZE (type2)
-     && TYPE_REVERSE_STORAGE_ORDER (type1) == TYPE_REVERSE_STORAGE_ORDER (type2);
- }
- 
- /* Compute the hash value for the padded TYPE.  */
- 
- static hashval_t
- hash_pad_type (tree type)
- {
-   hashval_t hashcode;
- 
-   hashcode
-     = iterative_hash_object (TYPE_HASH (TREE_TYPE (TYPE_FIELDS (type))), 0);
-   hashcode = iterative_hash_expr (TYPE_SIZE (type), hashcode);
-   hashcode = iterative_hash_hashval_t (TYPE_ALIGN (type), hashcode);
-   hashcode = iterative_hash_expr (TYPE_ADA_SIZE (type), hashcode);
-   hashcode
-     = iterative_hash_hashval_t (TYPE_REVERSE_STORAGE_ORDER (type), hashcode);
- 
-   return hashcode;
- }
- 
- /* Look up the padded TYPE in the hash table and return its canonical version
-    if it exists; otherwise, insert it into the hash table.  */
- 
- static tree
- canonicalize_pad_type (tree type)
- {
-   const hashval_t hashcode = hash_pad_type (type);
-   struct pad_type_hash in, *h, **slot;
- 
-   in.hash = hashcode;
-   in.type = type;
-   slot = pad_type_hash_table->find_slot_with_hash (&in, hashcode, INSERT);
-   h = *slot;
-   if (!h)
-     {
-       h = ggc_alloc<pad_type_hash> ();
-       h->hash = hashcode;
-       h->type = type;
-       *slot = h;
-     }
- 
-   return h->type;
- }
- 
- /* Ensure that TYPE has SIZE and ALIGN.  Make and return a new padded type
-    if needed.  We have already verified that SIZE and ALIGN are large enough.
-    GNAT_ENTITY is used to name the resulting record and to issue a warning.
-    IS_COMPONENT_TYPE is true if this is being done for the component type of
-    an array.  DEFINITION is true if this type is being defined.  SET_RM_SIZE
-    is true if the RM size of the resulting type is to be set to SIZE too; in
-    this case, the padded type is canonicalized before being returned.  */
- 
- tree
- maybe_pad_type (tree type, tree size, unsigned int align,
- 		Entity_Id gnat_entity, bool is_component_type,
- 		bool definition, bool set_rm_size)
- {
-   tree orig_size = TYPE_SIZE (type);
-   unsigned int orig_align = TYPE_ALIGN (type);
-   tree record, field;
- 
-   /* If TYPE is a padded type, see if it agrees with any size and alignment
-      we were given.  If so, return the original type.  Otherwise, strip
-      off the padding, since we will either be returning the inner type
-      or repadding it.  If no size or alignment is specified, use that of
-      the original padded type.  */
-   if (TYPE_IS_PADDING_P (type))
-     {
-       if ((!size
- 	   || operand_equal_p (round_up (size, orig_align), orig_size, 0))
- 	  && (align == 0 || align == orig_align))
- 	return type;
- 
-       if (!size)
- 	size = orig_size;
-       if (align == 0)
- 	align = orig_align;
- 
-       type = TREE_TYPE (TYPE_FIELDS (type));
-       orig_size = TYPE_SIZE (type);
-       orig_align = TYPE_ALIGN (type);
-     }
- 
-   /* If the size is either not being changed or is being made smaller (which
-      is not done here and is only valid for bitfields anyway), show the size
-      isn't changing.  Likewise, clear the alignment if it isn't being
-      changed.  Then return if we aren't doing anything.  */
-   if (size
-       && (operand_equal_p (size, orig_size, 0)
- 	  || (TREE_CODE (orig_size) == INTEGER_CST
- 	      && tree_int_cst_lt (size, orig_size))))
-     size = NULL_TREE;
- 
-   if (align == orig_align)
-     align = 0;
- 
-   if (align == 0 && !size)
-     return type;
- 
-   /* We used to modify the record in place in some cases, but that could
-      generate incorrect debugging information.  So make a new record
-      type and name.  */
-   record = make_node (RECORD_TYPE);
-   TYPE_PADDING_P (record) = 1;
- 
-   if (Present (gnat_entity))
-     TYPE_NAME (record) = create_concat_name (gnat_entity, "PAD");
- 
-   SET_TYPE_ALIGN (record, align ? align : orig_align);
-   TYPE_SIZE (record) = size ? size : orig_size;
-   TYPE_SIZE_UNIT (record)
-     = convert (sizetype,
- 	       size_binop (CEIL_DIV_EXPR, TYPE_SIZE (record),
- 			   bitsize_unit_node));
- 
-   /* If we are changing the alignment and the input type is a record with
-      BLKmode and a small constant size, try to make a form that has an
-      integral mode.  This might allow the padding record to also have an
-      integral mode, which will be much more efficient.  There is no point
-      in doing so if a size is specified unless it is also a small constant
-      size and it is incorrect to do so if we cannot guarantee that the mode
-      will be naturally aligned since the field must always be addressable.
- 
-      ??? This might not always be a win when done for a stand-alone object:
-      since the nominal and the effective type of the object will now have
-      different modes, a VIEW_CONVERT_EXPR will be required for converting
-      between them and it might be hard to overcome afterwards, including
-      at the RTL level when the stand-alone object is accessed as a whole.  */
-   if (align > 0
-       && RECORD_OR_UNION_TYPE_P (type)
-       && TYPE_MODE (type) == BLKmode
-       && !TYPE_BY_REFERENCE_P (type)
-       && TREE_CODE (orig_size) == INTEGER_CST
-       && !TREE_OVERFLOW (orig_size)
-       && compare_tree_int (orig_size, MAX_FIXED_MODE_SIZE) <= 0
-       && (!size
- 	  || (TREE_CODE (size) == INTEGER_CST
- 	      && compare_tree_int (size, MAX_FIXED_MODE_SIZE) <= 0)))
-     {
-       tree packable_type = make_packable_type (type, true, align);
-       if (TYPE_MODE (packable_type) != BLKmode
- 	  && compare_tree_int (TYPE_SIZE (packable_type), align) <= 0)
-         type = packable_type;
-     }
- 
-   /* Now create the field with the original size.  */
-   field = create_field_decl (get_identifier ("F"), type, record, orig_size,
- 			     bitsize_zero_node, 0, 1);
-   DECL_INTERNAL_P (field) = 1;
- 
-   /* We will output additional debug info manually below.  */
-   finish_record_type (record, field, 1, false);
- 
-   /* Set the RM size if requested.  */
-   if (set_rm_size)
-     {
-       SET_TYPE_ADA_SIZE (record, size ? size : orig_size);
- 
-       /* If the padded type is complete and has constant size, we canonicalize
- 	 it by means of the hash table.  This is consistent with the language
- 	 semantics and ensures that gigi and the middle-end have a common view
- 	 of these padded types.  */
-       if (TREE_CONSTANT (TYPE_SIZE (record)))
- 	{
- 	  tree canonical = canonicalize_pad_type (record);
- 	  if (canonical != record)
- 	    {
- 	      record = canonical;
- 	      goto built;
- 	    }
- 	}
-     }
- 
-   /* Make the inner type the debug type of the padded type.  */
-   if (gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
-     SET_TYPE_DEBUG_TYPE (record, maybe_debug_type (type));
- 
-   /* Unless debugging information isn't being written for the input type,
-      write a record that shows what we are a subtype of and also make a
-      variable that indicates our size, if still variable.  */
-   if (TREE_CODE (orig_size) != INTEGER_CST
-       && TYPE_NAME (record)
-       && TYPE_NAME (type)
-       && !(TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
- 	   && DECL_IGNORED_P (TYPE_NAME (type))))
-     {
-       tree name = TYPE_IDENTIFIER (record);
-       tree size_unit = TYPE_SIZE_UNIT (record);
- 
-       /* A variable that holds the size is required even with no encoding since
- 	 it will be referenced by debugging information attributes.  At global
- 	 level, we need a single variable across all translation units.  */
-       if (size
- 	  && TREE_CODE (size) != INTEGER_CST
- 	  && (definition || global_bindings_p ()))
- 	{
- 	  /* Whether or not gnat_entity comes from source, this XVZ variable is
- 	     is a compilation artifact.  */
- 	  size_unit
- 	    = create_var_decl (concat_name (name, "XVZ"), NULL_TREE, sizetype,
- 			      size_unit, true, global_bindings_p (),
- 			      !definition && global_bindings_p (), false,
- 			      false, true, true, NULL, gnat_entity);
- 	  TYPE_SIZE_UNIT (record) = size_unit;
- 	}
- 
-       /* There is no need to show what we are a subtype of when outputting as
- 	 few encodings as possible: regular debugging infomation makes this
- 	 redundant.  */
-       if (gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL)
- 	{
- 	  tree marker = make_node (RECORD_TYPE);
- 	  tree orig_name = TYPE_IDENTIFIER (type);
- 
- 	  TYPE_NAME (marker) = concat_name (name, "XVS");
- 	  finish_record_type (marker,
- 			      create_field_decl (orig_name,
- 						 build_reference_type (type),
- 						 marker, NULL_TREE, NULL_TREE,
- 						 0, 0),
- 			      0, true);
- 	  TYPE_SIZE_UNIT (marker) = size_unit;
- 
- 	  add_parallel_type (record, marker);
- 	}
-     }
- 
- built:
-   /* If a simple size was explicitly given, maybe issue a warning.  */
-   if (!size
-       || TREE_CODE (size) == COND_EXPR
-       || TREE_CODE (size) == MAX_EXPR
-       || No (gnat_entity))
-     return record;
- 
-   /* But don't do it if we are just annotating types and the type is tagged or
-      concurrent, since these types aren't fully laid out in this mode.  */
-   if (type_annotate_only)
-     {
-       Entity_Id gnat_type
- 	= is_component_type
- 	  ? Component_Type (gnat_entity) : Etype (gnat_entity);
- 
-       if (Is_Tagged_Type (gnat_type) || Is_Concurrent_Type (gnat_type))
- 	return record;
-     }
- 
-   /* Take the original size as the maximum size of the input if there was an
-      unconstrained record involved and round it up to the specified alignment,
-      if one was specified, but only for aggregate types.  */
-   if (CONTAINS_PLACEHOLDER_P (orig_size))
-     orig_size = max_size (orig_size, true);
- 
-   if (align && AGGREGATE_TYPE_P (type))
-     orig_size = round_up (orig_size, align);
- 
-   if (!operand_equal_p (size, orig_size, 0)
-       && !(TREE_CODE (size) == INTEGER_CST
- 	   && TREE_CODE (orig_size) == INTEGER_CST
- 	   && (TREE_OVERFLOW (size)
- 	       || TREE_OVERFLOW (orig_size)
- 	       || tree_int_cst_lt (size, orig_size))))
-     {
-       Node_Id gnat_error_node;
- 
-       /* For a packed array, post the message on the original array type.  */
-       if (Is_Packed_Array_Impl_Type (gnat_entity))
- 	gnat_entity = Original_Array_Type (gnat_entity);
- 
-       if ((Ekind (gnat_entity) == E_Component
- 	   || Ekind (gnat_entity) == E_Discriminant)
- 	  && Present (Component_Clause (gnat_entity)))
- 	gnat_error_node = Last_Bit (Component_Clause (gnat_entity));
-       else if (Has_Size_Clause (gnat_entity))
- 	gnat_error_node = Expression (Size_Clause (gnat_entity));
-       else if (Has_Object_Size_Clause (gnat_entity))
- 	gnat_error_node = Expression (Object_Size_Clause (gnat_entity));
-       else
- 	gnat_error_node = Empty;
- 
-       /* Generate message only for entities that come from source, since
- 	 if we have an entity created by expansion, the message will be
- 	 generated for some other corresponding source entity.  */
-       if (Comes_From_Source (gnat_entity))
- 	{
- 	  if (is_component_type)
- 	    post_error_ne_tree ("component of& padded{ by ^ bits}?",
- 				gnat_entity, gnat_entity,
- 				size_diffop (size, orig_size));
- 	  else if (Present (gnat_error_node))
- 	    post_error_ne_tree ("{^ }bits of & unused?",
- 				gnat_error_node, gnat_entity,
- 				size_diffop (size, orig_size));
- 	}
-     }
- 
-   return record;
- }
- 
- /* Return true if padded TYPE was built with an RM size.  */
- 
- bool
- pad_type_has_rm_size (tree type)
- {
-   /* This is required for the lookup.  */
-   if (!TREE_CONSTANT (TYPE_SIZE (type)))
-     return false;
- 
-   const hashval_t hashcode = hash_pad_type (type);
-   struct pad_type_hash in, *h;
- 
-   in.hash = hashcode;
-   in.type = type;
-   h = pad_type_hash_table->find_with_hash (&in, hashcode);
- 
-   /* The types built with an RM size are the canonicalized ones.  */
-   return h && h->type == type;
- }
- 
- /* Return a copy of the padded TYPE but with reverse storage order.  */
- 
- tree
- set_reverse_storage_order_on_pad_type (tree type)
- {
-   if (flag_checking)
-     {
-       /* If the inner type is not scalar then the function does nothing.  */
-       tree inner_type = TREE_TYPE (TYPE_FIELDS (type));
-       gcc_assert (!AGGREGATE_TYPE_P (inner_type)
- 		  && !VECTOR_TYPE_P (inner_type));
-     }
- 
-   /* This is required for the canonicalization.  */
-   gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
- 
-   tree field = copy_node (TYPE_FIELDS (type));
-   type = copy_type (type);
-   DECL_CONTEXT (field) = type;
-   TYPE_FIELDS (type) = field;
-   TYPE_REVERSE_STORAGE_ORDER (type) = 1;
-   return canonicalize_pad_type (type);
- }
- 
- /* Relate the alias sets of GNU_NEW_TYPE and GNU_OLD_TYPE according to OP.
-    If this is a multi-dimensional array type, do this recursively.
- 
-    OP may be
-    - ALIAS_SET_COPY:     the new set is made a copy of the old one.
-    - ALIAS_SET_SUPERSET: the new set is made a superset of the old one.
-    - ALIAS_SET_SUBSET:   the new set is made a subset of the old one.  */
- 
- void
- relate_alias_sets (tree gnu_new_type, tree gnu_old_type, enum alias_set_op op)
- {
-   /* Remove any padding from GNU_OLD_TYPE.  It doesn't matter in the case
-      of a one-dimensional array, since the padding has the same alias set
-      as the field type, but if it's a multi-dimensional array, we need to
-      see the inner types.  */
-   while (TREE_CODE (gnu_old_type) == RECORD_TYPE
- 	 && (TYPE_JUSTIFIED_MODULAR_P (gnu_old_type)
- 	     || TYPE_PADDING_P (gnu_old_type)))
-     gnu_old_type = TREE_TYPE (TYPE_FIELDS (gnu_old_type));
- 
-   /* Unconstrained array types are deemed incomplete and would thus be given
-      alias set 0.  Retrieve the underlying array type.  */
-   if (TREE_CODE (gnu_old_type) == UNCONSTRAINED_ARRAY_TYPE)
-     gnu_old_type
-       = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_old_type))));
-   if (TREE_CODE (gnu_new_type) == UNCONSTRAINED_ARRAY_TYPE)
-     gnu_new_type
-       = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_new_type))));
- 
-   if (TREE_CODE (gnu_new_type) == ARRAY_TYPE
-       && TREE_CODE (TREE_TYPE (gnu_new_type)) == ARRAY_TYPE
-       && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_new_type)))
-     relate_alias_sets (TREE_TYPE (gnu_new_type), TREE_TYPE (gnu_old_type), op);
- 
-   switch (op)
-     {
-     case ALIAS_SET_COPY:
-       /* The alias set shouldn't be copied between array types with different
- 	 aliasing settings because this can break the aliasing relationship
- 	 between the array type and its element type.  */
-       if (flag_checking || flag_strict_aliasing)
- 	gcc_assert (!(TREE_CODE (gnu_new_type) == ARRAY_TYPE
- 		      && TREE_CODE (gnu_old_type) == ARRAY_TYPE
- 		      && TYPE_NONALIASED_COMPONENT (gnu_new_type)
- 			 != TYPE_NONALIASED_COMPONENT (gnu_old_type)));
- 
-       TYPE_ALIAS_SET (gnu_new_type) = get_alias_set (gnu_old_type);
-       break;
- 
-     case ALIAS_SET_SUBSET:
-     case ALIAS_SET_SUPERSET:
-       {
- 	alias_set_type old_set = get_alias_set (gnu_old_type);
- 	alias_set_type new_set = get_alias_set (gnu_new_type);
- 
- 	/* Do nothing if the alias sets conflict.  This ensures that we
- 	   never call record_alias_subset several times for the same pair
- 	   or at all for alias set 0.  */
- 	if (!alias_sets_conflict_p (old_set, new_set))
- 	  {
- 	    if (op == ALIAS_SET_SUBSET)
- 	      record_alias_subset (old_set, new_set);
- 	    else
- 	      record_alias_subset (new_set, old_set);
- 	  }
-       }
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   record_component_aliases (gnu_new_type);
- }
- 
- /* Record TYPE as a builtin type for Ada.  NAME is the name of the type.
-    ARTIFICIAL_P is true if the type was generated by the compiler.  */
- 
- void
- record_builtin_type (const char *name, tree type, bool artificial_p)
- {
-   tree type_decl = build_decl (input_location,
- 			       TYPE_DECL, get_identifier (name), type);
-   DECL_ARTIFICIAL (type_decl) = artificial_p;
-   TYPE_ARTIFICIAL (type) = artificial_p;
-   gnat_pushdecl (type_decl, Empty);
- 
-   if (debug_hooks->type_decl)
-     debug_hooks->type_decl (type_decl, false);
- }
- 
- /* Finish constructing the character type CHAR_TYPE.
- 
-   In Ada character types are enumeration types and, as a consequence, are
-   represented in the front-end by integral types holding the positions of
-   the enumeration values as defined by the language, which means that the
-   integral types are unsigned.
- 
-   Unfortunately the signedness of 'char' in C is implementation-defined
-   and GCC even has the option -f[un]signed-char to toggle it at run time.
-   Since GNAT's philosophy is to be compatible with C by default, to wit
-   Interfaces.C.char is defined as a mere copy of Character, we may need
-   to declare character types as signed types in GENERIC and generate the
-   necessary adjustments to make them behave as unsigned types.
- 
-   The overall strategy is as follows: if 'char' is unsigned, do nothing;
-   if 'char' is signed, translate character types of CHAR_TYPE_SIZE and
-   character subtypes with RM_Size = Esize = CHAR_TYPE_SIZE into signed
-   types.  The idea is to ensure that the bit pattern contained in the
-   Esize'd objects is not changed, even though the numerical value will
-   be interpreted differently depending on the signedness.  */
- 
- void
- finish_character_type (tree char_type)
- {
-   if (TYPE_UNSIGNED (char_type))
-     return;
- 
-   /* Make a copy of a generic unsigned version since we'll modify it.  */
-   tree unsigned_char_type
-     = (char_type == char_type_node
-        ? unsigned_char_type_node
-        : copy_type (gnat_unsigned_type_for (char_type)));
- 
-   /* Create an unsigned version of the type and set it as debug type.  */
-   TYPE_NAME (unsigned_char_type) = TYPE_NAME (char_type);
-   TYPE_STRING_FLAG (unsigned_char_type) = TYPE_STRING_FLAG (char_type);
-   TYPE_ARTIFICIAL (unsigned_char_type) = TYPE_ARTIFICIAL (char_type);
-   SET_TYPE_DEBUG_TYPE (char_type, unsigned_char_type);
- 
-   /* If this is a subtype, make the debug type a subtype of the debug type
-      of the base type and convert literal RM bounds to unsigned.  */
-   if (TREE_TYPE (char_type))
-     {
-       tree base_unsigned_char_type = TYPE_DEBUG_TYPE (TREE_TYPE (char_type));
-       tree min_value = TYPE_RM_MIN_VALUE (char_type);
-       tree max_value = TYPE_RM_MAX_VALUE (char_type);
- 
-       if (TREE_CODE (min_value) == INTEGER_CST)
- 	min_value = fold_convert (base_unsigned_char_type, min_value);
-       if (TREE_CODE (max_value) == INTEGER_CST)
- 	max_value = fold_convert (base_unsigned_char_type, max_value);
- 
-       TREE_TYPE (unsigned_char_type) = base_unsigned_char_type;
-       SET_TYPE_RM_MIN_VALUE (unsigned_char_type, min_value);
-       SET_TYPE_RM_MAX_VALUE (unsigned_char_type, max_value);
-     }
- 
-   /* Adjust the RM bounds of the original type to unsigned; that's especially
-      important for types since they are implicit in this case.  */
-   SET_TYPE_RM_MIN_VALUE (char_type, TYPE_MIN_VALUE (unsigned_char_type));
-   SET_TYPE_RM_MAX_VALUE (char_type, TYPE_MAX_VALUE (unsigned_char_type));
- }
- 
- /* Given a record type RECORD_TYPE and a list of FIELD_DECL nodes FIELD_LIST,
-    finish constructing the record type as a fat pointer type.  */
- 
- void
- finish_fat_pointer_type (tree record_type, tree field_list)
- {
-   /* Make sure we can put it into a register.  */
-   if (STRICT_ALIGNMENT)
-     SET_TYPE_ALIGN (record_type, MIN (BIGGEST_ALIGNMENT, 2 * POINTER_SIZE));
- 
-   /* Show what it really is.  */
-   TYPE_FAT_POINTER_P (record_type) = 1;
- 
-   /* Do not emit debug info for it since the types of its fields may still be
-      incomplete at this point.  */
-   finish_record_type (record_type, field_list, 0, false);
- 
-   /* Force type_contains_placeholder_p to return true on it.  Although the
-      PLACEHOLDER_EXPRs are referenced only indirectly, this isn't a pointer
-      type but the representation of the unconstrained array.  */
-   TYPE_CONTAINS_PLACEHOLDER_INTERNAL (record_type) = 2;
- }
- 
- /* Given a record type RECORD_TYPE and a list of FIELD_DECL nodes FIELD_LIST,
-    finish constructing the record or union type.  If REP_LEVEL is zero, this
-    record has no representation clause and so will be entirely laid out here.
-    If REP_LEVEL is one, this record has a representation clause and has been
-    laid out already; only set the sizes and alignment.  If REP_LEVEL is two,
-    this record is derived from a parent record and thus inherits its layout;
-    only make a pass on the fields to finalize them.  DEBUG_INFO_P is true if
-    additional debug info needs to be output for this type.  */
- 
- void
- finish_record_type (tree record_type, tree field_list, int rep_level,
- 		    bool debug_info_p)
- {
-   const enum tree_code orig_code = TREE_CODE (record_type);
-   const bool had_size = TYPE_SIZE (record_type) != NULL_TREE;
-   const bool had_size_unit = TYPE_SIZE_UNIT (record_type) != NULL_TREE;
-   const bool had_align = TYPE_ALIGN (record_type) > 0;
-   /* For all-repped records with a size specified, lay the QUAL_UNION_TYPE
-      out just like a UNION_TYPE, since the size will be fixed.  */
-   const enum tree_code code
-     = (orig_code == QUAL_UNION_TYPE && rep_level > 0 && had_size
-        ? UNION_TYPE : orig_code);
-   tree name = TYPE_IDENTIFIER (record_type);
-   tree ada_size = bitsize_zero_node;
-   tree size = bitsize_zero_node;
-   tree field;
- 
-   TYPE_FIELDS (record_type) = field_list;
- 
-   /* Always attach the TYPE_STUB_DECL for a record type.  It is required to
-      generate debug info and have a parallel type.  */
-   TYPE_STUB_DECL (record_type) = create_type_stub_decl (name, record_type);
- 
-   /* Globally initialize the record first.  If this is a rep'ed record,
-      that just means some initializations; otherwise, layout the record.  */
-   if (rep_level > 0)
-     {
-       if (TYPE_ALIGN (record_type) < BITS_PER_UNIT)
- 	SET_TYPE_ALIGN (record_type, BITS_PER_UNIT);
- 
-       if (!had_size)
- 	TYPE_SIZE (record_type) = bitsize_zero_node;
- 
-       if (!had_size_unit)
- 	TYPE_SIZE_UNIT (record_type) = size_zero_node;
-     }
-   else
-     {
-       /* Ensure there isn't a size already set.  There can be in an error
- 	 case where there is a rep clause but all fields have errors and
- 	 no longer have a position.  */
-       TYPE_SIZE (record_type) = NULL_TREE;
- 
-       /* Ensure we use the traditional GCC layout for bitfields when we need
- 	 to pack the record type or have a representation clause.  The other
- 	 possible layout (Microsoft C compiler), if available, would prevent
- 	 efficient packing in almost all cases.  */
- #ifdef TARGET_MS_BITFIELD_LAYOUT
-       if (TARGET_MS_BITFIELD_LAYOUT && TYPE_PACKED (record_type))
- 	decl_attributes (&record_type,
- 			 tree_cons (get_identifier ("gcc_struct"),
- 				    NULL_TREE, NULL_TREE),
- 			 ATTR_FLAG_TYPE_IN_PLACE);
- #endif
- 
-       layout_type (record_type);
-     }
- 
-   /* At this point, the position and size of each field is known.  It was
-      either set before entry by a rep clause, or by laying out the type above.
- 
-      We now run a pass over the fields (in reverse order for QUAL_UNION_TYPEs)
-      to compute the Ada size; the GCC size and alignment (for rep'ed records
-      that are not padding types); and the mode (for rep'ed records).  We also
-      clear the DECL_BIT_FIELD indication for the cases we know have not been
-      handled yet, and adjust DECL_NONADDRESSABLE_P accordingly.  */
- 
-   if (code == QUAL_UNION_TYPE)
-     field_list = nreverse (field_list);
- 
-   for (field = field_list; field; field = DECL_CHAIN (field))
-     {
-       tree type = TREE_TYPE (field);
-       tree pos = bit_position (field);
-       tree this_size = DECL_SIZE (field);
-       tree this_ada_size;
- 
-       if (RECORD_OR_UNION_TYPE_P (type)
- 	  && !TYPE_FAT_POINTER_P (type)
- 	  && !TYPE_CONTAINS_TEMPLATE_P (type)
- 	  && TYPE_ADA_SIZE (type))
- 	this_ada_size = TYPE_ADA_SIZE (type);
-       else
- 	this_ada_size = this_size;
- 
-       const bool variant_part = (TREE_CODE (type) == QUAL_UNION_TYPE);
- 
-       /* Clear DECL_BIT_FIELD for the cases layout_decl does not handle.  */
-       if (DECL_BIT_FIELD (field)
- 	  && operand_equal_p (this_size, TYPE_SIZE (type), 0))
- 	{
- 	  const unsigned int align = TYPE_ALIGN (type);
- 
- 	  /* In the general case, type alignment is required.  */
- 	  if (value_factor_p (pos, align))
- 	    {
- 	      /* The enclosing record type must be sufficiently aligned.
- 		 Otherwise, if no alignment was specified for it and it
- 		 has been laid out already, bump its alignment to the
- 		 desired one if this is compatible with its size and
- 		 maximum alignment, if any.  */
- 	      if (TYPE_ALIGN (record_type) >= align)
- 		{
- 		  SET_DECL_ALIGN (field, MAX (DECL_ALIGN (field), align));
- 		  DECL_BIT_FIELD (field) = 0;
- 		}
- 	      else if (!had_align
- 		       && rep_level == 0
- 		       && value_factor_p (TYPE_SIZE (record_type), align)
- 		       && (!TYPE_MAX_ALIGN (record_type)
- 			   || TYPE_MAX_ALIGN (record_type) >= align))
- 		{
- 		  SET_TYPE_ALIGN (record_type, align);
- 		  SET_DECL_ALIGN (field, MAX (DECL_ALIGN (field), align));
- 		  DECL_BIT_FIELD (field) = 0;
- 		}
- 	    }
- 
- 	  /* In the non-strict alignment case, only byte alignment is.  */
- 	  if (!STRICT_ALIGNMENT
- 	      && DECL_BIT_FIELD (field)
- 	      && value_factor_p (pos, BITS_PER_UNIT))
- 	    DECL_BIT_FIELD (field) = 0;
- 	}
- 
-       /* Clear DECL_BIT_FIELD_TYPE for a variant part at offset 0, it's simply
- 	 not supported by the DECL_BIT_FIELD_REPRESENTATIVE machinery because
- 	 the variant part is always the last field in the list.  */
-       if (variant_part && integer_zerop (pos))
- 	DECL_BIT_FIELD_TYPE (field) = NULL_TREE;
- 
-       /* If we still have DECL_BIT_FIELD set at this point, we know that the
- 	 field is technically not addressable.  Except that it can actually
- 	 be addressed if it is BLKmode and happens to be properly aligned.  */
-       if (DECL_BIT_FIELD (field)
- 	  && !(DECL_MODE (field) == BLKmode
- 	       && value_factor_p (pos, BITS_PER_UNIT)))
- 	DECL_NONADDRESSABLE_P (field) = 1;
- 
-       /* A type must be as aligned as its most aligned field that is not
- 	 a bit-field.  But this is already enforced by layout_type.  */
-       if (rep_level > 0 && !DECL_BIT_FIELD (field))
- 	SET_TYPE_ALIGN (record_type,
- 			MAX (TYPE_ALIGN (record_type), DECL_ALIGN (field)));
- 
-       switch (code)
- 	{
- 	case UNION_TYPE:
- 	  ada_size = size_binop (MAX_EXPR, ada_size, this_ada_size);
- 	  size = size_binop (MAX_EXPR, size, this_size);
- 	  break;
- 
- 	case QUAL_UNION_TYPE:
- 	  ada_size
- 	    = fold_build3 (COND_EXPR, bitsizetype, DECL_QUALIFIER (field),
- 			   this_ada_size, ada_size);
- 	  size = fold_build3 (COND_EXPR, bitsizetype, DECL_QUALIFIER (field),
- 			      this_size, size);
- 	  break;
- 
- 	case RECORD_TYPE:
- 	  /* Since we know here that all fields are sorted in order of
- 	     increasing bit position, the size of the record is one
- 	     higher than the ending bit of the last field processed
- 	     unless we have a rep clause, because we might be processing
- 	     the REP part of a record with a variant part for which the
- 	     variant part has a rep clause but not the fixed part, in
- 	     which case this REP part may contain overlapping fields
- 	     and thus needs to be treated like a union tyoe above, so
- 	     use a MAX in that case.  Also, if this field is a variant
- 	     part, we need to take into account the previous size in
- 	     the case of empty variants.  */
- 	  ada_size
- 	    = merge_sizes (ada_size, pos, this_ada_size, rep_level > 0,
- 			   variant_part);
- 	  size
- 	    = merge_sizes (size, pos, this_size, rep_level > 0, variant_part);
- 	  break;
- 
- 	default:
- 	  gcc_unreachable ();
- 	}
-     }
- 
-   if (code == QUAL_UNION_TYPE)
-     nreverse (field_list);
- 
-   /* We need to set the regular sizes if REP_LEVEL is one.  */
-   if (rep_level == 1)
-     {
-       /* If this is a padding record, we never want to make the size smaller
- 	 than what was specified in it, if any.  */
-       if (TYPE_IS_PADDING_P (record_type) && TYPE_SIZE (record_type))
- 	size = TYPE_SIZE (record_type);
- 
-       tree size_unit = had_size_unit
- 		       ? TYPE_SIZE_UNIT (record_type)
- 		       : convert (sizetype,
- 				  size_binop (CEIL_DIV_EXPR, size,
- 					      bitsize_unit_node));
-       const unsigned int align = TYPE_ALIGN (record_type);
- 
-       TYPE_SIZE (record_type) = variable_size (round_up (size, align));
-       TYPE_SIZE_UNIT (record_type)
- 	= variable_size (round_up (size_unit, align / BITS_PER_UNIT));
-     }
- 
-   /* We need to set the Ada size if REP_LEVEL is zero or one.  */
-   if (rep_level < 2)
-     {
-       /* Now set any of the values we've just computed that apply.  */
-       if (!TYPE_FAT_POINTER_P (record_type)
- 	  && !TYPE_CONTAINS_TEMPLATE_P (record_type))
- 	SET_TYPE_ADA_SIZE (record_type, ada_size);
-     }
- 
-   /* We need to set the mode if REP_LEVEL is one or two.  */
-   if (rep_level > 0)
-     {
-       compute_record_mode (record_type);
-       finish_bitfield_layout (record_type);
-     }
- 
-   /* Reset the TYPE_MAX_ALIGN field since it's private to gigi.  */
-   TYPE_MAX_ALIGN (record_type) = 0;
- 
-   if (debug_info_p)
-     rest_of_record_type_compilation (record_type);
- }
- 
- /* Append PARALLEL_TYPE on the chain of parallel types of TYPE.  If
-    PARRALEL_TYPE has no context and its computation is not deferred yet, also
-    propagate TYPE's context to PARALLEL_TYPE's or defer its propagation to the
-    moment TYPE will get a context.  */
- 
- void
- add_parallel_type (tree type, tree parallel_type)
- {
-   tree decl = TYPE_STUB_DECL (type);
- 
-   while (DECL_PARALLEL_TYPE (decl))
-     decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
- 
-   SET_DECL_PARALLEL_TYPE (decl, parallel_type);
- 
-   /* If PARALLEL_TYPE already has a context, we are done.  */
-   if (TYPE_CONTEXT (parallel_type))
-     return;
- 
-   /* Otherwise, try to get one from TYPE's context.  If so, simply propagate
-      it to PARALLEL_TYPE.  */
-   if (TYPE_CONTEXT (type))
-     gnat_set_type_context (parallel_type, TYPE_CONTEXT (type));
- 
-   /* Otherwise TYPE has not context yet.  We know it will have one thanks to
-      gnat_pushdecl and then its context will be propagated to PARALLEL_TYPE,
-      so we have nothing to do in this case.  */
- }
- 
- /* Return true if TYPE has a parallel type.  */
- 
- static bool
- has_parallel_type (tree type)
- {
-   tree decl = TYPE_STUB_DECL (type);
- 
-   return DECL_PARALLEL_TYPE (decl) != NULL_TREE;
- }
- 
- /* Wrap up compilation of RECORD_TYPE, i.e. output additional debug info
-    associated with it.  It need not be invoked directly in most cases as
-    finish_record_type takes care of doing so.  */
- 
- void
- rest_of_record_type_compilation (tree record_type)
- {
-   bool var_size = false;
-   tree field;
- 
-   /* If this is a padded type, the bulk of the debug info has already been
-      generated for the field's type.  */
-   if (TYPE_IS_PADDING_P (record_type))
-     return;
- 
-   /* If the type already has a parallel type (XVS type), then we're done.  */
-   if (has_parallel_type (record_type))
-     return;
- 
-   for (field = TYPE_FIELDS (record_type); field; field = DECL_CHAIN (field))
-     {
-       /* We need to make an XVE/XVU record if any field has variable size,
- 	 whether or not the record does.  For example, if we have a union,
- 	 it may be that all fields, rounded up to the alignment, have the
- 	 same size, in which case we'll use that size.  But the debug
- 	 output routines (except Dwarf2) won't be able to output the fields,
- 	 so we need to make the special record.  */
-       if (TREE_CODE (DECL_SIZE (field)) != INTEGER_CST
- 	  /* If a field has a non-constant qualifier, the record will have
- 	     variable size too.  */
- 	  || (TREE_CODE (record_type) == QUAL_UNION_TYPE
- 	      && TREE_CODE (DECL_QUALIFIER (field)) != INTEGER_CST))
- 	{
- 	  var_size = true;
- 	  break;
- 	}
-     }
- 
-   /* If this record type is of variable size, make a parallel record type that
-      will tell the debugger how the former is laid out (see exp_dbug.ads).  */
-   if (var_size && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL)
-     {
-       tree new_record_type
- 	= make_node (TREE_CODE (record_type) == QUAL_UNION_TYPE
- 		     ? UNION_TYPE : TREE_CODE (record_type));
-       tree orig_name = TYPE_IDENTIFIER (record_type), new_name;
-       tree last_pos = bitsize_zero_node;
- 
-       new_name
- 	= concat_name (orig_name, TREE_CODE (record_type) == QUAL_UNION_TYPE
- 				  ? "XVU" : "XVE");
-       TYPE_NAME (new_record_type) = new_name;
-       SET_TYPE_ALIGN (new_record_type, BIGGEST_ALIGNMENT);
-       TYPE_STUB_DECL (new_record_type)
- 	= create_type_stub_decl (new_name, new_record_type);
-       DECL_IGNORED_P (TYPE_STUB_DECL (new_record_type))
- 	= DECL_IGNORED_P (TYPE_STUB_DECL (record_type));
-       gnat_pushdecl (TYPE_STUB_DECL (new_record_type), Empty);
-       TYPE_SIZE (new_record_type) = size_int (TYPE_ALIGN (record_type));
-       TYPE_SIZE_UNIT (new_record_type)
- 	= size_int (TYPE_ALIGN (record_type) / BITS_PER_UNIT);
- 
-       /* Now scan all the fields, replacing each field with a new field
- 	 corresponding to the new encoding.  */
-       for (tree old_field = TYPE_FIELDS (record_type);
- 	   old_field;
- 	   old_field = DECL_CHAIN (old_field))
- 	{
- 	  tree field_type = TREE_TYPE (old_field);
- 	  tree field_name = DECL_NAME (old_field);
- 	  tree curpos = fold_bit_position (old_field);
- 	  tree pos, new_field;
- 	  bool var = false;
- 	  unsigned int align = 0;
- 
- 	  /* See how the position was modified from the last position.
- 
- 	     There are two basic cases we support: a value was added
- 	     to the last position or the last position was rounded to
- 	     a boundary and they something was added.  Check for the
- 	     first case first.  If not, see if there is any evidence
- 	     of rounding.  If so, round the last position and retry.
- 
- 	     If this is a union, the position can be taken as zero.  */
- 	  if (TREE_CODE (new_record_type) == UNION_TYPE)
- 	    pos = bitsize_zero_node;
- 	  else
- 	    pos = compute_related_constant (curpos, last_pos);
- 
- 	  if (pos)
- 	    ;
- 	  else if (TREE_CODE (curpos) == MULT_EXPR
- 		   && tree_fits_uhwi_p (TREE_OPERAND (curpos, 1)))
- 	    {
- 	      tree offset = TREE_OPERAND (curpos, 0);
- 	      align = tree_to_uhwi (TREE_OPERAND (curpos, 1));
- 	      align = scale_by_factor_of (offset, align);
- 	      last_pos = round_up (last_pos, align);
- 	      pos = compute_related_constant (curpos, last_pos);
- 	    }
- 	  else if (TREE_CODE (curpos) == PLUS_EXPR
- 		   && tree_fits_uhwi_p (TREE_OPERAND (curpos, 1))
- 		   && TREE_CODE (TREE_OPERAND (curpos, 0)) == MULT_EXPR
- 		   && tree_fits_uhwi_p
- 		      (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1)))
- 	    {
- 	      tree offset = TREE_OPERAND (TREE_OPERAND (curpos, 0), 0);
- 	      unsigned HOST_WIDE_INT addend
- 	        = tree_to_uhwi (TREE_OPERAND (curpos, 1));
- 	      align
- 		= tree_to_uhwi (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1));
- 	      align = scale_by_factor_of (offset, align);
- 	      align = MIN (align, addend & -addend);
- 	      last_pos = round_up (last_pos, align);
- 	      pos = compute_related_constant (curpos, last_pos);
- 	    }
- 	  else
- 	    {
- 	      align = DECL_ALIGN (old_field);
- 	      last_pos = round_up (last_pos, align);
- 	      pos = compute_related_constant (curpos, last_pos);
- 	    }
- 
- 	  /* See if this type is variable-sized and make a pointer type
- 	     and indicate the indirection if so.  Beware that the debug
- 	     back-end may adjust the position computed above according
- 	     to the alignment of the field type, i.e. the pointer type
- 	     in this case, if we don't preventively counter that.  */
- 	  if (TREE_CODE (DECL_SIZE (old_field)) != INTEGER_CST)
- 	    {
- 	      field_type = copy_type (build_pointer_type (field_type));
- 	      SET_TYPE_ALIGN (field_type, BITS_PER_UNIT);
- 	      var = true;
- 
- 	      /* ??? Kludge to work around a bug in Workbench's debugger.  */
- 	      if (align == 0)
- 		{
- 		  align = DECL_ALIGN (old_field);
- 		  last_pos = round_up (last_pos, align);
- 		  pos = compute_related_constant (curpos, last_pos);
- 		}
- 	    }
- 
- 	  /* If we can't compute a position, set it to zero.
- 
- 	     ??? We really should abort here, but it's too much work
- 	     to get this correct for all cases.  */
- 	  if (!pos)
- 	    pos = bitsize_zero_node;
- 
- 	  /* Make a new field name, if necessary.  */
- 	  if (var || align != 0)
- 	    {
- 	      char suffix[16];
- 
- 	      if (align != 0)
- 		sprintf (suffix, "XV%c%u", var ? 'L' : 'A',
- 			 align / BITS_PER_UNIT);
- 	      else
- 		strcpy (suffix, "XVL");
- 
- 	      field_name = concat_name (field_name, suffix);
- 	    }
- 
- 	  new_field
- 	    = create_field_decl (field_name, field_type, new_record_type,
- 				 DECL_SIZE (old_field), pos, 0, 0);
- 	  /* The specified position is not the actual position of the field
- 	     but the gap with the previous field, so the computation of the
- 	     bit-field status may be incorrect.  We adjust it manually to
- 	     avoid generating useless attributes for the field in DWARF.  */
- 	  if (DECL_SIZE (old_field) == TYPE_SIZE (field_type)
- 	      && value_factor_p (pos, BITS_PER_UNIT))
- 	    {
- 	      DECL_BIT_FIELD (new_field) = 0;
- 	      DECL_BIT_FIELD_TYPE (new_field) = NULL_TREE;
- 	    }
- 	  DECL_CHAIN (new_field) = TYPE_FIELDS (new_record_type);
- 	  TYPE_FIELDS (new_record_type) = new_field;
- 
- 	  /* If old_field is a QUAL_UNION_TYPE, take its size as being
- 	     zero.  The only time it's not the last field of the record
- 	     is when there are other components at fixed positions after
- 	     it (meaning there was a rep clause for every field) and we
- 	     want to be able to encode them.  */
- 	  last_pos = size_binop (PLUS_EXPR, curpos,
- 				 (TREE_CODE (TREE_TYPE (old_field))
- 				  == QUAL_UNION_TYPE)
- 				 ? bitsize_zero_node
- 				 : DECL_SIZE (old_field));
- 	}
- 
-       TYPE_FIELDS (new_record_type) = nreverse (TYPE_FIELDS (new_record_type));
- 
-       add_parallel_type (record_type, new_record_type);
-     }
- }
- 
- /* Utility function of above to merge LAST_SIZE, the previous size of a record
-    with FIRST_BIT and SIZE that describe a field.  If MAX is true, we take the
-    MAX of the end position of this field with LAST_SIZE.  In all other cases,
-    we use FIRST_BIT plus SIZE.  SPECIAL is true if it's for a QUAL_UNION_TYPE,
-    in which case we must look for COND_EXPRs and replace a value of zero with
-    the old size.  Return an expression for the size.  */
- 
- static tree
- merge_sizes (tree last_size, tree first_bit, tree size, bool max, bool special)
- {
-   tree type = TREE_TYPE (last_size);
-   tree new_size;
- 
-   if (!special || TREE_CODE (size) != COND_EXPR)
-     {
-       new_size = size_binop (PLUS_EXPR, first_bit, size);
-       if (max)
- 	new_size = size_binop (MAX_EXPR, last_size, new_size);
-     }
- 
-   else
-     new_size = fold_build3 (COND_EXPR, type, TREE_OPERAND (size, 0),
- 			    integer_zerop (TREE_OPERAND (size, 1))
- 			    ? last_size : merge_sizes (last_size, first_bit,
- 						       TREE_OPERAND (size, 1),
- 						       max, special),
- 			    integer_zerop (TREE_OPERAND (size, 2))
- 			    ? last_size : merge_sizes (last_size, first_bit,
- 						       TREE_OPERAND (size, 2),
- 						       max, special));
- 
-   /* We don't need any NON_VALUE_EXPRs and they can confuse us (especially
-      when fed through SUBSTITUTE_IN_EXPR) into thinking that a constant
-      size is not constant.  */
-   while (TREE_CODE (new_size) == NON_LVALUE_EXPR)
-     new_size = TREE_OPERAND (new_size, 0);
- 
-   return new_size;
- }
- 
- /* Convert the size expression EXPR to TYPE and fold the result.  */
- 
- static tree
- fold_convert_size (tree type, tree expr)
- {
-   /* We assume that size expressions do not wrap around.  */
-   if (TREE_CODE (expr) == MULT_EXPR || TREE_CODE (expr) == PLUS_EXPR)
-     return size_binop (TREE_CODE (expr),
- 		       fold_convert_size (type, TREE_OPERAND (expr, 0)),
- 		       fold_convert_size (type, TREE_OPERAND (expr, 1)));
- 
-   return fold_convert (type, expr);
- }
- 
- /* Return the bit position of FIELD, in bits from the start of the record,
-    and fold it as much as possible.  This is a tree of type bitsizetype.  */
- 
- static tree
- fold_bit_position (const_tree field)
- {
-   tree offset = fold_convert_size (bitsizetype, DECL_FIELD_OFFSET (field));
-   return size_binop (PLUS_EXPR, DECL_FIELD_BIT_OFFSET (field),
-  		     size_binop (MULT_EXPR, offset, bitsize_unit_node));
- }
- 
- /* Utility function of above to see if OP0 and OP1, both of SIZETYPE, are
-    related by the addition of a constant.  Return that constant if so.  */
- 
- static tree
- compute_related_constant (tree op0, tree op1)
- {
-   tree factor, op0_var, op1_var, op0_cst, op1_cst, result;
- 
-   if (TREE_CODE (op0) == MULT_EXPR
-       && TREE_CODE (op1) == MULT_EXPR
-       && TREE_CODE (TREE_OPERAND (op0, 1)) == INTEGER_CST
-       && TREE_OPERAND (op1, 1) == TREE_OPERAND (op0, 1))
-     {
-       factor = TREE_OPERAND (op0, 1);
-       op0 = TREE_OPERAND (op0, 0);
-       op1 = TREE_OPERAND (op1, 0);
-     }
-   else
-     factor = NULL_TREE;
- 
-   op0_cst = split_plus (op0, &op0_var);
-   op1_cst = split_plus (op1, &op1_var);
-   result = size_binop (MINUS_EXPR, op0_cst, op1_cst);
- 
-   if (operand_equal_p (op0_var, op1_var, 0))
-     return factor ? size_binop (MULT_EXPR, factor, result) : result;
- 
-   return NULL_TREE;
- }
- 
- /* Utility function of above to split a tree OP which may be a sum, into a
-    constant part, which is returned, and a variable part, which is stored
-    in *PVAR.  *PVAR may be bitsize_zero_node.  All operations must be of
-    bitsizetype.  */
- 
- static tree
- split_plus (tree in, tree *pvar)
- {
-   /* Strip conversions in order to ease the tree traversal and maximize the
-      potential for constant or plus/minus discovery.  We need to be careful
-      to always return and set *pvar to bitsizetype trees, but it's worth
-      the effort.  */
-   in = remove_conversions (in, false);
- 
-   *pvar = convert (bitsizetype, in);
- 
-   if (TREE_CODE (in) == INTEGER_CST)
-     {
-       *pvar = bitsize_zero_node;
-       return convert (bitsizetype, in);
-     }
-   else if (TREE_CODE (in) == PLUS_EXPR || TREE_CODE (in) == MINUS_EXPR)
-     {
-       tree lhs_var, rhs_var;
-       tree lhs_con = split_plus (TREE_OPERAND (in, 0), &lhs_var);
-       tree rhs_con = split_plus (TREE_OPERAND (in, 1), &rhs_var);
- 
-       if (lhs_var == TREE_OPERAND (in, 0)
- 	  && rhs_var == TREE_OPERAND (in, 1))
- 	return bitsize_zero_node;
- 
-       *pvar = size_binop (TREE_CODE (in), lhs_var, rhs_var);
-       return size_binop (TREE_CODE (in), lhs_con, rhs_con);
-     }
-   else
-     return bitsize_zero_node;
- }
- 
- /* Return a copy of TYPE but safe to modify in any way.  */
- 
- tree
- copy_type (tree type)
- {
-   tree new_type = copy_node (type);
- 
-   /* Unshare the language-specific data.  */
-   if (TYPE_LANG_SPECIFIC (type))
-     {
-       TYPE_LANG_SPECIFIC (new_type) = NULL;
-       SET_TYPE_LANG_SPECIFIC (new_type, GET_TYPE_LANG_SPECIFIC (type));
-     }
- 
-   /* And the contents of the language-specific slot if needed.  */
-   if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
-       && TYPE_RM_VALUES (type))
-     {
-       TYPE_RM_VALUES (new_type) = NULL_TREE;
-       SET_TYPE_RM_SIZE (new_type, TYPE_RM_SIZE (type));
-       SET_TYPE_RM_MIN_VALUE (new_type, TYPE_RM_MIN_VALUE (type));
-       SET_TYPE_RM_MAX_VALUE (new_type, TYPE_RM_MAX_VALUE (type));
-     }
- 
-   /* copy_node clears this field instead of copying it, because it is
-      aliased with TREE_CHAIN.  */
-   TYPE_STUB_DECL (new_type) = TYPE_STUB_DECL (type);
- 
-   TYPE_POINTER_TO (new_type) = NULL_TREE;
-   TYPE_REFERENCE_TO (new_type) = NULL_TREE;
-   TYPE_MAIN_VARIANT (new_type) = new_type;
-   TYPE_NEXT_VARIANT (new_type) = NULL_TREE;
-   TYPE_CANONICAL (new_type) = new_type;
- 
-   return new_type;
- }
- 
- /* Return a subtype of sizetype with range MIN to MAX and whose
-    TYPE_INDEX_TYPE is INDEX.  GNAT_NODE is used for the position
-    of the associated TYPE_DECL.  */
- 
- tree
- create_index_type (tree min, tree max, tree index, Node_Id gnat_node)
- {
-   /* First build a type for the desired range.  */
-   tree type = build_nonshared_range_type (sizetype, min, max);
- 
-   /* Then set the index type.  */
-   SET_TYPE_INDEX_TYPE (type, index);
-   create_type_decl (NULL_TREE, type, true, false, gnat_node);
- 
-   return type;
- }
- 
- /* Return a subtype of TYPE with range MIN to MAX.  If TYPE is NULL,
-    sizetype is used.  */
- 
- tree
- create_range_type (tree type, tree min, tree max)
- {
-   tree range_type;
- 
-   if (!type)
-     type = sizetype;
- 
-   /* First build a type with the base range.  */
-   range_type = build_nonshared_range_type (type, TYPE_MIN_VALUE (type),
- 						 TYPE_MAX_VALUE (type));
- 
-   /* Then set the actual range.  */
-   SET_TYPE_RM_MIN_VALUE (range_type, min);
-   SET_TYPE_RM_MAX_VALUE (range_type, max);
- 
-   return range_type;
- }
- 
- /* Return an extra subtype of TYPE with range MIN to MAX.  */
- 
- tree
- create_extra_subtype (tree type, tree min, tree max)
- {
-   const bool uns = TYPE_UNSIGNED (type);
-   const unsigned prec = TYPE_PRECISION (type);
-   tree subtype = uns ? make_unsigned_type (prec) : make_signed_type (prec);
- 
-   TREE_TYPE (subtype) = type;
-   TYPE_EXTRA_SUBTYPE_P (subtype) = 1;
- 
-   SET_TYPE_RM_MIN_VALUE (subtype, min);
-   SET_TYPE_RM_MAX_VALUE (subtype, max);
- 
-   return subtype;
- }
- 
- /* Return a TYPE_DECL node suitable for the TYPE_STUB_DECL field of TYPE.
-    NAME gives the name of the type to be used in the declaration.  */
- 
- tree
- create_type_stub_decl (tree name, tree type)
- {
-   tree type_decl = build_decl (input_location, TYPE_DECL, name, type);
-   DECL_ARTIFICIAL (type_decl) = 1;
-   TYPE_ARTIFICIAL (type) = 1;
-   return type_decl;
- }
- 
- /* Return a TYPE_DECL node for TYPE.  NAME gives the name of the type to be
-    used in the declaration.  ARTIFICIAL_P is true if the declaration was
-    generated by the compiler.  DEBUG_INFO_P is true if we need to write
-    debug information about this type.  GNAT_NODE is used for the position
-    of the decl.  */
- 
- tree
- create_type_decl (tree name, tree type, bool artificial_p, bool debug_info_p,
- 		  Node_Id gnat_node)
- {
-   enum tree_code code = TREE_CODE (type);
-   bool is_named
-     = TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL;
-   tree type_decl;
- 
-   /* Only the builtin TYPE_STUB_DECL should be used for dummy types.  */
-   gcc_assert (!TYPE_IS_DUMMY_P (type));
- 
-   /* If the type hasn't been named yet, we're naming it; preserve an existing
-      TYPE_STUB_DECL that has been attached to it for some purpose.  */
-   if (!is_named && TYPE_STUB_DECL (type))
-     {
-       type_decl = TYPE_STUB_DECL (type);
-       DECL_NAME (type_decl) = name;
-     }
-   else
-     type_decl = build_decl (input_location, TYPE_DECL, name, type);
- 
-   DECL_ARTIFICIAL (type_decl) = artificial_p;
-   TYPE_ARTIFICIAL (type) = artificial_p;
- 
-   /* Add this decl to the current binding level.  */
-   gnat_pushdecl (type_decl, gnat_node);
- 
-   /* If we're naming the type, equate the TYPE_STUB_DECL to the name.  This
-      causes the name to be also viewed as a "tag" by the debug back-end, with
-      the advantage that no DW_TAG_typedef is emitted for artificial "tagged"
-      types in DWARF.
- 
-      Note that if "type" is used as a DECL_ORIGINAL_TYPE, it may be referenced
-      from multiple contexts, and "type_decl" references a copy of it: in such a
-      case, do not mess TYPE_STUB_DECL: we do not want to re-use the TYPE_DECL
-      with the mechanism above.  */
-   if (!is_named && type != DECL_ORIGINAL_TYPE (type_decl))
-     TYPE_STUB_DECL (type) = type_decl;
- 
-   /* Do not generate debug info for UNCONSTRAINED_ARRAY_TYPE that the
-      back-end doesn't support, and for others if we don't need to.  */
-   if (code == UNCONSTRAINED_ARRAY_TYPE || !debug_info_p)
-     DECL_IGNORED_P (type_decl) = 1;
- 
-   return type_decl;
- }
- 
- /* Return a VAR_DECL or CONST_DECL node.
- 
-    NAME gives the name of the variable.  ASM_NAME is its assembler name
-    (if provided).  TYPE is its data type (a GCC ..._TYPE node).  INIT is
-    the GCC tree for an optional initial expression; NULL_TREE if none.
- 
-    CONST_FLAG is true if this variable is constant, in which case we might
-    return a CONST_DECL node unless CONST_DECL_ALLOWED_P is false.
- 
-    PUBLIC_FLAG is true if this is for a reference to a public entity or for a
-    definition to be made visible outside of the current compilation unit, for
-    instance variable definitions in a package specification.
- 
-    EXTERN_FLAG is true when processing an external variable declaration (as
-    opposed to a definition: no storage is to be allocated for the variable).
- 
-    STATIC_FLAG is only relevant when not at top level and indicates whether
-    to always allocate storage to the variable.
- 
-    VOLATILE_FLAG is true if this variable is declared as volatile.
- 
-    ARTIFICIAL_P is true if the variable was generated by the compiler.
- 
-    DEBUG_INFO_P is true if we need to write debug information for it.
- 
-    ATTR_LIST is the list of attributes to be attached to the variable.
- 
-    GNAT_NODE is used for the position of the decl.  */
- 
- tree
- create_var_decl (tree name, tree asm_name, tree type, tree init,
- 		 bool const_flag, bool public_flag, bool extern_flag,
- 		 bool static_flag, bool volatile_flag, bool artificial_p,
- 		 bool debug_info_p, struct attrib *attr_list,
- 		 Node_Id gnat_node, bool const_decl_allowed_p)
- {
-   /* Whether the object has static storage duration, either explicitly or by
-      virtue of being declared at the global level.  */
-   const bool static_storage = static_flag || global_bindings_p ();
- 
-   /* Whether the initializer is constant: for an external object or an object
-      with static storage duration, we check that the initializer is a valid
-      constant expression for initializing a static variable; otherwise, we
-      only check that it is constant.  */
-   const bool init_const
-     = (init
-        && gnat_types_compatible_p (type, TREE_TYPE (init))
-        && (extern_flag || static_storage
- 	   ? initializer_constant_valid_p (init, TREE_TYPE (init))
- 	     != NULL_TREE
- 	   : TREE_CONSTANT (init)));
- 
-   /* Whether we will make TREE_CONSTANT the DECL we produce here, in which
-      case the initializer may be used in lieu of the DECL node (as done in
-      Identifier_to_gnu).  This is useful to prevent the need of elaboration
-      code when an identifier for which such a DECL is made is in turn used
-      as an initializer.  We used to rely on CONST_DECL vs VAR_DECL for this,
-      but extra constraints apply to this choice (see below) and they are not
-      relevant to the distinction we wish to make.  */
-   const bool constant_p = const_flag && init_const;
- 
-   /* The actual DECL node.  CONST_DECL was initially intended for enumerals
-      and may be used for scalars in general but not for aggregates.  */
-   tree var_decl
-     = build_decl (input_location,
- 		  (constant_p
- 		   && const_decl_allowed_p
- 		   && !AGGREGATE_TYPE_P (type) ? CONST_DECL : VAR_DECL),
- 		  name, type);
- 
-   /* Detect constants created by the front-end to hold 'reference to function
-      calls for stabilization purposes.  This is needed for renaming.  */
-   if (const_flag && init && POINTER_TYPE_P (type))
-     {
-       tree inner = init;
-       if (TREE_CODE (inner) == COMPOUND_EXPR)
- 	inner = TREE_OPERAND (inner, 1);
-       inner = remove_conversions (inner, true);
-       if (TREE_CODE (inner) == ADDR_EXPR
- 	  && ((TREE_CODE (TREE_OPERAND (inner, 0)) == CALL_EXPR
- 	       && !call_is_atomic_load (TREE_OPERAND (inner, 0)))
- 	      || (TREE_CODE (TREE_OPERAND (inner, 0)) == VAR_DECL
- 		  && DECL_RETURN_VALUE_P (TREE_OPERAND (inner, 0)))))
- 	DECL_RETURN_VALUE_P (var_decl) = 1;
-     }
- 
-   /* If this is external, throw away any initializations (they will be done
-      elsewhere) unless this is a constant for which we would like to remain
-      able to get the initializer.  If we are defining a global here, leave a
-      constant initialization and save any variable elaborations for the
-      elaboration routine.  If we are just annotating types, throw away the
-      initialization if it isn't a constant.  */
-   if ((extern_flag && !constant_p)
-       || (type_annotate_only && init && !TREE_CONSTANT (init)))
-     init = NULL_TREE;
- 
-   /* At the global level, a non-constant initializer generates elaboration
-      statements.  Check that such statements are allowed, that is to say,
-      not violating a No_Elaboration_Code restriction.  */
-   if (init && !init_const && global_bindings_p ())
-     Check_Elaboration_Code_Allowed (gnat_node);
- 
-   /* Attach the initializer, if any.  */
-   DECL_INITIAL (var_decl) = init;
- 
-   /* Directly set some flags.  */
-   DECL_ARTIFICIAL (var_decl) = artificial_p;
-   DECL_EXTERNAL (var_decl) = extern_flag;
- 
-   TREE_CONSTANT (var_decl) = constant_p;
-   TREE_READONLY (var_decl) = const_flag;
- 
-   /* The object is public if it is external or if it is declared public
-      and has static storage duration.  */
-   TREE_PUBLIC (var_decl) = extern_flag || (public_flag && static_storage);
- 
-   /* We need to allocate static storage for an object with static storage
-      duration if it isn't external.  */
-   TREE_STATIC (var_decl) = !extern_flag && static_storage;
- 
-   TREE_SIDE_EFFECTS (var_decl)
-     = TREE_THIS_VOLATILE (var_decl)
-     = TYPE_VOLATILE (type) | volatile_flag;
- 
-   if (TREE_SIDE_EFFECTS (var_decl))
-     TREE_ADDRESSABLE (var_decl) = 1;
- 
-   /* Ada doesn't feature Fortran-like COMMON variables so we shouldn't
-      try to fiddle with DECL_COMMON.  However, on platforms that don't
-      support global BSS sections, uninitialized global variables would
-      go in DATA instead, thus increasing the size of the executable.  */
-   if (!flag_no_common
-       && TREE_CODE (var_decl) == VAR_DECL
-       && TREE_PUBLIC (var_decl)
-       && !have_global_bss_p ())
-     DECL_COMMON (var_decl) = 1;
- 
-   /* Do not emit debug info if not requested, or for an external constant whose
-      initializer is not absolute because this would require a global relocation
-      in a read-only section which runs afoul of the PE-COFF run-time relocation
-      mechanism.  */
-   if (!debug_info_p
-       || (extern_flag
- 	  && constant_p
- 	  && init
- 	  && initializer_constant_valid_p (init, TREE_TYPE (init))
- 	     != null_pointer_node))
-     DECL_IGNORED_P (var_decl) = 1;
- 
-   /* ??? Some attributes cannot be applied to CONST_DECLs.  */
-   if (TREE_CODE (var_decl) == VAR_DECL)
-     process_attributes (&var_decl, &attr_list, true, gnat_node);
- 
-   /* Add this decl to the current binding level.  */
-   gnat_pushdecl (var_decl, gnat_node);
- 
-   if (TREE_CODE (var_decl) == VAR_DECL && asm_name)
-     {
-       /* Let the target mangle the name if this isn't a verbatim asm.  */
-       if (*IDENTIFIER_POINTER (asm_name) != '*')
- 	asm_name = targetm.mangle_decl_assembler_name (var_decl, asm_name);
- 
-       SET_DECL_ASSEMBLER_NAME (var_decl, asm_name);
-     }
- 
-   return var_decl;
- }
- 
- /* Return true if TYPE, an aggregate type, contains (or is) an array.
-    If SELF_REFERENTIAL is true, then an additional requirement on the
-    array is that it be self-referential.  */
- 
- bool
- aggregate_type_contains_array_p (tree type, bool self_referential)
- {
-   switch (TREE_CODE (type))
-     {
-     case RECORD_TYPE:
-     case UNION_TYPE:
-     case QUAL_UNION_TYPE:
-       {
- 	tree field;
- 	for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
- 	  if (AGGREGATE_TYPE_P (TREE_TYPE (field))
- 	      && aggregate_type_contains_array_p (TREE_TYPE (field),
- 						  self_referential))
- 	    return true;
- 	return false;
-       }
- 
-     case ARRAY_TYPE:
-       return self_referential ? type_contains_placeholder_p (type) : true;
- 
-     default:
-       gcc_unreachable ();
-     }
- }
- 
- /* Return true if TYPE is a type with variable size or a padding type with a
-    field of variable size or a record that has a field with such a type.  */
- 
- static bool
- type_has_variable_size (tree type)
- {
-   tree field;
- 
-   if (!TREE_CONSTANT (TYPE_SIZE (type)))
-     return true;
- 
-   if (TYPE_IS_PADDING_P (type)
-       && !TREE_CONSTANT (DECL_SIZE (TYPE_FIELDS (type))))
-     return true;
- 
-   if (!RECORD_OR_UNION_TYPE_P (type))
-     return false;
- 
-   for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
-     if (type_has_variable_size (TREE_TYPE (field)))
-       return true;
- 
-   return false;
- }
- 
- /* Return a FIELD_DECL node.  NAME is the field's name, TYPE is its type and
-    RECORD_TYPE is the type of the enclosing record.  If SIZE is nonzero, it
-    is the specified size of the field.  If POS is nonzero, it is the bit
-    position.  PACKED is 1 if the enclosing record is packed, -1 if it has
-    Component_Alignment of Storage_Unit.  If ADDRESSABLE is nonzero, it
-    means we are allowed to take the address of the field; if it is negative,
-    we should not make a bitfield, which is used by make_aligning_type.  */
- 
- tree
- create_field_decl (tree name, tree type, tree record_type, tree size, tree pos,
- 		   int packed, int addressable)
- {
-   tree field_decl = build_decl (input_location, FIELD_DECL, name, type);
- 
-   DECL_CONTEXT (field_decl) = record_type;
-   TREE_READONLY (field_decl) = TYPE_READONLY (type);
- 
-   /* If a size is specified, use it.  Otherwise, if the record type is packed
-      compute a size to use, which may differ from the object's natural size.
-      We always set a size in this case to trigger the checks for bitfield
-      creation below, which is typically required when no position has been
-      specified.  */
-   if (size)
-     size = convert (bitsizetype, size);
-   else if (packed == 1)
-     {
-       size = rm_size (type);
-       if (TYPE_MODE (type) == BLKmode)
- 	size = round_up (size, BITS_PER_UNIT);
-     }
- 
-   /* If we may, according to ADDRESSABLE, then make a bitfield when the size
-      is specified for two reasons: first, when it differs from the natural
-      size; second, when the alignment is insufficient.
- 
-      We never make a bitfield if the type of the field has a nonconstant size,
-      because no such entity requiring bitfield operations should reach here.
- 
-      We do *preventively* make a bitfield when there might be the need for it
-      but we don't have all the necessary information to decide, as is the case
-      of a field in a packed record.
- 
-      We also don't look at STRICT_ALIGNMENT here, and rely on later processing
-      in layout_decl or finish_record_type to clear the bit_field indication if
-      it is in fact not needed.  */
-   if (addressable >= 0
-       && size
-       && TREE_CODE (size) == INTEGER_CST
-       && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
-       && (packed
- 	  || !tree_int_cst_equal (size, TYPE_SIZE (type))
- 	  || (pos && !value_factor_p (pos, TYPE_ALIGN (type)))
- 	  || (TYPE_ALIGN (record_type)
- 	      && TYPE_ALIGN (record_type) < TYPE_ALIGN (type))))
-     {
-       DECL_BIT_FIELD (field_decl) = 1;
-       DECL_SIZE (field_decl) = size;
-       if (!packed && !pos)
- 	{
- 	  if (TYPE_ALIGN (record_type)
- 	      && TYPE_ALIGN (record_type) < TYPE_ALIGN (type))
- 	    SET_DECL_ALIGN (field_decl, TYPE_ALIGN (record_type));
- 	  else
- 	    SET_DECL_ALIGN (field_decl, TYPE_ALIGN (type));
- 	}
-     }
- 
-   DECL_PACKED (field_decl) = pos ? DECL_BIT_FIELD (field_decl) : packed;
- 
-   /* If FIELD_TYPE has BLKmode, we must ensure this is aligned to at least
-      a byte boundary since GCC cannot handle less aligned BLKmode bitfields.
-      Likewise if it has a variable size and no specified position because
-      variable-sized objects need to be aligned to at least a byte boundary.
-      Likewise for an aggregate without specified position that contains an
-      array because, in this case, slices of variable length of this array
-      must be handled by GCC and have variable size.  */
-   if (packed && (TYPE_MODE (type) == BLKmode
- 		 || (!pos && type_has_variable_size (type))
- 		 || (!pos
- 		     && AGGREGATE_TYPE_P (type)
- 		     && aggregate_type_contains_array_p (type, false))))
-     SET_DECL_ALIGN (field_decl, BITS_PER_UNIT);
- 
-   /* Bump the alignment if need be, either for bitfield/packing purposes or
-      to satisfy the type requirements if no such considerations apply.  When
-      we get the alignment from the type, indicate if this is from an explicit
-      user request, which prevents stor-layout from lowering it later on.  */
-   else
-     {
-       const unsigned int field_align
- 	= DECL_BIT_FIELD (field_decl)
- 	  ? 1
- 	  : packed
- 	    ? BITS_PER_UNIT
- 	    : 0;
- 
-       if (field_align > DECL_ALIGN (field_decl))
- 	SET_DECL_ALIGN (field_decl, field_align);
-       else if (!field_align && TYPE_ALIGN (type) > DECL_ALIGN (field_decl))
- 	{
- 	  SET_DECL_ALIGN (field_decl, TYPE_ALIGN (type));
- 	  DECL_USER_ALIGN (field_decl) = TYPE_USER_ALIGN (type);
- 	}
-     }
- 
-   if (pos)
-     {
-       /* We need to pass in the alignment the DECL is known to have.
- 	 This is the lowest-order bit set in POS, but no more than
- 	 the alignment of the record, if one is specified.  Note
- 	 that an alignment of 0 is taken as infinite.  */
-       unsigned int known_align;
- 
-       if (tree_fits_uhwi_p (pos))
- 	known_align = tree_to_uhwi (pos) & -tree_to_uhwi (pos);
-       else
- 	known_align = BITS_PER_UNIT;
- 
-       if (TYPE_ALIGN (record_type)
- 	  && (known_align == 0 || known_align > TYPE_ALIGN (record_type)))
- 	known_align = TYPE_ALIGN (record_type);
- 
-       layout_decl (field_decl, known_align);
-       SET_DECL_OFFSET_ALIGN (field_decl,
- 			     tree_fits_uhwi_p (pos)
- 			     ? BIGGEST_ALIGNMENT : BITS_PER_UNIT);
-       pos_from_bit (&DECL_FIELD_OFFSET (field_decl),
- 		    &DECL_FIELD_BIT_OFFSET (field_decl),
- 		    DECL_OFFSET_ALIGN (field_decl), pos);
-     }
- 
-   /* In addition to what our caller says, claim the field is addressable if we
-      know that its type is not suitable.
- 
-      The field may also be "technically" nonaddressable, meaning that even if
-      we attempt to take the field's address we will actually get the address
-      of a copy.  This is the case for true bitfields, but the DECL_BIT_FIELD
-      value we have at this point is not accurate enough, so we don't account
-      for this here and let finish_record_type decide.  */
-   if (!addressable && !type_for_nonaliased_component_p (type))
-     addressable = 1;
- 
-   /* Note that there is a trade-off in making a field nonaddressable because
-      this will cause type-based alias analysis to use the same alias set for
-      accesses to the field as for accesses to the whole record: while doing
-      so will make it more likely to disambiguate accesses to other objects
-      and accesses to the field, it will make it less likely to disambiguate
-      accesses to the other fields of the record and accesses to the field.
-      If the record is fully static, then the trade-off is irrelevant since
-      the fields of the record can always be disambiguated by their offsets
-      but, if the record is dynamic, then it can become problematic.  */
-   DECL_NONADDRESSABLE_P (field_decl) = !addressable;
- 
-   return field_decl;
- }
- 
- /* Return a PARM_DECL node with NAME and TYPE.  */
- 
- tree
- create_param_decl (tree name, tree type)
- {
-   tree param_decl = build_decl (input_location, PARM_DECL, name, type);
- 
-   /* Honor TARGET_PROMOTE_PROTOTYPES like the C compiler, as not doing so
-      can lead to various ABI violations.  */
-   if (targetm.calls.promote_prototypes (NULL_TREE)
-       && INTEGRAL_TYPE_P (type)
-       && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
-     {
-       /* We have to be careful about biased types here.  Make a subtype
- 	 of integer_type_node with the proper biasing.  */
-       if (TREE_CODE (type) == INTEGER_TYPE
- 	  && TYPE_BIASED_REPRESENTATION_P (type))
- 	{
- 	  tree subtype
- 	    = make_unsigned_type (TYPE_PRECISION (integer_type_node));
- 	  TREE_TYPE (subtype) = integer_type_node;
- 	  TYPE_BIASED_REPRESENTATION_P (subtype) = 1;
- 	  SET_TYPE_RM_MIN_VALUE (subtype, TYPE_MIN_VALUE (type));
- 	  SET_TYPE_RM_MAX_VALUE (subtype, TYPE_MAX_VALUE (type));
- 	  type = subtype;
- 	}
-       else
- 	type = integer_type_node;
-     }
- 
-   DECL_ARG_TYPE (param_decl) = type;
-   return param_decl;
- }
- 
- /* Process the attributes in ATTR_LIST for NODE, which is either a DECL or
-    a TYPE.  If IN_PLACE is true, the tree pointed to by NODE should not be
-    changed.  GNAT_NODE is used for the position of error messages.  */
- 
- void
- process_attributes (tree *node, struct attrib **attr_list, bool in_place,
- 		    Node_Id gnat_node)
- {
-   struct attrib *attr;
- 
-   for (attr = *attr_list; attr; attr = attr->next)
-     switch (attr->type)
-       {
-       case ATTR_MACHINE_ATTRIBUTE:
- 	Sloc_to_locus (Sloc (gnat_node), &input_location);
- 	decl_attributes (node, tree_cons (attr->name, attr->args, NULL_TREE),
- 			 in_place ? ATTR_FLAG_TYPE_IN_PLACE : 0);
- 	break;
- 
-       case ATTR_LINK_ALIAS:
-         if (!DECL_EXTERNAL (*node))
- 	  {
- 	    TREE_STATIC (*node) = 1;
- 	    assemble_alias (*node, attr->name);
- 	  }
- 	break;
- 
-       case ATTR_WEAK_EXTERNAL:
- 	if (SUPPORTS_WEAK)
- 	  declare_weak (*node);
- 	else
- 	  post_error ("?weak declarations not supported on this target",
- 		      attr->error_point);
- 	break;
- 
-       case ATTR_LINK_SECTION:
- 	if (targetm_common.have_named_sections)
- 	  {
- 	    set_decl_section_name (*node, IDENTIFIER_POINTER (attr->name));
- 	    DECL_COMMON (*node) = 0;
- 	  }
- 	else
- 	  post_error ("?section attributes are not supported for this target",
- 		      attr->error_point);
- 	break;
- 
-       case ATTR_LINK_CONSTRUCTOR:
- 	DECL_STATIC_CONSTRUCTOR (*node) = 1;
- 	TREE_USED (*node) = 1;
- 	break;
- 
-       case ATTR_LINK_DESTRUCTOR:
- 	DECL_STATIC_DESTRUCTOR (*node) = 1;
- 	TREE_USED (*node) = 1;
- 	break;
- 
-       case ATTR_THREAD_LOCAL_STORAGE:
- 	set_decl_tls_model (*node, decl_default_tls_model (*node));
- 	DECL_COMMON (*node) = 0;
- 	break;
-       }
- 
-   *attr_list = NULL;
- }
- 
- /* Return true if VALUE is a known to be a multiple of FACTOR, which must be
-    a power of 2. */
- 
- bool
- value_factor_p (tree value, unsigned HOST_WIDE_INT factor)
- {
-   gcc_checking_assert (pow2p_hwi (factor));
- 
-   if (tree_fits_uhwi_p (value))
-     return (tree_to_uhwi (value) & (factor - 1)) == 0;
- 
-   if (TREE_CODE (value) == MULT_EXPR)
-     return (value_factor_p (TREE_OPERAND (value, 0), factor)
-             || value_factor_p (TREE_OPERAND (value, 1), factor));
- 
-   return false;
- }
- 
- /* Defer the initialization of DECL's DECL_CONTEXT attribute, scheduling to
-    feed it with the elaboration of GNAT_SCOPE.  */
- 
- static struct deferred_decl_context_node *
- add_deferred_decl_context (tree decl, Entity_Id gnat_scope, int force_global)
- {
-   struct deferred_decl_context_node *new_node;
- 
-   new_node
-     = (struct deferred_decl_context_node * ) xmalloc (sizeof (*new_node));
-   new_node->decl = decl;
-   new_node->gnat_scope = gnat_scope;
-   new_node->force_global = force_global;
-   new_node->types.create (1);
-   new_node->next = deferred_decl_context_queue;
-   deferred_decl_context_queue = new_node;
-   return new_node;
- }
- 
- /* Defer the initialization of TYPE's TYPE_CONTEXT attribute, scheduling to
-    feed it with the DECL_CONTEXT computed as part of N as soon as it is
-    computed.  */
- 
- static void
- add_deferred_type_context (struct deferred_decl_context_node *n, tree type)
- {
-   n->types.safe_push (type);
- }
- 
- /* Get the GENERIC node corresponding to GNAT_SCOPE, if available.  Return
-    NULL_TREE if it is not available.  */
- 
- static tree
- compute_deferred_decl_context (Entity_Id gnat_scope)
- {
-   tree context;
- 
-   if (present_gnu_tree (gnat_scope))
-     context = get_gnu_tree (gnat_scope);
-   else
-     return NULL_TREE;
- 
-   if (TREE_CODE (context) == TYPE_DECL)
-     {
-       tree context_type = TREE_TYPE (context);
- 
-       /* Skip dummy types: only the final ones can appear in the context
- 	 chain.  */
-       if (TYPE_DUMMY_P (context_type))
- 	return NULL_TREE;
- 
-       /* ..._TYPE nodes are more useful than TYPE_DECL nodes in the context
- 	 chain.  */
-       else
- 	context = context_type;
-     }
- 
-   return context;
- }
- 
- /* Try to process all deferred nodes in the queue.  Keep in the queue the ones
-    that cannot be processed yet, remove the other ones.  If FORCE is true,
-    force the processing for all nodes, use the global context when nodes don't
-    have a GNU translation.  */
- 
- void
- process_deferred_decl_context (bool force)
- {
-   struct deferred_decl_context_node **it = &deferred_decl_context_queue;
-   struct deferred_decl_context_node *node;
- 
-   while (*it)
-     {
-       bool processed = false;
-       tree context = NULL_TREE;
-       Entity_Id gnat_scope;
- 
-       node = *it;
- 
-       /* If FORCE, get the innermost elaborated scope.  Otherwise, just try to
- 	 get the first scope.  */
-       gnat_scope = node->gnat_scope;
-       while (Present (gnat_scope))
- 	{
- 	  context = compute_deferred_decl_context (gnat_scope);
- 	  if (!force || context)
- 	    break;
- 	  gnat_scope = get_debug_scope (gnat_scope, NULL);
- 	}
- 
-       /* Imported declarations must not be in a local context (i.e. not inside
- 	 a function).  */
-       if (context && node->force_global > 0)
- 	{
- 	  tree ctx = context;
- 
- 	  while (ctx)
- 	    {
- 	      gcc_assert (TREE_CODE (ctx) != FUNCTION_DECL);
- 	      ctx = DECL_P (ctx) ? DECL_CONTEXT (ctx) : TYPE_CONTEXT (ctx);
- 	    }
- 	}
- 
-       /* If FORCE, we want to get rid of all nodes in the queue: in case there
- 	 was no elaborated scope, use the global context.  */
-       if (force && !context)
- 	context = get_global_context ();
- 
-       if (context)
- 	{
- 	  tree t;
- 	  int i;
- 
- 	  DECL_CONTEXT (node->decl) = context;
- 
- 	  /* Propagate it to the TYPE_CONTEXT attributes of the requested
- 	     ..._TYPE nodes.  */
- 	  FOR_EACH_VEC_ELT (node->types, i, t)
- 	    {
- 	      gnat_set_type_context (t, context);
- 	    }
- 	  processed = true;
- 	}
- 
-       /* If this node has been successfuly processed, remove it from the
- 	 queue.  Then move to the next node.  */
-       if (processed)
- 	{
- 	  *it = node->next;
- 	  node->types.release ();
- 	  free (node);
- 	}
-       else
- 	it = &node->next;
-     }
- }
- 
- /* Return VALUE scaled by the biggest power-of-2 factor of EXPR.  */
- 
- static unsigned int
- scale_by_factor_of (tree expr, unsigned int value)
- {
-   unsigned HOST_WIDE_INT addend = 0;
-   unsigned HOST_WIDE_INT factor = 1;
- 
-   /* Peel conversions around EXPR and try to extract bodies from function
-      calls: it is possible to get the scale factor from size functions.  */
-   expr = remove_conversions (expr, true);
-   if (TREE_CODE (expr) == CALL_EXPR)
-     expr = maybe_inline_call_in_expr (expr);
- 
-   /* Sometimes we get PLUS_EXPR (BIT_AND_EXPR (..., X), Y), where Y is a
-      multiple of the scale factor we are looking for.  */
-   if (TREE_CODE (expr) == PLUS_EXPR
-       && TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST
-       && tree_fits_uhwi_p (TREE_OPERAND (expr, 1)))
-     {
-       addend = TREE_INT_CST_LOW (TREE_OPERAND (expr, 1));
-       expr = TREE_OPERAND (expr, 0);
-     }
- 
-   /* An expression which is a bitwise AND with a mask has a power-of-2 factor
-      corresponding to the number of trailing zeros of the mask.  */
-   if (TREE_CODE (expr) == BIT_AND_EXPR
-       && TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST)
-     {
-       unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (TREE_OPERAND (expr, 1));
-       unsigned int i = 0;
- 
-       while ((mask & 1) == 0 && i < HOST_BITS_PER_WIDE_INT)
- 	{
- 	  mask >>= 1;
- 	  factor *= 2;
- 	  i++;
- 	}
-     }
- 
-   /* If the addend is not a multiple of the factor we found, give up.  In
-      theory we could find a smaller common factor but it's useless for our
-      needs.  This situation arises when dealing with a field F1 with no
-      alignment requirement but that is following a field F2 with such
-      requirements.  As long as we have F2's offset, we don't need alignment
-      information to compute F1's.  */
-   if (addend % factor != 0)
-     factor = 1;
- 
-   return factor * value;
- }
- 
- /* Return a LABEL_DECL with NAME.  GNAT_NODE is used for the position of
-    the decl.  */
- 
- tree
- create_label_decl (tree name, Node_Id gnat_node)
- {
-   tree label_decl
-     = build_decl (input_location, LABEL_DECL, name, void_type_node);
- 
-   SET_DECL_MODE (label_decl, VOIDmode);
- 
-   /* Add this decl to the current binding level.  */
-   gnat_pushdecl (label_decl, gnat_node);
- 
-   return label_decl;
- }
- 
- /* Return a FUNCTION_DECL node.  NAME is the name of the subprogram, ASM_NAME
-    its assembler name, TYPE its type (a FUNCTION_TYPE or METHOD_TYPE node),
-    PARAM_DECL_LIST the list of its parameters (a list of PARM_DECL nodes
-    chained through the DECL_CHAIN field).
- 
-    INLINE_STATUS describes the inline flags to be set on the FUNCTION_DECL.
- 
-    PUBLIC_FLAG is true if this is for a reference to a public entity or for a
-    definition to be made visible outside of the current compilation unit.
- 
-    EXTERN_FLAG is true when processing an external subprogram declaration.
- 
-    ARTIFICIAL_P is true if the subprogram was generated by the compiler.
- 
-    DEBUG_INFO_P is true if we need to write debug information for it.
- 
-    DEFINITION is true if the subprogram is to be considered as a definition.
- 
-    ATTR_LIST is the list of attributes to be attached to the subprogram.
- 
-    GNAT_NODE is used for the position of the decl.  */
- 
- tree
- create_subprog_decl (tree name, tree asm_name, tree type, tree param_decl_list,
- 		     enum inline_status_t inline_status, bool public_flag,
- 		     bool extern_flag, bool artificial_p, bool debug_info_p,
- 		     bool definition, struct attrib *attr_list,
- 		     Node_Id gnat_node)
- {
-   tree subprog_decl = build_decl (input_location, FUNCTION_DECL, name, type);
-   DECL_ARGUMENTS (subprog_decl) = param_decl_list;
- 
-   DECL_ARTIFICIAL (subprog_decl) = artificial_p;
-   DECL_EXTERNAL (subprog_decl) = extern_flag;
-   DECL_FUNCTION_IS_DEF (subprog_decl) = definition;
-   DECL_IGNORED_P (subprog_decl) = !debug_info_p;
-   TREE_PUBLIC (subprog_decl) = public_flag;
- 
-   switch (inline_status)
-     {
-     case is_suppressed:
-       DECL_UNINLINABLE (subprog_decl) = 1;
-       break;
- 
-     case is_default:
-       break;
- 
-     case is_required:
-       if (Back_End_Inlining)
- 	{
- 	  decl_attributes (&subprog_decl,
- 			   tree_cons (get_identifier ("always_inline"),
- 				      NULL_TREE, NULL_TREE),
- 			   ATTR_FLAG_TYPE_IN_PLACE);
- 
- 	  /* Inline_Always guarantees that every direct call is inlined and
- 	     that there is no indirect reference to the subprogram, so the
- 	     instance in the original package (as well as its clones in the
- 	     client packages created for inter-unit inlining) can be made
- 	     private, which causes the out-of-line body to be eliminated.  */
- 	  TREE_PUBLIC (subprog_decl) = 0;
- 	}
- 
-       /* ... fall through ... */
- 
-     case is_prescribed:
-       DECL_DISREGARD_INLINE_LIMITS (subprog_decl) = 1;
- 
-       /* ... fall through ... */
- 
-     case is_requested:
-       DECL_DECLARED_INLINE_P (subprog_decl) = 1;
-       if (!Debug_Generated_Code)
- 	DECL_NO_INLINE_WARNING_P (subprog_decl) = artificial_p;
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   process_attributes (&subprog_decl, &attr_list, true, gnat_node);
- 
-   /* Once everything is processed, finish the subprogram declaration.  */
-   finish_subprog_decl (subprog_decl, asm_name, type);
- 
-   /* Add this decl to the current binding level.  */
-   gnat_pushdecl (subprog_decl, gnat_node);
- 
-   /* Output the assembler code and/or RTL for the declaration.  */
-   rest_of_decl_compilation (subprog_decl, global_bindings_p (), 0);
- 
-   return subprog_decl;
- }
- 
- /* Given a subprogram declaration DECL, its assembler name and its type,
-    finish constructing the subprogram declaration from ASM_NAME and TYPE.  */
- 
- void
- finish_subprog_decl (tree decl, tree asm_name, tree type)
- {
-   /* DECL_ARGUMENTS is set by the caller, but not its context.  */
-   for (tree param_decl = DECL_ARGUMENTS (decl);
-        param_decl;
-        param_decl = DECL_CHAIN (param_decl))
-     DECL_CONTEXT (param_decl) = decl;
- 
-   tree result_decl
-     = build_decl (DECL_SOURCE_LOCATION (decl), RESULT_DECL, NULL_TREE,
- 		  TREE_TYPE (type));
- 
-   DECL_ARTIFICIAL (result_decl) = 1;
-   DECL_IGNORED_P (result_decl) = 1;
-   DECL_CONTEXT (result_decl) = decl;
-   DECL_BY_REFERENCE (result_decl) = TREE_ADDRESSABLE (type);
-   DECL_RESULT (decl) = result_decl;
- 
-   /* Propagate the "pure" property.  */
-   DECL_PURE_P (decl) = TYPE_RESTRICT (type);
- 
-   /* Propagate the "noreturn" property.  */
-   TREE_THIS_VOLATILE (decl) = TYPE_VOLATILE (type);
- 
-   if (asm_name)
-     {
-       /* Let the target mangle the name if this isn't a verbatim asm.  */
-       if (*IDENTIFIER_POINTER (asm_name) != '*')
- 	asm_name = targetm.mangle_decl_assembler_name (decl, asm_name);
- 
-       SET_DECL_ASSEMBLER_NAME (decl, asm_name);
- 
-       /* The expand_main_function circuitry expects "main_identifier_node" to
- 	 designate the DECL_NAME of the 'main' entry point, in turn expected
- 	 to be declared as the "main" function literally by default.  Ada
- 	 program entry points are typically declared with a different name
- 	 within the binder generated file, exported as 'main' to satisfy the
- 	 system expectations.  Force main_identifier_node in this case.  */
-       if (asm_name == main_identifier_node)
- 	DECL_NAME (decl) = main_identifier_node;
-     }
- }
- 
- /* Set up the framework for generating code for SUBPROG_DECL, a subprogram
-    body.  This routine needs to be invoked before processing the declarations
-    appearing in the subprogram.  */
- 
- void
- begin_subprog_body (tree subprog_decl)
- {
-   announce_function (subprog_decl);
- 
-   /* This function is being defined.  */
-   TREE_STATIC (subprog_decl) = 1;
- 
-   /* The failure of this assertion will likely come from a wrong context for
-      the subprogram body, e.g. another procedure for a procedure declared at
-      library level.  */
-   gcc_assert (current_function_decl == decl_function_context (subprog_decl));
- 
-   current_function_decl = subprog_decl;
- 
-   /* Enter a new binding level and show that all the parameters belong to
-      this function.  */
-   gnat_pushlevel ();
- }
- 
- /* Finish translating the current subprogram and set its BODY.  */
- 
- void
- end_subprog_body (tree body)
- {
-   tree fndecl = current_function_decl;
- 
-   /* Attach the BLOCK for this level to the function and pop the level.  */
-   BLOCK_SUPERCONTEXT (current_binding_level->block) = fndecl;
-   DECL_INITIAL (fndecl) = current_binding_level->block;
-   gnat_poplevel ();
- 
-   /* The body should be a BIND_EXPR whose BLOCK is the top-level one.  */
-   if (TREE_CODE (body) == BIND_EXPR)
-     {
-       BLOCK_SUPERCONTEXT (BIND_EXPR_BLOCK (body)) = fndecl;
-       DECL_INITIAL (fndecl) = BIND_EXPR_BLOCK (body);
-     }
- 
-   DECL_SAVED_TREE (fndecl) = body;
- 
-   current_function_decl = decl_function_context (fndecl);
- }
- 
- /* Wrap up compilation of SUBPROG_DECL, a subprogram body.  */
- 
- void
- rest_of_subprog_body_compilation (tree subprog_decl)
- {
-   /* We cannot track the location of errors past this point.  */
-   Current_Error_Node = Empty;
- 
-   /* If we're only annotating types, don't actually compile this function.  */
-   if (type_annotate_only)
-     return;
- 
-   /* Dump functions before gimplification.  */
-   dump_function (TDI_original, subprog_decl);
- 
-   if (!decl_function_context (subprog_decl))
-     cgraph_node::finalize_function (subprog_decl, false);
-   else
-     /* Register this function with cgraph just far enough to get it
-        added to our parent's nested function list.  */
-     (void) cgraph_node::get_create (subprog_decl);
- }
- 
- tree
- gnat_builtin_function (tree decl)
- {
-   gnat_pushdecl (decl, Empty);
-   return decl;
- }
- 
- /* Return an integer type with the number of bits of precision given by
-    PRECISION.  UNSIGNEDP is nonzero if the type is unsigned; otherwise
-    it is a signed type.  */
- 
- tree
- gnat_type_for_size (unsigned precision, int unsignedp)
- {
-   tree t;
-   char type_name[20];
- 
-   if (precision <= 2 * MAX_BITS_PER_WORD
-       && signed_and_unsigned_types[precision][unsignedp])
-     return signed_and_unsigned_types[precision][unsignedp];
- 
-  if (unsignedp)
-     t = make_unsigned_type (precision);
-   else
-     t = make_signed_type (precision);
-   TYPE_ARTIFICIAL (t) = 1;
- 
-   if (precision <= 2 * MAX_BITS_PER_WORD)
-     signed_and_unsigned_types[precision][unsignedp] = t;
- 
-   if (!TYPE_NAME (t))
-     {
-       sprintf (type_name, "%sSIGNED_%u", unsignedp ? "UN" : "", precision);
-       TYPE_NAME (t) = get_identifier (type_name);
-     }
- 
-   return t;
- }
- 
- /* Likewise for floating-point types.  */
- 
- static tree
- float_type_for_precision (int precision, machine_mode mode)
- {
-   tree t;
-   char type_name[20];
- 
-   if (float_types[(int) mode])
-     return float_types[(int) mode];
- 
-   float_types[(int) mode] = t = make_node (REAL_TYPE);
-   TYPE_PRECISION (t) = precision;
-   layout_type (t);
- 
-   gcc_assert (TYPE_MODE (t) == mode);
-   if (!TYPE_NAME (t))
-     {
-       sprintf (type_name, "FLOAT_%d", precision);
-       TYPE_NAME (t) = get_identifier (type_name);
-     }
- 
-   return t;
- }
- 
- /* Return a data type that has machine mode MODE.  UNSIGNEDP selects
-    an unsigned type; otherwise a signed type is returned.  */
- 
- tree
- gnat_type_for_mode (machine_mode mode, int unsignedp)
- {
-   if (mode == BLKmode)
-     return NULL_TREE;
- 
-   if (mode == VOIDmode)
-     return void_type_node;
- 
-   if (COMPLEX_MODE_P (mode))
-     return NULL_TREE;
- 
-   scalar_float_mode float_mode;
-   if (is_a <scalar_float_mode> (mode, &float_mode))
-     return float_type_for_precision (GET_MODE_PRECISION (float_mode),
- 				     float_mode);
- 
-   scalar_int_mode int_mode;
-   if (is_a <scalar_int_mode> (mode, &int_mode))
-     return gnat_type_for_size (GET_MODE_BITSIZE (int_mode), unsignedp);
- 
-   if (VECTOR_MODE_P (mode))
-     {
-       machine_mode inner_mode = GET_MODE_INNER (mode);
-       tree inner_type = gnat_type_for_mode (inner_mode, unsignedp);
-       if (inner_type)
- 	return build_vector_type_for_mode (inner_type, mode);
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Return the signed or unsigned version of TYPE_NODE, a scalar type, the
-    signedness being specified by UNSIGNEDP.  */
- 
- tree
- gnat_signed_or_unsigned_type_for (int unsignedp, tree type_node)
- {
-   if (type_node == char_type_node)
-     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
- 
-   tree type = gnat_type_for_size (TYPE_PRECISION (type_node), unsignedp);
- 
-   if (TREE_CODE (type_node) == INTEGER_TYPE && TYPE_MODULAR_P (type_node))
-     {
-       type = copy_type (type);
-       TREE_TYPE (type) = type_node;
-     }
-   else if (TREE_TYPE (type_node)
- 	   && TREE_CODE (TREE_TYPE (type_node)) == INTEGER_TYPE
- 	   && TYPE_MODULAR_P (TREE_TYPE (type_node)))
-     {
-       type = copy_type (type);
-       TREE_TYPE (type) = TREE_TYPE (type_node);
-     }
- 
-   return type;
- }
- 
- /* Return 1 if the types T1 and T2 are compatible, i.e. if they can be
-    transparently converted to each other.  */
- 
- int
- gnat_types_compatible_p (tree t1, tree t2)
- {
-   enum tree_code code;
- 
-   /* This is the default criterion.  */
-   if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
-     return 1;
- 
-   /* We only check structural equivalence here.  */
-   if ((code = TREE_CODE (t1)) != TREE_CODE (t2))
-     return 0;
- 
-   /* Vector types are also compatible if they have the same number of subparts
-      and the same form of (scalar) element type.  */
-   if (code == VECTOR_TYPE
-       && known_eq (TYPE_VECTOR_SUBPARTS (t1), TYPE_VECTOR_SUBPARTS (t2))
-       && TREE_CODE (TREE_TYPE (t1)) == TREE_CODE (TREE_TYPE (t2))
-       && TYPE_PRECISION (TREE_TYPE (t1)) == TYPE_PRECISION (TREE_TYPE (t2)))
-     return 1;
- 
-   /* Array types are also compatible if they are constrained and have the same
-      domain(s), the same component type and the same scalar storage order.  */
-   if (code == ARRAY_TYPE
-       && (TYPE_DOMAIN (t1) == TYPE_DOMAIN (t2)
- 	  || (TYPE_DOMAIN (t1)
- 	      && TYPE_DOMAIN (t2)
- 	      && tree_int_cst_equal (TYPE_MIN_VALUE (TYPE_DOMAIN (t1)),
- 				     TYPE_MIN_VALUE (TYPE_DOMAIN (t2)))
- 	      && tree_int_cst_equal (TYPE_MAX_VALUE (TYPE_DOMAIN (t1)),
- 				     TYPE_MAX_VALUE (TYPE_DOMAIN (t2)))))
-       && (TREE_TYPE (t1) == TREE_TYPE (t2)
- 	  || (TREE_CODE (TREE_TYPE (t1)) == ARRAY_TYPE
- 	      && gnat_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2))))
-       && TYPE_REVERSE_STORAGE_ORDER (t1) == TYPE_REVERSE_STORAGE_ORDER (t2))
-     return 1;
- 
-   return 0;
- }
- 
- /* Return true if EXPR is a useless type conversion.  */
- 
- bool
- gnat_useless_type_conversion (tree expr)
- {
-   if (CONVERT_EXPR_P (expr)
-       || TREE_CODE (expr) == VIEW_CONVERT_EXPR
-       || TREE_CODE (expr) == NON_LVALUE_EXPR)
-     return gnat_types_compatible_p (TREE_TYPE (expr),
- 				    TREE_TYPE (TREE_OPERAND (expr, 0)));
- 
-   return false;
- }
- 
- /* Return true if T, a {FUNCTION,METHOD}_TYPE, has the specified flags.  */
- 
- bool
- fntype_same_flags_p (const_tree t, tree cico_list, bool return_unconstrained_p,
- 		     bool return_by_direct_ref_p, bool return_by_invisi_ref_p)
- {
-   return TYPE_CI_CO_LIST (t) == cico_list
- 	 && TYPE_RETURN_UNCONSTRAINED_P (t) == return_unconstrained_p
- 	 && TYPE_RETURN_BY_DIRECT_REF_P (t) == return_by_direct_ref_p
- 	 && TREE_ADDRESSABLE (t) == return_by_invisi_ref_p;
- }
- 
- /* EXP is an expression for the size of an object.  If this size contains
-    discriminant references, replace them with the maximum (if MAX_P) or
-    minimum (if !MAX_P) possible value of the discriminant.
- 
-    Note that the expression may have already been gimplified,in which case
-    COND_EXPRs have VOID_TYPE and no operands, and this must be handled.  */
- 
- tree
- max_size (tree exp, bool max_p)
- {
-   enum tree_code code = TREE_CODE (exp);
-   tree type = TREE_TYPE (exp);
-   tree op0, op1, op2;
- 
-   switch (TREE_CODE_CLASS (code))
-     {
-     case tcc_declaration:
-     case tcc_constant:
-       return exp;
- 
-     case tcc_exceptional:
-       gcc_assert (code == SSA_NAME);
-       return exp;
- 
-     case tcc_vl_exp:
-       if (code == CALL_EXPR)
- 	{
- 	  tree t, *argarray;
- 	  int n, i;
- 
- 	  t = maybe_inline_call_in_expr (exp);
- 	  if (t)
- 	    return max_size (t, max_p);
- 
- 	  n = call_expr_nargs (exp);
- 	  gcc_assert (n > 0);
- 	  argarray = XALLOCAVEC (tree, n);
- 	  for (i = 0; i < n; i++)
- 	    argarray[i] = max_size (CALL_EXPR_ARG (exp, i), max_p);
- 	  return build_call_array (type, CALL_EXPR_FN (exp), n, argarray);
- 	}
-       break;
- 
-     case tcc_reference:
-       /* If this contains a PLACEHOLDER_EXPR, it is the thing we want to
- 	 modify.  Otherwise, we treat it like a variable.  */
-       if (CONTAINS_PLACEHOLDER_P (exp))
- 	{
- 	  tree base_type = get_base_type (TREE_TYPE (TREE_OPERAND (exp, 1)));
- 	  tree val
- 	    = fold_convert (base_type,
- 			    max_p
- 			    ? TYPE_MAX_VALUE (type) : TYPE_MIN_VALUE (type));
- 
- 	  /* Walk down the extra subtypes to get more restrictive bounds.  */
- 	  while (TYPE_IS_EXTRA_SUBTYPE_P (type))
- 	    {
- 	      type = TREE_TYPE (type);
- 	      if (max_p)
- 		val = fold_build2 (MIN_EXPR, base_type, val,
- 				   fold_convert (base_type,
- 						 TYPE_MAX_VALUE (type)));
- 	      else
- 		val = fold_build2 (MAX_EXPR, base_type, val,
- 				   fold_convert (base_type,
- 						 TYPE_MIN_VALUE (type)));
- 	    }
- 
- 	  return fold_convert (type, max_size (val, max_p));
- 	}
- 
-       return exp;
- 
-     case tcc_comparison:
-       return build_int_cst (type, max_p ? 1 : 0);
- 
-     case tcc_unary:
-       op0 = TREE_OPERAND (exp, 0);
- 
-       if (code == NON_LVALUE_EXPR)
- 	return max_size (op0, max_p);
- 
-       if (VOID_TYPE_P (TREE_TYPE (op0)))
- 	return max_p ? TYPE_MAX_VALUE (type) : TYPE_MIN_VALUE (type);
- 
-       op0 = max_size (op0, code == NEGATE_EXPR ? !max_p : max_p);
- 
-       if (op0 == TREE_OPERAND (exp, 0))
- 	return exp;
- 
-       return fold_build1 (code, type, op0);
- 
-     case tcc_binary:
-       op0 = TREE_OPERAND (exp, 0);
-       op1 = TREE_OPERAND (exp, 1);
- 
-       /* If we have a multiply-add with a "negative" value in an unsigned
- 	 type, do a multiply-subtract with the negated value, in order to
- 	 avoid creating a spurious overflow below.  */
-       if (code == PLUS_EXPR
- 	  && TREE_CODE (op0) == MULT_EXPR
- 	  && TYPE_UNSIGNED (type)
- 	  && TREE_CODE (TREE_OPERAND (op0, 1)) == INTEGER_CST
- 	  && !TREE_OVERFLOW (TREE_OPERAND (op0, 1))
- 	  && tree_int_cst_sign_bit (TREE_OPERAND (op0, 1)))
- 	{
- 	  tree tmp = op1;
- 	  op1 = build2 (MULT_EXPR, type, TREE_OPERAND (op0, 0),
- 			fold_build1 (NEGATE_EXPR, type,
- 				    TREE_OPERAND (op0, 1)));
- 	  op0 = tmp;
- 	  code = MINUS_EXPR;
- 	}
- 
-       op0 = max_size (op0, max_p);
-       op1 = max_size (op1, code == MINUS_EXPR ? !max_p : max_p);
- 
-       if ((code == MINUS_EXPR || code == PLUS_EXPR))
- 	{
- 	  /* If the op0 has overflowed and the op1 is a variable,
- 	     propagate the overflow by returning the op0.  */
- 	  if (TREE_CODE (op0) == INTEGER_CST
- 	      && TREE_OVERFLOW (op0)
- 	      && TREE_CODE (op1) != INTEGER_CST)
- 	    return op0;
- 
- 	  /* If we have a "negative" value in an unsigned type, do the
- 	     opposite operation on the negated value, in order to avoid
- 	     creating a spurious overflow below.  */
- 	  if (TYPE_UNSIGNED (type)
- 	      && TREE_CODE (op1) == INTEGER_CST
- 	      && !TREE_OVERFLOW (op1)
- 	      && tree_int_cst_sign_bit (op1))
- 	    {
- 	      op1 = fold_build1 (NEGATE_EXPR, type, op1);
- 	      code = (code == MINUS_EXPR ? PLUS_EXPR : MINUS_EXPR);
- 	    }
- 	}
- 
-       if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
- 	return exp;
- 
-       /* We need to detect overflows so we call size_binop here.  */
-       return size_binop (code, op0, op1);
- 
-     case tcc_expression:
-       switch (TREE_CODE_LENGTH (code))
- 	{
- 	case 1:
- 	  if (code == SAVE_EXPR)
- 	    return exp;
- 
- 	  op0 = max_size (TREE_OPERAND (exp, 0),
- 			  code == TRUTH_NOT_EXPR ? !max_p : max_p);
- 
- 	  if (op0 == TREE_OPERAND (exp, 0))
- 	    return exp;
- 
- 	  return fold_build1 (code, type, op0);
- 
- 	case 2:
- 	  if (code == COMPOUND_EXPR)
- 	    return max_size (TREE_OPERAND (exp, 1), max_p);
- 
- 	  op0 = max_size (TREE_OPERAND (exp, 0), max_p);
- 	  op1 = max_size (TREE_OPERAND (exp, 1), max_p);
- 
- 	  if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
- 	    return exp;
- 
- 	  return fold_build2 (code, type, op0, op1);
- 
- 	case 3:
- 	  if (code == COND_EXPR)
- 	    {
- 	      op0 = TREE_OPERAND (exp, 0);
- 	      op1 = TREE_OPERAND (exp, 1);
- 	      op2 = TREE_OPERAND (exp, 2);
- 
- 	      if (!op1 || !op2)
- 		return exp;
- 
- 	      op1 = max_size (op1, max_p);
- 	      op2 = max_size (op2, max_p);
- 
- 	      /* If we have the MAX of a "negative" value in an unsigned type
- 		 and zero for a length expression, just return zero.  */
- 	      if (max_p
- 		  && TREE_CODE (op0) == LE_EXPR
- 		  && TYPE_UNSIGNED (type)
- 		  && TREE_CODE (op1) == INTEGER_CST
- 		  && !TREE_OVERFLOW (op1)
- 		  && tree_int_cst_sign_bit (op1)
- 		  && integer_zerop (op2))
- 		return op2;
- 
- 	      return fold_build2 (max_p ? MAX_EXPR : MIN_EXPR, type, op1, op2);
- 	    }
- 	  break;
- 
- 	default:
- 	  break;
- 	}
- 
-       /* Other tree classes cannot happen.  */
-     default:
-       break;
-     }
- 
-   gcc_unreachable ();
- }
- 
- /* Build a template of type TEMPLATE_TYPE from the array bounds of ARRAY_TYPE.
-    EXPR is an expression that we can use to locate any PLACEHOLDER_EXPRs.
-    Return a constructor for the template.  */
- 
- tree
- build_template (tree template_type, tree array_type, tree expr)
- {
-   vec<constructor_elt, va_gc> *template_elts = NULL;
-   tree bound_list = NULL_TREE;
-   tree field;
- 
-   while (TREE_CODE (array_type) == RECORD_TYPE
- 	 && (TYPE_PADDING_P (array_type)
- 	     || TYPE_JUSTIFIED_MODULAR_P (array_type)))
-     array_type = TREE_TYPE (TYPE_FIELDS (array_type));
- 
-   if (TREE_CODE (array_type) == ARRAY_TYPE
-       || (TREE_CODE (array_type) == INTEGER_TYPE
- 	  && TYPE_HAS_ACTUAL_BOUNDS_P (array_type)))
-     bound_list = TYPE_ACTUAL_BOUNDS (array_type);
- 
-   /* First make the list for a CONSTRUCTOR for the template.  Go down
-      the field list of the template instead of the type chain because
-      this array might be an Ada array of array and we can't tell where
-      the nested array stop being the underlying object.  */
-   for (field = TYPE_FIELDS (template_type);
-        field;
-        field = DECL_CHAIN (DECL_CHAIN (field)))
-     {
-       tree bounds, min, max;
- 
-       /* If we have a bound list, get the bounds from there.  Likewise
- 	 for an ARRAY_TYPE.  Otherwise, if expr is a PARM_DECL with
- 	 DECL_BY_COMPONENT_PTR_P, use the bounds of the field in the
- 	 template, but this will only give us a maximum range.  */
-       if (bound_list)
- 	{
- 	  bounds = TREE_VALUE (bound_list);
- 	  bound_list = TREE_CHAIN (bound_list);
- 	}
-       else if (TREE_CODE (array_type) == ARRAY_TYPE)
- 	{
- 	  bounds = TYPE_INDEX_TYPE (TYPE_DOMAIN (array_type));
- 	  array_type = TREE_TYPE (array_type);
- 	}
-       else if (expr && TREE_CODE (expr) == PARM_DECL
- 	       && DECL_BY_COMPONENT_PTR_P (expr))
- 	bounds = TREE_TYPE (field);
-       else
- 	gcc_unreachable ();
- 
-       min = convert (TREE_TYPE (field), TYPE_MIN_VALUE (bounds));
-       max = convert (TREE_TYPE (DECL_CHAIN (field)), TYPE_MAX_VALUE (bounds));
- 
-       /* If either MIN or MAX involve a PLACEHOLDER_EXPR, we must
- 	 substitute it from OBJECT.  */
-       min = SUBSTITUTE_PLACEHOLDER_IN_EXPR (min, expr);
-       max = SUBSTITUTE_PLACEHOLDER_IN_EXPR (max, expr);
- 
-       CONSTRUCTOR_APPEND_ELT (template_elts, field, min);
-       CONSTRUCTOR_APPEND_ELT (template_elts, DECL_CHAIN (field), max);
-     }
- 
-   return gnat_build_constructor (template_type, template_elts);
- }
- 
- /* Return true if TYPE is suitable for the element type of a vector.  */
- 
- static bool
- type_for_vector_element_p (tree type)
- {
-   machine_mode mode;
- 
-   if (!INTEGRAL_TYPE_P (type)
-       && !SCALAR_FLOAT_TYPE_P (type)
-       && !FIXED_POINT_TYPE_P (type))
-     return false;
- 
-   mode = TYPE_MODE (type);
-   if (GET_MODE_CLASS (mode) != MODE_INT
-       && !SCALAR_FLOAT_MODE_P (mode)
-       && !ALL_SCALAR_FIXED_POINT_MODE_P (mode))
-     return false;
- 
-   return true;
- }
- 
- /* Return a vector type given the SIZE and the INNER_TYPE, or NULL_TREE if
-    this is not possible.  If ATTRIBUTE is non-zero, we are processing the
-    attribute declaration and want to issue error messages on failure.  */
- 
- static tree
- build_vector_type_for_size (tree inner_type, tree size, tree attribute)
- {
-   unsigned HOST_WIDE_INT size_int, inner_size_int;
-   int nunits;
- 
-   /* Silently punt on variable sizes.  We can't make vector types for them,
-      need to ignore them on front-end generated subtypes of unconstrained
-      base types, and this attribute is for binding implementors, not end
-      users, so we should never get there from legitimate explicit uses.  */
-   if (!tree_fits_uhwi_p (size))
-     return NULL_TREE;
-   size_int = tree_to_uhwi (size);
- 
-   if (!type_for_vector_element_p (inner_type))
-     {
-       if (attribute)
- 	error ("invalid element type for attribute %qs",
- 	       IDENTIFIER_POINTER (attribute));
-       return NULL_TREE;
-     }
-   inner_size_int = tree_to_uhwi (TYPE_SIZE_UNIT (inner_type));
- 
-   if (size_int % inner_size_int)
-     {
-       if (attribute)
- 	error ("vector size not an integral multiple of component size");
-       return NULL_TREE;
-     }
- 
-   if (size_int == 0)
-     {
-       if (attribute)
- 	error ("zero vector size");
-       return NULL_TREE;
-     }
- 
-   nunits = size_int / inner_size_int;
-   if (nunits & (nunits - 1))
-     {
-       if (attribute)
- 	error ("number of components of vector not a power of two");
-       return NULL_TREE;
-     }
- 
-   return build_vector_type (inner_type, nunits);
- }
- 
- /* Return a vector type whose representative array type is ARRAY_TYPE, or
-    NULL_TREE if this is not possible.  If ATTRIBUTE is non-zero, we are
-    processing the attribute and want to issue error messages on failure.  */
- 
- static tree
- build_vector_type_for_array (tree array_type, tree attribute)
- {
-   tree vector_type = build_vector_type_for_size (TREE_TYPE (array_type),
- 						 TYPE_SIZE_UNIT (array_type),
- 						 attribute);
-   if (!vector_type)
-     return NULL_TREE;
- 
-   TYPE_REPRESENTATIVE_ARRAY (vector_type) = array_type;
-   return vector_type;
- }
- 
- /* Build a type to be used to represent an aliased object whose nominal type
-    is an unconstrained array.  This consists of a RECORD_TYPE containing a
-    field of TEMPLATE_TYPE and a field of OBJECT_TYPE, which is an ARRAY_TYPE.
-    If ARRAY_TYPE is that of an unconstrained array, this is used to represent
-    an arbitrary unconstrained object.  Use NAME as the name of the record.
-    DEBUG_INFO_P is true if we need to write debug information for the type.  */
- 
- tree
- build_unc_object_type (tree template_type, tree object_type, tree name,
- 		       bool debug_info_p)
- {
-   tree type = make_node (RECORD_TYPE);
-   tree template_field
-     = create_field_decl (get_identifier ("BOUNDS"), template_type, type,
- 			 NULL_TREE, NULL_TREE, 0, 1);
-   tree array_field
-     = create_field_decl (get_identifier ("ARRAY"), object_type, type,
- 			 NULL_TREE, NULL_TREE, 0, 1);
- 
-   TYPE_NAME (type) = name;
-   TYPE_CONTAINS_TEMPLATE_P (type) = 1;
-   DECL_CHAIN (template_field) = array_field;
-   finish_record_type (type, template_field, 0, true);
- 
-   /* Declare it now since it will never be declared otherwise.  This is
-      necessary to ensure that its subtrees are properly marked.  */
-   create_type_decl (name, type, true, debug_info_p, Empty);
- 
-   return type;
- }
- 
- /* Same, taking a thin or fat pointer type instead of a template type. */
- 
- tree
- build_unc_object_type_from_ptr (tree thin_fat_ptr_type, tree object_type,
- 				tree name, bool debug_info_p)
- {
-   tree template_type;
- 
-   gcc_assert (TYPE_IS_FAT_OR_THIN_POINTER_P (thin_fat_ptr_type));
- 
-   template_type
-     = (TYPE_IS_FAT_POINTER_P (thin_fat_ptr_type)
-        ? TREE_TYPE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (thin_fat_ptr_type))))
-        : TREE_TYPE (TYPE_FIELDS (TREE_TYPE (thin_fat_ptr_type))));
- 
-   return
-     build_unc_object_type (template_type, object_type, name, debug_info_p);
- }
- 
- /* Update anything previously pointing to OLD_TYPE to point to NEW_TYPE.
-    In the normal case this is just two adjustments, but we have more to
-    do if NEW_TYPE is an UNCONSTRAINED_ARRAY_TYPE.  */
- 
- void
- update_pointer_to (tree old_type, tree new_type)
- {
-   tree ptr = TYPE_POINTER_TO (old_type);
-   tree ref = TYPE_REFERENCE_TO (old_type);
-   tree t;
- 
-   /* If this is the main variant, process all the other variants first.  */
-   if (TYPE_MAIN_VARIANT (old_type) == old_type)
-     for (t = TYPE_NEXT_VARIANT (old_type); t; t = TYPE_NEXT_VARIANT (t))
-       update_pointer_to (t, new_type);
- 
-   /* If no pointers and no references, we are done.  */
-   if (!ptr && !ref)
-     return;
- 
-   /* Merge the old type qualifiers in the new type.
- 
-      Each old variant has qualifiers for specific reasons, and the new
-      designated type as well.  Each set of qualifiers represents useful
-      information grabbed at some point, and merging the two simply unifies
-      these inputs into the final type description.
- 
-      Consider for instance a volatile type frozen after an access to constant
-      type designating it; after the designated type's freeze, we get here with
-      a volatile NEW_TYPE and a dummy OLD_TYPE with a readonly variant, created
-      when the access type was processed.  We will make a volatile and readonly
-      designated type, because that's what it really is.
- 
-      We might also get here for a non-dummy OLD_TYPE variant with different
-      qualifiers than those of NEW_TYPE, for instance in some cases of pointers
-      to private record type elaboration (see the comments around the call to
-      this routine in gnat_to_gnu_entity <E_Access_Type>).  We have to merge
-      the qualifiers in those cases too, to avoid accidentally discarding the
-      initial set, and will often end up with OLD_TYPE == NEW_TYPE then.  */
-   new_type
-     = build_qualified_type (new_type,
- 			    TYPE_QUALS (old_type) | TYPE_QUALS (new_type));
- 
-   /* If old type and new type are identical, there is nothing to do.  */
-   if (old_type == new_type)
-     return;
- 
-   /* Otherwise, first handle the simple case.  */
-   if (TREE_CODE (new_type) != UNCONSTRAINED_ARRAY_TYPE)
-     {
-       tree new_ptr, new_ref;
- 
-       /* If pointer or reference already points to new type, nothing to do.
- 	 This can happen as update_pointer_to can be invoked multiple times
- 	 on the same couple of types because of the type variants.  */
-       if ((ptr && TREE_TYPE (ptr) == new_type)
- 	  || (ref && TREE_TYPE (ref) == new_type))
- 	return;
- 
-       /* Chain PTR and its variants at the end.  */
-       new_ptr = TYPE_POINTER_TO (new_type);
-       if (new_ptr)
- 	{
- 	  while (TYPE_NEXT_PTR_TO (new_ptr))
- 	    new_ptr = TYPE_NEXT_PTR_TO (new_ptr);
- 	  TYPE_NEXT_PTR_TO (new_ptr) = ptr;
- 	}
-       else
- 	TYPE_POINTER_TO (new_type) = ptr;
- 
-       /* Now adjust them.  */
-       for (; ptr; ptr = TYPE_NEXT_PTR_TO (ptr))
- 	for (t = TYPE_MAIN_VARIANT (ptr); t; t = TYPE_NEXT_VARIANT (t))
- 	  {
- 	    TREE_TYPE (t) = new_type;
- 	    if (TYPE_NULL_BOUNDS (t))
- 	      TREE_TYPE (TREE_OPERAND (TYPE_NULL_BOUNDS (t), 0)) = new_type;
- 	    TYPE_CANONICAL (t) = TYPE_CANONICAL (TYPE_POINTER_TO (new_type));
- 	  }
- 
-       /* Chain REF and its variants at the end.  */
-       new_ref = TYPE_REFERENCE_TO (new_type);
-       if (new_ref)
- 	{
- 	  while (TYPE_NEXT_REF_TO (new_ref))
- 	    new_ref = TYPE_NEXT_REF_TO (new_ref);
- 	  TYPE_NEXT_REF_TO (new_ref) = ref;
- 	}
-       else
- 	TYPE_REFERENCE_TO (new_type) = ref;
- 
-       /* Now adjust them.  */
-       for (; ref; ref = TYPE_NEXT_REF_TO (ref))
- 	for (t = TYPE_MAIN_VARIANT (ref); t; t = TYPE_NEXT_VARIANT (t))
- 	  {
- 	    TREE_TYPE (t) = new_type;
- 	    TYPE_CANONICAL (t) = TYPE_CANONICAL (TYPE_REFERENCE_TO (new_type));
- 	  }
- 
-       TYPE_POINTER_TO (old_type) = NULL_TREE;
-       TYPE_REFERENCE_TO (old_type) = NULL_TREE;
-     }
- 
-   /* Now deal with the unconstrained array case.  In this case the pointer
-      is actually a record where both fields are pointers to dummy nodes.
-      Turn them into pointers to the correct types using update_pointer_to.
-      Likewise for the pointer to the object record (thin pointer).  */
-   else
-     {
-       tree new_ptr = TYPE_POINTER_TO (new_type);
- 
-       gcc_assert (TYPE_IS_FAT_POINTER_P (ptr));
- 
-       /* If PTR already points to NEW_TYPE, nothing to do.  This can happen
- 	 since update_pointer_to can be invoked multiple times on the same
- 	 couple of types because of the type variants.  */
-       if (TYPE_UNCONSTRAINED_ARRAY (ptr) == new_type)
- 	return;
- 
-       update_pointer_to
- 	(TREE_TYPE (TREE_TYPE (TYPE_FIELDS (ptr))),
- 	 TREE_TYPE (TREE_TYPE (TYPE_FIELDS (new_ptr))));
- 
-       update_pointer_to
- 	(TREE_TYPE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (ptr)))),
- 	 TREE_TYPE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (new_ptr)))));
- 
-       update_pointer_to (TYPE_OBJECT_RECORD_TYPE (old_type),
- 			 TYPE_OBJECT_RECORD_TYPE (new_type));
- 
-       TYPE_POINTER_TO (old_type) = NULL_TREE;
-       TYPE_REFERENCE_TO (old_type) = NULL_TREE;
-     }
- }
- 
- /* Convert EXPR, a pointer to a constrained array, into a pointer to an
-    unconstrained one.  This involves making or finding a template.  */
- 
- static tree
- convert_to_fat_pointer (tree type, tree expr)
- {
-   tree template_type = TREE_TYPE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type))));
-   tree p_array_type = TREE_TYPE (TYPE_FIELDS (type));
-   tree etype = TREE_TYPE (expr);
-   tree template_addr;
-   vec<constructor_elt, va_gc> *v;
-   vec_alloc (v, 2);
- 
-   /* If EXPR is null, make a fat pointer that contains a null pointer to the
-      array (compare_fat_pointers ensures that this is the full discriminant)
-      and a valid pointer to the bounds.  This latter property is necessary
-      since the compiler can hoist the load of the bounds done through it.  */
-   if (integer_zerop (expr))
-     {
-       tree ptr_template_type = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type)));
-       tree null_bounds, t;
- 
-       if (TYPE_NULL_BOUNDS (ptr_template_type))
- 	null_bounds = TYPE_NULL_BOUNDS (ptr_template_type);
-       else
- 	{
- 	  /* The template type can still be dummy at this point so we build an
- 	     empty constructor.  The middle-end will fill it in with zeros.  */
- 	  t = build_constructor (template_type, NULL);
- 	  TREE_CONSTANT (t) = TREE_STATIC (t) = 1;
- 	  null_bounds = build_unary_op (ADDR_EXPR, NULL_TREE, t);
- 	  SET_TYPE_NULL_BOUNDS (ptr_template_type, null_bounds);
- 	}
- 
-       CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (type),
- 			      fold_convert (p_array_type, null_pointer_node));
-       CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (TYPE_FIELDS (type)), null_bounds);
-       t = build_constructor (type, v);
-       /* Do not set TREE_CONSTANT so as to force T to static memory.  */
-       TREE_CONSTANT (t) = 0;
-       TREE_STATIC (t) = 1;
- 
-       return t;
-     }
- 
-   /* If EXPR is a thin pointer, make template and data from the record.  */
-   if (TYPE_IS_THIN_POINTER_P (etype))
-     {
-       tree field = TYPE_FIELDS (TREE_TYPE (etype));
- 
-       expr = gnat_protect_expr (expr);
- 
-       /* If we have a TYPE_UNCONSTRAINED_ARRAY attached to the RECORD_TYPE,
- 	 the thin pointer value has been shifted so we shift it back to get
- 	 the template address.  */
-       if (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (etype)))
- 	{
- 	  template_addr
- 	    = build_binary_op (POINTER_PLUS_EXPR, etype, expr,
- 			       fold_build1 (NEGATE_EXPR, sizetype,
- 					    byte_position
- 					    (DECL_CHAIN (field))));
- 	  template_addr
- 	    = fold_convert (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type))),
- 			    template_addr);
- 	}
- 
-       /* Otherwise we explicitly take the address of the fields.  */
-       else
- 	{
- 	  expr = build_unary_op (INDIRECT_REF, NULL_TREE, expr);
- 	  template_addr
- 	    = build_unary_op (ADDR_EXPR, NULL_TREE,
- 			      build_component_ref (expr, field, false));
- 	  expr = build_unary_op (ADDR_EXPR, NULL_TREE,
- 				 build_component_ref (expr, DECL_CHAIN (field),
- 						      false));
- 	}
-     }
- 
-   /* Otherwise, build the constructor for the template.  */
-   else
-     template_addr
-       = build_unary_op (ADDR_EXPR, NULL_TREE,
- 			build_template (template_type, TREE_TYPE (etype),
- 					expr));
- 
-   /* The final result is a constructor for the fat pointer.
- 
-      If EXPR is an argument of a foreign convention subprogram, the type it
-      points to is directly the component type.  In this case, the expression
-      type may not match the corresponding FIELD_DECL type at this point, so we
-      call "convert" here to fix that up if necessary.  This type consistency is
-      required, for instance because it ensures that possible later folding of
-      COMPONENT_REFs against this constructor always yields something of the
-      same type as the initial reference.
- 
-      Note that the call to "build_template" above is still fine because it
-      will only refer to the provided TEMPLATE_TYPE in this case.  */
-   CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (type), convert (p_array_type, expr));
-   CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (TYPE_FIELDS (type)), template_addr);
-   return gnat_build_constructor (type, v);
- }
- 
- /* Create an expression whose value is that of EXPR,
-    converted to type TYPE.  The TREE_TYPE of the value
-    is always TYPE.  This function implements all reasonable
-    conversions; callers should filter out those that are
-    not permitted by the language being compiled.  */
- 
- tree
- convert (tree type, tree expr)
- {
-   tree etype = TREE_TYPE (expr);
-   enum tree_code ecode = TREE_CODE (etype);
-   enum tree_code code = TREE_CODE (type);
- 
-   /* If the expression is already of the right type, we are done.  */
-   if (etype == type)
-     return expr;
- 
-   /* If both input and output have padding and are of variable size, do this
-      as an unchecked conversion.  Likewise if one is a mere variant of the
-      other, so we avoid a pointless unpad/repad sequence.  */
-   else if (code == RECORD_TYPE && ecode == RECORD_TYPE
- 	   && TYPE_PADDING_P (type) && TYPE_PADDING_P (etype)
- 	   && (!TREE_CONSTANT (TYPE_SIZE (type))
- 	       || !TREE_CONSTANT (TYPE_SIZE (etype))
- 	       || TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (etype)
- 	       || TYPE_NAME (TREE_TYPE (TYPE_FIELDS (type)))
- 		  == TYPE_NAME (TREE_TYPE (TYPE_FIELDS (etype)))))
-     ;
- 
-   /* If the output type has padding, convert to the inner type and make a
-      constructor to build the record, unless a variable size is involved.  */
-   else if (code == RECORD_TYPE && TYPE_PADDING_P (type))
-     {
-       /* If we previously converted from another type and our type is
- 	 of variable size, remove the conversion to avoid the need for
- 	 variable-sized temporaries.  Likewise for a conversion between
- 	 original and packable version.  */
-       if (TREE_CODE (expr) == VIEW_CONVERT_EXPR
- 	  && (!TREE_CONSTANT (TYPE_SIZE (type))
- 	      || (ecode == RECORD_TYPE
- 		  && TYPE_NAME (etype)
- 		     == TYPE_NAME (TREE_TYPE (TREE_OPERAND (expr, 0))))))
- 	expr = TREE_OPERAND (expr, 0);
- 
-       /* If we are just removing the padding from expr, convert the original
- 	 object if we have variable size in order to avoid the need for some
- 	 variable-sized temporaries.  Likewise if the padding is a variant
- 	 of the other, so we avoid a pointless unpad/repad sequence.  */
-       if (TREE_CODE (expr) == COMPONENT_REF
- 	  && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (expr, 0)))
- 	  && (!TREE_CONSTANT (TYPE_SIZE (type))
- 	      || TYPE_MAIN_VARIANT (type)
- 		 == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (expr, 0)))
- 	      || (ecode == RECORD_TYPE
- 		  && TYPE_NAME (etype)
- 		     == TYPE_NAME (TREE_TYPE (TYPE_FIELDS (type))))))
- 	return convert (type, TREE_OPERAND (expr, 0));
- 
-       /* If the inner type is of self-referential size and the expression type
- 	 is a record, do this as an unchecked conversion unless both types are
- 	 essentially the same.  */
-       if (ecode == RECORD_TYPE
- 	  && CONTAINS_PLACEHOLDER_P (DECL_SIZE (TYPE_FIELDS (type)))
- 	  && TYPE_MAIN_VARIANT (etype)
- 	     != TYPE_MAIN_VARIANT (TREE_TYPE (TYPE_FIELDS (type))))
- 	return unchecked_convert (type, expr, false);
- 
-       /* If we are converting between array types with variable size, do the
- 	 final conversion as an unchecked conversion, again to avoid the need
- 	 for some variable-sized temporaries.  If valid, this conversion is
- 	 very likely purely technical and without real effects.  */
-       if (ecode == ARRAY_TYPE
- 	  && TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == ARRAY_TYPE
- 	  && !TREE_CONSTANT (TYPE_SIZE (etype))
- 	  && !TREE_CONSTANT (TYPE_SIZE (type)))
- 	return unchecked_convert (type,
- 				  convert (TREE_TYPE (TYPE_FIELDS (type)),
- 					   expr),
- 				  false);
- 
-       tree t = convert (TREE_TYPE (TYPE_FIELDS (type)), expr);
- 
-       /* If converting to the inner type has already created a CONSTRUCTOR with
-          the right size, then reuse it instead of creating another one.  This
-          can happen for the padding type built to overalign local variables.  */
-       if (TREE_CODE (t) == VIEW_CONVERT_EXPR
- 	  && TREE_CODE (TREE_OPERAND (t, 0)) == CONSTRUCTOR
- 	  && TREE_CONSTANT (TYPE_SIZE (TREE_TYPE (TREE_OPERAND (t, 0))))
- 	  && tree_int_cst_equal (TYPE_SIZE (type),
- 				 TYPE_SIZE (TREE_TYPE (TREE_OPERAND (t, 0)))))
- 	return build1 (VIEW_CONVERT_EXPR, type, TREE_OPERAND (t, 0));
- 
-       vec<constructor_elt, va_gc> *v;
-       vec_alloc (v, 1);
-       CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (type), t);
-       return gnat_build_constructor (type, v);
-     }
- 
-   /* If the input type has padding, remove it and convert to the output type.
-      The conditions ordering is arranged to ensure that the output type is not
-      a padding type here, as it is not clear whether the conversion would
-      always be correct if this was to happen.  */
-   else if (ecode == RECORD_TYPE && TYPE_PADDING_P (etype))
-     {
-       tree unpadded;
- 
-       /* If we have just converted to this padded type, just get the
- 	 inner expression.  */
-       if (TREE_CODE (expr) == CONSTRUCTOR)
- 	unpadded = CONSTRUCTOR_ELT (expr, 0)->value;
- 
-       /* Otherwise, build an explicit component reference.  */
-       else
- 	unpadded = build_component_ref (expr, TYPE_FIELDS (etype), false);
- 
-       return convert (type, unpadded);
-     }
- 
-   /* If the input is a biased type, convert first to the base type and add
-      the bias.  Note that the bias must go through a full conversion to the
-      base type, lest it is itself a biased value; this happens for subtypes
-      of biased types.  */
-   if (ecode == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (etype))
-     return convert (type, fold_build2 (PLUS_EXPR, TREE_TYPE (etype),
- 				       fold_convert (TREE_TYPE (etype), expr),
- 				       convert (TREE_TYPE (etype),
- 						TYPE_MIN_VALUE (etype))));
- 
-   /* If the input is a justified modular type, we need to extract the actual
-      object before converting it to an other type with the exceptions of an
-      [unconstrained] array or a mere type variant.  It is useful to avoid
-      the extraction and conversion in these cases because it could end up
-      replacing a VAR_DECL by a constructor and we might be about the take
-      the address of the result.  */
-   if (ecode == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (etype)
-       && code != ARRAY_TYPE
-       && code != UNCONSTRAINED_ARRAY_TYPE
-       && TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (etype))
-     return
-       convert (type, build_component_ref (expr, TYPE_FIELDS (etype), false));
- 
-   /* If converting to a type that contains a template, convert to the data
-      type and then build the template. */
-   if (code == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (type))
-     {
-       tree obj_type = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type)));
-       vec<constructor_elt, va_gc> *v;
-       vec_alloc (v, 2);
- 
-       /* If the source already has a template, get a reference to the
- 	 associated array only, as we are going to rebuild a template
- 	 for the target type anyway.  */
-       expr = maybe_unconstrained_array (expr);
- 
-       CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (type),
- 			      build_template (TREE_TYPE (TYPE_FIELDS (type)),
- 					      obj_type, NULL_TREE));
-       if (expr)
- 	CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (TYPE_FIELDS (type)),
- 				convert (obj_type, expr));
-       return gnat_build_constructor (type, v);
-     }
- 
-   /* There are some cases of expressions that we process specially.  */
-   switch (TREE_CODE (expr))
-     {
-     case ERROR_MARK:
-       return expr;
- 
-     case NULL_EXPR:
-       /* Just set its type here.  For TRANSFORM_EXPR, we will do the actual
- 	 conversion in gnat_expand_expr.  NULL_EXPR does not represent
- 	 and actual value, so no conversion is needed.  */
-       expr = copy_node (expr);
-       TREE_TYPE (expr) = type;
-       return expr;
- 
-     case STRING_CST:
-       /* If we are converting a STRING_CST to another constrained array type,
- 	 just make a new one in the proper type.  */
-       if (code == ecode
- 	  && !(TREE_CONSTANT (TYPE_SIZE (etype))
- 	       && !TREE_CONSTANT (TYPE_SIZE (type))))
- 	{
- 	  expr = copy_node (expr);
- 	  TREE_TYPE (expr) = type;
- 	  return expr;
- 	}
-       break;
- 
-     case VECTOR_CST:
-       /* If we are converting a VECTOR_CST to a mere type variant, just make
- 	 a new one in the proper type.  */
-       if (code == ecode && gnat_types_compatible_p (type, etype))
- 	{
- 	  expr = copy_node (expr);
- 	  TREE_TYPE (expr) = type;
- 	  return expr;
- 	}
-       break;
- 
-     case CONSTRUCTOR:
-       /* If we are converting a CONSTRUCTOR to a mere type variant, or to
- 	 another padding type around the same type, just make a new one in
- 	 the proper type.  */
-       if (code == ecode
- 	  && (gnat_types_compatible_p (type, etype)
- 	      || (code == RECORD_TYPE
- 		  && TYPE_PADDING_P (type) && TYPE_PADDING_P (etype)
- 		  && TREE_TYPE (TYPE_FIELDS (type))
- 		     == TREE_TYPE (TYPE_FIELDS (etype)))))
- 	{
- 	  expr = copy_node (expr);
- 	  TREE_TYPE (expr) = type;
- 	  CONSTRUCTOR_ELTS (expr) = vec_safe_copy (CONSTRUCTOR_ELTS (expr));
- 	  return expr;
- 	}
- 
-       /* Likewise for a conversion between original and packable version, or
- 	 conversion between types of the same size and with the same list of
- 	 fields, but we have to work harder to preserve type consistency.  */
-       if (code == ecode
- 	  && code == RECORD_TYPE
- 	  && (TYPE_NAME (type) == TYPE_NAME (etype)
- 	      || tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (etype))))
- 
- 	{
- 	  vec<constructor_elt, va_gc> *e = CONSTRUCTOR_ELTS (expr);
- 	  unsigned HOST_WIDE_INT len = vec_safe_length (e);
- 	  vec<constructor_elt, va_gc> *v;
- 	  vec_alloc (v, len);
- 	  tree efield = TYPE_FIELDS (etype), field = TYPE_FIELDS (type);
- 	  unsigned HOST_WIDE_INT idx;
- 	  tree index, value;
- 
- 	  /* Whether we need to clear TREE_CONSTANT et al. on the output
- 	     constructor when we convert in place.  */
- 	  bool clear_constant = false;
- 
- 	  FOR_EACH_CONSTRUCTOR_ELT(e, idx, index, value)
- 	    {
- 	      /* Skip the missing fields in the CONSTRUCTOR.  */
- 	      while (efield && field && !SAME_FIELD_P (efield, index))
- 	        {
- 		  efield = DECL_CHAIN (efield);
- 		  field = DECL_CHAIN (field);
- 		}
- 	      /* The field must be the same.  */
- 	      if (!(efield && field && SAME_FIELD_P (efield, field)))
- 		break;
- 	      constructor_elt elt
- 	        = {field, convert (TREE_TYPE (field), value)};
- 	      v->quick_push (elt);
- 
- 	      /* If packing has made this field a bitfield and the input
- 		 value couldn't be emitted statically any more, we need to
- 		 clear TREE_CONSTANT on our output.  */
- 	      if (!clear_constant
- 		  && TREE_CONSTANT (expr)
- 		  && !CONSTRUCTOR_BITFIELD_P (efield)
- 		  && CONSTRUCTOR_BITFIELD_P (field)
- 		  && !initializer_constant_valid_for_bitfield_p (value))
- 		clear_constant = true;
- 
- 	      efield = DECL_CHAIN (efield);
- 	      field = DECL_CHAIN (field);
- 	    }
- 
- 	  /* If we have been able to match and convert all the input fields
- 	     to their output type, convert in place now.  We'll fallback to a
- 	     view conversion downstream otherwise.  */
- 	  if (idx == len)
- 	    {
- 	      expr = copy_node (expr);
- 	      TREE_TYPE (expr) = type;
- 	      CONSTRUCTOR_ELTS (expr) = v;
- 	      if (clear_constant)
- 		TREE_CONSTANT (expr) = TREE_STATIC (expr) = 0;
- 	      return expr;
- 	    }
- 	}
- 
-       /* Likewise for a conversion between array type and vector type with a
-          compatible representative array.  */
-       else if (code == VECTOR_TYPE
- 	       && ecode == ARRAY_TYPE
- 	       && gnat_types_compatible_p (TYPE_REPRESENTATIVE_ARRAY (type),
- 					   etype))
- 	{
- 	  vec<constructor_elt, va_gc> *e = CONSTRUCTOR_ELTS (expr);
- 	  unsigned HOST_WIDE_INT len = vec_safe_length (e);
- 	  vec<constructor_elt, va_gc> *v;
- 	  unsigned HOST_WIDE_INT ix;
- 	  tree value;
- 
- 	  /* Build a VECTOR_CST from a *constant* array constructor.  */
- 	  if (TREE_CONSTANT (expr))
- 	    {
- 	      bool constant_p = true;
- 
- 	      /* Iterate through elements and check if all constructor
- 		 elements are *_CSTs.  */
- 	      FOR_EACH_CONSTRUCTOR_VALUE (e, ix, value)
- 		if (!CONSTANT_CLASS_P (value))
- 		  {
- 		    constant_p = false;
- 		    break;
- 		  }
- 
- 	      if (constant_p)
- 		return build_vector_from_ctor (type,
- 					       CONSTRUCTOR_ELTS (expr));
- 	    }
- 
- 	  /* Otherwise, build a regular vector constructor.  */
- 	  vec_alloc (v, len);
- 	  FOR_EACH_CONSTRUCTOR_VALUE (e, ix, value)
- 	    {
- 	      constructor_elt elt = {NULL_TREE, value};
- 	      v->quick_push (elt);
- 	    }
- 	  expr = copy_node (expr);
- 	  TREE_TYPE (expr) = type;
- 	  CONSTRUCTOR_ELTS (expr) = v;
- 	  return expr;
- 	}
-       break;
- 
-     case UNCONSTRAINED_ARRAY_REF:
-       /* First retrieve the underlying array.  */
-       expr = maybe_unconstrained_array (expr);
-       etype = TREE_TYPE (expr);
-       ecode = TREE_CODE (etype);
-       break;
- 
-     case VIEW_CONVERT_EXPR:
-       {
- 	/* GCC 4.x is very sensitive to type consistency overall, and view
- 	   conversions thus are very frequent.  Even though just "convert"ing
- 	   the inner operand to the output type is fine in most cases, it
- 	   might expose unexpected input/output type mismatches in special
- 	   circumstances so we avoid such recursive calls when we can.  */
- 	tree op0 = TREE_OPERAND (expr, 0);
- 
- 	/* If we are converting back to the original type, we can just
- 	   lift the input conversion.  This is a common occurrence with
- 	   switches back-and-forth amongst type variants.  */
- 	if (type == TREE_TYPE (op0))
- 	  return op0;
- 
- 	/* Otherwise, if we're converting between two aggregate or vector
- 	   types, we might be allowed to substitute the VIEW_CONVERT_EXPR
- 	   target type in place or to just convert the inner expression.  */
- 	if ((AGGREGATE_TYPE_P (type) && AGGREGATE_TYPE_P (etype))
- 	    || (VECTOR_TYPE_P (type) && VECTOR_TYPE_P (etype)))
- 	  {
- 	    /* If we are converting between mere variants, we can just
- 	       substitute the VIEW_CONVERT_EXPR in place.  */
- 	    if (gnat_types_compatible_p (type, etype))
- 	      return build1 (VIEW_CONVERT_EXPR, type, op0);
- 
- 	    /* Otherwise, we may just bypass the input view conversion unless
- 	       one of the types is a fat pointer,  which is handled by
- 	       specialized code below which relies on exact type matching.  */
- 	    else if (!TYPE_IS_FAT_POINTER_P (type)
- 		     && !TYPE_IS_FAT_POINTER_P (etype))
- 	      return convert (type, op0);
- 	  }
- 
- 	break;
-       }
- 
-     default:
-       break;
-     }
- 
-   /* Check for converting to a pointer to an unconstrained array.  */
-   if (TYPE_IS_FAT_POINTER_P (type) && !TYPE_IS_FAT_POINTER_P (etype))
-     return convert_to_fat_pointer (type, expr);
- 
-   /* If we are converting between two aggregate or vector types that are mere
-      variants, just make a VIEW_CONVERT_EXPR.  Likewise when we are converting
-      to a vector type from its representative array type.  */
-   else if ((code == ecode
- 	    && (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
- 	    && gnat_types_compatible_p (type, etype))
- 	   || (code == VECTOR_TYPE
- 	       && ecode == ARRAY_TYPE
- 	       && gnat_types_compatible_p (TYPE_REPRESENTATIVE_ARRAY (type),
- 					   etype)))
-     return build1 (VIEW_CONVERT_EXPR, type, expr);
- 
-   /* If we are converting between tagged types, try to upcast properly.
-      But don't do it if we are just annotating types since tagged types
-      aren't fully laid out in this mode.  */
-   else if (ecode == RECORD_TYPE && code == RECORD_TYPE
- 	   && TYPE_ALIGN_OK (etype) && TYPE_ALIGN_OK (type)
- 	   && !type_annotate_only)
-     {
-       tree child_etype = etype;
-       do {
- 	tree field = TYPE_FIELDS (child_etype);
- 	if (DECL_NAME (field) == parent_name_id && TREE_TYPE (field) == type)
- 	  return build_component_ref (expr, field, false);
- 	child_etype = TREE_TYPE (field);
-       } while (TREE_CODE (child_etype) == RECORD_TYPE);
-     }
- 
-   /* If we are converting from a smaller form of record type back to it, just
-      make a VIEW_CONVERT_EXPR.  But first pad the expression to have the same
-      size on both sides.  */
-   else if (ecode == RECORD_TYPE && code == RECORD_TYPE
- 	   && smaller_form_type_p (etype, type))
-     {
-       expr = convert (maybe_pad_type (etype, TYPE_SIZE (type), 0, Empty,
- 				      false, false, true),
- 		      expr);
-       return build1 (VIEW_CONVERT_EXPR, type, expr);
-     }
- 
-   /* In all other cases of related types, make a NOP_EXPR.  */
-   else if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (etype))
-     return fold_convert (type, expr);
- 
-   switch (code)
-     {
-     case VOID_TYPE:
-       return fold_build1 (CONVERT_EXPR, type, expr);
- 
-     case INTEGER_TYPE:
-       if (TYPE_HAS_ACTUAL_BOUNDS_P (type)
- 	  && (ecode == ARRAY_TYPE || ecode == UNCONSTRAINED_ARRAY_TYPE
- 	      || (ecode == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (etype))))
- 	return unchecked_convert (type, expr, false);
- 
-       /* If the output is a biased type, convert first to the base type and
- 	 subtract the bias.  Note that the bias itself must go through a full
- 	 conversion to the base type, lest it is a biased value; this happens
- 	 for subtypes of biased types.  */
-       if (TYPE_BIASED_REPRESENTATION_P (type))
- 	return fold_convert (type,
- 			     fold_build2 (MINUS_EXPR, TREE_TYPE (type),
- 					  convert (TREE_TYPE (type), expr),
- 					  convert (TREE_TYPE (type),
- 						   TYPE_MIN_VALUE (type))));
- 
-       /* If we are converting an additive expression to an integer type
- 	 with lower precision, be wary of the optimization that can be
- 	 applied by convert_to_integer.  There are 2 problematic cases:
- 	   - if the first operand was originally of a biased type,
- 	     because we could be recursively called to convert it
- 	     to an intermediate type and thus rematerialize the
- 	     additive operator endlessly,
- 	   - if the expression contains a placeholder, because an
- 	     intermediate conversion that changes the sign could
- 	     be inserted and thus introduce an artificial overflow
- 	     at compile time when the placeholder is substituted.  */
-       if (ecode == INTEGER_TYPE
- 	  && TYPE_PRECISION (type) < TYPE_PRECISION (etype)
- 	  && (TREE_CODE (expr) == PLUS_EXPR || TREE_CODE (expr) == MINUS_EXPR))
- 	{
- 	  tree op0 = get_unwidened (TREE_OPERAND (expr, 0), type);
- 
- 	  if ((TREE_CODE (TREE_TYPE (op0)) == INTEGER_TYPE
- 	       && TYPE_BIASED_REPRESENTATION_P (TREE_TYPE (op0)))
- 	      || CONTAINS_PLACEHOLDER_P (expr))
- 	    return fold_convert (type, expr);
- 	}
- 
-       /* ... fall through ... */
- 
-     case ENUMERAL_TYPE:
-       return fold (convert_to_integer (type, expr));
- 
-     case BOOLEAN_TYPE:
-       /* Do not use convert_to_integer with boolean types.  */
-       return fold_convert_loc (EXPR_LOCATION (expr), type, expr);
- 
-     case POINTER_TYPE:
-     case REFERENCE_TYPE:
-       /* If converting between two thin pointers, adjust if needed to account
- 	 for differing offsets from the base pointer, depending on whether
- 	 there is a TYPE_UNCONSTRAINED_ARRAY attached to the record type.  */
-       if (TYPE_IS_THIN_POINTER_P (etype) && TYPE_IS_THIN_POINTER_P (type))
- 	{
- 	  tree etype_pos
- 	    = TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (etype))
- 	      ? byte_position (DECL_CHAIN (TYPE_FIELDS (TREE_TYPE (etype))))
- 	      : size_zero_node;
- 	  tree type_pos
- 	    = TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))
- 	      ? byte_position (DECL_CHAIN (TYPE_FIELDS (TREE_TYPE (type))))
- 	      : size_zero_node;
- 	  tree byte_diff = size_diffop (type_pos, etype_pos);
- 
- 	  expr = build1 (NOP_EXPR, type, expr);
- 	  if (integer_zerop (byte_diff))
- 	    return expr;
- 
- 	  return build_binary_op (POINTER_PLUS_EXPR, type, expr,
- 				  fold_convert (sizetype, byte_diff));
- 	}
- 
-       /* If converting fat pointer to normal or thin pointer, get the pointer
- 	 to the array and then convert it.  */
-       if (TYPE_IS_FAT_POINTER_P (etype))
- 	expr = build_component_ref (expr, TYPE_FIELDS (etype), false);
- 
-       return fold (convert_to_pointer (type, expr));
- 
-     case REAL_TYPE:
-       return fold (convert_to_real (type, expr));
- 
-     case RECORD_TYPE:
-       /* Do a normal conversion between scalar and justified modular type.  */
-       if (TYPE_JUSTIFIED_MODULAR_P (type) && !AGGREGATE_TYPE_P (etype))
- 	{
- 	  vec<constructor_elt, va_gc> *v;
- 	  vec_alloc (v, 1);
- 
- 	  CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (type),
- 				  convert (TREE_TYPE (TYPE_FIELDS (type)),
- 					   expr));
- 	  return gnat_build_constructor (type, v);
- 	}
- 
-       /* In these cases, assume the front-end has validated the conversion.
- 	 If the conversion is valid, it will be a bit-wise conversion, so
- 	 it can be viewed as an unchecked conversion.  */
-       return unchecked_convert (type, expr, false);
- 
-     case ARRAY_TYPE:
-       /* Do a normal conversion between unconstrained and constrained array
- 	 type, assuming the latter is a constrained version of the former.  */
-       if (TREE_CODE (expr) == INDIRECT_REF
- 	  && ecode == ARRAY_TYPE
- 	  && TREE_TYPE (etype) == TREE_TYPE (type))
- 	{
- 	  tree ptr_type = build_pointer_type (type);
- 	  tree t = build_unary_op (INDIRECT_REF, NULL_TREE,
- 				   fold_convert (ptr_type,
- 						 TREE_OPERAND (expr, 0)));
- 	  TREE_READONLY (t) = TREE_READONLY (expr);
- 	  TREE_THIS_NOTRAP (t) = TREE_THIS_NOTRAP (expr);
- 	  return t;
- 	}
- 
-       /* In these cases, assume the front-end has validated the conversion.
- 	 If the conversion is valid, it will be a bit-wise conversion, so
- 	 it can be viewed as an unchecked conversion.  */
-       return unchecked_convert (type, expr, false);
- 
-     case UNION_TYPE:
-       /* This is a either a conversion between a tagged type and some
- 	 subtype, which we have to mark as a UNION_TYPE because of
- 	 overlapping fields or a conversion of an Unchecked_Union.  */
-       return unchecked_convert (type, expr, false);
- 
-     case UNCONSTRAINED_ARRAY_TYPE:
-       /* If the input is a VECTOR_TYPE, convert to the representative
- 	 array type first.  */
-       if (ecode == VECTOR_TYPE)
- 	{
- 	  expr = convert (TYPE_REPRESENTATIVE_ARRAY (etype), expr);
- 	  etype = TREE_TYPE (expr);
- 	  ecode = TREE_CODE (etype);
- 	}
- 
-       /* If EXPR is a constrained array, take its address, convert it to a
- 	 fat pointer, and then dereference it.  Likewise if EXPR is a
- 	 record containing both a template and a constrained array.
- 	 Note that a record representing a justified modular type
- 	 always represents a packed constrained array.  */
-       if (ecode == ARRAY_TYPE
- 	  || (ecode == INTEGER_TYPE && TYPE_HAS_ACTUAL_BOUNDS_P (etype))
- 	  || (ecode == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (etype))
- 	  || (ecode == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (etype)))
- 	return
- 	  build_unary_op
- 	    (INDIRECT_REF, NULL_TREE,
- 	     convert_to_fat_pointer (TREE_TYPE (type),
- 				     build_unary_op (ADDR_EXPR,
- 						     NULL_TREE, expr)));
- 
-       /* Do something very similar for converting one unconstrained
- 	 array to another.  */
-       else if (ecode == UNCONSTRAINED_ARRAY_TYPE)
- 	return
- 	  build_unary_op (INDIRECT_REF, NULL_TREE,
- 			  convert (TREE_TYPE (type),
- 				   build_unary_op (ADDR_EXPR,
- 						   NULL_TREE, expr)));
-       else
- 	gcc_unreachable ();
- 
-     case COMPLEX_TYPE:
-       return fold (convert_to_complex (type, expr));
- 
-     default:
-       gcc_unreachable ();
-     }
- }
- 
- /* Create an expression whose value is that of EXPR converted to the common
-    index type, which is sizetype.  EXPR is supposed to be in the base type
-    of the GNAT index type.  Calling it is equivalent to doing
- 
-      convert (sizetype, expr)
- 
-    but we try to distribute the type conversion with the knowledge that EXPR
-    cannot overflow in its type.  This is a best-effort approach and we fall
-    back to the above expression as soon as difficulties are encountered.
- 
-    This is necessary to overcome issues that arise when the GNAT base index
-    type and the GCC common index type (sizetype) don't have the same size,
-    which is quite frequent on 64-bit architectures.  In this case, and if
-    the GNAT base index type is signed but the iteration type of the loop has
-    been forced to unsigned, the loop scalar evolution engine cannot compute
-    a simple evolution for the general induction variables associated with the
-    array indices, because it will preserve the wrap-around semantics in the
-    unsigned type of their "inner" part.  As a result, many loop optimizations
-    are blocked.
- 
-    The solution is to use a special (basic) induction variable that is at
-    least as large as sizetype, and to express the aforementioned general
-    induction variables in terms of this induction variable, eliminating
-    the problematic intermediate truncation to the GNAT base index type.
-    This is possible as long as the original expression doesn't overflow
-    and if the middle-end hasn't introduced artificial overflows in the
-    course of the various simplification it can make to the expression.  */
- 
- tree
- convert_to_index_type (tree expr)
- {
-   enum tree_code code = TREE_CODE (expr);
-   tree type = TREE_TYPE (expr);
- 
-   /* If the type is unsigned, overflow is allowed so we cannot be sure that
-      EXPR doesn't overflow.  Keep it simple if optimization is disabled.  */
-   if (TYPE_UNSIGNED (type) || !optimize || optimize_debug)
-     return convert (sizetype, expr);
- 
-   switch (code)
-     {
-     case VAR_DECL:
-       /* The main effect of the function: replace a loop parameter with its
- 	 associated special induction variable.  */
-       if (DECL_LOOP_PARM_P (expr) && DECL_INDUCTION_VAR (expr))
- 	expr = DECL_INDUCTION_VAR (expr);
-       break;
- 
-     CASE_CONVERT:
-       {
- 	tree otype = TREE_TYPE (TREE_OPERAND (expr, 0));
- 	/* Bail out as soon as we suspect some sort of type frobbing.  */
- 	if (TYPE_PRECISION (type) != TYPE_PRECISION (otype)
- 	    || TYPE_UNSIGNED (type) != TYPE_UNSIGNED (otype))
- 	  break;
-       }
- 
-       /* ... fall through ... */
- 
-     case NON_LVALUE_EXPR:
-       return fold_build1 (code, sizetype,
- 			  convert_to_index_type (TREE_OPERAND (expr, 0)));
- 
-     case PLUS_EXPR:
-     case MINUS_EXPR:
-     case MULT_EXPR:
-       return fold_build2 (code, sizetype,
- 			  convert_to_index_type (TREE_OPERAND (expr, 0)),
- 			  convert_to_index_type (TREE_OPERAND (expr, 1)));
- 
-     case COMPOUND_EXPR:
-       return fold_build2 (code, sizetype, TREE_OPERAND (expr, 0),
- 			  convert_to_index_type (TREE_OPERAND (expr, 1)));
- 
-     case COND_EXPR:
-       return fold_build3 (code, sizetype, TREE_OPERAND (expr, 0),
- 			  convert_to_index_type (TREE_OPERAND (expr, 1)),
- 			  convert_to_index_type (TREE_OPERAND (expr, 2)));
- 
-     default:
-       break;
-     }
- 
-   return convert (sizetype, expr);
- }
- 
- /* Remove all conversions that are done in EXP.  This includes converting
-    from a padded type or to a justified modular type.  If TRUE_ADDRESS
-    is true, always return the address of the containing object even if
-    the address is not bit-aligned.  */
- 
- tree
- remove_conversions (tree exp, bool true_address)
- {
-   switch (TREE_CODE (exp))
-     {
-     case CONSTRUCTOR:
-       if (true_address
- 	  && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
- 	  && TYPE_JUSTIFIED_MODULAR_P (TREE_TYPE (exp)))
- 	return
- 	  remove_conversions (CONSTRUCTOR_ELT (exp, 0)->value, true);
-       break;
- 
-     case COMPONENT_REF:
-       if (TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (exp, 0))))
- 	return remove_conversions (TREE_OPERAND (exp, 0), true_address);
-       break;
- 
-     CASE_CONVERT:
-     case VIEW_CONVERT_EXPR:
-     case NON_LVALUE_EXPR:
-       return remove_conversions (TREE_OPERAND (exp, 0), true_address);
- 
-     default:
-       break;
-     }
- 
-   return exp;
- }
- 
- /* If EXP's type is an UNCONSTRAINED_ARRAY_TYPE, return an expression that
-    refers to the underlying array.  If it has TYPE_CONTAINS_TEMPLATE_P,
-    likewise return an expression pointing to the underlying array.  */
- 
- tree
- maybe_unconstrained_array (tree exp)
- {
-   enum tree_code code = TREE_CODE (exp);
-   tree type = TREE_TYPE (exp);
- 
-   switch (TREE_CODE (type))
-     {
-     case UNCONSTRAINED_ARRAY_TYPE:
-       if (code == UNCONSTRAINED_ARRAY_REF)
- 	{
- 	  const bool read_only = TREE_READONLY (exp);
- 	  const bool no_trap = TREE_THIS_NOTRAP (exp);
- 
- 	  exp = TREE_OPERAND (exp, 0);
- 	  type = TREE_TYPE (exp);
- 
- 	  if (TREE_CODE (exp) == COND_EXPR)
- 	    {
- 	      tree op1
- 		= build_unary_op (INDIRECT_REF, NULL_TREE,
- 				  build_component_ref (TREE_OPERAND (exp, 1),
- 						       TYPE_FIELDS (type),
- 						       false));
- 	      tree op2
- 		= build_unary_op (INDIRECT_REF, NULL_TREE,
- 				  build_component_ref (TREE_OPERAND (exp, 2),
- 						       TYPE_FIELDS (type),
- 						       false));
- 
- 	      exp = build3 (COND_EXPR,
- 			    TREE_TYPE (TREE_TYPE (TYPE_FIELDS (type))),
- 			    TREE_OPERAND (exp, 0), op1, op2);
- 	    }
- 	  else
- 	    {
- 	      exp = build_unary_op (INDIRECT_REF, NULL_TREE,
- 				    build_component_ref (exp,
- 							 TYPE_FIELDS (type),
- 						         false));
- 	      TREE_READONLY (exp) = read_only;
- 	      TREE_THIS_NOTRAP (exp) = no_trap;
- 	    }
- 	}
- 
-       else if (code == NULL_EXPR)
- 	exp = build1 (NULL_EXPR,
- 		      TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (type)))),
- 		      TREE_OPERAND (exp, 0));
-       break;
- 
-     case RECORD_TYPE:
-       /* If this is a padded type and it contains a template, convert to the
- 	 unpadded type first.  */
-       if (TYPE_PADDING_P (type)
- 	  && TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == RECORD_TYPE
- 	  && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (TYPE_FIELDS (type))))
- 	{
- 	  exp = convert (TREE_TYPE (TYPE_FIELDS (type)), exp);
- 	  code = TREE_CODE (exp);
- 	  type = TREE_TYPE (exp);
- 	}
- 
-       if (TYPE_CONTAINS_TEMPLATE_P (type))
- 	{
- 	  /* If the array initializer is a box, return NULL_TREE.  */
- 	  if (code == CONSTRUCTOR && CONSTRUCTOR_NELTS (exp) < 2)
- 	    return NULL_TREE;
- 
- 	  exp = build_component_ref (exp, DECL_CHAIN (TYPE_FIELDS (type)),
- 				     false);
- 
- 	  /* If the array is padded, remove the padding.  */
- 	  exp = maybe_padded_object (exp);
- 	}
-       break;
- 
-     default:
-       break;
-     }
- 
-   return exp;
- }
- 
- /* Return true if EXPR is an expression that can be folded as an operand
-    of a VIEW_CONVERT_EXPR.  See ada-tree.h for a complete rationale.  */
- 
- static bool
- can_fold_for_view_convert_p (tree expr)
- {
-   tree t1, t2;
- 
-   /* The folder will fold NOP_EXPRs between integral types with the same
-      precision (in the middle-end's sense).  We cannot allow it if the
-      types don't have the same precision in the Ada sense as well.  */
-   if (TREE_CODE (expr) != NOP_EXPR)
-     return true;
- 
-   t1 = TREE_TYPE (expr);
-   t2 = TREE_TYPE (TREE_OPERAND (expr, 0));
- 
-   /* Defer to the folder for non-integral conversions.  */
-   if (!(INTEGRAL_TYPE_P (t1) && INTEGRAL_TYPE_P (t2)))
-     return true;
- 
-   /* Only fold conversions that preserve both precisions.  */
-   if (TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
-       && operand_equal_p (rm_size (t1), rm_size (t2), 0))
-     return true;
- 
-   return false;
- }
- 
- /* Return an expression that does an unchecked conversion of EXPR to TYPE.
-    If NOTRUNC_P is true, truncation operations should be suppressed.
- 
-    Special care is required with (source or target) integral types whose
-    precision is not equal to their size, to make sure we fetch or assign
-    the value bits whose location might depend on the endianness, e.g.
- 
-      Rmsize : constant := 8;
-      subtype Int is Integer range 0 .. 2 ** Rmsize - 1;
- 
-      type Bit_Array is array (1 .. Rmsize) of Boolean;
-      pragma Pack (Bit_Array);
- 
-      function To_Bit_Array is new Unchecked_Conversion (Int, Bit_Array);
- 
-      Value : Int := 2#1000_0001#;
-      Vbits : Bit_Array := To_Bit_Array (Value);
- 
-    we expect the 8 bits at Vbits'Address to always contain Value, while
-    their original location depends on the endianness, at Value'Address
-    on a little-endian architecture but not on a big-endian one.
- 
-    One pitfall is that we cannot use TYPE_UNSIGNED directly to decide how
-    the bits between the precision and the size are filled, because of the
-    trick used in the E_Signed_Integer_Subtype case of gnat_to_gnu_entity.
-    So we use the special predicate type_unsigned_for_rm above.  */
- 
- tree
- unchecked_convert (tree type, tree expr, bool notrunc_p)
- {
-   tree etype = TREE_TYPE (expr);
-   enum tree_code ecode = TREE_CODE (etype);
-   enum tree_code code = TREE_CODE (type);
-   const bool ebiased
-     = (ecode == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (etype));
-   const bool biased
-     = (code == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (type));
-   const bool ereverse
-     = (AGGREGATE_TYPE_P (etype) && TYPE_REVERSE_STORAGE_ORDER (etype));
-   const bool reverse
-     = (AGGREGATE_TYPE_P (type) && TYPE_REVERSE_STORAGE_ORDER (type));
-   tree tem;
-   int c = 0;
- 
-   /* If the expression is already of the right type, we are done.  */
-   if (etype == type)
-     return expr;
- 
-   /* If both types are integral or regular pointer, then just do a normal
-      conversion.  Likewise for a conversion to an unconstrained array.  */
-   if (((INTEGRAL_TYPE_P (type)
- 	|| (POINTER_TYPE_P (type) && !TYPE_IS_THIN_POINTER_P (type))
- 	|| (code == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (type)))
-        && (INTEGRAL_TYPE_P (etype)
- 	   || (POINTER_TYPE_P (etype) && !TYPE_IS_THIN_POINTER_P (etype))
- 	   || (ecode == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (etype))))
-       || code == UNCONSTRAINED_ARRAY_TYPE)
-     {
-       if (ebiased)
- 	{
- 	  tree ntype = copy_type (etype);
- 	  TYPE_BIASED_REPRESENTATION_P (ntype) = 0;
- 	  TYPE_MAIN_VARIANT (ntype) = ntype;
- 	  expr = build1 (NOP_EXPR, ntype, expr);
- 	}
- 
-       if (biased)
- 	{
- 	  tree rtype = copy_type (type);
- 	  TYPE_BIASED_REPRESENTATION_P (rtype) = 0;
- 	  TYPE_MAIN_VARIANT (rtype) = rtype;
- 	  expr = convert (rtype, expr);
- 	  expr = build1 (NOP_EXPR, type, expr);
- 	}
-       else
- 	expr = convert (type, expr);
-     }
- 
-   /* If we are converting to an integral type whose precision is not equal
-      to its size, first unchecked convert to a record type that contains a
-      field of the given precision.  Then extract the result from the field.
- 
-      There is a subtlety if the source type is an aggregate type with reverse
-      storage order because its representation is not contiguous in the native
-      storage order, i.e. a direct unchecked conversion to an integral type
-      with N bits of precision cannot read the first N bits of the aggregate
-      type.  To overcome it, we do an unchecked conversion to an integral type
-      with reverse storage order and return the resulting value.  This also
-      ensures that the result of the unchecked conversion doesn't depend on
-      the endianness of the target machine, but only on the storage order of
-      the aggregate type.
- 
-      Finally, for the sake of consistency, we do the unchecked conversion
-      to an integral type with reverse storage order as soon as the source
-      type is an aggregate type with reverse storage order, even if there
-      are no considerations of precision or size involved.  Ultimately, we
-      further extend this processing to any scalar type.  */
-   else if ((INTEGRAL_TYPE_P (type)
- 	    && TYPE_RM_SIZE (type)
- 	    && ((c = tree_int_cst_compare (TYPE_RM_SIZE (type),
- 					   TYPE_SIZE (type))) < 0
- 		|| ereverse))
- 	   || (SCALAR_FLOAT_TYPE_P (type) && ereverse))
-     {
-       tree rec_type = make_node (RECORD_TYPE);
-       tree field_type, field;
- 
-       TYPE_REVERSE_STORAGE_ORDER (rec_type) = ereverse;
- 
-       if (c < 0)
- 	{
- 	  const unsigned HOST_WIDE_INT prec
- 	    = TREE_INT_CST_LOW (TYPE_RM_SIZE (type));
- 	  if (type_unsigned_for_rm (type))
- 	    field_type = make_unsigned_type (prec);
- 	  else
- 	    field_type = make_signed_type (prec);
- 	  SET_TYPE_RM_SIZE (field_type, TYPE_RM_SIZE (type));
- 	}
-       else
- 	field_type = type;
- 
-       field = create_field_decl (get_identifier ("OBJ"), field_type, rec_type,
- 				 NULL_TREE, bitsize_zero_node, c < 0, 0);
- 
-       finish_record_type (rec_type, field, 1, false);
- 
-       expr = unchecked_convert (rec_type, expr, notrunc_p);
-       expr = build_component_ref (expr, field, false);
-       expr = fold_build1 (NOP_EXPR, type, expr);
-     }
- 
-   /* Similarly if we are converting from an integral type whose precision is
-      not equal to its size, first copy into a field of the given precision
-      and unchecked convert the record type.
- 
-      The same considerations as above apply if the target type is an aggregate
-      type with reverse storage order and we also proceed similarly.  */
-   else if ((INTEGRAL_TYPE_P (etype)
- 	    && TYPE_RM_SIZE (etype)
- 	    && ((c = tree_int_cst_compare (TYPE_RM_SIZE (etype),
- 					   TYPE_SIZE (etype))) < 0
- 		|| reverse))
- 	   || (SCALAR_FLOAT_TYPE_P (etype) && reverse))
-     {
-       tree rec_type = make_node (RECORD_TYPE);
-       vec<constructor_elt, va_gc> *v;
-       vec_alloc (v, 1);
-       tree field_type, field;
- 
-       TYPE_REVERSE_STORAGE_ORDER (rec_type) = reverse;
- 
-       if (c < 0)
- 	{
- 	  const unsigned HOST_WIDE_INT prec
- 	    = TREE_INT_CST_LOW (TYPE_RM_SIZE (etype));
- 	  if (type_unsigned_for_rm (etype))
- 	    field_type = make_unsigned_type (prec);
- 	  else
- 	    field_type = make_signed_type (prec);
- 	  SET_TYPE_RM_SIZE (field_type, TYPE_RM_SIZE (etype));
- 	}
-       else
- 	field_type = etype;
- 
-       field = create_field_decl (get_identifier ("OBJ"), field_type, rec_type,
- 				 NULL_TREE, bitsize_zero_node, c < 0, 0);
- 
-       finish_record_type (rec_type, field, 1, false);
- 
-       expr = fold_build1 (NOP_EXPR, field_type, expr);
-       CONSTRUCTOR_APPEND_ELT (v, field, expr);
-       expr = gnat_build_constructor (rec_type, v);
-       expr = unchecked_convert (type, expr, notrunc_p);
-     }
- 
-   /* If we are converting from a scalar type to a type with a different size,
-      we need to pad to have the same size on both sides.
- 
-      ??? We cannot do it unconditionally because unchecked conversions are
-      used liberally by the front-end to implement interface thunks:
- 
-        type ada__tags__addr_ptr is access system.address;
-        S191s : constant ada__tags__addr_ptr := ada__tags__addr_ptr!(S190s);
-        return p___size__4 (p__object!(S191s.all));
- 
-      so we need to skip dereferences.  */
-   else if (!INDIRECT_REF_P (expr)
- 	   && !AGGREGATE_TYPE_P (etype)
- 	   && ecode != UNCONSTRAINED_ARRAY_TYPE
- 	   && TREE_CONSTANT (TYPE_SIZE (type))
- 	   && (c = tree_int_cst_compare (TYPE_SIZE (etype), TYPE_SIZE (type))))
-     {
-       if (c < 0)
- 	{
- 	  expr = convert (maybe_pad_type (etype, TYPE_SIZE (type), 0, Empty,
- 					  false, false, true),
- 			  expr);
- 	  expr = unchecked_convert (type, expr, notrunc_p);
- 	}
-       else
- 	{
- 	  tree rec_type = maybe_pad_type (type, TYPE_SIZE (etype), 0, Empty,
- 					  false, false, true);
- 	  expr = unchecked_convert (rec_type, expr, notrunc_p);
- 	  expr = build_component_ref (expr, TYPE_FIELDS (rec_type), false);
- 	}
-     }
- 
-   /* Likewise if we are converting from a scalar type to a type with self-
-      referential size.  We use the max size to do the padding in this case.  */
-   else if (!INDIRECT_REF_P (expr)
- 	   && !AGGREGATE_TYPE_P (etype)
- 	   && ecode != UNCONSTRAINED_ARRAY_TYPE
- 	   && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type)))
-     {
-       tree new_size = max_size (TYPE_SIZE (type), true);
-       c = tree_int_cst_compare (TYPE_SIZE (etype), new_size);
-       if (c < 0)
- 	{
- 	  expr = convert (maybe_pad_type (etype, new_size, 0, Empty,
- 					  false, false, true),
- 			  expr);
- 	  expr = unchecked_convert (type, expr, notrunc_p);
- 	}
-       else
- 	{
- 	  tree rec_type = maybe_pad_type (type, TYPE_SIZE (etype), 0, Empty,
- 					  false, false, true);
- 	  expr = unchecked_convert (rec_type, expr, notrunc_p);
- 	  expr = build_component_ref (expr, TYPE_FIELDS (rec_type), false);
- 	}
-     }
- 
-   /* We have a special case when we are converting between two unconstrained
-      array types.  In that case, take the address, convert the fat pointer
-      types, and dereference.  */
-   else if (ecode == code && code == UNCONSTRAINED_ARRAY_TYPE)
-     expr = build_unary_op (INDIRECT_REF, NULL_TREE,
- 			   build1 (VIEW_CONVERT_EXPR, TREE_TYPE (type),
- 				   build_unary_op (ADDR_EXPR, NULL_TREE,
- 						   expr)));
- 
-   /* Another special case is when we are converting to a vector type from its
-      representative array type; this a regular conversion.  */
-   else if (code == VECTOR_TYPE
- 	   && ecode == ARRAY_TYPE
- 	   && gnat_types_compatible_p (TYPE_REPRESENTATIVE_ARRAY (type),
- 				       etype))
-     expr = convert (type, expr);
- 
-   /* And, if the array type is not the representative, we try to build an
-      intermediate vector type of which the array type is the representative
-      and to do the unchecked conversion between the vector types, in order
-      to enable further simplifications in the middle-end.  */
-   else if (code == VECTOR_TYPE
- 	   && ecode == ARRAY_TYPE
- 	   && (tem = build_vector_type_for_array (etype, NULL_TREE)))
-     {
-       expr = convert (tem, expr);
-       return unchecked_convert (type, expr, notrunc_p);
-     }
- 
-   /* If we are converting a CONSTRUCTOR to a more aligned aggregate type, bump
-      the alignment of the CONSTRUCTOR to speed up the copy operation.  But do
-      not do it for a conversion between original and packable version to avoid
-      an infinite recursion.  */
-   else if (TREE_CODE (expr) == CONSTRUCTOR
- 	   && AGGREGATE_TYPE_P (type)
- 	   && TYPE_NAME (type) != TYPE_NAME (etype)
- 	   && TYPE_ALIGN (etype) < TYPE_ALIGN (type))
-     {
-       expr = convert (maybe_pad_type (etype, NULL_TREE, TYPE_ALIGN (type),
- 				      Empty, false, false, true),
- 		      expr);
-       return unchecked_convert (type, expr, notrunc_p);
-     }
- 
-   /* If we are converting a CONSTRUCTOR to a larger aggregate type, bump the
-      size of the CONSTRUCTOR to make sure there are enough allocated bytes.
-      But do not do it for a conversion between original and packable version
-      to avoid an infinite recursion.  */
-   else if (TREE_CODE (expr) == CONSTRUCTOR
- 	   && AGGREGATE_TYPE_P (type)
- 	   && TYPE_NAME (type) != TYPE_NAME (etype)
- 	   && TREE_CONSTANT (TYPE_SIZE (type))
- 	   && (!TREE_CONSTANT (TYPE_SIZE (etype))
- 	       || tree_int_cst_lt (TYPE_SIZE (etype), TYPE_SIZE (type))))
-     {
-       expr = convert (maybe_pad_type (etype, TYPE_SIZE (type), 0,
- 				      Empty, false, false, true),
- 		      expr);
-       return unchecked_convert (type, expr, notrunc_p);
-     }
- 
-   /* Otherwise, just build a VIEW_CONVERT_EXPR of the expression.  */
-   else
-     {
-       expr = maybe_unconstrained_array (expr);
-       etype = TREE_TYPE (expr);
-       ecode = TREE_CODE (etype);
-       if (can_fold_for_view_convert_p (expr))
- 	expr = fold_build1 (VIEW_CONVERT_EXPR, type, expr);
-       else
- 	expr = build1 (VIEW_CONVERT_EXPR, type, expr);
-     }
- 
-   /* If the result is a non-biased integral type whose precision is not equal
-      to its size, sign- or zero-extend the result.  But we need not do this
-      if the input is also an integral type and both are unsigned or both are
-      signed and have the same precision.  */
-   tree type_rm_size;
-   if (!notrunc_p
-       && !biased
-       && INTEGRAL_TYPE_P (type)
-       && (type_rm_size = TYPE_RM_SIZE (type))
-       && tree_int_cst_compare (type_rm_size, TYPE_SIZE (type)) < 0
-       && !(INTEGRAL_TYPE_P (etype)
- 	   && type_unsigned_for_rm (type) == type_unsigned_for_rm (etype)
- 	   && (type_unsigned_for_rm (type)
- 	       || tree_int_cst_compare (type_rm_size,
- 					TYPE_RM_SIZE (etype)
- 					? TYPE_RM_SIZE (etype)
- 					: TYPE_SIZE (etype)) == 0)))
-     {
-       if (integer_zerop (type_rm_size))
- 	expr = build_int_cst (type, 0);
-       else
- 	{
- 	  tree base_type
- 	    = gnat_type_for_size (TREE_INT_CST_LOW (TYPE_SIZE (type)),
- 				  type_unsigned_for_rm (type));
- 	  tree shift_expr
- 	    = convert (base_type,
- 		       size_binop (MINUS_EXPR,
- 				   TYPE_SIZE (type), type_rm_size));
- 	  expr
- 	    = convert (type,
- 		       build_binary_op (RSHIFT_EXPR, base_type,
- 				        build_binary_op (LSHIFT_EXPR, base_type,
- 							 convert (base_type,
- 								  expr),
- 							 shift_expr),
- 				        shift_expr));
- 	}
-     }
- 
-   /* An unchecked conversion should never raise Constraint_Error.  The code
-      below assumes that GCC's conversion routines overflow the same way that
-      the underlying hardware does.  This is probably true.  In the rare case
-      when it is false, we can rely on the fact that such conversions are
-      erroneous anyway.  */
-   if (TREE_CODE (expr) == INTEGER_CST)
-     TREE_OVERFLOW (expr) = 0;
- 
-   /* If the sizes of the types differ and this is an VIEW_CONVERT_EXPR,
-      show no longer constant.  */
-   if (TREE_CODE (expr) == VIEW_CONVERT_EXPR
-       && !operand_equal_p (TYPE_SIZE_UNIT (type), TYPE_SIZE_UNIT (etype),
- 			   OEP_ONLY_CONST))
-     TREE_CONSTANT (expr) = 0;
- 
-   return expr;
- }
- 
- /* Return the appropriate GCC tree code for the specified GNAT_TYPE,
-    the latter being a record type as predicated by Is_Record_Type.  */
- 
- enum tree_code
- tree_code_for_record_type (Entity_Id gnat_type)
- {
-   Node_Id component_list, component;
- 
-   /* Return UNION_TYPE if it's an Unchecked_Union whose non-discriminant
-      fields are all in the variant part.  Otherwise, return RECORD_TYPE.  */
-   if (!Is_Unchecked_Union (gnat_type))
-     return RECORD_TYPE;
- 
-   gnat_type = Implementation_Base_Type (gnat_type);
-   component_list
-     = Component_List (Type_Definition (Declaration_Node (gnat_type)));
- 
-   for (component = First_Non_Pragma (Component_Items (component_list));
-        Present (component);
-        component = Next_Non_Pragma (component))
-     if (Ekind (Defining_Entity (component)) == E_Component)
-       return RECORD_TYPE;
- 
-   return UNION_TYPE;
- }
- 
- /* Return true if GNAT_TYPE is a "double" floating-point type, i.e. whose
-    size is equal to 64 bits, or an array of such a type.  Set ALIGN_CLAUSE
-    according to the presence of an alignment clause on the type or, if it
-    is an array, on the component type.  */
- 
- bool
- is_double_float_or_array (Entity_Id gnat_type, bool *align_clause)
- {
-   gnat_type = Underlying_Type (gnat_type);
- 
-   *align_clause = Present (Alignment_Clause (gnat_type));
- 
-   if (Is_Array_Type (gnat_type))
-     {
-       gnat_type = Underlying_Type (Component_Type (gnat_type));
-       if (Present (Alignment_Clause (gnat_type)))
- 	*align_clause = true;
-     }
- 
-   if (!Is_Floating_Point_Type (gnat_type))
-     return false;
- 
-   if (UI_To_Int (Esize (gnat_type)) != 64)
-     return false;
- 
-   return true;
- }
- 
- /* Return true if GNAT_TYPE is a "double" or larger scalar type, i.e. whose
-    size is greater or equal to 64 bits, or an array of such a type.  Set
-    ALIGN_CLAUSE according to the presence of an alignment clause on the
-    type or, if it is an array, on the component type.  */
- 
- bool
- is_double_scalar_or_array (Entity_Id gnat_type, bool *align_clause)
- {
-   gnat_type = Underlying_Type (gnat_type);
- 
-   *align_clause = Present (Alignment_Clause (gnat_type));
- 
-   if (Is_Array_Type (gnat_type))
-     {
-       gnat_type = Underlying_Type (Component_Type (gnat_type));
-       if (Present (Alignment_Clause (gnat_type)))
- 	*align_clause = true;
-     }
- 
-   if (!Is_Scalar_Type (gnat_type))
-     return false;
- 
-   if (UI_To_Int (Esize (gnat_type)) < 64)
-     return false;
- 
-   return true;
- }
- 
- /* Return true if GNU_TYPE is suitable as the type of a non-aliased
-    component of an aggregate type.  */
- 
- bool
- type_for_nonaliased_component_p (tree gnu_type)
- {
-   /* If the type is passed by reference, we may have pointers to the
-      component so it cannot be made non-aliased. */
-   if (must_pass_by_ref (gnu_type) || default_pass_by_ref (gnu_type))
-     return false;
- 
-   /* We used to say that any component of aggregate type is aliased
-      because the front-end may take 'Reference of it.  The front-end
-      has been enhanced in the meantime so as to use a renaming instead
-      in most cases, but the back-end can probably take the address of
-      such a component too so we go for the conservative stance.
- 
-      For instance, we might need the address of any array type, even
-      if normally passed by copy, to construct a fat pointer if the
-      component is used as an actual for an unconstrained formal.
- 
-      Likewise for record types: even if a specific record subtype is
-      passed by copy, the parent type might be passed by ref (e.g. if
-      it's of variable size) and we might take the address of a child
-      component to pass to a parent formal.  We have no way to check
-      for such conditions here.  */
-   if (AGGREGATE_TYPE_P (gnu_type))
-     return false;
- 
-   return true;
- }
- 
- /* Return true if TYPE is a smaller form of ORIG_TYPE.  */
- 
- bool
- smaller_form_type_p (tree type, tree orig_type)
- {
-   tree size, osize;
- 
-   /* We're not interested in variants here.  */
-   if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (orig_type))
-     return false;
- 
-   /* Like a variant, a packable version keeps the original TYPE_NAME.  */
-   if (TYPE_NAME (type) != TYPE_NAME (orig_type))
-     return false;
- 
-   size = TYPE_SIZE (type);
-   osize = TYPE_SIZE (orig_type);
- 
-   if (!(TREE_CODE (size) == INTEGER_CST && TREE_CODE (osize) == INTEGER_CST))
-     return false;
- 
-   return tree_int_cst_lt (size, osize) != 0;
- }
- 
- /* Return whether EXPR, which is the renamed object in an object renaming
-    declaration, can be materialized as a reference (with a REFERENCE_TYPE).
-    This should be synchronized with Exp_Dbug.Debug_Renaming_Declaration.  */
- 
- bool
- can_materialize_object_renaming_p (Node_Id expr)
- {
-   while (true)
-     {
-       expr = Original_Node (expr);
- 
-       switch (Nkind (expr))
- 	{
- 	case N_Identifier:
- 	case N_Expanded_Name:
- 	  if (!Present (Renamed_Object (Entity (expr))))
- 	    return true;
- 	  expr = Renamed_Object (Entity (expr));
- 	  break;
- 
- 	case N_Selected_Component:
- 	  {
- 	    if (Is_Packed (Underlying_Type (Etype (Prefix (expr)))))
- 	      return false;
- 
- 	    const Uint bitpos
- 	      = Normalized_First_Bit (Entity (Selector_Name (expr)));
- 	    if (bitpos != UI_No_Uint && bitpos != Uint_0)
- 	      return false;
- 
- 	    expr = Prefix (expr);
- 	    break;
- 	  }
- 
- 	case N_Indexed_Component:
- 	case N_Slice:
- 	  {
- 	    const Entity_Id t = Underlying_Type (Etype (Prefix (expr)));
- 
- 	    if (Is_Array_Type (t) && Present (Packed_Array_Impl_Type (t)))
- 	      return false;
- 
- 	    expr = Prefix (expr);
- 	    break;
- 	  }
- 
- 	case N_Explicit_Dereference:
- 	  expr = Prefix (expr);
- 	  break;
- 
- 	default:
- 	  return true;
- 	};
-     }
- }
- 
- /* Perform final processing on global declarations.  */
- 
- static GTY (()) tree dummy_global;
- 
- void
- gnat_write_global_declarations (void)
- {
-   unsigned int i;
-   tree iter;
- 
-   /* If we have declared types as used at the global level, insert them in
-      the global hash table.  We use a dummy variable for this purpose, but
-      we need to build it unconditionally to avoid -fcompare-debug issues.  */
-   if (first_global_object_name)
-     {
-       struct varpool_node *node;
-       char *label;
- 
-       ASM_FORMAT_PRIVATE_NAME (label, first_global_object_name, ULONG_MAX);
-       dummy_global
- 	= build_decl (BUILTINS_LOCATION, VAR_DECL, get_identifier (label),
- 		      void_type_node);
-       DECL_HARD_REGISTER (dummy_global) = 1;
-       TREE_STATIC (dummy_global) = 1;
-       node = varpool_node::get_create (dummy_global);
-       node->definition = 1;
-       node->force_output = 1;
- 
-       if (types_used_by_cur_var_decl)
- 	while (!types_used_by_cur_var_decl->is_empty ())
- 	  {
- 	    tree t = types_used_by_cur_var_decl->pop ();
- 	    types_used_by_var_decl_insert (t, dummy_global);
- 	  }
-     }
- 
-   /* First output the integral global variables, so that they can be referenced
-      as bounds by the global dynamic types.  Skip external variables, unless we
-      really need to emit debug info for them:, e.g. imported variables.  */
-   FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
-     if (TREE_CODE (iter) == VAR_DECL
- 	&& INTEGRAL_TYPE_P (TREE_TYPE (iter))
- 	&& (!DECL_EXTERNAL (iter) || !DECL_IGNORED_P (iter)))
-       rest_of_decl_compilation (iter, true, 0);
- 
-   /* Now output debug information for the global type declarations.  This
-      ensures that global types whose compilation hasn't been finalized yet,
-      for example pointers to Taft amendment types, have their compilation
-      finalized in the right context.  */
-   FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
-     if (TREE_CODE (iter) == TYPE_DECL && !DECL_IGNORED_P (iter))
-       debug_hooks->type_decl (iter, false);
- 
-   /* Then output the other global variables.  We need to do that after the
-      information for global types is emitted so that they are finalized.  */
-   FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
-     if (TREE_CODE (iter) == VAR_DECL
- 	&& !INTEGRAL_TYPE_P (TREE_TYPE (iter))
- 	&& (!DECL_EXTERNAL (iter) || !DECL_IGNORED_P (iter)))
-       rest_of_decl_compilation (iter, true, 0);
- 
-   /* Output debug information for the global constants.  */
-   FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
-     if (TREE_CODE (iter) == CONST_DECL && !DECL_IGNORED_P (iter))
-       debug_hooks->early_global_decl (iter);
- 
-   /* Output it for the imported functions.  */
-   FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
-     if (TREE_CODE (iter) == FUNCTION_DECL
- 	&& DECL_EXTERNAL (iter)
- 	&& DECL_INITIAL (iter) == NULL
- 	&& !DECL_IGNORED_P (iter)
- 	&& DECL_FUNCTION_IS_DEF (iter))
-       debug_hooks->early_global_decl (iter);
- 
-   /* Output it for the imported modules/declarations.  In GNAT, these are only
-      materializing subprogram.  */
-   FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
-    if (TREE_CODE (iter) == IMPORTED_DECL && !DECL_IGNORED_P (iter))
-      debug_hooks->imported_module_or_decl (iter, DECL_NAME (iter),
- 					   DECL_CONTEXT (iter), false, false);
- }
- 
- /* ************************************************************************
-  * *                           GCC builtins support                       *
-  * ************************************************************************ */
- 
- /* The general scheme is fairly simple:
- 
-    For each builtin function/type to be declared, gnat_install_builtins calls
-    internal facilities which eventually get to gnat_pushdecl, which in turn
-    tracks the so declared builtin function decls in the 'builtin_decls' global
-    datastructure. When an Intrinsic subprogram declaration is processed, we
-    search this global datastructure to retrieve the associated BUILT_IN DECL
-    node.  */
- 
- /* Search the chain of currently available builtin declarations for a node
-    corresponding to function NAME (an IDENTIFIER_NODE).  Return the first node
-    found, if any, or NULL_TREE otherwise.  */
- tree
- builtin_decl_for (tree name)
- {
-   unsigned i;
-   tree decl;
- 
-   FOR_EACH_VEC_SAFE_ELT (builtin_decls, i, decl)
-     if (DECL_NAME (decl) == name)
-       return decl;
- 
-   return NULL_TREE;
- }
- 
- /* The code below eventually exposes gnat_install_builtins, which declares
-    the builtin types and functions we might need, either internally or as
-    user accessible facilities.
- 
-    ??? This is a first implementation shot, still in rough shape.  It is
-    heavily inspired from the "C" family implementation, with chunks copied
-    verbatim from there.
- 
-    Two obvious improvement candidates are:
-    o Use a more efficient name/decl mapping scheme
-    o Devise a middle-end infrastructure to avoid having to copy
-      pieces between front-ends.  */
- 
- /* ----------------------------------------------------------------------- *
-  *                         BUILTIN ELEMENTARY TYPES                        *
-  * ----------------------------------------------------------------------- */
- 
- /* Standard data types to be used in builtin argument declarations.  */
- 
- enum c_tree_index
- {
-     CTI_SIGNED_SIZE_TYPE, /* For format checking only.  */
-     CTI_STRING_TYPE,
-     CTI_CONST_STRING_TYPE,
- 
-     CTI_MAX
- };
- 
- static tree c_global_trees[CTI_MAX];
- 
- #define signed_size_type_node	c_global_trees[CTI_SIGNED_SIZE_TYPE]
- #define string_type_node	c_global_trees[CTI_STRING_TYPE]
- #define const_string_type_node	c_global_trees[CTI_CONST_STRING_TYPE]
- 
- /* ??? In addition some attribute handlers, we currently don't support a
-    (small) number of builtin-types, which in turns inhibits support for a
-    number of builtin functions.  */
- #define wint_type_node    void_type_node
- #define intmax_type_node  void_type_node
- #define uintmax_type_node void_type_node
- 
- /* Used to help initialize the builtin-types.def table.  When a type of
-    the correct size doesn't exist, use error_mark_node instead of NULL.
-    The later results in segfaults even when a decl using the type doesn't
-    get invoked.  */
- 
- static tree
- builtin_type_for_size (int size, bool unsignedp)
- {
-   tree type = gnat_type_for_size (size, unsignedp);
-   return type ? type : error_mark_node;
- }
- 
- /* Build/push the elementary type decls that builtin functions/types
-    will need.  */
- 
- static void
- install_builtin_elementary_types (void)
- {
-   signed_size_type_node = gnat_signed_type_for (size_type_node);
-   pid_type_node = integer_type_node;
- 
-   string_type_node = build_pointer_type (char_type_node);
-   const_string_type_node
-     = build_pointer_type (build_qualified_type
- 			  (char_type_node, TYPE_QUAL_CONST));
- }
- 
- /* ----------------------------------------------------------------------- *
-  *                          BUILTIN FUNCTION TYPES                         *
-  * ----------------------------------------------------------------------- */
- 
- /* Now, builtin function types per se.  */
- 
- enum c_builtin_type
- {
- #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
- #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
- #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
- #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
- #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
- #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
- #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
- #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6) NAME,
- #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6, ARG7) NAME,
- #define DEF_FUNCTION_TYPE_8(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6, ARG7, ARG8) NAME,
- #define DEF_FUNCTION_TYPE_9(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6, ARG7, ARG8, ARG9) NAME,
- #define DEF_FUNCTION_TYPE_10(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			     ARG6, ARG7, ARG8, ARG9, ARG10) NAME,
- #define DEF_FUNCTION_TYPE_11(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			     ARG6, ARG7, ARG8, ARG9, ARG10, ARG11) NAME,
- #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
- #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
- #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
- #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
- #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
- #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
- 				NAME,
- #define DEF_FUNCTION_TYPE_VAR_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 				ARG6) NAME,
- #define DEF_FUNCTION_TYPE_VAR_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 				ARG6, ARG7) NAME,
- #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
- #include "builtin-types.def"
- #include "ada-builtin-types.def"
- #undef DEF_PRIMITIVE_TYPE
- #undef DEF_FUNCTION_TYPE_0
- #undef DEF_FUNCTION_TYPE_1
- #undef DEF_FUNCTION_TYPE_2
- #undef DEF_FUNCTION_TYPE_3
- #undef DEF_FUNCTION_TYPE_4
- #undef DEF_FUNCTION_TYPE_5
- #undef DEF_FUNCTION_TYPE_6
- #undef DEF_FUNCTION_TYPE_7
- #undef DEF_FUNCTION_TYPE_8
- #undef DEF_FUNCTION_TYPE_9
- #undef DEF_FUNCTION_TYPE_10
- #undef DEF_FUNCTION_TYPE_11
- #undef DEF_FUNCTION_TYPE_VAR_0
- #undef DEF_FUNCTION_TYPE_VAR_1
- #undef DEF_FUNCTION_TYPE_VAR_2
- #undef DEF_FUNCTION_TYPE_VAR_3
- #undef DEF_FUNCTION_TYPE_VAR_4
- #undef DEF_FUNCTION_TYPE_VAR_5
- #undef DEF_FUNCTION_TYPE_VAR_6
- #undef DEF_FUNCTION_TYPE_VAR_7
- #undef DEF_POINTER_TYPE
-   BT_LAST
- };
- 
- typedef enum c_builtin_type builtin_type;
- 
- /* A temporary array used in communication with def_fn_type.  */
- static GTY(()) tree builtin_types[(int) BT_LAST + 1];
- 
- /* A helper function for install_builtin_types.  Build function type
-    for DEF with return type RET and N arguments.  If VAR is true, then the
-    function should be variadic after those N arguments.
- 
-    Takes special care not to ICE if any of the types involved are
-    error_mark_node, which indicates that said type is not in fact available
-    (see builtin_type_for_size).  In which case the function type as a whole
-    should be error_mark_node.  */
- 
- static void
- def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
- {
-   tree t;
-   tree *args = XALLOCAVEC (tree, n);
-   va_list list;
-   int i;
- 
-   va_start (list, n);
-   for (i = 0; i < n; ++i)
-     {
-       builtin_type a = (builtin_type) va_arg (list, int);
-       t = builtin_types[a];
-       if (t == error_mark_node)
- 	goto egress;
-       args[i] = t;
-     }
- 
-   t = builtin_types[ret];
-   if (t == error_mark_node)
-     goto egress;
-   if (var)
-     t = build_varargs_function_type_array (t, n, args);
-   else
-     t = build_function_type_array (t, n, args);
- 
-  egress:
-   builtin_types[def] = t;
-   va_end (list);
- }
- 
- /* Build the builtin function types and install them in the builtin_types
-    array for later use in builtin function decls.  */
- 
- static void
- install_builtin_function_types (void)
- {
-   tree va_list_ref_type_node;
-   tree va_list_arg_type_node;
- 
-   if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
-     {
-       va_list_arg_type_node = va_list_ref_type_node =
- 	build_pointer_type (TREE_TYPE (va_list_type_node));
-     }
-   else
-     {
-       va_list_arg_type_node = va_list_type_node;
-       va_list_ref_type_node = build_reference_type (va_list_type_node);
-     }
- 
- #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
-   builtin_types[ENUM] = VALUE;
- #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
-   def_fn_type (ENUM, RETURN, 0, 0);
- #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
-   def_fn_type (ENUM, RETURN, 0, 1, ARG1);
- #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
-   def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
- #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
-   def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
- #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
-   def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
- #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5)	\
-   def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
- #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6)					\
-   def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
- #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6, ARG7)					\
-   def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
- #define DEF_FUNCTION_TYPE_8(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6, ARG7, ARG8)				\
-   def_fn_type (ENUM, RETURN, 0, 8, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6,	\
- 	       ARG7, ARG8);
- #define DEF_FUNCTION_TYPE_9(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6, ARG7, ARG8, ARG9)			\
-   def_fn_type (ENUM, RETURN, 0, 9, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6,	\
- 	       ARG7, ARG8, ARG9);
- #define DEF_FUNCTION_TYPE_10(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5,\
- 			     ARG6, ARG7, ARG8, ARG9, ARG10)		\
-   def_fn_type (ENUM, RETURN, 0, 10, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6,	\
- 	       ARG7, ARG8, ARG9, ARG10);
- #define DEF_FUNCTION_TYPE_11(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5,\
- 			     ARG6, ARG7, ARG8, ARG9, ARG10, ARG11)	\
-   def_fn_type (ENUM, RETURN, 0, 11, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6,	\
- 	       ARG7, ARG8, ARG9, ARG10, ARG11);
- #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
-   def_fn_type (ENUM, RETURN, 1, 0);
- #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
-   def_fn_type (ENUM, RETURN, 1, 1, ARG1);
- #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
-   def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
- #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
-   def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
- #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
-   def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
- #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
-   def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
- #define DEF_FUNCTION_TYPE_VAR_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 				ARG6)				\
-   def_fn_type (ENUM, RETURN, 1, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
- #define DEF_FUNCTION_TYPE_VAR_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 				ARG6, ARG7)				\
-   def_fn_type (ENUM, RETURN, 1, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
- #define DEF_POINTER_TYPE(ENUM, TYPE) \
-   builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
- 
- #include "builtin-types.def"
- #include "ada-builtin-types.def"
- 
- #undef DEF_PRIMITIVE_TYPE
- #undef DEF_FUNCTION_TYPE_0
- #undef DEF_FUNCTION_TYPE_1
- #undef DEF_FUNCTION_TYPE_2
- #undef DEF_FUNCTION_TYPE_3
- #undef DEF_FUNCTION_TYPE_4
- #undef DEF_FUNCTION_TYPE_5
- #undef DEF_FUNCTION_TYPE_6
- #undef DEF_FUNCTION_TYPE_7
- #undef DEF_FUNCTION_TYPE_8
- #undef DEF_FUNCTION_TYPE_9
- #undef DEF_FUNCTION_TYPE_10
- #undef DEF_FUNCTION_TYPE_11
- #undef DEF_FUNCTION_TYPE_VAR_0
- #undef DEF_FUNCTION_TYPE_VAR_1
- #undef DEF_FUNCTION_TYPE_VAR_2
- #undef DEF_FUNCTION_TYPE_VAR_3
- #undef DEF_FUNCTION_TYPE_VAR_4
- #undef DEF_FUNCTION_TYPE_VAR_5
- #undef DEF_FUNCTION_TYPE_VAR_6
- #undef DEF_FUNCTION_TYPE_VAR_7
- #undef DEF_POINTER_TYPE
-   builtin_types[(int) BT_LAST] = NULL_TREE;
- }
- 
- /* ----------------------------------------------------------------------- *
-  *                            BUILTIN ATTRIBUTES                           *
-  * ----------------------------------------------------------------------- */
- 
- enum built_in_attribute
- {
- #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
- #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
- #define DEF_ATTR_STRING(ENUM, VALUE) ENUM,
- #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
- #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
- #include "builtin-attrs.def"
- #undef DEF_ATTR_NULL_TREE
- #undef DEF_ATTR_INT
- #undef DEF_ATTR_STRING
- #undef DEF_ATTR_IDENT
- #undef DEF_ATTR_TREE_LIST
-   ATTR_LAST
- };
- 
- static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
- 
- static void
- install_builtin_attributes (void)
- {
-   /* Fill in the built_in_attributes array.  */
- #define DEF_ATTR_NULL_TREE(ENUM)				\
-   built_in_attributes[(int) ENUM] = NULL_TREE;
- #define DEF_ATTR_INT(ENUM, VALUE)				\
-   built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
- #define DEF_ATTR_STRING(ENUM, VALUE)				\
-   built_in_attributes[(int) ENUM] = build_string (strlen (VALUE), VALUE);
- #define DEF_ATTR_IDENT(ENUM, STRING)				\
-   built_in_attributes[(int) ENUM] = get_identifier (STRING);
- #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN)	\
-   built_in_attributes[(int) ENUM]			\
-     = tree_cons (built_in_attributes[(int) PURPOSE],	\
- 		 built_in_attributes[(int) VALUE],	\
- 		 built_in_attributes[(int) CHAIN]);
- #include "builtin-attrs.def"
- #undef DEF_ATTR_NULL_TREE
- #undef DEF_ATTR_INT
- #undef DEF_ATTR_STRING
- #undef DEF_ATTR_IDENT
- #undef DEF_ATTR_TREE_LIST
- }
- 
- /* Handle a "const" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_const_attribute (tree *node, tree ARG_UNUSED (name),
- 			tree ARG_UNUSED (args), int ARG_UNUSED (flags),
- 			bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) == FUNCTION_DECL)
-     TREE_READONLY (*node) = 1;
-   else
-     *no_add_attrs = true;
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "nothrow" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_nothrow_attribute (tree *node, tree ARG_UNUSED (name),
- 			  tree ARG_UNUSED (args), int ARG_UNUSED (flags),
- 			  bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) == FUNCTION_DECL)
-     TREE_NOTHROW (*node) = 1;
-   else
-     *no_add_attrs = true;
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "pure" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
- 		       int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) == FUNCTION_DECL)
-     DECL_PURE_P (*node) = 1;
-   /* TODO: support types.  */
-   else
-     {
-       warning (OPT_Wattributes, "%qs attribute ignored",
- 	       IDENTIFIER_POINTER (name));
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "no vops" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
- 			 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
- 			 bool *ARG_UNUSED (no_add_attrs))
- {
-   gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
-   DECL_IS_NOVOPS (*node) = 1;
-   return NULL_TREE;
- }
- 
- /* Helper for nonnull attribute handling; fetch the operand number
-    from the attribute argument list.  */
- 
- static bool
- get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
- {
-   /* Verify the arg number is a constant.  */
-   if (!tree_fits_uhwi_p (arg_num_expr))
-     return false;
- 
-   *valp = TREE_INT_CST_LOW (arg_num_expr);
-   return true;
- }
- 
- /* Handle the "nonnull" attribute.  */
- static tree
- handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
- 			  tree args, int ARG_UNUSED (flags),
- 			  bool *no_add_attrs)
- {
-   tree type = *node;
-   unsigned HOST_WIDE_INT attr_arg_num;
- 
-   /* If no arguments are specified, all pointer arguments should be
-      non-null.  Verify a full prototype is given so that the arguments
-      will have the correct types when we actually check them later.
-      Avoid diagnosing type-generic built-ins since those have no
-      prototype.  */
-   if (!args)
-     {
-       if (!prototype_p (type)
- 	  && (!TYPE_ATTRIBUTES (type)
- 	      || !lookup_attribute ("type generic", TYPE_ATTRIBUTES (type))))
- 	{
- 	  error ("%qs attribute without arguments on a non-prototype",
- 		 "nonnull");
- 	  *no_add_attrs = true;
- 	}
-       return NULL_TREE;
-     }
- 
-   /* Argument list specified.  Verify that each argument number references
-      a pointer argument.  */
-   for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
-     {
-       unsigned HOST_WIDE_INT arg_num = 0, ck_num;
- 
-       if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
- 	{
- 	  error ("%qs argument has invalid operand number (argument %lu)",
- 		 "nonnull", (unsigned long) attr_arg_num);
- 	  *no_add_attrs = true;
- 	  return NULL_TREE;
- 	}
- 
-       if (prototype_p (type))
- 	{
- 	  function_args_iterator iter;
- 	  tree argument;
- 
- 	  function_args_iter_init (&iter, type);
- 	  for (ck_num = 1; ; ck_num++, function_args_iter_next (&iter))
- 	    {
- 	      argument = function_args_iter_cond (&iter);
- 	      if (!argument || ck_num == arg_num)
- 		break;
- 	    }
- 
- 	  if (!argument
- 	      || TREE_CODE (argument) == VOID_TYPE)
- 	    {
- 	      error ("%qs argument with out-of-range operand number "
- 		     "(argument %lu, operand %lu)", "nonnull",
- 		     (unsigned long) attr_arg_num, (unsigned long) arg_num);
- 	      *no_add_attrs = true;
- 	      return NULL_TREE;
- 	    }
- 
- 	  if (TREE_CODE (argument) != POINTER_TYPE)
- 	    {
- 	      error ("%qs argument references non-pointer operand "
- 		     "(argument %lu, operand %lu)", "nonnull",
- 		   (unsigned long) attr_arg_num, (unsigned long) arg_num);
- 	      *no_add_attrs = true;
- 	      return NULL_TREE;
- 	    }
- 	}
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "sentinel" attribute.  */
- 
- static tree
- handle_sentinel_attribute (tree *node, tree name, tree args,
- 			   int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   if (!prototype_p (*node))
-     {
-       warning (OPT_Wattributes,
- 	       "%qs attribute requires prototypes with named arguments",
- 	       IDENTIFIER_POINTER (name));
-       *no_add_attrs = true;
-     }
-   else
-     {
-       if (!stdarg_p (*node))
-         {
- 	  warning (OPT_Wattributes,
- 		   "%qs attribute only applies to variadic functions",
- 		   IDENTIFIER_POINTER (name));
- 	  *no_add_attrs = true;
- 	}
-     }
- 
-   if (args)
-     {
-       tree position = TREE_VALUE (args);
- 
-       if (TREE_CODE (position) != INTEGER_CST)
-         {
- 	  warning (0, "requested position is not an integer constant");
- 	  *no_add_attrs = true;
- 	}
-       else
-         {
- 	  if (tree_int_cst_lt (position, integer_zero_node))
- 	    {
- 	      warning (0, "requested position is less than zero");
- 	      *no_add_attrs = true;
- 	    }
- 	}
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "noreturn" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
- 			   int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   tree type = TREE_TYPE (*node);
- 
-   /* See FIXME comment in c_common_attribute_table.  */
-   if (TREE_CODE (*node) == FUNCTION_DECL)
-     TREE_THIS_VOLATILE (*node) = 1;
-   else if (TREE_CODE (type) == POINTER_TYPE
- 	   && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
-     TREE_TYPE (*node)
-       = build_pointer_type
- 	(change_qualified_type (TREE_TYPE (type), TYPE_QUAL_VOLATILE));
-   else
-     {
-       warning (OPT_Wattributes, "%qs attribute ignored",
- 	       IDENTIFIER_POINTER (name));
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "stack_protect" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_stack_protect_attribute (tree *node, tree name, tree, int,
- 				bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) != FUNCTION_DECL)
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "no_stack_protector" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_no_stack_protector_attribute (tree *node, tree name, tree, int,
- 				   bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) != FUNCTION_DECL)
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- 
- /* Handle a "noinline" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_noinline_attribute (tree *node, tree name,
- 			   tree ARG_UNUSED (args),
- 			   int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) == FUNCTION_DECL)
-     {
-       if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (*node)))
- 	{
- 	  warning (OPT_Wattributes, "%qE attribute ignored due to conflict "
- 		   "with attribute %qs", name, "always_inline");
- 	  *no_add_attrs = true;
- 	}
-       else
- 	DECL_UNINLINABLE (*node) = 1;
-     }
-   else
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "noclone" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_noclone_attribute (tree *node, tree name,
- 			  tree ARG_UNUSED (args),
- 			  int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) != FUNCTION_DECL)
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "no_icf" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_noicf_attribute (tree *node, tree name,
- 			tree ARG_UNUSED (args),
- 			int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) != FUNCTION_DECL)
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "noipa" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_noipa_attribute (tree *node, tree name, tree, int, bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) != FUNCTION_DECL)
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "leaf" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_leaf_attribute (tree *node, tree name, tree ARG_UNUSED (args),
- 		       int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) != FUNCTION_DECL)
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
-   if (!TREE_PUBLIC (*node))
-     {
-       warning (OPT_Wattributes, "%qE attribute has no effect", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "always_inline" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_always_inline_attribute (tree *node, tree name, tree ARG_UNUSED (args),
- 				int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) == FUNCTION_DECL)
-     {
-       /* Set the attribute and mark it for disregarding inline limits.  */
-       DECL_DISREGARD_INLINE_LIMITS (*node) = 1;
-     }
-   else
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "malloc" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
- 			 int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) == FUNCTION_DECL
-       && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
-     DECL_IS_MALLOC (*node) = 1;
-   else
-     {
-       warning (OPT_Wattributes, "%qs attribute ignored",
- 	       IDENTIFIER_POINTER (name));
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Fake handler for attributes we don't properly support.  */
- 
- tree
- fake_attribute_handler (tree * ARG_UNUSED (node),
- 			tree ARG_UNUSED (name),
- 			tree ARG_UNUSED (args),
- 			int  ARG_UNUSED (flags),
- 			bool * ARG_UNUSED (no_add_attrs))
- {
-   return NULL_TREE;
- }
- 
- /* Handle a "type_generic" attribute.  */
- 
- static tree
- handle_type_generic_attribute (tree *node, tree ARG_UNUSED (name),
- 			       tree ARG_UNUSED (args), int ARG_UNUSED (flags),
- 			       bool * ARG_UNUSED (no_add_attrs))
- {
-   /* Ensure we have a function type.  */
-   gcc_assert (TREE_CODE (*node) == FUNCTION_TYPE);
- 
-   /* Ensure we have a variadic function.  */
-   gcc_assert (!prototype_p (*node) || stdarg_p (*node));
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "flatten" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_flatten_attribute (tree *node, tree name,
- 			  tree args ATTRIBUTE_UNUSED,
- 			  int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) == FUNCTION_DECL)
-     /* Do nothing else, just set the attribute.  We'll get at
-        it later with lookup_attribute.  */
-     ;
-   else
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "used" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
- 		       int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   tree node = *pnode;
- 
-   if (TREE_CODE (node) == FUNCTION_DECL
-       || (VAR_P (node) && TREE_STATIC (node))
-       || (TREE_CODE (node) == TYPE_DECL))
-     {
-       TREE_USED (node) = 1;
-       DECL_PRESERVE_P (node) = 1;
-       if (VAR_P (node))
- 	DECL_READ_P (node) = 1;
-     }
-   else
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "cold" and attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
- 		       int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) == FUNCTION_DECL
-       || TREE_CODE (*node) == LABEL_DECL)
-     {
-       /* Attribute cold processing is done later with lookup_attribute.  */
-     }
-   else
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "hot" and attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
- 		      int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) == FUNCTION_DECL
-       || TREE_CODE (*node) == LABEL_DECL)
-     {
-       /* Attribute hot processing is done later with lookup_attribute.  */
-     }
-   else
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "target" attribute.  */
- 
- static tree
- handle_target_attribute (tree *node, tree name, tree args, int flags,
- 			 bool *no_add_attrs)
- {
-   /* Ensure we have a function type.  */
-   if (TREE_CODE (*node) != FUNCTION_DECL)
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
-   else if (lookup_attribute ("target_clones", DECL_ATTRIBUTES (*node)))
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored due to conflict "
- 		   "with %qs attribute", name, "target_clones");
-       *no_add_attrs = true;
-     }
-   else if (!targetm.target_option.valid_attribute_p (*node, name, args, flags))
-     *no_add_attrs = true;
- 
-   /* Check that there's no empty string in values of the attribute.  */
-   for (tree t = args; t != NULL_TREE; t = TREE_CHAIN (t))
-     {
-       tree value = TREE_VALUE (t);
-       if (TREE_CODE (value) == STRING_CST
- 	  && TREE_STRING_LENGTH (value) == 1
- 	  && TREE_STRING_POINTER (value)[0] == '\0')
- 	{
- 	  warning (OPT_Wattributes, "empty string in attribute %<target%>");
- 	  *no_add_attrs = true;
- 	}
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "target_clones" attribute.  */
- 
- static tree
- handle_target_clones_attribute (tree *node, tree name, tree ARG_UNUSED (args),
- 			  int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   /* Ensure we have a function type.  */
-   if (TREE_CODE (*node) == FUNCTION_DECL)
-     {
-       if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (*node)))
- 	{
- 	  warning (OPT_Wattributes, "%qE attribute ignored due to conflict "
- 		   "with %qs attribute", name, "always_inline");
- 	  *no_add_attrs = true;
- 	}
-       else if (lookup_attribute ("target", DECL_ATTRIBUTES (*node)))
- 	{
- 	  warning (OPT_Wattributes, "%qE attribute ignored due to conflict "
- 		   "with %qs attribute", name, "target");
- 	  *no_add_attrs = true;
- 	}
-       else
- 	/* Do not inline functions with multiple clone targets.  */
- 	DECL_UNINLINABLE (*node) = 1;
-     }
-   else
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
-   return NULL_TREE;
- }
- 
- /* Handle a "vector_size" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_vector_size_attribute (tree *node, tree name, tree args,
- 			      int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   tree type = *node;
-   tree vector_type;
- 
-   *no_add_attrs = true;
- 
-   /* We need to provide for vector pointers, vector arrays, and
-      functions returning vectors.  For example:
- 
-        __attribute__((vector_size(16))) short *foo;
- 
-      In this case, the mode is SI, but the type being modified is
-      HI, so we need to look further.  */
-   while (POINTER_TYPE_P (type)
- 	 || TREE_CODE (type) == FUNCTION_TYPE
- 	 || TREE_CODE (type) == ARRAY_TYPE)
-     type = TREE_TYPE (type);
- 
-   vector_type = build_vector_type_for_size (type, TREE_VALUE (args), name);
-   if (!vector_type)
-     return NULL_TREE;
- 
-   /* Build back pointers if needed.  */
-   *node = reconstruct_complex_type (*node, vector_type);
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "vector_type" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_vector_type_attribute (tree *node, tree name, tree ARG_UNUSED (args),
- 			      int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   tree type = *node;
-   tree vector_type;
- 
-   *no_add_attrs = true;
- 
-   if (TREE_CODE (type) != ARRAY_TYPE)
-     {
-       error ("attribute %qs applies to array types only",
- 	     IDENTIFIER_POINTER (name));
-       return NULL_TREE;
-     }
- 
-   vector_type = build_vector_type_for_array (type, name);
-   if (!vector_type)
-     return NULL_TREE;
- 
-   TYPE_REPRESENTATIVE_ARRAY (vector_type) = type;
-   *node = vector_type;
- 
-   return NULL_TREE;
- }
- 
- /* ----------------------------------------------------------------------- *
-  *                              BUILTIN FUNCTIONS                          *
-  * ----------------------------------------------------------------------- */
- 
- /* Worker for DEF_BUILTIN.  Possibly define a builtin function with one or two
-    names.  Does not declare a non-__builtin_ function if flag_no_builtin, or
-    if nonansi_p and flag_no_nonansi_builtin.  */
- 
- static void
- def_builtin_1 (enum built_in_function fncode,
- 	       const char *name,
- 	       enum built_in_class fnclass,
- 	       tree fntype, tree libtype,
- 	       bool both_p, bool fallback_p,
- 	       bool nonansi_p ATTRIBUTE_UNUSED,
- 	       tree fnattrs, bool implicit_p)
- {
-   tree decl;
-   const char *libname;
- 
-   /* Preserve an already installed decl.  It most likely was setup in advance
-      (e.g. as part of the internal builtins) for specific reasons.  */
-   if (builtin_decl_explicit (fncode))
-     return;
- 
-   if (fntype == error_mark_node)
-     return;
- 
-   gcc_assert ((!both_p && !fallback_p)
- 	      || !strncmp (name, "__builtin_",
- 			   strlen ("__builtin_")));
- 
-   libname = name + strlen ("__builtin_");
-   decl = add_builtin_function (name, fntype, fncode, fnclass,
- 			       (fallback_p ? libname : NULL),
- 			       fnattrs);
-   if (both_p)
-     /* ??? This is normally further controlled by command-line options
-        like -fno-builtin, but we don't have them for Ada.  */
-     add_builtin_function (libname, libtype, fncode, fnclass,
- 			  NULL, fnattrs);
- 
-   set_builtin_decl (fncode, decl, implicit_p);
- }
- 
- static int flag_isoc94 = 0;
- static int flag_isoc99 = 0;
- static int flag_isoc11 = 0;
- static int flag_isoc2x = 0;
- 
- /* Install what the common builtins.def offers plus our local additions.
- 
-    Note that ada-builtins.def is included first so that locally redefined
-    built-in functions take precedence over the commonly defined ones.  */
- 
- static void
- install_builtin_functions (void)
- {
- #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
- 		    NONANSI_P, ATTRS, IMPLICIT, COND)			\
-   if (NAME && COND)							\
-     def_builtin_1 (ENUM, NAME, CLASS,                                   \
-                    builtin_types[(int) TYPE],                           \
-                    builtin_types[(int) LIBTYPE],                        \
-                    BOTH_P, FALLBACK_P, NONANSI_P,                       \
-                    built_in_attributes[(int) ATTRS], IMPLICIT);
- #define DEF_ADA_BUILTIN(ENUM, NAME, TYPE, ATTRS)		\
-   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_FRONTEND, TYPE, BT_LAST, \
- 	       false, false, false, ATTRS, true, true)
- #include "ada-builtins.def"
- #include "builtins.def"
- }
- 
- /* ----------------------------------------------------------------------- *
-  *                              BUILTIN FUNCTIONS                          *
-  * ----------------------------------------------------------------------- */
- 
- /* Install the builtin functions we might need.  */
- 
- void
- gnat_install_builtins (void)
- {
-   install_builtin_elementary_types ();
-   install_builtin_function_types ();
-   install_builtin_attributes ();
- 
-   /* Install builtins used by generic middle-end pieces first.  Some of these
-      know about internal specificities and control attributes accordingly, for
-      instance __builtin_alloca vs no-throw and -fstack-check.  We will ignore
-      the generic definition from builtins.def.  */
-   build_common_builtin_nodes ();
- 
-   /* Now, install the target specific builtins, such as the AltiVec family on
-      ppc, and the common set as exposed by builtins.def.  */
-   targetm.init_builtins ();
-   install_builtin_functions ();
- }
- 
- #include "gt-ada-utils.h"
- #include "gtype-ada.h"
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/utils.cc gcc-12.1.0/gcc/ada/gcc-interface/utils.cc
*** gcc-11.3.0/gcc/ada/gcc-interface/utils.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gcc-interface/utils.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,7156 ----
+ /****************************************************************************
+  *                                                                          *
+  *                         GNAT COMPILER COMPONENTS                         *
+  *                                                                          *
+  *                                U T I L S                                 *
+  *                                                                          *
+  *                          C Implementation File                           *
+  *                                                                          *
+  *          Copyright (C) 1992-2021, Free Software Foundation, Inc.         *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
+  * for  more details.  You should have received a copy of the GNU General   *
+  * Public License along with GCC; see the file COPYING3.  If not see        *
+  * <http://www.gnu.org/licenses/>.                                          *
+  *                                                                          *
+  * GNAT was originally developed  by the GNAT team at  New York University. *
+  * Extensive contributions were provided by Ada Core Technologies Inc.      *
+  *                                                                          *
+  ****************************************************************************/
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "target.h"
+ #include "function.h"
+ #include "tree.h"
+ #include "stringpool.h"
+ #include "cgraph.h"
+ #include "diagnostic.h"
+ #include "alias.h"
+ #include "fold-const.h"
+ #include "stor-layout.h"
+ #include "attribs.h"
+ #include "varasm.h"
+ #include "toplev.h"
+ #include "opts.h"
+ #include "output.h"
+ #include "debug.h"
+ #include "convert.h"
+ #include "common/common-target.h"
+ #include "langhooks.h"
+ #include "tree-dump.h"
+ #include "tree-inline.h"
+ 
+ #include "ada.h"
+ #include "types.h"
+ #include "atree.h"
+ #include "nlists.h"
+ #include "snames.h"
+ #include "uintp.h"
+ #include "fe.h"
+ #include "sinfo.h"
+ #include "einfo.h"
+ #include "ada-tree.h"
+ #include "gigi.h"
+ 
+ /* If nonzero, pretend we are allocating at global level.  */
+ int force_global;
+ 
+ /* The default alignment of "double" floating-point types, i.e. floating
+    point types whose size is equal to 64 bits, or 0 if this alignment is
+    not specifically capped.  */
+ int double_float_alignment;
+ 
+ /* The default alignment of "double" or larger scalar types, i.e. scalar
+    types whose size is greater or equal to 64 bits, or 0 if this alignment
+    is not specifically capped.  */
+ int double_scalar_alignment;
+ 
+ /* True if floating-point arithmetics may use wider intermediate results.  */
+ bool fp_arith_may_widen = true;
+ 
+ /* Tree nodes for the various types and decls we create.  */
+ tree gnat_std_decls[(int) ADT_LAST];
+ 
+ /* Functions to call for each of the possible raise reasons.  */
+ tree gnat_raise_decls[(int) LAST_REASON_CODE + 1];
+ 
+ /* Likewise, but with extra info for each of the possible raise reasons.  */
+ tree gnat_raise_decls_ext[(int) LAST_REASON_CODE + 1];
+ 
+ /* Forward declarations for handlers of attributes.  */
+ static tree handle_const_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_stack_protect_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_no_stack_protector_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_strub_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_noclone_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_noicf_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_noipa_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_leaf_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_always_inline_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_used_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_target_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_target_clones_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_vector_size_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_vector_type_attribute (tree *, tree, tree, int, bool *);
+ static tree handle_zero_call_used_regs_attribute (tree *, tree, tree, int,
+ 						  bool *);
+ 
+ static const struct attribute_spec::exclusions attr_cold_hot_exclusions[] =
+ {
+   { "cold", true,  true,  true  },
+   { "hot" , true,  true,  true  },
+   { NULL  , false, false, false }
+ };
+ 
+ static const struct attribute_spec::exclusions attr_stack_protect_exclusions[] =
+ {
+   { "stack_protect", true, false, false },
+   { "no_stack_protector", true, false, false },
+   { NULL, false, false, false },
+ };
+ 
+ /* Fake handler for attributes we don't properly support, typically because
+    they'd require dragging a lot of the common-c front-end circuitry.  */
+ static tree fake_attribute_handler (tree *, tree, tree, int, bool *);
+ 
+ /* Table of machine-independent internal attributes for Ada.  We support
+    this minimal set of attributes to accommodate the needs of builtins.  */
+ const struct attribute_spec gnat_internal_attribute_table[] =
+ {
+   /* { name, min_len, max_len, decl_req, type_req, fn_type_req,
+        affects_type_identity, handler, exclude } */
+   { "const",        0, 0,  true,  false, false, false,
+     handle_const_attribute, NULL },
+   { "nothrow",      0, 0,  true,  false, false, false,
+     handle_nothrow_attribute, NULL },
+   { "pure",         0, 0,  true,  false, false, false,
+     handle_pure_attribute, NULL },
+   { "no vops",      0, 0,  true,  false, false, false,
+     handle_novops_attribute, NULL },
+   { "nonnull",      0, -1, false, true,  true,  false,
+     handle_nonnull_attribute, NULL },
+   { "sentinel",     0, 1,  false, true,  true,  false,
+     handle_sentinel_attribute, NULL },
+   { "noreturn",     0, 0,  true,  false, false, false,
+     handle_noreturn_attribute, NULL },
+   { "stack_protect",0, 0, true,  false, false, false,
+     handle_stack_protect_attribute,
+     attr_stack_protect_exclusions },
+   { "no_stack_protector",0, 0, true,  false, false, false,
+     handle_no_stack_protector_attribute,
+     attr_stack_protect_exclusions },
+   { "strub",	    0, 1, false, true, false, true,
+     handle_strub_attribute, NULL },
+   { "noinline",     0, 0,  true,  false, false, false,
+     handle_noinline_attribute, NULL },
+   { "noclone",      0, 0,  true,  false, false, false,
+     handle_noclone_attribute, NULL },
+   { "no_icf",       0, 0,  true,  false, false, false,
+     handle_noicf_attribute, NULL },
+   { "noipa",        0, 0,  true,  false, false, false,
+     handle_noipa_attribute, NULL },
+   { "leaf",         0, 0,  true,  false, false, false,
+     handle_leaf_attribute, NULL },
+   { "always_inline",0, 0,  true,  false, false, false,
+     handle_always_inline_attribute, NULL },
+   { "malloc",       0, 0,  true,  false, false, false,
+     handle_malloc_attribute, NULL },
+   { "type generic", 0, 0,  false, true,  true,  false,
+     handle_type_generic_attribute, NULL },
+ 
+   { "flatten",      0, 0,  true,  false, false, false,
+     handle_flatten_attribute, NULL },
+   { "used",         0, 0,  true,  false, false, false,
+     handle_used_attribute, NULL },
+   { "cold",         0, 0,  true,  false, false, false,
+     handle_cold_attribute, attr_cold_hot_exclusions },
+   { "hot",          0, 0,  true,  false, false, false,
+     handle_hot_attribute, attr_cold_hot_exclusions },
+   { "target",       1, -1, true,  false, false, false,
+     handle_target_attribute, NULL },
+   { "target_clones",1, -1, true,  false, false, false,
+     handle_target_clones_attribute, NULL },
+ 
+   { "vector_size",  1, 1,  false, true,  false, false,
+     handle_vector_size_attribute, NULL },
+   { "vector_type",  0, 0,  false, true,  false, false,
+     handle_vector_type_attribute, NULL },
+   { "may_alias",    0, 0,  false, true,  false, false,
+     NULL, NULL },
+ 
+   { "zero_call_used_regs", 1, 1, true, false, false, false,
+     handle_zero_call_used_regs_attribute, NULL },
+ 
+   /* ??? format and format_arg are heavy and not supported, which actually
+      prevents support for stdio builtins, which we however declare as part
+      of the common builtins.def contents.  */
+   { "format",       3, 3,  false, true,  true,  false,
+     fake_attribute_handler, NULL },
+   { "format_arg",   1, 1,  false, true,  true,  false,
+     fake_attribute_handler, NULL },
+ 
+   { NULL,           0, 0,  false, false, false, false,
+     NULL, NULL }
+ };
+ 
+ /* Associates a GNAT tree node to a GCC tree node. It is used in
+    `save_gnu_tree', `get_gnu_tree' and `present_gnu_tree'. See documentation
+    of `save_gnu_tree' for more info.  */
+ static GTY((length ("max_gnat_nodes"))) tree *associate_gnat_to_gnu;
+ 
+ #define GET_GNU_TREE(GNAT_ENTITY)	\
+   associate_gnat_to_gnu[(GNAT_ENTITY) - First_Node_Id]
+ 
+ #define SET_GNU_TREE(GNAT_ENTITY,VAL)	\
+   associate_gnat_to_gnu[(GNAT_ENTITY) - First_Node_Id] = (VAL)
+ 
+ #define PRESENT_GNU_TREE(GNAT_ENTITY)	\
+   (associate_gnat_to_gnu[(GNAT_ENTITY) - First_Node_Id] != NULL_TREE)
+ 
+ /* Associates a GNAT entity to a GCC tree node used as a dummy, if any.  */
+ static GTY((length ("max_gnat_nodes"))) tree *dummy_node_table;
+ 
+ #define GET_DUMMY_NODE(GNAT_ENTITY)	\
+   dummy_node_table[(GNAT_ENTITY) - First_Node_Id]
+ 
+ #define SET_DUMMY_NODE(GNAT_ENTITY,VAL)	\
+   dummy_node_table[(GNAT_ENTITY) - First_Node_Id] = (VAL)
+ 
+ #define PRESENT_DUMMY_NODE(GNAT_ENTITY)	\
+   (dummy_node_table[(GNAT_ENTITY) - First_Node_Id] != NULL_TREE)
+ 
+ /* This variable keeps a table for types for each precision so that we only
+    allocate each of them once. Signed and unsigned types are kept separate.
+ 
+    Note that these types are only used when fold-const requests something
+    special.  Perhaps we should NOT share these types; we'll see how it
+    goes later.  */
+ static GTY(()) tree signed_and_unsigned_types[2 * MAX_BITS_PER_WORD + 1][2];
+ 
+ /* Likewise for float types, but record these by mode.  */
+ static GTY(()) tree float_types[NUM_MACHINE_MODES];
+ 
+ /* For each binding contour we allocate a binding_level structure to indicate
+    the binding depth.  */
+ 
+ struct GTY((chain_next ("%h.chain"))) gnat_binding_level {
+   /* The binding level containing this one (the enclosing binding level). */
+   struct gnat_binding_level *chain;
+   /* The BLOCK node for this level.  */
+   tree block;
+   /* If nonzero, the setjmp buffer that needs to be updated for any
+      variable-sized definition within this context.  */
+   tree jmpbuf_decl;
+ };
+ 
+ /* The binding level currently in effect.  */
+ static GTY(()) struct gnat_binding_level *current_binding_level;
+ 
+ /* A chain of gnat_binding_level structures awaiting reuse.  */
+ static GTY((deletable)) struct gnat_binding_level *free_binding_level;
+ 
+ /* The context to be used for global declarations.  */
+ static GTY(()) tree global_context;
+ 
+ /* An array of global declarations.  */
+ static GTY(()) vec<tree, va_gc> *global_decls;
+ 
+ /* An array of builtin function declarations.  */
+ static GTY(()) vec<tree, va_gc> *builtin_decls;
+ 
+ /* A chain of unused BLOCK nodes. */
+ static GTY((deletable)) tree free_block_chain;
+ 
+ /* A hash table of packable types.  It is modelled on the generic type
+    hash table in tree.cc, which must thus be used as a reference.  */
+ 
+ struct GTY((for_user)) packable_type_hash
+ {
+   hashval_t hash;
+   tree type;
+ };
+ 
+ struct packable_type_hasher : ggc_cache_ptr_hash<packable_type_hash>
+ {
+   static inline hashval_t hash (packable_type_hash *t) { return t->hash; }
+   static bool equal (packable_type_hash *a, packable_type_hash *b);
+ 
+   static int
+   keep_cache_entry (packable_type_hash *&t)
+   {
+     return ggc_marked_p (t->type);
+   }
+ };
+ 
+ static GTY ((cache)) hash_table<packable_type_hasher> *packable_type_hash_table;
+ 
+ /* A hash table of padded types.  It is modelled on the generic type
+    hash table in tree.cc, which must thus be used as a reference.  */
+ 
+ struct GTY((for_user)) pad_type_hash
+ {
+   hashval_t hash;
+   tree type;
+ };
+ 
+ struct pad_type_hasher : ggc_cache_ptr_hash<pad_type_hash>
+ {
+   static inline hashval_t hash (pad_type_hash *t) { return t->hash; }
+   static bool equal (pad_type_hash *a, pad_type_hash *b);
+ 
+   static int
+   keep_cache_entry (pad_type_hash *&t)
+   {
+     return ggc_marked_p (t->type);
+   }
+ };
+ 
+ static GTY ((cache)) hash_table<pad_type_hasher> *pad_type_hash_table;
+ 
+ static tree merge_sizes (tree, tree, tree, bool, bool);
+ static tree fold_bit_position (const_tree);
+ static tree compute_related_constant (tree, tree);
+ static tree split_plus (tree, tree *);
+ static tree float_type_for_precision (int, machine_mode);
+ static tree convert_to_fat_pointer (tree, tree);
+ static unsigned int scale_by_factor_of (tree, unsigned int);
+ 
+ /* Linked list used as a queue to defer the initialization of the DECL_CONTEXT
+    of ..._DECL nodes and of the TYPE_CONTEXT of ..._TYPE nodes.  */
+ struct deferred_decl_context_node
+ {
+   /* The ..._DECL node to work on.  */
+   tree decl;
+ 
+   /* The corresponding entity's Scope.  */
+   Entity_Id gnat_scope;
+ 
+   /* The value of force_global when DECL was pushed.  */
+   int force_global;
+ 
+   /* The list of ..._TYPE nodes to propagate the context to.  */
+   vec<tree> types;
+ 
+   /* The next queue item.  */
+   struct deferred_decl_context_node *next;
+ };
+ 
+ static struct deferred_decl_context_node *deferred_decl_context_queue = NULL;
+ 
+ /* Defer the initialization of DECL's DECL_CONTEXT attribute, scheduling to
+    feed it with the elaboration of GNAT_SCOPE.  */
+ static struct deferred_decl_context_node *
+ add_deferred_decl_context (tree decl, Entity_Id gnat_scope, int force_global);
+ 
+ /* Defer the initialization of TYPE's TYPE_CONTEXT attribute, scheduling to
+    feed it with the DECL_CONTEXT computed as part of N as soon as it is
+    computed.  */
+ static void add_deferred_type_context (struct deferred_decl_context_node *n,
+ 				       tree type);
+ 
+ /* Initialize data structures of the utils.cc module.  */
+ 
+ void
+ init_gnat_utils (void)
+ {
+   /* Initialize the association of GNAT nodes to GCC trees.  */
+   associate_gnat_to_gnu = ggc_cleared_vec_alloc<tree> (max_gnat_nodes);
+ 
+   /* Initialize the association of GNAT nodes to GCC trees as dummies.  */
+   dummy_node_table = ggc_cleared_vec_alloc<tree> (max_gnat_nodes);
+ 
+   /* Initialize the hash table of packable types.  */
+   packable_type_hash_table = hash_table<packable_type_hasher>::create_ggc (512);
+ 
+   /* Initialize the hash table of padded types.  */
+   pad_type_hash_table = hash_table<pad_type_hasher>::create_ggc (512);
+ }
+ 
+ /* Destroy data structures of the utils.cc module.  */
+ 
+ void
+ destroy_gnat_utils (void)
+ {
+   /* Destroy the association of GNAT nodes to GCC trees.  */
+   ggc_free (associate_gnat_to_gnu);
+   associate_gnat_to_gnu = NULL;
+ 
+   /* Destroy the association of GNAT nodes to GCC trees as dummies.  */
+   ggc_free (dummy_node_table);
+   dummy_node_table = NULL;
+ 
+   /* Destroy the hash table of packable types.  */
+   packable_type_hash_table->empty ();
+   packable_type_hash_table = NULL;
+ 
+   /* Destroy the hash table of padded types.  */
+   pad_type_hash_table->empty ();
+   pad_type_hash_table = NULL;
+ }
+ 
+ /* GNAT_ENTITY is a GNAT tree node for an entity.  Associate GNU_DECL, a GCC
+    tree node, with GNAT_ENTITY.  If GNU_DECL is not a ..._DECL node, abort.
+    If NO_CHECK is true, the latter check is suppressed.
+ 
+    If GNU_DECL is zero, reset a previous association.  */
+ 
+ void
+ save_gnu_tree (Entity_Id gnat_entity, tree gnu_decl, bool no_check)
+ {
+   /* Check that GNAT_ENTITY is not already defined and that it is being set
+      to something which is a decl.  If that is not the case, this usually
+      means GNAT_ENTITY is defined twice, but occasionally is due to some
+      Gigi problem.  */
+   gcc_assert (!(gnu_decl
+ 		&& (PRESENT_GNU_TREE (gnat_entity)
+ 		    || (!no_check && !DECL_P (gnu_decl)))));
+ 
+   SET_GNU_TREE (gnat_entity, gnu_decl);
+ }
+ 
+ /* GNAT_ENTITY is a GNAT tree node for an entity.  Return the GCC tree node
+    that was associated with it.  If there is no such tree node, abort.
+ 
+    In some cases, such as delayed elaboration or expressions that need to
+    be elaborated only once, GNAT_ENTITY is really not an entity.  */
+ 
+ tree
+ get_gnu_tree (Entity_Id gnat_entity)
+ {
+   gcc_assert (PRESENT_GNU_TREE (gnat_entity));
+   return GET_GNU_TREE (gnat_entity);
+ }
+ 
+ /* Return nonzero if a GCC tree has been associated with GNAT_ENTITY.  */
+ 
+ bool
+ present_gnu_tree (Entity_Id gnat_entity)
+ {
+   return PRESENT_GNU_TREE (gnat_entity);
+ }
+ 
+ /* Make a dummy type corresponding to GNAT_TYPE.  */
+ 
+ tree
+ make_dummy_type (Entity_Id gnat_type)
+ {
+   Entity_Id gnat_equiv = Gigi_Equivalent_Type (Underlying_Type (gnat_type));
+   tree gnu_type, debug_type;
+ 
+   /* If there was no equivalent type (can only happen when just annotating
+      types) or underlying type, go back to the original type.  */
+   if (No (gnat_equiv))
+     gnat_equiv = gnat_type;
+ 
+   /* If it there already a dummy type, use that one.  Else make one.  */
+   if (PRESENT_DUMMY_NODE (gnat_equiv))
+     return GET_DUMMY_NODE (gnat_equiv);
+ 
+   /* If this is a record, make a RECORD_TYPE or UNION_TYPE; else make
+      an ENUMERAL_TYPE.  */
+   gnu_type = make_node (Is_Record_Type (gnat_equiv)
+ 			? tree_code_for_record_type (gnat_equiv)
+ 			: ENUMERAL_TYPE);
+   TYPE_NAME (gnu_type) = get_entity_name (gnat_type);
+   TYPE_DUMMY_P (gnu_type) = 1;
+   TYPE_STUB_DECL (gnu_type)
+     = create_type_stub_decl (TYPE_NAME (gnu_type), gnu_type);
+   if (Is_By_Reference_Type (gnat_equiv))
+     TYPE_BY_REFERENCE_P (gnu_type) = 1;
+   if (Has_Discriminants (gnat_equiv))
+     decl_attributes (&gnu_type,
+ 		     tree_cons (get_identifier ("may_alias"), NULL_TREE,
+ 				NULL_TREE),
+ 		     ATTR_FLAG_TYPE_IN_PLACE);
+ 
+   SET_DUMMY_NODE (gnat_equiv, gnu_type);
+ 
+   /* Create a debug type so that debuggers only see an unspecified type.  */
+   if (Needs_Debug_Info (gnat_type))
+     {
+       debug_type = make_node (LANG_TYPE);
+       TYPE_NAME (debug_type) = TYPE_NAME (gnu_type);
+       TYPE_ARTIFICIAL (debug_type) = TYPE_ARTIFICIAL (gnu_type);
+       SET_TYPE_DEBUG_TYPE (gnu_type, debug_type);
+     }
+ 
+   return gnu_type;
+ }
+ 
+ /* Return the dummy type that was made for GNAT_TYPE, if any.  */
+ 
+ tree
+ get_dummy_type (Entity_Id gnat_type)
+ {
+   return GET_DUMMY_NODE (gnat_type);
+ }
+ 
+ /* Build dummy fat and thin pointer types whose designated type is specified
+    by GNAT_DESIG_TYPE/GNU_DESIG_TYPE and attach them to the latter.  */
+ 
+ void
+ build_dummy_unc_pointer_types (Entity_Id gnat_desig_type, tree gnu_desig_type)
+ {
+   tree gnu_template_type, gnu_ptr_template, gnu_array_type, gnu_ptr_array;
+   tree gnu_fat_type, fields, gnu_object_type;
+ 
+   gnu_template_type = make_node (RECORD_TYPE);
+   TYPE_NAME (gnu_template_type) = create_concat_name (gnat_desig_type, "XUB");
+   TYPE_DUMMY_P (gnu_template_type) = 1;
+   gnu_ptr_template = build_pointer_type (gnu_template_type);
+ 
+   gnu_array_type = make_node (ENUMERAL_TYPE);
+   TYPE_NAME (gnu_array_type) = create_concat_name (gnat_desig_type, "XUA");
+   TYPE_DUMMY_P (gnu_array_type) = 1;
+   gnu_ptr_array = build_pointer_type (gnu_array_type);
+ 
+   gnu_fat_type = make_node (RECORD_TYPE);
+   /* Build a stub DECL to trigger the special processing for fat pointer types
+      in gnat_pushdecl.  */
+   TYPE_NAME (gnu_fat_type)
+     = create_type_stub_decl (create_concat_name (gnat_desig_type, "XUP"),
+ 			     gnu_fat_type);
+   fields = create_field_decl (get_identifier ("P_ARRAY"), gnu_ptr_array,
+ 			      gnu_fat_type, NULL_TREE, NULL_TREE, 0, 1);
+   DECL_CHAIN (fields)
+     = create_field_decl (get_identifier ("P_BOUNDS"), gnu_ptr_template,
+ 			 gnu_fat_type, NULL_TREE, NULL_TREE, 0, 1);
+   finish_fat_pointer_type (gnu_fat_type, fields);
+   SET_TYPE_UNCONSTRAINED_ARRAY (gnu_fat_type, gnu_desig_type);
+   /* Suppress debug info until after the type is completed.  */
+   TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (gnu_fat_type)) = 1;
+ 
+   gnu_object_type = make_node (RECORD_TYPE);
+   TYPE_NAME (gnu_object_type) = create_concat_name (gnat_desig_type, "XUT");
+   TYPE_DUMMY_P (gnu_object_type) = 1;
+ 
+   TYPE_POINTER_TO (gnu_desig_type) = gnu_fat_type;
+   TYPE_REFERENCE_TO (gnu_desig_type) = gnu_fat_type;
+   TYPE_OBJECT_RECORD_TYPE (gnu_desig_type) = gnu_object_type;
+ }
+ 
+ /* Return true if we are in the global binding level.  */
+ 
+ bool
+ global_bindings_p (void)
+ {
+   return force_global || !current_function_decl;
+ }
+ 
+ /* Enter a new binding level.  */
+ 
+ void
+ gnat_pushlevel (void)
+ {
+   struct gnat_binding_level *newlevel = NULL;
+ 
+   /* Reuse a struct for this binding level, if there is one.  */
+   if (free_binding_level)
+     {
+       newlevel = free_binding_level;
+       free_binding_level = free_binding_level->chain;
+     }
+   else
+     newlevel = ggc_alloc<gnat_binding_level> ();
+ 
+   /* Use a free BLOCK, if any; otherwise, allocate one.  */
+   if (free_block_chain)
+     {
+       newlevel->block = free_block_chain;
+       free_block_chain = BLOCK_CHAIN (free_block_chain);
+       BLOCK_CHAIN (newlevel->block) = NULL_TREE;
+     }
+   else
+     newlevel->block = make_node (BLOCK);
+ 
+   /* Point the BLOCK we just made to its parent.  */
+   if (current_binding_level)
+     BLOCK_SUPERCONTEXT (newlevel->block) = current_binding_level->block;
+ 
+   BLOCK_VARS (newlevel->block) = NULL_TREE;
+   BLOCK_SUBBLOCKS (newlevel->block) = NULL_TREE;
+   TREE_USED (newlevel->block) = 1;
+ 
+   /* Add this level to the front of the chain (stack) of active levels.  */
+   newlevel->chain = current_binding_level;
+   newlevel->jmpbuf_decl = NULL_TREE;
+   current_binding_level = newlevel;
+ }
+ 
+ /* Set SUPERCONTEXT of the BLOCK for the current binding level to FNDECL
+    and point FNDECL to this BLOCK.  */
+ 
+ void
+ set_current_block_context (tree fndecl)
+ {
+   BLOCK_SUPERCONTEXT (current_binding_level->block) = fndecl;
+   DECL_INITIAL (fndecl) = current_binding_level->block;
+   set_block_for_group (current_binding_level->block);
+ }
+ 
+ /* Set the jmpbuf_decl for the current binding level to DECL.  */
+ 
+ void
+ set_block_jmpbuf_decl (tree decl)
+ {
+   current_binding_level->jmpbuf_decl = decl;
+ }
+ 
+ /* Get the jmpbuf_decl, if any, for the current binding level.  */
+ 
+ tree
+ get_block_jmpbuf_decl (void)
+ {
+   return current_binding_level->jmpbuf_decl;
+ }
+ 
+ /* Exit a binding level.  Set any BLOCK into the current code group.  */
+ 
+ void
+ gnat_poplevel (void)
+ {
+   struct gnat_binding_level *level = current_binding_level;
+   tree block = level->block;
+ 
+   BLOCK_VARS (block) = nreverse (BLOCK_VARS (block));
+   BLOCK_SUBBLOCKS (block) = blocks_nreverse (BLOCK_SUBBLOCKS (block));
+ 
+   /* If this is a function-level BLOCK don't do anything.  Otherwise, if there
+      are no variables free the block and merge its subblocks into those of its
+      parent block.  Otherwise, add it to the list of its parent.  */
+   if (TREE_CODE (BLOCK_SUPERCONTEXT (block)) == FUNCTION_DECL)
+     ;
+   else if (!BLOCK_VARS (block))
+     {
+       BLOCK_SUBBLOCKS (level->chain->block)
+ 	= block_chainon (BLOCK_SUBBLOCKS (block),
+ 			 BLOCK_SUBBLOCKS (level->chain->block));
+       BLOCK_CHAIN (block) = free_block_chain;
+       free_block_chain = block;
+     }
+   else
+     {
+       BLOCK_CHAIN (block) = BLOCK_SUBBLOCKS (level->chain->block);
+       BLOCK_SUBBLOCKS (level->chain->block) = block;
+       TREE_USED (block) = 1;
+       set_block_for_group (block);
+     }
+ 
+   /* Free this binding structure.  */
+   current_binding_level = level->chain;
+   level->chain = free_binding_level;
+   free_binding_level = level;
+ }
+ 
+ /* Exit a binding level and discard the associated BLOCK.  */
+ 
+ void
+ gnat_zaplevel (void)
+ {
+   struct gnat_binding_level *level = current_binding_level;
+   tree block = level->block;
+ 
+   BLOCK_CHAIN (block) = free_block_chain;
+   free_block_chain = block;
+ 
+   /* Free this binding structure.  */
+   current_binding_level = level->chain;
+   level->chain = free_binding_level;
+   free_binding_level = level;
+ }
+ 
+ /* Set the context of TYPE and its parallel types (if any) to CONTEXT.  */
+ 
+ static void
+ gnat_set_type_context (tree type, tree context)
+ {
+   tree decl = TYPE_STUB_DECL (type);
+ 
+   TYPE_CONTEXT (type) = context;
+ 
+   while (decl && DECL_PARALLEL_TYPE (decl))
+     {
+       tree parallel_type = DECL_PARALLEL_TYPE (decl);
+ 
+       /* Give a context to the parallel types and their stub decl, if any.
+ 	 Some parallel types seems to be present in multiple parallel type
+ 	 chains, so don't mess with their context if they already have one.  */
+       if (!TYPE_CONTEXT (parallel_type))
+ 	{
+ 	  if (TYPE_STUB_DECL (parallel_type))
+ 	    DECL_CONTEXT (TYPE_STUB_DECL (parallel_type)) = context;
+ 	  TYPE_CONTEXT (parallel_type) = context;
+ 	}
+ 
+       decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
+     }
+ }
+ 
+ /* Return the innermost scope, starting at GNAT_NODE, we are be interested in
+    the debug info, or Empty if there is no such scope.  If not NULL, set
+    IS_SUBPROGRAM to whether the returned entity is a subprogram.  */
+ 
+ Entity_Id
+ get_debug_scope (Node_Id gnat_node, bool *is_subprogram)
+ {
+   Entity_Id gnat_entity;
+ 
+   if (is_subprogram)
+     *is_subprogram = false;
+ 
+   if (Nkind (gnat_node) == N_Defining_Identifier
+       || Nkind (gnat_node) == N_Defining_Operator_Symbol)
+     gnat_entity = Scope (gnat_node);
+   else
+     return Empty;
+ 
+   while (Present (gnat_entity))
+     {
+       switch (Ekind (gnat_entity))
+ 	{
+ 	case E_Function:
+ 	case E_Procedure:
+ 	  if (Present (Protected_Body_Subprogram (gnat_entity)))
+ 	    gnat_entity = Protected_Body_Subprogram (gnat_entity);
+ 
+ 	  /* If the scope is a subprogram, then just rely on
+ 	     current_function_decl, so that we don't have to defer
+ 	     anything.  This is needed because other places rely on the
+ 	     validity of the DECL_CONTEXT attribute of FUNCTION_DECL nodes. */
+ 	  if (is_subprogram)
+ 	    *is_subprogram = true;
+ 	  return gnat_entity;
+ 
+ 	case E_Record_Type:
+ 	case E_Record_Subtype:
+ 	  return gnat_entity;
+ 
+ 	default:
+ 	  /* By default, we are not interested in this particular scope: go to
+ 	     the outer one.  */
+ 	  break;
+ 	}
+ 
+       gnat_entity = Scope (gnat_entity);
+     }
+ 
+   return Empty;
+ }
+ 
+ /* If N is NULL, set TYPE's context to CONTEXT.  Defer this to the processing
+    of N otherwise.  */
+ 
+ static void
+ defer_or_set_type_context (tree type, tree context,
+ 			   struct deferred_decl_context_node *n)
+ {
+   if (n)
+     add_deferred_type_context (n, type);
+   else
+     gnat_set_type_context (type, context);
+ }
+ 
+ /* Return global_context, but create it first if need be.  */
+ 
+ static tree
+ get_global_context (void)
+ {
+   if (!global_context)
+     {
+       global_context
+ 	= build_translation_unit_decl (get_identifier (main_input_filename));
+       debug_hooks->register_main_translation_unit (global_context);
+     }
+ 
+   return global_context;
+ }
+ 
+ /* Record DECL as belonging to the current lexical scope and use GNAT_NODE
+    for location information and flag propagation.  */
+ 
+ void
+ gnat_pushdecl (tree decl, Node_Id gnat_node)
+ {
+   tree context = NULL_TREE;
+   struct deferred_decl_context_node *deferred_decl_context = NULL;
+ 
+   /* If explicitly asked to make DECL global or if it's an imported nested
+      object, short-circuit the regular Scope-based context computation.  */
+   if (!((TREE_PUBLIC (decl) && DECL_EXTERNAL (decl)) || force_global == 1))
+     {
+       /* Rely on the GNAT scope, or fallback to the current_function_decl if
+ 	 the GNAT scope reached the global scope, if it reached a subprogram
+ 	 or the declaration is a subprogram or a variable (for them we skip
+ 	 intermediate context types because the subprogram body elaboration
+ 	 machinery and the inliner both expect a subprogram context).
+ 
+ 	 Falling back to current_function_decl is necessary for implicit
+ 	 subprograms created by gigi, such as the elaboration subprograms.  */
+       bool context_is_subprogram = false;
+       const Entity_Id gnat_scope
+         = get_debug_scope (gnat_node, &context_is_subprogram);
+ 
+       if (Present (gnat_scope)
+ 	  && !context_is_subprogram
+ 	  && TREE_CODE (decl) != FUNCTION_DECL
+ 	  && TREE_CODE (decl) != VAR_DECL)
+ 	/* Always assume the scope has not been elaborated, thus defer the
+ 	   context propagation to the time its elaboration will be
+ 	   available.  */
+ 	deferred_decl_context
+ 	  = add_deferred_decl_context (decl, gnat_scope, force_global);
+ 
+       /* External declarations (when force_global > 0) may not be in a
+ 	 local context.  */
+       else if (current_function_decl && force_global == 0)
+ 	context = current_function_decl;
+     }
+ 
+   /* If either we are forced to be in global mode or if both the GNAT scope and
+      the current_function_decl did not help in determining the context, use the
+      global scope.  */
+   if (!deferred_decl_context && !context)
+     context = get_global_context ();
+ 
+   /* Functions imported in another function are not really nested.
+      For really nested functions mark them initially as needing
+      a static chain for uses of that flag before unnesting;
+      lower_nested_functions will then recompute it.  */
+   if (TREE_CODE (decl) == FUNCTION_DECL
+       && !TREE_PUBLIC (decl)
+       && context
+       && (TREE_CODE (context) == FUNCTION_DECL
+ 	  || decl_function_context (context)))
+     DECL_STATIC_CHAIN (decl) = 1;
+ 
+   if (!deferred_decl_context)
+     DECL_CONTEXT (decl) = context;
+ 
+   suppress_warning (decl, all_warnings,
+ 		    No (gnat_node) || Warnings_Off (gnat_node));
+ 
+   /* Set the location of DECL and emit a declaration for it.  */
+   if (Present (gnat_node) && !renaming_from_instantiation_p (gnat_node))
+     Sloc_to_locus (Sloc (gnat_node), &DECL_SOURCE_LOCATION (decl));
+ 
+   add_decl_expr (decl, gnat_node);
+ 
+   /* Put the declaration on the list.  The list of declarations is in reverse
+      order.  The list will be reversed later.  Put global declarations in the
+      globals list and local ones in the current block.  But skip TYPE_DECLs
+      for UNCONSTRAINED_ARRAY_TYPE in both cases, as they will cause trouble
+      with the debugger and aren't needed anyway.  */
+   if (!(TREE_CODE (decl) == TYPE_DECL
+         && TREE_CODE (TREE_TYPE (decl)) == UNCONSTRAINED_ARRAY_TYPE))
+     {
+       /* External declarations must go to the binding level they belong to.
+ 	 This will make corresponding imported entities are available in the
+ 	 debugger at the proper time.  */
+       if (DECL_EXTERNAL (decl)
+ 	  && TREE_CODE (decl) == FUNCTION_DECL
+ 	  && fndecl_built_in_p (decl))
+ 	vec_safe_push (builtin_decls, decl);
+       else if (global_bindings_p ())
+ 	vec_safe_push (global_decls, decl);
+       else
+ 	{
+ 	  DECL_CHAIN (decl) = BLOCK_VARS (current_binding_level->block);
+ 	  BLOCK_VARS (current_binding_level->block) = decl;
+ 	}
+     }
+ 
+   /* For the declaration of a type, set its name either if it isn't already
+      set or if the previous type name was not derived from a source name.
+      We'd rather have the type named with a real name and all the pointer
+      types to the same object have the same node, except when the names are
+      both derived from source names.  */
+   if (TREE_CODE (decl) == TYPE_DECL && DECL_NAME (decl))
+     {
+       tree t = TREE_TYPE (decl);
+ 
+       /* Array and pointer types aren't tagged types in the C sense so we need
+ 	 to generate a typedef in DWARF for them and make sure it is preserved,
+ 	 unless the type is artificial.  */
+       if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL)
+ 	  && ((TREE_CODE (t) != ARRAY_TYPE && TREE_CODE (t) != POINTER_TYPE)
+ 	      || DECL_ARTIFICIAL (decl)))
+ 	;
+       /* For array and pointer types, create the DECL_ORIGINAL_TYPE that will
+ 	 generate the typedef in DWARF.  Also do that for fat pointer types
+ 	 because, even though they are tagged types in the C sense, they are
+ 	 still XUP types attached to the base array type at this point.  */
+       else if (!DECL_ARTIFICIAL (decl)
+ 	       && (TREE_CODE (t) == ARRAY_TYPE
+ 		   || TREE_CODE (t) == POINTER_TYPE
+ 		   || TYPE_IS_FAT_POINTER_P (t)))
+ 	{
+ 	  tree tt = build_variant_type_copy (t);
+ 	  TYPE_NAME (tt) = decl;
+ 	  defer_or_set_type_context (tt,
+ 				     DECL_CONTEXT (decl),
+ 				     deferred_decl_context);
+ 	  TREE_TYPE (decl) = tt;
+ 	  if (TYPE_NAME (t)
+ 	      && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
+ 	      && DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
+ 	    DECL_ORIGINAL_TYPE (decl) = DECL_ORIGINAL_TYPE (TYPE_NAME (t));
+ 	  else
+ 	    DECL_ORIGINAL_TYPE (decl) = t;
+ 	  /* Array types need to have a name so that they can be related to
+ 	     their GNAT encodings.  */
+ 	  if (TREE_CODE (t) == ARRAY_TYPE && !TYPE_NAME (t))
+ 	    TYPE_NAME (t) = DECL_NAME (decl);
+ 	  /* Remark the canonical fat pointer type as artificial.  */
+ 	  if (TYPE_IS_FAT_POINTER_P (t))
+ 	    TYPE_ARTIFICIAL (t) = 1;
+ 	  t = NULL_TREE;
+ 	}
+       else if (TYPE_NAME (t)
+ 	       && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
+ 	       && DECL_ARTIFICIAL (TYPE_NAME (t)) && !DECL_ARTIFICIAL (decl))
+ 	;
+       else
+ 	t = NULL_TREE;
+ 
+       /* Propagate the name to all the variants, this is needed for the type
+ 	 qualifiers machinery to work properly (see check_qualified_type).
+ 	 Also propagate the context to them.  Note that it will be propagated
+ 	 to all parallel types too thanks to gnat_set_type_context.  */
+       if (t)
+ 	for (t = TYPE_MAIN_VARIANT (t); t; t = TYPE_NEXT_VARIANT (t))
+ 	  /* ??? Because of the previous kludge, we can have variants of fat
+ 	     pointer types with different names.  */
+ 	  if (!(TYPE_IS_FAT_POINTER_P (t)
+ 		&& TYPE_NAME (t)
+ 		&& TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
+ 	    {
+ 	      TYPE_NAME (t) = decl;
+ 	      defer_or_set_type_context (t,
+ 					 DECL_CONTEXT (decl),
+ 					 deferred_decl_context);
+ 	    }
+     }
+ }
+ 
+ /* Create a record type that contains a SIZE bytes long field of TYPE with a
+    starting bit position so that it is aligned to ALIGN bits, and leaving at
+    least ROOM bytes free before the field.  BASE_ALIGN is the alignment the
+    record is guaranteed to get.  GNAT_NODE is used for the position of the
+    associated TYPE_DECL.  */
+ 
+ tree
+ make_aligning_type (tree type, unsigned int align, tree size,
+ 		    unsigned int base_align, int room, Node_Id gnat_node)
+ {
+   /* We will be crafting a record type with one field at a position set to be
+      the next multiple of ALIGN past record'address + room bytes.  We use a
+      record placeholder to express record'address.  */
+   tree record_type = make_node (RECORD_TYPE);
+   tree record = build0 (PLACEHOLDER_EXPR, record_type);
+ 
+   tree record_addr_st
+     = convert (sizetype, build_unary_op (ADDR_EXPR, NULL_TREE, record));
+ 
+   /* The diagram below summarizes the shape of what we manipulate:
+ 
+                     <--------- pos ---------->
+                 {  +------------+-------------+-----------------+
+       record  =>{  |############|     ...     | field (type)    |
+                 {  +------------+-------------+-----------------+
+ 		   |<-- room -->|<- voffset ->|<---- size ----->|
+ 		   o            o
+ 		   |            |
+ 		   record_addr  vblock_addr
+ 
+      Every length is in sizetype bytes there, except "pos" which has to be
+      set as a bit position in the GCC tree for the record.  */
+   tree room_st = size_int (room);
+   tree vblock_addr_st = size_binop (PLUS_EXPR, record_addr_st, room_st);
+   tree voffset_st, pos, field;
+ 
+   tree name = TYPE_IDENTIFIER (type);
+ 
+   name = concat_name (name, "ALIGN");
+   TYPE_NAME (record_type) = name;
+ 
+   /* Compute VOFFSET and then POS.  The next byte position multiple of some
+      alignment after some address is obtained by "and"ing the alignment minus
+      1 with the two's complement of the address.   */
+   voffset_st = size_binop (BIT_AND_EXPR,
+ 			   fold_build1 (NEGATE_EXPR, sizetype, vblock_addr_st),
+ 			   size_int ((align / BITS_PER_UNIT) - 1));
+ 
+   /* POS = (ROOM + VOFFSET) * BIT_PER_UNIT, in bitsizetype.  */
+   pos = size_binop (MULT_EXPR,
+ 		    convert (bitsizetype,
+ 			     size_binop (PLUS_EXPR, room_st, voffset_st)),
+                     bitsize_unit_node);
+ 
+   /* Craft the GCC record representation.  We exceptionally do everything
+      manually here because 1) our generic circuitry is not quite ready to
+      handle the complex position/size expressions we are setting up, 2) we
+      have a strong simplifying factor at hand: we know the maximum possible
+      value of voffset, and 3) we have to set/reset at least the sizes in
+      accordance with this maximum value anyway, as we need them to convey
+      what should be "alloc"ated for this type.
+ 
+      Use -1 as the 'addressable' indication for the field to prevent the
+      creation of a bitfield.  We don't need one, it would have damaging
+      consequences on the alignment computation, and create_field_decl would
+      make one without this special argument, for instance because of the
+      complex position expression.  */
+   field = create_field_decl (get_identifier ("F"), type, record_type, size,
+ 			     pos, 1, -1);
+   TYPE_FIELDS (record_type) = field;
+ 
+   SET_TYPE_ALIGN (record_type, base_align);
+   TYPE_USER_ALIGN (record_type) = 1;
+ 
+   TYPE_SIZE (record_type)
+     = size_binop (PLUS_EXPR,
+                   size_binop (MULT_EXPR, convert (bitsizetype, size),
+                               bitsize_unit_node),
+ 		  bitsize_int (align + room * BITS_PER_UNIT));
+   TYPE_SIZE_UNIT (record_type)
+     = size_binop (PLUS_EXPR, size,
+ 		  size_int (room + align / BITS_PER_UNIT));
+ 
+   SET_TYPE_MODE (record_type, BLKmode);
+   relate_alias_sets (record_type, type, ALIAS_SET_COPY);
+ 
+   /* Declare it now since it will never be declared otherwise.  This is
+      necessary to ensure that its subtrees are properly marked.  */
+   create_type_decl (name, record_type, true, false, gnat_node);
+ 
+   return record_type;
+ }
+ 
+ /* Return true iff the packable types are equivalent.  */
+ 
+ bool
+ packable_type_hasher::equal (packable_type_hash *t1, packable_type_hash *t2)
+ {
+   tree type1, type2;
+ 
+   if (t1->hash != t2->hash)
+     return 0;
+ 
+   type1 = t1->type;
+   type2 = t2->type;
+ 
+   /* We consider that packable types are equivalent if they have the same name,
+      size, alignment, RM size and storage order. Taking the mode into account
+      is redundant since it is determined by the others.  */
+   return
+     TYPE_NAME (type1) == TYPE_NAME (type2)
+     && TYPE_SIZE (type1) == TYPE_SIZE (type2)
+     && TYPE_ALIGN (type1) == TYPE_ALIGN (type2)
+     && TYPE_ADA_SIZE (type1) == TYPE_ADA_SIZE (type2)
+     && TYPE_REVERSE_STORAGE_ORDER (type1) == TYPE_REVERSE_STORAGE_ORDER (type2);
+ }
+ 
+ /* Compute the hash value for the packable TYPE.  */
+ 
+ static hashval_t
+ hash_packable_type (tree type)
+ {
+   hashval_t hashcode;
+ 
+   hashcode = iterative_hash_expr (TYPE_NAME (type), 0);
+   hashcode = iterative_hash_expr (TYPE_SIZE (type), hashcode);
+   hashcode = iterative_hash_hashval_t (TYPE_ALIGN (type), hashcode);
+   hashcode = iterative_hash_expr (TYPE_ADA_SIZE (type), hashcode);
+   hashcode
+     = iterative_hash_hashval_t (TYPE_REVERSE_STORAGE_ORDER (type), hashcode);
+ 
+   return hashcode;
+ }
+ 
+ /* Look up the packable TYPE in the hash table and return its canonical version
+    if it exists; otherwise, insert it into the hash table.  */
+ 
+ static tree
+ canonicalize_packable_type (tree type)
+ {
+   const hashval_t hashcode = hash_packable_type (type);
+   struct packable_type_hash in, *h, **slot;
+ 
+   in.hash = hashcode;
+   in.type = type;
+   slot = packable_type_hash_table->find_slot_with_hash (&in, hashcode, INSERT);
+   h = *slot;
+   if (!h)
+     {
+       h = ggc_alloc<packable_type_hash> ();
+       h->hash = hashcode;
+       h->type = type;
+       *slot = h;
+     }
+ 
+   return h->type;
+ }
+ 
+ /* TYPE is an ARRAY_TYPE that is being used as the type of a field in a packed
+    record.  See if we can rewrite it as a type that has non-BLKmode, which we
+    can pack tighter in the packed record.  If so, return the new type; if not,
+    return the original type.  */
+ 
+ static tree
+ make_packable_array_type (tree type)
+ {
+   const unsigned HOST_WIDE_INT size = tree_to_uhwi (TYPE_SIZE (type));
+   unsigned HOST_WIDE_INT new_size;
+   unsigned int new_align;
+ 
+   /* No point in doing anything if the size is either zero or too large for an
+      integral mode, or if the type already has non-BLKmode.  */
+   if (size == 0 || size > MAX_FIXED_MODE_SIZE || TYPE_MODE (type) != BLKmode)
+     return type;
+ 
+   /* Punt if the component type is an aggregate type for now.  */
+   if (AGGREGATE_TYPE_P (TREE_TYPE (type)))
+     return type;
+ 
+   tree new_type = copy_type (type);
+ 
+   new_size = ceil_pow2 (size);
+   new_align = MIN (new_size, BIGGEST_ALIGNMENT);
+   SET_TYPE_ALIGN (new_type, new_align);
+ 
+   TYPE_SIZE (new_type) = bitsize_int (new_size);
+   TYPE_SIZE_UNIT (new_type) = size_int (new_size / BITS_PER_UNIT);
+ 
+   SET_TYPE_MODE (new_type, mode_for_size (new_size, MODE_INT, 1).else_blk ());
+ 
+   return new_type;
+ }
+ 
+ /* TYPE is a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE that is being used
+    as the type of a field in a packed record if IN_RECORD is true, or as
+    the component type of a packed array if IN_RECORD is false.  See if we
+    can rewrite it either as a type that has non-BLKmode, which we can pack
+    tighter in the packed record case, or as a smaller type with at most
+    MAX_ALIGN alignment if the value is non-zero.  If so, return the new
+    type; if not, return the original type.  */
+ 
+ tree
+ make_packable_type (tree type, bool in_record, unsigned int max_align)
+ {
+   const unsigned HOST_WIDE_INT size = tree_to_uhwi (TYPE_SIZE (type));
+   const unsigned int align = TYPE_ALIGN (type);
+   unsigned HOST_WIDE_INT new_size;
+   unsigned int new_align;
+ 
+   /* No point in doing anything if the size is zero.  */
+   if (size == 0)
+     return type;
+ 
+   tree new_type = make_node (TREE_CODE (type));
+ 
+   /* Copy the name and flags from the old type to that of the new.
+      Note that we rely on the pointer equality created here for
+      TYPE_NAME to look through conversions in various places.  */
+   TYPE_NAME (new_type) = TYPE_NAME (type);
+   TYPE_PACKED (new_type) = 1;
+   TYPE_JUSTIFIED_MODULAR_P (new_type) = TYPE_JUSTIFIED_MODULAR_P (type);
+   TYPE_CONTAINS_TEMPLATE_P (new_type) = TYPE_CONTAINS_TEMPLATE_P (type);
+   TYPE_REVERSE_STORAGE_ORDER (new_type) = TYPE_REVERSE_STORAGE_ORDER (type);
+   if (TREE_CODE (type) == RECORD_TYPE)
+     TYPE_PADDING_P (new_type) = TYPE_PADDING_P (type);
+ 
+   /* If we are in a record and have a small size, set the alignment to
+      try for an integral mode.  Otherwise set it to try for a smaller
+      type with BLKmode.  */
+   if (in_record && size <= MAX_FIXED_MODE_SIZE)
+     {
+       new_size = ceil_pow2 (size);
+       new_align = MIN (new_size, BIGGEST_ALIGNMENT);
+       SET_TYPE_ALIGN (new_type, new_align);
+     }
+   else
+     {
+       tree ada_size = TYPE_ADA_SIZE (type);
+ 
+       /* Do not try to shrink the size if the RM size is not constant.  */
+       if (TYPE_CONTAINS_TEMPLATE_P (type) || !tree_fits_uhwi_p (ada_size))
+ 	return type;
+ 
+       /* Round the RM size up to a unit boundary to get the minimal size
+ 	 for a BLKmode record.  Give up if it's already the size and we
+ 	 don't need to lower the alignment.  */
+       new_size = tree_to_uhwi (ada_size);
+       new_size = (new_size + BITS_PER_UNIT - 1) & -BITS_PER_UNIT;
+       if (new_size == size && (max_align == 0 || align <= max_align))
+ 	return type;
+ 
+       new_align = MIN (new_size & -new_size, BIGGEST_ALIGNMENT);
+       if (max_align > 0 && new_align > max_align)
+ 	new_align = max_align;
+       SET_TYPE_ALIGN (new_type, MIN (align, new_align));
+     }
+ 
+   TYPE_USER_ALIGN (new_type) = 1;
+ 
+   /* Now copy the fields, keeping the position and size as we don't want
+      to change the layout by propagating the packedness downwards.  */
+   tree new_field_list = NULL_TREE;
+   for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+     {
+       tree new_field_type = TREE_TYPE (field);
+       tree new_field, new_field_size;
+ 
+       if (AGGREGATE_TYPE_P (new_field_type)
+ 	  && tree_fits_uhwi_p (TYPE_SIZE (new_field_type)))
+ 	{
+ 	  if (RECORD_OR_UNION_TYPE_P (new_field_type)
+ 	      && !TYPE_FAT_POINTER_P (new_field_type))
+ 	    new_field_type
+ 	      = make_packable_type (new_field_type, true, max_align);
+ 	  else if (in_record
+ 		   && max_align > 0
+ 		   && max_align < BITS_PER_UNIT
+ 		   && TREE_CODE (new_field_type) == ARRAY_TYPE)
+ 	    new_field_type = make_packable_array_type (new_field_type);
+ 	}
+ 
+       /* However, for the last field in a not already packed record type
+ 	 that is of an aggregate type, we need to use the RM size in the
+ 	 packable version of the record type, see finish_record_type.  */
+       if (!DECL_CHAIN (field)
+ 	  && !TYPE_PACKED (type)
+ 	  && RECORD_OR_UNION_TYPE_P (new_field_type)
+ 	  && !TYPE_FAT_POINTER_P (new_field_type)
+ 	  && !TYPE_CONTAINS_TEMPLATE_P (new_field_type)
+ 	  && TYPE_ADA_SIZE (new_field_type))
+ 	new_field_size = TYPE_ADA_SIZE (new_field_type);
+       else
+ 	{
+ 	  new_field_size = DECL_SIZE (field);
+ 
+ 	  /* Make sure not to use too small a type for the size.  */
+ 	  if (TYPE_MODE (new_field_type) == BLKmode)
+ 	    new_field_type = TREE_TYPE (field);
+ 	}
+ 
+       /* This is a layout with full representation, alignment and size clauses
+ 	 so we simply pass 0 as PACKED like gnat_to_gnu_field in this case.  */
+       new_field
+ 	= create_field_decl (DECL_NAME (field), new_field_type, new_type,
+ 			     new_field_size, bit_position (field), 0,
+ 			     !DECL_NONADDRESSABLE_P (field));
+ 
+       DECL_INTERNAL_P (new_field) = DECL_INTERNAL_P (field);
+       SET_DECL_ORIGINAL_FIELD_TO_FIELD (new_field, field);
+       if (TREE_CODE (new_type) == QUAL_UNION_TYPE)
+ 	DECL_QUALIFIER (new_field) = DECL_QUALIFIER (field);
+ 
+       DECL_CHAIN (new_field) = new_field_list;
+       new_field_list = new_field;
+     }
+ 
+   /* If this is a padding record, we never want to make the size smaller
+      than what was specified.  For QUAL_UNION_TYPE, also copy the size.  */
+   if (TYPE_IS_PADDING_P (type) || TREE_CODE (type) == QUAL_UNION_TYPE)
+     {
+       TYPE_SIZE (new_type) = TYPE_SIZE (type);
+       TYPE_SIZE_UNIT (new_type) = TYPE_SIZE_UNIT (type);
+       new_size = size;
+     }
+   else
+     {
+       TYPE_SIZE (new_type) = bitsize_int (new_size);
+       TYPE_SIZE_UNIT (new_type) = size_int (new_size / BITS_PER_UNIT);
+     }
+ 
+   if (!TYPE_CONTAINS_TEMPLATE_P (type))
+     SET_TYPE_ADA_SIZE (new_type, TYPE_ADA_SIZE (type));
+ 
+   finish_record_type (new_type, nreverse (new_field_list), 2, false);
+   relate_alias_sets (new_type, type, ALIAS_SET_COPY);
+   if (gnat_encodings != DWARF_GNAT_ENCODINGS_ALL)
+     SET_TYPE_DEBUG_TYPE (new_type, TYPE_DEBUG_TYPE (type));
+   else if (TYPE_STUB_DECL (type))
+     SET_DECL_PARALLEL_TYPE (TYPE_STUB_DECL (new_type),
+ 			    DECL_PARALLEL_TYPE (TYPE_STUB_DECL (type)));
+ 
+   /* Try harder to get a packable type if necessary, for example in case
+      the record itself contains a BLKmode field.  */
+   if (in_record && TYPE_MODE (new_type) == BLKmode)
+     SET_TYPE_MODE (new_type,
+ 		   mode_for_size_tree (TYPE_SIZE (new_type),
+ 				       MODE_INT, 1).else_blk ());
+ 
+   /* If neither mode nor size nor alignment shrunk, return the old type.  */
+   if (TYPE_MODE (new_type) == BLKmode && new_size >= size && max_align == 0)
+     return type;
+ 
+   /* If the packable type is named, we canonicalize it by means of the hash
+      table.  This is consistent with the language semantics and ensures that
+      gigi and the middle-end have a common view of these packable types.  */
+   return
+     TYPE_NAME (new_type) ? canonicalize_packable_type (new_type) : new_type;
+ }
+ 
+ /* Return true if TYPE has an unsigned representation.  This needs to be used
+    when the representation of types whose precision is not equal to their size
+    is manipulated based on the RM size.  */
+ 
+ static inline bool
+ type_unsigned_for_rm (tree type)
+ {
+   /* This is the common case.  */
+   if (TYPE_UNSIGNED (type))
+     return true;
+ 
+   /* See the E_Signed_Integer_Subtype case of gnat_to_gnu_entity.  */
+   if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
+       && tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
+     return true;
+ 
+   return false;
+ }
+ 
+ /* Given a type TYPE, return a new type whose size is appropriate for SIZE.
+    If TYPE is the best type, return it.  Otherwise, make a new type.  We
+    only support new integral and pointer types.  FOR_BIASED is true if
+    we are making a biased type.  */
+ 
+ tree
+ make_type_from_size (tree type, tree size_tree, bool for_biased)
+ {
+   unsigned HOST_WIDE_INT size;
+   bool biased_p;
+   tree new_type;
+ 
+   /* If size indicates an error, just return TYPE to avoid propagating
+      the error.  Likewise if it's too large to represent.  */
+   if (!size_tree || !tree_fits_uhwi_p (size_tree))
+     return type;
+ 
+   size = tree_to_uhwi (size_tree);
+ 
+   switch (TREE_CODE (type))
+     {
+     case BOOLEAN_TYPE:
+       /* Do not mess with boolean types that have foreign convention.  */
+       if (TYPE_PRECISION (type) == 1 && TYPE_SIZE (type) == size_tree)
+ 	break;
+ 
+       /* ... fall through ... */
+ 
+     case INTEGER_TYPE:
+     case ENUMERAL_TYPE:
+       biased_p = (TREE_CODE (type) == INTEGER_TYPE
+ 		  && TYPE_BIASED_REPRESENTATION_P (type));
+ 
+       /* Integer types with precision 0 are forbidden.  */
+       if (size == 0)
+ 	size = 1;
+ 
+       /* Only do something if the type is not a bit-packed array type and does
+ 	 not already have the proper size and the size is not too large.  */
+       if (BIT_PACKED_ARRAY_TYPE_P (type)
+ 	  || (TYPE_PRECISION (type) == size && biased_p == for_biased)
+ 	  || size > (Enable_128bit_Types ? 128 : LONG_LONG_TYPE_SIZE))
+ 	break;
+ 
+       biased_p |= for_biased;
+ 
+       /* The type should be an unsigned type if the original type is unsigned
+ 	 or if the lower bound is constant and non-negative or if the type is
+ 	 biased, see E_Signed_Integer_Subtype case of gnat_to_gnu_entity.  */
+       if (type_unsigned_for_rm (type) || biased_p)
+ 	new_type = make_unsigned_type (size);
+       else
+ 	new_type = make_signed_type (size);
+       TREE_TYPE (new_type) = TREE_TYPE (type) ? TREE_TYPE (type) : type;
+       SET_TYPE_RM_MIN_VALUE (new_type, TYPE_MIN_VALUE (type));
+       SET_TYPE_RM_MAX_VALUE (new_type, TYPE_MAX_VALUE (type));
+       /* Copy the name to show that it's essentially the same type and
+ 	 not a subrange type.  */
+       TYPE_NAME (new_type) = TYPE_NAME (type);
+       TYPE_BIASED_REPRESENTATION_P (new_type) = biased_p;
+       SET_TYPE_RM_SIZE (new_type, bitsize_int (size));
+       return new_type;
+ 
+     case RECORD_TYPE:
+       /* Do something if this is a fat pointer, in which case we
+ 	 may need to return the thin pointer.  */
+       if (TYPE_FAT_POINTER_P (type) && size < POINTER_SIZE * 2)
+ 	{
+ 	  scalar_int_mode p_mode;
+ 	  if (!int_mode_for_size (size, 0).exists (&p_mode)
+ 	      || !targetm.valid_pointer_mode (p_mode))
+ 	    p_mode = ptr_mode;
+ 	  return
+ 	    build_pointer_type_for_mode
+ 	      (TYPE_OBJECT_RECORD_TYPE (TYPE_UNCONSTRAINED_ARRAY (type)),
+ 	       p_mode, 0);
+ 	}
+       break;
+ 
+     case POINTER_TYPE:
+       /* Only do something if this is a thin pointer, in which case we
+ 	 may need to return the fat pointer.  */
+       if (TYPE_IS_THIN_POINTER_P (type) && size >= POINTER_SIZE * 2)
+ 	return
+ 	  build_pointer_type (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type)));
+       break;
+ 
+     default:
+       break;
+     }
+ 
+   return type;
+ }
+ 
+ /* Return true iff the padded types are equivalent.  */
+ 
+ bool
+ pad_type_hasher::equal (pad_type_hash *t1, pad_type_hash *t2)
+ {
+   tree type1, type2;
+ 
+   if (t1->hash != t2->hash)
+     return 0;
+ 
+   type1 = t1->type;
+   type2 = t2->type;
+ 
+   /* We consider that padded types are equivalent if they pad the same type
+      and have the same size, alignment, RM size and storage order.  Taking the
+      mode into account is redundant since it is determined by the others.  */
+   return
+     TREE_TYPE (TYPE_FIELDS (type1)) == TREE_TYPE (TYPE_FIELDS (type2))
+     && TYPE_SIZE (type1) == TYPE_SIZE (type2)
+     && TYPE_ALIGN (type1) == TYPE_ALIGN (type2)
+     && TYPE_ADA_SIZE (type1) == TYPE_ADA_SIZE (type2)
+     && TYPE_REVERSE_STORAGE_ORDER (type1) == TYPE_REVERSE_STORAGE_ORDER (type2);
+ }
+ 
+ /* Compute the hash value for the padded TYPE.  */
+ 
+ static hashval_t
+ hash_pad_type (tree type)
+ {
+   hashval_t hashcode;
+ 
+   hashcode
+     = iterative_hash_object (TYPE_HASH (TREE_TYPE (TYPE_FIELDS (type))), 0);
+   hashcode = iterative_hash_expr (TYPE_SIZE (type), hashcode);
+   hashcode = iterative_hash_hashval_t (TYPE_ALIGN (type), hashcode);
+   hashcode = iterative_hash_expr (TYPE_ADA_SIZE (type), hashcode);
+   hashcode
+     = iterative_hash_hashval_t (TYPE_REVERSE_STORAGE_ORDER (type), hashcode);
+ 
+   return hashcode;
+ }
+ 
+ /* Look up the padded TYPE in the hash table and return its canonical version
+    if it exists; otherwise, insert it into the hash table.  */
+ 
+ static tree
+ canonicalize_pad_type (tree type)
+ {
+   const hashval_t hashcode = hash_pad_type (type);
+   struct pad_type_hash in, *h, **slot;
+ 
+   in.hash = hashcode;
+   in.type = type;
+   slot = pad_type_hash_table->find_slot_with_hash (&in, hashcode, INSERT);
+   h = *slot;
+   if (!h)
+     {
+       h = ggc_alloc<pad_type_hash> ();
+       h->hash = hashcode;
+       h->type = type;
+       *slot = h;
+     }
+ 
+   return h->type;
+ }
+ 
+ /* Ensure that TYPE has SIZE and ALIGN.  Make and return a new padded type
+    if needed.  We have already verified that SIZE and ALIGN are large enough.
+    GNAT_ENTITY is used to name the resulting record and to issue a warning.
+    IS_COMPONENT_TYPE is true if this is being done for the component type of
+    an array.  DEFINITION is true if this type is being defined.  SET_RM_SIZE
+    is true if the RM size of the resulting type is to be set to SIZE too; in
+    this case, the padded type is canonicalized before being returned.  */
+ 
+ tree
+ maybe_pad_type (tree type, tree size, unsigned int align,
+ 		Entity_Id gnat_entity, bool is_component_type,
+ 		bool definition, bool set_rm_size)
+ {
+   tree orig_size = TYPE_SIZE (type);
+   unsigned int orig_align = TYPE_ALIGN (type);
+   tree record, field;
+ 
+   /* If TYPE is a padded type, see if it agrees with any size and alignment
+      we were given.  If so, return the original type.  Otherwise, strip
+      off the padding, since we will either be returning the inner type
+      or repadding it.  If no size or alignment is specified, use that of
+      the original padded type.  */
+   if (TYPE_IS_PADDING_P (type))
+     {
+       if ((!size
+ 	   || operand_equal_p (round_up (size, orig_align), orig_size, 0))
+ 	  && (align == 0 || align == orig_align))
+ 	return type;
+ 
+       if (!size)
+ 	size = orig_size;
+       if (align == 0)
+ 	align = orig_align;
+ 
+       type = TREE_TYPE (TYPE_FIELDS (type));
+       orig_size = TYPE_SIZE (type);
+       orig_align = TYPE_ALIGN (type);
+     }
+ 
+   /* If the size is either not being changed or is being made smaller (which
+      is not done here and is only valid for bitfields anyway), show the size
+      isn't changing.  Likewise, clear the alignment if it isn't being
+      changed.  Then return if we aren't doing anything.  */
+   if (size
+       && (operand_equal_p (size, orig_size, 0)
+ 	  || (TREE_CODE (orig_size) == INTEGER_CST
+ 	      && tree_int_cst_lt (size, orig_size))))
+     size = NULL_TREE;
+ 
+   if (align == orig_align)
+     align = 0;
+ 
+   if (align == 0 && !size)
+     return type;
+ 
+   /* We used to modify the record in place in some cases, but that could
+      generate incorrect debugging information.  So make a new record
+      type and name.  */
+   record = make_node (RECORD_TYPE);
+   TYPE_PADDING_P (record) = 1;
+ 
+   if (Present (gnat_entity))
+     TYPE_NAME (record) = create_concat_name (gnat_entity, "PAD");
+ 
+   SET_TYPE_ALIGN (record, align ? align : orig_align);
+   TYPE_SIZE (record) = size ? size : orig_size;
+   TYPE_SIZE_UNIT (record)
+     = convert (sizetype,
+ 	       size_binop (EXACT_DIV_EXPR, TYPE_SIZE (record),
+ 			   bitsize_unit_node));
+ 
+   /* If we are changing the alignment and the input type is a record with
+      BLKmode and a small constant size, try to make a form that has an
+      integral mode.  This might allow the padding record to also have an
+      integral mode, which will be much more efficient.  There is no point
+      in doing so if a size is specified unless it is also a small constant
+      size and it is incorrect to do so if we cannot guarantee that the mode
+      will be naturally aligned since the field must always be addressable.
+ 
+      ??? This might not always be a win when done for a stand-alone object:
+      since the nominal and the effective type of the object will now have
+      different modes, a VIEW_CONVERT_EXPR will be required for converting
+      between them and it might be hard to overcome afterwards, including
+      at the RTL level when the stand-alone object is accessed as a whole.  */
+   if (align > 0
+       && RECORD_OR_UNION_TYPE_P (type)
+       && TYPE_MODE (type) == BLKmode
+       && !TYPE_BY_REFERENCE_P (type)
+       && TREE_CODE (orig_size) == INTEGER_CST
+       && !TREE_OVERFLOW (orig_size)
+       && compare_tree_int (orig_size, MAX_FIXED_MODE_SIZE) <= 0
+       && (!size
+ 	  || (TREE_CODE (size) == INTEGER_CST
+ 	      && compare_tree_int (size, MAX_FIXED_MODE_SIZE) <= 0)))
+     {
+       tree packable_type = make_packable_type (type, true, align);
+       if (TYPE_MODE (packable_type) != BLKmode
+ 	  && compare_tree_int (TYPE_SIZE (packable_type), align) <= 0)
+         type = packable_type;
+     }
+ 
+   /* Now create the field with the original size.  */
+   field = create_field_decl (get_identifier ("F"), type, record, orig_size,
+ 			     bitsize_zero_node, 0, 1);
+   DECL_INTERNAL_P (field) = 1;
+ 
+   /* We will output additional debug info manually below.  */
+   finish_record_type (record, field, 1, false);
+ 
+   /* Set the RM size if requested.  */
+   if (set_rm_size)
+     {
+       SET_TYPE_ADA_SIZE (record, size ? size : orig_size);
+ 
+       /* If the padded type is complete and has constant size, we canonicalize
+ 	 it by means of the hash table.  This is consistent with the language
+ 	 semantics and ensures that gigi and the middle-end have a common view
+ 	 of these padded types.  */
+       if (TREE_CONSTANT (TYPE_SIZE (record)))
+ 	{
+ 	  tree canonical = canonicalize_pad_type (record);
+ 	  if (canonical != record)
+ 	    {
+ 	      record = canonical;
+ 	      goto built;
+ 	    }
+ 	}
+     }
+ 
+   /* Make the inner type the debug type of the padded type.  */
+   if (gnat_encodings != DWARF_GNAT_ENCODINGS_ALL)
+     SET_TYPE_DEBUG_TYPE (record, maybe_debug_type (type));
+ 
+   /* Unless debugging information isn't being written for the input type,
+      write a record that shows what we are a subtype of and also make a
+      variable that indicates our size, if still variable.  */
+   if (TREE_CODE (orig_size) != INTEGER_CST
+       && TYPE_NAME (record)
+       && TYPE_NAME (type)
+       && !(TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
+ 	   && DECL_IGNORED_P (TYPE_NAME (type))))
+     {
+       tree name = TYPE_IDENTIFIER (record);
+       tree size_unit = TYPE_SIZE_UNIT (record);
+ 
+       /* A variable that holds the size is required even with no encoding since
+ 	 it will be referenced by debugging information attributes.  At global
+ 	 level, we need a single variable across all translation units.  */
+       if (size
+ 	  && TREE_CODE (size) != INTEGER_CST
+ 	  && (definition || global_bindings_p ()))
+ 	{
+ 	  /* Whether or not gnat_entity comes from source, this XVZ variable is
+ 	     is a compilation artifact.  */
+ 	  size_unit
+ 	    = create_var_decl (concat_name (name, "XVZ"), NULL_TREE, sizetype,
+ 			      size_unit, true, global_bindings_p (),
+ 			      !definition && global_bindings_p (), false,
+ 			      false, true, true, NULL, gnat_entity, false);
+ 	  TYPE_SIZE_UNIT (record) = size_unit;
+ 	}
+ 
+       /* There is no need to show what we are a subtype of when outputting as
+ 	 few encodings as possible: regular debugging infomation makes this
+ 	 redundant.  */
+       if (gnat_encodings == DWARF_GNAT_ENCODINGS_ALL)
+ 	{
+ 	  tree marker = make_node (RECORD_TYPE);
+ 	  tree orig_name = TYPE_IDENTIFIER (type);
+ 
+ 	  TYPE_NAME (marker) = concat_name (name, "XVS");
+ 	  finish_record_type (marker,
+ 			      create_field_decl (orig_name,
+ 						 build_reference_type (type),
+ 						 marker, NULL_TREE, NULL_TREE,
+ 						 0, 0),
+ 			      0, true);
+ 	  TYPE_SIZE_UNIT (marker) = size_unit;
+ 
+ 	  add_parallel_type (record, marker);
+ 	}
+     }
+ 
+ built:
+   /* If a simple size was explicitly given, maybe issue a warning.  */
+   if (!size
+       || TREE_CODE (size) == COND_EXPR
+       || TREE_CODE (size) == MAX_EXPR
+       || No (gnat_entity))
+     return record;
+ 
+   /* But don't do it if we are just annotating types and the type is tagged or
+      concurrent, since these types aren't fully laid out in this mode.  */
+   if (type_annotate_only)
+     {
+       Entity_Id gnat_type
+ 	= is_component_type
+ 	  ? Component_Type (gnat_entity) : Etype (gnat_entity);
+ 
+       if (Is_Tagged_Type (gnat_type) || Is_Concurrent_Type (gnat_type))
+ 	return record;
+     }
+ 
+   /* Take the original size as the maximum size of the input if there was an
+      unconstrained record involved and round it up to the specified alignment,
+      if one was specified, but only for aggregate types.  */
+   if (CONTAINS_PLACEHOLDER_P (orig_size))
+     orig_size = max_size (orig_size, true);
+ 
+   if (align && AGGREGATE_TYPE_P (type))
+     orig_size = round_up (orig_size, align);
+ 
+   if (!operand_equal_p (size, orig_size, 0)
+       && !(TREE_CODE (size) == INTEGER_CST
+ 	   && TREE_CODE (orig_size) == INTEGER_CST
+ 	   && (TREE_OVERFLOW (size)
+ 	       || TREE_OVERFLOW (orig_size)
+ 	       || tree_int_cst_lt (size, orig_size))))
+     {
+       Node_Id gnat_error_node;
+ 
+       /* For a packed array, post the message on the original array type.  */
+       if (Is_Packed_Array_Impl_Type (gnat_entity))
+ 	gnat_entity = Original_Array_Type (gnat_entity);
+ 
+       if ((Ekind (gnat_entity) == E_Component
+ 	   || Ekind (gnat_entity) == E_Discriminant)
+ 	  && Present (Component_Clause (gnat_entity)))
+ 	gnat_error_node = Last_Bit (Component_Clause (gnat_entity));
+       else if (Has_Size_Clause (gnat_entity))
+ 	gnat_error_node = Expression (Size_Clause (gnat_entity));
+       else if (Has_Object_Size_Clause (gnat_entity))
+ 	gnat_error_node = Expression (Object_Size_Clause (gnat_entity));
+       else
+ 	gnat_error_node = Empty;
+ 
+       /* Generate message only for entities that come from source, since
+ 	 if we have an entity created by expansion, the message will be
+ 	 generated for some other corresponding source entity.  */
+       if (Comes_From_Source (gnat_entity))
+ 	{
+ 	  if (is_component_type)
+ 	    post_error_ne_tree ("component of& padded{ by ^ bits}??",
+ 				gnat_entity, gnat_entity,
+ 				size_diffop (size, orig_size));
+ 	  else if (Present (gnat_error_node))
+ 	    post_error_ne_tree ("{^ }bits of & unused??",
+ 				gnat_error_node, gnat_entity,
+ 				size_diffop (size, orig_size));
+ 	}
+     }
+ 
+   return record;
+ }
+ 
+ /* Return true if padded TYPE was built with an RM size.  */
+ 
+ bool
+ pad_type_has_rm_size (tree type)
+ {
+   /* This is required for the lookup.  */
+   if (!TREE_CONSTANT (TYPE_SIZE (type)))
+     return false;
+ 
+   const hashval_t hashcode = hash_pad_type (type);
+   struct pad_type_hash in, *h;
+ 
+   in.hash = hashcode;
+   in.type = type;
+   h = pad_type_hash_table->find_with_hash (&in, hashcode);
+ 
+   /* The types built with an RM size are the canonicalized ones.  */
+   return h && h->type == type;
+ }
+ 
+ /* Return a copy of the padded TYPE but with reverse storage order.  */
+ 
+ tree
+ set_reverse_storage_order_on_pad_type (tree type)
+ {
+   if (flag_checking)
+     {
+       /* If the inner type is not scalar then the function does nothing.  */
+       tree inner_type = TREE_TYPE (TYPE_FIELDS (type));
+       gcc_assert (!AGGREGATE_TYPE_P (inner_type)
+ 		  && !VECTOR_TYPE_P (inner_type));
+     }
+ 
+   /* This is required for the canonicalization.  */
+   gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
+ 
+   tree field = copy_node (TYPE_FIELDS (type));
+   type = copy_type (type);
+   DECL_CONTEXT (field) = type;
+   TYPE_FIELDS (type) = field;
+   TYPE_REVERSE_STORAGE_ORDER (type) = 1;
+   return canonicalize_pad_type (type);
+ }
+ 
+ /* Relate the alias sets of GNU_NEW_TYPE and GNU_OLD_TYPE according to OP.
+    If this is a multi-dimensional array type, do this recursively.
+ 
+    OP may be
+    - ALIAS_SET_COPY:     the new set is made a copy of the old one.
+    - ALIAS_SET_SUPERSET: the new set is made a superset of the old one.
+    - ALIAS_SET_SUBSET:   the new set is made a subset of the old one.  */
+ 
+ void
+ relate_alias_sets (tree gnu_new_type, tree gnu_old_type, enum alias_set_op op)
+ {
+   /* Remove any padding from GNU_OLD_TYPE.  It doesn't matter in the case
+      of a one-dimensional array, since the padding has the same alias set
+      as the field type, but if it's a multi-dimensional array, we need to
+      see the inner types.  */
+   while (TREE_CODE (gnu_old_type) == RECORD_TYPE
+ 	 && (TYPE_JUSTIFIED_MODULAR_P (gnu_old_type)
+ 	     || TYPE_PADDING_P (gnu_old_type)))
+     gnu_old_type = TREE_TYPE (TYPE_FIELDS (gnu_old_type));
+ 
+   /* Unconstrained array types are deemed incomplete and would thus be given
+      alias set 0.  Retrieve the underlying array type.  */
+   if (TREE_CODE (gnu_old_type) == UNCONSTRAINED_ARRAY_TYPE)
+     gnu_old_type
+       = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_old_type))));
+   if (TREE_CODE (gnu_new_type) == UNCONSTRAINED_ARRAY_TYPE)
+     gnu_new_type
+       = TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_new_type))));
+ 
+   if (TREE_CODE (gnu_new_type) == ARRAY_TYPE
+       && TREE_CODE (TREE_TYPE (gnu_new_type)) == ARRAY_TYPE
+       && TYPE_MULTI_ARRAY_P (TREE_TYPE (gnu_new_type)))
+     relate_alias_sets (TREE_TYPE (gnu_new_type), TREE_TYPE (gnu_old_type), op);
+ 
+   switch (op)
+     {
+     case ALIAS_SET_COPY:
+       /* The alias set shouldn't be copied between array types with different
+ 	 aliasing settings because this can break the aliasing relationship
+ 	 between the array type and its element type.  */
+       if (flag_checking || flag_strict_aliasing)
+ 	gcc_assert (!(TREE_CODE (gnu_new_type) == ARRAY_TYPE
+ 		      && TREE_CODE (gnu_old_type) == ARRAY_TYPE
+ 		      && TYPE_NONALIASED_COMPONENT (gnu_new_type)
+ 			 != TYPE_NONALIASED_COMPONENT (gnu_old_type)));
+ 
+       TYPE_ALIAS_SET (gnu_new_type) = get_alias_set (gnu_old_type);
+       break;
+ 
+     case ALIAS_SET_SUBSET:
+     case ALIAS_SET_SUPERSET:
+       {
+ 	alias_set_type old_set = get_alias_set (gnu_old_type);
+ 	alias_set_type new_set = get_alias_set (gnu_new_type);
+ 
+ 	/* Do nothing if the alias sets conflict.  This ensures that we
+ 	   never call record_alias_subset several times for the same pair
+ 	   or at all for alias set 0.  */
+ 	if (!alias_sets_conflict_p (old_set, new_set))
+ 	  {
+ 	    if (op == ALIAS_SET_SUBSET)
+ 	      record_alias_subset (old_set, new_set);
+ 	    else
+ 	      record_alias_subset (new_set, old_set);
+ 	  }
+       }
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   record_component_aliases (gnu_new_type);
+ }
+ 
+ /* Record TYPE as a builtin type for Ada.  NAME is the name of the type.
+    ARTIFICIAL_P is true if the type was generated by the compiler.  */
+ 
+ void
+ record_builtin_type (const char *name, tree type, bool artificial_p)
+ {
+   tree type_decl = build_decl (input_location,
+ 			       TYPE_DECL, get_identifier (name), type);
+   DECL_ARTIFICIAL (type_decl) = artificial_p;
+   TYPE_ARTIFICIAL (type) = artificial_p;
+   gnat_pushdecl (type_decl, Empty);
+ 
+   if (debug_hooks->type_decl)
+     debug_hooks->type_decl (type_decl, false);
+ }
+ 
+ /* Finish constructing the character type CHAR_TYPE.
+ 
+   In Ada character types are enumeration types and, as a consequence, are
+   represented in the front-end by integral types holding the positions of
+   the enumeration values as defined by the language, which means that the
+   integral types are unsigned.
+ 
+   Unfortunately the signedness of 'char' in C is implementation-defined
+   and GCC even has the option -f[un]signed-char to toggle it at run time.
+   Since GNAT's philosophy is to be compatible with C by default, to wit
+   Interfaces.C.char is defined as a mere copy of Character, we may need
+   to declare character types as signed types in GENERIC and generate the
+   necessary adjustments to make them behave as unsigned types.
+ 
+   The overall strategy is as follows: if 'char' is unsigned, do nothing;
+   if 'char' is signed, translate character types of CHAR_TYPE_SIZE and
+   character subtypes with RM_Size = Esize = CHAR_TYPE_SIZE into signed
+   types.  The idea is to ensure that the bit pattern contained in the
+   Esize'd objects is not changed, even though the numerical value will
+   be interpreted differently depending on the signedness.  */
+ 
+ void
+ finish_character_type (tree char_type)
+ {
+   if (TYPE_UNSIGNED (char_type))
+     return;
+ 
+   /* Make a copy of a generic unsigned version since we'll modify it.  */
+   tree unsigned_char_type
+     = (char_type == char_type_node
+        ? unsigned_char_type_node
+        : copy_type (gnat_unsigned_type_for (char_type)));
+ 
+   /* Create an unsigned version of the type and set it as debug type.  */
+   TYPE_NAME (unsigned_char_type) = TYPE_NAME (char_type);
+   TYPE_STRING_FLAG (unsigned_char_type) = TYPE_STRING_FLAG (char_type);
+   TYPE_ARTIFICIAL (unsigned_char_type) = TYPE_ARTIFICIAL (char_type);
+   SET_TYPE_DEBUG_TYPE (char_type, unsigned_char_type);
+ 
+   /* If this is a subtype, make the debug type a subtype of the debug type
+      of the base type and convert literal RM bounds to unsigned.  */
+   if (TREE_TYPE (char_type))
+     {
+       tree base_unsigned_char_type = TYPE_DEBUG_TYPE (TREE_TYPE (char_type));
+       tree min_value = TYPE_RM_MIN_VALUE (char_type);
+       tree max_value = TYPE_RM_MAX_VALUE (char_type);
+ 
+       if (TREE_CODE (min_value) == INTEGER_CST)
+ 	min_value = fold_convert (base_unsigned_char_type, min_value);
+       if (TREE_CODE (max_value) == INTEGER_CST)
+ 	max_value = fold_convert (base_unsigned_char_type, max_value);
+ 
+       TREE_TYPE (unsigned_char_type) = base_unsigned_char_type;
+       SET_TYPE_RM_MIN_VALUE (unsigned_char_type, min_value);
+       SET_TYPE_RM_MAX_VALUE (unsigned_char_type, max_value);
+     }
+ 
+   /* Adjust the RM bounds of the original type to unsigned; that's especially
+      important for types since they are implicit in this case.  */
+   SET_TYPE_RM_MIN_VALUE (char_type, TYPE_MIN_VALUE (unsigned_char_type));
+   SET_TYPE_RM_MAX_VALUE (char_type, TYPE_MAX_VALUE (unsigned_char_type));
+ }
+ 
+ /* Given a record type RECORD_TYPE and a list of FIELD_DECL nodes FIELD_LIST,
+    finish constructing the record type as a fat pointer type.  */
+ 
+ void
+ finish_fat_pointer_type (tree record_type, tree field_list)
+ {
+   /* Make sure we can put it into a register.  */
+   if (STRICT_ALIGNMENT)
+     SET_TYPE_ALIGN (record_type, MIN (BIGGEST_ALIGNMENT, 2 * POINTER_SIZE));
+ 
+   /* Show what it really is.  */
+   TYPE_FAT_POINTER_P (record_type) = 1;
+ 
+   /* Do not emit debug info for it since the types of its fields may still be
+      incomplete at this point.  */
+   finish_record_type (record_type, field_list, 0, false);
+ 
+   /* Force type_contains_placeholder_p to return true on it.  Although the
+      PLACEHOLDER_EXPRs are referenced only indirectly, this isn't a pointer
+      type but the representation of the unconstrained array.  */
+   TYPE_CONTAINS_PLACEHOLDER_INTERNAL (record_type) = 2;
+ }
+ 
+ /* Given a record type RECORD_TYPE and a list of FIELD_DECL nodes FIELD_LIST,
+    finish constructing the record or union type.  If REP_LEVEL is zero, this
+    record has no representation clause and so will be entirely laid out here.
+    If REP_LEVEL is one, this record has a representation clause and has been
+    laid out already; only set the sizes and alignment.  If REP_LEVEL is two,
+    this record is derived from a parent record and thus inherits its layout;
+    only make a pass on the fields to finalize them.  DEBUG_INFO_P is true if
+    additional debug info needs to be output for this type.  */
+ 
+ void
+ finish_record_type (tree record_type, tree field_list, int rep_level,
+ 		    bool debug_info_p)
+ {
+   const enum tree_code orig_code = TREE_CODE (record_type);
+   const bool had_size = TYPE_SIZE (record_type) != NULL_TREE;
+   const bool had_align = TYPE_ALIGN (record_type) > 0;
+   /* For all-repped records with a size specified, lay the QUAL_UNION_TYPE
+      out just like a UNION_TYPE, since the size will be fixed.  */
+   const enum tree_code code
+     = (orig_code == QUAL_UNION_TYPE && rep_level > 0 && had_size
+        ? UNION_TYPE : orig_code);
+   tree name = TYPE_IDENTIFIER (record_type);
+   tree ada_size = bitsize_zero_node;
+   tree size = bitsize_zero_node;
+   tree field;
+ 
+   TYPE_FIELDS (record_type) = field_list;
+ 
+   /* Always attach the TYPE_STUB_DECL for a record type.  It is required to
+      generate debug info and have a parallel type.  */
+   TYPE_STUB_DECL (record_type) = create_type_stub_decl (name, record_type);
+ 
+   /* Globally initialize the record first.  If this is a rep'ed record,
+      that just means some initializations; otherwise, layout the record.  */
+   if (rep_level > 0)
+     {
+       if (TYPE_ALIGN (record_type) < BITS_PER_UNIT)
+ 	SET_TYPE_ALIGN (record_type, BITS_PER_UNIT);
+ 
+       if (!had_size)
+ 	TYPE_SIZE (record_type) = bitsize_zero_node;
+     }
+   else
+     {
+       /* Ensure there isn't a size already set.  There can be in an error
+ 	 case where there is a rep clause but all fields have errors and
+ 	 no longer have a position.  */
+       TYPE_SIZE (record_type) = NULL_TREE;
+ 
+       /* Ensure we use the traditional GCC layout for bitfields when we need
+ 	 to pack the record type or have a representation clause.  The other
+ 	 possible layout (Microsoft C compiler), if available, would prevent
+ 	 efficient packing in almost all cases.  */
+ #ifdef TARGET_MS_BITFIELD_LAYOUT
+       if (TARGET_MS_BITFIELD_LAYOUT && TYPE_PACKED (record_type))
+ 	decl_attributes (&record_type,
+ 			 tree_cons (get_identifier ("gcc_struct"),
+ 				    NULL_TREE, NULL_TREE),
+ 			 ATTR_FLAG_TYPE_IN_PLACE);
+ #endif
+ 
+       layout_type (record_type);
+     }
+ 
+   /* At this point, the position and size of each field is known.  It was
+      either set before entry by a rep clause, or by laying out the type above.
+ 
+      We now run a pass over the fields (in reverse order for QUAL_UNION_TYPEs)
+      to compute the Ada size; the GCC size and alignment (for rep'ed records
+      that are not padding types); and the mode (for rep'ed records).  We also
+      clear the DECL_BIT_FIELD indication for the cases we know have not been
+      handled yet, and adjust DECL_NONADDRESSABLE_P accordingly.  */
+ 
+   if (code == QUAL_UNION_TYPE)
+     field_list = nreverse (field_list);
+ 
+   for (field = field_list; field; field = DECL_CHAIN (field))
+     {
+       tree type = TREE_TYPE (field);
+       tree pos = bit_position (field);
+       tree this_size = DECL_SIZE (field);
+       tree this_ada_size;
+ 
+       if (RECORD_OR_UNION_TYPE_P (type)
+ 	  && !TYPE_FAT_POINTER_P (type)
+ 	  && !TYPE_CONTAINS_TEMPLATE_P (type)
+ 	  && TYPE_ADA_SIZE (type))
+ 	this_ada_size = TYPE_ADA_SIZE (type);
+       else
+ 	this_ada_size = this_size;
+ 
+       const bool variant_part = (TREE_CODE (type) == QUAL_UNION_TYPE);
+ 
+       /* Clear DECL_BIT_FIELD for the cases layout_decl does not handle.  */
+       if (DECL_BIT_FIELD (field)
+ 	  && operand_equal_p (this_size, TYPE_SIZE (type), 0))
+ 	{
+ 	  const unsigned int align = TYPE_ALIGN (type);
+ 
+ 	  /* In the general case, type alignment is required.  */
+ 	  if (value_factor_p (pos, align))
+ 	    {
+ 	      /* The enclosing record type must be sufficiently aligned.
+ 		 Otherwise, if no alignment was specified for it and it
+ 		 has been laid out already, bump its alignment to the
+ 		 desired one if this is compatible with its size and
+ 		 maximum alignment, if any.  */
+ 	      if (TYPE_ALIGN (record_type) >= align)
+ 		{
+ 		  SET_DECL_ALIGN (field, MAX (DECL_ALIGN (field), align));
+ 		  DECL_BIT_FIELD (field) = 0;
+ 		}
+ 	      else if (!had_align
+ 		       && rep_level == 0
+ 		       && value_factor_p (TYPE_SIZE (record_type), align)
+ 		       && (!TYPE_MAX_ALIGN (record_type)
+ 			   || TYPE_MAX_ALIGN (record_type) >= align))
+ 		{
+ 		  SET_TYPE_ALIGN (record_type, align);
+ 		  SET_DECL_ALIGN (field, MAX (DECL_ALIGN (field), align));
+ 		  DECL_BIT_FIELD (field) = 0;
+ 		}
+ 	    }
+ 
+ 	  /* In the non-strict alignment case, only byte alignment is.  */
+ 	  if (!STRICT_ALIGNMENT
+ 	      && DECL_BIT_FIELD (field)
+ 	      && value_factor_p (pos, BITS_PER_UNIT))
+ 	    DECL_BIT_FIELD (field) = 0;
+ 	}
+ 
+       /* Clear DECL_BIT_FIELD_TYPE for a variant part at offset 0, it's simply
+ 	 not supported by the DECL_BIT_FIELD_REPRESENTATIVE machinery because
+ 	 the variant part is always the last field in the list.  */
+       if (variant_part && integer_zerop (pos))
+ 	DECL_BIT_FIELD_TYPE (field) = NULL_TREE;
+ 
+       /* If we still have DECL_BIT_FIELD set at this point, we know that the
+ 	 field is technically not addressable.  Except that it can actually
+ 	 be addressed if it is BLKmode and happens to be properly aligned.  */
+       if (DECL_BIT_FIELD (field)
+ 	  && !(DECL_MODE (field) == BLKmode
+ 	       && value_factor_p (pos, BITS_PER_UNIT)))
+ 	DECL_NONADDRESSABLE_P (field) = 1;
+ 
+       /* A type must be as aligned as its most aligned field that is not
+ 	 a bit-field.  But this is already enforced by layout_type.  */
+       if (rep_level > 0 && !DECL_BIT_FIELD (field))
+ 	SET_TYPE_ALIGN (record_type,
+ 			MAX (TYPE_ALIGN (record_type), DECL_ALIGN (field)));
+ 
+       switch (code)
+ 	{
+ 	case UNION_TYPE:
+ 	  ada_size = size_binop (MAX_EXPR, ada_size, this_ada_size);
+ 	  size = size_binop (MAX_EXPR, size, this_size);
+ 	  break;
+ 
+ 	case QUAL_UNION_TYPE:
+ 	  ada_size
+ 	    = fold_build3 (COND_EXPR, bitsizetype, DECL_QUALIFIER (field),
+ 			   this_ada_size, ada_size);
+ 	  size = fold_build3 (COND_EXPR, bitsizetype, DECL_QUALIFIER (field),
+ 			      this_size, size);
+ 	  break;
+ 
+ 	case RECORD_TYPE:
+ 	  /* Since we know here that all fields are sorted in order of
+ 	     increasing bit position, the size of the record is one
+ 	     higher than the ending bit of the last field processed
+ 	     unless we have a rep clause, because we might be processing
+ 	     the REP part of a record with a variant part for which the
+ 	     variant part has a rep clause but not the fixed part, in
+ 	     which case this REP part may contain overlapping fields
+ 	     and thus needs to be treated like a union tyoe above, so
+ 	     use a MAX in that case.  Also, if this field is a variant
+ 	     part, we need to take into account the previous size in
+ 	     the case of empty variants.  */
+ 	  ada_size
+ 	    = merge_sizes (ada_size, pos, this_ada_size, rep_level > 0,
+ 			   variant_part);
+ 	  size
+ 	    = merge_sizes (size, pos, this_size, rep_level > 0, variant_part);
+ 	  break;
+ 
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+     }
+ 
+   if (code == QUAL_UNION_TYPE)
+     nreverse (field_list);
+ 
+   /* We need to set the regular sizes if REP_LEVEL is one.  */
+   if (rep_level == 1)
+     {
+       /* We round TYPE_SIZE and TYPE_SIZE_UNIT up to TYPE_ALIGN separately
+ 	 to avoid having very large masking constants in TYPE_SIZE_UNIT.  */
+       const unsigned int align = TYPE_ALIGN (record_type);
+ 
+       /* If this is a padding record, we never want to make the size smaller
+ 	 than what was specified in it, if any.  */
+       if (TYPE_IS_PADDING_P (record_type) && had_size)
+ 	size = TYPE_SIZE (record_type);
+       else
+ 	size = round_up (size, BITS_PER_UNIT);
+ 
+       TYPE_SIZE (record_type) = variable_size (round_up (size, align));
+ 
+       tree size_unit
+ 	= convert (sizetype,
+ 		   size_binop (EXACT_DIV_EXPR, size, bitsize_unit_node));
+       TYPE_SIZE_UNIT (record_type)
+ 	= variable_size (round_up (size_unit, align / BITS_PER_UNIT));
+     }
+ 
+   /* We need to set the Ada size if REP_LEVEL is zero or one.  */
+   if (rep_level < 2)
+     {
+       /* Now set any of the values we've just computed that apply.  */
+       if (!TYPE_FAT_POINTER_P (record_type)
+ 	  && !TYPE_CONTAINS_TEMPLATE_P (record_type))
+ 	SET_TYPE_ADA_SIZE (record_type, ada_size);
+     }
+ 
+   /* We need to set the mode if REP_LEVEL is one or two.  */
+   if (rep_level > 0)
+     {
+       compute_record_mode (record_type);
+       finish_bitfield_layout (record_type);
+     }
+ 
+   /* Reset the TYPE_MAX_ALIGN field since it's private to gigi.  */
+   TYPE_MAX_ALIGN (record_type) = 0;
+ 
+   if (debug_info_p)
+     rest_of_record_type_compilation (record_type);
+ }
+ 
+ /* Append PARALLEL_TYPE on the chain of parallel types of TYPE.  If
+    PARRALEL_TYPE has no context and its computation is not deferred yet, also
+    propagate TYPE's context to PARALLEL_TYPE's or defer its propagation to the
+    moment TYPE will get a context.  */
+ 
+ void
+ add_parallel_type (tree type, tree parallel_type)
+ {
+   tree decl = TYPE_STUB_DECL (type);
+ 
+   while (DECL_PARALLEL_TYPE (decl))
+     decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
+ 
+   SET_DECL_PARALLEL_TYPE (decl, parallel_type);
+ 
+   /* If PARALLEL_TYPE already has a context, we are done.  */
+   if (TYPE_CONTEXT (parallel_type))
+     return;
+ 
+   /* Otherwise, try to get one from TYPE's context.  If so, simply propagate
+      it to PARALLEL_TYPE.  */
+   if (TYPE_CONTEXT (type))
+     gnat_set_type_context (parallel_type, TYPE_CONTEXT (type));
+ 
+   /* Otherwise TYPE has not context yet.  We know it will have one thanks to
+      gnat_pushdecl and then its context will be propagated to PARALLEL_TYPE,
+      so we have nothing to do in this case.  */
+ }
+ 
+ /* Return true if TYPE has a parallel type.  */
+ 
+ static bool
+ has_parallel_type (tree type)
+ {
+   tree decl = TYPE_STUB_DECL (type);
+ 
+   return DECL_PARALLEL_TYPE (decl) != NULL_TREE;
+ }
+ 
+ /* Wrap up compilation of RECORD_TYPE, i.e. output additional debug info
+    associated with it.  It need not be invoked directly in most cases as
+    finish_record_type takes care of doing so.  */
+ 
+ void
+ rest_of_record_type_compilation (tree record_type)
+ {
+   bool var_size = false;
+   tree field;
+ 
+   /* If this is a padded type, the bulk of the debug info has already been
+      generated for the field's type.  */
+   if (TYPE_IS_PADDING_P (record_type))
+     return;
+ 
+   /* If the type already has a parallel type (XVS type), then we're done.  */
+   if (has_parallel_type (record_type))
+     return;
+ 
+   for (field = TYPE_FIELDS (record_type); field; field = DECL_CHAIN (field))
+     {
+       /* We need to make an XVE/XVU record if any field has variable size,
+ 	 whether or not the record does.  For example, if we have a union,
+ 	 it may be that all fields, rounded up to the alignment, have the
+ 	 same size, in which case we'll use that size.  But the debug
+ 	 output routines (except Dwarf2) won't be able to output the fields,
+ 	 so we need to make the special record.  */
+       if (TREE_CODE (DECL_SIZE (field)) != INTEGER_CST
+ 	  /* If a field has a non-constant qualifier, the record will have
+ 	     variable size too.  */
+ 	  || (TREE_CODE (record_type) == QUAL_UNION_TYPE
+ 	      && TREE_CODE (DECL_QUALIFIER (field)) != INTEGER_CST))
+ 	{
+ 	  var_size = true;
+ 	  break;
+ 	}
+     }
+ 
+   /* If this record type is of variable size, make a parallel record type that
+      will tell the debugger how the former is laid out (see exp_dbug.ads).  */
+   if (var_size && gnat_encodings == DWARF_GNAT_ENCODINGS_ALL)
+     {
+       tree new_record_type
+ 	= make_node (TREE_CODE (record_type) == QUAL_UNION_TYPE
+ 		     ? UNION_TYPE : TREE_CODE (record_type));
+       tree orig_name = TYPE_IDENTIFIER (record_type), new_name;
+       tree last_pos = bitsize_zero_node;
+ 
+       new_name
+ 	= concat_name (orig_name, TREE_CODE (record_type) == QUAL_UNION_TYPE
+ 				  ? "XVU" : "XVE");
+       TYPE_NAME (new_record_type) = new_name;
+       SET_TYPE_ALIGN (new_record_type, BIGGEST_ALIGNMENT);
+       TYPE_STUB_DECL (new_record_type)
+ 	= create_type_stub_decl (new_name, new_record_type);
+       DECL_IGNORED_P (TYPE_STUB_DECL (new_record_type))
+ 	= DECL_IGNORED_P (TYPE_STUB_DECL (record_type));
+       gnat_pushdecl (TYPE_STUB_DECL (new_record_type), Empty);
+       TYPE_SIZE (new_record_type) = size_int (TYPE_ALIGN (record_type));
+       TYPE_SIZE_UNIT (new_record_type)
+ 	= size_int (TYPE_ALIGN (record_type) / BITS_PER_UNIT);
+ 
+       /* Now scan all the fields, replacing each field with a new field
+ 	 corresponding to the new encoding.  */
+       for (tree old_field = TYPE_FIELDS (record_type);
+ 	   old_field;
+ 	   old_field = DECL_CHAIN (old_field))
+ 	{
+ 	  tree field_type = TREE_TYPE (old_field);
+ 	  tree field_name = DECL_NAME (old_field);
+ 	  tree curpos = fold_bit_position (old_field);
+ 	  tree pos, new_field;
+ 	  bool var = false;
+ 	  unsigned int align = 0;
+ 
+ 	  /* See how the position was modified from the last position.
+ 
+ 	     There are two basic cases we support: a value was added
+ 	     to the last position or the last position was rounded to
+ 	     a boundary and they something was added.  Check for the
+ 	     first case first.  If not, see if there is any evidence
+ 	     of rounding.  If so, round the last position and retry.
+ 
+ 	     If this is a union, the position can be taken as zero.  */
+ 	  if (TREE_CODE (new_record_type) == UNION_TYPE)
+ 	    pos = bitsize_zero_node;
+ 	  else
+ 	    pos = compute_related_constant (curpos, last_pos);
+ 
+ 	  if (pos)
+ 	    ;
+ 	  else if (TREE_CODE (curpos) == MULT_EXPR
+ 		   && tree_fits_uhwi_p (TREE_OPERAND (curpos, 1)))
+ 	    {
+ 	      tree offset = TREE_OPERAND (curpos, 0);
+ 	      align = tree_to_uhwi (TREE_OPERAND (curpos, 1));
+ 	      align = scale_by_factor_of (offset, align);
+ 	      last_pos = round_up (last_pos, align);
+ 	      pos = compute_related_constant (curpos, last_pos);
+ 	    }
+ 	  else if (TREE_CODE (curpos) == PLUS_EXPR
+ 		   && tree_fits_uhwi_p (TREE_OPERAND (curpos, 1))
+ 		   && TREE_CODE (TREE_OPERAND (curpos, 0)) == MULT_EXPR
+ 		   && tree_fits_uhwi_p
+ 		      (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1)))
+ 	    {
+ 	      tree offset = TREE_OPERAND (TREE_OPERAND (curpos, 0), 0);
+ 	      unsigned HOST_WIDE_INT addend
+ 	        = tree_to_uhwi (TREE_OPERAND (curpos, 1));
+ 	      align
+ 		= tree_to_uhwi (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1));
+ 	      align = scale_by_factor_of (offset, align);
+ 	      align = MIN (align, addend & -addend);
+ 	      last_pos = round_up (last_pos, align);
+ 	      pos = compute_related_constant (curpos, last_pos);
+ 	    }
+ 	  else
+ 	    {
+ 	      align = DECL_ALIGN (old_field);
+ 	      last_pos = round_up (last_pos, align);
+ 	      pos = compute_related_constant (curpos, last_pos);
+ 	    }
+ 
+ 	  /* See if this type is variable-sized and make a pointer type
+ 	     and indicate the indirection if so.  Beware that the debug
+ 	     back-end may adjust the position computed above according
+ 	     to the alignment of the field type, i.e. the pointer type
+ 	     in this case, if we don't preventively counter that.  */
+ 	  if (TREE_CODE (DECL_SIZE (old_field)) != INTEGER_CST)
+ 	    {
+ 	      field_type = copy_type (build_pointer_type (field_type));
+ 	      SET_TYPE_ALIGN (field_type, BITS_PER_UNIT);
+ 	      var = true;
+ 
+ 	      /* ??? Kludge to work around a bug in Workbench's debugger.  */
+ 	      if (align == 0)
+ 		{
+ 		  align = DECL_ALIGN (old_field);
+ 		  last_pos = round_up (last_pos, align);
+ 		  pos = compute_related_constant (curpos, last_pos);
+ 		}
+ 	    }
+ 
+ 	  /* If we can't compute a position, set it to zero.
+ 
+ 	     ??? We really should abort here, but it's too much work
+ 	     to get this correct for all cases.  */
+ 	  if (!pos)
+ 	    pos = bitsize_zero_node;
+ 
+ 	  /* Make a new field name, if necessary.  */
+ 	  if (var || align != 0)
+ 	    {
+ 	      char suffix[16];
+ 
+ 	      if (align != 0)
+ 		sprintf (suffix, "XV%c%u", var ? 'L' : 'A',
+ 			 align / BITS_PER_UNIT);
+ 	      else
+ 		strcpy (suffix, "XVL");
+ 
+ 	      field_name = concat_name (field_name, suffix);
+ 	    }
+ 
+ 	  new_field
+ 	    = create_field_decl (field_name, field_type, new_record_type,
+ 				 DECL_SIZE (old_field), pos, 0, 0);
+ 	  /* The specified position is not the actual position of the field
+ 	     but the gap with the previous field, so the computation of the
+ 	     bit-field status may be incorrect.  We adjust it manually to
+ 	     avoid generating useless attributes for the field in DWARF.  */
+ 	  if (DECL_SIZE (old_field) == TYPE_SIZE (field_type)
+ 	      && value_factor_p (pos, BITS_PER_UNIT))
+ 	    {
+ 	      DECL_BIT_FIELD (new_field) = 0;
+ 	      DECL_BIT_FIELD_TYPE (new_field) = NULL_TREE;
+ 	    }
+ 	  DECL_CHAIN (new_field) = TYPE_FIELDS (new_record_type);
+ 	  TYPE_FIELDS (new_record_type) = new_field;
+ 
+ 	  /* If old_field is a QUAL_UNION_TYPE, take its size as being
+ 	     zero.  The only time it's not the last field of the record
+ 	     is when there are other components at fixed positions after
+ 	     it (meaning there was a rep clause for every field) and we
+ 	     want to be able to encode them.  */
+ 	  last_pos = size_binop (PLUS_EXPR, curpos,
+ 				 (TREE_CODE (TREE_TYPE (old_field))
+ 				  == QUAL_UNION_TYPE)
+ 				 ? bitsize_zero_node
+ 				 : DECL_SIZE (old_field));
+ 	}
+ 
+       TYPE_FIELDS (new_record_type) = nreverse (TYPE_FIELDS (new_record_type));
+ 
+       add_parallel_type (record_type, new_record_type);
+     }
+ }
+ 
+ /* Utility function of above to merge LAST_SIZE, the previous size of a record
+    with FIRST_BIT and SIZE that describe a field.  If MAX is true, we take the
+    MAX of the end position of this field with LAST_SIZE.  In all other cases,
+    we use FIRST_BIT plus SIZE.  SPECIAL is true if it's for a QUAL_UNION_TYPE,
+    in which case we must look for COND_EXPRs and replace a value of zero with
+    the old size.  Return an expression for the size.  */
+ 
+ static tree
+ merge_sizes (tree last_size, tree first_bit, tree size, bool max, bool special)
+ {
+   tree type = TREE_TYPE (last_size);
+   tree new_size;
+ 
+   if (!special || TREE_CODE (size) != COND_EXPR)
+     {
+       new_size = size_binop (PLUS_EXPR, first_bit, size);
+       if (max)
+ 	new_size = size_binop (MAX_EXPR, last_size, new_size);
+     }
+ 
+   else
+     new_size = fold_build3 (COND_EXPR, type, TREE_OPERAND (size, 0),
+ 			    integer_zerop (TREE_OPERAND (size, 1))
+ 			    ? last_size : merge_sizes (last_size, first_bit,
+ 						       TREE_OPERAND (size, 1),
+ 						       max, special),
+ 			    integer_zerop (TREE_OPERAND (size, 2))
+ 			    ? last_size : merge_sizes (last_size, first_bit,
+ 						       TREE_OPERAND (size, 2),
+ 						       max, special));
+ 
+   /* We don't need any NON_VALUE_EXPRs and they can confuse us (especially
+      when fed through SUBSTITUTE_IN_EXPR) into thinking that a constant
+      size is not constant.  */
+   while (TREE_CODE (new_size) == NON_LVALUE_EXPR)
+     new_size = TREE_OPERAND (new_size, 0);
+ 
+   return new_size;
+ }
+ 
+ /* Convert the size expression EXPR to TYPE and fold the result.  */
+ 
+ static tree
+ fold_convert_size (tree type, tree expr)
+ {
+   /* We assume that size expressions do not wrap around.  */
+   if (TREE_CODE (expr) == MULT_EXPR || TREE_CODE (expr) == PLUS_EXPR)
+     return size_binop (TREE_CODE (expr),
+ 		       fold_convert_size (type, TREE_OPERAND (expr, 0)),
+ 		       fold_convert_size (type, TREE_OPERAND (expr, 1)));
+ 
+   return fold_convert (type, expr);
+ }
+ 
+ /* Return the bit position of FIELD, in bits from the start of the record,
+    and fold it as much as possible.  This is a tree of type bitsizetype.  */
+ 
+ static tree
+ fold_bit_position (const_tree field)
+ {
+   tree offset = fold_convert_size (bitsizetype, DECL_FIELD_OFFSET (field));
+   return size_binop (PLUS_EXPR, DECL_FIELD_BIT_OFFSET (field),
+  		     size_binop (MULT_EXPR, offset, bitsize_unit_node));
+ }
+ 
+ /* Utility function of above to see if OP0 and OP1, both of SIZETYPE, are
+    related by the addition of a constant.  Return that constant if so.  */
+ 
+ static tree
+ compute_related_constant (tree op0, tree op1)
+ {
+   tree factor, op0_var, op1_var, op0_cst, op1_cst, result;
+ 
+   if (TREE_CODE (op0) == MULT_EXPR
+       && TREE_CODE (op1) == MULT_EXPR
+       && TREE_CODE (TREE_OPERAND (op0, 1)) == INTEGER_CST
+       && TREE_OPERAND (op1, 1) == TREE_OPERAND (op0, 1))
+     {
+       factor = TREE_OPERAND (op0, 1);
+       op0 = TREE_OPERAND (op0, 0);
+       op1 = TREE_OPERAND (op1, 0);
+     }
+   else
+     factor = NULL_TREE;
+ 
+   op0_cst = split_plus (op0, &op0_var);
+   op1_cst = split_plus (op1, &op1_var);
+   result = size_binop (MINUS_EXPR, op0_cst, op1_cst);
+ 
+   if (operand_equal_p (op0_var, op1_var, 0))
+     return factor ? size_binop (MULT_EXPR, factor, result) : result;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Utility function of above to split a tree OP which may be a sum, into a
+    constant part, which is returned, and a variable part, which is stored
+    in *PVAR.  *PVAR may be bitsize_zero_node.  All operations must be of
+    bitsizetype.  */
+ 
+ static tree
+ split_plus (tree in, tree *pvar)
+ {
+   /* Strip conversions in order to ease the tree traversal and maximize the
+      potential for constant or plus/minus discovery.  We need to be careful
+      to always return and set *pvar to bitsizetype trees, but it's worth
+      the effort.  */
+   in = remove_conversions (in, false);
+ 
+   *pvar = convert (bitsizetype, in);
+ 
+   if (TREE_CODE (in) == INTEGER_CST)
+     {
+       *pvar = bitsize_zero_node;
+       return convert (bitsizetype, in);
+     }
+   else if (TREE_CODE (in) == PLUS_EXPR || TREE_CODE (in) == MINUS_EXPR)
+     {
+       tree lhs_var, rhs_var;
+       tree lhs_con = split_plus (TREE_OPERAND (in, 0), &lhs_var);
+       tree rhs_con = split_plus (TREE_OPERAND (in, 1), &rhs_var);
+ 
+       if (lhs_var == TREE_OPERAND (in, 0)
+ 	  && rhs_var == TREE_OPERAND (in, 1))
+ 	return bitsize_zero_node;
+ 
+       *pvar = size_binop (TREE_CODE (in), lhs_var, rhs_var);
+       return size_binop (TREE_CODE (in), lhs_con, rhs_con);
+     }
+   else
+     return bitsize_zero_node;
+ }
+ 
+ /* Return a copy of TYPE but safe to modify in any way.  */
+ 
+ tree
+ copy_type (tree type)
+ {
+   tree new_type = copy_node (type);
+ 
+   /* Unshare the language-specific data.  */
+   if (TYPE_LANG_SPECIFIC (type))
+     {
+       TYPE_LANG_SPECIFIC (new_type) = NULL;
+       SET_TYPE_LANG_SPECIFIC (new_type, GET_TYPE_LANG_SPECIFIC (type));
+     }
+ 
+   /* And the contents of the language-specific slot if needed.  */
+   if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
+       && TYPE_RM_VALUES (type))
+     {
+       TYPE_RM_VALUES (new_type) = NULL_TREE;
+       SET_TYPE_RM_SIZE (new_type, TYPE_RM_SIZE (type));
+       SET_TYPE_RM_MIN_VALUE (new_type, TYPE_RM_MIN_VALUE (type));
+       SET_TYPE_RM_MAX_VALUE (new_type, TYPE_RM_MAX_VALUE (type));
+     }
+ 
+   /* copy_node clears this field instead of copying it, because it is
+      aliased with TREE_CHAIN.  */
+   TYPE_STUB_DECL (new_type) = TYPE_STUB_DECL (type);
+ 
+   TYPE_POINTER_TO (new_type) = NULL_TREE;
+   TYPE_REFERENCE_TO (new_type) = NULL_TREE;
+   TYPE_MAIN_VARIANT (new_type) = new_type;
+   TYPE_NEXT_VARIANT (new_type) = NULL_TREE;
+   TYPE_CANONICAL (new_type) = new_type;
+ 
+   return new_type;
+ }
+ 
+ /* Return a subtype of sizetype with range MIN to MAX and whose
+    TYPE_INDEX_TYPE is INDEX.  GNAT_NODE is used for the position
+    of the associated TYPE_DECL.  */
+ 
+ tree
+ create_index_type (tree min, tree max, tree index, Node_Id gnat_node)
+ {
+   /* First build a type for the desired range.  */
+   tree type = build_nonshared_range_type (sizetype, min, max);
+ 
+   /* Then set the index type.  */
+   SET_TYPE_INDEX_TYPE (type, index);
+   create_type_decl (NULL_TREE, type, true, false, gnat_node);
+ 
+   return type;
+ }
+ 
+ /* Return a subtype of TYPE with range MIN to MAX.  If TYPE is NULL,
+    sizetype is used.  */
+ 
+ tree
+ create_range_type (tree type, tree min, tree max)
+ {
+   tree range_type;
+ 
+   if (!type)
+     type = sizetype;
+ 
+   /* First build a type with the base range.  */
+   range_type = build_nonshared_range_type (type, TYPE_MIN_VALUE (type),
+ 						 TYPE_MAX_VALUE (type));
+ 
+   /* Then set the actual range.  */
+   SET_TYPE_RM_MIN_VALUE (range_type, min);
+   SET_TYPE_RM_MAX_VALUE (range_type, max);
+ 
+   return range_type;
+ }
+ 
+ /* Return an extra subtype of TYPE with range MIN to MAX.  */
+ 
+ tree
+ create_extra_subtype (tree type, tree min, tree max)
+ {
+   const bool uns = TYPE_UNSIGNED (type);
+   const unsigned prec = TYPE_PRECISION (type);
+   tree subtype = uns ? make_unsigned_type (prec) : make_signed_type (prec);
+ 
+   TREE_TYPE (subtype) = type;
+   TYPE_EXTRA_SUBTYPE_P (subtype) = 1;
+ 
+   SET_TYPE_RM_MIN_VALUE (subtype, min);
+   SET_TYPE_RM_MAX_VALUE (subtype, max);
+ 
+   return subtype;
+ }
+ 
+ /* Return a TYPE_DECL node suitable for the TYPE_STUB_DECL field of TYPE.
+    NAME gives the name of the type to be used in the declaration.  */
+ 
+ tree
+ create_type_stub_decl (tree name, tree type)
+ {
+   tree type_decl = build_decl (input_location, TYPE_DECL, name, type);
+   DECL_ARTIFICIAL (type_decl) = 1;
+   TYPE_ARTIFICIAL (type) = 1;
+   return type_decl;
+ }
+ 
+ /* Return a TYPE_DECL node for TYPE.  NAME gives the name of the type to be
+    used in the declaration.  ARTIFICIAL_P is true if the declaration was
+    generated by the compiler.  DEBUG_INFO_P is true if we need to write
+    debug information about this type.  GNAT_NODE is used for the position
+    of the decl.  */
+ 
+ tree
+ create_type_decl (tree name, tree type, bool artificial_p, bool debug_info_p,
+ 		  Node_Id gnat_node)
+ {
+   enum tree_code code = TREE_CODE (type);
+   bool is_named
+     = TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL;
+   tree type_decl;
+ 
+   /* Only the builtin TYPE_STUB_DECL should be used for dummy types.  */
+   gcc_assert (!TYPE_IS_DUMMY_P (type));
+ 
+   /* If the type hasn't been named yet, we're naming it; preserve an existing
+      TYPE_STUB_DECL that has been attached to it for some purpose.  */
+   if (!is_named && TYPE_STUB_DECL (type))
+     {
+       type_decl = TYPE_STUB_DECL (type);
+       DECL_NAME (type_decl) = name;
+     }
+   else
+     type_decl = build_decl (input_location, TYPE_DECL, name, type);
+ 
+   DECL_ARTIFICIAL (type_decl) = artificial_p;
+   TYPE_ARTIFICIAL (type) = artificial_p;
+ 
+   /* Add this decl to the current binding level.  */
+   gnat_pushdecl (type_decl, gnat_node);
+ 
+   /* If we're naming the type, equate the TYPE_STUB_DECL to the name.  This
+      causes the name to be also viewed as a "tag" by the debug back-end, with
+      the advantage that no DW_TAG_typedef is emitted for artificial "tagged"
+      types in DWARF.
+ 
+      Note that if "type" is used as a DECL_ORIGINAL_TYPE, it may be referenced
+      from multiple contexts, and "type_decl" references a copy of it: in such a
+      case, do not mess TYPE_STUB_DECL: we do not want to re-use the TYPE_DECL
+      with the mechanism above.  */
+   if (!is_named && type != DECL_ORIGINAL_TYPE (type_decl))
+     TYPE_STUB_DECL (type) = type_decl;
+ 
+   /* Do not generate debug info for UNCONSTRAINED_ARRAY_TYPE that the
+      back-end doesn't support, and for others if we don't need to.  */
+   if (code == UNCONSTRAINED_ARRAY_TYPE || !debug_info_p)
+     DECL_IGNORED_P (type_decl) = 1;
+ 
+   return type_decl;
+ }
+ 
+ /* Return a VAR_DECL or CONST_DECL node.
+ 
+    NAME gives the name of the variable.  ASM_NAME is its assembler name
+    (if provided).  TYPE is its data type (a GCC ..._TYPE node).  INIT is
+    the GCC tree for an optional initial expression; NULL_TREE if none.
+ 
+    CONST_FLAG is true if this variable is constant, in which case we might
+    return a CONST_DECL node unless CONST_DECL_ALLOWED_P is false.
+ 
+    PUBLIC_FLAG is true if this is for a reference to a public entity or for a
+    definition to be made visible outside of the current compilation unit, for
+    instance variable definitions in a package specification.
+ 
+    EXTERN_FLAG is true when processing an external variable declaration (as
+    opposed to a definition: no storage is to be allocated for the variable).
+ 
+    STATIC_FLAG is only relevant when not at top level and indicates whether
+    to always allocate storage to the variable.
+ 
+    VOLATILE_FLAG is true if this variable is declared as volatile.
+ 
+    ARTIFICIAL_P is true if the variable was generated by the compiler.
+ 
+    DEBUG_INFO_P is true if we need to write debug information for it.
+ 
+    ATTR_LIST is the list of attributes to be attached to the variable.
+ 
+    GNAT_NODE is used for the position of the decl.  */
+ 
+ tree
+ create_var_decl (tree name, tree asm_name, tree type, tree init,
+ 		 bool const_flag, bool public_flag, bool extern_flag,
+ 		 bool static_flag, bool volatile_flag, bool artificial_p,
+ 		 bool debug_info_p, struct attrib *attr_list,
+ 		 Node_Id gnat_node, bool const_decl_allowed_p)
+ {
+   /* Whether the object has static storage duration, either explicitly or by
+      virtue of being declared at the global level.  */
+   const bool static_storage = static_flag || global_bindings_p ();
+ 
+   /* Whether the initializer is constant: for an external object or an object
+      with static storage duration, we check that the initializer is a valid
+      constant expression for initializing a static variable; otherwise, we
+      only check that it is constant.  */
+   const bool init_const
+     = (init
+        && gnat_types_compatible_p (type, TREE_TYPE (init))
+        && (extern_flag || static_storage
+ 	   ? initializer_constant_valid_p (init, TREE_TYPE (init))
+ 	     != NULL_TREE
+ 	   : TREE_CONSTANT (init)));
+ 
+   /* Whether we will make TREE_CONSTANT the DECL we produce here, in which
+      case the initializer may be used in lieu of the DECL node (as done in
+      Identifier_to_gnu).  This is useful to prevent the need of elaboration
+      code when an identifier for which such a DECL is made is in turn used
+      as an initializer.  We used to rely on CONST_DECL vs VAR_DECL for this,
+      but extra constraints apply to this choice (see below) and they are not
+      relevant to the distinction we wish to make.  */
+   const bool constant_p = const_flag && init_const;
+ 
+   /* The actual DECL node.  CONST_DECL was initially intended for enumerals
+      and may be used for scalars in general but not for aggregates.  */
+   tree var_decl
+     = build_decl (input_location,
+ 		  (constant_p
+ 		   && const_decl_allowed_p
+ 		   && !AGGREGATE_TYPE_P (type) ? CONST_DECL : VAR_DECL),
+ 		  name, type);
+ 
+   /* Detect constants created by the front-end to hold 'reference to function
+      calls for stabilization purposes.  This is needed for renaming.  */
+   if (const_flag && init && POINTER_TYPE_P (type))
+     {
+       tree inner = init;
+       if (TREE_CODE (inner) == COMPOUND_EXPR)
+ 	inner = TREE_OPERAND (inner, 1);
+       inner = remove_conversions (inner, true);
+       if (TREE_CODE (inner) == ADDR_EXPR
+ 	  && ((TREE_CODE (TREE_OPERAND (inner, 0)) == CALL_EXPR
+ 	       && !call_is_atomic_load (TREE_OPERAND (inner, 0)))
+ 	      || (TREE_CODE (TREE_OPERAND (inner, 0)) == VAR_DECL
+ 		  && DECL_RETURN_VALUE_P (TREE_OPERAND (inner, 0)))))
+ 	DECL_RETURN_VALUE_P (var_decl) = 1;
+     }
+ 
+   /* If this is external, throw away any initializations (they will be done
+      elsewhere) unless this is a constant for which we would like to remain
+      able to get the initializer.  If we are defining a global here, leave a
+      constant initialization and save any variable elaborations for the
+      elaboration routine.  If we are just annotating types, throw away the
+      initialization if it isn't a constant.  */
+   if ((extern_flag && !constant_p)
+       || (type_annotate_only && init && !TREE_CONSTANT (init)))
+     init = NULL_TREE;
+ 
+   /* At the global level, a non-constant initializer generates elaboration
+      statements.  Check that such statements are allowed, that is to say,
+      not violating a No_Elaboration_Code restriction.  */
+   if (init && !init_const && global_bindings_p ())
+     Check_Elaboration_Code_Allowed (gnat_node);
+ 
+   /* Attach the initializer, if any.  */
+   DECL_INITIAL (var_decl) = init;
+ 
+   /* Directly set some flags.  */
+   DECL_ARTIFICIAL (var_decl) = artificial_p;
+   DECL_EXTERNAL (var_decl) = extern_flag;
+ 
+   TREE_CONSTANT (var_decl) = constant_p;
+   TREE_READONLY (var_decl) = const_flag;
+ 
+   /* The object is public if it is external or if it is declared public
+      and has static storage duration.  */
+   TREE_PUBLIC (var_decl) = extern_flag || (public_flag && static_storage);
+ 
+   /* We need to allocate static storage for an object with static storage
+      duration if it isn't external.  */
+   TREE_STATIC (var_decl) = !extern_flag && static_storage;
+ 
+   TREE_SIDE_EFFECTS (var_decl)
+     = TREE_THIS_VOLATILE (var_decl)
+     = TYPE_VOLATILE (type) | volatile_flag;
+ 
+   if (TREE_SIDE_EFFECTS (var_decl))
+     TREE_ADDRESSABLE (var_decl) = 1;
+ 
+   /* Ada doesn't feature Fortran-like COMMON variables so we shouldn't
+      try to fiddle with DECL_COMMON.  However, on platforms that don't
+      support global BSS sections, uninitialized global variables would
+      go in DATA instead, thus increasing the size of the executable.  */
+   if (!flag_no_common
+       && TREE_CODE (var_decl) == VAR_DECL
+       && TREE_PUBLIC (var_decl)
+       && !have_global_bss_p ())
+     DECL_COMMON (var_decl) = 1;
+ 
+   /* Do not emit debug info if not requested, or for an external constant whose
+      initializer is not absolute because this would require a global relocation
+      in a read-only section which runs afoul of the PE-COFF run-time relocation
+      mechanism.  */
+   if (!debug_info_p
+       || (extern_flag
+ 	  && constant_p
+ 	  && init
+ 	  && initializer_constant_valid_p (init, TREE_TYPE (init))
+ 	     != null_pointer_node))
+     DECL_IGNORED_P (var_decl) = 1;
+ 
+   /* ??? Some attributes cannot be applied to CONST_DECLs.  */
+   if (TREE_CODE (var_decl) == VAR_DECL)
+     process_attributes (&var_decl, &attr_list, true, gnat_node);
+ 
+   /* Add this decl to the current binding level.  */
+   gnat_pushdecl (var_decl, gnat_node);
+ 
+   if (TREE_CODE (var_decl) == VAR_DECL && asm_name)
+     {
+       /* Let the target mangle the name if this isn't a verbatim asm.  */
+       if (*IDENTIFIER_POINTER (asm_name) != '*')
+ 	asm_name = targetm.mangle_decl_assembler_name (var_decl, asm_name);
+ 
+       SET_DECL_ASSEMBLER_NAME (var_decl, asm_name);
+     }
+ 
+   return var_decl;
+ }
+ 
+ /* Return true if TYPE, an aggregate type, contains (or is) an array.  */
+ 
+ static bool
+ aggregate_type_contains_array_p (tree type)
+ {
+   switch (TREE_CODE (type))
+     {
+     case RECORD_TYPE:
+     case UNION_TYPE:
+     case QUAL_UNION_TYPE:
+       {
+ 	tree field;
+ 	for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+ 	  if (AGGREGATE_TYPE_P (TREE_TYPE (field))
+ 	      && aggregate_type_contains_array_p (TREE_TYPE (field)))
+ 	    return true;
+ 	return false;
+       }
+ 
+     case ARRAY_TYPE:
+       return true;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ }
+ 
+ /* Return true if TYPE is a type with variable size or a padding type with a
+    field of variable size or a record that has a field with such a type.  */
+ 
+ bool
+ type_has_variable_size (tree type)
+ {
+   tree field;
+ 
+   if (!TREE_CONSTANT (TYPE_SIZE (type)))
+     return true;
+ 
+   if (TYPE_IS_PADDING_P (type)
+       && !TREE_CONSTANT (DECL_SIZE (TYPE_FIELDS (type))))
+     return true;
+ 
+   if (!RECORD_OR_UNION_TYPE_P (type))
+     return false;
+ 
+   for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+     if (type_has_variable_size (TREE_TYPE (field)))
+       return true;
+ 
+   return false;
+ }
+ 
+ /* Return a FIELD_DECL node.  NAME is the field's name, TYPE is its type and
+    RECORD_TYPE is the type of the enclosing record.  If SIZE is nonzero, it
+    is the specified size of the field.  If POS is nonzero, it is the bit
+    position.  PACKED is 1 if the enclosing record is packed, -1 if it has
+    Component_Alignment of Storage_Unit.  If ADDRESSABLE is nonzero, it
+    means we are allowed to take the address of the field; if it is negative,
+    we should not make a bitfield, which is used by make_aligning_type.  */
+ 
+ tree
+ create_field_decl (tree name, tree type, tree record_type, tree size, tree pos,
+ 		   int packed, int addressable)
+ {
+   tree field_decl = build_decl (input_location, FIELD_DECL, name, type);
+ 
+   DECL_CONTEXT (field_decl) = record_type;
+   TREE_READONLY (field_decl) = TYPE_READONLY (type);
+ 
+   /* If a size is specified, use it.  Otherwise, if the record type is packed
+      compute a size to use, which may differ from the object's natural size.
+      We always set a size in this case to trigger the checks for bitfield
+      creation below, which is typically required when no position has been
+      specified.  */
+   if (size)
+     size = convert (bitsizetype, size);
+   else if (packed == 1)
+     {
+       size = rm_size (type);
+       if (TYPE_MODE (type) == BLKmode)
+ 	size = round_up (size, BITS_PER_UNIT);
+     }
+ 
+   /* If we may, according to ADDRESSABLE, then make a bitfield when the size
+      is specified for two reasons: first, when it differs from the natural
+      size; second, when the alignment is insufficient.
+ 
+      We never make a bitfield if the type of the field has a nonconstant size,
+      because no such entity requiring bitfield operations should reach here.
+ 
+      We do *preventively* make a bitfield when there might be the need for it
+      but we don't have all the necessary information to decide, as is the case
+      of a field in a packed record.
+ 
+      We also don't look at STRICT_ALIGNMENT here, and rely on later processing
+      in layout_decl or finish_record_type to clear the bit_field indication if
+      it is in fact not needed.  */
+   if (addressable >= 0
+       && size
+       && TREE_CODE (size) == INTEGER_CST
+       && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
+       && (packed
+ 	  || !tree_int_cst_equal (size, TYPE_SIZE (type))
+ 	  || (pos && !value_factor_p (pos, TYPE_ALIGN (type)))
+ 	  || (TYPE_ALIGN (record_type)
+ 	      && TYPE_ALIGN (record_type) < TYPE_ALIGN (type))))
+     {
+       DECL_BIT_FIELD (field_decl) = 1;
+       DECL_SIZE (field_decl) = size;
+       if (!packed && !pos)
+ 	{
+ 	  if (TYPE_ALIGN (record_type)
+ 	      && TYPE_ALIGN (record_type) < TYPE_ALIGN (type))
+ 	    SET_DECL_ALIGN (field_decl, TYPE_ALIGN (record_type));
+ 	  else
+ 	    SET_DECL_ALIGN (field_decl, TYPE_ALIGN (type));
+ 	}
+     }
+ 
+   DECL_PACKED (field_decl) = pos ? DECL_BIT_FIELD (field_decl) : packed;
+ 
+   /* If FIELD_TYPE has BLKmode, we must ensure this is aligned to at least
+      a byte boundary since GCC cannot handle less aligned BLKmode bitfields.
+      Likewise if it has a variable size and no specified position because
+      variable-sized objects need to be aligned to at least a byte boundary.
+      Likewise for an aggregate without specified position that contains an
+      array because, in this case, slices of variable length of this array
+      must be handled by GCC and have variable size.  */
+   if (packed && (TYPE_MODE (type) == BLKmode
+ 		 || (!pos && type_has_variable_size (type))
+ 		 || (!pos
+ 		     && AGGREGATE_TYPE_P (type)
+ 		     && aggregate_type_contains_array_p (type))))
+     SET_DECL_ALIGN (field_decl, BITS_PER_UNIT);
+ 
+   /* Bump the alignment if need be, either for bitfield/packing purposes or
+      to satisfy the type requirements if no such considerations apply.  When
+      we get the alignment from the type, indicate if this is from an explicit
+      user request, which prevents stor-layout from lowering it later on.  */
+   else
+     {
+       const unsigned int field_align
+ 	= DECL_BIT_FIELD (field_decl)
+ 	  ? 1
+ 	  : packed
+ 	    ? BITS_PER_UNIT
+ 	    : 0;
+ 
+       if (field_align > DECL_ALIGN (field_decl))
+ 	SET_DECL_ALIGN (field_decl, field_align);
+       else if (!field_align && TYPE_ALIGN (type) > DECL_ALIGN (field_decl))
+ 	{
+ 	  SET_DECL_ALIGN (field_decl, TYPE_ALIGN (type));
+ 	  DECL_USER_ALIGN (field_decl) = TYPE_USER_ALIGN (type);
+ 	}
+     }
+ 
+   if (pos)
+     {
+       /* We need to pass in the alignment the DECL is known to have.
+ 	 This is the lowest-order bit set in POS, but no more than
+ 	 the alignment of the record, if one is specified.  Note
+ 	 that an alignment of 0 is taken as infinite.  */
+       unsigned int known_align;
+ 
+       if (tree_fits_uhwi_p (pos))
+ 	known_align = tree_to_uhwi (pos) & -tree_to_uhwi (pos);
+       else
+ 	known_align = BITS_PER_UNIT;
+ 
+       if (TYPE_ALIGN (record_type)
+ 	  && (known_align == 0 || known_align > TYPE_ALIGN (record_type)))
+ 	known_align = TYPE_ALIGN (record_type);
+ 
+       layout_decl (field_decl, known_align);
+       SET_DECL_OFFSET_ALIGN (field_decl,
+ 			     tree_fits_uhwi_p (pos)
+ 			     ? BIGGEST_ALIGNMENT : BITS_PER_UNIT);
+       pos_from_bit (&DECL_FIELD_OFFSET (field_decl),
+ 		    &DECL_FIELD_BIT_OFFSET (field_decl),
+ 		    DECL_OFFSET_ALIGN (field_decl), pos);
+     }
+ 
+   /* In addition to what our caller says, claim the field is addressable if we
+      know that its type is not suitable.
+ 
+      The field may also be "technically" nonaddressable, meaning that even if
+      we attempt to take the field's address we will actually get the address
+      of a copy.  This is the case for true bitfields, but the DECL_BIT_FIELD
+      value we have at this point is not accurate enough, so we don't account
+      for this here and let finish_record_type decide.  */
+   if (!addressable && !type_for_nonaliased_component_p (type))
+     addressable = 1;
+ 
+   /* Note that there is a trade-off in making a field nonaddressable because
+      this will cause type-based alias analysis to use the same alias set for
+      accesses to the field as for accesses to the whole record: while doing
+      so will make it more likely to disambiguate accesses to other objects
+      and accesses to the field, it will make it less likely to disambiguate
+      accesses to the other fields of the record and accesses to the field.
+      If the record is fully static, then the trade-off is irrelevant since
+      the fields of the record can always be disambiguated by their offsets
+      but, if the record is dynamic, then it can become problematic.  */
+   DECL_NONADDRESSABLE_P (field_decl) = !addressable;
+ 
+   return field_decl;
+ }
+ 
+ /* Return a PARM_DECL node with NAME and TYPE.  */
+ 
+ tree
+ create_param_decl (tree name, tree type)
+ {
+   tree param_decl = build_decl (input_location, PARM_DECL, name, type);
+ 
+   /* Honor TARGET_PROMOTE_PROTOTYPES like the C compiler, as not doing so
+      can lead to various ABI violations.  */
+   if (targetm.calls.promote_prototypes (NULL_TREE)
+       && INTEGRAL_TYPE_P (type)
+       && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
+     {
+       /* We have to be careful about biased types here.  Make a subtype
+ 	 of integer_type_node with the proper biasing.  */
+       if (TREE_CODE (type) == INTEGER_TYPE
+ 	  && TYPE_BIASED_REPRESENTATION_P (type))
+ 	{
+ 	  tree subtype
+ 	    = make_unsigned_type (TYPE_PRECISION (integer_type_node));
+ 	  TREE_TYPE (subtype) = integer_type_node;
+ 	  TYPE_BIASED_REPRESENTATION_P (subtype) = 1;
+ 	  SET_TYPE_RM_MIN_VALUE (subtype, TYPE_MIN_VALUE (type));
+ 	  SET_TYPE_RM_MAX_VALUE (subtype, TYPE_MAX_VALUE (type));
+ 	  type = subtype;
+ 	}
+       else
+ 	type = integer_type_node;
+     }
+ 
+   DECL_ARG_TYPE (param_decl) = type;
+   return param_decl;
+ }
+ 
+ /* Process the attributes in ATTR_LIST for NODE, which is either a DECL or
+    a TYPE.  If IN_PLACE is true, the tree pointed to by NODE should not be
+    changed.  GNAT_NODE is used for the position of error messages.  */
+ 
+ void
+ process_attributes (tree *node, struct attrib **attr_list, bool in_place,
+ 		    Node_Id gnat_node)
+ {
+   struct attrib *attr;
+ 
+   for (attr = *attr_list; attr; attr = attr->next)
+     switch (attr->type)
+       {
+       case ATTR_MACHINE_ATTRIBUTE:
+ 	Sloc_to_locus (Sloc (gnat_node), &input_location);
+ 	decl_attributes (node, tree_cons (attr->name, attr->args, NULL_TREE),
+ 			 in_place ? ATTR_FLAG_TYPE_IN_PLACE : 0);
+ 	break;
+ 
+       case ATTR_LINK_ALIAS:
+         if (!DECL_EXTERNAL (*node))
+ 	  {
+ 	    TREE_STATIC (*node) = 1;
+ 	    assemble_alias (*node, attr->name);
+ 	  }
+ 	break;
+ 
+       case ATTR_WEAK_EXTERNAL:
+ 	if (SUPPORTS_WEAK)
+ 	  declare_weak (*node);
+ 	else
+ 	  post_error ("?weak declarations not supported on this target",
+ 		      attr->error_point);
+ 	break;
+ 
+       case ATTR_LINK_SECTION:
+ 	if (targetm_common.have_named_sections)
+ 	  {
+ 	    set_decl_section_name (*node, IDENTIFIER_POINTER (attr->name));
+ 	    DECL_COMMON (*node) = 0;
+ 	  }
+ 	else
+ 	  post_error ("?section attributes are not supported for this target",
+ 		      attr->error_point);
+ 	break;
+ 
+       case ATTR_LINK_CONSTRUCTOR:
+ 	DECL_STATIC_CONSTRUCTOR (*node) = 1;
+ 	TREE_USED (*node) = 1;
+ 	break;
+ 
+       case ATTR_LINK_DESTRUCTOR:
+ 	DECL_STATIC_DESTRUCTOR (*node) = 1;
+ 	TREE_USED (*node) = 1;
+ 	break;
+ 
+       case ATTR_THREAD_LOCAL_STORAGE:
+ 	set_decl_tls_model (*node, decl_default_tls_model (*node));
+ 	DECL_COMMON (*node) = 0;
+ 	break;
+       }
+ 
+   *attr_list = NULL;
+ }
+ 
+ /* Return true if VALUE is a known to be a multiple of FACTOR, which must be
+    a power of 2. */
+ 
+ bool
+ value_factor_p (tree value, unsigned HOST_WIDE_INT factor)
+ {
+   gcc_checking_assert (pow2p_hwi (factor));
+ 
+   if (tree_fits_uhwi_p (value))
+     return (tree_to_uhwi (value) & (factor - 1)) == 0;
+ 
+   if (TREE_CODE (value) == MULT_EXPR)
+     return (value_factor_p (TREE_OPERAND (value, 0), factor)
+             || value_factor_p (TREE_OPERAND (value, 1), factor));
+ 
+   return false;
+ }
+ 
+ /* Defer the initialization of DECL's DECL_CONTEXT attribute, scheduling to
+    feed it with the elaboration of GNAT_SCOPE.  */
+ 
+ static struct deferred_decl_context_node *
+ add_deferred_decl_context (tree decl, Entity_Id gnat_scope, int force_global)
+ {
+   struct deferred_decl_context_node *new_node;
+ 
+   new_node
+     = (struct deferred_decl_context_node * ) xmalloc (sizeof (*new_node));
+   new_node->decl = decl;
+   new_node->gnat_scope = gnat_scope;
+   new_node->force_global = force_global;
+   new_node->types.create (1);
+   new_node->next = deferred_decl_context_queue;
+   deferred_decl_context_queue = new_node;
+   return new_node;
+ }
+ 
+ /* Defer the initialization of TYPE's TYPE_CONTEXT attribute, scheduling to
+    feed it with the DECL_CONTEXT computed as part of N as soon as it is
+    computed.  */
+ 
+ static void
+ add_deferred_type_context (struct deferred_decl_context_node *n, tree type)
+ {
+   n->types.safe_push (type);
+ }
+ 
+ /* Get the GENERIC node corresponding to GNAT_SCOPE, if available.  Return
+    NULL_TREE if it is not available.  */
+ 
+ static tree
+ compute_deferred_decl_context (Entity_Id gnat_scope)
+ {
+   tree context;
+ 
+   if (present_gnu_tree (gnat_scope))
+     context = get_gnu_tree (gnat_scope);
+   else
+     return NULL_TREE;
+ 
+   if (TREE_CODE (context) == TYPE_DECL)
+     {
+       tree context_type = TREE_TYPE (context);
+ 
+       /* Skip dummy types: only the final ones can appear in the context
+ 	 chain.  */
+       if (TYPE_DUMMY_P (context_type))
+ 	return NULL_TREE;
+ 
+       /* ..._TYPE nodes are more useful than TYPE_DECL nodes in the context
+ 	 chain.  */
+       else
+ 	context = context_type;
+     }
+ 
+   return context;
+ }
+ 
+ /* Try to process all deferred nodes in the queue.  Keep in the queue the ones
+    that cannot be processed yet, remove the other ones.  If FORCE is true,
+    force the processing for all nodes, use the global context when nodes don't
+    have a GNU translation.  */
+ 
+ void
+ process_deferred_decl_context (bool force)
+ {
+   struct deferred_decl_context_node **it = &deferred_decl_context_queue;
+   struct deferred_decl_context_node *node;
+ 
+   while (*it)
+     {
+       bool processed = false;
+       tree context = NULL_TREE;
+       Entity_Id gnat_scope;
+ 
+       node = *it;
+ 
+       /* If FORCE, get the innermost elaborated scope.  Otherwise, just try to
+ 	 get the first scope.  */
+       gnat_scope = node->gnat_scope;
+       while (Present (gnat_scope))
+ 	{
+ 	  context = compute_deferred_decl_context (gnat_scope);
+ 	  if (!force || context)
+ 	    break;
+ 	  gnat_scope = get_debug_scope (gnat_scope, NULL);
+ 	}
+ 
+       /* Imported declarations must not be in a local context (i.e. not inside
+ 	 a function).  */
+       if (context && node->force_global > 0)
+ 	{
+ 	  tree ctx = context;
+ 
+ 	  while (ctx)
+ 	    {
+ 	      gcc_assert (TREE_CODE (ctx) != FUNCTION_DECL);
+ 	      ctx = DECL_P (ctx) ? DECL_CONTEXT (ctx) : TYPE_CONTEXT (ctx);
+ 	    }
+ 	}
+ 
+       /* If FORCE, we want to get rid of all nodes in the queue: in case there
+ 	 was no elaborated scope, use the global context.  */
+       if (force && !context)
+ 	context = get_global_context ();
+ 
+       if (context)
+ 	{
+ 	  tree t;
+ 	  int i;
+ 
+ 	  DECL_CONTEXT (node->decl) = context;
+ 
+ 	  /* Propagate it to the TYPE_CONTEXT attributes of the requested
+ 	     ..._TYPE nodes.  */
+ 	  FOR_EACH_VEC_ELT (node->types, i, t)
+ 	    {
+ 	      gnat_set_type_context (t, context);
+ 	    }
+ 	  processed = true;
+ 	}
+ 
+       /* If this node has been successfuly processed, remove it from the
+ 	 queue.  Then move to the next node.  */
+       if (processed)
+ 	{
+ 	  *it = node->next;
+ 	  node->types.release ();
+ 	  free (node);
+ 	}
+       else
+ 	it = &node->next;
+     }
+ }
+ 
+ /* Return VALUE scaled by the biggest power-of-2 factor of EXPR.  */
+ 
+ static unsigned int
+ scale_by_factor_of (tree expr, unsigned int value)
+ {
+   unsigned HOST_WIDE_INT addend = 0;
+   unsigned HOST_WIDE_INT factor = 1;
+ 
+   /* Peel conversions around EXPR and try to extract bodies from function
+      calls: it is possible to get the scale factor from size functions.  */
+   expr = remove_conversions (expr, true);
+   if (TREE_CODE (expr) == CALL_EXPR)
+     expr = maybe_inline_call_in_expr (expr);
+ 
+   /* Sometimes we get PLUS_EXPR (BIT_AND_EXPR (..., X), Y), where Y is a
+      multiple of the scale factor we are looking for.  */
+   if (TREE_CODE (expr) == PLUS_EXPR
+       && TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST
+       && tree_fits_uhwi_p (TREE_OPERAND (expr, 1)))
+     {
+       addend = TREE_INT_CST_LOW (TREE_OPERAND (expr, 1));
+       expr = TREE_OPERAND (expr, 0);
+     }
+ 
+   /* An expression which is a bitwise AND with a mask has a power-of-2 factor
+      corresponding to the number of trailing zeros of the mask.  */
+   if (TREE_CODE (expr) == BIT_AND_EXPR
+       && TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST)
+     {
+       unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (TREE_OPERAND (expr, 1));
+       unsigned int i = 0;
+ 
+       while ((mask & 1) == 0 && i < HOST_BITS_PER_WIDE_INT)
+ 	{
+ 	  mask >>= 1;
+ 	  factor *= 2;
+ 	  i++;
+ 	}
+     }
+ 
+   /* If the addend is not a multiple of the factor we found, give up.  In
+      theory we could find a smaller common factor but it's useless for our
+      needs.  This situation arises when dealing with a field F1 with no
+      alignment requirement but that is following a field F2 with such
+      requirements.  As long as we have F2's offset, we don't need alignment
+      information to compute F1's.  */
+   if (addend % factor != 0)
+     factor = 1;
+ 
+   return factor * value;
+ }
+ 
+ /* Return a LABEL_DECL with NAME.  GNAT_NODE is used for the position of
+    the decl.  */
+ 
+ tree
+ create_label_decl (tree name, Node_Id gnat_node)
+ {
+   tree label_decl
+     = build_decl (input_location, LABEL_DECL, name, void_type_node);
+ 
+   SET_DECL_MODE (label_decl, VOIDmode);
+ 
+   /* Add this decl to the current binding level.  */
+   gnat_pushdecl (label_decl, gnat_node);
+ 
+   return label_decl;
+ }
+ 
+ /* Return a FUNCTION_DECL node.  NAME is the name of the subprogram, ASM_NAME
+    its assembler name, TYPE its type (a FUNCTION_TYPE or METHOD_TYPE node),
+    PARAM_DECL_LIST the list of its parameters (a list of PARM_DECL nodes
+    chained through the DECL_CHAIN field).
+ 
+    INLINE_STATUS describes the inline flags to be set on the FUNCTION_DECL.
+ 
+    PUBLIC_FLAG is true if this is for a reference to a public entity or for a
+    definition to be made visible outside of the current compilation unit.
+ 
+    EXTERN_FLAG is true when processing an external subprogram declaration.
+ 
+    ARTIFICIAL_P is true if the subprogram was generated by the compiler.
+ 
+    DEBUG_INFO_P is true if we need to write debug information for it.
+ 
+    DEFINITION is true if the subprogram is to be considered as a definition.
+ 
+    ATTR_LIST is the list of attributes to be attached to the subprogram.
+ 
+    GNAT_NODE is used for the position of the decl.  */
+ 
+ tree
+ create_subprog_decl (tree name, tree asm_name, tree type, tree param_decl_list,
+ 		     enum inline_status_t inline_status, bool public_flag,
+ 		     bool extern_flag, bool artificial_p, bool debug_info_p,
+ 		     bool definition, struct attrib *attr_list,
+ 		     Node_Id gnat_node)
+ {
+   tree subprog_decl = build_decl (input_location, FUNCTION_DECL, name, type);
+   DECL_ARGUMENTS (subprog_decl) = param_decl_list;
+ 
+   DECL_ARTIFICIAL (subprog_decl) = artificial_p;
+   DECL_EXTERNAL (subprog_decl) = extern_flag;
+   DECL_FUNCTION_IS_DEF (subprog_decl) = definition;
+   DECL_IGNORED_P (subprog_decl) = !debug_info_p;
+   TREE_PUBLIC (subprog_decl) = public_flag;
+ 
+   switch (inline_status)
+     {
+     case is_suppressed:
+       DECL_UNINLINABLE (subprog_decl) = 1;
+       break;
+ 
+     case is_default:
+       break;
+ 
+     case is_required:
+       if (Back_End_Inlining)
+ 	{
+ 	  decl_attributes (&subprog_decl,
+ 			   tree_cons (get_identifier ("always_inline"),
+ 				      NULL_TREE, NULL_TREE),
+ 			   ATTR_FLAG_TYPE_IN_PLACE);
+ 
+ 	  /* Inline_Always guarantees that every direct call is inlined and
+ 	     that there is no indirect reference to the subprogram, so the
+ 	     instance in the original package (as well as its clones in the
+ 	     client packages created for inter-unit inlining) can be made
+ 	     private, which causes the out-of-line body to be eliminated.  */
+ 	  TREE_PUBLIC (subprog_decl) = 0;
+ 	}
+ 
+       /* ... fall through ... */
+ 
+     case is_prescribed:
+       DECL_DISREGARD_INLINE_LIMITS (subprog_decl) = 1;
+ 
+       /* ... fall through ... */
+ 
+     case is_requested:
+       DECL_DECLARED_INLINE_P (subprog_decl) = 1;
+       if (!Debug_Generated_Code)
+ 	DECL_NO_INLINE_WARNING_P (subprog_decl) = artificial_p;
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   process_attributes (&subprog_decl, &attr_list, true, gnat_node);
+ 
+   /* Once everything is processed, finish the subprogram declaration.  */
+   finish_subprog_decl (subprog_decl, asm_name, type);
+ 
+   /* Add this decl to the current binding level.  */
+   gnat_pushdecl (subprog_decl, gnat_node);
+ 
+   /* Output the assembler code and/or RTL for the declaration.  */
+   rest_of_decl_compilation (subprog_decl, global_bindings_p (), 0);
+ 
+   return subprog_decl;
+ }
+ 
+ /* Given a subprogram declaration DECL, its assembler name and its type,
+    finish constructing the subprogram declaration from ASM_NAME and TYPE.  */
+ 
+ void
+ finish_subprog_decl (tree decl, tree asm_name, tree type)
+ {
+   /* DECL_ARGUMENTS is set by the caller, but not its context.  */
+   for (tree param_decl = DECL_ARGUMENTS (decl);
+        param_decl;
+        param_decl = DECL_CHAIN (param_decl))
+     DECL_CONTEXT (param_decl) = decl;
+ 
+   tree result_decl
+     = build_decl (DECL_SOURCE_LOCATION (decl), RESULT_DECL, NULL_TREE,
+ 		  TREE_TYPE (type));
+ 
+   DECL_ARTIFICIAL (result_decl) = 1;
+   DECL_IGNORED_P (result_decl) = 1;
+   DECL_CONTEXT (result_decl) = decl;
+   DECL_BY_REFERENCE (result_decl) = TREE_ADDRESSABLE (type);
+   DECL_RESULT (decl) = result_decl;
+ 
+   /* Propagate the "pure" property.  */
+   DECL_PURE_P (decl) = TYPE_RESTRICT (type);
+ 
+   /* Propagate the "noreturn" property.  */
+   TREE_THIS_VOLATILE (decl) = TYPE_VOLATILE (type);
+ 
+   if (asm_name)
+     {
+       /* Let the target mangle the name if this isn't a verbatim asm.  */
+       if (*IDENTIFIER_POINTER (asm_name) != '*')
+ 	asm_name = targetm.mangle_decl_assembler_name (decl, asm_name);
+ 
+       SET_DECL_ASSEMBLER_NAME (decl, asm_name);
+ 
+       /* The expand_main_function circuitry expects "main_identifier_node" to
+ 	 designate the DECL_NAME of the 'main' entry point, in turn expected
+ 	 to be declared as the "main" function literally by default.  Ada
+ 	 program entry points are typically declared with a different name
+ 	 within the binder generated file, exported as 'main' to satisfy the
+ 	 system expectations.  Force main_identifier_node in this case.  */
+       if (asm_name == main_identifier_node)
+ 	DECL_NAME (decl) = main_identifier_node;
+     }
+ }
+ 
+ /* Set up the framework for generating code for SUBPROG_DECL, a subprogram
+    body.  This routine needs to be invoked before processing the declarations
+    appearing in the subprogram.  */
+ 
+ void
+ begin_subprog_body (tree subprog_decl)
+ {
+   announce_function (subprog_decl);
+ 
+   /* This function is being defined.  */
+   TREE_STATIC (subprog_decl) = 1;
+ 
+   /* The failure of this assertion will likely come from a wrong context for
+      the subprogram body, e.g. another procedure for a procedure declared at
+      library level.  */
+   gcc_assert (current_function_decl == decl_function_context (subprog_decl));
+ 
+   current_function_decl = subprog_decl;
+ 
+   /* Enter a new binding level and show that all the parameters belong to
+      this function.  */
+   gnat_pushlevel ();
+ }
+ 
+ /* Finish translating the current subprogram and set its BODY.  */
+ 
+ void
+ end_subprog_body (tree body)
+ {
+   tree fndecl = current_function_decl;
+ 
+   /* Attach the BLOCK for this level to the function and pop the level.  */
+   BLOCK_SUPERCONTEXT (current_binding_level->block) = fndecl;
+   DECL_INITIAL (fndecl) = current_binding_level->block;
+   gnat_poplevel ();
+ 
+   /* The body should be a BIND_EXPR whose BLOCK is the top-level one.  */
+   if (TREE_CODE (body) == BIND_EXPR)
+     {
+       BLOCK_SUPERCONTEXT (BIND_EXPR_BLOCK (body)) = fndecl;
+       DECL_INITIAL (fndecl) = BIND_EXPR_BLOCK (body);
+     }
+ 
+   DECL_SAVED_TREE (fndecl) = body;
+ 
+   current_function_decl = decl_function_context (fndecl);
+ }
+ 
+ /* Wrap up compilation of SUBPROG_DECL, a subprogram body.  */
+ 
+ void
+ rest_of_subprog_body_compilation (tree subprog_decl)
+ {
+   /* We cannot track the location of errors past this point.  */
+   Current_Error_Node = Empty;
+ 
+   /* If we're only annotating types, don't actually compile this function.  */
+   if (type_annotate_only)
+     return;
+ 
+   /* Dump functions before gimplification.  */
+   dump_function (TDI_original, subprog_decl);
+ 
+   if (!decl_function_context (subprog_decl))
+     cgraph_node::finalize_function (subprog_decl, false);
+   else
+     /* Register this function with cgraph just far enough to get it
+        added to our parent's nested function list.  */
+     (void) cgraph_node::get_create (subprog_decl);
+ }
+ 
+ tree
+ gnat_builtin_function (tree decl)
+ {
+   gnat_pushdecl (decl, Empty);
+   return decl;
+ }
+ 
+ /* Return an integer type with the number of bits of precision given by
+    PRECISION.  UNSIGNEDP is nonzero if the type is unsigned; otherwise
+    it is a signed type.  */
+ 
+ tree
+ gnat_type_for_size (unsigned precision, int unsignedp)
+ {
+   tree t;
+   char type_name[20];
+ 
+   if (precision <= 2 * MAX_BITS_PER_WORD
+       && signed_and_unsigned_types[precision][unsignedp])
+     return signed_and_unsigned_types[precision][unsignedp];
+ 
+  if (unsignedp)
+     t = make_unsigned_type (precision);
+   else
+     t = make_signed_type (precision);
+   TYPE_ARTIFICIAL (t) = 1;
+ 
+   if (precision <= 2 * MAX_BITS_PER_WORD)
+     signed_and_unsigned_types[precision][unsignedp] = t;
+ 
+   if (!TYPE_NAME (t))
+     {
+       sprintf (type_name, "%sSIGNED_%u", unsignedp ? "UN" : "", precision);
+       TYPE_NAME (t) = get_identifier (type_name);
+     }
+ 
+   return t;
+ }
+ 
+ /* Likewise for floating-point types.  */
+ 
+ static tree
+ float_type_for_precision (int precision, machine_mode mode)
+ {
+   tree t;
+   char type_name[20];
+ 
+   if (float_types[(int) mode])
+     return float_types[(int) mode];
+ 
+   float_types[(int) mode] = t = make_node (REAL_TYPE);
+   TYPE_PRECISION (t) = precision;
+   layout_type (t);
+ 
+   gcc_assert (TYPE_MODE (t) == mode);
+   if (!TYPE_NAME (t))
+     {
+       sprintf (type_name, "FLOAT_%d", precision);
+       TYPE_NAME (t) = get_identifier (type_name);
+     }
+ 
+   return t;
+ }
+ 
+ /* Return a data type that has machine mode MODE.  UNSIGNEDP selects
+    an unsigned type; otherwise a signed type is returned.  */
+ 
+ tree
+ gnat_type_for_mode (machine_mode mode, int unsignedp)
+ {
+   if (mode == BLKmode)
+     return NULL_TREE;
+ 
+   if (mode == VOIDmode)
+     return void_type_node;
+ 
+   if (COMPLEX_MODE_P (mode))
+     return NULL_TREE;
+ 
+   scalar_float_mode float_mode;
+   if (is_a <scalar_float_mode> (mode, &float_mode))
+     return float_type_for_precision (GET_MODE_PRECISION (float_mode),
+ 				     float_mode);
+ 
+   scalar_int_mode int_mode;
+   if (is_a <scalar_int_mode> (mode, &int_mode))
+     return gnat_type_for_size (GET_MODE_BITSIZE (int_mode), unsignedp);
+ 
+   if (VECTOR_MODE_P (mode))
+     {
+       machine_mode inner_mode = GET_MODE_INNER (mode);
+       tree inner_type = gnat_type_for_mode (inner_mode, unsignedp);
+       if (inner_type)
+ 	return build_vector_type_for_mode (inner_type, mode);
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Return the signed or unsigned version of TYPE_NODE, a scalar type, the
+    signedness being specified by UNSIGNEDP.  */
+ 
+ tree
+ gnat_signed_or_unsigned_type_for (int unsignedp, tree type_node)
+ {
+   if (type_node == char_type_node)
+     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
+ 
+   tree type = gnat_type_for_size (TYPE_PRECISION (type_node), unsignedp);
+ 
+   if (TREE_CODE (type_node) == INTEGER_TYPE && TYPE_MODULAR_P (type_node))
+     {
+       type = copy_type (type);
+       TREE_TYPE (type) = type_node;
+     }
+   else if (TREE_TYPE (type_node)
+ 	   && TREE_CODE (TREE_TYPE (type_node)) == INTEGER_TYPE
+ 	   && TYPE_MODULAR_P (TREE_TYPE (type_node)))
+     {
+       type = copy_type (type);
+       TREE_TYPE (type) = TREE_TYPE (type_node);
+     }
+ 
+   return type;
+ }
+ 
+ /* Return 1 if the types T1 and T2 are compatible, i.e. if they can be
+    transparently converted to each other.  */
+ 
+ int
+ gnat_types_compatible_p (tree t1, tree t2)
+ {
+   enum tree_code code;
+ 
+   /* This is the default criterion.  */
+   if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
+     return 1;
+ 
+   /* We only check structural equivalence here.  */
+   if ((code = TREE_CODE (t1)) != TREE_CODE (t2))
+     return 0;
+ 
+   /* Vector types are also compatible if they have the same number of subparts
+      and the same form of (scalar) element type.  */
+   if (code == VECTOR_TYPE
+       && known_eq (TYPE_VECTOR_SUBPARTS (t1), TYPE_VECTOR_SUBPARTS (t2))
+       && TREE_CODE (TREE_TYPE (t1)) == TREE_CODE (TREE_TYPE (t2))
+       && TYPE_PRECISION (TREE_TYPE (t1)) == TYPE_PRECISION (TREE_TYPE (t2)))
+     return 1;
+ 
+   /* Array types are also compatible if they are constrained and have the same
+      domain(s), the same component type and the same scalar storage order.  */
+   if (code == ARRAY_TYPE
+       && (TYPE_DOMAIN (t1) == TYPE_DOMAIN (t2)
+ 	  || (TYPE_DOMAIN (t1)
+ 	      && TYPE_DOMAIN (t2)
+ 	      && tree_int_cst_equal (TYPE_MIN_VALUE (TYPE_DOMAIN (t1)),
+ 				     TYPE_MIN_VALUE (TYPE_DOMAIN (t2)))
+ 	      && tree_int_cst_equal (TYPE_MAX_VALUE (TYPE_DOMAIN (t1)),
+ 				     TYPE_MAX_VALUE (TYPE_DOMAIN (t2)))))
+       && (TREE_TYPE (t1) == TREE_TYPE (t2)
+ 	  || (TREE_CODE (TREE_TYPE (t1)) == ARRAY_TYPE
+ 	      && gnat_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2))))
+       && TYPE_REVERSE_STORAGE_ORDER (t1) == TYPE_REVERSE_STORAGE_ORDER (t2))
+     return 1;
+ 
+   return 0;
+ }
+ 
+ /* Return true if EXPR is a useless type conversion.  */
+ 
+ bool
+ gnat_useless_type_conversion (tree expr)
+ {
+   if (CONVERT_EXPR_P (expr)
+       || TREE_CODE (expr) == VIEW_CONVERT_EXPR
+       || TREE_CODE (expr) == NON_LVALUE_EXPR)
+     return gnat_types_compatible_p (TREE_TYPE (expr),
+ 				    TREE_TYPE (TREE_OPERAND (expr, 0)));
+ 
+   return false;
+ }
+ 
+ /* Return true if T, a {FUNCTION,METHOD}_TYPE, has the specified flags.  */
+ 
+ bool
+ fntype_same_flags_p (const_tree t, tree cico_list, bool return_unconstrained_p,
+ 		     bool return_by_direct_ref_p, bool return_by_invisi_ref_p)
+ {
+   return TYPE_CI_CO_LIST (t) == cico_list
+ 	 && TYPE_RETURN_UNCONSTRAINED_P (t) == return_unconstrained_p
+ 	 && TYPE_RETURN_BY_DIRECT_REF_P (t) == return_by_direct_ref_p
+ 	 && TREE_ADDRESSABLE (t) == return_by_invisi_ref_p;
+ }
+ 
+ /* EXP is an expression for the size of an object.  If this size contains
+    discriminant references, replace them with the maximum (if MAX_P) or
+    minimum (if !MAX_P) possible value of the discriminant.
+ 
+    Note that the expression may have already been gimplified,in which case
+    COND_EXPRs have VOID_TYPE and no operands, and this must be handled.  */
+ 
+ tree
+ max_size (tree exp, bool max_p)
+ {
+   enum tree_code code = TREE_CODE (exp);
+   tree type = TREE_TYPE (exp);
+   tree op0, op1, op2;
+ 
+   switch (TREE_CODE_CLASS (code))
+     {
+     case tcc_declaration:
+     case tcc_constant:
+       return exp;
+ 
+     case tcc_exceptional:
+       gcc_assert (code == SSA_NAME);
+       return exp;
+ 
+     case tcc_vl_exp:
+       if (code == CALL_EXPR)
+ 	{
+ 	  tree t, *argarray;
+ 	  int n, i;
+ 
+ 	  t = maybe_inline_call_in_expr (exp);
+ 	  if (t)
+ 	    return max_size (t, max_p);
+ 
+ 	  n = call_expr_nargs (exp);
+ 	  gcc_assert (n > 0);
+ 	  argarray = XALLOCAVEC (tree, n);
+ 	  for (i = 0; i < n; i++)
+ 	    argarray[i] = max_size (CALL_EXPR_ARG (exp, i), max_p);
+ 	  return build_call_array (type, CALL_EXPR_FN (exp), n, argarray);
+ 	}
+       break;
+ 
+     case tcc_reference:
+       /* If this contains a PLACEHOLDER_EXPR, it is the thing we want to
+ 	 modify.  Otherwise, we treat it like a variable.  */
+       if (CONTAINS_PLACEHOLDER_P (exp))
+ 	{
+ 	  tree base_type = get_base_type (TREE_TYPE (TREE_OPERAND (exp, 1)));
+ 	  tree val
+ 	    = fold_convert (base_type,
+ 			    max_p
+ 			    ? TYPE_MAX_VALUE (type) : TYPE_MIN_VALUE (type));
+ 
+ 	  /* Walk down the extra subtypes to get more restrictive bounds.  */
+ 	  while (TYPE_IS_EXTRA_SUBTYPE_P (type))
+ 	    {
+ 	      type = TREE_TYPE (type);
+ 	      if (max_p)
+ 		val = fold_build2 (MIN_EXPR, base_type, val,
+ 				   fold_convert (base_type,
+ 						 TYPE_MAX_VALUE (type)));
+ 	      else
+ 		val = fold_build2 (MAX_EXPR, base_type, val,
+ 				   fold_convert (base_type,
+ 						 TYPE_MIN_VALUE (type)));
+ 	    }
+ 
+ 	  return fold_convert (type, max_size (val, max_p));
+ 	}
+ 
+       return exp;
+ 
+     case tcc_comparison:
+       return build_int_cst (type, max_p ? 1 : 0);
+ 
+     case tcc_unary:
+       op0 = TREE_OPERAND (exp, 0);
+ 
+       if (code == NON_LVALUE_EXPR)
+ 	return max_size (op0, max_p);
+ 
+       if (VOID_TYPE_P (TREE_TYPE (op0)))
+ 	return max_p ? TYPE_MAX_VALUE (type) : TYPE_MIN_VALUE (type);
+ 
+       op0 = max_size (op0, code == NEGATE_EXPR ? !max_p : max_p);
+ 
+       if (op0 == TREE_OPERAND (exp, 0))
+ 	return exp;
+ 
+       return fold_build1 (code, type, op0);
+ 
+     case tcc_binary:
+       op0 = TREE_OPERAND (exp, 0);
+       op1 = TREE_OPERAND (exp, 1);
+ 
+       /* If we have a multiply-add with a "negative" value in an unsigned
+ 	 type, do a multiply-subtract with the negated value, in order to
+ 	 avoid creating a spurious overflow below.  */
+       if (code == PLUS_EXPR
+ 	  && TREE_CODE (op0) == MULT_EXPR
+ 	  && TYPE_UNSIGNED (type)
+ 	  && TREE_CODE (TREE_OPERAND (op0, 1)) == INTEGER_CST
+ 	  && !TREE_OVERFLOW (TREE_OPERAND (op0, 1))
+ 	  && tree_int_cst_sign_bit (TREE_OPERAND (op0, 1)))
+ 	{
+ 	  tree tmp = op1;
+ 	  op1 = build2 (MULT_EXPR, type, TREE_OPERAND (op0, 0),
+ 			fold_build1 (NEGATE_EXPR, type,
+ 				    TREE_OPERAND (op0, 1)));
+ 	  op0 = tmp;
+ 	  code = MINUS_EXPR;
+ 	}
+ 
+       op0 = max_size (op0, max_p);
+       op1 = max_size (op1, code == MINUS_EXPR ? !max_p : max_p);
+ 
+       if ((code == MINUS_EXPR || code == PLUS_EXPR))
+ 	{
+ 	  /* If the op0 has overflowed and the op1 is a variable,
+ 	     propagate the overflow by returning the op0.  */
+ 	  if (TREE_CODE (op0) == INTEGER_CST
+ 	      && TREE_OVERFLOW (op0)
+ 	      && TREE_CODE (op1) != INTEGER_CST)
+ 	    return op0;
+ 
+ 	  /* If we have a "negative" value in an unsigned type, do the
+ 	     opposite operation on the negated value, in order to avoid
+ 	     creating a spurious overflow below.  */
+ 	  if (TYPE_UNSIGNED (type)
+ 	      && TREE_CODE (op1) == INTEGER_CST
+ 	      && !TREE_OVERFLOW (op1)
+ 	      && tree_int_cst_sign_bit (op1))
+ 	    {
+ 	      op1 = fold_build1 (NEGATE_EXPR, type, op1);
+ 	      code = (code == MINUS_EXPR ? PLUS_EXPR : MINUS_EXPR);
+ 	    }
+ 	}
+ 
+       if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
+ 	return exp;
+ 
+       /* We need to detect overflows so we call size_binop here.  */
+       return size_binop (code, op0, op1);
+ 
+     case tcc_expression:
+       switch (TREE_CODE_LENGTH (code))
+ 	{
+ 	case 1:
+ 	  if (code == SAVE_EXPR)
+ 	    return exp;
+ 
+ 	  op0 = max_size (TREE_OPERAND (exp, 0),
+ 			  code == TRUTH_NOT_EXPR ? !max_p : max_p);
+ 
+ 	  if (op0 == TREE_OPERAND (exp, 0))
+ 	    return exp;
+ 
+ 	  return fold_build1 (code, type, op0);
+ 
+ 	case 2:
+ 	  if (code == COMPOUND_EXPR)
+ 	    return max_size (TREE_OPERAND (exp, 1), max_p);
+ 
+ 	  op0 = max_size (TREE_OPERAND (exp, 0), max_p);
+ 	  op1 = max_size (TREE_OPERAND (exp, 1), max_p);
+ 
+ 	  if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
+ 	    return exp;
+ 
+ 	  return fold_build2 (code, type, op0, op1);
+ 
+ 	case 3:
+ 	  if (code == COND_EXPR)
+ 	    {
+ 	      op0 = TREE_OPERAND (exp, 0);
+ 	      op1 = TREE_OPERAND (exp, 1);
+ 	      op2 = TREE_OPERAND (exp, 2);
+ 
+ 	      if (!op1 || !op2)
+ 		return exp;
+ 
+ 	      op1 = max_size (op1, max_p);
+ 	      op2 = max_size (op2, max_p);
+ 
+ 	      /* If we have the MAX of a "negative" value in an unsigned type
+ 		 and zero for a length expression, just return zero.  */
+ 	      if (max_p
+ 		  && TREE_CODE (op0) == LE_EXPR
+ 		  && TYPE_UNSIGNED (type)
+ 		  && TREE_CODE (op1) == INTEGER_CST
+ 		  && !TREE_OVERFLOW (op1)
+ 		  && tree_int_cst_sign_bit (op1)
+ 		  && integer_zerop (op2))
+ 		return op2;
+ 
+ 	      return fold_build2 (max_p ? MAX_EXPR : MIN_EXPR, type, op1, op2);
+ 	    }
+ 	  break;
+ 
+ 	default:
+ 	  break;
+ 	}
+ 
+       /* Other tree classes cannot happen.  */
+     default:
+       break;
+     }
+ 
+   gcc_unreachable ();
+ }
+ 
+ /* Build a template of type TEMPLATE_TYPE from the array bounds of ARRAY_TYPE.
+    EXPR is an expression that we can use to locate any PLACEHOLDER_EXPRs.
+    Return a constructor for the template.  */
+ 
+ tree
+ build_template (tree template_type, tree array_type, tree expr)
+ {
+   vec<constructor_elt, va_gc> *template_elts = NULL;
+   tree bound_list = NULL_TREE;
+   tree field;
+ 
+   while (TREE_CODE (array_type) == RECORD_TYPE
+ 	 && (TYPE_PADDING_P (array_type)
+ 	     || TYPE_JUSTIFIED_MODULAR_P (array_type)))
+     array_type = TREE_TYPE (TYPE_FIELDS (array_type));
+ 
+   if (TREE_CODE (array_type) == ARRAY_TYPE
+       || (TREE_CODE (array_type) == INTEGER_TYPE
+ 	  && TYPE_HAS_ACTUAL_BOUNDS_P (array_type)))
+     bound_list = TYPE_ACTUAL_BOUNDS (array_type);
+ 
+   /* First make the list for a CONSTRUCTOR for the template.  Go down
+      the field list of the template instead of the type chain because
+      this array might be an Ada array of array and we can't tell where
+      the nested array stop being the underlying object.  */
+   for (field = TYPE_FIELDS (template_type);
+        field;
+        field = DECL_CHAIN (DECL_CHAIN (field)))
+     {
+       tree bounds, min, max;
+ 
+       /* If we have a bound list, get the bounds from there.  Likewise
+ 	 for an ARRAY_TYPE.  Otherwise, if expr is a PARM_DECL with
+ 	 DECL_BY_COMPONENT_PTR_P, use the bounds of the field in the
+ 	 template, but this will only give us a maximum range.  */
+       if (bound_list)
+ 	{
+ 	  bounds = TREE_VALUE (bound_list);
+ 	  bound_list = TREE_CHAIN (bound_list);
+ 	}
+       else if (TREE_CODE (array_type) == ARRAY_TYPE)
+ 	{
+ 	  bounds = TYPE_INDEX_TYPE (TYPE_DOMAIN (array_type));
+ 	  array_type = TREE_TYPE (array_type);
+ 	}
+       else if (expr && TREE_CODE (expr) == PARM_DECL
+ 	       && DECL_BY_COMPONENT_PTR_P (expr))
+ 	bounds = TREE_TYPE (field);
+       else
+ 	gcc_unreachable ();
+ 
+       min = convert (TREE_TYPE (field), TYPE_MIN_VALUE (bounds));
+       max = convert (TREE_TYPE (DECL_CHAIN (field)), TYPE_MAX_VALUE (bounds));
+ 
+       /* If either MIN or MAX involve a PLACEHOLDER_EXPR, we must
+ 	 substitute it from OBJECT.  */
+       min = SUBSTITUTE_PLACEHOLDER_IN_EXPR (min, expr);
+       max = SUBSTITUTE_PLACEHOLDER_IN_EXPR (max, expr);
+ 
+       CONSTRUCTOR_APPEND_ELT (template_elts, field, min);
+       CONSTRUCTOR_APPEND_ELT (template_elts, DECL_CHAIN (field), max);
+     }
+ 
+   return gnat_build_constructor (template_type, template_elts);
+ }
+ 
+ /* Return true if TYPE is suitable for the element type of a vector.  */
+ 
+ static bool
+ type_for_vector_element_p (tree type)
+ {
+   machine_mode mode;
+ 
+   if (!INTEGRAL_TYPE_P (type)
+       && !SCALAR_FLOAT_TYPE_P (type)
+       && !FIXED_POINT_TYPE_P (type))
+     return false;
+ 
+   mode = TYPE_MODE (type);
+   if (GET_MODE_CLASS (mode) != MODE_INT
+       && !SCALAR_FLOAT_MODE_P (mode)
+       && !ALL_SCALAR_FIXED_POINT_MODE_P (mode))
+     return false;
+ 
+   return true;
+ }
+ 
+ /* Return a vector type given the SIZE and the INNER_TYPE, or NULL_TREE if
+    this is not possible.  If ATTRIBUTE is non-zero, we are processing the
+    attribute declaration and want to issue error messages on failure.  */
+ 
+ static tree
+ build_vector_type_for_size (tree inner_type, tree size, tree attribute)
+ {
+   unsigned HOST_WIDE_INT size_int, inner_size_int;
+   int nunits;
+ 
+   /* Silently punt on variable sizes.  We can't make vector types for them,
+      need to ignore them on front-end generated subtypes of unconstrained
+      base types, and this attribute is for binding implementors, not end
+      users, so we should never get there from legitimate explicit uses.  */
+   if (!tree_fits_uhwi_p (size))
+     return NULL_TREE;
+   size_int = tree_to_uhwi (size);
+ 
+   if (!type_for_vector_element_p (inner_type))
+     {
+       if (attribute)
+ 	error ("invalid element type for attribute %qs",
+ 	       IDENTIFIER_POINTER (attribute));
+       return NULL_TREE;
+     }
+   inner_size_int = tree_to_uhwi (TYPE_SIZE_UNIT (inner_type));
+ 
+   if (size_int % inner_size_int)
+     {
+       if (attribute)
+ 	error ("vector size not an integral multiple of component size");
+       return NULL_TREE;
+     }
+ 
+   if (size_int == 0)
+     {
+       if (attribute)
+ 	error ("zero vector size");
+       return NULL_TREE;
+     }
+ 
+   nunits = size_int / inner_size_int;
+   if (nunits & (nunits - 1))
+     {
+       if (attribute)
+ 	error ("number of components of vector not a power of two");
+       return NULL_TREE;
+     }
+ 
+   return build_vector_type (inner_type, nunits);
+ }
+ 
+ /* Return a vector type whose representative array type is ARRAY_TYPE, or
+    NULL_TREE if this is not possible.  If ATTRIBUTE is non-zero, we are
+    processing the attribute and want to issue error messages on failure.  */
+ 
+ static tree
+ build_vector_type_for_array (tree array_type, tree attribute)
+ {
+   tree vector_type = build_vector_type_for_size (TREE_TYPE (array_type),
+ 						 TYPE_SIZE_UNIT (array_type),
+ 						 attribute);
+   if (!vector_type)
+     return NULL_TREE;
+ 
+   TYPE_REPRESENTATIVE_ARRAY (vector_type) = array_type;
+   return vector_type;
+ }
+ 
+ /* Build a type to be used to represent an aliased object whose nominal type
+    is an unconstrained array.  This consists of a RECORD_TYPE containing a
+    field of TEMPLATE_TYPE and a field of OBJECT_TYPE, which is an ARRAY_TYPE.
+    If ARRAY_TYPE is that of an unconstrained array, this is used to represent
+    an arbitrary unconstrained object.  Use NAME as the name of the record.
+    DEBUG_INFO_P is true if we need to write debug information for the type.  */
+ 
+ tree
+ build_unc_object_type (tree template_type, tree object_type, tree name,
+ 		       bool debug_info_p)
+ {
+   tree type = make_node (RECORD_TYPE);
+   tree template_field
+     = create_field_decl (get_identifier ("BOUNDS"), template_type, type,
+ 			 NULL_TREE, NULL_TREE, 0, 1);
+   tree array_field
+     = create_field_decl (get_identifier ("ARRAY"), object_type, type,
+ 			 NULL_TREE, NULL_TREE, 0, 1);
+ 
+   TYPE_NAME (type) = name;
+   TYPE_CONTAINS_TEMPLATE_P (type) = 1;
+   DECL_CHAIN (template_field) = array_field;
+   finish_record_type (type, template_field, 0, true);
+ 
+   /* Declare it now since it will never be declared otherwise.  This is
+      necessary to ensure that its subtrees are properly marked.  */
+   create_type_decl (name, type, true, debug_info_p, Empty);
+ 
+   return type;
+ }
+ 
+ /* Same, taking a thin or fat pointer type instead of a template type. */
+ 
+ tree
+ build_unc_object_type_from_ptr (tree thin_fat_ptr_type, tree object_type,
+ 				tree name, bool debug_info_p)
+ {
+   tree template_type;
+ 
+   gcc_assert (TYPE_IS_FAT_OR_THIN_POINTER_P (thin_fat_ptr_type));
+ 
+   template_type
+     = (TYPE_IS_FAT_POINTER_P (thin_fat_ptr_type)
+        ? TREE_TYPE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (thin_fat_ptr_type))))
+        : TREE_TYPE (TYPE_FIELDS (TREE_TYPE (thin_fat_ptr_type))));
+ 
+   return
+     build_unc_object_type (template_type, object_type, name, debug_info_p);
+ }
+ 
+ /* Update anything previously pointing to OLD_TYPE to point to NEW_TYPE.
+    In the normal case this is just two adjustments, but we have more to
+    do if NEW_TYPE is an UNCONSTRAINED_ARRAY_TYPE.  */
+ 
+ void
+ update_pointer_to (tree old_type, tree new_type)
+ {
+   tree ptr = TYPE_POINTER_TO (old_type);
+   tree ref = TYPE_REFERENCE_TO (old_type);
+   tree t;
+ 
+   /* If this is the main variant, process all the other variants first.  */
+   if (TYPE_MAIN_VARIANT (old_type) == old_type)
+     for (t = TYPE_NEXT_VARIANT (old_type); t; t = TYPE_NEXT_VARIANT (t))
+       update_pointer_to (t, new_type);
+ 
+   /* If no pointers and no references, we are done.  */
+   if (!ptr && !ref)
+     return;
+ 
+   /* Merge the old type qualifiers in the new type.
+ 
+      Each old variant has qualifiers for specific reasons, and the new
+      designated type as well.  Each set of qualifiers represents useful
+      information grabbed at some point, and merging the two simply unifies
+      these inputs into the final type description.
+ 
+      Consider for instance a volatile type frozen after an access to constant
+      type designating it; after the designated type's freeze, we get here with
+      a volatile NEW_TYPE and a dummy OLD_TYPE with a readonly variant, created
+      when the access type was processed.  We will make a volatile and readonly
+      designated type, because that's what it really is.
+ 
+      We might also get here for a non-dummy OLD_TYPE variant with different
+      qualifiers than those of NEW_TYPE, for instance in some cases of pointers
+      to private record type elaboration (see the comments around the call to
+      this routine in gnat_to_gnu_entity <E_Access_Type>).  We have to merge
+      the qualifiers in those cases too, to avoid accidentally discarding the
+      initial set, and will often end up with OLD_TYPE == NEW_TYPE then.  */
+   new_type
+     = build_qualified_type (new_type,
+ 			    TYPE_QUALS (old_type) | TYPE_QUALS (new_type));
+ 
+   /* If old type and new type are identical, there is nothing to do.  */
+   if (old_type == new_type)
+     return;
+ 
+   /* Otherwise, first handle the simple case.  */
+   if (TREE_CODE (new_type) != UNCONSTRAINED_ARRAY_TYPE)
+     {
+       tree new_ptr, new_ref;
+ 
+       /* If pointer or reference already points to new type, nothing to do.
+ 	 This can happen as update_pointer_to can be invoked multiple times
+ 	 on the same couple of types because of the type variants.  */
+       if ((ptr && TREE_TYPE (ptr) == new_type)
+ 	  || (ref && TREE_TYPE (ref) == new_type))
+ 	return;
+ 
+       /* Chain PTR and its variants at the end.  */
+       new_ptr = TYPE_POINTER_TO (new_type);
+       if (new_ptr)
+ 	{
+ 	  while (TYPE_NEXT_PTR_TO (new_ptr))
+ 	    new_ptr = TYPE_NEXT_PTR_TO (new_ptr);
+ 	  TYPE_NEXT_PTR_TO (new_ptr) = ptr;
+ 	}
+       else
+ 	TYPE_POINTER_TO (new_type) = ptr;
+ 
+       /* Now adjust them.  */
+       for (; ptr; ptr = TYPE_NEXT_PTR_TO (ptr))
+ 	for (t = TYPE_MAIN_VARIANT (ptr); t; t = TYPE_NEXT_VARIANT (t))
+ 	  {
+ 	    TREE_TYPE (t) = new_type;
+ 	    if (TYPE_NULL_BOUNDS (t))
+ 	      TREE_TYPE (TREE_OPERAND (TYPE_NULL_BOUNDS (t), 0)) = new_type;
+ 	    TYPE_CANONICAL (t) = TYPE_CANONICAL (TYPE_POINTER_TO (new_type));
+ 	  }
+ 
+       /* Chain REF and its variants at the end.  */
+       new_ref = TYPE_REFERENCE_TO (new_type);
+       if (new_ref)
+ 	{
+ 	  while (TYPE_NEXT_REF_TO (new_ref))
+ 	    new_ref = TYPE_NEXT_REF_TO (new_ref);
+ 	  TYPE_NEXT_REF_TO (new_ref) = ref;
+ 	}
+       else
+ 	TYPE_REFERENCE_TO (new_type) = ref;
+ 
+       /* Now adjust them.  */
+       for (; ref; ref = TYPE_NEXT_REF_TO (ref))
+ 	for (t = TYPE_MAIN_VARIANT (ref); t; t = TYPE_NEXT_VARIANT (t))
+ 	  {
+ 	    TREE_TYPE (t) = new_type;
+ 	    TYPE_CANONICAL (t) = TYPE_CANONICAL (TYPE_REFERENCE_TO (new_type));
+ 	  }
+ 
+       TYPE_POINTER_TO (old_type) = NULL_TREE;
+       TYPE_REFERENCE_TO (old_type) = NULL_TREE;
+     }
+ 
+   /* Now deal with the unconstrained array case.  In this case the pointer
+      is actually a record where both fields are pointers to dummy nodes.
+      Turn them into pointers to the correct types using update_pointer_to.
+      Likewise for the pointer to the object record (thin pointer).  */
+   else
+     {
+       tree new_ptr = TYPE_POINTER_TO (new_type);
+ 
+       gcc_assert (TYPE_IS_FAT_POINTER_P (ptr));
+ 
+       /* If PTR already points to NEW_TYPE, nothing to do.  This can happen
+ 	 since update_pointer_to can be invoked multiple times on the same
+ 	 couple of types because of the type variants.  */
+       if (TYPE_UNCONSTRAINED_ARRAY (ptr) == new_type)
+ 	return;
+ 
+       update_pointer_to
+ 	(TREE_TYPE (TREE_TYPE (TYPE_FIELDS (ptr))),
+ 	 TREE_TYPE (TREE_TYPE (TYPE_FIELDS (new_ptr))));
+ 
+       update_pointer_to
+ 	(TREE_TYPE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (ptr)))),
+ 	 TREE_TYPE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (new_ptr)))));
+ 
+       update_pointer_to (TYPE_OBJECT_RECORD_TYPE (old_type),
+ 			 TYPE_OBJECT_RECORD_TYPE (new_type));
+ 
+       TYPE_POINTER_TO (old_type) = NULL_TREE;
+       TYPE_REFERENCE_TO (old_type) = NULL_TREE;
+     }
+ }
+ 
+ /* Convert EXPR, a pointer to a constrained array, into a pointer to an
+    unconstrained one.  This involves making or finding a template.  */
+ 
+ static tree
+ convert_to_fat_pointer (tree type, tree expr)
+ {
+   tree template_type = TREE_TYPE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type))));
+   tree p_array_type = TREE_TYPE (TYPE_FIELDS (type));
+   tree etype = TREE_TYPE (expr);
+   tree template_addr;
+   vec<constructor_elt, va_gc> *v;
+   vec_alloc (v, 2);
+ 
+   /* If EXPR is null, make a fat pointer that contains a null pointer to the
+      array (compare_fat_pointers ensures that this is the full discriminant)
+      and a valid pointer to the bounds.  This latter property is necessary
+      since the compiler can hoist the load of the bounds done through it.  */
+   if (integer_zerop (expr))
+     {
+       tree ptr_template_type = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type)));
+       tree null_bounds, t;
+ 
+       if (TYPE_NULL_BOUNDS (ptr_template_type))
+ 	null_bounds = TYPE_NULL_BOUNDS (ptr_template_type);
+       else
+ 	{
+ 	  /* The template type can still be dummy at this point so we build an
+ 	     empty constructor.  The middle-end will fill it in with zeros.  */
+ 	  t = build_constructor (template_type, NULL);
+ 	  TREE_CONSTANT (t) = TREE_STATIC (t) = 1;
+ 	  null_bounds = build_unary_op (ADDR_EXPR, NULL_TREE, t);
+ 	  SET_TYPE_NULL_BOUNDS (ptr_template_type, null_bounds);
+ 	}
+ 
+       CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (type),
+ 			      fold_convert (p_array_type, null_pointer_node));
+       CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (TYPE_FIELDS (type)), null_bounds);
+       t = build_constructor (type, v);
+       /* Do not set TREE_CONSTANT so as to force T to static memory.  */
+       TREE_CONSTANT (t) = 0;
+       TREE_STATIC (t) = 1;
+ 
+       return t;
+     }
+ 
+   /* If EXPR is a thin pointer, make template and data from the record.  */
+   if (TYPE_IS_THIN_POINTER_P (etype))
+     {
+       tree field = TYPE_FIELDS (TREE_TYPE (etype));
+ 
+       expr = gnat_protect_expr (expr);
+ 
+       /* If we have a TYPE_UNCONSTRAINED_ARRAY attached to the RECORD_TYPE,
+ 	 the thin pointer value has been shifted so we shift it back to get
+ 	 the template address.  */
+       if (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (etype)))
+ 	{
+ 	  template_addr
+ 	    = build_binary_op (POINTER_PLUS_EXPR, etype, expr,
+ 			       fold_build1 (NEGATE_EXPR, sizetype,
+ 					    byte_position
+ 					    (DECL_CHAIN (field))));
+ 	  template_addr
+ 	    = fold_convert (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type))),
+ 			    template_addr);
+ 	}
+ 
+       /* Otherwise we explicitly take the address of the fields.  */
+       else
+ 	{
+ 	  expr = build_unary_op (INDIRECT_REF, NULL_TREE, expr);
+ 	  template_addr
+ 	    = build_unary_op (ADDR_EXPR, NULL_TREE,
+ 			      build_component_ref (expr, field, false));
+ 	  expr = build_unary_op (ADDR_EXPR, NULL_TREE,
+ 				 build_component_ref (expr, DECL_CHAIN (field),
+ 						      false));
+ 	}
+     }
+ 
+   /* Otherwise, build the constructor for the template.  */
+   else
+     template_addr
+       = build_unary_op (ADDR_EXPR, NULL_TREE,
+ 			build_template (template_type, TREE_TYPE (etype),
+ 					expr));
+ 
+   /* The final result is a constructor for the fat pointer.
+ 
+      If EXPR is an argument of a foreign convention subprogram, the type it
+      points to is directly the component type.  In this case, the expression
+      type may not match the corresponding FIELD_DECL type at this point, so we
+      call "convert" here to fix that up if necessary.  This type consistency is
+      required, for instance because it ensures that possible later folding of
+      COMPONENT_REFs against this constructor always yields something of the
+      same type as the initial reference.
+ 
+      Note that the call to "build_template" above is still fine because it
+      will only refer to the provided TEMPLATE_TYPE in this case.  */
+   CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (type), convert (p_array_type, expr));
+   CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (TYPE_FIELDS (type)), template_addr);
+   return gnat_build_constructor (type, v);
+ }
+ 
+ /* Create an expression whose value is that of EXPR,
+    converted to type TYPE.  The TREE_TYPE of the value
+    is always TYPE.  This function implements all reasonable
+    conversions; callers should filter out those that are
+    not permitted by the language being compiled.  */
+ 
+ tree
+ convert (tree type, tree expr)
+ {
+   tree etype = TREE_TYPE (expr);
+   enum tree_code ecode = TREE_CODE (etype);
+   enum tree_code code = TREE_CODE (type);
+ 
+   /* If the expression is already of the right type, we are done.  */
+   if (etype == type)
+     return expr;
+ 
+   /* If both input and output have padding and are of variable size, do this
+      as an unchecked conversion.  Likewise if one is a mere variant of the
+      other, so we avoid a pointless unpad/repad sequence.  */
+   else if (code == RECORD_TYPE && ecode == RECORD_TYPE
+ 	   && TYPE_PADDING_P (type) && TYPE_PADDING_P (etype)
+ 	   && (!TREE_CONSTANT (TYPE_SIZE (type))
+ 	       || !TREE_CONSTANT (TYPE_SIZE (etype))
+ 	       || TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (etype)
+ 	       || TYPE_NAME (TREE_TYPE (TYPE_FIELDS (type)))
+ 		  == TYPE_NAME (TREE_TYPE (TYPE_FIELDS (etype)))))
+     ;
+ 
+   /* If the output type has padding, convert to the inner type and make a
+      constructor to build the record, unless a variable size is involved.  */
+   else if (code == RECORD_TYPE && TYPE_PADDING_P (type))
+     {
+       /* If we previously converted from another type and our type is
+ 	 of variable size, remove the conversion to avoid the need for
+ 	 variable-sized temporaries.  Likewise for a conversion between
+ 	 original and packable version.  */
+       if (TREE_CODE (expr) == VIEW_CONVERT_EXPR
+ 	  && (!TREE_CONSTANT (TYPE_SIZE (type))
+ 	      || (ecode == RECORD_TYPE
+ 		  && TYPE_NAME (etype)
+ 		     == TYPE_NAME (TREE_TYPE (TREE_OPERAND (expr, 0))))))
+ 	expr = TREE_OPERAND (expr, 0);
+ 
+       /* If we are just removing the padding from expr, convert the original
+ 	 object if we have variable size in order to avoid the need for some
+ 	 variable-sized temporaries.  Likewise if the padding is a variant
+ 	 of the other, so we avoid a pointless unpad/repad sequence.  */
+       if (TREE_CODE (expr) == COMPONENT_REF
+ 	  && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (expr, 0)))
+ 	  && (!TREE_CONSTANT (TYPE_SIZE (type))
+ 	      || TYPE_MAIN_VARIANT (type)
+ 		 == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (expr, 0)))
+ 	      || (ecode == RECORD_TYPE
+ 		  && TYPE_NAME (etype)
+ 		     == TYPE_NAME (TREE_TYPE (TYPE_FIELDS (type))))))
+ 	return convert (type, TREE_OPERAND (expr, 0));
+ 
+       /* If the inner type is of self-referential size and the expression type
+ 	 is a record, do this as an unchecked conversion unless both types are
+ 	 essentially the same.  */
+       if (ecode == RECORD_TYPE
+ 	  && CONTAINS_PLACEHOLDER_P (DECL_SIZE (TYPE_FIELDS (type)))
+ 	  && TYPE_MAIN_VARIANT (etype)
+ 	     != TYPE_MAIN_VARIANT (TREE_TYPE (TYPE_FIELDS (type))))
+ 	return unchecked_convert (type, expr, false);
+ 
+       /* If we are converting between array types with variable size, do the
+ 	 final conversion as an unchecked conversion, again to avoid the need
+ 	 for some variable-sized temporaries.  If valid, this conversion is
+ 	 very likely purely technical and without real effects.  */
+       if (ecode == ARRAY_TYPE
+ 	  && TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == ARRAY_TYPE
+ 	  && !TREE_CONSTANT (TYPE_SIZE (etype))
+ 	  && !TREE_CONSTANT (TYPE_SIZE (type)))
+ 	return unchecked_convert (type,
+ 				  convert (TREE_TYPE (TYPE_FIELDS (type)),
+ 					   expr),
+ 				  false);
+ 
+       tree t = convert (TREE_TYPE (TYPE_FIELDS (type)), expr);
+ 
+       /* If converting to the inner type has already created a CONSTRUCTOR with
+          the right size, then reuse it instead of creating another one.  This
+          can happen for the padding type built to overalign local variables.  */
+       if (TREE_CODE (t) == VIEW_CONVERT_EXPR
+ 	  && TREE_CODE (TREE_OPERAND (t, 0)) == CONSTRUCTOR
+ 	  && TREE_CONSTANT (TYPE_SIZE (TREE_TYPE (TREE_OPERAND (t, 0))))
+ 	  && tree_int_cst_equal (TYPE_SIZE (type),
+ 				 TYPE_SIZE (TREE_TYPE (TREE_OPERAND (t, 0)))))
+ 	return build1 (VIEW_CONVERT_EXPR, type, TREE_OPERAND (t, 0));
+ 
+       vec<constructor_elt, va_gc> *v;
+       vec_alloc (v, 1);
+       CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (type), t);
+       return gnat_build_constructor (type, v);
+     }
+ 
+   /* If the input type has padding, remove it and convert to the output type.
+      The conditions ordering is arranged to ensure that the output type is not
+      a padding type here, as it is not clear whether the conversion would
+      always be correct if this was to happen.  */
+   else if (ecode == RECORD_TYPE && TYPE_PADDING_P (etype))
+     {
+       tree unpadded;
+ 
+       /* If we have just converted to this padded type, just get the
+ 	 inner expression.  */
+       if (TREE_CODE (expr) == CONSTRUCTOR)
+ 	unpadded = CONSTRUCTOR_ELT (expr, 0)->value;
+ 
+       /* Otherwise, build an explicit component reference.  */
+       else
+ 	unpadded = build_component_ref (expr, TYPE_FIELDS (etype), false);
+ 
+       return convert (type, unpadded);
+     }
+ 
+   /* If the input is a biased type, convert first to the base type and add
+      the bias.  Note that the bias must go through a full conversion to the
+      base type, lest it is itself a biased value; this happens for subtypes
+      of biased types.  */
+   if (ecode == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (etype))
+     return convert (type, fold_build2 (PLUS_EXPR, TREE_TYPE (etype),
+ 				       fold_convert (TREE_TYPE (etype), expr),
+ 				       convert (TREE_TYPE (etype),
+ 						TYPE_MIN_VALUE (etype))));
+ 
+   /* If the input is a justified modular type, we need to extract the actual
+      object before converting it to an other type with the exceptions of an
+      [unconstrained] array or a mere type variant.  It is useful to avoid
+      the extraction and conversion in these cases because it could end up
+      replacing a VAR_DECL by a constructor and we might be about the take
+      the address of the result.  */
+   if (ecode == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (etype)
+       && code != ARRAY_TYPE
+       && code != UNCONSTRAINED_ARRAY_TYPE
+       && TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (etype))
+     return
+       convert (type, build_component_ref (expr, TYPE_FIELDS (etype), false));
+ 
+   /* If converting to a type that contains a template, convert to the data
+      type and then build the template. */
+   if (code == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (type))
+     {
+       tree obj_type = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type)));
+       vec<constructor_elt, va_gc> *v;
+       vec_alloc (v, 2);
+ 
+       /* If the source already has a template, get a reference to the
+ 	 associated array only, as we are going to rebuild a template
+ 	 for the target type anyway.  */
+       expr = maybe_unconstrained_array (expr);
+ 
+       CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (type),
+ 			      build_template (TREE_TYPE (TYPE_FIELDS (type)),
+ 					      obj_type, NULL_TREE));
+       if (expr)
+ 	CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (TYPE_FIELDS (type)),
+ 				convert (obj_type, expr));
+       return gnat_build_constructor (type, v);
+     }
+ 
+   /* There are some cases of expressions that we process specially.  */
+   switch (TREE_CODE (expr))
+     {
+     case ERROR_MARK:
+       return expr;
+ 
+     case NULL_EXPR:
+       /* Just set its type here.  For TRANSFORM_EXPR, we will do the actual
+ 	 conversion in gnat_expand_expr.  NULL_EXPR does not represent
+ 	 and actual value, so no conversion is needed.  */
+       expr = copy_node (expr);
+       TREE_TYPE (expr) = type;
+       return expr;
+ 
+     case STRING_CST:
+       /* If we are converting a STRING_CST to another constrained array type,
+ 	 just make a new one in the proper type.  */
+       if (code == ecode
+ 	  && !(TREE_CONSTANT (TYPE_SIZE (etype))
+ 	       && !TREE_CONSTANT (TYPE_SIZE (type))))
+ 	{
+ 	  expr = copy_node (expr);
+ 	  TREE_TYPE (expr) = type;
+ 	  return expr;
+ 	}
+       break;
+ 
+     case VECTOR_CST:
+       /* If we are converting a VECTOR_CST to a mere type variant, just make
+ 	 a new one in the proper type.  */
+       if (code == ecode && gnat_types_compatible_p (type, etype))
+ 	{
+ 	  expr = copy_node (expr);
+ 	  TREE_TYPE (expr) = type;
+ 	  return expr;
+ 	}
+       break;
+ 
+     case CONSTRUCTOR:
+       /* If we are converting a CONSTRUCTOR to a mere type variant, or to
+ 	 another padding type around the same type, just make a new one in
+ 	 the proper type.  */
+       if (code == ecode
+ 	  && (gnat_types_compatible_p (type, etype)
+ 	      || (code == RECORD_TYPE
+ 		  && TYPE_PADDING_P (type) && TYPE_PADDING_P (etype)
+ 		  && TREE_TYPE (TYPE_FIELDS (type))
+ 		     == TREE_TYPE (TYPE_FIELDS (etype)))))
+ 	{
+ 	  expr = copy_node (expr);
+ 	  TREE_TYPE (expr) = type;
+ 	  CONSTRUCTOR_ELTS (expr) = vec_safe_copy (CONSTRUCTOR_ELTS (expr));
+ 	  return expr;
+ 	}
+ 
+       /* Likewise for a conversion between original and packable version, or
+ 	 conversion between types of the same size and with the same list of
+ 	 fields, but we have to work harder to preserve type consistency.  */
+       if (code == ecode
+ 	  && code == RECORD_TYPE
+ 	  && (TYPE_NAME (type) == TYPE_NAME (etype)
+ 	      || tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (etype))))
+ 
+ 	{
+ 	  vec<constructor_elt, va_gc> *e = CONSTRUCTOR_ELTS (expr);
+ 	  unsigned HOST_WIDE_INT len = vec_safe_length (e);
+ 	  vec<constructor_elt, va_gc> *v;
+ 	  vec_alloc (v, len);
+ 	  tree efield = TYPE_FIELDS (etype), field = TYPE_FIELDS (type);
+ 	  unsigned HOST_WIDE_INT idx;
+ 	  tree index, value;
+ 
+ 	  /* Whether we need to clear TREE_CONSTANT et al. on the output
+ 	     constructor when we convert in place.  */
+ 	  bool clear_constant = false;
+ 
+ 	  FOR_EACH_CONSTRUCTOR_ELT(e, idx, index, value)
+ 	    {
+ 	      /* Skip the missing fields in the CONSTRUCTOR.  */
+ 	      while (efield && field && !SAME_FIELD_P (efield, index))
+ 	        {
+ 		  efield = DECL_CHAIN (efield);
+ 		  field = DECL_CHAIN (field);
+ 		}
+ 	      /* The field must be the same.  */
+ 	      if (!(efield && field && SAME_FIELD_P (efield, field)))
+ 		break;
+ 	      constructor_elt elt
+ 	        = {field, convert (TREE_TYPE (field), value)};
+ 	      v->quick_push (elt);
+ 
+ 	      /* If packing has made this field a bitfield and the input
+ 		 value couldn't be emitted statically any more, we need to
+ 		 clear TREE_CONSTANT on our output.  */
+ 	      if (!clear_constant
+ 		  && TREE_CONSTANT (expr)
+ 		  && !CONSTRUCTOR_BITFIELD_P (efield)
+ 		  && CONSTRUCTOR_BITFIELD_P (field)
+ 		  && !initializer_constant_valid_for_bitfield_p (value))
+ 		clear_constant = true;
+ 
+ 	      efield = DECL_CHAIN (efield);
+ 	      field = DECL_CHAIN (field);
+ 	    }
+ 
+ 	  /* If we have been able to match and convert all the input fields
+ 	     to their output type, convert in place now.  We'll fallback to a
+ 	     view conversion downstream otherwise.  */
+ 	  if (idx == len)
+ 	    {
+ 	      expr = copy_node (expr);
+ 	      TREE_TYPE (expr) = type;
+ 	      CONSTRUCTOR_ELTS (expr) = v;
+ 	      if (clear_constant)
+ 		TREE_CONSTANT (expr) = TREE_STATIC (expr) = 0;
+ 	      return expr;
+ 	    }
+ 	}
+ 
+       /* Likewise for a conversion between array type and vector type with a
+          compatible representative array.  */
+       else if (code == VECTOR_TYPE
+ 	       && ecode == ARRAY_TYPE
+ 	       && gnat_types_compatible_p (TYPE_REPRESENTATIVE_ARRAY (type),
+ 					   etype))
+ 	{
+ 	  vec<constructor_elt, va_gc> *e = CONSTRUCTOR_ELTS (expr);
+ 	  unsigned HOST_WIDE_INT len = vec_safe_length (e);
+ 	  vec<constructor_elt, va_gc> *v;
+ 	  unsigned HOST_WIDE_INT ix;
+ 	  tree value;
+ 
+ 	  /* Build a VECTOR_CST from a *constant* array constructor.  */
+ 	  if (TREE_CONSTANT (expr))
+ 	    {
+ 	      bool constant_p = true;
+ 
+ 	      /* Iterate through elements and check if all constructor
+ 		 elements are *_CSTs.  */
+ 	      FOR_EACH_CONSTRUCTOR_VALUE (e, ix, value)
+ 		if (!CONSTANT_CLASS_P (value))
+ 		  {
+ 		    constant_p = false;
+ 		    break;
+ 		  }
+ 
+ 	      if (constant_p)
+ 		return build_vector_from_ctor (type,
+ 					       CONSTRUCTOR_ELTS (expr));
+ 	    }
+ 
+ 	  /* Otherwise, build a regular vector constructor.  */
+ 	  vec_alloc (v, len);
+ 	  FOR_EACH_CONSTRUCTOR_VALUE (e, ix, value)
+ 	    {
+ 	      constructor_elt elt = {NULL_TREE, value};
+ 	      v->quick_push (elt);
+ 	    }
+ 	  expr = copy_node (expr);
+ 	  TREE_TYPE (expr) = type;
+ 	  CONSTRUCTOR_ELTS (expr) = v;
+ 	  return expr;
+ 	}
+       break;
+ 
+     case UNCONSTRAINED_ARRAY_REF:
+       /* First retrieve the underlying array.  */
+       expr = maybe_unconstrained_array (expr);
+       etype = TREE_TYPE (expr);
+       ecode = TREE_CODE (etype);
+       break;
+ 
+     case VIEW_CONVERT_EXPR:
+       {
+ 	/* GCC 4.x is very sensitive to type consistency overall, and view
+ 	   conversions thus are very frequent.  Even though just "convert"ing
+ 	   the inner operand to the output type is fine in most cases, it
+ 	   might expose unexpected input/output type mismatches in special
+ 	   circumstances so we avoid such recursive calls when we can.  */
+ 	tree op0 = TREE_OPERAND (expr, 0);
+ 
+ 	/* If we are converting back to the original type, we can just
+ 	   lift the input conversion.  This is a common occurrence with
+ 	   switches back-and-forth amongst type variants.  */
+ 	if (type == TREE_TYPE (op0))
+ 	  return op0;
+ 
+ 	/* Otherwise, if we're converting between two aggregate or vector
+ 	   types, we might be allowed to substitute the VIEW_CONVERT_EXPR
+ 	   target type in place or to just convert the inner expression.  */
+ 	if ((AGGREGATE_TYPE_P (type) && AGGREGATE_TYPE_P (etype))
+ 	    || (VECTOR_TYPE_P (type) && VECTOR_TYPE_P (etype)))
+ 	  {
+ 	    /* If we are converting between mere variants, we can just
+ 	       substitute the VIEW_CONVERT_EXPR in place.  */
+ 	    if (gnat_types_compatible_p (type, etype))
+ 	      return build1 (VIEW_CONVERT_EXPR, type, op0);
+ 
+ 	    /* Otherwise, we may just bypass the input view conversion unless
+ 	       one of the types is a fat pointer,  which is handled by
+ 	       specialized code below which relies on exact type matching.  */
+ 	    else if (!TYPE_IS_FAT_POINTER_P (type)
+ 		     && !TYPE_IS_FAT_POINTER_P (etype))
+ 	      return convert (type, op0);
+ 	  }
+ 
+ 	break;
+       }
+ 
+     default:
+       break;
+     }
+ 
+   /* Check for converting to a pointer to an unconstrained array.  */
+   if (TYPE_IS_FAT_POINTER_P (type) && !TYPE_IS_FAT_POINTER_P (etype))
+     return convert_to_fat_pointer (type, expr);
+ 
+   /* If we are converting between two aggregate or vector types that are mere
+      variants, just make a VIEW_CONVERT_EXPR.  Likewise when we are converting
+      to a vector type from its representative array type.  */
+   else if ((code == ecode
+ 	    && (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
+ 	    && gnat_types_compatible_p (type, etype))
+ 	   || (code == VECTOR_TYPE
+ 	       && ecode == ARRAY_TYPE
+ 	       && gnat_types_compatible_p (TYPE_REPRESENTATIVE_ARRAY (type),
+ 					   etype)))
+     return build1 (VIEW_CONVERT_EXPR, type, expr);
+ 
+   /* If we are converting between tagged types, try to upcast properly.
+      But don't do it if we are just annotating types since tagged types
+      aren't fully laid out in this mode.  */
+   else if (ecode == RECORD_TYPE && code == RECORD_TYPE
+ 	   && TYPE_ALIGN_OK (etype) && TYPE_ALIGN_OK (type)
+ 	   && !type_annotate_only)
+     {
+       tree child_etype = etype;
+       do {
+ 	tree field = TYPE_FIELDS (child_etype);
+ 	if (DECL_NAME (field) == parent_name_id && TREE_TYPE (field) == type)
+ 	  return build_component_ref (expr, field, false);
+ 	child_etype = TREE_TYPE (field);
+       } while (TREE_CODE (child_etype) == RECORD_TYPE);
+     }
+ 
+   /* If we are converting from a smaller form of record type back to it, just
+      make a VIEW_CONVERT_EXPR.  But first pad the expression to have the same
+      size on both sides.  */
+   else if (ecode == RECORD_TYPE && code == RECORD_TYPE
+ 	   && smaller_form_type_p (etype, type))
+     {
+       expr = convert (maybe_pad_type (etype, TYPE_SIZE (type), 0, Empty,
+ 				      false, false, true),
+ 		      expr);
+       return build1 (VIEW_CONVERT_EXPR, type, expr);
+     }
+ 
+   /* In all other cases of related types, make a NOP_EXPR.  */
+   else if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (etype))
+     return fold_convert (type, expr);
+ 
+   switch (code)
+     {
+     case VOID_TYPE:
+       return fold_build1 (CONVERT_EXPR, type, expr);
+ 
+     case INTEGER_TYPE:
+       if (TYPE_HAS_ACTUAL_BOUNDS_P (type)
+ 	  && (ecode == ARRAY_TYPE || ecode == UNCONSTRAINED_ARRAY_TYPE
+ 	      || (ecode == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (etype))))
+ 	return unchecked_convert (type, expr, false);
+ 
+       /* If the output is a biased type, convert first to the base type and
+ 	 subtract the bias.  Note that the bias itself must go through a full
+ 	 conversion to the base type, lest it is a biased value; this happens
+ 	 for subtypes of biased types.  */
+       if (TYPE_BIASED_REPRESENTATION_P (type))
+ 	return fold_convert (type,
+ 			     fold_build2 (MINUS_EXPR, TREE_TYPE (type),
+ 					  convert (TREE_TYPE (type), expr),
+ 					  convert (TREE_TYPE (type),
+ 						   TYPE_MIN_VALUE (type))));
+ 
+       /* If we are converting an additive expression to an integer type
+ 	 with lower precision, be wary of the optimization that can be
+ 	 applied by convert_to_integer.  There are 2 problematic cases:
+ 	   - if the first operand was originally of a biased type,
+ 	     because we could be recursively called to convert it
+ 	     to an intermediate type and thus rematerialize the
+ 	     additive operator endlessly,
+ 	   - if the expression contains a placeholder, because an
+ 	     intermediate conversion that changes the sign could
+ 	     be inserted and thus introduce an artificial overflow
+ 	     at compile time when the placeholder is substituted.  */
+       if (ecode == INTEGER_TYPE
+ 	  && TYPE_PRECISION (type) < TYPE_PRECISION (etype)
+ 	  && (TREE_CODE (expr) == PLUS_EXPR || TREE_CODE (expr) == MINUS_EXPR))
+ 	{
+ 	  tree op0 = get_unwidened (TREE_OPERAND (expr, 0), type);
+ 
+ 	  if ((TREE_CODE (TREE_TYPE (op0)) == INTEGER_TYPE
+ 	       && TYPE_BIASED_REPRESENTATION_P (TREE_TYPE (op0)))
+ 	      || CONTAINS_PLACEHOLDER_P (expr))
+ 	    return fold_convert (type, expr);
+ 	}
+ 
+       /* ... fall through ... */
+ 
+     case ENUMERAL_TYPE:
+       return fold (convert_to_integer (type, expr));
+ 
+     case BOOLEAN_TYPE:
+       /* Do not use convert_to_integer with boolean types.  */
+       return fold_convert_loc (EXPR_LOCATION (expr), type, expr);
+ 
+     case POINTER_TYPE:
+     case REFERENCE_TYPE:
+       /* If converting between two thin pointers, adjust if needed to account
+ 	 for differing offsets from the base pointer, depending on whether
+ 	 there is a TYPE_UNCONSTRAINED_ARRAY attached to the record type.  */
+       if (TYPE_IS_THIN_POINTER_P (etype) && TYPE_IS_THIN_POINTER_P (type))
+ 	{
+ 	  tree etype_pos
+ 	    = TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (etype))
+ 	      ? byte_position (DECL_CHAIN (TYPE_FIELDS (TREE_TYPE (etype))))
+ 	      : size_zero_node;
+ 	  tree type_pos
+ 	    = TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))
+ 	      ? byte_position (DECL_CHAIN (TYPE_FIELDS (TREE_TYPE (type))))
+ 	      : size_zero_node;
+ 	  tree byte_diff = size_diffop (type_pos, etype_pos);
+ 
+ 	  expr = build1 (NOP_EXPR, type, expr);
+ 	  if (integer_zerop (byte_diff))
+ 	    return expr;
+ 
+ 	  return build_binary_op (POINTER_PLUS_EXPR, type, expr,
+ 				  fold_convert (sizetype, byte_diff));
+ 	}
+ 
+       /* If converting fat pointer to normal or thin pointer, get the pointer
+ 	 to the array and then convert it.  */
+       if (TYPE_IS_FAT_POINTER_P (etype))
+ 	expr = build_component_ref (expr, TYPE_FIELDS (etype), false);
+ 
+       return fold (convert_to_pointer (type, expr));
+ 
+     case REAL_TYPE:
+       return fold (convert_to_real (type, expr));
+ 
+     case RECORD_TYPE:
+       /* Do a normal conversion between scalar and justified modular type.  */
+       if (TYPE_JUSTIFIED_MODULAR_P (type) && !AGGREGATE_TYPE_P (etype))
+ 	{
+ 	  vec<constructor_elt, va_gc> *v;
+ 	  vec_alloc (v, 1);
+ 
+ 	  CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (type),
+ 				  convert (TREE_TYPE (TYPE_FIELDS (type)),
+ 					   expr));
+ 	  return gnat_build_constructor (type, v);
+ 	}
+ 
+       /* In these cases, assume the front-end has validated the conversion.
+ 	 If the conversion is valid, it will be a bit-wise conversion, so
+ 	 it can be viewed as an unchecked conversion.  */
+       return unchecked_convert (type, expr, false);
+ 
+     case ARRAY_TYPE:
+       /* Do a normal conversion between unconstrained and constrained array
+ 	 type, assuming the latter is a constrained version of the former.  */
+       if (TREE_CODE (expr) == INDIRECT_REF
+ 	  && ecode == ARRAY_TYPE
+ 	  && TREE_TYPE (etype) == TREE_TYPE (type))
+ 	{
+ 	  tree ptr_type = build_pointer_type (type);
+ 	  tree t = build_unary_op (INDIRECT_REF, NULL_TREE,
+ 				   fold_convert (ptr_type,
+ 						 TREE_OPERAND (expr, 0)));
+ 	  TREE_READONLY (t) = TREE_READONLY (expr);
+ 	  TREE_THIS_NOTRAP (t) = TREE_THIS_NOTRAP (expr);
+ 	  return t;
+ 	}
+ 
+       /* In these cases, assume the front-end has validated the conversion.
+ 	 If the conversion is valid, it will be a bit-wise conversion, so
+ 	 it can be viewed as an unchecked conversion.  */
+       return unchecked_convert (type, expr, false);
+ 
+     case UNION_TYPE:
+       /* This is a either a conversion between a tagged type and some
+ 	 subtype, which we have to mark as a UNION_TYPE because of
+ 	 overlapping fields or a conversion of an Unchecked_Union.  */
+       return unchecked_convert (type, expr, false);
+ 
+     case UNCONSTRAINED_ARRAY_TYPE:
+       /* If the input is a VECTOR_TYPE, convert to the representative
+ 	 array type first.  */
+       if (ecode == VECTOR_TYPE)
+ 	{
+ 	  expr = convert (TYPE_REPRESENTATIVE_ARRAY (etype), expr);
+ 	  etype = TREE_TYPE (expr);
+ 	  ecode = TREE_CODE (etype);
+ 	}
+ 
+       /* If EXPR is a constrained array, take its address, convert it to a
+ 	 fat pointer, and then dereference it.  Likewise if EXPR is a
+ 	 record containing both a template and a constrained array.
+ 	 Note that a record representing a justified modular type
+ 	 always represents a packed constrained array.  */
+       if (ecode == ARRAY_TYPE
+ 	  || (ecode == INTEGER_TYPE && TYPE_HAS_ACTUAL_BOUNDS_P (etype))
+ 	  || (ecode == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (etype))
+ 	  || (ecode == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (etype)))
+ 	return
+ 	  build_unary_op
+ 	    (INDIRECT_REF, NULL_TREE,
+ 	     convert_to_fat_pointer (TREE_TYPE (type),
+ 				     build_unary_op (ADDR_EXPR,
+ 						     NULL_TREE, expr)));
+ 
+       /* Do something very similar for converting one unconstrained
+ 	 array to another.  */
+       else if (ecode == UNCONSTRAINED_ARRAY_TYPE)
+ 	return
+ 	  build_unary_op (INDIRECT_REF, NULL_TREE,
+ 			  convert (TREE_TYPE (type),
+ 				   build_unary_op (ADDR_EXPR,
+ 						   NULL_TREE, expr)));
+       else
+ 	gcc_unreachable ();
+ 
+     case COMPLEX_TYPE:
+       return fold (convert_to_complex (type, expr));
+ 
+     default:
+       gcc_unreachable ();
+     }
+ }
+ 
+ /* Create an expression whose value is that of EXPR converted to the common
+    index type, which is sizetype.  EXPR is supposed to be in the base type
+    of the GNAT index type.  Calling it is equivalent to doing
+ 
+      convert (sizetype, expr)
+ 
+    but we try to distribute the type conversion with the knowledge that EXPR
+    cannot overflow in its type.  This is a best-effort approach and we fall
+    back to the above expression as soon as difficulties are encountered.
+ 
+    This is necessary to overcome issues that arise when the GNAT base index
+    type and the GCC common index type (sizetype) don't have the same size,
+    which is quite frequent on 64-bit architectures.  In this case, and if
+    the GNAT base index type is signed but the iteration type of the loop has
+    been forced to unsigned, the loop scalar evolution engine cannot compute
+    a simple evolution for the general induction variables associated with the
+    array indices, because it will preserve the wrap-around semantics in the
+    unsigned type of their "inner" part.  As a result, many loop optimizations
+    are blocked.
+ 
+    The solution is to use a special (basic) induction variable that is at
+    least as large as sizetype, and to express the aforementioned general
+    induction variables in terms of this induction variable, eliminating
+    the problematic intermediate truncation to the GNAT base index type.
+    This is possible as long as the original expression doesn't overflow
+    and if the middle-end hasn't introduced artificial overflows in the
+    course of the various simplification it can make to the expression.  */
+ 
+ tree
+ convert_to_index_type (tree expr)
+ {
+   enum tree_code code = TREE_CODE (expr);
+   tree type = TREE_TYPE (expr);
+ 
+   /* If the type is unsigned, overflow is allowed so we cannot be sure that
+      EXPR doesn't overflow.  Keep it simple if optimization is disabled.  */
+   if (TYPE_UNSIGNED (type) || !optimize || optimize_debug)
+     return convert (sizetype, expr);
+ 
+   switch (code)
+     {
+     case VAR_DECL:
+       /* The main effect of the function: replace a loop parameter with its
+ 	 associated special induction variable.  */
+       if (DECL_LOOP_PARM_P (expr) && DECL_INDUCTION_VAR (expr))
+ 	expr = DECL_INDUCTION_VAR (expr);
+       break;
+ 
+     CASE_CONVERT:
+       {
+ 	tree otype = TREE_TYPE (TREE_OPERAND (expr, 0));
+ 	/* Bail out as soon as we suspect some sort of type frobbing.  */
+ 	if (TYPE_PRECISION (type) != TYPE_PRECISION (otype)
+ 	    || TYPE_UNSIGNED (type) != TYPE_UNSIGNED (otype))
+ 	  break;
+       }
+ 
+       /* ... fall through ... */
+ 
+     case NON_LVALUE_EXPR:
+       return fold_build1 (code, sizetype,
+ 			  convert_to_index_type (TREE_OPERAND (expr, 0)));
+ 
+     case PLUS_EXPR:
+     case MINUS_EXPR:
+     case MULT_EXPR:
+       return fold_build2 (code, sizetype,
+ 			  convert_to_index_type (TREE_OPERAND (expr, 0)),
+ 			  convert_to_index_type (TREE_OPERAND (expr, 1)));
+ 
+     case COMPOUND_EXPR:
+       return fold_build2 (code, sizetype, TREE_OPERAND (expr, 0),
+ 			  convert_to_index_type (TREE_OPERAND (expr, 1)));
+ 
+     case COND_EXPR:
+       return fold_build3 (code, sizetype, TREE_OPERAND (expr, 0),
+ 			  convert_to_index_type (TREE_OPERAND (expr, 1)),
+ 			  convert_to_index_type (TREE_OPERAND (expr, 2)));
+ 
+     default:
+       break;
+     }
+ 
+   return convert (sizetype, expr);
+ }
+ 
+ /* Remove all conversions that are done in EXP.  This includes converting
+    from a padded type or to a justified modular type.  If TRUE_ADDRESS
+    is true, always return the address of the containing object even if
+    the address is not bit-aligned.  */
+ 
+ tree
+ remove_conversions (tree exp, bool true_address)
+ {
+   switch (TREE_CODE (exp))
+     {
+     case CONSTRUCTOR:
+       if (true_address
+ 	  && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
+ 	  && TYPE_JUSTIFIED_MODULAR_P (TREE_TYPE (exp)))
+ 	return
+ 	  remove_conversions (CONSTRUCTOR_ELT (exp, 0)->value, true);
+       break;
+ 
+     case COMPONENT_REF:
+       if (TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (exp, 0))))
+ 	return remove_conversions (TREE_OPERAND (exp, 0), true_address);
+       break;
+ 
+     CASE_CONVERT:
+     case VIEW_CONVERT_EXPR:
+     case NON_LVALUE_EXPR:
+       return remove_conversions (TREE_OPERAND (exp, 0), true_address);
+ 
+     default:
+       break;
+     }
+ 
+   return exp;
+ }
+ 
+ /* If EXP's type is an UNCONSTRAINED_ARRAY_TYPE, return an expression that
+    refers to the underlying array.  If it has TYPE_CONTAINS_TEMPLATE_P,
+    likewise return an expression pointing to the underlying array.  */
+ 
+ tree
+ maybe_unconstrained_array (tree exp)
+ {
+   enum tree_code code = TREE_CODE (exp);
+   tree type = TREE_TYPE (exp);
+ 
+   switch (TREE_CODE (type))
+     {
+     case UNCONSTRAINED_ARRAY_TYPE:
+       if (code == UNCONSTRAINED_ARRAY_REF)
+ 	{
+ 	  const bool read_only = TREE_READONLY (exp);
+ 	  const bool no_trap = TREE_THIS_NOTRAP (exp);
+ 
+ 	  exp = TREE_OPERAND (exp, 0);
+ 	  type = TREE_TYPE (exp);
+ 
+ 	  if (TREE_CODE (exp) == COND_EXPR)
+ 	    {
+ 	      tree op1
+ 		= build_unary_op (INDIRECT_REF, NULL_TREE,
+ 				  build_component_ref (TREE_OPERAND (exp, 1),
+ 						       TYPE_FIELDS (type),
+ 						       false));
+ 	      tree op2
+ 		= build_unary_op (INDIRECT_REF, NULL_TREE,
+ 				  build_component_ref (TREE_OPERAND (exp, 2),
+ 						       TYPE_FIELDS (type),
+ 						       false));
+ 
+ 	      exp = build3 (COND_EXPR,
+ 			    TREE_TYPE (TREE_TYPE (TYPE_FIELDS (type))),
+ 			    TREE_OPERAND (exp, 0), op1, op2);
+ 	    }
+ 	  else
+ 	    {
+ 	      exp = build_unary_op (INDIRECT_REF, NULL_TREE,
+ 				    build_component_ref (exp,
+ 							 TYPE_FIELDS (type),
+ 						         false));
+ 	      TREE_READONLY (exp) = read_only;
+ 	      TREE_THIS_NOTRAP (exp) = no_trap;
+ 	    }
+ 	}
+ 
+       else if (code == NULL_EXPR)
+ 	exp = build1 (NULL_EXPR,
+ 		      TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (type)))),
+ 		      TREE_OPERAND (exp, 0));
+       break;
+ 
+     case RECORD_TYPE:
+       /* If this is a padded type and it contains a template, convert to the
+ 	 unpadded type first.  */
+       if (TYPE_PADDING_P (type)
+ 	  && TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == RECORD_TYPE
+ 	  && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (TYPE_FIELDS (type))))
+ 	{
+ 	  exp = convert (TREE_TYPE (TYPE_FIELDS (type)), exp);
+ 	  code = TREE_CODE (exp);
+ 	  type = TREE_TYPE (exp);
+ 	}
+ 
+       if (TYPE_CONTAINS_TEMPLATE_P (type))
+ 	{
+ 	  /* If the array initializer is a box, return NULL_TREE.  */
+ 	  if (code == CONSTRUCTOR && CONSTRUCTOR_NELTS (exp) < 2)
+ 	    return NULL_TREE;
+ 
+ 	  exp = build_component_ref (exp, DECL_CHAIN (TYPE_FIELDS (type)),
+ 				     false);
+ 
+ 	  /* If the array is padded, remove the padding.  */
+ 	  exp = maybe_padded_object (exp);
+ 	}
+       break;
+ 
+     default:
+       break;
+     }
+ 
+   return exp;
+ }
+ 
+ /* Return true if EXPR is an expression that can be folded as an operand
+    of a VIEW_CONVERT_EXPR.  See ada-tree.h for a complete rationale.  */
+ 
+ static bool
+ can_fold_for_view_convert_p (tree expr)
+ {
+   tree t1, t2;
+ 
+   /* The folder will fold NOP_EXPRs between integral types with the same
+      precision (in the middle-end's sense).  We cannot allow it if the
+      types don't have the same precision in the Ada sense as well.  */
+   if (TREE_CODE (expr) != NOP_EXPR)
+     return true;
+ 
+   t1 = TREE_TYPE (expr);
+   t2 = TREE_TYPE (TREE_OPERAND (expr, 0));
+ 
+   /* Defer to the folder for non-integral conversions.  */
+   if (!(INTEGRAL_TYPE_P (t1) && INTEGRAL_TYPE_P (t2)))
+     return true;
+ 
+   /* Only fold conversions that preserve both precisions.  */
+   if (TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
+       && operand_equal_p (rm_size (t1), rm_size (t2), 0))
+     return true;
+ 
+   return false;
+ }
+ 
+ /* Return an expression that does an unchecked conversion of EXPR to TYPE.
+    If NOTRUNC_P is true, truncation operations should be suppressed.
+ 
+    Special care is required with (source or target) integral types whose
+    precision is not equal to their size, to make sure we fetch or assign
+    the value bits whose location might depend on the endianness, e.g.
+ 
+      Rmsize : constant := 8;
+      subtype Int is Integer range 0 .. 2 ** Rmsize - 1;
+ 
+      type Bit_Array is array (1 .. Rmsize) of Boolean;
+      pragma Pack (Bit_Array);
+ 
+      function To_Bit_Array is new Unchecked_Conversion (Int, Bit_Array);
+ 
+      Value : Int := 2#1000_0001#;
+      Vbits : Bit_Array := To_Bit_Array (Value);
+ 
+    we expect the 8 bits at Vbits'Address to always contain Value, while
+    their original location depends on the endianness, at Value'Address
+    on a little-endian architecture but not on a big-endian one.
+ 
+    One pitfall is that we cannot use TYPE_UNSIGNED directly to decide how
+    the bits between the precision and the size are filled, because of the
+    trick used in the E_Signed_Integer_Subtype case of gnat_to_gnu_entity.
+    So we use the special predicate type_unsigned_for_rm above.  */
+ 
+ tree
+ unchecked_convert (tree type, tree expr, bool notrunc_p)
+ {
+   tree etype = TREE_TYPE (expr);
+   enum tree_code ecode = TREE_CODE (etype);
+   enum tree_code code = TREE_CODE (type);
+   const bool ebiased
+     = (ecode == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (etype));
+   const bool biased
+     = (code == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (type));
+   const bool ereverse
+     = (AGGREGATE_TYPE_P (etype) && TYPE_REVERSE_STORAGE_ORDER (etype));
+   const bool reverse
+     = (AGGREGATE_TYPE_P (type) && TYPE_REVERSE_STORAGE_ORDER (type));
+   tree tem;
+   int c = 0;
+ 
+   /* If the expression is already of the right type, we are done.  */
+   if (etype == type)
+     return expr;
+ 
+   /* If both types are integral or regular pointer, then just do a normal
+      conversion.  Likewise for a conversion to an unconstrained array.  */
+   if (((INTEGRAL_TYPE_P (type)
+ 	|| (POINTER_TYPE_P (type) && !TYPE_IS_THIN_POINTER_P (type))
+ 	|| (code == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (type)))
+        && (INTEGRAL_TYPE_P (etype)
+ 	   || (POINTER_TYPE_P (etype) && !TYPE_IS_THIN_POINTER_P (etype))
+ 	   || (ecode == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (etype))))
+       || code == UNCONSTRAINED_ARRAY_TYPE)
+     {
+       if (ebiased)
+ 	{
+ 	  tree ntype = copy_type (etype);
+ 	  TYPE_BIASED_REPRESENTATION_P (ntype) = 0;
+ 	  TYPE_MAIN_VARIANT (ntype) = ntype;
+ 	  expr = build1 (NOP_EXPR, ntype, expr);
+ 	}
+ 
+       if (biased)
+ 	{
+ 	  tree rtype = copy_type (type);
+ 	  TYPE_BIASED_REPRESENTATION_P (rtype) = 0;
+ 	  TYPE_MAIN_VARIANT (rtype) = rtype;
+ 	  expr = convert (rtype, expr);
+ 	  expr = build1 (NOP_EXPR, type, expr);
+ 	}
+       else
+ 	expr = convert (type, expr);
+     }
+ 
+   /* If we are converting to an integral type whose precision is not equal
+      to its size, first unchecked convert to a record type that contains a
+      field of the given precision.  Then extract the result from the field.
+ 
+      There is a subtlety if the source type is an aggregate type with reverse
+      storage order because its representation is not contiguous in the native
+      storage order, i.e. a direct unchecked conversion to an integral type
+      with N bits of precision cannot read the first N bits of the aggregate
+      type.  To overcome it, we do an unchecked conversion to an integral type
+      with reverse storage order and return the resulting value.  This also
+      ensures that the result of the unchecked conversion doesn't depend on
+      the endianness of the target machine, but only on the storage order of
+      the aggregate type.
+ 
+      Finally, for the sake of consistency, we do the unchecked conversion
+      to an integral type with reverse storage order as soon as the source
+      type is an aggregate type with reverse storage order, even if there
+      are no considerations of precision or size involved.  Ultimately, we
+      further extend this processing to any scalar type.  */
+   else if ((INTEGRAL_TYPE_P (type)
+ 	    && TYPE_RM_SIZE (type)
+ 	    && ((c = tree_int_cst_compare (TYPE_RM_SIZE (type),
+ 					   TYPE_SIZE (type))) < 0
+ 		|| ereverse))
+ 	   || (SCALAR_FLOAT_TYPE_P (type) && ereverse))
+     {
+       tree rec_type = make_node (RECORD_TYPE);
+       tree field_type, field;
+ 
+       TYPE_REVERSE_STORAGE_ORDER (rec_type) = ereverse;
+ 
+       if (c < 0)
+ 	{
+ 	  const unsigned HOST_WIDE_INT prec
+ 	    = TREE_INT_CST_LOW (TYPE_RM_SIZE (type));
+ 	  if (type_unsigned_for_rm (type))
+ 	    field_type = make_unsigned_type (prec);
+ 	  else
+ 	    field_type = make_signed_type (prec);
+ 	  SET_TYPE_RM_SIZE (field_type, TYPE_RM_SIZE (type));
+ 	}
+       else
+ 	field_type = type;
+ 
+       field = create_field_decl (get_identifier ("OBJ"), field_type, rec_type,
+ 				 NULL_TREE, bitsize_zero_node, c < 0, 0);
+ 
+       finish_record_type (rec_type, field, 1, false);
+ 
+       expr = unchecked_convert (rec_type, expr, notrunc_p);
+       expr = build_component_ref (expr, field, false);
+       expr = fold_build1 (NOP_EXPR, type, expr);
+     }
+ 
+   /* Similarly if we are converting from an integral type whose precision is
+      not equal to its size, first copy into a field of the given precision
+      and unchecked convert the record type.
+ 
+      The same considerations as above apply if the target type is an aggregate
+      type with reverse storage order and we also proceed similarly.  */
+   else if ((INTEGRAL_TYPE_P (etype)
+ 	    && TYPE_RM_SIZE (etype)
+ 	    && ((c = tree_int_cst_compare (TYPE_RM_SIZE (etype),
+ 					   TYPE_SIZE (etype))) < 0
+ 		|| reverse))
+ 	   || (SCALAR_FLOAT_TYPE_P (etype) && reverse))
+     {
+       tree rec_type = make_node (RECORD_TYPE);
+       vec<constructor_elt, va_gc> *v;
+       vec_alloc (v, 1);
+       tree field_type, field;
+ 
+       TYPE_REVERSE_STORAGE_ORDER (rec_type) = reverse;
+ 
+       if (c < 0)
+ 	{
+ 	  const unsigned HOST_WIDE_INT prec
+ 	    = TREE_INT_CST_LOW (TYPE_RM_SIZE (etype));
+ 	  if (type_unsigned_for_rm (etype))
+ 	    field_type = make_unsigned_type (prec);
+ 	  else
+ 	    field_type = make_signed_type (prec);
+ 	  SET_TYPE_RM_SIZE (field_type, TYPE_RM_SIZE (etype));
+ 	}
+       else
+ 	field_type = etype;
+ 
+       field = create_field_decl (get_identifier ("OBJ"), field_type, rec_type,
+ 				 NULL_TREE, bitsize_zero_node, c < 0, 0);
+ 
+       finish_record_type (rec_type, field, 1, false);
+ 
+       expr = fold_build1 (NOP_EXPR, field_type, expr);
+       CONSTRUCTOR_APPEND_ELT (v, field, expr);
+       expr = gnat_build_constructor (rec_type, v);
+       expr = unchecked_convert (type, expr, notrunc_p);
+     }
+ 
+   /* If we are converting from a scalar type to a type with a different size,
+      we need to pad to have the same size on both sides.
+ 
+      ??? We cannot do it unconditionally because unchecked conversions are
+      used liberally by the front-end to implement interface thunks:
+ 
+        type ada__tags__addr_ptr is access system.address;
+        S191s : constant ada__tags__addr_ptr := ada__tags__addr_ptr!(S190s);
+        return p___size__4 (p__object!(S191s.all));
+ 
+      so we need to skip dereferences.  */
+   else if (!INDIRECT_REF_P (expr)
+ 	   && !AGGREGATE_TYPE_P (etype)
+ 	   && ecode != UNCONSTRAINED_ARRAY_TYPE
+ 	   && TREE_CONSTANT (TYPE_SIZE (type))
+ 	   && (c = tree_int_cst_compare (TYPE_SIZE (etype), TYPE_SIZE (type))))
+     {
+       if (c < 0)
+ 	{
+ 	  expr = convert (maybe_pad_type (etype, TYPE_SIZE (type), 0, Empty,
+ 					  false, false, true),
+ 			  expr);
+ 	  expr = unchecked_convert (type, expr, notrunc_p);
+ 	}
+       else
+ 	{
+ 	  tree rec_type = maybe_pad_type (type, TYPE_SIZE (etype), 0, Empty,
+ 					  false, false, true);
+ 	  expr = unchecked_convert (rec_type, expr, notrunc_p);
+ 	  expr = build_component_ref (expr, TYPE_FIELDS (rec_type), false);
+ 	}
+     }
+ 
+   /* Likewise if we are converting from a scalar type to a type with self-
+      referential size.  We use the max size to do the padding in this case.  */
+   else if (!INDIRECT_REF_P (expr)
+ 	   && !AGGREGATE_TYPE_P (etype)
+ 	   && ecode != UNCONSTRAINED_ARRAY_TYPE
+ 	   && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type)))
+     {
+       tree new_size = max_size (TYPE_SIZE (type), true);
+       c = tree_int_cst_compare (TYPE_SIZE (etype), new_size);
+       if (c < 0)
+ 	{
+ 	  expr = convert (maybe_pad_type (etype, new_size, 0, Empty,
+ 					  false, false, true),
+ 			  expr);
+ 	  expr = unchecked_convert (type, expr, notrunc_p);
+ 	}
+       else
+ 	{
+ 	  tree rec_type = maybe_pad_type (type, TYPE_SIZE (etype), 0, Empty,
+ 					  false, false, true);
+ 	  expr = unchecked_convert (rec_type, expr, notrunc_p);
+ 	  expr = build_component_ref (expr, TYPE_FIELDS (rec_type), false);
+ 	}
+     }
+ 
+   /* We have a special case when we are converting between two unconstrained
+      array types.  In that case, take the address, convert the fat pointer
+      types, and dereference.  */
+   else if (ecode == code && code == UNCONSTRAINED_ARRAY_TYPE)
+     expr = build_unary_op (INDIRECT_REF, NULL_TREE,
+ 			   build1 (VIEW_CONVERT_EXPR, TREE_TYPE (type),
+ 				   build_unary_op (ADDR_EXPR, NULL_TREE,
+ 						   expr)));
+ 
+   /* Another special case is when we are converting to a vector type from its
+      representative array type; this a regular conversion.  */
+   else if (code == VECTOR_TYPE
+ 	   && ecode == ARRAY_TYPE
+ 	   && gnat_types_compatible_p (TYPE_REPRESENTATIVE_ARRAY (type),
+ 				       etype))
+     expr = convert (type, expr);
+ 
+   /* And, if the array type is not the representative, we try to build an
+      intermediate vector type of which the array type is the representative
+      and to do the unchecked conversion between the vector types, in order
+      to enable further simplifications in the middle-end.  */
+   else if (code == VECTOR_TYPE
+ 	   && ecode == ARRAY_TYPE
+ 	   && (tem = build_vector_type_for_array (etype, NULL_TREE)))
+     {
+       expr = convert (tem, expr);
+       return unchecked_convert (type, expr, notrunc_p);
+     }
+ 
+   /* If we are converting a CONSTRUCTOR to a more aligned aggregate type, bump
+      the alignment of the CONSTRUCTOR to speed up the copy operation.  But do
+      not do it for a conversion between original and packable version to avoid
+      an infinite recursion.  */
+   else if (TREE_CODE (expr) == CONSTRUCTOR
+ 	   && AGGREGATE_TYPE_P (type)
+ 	   && TYPE_NAME (type) != TYPE_NAME (etype)
+ 	   && TYPE_ALIGN (etype) < TYPE_ALIGN (type))
+     {
+       expr = convert (maybe_pad_type (etype, NULL_TREE, TYPE_ALIGN (type),
+ 				      Empty, false, false, true),
+ 		      expr);
+       return unchecked_convert (type, expr, notrunc_p);
+     }
+ 
+   /* If we are converting a CONSTRUCTOR to a larger aggregate type, bump the
+      size of the CONSTRUCTOR to make sure there are enough allocated bytes.
+      But do not do it for a conversion between original and packable version
+      to avoid an infinite recursion.  */
+   else if (TREE_CODE (expr) == CONSTRUCTOR
+ 	   && AGGREGATE_TYPE_P (type)
+ 	   && TYPE_NAME (type) != TYPE_NAME (etype)
+ 	   && TREE_CONSTANT (TYPE_SIZE (type))
+ 	   && (!TREE_CONSTANT (TYPE_SIZE (etype))
+ 	       || tree_int_cst_lt (TYPE_SIZE (etype), TYPE_SIZE (type))))
+     {
+       expr = convert (maybe_pad_type (etype, TYPE_SIZE (type), 0,
+ 				      Empty, false, false, true),
+ 		      expr);
+       return unchecked_convert (type, expr, notrunc_p);
+     }
+ 
+   /* Otherwise, just build a VIEW_CONVERT_EXPR of the expression.  */
+   else
+     {
+       expr = maybe_unconstrained_array (expr);
+       etype = TREE_TYPE (expr);
+       ecode = TREE_CODE (etype);
+       if (can_fold_for_view_convert_p (expr))
+ 	expr = fold_build1 (VIEW_CONVERT_EXPR, type, expr);
+       else
+ 	expr = build1 (VIEW_CONVERT_EXPR, type, expr);
+     }
+ 
+   /* If the result is a non-biased integral type whose precision is not equal
+      to its size, sign- or zero-extend the result.  But we need not do this
+      if the input is also an integral type and both are unsigned or both are
+      signed and have the same precision.  */
+   tree type_rm_size;
+   if (!notrunc_p
+       && !biased
+       && INTEGRAL_TYPE_P (type)
+       && (type_rm_size = TYPE_RM_SIZE (type))
+       && tree_int_cst_compare (type_rm_size, TYPE_SIZE (type)) < 0
+       && !(INTEGRAL_TYPE_P (etype)
+ 	   && type_unsigned_for_rm (type) == type_unsigned_for_rm (etype)
+ 	   && (type_unsigned_for_rm (type)
+ 	       || tree_int_cst_compare (type_rm_size,
+ 					TYPE_RM_SIZE (etype)
+ 					? TYPE_RM_SIZE (etype)
+ 					: TYPE_SIZE (etype)) == 0)))
+     {
+       if (integer_zerop (type_rm_size))
+ 	expr = build_int_cst (type, 0);
+       else
+ 	{
+ 	  tree base_type
+ 	    = gnat_type_for_size (TREE_INT_CST_LOW (TYPE_SIZE (type)),
+ 				  type_unsigned_for_rm (type));
+ 	  tree shift_expr
+ 	    = convert (base_type,
+ 		       size_binop (MINUS_EXPR,
+ 				   TYPE_SIZE (type), type_rm_size));
+ 	  expr
+ 	    = convert (type,
+ 		       build_binary_op (RSHIFT_EXPR, base_type,
+ 				        build_binary_op (LSHIFT_EXPR, base_type,
+ 							 convert (base_type,
+ 								  expr),
+ 							 shift_expr),
+ 				        shift_expr));
+ 	}
+     }
+ 
+   /* An unchecked conversion should never raise Constraint_Error.  The code
+      below assumes that GCC's conversion routines overflow the same way that
+      the underlying hardware does.  This is probably true.  In the rare case
+      when it is false, we can rely on the fact that such conversions are
+      erroneous anyway.  */
+   if (TREE_CODE (expr) == INTEGER_CST)
+     TREE_OVERFLOW (expr) = 0;
+ 
+   /* If the sizes of the types differ and this is an VIEW_CONVERT_EXPR,
+      show no longer constant.  */
+   if (TREE_CODE (expr) == VIEW_CONVERT_EXPR
+       && !operand_equal_p (TYPE_SIZE_UNIT (type), TYPE_SIZE_UNIT (etype),
+ 			   OEP_ONLY_CONST))
+     TREE_CONSTANT (expr) = 0;
+ 
+   return expr;
+ }
+ 
+ /* Return the appropriate GCC tree code for the specified GNAT_TYPE,
+    the latter being a record type as predicated by Is_Record_Type.  */
+ 
+ enum tree_code
+ tree_code_for_record_type (Entity_Id gnat_type)
+ {
+   Node_Id component_list, component;
+ 
+   /* Return UNION_TYPE if it's an Unchecked_Union whose non-discriminant
+      fields are all in the variant part.  Otherwise, return RECORD_TYPE.  */
+   if (!Is_Unchecked_Union (gnat_type))
+     return RECORD_TYPE;
+ 
+   gnat_type = Implementation_Base_Type (gnat_type);
+   component_list
+     = Component_List (Type_Definition (Declaration_Node (gnat_type)));
+ 
+   for (component = First_Non_Pragma (Component_Items (component_list));
+        Present (component);
+        component = Next_Non_Pragma (component))
+     if (Ekind (Defining_Entity (component)) == E_Component)
+       return RECORD_TYPE;
+ 
+   return UNION_TYPE;
+ }
+ 
+ /* Return true if GNAT_TYPE is a "double" floating-point type, i.e. whose
+    size is equal to 64 bits, or an array of such a type.  Set ALIGN_CLAUSE
+    according to the presence of an alignment clause on the type or, if it
+    is an array, on the component type.  */
+ 
+ bool
+ is_double_float_or_array (Entity_Id gnat_type, bool *align_clause)
+ {
+   gnat_type = Underlying_Type (gnat_type);
+ 
+   *align_clause = Present (Alignment_Clause (gnat_type));
+ 
+   if (Is_Array_Type (gnat_type))
+     {
+       gnat_type = Underlying_Type (Component_Type (gnat_type));
+       if (Present (Alignment_Clause (gnat_type)))
+ 	*align_clause = true;
+     }
+ 
+   if (!Is_Floating_Point_Type (gnat_type))
+     return false;
+ 
+   if (UI_To_Int (Esize (gnat_type)) != 64)
+     return false;
+ 
+   return true;
+ }
+ 
+ /* Return true if GNAT_TYPE is a "double" or larger scalar type, i.e. whose
+    size is greater or equal to 64 bits, or an array of such a type.  Set
+    ALIGN_CLAUSE according to the presence of an alignment clause on the
+    type or, if it is an array, on the component type.  */
+ 
+ bool
+ is_double_scalar_or_array (Entity_Id gnat_type, bool *align_clause)
+ {
+   gnat_type = Underlying_Type (gnat_type);
+ 
+   *align_clause = Present (Alignment_Clause (gnat_type));
+ 
+   if (Is_Array_Type (gnat_type))
+     {
+       gnat_type = Underlying_Type (Component_Type (gnat_type));
+       if (Present (Alignment_Clause (gnat_type)))
+ 	*align_clause = true;
+     }
+ 
+   if (!Is_Scalar_Type (gnat_type))
+     return false;
+ 
+   if (UI_To_Int (Esize (gnat_type)) < 64)
+     return false;
+ 
+   return true;
+ }
+ 
+ /* Return true if GNU_TYPE is suitable as the type of a non-aliased
+    component of an aggregate type.  */
+ 
+ bool
+ type_for_nonaliased_component_p (tree gnu_type)
+ {
+   /* If the type is passed by reference, we may have pointers to the
+      component so it cannot be made non-aliased. */
+   if (must_pass_by_ref (gnu_type) || default_pass_by_ref (gnu_type))
+     return false;
+ 
+   /* We used to say that any component of aggregate type is aliased
+      because the front-end may take 'Reference of it.  The front-end
+      has been enhanced in the meantime so as to use a renaming instead
+      in most cases, but the back-end can probably take the address of
+      such a component too so we go for the conservative stance.
+ 
+      For instance, we might need the address of any array type, even
+      if normally passed by copy, to construct a fat pointer if the
+      component is used as an actual for an unconstrained formal.
+ 
+      Likewise for record types: even if a specific record subtype is
+      passed by copy, the parent type might be passed by ref (e.g. if
+      it's of variable size) and we might take the address of a child
+      component to pass to a parent formal.  We have no way to check
+      for such conditions here.  */
+   if (AGGREGATE_TYPE_P (gnu_type))
+     return false;
+ 
+   return true;
+ }
+ 
+ /* Return true if TYPE is a smaller form of ORIG_TYPE.  */
+ 
+ bool
+ smaller_form_type_p (tree type, tree orig_type)
+ {
+   tree size, osize;
+ 
+   /* We're not interested in variants here.  */
+   if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (orig_type))
+     return false;
+ 
+   /* Like a variant, a packable version keeps the original TYPE_NAME.  */
+   if (TYPE_NAME (type) != TYPE_NAME (orig_type))
+     return false;
+ 
+   size = TYPE_SIZE (type);
+   osize = TYPE_SIZE (orig_type);
+ 
+   if (!(TREE_CODE (size) == INTEGER_CST && TREE_CODE (osize) == INTEGER_CST))
+     return false;
+ 
+   return tree_int_cst_lt (size, osize) != 0;
+ }
+ 
+ /* Return whether EXPR, which is the renamed object in an object renaming
+    declaration, can be materialized as a reference (with a REFERENCE_TYPE).
+    This should be synchronized with Exp_Dbug.Debug_Renaming_Declaration.  */
+ 
+ bool
+ can_materialize_object_renaming_p (Node_Id expr)
+ {
+   while (true)
+     {
+       expr = Original_Node (expr);
+ 
+       switch (Nkind (expr))
+ 	{
+ 	case N_Identifier:
+ 	case N_Expanded_Name:
+ 	  if (!Present (Renamed_Object (Entity (expr))))
+ 	    return true;
+ 	  expr = Renamed_Object (Entity (expr));
+ 	  break;
+ 
+ 	case N_Selected_Component:
+ 	  {
+ 	    if (Is_Packed (Underlying_Type (Etype (Prefix (expr)))))
+ 	      return false;
+ 
+ 	    const Uint bitpos
+ 	      = Normalized_First_Bit (Entity (Selector_Name (expr)));
+ 	    if (bitpos != UI_No_Uint && bitpos != Uint_0)
+ 	      return false;
+ 
+ 	    expr = Prefix (expr);
+ 	    break;
+ 	  }
+ 
+ 	case N_Indexed_Component:
+ 	case N_Slice:
+ 	  {
+ 	    const Entity_Id t = Underlying_Type (Etype (Prefix (expr)));
+ 
+ 	    if (Is_Array_Type (t) && Present (Packed_Array_Impl_Type (t)))
+ 	      return false;
+ 
+ 	    expr = Prefix (expr);
+ 	    break;
+ 	  }
+ 
+ 	case N_Explicit_Dereference:
+ 	  expr = Prefix (expr);
+ 	  break;
+ 
+ 	default:
+ 	  return true;
+ 	};
+     }
+ }
+ 
+ /* Perform final processing on global declarations.  */
+ 
+ static GTY (()) tree dummy_global;
+ 
+ void
+ gnat_write_global_declarations (void)
+ {
+   unsigned int i;
+   tree iter;
+ 
+   /* If we have declared types as used at the global level, insert them in
+      the global hash table.  We use a dummy variable for this purpose, but
+      we need to build it unconditionally to avoid -fcompare-debug issues.  */
+   if (first_global_object_name)
+     {
+       struct varpool_node *node;
+       char *label;
+ 
+       ASM_FORMAT_PRIVATE_NAME (label, first_global_object_name, ULONG_MAX);
+       dummy_global
+ 	= build_decl (BUILTINS_LOCATION, VAR_DECL, get_identifier (label),
+ 		      void_type_node);
+       DECL_HARD_REGISTER (dummy_global) = 1;
+       TREE_STATIC (dummy_global) = 1;
+       node = varpool_node::get_create (dummy_global);
+       node->definition = 1;
+       node->force_output = 1;
+ 
+       if (types_used_by_cur_var_decl)
+ 	while (!types_used_by_cur_var_decl->is_empty ())
+ 	  {
+ 	    tree t = types_used_by_cur_var_decl->pop ();
+ 	    types_used_by_var_decl_insert (t, dummy_global);
+ 	  }
+     }
+ 
+   /* First output the integral global variables, so that they can be referenced
+      as bounds by the global dynamic types.  Skip external variables, unless we
+      really need to emit debug info for them:, e.g. imported variables.  */
+   FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
+     if (TREE_CODE (iter) == VAR_DECL
+ 	&& INTEGRAL_TYPE_P (TREE_TYPE (iter))
+ 	&& (!DECL_EXTERNAL (iter) || !DECL_IGNORED_P (iter)))
+       rest_of_decl_compilation (iter, true, 0);
+ 
+   /* Now output debug information for the global type declarations.  This
+      ensures that global types whose compilation hasn't been finalized yet,
+      for example pointers to Taft amendment types, have their compilation
+      finalized in the right context.  */
+   FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
+     if (TREE_CODE (iter) == TYPE_DECL && !DECL_IGNORED_P (iter))
+       debug_hooks->type_decl (iter, false);
+ 
+   /* Then output the other global variables.  We need to do that after the
+      information for global types is emitted so that they are finalized.  */
+   FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
+     if (TREE_CODE (iter) == VAR_DECL
+ 	&& !INTEGRAL_TYPE_P (TREE_TYPE (iter))
+ 	&& (!DECL_EXTERNAL (iter) || !DECL_IGNORED_P (iter)))
+       rest_of_decl_compilation (iter, true, 0);
+ 
+   /* Output debug information for the global constants.  */
+   FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
+     if (TREE_CODE (iter) == CONST_DECL && !DECL_IGNORED_P (iter))
+       debug_hooks->early_global_decl (iter);
+ 
+   /* Output it for the imported functions.  */
+   FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
+     if (TREE_CODE (iter) == FUNCTION_DECL
+ 	&& DECL_EXTERNAL (iter)
+ 	&& DECL_INITIAL (iter) == NULL
+ 	&& !DECL_IGNORED_P (iter)
+ 	&& DECL_FUNCTION_IS_DEF (iter))
+       debug_hooks->early_global_decl (iter);
+ 
+   /* Output it for the imported modules/declarations.  In GNAT, these are only
+      materializing subprogram.  */
+   FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter)
+    if (TREE_CODE (iter) == IMPORTED_DECL && !DECL_IGNORED_P (iter))
+      debug_hooks->imported_module_or_decl (iter, DECL_NAME (iter),
+ 					   DECL_CONTEXT (iter), false, false);
+ }
+ 
+ /* ************************************************************************
+  * *                           GCC builtins support                       *
+  * ************************************************************************ */
+ 
+ /* The general scheme is fairly simple:
+ 
+    For each builtin function/type to be declared, gnat_install_builtins calls
+    internal facilities which eventually get to gnat_pushdecl, which in turn
+    tracks the so declared builtin function decls in the 'builtin_decls' global
+    datastructure. When an Intrinsic subprogram declaration is processed, we
+    search this global datastructure to retrieve the associated BUILT_IN DECL
+    node.  */
+ 
+ /* Search the chain of currently available builtin declarations for a node
+    corresponding to function NAME (an IDENTIFIER_NODE).  Return the first node
+    found, if any, or NULL_TREE otherwise.  */
+ tree
+ builtin_decl_for (tree name)
+ {
+   unsigned i;
+   tree decl;
+ 
+   FOR_EACH_VEC_SAFE_ELT (builtin_decls, i, decl)
+     if (DECL_NAME (decl) == name)
+       return decl;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* The code below eventually exposes gnat_install_builtins, which declares
+    the builtin types and functions we might need, either internally or as
+    user accessible facilities.
+ 
+    ??? This is a first implementation shot, still in rough shape.  It is
+    heavily inspired from the "C" family implementation, with chunks copied
+    verbatim from there.
+ 
+    Two obvious improvement candidates are:
+    o Use a more efficient name/decl mapping scheme
+    o Devise a middle-end infrastructure to avoid having to copy
+      pieces between front-ends.  */
+ 
+ /* ----------------------------------------------------------------------- *
+  *                         BUILTIN ELEMENTARY TYPES                        *
+  * ----------------------------------------------------------------------- */
+ 
+ /* Standard data types to be used in builtin argument declarations.  */
+ 
+ enum c_tree_index
+ {
+     CTI_SIGNED_SIZE_TYPE, /* For format checking only.  */
+     CTI_STRING_TYPE,
+     CTI_CONST_STRING_TYPE,
+ 
+     CTI_MAX
+ };
+ 
+ static tree c_global_trees[CTI_MAX];
+ 
+ #define signed_size_type_node	c_global_trees[CTI_SIGNED_SIZE_TYPE]
+ #define string_type_node	c_global_trees[CTI_STRING_TYPE]
+ #define const_string_type_node	c_global_trees[CTI_CONST_STRING_TYPE]
+ 
+ /* ??? In addition some attribute handlers, we currently don't support a
+    (small) number of builtin-types, which in turns inhibits support for a
+    number of builtin functions.  */
+ #define wint_type_node    void_type_node
+ #define intmax_type_node  void_type_node
+ #define uintmax_type_node void_type_node
+ 
+ /* Used to help initialize the builtin-types.def table.  When a type of
+    the correct size doesn't exist, use error_mark_node instead of NULL.
+    The later results in segfaults even when a decl using the type doesn't
+    get invoked.  */
+ 
+ static tree
+ builtin_type_for_size (int size, bool unsignedp)
+ {
+   tree type = gnat_type_for_size (size, unsignedp);
+   return type ? type : error_mark_node;
+ }
+ 
+ /* Build/push the elementary type decls that builtin functions/types
+    will need.  */
+ 
+ static void
+ install_builtin_elementary_types (void)
+ {
+   signed_size_type_node = gnat_signed_type_for (size_type_node);
+   pid_type_node = integer_type_node;
+ 
+   string_type_node = build_pointer_type (char_type_node);
+   const_string_type_node
+     = build_pointer_type (build_qualified_type
+ 			  (char_type_node, TYPE_QUAL_CONST));
+ }
+ 
+ /* ----------------------------------------------------------------------- *
+  *                          BUILTIN FUNCTION TYPES                         *
+  * ----------------------------------------------------------------------- */
+ 
+ /* Now, builtin function types per se.  */
+ 
+ enum c_builtin_type
+ {
+ #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
+ #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
+ #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
+ #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
+ #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
+ #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
+ #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
+ #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 			    ARG6) NAME,
+ #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 			    ARG6, ARG7) NAME,
+ #define DEF_FUNCTION_TYPE_8(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 			    ARG6, ARG7, ARG8) NAME,
+ #define DEF_FUNCTION_TYPE_9(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 			    ARG6, ARG7, ARG8, ARG9) NAME,
+ #define DEF_FUNCTION_TYPE_10(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 			     ARG6, ARG7, ARG8, ARG9, ARG10) NAME,
+ #define DEF_FUNCTION_TYPE_11(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 			     ARG6, ARG7, ARG8, ARG9, ARG10, ARG11) NAME,
+ #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
+ #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
+ #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
+ #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
+ #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
+ #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
+ 				NAME,
+ #define DEF_FUNCTION_TYPE_VAR_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 				ARG6) NAME,
+ #define DEF_FUNCTION_TYPE_VAR_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 				ARG6, ARG7) NAME,
+ #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
+ #include "builtin-types.def"
+ #include "ada-builtin-types.def"
+ #undef DEF_PRIMITIVE_TYPE
+ #undef DEF_FUNCTION_TYPE_0
+ #undef DEF_FUNCTION_TYPE_1
+ #undef DEF_FUNCTION_TYPE_2
+ #undef DEF_FUNCTION_TYPE_3
+ #undef DEF_FUNCTION_TYPE_4
+ #undef DEF_FUNCTION_TYPE_5
+ #undef DEF_FUNCTION_TYPE_6
+ #undef DEF_FUNCTION_TYPE_7
+ #undef DEF_FUNCTION_TYPE_8
+ #undef DEF_FUNCTION_TYPE_9
+ #undef DEF_FUNCTION_TYPE_10
+ #undef DEF_FUNCTION_TYPE_11
+ #undef DEF_FUNCTION_TYPE_VAR_0
+ #undef DEF_FUNCTION_TYPE_VAR_1
+ #undef DEF_FUNCTION_TYPE_VAR_2
+ #undef DEF_FUNCTION_TYPE_VAR_3
+ #undef DEF_FUNCTION_TYPE_VAR_4
+ #undef DEF_FUNCTION_TYPE_VAR_5
+ #undef DEF_FUNCTION_TYPE_VAR_6
+ #undef DEF_FUNCTION_TYPE_VAR_7
+ #undef DEF_POINTER_TYPE
+   BT_LAST
+ };
+ 
+ typedef enum c_builtin_type builtin_type;
+ 
+ /* A temporary array used in communication with def_fn_type.  */
+ static GTY(()) tree builtin_types[(int) BT_LAST + 1];
+ 
+ /* A helper function for install_builtin_types.  Build function type
+    for DEF with return type RET and N arguments.  If VAR is true, then the
+    function should be variadic after those N arguments.
+ 
+    Takes special care not to ICE if any of the types involved are
+    error_mark_node, which indicates that said type is not in fact available
+    (see builtin_type_for_size).  In which case the function type as a whole
+    should be error_mark_node.  */
+ 
+ static void
+ def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
+ {
+   tree t;
+   tree *args = XALLOCAVEC (tree, n);
+   va_list list;
+   int i;
+ 
+   va_start (list, n);
+   for (i = 0; i < n; ++i)
+     {
+       builtin_type a = (builtin_type) va_arg (list, int);
+       t = builtin_types[a];
+       if (t == error_mark_node)
+ 	goto egress;
+       args[i] = t;
+     }
+ 
+   t = builtin_types[ret];
+   if (t == error_mark_node)
+     goto egress;
+   if (var)
+     t = build_varargs_function_type_array (t, n, args);
+   else
+     t = build_function_type_array (t, n, args);
+ 
+  egress:
+   builtin_types[def] = t;
+   va_end (list);
+ }
+ 
+ /* Build the builtin function types and install them in the builtin_types
+    array for later use in builtin function decls.  */
+ 
+ static void
+ install_builtin_function_types (void)
+ {
+   tree va_list_ref_type_node;
+   tree va_list_arg_type_node;
+ 
+   if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
+     {
+       va_list_arg_type_node = va_list_ref_type_node =
+ 	build_pointer_type (TREE_TYPE (va_list_type_node));
+     }
+   else
+     {
+       va_list_arg_type_node = va_list_type_node;
+       va_list_ref_type_node = build_reference_type (va_list_type_node);
+     }
+ 
+ #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
+   builtin_types[ENUM] = VALUE;
+ #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
+   def_fn_type (ENUM, RETURN, 0, 0);
+ #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
+   def_fn_type (ENUM, RETURN, 0, 1, ARG1);
+ #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
+   def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
+ #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
+   def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
+ #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
+   def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
+ #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5)	\
+   def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
+ #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 			    ARG6)					\
+   def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
+ #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 			    ARG6, ARG7)					\
+   def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
+ #define DEF_FUNCTION_TYPE_8(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 			    ARG6, ARG7, ARG8)				\
+   def_fn_type (ENUM, RETURN, 0, 8, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6,	\
+ 	       ARG7, ARG8);
+ #define DEF_FUNCTION_TYPE_9(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 			    ARG6, ARG7, ARG8, ARG9)			\
+   def_fn_type (ENUM, RETURN, 0, 9, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6,	\
+ 	       ARG7, ARG8, ARG9);
+ #define DEF_FUNCTION_TYPE_10(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5,\
+ 			     ARG6, ARG7, ARG8, ARG9, ARG10)		\
+   def_fn_type (ENUM, RETURN, 0, 10, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6,	\
+ 	       ARG7, ARG8, ARG9, ARG10);
+ #define DEF_FUNCTION_TYPE_11(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5,\
+ 			     ARG6, ARG7, ARG8, ARG9, ARG10, ARG11)	\
+   def_fn_type (ENUM, RETURN, 0, 11, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6,	\
+ 	       ARG7, ARG8, ARG9, ARG10, ARG11);
+ #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
+   def_fn_type (ENUM, RETURN, 1, 0);
+ #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
+   def_fn_type (ENUM, RETURN, 1, 1, ARG1);
+ #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
+   def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
+ #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
+   def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
+ #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
+   def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
+ #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
+   def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
+ #define DEF_FUNCTION_TYPE_VAR_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 				ARG6)				\
+   def_fn_type (ENUM, RETURN, 1, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
+ #define DEF_FUNCTION_TYPE_VAR_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+ 				ARG6, ARG7)				\
+   def_fn_type (ENUM, RETURN, 1, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
+ #define DEF_POINTER_TYPE(ENUM, TYPE) \
+   builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
+ 
+ #include "builtin-types.def"
+ #include "ada-builtin-types.def"
+ 
+ #undef DEF_PRIMITIVE_TYPE
+ #undef DEF_FUNCTION_TYPE_0
+ #undef DEF_FUNCTION_TYPE_1
+ #undef DEF_FUNCTION_TYPE_2
+ #undef DEF_FUNCTION_TYPE_3
+ #undef DEF_FUNCTION_TYPE_4
+ #undef DEF_FUNCTION_TYPE_5
+ #undef DEF_FUNCTION_TYPE_6
+ #undef DEF_FUNCTION_TYPE_7
+ #undef DEF_FUNCTION_TYPE_8
+ #undef DEF_FUNCTION_TYPE_9
+ #undef DEF_FUNCTION_TYPE_10
+ #undef DEF_FUNCTION_TYPE_11
+ #undef DEF_FUNCTION_TYPE_VAR_0
+ #undef DEF_FUNCTION_TYPE_VAR_1
+ #undef DEF_FUNCTION_TYPE_VAR_2
+ #undef DEF_FUNCTION_TYPE_VAR_3
+ #undef DEF_FUNCTION_TYPE_VAR_4
+ #undef DEF_FUNCTION_TYPE_VAR_5
+ #undef DEF_FUNCTION_TYPE_VAR_6
+ #undef DEF_FUNCTION_TYPE_VAR_7
+ #undef DEF_POINTER_TYPE
+   builtin_types[(int) BT_LAST] = NULL_TREE;
+ }
+ 
+ /* ----------------------------------------------------------------------- *
+  *                            BUILTIN ATTRIBUTES                           *
+  * ----------------------------------------------------------------------- */
+ 
+ enum built_in_attribute
+ {
+ #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
+ #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
+ #define DEF_ATTR_STRING(ENUM, VALUE) ENUM,
+ #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
+ #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
+ #include "builtin-attrs.def"
+ #undef DEF_ATTR_NULL_TREE
+ #undef DEF_ATTR_INT
+ #undef DEF_ATTR_STRING
+ #undef DEF_ATTR_IDENT
+ #undef DEF_ATTR_TREE_LIST
+   ATTR_LAST
+ };
+ 
+ static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
+ 
+ static void
+ install_builtin_attributes (void)
+ {
+   /* Fill in the built_in_attributes array.  */
+ #define DEF_ATTR_NULL_TREE(ENUM)				\
+   built_in_attributes[(int) ENUM] = NULL_TREE;
+ #define DEF_ATTR_INT(ENUM, VALUE)				\
+   built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
+ #define DEF_ATTR_STRING(ENUM, VALUE)				\
+   built_in_attributes[(int) ENUM] = build_string (strlen (VALUE), VALUE);
+ #define DEF_ATTR_IDENT(ENUM, STRING)				\
+   built_in_attributes[(int) ENUM] = get_identifier (STRING);
+ #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN)	\
+   built_in_attributes[(int) ENUM]			\
+     = tree_cons (built_in_attributes[(int) PURPOSE],	\
+ 		 built_in_attributes[(int) VALUE],	\
+ 		 built_in_attributes[(int) CHAIN]);
+ #include "builtin-attrs.def"
+ #undef DEF_ATTR_NULL_TREE
+ #undef DEF_ATTR_INT
+ #undef DEF_ATTR_STRING
+ #undef DEF_ATTR_IDENT
+ #undef DEF_ATTR_TREE_LIST
+ }
+ 
+ /* Handle a "const" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_const_attribute (tree *node, tree ARG_UNUSED (name),
+ 			tree ARG_UNUSED (args), int ARG_UNUSED (flags),
+ 			bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) == FUNCTION_DECL)
+     TREE_READONLY (*node) = 1;
+   else
+     *no_add_attrs = true;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "nothrow" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_nothrow_attribute (tree *node, tree ARG_UNUSED (name),
+ 			  tree ARG_UNUSED (args), int ARG_UNUSED (flags),
+ 			  bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) == FUNCTION_DECL)
+     TREE_NOTHROW (*node) = 1;
+   else
+     *no_add_attrs = true;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "pure" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
+ 		       int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) == FUNCTION_DECL)
+     DECL_PURE_P (*node) = 1;
+   /* TODO: support types.  */
+   else
+     {
+       warning (OPT_Wattributes, "%qs attribute ignored",
+ 	       IDENTIFIER_POINTER (name));
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "no vops" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
+ 			 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
+ 			 bool *ARG_UNUSED (no_add_attrs))
+ {
+   gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
+   DECL_IS_NOVOPS (*node) = 1;
+   return NULL_TREE;
+ }
+ 
+ /* Helper for nonnull attribute handling; fetch the operand number
+    from the attribute argument list.  */
+ 
+ static bool
+ get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
+ {
+   /* Verify the arg number is a constant.  */
+   if (!tree_fits_uhwi_p (arg_num_expr))
+     return false;
+ 
+   *valp = TREE_INT_CST_LOW (arg_num_expr);
+   return true;
+ }
+ 
+ /* Handle the "nonnull" attribute.  */
+ static tree
+ handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
+ 			  tree args, int ARG_UNUSED (flags),
+ 			  bool *no_add_attrs)
+ {
+   tree type = *node;
+   unsigned HOST_WIDE_INT attr_arg_num;
+ 
+   /* If no arguments are specified, all pointer arguments should be
+      non-null.  Verify a full prototype is given so that the arguments
+      will have the correct types when we actually check them later.
+      Avoid diagnosing type-generic built-ins since those have no
+      prototype.  */
+   if (!args)
+     {
+       if (!prototype_p (type)
+ 	  && (!TYPE_ATTRIBUTES (type)
+ 	      || !lookup_attribute ("type generic", TYPE_ATTRIBUTES (type))))
+ 	{
+ 	  error ("%qs attribute without arguments on a non-prototype",
+ 		 "nonnull");
+ 	  *no_add_attrs = true;
+ 	}
+       return NULL_TREE;
+     }
+ 
+   /* Argument list specified.  Verify that each argument number references
+      a pointer argument.  */
+   for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
+     {
+       unsigned HOST_WIDE_INT arg_num = 0, ck_num;
+ 
+       if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
+ 	{
+ 	  error ("%qs argument has invalid operand number (argument %lu)",
+ 		 "nonnull", (unsigned long) attr_arg_num);
+ 	  *no_add_attrs = true;
+ 	  return NULL_TREE;
+ 	}
+ 
+       if (prototype_p (type))
+ 	{
+ 	  function_args_iterator iter;
+ 	  tree argument;
+ 
+ 	  function_args_iter_init (&iter, type);
+ 	  for (ck_num = 1; ; ck_num++, function_args_iter_next (&iter))
+ 	    {
+ 	      argument = function_args_iter_cond (&iter);
+ 	      if (!argument || ck_num == arg_num)
+ 		break;
+ 	    }
+ 
+ 	  if (!argument
+ 	      || TREE_CODE (argument) == VOID_TYPE)
+ 	    {
+ 	      error ("%qs argument with out-of-range operand number "
+ 		     "(argument %lu, operand %lu)", "nonnull",
+ 		     (unsigned long) attr_arg_num, (unsigned long) arg_num);
+ 	      *no_add_attrs = true;
+ 	      return NULL_TREE;
+ 	    }
+ 
+ 	  if (TREE_CODE (argument) != POINTER_TYPE)
+ 	    {
+ 	      error ("%qs argument references non-pointer operand "
+ 		     "(argument %lu, operand %lu)", "nonnull",
+ 		   (unsigned long) attr_arg_num, (unsigned long) arg_num);
+ 	      *no_add_attrs = true;
+ 	      return NULL_TREE;
+ 	    }
+ 	}
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "sentinel" attribute.  */
+ 
+ static tree
+ handle_sentinel_attribute (tree *node, tree name, tree args,
+ 			   int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   if (!prototype_p (*node))
+     {
+       warning (OPT_Wattributes,
+ 	       "%qs attribute requires prototypes with named arguments",
+ 	       IDENTIFIER_POINTER (name));
+       *no_add_attrs = true;
+     }
+   else
+     {
+       if (!stdarg_p (*node))
+         {
+ 	  warning (OPT_Wattributes,
+ 		   "%qs attribute only applies to variadic functions",
+ 		   IDENTIFIER_POINTER (name));
+ 	  *no_add_attrs = true;
+ 	}
+     }
+ 
+   if (args)
+     {
+       tree position = TREE_VALUE (args);
+ 
+       if (TREE_CODE (position) != INTEGER_CST)
+         {
+ 	  warning (0, "requested position is not an integer constant");
+ 	  *no_add_attrs = true;
+ 	}
+       else
+         {
+ 	  if (tree_int_cst_lt (position, integer_zero_node))
+ 	    {
+ 	      warning (0, "requested position is less than zero");
+ 	      *no_add_attrs = true;
+ 	    }
+ 	}
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "noreturn" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
+ 			   int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   tree type = TREE_TYPE (*node);
+ 
+   /* See FIXME comment in c_common_attribute_table.  */
+   if (TREE_CODE (*node) == FUNCTION_DECL)
+     TREE_THIS_VOLATILE (*node) = 1;
+   else if (TREE_CODE (type) == POINTER_TYPE
+ 	   && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
+     TREE_TYPE (*node)
+       = build_pointer_type
+ 	(change_qualified_type (TREE_TYPE (type), TYPE_QUAL_VOLATILE));
+   else
+     {
+       warning (OPT_Wattributes, "%qs attribute ignored",
+ 	       IDENTIFIER_POINTER (name));
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "stack_protect" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_stack_protect_attribute (tree *node, tree name, tree, int,
+ 				bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) != FUNCTION_DECL)
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "no_stack_protector" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_no_stack_protector_attribute (tree *node, tree name, tree, int,
+ 				   bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) != FUNCTION_DECL)
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "strub" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_strub_attribute (tree *, tree, tree, int, bool *no_add_attrs)
+ {
+   *no_add_attrs = true;
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "noinline" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_noinline_attribute (tree *node, tree name,
+ 			   tree ARG_UNUSED (args),
+ 			   int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) == FUNCTION_DECL)
+     {
+       if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (*node)))
+ 	{
+ 	  warning (OPT_Wattributes, "%qE attribute ignored due to conflict "
+ 		   "with attribute %qs", name, "always_inline");
+ 	  *no_add_attrs = true;
+ 	}
+       else
+ 	DECL_UNINLINABLE (*node) = 1;
+     }
+   else
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "noclone" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_noclone_attribute (tree *node, tree name,
+ 			  tree ARG_UNUSED (args),
+ 			  int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) != FUNCTION_DECL)
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "no_icf" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_noicf_attribute (tree *node, tree name,
+ 			tree ARG_UNUSED (args),
+ 			int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) != FUNCTION_DECL)
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "noipa" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_noipa_attribute (tree *node, tree name, tree, int, bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) != FUNCTION_DECL)
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "leaf" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_leaf_attribute (tree *node, tree name, tree ARG_UNUSED (args),
+ 		       int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) != FUNCTION_DECL)
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+   if (!TREE_PUBLIC (*node))
+     {
+       warning (OPT_Wattributes, "%qE attribute has no effect", name);
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "always_inline" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_always_inline_attribute (tree *node, tree name, tree ARG_UNUSED (args),
+ 				int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) == FUNCTION_DECL)
+     {
+       /* Set the attribute and mark it for disregarding inline limits.  */
+       DECL_DISREGARD_INLINE_LIMITS (*node) = 1;
+     }
+   else
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "malloc" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
+ 			 int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) == FUNCTION_DECL
+       && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
+     DECL_IS_MALLOC (*node) = 1;
+   else
+     {
+       warning (OPT_Wattributes, "%qs attribute ignored",
+ 	       IDENTIFIER_POINTER (name));
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Fake handler for attributes we don't properly support.  */
+ 
+ tree
+ fake_attribute_handler (tree * ARG_UNUSED (node),
+ 			tree ARG_UNUSED (name),
+ 			tree ARG_UNUSED (args),
+ 			int  ARG_UNUSED (flags),
+ 			bool * ARG_UNUSED (no_add_attrs))
+ {
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "type_generic" attribute.  */
+ 
+ static tree
+ handle_type_generic_attribute (tree *node, tree ARG_UNUSED (name),
+ 			       tree ARG_UNUSED (args), int ARG_UNUSED (flags),
+ 			       bool * ARG_UNUSED (no_add_attrs))
+ {
+   /* Ensure we have a function type.  */
+   gcc_assert (TREE_CODE (*node) == FUNCTION_TYPE);
+ 
+   /* Ensure we have a variadic function.  */
+   gcc_assert (!prototype_p (*node) || stdarg_p (*node));
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "flatten" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_flatten_attribute (tree *node, tree name,
+ 			  tree args ATTRIBUTE_UNUSED,
+ 			  int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) == FUNCTION_DECL)
+     /* Do nothing else, just set the attribute.  We'll get at
+        it later with lookup_attribute.  */
+     ;
+   else
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "used" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
+ 		       int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   tree node = *pnode;
+ 
+   if (TREE_CODE (node) == FUNCTION_DECL
+       || (VAR_P (node) && TREE_STATIC (node))
+       || (TREE_CODE (node) == TYPE_DECL))
+     {
+       TREE_USED (node) = 1;
+       DECL_PRESERVE_P (node) = 1;
+       if (VAR_P (node))
+ 	DECL_READ_P (node) = 1;
+     }
+   else
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "cold" and attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
+ 		       int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) == FUNCTION_DECL
+       || TREE_CODE (*node) == LABEL_DECL)
+     {
+       /* Attribute cold processing is done later with lookup_attribute.  */
+     }
+   else
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "hot" and attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
+ 		      int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   if (TREE_CODE (*node) == FUNCTION_DECL
+       || TREE_CODE (*node) == LABEL_DECL)
+     {
+       /* Attribute hot processing is done later with lookup_attribute.  */
+     }
+   else
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "target" attribute.  */
+ 
+ static tree
+ handle_target_attribute (tree *node, tree name, tree args, int flags,
+ 			 bool *no_add_attrs)
+ {
+   /* Ensure we have a function type.  */
+   if (TREE_CODE (*node) != FUNCTION_DECL)
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+   else if (lookup_attribute ("target_clones", DECL_ATTRIBUTES (*node)))
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored due to conflict "
+ 		   "with %qs attribute", name, "target_clones");
+       *no_add_attrs = true;
+     }
+   else if (!targetm.target_option.valid_attribute_p (*node, name, args, flags))
+     *no_add_attrs = true;
+ 
+   /* Check that there's no empty string in values of the attribute.  */
+   for (tree t = args; t != NULL_TREE; t = TREE_CHAIN (t))
+     {
+       tree value = TREE_VALUE (t);
+       if (TREE_CODE (value) == STRING_CST
+ 	  && TREE_STRING_LENGTH (value) == 1
+ 	  && TREE_STRING_POINTER (value)[0] == '\0')
+ 	{
+ 	  warning (OPT_Wattributes, "empty string in attribute %<target%>");
+ 	  *no_add_attrs = true;
+ 	}
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "target_clones" attribute.  */
+ 
+ static tree
+ handle_target_clones_attribute (tree *node, tree name, tree ARG_UNUSED (args),
+ 			  int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   /* Ensure we have a function type.  */
+   if (TREE_CODE (*node) == FUNCTION_DECL)
+     {
+       if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (*node)))
+ 	{
+ 	  warning (OPT_Wattributes, "%qE attribute ignored due to conflict "
+ 		   "with %qs attribute", name, "always_inline");
+ 	  *no_add_attrs = true;
+ 	}
+       else if (lookup_attribute ("target", DECL_ATTRIBUTES (*node)))
+ 	{
+ 	  warning (OPT_Wattributes, "%qE attribute ignored due to conflict "
+ 		   "with %qs attribute", name, "target");
+ 	  *no_add_attrs = true;
+ 	}
+       else
+ 	/* Do not inline functions with multiple clone targets.  */
+ 	DECL_UNINLINABLE (*node) = 1;
+     }
+   else
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+     }
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "vector_size" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_vector_size_attribute (tree *node, tree name, tree args,
+ 			      int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   tree type = *node;
+   tree vector_type;
+ 
+   *no_add_attrs = true;
+ 
+   /* We need to provide for vector pointers, vector arrays, and
+      functions returning vectors.  For example:
+ 
+        __attribute__((vector_size(16))) short *foo;
+ 
+      In this case, the mode is SI, but the type being modified is
+      HI, so we need to look further.  */
+   while (POINTER_TYPE_P (type)
+ 	 || TREE_CODE (type) == FUNCTION_TYPE
+ 	 || TREE_CODE (type) == ARRAY_TYPE)
+     type = TREE_TYPE (type);
+ 
+   vector_type = build_vector_type_for_size (type, TREE_VALUE (args), name);
+   if (!vector_type)
+     return NULL_TREE;
+ 
+   /* Build back pointers if needed.  */
+   *node = reconstruct_complex_type (*node, vector_type);
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "vector_type" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_vector_type_attribute (tree *node, tree name, tree ARG_UNUSED (args),
+ 			      int ARG_UNUSED (flags), bool *no_add_attrs)
+ {
+   tree type = *node;
+   tree vector_type;
+ 
+   *no_add_attrs = true;
+ 
+   if (TREE_CODE (type) != ARRAY_TYPE)
+     {
+       error ("attribute %qs applies to array types only",
+ 	     IDENTIFIER_POINTER (name));
+       return NULL_TREE;
+     }
+ 
+   vector_type = build_vector_type_for_array (type, name);
+   if (!vector_type)
+     return NULL_TREE;
+ 
+   TYPE_REPRESENTATIVE_ARRAY (vector_type) = type;
+   *node = vector_type;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Handle a "zero_call_used_regs" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ static tree
+ handle_zero_call_used_regs_attribute (tree *node, tree name, tree args,
+ 				      int ARG_UNUSED (flags),
+ 				      bool *no_add_attrs)
+ {
+   tree decl = *node;
+   tree id = TREE_VALUE (args);
+ 
+   if (TREE_CODE (decl) != FUNCTION_DECL)
+     {
+       error_at (DECL_SOURCE_LOCATION (decl),
+ 		"%qE attribute applies only to functions", name);
+       *no_add_attrs = true;
+       return NULL_TREE;
+     }
+ 
+   /* pragma Machine_Attribute turns string arguments into identifiers.
+      Reverse it.  */
+   if (TREE_CODE (id) == IDENTIFIER_NODE)
+     id = TREE_VALUE (args) = build_string
+       (IDENTIFIER_LENGTH (id), IDENTIFIER_POINTER (id));
+ 
+   if (TREE_CODE (id) != STRING_CST)
+     {
+       error_at (DECL_SOURCE_LOCATION (decl),
+ 		"%qE argument not a string", name);
+       *no_add_attrs = true;
+       return NULL_TREE;
+     }
+ 
+   bool found = false;
+   for (unsigned int i = 0; zero_call_used_regs_opts[i].name != NULL; ++i)
+     if (strcmp (TREE_STRING_POINTER (id),
+ 		zero_call_used_regs_opts[i].name) == 0)
+       {
+ 	found = true;
+ 	break;
+       }
+ 
+   if (!found)
+     {
+       error_at (DECL_SOURCE_LOCATION (decl),
+ 		"unrecognized %qE attribute argument %qs",
+ 		name, TREE_STRING_POINTER (id));
+       *no_add_attrs = true;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* ----------------------------------------------------------------------- *
+  *                              BUILTIN FUNCTIONS                          *
+  * ----------------------------------------------------------------------- */
+ 
+ /* Worker for DEF_BUILTIN.  Possibly define a builtin function with one or two
+    names.  Does not declare a non-__builtin_ function if flag_no_builtin, or
+    if nonansi_p and flag_no_nonansi_builtin.  */
+ 
+ static void
+ def_builtin_1 (enum built_in_function fncode,
+ 	       const char *name,
+ 	       enum built_in_class fnclass,
+ 	       tree fntype, tree libtype,
+ 	       bool both_p, bool fallback_p,
+ 	       bool nonansi_p ATTRIBUTE_UNUSED,
+ 	       tree fnattrs, bool implicit_p)
+ {
+   tree decl;
+   const char *libname;
+ 
+   /* Preserve an already installed decl.  It most likely was setup in advance
+      (e.g. as part of the internal builtins) for specific reasons.  */
+   if (builtin_decl_explicit (fncode))
+     return;
+ 
+   if (fntype == error_mark_node)
+     return;
+ 
+   gcc_assert ((!both_p && !fallback_p)
+ 	      || startswith (name, "__builtin_"));
+ 
+   libname = name + strlen ("__builtin_");
+   decl = add_builtin_function (name, fntype, fncode, fnclass,
+ 			       (fallback_p ? libname : NULL),
+ 			       fnattrs);
+   if (both_p)
+     /* ??? This is normally further controlled by command-line options
+        like -fno-builtin, but we don't have them for Ada.  */
+     add_builtin_function (libname, libtype, fncode, fnclass,
+ 			  NULL, fnattrs);
+ 
+   set_builtin_decl (fncode, decl, implicit_p);
+ }
+ 
+ static int flag_isoc94 = 0;
+ static int flag_isoc99 = 0;
+ static int flag_isoc11 = 0;
+ static int flag_isoc2x = 0;
+ 
+ /* Install what the common builtins.def offers plus our local additions.
+ 
+    Note that ada-builtins.def is included first so that locally redefined
+    built-in functions take precedence over the commonly defined ones.  */
+ 
+ static void
+ install_builtin_functions (void)
+ {
+ #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
+ 		    NONANSI_P, ATTRS, IMPLICIT, COND)			\
+   if (NAME && COND)							\
+     def_builtin_1 (ENUM, NAME, CLASS,                                   \
+                    builtin_types[(int) TYPE],                           \
+                    builtin_types[(int) LIBTYPE],                        \
+                    BOTH_P, FALLBACK_P, NONANSI_P,                       \
+                    built_in_attributes[(int) ATTRS], IMPLICIT);
+ #define DEF_ADA_BUILTIN(ENUM, NAME, TYPE, ATTRS)		\
+   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_FRONTEND, TYPE, BT_LAST, \
+ 	       false, false, false, ATTRS, true, true)
+ #include "ada-builtins.def"
+ #include "builtins.def"
+ }
+ 
+ /* ----------------------------------------------------------------------- *
+  *                              BUILTIN FUNCTIONS                          *
+  * ----------------------------------------------------------------------- */
+ 
+ /* Install the builtin functions we might need.  */
+ 
+ void
+ gnat_install_builtins (void)
+ {
+   install_builtin_elementary_types ();
+   install_builtin_function_types ();
+   install_builtin_attributes ();
+ 
+   /* Install builtins used by generic middle-end pieces first.  Some of these
+      know about internal specificities and control attributes accordingly, for
+      instance __builtin_alloca vs no-throw and -fstack-check.  We will ignore
+      the generic definition from builtins.def.  */
+   build_common_builtin_nodes ();
+ 
+   /* Now, install the target specific builtins, such as the AltiVec family on
+      ppc, and the common set as exposed by builtins.def.  */
+   targetm.init_builtins ();
+   install_builtin_functions ();
+ }
+ 
+ #include "gt-ada-utils.h"
+ #include "gtype-ada.h"
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/utils2.c gcc-12.1.0/gcc/ada/gcc-interface/utils2.c
*** gcc-11.3.0/gcc/ada/gcc-interface/utils2.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gcc-interface/utils2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,3019 ****
- /****************************************************************************
-  *                                                                          *
-  *                         GNAT COMPILER COMPONENTS                         *
-  *                                                                          *
-  *                               U T I L S 2                                *
-  *                                                                          *
-  *                          C Implementation File                           *
-  *                                                                          *
-  *          Copyright (C) 1992-2020, Free Software Foundation, Inc.         *
-  *                                                                          *
-  * GNAT is free software;  you can  redistribute it  and/or modify it under *
-  * terms of the  GNU General Public License as published  by the Free Soft- *
-  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
-  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
-  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
-  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
-  * for  more details.  You should have received a copy of the GNU General   *
-  * Public License along with GCC; see the file COPYING3.  If not see        *
-  * <http://www.gnu.org/licenses/>.                                          *
-  *                                                                          *
-  * GNAT was originally developed  by the GNAT team at  New York University. *
-  * Extensive contributions were provided by Ada Core Technologies Inc.      *
-  *                                                                          *
-  ****************************************************************************/
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "memmodel.h"
- #include "tm.h"
- #include "vec.h"
- #include "alias.h"
- #include "tree.h"
- #include "inchash.h"
- #include "builtins.h"
- #include "fold-const.h"
- #include "stor-layout.h"
- #include "stringpool.h"
- #include "varasm.h"
- #include "flags.h"
- #include "toplev.h"
- #include "ggc.h"
- #include "tree-inline.h"
- 
- #include "ada.h"
- #include "types.h"
- #include "atree.h"
- #include "elists.h"
- #include "namet.h"
- #include "nlists.h"
- #include "snames.h"
- #include "stringt.h"
- #include "uintp.h"
- #include "fe.h"
- #include "sinfo.h"
- #include "einfo.h"
- #include "ada-tree.h"
- #include "gigi.h"
- 
- /* Return the base type of TYPE.  */
- 
- tree
- get_base_type (tree type)
- {
-   if (TREE_CODE (type) == RECORD_TYPE
-       && TYPE_JUSTIFIED_MODULAR_P (type))
-     type = TREE_TYPE (TYPE_FIELDS (type));
- 
-   while (TREE_TYPE (type)
- 	 && (TREE_CODE (type) == INTEGER_TYPE
- 	     || TREE_CODE (type) == REAL_TYPE))
-     type = TREE_TYPE (type);
- 
-   return type;
- }
- 
- /* EXP is a GCC tree representing an address.  See if we can find how strictly
-    the object at this address is aligned and, if so, return the alignment of
-    the object in bits.  Otherwise return 0.  */
- 
- unsigned int
- known_alignment (tree exp)
- {
-   unsigned int this_alignment;
-   unsigned int lhs, rhs;
- 
-   switch (TREE_CODE (exp))
-     {
-     CASE_CONVERT:
-     case VIEW_CONVERT_EXPR:
-     case NON_LVALUE_EXPR:
-       /* Conversions between pointers and integers don't change the alignment
- 	 of the underlying object.  */
-       this_alignment = known_alignment (TREE_OPERAND (exp, 0));
-       break;
- 
-     case COMPOUND_EXPR:
-       /* The value of a COMPOUND_EXPR is that of its second operand.  */
-       this_alignment = known_alignment (TREE_OPERAND (exp, 1));
-       break;
- 
-     case PLUS_EXPR:
-     case MINUS_EXPR:
-       /* If two addresses are added, the alignment of the result is the
- 	 minimum of the two alignments.  */
-       lhs = known_alignment (TREE_OPERAND (exp, 0));
-       rhs = known_alignment (TREE_OPERAND (exp, 1));
-       this_alignment = MIN (lhs, rhs);
-       break;
- 
-     case POINTER_PLUS_EXPR:
-       /* If this is the pattern built for aligning types, decode it.  */
-       if (TREE_CODE (TREE_OPERAND (exp, 1)) == BIT_AND_EXPR
- 	  && TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 1), 0)) == NEGATE_EXPR)
- 	{
- 	  tree op = TREE_OPERAND (TREE_OPERAND (exp, 1), 1);
- 	  return
- 	    known_alignment (fold_build1 (BIT_NOT_EXPR, TREE_TYPE (op), op));
- 	}
- 
-       /* If we don't know the alignment of the offset, we assume that
- 	 of the base.  */
-       lhs = known_alignment (TREE_OPERAND (exp, 0));
-       rhs = known_alignment (TREE_OPERAND (exp, 1));
- 
-       if (rhs == 0)
- 	this_alignment = lhs;
-       else
- 	this_alignment = MIN (lhs, rhs);
-       break;
- 
-     case COND_EXPR:
-       /* If there is a choice between two values, use the smaller one.  */
-       lhs = known_alignment (TREE_OPERAND (exp, 1));
-       rhs = known_alignment (TREE_OPERAND (exp, 2));
-       this_alignment = MIN (lhs, rhs);
-       break;
- 
-     case INTEGER_CST:
-       {
- 	unsigned HOST_WIDE_INT c = TREE_INT_CST_LOW (exp);
- 	/* The first part of this represents the lowest bit in the constant,
- 	   but it is originally in bytes, not bits.  */
- 	this_alignment = (c & -c) * BITS_PER_UNIT;
-       }
-       break;
- 
-     case MULT_EXPR:
-       /* If we know the alignment of just one side, use it.  Otherwise,
- 	 use the product of the alignments.  */
-       lhs = known_alignment (TREE_OPERAND (exp, 0));
-       rhs = known_alignment (TREE_OPERAND (exp, 1));
- 
-       if (lhs == 0)
- 	this_alignment = rhs;
-       else if (rhs == 0)
- 	this_alignment = lhs;
-       else
- 	this_alignment = MIN (lhs * rhs, BIGGEST_ALIGNMENT);
-       break;
- 
-     case BIT_AND_EXPR:
-       /* A bit-and expression is as aligned as the maximum alignment of the
- 	 operands.  We typically get here for a complex lhs and a constant
- 	 negative power of two on the rhs to force an explicit alignment, so
- 	 don't bother looking at the lhs.  */
-       this_alignment = known_alignment (TREE_OPERAND (exp, 1));
-       break;
- 
-     case ADDR_EXPR:
-       if (DECL_P (TREE_OPERAND (exp, 0)))
- 	this_alignment = DECL_ALIGN (TREE_OPERAND (exp, 0));
-       else
- 	this_alignment = get_object_alignment (TREE_OPERAND (exp, 0));
-       break;
- 
-     case CALL_EXPR:
-       {
- 	tree fndecl = get_callee_fndecl (exp);
- 	if (fndecl == malloc_decl || fndecl == realloc_decl)
- 	  return get_target_system_allocator_alignment () * BITS_PER_UNIT;
- 
- 	tree t = maybe_inline_call_in_expr (exp);
- 	if (t)
- 	  return known_alignment (t);
-       }
- 
-       /* ... fall through ... */
- 
-     default:
-       /* For other pointer expressions, we assume that the pointed-to object
- 	 is at least as aligned as the pointed-to type.  Beware that we can
- 	 have a dummy type here (e.g. a Taft Amendment type), for which the
- 	 alignment is meaningless and should be ignored.  */
-       if (POINTER_TYPE_P (TREE_TYPE (exp))
- 	  && !TYPE_IS_DUMMY_P (TREE_TYPE (TREE_TYPE (exp)))
- 	  && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (exp))))
- 	this_alignment = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp)));
-       else
- 	this_alignment = 0;
-       break;
-     }
- 
-   return this_alignment;
- }
- 
- /* We have a comparison or assignment operation on two types, T1 and T2, which
-    are either both array types or both record types.  T1 is assumed to be for
-    the left hand side operand, and T2 for the right hand side.  Return the
-    type that both operands should be converted to for the operation, if any.
-    Otherwise return zero.  */
- 
- static tree
- find_common_type (tree t1, tree t2)
- {
-   /* ??? As of today, various constructs lead to here with types of different
-      sizes even when both constants (e.g. tagged types, packable vs regular
-      component types, padded vs unpadded types, ...).  While some of these
-      would better be handled upstream (types should be made consistent before
-      calling into build_binary_op), some others are really expected and we
-      have to be careful.  */
- 
-   const bool variable_record_on_lhs
-     = (TREE_CODE (t1) == RECORD_TYPE
-        && TREE_CODE (t2) == RECORD_TYPE
-        && get_variant_part (t1)
-        && !get_variant_part (t2));
- 
-   const bool variable_array_on_lhs
-     = (TREE_CODE (t1) == ARRAY_TYPE
-        && TREE_CODE (t2) == ARRAY_TYPE
-        && !TREE_CONSTANT (TYPE_MIN_VALUE (TYPE_DOMAIN (t1)))
-        && TREE_CONSTANT (TYPE_MIN_VALUE (TYPE_DOMAIN (t2))));
- 
-   /* We must avoid writing more than what the target can hold if this is for
-      an assignment and the case of tagged types is handled in build_binary_op
-      so we use the lhs type if it is known to be smaller or of constant size
-      and the rhs type is not, whatever the modes.  We also force t1 in case of
-      constant size equality to minimize occurrences of view conversions on the
-      lhs of an assignment, except for the case of types with a variable part
-      on the lhs but not on the rhs to make the conversion simpler.  */
-   if (TREE_CONSTANT (TYPE_SIZE (t1))
-       && (!TREE_CONSTANT (TYPE_SIZE (t2))
- 	  || tree_int_cst_lt (TYPE_SIZE (t1), TYPE_SIZE (t2))
- 	  || (TYPE_SIZE (t1) == TYPE_SIZE (t2)
- 	      && !variable_record_on_lhs
- 	      && !variable_array_on_lhs)))
-     return t1;
- 
-   /* Otherwise, if the lhs type is non-BLKmode, use it, except for the case of
-      a non-BLKmode rhs and array types with a variable part on the lhs but not
-      on the rhs to make sure the conversion is preserved during gimplification.
-      Note that we know that we will not have any alignment problems since, if
-      we did, the non-BLKmode type could not have been used.  */
-   if (TYPE_MODE (t1) != BLKmode
-       && (TYPE_MODE (t2) == BLKmode || !variable_array_on_lhs))
-     return t1;
- 
-   /* If the rhs type is of constant size, use it whatever the modes.  At
-      this point it is known to be smaller, or of constant size and the
-      lhs type is not.  */
-   if (TREE_CONSTANT (TYPE_SIZE (t2)))
-     return t2;
- 
-   /* Otherwise, if the rhs type is non-BLKmode, use it.  */
-   if (TYPE_MODE (t2) != BLKmode)
-     return t2;
- 
-   /* In this case, both types have variable size and BLKmode.  It's
-      probably best to leave the "type mismatch" because changing it
-      could cause a bad self-referential reference.  */
-   return NULL_TREE;
- }
- 
- /* Return an expression tree representing an equality comparison of A1 and A2,
-    two objects of type ARRAY_TYPE.  The result should be of type RESULT_TYPE.
- 
-    Two arrays are equal in one of two ways: (1) if both have zero length in
-    some dimension (not necessarily the same dimension) or (2) if the lengths
-    in each dimension are equal and the data is equal.  We perform the length
-    tests in as efficient a manner as possible.  */
- 
- static tree
- compare_arrays (location_t loc, tree result_type, tree a1, tree a2)
- {
-   tree result = convert (result_type, boolean_true_node);
-   tree a1_is_null = convert (result_type, boolean_false_node);
-   tree a2_is_null = convert (result_type, boolean_false_node);
-   tree t1 = TREE_TYPE (a1);
-   tree t2 = TREE_TYPE (a2);
-   bool a1_side_effects_p = TREE_SIDE_EFFECTS (a1);
-   bool a2_side_effects_p = TREE_SIDE_EFFECTS (a2);
-   bool length_zero_p = false;
- 
-   /* If the operands have side-effects, they need to be evaluated only once
-      in spite of the multiple references in the comparison.  */
-   if (a1_side_effects_p)
-     a1 = gnat_protect_expr (a1);
- 
-   if (a2_side_effects_p)
-     a2 = gnat_protect_expr (a2);
- 
-   /* Process each dimension separately and compare the lengths.  If any
-      dimension has a length known to be zero, set LENGTH_ZERO_P to true
-      in order to suppress the comparison of the data at the end.  */
-   while (TREE_CODE (t1) == ARRAY_TYPE && TREE_CODE (t2) == ARRAY_TYPE)
-     {
-       tree dom1 = TYPE_DOMAIN (t1);
-       tree dom2 = TYPE_DOMAIN (t2);
-       tree length1 = size_binop (PLUS_EXPR,
- 				 size_binop (MINUS_EXPR,
- 					     TYPE_MAX_VALUE (dom1),
- 					     TYPE_MIN_VALUE (dom1)),
- 				 size_one_node);
-       tree length2 = size_binop (PLUS_EXPR,
- 				 size_binop (MINUS_EXPR,
- 					     TYPE_MAX_VALUE (dom2),
- 					     TYPE_MIN_VALUE (dom2)),
- 				 size_one_node);
-       tree ind1 = TYPE_INDEX_TYPE (dom1);
-       tree ind2 = TYPE_INDEX_TYPE (dom2);
-       tree base_type = maybe_character_type (get_base_type (ind1));
-       tree lb1 = convert (base_type, TYPE_MIN_VALUE (ind1));
-       tree ub1 = convert (base_type, TYPE_MAX_VALUE (ind1));
-       tree lb2 = convert (base_type, TYPE_MIN_VALUE (ind2));
-       tree ub2 = convert (base_type, TYPE_MAX_VALUE (ind2));
-       tree comparison, this_a1_is_null, this_a2_is_null;
- 
-       /* If the length of the first array is a constant and that of the second
- 	 array is not, swap our operands to have the constant second.  */
-       if (TREE_CODE (length1) == INTEGER_CST
- 	  && TREE_CODE (length2) != INTEGER_CST)
- 	{
- 	  tree tem;
- 	  bool btem;
- 
- 	  tem = a1, a1 = a2, a2 = tem;
- 	  tem = t1, t1 = t2, t2 = tem;
- 	  tem = lb1, lb1 = lb2, lb2 = tem;
- 	  tem = ub1, ub1 = ub2, ub2 = tem;
- 	  tem = length1, length1 = length2, length2 = tem;
- 	  tem = a1_is_null, a1_is_null = a2_is_null, a2_is_null = tem;
- 	  btem = a1_side_effects_p, a1_side_effects_p = a2_side_effects_p,
- 	  a2_side_effects_p = btem;
- 	}
- 
-       /* If the length of the second array is the constant zero, we can just
- 	 use the original stored bounds for the first array and see whether
- 	 last < first holds.  */
-       if (integer_zerop (length2))
- 	{
- 	  length_zero_p = true;
- 
- 	  lb1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (lb1, a1);
- 	  ub1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (ub1, a1);
- 
- 	  comparison = fold_build2_loc (loc, LT_EXPR, result_type, ub1, lb1);
- 	  if (EXPR_P (comparison))
- 	    SET_EXPR_LOCATION (comparison, loc);
- 
- 	  this_a1_is_null = comparison;
- 	  this_a2_is_null = convert (result_type, boolean_true_node);
- 	}
- 
-       /* Otherwise, if the length is some other constant value, we know that
- 	 this dimension in the second array cannot be superflat, so we can
- 	 just use its length computed from the actual stored bounds.  */
-       else if (TREE_CODE (length2) == INTEGER_CST)
- 	{
- 	  /* Note that we know that LB2 and UB2 are constant and hence
- 	     cannot contain a PLACEHOLDER_EXPR.  */
- 	  lb1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (lb1, a1);
- 	  ub1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (ub1, a1);
- 
- 	  comparison
- 	    = fold_build2_loc (loc, EQ_EXPR, result_type,
- 			       build_binary_op (MINUS_EXPR, base_type,
- 						ub1, lb1),
- 			       build_binary_op (MINUS_EXPR, base_type,
- 						ub2, lb2));
- 	  if (EXPR_P (comparison))
- 	    SET_EXPR_LOCATION (comparison, loc);
- 
- 	  this_a1_is_null
- 	    = fold_build2_loc (loc, LT_EXPR, result_type, ub1, lb1);
- 
- 	  this_a2_is_null = convert (result_type, boolean_false_node);
- 	}
- 
-       /* Otherwise, compare the computed lengths.  */
-       else
- 	{
- 	  length1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (length1, a1);
- 	  length2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (length2, a2);
- 
- 	  comparison
- 	    = fold_build2_loc (loc, EQ_EXPR, result_type, length1, length2);
- 	  if (EXPR_P (comparison))
- 	    SET_EXPR_LOCATION (comparison, loc);
- 
- 	  lb1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (lb1, a1);
- 	  ub1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (ub1, a1);
- 
- 	  this_a1_is_null
- 	    = fold_build2_loc (loc, LT_EXPR, result_type, ub1, lb1);
- 
- 	  lb2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (lb2, a2);
- 	  ub2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (ub2, a2);
- 
- 	  this_a2_is_null
- 	    = fold_build2_loc (loc, LT_EXPR, result_type, ub2, lb2);
- 	}
- 
-       /* Append expressions for this dimension to the final expressions.  */
-       result = build_binary_op (TRUTH_ANDIF_EXPR, result_type,
- 				result, comparison);
- 
-       a1_is_null = build_binary_op (TRUTH_ORIF_EXPR, result_type,
- 				    this_a1_is_null, a1_is_null);
- 
-       a2_is_null = build_binary_op (TRUTH_ORIF_EXPR, result_type,
- 				    this_a2_is_null, a2_is_null);
- 
-       t1 = TREE_TYPE (t1);
-       t2 = TREE_TYPE (t2);
-     }
- 
-   /* Unless the length of some dimension is known to be zero, compare the
-      data in the array.  */
-   if (!length_zero_p)
-     {
-       tree type = find_common_type (TREE_TYPE (a1), TREE_TYPE (a2));
-       tree comparison;
- 
-       if (type)
- 	{
- 	  a1 = convert (type, a1),
- 	  a2 = convert (type, a2);
- 	}
- 
-       comparison = fold_build2_loc (loc, EQ_EXPR, result_type, a1, a2);
- 
-       result
- 	= build_binary_op (TRUTH_ANDIF_EXPR, result_type, result, comparison);
-     }
- 
-   /* The result is also true if both sizes are zero.  */
-   result = build_binary_op (TRUTH_ORIF_EXPR, result_type,
- 			    build_binary_op (TRUTH_ANDIF_EXPR, result_type,
- 					     a1_is_null, a2_is_null),
- 			    result);
- 
-   /* If the operands have side-effects, they need to be evaluated before
-      doing the tests above since the place they otherwise would end up
-      being evaluated at run time could be wrong.  */
-   if (a1_side_effects_p)
-     result = build2 (COMPOUND_EXPR, result_type, a1, result);
- 
-   if (a2_side_effects_p)
-     result = build2 (COMPOUND_EXPR, result_type, a2, result);
- 
-   return result;
- }
- 
- /* Return an expression tree representing an equality comparison of P1 and P2,
-    two objects of fat pointer type.  The result should be of type RESULT_TYPE.
- 
-    Two fat pointers are equal in one of two ways: (1) if both have a null
-    pointer to the array or (2) if they contain the same couple of pointers.
-    We perform the comparison in as efficient a manner as possible.  */
- 
- static tree
- compare_fat_pointers (location_t loc, tree result_type, tree p1, tree p2)
- {
-   tree p1_array, p2_array, p1_bounds, p2_bounds, same_array, same_bounds;
-   tree p1_array_is_null, p2_array_is_null;
- 
-   /* If either operand has side-effects, they have to be evaluated only once
-      in spite of the multiple references to the operand in the comparison.  */
-   p1 = gnat_protect_expr (p1);
-   p2 = gnat_protect_expr (p2);
- 
-   /* The constant folder doesn't fold fat pointer types so we do it here.  */
-   if (TREE_CODE (p1) == CONSTRUCTOR)
-     p1_array = CONSTRUCTOR_ELT (p1, 0)->value;
-   else
-     p1_array = build_component_ref (p1, TYPE_FIELDS (TREE_TYPE (p1)), true);
- 
-   p1_array_is_null
-     = fold_build2_loc (loc, EQ_EXPR, result_type, p1_array,
- 		       fold_convert_loc (loc, TREE_TYPE (p1_array),
- 					 null_pointer_node));
- 
-   if (TREE_CODE (p2) == CONSTRUCTOR)
-     p2_array = CONSTRUCTOR_ELT (p2, 0)->value;
-   else
-     p2_array = build_component_ref (p2, TYPE_FIELDS (TREE_TYPE (p2)), true);
- 
-   p2_array_is_null
-     = fold_build2_loc (loc, EQ_EXPR, result_type, p2_array,
- 		       fold_convert_loc (loc, TREE_TYPE (p2_array),
- 					 null_pointer_node));
- 
-   /* If one of the pointers to the array is null, just compare the other.  */
-   if (integer_zerop (p1_array))
-     return p2_array_is_null;
-   else if (integer_zerop (p2_array))
-     return p1_array_is_null;
- 
-   /* Otherwise, do the fully-fledged comparison.  */
-   same_array
-     = fold_build2_loc (loc, EQ_EXPR, result_type, p1_array, p2_array);
- 
-   if (TREE_CODE (p1) == CONSTRUCTOR)
-     p1_bounds = CONSTRUCTOR_ELT (p1, 1)->value;
-   else
-     p1_bounds
-       = build_component_ref (p1, DECL_CHAIN (TYPE_FIELDS (TREE_TYPE (p1))),
- 			     true);
- 
-   if (TREE_CODE (p2) == CONSTRUCTOR)
-     p2_bounds = CONSTRUCTOR_ELT (p2, 1)->value;
-   else
-     p2_bounds
-       = build_component_ref (p2, DECL_CHAIN (TYPE_FIELDS (TREE_TYPE (p2))),
- 			     true);
- 
-   same_bounds
-     = fold_build2_loc (loc, EQ_EXPR, result_type, p1_bounds, p2_bounds);
- 
-   /* P1_ARRAY == P2_ARRAY && (P1_ARRAY == NULL || P1_BOUNDS == P2_BOUNDS).  */
-   return build_binary_op (TRUTH_ANDIF_EXPR, result_type, same_array,
- 			  build_binary_op (TRUTH_ORIF_EXPR, result_type,
- 					   p1_array_is_null, same_bounds));
- }
- 
- /* Compute the result of applying OP_CODE to LHS and RHS, where both are of
-    type TYPE.  We know that TYPE is a modular type with a nonbinary
-    modulus.  */
- 
- static tree
- nonbinary_modular_operation (enum tree_code op_code, tree type, tree lhs,
-                              tree rhs)
- {
-   tree modulus = TYPE_MODULUS (type);
-   unsigned int needed_precision = tree_floor_log2 (modulus) + 1;
-   unsigned int precision;
-   bool unsignedp = true;
-   tree op_type = type;
-   tree result;
- 
-   /* If this is an addition of a constant, convert it to a subtraction
-      of a constant since we can do that faster.  */
-   if (op_code == PLUS_EXPR && TREE_CODE (rhs) == INTEGER_CST)
-     {
-       rhs = fold_build2 (MINUS_EXPR, type, modulus, rhs);
-       op_code = MINUS_EXPR;
-     }
- 
-   /* For the logical operations, we only need PRECISION bits.  For
-      addition and subtraction, we need one more and for multiplication we
-      need twice as many.  But we never want to make a size smaller than
-      our size. */
-   if (op_code == PLUS_EXPR || op_code == MINUS_EXPR)
-     needed_precision += 1;
-   else if (op_code == MULT_EXPR)
-     needed_precision *= 2;
- 
-   precision = MAX (needed_precision, TYPE_PRECISION (op_type));
- 
-   /* Unsigned will do for everything but subtraction.  */
-   if (op_code == MINUS_EXPR)
-     unsignedp = false;
- 
-   /* If our type is the wrong signedness or isn't wide enough, make a new
-      type and convert both our operands to it.  */
-   if (TYPE_PRECISION (op_type) < precision
-       || TYPE_UNSIGNED (op_type) != unsignedp)
-     {
-       /* Copy the type so we ensure it can be modified to make it modular.  */
-       op_type = copy_type (gnat_type_for_size (precision, unsignedp));
-       modulus = convert (op_type, modulus);
-       SET_TYPE_MODULUS (op_type, modulus);
-       TYPE_MODULAR_P (op_type) = 1;
-       lhs = convert (op_type, lhs);
-       rhs = convert (op_type, rhs);
-     }
- 
-   /* Do the operation, then we'll fix it up.  */
-   result = fold_build2 (op_code, op_type, lhs, rhs);
- 
-   /* For multiplication, we have no choice but to do a full modulus
-      operation.  However, we want to do this in the narrowest
-      possible size.  */
-   if (op_code == MULT_EXPR)
-     {
-       /* Copy the type so we ensure it can be modified to make it modular.  */
-       tree div_type = copy_type (gnat_type_for_size (needed_precision, 1));
-       modulus = convert (div_type, modulus);
-       SET_TYPE_MODULUS (div_type, modulus);
-       TYPE_MODULAR_P (div_type) = 1;
-       result = convert (op_type,
- 			fold_build2 (TRUNC_MOD_EXPR, div_type,
- 				     convert (div_type, result), modulus));
-     }
- 
-   /* For subtraction, add the modulus back if we are negative.  */
-   else if (op_code == MINUS_EXPR)
-     {
-       result = gnat_protect_expr (result);
-       result = fold_build3 (COND_EXPR, op_type,
- 			    fold_build2 (LT_EXPR, boolean_type_node, result,
- 					 build_int_cst (op_type, 0)),
- 			    fold_build2 (PLUS_EXPR, op_type, result, modulus),
- 			    result);
-     }
- 
-   /* For the other operations, subtract the modulus if we are >= it.  */
-   else
-     {
-       result = gnat_protect_expr (result);
-       result = fold_build3 (COND_EXPR, op_type,
- 			    fold_build2 (GE_EXPR, boolean_type_node,
- 					 result, modulus),
- 			    fold_build2 (MINUS_EXPR, op_type,
- 					 result, modulus),
- 			    result);
-     }
- 
-   return convert (type, result);
- }
- 
- /* This page contains routines that implement the Ada semantics with regard
-    to atomic objects.  They are fully piggybacked on the middle-end support
-    for atomic loads and stores.
- 
-    *** Memory barriers and volatile objects ***
- 
-    We implement the weakened form of the C.6(16) clause that was introduced
-    in Ada 2012 (AI05-117).  Earlier forms of this clause wouldn't have been
-    implementable without significant performance hits on modern platforms.
- 
-    We also take advantage of the requirements imposed on shared variables by
-    9.10 (conditions for sequential actions) to have non-erroneous execution
-    and consider that C.6(16) and C.6(17) only prescribe an uniform order of
-    volatile updates with regard to sequential actions, i.e. with regard to
-    reads or updates of atomic objects.
- 
-    As such, an update of an atomic object by a task requires that all earlier
-    accesses to volatile objects have completed.  Similarly, later accesses to
-    volatile objects cannot be reordered before the update of the atomic object.
-    So, memory barriers both before and after the atomic update are needed.
- 
-    For a read of an atomic object, to avoid seeing writes of volatile objects
-    by a task earlier than by the other tasks, a memory barrier is needed before
-    the atomic read.  Finally, to avoid reordering later reads or updates of
-    volatile objects to before the atomic read, a barrier is needed after the
-    atomic read.
- 
-    So, memory barriers are needed before and after atomic reads and updates.
-    And, in order to simplify the implementation, we use full memory barriers
-    in all cases, i.e. we enforce sequential consistency for atomic accesses.  */
- 
- /* Return the size of TYPE, which must be a positive power of 2.  */
- 
- static unsigned int
- resolve_atomic_size (tree type)
- {
-   unsigned HOST_WIDE_INT size = tree_to_uhwi (TYPE_SIZE_UNIT (type));
- 
-   if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
-     return size;
- 
-   /* We shouldn't reach here without having already detected that the size
-      isn't compatible with an atomic access.  */
-   gcc_assert (Serious_Errors_Detected);
- 
-   return 0;
- }
- 
- /* Build an atomic load for the underlying atomic object in SRC.  SYNC is
-    true if the load requires synchronization.  */
- 
- tree
- build_atomic_load (tree src, bool sync)
- {
-   tree ptr_type
-     = build_pointer_type
-       (build_qualified_type (void_type_node,
- 			     TYPE_QUAL_ATOMIC | TYPE_QUAL_VOLATILE));
-   tree mem_model
-     = build_int_cst (integer_type_node,
- 		     sync ? MEMMODEL_SEQ_CST : MEMMODEL_RELAXED);
-   tree orig_src = src;
-   tree t, addr, val;
-   unsigned int size;
-   int fncode;
- 
-   /* Remove conversions to get the address of the underlying object.  */
-   src = remove_conversions (src, false);
-   size = resolve_atomic_size (TREE_TYPE (src));
-   if (size == 0)
-     return orig_src;
- 
-   fncode = (int) BUILT_IN_ATOMIC_LOAD_N + exact_log2 (size) + 1;
-   t = builtin_decl_implicit ((enum built_in_function) fncode);
- 
-   addr = build_unary_op (ADDR_EXPR, ptr_type, src);
-   val = build_call_expr (t, 2, addr, mem_model);
- 
-   /* First reinterpret the loaded bits in the original type of the load,
-      then convert to the expected result type.  */
-   t = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (src), val);
-   return convert (TREE_TYPE (orig_src), t);
- }
- 
- /* Build an atomic store from SRC to the underlying atomic object in DEST.
-    SYNC is true if the store requires synchronization.  */
- 
- tree
- build_atomic_store (tree dest, tree src, bool sync)
- {
-   tree ptr_type
-     = build_pointer_type
-       (build_qualified_type (void_type_node,
- 			     TYPE_QUAL_ATOMIC | TYPE_QUAL_VOLATILE));
-   tree mem_model
-     = build_int_cst (integer_type_node,
- 		     sync ? MEMMODEL_SEQ_CST : MEMMODEL_RELAXED);
-   tree orig_dest = dest;
-   tree t, int_type, addr;
-   unsigned int size;
-   int fncode;
- 
-   /* Remove conversions to get the address of the underlying object.  */
-   dest = remove_conversions (dest, false);
-   size = resolve_atomic_size (TREE_TYPE (dest));
-   if (size == 0)
-     return build_binary_op (MODIFY_EXPR, NULL_TREE, orig_dest, src);
- 
-   fncode = (int) BUILT_IN_ATOMIC_STORE_N + exact_log2 (size) + 1;
-   t = builtin_decl_implicit ((enum built_in_function) fncode);
-   int_type = gnat_type_for_size (BITS_PER_UNIT * size, 1);
- 
-   /* First convert the bits to be stored to the original type of the store,
-      then reinterpret them in the effective type.  But if the original type
-      is a padded type with the same size, convert to the inner type instead,
-      as we don't want to artificially introduce a CONSTRUCTOR here.  */
-   if (TYPE_IS_PADDING_P (TREE_TYPE (dest))
-       && TYPE_SIZE (TREE_TYPE (dest))
- 	 == TYPE_SIZE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (dest)))))
-     src = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (dest))), src);
-   else
-     src = convert (TREE_TYPE (dest), src);
-   src = fold_build1 (VIEW_CONVERT_EXPR, int_type, src);
-   addr = build_unary_op (ADDR_EXPR, ptr_type, dest);
- 
-   return build_call_expr (t, 3, addr, src, mem_model);
- }
- 
- /* Build a load-modify-store sequence from SRC to DEST.  GNAT_NODE is used for
-    the location of the sequence.  Note that, even though the load and the store
-    are both atomic, the sequence itself is not atomic.  */
- 
- tree
- build_load_modify_store (tree dest, tree src, Node_Id gnat_node)
- {
-   /* We will be modifying DEST below so we build a copy.  */
-   dest = copy_node (dest);
-   tree ref = dest;
- 
-   while (handled_component_p (ref))
-     {
-       /* The load should already have been generated during the translation
- 	 of the GNAT destination tree; find it out in the GNU tree.  */
-       if (TREE_CODE (TREE_OPERAND (ref, 0)) == VIEW_CONVERT_EXPR)
- 	{
- 	  tree op = TREE_OPERAND (TREE_OPERAND (ref, 0), 0);
- 	  if (TREE_CODE (op) == CALL_EXPR && call_is_atomic_load (op))
- 	    {
- 	      tree type = TREE_TYPE (TREE_OPERAND (ref, 0));
- 	      tree t = CALL_EXPR_ARG (op, 0);
- 	      tree obj, temp, stmt;
- 
- 	      /* Find out the loaded object.  */
- 	      if (TREE_CODE (t) == NOP_EXPR)
- 		t = TREE_OPERAND (t, 0);
- 	      if (TREE_CODE (t) == ADDR_EXPR)
- 		obj = TREE_OPERAND (t, 0);
- 	      else
- 		obj = build1 (INDIRECT_REF, type, t);
- 
- 	      /* Drop atomic and volatile qualifiers for the temporary.  */
- 	      type = TYPE_MAIN_VARIANT (type);
- 
- 	      /* And drop BLKmode, if need be, to put it into a register.  */
- 	      if (TYPE_MODE (type) == BLKmode)
- 		{
- 		  unsigned int size = tree_to_uhwi (TYPE_SIZE (type));
- 		  type = copy_type (type);
- 		  machine_mode mode = int_mode_for_size (size, 0).else_blk ();
- 		  SET_TYPE_MODE (type, mode);
- 		}
- 
- 	      /* Create the temporary by inserting a SAVE_EXPR.  */
- 	      temp = build1 (SAVE_EXPR, type,
- 			     build1 (VIEW_CONVERT_EXPR, type, op));
- 	      TREE_OPERAND (ref, 0) = temp;
- 
- 	      start_stmt_group ();
- 
- 	      /* Build the modify of the temporary.  */
- 	      stmt = build_binary_op (MODIFY_EXPR, NULL_TREE, dest, src);
- 	      add_stmt_with_node (stmt, gnat_node);
- 
- 	      /* Build the store to the object.  */
- 	      stmt = build_atomic_store (obj, temp, false);
- 	      add_stmt_with_node (stmt, gnat_node);
- 
- 	      return end_stmt_group ();
- 	    }
- 	}
- 
-       TREE_OPERAND (ref, 0) = copy_node (TREE_OPERAND (ref, 0));
-       ref = TREE_OPERAND (ref, 0);
-     }
- 
-   /* Something went wrong earlier if we have not found the atomic load.  */
-   gcc_unreachable ();
- }
- 
- /* Make a binary operation of kind OP_CODE.  RESULT_TYPE is the type
-    desired for the result.  Usually the operation is to be performed
-    in that type.  For INIT_EXPR and MODIFY_EXPR, RESULT_TYPE must be
-    NULL_TREE.  For ARRAY_REF, RESULT_TYPE may be NULL_TREE, in which
-    case the type to be used will be derived from the operands.
-    Don't fold the result if NO_FOLD is true.
- 
-    This function is very much unlike the ones for C and C++ since we
-    have already done any type conversion and matching required.  All we
-    have to do here is validate the work done by SEM and handle subtypes.  */
- 
- tree
- build_binary_op (enum tree_code op_code, tree result_type,
- 		 tree left_operand, tree right_operand,
- 		 bool no_fold)
- {
-   tree left_type = TREE_TYPE (left_operand);
-   tree right_type = TREE_TYPE (right_operand);
-   tree left_base_type = get_base_type (left_type);
-   tree right_base_type = get_base_type (right_type);
-   tree operation_type = result_type;
-   tree best_type = NULL_TREE;
-   tree modulus, result;
-   bool has_side_effects = false;
- 
-   if (operation_type
-       && TREE_CODE (operation_type) == RECORD_TYPE
-       && TYPE_JUSTIFIED_MODULAR_P (operation_type))
-     operation_type = TREE_TYPE (TYPE_FIELDS (operation_type));
- 
-   if (operation_type && TYPE_IS_EXTRA_SUBTYPE_P (operation_type))
-     operation_type = get_base_type (operation_type);
- 
-   modulus = (operation_type
- 	     && TREE_CODE (operation_type) == INTEGER_TYPE
- 	     && TYPE_MODULAR_P (operation_type)
- 	     ? TYPE_MODULUS (operation_type) : NULL_TREE);
- 
-   switch (op_code)
-     {
-     case INIT_EXPR:
-     case MODIFY_EXPR:
-       gcc_checking_assert (!result_type);
- 
-       /* If there were integral or pointer conversions on the LHS, remove
- 	 them; we'll be putting them back below if needed.  Likewise for
- 	 conversions between record types, except for justified modular types.
- 	 But don't do this if the right operand is not BLKmode (for packed
- 	 arrays) unless we are not changing the mode.  */
-       while ((CONVERT_EXPR_P (left_operand)
- 	      || TREE_CODE (left_operand) == VIEW_CONVERT_EXPR)
- 	     && (((INTEGRAL_TYPE_P (left_type)
- 		   || POINTER_TYPE_P (left_type))
- 		  && (INTEGRAL_TYPE_P (operand_type (left_operand))
- 		      || POINTER_TYPE_P (operand_type (left_operand))))
- 		 || (TREE_CODE (left_type) == RECORD_TYPE
- 		     && !TYPE_JUSTIFIED_MODULAR_P (left_type)
- 		     && TREE_CODE (operand_type (left_operand)) == RECORD_TYPE
- 		     && (TYPE_MODE (right_type) == BLKmode
- 			 || TYPE_MODE (left_type)
- 			    == TYPE_MODE (operand_type (left_operand))))))
- 	{
- 	  left_operand = TREE_OPERAND (left_operand, 0);
- 	  left_type = TREE_TYPE (left_operand);
- 	}
- 
-       /* If a class-wide type may be involved, force use of the RHS type.  */
-       if ((TREE_CODE (right_type) == RECORD_TYPE
- 	   || TREE_CODE (right_type) == UNION_TYPE)
- 	  && TYPE_ALIGN_OK (right_type))
- 	operation_type = right_type;
- 
-       /* If we are copying between padded objects with compatible types, use
- 	 the padded view of the objects, this is very likely more efficient.
- 	 Likewise for a padded object that is assigned a constructor, if we
- 	 can convert the constructor to the inner type, to avoid putting a
- 	 VIEW_CONVERT_EXPR on the LHS.  But don't do so if we wouldn't have
- 	 actually copied anything.  */
-       else if (TYPE_IS_PADDING_P (left_type)
- 	       && TREE_CONSTANT (TYPE_SIZE (left_type))
- 	       && ((TREE_CODE (right_operand) == COMPONENT_REF
- 		    && TYPE_MAIN_VARIANT (left_type)
- 		       == TYPE_MAIN_VARIANT (operand_type (right_operand)))
- 		   || (TREE_CODE (right_operand) == CONSTRUCTOR
- 		       && !CONTAINS_PLACEHOLDER_P
- 			   (DECL_SIZE (TYPE_FIELDS (left_type)))))
- 	       && !integer_zerop (TYPE_SIZE (right_type)))
- 	{
- 	  /* We make an exception for a BLKmode type padding a non-BLKmode
- 	     inner type and do the conversion of the LHS right away, since
- 	     unchecked_convert wouldn't do it properly.  */
- 	  if (TYPE_MODE (left_type) == BLKmode
- 	      && TYPE_MODE (right_type) != BLKmode
- 	      && TREE_CODE (right_operand) != CONSTRUCTOR)
- 	    {
- 	      operation_type = right_type;
- 	      left_operand = convert (operation_type, left_operand);
- 	      left_type = operation_type;
- 	    }
- 	  else
- 	    operation_type = left_type;
- 	}
- 
-       /* If we have a call to a function that returns with variable size, use
- 	 the RHS type in case we want to use the return slot optimization.  */
-       else if (TREE_CODE (right_operand) == CALL_EXPR
- 	       && return_type_with_variable_size_p (right_type))
- 	operation_type = right_type;
- 
-       /* Find the best type to use for copying between aggregate types.  */
-       else if (((TREE_CODE (left_type) == ARRAY_TYPE
- 		 && TREE_CODE (right_type) == ARRAY_TYPE)
- 		|| (TREE_CODE (left_type) == RECORD_TYPE
- 		    && TREE_CODE (right_type) == RECORD_TYPE))
- 	       && (best_type = find_common_type (left_type, right_type)))
- 	operation_type = best_type;
- 
-       /* Otherwise use the LHS type.  */
-       else
- 	operation_type = left_type;
- 
-       /* Ensure everything on the LHS is valid.  If we have a field reference,
- 	 strip anything that get_inner_reference can handle.  Then remove any
- 	 conversions between types having the same code and mode.  And mark
- 	 VIEW_CONVERT_EXPRs with TREE_ADDRESSABLE.  When done, we must have
- 	 either an INDIRECT_REF, a NULL_EXPR, a SAVE_EXPR or a DECL node.  */
-       result = left_operand;
-       while (true)
- 	{
- 	  tree restype = TREE_TYPE (result);
- 
- 	  if (TREE_CODE (result) == COMPONENT_REF
- 	      || TREE_CODE (result) == ARRAY_REF
- 	      || TREE_CODE (result) == ARRAY_RANGE_REF)
- 	    while (handled_component_p (result))
- 	      result = TREE_OPERAND (result, 0);
- 
- 	  else if (TREE_CODE (result) == REALPART_EXPR
- 		   || TREE_CODE (result) == IMAGPART_EXPR
- 		   || (CONVERT_EXPR_P (result)
- 		       && (((TREE_CODE (restype)
- 			     == TREE_CODE (operand_type (result))
- 			     && TYPE_MODE (restype)
- 				== TYPE_MODE (operand_type (result))))
- 			   || TYPE_ALIGN_OK (restype))))
- 	    result = TREE_OPERAND (result, 0);
- 
- 	  else if (TREE_CODE (result) == VIEW_CONVERT_EXPR)
- 	    {
- 	      TREE_ADDRESSABLE (result) = 1;
- 	      result = TREE_OPERAND (result, 0);
- 	    }
- 
- 	  else
- 	    break;
- 	}
- 
-       gcc_assert (TREE_CODE (result) == INDIRECT_REF
- 		  || TREE_CODE (result) == NULL_EXPR
- 		  || TREE_CODE (result) == SAVE_EXPR
- 		  || DECL_P (result));
- 
-       /* Convert the right operand to the operation type unless it is
- 	 either already of the correct type or if the type involves a
- 	 placeholder, since the RHS may not have the same record type.  */
-       if (operation_type != right_type
- 	  && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (operation_type)))
- 	{
- 	  right_operand = convert (operation_type, right_operand);
- 	  right_type = operation_type;
- 	}
- 
-       /* If the left operand is not of the same type as the operation
- 	 type, wrap it up in a VIEW_CONVERT_EXPR.  */
-       if (left_type != operation_type)
- 	left_operand = unchecked_convert (operation_type, left_operand, false);
- 
-       has_side_effects = true;
-       modulus = NULL_TREE;
-       break;
- 
-     case ARRAY_REF:
-       if (!operation_type)
- 	operation_type = TREE_TYPE (left_type);
- 
-       /* ... fall through ... */
- 
-     case ARRAY_RANGE_REF:
-       /* First look through conversion between type variants.  Note that
- 	 this changes neither the operation type nor the type domain.  */
-       if (TREE_CODE (left_operand) == VIEW_CONVERT_EXPR
- 	  && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (left_operand, 0)))
- 	     == TYPE_MAIN_VARIANT (left_type))
- 	{
- 	  left_operand = TREE_OPERAND (left_operand, 0);
- 	  left_type = TREE_TYPE (left_operand);
- 	}
- 
-       /* For a range, make sure the element type is consistent.  */
-       if (op_code == ARRAY_RANGE_REF
- 	  && TREE_TYPE (operation_type) != TREE_TYPE (left_type))
- 	{
- 	  operation_type
- 	    = build_nonshared_array_type (TREE_TYPE (left_type),
- 					  TYPE_DOMAIN (operation_type));
- 	  /* Declare it now since it will never be declared otherwise.  This
- 	     is necessary to ensure that its subtrees are properly marked.  */
- 	  create_type_decl (TYPE_NAME (operation_type), operation_type, true,
- 			    false, Empty);
- 	}
- 
-       /* Then convert the right operand to its base type.  This will prevent
- 	 unneeded sign conversions when sizetype is wider than integer.  */
-       right_operand = convert (right_base_type, right_operand);
-       right_operand = convert_to_index_type (right_operand);
-       modulus = NULL_TREE;
-       break;
- 
-     case TRUTH_ANDIF_EXPR:
-     case TRUTH_ORIF_EXPR:
-     case TRUTH_AND_EXPR:
-     case TRUTH_OR_EXPR:
-     case TRUTH_XOR_EXPR:
-       gcc_checking_assert
- 	(TREE_CODE (get_base_type (result_type)) == BOOLEAN_TYPE);
-       operation_type = left_base_type;
-       left_operand = convert (operation_type, left_operand);
-       right_operand = convert (operation_type, right_operand);
-       break;
- 
-     case GE_EXPR:
-     case LE_EXPR:
-     case GT_EXPR:
-     case LT_EXPR:
-     case EQ_EXPR:
-     case NE_EXPR:
-       gcc_checking_assert
- 	(TREE_CODE (get_base_type (result_type)) == BOOLEAN_TYPE);
-       /* If either operand is a NULL_EXPR, just return a new one.  */
-       if (TREE_CODE (left_operand) == NULL_EXPR)
- 	return build2 (op_code, result_type,
- 		       build1 (NULL_EXPR, integer_type_node,
- 			       TREE_OPERAND (left_operand, 0)),
- 		       integer_zero_node);
- 
-       else if (TREE_CODE (right_operand) == NULL_EXPR)
- 	return build2 (op_code, result_type,
- 		       build1 (NULL_EXPR, integer_type_node,
- 			       TREE_OPERAND (right_operand, 0)),
- 		       integer_zero_node);
- 
-       /* If either object is a justified modular types, get the
- 	 fields from within.  */
-       if (TREE_CODE (left_type) == RECORD_TYPE
- 	  && TYPE_JUSTIFIED_MODULAR_P (left_type))
- 	{
- 	  left_operand = convert (TREE_TYPE (TYPE_FIELDS (left_type)),
- 				  left_operand);
- 	  left_type = TREE_TYPE (left_operand);
- 	  left_base_type = get_base_type (left_type);
- 	}
- 
-       if (TREE_CODE (right_type) == RECORD_TYPE
- 	  && TYPE_JUSTIFIED_MODULAR_P (right_type))
- 	{
- 	  right_operand = convert (TREE_TYPE (TYPE_FIELDS (right_type)),
- 				  right_operand);
- 	  right_type = TREE_TYPE (right_operand);
- 	  right_base_type = get_base_type (right_type);
- 	}
- 
-       /* If both objects are arrays, compare them specially.  */
-       if ((TREE_CODE (left_type) == ARRAY_TYPE
- 	   || (TREE_CODE (left_type) == INTEGER_TYPE
- 	       && TYPE_HAS_ACTUAL_BOUNDS_P (left_type)))
- 	  && (TREE_CODE (right_type) == ARRAY_TYPE
- 	      || (TREE_CODE (right_type) == INTEGER_TYPE
- 		  && TYPE_HAS_ACTUAL_BOUNDS_P (right_type))))
- 	{
- 	  result = compare_arrays (input_location,
- 				   result_type, left_operand, right_operand);
- 	  if (op_code == NE_EXPR)
- 	    result = invert_truthvalue_loc (EXPR_LOCATION (result), result);
- 	  else
- 	    gcc_assert (op_code == EQ_EXPR);
- 
- 	  return result;
- 	}
- 
-       /* Otherwise, the base types must be the same, unless they are both fat
- 	 pointer types or record types.  In the latter case, use the best type
- 	 and convert both operands to that type.  */
-       if (left_base_type != right_base_type)
- 	{
- 	  if (TYPE_IS_FAT_POINTER_P (left_base_type)
- 	      && TYPE_IS_FAT_POINTER_P (right_base_type))
- 	    {
- 	      gcc_assert (TYPE_MAIN_VARIANT (left_base_type)
- 			  == TYPE_MAIN_VARIANT (right_base_type));
- 	      best_type = left_base_type;
- 	    }
- 
- 	  else if (TREE_CODE (left_base_type) == RECORD_TYPE
- 		   && TREE_CODE (right_base_type) == RECORD_TYPE)
- 	    {
- 	      /* The only way this is permitted is if both types have the same
- 		 name.  In that case, one of them must not be self-referential.
- 		 Use it as the best type.  Even better with a fixed size.  */
- 	      gcc_assert (TYPE_NAME (left_base_type)
- 			  && TYPE_NAME (left_base_type)
- 			     == TYPE_NAME (right_base_type));
- 
- 	      if (TREE_CONSTANT (TYPE_SIZE (left_base_type)))
- 		best_type = left_base_type;
- 	      else if (TREE_CONSTANT (TYPE_SIZE (right_base_type)))
- 		best_type = right_base_type;
- 	      else if (!CONTAINS_PLACEHOLDER_P (TYPE_SIZE (left_base_type)))
- 		best_type = left_base_type;
- 	      else if (!CONTAINS_PLACEHOLDER_P (TYPE_SIZE (right_base_type)))
- 		best_type = right_base_type;
- 	      else
- 		gcc_unreachable ();
- 	    }
- 
- 	  else if (POINTER_TYPE_P (left_base_type)
- 		   && POINTER_TYPE_P (right_base_type))
- 	    {
- 	      gcc_assert (TREE_TYPE (left_base_type)
- 			  == TREE_TYPE (right_base_type));
- 	      best_type = left_base_type;
- 	    }
- 	  else
- 	    gcc_unreachable ();
- 
- 	  left_operand = convert (best_type, left_operand);
- 	  right_operand = convert (best_type, right_operand);
- 	}
-       else
- 	{
- 	  left_operand = convert (left_base_type, left_operand);
- 	  right_operand = convert (right_base_type, right_operand);
- 	}
- 
-       /* If both objects are fat pointers, compare them specially.  */
-       if (TYPE_IS_FAT_POINTER_P (left_base_type))
- 	{
- 	  result
- 	    = compare_fat_pointers (input_location,
- 				    result_type, left_operand, right_operand);
- 	  if (op_code == NE_EXPR)
- 	    result = invert_truthvalue_loc (EXPR_LOCATION (result), result);
- 	  else
- 	    gcc_assert (op_code == EQ_EXPR);
- 
- 	  return result;
- 	}
- 
-       modulus = NULL_TREE;
-       break;
- 
-     case LSHIFT_EXPR:
-     case RSHIFT_EXPR:
-     case LROTATE_EXPR:
-     case RROTATE_EXPR:
-        /* The RHS of a shift can be any type.  Also, ignore any modulus
- 	 (we used to abort, but this is needed for unchecked conversion
- 	 to modular types).  Otherwise, processing is the same as normal.  */
-       gcc_assert (operation_type == left_base_type);
-       modulus = NULL_TREE;
-       left_operand = convert (operation_type, left_operand);
-       break;
- 
-     case BIT_AND_EXPR:
-     case BIT_IOR_EXPR:
-     case BIT_XOR_EXPR:
-       /* For binary modulus, if the inputs are in range, so are the
- 	 outputs.  */
-       if (modulus && integer_pow2p (modulus))
- 	modulus = NULL_TREE;
-       goto common;
- 
-     case COMPLEX_EXPR:
-       gcc_assert (TREE_TYPE (result_type) == left_base_type
- 		  && TREE_TYPE (result_type) == right_base_type);
-       left_operand = convert (left_base_type, left_operand);
-       right_operand = convert (right_base_type, right_operand);
-       break;
- 
-     case TRUNC_DIV_EXPR:   case TRUNC_MOD_EXPR:
-     case CEIL_DIV_EXPR:    case CEIL_MOD_EXPR:
-     case FLOOR_DIV_EXPR:   case FLOOR_MOD_EXPR:
-     case ROUND_DIV_EXPR:   case ROUND_MOD_EXPR:
-       /* These always produce results lower than either operand.  */
-       modulus = NULL_TREE;
-       goto common;
- 
-     case POINTER_PLUS_EXPR:
-       gcc_assert (operation_type == left_base_type
- 		  && sizetype == right_base_type);
-       left_operand = convert (operation_type, left_operand);
-       right_operand = convert (sizetype, right_operand);
-       break;
- 
-     case PLUS_NOMOD_EXPR:
-     case MINUS_NOMOD_EXPR:
-       if (op_code == PLUS_NOMOD_EXPR)
- 	op_code = PLUS_EXPR;
-       else
- 	op_code = MINUS_EXPR;
-       modulus = NULL_TREE;
- 
-       /* ... fall through ... */
- 
-     case PLUS_EXPR:
-     case MINUS_EXPR:
-       /* Avoid doing arithmetics in ENUMERAL_TYPE or BOOLEAN_TYPE like the
- 	 other compilers.  Contrary to C, Ada doesn't allow arithmetics in
- 	 these types but can generate addition/subtraction for Succ/Pred.  */
-       if (operation_type
- 	  && (TREE_CODE (operation_type) == ENUMERAL_TYPE
- 	      || TREE_CODE (operation_type) == BOOLEAN_TYPE))
- 	operation_type = left_base_type = right_base_type
- 	  = gnat_type_for_mode (TYPE_MODE (operation_type),
- 				TYPE_UNSIGNED (operation_type));
- 
-       /* ... fall through ... */
- 
-     default:
-     common:
-       /* The result type should be the same as the base types of the
- 	 both operands (and they should be the same).  Convert
- 	 everything to the result type.  */
- 
-       gcc_assert (operation_type == left_base_type
- 		  && left_base_type == right_base_type);
-       left_operand = convert (operation_type, left_operand);
-       right_operand = convert (operation_type, right_operand);
-     }
- 
-   if (modulus && !integer_pow2p (modulus))
-     {
-       result = nonbinary_modular_operation (op_code, operation_type,
- 					    left_operand, right_operand);
-       modulus = NULL_TREE;
-     }
-   /* If either operand is a NULL_EXPR, just return a new one.  */
-   else if (TREE_CODE (left_operand) == NULL_EXPR)
-     return build1 (NULL_EXPR, operation_type, TREE_OPERAND (left_operand, 0));
-   else if (TREE_CODE (right_operand) == NULL_EXPR)
-     return build1 (NULL_EXPR, operation_type, TREE_OPERAND (right_operand, 0));
-   else if (op_code == ARRAY_REF || op_code == ARRAY_RANGE_REF)
-     {
-       result = build4 (op_code, operation_type, left_operand, right_operand,
- 		       NULL_TREE, NULL_TREE);
-       if (!no_fold)
- 	result = fold (result);
-     }
-   else if (op_code == INIT_EXPR || op_code == MODIFY_EXPR)
-     result = build2 (op_code, void_type_node, left_operand, right_operand);
-   else if (no_fold)
-     result = build2 (op_code, operation_type, left_operand, right_operand);
-   else
-     result
-       = fold_build2 (op_code, operation_type, left_operand, right_operand);
- 
-   if (TREE_CONSTANT (result))
-     ;
-   else if (op_code == ARRAY_REF || op_code == ARRAY_RANGE_REF)
-     {
-       if (TYPE_VOLATILE (operation_type))
- 	TREE_THIS_VOLATILE (result) = 1;
-     }
-   else
-     TREE_CONSTANT (result)
-       |= (TREE_CONSTANT (left_operand) && TREE_CONSTANT (right_operand));
- 
-   TREE_SIDE_EFFECTS (result) |= has_side_effects;
- 
-   /* If we are working with modular types, perform the MOD operation
-      if something above hasn't eliminated the need for it.  */
-   if (modulus)
-     {
-       modulus = convert (operation_type, modulus);
-       if (no_fold)
- 	result = build2 (FLOOR_MOD_EXPR, operation_type, result, modulus);
-       else
- 	result = fold_build2 (FLOOR_MOD_EXPR, operation_type, result, modulus);
-     }
- 
-   if (result_type && result_type != operation_type)
-     result = convert (result_type, result);
- 
-   return result;
- }
- 
- /* Similar, but for unary operations.  */
- 
- tree
- build_unary_op (enum tree_code op_code, tree result_type, tree operand)
- {
-   tree type = TREE_TYPE (operand);
-   tree base_type = get_base_type (type);
-   tree operation_type = result_type;
-   tree result;
- 
-   if (operation_type
-       && TREE_CODE (operation_type) == RECORD_TYPE
-       && TYPE_JUSTIFIED_MODULAR_P (operation_type))
-     operation_type = TREE_TYPE (TYPE_FIELDS (operation_type));
- 
-   if (operation_type
-       && TREE_CODE (operation_type) == INTEGER_TYPE
-       && TYPE_EXTRA_SUBTYPE_P (operation_type))
-     operation_type = get_base_type (operation_type);
- 
-   switch (op_code)
-     {
-     case REALPART_EXPR:
-     case IMAGPART_EXPR:
-       if (!operation_type)
- 	result_type = operation_type = TREE_TYPE (type);
-       else
- 	gcc_assert (result_type == TREE_TYPE (type));
- 
-       result = fold_build1 (op_code, operation_type, operand);
-       break;
- 
-     case TRUTH_NOT_EXPR:
-       gcc_checking_assert
- 	(TREE_CODE (get_base_type (result_type)) == BOOLEAN_TYPE);
-       result = invert_truthvalue_loc (EXPR_LOCATION (operand), operand);
-       /* When not optimizing, fold the result as invert_truthvalue_loc
- 	 doesn't fold the result of comparisons.  This is intended to undo
- 	 the trick used for boolean rvalues in gnat_to_gnu.  */
-       if (!optimize)
- 	result = fold (result);
-       break;
- 
-     case ATTR_ADDR_EXPR:
-     case ADDR_EXPR:
-       switch (TREE_CODE (operand))
- 	{
- 	case INDIRECT_REF:
- 	case UNCONSTRAINED_ARRAY_REF:
- 	  result = TREE_OPERAND (operand, 0);
- 
- 	  /* Make sure the type here is a pointer, not a reference.
- 	     GCC wants pointer types for function addresses.  */
- 	  if (!result_type)
- 	    result_type = build_pointer_type (type);
- 
- 	  /* If the underlying object can alias everything, propagate the
- 	     property since we are effectively retrieving the object.  */
- 	  if (POINTER_TYPE_P (TREE_TYPE (result))
- 	      && TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (result)))
- 	    {
- 	      if (TREE_CODE (result_type) == POINTER_TYPE
- 		  && !TYPE_REF_CAN_ALIAS_ALL (result_type))
- 		result_type
- 		  = build_pointer_type_for_mode (TREE_TYPE (result_type),
- 						 TYPE_MODE (result_type),
- 						 true);
- 	      else if (TREE_CODE (result_type) == REFERENCE_TYPE
- 		       && !TYPE_REF_CAN_ALIAS_ALL (result_type))
- 	        result_type
- 		  = build_reference_type_for_mode (TREE_TYPE (result_type),
- 						   TYPE_MODE (result_type),
- 						   true);
- 	    }
- 	  break;
- 
- 	case NULL_EXPR:
- 	  result = operand;
- 	  TREE_TYPE (result) = type = build_pointer_type (type);
- 	  break;
- 
- 	case COMPOUND_EXPR:
- 	  /* Fold a compound expression if it has unconstrained array type
- 	     since the middle-end cannot handle it.  But we don't it in the
- 	     general case because it may introduce aliasing issues if the
- 	     first operand is an indirect assignment and the second operand
- 	     the corresponding address, e.g. for an allocator.  However do
- 	     it for a return value to expose it for later recognition.  */
- 	  if (TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE
- 	      || (TREE_CODE (TREE_OPERAND (operand, 1)) == VAR_DECL
- 		  && DECL_RETURN_VALUE_P (TREE_OPERAND (operand, 1))))
- 	    {
- 	      result = build_unary_op (ADDR_EXPR, result_type,
- 				       TREE_OPERAND (operand, 1));
- 	      result = build2 (COMPOUND_EXPR, TREE_TYPE (result),
- 			       TREE_OPERAND (operand, 0), result);
- 	      break;
- 	    }
- 	  goto common;
- 
- 	case ARRAY_REF:
- 	case ARRAY_RANGE_REF:
- 	case COMPONENT_REF:
- 	case BIT_FIELD_REF:
- 	    /* If this is for 'Address, find the address of the prefix and add
- 	       the offset to the field.  Otherwise, do this the normal way.  */
- 	  if (op_code == ATTR_ADDR_EXPR)
- 	    {
- 	      poly_int64 bitsize;
- 	      poly_int64 bitpos;
- 	      tree offset, inner;
- 	      machine_mode mode;
- 	      int unsignedp, reversep, volatilep;
- 
- 	      inner = get_inner_reference (operand, &bitsize, &bitpos, &offset,
- 					   &mode, &unsignedp, &reversep,
- 					   &volatilep);
- 
- 	      /* If INNER is a padding type whose field has a self-referential
- 		 size, convert to that inner type.  We know the offset is zero
- 		 and we need to have that type visible.  */
- 	      if (type_is_padding_self_referential (TREE_TYPE (inner)))
- 		inner = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (inner))),
- 				 inner);
- 
- 	      /* Compute the offset as a byte offset from INNER.  */
- 	      if (!offset)
- 		offset = size_zero_node;
- 
- 	      offset
- 		= size_binop (PLUS_EXPR, offset,
- 			      size_int (bits_to_bytes_round_down (bitpos)));
- 
- 	      /* Take the address of INNER, convert it to a pointer to our type
- 		 and add the offset.  */
- 	      inner = build_unary_op (ADDR_EXPR,
- 				      build_pointer_type (TREE_TYPE (operand)),
- 				      inner);
- 	      result = build_binary_op (POINTER_PLUS_EXPR, TREE_TYPE (inner),
- 					inner, offset);
- 	      break;
- 	    }
- 	  goto common;
- 
- 	case CONSTRUCTOR:
- 	  /* If this is just a constructor for a padded record, we can
- 	     just take the address of the single field and convert it to
- 	     a pointer to our type.  */
- 	  if (TYPE_IS_PADDING_P (type))
- 	    {
- 	      result
- 		= build_unary_op (ADDR_EXPR,
- 				  build_pointer_type (TREE_TYPE (operand)),
- 				  CONSTRUCTOR_ELT (operand, 0)->value);
- 	      break;
- 	    }
- 	  goto common;
- 
- 	case NOP_EXPR:
- 	  if (AGGREGATE_TYPE_P (type)
- 	      && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (operand, 0))))
- 	    return build_unary_op (ADDR_EXPR, result_type,
- 				   TREE_OPERAND (operand, 0));
- 
- 	  /* ... fallthru ... */
- 
- 	case VIEW_CONVERT_EXPR:
- 	  /* If this just a variant conversion or if the conversion doesn't
- 	     change the mode, get the result type from this type and go down.
- 	     This is needed for conversions of CONST_DECLs, to eventually get
- 	     to the address of their CORRESPONDING_VARs.  */
- 	  if ((TYPE_MAIN_VARIANT (type)
- 	       == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (operand, 0))))
- 	      || (TYPE_MODE (type) != BLKmode
- 		  && (TYPE_MODE (type)
- 		      == TYPE_MODE (TREE_TYPE (TREE_OPERAND (operand, 0))))))
- 	    return build_unary_op (ADDR_EXPR,
- 				   (result_type ? result_type
- 				    : build_pointer_type (type)),
- 				   TREE_OPERAND (operand, 0));
- 	  goto common;
- 
- 	case CONST_DECL:
- 	  operand = DECL_CONST_CORRESPONDING_VAR (operand);
- 
- 	  /* ... fall through ... */
- 
- 	default:
- 	common:
- 
- 	  /* If we are taking the address of a padded record whose field
- 	     contains a template, take the address of the field.  */
- 	  if (TYPE_IS_PADDING_P (type)
- 	      && TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == RECORD_TYPE
- 	      && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (TYPE_FIELDS (type))))
- 	    {
- 	      type = TREE_TYPE (TYPE_FIELDS (type));
- 	      operand = convert (type, operand);
- 	    }
- 
- 	  gnat_mark_addressable (operand);
- 	  result = build_fold_addr_expr (operand);
- 	}
- 
-       TREE_CONSTANT (result) = staticp (operand) || TREE_CONSTANT (operand);
-       break;
- 
-     case INDIRECT_REF:
-       {
- 	tree t = remove_conversions (operand, false);
- 	bool can_never_be_null = DECL_P (t) && DECL_CAN_NEVER_BE_NULL_P (t);
- 
- 	/* If TYPE is a thin pointer, either first retrieve the base if this
- 	   is an expression with an offset built for the initialization of an
- 	   object with an unconstrained nominal subtype, or else convert to
- 	   the fat pointer.  */
- 	if (TYPE_IS_THIN_POINTER_P (type))
- 	  {
- 	    tree rec_type = TREE_TYPE (type);
- 
- 	    if (TREE_CODE (operand) == POINTER_PLUS_EXPR
- 		&& TREE_OPERAND (operand, 1)
- 		   == byte_position (DECL_CHAIN (TYPE_FIELDS (rec_type)))
- 		&& TREE_CODE (TREE_OPERAND (operand, 0)) == NOP_EXPR)
- 	      {
- 		operand = TREE_OPERAND (TREE_OPERAND (operand, 0), 0);
- 		type = TREE_TYPE (operand);
- 	      }
- 	    else if (TYPE_UNCONSTRAINED_ARRAY (rec_type))
- 	      {
- 		operand
- 		  = convert (TREE_TYPE (TYPE_UNCONSTRAINED_ARRAY (rec_type)),
- 			     operand);
- 		type = TREE_TYPE (operand);
- 	      }
- 	  }
- 
- 	/* If we want to refer to an unconstrained array, use the appropriate
- 	   expression.  But this will never survive down to the back-end.  */
- 	if (TYPE_IS_FAT_POINTER_P (type))
- 	  {
- 	    result = build1 (UNCONSTRAINED_ARRAY_REF,
- 			     TYPE_UNCONSTRAINED_ARRAY (type), operand);
- 	    TREE_READONLY (result)
- 	      = TYPE_READONLY (TYPE_UNCONSTRAINED_ARRAY (type));
- 	  }
- 
- 	/* If we are dereferencing an ADDR_EXPR, return its operand.  */
- 	else if (TREE_CODE (operand) == ADDR_EXPR)
- 	  result = TREE_OPERAND (operand, 0);
- 
- 	/* Otherwise, build and fold the indirect reference.  */
- 	else
- 	  {
- 	    result = build_fold_indirect_ref (operand);
- 	    TREE_READONLY (result) = TYPE_READONLY (TREE_TYPE (type));
- 	  }
- 
- 	if (!TYPE_IS_FAT_POINTER_P (type) && TYPE_VOLATILE (TREE_TYPE (type)))
- 	  {
- 	    TREE_SIDE_EFFECTS (result) = 1;
- 	    if (TREE_CODE (result) == INDIRECT_REF)
- 	      TREE_THIS_VOLATILE (result) = TYPE_VOLATILE (TREE_TYPE (result));
- 	  }
- 
- 	if ((TREE_CODE (result) == INDIRECT_REF
- 	     || TREE_CODE (result) == UNCONSTRAINED_ARRAY_REF)
- 	    && can_never_be_null)
- 	  TREE_THIS_NOTRAP (result) = 1;
- 
- 	break;
-       }
- 
-     case NEGATE_EXPR:
-     case BIT_NOT_EXPR:
-       {
- 	tree modulus = ((operation_type
- 			 && TREE_CODE (operation_type) == INTEGER_TYPE
- 			 && TYPE_MODULAR_P (operation_type))
- 			? TYPE_MODULUS (operation_type) : NULL_TREE);
- 	int mod_pow2 = modulus && integer_pow2p (modulus);
- 
- 	/* If this is a modular type, there are various possibilities
- 	   depending on the operation and whether the modulus is a
- 	   power of two or not.  */
- 
- 	if (modulus)
- 	  {
- 	    gcc_assert (operation_type == base_type);
- 	    operand = convert (operation_type, operand);
- 
- 	    /* The fastest in the negate case for binary modulus is
- 	       the straightforward code; the TRUNC_MOD_EXPR below
- 	       is an AND operation.  */
- 	    if (op_code == NEGATE_EXPR && mod_pow2)
- 	      result = fold_build2 (TRUNC_MOD_EXPR, operation_type,
- 				    fold_build1 (NEGATE_EXPR, operation_type,
- 						 operand),
- 				    modulus);
- 
- 	    /* For nonbinary negate case, return zero for zero operand,
- 	       else return the modulus minus the operand.  If the modulus
- 	       is a power of two minus one, we can do the subtraction
- 	       as an XOR since it is equivalent and faster on most machines. */
- 	    else if (op_code == NEGATE_EXPR && !mod_pow2)
- 	      {
- 		if (integer_pow2p (fold_build2 (PLUS_EXPR, operation_type,
- 						modulus,
- 						build_int_cst (operation_type,
- 							       1))))
- 		  result = fold_build2 (BIT_XOR_EXPR, operation_type,
- 					operand, modulus);
- 		else
- 		  result = fold_build2 (MINUS_EXPR, operation_type,
- 					modulus, operand);
- 
- 		result = fold_build3 (COND_EXPR, operation_type,
- 				      fold_build2 (NE_EXPR,
- 						   boolean_type_node,
- 						   operand,
- 						   build_int_cst
- 						   (operation_type, 0)),
- 				      result, operand);
- 	      }
- 	    else
- 	      {
- 		/* For the NOT cases, we need a constant equal to
- 		   the modulus minus one.  For a binary modulus, we
- 		   XOR against the constant and subtract the operand from
- 		   that constant for nonbinary modulus.  */
- 
- 		tree cnst = fold_build2 (MINUS_EXPR, operation_type, modulus,
- 					 build_int_cst (operation_type, 1));
- 
- 		if (mod_pow2)
- 		  result = fold_build2 (BIT_XOR_EXPR, operation_type,
- 					operand, cnst);
- 		else
- 		  result = fold_build2 (MINUS_EXPR, operation_type,
- 					cnst, operand);
- 	      }
- 
- 	    break;
- 	  }
-       }
- 
-       /* ... fall through ... */
- 
-     default:
-       gcc_assert (operation_type == base_type);
-       result = fold_build1 (op_code, operation_type,
- 			    convert (operation_type, operand));
-     }
- 
-   if (result_type && TREE_TYPE (result) != result_type)
-     result = convert (result_type, result);
- 
-   return result;
- }
- 
- /* Similar, but for COND_EXPR.  */
- 
- tree
- build_cond_expr (tree result_type, tree condition_operand,
-                  tree true_operand, tree false_operand)
- {
-   bool addr_p = false;
-   tree result;
- 
-   /* The front-end verified that result, true and false operands have
-      same base type.  Convert everything to the result type.  */
-   true_operand = convert (result_type, true_operand);
-   false_operand = convert (result_type, false_operand);
- 
-   /* If the result type is unconstrained, take the address of the operands and
-      then dereference the result.  Likewise if the result type is passed by
-      reference, because creating a temporary of this type is not allowed.  */
-   if (TREE_CODE (result_type) == UNCONSTRAINED_ARRAY_TYPE
-       || TYPE_IS_BY_REFERENCE_P (result_type)
-       || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (result_type)))
-     {
-       result_type = build_pointer_type (result_type);
-       true_operand = build_unary_op (ADDR_EXPR, result_type, true_operand);
-       false_operand = build_unary_op (ADDR_EXPR, result_type, false_operand);
-       addr_p = true;
-     }
- 
-   result = fold_build3 (COND_EXPR, result_type, condition_operand,
- 			true_operand, false_operand);
- 
-   /* If we have a common SAVE_EXPR (possibly surrounded by arithmetics)
-      in both arms, make sure it gets evaluated by moving it ahead of the
-      conditional expression.  This is necessary because it is evaluated
-      in only one place at run time and would otherwise be uninitialized
-      in one of the arms.  */
-   true_operand = skip_simple_arithmetic (true_operand);
-   false_operand = skip_simple_arithmetic (false_operand);
- 
-   if (true_operand == false_operand && TREE_CODE (true_operand) == SAVE_EXPR)
-     result = build2 (COMPOUND_EXPR, result_type, true_operand, result);
- 
-   if (addr_p)
-     result = build_unary_op (INDIRECT_REF, NULL_TREE, result);
- 
-   return result;
- }
- 
- /* Similar, but for COMPOUND_EXPR.  */
- 
- tree
- build_compound_expr (tree result_type, tree stmt_operand, tree expr_operand)
- {
-   bool addr_p = false;
-   tree result;
- 
-   /* If the result type is unconstrained, take the address of the operand and
-      then dereference the result.  Likewise if the result type is passed by
-      reference, but this is natively handled in the gimplifier.  */
-   if (TREE_CODE (result_type) == UNCONSTRAINED_ARRAY_TYPE
-       || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (result_type)))
-     {
-       result_type = build_pointer_type (result_type);
-       expr_operand = build_unary_op (ADDR_EXPR, result_type, expr_operand);
-       addr_p = true;
-     }
- 
-   result = fold_build2 (COMPOUND_EXPR, result_type, stmt_operand,
- 			expr_operand);
- 
-   if (addr_p)
-     result = build_unary_op (INDIRECT_REF, NULL_TREE, result);
- 
-   return result;
- }
- 
- /* Conveniently construct a function call expression.  FNDECL names the
-    function to be called, N is the number of arguments, and the "..."
-    parameters are the argument expressions.  Unlike build_call_expr
-    this doesn't fold the call, hence it will always return a CALL_EXPR.  */
- 
- tree
- build_call_n_expr (tree fndecl, int n, ...)
- {
-   va_list ap;
-   tree fntype = TREE_TYPE (fndecl);
-   tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
- 
-   va_start (ap, n);
-   fn = build_call_valist (TREE_TYPE (fntype), fn, n, ap);
-   va_end (ap);
-   return fn;
- }
- 
- /* Build a goto to LABEL for a raise, with an optional call to Local_Raise.
-    MSG gives the exception's identity for the call to Local_Raise, if any.  */
- 
- static tree
- build_goto_raise (Entity_Id gnat_label, int msg)
- {
-   tree gnu_label = gnat_to_gnu_entity (gnat_label, NULL_TREE, false);
-   tree gnu_result = build1 (GOTO_EXPR, void_type_node, gnu_label);
-   Entity_Id local_raise = Get_Local_Raise_Call_Entity ();
- 
-   /* If Local_Raise is present, build Local_Raise (Exception'Identity).  */
-   if (Present (local_raise))
-     {
-       tree gnu_local_raise
- 	= gnat_to_gnu_entity (local_raise, NULL_TREE, false);
-       tree gnu_exception_entity
- 	= gnat_to_gnu_entity (Get_RT_Exception_Entity (msg), NULL_TREE, false);
-       tree gnu_call
- 	= build_call_n_expr (gnu_local_raise, 1,
- 			     build_unary_op (ADDR_EXPR, NULL_TREE,
- 					     gnu_exception_entity));
-       gnu_result
- 	= build2 (COMPOUND_EXPR, void_type_node, gnu_call, gnu_result);
-     }
- 
-   TREE_USED (gnu_label) = 1;
-   return gnu_result;
- }
- 
- /* Expand the SLOC of GNAT_NODE, if present, into tree location information
-    pointed to by FILENAME, LINE and COL.  Fall back to the current location
-    if GNAT_NODE is absent or has no SLOC.  */
- 
- static void
- expand_sloc (Node_Id gnat_node, tree *filename, tree *line, tree *col)
- {
-   const char *str;
-   int line_number, column_number;
- 
-   if (Debug_Flag_NN || Exception_Locations_Suppressed)
-     {
-       str = "";
-       line_number = 0;
-       column_number = 0;
-     }
-   else if (Present (gnat_node) && Sloc (gnat_node) != No_Location)
-     {
-       str = Get_Name_String
- 	    (Debug_Source_Name (Get_Source_File_Index (Sloc (gnat_node))));
-       line_number = Get_Logical_Line_Number (Sloc (gnat_node));
-       column_number = Get_Column_Number (Sloc (gnat_node));
-     }
-   else
-     {
-       str = lbasename (LOCATION_FILE (input_location));
-       line_number = LOCATION_LINE (input_location);
-       column_number = LOCATION_COLUMN (input_location);
-     }
- 
-   const int len = strlen (str);
-   *filename = build_string (len, str);
-   TREE_TYPE (*filename) = build_array_type (char_type_node,
- 					    build_index_type (size_int (len)));
-   *line = build_int_cst (NULL_TREE, line_number);
-   if (col)
-     *col = build_int_cst (NULL_TREE, column_number);
- }
- 
- /* Build a call to a function that raises an exception and passes file name
-    and line number, if requested.  MSG says which exception function to call.
-    GNAT_NODE is the node conveying the source location for which the error
-    should be signaled, or Empty in which case the error is signaled for the
-    current location.  KIND says which kind of exception node this is for,
-    among N_Raise_{Constraint,Storage,Program}_Error.  */
- 
- tree
- build_call_raise (int msg, Node_Id gnat_node, char kind)
- {
-   Entity_Id gnat_label = get_exception_label (kind);
-   tree fndecl = gnat_raise_decls[msg];
-   tree filename, line;
- 
-   /* If this is to be done as a goto, handle that case.  */
-   if (Present (gnat_label))
-     return build_goto_raise (gnat_label, msg);
- 
-   expand_sloc (gnat_node, &filename, &line, NULL);
- 
-   return
-     build_call_n_expr (fndecl, 2,
- 		       build1 (ADDR_EXPR,
- 			       build_pointer_type (char_type_node),
- 			       filename),
- 		       line);
- }
- 
- /* Similar to build_call_raise, with extra information about the column
-    where the check failed.  */
- 
- tree
- build_call_raise_column (int msg, Node_Id gnat_node, char kind)
- {
-   Entity_Id gnat_label = get_exception_label (kind);
-   tree fndecl = gnat_raise_decls_ext[msg];
-   tree filename, line, col;
- 
-   /* If this is to be done as a goto, handle that case.  */
-   if (Present (gnat_label))
-     return build_goto_raise (gnat_label, msg);
- 
-   expand_sloc (gnat_node, &filename, &line, &col);
- 
-   return
-     build_call_n_expr (fndecl, 3,
- 		       build1 (ADDR_EXPR,
- 			       build_pointer_type (char_type_node),
- 			       filename),
- 		       line, col);
- }
- 
- /* Similar to build_call_raise_column, for an index or range check exception ,
-    with extra information of the form "INDEX out of range FIRST..LAST".  */
- 
- tree
- build_call_raise_range (int msg, Node_Id gnat_node, char kind,
- 			tree index, tree first, tree last)
- {
-   Entity_Id gnat_label = get_exception_label (kind);
-   tree fndecl = gnat_raise_decls_ext[msg];
-   tree filename, line, col;
- 
-   /* If this is to be done as a goto, handle that case.  */
-   if (Present (gnat_label))
-     return build_goto_raise (gnat_label, msg);
- 
-   expand_sloc (gnat_node, &filename, &line, &col);
- 
-   return
-     build_call_n_expr (fndecl, 6,
- 		       build1 (ADDR_EXPR,
- 			       build_pointer_type (char_type_node),
- 			       filename),
- 		       line, col,
- 		       convert (integer_type_node, index),
- 		       convert (integer_type_node, first),
- 		       convert (integer_type_node, last));
- }
- 
- /* qsort comparer for the bit positions of two constructor elements
-    for record components.  */
- 
- static int
- compare_elmt_bitpos (const PTR rt1, const PTR rt2)
- {
-   const constructor_elt * const elmt1 = (const constructor_elt *) rt1;
-   const constructor_elt * const elmt2 = (const constructor_elt *) rt2;
-   const_tree const field1 = elmt1->index;
-   const_tree const field2 = elmt2->index;
-   const int ret
-     = tree_int_cst_compare (bit_position (field1), bit_position (field2));
- 
-   return ret ? ret : (int) (DECL_UID (field1) - DECL_UID (field2));
- }
- 
- /* Return a CONSTRUCTOR of TYPE whose elements are V.  */
- 
- tree
- gnat_build_constructor (tree type, vec<constructor_elt, va_gc> *v)
- {
-   bool allconstant = (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST);
-   bool read_only = true;
-   bool side_effects = false;
-   tree result, obj, val;
-   unsigned int n_elmts;
- 
-   /* Scan the elements to see if they are all constant or if any has side
-      effects, to let us set global flags on the resulting constructor.  Count
-      the elements along the way for possible sorting purposes below.  */
-   FOR_EACH_CONSTRUCTOR_ELT (v, n_elmts, obj, val)
-     {
-       /* The predicate must be in keeping with output_constructor.  */
-       if ((!TREE_CONSTANT (val) && !TREE_STATIC (val))
- 	  || (TREE_CODE (type) == RECORD_TYPE
- 	      && CONSTRUCTOR_BITFIELD_P (obj)
- 	      && !initializer_constant_valid_for_bitfield_p (val))
- 	  || !initializer_constant_valid_p (val,
- 					    TREE_TYPE (val),
- 					    TYPE_REVERSE_STORAGE_ORDER (type)))
- 	allconstant = false;
- 
-       if (!TREE_READONLY (val))
- 	read_only = false;
- 
-       if (TREE_SIDE_EFFECTS (val))
- 	side_effects = true;
-     }
- 
-   /* For record types with constant components only, sort field list
-      by increasing bit position.  This is necessary to ensure the
-      constructor can be output as static data.  */
-   if (allconstant && TREE_CODE (type) == RECORD_TYPE && n_elmts > 1)
-     v->qsort (compare_elmt_bitpos);
- 
-   result = build_constructor (type, v);
-   CONSTRUCTOR_NO_CLEARING (result) = 1;
-   TREE_CONSTANT (result) = TREE_STATIC (result) = allconstant;
-   TREE_SIDE_EFFECTS (result) = side_effects;
-   TREE_READONLY (result) = TYPE_READONLY (type) || read_only || allconstant;
-   return result;
- }
- 
- /* Return a COMPONENT_REF to access FIELD in RECORD, or NULL_TREE if the field
-    is not found in the record.  Don't fold the result if NO_FOLD is true.  */
- 
- static tree
- build_simple_component_ref (tree record, tree field, bool no_fold)
- {
-   tree type = TYPE_MAIN_VARIANT (TREE_TYPE (record));
-   tree ref;
- 
-   /* The failure of this assertion will very likely come from a missing
-      insertion of an explicit dereference.  */
-   gcc_assert (RECORD_OR_UNION_TYPE_P (type) && COMPLETE_TYPE_P (type));
- 
-   /* Try to fold a conversion from another record or union type unless the type
-      contains a placeholder as it might be needed for a later substitution.  */
-   if (TREE_CODE (record) == VIEW_CONVERT_EXPR
-       && RECORD_OR_UNION_TYPE_P (TREE_TYPE (TREE_OPERAND (record, 0)))
-       && !type_contains_placeholder_p (type))
-     {
-       tree op = TREE_OPERAND (record, 0);
- 
-       /* If this is an unpadding operation, convert the underlying object to
- 	 the unpadded type directly.  */
-       if (TYPE_IS_PADDING_P (type) && field == TYPE_FIELDS (type))
- 	return convert (TREE_TYPE (field), op);
- 
-       /* Otherwise try to access FIELD directly in the underlying type, but
- 	 make sure that the form of the reference doesn't change too much;
- 	 this can happen for an unconstrained bit-packed array type whose
- 	 constrained form can be an integer type.  */
-       ref = build_simple_component_ref (op, field, no_fold);
-       if (ref && TREE_CODE (TREE_TYPE (ref)) == TREE_CODE (TREE_TYPE (field)))
- 	return ref;
-     }
- 
-   /* If this field is not in the specified record, see if we can find a field
-      in the specified record whose original field is the same as this one.  */
-   if (DECL_CONTEXT (field) != type)
-     {
-       tree new_field;
- 
-       /* First loop through normal components.  */
-       for (new_field = TYPE_FIELDS (type);
- 	   new_field;
- 	   new_field = DECL_CHAIN (new_field))
- 	if (SAME_FIELD_P (field, new_field))
- 	  break;
- 
-       /* Next, loop through DECL_INTERNAL_P components if we haven't found the
- 	 component in the first search.  Doing this search in two steps is
- 	 required to avoid hidden homonymous fields in the _Parent field.  */
-       if (!new_field)
- 	for (new_field = TYPE_FIELDS (type);
- 	     new_field;
- 	     new_field = DECL_CHAIN (new_field))
- 	  if (DECL_INTERNAL_P (new_field)
- 	      && RECORD_OR_UNION_TYPE_P (TREE_TYPE (new_field)))
- 	    {
- 	      tree field_ref
- 		= build_simple_component_ref (record, new_field, no_fold);
- 	      ref = build_simple_component_ref (field_ref, field, no_fold);
- 	      if (ref)
- 		return ref;
- 	    }
- 
-       field = new_field;
-     }
- 
-   if (!field)
-     return NULL_TREE;
- 
-   /* If the field's offset has overflowed, do not try to access it, as doing
-      so may trigger sanity checks deeper in the back-end.  Note that we don't
-      need to warn since this will be done on trying to declare the object.  */
-   if (TREE_CODE (DECL_FIELD_OFFSET (field)) == INTEGER_CST
-       && TREE_OVERFLOW (DECL_FIELD_OFFSET (field)))
-     return NULL_TREE;
- 
-   ref = build3 (COMPONENT_REF, TREE_TYPE (field), record, field, NULL_TREE);
- 
-   if (TREE_READONLY (record)
-       || TREE_READONLY (field)
-       || TYPE_READONLY (type))
-     TREE_READONLY (ref) = 1;
- 
-   if (TREE_THIS_VOLATILE (record)
-       || TREE_THIS_VOLATILE (field)
-       || TYPE_VOLATILE (type))
-     TREE_THIS_VOLATILE (ref) = 1;
- 
-   if (no_fold)
-     return ref;
- 
-   /* The generic folder may punt in this case because the inner array type
-      can be self-referential, but folding is in fact not problematic.  */
-   if (TREE_CODE (record) == CONSTRUCTOR
-       && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (record)))
-     {
-       vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (record);
-       unsigned HOST_WIDE_INT idx;
-       tree index, value;
-       FOR_EACH_CONSTRUCTOR_ELT (elts, idx, index, value)
-        if (index == field)
- 	return value;
-       return ref;
-     }
- 
-   return fold (ref);
- }
- 
- /* Likewise, but return NULL_EXPR and generate a Constraint_Error if the
-    field is not found in the record.  */
- 
- tree
- build_component_ref (tree record, tree field, bool no_fold)
- {
-   tree ref = build_simple_component_ref (record, field, no_fold);
-   if (ref)
-     return ref;
- 
-   /* Assume this is an invalid user field so raise Constraint_Error.  */
-   return build1 (NULL_EXPR, TREE_TYPE (field),
- 		 build_call_raise (CE_Discriminant_Check_Failed, Empty,
- 				   N_Raise_Constraint_Error));
- }
- 
- /* Helper for build_call_alloc_dealloc, with arguments to be interpreted
-    identically.  Process the case where a GNAT_PROC to call is provided.  */
- 
- static inline tree
- build_call_alloc_dealloc_proc (tree gnu_obj, tree gnu_size, tree gnu_type,
- 			       Entity_Id gnat_proc, Entity_Id gnat_pool)
- {
-   tree gnu_proc = gnat_to_gnu (gnat_proc);
-   tree gnu_call;
- 
-   /* A storage pool's underlying type is a record type (for both predefined
-      storage pools and GNAT simple storage pools). The secondary stack uses
-      the same mechanism, but its pool object (SS_Pool) is an integer.  */
-   if (Is_Record_Type (Underlying_Type (Etype (gnat_pool))))
-     {
-       /* The size is the third parameter; the alignment is the
- 	 same type.  */
-       Entity_Id gnat_size_type
- 	= Etype (Next_Formal (Next_Formal (First_Formal (gnat_proc))));
-       tree gnu_size_type = gnat_to_gnu_type (gnat_size_type);
- 
-       tree gnu_pool = gnat_to_gnu (gnat_pool);
-       tree gnu_pool_addr = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_pool);
-       tree gnu_align = size_int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT);
- 
-       gnu_size = convert (gnu_size_type, gnu_size);
-       gnu_align = convert (gnu_size_type, gnu_align);
- 
-       /* The first arg is always the address of the storage pool; next
- 	 comes the address of the object, for a deallocator, then the
- 	 size and alignment.  */
-       if (gnu_obj)
- 	gnu_call = build_call_n_expr (gnu_proc, 4, gnu_pool_addr, gnu_obj,
- 				      gnu_size, gnu_align);
-       else
- 	gnu_call = build_call_n_expr (gnu_proc, 3, gnu_pool_addr,
- 				      gnu_size, gnu_align);
-     }
- 
-   /* Secondary stack case.  */
-   else
-     {
-       /* The size is the second parameter.  */
-       Entity_Id gnat_size_type
- 	= Etype (Next_Formal (First_Formal (gnat_proc)));
-       tree gnu_size_type = gnat_to_gnu_type (gnat_size_type);
- 
-       gnu_size = convert (gnu_size_type, gnu_size);
- 
-       /* The first arg is the address of the object, for a deallocator,
- 	 then the size.  */
-       if (gnu_obj)
- 	gnu_call = build_call_n_expr (gnu_proc, 2, gnu_obj, gnu_size);
-       else
- 	gnu_call = build_call_n_expr (gnu_proc, 1, gnu_size);
-     }
- 
-   return gnu_call;
- }
- 
- /* Helper for build_call_alloc_dealloc, to build and return an allocator for
-    DATA_SIZE bytes aimed at containing a DATA_TYPE object, using the default
-    __gnat_malloc allocator.  Honor DATA_TYPE alignments greater than what the
-    latter offers.  */
- 
- static inline tree
- maybe_wrap_malloc (tree data_size, tree data_type, Node_Id gnat_node)
- {
-   /* When the DATA_TYPE alignment is stricter than what malloc offers
-      (super-aligned case), we allocate an "aligning" wrapper type and return
-      the address of its single data field with the malloc's return value
-      stored just in front.  */
- 
-   unsigned int data_align = TYPE_ALIGN (data_type);
-   unsigned int system_allocator_alignment
-       = get_target_system_allocator_alignment () * BITS_PER_UNIT;
- 
-   tree aligning_type
-     = ((data_align > system_allocator_alignment)
-        ? make_aligning_type (data_type, data_align, data_size,
- 			     system_allocator_alignment,
- 			     POINTER_SIZE / BITS_PER_UNIT,
- 			     gnat_node)
-        : NULL_TREE);
- 
-   tree size_to_malloc
-     = aligning_type ? TYPE_SIZE_UNIT (aligning_type) : data_size;
- 
-   tree malloc_ptr = build_call_n_expr (malloc_decl, 1, size_to_malloc);
- 
-   if (aligning_type)
-     {
-       /* Latch malloc's return value and get a pointer to the aligning field
- 	 first.  */
-       tree storage_ptr = gnat_protect_expr (malloc_ptr);
- 
-       tree aligning_record_addr
- 	= convert (build_pointer_type (aligning_type), storage_ptr);
- 
-       tree aligning_record
- 	= build_unary_op (INDIRECT_REF, NULL_TREE, aligning_record_addr);
- 
-       tree aligning_field
- 	= build_component_ref (aligning_record, TYPE_FIELDS (aligning_type),
- 			       false);
- 
-       tree aligning_field_addr
-         = build_unary_op (ADDR_EXPR, NULL_TREE, aligning_field);
- 
-       /* Then arrange to store the allocator's return value ahead
- 	 and return.  */
-       tree storage_ptr_slot_addr
- 	= build_binary_op (POINTER_PLUS_EXPR, ptr_type_node,
- 			   convert (ptr_type_node, aligning_field_addr),
- 			   size_int (-(HOST_WIDE_INT) POINTER_SIZE
- 				     / BITS_PER_UNIT));
- 
-       tree storage_ptr_slot
- 	= build_unary_op (INDIRECT_REF, NULL_TREE,
- 			  convert (build_pointer_type (ptr_type_node),
- 				   storage_ptr_slot_addr));
- 
-       return
- 	build2 (COMPOUND_EXPR, TREE_TYPE (aligning_field_addr),
- 		build_binary_op (INIT_EXPR, NULL_TREE,
- 				 storage_ptr_slot, storage_ptr),
- 		aligning_field_addr);
-     }
-   else
-     return malloc_ptr;
- }
- 
- /* Helper for build_call_alloc_dealloc, to release a DATA_TYPE object
-    designated by DATA_PTR using the __gnat_free entry point.  */
- 
- static inline tree
- maybe_wrap_free (tree data_ptr, tree data_type)
- {
-   /* In the regular alignment case, we pass the data pointer straight to free.
-      In the superaligned case, we need to retrieve the initial allocator
-      return value, stored in front of the data block at allocation time.  */
- 
-   unsigned int data_align = TYPE_ALIGN (data_type);
-   unsigned int system_allocator_alignment
-       = get_target_system_allocator_alignment () * BITS_PER_UNIT;
- 
-   tree free_ptr;
- 
-   if (data_align > system_allocator_alignment)
-     {
-       /* DATA_FRONT_PTR (void *)
- 	 = (void *)DATA_PTR - (void *)sizeof (void *))  */
-       tree data_front_ptr
- 	= build_binary_op
- 	  (POINTER_PLUS_EXPR, ptr_type_node,
- 	   convert (ptr_type_node, data_ptr),
- 	   size_int (-(HOST_WIDE_INT) POINTER_SIZE / BITS_PER_UNIT));
- 
-       /* FREE_PTR (void *) = *(void **)DATA_FRONT_PTR  */
-       free_ptr
- 	= build_unary_op
- 	  (INDIRECT_REF, NULL_TREE,
- 	   convert (build_pointer_type (ptr_type_node), data_front_ptr));
-     }
-   else
-     free_ptr = data_ptr;
- 
-   return build_call_n_expr (free_decl, 1, free_ptr);
- }
- 
- /* Build a GCC tree to call an allocation or deallocation function.
-    If GNU_OBJ is nonzero, it is an object to deallocate.  Otherwise,
-    generate an allocator.
- 
-    GNU_SIZE is the number of bytes to allocate and GNU_TYPE is the contained
-    object type, used to determine the to-be-honored address alignment.
-    GNAT_PROC, if present, is a procedure to call and GNAT_POOL is the storage
-    pool to use.  If not present, malloc and free are used.  GNAT_NODE is used
-    to provide an error location for restriction violation messages.  */
- 
- tree
- build_call_alloc_dealloc (tree gnu_obj, tree gnu_size, tree gnu_type,
-                           Entity_Id gnat_proc, Entity_Id gnat_pool,
-                           Node_Id gnat_node)
- {
-   /* Explicit proc to call ?  This one is assumed to deal with the type
-      alignment constraints.  */
-   if (Present (gnat_proc))
-     return build_call_alloc_dealloc_proc (gnu_obj, gnu_size, gnu_type,
- 					  gnat_proc, gnat_pool);
- 
-   /* Otherwise, object to "free" or "malloc" with possible special processing
-      for alignments stricter than what the default allocator honors.  */
-   else if (gnu_obj)
-     return maybe_wrap_free (gnu_obj, gnu_type);
-   else
-     {
-       /* Assert that we no longer can be called with this special pool.  */
-       gcc_assert (gnat_pool != -1);
- 
-       /* Check that we aren't violating the associated restriction.  */
-       if (!(Nkind (gnat_node) == N_Allocator && Comes_From_Source (gnat_node)))
- 	{
- 	  Check_No_Implicit_Heap_Alloc (gnat_node);
- 	  if (Has_Task (Etype (gnat_node)))
- 	    Check_No_Implicit_Task_Alloc (gnat_node);
- 	  if (Has_Protected (Etype (gnat_node)))
- 	    Check_No_Implicit_Protected_Alloc (gnat_node);
- 	}
-       return maybe_wrap_malloc (gnu_size, gnu_type, gnat_node);
-     }
- }
- 
- /* Build a GCC tree that corresponds to allocating an object of TYPE whose
-    initial value is INIT, if INIT is nonzero.  Convert the expression to
-    RESULT_TYPE, which must be some pointer type, and return the result.
- 
-    GNAT_PROC and GNAT_POOL optionally give the procedure to call and
-    the storage pool to use.  GNAT_NODE is used to provide an error
-    location for restriction violation messages.  If IGNORE_INIT_TYPE is
-    true, ignore the type of INIT for the purpose of determining the size;
-    this will cause the maximum size to be allocated if TYPE is of
-    self-referential size.  */
- 
- tree
- build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc,
-                  Entity_Id gnat_pool, Node_Id gnat_node, bool ignore_init_type)
- {
-   tree size, storage, storage_deref, storage_init;
- 
-   /* If the initializer, if present, is a NULL_EXPR, just return a new one.  */
-   if (init && TREE_CODE (init) == NULL_EXPR)
-     return build1 (NULL_EXPR, result_type, TREE_OPERAND (init, 0));
- 
-   /* If we are just annotating types, also return a NULL_EXPR.  */
-   else if (type_annotate_only)
-     return build1 (NULL_EXPR, result_type,
- 		   build_call_raise (CE_Range_Check_Failed, gnat_node,
- 				     N_Raise_Constraint_Error));
- 
-   /* If the initializer, if present, is a COND_EXPR, deal with each branch.  */
-   else if (init && TREE_CODE (init) == COND_EXPR)
-     return build3 (COND_EXPR, result_type, TREE_OPERAND (init, 0),
- 		   build_allocator (type, TREE_OPERAND (init, 1), result_type,
- 				    gnat_proc, gnat_pool, gnat_node,
- 				    ignore_init_type),
- 		   build_allocator (type, TREE_OPERAND (init, 2), result_type,
- 				    gnat_proc, gnat_pool, gnat_node,
- 				    ignore_init_type));
- 
-   /* If RESULT_TYPE is a fat or thin pointer, set SIZE to be the sum of the
-      sizes of the object and its template.  Allocate the whole thing and
-      fill in the parts that are known.  */
-   else if (TYPE_IS_FAT_OR_THIN_POINTER_P (result_type))
-     {
-       tree storage_type
- 	= build_unc_object_type_from_ptr (result_type, type,
- 					  get_identifier ("ALLOC"), false);
-       tree template_type = TREE_TYPE (TYPE_FIELDS (storage_type));
-       tree storage_ptr_type = build_pointer_type (storage_type);
- 
-       size = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_SIZE_UNIT (storage_type),
- 					     init);
- 
-       /* If the size overflows, pass -1 so Storage_Error will be raised.  */
-       if (TREE_CODE (size) == INTEGER_CST && !valid_constant_size_p (size))
- 	size = size_int (-1);
- 
-       storage = build_call_alloc_dealloc (NULL_TREE, size, storage_type,
- 					  gnat_proc, gnat_pool, gnat_node);
-       storage = convert (storage_ptr_type, gnat_protect_expr (storage));
-       storage_deref = build_unary_op (INDIRECT_REF, NULL_TREE, storage);
-       TREE_THIS_NOTRAP (storage_deref) = 1;
- 
-       /* If there is an initializing expression, then make a constructor for
- 	 the entire object including the bounds and copy it into the object.
- 	 If there is no initializing expression, just set the bounds.  */
-       if (init)
- 	{
- 	  vec<constructor_elt, va_gc> *v;
- 	  vec_alloc (v, 2);
- 
- 	  CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (storage_type),
- 				  build_template (template_type, type, init));
- 	  CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (TYPE_FIELDS (storage_type)),
- 				  init);
- 	  storage_init
- 	    = build_binary_op (INIT_EXPR, NULL_TREE, storage_deref,
- 			       gnat_build_constructor (storage_type, v));
- 	}
-       else
- 	storage_init
- 	  = build_binary_op (INIT_EXPR, NULL_TREE,
- 			     build_component_ref (storage_deref,
- 						  TYPE_FIELDS (storage_type),
- 						  false),
- 			     build_template (template_type, type, NULL_TREE));
- 
-       return build2 (COMPOUND_EXPR, result_type,
- 		     storage_init, convert (result_type, storage));
-     }
- 
-   size = TYPE_SIZE_UNIT (type);
- 
-   /* If we have an initializing expression, see if its size is simpler
-      than the size from the type.  */
-   if (!ignore_init_type && init && TYPE_SIZE_UNIT (TREE_TYPE (init))
-       && (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (init))) == INTEGER_CST
- 	  || CONTAINS_PLACEHOLDER_P (size)))
-     size = TYPE_SIZE_UNIT (TREE_TYPE (init));
- 
-   /* If the size is still self-referential, reference the initializing
-      expression, if it is present.  If not, this must have been a call
-      to allocate a library-level object, in which case we just use the
-      maximum size.  */
-   if (!ignore_init_type && init)
-     size = SUBSTITUTE_PLACEHOLDER_IN_EXPR (size, init);
-   else if (CONTAINS_PLACEHOLDER_P (size))
-     size = max_size (size, true);
- 
-   /* If the size overflows, pass -1 so Storage_Error will be raised.  */
-   if (TREE_CODE (size) == INTEGER_CST && !valid_constant_size_p (size))
-     size = size_int (-1);
- 
-   storage = convert (result_type,
- 		     build_call_alloc_dealloc (NULL_TREE, size, type,
- 					       gnat_proc, gnat_pool,
- 					       gnat_node));
- 
-   /* If we have an initial value, protect the new address, assign the value
-      and return the address with a COMPOUND_EXPR.  */
-   if (init)
-     {
-       storage = gnat_protect_expr (storage);
-       storage_deref = build_unary_op (INDIRECT_REF, NULL_TREE, storage);
-       TREE_THIS_NOTRAP (storage_deref) = 1;
-       storage_init
- 	= build_binary_op (INIT_EXPR, NULL_TREE, storage_deref, init);
-       return build2 (COMPOUND_EXPR, result_type, storage_init, storage);
-     }
- 
-   return storage;
- }
- 
- /* Indicate that we need to take the address of T and that it therefore
-    should not be allocated in a register.  Return true if successful.  */
- 
- bool
- gnat_mark_addressable (tree t)
- {
-   while (true)
-     switch (TREE_CODE (t))
-       {
-       case ADDR_EXPR:
-       case COMPONENT_REF:
-       case ARRAY_REF:
-       case ARRAY_RANGE_REF:
-       case REALPART_EXPR:
-       case IMAGPART_EXPR:
-       case VIEW_CONVERT_EXPR:
-       case NON_LVALUE_EXPR:
-       CASE_CONVERT:
- 	t = TREE_OPERAND (t, 0);
- 	break;
- 
-       case COMPOUND_EXPR:
- 	t = TREE_OPERAND (t, 1);
- 	break;
- 
-       case CONSTRUCTOR:
- 	TREE_ADDRESSABLE (t) = 1;
- 	return true;
- 
-       case VAR_DECL:
-       case PARM_DECL:
-       case RESULT_DECL:
- 	TREE_ADDRESSABLE (t) = 1;
- 	return true;
- 
-       case FUNCTION_DECL:
- 	TREE_ADDRESSABLE (t) = 1;
- 	return true;
- 
-       case CONST_DECL:
- 	return DECL_CONST_CORRESPONDING_VAR (t)
- 	       && gnat_mark_addressable (DECL_CONST_CORRESPONDING_VAR (t));
- 
-       default:
- 	return true;
-     }
- }
- 
- /* Return true if EXP is a stable expression for the purpose of the functions
-    below and, therefore, can be returned unmodified by them.  We accept things
-    that are actual constants or that have already been handled.  */
- 
- static bool
- gnat_stable_expr_p (tree exp)
- {
-   enum tree_code code = TREE_CODE (exp);
-   return TREE_CONSTANT (exp) || code == NULL_EXPR || code == SAVE_EXPR;
- }
- 
- /* Save EXP for later use or reuse.  This is equivalent to save_expr in tree.c
-    but we know how to handle our own nodes.  */
- 
- tree
- gnat_save_expr (tree exp)
- {
-   tree type = TREE_TYPE (exp);
-   enum tree_code code = TREE_CODE (exp);
- 
-   if (gnat_stable_expr_p (exp))
-     return exp;
- 
-   if (code == UNCONSTRAINED_ARRAY_REF)
-     {
-       tree t = build1 (code, type, gnat_save_expr (TREE_OPERAND (exp, 0)));
-       TREE_READONLY (t) = TYPE_READONLY (type);
-       return t;
-     }
- 
-   /* If this is a COMPONENT_REF of a fat pointer, save the entire fat pointer.
-      This may be more efficient, but will also allow us to more easily find
-      the match for the PLACEHOLDER_EXPR.  */
-   if (code == COMPONENT_REF
-       && TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (exp, 0))))
-     return build3 (code, type, gnat_save_expr (TREE_OPERAND (exp, 0)),
- 		   TREE_OPERAND (exp, 1), NULL_TREE);
- 
-   return save_expr (exp);
- }
- 
- /* Protect EXP for immediate reuse.  This is a variant of gnat_save_expr that
-    is optimized under the assumption that EXP's value doesn't change before
-    its subsequent reuse(s) except through its potential reevaluation.  */
- 
- tree
- gnat_protect_expr (tree exp)
- {
-   tree type = TREE_TYPE (exp);
-   enum tree_code code = TREE_CODE (exp);
- 
-   if (gnat_stable_expr_p (exp))
-     return exp;
- 
-   /* If EXP has no side effects, we theoretically don't need to do anything.
-      However, we may be recursively passed more and more complex expressions
-      involving checks which will be reused multiple times and eventually be
-      unshared for gimplification; in order to avoid a complexity explosion
-      at that point, we protect any expressions more complex than a simple
-      arithmetic expression.  */
-   if (!TREE_SIDE_EFFECTS (exp))
-     {
-       tree inner = skip_simple_arithmetic (exp);
-       if (!EXPR_P (inner) || REFERENCE_CLASS_P (inner))
- 	return exp;
-     }
- 
-   /* If this is a conversion, protect what's inside the conversion.  */
-   if (code == NON_LVALUE_EXPR
-       || CONVERT_EXPR_CODE_P (code)
-       || code == VIEW_CONVERT_EXPR)
-   return build1 (code, type, gnat_protect_expr (TREE_OPERAND (exp, 0)));
- 
-   /* If we're indirectly referencing something, we only need to protect the
-      address since the data itself can't change in these situations.  */
-   if (code == INDIRECT_REF || code == UNCONSTRAINED_ARRAY_REF)
-     {
-       tree t = build1 (code, type, gnat_protect_expr (TREE_OPERAND (exp, 0)));
-       TREE_READONLY (t) = TYPE_READONLY (type);
-       return t;
-     }
- 
-   /* Likewise if we're indirectly referencing part of something.  */
-   if (code == COMPONENT_REF
-       && TREE_CODE (TREE_OPERAND (exp, 0)) == INDIRECT_REF)
-     return build3 (code, type, gnat_protect_expr (TREE_OPERAND (exp, 0)),
- 		   TREE_OPERAND (exp, 1), NULL_TREE);
- 
-   /* If this is a COMPONENT_REF of a fat pointer, save the entire fat pointer.
-      This may be more efficient, but will also allow us to more easily find
-      the match for the PLACEHOLDER_EXPR.  */
-   if (code == COMPONENT_REF
-       && TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (exp, 0))))
-     return build3 (code, type, gnat_protect_expr (TREE_OPERAND (exp, 0)),
- 		   TREE_OPERAND (exp, 1), NULL_TREE);
- 
-   /* If this is a fat pointer or a scalar, just make a SAVE_EXPR.  Likewise
-      for a CALL_EXPR as large objects are returned via invisible reference
-      in most ABIs so the temporary will directly be filled by the callee.  */
-   if (TYPE_IS_FAT_POINTER_P (type)
-       || !AGGREGATE_TYPE_P (type)
-       || code == CALL_EXPR)
-     return save_expr (exp);
- 
-   /* Otherwise reference, protect the address and dereference.  */
-   return
-     build_unary_op (INDIRECT_REF, type,
- 		    save_expr (build_unary_op (ADDR_EXPR, NULL_TREE, exp)));
- }
- 
- /* This is equivalent to stabilize_reference_1 in tree.c but we take an extra
-    argument to force evaluation of everything.  */
- 
- static tree
- gnat_stabilize_reference_1 (tree e, void *data)
- {
-   const bool force = *(bool *)data;
-   enum tree_code code = TREE_CODE (e);
-   tree type = TREE_TYPE (e);
-   tree result;
- 
-   if (gnat_stable_expr_p (e))
-     return e;
- 
-   switch (TREE_CODE_CLASS (code))
-     {
-     case tcc_exceptional:
-     case tcc_declaration:
-     case tcc_comparison:
-     case tcc_expression:
-     case tcc_reference:
-     case tcc_vl_exp:
-       /* If this is a COMPONENT_REF of a fat pointer, save the entire
- 	 fat pointer.  This may be more efficient, but will also allow
- 	 us to more easily find the match for the PLACEHOLDER_EXPR.  */
-       if (code == COMPONENT_REF
- 	  && TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (e, 0))))
- 	result
- 	  = build3 (code, type,
- 		    gnat_stabilize_reference_1 (TREE_OPERAND (e, 0), data),
- 		    TREE_OPERAND (e, 1), NULL_TREE);
-       /* If the expression has side-effects, then encase it in a SAVE_EXPR
- 	 so that it will only be evaluated once.  */
-       /* The tcc_reference and tcc_comparison classes could be handled as
- 	 below, but it is generally faster to only evaluate them once.  */
-       else if (TREE_SIDE_EFFECTS (e) || force)
- 	return save_expr (e);
-       else
- 	return e;
-       break;
- 
-     case tcc_binary:
-       /* Recursively stabilize each operand.  */
-       result
- 	= build2 (code, type,
- 		  gnat_stabilize_reference_1 (TREE_OPERAND (e, 0), data),
- 		  gnat_stabilize_reference_1 (TREE_OPERAND (e, 1), data));
-       break;
- 
-     case tcc_unary:
-       /* Recursively stabilize each operand.  */
-       result
- 	= build1 (code, type,
- 		  gnat_stabilize_reference_1 (TREE_OPERAND (e, 0), data));
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   TREE_READONLY (result) = TREE_READONLY (e);
-   TREE_SIDE_EFFECTS (result) |= TREE_SIDE_EFFECTS (e);
-   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
- 
-   return result;
- }
- 
- /* This is equivalent to stabilize_reference in tree.c but we know how to
-    handle our own nodes and we take extra arguments.  FORCE says whether to
-    force evaluation of everything in REF.  INIT is set to the first arm of
-    a COMPOUND_EXPR present in REF, if any.  */
- 
- tree
- gnat_stabilize_reference (tree ref, bool force, tree *init)
- {
-   return
-     gnat_rewrite_reference (ref, gnat_stabilize_reference_1, &force, init);
- }
- 
- /* Rewrite reference REF and call FUNC on each expression within REF in the
-    process.  DATA is passed unmodified to FUNC.  INIT is set to the first
-    arm of a COMPOUND_EXPR present in REF, if any.  */
- 
- tree
- gnat_rewrite_reference (tree ref, rewrite_fn func, void *data, tree *init)
- {
-   tree type = TREE_TYPE (ref);
-   enum tree_code code = TREE_CODE (ref);
-   tree result;
- 
-   switch (code)
-     {
-     case CONST_DECL:
-     case VAR_DECL:
-     case PARM_DECL:
-     case RESULT_DECL:
-       /* No action is needed in this case.  */
-       return ref;
- 
-     CASE_CONVERT:
-     case FLOAT_EXPR:
-     case FIX_TRUNC_EXPR:
-     case REALPART_EXPR:
-     case IMAGPART_EXPR:
-     case VIEW_CONVERT_EXPR:
-       result
- 	= build1 (code, type,
- 		  gnat_rewrite_reference (TREE_OPERAND (ref, 0), func, data,
- 					  init));
-       break;
- 
-     case INDIRECT_REF:
-     case UNCONSTRAINED_ARRAY_REF:
-       result = build1 (code, type, func (TREE_OPERAND (ref, 0), data));
-       break;
- 
-     case COMPONENT_REF:
-       result = build3 (COMPONENT_REF, type,
- 		       gnat_rewrite_reference (TREE_OPERAND (ref, 0), func,
- 					       data, init),
- 		       TREE_OPERAND (ref, 1), NULL_TREE);
-       break;
- 
-     case BIT_FIELD_REF:
-       result = build3 (BIT_FIELD_REF, type,
- 		       gnat_rewrite_reference (TREE_OPERAND (ref, 0), func,
- 					       data, init),
- 		       TREE_OPERAND (ref, 1), TREE_OPERAND (ref, 2));
-       REF_REVERSE_STORAGE_ORDER (result) = REF_REVERSE_STORAGE_ORDER (ref);
-       break;
- 
-     case ARRAY_REF:
-     case ARRAY_RANGE_REF:
-       result
- 	= build4 (code, type,
- 		  gnat_rewrite_reference (TREE_OPERAND (ref, 0), func, data,
- 					  init),
- 		  func (TREE_OPERAND (ref, 1), data),
- 		  TREE_OPERAND (ref, 2), NULL_TREE);
-       break;
- 
-     case COMPOUND_EXPR:
-       gcc_assert (!*init);
-       *init = TREE_OPERAND (ref, 0);
-       /* We expect only the pattern built in Call_to_gnu.  */
-       gcc_assert (DECL_P (TREE_OPERAND (ref, 1))
- 		  || (TREE_CODE (TREE_OPERAND (ref, 1)) == COMPONENT_REF
- 		      && DECL_P (TREE_OPERAND (TREE_OPERAND (ref, 1), 0))));
-       return TREE_OPERAND (ref, 1);
- 
-     case CALL_EXPR:
-       {
- 	/* This can only be an atomic load.  */
- 	gcc_assert (call_is_atomic_load (ref));
- 
- 	/* An atomic load is an INDIRECT_REF of its first argument.  */
- 	tree t = CALL_EXPR_ARG (ref, 0);
- 	if (TREE_CODE (t) == NOP_EXPR)
- 	  t = TREE_OPERAND (t, 0);
- 	if (TREE_CODE (t) == ADDR_EXPR)
- 	  t = build1 (ADDR_EXPR, TREE_TYPE (t),
- 		      gnat_rewrite_reference (TREE_OPERAND (t, 0), func, data,
- 					      init));
- 	else
- 	  t = func (t, data);
- 	t = fold_convert (TREE_TYPE (CALL_EXPR_ARG (ref, 0)), t);
- 
- 	result = build_call_expr (TREE_OPERAND (CALL_EXPR_FN (ref), 0), 2,
- 				  t, CALL_EXPR_ARG (ref, 1));
-       }
-       break;
- 
-     case ERROR_MARK:
-     case NULL_EXPR:
-       return ref;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   /* TREE_THIS_VOLATILE and TREE_SIDE_EFFECTS set on the initial expression
-      may not be sustained across some paths, such as the way via build1 for
-      INDIRECT_REF.  We reset those flags here in the general case, which is
-      consistent with the GCC version of this routine.
- 
-      Special care should be taken regarding TREE_SIDE_EFFECTS, because some
-      paths introduce side-effects where there was none initially (e.g. if a
-      SAVE_EXPR is built) and we also want to keep track of that.  */
-   TREE_READONLY (result) = TREE_READONLY (ref);
-   TREE_SIDE_EFFECTS (result) |= TREE_SIDE_EFFECTS (ref);
-   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
- 
-   if (code == INDIRECT_REF
-       || code == UNCONSTRAINED_ARRAY_REF
-       || code == ARRAY_REF
-       || code == ARRAY_RANGE_REF)
-     TREE_THIS_NOTRAP (result) = TREE_THIS_NOTRAP (ref);
- 
-   return result;
- }
- 
- /* This is equivalent to get_inner_reference in expr.c but it returns the
-    ultimate containing object only if the reference (lvalue) is constant,
-    i.e. if it doesn't depend on the context in which it is evaluated.  */
- 
- tree
- get_inner_constant_reference (tree exp)
- {
-   while (true)
-     {
-       switch (TREE_CODE (exp))
- 	{
- 	case BIT_FIELD_REF:
- 	  break;
- 
- 	case COMPONENT_REF:
- 	  if (!TREE_CONSTANT (DECL_FIELD_OFFSET (TREE_OPERAND (exp, 1))))
- 	    return NULL_TREE;
- 	  break;
- 
- 	case ARRAY_REF:
- 	case ARRAY_RANGE_REF:
- 	  {
- 	    if (TREE_OPERAND (exp, 2))
- 	      return NULL_TREE;
- 
- 	    tree array_type = TREE_TYPE (TREE_OPERAND (exp, 0));
- 	    if (!TREE_CONSTANT (TREE_OPERAND (exp, 1))
- 	        || !TREE_CONSTANT (TYPE_MIN_VALUE (TYPE_DOMAIN (array_type)))
- 	        || !TREE_CONSTANT (TYPE_SIZE_UNIT (TREE_TYPE (array_type))))
- 	      return NULL_TREE;
- 	  }
- 	  break;
- 
- 	case REALPART_EXPR:
- 	case IMAGPART_EXPR:
- 	case VIEW_CONVERT_EXPR:
- 	  break;
- 
- 	default:
- 	  goto done;
- 	}
- 
-       exp = TREE_OPERAND (exp, 0);
-     }
- 
- done:
-   return exp;
- }
- 
- /* Return true if EXPR is the addition or the subtraction of a constant and,
-    if so, set *ADD to the addend, *CST to the constant and *MINUS_P to true
-    if this is a subtraction.  */
- 
- bool
- is_simple_additive_expression (tree expr, tree *add, tree *cst, bool *minus_p)
- {
-   /* Skip overflow checks.  */
-   if (TREE_CODE (expr) == COND_EXPR
-       && TREE_CODE (COND_EXPR_THEN (expr)) == COMPOUND_EXPR
-       && TREE_CODE (TREE_OPERAND (COND_EXPR_THEN (expr), 0)) == CALL_EXPR
-       && get_callee_fndecl (TREE_OPERAND (COND_EXPR_THEN (expr), 0))
-          == gnat_raise_decls[CE_Overflow_Check_Failed])
-     expr = COND_EXPR_ELSE (expr);
- 
-   if (TREE_CODE (expr) == PLUS_EXPR)
-     {
-       if (TREE_CONSTANT (TREE_OPERAND (expr, 0)))
- 	{
- 	  *add = TREE_OPERAND (expr, 1);
- 	  *cst = TREE_OPERAND (expr, 0);
- 	  *minus_p = false;
- 	  return true;
- 	}
-       else if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
- 	{
- 	  *add = TREE_OPERAND (expr, 0);
- 	  *cst = TREE_OPERAND (expr, 1);
- 	  *minus_p = false;
- 	  return true;
- 	}
-     }
-   else if (TREE_CODE (expr) == MINUS_EXPR)
-     {
-       if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
- 	{
- 	  *add = TREE_OPERAND (expr, 0);
- 	  *cst = TREE_OPERAND (expr, 1);
- 	  *minus_p = true;
- 	  return true;
- 	}
-     }
- 
-   return false;
- }
- 
- /* If EXPR is an expression that is invariant in the current function, in the
-    sense that it can be evaluated anywhere in the function and any number of
-    times, return EXPR or an equivalent expression.  Otherwise return NULL.  */
- 
- tree
- gnat_invariant_expr (tree expr)
- {
-   tree type = TREE_TYPE (expr);
-   tree add, cst;
-   bool minus_p;
- 
-   expr = remove_conversions (expr, false);
- 
-   /* Look through temporaries created to capture values.  */
-   while ((TREE_CODE (expr) == CONST_DECL
- 	  || (TREE_CODE (expr) == VAR_DECL && TREE_READONLY (expr)))
- 	 && decl_function_context (expr) == current_function_decl
- 	 && DECL_INITIAL (expr))
-     {
-       expr = DECL_INITIAL (expr);
-       /* Look into CONSTRUCTORs built to initialize padded types.  */
-       expr = maybe_padded_object (expr);
-       expr = remove_conversions (expr, false);
-     }
- 
-   /* We are only interested in scalar types at the moment and, even if we may
-      have gone through padding types in the above loop, we must be back to a
-      scalar value at this point.  */
-   if (AGGREGATE_TYPE_P (TREE_TYPE (expr)))
-     return NULL_TREE;
- 
-   if (TREE_CONSTANT (expr))
-     return fold_convert (type, expr);
- 
-   /* Deal with addition or subtraction of constants.  */
-   if (is_simple_additive_expression (expr, &add, &cst, &minus_p))
-     {
-       add = gnat_invariant_expr (add);
-       if (add)
- 	return
- 	  fold_build2 (minus_p ? MINUS_EXPR : PLUS_EXPR, type,
- 		       fold_convert (type, add), fold_convert (type, cst));
-       else
- 	return NULL_TREE;
-     }
- 
-   bool invariant_p = false;
-   tree t = expr;
- 
-   while (true)
-     {
-       switch (TREE_CODE (t))
- 	{
- 	case COMPONENT_REF:
- 	  invariant_p |= DECL_INVARIANT_P (TREE_OPERAND (t, 1));
- 	  break;
- 
- 	case ARRAY_REF:
- 	case ARRAY_RANGE_REF:
- 	  if (!TREE_CONSTANT (TREE_OPERAND (t, 1)) || TREE_OPERAND (t, 2))
- 	    return NULL_TREE;
- 	  break;
- 
- 	case BIT_FIELD_REF:
- 	case REALPART_EXPR:
- 	case IMAGPART_EXPR:
- 	case VIEW_CONVERT_EXPR:
- 	CASE_CONVERT:
- 	  break;
- 
- 	case INDIRECT_REF:
- 	  if ((!invariant_p && !TREE_READONLY (t)) || TREE_SIDE_EFFECTS (t))
- 	    return NULL_TREE;
- 	  invariant_p = false;
- 	  break;
- 
- 	default:
- 	  goto object;
- 	}
- 
-       t = TREE_OPERAND (t, 0);
-     }
- 
- object:
-   if (TREE_SIDE_EFFECTS (t))
-     return NULL_TREE;
- 
-   if (TREE_CODE (t) == CONST_DECL
-       && (DECL_EXTERNAL (t)
- 	  || decl_function_context (t) != current_function_decl))
-     return fold_convert (type, expr);
- 
-   if (!invariant_p && !TREE_READONLY (t))
-     return NULL_TREE;
- 
-   if (TREE_CODE (t) == PARM_DECL)
-     return fold_convert (type, expr);
- 
-   if (TREE_CODE (t) == VAR_DECL
-       && (DECL_EXTERNAL (t)
- 	  || decl_function_context (t) != current_function_decl))
-     return fold_convert (type, expr);
- 
-   return NULL_TREE;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/gcc-interface/utils2.cc gcc-12.1.0/gcc/ada/gcc-interface/utils2.cc
*** gcc-11.3.0/gcc/ada/gcc-interface/utils2.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gcc-interface/utils2.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,3050 ----
+ /****************************************************************************
+  *                                                                          *
+  *                         GNAT COMPILER COMPONENTS                         *
+  *                                                                          *
+  *                               U T I L S 2                                *
+  *                                                                          *
+  *                          C Implementation File                           *
+  *                                                                          *
+  *          Copyright (C) 1992-2022, Free Software Foundation, Inc.         *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
+  * for  more details.  You should have received a copy of the GNU General   *
+  * Public License along with GCC; see the file COPYING3.  If not see        *
+  * <http://www.gnu.org/licenses/>.                                          *
+  *                                                                          *
+  * GNAT was originally developed  by the GNAT team at  New York University. *
+  * Extensive contributions were provided by Ada Core Technologies Inc.      *
+  *                                                                          *
+  ****************************************************************************/
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "memmodel.h"
+ #include "tm.h"
+ #include "vec.h"
+ #include "alias.h"
+ #include "tree.h"
+ #include "inchash.h"
+ #include "builtins.h"
+ #include "fold-const.h"
+ #include "stor-layout.h"
+ #include "stringpool.h"
+ #include "varasm.h"
+ #include "flags.h"
+ #include "toplev.h"
+ #include "ggc.h"
+ #include "tree-inline.h"
+ 
+ #include "ada.h"
+ #include "types.h"
+ #include "atree.h"
+ #include "elists.h"
+ #include "namet.h"
+ #include "nlists.h"
+ #include "snames.h"
+ #include "stringt.h"
+ #include "uintp.h"
+ #include "fe.h"
+ #include "sinfo.h"
+ #include "einfo.h"
+ #include "ada-tree.h"
+ #include "gigi.h"
+ 
+ /* Return the base type of TYPE.  */
+ 
+ tree
+ get_base_type (tree type)
+ {
+   if (TREE_CODE (type) == RECORD_TYPE
+       && TYPE_JUSTIFIED_MODULAR_P (type))
+     type = TREE_TYPE (TYPE_FIELDS (type));
+ 
+   while (TREE_TYPE (type)
+ 	 && (TREE_CODE (type) == INTEGER_TYPE
+ 	     || TREE_CODE (type) == REAL_TYPE))
+     type = TREE_TYPE (type);
+ 
+   return type;
+ }
+ 
+ /* EXP is a GCC tree representing an address.  See if we can find how strictly
+    the object at this address is aligned and, if so, return the alignment of
+    the object in bits.  Otherwise return 0.  */
+ 
+ unsigned int
+ known_alignment (tree exp)
+ {
+   unsigned int this_alignment;
+   unsigned int lhs, rhs;
+ 
+   switch (TREE_CODE (exp))
+     {
+     CASE_CONVERT:
+     case VIEW_CONVERT_EXPR:
+     case NON_LVALUE_EXPR:
+       /* Conversions between pointers and integers don't change the alignment
+ 	 of the underlying object.  */
+       this_alignment = known_alignment (TREE_OPERAND (exp, 0));
+       break;
+ 
+     case COMPOUND_EXPR:
+       /* The value of a COMPOUND_EXPR is that of its second operand.  */
+       this_alignment = known_alignment (TREE_OPERAND (exp, 1));
+       break;
+ 
+     case PLUS_EXPR:
+     case MINUS_EXPR:
+       /* If two addresses are added, the alignment of the result is the
+ 	 minimum of the two alignments.  */
+       lhs = known_alignment (TREE_OPERAND (exp, 0));
+       rhs = known_alignment (TREE_OPERAND (exp, 1));
+       this_alignment = MIN (lhs, rhs);
+       break;
+ 
+     case POINTER_PLUS_EXPR:
+       /* If this is the pattern built for aligning types, decode it.  */
+       if (TREE_CODE (TREE_OPERAND (exp, 1)) == BIT_AND_EXPR
+ 	  && TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 1), 0)) == NEGATE_EXPR)
+ 	{
+ 	  tree op = TREE_OPERAND (TREE_OPERAND (exp, 1), 1);
+ 	  return
+ 	    known_alignment (fold_build1 (BIT_NOT_EXPR, TREE_TYPE (op), op));
+ 	}
+ 
+       /* If we don't know the alignment of the offset, we assume that
+ 	 of the base.  */
+       lhs = known_alignment (TREE_OPERAND (exp, 0));
+       rhs = known_alignment (TREE_OPERAND (exp, 1));
+ 
+       if (rhs == 0)
+ 	this_alignment = lhs;
+       else
+ 	this_alignment = MIN (lhs, rhs);
+       break;
+ 
+     case COND_EXPR:
+       /* If there is a choice between two values, use the smaller one.  */
+       lhs = known_alignment (TREE_OPERAND (exp, 1));
+       rhs = known_alignment (TREE_OPERAND (exp, 2));
+       this_alignment = MIN (lhs, rhs);
+       break;
+ 
+     case INTEGER_CST:
+       {
+ 	unsigned HOST_WIDE_INT c = TREE_INT_CST_LOW (exp);
+ 	/* The first part of this represents the lowest bit in the constant,
+ 	   but it is originally in bytes, not bits.  */
+ 	this_alignment = (c & -c) * BITS_PER_UNIT;
+       }
+       break;
+ 
+     case MULT_EXPR:
+       /* If we know the alignment of just one side, use it.  Otherwise,
+ 	 use the product of the alignments.  */
+       lhs = known_alignment (TREE_OPERAND (exp, 0));
+       rhs = known_alignment (TREE_OPERAND (exp, 1));
+ 
+       if (lhs == 0)
+ 	this_alignment = rhs;
+       else if (rhs == 0)
+ 	this_alignment = lhs;
+       else
+ 	this_alignment = MIN (lhs * rhs, BIGGEST_ALIGNMENT);
+       break;
+ 
+     case BIT_AND_EXPR:
+       /* A bit-and expression is as aligned as the maximum alignment of the
+ 	 operands.  We typically get here for a complex lhs and a constant
+ 	 negative power of two on the rhs to force an explicit alignment, so
+ 	 don't bother looking at the lhs.  */
+       this_alignment = known_alignment (TREE_OPERAND (exp, 1));
+       break;
+ 
+     case ADDR_EXPR:
+       if (DECL_P (TREE_OPERAND (exp, 0)))
+ 	this_alignment = DECL_ALIGN (TREE_OPERAND (exp, 0));
+       else
+ 	this_alignment = get_object_alignment (TREE_OPERAND (exp, 0));
+       break;
+ 
+     case CALL_EXPR:
+       {
+ 	tree fndecl = get_callee_fndecl (exp);
+ 	if (fndecl == malloc_decl || fndecl == realloc_decl)
+ 	  return get_target_system_allocator_alignment () * BITS_PER_UNIT;
+ 
+ 	tree t = maybe_inline_call_in_expr (exp);
+ 	if (t)
+ 	  return known_alignment (t);
+       }
+ 
+       /* ... fall through ... */
+ 
+     default:
+       /* For other pointer expressions, we assume that the pointed-to object
+ 	 is at least as aligned as the pointed-to type.  Beware that we can
+ 	 have a dummy type here (e.g. a Taft Amendment type), for which the
+ 	 alignment is meaningless and should be ignored.  */
+       if (POINTER_TYPE_P (TREE_TYPE (exp))
+ 	  && !TYPE_IS_DUMMY_P (TREE_TYPE (TREE_TYPE (exp)))
+ 	  && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (exp))))
+ 	this_alignment = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp)));
+       else
+ 	this_alignment = 0;
+       break;
+     }
+ 
+   return this_alignment;
+ }
+ 
+ /* We have a comparison or assignment operation on two types, T1 and T2, which
+    are either both array types or both record types.  T1 is assumed to be for
+    the left hand side operand, and T2 for the right hand side.  Return the
+    type that both operands should be converted to for the operation, if any.
+    Otherwise return zero.  */
+ 
+ static tree
+ find_common_type (tree t1, tree t2)
+ {
+   /* ??? As of today, various constructs lead to here with types of different
+      sizes even when both constants (e.g. tagged types, packable vs regular
+      component types, padded vs unpadded types, ...).  While some of these
+      would better be handled upstream (types should be made consistent before
+      calling into build_binary_op), some others are really expected and we
+      have to be careful.  */
+ 
+   const bool variable_record_on_lhs
+     = (TREE_CODE (t1) == RECORD_TYPE
+        && TREE_CODE (t2) == RECORD_TYPE
+        && get_variant_part (t1)
+        && !get_variant_part (t2));
+ 
+   const bool variable_array_on_lhs
+     = (TREE_CODE (t1) == ARRAY_TYPE
+        && TREE_CODE (t2) == ARRAY_TYPE
+        && !TREE_CONSTANT (TYPE_MIN_VALUE (TYPE_DOMAIN (t1)))
+        && TREE_CONSTANT (TYPE_MIN_VALUE (TYPE_DOMAIN (t2))));
+ 
+   /* We must avoid writing more than what the target can hold if this is for
+      an assignment and the case of tagged types is handled in build_binary_op
+      so we use the lhs type if it is known to be smaller or of constant size
+      and the rhs type is not, whatever the modes.  We also force t1 in case of
+      constant size equality to minimize occurrences of view conversions on the
+      lhs of an assignment, except for the case of types with a variable part
+      on the lhs but not on the rhs to make the conversion simpler.  */
+   if (TREE_CONSTANT (TYPE_SIZE (t1))
+       && (!TREE_CONSTANT (TYPE_SIZE (t2))
+ 	  || tree_int_cst_lt (TYPE_SIZE (t1), TYPE_SIZE (t2))
+ 	  || (TYPE_SIZE (t1) == TYPE_SIZE (t2)
+ 	      && !variable_record_on_lhs
+ 	      && !variable_array_on_lhs)))
+     return t1;
+ 
+   /* Otherwise, if the lhs type is non-BLKmode, use it, except for the case of
+      a non-BLKmode rhs and array types with a variable part on the lhs but not
+      on the rhs to make sure the conversion is preserved during gimplification.
+      Note that we know that we will not have any alignment problems since, if
+      we did, the non-BLKmode type could not have been used.  */
+   if (TYPE_MODE (t1) != BLKmode
+       && (TYPE_MODE (t2) == BLKmode || !variable_array_on_lhs))
+     return t1;
+ 
+   /* If the rhs type is of constant size, use it whatever the modes.  At
+      this point it is known to be smaller, or of constant size and the
+      lhs type is not.  */
+   if (TREE_CONSTANT (TYPE_SIZE (t2)))
+     return t2;
+ 
+   /* Otherwise, if the rhs type is non-BLKmode, use it.  */
+   if (TYPE_MODE (t2) != BLKmode)
+     return t2;
+ 
+   /* In this case, both types have variable size and BLKmode.  It's
+      probably best to leave the "type mismatch" because changing it
+      could cause a bad self-referential reference.  */
+   return NULL_TREE;
+ }
+ 
+ /* Return an expression tree representing an equality comparison of A1 and A2,
+    two objects of type ARRAY_TYPE.  The result should be of type RESULT_TYPE.
+ 
+    Two arrays are equal in one of two ways: (1) if both have zero length in
+    some dimension (not necessarily the same dimension) or (2) if the lengths
+    in each dimension are equal and the data is equal.  We perform the length
+    tests in as efficient a manner as possible.  */
+ 
+ static tree
+ compare_arrays (location_t loc, tree result_type, tree a1, tree a2)
+ {
+   tree result = convert (result_type, boolean_true_node);
+   tree a1_is_null = convert (result_type, boolean_false_node);
+   tree a2_is_null = convert (result_type, boolean_false_node);
+   tree t1 = TREE_TYPE (a1);
+   tree t2 = TREE_TYPE (a2);
+   bool a1_side_effects_p = TREE_SIDE_EFFECTS (a1);
+   bool a2_side_effects_p = TREE_SIDE_EFFECTS (a2);
+   bool length_zero_p = false;
+ 
+   /* If the operands have side-effects, they need to be evaluated only once
+      in spite of the multiple references in the comparison.  */
+   if (a1_side_effects_p)
+     a1 = gnat_protect_expr (a1);
+ 
+   if (a2_side_effects_p)
+     a2 = gnat_protect_expr (a2);
+ 
+   /* Process each dimension separately and compare the lengths.  If any
+      dimension has a length known to be zero, set LENGTH_ZERO_P to true
+      in order to suppress the comparison of the data at the end.  */
+   while (TREE_CODE (t1) == ARRAY_TYPE && TREE_CODE (t2) == ARRAY_TYPE)
+     {
+       tree dom1 = TYPE_DOMAIN (t1);
+       tree dom2 = TYPE_DOMAIN (t2);
+       tree length1 = size_binop (PLUS_EXPR,
+ 				 size_binop (MINUS_EXPR,
+ 					     TYPE_MAX_VALUE (dom1),
+ 					     TYPE_MIN_VALUE (dom1)),
+ 				 size_one_node);
+       tree length2 = size_binop (PLUS_EXPR,
+ 				 size_binop (MINUS_EXPR,
+ 					     TYPE_MAX_VALUE (dom2),
+ 					     TYPE_MIN_VALUE (dom2)),
+ 				 size_one_node);
+       tree ind1 = TYPE_INDEX_TYPE (dom1);
+       tree ind2 = TYPE_INDEX_TYPE (dom2);
+       tree base_type = maybe_character_type (get_base_type (ind1));
+       tree lb1 = convert (base_type, TYPE_MIN_VALUE (ind1));
+       tree ub1 = convert (base_type, TYPE_MAX_VALUE (ind1));
+       tree lb2 = convert (base_type, TYPE_MIN_VALUE (ind2));
+       tree ub2 = convert (base_type, TYPE_MAX_VALUE (ind2));
+       tree comparison, this_a1_is_null, this_a2_is_null;
+ 
+       /* If the length of the first array is a constant and that of the second
+ 	 array is not, swap our operands to have the constant second.  */
+       if (TREE_CODE (length1) == INTEGER_CST
+ 	  && TREE_CODE (length2) != INTEGER_CST)
+ 	{
+ 	  tree tem;
+ 	  bool btem;
+ 
+ 	  tem = a1, a1 = a2, a2 = tem;
+ 	  tem = t1, t1 = t2, t2 = tem;
+ 	  tem = lb1, lb1 = lb2, lb2 = tem;
+ 	  tem = ub1, ub1 = ub2, ub2 = tem;
+ 	  tem = length1, length1 = length2, length2 = tem;
+ 	  tem = a1_is_null, a1_is_null = a2_is_null, a2_is_null = tem;
+ 	  btem = a1_side_effects_p, a1_side_effects_p = a2_side_effects_p,
+ 	  a2_side_effects_p = btem;
+ 	}
+ 
+       /* If the length of the second array is the constant zero, we can just
+ 	 use the original stored bounds for the first array and see whether
+ 	 last < first holds.  */
+       if (integer_zerop (length2))
+ 	{
+ 	  length_zero_p = true;
+ 
+ 	  lb1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (lb1, a1);
+ 	  ub1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (ub1, a1);
+ 
+ 	  comparison = fold_build2_loc (loc, LT_EXPR, result_type, ub1, lb1);
+ 	  if (EXPR_P (comparison))
+ 	    SET_EXPR_LOCATION (comparison, loc);
+ 
+ 	  this_a1_is_null = comparison;
+ 	  this_a2_is_null = convert (result_type, boolean_true_node);
+ 	}
+ 
+       /* Otherwise, if the length is some other constant value, we know that
+ 	 this dimension in the second array cannot be superflat, so we can
+ 	 just use its length computed from the actual stored bounds.  */
+       else if (TREE_CODE (length2) == INTEGER_CST)
+ 	{
+ 	  /* Note that we know that LB2 and UB2 are constant and hence
+ 	     cannot contain a PLACEHOLDER_EXPR.  */
+ 	  lb1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (lb1, a1);
+ 	  ub1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (ub1, a1);
+ 
+ 	  comparison
+ 	    = fold_build2_loc (loc, EQ_EXPR, result_type,
+ 			       build_binary_op (MINUS_EXPR, base_type,
+ 						ub1, lb1),
+ 			       build_binary_op (MINUS_EXPR, base_type,
+ 						ub2, lb2));
+ 	  if (EXPR_P (comparison))
+ 	    SET_EXPR_LOCATION (comparison, loc);
+ 
+ 	  this_a1_is_null
+ 	    = fold_build2_loc (loc, LT_EXPR, result_type, ub1, lb1);
+ 
+ 	  this_a2_is_null = convert (result_type, boolean_false_node);
+ 	}
+ 
+       /* Otherwise, compare the computed lengths.  */
+       else
+ 	{
+ 	  length1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (length1, a1);
+ 	  length2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (length2, a2);
+ 
+ 	  comparison
+ 	    = fold_build2_loc (loc, EQ_EXPR, result_type, length1, length2);
+ 	  if (EXPR_P (comparison))
+ 	    SET_EXPR_LOCATION (comparison, loc);
+ 
+ 	  lb1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (lb1, a1);
+ 	  ub1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (ub1, a1);
+ 
+ 	  this_a1_is_null
+ 	    = fold_build2_loc (loc, LT_EXPR, result_type, ub1, lb1);
+ 
+ 	  lb2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (lb2, a2);
+ 	  ub2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (ub2, a2);
+ 
+ 	  this_a2_is_null
+ 	    = fold_build2_loc (loc, LT_EXPR, result_type, ub2, lb2);
+ 	}
+ 
+       /* Append expressions for this dimension to the final expressions.  */
+       result = build_binary_op (TRUTH_ANDIF_EXPR, result_type,
+ 				result, comparison);
+ 
+       a1_is_null = build_binary_op (TRUTH_ORIF_EXPR, result_type,
+ 				    this_a1_is_null, a1_is_null);
+ 
+       a2_is_null = build_binary_op (TRUTH_ORIF_EXPR, result_type,
+ 				    this_a2_is_null, a2_is_null);
+ 
+       t1 = TREE_TYPE (t1);
+       t2 = TREE_TYPE (t2);
+     }
+ 
+   /* Unless the length of some dimension is known to be zero, compare the
+      data in the array.  */
+   if (!length_zero_p)
+     {
+       tree type = find_common_type (TREE_TYPE (a1), TREE_TYPE (a2));
+       tree comparison;
+ 
+       if (type)
+ 	{
+ 	  a1 = convert (type, a1),
+ 	  a2 = convert (type, a2);
+ 	}
+ 
+       comparison = fold_build2_loc (loc, EQ_EXPR, result_type, a1, a2);
+ 
+       result
+ 	= build_binary_op (TRUTH_ANDIF_EXPR, result_type, result, comparison);
+     }
+ 
+   /* The result is also true if both sizes are zero.  */
+   result = build_binary_op (TRUTH_ORIF_EXPR, result_type,
+ 			    build_binary_op (TRUTH_ANDIF_EXPR, result_type,
+ 					     a1_is_null, a2_is_null),
+ 			    result);
+ 
+   /* If the operands have side-effects, they need to be evaluated before
+      doing the tests above since the place they otherwise would end up
+      being evaluated at run time could be wrong.  */
+   if (a1_side_effects_p)
+     result = build2 (COMPOUND_EXPR, result_type, a1, result);
+ 
+   if (a2_side_effects_p)
+     result = build2 (COMPOUND_EXPR, result_type, a2, result);
+ 
+   return result;
+ }
+ 
+ /* Return an expression tree representing an equality comparison of P1 and P2,
+    two objects of fat pointer type.  The result should be of type RESULT_TYPE.
+ 
+    Two fat pointers are equal in one of two ways: (1) if both have a null
+    pointer to the array or (2) if they contain the same couple of pointers.
+    We perform the comparison in as efficient a manner as possible.  */
+ 
+ static tree
+ compare_fat_pointers (location_t loc, tree result_type, tree p1, tree p2)
+ {
+   tree p1_array, p2_array, p1_bounds, p2_bounds, same_array, same_bounds;
+   tree p1_array_is_null, p2_array_is_null;
+ 
+   /* If either operand has side-effects, they have to be evaluated only once
+      in spite of the multiple references to the operand in the comparison.  */
+   p1 = gnat_protect_expr (p1);
+   p2 = gnat_protect_expr (p2);
+ 
+   /* The constant folder doesn't fold fat pointer types so we do it here.  */
+   if (TREE_CODE (p1) == CONSTRUCTOR)
+     p1_array = CONSTRUCTOR_ELT (p1, 0)->value;
+   else
+     p1_array = build_component_ref (p1, TYPE_FIELDS (TREE_TYPE (p1)), true);
+ 
+   p1_array_is_null
+     = fold_build2_loc (loc, EQ_EXPR, result_type, p1_array,
+ 		       fold_convert_loc (loc, TREE_TYPE (p1_array),
+ 					 null_pointer_node));
+ 
+   if (TREE_CODE (p2) == CONSTRUCTOR)
+     p2_array = CONSTRUCTOR_ELT (p2, 0)->value;
+   else
+     p2_array = build_component_ref (p2, TYPE_FIELDS (TREE_TYPE (p2)), true);
+ 
+   p2_array_is_null
+     = fold_build2_loc (loc, EQ_EXPR, result_type, p2_array,
+ 		       fold_convert_loc (loc, TREE_TYPE (p2_array),
+ 					 null_pointer_node));
+ 
+   /* If one of the pointers to the array is null, just compare the other.  */
+   if (integer_zerop (p1_array))
+     return p2_array_is_null;
+   else if (integer_zerop (p2_array))
+     return p1_array_is_null;
+ 
+   /* Otherwise, do the fully-fledged comparison.  */
+   same_array
+     = fold_build2_loc (loc, EQ_EXPR, result_type, p1_array, p2_array);
+ 
+   if (TREE_CODE (p1) == CONSTRUCTOR)
+     p1_bounds = CONSTRUCTOR_ELT (p1, 1)->value;
+   else
+     p1_bounds
+       = build_component_ref (p1, DECL_CHAIN (TYPE_FIELDS (TREE_TYPE (p1))),
+ 			     true);
+ 
+   if (TREE_CODE (p2) == CONSTRUCTOR)
+     p2_bounds = CONSTRUCTOR_ELT (p2, 1)->value;
+   else
+     p2_bounds
+       = build_component_ref (p2, DECL_CHAIN (TYPE_FIELDS (TREE_TYPE (p2))),
+ 			     true);
+ 
+   same_bounds
+     = fold_build2_loc (loc, EQ_EXPR, result_type, p1_bounds, p2_bounds);
+ 
+   /* P1_ARRAY == P2_ARRAY && (P1_ARRAY == NULL || P1_BOUNDS == P2_BOUNDS).  */
+   return build_binary_op (TRUTH_ANDIF_EXPR, result_type, same_array,
+ 			  build_binary_op (TRUTH_ORIF_EXPR, result_type,
+ 					   p1_array_is_null, same_bounds));
+ }
+ 
+ /* Compute the result of applying OP_CODE to LHS and RHS, where both are of
+    type TYPE.  We know that TYPE is a modular type with a nonbinary
+    modulus.  */
+ 
+ static tree
+ nonbinary_modular_operation (enum tree_code op_code, tree type, tree lhs,
+                              tree rhs)
+ {
+   tree modulus = TYPE_MODULUS (type);
+   unsigned int needed_precision = tree_floor_log2 (modulus) + 1;
+   unsigned int precision;
+   bool unsignedp = true;
+   tree op_type = type;
+   tree result;
+ 
+   /* If this is an addition of a constant, convert it to a subtraction
+      of a constant since we can do that faster.  */
+   if (op_code == PLUS_EXPR && TREE_CODE (rhs) == INTEGER_CST)
+     {
+       rhs = fold_build2 (MINUS_EXPR, type, modulus, rhs);
+       op_code = MINUS_EXPR;
+     }
+ 
+   /* For the logical operations, we only need PRECISION bits.  For
+      addition and subtraction, we need one more and for multiplication we
+      need twice as many.  But we never want to make a size smaller than
+      our size. */
+   if (op_code == PLUS_EXPR || op_code == MINUS_EXPR)
+     needed_precision += 1;
+   else if (op_code == MULT_EXPR)
+     needed_precision *= 2;
+ 
+   precision = MAX (needed_precision, TYPE_PRECISION (op_type));
+ 
+   /* Unsigned will do for everything but subtraction.  */
+   if (op_code == MINUS_EXPR)
+     unsignedp = false;
+ 
+   /* If our type is the wrong signedness or isn't wide enough, make a new
+      type and convert both our operands to it.  */
+   if (TYPE_PRECISION (op_type) < precision
+       || TYPE_UNSIGNED (op_type) != unsignedp)
+     {
+       /* Copy the type so we ensure it can be modified to make it modular.  */
+       op_type = copy_type (gnat_type_for_size (precision, unsignedp));
+       modulus = convert (op_type, modulus);
+       SET_TYPE_MODULUS (op_type, modulus);
+       TYPE_MODULAR_P (op_type) = 1;
+       lhs = convert (op_type, lhs);
+       rhs = convert (op_type, rhs);
+     }
+ 
+   /* Do the operation, then we'll fix it up.  */
+   result = fold_build2 (op_code, op_type, lhs, rhs);
+ 
+   /* For multiplication, we have no choice but to do a full modulus
+      operation.  However, we want to do this in the narrowest
+      possible size.  */
+   if (op_code == MULT_EXPR)
+     {
+       /* Copy the type so we ensure it can be modified to make it modular.  */
+       tree div_type = copy_type (gnat_type_for_size (needed_precision, 1));
+       modulus = convert (div_type, modulus);
+       SET_TYPE_MODULUS (div_type, modulus);
+       TYPE_MODULAR_P (div_type) = 1;
+       result = convert (op_type,
+ 			fold_build2 (TRUNC_MOD_EXPR, div_type,
+ 				     convert (div_type, result), modulus));
+     }
+ 
+   /* For subtraction, add the modulus back if we are negative.  */
+   else if (op_code == MINUS_EXPR)
+     {
+       result = gnat_protect_expr (result);
+       result = fold_build3 (COND_EXPR, op_type,
+ 			    fold_build2 (LT_EXPR, boolean_type_node, result,
+ 					 build_int_cst (op_type, 0)),
+ 			    fold_build2 (PLUS_EXPR, op_type, result, modulus),
+ 			    result);
+     }
+ 
+   /* For the other operations, subtract the modulus if we are >= it.  */
+   else
+     {
+       result = gnat_protect_expr (result);
+       result = fold_build3 (COND_EXPR, op_type,
+ 			    fold_build2 (GE_EXPR, boolean_type_node,
+ 					 result, modulus),
+ 			    fold_build2 (MINUS_EXPR, op_type,
+ 					 result, modulus),
+ 			    result);
+     }
+ 
+   return convert (type, result);
+ }
+ 
+ /* This page contains routines that implement the Ada semantics with regard
+    to atomic objects.  They are fully piggybacked on the middle-end support
+    for atomic loads and stores.
+ 
+    *** Memory barriers and volatile objects ***
+ 
+    We implement the weakened form of the C.6(16) clause that was introduced
+    in Ada 2012 (AI05-117).  Earlier forms of this clause wouldn't have been
+    implementable without significant performance hits on modern platforms.
+ 
+    We also take advantage of the requirements imposed on shared variables by
+    9.10 (conditions for sequential actions) to have non-erroneous execution
+    and consider that C.6(16) and C.6(17) only prescribe an uniform order of
+    volatile updates with regard to sequential actions, i.e. with regard to
+    reads or updates of atomic objects.
+ 
+    As such, an update of an atomic object by a task requires that all earlier
+    accesses to volatile objects have completed.  Similarly, later accesses to
+    volatile objects cannot be reordered before the update of the atomic object.
+    So, memory barriers both before and after the atomic update are needed.
+ 
+    For a read of an atomic object, to avoid seeing writes of volatile objects
+    by a task earlier than by the other tasks, a memory barrier is needed before
+    the atomic read.  Finally, to avoid reordering later reads or updates of
+    volatile objects to before the atomic read, a barrier is needed after the
+    atomic read.
+ 
+    So, memory barriers are needed before and after atomic reads and updates.
+    And, in order to simplify the implementation, we use full memory barriers
+    in all cases, i.e. we enforce sequential consistency for atomic accesses.  */
+ 
+ /* Return the size of TYPE, which must be a positive power of 2.  */
+ 
+ unsigned int
+ resolve_atomic_size (tree type)
+ {
+   unsigned HOST_WIDE_INT size = tree_to_uhwi (TYPE_SIZE_UNIT (type));
+ 
+   if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
+     return size;
+ 
+   /* We shouldn't reach here without having already detected that the size
+      isn't compatible with an atomic access.  */
+   gcc_assert (Serious_Errors_Detected);
+ 
+   return 0;
+ }
+ 
+ /* Build an atomic load for the underlying atomic object in SRC.  SYNC is
+    true if the load requires synchronization.  */
+ 
+ tree
+ build_atomic_load (tree src, bool sync)
+ {
+   tree ptr_type
+     = build_pointer_type
+       (build_qualified_type (void_type_node,
+ 			     TYPE_QUAL_ATOMIC | TYPE_QUAL_VOLATILE));
+   tree mem_model
+     = build_int_cst (integer_type_node,
+ 		     sync ? MEMMODEL_SEQ_CST : MEMMODEL_RELAXED);
+   tree orig_src = src;
+   tree t, addr, val;
+   unsigned int size;
+   int fncode;
+ 
+   /* Remove conversions to get the address of the underlying object.  */
+   src = remove_conversions (src, false);
+   size = resolve_atomic_size (TREE_TYPE (src));
+   if (size == 0)
+     return orig_src;
+ 
+   fncode = (int) BUILT_IN_ATOMIC_LOAD_N + exact_log2 (size) + 1;
+   t = builtin_decl_implicit ((enum built_in_function) fncode);
+ 
+   addr = build_unary_op (ADDR_EXPR, ptr_type, src);
+   val = build_call_expr (t, 2, addr, mem_model);
+ 
+   /* First reinterpret the loaded bits in the original type of the load,
+      then convert to the expected result type.  */
+   t = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (src), val);
+   return convert (TREE_TYPE (orig_src), t);
+ }
+ 
+ /* Build an atomic store from SRC to the underlying atomic object in DEST.
+    SYNC is true if the store requires synchronization.  */
+ 
+ tree
+ build_atomic_store (tree dest, tree src, bool sync)
+ {
+   tree ptr_type
+     = build_pointer_type
+       (build_qualified_type (void_type_node,
+ 			     TYPE_QUAL_ATOMIC | TYPE_QUAL_VOLATILE));
+   tree mem_model
+     = build_int_cst (integer_type_node,
+ 		     sync ? MEMMODEL_SEQ_CST : MEMMODEL_RELAXED);
+   tree orig_dest = dest;
+   tree t, int_type, addr;
+   unsigned int size;
+   int fncode;
+ 
+   /* Remove conversions to get the address of the underlying object.  */
+   dest = remove_conversions (dest, false);
+   size = resolve_atomic_size (TREE_TYPE (dest));
+   if (size == 0)
+     return build_binary_op (MODIFY_EXPR, NULL_TREE, orig_dest, src);
+ 
+   fncode = (int) BUILT_IN_ATOMIC_STORE_N + exact_log2 (size) + 1;
+   t = builtin_decl_implicit ((enum built_in_function) fncode);
+   int_type = gnat_type_for_size (BITS_PER_UNIT * size, 1);
+ 
+   /* First convert the bits to be stored to the original type of the store,
+      then reinterpret them in the effective type.  But if the original type
+      is a padded type with the same size, convert to the inner type instead,
+      as we don't want to artificially introduce a CONSTRUCTOR here.  */
+   if (TYPE_IS_PADDING_P (TREE_TYPE (dest))
+       && TYPE_SIZE (TREE_TYPE (dest))
+ 	 == TYPE_SIZE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (dest)))))
+     src = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (dest))), src);
+   else
+     src = convert (TREE_TYPE (dest), src);
+   src = fold_build1 (VIEW_CONVERT_EXPR, int_type, src);
+   addr = build_unary_op (ADDR_EXPR, ptr_type, dest);
+ 
+   return build_call_expr (t, 3, addr, src, mem_model);
+ }
+ 
+ /* Build a load-modify-store sequence from SRC to DEST.  GNAT_NODE is used for
+    the location of the sequence.  Note that, even though the load and the store
+    are both atomic, the sequence itself is not atomic.  */
+ 
+ tree
+ build_load_modify_store (tree dest, tree src, Node_Id gnat_node)
+ {
+   /* We will be modifying DEST below so we build a copy.  */
+   dest = copy_node (dest);
+   tree ref = dest;
+ 
+   while (handled_component_p (ref))
+     {
+       /* The load should already have been generated during the translation
+ 	 of the GNAT destination tree; find it out in the GNU tree.  */
+       if (TREE_CODE (TREE_OPERAND (ref, 0)) == VIEW_CONVERT_EXPR)
+ 	{
+ 	  tree op = TREE_OPERAND (TREE_OPERAND (ref, 0), 0);
+ 	  if (TREE_CODE (op) == CALL_EXPR && call_is_atomic_load (op))
+ 	    {
+ 	      tree type = TREE_TYPE (TREE_OPERAND (ref, 0));
+ 	      tree t = CALL_EXPR_ARG (op, 0);
+ 	      tree obj, temp, stmt;
+ 
+ 	      /* Find out the loaded object.  */
+ 	      if (TREE_CODE (t) == NOP_EXPR)
+ 		t = TREE_OPERAND (t, 0);
+ 	      if (TREE_CODE (t) == ADDR_EXPR)
+ 		obj = TREE_OPERAND (t, 0);
+ 	      else
+ 		obj = build1 (INDIRECT_REF, type, t);
+ 
+ 	      /* Drop atomic and volatile qualifiers for the temporary.  */
+ 	      type = TYPE_MAIN_VARIANT (type);
+ 
+ 	      /* And drop BLKmode, if need be, to put it into a register.  */
+ 	      if (TYPE_MODE (type) == BLKmode)
+ 		{
+ 		  unsigned int size = tree_to_uhwi (TYPE_SIZE (type));
+ 		  type = copy_type (type);
+ 		  machine_mode mode = int_mode_for_size (size, 0).else_blk ();
+ 		  SET_TYPE_MODE (type, mode);
+ 		}
+ 
+ 	      /* Create the temporary by inserting a SAVE_EXPR.  */
+ 	      temp = build1 (SAVE_EXPR, type,
+ 			     build1 (VIEW_CONVERT_EXPR, type, op));
+ 	      TREE_OPERAND (ref, 0) = temp;
+ 
+ 	      start_stmt_group ();
+ 
+ 	      /* Build the modify of the temporary.  */
+ 	      stmt = build_binary_op (MODIFY_EXPR, NULL_TREE, dest, src);
+ 	      add_stmt_with_node (stmt, gnat_node);
+ 
+ 	      /* Build the store to the object.  */
+ 	      stmt = build_atomic_store (obj, temp, false);
+ 	      add_stmt_with_node (stmt, gnat_node);
+ 
+ 	      return end_stmt_group ();
+ 	    }
+ 	}
+ 
+       TREE_OPERAND (ref, 0) = copy_node (TREE_OPERAND (ref, 0));
+       ref = TREE_OPERAND (ref, 0);
+     }
+ 
+   /* Something went wrong earlier if we have not found the atomic load.  */
+   gcc_unreachable ();
+ }
+ 
+ /* Make a binary operation of kind OP_CODE.  RESULT_TYPE is the type
+    desired for the result.  Usually the operation is to be performed
+    in that type.  For INIT_EXPR and MODIFY_EXPR, RESULT_TYPE must be
+    NULL_TREE.  For ARRAY_REF, RESULT_TYPE may be NULL_TREE, in which
+    case the type to be used will be derived from the operands.
+    Don't fold the result if NO_FOLD is true.
+ 
+    This function is very much unlike the ones for C and C++ since we
+    have already done any type conversion and matching required.  All we
+    have to do here is validate the work done by SEM and handle subtypes.  */
+ 
+ tree
+ build_binary_op (enum tree_code op_code, tree result_type,
+ 		 tree left_operand, tree right_operand,
+ 		 bool no_fold)
+ {
+   tree left_type = TREE_TYPE (left_operand);
+   tree right_type = TREE_TYPE (right_operand);
+   tree left_base_type = get_base_type (left_type);
+   tree right_base_type = get_base_type (right_type);
+   tree operation_type = result_type;
+   tree best_type = NULL_TREE;
+   tree modulus, result;
+   bool has_side_effects = false;
+ 
+   if (operation_type
+       && TREE_CODE (operation_type) == RECORD_TYPE
+       && TYPE_JUSTIFIED_MODULAR_P (operation_type))
+     operation_type = TREE_TYPE (TYPE_FIELDS (operation_type));
+ 
+   if (operation_type && TYPE_IS_EXTRA_SUBTYPE_P (operation_type))
+     operation_type = get_base_type (operation_type);
+ 
+   modulus = (operation_type
+ 	     && TREE_CODE (operation_type) == INTEGER_TYPE
+ 	     && TYPE_MODULAR_P (operation_type)
+ 	     ? TYPE_MODULUS (operation_type) : NULL_TREE);
+ 
+   switch (op_code)
+     {
+     case INIT_EXPR:
+     case MODIFY_EXPR:
+       gcc_checking_assert (!result_type);
+ 
+       /* If there were integral or pointer conversions on the LHS, remove
+ 	 them; we'll be putting them back below if needed.  Likewise for
+ 	 conversions between record types, except for justified modular types.
+ 	 But don't do this if the right operand is not BLKmode (for packed
+ 	 arrays) unless we are not changing the mode.  */
+       while ((CONVERT_EXPR_P (left_operand)
+ 	      || TREE_CODE (left_operand) == VIEW_CONVERT_EXPR)
+ 	     && (((INTEGRAL_TYPE_P (left_type)
+ 		   || POINTER_TYPE_P (left_type))
+ 		  && (INTEGRAL_TYPE_P (operand_type (left_operand))
+ 		      || POINTER_TYPE_P (operand_type (left_operand))))
+ 		 || (TREE_CODE (left_type) == RECORD_TYPE
+ 		     && !TYPE_JUSTIFIED_MODULAR_P (left_type)
+ 		     && TREE_CODE (operand_type (left_operand)) == RECORD_TYPE
+ 		     && (TYPE_MODE (right_type) == BLKmode
+ 			 || TYPE_MODE (left_type)
+ 			    == TYPE_MODE (operand_type (left_operand))))))
+ 	{
+ 	  left_operand = TREE_OPERAND (left_operand, 0);
+ 	  left_type = TREE_TYPE (left_operand);
+ 	}
+ 
+       /* If a class-wide type may be involved, force use of the RHS type.  */
+       if ((TREE_CODE (right_type) == RECORD_TYPE
+ 	   || TREE_CODE (right_type) == UNION_TYPE)
+ 	  && TYPE_ALIGN_OK (right_type))
+ 	operation_type = right_type;
+ 
+       /* If we are copying between padded objects with compatible types, use
+ 	 the padded view of the objects, this is very likely more efficient.
+ 	 Likewise for a padded object that is assigned a constructor, if we
+ 	 can convert the constructor to the inner type, to avoid putting a
+ 	 VIEW_CONVERT_EXPR on the LHS.  But don't do so if we wouldn't have
+ 	 actually copied anything.  */
+       else if (TYPE_IS_PADDING_P (left_type)
+ 	       && TREE_CONSTANT (TYPE_SIZE (left_type))
+ 	       && ((TREE_CODE (right_operand) == COMPONENT_REF
+ 		    && TYPE_MAIN_VARIANT (left_type)
+ 		       == TYPE_MAIN_VARIANT (operand_type (right_operand)))
+ 		   || (TREE_CODE (right_operand) == CONSTRUCTOR
+ 		       && !CONTAINS_PLACEHOLDER_P
+ 			   (DECL_SIZE (TYPE_FIELDS (left_type)))))
+ 	       && !integer_zerop (TYPE_SIZE (right_type)))
+ 	{
+ 	  /* We make an exception for a BLKmode type padding a non-BLKmode
+ 	     inner type and do the conversion of the LHS right away, since
+ 	     unchecked_convert wouldn't do it properly.  */
+ 	  if (TYPE_MODE (left_type) == BLKmode
+ 	      && TYPE_MODE (right_type) != BLKmode
+ 	      && TREE_CODE (right_operand) != CONSTRUCTOR)
+ 	    {
+ 	      operation_type = right_type;
+ 	      left_operand = convert (operation_type, left_operand);
+ 	      left_type = operation_type;
+ 	    }
+ 	  else
+ 	    operation_type = left_type;
+ 	}
+ 
+       /* If we have a call to a function that returns with variable size, use
+ 	 the RHS type in case we want to use the return slot optimization.  */
+       else if (TREE_CODE (right_operand) == CALL_EXPR
+ 	       && return_type_with_variable_size_p (right_type))
+ 	operation_type = right_type;
+ 
+       /* Find the best type to use for copying between aggregate types.  */
+       else if (((TREE_CODE (left_type) == ARRAY_TYPE
+ 		 && TREE_CODE (right_type) == ARRAY_TYPE)
+ 		|| (TREE_CODE (left_type) == RECORD_TYPE
+ 		    && TREE_CODE (right_type) == RECORD_TYPE))
+ 	       && (best_type = find_common_type (left_type, right_type)))
+ 	operation_type = best_type;
+ 
+       /* Otherwise use the LHS type.  */
+       else
+ 	operation_type = left_type;
+ 
+       /* Ensure everything on the LHS is valid.  If we have a field reference,
+ 	 strip anything that get_inner_reference can handle.  Then remove any
+ 	 conversions between types having the same code and mode.  And mark
+ 	 VIEW_CONVERT_EXPRs with TREE_ADDRESSABLE.  When done, we must have
+ 	 either an INDIRECT_REF, a NULL_EXPR, a SAVE_EXPR or a DECL node.  */
+       result = left_operand;
+       while (true)
+ 	{
+ 	  tree restype = TREE_TYPE (result);
+ 
+ 	  if (TREE_CODE (result) == COMPONENT_REF
+ 	      || TREE_CODE (result) == ARRAY_REF
+ 	      || TREE_CODE (result) == ARRAY_RANGE_REF)
+ 	    while (handled_component_p (result))
+ 	      result = TREE_OPERAND (result, 0);
+ 
+ 	  else if (TREE_CODE (result) == REALPART_EXPR
+ 		   || TREE_CODE (result) == IMAGPART_EXPR
+ 		   || (CONVERT_EXPR_P (result)
+ 		       && (((TREE_CODE (restype)
+ 			     == TREE_CODE (operand_type (result))
+ 			     && TYPE_MODE (restype)
+ 				== TYPE_MODE (operand_type (result))))
+ 			   || TYPE_ALIGN_OK (restype))))
+ 	    result = TREE_OPERAND (result, 0);
+ 
+ 	  else if (TREE_CODE (result) == VIEW_CONVERT_EXPR)
+ 	    {
+ 	      TREE_ADDRESSABLE (result) = 1;
+ 	      result = TREE_OPERAND (result, 0);
+ 	    }
+ 
+ 	  else
+ 	    break;
+ 	}
+ 
+       gcc_assert (TREE_CODE (result) == INDIRECT_REF
+ 		  || TREE_CODE (result) == NULL_EXPR
+ 		  || TREE_CODE (result) == SAVE_EXPR
+ 		  || DECL_P (result));
+ 
+       /* Convert the right operand to the operation type unless it is
+ 	 either already of the correct type or if the type involves a
+ 	 placeholder, since the RHS may not have the same record type.  */
+       if (operation_type != right_type
+ 	  && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (operation_type)))
+ 	{
+ 	  right_operand = convert (operation_type, right_operand);
+ 	  right_type = operation_type;
+ 	}
+ 
+       /* If the left operand is not of the same type as the operation
+ 	 type, wrap it up in a VIEW_CONVERT_EXPR.  */
+       if (left_type != operation_type)
+ 	left_operand = unchecked_convert (operation_type, left_operand, false);
+ 
+       has_side_effects = true;
+       modulus = NULL_TREE;
+       break;
+ 
+     case ARRAY_REF:
+       if (!operation_type)
+ 	operation_type = TREE_TYPE (left_type);
+ 
+       /* ... fall through ... */
+ 
+     case ARRAY_RANGE_REF:
+       /* First look through conversion between type variants.  Note that
+ 	 this changes neither the operation type nor the type domain.  */
+       if (TREE_CODE (left_operand) == VIEW_CONVERT_EXPR
+ 	  && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (left_operand, 0)))
+ 	     == TYPE_MAIN_VARIANT (left_type))
+ 	{
+ 	  left_operand = TREE_OPERAND (left_operand, 0);
+ 	  left_type = TREE_TYPE (left_operand);
+ 	}
+ 
+       /* For a range, make sure the element type is consistent.  */
+       if (op_code == ARRAY_RANGE_REF
+ 	  && TREE_TYPE (operation_type) != TREE_TYPE (left_type))
+ 	{
+ 	  operation_type
+ 	    = build_nonshared_array_type (TREE_TYPE (left_type),
+ 					  TYPE_DOMAIN (operation_type));
+ 	  /* Declare it now since it will never be declared otherwise.  This
+ 	     is necessary to ensure that its subtrees are properly marked.  */
+ 	  create_type_decl (TYPE_NAME (operation_type), operation_type, true,
+ 			    false, Empty);
+ 	}
+ 
+       /* Then convert the right operand to its base type.  This will prevent
+ 	 unneeded sign conversions when sizetype is wider than integer.  */
+       right_operand = convert (right_base_type, right_operand);
+       right_operand = convert_to_index_type (right_operand);
+       modulus = NULL_TREE;
+       break;
+ 
+     case TRUTH_ANDIF_EXPR:
+     case TRUTH_ORIF_EXPR:
+     case TRUTH_AND_EXPR:
+     case TRUTH_OR_EXPR:
+     case TRUTH_XOR_EXPR:
+       gcc_checking_assert
+ 	(TREE_CODE (get_base_type (result_type)) == BOOLEAN_TYPE);
+       operation_type = left_base_type;
+       left_operand = convert (operation_type, left_operand);
+       right_operand = convert (operation_type, right_operand);
+       break;
+ 
+     case GE_EXPR:
+     case LE_EXPR:
+     case GT_EXPR:
+     case LT_EXPR:
+     case EQ_EXPR:
+     case NE_EXPR:
+       gcc_checking_assert
+ 	(TREE_CODE (get_base_type (result_type)) == BOOLEAN_TYPE);
+       /* If either operand is a NULL_EXPR, just return a new one.  */
+       if (TREE_CODE (left_operand) == NULL_EXPR)
+ 	return build2 (op_code, result_type,
+ 		       build1 (NULL_EXPR, integer_type_node,
+ 			       TREE_OPERAND (left_operand, 0)),
+ 		       integer_zero_node);
+ 
+       else if (TREE_CODE (right_operand) == NULL_EXPR)
+ 	return build2 (op_code, result_type,
+ 		       build1 (NULL_EXPR, integer_type_node,
+ 			       TREE_OPERAND (right_operand, 0)),
+ 		       integer_zero_node);
+ 
+       /* If either object is a justified modular types, get the
+ 	 fields from within.  */
+       if (TREE_CODE (left_type) == RECORD_TYPE
+ 	  && TYPE_JUSTIFIED_MODULAR_P (left_type))
+ 	{
+ 	  left_operand = convert (TREE_TYPE (TYPE_FIELDS (left_type)),
+ 				  left_operand);
+ 	  left_type = TREE_TYPE (left_operand);
+ 	  left_base_type = get_base_type (left_type);
+ 	}
+ 
+       if (TREE_CODE (right_type) == RECORD_TYPE
+ 	  && TYPE_JUSTIFIED_MODULAR_P (right_type))
+ 	{
+ 	  right_operand = convert (TREE_TYPE (TYPE_FIELDS (right_type)),
+ 				  right_operand);
+ 	  right_type = TREE_TYPE (right_operand);
+ 	  right_base_type = get_base_type (right_type);
+ 	}
+ 
+       /* If both objects are arrays, compare them specially.  */
+       if ((TREE_CODE (left_type) == ARRAY_TYPE
+ 	   || (TREE_CODE (left_type) == INTEGER_TYPE
+ 	       && TYPE_HAS_ACTUAL_BOUNDS_P (left_type)))
+ 	  && (TREE_CODE (right_type) == ARRAY_TYPE
+ 	      || (TREE_CODE (right_type) == INTEGER_TYPE
+ 		  && TYPE_HAS_ACTUAL_BOUNDS_P (right_type))))
+ 	{
+ 	  result = compare_arrays (input_location,
+ 				   result_type, left_operand, right_operand);
+ 	  if (op_code == NE_EXPR)
+ 	    result = invert_truthvalue_loc (EXPR_LOCATION (result), result);
+ 	  else
+ 	    gcc_assert (op_code == EQ_EXPR);
+ 
+ 	  return result;
+ 	}
+ 
+       /* Otherwise, the base types must be the same, unless they are both (fat)
+ 	 pointer types or record types.  In the latter case, use the best type
+ 	 and convert both operands to that type.  */
+       if (left_base_type != right_base_type)
+ 	{
+ 	  if (TYPE_IS_FAT_POINTER_P (left_base_type)
+ 	      && TYPE_IS_FAT_POINTER_P (right_base_type))
+ 	    {
+ 	      gcc_assert (TYPE_MAIN_VARIANT (left_base_type)
+ 			  == TYPE_MAIN_VARIANT (right_base_type));
+ 	      best_type = left_base_type;
+ 	    }
+ 
+ 	  else if (POINTER_TYPE_P (left_base_type)
+ 		   && POINTER_TYPE_P (right_base_type))
+ 	    {
+ 	      /* Anonymous access types in Ada 2005 can point to different
+ 		 members of a tagged type hierarchy.  */
+ 	      gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (left_base_type))
+ 			  == TYPE_MAIN_VARIANT (TREE_TYPE (right_base_type))
+ 			  || (TYPE_ALIGN_OK (TREE_TYPE (left_base_type))
+ 			      && TYPE_ALIGN_OK (TREE_TYPE (right_base_type))));
+ 	      best_type = left_base_type;
+ 	    }
+ 
+ 	  else if (TREE_CODE (left_base_type) == RECORD_TYPE
+ 		   && TREE_CODE (right_base_type) == RECORD_TYPE)
+ 	    {
+ 	      /* The only way this is permitted is if both types have the same
+ 		 name.  In that case, one of them must not be self-referential.
+ 		 Use it as the best type.  Even better with a fixed size.  */
+ 	      gcc_assert (TYPE_NAME (left_base_type)
+ 			  && TYPE_NAME (left_base_type)
+ 			     == TYPE_NAME (right_base_type));
+ 
+ 	      if (TREE_CONSTANT (TYPE_SIZE (left_base_type)))
+ 		best_type = left_base_type;
+ 	      else if (TREE_CONSTANT (TYPE_SIZE (right_base_type)))
+ 		best_type = right_base_type;
+ 	      else if (!CONTAINS_PLACEHOLDER_P (TYPE_SIZE (left_base_type)))
+ 		best_type = left_base_type;
+ 	      else if (!CONTAINS_PLACEHOLDER_P (TYPE_SIZE (right_base_type)))
+ 		best_type = right_base_type;
+ 	      else
+ 		gcc_unreachable ();
+ 	    }
+ 
+ 	  else
+ 	    gcc_unreachable ();
+ 
+ 	  left_operand = convert (best_type, left_operand);
+ 	  right_operand = convert (best_type, right_operand);
+ 	}
+       else
+ 	{
+ 	  left_operand = convert (left_base_type, left_operand);
+ 	  right_operand = convert (right_base_type, right_operand);
+ 	}
+ 
+       /* If both objects are fat pointers, compare them specially.  */
+       if (TYPE_IS_FAT_POINTER_P (left_base_type))
+ 	{
+ 	  result
+ 	    = compare_fat_pointers (input_location,
+ 				    result_type, left_operand, right_operand);
+ 	  if (op_code == NE_EXPR)
+ 	    result = invert_truthvalue_loc (EXPR_LOCATION (result), result);
+ 	  else
+ 	    gcc_assert (op_code == EQ_EXPR);
+ 
+ 	  return result;
+ 	}
+ 
+       modulus = NULL_TREE;
+       break;
+ 
+     case LSHIFT_EXPR:
+     case RSHIFT_EXPR:
+     case LROTATE_EXPR:
+     case RROTATE_EXPR:
+        /* The RHS of a shift can be any type.  Also, ignore any modulus
+ 	 (we used to abort, but this is needed for unchecked conversion
+ 	 to modular types).  Otherwise, processing is the same as normal.  */
+       gcc_assert (operation_type == left_base_type);
+       modulus = NULL_TREE;
+       left_operand = convert (operation_type, left_operand);
+       break;
+ 
+     case BIT_AND_EXPR:
+     case BIT_IOR_EXPR:
+     case BIT_XOR_EXPR:
+       /* For binary modulus, if the inputs are in range, so are the
+ 	 outputs.  */
+       if (modulus && integer_pow2p (modulus))
+ 	modulus = NULL_TREE;
+       goto common;
+ 
+     case COMPLEX_EXPR:
+       gcc_assert (TREE_TYPE (result_type) == left_base_type
+ 		  && TREE_TYPE (result_type) == right_base_type);
+       left_operand = convert (left_base_type, left_operand);
+       right_operand = convert (right_base_type, right_operand);
+       break;
+ 
+     case TRUNC_DIV_EXPR:   case TRUNC_MOD_EXPR:
+     case CEIL_DIV_EXPR:    case CEIL_MOD_EXPR:
+     case FLOOR_DIV_EXPR:   case FLOOR_MOD_EXPR:
+     case ROUND_DIV_EXPR:   case ROUND_MOD_EXPR:
+       /* These always produce results lower than either operand.  */
+       modulus = NULL_TREE;
+       goto common;
+ 
+     case POINTER_PLUS_EXPR:
+       gcc_assert (operation_type == left_base_type
+ 		  && sizetype == right_base_type);
+       left_operand = convert (operation_type, left_operand);
+       right_operand = convert (sizetype, right_operand);
+       break;
+ 
+     case PLUS_NOMOD_EXPR:
+     case MINUS_NOMOD_EXPR:
+       if (op_code == PLUS_NOMOD_EXPR)
+ 	op_code = PLUS_EXPR;
+       else
+ 	op_code = MINUS_EXPR;
+       modulus = NULL_TREE;
+ 
+       /* ... fall through ... */
+ 
+     case PLUS_EXPR:
+     case MINUS_EXPR:
+       /* Avoid doing arithmetics in ENUMERAL_TYPE or BOOLEAN_TYPE like the
+ 	 other compilers.  Contrary to C, Ada doesn't allow arithmetics in
+ 	 these types but can generate addition/subtraction for Succ/Pred.  */
+       if (operation_type
+ 	  && (TREE_CODE (operation_type) == ENUMERAL_TYPE
+ 	      || TREE_CODE (operation_type) == BOOLEAN_TYPE))
+ 	operation_type = left_base_type = right_base_type
+ 	  = gnat_type_for_mode (TYPE_MODE (operation_type),
+ 				TYPE_UNSIGNED (operation_type));
+ 
+       /* ... fall through ... */
+ 
+     default:
+     common:
+       /* The result type should be the same as the base types of the
+ 	 both operands (and they should be the same).  Convert
+ 	 everything to the result type.  */
+ 
+       gcc_assert (operation_type == left_base_type
+ 		  && left_base_type == right_base_type);
+       left_operand = convert (operation_type, left_operand);
+       right_operand = convert (operation_type, right_operand);
+     }
+ 
+   if (modulus && !integer_pow2p (modulus))
+     {
+       result = nonbinary_modular_operation (op_code, operation_type,
+ 					    left_operand, right_operand);
+       modulus = NULL_TREE;
+     }
+   /* If either operand is a NULL_EXPR, just return a new one.  */
+   else if (TREE_CODE (left_operand) == NULL_EXPR)
+     return build1 (NULL_EXPR, operation_type, TREE_OPERAND (left_operand, 0));
+   else if (TREE_CODE (right_operand) == NULL_EXPR)
+     return build1 (NULL_EXPR, operation_type, TREE_OPERAND (right_operand, 0));
+   else if (op_code == ARRAY_REF || op_code == ARRAY_RANGE_REF)
+     {
+       result = build4 (op_code, operation_type, left_operand, right_operand,
+ 		       NULL_TREE, NULL_TREE);
+       if (!no_fold)
+ 	result = fold (result);
+     }
+   else if (op_code == INIT_EXPR || op_code == MODIFY_EXPR)
+     result = build2 (op_code, void_type_node, left_operand, right_operand);
+   else if (no_fold)
+     result = build2 (op_code, operation_type, left_operand, right_operand);
+   else
+     result
+       = fold_build2 (op_code, operation_type, left_operand, right_operand);
+ 
+   if (TREE_CONSTANT (result))
+     ;
+   else if (op_code == ARRAY_REF || op_code == ARRAY_RANGE_REF)
+     {
+       if (TYPE_VOLATILE (operation_type))
+ 	TREE_THIS_VOLATILE (result) = 1;
+     }
+   else if (TREE_CONSTANT (left_operand) && TREE_CONSTANT (right_operand))
+     TREE_CONSTANT (result) = 1;
+ 
+   if (has_side_effects)
+     TREE_SIDE_EFFECTS (result) = 1;
+ 
+   /* If we are working with modular types, perform the MOD operation
+      if something above hasn't eliminated the need for it.  */
+   if (modulus)
+     {
+       modulus = convert (operation_type, modulus);
+       if (no_fold)
+ 	result = build2 (FLOOR_MOD_EXPR, operation_type, result, modulus);
+       else
+ 	result = fold_build2 (FLOOR_MOD_EXPR, operation_type, result, modulus);
+     }
+ 
+   if (result_type && result_type != operation_type)
+     result = convert (result_type, result);
+ 
+   return result;
+ }
+ 
+ /* Similar, but for unary operations.  */
+ 
+ tree
+ build_unary_op (enum tree_code op_code, tree result_type, tree operand)
+ {
+   tree type = TREE_TYPE (operand);
+   tree base_type = get_base_type (type);
+   tree operation_type = result_type;
+   tree result;
+ 
+   if (operation_type
+       && TREE_CODE (operation_type) == RECORD_TYPE
+       && TYPE_JUSTIFIED_MODULAR_P (operation_type))
+     operation_type = TREE_TYPE (TYPE_FIELDS (operation_type));
+ 
+   if (operation_type
+       && TREE_CODE (operation_type) == INTEGER_TYPE
+       && TYPE_EXTRA_SUBTYPE_P (operation_type))
+     operation_type = get_base_type (operation_type);
+ 
+   switch (op_code)
+     {
+     case REALPART_EXPR:
+     case IMAGPART_EXPR:
+       if (!operation_type)
+ 	result_type = operation_type = TREE_TYPE (type);
+       else
+ 	gcc_assert (result_type == TREE_TYPE (type));
+ 
+       result = fold_build1 (op_code, operation_type, operand);
+       break;
+ 
+     case TRUTH_NOT_EXPR:
+       gcc_checking_assert
+ 	(TREE_CODE (get_base_type (result_type)) == BOOLEAN_TYPE);
+       result = invert_truthvalue_loc (EXPR_LOCATION (operand), operand);
+       /* When not optimizing, fold the result as invert_truthvalue_loc
+ 	 doesn't fold the result of comparisons.  This is intended to undo
+ 	 the trick used for boolean rvalues in gnat_to_gnu.  */
+       if (!optimize)
+ 	result = fold (result);
+       break;
+ 
+     case ATTR_ADDR_EXPR:
+     case ADDR_EXPR:
+       switch (TREE_CODE (operand))
+ 	{
+ 	case INDIRECT_REF:
+ 	case UNCONSTRAINED_ARRAY_REF:
+ 	  result = TREE_OPERAND (operand, 0);
+ 
+ 	  /* Make sure the type here is a pointer, not a reference.
+ 	     GCC wants pointer types for function addresses.  */
+ 	  if (!result_type)
+ 	    result_type = build_pointer_type (type);
+ 
+ 	  /* If the underlying object can alias everything, propagate the
+ 	     property since we are effectively retrieving the object.  */
+ 	  if (POINTER_TYPE_P (TREE_TYPE (result))
+ 	      && TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (result)))
+ 	    {
+ 	      if (TREE_CODE (result_type) == POINTER_TYPE
+ 		  && !TYPE_REF_CAN_ALIAS_ALL (result_type))
+ 		result_type
+ 		  = build_pointer_type_for_mode (TREE_TYPE (result_type),
+ 						 TYPE_MODE (result_type),
+ 						 true);
+ 	      else if (TREE_CODE (result_type) == REFERENCE_TYPE
+ 		       && !TYPE_REF_CAN_ALIAS_ALL (result_type))
+ 	        result_type
+ 		  = build_reference_type_for_mode (TREE_TYPE (result_type),
+ 						   TYPE_MODE (result_type),
+ 						   true);
+ 	    }
+ 	  break;
+ 
+ 	case NULL_EXPR:
+ 	  result = operand;
+ 	  TREE_TYPE (result) = type = build_pointer_type (type);
+ 	  break;
+ 
+ 	case COMPOUND_EXPR:
+ 	  /* Fold a compound expression if it has unconstrained array type
+ 	     since the middle-end cannot handle it.  But we don't it in the
+ 	     general case because it may introduce aliasing issues if the
+ 	     first operand is an indirect assignment and the second operand
+ 	     the corresponding address, e.g. for an allocator.  However do
+ 	     it for a return value to expose it for later recognition.  */
+ 	  if (TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE
+ 	      || (TREE_CODE (TREE_OPERAND (operand, 1)) == VAR_DECL
+ 		  && DECL_RETURN_VALUE_P (TREE_OPERAND (operand, 1))))
+ 	    {
+ 	      result = build_unary_op (ADDR_EXPR, result_type,
+ 				       TREE_OPERAND (operand, 1));
+ 	      result = build2 (COMPOUND_EXPR, TREE_TYPE (result),
+ 			       TREE_OPERAND (operand, 0), result);
+ 	      break;
+ 	    }
+ 	  goto common;
+ 
+ 	case ARRAY_REF:
+ 	case ARRAY_RANGE_REF:
+ 	case COMPONENT_REF:
+ 	case BIT_FIELD_REF:
+ 	    /* If this is for 'Address, find the address of the prefix and add
+ 	       the offset to the field.  Otherwise, do this the normal way.  */
+ 	  if (op_code == ATTR_ADDR_EXPR)
+ 	    {
+ 	      poly_int64 bitsize;
+ 	      poly_int64 bitpos;
+ 	      tree offset, inner;
+ 	      machine_mode mode;
+ 	      int unsignedp, reversep, volatilep;
+ 
+ 	      inner = get_inner_reference (operand, &bitsize, &bitpos, &offset,
+ 					   &mode, &unsignedp, &reversep,
+ 					   &volatilep);
+ 
+ 	      /* If INNER is a padding type whose field has a self-referential
+ 		 size, convert to that inner type.  We know the offset is zero
+ 		 and we need to have that type visible.  */
+ 	      if (type_is_padding_self_referential (TREE_TYPE (inner)))
+ 		inner = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (inner))),
+ 				 inner);
+ 
+ 	      /* Compute the offset as a byte offset from INNER.  */
+ 	      if (!offset)
+ 		offset = size_zero_node;
+ 
+ 	      offset
+ 		= size_binop (PLUS_EXPR, offset,
+ 			      size_int (bits_to_bytes_round_down (bitpos)));
+ 
+ 	      /* Take the address of INNER, convert it to a pointer to our type
+ 		 and add the offset.  */
+ 	      inner = build_unary_op (ADDR_EXPR,
+ 				      build_pointer_type (TREE_TYPE (operand)),
+ 				      inner);
+ 	      result = build_binary_op (POINTER_PLUS_EXPR, TREE_TYPE (inner),
+ 					inner, offset);
+ 	      break;
+ 	    }
+ 	  goto common;
+ 
+ 	case CONSTRUCTOR:
+ 	  /* If this is just a constructor for a padded record, we can
+ 	     just take the address of the single field and convert it to
+ 	     a pointer to our type.  */
+ 	  if (TYPE_IS_PADDING_P (type))
+ 	    {
+ 	      result
+ 		= build_unary_op (ADDR_EXPR,
+ 				  build_pointer_type (TREE_TYPE (operand)),
+ 				  CONSTRUCTOR_ELT (operand, 0)->value);
+ 	      break;
+ 	    }
+ 	  goto common;
+ 
+ 	case NOP_EXPR:
+ 	  if (AGGREGATE_TYPE_P (type)
+ 	      && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (operand, 0))))
+ 	    return build_unary_op (ADDR_EXPR, result_type,
+ 				   TREE_OPERAND (operand, 0));
+ 
+ 	  /* ... fallthru ... */
+ 
+ 	case VIEW_CONVERT_EXPR:
+ 	  /* If this just a variant conversion or if the conversion doesn't
+ 	     change the mode, get the result type from this type and go down.
+ 	     This is needed for conversions of CONST_DECLs, to eventually get
+ 	     to the address of their CORRESPONDING_VARs.  */
+ 	  if ((TYPE_MAIN_VARIANT (type)
+ 	       == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (operand, 0))))
+ 	      || (TYPE_MODE (type) != BLKmode
+ 		  && (TYPE_MODE (type)
+ 		      == TYPE_MODE (TREE_TYPE (TREE_OPERAND (operand, 0))))))
+ 	    return build_unary_op (ADDR_EXPR,
+ 				   (result_type ? result_type
+ 				    : build_pointer_type (type)),
+ 				   TREE_OPERAND (operand, 0));
+ 	  goto common;
+ 
+ 	case CONST_DECL:
+ 	  operand = DECL_CONST_CORRESPONDING_VAR (operand);
+ 
+ 	  /* ... fall through ... */
+ 
+ 	default:
+ 	common:
+ 
+ 	  /* If we are taking the address of a padded record whose field
+ 	     contains a template, take the address of the field.  */
+ 	  if (TYPE_IS_PADDING_P (type)
+ 	      && TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == RECORD_TYPE
+ 	      && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (TYPE_FIELDS (type))))
+ 	    {
+ 	      type = TREE_TYPE (TYPE_FIELDS (type));
+ 	      operand = convert (type, operand);
+ 	    }
+ 
+ 	  gnat_mark_addressable (operand);
+ 	  result = build_fold_addr_expr (operand);
+ 	}
+ 
+       if (TREE_CONSTANT (operand) || staticp (operand))
+ 	TREE_CONSTANT (result) = 1;
+ 
+       break;
+ 
+     case INDIRECT_REF:
+       {
+ 	tree t = remove_conversions (operand, false);
+ 	bool can_never_be_null = DECL_P (t) && DECL_CAN_NEVER_BE_NULL_P (t);
+ 
+ 	/* If TYPE is a thin pointer, either first retrieve the base if this
+ 	   is an expression with an offset built for the initialization of an
+ 	   object with an unconstrained nominal subtype, or else convert to
+ 	   the fat pointer.  */
+ 	if (TYPE_IS_THIN_POINTER_P (type))
+ 	  {
+ 	    tree rec_type = TREE_TYPE (type);
+ 
+ 	    if (TREE_CODE (operand) == POINTER_PLUS_EXPR
+ 		&& TREE_OPERAND (operand, 1)
+ 		   == byte_position (DECL_CHAIN (TYPE_FIELDS (rec_type)))
+ 		&& TREE_CODE (TREE_OPERAND (operand, 0)) == NOP_EXPR)
+ 	      {
+ 		operand = TREE_OPERAND (TREE_OPERAND (operand, 0), 0);
+ 		type = TREE_TYPE (operand);
+ 	      }
+ 	    else if (TYPE_UNCONSTRAINED_ARRAY (rec_type))
+ 	      {
+ 		operand
+ 		  = convert (TREE_TYPE (TYPE_UNCONSTRAINED_ARRAY (rec_type)),
+ 			     operand);
+ 		type = TREE_TYPE (operand);
+ 	      }
+ 	  }
+ 
+ 	/* If we want to refer to an unconstrained array, use the appropriate
+ 	   expression.  But this will never survive down to the back-end.  */
+ 	if (TYPE_IS_FAT_POINTER_P (type))
+ 	  {
+ 	    result = build1 (UNCONSTRAINED_ARRAY_REF,
+ 			     TYPE_UNCONSTRAINED_ARRAY (type), operand);
+ 	    TREE_READONLY (result)
+ 	      = TYPE_READONLY (TYPE_UNCONSTRAINED_ARRAY (type));
+ 	  }
+ 
+ 	/* If we are dereferencing an ADDR_EXPR, return its operand.  */
+ 	else if (TREE_CODE (operand) == ADDR_EXPR)
+ 	  result = TREE_OPERAND (operand, 0);
+ 
+ 	/* Otherwise, build and fold the indirect reference.  */
+ 	else
+ 	  {
+ 	    result = build_fold_indirect_ref (operand);
+ 	    TREE_READONLY (result) = TYPE_READONLY (TREE_TYPE (type));
+ 	  }
+ 
+ 	if (!TYPE_IS_FAT_POINTER_P (type) && TYPE_VOLATILE (TREE_TYPE (type)))
+ 	  {
+ 	    TREE_SIDE_EFFECTS (result) = 1;
+ 	    if (TREE_CODE (result) == INDIRECT_REF)
+ 	      TREE_THIS_VOLATILE (result) = TYPE_VOLATILE (TREE_TYPE (result));
+ 	  }
+ 
+ 	if ((TREE_CODE (result) == INDIRECT_REF
+ 	     || TREE_CODE (result) == UNCONSTRAINED_ARRAY_REF)
+ 	    && can_never_be_null)
+ 	  TREE_THIS_NOTRAP (result) = 1;
+ 
+ 	break;
+       }
+ 
+     case NEGATE_EXPR:
+     case BIT_NOT_EXPR:
+       {
+ 	tree modulus = ((operation_type
+ 			 && TREE_CODE (operation_type) == INTEGER_TYPE
+ 			 && TYPE_MODULAR_P (operation_type))
+ 			? TYPE_MODULUS (operation_type) : NULL_TREE);
+ 	int mod_pow2 = modulus && integer_pow2p (modulus);
+ 
+ 	/* If this is a modular type, there are various possibilities
+ 	   depending on the operation and whether the modulus is a
+ 	   power of two or not.  */
+ 
+ 	if (modulus)
+ 	  {
+ 	    gcc_assert (operation_type == base_type);
+ 	    operand = convert (operation_type, operand);
+ 
+ 	    /* The fastest in the negate case for binary modulus is
+ 	       the straightforward code; the TRUNC_MOD_EXPR below
+ 	       is an AND operation.  */
+ 	    if (op_code == NEGATE_EXPR && mod_pow2)
+ 	      result = fold_build2 (TRUNC_MOD_EXPR, operation_type,
+ 				    fold_build1 (NEGATE_EXPR, operation_type,
+ 						 operand),
+ 				    modulus);
+ 
+ 	    /* For nonbinary negate case, return zero for zero operand,
+ 	       else return the modulus minus the operand.  If the modulus
+ 	       is a power of two minus one, we can do the subtraction
+ 	       as an XOR since it is equivalent and faster on most machines. */
+ 	    else if (op_code == NEGATE_EXPR && !mod_pow2)
+ 	      {
+ 		if (integer_pow2p (fold_build2 (PLUS_EXPR, operation_type,
+ 						modulus,
+ 						build_int_cst (operation_type,
+ 							       1))))
+ 		  result = fold_build2 (BIT_XOR_EXPR, operation_type,
+ 					operand, modulus);
+ 		else
+ 		  result = fold_build2 (MINUS_EXPR, operation_type,
+ 					modulus, operand);
+ 
+ 		result = fold_build3 (COND_EXPR, operation_type,
+ 				      fold_build2 (NE_EXPR,
+ 						   boolean_type_node,
+ 						   operand,
+ 						   build_int_cst
+ 						   (operation_type, 0)),
+ 				      result, operand);
+ 	      }
+ 	    else
+ 	      {
+ 		/* For the NOT cases, we need a constant equal to
+ 		   the modulus minus one.  For a binary modulus, we
+ 		   XOR against the constant and subtract the operand from
+ 		   that constant for nonbinary modulus.  */
+ 
+ 		tree cnst = fold_build2 (MINUS_EXPR, operation_type, modulus,
+ 					 build_int_cst (operation_type, 1));
+ 
+ 		if (mod_pow2)
+ 		  result = fold_build2 (BIT_XOR_EXPR, operation_type,
+ 					operand, cnst);
+ 		else
+ 		  result = fold_build2 (MINUS_EXPR, operation_type,
+ 					cnst, operand);
+ 	      }
+ 
+ 	    break;
+ 	  }
+       }
+ 
+       /* ... fall through ... */
+ 
+     default:
+       gcc_assert (operation_type == base_type);
+       result = fold_build1 (op_code, operation_type,
+ 			    convert (operation_type, operand));
+     }
+ 
+   if (result_type && TREE_TYPE (result) != result_type)
+     result = convert (result_type, result);
+ 
+   return result;
+ }
+ 
+ /* Similar, but for COND_EXPR.  */
+ 
+ tree
+ build_cond_expr (tree result_type, tree condition_operand,
+                  tree true_operand, tree false_operand)
+ {
+   bool addr_p = false;
+   tree result;
+ 
+   /* The front-end verified that result, true and false operands have
+      same base type.  Convert everything to the result type.  */
+   true_operand = convert (result_type, true_operand);
+   false_operand = convert (result_type, false_operand);
+ 
+   /* If the result type is unconstrained, take the address of the operands and
+      then dereference the result.  Likewise if the result type is passed by
+      reference, because creating a temporary of this type is not allowed.  */
+   if (TREE_CODE (result_type) == UNCONSTRAINED_ARRAY_TYPE
+       || TYPE_IS_BY_REFERENCE_P (result_type)
+       || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (result_type)))
+     {
+       result_type = build_pointer_type (result_type);
+       true_operand = build_unary_op (ADDR_EXPR, result_type, true_operand);
+       false_operand = build_unary_op (ADDR_EXPR, result_type, false_operand);
+       addr_p = true;
+     }
+ 
+   result = fold_build3 (COND_EXPR, result_type, condition_operand,
+ 			true_operand, false_operand);
+ 
+   /* If we have a common SAVE_EXPR (possibly surrounded by arithmetics)
+      in both arms, make sure it gets evaluated by moving it ahead of the
+      conditional expression.  This is necessary because it is evaluated
+      in only one place at run time and would otherwise be uninitialized
+      in one of the arms.  */
+   true_operand = skip_simple_arithmetic (true_operand);
+   false_operand = skip_simple_arithmetic (false_operand);
+ 
+   if (true_operand == false_operand && TREE_CODE (true_operand) == SAVE_EXPR)
+     result = build2 (COMPOUND_EXPR, result_type, true_operand, result);
+ 
+   if (addr_p)
+     result = build_unary_op (INDIRECT_REF, NULL_TREE, result);
+ 
+   return result;
+ }
+ 
+ /* Similar, but for COMPOUND_EXPR.  */
+ 
+ tree
+ build_compound_expr (tree result_type, tree stmt_operand, tree expr_operand)
+ {
+   bool addr_p = false;
+   tree result;
+ 
+   /* If the result type is unconstrained, take the address of the operand and
+      then dereference the result.  Likewise if the result type is passed by
+      reference, but this is natively handled in the gimplifier.  */
+   if (TREE_CODE (result_type) == UNCONSTRAINED_ARRAY_TYPE
+       || CONTAINS_PLACEHOLDER_P (TYPE_SIZE (result_type)))
+     {
+       result_type = build_pointer_type (result_type);
+       expr_operand = build_unary_op (ADDR_EXPR, result_type, expr_operand);
+       addr_p = true;
+     }
+ 
+   result = fold_build2 (COMPOUND_EXPR, result_type, stmt_operand,
+ 			expr_operand);
+ 
+   if (addr_p)
+     result = build_unary_op (INDIRECT_REF, NULL_TREE, result);
+ 
+   return result;
+ }
+ 
+ /* Conveniently construct a function call expression.  FNDECL names the
+    function to be called, N is the number of arguments, and the "..."
+    parameters are the argument expressions.  Unlike build_call_expr
+    this doesn't fold the call, hence it will always return a CALL_EXPR.  */
+ 
+ tree
+ build_call_n_expr (tree fndecl, int n, ...)
+ {
+   va_list ap;
+   tree fntype = TREE_TYPE (fndecl);
+   tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
+ 
+   va_start (ap, n);
+   fn = build_call_valist (TREE_TYPE (fntype), fn, n, ap);
+   va_end (ap);
+   return fn;
+ }
+ 
+ /* Build a goto to LABEL for a raise, with an optional call to Local_Raise.
+    MSG gives the exception's identity for the call to Local_Raise, if any.  */
+ 
+ static tree
+ build_goto_raise (Entity_Id gnat_label, int msg)
+ {
+   tree gnu_label = gnat_to_gnu_entity (gnat_label, NULL_TREE, false);
+   tree gnu_result = build1 (GOTO_EXPR, void_type_node, gnu_label);
+   Entity_Id local_raise = Get_Local_Raise_Call_Entity ();
+ 
+   /* If Local_Raise is present, build Local_Raise (Exception'Identity).  */
+   if (Present (local_raise))
+     {
+       tree gnu_local_raise
+ 	= gnat_to_gnu_entity (local_raise, NULL_TREE, false);
+       tree gnu_exception_entity
+ 	= gnat_to_gnu_entity (Get_RT_Exception_Entity (msg), NULL_TREE, false);
+       tree gnu_call
+ 	= build_call_n_expr (gnu_local_raise, 1,
+ 			     build_unary_op (ADDR_EXPR, NULL_TREE,
+ 					     gnu_exception_entity));
+       gnu_result
+ 	= build2 (COMPOUND_EXPR, void_type_node, gnu_call, gnu_result);
+     }
+ 
+   TREE_USED (gnu_label) = 1;
+   return gnu_result;
+ }
+ 
+ /* Expand the SLOC of GNAT_NODE, if present, into tree location information
+    pointed to by FILENAME, LINE and COL.  Fall back to the current location
+    if GNAT_NODE is absent or has no SLOC.  */
+ 
+ static void
+ expand_sloc (Node_Id gnat_node, tree *filename, tree *line, tree *col)
+ {
+   const char *str;
+   int line_number, column_number;
+ 
+   if (Debug_Flag_NN || Exception_Locations_Suppressed)
+     {
+       str = "";
+       line_number = 0;
+       column_number = 0;
+     }
+   else if (Present (gnat_node) && Sloc (gnat_node) != No_Location)
+     {
+       str = Get_Name_String
+ 	    (Debug_Source_Name (Get_Source_File_Index (Sloc (gnat_node))));
+       line_number = Get_Logical_Line_Number (Sloc (gnat_node));
+       column_number = Get_Column_Number (Sloc (gnat_node));
+     }
+   else
+     {
+       str = lbasename (LOCATION_FILE (input_location));
+       line_number = LOCATION_LINE (input_location);
+       column_number = LOCATION_COLUMN (input_location);
+     }
+ 
+   const int len = strlen (str);
+   *filename = build_string (len, str);
+   TREE_TYPE (*filename) = build_array_type (char_type_node,
+ 					    build_index_type (size_int (len)));
+   *line = build_int_cst (NULL_TREE, line_number);
+   if (col)
+     *col = build_int_cst (NULL_TREE, column_number);
+ }
+ 
+ /* Build a call to a function that raises an exception and passes file name
+    and line number, if requested.  MSG says which exception function to call.
+    GNAT_NODE is the node conveying the source location for which the error
+    should be signaled, or Empty in which case the error is signaled for the
+    current location.  KIND says which kind of exception node this is for,
+    among N_Raise_{Constraint,Storage,Program}_Error.  */
+ 
+ tree
+ build_call_raise (int msg, Node_Id gnat_node, char kind)
+ {
+   Entity_Id gnat_label = get_exception_label (kind);
+   tree fndecl = gnat_raise_decls[msg];
+   tree filename, line;
+ 
+   /* If this is to be done as a goto, handle that case.  */
+   if (Present (gnat_label))
+     return build_goto_raise (gnat_label, msg);
+ 
+   expand_sloc (gnat_node, &filename, &line, NULL);
+ 
+   return
+     build_call_n_expr (fndecl, 2,
+ 		       build1 (ADDR_EXPR,
+ 			       build_pointer_type (char_type_node),
+ 			       filename),
+ 		       line);
+ }
+ 
+ /* Similar to build_call_raise, with extra information about the column
+    where the check failed.  */
+ 
+ tree
+ build_call_raise_column (int msg, Node_Id gnat_node, char kind)
+ {
+   Entity_Id gnat_label = get_exception_label (kind);
+   tree fndecl = gnat_raise_decls_ext[msg];
+   tree filename, line, col;
+ 
+   /* If this is to be done as a goto, handle that case.  */
+   if (Present (gnat_label))
+     return build_goto_raise (gnat_label, msg);
+ 
+   expand_sloc (gnat_node, &filename, &line, &col);
+ 
+   return
+     build_call_n_expr (fndecl, 3,
+ 		       build1 (ADDR_EXPR,
+ 			       build_pointer_type (char_type_node),
+ 			       filename),
+ 		       line, col);
+ }
+ 
+ /* Similar to build_call_raise_column, for an index or range check exception ,
+    with extra information of the form "INDEX out of range FIRST..LAST".  */
+ 
+ tree
+ build_call_raise_range (int msg, Node_Id gnat_node, char kind,
+ 			tree index, tree first, tree last)
+ {
+   Entity_Id gnat_label = get_exception_label (kind);
+   tree fndecl = gnat_raise_decls_ext[msg];
+   tree filename, line, col;
+ 
+   /* If this is to be done as a goto, handle that case.  */
+   if (Present (gnat_label))
+     return build_goto_raise (gnat_label, msg);
+ 
+   expand_sloc (gnat_node, &filename, &line, &col);
+ 
+   return
+     build_call_n_expr (fndecl, 6,
+ 		       build1 (ADDR_EXPR,
+ 			       build_pointer_type (char_type_node),
+ 			       filename),
+ 		       line, col,
+ 		       convert (integer_type_node, index),
+ 		       convert (integer_type_node, first),
+ 		       convert (integer_type_node, last));
+ }
+ 
+ /* qsort comparer for the bit positions of two constructor elements
+    for record components.  */
+ 
+ static int
+ compare_elmt_bitpos (const PTR rt1, const PTR rt2)
+ {
+   const constructor_elt * const elmt1 = (const constructor_elt *) rt1;
+   const constructor_elt * const elmt2 = (const constructor_elt *) rt2;
+   const_tree const field1 = elmt1->index;
+   const_tree const field2 = elmt2->index;
+   const int ret
+     = tree_int_cst_compare (bit_position (field1), bit_position (field2));
+ 
+   return ret ? ret : (int) (DECL_UID (field1) - DECL_UID (field2));
+ }
+ 
+ /* Return a CONSTRUCTOR of TYPE whose elements are V.  */
+ 
+ tree
+ gnat_build_constructor (tree type, vec<constructor_elt, va_gc> *v)
+ {
+   bool allconstant = (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST);
+   bool read_only = true;
+   bool side_effects = false;
+   tree result, obj, val;
+   unsigned int n_elmts;
+ 
+   /* Scan the elements to see if they are all constant or if any has side
+      effects, to let us set global flags on the resulting constructor.  Count
+      the elements along the way for possible sorting purposes below.  */
+   FOR_EACH_CONSTRUCTOR_ELT (v, n_elmts, obj, val)
+     {
+       /* The predicate must be in keeping with output_constructor and, unlike
+ 	 initializer_constant_valid_p, we accept "&{...}" because we'll put
+ 	 the CONSTRUCTOR into the constant pool during gimplification.  */
+       if ((!TREE_CONSTANT (val) && !TREE_STATIC (val))
+ 	  || (TREE_CODE (type) == RECORD_TYPE
+ 	      && CONSTRUCTOR_BITFIELD_P (obj)
+ 	      && !initializer_constant_valid_for_bitfield_p (val))
+ 	  || (!initializer_constant_valid_p (val,
+ 					     TREE_TYPE (val),
+ 					     TYPE_REVERSE_STORAGE_ORDER (type))
+ 	      && !(TREE_CODE (val) == ADDR_EXPR
+ 		   && TREE_CODE (TREE_OPERAND (val, 0)) == CONSTRUCTOR
+ 		   && TREE_CONSTANT (TREE_OPERAND (val, 0)))))
+ 	allconstant = false;
+ 
+       if (!TREE_READONLY (val))
+ 	read_only = false;
+ 
+       if (TREE_SIDE_EFFECTS (val))
+ 	side_effects = true;
+     }
+ 
+   /* For record types with constant components only, sort field list
+      by increasing bit position.  This is necessary to ensure the
+      constructor can be output as static data.  */
+   if (allconstant && TREE_CODE (type) == RECORD_TYPE && n_elmts > 1)
+     v->qsort (compare_elmt_bitpos);
+ 
+   result = build_constructor (type, v);
+   CONSTRUCTOR_NO_CLEARING (result) = 1;
+   TREE_CONSTANT (result) = TREE_STATIC (result) = allconstant;
+   TREE_SIDE_EFFECTS (result) = side_effects;
+   TREE_READONLY (result) = TYPE_READONLY (type) || read_only || allconstant;
+   return result;
+ }
+ 
+ /* Return a COMPONENT_REF to access FIELD in RECORD, or NULL_TREE if the field
+    is not found in the record.  Don't fold the result if NO_FOLD is true.  */
+ 
+ static tree
+ build_simple_component_ref (tree record, tree field, bool no_fold)
+ {
+   tree type = TYPE_MAIN_VARIANT (TREE_TYPE (record));
+   tree ref;
+ 
+   /* The failure of this assertion will very likely come from a missing
+      insertion of an explicit dereference.  */
+   gcc_assert (RECORD_OR_UNION_TYPE_P (type) && COMPLETE_TYPE_P (type));
+ 
+   /* Try to fold a conversion from another record or union type unless the type
+      contains a placeholder as it might be needed for a later substitution.  */
+   if (TREE_CODE (record) == VIEW_CONVERT_EXPR
+       && RECORD_OR_UNION_TYPE_P (TREE_TYPE (TREE_OPERAND (record, 0)))
+       && !type_contains_placeholder_p (type))
+     {
+       tree op = TREE_OPERAND (record, 0);
+ 
+       /* If this is an unpadding operation, convert the underlying object to
+ 	 the unpadded type directly.  */
+       if (TYPE_IS_PADDING_P (type) && field == TYPE_FIELDS (type))
+ 	return convert (TREE_TYPE (field), op);
+ 
+       /* Otherwise try to access FIELD directly in the underlying type, but
+ 	 make sure that the form of the reference doesn't change too much;
+ 	 this can happen for an unconstrained bit-packed array type whose
+ 	 constrained form can be an integer type.  */
+       ref = build_simple_component_ref (op, field, no_fold);
+       if (ref && TREE_CODE (TREE_TYPE (ref)) == TREE_CODE (TREE_TYPE (field)))
+ 	return ref;
+     }
+ 
+   /* If this field is not in the specified record, see if we can find a field
+      in the specified record whose original field is the same as this one.  */
+   if (DECL_CONTEXT (field) != type)
+     {
+       tree new_field;
+ 
+       /* First loop through normal components.  */
+       for (new_field = TYPE_FIELDS (type);
+ 	   new_field;
+ 	   new_field = DECL_CHAIN (new_field))
+ 	if (SAME_FIELD_P (field, new_field))
+ 	  break;
+ 
+       /* Next, loop through DECL_INTERNAL_P components if we haven't found the
+ 	 component in the first search.  Doing this search in two steps is
+ 	 required to avoid hidden homonymous fields in the _Parent field.  */
+       if (!new_field)
+ 	for (new_field = TYPE_FIELDS (type);
+ 	     new_field;
+ 	     new_field = DECL_CHAIN (new_field))
+ 	  if (DECL_INTERNAL_P (new_field)
+ 	      && RECORD_OR_UNION_TYPE_P (TREE_TYPE (new_field)))
+ 	    {
+ 	      tree field_ref
+ 		= build_simple_component_ref (record, new_field, no_fold);
+ 	      ref = build_simple_component_ref (field_ref, field, no_fold);
+ 	      if (ref)
+ 		return ref;
+ 	    }
+ 
+       field = new_field;
+     }
+ 
+   if (!field)
+     return NULL_TREE;
+ 
+   /* If the field's offset has overflowed, do not try to access it, as doing
+      so may trigger sanity checks deeper in the back-end.  Note that we don't
+      need to warn since this will be done on trying to declare the object.  */
+   if (TREE_CODE (DECL_FIELD_OFFSET (field)) == INTEGER_CST
+       && TREE_OVERFLOW (DECL_FIELD_OFFSET (field)))
+     return build1 (NULL_EXPR, TREE_TYPE (field),
+ 		   build_call_raise (SE_Object_Too_Large, Empty,
+ 				     N_Raise_Storage_Error));
+ 
+   ref = build3 (COMPONENT_REF, TREE_TYPE (field), record, field, NULL_TREE);
+ 
+   if (TREE_READONLY (record)
+       || TREE_READONLY (field)
+       || TYPE_READONLY (type))
+     TREE_READONLY (ref) = 1;
+ 
+   if (TREE_THIS_VOLATILE (record)
+       || TREE_THIS_VOLATILE (field)
+       || TYPE_VOLATILE (type))
+     TREE_THIS_VOLATILE (ref) = 1;
+ 
+   if (no_fold)
+     return ref;
+ 
+   /* The generic folder may punt in this case because the inner array type
+      can be self-referential, but folding is in fact not problematic.  */
+   if (TREE_CODE (record) == CONSTRUCTOR
+       && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (record)))
+     {
+       vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (record);
+       unsigned HOST_WIDE_INT idx;
+       tree index, value;
+       FOR_EACH_CONSTRUCTOR_ELT (elts, idx, index, value)
+        if (index == field)
+ 	return value;
+       return ref;
+     }
+ 
+   return fold (ref);
+ }
+ 
+ /* Likewise, but return NULL_EXPR and generate a Program_Error if the
+    field is not found in the record.  */
+ 
+ tree
+ build_component_ref (tree record, tree field, bool no_fold)
+ {
+   tree ref = build_simple_component_ref (record, field, no_fold);
+   if (ref)
+     return ref;
+ 
+   /* The missing field should have been detected in the front-end.  */
+   gigi_checking_assert (false);
+ 
+   /* Assume this is an invalid user field so raise Program_Error.  */
+   return build1 (NULL_EXPR, TREE_TYPE (field),
+ 		 build_call_raise (PE_Explicit_Raise, Empty,
+ 				   N_Raise_Program_Error));
+ }
+ 
+ /* Helper for build_call_alloc_dealloc, with arguments to be interpreted
+    identically.  Process the case where a GNAT_PROC to call is provided.  */
+ 
+ static inline tree
+ build_call_alloc_dealloc_proc (tree gnu_obj, tree gnu_size, tree gnu_type,
+ 			       Entity_Id gnat_proc, Entity_Id gnat_pool)
+ {
+   tree gnu_proc = gnat_to_gnu (gnat_proc);
+   tree gnu_call;
+ 
+   /* A storage pool's underlying type is a record type (for both predefined
+      storage pools and GNAT simple storage pools). The secondary stack uses
+      the same mechanism, but its pool object (SS_Pool) is an integer.  */
+   if (Is_Record_Type (Underlying_Type (Etype (gnat_pool))))
+     {
+       /* The size is the third parameter; the alignment is the
+ 	 same type.  */
+       Entity_Id gnat_size_type
+ 	= Etype (Next_Formal (Next_Formal (First_Formal (gnat_proc))));
+       tree gnu_size_type = gnat_to_gnu_type (gnat_size_type);
+ 
+       tree gnu_pool = gnat_to_gnu (gnat_pool);
+       tree gnu_pool_addr = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_pool);
+       tree gnu_align = size_int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT);
+ 
+       gnu_size = convert (gnu_size_type, gnu_size);
+       gnu_align = convert (gnu_size_type, gnu_align);
+ 
+       /* The first arg is always the address of the storage pool; next
+ 	 comes the address of the object, for a deallocator, then the
+ 	 size and alignment.  */
+       if (gnu_obj)
+ 	gnu_call = build_call_n_expr (gnu_proc, 4, gnu_pool_addr, gnu_obj,
+ 				      gnu_size, gnu_align);
+       else
+ 	gnu_call = build_call_n_expr (gnu_proc, 3, gnu_pool_addr,
+ 				      gnu_size, gnu_align);
+     }
+ 
+   /* Secondary stack case.  */
+   else
+     {
+       /* The size is the second parameter.  */
+       Entity_Id gnat_size_type
+ 	= Etype (Next_Formal (First_Formal (gnat_proc)));
+       tree gnu_size_type = gnat_to_gnu_type (gnat_size_type);
+ 
+       gnu_size = convert (gnu_size_type, gnu_size);
+ 
+       /* The first arg is the address of the object, for a deallocator,
+ 	 then the size.  */
+       if (gnu_obj)
+ 	gnu_call = build_call_n_expr (gnu_proc, 2, gnu_obj, gnu_size);
+       else
+ 	gnu_call = build_call_n_expr (gnu_proc, 1, gnu_size);
+     }
+ 
+   return gnu_call;
+ }
+ 
+ /* Helper for build_call_alloc_dealloc, to build and return an allocator for
+    DATA_SIZE bytes aimed at containing a DATA_TYPE object, using the default
+    __gnat_malloc allocator.  Honor DATA_TYPE alignments greater than what the
+    latter offers.  */
+ 
+ static inline tree
+ maybe_wrap_malloc (tree data_size, tree data_type, Node_Id gnat_node)
+ {
+   /* When the DATA_TYPE alignment is stricter than what malloc offers
+      (super-aligned case), we allocate an "aligning" wrapper type and return
+      the address of its single data field with the malloc's return value
+      stored just in front.  */
+ 
+   unsigned int data_align = TYPE_ALIGN (data_type);
+   unsigned int system_allocator_alignment
+       = get_target_system_allocator_alignment () * BITS_PER_UNIT;
+ 
+   tree aligning_type
+     = ((data_align > system_allocator_alignment)
+        ? make_aligning_type (data_type, data_align, data_size,
+ 			     system_allocator_alignment,
+ 			     POINTER_SIZE / BITS_PER_UNIT,
+ 			     gnat_node)
+        : NULL_TREE);
+ 
+   tree size_to_malloc
+     = aligning_type ? TYPE_SIZE_UNIT (aligning_type) : data_size;
+ 
+   tree malloc_ptr = build_call_n_expr (malloc_decl, 1, size_to_malloc);
+ 
+   if (aligning_type)
+     {
+       /* Latch malloc's return value and get a pointer to the aligning field
+ 	 first.  */
+       tree storage_ptr = gnat_protect_expr (malloc_ptr);
+ 
+       tree aligning_record_addr
+ 	= convert (build_pointer_type (aligning_type), storage_ptr);
+ 
+       tree aligning_record
+ 	= build_unary_op (INDIRECT_REF, NULL_TREE, aligning_record_addr);
+ 
+       tree aligning_field
+ 	= build_component_ref (aligning_record, TYPE_FIELDS (aligning_type),
+ 			       false);
+ 
+       tree aligning_field_addr
+         = build_unary_op (ADDR_EXPR, NULL_TREE, aligning_field);
+ 
+       /* Then arrange to store the allocator's return value ahead
+ 	 and return.  */
+       tree storage_ptr_slot_addr
+ 	= build_binary_op (POINTER_PLUS_EXPR, ptr_type_node,
+ 			   convert (ptr_type_node, aligning_field_addr),
+ 			   size_int (-(HOST_WIDE_INT) POINTER_SIZE
+ 				     / BITS_PER_UNIT));
+ 
+       tree storage_ptr_slot
+ 	= build_unary_op (INDIRECT_REF, NULL_TREE,
+ 			  convert (build_pointer_type (ptr_type_node),
+ 				   storage_ptr_slot_addr));
+ 
+       return
+ 	build2 (COMPOUND_EXPR, TREE_TYPE (aligning_field_addr),
+ 		build_binary_op (INIT_EXPR, NULL_TREE,
+ 				 storage_ptr_slot, storage_ptr),
+ 		aligning_field_addr);
+     }
+   else
+     return malloc_ptr;
+ }
+ 
+ /* Helper for build_call_alloc_dealloc, to release a DATA_TYPE object
+    designated by DATA_PTR using the __gnat_free entry point.  */
+ 
+ static inline tree
+ maybe_wrap_free (tree data_ptr, tree data_type)
+ {
+   /* In the regular alignment case, we pass the data pointer straight to free.
+      In the superaligned case, we need to retrieve the initial allocator
+      return value, stored in front of the data block at allocation time.  */
+ 
+   unsigned int data_align = TYPE_ALIGN (data_type);
+   unsigned int system_allocator_alignment
+       = get_target_system_allocator_alignment () * BITS_PER_UNIT;
+ 
+   tree free_ptr;
+ 
+   if (data_align > system_allocator_alignment)
+     {
+       /* DATA_FRONT_PTR (void *)
+ 	 = (void *)DATA_PTR - (void *)sizeof (void *))  */
+       tree data_front_ptr
+ 	= build_binary_op
+ 	  (POINTER_PLUS_EXPR, ptr_type_node,
+ 	   convert (ptr_type_node, data_ptr),
+ 	   size_int (-(HOST_WIDE_INT) POINTER_SIZE / BITS_PER_UNIT));
+ 
+       /* FREE_PTR (void *) = *(void **)DATA_FRONT_PTR  */
+       free_ptr
+ 	= build_unary_op
+ 	  (INDIRECT_REF, NULL_TREE,
+ 	   convert (build_pointer_type (ptr_type_node), data_front_ptr));
+     }
+   else
+     free_ptr = data_ptr;
+ 
+   return build_call_n_expr (free_decl, 1, free_ptr);
+ }
+ 
+ /* Build a GCC tree to call an allocation or deallocation function.
+    If GNU_OBJ is nonzero, it is an object to deallocate.  Otherwise,
+    generate an allocator.
+ 
+    GNU_SIZE is the number of bytes to allocate and GNU_TYPE is the contained
+    object type, used to determine the to-be-honored address alignment.
+    GNAT_PROC, if present, is a procedure to call and GNAT_POOL is the storage
+    pool to use.  If not present, malloc and free are used.  GNAT_NODE is used
+    to provide an error location for restriction violation messages.  */
+ 
+ tree
+ build_call_alloc_dealloc (tree gnu_obj, tree gnu_size, tree gnu_type,
+                           Entity_Id gnat_proc, Entity_Id gnat_pool,
+                           Node_Id gnat_node)
+ {
+   /* Explicit proc to call ?  This one is assumed to deal with the type
+      alignment constraints.  */
+   if (Present (gnat_proc))
+     return build_call_alloc_dealloc_proc (gnu_obj, gnu_size, gnu_type,
+ 					  gnat_proc, gnat_pool);
+ 
+   /* Otherwise, object to "free" or "malloc" with possible special processing
+      for alignments stricter than what the default allocator honors.  */
+   else if (gnu_obj)
+     return maybe_wrap_free (gnu_obj, gnu_type);
+   else
+     {
+       /* Assert that we no longer can be called with this special pool.  */
+       gcc_assert (gnat_pool != -1);
+ 
+       /* Check that we aren't violating the associated restriction.  */
+       if (!(Nkind (gnat_node) == N_Allocator && Comes_From_Source (gnat_node)))
+ 	{
+ 	  Check_No_Implicit_Heap_Alloc (gnat_node);
+ 	  if (Has_Task (Etype (gnat_node)))
+ 	    Check_No_Implicit_Task_Alloc (gnat_node);
+ 	  if (Has_Protected (Etype (gnat_node)))
+ 	    Check_No_Implicit_Protected_Alloc (gnat_node);
+ 	}
+       return maybe_wrap_malloc (gnu_size, gnu_type, gnat_node);
+     }
+ }
+ 
+ /* Build a GCC tree that corresponds to allocating an object of TYPE whose
+    initial value is INIT, if INIT is nonzero.  Convert the expression to
+    RESULT_TYPE, which must be some pointer type, and return the result.
+ 
+    GNAT_PROC and GNAT_POOL optionally give the procedure to call and
+    the storage pool to use.  GNAT_NODE is used to provide an error
+    location for restriction violation messages.  If IGNORE_INIT_TYPE is
+    true, ignore the type of INIT for the purpose of determining the size;
+    this will cause the maximum size to be allocated if TYPE is of
+    self-referential size.  */
+ 
+ tree
+ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc,
+                  Entity_Id gnat_pool, Node_Id gnat_node, bool ignore_init_type)
+ {
+   tree size, storage, storage_deref, storage_init;
+ 
+   /* If the initializer, if present, is a NULL_EXPR, just return a new one.  */
+   if (init && TREE_CODE (init) == NULL_EXPR)
+     return build1 (NULL_EXPR, result_type, TREE_OPERAND (init, 0));
+ 
+   /* If we are just annotating types, also return a NULL_EXPR.  */
+   else if (type_annotate_only)
+     return build1 (NULL_EXPR, result_type,
+ 		   build_call_raise (CE_Range_Check_Failed, gnat_node,
+ 				     N_Raise_Constraint_Error));
+ 
+   /* If the initializer, if present, is a COND_EXPR, deal with each branch.  */
+   else if (init && TREE_CODE (init) == COND_EXPR)
+     return build3 (COND_EXPR, result_type, TREE_OPERAND (init, 0),
+ 		   build_allocator (type, TREE_OPERAND (init, 1), result_type,
+ 				    gnat_proc, gnat_pool, gnat_node,
+ 				    ignore_init_type),
+ 		   build_allocator (type, TREE_OPERAND (init, 2), result_type,
+ 				    gnat_proc, gnat_pool, gnat_node,
+ 				    ignore_init_type));
+ 
+   /* If RESULT_TYPE is a fat or thin pointer, set SIZE to be the sum of the
+      sizes of the object and its template.  Allocate the whole thing and
+      fill in the parts that are known.  */
+   else if (TYPE_IS_FAT_OR_THIN_POINTER_P (result_type))
+     {
+       tree storage_type
+ 	= build_unc_object_type_from_ptr (result_type, type,
+ 					  get_identifier ("ALLOC"), false);
+       tree template_type = TREE_TYPE (TYPE_FIELDS (storage_type));
+       tree storage_ptr_type = build_pointer_type (storage_type);
+ 
+       size = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_SIZE_UNIT (storage_type),
+ 					     init);
+ 
+       /* If the size overflows, pass -1 so Storage_Error will be raised.  */
+       if (TREE_CODE (size) == INTEGER_CST && !valid_constant_size_p (size))
+ 	size = size_int (-1);
+ 
+       storage = build_call_alloc_dealloc (NULL_TREE, size, storage_type,
+ 					  gnat_proc, gnat_pool, gnat_node);
+       storage = convert (storage_ptr_type, gnat_protect_expr (storage));
+       storage_deref = build_unary_op (INDIRECT_REF, NULL_TREE, storage);
+       TREE_THIS_NOTRAP (storage_deref) = 1;
+ 
+       /* If there is an initializing expression, then make a constructor for
+ 	 the entire object including the bounds and copy it into the object.
+ 	 If there is no initializing expression, just set the bounds.  */
+       if (init)
+ 	{
+ 	  vec<constructor_elt, va_gc> *v;
+ 	  vec_alloc (v, 2);
+ 
+ 	  CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (storage_type),
+ 				  build_template (template_type, type, init));
+ 	  CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (TYPE_FIELDS (storage_type)),
+ 				  init);
+ 	  storage_init
+ 	    = build_binary_op (INIT_EXPR, NULL_TREE, storage_deref,
+ 			       gnat_build_constructor (storage_type, v));
+ 	}
+       else
+ 	storage_init
+ 	  = build_binary_op (INIT_EXPR, NULL_TREE,
+ 			     build_component_ref (storage_deref,
+ 						  TYPE_FIELDS (storage_type),
+ 						  false),
+ 			     build_template (template_type, type, NULL_TREE));
+ 
+       return build2 (COMPOUND_EXPR, result_type,
+ 		     storage_init, convert (result_type, storage));
+     }
+ 
+   size = TYPE_SIZE_UNIT (type);
+ 
+   /* If we have an initializing expression, see if its size is simpler
+      than the size from the type.  */
+   if (!ignore_init_type && init && TYPE_SIZE_UNIT (TREE_TYPE (init))
+       && (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (init))) == INTEGER_CST
+ 	  || CONTAINS_PLACEHOLDER_P (size)))
+     size = TYPE_SIZE_UNIT (TREE_TYPE (init));
+ 
+   /* If the size is still self-referential, reference the initializing
+      expression, if it is present.  If not, this must have been a call
+      to allocate a library-level object, in which case we just use the
+      maximum size.  */
+   if (!ignore_init_type && init)
+     size = SUBSTITUTE_PLACEHOLDER_IN_EXPR (size, init);
+   else if (CONTAINS_PLACEHOLDER_P (size))
+     size = max_size (size, true);
+ 
+   /* If the size overflows, pass -1 so Storage_Error will be raised.  */
+   if (TREE_CODE (size) == INTEGER_CST && !valid_constant_size_p (size))
+     size = size_int (-1);
+ 
+   storage = convert (result_type,
+ 		     build_call_alloc_dealloc (NULL_TREE, size, type,
+ 					       gnat_proc, gnat_pool,
+ 					       gnat_node));
+ 
+   /* If we have an initial value, protect the new address, assign the value
+      and return the address with a COMPOUND_EXPR.  */
+   if (init)
+     {
+       storage = gnat_protect_expr (storage);
+       storage_deref = build_unary_op (INDIRECT_REF, NULL_TREE, storage);
+       TREE_THIS_NOTRAP (storage_deref) = 1;
+       storage_init
+ 	= build_binary_op (INIT_EXPR, NULL_TREE, storage_deref, init);
+       return build2 (COMPOUND_EXPR, result_type, storage_init, storage);
+     }
+ 
+   return storage;
+ }
+ 
+ /* Indicate that we need to take the address of T and that it therefore
+    should not be allocated in a register.  Return true if successful.  */
+ 
+ bool
+ gnat_mark_addressable (tree t)
+ {
+   while (true)
+     switch (TREE_CODE (t))
+       {
+       case ADDR_EXPR:
+       case COMPONENT_REF:
+       case ARRAY_REF:
+       case ARRAY_RANGE_REF:
+       case REALPART_EXPR:
+       case IMAGPART_EXPR:
+       case VIEW_CONVERT_EXPR:
+       case NON_LVALUE_EXPR:
+       CASE_CONVERT:
+ 	t = TREE_OPERAND (t, 0);
+ 	break;
+ 
+       case COMPOUND_EXPR:
+ 	t = TREE_OPERAND (t, 1);
+ 	break;
+ 
+       case CONSTRUCTOR:
+ 	TREE_ADDRESSABLE (t) = 1;
+ 	return true;
+ 
+       case VAR_DECL:
+       case PARM_DECL:
+       case RESULT_DECL:
+ 	TREE_ADDRESSABLE (t) = 1;
+ 	return true;
+ 
+       case FUNCTION_DECL:
+ 	TREE_ADDRESSABLE (t) = 1;
+ 	return true;
+ 
+       case CONST_DECL:
+ 	return DECL_CONST_CORRESPONDING_VAR (t)
+ 	       && gnat_mark_addressable (DECL_CONST_CORRESPONDING_VAR (t));
+ 
+       default:
+ 	return true;
+     }
+ }
+ 
+ /* Return true if EXP is a stable expression for the purpose of the functions
+    below and, therefore, can be returned unmodified by them.  We accept things
+    that are actual constants or that have already been handled.  */
+ 
+ static bool
+ gnat_stable_expr_p (tree exp)
+ {
+   enum tree_code code = TREE_CODE (exp);
+   return TREE_CONSTANT (exp) || code == NULL_EXPR || code == SAVE_EXPR;
+ }
+ 
+ /* Save EXP for later use or reuse.  This is equivalent to save_expr in tree.cc
+    but we know how to handle our own nodes.  */
+ 
+ tree
+ gnat_save_expr (tree exp)
+ {
+   tree type = TREE_TYPE (exp);
+   enum tree_code code = TREE_CODE (exp);
+ 
+   if (gnat_stable_expr_p (exp))
+     return exp;
+ 
+   if (code == UNCONSTRAINED_ARRAY_REF)
+     {
+       tree t = build1 (code, type, gnat_save_expr (TREE_OPERAND (exp, 0)));
+       TREE_READONLY (t) = TYPE_READONLY (type);
+       return t;
+     }
+ 
+   /* If this is a COMPONENT_REF of a fat pointer, save the entire fat pointer.
+      This may be more efficient, but will also allow us to more easily find
+      the match for the PLACEHOLDER_EXPR.  */
+   if (code == COMPONENT_REF
+       && TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (exp, 0))))
+     return build3 (code, type, gnat_save_expr (TREE_OPERAND (exp, 0)),
+ 		   TREE_OPERAND (exp, 1), NULL_TREE);
+ 
+   return save_expr (exp);
+ }
+ 
+ /* Protect EXP for immediate reuse.  This is a variant of gnat_save_expr that
+    is optimized under the assumption that EXP's value doesn't change before
+    its subsequent reuse(s) except through its potential reevaluation.  */
+ 
+ tree
+ gnat_protect_expr (tree exp)
+ {
+   tree type = TREE_TYPE (exp);
+   enum tree_code code = TREE_CODE (exp);
+ 
+   if (gnat_stable_expr_p (exp))
+     return exp;
+ 
+   /* If EXP has no side effects, we theoretically don't need to do anything.
+      However, we may be recursively passed more and more complex expressions
+      involving checks which will be reused multiple times and eventually be
+      unshared for gimplification; in order to avoid a complexity explosion
+      at that point, we protect any expressions more complex than a simple
+      arithmetic expression.  */
+   if (!TREE_SIDE_EFFECTS (exp))
+     {
+       tree inner = skip_simple_arithmetic (exp);
+       if (!EXPR_P (inner) || REFERENCE_CLASS_P (inner))
+ 	return exp;
+     }
+ 
+   /* If this is a conversion, protect what's inside the conversion.  */
+   if (code == NON_LVALUE_EXPR
+       || CONVERT_EXPR_CODE_P (code)
+       || code == VIEW_CONVERT_EXPR)
+   return build1 (code, type, gnat_protect_expr (TREE_OPERAND (exp, 0)));
+ 
+   /* If we're indirectly referencing something, we only need to protect the
+      address since the data itself can't change in these situations.  */
+   if (code == INDIRECT_REF || code == UNCONSTRAINED_ARRAY_REF)
+     {
+       tree t = build1 (code, type, gnat_protect_expr (TREE_OPERAND (exp, 0)));
+       TREE_READONLY (t) = TYPE_READONLY (type);
+       return t;
+     }
+ 
+   /* Likewise if we're indirectly referencing part of something.  */
+   if (code == COMPONENT_REF
+       && TREE_CODE (TREE_OPERAND (exp, 0)) == INDIRECT_REF)
+     return build3 (code, type, gnat_protect_expr (TREE_OPERAND (exp, 0)),
+ 		   TREE_OPERAND (exp, 1), NULL_TREE);
+ 
+   /* If this is a COMPONENT_REF of a fat pointer, save the entire fat pointer.
+      This may be more efficient, but will also allow us to more easily find
+      the match for the PLACEHOLDER_EXPR.  */
+   if (code == COMPONENT_REF
+       && TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (exp, 0))))
+     return build3 (code, type, gnat_protect_expr (TREE_OPERAND (exp, 0)),
+ 		   TREE_OPERAND (exp, 1), NULL_TREE);
+ 
+   /* If this is a fat pointer or a scalar, just make a SAVE_EXPR.  Likewise
+      for a CALL_EXPR as large objects are returned via invisible reference
+      in most ABIs so the temporary will directly be filled by the callee.  */
+   if (TYPE_IS_FAT_POINTER_P (type)
+       || !AGGREGATE_TYPE_P (type)
+       || code == CALL_EXPR)
+     return save_expr (exp);
+ 
+   /* Otherwise reference, protect the address and dereference.  */
+   return
+     build_unary_op (INDIRECT_REF, type,
+ 		    save_expr (build_unary_op (ADDR_EXPR, NULL_TREE, exp)));
+ }
+ 
+ /* This is equivalent to stabilize_reference_1 in tree.cc but we take an extra
+    argument to force evaluation of everything.  */
+ 
+ static tree
+ gnat_stabilize_reference_1 (tree e, void *data)
+ {
+   const bool force = *(bool *)data;
+   enum tree_code code = TREE_CODE (e);
+   tree type = TREE_TYPE (e);
+   tree result;
+ 
+   if (gnat_stable_expr_p (e))
+     return e;
+ 
+   switch (TREE_CODE_CLASS (code))
+     {
+     case tcc_exceptional:
+     case tcc_declaration:
+     case tcc_comparison:
+     case tcc_expression:
+     case tcc_reference:
+     case tcc_vl_exp:
+       /* If this is a COMPONENT_REF of a fat pointer, save the entire
+ 	 fat pointer.  This may be more efficient, but will also allow
+ 	 us to more easily find the match for the PLACEHOLDER_EXPR.  */
+       if (code == COMPONENT_REF
+ 	  && TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (e, 0))))
+ 	result
+ 	  = build3 (code, type,
+ 		    gnat_stabilize_reference_1 (TREE_OPERAND (e, 0), data),
+ 		    TREE_OPERAND (e, 1), NULL_TREE);
+       /* If the expression has side-effects, then encase it in a SAVE_EXPR
+ 	 so that it will only be evaluated once.  */
+       /* The tcc_reference and tcc_comparison classes could be handled as
+ 	 below, but it is generally faster to only evaluate them once.  */
+       else if (TREE_SIDE_EFFECTS (e) || force)
+ 	return save_expr (e);
+       else
+ 	return e;
+       break;
+ 
+     case tcc_binary:
+       /* Recursively stabilize each operand.  */
+       result
+ 	= build2 (code, type,
+ 		  gnat_stabilize_reference_1 (TREE_OPERAND (e, 0), data),
+ 		  gnat_stabilize_reference_1 (TREE_OPERAND (e, 1), data));
+       break;
+ 
+     case tcc_unary:
+       /* Recursively stabilize each operand.  */
+       result
+ 	= build1 (code, type,
+ 		  gnat_stabilize_reference_1 (TREE_OPERAND (e, 0), data));
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   /* See gnat_rewrite_reference below for the rationale.  */
+   TREE_READONLY (result) = TREE_READONLY (e);
+   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
+ 
+   if (TREE_SIDE_EFFECTS (e))
+     TREE_SIDE_EFFECTS (result) = 1;
+ 
+   return result;
+ }
+ 
+ /* This is equivalent to stabilize_reference in tree.cc but we know how to
+    handle our own nodes and we take extra arguments.  FORCE says whether to
+    force evaluation of everything in REF.  INIT is set to the first arm of
+    a COMPOUND_EXPR present in REF, if any.  */
+ 
+ tree
+ gnat_stabilize_reference (tree ref, bool force, tree *init)
+ {
+   return
+     gnat_rewrite_reference (ref, gnat_stabilize_reference_1, &force, init);
+ }
+ 
+ /* Rewrite reference REF and call FUNC on each expression within REF in the
+    process.  DATA is passed unmodified to FUNC.  INIT is set to the first
+    arm of a COMPOUND_EXPR present in REF, if any.  */
+ 
+ tree
+ gnat_rewrite_reference (tree ref, rewrite_fn func, void *data, tree *init)
+ {
+   tree type = TREE_TYPE (ref);
+   enum tree_code code = TREE_CODE (ref);
+   tree result;
+ 
+   switch (code)
+     {
+     case CONST_DECL:
+     case VAR_DECL:
+     case PARM_DECL:
+     case RESULT_DECL:
+       /* No action is needed in this case.  */
+       return ref;
+ 
+     CASE_CONVERT:
+     case FLOAT_EXPR:
+     case FIX_TRUNC_EXPR:
+     case REALPART_EXPR:
+     case IMAGPART_EXPR:
+     case VIEW_CONVERT_EXPR:
+       result
+ 	= build1 (code, type,
+ 		  gnat_rewrite_reference (TREE_OPERAND (ref, 0), func, data,
+ 					  init));
+       break;
+ 
+     case INDIRECT_REF:
+     case UNCONSTRAINED_ARRAY_REF:
+       result = build1 (code, type, func (TREE_OPERAND (ref, 0), data));
+       break;
+ 
+     case COMPONENT_REF:
+       result = build3 (COMPONENT_REF, type,
+ 		       gnat_rewrite_reference (TREE_OPERAND (ref, 0), func,
+ 					       data, init),
+ 		       TREE_OPERAND (ref, 1), NULL_TREE);
+       break;
+ 
+     case BIT_FIELD_REF:
+       result = build3 (BIT_FIELD_REF, type,
+ 		       gnat_rewrite_reference (TREE_OPERAND (ref, 0), func,
+ 					       data, init),
+ 		       TREE_OPERAND (ref, 1), TREE_OPERAND (ref, 2));
+       REF_REVERSE_STORAGE_ORDER (result) = REF_REVERSE_STORAGE_ORDER (ref);
+       break;
+ 
+     case ARRAY_REF:
+     case ARRAY_RANGE_REF:
+       result
+ 	= build4 (code, type,
+ 		  gnat_rewrite_reference (TREE_OPERAND (ref, 0), func, data,
+ 					  init),
+ 		  func (TREE_OPERAND (ref, 1), data),
+ 		  TREE_OPERAND (ref, 2), NULL_TREE);
+       break;
+ 
+     case COMPOUND_EXPR:
+       gcc_assert (!*init);
+       *init = TREE_OPERAND (ref, 0);
+       /* We expect only the pattern built in Call_to_gnu.  */
+       gcc_assert (DECL_P (TREE_OPERAND (ref, 1))
+ 		  || (TREE_CODE (TREE_OPERAND (ref, 1)) == COMPONENT_REF
+ 		      && DECL_P (TREE_OPERAND (TREE_OPERAND (ref, 1), 0))));
+       return TREE_OPERAND (ref, 1);
+ 
+     case CALL_EXPR:
+       {
+ 	/* This can only be an atomic load.  */
+ 	gcc_assert (call_is_atomic_load (ref));
+ 
+ 	/* An atomic load is an INDIRECT_REF of its first argument.  */
+ 	tree t = CALL_EXPR_ARG (ref, 0);
+ 	if (TREE_CODE (t) == NOP_EXPR)
+ 	  t = TREE_OPERAND (t, 0);
+ 	if (TREE_CODE (t) == ADDR_EXPR)
+ 	  t = build1 (ADDR_EXPR, TREE_TYPE (t),
+ 		      gnat_rewrite_reference (TREE_OPERAND (t, 0), func, data,
+ 					      init));
+ 	else
+ 	  t = func (t, data);
+ 	t = fold_convert (TREE_TYPE (CALL_EXPR_ARG (ref, 0)), t);
+ 
+ 	result = build_call_expr (TREE_OPERAND (CALL_EXPR_FN (ref), 0), 2,
+ 				  t, CALL_EXPR_ARG (ref, 1));
+       }
+       break;
+ 
+     case ERROR_MARK:
+     case NULL_EXPR:
+       return ref;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   /* TREE_READONLY and TREE_THIS_VOLATILE set on the initial expression may
+      not be sustained across some paths, such as the one for INDIRECT_REF.
+ 
+      Special care should be taken regarding TREE_SIDE_EFFECTS, because some
+      paths introduce side-effects where there was none initially (e.g. if a
+      SAVE_EXPR is built) and we also want to keep track of that.  */
+   TREE_READONLY (result) = TREE_READONLY (ref);
+   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
+ 
+   if (TREE_SIDE_EFFECTS (ref))
+     TREE_SIDE_EFFECTS (result) = 1;
+ 
+   if (code == INDIRECT_REF
+       || code == UNCONSTRAINED_ARRAY_REF
+       || code == ARRAY_REF
+       || code == ARRAY_RANGE_REF)
+     TREE_THIS_NOTRAP (result) = TREE_THIS_NOTRAP (ref);
+ 
+   return result;
+ }
+ 
+ /* This is equivalent to get_inner_reference in expr.cc but it returns the
+    ultimate containing object only if the reference (lvalue) is constant,
+    i.e. if it doesn't depend on the context in which it is evaluated.  */
+ 
+ tree
+ get_inner_constant_reference (tree exp)
+ {
+   while (true)
+     {
+       switch (TREE_CODE (exp))
+ 	{
+ 	case BIT_FIELD_REF:
+ 	  break;
+ 
+ 	case COMPONENT_REF:
+ 	  if (!TREE_CONSTANT (DECL_FIELD_OFFSET (TREE_OPERAND (exp, 1))))
+ 	    return NULL_TREE;
+ 	  break;
+ 
+ 	case ARRAY_REF:
+ 	case ARRAY_RANGE_REF:
+ 	  {
+ 	    if (TREE_OPERAND (exp, 2))
+ 	      return NULL_TREE;
+ 
+ 	    tree array_type = TREE_TYPE (TREE_OPERAND (exp, 0));
+ 	    if (!TREE_CONSTANT (TREE_OPERAND (exp, 1))
+ 	        || !TREE_CONSTANT (TYPE_MIN_VALUE (TYPE_DOMAIN (array_type)))
+ 	        || !TREE_CONSTANT (TYPE_SIZE_UNIT (TREE_TYPE (array_type))))
+ 	      return NULL_TREE;
+ 	  }
+ 	  break;
+ 
+ 	case REALPART_EXPR:
+ 	case IMAGPART_EXPR:
+ 	case VIEW_CONVERT_EXPR:
+ 	  break;
+ 
+ 	default:
+ 	  goto done;
+ 	}
+ 
+       exp = TREE_OPERAND (exp, 0);
+     }
+ 
+ done:
+   return exp;
+ }
+ 
+ /* Return true if EXPR is the addition or the subtraction of a constant and,
+    if so, set *ADD to the addend, *CST to the constant and *MINUS_P to true
+    if this is a subtraction.  */
+ 
+ bool
+ is_simple_additive_expression (tree expr, tree *add, tree *cst, bool *minus_p)
+ {
+   /* Skip overflow checks.  */
+   if (TREE_CODE (expr) == COND_EXPR
+       && TREE_CODE (COND_EXPR_THEN (expr)) == COMPOUND_EXPR
+       && TREE_CODE (TREE_OPERAND (COND_EXPR_THEN (expr), 0)) == CALL_EXPR
+       && get_callee_fndecl (TREE_OPERAND (COND_EXPR_THEN (expr), 0))
+          == gnat_raise_decls[CE_Overflow_Check_Failed])
+     expr = COND_EXPR_ELSE (expr);
+ 
+   if (TREE_CODE (expr) == PLUS_EXPR)
+     {
+       if (TREE_CONSTANT (TREE_OPERAND (expr, 0)))
+ 	{
+ 	  *add = TREE_OPERAND (expr, 1);
+ 	  *cst = TREE_OPERAND (expr, 0);
+ 	  *minus_p = false;
+ 	  return true;
+ 	}
+       else if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
+ 	{
+ 	  *add = TREE_OPERAND (expr, 0);
+ 	  *cst = TREE_OPERAND (expr, 1);
+ 	  *minus_p = false;
+ 	  return true;
+ 	}
+     }
+   else if (TREE_CODE (expr) == MINUS_EXPR)
+     {
+       if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
+ 	{
+ 	  *add = TREE_OPERAND (expr, 0);
+ 	  *cst = TREE_OPERAND (expr, 1);
+ 	  *minus_p = true;
+ 	  return true;
+ 	}
+     }
+ 
+   return false;
+ }
+ 
+ /* If EXPR is an expression that is invariant in the current function, in the
+    sense that it can be evaluated anywhere in the function and any number of
+    times, return EXPR or an equivalent expression.  Otherwise return NULL.  */
+ 
+ tree
+ gnat_invariant_expr (tree expr)
+ {
+   tree type = TREE_TYPE (expr);
+   tree add, cst;
+   bool minus_p;
+ 
+   expr = remove_conversions (expr, false);
+ 
+   /* Look through temporaries created to capture values.  */
+   while ((TREE_CODE (expr) == CONST_DECL
+ 	  || (TREE_CODE (expr) == VAR_DECL && TREE_READONLY (expr)))
+ 	 && decl_function_context (expr) == current_function_decl
+ 	 && DECL_INITIAL (expr))
+     {
+       expr = DECL_INITIAL (expr);
+       /* Look into CONSTRUCTORs built to initialize padded types.  */
+       expr = maybe_padded_object (expr);
+       expr = remove_conversions (expr, false);
+     }
+ 
+   /* We are only interested in scalar types at the moment and, even if we may
+      have gone through padding types in the above loop, we must be back to a
+      scalar value at this point.  */
+   if (AGGREGATE_TYPE_P (TREE_TYPE (expr)))
+     return NULL_TREE;
+ 
+   if (TREE_CONSTANT (expr))
+     return fold_convert (type, expr);
+ 
+   /* Deal with aligning patterns.  */
+   if (TREE_CODE (expr) == BIT_AND_EXPR
+       && TREE_CONSTANT (TREE_OPERAND (expr, 1)))
+     {
+       tree op0 = gnat_invariant_expr (TREE_OPERAND (expr, 0));
+       if (op0)
+ 	return fold_build2 (BIT_AND_EXPR, type, op0, TREE_OPERAND (expr, 1));
+       else
+ 	return NULL_TREE;
+     }
+ 
+   /* Deal with addition or subtraction of constants.  */
+   if (is_simple_additive_expression (expr, &add, &cst, &minus_p))
+     {
+       add = gnat_invariant_expr (add);
+       if (add)
+ 	return
+ 	  fold_build2 (minus_p ? MINUS_EXPR : PLUS_EXPR, type,
+ 		       fold_convert (type, add), fold_convert (type, cst));
+       else
+ 	return NULL_TREE;
+     }
+ 
+   bool invariant_p = false;
+   tree t = expr;
+ 
+   while (true)
+     {
+       switch (TREE_CODE (t))
+ 	{
+ 	case COMPONENT_REF:
+ 	  invariant_p |= DECL_INVARIANT_P (TREE_OPERAND (t, 1));
+ 	  break;
+ 
+ 	case ARRAY_REF:
+ 	case ARRAY_RANGE_REF:
+ 	  if (!TREE_CONSTANT (TREE_OPERAND (t, 1)) || TREE_OPERAND (t, 2))
+ 	    return NULL_TREE;
+ 	  break;
+ 
+ 	case BIT_FIELD_REF:
+ 	case REALPART_EXPR:
+ 	case IMAGPART_EXPR:
+ 	case VIEW_CONVERT_EXPR:
+ 	CASE_CONVERT:
+ 	  break;
+ 
+ 	case INDIRECT_REF:
+ 	  if ((!invariant_p && !TREE_READONLY (t)) || TREE_SIDE_EFFECTS (t))
+ 	    return NULL_TREE;
+ 	  invariant_p = false;
+ 	  break;
+ 
+ 	default:
+ 	  goto object;
+ 	}
+ 
+       t = TREE_OPERAND (t, 0);
+     }
+ 
+ object:
+   if (TREE_SIDE_EFFECTS (t))
+     return NULL_TREE;
+ 
+   if (TREE_CODE (t) == CONST_DECL
+       && (DECL_EXTERNAL (t)
+ 	  || decl_function_context (t) != current_function_decl))
+     return fold_convert (type, expr);
+ 
+   if (!invariant_p && !TREE_READONLY (t))
+     return NULL_TREE;
+ 
+   if (TREE_CODE (t) == PARM_DECL)
+     return fold_convert (type, expr);
+ 
+   if (TREE_CODE (t) == VAR_DECL
+       && (DECL_EXTERNAL (t)
+ 	  || decl_function_context (t) != current_function_decl))
+     return fold_convert (type, expr);
+ 
+   return NULL_TREE;
+ }
diff -Nrcpad gcc-11.3.0/gcc/ada/gen_il-fields.ads gcc-12.1.0/gcc/ada/gen_il-fields.ads
*** gcc-11.3.0/gcc/ada/gen_il-fields.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gen_il-fields.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,946 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                         G E N _ I L . F I E L D S                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2020-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package Gen_IL.Fields is
+ 
+    --  The following is "optional field enumeration" -- i.e. it is Field_Enum
+    --  (declared below) plus the special null value No_Field. See the spec of
+    --  Gen_IL.Gen for how to modify this. (Of course, in Ada we have to define
+    --  this backwards from the above conceptual description.)
+ 
+    --  Note that there are various subranges of this type declared below,
+    --  which might need to be kept in sync when modifying this.
+ 
+    --  Be sure to put new fields in the appropriate subrange (Field_Enum,
+    --  Node_Field, Entity_Field -- search for comments below).
+ 
+    type Opt_Field_Enum is
+      (No_Field,
+ 
+       --  Start of node fields:
+ 
+       Nkind,
+       Sloc,
+       In_List,
+       Rewrite_Ins,
+       Comes_From_Source,
+       Analyzed,
+       Error_Posted,
+       Small_Paren_Count,
+       Check_Actuals,
+       Has_Aspects,
+       Is_Ignored_Ghost_Node,
+       Link,
+ 
+       Abort_Present,
+       Abortable_Part,
+       Abstract_Present,
+       Accept_Handler_Records,
+       Accept_Statement,
+       Access_Definition,
+       Access_To_Subprogram_Definition,
+       Access_Types_To_Process,
+       Actions,
+       Activation_Chain_Entity,
+       Acts_As_Spec,
+       Actual_Designated_Subtype,
+       Address_Warning_Posted,
+       Aggregate_Bounds,
+       Aliased_Present,
+       Alloc_For_BIP_Return,
+       All_Others,
+       All_Present,
+       Alternatives,
+       Ancestor_Part,
+       Atomic_Sync_Required,
+       Array_Aggregate,
+       Aspect_On_Partial_View,
+       Aspect_Rep_Item,
+       Assignment_OK,
+       Attribute_Name,
+       At_End_Proc,
+       Aux_Decls_Node,
+       Backwards_OK,
+       Bad_Is_Detected,
+       Binding_Chars,
+       Body_Required,
+       Body_To_Inline,
+       Box_Present,
+       By_Ref,
+       Char_Literal_Value,
+       Chars,
+       Check_Address_Alignment,
+       Choice_Parameter,
+       Choices,
+       Class_Present,
+       Classifications,
+       Cleanup_Actions,
+       Comes_From_Extended_Return_Statement,
+       Compile_Time_Known_Aggregate,
+       Component_Associations,
+       Component_Clauses,
+       Component_Definition,
+       Component_Items,
+       Component_List,
+       Component_Name,
+       Componentwise_Assignment,
+       Condition,
+       Condition_Actions,
+       Config_Pragmas,
+       Constant_Present,
+       Constraint,
+       Constraints,
+       Context_Installed,
+       Context_Items,
+       Context_Pending,
+       Contract_Test_Cases,
+       Controlling_Argument,
+       Conversion_OK,
+       Convert_To_Return_False,
+       Corresponding_Aspect,
+       Corresponding_Body,
+       Corresponding_Entry_Body,
+       Corresponding_Formal_Spec,
+       Corresponding_Generic_Association,
+       Corresponding_Integer_Value,
+       Corresponding_Spec,
+       Corresponding_Spec_Of_Stub,
+       Corresponding_Stub,
+       Dcheck_Function,
+       Declarations,
+       Default_Expression,
+       Default_Storage_Pool,
+       Default_Name,
+       Default_Subtype_Mark,
+       Defining_Identifier,
+       Defining_Unit_Name,
+       Delay_Alternative,
+       Delay_Statement,
+       Delta_Expression,
+       Digits_Expression,
+       Discr_Check_Funcs_Built,
+       Discrete_Choices,
+       Discrete_Range,
+       Discrete_Subtype_Definition,
+       Discrete_Subtype_Definitions,
+       Discriminant_Specifications,
+       Discriminant_Type,
+       Do_Discriminant_Check,
+       Do_Division_Check,
+       Do_Length_Check,
+       Do_Overflow_Check,
+       Do_Range_Check,
+       Do_Storage_Check,
+       Elaborate_All_Desirable,
+       Elaborate_All_Present,
+       Elaborate_Desirable,
+       Elaborate_Present,
+       Else_Actions,
+       Else_Statements,
+       Elsif_Parts,
+       Enclosing_Variant,
+       End_Label,
+       End_Span,
+       Entity_Or_Associated_Node,
+       Entry_Body_Formal_Part,
+       Entry_Call_Alternative,
+       Entry_Call_Statement,
+       Entry_Direct_Name,
+       Entry_Index,
+       Entry_Index_Specification,
+       Etype,
+       Exception_Choices,
+       Exception_Handlers,
+       Exception_Junk,
+       Exception_Label,
+       Expansion_Delayed,
+       Explicit_Actual_Parameter,
+       Explicit_Generic_Actual_Parameter,
+       Expression,
+       Expression_Copy,
+       Expressions,
+       First_Bit,
+       First_Inlined_Subprogram,
+       First_Name,
+       First_Named_Actual,
+       First_Real_Statement,
+       First_Subtype_Link,
+       Float_Truncate,
+       Formal_Type_Definition,
+       Forwards_OK,
+       From_Aspect_Specification,
+       From_At_End,
+       From_At_Mod,
+       From_Conditional_Expression,
+       From_Default,
+       Generalized_Indexing,
+       Generic_Associations,
+       Generic_Formal_Declarations,
+       Generic_Parent,
+       Generic_Parent_Type,
+       Handled_Statement_Sequence,
+       Handler_List_Entry,
+       Has_Created_Identifier,
+       Has_Dereference_Action,
+       Has_Dynamic_Length_Check,
+       Has_Init_Expression,
+       Has_Local_Raise,
+       Has_No_Elaboration_Code,
+       Has_Pragma_Suppress_All,
+       Has_Private_View,
+       Has_Relative_Deadline_Pragma,
+       Has_Self_Reference,
+       Has_SP_Choice,
+       Has_Storage_Size_Pragma,
+       Has_Target_Names,
+       Has_Wide_Character,
+       Has_Wide_Wide_Character,
+       Header_Size_Added,
+       Hidden_By_Use_Clause,
+       High_Bound,
+       Identifier,
+       Interface_List,
+       Interface_Present,
+       Implicit_With,
+       Import_Interface_Present,
+       In_Present,
+       Includes_Infinities,
+       Incomplete_View,
+       Inherited_Discriminant,
+       Instance_Spec,
+       Intval,
+       Is_Abort_Block,
+       Is_Accessibility_Actual,
+       Is_Analyzed_Pragma,
+       Is_Asynchronous_Call_Block,
+       Is_Boolean_Aspect,
+       Is_Checked,
+       Is_Checked_Ghost_Pragma,
+       Is_Component_Left_Opnd,
+       Is_Component_Right_Opnd,
+       Is_Controlling_Actual,
+       Is_Declaration_Level_Node,
+       Is_Delayed_Aspect,
+       Is_Disabled,
+       Is_Dispatching_Call,
+       Is_Dynamic_Coextension,
+       Is_Effective_Use_Clause,
+       Is_Elaboration_Checks_OK_Node,
+       Is_Elaboration_Code,
+       Is_Elaboration_Warnings_OK_Node,
+       Is_Elsif,
+       Is_Entry_Barrier_Function,
+       Is_Expanded_Build_In_Place_Call,
+       Is_Expanded_Contract,
+       Is_Finalization_Wrapper,
+       Is_Folded_In_Parser,
+       Is_Generic_Contract_Pragma,
+       Is_Homogeneous_Aggregate,
+       Is_Parenthesis_Aggregate,
+       Is_Enum_Array_Aggregate,
+       Is_Ignored,
+       Is_Ignored_Ghost_Pragma,
+       Is_In_Discriminant_Check,
+       Is_Inherited_Pragma,
+       Is_Initialization_Block,
+       Is_Known_Guaranteed_ABE,
+       Is_Machine_Number,
+       Is_Null_Loop,
+       Is_Overloaded,
+       Is_Power_Of_2_For_Shift,
+       Is_Preelaborable_Call,
+       Is_Prefixed_Call,
+       Is_Protected_Subprogram_Body,
+       Is_Qualified_Universal_Literal,
+       Is_Read,
+       Is_Source_Call,
+       Is_SPARK_Mode_On_Node,
+       Is_Static_Coextension,
+       Is_Static_Expression,
+       Is_Subprogram_Descriptor,
+       Is_Task_Allocation_Block,
+       Is_Task_Body_Procedure,
+       Is_Task_Master,
+       Is_Write,
+       Iterator_Filter,
+       Iteration_Scheme,
+       Iterator_Specification,
+       Itype,
+       Key_Expression,
+       Kill_Range_Check,
+       Last_Bit,
+       Last_Name,
+       Library_Unit,
+       Label_Construct,
+       Left_Opnd,
+       Limited_View_Installed,
+       Limited_Present,
+       Literals,
+       Local_Raise_Not_OK,
+       Local_Raise_Statements,
+       Loop_Actions,
+       Loop_Parameter_Specification,
+       Low_Bound,
+       Mod_Clause,
+       More_Ids,
+       Multidefined_Bindings,
+       Must_Be_Byte_Aligned,
+       Must_Not_Freeze,
+       Must_Not_Override,
+       Must_Override,
+       Name,
+       Names,
+       Next_Entity,
+       Next_Exit_Statement,
+       Next_Implicit_With,
+       Next_Named_Actual,
+       Next_Pragma,
+       Next_Rep_Item,
+       Next_Use_Clause,
+       No_Ctrl_Actions,
+       No_Elaboration_Check,
+       No_Entities_Ref_In_Spec,
+       No_Initialization,
+       No_Minimize_Eliminate,
+       No_Side_Effect_Removal,
+       No_Truncation,
+       Null_Excluding_Subtype,
+       Null_Exclusion_Present,
+       Null_Exclusion_In_Return_Present,
+       Null_Present,
+       Null_Record_Present,
+       Null_Statement,
+       Object_Definition,
+       Of_Present,
+       Original_Discriminant,
+       Original_Entity,
+       Others_Discrete_Choices,
+       Out_Present,
+       Parameter_Associations,
+       Parameter_Specifications,
+       Parameter_Type,
+       Parent_Spec,
+       Parent_With,
+       Position,
+       Pragma_Argument_Associations,
+       Pragma_Identifier,
+       Pragmas_After,
+       Pragmas_Before,
+       Pre_Post_Conditions,
+       Prefix,
+       Premature_Use,
+       Present_Expr,
+       Prev_Ids,
+       Prev_Use_Clause,
+       Print_In_Hex,
+       Private_Declarations,
+       Private_Present,
+       Procedure_To_Call,
+       Proper_Body,
+       Protected_Definition,
+       Protected_Present,
+       Raises_Constraint_Error,
+       Range_Constraint,
+       Range_Expression,
+       Real_Range_Specification,
+       Realval,
+       Reason,
+       Record_Extension_Part,
+       Redundant_Use,
+       Renaming_Exception,
+       Result_Definition,
+       Return_Object_Declarations,
+       Return_Statement_Entity,
+       Reverse_Present,
+       Right_Opnd,
+       Rounded_Result,
+       Save_Invocation_Graph_Of_Body,
+       SCIL_Controlling_Tag,
+       SCIL_Entity,
+       SCIL_Tag_Value,
+       SCIL_Target_Prim,
+       Scope,
+       Select_Alternatives,
+       Selector_Name,
+       Selector_Names,
+       Shift_Count_OK,
+       Source_Type,
+       Specification,
+       Split_PPC,
+       Statements,
+       Storage_Pool,
+       Subpool_Handle_Name,
+       Strval,
+       Subtype_Indication,
+       Subtype_Mark,
+       Subtype_Marks,
+       Suppress_Assignment_Checks,
+       Suppress_Loop_Warnings,
+       Synchronized_Present,
+       Tagged_Present,
+       Target,
+       Target_Type,
+       Task_Definition,
+       Task_Present,
+       Then_Actions,
+       Then_Statements,
+       Triggering_Alternative,
+       Triggering_Statement,
+       TSS_Elist,
+       Type_Definition,
+       Uneval_Old_Accept,
+       Uneval_Old_Warn,
+       Unit,
+       Unknown_Discriminants_Present,
+       Unreferenced_In_Spec,
+       Variant_Part,
+       Variants,
+       Visible_Declarations,
+       Uninitialized_Variable,
+       Used_Operations,
+       Was_Attribute_Reference,
+       Was_Default_Init_Box_Association,
+       Was_Expression_Function,
+       Was_Originally_Stub,
+ 
+       --  End of node fields.
+ 
+       Between_Node_And_Entity_Fields,
+ 
+       --  Start of entity fields:
+ 
+       Ekind,
+       Basic_Convention,
+       Abstract_States,
+       Accept_Address,
+       Access_Disp_Table,
+       Access_Disp_Table_Elab_Flag,
+       Access_Subprogram_Wrapper,
+       Activation_Record_Component,
+       Actual_Subtype,
+       Address_Taken,
+       Alignment,
+       Anonymous_Designated_Type,
+       Anonymous_Masters,
+       Anonymous_Object,
+       Associated_Entity,
+       Associated_Formal_Package,
+       Associated_Node_For_Itype,
+       Associated_Storage_Pool,
+       Barrier_Function,
+       BIP_Initialization_Call,
+       Block_Node,
+       Body_Entity,
+       Body_Needed_For_Inlining,
+       Body_Needed_For_SAL,
+       Body_References,
+       C_Pass_By_Copy,
+       Can_Never_Be_Null,
+       Can_Use_Internal_Rep,
+       Checks_May_Be_Suppressed,
+       Class_Postconditions,
+       Class_Preconditions,
+       Class_Preconditions_Subprogram,
+       Class_Wide_Type,
+       Cloned_Subtype,
+       Component_Alignment,
+       Component_Bit_Offset,
+       Component_Clause,
+       Component_Size,
+       Component_Type,
+       Contract,
+       Contract_Wrapper,
+       Corresponding_Concurrent_Type,
+       Corresponding_Discriminant,
+       Corresponding_Equality,
+       Corresponding_Function,
+       Corresponding_Procedure,
+       Corresponding_Record_Component,
+       Corresponding_Record_Type,
+       Corresponding_Remote_Type,
+       CR_Discriminant,
+       Current_Use_Clause,
+       Current_Value,
+       Debug_Info_Off,
+       Debug_Renaming_Link,
+       Default_Aspect_Component_Value,
+       Default_Aspect_Value,
+       Default_Expr_Function,
+       Default_Expressions_Processed,
+       Default_Value,
+       Delay_Cleanups,
+       Delay_Subprogram_Descriptors,
+       Delta_Value,
+       Dependent_Instances,
+       Depends_On_Private,
+       Derived_Type_Link,
+       Digits_Value,
+       Predicated_Parent,
+       Predicates_Ignored,
+       Direct_Primitive_Operations,
+       Directly_Designated_Type,
+       Disable_Controlled,
+       Discard_Names,
+       Discriminal,
+       Discriminal_Link,
+       Discriminant_Checking_Func,
+       Discriminant_Constraint,
+       Discriminant_Default_Value,
+       Discriminant_Number,
+       Dispatch_Table_Wrappers,
+       Dynamic_Call_Helper,
+       DT_Entry_Count,
+       DT_Offset_To_Top_Func,
+       DT_Position,
+       DTC_Entity,
+       Elaborate_Body_Desirable,
+       Elaboration_Entity,
+       Elaboration_Entity_Required,
+       Encapsulating_State,
+       Enclosing_Scope,
+       Entry_Accepted,
+       Entry_Bodies_Array,
+       Entry_Cancel_Parameter,
+       Entry_Component,
+       Entry_Formal,
+       Entry_Index_Constant,
+       Entry_Max_Queue_Lengths_Array,
+       Entry_Parameters_Type,
+       Enum_Pos_To_Rep,
+       Enumeration_Pos,
+       Enumeration_Rep,
+       Enumeration_Rep_Expr,
+       Equivalent_Type,
+       Esize,
+       Extra_Accessibility,
+       Extra_Accessibility_Of_Result,
+       Extra_Constrained,
+       Extra_Formal,
+       Extra_Formals,
+       Finalization_Master,
+       Finalize_Storage_Only,
+       Finalizer,
+       First_Entity,
+       First_Exit_Statement,
+       First_Index,
+       First_Literal,
+       First_Private_Entity,
+       First_Rep_Item,
+       Freeze_Node,
+       From_Limited_With,
+       Full_View,
+       Generic_Homonym,
+       Generic_Renamings,
+       Handler_Records,
+       Has_Aliased_Components,
+       Has_Alignment_Clause,
+       Has_All_Calls_Remote,
+       Has_Atomic_Components,
+       Has_Biased_Representation,
+       Has_Completion,
+       Has_Completion_In_Body,
+       Has_Complex_Representation,
+       Has_Component_Size_Clause,
+       Has_Constrained_Partial_View,
+       Has_Contiguous_Rep,
+       Has_Controlled_Component,
+       Has_Controlling_Result,
+       Has_Convention_Pragma,
+       Has_Default_Aspect,
+       Has_Delayed_Aspects,
+       Has_Delayed_Freeze,
+       Has_Delayed_Rep_Aspects,
+       Has_Discriminants,
+       Has_Dispatch_Table,
+       Has_Dynamic_Predicate_Aspect,
+       Has_Enumeration_Rep_Clause,
+       Has_Exit,
+       Has_Expanded_Contract,
+       Has_Forward_Instantiation,
+       Has_Fully_Qualified_Name,
+       Has_Gigi_Rep_Item,
+       Has_Homonym,
+       Has_Implicit_Dereference,
+       Has_Independent_Components,
+       Has_Inheritable_Invariants,
+       Has_Inherited_DIC,
+       Has_Inherited_Invariants,
+       Has_Initial_Value,
+       Has_Loop_Entry_Attributes,
+       Has_Machine_Radix_Clause,
+       Has_Master_Entity,
+       Has_Missing_Return,
+       Has_Nested_Block_With_Handler,
+       Has_Nested_Subprogram,
+       Has_Non_Standard_Rep,
+       Has_Object_Size_Clause,
+       Has_Out_Or_In_Out_Parameter,
+       Has_Own_DIC,
+       Has_Own_Invariants,
+       Has_Partial_Visible_Refinement,
+       Has_Per_Object_Constraint,
+       Has_Pragma_Controlled,
+       Has_Pragma_Elaborate_Body,
+       Has_Pragma_Inline,
+       Has_Pragma_Inline_Always,
+       Has_Pragma_No_Inline,
+       Has_Pragma_Ordered,
+       Has_Pragma_Pack,
+       Has_Pragma_Preelab_Init,
+       Has_Pragma_Pure,
+       Has_Pragma_Pure_Function,
+       Has_Pragma_Thread_Local_Storage,
+       Has_Pragma_Unmodified,
+       Has_Pragma_Unreferenced,
+       Has_Pragma_Unreferenced_Objects,
+       Has_Pragma_Unused,
+       Has_Predicates,
+       Has_Primitive_Operations,
+       Has_Private_Ancestor,
+       Has_Private_Declaration,
+       Has_Private_Extension,
+       Has_Protected,
+       Has_Qualified_Name,
+       Has_RACW,
+       Has_Record_Rep_Clause,
+       Has_Recursive_Call,
+       Has_Shift_Operator,
+       Has_Size_Clause,
+       Has_Small_Clause,
+       Has_Specified_Layout,
+       Has_Specified_Stream_Input,
+       Has_Specified_Stream_Output,
+       Has_Specified_Stream_Read,
+       Has_Specified_Stream_Write,
+       Has_Static_Discriminants,
+       Has_Static_Predicate,
+       Has_Static_Predicate_Aspect,
+       Has_Storage_Size_Clause,
+       Has_Stream_Size_Clause,
+       Has_Task,
+       Has_Timing_Event,
+       Has_Thunks,
+       Has_Unchecked_Union,
+       Has_Unknown_Discriminants,
+       Has_Visible_Refinement,
+       Has_Volatile_Components,
+       Has_Xref_Entry,
+       Has_Yield_Aspect,
+       Hiding_Loop_Variable,
+       Hidden_In_Formal_Instance,
+       Homonym,
+       Ignored_Class_Postconditions,
+       Ignored_Class_Preconditions,
+       Ignore_SPARK_Mode_Pragmas,
+       Import_Pragma,
+       Incomplete_Actuals,
+       Indirect_Call_Wrapper,
+       In_Package_Body,
+       In_Private_Part,
+       In_Use,
+       Initialization_Statements,
+       Inner_Instances,
+       Interface_Alias,
+       Interface_Name,
+       Interfaces,
+       Is_Abstract_Subprogram,
+       Is_Abstract_Type,
+       Is_Access_Constant,
+       Is_Activation_Record,
+       Is_Actual_Subtype,
+       Is_Ada_2005_Only,
+       Is_Ada_2012_Only,
+       Is_Ada_2022_Only,
+       Is_Aliased,
+       Is_Asynchronous,
+       Is_Atomic,
+       Is_Bit_Packed_Array,
+       Is_Called,
+       Is_Character_Type,
+       Is_Checked_Ghost_Entity,
+       Is_Child_Unit,
+       Is_Class_Wide_Equivalent_Type,
+       Is_Class_Wide_Wrapper,
+       Is_Compilation_Unit,
+       Is_Completely_Hidden,
+       Is_Concurrent_Record_Type,
+       Is_Constr_Subt_For_U_Nominal,
+       Is_Constr_Subt_For_UN_Aliased,
+       Is_Constrained,
+       Is_Constructor,
+       Is_Controlled_Active,
+       Is_Controlling_Formal,
+       Is_CPP_Class,
+       Is_CUDA_Kernel,
+       Is_Descendant_Of_Address,
+       Is_DIC_Procedure,
+       Is_Discrim_SO_Function,
+       Is_Discriminant_Check_Function,
+       Is_Dispatch_Table_Entity,
+       Is_Dispatch_Table_Wrapper,
+       Is_Dispatching_Operation,
+       Is_Elaboration_Checks_OK_Id,
+       Is_Elaboration_Warnings_OK_Id,
+       Is_Eliminated,
+       Is_Entry_Formal,
+       Is_Entry_Wrapper,
+       Is_Exception_Handler,
+       Is_Exported,
+       Is_Finalized_Transient,
+       Is_First_Subtype,
+       Is_Fixed_Lower_Bound_Array_Subtype,
+       Is_Fixed_Lower_Bound_Index_Subtype,
+       Is_Formal_Subprogram,
+       Is_Frozen,
+       Is_Generic_Actual_Subprogram,
+       Is_Generic_Actual_Type,
+       Is_Generic_Instance,
+       Is_Generic_Type,
+       Is_Hidden,
+       Is_Hidden_Non_Overridden_Subpgm,
+       Is_Hidden_Open_Scope,
+       Is_Ignored_Ghost_Entity,
+       Is_Ignored_Transient,
+       Is_Immediately_Visible,
+       Is_Implementation_Defined,
+       Is_Imported,
+       Is_Independent,
+       Is_Initial_Condition_Procedure,
+       Is_Inlined,
+       Is_Inlined_Always,
+       Is_Instantiated,
+       Is_Interface,
+       Is_Internal,
+       Is_Interrupt_Handler,
+       Is_Intrinsic_Subprogram,
+       Is_Invariant_Procedure,
+       Is_Itype,
+       Is_Known_Non_Null,
+       Is_Known_Null,
+       Is_Known_Valid,
+       Is_Limited_Composite,
+       Is_Limited_Interface,
+       Is_Limited_Record,
+       Is_Local_Anonymous_Access,
+       Is_Loop_Parameter,
+       Is_Machine_Code_Subprogram,
+       Is_Non_Static_Subtype,
+       Is_Null_Init_Proc,
+       Is_Obsolescent,
+       Is_Only_Out_Parameter,
+       Is_Package_Body_Entity,
+       Is_Packed,
+       Is_Packed_Array_Impl_Type,
+       Is_Param_Block_Component_Type,
+       Is_Partial_Invariant_Procedure,
+       Is_Potentially_Use_Visible,
+       Is_Predicate_Function,
+       Is_Predicate_Function_M,
+       Is_Preelaborated,
+       Is_Primitive,
+       Is_Primitive_Wrapper,
+       Is_Private_Composite,
+       Is_Private_Descendant,
+       Is_Private_Primitive,
+       Is_Public,
+       Is_Pure,
+       Is_Pure_Unit_Access_Type,
+       Is_RACW_Stub_Type,
+       Is_Raised,
+       Is_Remote_Call_Interface,
+       Is_Remote_Types,
+       Is_Renaming_Of_Object,
+       Is_Return_Object,
+       Is_Safe_To_Reevaluate,
+       Is_Shared_Passive,
+       Is_Static_Type,
+       Is_Statically_Allocated,
+       Is_Tag,
+       Is_Tagged_Type,
+       Is_Thunk,
+       Is_Trivial_Subprogram,
+       Is_True_Constant,
+       Is_Unchecked_Union,
+       Is_Underlying_Full_View,
+       Is_Underlying_Record_View,
+       Is_Unimplemented,
+       Is_Unsigned_Type,
+       Is_Uplevel_Referenced_Entity,
+       Is_Valued_Procedure,
+       Is_Visible_Formal,
+       Is_Visible_Lib_Unit,
+       Is_Volatile_Type,
+       Is_Volatile_Object,
+       Is_Volatile_Full_Access,
+       Is_Wrapper,
+       Itype_Printed,
+       Kill_Elaboration_Checks,
+       Kill_Range_Checks,
+       Known_To_Have_Preelab_Init,
+       Last_Aggregate_Assignment,
+       Last_Assignment,
+       Last_Entity,
+       Limited_View,
+       Linker_Section_Pragma,
+       Lit_Hash,
+       Lit_Indexes,
+       Lit_Strings,
+       Low_Bound_Tested,
+       LSP_Subprogram,
+       Machine_Radix_10,
+       Master_Id,
+       Materialize_Entity,
+       May_Inherit_Delayed_Rep_Aspects,
+       Mechanism,
+       Minimum_Accessibility,
+       Modulus,
+       Must_Be_On_Byte_Boundary,
+       Must_Have_Preelab_Init,
+       Needs_Activation_Record,
+       Needs_Debug_Info,
+       Needs_No_Actuals,
+       Never_Set_In_Source,
+       Next_Inlined_Subprogram,
+       No_Dynamic_Predicate_On_Actual,
+       No_Pool_Assigned,
+       No_Predicate_On_Actual,
+       No_Reordering,
+       No_Return,
+       No_Strict_Aliasing,
+       No_Tagged_Streams_Pragma,
+       Non_Binary_Modulus,
+       Non_Limited_View,
+       Nonzero_Is_True,
+       Normalized_First_Bit,
+       Normalized_Position,
+       OK_To_Rename,
+       Optimize_Alignment_Space,
+       Optimize_Alignment_Time,
+       Original_Access_Type,
+       Original_Array_Type,
+       Original_Protected_Subprogram,
+       Original_Record_Component,
+       Overlays_Constant,
+       Overridden_Operation,
+       Package_Instantiation,
+       Packed_Array_Impl_Type,
+       Parent_Subtype,
+       Part_Of_Constituents,
+       Part_Of_References,
+       Partial_View_Has_Unknown_Discr,
+       Pending_Access_Types,
+       Postconditions_Proc,
+       Prev_Entity,
+       Prival,
+       Prival_Link,
+       Private_Dependents,
+       Protected_Body_Subprogram,
+       Protected_Formal,
+       Protected_Subprogram,
+       Protection_Object,
+       Reachable,
+       Receiving_Entry,
+       Referenced,
+       Referenced_As_LHS,
+       Referenced_As_Out_Parameter,
+       Refinement_Constituents,
+       Register_Exception_Call,
+       Related_Array_Object,
+       Related_Expression,
+       Related_Instance,
+       Related_Type,
+       Relative_Deadline_Variable,
+       Renamed_In_Spec,
+       Renamed_Or_Alias, -- Shared among Alias, Renamed_Entity, Renamed_Object
+       Requires_Overriding,
+       Return_Applies_To,
+       Return_Present,
+       Return_Statement,
+       Returns_By_Ref,
+       Reverse_Bit_Order,
+       Reverse_Storage_Order,
+       Rewritten_For_C,
+       RM_Size,
+       Scalar_Range,
+       Scale_Value,
+       Scope_Depth_Value,
+       Sec_Stack_Needed_For_Return,
+       Shared_Var_Procs_Instance,
+       Size_Check_Code,
+       Size_Depends_On_Discriminant,
+       Size_Known_At_Compile_Time,
+       Small_Value,
+       SPARK_Aux_Pragma,
+       SPARK_Aux_Pragma_Inherited,
+       SPARK_Pragma,
+       SPARK_Pragma_Inherited,
+       Spec_Entity,
+       SSO_Set_High_By_Default,
+       SSO_Set_Low_By_Default,
+       Static_Call_Helper,
+       Static_Discrete_Predicate,
+       Static_Elaboration_Desired,
+       Static_Initialization,
+       Static_Real_Or_String_Predicate,
+       Status_Flag_Or_Transient_Decl,
+       Storage_Size_Variable,
+       Stored_Constraint,
+       Stores_Attribute_Old_Prefix,
+       Strict_Alignment,
+       String_Literal_Length,
+       String_Literal_Low_Bound,
+       Subprograms_For_Type,
+       Subps_Index,
+       Suppress_Elaboration_Warnings,
+       Suppress_Initialization,
+       Suppress_Style_Checks,
+       Suppress_Value_Tracking_On_Call,
+       Task_Body_Procedure,
+       Thunk_Entity,
+       Treat_As_Volatile,
+       Underlying_Full_View,
+       Underlying_Record_View,
+       Universal_Aliasing,
+       Unset_Reference,
+       Used_As_Generic_Actual,
+       Uses_Lock_Free,
+       Uses_Sec_Stack,
+       Validated_Object,
+       Warnings_Off,
+       Warnings_Off_Used,
+       Warnings_Off_Used_Unmodified,
+       Warnings_Off_Used_Unreferenced,
+       Was_Hidden,
+       Wrapped_Entity
+ 
+       --  End of entity fields.
+      ); -- Opt_Field_Enum
+ 
+    subtype Field_Enum is Opt_Field_Enum
+      range Opt_Field_Enum'Succ (No_Field) .. Opt_Field_Enum'Last;
+    --  Enumeration of fields -- Opt_Field_Enum without the special null value
+    --  No_Field.
+ 
+ end Gen_IL.Fields;
diff -Nrcpad gcc-11.3.0/gcc/ada/gen_il-gen-gen_entities.adb gcc-12.1.0/gcc/ada/gen_il-gen-gen_entities.adb
*** gcc-11.3.0/gcc/ada/gen_il-gen-gen_entities.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gen_il-gen-gen_entities.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,1440 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --               G E N _ I L . G E N . G E N _ E N T I T I E S              --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2020-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ procedure Gen_IL.Gen.Gen_Entities is
+ 
+    procedure Ab -- Short for "Abstract"
+      (T : Abstract_Entity; Parent : Abstract_Type;
+       Fields : Field_Sequence := No_Fields)
+       renames Create_Abstract_Entity_Type;
+    procedure Cc -- Short for "ConCrete"
+      (T : Concrete_Entity; Parent : Abstract_Type;
+       Fields : Field_Sequence := No_Fields)
+       renames Create_Concrete_Entity_Type;
+ 
+    --  No Sy (Syntactic) fields in entities
+    function Sm -- Short for "Semantic"
+      (Field : Field_Enum; Field_Type : Type_Enum;
+       Type_Only  : Type_Only_Enum := No_Type_Only;
+       Pre, Pre_Get, Pre_Set : String := "") return Field_Desc
+       renames Create_Semantic_Field;
+ 
+    procedure Union (T : Abstract_Entity; Children : Type_Array)
+      renames Create_Entity_Union_Type;
+ 
+ begin -- Gen_IL.Gen.Gen_Entities
+    pragma Style_Checks ("M200");
+ 
+    Create_Root_Entity_Type (Entity_Kind,
+        (Sm (Ekind, Entity_Kind_Type),
+         Sm (Basic_Convention, Convention_Id),
+         Sm (Address_Taken, Flag),
+         Sm (Associated_Entity, Node_Id),
+         Sm (Can_Never_Be_Null, Flag),
+         Sm (Checks_May_Be_Suppressed, Flag),
+         Sm (Debug_Info_Off, Flag),
+         Sm (Default_Expressions_Processed, Flag),
+         Sm (Delay_Cleanups, Flag),
+         Sm (Delay_Subprogram_Descriptors, Flag),
+         Sm (Depends_On_Private, Flag),
+         Sm (Disable_Controlled, Flag, Base_Type_Only),
+         Sm (Discard_Names, Flag),
+         Sm (First_Rep_Item, Node_Id),
+         Sm (Freeze_Node, Node_Id),
+         Sm (From_Limited_With, Flag),
+         Sm (Has_Aliased_Components, Flag, Impl_Base_Type_Only),
+         Sm (Has_Alignment_Clause, Flag),
+         Sm (Has_All_Calls_Remote, Flag),
+         Sm (Has_Atomic_Components, Flag, Impl_Base_Type_Only),
+         Sm (Has_Biased_Representation, Flag),
+         Sm (Has_Completion, Flag),
+         Sm (Has_Contiguous_Rep, Flag),
+         Sm (Has_Controlled_Component, Flag, Base_Type_Only),
+         Sm (Has_Controlling_Result, Flag),
+         Sm (Has_Convention_Pragma, Flag),
+         Sm (Has_Default_Aspect, Flag, Base_Type_Only),
+         Sm (Has_Delayed_Aspects, Flag),
+         Sm (Has_Delayed_Freeze, Flag),
+         Sm (Has_Delayed_Rep_Aspects, Flag),
+         Sm (Has_Exit, Flag),
+         Sm (Has_Forward_Instantiation, Flag),
+         Sm (Has_Fully_Qualified_Name, Flag),
+         Sm (Has_Gigi_Rep_Item, Flag),
+         Sm (Has_Homonym, Flag),
+         Sm (Has_Implicit_Dereference, Flag),
+         Sm (Has_Independent_Components, Flag, Impl_Base_Type_Only),
+         Sm (Has_Master_Entity, Flag),
+         Sm (Has_Nested_Block_With_Handler, Flag),
+         Sm (Has_Non_Standard_Rep, Flag, Impl_Base_Type_Only),
+         Sm (Has_Per_Object_Constraint, Flag),
+         Sm (Has_Pragma_Elaborate_Body, Flag),
+         Sm (Has_Pragma_Inline, Flag),
+         Sm (Has_Pragma_Inline_Always, Flag),
+         Sm (Has_Pragma_No_Inline, Flag),
+         Sm (Has_Pragma_Preelab_Init, Flag),
+         Sm (Has_Pragma_Pure, Flag),
+         Sm (Has_Pragma_Pure_Function, Flag),
+         Sm (Has_Pragma_Thread_Local_Storage, Flag),
+         Sm (Has_Pragma_Unmodified, Flag),
+         Sm (Has_Pragma_Unreferenced, Flag),
+         Sm (Has_Pragma_Unused, Flag),
+         Sm (Has_Private_Ancestor, Flag),
+         Sm (Has_Private_Declaration, Flag),
+         Sm (Has_Protected, Flag, Base_Type_Only),
+         Sm (Has_Qualified_Name, Flag),
+         Sm (Has_Size_Clause, Flag),
+         Sm (Has_Stream_Size_Clause, Flag),
+         Sm (Has_Task, Flag, Base_Type_Only),
+         Sm (Has_Timing_Event, Flag, Base_Type_Only),
+         Sm (Has_Thunks, Flag),
+         Sm (Has_Unchecked_Union, Flag, Base_Type_Only),
+         Sm (Has_Volatile_Components, Flag, Impl_Base_Type_Only),
+         Sm (Has_Xref_Entry, Flag),
+         Sm (Has_Yield_Aspect, Flag),
+         Sm (Homonym, Node_Id),
+         Sm (In_Package_Body, Flag),
+         Sm (In_Private_Part, Flag),
+         Sm (In_Use, Flag),
+         Sm (Is_Ada_2005_Only, Flag),
+         Sm (Is_Ada_2012_Only, Flag),
+         Sm (Is_Ada_2022_Only, Flag),
+         Sm (Is_Aliased, Flag),
+         Sm (Is_Atomic, Flag),
+         Sm (Is_Bit_Packed_Array, Flag, Impl_Base_Type_Only),
+         Sm (Is_Character_Type, Flag),
+         Sm (Is_Checked_Ghost_Entity, Flag),
+         Sm (Is_Child_Unit, Flag),
+         Sm (Is_Class_Wide_Wrapper, Flag),
+         Sm (Is_Class_Wide_Equivalent_Type, Flag),
+         Sm (Is_Compilation_Unit, Flag),
+         Sm (Is_Concurrent_Record_Type, Flag),
+         Sm (Is_Constr_Subt_For_U_Nominal, Flag),
+         Sm (Is_Constr_Subt_For_UN_Aliased, Flag),
+         Sm (Is_Constrained, Flag),
+         Sm (Is_Constructor, Flag),
+         Sm (Is_Controlled_Active, Flag, Base_Type_Only),
+         Sm (Is_CPP_Class, Flag),
+         Sm (Is_Descendant_Of_Address, Flag),
+         Sm (Is_Discrim_SO_Function, Flag),
+         Sm (Is_Discriminant_Check_Function, Flag),
+         Sm (Is_Dispatch_Table_Entity, Flag),
+         Sm (Is_Dispatch_Table_Wrapper, Flag),
+         Sm (Is_Dispatching_Operation, Flag),
+         Sm (Is_Eliminated, Flag),
+         Sm (Is_Entry_Formal, Flag),
+         Sm (Is_Entry_Wrapper, Flag),
+         Sm (Is_Exported, Flag),
+         Sm (Is_First_Subtype, Flag),
+         Sm (Is_Formal_Subprogram, Flag),
+         Sm (Is_Frozen, Flag),
+         Sm (Is_Generic_Instance, Flag),
+         Sm (Is_Generic_Type, Flag),
+         Sm (Is_Hidden, Flag),
+         Sm (Is_Hidden_Non_Overridden_Subpgm, Flag),
+         Sm (Is_Hidden_Open_Scope, Flag),
+         Sm (Is_Ignored_Ghost_Entity, Flag),
+         Sm (Is_Immediately_Visible, Flag),
+         Sm (Is_Implementation_Defined, Flag),
+         Sm (Is_Imported, Flag),
+         Sm (Is_Independent, Flag),
+         Sm (Is_Inlined, Flag),
+         Sm (Is_Instantiated, Flag),
+         Sm (Is_Interface, Flag),
+         Sm (Is_Internal, Flag),
+         Sm (Is_Interrupt_Handler, Flag),
+         Sm (Is_Intrinsic_Subprogram, Flag),
+         Sm (Is_Itype, Flag),
+         Sm (Is_Known_Non_Null, Flag),
+         Sm (Is_Known_Null, Flag),
+         Sm (Is_Known_Valid, Flag),
+         Sm (Is_Limited_Composite, Flag),
+         Sm (Is_Limited_Interface, Flag),
+         Sm (Is_Limited_Record, Flag),
+         Sm (Is_Loop_Parameter, Flag),
+         Sm (Is_Obsolescent, Flag),
+         Sm (Is_Package_Body_Entity, Flag),
+         Sm (Is_Packed, Flag, Impl_Base_Type_Only),
+         Sm (Is_Packed_Array_Impl_Type, Flag),
+         Sm (Is_Potentially_Use_Visible, Flag),
+         Sm (Is_Preelaborated, Flag),
+         Sm (Is_Private_Descendant, Flag),
+         Sm (Is_Public, Flag),
+         Sm (Is_Pure, Flag),
+         Sm (Is_Remote_Call_Interface, Flag),
+         Sm (Is_Remote_Types, Flag),
+         Sm (Is_Renaming_Of_Object, Flag),
+         Sm (Is_Return_Object, Flag),
+         Sm (Is_Safe_To_Reevaluate, Flag),
+         Sm (Is_Shared_Passive, Flag),
+         Sm (Is_Static_Type, Flag),
+         Sm (Is_Statically_Allocated, Flag),
+         Sm (Is_Tag, Flag),
+         Sm (Is_Tagged_Type, Flag),
+         Sm (Is_Thunk, Flag),
+         Sm (Is_Trivial_Subprogram, Flag),
+         Sm (Is_True_Constant, Flag),
+         Sm (Is_Unchecked_Union, Flag, Impl_Base_Type_Only),
+         Sm (Is_Underlying_Full_View, Flag),
+         Sm (Is_Underlying_Record_View, Flag, Base_Type_Only),
+         Sm (Is_Unimplemented, Flag),
+         Sm (Is_Uplevel_Referenced_Entity, Flag),
+         Sm (Is_Visible_Formal, Flag),
+         Sm (Is_Visible_Lib_Unit, Flag),
+         Sm (Is_Volatile_Type, Flag),
+         Sm (Is_Volatile_Object, Flag),
+         Sm (Is_Volatile_Full_Access, Flag),
+         Sm (Is_Wrapper, Flag),
+         Sm (Kill_Elaboration_Checks, Flag),
+         Sm (Kill_Range_Checks, Flag),
+         Sm (Low_Bound_Tested, Flag),
+         Sm (Materialize_Entity, Flag),
+         Sm (May_Inherit_Delayed_Rep_Aspects, Flag),
+         Sm (Needs_Activation_Record, Flag),
+         Sm (Needs_Debug_Info, Flag),
+         Sm (Never_Set_In_Source, Flag),
+         Sm (No_Return, Flag),
+         Sm (Overlays_Constant, Flag),
+         Sm (Prev_Entity, Node_Id),
+         Sm (Reachable, Flag),
+         Sm (Referenced, Flag),
+         Sm (Referenced_As_LHS, Flag),
+         Sm (Referenced_As_Out_Parameter, Flag),
+         Sm (Return_Present, Flag),
+         Sm (Returns_By_Ref, Flag),
+         Sm (Sec_Stack_Needed_For_Return, Flag),
+         Sm (Size_Depends_On_Discriminant, Flag),
+         Sm (Size_Known_At_Compile_Time, Flag),
+         Sm (Stores_Attribute_Old_Prefix, Flag),
+         Sm (Strict_Alignment, Flag, Impl_Base_Type_Only),
+         Sm (Suppress_Elaboration_Warnings, Flag),
+         Sm (Suppress_Style_Checks, Flag),
+         Sm (Suppress_Value_Tracking_On_Call, Flag),
+         Sm (Treat_As_Volatile, Flag),
+         Sm (Used_As_Generic_Actual, Flag),
+         Sm (Uses_Sec_Stack, Flag),
+         Sm (Warnings_Off, Flag),
+         Sm (Warnings_Off_Used, Flag),
+         Sm (Warnings_Off_Used_Unmodified, Flag),
+         Sm (Warnings_Off_Used_Unreferenced, Flag),
+         Sm (Was_Hidden, Flag)));
+ 
+    Ab (Void_Or_Type_Kind, Entity_Kind);
+ 
+    Cc (E_Void, Void_Or_Type_Kind,
+        --  The initial Ekind value for a newly created entity. Also used as the
+        --  Ekind for Standard_Void_Type, a type entity in Standard used as a
+        --  dummy type for the return type of a procedure (the reason we create
+        --  this type is to share the circuits for performing overload
+        --  resolution on calls).
+        (Sm (Alignment, Unat),
+         Sm (Contract, Node_Id),
+         Sm (Is_Elaboration_Warnings_OK_Id, Flag),
+         Sm (Original_Record_Component, Node_Id),
+         Sm (Scope_Depth_Value, Unat),
+         Sm (SPARK_Pragma, Node_Id),
+         Sm (SPARK_Pragma_Inherited, Flag),
+         Sm (Current_Value, Node_Id), -- setter only
+         Sm (Has_Predicates, Flag), -- setter only
+         Sm (Initialization_Statements, Node_Id), -- setter only
+         Sm (Is_Param_Block_Component_Type, Flag, Base_Type_Only),
+         -- setter only
+ 
+         Sm (Package_Instantiation, Node_Id), -- setter only
+         Sm (Related_Expression, Node_Id), -- setter only
+ 
+         --  If we set the Ekind field properly before setting the following
+         --  fields, then these would not be needed in E_Void.
+         Sm (Accept_Address, Elist_Id),
+         Sm (Associated_Formal_Package, Node_Id),
+         Sm (Associated_Node_For_Itype, Node_Id),
+         Sm (Corresponding_Remote_Type, Node_Id),
+         Sm (CR_Discriminant, Node_Id),
+         Sm (Debug_Renaming_Link, Node_Id),
+         Sm (Discriminal_Link, Node_Id),
+         Sm (Discriminant_Default_Value, Node_Id),
+         Sm (Discriminant_Number, Upos),
+         Sm (Enclosing_Scope, Node_Id),
+         Sm (Entry_Bodies_Array, Node_Id,
+             Pre => "Has_Entries (N)"),
+         Sm (Entry_Cancel_Parameter, Node_Id),
+         Sm (Entry_Component, Node_Id),
+         Sm (Entry_Formal, Node_Id),
+         Sm (Entry_Parameters_Type, Node_Id),
+         Sm (Esize, Uint),
+         Sm (RM_Size, Uint),
+         Sm (Extra_Formal, Node_Id),
+         Sm (First_Entity, Node_Id),
+         Sm (Generic_Homonym, Node_Id),
+         Sm (Generic_Renamings, Elist_Id),
+         Sm (Handler_Records, List_Id),
+         Sm (Has_Static_Discriminants, Flag),
+         Sm (Inner_Instances, Elist_Id),
+         Sm (Interface_Name, Node_Id),
+         Sm (Last_Entity, Node_Id),
+         Sm (Next_Inlined_Subprogram, Node_Id),
+         Sm (Renamed_Or_Alias, Node_Id), -- See Einfo.Utils
+         Sm (Return_Applies_To, Node_Id),
+         Sm (Scalar_Range, Node_Id),
+         Sm (Scale_Value, Uint),
+         Sm (Unset_Reference, Node_Id)));
+    --  For the above "setter only" fields, the setters are called for E_Void,
+    --  but not getters; the Ekind is modified before any such getters are
+    --  called.
+ 
+    Ab (Exception_Or_Object_Kind, Entity_Kind);
+ 
+    Ab (Object_Kind, Exception_Or_Object_Kind,
+        (Sm (Current_Value, Node_Id),
+         Sm (Renamed_Or_Alias, Node_Id)));
+ 
+    Ab (Record_Field_Kind, Object_Kind,
+        (Sm (Component_Bit_Offset, Uint),
+         Sm (Component_Clause, Node_Id),
+         Sm (Corresponding_Record_Component, Node_Id),
+         Sm (Entry_Formal, Node_Id),
+         Sm (Esize, Uint),
+         Sm (Interface_Name, Node_Id),
+         Sm (Normalized_First_Bit, Uint),
+         Sm (Normalized_Position, Uint),
+         Sm (Original_Record_Component, Node_Id)));
+ 
+    Cc (E_Component, Record_Field_Kind,
+        --  Components (other than discriminants) of a record declaration,
+        --  private declarations of protected objects.
+        (Sm (Discriminant_Checking_Func, Node_Id),
+         Sm (DT_Entry_Count, Uint,
+             Pre => "Is_Tag (N)"),
+         Sm (DT_Offset_To_Top_Func, Node_Id,
+             Pre => "Is_Tag (N)"),
+         Sm (Prival, Node_Id,
+             Pre => "Is_Protected_Component (N)"),
+         Sm (Related_Type, Node_Id)));
+ 
+    Ab (Allocatable_Kind, Object_Kind,
+        (Sm (Activation_Record_Component, Node_Id),
+         Sm (Alignment, Unat),
+         Sm (Esize, Uint),
+         Sm (Interface_Name, Node_Id),
+         Sm (Is_Finalized_Transient, Flag),
+         Sm (Is_Ignored_Transient, Flag),
+         Sm (Linker_Section_Pragma, Node_Id),
+         Sm (Related_Expression, Node_Id),
+         Sm (Status_Flag_Or_Transient_Decl, Node_Id)));
+ 
+    Ab (Constant_Or_Variable_Kind, Allocatable_Kind,
+        (Sm (Actual_Subtype, Node_Id),
+         Sm (BIP_Initialization_Call, Node_Id),
+         Sm (Contract, Node_Id),
+         Sm (Discriminal_Link, Node_Id),
+         Sm (Encapsulating_State, Node_Id),
+         Sm (Extra_Accessibility, Node_Id),
+         Sm (Initialization_Statements, Node_Id),
+         Sm (Is_Elaboration_Checks_OK_Id, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Id, Flag),
+         Sm (Last_Aggregate_Assignment, Node_Id),
+         Sm (Optimize_Alignment_Space, Flag),
+         Sm (Optimize_Alignment_Time, Flag),
+         Sm (Prival_Link, Node_Id),
+         Sm (Related_Type, Node_Id),
+         Sm (Return_Statement, Node_Id),
+         Sm (Size_Check_Code, Node_Id),
+         Sm (SPARK_Pragma, Node_Id),
+         Sm (SPARK_Pragma_Inherited, Flag)));
+ 
+    Cc (E_Constant, Constant_Or_Variable_Kind,
+        --  Constants created by an object declaration with a constant keyword
+        (Sm (Full_View, Node_Id)));
+ 
+    Cc (E_Discriminant, Record_Field_Kind,
+        --  A discriminant, created by the use of a discriminant in a type
+        --  declaration.
+        (Sm (Corresponding_Discriminant, Node_Id),
+         Sm (CR_Discriminant, Node_Id),
+         Sm (Discriminal, Node_Id),
+         Sm (Discriminant_Default_Value, Node_Id),
+         Sm (Discriminant_Number, Upos),
+         Sm (Is_Completely_Hidden, Flag)));
+ 
+    Cc (E_Loop_Parameter, Allocatable_Kind);
+    --  A loop parameter created by a for loop
+ 
+    Cc (E_Variable, Constant_Or_Variable_Kind,
+        --  Variables created by an object declaration with no constant keyword
+        (Sm (Anonymous_Designated_Type, Node_Id),
+         Sm (Debug_Renaming_Link, Node_Id),
+         Sm (Extra_Constrained, Node_Id),
+         Sm (Has_Initial_Value, Flag),
+         Sm (Hiding_Loop_Variable, Node_Id),
+         Sm (Last_Assignment, Node_Id),
+         Sm (OK_To_Rename, Flag),
+         Sm (Part_Of_Constituents, Elist_Id),
+         Sm (Part_Of_References, Elist_Id),
+         Sm (Shared_Var_Procs_Instance, Node_Id),
+         Sm (Suppress_Initialization, Flag),
+         Sm (Unset_Reference, Node_Id),
+         Sm (Validated_Object, Node_Id)));
+ 
+    Ab (Formal_Kind, Object_Kind,
+        --  Formal parameters are also objects
+        (Sm (Activation_Record_Component, Node_Id),
+         Sm (Actual_Subtype, Node_Id),
+         Sm (Alignment, Unat),
+         Sm (Default_Expr_Function, Node_Id),
+         Sm (Default_Value, Node_Id),
+         Sm (Entry_Component, Node_Id),
+         Sm (Esize, Uint),
+         Sm (Extra_Accessibility, Node_Id),
+         Sm (Extra_Constrained, Node_Id),
+         Sm (Extra_Formal, Node_Id),
+         Sm (Has_Initial_Value, Flag),
+         Sm (Is_Controlling_Formal, Flag),
+         Sm (Is_Only_Out_Parameter, Flag),
+         Sm (Linker_Section_Pragma, Node_Id),
+         Sm (Mechanism, Mechanism_Type),
+         Sm (Minimum_Accessibility, Node_Id),
+         Sm (Protected_Formal, Node_Id),
+         Sm (Spec_Entity, Node_Id),
+         Sm (Unset_Reference, Node_Id)));
+ 
+    Cc (E_Out_Parameter, Formal_Kind,
+        --  An out parameter of a subprogram or entry
+        (Sm (Last_Assignment, Node_Id)));
+ 
+    Cc (E_In_Out_Parameter, Formal_Kind,
+        --  An in-out parameter of a subprogram or entry
+        (Sm (Last_Assignment, Node_Id)));
+ 
+    Cc (E_In_Parameter, Formal_Kind,
+        --  An in parameter of a subprogram or entry
+        (Sm (Discriminal_Link, Node_Id),
+         Sm (Discriminant_Default_Value, Node_Id),
+         Sm (Is_Activation_Record, Flag)));
+ 
+    Ab (Formal_Object_Kind, Object_Kind,
+        --  Generic formal objects are also objects
+        (Sm (Entry_Component, Node_Id),
+         Sm (Esize, Uint)));
+ 
+    Cc (E_Generic_In_Out_Parameter, Formal_Object_Kind,
+        --  A generic in out parameter, created by the use of a generic in out
+        --  parameter in a generic declaration.
+        (Sm (Actual_Subtype, Node_Id)));
+ 
+    Cc (E_Generic_In_Parameter, Formal_Object_Kind);
+        --  A generic in parameter, created by the use of a generic in
+        --  parameter in a generic declaration.
+ 
+    Ab (Named_Kind, Entity_Kind,
+        (Sm (Renamed_Or_Alias, Node_Id)));
+ 
+    Cc (E_Named_Integer, Named_Kind);
+    --  Named numbers created by a number declaration with an integer value
+ 
+    Cc (E_Named_Real, Named_Kind);
+    --  Named numbers created by a number declaration with a real value
+ 
+    Ab (Type_Kind, Void_Or_Type_Kind,
+        (Sm (Alignment, Unat),
+         Sm (Associated_Node_For_Itype, Node_Id),
+         Sm (Can_Use_Internal_Rep, Flag, Base_Type_Only,
+             Pre => "Ekind (Base_Type (N)) in Access_Subprogram_Kind"),
+         Sm (Class_Wide_Type, Node_Id),
+         Sm (Contract, Node_Id),
+         Sm (Current_Use_Clause, Node_Id),
+         Sm (Derived_Type_Link, Node_Id),
+         Sm (Direct_Primitive_Operations, Elist_Id),
+         Sm (Predicates_Ignored, Flag),
+         Sm (Esize, Uint),
+         Sm (Finalize_Storage_Only, Flag, Base_Type_Only),
+         Sm (Full_View, Node_Id),
+         Sm (Has_Completion_In_Body, Flag),
+         Sm (Has_Constrained_Partial_View, Flag, Base_Type_Only),
+         Sm (Has_Discriminants, Flag),
+         Sm (Has_Dispatch_Table, Flag,
+             Pre => "Is_Tagged_Type (N)"),
+         Sm (Has_Dynamic_Predicate_Aspect, Flag),
+         Sm (Has_Inheritable_Invariants, Flag, Base_Type_Only),
+         Sm (Has_Inherited_DIC, Flag, Base_Type_Only),
+         Sm (Has_Inherited_Invariants, Flag, Base_Type_Only),
+         Sm (Has_Object_Size_Clause, Flag),
+         Sm (Has_Own_DIC, Flag, Base_Type_Only),
+         Sm (Has_Own_Invariants, Flag, Base_Type_Only),
+         Sm (Has_Pragma_Unreferenced_Objects, Flag),
+         Sm (Has_Predicates, Flag),
+         Sm (Has_Primitive_Operations, Flag, Base_Type_Only),
+         Sm (Has_Private_Extension, Flag,
+             Pre => "Is_Tagged_Type (N)"),
+         Sm (Has_Specified_Layout, Flag, Impl_Base_Type_Only),
+         Sm (Has_Specified_Stream_Input, Flag),
+         Sm (Has_Specified_Stream_Output, Flag),
+         Sm (Has_Specified_Stream_Read, Flag),
+         Sm (Has_Specified_Stream_Write, Flag),
+         Sm (Has_Static_Discriminants, Flag),
+         Sm (Has_Static_Predicate, Flag),
+         Sm (Has_Static_Predicate_Aspect, Flag),
+         Sm (Has_Unknown_Discriminants, Flag),
+         Sm (Interface_Name, Node_Id),
+         Sm (Is_Abstract_Type, Flag),
+         Sm (Is_Actual_Subtype, Flag),
+         Sm (Is_Asynchronous, Flag),
+         Sm (Is_Fixed_Lower_Bound_Array_Subtype, Flag),
+         Sm (Is_Fixed_Lower_Bound_Index_Subtype, Flag),
+         Sm (Is_Generic_Actual_Type, Flag),
+         Sm (Is_Non_Static_Subtype, Flag),
+         Sm (Is_Private_Composite, Flag),
+         Sm (Is_RACW_Stub_Type, Flag),
+         Sm (Is_Unsigned_Type, Flag),
+         Sm (Itype_Printed, Flag,
+             Pre => "Is_Itype (N)"),
+         Sm (Known_To_Have_Preelab_Init, Flag),
+         Sm (Linker_Section_Pragma, Node_Id),
+         Sm (Must_Be_On_Byte_Boundary, Flag),
+         Sm (Must_Have_Preelab_Init, Flag),
+         Sm (No_Tagged_Streams_Pragma, Node_Id,
+             Pre => "Is_Tagged_Type (N)"),
+         Sm (Non_Binary_Modulus, Flag, Base_Type_Only),
+         Sm (Optimize_Alignment_Space, Flag),
+         Sm (Optimize_Alignment_Time, Flag),
+         Sm (Partial_View_Has_Unknown_Discr, Flag),
+         Sm (Pending_Access_Types, Elist_Id),
+         Sm (Related_Expression, Node_Id),
+         Sm (RM_Size, Uint),
+         Sm (SPARK_Pragma, Node_Id),
+         Sm (SPARK_Pragma_Inherited, Flag),
+         Sm (Subprograms_For_Type, Elist_Id),
+         Sm (Suppress_Initialization, Flag),
+         Sm (Universal_Aliasing, Flag, Impl_Base_Type_Only),
+         Sm (Renamed_Or_Alias, Node_Id)));
+ 
+    Ab (Elementary_Kind, Type_Kind);
+ 
+    Ab (Scalar_Kind, Elementary_Kind,
+        (Sm (Default_Aspect_Value, Node_Id, Base_Type_Only),
+         Sm (Scalar_Range, Node_Id)));
+ 
+    Ab (Discrete_Kind, Scalar_Kind,
+        (Sm (No_Dynamic_Predicate_On_Actual, Flag),
+         Sm (No_Predicate_On_Actual, Flag),
+         Sm (Static_Discrete_Predicate, List_Id)));
+ 
+    Ab (Enumeration_Kind, Discrete_Kind,
+        (Sm (First_Literal, Node_Id),
+         Sm (Has_Enumeration_Rep_Clause, Flag),
+         Sm (Has_Pragma_Ordered, Flag, Impl_Base_Type_Only),
+         Sm (Lit_Indexes, Node_Id),
+         Sm (Lit_Strings, Node_Id),
+         Sm (Nonzero_Is_True, Flag, Base_Type_Only,
+             Pre => "Root_Type (N) = Standard_Boolean"),
+         Sm (Lit_Hash, Node_Id, Root_Type_Only)));
+ 
+    Cc (E_Enumeration_Type, Enumeration_Kind,
+        --  Enumeration types, created by an enumeration type declaration
+        (Sm (Enum_Pos_To_Rep, Node_Id),
+         Sm (First_Entity, Node_Id)));
+ 
+    Cc (E_Enumeration_Subtype, Enumeration_Kind);
+        --  Enumeration subtypes, created by an explicit or implicit subtype
+        --  declaration applied to an enumeration type or subtype.
+ 
+    Ab (Integer_Kind, Discrete_Kind,
+        (Sm (Has_Shift_Operator, Flag, Base_Type_Only)));
+ 
+    Ab (Signed_Integer_Kind, Integer_Kind,
+        (Sm (First_Entity, Node_Id)));
+ 
+    Cc (E_Signed_Integer_Type, Signed_Integer_Kind);
+        --  Signed integer type, used for the anonymous base type of the
+        --  integer subtype created by an integer type declaration.
+ 
+    Cc (E_Signed_Integer_Subtype, Signed_Integer_Kind);
+        --  Signed integer subtype, created by either an integer subtype or
+        --  integer type declaration (in the latter case an integer type is
+        --  created for the base type, and this is the first named subtype).
+ 
+    Ab (Modular_Integer_Kind, Integer_Kind,
+        (Sm (Modulus, Uint, Base_Type_Only),
+         Sm (Original_Array_Type, Node_Id)));
+ 
+    Cc (E_Modular_Integer_Type, Modular_Integer_Kind);
+        --  Modular integer type, used for the anonymous base type of the
+        --  integer subtype created by a modular integer type declaration.
+ 
+    Cc (E_Modular_Integer_Subtype, Modular_Integer_Kind);
+        --  Modular integer subtype, created by either an modular subtype
+        --  or modular type declaration (in the latter case a modular type
+        --  is created for the base type, and this is the first named subtype).
+ 
+    Ab (Real_Kind, Scalar_Kind,
+        (Sm (Static_Real_Or_String_Predicate, Node_Id)));
+ 
+    Ab (Fixed_Point_Kind, Real_Kind,
+        (Sm (Delta_Value, Ureal),
+         Sm (Small_Value, Ureal)));
+ 
+    Ab (Ordinary_Fixed_Point_Kind, Fixed_Point_Kind,
+        (Sm (Has_Small_Clause, Flag)));
+ 
+    Cc (E_Ordinary_Fixed_Point_Type, Ordinary_Fixed_Point_Kind);
+        --  Ordinary fixed type, used for the anonymous base type of the fixed
+        --  subtype created by an ordinary fixed point type declaration.
+ 
+    Cc (E_Ordinary_Fixed_Point_Subtype, Ordinary_Fixed_Point_Kind);
+        --  Ordinary fixed point subtype, created by either an ordinary fixed
+        --  point subtype or ordinary fixed point type declaration (in the
+        --  latter case a fixed point type is created for the base type, and
+        --  this is the first named subtype).
+ 
+    Ab (Decimal_Fixed_Point_Kind, Fixed_Point_Kind,
+        (Sm (Digits_Value, Upos),
+         Sm (Has_Machine_Radix_Clause, Flag),
+         Sm (Machine_Radix_10, Flag),
+         Sm (Scale_Value, Uint)));
+ 
+    Cc (E_Decimal_Fixed_Point_Type, Decimal_Fixed_Point_Kind);
+        --  Decimal fixed type, used for the anonymous base type of the decimal
+        --  fixed subtype created by an ordinary fixed point type declaration.
+ 
+    Cc (E_Decimal_Fixed_Point_Subtype, Decimal_Fixed_Point_Kind);
+        --  Decimal fixed point subtype, created by either a decimal fixed point
+        --  subtype or decimal fixed point type declaration (in the latter case
+        --  a fixed point type is created for the base type, and this is the
+        --  first named subtype).
+ 
+    Ab (Float_Kind, Real_Kind,
+        (Sm (Digits_Value, Upos)));
+ 
+    Cc (E_Floating_Point_Type, Float_Kind);
+        --  Floating point type, used for the anonymous base type of the
+        --  floating point subtype created by a floating point type declaration.
+ 
+    Cc (E_Floating_Point_Subtype, Float_Kind);
+        --  Floating point subtype, created by either a floating point subtype
+        --  or floating point type declaration (in the latter case a floating
+        --  point type is created for the base type, and this is the first
+        --  named subtype).
+ 
+    Ab (Access_Kind, Elementary_Kind,
+        (Sm (Associated_Storage_Pool, Node_Id, Root_Type_Only),
+         Sm (Directly_Designated_Type, Node_Id),
+         Sm (Finalization_Master, Node_Id, Root_Type_Only),
+         Sm (Has_Pragma_Controlled, Flag, Impl_Base_Type_Only),
+         Sm (Has_Storage_Size_Clause, Flag, Impl_Base_Type_Only),
+         Sm (Is_Access_Constant, Flag),
+         Sm (Is_Local_Anonymous_Access, Flag),
+         Sm (Is_Param_Block_Component_Type, Flag, Base_Type_Only),
+         Sm (Is_Pure_Unit_Access_Type, Flag),
+         Sm (Master_Id, Node_Id),
+         Sm (No_Pool_Assigned, Flag, Root_Type_Only),
+         Sm (No_Strict_Aliasing, Flag, Base_Type_Only),
+         Sm (Storage_Size_Variable, Node_Id, Impl_Base_Type_Only)));
+ 
+    Cc (E_Access_Type, Access_Kind);
+        --  An access type created by an access type declaration with no all
+        --  keyword present.
+ 
+    Cc (E_Access_Subtype, Access_Kind);
+        --  An access subtype created by a subtype declaration for any access
+        --  type (whether or not it is a general access type).
+ 
+    Cc (E_Access_Attribute_Type, Access_Kind);
+        --  An access type created for an access attribute (one of 'Access,
+        --  'Unrestricted_Access, or Unchecked_Access).
+ 
+    Cc (E_Allocator_Type, Access_Kind);
+        --  A special internal type used to label allocators and references to
+        --  objects using 'Reference. This is needed because special resolution
+        --  rules apply to these constructs. On the resolution pass, this type
+        --  is almost always replaced by the actual access type, but if the
+        --  context does not provide one, the backend will see Allocator_Type
+        --  itself (which will already have been frozen).
+ 
+    Cc (E_General_Access_Type, Access_Kind,
+        --  An access type created by an access type declaration with the all
+        --  keyword present.
+        (Sm (First_Entity, Node_Id)));
+ 
+    Ab (Access_Subprogram_Kind, Access_Kind);
+ 
+    Cc (E_Access_Subprogram_Type, Access_Subprogram_Kind,
+        --  An access-to-subprogram type, created by an access-to-subprogram
+        --  declaration.
+        (Sm (Equivalent_Type, Node_Id),
+         Sm (Original_Access_Type, Node_Id)));
+ 
+    Ab (Access_Protected_Kind, Access_Subprogram_Kind,
+        (Sm (Equivalent_Type, Node_Id)));
+ 
+    Cc (E_Access_Protected_Subprogram_Type, Access_Protected_Kind);
+        --  An access to a protected subprogram, created by the corresponding
+        --  declaration. Values of such a type denote both a protected object
+        --  and a protected operation within, and have different compile-time
+        --  and run-time properties than other access-to-subprogram values.
+ 
+    Cc (E_Anonymous_Access_Protected_Subprogram_Type, Access_Protected_Kind);
+        --  An anonymous access-to-protected-subprogram type, created by an
+        --  access-to-subprogram declaration.
+ 
+    Cc (E_Anonymous_Access_Subprogram_Type, Access_Subprogram_Kind);
+        --  An anonymous access-to-subprogram type, created by an access-to-
+        --  subprogram declaration, or generated for a current instance of
+        --  a type name appearing within a component definition that has an
+        --  anonymous access-to-subprogram type.
+ 
+    Cc (E_Anonymous_Access_Type, Access_Kind);
+    --  An anonymous access-to-object type
+ 
+    Ab (Composite_Kind, Type_Kind,
+        (Sm (Discriminant_Constraint, Elist_Id,
+             Pre_Get => "Has_Discriminants (N) or else Is_Constrained (N)")));
+ 
+    Ab (Aggregate_Kind, Composite_Kind,
+        (Sm (Component_Alignment, Component_Alignment_Kind, Base_Type_Only),
+         Sm (Has_Pragma_Pack, Flag, Impl_Base_Type_Only),
+         Sm (Reverse_Storage_Order, Flag, Base_Type_Only),
+         Sm (SSO_Set_High_By_Default, Flag, Base_Type_Only),
+         Sm (SSO_Set_Low_By_Default, Flag, Base_Type_Only)));
+ 
+    Ab (Array_Kind, Aggregate_Kind,
+        (Sm (Component_Size, Uint, Impl_Base_Type_Only),
+         Sm (Component_Type, Node_Id, Impl_Base_Type_Only),
+         Sm (Default_Aspect_Component_Value, Node_Id, Base_Type_Only),
+         Sm (First_Index, Node_Id),
+         Sm (Has_Component_Size_Clause, Flag, Impl_Base_Type_Only),
+         Sm (Original_Array_Type, Node_Id),
+         Sm (Packed_Array_Impl_Type, Node_Id),
+         Sm (Related_Array_Object, Node_Id)));
+ 
+    Cc (E_Array_Type, Array_Kind,
+        --  An array type created by an array type declaration. Includes all
+        --  cases of arrays, except for string types.
+        (Sm (First_Entity, Node_Id),
+         Sm (Static_Real_Or_String_Predicate, Node_Id)));
+ 
+    Cc (E_Array_Subtype, Array_Kind,
+        --  An array subtype, created by an explicit array subtype declaration,
+        --  or the use of an anonymous array subtype.
+        (Sm (Predicated_Parent, Node_Id),
+         Sm (First_Entity, Node_Id),
+         Sm (Static_Real_Or_String_Predicate, Node_Id)));
+ 
+    Cc (E_String_Literal_Subtype, Array_Kind,
+        --  A special string subtype, used only to describe the type of a string
+        --  literal (will always be one dimensional, with literal bounds).
+        (Sm (String_Literal_Length, Unat),
+         Sm (String_Literal_Low_Bound, Node_Id)));
+ 
+    Ab (Class_Wide_Kind, Aggregate_Kind,
+        (Sm (C_Pass_By_Copy, Flag, Impl_Base_Type_Only),
+         Sm (Equivalent_Type, Node_Id),
+         Sm (First_Entity, Node_Id),
+         Sm (Has_Complex_Representation, Flag, Impl_Base_Type_Only),
+         Sm (Has_Record_Rep_Clause, Flag, Impl_Base_Type_Only),
+         Sm (Interfaces, Elist_Id),
+         Sm (Last_Entity, Node_Id),
+         Sm (No_Reordering, Flag, Impl_Base_Type_Only),
+         Sm (Non_Limited_View, Node_Id),
+         Sm (Parent_Subtype, Node_Id, Base_Type_Only),
+         Sm (Reverse_Bit_Order, Flag, Base_Type_Only),
+         Sm (Stored_Constraint, Elist_Id)));
+ 
+    Cc (E_Class_Wide_Type, Class_Wide_Kind,
+        --  A class wide type, created by any tagged type declaration (i.e. if
+        --  a tagged type is declared, the corresponding class type is always
+        --  created, using this Ekind value).
+        (Sm (Corresponding_Remote_Type, Node_Id),
+         Sm (Scalar_Range, Node_Id)));
+ 
+    Cc (E_Class_Wide_Subtype, Class_Wide_Kind,
+        --  A subtype of a class wide type, created by a subtype declaration
+        --  used to declare a subtype of a class type.
+        (Sm (Cloned_Subtype, Node_Id)));
+ 
+    Cc (E_Record_Type, Aggregate_Kind,
+        --  A record type, created by a record type declaration
+        (Sm (Access_Disp_Table, Elist_Id, Impl_Base_Type_Only),
+         Sm (Access_Disp_Table_Elab_Flag, Node_Id, Impl_Base_Type_Only),
+         Sm (C_Pass_By_Copy, Flag, Impl_Base_Type_Only),
+         Sm (Corresponding_Concurrent_Type, Node_Id),
+         Sm (Corresponding_Remote_Type, Node_Id),
+         Sm (Dispatch_Table_Wrappers, Elist_Id, Impl_Base_Type_Only),
+         Sm (First_Entity, Node_Id),
+         Sm (Has_Complex_Representation, Flag, Impl_Base_Type_Only),
+         Sm (Has_Record_Rep_Clause, Flag, Impl_Base_Type_Only),
+         Sm (Interfaces, Elist_Id),
+         Sm (Last_Entity, Node_Id),
+         Sm (No_Reordering, Flag, Impl_Base_Type_Only),
+         Sm (Parent_Subtype, Node_Id, Base_Type_Only),
+         Sm (Reverse_Bit_Order, Flag, Base_Type_Only),
+         Sm (Stored_Constraint, Elist_Id),
+         Sm (Underlying_Record_View, Node_Id)));
+ 
+    Cc (E_Record_Subtype, Aggregate_Kind,
+        --  A record subtype, created by a record subtype declaration
+        (Sm (Access_Disp_Table, Elist_Id, Impl_Base_Type_Only),
+         Sm (Access_Disp_Table_Elab_Flag, Node_Id, Impl_Base_Type_Only),
+         Sm (C_Pass_By_Copy, Flag, Impl_Base_Type_Only),
+         Sm (Cloned_Subtype, Node_Id),
+         Sm (Corresponding_Remote_Type, Node_Id),
+         Sm (Predicated_Parent, Node_Id),
+         Sm (Dispatch_Table_Wrappers, Elist_Id, Impl_Base_Type_Only),
+         Sm (First_Entity, Node_Id),
+         Sm (Has_Complex_Representation, Flag, Impl_Base_Type_Only),
+         Sm (Has_Record_Rep_Clause, Flag, Impl_Base_Type_Only),
+         Sm (Interfaces, Elist_Id),
+         Sm (Last_Entity, Node_Id),
+         Sm (No_Reordering, Flag, Impl_Base_Type_Only),
+         Sm (Parent_Subtype, Node_Id, Base_Type_Only),
+         Sm (Reverse_Bit_Order, Flag, Base_Type_Only),
+         Sm (Stored_Constraint, Elist_Id),
+         Sm (Underlying_Record_View, Node_Id)));
+ 
+    Ab (Incomplete_Or_Private_Kind, Composite_Kind,
+        (Sm (First_Entity, Node_Id),
+         Sm (Last_Entity, Node_Id),
+         Sm (Private_Dependents, Elist_Id),
+         Sm (Stored_Constraint, Elist_Id)));
+ 
+    Ab (Private_Kind, Incomplete_Or_Private_Kind,
+        (Sm (Underlying_Full_View, Node_Id)));
+ 
+    Cc (E_Record_Type_With_Private, Private_Kind,
+        --  Used for types defined by a private extension declaration,
+        --  and for tagged private types. Includes the fields for both
+        --  private types and for record types (with the sole exception of
+        --  Corresponding_Concurrent_Type which is obviously not needed). This
+        --  entity is considered to be both a record type and a private type.
+        (Sm (Access_Disp_Table, Elist_Id, Impl_Base_Type_Only),
+         Sm (Access_Disp_Table_Elab_Flag, Node_Id, Impl_Base_Type_Only),
+         Sm (C_Pass_By_Copy, Flag, Impl_Base_Type_Only),
+         Sm (Component_Alignment, Component_Alignment_Kind, Base_Type_Only),
+         Sm (Corresponding_Remote_Type, Node_Id),
+         Sm (Has_Complex_Representation, Flag, Impl_Base_Type_Only),
+         Sm (Has_Pragma_Pack, Flag, Impl_Base_Type_Only),
+         Sm (Has_Record_Rep_Clause, Flag, Impl_Base_Type_Only),
+         Sm (Interfaces, Elist_Id),
+         Sm (No_Reordering, Flag, Impl_Base_Type_Only),
+         Sm (Parent_Subtype, Node_Id, Base_Type_Only),
+         Sm (Reverse_Bit_Order, Flag, Base_Type_Only),
+         Sm (Reverse_Storage_Order, Flag, Base_Type_Only),
+         Sm (SSO_Set_High_By_Default, Flag, Base_Type_Only),
+         Sm (SSO_Set_Low_By_Default, Flag, Base_Type_Only),
+         Sm (Underlying_Record_View, Node_Id)));
+ 
+    Cc (E_Record_Subtype_With_Private, Private_Kind,
+        --  A subtype of a type defined by a private extension declaration
+        (Sm (C_Pass_By_Copy, Flag, Impl_Base_Type_Only),
+         Sm (Component_Alignment, Component_Alignment_Kind, Base_Type_Only),
+         Sm (Corresponding_Remote_Type, Node_Id),
+         Sm (Predicated_Parent, Node_Id),
+         Sm (Has_Complex_Representation, Flag, Impl_Base_Type_Only),
+         Sm (Has_Pragma_Pack, Flag, Impl_Base_Type_Only),
+         Sm (Has_Record_Rep_Clause, Flag, Impl_Base_Type_Only),
+         Sm (Interfaces, Elist_Id),
+         Sm (No_Reordering, Flag, Impl_Base_Type_Only),
+         Sm (Parent_Subtype, Node_Id, Base_Type_Only),
+         Sm (Reverse_Bit_Order, Flag, Base_Type_Only),
+         Sm (Reverse_Storage_Order, Flag, Base_Type_Only),
+         Sm (SSO_Set_High_By_Default, Flag, Base_Type_Only),
+         Sm (SSO_Set_Low_By_Default, Flag, Base_Type_Only)));
+ 
+    Cc (E_Private_Type, Private_Kind,
+        --  A private type, created by a private type declaration that has
+        --  neither the keyword limited nor the keyword tagged.
+        (Sm (Scalar_Range, Node_Id),
+         Sm (Scope_Depth_Value, Unat)));
+ 
+    Cc (E_Private_Subtype, Private_Kind,
+        --  A subtype of a private type, created by a subtype declaration used
+        --  to declare a subtype of a private type.
+        (Sm (Scope_Depth_Value, Unat)));
+ 
+    Cc (E_Limited_Private_Type, Private_Kind,
+        --  A limited private type, created by a private type declaration that
+        --  has the keyword limited, but not the keyword tagged.
+        (Sm (Scalar_Range, Node_Id),
+         Sm (Scope_Depth_Value, Unat)));
+ 
+    Cc (E_Limited_Private_Subtype, Private_Kind,
+        --  A subtype of a limited private type, created by a subtype declaration
+        --  used to declare a subtype of a limited private type.
+        (Sm (Scope_Depth_Value, Unat)));
+ 
+    Ab (Incomplete_Kind, Incomplete_Or_Private_Kind,
+        (Sm (Non_Limited_View, Node_Id)));
+ 
+    Cc (E_Incomplete_Type, Incomplete_Kind,
+        --  An incomplete type, created by an incomplete type declaration
+        (Sm (Scalar_Range, Node_Id)));
+ 
+    Cc (E_Incomplete_Subtype, Incomplete_Kind);
+        --  An incomplete subtype, created by a subtype declaration where the
+        --  subtype mark denotes an incomplete type.
+ 
+    Ab (Concurrent_Kind, Composite_Kind,
+        (Sm (Corresponding_Record_Type, Node_Id),
+         Sm (First_Entity, Node_Id),
+         Sm (First_Private_Entity, Node_Id),
+         Sm (Last_Entity, Node_Id),
+         Sm (Scope_Depth_Value, Unat),
+         Sm (Stored_Constraint, Elist_Id)));
+ 
+    Ab (Task_Kind, Concurrent_Kind,
+        (Sm (Has_Storage_Size_Clause, Flag, Impl_Base_Type_Only),
+         Sm (Is_Elaboration_Checks_OK_Id, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Id, Flag),
+         Sm (Relative_Deadline_Variable, Node_Id, Impl_Base_Type_Only),
+         Sm (Storage_Size_Variable, Node_Id, Impl_Base_Type_Only),
+         Sm (Task_Body_Procedure, Node_Id)));
+ 
+    Cc (E_Task_Type, Task_Kind,
+        --  A task type, created by a task type declaration. An entity with this
+        --  Ekind is also created to describe the anonymous type of a task that
+        --  is created by a single task declaration.
+        (Sm (Anonymous_Object, Node_Id),
+         Sm (Ignore_SPARK_Mode_Pragmas, Flag),
+         Sm (SPARK_Aux_Pragma, Node_Id),
+         Sm (SPARK_Aux_Pragma_Inherited, Flag)));
+ 
+    Cc (E_Task_Subtype, Task_Kind);
+        --  A subtype of a task type, created by a subtype declaration used to
+        --  declare a subtype of a task type.
+ 
+    Ab (Protected_Kind, Concurrent_Kind,
+        (Sm (Entry_Bodies_Array, Node_Id,
+             Pre => "Has_Entries (N)"),
+         Sm (Uses_Lock_Free, Flag)));
+ 
+    Cc (E_Protected_Type, Protected_Kind,
+        --  A protected type, created by a protected type declaration. An entity
+        --  with this Ekind is also created to describe the anonymous type of
+        --  a protected object created by a single protected declaration.
+        (Sm (Anonymous_Object, Node_Id),
+         Sm (Entry_Max_Queue_Lengths_Array, Node_Id),
+         Sm (Ignore_SPARK_Mode_Pragmas, Flag),
+         Sm (SPARK_Aux_Pragma, Node_Id),
+         Sm (SPARK_Aux_Pragma_Inherited, Flag)));
+ 
+    Cc (E_Protected_Subtype, Protected_Kind);
+        --  A subtype of a protected type, created by a subtype declaration used
+        --  to declare a subtype of a protected type.
+ 
+    Cc (E_Exception_Type, Type_Kind,
+        --  The type of an exception created by an exception declaration
+        (Sm (Equivalent_Type, Node_Id)));
+ 
+    Cc (E_Subprogram_Type, Type_Kind,
+        --  This is the designated type of an Access_To_Subprogram. Has type and
+        --  signature like a subprogram entity, so can appear in calls, which
+        --  are resolved like regular calls, except that such an entity is not
+        --  overloadable.
+        (Sm (Access_Subprogram_Wrapper, Node_Id),
+         Sm (Extra_Accessibility_Of_Result, Node_Id),
+         Sm (Extra_Formals, Node_Id),
+         Sm (First_Entity, Node_Id),
+         Sm (Last_Entity, Node_Id),
+         Sm (Needs_No_Actuals, Flag)));
+ 
+    Ab (Overloadable_Kind, Entity_Kind,
+        (Sm (Renamed_Or_Alias, Node_Id),
+         Sm (Extra_Formals, Node_Id),
+         Sm (Is_Abstract_Subprogram, Flag),
+         Sm (Is_Primitive, Flag),
+         Sm (Needs_No_Actuals, Flag),
+         Sm (Requires_Overriding, Flag)));
+ 
+    Cc (E_Enumeration_Literal, Overloadable_Kind,
+        --  An enumeration literal, created by the use of the literal in an
+        --  enumeration type definition.
+        (Sm (Enumeration_Pos, Unat),
+         Sm (Enumeration_Rep, Valid_Uint),
+         Sm (Enumeration_Rep_Expr, Node_Id),
+         Sm (Esize, Uint),
+         Sm (Alignment, Unat),
+         Sm (Interface_Name, Node_Id)));
+ 
+    Ab (Subprogram_Kind, Overloadable_Kind,
+        (Sm (Body_Needed_For_SAL, Flag),
+         Sm (Class_Postconditions, Node_Id),
+         Sm (Class_Preconditions, Node_Id),
+         Sm (Class_Preconditions_Subprogram, Node_Id),
+         Sm (Contract, Node_Id),
+         Sm (Dynamic_Call_Helper, Node_Id),
+         Sm (Elaboration_Entity, Node_Id),
+         Sm (Elaboration_Entity_Required, Flag),
+         Sm (First_Entity, Node_Id),
+         Sm (Has_Expanded_Contract, Flag),
+         Sm (Has_Nested_Subprogram, Flag),
+         Sm (Has_Out_Or_In_Out_Parameter, Flag),
+         Sm (Has_Recursive_Call, Flag),
+         Sm (Ignored_Class_Postconditions, Node_Id),
+         Sm (Ignored_Class_Preconditions, Node_Id),
+         Sm (Ignore_SPARK_Mode_Pragmas, Flag),
+         Sm (Import_Pragma, Node_Id),
+         Sm (Indirect_Call_Wrapper, Node_Id),
+         Sm (Interface_Alias, Node_Id),
+         Sm (Interface_Name, Node_Id),
+         Sm (Is_Elaboration_Checks_OK_Id, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Id, Flag),
+         Sm (Is_Machine_Code_Subprogram, Flag),
+         Sm (Last_Entity, Node_Id),
+         Sm (Linker_Section_Pragma, Node_Id),
+         Sm (Overridden_Operation, Node_Id),
+         Sm (Protected_Body_Subprogram, Node_Id),
+         Sm (Scope_Depth_Value, Unat),
+         Sm (Static_Call_Helper, Node_Id),
+         Sm (SPARK_Pragma, Node_Id),
+         Sm (SPARK_Pragma_Inherited, Flag),
+         Sm (Subps_Index, Unat)));
+ 
+    Cc (E_Function, Subprogram_Kind,
+        --  A function, created by a function declaration or a function body
+        --  that acts as its own declaration.
+        (Sm (Anonymous_Masters, Elist_Id),
+         Sm (Corresponding_Equality, Node_Id,
+             Pre => "not Comes_From_Source (N) and then Chars (N) = Name_Op_Ne"),
+         Sm (Corresponding_Procedure, Node_Id),
+         Sm (DT_Position, Uint,
+             Pre_Get => "Present (DTC_Entity (N))"),
+         Sm (DTC_Entity, Node_Id),
+         Sm (Extra_Accessibility_Of_Result, Node_Id),
+         Sm (Generic_Renamings, Elist_Id),
+         Sm (Handler_Records, List_Id),
+         Sm (Has_Missing_Return, Flag),
+         Sm (Inner_Instances, Elist_Id),
+         Sm (Is_Called, Flag),
+         Sm (Is_CUDA_Kernel, Flag),
+         Sm (Is_DIC_Procedure, Flag),
+         Sm (Is_Generic_Actual_Subprogram, Flag),
+         Sm (Is_Initial_Condition_Procedure, Flag),
+         Sm (Is_Inlined_Always, Flag),
+         Sm (Is_Invariant_Procedure, Flag),
+         Sm (Is_Partial_Invariant_Procedure, Flag),
+         Sm (Is_Predicate_Function, Flag),
+         Sm (Is_Predicate_Function_M, Flag),
+         Sm (Is_Primitive_Wrapper, Flag),
+         Sm (Is_Private_Primitive, Flag),
+         Sm (LSP_Subprogram, Node_Id),
+         Sm (Mechanism, Mechanism_Type),
+         Sm (Next_Inlined_Subprogram, Node_Id),
+         Sm (Original_Protected_Subprogram, Node_Id),
+         Sm (Postconditions_Proc, Node_Id),
+         Sm (Protected_Subprogram, Node_Id),
+         Sm (Protection_Object, Node_Id),
+         Sm (Related_Expression, Node_Id),
+         Sm (Rewritten_For_C, Flag),
+         Sm (Thunk_Entity, Node_Id,
+             Pre => "Is_Thunk (N)"),
+         Sm (Wrapped_Entity, Node_Id,
+             Pre => "Is_Primitive_Wrapper (N)")));
+ 
+    Cc (E_Operator, Subprogram_Kind,
+        --  A predefined operator, appearing in Standard, or an implicitly
+        --  defined concatenation operator created whenever an array is declared.
+        --  We do not make normal derived operators explicit in the tree, but the
+        --  concatenation operators are made explicit.
+        (Sm (Extra_Accessibility_Of_Result, Node_Id),
+         Sm (LSP_Subprogram, Node_Id)));
+ 
+    Cc (E_Procedure, Subprogram_Kind,
+        --  A procedure, created by a procedure declaration or a procedure
+        --  body that acts as its own declaration.
+        (Sm (Anonymous_Masters, Elist_Id),
+         Sm (Associated_Node_For_Itype, Node_Id),
+         Sm (Corresponding_Function, Node_Id),
+         Sm (DT_Position, Uint,
+             Pre_Get => "Present (DTC_Entity (N))"),
+         Sm (DTC_Entity, Node_Id),
+         Sm (Entry_Parameters_Type, Node_Id),
+         Sm (Generic_Renamings, Elist_Id),
+         Sm (Handler_Records, List_Id),
+         Sm (Inner_Instances, Elist_Id),
+         Sm (Is_Asynchronous, Flag),
+         Sm (Is_Called, Flag),
+         Sm (Is_CUDA_Kernel, Flag),
+         Sm (Is_DIC_Procedure, Flag),
+         Sm (Is_Generic_Actual_Subprogram, Flag),
+         Sm (Is_Initial_Condition_Procedure, Flag),
+         Sm (Is_Inlined_Always, Flag),
+         Sm (Is_Invariant_Procedure, Flag),
+         Sm (Is_Null_Init_Proc, Flag),
+         Sm (Is_Partial_Invariant_Procedure, Flag),
+         Sm (Is_Predicate_Function, Flag),
+         Sm (Is_Predicate_Function_M, Flag),
+         Sm (Is_Primitive_Wrapper, Flag),
+         Sm (Is_Private_Primitive, Flag),
+         Sm (Is_Valued_Procedure, Flag),
+         Sm (LSP_Subprogram, Node_Id),
+         Sm (Next_Inlined_Subprogram, Node_Id),
+         Sm (Original_Protected_Subprogram, Node_Id),
+         Sm (Postconditions_Proc, Node_Id),
+         Sm (Protected_Subprogram, Node_Id),
+         Sm (Protection_Object, Node_Id),
+         Sm (Receiving_Entry, Node_Id),
+         Sm (Static_Initialization, Node_Id,
+             Pre => "not Is_Dispatching_Operation (N)"),
+         Sm (Thunk_Entity, Node_Id,
+             Pre => "Is_Thunk (N)"),
+         Sm (Wrapped_Entity, Node_Id,
+             Pre => "Is_Primitive_Wrapper (N)")));
+ 
+    Cc (E_Abstract_State, Overloadable_Kind,
+        --  A state abstraction. Used to designate entities introduced by aspect
+        --  or pragma Abstract_State. The entity carries the various properties
+        --  of the state.
+        (Sm (Body_References, Elist_Id),
+         Sm (Encapsulating_State, Node_Id),
+         Sm (First_Entity, Node_Id),
+         Sm (Has_Partial_Visible_Refinement, Flag),
+         Sm (Has_Visible_Refinement, Flag),
+         Sm (Non_Limited_View, Node_Id),
+         Sm (Part_Of_Constituents, Elist_Id),
+         Sm (Refinement_Constituents, Elist_Id),
+         Sm (SPARK_Pragma, Node_Id),
+         Sm (SPARK_Pragma_Inherited, Flag)));
+ 
+    Cc (E_Entry, Overloadable_Kind,
+        --  An entry, created by an entry declaration in a task or protected
+        --  object.
+        (Sm (Accept_Address, Elist_Id),
+         Sm (Barrier_Function, Node_Id),
+         Sm (Contract, Node_Id),
+         Sm (Contract_Wrapper, Node_Id),
+         Sm (Elaboration_Entity, Node_Id),
+         Sm (Elaboration_Entity_Required, Flag),
+         Sm (Entry_Accepted, Flag),
+         Sm (Entry_Parameters_Type, Node_Id),
+         Sm (First_Entity, Node_Id),
+         Sm (Has_Out_Or_In_Out_Parameter, Flag),
+         Sm (Ignore_SPARK_Mode_Pragmas, Flag),
+         Sm (Is_Elaboration_Checks_OK_Id, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Id, Flag),
+         Sm (Last_Entity, Node_Id),
+         Sm (Postconditions_Proc, Node_Id),
+         Sm (Protected_Body_Subprogram, Node_Id),
+         Sm (Protection_Object, Node_Id),
+         Sm (Scope_Depth_Value, Unat),
+         Sm (SPARK_Pragma, Node_Id),
+         Sm (SPARK_Pragma_Inherited, Flag)));
+ 
+    Cc (E_Entry_Family, Entity_Kind,
+        --  An entry family, created by an entry family declaration in a
+        --  task or protected type definition.
+        (Sm (Accept_Address, Elist_Id),
+         Sm (Barrier_Function, Node_Id),
+         Sm (Contract, Node_Id),
+         Sm (Contract_Wrapper, Node_Id),
+         Sm (Elaboration_Entity, Node_Id),
+         Sm (Elaboration_Entity_Required, Flag),
+         Sm (Entry_Accepted, Flag),
+         Sm (Entry_Parameters_Type, Node_Id),
+         Sm (Extra_Formals, Node_Id),
+         Sm (First_Entity, Node_Id),
+         Sm (Has_Out_Or_In_Out_Parameter, Flag),
+         Sm (Ignore_SPARK_Mode_Pragmas, Flag),
+         Sm (Is_Elaboration_Checks_OK_Id, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Id, Flag),
+         Sm (Last_Entity, Node_Id),
+         Sm (Needs_No_Actuals, Flag),
+         Sm (Postconditions_Proc, Node_Id),
+         Sm (Protected_Body_Subprogram, Node_Id),
+         Sm (Protection_Object, Node_Id),
+         Sm (Renamed_Or_Alias, Node_Id),
+         Sm (Scope_Depth_Value, Unat),
+         Sm (SPARK_Pragma, Node_Id),
+         Sm (SPARK_Pragma_Inherited, Flag)));
+ 
+    Cc (E_Block, Entity_Kind,
+        --  A block identifier, created by an explicit or implicit label on
+        --  a block or declare statement.
+        (Sm (Block_Node, Node_Id),
+         Sm (Entry_Cancel_Parameter, Node_Id),
+         Sm (First_Entity, Node_Id),
+         Sm (Is_Exception_Handler, Flag),
+         Sm (Last_Entity, Node_Id),
+         Sm (Renamed_Or_Alias, Node_Id),
+         Sm (Return_Applies_To, Node_Id),
+         Sm (Scope_Depth_Value, Unat)));
+ 
+    Cc (E_Entry_Index_Parameter, Entity_Kind,
+        --  An entry index parameter created by an entry index specification
+        --  for the body of a protected entry family.
+        (Sm (Entry_Index_Constant, Node_Id)));
+ 
+    Cc (E_Exception, Exception_Or_Object_Kind,
+        --  An exception created by an exception declaration. The exception
+        --  itself uses E_Exception for the Ekind, the implicit type that is
+        --  created to represent its type uses the Ekind E_Exception_Type.
+        (Sm (Alignment, Unat),
+         Sm (Esize, Uint),
+         Sm (Interface_Name, Node_Id),
+         Sm (Is_Raised, Flag),
+         Sm (Register_Exception_Call, Node_Id),
+         Sm (Renamed_Or_Alias, Node_Id)));
+ 
+    Ab (Generic_Unit_Kind, Entity_Kind,
+        (Sm (Body_Needed_For_SAL, Flag),
+         Sm (Contract, Node_Id),
+         Sm (Elaboration_Entity, Node_Id),
+         Sm (Elaboration_Entity_Required, Flag),
+         Sm (First_Entity, Node_Id),
+         Sm (Ignore_SPARK_Mode_Pragmas, Flag),
+         Sm (Inner_Instances, Elist_Id),
+         Sm (Interface_Name, Node_Id),
+         Sm (Is_Elaboration_Checks_OK_Id, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Id, Flag),
+         Sm (Last_Entity, Node_Id),
+         Sm (Renamed_Or_Alias, Node_Id),
+         Sm (Scope_Depth_Value, Unat),
+         Sm (SPARK_Pragma, Node_Id),
+         Sm (SPARK_Pragma_Inherited, Flag)));
+ 
+    Ab (Generic_Subprogram_Kind, Generic_Unit_Kind,
+        (Sm (Has_Out_Or_In_Out_Parameter, Flag),
+         Sm (Is_Primitive, Flag),
+         Sm (Next_Inlined_Subprogram, Node_Id),
+         Sm (Overridden_Operation, Node_Id)));
+ 
+    Cc (E_Generic_Function, Generic_Subprogram_Kind,
+        --  A generic function. This is the entity for a generic function
+        --  created by a generic subprogram declaration.
+        (Sm (Has_Missing_Return, Flag)));
+ 
+    Cc (E_Generic_Procedure, Generic_Subprogram_Kind);
+        --  A generic function. This is the entity for a generic procedure
+        --  created by a generic subprogram declaration.
+ 
+    Cc (E_Generic_Package, Generic_Unit_Kind,
+        --  A generic package, this is the entity for a generic package created
+        --  by a generic package declaration.
+        (Sm (Abstract_States, Elist_Id),
+         Sm (Body_Entity, Node_Id),
+         Sm (First_Private_Entity, Node_Id),
+         Sm (Generic_Homonym, Node_Id),
+         Sm (Package_Instantiation, Node_Id),
+         Sm (SPARK_Aux_Pragma, Node_Id),
+         Sm (SPARK_Aux_Pragma_Inherited, Flag)));
+ 
+    Cc (E_Label, Entity_Kind,
+        --  The defining entity for a label. Note that this is created by the
+        --  implicit label declaration, not the occurrence of the label itself,
+        --  which is simply a direct name referring to the label.
+        (Sm (Enclosing_Scope, Node_Id),
+         Sm (Renamed_Or_Alias, Node_Id)));
+ 
+    Cc (E_Loop, Entity_Kind,
+        --  A loop identifier, created by an explicit or implicit label on a
+        --  loop statement.
+        (Sm (First_Entity, Node_Id),
+         Sm (First_Exit_Statement, Node_Id),
+         Sm (Has_Loop_Entry_Attributes, Flag),
+         Sm (Last_Entity, Node_Id),
+         Sm (Renamed_Or_Alias, Node_Id),
+         Sm (Scope_Depth_Value, Unat)));
+ 
+    Cc (E_Return_Statement, Entity_Kind,
+        --  A dummy entity created for each return statement. Used to hold
+        --  information about the return statement (what it applies to) and in
+        --  rules checking. For example, a simple_return_statement that applies
+        --  to an extended_return_statement cannot have an expression; this
+        --  requires putting the E_Return_Statement entity for the
+        --  extended_return_statement on the scope stack.
+        (Sm (First_Entity, Node_Id),
+         Sm (Last_Entity, Node_Id),
+         Sm (Return_Applies_To, Node_Id),
+         Sm (Scope_Depth_Value, Unat)));
+ 
+    Cc (E_Package, Entity_Kind,
+        --  A package, created by a package declaration
+        (Sm (Abstract_States, Elist_Id),
+         Sm (Anonymous_Masters, Elist_Id),
+         Sm (Associated_Formal_Package, Node_Id),
+         Sm (Body_Entity, Node_Id),
+         Sm (Body_Needed_For_Inlining, Flag),
+         Sm (Body_Needed_For_SAL, Flag),
+         Sm (Contract, Node_Id),
+         Sm (Current_Use_Clause, Node_Id),
+         Sm (Dependent_Instances, Elist_Id,
+             Pre => "Is_Generic_Instance (N)"),
+         Sm (Elaborate_Body_Desirable, Flag),
+         Sm (Elaboration_Entity, Node_Id),
+         Sm (Elaboration_Entity_Required, Flag),
+         Sm (Finalizer, Node_Id),
+         Sm (First_Entity, Node_Id),
+         Sm (First_Private_Entity, Node_Id),
+         Sm (Generic_Renamings, Elist_Id),
+         Sm (Handler_Records, List_Id),
+         Sm (Has_RACW, Flag),
+         Sm (Hidden_In_Formal_Instance, Elist_Id),
+         Sm (Ignore_SPARK_Mode_Pragmas, Flag),
+         Sm (Incomplete_Actuals, Elist_Id),
+         Sm (Inner_Instances, Elist_Id),
+         Sm (Interface_Name, Node_Id),
+         Sm (Is_Called, Flag),
+         Sm (Is_Elaboration_Checks_OK_Id, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Id, Flag),
+         Sm (Last_Entity, Node_Id),
+         Sm (Limited_View, Node_Id),
+         Sm (Package_Instantiation, Node_Id),
+         Sm (Related_Instance, Node_Id),
+         Sm (Renamed_In_Spec, Flag),
+         Sm (Renamed_Or_Alias, Node_Id),
+         Sm (Scope_Depth_Value, Unat),
+         Sm (SPARK_Aux_Pragma, Node_Id),
+         Sm (SPARK_Aux_Pragma_Inherited, Flag),
+         Sm (SPARK_Pragma, Node_Id),
+         Sm (SPARK_Pragma_Inherited, Flag),
+         Sm (Static_Elaboration_Desired, Flag)));
+ 
+    Cc (E_Package_Body, Entity_Kind,
+        --  A package body. This entity serves only limited functions, since
+        --  most semantic analysis uses the package entity (E_Package). However
+        --  there are some attributes that are significant for the body entity.
+        --  For example, collection of exception handlers.
+        (Sm (Contract, Node_Id),
+         Sm (Finalizer, Node_Id),
+         Sm (First_Entity, Node_Id),
+         Sm (Handler_Records, List_Id),
+         Sm (Ignore_SPARK_Mode_Pragmas, Flag),
+         Sm (Last_Entity, Node_Id),
+         Sm (Related_Instance, Node_Id),
+         Sm (Renamed_Or_Alias, Node_Id),
+         Sm (Scope_Depth_Value, Unat),
+         Sm (SPARK_Aux_Pragma, Node_Id),
+         Sm (SPARK_Aux_Pragma_Inherited, Flag),
+         Sm (SPARK_Pragma, Node_Id),
+         Sm (SPARK_Pragma_Inherited, Flag),
+         Sm (Spec_Entity, Node_Id)));
+ 
+    Ab (Concurrent_Body_Kind, Entity_Kind,
+        (Sm (Ignore_SPARK_Mode_Pragmas, Flag),
+         Sm (SPARK_Pragma, Node_Id),
+         Sm (SPARK_Pragma_Inherited, Flag)));
+ 
+    Cc (E_Protected_Body, Concurrent_Body_Kind);
+        --  A protected body. This entity serves almost no function, since all
+        --  semantic analysis uses the protected entity (E_Protected_Type).
+ 
+    Cc (E_Task_Body, Concurrent_Body_Kind,
+        --  A task body. This entity serves almost no function, since all
+        --  semantic analysis uses the protected entity (E_Task_Type).
+        (Sm (Contract, Node_Id),
+         Sm (First_Entity, Node_Id)));
+ 
+    Cc (E_Subprogram_Body, Entity_Kind,
+        --  A subprogram body. Used when a subprogram has a separate declaration
+        --  to represent the entity for the body. This entity serves almost no
+        --  function, since all semantic analysis uses the subprogram entity
+        --  for the declaration (E_Function or E_Procedure).
+        (Sm (Anonymous_Masters, Elist_Id),
+         Sm (Contract, Node_Id),
+         Sm (Extra_Formals, Node_Id),
+         Sm (First_Entity, Node_Id),
+         Sm (Ignore_SPARK_Mode_Pragmas, Flag),
+         Sm (Interface_Name, Node_Id),
+         Sm (Last_Entity, Node_Id),
+         Sm (Renamed_Or_Alias, Node_Id),
+         Sm (Scope_Depth_Value, Unat),
+         Sm (SPARK_Pragma, Node_Id),
+         Sm (SPARK_Pragma_Inherited, Flag)));
+ 
+    --  Union types. These don't fit into the normal parent/child hierarchy
+    --  above.
+ 
+    Union (Anonymous_Access_Kind,
+           Children =>
+             (E_Anonymous_Access_Protected_Subprogram_Type,
+              E_Anonymous_Access_Subprogram_Type,
+              E_Anonymous_Access_Type));
+ 
+    Union (Assignable_Kind,
+           Children =>
+             (E_Variable,
+              E_Out_Parameter,
+              E_In_Out_Parameter));
+ 
+    Union (Digits_Kind,
+           Children =>
+             (Decimal_Fixed_Point_Kind,
+              Float_Kind));
+ 
+    Union (Discrete_Or_Fixed_Point_Kind,
+           Children =>
+             (Discrete_Kind,
+              Fixed_Point_Kind));
+ 
+    Union (Entry_Kind,
+           Children =>
+             (E_Entry,
+              E_Entry_Family));
+ 
+    Union (Evaluable_Kind,
+           Children =>
+             (Exception_Or_Object_Kind,
+              E_Enumeration_Literal,
+              E_Label,
+              Subprogram_Kind));
+    --  Kinds that represent values that can be evaluated
+ 
+    Union (Global_Name_Kind,
+           Children =>
+             (Constant_Or_Variable_Kind,
+              E_Exception,
+              E_Package,
+              Subprogram_Kind));
+    --  Kinds that can have an Interface_Name that corresponds to a global
+    --  (linker) name.
+ 
+    Union (Named_Access_Kind,
+           Children =>
+             (E_Access_Type,
+              E_Access_Subtype,
+              E_Access_Attribute_Type,
+              E_Allocator_Type,
+              E_General_Access_Type,
+              E_Access_Subprogram_Type,
+              E_Access_Protected_Subprogram_Type));
+ 
+    Union (Numeric_Kind,
+           Children =>
+             (Integer_Kind,
+              Fixed_Point_Kind,
+              Float_Kind));
+ 
+    Union (Record_Kind,
+           Children =>
+             (E_Class_Wide_Type,
+              E_Class_Wide_Subtype,
+              E_Record_Type,
+              E_Record_Subtype,
+              E_Record_Type_With_Private,
+              E_Record_Subtype_With_Private));
+ 
+    Union (Subprogram_Type_Or_Kind,
+           Children =>
+             (Subprogram_Kind,
+              E_Subprogram_Body,
+              E_Subprogram_Type));
+ 
+ end Gen_IL.Gen.Gen_Entities;
diff -Nrcpad gcc-11.3.0/gcc/ada/gen_il-gen-gen_nodes.adb gcc-12.1.0/gcc/ada/gen_il-gen-gen_nodes.adb
*** gcc-11.3.0/gcc/ada/gen_il-gen-gen_nodes.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gen_il-gen-gen_nodes.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,1733 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                  G E N _ I L . G E N . G E N _ N O D E S                 --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 2020-2022, Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ procedure Gen_IL.Gen.Gen_Nodes is
+ 
+    procedure Ab -- Short for "Abstract"
+      (T : Abstract_Node; Parent : Abstract_Type;
+       Fields : Field_Sequence := No_Fields)
+       renames Create_Abstract_Node_Type;
+    procedure Cc -- Short for "ConCrete"
+      (T : Concrete_Node; Parent : Abstract_Type;
+       Fields : Field_Sequence := No_Fields;
+       Nmake_Assert : String := "")
+       renames Create_Concrete_Node_Type;
+ 
+    function Sy -- Short for "Syntactic"
+      (Field : Node_Field; Field_Type : Type_Enum;
+       Default_Value : Field_Default_Value := No_Default;
+       Pre, Pre_Get, Pre_Set : String := "") return Field_Desc
+       renames Create_Syntactic_Field;
+    function Sm -- Short for "Semantic"
+      (Field : Field_Enum; Field_Type : Type_Enum;
+       Type_Only  : Type_Only_Enum := No_Type_Only;
+       Pre, Pre_Get, Pre_Set : String := "") return Field_Desc
+       renames Create_Semantic_Field;
+ 
+    procedure Union (T : Abstract_Node; Children : Type_Array)
+      renames Create_Node_Union_Type;
+ 
+ begin -- Gen_IL.Gen.Gen_Nodes
+    pragma Style_Checks ("M200");
+ 
+    Create_Root_Node_Type (Node_Kind,
+        (Sm (Nkind, Node_Kind_Type),
+         Sm (Sloc, Source_Ptr),
+         Sm (In_List, Flag),
+         Sm (Rewrite_Ins, Flag),
+         Sm (Comes_From_Source, Flag),
+         Sm (Analyzed, Flag),
+         Sm (Error_Posted, Flag),
+         Sm (Small_Paren_Count, Small_Paren_Count_Type),
+         Sm (Check_Actuals, Flag),
+         Sm (Has_Aspects, Flag),
+         Sm (Is_Ignored_Ghost_Node, Flag),
+         Sm (Link, Union_Id)));
+ 
+    Cc (N_Unused_At_Start, Node_Kind);
+ 
+    Ab (N_Representation_Clause, Node_Kind);
+ 
+    Cc (N_At_Clause, N_Representation_Clause,
+        (Sy (Identifier, Node_Id, Default_Empty),
+         Sy (Expression, Node_Id, Default_Empty)));
+ 
+    Cc (N_Component_Clause, N_Representation_Clause,
+        (Sy (Component_Name, Node_Id),
+         Sy (Position, Node_Id),
+         Sy (First_Bit, Node_Id),
+         Sy (Last_Bit, Node_Id)));
+ 
+    Cc (N_Enumeration_Representation_Clause, N_Representation_Clause,
+        (Sy (Identifier, Node_Id, Default_Empty),
+         Sy (Array_Aggregate, Node_Id),
+         Sm (Next_Rep_Item, Node_Id)));
+ 
+    Cc (N_Mod_Clause, N_Representation_Clause,
+        (Sy (Expression, Node_Id, Default_Empty),
+         Sy (Pragmas_Before, List_Id, Default_No_List)));
+ 
+    Cc (N_Record_Representation_Clause, N_Representation_Clause,
+        (Sy (Identifier, Node_Id, Default_Empty),
+         Sy (Mod_Clause, Node_Id, Default_Empty),
+         Sy (Component_Clauses, List_Id),
+         Sm (Next_Rep_Item, Node_Id)));
+ 
+    Cc (N_Attribute_Definition_Clause, N_Representation_Clause,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Chars, Name_Id, Default_No_Name),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (Address_Warning_Posted, Flag),
+         Sm (Check_Address_Alignment, Flag),
+         Sm (Entity_Or_Associated_Node, Node_Id), -- just Entity
+         Sm (From_Aspect_Specification, Flag),
+         Sm (From_At_Mod, Flag),
+         Sm (Is_Delayed_Aspect, Flag),
+         Sm (Next_Rep_Item, Node_Id)));
+ 
+    Cc (N_Empty, Node_Kind,
+        (Sy (Chars, Name_Id, Default_No_Name)));
+    --  The following getters and setters are called on Empty,
+    --  and are currently inherited from Node_Kind:
+    --
+    --  Set_Comes_From_Source
+    --  Set_Sloc
+    --
+    --  Comes_From_Source
+    --  Error_Posted
+    --  In_List
+    --  Link
+    --  Rewrite_Ins
+    --  Sloc
+    --  Small_Paren_Count
+ 
+    Cc (N_Pragma_Argument_Association, Node_Kind,
+        (Sy (Chars, Name_Id, Default_No_Name),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (Expression_Copy, Node_Id)));
+ 
+    Ab (N_Has_Etype, Node_Kind,
+        (Sm (Etype, Node_Id)));
+ 
+    Cc (N_Error, N_Has_Etype,
+        (Sy (Chars, Name_Id, Default_No_Name)));
+ 
+    Ab (N_Entity, N_Has_Etype,
+        (Sm (Next_Entity, Node_Id),
+         Sm (Scope, Node_Id)));
+ 
+    Cc (N_Defining_Character_Literal, N_Entity,
+        (Sy (Chars, Name_Id, Default_No_Name)));
+ 
+    Cc (N_Defining_Identifier, N_Entity,
+        (Sy (Chars, Name_Id, Default_No_Name)));
+ 
+    Cc (N_Defining_Operator_Symbol, N_Entity,
+        (Sy (Chars, Name_Id, Default_No_Name)));
+ 
+    Ab (N_Subexpr, N_Has_Etype,
+    --  Nodes with expression fields
+        (Sm (Assignment_OK, Flag),
+         Sm (Do_Range_Check, Flag),
+         Sm (Has_Dynamic_Length_Check, Flag),
+         Sm (Is_Controlling_Actual, Flag),
+         Sm (Is_Overloaded, Flag),
+         Sm (Is_Static_Expression, Flag),
+         Sm (Must_Not_Freeze, Flag),
+         Sm (Raises_Constraint_Error, Flag)));
+ 
+    Ab (N_Has_Entity, N_Subexpr,
+    --  Nodes that have Entity fields
+    --  Warning: DOES NOT INCLUDE N_Freeze_Entity, N_Freeze_Generic_Entity,
+    --  N_Aspect_Specification, or N_Attribute_Definition_Clause.
+        (Sm (Entity_Or_Associated_Node, Node_Id))); -- both
+ 
+    Cc (N_Expanded_Name, N_Has_Entity,
+        (Sy (Chars, Name_Id, Default_No_Name),
+         Sy (Prefix, Node_Id),
+         Sy (Selector_Name, Node_Id, Default_Empty),
+         Sm (Atomic_Sync_Required, Flag),
+         Sm (Has_Private_View, Flag),
+         Sm (Is_Elaboration_Checks_OK_Node, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Node, Flag),
+         Sm (Is_SPARK_Mode_On_Node, Flag),
+         Sm (Redundant_Use, Flag)));
+ 
+    Ab (N_Direct_Name, N_Has_Entity,
+        (Sm (Has_Private_View, Flag)));
+ 
+    Cc (N_Identifier, N_Direct_Name,
+        (Sy (Chars, Name_Id, Default_No_Name),
+         Sm (Atomic_Sync_Required, Flag),
+         Sm (Is_Elaboration_Checks_OK_Node, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Node, Flag),
+         Sm (Is_SPARK_Mode_On_Node, Flag),
+         Sm (Original_Discriminant, Node_Id),
+         Sm (Redundant_Use, Flag)));
+ 
+    Cc (N_Operator_Symbol, N_Direct_Name,
+        (Sy (Chars, Name_Id, Default_No_Name),
+         Sy (Strval, String_Id)));
+ 
+    Cc (N_Character_Literal, N_Direct_Name,
+        (Sy (Chars, Name_Id, Default_No_Name),
+         Sy (Char_Literal_Value, Unat)));
+ 
+    Ab (N_Op, N_Has_Entity,
+        (Sm (Do_Overflow_Check, Flag),
+         Sm (Has_Private_View, Flag)));
+ 
+    Ab (N_Binary_Op, N_Op);
+ 
+    Cc (N_Op_Add, N_Binary_Op,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Concat, N_Binary_Op,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sm (Is_Component_Left_Opnd, Flag),
+         Sm (Is_Component_Right_Opnd, Flag)));
+ 
+    Cc (N_Op_Expon, N_Binary_Op,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sm (Is_Power_Of_2_For_Shift, Flag)));
+ 
+    Cc (N_Op_Subtract, N_Binary_Op,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Ab (N_Multiplying_Operator, N_Binary_Op);
+ 
+    Cc (N_Op_Divide, N_Multiplying_Operator,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sm (Do_Division_Check, Flag),
+         Sm (Rounded_Result, Flag)));
+ 
+    Cc (N_Op_Mod, N_Multiplying_Operator,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sm (Do_Division_Check, Flag)));
+ 
+    Cc (N_Op_Multiply, N_Multiplying_Operator,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sm (Rounded_Result, Flag)));
+ 
+    Cc (N_Op_Rem, N_Multiplying_Operator,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sm (Do_Division_Check, Flag)));
+ 
+    Ab (N_Op_Boolean, N_Binary_Op);
+    --  Binary operators that take operands of a boolean type, and yield a
+    --  result of a boolean type.
+ 
+    Cc (N_Op_And, N_Op_Boolean,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sm (Do_Length_Check, Flag)));
+ 
+    Ab (N_Op_Compare, N_Op_Boolean);
+ 
+    Cc (N_Op_Eq, N_Op_Compare,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Ge, N_Op_Compare,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Gt, N_Op_Compare,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Le, N_Op_Compare,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Lt, N_Op_Compare,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Ne, N_Op_Compare,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Or, N_Op_Boolean,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sm (Do_Length_Check, Flag)));
+ 
+    Cc (N_Op_Xor, N_Op_Boolean,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sm (Do_Length_Check, Flag)));
+ 
+    Ab (N_Op_Shift, N_Binary_Op,
+        (Sm (Shift_Count_OK, Flag)));
+ 
+    Cc (N_Op_Rotate_Left, N_Op_Shift,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Rotate_Right, N_Op_Shift,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Shift_Left, N_Op_Shift,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Shift_Right, N_Op_Shift,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Shift_Right_Arithmetic, N_Op_Shift,
+        (Sm (Chars, Name_Id),
+         Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Ab (N_Unary_Op, N_Op);
+ 
+    Cc (N_Op_Abs, N_Unary_Op,
+        (Sm (Chars, Name_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Minus, N_Unary_Op,
+        (Sm (Chars, Name_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Not, N_Unary_Op,
+        (Sm (Chars, Name_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Op_Plus, N_Unary_Op,
+        (Sm (Chars, Name_Id),
+         Sy (Right_Opnd, Node_Id)));
+ 
+    Cc (N_Attribute_Reference, N_Has_Entity,
+        (Sy (Prefix, Node_Id),
+         Sy (Attribute_Name, Name_Id),
+         Sy (Expressions, List_Id, Default_No_List),
+         Sm (Do_Overflow_Check, Flag),
+         Sm (Header_Size_Added, Flag),
+         Sm (Is_Elaboration_Checks_OK_Node, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Node, Flag),
+         Sm (Is_SPARK_Mode_On_Node, Flag),
+         Sm (Must_Be_Byte_Aligned, Flag),
+         Sm (Redundant_Use, Flag)));
+ 
+    Ab (N_Membership_Test, N_Subexpr);
+ 
+    Cc (N_In, N_Membership_Test,
+        (Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sy (Alternatives, List_Id, Default_No_List),
+         Sy (No_Minimize_Eliminate, Flag)));
+ 
+    Cc (N_Not_In, N_Membership_Test,
+        (Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sy (Alternatives, List_Id, Default_No_List),
+         Sy (No_Minimize_Eliminate, Flag)));
+ 
+    Ab (N_Short_Circuit, N_Subexpr);
+ 
+    Cc (N_And_Then, N_Short_Circuit,
+        (Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sm (Actions, List_Id)));
+ 
+    Cc (N_Or_Else, N_Short_Circuit,
+        (Sy (Left_Opnd, Node_Id),
+         Sy (Right_Opnd, Node_Id),
+         Sm (Actions, List_Id)));
+ 
+    Ab (N_Subprogram_Call, N_Subexpr,
+        (Sm (Controlling_Argument, Node_Id),
+         Sm (First_Named_Actual, Node_Id),
+         Sm (Is_Elaboration_Checks_OK_Node, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Node, Flag),
+         Sm (Is_Known_Guaranteed_ABE, Flag),
+         Sm (Is_SPARK_Mode_On_Node, Flag),
+         Sm (No_Elaboration_Check, Flag)));
+ 
+    Cc (N_Function_Call, N_Subprogram_Call,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Parameter_Associations, List_Id, Default_No_List),
+         Sm (Is_Expanded_Build_In_Place_Call, Flag),
+         Sm (No_Side_Effect_Removal, Flag)));
+ 
+    Cc (N_Procedure_Call_Statement, N_Subprogram_Call,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Parameter_Associations, List_Id, Default_No_List)));
+ 
+    Ab (N_Raise_xxx_Error, N_Subexpr);
+ 
+    Cc (N_Raise_Constraint_Error, N_Raise_xxx_Error,
+        (Sy (Condition, Node_Id, Default_Empty),
+         Sy (Reason, Unat)));
+ 
+    Cc (N_Raise_Program_Error, N_Raise_xxx_Error,
+        (Sy (Condition, Node_Id, Default_Empty),
+         Sy (Reason, Unat)));
+ 
+    Cc (N_Raise_Storage_Error, N_Raise_xxx_Error,
+        (Sy (Condition, Node_Id, Default_Empty),
+         Sy (Reason, Unat)));
+ 
+    Ab (N_Numeric_Or_String_Literal, N_Subexpr);
+ 
+    Cc (N_Integer_Literal, N_Numeric_Or_String_Literal,
+        (Sy (Intval, Valid_Uint),
+         Sm (Original_Entity, Node_Id),
+         Sm (Print_In_Hex, Flag)));
+ 
+    Cc (N_Real_Literal, N_Numeric_Or_String_Literal,
+        (Sy (Realval, Ureal),
+         Sm (Corresponding_Integer_Value, Valid_Uint),
+         Sm (Is_Machine_Number, Flag),
+         Sm (Original_Entity, Node_Id)));
+ 
+    Cc (N_String_Literal, N_Numeric_Or_String_Literal,
+        (Sy (Strval, String_Id),
+         Sy (Is_Folded_In_Parser, Flag),
+         Sm (Has_Wide_Character, Flag),
+         Sm (Has_Wide_Wide_Character, Flag)));
+ 
+    Cc (N_Explicit_Dereference, N_Subexpr,
+        (Sy (Prefix, Node_Id),
+         Sm (Actual_Designated_Subtype, Node_Id),
+         Sm (Atomic_Sync_Required, Flag),
+         Sm (Has_Dereference_Action, Flag)));
+ 
+    Cc (N_Expression_With_Actions, N_Subexpr,
+        (Sy (Actions, List_Id, Default_No_List),
+         Sy (Expression, Node_Id, Default_Empty)));
+ 
+    Cc (N_If_Expression, N_Subexpr,
+        (Sy (Expressions, List_Id, Default_No_List),
+         Sy (Is_Elsif, Flag),
+         Sm (Do_Overflow_Check, Flag),
+         Sm (Else_Actions, List_Id),
+         Sm (Then_Actions, List_Id)));
+ 
+    Cc (N_Indexed_Component, N_Subexpr,
+        (Sy (Prefix, Node_Id),
+         Sy (Expressions, List_Id, Default_No_List),
+         Sm (Atomic_Sync_Required, Flag),
+         Sm (Generalized_Indexing, Node_Id)));
+ 
+    Cc (N_Null, N_Subexpr);
+ 
+    Cc (N_Qualified_Expression, N_Subexpr,
+        (Sy (Subtype_Mark, Node_Id, Default_Empty),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (Is_Qualified_Universal_Literal, Flag)));
+ 
+    Cc (N_Quantified_Expression, N_Subexpr,
+        (Sy (Iterator_Specification, Node_Id, Default_Empty),
+         Sy (Loop_Parameter_Specification, Node_Id, Default_Empty),
+         Sy (Condition, Node_Id, Default_Empty),
+         Sy (All_Present, Flag)));
+ 
+    Cc (N_Aggregate, N_Subexpr,
+        (Sy (Expressions, List_Id, Default_No_List),
+         Sy (Component_Associations, List_Id, Default_No_List),
+         Sy (Null_Record_Present, Flag),
+         Sy (Is_Parenthesis_Aggregate, Flag),
+         Sy (Is_Homogeneous_Aggregate, Flag),
+         Sy (Is_Enum_Array_Aggregate, Flag),
+         Sm (Aggregate_Bounds, Node_Id),
+         Sm (Entity_Or_Associated_Node, Node_Id), -- just Associated_Node
+         Sm (Compile_Time_Known_Aggregate, Flag),
+         Sm (Expansion_Delayed, Flag),
+         Sm (Has_Self_Reference, Flag)));
+ 
+    Cc (N_Allocator, N_Subexpr,
+        (Sy (Expression, Node_Id, Default_Empty),
+         Sy (Subpool_Handle_Name, Node_Id, Default_Empty),
+         Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sm (Alloc_For_BIP_Return, Flag),
+         Sm (Do_Storage_Check, Flag),
+         Sm (Is_Dynamic_Coextension, Flag),
+         Sm (Is_Static_Coextension, Flag),
+         Sm (No_Initialization, Flag),
+         Sm (Procedure_To_Call, Node_Id),
+         Sm (Storage_Pool, Node_Id)));
+ 
+    Cc (N_Case_Expression, N_Subexpr,
+        (Sy (Expression, Node_Id, Default_Empty),
+         Sy (Alternatives, List_Id, Default_No_List),
+         Sm (Do_Overflow_Check, Flag)));
+ 
+    Cc (N_Delta_Aggregate, N_Subexpr,
+        (Sy (Expression, Node_Id, Default_Empty),
+         Sy (Component_Associations, List_Id, Default_No_List)));
+ 
+    Cc (N_Extension_Aggregate, N_Subexpr,
+        (Sy (Ancestor_Part, Node_Id),
+         Sy (Expressions, List_Id, Default_No_List),
+         Sy (Component_Associations, List_Id, Default_No_List),
+         Sy (Null_Record_Present, Flag),
+         Sm (Entity_Or_Associated_Node, Node_Id), -- just Associated_Node
+         Sm (Expansion_Delayed, Flag),
+         Sm (Has_Self_Reference, Flag)));
+ 
+    Cc (N_Raise_Expression, N_Subexpr,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (Convert_To_Return_False, Flag)));
+ 
+    Cc (N_Range, N_Subexpr,
+        (Sy (Low_Bound, Node_Id),
+         Sy (High_Bound, Node_Id),
+         Sy (Includes_Infinities, Flag)));
+ 
+    Cc (N_Reference, N_Subexpr,
+        (Sy (Prefix, Node_Id)));
+ 
+    Cc (N_Selected_Component, N_Subexpr,
+        (Sy (Prefix, Node_Id),
+         Sy (Selector_Name, Node_Id, Default_Empty),
+         Sm (Atomic_Sync_Required, Flag),
+         Sm (Entity_Or_Associated_Node, Node_Id), -- just Associated_Node
+         Sm (Do_Discriminant_Check, Flag),
+         Sm (Is_In_Discriminant_Check, Flag),
+         Sm (Is_Prefixed_Call, Flag)));
+ 
+    Cc (N_Slice, N_Subexpr,
+        (Sy (Prefix, Node_Id),
+         Sy (Discrete_Range, Node_Id)));
+ 
+    Cc (N_Target_Name, N_Subexpr);
+ 
+    Cc (N_Type_Conversion, N_Subexpr,
+        (Sy (Subtype_Mark, Node_Id, Default_Empty),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (Conversion_OK, Flag),
+         Sm (Do_Discriminant_Check, Flag),
+         Sm (Do_Length_Check, Flag),
+         Sm (Do_Overflow_Check, Flag),
+         Sm (Float_Truncate, Flag),
+         Sm (Rounded_Result, Flag)));
+ 
+    Cc (N_Unchecked_Expression, N_Subexpr,
+        (Sy (Expression, Node_Id, Default_Empty)));
+ 
+    Cc (N_Unchecked_Type_Conversion, N_Subexpr,
+        (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.
+ 
+    Cc (N_Subtype_Indication, N_Has_Etype,
+        (Sy (Subtype_Mark, Node_Id, Default_Empty),
+         Sy (Constraint, Node_Id),
+         Sm (Must_Not_Freeze, Flag)));
+ 
+    Ab (N_Declaration, Node_Kind);
+    --  Note: this includes all constructs normally thought of as declarations
+    --  except those that are separately grouped in N_Later_Decl_Item. But
+    --  Declaration_Node may return yet more node types; see N_Is_Decl below.
+ 
+    Cc (N_Component_Declaration, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Component_Definition, Node_Id),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (More_Ids, Flag),
+         Sm (Prev_Ids, Flag)));
+ 
+    Cc (N_Entry_Declaration, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Discrete_Subtype_Definition, Node_Id, Default_Empty),
+         Sy (Parameter_Specifications, List_Id, Default_No_List),
+         Sy (Must_Override, Flag),
+         Sy (Must_Not_Override, Flag),
+         Sm (Corresponding_Body, Node_Id)));
+ 
+    Cc (N_Expression_Function, N_Declaration,
+        (Sy (Specification, Node_Id),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (Corresponding_Spec, Node_Id)));
+ 
+    Cc (N_Formal_Object_Declaration, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (In_Present, Flag),
+         Sy (Out_Present, Flag),
+         Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (Subtype_Mark, Node_Id, Default_Empty),
+         Sy (Access_Definition, Node_Id, Default_Empty),
+         Sy (Default_Expression, Node_Id, Default_Empty),
+         Sm (More_Ids, Flag),
+         Sm (Prev_Ids, Flag)));
+ 
+    Cc (N_Formal_Type_Declaration, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Formal_Type_Definition, Node_Id),
+         Sy (Discriminant_Specifications, List_Id, Default_No_List),
+         Sy (Unknown_Discriminants_Present, Flag),
+         Sy (Default_Subtype_Mark, Node_Id)));
+ 
+    Cc (N_Full_Type_Declaration, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Discriminant_Specifications, List_Id, Default_No_List),
+         Sy (Type_Definition, Node_Id),
+         Sm (Discr_Check_Funcs_Built, Flag),
+         Sm (Incomplete_View, Node_Id)));
+ 
+    Cc (N_Incomplete_Type_Declaration, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Discriminant_Specifications, List_Id, Default_No_List),
+         Sy (Unknown_Discriminants_Present, Flag),
+         Sy (Tagged_Present, Flag),
+         Sm (Premature_Use, Node_Id)));
+ 
+    Cc (N_Iterator_Specification, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Name, Node_Id, Default_Empty),
+         Sy (Reverse_Present, Flag),
+         Sy (Of_Present, Flag),
+         Sy (Iterator_Filter, Node_Id, Default_Empty),
+         Sy (Subtype_Indication, Node_Id, Default_Empty)));
+ 
+    Cc (N_Loop_Parameter_Specification, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Reverse_Present, Flag),
+         Sy (Iterator_Filter, Node_Id, Default_Empty),
+         Sy (Discrete_Subtype_Definition, Node_Id, Default_Empty)));
+ 
+    Cc (N_Object_Declaration, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Aliased_Present, Flag),
+         Sy (Constant_Present, Flag),
+         Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (Object_Definition, Node_Id),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sy (Has_Init_Expression, Flag),
+         Sm (Assignment_OK, Flag),
+         Sm (Corresponding_Generic_Association, Node_Id),
+         Sm (Exception_Junk, Flag),
+         Sm (Handler_List_Entry, Node_Id),
+         Sm (Is_Subprogram_Descriptor, Flag),
+         Sm (More_Ids, Flag),
+         Sm (No_Initialization, Flag),
+         Sm (Prev_Ids, Flag),
+         Sm (Suppress_Assignment_Checks, Flag)));
+ 
+    Cc (N_Protected_Type_Declaration, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Discriminant_Specifications, List_Id, Default_No_List),
+         Sy (Interface_List, List_Id, Default_No_List),
+         Sy (Protected_Definition, Node_Id),
+         Sm (Corresponding_Body, Node_Id)));
+ 
+    Cc (N_Private_Extension_Declaration, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Discriminant_Specifications, List_Id, Default_No_List),
+         Sy (Unknown_Discriminants_Present, Flag),
+         Sy (Abstract_Present, Flag),
+         Sy (Limited_Present, Flag),
+         Sy (Synchronized_Present, Flag),
+         Sy (Subtype_Indication, Node_Id, Default_Empty),
+         Sy (Interface_List, List_Id, Default_No_List),
+         Sm (Uninitialized_Variable, Node_Id)));
+ 
+    Cc (N_Private_Type_Declaration, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Discriminant_Specifications, List_Id, Default_No_List),
+         Sy (Unknown_Discriminants_Present, Flag),
+         Sy (Abstract_Present, Flag),
+         Sy (Tagged_Present, Flag),
+         Sy (Limited_Present, Flag)));
+ 
+    Cc (N_Subtype_Declaration, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (Subtype_Indication, Node_Id, Default_Empty),
+         Sm (Exception_Junk, Flag),
+         Sm (Generic_Parent_Type, Node_Id)));
+ 
+    Ab (N_Subprogram_Specification, N_Declaration,
+        (Sm (Generic_Parent, Node_Id)));
+ 
+    Cc (N_Function_Specification, N_Subprogram_Specification,
+        (Sy (Defining_Unit_Name, Node_Id),
+         Sy (Parameter_Specifications, List_Id, Default_No_List),
+         Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (Result_Definition, Node_Id),
+         Sy (Must_Override, Flag),
+         Sy (Must_Not_Override, Flag)));
+ 
+    Cc (N_Procedure_Specification, N_Subprogram_Specification,
+        (Sy (Defining_Unit_Name, Node_Id),
+         Sy (Parameter_Specifications, List_Id, Default_No_List),
+         Sy (Null_Present, Flag),
+         Sy (Must_Override, Flag),
+         Sy (Must_Not_Override, Flag),
+         Sm (Null_Statement, Node_Id)));
+ 
+    Ab (N_Access_To_Subprogram_Definition, Node_Kind);
+ 
+    Cc (N_Access_Function_Definition, N_Access_To_Subprogram_Definition,
+        (Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (Null_Exclusion_In_Return_Present, Flag),
+         Sy (Protected_Present, Flag),
+         Sy (Parameter_Specifications, List_Id, Default_No_List),
+         Sy (Result_Definition, Node_Id)));
+ 
+    Cc (N_Access_Procedure_Definition, N_Access_To_Subprogram_Definition,
+        (Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (Protected_Present, Flag),
+         Sy (Parameter_Specifications, List_Id, Default_No_List)));
+ 
+    Ab (N_Later_Decl_Item, Node_Kind);
+    --  Note: this is Ada 83 relevant only (see Ada 83 RM 3.9 (2)) and includes
+    --  only those items which can appear as later declarative items. This also
+    --  includes N_Implicit_Label_Declaration which is not specifically in the
+    --  grammar but may appear as a valid later declarative items. It does NOT
+    --  include N_Pragma which can also appear among later declarative items.
+    --  It does however include N_Protected_Body, which is a bit peculiar, but
+    --  harmless since this cannot appear in Ada 83 mode anyway.
+ 
+    Cc (N_Task_Type_Declaration, N_Later_Decl_Item,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Discriminant_Specifications, List_Id, Default_No_List),
+         Sy (Interface_List, List_Id, Default_No_List),
+         Sy (Task_Definition, Node_Id, Default_Empty),
+         Sm (Corresponding_Body, Node_Id)));
+ 
+    Ab (N_Body_Stub, N_Later_Decl_Item,
+        (Sm (Corresponding_Body, Node_Id),
+         Sm (Corresponding_Spec_Of_Stub, Node_Id),
+         Sm (Library_Unit, Node_Id)));
+ 
+    Cc (N_Package_Body_Stub, N_Body_Stub,
+        (Sy (Defining_Identifier, Node_Id)));
+ 
+    Cc (N_Protected_Body_Stub, N_Body_Stub,
+        (Sy (Defining_Identifier, Node_Id)));
+ 
+    Cc (N_Subprogram_Body_Stub, N_Body_Stub,
+        (Sy (Specification, Node_Id)));
+ 
+    Cc (N_Task_Body_Stub, N_Body_Stub,
+        (Sy (Defining_Identifier, Node_Id)));
+ 
+    Ab (N_Generic_Instantiation, N_Later_Decl_Item,
+        (Sm (Instance_Spec, Node_Id),
+         Sm (Is_Declaration_Level_Node, Flag),
+         Sm (Is_Elaboration_Checks_OK_Node, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Node, Flag),
+         Sm (Is_Known_Guaranteed_ABE, Flag),
+         Sm (Is_SPARK_Mode_On_Node, Flag),
+         Sm (Parent_Spec, Node_Id)));
+ 
+    Ab (N_Subprogram_Instantiation, N_Generic_Instantiation);
+ 
+    Cc (N_Function_Instantiation, N_Subprogram_Instantiation,
+        (Sy (Defining_Unit_Name, Node_Id),
+         Sy (Name, Node_Id, Default_Empty),
+         Sy (Generic_Associations, List_Id, Default_No_List),
+         Sy (Must_Override, Flag),
+         Sy (Must_Not_Override, Flag)));
+ 
+    Cc (N_Procedure_Instantiation, N_Subprogram_Instantiation,
+        (Sy (Defining_Unit_Name, Node_Id),
+         Sy (Name, Node_Id, Default_Empty),
+         Sy (Generic_Associations, List_Id, Default_No_List),
+         Sy (Must_Override, Flag),
+         Sy (Must_Not_Override, Flag)));
+ 
+    Cc (N_Package_Instantiation, N_Generic_Instantiation,
+        (Sy (Defining_Unit_Name, Node_Id),
+         Sy (Name, Node_Id, Default_Empty),
+         Sy (Generic_Associations, List_Id, Default_No_List)));
+ 
+    Ab (N_Proper_Body, N_Later_Decl_Item,
+        (Sm (Corresponding_Spec, Node_Id),
+         Sm (Was_Originally_Stub, Flag)));
+ 
+    Ab (N_Unit_Body, N_Proper_Body);
+ 
+    Cc (N_Package_Body, N_Unit_Body,
+        (Sy (Defining_Unit_Name, Node_Id),
+         Sy (Declarations, List_Id, Default_No_List),
+         Sy (Handled_Statement_Sequence, Node_Id, Default_Empty)));
+ 
+    Cc (N_Subprogram_Body, N_Unit_Body,
+        (Sy (Specification, Node_Id),
+         Sy (Declarations, List_Id, Default_No_List),
+         Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
+         Sy (Bad_Is_Detected, Flag),
+         Sm (Activation_Chain_Entity, Node_Id),
+         Sm (Acts_As_Spec, Flag),
+         Sm (Corresponding_Entry_Body, Node_Id),
+         Sm (Do_Storage_Check, Flag),
+         Sm (Has_Relative_Deadline_Pragma, Flag),
+         Sm (Is_Entry_Barrier_Function, Flag),
+         Sm (Is_Protected_Subprogram_Body, Flag),
+         Sm (Is_Task_Body_Procedure, Flag),
+         Sm (Is_Task_Master, Flag),
+         Sm (Was_Attribute_Reference, Flag),
+         Sm (Was_Expression_Function, Flag)));
+ 
+    Cc (N_Protected_Body, N_Proper_Body,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Declarations, List_Id, Default_No_List),
+         Sy (End_Label, Node_Id, Default_Empty)));
+ 
+    Cc (N_Task_Body, N_Proper_Body,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Declarations, List_Id, Default_No_List),
+         Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
+         Sm (Activation_Chain_Entity, Node_Id),
+         Sm (Is_Task_Master, Flag)));
+ 
+    Cc (N_Implicit_Label_Declaration, N_Later_Decl_Item,
+        (Sy (Defining_Identifier, Node_Id),
+         Sm (Label_Construct, Node_Id)));
+ 
+    Cc (N_Package_Declaration, N_Later_Decl_Item,
+        (Sy (Specification, Node_Id),
+         Sm (Activation_Chain_Entity, Node_Id),
+         Sm (Corresponding_Body, Node_Id),
+         Sm (Parent_Spec, Node_Id)));
+ 
+    Cc (N_Single_Task_Declaration, N_Later_Decl_Item,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Interface_List, List_Id, Default_No_List),
+         Sy (Task_Definition, Node_Id, Default_Empty)));
+ 
+    Cc (N_Subprogram_Declaration, N_Later_Decl_Item,
+        (Sy (Specification, Node_Id),
+         Sm (Body_To_Inline, Node_Id),
+         Sm (Corresponding_Body, Node_Id),
+         Sm (Is_Entry_Barrier_Function, Flag),
+         Sm (Is_Task_Body_Procedure, Flag),
+         Sm (Parent_Spec, Node_Id)));
+ 
+    Cc (N_Use_Package_Clause, N_Later_Decl_Item,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Is_Effective_Use_Clause, Flag),
+         Sm (Entity_Or_Associated_Node, Node_Id), -- just Associated_Node
+         Sm (Hidden_By_Use_Clause, Elist_Id),
+         Sm (More_Ids, Flag),
+         Sm (Next_Use_Clause, Node_Id),
+         Sm (Prev_Ids, Flag),
+         Sm (Prev_Use_Clause, Node_Id)));
+ 
+    Ab (N_Generic_Declaration, N_Later_Decl_Item,
+        (Sm (Corresponding_Body, Node_Id),
+         Sm (Parent_Spec, Node_Id)));
+ 
+    Cc (N_Generic_Package_Declaration, N_Generic_Declaration,
+        (Sy (Specification, Node_Id),
+         Sy (Generic_Formal_Declarations, List_Id),
+         Sm (Activation_Chain_Entity, Node_Id)));
+ 
+    Cc (N_Generic_Subprogram_Declaration, N_Generic_Declaration,
+        (Sy (Specification, Node_Id),
+         Sy (Generic_Formal_Declarations, List_Id)));
+ 
+    Ab (N_Array_Type_Definition, Node_Kind);
+ 
+    Cc (N_Constrained_Array_Definition, N_Array_Type_Definition,
+        (Sy (Discrete_Subtype_Definitions, List_Id),
+         Sy (Component_Definition, Node_Id)));
+ 
+    Cc (N_Unconstrained_Array_Definition, N_Array_Type_Definition,
+        (Sy (Subtype_Marks, List_Id),
+         Sy (Component_Definition, Node_Id)));
+ 
+    Ab (N_Renaming_Declaration, Node_Kind);
+ 
+    Cc (N_Exception_Renaming_Declaration, N_Renaming_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Name, Node_Id, Default_Empty)));
+ 
+    Cc (N_Object_Renaming_Declaration, N_Renaming_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (Subtype_Mark, Node_Id, Default_Empty),
+         Sy (Access_Definition, Node_Id, Default_Empty),
+         Sy (Name, Node_Id, Default_Empty),
+         Sm (Corresponding_Generic_Association, Node_Id)));
+ 
+    Cc (N_Package_Renaming_Declaration, N_Renaming_Declaration,
+        (Sy (Defining_Unit_Name, Node_Id),
+         Sy (Name, Node_Id, Default_Empty),
+         Sm (Parent_Spec, Node_Id)));
+ 
+    Cc (N_Subprogram_Renaming_Declaration, N_Renaming_Declaration,
+        (Sy (Specification, Node_Id),
+         Sy (Name, Node_Id, Default_Empty),
+         Sm (Corresponding_Formal_Spec, Node_Id),
+         Sm (Corresponding_Spec, Node_Id),
+         Sm (From_Default, Flag),
+         Sm (Parent_Spec, Node_Id)));
+ 
+    Ab (N_Generic_Renaming_Declaration, N_Renaming_Declaration,
+        (Sm (Parent_Spec, Node_Id)));
+ 
+    Cc (N_Generic_Function_Renaming_Declaration, N_Generic_Renaming_Declaration,
+        (Sy (Defining_Unit_Name, Node_Id),
+         Sy (Name, Node_Id, Default_Empty)));
+ 
+    Cc (N_Generic_Package_Renaming_Declaration, N_Generic_Renaming_Declaration,
+        (Sy (Defining_Unit_Name, Node_Id),
+         Sy (Name, Node_Id, Default_Empty)));
+ 
+    Cc (N_Generic_Procedure_Renaming_Declaration, N_Generic_Renaming_Declaration,
+        (Sy (Defining_Unit_Name, Node_Id),
+         Sy (Name, Node_Id, Default_Empty)));
+ 
+    Ab (N_Statement_Other_Than_Procedure_Call, Node_Kind);
+    --  Note that this includes all statement types except for the cases of the
+    --  N_Procedure_Call_Statement which is considered to be a subexpression
+    --  (since overloading is possible, so it needs to go through the normal
+    --  overloading resolution for expressions).
+ 
+    Cc (N_Abort_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Names, List_Id)));
+ 
+    Cc (N_Accept_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Entry_Direct_Name, Node_Id),
+         Sy (Entry_Index, Node_Id, Default_Empty),
+         Sy (Parameter_Specifications, List_Id, Default_No_List),
+         Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
+         Sy (Declarations, List_Id, Default_No_List)));
+ 
+    Cc (N_Assignment_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (Backwards_OK, Flag),
+         Sm (Componentwise_Assignment, Flag),
+         Sm (Do_Discriminant_Check, Flag),
+         Sm (Do_Length_Check, Flag),
+         Sm (Forwards_OK, Flag),
+         Sm (Has_Target_Names, Flag),
+         Sm (Is_Elaboration_Checks_OK_Node, Flag),
+         Sm (Is_Elaboration_Code, Flag),
+         Sm (Is_SPARK_Mode_On_Node, Flag),
+         Sm (No_Ctrl_Actions, Flag),
+         Sm (Suppress_Assignment_Checks, Flag)));
+ 
+    Cc (N_Asynchronous_Select, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Triggering_Alternative, Node_Id),
+         Sy (Abortable_Part, Node_Id)));
+ 
+    Cc (N_Block_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Identifier, Node_Id, Default_Empty),
+         Sy (Declarations, List_Id, Default_No_List),
+         Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
+         Sy (Has_Created_Identifier, Flag),
+         Sy (Is_Asynchronous_Call_Block, Flag),
+         Sy (Is_Task_Allocation_Block, Flag),
+         Sm (Activation_Chain_Entity, Node_Id),
+         Sm (Cleanup_Actions, List_Id),
+         Sm (Exception_Junk, Flag),
+         Sm (Is_Abort_Block, Flag),
+         Sm (Is_Finalization_Wrapper, Flag),
+         Sm (Is_Initialization_Block, Flag),
+         Sm (Is_Task_Master, Flag)));
+ 
+    Cc (N_Case_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Expression, Node_Id, Default_Empty),
+         Sy (Alternatives, List_Id, Default_No_List),
+         Sy (End_Span, Unat, Default_Uint_0),
+         Sm (From_Conditional_Expression, Flag)));
+ 
+    Cc (N_Code_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Expression, Node_Id, Default_Empty)));
+ 
+    Cc (N_Compound_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Actions, List_Id, Default_No_List)));
+ 
+    Cc (N_Conditional_Entry_Call, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Entry_Call_Alternative, Node_Id),
+         Sy (Else_Statements, List_Id, Default_No_List)));
+ 
+    Ab (N_Delay_Statement, N_Statement_Other_Than_Procedure_Call);
+ 
+    Cc (N_Delay_Relative_Statement, N_Delay_Statement,
+        (Sy (Expression, Node_Id, Default_Empty)));
+ 
+    Cc (N_Delay_Until_Statement, N_Delay_Statement,
+        (Sy (Expression, Node_Id, Default_Empty)));
+ 
+    Cc (N_Entry_Call_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Parameter_Associations, List_Id, Default_No_List),
+         Sm (First_Named_Actual, Node_Id),
+         Sm (Is_Elaboration_Checks_OK_Node, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Node, Flag),
+         Sm (Is_SPARK_Mode_On_Node, Flag)));
+ 
+    Cc (N_Free_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Expression, Node_Id, Default_Empty),
+         Sm (Actual_Designated_Subtype, Node_Id),
+         Sm (Procedure_To_Call, Node_Id),
+         Sm (Storage_Pool, Node_Id)));
+ 
+    Cc (N_Goto_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sm (Exception_Junk, Flag)));
+ 
+    Cc (N_Goto_When_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Condition, Node_Id, Default_Empty)));
+ 
+    Cc (N_Loop_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Identifier, Node_Id, Default_Empty),
+         Sy (Iteration_Scheme, Node_Id, Default_Empty),
+         Sy (Statements, List_Id, Default_Empty_List),
+         Sy (End_Label, Node_Id, Default_Empty),
+         Sy (Has_Created_Identifier, Flag),
+         Sy (Is_Null_Loop, Flag),
+         Sy (Suppress_Loop_Warnings, Flag)));
+ 
+    Cc (N_Null_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sm (Next_Rep_Item, Node_Id)));
+ 
+    Cc (N_Raise_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (From_At_End, Flag)));
+ 
+    Cc (N_Raise_When_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sy (Condition, Node_Id, Default_Empty)));
+ 
+    Cc (N_Requeue_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Abort_Present, Flag),
+         Sm (Is_Elaboration_Checks_OK_Node, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Node, Flag),
+         Sm (Is_SPARK_Mode_On_Node, Flag)));
+ 
+    Cc (N_Simple_Return_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Expression, Node_Id, Default_Empty),
+         Sm (By_Ref, Flag),
+         Sm (Comes_From_Extended_Return_Statement, Flag),
+         Sm (Procedure_To_Call, Node_Id),
+         Sm (Return_Statement_Entity, Node_Id),
+         Sm (Storage_Pool, Node_Id)));
+ 
+    Cc (N_Extended_Return_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Return_Object_Declarations, List_Id),
+         Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
+         Sm (By_Ref, Flag),
+         Sm (Procedure_To_Call, Node_Id),
+         Sm (Return_Statement_Entity, Node_Id),
+         Sm (Storage_Pool, Node_Id)));
+ 
+    Cc (N_Return_When_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Expression, Node_Id, Default_Empty),
+         Sy (Condition, Node_Id, Default_Empty)));
+ 
+    Cc (N_Selective_Accept, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Select_Alternatives, List_Id),
+         Sy (Else_Statements, List_Id, Default_No_List)));
+ 
+    Cc (N_Timed_Entry_Call, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Entry_Call_Alternative, Node_Id),
+         Sy (Delay_Alternative, Node_Id)));
+ 
+    Cc (N_Exit_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Condition, Node_Id, Default_Empty),
+         Sm (Next_Exit_Statement, Node_Id)));
+ 
+    Cc (N_If_Statement, N_Statement_Other_Than_Procedure_Call,
+        (Sy (Condition, Node_Id, Default_Empty),
+         Sy (Then_Statements, List_Id),
+         Sy (Elsif_Parts, List_Id, Default_No_List),
+         Sy (Else_Statements, List_Id, Default_No_List),
+         Sy (End_Span, Unat, Default_Uint_0),
+         Sm (From_Conditional_Expression, Flag)));
+ 
+    Cc (N_Accept_Alternative, Node_Kind,
+        (Sy (Accept_Statement, Node_Id),
+         Sy (Condition, Node_Id, Default_Empty),
+         Sy (Statements, List_Id, Default_Empty_List),
+         Sy (Pragmas_Before, List_Id, Default_No_List),
+         Sm (Accept_Handler_Records, List_Id)));
+ 
+    Cc (N_Delay_Alternative, Node_Kind,
+        (Sy (Delay_Statement, Node_Id),
+         Sy (Condition, Node_Id, Default_Empty),
+         Sy (Statements, List_Id, Default_Empty_List),
+         Sy (Pragmas_Before, List_Id, Default_No_List)));
+ 
+    Cc (N_Elsif_Part, Node_Kind,
+        (Sy (Condition, Node_Id, Default_Empty),
+         Sy (Then_Statements, List_Id),
+         Sm (Condition_Actions, List_Id)));
+ 
+    Cc (N_Entry_Body_Formal_Part, Node_Kind,
+        (Sy (Entry_Index_Specification, Node_Id, Default_Empty),
+         Sy (Parameter_Specifications, List_Id, Default_No_List),
+         Sy (Condition, Node_Id, Default_Empty)));
+ 
+    Cc (N_Iteration_Scheme, Node_Kind,
+        (Sy (Condition, Node_Id, Default_Empty),
+         Sy (Iterator_Specification, Node_Id, Default_Empty),
+         Sy (Loop_Parameter_Specification, Node_Id, Default_Empty),
+         Sm (Condition_Actions, List_Id)));
+ 
+    Cc (N_Terminate_Alternative, Node_Kind,
+        (Sy (Condition, Node_Id, Default_Empty),
+         Sy (Pragmas_Before, List_Id, Default_No_List),
+         Sy (Pragmas_After, List_Id, Default_No_List)));
+ 
+    Ab (N_Formal_Subprogram_Declaration, Node_Kind);
+ 
+    Cc (N_Formal_Abstract_Subprogram_Declaration, N_Formal_Subprogram_Declaration,
+        (Sy (Specification, Node_Id),
+         Sy (Default_Name, Node_Id, Default_Empty),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sy (Box_Present, Flag)));
+ 
+    Cc (N_Formal_Concrete_Subprogram_Declaration, N_Formal_Subprogram_Declaration,
+        (Sy (Specification, Node_Id),
+         Sy (Default_Name, Node_Id, Default_Empty),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sy (Box_Present, Flag)));
+ 
+    Ab (N_Push_Pop_xxx_Label, Node_Kind);
+ 
+    Ab (N_Push_xxx_Label, N_Push_Pop_xxx_Label,
+        (Sm (Exception_Label, Node_Id)));
+ 
+    Cc (N_Push_Constraint_Error_Label, N_Push_xxx_Label);
+ 
+    Cc (N_Push_Program_Error_Label, N_Push_xxx_Label);
+ 
+    Cc (N_Push_Storage_Error_Label, N_Push_xxx_Label);
+ 
+    Ab (N_Pop_xxx_Label, N_Push_Pop_xxx_Label);
+ 
+    Cc (N_Pop_Constraint_Error_Label, N_Pop_xxx_Label);
+ 
+    Cc (N_Pop_Program_Error_Label, N_Pop_xxx_Label);
+ 
+    Cc (N_Pop_Storage_Error_Label, N_Pop_xxx_Label);
+ 
+    Ab (N_SCIL_Node, Node_Kind,
+        (Sm (SCIL_Entity, Node_Id)));
+ 
+    Cc (N_SCIL_Dispatch_Table_Tag_Init, N_SCIL_Node);
+ 
+    Cc (N_SCIL_Dispatching_Call, N_SCIL_Node,
+        (Sm (SCIL_Controlling_Tag, Node_Id),
+         Sm (SCIL_Target_Prim, Node_Id)));
+ 
+    Cc (N_SCIL_Membership_Test, N_SCIL_Node,
+        (Sm (SCIL_Tag_Value, Node_Id)));
+ 
+    Cc (N_Abortable_Part, Node_Kind,
+        (Sy (Statements, List_Id, Default_Empty_List)));
+ 
+    Cc (N_Abstract_Subprogram_Declaration, Node_Kind,
+        (Sy (Specification, Node_Id)));
+ 
+    Cc (N_Access_Definition, Node_Kind,
+        (Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (All_Present, Flag),
+         Sy (Constant_Present, Flag),
+         Sy (Subtype_Mark, Node_Id, Default_Empty),
+         Sy (Access_To_Subprogram_Definition, Node_Id, Default_Empty)));
+ 
+    Cc (N_Access_To_Object_Definition, Node_Kind,
+        (Sy (All_Present, Flag),
+         Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (Null_Excluding_Subtype, Flag),
+         Sy (Subtype_Indication, Node_Id, Default_Empty),
+         Sy (Constant_Present, Flag)));
+ 
+    Cc (N_Aspect_Specification, Node_Kind,
+        (Sy (Identifier, Node_Id, Default_Empty),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sy (Class_Present, Flag),
+         Sy (Split_PPC, Flag),
+         Sm (Aspect_On_Partial_View, Flag),
+         Sm (Aspect_Rep_Item, Node_Id),
+         Sm (Entity_Or_Associated_Node, Node_Id), -- just Entity
+         Sm (Is_Boolean_Aspect, Flag),
+         Sm (Is_Checked, Flag),
+         Sm (Is_Delayed_Aspect, Flag),
+         Sm (Is_Disabled, Flag),
+         Sm (Is_Ignored, Flag),
+         Sm (Next_Rep_Item, Node_Id)));
+ 
+    Cc (N_Call_Marker, Node_Kind,
+        (Sm (Is_Declaration_Level_Node, Flag),
+         Sm (Is_Dispatching_Call, Flag),
+         Sm (Is_Elaboration_Checks_OK_Node, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Node, Flag),
+         Sm (Is_Known_Guaranteed_ABE, Flag),
+         Sm (Is_Preelaborable_Call, Flag),
+         Sm (Is_Source_Call, Flag),
+         Sm (Is_SPARK_Mode_On_Node, Flag),
+         Sm (Target, Node_Id)));
+ 
+    Cc (N_Case_Expression_Alternative, Node_Kind,
+        (Sm (Actions, List_Id),
+         Sy (Discrete_Choices, List_Id),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (Has_SP_Choice, Flag)));
+ 
+    Cc (N_Case_Statement_Alternative, Node_Kind,
+        (Sy (Discrete_Choices, List_Id),
+         Sy (Statements, List_Id, Default_Empty_List),
+         Sm (Has_SP_Choice, Flag),
+         Sm (Multidefined_Bindings, Flag)));
+ 
+    Cc (N_Compilation_Unit, Node_Kind,
+        (Sy (Context_Items, List_Id),
+         Sy (Private_Present, Flag),
+         Sy (Unit, Node_Id),
+         Sy (Aux_Decls_Node, Node_Id),
+         Sm (Acts_As_Spec, Flag),
+         Sm (Body_Required, Flag),
+         Sm (Context_Pending, Flag),
+         Sm (First_Inlined_Subprogram, Node_Id),
+         Sm (Has_No_Elaboration_Code, Flag),
+         Sm (Has_Pragma_Suppress_All, Flag),
+         Sm (Library_Unit, Node_Id),
+         Sm (Save_Invocation_Graph_Of_Body, Flag)));
+ 
+    Cc (N_Compilation_Unit_Aux, Node_Kind,
+        (Sy (Declarations, List_Id, Default_No_List),
+         Sy (Actions, List_Id, Default_No_List),
+         Sy (Pragmas_After, List_Id, Default_No_List),
+         Sy (Config_Pragmas, List_Id, Default_Empty_List),
+         Sm (Default_Storage_Pool, Node_Id)));
+ 
+    Cc (N_Component_Association, Node_Kind,
+        (Sy (Choices, List_Id),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sy (Box_Present, Flag),
+         Sy (Inherited_Discriminant, Flag),
+         Sy (Binding_Chars, Name_Id, Default_No_Name),
+         Sm (Loop_Actions, List_Id),
+         Sm (Was_Default_Init_Box_Association, Flag)));
+ 
+    Cc (N_Component_Definition, Node_Kind,
+        (Sy (Aliased_Present, Flag),
+         Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (Subtype_Indication, Node_Id, Default_Empty),
+         Sy (Access_Definition, Node_Id, Default_Empty)));
+ 
+    Cc (N_Component_List, Node_Kind,
+        (Sy (Component_Items, List_Id),
+         Sy (Variant_Part, Node_Id, Default_Empty),
+         Sy (Null_Present, Flag)));
+ 
+    Cc (N_Contract, Node_Kind,
+        (Sm (Classifications, Node_Id),
+         Sm (Contract_Test_Cases, Node_Id),
+         Sm (Is_Expanded_Contract, Flag),
+         Sm (Pre_Post_Conditions, Node_Id)));
+ 
+    Cc (N_Derived_Type_Definition, Node_Kind,
+        (Sy (Abstract_Present, Flag),
+         Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (Subtype_Indication, Node_Id, Default_Empty),
+         Sy (Record_Extension_Part, Node_Id, Default_Empty),
+         Sy (Limited_Present, Flag),
+         Sy (Task_Present, Flag),
+         Sy (Protected_Present, Flag),
+         Sy (Synchronized_Present, Flag),
+         Sy (Interface_List, List_Id, Default_No_List),
+         Sy (Interface_Present, Flag)));
+ 
+    Cc (N_Decimal_Fixed_Point_Definition, Node_Kind,
+        (Sy (Delta_Expression, Node_Id),
+         Sy (Digits_Expression, Node_Id),
+         Sy (Real_Range_Specification, Node_Id, Default_Empty)));
+ 
+    Cc (N_Defining_Program_Unit_Name, Node_Kind,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Defining_Identifier, Node_Id)));
+ 
+    Cc (N_Delta_Constraint, Node_Kind,
+        (Sy (Delta_Expression, Node_Id),
+         Sy (Range_Constraint, Node_Id, Default_Empty)));
+ 
+    Cc (N_Designator, Node_Kind,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Identifier, Node_Id, Default_Empty)));
+ 
+    Cc (N_Digits_Constraint, Node_Kind,
+        (Sy (Digits_Expression, Node_Id),
+         Sy (Range_Constraint, Node_Id, Default_Empty)));
+ 
+    Cc (N_Discriminant_Association, Node_Kind,
+        (Sy (Selector_Names, List_Id),
+         Sy (Expression, Node_Id, Default_Empty)));
+ 
+    Cc (N_Discriminant_Specification, Node_Kind,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (Discriminant_Type, Node_Id),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (More_Ids, Flag),
+         Sm (Prev_Ids, Flag)));
+ 
+    Cc (N_Enumeration_Type_Definition, Node_Kind,
+        (Sy (Literals, List_Id),
+         Sy (End_Label, Node_Id, Default_Empty)));
+ 
+    Cc (N_Entry_Body, Node_Kind,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Entry_Body_Formal_Part, Node_Id),
+         Sy (Declarations, List_Id, Default_No_List),
+         Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
+         Sm (Activation_Chain_Entity, Node_Id)));
+ 
+    Cc (N_Entry_Call_Alternative, Node_Kind,
+        (Sy (Entry_Call_Statement, Node_Id),
+         Sy (Statements, List_Id, Default_Empty_List),
+         Sy (Pragmas_Before, List_Id, Default_No_List)));
+ 
+    Cc (N_Entry_Index_Specification, Node_Kind,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Discrete_Subtype_Definition, Node_Id, Default_Empty)));
+ 
+    Cc (N_Exception_Declaration, N_Declaration,
+        (Sy (Defining_Identifier, Node_Id),
+         Sm (Expression, Node_Id),
+         Sm (More_Ids, Flag),
+         Sm (Prev_Ids, Flag),
+         Sm (Renaming_Exception, Node_Id)));
+ 
+    Cc (N_Exception_Handler, Node_Kind,
+        (Sy (Choice_Parameter, Node_Id, Default_Empty),
+         Sy (Exception_Choices, List_Id),
+         Sy (Statements, List_Id, Default_Empty_List),
+         Sm (Exception_Label, Node_Id),
+         Sm (Has_Local_Raise, Flag),
+         Sm (Local_Raise_Not_OK, Flag),
+         Sm (Local_Raise_Statements, Elist_Id)));
+ 
+    Cc (N_Floating_Point_Definition, Node_Kind,
+        (Sy (Digits_Expression, Node_Id),
+         Sy (Real_Range_Specification, Node_Id, Default_Empty)));
+ 
+    Cc (N_Formal_Decimal_Fixed_Point_Definition, Node_Kind);
+ 
+    Cc (N_Formal_Derived_Type_Definition, Node_Kind,
+        (Sy (Subtype_Mark, Node_Id, Default_Empty),
+         Sy (Private_Present, Flag),
+         Sy (Abstract_Present, Flag),
+         Sy (Limited_Present, Flag),
+         Sy (Synchronized_Present, Flag),
+         Sy (Interface_List, List_Id, Default_No_List)));
+ 
+    Cc (N_Formal_Discrete_Type_Definition, Node_Kind);
+ 
+    Cc (N_Formal_Floating_Point_Definition, Node_Kind);
+ 
+    Cc (N_Formal_Modular_Type_Definition, Node_Kind);
+ 
+    Cc (N_Formal_Ordinary_Fixed_Point_Definition, Node_Kind);
+ 
+    Cc (N_Formal_Package_Declaration, Node_Kind,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Name, Node_Id, Default_Empty),
+         Sy (Generic_Associations, List_Id, Default_No_List),
+         Sy (Box_Present, Flag),
+         Sm (Instance_Spec, Node_Id),
+         Sm (Is_Known_Guaranteed_ABE, Flag)));
+ 
+    Cc (N_Formal_Private_Type_Definition, Node_Kind,
+        (Sy (Abstract_Present, Flag),
+         Sy (Tagged_Present, Flag),
+         Sy (Limited_Present, Flag),
+         Sm (Uninitialized_Variable, Node_Id)));
+ 
+    Cc (N_Formal_Incomplete_Type_Definition, Node_Kind,
+        (Sy (Tagged_Present, Flag)));
+ 
+    Cc (N_Formal_Signed_Integer_Type_Definition, Node_Kind);
+ 
+    Cc (N_Freeze_Entity, Node_Kind,
+        (Sy (Actions, List_Id, Default_No_List),
+         Sm (Access_Types_To_Process, Elist_Id),
+         Sm (Entity_Or_Associated_Node, Node_Id), -- just Entity
+         Sm (First_Subtype_Link, Node_Id),
+         Sm (TSS_Elist, Elist_Id)));
+ 
+    Cc (N_Freeze_Generic_Entity, Node_Kind,
+         Sm (Entity_Or_Associated_Node, Node_Id)); -- just Entity
+ 
+    Cc (N_Generic_Association, Node_Kind,
+        (Sy (Selector_Name, Node_Id, Default_Empty),
+         Sy (Explicit_Generic_Actual_Parameter, Node_Id),
+         Sy (Box_Present, Flag)));
+ 
+    Cc (N_Handled_Sequence_Of_Statements, Node_Kind,
+        (Sy (Statements, List_Id, Default_Empty_List),
+         Sy (End_Label, Node_Id, Default_Empty),
+         Sy (Exception_Handlers, List_Id, Default_No_List),
+         Sy (At_End_Proc, Node_Id, Default_Empty),
+         Sm (First_Real_Statement, Node_Id)));
+ 
+    Cc (N_Index_Or_Discriminant_Constraint, Node_Kind,
+        (Sy (Constraints, List_Id)));
+ 
+    Cc (N_Iterated_Component_Association, Node_Kind,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Iterator_Specification, Node_Id, Default_Empty),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sy (Discrete_Choices, List_Id),
+         Sy (Box_Present, Flag),
+         Sm (Loop_Actions, List_Id)));
+ 
+    Cc (N_Iterated_Element_Association, Node_Kind,
+        (Sy (Key_Expression, Node_Id),
+         Sy (Iterator_Specification, Node_Id, Default_Empty),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sy (Loop_Parameter_Specification, Node_Id, Default_Empty),
+         Sy (Box_Present, Flag),
+         Sm (Loop_Actions, List_Id)));
+ 
+    Cc (N_Itype_Reference, Node_Kind,
+        (Sm (Itype, Node_Id)));
+ 
+    Cc (N_Label, Node_Kind,
+        (Sy (Identifier, Node_Id, Default_Empty),
+         Sm (Exception_Junk, Flag)));
+ 
+    Cc (N_Modular_Type_Definition, Node_Kind,
+        (Sy (Expression, Node_Id, Default_Empty)));
+ 
+    Cc (N_Number_Declaration, Node_Kind,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (More_Ids, Flag),
+         Sm (Prev_Ids, Flag)));
+ 
+    Cc (N_Ordinary_Fixed_Point_Definition, Node_Kind,
+        (Sy (Delta_Expression, Node_Id),
+         Sy (Real_Range_Specification, Node_Id, Default_Empty)));
+ 
+    Cc (N_Others_Choice, Node_Kind,
+        (Sm (All_Others, Flag),
+         Sm (Others_Discrete_Choices, List_Id)));
+ 
+    Cc (N_Package_Specification, Node_Kind,
+        (Sy (Defining_Unit_Name, Node_Id),
+         Sy (Visible_Declarations, List_Id),
+         Sy (Private_Declarations, List_Id, Default_No_List),
+         Sy (End_Label, Node_Id, Default_Empty),
+         Sm (Generic_Parent, Node_Id),
+         Sm (Limited_View_Installed, Flag)));
+ 
+    Cc (N_Parameter_Association, Node_Kind,
+        (Sy (Selector_Name, Node_Id, Default_Empty),
+         Sy (Explicit_Actual_Parameter, Node_Id),
+         Sm (Is_Accessibility_Actual, Flag),
+         Sm (Next_Named_Actual, Node_Id)));
+ 
+    Cc (N_Parameter_Specification, Node_Kind,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Aliased_Present, Flag),
+         Sy (In_Present, Flag),
+         Sy (Out_Present, Flag),
+         Sy (Null_Exclusion_Present, Flag, Default_False),
+         Sy (Parameter_Type, Node_Id),
+         Sy (Expression, Node_Id, Default_Empty),
+         Sm (Default_Expression, Node_Id),
+         Sm (More_Ids, Flag),
+         Sm (Prev_Ids, Flag)));
+ 
+    Cc (N_Pragma, Node_Kind,
+        (Sy (Pragma_Argument_Associations, List_Id, Default_No_List),
+         Sy (Pragma_Identifier, Node_Id),
+         Sy (Class_Present, Flag),
+         Sy (Split_PPC, Flag),
+         Sm (Corresponding_Aspect, Node_Id),
+         Sm (From_Aspect_Specification, Flag),
+         Sm (Import_Interface_Present, Flag),
+         Sm (Is_Analyzed_Pragma, Flag),
+         Sm (Is_Checked, Flag),
+         Sm (Is_Checked_Ghost_Pragma, Flag),
+         Sm (Is_Delayed_Aspect, Flag),
+         Sm (Is_Disabled, Flag),
+         Sm (Is_Generic_Contract_Pragma, Flag),
+         Sm (Is_Ignored, Flag),
+         Sm (Is_Ignored_Ghost_Pragma, Flag),
+         Sm (Is_Inherited_Pragma, Flag),
+         Sm (Next_Pragma, Node_Id),
+         Sm (Next_Rep_Item, Node_Id),
+         Sm (Uneval_Old_Accept, Flag),
+         Sm (Uneval_Old_Warn, Flag)));
+ 
+    Cc (N_Protected_Definition, Node_Kind,
+        (Sy (Visible_Declarations, List_Id),
+         Sy (Private_Declarations, List_Id, Default_No_List),
+         Sy (End_Label, Node_Id, Default_Empty)));
+ 
+    Cc (N_Range_Constraint, Node_Kind,
+        (Sy (Range_Expression, Node_Id)));
+ 
+    Cc (N_Real_Range_Specification, Node_Kind,
+        (Sy (Low_Bound, Node_Id),
+         Sy (High_Bound, Node_Id)));
+ 
+    Cc (N_Record_Definition, Node_Kind,
+        (Sy (End_Label, Node_Id, Default_Empty),
+         Sy (Abstract_Present, Flag),
+         Sy (Tagged_Present, Flag),
+         Sy (Limited_Present, Flag),
+         Sy (Component_List, Node_Id),
+         Sy (Null_Present, Flag),
+         Sy (Task_Present, Flag),
+         Sy (Protected_Present, Flag),
+         Sy (Synchronized_Present, Flag),
+         Sy (Interface_Present, Flag),
+         Sy (Interface_List, List_Id, Default_No_List)));
+ 
+    Cc (N_Signed_Integer_Type_Definition, Node_Kind,
+        (Sy (Low_Bound, Node_Id),
+         Sy (High_Bound, Node_Id)));
+ 
+    Cc (N_Single_Protected_Declaration, Node_Kind,
+        (Sy (Defining_Identifier, Node_Id),
+         Sy (Interface_List, List_Id, Default_No_List),
+         Sy (Protected_Definition, Node_Id)));
+ 
+    Cc (N_Subunit, Node_Kind,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Proper_Body, Node_Id),
+         Sm (Corresponding_Stub, Node_Id)));
+ 
+    Cc (N_Task_Definition, Node_Kind,
+        (Sy (Visible_Declarations, List_Id),
+         Sy (Private_Declarations, List_Id, Default_No_List),
+         Sy (End_Label, Node_Id, Default_Empty),
+         Sm (Has_Relative_Deadline_Pragma, Flag),
+         Sm (Has_Storage_Size_Pragma, Flag)));
+ 
+    Cc (N_Triggering_Alternative, Node_Kind,
+        (Sy (Triggering_Statement, Node_Id),
+         Sy (Statements, List_Id, Default_Empty_List),
+         Sy (Pragmas_Before, List_Id, Default_No_List)));
+ 
+    Cc (N_Use_Type_Clause, Node_Kind,
+        (Sy (Subtype_Mark, Node_Id, Default_Empty),
+         Sy (Is_Effective_Use_Clause, Flag),
+         Sy (All_Present, Flag),
+         Sm (Hidden_By_Use_Clause, Elist_Id),
+         Sm (More_Ids, Flag),
+         Sm (Next_Use_Clause, Node_Id),
+         Sm (Prev_Ids, Flag),
+         Sm (Prev_Use_Clause, Node_Id),
+         Sm (Used_Operations, Elist_Id)));
+ 
+    Cc (N_Validate_Unchecked_Conversion, Node_Kind,
+        (Sm (Source_Type, Node_Id),
+         Sm (Target_Type, Node_Id)));
+ 
+    Cc (N_Variable_Reference_Marker, Node_Kind,
+        (Sm (Is_Elaboration_Checks_OK_Node, Flag),
+         Sm (Is_Elaboration_Warnings_OK_Node, Flag),
+         Sm (Is_Read, Flag),
+         Sm (Is_SPARK_Mode_On_Node, Flag),
+         Sm (Is_Write, Flag),
+         Sm (Target, Node_Id)));
+ 
+    Cc (N_Variant, Node_Kind,
+        (Sy (Discrete_Choices, List_Id),
+         Sy (Component_List, Node_Id),
+         Sm (Dcheck_Function, Node_Id),
+         Sm (Enclosing_Variant, Node_Id),
+         Sm (Has_SP_Choice, Flag),
+         Sm (Present_Expr, Valid_Uint)));
+ 
+    Cc (N_Variant_Part, Node_Kind,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Variants, List_Id)));
+ 
+    Cc (N_With_Clause, Node_Kind,
+        (Sy (Name, Node_Id, Default_Empty),
+         Sy (Private_Present, Flag),
+         Sy (Limited_Present, Flag),
+         Sy (First_Name, Flag, Default_True),
+         Sy (Last_Name, Flag, Default_True),
+         Sm (Context_Installed, Flag),
+         Sm (Corresponding_Spec, Node_Id),
+         Sm (Elaborate_All_Desirable, Flag),
+         Sm (Elaborate_All_Present, Flag),
+         Sm (Elaborate_Desirable, Flag),
+         Sm (Elaborate_Present, Flag),
+         Sm (Implicit_With, Flag),
+         Sm (Library_Unit, Node_Id),
+         Sm (Limited_View_Installed, Flag),
+         Sm (Next_Implicit_With, Node_Id),
+         Sm (No_Entities_Ref_In_Spec, Flag),
+         Sm (Parent_With, Flag),
+         Sm (Unreferenced_In_Spec, Flag)));
+ 
+    Cc (N_Unused_At_End, Node_Kind);
+ 
+    --  Union types. These don't fit into the normal parent/child hierarchy
+    --  above.
+ 
+    Union (N_Has_Chars,
+           Children =>
+             (N_Attribute_Definition_Clause,
+              N_Empty,
+              N_Pragma_Argument_Association,
+              N_Error,
+              N_Entity,
+              N_Expanded_Name,
+              N_Identifier,
+              N_Operator_Symbol,
+              N_Character_Literal,
+              N_Op));
+ 
+    Union (N_Has_Condition,
+           Children =>
+             (N_Exit_Statement,
+              N_If_Statement,
+              N_Accept_Alternative,
+              N_Delay_Alternative,
+              N_Elsif_Part,
+              N_Entry_Body_Formal_Part,
+              N_Iteration_Scheme,
+              N_Terminate_Alternative));
+    --  Nodes with condition fields (does not include N_Raise_xxx_Error)
+ 
+    Union (N_Has_Bounds,
+           Children =>
+             (N_Range,
+              N_Real_Range_Specification,
+              N_Signed_Integer_Type_Definition));
+    --  Nodes that have Low_Bound and High_Bound defined
+ 
+    Union (N_Is_Index,
+           Children =>
+             (N_Has_Bounds,
+              N_Has_Entity,
+              N_Subtype_Indication));
+    --  Nodes that can be an index of an array
+ 
+    Union (N_Entity_Name,
+           Children =>
+             (N_Expanded_Name,
+              N_Identifier,
+              N_Operator_Symbol));
+    --  Nodes that are definitely representing an entity.
+    --  Some N_Attribute_Reference nodes may also represent an entity. See
+    --  Is_Entity_Name.
+ 
+    Union (N_Is_Decl,
+           Children =>
+             (N_Aggregate,
+              N_Block_Statement,
+              N_Declaration,
+              N_Discriminant_Specification,
+              N_Entry_Index_Specification,
+              N_Enumeration_Type_Definition,
+              N_Exception_Handler,
+              N_Explicit_Dereference,
+              N_Expression_With_Actions,
+              N_Extension_Aggregate,
+              N_Identifier,
+              N_Iterated_Component_Association,
+              N_Later_Decl_Item,
+              N_Loop_Statement,
+              N_Null_Statement,
+              N_Number_Declaration,
+              N_Package_Specification,
+              N_Parameter_Specification,
+              N_Renaming_Declaration,
+              N_Quantified_Expression));
+    --  Nodes that can be returned by Declaration_Node; it can also return
+    --  Empty. Not all of these are true "declarations", but Declaration_Node
+    --  can return them in some cases.
+ 
+    Union (N_Is_Range,
+           Children =>
+             (N_Character_Literal,
+              N_Entity_Name,
+              N_Has_Bounds,
+              N_Integer_Literal,
+              N_Subtype_Indication));
+    --  Nodes that can be used to specify a range
+ 
+    Union (N_Is_Case_Choice,
+           Children =>
+             (N_Is_Range,
+              N_Others_Choice));
+    --  Nodes that can be in the choices of a case statement
+ 
+    Union (N_Is_Exception_Choice,
+           Children =>
+             (N_Entity_Name,
+              N_Others_Choice));
+    --  Nodes that can be in the choices of an exception handler
+ 
+    Union (N_Alternative,
+           Children =>
+             (N_Case_Statement_Alternative,
+              N_Variant));
+    --  Nodes that can be alternatives in case contructs
+ 
+ end Gen_IL.Gen.Gen_Nodes;
diff -Nrcpad gcc-11.3.0/gcc/ada/gen_il-gen.adb gcc-12.1.0/gcc/ada/gen_il-gen.adb
*** gcc-11.3.0/gcc/ada/gen_il-gen.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gen_il-gen.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,3308 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                            G E N _ I L . G E N                           --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2020-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers; use type Ada.Containers.Count_Type;
+ with Ada.Text_IO;
+ 
+ package body Gen_IL.Gen is
+ 
+    Statistics_Enabled : constant Boolean := False;
+    --  Change to True or False to enable/disable statistics printed by
+    --  Atree. Should normally be False, for efficiency. Also compile with
+    --  -gnatd.A to get the statistics printed.  Enabling these statistics
+    --  makes the compiler about 20% slower.
+ 
+    Num_Header_Slots : constant := 3;
+    --  Number of header slots; the first Num_Header_Slots slots are stored in
+    --  the header; the rest are dynamically allocated in the Slots table. We
+    --  need to subtract this off when accessing dynamic slots. The constant
+    --  Seinfo.N_Head will contain this value. Fields that are allocated in the
+    --  header slots are quicker to access.
+    --
+    --  This number can be adjusted for efficiency. We choose 3 because the
+    --  minimum node size is 3 slots, and because that causes the size of type
+    --  Node_Header to be a power of 2. We can't make it zero, however, because
+    --  C doesn't allow zero-length arrays.
+ 
+    N_Head : constant String := Image (Field_Offset'(Num_Header_Slots));
+    --  String form of the above
+ 
+    Enable_Assertions : constant Boolean := True;
+    --  True to enable predicates on the _Id types, and preconditions on getters
+    --  and setters.
+ 
+    Overlay_Fields : constant Boolean := True;
+    --  False to allocate every field so it doesn't overlay any other fields,
+    --  which results in enormous nodes. For experimenting and debugging.
+    --  Should be True in normal operation, for efficiency.
+ 
+    SS : constant := 32; -- slot size in bits
+    SSS : constant String := Image (Bit_Offset'(SS));
+ 
+    Inline : constant String := "Inline";
+    --  For experimenting with Inline_Always
+ 
+    Syntactic : Fields_Per_Node_Type :=
+      (others => (others => False));
+ 
+    Nodes_And_Entities : constant Type_Vector := Node_Kind & Entity_Kind;
+    All_Entities : constant Type_Vector := To_Vector (Entity_Kind, Length => 1);
+ 
+    procedure Create_Type
+      (T            : Node_Or_Entity_Type;
+       Parent       : Opt_Abstract_Type;
+       Fields       : Field_Sequence;
+       Nmake_Assert : String);
+    --  Called by the Create_..._Type procedures exported by this package to
+    --  create an entry in the Types_Table.
+ 
+    procedure Create_Union_Type
+      (Root : Root_Type; T : Abstract_Type; Children : Type_Array);
+    --  Called by Create_Node_Union_Type and Create_Entity_Union_Type to create
+    --  a union type.
+ 
+    function Create_Field
+      (Field                 : Field_Enum;
+       Field_Type            : Type_Enum;
+       Default_Value         : Field_Default_Value;
+       Type_Only             : Type_Only_Enum;
+       Pre, Pre_Get, Pre_Set : String;
+       Is_Syntactic          : Boolean) return Field_Desc;
+    --  Called by the Create_..._Field functions exported by this package to
+    --  create an entry in the Field_Table. See Create_Syntactic_Field and
+    --  Create_Semantic_Field for additional doc.
+ 
+    procedure Check_Type (T : Node_Or_Entity_Type);
+    --  Check some "legality" rules for types in the Gen_IL little language
+ 
+    ----------------
+    -- Check_Type --
+    ----------------
+ 
+    procedure Check_Type (T : Node_Or_Entity_Type) is
+       Im : constant String := Node_Or_Entity_Type'Image (T);
+    begin
+       if Type_Table (T) /= null then
+          raise Illegal with "duplicate creation of type " & Image (T);
+       end if;
+ 
+       if T not in Root_Type then
+          case T is
+             when Node_Type =>
+                if Im'Length < 2 or else Im (1 .. 2) /= "N_" then
+                   raise Illegal with "Node type names must start with ""N_""";
+                end if;
+ 
+             when Concrete_Entity =>
+                if Im'Length < 2 or else Im (1 .. 2) /= "E_" then
+                   raise Illegal with
+                     "Concrete entity type names must start with ""E_""";
+                end if;
+ 
+             when others => null;
+                --  No special prefix for abstract entities
+          end case;
+       end if;
+    end Check_Type;
+ 
+    -----------------
+    -- Create_Type --
+    -----------------
+ 
+    procedure Create_Type
+      (T            : Node_Or_Entity_Type;
+       Parent       : Opt_Abstract_Type;
+       Fields       : Field_Sequence;
+       Nmake_Assert : String)
+    is
+    begin
+       Check_Type (T);
+ 
+       if T not in Root_Type then
+          if Type_Table (Parent) = null then
+             raise Illegal with
+               "undefined parent type for " &
+               Image (T) & " (parent is " & Image (Parent) & ")";
+          end if;
+ 
+          if Type_Table (Parent).Is_Union then
+             raise Illegal with
+               "parent type for " &
+                 Image (T) & " must not be union (" & Image (Parent) & ")";
+          end if;
+       end if;
+ 
+       Type_Table (T) :=
+         new Type_Info'
+           (Is_Union => False, Parent => Parent,
+            Children | Concrete_Descendants => Type_Vectors.Empty_Vector,
+            First | Last | Fields => <>, -- filled in later
+            Nmake_Assert => new String'(Nmake_Assert));
+ 
+       if Parent /= No_Type then
+          Append (Type_Table (Parent).Children, T);
+       end if;
+ 
+       --  Check that syntactic fields precede semantic fields. Note that this
+       --  check is happening before we compute inherited fields.
+       --  Exempt Chars and Actions from this rule, for now.
+ 
+       declare
+          Semantic_Seen : Boolean := False;
+       begin
+          for J in Fields'Range loop
+             if Fields (J).Is_Syntactic then
+                if Semantic_Seen then
+                   raise Illegal with
+                     "syntactic fields must precede semantic ones " & Image (T);
+                end if;
+ 
+             else
+                if Fields (J).F not in Chars | Actions then
+                   Semantic_Seen := True;
+                end if;
+             end if;
+          end loop;
+       end;
+ 
+       --  Check that node fields are in nodes, and entity fields are in
+       --  entities.
+ 
+       for J in Fields'Range loop
+          declare
+             Field : constant Field_Enum := Fields (J).F;
+             Error_Prefix : constant String :=
+               "Field " & Image (T) & "." & Image (Field) & " not in ";
+          begin
+             case T is
+                when Node_Type =>
+                   if Field not in Node_Field then
+                      raise Illegal with Error_Prefix & "Node_Field";
+                   end if;
+ 
+                when Entity_Type =>
+                   if Field not in Entity_Field then
+                      raise Illegal with Error_Prefix & "Entity_Field";
+                   end if;
+ 
+                when Type_Boundaries =>
+                   raise Program_Error; -- dummy types shouldn't have fields
+             end case;
+          end;
+       end loop;
+ 
+       --  Compute the Have_This_Field component of fields, the Fields component
+       --  of the current type, and Syntactic table.
+ 
+       for J in Fields'Range loop
+          declare
+             Field : constant Field_Enum := Fields (J).F;
+             Is_Syntactic : constant Boolean := Fields (J).Is_Syntactic;
+ 
+          begin
+             Append (Field_Table (Field).Have_This_Field, T);
+             Append (Type_Table (T).Fields, Field);
+ 
+             pragma Assert (not Syntactic (T) (Field));
+             Syntactic (T) (Field) := Is_Syntactic;
+          end;
+       end loop;
+    end Create_Type;
+ 
+    --  Other than constraint checks on T at the call site, and the lack of a
+    --  parent for root types, the following six all do the same thing.
+ 
+    ---------------------------
+    -- Create_Root_Node_Type --
+    ---------------------------
+ 
+    procedure Create_Root_Node_Type
+      (T      : Abstract_Node;
+       Fields : Field_Sequence := No_Fields) is
+    begin
+       Create_Type (T, Parent => No_Type, Fields => Fields, Nmake_Assert => "");
+    end Create_Root_Node_Type;
+ 
+    -------------------------------
+    -- Create_Abstract_Node_Type --
+    -------------------------------
+ 
+    procedure Create_Abstract_Node_Type
+      (T      : Abstract_Node; Parent : Abstract_Type;
+       Fields : Field_Sequence := No_Fields)
+    is
+    begin
+       Create_Type (T, Parent, Fields, Nmake_Assert => "");
+    end Create_Abstract_Node_Type;
+ 
+    -------------------------------
+    -- Create_Concrete_Node_Type --
+    -------------------------------
+ 
+    procedure Create_Concrete_Node_Type
+      (T      : Concrete_Node; Parent : Abstract_Type;
+       Fields : Field_Sequence := No_Fields;
+       Nmake_Assert : String := "")
+    is
+    begin
+       Create_Type (T, Parent, Fields, Nmake_Assert);
+    end Create_Concrete_Node_Type;
+ 
+    -----------------------------
+    -- Create_Root_Entity_Type --
+    -----------------------------
+ 
+    procedure Create_Root_Entity_Type
+      (T      : Abstract_Entity;
+       Fields : Field_Sequence := No_Fields) is
+    begin
+       Create_Type (T, Parent => No_Type, Fields => Fields, Nmake_Assert => "");
+    end Create_Root_Entity_Type;
+ 
+    ---------------------------------
+    -- Create_Abstract_Entity_Type --
+    ---------------------------------
+ 
+    procedure Create_Abstract_Entity_Type
+      (T      : Abstract_Entity; Parent : Abstract_Type;
+       Fields : Field_Sequence := No_Fields)
+    is
+    begin
+       Create_Type (T, Parent, Fields, Nmake_Assert => "");
+    end Create_Abstract_Entity_Type;
+ 
+    ---------------------------------
+    -- Create_Concrete_Entity_Type --
+    ---------------------------------
+ 
+    procedure Create_Concrete_Entity_Type
+      (T      : Concrete_Entity; Parent : Abstract_Type;
+       Fields : Field_Sequence := No_Fields)
+    is
+    begin
+       Create_Type (T, Parent, Fields, Nmake_Assert => "");
+    end Create_Concrete_Entity_Type;
+ 
+    ------------------
+    -- Create_Field --
+    ------------------
+ 
+    function Create_Field
+      (Field                 : Field_Enum;
+       Field_Type            : Type_Enum;
+       Default_Value         : Field_Default_Value;
+       Type_Only             : Type_Only_Enum;
+       Pre, Pre_Get, Pre_Set : String;
+       Is_Syntactic          : Boolean) return Field_Desc
+    is
+    begin
+       --  Note that this function has the side effect of update the
+       --  Field_Table.
+ 
+       pragma Assert (if Default_Value /= No_Default then Is_Syntactic);
+       pragma Assert (if Type_Only /= No_Type_Only then not Is_Syntactic);
+ 
+       --  First time this field has been seen; create an entry in the
+       --  Field_Table.
+ 
+       if Field_Table (Field) = null then
+          Field_Table (Field) := new Field_Info'
+            (Type_Vectors.Empty_Vector, Field_Type, Default_Value, Type_Only,
+             Pre => new String'(Pre),
+             Pre_Get => new String'(Pre_Get),
+             Pre_Set => new String'(Pre_Set),
+             Offset => Unknown_Offset);
+ 
+       --  The Field_Table entry has already been created by the 'then' part
+       --  above. Now we're seeing the same field being "created" again in a
+       --  different type. Here we check consistency of this new Create_Field
+       --  call with the old one.
+ 
+       else
+          if Field_Type /= Field_Table (Field).Field_Type then
+             raise Illegal with
+               "mismatched field types for " & Image (Field);
+          end if;
+ 
+          --  Check that default values for syntactic fields match. This check
+          --  could be stricter; it currently allows a field to have No_Default
+          --  in one type, but something else in another type. In that case, we
+          --  use the "something else" for all types.
+          --
+          --  Note that the order of calls does not matter; a default value
+          --  always overrides a No_Default value.
+ 
+          if Is_Syntactic then
+             if Default_Value /= Field_Table (Field).Default_Value then
+                if Field_Table (Field).Default_Value = No_Default then
+                   Field_Table (Field).Default_Value := Default_Value;
+                else
+                   raise Illegal with
+                     "mismatched default values for " & Image (Field);
+                end if;
+             end if;
+          end if;
+ 
+          if Type_Only /= Field_Table (Field).Type_Only then
+             raise Illegal with "mismatched Type_Only for " & Image (Field);
+          end if;
+ 
+          if Pre /= Field_Table (Field).Pre.all then
+             raise Illegal with
+               "mismatched extra preconditions for " & Image (Field);
+          end if;
+ 
+          if Pre_Get /= Field_Table (Field).Pre_Get.all then
+             raise Illegal with
+               "mismatched extra getter-only preconditions for " &
+               Image (Field);
+          end if;
+ 
+          if Pre_Set /= Field_Table (Field).Pre_Set.all then
+             raise Illegal with
+               "mismatched extra setter-only preconditions for " &
+               Image (Field);
+          end if;
+       end if;
+ 
+       return (Field, Is_Syntactic);
+    end Create_Field;
+ 
+    ----------------------------
+    -- Create_Syntactic_Field --
+    ----------------------------
+ 
+    function Create_Syntactic_Field
+      (Field      : Node_Field;
+       Field_Type : Type_Enum;
+       Default_Value : Field_Default_Value := No_Default;
+       Pre, Pre_Get, Pre_Set : String := "") return Field_Desc
+    is
+    begin
+       return Create_Field
+         (Field, Field_Type, Default_Value, No_Type_Only,
+          Pre, Pre_Get, Pre_Set,
+          Is_Syntactic => True);
+    end Create_Syntactic_Field;
+ 
+    ---------------------------
+    -- Create_Semantic_Field --
+    ---------------------------
+ 
+    function Create_Semantic_Field
+      (Field      : Field_Enum;
+       Field_Type : Type_Enum;
+       Type_Only  : Type_Only_Enum := No_Type_Only;
+       Pre, Pre_Get, Pre_Set : String := "") return Field_Desc
+    is
+    begin
+       return Create_Field
+         (Field, Field_Type, No_Default, Type_Only,
+          Pre, Pre_Get, Pre_Set,
+          Is_Syntactic => False);
+    end Create_Semantic_Field;
+ 
+    -----------------------
+    -- Create_Union_Type --
+    -----------------------
+ 
+    procedure Create_Union_Type
+      (Root : Root_Type; T : Abstract_Type; Children : Type_Array)
+    is
+       Children_Seen : Type_Set := (others => False);
+ 
+    begin
+       Check_Type (T);
+ 
+       if Children'Length <= 1 then
+          raise Illegal with Image (T) & " must have two or more children";
+       end if;
+ 
+       for Child of Children loop
+          if Children_Seen (Child) then
+             raise Illegal with
+               Image (T) & " has duplicate child " & Image (Child);
+          end if;
+ 
+          Children_Seen (Child) := True;
+ 
+          if Type_Table (Child) = null then
+             raise Illegal with
+               "undefined child type for " &
+               Image (T) & " (child is " & Image (Child) & ")";
+          end if;
+       end loop;
+ 
+       Type_Table (T) :=
+         new Type_Info'
+           (Is_Union => True, Parent => Root,
+            Children | Concrete_Descendants => Type_Vectors.Empty_Vector);
+ 
+       for Child of Children loop
+          Append (Type_Table (T).Children, Child);
+       end loop;
+    end Create_Union_Type;
+ 
+    ----------------------------
+    -- Create_Node_Union_Type --
+    ----------------------------
+ 
+    procedure Create_Node_Union_Type
+      (T : Abstract_Node; Children : Type_Array) is
+    begin
+       Create_Union_Type (Node_Kind, T, Children);
+    end Create_Node_Union_Type;
+ 
+    ------------------------------
+    -- Create_Entity_Union_Type --
+    ------------------------------
+ 
+    procedure Create_Entity_Union_Type
+      (T : Abstract_Entity; Children : Type_Array) is
+    begin
+       Create_Union_Type (Entity_Kind, T, Children);
+    end Create_Entity_Union_Type;
+ 
+    -------------
+    -- Compile --
+    -------------
+ 
+    procedure Compile is
+       Fields_Per_Node : Fields_Per_Node_Type := (others => (others => False));
+ 
+       Type_Bit_Size : array (Concrete_Type) of Bit_Offset := (others => 0);
+       Min_Node_Bit_Size : Bit_Offset := Bit_Offset'Last;
+       Max_Node_Bit_Size : Bit_Offset := 0;
+       Min_Entity_Bit_Size : Bit_Offset := Bit_Offset'Last;
+       Max_Entity_Bit_Size : Bit_Offset := 0;
+       --  Above are in units of bits; following are in units of slots:
+       Min_Node_Size : Field_Offset := Field_Offset'Last;
+       Max_Node_Size : Field_Offset := 0;
+       Min_Entity_Size : Field_Offset := Field_Offset'Last;
+       Max_Entity_Size : Field_Offset := 0;
+ 
+       Node_Field_Types_Used, Entity_Field_Types_Used : Type_Set;
+ 
+       Setter_Needs_Parent : Field_Set :=
+         (Actions | Expression | Then_Actions | Else_Actions => True,
+          others => False);
+       --  Set of fields where the setter should set the Parent. True for
+       --  syntactic fields of type Node_Id and List_Id, but with some
+       --  exceptions. Expression is syntactic AND semantic, and the Parent
+       --  is needed. Default_Expression is also both, but the Parent is not
+       --  needed. Then_Actions and Else_Actions are not syntactic, but the
+       --  Parent is needed.
+ 
+       procedure Check_Completeness;
+       --  Check that every type and field has been declared
+ 
+       procedure Compute_Ranges (Root : Root_Type);
+       --  Compute the range of Node_Kind/Entity_Kind values for all the types
+       --  rooted at Root. The result is stored in the First and Last components
+       --  in the Type_Table.
+ 
+       procedure Compute_Fields_Per_Node;
+       --  Compute which fields are in which nodes. Implements inheritance of
+       --  fields. Set the Fields component of each Type_Info to include
+       --  inherited ones. Set the Is_Syntactic component in the Type_Table to
+       --  the set of fields that are syntactic in that node kind. Set the
+       --  Fields_Per_Node table.
+ 
+       procedure Compute_Field_Offsets;
+       --  Compute the offsets of each field. The results are stored in the
+       --  Offset components in the Field_Table.
+ 
+       procedure Compute_Type_Sizes;
+       --  Compute the size of each node and entity type, which is one more than
+       --  the maximum bit offset of all fields of the type. Results are
+       --  returned in the above Type_Bit_Size and Min_.../Max_... variables.
+ 
+       procedure Check_For_Syntactic_Field_Mismatch;
+       --  Check that fields are either all syntactic or all semantic in all
+       --  nodes in which they exist, except for some fields that already
+       --  violate this rule.
+       --
+       --  Also sets Setter_Needs_Parent.
+ 
+       function Field_Types_Used (First, Last : Field_Enum) return Type_Set;
+       --  Returns the union of the types of all the fields in the range First
+       --  .. Last. Only Special_Type; if the declared type of a field is a
+       --  descendant of Node_Kind or Entity_Kind, then the low-level getter for
+       --  Node_Id can be used.
+ 
+       procedure Put_Seinfo;
+       --  Print out the Seinfo package, which is with'ed by both Sinfo.Nodes
+       --  and Einfo.Entities.
+ 
+       procedure Put_Nodes;
+       --  Print out the Sinfo.Nodes package spec and body
+ 
+       procedure Put_Entities;
+       --  Print out the Einfo.Entities package spec and body
+ 
+       procedure Put_Type_And_Subtypes
+         (S : in out Sink; Root : Root_Type);
+       --  Called by Put_Nodes and Put_Entities to print out the main type
+       --  and subtype declarations in Sinfo.Nodes and Einfo.Entities.
+ 
+       procedure Put_Subp_Decls (S : in out Sink; Root : Root_Type);
+       --  Called by Put_Nodes and Put_Entities to print out the subprogram
+       --  declarations in Sinfo.Nodes and Einfo.Entities.
+ 
+       procedure Put_Subp_Bodies (S : in out Sink; Root : Root_Type);
+       --  Called by Put_Nodes and Put_Entities to print out the subprogram
+       --  bodies in Sinfo.Nodes and Einfo.Entities.
+ 
+       function Node_To_Fetch_From (F : Field_Enum) return String;
+       --  Name of the Node from which a getter should fetch the value.
+       --  Normally, we fetch from the node or entity passed in (i.e. formal
+       --  parameter N). But if Type_Only was specified, we need to fetch the
+       --  corresponding base (etc) type.
+ 
+       procedure Put_Getter_Spec (S : in out Sink; F : Field_Enum);
+       procedure Put_Setter_Spec (S : in out Sink; F : Field_Enum);
+       procedure Put_Getter_Decl (S : in out Sink; F : Field_Enum);
+       procedure Put_Setter_Decl (S : in out Sink; F : Field_Enum);
+       procedure Put_Getter_Setter_Locals
+         (S : in out Sink; F : Field_Enum; Get : Boolean);
+       procedure Put_Getter_Body (S : in out Sink; F : Field_Enum);
+       procedure Put_Setter_Body (S : in out Sink; F : Field_Enum);
+       --  Print out the specification, declaration, or body of a getter or
+       --  setter for the given field.
+ 
+       procedure Put_Precondition
+         (S : in out Sink; F : Field_Enum);
+       --  Print out the precondition, if any, for a getter or setter for the
+       --  given field.
+ 
+       procedure Put_Casts
+         (S : in out Sink; T : Type_Enum);
+       --  Print out the Cast functions for a given type
+ 
+       procedure Put_Traversed_Fields (S : in out Sink);
+       --  Called by Put_Nodes to print out the Traversed_Fields table in
+       --  Sinfo.Nodes.
+ 
+       procedure Put_Tables (S : in out Sink; Root : Root_Type);
+       --  Called by Put_Nodes and Put_Entities to print out the various tables
+       --  in Sinfo.Nodes and Einfo.Entities.
+ 
+       procedure Put_Nmake;
+       --  Print out the Nmake package spec and body, containing
+       --  Make_... functions for each concrete node type.
+ 
+       procedure Put_Make_Decls (S : in out Sink; Root : Root_Type);
+       --  Called by Put_Nmake to print out the Make_... function declarations
+ 
+       procedure Put_Make_Bodies (S : in out Sink; Root : Root_Type);
+       --  Called by Put_Nmake to print out the Make_... function bodies
+ 
+       procedure Put_Make_Spec
+         (S : in out Sink; Root : Root_Type; T : Concrete_Type);
+       --  Called by Put_Make_Decls and Put_Make_Bodies to print out the spec of
+       --  a single Make_... function.
+ 
+       procedure Put_Seinfo_Tables;
+       --  This puts information about both sinfo and einfo.
+       --  Not actually needed by the compiler.
+ 
+       procedure Put_Sinfo_Dot_H;
+       --  Print out the sinfo.h file
+ 
+       procedure Put_Einfo_Dot_H;
+       --  Print out the einfo.h file
+ 
+       procedure Put_C_Type_And_Subtypes
+         (S : in out Sink; Root : Root_Type);
+       --  Used by Put_Sinfo_Dot_H and Put_Einfo_Dot_H to print out the C code
+       --  corresponding to the Ada Node_Kind, Entity_Kind, and subtypes
+       --  thereof.
+ 
+       procedure Put_C_Getters
+         (S : in out Sink; Root : Root_Type);
+       --  Used by Put_Sinfo_Dot_H and Put_Einfo_Dot_H to print out high-level
+       --  getters.
+ 
+       procedure Put_C_Getter
+         (S : in out Sink; F : Field_Enum);
+       --  Used by Put_C_Getters to print out one high-level getter.
+ 
+       procedure Put_Union_Membership
+         (S : in out Sink; Root : Root_Type; Only_Prototypes : Boolean);
+       --  Used by Put_Sinfo_Dot_H and Put_Einfo_Dot_H to print out functions to
+       --  test membership in a union type.
+ 
+       ------------------------
+       -- Check_Completeness --
+       ------------------------
+ 
+       procedure Check_Completeness is
+       begin
+          for T in Node_Or_Entity_Type loop
+             if Type_Table (T) = null and then T not in Type_Boundaries then
+                raise Illegal with "Missing type declaration for " & Image (T);
+             end if;
+          end loop;
+ 
+          for F in Field_Enum loop
+             if Field_Table (F) = null
+               and then F /= Between_Node_And_Entity_Fields
+             then
+                raise Illegal with "Missing field declaration for " & Image (F);
+             end if;
+          end loop;
+       end Check_Completeness;
+ 
+       --------------------
+       -- Compute_Ranges --
+       --------------------
+ 
+       procedure Compute_Ranges (Root : Root_Type) is
+ 
+          procedure Do_One_Type (T : Node_Or_Entity_Type);
+          --  Compute the range for one type. Passed to Iterate_Types to process
+          --  all of them.
+ 
+          procedure Add_Concrete_Descendant_To_Ancestors
+            (Ancestor : Abstract_Type; Descendant : Concrete_Type);
+          --  Add Descendant to the Concrete_Descendants of each of its
+          --  ancestors.
+ 
+          procedure Add_Concrete_Descendant_To_Ancestors
+            (Ancestor : Abstract_Type; Descendant : Concrete_Type) is
+          begin
+             if Ancestor not in Root_Type then
+                Add_Concrete_Descendant_To_Ancestors
+                  (Type_Table (Ancestor).Parent, Descendant);
+             end if;
+ 
+             Append (Type_Table (Ancestor).Concrete_Descendants, Descendant);
+          end Add_Concrete_Descendant_To_Ancestors;
+ 
+          procedure Do_One_Type (T : Node_Or_Entity_Type) is
+          begin
+             case T is
+                when Concrete_Type =>
+                   pragma Annotate (Codepeer, Modified, Type_Table);
+                   Type_Table (T).First := T;
+                   Type_Table (T).Last  := T;
+                   Add_Concrete_Descendant_To_Ancestors
+                     (Type_Table (T).Parent, T);
+                   --  Parent cannot be No_Type here, because T is a concrete
+                   --  type, and therefore not a root type.
+ 
+                when Abstract_Type =>
+                   declare
+                      Children : Type_Vector renames Type_Table (T).Children;
+                   begin
+                      --  Ensure that an abstract type is not a leaf in the type
+                      --  hierarchy.
+ 
+                      if Is_Empty (Children) then
+                         raise Illegal with Image (T) & " has no children";
+                      end if;
+ 
+                      --  We could support abstract types with only one child,
+                      --  but what's the point of having such a type?
+ 
+                      if Last_Index (Children) = 1 then
+                         raise Illegal with Image (T) & " has only one child";
+                      end if;
+ 
+                      Type_Table (T).First := Type_Table (Children (1)).First;
+                      Type_Table (T).Last  :=
+                        Type_Table (Children (Last_Index (Children))).Last;
+                   end;
+ 
+                when Between_Abstract_Entity_And_Concrete_Node_Types =>
+                   raise Program_Error;
+             end case;
+          end Do_One_Type;
+       begin
+          Iterate_Types (Root, Post => Do_One_Type'Access);
+       end Compute_Ranges;
+ 
+       -----------------------------
+       -- Compute_Fields_Per_Node --
+       -----------------------------
+ 
+       procedure Compute_Fields_Per_Node is
+ 
+          Duplicate_Fields_Found : Boolean := False;
+ 
+          function Get_Fields (T : Node_Or_Entity_Type) return Field_Vector;
+          --  Compute the fields of a given type. This is the fields inherited
+          --  from ancestors, plus the fields declared for the type itself.
+ 
+          function Get_Syntactic_Fields
+            (T : Node_Or_Entity_Type) return Field_Set;
+          --  Compute the set of fields that are syntactic for a given type.
+          --  Note that a field can be syntactic in some node types, but
+          --  semantic in others.
+ 
+          procedure Do_Concrete_Type (CT : Concrete_Type);
+          --  Do the Compute_Fields_Per_Node work for a concrete type
+ 
+          function Get_Fields (T : Node_Or_Entity_Type) return Field_Vector is
+             Parent_Fields : constant Field_Vector :=
+               (if T in Root_Type then Field_Vectors.Empty_Vector
+                else Get_Fields (Type_Table (T).Parent));
+          begin
+             return Parent_Fields & Type_Table (T).Fields;
+          end Get_Fields;
+ 
+          function Get_Syntactic_Fields
+            (T : Node_Or_Entity_Type) return Field_Set
+          is
+             Parent_Is_Syntactic : constant Field_Set :=
+               (if T in Root_Type then (Field_Enum => False)
+                else Get_Syntactic_Fields (Type_Table (T).Parent));
+          begin
+             return Parent_Is_Syntactic or Syntactic (T);
+          end Get_Syntactic_Fields;
+ 
+          procedure Do_Concrete_Type (CT : Concrete_Type) is
+          begin
+             Type_Table (CT).Fields := Get_Fields (CT);
+             Syntactic (CT) := Get_Syntactic_Fields (CT);
+ 
+             for F of Type_Table (CT).Fields loop
+                if Fields_Per_Node (CT) (F) then
+                   Ada.Text_IO.Put_Line
+                     ("duplicate field" & Image (CT) & Image (F));
+                   Duplicate_Fields_Found := True;
+                end if;
+ 
+                Fields_Per_Node (CT) (F) := True;
+             end loop;
+          end Do_Concrete_Type;
+ 
+       begin -- Compute_Fields_Per_Node
+          for CT in Concrete_Node loop
+             Do_Concrete_Type (CT);
+          end loop;
+ 
+          --  The node fields defined for all three N_Entity kinds should be the
+          --  same:
+ 
+          if Type_Table (N_Defining_Character_Literal).Fields /=
+            Type_Table (N_Defining_Identifier).Fields
+          then
+             raise Illegal with
+               "fields for N_Defining_Identifier and " &
+               "N_Defining_Character_Literal must match";
+          end if;
+ 
+          if Type_Table (N_Defining_Operator_Symbol).Fields /=
+            Type_Table (N_Defining_Identifier).Fields
+          then
+             raise Illegal with
+               "fields for N_Defining_Identifier and " &
+               "N_Defining_Operator_Symbol must match";
+          end if;
+ 
+          if Fields_Per_Node (N_Defining_Character_Literal) /=
+            Fields_Per_Node (N_Defining_Identifier)
+          then
+             raise Illegal with
+               "Fields of N_Defining_Character_Literal must match " &
+               "N_Defining_Identifier";
+          end if;
+ 
+          if Fields_Per_Node (N_Defining_Operator_Symbol) /=
+            Fields_Per_Node (N_Defining_Identifier)
+          then
+             raise Illegal with
+               "Fields of N_Defining_Operator_Symbol must match " &
+               "N_Defining_Identifier";
+          end if;
+ 
+          --  Copy node fields from N_Entity nodes to entities, so they have
+          --  slots allocated (but the getters and setters are only in
+          --  Sinfo.Nodes).
+ 
+          Type_Table (Entity_Kind).Fields :=
+            Type_Table (N_Defining_Identifier).Fields &
+            Type_Table (Entity_Kind).Fields;
+ 
+          for CT in Concrete_Entity loop
+             Do_Concrete_Type (CT);
+          end loop;
+ 
+          if Duplicate_Fields_Found then
+             raise Illegal with "duplicate fields found";
+          end if;
+       end Compute_Fields_Per_Node;
+ 
+       function Field_Size (T : Type_Enum) return Bit_Offset is
+         (case T is
+           when Flag => 1,
+ 
+           when Small_Paren_Count_Type | Component_Alignment_Kind => 2,
+ 
+           when Node_Kind_Type | Entity_Kind_Type | Convention_Id => 8,
+ 
+           when Mechanism_Type
+              | List_Id
+              | Elist_Id
+              | Name_Id
+              | String_Id
+              | Uint
+              | Uint_Subtype
+              | Ureal
+              | Source_Ptr
+              | Union_Id
+              | Node_Id
+              | Node_Or_Entity_Type => 32,
+ 
+          when Between_Special_And_Abstract_Node_Types => -- can't happen
+            Bit_Offset'Last);
+          --  Size in bits of a a field of type T. It must be a power of 2, and
+          --  must match the size of the type in GNAT, which sometimes requires
+          --  a Size clause in GNAT.
+          --
+          --  Note that this is not the same as Type_Bit_Size of the field's
+          --  type. For one thing, Type_Bit_Size only covers concrete node and
+          --  entity types, which does not include most of the above. For
+          --  another thing, Type_Bit_Size includes the full size of all the
+          --  fields, whereas a field of a node or entity type is just a 32-bit
+          --  Node_Id or Entity_Id; i.e. it is indirect.
+ 
+       function Field_Size (F : Field_Enum) return Bit_Offset is
+         (Field_Size (Field_Table (F).Field_Type));
+ 
+       function To_Bit_Offset (F : Field_Enum; Offset : Field_Offset'Base)
+         return Bit_Offset'Base is
+           (Bit_Offset'Base (Offset) * Field_Size (F));
+       function First_Bit (F : Field_Enum; Offset : Field_Offset)
+         return Bit_Offset is
+           (To_Bit_Offset (F, Offset));
+       function Last_Bit (F : Field_Enum; Offset : Field_Offset)
+         return Bit_Offset is
+           (To_Bit_Offset (F, Offset + 1) - 1);
+ 
+       function To_Size_In_Slots (Size_In_Bits : Bit_Offset)
+         return Field_Offset is
+           ((Field_Offset (Size_In_Bits) + (SS - 1)) / SS);
+ 
+       function Type_Size_In_Slots (T : Concrete_Type) return Field_Offset is
+         (To_Size_In_Slots (Type_Bit_Size (T))); -- rounded up to slot boundary
+ 
+       function Type_Bit_Size_Aligned (T : Concrete_Type) return Bit_Offset is
+         (Bit_Offset (Type_Size_In_Slots (T)) * SS); -- multiple of slot size
+ 
+       ---------------------------
+       -- Compute_Field_Offsets --
+       ---------------------------
+ 
+       procedure Compute_Field_Offsets is
+          type Offset_Set_Unconstrained is array (Bit_Offset range <>)
+            of Boolean with Pack;
+          subtype Offset_Set is Offset_Set_Unconstrained (Bit_Offset);
+          Offset_Sets : array (Concrete_Type) of Offset_Set :=
+            (others => (others => False));
+ 
+          function All_False
+            (F : Field_Enum; Offset : Field_Offset)
+            return Offset_Set_Unconstrained is
+              (First_Bit (F, Offset) .. Last_Bit (F, Offset) => False);
+ 
+          function All_True
+            (F : Field_Enum; Offset : Field_Offset)
+            return Offset_Set_Unconstrained is
+              (First_Bit (F, Offset) .. Last_Bit (F, Offset) => True);
+ 
+          function Offset_OK
+            (F : Field_Enum; Offset : Field_Offset) return Boolean;
+          --  True if it is OK to choose this offset; that is, if this offset is
+          --  not in use for any type that has the field. If Overlay_Fields is
+          --  False, then "any type that has the field" --> "any type, whether
+          --  or not it has the field".
+ 
+          procedure Set_Offset_In_Use
+            (F : Field_Enum; Offset : Field_Offset);
+          --  Mark the offset as "in use"
+ 
+          procedure Choose_Offset (F : Field_Enum);
+          --  Choose an offset for this field
+ 
+          function Offset_OK
+            (F : Field_Enum; Offset : Field_Offset) return Boolean is
+          begin
+             for T in Concrete_Type loop
+                if Fields_Per_Node (T) (F) or else not Overlay_Fields then
+                   declare
+                      Bits : Offset_Set_Unconstrained renames
+                        Offset_Sets (T)
+                          (First_Bit (F, Offset) .. Last_Bit (F, Offset));
+                   begin
+                      if Bits /= All_False (F, Offset) then
+                         return False;
+                      end if;
+                   end;
+                end if;
+             end loop;
+ 
+             return True;
+          end Offset_OK;
+ 
+          procedure Set_Offset_In_Use
+            (F : Field_Enum; Offset : Field_Offset) is
+          begin
+             for T in Concrete_Type loop
+                if Fields_Per_Node (T) (F) then
+                   declare
+                      Bits : Offset_Set_Unconstrained renames
+                        Offset_Sets (T)
+                          (First_Bit (F, Offset) .. Last_Bit (F, Offset));
+                   begin
+                      pragma Assert (Bits = All_False (F, Offset));
+                      Bits := All_True (F, Offset);
+                   end;
+                end if;
+             end loop;
+          end Set_Offset_In_Use;
+ 
+          procedure Choose_Offset (F : Field_Enum) is
+          begin
+             for Offset in Field_Offset loop
+                if Offset_OK (F, Offset) then
+                   Set_Offset_In_Use (F, Offset);
+ 
+                   Field_Table (F).Offset := Offset;
+                   return;
+                end if;
+             end loop;
+ 
+             raise Illegal with "No available field offset for " & Image (F) &
+               "; need to increase Gen_IL.Internals.Bit_Offset'Last (" &
+               Image (Gen_IL.Internals.Bit_Offset'Last) & " is too small)";
+          end Choose_Offset;
+ 
+          Weighted_Node_Frequency : array (Field_Enum) of Type_Count :=
+            (others => 0);
+          --  Number of concrete types that have each field
+ 
+          function More_Types_Have_Field (F1, F2 : Field_Enum) return Boolean is
+            (Weighted_Node_Frequency (F1) > Weighted_Node_Frequency (F2));
+          --  True if F1 appears in more concrete types than F2
+ 
+          function Sort_Less (F1, F2 : Field_Enum) return Boolean is
+            (if Weighted_Node_Frequency (F1) = Weighted_Node_Frequency (F2) then
+               F1 < F2
+             else More_Types_Have_Field (F1, F2));
+ 
+          package Sorting is new Field_Vectors.Generic_Sorting
+            ("<" => Sort_Less);
+ 
+          All_Fields : Field_Vector;
+ 
+       --  Start of processing for Compute_Field_Offsets
+ 
+       begin
+ 
+          --  Compute the number of types that have each field, weighted by the
+          --  frequency of such nodes.
+ 
+          for T in Concrete_Type loop
+             for F in Field_Enum loop
+                if Fields_Per_Node (T) (F) then
+                   Weighted_Node_Frequency (F) :=
+                     Weighted_Node_Frequency (F) + Type_Frequency (T);
+                end if;
+             end loop;
+          end loop;
+ 
+          --  Collect all the fields in All_Fields
+ 
+          for F in Node_Field loop
+             Append (All_Fields, F);
+          end loop;
+ 
+          for F in Entity_Field loop
+             Append (All_Fields, F);
+          end loop;
+ 
+          --  Sort All_Fields based on how many concrete types have the field.
+          --  This is for efficiency; we want to choose the offsets of the most
+          --  common fields first, so they get low numbers.
+ 
+          Sorting.Sort (All_Fields);
+ 
+          --  Go through all the fields, and choose the lowest offset that is
+          --  free in all types that have the field. This is basically a
+          --  graph-coloring algorithm on the interference graph. The
+          --  interference graph is an undirected graph with the fields being
+          --  nodes (not nodes in the compiler!) in the graph, and an edge
+          --  between a pair of fields if they appear in the same node in the
+          --  compiler. The "colors" are fields offsets, except that a
+          --  complication compared to standard graph coloring is that fields
+          --  are different sizes.
+ 
+          --  First choose offsets for some heavily-used fields, so they will
+          --  get low offsets, so they will wind up in the node header for
+          --  faster access.
+ 
+          Choose_Offset (Nkind);
+          pragma Assert (Field_Table (Nkind).Offset = 0);
+          Choose_Offset (Ekind);
+          pragma Assert (Field_Table (Ekind).Offset = 1);
+          Choose_Offset (Homonym);
+          pragma Assert (Field_Table (Homonym).Offset = 1);
+          Choose_Offset (Is_Immediately_Visible);
+          pragma Assert (Field_Table (Is_Immediately_Visible).Offset = 16);
+          Choose_Offset (From_Limited_With);
+          pragma Assert (Field_Table (From_Limited_With).Offset = 17);
+          Choose_Offset (Is_Potentially_Use_Visible);
+          pragma Assert (Field_Table (Is_Potentially_Use_Visible).Offset = 18);
+          Choose_Offset (Is_Generic_Instance);
+          pragma Assert (Field_Table (Is_Generic_Instance).Offset = 19);
+          Choose_Offset (Scope);
+          pragma Assert (Field_Table (Scope).Offset = 2);
+ 
+          --  Then loop through them all, skipping the ones we did above
+ 
+          for F of All_Fields loop
+             if Field_Table (F).Offset = Unknown_Offset then
+                Choose_Offset (F);
+             end if;
+          end loop;
+ 
+       end Compute_Field_Offsets;
+ 
+       ------------------------
+       -- Compute_Type_Sizes --
+       ------------------------
+ 
+       procedure Compute_Type_Sizes is
+       begin
+          for T in Concrete_Type loop
+             declare
+                Max_Offset : Bit_Offset := 0;
+ 
+             begin
+                for F in Field_Enum loop
+                   if Fields_Per_Node (T) (F) then
+                      Max_Offset :=
+                        Bit_Offset'Max
+                          (Max_Offset,
+                           To_Bit_Offset (F, Field_Table (F).Offset));
+                   end if;
+                end loop;
+ 
+                --  No type can be smaller than the header slots
+ 
+                Type_Bit_Size (T) :=
+                  Bit_Offset'Max (Max_Offset + 1, SS * Num_Header_Slots);
+             end;
+          end loop;
+ 
+          for T in Concrete_Node loop
+             Min_Node_Bit_Size :=
+               Bit_Offset'Min (Min_Node_Bit_Size, Type_Bit_Size (T));
+             Max_Node_Bit_Size :=
+               Bit_Offset'Max (Max_Node_Bit_Size, Type_Bit_Size (T));
+          end loop;
+ 
+          for T in Concrete_Entity loop
+             Min_Entity_Bit_Size :=
+               Bit_Offset'Min (Min_Entity_Bit_Size, Type_Bit_Size (T));
+             Max_Entity_Bit_Size :=
+               Bit_Offset'Max (Max_Entity_Bit_Size, Type_Bit_Size (T));
+          end loop;
+ 
+          Min_Node_Size := To_Size_In_Slots (Min_Node_Bit_Size);
+          Max_Node_Size := To_Size_In_Slots (Max_Node_Bit_Size);
+          Min_Entity_Size := To_Size_In_Slots (Min_Entity_Bit_Size);
+          Max_Entity_Size := To_Size_In_Slots (Max_Entity_Bit_Size);
+       end Compute_Type_Sizes;
+ 
+       ----------------------------------------
+       -- Check_For_Syntactic_Field_Mismatch --
+       ----------------------------------------
+ 
+       procedure Check_For_Syntactic_Field_Mismatch is
+       begin
+          for F in Field_Enum loop
+             if F /= Between_Node_And_Entity_Fields then
+                declare
+                   Syntactic_Seen, Semantic_Seen : Boolean := False;
+                   Have_Field : Type_Vector renames
+                     Field_Table (F).Have_This_Field;
+ 
+                begin
+                   for J in 1 .. Last_Index (Have_Field) loop
+                      if Syntactic (Have_Field (J)) (F) then
+                         Syntactic_Seen := True;
+                      else
+                         Semantic_Seen := True;
+                      end if;
+                   end loop;
+ 
+                   --  The following fields violate this rule. We might want to
+                   --  simplify by getting rid of these cases, but we allow them
+                   --  for now. At least, we don't want to add any new cases of
+                   --  syntactic/semantic mismatch.
+ 
+                   if F in Chars | Actions | Expression | Default_Expression
+                   then
+                      pragma Assert (Syntactic_Seen and Semantic_Seen);
+ 
+                   else
+                      if Syntactic_Seen and Semantic_Seen then
+                         raise Illegal with
+                           "syntactic/semantic mismatch for " & Image (F);
+                      end if;
+ 
+                      if Field_Table (F).Field_Type in Traversed_Field_Type
+                        and then Syntactic_Seen
+                      then
+                         Setter_Needs_Parent (F) := True;
+                      end if;
+                   end if;
+                end;
+             end if;
+          end loop;
+       end Check_For_Syntactic_Field_Mismatch;
+ 
+       ----------------------
+       -- Field_Types_Used --
+       ----------------------
+ 
+       function Field_Types_Used (First, Last : Field_Enum) return Type_Set is
+          Result : Type_Set := (others => False);
+       begin
+          for F in First .. Last loop
+             if Field_Table (F).Field_Type in Node_Or_Entity_Type then
+                Result (Node_Id) := True;
+ 
+             --  Subtypes of Uint all use the same Cast for Uint
+ 
+             elsif Field_Table (F).Field_Type in Uint_Subtype then
+                Result (Uint) := True;
+ 
+             else
+                Result (Field_Table (F).Field_Type) := True;
+             end if;
+          end loop;
+ 
+          return Result;
+       end Field_Types_Used;
+ 
+       pragma Style_Checks ("M120");
+       --  Lines of the form Put (S, "..."); are more readable if we relax the
+       --  line length. We really just want the "..." to be short enough.
+ 
+       ---------------------------
+       -- Put_Type_And_Subtypes --
+       ---------------------------
+ 
+       procedure Put_Type_And_Subtypes
+         (S : in out Sink; Root : Root_Type)
+       is
+ 
+          procedure Put_Enum_Type;
+          --  Print out the enumeration type declaration for a root type
+          --  (Node_Kind or Entity_Kind).
+ 
+          procedure Put_Kind_Subtype (T : Node_Or_Entity_Type);
+          --  Print out a subrange (of type Node_Kind or Entity_Kind) for a
+          --  given nonroot abstract type.
+ 
+          procedure Put_Id_Subtype (T : Node_Or_Entity_Type);
+          --  Print out a subtype (of type Node_Id or Entity_Id) for a given
+          --  nonroot abstract type.
+ 
+          procedure Put_Opt_Subtype (T : Node_Or_Entity_Type);
+          --  Print out an "optional" subtype; that is, one that allows
+          --  Empty. Their names start with "Opt_".
+ 
+          procedure Put_Enum_Type is
+             procedure Put_Enum_Lit (T : Node_Or_Entity_Type);
+             --  Print out one enumeration literal in the declaration of
+             --  Node_Kind or Entity_Kind.
+ 
+             First_Time : Boolean := True;
+ 
+             procedure Put_Enum_Lit (T : Node_Or_Entity_Type) is
+             begin
+                if T in Concrete_Type then
+                   if First_Time then
+                      First_Time := False;
+                   else
+                      Put (S, "," & LF);
+                   end if;
+ 
+                   Put (S, Image (T));
+                end if;
+             end Put_Enum_Lit;
+ 
+             type Dummy is array
+               (First_Concrete (Root) .. Last_Concrete (Root)) of Boolean;
+             Num_Types : constant Root_Int := Dummy'Length;
+ 
+          begin
+             Put (S, "type " & Image (Root) & " is -- " &
+                     Image (Num_Types) & " " & Image (Root) & "s" & LF);
+             Increase_Indent (S, 2);
+             Put (S, "(");
+             Increase_Indent (S, 1);
+             Iterate_Types (Root, Pre => Put_Enum_Lit'Access);
+             Decrease_Indent (S, 1);
+             Put (S, LF & ") with Size => 8; -- " & Image (Root) & LF & LF);
+             Decrease_Indent (S, 2);
+          end Put_Enum_Type;
+ 
+          procedure Put_Kind_Subtype (T : Node_Or_Entity_Type) is
+          begin
+             if T in Abstract_Type then
+                if Type_Table (T).Is_Union then
+                   pragma Assert (Type_Table (T).Parent = Root);
+ 
+                   Put (S, "subtype " & Image (T) & " is" & LF);
+                   Increase_Indent (S, 2);
+                   Put (S, Image (Root) & " with Predicate =>" & LF);
+                   Increase_Indent (S, 2);
+                   Put (S, Image (T) & " in" & LF);
+                   Put_Types_With_Bars (S, Type_Table (T).Children);
+                   Decrease_Indent (S, 2);
+                   Put (S, ";" & LF);
+                   Decrease_Indent (S, 2);
+ 
+                elsif Type_Table (T).Parent /= No_Type then
+                   Put (S, "subtype " & Image (T) & " is " &
+                        Image (Type_Table (T).Parent) & " range" & LF);
+                   Increase_Indent (S, 2);
+                   Put (S, Image (Type_Table (T).First) & " .. " &
+                           Image (Type_Table (T).Last) & ";" & LF);
+                   Decrease_Indent (S, 2);
+ 
+                   Increase_Indent (S, 3);
+ 
+                   for J in 1 .. Type_Table (T).Concrete_Descendants.Last_Index loop
+                      Put (S, "--  " &
+                           Image (Type_Table (T).Concrete_Descendants (J)) & LF);
+                   end loop;
+ 
+                   Decrease_Indent (S, 3);
+                end if;
+             end if;
+          end Put_Kind_Subtype;
+ 
+          procedure Put_Id_Subtype (T : Node_Or_Entity_Type) is
+          begin
+             if Type_Table (T).Parent /= No_Type then
+                Put (S, "subtype " & Id_Image (T) & " is" & LF);
+                Increase_Indent (S, 2);
+                Put (S, Id_Image (Type_Table (T).Parent));
+ 
+                if Enable_Assertions then
+                   Put (S, " with Predicate =>" & LF);
+                   Increase_Indent (S, 2);
+                   Put (S, "K (" & Id_Image (T) & ") in " & Image (T));
+                   Decrease_Indent (S, 2);
+                end if;
+ 
+                Put (S, ";" & LF);
+                Decrease_Indent (S, 2);
+             end if;
+          end Put_Id_Subtype;
+ 
+          procedure Put_Opt_Subtype (T : Node_Or_Entity_Type) is
+          begin
+             if Type_Table (T).Parent /= No_Type then
+                Put (S, "subtype Opt_" & Id_Image (T) & " is" & LF);
+                Increase_Indent (S, 2);
+                Put (S, Id_Image (Root));
+ 
+                --  Assert that the Opt_XXX subtype is empty or in the XXX
+                --  subtype.
+ 
+                if Enable_Assertions then
+                   Put (S, " with Predicate =>" & LF);
+                   Increase_Indent (S, 2);
+                   Put (S, "Opt_" & Id_Image (T) & " = Empty or else" & LF);
+                   Put (S, "Opt_" & Id_Image (T) & " in " & Id_Image (T));
+                   Decrease_Indent (S, 2);
+                end if;
+ 
+                Put (S, ";" & LF);
+                Decrease_Indent (S, 2);
+             end if;
+          end Put_Opt_Subtype;
+ 
+       begin -- Put_Type_And_Subtypes
+          Put_Enum_Type;
+ 
+          --  Put the getter for Nkind and Ekind here, earlier than the other
+          --  getters, because it is needed in predicates of the following
+          --  subtypes.
+ 
+          case Root is
+             when Node_Kind =>
+                Put_Getter_Decl (S, Nkind);
+                Put (S, "function K (N : Node_Id) return Node_Kind renames " & Image (Nkind) & ";" & LF);
+                Put (S, "--  Shorthand for use in predicates and preconditions below" & LF);
+                Put (S, "--  There is no procedure Set_Nkind." & LF);
+                Put (S, "--  See Init_Nkind and Mutate_Nkind in Atree." & LF & LF);
+ 
+             when Entity_Kind =>
+                Put_Getter_Decl (S, Ekind);
+                Put (S, "function K (N : Entity_Id) return Entity_Kind renames Ekind;" & LF);
+                Put (S, "--  Shorthand for use in predicates and preconditions below" & LF);
+                Put (S, "--  There is no procedure Set_Ekind here." & LF);
+                Put (S, "--  See Mutate_Ekind in Atree." & LF & LF);
+ 
+             when others => raise Program_Error;
+          end case;
+ 
+          Put (S, "--  Subtypes of " & Image (Root) & " for each abstract type:" & LF & LF);
+ 
+          Put (S, "pragma Style_Checks (""M200"");" & LF);
+          Iterate_Types (Root, Pre => Put_Kind_Subtype'Access);
+ 
+          Put (S, LF & "--  Subtypes of " & Id_Image (Root) &
+               " with specified " & Image (Root) & "." & LF);
+          Put (S, "--  These may be used in place of " & Id_Image (Root) &
+               " for better documentation," & LF);
+          Put (S, "--  and if assertions are enabled, for run-time checking." & LF & LF);
+ 
+          Iterate_Types (Root, Pre => Put_Id_Subtype'Access);
+ 
+          Put (S, LF & "--  Union types (nonhierarchical subtypes of " &
+               Id_Image (Root) & ")" & LF & LF);
+ 
+          for T in First_Abstract (Root) .. Last_Abstract (Root) loop
+             if Type_Table (T) /= null and then Type_Table (T).Is_Union then
+                Put_Kind_Subtype (T);
+                Put_Id_Subtype (T);
+             end if;
+          end loop;
+ 
+          Put (S, LF & "--  Optional subtypes of " & Id_Image (Root) & "." &
+               " These allow Empty." & LF & LF);
+ 
+          Iterate_Types (Root, Pre => Put_Opt_Subtype'Access);
+ 
+          Put (S, LF & "--  Optional union types:" & LF & LF);
+ 
+          for T in First_Abstract (Root) .. Last_Abstract (Root) loop
+             if Type_Table (T) /= null and then Type_Table (T).Is_Union then
+                Put_Opt_Subtype (T);
+             end if;
+          end loop;
+ 
+          Put (S, LF & "subtype Flag is Boolean;" & LF & LF);
+       end Put_Type_And_Subtypes;
+ 
+       -------------------------------------------
+       -- Put_Casts --
+       -------------------------------------------
+ 
+       procedure Put_Casts
+         (S : in out Sink; T : Type_Enum)
+       is
+          Pre : constant String :=
+            "function Cast is new Unchecked_Conversion (";
+          Lo_Type : constant String := "Field_Size_" & Image (Field_Size (T)) & "_Bit";
+          Hi_Type : constant String := Get_Set_Id_Image (T);
+       begin
+          if T not in Uint_Subtype then
+             if T not in Node_Kind_Type | Entity_Kind_Type then
+                Put (S, Pre & Hi_Type & ", " & Lo_Type & ");" & LF);
+             end if;
+ 
+             Put (S, Pre & Lo_Type & ", " & Hi_Type & ");" & LF);
+          end if;
+       end Put_Casts;
+ 
+       ----------------------
+       -- Put_Precondition --
+       ----------------------
+ 
+       procedure Put_Precondition
+         (S : in out Sink; F : Field_Enum)
+       is
+          --  If the field is present in all entities, we want to assert that
+          --  N in N_Entity_Id. If the field is present in only some entities,
+          --  we don't need that, because we are fetching Ekind in that case,
+          --  which will assert N in N_Entity_Id.
+ 
+          Is_Entity : constant String :=
+            (if Field_Table (F).Have_This_Field = All_Entities then
+              "N in N_Entity_Id"
+             else "");
+       begin
+          --  If this is an entity field, then we should assert that N is an
+          --  entity. We need "N in A | B | ..." unless this is embodied in a
+          --  subtype predicate.
+          --
+          --  We can't put the extra "Pre => ..." specified on the call to
+          --  Create_..._Field as part of the precondition, because some of
+          --  them call things that are not visible here.
+ 
+          if Enable_Assertions then
+             if Length (Field_Table (F).Have_This_Field) = 1
+               or else Field_Table (F).Have_This_Field = Nodes_And_Entities
+             then
+                if Is_Entity /= "" then
+                   Increase_Indent (S, 1);
+                   Put (S, ", Pre =>" & LF);
+                   Put (S, Is_Entity);
+                   Decrease_Indent (S, 1);
+                end if;
+ 
+             else
+                Put (S, ", Pre =>" & LF);
+                Increase_Indent (S, 1);
+                Put (S, "N in ");
+                Put_Type_Ids_With_Bars (S, Field_Table (F).Have_This_Field);
+ 
+                pragma Assert (Is_Entity = "");
+ 
+                Decrease_Indent (S, 1);
+             end if;
+          end if;
+       end Put_Precondition;
+ 
+       function Root_Type_For_Field (F : Field_Enum) return Root_Type is
+         (case F is
+            when Node_Field           => Node_Kind,
+            when Entity_Field         => Entity_Kind,
+            when Between_Node_And_Entity_Fields => Node_Kind); -- can't happen
+ 
+       function N_Type (F : Field_Enum) return String is
+         (if Length (Field_Table (F).Have_This_Field) = 1 then
+           Id_Image (Field_Table (F).Have_This_Field (1))
+          else Id_Image (Root_Type_For_Field (F)));
+       --  Name of the parameter type of the N parameter of the getter and
+       --  setter for field F. If there's only one Have_This_Field, use that;
+       --  the predicate will check for the right Kind. Otherwise, we use
+       --  Node_Id or Entity_Id, and the getter and setter will have
+       --  preconditions.
+ 
+       procedure Put_Get_Set_Incr
+         (S : in out Sink; F : Field_Enum; Get_Or_Set : String)
+         with Pre => Get_Or_Set in "Get" | "Set";
+       --  If statistics are enabled, put the appropriate increment statement
+ 
+       ----------------------
+       -- Put_Get_Set_Incr --
+       ----------------------
+ 
+       procedure Put_Get_Set_Incr
+         (S : in out Sink; F : Field_Enum; Get_Or_Set : String) is
+       begin
+          if Statistics_Enabled then
+             Put (S, "Atree." & Get_Or_Set & "_Count (" & F_Image (F) &
+                    ") := Atree." & Get_Or_Set & "_Count (" &
+                    F_Image (F) & ") + 1;" & LF);
+          end if;
+       end Put_Get_Set_Incr;
+ 
+       ------------------------
+       -- Node_To_Fetch_From --
+       ------------------------
+ 
+       function Node_To_Fetch_From (F : Field_Enum) return String is
+       begin
+          return
+            (case Field_Table (F).Type_Only is
+               when No_Type_Only => "N",
+               when Base_Type_Only => "Base_Type (N)",
+               when Impl_Base_Type_Only => "Implementation_Base_Type (N)",
+               when Root_Type_Only => "Root_Type (N)");
+       end Node_To_Fetch_From;
+ 
+       ---------------------
+       -- Put_Getter_Spec --
+       ---------------------
+ 
+       procedure Put_Getter_Spec (S : in out Sink; F : Field_Enum) is
+       begin
+          Put (S, "function " & Image (F));
+          Put (S, " (N : " & N_Type (F) & ") return " &
+               Get_Set_Id_Image (Field_Table (F).Field_Type));
+       end Put_Getter_Spec;
+ 
+       ---------------------
+       -- Put_Getter_Decl --
+       ---------------------
+ 
+       procedure Put_Getter_Decl (S : in out Sink; F : Field_Enum) is
+       begin
+          Put_Getter_Spec (S, F);
+          Put (S, " with " & Inline);
+          Increase_Indent (S, 2);
+          Put_Precondition (S, F);
+          Decrease_Indent (S, 2);
+          Put (S, ";" & LF);
+       end Put_Getter_Decl;
+ 
+       ------------------------------
+       -- Put_Getter_Setter_Locals --
+       ------------------------------
+ 
+       procedure Put_Getter_Setter_Locals
+         (S : in out Sink; F : Field_Enum; Get : Boolean)
+       is
+          Rec : Field_Info renames Field_Table (F).all;
+ 
+          F_Size : constant Bit_Offset := Field_Size (Rec.Field_Type);
+          Off : constant Field_Offset := Rec.Offset;
+          F_Per_Slot : constant Field_Offset :=
+            SS / Field_Offset (Field_Size (Rec.Field_Type));
+          Slot_Off : constant Field_Offset := Off / F_Per_Slot;
+          In_NH : constant Boolean := Slot_Off < Num_Header_Slots;
+ 
+          N : constant String :=
+            (if Get then Node_To_Fetch_From (F) else "N");
+ 
+       begin
+          Put (S, " is" & LF);
+          Increase_Indent (S, 3);
+          Put (S, "--  " & Image (F_Per_Slot) & "  " & Image (F_Size) &
+                 "-bit fields per " & SSS & "-bit slot." & LF);
+          Put (S, "--  Offset " & Image (Off) & " = " &
+                 Image (Slot_Off) & " slots + " & Image (Off mod F_Per_Slot) &
+                 " fields in slot." & LF & LF);
+ 
+          Put (S, "Off : constant := " & Image (Off) & ";" & LF);
+          Put (S, "F_Size : constant := " & Image (F_Size) & ";" & LF);
+ 
+          if Field_Size (Rec.Field_Type) /= SS then
+             Put (S, "Mask : constant := 2**F_Size - 1;" & LF);
+          end if;
+ 
+          Put (S, "F_Per_Slot : constant Field_Offset := Slot_Size / F_Size;" & LF);
+          Put (S, "Slot_Off : constant Field_Offset := Off / F_Per_Slot;" & LF);
+ 
+          if In_NH then
+             Put (S, "S : Slot renames Node_Offsets.Table (" & N & ").Slots (Slot_Off);" & LF);
+          else
+             Put (S, "S : Slot renames Slots.Table (Node_Offsets.Table (" & N & ").Offset + Slot_Off);" & LF);
+          end if;
+ 
+          if Field_Size (Rec.Field_Type) /= SS then
+             Put (S, "V : constant Natural := Natural ((Off mod F_Per_Slot) * F_Size);" & LF);
+             Put (S, LF);
+          end if;
+       end Put_Getter_Setter_Locals;
+ 
+       ---------------------
+       -- Put_Getter_Body --
+       ---------------------
+ 
+       procedure Put_Getter_Body (S : in out Sink; F : Field_Enum) is
+          Rec : Field_Info renames Field_Table (F).all;
+          F_Size : constant Bit_Offset := Field_Size (Rec.Field_Type);
+          T : constant String := Get_Set_Id_Image (Rec.Field_Type);
+       begin
+          --  Note that we store the result in a local constant below, so that
+          --  the "Pre => ..." can refer to it. The constant is called Val so
+          --  that it has the same name as the formal of the setter, so the
+          --  "Pre => ..." can refer to it by the same name in both getter
+          --  and setter.
+ 
+          Put_Getter_Spec (S, F);
+          Put_Getter_Setter_Locals (S, F, Get => True);
+ 
+          Put (S, "Raw : constant Field_Size_" & Image (F_Size) & "_Bit :=" & LF);
+          Increase_Indent (S, 2);
+          Put (S, "Field_Size_" & Image (F_Size) & "_Bit (");
+ 
+          if Field_Size (Rec.Field_Type) /= SS then
+             Put (S, "Shift_Right (S, V) and Mask);" & LF);
+          else
+             Put (S, "S);" & LF);
+          end if;
+ 
+          Decrease_Indent (S, 2);
+ 
+          Put (S, "Val : constant " & T & " :=");
+ 
+          if Field_Has_Special_Default (Rec.Field_Type) then
+             pragma Assert (Field_Size (Rec.Field_Type) = 32);
+             Put (S, LF);
+             Increase_Indent (S, 2);
+             Put (S, "(if Raw = 0 then " & Special_Default (Rec.Field_Type) &
+                    " else " & "Cast (Raw));");
+             Decrease_Indent (S, 2);
+ 
+          else
+             Put (S, " Cast (Raw);");
+          end if;
+ 
+          Put (S, LF);
+ 
+          Decrease_Indent (S, 3);
+          Put (S, "begin" & LF);
+          Increase_Indent (S, 3);
+ 
+          Put (S, "--  pragma Debug (Validate_Node_And_Offset (NN, Slot_Off));" & LF);
+          --  Comment out the validation, because it's too slow, and because the
+          --  relevant routines in Atree are not visible.
+ 
+          if Rec.Pre.all /= "" then
+             Put (S, "pragma Assert (" & Rec.Pre.all & ");" & LF);
+          end if;
+ 
+          if Rec.Pre_Get.all /= "" then
+             Put (S, "pragma Assert (" & Rec.Pre_Get.all & ");" & LF);
+          end if;
+ 
+          Put_Get_Set_Incr (S, F, "Get");
+          Put (S, "return Val;" & LF);
+          Decrease_Indent (S, 3);
+          Put (S, "end " & Image (F) & ";" & LF & LF);
+       end Put_Getter_Body;
+ 
+       ---------------------
+       -- Put_Setter_Spec --
+       ---------------------
+ 
+       procedure Put_Setter_Spec (S : in out Sink; F : Field_Enum) is
+          Rec    : Field_Info renames Field_Table (F).all;
+          Default : constant String :=
+            (if Rec.Field_Type = Flag then " := True" else "");
+       begin
+          Put (S, "procedure Set_" & Image (F));
+          Put (S, " (N : " & N_Type (F) & "; Val : " &
+               Get_Set_Id_Image (Rec.Field_Type) & Default & ")");
+       end Put_Setter_Spec;
+ 
+       ---------------------
+       -- Put_Setter_Decl --
+       ---------------------
+ 
+       procedure Put_Setter_Decl (S : in out Sink; F : Field_Enum) is
+       begin
+          Put_Setter_Spec (S, F);
+          Put (S, " with " & Inline);
+          Increase_Indent (S, 2);
+          Put_Precondition (S, F);
+          Decrease_Indent (S, 2);
+          Put (S, ";" & LF);
+       end Put_Setter_Decl;
+ 
+       ---------------------
+       -- Put_Setter_Body --
+       ---------------------
+ 
+       procedure Put_Setter_Body (S : in out Sink; F : Field_Enum) is
+          Rec : Field_Info renames Field_Table (F).all;
+          F_Size : constant Bit_Offset := Field_Size (Rec.Field_Type);
+ 
+          --  If Type_Only was specified in the call to Create_Semantic_Field,
+          --  then we assert that the node is a base type. We cannot assert that
+          --  it is an implementation base type or a root type.
+ 
+          Type_Only_Assertion : constant String :=
+            (case Rec.Type_Only is
+               when No_Type_Only => "",
+               when Base_Type_Only | Impl_Base_Type_Only | Root_Type_Only =>
+                 "Is_Base_Type (N)");
+       begin
+          Put_Setter_Spec (S, F);
+          Put_Getter_Setter_Locals (S, F, Get => False);
+ 
+          Put (S, "Raw : constant Field_Size_" & Image (F_Size) & "_Bit := Cast (Val);" & LF);
+ 
+          Decrease_Indent (S, 3);
+          Put (S, "begin" & LF);
+          Increase_Indent (S, 3);
+ 
+          Put (S, "--  pragma Debug (Validate_Node_And_Offset_Write (N, Slot_Off));" & LF);
+          --  Comment out the validation, because it's too slow, and because the
+          --  relevant routines in Atree are not visible.
+ 
+          if Rec.Pre.all /= "" then
+             Put (S, "pragma Assert (" & Rec.Pre.all & ");" & LF);
+          end if;
+ 
+          if Rec.Pre_Set.all /= "" then
+             Put (S, "pragma Assert (" & Rec.Pre_Set.all & ");" & LF);
+          end if;
+ 
+          if Type_Only_Assertion /= "" then
+             Put (S, "pragma Assert (" & Type_Only_Assertion & ");" & LF);
+          end if;
+ 
+          if Setter_Needs_Parent (F) then
+             declare
+                Err : constant String :=
+                  (if Rec.Field_Type = List_Id then "Error_List" else "Error");
+             begin
+                Put (S, "if Present (Val) and then Val /= " & Err & " then" & LF);
+                Increase_Indent (S, 3);
+                Put (S, "pragma Warnings (Off, ""actuals for this call may be in wrong order"");" & LF);
+                Put (S, "Set_Parent (Val, N);" & LF);
+                Put (S, "pragma Warnings (On, ""actuals for this call may be in wrong order"");" & LF);
+                Decrease_Indent (S, 3);
+                Put (S, "end if;" & LF & LF);
+             end;
+          end if;
+ 
+          if Field_Size (Rec.Field_Type) /= SS then
+             Put (S, "S := (S and not Shift_Left (Mask, V)) or Shift_Left (Slot (Raw), V);" & LF);
+ 
+          else
+             Put (S, "S := Slot (Raw);" & LF);
+          end if;
+ 
+          Put_Get_Set_Incr (S, F, "Set");
+ 
+          Decrease_Indent (S, 3);
+          Put (S, "end Set_" & Image (F) & ";" & LF & LF);
+       end Put_Setter_Body;
+ 
+       --------------------
+       -- Put_Subp_Decls --
+       --------------------
+ 
+       procedure Put_Subp_Decls (S : in out Sink; Root : Root_Type) is
+          --  Note that there are several fields that are defined for both nodes
+          --  and entities, such as Nkind. These are allocated slots in both,
+          --  but here we only put out getters and setters in Sinfo.Nodes, not
+          --  Einfo.Entities.
+ 
+       begin
+          Put (S, "--  Getters and setters for fields" & LF);
+ 
+          for F in First_Field (Root) .. Last_Field (Root) loop
+             --  Nkind/Ekind getter is already done (see Put_Type_And_Subtypes),
+             --  and there is no setter for these.
+ 
+             if F = Nkind then
+                Put (S, LF & "--  Nkind getter is above" & LF);
+ 
+             elsif F = Ekind then
+                Put (S, LF & "--  Ekind getter is above" & LF);
+ 
+             else
+                Put_Getter_Decl (S, F);
+                Put_Setter_Decl (S, F);
+             end if;
+ 
+             Put (S, LF);
+          end loop;
+       end Put_Subp_Decls;
+ 
+       ---------------------
+       -- Put_Subp_Bodies --
+       ---------------------
+ 
+       procedure Put_Subp_Bodies (S : in out Sink; Root : Root_Type) is
+       begin
+          Put (S, LF & "--  Getters and setters for fields" & LF & LF);
+ 
+          for F in First_Field (Root) .. Last_Field (Root) loop
+             Put_Getter_Body (S, F);
+ 
+             if F not in Nkind | Ekind then
+                Put_Setter_Body (S, F);
+             end if;
+          end loop;
+       end Put_Subp_Bodies;
+ 
+       --------------------------
+       -- Put_Traversed_Fields --
+       --------------------------
+ 
+       procedure Put_Traversed_Fields (S : in out Sink) is
+ 
+          function Is_Traversed_Field
+            (T : Concrete_Node; F : Field_Enum) return Boolean;
+          --  True if F is a field that should be traversed by Traverse_Func. In
+          --  particular, True if F is a syntactic field of T, and is of a
+          --  Node_Id or List_Id type.
+ 
+          function Init_Max_Traversed_Fields return Field_Offset;
+          --  Compute the maximum number of syntactic fields that are of type
+          --  Node_Id or List_Id over all node types.
+ 
+          procedure Put_Aggregate (T : Node_Or_Entity_Type);
+          --  Print out the subaggregate for one type
+ 
+          function Is_Traversed_Field
+            (T : Concrete_Node; F : Field_Enum) return Boolean is
+          begin
+             return Syntactic (T) (F)
+               and then Field_Table (F).Field_Type in Traversed_Field_Type;
+          end Is_Traversed_Field;
+ 
+          First_Time : Boolean := True;
+ 
+          procedure Put_Aggregate (T : Node_Or_Entity_Type) is
+             Left_Opnd_Skipped : Boolean := False;
+          begin
+             if T in Concrete_Node then
+                if First_Time then
+                   First_Time := False;
+                else
+                   Put (S, "," & LF);
+                end if;
+ 
+                Put (S, Image (T) & " => (");
+                Increase_Indent (S, 2);
+ 
+                for FI in 1 .. Last_Index (Type_Table (T).Fields) loop
+                   declare
+                      F : constant Field_Enum := Type_Table (T).Fields (FI);
+ 
+                   begin
+                      if Is_Traversed_Field (T, F) then
+                         if F = Left_Opnd then
+                            Left_Opnd_Skipped := True; -- see comment below
+ 
+                         else
+                            Put (S, Image (Field_Table (F).Offset) & ", ");
+                         end if;
+                      end if;
+                   end;
+                end loop;
+ 
+                --  We always put the Left_Opnd field of N_Op_Concat last. See
+                --  comments in Atree.Traverse_Func for the reason. We might as
+                --  well do that for all Left_Opnd fields; the old version did
+                --  that.
+ 
+                if Left_Opnd_Skipped then
+                   Put (S, Image (Field_Table (Left_Opnd).Offset) & ", ");
+                end if;
+ 
+                Put (S, "others => No_Field_Offset");
+ 
+                Decrease_Indent (S, 2);
+                Put (S, ")");
+             end if;
+          end Put_Aggregate;
+ 
+          function Init_Max_Traversed_Fields return Field_Offset is
+             Result : Field_Offset := 0;
+          begin
+             for T in Concrete_Node loop
+                declare
+                   Num_Traversed_Fields : Field_Offset := 0; -- in type T
+ 
+                begin
+                   for FI in 1 .. Last_Index (Type_Table (T).Fields) loop
+                      declare
+                         F : constant Field_Enum := Type_Table (T).Fields (FI);
+ 
+                      begin
+                         if Is_Traversed_Field (T, F) then
+                            Num_Traversed_Fields := Num_Traversed_Fields + 1;
+                         end if;
+                      end;
+                   end loop;
+ 
+                   if Num_Traversed_Fields > Result then
+                      Result := Num_Traversed_Fields;
+                   end if;
+                end;
+             end loop;
+ 
+             return Result;
+          end Init_Max_Traversed_Fields;
+ 
+          Max_Traversed_Fields : constant Field_Offset :=
+            Init_Max_Traversed_Fields;
+ 
+       begin
+          Put (S, "--  Table of fields that should be traversed by Traverse subprograms." & LF);
+          Put (S, "--  Each entry is an array of offsets in slots of fields to be" & LF);
+          Put (S, "--  traversed, terminated by a sentinel equal to No_Field_Offset." & LF & LF);
+ 
+          Put (S, "subtype Traversed_Offset_Array is Offset_Array (0 .. " &
+               Image (Max_Traversed_Fields - 1) & " + 1);" & LF);
+          Put (S, "Traversed_Fields : constant array (Node_Kind) of Traversed_Offset_Array :=" & LF);
+          --  One extra for the sentinel
+ 
+          Increase_Indent (S, 2);
+          Put (S, "(");
+          Increase_Indent (S, 1);
+          Iterate_Types (Node_Kind, Pre => Put_Aggregate'Access);
+          Decrease_Indent (S, 1);
+          Put (S, ");" & LF & LF);
+          Decrease_Indent (S, 2);
+       end Put_Traversed_Fields;
+ 
+       ----------------
+       -- Put_Tables --
+       ----------------
+ 
+       procedure Put_Tables (S : in out Sink; Root : Root_Type) is
+ 
+          First_Time : Boolean := True;
+ 
+          procedure Put_Size (T : Node_Or_Entity_Type);
+          procedure Put_Size (T : Node_Or_Entity_Type) is
+          begin
+             if T in Concrete_Type then
+                if First_Time then
+                   First_Time := False;
+                else
+                   Put (S, "," & LF);
+                end if;
+ 
+                Put (S, Image (T) & " => " & Image (Type_Size_In_Slots (T)));
+             end if;
+          end Put_Size;
+ 
+          procedure Put_Field_Array (T : Concrete_Type);
+ 
+          procedure Put_Field_Array (T : Concrete_Type) is
+             First_Time : Boolean := True;
+          begin
+             for F in First_Field (Root) .. Last_Field (Root) loop
+                if Fields_Per_Node (T) (F) then
+                   if First_Time then
+                      First_Time := False;
+                   else
+                      Put (S, "," & LF);
+                   end if;
+ 
+                   Put (S, F_Image (F));
+                end if;
+             end loop;
+          end Put_Field_Array;
+ 
+          Field_Enum_Type_Name : constant String :=
+            (case Root is
+               when Node_Kind => "Node_Field",
+               when others => "Entity_Field");  -- Entity_Kind
+ 
+       begin
+          Put (S, "--  Table of sizes in " & SSS & "-bit slots for given " &
+               Image (Root) & ", for use by Atree:" & LF);
+ 
+          case Root is
+             when Node_Kind =>
+                Put (S, LF & "Min_Node_Size : constant Field_Offset := " &
+                     Image (Min_Node_Size) & ";" & LF);
+                Put (S, "Max_Node_Size : constant Field_Offset := " &
+                     Image (Max_Node_Size) & ";" & LF & LF);
+ 
+             when Entity_Kind =>
+                Put (S, LF & "Min_Entity_Size : constant Field_Offset := " &
+                     Image (Min_Entity_Size) & ";" & LF);
+                Put (S, "Max_Entity_Size : constant Field_Offset := " &
+                     Image (Max_Entity_Size) & ";" & LF & LF);
+             when others => raise Program_Error;
+          end case;
+ 
+          Put (S, "Size : constant array (" & Image (Root) &
+               ") of Field_Offset :=" & LF);
+          Increase_Indent (S, 2);
+          Put (S, "(");
+          Increase_Indent (S, 1);
+ 
+          Iterate_Types (Root, Pre => Put_Size'Access);
+ 
+          Decrease_Indent (S, 1);
+          Put (S, "); -- Size" & LF);
+          Decrease_Indent (S, 2);
+ 
+          if Root = Node_Kind then
+             declare
+                type Node_Dummy is array (Node_Field) of Boolean;
+                type Entity_Dummy is array (Entity_Field) of Boolean;
+                Num_Fields : constant Root_Int :=
+                  Node_Dummy'Length + Entity_Dummy'Length;
+                First_Time : Boolean := True;
+             begin
+                Put (S, LF & "--  Enumeration of all " & Image (Num_Fields)
+                     & " fields:" & LF & LF);
+ 
+                Put (S, "type Node_Or_Entity_Field is" & LF);
+                Increase_Indent (S, 2);
+                Put (S, "(");
+                Increase_Indent (S, 1);
+ 
+                for F in Node_Field loop
+                   if First_Time then
+                      First_Time := False;
+                   else
+                      Put (S, "," & LF);
+                   end if;
+ 
+                   Put (S, F_Image (F));
+                end loop;
+ 
+                for F in Entity_Field loop
+                   Put (S, "," & LF);
+                   Put (S, F_Image (F));
+                end loop;
+ 
+                Decrease_Indent (S, 1);
+                Put (S, "); -- Node_Or_Entity_Field" & LF);
+                Decrease_Indent (S, 2);
+             end;
+          end if;
+ 
+          Put (S, LF & "subtype " & Field_Enum_Type_Name & " is" & LF);
+          Increase_Indent (S, 2);
+          Put (S, "Node_Or_Entity_Field range " & F_Image (First_Field (Root)) &
+                 " .. " & F_Image (Last_Field (Root)) & ";" & LF);
+          Decrease_Indent (S, 2);
+ 
+          Put (S, LF & "type " & Field_Enum_Type_Name & "_Index is new Pos;" & LF);
+          Put (S, "type " & Field_Enum_Type_Name & "_Array is array (" &
+               Field_Enum_Type_Name & "_Index range <>) of " &
+               Field_Enum_Type_Name & ";" & LF);
+          Put (S, "type " & Field_Enum_Type_Name &
+               "_Array_Ref is access constant " & Field_Enum_Type_Name &
+               "_Array;" & LF);
+          Put (S, "subtype A is " & Field_Enum_Type_Name & "_Array;" & LF);
+          --  Short name to make allocators below more readable
+ 
+          declare
+             First_Time : Boolean := True;
+ 
+             procedure Do_One_Type (T : Node_Or_Entity_Type);
+             procedure Do_One_Type (T : Node_Or_Entity_Type) is
+             begin
+                if T in Concrete_Type then
+                   if First_Time then
+                      First_Time := False;
+                   else
+                      Put (S, "," & LF);
+                   end if;
+ 
+                   Put (S, Image (T) & " =>" & LF);
+                   Increase_Indent (S, 2);
+                   Put (S, "new A'(");
+                   Increase_Indent (S, 6);
+                   Increase_Indent (S, 1);
+ 
+                   Put_Field_Array (T);
+ 
+                   Decrease_Indent (S, 1);
+                   Put (S, ")");
+                   Decrease_Indent (S, 6);
+                   Decrease_Indent (S, 2);
+                end if;
+             end Do_One_Type;
+          begin
+             Put (S, LF & "--  Table mapping " & Image (Root) &
+                  "s to the sequence of fields that exist in that " &
+                  Image (Root) & ":" & LF & LF);
+ 
+             Put (S, Field_Enum_Type_Name & "_Table : constant array (" &
+                  Image (Root) & ") of " & Field_Enum_Type_Name &
+                  "_Array_Ref :=" & LF);
+ 
+             Increase_Indent (S, 2);
+             Put (S, "(");
+             Increase_Indent (S, 1);
+ 
+             Iterate_Types (Root, Pre => Do_One_Type'Access);
+ 
+             Decrease_Indent (S, 1);
+             Put (S, "); -- " & Field_Enum_Type_Name & "_Table" & LF);
+             Decrease_Indent (S, 2);
+          end;
+ 
+          if Root = Node_Kind then
+             declare
+                First_Time : Boolean := True;
+                FS, FB, LB : Bit_Offset;
+                --  Field size in bits, first bit, and last bit for the previous
+                --  time around the loop. Used to print a comment after ",".
+ 
+                procedure One_Comp (F : Field_Enum);
+ 
+                --------------
+                -- One_Comp --
+                --------------
+ 
+                procedure One_Comp (F : Field_Enum) is
+                   pragma Annotate (Codepeer, Modified, Field_Table);
+                   Offset : constant Field_Offset := Field_Table (F).Offset;
+                begin
+                   if First_Time then
+                      First_Time := False;
+                   else
+                      Put (S, ",");
+ 
+                      --  Print comment showing field's bits, except for 1-bit
+                      --  fields.
+ 
+                      if FS /= 1 then
+                         Put (S, " -- *" & Image (FS) & " = bits " &
+                                Image (FB) & ".." & Image (LB));
+                      end if;
+ 
+                      Put (S, LF);
+                   end if;
+ 
+                   Put (S, F_Image (F) & " => (" &
+                        Image (Field_Table (F).Field_Type) & "_Field, " &
+                        Image (Offset) & ", " &
+                        Image (Field_Table (F).Type_Only) & ")");
+ 
+                   FS := Field_Size (F);
+                   FB := First_Bit (F, Offset);
+                   LB := Last_Bit (F, Offset);
+                end One_Comp;
+ 
+             begin
+                Put (S, LF & "--  Table mapping fields to kind and offset:" & LF & LF);
+ 
+                Put (S, "Field_Descriptors : constant array (" &
+                     "Node_Or_Entity_Field) of Field_Descriptor :=" & LF);
+ 
+                Increase_Indent (S, 2);
+                Put (S, "(");
+                Increase_Indent (S, 1);
+ 
+                for F in Node_Field loop
+                   One_Comp (F);
+                end loop;
+ 
+                for F in Entity_Field loop
+                   One_Comp (F);
+                end loop;
+ 
+                Decrease_Indent (S, 1);
+                Put (S, "); -- Field_Descriptors" & LF);
+                Decrease_Indent (S, 2);
+             end;
+          end if;
+ 
+       end Put_Tables;
+ 
+       ----------------
+       -- Put_Seinfo --
+       ----------------
+ 
+       procedure Put_Seinfo is
+          S : Sink;
+       begin
+          Create_File (S, "seinfo.ads");
+          Put (S, "with Types; use Types;" & LF);
+          Put (S, LF & "package Seinfo is" & LF & LF);
+          Increase_Indent (S, 3);
+ 
+          Put (S, "--  This package is automatically generated." & LF & LF);
+ 
+          Put (S, "--  Common declarations visible in both Sinfo.Nodes and Einfo.Entities." & LF);
+ 
+          Put (S, LF & "type Field_Kind is" & LF);
+          Increase_Indent (S, 2);
+          Put (S, "(");
+          Increase_Indent (S, 1);
+ 
+          declare
+             First_Time : Boolean := True;
+          begin
+             for T in Special_Type loop
+                if First_Time then
+                   First_Time := False;
+                else
+                   Put (S, "," & LF);
+                end if;
+ 
+                Put (S, Image (T) & "_Field");
+             end loop;
+          end;
+ 
+          Decrease_Indent (S, 1);
+          Decrease_Indent (S, 2);
+          Put (S, ");" & LF);
+ 
+          Put (S, LF & "Field_Size : constant array (Field_Kind) of Field_Size_In_Bits :=" & LF);
+          Increase_Indent (S, 2);
+          Put (S, "(");
+          Increase_Indent (S, 1);
+ 
+          declare
+             First_Time : Boolean := True;
+          begin
+             for T in Special_Type loop
+                if First_Time then
+                   First_Time := False;
+                else
+                   Put (S, "," & LF);
+                end if;
+ 
+                Put (S, Image (T) & "_Field => " & Image (Field_Size (T)));
+             end loop;
+          end;
+ 
+          Decrease_Indent (S, 1);
+          Decrease_Indent (S, 2);
+          Put (S, ");" & LF & LF);
+ 
+          Put (S, "type Type_Only_Enum is" & LF);
+          Increase_Indent (S, 2);
+          Put (S, "(");
+ 
+          declare
+             First_Time : Boolean := True;
+          begin
+             for TO in Type_Only_Enum loop
+                if First_Time then
+                   First_Time := False;
+                else
+                   Put (S, ", ");
+                end if;
+ 
+                Put (S, Image (TO));
+             end loop;
+          end;
+ 
+          Decrease_Indent (S, 2);
+          Put (S, ");" & LF & LF);
+ 
+          Put (S, "type Field_Descriptor is record" & LF);
+          Increase_Indent (S, 3);
+          Put (S, "Kind : Field_Kind;" & LF);
+          Put (S, "Offset : Field_Offset;" & LF);
+          Put (S, "Type_Only : Type_Only_Enum;" & LF);
+          Decrease_Indent (S, 3);
+          Put (S, "end record;" & LF & LF);
+ 
+          --  Print out the node header types. Note that the Offset field is of
+          --  the base type, because we are using zero-origin addressing in
+          --  Atree.
+ 
+          Put (S, "N_Head : constant Field_Offset := " & N_Head & ";" & LF & LF);
+ 
+          Put (S, "Atree_Statistics_Enabled : constant Boolean := " &
+                 Capitalize (Boolean'Image (Statistics_Enabled)) & ";" & LF);
+ 
+          Decrease_Indent (S, 3);
+          Put (S, LF & "end Seinfo;" & LF);
+       end Put_Seinfo;
+ 
+       ---------------
+       -- Put_Nodes --
+       ---------------
+ 
+       procedure Put_Nodes is
+          S : Sink;
+          B : Sink;
+ 
+       begin
+          Create_File (S, "sinfo-nodes.ads");
+          Create_File (B, "sinfo-nodes.adb");
+          Put (S, "with Seinfo; use Seinfo;" & LF);
+          Put (S, "pragma Warnings (Off);" & LF);
+          --  With's included in case they are needed; so we don't have to keep
+          --  switching back and forth.
+          Put (S, "with Output; use Output;" & LF);
+          Put (S, "pragma Warnings (On);" & LF);
+ 
+          Put (S, LF & "package Sinfo.Nodes is" & LF & LF);
+          Increase_Indent (S, 3);
+ 
+          Put (S, "--  This package is automatically generated." & LF & LF);
+ 
+          Put_Type_Hierarchy (S, Node_Kind);
+ 
+          Put_Type_And_Subtypes (S, Node_Kind);
+ 
+          Put (S, "pragma Assert (Node_Kind'Pos (N_Unused_At_Start) = 0);" & LF & LF);
+          Put (S, "pragma Assert (Node_Kind'Last = N_Unused_At_End);" & LF & LF);
+ 
+          Put_Subp_Decls (S, Node_Kind);
+ 
+          Put_Traversed_Fields (S);
+ 
+          Put_Tables (S, Node_Kind);
+ 
+          Decrease_Indent (S, 3);
+          Put (S, LF & "end Sinfo.Nodes;" & LF);
+ 
+          Put (B, "with Unchecked_Conversion;" & LF);
+          Put (B, "with Atree; use Atree; use Atree.Atree_Private_Part;" & LF);
+          Put (B, "with Nlists; use Nlists;" & LF);
+          Put (B, "pragma Warnings (Off);" & LF);
+          Put (B, "with Einfo.Utils; use Einfo.Utils;" & LF);
+          Put (B, "with Sinfo.Utils; use Sinfo.Utils;" & LF);
+          Put (B, "pragma Warnings (On);" & LF);
+ 
+          Put (B, LF & "package body Sinfo.Nodes is" & LF & LF);
+          Increase_Indent (B, 3);
+ 
+          Put (B, "--  This package is automatically generated." & LF & LF);
+ 
+          Put (B, "pragma Style_Checks (""M200"");" & LF);
+ 
+          for T in Special_Type loop
+             if Node_Field_Types_Used (T) then
+                Put_Casts (B, T);
+             end if;
+          end loop;
+ 
+          Put_Subp_Bodies (B, Node_Kind);
+ 
+          Decrease_Indent (B, 3);
+          Put (B, "end Sinfo.Nodes;" & LF);
+ 
+       end Put_Nodes;
+ 
+       ------------------
+       -- Put_Entities --
+       ------------------
+ 
+       procedure Put_Entities is
+          S : Sink;
+          B : Sink;
+       begin
+          Create_File (S, "einfo-entities.ads");
+          Create_File (B, "einfo-entities.adb");
+          Put (S, "with Sinfo.Nodes; use Sinfo.Nodes;" & LF);
+ 
+          Put (S, LF & "package Einfo.Entities is" & LF & LF);
+          Increase_Indent (S, 3);
+ 
+          Put (S, "--  This package is automatically generated." & LF & LF);
+ 
+          Put_Type_Hierarchy (S, Entity_Kind);
+ 
+          Put_Type_And_Subtypes (S, Entity_Kind);
+ 
+          Put_Subp_Decls (S, Entity_Kind);
+ 
+          Put_Tables (S, Entity_Kind);
+ 
+          Decrease_Indent (S, 3);
+          Put (S, LF & "end Einfo.Entities;" & LF);
+ 
+          Put (B, "with Unchecked_Conversion;" & LF);
+          Put (B, "with Atree; use Atree; use Atree.Atree_Private_Part;" & LF);
+          Put (B, "with Einfo.Utils; use Einfo.Utils;" & LF);
+          --  This forms a cycle between packages (via bodies, which is OK)
+ 
+          Put (B, LF & "package body Einfo.Entities is" & LF & LF);
+          Increase_Indent (B, 3);
+ 
+          Put (B, "--  This package is automatically generated." & LF & LF);
+ 
+          Put (B, "pragma Style_Checks (""M200"");" & LF);
+ 
+          for T in Special_Type loop
+             if Entity_Field_Types_Used (T) then
+                Put_Casts (B, T);
+             end if;
+          end loop;
+ 
+          Put_Subp_Bodies (B, Entity_Kind);
+ 
+          Decrease_Indent (B, 3);
+          Put (B, "end Einfo.Entities;" & LF);
+ 
+       end Put_Entities;
+ 
+       -------------------
+       -- Put_Make_Spec --
+       -------------------
+ 
+       procedure Put_Make_Spec
+         (S : in out Sink; Root : Root_Type; T : Concrete_Type)
+       is
+       begin
+          Put (S, "function Make_" & Image_Sans_N (T) & "" & LF);
+          Increase_Indent (S, 2);
+          Put (S, "(Sloc : Source_Ptr");
+          Increase_Indent (S, 1);
+ 
+          for F of Type_Table (T).Fields loop
+             pragma Assert (Fields_Per_Node (T) (F));
+ 
+             if Syntactic (T) (F) then
+                declare
+                   Typ : constant String :=
+                     (if Field_Table (F).Field_Type = Flag then "Boolean"
+                      else Image (Field_Table (F).Field_Type));
+ 
+                   --  All Flag fields have a default, which is False by
+                   --  default.
+ 
+                   Default : constant String :=
+                     (if Field_Table (F).Default_Value = No_Default then
+                      (if Field_Table (F).Field_Type = Flag then " := False" else "")
+                      else " := " & Value_Image (Field_Table (F).Default_Value));
+ 
+                begin
+                   Put (S, ";" & LF);
+                   Put (S, Image (F));
+                   Put (S, " : " & Typ & Default);
+                end;
+             end if;
+          end loop;
+ 
+          Put (S, ")" & LF);
+          Put (S, "return " & Node_Or_Entity (Root) & "_Id");
+          Decrease_Indent (S, 2);
+          Decrease_Indent (S, 1);
+       end Put_Make_Spec;
+ 
+       --------------------
+       -- Put_Make_Decls --
+       --------------------
+ 
+       procedure Put_Make_Decls (S : in out Sink; Root : Root_Type) is
+       begin
+          for T in First_Concrete (Root) .. Last_Concrete (Root) loop
+             if T not in N_Unused_At_Start | N_Unused_At_End then
+                Put_Make_Spec (S, Root, T);
+                Put (S, ";" & LF);
+                Put (S, "pragma " & Inline & " (Make_" &
+                     Image_Sans_N (T) & ");" & LF & LF);
+             end if;
+          end loop;
+       end Put_Make_Decls;
+ 
+       ---------------------
+       -- Put_Make_Bodies --
+       ---------------------
+ 
+       procedure Put_Make_Bodies (S : in out Sink; Root : Root_Type) is
+       begin
+          for T in First_Concrete (Root) .. Last_Concrete (Root) loop
+             if T not in N_Unused_At_Start | N_Unused_At_End then
+                Put_Make_Spec (S, Root, T);
+                Put (S, LF & "is" & LF);
+ 
+                Increase_Indent (S, 3);
+                Put (S, "N : constant Node_Id :=" & LF);
+ 
+                if T in Entity_Node then
+                   Put (S, "      New_Entity (" & Image (T) & ", Sloc);" & LF);
+ 
+                else
+                   Put (S, "      New_Node (" & Image (T) & ", Sloc);" & LF);
+                end if;
+ 
+                Decrease_Indent (S, 3);
+ 
+                Put (S, "begin" & LF);
+ 
+                Increase_Indent (S, 3);
+                for F of Type_Table (T).Fields loop
+                   pragma Assert (Fields_Per_Node (T) (F));
+ 
+                   if Syntactic (T) (F) then
+                      declare
+                         NWidth : constant := 28;
+                         --  This constant comes from the old Xnmake, which wraps
+                         --  the Set_... call if the field name is that long or
+                         --  longer.
+ 
+                         F_Name : constant String := Image (F);
+ 
+                      begin
+                         if F_Name'Length < NWidth then
+                            Put (S, "Set_" & F_Name & " (N, " & F_Name & ");" & LF);
+ 
+                         --  Wrap the line
+ 
+                         else
+                            Put (S, "Set_" & F_Name & "" & LF);
+                            Increase_Indent (S, 2);
+                            Put (S, "(N, " & F_Name & ");" & LF);
+                            Decrease_Indent (S, 2);
+                         end if;
+                      end;
+                   end if;
+                end loop;
+ 
+                if Is_Descendant (N_Op, T) then
+                   --  Special cases for N_Op nodes: fill in the Chars and Entity
+                   --  fields even though they were not passed in.
+ 
+                   declare
+                      Op : constant String := Image_Sans_N (T);
+                      --  This will be something like "Op_And" or "Op_Add"
+ 
+                      Op_Name_With_Op : constant String :=
+                        (if T = N_Op_Plus then "Op_Add"
+                         elsif T = N_Op_Minus then "Op_Subtract"
+                         else Op);
+                      --  Special cases for unary operators that have the same name
+                      --  as a binary operator; we use the binary operator name in
+                      --  that case.
+ 
+                      Slid : constant String (1 .. Op_Name_With_Op'Length) :=
+                        Op_Name_With_Op;
+                      pragma Assert (Slid (1 .. 3) = "Op_");
+ 
+                      Op_Name : constant String :=
+                        (if T in N_Op_Rotate_Left |
+                           N_Op_Rotate_Right |
+                           N_Op_Shift_Left |
+                           N_Op_Shift_Right |
+                           N_Op_Shift_Right_Arithmetic
+                         then Slid (4 .. Slid'Last)
+                         else Slid);
+                      --  Special cases for shifts and rotates; the node kind has
+                      --  "Op_", but the Name_Id constant does not.
+ 
+                   begin
+                      Put (S, "Set_Chars (N, Name_" & Op_Name & ");" & LF);
+                      Put (S, "Set_Entity (N, Standard_" & Op & ");" & LF);
+                   end;
+                end if;
+ 
+                if Type_Table (T).Nmake_Assert.all /= "" then
+                   Put (S, "pragma Assert (" &
+                            Type_Table (T).Nmake_Assert.all & ");" & LF);
+                end if;
+ 
+                Put (S, "return N;" & LF);
+                Decrease_Indent (S, 3);
+ 
+                Put (S, "end Make_" & Image_Sans_N (T) & ";" & LF & LF);
+             end if;
+          end loop;
+       end Put_Make_Bodies;
+ 
+       ---------------
+       -- Put_Nmake --
+       ---------------
+ 
+       --  Documentation for the Nmake package, generated by Put_Nmake below.
+ 
+       --  The Nmake package contains a set of routines used to construct tree
+       --  nodes using a functional style. There is one routine for each node
+       --  type defined in Gen_IL.Gen.Gen_Nodes with the general interface:
+ 
+       --    function Make_xxx (Sloc : Source_Ptr,
+       --                       Field_Name_1 : Field_Name_1_Type [:= default]
+       --                       Field_Name_2 : Field_Name_2_Type [:= default]
+       --                       ...)
+       --    return Node_Id
+ 
+       --  Only syntactic fields are included.
+ 
+       --  Default values are provided as specified in Gen_Nodes, except that if
+       --  no default is specified for a flag field, it has a default of False.
+ 
+       --  Warning: since calls to Make_xxx routines are normal function calls, the
+       --  arguments can be evaluated in any order. This means that at most one such
+       --  argument can have side effects (e.g. be a call to a parse routine).
+ 
+       procedure Put_Nmake is
+          S : Sink;
+          B : Sink;
+ 
+       begin
+          Create_File (S, "nmake.ads");
+          Create_File (B, "nmake.adb");
+          Put (S, "with Namet;  use Namet;" & LF);
+          Put (S, "with Nlists; use Nlists;" & LF);
+          Put (S, "with Types;  use Types;" & LF);
+          Put (S, "with Uintp;  use Uintp;" & LF);
+          Put (S, "with Urealp; use Urealp;" & LF);
+ 
+          Put (S, LF & "package Nmake is" & LF & LF);
+          Increase_Indent (S, 3);
+ 
+          Put (S, "--  This package is automatically generated." & LF & LF);
+          Put (S, "--  See Put_Nmake in gen_il-gen.adb for documentation." & LF & LF);
+ 
+          Put_Make_Decls (S, Node_Kind);
+ 
+          Decrease_Indent (S, 3);
+          Put (S, "end Nmake;" & LF);
+ 
+          Put (B, "with Atree;  use Atree;" & LF);
+          Put (B, "with Sinfo.Nodes; use Sinfo.Nodes;" & LF);
+          Put (B, "with Sinfo.Utils; use Sinfo.Utils;" & LF);
+          Put (B, "with Snames; use Snames;" & LF);
+          Put (B, "with Stand;  use Stand;" & LF);
+ 
+          Put (B, LF & "package body Nmake is" & LF & LF);
+          Increase_Indent (B, 3);
+ 
+          Put (B, "--  This package is automatically generated." & LF & LF);
+          Put (B, "pragma Style_Checks (""M200"");" & LF);
+ 
+          Put_Make_Bodies (B, Node_Kind);
+ 
+          Decrease_Indent (B, 3);
+          Put (B, "end Nmake;" & LF);
+       end Put_Nmake;
+ 
+       -----------------------
+       -- Put_Seinfo_Tables --
+       -----------------------
+ 
+       procedure Put_Seinfo_Tables is
+          S : Sink;
+          B : Sink;
+ 
+          Type_Layout : Concrete_Type_Layout_Array;
+ 
+          function Get_Last_Bit
+            (T : Concrete_Type; F : Opt_Field_Enum; First_Bit : Bit_Offset)
+             return Bit_Offset;
+          function First_Bit_Image (First_Bit : Bit_Offset) return String;
+          function Last_Bit_Image (Last_Bit : Bit_Offset) return String;
+ 
+          procedure Put_Field_List (Bit : Bit_Offset);
+          --  Print out the list of fields that are allocated (in part, for
+          --  fields bigger than one bit) at the given bit offset. This allows
+          --  us to see which fields are overlaid with each other, which should
+          --  only happen if the sets of types with those fields are disjoint.
+ 
+          function Get_Last_Bit
+            (T : Concrete_Type; F : Opt_Field_Enum; First_Bit : Bit_Offset)
+             return Bit_Offset is
+          begin
+             return Result : Bit_Offset do
+                if F = No_Field then
+                   --  We don't have a field size for No_Field, so just look at
+                   --  the bits up to the next slot boundary.
+ 
+                   Result := First_Bit;
+ 
+                   while (Result + 1) mod SS /= 0
+                     and then Type_Layout (T) (Result + 1) = No_Field
+                   loop
+                      Result := Result + 1;
+                   end loop;
+ 
+                else
+                   Result := First_Bit + Field_Size (F) - 1;
+                end if;
+             end return;
+          end Get_Last_Bit;
+ 
+          function First_Bit_Image (First_Bit : Bit_Offset) return String is
+             W : constant Bit_Offset := First_Bit / SS;
+             B : constant Bit_Offset := First_Bit mod SS;
+             pragma Assert (W * SS + B = First_Bit);
+          begin
+             return
+               Image (W) & "*" & SSS & (if B = 0 then "" else " + " & Image (B));
+          end First_Bit_Image;
+ 
+          function Last_Bit_Image (Last_Bit : Bit_Offset) return String is
+             W : constant Bit_Offset := (Last_Bit + 1) / SS;
+          begin
+             if W * SS - 1 = Last_Bit then
+                return Image (W) & "*" & SSS & " - 1";
+             else
+                return First_Bit_Image (Last_Bit);
+             end if;
+          end Last_Bit_Image;
+ 
+          function Image_Or_Waste (F : Opt_Field_Enum) return String is
+            (if F = No_Field then "Wasted_Bits" else Image (F));
+ 
+          Num_Wasted_Bits : Bit_Offset'Base := 0;
+ 
+          Type_Layout_Size : Bit_Offset'Base := Type_Layout'Size;
+          --  Total size of Type_Layout, including the Field_Arrays its
+          --  components point to.
+ 
+          procedure Put_Field_List (Bit : Bit_Offset) is
+             First_Time : Boolean := True;
+          begin
+             for F in Field_Enum loop
+                if F /= Between_Node_And_Entity_Fields
+                  and then Bit in First_Bit (F, Field_Table (F).Offset)
+                                .. Last_Bit (F, Field_Table (F).Offset)
+                then
+                   if First_Time then
+                      First_Time := False;
+                   else
+                      Put (B, "," & LF);
+                   end if;
+ 
+                   Put (B, Image (F));
+                end if;
+             end loop;
+          end Put_Field_List;
+ 
+       begin -- Put_Seinfo_Tables
+          Create_File (S, "seinfo_tables.ads");
+          Create_File (B, "seinfo_tables.adb");
+ 
+          for T in Concrete_Type loop
+             Type_Layout (T) := new Field_Array'
+               (0 .. Type_Bit_Size_Aligned (T) - 1 => No_Field);
+             Type_Layout_Size := Type_Layout_Size + Type_Layout (T).all'Size;
+ 
+             for F in Field_Enum loop
+                if Fields_Per_Node (T) (F) then
+                   declare
+                      Off : constant Field_Offset := Field_Table (F).Offset;
+                      subtype Bit_Range is Bit_Offset
+                        range First_Bit (F, Off) .. Last_Bit (F, Off);
+                   begin
+                      pragma Assert
+                        (Type_Layout (T) (Bit_Range) = (Bit_Range => No_Field));
+                      Type_Layout (T) (Bit_Range) := (others => F);
+                   end;
+                end if;
+             end loop;
+          end loop;
+ 
+          for T in Concrete_Type loop
+             for B in 0 .. Type_Bit_Size_Aligned (T) - 1 loop
+                if Type_Layout (T) (B) = No_Field then
+                   Num_Wasted_Bits := Num_Wasted_Bits + 1;
+                end if;
+             end loop;
+          end loop;
+ 
+          Put (S, LF & "package Seinfo_Tables is" & LF & LF);
+          Increase_Indent (S, 3);
+ 
+          Put (S, "--  This package is automatically generated." & LF & LF);
+ 
+          Put (S, "--  This package is not used by the compiler." & LF);
+          Put (S, "--  The body contains tables that are intended to be used by humans to" & LF);
+          Put (S, "--  help understand the layout of various data structures." & LF);
+          Put (S, "--  Search for ""--"" to find major sections of code." & LF & LF);
+ 
+          Put (S, "pragma Elaborate_Body;" & LF);
+ 
+          Decrease_Indent (S, 3);
+          Put (S, LF & "end Seinfo_Tables;" & LF);
+ 
+          Put (B, "with Gen_IL.Types;  use Gen_IL.Types;" & LF);
+          Put (B, "with Gen_IL.Fields; use Gen_IL.Fields;" & LF);
+          Put (B, "with Gen_IL.Internals;  use Gen_IL.Internals;" & LF);
+ 
+          Put (B, LF & "package body Seinfo_Tables is" & LF & LF);
+          Increase_Indent (B, 3);
+ 
+          Put (B, "--  This package is automatically generated." & LF & LF);
+ 
+          Put (B, "Num_Wasted_Bits : Bit_Offset'Base := " & Image (Num_Wasted_Bits) &
+               " with Unreferenced;" & LF);
+ 
+          Put (B, LF & "Wasted_Bits : constant Opt_Field_Enum := No_Field;" & LF);
+ 
+          Put (B, LF & "--  Table showing the layout of each Node_Or_Entity_Type. For each" & LF);
+          Put (B, "--  concrete type, we show the bits used by each field. Each field" & LF);
+          Put (B, "--  uses the same bit range in all types. This table is not used by" & LF);
+          Put (B, "--  the compiler; it is for information only." & LF & LF);
+ 
+          Put (B, "--  Wasted_Bits are unused bits between fields, and padding at the end" & LF);
+          Put (B, "--  to round up to a multiple of the slot size." & LF);
+ 
+          Put (B, LF & "--  Type_Layout is " & Image (Type_Layout_Size / 8) & " bytes." & LF);
+ 
+          Put (B, LF & "pragma Style_Checks (Off);" & LF);
+          Put (B, "Type_Layout : constant Concrete_Type_Layout_Array := " & LF);
+          Increase_Indent (B, 2);
+          Put (B, "--  Concrete node types:" & LF);
+          Put (B, "(");
+          Increase_Indent (B, 1);
+ 
+          declare
+             First_Time : Boolean := True;
+ 
+          begin
+             for T in Concrete_Type loop
+                if First_Time then
+                   First_Time := False;
+                else
+                   Put (B, "," & LF & LF);
+                end if;
+ 
+                if T = Concrete_Entity'First then
+                   Put (B, "--  Concrete entity types:" & LF & LF);
+                end if;
+ 
+                Put (B, Image (T) & " => new Field_Array'" & LF);
+ 
+                Increase_Indent (B, 2);
+                Put (B, "(");
+                Increase_Indent (B, 1);
+ 
+                declare
+                   First_Time : Boolean := True;
+                   First_Bit : Bit_Offset := 0;
+                   F : Opt_Field_Enum;
+ 
+                   function Node_Field_Of_Entity return String is
+                      (if T in Entity_Type and then F in Node_Field then
+                        " -- N" else "");
+                   --  A comment to put out for fields of entities that are
+                   --  shared with nodes, such as Chars.
+ 
+                begin
+                   while First_Bit < Type_Bit_Size_Aligned (T) loop
+                      if First_Time then
+                         First_Time := False;
+                      else
+                         Put (B, "," & Node_Field_Of_Entity & LF);
+                      end if;
+ 
+                      F := Type_Layout (T) (First_Bit);
+ 
+                      declare
+                         Last_Bit : constant Bit_Offset :=
+                           Get_Last_Bit (T, F, First_Bit);
+                      begin
+                         pragma Assert
+                           (Type_Layout (T) (First_Bit .. Last_Bit) =
+                                            (First_Bit .. Last_Bit => F));
+ 
+                         if Last_Bit = First_Bit then
+                            Put (B, First_Bit_Image (First_Bit) & " => " &
+                                 Image_Or_Waste (F));
+                         else
+                            pragma Assert
+                              (if F /= No_Field then
+                                First_Bit mod Field_Size (F) = 0);
+                            Put (B, First_Bit_Image (First_Bit) & " .. " &
+                                 Last_Bit_Image (Last_Bit) & " => " &
+                                 Image_Or_Waste (F));
+                         end if;
+ 
+                         First_Bit := Last_Bit + 1;
+                      end;
+                   end loop;
+                end;
+ 
+                Decrease_Indent (B, 1);
+                Put (B, ")");
+                Decrease_Indent (B, 2);
+             end loop;
+          end;
+ 
+          Decrease_Indent (B, 1);
+          Put (B, ") -- Type_Layout" & LF);
+          Increase_Indent (B, 6);
+          Put (B, "with Export, Convention => Ada;" & LF);
+          Decrease_Indent (B, 6);
+          Decrease_Indent (B, 2);
+ 
+          Put (B, LF & "--  Table mapping bit offsets to the set of fields at that offset" & LF & LF);
+          Put (B, "Bit_Used : constant Offset_To_Fields_Mapping :=" & LF);
+ 
+          Increase_Indent (B, 2);
+          Put (B, "(");
+          Increase_Indent (B, 1);
+ 
+          declare
+             First_Time : Boolean := True;
+          begin
+             for Bit in 0 .. Bit_Offset'Max
+               (Max_Node_Bit_Size, Max_Entity_Bit_Size)
+             loop
+                if First_Time then
+                   First_Time := False;
+                else
+                   Put (B, "," & LF & LF);
+                end if;
+ 
+                Put (B, First_Bit_Image (Bit) & " => new Field_Array'" & LF);
+ 
+                --  Use [...] notation here, to get around annoying Ada
+                --  limitations on empty and singleton aggregates. This code is
+                --  not used in the compiler, so there are no bootstrap issues.
+ 
+                Increase_Indent (B, 2);
+                Put (B, "[");
+                Increase_Indent (B, 1);
+ 
+                Put_Field_List (Bit);
+ 
+                Decrease_Indent (B, 1);
+                Put (B, "]");
+                Decrease_Indent (B, 2);
+             end loop;
+          end;
+ 
+          Decrease_Indent (B, 1);
+          Put (B, "); -- Bit_Used" & LF);
+          Decrease_Indent (B, 2);
+ 
+          Decrease_Indent (B, 3);
+          Put (B, LF & "end Seinfo_Tables;" & LF);
+ 
+       end Put_Seinfo_Tables;
+ 
+       -----------------------------
+       -- Put_C_Type_And_Subtypes --
+       -----------------------------
+ 
+       procedure Put_C_Type_And_Subtypes
+         (S : in out Sink; Root : Root_Type) is
+ 
+          Cur_Pos : Root_Nat := 0;
+          --  Current Node_Kind'Pos or Entity_Kind'Pos to be printed
+ 
+          procedure Put_Enum_Lit (T : Node_Or_Entity_Type);
+          --  Print out the #define corresponding to the Ada enumeration literal
+          --  for T in Node_Kind and Entity_Kind (i.e. concrete types).
+          --  This looks like "#define Some_Kind <pos>", where Some_Kind
+          --  is the Node_Kind or Entity_Kind enumeration literal, and
+          --  <pos> is Node_Kind'Pos or Entity_Kind'Pos of that literal.
+ 
+          procedure Put_Kind_Subtype (T : Node_Or_Entity_Type);
+          --  Print out the SUBTYPE macro call corresponding to an abstract
+          --  type.
+ 
+          procedure Put_Enum_Lit (T : Node_Or_Entity_Type) is
+          begin
+             if T in Concrete_Type then
+                Put (S, "#define " & Image (T) & " " & Image (Cur_Pos) & LF);
+                Cur_Pos := Cur_Pos + 1;
+             end if;
+          end Put_Enum_Lit;
+ 
+          procedure Put_Kind_Subtype (T : Node_Or_Entity_Type) is
+          begin
+             if T in Abstract_Type and then Type_Table (T).Parent /= No_Type then
+                Put (S, "SUBTYPE (" & Image (T) & ", " &
+                     Image (Type_Table (T).Parent) & "," & LF);
+                Increase_Indent (S, 3);
+                Put (S, Image (Type_Table (T).First) & "," & LF);
+                Put (S, Image (Type_Table (T).Last) & ")" & LF);
+                Decrease_Indent (S, 3);
+             end if;
+          end Put_Kind_Subtype;
+ 
+       begin
+          Put_Union_Membership (S, Root, Only_Prototypes => True);
+ 
+          Iterate_Types (Root, Pre => Put_Enum_Lit'Access);
+ 
+          Put (S, "#define Number_" & Node_Or_Entity (Root) & "_Kinds " &
+               Image (Cur_Pos) & "" & LF & LF);
+ 
+          Iterate_Types (Root, Pre => Put_Kind_Subtype'Access);
+ 
+          Put_Union_Membership (S, Root, Only_Prototypes => False);
+       end Put_C_Type_And_Subtypes;
+ 
+       ------------------
+       -- Put_C_Getter --
+       ------------------
+ 
+       procedure Put_C_Getter
+         (S : in out Sink; F : Field_Enum)
+       is
+          Rec : Field_Info renames Field_Table (F).all;
+ 
+          Off : constant Field_Offset := Rec.Offset;
+          F_Size : constant Bit_Offset := Field_Size (Rec.Field_Type);
+          F_Per_Slot : constant Field_Offset :=
+            SS / Field_Offset (Field_Size (Rec.Field_Type));
+          Slot_Off : constant Field_Offset := Off / F_Per_Slot;
+          In_NH : constant Boolean := Slot_Off < Num_Header_Slots;
+ 
+          N : constant String := Node_To_Fetch_From (F);
+       begin
+          Put (S, "INLINE " & Get_Set_Id_Image (Rec.Field_Type) &
+               " " & Image (F) & " (Node_Id N)" & LF);
+ 
+          Put (S, "{" & LF);
+          Increase_Indent (S, 3);
+          Put (S, "const Field_Offset Off = " & Image (Rec.Offset) & ";" & LF);
+          Put (S, "const Field_Offset F_Size = " & Image (F_Size) & ";" & LF);
+ 
+          if Field_Size (Rec.Field_Type) /= SS then
+             Put (S, "const any_slot Mask = (1 << F_Size) - 1;" & LF);
+          end if;
+ 
+          Put (S, "const Field_Offset F_Per_Slot = Slot_Size / F_Size;" & LF);
+          Put (S, "const Field_Offset Slot_Off = Off / F_Per_Slot;" & LF);
+          Put (S, LF);
+          if In_NH then
+             Put (S, "any_slot slot = Node_Offsets_Ptr[" & N & "].Slots[Slot_Off];" & LF);
+          else
+             Put (S, "any_slot slot = *(Slots_Ptr + Node_Offsets_Ptr[" & N &
+                    "].Offset + Slot_Off);" & LF);
+          end if;
+ 
+          if Field_Size (Rec.Field_Type) /= SS then
+             Put (S, "unsigned int Raw = (slot >> (Off % F_Per_Slot) * F_Size) & Mask;" & LF);
+          else
+             Put (S, "unsigned int Raw = slot;" & LF);
+          end if;
+ 
+          Put (S, Get_Set_Id_Image (Rec.Field_Type) & " val = ");
+ 
+          if Field_Has_Special_Default (Rec.Field_Type) then
+             Increase_Indent (S, 2);
+             Put (S, "(Raw? Raw : " & Special_Default (Rec.Field_Type) & ")");
+             Decrease_Indent (S, 2);
+ 
+          else
+             Put (S, "Raw");
+          end if;
+ 
+          Put (S, ";" & LF);
+ 
+          Put (S, "return val;" & LF);
+          Decrease_Indent (S, 3);
+          Put (S, "}" & LF & LF);
+       end Put_C_Getter;
+ 
+       -------------------
+       -- Put_C_Getters --
+       -------------------
+ 
+       procedure Put_C_Getters
+         (S : in out Sink; Root : Root_Type)
+       is
+       begin
+          Put (S, "// Getters for fields" & LF & LF);
+ 
+          for F in First_Field (Root) .. Last_Field (Root) loop
+             Put_C_Getter (S, F);
+          end loop;
+       end Put_C_Getters;
+ 
+       --------------------------
+       -- Put_Union_Membership --
+       --------------------------
+ 
+       procedure Put_Union_Membership
+         (S : in out Sink; Root : Root_Type; Only_Prototypes : Boolean) is
+ 
+          procedure Put_Ors (T : Abstract_Type);
+          --  Print the "or" (i.e. "||") of tests whether kind is in each child
+          --  type.
+ 
+          procedure Put_Ors (T : Abstract_Type) is
+             First_Time : Boolean := True;
+          begin
+             for Child of Type_Table (T).Children loop
+                if First_Time then
+                   First_Time := False;
+                else
+                   Put (S, " ||" & LF);
+                end if;
+ 
+                --  Unions, other abstract types, and concrete types each have
+                --  their own way of testing membership in the C++ code.
+ 
+                if Child in Abstract_Type then
+                   if Type_Table (Child).Is_Union then
+                      Put (S, "Is_In_" & Image (Child) & " (kind)");
+ 
+                   else
+                      Put (S, "IN (kind, " & Image (Child) & ")");
+                   end if;
+ 
+                else
+                   Put (S, "kind == " & Image (Child));
+                end if;
+             end loop;
+          end Put_Ors;
+ 
+       begin
+          if not Only_Prototypes then
+             Put (S, LF & "// Membership tests for union types" & LF & LF);
+          end if;
+ 
+          for T in First_Abstract (Root) .. Last_Abstract (Root) loop
+             if Type_Table (T) /= null and then Type_Table (T).Is_Union then
+                Put (S, "INLINE Boolean" & LF);
+                Put (S, "Is_In_" & Image (T) & " (" &
+                     Node_Or_Entity (Root) & "_Kind kind)" &
+                     (if Only_Prototypes then ";" else "") & LF);
+ 
+                if not Only_Prototypes then
+                   Put (S, "{" & LF);
+                   Increase_Indent (S, 3);
+                   Put (S, "return" & LF);
+                   Increase_Indent (S, 3);
+                   Put_Ors (T);
+                   Decrease_Indent (S, 3);
+                   Decrease_Indent (S, 3);
+                   Put (S, ";" & LF & "}" & LF);
+                end if;
+ 
+                Put (S, "" & LF);
+             end if;
+          end loop;
+       end Put_Union_Membership;
+ 
+       ---------------------
+       -- Put_Sinfo_Dot_H --
+       ---------------------
+ 
+       procedure Put_Sinfo_Dot_H is
+          S : Sink;
+ 
+       begin
+          Create_File (S, "sinfo.h");
+          Put (S, "#ifdef __cplusplus" & LF);
+          Put (S, "extern ""C"" {" & LF);
+          Put (S, "#endif" & LF & LF);
+ 
+          Put (S, "typedef Boolean Flag;" & LF & LF);
+ 
+          Put (S, "#define N_Head " & N_Head & LF);
+          Put (S, "" & LF);
+          Put (S, "typedef struct Node_Header {" & LF);
+          Increase_Indent (S, 2);
+          Put (S, "any_slot Slots[N_Head];" & LF);
+          Put (S, "Field_Offset Offset;" & LF);
+          Decrease_Indent (S, 2);
+          Put (S, "} Node_Header;" & LF & LF);
+ 
+          Put (S, "extern Node_Header *Node_Offsets_Ptr;" & LF);
+          Put (S, "extern any_slot *Slots_Ptr;" & LF & LF);
+ 
+          Put_C_Type_And_Subtypes (S, Node_Kind);
+ 
+          Put (S, "// Getters corresponding to instantiations of Atree.Get_n_Bit_Field"
+                  & LF & LF);
+ 
+          Put_C_Getters (S, Node_Kind);
+ 
+          Put (S, "#ifdef __cplusplus" & LF);
+          Put (S, "}" & LF);
+          Put (S, "#endif" & LF);
+       end Put_Sinfo_Dot_H;
+ 
+       ---------------------
+       -- Put_Einfo_Dot_H --
+       ---------------------
+ 
+       procedure Put_Einfo_Dot_H is
+          S : Sink;
+ 
+          procedure Put_Membership_Query_Spec (T : Node_Or_Entity_Type);
+          procedure Put_Membership_Query_Defn (T : Node_Or_Entity_Type);
+          --  Print out the Is_... function for T that calls the IN macro on the
+          --  SUBTYPE.
+ 
+          procedure Put_Membership_Query_Spec (T : Node_Or_Entity_Type) is
+             Im : constant String := Image (T);
+             pragma Assert (Im (Im'Last - 4 .. Im'Last) = "_Kind");
+             Im2 : constant String := Im (Im'First .. Im'Last - 5);
+             Typ : constant String :=
+               (if Is_Descendant (Type_Kind, T)
+                  and then T /= Type_Kind
+                then "_Type"
+                else "");
+          begin
+             pragma Assert (not Type_Table (T).Is_Union);
+ 
+             Put (S, "INLINE B Is_" & Im2 & Typ & " (E Id)");
+          end Put_Membership_Query_Spec;
+ 
+          procedure Put_Membership_Query_Defn (T : Node_Or_Entity_Type) is
+          begin
+             if T in Abstract_Type and T not in Root_Type then
+                Put_Membership_Query_Spec (T);
+                Put (S, "" & LF);
+                Increase_Indent (S, 3);
+                Put (S, "{ return IN (Ekind (Id), " & Image (T) & "); }" & LF);
+                Decrease_Indent (S, 3);
+             end if;
+          end Put_Membership_Query_Defn;
+ 
+       begin
+          Create_File (S, "einfo.h");
+          Put (S, "#ifdef __cplusplus" & LF);
+          Put (S, "extern ""C"" {" & LF);
+          Put (S, "#endif" & LF & LF);
+ 
+          Put (S, "typedef Boolean Flag;" & LF & LF);
+ 
+          Put_C_Type_And_Subtypes (S, Entity_Kind);
+ 
+          Put_C_Getters (S, Entity_Kind);
+ 
+          Put (S, "// Abstract type queries" & LF & LF);
+ 
+          Iterate_Types (Entity_Kind, Pre => Put_Membership_Query_Defn'Access);
+ 
+          Put (S, LF & "#ifdef __cplusplus" & LF);
+          Put (S, "}" & LF);
+          Put (S, "#endif" & LF);
+       end Put_Einfo_Dot_H;
+ 
+    begin -- Compile
+ 
+       Check_Completeness;
+ 
+       Compute_Ranges (Node_Kind);
+       Compute_Ranges (Entity_Kind);
+       Compute_Fields_Per_Node;
+       Compute_Field_Offsets;
+       Compute_Type_Sizes;
+       Check_For_Syntactic_Field_Mismatch;
+ 
+       Verify_Type_Table;
+ 
+       Node_Field_Types_Used :=
+         Field_Types_Used (Node_Field'First, Node_Field'Last);
+       Entity_Field_Types_Used :=
+         Field_Types_Used (Entity_Field'First, Entity_Field'Last);
+ 
+       Put_Seinfo;
+ 
+       Put_Nodes;
+ 
+       Put_Entities;
+ 
+       Put_Nmake;
+ 
+       Put_Seinfo_Tables;
+ 
+       Put_Sinfo_Dot_H;
+       Put_Einfo_Dot_H;
+ 
+    end Compile;
+ 
+    --------
+    -- Sy --
+    --------
+ 
+    function Sy
+      (Field      : Node_Field;
+       Field_Type : Type_Enum;
+       Default_Value : Field_Default_Value := No_Default;
+       Pre, Pre_Get, Pre_Set : String := "") return Field_Sequence is
+    begin
+       return
+         (1 => Create_Syntactic_Field
+            (Field, Field_Type, Default_Value, Pre, Pre_Get, Pre_Set));
+    end Sy;
+ 
+    --------
+    -- Sm --
+    --------
+ 
+    function Sm
+      (Field      : Field_Enum;
+       Field_Type : Type_Enum;
+       Type_Only  : Type_Only_Enum := No_Type_Only;
+       Pre, Pre_Get, Pre_Set : String := "") return Field_Sequence is
+    begin
+       return (1 => Create_Semantic_Field
+                 (Field, Field_Type, Type_Only, Pre, Pre_Get, Pre_Set));
+    end Sm;
+ 
+ end Gen_IL.Gen;
diff -Nrcpad gcc-11.3.0/gcc/ada/gen_il-gen.ads gcc-12.1.0/gcc/ada/gen_il-gen.ads
*** gcc-11.3.0/gcc/ada/gen_il-gen.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gen_il-gen.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,269 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                            G E N _ I L . G E N                           --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2020-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  "Language design is library design and library design is language design".
+ --    -- Bjarne Stroustrup
+ 
+ --  This package provides a "little language" for defining type hierarchies,
+ --  which we call "Gen_IL.Gen". In particular, it is used to describe the type
+ --  hierarchies rooted at Node_Id and Entity_Id in the intermediate language
+ --  used by GNAT.
+ 
+ --  The type hierarchy is a strict hierarchy (treeish, no multiple
+ --  inheritance). We have "abstract" and "concrete" types. Each type has a
+ --  "parent", except for the root type (Node_Id or Entity_Id). All leaf types
+ --  in the hierarchy are concrete; all nonleaf types (including the two root
+ --  types) are abstract. One can create instances of concrete, but not
+ --  abstract, types.
+ --
+ --  Descendants of Node_Id/Node_Kind are node types, and descendants of
+ --  Entity_Id/Entity_Kind are entity types.
+ --
+ --  Types have "fields". Each type inherits all the fields from its parent, and
+ --  may add new ones. A node field can be marked "syntactic"; entity fields are
+ --  never syntactic. A nonsyntactic field is "semantic".
+ --
+ --  If a field is syntactic, then the constructors in Nmake take a parameter to
+ --  initialize that field. In addition, the tree-traversal routines in Atree
+ --  (Traverse_Func and Traverse_Proc) traverse syntactic fields that are of
+ --  type Node_Id (or subtypes of Node_Id) or List_Id. Finally, (with some
+ --  exceptions documented in the body) the setter for a syntactic node or list
+ --  field "Set_F (N, Val)" will set the Parent of Val to N, unless Val is Empty
+ --  or Error[_List].
+ --
+ --  Note that the same field can be syntactic in some node types but semantic
+ --  in other node types. This is an added complexity that we might want to
+ --  eliminate someday. We shouldn't add any new such cases.
+ --
+ --  A "program" written in the Gen_IL.Gen language consists of calls to the
+ --  "Create_..." routines below, followed by a call to Compile, also below. In
+ --  order to understand what's going on, you need to look not only at the
+ --  Gen_IL.Gen "code", but at the output of the compiler -- at least, look at
+ --  the specs of Sinfo.Nodes and Einfo.Entities, because GNAT invokes those
+ --  directly. It's not like a normal language where you don't usually have to
+ --  look at the generated machine code.
+ --
+ --  Thus, the Gen_IL.Gen code is really Ada code, and when you run it as an Ada
+ --  program, it generates the above-mentioned files. The program is somewhat
+ --  unusual in that it has no input. Everything it needs to generate code is
+ --  embodied in it.
+ 
+ --  Why don't we just use a variant record, instead of inventing a wheel?
+ --  Or a hierarchy of tagged types?
+ --
+ --  The key feature that Ada's variant records and tagged types lack, and that
+ --  this little language has, is that if two types have a field with the same
+ --  name, then those are the same field, even though they weren't inherited
+ --  from a common ancestor. Such fields are required to have the same type, the
+ --  same default value, and the same extra precondition.
+ 
+ with Gen_IL.Types;  use Gen_IL.Types;
+ pragma Warnings (Off);
+ with Gen_IL.Fields; use Gen_IL.Fields; -- for children
+ pragma Warnings (On);
+ with Gen_IL.Internals;  use Gen_IL.Internals;
+ use Gen_IL.Internals.Type_Vectors;
+ use Gen_IL.Internals.Field_Vectors;
+ 
+ package Gen_IL.Gen is
+ 
+    procedure Create_Root_Node_Type
+      (T : Abstract_Node;
+       Fields : Field_Sequence := No_Fields)
+       with Pre => T = Node_Kind;
+    --  Create the root node type (Node_Kind), which is an abstract type
+ 
+    procedure Create_Abstract_Node_Type
+      (T : Abstract_Node; Parent : Abstract_Type;
+       Fields : Field_Sequence := No_Fields);
+    --  Create an abstract node type (other than the root node type)
+ 
+    procedure Create_Concrete_Node_Type
+      (T : Concrete_Node; Parent : Abstract_Type;
+       Fields : Field_Sequence := No_Fields;
+       Nmake_Assert : String := "");
+    --  Create a concrete node type. Every node is an instance of a concrete
+    --  node type. Nmake_Assert is an assertion to put in the Make_... function
+    --  in the generated Nmake package. It should be a String that represents a
+    --  Boolean expression.
+ 
+    procedure Create_Root_Entity_Type
+      (T : Abstract_Entity;
+       Fields : Field_Sequence := No_Fields)
+       with Pre => T = Entity_Kind;
+    --  Create the root entity type (Entity_Kind), which is an abstract type
+ 
+    procedure Create_Abstract_Entity_Type
+      (T : Abstract_Entity; Parent : Abstract_Type;
+       Fields : Field_Sequence := No_Fields);
+    --  Create an abstract entity type (other than the root entity type)
+ 
+    procedure Create_Concrete_Entity_Type
+      (T : Concrete_Entity; Parent : Abstract_Type;
+       Fields : Field_Sequence := No_Fields);
+    --  Create a concrete entity type. Every entity is an instance of a concrete
+    --  entity type.
+ 
+    function Create_Syntactic_Field
+      (Field      : Node_Field;
+       Field_Type : Type_Enum;
+       Default_Value : Field_Default_Value := No_Default;
+       Pre, Pre_Get, Pre_Set : String := "") return Field_Desc;
+    --  Create a syntactic field of a node type. Entities do not have syntactic
+    --  fields.
+ 
+    function Create_Semantic_Field
+      (Field      : Field_Enum;
+       Field_Type : Type_Enum;
+       Type_Only  : Type_Only_Enum := No_Type_Only;
+       Pre, Pre_Get, Pre_Set : String := "") return Field_Desc;
+    --  Create a semantic field of a node or entity type
+ 
+    --  Create_Syntactic_Field is used for syntactic fields of nodes. The order
+    --  of calls to Create_Syntactic_Field determines the order of the formal
+    --  parameters of the Make_... functions in Nmake.
+    --
+    --  Create_Semantic_Field is used for semantic fields of nodes, and all
+    --  fields of entities are considered semantic. The order of calls doesn't
+    --  make any difference.
+    --
+    --  Field_Type is the type of the field. Default_Value is the default value
+    --  for the parameter of the Make_... function in Nmake; this is effective
+    --  only for syntactic fields. Flag fields of syntactic nodes always have a
+    --  default value, which is False unless specified as Default_True. Pre is
+    --  an additional precondition for the field getter and setter, in addition
+    --  to the precondition that asserts that the type has that field. It should
+    --  be a String that represents a Boolean expression. Pre_Get and Pre_Set
+    --  are similar to Pre, but for the getter or setter only, respectively.
+    --
+    --  If multiple calls to these occur for the same Field but different types,
+    --  the Field_Type, Pre, Pre_Get, and Pre_Set must match. Default_Value
+    --  should match for syntactic fields. See the declaration of Type_Only_Enum
+    --  for Type_Only.
+    --
+    --  (The matching Default_Value requirement is a simplification from the
+    --  earlier hand-written version.)
+ 
+    --  When adding new node or entity kinds, or adding new fields, all back
+    --  ends must be made aware of the changes. In addition, the documentation
+    --  in Sinfo or Einfo needs to be updated.
+ 
+    --  To add a new node or entity type, add it to the enumeration type in
+    --  Gen_IL.Types, taking care that it is in the approprate range
+    --  (Abstract_Node, Abstract_Entity, Concrete_Node, or Concrete_Entity).
+    --  Then add a call to one of the above type-creation procedures to
+    --  Gen_IL.Gen.Gen_Nodes or Gen_IL.Gen.Gen_Entities.
+    --
+    --  To add a new field to a type, add it to the enumeration type in
+    --  Gen_IL.Fields in the appropriate range. Then add a call to one of
+    --  the above field-creation procedures to Gen_IL.Gen.Gen_Nodes or
+    --  Gen_IL.Gen.Gen_Entities.
+    --
+    --  If a type or field name does not follow the usual Mixed_Case convention,
+    --  such as "SPARK_Pragma", then you have to add a special case to one of
+    --  the Image functions in Gen_IL.Internals and in Treepr.
+ 
+    --  Forward references are not allowed. So if you say:
+    --
+    --     Create..._Type (..., Parent => P);
+    --
+    --  then Create..._Type must have already been called to create P.
+    --
+    --  Likewise, if you say:
+    --
+    --     Create..._Field (T, F, Field_Type, ...);
+    --
+    --  then Create..._Type must have already been called to create T and
+    --  (if it's a node or entity type) to create Field_Type.
+    --
+    --  To delete a node or entity type, delete it from Gen_IL.Types, update the
+    --  subranges in Gen_IL.Internals if necessary, and delete all occurrences
+    --  from Gen_IL.Gen.Gen_Entities. To delete a field, delete it from
+    --  Gen_IL.Fields, and delete all occurrences from Gen_IL.Gen.Gen_Entities.
+ 
+    --  If a field is not set, it is initialized by default to whatever value is
+    --  represented by all-zero bits, with some exceptions. This means Flags are
+    --  initialized to False, Node_Ids and List_Ids are initialized to Empty,
+    --  and enumeration fields are initialized to 'First of the type (assuming
+    --  there is no representation clause).
+    --
+    --  Elists default to No_Elist.
+    --
+    --  Fields of type Uint (but not its subtypes) are initialized to No_Uint.
+    --  Fields of subtypes Valid_Uint, Unat, Upos, Nonzero_Uint, and Ureal have
+    --  no default; it is an error to call a getter before calling the setter.
+    --  Likewise, other types whose range does not include zero have no default
+    --  (see package Types for the ranges).
+    --
+    --  If a node is created by a function in Nmake, then the defaults are
+    --  different from what is specified above. The parameters of Make_...
+    --  functions can have defaults specified; see Create_Syntactic_Field.
+ 
+    procedure Create_Node_Union_Type
+      (T : Abstract_Node; Children : Type_Array);
+    procedure Create_Entity_Union_Type
+      (T : Abstract_Entity; Children : Type_Array);
+    --  Create a "union" type that is the union of the Children. This is used
+    --  for nonhierachical types. This is the opposite of the normal "object
+    --  oriented" routines above, which create child types based on existing
+    --  parents. Here we are creating parent types based on existing child
+    --  types. A union type is considered to be an abstract type because it has
+    --  multiple children. We do not allow union types to have their own fields,
+    --  because that would introduce the well-known complexity of multiple
+    --  inheritance. That restriction could be relaxed, but for now, union types
+    --  are mainly for allowing things like "Pre => X in Some_Union_Type".
+ 
+    Illegal : exception;
+    --  Exception raised when Gen_IL code (in particular in Gen_Nodes and
+    --  Gen_Entities) is illegal. We don't try elaborate error recovery, but
+    --  hopefully the exception message will indicate what's wrong. You might
+    --  have to go in the debugger to see which line it's complaining about.
+ 
+    procedure Compile;
+ 
+ private
+ 
+    function Sy
+      (Field      : Node_Field;
+       Field_Type : Type_Enum;
+       Default_Value : Field_Default_Value := No_Default;
+       Pre, Pre_Get, Pre_Set : String := "") return Field_Sequence;
+    function Sm
+      (Field      : Field_Enum;
+       Field_Type : Type_Enum;
+       Type_Only  : Type_Only_Enum := No_Type_Only;
+       Pre, Pre_Get, Pre_Set : String := "") return Field_Sequence;
+    --  The above functions return Field_Sequence. This is a trick to get around
+    --  the fact that Ada doesn't allow singleton positional aggregates. It
+    --  allows us to write things like:
+    --
+    --     Cc (N_Empty, Node_Kind,
+    --         (Sy (Chars, Name_Id, Default_No_Name)));
+    --
+    --  where that thing pretending to be an aggregate is really a parenthesized
+    --  expression. See Gen_Nodes for documentation of the functions these are
+    --  standing in for.
+ 
+ end Gen_IL.Gen;
diff -Nrcpad gcc-11.3.0/gcc/ada/gen_il-internals.adb gcc-12.1.0/gcc/ada/gen_il-internals.adb
*** gcc-11.3.0/gcc/ada/gen_il-internals.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gen_il-internals.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,480 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                          G E N _ I L . U T I L S                         --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 2020-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package body Gen_IL.Internals is
+ 
+    ---------
+    -- Nil --
+    ---------
+ 
+    procedure Nil (T : Node_Or_Entity_Type) is
+    begin
+       null;
+    end Nil;
+ 
+    --------------------
+    -- Node_Or_Entity --
+    --------------------
+ 
+    function Node_Or_Entity (Root : Root_Type) return String is
+    begin
+       if Root = Node_Kind then
+          return "Node";
+       else
+          return "Entity";
+       end if;
+    end Node_Or_Entity;
+ 
+    ------------------------------
+    -- Num_Concrete_Descendants --
+    ------------------------------
+ 
+    function Num_Concrete_Descendants
+      (T : Node_Or_Entity_Type) return Natural is
+    begin
+       return Concrete_Type'Pos (Type_Table (T).Last) -
+         Concrete_Type'Pos (Type_Table (T).First) + 1;
+    end Num_Concrete_Descendants;
+ 
+    function First_Abstract (Root : Root_Type) return Abstract_Type is
+      (case Root is
+         when Node_Kind => Abstract_Node'First,
+         when others => Abstract_Entity'First);  -- Entity_Kind
+    function Last_Abstract (Root : Root_Type) return Abstract_Type is
+      (case Root is
+         when Node_Kind => Abstract_Node'Last,
+         when others => Abstract_Entity'Last);  -- Entity_Kind
+ 
+    function First_Concrete (Root : Root_Type) return Concrete_Type is
+      (case Root is
+         when Node_Kind => Concrete_Node'First,
+         when others => Concrete_Entity'First);  -- Entity_Kind
+    function Last_Concrete (Root : Root_Type) return Concrete_Type is
+      (case Root is
+         when Node_Kind => Concrete_Node'Last,
+         when others => Concrete_Entity'Last);  -- Entity_Kind
+ 
+    function First_Field (Root : Root_Type) return Field_Enum is
+      (case Root is
+         when Node_Kind => Node_Field'First,
+         when others => Entity_Field'First);  -- Entity_Kind
+    function Last_Field (Root : Root_Type) return Field_Enum is
+      (case Root is
+         when Node_Kind => Node_Field'Last,
+         when others => Entity_Field'Last);  -- Entity_Kind
+ 
+    -----------------------
+    -- Verify_Type_Table --
+    -----------------------
+ 
+    procedure Verify_Type_Table is
+    begin
+       for T in Node_Or_Entity_Type loop
+          if Type_Table (T) /= null then
+             if not Type_Table (T).Is_Union then
+                case T is
+                   when Concrete_Node | Concrete_Entity =>
+                      pragma Assert (Type_Table (T).First = T);
+                      pragma Assert (Type_Table (T).Last = T);
+ 
+                   when Abstract_Node | Abstract_Entity =>
+                      pragma Assert
+                        (Type_Table (T).First < Type_Table (T).Last);
+ 
+                   when Type_Boundaries =>
+                      null;
+                end case;
+             end if;
+          end if;
+       end loop;
+    end Verify_Type_Table;
+ 
+    --------------
+    -- Id_Image --
+    --------------
+ 
+    function Id_Image (T : Type_Enum) return String is
+    begin
+       case T is
+          when Flag =>
+             return "Boolean";
+          when Node_Kind =>
+             return "Node_Id";
+          when Entity_Kind =>
+             return "Entity_Id";
+          when Node_Kind_Type =>
+             return "Node_Kind";
+          when Entity_Kind_Type =>
+             return "Entity_Kind";
+          when others =>
+             return Image (T) & "_Id";
+       end case;
+    end Id_Image;
+ 
+    ----------------------
+    -- Get_Set_Id_Image --
+    ----------------------
+ 
+    function Get_Set_Id_Image (T : Type_Enum) return String is
+    begin
+       case T is
+          when Node_Kind =>
+             return "Node_Id";
+          when Entity_Kind =>
+             return "Entity_Id";
+          when Node_Kind_Type =>
+             return "Node_Kind";
+          when Entity_Kind_Type =>
+             return "Entity_Kind";
+          when others =>
+             return Image (T);
+       end case;
+    end Get_Set_Id_Image;
+ 
+    -----------
+    -- Image --
+    -----------
+ 
+    function Image (T : Opt_Type_Enum) return String is
+    begin
+       case T is
+          --  We special case the following; otherwise the compiler will give
+          --  "wrong case" warnings in compiler code.
+ 
+          when N_Pop_xxx_Label =>
+             return "N_Pop_xxx_Label";
+ 
+          when N_Push_Pop_xxx_Label =>
+             return "N_Push_Pop_xxx_Label";
+ 
+          when N_Push_xxx_Label =>
+             return "N_Push_xxx_Label";
+ 
+          when N_Raise_xxx_Error =>
+             return "N_Raise_xxx_Error";
+ 
+          when N_SCIL_Node =>
+             return "N_SCIL_Node";
+ 
+          when N_SCIL_Dispatch_Table_Tag_Init =>
+             return "N_SCIL_Dispatch_Table_Tag_Init";
+ 
+          when N_SCIL_Dispatching_Call =>
+             return "N_SCIL_Dispatching_Call";
+ 
+          when N_SCIL_Membership_Test =>
+             return "N_SCIL_Membership_Test";
+ 
+          when others =>
+             return Capitalize (T'Img);
+       end case;
+    end Image;
+ 
+    ------------------
+    -- Image_Sans_N --
+    ------------------
+ 
+    function Image_Sans_N (T : Opt_Type_Enum) return String is
+       Im : constant String := Image (T);
+       pragma Assert (Im (1 .. 2) = "N_");
+    begin
+       return Im (3 .. Im'Last);
+    end Image_Sans_N;
+ 
+    -------------------------
+    -- Put_Types_With_Bars --
+    -------------------------
+ 
+    procedure Put_Types_With_Bars (S : in out Sink; U : Type_Vector) is
+       First_Time : Boolean := True;
+    begin
+       Increase_Indent (S, 3);
+ 
+       for T of U loop
+          if First_Time then
+             First_Time := False;
+          else
+             Put (S, LF & "| ");
+          end if;
+ 
+          Put (S, Image (T));
+       end loop;
+ 
+       Decrease_Indent (S, 3);
+    end Put_Types_With_Bars;
+ 
+    ----------------------------
+    -- Put_Type_Ids_With_Bars --
+    ----------------------------
+ 
+    procedure Put_Type_Ids_With_Bars (S : in out Sink; U : Type_Vector) is
+       First_Time : Boolean := True;
+    begin
+       Increase_Indent (S, 3);
+ 
+       for T of U loop
+          if First_Time then
+             First_Time := False;
+          else
+             Put (S, LF & "| ");
+          end if;
+ 
+          Put (S, Id_Image (T));
+       end loop;
+ 
+       Decrease_Indent (S, 3);
+    end Put_Type_Ids_With_Bars;
+ 
+    -----------
+    -- Image --
+    -----------
+ 
+    function Image (F : Opt_Field_Enum) return String is
+    begin
+       case F is
+          --  Special cases for the same reason as in the above Image
+          --  function for Opt_Type_Enum.
+ 
+          when Alloc_For_BIP_Return =>
+             return "Alloc_For_BIP_Return";
+          when Assignment_OK =>
+             return "Assignment_OK";
+          when Backwards_OK =>
+             return "Backwards_OK";
+          when BIP_Initialization_Call =>
+             return "BIP_Initialization_Call";
+          when Body_Needed_For_SAL =>
+             return "Body_Needed_For_SAL";
+          when Conversion_OK =>
+             return "Conversion_OK";
+          when CR_Discriminant =>
+             return "CR_Discriminant";
+          when DTC_Entity =>
+             return "DTC_Entity";
+          when DT_Entry_Count =>
+             return "DT_Entry_Count";
+          when DT_Offset_To_Top_Func =>
+             return "DT_Offset_To_Top_Func";
+          when DT_Position =>
+             return "DT_Position";
+          when Forwards_OK =>
+             return "Forwards_OK";
+          when Has_Inherited_DIC =>
+             return "Has_Inherited_DIC";
+          when Has_Own_DIC =>
+             return "Has_Own_DIC";
+          when Has_RACW =>
+             return "Has_RACW";
+          when Has_SP_Choice =>
+             return "Has_SP_Choice";
+          when Ignore_SPARK_Mode_Pragmas =>
+             return "Ignore_SPARK_Mode_Pragmas";
+          when Is_Constr_Subt_For_UN_Aliased =>
+             return "Is_Constr_Subt_For_UN_Aliased";
+          when Is_CPP_Class =>
+             return "Is_CPP_Class";
+          when Is_CUDA_Kernel =>
+             return "Is_CUDA_Kernel";
+          when Is_DIC_Procedure =>
+             return "Is_DIC_Procedure";
+          when Is_Discrim_SO_Function =>
+             return "Is_Discrim_SO_Function";
+          when Is_Elaboration_Checks_OK_Id =>
+             return "Is_Elaboration_Checks_OK_Id";
+          when Is_Elaboration_Checks_OK_Node =>
+             return "Is_Elaboration_Checks_OK_Node";
+          when Is_Elaboration_Warnings_OK_Id =>
+             return "Is_Elaboration_Warnings_OK_Id";
+          when Is_Elaboration_Warnings_OK_Node =>
+             return "Is_Elaboration_Warnings_OK_Node";
+          when Is_Known_Guaranteed_ABE =>
+             return "Is_Known_Guaranteed_ABE";
+          when Is_RACW_Stub_Type =>
+             return "Is_RACW_Stub_Type";
+          when Is_SPARK_Mode_On_Node =>
+             return "Is_SPARK_Mode_On_Node";
+          when Local_Raise_Not_OK =>
+             return "Local_Raise_Not_OK";
+          when LSP_Subprogram =>
+             return "LSP_Subprogram";
+          when OK_To_Rename =>
+             return "OK_To_Rename";
+          when Referenced_As_LHS =>
+             return "Referenced_As_LHS";
+          when RM_Size =>
+             return "RM_Size";
+          when SCIL_Controlling_Tag =>
+             return "SCIL_Controlling_Tag";
+          when SCIL_Entity =>
+             return "SCIL_Entity";
+          when SCIL_Tag_Value =>
+             return "SCIL_Tag_Value";
+          when SCIL_Target_Prim =>
+             return "SCIL_Target_Prim";
+          when Shift_Count_OK =>
+             return "Shift_Count_OK";
+          when SPARK_Aux_Pragma =>
+             return "SPARK_Aux_Pragma";
+          when SPARK_Aux_Pragma_Inherited =>
+             return "SPARK_Aux_Pragma_Inherited";
+          when SPARK_Pragma =>
+             return "SPARK_Pragma";
+          when SPARK_Pragma_Inherited =>
+             return "SPARK_Pragma_Inherited";
+          when Split_PPC =>
+             return "Split_PPC";
+          when SSO_Set_High_By_Default =>
+             return "SSO_Set_High_By_Default";
+          when SSO_Set_Low_By_Default =>
+             return "SSO_Set_Low_By_Default";
+          when TSS_Elist =>
+             return "TSS_Elist";
+ 
+          when others =>
+             return Capitalize (F'Img);
+       end case;
+    end Image;
+ 
+    function Image (Default : Field_Default_Value) return String is
+      (Capitalize (Default'Img));
+ 
+    -----------------
+    -- Value_Image --
+    -----------------
+ 
+    function Value_Image (Default : Field_Default_Value) return String is
+    begin
+       if Default = No_Default then
+          return Image (Default);
+ 
+       else
+          --  Strip off the prefix
+ 
+          declare
+             Im : constant String := Image (Default);
+             Prefix : constant String := "Default_";
+          begin
+             pragma Assert (Im (1 .. Prefix'Length) = Prefix);
+             return Im (Prefix'Length + 1 .. Im'Last);
+          end;
+       end if;
+    end Value_Image;
+ 
+    -------------------
+    -- Iterate_Types --
+    -------------------
+ 
+    procedure Iterate_Types
+      (Root  : Node_Or_Entity_Type;
+       Pre, Post : not null access procedure (T : Node_Or_Entity_Type) :=
+         Nil'Access)
+    is
+       procedure Recursive (T : Node_Or_Entity_Type);
+       --  Recursive walk
+ 
+       procedure Recursive (T : Node_Or_Entity_Type) is
+       begin
+          Pre (T);
+ 
+          for Child of Type_Table (T).Children loop
+             Recursive (Child);
+          end loop;
+ 
+          Post (T);
+       end Recursive;
+ 
+    begin
+       Recursive (Root);
+    end Iterate_Types;
+ 
+    -------------------
+    -- Is_Descendant --
+    -------------------
+ 
+    function Is_Descendant (Ancestor, Descendant : Node_Or_Entity_Type)
+      return Boolean is
+    begin
+       if Ancestor = Descendant then
+          return True;
+ 
+       elsif Descendant in Root_Type then
+          return False;
+ 
+       else
+          return Is_Descendant (Ancestor, Type_Table (Descendant).Parent);
+       end if;
+    end Is_Descendant;
+ 
+    ------------------------
+    -- Put_Type_Hierarchy --
+    ------------------------
+ 
+    procedure Put_Type_Hierarchy (S : in out Sink; Root : Root_Type) is
+       Level : Natural := 0;
+ 
+       function Indentation return String is ((1 .. 3 * Level => ' '));
+       --  Indentation string of space characters. We can't use the Indent
+       --  primitive, because we want this indentation after the "--".
+ 
+       procedure Pre (T : Node_Or_Entity_Type);
+       procedure Post (T : Node_Or_Entity_Type);
+       --  Pre and Post actions passed to Iterate_Types
+ 
+       procedure Pre (T : Node_Or_Entity_Type) is
+       begin
+          Put (S, "--  " & Indentation & Image (T) & LF);
+          Level := Level + 1;
+       end Pre;
+ 
+       procedure Post (T : Node_Or_Entity_Type) is
+       begin
+          Level := Level - 1;
+ 
+          --  Put out an "end" line only if there are many descendants, for
+          --  an arbitrary definition of "many".
+ 
+          if Num_Concrete_Descendants (T) > 10 then
+             Put (S, "--  " & Indentation & "end " & Image (T) & LF);
+          end if;
+       end Post;
+ 
+       N_Or_E : constant String :=
+         (case Root is
+            when Node_Kind => "nodes",
+            when others => "entities");  -- Entity_Kind
+ 
+    --  Start of processing for Put_Type_Hierarchy
+ 
+    begin
+       Put (S, "--  Type hierarchy for " & N_Or_E & LF);
+       Put (S, "--" & LF);
+ 
+       Iterate_Types (Root, Pre'Access, Post'Access);
+ 
+       Put (S, "--" & LF);
+       Put (S, "--  End type hierarchy for " & N_Or_E & LF & LF);
+    end Put_Type_Hierarchy;
+ 
+ end Gen_IL.Internals;
diff -Nrcpad gcc-11.3.0/gcc/ada/gen_il-internals.ads gcc-12.1.0/gcc/ada/gen_il-internals.ads
*** gcc-11.3.0/gcc/ada/gen_il-internals.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gen_il-internals.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,626 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                          G E N _ I L . U T I L S                         --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2020-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Containers.Vectors; use Ada.Containers;
+ 
+ with GNAT.Strings; use GNAT.Strings;
+ 
+ with Gen_IL.Types;  use Gen_IL.Types;
+ with Gen_IL.Fields; use Gen_IL.Fields;
+ 
+ package Gen_IL.Internals is
+ 
+    function Image (T : Opt_Type_Enum) return String;
+ 
+    function Image_Sans_N (T : Opt_Type_Enum) return String;
+    --  Returns the image without the leading "N_"
+ 
+    ----------------
+ 
+    type Type_Set is array (Type_Enum) of Boolean;
+ 
+    type Type_Index is new Positive;
+    subtype Type_Count is Type_Index'Base range 0 .. Type_Index'Last;
+    package Type_Vectors is new Vectors (Type_Index, Type_Enum);
+    use Type_Vectors;
+    subtype Type_Vector is Type_Vectors.Vector;
+ 
+    type Type_Array is array (Type_Index range <>) of Type_Enum;
+ 
+    ----------------
+ 
+    procedure Put_Types_With_Bars (S : in out Sink; U : Type_Vector);
+    procedure Put_Type_Ids_With_Bars (S : in out Sink; U : Type_Vector);
+    --  Put the types with vertical bars in between, as in
+    --     N_This | N_That | N_Other
+    --  or
+    --     N_This_Id | N_That_Id | N_Other_Id
+ 
+    function Id_Image (T : Type_Enum) return String;
+    --  Image of the type for use with _Id types
+ 
+    function Get_Set_Id_Image (T : Type_Enum) return String;
+    --  Image of the type for use with getters and setters
+ 
+    ----------------
+ 
+    type Fields_Present_Array is array (Field_Enum) of Type_Set;
+ 
+    type Field_Set is array (Field_Enum) of Boolean;
+    type Fields_Per_Node_Type is array (Node_Or_Entity_Type) of Field_Set;
+ 
+    type Field_Index is new Positive;
+    package Field_Vectors is new Vectors (Field_Index, Field_Enum);
+    subtype Field_Vector is Field_Vectors.Vector;
+ 
+    type Bit_Offset is new Root_Nat range 0 .. 32_000 - 1;
+    --  Offset in bits. The number 32_000 is chosen because there are fewer than
+    --  1000 fields, but offsets are in size units (1 bit for flags, 32 bits for
+    --  most others, also 2, 4, and 8).
+ 
+    type Field_Offset is new Bit_Offset;
+ 
+    type Type_Info (Is_Union : Boolean) is record
+       Parent : Opt_Abstract_Type;
+       --  Parent of this type (single inheritance). No_Type for a root
+       --  type (Node_Kind or Entity_Kind). For union types, this is
+       --  a root type.
+ 
+       Children : Type_Vector;
+       --  Inverse of Parent
+ 
+       Concrete_Descendants : Type_Vector;
+ 
+       case Is_Union is
+          when True =>
+             null;
+ 
+          when False =>
+             First, Last : Concrete_Type;
+             --  This type includes concrete types in the range First..Last. For
+             --  a concrete type, First=Last. For an abstract type, First..Last
+             --  includes two or more types.
+ 
+             Fields : Field_Vector;
+ 
+             Nmake_Assert : String_Access; -- only for concrete node types
+       end case;
+    end record;
+ 
+    type Type_Info_Ptr is access all Type_Info;
+ 
+    Type_Table : array (Node_Or_Entity_Type) of Type_Info_Ptr;
+    --  Table mapping from enumeration literals representing types to
+    --  information about the type.
+ 
+    procedure Verify_Type_Table;
+    --  Check Type_Table for consistency
+ 
+    function Num_Concrete_Descendants
+      (T : Node_Or_Entity_Type) return Natural;
+    --  Number of concrete descendants of T, including (if T is concrete)
+    --  itself.
+ 
+    type Field_Default_Value is
+      (No_Default,
+       Default_Empty, -- Node_Id
+       Default_No_List, Default_Empty_List, -- List_Id
+       Default_False, Default_True, -- Flag
+       Default_No_Elist, -- Elist_Id
+       Default_No_Name, -- Name_Id
+       Default_Uint_0); -- Uint
+    --  Default value for a field in the Nmake functions. No_Default if the
+    --  field parameter has no default value. Otherwise this indicates the
+    --  default value used, which must match the type of the field.
+ 
+    function Image (Default : Field_Default_Value) return String;
+    --  This will be something like "Default_Empty".
+    function Value_Image (Default : Field_Default_Value) return String;
+    --  This will be something like "Empty".
+ 
+    type Type_Only_Enum is
+      (No_Type_Only, Base_Type_Only, Impl_Base_Type_Only, Root_Type_Only);
+    --  These correspond to the "[base type only]", "[implementation base type
+    --  only]", and "[root type only]" annotations documented in einfo.ads.
+    --  The default is No_Type_Only, indicating the field is not one of
+    --  these special "[... only]" ones.
+ 
+    function Image (Type_Only : Type_Only_Enum) return String is
+      (Capitalize (Type_Only'Img));
+ 
+    Unknown_Offset : constant := -1;
+    --  Initial value of Offset, so we can tell whether it has been set
+ 
+    type Field_Info is record
+       Have_This_Field : Type_Vector;
+       --  Types that have this field
+ 
+       Field_Type      : Type_Enum;
+       --  Type of the field. Currently, we use Node_Id for all node-valued
+       --  fields, but we could narrow down to children of that. Similar for
+       --  Entity_Id.
+ 
+       Default_Value   : Field_Default_Value;
+       Type_Only       : Type_Only_Enum;
+       Pre, Pre_Get, Pre_Set : String_Access;
+       --  Above record the information in the calls to Create_...Field.
+       --  See Gen_IL.Gen for details.
+ 
+       Offset : Field_Offset'Base range Unknown_Offset .. Field_Offset'Last;
+       --  Offset of the field from the start of the node, in units of the field
+       --  size. So if a field is 4 bits in size, it starts at bit number
+       --  Offset*4 from the start of the node.
+    end record;
+ 
+    type Field_Info_Ptr is access all Field_Info;
+ 
+    Field_Table : array (Field_Enum) of Field_Info_Ptr;
+    --  Table mapping from enumeration literals representing fields to
+    --  information about the field.
+ 
+    --  Getters for fields of types Elist_Id and Uint need special treatment of
+    --  defaults. In particular, if the field has its initial 0 value, getters
+    --  need to return the appropriate default value. Note that these defaults
+    --  have nothing to do with the defaults mentioned above for Nmake
+    --  functions.
+ 
+    function Field_Has_Special_Default
+      (Field_Type : Type_Enum) return Boolean is
+       (Field_Type in Elist_Id | Uint);
+    --  These are the field types that have a default value that is not
+    --  represented as zero.
+ 
+    function Special_Default
+      (Field_Type : Type_Enum) return String is
+       (case Field_Type is
+          when Elist_Id => "No_Elist",
+          when Uint => "No_Uint",
+          when others => "can't happen");
+ 
+    ----------------
+ 
+    subtype Node_Field is
+      Field_Enum range
+        Field_Enum'First ..
+          Field_Enum'Pred (Between_Node_And_Entity_Fields);
+ 
+    subtype Entity_Field is
+      Field_Enum range
+        Field_Enum'Succ (Between_Node_And_Entity_Fields) ..
+          Field_Enum'Last;
+ 
+    function Image (F : Opt_Field_Enum) return String;
+ 
+    function F_Image (F : Opt_Field_Enum) return String is
+      ("F_" & Image (F));
+    --  Prepends "F_" to Image (F). This is used for the enumeration literals in
+    --  the generated Sinfo.Nodes.Node_Field and Einfo.Entities.Entity_Field
+    --  types. If we used Image (F), these enumeration literals would overload
+    --  the getter functions, which confuses gdb.
+ 
+    procedure Nil (T : Node_Or_Entity_Type);
+    --  Null procedure
+ 
+    procedure Iterate_Types
+      (Root  : Node_Or_Entity_Type;
+       Pre, Post : not null access procedure (T : Node_Or_Entity_Type) :=
+         Nil'Access);
+    --  Iterate top-down on the type hierarchy. Call Pre and Post before and
+    --  after walking child types. Note that this ignores union types, because
+    --  they are nonhierarchical. The order in which concrete types are visited
+    --  matches the order of the generated enumeration types Node_Kind and
+    --  Entity_Kind, which is not the same as the order of the Type_Enum
+    --  type in Gen_IL.Types.
+ 
+    function Is_Descendant (Ancestor, Descendant : Node_Or_Entity_Type)
+      return Boolean;
+    --  True if Descendant is a descendant of Ancestor; that is,
+    --  True if Ancestor is an ancestor of Descendant. True for
+    --  a type itself.
+ 
+    procedure Put_Type_Hierarchy (S : in out Sink; Root : Root_Type);
+ 
+    ----------------
+ 
+    type Field_Desc is record
+       F : Field_Enum;
+       Is_Syntactic : Boolean;
+       --  The same field can be syntactic in some nodes but semantic in others
+    end record;
+ 
+    type Field_Sequence_Index is new Positive;
+    type Field_Sequence is array (Field_Sequence_Index range <>) of Field_Desc;
+    No_Fields : constant Field_Sequence := (1 .. 0 => <>);
+ 
+    type Field_Array is array (Bit_Offset range <>) of Opt_Field_Enum;
+    type Field_Array_Ptr is access all Field_Array;
+ 
+    type Concrete_Type_Layout_Array is array (Concrete_Type) of Field_Array_Ptr;
+    --  Mapping from types to mappings from offsets to fields. Each bit offset
+    --  is mapped to the corresponding field for the given type. An n-bit field
+    --  will have n bit offsets mapped to the same field.
+ 
+    type Offset_To_Fields_Mapping is
+      array (Bit_Offset range <>) of Field_Array_Ptr;
+    --  Mapping from bit offsets to fields using that offset
+ 
+    function First_Abstract (Root : Root_Type) return Abstract_Type;
+    function Last_Abstract (Root : Root_Type) return Abstract_Type;
+    --  First and Last abstract types descended from the Root. So for example if
+    --  Root = Node_Kind, then First_Abstract = Abstract_Node'First.
+ 
+    function First_Concrete (Root : Root_Type) return Concrete_Type;
+    function Last_Concrete (Root : Root_Type) return Concrete_Type;
+    --  First and Last concrete types descended from the Root
+ 
+    function First_Field (Root : Root_Type) return Field_Enum;
+    function Last_Field (Root : Root_Type) return Field_Enum;
+    --  First and Last node or entity fields
+ 
+    function Node_Or_Entity (Root : Root_Type) return String;
+    --  Return "Node" or "Entity" depending on whether Root = Node_Kind or
+    --  Entity_Kind.
+ 
+    pragma Style_Checks (Off);
+    --  We don't want warnings about wrong casing in the Type_Frequency table;
+    --  this table is not intended to be particularly readable.
+ 
+    --  The Type_Frequency table shows the frequency of nodes and entity kinds
+    --  printed by -gnatd.A for a large example. It is used in the field offset
+    --  computations for efficiency. Note that N_Defining_Identifier,
+    --  N_Defining_Operator_Symbol, and N_Defining_Character_Literal are set to
+    --  zero, because the Ekind is what matters for those.
+ 
+    Type_Frequency : constant array (Concrete_Type) of Type_Count :=
+      (N_Identifier => 3496964, -- (0.354) 7 slots
+       N_Defining_Identifier => 0, -- 1468484, -- (0.149) 8 slots
+       N_Integer_Literal => 455415, -- (0.046) 6 slots
+       E_In_Parameter => 391008, -- (0.040) 42 slots
+       N_Attribute_Reference => 330825, -- (0.033) 9 slots
+       N_Expanded_Name => 329509, -- (0.033) 8 slots
+       N_Selected_Component => 328862, -- (0.033) 8 slots
+       N_Parameter_Specification => 321313, -- (0.033) 7 slots
+       E_Void => 173019, -- (0.018) 59 slots
+       N_Explicit_Dereference => 155113, -- (0.016) 8 slots
+       N_Procedure_Call_Statement => 125403, -- (0.013) 8 slots
+       N_Object_Declaration => 115610, -- (0.012) 8 slots
+       E_Component => 108208, -- (0.011) 49 slots
+       N_Procedure_Specification => 106277, -- (0.011) 7 slots
+       E_Procedure => 104063, -- (0.011) 62 slots
+       N_Unchecked_Type_Conversion => 94477, -- (0.010) 7 slots
+       N_Range => 91413, -- (0.009) 6 slots
+       E_Function => 90035, -- (0.009) 62 slots
+       N_Handled_Sequence_Of_Statements => 87930, -- (0.009) 8 slots
+       N_Subprogram_Declaration => 85248, -- (0.009) 7 slots
+       N_Parameter_Association => 81464, -- (0.008) 8 slots
+       N_Indexed_Component => 80049, -- (0.008) 7 slots
+       N_Freeze_Entity => 79904, -- (0.008) 8 slots
+       N_Call_Marker => 79521, -- (0.008) 4 slots
+       N_Assignment_Statement => 76554, -- (0.008) 8 slots
+       N_Function_Specification => 76052, -- (0.008) 7 slots
+       N_Function_Call => 75028, -- (0.008) 9 slots
+       N_Op_Eq => 74874, -- (0.008) 8 slots
+       E_Constant => 66667, -- (0.007) 47 slots
+       N_If_Statement => 60066, -- (0.006) 8 slots
+       N_Component_Association => 54642, -- (0.006) 7 slots
+       N_Subprogram_Body => 53805, -- (0.005) 10 slots
+       N_Type_Conversion => 53383, -- (0.005) 7 slots
+       E_In_Out_Parameter => 52936, -- (0.005) 38 slots
+       N_Simple_Return_Statement => 52436, -- (0.005) 7 slots
+       N_Subtype_Indication => 49535, -- (0.005) 6 slots
+       N_Raise_Constraint_Error => 49069, -- (0.005) 6 slots
+       N_Null => 46850, -- (0.005) 5 slots
+       N_Itype_Reference => 45422, -- (0.005) 4 slots
+       E_Anonymous_Access_Type => 45149, -- (0.005) 44 slots
+       N_And_Then => 44721, -- (0.005) 8 slots
+       N_Block_Statement => 44328, -- (0.004) 10 slots
+       N_Subtype_Declaration => 43149, -- (0.004) 6 slots
+       N_Op_Not => 40531, -- (0.004) 7 slots
+       E_Array_Subtype => 40051, -- (0.004) 50 slots
+       N_Expression_With_Actions => 36726, -- (0.004) 7 slots
+       E_Access_Subprogram_Type => 36700, -- (0.004) 45 slots
+       E_Signed_Integer_Subtype => 36659, -- (0.004) 43 slots
+       N_String_Literal => 34815, -- (0.004) 7 slots
+       N_Aggregate => 33899, -- (0.003) 8 slots
+       N_Index_Or_Discriminant_Constraint => 33546, -- (0.003) 4 slots
+       E_Variable => 33102, -- (0.003) 55 slots
+       E_Block => 32829, -- (0.003) 58 slots
+       N_Op_Ne => 32127, -- (0.003) 8 slots
+       N_Pragma_Argument_Association => 31504, -- (0.003) 7 slots
+       N_Null_Statement => 30816, -- (0.003) 5 slots
+       N_Aspect_Specification => 29667, -- (0.003) 9 slots
+       N_Pragma => 28317, -- (0.003) 9 slots
+       N_Generic_Association => 26297, -- (0.003) 8 slots
+       N_Formal_Concrete_Subprogram_Declaration => 25843, -- (0.003) 6 slots
+       N_Op_Lt => 25328, -- (0.003) 8 slots
+       E_String_Literal_Subtype => 25272, -- (0.003) 48 slots
+       N_Full_Type_Declaration => 25258, -- (0.003) 7 slots
+       N_With_Clause => 24370, -- (0.002) 9 slots
+       N_Op_Add => 23839, -- (0.002) 8 slots
+       E_Subprogram_Body => 23790, -- (0.002) 42 slots
+       E_Return_Statement => 23098, -- (0.002) 51 slots
+       N_Or_Else => 22858, -- (0.002) 8 slots
+       N_Implicit_Label_Declaration => 21687, -- (0.002) 5 slots
+       N_Others_Choice => 21579, -- (0.002) 4 slots
+       E_Out_Parameter => 21513, -- (0.002) 38 slots
+       N_Op_Subtract => 21441, -- (0.002) 8 slots
+       N_Op_Ge => 21116, -- (0.002) 8 slots
+       N_Component_Definition => 21075, -- (0.002) 7 slots
+       N_Case_Statement_Alternative => 19664, -- (0.002) 8 slots
+       N_Loop_Statement => 19507, -- (0.002) 9 slots
+       E_Package => 19029, -- (0.002) 53 slots
+       N_Op_Gt => 18619, -- (0.002) 8 slots
+       N_Op_Le => 16564, -- (0.002) 8 slots
+       N_Formal_Object_Declaration => 16219, -- (0.002) 7 slots
+       E_Discriminant => 16091, -- (0.002) 56 slots
+       N_Component_Declaration => 15858, -- (0.002) 7 slots
+       N_Iteration_Scheme => 15719, -- (0.002) 8 slots
+       N_Access_To_Object_Definition => 14875, -- (0.002) 5 slots
+       E_Record_Subtype => 14569, -- (0.001) 52 slots
+       N_Generic_Subprogram_Declaration => 14320, -- (0.001) 7 slots
+       N_Package_Specification => 13323, -- (0.001) 8 slots
+       N_Exception_Handler => 12841, -- (0.001) 8 slots
+       E_Enumeration_Literal => 11608, -- (0.001) 42 slots
+       N_Subprogram_Renaming_Declaration => 10991, -- (0.001) 9 slots
+       N_In => 10794, -- (0.001) 8 slots
+       E_Allocator_Type => 10751, -- (0.001) 44 slots
+       E_General_Access_Type => 10451, -- (0.001) 44 slots
+       E_Generic_Procedure => 9837, -- (0.001) 41 slots
+       N_Package_Renaming_Declaration => 9395, -- (0.001) 8 slots
+       N_Access_Definition => 9388, -- (0.001) 6 slots
+       N_Qualified_Expression => 9012, -- (0.001) 7 slots
+       E_Enumeration_Subtype => 8560, -- (0.001) 46 slots
+       N_Allocator => 8474, -- (0.001) 8 slots
+       N_Package_Declaration => 8099, -- (0.001) 10 slots
+       N_Formal_Type_Declaration => 7964, -- (0.001) 7 slots
+       N_Exit_Statement => 7960, -- (0.001) 8 slots
+       N_Component_List => 7829, -- (0.001) 5 slots
+       N_Defining_Operator_Symbol => 0, -- 7525, -- (0.001) 8 slots
+       N_Case_Statement => 7271, -- (0.001) 7 slots
+       N_Expression_Function => 7242, -- (0.001) 9 slots
+       N_Loop_Parameter_Specification => 7042, -- (0.001) 7 slots
+       N_Character_Literal => 6842, -- (0.001) 7 slots
+       N_Op_Concat => 6565, -- (0.001) 8 slots
+       N_Not_In => 6341, -- (0.001) 8 slots
+       N_Label => 6133, -- (0.001) 9 slots
+       N_Goto_Statement => 6133, -- (0.001) 8 slots
+       E_Label => 6133, -- (0.001) 57 slots
+       E_Loop => 6008, -- (0.001) 41 slots
+       N_Generic_Package_Declaration => 5808, -- (0.001) 10 slots
+       N_If_Expression => 5800, -- (0.001) 7 slots
+       N_Record_Definition => 5628, -- (0.001) 7 slots
+       N_Slice => 5461, -- (0.001) 7 slots
+       N_Reference => 5332, -- (0.001) 7 slots
+       E_Generic_Package => 5268, -- (0.001) 59 slots
+       E_Record_Type => 4838, -- (0.000) 51 slots
+       N_Raise_Program_Error => 4675, -- (0.000) 6 slots
+       N_Raise_Statement => 4628, -- (0.000) 8 slots
+       N_Use_Type_Clause => 4487, -- (0.000) 9 slots
+       E_Array_Type => 4325, -- (0.000) 48 slots
+       E_Operator => 4308, -- (0.000) 55 slots
+       N_Freeze_Generic_Entity => 4249, -- (0.000) 4 slots
+       N_Constrained_Array_Definition => 4244, -- (0.000) 5 slots
+       N_Object_Renaming_Declaration => 4067, -- (0.000) 8 slots
+       N_Formal_Private_Type_Definition => 4018, -- (0.000) 8 slots
+       E_Loop_Parameter => 3870, -- (0.000) 38 slots
+       N_Real_Literal => 3759, -- (0.000) 7 slots
+       N_Attribute_Definition_Clause => 3724, -- (0.000) 8 slots
+       N_Exception_Renaming_Declaration => 3697, -- (0.000) 8 slots
+       E_Class_Wide_Type => 3674, -- (0.000) 48 slots
+       E_Exception => 3632, -- (0.000) 24 slots
+       N_Range_Constraint => 3506, -- (0.000) 4 slots
+       E_Access_Type => 3487, -- (0.000) 44 slots
+       E_Subprogram_Type => 3248, -- (0.000) 47 slots
+       N_Package_Instantiation => 3005, -- (0.000) 8 slots
+       E_Access_Attribute_Type => 2959, -- (0.000) 44 slots
+       N_Op_And => 2957, -- (0.000) 8 slots
+       E_Generic_In_Parameter => 2704, -- (0.000) 31 slots
+       N_Derived_Type_Definition => 2688, -- (0.000) 7 slots
+       N_Variant => 2535, -- (0.000) 8 slots
+       E_Record_Subtype_With_Private => 2327, -- (0.000) 50 slots
+       N_Private_Type_Declaration => 2287, -- (0.000) 6 slots
+       E_Private_Type => 1890, -- (0.000) 48 slots
+       N_Discriminant_Specification => 1864, -- (0.000) 7 slots
+       N_Procedure_Instantiation => 1659, -- (0.000) 8 slots
+       N_Op_Multiply => 1634, -- (0.000) 8 slots
+       E_Access_Subtype => 1606, -- (0.000) 44 slots
+       N_Defining_Program_Unit_Name => 1463, -- (0.000) 8 slots
+       N_Number_Declaration => 1461, -- (0.000) 7 slots
+       E_Named_Integer => 1430, -- (0.000) 19 slots
+       N_Use_Package_Clause => 1369, -- (0.000) 9 slots
+       N_Compilation_Unit_Aux => 1341, -- (0.000) 8 slots
+       N_Compilation_Unit => 1341, -- (0.000) 8 slots
+       N_Elsif_Part => 1331, -- (0.000) 7 slots
+       N_Operator_Symbol => 1305, -- (0.000) 7 slots
+       E_Limited_Private_Type => 1299, -- (0.000) 48 slots
+       E_Generic_Function => 1292, -- (0.000) 41 slots
+       E_Enumeration_Type => 1186, -- (0.000) 47 slots
+       N_Enumeration_Type_Definition => 1169, -- (0.000) 6 slots
+       N_Unchecked_Expression => 1112, -- (0.000) 7 slots
+       N_Op_Or => 1107, -- (0.000) 8 slots
+       N_Designator => 1100, -- (0.000) 9 slots
+       N_Formal_Discrete_Type_Definition => 1086, -- (0.000) 4 slots
+       N_Variant_Part => 1072, -- (0.000) 8 slots
+       N_Formal_Package_Declaration => 1047, -- (0.000) 8 slots
+       N_Quantified_Expression => 1033, -- (0.000) 8 slots
+       E_Record_Type_With_Private => 1017, -- (0.000) 51 slots
+       N_Package_Body => 999, -- (0.000) 9 slots
+       N_Unconstrained_Array_Definition => 973, -- (0.000) 5 slots
+       E_Private_Subtype => 971, -- (0.000) 48 slots
+       N_Incomplete_Type_Declaration => 863, -- (0.000) 6 slots
+       E_Incomplete_Type => 863, -- (0.000) 48 slots
+       N_Contract => 859, -- (0.000) 6 slots
+       E_Package_Body => 852, -- (0.000) 46 slots
+       N_Extended_Return_Statement => 801, -- (0.000) 8 slots
+       N_Op_Divide => 724, -- (0.000) 8 slots
+       N_Extension_Aggregate => 718, -- (0.000) 8 slots
+       N_Function_Instantiation => 642, -- (0.000) 8 slots
+       N_Exception_Declaration => 594, -- (0.000) 7 slots
+       N_Discriminant_Association => 552, -- (0.000) 7 slots
+       N_Iterator_Specification => 543, -- (0.000) 8 slots
+       N_Private_Extension_Declaration => 540, -- (0.000) 8 slots
+       N_Formal_Signed_Integer_Type_Definition => 512, -- (0.000) 4 slots
+       E_Modular_Integer_Subtype => 490, -- (0.000) 44 slots
+       N_Component_Clause => 468, -- (0.000) 7 slots
+       E_Signed_Integer_Type => 399, -- (0.000) 43 slots
+       N_Op_Minus => 356, -- (0.000) 7 slots
+       N_Raise_Expression => 337, -- (0.000) 8 slots
+       N_Case_Expression_Alternative => 336, -- (0.000) 8 slots
+       N_Op_Expon => 280, -- (0.000) 8 slots
+       N_Abstract_Subprogram_Declaration => 250, -- (0.000) 6 slots
+       E_Modular_Integer_Type => 232, -- (0.000) 44 slots
+       N_Modular_Type_Definition => 214, -- (0.000) 7 slots
+       N_Compound_Statement => 212, -- (0.000) 6 slots
+       N_Free_Statement => 209, -- (0.000) 8 slots
+       N_Record_Representation_Clause => 197, -- (0.000) 9 slots
+       N_Access_Procedure_Definition => 195, -- (0.000) 6 slots
+       E_Limited_Private_Subtype => 178, -- (0.000) 48 slots
+       N_Access_Function_Definition => 172, -- (0.000) 7 slots
+       N_Op_Mod => 163, -- (0.000) 8 slots
+       N_Validate_Unchecked_Conversion => 156, -- (0.000) 5 slots
+       E_Anonymous_Access_Subprogram_Type => 155, -- (0.000) 44 slots
+       N_Op_Rem => 147, -- (0.000) 8 slots
+       N_Formal_Incomplete_Type_Definition => 140, -- (0.000) 4 slots
+       N_Signed_Integer_Type_Definition => 137, -- (0.000) 6 slots
+       N_Case_Expression => 132, -- (0.000) 7 slots
+       N_Op_Plus => 129, -- (0.000) 7 slots
+       E_Incomplete_Subtype => 129, -- (0.000) 48 slots
+       N_Op_Abs => 119, -- (0.000) 7 slots
+       N_Op_Shift_Right => 109, -- (0.000) 8 slots
+       E_Floating_Point_Subtype => 94, -- (0.000) 43 slots
+       N_Op_Shift_Left => 72, -- (0.000) 8 slots
+       E_Floating_Point_Type => 59, -- (0.000) 43 slots
+       N_Formal_Derived_Type_Definition => 53, -- (0.000) 7 slots
+       N_Formal_Floating_Point_Definition => 40, -- (0.000) 4 slots
+       N_Defining_Character_Literal => 0, -- 36, -- (0.000) 8 slots
+       N_Formal_Modular_Type_Definition => 27, -- (0.000) 4 slots
+       E_Ordinary_Fixed_Point_Subtype => 23, -- (0.000) 44 slots
+       E_Abstract_State => 22, -- (0.000) 48 slots
+       E_Named_Real => 20, -- (0.000) 19 slots
+       N_Floating_Point_Definition => 19, -- (0.000) 6 slots
+       N_Subunit => 17, -- (0.000) 8 slots
+       N_Enumeration_Representation_Clause => 17, -- (0.000) 9 slots
+       N_Entry_Declaration => 17, -- (0.000) 7 slots
+       N_Subprogram_Body_Stub => 16, -- (0.000) 8 slots
+       N_Unused_At_Start => 15, -- (0.000) 4 slots
+       E_Entry => 14, -- (0.000) 42 slots
+       N_Formal_Ordinary_Fixed_Point_Definition => 12, -- (0.000) 4 slots
+       E_Class_Wide_Subtype => 9, -- (0.000) 52 slots
+       E_Protected_Subtype => 8, -- (0.000) 48 slots
+       E_Ordinary_Fixed_Point_Type => 8, -- (0.000) 44 slots
+       N_Op_Xor => 7, -- (0.000) 8 slots
+       E_Generic_In_Out_Parameter => 7, -- (0.000) 31 slots
+       N_Protected_Type_Declaration => 6, -- (0.000) 8 slots
+       N_Protected_Definition => 6, -- (0.000) 8 slots
+       N_Task_Type_Declaration => 4, -- (0.000) 8 slots
+       N_Task_Definition => 4, -- (0.000) 8 slots
+       N_Protected_Body => 4, -- (0.000) 9 slots
+       E_Task_Subtype => 4, -- (0.000) 50 slots
+       E_Protected_Type => 4, -- (0.000) 49 slots
+       E_Access_Protected_Subprogram_Type => 4, -- (0.000) 45 slots
+       N_Entry_Call_Statement => 3, -- (0.000) 8 slots
+       E_Task_Type => 3, -- (0.000) 50 slots
+       N_Raise_Storage_Error => 2, -- (0.000) 6 slots
+       N_Package_Body_Stub => 2, -- (0.000) 8 slots
+       N_Generic_Procedure_Renaming_Declaration => 2, -- (0.000) 8 slots
+       N_Task_Body => 1, -- (0.000) 10 slots
+       N_Single_Protected_Declaration => 1, -- (0.000) 8 slots
+       N_Real_Range_Specification => 1, -- (0.000) 6 slots
+       N_Ordinary_Fixed_Point_Definition => 1, -- (0.000) 6 slots
+       N_Error => 1, -- (0.000) 6 slots
+       N_Entry_Body_Formal_Part => 1, -- (0.000) 6 slots
+       N_Entry_Body => 1, -- (0.000) 10 slots
+       N_Empty => 1, -- (0.000) 6 slots
+       N_Delay_Relative_Statement => 1, -- (0.000) 7 slots
+       E_Protected_Body => 1, -- (0.000) 35 slots
+ 
+       Between_Concrete_Node_And_Concrete_Entity_Types => 0,
+ 
+       --  The rest had frequency 0 (i.e. no such nodes were created in the
+       --  example), but we set them to 1, so we won't lose information when
+       --  multiplying. We use "others", so that if new node types are added,
+       --  we don't have to modify the table; new node types are unlikely to
+       --  be very common.
+ 
+       others => 1
+       --  N_Variable_Reference_Marker => 0, (0.000) 4 slots
+       --  N_Unused_At_End => 0, (0.000) 4 slots
+       --  N_Triggering_Alternative => 0, (0.000) 6 slots
+       --  N_Timed_Entry_Call => 0, (0.000) 5 slots
+       --  N_Terminate_Alternative => 0, (0.000) 6 slots
+       --  N_Task_Body_Stub => 0, (0.000) 8 slots
+       --  N_Target_Name => 0, (0.000) 5 slots
+       --  N_Single_Task_Declaration => 0, (0.000) 8 slots
+       --  N_Selective_Accept => 0, (0.000) 5 slots
+       --  N_Scil_Membership_Test => 0, (0.000) 5 slots
+       --  N_Scil_Dispatch_Table_Tag_Init => 0, (0.000) 4 slots
+       --  N_Scil_Dispatching_Call => 0, (0.000) 6 slots
+       --  N_Return_When_Statement => 0, (0.000) 7 slots
+       --  N_Requeue_Statement => 0, (0.000) 8 slots
+       --  N_Raise_When_Statement => 0, (0.000) 8 slots
+       --  N_Push_Storage_Error_Label => 0, (0.000) 4 slots
+       --  N_Push_Program_Error_Label => 0, (0.000) 4 slots
+       --  N_Push_Constraint_Error_Label => 0, (0.000) 4 slots
+       --  N_Protected_Body_Stub => 0, (0.000) 8 slots
+       --  N_Pop_Storage_Error_Label => 0, (0.000) 4 slots
+       --  N_Pop_Program_Error_Label => 0, (0.000) 4 slots
+       --  N_Pop_Constraint_Error_Label => 0, (0.000) 4 slots
+       --  N_Op_Shift_Right_Arithmetic => 0, (0.000) 8 slots
+       --  N_Op_Rotate_Right => 0, (0.000) 8 slots
+       --  N_Op_Rotate_Left => 0, (0.000) 8 slots
+       --  N_Mod_Clause => 0, (0.000) 7 slots
+       --  N_Iterated_Element_Association => 0, (0.000) 8 slots
+       --  N_Iterated_Component_Association => 0, (0.000) 8 slots
+       --  N_Goto_When_Statement => 0, (0.000) 8 slots
+       --  N_Generic_Package_Renaming_Declaration => 0, (0.000) 8 slots
+       --  N_Generic_Function_Renaming_Declaration => 0, (0.000) 8 slots
+       --  N_Formal_Decimal_Fixed_Point_Definition => 0, (0.000) 4 slots
+       --  N_Formal_Abstract_Subprogram_Declaration => 0, (0.000) 6 slots
+       --  N_Entry_Index_Specification => 0, (0.000) 7 slots
+       --  N_Entry_Call_Alternative => 0, (0.000) 6 slots
+       --  N_Digits_Constraint => 0, (0.000) 6 slots
+       --  N_Delta_Constraint => 0, (0.000) 6 slots
+       --  N_Delta_Aggregate => 0, (0.000) 8 slots
+       --  N_Delay_Until_Statement => 0, (0.000) 7 slots
+       --  N_Delay_Alternative => 0, (0.000) 7 slots
+       --  N_Decimal_Fixed_Point_Definition => 0, (0.000) 6 slots
+       --  N_Conditional_Entry_Call => 0, (0.000) 5 slots
+       --  N_Code_Statement => 0, (0.000) 7 slots
+       --  N_At_Clause => 0, (0.000) 9 slots
+       --  N_Asynchronous_Select => 0, (0.000) 5 slots
+       --  N_Accept_Statement => 0, (0.000) 8 slots
+       --  N_Accept_Alternative => 0, (0.000) 8 slots
+       --  N_Abort_Statement => 0, (0.000) 4 slots
+       --  N_Abortable_Part => 0, (0.000) 5 slots
+       --  E_Task_Body => 0, (0.000) 39 slots
+       --  E_Exception_Type => 0, (0.000) 45 slots
+       --  E_Entry_Index_Parameter => 0, (0.000) 19 slots
+       --  E_Entry_Family => 0, (0.000) 42 slots
+       --  E_Decimal_Fixed_Point_Type => 0, (0.000) 52 slots
+       --  E_Decimal_Fixed_Point_Subtype => 0, (0.000) 52 slots
+       --  E_Anonymous_Access_Protected_Subprogram_Type => 0, (0.000) 45 slots
+      ); -- Type_Frequency
+ 
+ end Gen_IL.Internals;
diff -Nrcpad gcc-11.3.0/gcc/ada/gen_il-main.adb gcc-12.1.0/gcc/ada/gen_il-main.adb
*** gcc-11.3.0/gcc/ada/gen_il-main.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gen_il-main.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,34 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                           G E N _ I L . M A I N                          --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 2020-2022, Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Gen_IL.Gen.Gen_Nodes;
+ with Gen_IL.Gen.Gen_Entities;
+ 
+ procedure Gen_IL.Main is
+ begin
+    Gen_IL.Gen.Gen_Nodes;
+    Gen_IL.Gen.Gen_Entities;
+    Gen_IL.Gen.Compile;
+ end Gen_IL.Main;
diff -Nrcpad gcc-11.3.0/gcc/ada/gen_il-types.ads gcc-12.1.0/gcc/ada/gen_il-types.ads
*** gcc-11.3.0/gcc/ada/gen_il-types.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gen_il-types.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,594 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                          G E N _ I L . T Y P E S                         --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2020-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package Gen_IL.Types is
+ 
+    --  Enumeration of all the types that are "of interest". We have an
+    --  enumeration literal here for every node kind, every entity kind,
+    --  and every type that can be the type of a field.
+ 
+    --  The following is "optional type enumeration" -- i.e. it is Type_Enum
+    --  (declared below) plus the special null value No_Type.  See the spec of
+    --  Gen_IL.Gen for how to modify this. (Of course, in Ada we have to define
+    --  this backwards from the above conceptual description.)
+ 
+    --  Note that there are various subranges of this type declared below,
+    --  which might need to be kept in sync when modifying this.
+ 
+    --  The "Between_..." literals below are simply for making the subranges.
+    --  When adding literals to this enumeration type, be sure to put them in
+    --  the right place so they end up in the appropriate subranges
+    --  (Abstract_Node, Abstract_Entity, Concrete_Node, Concrete_Entity).
+ 
+    type Opt_Type_Enum is
+      (No_Type,
+ 
+       Flag,
+       --  We use Flag for Boolean, so we don't conflict with
+       --  Standard.Boolean.
+ 
+       Node_Id,
+       List_Id,
+       Elist_Id,
+       Name_Id,
+       String_Id,
+       Uint,
+       Valid_Uint,
+       Unat,
+       Upos,
+       Nonzero_Uint,
+       Ureal,
+ 
+       Node_Kind_Type, -- Type of result of Nkind function, i.e. Node_Kind
+       Entity_Kind_Type, -- Type of result of Ekind function, i.e. Entity_Kind
+       Source_Ptr,
+       Small_Paren_Count_Type,
+       Union_Id,
+       Convention_Id,
+ 
+       Component_Alignment_Kind,
+       Mechanism_Type,
+ 
+       Between_Special_And_Abstract_Node_Types,
+ 
+       --  Abstract node types:
+ 
+       Node_Kind, -- root of node type hierarchy
+       N_Access_To_Subprogram_Definition,
+       N_Alternative,
+       N_Array_Type_Definition,
+       N_Binary_Op,
+       N_Body_Stub,
+       N_Declaration,
+       N_Delay_Statement,
+       N_Direct_Name,
+       N_Entity,
+       N_Entity_Name,
+       N_Formal_Subprogram_Declaration,
+       N_Generic_Declaration,
+       N_Generic_Instantiation,
+       N_Generic_Renaming_Declaration,
+       N_Has_Bounds,
+       N_Has_Chars,
+       N_Has_Condition,
+       N_Has_Entity,
+       N_Has_Etype,
+       N_Is_Case_Choice,
+       N_Is_Decl,
+       N_Is_Exception_Choice,
+       N_Is_Index,
+       N_Is_Range,
+       N_Multiplying_Operator,
+       N_Later_Decl_Item,
+       N_Membership_Test,
+       N_Numeric_Or_String_Literal,
+       N_Op,
+       N_Op_Boolean,
+       N_Op_Compare,
+       N_Op_Shift,
+       N_Proper_Body,
+       N_Push_xxx_Label,
+       N_Pop_xxx_Label,
+       N_Push_Pop_xxx_Label,
+       N_Raise_xxx_Error,
+       N_Renaming_Declaration,
+       N_Representation_Clause,
+       N_Short_Circuit,
+       N_SCIL_Node,
+       N_Statement_Other_Than_Procedure_Call,
+       N_Subprogram_Call,
+       N_Subprogram_Instantiation,
+       N_Subexpr,
+       N_Subprogram_Specification,
+       N_Unary_Op,
+       N_Unit_Body,
+ 
+       --  End of abstract node types.
+ 
+       Between_Abstract_Node_And_Abstract_Entity_Types,
+ 
+       --  Abstract entity types:
+ 
+       Entity_Kind, -- root of entity type hierarchy
+       Access_Kind,
+       Access_Subprogram_Kind,
+       Access_Protected_Kind,
+       Aggregate_Kind,
+       Allocatable_Kind,
+       Anonymous_Access_Kind,
+       Array_Kind,
+       Assignable_Kind,
+       Class_Wide_Kind,
+       Composite_Kind,
+       Concurrent_Kind,
+       Concurrent_Body_Kind,
+       Constant_Or_Variable_Kind,
+       Decimal_Fixed_Point_Kind,
+       Digits_Kind,
+       Discrete_Kind,
+       Discrete_Or_Fixed_Point_Kind,
+       Elementary_Kind,
+       Enumeration_Kind,
+       Entry_Kind,
+       Evaluable_Kind,
+       Exception_Or_Object_Kind,
+       Fixed_Point_Kind,
+       Float_Kind,
+       Formal_Kind,
+       Formal_Object_Kind,
+       Generic_Subprogram_Kind,
+       Generic_Unit_Kind,
+       Global_Name_Kind,
+       Incomplete_Kind,
+       Incomplete_Or_Private_Kind,
+       Integer_Kind,
+       Modular_Integer_Kind,
+       Named_Access_Kind,
+       Named_Kind,
+       Numeric_Kind,
+       Object_Kind,
+       Ordinary_Fixed_Point_Kind,
+       Overloadable_Kind,
+       Private_Kind,
+       Protected_Kind,
+       Real_Kind,
+       Record_Kind,
+       Record_Field_Kind,
+       Scalar_Kind,
+       Signed_Integer_Kind,
+       Subprogram_Type_Or_Kind,
+       Subprogram_Kind,
+       Task_Kind,
+       Type_Kind,
+       Void_Or_Type_Kind,
+ 
+       --  End of abstract entity types.
+ 
+       Between_Abstract_Entity_And_Concrete_Node_Types,
+ 
+       --  Concrete node types:
+ 
+       N_Unused_At_Start,
+       N_At_Clause,
+       N_Component_Clause,
+       N_Enumeration_Representation_Clause,
+       N_Mod_Clause,
+       N_Record_Representation_Clause,
+       N_Attribute_Definition_Clause,
+       N_Empty,
+       N_Pragma_Argument_Association,
+       N_Error,
+       N_Defining_Character_Literal,
+       N_Defining_Identifier,
+       N_Defining_Operator_Symbol,
+       N_Expanded_Name,
+       N_Identifier,
+       N_Operator_Symbol,
+       N_Character_Literal,
+       N_Op_Add,
+       N_Op_Concat,
+       N_Op_Expon,
+       N_Op_Subtract,
+       N_Op_Divide,
+       N_Op_Mod,
+       N_Op_Multiply,
+       N_Op_Rem,
+       N_Op_And,
+       N_Op_Eq,
+       N_Op_Ge,
+       N_Op_Gt,
+       N_Op_Le,
+       N_Op_Lt,
+       N_Op_Ne,
+       N_Op_Or,
+       N_Op_Xor,
+       N_Op_Rotate_Left,
+       N_Op_Rotate_Right,
+       N_Op_Shift_Left,
+       N_Op_Shift_Right,
+       N_Op_Shift_Right_Arithmetic,
+       N_Op_Abs,
+       N_Op_Minus,
+       N_Op_Not,
+       N_Op_Plus,
+       N_Attribute_Reference,
+       N_In,
+       N_Not_In,
+       N_And_Then,
+       N_Or_Else,
+       N_Function_Call,
+       N_Procedure_Call_Statement,
+       N_Raise_Constraint_Error,
+       N_Raise_Program_Error,
+       N_Raise_Storage_Error,
+       N_Integer_Literal,
+       N_Real_Literal,
+       N_String_Literal,
+       N_Explicit_Dereference,
+       N_Expression_With_Actions,
+       N_If_Expression,
+       N_Indexed_Component,
+       N_Null,
+       N_Qualified_Expression,
+       N_Quantified_Expression,
+       N_Aggregate,
+       N_Allocator,
+       N_Case_Expression,
+       N_Delta_Aggregate,
+       N_Extension_Aggregate,
+       N_Raise_Expression,
+       N_Range,
+       N_Reference,
+       N_Selected_Component,
+       N_Slice,
+       N_Target_Name,
+       N_Type_Conversion,
+       N_Unchecked_Expression,
+       N_Unchecked_Type_Conversion,
+       N_Subtype_Indication,
+       N_Component_Declaration,
+       N_Entry_Declaration,
+       N_Expression_Function,
+       N_Formal_Object_Declaration,
+       N_Formal_Type_Declaration,
+       N_Full_Type_Declaration,
+       N_Incomplete_Type_Declaration,
+       N_Iterator_Specification,
+       N_Loop_Parameter_Specification,
+       N_Object_Declaration,
+       N_Protected_Type_Declaration,
+       N_Private_Extension_Declaration,
+       N_Private_Type_Declaration,
+       N_Subtype_Declaration,
+       N_Function_Specification,
+       N_Procedure_Specification,
+       N_Access_Function_Definition,
+       N_Access_Procedure_Definition,
+       N_Task_Type_Declaration,
+       N_Package_Body_Stub,
+       N_Protected_Body_Stub,
+       N_Subprogram_Body_Stub,
+       N_Task_Body_Stub,
+       N_Function_Instantiation,
+       N_Procedure_Instantiation,
+       N_Package_Instantiation,
+       N_Package_Body,
+       N_Subprogram_Body,
+       N_Protected_Body,
+       N_Task_Body,
+       N_Implicit_Label_Declaration,
+       N_Package_Declaration,
+       N_Single_Task_Declaration,
+       N_Subprogram_Declaration,
+       N_Use_Package_Clause,
+       N_Generic_Package_Declaration,
+       N_Generic_Subprogram_Declaration,
+       N_Constrained_Array_Definition,
+       N_Unconstrained_Array_Definition,
+       N_Exception_Renaming_Declaration,
+       N_Object_Renaming_Declaration,
+       N_Package_Renaming_Declaration,
+       N_Subprogram_Renaming_Declaration,
+       N_Generic_Function_Renaming_Declaration,
+       N_Generic_Package_Renaming_Declaration,
+       N_Generic_Procedure_Renaming_Declaration,
+       N_Abort_Statement,
+       N_Accept_Statement,
+       N_Assignment_Statement,
+       N_Asynchronous_Select,
+       N_Block_Statement,
+       N_Case_Statement,
+       N_Code_Statement,
+       N_Compound_Statement,
+       N_Conditional_Entry_Call,
+       N_Delay_Relative_Statement,
+       N_Delay_Until_Statement,
+       N_Entry_Call_Statement,
+       N_Free_Statement,
+       N_Goto_Statement,
+       N_Goto_When_Statement,
+       N_Loop_Statement,
+       N_Null_Statement,
+       N_Raise_Statement,
+       N_Raise_When_Statement,
+       N_Requeue_Statement,
+       N_Simple_Return_Statement,
+       N_Extended_Return_Statement,
+       N_Return_When_Statement,
+       N_Selective_Accept,
+       N_Timed_Entry_Call,
+       N_Exit_Statement,
+       N_If_Statement,
+       N_Accept_Alternative,
+       N_Delay_Alternative,
+       N_Elsif_Part,
+       N_Entry_Body_Formal_Part,
+       N_Iteration_Scheme,
+       N_Terminate_Alternative,
+       N_Formal_Abstract_Subprogram_Declaration,
+       N_Formal_Concrete_Subprogram_Declaration,
+       N_Push_Constraint_Error_Label,
+       N_Push_Program_Error_Label,
+       N_Push_Storage_Error_Label,
+       N_Pop_Constraint_Error_Label,
+       N_Pop_Program_Error_Label,
+       N_Pop_Storage_Error_Label,
+       N_SCIL_Dispatch_Table_Tag_Init,
+       N_SCIL_Dispatching_Call,
+       N_SCIL_Membership_Test,
+       N_Abortable_Part,
+       N_Abstract_Subprogram_Declaration,
+       N_Access_Definition,
+       N_Access_To_Object_Definition,
+       N_Aspect_Specification,
+       N_Call_Marker,
+       N_Case_Expression_Alternative,
+       N_Case_Statement_Alternative,
+       N_Compilation_Unit,
+       N_Compilation_Unit_Aux,
+       N_Component_Association,
+       N_Component_Definition,
+       N_Component_List,
+       N_Contract,
+       N_Derived_Type_Definition,
+       N_Decimal_Fixed_Point_Definition,
+       N_Defining_Program_Unit_Name,
+       N_Delta_Constraint,
+       N_Designator,
+       N_Digits_Constraint,
+       N_Discriminant_Association,
+       N_Discriminant_Specification,
+       N_Enumeration_Type_Definition,
+       N_Entry_Body,
+       N_Entry_Call_Alternative,
+       N_Entry_Index_Specification,
+       N_Exception_Declaration,
+       N_Exception_Handler,
+       N_Floating_Point_Definition,
+       N_Formal_Decimal_Fixed_Point_Definition,
+       N_Formal_Derived_Type_Definition,
+       N_Formal_Discrete_Type_Definition,
+       N_Formal_Floating_Point_Definition,
+       N_Formal_Modular_Type_Definition,
+       N_Formal_Ordinary_Fixed_Point_Definition,
+       N_Formal_Package_Declaration,
+       N_Formal_Private_Type_Definition,
+       N_Formal_Incomplete_Type_Definition,
+       N_Formal_Signed_Integer_Type_Definition,
+       N_Freeze_Entity,
+       N_Freeze_Generic_Entity,
+       N_Generic_Association,
+       N_Handled_Sequence_Of_Statements,
+       N_Index_Or_Discriminant_Constraint,
+       N_Iterated_Component_Association,
+       N_Iterated_Element_Association,
+       N_Itype_Reference,
+       N_Label,
+       N_Modular_Type_Definition,
+       N_Number_Declaration,
+       N_Ordinary_Fixed_Point_Definition,
+       N_Others_Choice,
+       N_Package_Specification,
+       N_Parameter_Association,
+       N_Parameter_Specification,
+       N_Pragma,
+       N_Protected_Definition,
+       N_Range_Constraint,
+       N_Real_Range_Specification,
+       N_Record_Definition,
+       N_Signed_Integer_Type_Definition,
+       N_Single_Protected_Declaration,
+       N_Subunit,
+       N_Task_Definition,
+       N_Triggering_Alternative,
+       N_Use_Type_Clause,
+       N_Validate_Unchecked_Conversion,
+       N_Variable_Reference_Marker,
+       N_Variant,
+       N_Variant_Part,
+       N_With_Clause,
+       N_Unused_At_End,
+ 
+       --  End of concrete node types.
+ 
+       Between_Concrete_Node_And_Concrete_Entity_Types,
+ 
+       --  Concrete entity types:
+ 
+       E_Void,
+       E_Component,
+       E_Constant,
+       E_Discriminant,
+       E_Loop_Parameter,
+       E_Variable,
+       E_Out_Parameter,
+       E_In_Out_Parameter,
+       E_In_Parameter,
+       E_Generic_In_Out_Parameter,
+       E_Generic_In_Parameter,
+       E_Named_Integer,
+       E_Named_Real,
+       E_Enumeration_Type,
+       E_Enumeration_Subtype,
+       E_Signed_Integer_Type,
+       E_Signed_Integer_Subtype,
+       E_Modular_Integer_Type,
+       E_Modular_Integer_Subtype,
+       E_Ordinary_Fixed_Point_Type,
+       E_Ordinary_Fixed_Point_Subtype,
+       E_Decimal_Fixed_Point_Type,
+       E_Decimal_Fixed_Point_Subtype,
+       E_Floating_Point_Type,
+       E_Floating_Point_Subtype,
+       E_Access_Type,
+       E_Access_Subtype,
+       E_Access_Attribute_Type,
+       E_Allocator_Type,
+       E_General_Access_Type,
+       E_Access_Subprogram_Type,
+       E_Access_Protected_Subprogram_Type,
+       E_Anonymous_Access_Protected_Subprogram_Type,
+       E_Anonymous_Access_Subprogram_Type,
+       E_Anonymous_Access_Type,
+       E_Array_Type,
+       E_Array_Subtype,
+       E_String_Literal_Subtype,
+       E_Class_Wide_Type,
+       E_Class_Wide_Subtype,
+       E_Record_Type,
+       E_Record_Subtype,
+       E_Record_Type_With_Private,
+       E_Record_Subtype_With_Private,
+       E_Private_Type,
+       E_Private_Subtype,
+       E_Limited_Private_Type,
+       E_Limited_Private_Subtype,
+       E_Incomplete_Type,
+       E_Incomplete_Subtype,
+       E_Task_Type,
+       E_Task_Subtype,
+       E_Protected_Type,
+       E_Protected_Subtype,
+       E_Exception_Type,
+       E_Subprogram_Type,
+       E_Enumeration_Literal,
+       E_Function,
+       E_Operator,
+       E_Procedure,
+       E_Abstract_State,
+       E_Entry,
+       E_Entry_Family,
+       E_Block,
+       E_Entry_Index_Parameter,
+       E_Exception,
+       E_Generic_Function,
+       E_Generic_Procedure,
+       E_Generic_Package,
+       E_Label,
+       E_Loop,
+       E_Return_Statement,
+       E_Package,
+       E_Package_Body,
+       E_Protected_Body,
+       E_Task_Body,
+       E_Subprogram_Body
+ 
+       --  End of concrete entity types.
+ 
+      ); -- Type_Enum
+ 
+    subtype Type_Enum is Opt_Type_Enum
+      range Opt_Type_Enum'Succ (No_Type) .. Opt_Type_Enum'Last;
+    --  Enumeration of types -- Opt_Type_Enum without the special null value
+    --  No_Type.
+ 
+    subtype Node_Or_Entity_Type is
+      Type_Enum range
+        Type_Enum'Succ (Between_Special_And_Abstract_Node_Types) ..
+          Type_Enum'Last;
+ 
+    subtype Abstract_Type is
+      Type_Enum range
+        Type_Enum'Succ (Between_Special_And_Abstract_Node_Types) ..
+          Type_Enum'Pred (Between_Abstract_Entity_And_Concrete_Node_Types);
+    subtype Abstract_Node is
+      Abstract_Type range
+        Type_Enum'Succ (Between_Special_And_Abstract_Node_Types) ..
+          Type_Enum'Pred (Between_Abstract_Node_And_Abstract_Entity_Types);
+    subtype Abstract_Entity is
+      Abstract_Type range
+        Type_Enum'Succ (Between_Abstract_Node_And_Abstract_Entity_Types) ..
+          Type_Enum'Pred (Between_Abstract_Entity_And_Concrete_Node_Types);
+ 
+    subtype Concrete_Type is
+      Type_Enum range
+        Type_Enum'Succ (Between_Abstract_Entity_And_Concrete_Node_Types) ..
+          Type_Enum'Last;
+    subtype Concrete_Node is
+      Concrete_Type range
+        Type_Enum'Succ (Between_Abstract_Entity_And_Concrete_Node_Types) ..
+          Type_Enum'Pred (Between_Concrete_Node_And_Concrete_Entity_Types);
+    subtype Concrete_Entity is
+      Concrete_Type range
+        Type_Enum'Succ (Between_Concrete_Node_And_Concrete_Entity_Types) ..
+          Type_Enum'Last;
+ 
+    subtype Root_Type is Abstract_Type with
+         Predicate => Root_Type in Node_Kind | Entity_Kind;
+ 
+    subtype Node_Type is Node_Or_Entity_Type with
+         Predicate => Node_Type in Abstract_Node | Concrete_Node;
+    subtype Entity_Type is Node_Or_Entity_Type with
+         Predicate => Entity_Type in Abstract_Entity | Concrete_Entity;
+ 
+    subtype Special_Type is Type_Enum range
+      Flag .. Type_Enum'Pred (Between_Special_And_Abstract_Node_Types);
+ 
+    subtype Traversed_Field_Type is Type_Enum with Predicate =>
+      Traversed_Field_Type in Node_Id | List_Id | Node_Type;
+    --  These are the types of fields traversed by Traverse_Func
+ 
+    subtype Entity_Node is Node_Type with
+      Predicate => Entity_Node in
+         N_Defining_Character_Literal
+       | N_Defining_Identifier
+       | N_Defining_Operator_Symbol;
+ 
+    subtype Opt_Abstract_Type is Opt_Type_Enum with
+      Predicate => Opt_Abstract_Type in No_Type | Abstract_Type;
+ 
+    subtype Type_Boundaries is Type_Enum with
+      Predicate => Type_Boundaries in
+        Between_Abstract_Node_And_Abstract_Entity_Types |
+        Between_Abstract_Entity_And_Concrete_Node_Types |
+        Between_Concrete_Node_And_Concrete_Entity_Types;
+    --  These are not used, other than to separate the various subranges.
+ 
+    subtype Uint_Subtype is Type_Enum with
+      Predicate => Uint_Subtype in Valid_Uint | Unat | Upos | Nonzero_Uint;
+    --  These are the subtypes of Uint that have predicates restricting their
+    --  values.
+ 
+ end Gen_IL.Types;
diff -Nrcpad gcc-11.3.0/gcc/ada/gen_il.adb gcc-12.1.0/gcc/ada/gen_il.adb
*** gcc-11.3.0/gcc/ada/gen_il.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gen_il.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,148 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                                G E N _ I L                               --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 2020-2022, Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Streams.Stream_IO; use Ada.Streams.Stream_IO;
+ 
+ package body Gen_IL is
+ 
+    procedure Put (F : File_Type; S : String);
+    --  The output primitive
+ 
+    -----------
+    -- Image --
+    -----------
+ 
+    function Image (X : Root_Int) return String is
+       Result : constant String := X'Img;
+    begin
+       if Result (1) = ' ' then
+          return Result (2 .. Result'Last);
+       else
+          return Result;
+       end if;
+    end Image;
+ 
+    ----------------
+    -- Capitalize --
+    ----------------
+ 
+    procedure Capitalize (S : in out String) is
+       Cap : Boolean := True;
+    begin
+       for X of S loop
+          declare
+             Old : constant Character := X;
+          begin
+             if Cap then
+                X := To_Upper (X);
+             else
+                X := To_Lower (X);
+             end if;
+ 
+             Cap := not (Is_Letter (Old) or else Is_Digit (Old));
+          end;
+       end loop;
+    end Capitalize;
+ 
+    ----------------
+    -- Capitalize --
+    ----------------
+ 
+    function Capitalize (S : String) return String is
+    begin
+       return Result : String (S'Range) := S do
+          Capitalize (Result);
+       end return;
+    end Capitalize;
+ 
+    -----------------
+    -- Create_File --
+    -----------------
+ 
+    procedure Create_File (Buffer : in out Sink; Name : String) is
+    begin
+       Create (Buffer.File, Out_File, Name);
+       Buffer.Indent := 0;
+       Buffer.New_Line := True;
+    end Create_File;
+ 
+    ---------------------
+    -- Increase_Indent --
+    ---------------------
+ 
+    procedure Increase_Indent (Buffer : in out Sink; Amount : Natural) is
+    begin
+       Buffer.Indent := Buffer.Indent + Amount;
+    end Increase_Indent;
+ 
+    ---------------------
+    -- Decrease_Indent --
+    ---------------------
+ 
+    procedure Decrease_Indent (Buffer : in out Sink; Amount : Natural) is
+    begin
+       Buffer.Indent := Buffer.Indent - Amount;
+    end Decrease_Indent;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put (F : File_Type; S : String) is
+    begin
+       String'Write (Stream (F), S);
+    end Put;
+ 
+    procedure Put (Buffer : in out Sink; Item : String) is
+    begin
+       --  If the first character is LF, indent after it only
+ 
+       if Item (Item'First) = ASCII.LF then
+          Put (Buffer.File, LF);
+          Buffer.New_Line := True;
+ 
+          if Item'Length > 1 then
+             Put (Buffer, Item (Item'First + 1 .. Item'Last));
+          end if;
+ 
+          return;
+       end if;
+ 
+       --  If this is a new line, indent
+ 
+       if Buffer.New_Line and then Buffer.Indent > 0 then
+          declare
+             S : constant String (1 .. Buffer.Indent) := (others => ' ');
+          begin
+             Put (Buffer.File, S);
+          end;
+       end if;
+ 
+       Put (Buffer.File, Item);
+ 
+       Buffer.New_Line := Item (Item'Last) = ASCII.LF;
+    end Put;
+ 
+ end Gen_IL;
diff -Nrcpad gcc-11.3.0/gcc/ada/gen_il.ads gcc-12.1.0/gcc/ada/gen_il.ads
*** gcc-11.3.0/gcc/ada/gen_il.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/gen_il.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,96 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                                G E N _ I L                               --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 2020-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ pragma Warnings (Off); -- with clauses for children
+ with Ada.Characters.Handling; use Ada.Characters.Handling;
+ with Ada.Streams.Stream_IO;
+ pragma Warnings (On);
+ 
+ package Gen_IL is -- generate intermediate language
+ 
+    --  This package and children generates the main intermediate language used
+    --  by the GNAT compiler, which is a decorated syntax tree.
+ 
+    --  The generated Ada packages are:
+    --
+    --    Seinfo
+    --    Sinfo.Nodes
+    --    Einfo.Entities
+    --    Nmake
+    --    Seinfo_Tables
+    --
+    --  We also generate C code:
+    --
+    --    einfo.h
+    --    sinfo.h
+    --    snames.h
+    --
+    --  It is necessary to look at this generated code in order to understand
+    --  the compiler. In addition, it is necessary to look at comments in the
+    --  spec and body of Gen_IL.
+    --
+    --  Note that the Gen_IL "compiler" and the GNAT Ada compiler are separate
+    --  programs, with no dependencies between them in either direction. That
+    --  is, Gen_IL does not say "with" of GNAT units, and GNAT does not say
+    --  "with Gen_IL". There are many things declared in Gen_IL and GNAT with
+    --  the same name; these are typically related, but they are not the same
+    --  thing.
+ 
+    --  Misc declarations used throughout:
+ 
+    type Root_Int is new Integer;
+    function Image (X : Root_Int) return String;
+    --  Without the extra blank. You can derive from Root_Int or the subtypes
+    --  below, and inherit a convenient Image function that leaves out that
+    --  blank.
+ 
+    subtype Root_Nat is Root_Int range 0 .. Root_Int'Last;
+    subtype Root_Pos is Root_Int range 1 .. Root_Int'Last;
+ 
+    function Capitalize (S : String) return String;
+    procedure Capitalize (S : in out String);
+    --  Turns an identifier into Mixed_Case
+ 
+    --  The following declares a minimal implementation of formatted output
+    --  that is piggybacked on Ada.Streams.Stream_IO for bootstrap reasons.
+    --  It uses LF as universal line terminator to make it host independent.
+ 
+    type Sink is record
+       File     : Ada.Streams.Stream_IO.File_Type;
+       Indent   : Natural;
+       New_Line : Boolean;
+    end record;
+ 
+    procedure Create_File (Buffer : in out Sink; Name : String);
+ 
+    procedure Increase_Indent (Buffer : in out Sink; Amount : Natural);
+ 
+    procedure Decrease_Indent (Buffer : in out Sink; Amount : Natural);
+ 
+    procedure Put (Buffer : in out Sink; Item : String);
+ 
+    LF : constant String := "" & ASCII.LF;
+ 
+ end Gen_IL;
diff -Nrcpad gcc-11.3.0/gcc/ada/get_scos.adb gcc-12.1.0/gcc/ada/get_scos.adb
*** gcc-11.3.0/gcc/ada/get_scos.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/get_scos.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/get_scos.ads gcc-12.1.0/gcc/ada/get_scos.ads
*** gcc-11.3.0/gcc/ada/get_scos.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/get_scos.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/get_targ.adb gcc-12.1.0/gcc/ada/get_targ.adb
*** gcc-11.3.0/gcc/ada/get_targ.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/get_targ.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Get_Targ is
*** 284,290 ****
  
     function Get_Max_Unaligned_Field return Pos is
     begin
!       return 64;  -- Can be different on some targets (e.g., AAMP)
     end Get_Max_Unaligned_Field;
  
     -----------------------------
--- 284,290 ----
  
     function Get_Max_Unaligned_Field return Pos is
     begin
!       return 64;  -- Can be different on some targets
     end Get_Max_Unaligned_Field;
  
     -----------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/get_targ.ads gcc-12.1.0/gcc/ada/get_targ.ads
*** gcc-11.3.0/gcc/ada/get_targ.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/get_targ.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 37,43 ****
  --  the Wide_Character_Type uses twice the size of a C char, instead of the
  --  size of wchar_t.
  
- with Einfo; use Einfo;
  with Types; use Types;
  
  package Get_Targ is
--- 37,42 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/ghost.adb gcc-12.1.0/gcc/ada/ghost.adb
*** gcc-11.3.0/gcc/ada/ghost.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/ghost.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2014-2022, 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- --
***************
*** 24,46 ****
  ------------------------------------------------------------------------------
  
  with Alloc;
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Disp; use Sem_Disp;
! with Sem_Eval; use Sem_Eval;
! with Sem_Prag; use Sem_Prag;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
  with Table;
  
  package body Ghost is
--- 24,50 ----
  ------------------------------------------------------------------------------
  
  with Alloc;
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
  with Table;
  
  package body Ghost is
*************** package body Ghost is
*** 159,164 ****
--- 163,171 ----
        --  Determine whether node Context denotes a Ghost-friendly context where
        --  a Ghost entity can safely reside (SPARK RM 6.9(10)).
  
+       function In_Aspect_Or_Pragma_Predicate (N : Node_Id) return Boolean;
+       --  Return True iff N is enclosed in an aspect or pragma Predicate
+ 
        -------------------------
        -- Is_OK_Ghost_Context --
        -------------------------
*************** package body Ghost is
*** 523,529 ****
  
           if Is_Checked_Ghost_Entity (Id)
             and then Policy = Name_Ignore
!            and then May_Be_Lvalue (Ref)
           then
              Error_Msg_Sloc := Sloc (Ref);
  
--- 530,536 ----
  
           if Is_Checked_Ghost_Entity (Id)
             and then Policy = Name_Ignore
!            and then Known_To_Be_Assigned (Ref)
           then
              Error_Msg_Sloc := Sloc (Ref);
  
*************** package body Ghost is
*** 540,548 ****
--- 547,598 ----
           end if;
        end Check_Ghost_Policy;
  
+       -----------------------------------
+       -- In_Aspect_Or_Pragma_Predicate --
+       -----------------------------------
+ 
+       function In_Aspect_Or_Pragma_Predicate (N : Node_Id) return Boolean is
+          Par : Node_Id := N;
+       begin
+          while Present (Par) loop
+             if Nkind (Par) = N_Pragma
+               and then Get_Pragma_Id (Par) = Pragma_Predicate
+             then
+                return True;
+ 
+             elsif Nkind (Par) = N_Aspect_Specification
+               and then Same_Aspect (Get_Aspect_Id (Par), Aspect_Predicate)
+             then
+                return True;
+ 
+             --  Stop the search when it's clear it cannot be inside an aspect
+             --  or pragma.
+ 
+             elsif Is_Declaration (Par)
+               or else Is_Statement (Par)
+               or else Is_Body (Par)
+             then
+                return False;
+             end if;
+ 
+             Par := Parent (Par);
+          end loop;
+ 
+          return False;
+       end In_Aspect_Or_Pragma_Predicate;
+ 
     --  Start of processing for Check_Ghost_Context
  
     begin
+       --  Class-wide pre/postconditions of ignored pragmas are preanalyzed
+       --  to report errors on wrong conditions; however, ignored pragmas may
+       --  also have references to ghost entities and we must disable checking
+       --  their context to avoid reporting spurious errors.
+ 
+       if Inside_Class_Condition_Preanalysis then
+          return;
+       end if;
+ 
        --  Once it has been established that the reference to the Ghost entity
        --  is within a suitable context, ensure that the policy at the point of
        --  declaration and at the point of use match.
*************** package body Ghost is
*** 555,560 ****
--- 605,623 ----
  
        else
           Error_Msg_N ("ghost entity cannot appear in this context", Ghost_Ref);
+ 
+          --  When the Ghost entity appears in a pragma Predicate, explain the
+          --  reason for this being illegal, and suggest a fix instead.
+ 
+          if In_Aspect_Or_Pragma_Predicate (Ghost_Ref) then
+             Error_Msg_N
+               ("\as predicates are checked in membership tests, "
+                & "the type and its predicate must be both ghost",
+                Ghost_Ref);
+             Error_Msg_N
+               ("\either make the type ghost "
+                & "or use a type invariant on a private type", Ghost_Ref);
+          end if;
        end if;
     end Check_Ghost_Context;
  
*************** package body Ghost is
*** 1191,1201 ****
        --  processing them in that mode can lead to spurious errors.
  
        if Expander_Active then
           if not Analyzed (Orig_Lhs)
!            and then Nkind (Orig_Lhs) = N_Indexed_Component
!            and then Nkind (Prefix (Orig_Lhs)) = N_Selected_Component
!            and then Nkind (Prefix (Prefix (Orig_Lhs))) =
!            N_Indexed_Component
           then
              Analyze (Orig_Lhs);
           end if;
--- 1254,1274 ----
        --  processing them in that mode can lead to spurious errors.
  
        if Expander_Active then
+          --  Cases where full analysis is needed, involving array indexing
+          --  which would otherwise be missing array-bounds checks:
+ 
           if not Analyzed (Orig_Lhs)
!            and then
!              ((Nkind (Orig_Lhs) = N_Indexed_Component
!                 and then Nkind (Prefix (Orig_Lhs)) = N_Selected_Component
!                 and then Nkind (Prefix (Prefix (Orig_Lhs))) =
!                            N_Indexed_Component)
!               or else
!              (Nkind (Orig_Lhs) = N_Selected_Component
!               and then Nkind (Prefix (Orig_Lhs)) = N_Indexed_Component
!               and then Nkind (Prefix (Prefix (Orig_Lhs))) =
!                          N_Selected_Component
!               and then Nkind (Parent (N)) /= N_Loop_Statement))
           then
              Analyze (Orig_Lhs);
           end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/ghost.ads gcc-12.1.0/gcc/ada/ghost.ads
*** gcc-11.3.0/gcc/ada/ghost.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/ghost.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2014-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnat-style.texi gcc-12.1.0/gcc/ada/gnat-style.texi
*** gcc-11.3.0/gcc/ada/gnat-style.texi	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnat-style.texi	Fri May  6 07:30:56 2022
***************
*** 1,94 ****
  \input texinfo   @c -*-texinfo-*-
  @c %**start of header
- 
- @c oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
- @c                                                                            o
- @c                           GNAT DOCUMENTATION                               o
- @c                                                                            o
- @c                     G N A T   C O D I N G   S T Y L E                      o
- @c                                                                            o
- @c                     Copyright (C) 1992-2012, AdaCore                       o
- @c                                                                            o
- @c oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
- 
  @setfilename gnat-style.info
  
! @copying
! Copyright @copyright{} 1992-2012, AdaCore
! 
! Permission is granted to copy, distribute and/or modify this document
! under the terms of the GNU Free Documentation License, Version 1.3 or
! any later version published by the Free Software Foundation; with no
! Invariant Sections, with no Front-Cover Texts and with no Back-Cover
! Texts.  A copy of the license is included in the section entitled
! ``GNU Free Documentation License''.
! @end copying
  
! @settitle GNAT Coding Style
! @setchapternewpage odd
  
! @include gcc-common.texi
  
! @dircategory Software development
! @direntry
! * gnat-style: (gnat-style).      GNAT Coding Style
! @end direntry
  
! @macro syntax{element}
! @t{\element\}
! @end macro
! @c %**end of header
  
  @titlepage
! @titlefont{GNAT Coding Style:}
! @sp 1
! @title A Guide for GNAT Developers
! @subtitle GNAT, The GNU Ada Compiler
! @versionsubtitle
! @author Ada Core Technologies, Inc.
! @page
! @vskip 0pt plus 1filll
! 
  @insertcopying
  @end titlepage
  
! @raisesections
  
! @node    Top,       General,         , (dir)
! @comment node-name, next,    previous, up
  
  @ifnottex
! @noindent
! GNAT Coding Style@*
! A Guide for GNAT Developers
! @sp 2
! @noindent
! GNAT, The GNU Ada Compiler@*
! 
! @noindent
  @insertcopying
  @end ifnottex
  
! 
  @menu
! * General::
! * Lexical Elements::
! * Declarations and Types::
! * Expressions and Names::
! * Statements::
! * Subprograms::
! * Packages::
! * Program Structure::
! * GNU Free Documentation License::
! * Index::
  @end menu
  
! @c  -------------------------------------------------------------------------
! @node    General, Lexical Elements, Top, Top
! @section General
! @c  -------------------------------------------------------------------------
  
- @noindent
  Most of GNAT is written in Ada using a consistent style to ensure
  readability of the code.  This document has been written to help
  maintain this consistent style, while having a large group of developers
--- 1,71 ----
  \input texinfo   @c -*-texinfo-*-
  @c %**start of header
  @setfilename gnat-style.info
+ @documentencoding UTF-8
+ @ifinfo
+ @*Generated by Sphinx 4.3.1.@*
+ @end ifinfo
+ @settitle GNAT Coding Style A Guide for GNAT Developers
+ @defindex ge
+ @paragraphindent 0
+ @exampleindent 4
+ @finalout
+ @dircategory GNU Ada Tools 
+ @direntry
+ * gnat-style: (gnat-style.info). gnat-style
+ @end direntry
  
! @definfoenclose strong,`,'
! @definfoenclose emph,`,'
! @c %**end of header
  
! @copying
! @quotation
! GNAT Coding Style: A Guide for GNAT Developers , Jan 03, 2022
  
! AdaCore
  
! Copyright @copyright{} 2008-2022, Free Software Foundation
! @end quotation
  
! @end copying
  
  @titlepage
! @title GNAT Coding Style A Guide for GNAT Developers
  @insertcopying
  @end titlepage
+ @contents
  
! @c %** start of user preamble
  
! @c %** end of user preamble
  
  @ifnottex
! @node Top
! @top GNAT Coding Style A Guide for GNAT Developers
  @insertcopying
  @end ifnottex
  
! @c %**start of body
! @anchor{gnat-style doc}@anchor{0}
  @menu
! * General:: 
! * Lexical Elements:: 
! * Declarations and Types:: 
! * Expressions and Names:: 
! * Statements:: 
! * Subprograms:: 
! * Packages and Visibility Rules:: 
! * Program Structure and Compilation Issues:: 
! * Index:: 
! 
  @end menu
  
! @node General,Lexical Elements,Top,Top
! @anchor{gnat-style general}@anchor{1}@anchor{gnat-style gnat-coding-style-a-guide-for-gnat-developers}@anchor{2}
! @chapter General
! 
  
  Most of GNAT is written in Ada using a consistent style to ensure
  readability of the code.  This document has been written to help
  maintain this consistent style, while having a large group of developers
*************** work on the compiler.
*** 97,244 ****
  For the coding style in the C parts of the compiler and run time,
  see the GNU Coding Guidelines.
  
! This document is structured after the @cite{Ada Reference Manual}.
  Those familiar with that document should be able to quickly
  lookup style rules for particular constructs.
  
  
- @c  -------------------------------------------------------------------------
- @node    Lexical Elements, Declarations and Types, General, Top
- @section Lexical Elements
- @c  -------------------------------------------------------------------------
- @cindex Lexical elements
  
! @subsection Character Set and Separators
! @c  -------------------------------------------------------------------------
! @cindex Character set
! @cindex ASCII
! @cindex Separators
! @cindex End-of-line
! @cindex Line length
! @cindex Indentation
  
! @itemize @bullet
! @item
! The character set used should be plain 7-bit ASCII@.
  The only separators allowed are space and the end-of-line sequence.
  No other control character or format effector (such as @code{HT},
! @code{VT}, @code{FF})
  should be used.
  The normal end-of-line sequence is used, which may be
  @code{LF}, @code{CR/LF} or @code{CR},
  depending on the host system.  An optional @code{SUB}
! (@code{16#1A#}) may be present as the
  last character in the file on hosts using that character as file terminator.
  
! @item
  Files that are checked in or distributed should be in host format.
  
! @item
  A line should never be longer than 79 characters, not counting the line
  separator.
  
! @item
  Lines must not have trailing blanks.
  
! @item
  Indentation is 3 characters per level for @code{if} statements, loops, and
  @code{case} statements.
  For exact information on required spacing between lexical
! elements, see file @file{style.adb}.
! @cindex @file{style.adb} file
  @end itemize
  
  
- @subsection Identifiers
- @c  -------------------------------------------------------------------------
- @itemize @bullet
- @cindex Identifiers
  
! @item
  Identifiers will start with an upper case letter, and each letter following
  an underscore will be upper case.
! @cindex Casing (for identifiers)
  Short acronyms may be all upper case.
  All other letters are lower case.
  An exception is for identifiers matching a foreign language.  In particular,
! we use all lower case where appropriate for C@.
  
! @item
  Use underscores to separate words in an identifier.
- @cindex Underscores
  
! @item Try to limit your use of abbreviations in identifiers.
  It is ok to make a few abbreviations, explain what they mean, and then
! use them frequently, but don't use lots of obscure abbreviations.  An
  example is the @code{ALI} word which stands for Ada Library
  Information and is by convention always written in upper-case when
  used in entity names.
  
! @smallexample @c adanocomment
!        procedure Find_ALI_Files;
! @end smallexample
  
! @item
! Don't use the variable name @code{I}, use @code{J} instead; @code{I} is too
! easily confused with @code{1} in some fonts.  Similarly don't use the
  variable @code{O}, which is too easily mistaken for the number @code{0}.
  @end itemize
  
! @subsection Numeric Literals
! @c  -------------------------------------------------------------------------
! @cindex Numeric literals
  
! @itemize @bullet
! @item
  Numeric literals should include underscores where helpful for
  readability.
- @cindex Underscores
  
! @smallexample
!       1_000_000
!       16#8000_0000#
!       3.14159_26535_89793_23846
! @end smallexample
  @end itemize
  
! @subsection Reserved Words
! @c  -------------------------------------------------------------------------
! @cindex Reserved words
  
! @itemize @bullet
! @item
  Reserved words use all lower case.
- @cindex Casing (for reserved words)
  
! @smallexample @c adanocomment
!        return else
! @end smallexample
  
! @item
  The words @code{Access}, @code{Delta} and @code{Digits} are
! capitalized when used as @syntax{attribute_designator}.
  @end itemize
  
! @subsection Comments
! @c  -------------------------------------------------------------------------
! @cindex Comments
  
! @itemize @bullet
! @item
  A comment starts with @code{--} followed by two spaces.
! The only exception to this rule (i.e.@: one space is tolerated) is when the
  comment ends with a single space followed by @code{--}.
  It is also acceptable to have only one space between @code{--} and the start
  of the comment when the comment is at the end of a line,
  after some Ada code.
  
! @item
  Every sentence in a comment should start with an upper-case letter (including
  the first letter of the comment).
- @cindex Casing (in comments)
  
! @item
! When declarations are commented with ``hanging'' comments, i.e.@:
  comments after the declaration, there is no blank line before the
  comment, and if it is absolutely necessary to have blank lines within
  the comments, e.g. to make paragraph separations within a single comment,
--- 74,257 ----
  For the coding style in the C parts of the compiler and run time,
  see the GNU Coding Guidelines.
  
! This document is structured after the Ada Reference Manual.
  Those familiar with that document should be able to quickly
  lookup style rules for particular constructs.
  
+ @node Lexical Elements,Declarations and Types,General,Top
+ @anchor{gnat-style lexical-elements}@anchor{3}
+ @chapter Lexical Elements
  
  
! @menu
! * Character Set and Separators:: 
! * Identifiers:: 
! * Numeric Literals:: 
! * Reserved Words:: 
! * Comments:: 
  
! @end menu
! 
! @node Character Set and Separators,Identifiers,,Lexical Elements
! @anchor{gnat-style character-set-and-separators}@anchor{4}
! @section Character Set and Separators
! 
! 
! @geindex Character set
! 
! @geindex ASCII
! 
! @geindex Separators
! 
! @geindex End-of-line
! 
! @geindex Line length
! 
! @geindex Indentation
! 
! 
! @itemize *
! 
! @item 
! The character set used should be plain 7-bit ASCII.
  The only separators allowed are space and the end-of-line sequence.
  No other control character or format effector (such as @code{HT},
! @code{VT}, @code{FF} )
  should be used.
  The normal end-of-line sequence is used, which may be
  @code{LF}, @code{CR/LF} or @code{CR},
  depending on the host system.  An optional @code{SUB}
! ( @code{16#1A#} ) may be present as the
  last character in the file on hosts using that character as file terminator.
  
! @item 
  Files that are checked in or distributed should be in host format.
  
! @item 
  A line should never be longer than 79 characters, not counting the line
  separator.
  
! @item 
  Lines must not have trailing blanks.
  
! @item 
  Indentation is 3 characters per level for @code{if} statements, loops, and
  @code{case} statements.
  For exact information on required spacing between lexical
! elements, see file style.adb.
! 
! @geindex style.adb file
  @end itemize
  
+ @node Identifiers,Numeric Literals,Character Set and Separators,Lexical Elements
+ @anchor{gnat-style identifiers}@anchor{5}
+ @section Identifiers
+ 
  
  
! @itemize *
! 
! @item 
  Identifiers will start with an upper case letter, and each letter following
  an underscore will be upper case.
! 
! @geindex Casing (for identifiers)
! 
  Short acronyms may be all upper case.
  All other letters are lower case.
  An exception is for identifiers matching a foreign language.  In particular,
! we use all lower case where appropriate for C.
  
! @item 
  Use underscores to separate words in an identifier.
  
! @geindex Underscores
! 
! @item 
! Try to limit your use of abbreviations in identifiers.
  It is ok to make a few abbreviations, explain what they mean, and then
! use them frequently, but don’t use lots of obscure abbreviations.  An
  example is the @code{ALI} word which stands for Ada Library
  Information and is by convention always written in upper-case when
  used in entity names.
  
! @example
! procedure Find_ALI_Files;
! @end example
  
! @item 
! Don’t use the variable name @code{I}, use @code{J} instead; @code{I} is too
! easily confused with @code{1} in some fonts.  Similarly don’t use the
  variable @code{O}, which is too easily mistaken for the number @code{0}.
  @end itemize
  
! @node Numeric Literals,Reserved Words,Identifiers,Lexical Elements
! @anchor{gnat-style numeric-literals}@anchor{6}
! @section Numeric Literals
  
! 
! 
! @itemize *
! 
! @item 
  Numeric literals should include underscores where helpful for
  readability.
  
! @geindex Underscores
! 
! @example
! 1_000_000
! 16#8000_0000#
! 3.14159_26535_89793_23846
! @end example
  @end itemize
  
! @node Reserved Words,Comments,Numeric Literals,Lexical Elements
! @anchor{gnat-style reserved-words}@anchor{7}
! @section Reserved Words
  
! 
! 
! @itemize *
! 
! @item 
  Reserved words use all lower case.
  
! @geindex Casing (for reserved words)
  
! @example
! return else
! @end example
! 
! @item 
  The words @code{Access}, @code{Delta} and @code{Digits} are
! capitalized when used as attribute_designator.
  @end itemize
  
! @node Comments,,Reserved Words,Lexical Elements
! @anchor{gnat-style comments}@anchor{8}
! @section Comments
  
! 
! 
! @itemize *
! 
! @item 
  A comment starts with @code{--} followed by two spaces.
! The only exception to this rule (i.e. one space is tolerated) is when the
  comment ends with a single space followed by @code{--}.
  It is also acceptable to have only one space between @code{--} and the start
  of the comment when the comment is at the end of a line,
  after some Ada code.
  
! @item 
  Every sentence in a comment should start with an upper-case letter (including
  the first letter of the comment).
  
! @geindex Casing (in comments)
! 
! @item 
! When declarations are commented with ‘hanging’ comments, i.e.
  comments after the declaration, there is no blank line before the
  comment, and if it is absolutely necessary to have blank lines within
  the comments, e.g. to make paragraph separations within a single comment,
*************** these blank lines @emph{do} have a @code
*** 246,462 ****
  normal rule, which is to use entirely blank lines for separating
  comment paragraphs).  The comment starts at same level of indentation
  as code it is commenting.
- @cindex Blank lines (in comments)
- @cindex Indentation
  
! @smallexample @c adanocomment
!        z : Integer;
!        --  Integer value for storing value of z
!        --
!        --  The previous line was a blank line.
! @end smallexample
  
! @item
  Comments that are dubious or incomplete, or that comment on possibly
! wrong or incomplete code, should be preceded or followed by @code{???}@.
  
! @item
  Comments in a subprogram body must generally be surrounded by blank lines.
  An exception is a comment that follows a line containing a single keyword
! (@code{begin}, @code{else}, @code{loop}):
  
! @smallexample @c adanocomment
! @group
!        begin
!           --  Comment for the next statement
  
!           A := 5;
  
!           --  Comment for the B statement
  
!           B := 6;
!        end;
! @end group
! @end smallexample
  
! @item
  In sequences of statements, comments at the end of the lines should be
  aligned.
- @cindex Alignment (in comments)
  
! @smallexample @c adanocomment
!         My_Identifier := 5;      --  First comment
!         Other_Id := 6;           --  Second comment
! @end smallexample
  
! @item
  Short comments that fit on a single line are @emph{not} ended with a
  period.  Comments taking more than a line are punctuated in the normal
  manner.
  
! @item
  Comments should focus on @emph{why} instead of @emph{what}.
  Descriptions of what subprograms do go with the specification.
  
! @item
  Comments describing a subprogram spec should specifically mention the
  formal argument names.  General rule: write a comment that does not
  depend on the names of things.  The names are supplementary, not
  sufficient, as comments.
  
! @item
  @emph{Do not} put two spaces after periods in comments.
  @end itemize
  
! @c  -------------------------------------------------------------------------
! @node    Declarations and Types, Expressions and Names, Lexical Elements,Top
! @section Declarations and Types
! @c  -------------------------------------------------------------------------
! @cindex Declarations and Types
  
! @itemize @bullet
! @item
  In entity declarations, colons must be surrounded by spaces.  Colons
  should be aligned.
- @cindex Alignment (in declarations)
  
! @smallexample @c adanocomment
!         Entity1   : Integer;
!         My_Entity : Integer;
! @end smallexample
  
! @item
  Declarations should be grouped in a logical order.
  Related groups of declarations may be preceded by a header comment.
  
! @item
  All local subprograms in a subprogram or package body should be declared
  before the first local subprogram body.
  
! @item
  Do not declare local entities that hide global entities.
- @cindex Hiding of outer entities
  
! @item
  Do not declare multiple variables in one declaration that spans lines.
  Start a new declaration on each line, instead.
  
! @item
! The @syntax{defining_identifier}s of global declarations serve as
! comments of a sort.  So don't choose terse names, but look for names
  that give useful information instead.
  
! @item
  Local names can be shorter, because they are used only within
  one context, where comments explain their purpose.
  
! @item
  When starting an initialization or default expression on the line that follows
  the declaration line, use 2 characters for indentation.
  
! @smallexample @c adanocomment
!         Entity1 : Integer :=
!           Function_Name (Parameters, For_Call);
! @end smallexample
  
! @item
  If an initialization or default expression needs to be continued on subsequent
  lines, the continuations should be indented from the start of the expression.
  
! @smallexample @c adanocomment
!         Entity1 : Integer := Long_Function_Name
!                                (parameters for call);
! @end smallexample
! 
  @end itemize
  
  
- @c  -------------------------------------------------------------------------
- @node    Expressions and Names, Statements, Declarations and Types, Top
- @section Expressions and Names
- @c  -------------------------------------------------------------------------
- @cindex Expressions and names
  
- @itemize @bullet
  
! @item
  Every operator must be surrounded by spaces. An exception is that
  this rule does not apply to the exponentiation operator, for which
  there are no specific layout rules. The reason for this exception
  is that sometimes it makes clearer reading to leave out the spaces
  around exponentiation.
- @cindex Operators
  
! @smallexample @c adanocomment
!        E := A * B**2 + 3 * (C - D);
! @end smallexample
  
! @item
  Use parentheses where they clarify the intended association of operands
  with operators:
! @cindex Parenthesization of expressions
! @smallexample @c adanocomment
!        (A / B) * C
! @end smallexample
  @end itemize
  
! @c  -------------------------------------------------------------------------
! @node    Statements, Subprograms, Expressions and Names, Top
! @section Statements
! @c  -------------------------------------------------------------------------
! @cindex Statements
  
- @subsection Simple and Compound Statements
- @c  -------------------------------------------------------------------------
- @cindex Simple and compound statements
  
! @itemize @bullet
! @item
  Use only one statement or label per line.
! @item
! A longer @syntax{sequence_of_statements} may be divided in logical
  groups or separated from surrounding code using a blank line.
  @end itemize
  
! @subsection If Statements
! @c  -------------------------------------------------------------------------
! @cindex @code{if} statement
  
! @itemize @bullet
! @item
  When the @code{if}, @code{elsif} or @code{else} keywords fit on the
  same line with the condition and the @code{then} keyword, then the
  statement is formatted as follows:
- @cindex Alignment (in an @code{if} statement)
  
! @smallexample @c adanocomment
! @group
!         if @var{condition} then
!            ...
!         elsif @var{condition} then
!            ...
!         else
!            ...
!         end if;
! @end group
! @end smallexample
  
- @noindent
  When the above layout is not possible, @code{then} should be aligned
  with @code{if}, and conditions should preferably be split before an
  @code{and} or @code{or} keyword a follows:
  
! @smallexample @c adanocomment
! @group
!         if @var{long_condition_that_has_to_be_split}
!           and then @var{continued_on_the_next_line}
!         then
!            ...
!         end if;
! @end group
! @end smallexample
  
- @noindent
  The @code{elsif}, @code{else} and @code{end if} always line up with
  the @code{if} keyword.  The preferred location for splitting the line
  is before @code{and} or @code{or}.  The continuation of a condition is
--- 259,490 ----
  normal rule, which is to use entirely blank lines for separating
  comment paragraphs).  The comment starts at same level of indentation
  as code it is commenting.
  
! @geindex Blank lines (in comments)
  
! @geindex Indentation
! 
! @example
! z : Integer;
! --  Integer value for storing value of z
! --
! --  The previous line was a blank line.
! @end example
! 
! @item 
  Comments that are dubious or incomplete, or that comment on possibly
! wrong or incomplete code, should be preceded or followed by @code{???}.
  
! @item 
  Comments in a subprogram body must generally be surrounded by blank lines.
  An exception is a comment that follows a line containing a single keyword
! ( @code{begin}, @code{else}, @code{loop} ):
  
! @example
! begin
!    --  Comment for the next statement
  
!    A := 5;
  
!    --  Comment for the B statement
  
!    B := 6;
! end;
! @end example
  
! @item 
  In sequences of statements, comments at the end of the lines should be
  aligned.
  
! @geindex Alignment (in comments)
  
! @example
! My_Identifier := 5;      --  First comment
! Other_Id := 6;           --  Second comment
! @end example
! 
! @item 
  Short comments that fit on a single line are @emph{not} ended with a
  period.  Comments taking more than a line are punctuated in the normal
  manner.
  
! @item 
  Comments should focus on @emph{why} instead of @emph{what}.
  Descriptions of what subprograms do go with the specification.
  
! @item 
  Comments describing a subprogram spec should specifically mention the
  formal argument names.  General rule: write a comment that does not
  depend on the names of things.  The names are supplementary, not
  sufficient, as comments.
  
! @item 
  @emph{Do not} put two spaces after periods in comments.
  @end itemize
  
! @node Declarations and Types,Expressions and Names,Lexical Elements,Top
! @anchor{gnat-style declarations-and-types}@anchor{9}
! @chapter Declarations and Types
  
! 
! 
! @itemize *
! 
! @item 
  In entity declarations, colons must be surrounded by spaces.  Colons
  should be aligned.
  
! @geindex Alignment (in declarations)
  
! @example
! Entity1   : Integer;
! My_Entity : Integer;
! @end example
! 
! @item 
  Declarations should be grouped in a logical order.
  Related groups of declarations may be preceded by a header comment.
  
! @item 
  All local subprograms in a subprogram or package body should be declared
  before the first local subprogram body.
  
! @item 
  Do not declare local entities that hide global entities.
  
! @geindex Hiding of outer entities
! 
! @item 
  Do not declare multiple variables in one declaration that spans lines.
  Start a new declaration on each line, instead.
  
! @item 
! The defining_identifiers of global declarations serve as
! comments of a sort.  So don’t choose terse names, but look for names
  that give useful information instead.
  
! @item 
  Local names can be shorter, because they are used only within
  one context, where comments explain their purpose.
  
! @item 
  When starting an initialization or default expression on the line that follows
  the declaration line, use 2 characters for indentation.
  
! @example
! Entity1 : Integer :=
!   Function_Name (Parameters, For_Call);
! @end example
  
! @item 
  If an initialization or default expression needs to be continued on subsequent
  lines, the continuations should be indented from the start of the expression.
  
! @example
! Entity1 : Integer := Long_Function_Name
!                        (parameters for call);
! @end example
  @end itemize
  
+ @node Expressions and Names,Statements,Declarations and Types,Top
+ @anchor{gnat-style expressions-and-names}@anchor{a}
+ @chapter Expressions and Names
  
  
  
! @itemize *
! 
! @item 
  Every operator must be surrounded by spaces. An exception is that
  this rule does not apply to the exponentiation operator, for which
  there are no specific layout rules. The reason for this exception
  is that sometimes it makes clearer reading to leave out the spaces
  around exponentiation.
  
! @geindex Operators
  
! @example
! E := A * B**2 + 3 * (C - D);
! @end example
! 
! @item 
  Use parentheses where they clarify the intended association of operands
  with operators:
! 
! @geindex Parenthesization of expressions
! 
! @example
! (A / B) * C
! @end example
  @end itemize
  
! @node Statements,Subprograms,Expressions and Names,Top
! @anchor{gnat-style statements}@anchor{b}
! @chapter Statements
  
  
! @menu
! * Simple and Compound Statements:: 
! * If Statements:: 
! * Case Statements:: 
! * Loop Statements:: 
! * Block Statements:: 
! 
! @end menu
! 
! @node Simple and Compound Statements,If Statements,,Statements
! @anchor{gnat-style simple-and-compound-statements}@anchor{c}
! @section Simple and Compound Statements
! 
! 
! 
! @itemize *
! 
! @item 
  Use only one statement or label per line.
! 
! @item 
! A longer sequence_of_statements may be divided in logical
  groups or separated from surrounding code using a blank line.
  @end itemize
  
! @node If Statements,Case Statements,Simple and Compound Statements,Statements
! @anchor{gnat-style if-statements}@anchor{d}
! @section If Statements
  
! 
! 
! @itemize *
! 
! @item 
  When the @code{if}, @code{elsif} or @code{else} keywords fit on the
  same line with the condition and the @code{then} keyword, then the
  statement is formatted as follows:
  
! @geindex Alignment (in an if statement)
! 
! @example
! if condition then
!    ...
! elsif condition then
!    ...
! else
!    ...
! end if;
! @end example
  
  When the above layout is not possible, @code{then} should be aligned
  with @code{if}, and conditions should preferably be split before an
  @code{and} or @code{or} keyword a follows:
  
! @example
! if long_condition_that_has_to_be_split
!   and then continued_on_the_next_line
! then
!    ...
! end if;
! @end example
  
  The @code{elsif}, @code{else} and @code{end if} always line up with
  the @code{if} keyword.  The preferred location for splitting the line
  is before @code{and} or @code{or}.  The continuation of a condition is
*************** indented with two spaces or as many as n
*** 464,750 ****
  As an exception, if conditions are closely related either of the
  following is allowed:
  
! @smallexample
! @group
!      if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf
!           or else
!         x = asldkjhalkdsjfhhfd
!           or else
!         x = asdfadsfadsf
!      then
!        ...
!      end if;
! @end group
  
! @group
!      if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf or else
!         x = asldkjhalkdsjfhhfd                         or else
!         x = asdfadsfadsf
!      then
!        ...
!      end if;
! @end group
! @end smallexample
  
! @item
! Conditions should use short-circuit forms (@code{and then},
! @code{or else}), except when the operands are boolean variables
  or boolean constants.
- @cindex Short-circuit forms
  
! @item
  Complex conditions in @code{if} statements are indented two characters:
- @cindex Indentation (in @code{if} statements)
  
! @smallexample @c adanocomment
! @group
!       if @var{this_complex_condition}
!         and then @var{that_other_one}
!         and then @var{one_last_one}
!       then
!          ...
!       end if;
! @end group
! @end smallexample
  
- @noindent
  There are some cases where complex conditionals can be laid out
  in manners that do not follow these rules to preserve better
  parallelism between branches, e.g.
  
! @smallexample @c adanocomment
! @group
!       if xyz.abc (gef) = 'c'
!            or else
!          xyz.abc (gef) = 'x'
!       then
!          ...
!       end if;
! @end group
! @end smallexample
! 
  
! @item
  Every @code{if} block is preceded and followed by a blank line, except
! where it begins or ends a @syntax{sequence_of_statements}.
! @cindex Blank lines (in an @code{if} statement)
  
! @smallexample @c adanocomment
! @group
!         A := 5;
  
!         if A = 5 then
!            null;
!         end if;
  
!         A := 6;
! @end group
! @end smallexample
  @end itemize
  
! @subsection Case Statements
! @cindex @code{case} statements
  
! @itemize @bullet
! @item
  Layout is as below.  For long @code{case} statements, the extra indentation
  can be saved by aligning the @code{when} clauses with the opening @code{case}.
  
! @smallexample @c adanocomment
! @group
!        case @var{expression} is
!           when @var{condition} =>
!              ...
!           when @var{condition} =>
!              ...
!        end case;
! @end group
! @end smallexample
  @end itemize
  
! @subsection Loop Statements
! @cindex Loop statements
  
! @itemize @bullet
! @item
  When possible, have @code{for} or @code{while} on one line with the
  condition and the @code{loop} keyword.
  
! @smallexample @c adanocomment
! @group
!        for J in S'Range loop
!           ...
!        end loop;
! @end group
! @end smallexample
  
! @noindent
! If the condition is too long, split the condition (see ``If
! statements'' above) and align @code{loop} with the @code{for} or
  @code{while} keyword.
- @cindex Alignment (in a loop statement)
  
! @smallexample @c adanocomment
! @group
!       while @var{long_condition_that_has_to_be_split}
!         and then @var{continued_on_the_next_line}
!       loop
!          ...
!       end loop;
! @end group
! @end smallexample
  
! @noindent
! If the @syntax{loop_statement} has an identifier, it is laid out as follows:
  
! @smallexample @c adanocomment
! @group
!       Outer : while not @var{condition} loop
!          ...
!       end Outer;
! @end group
! @end smallexample
  @end itemize
  
! @subsection Block Statements
! @cindex Block statement
  
! @itemize @bullet
! @item
  The @code{declare} (optional), @code{begin} and @code{end} words
! are aligned, except when the @syntax{block_statement} is named.  There
  is a blank line before the @code{begin} keyword:
- @cindex Alignment (in a block statement)
  
! @smallexample @c adanocomment
! @group
!       Some_Block : declare
!          ...
  
!       begin
!          ...
!       end Some_Block;
! @end group
! @end smallexample
  
  @end itemize
  
! @c  -------------------------------------------------------------------------
! @node    Subprograms, Packages, Statements, Top
! @section Subprograms
! @c  -------------------------------------------------------------------------
! @cindex Subprograms
  
- @subsection Subprogram Declarations
- @c  -------------------------------------------------------------------------
- @itemize @bullet
  
! @item
  Do not write the @code{in} for parameters.
  
! @smallexample @c adanocomment
!       function Length (S : String) return Integer;
! @end smallexample
  
! @item
  When the declaration line for a procedure or a function is too long to fit
  the entire declaration (including the keyword procedure or function) on a
  single line, then fold it, putting a single parameter on a line, aligning
  the colons, as in:
  
! @smallexample @c adanocomment
! @group
!      procedure Set_Heading
!        (Source : String;
!         Count  : Natural;
!         Pad    : Character := Space;
!         Fill   : Boolean   := True);
! @end group
! @end smallexample
  
- @noindent
  In the case of a function, if the entire spec does not fit on one line, then
  the return may appear after the last parameter, as in:
  
! @smallexample @c adanocomment
! @group
!       function Head
!         (Source : String;
!          Count  : Natural;
!          Pad    : Character := Space) return String;
! @end group
! @end smallexample
  
- @noindent
  Or it may appear on its own as a separate line. This form is preferred when
  putting the return on the same line as the last parameter would result in
  an overlong line. The return type may optionally be aligned with the types
  of the parameters (usually we do this aligning if it results only in a small
! number of extra spaces, and otherwise we don't attempt to align). So two
  alternative forms for the above spec are:
  
! @smallexample @c adanocomment
! @group
!       function Head
!         (Source : String;
!          Count  : Natural;
!          Pad    : Character := Space)
!          return   String;
! 
!       function Head
!         (Source : String;
!          Count  : Natural;
!          Pad    : Character := Space)
!          return String;
! @end group
! @end smallexample
  
  @end itemize
  
! @subsection Subprogram Bodies
! @c  -------------------------------------------------------------------------
! @cindex Subprogram bodies
  
! @itemize @bullet
! @item
  Function and procedure bodies should usually be sorted alphabetically. Do
  not attempt to sort them in some logical order by functionality. For a
  sequence of subprogram specs, a general alphabetical sorting is also
  usually appropriate, but occasionally it makes sense to group by major
  function, with appropriate headers.
  
! @item
  All subprograms have a header giving the function name, with the following
  format:
  
! @smallexample @c adanocomment
! @group
!       -----------------
!       -- My_Function --
!       -----------------
  
!       procedure My_Function is
!       begin
!         ...
!       end My_Function;
! @end group
! @end smallexample
  
- @noindent
  Note that the name in the header is preceded by a single space,
  not two spaces as for other comments. These headers are used on
  nested subprograms as well as outer level subprograms. They may
  also be used as headers for sections of comments, or collections
  of declarations that are related.
  
! @item
! Every subprogram body must have a preceding @syntax{subprogram_declaration},
  which includes proper client documentation so that you do not need to
  read the subprogram body in order to understand what the subprogram does and
  how to call it. All subprograms should be documented, without exceptions.
  
! @item
! @cindex Blank lines (in subprogram bodies)
  A sequence of declarations may optionally be separated from the following
  begin by a blank line.  Just as we optionally allow blank lines in general
  between declarations, this blank line should be present only if it improves
--- 492,771 ----
  As an exception, if conditions are closely related either of the
  following is allowed:
  
! @example
! if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf
!      or else
!    x = asldkjhalkdsjfhhfd
!      or else
!    x = asdfadsfadsf
! then
!   ...
! end if;
  
! if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf or else
!    x = asldkjhalkdsjfhhfd                         or else
!    x = asdfadsfadsf
! then
!   ...
! end if;
! @end example
  
! @item 
! Conditions should use short-circuit forms ( @code{and then},
! @code{or else} ), except when the operands are boolean variables
  or boolean constants.
  
! @geindex Short-circuit forms
! 
! @item 
  Complex conditions in @code{if} statements are indented two characters:
  
! @geindex Indentation (in if statements)
! 
! @example
! if this_complex_condition
!   and then that_other_one
!   and then one_last_one
! then
!    ...
! end if;
! @end example
  
  There are some cases where complex conditionals can be laid out
  in manners that do not follow these rules to preserve better
  parallelism between branches, e.g.
  
! @example
! if xyz.abc (gef) = 'c'
!      or else
!    xyz.abc (gef) = 'x'
! then
!    ...
! end if;
! @end example
  
! @item 
  Every @code{if} block is preceded and followed by a blank line, except
! where it begins or ends a sequence_of_statements.
  
! @geindex Blank lines (in an if statement)
  
! @example
! A := 5;
  
! if A = 5 then
!    null;
! end if;
! 
! A := 6;
! @end example
  @end itemize
  
! @node Case Statements,Loop Statements,If Statements,Statements
! @anchor{gnat-style case-statements}@anchor{e}
! @section Case Statements
  
! 
! 
! @itemize *
! 
! @item 
  Layout is as below.  For long @code{case} statements, the extra indentation
  can be saved by aligning the @code{when} clauses with the opening @code{case}.
  
! @example
! case expression is
!    when condition =>
!       ...
!    when condition =>
!       ...
! end case;
! @end example
  @end itemize
  
! @node Loop Statements,Block Statements,Case Statements,Statements
! @anchor{gnat-style loop-statements}@anchor{f}
! @section Loop Statements
  
! 
! 
! @itemize *
! 
! @item 
  When possible, have @code{for} or @code{while} on one line with the
  condition and the @code{loop} keyword.
  
! @example
! for J in S'Range loop
!    ...
! end loop;
! @end example
  
! If the condition is too long, split the condition (see ‘If
! statements’ above) and align @code{loop} with the @code{for} or
  @code{while} keyword.
  
! @geindex Alignment (in a loop statement)
  
! @example
! while long_condition_that_has_to_be_split
!   and then continued_on_the_next_line
! loop
!    ...
! end loop;
! @end example
  
! If the loop_statement has an identifier, it is laid out as follows:
! 
! @example
! Outer : while not condition loop
!    ...
! end Outer;
! @end example
  @end itemize
  
! @node Block Statements,,Loop Statements,Statements
! @anchor{gnat-style block-statements}@anchor{10}
! @section Block Statements
  
! 
! 
! @itemize *
! 
! @item 
  The @code{declare} (optional), @code{begin} and @code{end} words
! are aligned, except when the block_statement is named.  There
  is a blank line before the @code{begin} keyword:
  
! @geindex Alignment (in a block statement)
  
! @example
! Some_Block : declare
!    ...
  
+ begin
+    ...
+ end Some_Block;
+ @end example
  @end itemize
  
! @node Subprograms,Packages and Visibility Rules,Statements,Top
! @anchor{gnat-style subprograms}@anchor{11}
! @chapter Subprograms
  
  
! @menu
! * Subprogram Declarations:: 
! * Subprogram Bodies:: 
! 
! @end menu
! 
! @node Subprogram Declarations,Subprogram Bodies,,Subprograms
! @anchor{gnat-style subprogram-declarations}@anchor{12}
! @section Subprogram Declarations
! 
! 
! 
! @itemize *
! 
! @item 
  Do not write the @code{in} for parameters.
  
! @example
! function Length (S : String) return Integer;
! @end example
  
! @item 
  When the declaration line for a procedure or a function is too long to fit
  the entire declaration (including the keyword procedure or function) on a
  single line, then fold it, putting a single parameter on a line, aligning
  the colons, as in:
  
! @example
! procedure Set_Heading
!   (Source : String;
!    Count  : Natural;
!    Pad    : Character := Space;
!    Fill   : Boolean   := True);
! @end example
  
  In the case of a function, if the entire spec does not fit on one line, then
  the return may appear after the last parameter, as in:
  
! @example
! function Head
!   (Source : String;
!    Count  : Natural;
!    Pad    : Character := Space) return String;
! @end example
  
  Or it may appear on its own as a separate line. This form is preferred when
  putting the return on the same line as the last parameter would result in
  an overlong line. The return type may optionally be aligned with the types
  of the parameters (usually we do this aligning if it results only in a small
! number of extra spaces, and otherwise we don’t attempt to align). So two
  alternative forms for the above spec are:
  
! @example
! function Head
!   (Source : String;
!    Count  : Natural;
!    Pad    : Character := Space)
!    return   String;
  
+ function Head
+   (Source : String;
+    Count  : Natural;
+    Pad    : Character := Space)
+    return String;
+ @end example
  @end itemize
  
! @node Subprogram Bodies,,Subprogram Declarations,Subprograms
! @anchor{gnat-style subprogram-bodies}@anchor{13}
! @section Subprogram Bodies
  
! 
! 
! @itemize *
! 
! @item 
  Function and procedure bodies should usually be sorted alphabetically. Do
  not attempt to sort them in some logical order by functionality. For a
  sequence of subprogram specs, a general alphabetical sorting is also
  usually appropriate, but occasionally it makes sense to group by major
  function, with appropriate headers.
  
! @item 
  All subprograms have a header giving the function name, with the following
  format:
  
! @example
! -----------------
! -- My_Function --
! -----------------
  
! procedure My_Function is
! begin
!   ...
! end My_Function;
! @end example
  
  Note that the name in the header is preceded by a single space,
  not two spaces as for other comments. These headers are used on
  nested subprograms as well as outer level subprograms. They may
  also be used as headers for sections of comments, or collections
  of declarations that are related.
  
! @item 
! Every subprogram body must have a preceding subprogram_declaration,
  which includes proper client documentation so that you do not need to
  read the subprogram body in order to understand what the subprogram does and
  how to call it. All subprograms should be documented, without exceptions.
  
! @geindex Blank lines (in subprogram bodies)
! 
! @item 
  A sequence of declarations may optionally be separated from the following
  begin by a blank line.  Just as we optionally allow blank lines in general
  between declarations, this blank line should be present only if it improves
*************** readability. Generally we avoid this bla
*** 752,773 ****
  small (one or two lines) and the body has no blank lines, and we include it
  if the declarative part is long or if the body has blank lines.
  
! @item
  If the declarations in a subprogram contain at least one nested
  subprogram body, then just before the @code{begin} of the enclosing
  subprogram, there is a comment line and a blank line:
  
! @smallexample @c adanocomment
! @group
!     --  Start of processing for @var{Enclosing_Subprogram}
  
!     begin
!       ...
!     end @var{Enclosing_Subprogram};
! @end group
! @end smallexample
  
! @item
  When nested subprograms are present, variables that are referenced by any
  nested subprogram should precede the nested subprogram specs. For variables
  that are not referenced by nested procedures, the declarations can either also
--- 773,792 ----
  small (one or two lines) and the body has no blank lines, and we include it
  if the declarative part is long or if the body has blank lines.
  
! @item 
  If the declarations in a subprogram contain at least one nested
  subprogram body, then just before the @code{begin} of the enclosing
  subprogram, there is a comment line and a blank line:
  
! @example
! --  Start of processing for Enclosing_Subprogram
  
! begin
!   ...
! end Enclosing_Subprogram;
! @end example
  
! @item 
  When nested subprograms are present, variables that are referenced by any
  nested subprogram should precede the nested subprogram specs. For variables
  that are not referenced by nested procedures, the declarations can either also
*************** be before any of the nested subprogram s
*** 775,954 ****
  generally used). Or then can come just before the begin, with a header. The
  following example shows the two possible styles:
  
! @smallexample @c adanocomment
! @group
!     procedure Style1 is
!        Var_Referenced_In_Nested      : Integer;
!        Var_Referenced_Only_In_Style1 : Integer;
! 
!        proc Nested;
!        --  Comments ...
! 
! 
!        ------------
!        -- Nested --
!        ------------
  
!        procedure Nested is
!        begin
!           ...
!        end Nested;
  
!     --  Start of processing for Style1
  
!     begin
!        ...
!     end Style1;
  
! @end group
  
! @group
!     procedure Style2 is
!        Var_Referenced_In_Nested : Integer;
  
!        proc Nested;
!        --  Comments ...
  
!        ------------
!        -- Nested --
!        ------------
  
!        procedure Nested is
!        begin
!           ...
!        end Nested;
  
!        --  Local variables
  
!        Var_Referenced_Only_In_Style2 : Integer;
  
!     --  Start of processing for Style2
  
!     begin
!        ...
!     end Style2;
  
! @end group
! @end smallexample
  
- @noindent
  For new code, we generally prefer Style2, but we do not insist on
  modifying all legacy occurrences of Style1, which is still much
  more common in the sources.
- 
  @end itemize
  
  
- @c  -------------------------------------------------------------------------
- @node    Packages, Program Structure, Subprograms, Top
- @section Packages and Visibility Rules
- @c  -------------------------------------------------------------------------
- @cindex Packages
  
! @itemize @bullet
! @item
  All program units and subprograms have their name at the end:
  
! @smallexample @c adanocomment
! @group
!       package P is
!          ...
!       end P;
! @end group
! @end smallexample
  
! @item
! We will use the style of @code{use}-ing @code{with}-ed packages, with
  the context clauses looking like:
- @cindex @code{use} clauses
  
! @smallexample @c adanocomment
! @group
!       with A; use A;
!       with B; use B;
! @end group
! @end smallexample
  
! @item
  Names declared in the visible part of packages should be
! unique, to prevent name clashes when the packages are @code{use}d.
! @cindex Name clash avoidance
  
! @smallexample @c adanocomment
! @group
!       package Entity is
!          type Entity_Kind is ...;
!          ...
!       end Entity;
! @end group
! @end smallexample
  
! @item
  After the file header comment, the context clause and unit specification
! should be the first thing in a @syntax{program_unit}.
  
! @item
  Preelaborate, Pure and Elaborate_Body pragmas should be added right after the
  package name, indented an extra level and using the parameterless form:
  
! @smallexample @c adanocomment
! @group
!       package Preelaborate_Package is
!          pragma Preelaborate;
!          ...
!       end Preelaborate_Package;
! @end group
! @end smallexample
! 
  @end itemize
  
! @c  -------------------------------------------------------------------------
! @node    Program Structure, GNU Free Documentation License, Packages, Top
! @section Program Structure and Compilation Issues
! @c  -------------------------------------------------------------------------
! @cindex Program structure
  
! @itemize @bullet
! @item
! Every GNAT source file must be compiled with the @option{-gnatg}
  switch to check the coding style.
  (Note that you should look at
! @file{style.adb} to see the lexical rules enforced by
! @option{-gnatg}).
! @cindex @option{-gnatg} option (to gcc)
! @cindex @file{style.adb} file
  
! @item
  Each source file should contain only one compilation unit.
  
! @item
  Filenames should be 8 or fewer characters, followed by the @code{.adb}
  extension for a body or @code{.ads} for a spec.
- @cindex File name length
  
! @item
! Unit names should be distinct when ``krunch''ed to 8 characters
! (see @file{krunch.ads}) and the filenames should match the unit name,
  except that they are all lower case.
! @cindex @file{krunch.ads} file
  @end itemize
  
  
! @c **********************************
! @c * GNU Free Documentation License *
! @c **********************************
! @node GNU Free Documentation License,Index, Program Structure, Top
! @unnumberedsec GNU Free Documentation License
! @set nodefaultgnufreedocumentationlicensenode
! @include fdl.texi
! @c GNU Free Documentation License
! @cindex GNU Free Documentation License
  
! @node Index,,GNU Free Documentation License, Top
! @unnumberedsec Index
  
- @printindex cp
  
! @contents
  
  @bye
--- 794,1439 ----
  generally used). Or then can come just before the begin, with a header. The
  following example shows the two possible styles:
  
! @example
! procedure Style1 is
!    Var_Referenced_In_Nested      : Integer;
!    Var_Referenced_Only_In_Style1 : Integer;
  
!    proc Nested;
!    --  Comments ...
  
!    ------------
!    -- Nested --
!    ------------
  
!    procedure Nested is
!    begin
!       ...
!    end Nested;
  
! --  Start of processing for Style1
  
! begin
!    ...
! end Style1;
  
! procedure Style2 is
!    Var_Referenced_In_Nested : Integer;
  
!    proc Nested;
!    --  Comments ...
  
!    ------------
!    -- Nested --
!    ------------
  
!    procedure Nested is
!    begin
!       ...
!    end Nested;
  
!    --  Local variables
  
!    Var_Referenced_Only_In_Style2 : Integer;
  
! --  Start of processing for Style2
  
! begin
!    ...
! end Style2;
! @end example
  
  For new code, we generally prefer Style2, but we do not insist on
  modifying all legacy occurrences of Style1, which is still much
  more common in the sources.
  @end itemize
  
+ @node Packages and Visibility Rules,Program Structure and Compilation Issues,Subprograms,Top
+ @anchor{gnat-style packages-and-visibility-rules}@anchor{14}
+ @chapter Packages and Visibility Rules
  
  
! 
! @itemize *
! 
! @item 
  All program units and subprograms have their name at the end:
  
! @example
! package P is
!    ...
! end P;
! @end example
  
! @item 
! We will use the style of @code{use} -ing @code{with} -ed packages, with
  the context clauses looking like:
  
! @geindex use clauses
  
! @example
! with A; use A;
! with B; use B;
! @end example
! 
! @item 
  Names declared in the visible part of packages should be
! unique, to prevent name clashes when the packages are @code{use} d.
  
! @geindex Name clash avoidance
  
! @example
! package Entity is
!    type Entity_Kind is ...;
!    ...
! end Entity;
! @end example
! 
! @item 
  After the file header comment, the context clause and unit specification
! should be the first thing in a program_unit.
  
! @item 
  Preelaborate, Pure and Elaborate_Body pragmas should be added right after the
  package name, indented an extra level and using the parameterless form:
  
! @example
! package Preelaborate_Package is
!    pragma Preelaborate;
!    ...
! end Preelaborate_Package;
! @end example
  @end itemize
  
! @node Program Structure and Compilation Issues,Index,Packages and Visibility Rules,Top
! @anchor{gnat-style program-structure-and-compilation-issues}@anchor{15}
! @chapter Program Structure and Compilation Issues
  
! 
! 
! @itemize *
! 
! @item 
! Every GNAT source file must be compiled with the @code{-gnatg}
  switch to check the coding style.
  (Note that you should look at
! style.adb to see the lexical rules enforced by @code{-gnatg} ).
  
! @geindex -gnatg option (to gcc)
! 
! @geindex style.adb file
! 
! @item 
  Each source file should contain only one compilation unit.
  
! @item 
  Filenames should be 8 or fewer characters, followed by the @code{.adb}
  extension for a body or @code{.ads} for a spec.
  
! @geindex File name length
! 
! @item 
! Unit names should be distinct when ‘krunch’ed to 8 characters
! (see krunch.ads) and the filenames should match the unit name,
  except that they are all lower case.
! 
! @geindex krunch.ads file
  @end itemize
  
+ @menu
+ * GNU Free Documentation License:: 
  
! @end menu
  
! @node GNU Free Documentation License,,,Program Structure and Compilation Issues
! @anchor{share/gnu_free_documentation_license doc}@anchor{16}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{17}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{18}
! @section GNU Free Documentation License
  
  
! Version 1.3, 3 November 2008
! 
! Copyright  2000, 2001, 2002, 2007, 2008  Free Software Foundation, Inc
! @indicateurl{https://fsf.org/}
! 
! Everyone is permitted to copy and distribute verbatim copies of this
! license document, but changing it is not allowed.
! 
! @strong{Preamble}
! 
! The purpose of this License is to make a manual, textbook, or other
! functional and useful document “free” in the sense of freedom: to
! assure everyone the effective freedom to copy and redistribute it,
! with or without modifying it, either commercially or noncommercially.
! Secondarily, this License preserves for the author and publisher a way
! to get credit for their work, while not being considered responsible
! for modifications made by others.
! 
! This License is a kind of “copyleft”, which means that derivative
! works of the document must themselves be free in the same sense.  It
! complements the GNU General Public License, which is a copyleft
! license designed for free software.
! 
! We have designed this License in order to use it for manuals for free
! software, because free software needs free documentation: a free
! program should come with manuals providing the same freedoms that the
! software does.  But this License is not limited to software manuals;
! it can be used for any textual work, regardless of subject matter or
! whether it is published as a printed book.  We recommend this License
! principally for works whose purpose is instruction or reference.
! 
! @strong{1. APPLICABILITY AND DEFINITIONS}
! 
! This License applies to any manual or other work, in any medium, that
! contains a notice placed by the copyright holder saying it can be
! distributed under the terms of this License.  Such a notice grants a
! world-wide, royalty-free license, unlimited in duration, to use that
! work under the conditions stated herein.  The @strong{Document}, below,
! refers to any such manual or work.  Any member of the public is a
! licensee, and is addressed as “@strong{you}”.  You accept the license if you
! copy, modify or distribute the work in a way requiring permission
! under copyright law.
! 
! A “@strong{Modified Version}” of the Document means any work containing the
! Document or a portion of it, either copied verbatim, or with
! modifications and/or translated into another language.
! 
! A “@strong{Secondary Section}” is a named appendix or a front-matter section of
! the Document that deals exclusively with the relationship of the
! publishers or authors of the Document to the Document’s overall subject
! (or to related matters) and contains nothing that could fall directly
! within that overall subject.  (Thus, if the Document is in part a
! textbook of mathematics, a Secondary Section may not explain any
! mathematics.)  The relationship could be a matter of historical
! connection with the subject or with related matters, or of legal,
! commercial, philosophical, ethical or political position regarding
! them.
! 
! The “@strong{Invariant Sections}” are certain Secondary Sections whose titles
! are designated, as being those of Invariant Sections, in the notice
! that says that the Document is released under this License.  If a
! section does not fit the above definition of Secondary then it is not
! allowed to be designated as Invariant.  The Document may contain zero
! Invariant Sections.  If the Document does not identify any Invariant
! Sections then there are none.
! 
! The “@strong{Cover Texts}” are certain short passages of text that are listed,
! as Front-Cover Texts or Back-Cover Texts, in the notice that says that
! the Document is released under this License.  A Front-Cover Text may
! be at most 5 words, and a Back-Cover Text may be at most 25 words.
! 
! A “@strong{Transparent}” copy of the Document means a machine-readable copy,
! represented in a format whose specification is available to the
! general public, that is suitable for revising the document
! straightforwardly with generic text editors or (for images composed of
! pixels) generic paint programs or (for drawings) some widely available
! drawing editor, and that is suitable for input to text formatters or
! for automatic translation to a variety of formats suitable for input
! to text formatters.  A copy made in an otherwise Transparent file
! format whose markup, or absence of markup, has been arranged to thwart
! or discourage subsequent modification by readers is not Transparent.
! An image format is not Transparent if used for any substantial amount
! of text.  A copy that is not “Transparent” is called @strong{Opaque}.
! 
! Examples of suitable formats for Transparent copies include plain
! ASCII without markup, Texinfo input format, LaTeX input format, SGML
! or XML using a publicly available DTD, and standard-conforming simple
! HTML, PostScript or PDF designed for human modification.  Examples of
! transparent image formats include PNG, XCF and JPG.  Opaque formats
! include proprietary formats that can be read and edited only by
! proprietary word processors, SGML or XML for which the DTD and/or
! processing tools are not generally available, and the
! machine-generated HTML, PostScript or PDF produced by some word
! processors for output purposes only.
! 
! The “@strong{Title Page}” means, for a printed book, the title page itself,
! plus such following pages as are needed to hold, legibly, the material
! this License requires to appear in the title page.  For works in
! formats which do not have any title page as such, “Title Page” means
! the text near the most prominent appearance of the work’s title,
! preceding the beginning of the body of the text.
! 
! The “@strong{publisher}” means any person or entity that distributes
! copies of the Document to the public.
! 
! A section “@strong{Entitled XYZ}” means a named subunit of the Document whose
! title either is precisely XYZ or contains XYZ in parentheses following
! text that translates XYZ in another language.  (Here XYZ stands for a
! specific section name mentioned below, such as “@strong{Acknowledgements}”,
! “@strong{Dedications}”, “@strong{Endorsements}”, or “@strong{History}”.)
! To “@strong{Preserve the Title}”
! of such a section when you modify the Document means that it remains a
! section “Entitled XYZ” according to this definition.
! 
! The Document may include Warranty Disclaimers next to the notice which
! states that this License applies to the Document.  These Warranty
! Disclaimers are considered to be included by reference in this
! License, but only as regards disclaiming warranties: any other
! implication that these Warranty Disclaimers may have is void and has
! no effect on the meaning of this License.
! 
! @strong{2. VERBATIM COPYING}
! 
! You may copy and distribute the Document in any medium, either
! commercially or noncommercially, provided that this License, the
! copyright notices, and the license notice saying this License applies
! to the Document are reproduced in all copies, and that you add no other
! conditions whatsoever to those of this License.  You may not use
! technical measures to obstruct or control the reading or further
! copying of the copies you make or distribute.  However, you may accept
! compensation in exchange for copies.  If you distribute a large enough
! number of copies you must also follow the conditions in section 3.
! 
! You may also lend copies, under the same conditions stated above, and
! you may publicly display copies.
! 
! @strong{3. COPYING IN QUANTITY}
! 
! If you publish printed copies (or copies in media that commonly have
! printed covers) of the Document, numbering more than 100, and the
! Document’s license notice requires Cover Texts, you must enclose the
! copies in covers that carry, clearly and legibly, all these Cover
! Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
! the back cover.  Both covers must also clearly and legibly identify
! you as the publisher of these copies.  The front cover must present
! the full title with all words of the title equally prominent and
! visible.  You may add other material on the covers in addition.
! Copying with changes limited to the covers, as long as they preserve
! the title of the Document and satisfy these conditions, can be treated
! as verbatim copying in other respects.
! 
! If the required texts for either cover are too voluminous to fit
! legibly, you should put the first ones listed (as many as fit
! reasonably) on the actual cover, and continue the rest onto adjacent
! pages.
! 
! If you publish or distribute Opaque copies of the Document numbering
! more than 100, you must either include a machine-readable Transparent
! copy along with each Opaque copy, or state in or with each Opaque copy
! a computer-network location from which the general network-using
! public has access to download using public-standard network protocols
! a complete Transparent copy of the Document, free of added material.
! If you use the latter option, you must take reasonably prudent steps,
! when you begin distribution of Opaque copies in quantity, to ensure
! that this Transparent copy will remain thus accessible at the stated
! location until at least one year after the last time you distribute an
! Opaque copy (directly or through your agents or retailers) of that
! edition to the public.
! 
! It is requested, but not required, that you contact the authors of the
! Document well before redistributing any large number of copies, to give
! them a chance to provide you with an updated version of the Document.
! 
! @strong{4. MODIFICATIONS}
! 
! You may copy and distribute a Modified Version of the Document under
! the conditions of sections 2 and 3 above, provided that you release
! the Modified Version under precisely this License, with the Modified
! Version filling the role of the Document, thus licensing distribution
! and modification of the Modified Version to whoever possesses a copy
! of it.  In addition, you must do these things in the Modified Version:
! 
! 
! @enumerate A
! 
! @item 
! Use in the Title Page (and on the covers, if any) a title distinct
! from that of the Document, and from those of previous versions
! (which should, if there were any, be listed in the History section
! of the Document).  You may use the same title as a previous version
! if the original publisher of that version gives permission.
! 
! @item 
! List on the Title Page, as authors, one or more persons or entities
! responsible for authorship of the modifications in the Modified
! Version, together with at least five of the principal authors of the
! Document (all of its principal authors, if it has fewer than five),
! unless they release you from this requirement.
! 
! @item 
! State on the Title page the name of the publisher of the
! Modified Version, as the publisher.
! 
! @item 
! Preserve all the copyright notices of the Document.
! 
! @item 
! Add an appropriate copyright notice for your modifications
! adjacent to the other copyright notices.
! 
! @item 
! Include, immediately after the copyright notices, a license notice
! giving the public permission to use the Modified Version under the
! terms of this License, in the form shown in the Addendum below.
! 
! @item 
! Preserve in that license notice the full lists of Invariant Sections
! and required Cover Texts given in the Document’s license notice.
! 
! @item 
! Include an unaltered copy of this License.
! 
! @item 
! Preserve the section Entitled “History”, Preserve its Title, and add
! to it an item stating at least the title, year, new authors, and
! publisher of the Modified Version as given on the Title Page.  If
! there is no section Entitled “History” in the Document, create one
! stating the title, year, authors, and publisher of the Document as
! given on its Title Page, then add an item describing the Modified
! Version as stated in the previous sentence.
! 
! @item 
! Preserve the network location, if any, given in the Document for
! public access to a Transparent copy of the Document, and likewise
! the network locations given in the Document for previous versions
! it was based on.  These may be placed in the “History” section.
! You may omit a network location for a work that was published at
! least four years before the Document itself, or if the original
! publisher of the version it refers to gives permission.
! 
! @item 
! For any section Entitled “Acknowledgements” or “Dedications”,
! Preserve the Title of the section, and preserve in the section all
! the substance and tone of each of the contributor acknowledgements
! and/or dedications given therein.
! 
! @item 
! Preserve all the Invariant Sections of the Document,
! unaltered in their text and in their titles.  Section numbers
! or the equivalent are not considered part of the section titles.
! 
! @item 
! Delete any section Entitled “Endorsements”.  Such a section
! may not be included in the Modified Version.
! 
! @item 
! Do not retitle any existing section to be Entitled “Endorsements”
! or to conflict in title with any Invariant Section.
! 
! @item 
! Preserve any Warranty Disclaimers.
! @end enumerate
! 
! If the Modified Version includes new front-matter sections or
! appendices that qualify as Secondary Sections and contain no material
! copied from the Document, you may at your option designate some or all
! of these sections as invariant.  To do this, add their titles to the
! list of Invariant Sections in the Modified Version’s license notice.
! These titles must be distinct from any other section titles.
! 
! You may add a section Entitled “Endorsements”, provided it contains
! nothing but endorsements of your Modified Version by various
! parties—for example, statements of peer review or that the text has
! been approved by an organization as the authoritative definition of a
! standard.
! 
! You may add a passage of up to five words as a Front-Cover Text, and a
! passage of up to 25 words as a Back-Cover Text, to the end of the list
! of Cover Texts in the Modified Version.  Only one passage of
! Front-Cover Text and one of Back-Cover Text may be added by (or
! through arrangements made by) any one entity.  If the Document already
! includes a cover text for the same cover, previously added by you or
! by arrangement made by the same entity you are acting on behalf of,
! you may not add another; but you may replace the old one, on explicit
! permission from the previous publisher that added the old one.
! 
! The author(s) and publisher(s) of the Document do not by this License
! give permission to use their names for publicity for or to assert or
! imply endorsement of any Modified Version.
! 
! @strong{5. COMBINING DOCUMENTS}
! 
! You may combine the Document with other documents released under this
! License, under the terms defined in section 4 above for modified
! versions, provided that you include in the combination all of the
! Invariant Sections of all of the original documents, unmodified, and
! list them all as Invariant Sections of your combined work in its
! license notice, and that you preserve all their Warranty Disclaimers.
! 
! The combined work need only contain one copy of this License, and
! multiple identical Invariant Sections may be replaced with a single
! copy.  If there are multiple Invariant Sections with the same name but
! different contents, make the title of each such section unique by
! adding at the end of it, in parentheses, the name of the original
! author or publisher of that section if known, or else a unique number.
! Make the same adjustment to the section titles in the list of
! Invariant Sections in the license notice of the combined work.
! 
! In the combination, you must combine any sections Entitled “History”
! in the various original documents, forming one section Entitled
! “History”; likewise combine any sections Entitled “Acknowledgements”,
! and any sections Entitled “Dedications”.  You must delete all sections
! Entitled “Endorsements”.
! 
! @strong{6. COLLECTIONS OF DOCUMENTS}
! 
! You may make a collection consisting of the Document and other documents
! released under this License, and replace the individual copies of this
! License in the various documents with a single copy that is included in
! the collection, provided that you follow the rules of this License for
! verbatim copying of each of the documents in all other respects.
! 
! You may extract a single document from such a collection, and distribute
! it individually under this License, provided you insert a copy of this
! License into the extracted document, and follow this License in all
! other respects regarding verbatim copying of that document.
! 
! @strong{7. AGGREGATION WITH INDEPENDENT WORKS}
! 
! A compilation of the Document or its derivatives with other separate
! and independent documents or works, in or on a volume of a storage or
! distribution medium, is called an “aggregate” if the copyright
! resulting from the compilation is not used to limit the legal rights
! of the compilation’s users beyond what the individual works permit.
! When the Document is included in an aggregate, this License does not
! apply to the other works in the aggregate which are not themselves
! derivative works of the Document.
! 
! If the Cover Text requirement of section 3 is applicable to these
! copies of the Document, then if the Document is less than one half of
! the entire aggregate, the Document’s Cover Texts may be placed on
! covers that bracket the Document within the aggregate, or the
! electronic equivalent of covers if the Document is in electronic form.
! Otherwise they must appear on printed covers that bracket the whole
! aggregate.
! 
! @strong{8. TRANSLATION}
! 
! Translation is considered a kind of modification, so you may
! distribute translations of the Document under the terms of section 4.
! Replacing Invariant Sections with translations requires special
! permission from their copyright holders, but you may include
! translations of some or all Invariant Sections in addition to the
! original versions of these Invariant Sections.  You may include a
! translation of this License, and all the license notices in the
! Document, and any Warranty Disclaimers, provided that you also include
! the original English version of this License and the original versions
! of those notices and disclaimers.  In case of a disagreement between
! the translation and the original version of this License or a notice
! or disclaimer, the original version will prevail.
! 
! If a section in the Document is Entitled “Acknowledgements”,
! “Dedications”, or “History”, the requirement (section 4) to Preserve
! its Title (section 1) will typically require changing the actual
! title.
! 
! @strong{9. TERMINATION}
! 
! You may not copy, modify, sublicense, or distribute the Document
! except as expressly provided under this License.  Any attempt
! otherwise to copy, modify, sublicense, or distribute it is void, and
! will automatically terminate your rights under this License.
  
+ However, if you cease all violation of this License, then your license
+ from a particular copyright holder is reinstated (a) provisionally,
+ unless and until the copyright holder explicitly and finally
+ terminates your license, and (b) permanently, if the copyright holder
+ fails to notify you of the violation by some reasonable means prior to
+ 60 days after the cessation.
+ 
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from that
+ copyright holder, and you cure the violation prior to 30 days after
+ your receipt of the notice.
+ 
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you under
+ this License.  If your rights have been terminated and not permanently
+ reinstated, receipt of a copy of some or all of the same material does
+ not give you any rights to use it.
+ 
+ @strong{10. FUTURE REVISIONS OF THIS LICENSE}
+ 
+ The Free Software Foundation may publish new, revised versions
+ of the GNU Free Documentation License from time to time.  Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.  See
+ @indicateurl{https://www.gnu.org/copyleft/}.
+ 
+ Each version of the License is given a distinguishing version number.
+ If the Document specifies that a particular numbered version of this
+ License “or any later version” applies to it, you have the option of
+ following the terms and conditions either of that specified version or
+ of any later version that has been published (not as a draft) by the
+ Free Software Foundation.  If the Document does not specify a version
+ number of this License, you may choose any version ever published (not
+ as a draft) by the Free Software Foundation.  If the Document
+ specifies that a proxy can decide which future versions of this
+ License can be used, that proxy’s public statement of acceptance of a
+ version permanently authorizes you to choose that version for the
+ Document.
+ 
+ @strong{11. RELICENSING}
+ 
+ “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works.  A
+ public wiki that anybody can edit is an example of such a server.  A
+ “Massive Multiauthor Collaboration” (or “MMC”) contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+ 
+ “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+ 
+ “Incorporate” means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+ 
+ An MMC is “eligible for relicensing” if it is licensed under this
+ License, and if all works that were first published under this License
+ somewhere other than this MMC, and subsequently incorporated in whole
+ or in part into the MMC, (1) had no cover texts or invariant sections,
+ and (2) were thus incorporated prior to November 1, 2008.
+ 
+ The operator of an MMC Site may republish an MMC contained in the site
+ under CC-BY-SA on the same site at any time before August 1, 2009,
+ provided the MMC is eligible for relicensing.
+ 
+ @strong{ADDENDUM: How to use this License for your documents}
+ 
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and
+ license notices just after the title page:
+ 
+ @quotation
+ 
+ Copyright © YEAR  YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled “GNU
+ Free Documentation License”.
+ @end quotation
+ 
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+ replace the “with … Texts.” line with this:
+ 
+ @quotation
+ 
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+ @end quotation
+ 
+ If you have Invariant Sections without Cover Texts, or some other
+ combination of the three, merge those two alternatives to suit the
+ situation.
+ 
+ If your document contains nontrivial examples of program code, we
+ recommend releasing these examples in parallel under your choice of
+ free software license, such as the GNU General Public License,
+ to permit their use in free software.
+ 
+ @node Index,,Program Structure and Compilation Issues,Top
+ @unnumbered Index
+ 
+ 
+ @printindex ge
+ 
+ 
+ @c %**end of body
  @bye
diff -Nrcpad gcc-11.3.0/gcc/ada/gnat1drv.adb gcc-12.1.0/gcc/ada/gnat1drv.adb
*** gcc-11.3.0/gcc/ada/gnat1drv.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnat1drv.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,59 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;     use Atree;
! with Back_End;  use Back_End;
  with Checks;
  with Comperr;
  with Csets;
! with Debug;     use Debug;
  with Elists;
! with Errout;    use Errout;
  with Exp_CG;
  with Fmap;
! with Fname;     use Fname;
! with Fname.UF;  use Fname.UF;
  with Frontend;
! with Ghost;     use Ghost;
! with Gnatvsn;   use Gnatvsn;
  with Inline;
! with Lib;       use Lib;
! with Lib.Writ;  use Lib.Writ;
  with Lib.Xref;
! with Namet;     use Namet;
  with Nlists;
! with Opt;       use Opt;
! with Osint;     use Osint;
! with Osint.C;   use Osint.C;
! with Output;    use Output;
  with Par_SCO;
  with Prepcomp;
  with Repinfo;
  with Repinfo.Input;
  with Restrict;
! with Rident;    use Rident;
  with Rtsfind;
  with SCOs;
  with Sem;
--- 23,59 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Back_End;       use Back_End;
  with Checks;
  with Comperr;
  with Csets;
! with Debug;          use Debug;
  with Elists;
! with Errout;         use Errout;
  with Exp_CG;
  with Fmap;
! with Fname;          use Fname;
! with Fname.UF;       use Fname.UF;
  with Frontend;
! with Ghost;          use Ghost;
! with Gnatvsn;        use Gnatvsn;
  with Inline;
! with Lib;            use Lib;
! with Lib.Writ;       use Lib.Writ;
  with Lib.Xref;
! with Namet;          use Namet;
  with Nlists;
! with Opt;            use Opt;
! with Osint;          use Osint;
! with Osint.C;        use Osint.C;
! with Output;         use Output;
  with Par_SCO;
  with Prepcomp;
  with Repinfo;
  with Repinfo.Input;
  with Restrict;
! with Rident;         use Rident;
  with Rtsfind;
  with SCOs;
  with Sem;
*************** with Sem_Eval;
*** 65,88 ****
  with Sem_Prag;
  with Sem_Type;
  with Set_Targ;
! with Sinfo;     use Sinfo;
! with Sinput;    use Sinput;
! with Sinput.L;  use Sinput.L;
! with Snames;    use Snames;
! with Sprint;    use Sprint;
  with Stringt;
! with Stylesw;   use Stylesw;
! with Targparm;  use Targparm;
  with Tbuild;
! with Treepr;    use Treepr;
  with Ttypes;
! with Types;     use Types;
  with Uintp;
! with Uname;     use Uname;
  with Urealp;
  with Usage;
! with Validsw;   use Validsw;
! with Warnsw;    use Warnsw;
  
  with System.Assertions;
  with System.OS_Lib;
--- 65,89 ----
  with Sem_Prag;
  with Sem_Type;
  with Set_Targ;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinput;         use Sinput;
! with Sinput.L;       use Sinput.L;
! with Snames;         use Snames;
! with Sprint;         use Sprint;
  with Stringt;
! with Stylesw;        use Stylesw;
! with Targparm;       use Targparm;
  with Tbuild;
! with Treepr;         use Treepr;
  with Ttypes;
! with Types;          use Types;
  with Uintp;
! with Uname;          use Uname;
  with Urealp;
  with Usage;
! with Validsw;        use Validsw;
! with Warnsw;         use Warnsw;
  
  with System.Assertions;
  with System.OS_Lib;
*************** procedure Gnat1drv is
*** 144,155 ****
     --  Start of processing for Adjust_Global_Switches
  
     begin
-       --  Define pragma GNAT_Annotate as an alias of pragma Annotate, to be
-       --  able to work around bootstrap limitations with the old syntax of
-       --  pragma Annotate, and use pragma GNAT_Annotate in compiler sources
-       --  when needed.
  
!       Map_Pragma_Name (From => Name_Gnat_Annotate, To => Name_Annotate);
  
        --  -gnatd.M enables Relaxed_RM_Semantics
  
--- 145,156 ----
     --  Start of processing for Adjust_Global_Switches
  
     begin
  
!       --  -gnatd_U disables prepending error messages with "error:"
! 
!       if Debug_Flag_Underscore_UU then
!          Unique_Error_Tag := False;
!       end if;
  
        --  -gnatd.M enables Relaxed_RM_Semantics
  
*************** procedure Gnat1drv is
*** 423,428 ****
--- 424,435 ----
           if Warning_Mode = Suppress then
              Debug_Flag_MM := True;
           end if;
+ 
+          --  The implementation of 'Value that uses a perfect hash function
+          --  is significantly more complex and harder to initialize than the
+          --  old implementation. Deactivate it for CodePeer.
+ 
+          Debug_Flag_Underscore_H := True;
        end if;
  
        --  Enable some individual switches that are implied by relaxed RM
*************** procedure Gnat1drv is
*** 565,570 ****
--- 572,581 ----
  
           Tagged_Type_Expansion := False;
  
+          --  Force the use of "error:" prefix for error messages
+ 
+          Unique_Error_Tag := True;
+ 
           --  Detect that the runtime library support for floating-point numbers
           --  may not be compatible with SPARK analysis of IEEE-754 floats.
  
*************** procedure Gnat1drv is
*** 600,611 ****
           Ttypes.Target_Strict_Alignment := True;
        end if;
  
-       --  Increase size of allocated entities if debug flag -gnatd.N is set
- 
-       if Debug_Flag_Dot_NN then
-          Atree.Num_Extension_Nodes := Atree.Num_Extension_Nodes + 1;
-       end if;
- 
        --  Disable static allocation of dispatch tables if -gnatd.t is enabled.
        --  The front end's layout phase currently treats types that have
        --  discriminant-dependent arrays as not being static even when a
--- 611,616 ----
*************** procedure Gnat1drv is
*** 623,635 ****
        end if;
  
        --  Set and check exception mechanism. This is only meaningful when
!       --  compiling, and in particular not meaningful for special modes used
!       --  for program analysis rather than compilation: CodePeer mode and
!       --  GNATprove mode.
  
!       if Operating_Mode = Generate_Code
!         and then not (CodePeer_Mode or GNATprove_Mode)
!       then
           case Targparm.Frontend_Exceptions_On_Target is
              when True =>
                 case Targparm.ZCX_By_Default_On_Target is
--- 628,636 ----
        end if;
  
        --  Set and check exception mechanism. This is only meaningful when
!       --  generating code.
  
!       if Operating_Mode = Generate_Code then
           case Targparm.Frontend_Exceptions_On_Target is
              when True =>
                 case Targparm.ZCX_By_Default_On_Target is
*************** procedure Gnat1drv is
*** 819,824 ****
--- 820,831 ----
             Ttypes.Standard_Long_Long_Integer_Size;
        end if;
  
+       --  Forcefully use a 32-bit Duration with only 32-bit integer types
+ 
+       if Ttypes.System_Max_Integer_Size < 64 then
+          Targparm.Duration_32_Bits_On_Target := True;
+       end if;
+ 
        --  Finally capture adjusted value of Suppress_Options as the initial
        --  value for Scope_Suppress, which will be modified as we move from
        --  scope to scope (by Suppress/Unsuppress/Overflow_Checks pragmas).
*************** begin
*** 1081,1090 ****
        --  Lib.Initialize needs to be called before Scan_Compiler_Arguments,
        --  because it initializes a table filled by Scan_Compiler_Arguments.
  
-       --  Atree.Initialize needs to be called after Scan_Compiler_Arguments,
-       --  because the value specified by the -gnaten switch is used by
-       --  Atree.Initialize.
- 
        Osint.Initialize;
        Fmap.Reset_Tables;
        Lib.Initialize;
--- 1088,1093 ----
*************** begin
*** 1284,1312 ****
           Exit_Program (E_Errors);
        end if;
  
-       --  Set Generate_Code on main unit and its spec. We do this even if are
-       --  not generating code, since Lib-Writ uses this to determine which
-       --  units get written in the ali file.
- 
-       Set_Generate_Code (Main_Unit);
- 
-       --  If we have a corresponding spec, and it comes from source or it is
-       --  not a generated spec for a child subprogram body, then we need object
-       --  code for the spec unit as well.
- 
-       if Nkind (Unit (Main_Unit_Node)) in N_Unit_Body
-         and then not Acts_As_Spec (Main_Unit_Node)
-       then
-          if Nkind (Unit (Main_Unit_Node)) = N_Subprogram_Body
-            and then not Comes_From_Source (Library_Unit (Main_Unit_Node))
-          then
-             null;
-          else
-             Set_Generate_Code
-               (Get_Cunit_Unit_Number (Library_Unit (Main_Unit_Node)));
-          end if;
-       end if;
- 
        --  Case of no code required to be generated, exit indicating no error
  
        if Original_Operating_Mode = Check_Syntax then
--- 1287,1292 ----
*************** begin
*** 1435,1452 ****
  
        if Back_End_Mode = Skip then
  
!          --  An ignored Ghost unit is rewritten into a null statement because
!          --  it must not produce an ALI or object file. Do not emit any errors
!          --  related to code generation because the unit does not exist.
  
           if Is_Ignored_Ghost_Unit (Main_Unit_Node) then
  
              --  Exit the gnat driver with success, otherwise external builders
              --  such as gnatmake and gprbuild will treat the compilation of an
!             --  ignored Ghost unit as a failure. Note that this will produce
!             --  an empty object file for the unit.
  
              Ecode := E_Success;
  
           --  Otherwise the unit is missing a crucial piece that prevents code
           --  generation.
--- 1415,1433 ----
  
        if Back_End_Mode = Skip then
  
!          --  An ignored Ghost unit is rewritten into a null statement. Do
!          --  not emit any errors related to code generation because the
!          --  unit does not exist.
  
           if Is_Ignored_Ghost_Unit (Main_Unit_Node) then
  
              --  Exit the gnat driver with success, otherwise external builders
              --  such as gnatmake and gprbuild will treat the compilation of an
!             --  ignored Ghost unit as a failure. Be sure we produce an empty
!             --  object file for the unit.
  
              Ecode := E_Success;
+             Back_End.Gen_Or_Update_Object_File;
  
           --  Otherwise the unit is missing a crucial piece that prevents code
           --  generation.
*************** begin
*** 1518,1528 ****
           Namet.Finalize;
           Check_Rep_Info;
  
!          --  Exit the driver with an appropriate status indicator. This will
!          --  generate an empty object file for ignored Ghost units, otherwise
!          --  no object file will be generated.
  
!          Exit_Program (Ecode);
        end if;
  
        --  In -gnatc mode we only do annotation if -gnatR is also set, or if
--- 1499,1517 ----
           Namet.Finalize;
           Check_Rep_Info;
  
!          if Ecode /= E_Success then
!             --  If we cannot generate code, exit the driver with an appropriate
!             --  status indicator.
  
!             Exit_Program (Ecode);
! 
!          else
!             --  Otherwise use a goto so that finalization occurs normally and
!             --  for instance any late processing in the GCC code can be
!             --  performed.
! 
!             goto End_Of_Program;
!          end if;
        end if;
  
        --  In -gnatc mode we only do annotation if -gnatR is also set, or if
*************** begin
*** 1636,1642 ****
  
        Errout.Finalize (Last_Call => True);
        Errout.Output_Messages;
!       Repinfo.List_Rep_Info (Ttypes.Bytes_Big_Endian);
        Inline.List_Inlining_Info;
  
        --  Only write the library if the backend did not generate any error
--- 1625,1638 ----
  
        Errout.Finalize (Last_Call => True);
        Errout.Output_Messages;
! 
!       --  Back annotation of representation info is not done in CodePeer and
!       --  SPARK modes.
! 
!       if not (Generate_SCIL or GNATprove_Mode) then
!          Repinfo.List_Rep_Info (Ttypes.Bytes_Big_Endian);
!       end if;
! 
        Inline.List_Inlining_Info;
  
        --  Only write the library if the backend did not generate any error
diff -Nrcpad gcc-11.3.0/gcc/ada/gnat1drv.ads gcc-12.1.0/gcc/ada/gnat1drv.ads
*** gcc-11.3.0/gcc/ada/gnat1drv.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnat1drv.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnat_cuda.adb gcc-12.1.0/gcc/ada/gnat_cuda.adb
*** gcc-11.3.0/gcc/ada/gnat_cuda.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnat_cuda.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
***************
*** 25,44 ****
  
  --  This package defines CUDA-specific datastructures and functions.
  
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Elists;   use Elists;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Rtsfind;  use Rtsfind;
! with Sinfo;    use Sinfo;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Sem;      use Sem;
! with Sem_Util; use Sem_Util;
! with Snames;   use Snames;
  
  with GNAT.HTable;
  
--- 25,49 ----
  
  --  This package defines CUDA-specific datastructures and functions.
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Util;       use Sem_Util;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo;          use Sinfo;
! with Snames;         use Snames;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
  
  with GNAT.HTable;
  
*************** package body GNAT_CUDA is
*** 54,59 ****
--- 59,76 ----
     function Hash (F : Entity_Id) return Hash_Range;
     --  Hash function for hash table
  
+    package CUDA_Device_Entities_Table is new
+      GNAT.HTable.Simple_HTable
+        (Header_Num => Hash_Range,
+         Element    => Elist_Id,
+         No_Element => No_Elist,
+         Key        => Entity_Id,
+         Hash       => Hash,
+         Equal      => "=");
+    --  The keys of this table are package entities whose bodies contain at
+    --  least one procedure marked with aspect CUDA_Device. The values are
+    --  Elists of the marked entities.
+ 
     package CUDA_Kernels_Table is new
       GNAT.HTable.Simple_HTable
         (Header_Num => Hash_Range,
*************** package body GNAT_CUDA is
*** 66,75 ****
     --  least one procedure marked with aspect CUDA_Global. The values are
     --  Elists of the marked procedures.
  
     function Get_CUDA_Kernels (Pack_Id : Entity_Id) return Elist_Id;
     --  Returns an Elist of all procedures marked with pragma CUDA_Global that
!    --  are declared within package body Pack_Body. Returns No_Elist if
!    --  Pack_Id does not contain such procedures.
  
     procedure Set_CUDA_Kernels
       (Pack_Id : Entity_Id;
--- 83,137 ----
     --  least one procedure marked with aspect CUDA_Global. The values are
     --  Elists of the marked procedures.
  
+    procedure Build_And_Insert_CUDA_Initialization (N : Node_Id);
+    --  Builds declarations necessary for CUDA initialization and inserts them
+    --  in N, the package body that contains CUDA_Global nodes. These
+    --  declarations are:
+    --
+    --    * A symbol to hold the pointer P to the CUDA fat binary.
+    --
+    --    * A type definition T for a wrapper that contains the pointer to the
+    --      CUDA fat binary.
+    --
+    --    * An object of the aforementioned type to hold the aforementioned
+    --      pointer.
+    --
+    --    * For each CUDA_Global procedure in the package, a declaration of a C
+    --      string containing the function's name.
+    --
+    --    * A procedure that takes care of calling CUDA functions that register
+    --      CUDA_Global procedures with the runtime.
+ 
+    procedure Empty_CUDA_Global_Subprograms (Pack_Id : Entity_Id);
+    --  For all subprograms marked CUDA_Global in Pack_Id, remove declarations
+    --  and replace statements with a single null statement.
+    --  This is required because CUDA_Global subprograms could be referring to
+    --  device-only symbols, which would result in unknown symbols at link time
+    --  if kept around.
+    --  We choose to empty CUDA_Global subprograms rather than completely
+    --  removing them from the package because registering CUDA_Global
+    --  subprograms with the CUDA runtime on the host requires knowing the
+    --  subprogram's host-side address.
+ 
+    function Get_CUDA_Device_Entities (Pack_Id : Entity_Id) return Elist_Id;
+    --  Returns an Elist of all entities marked with pragma CUDA_Device that
+    --  are declared within package body Pack_Body. Returns No_Elist if Pack_Id
+    --  does not contain such entities.
+ 
     function Get_CUDA_Kernels (Pack_Id : Entity_Id) return Elist_Id;
     --  Returns an Elist of all procedures marked with pragma CUDA_Global that
!    --  are declared within package body Pack_Body. Returns No_Elist if Pack_Id
!    --  does not contain such procedures.
! 
!    procedure Remove_CUDA_Device_Entities (Pack_Id : Entity_Id);
!    --  Removes all entities marked with the CUDA_Device pragma from package
!    --  Pack_Id. Must only be called when compiling for the host.
! 
!    procedure Set_CUDA_Device_Entities
!      (Pack_Id : Entity_Id;
!       E       : Elist_Id);
!    --  Stores E as the list of CUDA_Device entities belonging to the package
!    --  entity Pack_Id. Pack_Id must not have a list of device entities.
  
     procedure Set_CUDA_Kernels
       (Pack_Id : Entity_Id;
*************** package body GNAT_CUDA is
*** 77,82 ****
--- 139,161 ----
     --  Stores Kernels as the list of kernels belonging to the package entity
     --  Pack_Id. Pack_Id must not have a list of kernels.
  
+    ----------------------------
+    -- Add_CUDA_Device_Entity --
+    ----------------------------
+ 
+    procedure Add_CUDA_Device_Entity
+      (Pack_Id : Entity_Id;
+       E       : Entity_Id)
+    is
+       Device_Entities : Elist_Id := Get_CUDA_Device_Entities (Pack_Id);
+    begin
+       if Device_Entities = No_Elist then
+          Device_Entities := New_Elmt_List;
+          Set_CUDA_Device_Entities (Pack_Id, Device_Entities);
+       end if;
+       Append_Elmt (E, Device_Entities);
+    end Add_CUDA_Device_Entity;
+ 
     ---------------------
     -- Add_CUDA_Kernel --
     ---------------------
*************** package body GNAT_CUDA is
*** 94,99 ****
--- 173,253 ----
        Append_Elmt (Kernel, Kernels);
     end Add_CUDA_Kernel;
  
+    -----------------------------------
+    -- Empty_CUDA_Global_Subprograms --
+    -----------------------------------
+ 
+    procedure Empty_CUDA_Global_Subprograms (Pack_Id : Entity_Id) is
+       Spec_Id     : constant Node_Id := Corresponding_Spec (Pack_Id);
+       Kernels     : constant Elist_Id := Get_CUDA_Kernels (Spec_Id);
+       Kernel_Elm  : Elmt_Id;
+       Kernel      : Entity_Id;
+       Kernel_Body : Node_Id;
+       Null_Body   : Entity_Id;
+       Loc         : Source_Ptr;
+    begin
+       --  It is an error to empty CUDA_Global subprograms when not compiling
+       --  for the host.
+       pragma Assert (Debug_Flag_Underscore_C);
+ 
+       if No (Kernels) then
+          return;
+       end if;
+ 
+       Kernel_Elm := First_Elmt (Kernels);
+       while Present (Kernel_Elm) loop
+          Kernel := Node (Kernel_Elm);
+          Kernel_Body := Subprogram_Body (Kernel);
+          Loc := Sloc (Kernel_Body);
+ 
+          Null_Body := Make_Subprogram_Body (Loc,
+            Specification              => Subprogram_Specification (Kernel),
+            Declarations               => New_List,
+            Handled_Statement_Sequence =>
+              Make_Handled_Sequence_Of_Statements (Loc,
+                Statements => New_List (Make_Null_Statement (Loc))));
+ 
+          Rewrite (Kernel_Body, Null_Body);
+ 
+          Next_Elmt (Kernel_Elm);
+       end loop;
+    end Empty_CUDA_Global_Subprograms;
+ 
+    -------------------------
+    -- Expand_CUDA_Package --
+    -------------------------
+ 
+    procedure Expand_CUDA_Package (N : Node_Id) is
+    begin
+ 
+       --  If not compiling for the host, do not do anything.
+ 
+       if not Debug_Flag_Underscore_C then
+          return;
+       end if;
+ 
+       --  Remove the content (both declarations and statements) of CUDA_Global
+       --  procedures. This is required because CUDA_Global functions could be
+       --  referencing entities available only on the device, which would result
+       --  in unknown symbol errors at link time.
+ 
+       Empty_CUDA_Global_Subprograms (N);
+ 
+       --  Remove CUDA_Device entities (except if they are also CUDA_Host), as
+       --  they can only be referenced from the device and might reference
+       --  device-only symbols.
+ 
+       Remove_CUDA_Device_Entities
+         (Package_Specification (Corresponding_Spec (N)));
+ 
+       --  If procedures marked with CUDA_Global have been defined within N,
+       --  we need to register them with the CUDA runtime at program startup.
+       --  This requires multiple declarations and function calls which need
+       --  to be appended to N's declarations.
+ 
+       Build_And_Insert_CUDA_Initialization (N);
+    end Expand_CUDA_Package;
+ 
     ----------
     -- Hash --
     ----------
*************** package body GNAT_CUDA is
*** 103,108 ****
--- 257,271 ----
        return Hash_Range (F mod 511);
     end Hash;
  
+    ------------------------------
+    -- Get_CUDA_Device_Entities --
+    ------------------------------
+ 
+    function Get_CUDA_Device_Entities (Pack_Id : Entity_Id) return Elist_Id is
+    begin
+       return CUDA_Device_Entities_Table.Get (Pack_Id);
+    end Get_CUDA_Device_Entities;
+ 
     ----------------------
     -- Get_CUDA_Kernels --
     ----------------------
*************** package body GNAT_CUDA is
*** 249,255 ****
           --  function.
  
           New_Stmt : Node_Id;
!          --  Temporary variable to hold the various newly-created nodes.
  
           Kernel_Elmt : Elmt_Id;
           Kernel_Id   : Entity_Id;
--- 412,418 ----
           --  function.
  
           New_Stmt : Node_Id;
!          --  Temporary variable to hold the various newly-created nodes
  
           Kernel_Elmt : Elmt_Id;
           Kernel_Id   : Entity_Id;
*************** package body GNAT_CUDA is
*** 266,273 ****
           while Present (Kernel_Elmt) loop
              Kernel_Id := Node (Kernel_Elmt);
  
!             New_Stmt :=
!               Build_Kernel_Name_Declaration (Kernel_Id);
              Append (New_Stmt, Pack_Decls);
              Analyze (New_Stmt);
  
--- 429,435 ----
           while Present (Kernel_Elmt) loop
              Kernel_Id := Node (Kernel_Elmt);
  
!             New_Stmt := Build_Kernel_Name_Declaration (Kernel_Id);
              Append (New_Stmt, Pack_Decls);
              Analyze (New_Stmt);
  
*************** package body GNAT_CUDA is
*** 366,372 ****
                 Make_Aggregate (Loc,
                   Expressions => New_List (
                     Make_Integer_Literal (Loc, UI_From_Int (16#466243b1#)),
!                    Make_Integer_Literal (Loc, UI_From_Int (1)),
                     Make_Attribute_Reference (Loc,
                       Prefix         => New_Occurrence_Of (Bin_Id, Loc),
                       Attribute_Name => Name_Address),
--- 528,534 ----
                 Make_Aggregate (Loc,
                   Expressions => New_List (
                     Make_Integer_Literal (Loc, UI_From_Int (16#466243b1#)),
!                    Make_Integer_Literal (Loc, Uint_1),
                     Make_Attribute_Reference (Loc,
                       Prefix         => New_Occurrence_Of (Bin_Id, Loc),
                       Attribute_Name => Name_Address),
*************** package body GNAT_CUDA is
*** 452,490 ****
        is
           Args : constant List_Id := New_List;
        begin
!          --  First argument: the handle of the fat binary.
  
           Append (New_Occurrence_Of (Bin, Loc), Args);
  
!          --  Second argument: the host address of the function that is
!          --  marked with CUDA_Global.
  
           Append_To (Args,
             Make_Attribute_Reference (Loc,
               Prefix         => New_Occurrence_Of (Kernel, Loc),
               Attribute_Name => Name_Address));
  
!          --  Third argument, the name of the function on the host.
  
           Append (New_Occurrence_Of (Kernel_Name, Loc), Args);
  
!          --  Fourth argument, the name of the function on the device.
  
           Append (New_Occurrence_Of (Kernel_Name, Loc), Args);
  
           --  Fith argument: -1. Meaning unknown - this has been copied from
           --  LLVM.
  
!          Append (Make_Integer_Literal (Loc, UI_From_Int (-1)), Args);
  
!          --  Args 6, 7, 8, 9, 10: Null pointers. Again, meaning unknown.
  
!          for Arg_Count in 1 .. 5 loop
              Append_To (Args, New_Occurrence_Of (RTE (RE_Null_Address), Loc));
           end loop;
  
!          --  Build the call to CUDARegisterFunction, passing the argument
!          --  list we just built.
  
           return
             Make_Procedure_Call_Statement (Loc,
--- 614,652 ----
        is
           Args : constant List_Id := New_List;
        begin
!          --  First argument: the handle of the fat binary
  
           Append (New_Occurrence_Of (Bin, Loc), Args);
  
!          --  Second argument: the host address of the function that is marked
!          --  with CUDA_Global.
  
           Append_To (Args,
             Make_Attribute_Reference (Loc,
               Prefix         => New_Occurrence_Of (Kernel, Loc),
               Attribute_Name => Name_Address));
  
!          --  Third argument, the name of the function on the host
  
           Append (New_Occurrence_Of (Kernel_Name, Loc), Args);
  
!          --  Fourth argument, the name of the function on the device
  
           Append (New_Occurrence_Of (Kernel_Name, Loc), Args);
  
           --  Fith argument: -1. Meaning unknown - this has been copied from
           --  LLVM.
  
!          Append (Make_Integer_Literal (Loc, Uint_Minus_1), Args);
  
!          --  Args 6, 7, 8, 9, 10: Null pointers. Again, meaning unknown
  
!          for Arg_Count in 6 .. 10 loop
              Append_To (Args, New_Occurrence_Of (RTE (RE_Null_Address), Loc));
           end loop;
  
!          --  Build the call to CUDARegisterFunction, passing the argument list
!          --  we just built.
  
           return
             Make_Procedure_Call_Statement (Loc,
*************** package body GNAT_CUDA is
*** 498,518 ****
        Loc : constant Source_Ptr := Sloc (N);
  
        Spec_Id : constant Node_Id := Corresponding_Spec (N);
!       --  The specification of the package we're adding a cuda init func to.
  
        Pack_Decls : constant List_Id := Declarations (N);
  
        CUDA_Node_List : constant Elist_Id := Get_CUDA_Kernels (Spec_Id);
!       --  CUDA nodes that belong to the package.
  
        CUDA_Init_Func : Entity_Id;
!       --  Entity of the cuda init func.
  
        Fat_Binary : Entity_Id;
!       --  Entity of the fat binary of N. Bound to said fat binary by a pragma.
  
        Fat_Binary_Handle : Entity_Id;
!       --  Entity of the result of passing the fat binary wrapper to.
        --  CUDA.Register_Fat_Binary.
  
        Fat_Binary_Wrapper : Entity_Id;
--- 660,680 ----
        Loc : constant Source_Ptr := Sloc (N);
  
        Spec_Id : constant Node_Id := Corresponding_Spec (N);
!       --  The specification of the package we're adding a cuda init func to
  
        Pack_Decls : constant List_Id := Declarations (N);
  
        CUDA_Node_List : constant Elist_Id := Get_CUDA_Kernels (Spec_Id);
!       --  CUDA nodes that belong to the package
  
        CUDA_Init_Func : Entity_Id;
!       --  Entity of the cuda init func
  
        Fat_Binary : Entity_Id;
!       --  Entity of the fat binary of N. Bound to said fat binary by a pragma
  
        Fat_Binary_Handle : Entity_Id;
!       --  Entity of the result of passing the fat binary wrapper to
        --  CUDA.Register_Fat_Binary.
  
        Fat_Binary_Wrapper : Entity_Id;
*************** package body GNAT_CUDA is
*** 525,531 ****
     --  Start of processing for Build_And_Insert_CUDA_Initialization
  
     begin
!       if CUDA_Node_List = No_Elist or not Debug_Flag_Underscore_C then
           return;
        end if;
  
--- 687,693 ----
     --  Start of processing for Build_And_Insert_CUDA_Initialization
  
     begin
!       if CUDA_Node_List = No_Elist then
           return;
        end if;
  
*************** package body GNAT_CUDA is
*** 570,578 ****
        Analyze (New_Stmt);
     end Build_And_Insert_CUDA_Initialization;
  
!    --------------------
!    -- Set_CUDA_Nodes --
!    --------------------
  
     procedure Set_CUDA_Kernels
       (Pack_Id : Entity_Id;
--- 732,801 ----
        Analyze (New_Stmt);
     end Build_And_Insert_CUDA_Initialization;
  
!    ---------------------------------
!    -- Remove_CUDA_Device_Entities --
!    ---------------------------------
! 
!    procedure Remove_CUDA_Device_Entities (Pack_Id : Entity_Id) is
!       Device_Entities : constant Elist_Id :=
!         Get_CUDA_Device_Entities (Pack_Id);
!       Device_Elmt     : Elmt_Id;
!       Device_Entity   : Entity_Id;
!       Bod             : Node_Id;
!    begin
!       pragma Assert (Debug_Flag_Underscore_C);
! 
!       if Device_Entities = No_Elist then
!          return;
!       end if;
! 
!       Device_Elmt := First_Elmt (Device_Entities);
!       while Present (Device_Elmt) loop
!          Device_Entity := Node (Device_Elmt);
!          Next_Elmt (Device_Elmt);
! 
!          case Ekind (Device_Entity) is
!             when E_Function | E_Procedure =>
!                Bod := Subprogram_Body (Device_Entity);
! 
!                if Nkind (Parent (Bod)) = N_Subunit
!                  and then Present (Corresponding_Stub (Parent (Bod)))
!                then
!                   Error_Msg_N
!                     ("Cuda_Device not suported on separate subprograms",
!                      Corresponding_Stub (Parent (Bod)));
!                else
!                   Remove (Bod);
!                   Remove (Subprogram_Spec (Device_Entity));
!                end if;
! 
!             when E_Variable | E_Constant =>
!                Remove (Declaration_Node (Device_Entity));
! 
!             when others =>
!                pragma Assert (False);
!          end case;
! 
!          Remove_Entity_And_Homonym (Device_Entity);
!       end loop;
!    end Remove_CUDA_Device_Entities;
! 
!    ------------------------------
!    -- Set_CUDA_Device_Entities --
!    ------------------------------
! 
!    procedure Set_CUDA_Device_Entities
!      (Pack_Id : Entity_Id;
!       E       : Elist_Id)
!    is
!    begin
!       pragma Assert (Get_CUDA_Device_Entities (Pack_Id) = No_Elist);
!       CUDA_Device_Entities_Table.Set (Pack_Id, E);
!    end Set_CUDA_Device_Entities;
! 
!    ----------------------
!    -- Set_CUDA_Kernels --
!    ----------------------
  
     procedure Set_CUDA_Kernels
       (Pack_Id : Entity_Id;
diff -Nrcpad gcc-11.3.0/gcc/ada/gnat_cuda.ads gcc-12.1.0/gcc/ada/gnat_cuda.ads
*** gcc-11.3.0/gcc/ada/gnat_cuda.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnat_cuda.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
*************** with Types; use Types;
*** 77,107 ****
  
  package GNAT_CUDA is
  
     procedure Add_CUDA_Kernel (Pack_Id : Entity_Id; Kernel : Entity_Id);
     --  Add Kernel to the list of CUDA_Global nodes that belong to Pack_Id.
     --  Kernel is a procedure entity marked with CUDA_Global, Pack_Id is the
     --  entity of its parent package body.
  
!    procedure Build_And_Insert_CUDA_Initialization (N : Node_Id);
!    --  Builds declarations necessary for CUDA initialization and inserts them
!    --  in N, the package body that contains CUDA_Global nodes. These
!    --  declarations are:
!    --
!    --    * A symbol to hold the pointer to the CUDA fat binary
!    --
!    --    * A type definition for a wrapper that contains the pointer to the
!    --      CUDA fat binary
!    --
!    --    * An object of the aforementioned type to hold the aforementioned
!    --      pointer.
!    --
!    --    * For each CUDA_Global procedure in the package, a declaration of a C
!    --      string containing the function's name.
!    --
!    --    * A function that takes care of calling CUDA functions that register
!    --      CUDA_Global procedures with the runtime.
!    --
!    --    * A boolean that holds the result of the call to the aforementioned
!    --      function.
  
  end GNAT_CUDA;
--- 77,95 ----
  
  package GNAT_CUDA is
  
+    procedure Add_CUDA_Device_Entity (Pack_Id : Entity_Id; E : Entity_Id);
+    --  And E to the list of CUDA_Device entities that belong to Pack_Id
+ 
     procedure Add_CUDA_Kernel (Pack_Id : Entity_Id; Kernel : Entity_Id);
     --  Add Kernel to the list of CUDA_Global nodes that belong to Pack_Id.
     --  Kernel is a procedure entity marked with CUDA_Global, Pack_Id is the
     --  entity of its parent package body.
  
!    procedure Expand_CUDA_Package (N : Node_Id);
!    --  When compiling for the host:
!    --  - Generate code to register kernels with the CUDA runtime and
!    --    post-process kernels.
!    --  - Empty content of CUDA_Global procedures.
!    --  - Remove declarations of CUDA_Device entities.
  
  end GNAT_CUDA;
diff -Nrcpad gcc-11.3.0/gcc/ada/gnat_rm.texi gcc-12.1.0/gcc/ada/gnat_rm.texi
*** gcc-11.3.0/gcc/ada/gnat_rm.texi	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnat_rm.texi	Fri May  6 07:30:56 2022
***************
*** 3,9 ****
  @setfilename gnat_rm.info
  @documentencoding UTF-8
  @ifinfo
! @*Generated by Sphinx 1.4.6.@*
  @end ifinfo
  @settitle GNAT Reference Manual
  @defindex ge
--- 3,9 ----
  @setfilename gnat_rm.info
  @documentencoding UTF-8
  @ifinfo
! @*Generated by Sphinx 4.3.1.@*
  @end ifinfo
  @settitle GNAT Reference Manual
  @defindex ge
***************
*** 21,31 ****
  
  @copying
  @quotation
! GNAT Reference Manual , Dec 11, 2020
  
  AdaCore
  
! Copyright @copyright{} 2008-2021, Free Software Foundation
  @end quotation
  
  @end copying
--- 21,31 ----
  
  @copying
  @quotation
! GNAT Reference Manual , Jan 03, 2022
  
  AdaCore
  
! Copyright @copyright{} 2008-2022, Free Software Foundation
  @end quotation
  
  @end copying
*************** AdaCore
*** 58,65 ****
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
  any later version published by the Free Software Foundation; with no
! Invariant Sections, with the Front-Cover Texts being "GNAT Reference
! Manual", and with no Back-Cover Texts.  A copy of the license is
  included in the section entitled @ref{1,,GNU Free Documentation License}.
  
  @menu
--- 58,65 ----
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3 or
  any later version published by the Free Software Foundation; with no
! Invariant Sections, with the Front-Cover Texts being “GNAT Reference
! Manual”, and with no Back-Cover Texts.  A copy of the license is
  included in the section entitled @ref{1,,GNU Free Documentation License}.
  
  @menu
*************** included in the section entitled @ref{1,
*** 79,84 ****
--- 79,85 ----
  * Specialized Needs Annexes:: 
  * Implementation of Specific Ada Features:: 
  * Implementation of Ada 2012 Features:: 
+ * Security Hardening Features:: 
  * Obsolescent Features:: 
  * Compatibility and Porting Guide:: 
  * GNU Free Documentation License:: 
*************** Implementation Defined Pragmas
*** 123,130 ****
  * Pragma Common_Object:: 
  * Pragma Compile_Time_Error:: 
  * Pragma Compile_Time_Warning:: 
- * Pragma Compiler_Unit:: 
- * Pragma Compiler_Unit_Warning:: 
  * Pragma Complete_Representation:: 
  * Pragma Complex_Representation:: 
  * Pragma Component_Alignment:: 
--- 124,129 ----
*************** Implementation Defined Pragmas
*** 154,160 ****
  * Pragma Export_Function:: 
  * Pragma Export_Object:: 
  * Pragma Export_Procedure:: 
- * Pragma Export_Value:: 
  * Pragma Export_Valued_Procedure:: 
  * Pragma Extend_System:: 
  * Pragma Extensions_Allowed:: 
--- 153,158 ----
*************** Implementation Defined Pragmas
*** 225,231 ****
  * Pragma Post:: 
  * Pragma Postcondition:: 
  * Pragma Post_Class:: 
- * Pragma Rename_Pragma:: 
  * Pragma Pre:: 
  * Pragma Precondition:: 
  * Pragma Predicate:: 
--- 223,228 ----
*************** Implementation Defined Pragmas
*** 248,253 ****
--- 245,251 ----
  * Pragma Refined_State:: 
  * Pragma Relative_Deadline:: 
  * Pragma Remote_Access_Type:: 
+ * Pragma Rename_Pragma:: 
  * Pragma Restricted_Run_Time:: 
  * Pragma Restriction_Warnings:: 
  * Pragma Reviewable:: 
*************** Implementation Defined Pragmas
*** 282,288 ****
  * Pragma Unevaluated_Use_Of_Old:: 
  * Pragma Unimplemented_Unit:: 
  * Pragma Universal_Aliasing:: 
- * Pragma Universal_Data:: 
  * Pragma Unmodified:: 
  * Pragma Unreferenced:: 
  * Pragma Unreferenced_Objects:: 
--- 280,285 ----
*************** Implementation Defined Aspects
*** 322,328 ****
  * Aspect Initializes:: 
  * Aspect Inline_Always:: 
  * Aspect Invariant:: 
! * Aspect Invariant'Class:: 
  * Aspect Iterable:: 
  * Aspect Linker_Section:: 
  * Aspect Lock_Free:: 
--- 319,325 ----
  * Aspect Initializes:: 
  * Aspect Inline_Always:: 
  * Aspect Invariant:: 
! * Aspect Invariant’Class:: 
  * Aspect Iterable:: 
  * Aspect Linker_Section:: 
  * Aspect Lock_Free:: 
*************** Implementation Defined Aspects
*** 331,336 ****
--- 328,334 ----
  * Aspect No_Elaboration_Code_All:: 
  * Aspect No_Inline:: 
  * Aspect No_Tagged_Streams:: 
+ * Aspect No_Task_Parts:: 
  * Aspect Object_Size:: 
  * Aspect Obsolescent:: 
  * Aspect Part_Of:: 
*************** Implementation Defined Aspects
*** 354,360 ****
  * Aspect Test_Case:: 
  * Aspect Thread_Local_Storage:: 
  * Aspect Universal_Aliasing:: 
- * Aspect Universal_Data:: 
  * Aspect Unmodified:: 
  * Aspect Unreferenced:: 
  * Aspect Unreferenced_Objects:: 
--- 352,357 ----
*************** Implementation Defined Attributes
*** 438,443 ****
--- 435,441 ----
  * Attribute Universal_Literal_String:: 
  * Attribute Unrestricted_Access:: 
  * Attribute Update:: 
+ * Attribute Valid_Image:: 
  * Attribute Valid_Scalars:: 
  * Attribute VADS_Size:: 
  * Attribute Value_Size:: 
*************** Partition-Wide Restrictions
*** 511,516 ****
--- 509,515 ----
  * No_Standard_Storage_Pools:: 
  * No_Stream_Optimizations:: 
  * No_Streams:: 
+ * No_Tagged_Type_Registration:: 
  * No_Task_Allocators:: 
  * No_Task_At_Interrupt_Priority:: 
  * No_Task_Attributes_Package:: 
*************** Partition-Wide Restrictions
*** 530,535 ****
--- 529,535 ----
  Program Unit Level Restrictions
  
  * No_Elaboration_Code:: 
+ * No_Dynamic_Accessibility_Checks:: 
  * No_Dynamic_Sized_Objects:: 
  * No_Entry_Queue:: 
  * No_Implementation_Aspect_Specifications:: 
*************** Implementation Advice
*** 558,564 ****
  * RM 3.5.5(8); Enumeration Values: RM 3 5 5 8 Enumeration Values. 
  * RM 3.5.7(17); Float Types: RM 3 5 7 17 Float Types. 
  * RM 3.6.2(11); Multidimensional Arrays: RM 3 6 2 11 Multidimensional Arrays. 
! * RM 9.6(30-31); Duration'Small: RM 9 6 30-31 Duration'Small. 
  * RM 10.2.1(12); Consistent Representation: RM 10 2 1 12 Consistent Representation. 
  * RM 11.4.1(19); Exception Information: RM 11 4 1 19 Exception Information. 
  * RM 11.5(28); Suppression of Checks: RM 11 5 28 Suppression of Checks. 
--- 558,564 ----
  * RM 3.5.5(8); Enumeration Values: RM 3 5 5 8 Enumeration Values. 
  * RM 3.5.7(17); Float Types: RM 3 5 7 17 Float Types. 
  * RM 3.6.2(11); Multidimensional Arrays: RM 3 6 2 11 Multidimensional Arrays. 
! * RM 9.6(30-31); Duration’Small: RM 9 6 30-31 Duration’Small. 
  * RM 10.2.1(12); Consistent Representation: RM 10 2 1 12 Consistent Representation. 
  * RM 11.4.1(19); Exception Information: RM 11 4 1 19 Exception Information. 
  * RM 11.5(28); Suppression of Checks: RM 11 5 28 Suppression of Checks. 
*************** Implementation Advice
*** 584,589 ****
--- 584,590 ----
  * RM A.4.4(106); Bounded-Length String Handling: RM A 4 4 106 Bounded-Length String Handling. 
  * RM A.5.2(46-47); Random Number Generation: RM A 5 2 46-47 Random Number Generation. 
  * RM A.10.7(23); Get_Immediate: RM A 10 7 23 Get_Immediate. 
+ * RM A.18; Containers: RM A 18 Containers. 
  * RM B.1(39-41); Pragma Export: RM B 1 39-41 Pragma Export. 
  * RM B.2(12-13); Package Interfaces: RM B 2 12-13 Package Interfaces. 
  * RM B.3(63-71); Interfacing with C: RM B 3 63-71 Interfacing with C. 
*************** Implementation of Specific Ada Features
*** 860,865 ****
--- 861,867 ----
  * GNAT Implementation of Shared Passive Packages:: 
  * Code Generation for Array Aggregates:: 
  * The Size of Discriminated Records with Default Discriminants:: 
+ * Image Values For Nonscalar Types:: 
  * Strict Conformance to the Ada Reference Manual:: 
  
  GNAT Implementation of Tasking
*************** Code Generation for Array Aggregates
*** 876,881 ****
--- 878,889 ----
  * Aggregates with nonstatic bounds:: 
  * Aggregates in assignment statements:: 
  
+ Security Hardening Features
+ 
+ * Register Scrubbing:: 
+ * Stack Scrubbing:: 
+ * Hardened Conditionals:: 
+ 
  Obsolescent Features
  
  * pragma No_Run_Time:: 
*************** Implementation-dependent characteristics
*** 913,919 ****
  @end menu
  
  @node About This Guide,Implementation Defined Pragmas,Top,Top
! @anchor{gnat_rm/about_this_guide about-this-guide}@anchor{2}@anchor{gnat_rm/about_this_guide doc}@anchor{3}@anchor{gnat_rm/about_this_guide gnat-reference-manual}@anchor{4}@anchor{gnat_rm/about_this_guide id1}@anchor{5}
  @chapter About This Guide
  
  
--- 921,927 ----
  @end menu
  
  @node About This Guide,Implementation Defined Pragmas,Top,Top
! @anchor{gnat_rm/about_this_guide doc}@anchor{2}@anchor{gnat_rm/about_this_guide about-this-guide}@anchor{3}@anchor{gnat_rm/about_this_guide gnat-reference-manual}@anchor{4}@anchor{gnat_rm/about_this_guide id1}@anchor{5}
  @chapter About This Guide
  
  
*************** invoked in Ada 83 compatibility mode.
*** 928,935 ****
  By default, GNAT assumes Ada 2012,
  but you can override with a compiler switch
  to explicitly specify the language version.
! (Please refer to the @emph{GNAT User's Guide} for details on these switches.)
! Throughout this manual, references to 'Ada' without a year suffix
  apply to all the Ada versions of the language.
  
  Ada is designed to be highly portable.
--- 936,943 ----
  By default, GNAT assumes Ada 2012,
  but you can override with a compiler switch
  to explicitly specify the language version.
! (Please refer to the @emph{GNAT User’s Guide} for details on these switches.)
! Throughout this manual, references to ‘Ada’ without a year suffix
  apply to all the Ada versions of the language.
  
  Ada is designed to be highly portable.
*************** of representation clauses and pragmas th
*** 1002,1008 ****
  
  @item 
  @ref{e,,Standard Library Routines}, provides a listing of packages and a
! brief description of the functionality that is provided by Ada's
  extensive set of standard library routines as implemented by GNAT.
  
  @item 
--- 1010,1016 ----
  
  @item 
  @ref{e,,Standard Library Routines}, provides a listing of packages and a
! brief description of the functionality that is provided by Ada’s
  extensive set of standard library routines as implemented by GNAT.
  
  @item 
*************** of the specialized needs annexes.
*** 1024,1030 ****
  
  @item 
  @ref{13,,Implementation of Specific Ada Features}, discusses issues related
! to GNAT's implementation of machine code insertions, tasking, and several
  other features.
  
  @item 
--- 1032,1038 ----
  
  @item 
  @ref{13,,Implementation of Specific Ada Features}, discusses issues related
! to GNAT’s implementation of machine code insertions, tasking, and several
  other features.
  
  @item 
*************** other features.
*** 1032,1044 ****
  GNAT implementation of the Ada 2012 language standard.
  
  @item 
! @ref{15,,Obsolescent Features} documents implementation dependent features,
  including pragmas and attributes, which are considered obsolescent, since
  there are other preferred ways of achieving the same results. These
  obsolescent forms are retained for backwards compatibility.
  
  @item 
! @ref{16,,Compatibility and Porting Guide} presents some guidelines for
  developing portable Ada code, describes the compatibility issues that
  may arise between GNAT and other Ada compilation systems (including those
  for Ada 83), and shows how GNAT can expedite porting applications
--- 1040,1056 ----
  GNAT implementation of the Ada 2012 language standard.
  
  @item 
! @ref{15,,Security Hardening Features} documents GNAT extensions aimed
! at security hardening.
! 
! @item 
! @ref{16,,Obsolescent Features} documents implementation dependent features,
  including pragmas and attributes, which are considered obsolescent, since
  there are other preferred ways of achieving the same results. These
  obsolescent forms are retained for backwards compatibility.
  
  @item 
! @ref{17,,Compatibility and Porting Guide} presents some guidelines for
  developing portable Ada code, describes the compatibility issues that
  may arise between GNAT and other Ada compilation systems (including those
  for Ada 83), and shows how GNAT can expedite porting applications
*************** All three reference manuals are included
*** 1061,1067 ****
  package.
  
  @node Conventions,Related Information,What This Reference Manual Contains,About This Guide
! @anchor{gnat_rm/about_this_guide conventions}@anchor{17}
  @section Conventions
  
  
--- 1073,1079 ----
  package.
  
  @node Conventions,Related Information,What This Reference Manual Contains,About This Guide
! @anchor{gnat_rm/about_this_guide conventions}@anchor{18}
  @section Conventions
  
  
*************** comprising the @code{$} character follow
*** 1108,1114 ****
  @end itemize
  
  @node Related Information,,Conventions,About This Guide
! @anchor{gnat_rm/about_this_guide related-information}@anchor{18}
  @section Related Information
  
  
--- 1120,1126 ----
  @end itemize
  
  @node Related Information,,Conventions,About This Guide
! @anchor{gnat_rm/about_this_guide related-information}@anchor{19}
  @section Related Information
  
  
*************** See the following documents for further
*** 1118,1124 ****
  @itemize *
  
  @item 
! @cite{GNAT User's Guide for Native Platforms},
  which provides information on how to use the
  GNAT development environment.
  
--- 1130,1136 ----
  @itemize *
  
  @item 
! @cite{GNAT User’s Guide for Native Platforms},
  which provides information on how to use the
  GNAT development environment.
  
*************** compiler system.
*** 1154,1160 ****
  @end itemize
  
  @node Implementation Defined Pragmas,Implementation Defined Aspects,About This Guide,Top
! @anchor{gnat_rm/implementation_defined_pragmas implementation-defined-pragmas}@anchor{7}@anchor{gnat_rm/implementation_defined_pragmas doc}@anchor{19}@anchor{gnat_rm/implementation_defined_pragmas id1}@anchor{1a}
  @chapter Implementation Defined Pragmas
  
  
--- 1166,1172 ----
  @end itemize
  
  @node Implementation Defined Pragmas,Implementation Defined Aspects,About This Guide,Top
! @anchor{gnat_rm/implementation_defined_pragmas doc}@anchor{1a}@anchor{gnat_rm/implementation_defined_pragmas id1}@anchor{1b}@anchor{gnat_rm/implementation_defined_pragmas implementation-defined-pragmas}@anchor{7}
  @chapter Implementation Defined Pragmas
  
  
*************** consideration, the use of these pragmas
*** 1202,1209 ****
  * Pragma Common_Object:: 
  * Pragma Compile_Time_Error:: 
  * Pragma Compile_Time_Warning:: 
- * Pragma Compiler_Unit:: 
- * Pragma Compiler_Unit_Warning:: 
  * Pragma Complete_Representation:: 
  * Pragma Complex_Representation:: 
  * Pragma Component_Alignment:: 
--- 1214,1219 ----
*************** consideration, the use of these pragmas
*** 1233,1239 ****
  * Pragma Export_Function:: 
  * Pragma Export_Object:: 
  * Pragma Export_Procedure:: 
- * Pragma Export_Value:: 
  * Pragma Export_Valued_Procedure:: 
  * Pragma Extend_System:: 
  * Pragma Extensions_Allowed:: 
--- 1243,1248 ----
*************** consideration, the use of these pragmas
*** 1304,1310 ****
  * Pragma Post:: 
  * Pragma Postcondition:: 
  * Pragma Post_Class:: 
- * Pragma Rename_Pragma:: 
  * Pragma Pre:: 
  * Pragma Precondition:: 
  * Pragma Predicate:: 
--- 1313,1318 ----
*************** consideration, the use of these pragmas
*** 1327,1332 ****
--- 1335,1341 ----
  * Pragma Refined_State:: 
  * Pragma Relative_Deadline:: 
  * Pragma Remote_Access_Type:: 
+ * Pragma Rename_Pragma:: 
  * Pragma Restricted_Run_Time:: 
  * Pragma Restriction_Warnings:: 
  * Pragma Reviewable:: 
*************** consideration, the use of these pragmas
*** 1361,1367 ****
  * Pragma Unevaluated_Use_Of_Old:: 
  * Pragma Unimplemented_Unit:: 
  * Pragma Universal_Aliasing:: 
- * Pragma Universal_Data:: 
  * Pragma Unmodified:: 
  * Pragma Unreferenced:: 
  * Pragma Unreferenced_Objects:: 
--- 1370,1375 ----
*************** consideration, the use of these pragmas
*** 1381,1387 ****
  @end menu
  
  @node Pragma Abort_Defer,Pragma Abstract_State,,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-abort-defer}@anchor{1b}
  @section Pragma Abort_Defer
  
  
--- 1389,1395 ----
  @end menu
  
  @node Pragma Abort_Defer,Pragma Abstract_State,,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-abort-defer}@anchor{1c}
  @section Pragma Abort_Defer
  
  
*************** end;
*** 1414,1420 ****
  @end example
  
  @node Pragma Abstract_State,Pragma Ada_83,Pragma Abort_Defer,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-abstract-state}@anchor{1c}@anchor{gnat_rm/implementation_defined_pragmas id2}@anchor{1d}
  @section Pragma Abstract_State
  
  
--- 1422,1428 ----
  @end example
  
  @node Pragma Abstract_State,Pragma Ada_83,Pragma Abort_Defer,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id2}@anchor{1d}@anchor{gnat_rm/implementation_defined_pragmas pragma-abstract-state}@anchor{1e}
  @section Pragma Abstract_State
  
  
*************** For the semantics of this pragma, see th
*** 1464,1470 ****
  the SPARK 2014 Reference Manual, section 7.1.4.
  
  @node Pragma Ada_83,Pragma Ada_95,Pragma Abstract_State,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ada-83}@anchor{1e}
  @section Pragma Ada_83
  
  
--- 1472,1478 ----
  the SPARK 2014 Reference Manual, section 7.1.4.
  
  @node Pragma Ada_83,Pragma Ada_95,Pragma Abstract_State,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ada-83}@anchor{1f}
  @section Pragma Ada_83
  
  
*************** by GNAT in Ada 83 mode will in fact comp
*** 1493,1499 ****
  required by Ada 83.
  
  @node Pragma Ada_95,Pragma Ada_05,Pragma Ada_83,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ada-95}@anchor{1f}
  @section Pragma Ada_95
  
  
--- 1501,1507 ----
  required by Ada 83.
  
  @node Pragma Ada_95,Pragma Ada_05,Pragma Ada_83,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ada-95}@anchor{20}
  @section Pragma Ada_95
  
  
*************** itself uses Ada 95 features, but which i
*** 1512,1518 ****
  either Ada 83 or Ada 95 programs.
  
  @node Pragma Ada_05,Pragma Ada_2005,Pragma Ada_95,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ada-05}@anchor{20}
  @section Pragma Ada_05
  
  
--- 1520,1526 ----
  either Ada 83 or Ada 95 programs.
  
  @node Pragma Ada_05,Pragma Ada_2005,Pragma Ada_95,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ada-05}@anchor{21}
  @section Pragma Ada_05
  
  
*************** otherwise legal pre-Ada_2005 programs. T
*** 1541,1547 ****
  intended for exclusive use in the GNAT run-time library.
  
  @node Pragma Ada_2005,Pragma Ada_12,Pragma Ada_05,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ada-2005}@anchor{21}
  @section Pragma Ada_2005
  
  
--- 1549,1555 ----
  intended for exclusive use in the GNAT run-time library.
  
  @node Pragma Ada_2005,Pragma Ada_12,Pragma Ada_05,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ada-2005}@anchor{22}
  @section Pragma Ada_2005
  
  
*************** This configuration pragma is a synonym f
*** 1555,1561 ****
  same syntax and effect.
  
  @node Pragma Ada_12,Pragma Ada_2012,Pragma Ada_2005,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ada-12}@anchor{22}
  @section Pragma Ada_12
  
  
--- 1563,1569 ----
  same syntax and effect.
  
  @node Pragma Ada_12,Pragma Ada_2012,Pragma Ada_2005,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ada-12}@anchor{23}
  @section Pragma Ada_12
  
  
*************** otherwise legal pre-Ada_2012 programs. T
*** 1586,1592 ****
  intended for exclusive use in the GNAT run-time library.
  
  @node Pragma Ada_2012,Pragma Aggregate_Individually_Assign,Pragma Ada_12,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ada-2012}@anchor{23}
  @section Pragma Ada_2012
  
  
--- 1594,1600 ----
  intended for exclusive use in the GNAT run-time library.
  
  @node Pragma Ada_2012,Pragma Aggregate_Individually_Assign,Pragma Ada_12,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ada-2012}@anchor{24}
  @section Pragma Ada_2012
  
  
*************** This configuration pragma is a synonym f
*** 1600,1606 ****
  same syntax and effect.
  
  @node Pragma Aggregate_Individually_Assign,Pragma Allow_Integer_Address,Pragma Ada_2012,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-aggregate-individually-assign}@anchor{24}
  @section Pragma Aggregate_Individually_Assign
  
  
--- 1608,1614 ----
  same syntax and effect.
  
  @node Pragma Aggregate_Individually_Assign,Pragma Allow_Integer_Address,Pragma Ada_2012,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-aggregate-individually-assign}@anchor{25}
  @section Pragma Aggregate_Individually_Assign
  
  
*************** this behavior so that record aggregates
*** 1616,1622 ****
  individual assignment statements.
  
  @node Pragma Allow_Integer_Address,Pragma Annotate,Pragma Aggregate_Individually_Assign,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-allow-integer-address}@anchor{25}
  @section Pragma Allow_Integer_Address
  
  
--- 1624,1630 ----
  individual assignment statements.
  
  @node Pragma Allow_Integer_Address,Pragma Annotate,Pragma Aggregate_Individually_Assign,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-allow-integer-address}@anchor{26}
  @section Pragma Allow_Integer_Address
  
  
*************** rather than rejected to allow common set
*** 1666,1672 ****
  in the two situations.
  
  @node Pragma Annotate,Pragma Assert,Pragma Allow_Integer_Address,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-annotate}@anchor{26}@anchor{gnat_rm/implementation_defined_pragmas id3}@anchor{27}
  @section Pragma Annotate
  
  
--- 1674,1680 ----
  in the two situations.
  
  @node Pragma Annotate,Pragma Assert,Pragma Allow_Integer_Address,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id3}@anchor{27}@anchor{gnat_rm/implementation_defined_pragmas pragma-annotate}@anchor{28}
  @section Pragma Annotate
  
  
*************** affect the compilation process in any wa
*** 1701,1707 ****
  a configuration pragma.
  
  @node Pragma Assert,Pragma Assert_And_Cut,Pragma Annotate,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-assert}@anchor{28}
  @section Pragma Assert
  
  
--- 1709,1715 ----
  a configuration pragma.
  
  @node Pragma Assert,Pragma Assert_And_Cut,Pragma Annotate,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-assert}@anchor{29}
  @section Pragma Assert
  
  
*************** of Ada, and the DISABLE policy is an imp
*** 1767,1773 ****
  addition.
  
  @node Pragma Assert_And_Cut,Pragma Assertion_Policy,Pragma Assert,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-assert-and-cut}@anchor{29}
  @section Pragma Assert_And_Cut
  
  
--- 1775,1781 ----
  addition.
  
  @node Pragma Assert_And_Cut,Pragma Assertion_Policy,Pragma Assert,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-assert-and-cut}@anchor{2a}
  @section Pragma Assert_And_Cut
  
  
*************** formal verification. The pragma also ser
*** 1794,1800 ****
  documentation.
  
  @node Pragma Assertion_Policy,Pragma Assume,Pragma Assert_And_Cut,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-assertion-policy}@anchor{2a}
  @section Pragma Assertion_Policy
  
  
--- 1802,1808 ----
  documentation.
  
  @node Pragma Assertion_Policy,Pragma Assume,Pragma Assert_And_Cut,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-assertion-policy}@anchor{2b}
  @section Pragma Assertion_Policy
  
  
*************** The pragma applies in both cases to prag
*** 1851,1857 ****
  names, e.g. @code{Pre} applies to the Pre aspect, and @code{Precondition}
  applies to both the @code{Precondition} pragma
  and the aspect @code{Precondition}. Note that the identifiers for
! pragmas Pre_Class and Post_Class are Pre'Class and Post'Class (not
  Pre_Class and Post_Class), since these pragmas are intended to be
  identical to the corresponding aspects).
  
--- 1859,1865 ----
  names, e.g. @code{Pre} applies to the Pre aspect, and @code{Precondition}
  applies to both the @code{Precondition} pragma
  and the aspect @code{Precondition}. Note that the identifiers for
! pragmas Pre_Class and Post_Class are Pre’Class and Post’Class (not
  Pre_Class and Post_Class), since these pragmas are intended to be
  identical to the corresponding aspects).
  
*************** The implementation defined policy @code{
*** 1868,1874 ****
  @code{IGNORE} except that it completely disables semantic
  checking of the corresponding pragma or aspect. This is
  useful when the pragma or aspect argument references subprograms
! in a with'ed package which is replaced by a dummy package
  for the final build.
  
  The implementation defined assertion kind @code{Assertions} applies to all
--- 1876,1882 ----
  @code{IGNORE} except that it completely disables semantic
  checking of the corresponding pragma or aspect. This is
  useful when the pragma or aspect argument references subprograms
! in a with’ed package which is replaced by a dummy package
  for the final build.
  
  The implementation defined assertion kind @code{Assertions} applies to all
*************** applies to @code{Assert}, @code{Assert_A
*** 1881,1887 ****
  @code{Assume}, @code{Loop_Invariant}, and @code{Loop_Variant}.
  
  @node Pragma Assume,Pragma Assume_No_Invalid_Values,Pragma Assertion_Policy,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-assume}@anchor{2b}
  @section Pragma Assume
  
  
--- 1889,1895 ----
  @code{Assume}, @code{Loop_Invariant}, and @code{Loop_Variant}.
  
  @node Pragma Assume,Pragma Assume_No_Invalid_Values,Pragma Assertion_Policy,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-assume}@anchor{2c}
  @section Pragma Assume
  
  
*************** is met, and documents the need to ensure
*** 1915,1921 ****
  reference to information outside the program.
  
  @node Pragma Assume_No_Invalid_Values,Pragma Async_Readers,Pragma Assume,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-assume-no-invalid-values}@anchor{2c}
  @section Pragma Assume_No_Invalid_Values
  
  
--- 1923,1929 ----
  reference to information outside the program.
  
  @node Pragma Assume_No_Invalid_Values,Pragma Async_Readers,Pragma Assume,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-assume-no-invalid-values}@anchor{2d}
  @section Pragma Assume_No_Invalid_Values
  
  
*************** is erroneous so there are no guarantees
*** 1968,1974 ****
  case, and it is recommended that these two options not be used together.
  
  @node Pragma Async_Readers,Pragma Async_Writers,Pragma Assume_No_Invalid_Values,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-async-readers}@anchor{2d}@anchor{gnat_rm/implementation_defined_pragmas id4}@anchor{2e}
  @section Pragma Async_Readers
  
  
--- 1976,1982 ----
  case, and it is recommended that these two options not be used together.
  
  @node Pragma Async_Readers,Pragma Async_Writers,Pragma Assume_No_Invalid_Values,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id4}@anchor{2e}@anchor{gnat_rm/implementation_defined_pragmas pragma-async-readers}@anchor{2f}
  @section Pragma Async_Readers
  
  
*************** For the semantics of this pragma, see th
*** 1982,1988 ****
  the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma Async_Writers,Pragma Attribute_Definition,Pragma Async_Readers,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id5}@anchor{2f}@anchor{gnat_rm/implementation_defined_pragmas pragma-async-writers}@anchor{30}
  @section Pragma Async_Writers
  
  
--- 1990,1996 ----
  the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma Async_Writers,Pragma Attribute_Definition,Pragma Async_Readers,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id5}@anchor{30}@anchor{gnat_rm/implementation_defined_pragmas pragma-async-writers}@anchor{31}
  @section Pragma Async_Writers
  
  
*************** For the semantics of this pragma, see th
*** 1996,2002 ****
  the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma Attribute_Definition,Pragma C_Pass_By_Copy,Pragma Async_Writers,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-attribute-definition}@anchor{31}
  @section Pragma Attribute_Definition
  
  
--- 2004,2010 ----
  the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma Attribute_Definition,Pragma C_Pass_By_Copy,Pragma Async_Writers,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-attribute-definition}@anchor{32}
  @section Pragma Attribute_Definition
  
  
*************** code to be written that takes advantage
*** 2022,2028 ****
  compilable with earlier compilers.
  
  @node Pragma C_Pass_By_Copy,Pragma Check,Pragma Attribute_Definition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-c-pass-by-copy}@anchor{32}
  @section Pragma C_Pass_By_Copy
  
  
--- 2030,2036 ----
  compilable with earlier compilers.
  
  @node Pragma C_Pass_By_Copy,Pragma Check,Pragma Attribute_Definition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-c-pass-by-copy}@anchor{33}
  @section Pragma C_Pass_By_Copy
  
  
*************** You can also pass records by copy by spe
*** 2066,2072 ****
  passing mechanisms on a parameter by parameter basis.
  
  @node Pragma Check,Pragma Check_Float_Overflow,Pragma C_Pass_By_Copy,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-check}@anchor{33}
  @section Pragma Check
  
  
--- 2074,2080 ----
  passing mechanisms on a parameter by parameter basis.
  
  @node Pragma Check,Pragma Check_Float_Overflow,Pragma C_Pass_By_Copy,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-check}@anchor{34}
  @section Pragma Check
  
  
*************** of these identifiers in @code{Assertion_
*** 2105,2111 ****
  pragmas, where they are used to refer to sets of assertions.
  
  @node Pragma Check_Float_Overflow,Pragma Check_Name,Pragma Check,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-check-float-overflow}@anchor{34}
  @section Pragma Check_Float_Overflow
  
  
--- 2113,2119 ----
  pragmas, where they are used to refer to sets of assertions.
  
  @node Pragma Check_Float_Overflow,Pragma Check_Name,Pragma Check,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-check-float-overflow}@anchor{35}
  @section Pragma Check_Float_Overflow
  
  
*************** This implementation permission accommoda
*** 2126,2138 ****
  of infinities in IEEE floating-point, and corresponds to the
  efficient execution mode on most machines. GNAT will not raise
  overflow exceptions on these machines; instead it will generate
! infinities and NaN's as defined in the IEEE standard.
  
  Generating infinities, although efficient, is not always desirable.
  Often the preferable approach is to check for overflow, even at the
  (perhaps considerable) expense of run-time performance.
! This can be accomplished by defining your own constrained floating-point subtypes -- i.e., by supplying explicit
! range constraints -- and indeed such a subtype
  can have the same base range as its base type. For example:
  
  @example
--- 2134,2146 ----
  of infinities in IEEE floating-point, and corresponds to the
  efficient execution mode on most machines. GNAT will not raise
  overflow exceptions on these machines; instead it will generate
! infinities and NaN’s as defined in the IEEE standard.
  
  Generating infinities, although efficient, is not always desirable.
  Often the preferable approach is to check for overflow, even at the
  (perhaps considerable) expense of run-time performance.
! This can be accomplished by defining your own constrained floating-point subtypes – i.e., by supplying explicit
! range constraints – and indeed such a subtype
  can have the same base range as its base type. For example:
  
  @example
*************** This mode can also be set by use of the
*** 2161,2167 ****
  switch @emph{-gnateF}.
  
  @node Pragma Check_Name,Pragma Check_Policy,Pragma Check_Float_Overflow,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-check-name}@anchor{35}
  @section Pragma Check_Name
  
  
--- 2169,2175 ----
  switch @emph{-gnateF}.
  
  @node Pragma Check_Name,Pragma Check_Policy,Pragma Check_Float_Overflow,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-check-name}@anchor{36}
  @section Pragma Check_Name
  
  
*************** Check names introduced by this pragma ar
*** 2197,2203 ****
  switches (in particular -gnatp) in the usual manner.
  
  @node Pragma Check_Policy,Pragma Comment,Pragma Check_Name,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-check-policy}@anchor{36}
  @section Pragma Check_Policy
  
  
--- 2205,2211 ----
  switches (in particular -gnatp) in the usual manner.
  
  @node Pragma Check_Policy,Pragma Comment,Pragma Check_Name,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-check-policy}@anchor{37}
  @section Pragma Check_Policy
  
  
*************** policy setting @code{DISABLE} causes the
*** 2277,2283 ****
  @code{Check} pragma to be completely ignored and not analyzed.
  
  @node Pragma Comment,Pragma Common_Object,Pragma Check_Policy,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-comment}@anchor{37}
  @section Pragma Comment
  
  
--- 2285,2291 ----
  @code{Check} pragma to be completely ignored and not analyzed.
  
  @node Pragma Comment,Pragma Common_Object,Pragma Check_Policy,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-comment}@anchor{38}
  @section Pragma Comment
  
  
*************** anywhere in the main source unit), and i
*** 2296,2302 ****
  is used, all comments are retained.
  
  @node Pragma Common_Object,Pragma Compile_Time_Error,Pragma Comment,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-common-object}@anchor{38}
  @section Pragma Common_Object
  
  
--- 2304,2310 ----
  is used, all comments are retained.
  
  @node Pragma Common_Object,Pragma Compile_Time_Error,Pragma Comment,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-common-object}@anchor{39}
  @section Pragma Common_Object
  
  
*************** indicating that the necessary attribute
*** 2328,2334 ****
  pragma is not available.
  
  @node Pragma Compile_Time_Error,Pragma Compile_Time_Warning,Pragma Common_Object,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-compile-time-error}@anchor{39}@anchor{gnat_rm/implementation_defined_pragmas compile-time-error}@anchor{3a}
  @section Pragma Compile_Time_Error
  
  
--- 2336,2342 ----
  pragma is not available.
  
  @node Pragma Compile_Time_Error,Pragma Compile_Time_Warning,Pragma Common_Object,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas compile-time-error}@anchor{3a}@anchor{gnat_rm/implementation_defined_pragmas pragma-compile-time-error}@anchor{3b}
  @section Pragma Compile_Time_Error
  
  
*************** If these conditions are not met, an erro
*** 2354,2361 ****
  the value given as the second argument. This string value may contain
  embedded ASCII.LF characters to break the message into multiple lines.
  
! @node Pragma Compile_Time_Warning,Pragma Compiler_Unit,Pragma Compile_Time_Error,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-compile-time-warning}@anchor{3b}
  @section Pragma Compile_Time_Warning
  
  
--- 2362,2369 ----
  the value given as the second argument. This string value may contain
  embedded ASCII.LF characters to break the message into multiple lines.
  
! @node Pragma Compile_Time_Warning,Pragma Complete_Representation,Pragma Compile_Time_Error,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-compile-time-warning}@anchor{3c}
  @section Pragma Compile_Time_Warning
  
  
*************** of an error message. If switch @emph{-gn
*** 2371,2378 ****
  if the value of the expression is known to be True at compile time, not when
  the value of the expression is not known at compile time.
  Note that if this pragma is used in a package that
! is with'ed by a client, the client will get the warning even though it
! is issued by a with'ed package (normally warnings in with'ed units are
  suppressed, but this is a special exception to that rule).
  
  One typical use is within a generic where compile time known characteristics
--- 2379,2386 ----
  if the value of the expression is known to be True at compile time, not when
  the value of the expression is not known at compile time.
  Note that if this pragma is used in a package that
! is with’ed by a client, the client will get the warning even though it
! is issued by a with’ed package (normally warnings in with’ed units are
  suppressed, but this is a special exception to that rule).
  
  One typical use is within a generic where compile time known characteristics
*************** Compile_Time_Warning resulted in a fatal
*** 2385,2425 ****
  a warning. You can use @ref{3a,,Pragma Compile_Time_Error} to force the generation of
  an error.
  
! @node Pragma Compiler_Unit,Pragma Compiler_Unit_Warning,Pragma Compile_Time_Warning,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-compiler-unit}@anchor{3c}
! @section Pragma Compiler_Unit
! 
! 
! Syntax:
! 
! @example
! pragma Compiler_Unit;
! @end example
! 
! This pragma is obsolete. It is equivalent to Compiler_Unit_Warning. It is
! retained so that old versions of the GNAT run-time that use this pragma can
! be compiled with newer versions of the compiler.
! 
! @node Pragma Compiler_Unit_Warning,Pragma Complete_Representation,Pragma Compiler_Unit,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-compiler-unit-warning}@anchor{3d}
! @section Pragma Compiler_Unit_Warning
! 
! 
! Syntax:
! 
! @example
! pragma Compiler_Unit_Warning;
! @end example
! 
! This pragma is intended only for internal use in the GNAT run-time library.
! It indicates that the unit is used as part of the compiler build. The effect
! is to generate warnings for the use of constructs (for example, conditional
! expressions) that would cause trouble when bootstrapping using an older
! version of GNAT. For the exact list of restrictions, see the compiler sources
! and references to Check_Compiler_Unit.
! 
! @node Pragma Complete_Representation,Pragma Complex_Representation,Pragma Compiler_Unit_Warning,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-complete-representation}@anchor{3e}
  @section Pragma Complete_Representation
  
  
--- 2393,2400 ----
  a warning. You can use @ref{3a,,Pragma Compile_Time_Error} to force the generation of
  an error.
  
! @node Pragma Complete_Representation,Pragma Complex_Representation,Pragma Compile_Time_Warning,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-complete-representation}@anchor{3d}
  @section Pragma Complete_Representation
  
  
*************** complete, and that this invariant is mai
*** 2438,2444 ****
  added to the record in the future.
  
  @node Pragma Complex_Representation,Pragma Component_Alignment,Pragma Complete_Representation,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-complex-representation}@anchor{3f}
  @section Pragma Complex_Representation
  
  
--- 2413,2419 ----
  added to the record in the future.
  
  @node Pragma Complex_Representation,Pragma Component_Alignment,Pragma Complete_Representation,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-complex-representation}@anchor{3e}
  @section Pragma Complex_Representation
  
  
*************** records by pointer, and the use of this
*** 2460,2466 ****
  this type in floating-point registers.
  
  @node Pragma Component_Alignment,Pragma Constant_After_Elaboration,Pragma Complex_Representation,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-component-alignment}@anchor{40}
  @section Pragma Component_Alignment
  
  
--- 2435,2441 ----
  this type in floating-point registers.
  
  @node Pragma Component_Alignment,Pragma Constant_After_Elaboration,Pragma Complex_Representation,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-component-alignment}@anchor{3f}
  @section Pragma Component_Alignment
  
  
*************** pragma @code{Pack}, pragma @code{Compone
*** 2551,2557 ****
  clause), the GNAT uses the default alignment as described previously.
  
  @node Pragma Constant_After_Elaboration,Pragma Contract_Cases,Pragma Component_Alignment,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id6}@anchor{41}@anchor{gnat_rm/implementation_defined_pragmas pragma-constant-after-elaboration}@anchor{42}
  @section Pragma Constant_After_Elaboration
  
  
--- 2526,2532 ----
  clause), the GNAT uses the default alignment as described previously.
  
  @node Pragma Constant_After_Elaboration,Pragma Contract_Cases,Pragma Component_Alignment,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id6}@anchor{40}@anchor{gnat_rm/implementation_defined_pragmas pragma-constant-after-elaboration}@anchor{41}
  @section Pragma Constant_After_Elaboration
  
  
*************** For the semantics of this pragma, see th
*** 2565,2571 ****
  @code{Constant_After_Elaboration} in the SPARK 2014 Reference Manual, section 3.3.1.
  
  @node Pragma Contract_Cases,Pragma Convention_Identifier,Pragma Constant_After_Elaboration,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id7}@anchor{43}@anchor{gnat_rm/implementation_defined_pragmas pragma-contract-cases}@anchor{44}
  @section Pragma Contract_Cases
  
  
--- 2540,2546 ----
  @code{Constant_After_Elaboration} in the SPARK 2014 Reference Manual, section 3.3.1.
  
  @node Pragma Contract_Cases,Pragma Convention_Identifier,Pragma Constant_After_Elaboration,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id7}@anchor{42}@anchor{gnat_rm/implementation_defined_pragmas pragma-contract-cases}@anchor{43}
  @section Pragma Contract_Cases
  
  
*************** and that the consequence for this case s
*** 2650,2656 ****
  returns.
  
  @node Pragma Convention_Identifier,Pragma CPP_Class,Pragma Contract_Cases,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-convention-identifier}@anchor{45}
  @section Pragma Convention_Identifier
  
  
--- 2625,2631 ----
  returns.
  
  @node Pragma Convention_Identifier,Pragma CPP_Class,Pragma Contract_Cases,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-convention-identifier}@anchor{44}
  @section Pragma Convention_Identifier
  
  
*************** define a convention identifier @code{Lib
*** 2686,2692 ****
  would be used system-wide.
  
  @node Pragma CPP_Class,Pragma CPP_Constructor,Pragma Convention_Identifier,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-class}@anchor{46}
  @section Pragma CPP_Class
  
  
--- 2661,2667 ----
  would be used system-wide.
  
  @node Pragma CPP_Class,Pragma CPP_Constructor,Pragma Convention_Identifier,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-class}@anchor{45}
  @section Pragma CPP_Class
  
  
*************** functions (see pragma @code{CPP_Construc
*** 2711,2724 ****
  limited if not explicitly declared as limited or derived from a limited
  type, and an error is issued in that case.
  
! See @ref{47,,Interfacing to C++} for related information.
  
  Note: Pragma @code{CPP_Class} is currently obsolete. It is supported
  for backward compatibility but its functionality is available
  using pragma @code{Import} with @code{Convention} = @code{CPP}.
  
  @node Pragma CPP_Constructor,Pragma CPP_Virtual,Pragma CPP_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-constructor}@anchor{48}
  @section Pragma CPP_Constructor
  
  
--- 2686,2699 ----
  limited if not explicitly declared as limited or derived from a limited
  type, and an error is issued in that case.
  
! See @ref{46,,Interfacing to C++} for related information.
  
  Note: Pragma @code{CPP_Class} is currently obsolete. It is supported
  for backward compatibility but its functionality is available
  using pragma @code{Import} with @code{Convention} = @code{CPP}.
  
  @node Pragma CPP_Constructor,Pragma CPP_Virtual,Pragma CPP_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-constructor}@anchor{47}
  @section Pragma CPP_Constructor
  
  
*************** must be of one of the following forms:
*** 2746,2758 ****
  @strong{function} @code{Fname} @strong{return} T`
  
  @item 
! @strong{function} @code{Fname} @strong{return} T'Class
  
  @item 
! @strong{function} @code{Fname} (...) @strong{return} T`
  
  @item 
! @strong{function} @code{Fname} (...) @strong{return} T'Class
  @end itemize
  
  where @code{T} is a limited record type imported from C++ with pragma
--- 2721,2733 ----
  @strong{function} @code{Fname} @strong{return} T`
  
  @item 
! @strong{function} @code{Fname} @strong{return} T’Class
  
  @item 
! @strong{function} @code{Fname} (…) @strong{return} T`
  
  @item 
! @strong{function} @code{Fname} (…) @strong{return} T’Class
  @end itemize
  
  where @code{T} is a limited record type imported from C++ with pragma
*************** where @code{T} is a limited record type
*** 2761,2767 ****
  The first two forms import the default constructor, used when an object
  of type @code{T} is created on the Ada side with no explicit constructor.
  The latter two forms cover all the non-default constructors of the type.
! See the GNAT User's Guide for details.
  
  If no constructors are imported, it is impossible to create any objects
  on the Ada side and the type is implicitly declared abstract.
--- 2736,2742 ----
  The first two forms import the default constructor, used when an object
  of type @code{T} is created on the Ada side with no explicit constructor.
  The latter two forms cover all the non-default constructors of the type.
! See the GNAT User’s Guide for details.
  
  If no constructors are imported, it is impossible to create any objects
  on the Ada side and the type is implicitly declared abstract.
*************** on the Ada side and the type is implicit
*** 2769,2775 ****
  Pragma @code{CPP_Constructor} is intended primarily for automatic generation
  using an automatic binding generator tool (such as the @code{-fdump-ada-spec}
  GCC switch).
! See @ref{47,,Interfacing to C++} for more related information.
  
  Note: The use of functions returning class-wide types for constructors is
  currently obsolete. They are supported for backward compatibility. The
--- 2744,2750 ----
  Pragma @code{CPP_Constructor} is intended primarily for automatic generation
  using an automatic binding generator tool (such as the @code{-fdump-ada-spec}
  GCC switch).
! See @ref{46,,Interfacing to C++} for more related information.
  
  Note: The use of functions returning class-wide types for constructors is
  currently obsolete. They are supported for backward compatibility. The
*************** because the imported C++ constructors al
*** 2778,2784 ****
  that is, they never return an object whose type is a descendant of type T.
  
  @node Pragma CPP_Virtual,Pragma CPP_Vtable,Pragma CPP_Constructor,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-virtual}@anchor{49}
  @section Pragma CPP_Virtual
  
  
--- 2753,2759 ----
  that is, they never return an object whose type is a descendant of type T.
  
  @node Pragma CPP_Virtual,Pragma CPP_Vtable,Pragma CPP_Constructor,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-virtual}@anchor{48}
  @section Pragma CPP_Virtual
  
  
*************** purposes. It used to be required to ensu
*** 2791,2800 ****
  is no longer required for that purpose because GNAT generates
  the same object layout as the G++ compiler by default.
  
! See @ref{47,,Interfacing to C++} for related information.
  
  @node Pragma CPP_Vtable,Pragma CPU,Pragma CPP_Virtual,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-vtable}@anchor{4a}
  @section Pragma CPP_Vtable
  
  
--- 2766,2775 ----
  is no longer required for that purpose because GNAT generates
  the same object layout as the G++ compiler by default.
  
! See @ref{46,,Interfacing to C++} for related information.
  
  @node Pragma CPP_Vtable,Pragma CPU,Pragma CPP_Virtual,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-vtable}@anchor{49}
  @section Pragma CPP_Vtable
  
  
*************** It used to be required to ensure compati
*** 2806,2815 ****
  is no longer required for that purpose because GNAT generates
  the same object layout as the G++ compiler by default.
  
! See @ref{47,,Interfacing to C++} for related information.
  
  @node Pragma CPU,Pragma Deadline_Floor,Pragma CPP_Vtable,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-cpu}@anchor{4b}
  @section Pragma CPU
  
  
--- 2781,2790 ----
  is no longer required for that purpose because GNAT generates
  the same object layout as the G++ compiler by default.
  
! See @ref{46,,Interfacing to C++} for related information.
  
  @node Pragma CPU,Pragma Deadline_Floor,Pragma CPP_Vtable,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-cpu}@anchor{4a}
  @section Pragma CPU
  
  
*************** versions of Ada as an implementation-def
*** 2824,2830 ****
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Deadline_Floor,Pragma Default_Initial_Condition,Pragma CPU,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-deadline-floor}@anchor{4c}
  @section Pragma Deadline_Floor
  
  
--- 2799,2805 ----
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Deadline_Floor,Pragma Default_Initial_Condition,Pragma CPU,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-deadline-floor}@anchor{4b}
  @section Pragma Deadline_Floor
  
  
*************** deadline inherited by a task when the ta
*** 2839,2845 ****
  It is effective only when the EDF scheduling policy is used.
  
  @node Pragma Default_Initial_Condition,Pragma Debug,Pragma Deadline_Floor,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id8}@anchor{4d}@anchor{gnat_rm/implementation_defined_pragmas pragma-default-initial-condition}@anchor{4e}
  @section Pragma Default_Initial_Condition
  
  
--- 2814,2820 ----
  It is effective only when the EDF scheduling policy is used.
  
  @node Pragma Default_Initial_Condition,Pragma Debug,Pragma Deadline_Floor,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id8}@anchor{4c}@anchor{gnat_rm/implementation_defined_pragmas pragma-default-initial-condition}@anchor{4d}
  @section Pragma Default_Initial_Condition
  
  
*************** For the semantics of this pragma, see th
*** 2853,2859 ****
  @code{Default_Initial_Condition} in the SPARK 2014 Reference Manual, section 7.3.3.
  
  @node Pragma Debug,Pragma Debug_Policy,Pragma Default_Initial_Condition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-debug}@anchor{4f}
  @section Pragma Debug
  
  
--- 2828,2834 ----
  @code{Default_Initial_Condition} in the SPARK 2014 Reference Manual, section 7.3.3.
  
  @node Pragma Debug,Pragma Debug_Policy,Pragma Default_Initial_Condition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-debug}@anchor{4e}
  @section Pragma Debug
  
  
*************** or by use of the pragma @code{Check_Poli
*** 2881,2887 ****
  @code{Debug}.
  
  @node Pragma Debug_Policy,Pragma Default_Scalar_Storage_Order,Pragma Debug,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-debug-policy}@anchor{50}
  @section Pragma Debug_Policy
  
  
--- 2856,2862 ----
  @code{Debug}.
  
  @node Pragma Debug_Policy,Pragma Default_Scalar_Storage_Order,Pragma Debug,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-debug-policy}@anchor{4f}
  @section Pragma Debug_Policy
  
  
*************** with a first argument of @code{Debug}. I
*** 2896,2902 ****
  compatibility reasons.
  
  @node Pragma Default_Scalar_Storage_Order,Pragma Default_Storage_Pool,Pragma Debug_Policy,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-default-scalar-storage-order}@anchor{51}
  @section Pragma Default_Scalar_Storage_Order
  
  
--- 2871,2877 ----
  compatibility reasons.
  
  @node Pragma Default_Scalar_Storage_Order,Pragma Default_Storage_Pool,Pragma Debug_Policy,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-default-scalar-storage-order}@anchor{50}
  @section Pragma Default_Scalar_Storage_Order
  
  
*************** it may significantly degrade the run-tim
*** 2969,2975 ****
  the default scalar storage order ought to be changed only on a local basis.
  
  @node Pragma Default_Storage_Pool,Pragma Depends,Pragma Default_Scalar_Storage_Order,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-default-storage-pool}@anchor{52}
  @section Pragma Default_Storage_Pool
  
  
--- 2944,2950 ----
  the default scalar storage order ought to be changed only on a local basis.
  
  @node Pragma Default_Storage_Pool,Pragma Depends,Pragma Default_Scalar_Storage_Order,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-default-storage-pool}@anchor{51}
  @section Pragma Default_Storage_Pool
  
  
*************** versions of Ada as an implementation-def
*** 2986,2992 ****
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Depends,Pragma Detect_Blocking,Pragma Default_Storage_Pool,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-depends}@anchor{53}@anchor{gnat_rm/implementation_defined_pragmas id9}@anchor{54}
  @section Pragma Depends
  
  
--- 2961,2967 ----
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Depends,Pragma Detect_Blocking,Pragma Default_Storage_Pool,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id9}@anchor{52}@anchor{gnat_rm/implementation_defined_pragmas pragma-depends}@anchor{53}
  @section Pragma Depends
  
  
*************** For the semantics of this pragma, see th
*** 3019,3025 ****
  SPARK 2014 Reference Manual, section 6.1.5.
  
  @node Pragma Detect_Blocking,Pragma Disable_Atomic_Synchronization,Pragma Depends,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-detect-blocking}@anchor{55}
  @section Pragma Detect_Blocking
  
  
--- 2994,3000 ----
  SPARK 2014 Reference Manual, section 6.1.5.
  
  @node Pragma Detect_Blocking,Pragma Disable_Atomic_Synchronization,Pragma Depends,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-detect-blocking}@anchor{54}
  @section Pragma Detect_Blocking
  
  
*************** blocking operations within a protected o
*** 3037,3043 ****
  if that happens.
  
  @node Pragma Disable_Atomic_Synchronization,Pragma Dispatching_Domain,Pragma Detect_Blocking,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-disable-atomic-synchronization}@anchor{56}
  @section Pragma Disable_Atomic_Synchronization
  
  
--- 3012,3018 ----
  if that happens.
  
  @node Pragma Disable_Atomic_Synchronization,Pragma Dispatching_Domain,Pragma Detect_Blocking,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-disable-atomic-synchronization}@anchor{55}
  @section Pragma Disable_Atomic_Synchronization
  
  
*************** till the end of the scope. If an @code{E
*** 3063,3069 ****
  the action applies only to that entity.
  
  @node Pragma Dispatching_Domain,Pragma Effective_Reads,Pragma Disable_Atomic_Synchronization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-dispatching-domain}@anchor{57}
  @section Pragma Dispatching_Domain
  
  
--- 3038,3044 ----
  the action applies only to that entity.
  
  @node Pragma Dispatching_Domain,Pragma Effective_Reads,Pragma Disable_Atomic_Synchronization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-dispatching-domain}@anchor{56}
  @section Pragma Dispatching_Domain
  
  
*************** versions of Ada as an implementation-def
*** 3078,3084 ****
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Effective_Reads,Pragma Effective_Writes,Pragma Dispatching_Domain,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id10}@anchor{58}@anchor{gnat_rm/implementation_defined_pragmas pragma-effective-reads}@anchor{59}
  @section Pragma Effective_Reads
  
  
--- 3053,3059 ----
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Effective_Reads,Pragma Effective_Writes,Pragma Dispatching_Domain,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id10}@anchor{57}@anchor{gnat_rm/implementation_defined_pragmas pragma-effective-reads}@anchor{58}
  @section Pragma Effective_Reads
  
  
*************** For the semantics of this pragma, see th
*** 3092,3098 ****
  the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma Effective_Writes,Pragma Elaboration_Checks,Pragma Effective_Reads,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id11}@anchor{5a}@anchor{gnat_rm/implementation_defined_pragmas pragma-effective-writes}@anchor{5b}
  @section Pragma Effective_Writes
  
  
--- 3067,3073 ----
  the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma Effective_Writes,Pragma Elaboration_Checks,Pragma Effective_Reads,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id11}@anchor{59}@anchor{gnat_rm/implementation_defined_pragmas pragma-effective-writes}@anchor{5a}
  @section Pragma Effective_Writes
  
  
*************** For the semantics of this pragma, see th
*** 3106,3112 ****
  in the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma Elaboration_Checks,Pragma Eliminate,Pragma Effective_Writes,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-elaboration-checks}@anchor{5c}
  @section Pragma Elaboration_Checks
  
  
--- 3081,3087 ----
  in the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma Elaboration_Checks,Pragma Eliminate,Pragma Effective_Writes,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-elaboration-checks}@anchor{5b}
  @section Pragma Elaboration_Checks
  
  
*************** pragma Elaboration_Checks (Dynamic | Sta
*** 3120,3126 ****
  
  This is a configuration pragma which specifies the elaboration model to be
  used during compilation. For more information on the elaboration models of
! GNAT, consult the chapter on elaboration order handling in the @emph{GNAT User's
  Guide}.
  
  The pragma may appear in the following contexts:
--- 3095,3101 ----
  
  This is a configuration pragma which specifies the elaboration model to be
  used during compilation. For more information on the elaboration models of
! GNAT, consult the chapter on elaboration order handling in the @emph{GNAT User’s
  Guide}.
  
  The pragma may appear in the following contexts:
*************** The pragma may appear in the following c
*** 3132,3138 ****
  Configuration pragmas file
  
  @item 
! Prior to the context clauses of a compilation unit's initial declaration
  @end itemize
  
  Any other placement of the pragma will result in a warning and the effects of
--- 3107,3113 ----
  Configuration pragmas file
  
  @item 
! Prior to the context clauses of a compilation unit’s initial declaration
  @end itemize
  
  Any other placement of the pragma will result in a warning and the effects of
*************** effect. If the pragma argument is @code{
*** 3143,3149 ****
  is in effect.
  
  @node Pragma Eliminate,Pragma Enable_Atomic_Synchronization,Pragma Elaboration_Checks,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-eliminate}@anchor{5d}
  @section Pragma Eliminate
  
  
--- 3118,3124 ----
  is in effect.
  
  @node Pragma Eliminate,Pragma Enable_Atomic_Synchronization,Pragma Elaboration_Checks,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-eliminate}@anchor{5c}
  @section Pragma Eliminate
  
  
*************** pragma Eliminate (Q, Proc,
*** 3303,3309 ****
  @end quotation
  
  @node Pragma Enable_Atomic_Synchronization,Pragma Export_Function,Pragma Eliminate,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-enable-atomic-synchronization}@anchor{5e}
  @section Pragma Enable_Atomic_Synchronization
  
  
--- 3278,3284 ----
  @end quotation
  
  @node Pragma Enable_Atomic_Synchronization,Pragma Export_Function,Pragma Eliminate,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-enable-atomic-synchronization}@anchor{5d}
  @section Pragma Enable_Atomic_Synchronization
  
  
*************** till the end of the scope. If an @code{E
*** 3331,3337 ****
  the action applies only to that entity.
  
  @node Pragma Export_Function,Pragma Export_Object,Pragma Enable_Atomic_Synchronization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-export-function}@anchor{5f}
  @section Pragma Export_Function
  
  
--- 3306,3312 ----
  the action applies only to that entity.
  
  @node Pragma Export_Function,Pragma Export_Object,Pragma Enable_Atomic_Synchronization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-export-function}@anchor{5e}
  @section Pragma Export_Function
  
  
*************** string. In this case, no external name i
*** 3403,3409 ****
  still allows the specification of parameter mechanisms.
  
  @node Pragma Export_Object,Pragma Export_Procedure,Pragma Export_Function,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-export-object}@anchor{60}
  @section Pragma Export_Object
  
  
--- 3378,3384 ----
  still allows the specification of parameter mechanisms.
  
  @node Pragma Export_Object,Pragma Export_Procedure,Pragma Export_Function,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-export-object}@anchor{5f}
  @section Pragma Export_Object
  
  
*************** separate Export pragma (and you probably
*** 3427,3434 ****
  of portability), but it is not required.  @code{Size} is syntax checked,
  but otherwise ignored by GNAT.
  
! @node Pragma Export_Procedure,Pragma Export_Value,Pragma Export_Object,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-export-procedure}@anchor{61}
  @section Pragma Export_Procedure
  
  
--- 3402,3409 ----
  of portability), but it is not required.  @code{Size} is syntax checked,
  but otherwise ignored by GNAT.
  
! @node Pragma Export_Procedure,Pragma Export_Valued_Procedure,Pragma Export_Object,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-export-procedure}@anchor{60}
  @section Pragma Export_Procedure
  
  
*************** string or a static string expressions th
*** 3480,3508 ****
  string. In this case, no external name is generated. This form
  still allows the specification of parameter mechanisms.
  
! @node Pragma Export_Value,Pragma Export_Valued_Procedure,Pragma Export_Procedure,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-export-value}@anchor{62}
! @section Pragma Export_Value
! 
! 
! Syntax:
! 
! @example
! pragma Export_Value (
!   [Value     =>] static_integer_EXPRESSION,
!   [Link_Name =>] static_string_EXPRESSION);
! @end example
! 
! This pragma serves to export a static integer value for external use.
! The first argument specifies the value to be exported. The Link_Name
! argument specifies the symbolic name to be associated with the integer
! value. This pragma is useful for defining a named static value in Ada
! that can be referenced in assembly language units to be linked with
! the application. This pragma is currently supported only for the
! AAMP target and is ignored for other targets.
! 
! @node Pragma Export_Valued_Procedure,Pragma Extend_System,Pragma Export_Value,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-export-valued-procedure}@anchor{63}
  @section Pragma Export_Valued_Procedure
  
  
--- 3455,3462 ----
  string. In this case, no external name is generated. This form
  still allows the specification of parameter mechanisms.
  
! @node Pragma Export_Valued_Procedure,Pragma Extend_System,Pragma Export_Procedure,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-export-valued-procedure}@anchor{61}
  @section Pragma Export_Valued_Procedure
  
  
*************** string. In this case, no external name i
*** 3560,3566 ****
  still allows the specification of parameter mechanisms.
  
  @node Pragma Extend_System,Pragma Extensions_Allowed,Pragma Export_Valued_Procedure,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-extend-system}@anchor{64}
  @section Pragma Extend_System
  
  
--- 3514,3520 ----
  still allows the specification of parameter mechanisms.
  
  @node Pragma Extend_System,Pragma Extensions_Allowed,Pragma Export_Valued_Procedure,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-extend-system}@anchor{62}
  @section Pragma Extend_System
  
  
*************** definition.  Note that such a package is
*** 3608,3617 ****
  and thus is considered part of the implementation.
  To compile it you will have to use the @emph{-gnatg} switch
  for compiling System units, as explained in the
! GNAT User's Guide.
  
  @node Pragma Extensions_Allowed,Pragma Extensions_Visible,Pragma Extend_System,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-extensions-allowed}@anchor{65}
  @section Pragma Extensions_Allowed
  
  
--- 3562,3571 ----
  and thus is considered part of the implementation.
  To compile it you will have to use the @emph{-gnatg} switch
  for compiling System units, as explained in the
! GNAT User’s Guide.
  
  @node Pragma Extensions_Allowed,Pragma Extensions_Visible,Pragma Extend_System,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-extensions-allowed}@anchor{63}
  @section Pragma Extensions_Allowed
  
  
*************** extension mode (the use of Off as a para
*** 3630,3636 ****
  of the @emph{-gnatX} command switch).
  
  In extension mode, the latest version of the Ada language is
! implemented (currently Ada 202x), and in addition a small number
  of GNAT specific extensions are recognized as follows:
  
  
--- 3584,3590 ----
  of the @emph{-gnatX} command switch).
  
  In extension mode, the latest version of the Ada language is
! implemented (currently Ada 2022), and in addition a number
  of GNAT specific extensions are recognized as follows:
  
  
*************** now under -gnatX to confirm and potentia
*** 3661,3670 ****
  
  This new aggregate syntax for arrays and containers is provided under -gnatX
  to experiment and confirm this new language syntax.
  @end itemize
  
  @node Pragma Extensions_Visible,Pragma External,Pragma Extensions_Allowed,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id12}@anchor{66}@anchor{gnat_rm/implementation_defined_pragmas pragma-extensions-visible}@anchor{67}
  @section Pragma Extensions_Visible
  
  
--- 3615,3851 ----
  
  This new aggregate syntax for arrays and containers is provided under -gnatX
  to experiment and confirm this new language syntax.
+ 
+ @item 
+ Additional @code{when} constructs
+ 
+ In addition to the @code{exit when CONDITION} control structure, several
+ additional constructs are allowed following this format. Including
+ @code{return when CONDITION}, @code{goto when CONDITION}, and
+ @code{raise [with EXCEPTION_MESSAGE] when CONDITION.}
+ 
+ Some examples:
+ 
+ @example
+ return Result when Variable > 10;
+ 
+ raise Program_Error with "Element is null" when Element = null;
+ 
+ goto End_Of_Subprogram when Variable = -1;
+ @end example
+ 
+ @item 
+ Casing on composite values (aka pattern matching)
+ 
+ The selector for a case statement may be of a composite type, subject to
+ some restrictions (described below). Aggregate syntax is used for choices
+ of such a case statement; however, in cases where a “normal” aggregate would
+ require a discrete value, a discrete subtype may be used instead; box
+ notation can also be used to match all values.
+ 
+ Consider this example:
+ 
+ @example
+ type Rec is record
+    F1, F2 : Integer;
+ end record;
+ 
+ procedure Caser_1 (X : Rec) is
+ begin
+    case X is
+       when (F1 => Positive, F2 => Positive) =>
+          Do_This;
+       when (F1 => Natural, F2 => <>) | (F1 => <>, F2 => Natural) =>
+          Do_That;
+       when others =>
+           Do_The_Other_Thing;
+    end case;
+ end Caser_1;
+ @end example
+ 
+ If Caser_1 is called and both components of X are positive, then
+ Do_This will be called; otherwise, if either component is nonnegative
+ then Do_That will be called; otherwise, Do_The_Other_Thing will be called.
+ 
+ If the set of values that match the choice(s) of an earlier alternative
+ overlaps the corresponding set of a later alternative, then the first
+ set shall be a proper subset of the second (and the later alternative
+ will not be executed if the earlier alternative “matches”). All possible
+ values of the composite type shall be covered. The composite type of the
+ selector shall be an array or record type that is neither limited
+ class-wide.
+ 
+ If a subcomponent’s subtype does not meet certain restrictions, then
+ the only value that can be specified for that subcomponent in a case
+ choice expression is a “box” component association (which matches all
+ possible values for the subcomponent). This restriction applies if
+ 
+ 
+ @itemize -
+ 
+ @item 
+ the component subtype is not a record, array, or discrete type; or
+ 
+ @item 
+ the component subtype is subject to a non-static constraint or
+ has a predicate; or
+ 
+ @item 
+ the component type is an enumeration type that is subject to an
+ enumeration representation clause; or
+ 
+ @item 
+ the component type is a multidimensional array type or an
+ array type with a nonstatic index subtype.
+ @end itemize
+ 
+ Support for casing on arrays (and on records that contain arrays) is
+ currently subject to some restrictions. Non-positional
+ array aggregates are not supported as (or within) case choices. Likewise
+ for array type and subtype names. The current implementation exceeds
+ compile-time capacity limits in some annoyingly common scenarios; the
+ message generated in such cases is usually “Capacity exceeded in compiling
+ case statement with composite selector type”.
+ 
+ In addition, pattern bindings are supported. This is a mechanism
+ for binding a name to a component of a matching value for use within
+ an alternative of a case statement. For a component association
+ that occurs within a case choice, the expression may be followed by
+ “is <identifier>”. In the special case of a “box” component association,
+ the identifier may instead be provided within the box. Either of these
+ indicates that the given identifer denotes (a constant view of) the matching
+ subcomponent of the case selector. Binding is not yet supported for arrays
+ or subcomponents thereof.
+ 
+ Consider this example (which uses type Rec from the previous example):
+ 
+ @example
+ procedure Caser_2 (X : Rec) is
+ begin
+    case X is
+       when (F1 => Positive is Abc, F2 => Positive) =>
+          Do_This (Abc)
+       when (F1 => Natural is N1, F2 => <N2>) |
+            (F1 => <N2>, F2 => Natural is N1) =>
+          Do_That (Param_1 => N1, Param_2 => N2);
+       when others =>
+          Do_The_Other_Thing;
+    end case;
+ end Caser_2;
+ @end example
+ 
+ This example is the same as the previous one with respect to
+ determining whether Do_This, Do_That, or Do_The_Other_Thing will
+ be called. But for this version, Do_This takes a parameter and Do_That
+ takes two parameters. If Do_This is called, the actual parameter in the
+ call will be X.F1.
+ 
+ If Do_That is called, the situation is more complex because there are two
+ choices for that alternative. If Do_That is called because the first choice
+ matched (i.e., because X.F1 is nonnegative and either X.F1 or X.F2 is zero
+ or negative), then the actual parameters of the call will be (in order)
+ X.F1 and X.F2. If Do_That is called because the second choice matched (and
+ the first one did not), then the actual parameters will be reversed.
+ 
+ Within the choice list for single alternative, each choice must
+ define the same set of bindings and the component subtypes for
+ for a given identifer must all statically match. Currently, the case
+ of a binding for a nondiscrete component is not implemented.
+ 
+ @item 
+ Fixed lower bounds for array types and subtypes
+ 
+ Unconstrained array types and subtypes can be specified with a lower bound
+ that is fixed to a certain value, by writing an index range that uses the
+ syntax “<lower-bound-expression> .. <>”. This guarantees that all objects
+ of the type or subtype will have the specified lower bound.
+ 
+ For example, a matrix type with fixed lower bounds of zero for each
+ dimension can be declared by the following:
+ 
+ @example
+ type Matrix is
+   array (Natural range 0 .. <>, Natural range 0 .. <>) of Integer;
+ @end example
+ 
+ Objects of type Matrix declared with an index constraint must have index
+ ranges starting at zero:
+ 
+ @example
+ M1 : Matrix (0 .. 9, 0 .. 19);
+ M2 : Matrix (2 .. 11, 3 .. 22);  -- Warning about bounds; will raise CE
+ @end example
+ 
+ Similarly, a subtype of String can be declared that specifies the lower
+ bound of objects of that subtype to be 1:
+ 
+ @quotation
+ 
+ @example
+ subtype String_1 is String (1 .. <>);
+ @end example
+ @end quotation
+ 
+ If a string slice is passed to a formal of subtype String_1 in a call to
+ a subprogram S, the slice’s bounds will “slide” so that the lower bound
+ is 1. Within S, the lower bound of the formal is known to be 1, so, unlike
+ a normal unconstrained String formal, there is no need to worry about
+ accounting for other possible lower-bound values. Sliding of bounds also
+ occurs in other contexts, such as for object declarations with an
+ unconstrained subtype with fixed lower bound, as well as in subtype
+ conversions.
+ 
+ Use of this feature increases safety by simplifying code, and can also
+ improve the efficiency of indexing operations, since the compiler statically
+ knows the lower bound of unconstrained array formals when the formal’s
+ subtype has index ranges with static fixed lower bounds.
+ 
+ @item 
+ Prefixed-view notation for calls to primitive subprograms of untagged types
+ 
+ Since Ada 2005, calls to primitive subprograms of a tagged type that
+ have a “prefixed view” (see RM 4.1.3(9.2)) have been allowed to be
+ written using the form of a selected_component, with the first actual
+ parameter given as the prefix and the name of the subprogram as a
+ selector. This prefixed-view notation for calls is extended so as to
+ also allow such syntax for calls to primitive subprograms of untagged
+ types. The primitives of an untagged type T that have a prefixed view
+ are those where the first formal parameter of the subprogram either
+ is of type T or is an anonymous access parameter whose designated type
+ is T. For a type that has a component that happens to have the same
+ simple name as one of the type’s primitive subprograms, where the
+ component is visible at the point of a selected_component using that
+ name, preference is given to the component in a selected_component
+ (as is currently the case for tagged types with such component names).
+ 
+ @item 
+ Expression defaults for generic formal functions
+ 
+ The declaration of a generic formal function is allowed to specify
+ an expression as a default, using the syntax of an expression function.
+ 
+ Here is an example of this feature:
+ 
+ @example
+ generic
+    type T is private;
+    with function Copy (Item : T) return T is (Item); -- Defaults to Item
+ package Stacks is
+ 
+    type Stack is limited private;
+ 
+    procedure Push (S : in out Stack; X : T); -- Calls Copy on X
+ 
+    function Pop (S : in out Stack) return T; -- Calls Copy to return item
+ 
+ private
+    -- ...
+ end Stacks;
+ @end example
  @end itemize
  
  @node Pragma Extensions_Visible,Pragma External,Pragma Extensions_Allowed,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id12}@anchor{64}@anchor{gnat_rm/implementation_defined_pragmas pragma-extensions-visible}@anchor{65}
  @section Pragma Extensions_Visible
  
  
*************** For the semantics of this pragma, see th
*** 3678,3684 ****
  in the SPARK 2014 Reference Manual, section 6.1.7.
  
  @node Pragma External,Pragma External_Name_Casing,Pragma Extensions_Visible,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-external}@anchor{68}
  @section Pragma External
  
  
--- 3859,3865 ----
  in the SPARK 2014 Reference Manual, section 6.1.7.
  
  @node Pragma External,Pragma External_Name_Casing,Pragma Extensions_Visible,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-external}@anchor{66}
  @section Pragma External
  
  
*************** used this pragma for exactly the same pu
*** 3699,3705 ****
  @code{Export} before the latter was standardized.
  
  @node Pragma External_Name_Casing,Pragma Fast_Math,Pragma External,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-external-name-casing}@anchor{69}
  @section Pragma External_Name_Casing
  
  
--- 3880,3886 ----
  @code{Export} before the latter was standardized.
  
  @node Pragma External_Name_Casing,Pragma Fast_Math,Pragma External,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-external-name-casing}@anchor{67}
  @section Pragma External_Name_Casing
  
  
*************** pragma External_Name_Casing (Uppercase,
*** 3788,3794 ****
  to enforce the upper casing of all external symbols.
  
  @node Pragma Fast_Math,Pragma Favor_Top_Level,Pragma External_Name_Casing,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-fast-math}@anchor{6a}
  @section Pragma Fast_Math
  
  
--- 3969,3975 ----
  to enforce the upper casing of all external symbols.
  
  @node Pragma Fast_Math,Pragma Favor_Top_Level,Pragma External_Name_Casing,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-fast-math}@anchor{68}
  @section Pragma Fast_Math
  
  
*************** under control of the pragma, rather than
*** 3817,3823 ****
  @end table
  
  @node Pragma Favor_Top_Level,Pragma Finalize_Storage_Only,Pragma Fast_Math,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id13}@anchor{6b}@anchor{gnat_rm/implementation_defined_pragmas pragma-favor-top-level}@anchor{6c}
  @section Pragma Favor_Top_Level
  
  
--- 3998,4004 ----
  @end table
  
  @node Pragma Favor_Top_Level,Pragma Finalize_Storage_Only,Pragma Fast_Math,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id13}@anchor{69}@anchor{gnat_rm/implementation_defined_pragmas pragma-favor-top-level}@anchor{6a}
  @section Pragma Favor_Top_Level
  
  
*************** When this pragma is used, dynamically ge
*** 3836,3842 ****
  targets for nested subprograms. See restriction @code{No_Implicit_Dynamic_Code}.
  
  @node Pragma Finalize_Storage_Only,Pragma Float_Representation,Pragma Favor_Top_Level,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-finalize-storage-only}@anchor{6d}
  @section Pragma Finalize_Storage_Only
  
  
--- 4017,4023 ----
  targets for nested subprograms. See restriction @code{No_Implicit_Dynamic_Code}.
  
  @node Pragma Finalize_Storage_Only,Pragma Float_Representation,Pragma Favor_Top_Level,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-finalize-storage-only}@anchor{6b}
  @section Pragma Finalize_Storage_Only
  
  
*************** name. Note that this pragma does not sup
*** 3856,3862 ****
  heap-allocated objects (see pragma @code{No_Heap_Finalization}).
  
  @node Pragma Float_Representation,Pragma Ghost,Pragma Finalize_Storage_Only,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-float-representation}@anchor{6e}
  @section Pragma Float_Representation
  
  
--- 4037,4043 ----
  heap-allocated objects (see pragma @code{No_Heap_Finalization}).
  
  @node Pragma Float_Representation,Pragma Ghost,Pragma Finalize_Storage_Only,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-float-representation}@anchor{6c}
  @section Pragma Float_Representation
  
  
*************** No other value of digits is permitted.
*** 3891,3897 ****
  @end itemize
  
  @node Pragma Ghost,Pragma Global,Pragma Float_Representation,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ghost}@anchor{6f}@anchor{gnat_rm/implementation_defined_pragmas id14}@anchor{70}
  @section Pragma Ghost
  
  
--- 4072,4078 ----
  @end itemize
  
  @node Pragma Ghost,Pragma Global,Pragma Float_Representation,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id14}@anchor{6d}@anchor{gnat_rm/implementation_defined_pragmas pragma-ghost}@anchor{6e}
  @section Pragma Ghost
  
  
*************** For the semantics of this pragma, see th
*** 3905,3911 ****
  2014 Reference Manual, section 6.9.
  
  @node Pragma Global,Pragma Ident,Pragma Ghost,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-global}@anchor{71}@anchor{gnat_rm/implementation_defined_pragmas id15}@anchor{72}
  @section Pragma Global
  
  
--- 4086,4092 ----
  2014 Reference Manual, section 6.9.
  
  @node Pragma Global,Pragma Ident,Pragma Ghost,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id15}@anchor{6f}@anchor{gnat_rm/implementation_defined_pragmas pragma-global}@anchor{70}
  @section Pragma Global
  
  
*************** For the semantics of this pragma, see th
*** 3930,3936 ****
  SPARK 2014 Reference Manual, section 6.1.4.
  
  @node Pragma Ident,Pragma Ignore_Pragma,Pragma Global,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ident}@anchor{73}
  @section Pragma Ident
  
  
--- 4111,4117 ----
  SPARK 2014 Reference Manual, section 6.1.4.
  
  @node Pragma Ident,Pragma Ignore_Pragma,Pragma Global,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ident}@anchor{71}
  @section Pragma Ident
  
  
*************** This pragma is identical in effect to pr
*** 3944,3950 ****
  for compatibility with other Ada compilers providing this pragma.
  
  @node Pragma Ignore_Pragma,Pragma Implementation_Defined,Pragma Ident,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ignore-pragma}@anchor{74}
  @section Pragma Ignore_Pragma
  
  
--- 4125,4131 ----
  for compatibility with other Ada compilers providing this pragma.
  
  @node Pragma Ignore_Pragma,Pragma Implementation_Defined,Pragma Ident,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ignore-pragma}@anchor{72}
  @section Pragma Ignore_Pragma
  
  
*************** pragma allows such pragmas to be ignored
*** 3964,3970 ****
  mode, or during porting of legacy code.
  
  @node Pragma Implementation_Defined,Pragma Implemented,Pragma Ignore_Pragma,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-implementation-defined}@anchor{75}
  @section Pragma Implementation_Defined
  
  
--- 4145,4151 ----
  mode, or during porting of legacy code.
  
  @node Pragma Implementation_Defined,Pragma Implemented,Pragma Ignore_Pragma,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-implementation-defined}@anchor{73}
  @section Pragma Implementation_Defined
  
  
*************** for the purpose of implementing the No_I
*** 3991,3997 ****
  restriction.
  
  @node Pragma Implemented,Pragma Implicit_Packing,Pragma Implementation_Defined,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-implemented}@anchor{76}
  @section Pragma Implemented
  
  
--- 4172,4178 ----
  restriction.
  
  @node Pragma Implemented,Pragma Implicit_Packing,Pragma Implementation_Defined,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-implemented}@anchor{74}
  @section Pragma Implemented
  
  
*************** By_Entry guarantees that the action of r
*** 4034,4043 ****
  another entry. Implementation kind By_Protected_Procedure transforms the
  requeue into a dispatching call, thus eliminating the chance of blocking. Kind
  By_Any shares the behavior of By_Entry and By_Protected_Procedure depending on
! the target's overriding subprogram kind.
  
  @node Pragma Implicit_Packing,Pragma Import_Function,Pragma Implemented,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-implicit-packing}@anchor{77}
  @section Pragma Implicit_Packing
  
  
--- 4215,4224 ----
  another entry. Implementation kind By_Protected_Procedure transforms the
  requeue into a dispatching call, thus eliminating the chance of blocking. Kind
  By_Any shares the behavior of By_Entry and By_Protected_Procedure depending on
! the target’s overriding subprogram kind.
  
  @node Pragma Implicit_Packing,Pragma Import_Function,Pragma Implemented,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-implicit-packing}@anchor{75}
  @section Pragma Implicit_Packing
  
  
*************** sufficient. The use of pragma Implicit_P
*** 4091,4097 ****
  declaration to compile without an explicit pragma Pack.
  
  @node Pragma Import_Function,Pragma Import_Object,Pragma Implicit_Packing,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-import-function}@anchor{78}
  @section Pragma Import_Function
  
  
--- 4272,4278 ----
  declaration to compile without an explicit pragma Pack.
  
  @node Pragma Import_Function,Pragma Import_Object,Pragma Implicit_Packing,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-import-function}@anchor{76}
  @section Pragma Import_Function
  
  
*************** notation.  If the mechanism is not speci
*** 4156,4162 ****
  is used.
  
  @node Pragma Import_Object,Pragma Import_Procedure,Pragma Import_Function,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-import-object}@anchor{79}
  @section Pragma Import_Object
  
  
--- 4337,4343 ----
  is used.
  
  @node Pragma Import_Object,Pragma Import_Procedure,Pragma Import_Function,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-import-object}@anchor{77}
  @section Pragma Import_Object
  
  
*************** point of view).  @code{size} is syntax c
*** 4182,4188 ****
  GNAT.
  
  @node Pragma Import_Procedure,Pragma Import_Valued_Procedure,Pragma Import_Object,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-import-procedure}@anchor{7a}
  @section Pragma Import_Procedure
  
  
--- 4363,4369 ----
  GNAT.
  
  @node Pragma Import_Procedure,Pragma Import_Valued_Procedure,Pragma Import_Object,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-import-procedure}@anchor{78}
  @section Pragma Import_Procedure
  
  
*************** applies to a procedure rather than a fun
*** 4222,4228 ****
  @code{Result_Type} and @code{Result_Mechanism} are not permitted.
  
  @node Pragma Import_Valued_Procedure,Pragma Independent,Pragma Import_Procedure,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-import-valued-procedure}@anchor{7b}
  @section Pragma Import_Valued_Procedure
  
  
--- 4403,4409 ----
  @code{Result_Type} and @code{Result_Mechanism} are not permitted.
  
  @node Pragma Import_Valued_Procedure,Pragma Independent,Pragma Import_Procedure,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-import-valued-procedure}@anchor{79}
  @section Pragma Import_Valued_Procedure
  
  
*************** pragma Import that specifies the desired
*** 4275,4281 ****
  default convention is Ada, which is almost certainly not what is required.
  
  @node Pragma Independent,Pragma Independent_Components,Pragma Import_Valued_Procedure,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-independent}@anchor{7c}
  @section Pragma Independent
  
  
--- 4456,4462 ----
  default convention is Ada, which is almost certainly not what is required.
  
  @node Pragma Independent,Pragma Independent_Components,Pragma Import_Valued_Procedure,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-independent}@anchor{7a}
  @section Pragma Independent
  
  
*************** constraints on the representation of the
*** 4297,4303 ****
  tight packing).
  
  @node Pragma Independent_Components,Pragma Initial_Condition,Pragma Independent,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-independent-components}@anchor{7d}
  @section Pragma Independent_Components
  
  
--- 4478,4484 ----
  tight packing).
  
  @node Pragma Independent_Components,Pragma Initial_Condition,Pragma Independent,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-independent-components}@anchor{7b}
  @section Pragma Independent_Components
  
  
*************** constraints on the representation of the
*** 4318,4324 ****
  tight packing).
  
  @node Pragma Initial_Condition,Pragma Initialize_Scalars,Pragma Independent_Components,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id16}@anchor{7e}@anchor{gnat_rm/implementation_defined_pragmas pragma-initial-condition}@anchor{7f}
  @section Pragma Initial_Condition
  
  
--- 4499,4505 ----
  tight packing).
  
  @node Pragma Initial_Condition,Pragma Initialize_Scalars,Pragma Independent_Components,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id16}@anchor{7c}@anchor{gnat_rm/implementation_defined_pragmas pragma-initial-condition}@anchor{7d}
  @section Pragma Initial_Condition
  
  
*************** For the semantics of this pragma, see th
*** 4332,4338 ****
  in the SPARK 2014 Reference Manual, section 7.1.6.
  
  @node Pragma Initialize_Scalars,Pragma Initializes,Pragma Initial_Condition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-initialize-scalars}@anchor{80}
  @section Pragma Initialize_Scalars
  
  
--- 4513,4519 ----
  in the SPARK 2014 Reference Manual, section 7.1.6.
  
  @node Pragma Initialize_Scalars,Pragma Initializes,Pragma Initial_Condition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-initialize-scalars}@anchor{7e}
  @section Pragma Initialize_Scalars
  
  
*************** Initialization with low values.
*** 4413,4426 ****
  Initialization with a specific bit pattern.
  @end itemize
  
! See the GNAT User's Guide for binder options for specifying these cases.
  
  The bind-time approach is intended to provide fast turnaround for testing
  with different values, without having to recompile the program.
  
  @item 
  At execution time, the programmer can specify the invalid values using an
! environment variable. See the GNAT User's Guide for details.
  
  The execution-time approach is intended to provide fast turnaround for
  testing with different values, without having to recompile and rebind the
--- 4594,4607 ----
  Initialization with a specific bit pattern.
  @end itemize
  
! See the GNAT User’s Guide for binder options for specifying these cases.
  
  The bind-time approach is intended to provide fast turnaround for testing
  with different values, without having to recompile the program.
  
  @item 
  At execution time, the programmer can specify the invalid values using an
! environment variable. See the GNAT User’s Guide for details.
  
  The execution-time approach is intended to provide fast turnaround for
  testing with different values, without having to recompile and rebind the
*************** program.
*** 4430,4436 ****
  Note that pragma @code{Initialize_Scalars} is particularly useful in conjunction
  with the enhanced validity checking that is now provided in GNAT, which checks
  for invalid values under more conditions. Using this feature (see description
! of the @emph{-gnatV} flag in the GNAT User's Guide) in conjunction with pragma
  @code{Initialize_Scalars} provides a powerful new tool to assist in the detection
  of problems caused by uninitialized variables.
  
--- 4611,4617 ----
  Note that pragma @code{Initialize_Scalars} is particularly useful in conjunction
  with the enhanced validity checking that is now provided in GNAT, which checks
  for invalid values under more conditions. Using this feature (see description
! of the @emph{-gnatV} flag in the GNAT User’s Guide) in conjunction with pragma
  @code{Initialize_Scalars} provides a powerful new tool to assist in the detection
  of problems caused by uninitialized variables.
  
*************** Note: the use of @code{Initialize_Scalar
*** 4438,4447 ****
  generated code. This may cause your code to be substantially larger. It may
  also cause an increase in the amount of stack required, so it is probably a
  good idea to turn on stack checking (see description of stack checking in the
! GNAT User's Guide) when using this pragma.
  
  @node Pragma Initializes,Pragma Inline_Always,Pragma Initialize_Scalars,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-initializes}@anchor{81}@anchor{gnat_rm/implementation_defined_pragmas id17}@anchor{82}
  @section Pragma Initializes
  
  
--- 4619,4628 ----
  generated code. This may cause your code to be substantially larger. It may
  also cause an increase in the amount of stack required, so it is probably a
  good idea to turn on stack checking (see description of stack checking in the
! GNAT User’s Guide) when using this pragma.
  
  @node Pragma Initializes,Pragma Inline_Always,Pragma Initialize_Scalars,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id17}@anchor{7f}@anchor{gnat_rm/implementation_defined_pragmas pragma-initializes}@anchor{80}
  @section Pragma Initializes
  
  
*************** For the semantics of this pragma, see th
*** 4468,4474 ****
  SPARK 2014 Reference Manual, section 7.1.5.
  
  @node Pragma Inline_Always,Pragma Inline_Generic,Pragma Initializes,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id18}@anchor{83}@anchor{gnat_rm/implementation_defined_pragmas pragma-inline-always}@anchor{84}
  @section Pragma Inline_Always
  
  
--- 4649,4655 ----
  SPARK 2014 Reference Manual, section 7.1.5.
  
  @node Pragma Inline_Always,Pragma Inline_Generic,Pragma Initializes,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id18}@anchor{81}@anchor{gnat_rm/implementation_defined_pragmas pragma-inline-always}@anchor{82}
  @section Pragma Inline_Always
  
  
*************** apply this pragma to a primitive operati
*** 4487,4493 ****
  restrictions, the compiler is allowed to remove the out-of-line body of @code{NAME}.
  
  @node Pragma Inline_Generic,Pragma Interface,Pragma Inline_Always,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-inline-generic}@anchor{85}
  @section Pragma Inline_Generic
  
  
--- 4668,4674 ----
  restrictions, the compiler is allowed to remove the out-of-line body of @code{NAME}.
  
  @node Pragma Inline_Generic,Pragma Interface,Pragma Inline_Always,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-inline-generic}@anchor{83}
  @section Pragma Inline_Generic
  
  
*************** than to check that the given names are a
*** 4505,4511 ****
  generic instances.
  
  @node Pragma Interface,Pragma Interface_Name,Pragma Inline_Generic,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-interface}@anchor{86}
  @section Pragma Interface
  
  
--- 4686,4692 ----
  generic instances.
  
  @node Pragma Interface,Pragma Interface_Name,Pragma Inline_Generic,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-interface}@anchor{84}
  @section Pragma Interface
  
  
*************** maintaining Ada 83/Ada 95 compatibility
*** 4532,4538 ****
  Ada 83 compilers.
  
  @node Pragma Interface_Name,Pragma Interrupt_Handler,Pragma Interface,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-interface-name}@anchor{87}
  @section Pragma Interface_Name
  
  
--- 4713,4719 ----
  Ada 83 compilers.
  
  @node Pragma Interface_Name,Pragma Interrupt_Handler,Pragma Interface,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-interface-name}@anchor{85}
  @section Pragma Interface_Name
  
  
*************** for an interfaced subprogram, and is pro
*** 4551,4557 ****
  least one of @code{External_Name} or @code{Link_Name}.
  
  @node Pragma Interrupt_Handler,Pragma Interrupt_State,Pragma Interface_Name,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-interrupt-handler}@anchor{88}
  @section Pragma Interrupt_Handler
  
  
--- 4732,4738 ----
  least one of @code{External_Name} or @code{Link_Name}.
  
  @node Pragma Interrupt_Handler,Pragma Interrupt_State,Pragma Interface_Name,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-interrupt-handler}@anchor{86}
  @section Pragma Interrupt_Handler
  
  
*************** pragma Interrupt_Handler (procedure_LOCA
*** 4562,4577 ****
  @end example
  
  This program unit pragma is supported for parameterless protected procedures
! as described in Annex C of the Ada Reference Manual. On the AAMP target
! the pragma can also be specified for nonprotected parameterless procedures
! that are declared at the library level (which includes procedures
! declared at the top level of a library package). In the case of AAMP,
! when this pragma is applied to a nonprotected procedure, the instruction
! @code{IERET} is generated for returns from the procedure, enabling
! maskable interrupts, in place of the normal return instruction.
  
  @node Pragma Interrupt_State,Pragma Invariant,Pragma Interrupt_Handler,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-interrupt-state}@anchor{89}
  @section Pragma Interrupt_State
  
  
--- 4743,4752 ----
  @end example
  
  This program unit pragma is supported for parameterless protected procedures
! as described in Annex C of the Ada Reference Manual.
  
  @node Pragma Interrupt_State,Pragma Invariant,Pragma Interrupt_Handler,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-interrupt-state}@anchor{87}
  @section Pragma Interrupt_State
  
  
*************** operating system documentation, or the v
*** 4653,4663 ****
  declared in the spec of package @code{System.OS_Interface}.
  
  Overriding the default state of signals used by the Ada runtime may interfere
! with an application's runtime behavior in the cases of the synchronous signals,
  and in the case of the signal used to implement the @code{abort} statement.
  
  @node Pragma Invariant,Pragma Keep_Names,Pragma Interrupt_State,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id19}@anchor{8a}@anchor{gnat_rm/implementation_defined_pragmas pragma-invariant}@anchor{8b}
  @section Pragma Invariant
  
  
--- 4828,4838 ----
  declared in the spec of package @code{System.OS_Interface}.
  
  Overriding the default state of signals used by the Ada runtime may interfere
! with an application’s runtime behavior in the cases of the synchronous signals,
  and in the case of the signal used to implement the @code{abort} statement.
  
  @node Pragma Invariant,Pragma Keep_Names,Pragma Interrupt_State,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id19}@anchor{88}@anchor{gnat_rm/implementation_defined_pragmas pragma-invariant}@anchor{89}
  @section Pragma Invariant
  
  
*************** is violated. If no Message parameter is
*** 4688,4694 ****
  identifies the line on which the pragma appears is used.
  
  It is permissible to have multiple Invariants for the same type entity, in
! which case they are and'ed together. It is permissible to use this pragma
  in Ada 2012 mode, but you cannot have both an invariant aspect and an
  invariant pragma for the same entity.
  
--- 4863,4869 ----
  identifies the line on which the pragma appears is used.
  
  It is permissible to have multiple Invariants for the same type entity, in
! which case they are and’ed together. It is permissible to use this pragma
  in Ada 2012 mode, but you cannot have both an invariant aspect and an
  invariant pragma for the same entity.
  
*************** For further details on the use of this p
*** 4696,4702 ****
  of the Type_Invariant aspect.
  
  @node Pragma Keep_Names,Pragma License,Pragma Invariant,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-keep-names}@anchor{8c}
  @section Pragma Keep_Names
  
  
--- 4871,4877 ----
  of the Type_Invariant aspect.
  
  @node Pragma Keep_Names,Pragma License,Pragma Invariant,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-keep-names}@anchor{8a}
  @section Pragma Keep_Names
  
  
*************** use a @code{Discard_Names} pragma in the
*** 4716,4722 ****
  want to retain the names for specific enumeration types.
  
  @node Pragma License,Pragma Link_With,Pragma Keep_Names,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-license}@anchor{8d}
  @section Pragma License
  
  
--- 4891,4897 ----
  want to retain the names for specific enumeration types.
  
  @node Pragma License,Pragma Link_With,Pragma Keep_Names,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-license}@anchor{8b}
  @section Pragma License
  
  
*************** are recognized, and license information
*** 4772,4784 ****
  A GNAT license header starts with a line containing 78 hyphens.  The following
  comment text is searched for the appearance of any of the following strings.
  
! If the string 'GNU General Public License' is found, then the unit is assumed
! to have GPL license, unless the string 'As a special exception' follows, in
  which case the license is assumed to be modified GPL.
  
  If one of the strings
! 'This specification is adapted from the Ada Semantic Interface' or
! 'This specification is derived from the Ada Reference Manual' is found
  then the unit is assumed to be unrestricted.
  
  These default actions means that a program with a restricted license pragma
--- 4947,4959 ----
  A GNAT license header starts with a line containing 78 hyphens.  The following
  comment text is searched for the appearance of any of the following strings.
  
! If the string ‘GNU General Public License’ is found, then the unit is assumed
! to have GPL license, unless the string ‘As a special exception’ follows, in
  which case the license is assumed to be modified GPL.
  
  If one of the strings
! ‘This specification is adapted from the Ada Semantic Interface’ or
! ‘This specification is derived from the Ada Reference Manual’ is found
  then the unit is assumed to be unrestricted.
  
  These default actions means that a program with a restricted license pragma
*************** GPL, but no warning for @code{GNAT.Socke
*** 4811,4817 ****
  run time, and is therefore licensed under the modified GPL.
  
  @node Pragma Link_With,Pragma Linker_Alias,Pragma License,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-link-with}@anchor{8e}
  @section Pragma Link_With
  
  
--- 4986,4992 ----
  run time, and is therefore licensed under the modified GPL.
  
  @node Pragma Link_With,Pragma Linker_Alias,Pragma License,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-link-with}@anchor{8c}
  @section Pragma Link_With
  
  
*************** separate arguments to the linker. In add
*** 4835,4841 ****
  multiple arguments, with the same effect as successive pragmas.
  
  @node Pragma Linker_Alias,Pragma Linker_Constructor,Pragma Link_With,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-linker-alias}@anchor{8f}
  @section Pragma Linker_Alias
  
  
--- 5010,5016 ----
  multiple arguments, with the same effect as successive pragmas.
  
  @node Pragma Linker_Alias,Pragma Linker_Constructor,Pragma Link_With,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-linker-alias}@anchor{8d}
  @section Pragma Linker_Alias
  
  
*************** end p;
*** 4876,4882 ****
  @end example
  
  @node Pragma Linker_Constructor,Pragma Linker_Destructor,Pragma Linker_Alias,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-linker-constructor}@anchor{90}
  @section Pragma Linker_Constructor
  
  
--- 5051,5057 ----
  @end example
  
  @node Pragma Linker_Constructor,Pragma Linker_Destructor,Pragma Linker_Alias,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-linker-constructor}@anchor{8e}
  @section Pragma Linker_Constructor
  
  
*************** listed above. Where possible, the use of
*** 4906,4912 ****
  to the use of this pragma.
  
  @node Pragma Linker_Destructor,Pragma Linker_Section,Pragma Linker_Constructor,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-linker-destructor}@anchor{91}
  @section Pragma Linker_Destructor
  
  
--- 5081,5087 ----
  to the use of this pragma.
  
  @node Pragma Linker_Destructor,Pragma Linker_Section,Pragma Linker_Constructor,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-linker-destructor}@anchor{8f}
  @section Pragma Linker_Destructor
  
  
*************** See @code{pragma Linker_Constructor} for
*** 4929,4935 ****
  because of these specific contexts.
  
  @node Pragma Linker_Section,Pragma Lock_Free,Pragma Linker_Destructor,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id20}@anchor{92}@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-section}@anchor{93}
  @section Pragma Linker_Section
  
  
--- 5104,5110 ----
  because of these specific contexts.
  
  @node Pragma Linker_Section,Pragma Lock_Free,Pragma Linker_Destructor,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id20}@anchor{90}@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-section}@anchor{91}
  @section Pragma Linker_Section
  
  
*************** declared at the library level. This prag
*** 4946,4952 ****
  linker section for the given entity. It is equivalent to
  @code{__attribute__((section))} in GNU C and causes @code{LOCAL_NAME} to
  be placed in the @code{static_string_EXPRESSION} section of the
! executable (assuming the linker doesn't rename the section).
  GNAT also provides an implementation defined aspect of the same name.
  
  In the case of specifying this aspect for a type, the effect is to
--- 5121,5127 ----
  linker section for the given entity. It is equivalent to
  @code{__attribute__((section))} in GNU C and causes @code{LOCAL_NAME} to
  be placed in the @code{static_string_EXPRESSION} section of the
! executable (assuming the linker doesn’t rename the section).
  GNAT also provides an implementation defined aspect of the same name.
  
  In the case of specifying this aspect for a type, the effect is to
*************** end IO_Card;
*** 5003,5009 ****
  @end example
  
  @node Pragma Lock_Free,Pragma Loop_Invariant,Pragma Linker_Section,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id21}@anchor{94}@anchor{gnat_rm/implementation_defined_pragmas pragma-lock-free}@anchor{95}
  @section Pragma Lock_Free
  
  
--- 5178,5184 ----
  @end example
  
  @node Pragma Lock_Free,Pragma Loop_Invariant,Pragma Linker_Section,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id21}@anchor{92}@anchor{gnat_rm/implementation_defined_pragmas pragma-lock-free}@anchor{93}
  @section Pragma Lock_Free
  
  
*************** Function calls and attribute references
*** 5055,5061 ****
  @end itemize
  
  @node Pragma Loop_Invariant,Pragma Loop_Optimize,Pragma Lock_Free,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-loop-invariant}@anchor{96}
  @section Pragma Loop_Invariant
  
  
--- 5230,5236 ----
  @end itemize
  
  @node Pragma Loop_Invariant,Pragma Loop_Optimize,Pragma Lock_Free,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-loop-invariant}@anchor{94}
  @section Pragma Loop_Invariant
  
  
*************** except that in an @code{Assertion_Policy
*** 5074,5080 ****
  of statements of a loop body, or nested inside block statements that
  appear in the sequence of statements of a loop body.
  The intention is that it be used to
! represent a "loop invariant" assertion, i.e. something that is true each
  time through the loop, and which can be used to show that the loop is
  achieving its purpose.
  
--- 5249,5255 ----
  of statements of a loop body, or nested inside block statements that
  appear in the sequence of statements of a loop body.
  The intention is that it be used to
! represent a “loop invariant” assertion, i.e. something that is true each
  time through the loop, and which can be used to show that the loop is
  achieving its purpose.
  
*************** attribute can only be used within the ex
*** 5088,5094 ****
  pragma. For full details, see documentation of attribute @code{Loop_Entry}.
  
  @node Pragma Loop_Optimize,Pragma Loop_Variant,Pragma Loop_Invariant,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-loop-optimize}@anchor{97}
  @section Pragma Loop_Optimize
  
  
--- 5263,5269 ----
  pragma. For full details, see documentation of attribute @code{Loop_Entry}.
  
  @node Pragma Loop_Optimize,Pragma Loop_Variant,Pragma Loop_Invariant,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-loop-optimize}@anchor{95}
  @section Pragma Loop_Optimize
  
  
*************** compiler in order to enable the relevant
*** 5150,5156 ****
  vectorization.
  
  @node Pragma Loop_Variant,Pragma Machine_Attribute,Pragma Loop_Optimize,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-loop-variant}@anchor{98}
  @section Pragma Loop_Variant
  
  
--- 5325,5331 ----
  vectorization.
  
  @node Pragma Loop_Variant,Pragma Machine_Attribute,Pragma Loop_Optimize,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-loop-variant}@anchor{96}
  @section Pragma Loop_Variant
  
  
*************** The @code{Loop_Entry} attribute may be u
*** 5197,5203 ****
  @code{Loop_Variant} pragma to refer to values on entry to the loop.
  
  @node Pragma Machine_Attribute,Pragma Main,Pragma Loop_Variant,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-machine-attribute}@anchor{99}
  @section Pragma Machine_Attribute
  
  
--- 5372,5378 ----
  @code{Loop_Variant} pragma to refer to values on entry to the loop.
  
  @node Pragma Machine_Attribute,Pragma Main,Pragma Loop_Variant,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-machine-attribute}@anchor{97}
  @section Pragma Machine_Attribute
  
  
*************** which may make this pragma unusable for
*** 5223,5229 ****
  For further information see @cite{GNU Compiler Collection (GCC) Internals}.
  
  @node Pragma Main,Pragma Main_Storage,Pragma Machine_Attribute,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-main}@anchor{9a}
  @section Pragma Main
  
  
--- 5398,5404 ----
  For further information see @cite{GNU Compiler Collection (GCC) Internals}.
  
  @node Pragma Main,Pragma Main_Storage,Pragma Machine_Attribute,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-main}@anchor{98}
  @section Pragma Main
  
  
*************** This pragma is provided for compatibilit
*** 5243,5249 ****
  no effect in GNAT, other than being syntax checked.
  
  @node Pragma Main_Storage,Pragma Max_Queue_Length,Pragma Main,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-main-storage}@anchor{9b}
  @section Pragma Main_Storage
  
  
--- 5418,5424 ----
  no effect in GNAT, other than being syntax checked.
  
  @node Pragma Main_Storage,Pragma Max_Queue_Length,Pragma Main,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-main-storage}@anchor{99}
  @section Pragma Main_Storage
  
  
*************** This pragma is provided for compatibilit
*** 5262,5268 ****
  no effect in GNAT, other than being syntax checked.
  
  @node Pragma Max_Queue_Length,Pragma No_Body,Pragma Main_Storage,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id22}@anchor{9c}@anchor{gnat_rm/implementation_defined_pragmas pragma-max-queue-length}@anchor{9d}
  @section Pragma Max_Queue_Length
  
  
--- 5437,5443 ----
  no effect in GNAT, other than being syntax checked.
  
  @node Pragma Max_Queue_Length,Pragma No_Body,Pragma Main_Storage,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id22}@anchor{9a}@anchor{gnat_rm/implementation_defined_pragmas pragma-max-queue-length}@anchor{9b}
  @section Pragma Max_Queue_Length
  
  
*************** entry.
*** 5280,5286 ****
  A value of -1 represents no additional restriction on queue length.
  
  @node Pragma No_Body,Pragma No_Caching,Pragma Max_Queue_Length,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-body}@anchor{9e}
  @section Pragma No_Body
  
  
--- 5455,5461 ----
  A value of -1 represents no additional restriction on queue length.
  
  @node Pragma No_Body,Pragma No_Caching,Pragma Max_Queue_Length,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-body}@anchor{9c}
  @section Pragma No_Body
  
  
*************** dummy body with a No_Body pragma ensures
*** 5303,5309 ****
  earlier versions of the package body.
  
  @node Pragma No_Caching,Pragma No_Component_Reordering,Pragma No_Body,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-caching}@anchor{9f}@anchor{gnat_rm/implementation_defined_pragmas id23}@anchor{a0}
  @section Pragma No_Caching
  
  
--- 5478,5484 ----
  earlier versions of the package body.
  
  @node Pragma No_Caching,Pragma No_Component_Reordering,Pragma No_Body,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id23}@anchor{9d}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-caching}@anchor{9e}
  @section Pragma No_Caching
  
  
*************** For the semantics of this pragma, see th
*** 5317,5323 ****
  the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma No_Component_Reordering,Pragma No_Elaboration_Code_All,Pragma No_Caching,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-component-reordering}@anchor{a1}
  @section Pragma No_Component_Reordering
  
  
--- 5492,5498 ----
  the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma No_Component_Reordering,Pragma No_Elaboration_Code_All,Pragma No_Caching,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-component-reordering}@anchor{9f}
  @section Pragma No_Component_Reordering
  
  
*************** declared in units to which the pragma ap
*** 5336,5342 ****
  that this pragma be used consistently within a partition.
  
  @node Pragma No_Elaboration_Code_All,Pragma No_Heap_Finalization,Pragma No_Component_Reordering,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id24}@anchor{a2}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-elaboration-code-all}@anchor{a3}
  @section Pragma No_Elaboration_Code_All
  
  
--- 5511,5517 ----
  that this pragma be used consistently within a partition.
  
  @node Pragma No_Elaboration_Code_All,Pragma No_Heap_Finalization,Pragma No_Component_Reordering,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id24}@anchor{a0}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-elaboration-code-all}@anchor{a1}
  @section Pragma No_Elaboration_Code_All
  
  
*************** This is a program unit pragma (there is
*** 5350,5361 ****
  same name) that establishes the restriction @code{No_Elaboration_Code} for
  the current unit and any extended main source units (body and subunits).
  It also has the effect of enforcing a transitive application of this
! aspect, so that if any unit is implicitly or explicitly with'ed by the
  current unit, it must also have the No_Elaboration_Code_All aspect set.
  It may be applied to package or subprogram specs or their generic versions.
  
  @node Pragma No_Heap_Finalization,Pragma No_Inline,Pragma No_Elaboration_Code_All,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-heap-finalization}@anchor{a4}
  @section Pragma No_Heap_Finalization
  
  
--- 5525,5536 ----
  same name) that establishes the restriction @code{No_Elaboration_Code} for
  the current unit and any extended main source units (body and subunits).
  It also has the effect of enforcing a transitive application of this
! aspect, so that if any unit is implicitly or explicitly with’ed by the
  current unit, it must also have the No_Elaboration_Code_All aspect set.
  It may be applied to package or subprogram specs or their generic versions.
  
  @node Pragma No_Heap_Finalization,Pragma No_Inline,Pragma No_Elaboration_Code_All,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-heap-finalization}@anchor{a2}
  @section Pragma No_Heap_Finalization
  
  
*************** lose its @code{No_Heap_Finalization} pra
*** 5387,5393 ****
  appear at the library level.
  
  @node Pragma No_Inline,Pragma No_Return,Pragma No_Heap_Finalization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id25}@anchor{a5}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-inline}@anchor{a6}
  @section Pragma No_Inline
  
  
--- 5562,5568 ----
  appear at the library level.
  
  @node Pragma No_Inline,Pragma No_Return,Pragma No_Heap_Finalization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id25}@anchor{a3}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-inline}@anchor{a4}
  @section Pragma No_Inline
  
  
*************** in particular it is not subject to the u
*** 5405,5411 ****
  pragma @code{Inline_Always} for the same @code{NAME}.
  
  @node Pragma No_Return,Pragma No_Strict_Aliasing,Pragma No_Inline,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-return}@anchor{a7}
  @section Pragma No_Return
  
  
--- 5580,5586 ----
  pragma @code{Inline_Always} for the same @code{NAME}.
  
  @node Pragma No_Return,Pragma No_Strict_Aliasing,Pragma No_Inline,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-return}@anchor{a5}
  @section Pragma No_Return
  
  
*************** available in all earlier versions of Ada
*** 5432,5438 ****
  pragma.
  
  @node Pragma No_Strict_Aliasing,Pragma No_Tagged_Streams,Pragma No_Return,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-strict-aliasing}@anchor{a8}
  @section Pragma No_Strict_Aliasing
  
  
--- 5607,5613 ----
  pragma.
  
  @node Pragma No_Strict_Aliasing,Pragma No_Tagged_Streams,Pragma No_Return,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-strict-aliasing}@anchor{a6}
  @section Pragma No_Strict_Aliasing
  
  
*************** arguments is a configuration pragma whic
*** 5449,5460 ****
  declared in units to which the pragma applies. For a detailed
  description of the strict aliasing optimization, and the situations
  in which it must be suppressed, see the section on Optimization and Strict Aliasing
! in the @cite{GNAT User's Guide}.
  
  This pragma currently has no effects on access to unconstrained array types.
  
  @node Pragma No_Tagged_Streams,Pragma Normalize_Scalars,Pragma No_Strict_Aliasing,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-no-tagged-streams}@anchor{a9}@anchor{gnat_rm/implementation_defined_pragmas id26}@anchor{aa}
  @section Pragma No_Tagged_Streams
  
  
--- 5624,5635 ----
  declared in units to which the pragma applies. For a detailed
  description of the strict aliasing optimization, and the situations
  in which it must be suppressed, see the section on Optimization and Strict Aliasing
! in the @cite{GNAT User’s Guide}.
  
  This pragma currently has no effects on access to unconstrained array types.
  
  @node Pragma No_Tagged_Streams,Pragma Normalize_Scalars,Pragma No_Strict_Aliasing,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id26}@anchor{a7}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-tagged-streams}@anchor{a8}
  @section Pragma No_Tagged_Streams
  
  
*************** with empty strings. This is useful to av
*** 5493,5499 ****
  level but has a negative impact on the debuggability of tagged types.
  
  @node Pragma Normalize_Scalars,Pragma Obsolescent,Pragma No_Tagged_Streams,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-normalize-scalars}@anchor{ab}
  @section Pragma Normalize_Scalars
  
  
--- 5668,5674 ----
  level but has a negative impact on the debuggability of tagged types.
  
  @node Pragma Normalize_Scalars,Pragma Obsolescent,Pragma No_Tagged_Streams,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-normalize-scalars}@anchor{a9}
  @section Pragma Normalize_Scalars
  
  
*************** are as follows:
*** 5514,5527 ****
  @item @emph{Standard.Character}
  
  Objects whose root type is Standard.Character are initialized to
! Character'Last unless the subtype range excludes NUL (in which case
  NUL is used). This choice will always generate an invalid value if
  one exists.
  
  @item @emph{Standard.Wide_Character}
  
  Objects whose root type is Standard.Wide_Character are initialized to
! Wide_Character'Last unless the subtype range excludes NUL (in which case
  NUL is used). This choice will always generate an invalid value if
  one exists.
  
--- 5689,5702 ----
  @item @emph{Standard.Character}
  
  Objects whose root type is Standard.Character are initialized to
! Character’Last unless the subtype range excludes NUL (in which case
  NUL is used). This choice will always generate an invalid value if
  one exists.
  
  @item @emph{Standard.Wide_Character}
  
  Objects whose root type is Standard.Wide_Character are initialized to
! Wide_Character’Last unless the subtype range excludes NUL (in which case
  NUL is used). This choice will always generate an invalid value if
  one exists.
  
*************** will always generate an invalid value if
*** 5575,5581 ****
  @end table
  
  @node Pragma Obsolescent,Pragma Optimize_Alignment,Pragma Normalize_Scalars,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-obsolescent}@anchor{ac}@anchor{gnat_rm/implementation_defined_pragmas id27}@anchor{ad}
  @section Pragma Obsolescent
  
  
--- 5750,5756 ----
  @end table
  
  @node Pragma Obsolescent,Pragma Optimize_Alignment,Pragma Normalize_Scalars,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id27}@anchor{aa}@anchor{gnat_rm/implementation_defined_pragmas pragma-obsolescent}@anchor{ab}
  @section Pragma Obsolescent
  
  
*************** So if you specify @code{Entity =>} for t
*** 5671,5677 ****
  argument is present, it must be preceded by @code{Message =>}.
  
  @node Pragma Optimize_Alignment,Pragma Ordered,Pragma Obsolescent,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-optimize-alignment}@anchor{ae}
  @section Pragma Optimize_Alignment
  
  
--- 5846,5852 ----
  argument is present, it must be preceded by @code{Message =>}.
  
  @node Pragma Optimize_Alignment,Pragma Ordered,Pragma Obsolescent,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-optimize-alignment}@anchor{ac}
  @section Pragma Optimize_Alignment
  
  
*************** latter are compiled by default in pragma
*** 5757,5763 ****
  pragma appears at the start of the file.
  
  @node Pragma Ordered,Pragma Overflow_Mode,Pragma Optimize_Alignment,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ordered}@anchor{af}
  @section Pragma Ordered
  
  
--- 5932,5938 ----
  pragma appears at the start of the file.
  
  @node Pragma Ordered,Pragma Overflow_Mode,Pragma Optimize_Alignment,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ordered}@anchor{ad}
  @section Pragma Ordered
  
  
*************** template can be instantiated for both ca
*** 5846,5855 ****
  for the case of generic enumerated types.
  
  For additional information please refer to the description of the
! @emph{-gnatw.u} switch in the GNAT User's Guide.
  
  @node Pragma Overflow_Mode,Pragma Overriding_Renamings,Pragma Ordered,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-overflow-mode}@anchor{b0}
  @section Pragma Overflow_Mode
  
  
--- 6021,6030 ----
  for the case of generic enumerated types.
  
  For additional information please refer to the description of the
! @emph{-gnatw.u} switch in the GNAT User’s Guide.
  
  @node Pragma Overflow_Mode,Pragma Overriding_Renamings,Pragma Ordered,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-overflow-mode}@anchor{ae}
  @section Pragma Overflow_Mode
  
  
*************** MODE ::= STRICT | MINIMIZED | ELIMINATED
*** 5865,5872 ****
  
  This pragma sets the current overflow mode to the given setting. For details
  of the meaning of these modes, please refer to the
! 'Overflow Check Handling in GNAT' appendix in the
! GNAT User's Guide. If only the @code{General} parameter is present,
  the given mode applies to all expressions. If both parameters are present,
  the @code{General} mode applies to expressions outside assertions, and
  the @code{Eliminated} mode applies to expressions within assertions.
--- 6040,6047 ----
  
  This pragma sets the current overflow mode to the given setting. For details
  of the meaning of these modes, please refer to the
! ‘Overflow Check Handling in GNAT’ appendix in the
! GNAT User’s Guide. If only the @code{General} parameter is present,
  the given mode applies to all expressions. If both parameters are present,
  the @code{General} mode applies to expressions outside assertions, and
  the @code{Eliminated} mode applies to expressions within assertions.
*************** The pragma @code{Unsuppress (Overflow_Ch
*** 5888,5894 ****
  overflow checking, but does not affect the overflow mode.
  
  @node Pragma Overriding_Renamings,Pragma Partition_Elaboration_Policy,Pragma Overflow_Mode,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-overriding-renamings}@anchor{b1}
  @section Pragma Overriding_Renamings
  
  
--- 6063,6069 ----
  overflow checking, but does not affect the overflow mode.
  
  @node Pragma Overriding_Renamings,Pragma Partition_Elaboration_Policy,Pragma Overflow_Mode,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-overriding-renamings}@anchor{af}
  @section Pragma Overriding_Renamings
  
  
*************** RM 8.3 (15) stipulates that an overridde
*** 5923,5929 ****
  declaration of the overriding operation.
  
  @node Pragma Partition_Elaboration_Policy,Pragma Part_Of,Pragma Overriding_Renamings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-partition-elaboration-policy}@anchor{b2}
  @section Pragma Partition_Elaboration_Policy
  
  
--- 6098,6104 ----
  declaration of the overriding operation.
  
  @node Pragma Partition_Elaboration_Policy,Pragma Part_Of,Pragma Overriding_Renamings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-partition-elaboration-policy}@anchor{b0}
  @section Pragma Partition_Elaboration_Policy
  
  
*************** versions of Ada as an implementation-def
*** 5940,5946 ****
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Part_Of,Pragma Passive,Pragma Partition_Elaboration_Policy,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id28}@anchor{b3}@anchor{gnat_rm/implementation_defined_pragmas pragma-part-of}@anchor{b4}
  @section Pragma Part_Of
  
  
--- 6115,6121 ----
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Part_Of,Pragma Passive,Pragma Partition_Elaboration_Policy,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id28}@anchor{b1}@anchor{gnat_rm/implementation_defined_pragmas pragma-part-of}@anchor{b2}
  @section Pragma Part_Of
  
  
*************** For the semantics of this pragma, see th
*** 5956,5962 ****
  SPARK 2014 Reference Manual, section 7.2.6.
  
  @node Pragma Passive,Pragma Persistent_BSS,Pragma Part_Of,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-passive}@anchor{b5}
  @section Pragma Passive
  
  
--- 6131,6137 ----
  SPARK 2014 Reference Manual, section 7.2.6.
  
  @node Pragma Passive,Pragma Persistent_BSS,Pragma Part_Of,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-passive}@anchor{b3}
  @section Pragma Passive
  
  
*************** optimized.  GNAT does not attempt to opt
*** 5977,5986 ****
  (since protected objects are available in place of passive tasks).
  
  For more information on the subject of passive tasks, see the section
! 'Passive Task Optimization' in the GNAT Users Guide.
  
  @node Pragma Persistent_BSS,Pragma Post,Pragma Passive,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id29}@anchor{b6}@anchor{gnat_rm/implementation_defined_pragmas pragma-persistent-bss}@anchor{b7}
  @section Pragma Persistent_BSS
  
  
--- 6152,6161 ----
  (since protected objects are available in place of passive tasks).
  
  For more information on the subject of passive tasks, see the section
! ‘Passive Task Optimization’ in the GNAT Users Guide.
  
  @node Pragma Persistent_BSS,Pragma Post,Pragma Passive,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id29}@anchor{b4}@anchor{gnat_rm/implementation_defined_pragmas pragma-persistent-bss}@anchor{b5}
  @section Pragma Persistent_BSS
  
  
*************** If this pragma is used on a target where
*** 6011,6017 ****
  then the pragma will be ignored. See also @code{pragma Linker_Section}.
  
  @node Pragma Post,Pragma Postcondition,Pragma Persistent_BSS,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-post}@anchor{b8}
  @section Pragma Post
  
  
--- 6186,6192 ----
  then the pragma will be ignored. See also @code{pragma Linker_Section}.
  
  @node Pragma Post,Pragma Postcondition,Pragma Persistent_BSS,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-post}@anchor{b6}
  @section Pragma Post
  
  
*************** appear at the start of the declarations
*** 6036,6042 ****
  (preceded only by other pragmas).
  
  @node Pragma Postcondition,Pragma Post_Class,Pragma Post,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-postcondition}@anchor{b9}
  @section Pragma Postcondition
  
  
--- 6211,6217 ----
  (preceded only by other pragmas).
  
  @node Pragma Postcondition,Pragma Post_Class,Pragma Post,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-postcondition}@anchor{b7}
  @section Pragma Postcondition
  
  
*************** implicit returns at the end of procedure
*** 6061,6067 ****
  exception handlers).
  
  In addition, the boolean expression which is the condition which
! must be true may contain references to function'Result in the case
  of a function to refer to the returned value.
  
  @code{Postcondition} pragmas may appear either immediately following the
--- 6236,6242 ----
  exception handlers).
  
  In addition, the boolean expression which is the condition which
! must be true may contain references to function’Result in the case
  of a function to refer to the returned value.
  
  @code{Postcondition} pragmas may appear either immediately following the
*************** If a postcondition fails, then the excep
*** 6128,6134 ****
  a message argument was supplied, then the given string
  will be used as the exception message. If no message
  argument was supplied, then the default message has
! the form "Postcondition failed at file_name:line". The
  exception is raised in the context of the subprogram
  body, so it is possible to catch postcondition failures
  within the subprogram body itself.
--- 6303,6309 ----
  a message argument was supplied, then the given string
  will be used as the exception message. If no message
  argument was supplied, then the default message has
! the form “Postcondition failed at file_name:line”. The
  exception is raised in the context of the subprogram
  body, so it is possible to catch postcondition failures
  within the subprogram body itself.
*************** use of the pragma identifier @code{Check
*** 6200,6207 ****
  Ada 2012, and has been retained in its original form for
  compatibility purposes.
  
! @node Pragma Post_Class,Pragma Rename_Pragma,Pragma Postcondition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-post-class}@anchor{ba}
  @section Pragma Post_Class
  
  
--- 6375,6382 ----
  Ada 2012, and has been retained in its original form for
  compatibility purposes.
  
! @node Pragma Post_Class,Pragma Pre,Pragma Postcondition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-post-class}@anchor{b8}
  @section Pragma Post_Class
  
  
*************** aspects, but is prepared to ignore the p
*** 6235,6281 ****
  policy that controls this pragma is @code{Post'Class}, not
  @code{Post_Class}.
  
! @node Pragma Rename_Pragma,Pragma Pre,Pragma Post_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-rename-pragma}@anchor{bb}
! @section Pragma Rename_Pragma
! 
! 
! @geindex Pragmas
! @geindex synonyms
! 
! Syntax:
! 
! @example
! pragma Rename_Pragma (
!          [New_Name =>] IDENTIFIER,
!          [Renamed  =>] pragma_IDENTIFIER);
! @end example
! 
! This pragma provides a mechanism for supplying new names for existing
! pragmas. The @code{New_Name} identifier can subsequently be used as a synonym for
! the Renamed pragma. For example, suppose you have code that was originally
! developed on a compiler that supports Inline_Only as an implementation defined
! pragma. And suppose the semantics of pragma Inline_Only are identical to (or at
! least very similar to) the GNAT implementation defined pragma
! Inline_Always. You could globally replace Inline_Only with Inline_Always.
! 
! However, to avoid that source modification, you could instead add a
! configuration pragma:
! 
! @example
! pragma Rename_Pragma (
!          New_Name => Inline_Only,
!          Renamed  => Inline_Always);
! @end example
! 
! Then GNAT will treat "pragma Inline_Only ..." as if you had written
! "pragma Inline_Always ...".
! 
! Pragma Inline_Only will not necessarily mean the same thing as the other Ada
! compiler; it's up to you to make sure the semantics are close enough.
! 
! @node Pragma Pre,Pragma Precondition,Pragma Rename_Pragma,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-pre}@anchor{bc}
  @section Pragma Pre
  
  
--- 6410,6417 ----
  policy that controls this pragma is @code{Post'Class}, not
  @code{Post_Class}.
  
! @node Pragma Pre,Pragma Precondition,Pragma Post_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-pre}@anchor{b9}
  @section Pragma Pre
  
  
*************** appear at the start of the declarations
*** 6300,6306 ****
  (preceded only by other pragmas).
  
  @node Pragma Precondition,Pragma Predicate,Pragma Pre,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-precondition}@anchor{bd}
  @section Pragma Precondition
  
  
--- 6436,6442 ----
  (preceded only by other pragmas).
  
  @node Pragma Precondition,Pragma Predicate,Pragma Pre,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-precondition}@anchor{ba}
  @section Pragma Precondition
  
  
*************** pragma Precondition (
*** 6320,6326 ****
  The @code{Precondition} pragma is similar to @code{Postcondition}
  except that the corresponding checks take place immediately upon
  entry to the subprogram, and if a precondition fails, the exception
! is raised in the context of the caller, and the attribute 'Result
  cannot be used within the precondition expression.
  
  Otherwise, the placement and visibility rules are identical to those
--- 6456,6462 ----
  The @code{Precondition} pragma is similar to @code{Postcondition}
  except that the corresponding checks take place immediately upon
  entry to the subprogram, and if a precondition fails, the exception
! is raised in the context of the caller, and the attribute ‘Result
  cannot be used within the precondition expression.
  
  Otherwise, the placement and visibility rules are identical to those
*************** Ada 2012, and has been retained in its o
*** 6359,6365 ****
  compatibility purposes.
  
  @node Pragma Predicate,Pragma Predicate_Failure,Pragma Precondition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-predicate}@anchor{be}@anchor{gnat_rm/implementation_defined_pragmas id30}@anchor{bf}
  @section Pragma Predicate
  
  
--- 6495,6501 ----
  compatibility purposes.
  
  @node Pragma Predicate,Pragma Predicate_Failure,Pragma Precondition,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id30}@anchor{bb}@anchor{gnat_rm/implementation_defined_pragmas pragma-predicate}@anchor{bc}
  @section Pragma Predicate
  
  
*************** the program and thus do not have a neutr
*** 6404,6410 ****
  The motivation behind providing pragmas equivalent to
  corresponding aspects is to allow a program to be written
  using the pragmas, and then compiled with a compiler that
! will ignore the pragmas. That doesn't work in the case of
  static and dynamic predicates, since if the corresponding
  pragmas are ignored, then the behavior of the program is
  fundamentally changed (for example a membership test
--- 6540,6546 ----
  The motivation behind providing pragmas equivalent to
  corresponding aspects is to allow a program to be written
  using the pragmas, and then compiled with a compiler that
! will ignore the pragmas. That doesn’t work in the case of
  static and dynamic predicates, since if the corresponding
  pragmas are ignored, then the behavior of the program is
  fundamentally changed (for example a membership test
*************** defined for subtype B). When following t
*** 6413,6419 ****
  use of predicates should be avoided.
  
  @node Pragma Predicate_Failure,Pragma Preelaborable_Initialization,Pragma Predicate,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-predicate-failure}@anchor{c0}
  @section Pragma Predicate_Failure
  
  
--- 6549,6555 ----
  use of predicates should be avoided.
  
  @node Pragma Predicate_Failure,Pragma Preelaborable_Initialization,Pragma Predicate,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-predicate-failure}@anchor{bd}
  @section Pragma Predicate_Failure
  
  
*************** the language-defined
*** 6430,6436 ****
  @code{Predicate_Failure} aspect, and shares its restrictions and semantics.
  
  @node Pragma Preelaborable_Initialization,Pragma Prefix_Exception_Messages,Pragma Predicate_Failure,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-preelaborable-initialization}@anchor{c1}
  @section Pragma Preelaborable_Initialization
  
  
--- 6566,6572 ----
  @code{Predicate_Failure} aspect, and shares its restrictions and semantics.
  
  @node Pragma Preelaborable_Initialization,Pragma Prefix_Exception_Messages,Pragma Predicate_Failure,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-preelaborable-initialization}@anchor{be}
  @section Pragma Preelaborable_Initialization
  
  
*************** versions of Ada as an implementation-def
*** 6445,6451 ****
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Prefix_Exception_Messages,Pragma Pre_Class,Pragma Preelaborable_Initialization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-prefix-exception-messages}@anchor{c2}
  @section Pragma Prefix_Exception_Messages
  
  
--- 6581,6587 ----
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Prefix_Exception_Messages,Pragma Pre_Class,Pragma Preelaborable_Initialization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-prefix-exception-messages}@anchor{bf}
  @section Pragma Prefix_Exception_Messages
  
  
*************** prefixing in this case, you can always c
*** 6476,6482 ****
  @code{GNAT.Source_Info.Enclosing_Entity} and prepend the string manually.
  
  @node Pragma Pre_Class,Pragma Priority_Specific_Dispatching,Pragma Prefix_Exception_Messages,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-pre-class}@anchor{c3}
  @section Pragma Pre_Class
  
  
--- 6612,6618 ----
  @code{GNAT.Source_Info.Enclosing_Entity} and prepend the string manually.
  
  @node Pragma Pre_Class,Pragma Priority_Specific_Dispatching,Pragma Prefix_Exception_Messages,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-pre-class}@anchor{c0}
  @section Pragma Pre_Class
  
  
*************** policy that controls this pragma is @cod
*** 6511,6517 ****
  @code{Pre_Class}.
  
  @node Pragma Priority_Specific_Dispatching,Pragma Profile,Pragma Pre_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-priority-specific-dispatching}@anchor{c4}
  @section Pragma Priority_Specific_Dispatching
  
  
--- 6647,6653 ----
  @code{Pre_Class}.
  
  @node Pragma Priority_Specific_Dispatching,Pragma Profile,Pragma Pre_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-priority-specific-dispatching}@anchor{c1}
  @section Pragma Priority_Specific_Dispatching
  
  
*************** versions of Ada as an implementation-def
*** 6535,6541 ****
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Profile,Pragma Profile_Warnings,Pragma Priority_Specific_Dispatching,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-profile}@anchor{c5}
  @section Pragma Profile
  
  
--- 6671,6677 ----
  See Ada 2012 Reference Manual for details.
  
  @node Pragma Profile,Pragma Profile_Warnings,Pragma Priority_Specific_Dispatching,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-profile}@anchor{c2}
  @section Pragma Profile
  
  
*************** packages:
*** 6681,6687 ****
  @end itemize
  
  This set of configuration pragmas and restrictions correspond to the
! definition of the 'Ravenscar Profile' for limited tasking, devised and
  published by the @cite{International Real-Time Ada Workshop@comma{} 1997}.
  A description is also available at
  @indicateurl{http://www-users.cs.york.ac.uk/~burns/ravenscar.ps}.
--- 6817,6823 ----
  @end itemize
  
  This set of configuration pragmas and restrictions correspond to the
! definition of the ‘Ravenscar Profile’ for limited tasking, devised and
  published by the @cite{International Real-Time Ada Workshop@comma{} 1997}.
  A description is also available at
  @indicateurl{http://www-users.cs.york.ac.uk/~burns/ravenscar.ps}.
*************** The @code{Max_Protected_Entries}, @code{
*** 6724,6730 ****
  
  Details on the rationale for @code{Jorvik} and implications for use may be
  found in @cite{A New Ravenscar-Based Profile} by P. Rogers, J. Ruiz,
! T. Gingold and P. Bernardi, in @cite{Reliable Software Technologies -- Ada Europe 2017}, Springer-Verlag Lecture Notes in Computer Science,
  Number 10300.
  
  @item 
--- 6860,6866 ----
  
  Details on the rationale for @code{Jorvik} and implications for use may be
  found in @cite{A New Ravenscar-Based Profile} by P. Rogers, J. Ruiz,
! T. Gingold and P. Bernardi, in @cite{Reliable Software Technologies – Ada Europe 2017}, Springer-Verlag Lecture Notes in Computer Science,
  Number 10300.
  
  @item 
*************** conforming Ada constructs.  The profile
*** 6814,6820 ****
  @end itemize
  
  @node Pragma Profile_Warnings,Pragma Propagate_Exceptions,Pragma Profile,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-profile-warnings}@anchor{c6}
  @section Pragma Profile_Warnings
  
  
--- 6950,6956 ----
  @end itemize
  
  @node Pragma Profile_Warnings,Pragma Propagate_Exceptions,Pragma Profile,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-profile-warnings}@anchor{c3}
  @section Pragma Profile_Warnings
  
  
*************** violations of the profile generate warni
*** 6832,6838 ****
  of error messages.
  
  @node Pragma Propagate_Exceptions,Pragma Provide_Shift_Operators,Pragma Profile_Warnings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-propagate-exceptions}@anchor{c7}
  @section Pragma Propagate_Exceptions
  
  
--- 6968,6974 ----
  of error messages.
  
  @node Pragma Propagate_Exceptions,Pragma Provide_Shift_Operators,Pragma Profile_Warnings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-propagate-exceptions}@anchor{c4}
  @section Pragma Propagate_Exceptions
  
  
*************** purposes. It used to be used in connecti
*** 6851,6857 ****
  a now-obsolete mechanism for implementation of exceptions.
  
  @node Pragma Provide_Shift_Operators,Pragma Psect_Object,Pragma Propagate_Exceptions,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-provide-shift-operators}@anchor{c8}
  @section Pragma Provide_Shift_Operators
  
  
--- 6987,6993 ----
  a now-obsolete mechanism for implementation of exceptions.
  
  @node Pragma Provide_Shift_Operators,Pragma Psect_Object,Pragma Propagate_Exceptions,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-provide-shift-operators}@anchor{c5}
  @section Pragma Provide_Shift_Operators
  
  
*************** either an unsigned or signed type. It ha
*** 6868,6877 ****
  five shift operators (Shift_Left, Shift_Right, Shift_Right_Arithmetic,
  Rotate_Left and Rotate_Right) for the given type. It is similar to
  including the function declarations for these five operators, together
! with the pragma Import (Intrinsic, ...) statements.
  
  @node Pragma Psect_Object,Pragma Pure_Function,Pragma Provide_Shift_Operators,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-psect-object}@anchor{c9}
  @section Pragma Psect_Object
  
  
--- 7004,7013 ----
  five shift operators (Shift_Left, Shift_Right, Shift_Right_Arithmetic,
  Rotate_Left and Rotate_Right) for the given type. It is similar to
  including the function declarations for these five operators, together
! with the pragma Import (Intrinsic, …) statements.
  
  @node Pragma Psect_Object,Pragma Pure_Function,Pragma Provide_Shift_Operators,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-psect-object}@anchor{c6}
  @section Pragma Psect_Object
  
  
*************** EXTERNAL_SYMBOL ::=
*** 6891,6897 ****
  This pragma is identical in effect to pragma @code{Common_Object}.
  
  @node Pragma Pure_Function,Pragma Rational,Pragma Psect_Object,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-pure-function}@anchor{ca}@anchor{gnat_rm/implementation_defined_pragmas id31}@anchor{cb}
  @section Pragma Pure_Function
  
  
--- 7027,7033 ----
  This pragma is identical in effect to pragma @code{Common_Object}.
  
  @node Pragma Pure_Function,Pragma Rational,Pragma Psect_Object,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id31}@anchor{c7}@anchor{gnat_rm/implementation_defined_pragmas pragma-pure-function}@anchor{c8}
  @section Pragma Pure_Function
  
  
*************** unit is not a Pure unit in the categoriz
*** 6953,6959 ****
  thus marked is free to @code{with} non-pure units.
  
  @node Pragma Rational,Pragma Ravenscar,Pragma Pure_Function,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-rational}@anchor{cc}
  @section Pragma Rational
  
  
--- 7089,7095 ----
  thus marked is free to @code{with} non-pure units.
  
  @node Pragma Rational,Pragma Ravenscar,Pragma Pure_Function,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-rational}@anchor{c9}
  @section Pragma Rational
  
  
*************** pragma Profile (Rational);
*** 6971,6977 ****
  @end example
  
  @node Pragma Ravenscar,Pragma Refined_Depends,Pragma Rational,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ravenscar}@anchor{cd}
  @section Pragma Ravenscar
  
  
--- 7107,7113 ----
  @end example
  
  @node Pragma Ravenscar,Pragma Refined_Depends,Pragma Rational,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-ravenscar}@anchor{ca}
  @section Pragma Ravenscar
  
  
*************** pragma Profile (Ravenscar);
*** 6991,6997 ****
  which is the preferred method of setting the @code{Ravenscar} profile.
  
  @node Pragma Refined_Depends,Pragma Refined_Global,Pragma Ravenscar,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-refined-depends}@anchor{ce}@anchor{gnat_rm/implementation_defined_pragmas id32}@anchor{cf}
  @section Pragma Refined_Depends
  
  
--- 7127,7133 ----
  which is the preferred method of setting the @code{Ravenscar} profile.
  
  @node Pragma Refined_Depends,Pragma Refined_Global,Pragma Ravenscar,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id32}@anchor{cb}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-depends}@anchor{cc}
  @section Pragma Refined_Depends
  
  
*************** For the semantics of this pragma, see th
*** 7024,7030 ****
  the SPARK 2014 Reference Manual, section 6.1.5.
  
  @node Pragma Refined_Global,Pragma Refined_Post,Pragma Refined_Depends,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-refined-global}@anchor{d0}@anchor{gnat_rm/implementation_defined_pragmas id33}@anchor{d1}
  @section Pragma Refined_Global
  
  
--- 7160,7166 ----
  the SPARK 2014 Reference Manual, section 6.1.5.
  
  @node Pragma Refined_Global,Pragma Refined_Post,Pragma Refined_Depends,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id33}@anchor{cd}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-global}@anchor{ce}
  @section Pragma Refined_Global
  
  
*************** For the semantics of this pragma, see th
*** 7049,7055 ****
  the SPARK 2014 Reference Manual, section 6.1.4.
  
  @node Pragma Refined_Post,Pragma Refined_State,Pragma Refined_Global,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-refined-post}@anchor{d2}@anchor{gnat_rm/implementation_defined_pragmas id34}@anchor{d3}
  @section Pragma Refined_Post
  
  
--- 7185,7191 ----
  the SPARK 2014 Reference Manual, section 6.1.4.
  
  @node Pragma Refined_Post,Pragma Refined_State,Pragma Refined_Global,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id34}@anchor{cf}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-post}@anchor{d0}
  @section Pragma Refined_Post
  
  
*************** For the semantics of this pragma, see th
*** 7063,7069 ****
  the SPARK 2014 Reference Manual, section 7.2.7.
  
  @node Pragma Refined_State,Pragma Relative_Deadline,Pragma Refined_Post,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-refined-state}@anchor{d4}@anchor{gnat_rm/implementation_defined_pragmas id35}@anchor{d5}
  @section Pragma Refined_State
  
  
--- 7199,7205 ----
  the SPARK 2014 Reference Manual, section 7.2.7.
  
  @node Pragma Refined_State,Pragma Relative_Deadline,Pragma Refined_Post,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id35}@anchor{d1}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-state}@anchor{d2}
  @section Pragma Refined_State
  
  
*************** For the semantics of this pragma, see th
*** 7089,7095 ****
  the SPARK 2014 Reference Manual, section 7.2.2.
  
  @node Pragma Relative_Deadline,Pragma Remote_Access_Type,Pragma Refined_State,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-relative-deadline}@anchor{d6}
  @section Pragma Relative_Deadline
  
  
--- 7225,7231 ----
  the SPARK 2014 Reference Manual, section 7.2.2.
  
  @node Pragma Relative_Deadline,Pragma Remote_Access_Type,Pragma Refined_State,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-relative-deadline}@anchor{d3}
  @section Pragma Relative_Deadline
  
  
*************** This pragma is standard in Ada 2005, but
*** 7103,7110 ****
  versions of Ada as an implementation-defined pragma.
  See Ada 2012 Reference Manual for details.
  
! @node Pragma Remote_Access_Type,Pragma Restricted_Run_Time,Pragma Relative_Deadline,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id36}@anchor{d7}@anchor{gnat_rm/implementation_defined_pragmas pragma-remote-access-type}@anchor{d8}
  @section Pragma Remote_Access_Type
  
  
--- 7239,7246 ----
  versions of Ada as an implementation-defined pragma.
  See Ada 2012 Reference Manual for details.
  
! @node Pragma Remote_Access_Type,Pragma Rename_Pragma,Pragma Relative_Deadline,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id36}@anchor{d4}@anchor{gnat_rm/implementation_defined_pragmas pragma-remote-access-type}@anchor{d5}
  @section Pragma Remote_Access_Type
  
  
*************** In the generic unit, the formal type is
*** 7129,7136 ****
  pertaining to remote access to class-wide types. At instantiation, the
  actual type must be a remote access to class-wide type.
  
! @node Pragma Restricted_Run_Time,Pragma Restriction_Warnings,Pragma Remote_Access_Type,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-restricted-run-time}@anchor{d9}
  @section Pragma Restricted_Run_Time
  
  
--- 7265,7311 ----
  pertaining to remote access to class-wide types. At instantiation, the
  actual type must be a remote access to class-wide type.
  
! @node Pragma Rename_Pragma,Pragma Restricted_Run_Time,Pragma Remote_Access_Type,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-rename-pragma}@anchor{d6}
! @section Pragma Rename_Pragma
! 
! 
! @geindex Pragmas
! @geindex synonyms
! 
! Syntax:
! 
! @example
! pragma Rename_Pragma (
!          [New_Name =>] IDENTIFIER,
!          [Renamed  =>] pragma_IDENTIFIER);
! @end example
! 
! This pragma provides a mechanism for supplying new names for existing
! pragmas. The @code{New_Name} identifier can subsequently be used as a synonym for
! the Renamed pragma. For example, suppose you have code that was originally
! developed on a compiler that supports Inline_Only as an implementation defined
! pragma. And suppose the semantics of pragma Inline_Only are identical to (or at
! least very similar to) the GNAT implementation defined pragma
! Inline_Always. You could globally replace Inline_Only with Inline_Always.
! 
! However, to avoid that source modification, you could instead add a
! configuration pragma:
! 
! @example
! pragma Rename_Pragma (
!          New_Name => Inline_Only,
!          Renamed  => Inline_Always);
! @end example
! 
! Then GNAT will treat “pragma Inline_Only …” as if you had written
! “pragma Inline_Always …”.
! 
! Pragma Inline_Only will not necessarily mean the same thing as the other Ada
! compiler; it’s up to you to make sure the semantics are close enough.
! 
! @node Pragma Restricted_Run_Time,Pragma Restriction_Warnings,Pragma Rename_Pragma,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-restricted-run-time}@anchor{d7}
  @section Pragma Restricted_Run_Time
  
  
*************** which is the preferred method of setting
*** 7151,7157 ****
  profile.
  
  @node Pragma Restriction_Warnings,Pragma Reviewable,Pragma Restricted_Run_Time,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-restriction-warnings}@anchor{da}
  @section Pragma Restriction_Warnings
  
  
--- 7326,7332 ----
  profile.
  
  @node Pragma Restriction_Warnings,Pragma Reviewable,Pragma Restricted_Run_Time,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-restriction-warnings}@anchor{d8}
  @section Pragma Restriction_Warnings
  
  
*************** generating a warning, but any other use
*** 7189,7195 ****
  defined pragmas will cause a warning to be generated.
  
  @node Pragma Reviewable,Pragma Secondary_Stack_Size,Pragma Restriction_Warnings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-reviewable}@anchor{db}
  @section Pragma Reviewable
  
  
--- 7364,7370 ----
  defined pragmas will cause a warning to be generated.
  
  @node Pragma Reviewable,Pragma Secondary_Stack_Size,Pragma Restriction_Warnings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-reviewable}@anchor{d9}
  @section Pragma Reviewable
  
  
*************** comprehensive messages identifying possi
*** 7293,7299 ****
  information.
  
  @node Pragma Secondary_Stack_Size,Pragma Share_Generic,Pragma Reviewable,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id37}@anchor{dc}@anchor{gnat_rm/implementation_defined_pragmas pragma-secondary-stack-size}@anchor{dd}
  @section Pragma Secondary_Stack_Size
  
  
--- 7468,7474 ----
  information.
  
  @node Pragma Secondary_Stack_Size,Pragma Share_Generic,Pragma Reviewable,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id37}@anchor{da}@anchor{gnat_rm/implementation_defined_pragmas pragma-secondary-stack-size}@anchor{db}
  @section Pragma Secondary_Stack_Size
  
  
*************** an @code{integer_EXPRESSION} of bytes is
*** 7320,7326 ****
  For most targets, the pragma does not apply as the secondary stack grows on
  demand: allocated as a chain of blocks in the heap. The default size of these
  blocks can be modified via the @code{-D} binder option as described in
! @cite{GNAT User's Guide}.
  
  Note that no check is made to see if the secondary stack can fit inside the
  primary stack.
--- 7495,7501 ----
  For most targets, the pragma does not apply as the secondary stack grows on
  demand: allocated as a chain of blocks in the heap. The default size of these
  blocks can be modified via the @code{-D} binder option as described in
! @cite{GNAT User’s Guide}.
  
  Note that no check is made to see if the secondary stack can fit inside the
  primary stack.
*************** Note the pragma cannot appear when the r
*** 7329,7335 ****
  is in effect.
  
  @node Pragma Share_Generic,Pragma Shared,Pragma Secondary_Stack_Size,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-share-generic}@anchor{de}
  @section Pragma Share_Generic
  
  
--- 7504,7510 ----
  is in effect.
  
  @node Pragma Share_Generic,Pragma Shared,Pragma Secondary_Stack_Size,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-share-generic}@anchor{dc}
  @section Pragma Share_Generic
  
  
*************** than to check that the given names are a
*** 7347,7353 ****
  generic instances.
  
  @node Pragma Shared,Pragma Short_Circuit_And_Or,Pragma Share_Generic,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id38}@anchor{df}@anchor{gnat_rm/implementation_defined_pragmas pragma-shared}@anchor{e0}
  @section Pragma Shared
  
  
--- 7522,7528 ----
  generic instances.
  
  @node Pragma Shared,Pragma Short_Circuit_And_Or,Pragma Share_Generic,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id38}@anchor{dd}@anchor{gnat_rm/implementation_defined_pragmas pragma-shared}@anchor{de}
  @section Pragma Shared
  
  
*************** This pragma is provided for compatibilit
*** 7355,7361 ****
  semantics are identical to pragma Atomic.
  
  @node Pragma Short_Circuit_And_Or,Pragma Short_Descriptors,Pragma Shared,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-short-circuit-and-or}@anchor{e1}
  @section Pragma Short_Circuit_And_Or
  
  
--- 7530,7536 ----
  semantics are identical to pragma Atomic.
  
  @node Pragma Short_Circuit_And_Or,Pragma Short_Descriptors,Pragma Shared,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-short-circuit-and-or}@anchor{df}
  @section Pragma Short_Circuit_And_Or
  
  
*************** within the file being compiled, it appli
*** 7374,7380 ****
  There is no requirement that all units in a partition use this option.
  
  @node Pragma Short_Descriptors,Pragma Simple_Storage_Pool_Type,Pragma Short_Circuit_And_Or,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-short-descriptors}@anchor{e2}
  @section Pragma Short_Descriptors
  
  
--- 7549,7555 ----
  There is no requirement that all units in a partition use this option.
  
  @node Pragma Short_Descriptors,Pragma Simple_Storage_Pool_Type,Pragma Short_Circuit_And_Or,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-short-descriptors}@anchor{e0}
  @section Pragma Short_Descriptors
  
  
*************** This pragma is provided for compatibilit
*** 7388,7394 ****
  is recognized but ignored by all current versions of GNAT.
  
  @node Pragma Simple_Storage_Pool_Type,Pragma Source_File_Name,Pragma Short_Descriptors,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-simple-storage-pool-type}@anchor{e3}@anchor{gnat_rm/implementation_defined_pragmas id39}@anchor{e4}
  @section Pragma Simple_Storage_Pool_Type
  
  
--- 7563,7569 ----
  is recognized but ignored by all current versions of GNAT.
  
  @node Pragma Simple_Storage_Pool_Type,Pragma Source_File_Name,Pragma Short_Descriptors,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id39}@anchor{e1}@anchor{gnat_rm/implementation_defined_pragmas pragma-simple-storage-pool-type}@anchor{e2}
  @section Pragma Simple_Storage_Pool_Type
  
  
*************** Syntax:
*** 7403,7409 ****
  pragma Simple_Storage_Pool_Type (type_LOCAL_NAME);
  @end example
  
! A type can be established as a 'simple storage pool type' by applying
  the representation pragma @code{Simple_Storage_Pool_Type} to the type.
  A type named in the pragma must be a library-level immutably limited record
  type or limited tagged type declared immediately within a package declaration.
--- 7578,7584 ----
  pragma Simple_Storage_Pool_Type (type_LOCAL_NAME);
  @end example
  
! A type can be established as a ‘simple storage pool type’ by applying
  the representation pragma @code{Simple_Storage_Pool_Type} to the type.
  A type named in the pragma must be a library-level immutably limited record
  type or limited tagged type declared immediately within a package declaration.
*************** storage-management discipline).
*** 7442,7448 ****
  
  An object of a simple storage pool type can be associated with an access
  type by specifying the attribute
! @ref{e5,,Simple_Storage_Pool}. For example:
  
  @example
  My_Pool : My_Simple_Storage_Pool_Type;
--- 7617,7623 ----
  
  An object of a simple storage pool type can be associated with an access
  type by specifying the attribute
! @ref{e3,,Simple_Storage_Pool}. For example:
  
  @example
  My_Pool : My_Simple_Storage_Pool_Type;
*************** type Acc is access My_Data_Type;
*** 7452,7462 ****
  for Acc'Simple_Storage_Pool use My_Pool;
  @end example
  
! See attribute @ref{e5,,Simple_Storage_Pool}
  for further details.
  
  @node Pragma Source_File_Name,Pragma Source_File_Name_Project,Pragma Simple_Storage_Pool_Type,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name}@anchor{e6}@anchor{gnat_rm/implementation_defined_pragmas id40}@anchor{e7}
  @section Pragma Source_File_Name
  
  
--- 7627,7637 ----
  for Acc'Simple_Storage_Pool use My_Pool;
  @end example
  
! See attribute @ref{e3,,Simple_Storage_Pool}
  for further details.
  
  @node Pragma Source_File_Name,Pragma Source_File_Name_Project,Pragma Simple_Storage_Pool_Type,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id40}@anchor{e4}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name}@anchor{e5}
  @section Pragma Source_File_Name
  
  
*************** aware of these pragmas, and so other too
*** 7548,7567 ****
  be aware of the intended naming conventions. If you are using project files,
  file naming is controlled by Source_File_Name_Project pragmas, which are
  usually supplied automatically by the project manager. A pragma
! Source_File_Name cannot appear after a @ref{e8,,Pragma Source_File_Name_Project}.
  
  For more details on the use of the @code{Source_File_Name} pragma, see the
  sections on @cite{Using Other File Names} and @cite{Alternative File Naming Schemes}
! in the @cite{GNAT User's Guide}.
  
  @node Pragma Source_File_Name_Project,Pragma Source_Reference,Pragma Source_File_Name,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name-project}@anchor{e8}@anchor{gnat_rm/implementation_defined_pragmas id41}@anchor{e9}
  @section Pragma Source_File_Name_Project
  
  
  This pragma has the same syntax and semantics as pragma Source_File_Name.
  It is only allowed as a stand-alone configuration pragma.
! It cannot appear after a @ref{e6,,Pragma Source_File_Name}, and
  most importantly, once pragma Source_File_Name_Project appears,
  no further Source_File_Name pragmas are allowed.
  
--- 7723,7742 ----
  be aware of the intended naming conventions. If you are using project files,
  file naming is controlled by Source_File_Name_Project pragmas, which are
  usually supplied automatically by the project manager. A pragma
! Source_File_Name cannot appear after a @ref{e6,,Pragma Source_File_Name_Project}.
  
  For more details on the use of the @code{Source_File_Name} pragma, see the
  sections on @cite{Using Other File Names} and @cite{Alternative File Naming Schemes}
! in the @cite{GNAT User’s Guide}.
  
  @node Pragma Source_File_Name_Project,Pragma Source_Reference,Pragma Source_File_Name,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id41}@anchor{e7}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name-project}@anchor{e6}
  @section Pragma Source_File_Name_Project
  
  
  This pragma has the same syntax and semantics as pragma Source_File_Name.
  It is only allowed as a stand-alone configuration pragma.
! It cannot appear after a @ref{e5,,Pragma Source_File_Name}, and
  most importantly, once pragma Source_File_Name_Project appears,
  no further Source_File_Name pragmas are allowed.
  
*************** Source_File_Name or Source_File_Name_Pro
*** 7573,7579 ****
  known to the project manager).
  
  @node Pragma Source_Reference,Pragma SPARK_Mode,Pragma Source_File_Name_Project,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-source-reference}@anchor{ea}
  @section Pragma Source_Reference
  
  
--- 7748,7754 ----
  known to the project manager).
  
  @node Pragma Source_Reference,Pragma SPARK_Mode,Pragma Source_File_Name_Project,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-source-reference}@anchor{e8}
  @section Pragma Source_Reference
  
  
*************** string expression other than a string li
*** 7597,7603 ****
  is needed for error messages issued by all phases of the compiler.
  
  @node Pragma SPARK_Mode,Pragma Static_Elaboration_Desired,Pragma Source_Reference,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-spark-mode}@anchor{eb}@anchor{gnat_rm/implementation_defined_pragmas id42}@anchor{ec}
  @section Pragma SPARK_Mode
  
  
--- 7772,7778 ----
  is needed for error messages issued by all phases of the compiler.
  
  @node Pragma SPARK_Mode,Pragma Static_Elaboration_Desired,Pragma Source_Reference,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id42}@anchor{e9}@anchor{gnat_rm/implementation_defined_pragmas pragma-spark-mode}@anchor{ea}
  @section Pragma SPARK_Mode
  
  
*************** Normally a subprogram or package spec/bo
*** 7644,7650 ****
  that is active at the point it is declared. But this can be overridden
  by pragma within the spec or body as above.
  
! The basic consistency rule is that you can't turn SPARK_Mode back
  @code{On}, once you have explicitly (with a pragma) turned if
  @code{Off}. So the following rules apply:
  
--- 7819,7825 ----
  that is active at the point it is declared. But this can be overridden
  by pragma within the spec or body as above.
  
! The basic consistency rule is that you can’t turn SPARK_Mode back
  @code{On}, once you have explicitly (with a pragma) turned if
  @code{Off}. So the following rules apply:
  
*************** SPARK_Mode (@code{Off}), then that pragm
*** 7679,7685 ****
  the package body.
  
  @node Pragma Static_Elaboration_Desired,Pragma Stream_Convert,Pragma SPARK_Mode,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-static-elaboration-desired}@anchor{ed}
  @section Pragma Static_Elaboration_Desired
  
  
--- 7854,7860 ----
  the package body.
  
  @node Pragma Static_Elaboration_Desired,Pragma Stream_Convert,Pragma SPARK_Mode,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-static-elaboration-desired}@anchor{eb}
  @section Pragma Static_Elaboration_Desired
  
  
*************** construction of larger aggregates with s
*** 7703,7709 ****
  choice.)
  
  @node Pragma Stream_Convert,Pragma Style_Checks,Pragma Static_Elaboration_Desired,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-stream-convert}@anchor{ee}
  @section Pragma Stream_Convert
  
  
--- 7878,7884 ----
  choice.)
  
  @node Pragma Stream_Convert,Pragma Style_Checks,Pragma Static_Elaboration_Desired,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-stream-convert}@anchor{ec}
  @section Pragma Stream_Convert
  
  
*************** The effect is that if the value of an un
*** 7771,7777 ****
  then the representation of the item in the stream is in the same format that
  would be used for @code{Standard.String'Output}, and this same representation
  is expected when a value of this type is read from the stream. Note that the
! value written always includes the bounds, even for Unbounded_String'Write,
  since Unbounded_String is not an array type.
  
  Note that the @code{Stream_Convert} pragma is not effective in the case of
--- 7946,7952 ----
  then the representation of the item in the stream is in the same format that
  would be used for @code{Standard.String'Output}, and this same representation
  is expected when a value of this type is read from the stream. Note that the
! value written always includes the bounds, even for Unbounded_String’Write,
  since Unbounded_String is not an array type.
  
  Note that the @code{Stream_Convert} pragma is not effective in the case of
*************** the pragma is silently ignored, and the
*** 7780,7786 ****
  attributes is used instead.
  
  @node Pragma Style_Checks,Pragma Subtitle,Pragma Stream_Convert,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-style-checks}@anchor{ef}
  @section Pragma Style_Checks
  
  
--- 7955,7961 ----
  attributes is used instead.
  
  @node Pragma Style_Checks,Pragma Subtitle,Pragma Stream_Convert,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-style-checks}@anchor{ed}
  @section Pragma Style_Checks
  
  
*************** gcc -c -gnatyl ...
*** 7822,7828 ****
  
  The form @code{ALL_CHECKS} activates all standard checks (its use is equivalent
  to the use of the @code{gnaty} switch with no options.
! See the @cite{GNAT User's Guide} for details.)
  
  Note: the behavior is slightly different in GNAT mode (@code{-gnatg} used).
  In this case, @code{ALL_CHECKS} implies the standard set of GNAT mode style check
--- 7997,8003 ----
  
  The form @code{ALL_CHECKS} activates all standard checks (its use is equivalent
  to the use of the @code{gnaty} switch with no options.
! See the @cite{GNAT User’s Guide} for details.)
  
  Note: the behavior is slightly different in GNAT mode (@code{-gnatg} used).
  In this case, @code{ALL_CHECKS} implies the standard set of GNAT mode style check
*************** Rf2 : Integer := ARG;      -- OK, no err
*** 7853,7859 ****
  @end example
  
  @node Pragma Subtitle,Pragma Suppress,Pragma Style_Checks,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-subtitle}@anchor{f0}
  @section Pragma Subtitle
  
  
--- 8028,8034 ----
  @end example
  
  @node Pragma Subtitle,Pragma Suppress,Pragma Style_Checks,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-subtitle}@anchor{ee}
  @section Pragma Subtitle
  
  
*************** This pragma is recognized for compatibil
*** 7867,7873 ****
  but is ignored by GNAT.
  
  @node Pragma Suppress,Pragma Suppress_All,Pragma Subtitle,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress}@anchor{f1}
  @section Pragma Suppress
  
  
--- 8042,8048 ----
  but is ignored by GNAT.
  
  @node Pragma Suppress,Pragma Suppress_All,Pragma Subtitle,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress}@anchor{ef}
  @section Pragma Suppress
  
  
*************** checks, but does not require the compile
*** 7933,7946 ****
  will generate checks if they are essentially free, even when they are
  suppressed. In particular, if the compiler can prove that a certain
  check will necessarily fail, it will generate code to do an
! unconditional 'raise', even if checks are suppressed. The compiler
  warns in this case.
  
  Of course, run-time checks are omitted whenever the compiler can prove
  that they will not fail, whether or not checks are suppressed.
  
  @node Pragma Suppress_All,Pragma Suppress_Debug_Info,Pragma Suppress,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-all}@anchor{f2}
  @section Pragma Suppress_All
  
  
--- 8108,8121 ----
  will generate checks if they are essentially free, even when they are
  suppressed. In particular, if the compiler can prove that a certain
  check will necessarily fail, it will generate code to do an
! unconditional ‘raise’, even if checks are suppressed. The compiler
  warns in this case.
  
  Of course, run-time checks are omitted whenever the compiler can prove
  that they will not fail, whether or not checks are suppressed.
  
  @node Pragma Suppress_All,Pragma Suppress_Debug_Info,Pragma Suppress,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-all}@anchor{f0}
  @section Pragma Suppress_All
  
  
*************** The use of the standard Ada pragma @code
*** 7959,7965 ****
  as a normal configuration pragma is the preferred usage in GNAT.
  
  @node Pragma Suppress_Debug_Info,Pragma Suppress_Exception_Locations,Pragma Suppress_All,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info}@anchor{f3}@anchor{gnat_rm/implementation_defined_pragmas id43}@anchor{f4}
  @section Pragma Suppress_Debug_Info
  
  
--- 8134,8140 ----
  as a normal configuration pragma is the preferred usage in GNAT.
  
  @node Pragma Suppress_Debug_Info,Pragma Suppress_Exception_Locations,Pragma Suppress_All,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id43}@anchor{f1}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info}@anchor{f2}
  @section Pragma Suppress_Debug_Info
  
  
*************** for the specified entity. It is intended
*** 7974,7980 ****
  the debugger, and navigating around debugger problems.
  
  @node Pragma Suppress_Exception_Locations,Pragma Suppress_Initialization,Pragma Suppress_Debug_Info,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations}@anchor{f5}
  @section Pragma Suppress_Exception_Locations
  
  
--- 8149,8155 ----
  the debugger, and navigating around debugger problems.
  
  @node Pragma Suppress_Exception_Locations,Pragma Suppress_Initialization,Pragma Suppress_Debug_Info,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations}@anchor{f3}
  @section Pragma Suppress_Exception_Locations
  
  
*************** a partition, so it is fine to have some
*** 7997,8003 ****
  with this pragma and others compiled in normal mode without it.
  
  @node Pragma Suppress_Initialization,Pragma Task_Name,Pragma Suppress_Exception_Locations,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id44}@anchor{f6}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-initialization}@anchor{f7}
  @section Pragma Suppress_Initialization
  
  
--- 8172,8178 ----
  with this pragma and others compiled in normal mode without it.
  
  @node Pragma Suppress_Initialization,Pragma Task_Name,Pragma Suppress_Exception_Locations,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id44}@anchor{f4}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-initialization}@anchor{f5}
  @section Pragma Suppress_Initialization
  
  
*************** is suppressed, just as though its subtyp
*** 8042,8048 ****
  Suppress_Initialization, as described above.
  
  @node Pragma Task_Name,Pragma Task_Storage,Pragma Suppress_Initialization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-task-name}@anchor{f8}
  @section Pragma Task_Name
  
  
--- 8217,8223 ----
  Suppress_Initialization, as described above.
  
  @node Pragma Task_Name,Pragma Task_Storage,Pragma Suppress_Initialization,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-task-name}@anchor{f6}
  @section Pragma Task_Name
  
  
*************** end;
*** 8098,8104 ****
  @end example
  
  @node Pragma Task_Storage,Pragma Test_Case,Pragma Task_Name,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-task-storage}@anchor{f9}
  @section Pragma Task_Storage
  
  
--- 8273,8279 ----
  @end example
  
  @node Pragma Task_Storage,Pragma Test_Case,Pragma Task_Name,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-task-storage}@anchor{f7}
  @section Pragma Task_Storage
  
  
*************** created, depending on the target.  This
*** 8118,8124 ****
  type.
  
  @node Pragma Test_Case,Pragma Thread_Local_Storage,Pragma Task_Storage,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-test-case}@anchor{fa}@anchor{gnat_rm/implementation_defined_pragmas id45}@anchor{fb}
  @section Pragma Test_Case
  
  
--- 8293,8299 ----
  type.
  
  @node Pragma Test_Case,Pragma Thread_Local_Storage,Pragma Task_Storage,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id45}@anchor{f8}@anchor{gnat_rm/implementation_defined_pragmas pragma-test-case}@anchor{f9}
  @section Pragma Test_Case
  
  
*************** postcondition. Mode @code{Robustness} in
*** 8174,8180 ****
  postcondition of the subprogram should be ignored for this test case.
  
  @node Pragma Thread_Local_Storage,Pragma Time_Slice,Pragma Test_Case,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-thread-local-storage}@anchor{fc}@anchor{gnat_rm/implementation_defined_pragmas id46}@anchor{fd}
  @section Pragma Thread_Local_Storage
  
  
--- 8349,8355 ----
  postcondition of the subprogram should be ignored for this test case.
  
  @node Pragma Thread_Local_Storage,Pragma Time_Slice,Pragma Test_Case,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id46}@anchor{fa}@anchor{gnat_rm/implementation_defined_pragmas pragma-thread-local-storage}@anchor{fb}
  @section Pragma Thread_Local_Storage
  
  
*************** pragma Thread_Local_Storage ([Entity =>]
*** 8192,8198 ****
  
  This pragma specifies that the specified entity, which must be
  a variable declared in a library-level package, is to be marked as
! "Thread Local Storage" (@code{TLS}). On systems supporting this (which
  include Windows, Solaris, GNU/Linux, and VxWorks 6), this causes each
  thread (and hence each Ada task) to see a distinct copy of the variable.
  
--- 8367,8373 ----
  
  This pragma specifies that the specified entity, which must be
  a variable declared in a library-level package, is to be marked as
! “Thread Local Storage” (@code{TLS}). On systems supporting this (which
  include Windows, Solaris, GNU/Linux, and VxWorks 6), this causes each
  thread (and hence each Ada task) to see a distinct copy of the variable.
  
*************** If this pragma is used on a system where
*** 8212,8218 ****
  then an error message will be generated and the program will be rejected.
  
  @node Pragma Time_Slice,Pragma Title,Pragma Thread_Local_Storage,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-time-slice}@anchor{fe}
  @section Pragma Time_Slice
  
  
--- 8387,8393 ----
  then an error message will be generated and the program will be rejected.
  
  @node Pragma Time_Slice,Pragma Title,Pragma Thread_Local_Storage,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-time-slice}@anchor{fc}
  @section Pragma Time_Slice
  
  
*************** It is ignored if it is used in a system
*** 8228,8234 ****
  or if it appears in other than the main program unit.
  
  @node Pragma Title,Pragma Type_Invariant,Pragma Time_Slice,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-title}@anchor{ff}
  @section Pragma Title
  
  
--- 8403,8409 ----
  or if it appears in other than the main program unit.
  
  @node Pragma Title,Pragma Type_Invariant,Pragma Time_Slice,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-title}@anchor{fd}
  @section Pragma Title
  
  
*************** notation is used, and named and position
*** 8253,8259 ****
  following the normal rules for procedure calls in Ada.
  
  @node Pragma Type_Invariant,Pragma Type_Invariant_Class,Pragma Title,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant}@anchor{100}
  @section Pragma Type_Invariant
  
  
--- 8428,8434 ----
  following the normal rules for procedure calls in Ada.
  
  @node Pragma Type_Invariant,Pragma Type_Invariant_Class,Pragma Title,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant}@anchor{fe}
  @section Pragma Type_Invariant
  
  
*************** controlled by the assertion identifier @
*** 8274,8280 ****
  rather than @code{Invariant}.
  
  @node Pragma Type_Invariant_Class,Pragma Unchecked_Union,Pragma Type_Invariant,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id47}@anchor{101}@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant-class}@anchor{102}
  @section Pragma Type_Invariant_Class
  
  
--- 8449,8455 ----
  rather than @code{Invariant}.
  
  @node Pragma Type_Invariant_Class,Pragma Unchecked_Union,Pragma Type_Invariant,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id47}@anchor{ff}@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant-class}@anchor{100}
  @section Pragma Type_Invariant_Class
  
  
*************** policy that controls this pragma is @cod
*** 8301,8307 ****
  not @code{Type_Invariant_Class}.
  
  @node Pragma Unchecked_Union,Pragma Unevaluated_Use_Of_Old,Pragma Type_Invariant_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unchecked-union}@anchor{103}
  @section Pragma Unchecked_Union
  
  
--- 8476,8482 ----
  not @code{Type_Invariant_Class}.
  
  @node Pragma Unchecked_Union,Pragma Unevaluated_Use_Of_Old,Pragma Type_Invariant_Class,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unchecked-union}@anchor{101}
  @section Pragma Unchecked_Union
  
  
*************** version in all language modes (Ada 83, A
*** 8321,8327 ****
  details, consult the Ada 2012 Reference Manual, section B.3.3.
  
  @node Pragma Unevaluated_Use_Of_Old,Pragma Unimplemented_Unit,Pragma Unchecked_Union,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old}@anchor{104}
  @section Pragma Unevaluated_Use_Of_Old
  
  
--- 8496,8502 ----
  details, consult the Ada 2012 Reference Manual, section B.3.3.
  
  @node Pragma Unevaluated_Use_Of_Old,Pragma Unimplemented_Unit,Pragma Unchecked_Union,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old}@anchor{102}
  @section Pragma Unevaluated_Use_Of_Old
  
  
*************** uses up to the end of the corresponding
*** 8376,8382 ****
  sequence of package declarations.
  
  @node Pragma Unimplemented_Unit,Pragma Universal_Aliasing,Pragma Unevaluated_Use_Of_Old,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit}@anchor{105}
  @section Pragma Unimplemented_Unit
  
  
--- 8551,8557 ----
  sequence of package declarations.
  
  @node Pragma Unimplemented_Unit,Pragma Universal_Aliasing,Pragma Unevaluated_Use_Of_Old,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit}@anchor{103}
  @section Pragma Unimplemented_Unit
  
  
*************** a clean manner.
*** 8395,8402 ****
  The abort only happens if code is being generated.  Thus you can use
  specs of unimplemented packages in syntax or semantic checking mode.
  
! @node Pragma Universal_Aliasing,Pragma Universal_Data,Pragma Unimplemented_Unit,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-universal-aliasing}@anchor{106}@anchor{gnat_rm/implementation_defined_pragmas id48}@anchor{107}
  @section Pragma Universal_Aliasing
  
  
--- 8570,8577 ----
  The abort only happens if code is being generated.  Thus you can use
  specs of unimplemented packages in syntax or semantic checking mode.
  
! @node Pragma Universal_Aliasing,Pragma Unmodified,Pragma Unimplemented_Unit,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id48}@anchor{104}@anchor{gnat_rm/implementation_defined_pragmas pragma-universal-aliasing}@anchor{105}
  @section Pragma Universal_Aliasing
  
  
*************** optimization for the given type.  In oth
*** 8412,8445 ****
  access types designating this type were subject to pragma No_Strict_Aliasing.
  For a detailed description of the strict aliasing optimization, and the
  situations in which it must be suppressed, see the section on
! @code{Optimization and Strict Aliasing} in the @cite{GNAT User's Guide}.
! 
! @node Pragma Universal_Data,Pragma Unmodified,Pragma Universal_Aliasing,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-universal-data}@anchor{108}@anchor{gnat_rm/implementation_defined_pragmas id49}@anchor{109}
! @section Pragma Universal_Data
! 
! 
! Syntax:
! 
! @example
! pragma Universal_Data [(library_unit_Name)];
! @end example
! 
! This pragma is supported only for the AAMP target and is ignored for
! other targets. The pragma specifies that all library-level objects
! (Counter 0 data) associated with the library unit are to be accessed
! and updated using universal addressing (24-bit addresses for AAMP5)
! rather than the default of 16-bit Data Environment (DENV) addressing.
! Use of this pragma will generally result in less efficient code for
! references to global data associated with the library unit, but
! allows such data to be located anywhere in memory. This pragma is
! a library unit pragma, but can also be used as a configuration pragma
! (including use in the @code{gnat.adc} file). The functionality
! of this pragma is also available by applying the -univ switch on the
! compilations of units where universal addressing of the data is desired.
  
! @node Pragma Unmodified,Pragma Unreferenced,Pragma Universal_Data,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id50}@anchor{10a}@anchor{gnat_rm/implementation_defined_pragmas pragma-unmodified}@anchor{10b}
  @section Pragma Unmodified
  
  
--- 8587,8596 ----
  access types designating this type were subject to pragma No_Strict_Aliasing.
  For a detailed description of the strict aliasing optimization, and the
  situations in which it must be suppressed, see the section on
! @code{Optimization and Strict Aliasing} in the @cite{GNAT User’s Guide}.
  
! @node Pragma Unmodified,Pragma Unreferenced,Pragma Universal_Aliasing,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id49}@anchor{106}@anchor{gnat_rm/implementation_defined_pragmas pragma-unmodified}@anchor{107}
  @section Pragma Unmodified
  
  
*************** Thus it is never necessary to use @code{
*** 8473,8479 ****
  variables, though it is harmless to do so.
  
  @node Pragma Unreferenced,Pragma Unreferenced_Objects,Pragma Unmodified,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced}@anchor{10c}@anchor{gnat_rm/implementation_defined_pragmas id51}@anchor{10d}
  @section Pragma Unreferenced
  
  
--- 8624,8630 ----
  variables, though it is harmless to do so.
  
  @node Pragma Unreferenced,Pragma Unreferenced_Objects,Pragma Unmodified,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id50}@anchor{108}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced}@anchor{109}
  @section Pragma Unreferenced
  
  
*************** or not to be given individually for each
*** 8511,8523 ****
  
  The left hand side of an assignment does not count as a reference for the
  purpose of this pragma. Thus it is fine to assign to an entity for which
! pragma Unreferenced is given.
  
  Note that if a warning is desired for all calls to a given subprogram,
  regardless of whether they occur in the same unit as the subprogram
  declaration, then this pragma should not be used (calls from another
  unit would not be flagged); pragma Obsolescent can be used instead
! for this purpose, see @ref{ac,,Pragma Obsolescent}.
  
  The second form of pragma @code{Unreferenced} is used within a context
  clause. In this case the arguments must be unit names of units previously
--- 8662,8676 ----
  
  The left hand side of an assignment does not count as a reference for the
  purpose of this pragma. Thus it is fine to assign to an entity for which
! pragma Unreferenced is given. However, use of an entity as an actual for
! an out parameter does count as a reference unless warnings for unread output
! parameters are enabled via @code{-gnatw.o}.
  
  Note that if a warning is desired for all calls to a given subprogram,
  regardless of whether they occur in the same unit as the subprogram
  declaration, then this pragma should not be used (calls from another
  unit would not be flagged); pragma Obsolescent can be used instead
! for this purpose, see @ref{ab,,Pragma Obsolescent}.
  
  The second form of pragma @code{Unreferenced} is used within a context
  clause. In this case the arguments must be unit names of units previously
*************** Thus it is never necessary to use @code{
*** 8533,8539 ****
  variables, though it is harmless to do so.
  
  @node Pragma Unreferenced_Objects,Pragma Unreserve_All_Interrupts,Pragma Unreferenced,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects}@anchor{10e}@anchor{gnat_rm/implementation_defined_pragmas id52}@anchor{10f}
  @section Pragma Unreferenced_Objects
  
  
--- 8686,8692 ----
  variables, though it is harmless to do so.
  
  @node Pragma Unreferenced_Objects,Pragma Unreserve_All_Interrupts,Pragma Unreferenced,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id51}@anchor{10a}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects}@anchor{10b}
  @section Pragma Unreferenced_Objects
  
  
*************** compiler will automatically suppress unw
*** 8558,8564 ****
  not being referenced.
  
  @node Pragma Unreserve_All_Interrupts,Pragma Unsuppress,Pragma Unreferenced_Objects,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts}@anchor{110}
  @section Pragma Unreserve_All_Interrupts
  
  
--- 8711,8717 ----
  not being referenced.
  
  @node Pragma Unreserve_All_Interrupts,Pragma Unsuppress,Pragma Unreferenced_Objects,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts}@anchor{10c}
  @section Pragma Unreserve_All_Interrupts
  
  
*************** handled, see pragma @code{Interrupt_Stat
*** 8594,8600 ****
  of the @code{Unreserve_All_Interrupts} pragma.
  
  @node Pragma Unsuppress,Pragma Use_VADS_Size,Pragma Unreserve_All_Interrupts,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unsuppress}@anchor{111}
  @section Pragma Unsuppress
  
  
--- 8747,8753 ----
  of the @code{Unreserve_All_Interrupts} pragma.
  
  @node Pragma Unsuppress,Pragma Use_VADS_Size,Pragma Unreserve_All_Interrupts,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unsuppress}@anchor{10d}
  @section Pragma Unsuppress
  
  
*************** number of implementation-defined check n
*** 8630,8636 ****
  @code{Suppress} for full details.
  
  @node Pragma Use_VADS_Size,Pragma Unused,Pragma Unsuppress,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-use-vads-size}@anchor{112}
  @section Pragma Use_VADS_Size
  
  
--- 8783,8789 ----
  @code{Suppress} for full details.
  
  @node Pragma Use_VADS_Size,Pragma Unused,Pragma Unsuppress,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-use-vads-size}@anchor{10e}
  @section Pragma Use_VADS_Size
  
  
*************** pragma Use_VADS_Size;
*** 8646,8660 ****
  @end example
  
  This is a configuration pragma.  In a unit to which it applies, any use
! of the 'Size attribute is automatically interpreted as a use of the
! 'VADS_Size attribute.  Note that this may result in incorrect semantic
  processing of valid Ada 95 or Ada 2005 programs.  This is intended to aid in
  the handling of existing code which depends on the interpretation of Size
  as implemented in the VADS compiler.  See description of the VADS_Size
  attribute for further details.
  
  @node Pragma Unused,Pragma Validity_Checks,Pragma Use_VADS_Size,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-unused}@anchor{113}@anchor{gnat_rm/implementation_defined_pragmas id53}@anchor{114}
  @section Pragma Unused
  
  
--- 8799,8813 ----
  @end example
  
  This is a configuration pragma.  In a unit to which it applies, any use
! of the ‘Size attribute is automatically interpreted as a use of the
! ‘VADS_Size attribute.  Note that this may result in incorrect semantic
  processing of valid Ada 95 or Ada 2005 programs.  This is intended to aid in
  the handling of existing code which depends on the interpretation of Size
  as implemented in the VADS compiler.  See description of the VADS_Size
  attribute for further details.
  
  @node Pragma Unused,Pragma Validity_Checks,Pragma Use_VADS_Size,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id52}@anchor{10f}@anchor{gnat_rm/implementation_defined_pragmas pragma-unused}@anchor{110}
  @section Pragma Unused
  
  
*************** Thus it is never necessary to use @code{
*** 8688,8694 ****
  variables, though it is harmless to do so.
  
  @node Pragma Validity_Checks,Pragma Volatile,Pragma Unused,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-validity-checks}@anchor{115}
  @section Pragma Validity_Checks
  
  
--- 8841,8847 ----
  variables, though it is harmless to do so.
  
  @node Pragma Validity_Checks,Pragma Volatile,Pragma Unused,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-validity-checks}@anchor{111}
  @section Pragma Validity_Checks
  
  
*************** activated.  The validity checks are firs
*** 8711,8717 ****
  reference manual settings, and then a string of letters in the string
  specifies the exact set of options required.  The form of this string
  is exactly as described for the @emph{-gnatVx} compiler switch (see the
! GNAT User's Guide for details).  For example the following two
  methods can be used to enable validity checking for mode @code{in} and
  @code{in out} subprogram parameters:
  
--- 8864,8870 ----
  reference manual settings, and then a string of letters in the string
  specifies the exact set of options required.  The form of this string
  is exactly as described for the @emph{-gnatVx} compiler switch (see the
! GNAT User’s Guide for details).  For example the following two
  methods can be used to enable validity checking for mode @code{in} and
  @code{in out} subprogram parameters:
  
*************** A := C;                       -- C will
*** 8744,8750 ****
  @end example
  
  @node Pragma Volatile,Pragma Volatile_Full_Access,Pragma Validity_Checks,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id54}@anchor{116}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile}@anchor{117}
  @section Pragma Volatile
  
  
--- 8897,8903 ----
  @end example
  
  @node Pragma Volatile,Pragma Volatile_Full_Access,Pragma Validity_Checks,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id53}@anchor{112}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile}@anchor{113}
  @section Pragma Volatile
  
  
*************** implementation of pragma Volatile is upw
*** 8762,8768 ****
  implementation in DEC Ada 83.
  
  @node Pragma Volatile_Full_Access,Pragma Volatile_Function,Pragma Volatile,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id55}@anchor{118}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-full-access}@anchor{119}
  @section Pragma Volatile_Full_Access
  
  
--- 8915,8921 ----
  implementation in DEC Ada 83.
  
  @node Pragma Volatile_Full_Access,Pragma Volatile_Function,Pragma Volatile,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id54}@anchor{114}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-full-access}@anchor{115}
  @section Pragma Volatile_Full_Access
  
  
*************** is not to the whole object; the compiler
*** 8788,8794 ****
  access only part of the object in this case.
  
  @node Pragma Volatile_Function,Pragma Warning_As_Error,Pragma Volatile_Full_Access,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id56}@anchor{11a}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-function}@anchor{11b}
  @section Pragma Volatile_Function
  
  
--- 8941,8947 ----
  access only part of the object in this case.
  
  @node Pragma Volatile_Function,Pragma Warning_As_Error,Pragma Volatile_Full_Access,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id55}@anchor{116}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-function}@anchor{117}
  @section Pragma Volatile_Function
  
  
*************** For the semantics of this pragma, see th
*** 8802,8808 ****
  in the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma Warning_As_Error,Pragma Warnings,Pragma Volatile_Function,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-warning-as-error}@anchor{11c}
  @section Pragma Warning_As_Error
  
  
--- 8955,8961 ----
  in the SPARK 2014 Reference Manual, section 7.1.2.
  
  @node Pragma Warning_As_Error,Pragma Warnings,Pragma Volatile_Function,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-warning-as-error}@anchor{118}
  @section Pragma Warning_As_Error
  
  
*************** as an error. This gives more precise con
*** 8819,8825 ****
  which treats warnings as errors.
  
  This pragma can apply to regular warnings (messages enabled by -gnatw)
! and to style warnings (messages that start with "(style)",
  enabled by -gnaty).
  
  The pattern may contain asterisks, which match zero or more characters
--- 8972,8978 ----
  which treats warnings as errors.
  
  This pragma can apply to regular warnings (messages enabled by -gnatw)
! and to style warnings (messages that start with “(style)”,
  enabled by -gnaty).
  
  The pattern may contain asterisks, which match zero or more characters
*************** you can use multiple pragma Warning_As_E
*** 8842,8848 ****
  
  The above use of patterns to match the message applies only to warning
  messages generated by the front end. This pragma can also be applied to
! warnings provided by the back end and mentioned in @ref{11d,,Pragma Warnings}.
  By using a single full @emph{-Wxxx} switch in the pragma, such warnings
  can also be treated as errors.
  
--- 8995,9001 ----
  
  The above use of patterns to match the message applies only to warning
  messages generated by the front end. This pragma can also be applied to
! warnings provided by the back end and mentioned in @ref{119,,Pragma Warnings}.
  By using a single full @emph{-Wxxx} switch in the pragma, such warnings
  can also be treated as errors.
  
*************** Note that this pragma does not affect th
*** 8888,8898 ****
  any way, it merely changes the effect of a matching warning if one
  is produced as a result of other warnings options. As shown in this
  example, if the pragma results in a warning being treated as an error,
! the tag is changed from "warning:" to "error:" and the string
! "[warning-as-error]" is appended to the end of the message.
  
  @node Pragma Warnings,Pragma Weak_External,Pragma Warning_As_Error,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id57}@anchor{11e}@anchor{gnat_rm/implementation_defined_pragmas pragma-warnings}@anchor{11d}
  @section Pragma Warnings
  
  
--- 9041,9051 ----
  any way, it merely changes the effect of a matching warning if one
  is produced as a result of other warnings options. As shown in this
  example, if the pragma results in a warning being treated as an error,
! the tag is changed from “warning:” to “error:” and the string
! “[warning-as-error]” is appended to the end of the message.
  
  @node Pragma Warnings,Pragma Weak_External,Pragma Warning_As_Error,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas id56}@anchor{11a}@anchor{gnat_rm/implementation_defined_pragmas pragma-warnings}@anchor{119}
  @section Pragma Warnings
  
  
*************** line switch controlling warnings. For a
*** 8958,8964 ****
  command with no arguments, which will generate usage information containing
  the list of warnings switches supported. For
  full details see the section on @code{Warning Message Control} in the
! @cite{GNAT User's Guide}.
  This form can also be used as a configuration pragma.
  
  The warnings controlled by the @code{-gnatw} switch are generated by the
--- 9111,9117 ----
  command with no arguments, which will generate usage information containing
  the list of warnings switches supported. For
  full details see the section on @code{Warning Message Control} in the
! @cite{GNAT User’s Guide}.
  This form can also be used as a configuration pragma.
  
  The warnings controlled by the @code{-gnatw} switch are generated by the
*************** also be used as a configuration pragma.
*** 8980,8986 ****
  The fourth form, with an @code{On|Off} parameter and a string, is used to
  control individual messages, based on their text. The string argument
  is a pattern that is used to match against the text of individual
! warning messages (not including the initial "warning: " tag).
  
  The pattern may contain asterisks, which match zero or more characters in
  the message. For example, you can use
--- 9133,9139 ----
  The fourth form, with an @code{On|Off} parameter and a string, is used to
  control individual messages, based on their text. The string argument
  is a pattern that is used to match against the text of individual
! warning messages (not including the initial “warning: ” tag).
  
  The pattern may contain asterisks, which match zero or more characters in
  the message. For example, you can use
*************** selectively for each tool, and as a cons
*** 9048,9054 ****
  Warnings with switch @code{-gnatw.w}.
  
  @node Pragma Weak_External,Pragma Wide_Character_Encoding,Pragma Warnings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-weak-external}@anchor{11f}
  @section Pragma Weak_External
  
  
--- 9201,9207 ----
  Warnings with switch @code{-gnatw.w}.
  
  @node Pragma Weak_External,Pragma Wide_Character_Encoding,Pragma Warnings,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-weak-external}@anchor{11b}
  @section Pragma Weak_External
  
  
*************** end External_Module;
*** 9099,9105 ****
  @end example
  
  @node Pragma Wide_Character_Encoding,,Pragma Weak_External,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding}@anchor{120}
  @section Pragma Wide_Character_Encoding
  
  
--- 9252,9258 ----
  @end example
  
  @node Pragma Wide_Character_Encoding,,Pragma Weak_External,Implementation Defined Pragmas
! @anchor{gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding}@anchor{11c}
  @section Pragma Wide_Character_Encoding
  
  
*************** to appear within the same file.
*** 9117,9123 ****
  
  However, note that the pragma cannot immediately precede the relevant
  wide character, because then the previous encoding will still be in
! effect, causing "illegal character" errors.
  
  The argument can be an identifier or a character literal. In the identifier
  case, it is one of @code{HEX}, @code{UPPER}, @code{SHIFT_JIS},
--- 9270,9276 ----
  
  However, note that the pragma cannot immediately precede the relevant
  wide character, because then the previous encoding will still be in
! effect, causing “illegal character” errors.
  
  The argument can be an identifier or a character literal. In the identifier
  case, it is one of @code{HEX}, @code{UPPER}, @code{SHIFT_JIS},
*************** encoding within that file, and does not
*** 9130,9136 ****
  or subunits.
  
  @node Implementation Defined Aspects,Implementation Defined Attributes,Implementation Defined Pragmas,Top
! @anchor{gnat_rm/implementation_defined_aspects implementation-defined-aspects}@anchor{121}@anchor{gnat_rm/implementation_defined_aspects doc}@anchor{122}@anchor{gnat_rm/implementation_defined_aspects id1}@anchor{123}
  @chapter Implementation Defined Aspects
  
  
--- 9283,9289 ----
  or subunits.
  
  @node Implementation Defined Aspects,Implementation Defined Attributes,Implementation Defined Pragmas,Top
! @anchor{gnat_rm/implementation_defined_aspects doc}@anchor{11d}@anchor{gnat_rm/implementation_defined_aspects id1}@anchor{11e}@anchor{gnat_rm/implementation_defined_aspects implementation-defined-aspects}@anchor{11f}
  @chapter Implementation Defined Aspects
  
  
*************** or attribute definition clause.
*** 9206,9212 ****
  * Aspect Initializes:: 
  * Aspect Inline_Always:: 
  * Aspect Invariant:: 
! * Aspect Invariant'Class:: 
  * Aspect Iterable:: 
  * Aspect Linker_Section:: 
  * Aspect Lock_Free:: 
--- 9359,9365 ----
  * Aspect Initializes:: 
  * Aspect Inline_Always:: 
  * Aspect Invariant:: 
! * Aspect Invariant’Class:: 
  * Aspect Iterable:: 
  * Aspect Linker_Section:: 
  * Aspect Lock_Free:: 
*************** or attribute definition clause.
*** 9215,9220 ****
--- 9368,9374 ----
  * Aspect No_Elaboration_Code_All:: 
  * Aspect No_Inline:: 
  * Aspect No_Tagged_Streams:: 
+ * Aspect No_Task_Parts:: 
  * Aspect Object_Size:: 
  * Aspect Obsolescent:: 
  * Aspect Part_Of:: 
*************** or attribute definition clause.
*** 9238,9244 ****
  * Aspect Test_Case:: 
  * Aspect Thread_Local_Storage:: 
  * Aspect Universal_Aliasing:: 
- * Aspect Universal_Data:: 
  * Aspect Unmodified:: 
  * Aspect Unreferenced:: 
  * Aspect Unreferenced_Objects:: 
--- 9392,9397 ----
*************** or attribute definition clause.
*** 9250,9265 ****
  @end menu
  
  @node Aspect Abstract_State,Aspect Annotate,,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-abstract-state}@anchor{124}
  @section Aspect Abstract_State
  
  
  @geindex Abstract_State
  
! This aspect is equivalent to @ref{1c,,pragma Abstract_State}.
  
  @node Aspect Annotate,Aspect Async_Readers,Aspect Abstract_State,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-annotate}@anchor{125}
  @section Aspect Annotate
  
  
--- 9403,9418 ----
  @end menu
  
  @node Aspect Abstract_State,Aspect Annotate,,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-abstract-state}@anchor{120}
  @section Aspect Abstract_State
  
  
  @geindex Abstract_State
  
! This aspect is equivalent to @ref{1e,,pragma Abstract_State}.
  
  @node Aspect Annotate,Aspect Async_Readers,Aspect Abstract_State,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-annotate}@anchor{121}
  @section Aspect Annotate
  
  
*************** This aspect is equivalent to @ref{1c,,pr
*** 9267,9273 ****
  
  There are three forms of this aspect (where ID is an identifier,
  and ARG is a general expression),
! corresponding to @ref{26,,pragma Annotate}.
  
  
  @table @asis
--- 9420,9426 ----
  
  There are three forms of this aspect (where ID is an identifier,
  and ARG is a general expression),
! corresponding to @ref{28,,pragma Annotate}.
  
  
  @table @asis
*************** Equivalent to @code{pragma Annotate (ID,
*** 9286,9330 ****
  @end table
  
  @node Aspect Async_Readers,Aspect Async_Writers,Aspect Annotate,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-async-readers}@anchor{126}
  @section Aspect Async_Readers
  
  
  @geindex Async_Readers
  
! This boolean aspect is equivalent to @ref{2d,,pragma Async_Readers}.
  
  @node Aspect Async_Writers,Aspect Constant_After_Elaboration,Aspect Async_Readers,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-async-writers}@anchor{127}
  @section Aspect Async_Writers
  
  
  @geindex Async_Writers
  
! This boolean aspect is equivalent to @ref{30,,pragma Async_Writers}.
  
  @node Aspect Constant_After_Elaboration,Aspect Contract_Cases,Aspect Async_Writers,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration}@anchor{128}
  @section Aspect Constant_After_Elaboration
  
  
  @geindex Constant_After_Elaboration
  
! This aspect is equivalent to @ref{42,,pragma Constant_After_Elaboration}.
  
  @node Aspect Contract_Cases,Aspect Depends,Aspect Constant_After_Elaboration,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-contract-cases}@anchor{129}
  @section Aspect Contract_Cases
  
  
  @geindex Contract_Cases
  
! This aspect is equivalent to @ref{44,,pragma Contract_Cases}, the sequence
  of clauses being enclosed in parentheses so that syntactically it is an
  aggregate.
  
  @node Aspect Depends,Aspect Default_Initial_Condition,Aspect Contract_Cases,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-depends}@anchor{12a}
  @section Aspect Depends
  
  
--- 9439,9483 ----
  @end table
  
  @node Aspect Async_Readers,Aspect Async_Writers,Aspect Annotate,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-async-readers}@anchor{122}
  @section Aspect Async_Readers
  
  
  @geindex Async_Readers
  
! This boolean aspect is equivalent to @ref{2f,,pragma Async_Readers}.
  
  @node Aspect Async_Writers,Aspect Constant_After_Elaboration,Aspect Async_Readers,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-async-writers}@anchor{123}
  @section Aspect Async_Writers
  
  
  @geindex Async_Writers
  
! This boolean aspect is equivalent to @ref{31,,pragma Async_Writers}.
  
  @node Aspect Constant_After_Elaboration,Aspect Contract_Cases,Aspect Async_Writers,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration}@anchor{124}
  @section Aspect Constant_After_Elaboration
  
  
  @geindex Constant_After_Elaboration
  
! This aspect is equivalent to @ref{41,,pragma Constant_After_Elaboration}.
  
  @node Aspect Contract_Cases,Aspect Depends,Aspect Constant_After_Elaboration,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-contract-cases}@anchor{125}
  @section Aspect Contract_Cases
  
  
  @geindex Contract_Cases
  
! This aspect is equivalent to @ref{43,,pragma Contract_Cases}, the sequence
  of clauses being enclosed in parentheses so that syntactically it is an
  aggregate.
  
  @node Aspect Depends,Aspect Default_Initial_Condition,Aspect Contract_Cases,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-depends}@anchor{126}
  @section Aspect Depends
  
  
*************** aggregate.
*** 9333,9348 ****
  This aspect is equivalent to @ref{53,,pragma Depends}.
  
  @node Aspect Default_Initial_Condition,Aspect Dimension,Aspect Depends,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-default-initial-condition}@anchor{12b}
  @section Aspect Default_Initial_Condition
  
  
  @geindex Default_Initial_Condition
  
! This aspect is equivalent to @ref{4e,,pragma Default_Initial_Condition}.
  
  @node Aspect Dimension,Aspect Dimension_System,Aspect Default_Initial_Condition,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-dimension}@anchor{12c}
  @section Aspect Dimension
  
  
--- 9486,9501 ----
  This aspect is equivalent to @ref{53,,pragma Depends}.
  
  @node Aspect Default_Initial_Condition,Aspect Dimension,Aspect Depends,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-default-initial-condition}@anchor{127}
  @section Aspect Default_Initial_Condition
  
  
  @geindex Default_Initial_Condition
  
! This aspect is equivalent to @ref{4d,,pragma Default_Initial_Condition}.
  
  @node Aspect Dimension,Aspect Dimension_System,Aspect Default_Initial_Condition,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-dimension}@anchor{128}
  @section Aspect Dimension
  
  
*************** Note that when the dimensioned type is a
*** 9378,9384 ****
  dimension value must be an integer literal.
  
  @node Aspect Dimension_System,Aspect Disable_Controlled,Aspect Dimension,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-dimension-system}@anchor{12d}
  @section Aspect Dimension_System
  
  
--- 9531,9537 ----
  dimension value must be an integer literal.
  
  @node Aspect Dimension_System,Aspect Disable_Controlled,Aspect Dimension,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-dimension-system}@anchor{129}
  @section Aspect Dimension_System
  
  
*************** Note that in the above type definition,
*** 9434,9444 ****
  represent a theta character (avoiding the use of extended Latin-1
  characters in this context).
  
! See section 'Performing Dimensionality Analysis in GNAT' in the GNAT Users
  Guide for detailed examples of use of the dimension system.
  
  @node Aspect Disable_Controlled,Aspect Effective_Reads,Aspect Dimension_System,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-disable-controlled}@anchor{12e}
  @section Aspect Disable_Controlled
  
  
--- 9587,9597 ----
  represent a theta character (avoiding the use of extended Latin-1
  characters in this context).
  
! See section ‘Performing Dimensionality Analysis in GNAT’ in the GNAT Users
  Guide for detailed examples of use of the dimension system.
  
  @node Aspect Disable_Controlled,Aspect Effective_Reads,Aspect Dimension_System,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-disable-controlled}@anchor{12a}
  @section Aspect Disable_Controlled
  
  
*************** where for example you might want a recor
*** 9451,9560 ****
  whether some run-time check is enabled or suppressed.
  
  @node Aspect Effective_Reads,Aspect Effective_Writes,Aspect Disable_Controlled,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-effective-reads}@anchor{12f}
  @section Aspect Effective_Reads
  
  
  @geindex Effective_Reads
  
! This aspect is equivalent to @ref{59,,pragma Effective_Reads}.
  
  @node Aspect Effective_Writes,Aspect Extensions_Visible,Aspect Effective_Reads,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-effective-writes}@anchor{130}
  @section Aspect Effective_Writes
  
  
  @geindex Effective_Writes
  
! This aspect is equivalent to @ref{5b,,pragma Effective_Writes}.
  
  @node Aspect Extensions_Visible,Aspect Favor_Top_Level,Aspect Effective_Writes,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-extensions-visible}@anchor{131}
  @section Aspect Extensions_Visible
  
  
  @geindex Extensions_Visible
  
! This aspect is equivalent to @ref{67,,pragma Extensions_Visible}.
  
  @node Aspect Favor_Top_Level,Aspect Ghost,Aspect Extensions_Visible,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-favor-top-level}@anchor{132}
  @section Aspect Favor_Top_Level
  
  
  @geindex Favor_Top_Level
  
! This boolean aspect is equivalent to @ref{6c,,pragma Favor_Top_Level}.
  
  @node Aspect Ghost,Aspect Global,Aspect Favor_Top_Level,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-ghost}@anchor{133}
  @section Aspect Ghost
  
  
  @geindex Ghost
  
! This aspect is equivalent to @ref{6f,,pragma Ghost}.
  
  @node Aspect Global,Aspect Initial_Condition,Aspect Ghost,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-global}@anchor{134}
  @section Aspect Global
  
  
  @geindex Global
  
! This aspect is equivalent to @ref{71,,pragma Global}.
  
  @node Aspect Initial_Condition,Aspect Initializes,Aspect Global,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-initial-condition}@anchor{135}
  @section Aspect Initial_Condition
  
  
  @geindex Initial_Condition
  
! This aspect is equivalent to @ref{7f,,pragma Initial_Condition}.
  
  @node Aspect Initializes,Aspect Inline_Always,Aspect Initial_Condition,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-initializes}@anchor{136}
  @section Aspect Initializes
  
  
  @geindex Initializes
  
! This aspect is equivalent to @ref{81,,pragma Initializes}.
  
  @node Aspect Inline_Always,Aspect Invariant,Aspect Initializes,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-inline-always}@anchor{137}
  @section Aspect Inline_Always
  
  
  @geindex Inline_Always
  
! This boolean aspect is equivalent to @ref{84,,pragma Inline_Always}.
  
! @node Aspect Invariant,Aspect Invariant'Class,Aspect Inline_Always,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-invariant}@anchor{138}
  @section Aspect Invariant
  
  
  @geindex Invariant
  
! This aspect is equivalent to @ref{8b,,pragma Invariant}. It is a
  synonym for the language defined aspect @code{Type_Invariant} except
  that it is separately controllable using pragma @code{Assertion_Policy}.
  
! @node Aspect Invariant'Class,Aspect Iterable,Aspect Invariant,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-invariant-class}@anchor{139}
! @section Aspect Invariant'Class
  
  
  @geindex Invariant'Class
  
! This aspect is equivalent to @ref{102,,pragma Type_Invariant_Class}. It is a
  synonym for the language defined aspect @code{Type_Invariant'Class} except
  that it is separately controllable using pragma @code{Assertion_Policy}.
  
! @node Aspect Iterable,Aspect Linker_Section,Aspect Invariant'Class,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-iterable}@anchor{13a}
  @section Aspect Iterable
  
  
--- 9604,9713 ----
  whether some run-time check is enabled or suppressed.
  
  @node Aspect Effective_Reads,Aspect Effective_Writes,Aspect Disable_Controlled,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-effective-reads}@anchor{12b}
  @section Aspect Effective_Reads
  
  
  @geindex Effective_Reads
  
! This aspect is equivalent to @ref{58,,pragma Effective_Reads}.
  
  @node Aspect Effective_Writes,Aspect Extensions_Visible,Aspect Effective_Reads,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-effective-writes}@anchor{12c}
  @section Aspect Effective_Writes
  
  
  @geindex Effective_Writes
  
! This aspect is equivalent to @ref{5a,,pragma Effective_Writes}.
  
  @node Aspect Extensions_Visible,Aspect Favor_Top_Level,Aspect Effective_Writes,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-extensions-visible}@anchor{12d}
  @section Aspect Extensions_Visible
  
  
  @geindex Extensions_Visible
  
! This aspect is equivalent to @ref{65,,pragma Extensions_Visible}.
  
  @node Aspect Favor_Top_Level,Aspect Ghost,Aspect Extensions_Visible,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-favor-top-level}@anchor{12e}
  @section Aspect Favor_Top_Level
  
  
  @geindex Favor_Top_Level
  
! This boolean aspect is equivalent to @ref{6a,,pragma Favor_Top_Level}.
  
  @node Aspect Ghost,Aspect Global,Aspect Favor_Top_Level,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-ghost}@anchor{12f}
  @section Aspect Ghost
  
  
  @geindex Ghost
  
! This aspect is equivalent to @ref{6e,,pragma Ghost}.
  
  @node Aspect Global,Aspect Initial_Condition,Aspect Ghost,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-global}@anchor{130}
  @section Aspect Global
  
  
  @geindex Global
  
! This aspect is equivalent to @ref{70,,pragma Global}.
  
  @node Aspect Initial_Condition,Aspect Initializes,Aspect Global,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-initial-condition}@anchor{131}
  @section Aspect Initial_Condition
  
  
  @geindex Initial_Condition
  
! This aspect is equivalent to @ref{7d,,pragma Initial_Condition}.
  
  @node Aspect Initializes,Aspect Inline_Always,Aspect Initial_Condition,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-initializes}@anchor{132}
  @section Aspect Initializes
  
  
  @geindex Initializes
  
! This aspect is equivalent to @ref{80,,pragma Initializes}.
  
  @node Aspect Inline_Always,Aspect Invariant,Aspect Initializes,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-inline-always}@anchor{133}
  @section Aspect Inline_Always
  
  
  @geindex Inline_Always
  
! This boolean aspect is equivalent to @ref{82,,pragma Inline_Always}.
  
! @node Aspect Invariant,Aspect Invariant’Class,Aspect Inline_Always,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-invariant}@anchor{134}
  @section Aspect Invariant
  
  
  @geindex Invariant
  
! This aspect is equivalent to @ref{89,,pragma Invariant}. It is a
  synonym for the language defined aspect @code{Type_Invariant} except
  that it is separately controllable using pragma @code{Assertion_Policy}.
  
! @node Aspect Invariant’Class,Aspect Iterable,Aspect Invariant,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-invariant-class}@anchor{135}
! @section Aspect Invariant’Class
  
  
  @geindex Invariant'Class
  
! This aspect is equivalent to @ref{100,,pragma Type_Invariant_Class}. It is a
  synonym for the language defined aspect @code{Type_Invariant'Class} except
  that it is separately controllable using pragma @code{Assertion_Policy}.
  
! @node Aspect Iterable,Aspect Linker_Section,Aspect Invariant’Class,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-iterable}@anchor{136}
  @section Aspect Iterable
  
  
*************** function Get_Element (Cont : Container;
*** 9634,9750 ****
  This aspect is used in the GNAT-defined formal container packages.
  
  @node Aspect Linker_Section,Aspect Lock_Free,Aspect Iterable,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-linker-section}@anchor{13b}
  @section Aspect Linker_Section
  
  
  @geindex Linker_Section
  
! This aspect is equivalent to @ref{93,,pragma Linker_Section}.
  
  @node Aspect Lock_Free,Aspect Max_Queue_Length,Aspect Linker_Section,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-lock-free}@anchor{13c}
  @section Aspect Lock_Free
  
  
  @geindex Lock_Free
  
! This boolean aspect is equivalent to @ref{95,,pragma Lock_Free}.
  
  @node Aspect Max_Queue_Length,Aspect No_Caching,Aspect Lock_Free,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-max-queue-length}@anchor{13d}
  @section Aspect Max_Queue_Length
  
  
  @geindex Max_Queue_Length
  
! This aspect is equivalent to @ref{9d,,pragma Max_Queue_Length}.
  
  @node Aspect No_Caching,Aspect No_Elaboration_Code_All,Aspect Max_Queue_Length,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-caching}@anchor{13e}
  @section Aspect No_Caching
  
  
  @geindex No_Caching
  
! This boolean aspect is equivalent to @ref{9f,,pragma No_Caching}.
  
  @node Aspect No_Elaboration_Code_All,Aspect No_Inline,Aspect No_Caching,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all}@anchor{13f}
  @section Aspect No_Elaboration_Code_All
  
  
  @geindex No_Elaboration_Code_All
  
! This aspect is equivalent to @ref{a3,,pragma No_Elaboration_Code_All}
  for a program unit.
  
  @node Aspect No_Inline,Aspect No_Tagged_Streams,Aspect No_Elaboration_Code_All,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-inline}@anchor{140}
  @section Aspect No_Inline
  
  
  @geindex No_Inline
  
! This boolean aspect is equivalent to @ref{a6,,pragma No_Inline}.
  
! @node Aspect No_Tagged_Streams,Aspect Object_Size,Aspect No_Inline,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-tagged-streams}@anchor{141}
  @section Aspect No_Tagged_Streams
  
  
  @geindex No_Tagged_Streams
  
! This aspect is equivalent to @ref{a9,,pragma No_Tagged_Streams} with an
  argument specifying a root tagged type (thus this aspect can only be
  applied to such a type).
  
! @node Aspect Object_Size,Aspect Obsolescent,Aspect No_Tagged_Streams,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-object-size}@anchor{142}
  @section Aspect Object_Size
  
  
  @geindex Object_Size
  
! This aspect is equivalent to @ref{143,,attribute Object_Size}.
  
  @node Aspect Obsolescent,Aspect Part_Of,Aspect Object_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-obsolescent}@anchor{144}
  @section Aspect Obsolescent
  
  
  @geindex Obsolsecent
  
! This aspect is equivalent to @ref{ac,,pragma Obsolescent}. Note that the
  evaluation of this aspect happens at the point of occurrence, it is not
  delayed until the freeze point.
  
  @node Aspect Part_Of,Aspect Persistent_BSS,Aspect Obsolescent,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-part-of}@anchor{145}
  @section Aspect Part_Of
  
  
  @geindex Part_Of
  
! This aspect is equivalent to @ref{b4,,pragma Part_Of}.
  
  @node Aspect Persistent_BSS,Aspect Predicate,Aspect Part_Of,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{146}
  @section Aspect Persistent_BSS
  
  
  @geindex Persistent_BSS
  
! This boolean aspect is equivalent to @ref{b7,,pragma Persistent_BSS}.
  
  @node Aspect Predicate,Aspect Pure_Function,Aspect Persistent_BSS,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{147}
  @section Aspect Predicate
  
  
  @geindex Predicate
  
! This aspect is equivalent to @ref{be,,pragma Predicate}. It is thus
  similar to the language defined aspects @code{Dynamic_Predicate}
  and @code{Static_Predicate} except that whether the resulting
  predicate is static or dynamic is controlled by the form of the
--- 9787,9919 ----
  This aspect is used in the GNAT-defined formal container packages.
  
  @node Aspect Linker_Section,Aspect Lock_Free,Aspect Iterable,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-linker-section}@anchor{137}
  @section Aspect Linker_Section
  
  
  @geindex Linker_Section
  
! This aspect is equivalent to @ref{91,,pragma Linker_Section}.
  
  @node Aspect Lock_Free,Aspect Max_Queue_Length,Aspect Linker_Section,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-lock-free}@anchor{138}
  @section Aspect Lock_Free
  
  
  @geindex Lock_Free
  
! This boolean aspect is equivalent to @ref{93,,pragma Lock_Free}.
  
  @node Aspect Max_Queue_Length,Aspect No_Caching,Aspect Lock_Free,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-max-queue-length}@anchor{139}
  @section Aspect Max_Queue_Length
  
  
  @geindex Max_Queue_Length
  
! This aspect is equivalent to @ref{9b,,pragma Max_Queue_Length}.
  
  @node Aspect No_Caching,Aspect No_Elaboration_Code_All,Aspect Max_Queue_Length,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-caching}@anchor{13a}
  @section Aspect No_Caching
  
  
  @geindex No_Caching
  
! This boolean aspect is equivalent to @ref{9e,,pragma No_Caching}.
  
  @node Aspect No_Elaboration_Code_All,Aspect No_Inline,Aspect No_Caching,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all}@anchor{13b}
  @section Aspect No_Elaboration_Code_All
  
  
  @geindex No_Elaboration_Code_All
  
! This aspect is equivalent to @ref{a1,,pragma No_Elaboration_Code_All}
  for a program unit.
  
  @node Aspect No_Inline,Aspect No_Tagged_Streams,Aspect No_Elaboration_Code_All,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-inline}@anchor{13c}
  @section Aspect No_Inline
  
  
  @geindex No_Inline
  
! This boolean aspect is equivalent to @ref{a4,,pragma No_Inline}.
  
! @node Aspect No_Tagged_Streams,Aspect No_Task_Parts,Aspect No_Inline,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-tagged-streams}@anchor{13d}
  @section Aspect No_Tagged_Streams
  
  
  @geindex No_Tagged_Streams
  
! This aspect is equivalent to @ref{a8,,pragma No_Tagged_Streams} with an
  argument specifying a root tagged type (thus this aspect can only be
  applied to such a type).
  
! @node Aspect No_Task_Parts,Aspect Object_Size,Aspect No_Tagged_Streams,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-no-task-parts}@anchor{13e}
! @section Aspect No_Task_Parts
! 
! 
! @geindex No_Task_Parts
! 
! Applies to a type. If True, requires that the type and any descendants
! do not have any task parts. The rules for this aspect are the same as
! for the language-defined No_Controlled_Parts aspect (see RM-H.4.1),
! replacing “controlled” with “task”.
! 
! If No_Task_Parts is True for a type T, then the compiler can optimize
! away certain tasking-related code that would otherwise be needed
! for T’Class, because descendants of T might contain tasks.
! 
! @node Aspect Object_Size,Aspect Obsolescent,Aspect No_Task_Parts,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-object-size}@anchor{13f}
  @section Aspect Object_Size
  
  
  @geindex Object_Size
  
! This aspect is equivalent to @ref{140,,attribute Object_Size}.
  
  @node Aspect Obsolescent,Aspect Part_Of,Aspect Object_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-obsolescent}@anchor{141}
  @section Aspect Obsolescent
  
  
  @geindex Obsolsecent
  
! This aspect is equivalent to @ref{ab,,pragma Obsolescent}. Note that the
  evaluation of this aspect happens at the point of occurrence, it is not
  delayed until the freeze point.
  
  @node Aspect Part_Of,Aspect Persistent_BSS,Aspect Obsolescent,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-part-of}@anchor{142}
  @section Aspect Part_Of
  
  
  @geindex Part_Of
  
! This aspect is equivalent to @ref{b2,,pragma Part_Of}.
  
  @node Aspect Persistent_BSS,Aspect Predicate,Aspect Part_Of,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{143}
  @section Aspect Persistent_BSS
  
  
  @geindex Persistent_BSS
  
! This boolean aspect is equivalent to @ref{b5,,pragma Persistent_BSS}.
  
  @node Aspect Predicate,Aspect Pure_Function,Aspect Persistent_BSS,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{144}
  @section Aspect Predicate
  
  
  @geindex Predicate
  
! This aspect is equivalent to @ref{bc,,pragma Predicate}. It is thus
  similar to the language defined aspects @code{Dynamic_Predicate}
  and @code{Static_Predicate} except that whether the resulting
  predicate is static or dynamic is controlled by the form of the
*************** expression. It is also separately contro
*** 9752,9803 ****
  @code{Assertion_Policy}.
  
  @node Aspect Pure_Function,Aspect Refined_Depends,Aspect Predicate,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{148}
  @section Aspect Pure_Function
  
  
  @geindex Pure_Function
  
! This boolean aspect is equivalent to @ref{ca,,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{149}
  @section Aspect Refined_Depends
  
  
  @geindex Refined_Depends
  
! This aspect is equivalent to @ref{ce,,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{14a}
  @section Aspect Refined_Global
  
  
  @geindex Refined_Global
  
! This aspect is equivalent to @ref{d0,,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{14b}
  @section Aspect Refined_Post
  
  
  @geindex Refined_Post
  
! This aspect is equivalent to @ref{d2,,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{14c}
  @section Aspect Refined_State
  
  
  @geindex Refined_State
  
! This aspect is equivalent to @ref{d4,,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{14d}
  @section Aspect Relaxed_Initialization
  
  
--- 9921,9972 ----
  @code{Assertion_Policy}.
  
  @node Aspect Pure_Function,Aspect Refined_Depends,Aspect Predicate,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{145}
  @section Aspect Pure_Function
  
  
  @geindex Pure_Function
  
! This boolean aspect is equivalent to @ref{c8,,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{146}
  @section Aspect Refined_Depends
  
  
  @geindex Refined_Depends
  
! This aspect is equivalent to @ref{cc,,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{147}
  @section Aspect Refined_Global
  
  
  @geindex Refined_Global
  
! This aspect is equivalent to @ref{ce,,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{148}
  @section Aspect Refined_Post
  
  
  @geindex Refined_Post
  
! This aspect is equivalent to @ref{d0,,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{149}
  @section Aspect Refined_State
  
  
  @geindex Refined_State
  
! This aspect is equivalent to @ref{d2,,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{14a}
  @section Aspect Relaxed_Initialization
  
  
*************** For the syntax and semantics of this asp
*** 9807,10002 ****
  Manual, section 6.10.
  
  @node Aspect Remote_Access_Type,Aspect Secondary_Stack_Size,Aspect Relaxed_Initialization,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{14e}
  @section Aspect Remote_Access_Type
  
  
  @geindex Remote_Access_Type
  
! This aspect is equivalent to @ref{d8,,pragma Remote_Access_Type}.
  
  @node Aspect Secondary_Stack_Size,Aspect Scalar_Storage_Order,Aspect Remote_Access_Type,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{14f}
  @section Aspect Secondary_Stack_Size
  
  
  @geindex Secondary_Stack_Size
  
! This aspect is equivalent to @ref{dd,,pragma Secondary_Stack_Size}.
  
  @node Aspect Scalar_Storage_Order,Aspect Shared,Aspect Secondary_Stack_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{150}
  @section Aspect Scalar_Storage_Order
  
  
  @geindex Scalar_Storage_Order
  
! This aspect is equivalent to a @ref{151,,attribute Scalar_Storage_Order}.
  
  @node Aspect Shared,Aspect Simple_Storage_Pool,Aspect Scalar_Storage_Order,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{152}
  @section Aspect Shared
  
  
  @geindex Shared
  
! This boolean aspect is equivalent to @ref{e0,,pragma Shared}
  and is thus a synonym for aspect @code{Atomic}.
  
  @node Aspect Simple_Storage_Pool,Aspect Simple_Storage_Pool_Type,Aspect Shared,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{153}
  @section Aspect Simple_Storage_Pool
  
  
  @geindex Simple_Storage_Pool
  
! This aspect is equivalent to @ref{e5,,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{154}
  @section Aspect Simple_Storage_Pool_Type
  
  
  @geindex Simple_Storage_Pool_Type
  
! This boolean aspect is equivalent to @ref{e3,,pragma Simple_Storage_Pool_Type}.
  
  @node Aspect SPARK_Mode,Aspect Suppress_Debug_Info,Aspect Simple_Storage_Pool_Type,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{155}
  @section Aspect SPARK_Mode
  
  
  @geindex SPARK_Mode
  
! This aspect is equivalent to @ref{eb,,pragma SPARK_Mode} and
  may be specified for either or both of the specification and body
  of a subprogram or package.
  
  @node Aspect Suppress_Debug_Info,Aspect Suppress_Initialization,Aspect SPARK_Mode,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{156}
  @section Aspect Suppress_Debug_Info
  
  
  @geindex Suppress_Debug_Info
  
! This boolean aspect is equivalent to @ref{f3,,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{157}
  @section Aspect Suppress_Initialization
  
  
  @geindex Suppress_Initialization
  
! This boolean aspect is equivalent to @ref{f7,,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{158}
  @section Aspect Test_Case
  
  
  @geindex Test_Case
  
! This aspect is equivalent to @ref{fa,,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{159}
  @section Aspect Thread_Local_Storage
  
  
  @geindex Thread_Local_Storage
  
! This boolean aspect is equivalent to @ref{fc,,pragma Thread_Local_Storage}.
  
! @node Aspect Universal_Aliasing,Aspect Universal_Data,Aspect Thread_Local_Storage,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{15a}
  @section Aspect Universal_Aliasing
  
  
  @geindex Universal_Aliasing
  
! This boolean aspect is equivalent to @ref{106,,pragma Universal_Aliasing}.
! 
! @node Aspect Universal_Data,Aspect Unmodified,Aspect Universal_Aliasing,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-universal-data}@anchor{15b}
! @section Aspect Universal_Data
! 
! 
! @geindex Universal_Data
! 
! This aspect is equivalent to @ref{108,,pragma Universal_Data}.
  
! @node Aspect Unmodified,Aspect Unreferenced,Aspect Universal_Data,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{15c}
  @section Aspect Unmodified
  
  
  @geindex Unmodified
  
! This boolean aspect is equivalent to @ref{10b,,pragma Unmodified}.
  
  @node Aspect Unreferenced,Aspect Unreferenced_Objects,Aspect Unmodified,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{15d}
  @section Aspect Unreferenced
  
  
  @geindex Unreferenced
  
! This boolean aspect is equivalent to @ref{10c,,pragma Unreferenced}.
  
! When using the @code{-gnat2020} switch, this aspect is also supported on formal
  parameters, which is in particular the only form possible for expression
  functions.
  
  @node Aspect Unreferenced_Objects,Aspect Value_Size,Aspect Unreferenced,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{15e}
  @section Aspect Unreferenced_Objects
  
  
  @geindex Unreferenced_Objects
  
! This boolean aspect is equivalent to @ref{10e,,pragma Unreferenced_Objects}.
  
  @node Aspect Value_Size,Aspect Volatile_Full_Access,Aspect Unreferenced_Objects,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{15f}
  @section Aspect Value_Size
  
  
  @geindex Value_Size
  
! This aspect is equivalent to @ref{160,,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{161}
  @section Aspect Volatile_Full_Access
  
  
  @geindex Volatile_Full_Access
  
! This boolean aspect is equivalent to @ref{119,,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{162}
  @section Aspect Volatile_Function
  
  
  @geindex Volatile_Function
  
! This boolean aspect is equivalent to @ref{11b,,pragma Volatile_Function}.
  
  @node Aspect Warnings,,Aspect Volatile_Function,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{163}
  @section Aspect Warnings
  
  
  @geindex Warnings
  
! This aspect is equivalent to the two argument form of @ref{11d,,pragma Warnings},
  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{164}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{165}
  @chapter Implementation Defined Attributes
  
  
--- 9976,10162 ----
  Manual, section 6.10.
  
  @node Aspect Remote_Access_Type,Aspect Secondary_Stack_Size,Aspect Relaxed_Initialization,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{14b}
  @section Aspect Remote_Access_Type
  
  
  @geindex Remote_Access_Type
  
! This aspect is equivalent to @ref{d5,,pragma Remote_Access_Type}.
  
  @node Aspect Secondary_Stack_Size,Aspect Scalar_Storage_Order,Aspect Remote_Access_Type,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{14c}
  @section Aspect Secondary_Stack_Size
  
  
  @geindex Secondary_Stack_Size
  
! This aspect is equivalent to @ref{db,,pragma Secondary_Stack_Size}.
  
  @node Aspect Scalar_Storage_Order,Aspect Shared,Aspect Secondary_Stack_Size,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{14d}
  @section Aspect Scalar_Storage_Order
  
  
  @geindex Scalar_Storage_Order
  
! This aspect is equivalent to a @ref{14e,,attribute Scalar_Storage_Order}.
  
  @node Aspect Shared,Aspect Simple_Storage_Pool,Aspect Scalar_Storage_Order,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{14f}
  @section Aspect Shared
  
  
  @geindex Shared
  
! This boolean aspect is equivalent to @ref{de,,pragma Shared}
  and is thus a synonym for aspect @code{Atomic}.
  
  @node Aspect Simple_Storage_Pool,Aspect Simple_Storage_Pool_Type,Aspect Shared,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{150}
  @section Aspect Simple_Storage_Pool
  
  
  @geindex Simple_Storage_Pool
  
! This aspect is equivalent to @ref{e3,,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{151}
  @section Aspect Simple_Storage_Pool_Type
  
  
  @geindex Simple_Storage_Pool_Type
  
! This boolean aspect is equivalent to @ref{e2,,pragma Simple_Storage_Pool_Type}.
  
  @node Aspect SPARK_Mode,Aspect Suppress_Debug_Info,Aspect Simple_Storage_Pool_Type,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{152}
  @section Aspect SPARK_Mode
  
  
  @geindex SPARK_Mode
  
! This aspect is equivalent to @ref{ea,,pragma SPARK_Mode} and
  may be specified for either or both of the specification and body
  of a subprogram or package.
  
  @node Aspect Suppress_Debug_Info,Aspect Suppress_Initialization,Aspect SPARK_Mode,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{153}
  @section Aspect Suppress_Debug_Info
  
  
  @geindex Suppress_Debug_Info
  
! This boolean aspect is equivalent to @ref{f2,,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{154}
  @section Aspect Suppress_Initialization
  
  
  @geindex Suppress_Initialization
  
! This boolean aspect is equivalent to @ref{f5,,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{155}
  @section Aspect Test_Case
  
  
  @geindex Test_Case
  
! This aspect is equivalent to @ref{f9,,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{156}
  @section Aspect Thread_Local_Storage
  
  
  @geindex Thread_Local_Storage
  
! This boolean aspect is equivalent to @ref{fb,,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{157}
  @section Aspect Universal_Aliasing
  
  
  @geindex Universal_Aliasing
  
! This boolean aspect is equivalent to @ref{105,,pragma Universal_Aliasing}.
  
! @node Aspect Unmodified,Aspect Unreferenced,Aspect Universal_Aliasing,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{158}
  @section Aspect Unmodified
  
  
  @geindex Unmodified
  
! This boolean aspect is equivalent to @ref{107,,pragma Unmodified}.
  
  @node Aspect Unreferenced,Aspect Unreferenced_Objects,Aspect Unmodified,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{159}
  @section Aspect Unreferenced
  
  
  @geindex Unreferenced
  
! This boolean aspect is equivalent to @ref{109,,pragma Unreferenced}.
  
! When using the @code{-gnat2022} switch, this aspect is also supported on formal
  parameters, which is in particular the only form possible for expression
  functions.
  
  @node Aspect Unreferenced_Objects,Aspect Value_Size,Aspect Unreferenced,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{15a}
  @section Aspect Unreferenced_Objects
  
  
  @geindex Unreferenced_Objects
  
! This boolean aspect is equivalent to @ref{10b,,pragma Unreferenced_Objects}.
  
  @node Aspect Value_Size,Aspect Volatile_Full_Access,Aspect Unreferenced_Objects,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{15b}
  @section Aspect Value_Size
  
  
  @geindex Value_Size
  
! This aspect is equivalent to @ref{15c,,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{15d}
  @section Aspect Volatile_Full_Access
  
  
  @geindex Volatile_Full_Access
  
! This boolean aspect is equivalent to @ref{115,,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{15e}
  @section Aspect Volatile_Function
  
  
  @geindex Volatile_Function
  
! This boolean aspect is equivalent to @ref{117,,pragma Volatile_Function}.
  
  @node Aspect Warnings,,Aspect Volatile_Function,Implementation Defined Aspects
! @anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{15f}
  @section Aspect Warnings
  
  
  @geindex Warnings
  
! This aspect is equivalent to the two argument form of @ref{119,,pragma Warnings},
  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{160}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{161}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8}
  @chapter Implementation Defined Attributes
  
  
*************** consideration, you should minimize the u
*** 10093,10098 ****
--- 10253,10259 ----
  * Attribute Universal_Literal_String:: 
  * Attribute Unrestricted_Access:: 
  * Attribute Update:: 
+ * Attribute Valid_Image:: 
  * Attribute Valid_Scalars:: 
  * Attribute VADS_Size:: 
  * Attribute Value_Size:: 
*************** consideration, you should minimize the u
*** 10102,10108 ****
  @end menu
  
  @node Attribute Abort_Signal,Attribute Address_Size,,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{166}
  @section Attribute Abort_Signal
  
  
--- 10263,10269 ----
  @end menu
  
  @node Attribute Abort_Signal,Attribute Address_Size,,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{162}
  @section Attribute Abort_Signal
  
  
*************** completely outside the normal semantics
*** 10116,10122 ****
  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{167}
  @section Attribute Address_Size
  
  
--- 10277,10283 ----
  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{163}
  @section Attribute Address_Size
  
  
*************** intercept the abort exception).
*** 10126,10138 ****
  
  @code{Standard'Address_Size} (@code{Standard} is the only allowed
  prefix) is a static constant giving the number of bits in an
! @code{Address}. It is the same value as System.Address'Size,
  but has the advantage of being static, while a direct
! 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{168}
  @section Attribute Asm_Input
  
  
--- 10287,10299 ----
  
  @code{Standard'Address_Size} (@code{Standard} is the only allowed
  prefix) is a static constant giving the number of bits in an
! @code{Address}. It is the same value as System.Address’Size,
  but has the advantage of being static, while a direct
! 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{164}
  @section Attribute Asm_Input
  
  
*************** to be a static expression, and is the co
*** 10146,10155 ****
  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{169,,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{16a}
  @section Attribute Asm_Output
  
  
--- 10307,10316 ----
  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{165,,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{166}
  @section Attribute Asm_Output
  
  
*************** result.  The possible values for constra
*** 10165,10174 ****
  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{169,,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{16b}
  @section Attribute Atomic_Always_Lock_Free
  
  
--- 10326,10335 ----
  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{165,,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{167}
  @section Attribute Atomic_Always_Lock_Free
  
  
*************** and False otherwise.  The result indicat
*** 10180,10186 ****
  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{16c}
  @section Attribute Bit
  
  
--- 10341,10347 ----
  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{168}
  @section Attribute Bit
  
  
*************** This attribute is designed to be compati
*** 10211,10217 ****
  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{16d}
  @section Attribute Bit_Position
  
  
--- 10372,10378 ----
  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{169}
  @section Attribute Bit_Position
  
  
*************** type @emph{universal_integer}.  The valu
*** 10226,10232 ****
  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{16e}
  @section Attribute Code_Address
  
  
--- 10387,10393 ----
  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{16a}
  @section Attribute Code_Address
  
  
*************** the same value as is returned by the cor
*** 10269,10275 ****
  attribute.
  
  @node Attribute Compiler_Version,Attribute Constrained,Attribute Code_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{16f}
  @section Attribute Compiler_Version
  
  
--- 10430,10436 ----
  attribute.
  
  @node Attribute Compiler_Version,Attribute Constrained,Attribute Code_Address,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{16b}
  @section Attribute Compiler_Version
  
  
*************** prefix) yields a static string identifyi
*** 10280,10286 ****
  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{170}
  @section Attribute Constrained
  
  
--- 10441,10447 ----
  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{16c}
  @section Attribute Constrained
  
  
*************** record type without discriminants is alw
*** 10295,10301 ****
  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{171}
  @section Attribute Default_Bit_Order
  
  
--- 10456,10462 ----
  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{16d}
  @section Attribute Default_Bit_Order
  
  
*************** compatible with older Ada compilers, inc
*** 10306,10318 ****
  @geindex Default_Bit_Order
  
  @code{Standard'Default_Bit_Order} (@code{Standard} is the only
! permissible prefix), provides the value @code{System.Default_Bit_Order}
  as a @code{Pos} value (0 for @code{High_Order_First}, 1 for
  @code{Low_Order_First}).  This is used to construct the definition of
  @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{172}
  @section Attribute Default_Scalar_Storage_Order
  
  
--- 10467,10479 ----
  @geindex Default_Bit_Order
  
  @code{Standard'Default_Bit_Order} (@code{Standard} is the only
! allowed prefix), provides the value @code{System.Default_Bit_Order}
  as a @code{Pos} value (0 for @code{High_Order_First}, 1 for
  @code{Low_Order_First}).  This is used to construct the definition of
  @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{16e}
  @section Attribute Default_Scalar_Storage_Order
  
  
*************** as a @code{Pos} value (0 for @code{High_
*** 10323,10335 ****
  @geindex Default_Scalar_Storage_Order
  
  @code{Standard'Default_Scalar_Storage_Order} (@code{Standard} is the only
! permissible prefix), provides the current value of the default scalar storage
  order (as specified using pragma @code{Default_Scalar_Storage_Order}, or
  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{173}
  @section Attribute Deref
  
  
--- 10484,10496 ----
  @geindex Default_Scalar_Storage_Order
  
  @code{Standard'Default_Scalar_Storage_Order} (@code{Standard} is the only
! allowed prefix), provides the current value of the default scalar storage
  order (as specified using pragma @code{Default_Scalar_Storage_Order}, or
  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{16f}
  @section Attribute Deref
  
  
*************** a named access-to-@cite{typ} type, excep
*** 10342,10348 ****
  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{174}
  @section Attribute Descriptor_Size
  
  
--- 10503,10509 ----
  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{170}
  @section Attribute Descriptor_Size
  
  
*************** since @code{Positive} has an alignment o
*** 10371,10377 ****
  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{175}
  @section Attribute Elaborated
  
  
--- 10532,10538 ----
  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{171}
  @section Attribute Elaborated
  
  
*************** units has been completed.  An exception
*** 10386,10392 ****
  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{176}
  @section Attribute Elab_Body
  
  
--- 10547,10553 ----
  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{172}
  @section Attribute Elab_Body
  
  
*************** e.g., if it is necessary to do selective
*** 10402,10408 ****
  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{177}
  @section Attribute Elab_Spec
  
  
--- 10563,10569 ----
  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{173}
  @section Attribute Elab_Spec
  
  
*************** Ada code, e.g., if it is necessary to do
*** 10418,10424 ****
  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{178}
  @section Attribute Elab_Subp_Body
  
  
--- 10579,10585 ----
  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{174}
  @section Attribute Elab_Subp_Body
  
  
*************** elaboration procedure by the binder in C
*** 10432,10438 ****
  otherwise.
  
  @node Attribute Emax,Attribute Enabled,Attribute Elab_Subp_Body,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{179}
  @section Attribute Emax
  
  
--- 10593,10599 ----
  otherwise.
  
  @node Attribute Emax,Attribute Enabled,Attribute Elab_Subp_Body,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{175}
  @section Attribute Emax
  
  
*************** the Ada 83 reference manual for an exact
*** 10445,10451 ****
  this attribute.
  
  @node Attribute Enabled,Attribute Enum_Rep,Attribute Emax,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{17a}
  @section Attribute Enabled
  
  
--- 10606,10612 ----
  this attribute.
  
  @node Attribute Enabled,Attribute Enum_Rep,Attribute Emax,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{176}
  @section Attribute Enabled
  
  
*************** a @code{pragma Suppress} or @code{pragma
*** 10469,10475 ****
  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{17b}
  @section Attribute Enum_Rep
  
  
--- 10630,10636 ----
  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{177}
  @section Attribute Enum_Rep
  
  
*************** integer calculation is done at run time,
*** 10509,10515 ****
  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{17c}
  @section Attribute Enum_Val
  
  
--- 10670,10676 ----
  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{178}
  @section Attribute Enum_Val
  
  
*************** absence of an enumeration representation
*** 10535,10541 ****
  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{17d}
  @section Attribute Epsilon
  
  
--- 10696,10702 ----
  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{179}
  @section Attribute Epsilon
  
  
*************** the Ada 83 reference manual for an exact
*** 10548,10554 ****
  this attribute.
  
  @node Attribute Fast_Math,Attribute Finalization_Size,Attribute Epsilon,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{17e}
  @section Attribute Fast_Math
  
  
--- 10709,10715 ----
  this attribute.
  
  @node Attribute Fast_Math,Attribute Finalization_Size,Attribute Epsilon,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{17a}
  @section Attribute Fast_Math
  
  
*************** prefix) yields a static Boolean value th
*** 10559,10565 ****
  @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{17f}
  @section Attribute Finalization_Size
  
  
--- 10720,10726 ----
  @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{17b}
  @section Attribute Finalization_Size
  
  
*************** class-wide type whose tag denotes a type
*** 10577,10583 ****
  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{180}
  @section Attribute Fixed_Value
  
  
--- 10738,10744 ----
  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{17c}
  @section Attribute Fixed_Value
  
  
*************** This attribute is primarily intended for
*** 10604,10610 ****
  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{181}
  @section Attribute From_Any
  
  
--- 10765,10771 ----
  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{17d}
  @section Attribute From_Any
  
  
*************** This internal attribute is used for the
*** 10614,10620 ****
  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{182}
  @section Attribute Has_Access_Values
  
  
--- 10775,10781 ----
  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{17e}
  @section Attribute Has_Access_Values
  
  
*************** definitions.  If the attribute is applie
*** 10632,10638 ****
  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{183}
  @section Attribute Has_Discriminants
  
  
--- 10793,10799 ----
  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{17f}
  @section Attribute Has_Discriminants
  
  
*************** definitions.  If the attribute is applie
*** 10648,10654 ****
  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{184}
  @section Attribute Has_Tagged_Values
  
  
--- 10809,10815 ----
  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{180}
  @section Attribute Has_Tagged_Values
  
  
*************** definitions. If the attribute is applied
*** 10665,10671 ****
  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{185}
  @section Attribute Img
  
  
--- 10826,10832 ----
  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{181}
  @section Attribute Img
  
  
*************** that returns the appropriate string when
*** 10695,10701 ****
  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{186}
  @section Attribute Initialized
  
  
--- 10856,10862 ----
  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{182}
  @section Attribute Initialized
  
  
*************** For the syntax and semantics of this att
*** 10705,10711 ****
  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{187}
  @section Attribute Integer_Value
  
  
--- 10866,10872 ----
  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{183}
  @section Attribute Integer_Value
  
  
*************** This attribute is primarily intended for
*** 10733,10745 ****
  standard input-output functions for fixed-point values.
  
  @node Attribute Invalid_Value,Attribute Iterable,Attribute Integer_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{188}
  @section Attribute Invalid_Value
  
  
  @geindex Invalid_Value
  
! For every scalar type S, S'Invalid_Value returns an undefined value of the
  type. If possible this value is an invalid representation for the type. The
  value returned is identical to the value used to initialize an otherwise
  uninitialized value of the type if pragma Initialize_Scalars is used,
--- 10894,10906 ----
  standard input-output functions for fixed-point values.
  
  @node Attribute Invalid_Value,Attribute Iterable,Attribute Integer_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{184}
  @section Attribute Invalid_Value
  
  
  @geindex Invalid_Value
  
! For every scalar type S, S’Invalid_Value returns an undefined value of the
  type. If possible this value is an invalid representation for the type. The
  value returned is identical to the value used to initialize an otherwise
  uninitialized value of the type if pragma Initialize_Scalars is used,
*************** including the ability to modify the valu
*** 10747,10753 ****
  relevant environment variables at run time.
  
  @node Attribute Iterable,Attribute Large,Attribute Invalid_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-iterable}@anchor{189}
  @section Attribute Iterable
  
  
--- 10908,10914 ----
  relevant environment variables at run time.
  
  @node Attribute Iterable,Attribute Large,Attribute Invalid_Value,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-iterable}@anchor{185}
  @section Attribute Iterable
  
  
*************** relevant environment variables at run ti
*** 10756,10762 ****
  Equivalent to Aspect Iterable.
  
  @node Attribute Large,Attribute Library_Level,Attribute Iterable,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{18a}
  @section Attribute Large
  
  
--- 10917,10923 ----
  Equivalent to Aspect Iterable.
  
  @node Attribute Large,Attribute Library_Level,Attribute Iterable,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{186}
  @section Attribute Large
  
  
*************** the Ada 83 reference manual for an exact
*** 10769,10775 ****
  this attribute.
  
  @node Attribute Library_Level,Attribute Lock_Free,Attribute Large,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{18b}
  @section Attribute Library_Level
  
  
--- 10930,10936 ----
  this attribute.
  
  @node Attribute Library_Level,Attribute Lock_Free,Attribute Large,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{187}
  @section Attribute Library_Level
  
  
*************** end Gen;
*** 10795,10801 ****
  @end example
  
  @node Attribute Lock_Free,Attribute Loop_Entry,Attribute Library_Level,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-lock-free}@anchor{18c}
  @section Attribute Lock_Free
  
  
--- 10956,10962 ----
  @end example
  
  @node Attribute Lock_Free,Attribute Loop_Entry,Attribute Library_Level,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-lock-free}@anchor{188}
  @section Attribute Lock_Free
  
  
*************** end Gen;
*** 10805,10811 ****
  pragma @code{Lock_Free} applies to P.
  
  @node Attribute Loop_Entry,Attribute Machine_Size,Attribute Lock_Free,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{18d}
  @section Attribute Loop_Entry
  
  
--- 10966,10972 ----
  pragma @code{Lock_Free} applies to P.
  
  @node Attribute Loop_Entry,Attribute Machine_Size,Attribute Lock_Free,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{189}
  @section Attribute Loop_Entry
  
  
*************** entry. This copy is not performed if the
*** 10835,10841 ****
  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{18e}
  @section Attribute Machine_Size
  
  
--- 10996,11002 ----
  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{18a}
  @section Attribute Machine_Size
  
  
*************** This attribute is identical to the @code
*** 10845,10851 ****
  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{18f}
  @section Attribute Mantissa
  
  
--- 11006,11012 ----
  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{18b}
  @section Attribute Mantissa
  
  
*************** the Ada 83 reference manual for an exact
*** 10858,10864 ****
  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{190}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{191}
  @section Attribute Maximum_Alignment
  
  
--- 11019,11025 ----
  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{18c}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{18d}
  @section Attribute Maximum_Alignment
  
  
*************** this attribute.
*** 10868,10891 ****
  @geindex Maximum_Alignment
  
  @code{Standard'Maximum_Alignment} (@code{Standard} is the only
! permissible prefix) provides the maximum useful alignment value for the
  target.  This is a static value that can be used to specify the alignment
  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{192}
  @section Attribute Max_Integer_Size
  
  
  @geindex Max_Integer_Size
  
! @code{Standard'Max_Integer_Size} (@code{Standard} is the only permissible
  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{193}
  @section Attribute Mechanism_Code
  
  
--- 11029,11052 ----
  @geindex Maximum_Alignment
  
  @code{Standard'Maximum_Alignment} (@code{Standard} is the only
! allowed prefix) provides the maximum useful alignment value for the
  target.  This is a static value that can be used to specify the alignment
  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{18e}
  @section Attribute Max_Integer_Size
  
  
  @geindex Max_Integer_Size
  
! @code{Standard'Max_Integer_Size} (@code{Standard} is the only allowed
  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{18f}
  @section Attribute Mechanism_Code
  
  
*************** by reference
*** 10916,10922 ****
  @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{194}
  @section Attribute Null_Parameter
  
  
--- 11077,11083 ----
  @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{190}
  @section Attribute Null_Parameter
  
  
*************** There is no way of indicating this witho
*** 10941,10947 ****
  attribute.
  
  @node Attribute Object_Size,Attribute Old,Attribute Null_Parameter,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{143}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{195}
  @section Attribute Object_Size
  
  
--- 11102,11108 ----
  attribute.
  
  @node Attribute Object_Size,Attribute Old,Attribute Null_Parameter,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{140}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{191}
  @section Attribute Object_Size
  
  
*************** Similar additional checks are performed
*** 11011,11017 ****
  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{196}
  @section Attribute Old
  
  
--- 11172,11178 ----
  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{192}
  @section Attribute Old
  
  
*************** definition are allowed under control of
*** 11026,11032 ****
  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{197}
  @section Attribute Passed_By_Reference
  
  
--- 11187,11193 ----
  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{193}
  @section Attribute Passed_By_Reference
  
  
*************** passed by copy in calls.  For scalar typ
*** 11042,11048 ****
  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{198}
  @section Attribute Pool_Address
  
  
--- 11203,11209 ----
  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{194}
  @section Attribute Pool_Address
  
  
*************** bounds are allocated just before the fir
*** 11056,11062 ****
  whereas @code{X'Address} returns the address of the first
  component.
  
! Here, we are interpreting 'storage pool' broadly to mean
  @code{wherever the object is allocated}, which could be a
  user-defined storage pool,
  the global heap, on the stack, or in a static memory area.
--- 11217,11223 ----
  whereas @code{X'Address} returns the address of the first
  component.
  
! Here, we are interpreting ‘storage pool’ broadly to mean
  @code{wherever the object is allocated}, which could be a
  user-defined storage pool,
  the global heap, on the stack, or in a static memory area.
*************** For an object created by @code{new}, @co
*** 11064,11070 ****
  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{199}
  @section Attribute Range_Length
  
  
--- 11225,11231 ----
  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{195}
  @section Attribute Range_Length
  
  
*************** applied to the index subtype of a one di
*** 11077,11083 ****
  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{19a}
  @section Attribute Restriction_Set
  
  
--- 11238,11244 ----
  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{196}
  @section Attribute Restriction_Set
  
  
*************** same result as @code{Length} applied to
*** 11088,11094 ****
  This attribute allows compile time testing of restrictions that
  are currently in effect. It is primarily intended for specializing
  code in the run-time based on restrictions that are active (e.g.
! don't need to save fpt registers if restriction No_Floating_Point
  is known to be in effect), but can be used anywhere.
  
  There are two forms:
--- 11249,11255 ----
  This attribute allows compile time testing of restrictions that
  are currently in effect. It is primarily intended for specializing
  code in the run-time based on restrictions that are active (e.g.
! don’t need to save fpt registers if restriction No_Floating_Point
  is known to be in effect), but can be used anywhere.
  
  There are two forms:
*************** Restrictions pragma, they are not analyz
*** 11147,11153 ****
  so they do not have a type.
  
  @node Attribute Result,Attribute Safe_Emax,Attribute Restriction_Set,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{19b}
  @section Attribute Result
  
  
--- 11308,11314 ----
  so they do not have a type.
  
  @node Attribute Result,Attribute Safe_Emax,Attribute Restriction_Set,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{197}
  @section Attribute Result
  
  
*************** For a further discussion of the use of t
*** 11160,11166 ****
  see the description of pragma Postcondition.
  
  @node Attribute Safe_Emax,Attribute Safe_Large,Attribute Result,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{19c}
  @section Attribute Safe_Emax
  
  
--- 11321,11327 ----
  see the description of pragma Postcondition.
  
  @node Attribute Safe_Emax,Attribute Safe_Large,Attribute Result,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{198}
  @section Attribute Safe_Emax
  
  
*************** the Ada 83 reference manual for an exact
*** 11173,11179 ****
  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{19d}
  @section Attribute Safe_Large
  
  
--- 11334,11340 ----
  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{199}
  @section Attribute Safe_Large
  
  
*************** the Ada 83 reference manual for an exact
*** 11186,11192 ****
  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{19e}
  @section Attribute Safe_Small
  
  
--- 11347,11353 ----
  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{19a}
  @section Attribute Safe_Small
  
  
*************** the Ada 83 reference manual for an exact
*** 11199,11205 ****
  this attribute.
  
  @node Attribute Scalar_Storage_Order,Attribute Simple_Storage_Pool,Attribute Safe_Small,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes id4}@anchor{19f}@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{151}
  @section Attribute Scalar_Storage_Order
  
  
--- 11360,11366 ----
  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{14e}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{19b}
  @section Attribute Scalar_Storage_Order
  
  
*************** defined by Ada RM 13.5.3(4). The default
*** 11253,11259 ****
  For a record type @code{T}, if @code{T'Scalar_Storage_Order} is
  specified explicitly, it shall be equal to @code{T'Bit_Order}. Note:
  this means that if a @code{Scalar_Storage_Order} attribute definition
! clause is not confirming, then the type's @code{Bit_Order} shall be
  specified explicitly and set to the same value.
  
  Derived types inherit an explicitly set scalar storage order from their parent
--- 11414,11420 ----
  For a record type @code{T}, if @code{T'Scalar_Storage_Order} is
  specified explicitly, it shall be equal to @code{T'Bit_Order}. Note:
  this means that if a @code{Scalar_Storage_Order} attribute definition
! clause is not confirming, then the type’s @code{Bit_Order} shall be
  specified explicitly and set to the same value.
  
  Derived types inherit an explicitly set scalar storage order from their parent
*************** If a component of @code{T} is itself of
*** 11314,11319 ****
--- 11475,11520 ----
  attribute definition clause must be provided for the component type as well
  if desired.
  
+ Representation changes that explicitly or implicitly toggle the scalar storage
+ order are not supported and may result in erroneous execution of the program,
+ except when performed by means of an instance of @code{Ada.Unchecked_Conversion}.
+ 
+ In particular, overlays are not supported and a warning is given for them:
+ 
+ @example
+ type Rec_LE is record
+    I : Integer;
+ end record;
+ 
+ for Rec_LE use record
+    I at 0 range 0 .. 31;
+ end record;
+ 
+ for Rec_LE'Bit_Order use System.Low_Order_First;
+ for Rec_LE'Scalar_Storage_Order use System.Low_Order_First;
+ 
+ type Rec_BE is record
+    I : Integer;
+ end record;
+ 
+ for Rec_BE use record
+    I at 0 range 0 .. 31;
+ end record;
+ 
+ for Rec_BE'Bit_Order use System.High_Order_First;
+ for Rec_BE'Scalar_Storage_Order use System.High_Order_First;
+ 
+ R_LE : Rec_LE;
+ 
+ R_BE : Rec_BE;
+ for R_BE'Address use R_LE'Address;
+ @end example
+ 
+ @code{warning: overlay changes scalar storage order [enabled by default]}
+ 
+ In most cases, such representation changes ought to be replaced by an
+ instantiation of a function or procedure provided by @code{GNAT.Byte_Swapping}.
+ 
  Note that the scalar storage order only affects the in-memory data
  representation. It has no effect on the representation used by stream
  attributes.
*************** Note that debuggers may be unable to dis
*** 11322,11328 ****
  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{e5}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1a0}
  @section Attribute Simple_Storage_Pool
  
  
--- 11523,11529 ----
  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{e3}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{19c}
  @section Attribute Simple_Storage_Pool
  
  
*************** for Acc'Simple_Storage_Pool use My_Pool;
*** 11347,11353 ****
  
  The name given in an attribute_definition_clause for the
  @code{Simple_Storage_Pool} attribute shall denote a variable of
! a 'simple storage pool type' (see pragma @cite{Simple_Storage_Pool_Type}).
  
  The use of this attribute is only allowed for a prefix denoting a type
  for which it has been specified. The type of the attribute is the type
--- 11548,11554 ----
  
  The name given in an attribute_definition_clause for the
  @code{Simple_Storage_Pool} attribute shall denote a variable of
! a ‘simple storage pool type’ (see pragma @cite{Simple_Storage_Pool_Type}).
  
  The use of this attribute is only allowed for a prefix denoting a type
  for which it has been specified. The type of the attribute is the type
*************** as defined in section 13.11.2 of the Ada
*** 11385,11391 ****
  term @emph{simple storage pool} is substituted for @emph{storage pool}.
  
  @node Attribute Small,Attribute Small_Denominator,Attribute Simple_Storage_Pool,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1a1}
  @section Attribute Small
  
  
--- 11586,11592 ----
  term @emph{simple storage pool} is substituted for @emph{storage pool}.
  
  @node Attribute Small,Attribute Small_Denominator,Attribute Simple_Storage_Pool,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{19d}
  @section Attribute Small
  
  
*************** the Ada 83 reference manual for an exact
*** 11401,11407 ****
  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{1a2}
  @section Attribute Small_Denominator
  
  
--- 11602,11608 ----
  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{19e}
  @section Attribute Small_Denominator
  
  
*************** denominator in the representation of @co
*** 11414,11420 ****
  with coprime factors (i.e. as an irreducible fraction).
  
  @node Attribute Small_Numerator,Attribute Storage_Unit,Attribute Small_Denominator,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-small-numerator}@anchor{1a3}
  @section Attribute Small_Numerator
  
  
--- 11615,11621 ----
  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{19f}
  @section Attribute Small_Numerator
  
  
*************** numerator in the representation of @code
*** 11427,11443 ****
  with coprime factors (i.e. as an irreducible fraction).
  
  @node Attribute Storage_Unit,Attribute Stub_Type,Attribute Small_Numerator,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1a4}
  @section Attribute Storage_Unit
  
  
  @geindex Storage_Unit
  
! @code{Standard'Storage_Unit} (@code{Standard} is the only permissible
  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{1a5}
  @section Attribute Stub_Type
  
  
--- 11628,11644 ----
  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{1a0}
  @section Attribute Storage_Unit
  
  
  @geindex Storage_Unit
  
! @code{Standard'Storage_Unit} (@code{Standard} is the only allowed
  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{1a1}
  @section Attribute Stub_Type
  
  
*************** prefix) provides the same value as @code
*** 11446,11452 ****
  The GNAT implementation of remote access-to-classwide types is
  organized as described in AARM section E.4 (20.t): a value of an RACW type
  (designating a remote object) is represented as a normal access
! value, pointing to a "stub" object which in turn contains the
  necessary information to contact the designated remote object. A
  call on any dispatching operation of such a stub object does the
  remote call, if necessary, using the information in the stub object
--- 11647,11653 ----
  The GNAT implementation of remote access-to-classwide types is
  organized as described in AARM section E.4 (20.t): a value of an RACW type
  (designating a remote object) is represented as a normal access
! value, pointing to a “stub” object which in turn contains the
  necessary information to contact the designated remote object. A
  call on any dispatching operation of such a stub object does the
  remote call, if necessary, using the information in the stub object
*************** unit @code{System.Partition_Interface}.
*** 11461,11467 ****
  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{1a6}
  @section Attribute System_Allocator_Alignment
  
  
--- 11662,11668 ----
  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{1a2}
  @section Attribute System_Allocator_Alignment
  
  
*************** an implicit dependency on this unit.
*** 11471,11504 ****
  @geindex System_Allocator_Alignment
  
  @code{Standard'System_Allocator_Alignment} (@code{Standard} is the only
! permissible prefix) provides the observable guaranted to be honored by
  the system allocator (malloc). This is a static value that can be used
  in user storage pools based on malloc either to reject allocation
  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{1a7}
  @section Attribute Target_Name
  
  
  @geindex Target_Name
  
! @code{Standard'Target_Name} (@code{Standard} is the only permissible
  prefix) provides a static string value that identifies the target
  for the current compilation. For GCC implementations, this is the
  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{1a8}
  @section Attribute To_Address
  
  
  @geindex To_Address
  
  The @code{System'To_Address}
! (@code{System} is the only permissible prefix)
  denotes a function identical to
  @code{System.Storage_Elements.To_Address} except that
  it is a static attribute.  This means that if its argument is
--- 11672,11705 ----
  @geindex System_Allocator_Alignment
  
  @code{Standard'System_Allocator_Alignment} (@code{Standard} is the only
! allowed prefix) provides the observable guaranted to be honored by
  the system allocator (malloc). This is a static value that can be used
  in user storage pools based on malloc either to reject allocation
  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{1a3}
  @section Attribute Target_Name
  
  
  @geindex Target_Name
  
! @code{Standard'Target_Name} (@code{Standard} is the only allowed
  prefix) provides a static string value that identifies the target
  for the current compilation. For GCC implementations, this is the
  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{1a4}
  @section Attribute To_Address
  
  
  @geindex To_Address
  
  The @code{System'To_Address}
! (@code{System} is the only allowed prefix)
  denotes a function identical to
  @code{System.Storage_Elements.To_Address} except that
  it is a static attribute.  This means that if its argument is
*************** modular manner (e.g., -1 means the same
*** 11514,11520 ****
  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{1a9}
  @section Attribute To_Any
  
  
--- 11715,11721 ----
  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{1a5}
  @section Attribute To_Any
  
  
*************** This internal attribute is used for the
*** 11524,11530 ****
  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{1aa}
  @section Attribute Type_Class
  
  
--- 11725,11731 ----
  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{1a6}
  @section Attribute Type_Class
  
  
*************** applies to all concurrent types.  This a
*** 11554,11560 ****
  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{1ab}
  @section Attribute Type_Key
  
  
--- 11755,11761 ----
  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{1a7}
  @section Attribute Type_Key
  
  
*************** about the type or subtype. This provides
*** 11566,11572 ****
  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{1ac}
  @section Attribute TypeCode
  
  
--- 11767,11773 ----
  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{1a8}
  @section Attribute TypeCode
  
  
*************** This internal attribute is used for the
*** 11576,11582 ****
  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{1ad}
  @section Attribute Unconstrained_Array
  
  
--- 11777,11783 ----
  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{1a9}
  @section Attribute Unconstrained_Array
  
  
*************** still static, and yields the result of a
*** 11590,11596 ****
  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{1ae}
  @section Attribute Universal_Literal_String
  
  
--- 11791,11797 ----
  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{1aa}
  @section Attribute Universal_Literal_String
  
  
*************** end;
*** 11618,11624 ****
  @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{1af}
  @section Attribute Unrestricted_Access
  
  
--- 11819,11825 ----
  @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{1ab}
  @section Attribute Unrestricted_Access
  
  
*************** For instance, if a function uses @code{U
*** 11682,11690 ****
  an access-to-unconstrained-array and returns that value to the caller,
  the result will involve dangling pointers. In addition, it is only
  valid to create pointers to unconstrained arrays using this attribute
! if the pointer has the normal default 'fat' representation where a
  pointer has two components, one points to the array and one points to
! the bounds. If a size clause is used to force 'thin' representation
  for a pointer to unconstrained where there is only space for a single
  pointer, then the resulting pointer is not usable.
  
--- 11883,11891 ----
  an access-to-unconstrained-array and returns that value to the caller,
  the result will involve dangling pointers. In addition, it is only
  valid to create pointers to unconstrained arrays using this attribute
! if the pointer has the normal default ‘fat’ representation where a
  pointer has two components, one points to the array and one points to
! the bounds. If a size clause is used to force ‘thin’ representation
  for a pointer to unconstrained where there is only space for a single
  pointer, then the resulting pointer is not usable.
  
*************** begin
*** 11800,11811 ****
  end;
  @end example
  
! In general this is a risky approach. It may appear to "work" but such uses of
  @code{Unrestricted_Access} are potentially non-portable, even from one version
  of GNAT to another, so are best avoided if possible.
  
! @node Attribute Update,Attribute Valid_Scalars,Attribute Unrestricted_Access,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1b0}
  @section Attribute Update
  
  
--- 12001,12012 ----
  end;
  @end example
  
! In general this is a risky approach. It may appear to “work” but such uses of
  @code{Unrestricted_Access} are potentially non-portable, even from one version
  of GNAT to another, so are best avoided if possible.
  
! @node Attribute Update,Attribute Valid_Image,Attribute Unrestricted_Access,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1ac}
  @section Attribute Update
  
  
*************** A := A'Update ((1, 2) => 20, (3, 4) => 3
*** 11885,11892 ****
  
  which changes element (1,2) to 20 and (3,4) to 30.
  
! @node Attribute Valid_Scalars,Attribute VADS_Size,Attribute Update,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1b1}
  @section Attribute Valid_Scalars
  
  
--- 12086,12105 ----
  
  which changes element (1,2) to 20 and (3,4) to 30.
  
! @node Attribute Valid_Image,Attribute Valid_Scalars,Attribute Update,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-valid-image}@anchor{1ad}
! @section Attribute Valid_Image
! 
! 
! @geindex Valid_Image
! 
! The @code{'Valid_Image} attribute is defined for enumeration types other than
! those in package Standard. This attribute is a function that takes
! a String, and returns Boolean. @code{T'Valid_Image (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_Image,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1ae}
  @section Attribute Valid_Scalars
  
  
*************** write a function with a single use of th
*** 11920,11926 ****
  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{1b2}
  @section Attribute VADS_Size
  
  
--- 12133,12139 ----
  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{1af}
  @section Attribute VADS_Size
  
  
*************** gives the result that would be obtained
*** 11940,11946 ****
  the corresponding type.
  
  @node Attribute Value_Size,Attribute Wchar_T_Size,Attribute VADS_Size,Implementation Defined Attributes
! @anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1b3}@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{160}
  @section Attribute Value_Size
  
  
--- 12153,12159 ----
  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{15c}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1b0}
  @section Attribute Value_Size
  
  
*************** a value of the given subtype.  It is the
*** 11954,11983 ****
  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{1b4}
  @section Attribute Wchar_T_Size
  
  
  @geindex Wchar_T_Size
  
! @code{Standard'Wchar_T_Size} (@code{Standard} is the only permissible
  prefix) provides the size in bits of the C @code{wchar_t} type
  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{1b5}
  @section Attribute Word_Size
  
  
  @geindex Word_Size
  
! @code{Standard'Word_Size} (@code{Standard} is the only permissible
  prefix) provides the value @code{System.Word_Size}. The result is
  a static constant.
  
  @node Standard and Implementation Defined Restrictions,Implementation Advice,Implementation Defined Attributes,Top
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9}@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1b6}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1b7}
  @chapter Standard and Implementation Defined Restrictions
  
  
--- 12167,12196 ----
  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{1b1}
  @section Attribute Wchar_T_Size
  
  
  @geindex Wchar_T_Size
  
! @code{Standard'Wchar_T_Size} (@code{Standard} is the only allowed
  prefix) provides the size in bits of the C @code{wchar_t} type
  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{1b2}
  @section Attribute Word_Size
  
  
  @geindex Word_Size
  
! @code{Standard'Word_Size} (@code{Standard} is the only allowed
  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{1b3}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1b4}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9}
  @chapter Standard and Implementation Defined Restrictions
  
  
*************** language defined or GNAT-specific, are l
*** 12006,12012 ****
  @end menu
  
  @node Partition-Wide Restrictions,Program Unit Level Restrictions,,Standard and Implementation Defined Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1b8}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1b9}
  @section Partition-Wide Restrictions
  
  
--- 12219,12225 ----
  @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{1b5}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1b6}
  @section Partition-Wide Restrictions
  
  
*************** then all compilation units in the partit
*** 12076,12081 ****
--- 12289,12295 ----
  * No_Standard_Storage_Pools:: 
  * No_Stream_Optimizations:: 
  * No_Streams:: 
+ * No_Tagged_Type_Registration:: 
  * No_Task_Allocators:: 
  * No_Task_At_Interrupt_Priority:: 
  * No_Task_Attributes_Package:: 
*************** then all compilation units in the partit
*** 12095,12101 ****
  @end menu
  
  @node Immediate_Reclamation,Max_Asynchronous_Select_Nesting,,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1ba}
  @subsection Immediate_Reclamation
  
  
--- 12309,12315 ----
  @end menu
  
  @node Immediate_Reclamation,Max_Asynchronous_Select_Nesting,,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1b7}
  @subsection Immediate_Reclamation
  
  
*************** deallocation, any storage reserved at ru
*** 12107,12113 ****
  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{1bb}
  @subsection Max_Asynchronous_Select_Nesting
  
  
--- 12321,12327 ----
  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{1b8}
  @subsection Max_Asynchronous_Select_Nesting
  
  
*************** detected at compile time. Violations of
*** 12119,12125 ****
  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{1bc}
  @subsection Max_Entry_Queue_Length
  
  
--- 12333,12339 ----
  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{1b9}
  @subsection Max_Entry_Queue_Length
  
  
*************** compatibility purposes (and a warning wi
*** 12140,12146 ****
  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{1bd}
  @subsection Max_Protected_Entries
  
  
--- 12354,12360 ----
  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{1ba}
  @subsection Max_Protected_Entries
  
  
*************** bounds of every entry family of a protec
*** 12151,12157 ****
  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{1be}
  @subsection Max_Select_Alternatives
  
  
--- 12365,12371 ----
  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{1bb}
  @subsection Max_Select_Alternatives
  
  
*************** defined by a discriminant of a subtype w
*** 12160,12177 ****
  [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{1bf}
  @subsection Max_Storage_At_Blocking
  
  
  @geindex Max_Storage_At_Blocking
  
! [RM D.7] Specifies the maximum portion (in storage elements) of a task's
  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{1c0}
  @subsection Max_Task_Entries
  
  
--- 12374,12391 ----
  [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{1bc}
  @subsection Max_Storage_At_Blocking
  
  
  @geindex Max_Storage_At_Blocking
  
! [RM D.7] Specifies the maximum portion (in storage elements) of a task’s
  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{1bd}
  @subsection Max_Task_Entries
  
  
*************** defined by a discriminant of a subtype w
*** 12184,12190 ****
  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{1c1}
  @subsection Max_Tasks
  
  
--- 12398,12404 ----
  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{1be}
  @subsection Max_Tasks
  
  
*************** time. Violations of this restriction wit
*** 12197,12203 ****
  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{1c2}
  @subsection No_Abort_Statements
  
  
--- 12411,12417 ----
  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{1bf}
  @subsection No_Abort_Statements
  
  
*************** Storage_Error to be raised.
*** 12207,12213 ****
  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{1c3}
  @subsection No_Access_Parameter_Allocators
  
  
--- 12421,12427 ----
  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{1c0}
  @subsection No_Access_Parameter_Allocators
  
  
*************** occurrences of an allocator as the actua
*** 12218,12224 ****
  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{1c4}
  @subsection No_Access_Subprograms
  
  
--- 12432,12438 ----
  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{1c1}
  @subsection No_Access_Subprograms
  
  
*************** parameter.
*** 12228,12234 ****
  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{1c5}
  @subsection No_Allocators
  
  
--- 12442,12448 ----
  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{1c2}
  @subsection No_Allocators
  
  
*************** declarations of access-to-subprogram typ
*** 12238,12244 ****
  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{1c6}
  @subsection No_Anonymous_Allocators
  
  
--- 12452,12458 ----
  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{1c3}
  @subsection No_Anonymous_Allocators
  
  
*************** occurrences of an allocator.
*** 12248,12254 ****
  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{1c7}
  @subsection No_Asynchronous_Control
  
  
--- 12462,12468 ----
  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{1c4}
  @subsection No_Asynchronous_Control
  
  
*************** occurrences of an allocator of anonymous
*** 12258,12264 ****
  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{1c8}
  @subsection No_Calendar
  
  
--- 12472,12478 ----
  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{1c5}
  @subsection No_Calendar
  
  
*************** dependences on the predefined package As
*** 12268,12274 ****
  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{1c9}
  @subsection No_Coextensions
  
  
--- 12482,12488 ----
  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{1c6}
  @subsection No_Coextensions
  
  
*************** dependences on package Calendar.
*** 12278,12284 ****
  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{1ca}
  @subsection No_Default_Initialization
  
  
--- 12492,12498 ----
  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{1c7}
  @subsection No_Default_Initialization
  
  
*************** coextensions. See 3.10.2.
*** 12286,12292 ****
  
  [GNAT] This restriction prohibits any instance of default initialization
  of variables.  The binder implements a consistency rule which prevents
! any unit compiled without the restriction from with'ing a unit with the
  restriction (this allows the generation of initialization procedures to
  be skipped, since you can be sure that no call is ever generated to an
  initialization procedure in a unit with the restriction active). If used
--- 12500,12506 ----
  
  [GNAT] This restriction prohibits any instance of default initialization
  of variables.  The binder implements a consistency rule which prevents
! any unit compiled without the restriction from with’ing a unit with the
  restriction (this allows the generation of initialization procedures to
  be skipped, since you can be sure that no call is ever generated to an
  initialization procedure in a unit with the restriction active). If used
*************** is to prohibit all cases of variables de
*** 12295,12301 ****
  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{1cb}
  @subsection No_Delay
  
  
--- 12509,12515 ----
  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{1c8}
  @subsection No_Delay
  
  
*************** initializer (including the case of OUT s
*** 12305,12311 ****
  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{1cc}
  @subsection No_Dependence
  
  
--- 12519,12525 ----
  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{1c9}
  @subsection No_Dependence
  
  
*************** delay statements and no semantic depende
*** 12315,12321 ****
  dependences on a library unit.
  
  @node No_Direct_Boolean_Operators,No_Dispatch,No_Dependence,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1cd}
  @subsection No_Direct_Boolean_Operators
  
  
--- 12529,12535 ----
  dependences on a library unit.
  
  @node No_Direct_Boolean_Operators,No_Dispatch,No_Dependence,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1ca}
  @subsection No_Direct_Boolean_Operators
  
  
*************** protocol requires the use of short-circu
*** 12328,12334 ****
  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{1ce}
  @subsection No_Dispatch
  
  
--- 12542,12548 ----
  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{1cb}
  @subsection No_Dispatch
  
  
*************** composite boolean operations.
*** 12338,12344 ****
  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{1cf}
  @subsection No_Dispatching_Calls
  
  
--- 12552,12558 ----
  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{1cc}
  @subsection No_Dispatching_Calls
  
  
*************** end Pkg;
*** 12374,12380 ****
  with Pkg; use Pkg;
  procedure Example is
    procedure Test (O : T'Class) is
!     N : Natural  := O'Size;--  Error: Dispatching call
      C : T'Class := O;      --  Error: implicit Dispatching Call
    begin
      if O in DT'Class then  --  OK   : Membership test
--- 12588,12594 ----
  with Pkg; use Pkg;
  procedure Example is
    procedure Test (O : T'Class) is
!     N : Natural := O'Size; --  Error: Dispatching call
      C : T'Class := O;      --  Error: implicit Dispatching Call
    begin
      if O in DT'Class then  --  OK   : Membership test
*************** end Example;
*** 12399,12405 ****
  @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{1d0}
  @subsection No_Dynamic_Attachment
  
  
--- 12613,12619 ----
  @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{1cd}
  @subsection No_Dynamic_Attachment
  
  
*************** compatibility purposes (and a warning wi
*** 12418,12424 ****
  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{1d1}
  @subsection No_Dynamic_Priorities
  
  
--- 12632,12638 ----
  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{1ce}
  @subsection No_Dynamic_Priorities
  
  
*************** warnings on obsolescent features are act
*** 12427,12433 ****
  [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{1d2}
  @subsection No_Entry_Calls_In_Elaboration_Code
  
  
--- 12641,12647 ----
  [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{1cf}
  @subsection No_Entry_Calls_In_Elaboration_Code
  
  
*************** restriction, the compiler can assume tha
*** 12439,12445 ****
  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{1d3}
  @subsection No_Enumeration_Maps
  
  
--- 12653,12659 ----
  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{1d0}
  @subsection No_Enumeration_Maps
  
  
*************** enumeration maps are used (that is Image
*** 12450,12456 ****
  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{1d4}
  @subsection No_Exception_Handlers
  
  
--- 12664,12670 ----
  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{1d1}
  @subsection No_Exception_Handlers
  
  
*************** statement generated by the compiler). Th
*** 12475,12481 ****
  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{1d5}
  @subsection No_Exception_Propagation
  
  
--- 12689,12695 ----
  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{1d2}
  @subsection No_Exception_Propagation
  
  
*************** the package GNAT.Current_Exception is no
*** 12492,12498 ****
  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{1d6}
  @subsection No_Exception_Registration
  
  
--- 12706,12712 ----
  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{1d3}
  @subsection No_Exception_Registration
  
  
*************** code is simplified by omitting the other
*** 12506,12512 ****
  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{1d7}
  @subsection No_Exceptions
  
  
--- 12720,12726 ----
  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{1d4}
  @subsection No_Exceptions
  
  
*************** raise statements and no exception handle
*** 12517,12523 ****
  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{1d8}
  @subsection No_Finalization
  
  
--- 12731,12737 ----
  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{1d5}
  @subsection No_Finalization
  
  
*************** object or a nested component, either dec
*** 12558,12564 ****
  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{1d9}
  @subsection No_Fixed_Point
  
  
--- 12772,12778 ----
  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{1d6}
  @subsection No_Fixed_Point
  
  
*************** deallocation of a controlled object no l
*** 12568,12574 ****
  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{1da}
  @subsection No_Floating_Point
  
  
--- 12782,12788 ----
  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{1d7}
  @subsection No_Floating_Point
  
  
*************** occurrences of fixed point types and ope
*** 12578,12584 ****
  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{1db}
  @subsection No_Implicit_Conditionals
  
  
--- 12792,12798 ----
  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{1d8}
  @subsection No_Implicit_Conditionals
  
  
*************** normal manner. Constructs generating imp
*** 12594,12600 ****
  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{1dc}
  @subsection No_Implicit_Dynamic_Code
  
  
--- 12808,12814 ----
  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{1d9}
  @subsection No_Implicit_Dynamic_Code
  
  
*************** of composite objects and the Max/Min att
*** 12602,12608 ****
  
  @geindex trampoline
  
! [GNAT] This restriction prevents the compiler from building 'trampolines'.
  This is a structure that is built on the stack and contains dynamic
  code to be executed at run time. On some targets, a trampoline is
  built for the following features: @code{Access},
--- 12816,12822 ----
  
  @geindex trampoline
  
! [GNAT] This restriction prevents the compiler from building ‘trampolines’.
  This is a structure that is built on the stack and contains dynamic
  code to be executed at run time. On some targets, a trampoline is
  built for the following features: @code{Access},
*************** protection) will cause trampolines to ra
*** 12614,12620 ****
  Trampolines are also quite slow at run time.
  
  On many targets, trampolines have been largely eliminated. Look at the
! version of system.ads for your target --- if it has
  Always_Compatible_Rep equal to False, then trampolines are largely
  eliminated. In particular, a trampoline is built for the following
  features: @code{Address} of a nested subprogram;
--- 12828,12834 ----
  Trampolines are also quite slow at run time.
  
  On many targets, trampolines have been largely eliminated. Look at the
! version of system.ads for your target — if it has
  Always_Compatible_Rep equal to False, then trampolines are largely
  eliminated. In particular, a trampoline is built for the following
  features: @code{Address} of a nested subprogram;
*************** foreign-language convention; primitive o
*** 12624,12630 ****
  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{1dd}
  @subsection No_Implicit_Heap_Allocations
  
  
--- 12838,12844 ----
  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{1da}
  @subsection No_Implicit_Heap_Allocations
  
  
*************** types.
*** 12633,12639 ****
  [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{1de}
  @subsection No_Implicit_Protected_Object_Allocations
  
  
--- 12847,12853 ----
  [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{1db}
  @subsection No_Implicit_Protected_Object_Allocations
  
  
*************** types.
*** 12643,12649 ****
  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{1df}
  @subsection No_Implicit_Task_Allocations
  
  
--- 12857,12863 ----
  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{1dc}
  @subsection No_Implicit_Task_Allocations
  
  
*************** protected object.
*** 12652,12658 ****
  [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{1e0}
  @subsection No_Initialize_Scalars
  
  
--- 12866,12872 ----
  [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{1dd}
  @subsection No_Initialize_Scalars
  
  
*************** code, and in particular eliminates dummy
*** 12664,12670 ****
  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{1e1}
  @subsection No_IO
  
  
--- 12878,12884 ----
  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{1de}
  @subsection No_IO
  
  
*************** dependences on any of the library units
*** 12675,12681 ****
  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{1e2}
  @subsection No_Local_Allocators
  
  
--- 12889,12895 ----
  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{1df}
  @subsection No_Local_Allocators
  
  
*************** occurrences of an allocator in subprogra
*** 12686,12692 ****
  and entry bodies.
  
  @node No_Local_Protected_Objects,No_Local_Timing_Events,No_Local_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1e3}
  @subsection No_Local_Protected_Objects
  
  
--- 12900,12906 ----
  and entry bodies.
  
  @node No_Local_Protected_Objects,No_Local_Timing_Events,No_Local_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1e0}
  @subsection No_Local_Protected_Objects
  
  
*************** and entry bodies.
*** 12696,12702 ****
  only declared at the library level.
  
  @node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Protected_Objects,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1e4}
  @subsection No_Local_Timing_Events
  
  
--- 12910,12916 ----
  only declared at the library level.
  
  @node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Protected_Objects,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1e1}
  @subsection No_Local_Timing_Events
  
  
*************** only declared at the library level.
*** 12706,12712 ****
  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{1e5}
  @subsection No_Long_Long_Integers
  
  
--- 12920,12926 ----
  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{1e2}
  @subsection No_Long_Long_Integers
  
  
*************** declared at the library level.
*** 12715,12724 ****
  [GNAT] This partition-wide restriction forbids any explicit reference to
  type Standard.Long_Long_Integer, and also forbids declaring range types whose
  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{1e6}
  @subsection No_Multiple_Elaboration
  
  
--- 12929,12938 ----
  [GNAT] This partition-wide restriction forbids any explicit reference to
  type Standard.Long_Long_Integer, and also forbids declaring range types whose
  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{1e3}
  @subsection No_Multiple_Elaboration
  
  
*************** possible, including non-Ada main program
*** 12734,12740 ****
  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{1e7}
  @subsection No_Nested_Finalization
  
  
--- 12948,12954 ----
  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{1e4}
  @subsection No_Nested_Finalization
  
  
*************** permitted and will be diagnosed by the b
*** 12743,12749 ****
  [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{1e8}
  @subsection No_Protected_Type_Allocators
  
  
--- 12957,12963 ----
  [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{1e5}
  @subsection No_Protected_Type_Allocators
  
  
*************** permitted and will be diagnosed by the b
*** 12753,12759 ****
  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{1e9}
  @subsection No_Protected_Types
  
  
--- 12967,12973 ----
  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{1e6}
  @subsection No_Protected_Types
  
  
*************** expressions that attempt to allocate pro
*** 12763,12769 ****
  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{1ea}
  @subsection No_Recursion
  
  
--- 12977,12983 ----
  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{1e7}
  @subsection No_Recursion
  
  
*************** declarations of protected types or prote
*** 12773,12779 ****
  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{1eb}
  @subsection No_Reentrancy
  
  
--- 12987,12993 ----
  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{1e8}
  @subsection No_Reentrancy
  
  
*************** part of its execution.
*** 12783,12789 ****
  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{1ec}
  @subsection No_Relative_Delay
  
  
--- 12997,13003 ----
  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{1e9}
  @subsection No_Relative_Delay
  
  
*************** relative statements and prevents express
*** 12794,12800 ****
  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{1ed}
  @subsection No_Requeue_Statements
  
  
--- 13008,13014 ----
  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{1ea}
  @subsection No_Requeue_Statements
  
  
*************** compatibility purposes (and a warning wi
*** 12812,12818 ****
  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{1ee}
  @subsection No_Secondary_Stack
  
  
--- 13026,13032 ----
  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{1eb}
  @subsection No_Secondary_Stack
  
  
*************** stack is used to implement functions ret
*** 12825,12831 ****
  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{1ef}
  @subsection No_Select_Statements
  
  
--- 13039,13045 ----
  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{1ec}
  @subsection No_Select_Statements
  
  
*************** secondary stacks for tasks (excluding th
*** 12835,12841 ****
  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{1f0}
  @subsection No_Specific_Termination_Handlers
  
  
--- 13049,13055 ----
  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{1ed}
  @subsection No_Specific_Termination_Handlers
  
  
*************** kind are permitted, that is the keyword
*** 12845,12851 ****
  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{1f1}
  @subsection No_Specification_of_Aspect
  
  
--- 13059,13065 ----
  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{1ee}
  @subsection No_Specification_of_Aspect
  
  
*************** specification, attribute definition clau
*** 12856,12862 ****
  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{1f2}
  @subsection No_Standard_Allocators_After_Elaboration
  
  
--- 13070,13076 ----
  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{1ef}
  @subsection No_Standard_Allocators_After_Elaboration
  
  
*************** library items of the partition has compl
*** 12868,12874 ****
  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{1f3}
  @subsection No_Standard_Storage_Pools
  
  
--- 13082,13088 ----
  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{1f0}
  @subsection No_Standard_Storage_Pools
  
  
*************** have an explicit Storage_Pool attribute
*** 12880,12886 ****
  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{1f4}
  @subsection No_Stream_Optimizations
  
  
--- 13094,13100 ----
  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{1f1}
  @subsection No_Stream_Optimizations
  
  
*************** compiler uses block reads and writes whe
*** 12892,12899 ****
  due to their superior performance. When this restriction is in effect, the
  compiler performs all IO operations on a per-character basis.
  
! @node No_Streams,No_Task_Allocators,No_Stream_Optimizations,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{1f5}
  @subsection No_Streams
  
  
--- 13106,13113 ----
  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{1f2}
  @subsection No_Streams
  
  
*************** To take maximum advantage of this space-
*** 12913,12920 ****
  unit declaring a tagged type should be compiled with the restriction,
  though this is not required.
  
! @node No_Task_Allocators,No_Task_At_Interrupt_Priority,No_Streams,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{1f6}
  @subsection No_Task_Allocators
  
  
--- 13127,13149 ----
  unit declaring a tagged type should be compiled with the restriction,
  though this is not required.
  
! @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{1f3}
! @subsection No_Tagged_Type_Registration
! 
! 
! @geindex No_Tagged_Type_Registration
! 
! [GNAT] If this restriction is active, then class-wide streaming
! attributes are not supported. In addition, the subprograms in
! Ada.Tags are not supported.
! If this restriction is active, the generated code is simplified by
! omitting the otherwise-required global registration of tagged types when they
! 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{1f4}
  @subsection No_Task_Allocators
  
  
*************** though this is not required.
*** 12924,12930 ****
  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{1f7}
  @subsection No_Task_At_Interrupt_Priority
  
  
--- 13153,13159 ----
  or types containing task subcomponents.
  
  @node No_Task_At_Interrupt_Priority,No_Task_Attributes_Package,No_Task_Allocators,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{1f5}
  @subsection No_Task_At_Interrupt_Priority
  
  
*************** a consequence, the tasks are always crea
*** 12936,12942 ****
  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{1f8}
  @subsection No_Task_Attributes_Package
  
  
--- 13165,13171 ----
  that an interrupt priority.
  
  @node No_Task_Attributes_Package,No_Task_Hierarchy,No_Task_At_Interrupt_Priority,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{1f6}
  @subsection No_Task_Attributes_Package
  
  
*************** compatibility purposes (and a warning wi
*** 12953,12959 ****
  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{1f9}
  @subsection No_Task_Hierarchy
  
  
--- 13182,13188 ----
  warnings on obsolescent features are activated).
  
  @node No_Task_Hierarchy,No_Task_Termination,No_Task_Attributes_Package,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{1f7}
  @subsection No_Task_Hierarchy
  
  
*************** warnings on obsolescent features are act
*** 12963,12969 ****
  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{1fa}
  @subsection No_Task_Termination
  
  
--- 13192,13198 ----
  directly on the environment task of the partition.
  
  @node No_Task_Termination,No_Tasking,No_Task_Hierarchy,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{1f8}
  @subsection No_Task_Termination
  
  
*************** directly on the environment task of the
*** 12972,12978 ****
  [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{1fb}
  @subsection No_Tasking
  
  
--- 13201,13207 ----
  [RM D.7] Tasks that terminate are erroneous.
  
  @node No_Tasking,No_Terminate_Alternatives,No_Task_Termination,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{1f9}
  @subsection No_Tasking
  
  
*************** and cause an error message to be output
*** 12985,12991 ****
  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{1fc}
  @subsection No_Terminate_Alternatives
  
  
--- 13214,13220 ----
  binder.
  
  @node No_Terminate_Alternatives,No_Unchecked_Access,No_Tasking,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{1fa}
  @subsection No_Terminate_Alternatives
  
  
*************** binder.
*** 12994,13000 ****
  [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{1fd}
  @subsection No_Unchecked_Access
  
  
--- 13223,13229 ----
  [RM D.7] There are no selective accepts with terminate alternatives.
  
  @node No_Unchecked_Access,No_Unchecked_Conversion,No_Terminate_Alternatives,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{1fb}
  @subsection No_Unchecked_Access
  
  
*************** binder.
*** 13004,13010 ****
  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{1fe}
  @subsection No_Unchecked_Conversion
  
  
--- 13233,13239 ----
  occurrences of the Unchecked_Access attribute.
  
  @node No_Unchecked_Conversion,No_Unchecked_Deallocation,No_Unchecked_Access,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{1fc}
  @subsection No_Unchecked_Conversion
  
  
*************** occurrences of the Unchecked_Access attr
*** 13014,13020 ****
  dependences on the predefined generic function Unchecked_Conversion.
  
  @node No_Unchecked_Deallocation,No_Use_Of_Entity,No_Unchecked_Conversion,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{1ff}
  @subsection No_Unchecked_Deallocation
  
  
--- 13243,13249 ----
  dependences on the predefined generic function Unchecked_Conversion.
  
  @node No_Unchecked_Deallocation,No_Use_Of_Entity,No_Unchecked_Conversion,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{1fd}
  @subsection No_Unchecked_Deallocation
  
  
*************** dependences on the predefined generic fu
*** 13024,13030 ****
  dependences on the predefined generic procedure Unchecked_Deallocation.
  
  @node No_Use_Of_Entity,Pure_Barriers,No_Unchecked_Deallocation,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{200}
  @subsection No_Use_Of_Entity
  
  
--- 13253,13259 ----
  dependences on the predefined generic procedure Unchecked_Deallocation.
  
  @node No_Use_Of_Entity,Pure_Barriers,No_Unchecked_Deallocation,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{1fe}
  @subsection No_Use_Of_Entity
  
  
*************** No_Use_Of_Entity => Ada.Text_IO.Put_Line
*** 13044,13050 ****
  @end example
  
  @node Pure_Barriers,Simple_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{201}
  @subsection Pure_Barriers
  
  
--- 13273,13279 ----
  @end example
  
  @node Pure_Barriers,Simple_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{1ff}
  @subsection Pure_Barriers
  
  
*************** character literals,
*** 13081,13087 ****
  implicitly defined comparison operators,
  
  @item 
! uses of the Standard."not" operator,
  
  @item 
  short-circuit operator,
--- 13310,13316 ----
  implicitly defined comparison operators,
  
  @item 
! uses of the Standard.”not” operator,
  
  @item 
  short-circuit operator,
*************** but still ensures absence of side effect
*** 13095,13101 ****
  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{202}
  @subsection Simple_Barriers
  
  
--- 13324,13330 ----
  during the evaluation of the barriers.
  
  @node Simple_Barriers,Static_Priorities,Pure_Barriers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{200}
  @subsection Simple_Barriers
  
  
*************** compatibility purposes (and a warning wi
*** 13114,13120 ****
  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{203}
  @subsection Static_Priorities
  
  
--- 13343,13349 ----
  warnings on obsolescent features are activated).
  
  @node Static_Priorities,Static_Storage_Size,Simple_Barriers,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{201}
  @subsection Static_Priorities
  
  
*************** are static, and that there are no depend
*** 13125,13131 ****
  @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{204}
  @subsection Static_Storage_Size
  
  
--- 13354,13360 ----
  @code{Ada.Dynamic_Priorities}.
  
  @node Static_Storage_Size,,Static_Priorities,Partition-Wide Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{202}
  @subsection Static_Storage_Size
  
  
*************** are static, and that there are no depend
*** 13135,13141 ****
  in a Storage_Size pragma or attribute definition clause is static.
  
  @node Program Unit Level Restrictions,,Partition-Wide Restrictions,Standard and Implementation Defined Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{205}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{206}
  @section Program Unit Level Restrictions
  
  
--- 13364,13370 ----
  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{203}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{204}
  @section Program Unit Level Restrictions
  
  
*************** other compilation units in the partition
*** 13147,13152 ****
--- 13376,13382 ----
  
  @menu
  * No_Elaboration_Code:: 
+ * No_Dynamic_Accessibility_Checks:: 
  * No_Dynamic_Sized_Objects:: 
  * No_Entry_Queue:: 
  * No_Implementation_Aspect_Specifications:: 
*************** other compilation units in the partition
*** 13164,13171 ****
  
  @end menu
  
! @node No_Elaboration_Code,No_Dynamic_Sized_Objects,,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{207}
  @subsection No_Elaboration_Code
  
  
--- 13394,13401 ----
  
  @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{205}
  @subsection No_Elaboration_Code
  
  
*************** is not possible to document the precise
*** 13211,13217 ****
  optimizer can figure this out.
  
  Note that this the implementation of this restriction requires full
! code generation. If it is used in conjunction with "semantics only"
  checking, then some cases of violations may be missed.
  
  When this restriction is active, we are not requesting control-flow
--- 13441,13447 ----
  optimizer can figure this out.
  
  Note that this the implementation of this restriction requires full
! code generation. If it is used in conjunction with “semantics only”
  checking, then some cases of violations may be missed.
  
  When this restriction is active, we are not requesting control-flow
*************** used, the compiler is allowed to suppres
*** 13220,13227 ****
  associated with the unit. This counter is typically used to check for access
  before elaboration and to control multiple elaboration attempts.
  
! @node No_Dynamic_Sized_Objects,No_Entry_Queue,No_Elaboration_Code,Program Unit Level Restrictions
! @anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{208}
  @subsection No_Dynamic_Sized_Objects
  
  
--- 13450,13506 ----
  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{206}
! @subsection No_Dynamic_Accessibility_Checks
! 
! 
! @geindex No_Dynamic_Accessibility_Checks
! 
! [GNAT] No dynamic accessibility checks are generated when this restriction is
! in effect. Instead, dangling references are prevented via more conservative
! compile-time checking. More specifically, existing compile-time checks are
! enforced but with more conservative assumptions about the accessibility levels
! of the relevant entities. These conservative assumptions eliminate the need for
! dynamic accessibility checks.
! 
! These new rules for computing (at compile-time) the accessibility level of an
! anonymous access type T are as follows:
! 
! 
! @itemize *
! 
! @item 
! If T is a function result type then, from the caller’s perspective, its level
! is that of the innermost master enclosing the function call. From the callee’s
! perspective, the level of parameters and local variables of the callee is
! statically deeper than the level of T.
! 
! For any other accessibility level L such that the level of parameters and local
! variables of the callee is statically deeper than L, the level of T (from the
! callee’s perspective) is also statically deeper than L.
! 
! @item 
! If T is the type of a formal parameter then, from the caller’s perspective,
! its level is at least as deep as that of the type of the corresponding actual
! parameter (whatever that actual parameter might be). From the callee’s
! perspective, the level of parameters and local variables of the callee is
! statically deeper than the level of T.
! 
! @item 
! If T is the type of a discriminant then its level is that of the discriminated
! type.
! 
! @item 
! If T is the type of a stand-alone object then its level is the level of the
! object.
! 
! @item 
! 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{207}
  @subsection No_Dynamic_Sized_Objects
  
  
*************** access discriminants. It is often a good
*** 13239,13245 ****
  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{209}
  @subsection No_Entry_Queue
  
  
--- 13518,13524 ----
  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{208}
  @subsection No_Entry_Queue
  
  
*************** checked at compile time.  A program exec
*** 13252,13258 ****
  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{20a}
  @subsection No_Implementation_Aspect_Specifications
  
  
--- 13531,13537 ----
  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{209}
  @subsection No_Implementation_Aspect_Specifications
  
  
*************** GNAT-defined aspects are present.  With
*** 13263,13269 ****
  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{20b}
  @subsection No_Implementation_Attributes
  
  
--- 13542,13548 ----
  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{20a}
  @subsection No_Implementation_Attributes
  
  
*************** attributes that can be used are those de
*** 13275,13281 ****
  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{20c}
  @subsection No_Implementation_Identifiers
  
  
--- 13554,13560 ----
  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{20b}
  @subsection No_Implementation_Identifiers
  
  
*************** implementation-defined identifiers (mark
*** 13286,13292 ****
  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{20d}
  @subsection No_Implementation_Pragmas
  
  
--- 13565,13571 ----
  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{20c}
  @subsection No_Implementation_Pragmas
  
  
*************** GNAT-defined pragmas are present.  With
*** 13297,13303 ****
  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{20e}
  @subsection No_Implementation_Restrictions
  
  
--- 13576,13582 ----
  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{20d}
  @subsection No_Implementation_Restrictions
  
  
*************** are present.  With this restriction, the
*** 13309,13315 ****
  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{20f}
  @subsection No_Implementation_Units
  
  
--- 13588,13594 ----
  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{20e}
  @subsection No_Implementation_Units
  
  
*************** mention in the context clause of any imp
*** 13320,13341 ****
  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{210}
  @subsection No_Implicit_Aliasing
  
  
  @geindex No_Implicit_Aliasing
  
  [GNAT] This restriction, which is not required to be partition-wide consistent,
! requires an explicit aliased keyword for an object to which 'Access,
! 'Unchecked_Access, or 'Address is applied, and forbids entirely the use of
! the 'Unrestricted_Access attribute for objects. Note: the reason that
  Unrestricted_Access is forbidden is that it would require the prefix
  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{211}
  @subsection No_Implicit_Loops
  
  
--- 13599,13620 ----
  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{20f}
  @subsection No_Implicit_Aliasing
  
  
  @geindex No_Implicit_Aliasing
  
  [GNAT] This restriction, which is not required to be partition-wide consistent,
! requires an explicit aliased keyword for an object to which ‘Access,
! ‘Unchecked_Access, or ‘Address is applied, and forbids entirely the use of
! the ‘Unrestricted_Access attribute for objects. Note: the reason that
  Unrestricted_Access is forbidden is that it would require the prefix
  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{210}
  @subsection No_Implicit_Loops
  
  
*************** arrays larger than about 5000 scalar com
*** 13352,13358 ****
  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{212}
  @subsection No_Obsolescent_Features
  
  
--- 13631,13637 ----
  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{211}
  @subsection No_Obsolescent_Features
  
  
*************** is set in the spec of a package, it will
*** 13362,13368 ****
  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{213}
  @subsection No_Wide_Characters
  
  
--- 13641,13647 ----
  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{212}
  @subsection No_Wide_Characters
  
  
*************** appear in the program (that is literals
*** 13376,13382 ****
  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{214}
  @subsection Static_Dispatch_Tables
  
  
--- 13655,13661 ----
  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{213}
  @subsection Static_Dispatch_Tables
  
  
*************** type @code{Character}).
*** 13386,13392 ****
  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{215}
  @subsection SPARK_05
  
  
--- 13665,13671 ----
  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{214}
  @subsection SPARK_05
  
  
*************** gnatprove -P project.gpr --mode=check_al
*** 13409,13415 ****
  @end example
  
  @node Implementation Advice,Implementation Defined Characteristics,Standard and Implementation Defined Restrictions,Top
! @anchor{gnat_rm/implementation_advice doc}@anchor{216}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a}@anchor{gnat_rm/implementation_advice id1}@anchor{217}
  @chapter Implementation Advice
  
  
--- 13688,13694 ----
  @end example
  
  @node Implementation Advice,Implementation Defined Characteristics,Standard and Implementation Defined Restrictions,Top
! @anchor{gnat_rm/implementation_advice doc}@anchor{215}@anchor{gnat_rm/implementation_advice id1}@anchor{216}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a}
  @chapter Implementation Advice
  
  
*************** behavior of all Ada compilers, and the G
*** 13418,13424 ****
  these requirements.
  
  In addition, there are sections throughout the Ada Reference Manual headed
! by the phrase 'Implementation advice'.  These sections are not normative,
  i.e., they do not specify requirements that all compilers must
  follow.  Rather they provide advice on generally desirable behavior.
  They are not requirements, because they describe behavior that cannot
--- 13697,13703 ----
  these requirements.
  
  In addition, there are sections throughout the Ada Reference Manual headed
! by the phrase ‘Implementation advice’.  These sections are not normative,
  i.e., they do not specify requirements that all compilers must
  follow.  Rather they provide advice on generally desirable behavior.
  They are not requirements, because they describe behavior that cannot
*************** RM section number and paragraph number a
*** 13431,13437 ****
  the advice.  The contents of each section consists of the RM text within
  quotation marks,
  followed by the GNAT interpretation of the advice.  Most often, this simply says
! 'followed', which means that GNAT follows the advice.  However, in a
  number of cases, GNAT deliberately deviates from this advice, in which
  case the text describes what GNAT does and why.
  
--- 13710,13716 ----
  the advice.  The contents of each section consists of the RM text within
  quotation marks,
  followed by the GNAT interpretation of the advice.  Most often, this simply says
! ‘followed’, which means that GNAT follows the advice.  However, in a
  number of cases, GNAT deliberately deviates from this advice, in which
  case the text describes what GNAT does and why.
  
*************** case the text describes what GNAT does a
*** 13449,13455 ****
  * RM 3.5.5(8); Enumeration Values: RM 3 5 5 8 Enumeration Values. 
  * RM 3.5.7(17); Float Types: RM 3 5 7 17 Float Types. 
  * RM 3.6.2(11); Multidimensional Arrays: RM 3 6 2 11 Multidimensional Arrays. 
! * RM 9.6(30-31); Duration'Small: RM 9 6 30-31 Duration'Small. 
  * RM 10.2.1(12); Consistent Representation: RM 10 2 1 12 Consistent Representation. 
  * RM 11.4.1(19); Exception Information: RM 11 4 1 19 Exception Information. 
  * RM 11.5(28); Suppression of Checks: RM 11 5 28 Suppression of Checks. 
--- 13728,13734 ----
  * RM 3.5.5(8); Enumeration Values: RM 3 5 5 8 Enumeration Values. 
  * RM 3.5.7(17); Float Types: RM 3 5 7 17 Float Types. 
  * RM 3.6.2(11); Multidimensional Arrays: RM 3 6 2 11 Multidimensional Arrays. 
! * RM 9.6(30-31); Duration’Small: RM 9 6 30-31 Duration’Small. 
  * RM 10.2.1(12); Consistent Representation: RM 10 2 1 12 Consistent Representation. 
  * RM 11.4.1(19); Exception Information: RM 11 4 1 19 Exception Information. 
  * RM 11.5(28); Suppression of Checks: RM 11 5 28 Suppression of Checks. 
*************** case the text describes what GNAT does a
*** 13475,13480 ****
--- 13754,13760 ----
  * RM A.4.4(106); Bounded-Length String Handling: RM A 4 4 106 Bounded-Length String Handling. 
  * RM A.5.2(46-47); Random Number Generation: RM A 5 2 46-47 Random Number Generation. 
  * RM A.10.7(23); Get_Immediate: RM A 10 7 23 Get_Immediate. 
+ * RM A.18; Containers: RM A 18 Containers. 
  * RM B.1(39-41); Pragma Export: RM B 1 39-41 Pragma Export. 
  * RM B.2(12-13); Package Interfaces: RM B 2 12-13 Package Interfaces. 
  * RM B.3(63-71); Interfacing with C: RM B 3 63-71 Interfacing with C. 
*************** case the text describes what GNAT does a
*** 13506,13520 ****
  @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{218}
  @section RM 1.1.3(20): Error Detection
  
  
  @quotation
  
! "If an implementation detects the use of an unsupported Specialized Needs
  Annex feature at run time, it should raise @code{Program_Error} if
! feasible."
  @end quotation
  
  Not relevant.  All specialized needs annex features are either supported,
--- 13786,13800 ----
  @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{217}
  @section RM 1.1.3(20): Error Detection
  
  
  @quotation
  
! “If an implementation detects the use of an unsupported Specialized Needs
  Annex feature at run time, it should raise @code{Program_Error} if
! feasible.”
  @end quotation
  
  Not relevant.  All specialized needs annex features are either supported,
*************** or diagnosed at compile time.
*** 13523,13537 ****
  @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{219}
  @section RM 1.1.3(31): Child Units
  
  
  @quotation
  
! "If an implementation wishes to provide implementation-defined
  extensions to the functionality of a language-defined library unit, it
! should normally do so by adding children to the library unit."
  @end quotation
  
  Followed.
--- 13803,13817 ----
  @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{218}
  @section RM 1.1.3(31): Child Units
  
  
  @quotation
  
! “If an implementation wishes to provide implementation-defined
  extensions to the functionality of a language-defined library unit, it
! should normally do so by adding children to the library unit.”
  @end quotation
  
  Followed.
*************** Followed.
*** 13539,13552 ****
  @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{21a}
  @section RM 1.1.5(12): Bounded Errors
  
  
  @quotation
  
! "If an implementation detects a bounded error or erroneous
! execution, it should raise @code{Program_Error}."
  @end quotation
  
  Followed in all cases in which the implementation detects a bounded
--- 13819,13832 ----
  @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{219}
  @section RM 1.1.5(12): Bounded Errors
  
  
  @quotation
  
! “If an implementation detects a bounded error or erroneous
! execution, it should raise @code{Program_Error}.”
  @end quotation
  
  Followed in all cases in which the implementation detects a bounded
*************** runtime.
*** 13556,13571 ****
  @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{21b}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{21c}
  @section RM 2.8(16): Pragmas
  
  
  @quotation
  
! "Normally, implementation-defined pragmas should have no semantic effect
  for error-free programs; that is, if the implementation-defined pragmas
  are removed from a working program, the program should still be legal,
! and should still have the same semantics."
  @end quotation
  
  The following implementation defined pragmas are exceptions to this
--- 13836,13851 ----
  @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{21a}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{21b}
  @section RM 2.8(16): Pragmas
  
  
  @quotation
  
! “Normally, implementation-defined pragmas should have no semantic effect
  for error-free programs; that is, if the implementation-defined pragmas
  are removed from a working program, the program should still be legal,
! and should still have the same semantics.”
  @end quotation
  
  The following implementation defined pragmas are exceptions to this
*************** that this advice not be followed.  For d
*** 13669,13681 ****
  @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{21d}
  @section RM 2.8(17-19): Pragmas
  
  
  @quotation
  
! "Normally, an implementation should not define pragmas that can
  make an illegal program legal, except as follows:
  
  
--- 13949,13961 ----
  @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{21c}
  @section RM 2.8(17-19): Pragmas
  
  
  @quotation
  
! “Normally, an implementation should not define pragmas that can
  make an illegal program legal, except as follows:
  
  
*************** A pragma used to complete a declaration,
*** 13686,13718 ****
  
  @item 
  A pragma used to configure the environment by adding, removing, or
! replacing @code{library_items}."
  @end itemize
  @end quotation
  
! See @ref{21c,,RM 2.8(16); Pragmas}.
  
  @geindex Character Sets
  
  @geindex Alternative Character Sets
  
  @node RM 3 5 2 5 Alternative Character Sets,RM 3 5 4 28 Integer Types,RM 2 8 17-19 Pragmas,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{21e}
  @section RM 3.5.2(5): Alternative Character Sets
  
  
  @quotation
  
! "If an implementation supports a mode with alternative interpretations
  for @code{Character} and @code{Wide_Character}, the set of graphic
  characters of @code{Character} should nevertheless remain a proper
  subset of the set of graphic characters of @code{Wide_Character}.  Any
! character set 'localizations' should be reflected in the results of
  the subprograms defined in the language-defined package
  @code{Characters.Handling} (see A.3) available in such a mode.  In a mode with
  an alternative interpretation of @code{Character}, the implementation should
  also support a corresponding change in what is a legal
! @code{identifier_letter}."
  @end quotation
  
  Not all wide character modes follow this advice, in particular the JIS
--- 13966,13998 ----
  
  @item 
  A pragma used to configure the environment by adding, removing, or
! replacing @code{library_items}.”
  @end itemize
  @end quotation
  
! See @ref{21b,,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{21d}
  @section RM 3.5.2(5): Alternative Character Sets
  
  
  @quotation
  
! “If an implementation supports a mode with alternative interpretations
  for @code{Character} and @code{Wide_Character}, the set of graphic
  characters of @code{Character} should nevertheless remain a proper
  subset of the set of graphic characters of @code{Wide_Character}.  Any
! character set ‘localizations’ should be reflected in the results of
  the subprograms defined in the language-defined package
  @code{Characters.Handling} (see A.3) available in such a mode.  In a mode with
  an alternative interpretation of @code{Character}, the implementation should
  also support a corresponding change in what is a legal
! @code{identifier_letter}.”
  @end quotation
  
  Not all wide character modes follow this advice, in particular the JIS
*************** there is no such restriction.
*** 13725,13741 ****
  @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{21f}
  @section RM 3.5.4(28): Integer Types
  
  
  @quotation
  
! "An implementation should support @code{Long_Integer} in addition to
  @code{Integer} if the target machine supports 32-bit (or longer)
  arithmetic.  No other named integer subtypes are recommended for package
  @code{Standard}.  Instead, appropriate named integer subtypes should be
! provided in the library package @code{Interfaces} (see B.2)."
  @end quotation
  
  @code{Long_Integer} is supported.  Other standard integer types are supported
--- 14005,14021 ----
  @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{21e}
  @section RM 3.5.4(28): Integer Types
  
  
  @quotation
  
! “An implementation should support @code{Long_Integer} in addition to
  @code{Integer} if the target machine supports 32-bit (or longer)
  arithmetic.  No other named integer subtypes are recommended for package
  @code{Standard}.  Instead, appropriate named integer subtypes should be
! provided in the library package @code{Interfaces} (see B.2).”
  @end quotation
  
  @code{Long_Integer} is supported.  Other standard integer types are supported
*************** are supported for convenient interface t
*** 13744,13758 ****
  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{220}
  @section RM 3.5.4(29): Integer Types
  
  
  @quotation
  
! "An implementation for a two's complement machine should support
  modular types with a binary modulus up to @code{System.Max_Int*2+2}.  An
! implementation should support a non-binary modules up to @code{Integer'Last}."
  @end quotation
  
  Followed.
--- 14024,14038 ----
  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{21f}
  @section RM 3.5.4(29): Integer Types
  
  
  @quotation
  
! “An implementation for a two’s complement machine should support
  modular types with a binary modulus up to @code{System.Max_Int*2+2}.  An
! implementation should support a non-binary modules up to @code{Integer'Last}.”
  @end quotation
  
  Followed.
*************** Followed.
*** 13760,13778 ****
  @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{221}
  @section RM 3.5.5(8): Enumeration Values
  
  
  @quotation
  
! "For the evaluation of a call on @code{S'Pos} for an enumeration
  subtype, if the value of the operand does not correspond to the internal
  code for any enumeration literal of its type (perhaps due to an
  un-initialized variable), then the implementation should raise
  @code{Program_Error}.  This is particularly important for enumeration
  types with noncontiguous internal codes specified by an
! enumeration_representation_clause."
  @end quotation
  
  Followed.
--- 14040,14058 ----
  @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{220}
  @section RM 3.5.5(8): Enumeration Values
  
  
  @quotation
  
! “For the evaluation of a call on @code{S'Pos} for an enumeration
  subtype, if the value of the operand does not correspond to the internal
  code for any enumeration literal of its type (perhaps due to an
  un-initialized variable), then the implementation should raise
  @code{Program_Error}.  This is particularly important for enumeration
  types with noncontiguous internal codes specified by an
! enumeration_representation_clause.”
  @end quotation
  
  Followed.
*************** Followed.
*** 13780,13796 ****
  @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{222}
  @section RM 3.5.7(17): Float Types
  
  
  @quotation
  
! "An implementation should support @code{Long_Float} in addition to
  @code{Float} if the target machine supports 11 or more digits of
  precision.  No other named floating point subtypes are recommended for
  package @code{Standard}.  Instead, appropriate named floating point subtypes
! should be provided in the library package @code{Interfaces} (see B.2)."
  @end quotation
  
  @code{Short_Float} and @code{Long_Long_Float} are also provided.  The
--- 14060,14076 ----
  @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{221}
  @section RM 3.5.7(17): Float Types
  
  
  @quotation
  
! “An implementation should support @code{Long_Float} in addition to
  @code{Float} if the target machine supports 11 or more digits of
  precision.  No other named floating point subtypes are recommended for
  package @code{Standard}.  Instead, appropriate named floating point subtypes
! should be provided in the library package @code{Interfaces} (see B.2).”
  @end quotation
  
  @code{Short_Float} and @code{Long_Long_Float} are also provided.  The
*************** is a software rather than a hardware for
*** 13809,13865 ****
  @geindex Arrays
  @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{223}
  @section RM 3.6.2(11): Multidimensional Arrays
  
  
  @quotation
  
! "An implementation should normally represent multidimensional arrays in
  row-major order, consistent with the notation used for multidimensional
  array aggregates (see 4.3.3).  However, if a pragma @code{Convention}
! (@code{Fortran}, ...) applies to a multidimensional array type, then
! column-major order should be used instead (see B.5, @emph{Interfacing with Fortran})."
  @end quotation
  
  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{224}
! @section RM 9.6(30-31): Duration'Small
  
  
  @quotation
  
! "Whenever possible in an implementation, the value of @code{Duration'Small}
! should be no greater than 100 microseconds."
  @end quotation
  
  Followed.  (@code{Duration'Small} = 10**(-9)).
  
  @quotation
  
! "The time base for @code{delay_relative_statements} should be monotonic;
! it need not be the same time base as used for @code{Calendar.Clock}."
  @end quotation
  
  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{225}
  @section RM 10.2.1(12): Consistent Representation
  
  
  @quotation
  
! "In an implementation, a type declared in a pre-elaborated package should
  have the same representation in every elaboration of a given version of
  the package, whether the elaborations occur in distinct executions of
  the same program, or in executions of distinct programs or partitions
! that include the given version."
  @end quotation
  
  Followed, except in the case of tagged types.  Tagged types involve
--- 14089,14145 ----
  @geindex Arrays
  @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{222}
  @section RM 3.6.2(11): Multidimensional Arrays
  
  
  @quotation
  
! “An implementation should normally represent multidimensional arrays in
  row-major order, consistent with the notation used for multidimensional
  array aggregates (see 4.3.3).  However, if a pragma @code{Convention}
! (@code{Fortran}, …) applies to a multidimensional array type, then
! column-major order should be used instead (see B.5, @emph{Interfacing with Fortran}).”
  @end quotation
  
  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{223}
! @section RM 9.6(30-31): Duration’Small
  
  
  @quotation
  
! “Whenever possible in an implementation, the value of @code{Duration'Small}
! should be no greater than 100 microseconds.”
  @end quotation
  
  Followed.  (@code{Duration'Small} = 10**(-9)).
  
  @quotation
  
! “The time base for @code{delay_relative_statements} should be monotonic;
! it need not be the same time base as used for @code{Calendar.Clock}.”
  @end quotation
  
  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{224}
  @section RM 10.2.1(12): Consistent Representation
  
  
  @quotation
  
! “In an implementation, a type declared in a pre-elaborated package should
  have the same representation in every elaboration of a given version of
  the package, whether the elaborations occur in distinct executions of
  the same program, or in executions of distinct programs or partitions
! that include the given version.”
  @end quotation
  
  Followed, except in the case of tagged types.  Tagged types involve
*************** advice without severely impacting effici
*** 13871,13894 ****
  @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{226}
  @section RM 11.4.1(19): Exception Information
  
  
  @quotation
  
! "@code{Exception_Message} by default and @code{Exception_Information}
  should produce information useful for
  debugging.  @code{Exception_Message} should be short, about one
  line.  @code{Exception_Information} can be long.  @code{Exception_Message}
  should not include the
  @code{Exception_Name}.  @code{Exception_Information} should include both
! the @code{Exception_Name} and the @code{Exception_Message}."
  @end quotation
  
! Followed.  For each exception that doesn't have a specified
  @code{Exception_Message}, the compiler generates one containing the location
! of the raise statement.  This location has the form 'file_name:line', where
  file_name is the short file name (without path information) and line is the line
  number in the file.  Note that in the case of the Zero Cost Exception
  mechanism, these messages become redundant with the Exception_Information that
--- 14151,14174 ----
  @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{225}
  @section RM 11.4.1(19): Exception Information
  
  
  @quotation
  
! “@code{Exception_Message} by default and @code{Exception_Information}
  should produce information useful for
  debugging.  @code{Exception_Message} should be short, about one
  line.  @code{Exception_Information} can be long.  @code{Exception_Message}
  should not include the
  @code{Exception_Name}.  @code{Exception_Information} should include both
! the @code{Exception_Name} and the @code{Exception_Message}.”
  @end quotation
  
! Followed.  For each exception that doesn’t have a specified
  @code{Exception_Message}, the compiler generates one containing the location
! of the raise statement.  This location has the form ‘file_name:line’, where
  file_name is the short file name (without path information) and line is the line
  number in the file.  Note that in the case of the Zero Cost Exception
  mechanism, these messages become redundant with the Exception_Information that
*************** Pragma @code{Discard_Names}.
*** 13902,13915 ****
  @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{227}
  @section RM 11.5(28): Suppression of Checks
  
  
  @quotation
  
! "The implementation should minimize the code executed for checks that
! have been suppressed."
  @end quotation
  
  Followed.
--- 14182,14195 ----
  @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{226}
  @section RM 11.5(28): Suppression of Checks
  
  
  @quotation
  
! “The implementation should minimize the code executed for checks that
! have been suppressed.”
  @end quotation
  
  Followed.
*************** Followed.
*** 13917,13936 ****
  @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{228}
  @section RM 13.1 (21-24): Representation Clauses
  
  
  @quotation
  
! "The recommended level of support for all representation items is
  qualified as follows:
  
  An implementation need not support representation items containing
  nonstatic expressions, except that an implementation should support a
  representation item for a given entity if each nonstatic expression in
  the representation item is a name that statically denotes a constant
! declared before the entity."
  @end quotation
  
  Followed.  In fact, GNAT goes beyond the recommended level of support
--- 14197,14216 ----
  @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{227}
  @section RM 13.1 (21-24): Representation Clauses
  
  
  @quotation
  
! “The recommended level of support for all representation items is
  qualified as follows:
  
  An implementation need not support representation items containing
  nonstatic expressions, except that an implementation should support a
  representation item for a given entity if each nonstatic expression in
  the representation item is a name that statically denotes a constant
! declared before the entity.”
  @end quotation
  
  Followed.  In fact, GNAT goes beyond the recommended level of support
*************** described above.
*** 13957,13964 ****
  
  @quotation
  
! "An aliased component, or a component whose type is by-reference, should
! always be allocated at an addressable location."
  @end quotation
  
  Followed.
--- 14237,14244 ----
  
  @quotation
  
! “An aliased component, or a component whose type is by-reference, should
! always be allocated at an addressable location.”
  @end quotation
  
  Followed.
*************** Followed.
*** 13966,13978 ****
  @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{229}
  @section RM 13.2(6-8): Packed Types
  
  
  @quotation
  
! "If a type is packed, then the implementation should try to minimize
  storage allocated to objects of the type, possibly at the expense of
  speed of accessing components, subject to reasonable complexity in
  addressing calculations.
--- 14246,14258 ----
  @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{228}
  @section RM 13.2(6-8): Packed Types
  
  
  @quotation
  
! “If a type is packed, then the implementation should try to minimize
  storage allocated to objects of the type, possibly at the expense of
  speed of accessing components, subject to reasonable complexity in
  addressing calculations.
*************** possible subject to the Sizes of the com
*** 13984,13990 ****
  any @emph{record_representation_clause} that applies to the type; the
  implementation may, but need not, reorder components or cross aligned
  word boundaries to improve the packing.  A component whose @code{Size} is
! greater than the word size may be allocated an integral number of words."
  @end quotation
  
  Followed.  Tight packing of arrays is supported for all component sizes
--- 14264,14270 ----
  any @emph{record_representation_clause} that applies to the type; the
  implementation may, but need not, reorder components or cross aligned
  word boundaries to improve the packing.  A component whose @code{Size} is
! greater than the word size may be allocated an integral number of words.”
  @end quotation
  
  Followed.  Tight packing of arrays is supported for all component sizes
*************** subcomponent of the packed type.
*** 13996,14003 ****
  
  @quotation
  
! "An implementation should support Address clauses for imported
! subprograms."
  @end quotation
  
  Followed.
--- 14276,14283 ----
  
  @quotation
  
! “An implementation should support Address clauses for imported
! subprograms.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14005,14029 ****
  @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{22a}
  @section RM 13.3(14-19): Address Clauses
  
  
  @quotation
  
! "For an array @code{X}, @code{X'Address} should point at the first
! component of the array, and not at the array bounds."
  @end quotation
  
  Followed.
  
  @quotation
  
! "The recommended level of support for the @code{Address} attribute is:
  
  @code{X'Address} should produce a useful result if @code{X} is an
  object that is aliased or of a by-reference type, or is an entity whose
! @code{Address} has been specified."
  @end quotation
  
  Followed.  A valid address will be produced even if none of those
--- 14285,14309 ----
  @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{229}
  @section RM 13.3(14-19): Address Clauses
  
  
  @quotation
  
! “For an array @code{X}, @code{X'Address} should point at the first
! component of the array, and not at the array bounds.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “The recommended level of support for the @code{Address} attribute is:
  
  @code{X'Address} should produce a useful result if @code{X} is an
  object that is aliased or of a by-reference type, or is an entity whose
! @code{Address} has been specified.”
  @end quotation
  
  Followed.  A valid address will be produced even if none of those
*************** memory to ensure the address is valid.
*** 14032,14056 ****
  
  @quotation
  
! "An implementation should support @code{Address} clauses for imported
! subprograms."
  @end quotation
  
  Followed.
  
  @quotation
  
! "Objects (including subcomponents) that are aliased or of a by-reference
! type should be allocated on storage element boundaries."
  @end quotation
  
  Followed.
  
  @quotation
  
! "If the @code{Address} of an object is specified, or it is imported or exported,
  then the implementation should not perform optimizations based on
! assumptions of no aliases."
  @end quotation
  
  Followed.
--- 14312,14336 ----
  
  @quotation
  
! “An implementation should support @code{Address} clauses for imported
! subprograms.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “Objects (including subcomponents) that are aliased or of a by-reference
! type should be allocated on storage element boundaries.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “If the @code{Address} of an object is specified, or it is imported or exported,
  then the implementation should not perform optimizations based on
! assumptions of no aliases.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14058,14113 ****
  @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{22b}
  @section RM 13.3(29-35): Alignment Clauses
  
  
  @quotation
  
! "The recommended level of support for the @code{Alignment} attribute for
  subtypes is:
  
  An implementation should support specified Alignments that are factors
  and multiples of the number of storage elements per word, subject to the
! following:"
  @end quotation
  
  Followed.
  
  @quotation
  
! "An implementation need not support specified Alignments for
  combinations of Sizes and Alignments that cannot be easily
! loaded and stored by available machine instructions."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An implementation need not support specified Alignments that are
  greater than the maximum @code{Alignment} the implementation ever returns by
! default."
  @end quotation
  
  Followed.
  
  @quotation
  
! "The recommended level of support for the @code{Alignment} attribute for
  objects is:
  
! Same as above, for subtypes, but in addition:"
  @end quotation
  
  Followed.
  
  @quotation
  
! "For stand-alone library-level objects of statically constrained
  subtypes, the implementation should support all alignments
  supported by the target linker.  For example, page alignment is likely to
! be supported for such objects, but not for subtypes."
  @end quotation
  
  Followed.
--- 14338,14393 ----
  @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{22a}
  @section RM 13.3(29-35): Alignment Clauses
  
  
  @quotation
  
! “The recommended level of support for the @code{Alignment} attribute for
  subtypes is:
  
  An implementation should support specified Alignments that are factors
  and multiples of the number of storage elements per word, subject to the
! following:”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An implementation need not support specified Alignments for
  combinations of Sizes and Alignments that cannot be easily
! loaded and stored by available machine instructions.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An implementation need not support specified Alignments that are
  greater than the maximum @code{Alignment} the implementation ever returns by
! default.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “The recommended level of support for the @code{Alignment} attribute for
  objects is:
  
! Same as above, for subtypes, but in addition:”
  @end quotation
  
  Followed.
  
  @quotation
  
! “For stand-alone library-level objects of statically constrained
  subtypes, the implementation should support all alignments
  supported by the target linker.  For example, page alignment is likely to
! be supported for such objects, but not for subtypes.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14115,14158 ****
  @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{22c}
  @section RM 13.3(42-43): Size Clauses
  
  
  @quotation
  
! "The recommended level of support for the @code{Size} attribute of
  objects is:
  
  A @code{Size} clause should be supported for an object if the specified
! @code{Size} is at least as large as its subtype's @code{Size}, and
  corresponds to a size in storage elements that is a multiple of the
! object's @code{Alignment} (if the @code{Alignment} is nonzero)."
  @end quotation
  
  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{22d}
  @section RM 13.3(50-56): Size Clauses
  
  
  @quotation
  
! "If the @code{Size} of a subtype is specified, and allows for efficient
  independent addressability (see 9.10) on the target architecture, then
  the @code{Size} of the following objects of the subtype should equal the
  @code{Size} of the subtype:
  
! Aliased objects (including components)."
  @end quotation
  
  Followed.
  
  @quotation
  
! "@cite{Size} clause on a composite subtype should not affect the
! internal layout of components."
  @end quotation
  
  Followed. But note that this can be overridden by use of the implementation
--- 14395,14438 ----
  @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{22b}
  @section RM 13.3(42-43): Size Clauses
  
  
  @quotation
  
! “The recommended level of support for the @code{Size} attribute of
  objects is:
  
  A @code{Size} clause should be supported for an object if the specified
! @code{Size} is at least as large as its subtype’s @code{Size}, and
  corresponds to a size in storage elements that is a multiple of the
! object’s @code{Alignment} (if the @code{Alignment} is nonzero).”
  @end quotation
  
  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{22c}
  @section RM 13.3(50-56): Size Clauses
  
  
  @quotation
  
! “If the @code{Size} of a subtype is specified, and allows for efficient
  independent addressability (see 9.10) on the target architecture, then
  the @code{Size} of the following objects of the subtype should equal the
  @code{Size} of the subtype:
  
! Aliased objects (including components).”
  @end quotation
  
  Followed.
  
  @quotation
  
! “@cite{Size} clause on a composite subtype should not affect the
! internal layout of components.”
  @end quotation
  
  Followed. But note that this can be overridden by use of the implementation
*************** pragma Implicit_Packing in the case of p
*** 14160,14182 ****
  
  @quotation
  
! "The recommended level of support for the @code{Size} attribute of subtypes is:
  
  The @code{Size} (if not specified) of a static discrete or fixed point
  subtype should be the number of bits needed to represent each value
  belonging to the subtype using an unbiased representation, leaving space
  for a sign bit only if the subtype contains negative values.  If such a
  subtype is a first subtype, then an implementation should support a
! specified @code{Size} for it that reflects this representation."
  @end quotation
  
  Followed.
  
  @quotation
  
! "For a subtype implemented with levels of indirection, the @code{Size}
  should include the size of the pointers, but not the size of what they
! point at."
  @end quotation
  
  Followed.
--- 14440,14462 ----
  
  @quotation
  
! “The recommended level of support for the @code{Size} attribute of subtypes is:
  
  The @code{Size} (if not specified) of a static discrete or fixed point
  subtype should be the number of bits needed to represent each value
  belonging to the subtype using an unbiased representation, leaving space
  for a sign bit only if the subtype contains negative values.  If such a
  subtype is a first subtype, then an implementation should support a
! specified @code{Size} for it that reflects this representation.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “For a subtype implemented with levels of indirection, the @code{Size}
  should include the size of the pointers, but not the size of what they
! point at.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14184,14213 ****
  @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{22e}
  @section RM 13.3(71-73): Component Size Clauses
  
  
  @quotation
  
! "The recommended level of support for the @code{Component_Size}
  attribute is:
  
  An implementation need not support specified @code{Component_Sizes} that are
! less than the @code{Size} of the component subtype."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An implementation should support specified Component_Sizes that
  are factors and multiples of the word size.  For such
  Component_Sizes, the array should contain no gaps between
  components.  For other Component_Sizes (if supported), the array
  should contain no gaps between components when packing is also
  specified; the implementation should forbid this combination in cases
! where it cannot support a no-gaps representation."
  @end quotation
  
  Followed.
--- 14464,14493 ----
  @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{22d}
  @section RM 13.3(71-73): Component Size Clauses
  
  
  @quotation
  
! “The recommended level of support for the @code{Component_Size}
  attribute is:
  
  An implementation need not support specified @code{Component_Sizes} that are
! less than the @code{Size} of the component subtype.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An implementation should support specified Component_Sizes that
  are factors and multiples of the word size.  For such
  Component_Sizes, the array should contain no gaps between
  components.  For other Component_Sizes (if supported), the array
  should contain no gaps between components when packing is also
  specified; the implementation should forbid this combination in cases
! where it cannot support a no-gaps representation.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14218,14235 ****
  @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{22f}
  @section RM 13.4(9-10): Enumeration Representation Clauses
  
  
  @quotation
  
! "The recommended level of support for enumeration representation clauses
  is:
  
  An implementation need not support enumeration representation clauses
  for boolean types, but should at minimum support the internal codes in
! the range @code{System.Min_Int .. System.Max_Int}."
  @end quotation
  
  Followed.
--- 14498,14515 ----
  @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{22e}
  @section RM 13.4(9-10): Enumeration Representation Clauses
  
  
  @quotation
  
! “The recommended level of support for enumeration representation clauses
  is:
  
  An implementation need not support enumeration representation clauses
  for boolean types, but should at minimum support the internal codes in
! the range @code{System.Min_Int .. System.Max_Int}.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14240,14297 ****
  @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{230}
  @section RM 13.5.1(17-22): Record Representation Clauses
  
  
  @quotation
  
! "The recommended level of support for
  @emph{record_representation_clause}s is:
  
  An implementation should support storage places that can be extracted
  with a load, mask, shift sequence of machine code, and set with a load,
  shift, mask, store sequence, given the available machine instructions
! and run-time model."
  @end quotation
  
  Followed.
  
  @quotation
  
! "A storage place should be supported if its size is equal to the
  @code{Size} of the component subtype, and it starts and ends on a
! boundary that obeys the @code{Alignment} of the component subtype."
  @end quotation
  
  Followed.
  
  @quotation
  
! "If the default bit ordering applies to the declaration of a given type,
! then for a component whose subtype's @code{Size} is less than the word
  size, any storage place that does not cross an aligned word boundary
! should be supported."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An implementation may reserve a storage place for the tag field of a
! tagged type, and disallow other components from overlapping that place."
  @end quotation
  
  Followed.  The storage place for the tag field is the beginning of the tagged
! record, and its size is Address'Size.  GNAT will reject an explicit component
  clause for the tag field.
  
  @quotation
  
! "An implementation need not support a @emph{component_clause} for a
  component of an extension part if the storage place is not after the
  storage places of all components of the parent type, whether or not
! those storage places had been specified."
  @end quotation
  
  Followed.  The above advice on record representation clauses is followed,
--- 14520,14577 ----
  @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{22f}
  @section RM 13.5.1(17-22): Record Representation Clauses
  
  
  @quotation
  
! “The recommended level of support for
  @emph{record_representation_clause}s is:
  
  An implementation should support storage places that can be extracted
  with a load, mask, shift sequence of machine code, and set with a load,
  shift, mask, store sequence, given the available machine instructions
! and run-time model.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “A storage place should be supported if its size is equal to the
  @code{Size} of the component subtype, and it starts and ends on a
! boundary that obeys the @code{Alignment} of the component subtype.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “If the default bit ordering applies to the declaration of a given type,
! then for a component whose subtype’s @code{Size} is less than the word
  size, any storage place that does not cross an aligned word boundary
! should be supported.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An implementation may reserve a storage place for the tag field of a
! tagged type, and disallow other components from overlapping that place.”
  @end quotation
  
  Followed.  The storage place for the tag field is the beginning of the tagged
! record, and its size is Address’Size.  GNAT will reject an explicit component
  clause for the tag field.
  
  @quotation
  
! “An implementation need not support a @emph{component_clause} for a
  component of an extension part if the storage place is not after the
  storage places of all components of the parent type, whether or not
! those storage places had been specified.”
  @end quotation
  
  Followed.  The above advice on record representation clauses is followed,
*************** and all mentioned features are implement
*** 14300,14318 ****
  @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{231}
  @section RM 13.5.2(5): Storage Place Attributes
  
  
  @quotation
  
! "If a component is represented using some form of pointer (such as an
  offset) to the actual data of the component, and this data is contiguous
  with the rest of the object, then the storage place attributes should
  reflect the place of the actual data, not the pointer.  If a component is
  allocated discontinuously from the rest of the object, then a warning
  should be generated upon reference to one of its storage place
! attributes."
  @end quotation
  
  Followed.  There are no such components in GNAT.
--- 14580,14598 ----
  @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{230}
  @section RM 13.5.2(5): Storage Place Attributes
  
  
  @quotation
  
! “If a component is represented using some form of pointer (such as an
  offset) to the actual data of the component, and this data is contiguous
  with the rest of the object, then the storage place attributes should
  reflect the place of the actual data, not the pointer.  If a component is
  allocated discontinuously from the rest of the object, then a warning
  should be generated upon reference to one of its storage place
! attributes.”
  @end quotation
  
  Followed.  There are no such components in GNAT.
*************** Followed.  There are no such components
*** 14320,14336 ****
  @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{232}
  @section RM 13.5.3(7-8): Bit Ordering
  
  
  @quotation
  
! "The recommended level of support for the non-default bit ordering is:
  
  If @code{Word_Size} = @code{Storage_Unit}, then the implementation
  should support the non-default bit ordering in addition to the default
! bit ordering."
  @end quotation
  
  Followed.  Word size does not equal storage size in this implementation.
--- 14600,14616 ----
  @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{231}
  @section RM 13.5.3(7-8): Bit Ordering
  
  
  @quotation
  
! “The recommended level of support for the non-default bit ordering is:
  
  If @code{Word_Size} = @code{Storage_Unit}, then the implementation
  should support the non-default bit ordering in addition to the default
! bit ordering.”
  @end quotation
  
  Followed.  Word size does not equal storage size in this implementation.
*************** Thus non-default bit ordering is not sup
*** 14340,14352 ****
  @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{233}
  @section RM 13.7(37): Address as Private
  
  
  @quotation
  
! "@cite{Address} should be of a private type."
  @end quotation
  
  Followed.
--- 14620,14632 ----
  @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{232}
  @section RM 13.7(37): Address as Private
  
  
  @quotation
  
! “@cite{Address} should be of a private type.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14358,14373 ****
  @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{234}
  @section RM 13.7.1(16): Address Operations
  
  
  @quotation
  
! "Operations in @code{System} and its children should reflect the target
  environment semantics as closely as is reasonable.  For example, on most
! machines, it makes sense for address arithmetic to 'wrap around'.
! Operations that do not make sense should raise @code{Program_Error}."
  @end quotation
  
  Followed.  Address arithmetic is modular arithmetic that wraps around.  No
--- 14638,14653 ----
  @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{233}
  @section RM 13.7.1(16): Address Operations
  
  
  @quotation
  
! “Operations in @code{System} and its children should reflect the target
  environment semantics as closely as is reasonable.  For example, on most
! machines, it makes sense for address arithmetic to ‘wrap around’.
! Operations that do not make sense should raise @code{Program_Error}.”
  @end quotation
  
  Followed.  Address arithmetic is modular arithmetic that wraps around.  No
*************** operation raises @code{Program_Error}, s
*** 14376,14400 ****
  @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{235}
  @section RM 13.9(14-17): Unchecked Conversion
  
  
  @quotation
  
! "The @code{Size} of an array object should not include its bounds; hence,
! the bounds should not be part of the converted data."
  @end quotation
  
  Followed.
  
  @quotation
  
! "The implementation should not generate unnecessary run-time checks to
  ensure that the representation of @code{S} is a representation of the
  target type.  It should take advantage of the permission to return by
  reference when possible.  Restrictions on unchecked conversions should be
! avoided unless required by the target environment."
  @end quotation
  
  Followed.  There are no restrictions on unchecked conversion.  A warning is
--- 14656,14680 ----
  @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{234}
  @section RM 13.9(14-17): Unchecked Conversion
  
  
  @quotation
  
! “The @code{Size} of an array object should not include its bounds; hence,
! the bounds should not be part of the converted data.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “The implementation should not generate unnecessary run-time checks to
  ensure that the representation of @code{S} is a representation of the
  target type.  It should take advantage of the permission to return by
  reference when possible.  Restrictions on unchecked conversions should be
! avoided unless required by the target environment.”
  @end quotation
  
  Followed.  There are no restrictions on unchecked conversion.  A warning is
*************** the semantics in this case may be target
*** 14403,14409 ****
  
  @quotation
  
! "The recommended level of support for unchecked conversions is:
  
  Unchecked conversions should be supported and should be reversible in
  the cases where this clause defines the result.  To enable meaningful use
--- 14683,14689 ----
  
  @quotation
  
! “The recommended level of support for unchecked conversions is:
  
  Unchecked conversions should be supported and should be reversible in
  the cases where this clause defines the result.  To enable meaningful use
*************** of unchecked conversion, a contiguous re
*** 14411,14417 ****
  elementary subtypes, for statically constrained array subtypes whose
  component subtype is one of the subtypes described in this paragraph,
  and for record subtypes without discriminants whose component subtypes
! are described in this paragraph."
  @end quotation
  
  Followed.
--- 14691,14697 ----
  elementary subtypes, for statically constrained array subtypes whose
  component subtype is one of the subtypes described in this paragraph,
  and for record subtypes without discriminants whose component subtypes
! are described in this paragraph.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14420,14434 ****
  @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{236}
  @section RM 13.11(23-25): Implicit Heap Usage
  
  
  @quotation
  
! "An implementation should document any cases in which it dynamically
  allocates heap storage for a purpose other than the evaluation of an
! allocator."
  @end quotation
  
  Followed, the only other points at which heap storage is dynamically
--- 14700,14714 ----
  @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{235}
  @section RM 13.11(23-25): Implicit Heap Usage
  
  
  @quotation
  
! “An implementation should document any cases in which it dynamically
  allocates heap storage for a purpose other than the evaluation of an
! allocator.”
  @end quotation
  
  Followed, the only other points at which heap storage is dynamically
*************** stack is used for returning variable len
*** 14452,14469 ****
  
  @quotation
  
! "A default (implementation-provided) storage pool for an
  access-to-constant type should not have overhead to support deallocation of
! individual objects."
  @end quotation
  
  Followed.
  
  @quotation
  
! "A storage pool for an anonymous access type should be created at the
  point of an allocator for the type, and be reclaimed when the designated
! object becomes inaccessible."
  @end quotation
  
  Followed.
--- 14732,14749 ----
  
  @quotation
  
! “A default (implementation-provided) storage pool for an
  access-to-constant type should not have overhead to support deallocation of
! individual objects.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “A storage pool for an anonymous access type should be created at the
  point of an allocator for the type, and be reclaimed when the designated
! object becomes inaccessible.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14471,14484 ****
  @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{237}
  @section RM 13.11.2(17): Unchecked Deallocation
  
  
  @quotation
  
! "For a standard storage pool, @code{Free} should actually reclaim the
! storage."
  @end quotation
  
  Followed.
--- 14751,14764 ----
  @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{236}
  @section RM 13.11.2(17): Unchecked Deallocation
  
  
  @quotation
  
! “For a standard storage pool, @code{Free} should actually reclaim the
! storage.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14486,14502 ****
  @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{238}
  @section RM 13.13.2(1.6): Stream Oriented Attributes
  
  
  @quotation
  
! "If not specified, the value of Stream_Size for an elementary type
  should be the number of bits that corresponds to the minimum number of
  stream elements required by the first subtype of the type, rounded up
  to the nearest factor or multiple of the word size that is also a
! multiple of the stream element size."
  @end quotation
  
  Followed, except that the number of stream elements is 1, 2, 3, 4 or 8.
--- 14766,14782 ----
  @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{237}
  @section RM 13.13.2(1.6): Stream Oriented Attributes
  
  
  @quotation
  
! “If not specified, the value of Stream_Size for an elementary type
  should be the number of bits that corresponds to the minimum number of
  stream elements required by the first subtype of the type, rounded up
  to the nearest factor or multiple of the word size that is also a
! multiple of the stream element size.”
  @end quotation
  
  Followed, except that the number of stream elements is 1, 2, 3, 4 or 8.
*************** scalar types. This XDR alternative can b
*** 14517,14533 ****
  @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{239}
  @section RM A.1(52): Names of Predefined Numeric Types
  
  
  @quotation
  
! "If an implementation provides additional named predefined integer types,
  then the names should end with @code{Integer} as in
  @code{Long_Integer}.  If an implementation provides additional named
  predefined floating point types, then the names should end with
! @code{Float} as in @code{Long_Float}."
  @end quotation
  
  Followed.
--- 14797,14813 ----
  @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{238}
  @section RM A.1(52): Names of Predefined Numeric Types
  
  
  @quotation
  
! “If an implementation provides additional named predefined integer types,
  then the names should end with @code{Integer} as in
  @code{Long_Integer}.  If an implementation provides additional named
  predefined floating point types, then the names should end with
! @code{Float} as in @code{Long_Float}.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14535,14550 ****
  @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{23a}
  @section RM A.3.2(49): @code{Ada.Characters.Handling}
  
  
  @quotation
  
! "If an implementation provides a localized definition of @code{Character}
  or @code{Wide_Character}, then the effects of the subprograms in
  @code{Characters.Handling} should reflect the localizations.
! See also 3.5.2."
  @end quotation
  
  Followed.  GNAT provides no such localized definitions.
--- 14815,14830 ----
  @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{239}
  @section RM A.3.2(49): @code{Ada.Characters.Handling}
  
  
  @quotation
  
! “If an implementation provides a localized definition of @code{Character}
  or @code{Wide_Character}, then the effects of the subprograms in
  @code{Characters.Handling} should reflect the localizations.
! See also 3.5.2.”
  @end quotation
  
  Followed.  GNAT provides no such localized definitions.
*************** Followed.  GNAT provides no such localiz
*** 14552,14565 ****
  @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{23b}
  @section RM A.4.4(106): Bounded-Length String Handling
  
  
  @quotation
  
! "Bounded string objects should not be implemented by implicit pointers
! and dynamic allocation."
  @end quotation
  
  Followed.  No implicit pointers or dynamic allocation are used.
--- 14832,14845 ----
  @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{23a}
  @section RM A.4.4(106): Bounded-Length String Handling
  
  
  @quotation
  
! “Bounded string objects should not be implemented by implicit pointers
! and dynamic allocation.”
  @end quotation
  
  Followed.  No implicit pointers or dynamic allocation are used.
*************** Followed.  No implicit pointers or dynam
*** 14567,14593 ****
  @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{23c}
  @section RM A.5.2(46-47): Random Number Generation
  
  
  @quotation
  
! "Any storage associated with an object of type @code{Generator} should be
! reclaimed on exit from the scope of the object."
  @end quotation
  
  Followed.
  
  @quotation
  
! "If the generator period is sufficiently long in relation to the number
  of distinct initiator values, then each possible value of
  @code{Initiator} passed to @code{Reset} should initiate a sequence of
  random numbers that does not, in a practical sense, overlap the sequence
  initiated by any other value.  If this is not possible, then the mapping
  between initiator values and generator states should be a rapidly
! varying function of the initiator value."
  @end quotation
  
  Followed.  The generator period is sufficiently long for the first
--- 14847,14873 ----
  @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{23b}
  @section RM A.5.2(46-47): Random Number Generation
  
  
  @quotation
  
! “Any storage associated with an object of type @code{Generator} should be
! reclaimed on exit from the scope of the object.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “If the generator period is sufficiently long in relation to the number
  of distinct initiator values, then each possible value of
  @code{Initiator} passed to @code{Reset} should initiate a sequence of
  random numbers that does not, in a practical sense, overlap the sequence
  initiated by any other value.  If this is not possible, then the mapping
  between initiator values and generator states should be a rapidly
! varying function of the initiator value.”
  @end quotation
  
  Followed.  The generator period is sufficiently long for the first
*************** condition here to hold true.
*** 14595,14614 ****
  
  @geindex Get_Immediate
  
! @node RM A 10 7 23 Get_Immediate,RM B 1 39-41 Pragma Export,RM A 5 2 46-47 Random Number Generation,Implementation Advice
! @anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{23d}
  @section RM A.10.7(23): @code{Get_Immediate}
  
  
  @quotation
  
! "The @code{Get_Immediate} procedures should be implemented with
  unbuffered input.  For a device such as a keyboard, input should be
  available if a key has already been typed, whereas for a disk
  file, input should always be available except at end of file.  For a file
  associated with a keyboard-like device, any line-editing features of the
  underlying operating system should be disabled during the execution of
! @code{Get_Immediate}."
  @end quotation
  
  Followed on all targets except VxWorks. For VxWorks, there is no way to
--- 14875,14894 ----
  
  @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{23c}
  @section RM A.10.7(23): @code{Get_Immediate}
  
  
  @quotation
  
! “The @code{Get_Immediate} procedures should be implemented with
  unbuffered input.  For a device such as a keyboard, input should be
  available if a key has already been typed, whereas for a disk
  file, input should always be available except at end of file.  For a file
  associated with a keyboard-like device, any line-editing features of the
  underlying operating system should be disabled during the execution of
! @code{Get_Immediate}.”
  @end quotation
  
  Followed on all targets except VxWorks. For VxWorks, there is no way to
*************** flushed before the @code{Get_Immediate}
*** 14617,14632 ****
  @code{Interfaces.Vxworks.IO} is provided that contains routines to enable
  this functionality.
  
  @geindex Export
  
! @node RM B 1 39-41 Pragma Export,RM B 2 12-13 Package Interfaces,RM A 10 7 23 Get_Immediate,Implementation Advice
  @anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{23e}
  @section RM B.1(39-41): Pragma @code{Export}
  
  
  @quotation
  
! "If an implementation supports pragma @code{Export} to a given language,
  then it should also allow the main subprogram to be written in that
  language.  It should support some mechanism for invoking the elaboration
  of the Ada library units included in the system, and for invoking the
--- 14897,14933 ----
  @code{Interfaces.Vxworks.IO} is provided that contains routines to enable
  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{23d}
+ @section RM A.18: @code{Containers}
+ 
+ 
+ All implementation advice pertaining to Ada.Containers and its
+ child units (that is, all implementation advice occurring within
+ section A.18 and its subsections) is followed except for A.18.24(17):
+ 
+ @quotation
+ 
+ “Bounded ordered set objects should be implemented without implicit pointers or dynamic allocation. “
+ @end quotation
+ 
+ The implementations of the two Reference_Preserving_Key functions of
+ the generic package Ada.Containers.Bounded_Ordered_Sets each currently make
+ use of dynamic allocation; other operations on bounded ordered set objects
+ 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{23e}
  @section RM B.1(39-41): Pragma @code{Export}
  
  
  @quotation
  
! “If an implementation supports pragma @code{Export} to a given language,
  then it should also allow the main subprogram to be written in that
  language.  It should support some mechanism for invoking the elaboration
  of the Ada library units included in the system, and for invoking the
*************** recommended mechanism is to provide two
*** 14635,14649 ****
  @code{adainit} and @code{adafinal}.  @code{adainit} should contain the
  elaboration code for library units.  @code{adafinal} should contain the
  finalization code.  These subprograms should have no effect the second
! and subsequent time they are called."
  @end quotation
  
  Followed.
  
  @quotation
  
! "Automatic elaboration of pre-elaborated packages should be
! provided when pragma @code{Export} is supported."
  @end quotation
  
  Followed when the main program is in Ada.  If the main program is in a
--- 14936,14950 ----
  @code{adainit} and @code{adafinal}.  @code{adainit} should contain the
  elaboration code for library units.  @code{adafinal} should contain the
  finalization code.  These subprograms should have no effect the second
! and subsequent time they are called.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “Automatic elaboration of pre-elaborated packages should be
! provided when pragma @code{Export} is supported.”
  @end quotation
  
  Followed when the main program is in Ada.  If the main program is in a
*************** packages.
*** 14653,14664 ****
  
  @quotation
  
! "For each supported convention @emph{L} other than @code{Intrinsic}, an
  implementation should support @code{Import} and @code{Export} pragmas
  for objects of @emph{L}-compatible types and for subprograms, and pragma
  @cite{Convention} for @emph{L}-eligible types and for subprograms,
  presuming the other language has corresponding features.  Pragma
! @code{Convention} need not be supported for scalar types."
  @end quotation
  
  Followed.
--- 14954,14965 ----
  
  @quotation
  
! “For each supported convention @emph{L} other than @code{Intrinsic}, an
  implementation should support @code{Import} and @code{Export} pragmas
  for objects of @emph{L}-compatible types and for subprograms, and pragma
  @cite{Convention} for @emph{L}-eligible types and for subprograms,
  presuming the other language has corresponding features.  Pragma
! @code{Convention} need not be supported for scalar types.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14674,14695 ****
  
  @quotation
  
! "For each implementation-defined convention identifier, there should be a
  child package of package Interfaces with the corresponding name.  This
  package should contain any declarations that would be useful for
  interfacing to the language (implementation) represented by the
  convention.  Any declarations useful for interfacing to any language on
  the given hardware architecture should be provided directly in
! @code{Interfaces}."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An implementation supporting an interface to C, COBOL, or Fortran should
  provide the corresponding package or packages described in the following
! clauses."
  @end quotation
  
  Followed.  GNAT provides all the packages described in this section.
--- 14975,14996 ----
  
  @quotation
  
! “For each implementation-defined convention identifier, there should be a
  child package of package Interfaces with the corresponding name.  This
  package should contain any declarations that would be useful for
  interfacing to the language (implementation) represented by the
  convention.  Any declarations useful for interfacing to any language on
  the given hardware architecture should be provided directly in
! @code{Interfaces}.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An implementation supporting an interface to C, COBOL, or Fortran should
  provide the corresponding package or packages described in the following
! clauses.”
  @end quotation
  
  Followed.  GNAT provides all the packages described in this section.
*************** Followed.  GNAT provides all the package
*** 14704,14763 ****
  
  @quotation
  
! "An implementation should support the following interface correspondences
! between Ada and C."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada procedure corresponds to a void-returning C function."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada function corresponds to a non-void C function."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada @code{in} scalar parameter is passed as a scalar argument to a C
! function."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada @code{in} parameter of an access-to-object type with designated
  type @code{T} is passed as a @code{t*} argument to a C function,
! where @code{t} is the C type corresponding to the Ada type @code{T}."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada access @code{T} parameter, or an Ada @code{out} or @code{in out}
  parameter of an elementary type @code{T}, is passed as a @code{t*}
  argument to a C function, where @code{t} is the C type corresponding to
  the Ada type @code{T}.  In the case of an elementary @code{out} or
  @code{in out} parameter, a pointer to a temporary copy is used to
! preserve by-copy semantics."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada parameter of a record type @code{T}, of any mode, is passed as a
  @code{t*} argument to a C function, where @code{t} is the C
! structure corresponding to the Ada type @code{T}."
  @end quotation
  
  Followed.  This convention may be overridden by the use of the C_Pass_By_Copy
--- 15005,15064 ----
  
  @quotation
  
! “An implementation should support the following interface correspondences
! between Ada and C.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada procedure corresponds to a void-returning C function.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada function corresponds to a non-void C function.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada @code{in} scalar parameter is passed as a scalar argument to a C
! function.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada @code{in} parameter of an access-to-object type with designated
  type @code{T} is passed as a @code{t*} argument to a C function,
! where @code{t} is the C type corresponding to the Ada type @code{T}.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada access @code{T} parameter, or an Ada @code{out} or @code{in out}
  parameter of an elementary type @code{T}, is passed as a @code{t*}
  argument to a C function, where @code{t} is the C type corresponding to
  the Ada type @code{T}.  In the case of an elementary @code{out} or
  @code{in out} parameter, a pointer to a temporary copy is used to
! preserve by-copy semantics.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada parameter of a record type @code{T}, of any mode, is passed as a
  @code{t*} argument to a C function, where @code{t} is the C
! structure corresponding to the Ada type @code{T}.”
  @end quotation
  
  Followed.  This convention may be overridden by the use of the C_Pass_By_Copy
*************** call using an extended import or export
*** 14766,14783 ****
  
  @quotation
  
! "An Ada parameter of an array type with component type @code{T}, of any
  mode, is passed as a @code{t*} argument to a C function, where
! @code{t} is the C type corresponding to the Ada type @code{T}."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada parameter of an access-to-subprogram type is passed as a pointer
  to a C function whose prototype corresponds to the designated
! subprogram's specification."
  @end quotation
  
  Followed.
--- 15067,15084 ----
  
  @quotation
  
! “An Ada parameter of an array type with component type @code{T}, of any
  mode, is passed as a @code{t*} argument to a C function, where
! @code{t} is the C type corresponding to the Ada type @code{T}.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada parameter of an access-to-subprogram type is passed as a pointer
  to a C function whose prototype corresponds to the designated
! subprogram’s specification.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14792,14824 ****
  
  @quotation
  
! "An Ada implementation should support the following interface
! correspondences between Ada and COBOL."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada access @code{T} parameter is passed as a @code{BY REFERENCE} data item of
! the COBOL type corresponding to @code{T}."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada in scalar parameter is passed as a @code{BY CONTENT} data item of
! the corresponding COBOL type."
  @end quotation
  
  Followed.
  
  @quotation
  
! "Any other Ada parameter is passed as a @code{BY REFERENCE} data item of the
  COBOL type corresponding to the Ada parameter type; for scalars, a local
! copy is used if necessary to ensure by-copy semantics."
  @end quotation
  
  Followed.
--- 15093,15125 ----
  
  @quotation
  
! “An Ada implementation should support the following interface
! correspondences between Ada and COBOL.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada access @code{T} parameter is passed as a @code{BY REFERENCE} data item of
! the COBOL type corresponding to @code{T}.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada in scalar parameter is passed as a @code{BY CONTENT} data item of
! the corresponding COBOL type.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “Any other Ada parameter is passed as a @code{BY REFERENCE} data item of the
  COBOL type corresponding to the Ada parameter type; for scalars, a local
! copy is used if necessary to ensure by-copy semantics.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14833,14876 ****
  
  @quotation
  
! "An Ada implementation should support the following interface
! correspondences between Ada and Fortran:"
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada procedure corresponds to a Fortran subroutine."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada function corresponds to a Fortran function."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada parameter of an elementary, array, or record type @code{T} is
  passed as a @code{T} argument to a Fortran procedure, where @code{T} is
  the Fortran type corresponding to the Ada type @code{T}, and where the
  INTENT attribute of the corresponding dummy argument matches the Ada
! formal parameter mode; the Fortran implementation's parameter passing
  conventions are used.  For elementary types, a local copy is used if
! necessary to ensure by-copy semantics."
  @end quotation
  
  Followed.
  
  @quotation
  
! "An Ada parameter of an access-to-subprogram type is passed as a
  reference to a Fortran procedure whose interface corresponds to the
! designated subprogram's specification."
  @end quotation
  
  Followed.
--- 15134,15177 ----
  
  @quotation
  
! “An Ada implementation should support the following interface
! correspondences between Ada and Fortran:”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada procedure corresponds to a Fortran subroutine.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada function corresponds to a Fortran function.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada parameter of an elementary, array, or record type @code{T} is
  passed as a @code{T} argument to a Fortran procedure, where @code{T} is
  the Fortran type corresponding to the Ada type @code{T}, and where the
  INTENT attribute of the corresponding dummy argument matches the Ada
! formal parameter mode; the Fortran implementation’s parameter passing
  conventions are used.  For elementary types, a local copy is used if
! necessary to ensure by-copy semantics.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “An Ada parameter of an access-to-subprogram type is passed as a
  reference to a Fortran procedure whose interface corresponds to the
! designated subprogram’s specification.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14884,14913 ****
  
  @quotation
  
! "The machine code or intrinsic support should allow access to all
  operations normally available to assembly language programmers for the
! target environment, including privileged instructions, if any."
  @end quotation
  
  Followed.
  
  @quotation
  
! "The interfacing pragmas (see Annex B) should support interface to
  assembler; the default assembler should be associated with the
! convention identifier @code{Assembler}."
  @end quotation
  
  Followed.
  
  @quotation
  
! "If an entity is exported to assembly language, then the implementation
  should allocate it at an addressable location, and should ensure that it
  is retained by the linking process, even if not otherwise referenced
  from the Ada code.  The implementation should assume that any call to a
  machine code or assembler subprogram is allowed to read or update every
! object that is specified as exported."
  @end quotation
  
  Followed.
--- 15185,15214 ----
  
  @quotation
  
! “The machine code or intrinsic support should allow access to all
  operations normally available to assembly language programmers for the
! target environment, including privileged instructions, if any.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “The interfacing pragmas (see Annex B) should support interface to
  assembler; the default assembler should be associated with the
! convention identifier @code{Assembler}.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “If an entity is exported to assembly language, then the implementation
  should allocate it at an addressable location, and should ensure that it
  is retained by the linking process, even if not otherwise referenced
  from the Ada code.  The implementation should assume that any call to a
  machine code or assembler subprogram is allowed to read or update every
! object that is specified as exported.”
  @end quotation
  
  Followed.
*************** Followed.
*** 14919,14972 ****
  
  @quotation
  
! "The implementation should ensure that little or no overhead is
! associated with calling intrinsic and machine-code subprograms."
  @end quotation
  
  Followed for both intrinsics and machine-code subprograms.
  
  @quotation
  
! "It is recommended that intrinsic subprograms be provided for convenient
  access to any machine operations that provide special capabilities or
  efficiency and that are not otherwise available through the language
! constructs."
  @end quotation
  
  Followed.  A full set of machine operation intrinsic subprograms is provided.
  
  @quotation
  
! "Atomic read-modify-write operations---e.g., test and set, compare and
! swap, decrement and test, enqueue/dequeue."
  @end quotation
  
  Followed on any target supporting such operations.
  
  @quotation
  
! "Standard numeric functions---e.g.:, sin, log."
  @end quotation
  
  Followed on any target supporting such operations.
  
  @quotation
  
! "String manipulation operations---e.g.:, translate and test."
  @end quotation
  
  Followed on any target supporting such operations.
  
  @quotation
  
! "Vector operations---e.g.:, compare vector against thresholds."
  @end quotation
  
  Followed on any target supporting such operations.
  
  @quotation
  
! "Direct operations on I/O ports."
  @end quotation
  
  Followed on any target supporting such operations.
--- 15220,15273 ----
  
  @quotation
  
! “The implementation should ensure that little or no overhead is
! associated with calling intrinsic and machine-code subprograms.”
  @end quotation
  
  Followed for both intrinsics and machine-code subprograms.
  
  @quotation
  
! “It is recommended that intrinsic subprograms be provided for convenient
  access to any machine operations that provide special capabilities or
  efficiency and that are not otherwise available through the language
! constructs.”
  @end quotation
  
  Followed.  A full set of machine operation intrinsic subprograms is provided.
  
  @quotation
  
! “Atomic read-modify-write operations—e.g., test and set, compare and
! swap, decrement and test, enqueue/dequeue.”
  @end quotation
  
  Followed on any target supporting such operations.
  
  @quotation
  
! “Standard numeric functions—e.g.:, sin, log.”
  @end quotation
  
  Followed on any target supporting such operations.
  
  @quotation
  
! “String manipulation operations—e.g.:, translate and test.”
  @end quotation
  
  Followed on any target supporting such operations.
  
  @quotation
  
! “Vector operations—e.g.:, compare vector against thresholds.”
  @end quotation
  
  Followed on any target supporting such operations.
  
  @quotation
  
! “Direct operations on I/O ports.”
  @end quotation
  
  Followed on any target supporting such operations.
*************** Followed on any target supporting such o
*** 14980,14989 ****
  
  @quotation
  
! "If the @code{Ceiling_Locking} policy is not in effect, the
  implementation should provide means for the application to specify which
  interrupts are to be blocked during protected actions, if the underlying
! system allows for a finer-grain control of interrupt blocking."
  @end quotation
  
  Followed.  The underlying system does not allow for finer-grain control
--- 15281,15290 ----
  
  @quotation
  
! “If the @code{Ceiling_Locking} policy is not in effect, the
  implementation should provide means for the application to specify which
  interrupts are to be blocked during protected actions, if the underlying
! system allows for a finer-grain control of interrupt blocking.”
  @end quotation
  
  Followed.  The underlying system does not allow for finer-grain control
*************** of interrupt blocking.
*** 14998,15005 ****
  
  @quotation
  
! "Whenever possible, the implementation should allow interrupt handlers to
! be called directly by the hardware."
  @end quotation
  
  Followed on any target where the underlying operating system permits
--- 15299,15306 ----
  
  @quotation
  
! “Whenever possible, the implementation should allow interrupt handlers to
! be called directly by the hardware.”
  @end quotation
  
  Followed on any target where the underlying operating system permits
*************** such direct calls.
*** 15007,15014 ****
  
  @quotation
  
! "Whenever practical, violations of any
! implementation-defined restrictions should be detected before run time."
  @end quotation
  
  Followed.  Compile time warnings are given when possible.
--- 15308,15315 ----
  
  @quotation
  
! “Whenever practical, violations of any
! implementation-defined restrictions should be detected before run time.”
  @end quotation
  
  Followed.  Compile time warnings are given when possible.
*************** Followed.  Compile time warnings are giv
*** 15024,15034 ****
  
  @quotation
  
! "If implementation-defined forms of interrupt handler procedures are
  supported, such as protected procedures with parameters, then for each
  such form of a handler, a type analogous to @code{Parameterless_Handler}
  should be specified in a child package of @code{Interrupts}, with the
! same operations as in the predefined package Interrupts."
  @end quotation
  
  Followed.
--- 15325,15335 ----
  
  @quotation
  
! “If implementation-defined forms of interrupt handler procedures are
  supported, such as protected procedures with parameters, then for each
  such form of a handler, a type analogous to @code{Parameterless_Handler}
  should be specified in a child package of @code{Interrupts}, with the
! same operations as in the predefined package Interrupts.”
  @end quotation
  
  Followed.
*************** Followed.
*** 15042,15051 ****
  
  @quotation
  
! "It is recommended that pre-elaborated packages be implemented in such a
  way that there should be little or no code executed at run time for the
  elaboration of entities not already covered by the Implementation
! Requirements."
  @end quotation
  
  Followed.  Executable code is generated in some cases, e.g., loops
--- 15343,15352 ----
  
  @quotation
  
! “It is recommended that pre-elaborated packages be implemented in such a
  way that there should be little or no code executed at run time for the
  elaboration of entities not already covered by the Implementation
! Requirements.”
  @end quotation
  
  Followed.  Executable code is generated in some cases, e.g., loops
*************** to initialize large arrays.
*** 15058,15066 ****
  
  @quotation
  
! "If the pragma applies to an entity, then the implementation should
  reduce the amount of storage used for storing names associated with that
! entity."
  @end quotation
  
  Followed.
--- 15359,15367 ----
  
  @quotation
  
! “If the pragma applies to an entity, then the implementation should
  reduce the amount of storage used for storing names associated with that
! entity.”
  @end quotation
  
  Followed.
*************** Followed.
*** 15076,15089 ****
  
  @quotation
  
! "Some implementations are targeted to domains in which memory use at run
  time must be completely deterministic.  For such implementations, it is
  recommended that the storage for task attributes will be pre-allocated
  statically and not from the heap.  This can be accomplished by either
! placing restrictions on the number and the size of the task's
  attributes, or by using the pre-allocated storage for the first @code{N}
  attribute objects, and the heap for the others.  In the latter case,
! @code{N} should be documented."
  @end quotation
  
  Not followed.  This implementation is not targeted to such a domain.
--- 15377,15390 ----
  
  @quotation
  
! “Some implementations are targeted to domains in which memory use at run
  time must be completely deterministic.  For such implementations, it is
  recommended that the storage for task attributes will be pre-allocated
  statically and not from the heap.  This can be accomplished by either
! placing restrictions on the number and the size of the task’s
  attributes, or by using the pre-allocated storage for the first @code{N}
  attribute objects, and the heap for the others.  In the latter case,
! @code{N} should be documented.”
  @end quotation
  
  Not followed.  This implementation is not targeted to such a domain.
*************** Not followed.  This implementation is no
*** 15097,15104 ****
  
  @quotation
  
! "The implementation should use names that end with @code{_Locking} for
! locking policies defined by the implementation."
  @end quotation
  
  Followed.  Two implementation-defined locking policies are defined,
--- 15398,15405 ----
  
  @quotation
  
! “The implementation should use names that end with @code{_Locking} for
! locking policies defined by the implementation.”
  @end quotation
  
  Followed.  Two implementation-defined locking policies are defined,
*************** whose names (@code{Inheritance_Locking}
*** 15114,15121 ****
  
  @quotation
  
! "Names that end with @code{_Queuing} should be used
! for all implementation-defined queuing policies."
  @end quotation
  
  Followed.  No such implementation-defined queuing policies exist.
--- 15415,15422 ----
  
  @quotation
  
! “Names that end with @code{_Queuing} should be used
! for all implementation-defined queuing policies.”
  @end quotation
  
  Followed.  No such implementation-defined queuing policies exist.
*************** Followed.  No such implementation-define
*** 15129,15147 ****
  
  @quotation
  
! "Even though the @emph{abort_statement} is included in the list of
  potentially blocking operations (see 9.5.1), it is recommended that this
  statement be implemented in a way that never requires the task executing
! the @emph{abort_statement} to block."
  @end quotation
  
  Followed.
  
  @quotation
  
! "On a multi-processor, the delay associated with aborting a task on
  another processor should be bounded; the implementation should use
! periodic polling, if necessary, to achieve this."
  @end quotation
  
  Followed.
--- 15430,15448 ----
  
  @quotation
  
! “Even though the @emph{abort_statement} is included in the list of
  potentially blocking operations (see 9.5.1), it is recommended that this
  statement be implemented in a way that never requires the task executing
! the @emph{abort_statement} to block.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “On a multi-processor, the delay associated with aborting a task on
  another processor should be bounded; the implementation should use
! periodic polling, if necessary, to achieve this.”
  @end quotation
  
  Followed.
*************** Followed.
*** 15155,15162 ****
  
  @quotation
  
! "When feasible, the implementation should take advantage of the specified
! restrictions to produce a more efficient implementation."
  @end quotation
  
  GNAT currently takes advantage of these restrictions by providing an optimized
--- 15456,15463 ----
  
  @quotation
  
! “When feasible, the implementation should take advantage of the specified
! restrictions to produce a more efficient implementation.”
  @end quotation
  
  GNAT currently takes advantage of these restrictions by providing an optimized
*************** pragma @code{Profile (Restricted)} for m
*** 15174,15181 ****
  
  @quotation
  
! "When appropriate, implementations should provide configuration
! mechanisms to change the value of @code{Tick}."
  @end quotation
  
  Such configuration mechanisms are not appropriate to this implementation
--- 15475,15482 ----
  
  @quotation
  
! “When appropriate, implementations should provide configuration
! mechanisms to change the value of @code{Tick}.”
  @end quotation
  
  Such configuration mechanisms are not appropriate to this implementation
*************** and are thus not supported.
*** 15183,15199 ****
  
  @quotation
  
! "It is recommended that @code{Calendar.Clock} and @code{Real_Time.Clock}
! be implemented as transformations of the same time base."
  @end quotation
  
  Followed.
  
  @quotation
  
! "It is recommended that the best time base which exists in
  the underlying system be available to the application through
! @code{Clock}.  @cite{Best} may mean highest accuracy or largest range."
  @end quotation
  
  Followed.
--- 15484,15500 ----
  
  @quotation
  
! “It is recommended that @code{Calendar.Clock} and @code{Real_Time.Clock}
! be implemented as transformations of the same time base.”
  @end quotation
  
  Followed.
  
  @quotation
  
! “It is recommended that the best time base which exists in
  the underlying system be available to the application through
! @code{Clock}.  @cite{Best} may mean highest accuracy or largest range.”
  @end quotation
  
  Followed.
*************** Followed.
*** 15209,15218 ****
  
  @quotation
  
! "Whenever possible, the PCS on the called partition should allow for
  multiple tasks to call the RPC-receiver with different messages and
  should allow them to block until the corresponding subprogram body
! returns."
  @end quotation
  
  Followed by GLADE, a separately supplied PCS that can be used with
--- 15510,15519 ----
  
  @quotation
  
! “Whenever possible, the PCS on the called partition should allow for
  multiple tasks to call the RPC-receiver with different messages and
  should allow them to block until the corresponding subprogram body
! returns.”
  @end quotation
  
  Followed by GLADE, a separately supplied PCS that can be used with
*************** GNAT.
*** 15220,15228 ****
  
  @quotation
  
! "The @code{Write} operation on a stream of type @code{Params_Stream_Type}
  should raise @code{Storage_Error} if it runs out of space trying to
! write the @code{Item} into the stream."
  @end quotation
  
  Followed by GLADE, a separately supplied PCS that can be used with
--- 15521,15529 ----
  
  @quotation
  
! “The @code{Write} operation on a stream of type @code{Params_Stream_Type}
  should raise @code{Storage_Error} if it runs out of space trying to
! write the @code{Item} into the stream.”
  @end quotation
  
  Followed by GLADE, a separately supplied PCS that can be used with
*************** GNAT.
*** 15237,15249 ****
  
  @quotation
  
! "If COBOL (respectively, C) is widely supported in the target
  environment, implementations supporting the Information Systems Annex
  should provide the child package @code{Interfaces.COBOL} (respectively,
  @code{Interfaces.C}) specified in Annex B and should support a
  @code{convention_identifier} of COBOL (respectively, C) in the interfacing
  pragmas (see Annex B), thus allowing Ada programs to interface with
! programs written in that language."
  @end quotation
  
  Followed.
--- 15538,15550 ----
  
  @quotation
  
! “If COBOL (respectively, C) is widely supported in the target
  environment, implementations supporting the Information Systems Annex
  should provide the child package @code{Interfaces.COBOL} (respectively,
  @code{Interfaces.C}) specified in Annex B and should support a
  @code{convention_identifier} of COBOL (respectively, C) in the interfacing
  pragmas (see Annex B), thus allowing Ada programs to interface with
! programs written in that language.”
  @end quotation
  
  Followed.
*************** Followed.
*** 15257,15267 ****
  
  @quotation
  
! "Packed decimal should be used as the internal representation for objects
! of subtype @code{S} when @code{S}'Machine_Radix = 10."
  @end quotation
  
! Not followed.  GNAT ignores @code{S}'Machine_Radix and always uses binary
  representations.
  
  @geindex Numerics
--- 15558,15568 ----
  
  @quotation
  
! “Packed decimal should be used as the internal representation for objects
! of subtype @code{S} when @code{S}’Machine_Radix = 10.”
  @end quotation
  
! Not followed.  GNAT ignores @code{S}’Machine_Radix and always uses binary
  representations.
  
  @geindex Numerics
*************** representations.
*** 15273,15285 ****
  
  @quotation
  
! "If Fortran (respectively, C) is widely supported in the target
  environment, implementations supporting the Numerics Annex
  should provide the child package @code{Interfaces.Fortran} (respectively,
  @code{Interfaces.C}) specified in Annex B and should support a
  @code{convention_identifier} of Fortran (respectively, C) in the interfacing
  pragmas (see Annex B), thus allowing Ada programs to interface with
! programs written in that language."
  @end quotation
  
  Followed.
--- 15574,15586 ----
  
  @quotation
  
! “If Fortran (respectively, C) is widely supported in the target
  environment, implementations supporting the Numerics Annex
  should provide the child package @code{Interfaces.Fortran} (respectively,
  @code{Interfaces.C}) specified in Annex B and should support a
  @code{convention_identifier} of Fortran (respectively, C) in the interfacing
  pragmas (see Annex B), thus allowing Ada programs to interface with
! programs written in that language.”
  @end quotation
  
  Followed.
*************** Followed.
*** 15293,15299 ****
  
  @quotation
  
! "Because the usual mathematical meaning of multiplication of a complex
  operand and a real operand is that of the scaling of both components of
  the former by the latter, an implementation should not perform this
  operation by first promoting the real operand to complex type and then
--- 15594,15600 ----
  
  @quotation
  
! “Because the usual mathematical meaning of multiplication of a complex
  operand and a real operand is that of the scaling of both components of
  the former by the latter, an implementation should not perform this
  operation by first promoting the real operand to complex type and then
*************** component by the zero component obtained
*** 15305,15318 ****
  that propagates into the final result.) Analogous advice applies in the
  case of multiplication of a complex operand and a pure-imaginary
  operand, and in the case of division of a complex operand by a real or
! pure-imaginary operand."
  @end quotation
  
  Not followed.
  
  @quotation
  
! "Similarly, because the usual mathematical meaning of addition of a
  complex operand and a real operand is that the imaginary operand remains
  unchanged, an implementation should not perform this operation by first
  promoting the real operand to complex type and then performing a full
--- 15606,15619 ----
  that propagates into the final result.) Analogous advice applies in the
  case of multiplication of a complex operand and a pure-imaginary
  operand, and in the case of division of a complex operand by a real or
! pure-imaginary operand.”
  @end quotation
  
  Not followed.
  
  @quotation
  
! “Similarly, because the usual mathematical meaning of addition of a
  complex operand and a real operand is that the imaginary operand remains
  unchanged, an implementation should not perform this operation by first
  promoting the real operand to complex type and then performing a full
*************** operand is a negatively signed zero.  (E
*** 15325,15338 ****
  zero to the zero obtained during promotion yields a positive zero.)
  Analogous advice applies in the case of addition of a complex operand
  and a pure-imaginary operand, and in the case of subtraction of a
! complex operand and a real or pure-imaginary operand."
  @end quotation
  
  Not followed.
  
  @quotation
  
! "Implementations in which @code{Real'Signed_Zeros} is @code{True} should
  attempt to provide a rational treatment of the signs of zero results and
  result components.  As one example, the result of the @code{Argument}
  function should have the sign of the imaginary component of the
--- 15626,15639 ----
  zero to the zero obtained during promotion yields a positive zero.)
  Analogous advice applies in the case of addition of a complex operand
  and a pure-imaginary operand, and in the case of subtraction of a
! complex operand and a real or pure-imaginary operand.”
  @end quotation
  
  Not followed.
  
  @quotation
  
! “Implementations in which @code{Real'Signed_Zeros} is @code{True} should
  attempt to provide a rational treatment of the signs of zero results and
  result components.  As one example, the result of the @code{Argument}
  function should have the sign of the imaginary component of the
*************** the positive real axis; as another, the
*** 15341,15347 ****
  of the @code{Compose_From_Polar} function should be the same as
  (respectively, the opposite of) that of the @code{Argument} parameter when that
  parameter has a value of zero and the @code{Modulus} parameter has a
! nonnegative (respectively, negative) value."
  @end quotation
  
  Followed.
--- 15642,15648 ----
  of the @code{Compose_From_Polar} function should be the same as
  (respectively, the opposite of) that of the @code{Argument} parameter when that
  parameter has a value of zero and the @code{Modulus} parameter has a
! nonnegative (respectively, negative) value.”
  @end quotation
  
  Followed.
*************** Followed.
*** 15355,15361 ****
  
  @quotation
  
! "Implementations in which @code{Complex_Types.Real'Signed_Zeros} is
  @code{True} should attempt to provide a rational treatment of the signs
  of zero results and result components.  For example, many of the complex
  elementary functions have components that are odd functions of one of
--- 15656,15662 ----
  
  @quotation
  
! “Implementations in which @code{Complex_Types.Real'Signed_Zeros} is
  @code{True} should attempt to provide a rational treatment of the signs
  of zero results and result components.  For example, many of the complex
  elementary functions have components that are odd functions of one of
*************** the parameter components; in these cases
*** 15363,15369 ****
  have the sign of the parameter component at the origin.  Other complex
  elementary functions have zero components whose sign is opposite that of
  a parameter component at the origin, or is always positive or always
! negative."
  @end quotation
  
  Followed.
--- 15664,15670 ----
  have the sign of the parameter component at the origin.  Other complex
  elementary functions have zero components whose sign is opposite that of
  a parameter component at the origin, or is always positive or always
! negative.”
  @end quotation
  
  Followed.
*************** Followed.
*** 15377,15390 ****
  
  @quotation
  
! "The versions of the forward trigonometric functions without a
  @code{Cycle} parameter should not be implemented by calling the
  corresponding version with a @code{Cycle} parameter of
  @code{2.0*Numerics.Pi}, since this will not provide the required
  accuracy in some portions of the domain.  For the same reason, the
  version of @code{Log} without a @code{Base} parameter should not be
  implemented by calling the corresponding version with a @code{Base}
! parameter of @code{Numerics.e}."
  @end quotation
  
  Followed.
--- 15678,15691 ----
  
  @quotation
  
! “The versions of the forward trigonometric functions without a
  @code{Cycle} parameter should not be implemented by calling the
  corresponding version with a @code{Cycle} parameter of
  @code{2.0*Numerics.Pi}, since this will not provide the required
  accuracy in some portions of the domain.  For the same reason, the
  version of @code{Log} without a @code{Base} parameter should not be
  implemented by calling the corresponding version with a @code{Base}
! parameter of @code{Numerics.e}.”
  @end quotation
  
  Followed.
*************** Followed.
*** 15401,15411 ****
  
  @quotation
  
! "The version of the @code{Compose_From_Polar} function without a
  @code{Cycle} parameter should not be implemented by calling the
  corresponding version with a @code{Cycle} parameter of
  @code{2.0*Numerics.Pi}, since this will not provide the required
! accuracy in some portions of the domain."
  @end quotation
  
  Followed.
--- 15702,15712 ----
  
  @quotation
  
! “The version of the @code{Compose_From_Polar} function without a
  @code{Cycle} parameter should not be implemented by calling the
  corresponding version with a @code{Cycle} parameter of
  @code{2.0*Numerics.Pi}, since this will not provide the required
! accuracy in some portions of the domain.”
  @end quotation
  
  Followed.
*************** Followed.
*** 15419,15434 ****
  
  @quotation
  
! "If the partition elaboration policy is @code{Sequential} and the
  Environment task becomes permanently blocked during elaboration then the
  partition is deadlocked and it is recommended that the partition be
! immediately terminated."
  @end quotation
  
  Not followed.
  
  @node Implementation Defined Characteristics,Intrinsic Subprograms,Implementation Advice,Top
! @anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b}@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{259}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{25a}
  @chapter Implementation Defined Characteristics
  
  
--- 15720,15735 ----
  
  @quotation
  
! “If the partition elaboration policy is @code{Sequential} and the
  Environment task becomes permanently blocked during elaboration then the
  partition is deadlocked and it is recommended that the partition be
! immediately terminated.”
  @end quotation
  
  Not followed.
  
  @node Implementation Defined Characteristics,Intrinsic Subprograms,Implementation Advice,Top
! @anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{259}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{25a}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b}
  @chapter Implementation Defined Characteristics
  
  
*************** Reference Manual.
*** 15453,15460 ****
  @itemize *
  
  @item 
! "Whether or not each recommendation given in Implementation
! Advice is followed.  See 1.1.2(37)."
  @end itemize
  
  See @ref{a,,Implementation Advice}.
--- 15754,15761 ----
  @itemize *
  
  @item 
! “Whether or not each recommendation given in Implementation
! Advice is followed.  See 1.1.2(37).”
  @end itemize
  
  See @ref{a,,Implementation Advice}.
*************** See @ref{a,,Implementation Advice}.
*** 15463,15469 ****
  @itemize *
  
  @item 
! "Capacity limitations of the implementation.  See 1.1.3(3)."
  @end itemize
  
  The complexity of programs that can be processed is limited only by the
--- 15764,15770 ----
  @itemize *
  
  @item 
! “Capacity limitations of the implementation.  See 1.1.3(3).”
  @end itemize
  
  The complexity of programs that can be processed is limited only by the
*************** generated object files.
*** 15474,15481 ****
  @itemize *
  
  @item 
! "Variations from the standard that are impractical to avoid
! given the implementation's execution environment.  See 1.1.3(6)."
  @end itemize
  
  There are no variations from the standard.
--- 15775,15782 ----
  @itemize *
  
  @item 
! “Variations from the standard that are impractical to avoid
! given the implementation’s execution environment.  See 1.1.3(6).”
  @end itemize
  
  There are no variations from the standard.
*************** There are no variations from the standar
*** 15484,15491 ****
  @itemize *
  
  @item 
! "Which code_statements cause external
! interactions.  See 1.1.3(10)."
  @end itemize
  
  Any @emph{code_statement} can potentially cause external interactions.
--- 15785,15792 ----
  @itemize *
  
  @item 
! “Which code_statements cause external
! interactions.  See 1.1.3(10).”
  @end itemize
  
  Any @emph{code_statement} can potentially cause external interactions.
*************** Any @emph{code_statement} can potentiall
*** 15494,15501 ****
  @itemize *
  
  @item 
! "The coded representation for the text of an Ada
! program.  See 2.1(4)."
  @end itemize
  
  See separate section on source representation.
--- 15795,15802 ----
  @itemize *
  
  @item 
! “The coded representation for the text of an Ada
! program.  See 2.1(4).”
  @end itemize
  
  See separate section on source representation.
*************** See separate section on source represent
*** 15504,15510 ****
  @itemize *
  
  @item 
! "The control functions allowed in comments.  See 2.1(14)."
  @end itemize
  
  See separate section on source representation.
--- 15805,15817 ----
  @itemize *
  
  @item 
! 
! @table @asis
! 
! @item “The semantics of an Ada program whose text is not in
! 
! Normalization Form C.  See 2.1(4).”
! @end table
  @end itemize
  
  See separate section on source representation.
*************** See separate section on source represent
*** 15513,15519 ****
  @itemize *
  
  @item 
! "The representation for an end of line.  See 2.2(2)."
  @end itemize
  
  See separate section on source representation.
--- 15820,15826 ----
  @itemize *
  
  @item 
! “The representation for an end of line.  See 2.2(2).”
  @end itemize
  
  See separate section on source representation.
*************** See separate section on source represent
*** 15522,15529 ****
  @itemize *
  
  @item 
! "Maximum supported line length and lexical element
! length.  See 2.2(15)."
  @end itemize
  
  The maximum line length is 255 characters and the maximum length of
--- 15829,15836 ----
  @itemize *
  
  @item 
! “Maximum supported line length and lexical element
! length.  See 2.2(15).”
  @end itemize
  
  The maximum line length is 255 characters and the maximum length of
*************** length of a lexical element is the same
*** 15537,15543 ****
  @itemize *
  
  @item 
! "Implementation defined pragmas.  See 2.8(14)."
  @end itemize
  
  See @ref{7,,Implementation Defined Pragmas}.
--- 15844,15850 ----
  @itemize *
  
  @item 
! “Implementation defined pragmas.  See 2.8(14).”
  @end itemize
  
  See @ref{7,,Implementation Defined Pragmas}.
*************** See @ref{7,,Implementation Defined Pragm
*** 15546,15552 ****
  @itemize *
  
  @item 
! "Effect of pragma @code{Optimize}.  See 2.8(27)."
  @end itemize
  
  Pragma @code{Optimize}, if given with a @code{Time} or @code{Space}
--- 15853,15859 ----
  @itemize *
  
  @item 
! “Effect of pragma @code{Optimize}.  See 2.8(27).”
  @end itemize
  
  Pragma @code{Optimize}, if given with a @code{Time} or @code{Space}
*************** not.
*** 15557,15578 ****
  @itemize *
  
  @item 
! "The sequence of characters of the value returned by
! @code{S'Image} when some of the graphic characters of
! @code{S'Wide_Image} are not defined in @code{Character}.  See
! 3.5(37)."
  @end itemize
  
! The sequence of characters is as defined by the wide character encoding
! method used for the source.  See section on source representation for
! further details.
  
  
  @itemize *
  
  @item 
! "The predefined integer types declared in
! @code{Standard}.  See 3.5.4(25)."
  @end itemize
  
  
--- 15864,15885 ----
  @itemize *
  
  @item 
! “The message string associated with the Assertion_Error exception raised
! by the failure of a predicate check if there is no applicable
! Predicate_Failure aspect.  See 3.2.4(31).”
  @end itemize
  
! In the case of a Dynamic_Predicate aspect, the string is
! “Dynamic_Predicate failed at <source position>”, where
! “<source position>” might be something like “foo.adb:123”.
! The Static_Predicate case is handled analogously.
  
  
  @itemize *
  
  @item 
! “The predefined integer types declared in
! @code{Standard}.  See 3.5.4(25).”
  @end itemize
  
  
*************** depending on the C definition of long)
*** 15643,15650 ****
  @itemize *
  
  @item 
! "Any nonstandard integer types and the operators defined
! for them.  See 3.5.4(26)."
  @end itemize
  
  There are no nonstandard integer types.
--- 15950,15957 ----
  @itemize *
  
  @item 
! “Any nonstandard integer types and the operators defined
! for them.  See 3.5.4(26).”
  @end itemize
  
  There are no nonstandard integer types.
*************** There are no nonstandard integer types.
*** 15653,15660 ****
  @itemize *
  
  @item 
! "Any nonstandard real types and the operators defined for
! them.  See 3.5.6(8)."
  @end itemize
  
  There are no nonstandard real types.
--- 15960,15967 ----
  @itemize *
  
  @item 
! “Any nonstandard real types and the operators defined for
! them.  See 3.5.6(8).”
  @end itemize
  
  There are no nonstandard real types.
*************** There are no nonstandard real types.
*** 15663,15684 ****
  @itemize *
  
  @item 
! "What combinations of requested decimal precision and range
! are supported for floating point types.  See 3.5.7(7)."
  @end itemize
  
! The precision and range is as defined by the IEEE standard.
  
  
  @itemize *
  
  @item 
! "The predefined floating point types declared in
! @code{Standard}.  See 3.5.7(16)."
  @end itemize
  
  
! @multitable {xxxxxxxxxxxxxxxxxxxxxxxx} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} 
  @headitem
  
  Type
--- 15970,15992 ----
  @itemize *
  
  @item 
! “What combinations of requested decimal precision and range
! are supported for floating point types.  See 3.5.7(7).”
  @end itemize
  
! The precision and range are defined by the IEEE Standard for Floating-Point
! Arithmetic (IEEE 754-2019).
  
  
  @itemize *
  
  @item 
! “The predefined floating point types declared in
! @code{Standard}.  See 3.5.7(16).”
  @end itemize
  
  
! @multitable {xxxxxxxxxxxxxxxxxxxxxxxx} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} 
  @headitem
  
  Type
*************** Representation
*** 15693,15699 ****
  
  @tab
  
! 32 bit IEEE short
  
  @item
  
--- 16001,16007 ----
  
  @tab
  
! IEEE Binary32 (Single)
  
  @item
  
*************** Representation
*** 15701,15707 ****
  
  @tab
  
! (Short) 32 bit IEEE short
  
  @item
  
--- 16009,16015 ----
  
  @tab
  
! IEEE Binary32 (Single)
  
  @item
  
*************** Representation
*** 15709,15715 ****
  
  @tab
  
! 64 bit IEEE long
  
  @item
  
--- 16017,16023 ----
  
  @tab
  
! IEEE Binary64 (Double)
  
  @item
  
*************** Representation
*** 15717,15732 ****
  
  @tab
  
! 64 bit IEEE long (80 bit IEEE long on x86 processors)
  
  @end multitable
  
  
  
  @itemize *
  
  @item 
! "The small of an ordinary fixed point type.  See 3.5.9(8)."
  @end itemize
  
  The small is the largest power of two that does not exceed the delta.
--- 16025,16048 ----
  
  @tab
  
! IEEE Binary64 (Double) on non-x86 architectures
! IEEE 80-bit Extended on x86 architecture
  
  @end multitable
  
  
+ The default rounding mode specified by the IEEE 754 Standard is assumed both
+ for static and dynamic computations (that is, round to nearest, ties to even).
+ The input routines yield correctly rounded values for Short_Float, Float, and
+ Long_Float at least. The output routines can compute up to twice as many exact
+ digits as the value of @code{T'Digits} for any type, for example 30 digits for
+ Long_Float; if more digits are requested, zeros are printed.
+ 
  
  @itemize *
  
  @item 
! “The small of an ordinary fixed point type.  See 3.5.9(8).”
  @end itemize
  
  The small is the largest power of two that does not exceed the delta.
*************** The small is the largest power of two th
*** 15735,15742 ****
  @itemize *
  
  @item 
! "What combinations of small, range, and digits are
! supported for fixed point types.  See 3.5.9(10)."
  @end itemize
  
  For an ordinary fixed point type, on 32-bit platforms, the small must lie in
--- 16051,16058 ----
  @itemize *
  
  @item 
! “What combinations of small, range, and digits are
! supported for fixed point types.  See 3.5.9(10).”
  @end itemize
  
  For an ordinary fixed point type, on 32-bit platforms, the small must lie in
*************** small must lie in 1.0E-38 .. 1.0E+38 and
*** 15765,15772 ****
  @itemize *
  
  @item 
! "The result of @code{Tags.Expanded_Name} for types declared
! within an unnamed @emph{block_statement}.  See 3.9(10)."
  @end itemize
  
  Block numbers of the form @code{B@emph{nnn}}, where @emph{nnn} is a
--- 16081,16088 ----
  @itemize *
  
  @item 
! “The result of @code{Tags.Expanded_Name} for types declared
! within an unnamed @emph{block_statement}.  See 3.9(10).”
  @end itemize
  
  Block numbers of the form @code{B@emph{nnn}}, where @emph{nnn} is a
*************** decimal integer are allocated.
*** 15776,15782 ****
  @itemize *
  
  @item 
! "Implementation-defined attributes.  See 4.1.4(12)."
  @end itemize
  
  See @ref{8,,Implementation Defined Attributes}.
--- 16092,16111 ----
  @itemize *
  
  @item 
! “The sequence of characters of the value returned by Tags.Expanded_Name
! (respectively, Tags.Wide_Expanded_Name) when some of the graphic
! characters of Tags.Wide_Wide_Expanded_Name are not defined in Character
! (respectively, Wide_Character).  See 3.9(10.1).”
! @end itemize
! 
! This is handled in the same way as the implementation-defined behavior
! referenced in A.4.12(34).
! 
! 
! @itemize *
! 
! @item 
! “Implementation-defined attributes.  See 4.1.4(12).”
  @end itemize
  
  See @ref{8,,Implementation Defined Attributes}.
*************** See @ref{8,,Implementation Defined Attri
*** 15785,15791 ****
  @itemize *
  
  @item 
! "Any implementation-defined time types.  See 9.6(6)."
  @end itemize
  
  There are no implementation-defined time types.
--- 16114,16204 ----
  @itemize *
  
  @item 
! “The value of the parameter to Empty for some container aggregates.
! See 4.3.5(40).”
! @end itemize
! 
! As per the suggestion given in the Annotated Ada RM, the default value
! of the formal parameter is used if one exists and zero is used otherwise.
! 
! 
! @itemize *
! 
! @item 
! “The maximum number of chunks for a parallel reduction expression without
! a chunk_specification.  See 4.5.10(21).”
! @end itemize
! 
! Feature unimplemented.
! 
! 
! @itemize *
! 
! @item 
! “Rounding of real static expressions which are exactly half-way between
! two machine numbers.  See 4.9(38).”
! @end itemize
! 
! Round to even is used in all such cases.
! 
! 
! @itemize *
! 
! @item 
! 
! @table @asis
! 
! @item “The maximum number of chunks for a parallel generalized iterator without
! 
! a chunk_specification.  See 5.5.2(10).”
! @end table
! @end itemize
! 
! Feature unimplemented.
! 
! 
! @itemize *
! 
! @item 
! “The number of chunks for an array component iterator.  See 5.5.2(11).”
! @end itemize
! 
! Feature unimplemented.
! 
! 
! @itemize *
! 
! @item 
! “Any extensions of the Global aspect.  See 6.1.2(43).”
! @end itemize
! 
! Feature unimplemented.
! 
! 
! @itemize *
! 
! @item 
! “The circumstances the implementation passes in the null value for a view
! conversion of an access type used as an out parameter.  See 6.4.1(19).”
! @end itemize
! 
! Difficult to characterize.
! 
! 
! @itemize *
! 
! @item 
! “Any extensions of the Default_Initial_Condition aspect.  See 7.3.3(11).”
! @end itemize
! 
! SPARK allows specifying @emph{null} as the Default_Initial_Condition
! aspect of a type. See the SPARK reference manual for further details.
! 
! 
! @itemize *
! 
! @item 
! “Any implementation-defined time types.  See 9.6(6).”
  @end itemize
  
  There are no implementation-defined time types.
*************** There are no implementation-defined time
*** 15794,15800 ****
  @itemize *
  
  @item 
! "The time base associated with relative delays."
  @end itemize
  
  See 9.6(20).  The time base used is that provided by the C library
--- 16207,16213 ----
  @itemize *
  
  @item 
! “The time base associated with relative delays.  See 9.6(20).”
  @end itemize
  
  See 9.6(20).  The time base used is that provided by the C library
*************** function @code{gettimeofday}.
*** 15804,15811 ****
  @itemize *
  
  @item 
! "The time base of the type @code{Calendar.Time}.  See
! 9.6(23)."
  @end itemize
  
  The time base used is that provided by the C library function
--- 16217,16223 ----
  @itemize *
  
  @item 
! “The time base of the type @code{Calendar.Time}.  See 9.6(23).”
  @end itemize
  
  The time base used is that provided by the C library function
*************** The time base used is that provided by t
*** 15815,15822 ****
  @itemize *
  
  @item 
! "The time zone used for package @code{Calendar}
! operations.  See 9.6(24)."
  @end itemize
  
  The time zone used by package @code{Calendar} is the current system time zone
--- 16227,16234 ----
  @itemize *
  
  @item 
! “The time zone used for package @code{Calendar}
! operations.  See 9.6(24).”
  @end itemize
  
  The time zone used by package @code{Calendar} is the current system time zone
*************** setting for local time, as accessed by t
*** 15827,15834 ****
  @itemize *
  
  @item 
! "Any limit on @emph{delay_until_statements} of
! @emph{select_statements}.  See 9.6(29)."
  @end itemize
  
  There are no such limits.
--- 16239,16246 ----
  @itemize *
  
  @item 
! “Any limit on @emph{delay_until_statements} of
! @emph{select_statements}.  See 9.6(29).”
  @end itemize
  
  There are no such limits.
*************** There are no such limits.
*** 15837,15856 ****
  @itemize *
  
  @item 
! "Whether or not two non-overlapping parts of a composite
! object are independently addressable, in the case where packing, record
! layout, or @code{Component_Size} is specified for the object.  See
! 9.10(1)."
  @end itemize
  
! Separate components are independently addressable if they do not share
! overlapping storage units.
  
  
  @itemize *
  
  @item 
! "The representation for a compilation.  See 10.1(2)."
  @end itemize
  
  A compilation is represented by a sequence of files presented to the
--- 16249,16279 ----
  @itemize *
  
  @item 
! 
! @table @asis
! 
! @item “The result of Calendar.Formatting.Image if its argument represents more
! 
! than 100 hours.  See 9.6.1(86).”
! @end table
  @end itemize
  
! Calendar.Time_Error is raised.
  
  
  @itemize *
  
  @item 
! “Implementation-defined conflict check policies.  See 9.10.1(5).”
! @end itemize
! 
! There are no implementation-defined conflict check policies.
! 
! 
! @itemize *
! 
! @item 
! “The representation for a compilation.  See 10.1(2).”
  @end itemize
  
  A compilation is represented by a sequence of files presented to the
*************** compiler in a single invocation of the @
*** 15860,15867 ****
  @itemize *
  
  @item 
! "Any restrictions on compilations that contain multiple
! compilation_units.  See 10.1(4)."
  @end itemize
  
  No single file can contain more than one compilation unit, but any
--- 16283,16290 ----
  @itemize *
  
  @item 
! “Any restrictions on compilations that contain multiple
! compilation_units.  See 10.1(4).”
  @end itemize
  
  No single file can contain more than one compilation unit, but any
*************** compilation.
*** 15872,15879 ****
  @itemize *
  
  @item 
! "The mechanisms for creating an environment and for adding
! and replacing compilation units.  See 10.1.4(3)."
  @end itemize
  
  See separate section on compilation model.
--- 16295,16302 ----
  @itemize *
  
  @item 
! “The mechanisms for creating an environment and for adding
! and replacing compilation units.  See 10.1.4(3).”
  @end itemize
  
  See separate section on compilation model.
*************** See separate section on compilation mode
*** 15882,15889 ****
  @itemize *
  
  @item 
! "The manner of explicitly assigning library units to a
! partition.  See 10.2(2)."
  @end itemize
  
  If a unit contains an Ada main program, then the Ada units for the partition
--- 16305,16312 ----
  @itemize *
  
  @item 
! “The manner of explicitly assigning library units to a
! partition.  See 10.2(2).”
  @end itemize
  
  If a unit contains an Ada main program, then the Ada units for the partition
*************** this case a list of units can be explici
*** 15903,15917 ****
  inclusion in the partition (all units needed by these units will also
  be included automatically).  For full details on the use of these
  options, refer to @emph{GNAT Make Program gnatmake} in the
! @cite{GNAT User's Guide}.
  
  
  @itemize *
  
  @item 
! "The implementation-defined means, if any, of specifying
! which compilation units are needed by a given compilation unit.  See
! 10.2(2)."
  @end itemize
  
  The units needed by a given compilation unit are as defined in
--- 16326,16339 ----
  inclusion in the partition (all units needed by these units will also
  be included automatically).  For full details on the use of these
  options, refer to @emph{GNAT Make Program gnatmake} in the
! @cite{GNAT User’s Guide}.
  
  
  @itemize *
  
  @item 
! “The implementation-defined means, if any, of specifying which compilation
! units are needed by a given compilation unit.  See 10.2(2).”
  @end itemize
  
  The units needed by a given compilation unit are as defined in
*************** means for specifying needed units.
*** 15923,15930 ****
  @itemize *
  
  @item 
! "The manner of designating the main subprogram of a
! partition.  See 10.2(7)."
  @end itemize
  
  The main program is designated by providing the name of the
--- 16345,16352 ----
  @itemize *
  
  @item 
! “The manner of designating the main subprogram of a
! partition.  See 10.2(7).”
  @end itemize
  
  The main program is designated by providing the name of the
*************** corresponding @code{ALI} file as the inp
*** 15934,15958 ****
  @itemize *
  
  @item 
! "The order of elaboration of @emph{library_items}.  See
! 10.2(18)."
  @end itemize
  
  The first constraint on ordering is that it meets the requirements of
  Chapter 10 of the Ada Reference Manual.  This still leaves some
! implementation dependent choices, which are resolved by first
! elaborating bodies as early as possible (i.e., in preference to specs
! where there is a choice), and second by evaluating the immediate with
! clauses of a unit to determine the probably best choice, and
! third by elaborating in alphabetical order of unit names
! where a choice still remains.
  
  
  @itemize *
  
  @item 
! "Parameter passing and function return for the main
! subprogram.  See 10.2(21)."
  @end itemize
  
  The main program has no parameters.  It may be a procedure, or a function
--- 16356,16376 ----
  @itemize *
  
  @item 
! “The order of elaboration of @emph{library_items}.  See 10.2(18).”
  @end itemize
  
  The first constraint on ordering is that it meets the requirements of
  Chapter 10 of the Ada Reference Manual.  This still leaves some
! implementation-dependent choices, which are resolved by analyzing
! the elaboration code of each unit and identifying implicit
! elaboration-order dependencies.
  
  
  @itemize *
  
  @item 
! “Parameter passing and function return for the main
! subprogram.  See 10.2(21).”
  @end itemize
  
  The main program has no parameters.  It may be a procedure, or a function
*************** may have been set by a call to @code{Ada
*** 15964,15985 ****
  @itemize *
  
  @item 
! "The mechanisms for building and running partitions.  See
! 10.2(24)."
  @end itemize
  
! GNAT itself supports programs with only a single partition.  The GNATDIST
  tool provided with the GLADE package (which also includes an implementation
  of the PCS) provides a completely flexible method for building and running
! programs consisting of multiple partitions.  See the separate GLADE manual
  for details.
  
  
  @itemize *
  
  @item 
! "The details of program execution, including program
! termination.  See 10.2(25)."
  @end itemize
  
  See separate section on compilation model.
--- 16382,16402 ----
  @itemize *
  
  @item 
! “The mechanisms for building and running partitions.  See 10.2(24).”
  @end itemize
  
! GNAT itself supports programs with only a single partition. The GNATDIST
  tool provided with the GLADE package (which also includes an implementation
  of the PCS) provides a completely flexible method for building and running
! programs consisting of multiple partitions. See the separate GLADE manual
  for details.
  
  
  @itemize *
  
  @item 
! “The details of program execution, including program
! termination.  See 10.2(25).”
  @end itemize
  
  See separate section on compilation model.
*************** See separate section on compilation mode
*** 15988,16007 ****
  @itemize *
  
  @item 
! "The semantics of any non-active partitions supported by the
! implementation.  See 10.2(28)."
  @end itemize
  
  Passive partitions are supported on targets where shared memory is
! provided by the operating system.  See the GLADE reference manual for
  further details.
  
  
  @itemize *
  
  @item 
! "The information returned by @code{Exception_Message}.  See
! 11.4.1(10)."
  @end itemize
  
  Exception message returns the null string unless a specific message has
--- 16405,16423 ----
  @itemize *
  
  @item 
! “The semantics of any non-active partitions supported by the
! implementation.  See 10.2(28).”
  @end itemize
  
  Passive partitions are supported on targets where shared memory is
! provided by the operating system. See the GLADE reference manual for
  further details.
  
  
  @itemize *
  
  @item 
! “The information returned by @code{Exception_Message}.  See 11.4.1(10).”
  @end itemize
  
  Exception message returns the null string unless a specific message has
*************** been passed by the program.
*** 16011,16018 ****
  @itemize *
  
  @item 
! "The result of @code{Exceptions.Exception_Name} for types
! declared within an unnamed @emph{block_statement}.  See 11.4.1(12)."
  @end itemize
  
  Blocks have implementation defined names of the form @code{B@emph{nnn}}
--- 16427,16434 ----
  @itemize *
  
  @item 
! “The result of @code{Exceptions.Exception_Name} for types
! declared within an unnamed @emph{block_statement}.  See 11.4.1(12).”
  @end itemize
  
  Blocks have implementation defined names of the form @code{B@emph{nnn}}
*************** where @emph{nnn} is an integer.
*** 16022,16029 ****
  @itemize *
  
  @item 
! "The information returned by
! @code{Exception_Information}.  See 11.4.1(13)."
  @end itemize
  
  @code{Exception_Information} returns a string in the following format:
--- 16438,16445 ----
  @itemize *
  
  @item 
! “The information returned by
! @code{Exception_Information}.  See 11.4.1(13).”
  @end itemize
  
  @code{Exception_Information} returns a string in the following format:
*************** not making use of this field.
*** 16060,16066 ****
  The Load address line, the Call stack traceback locations line and the
  following values are present only if at least one traceback location was
  recorded. The Load address indicates the address at which the main executable
! was loaded; this line may not be present if operating system hasn't relocated
  the main executable. The values are given in C style format, with lower case
  letters for a-f, and only as many digits present as are necessary.
  The line terminator sequence at the end of each line, including
--- 16476,16482 ----
  The Load address line, the Call stack traceback locations line and the
  following values are present only if at least one traceback location was
  recorded. The Load address indicates the address at which the main executable
! was loaded; this line may not be present if operating system hasn’t relocated
  the main executable. The values are given in C style format, with lower case
  letters for a-f, and only as many digits present as are necessary.
  The line terminator sequence at the end of each line, including
*************** the last line is a single @code{LF} char
*** 16072,16078 ****
  @itemize *
  
  @item 
! "Implementation-defined check names.  See 11.5(27)."
  @end itemize
  
  The implementation defined check names include Alignment_Check,
--- 16488,16542 ----
  @itemize *
  
  @item 
! “The sequence of characters of the value returned by
! Exceptions.Exception_Name (respectively, Exceptions.Wide_Exception_Name)
! when some of the graphic characters of Exceptions.Wide_Wide_Exception_Name
! are not defined in Character (respectively, Wide_Character).
! See 11.4.1(12.1).”
! @end itemize
! 
! This is handled in the same way as the implementation-defined behavior
! referenced in A.4.12(34).
! 
! 
! @itemize *
! 
! @item 
! “The information returned by Exception_Information.  See 11.4.1(13).”
! @end itemize
! 
! The exception name and the source location at which the exception was
! raised are included.
! 
! 
! @itemize *
! 
! @item 
! “Implementation-defined policy_identifiers and assertion_aspect_marks
! allowed in a pragma Assertion_Policy.  See 11.4.2(9).”
! @end itemize
! 
! 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.
! 
! 
! @itemize *
! 
! @item 
! “The default assertion policy.  See 11.4.2(10).”
! @end itemize
! 
! The default assertion policy is Ignore, although this can be overridden
! via compiler switches such as “-gnata”.
! 
! 
! @itemize *
! 
! @item 
! “Implementation-defined check names.  See 11.5(27).”
  @end itemize
  
  The implementation defined check names include Alignment_Check,
*************** Check_Name. See the description of pragm
*** 16085,16092 ****
  @itemize *
  
  @item 
! "The interpretation of each aspect of representation.  See
! 13.1(20)."
  @end itemize
  
  See separate section on data representations.
--- 16549,16581 ----
  @itemize *
  
  @item 
! “Existence and meaning of second parameter of pragma Unsuppress.
! See 11.5(27.1).”
! @end itemize
! 
! The legality rules for and semantics of the second parameter of pragma
! Unsuppress match those for the second argument of pragma Suppress.
! 
! 
! @itemize *
! 
! @item 
! 
! @table @asis
! 
! @item “The cases that cause conflicts between the representation of the
! 
! ancestors of a type_declaration.  See 13.1(13.1).”
! @end table
! @end itemize
! 
! No such cases exist.
! 
! 
! @itemize *
! 
! @item 
! “The interpretation of each representation aspect.  See 13.1(20).”
  @end itemize
  
  See separate section on data representations.
*************** See separate section on data representat
*** 16095,16102 ****
  @itemize *
  
  @item 
! "Any restrictions placed upon representation items.  See
! 13.1(20)."
  @end itemize
  
  See separate section on data representations.
--- 16584,16591 ----
  @itemize *
  
  @item 
! “Any restrictions placed upon the specification of representation aspects.
! See 13.1(20).”
  @end itemize
  
  See separate section on data representations.
*************** See separate section on data representat
*** 16105,16124 ****
  @itemize *
  
  @item 
! "The meaning of @code{Size} for indefinite subtypes.  See
! 13.3(48)."
  @end itemize
  
! Size for an indefinite subtype is the maximum possible size, except that
! for the case of a subprogram parameter, the size of the parameter object
! is the actual size.
  
  
  @itemize *
  
  @item 
! "The default external representation for a type tag.  See
! 13.3(75)."
  @end itemize
  
  The default external representation for a type tag is the fully expanded
--- 16594,16639 ----
  @itemize *
  
  @item 
! “Implementation-defined aspects, including the syntax for specifying
! such aspects and the legality rules for such aspects.  See 13.1.1(38).”
  @end itemize
  
! See @ref{11f,,Implementation Defined Aspects}.
  
  
  @itemize *
  
  @item 
! “The set of machine scalars.  See 13.3(8.1).”
! @end itemize
! 
! See separate section on data representations.
! 
! 
! @itemize *
! 
! @item 
! “The meaning of @code{Size} for indefinite subtypes.  See 13.3(48).”
! @end itemize
! 
! The Size attribute of an indefinite subtype is not less than the Size
! attribute of any object of that type.
! 
! 
! @itemize *
! 
! @item 
! “The meaning of Object_Size for indefinite subtypes.  See 13.3(58).”
! @end itemize
! 
! The Object_Size attribute of an indefinite subtype is not less than the
! Object_Size attribute of any object of that type.
! 
! 
! @itemize *
! 
! @item 
! “The default external representation for a type tag.  See 13.3(75).”
  @end itemize
  
  The default external representation for a type tag is the fully expanded
*************** name of the type in upper case letters.
*** 16128,16135 ****
  @itemize *
  
  @item 
! "What determines whether a compilation unit is the same in
! two different partitions.  See 13.3(76)."
  @end itemize
  
  A compilation unit is the same in two different partitions if and only
--- 16643,16650 ----
  @itemize *
  
  @item 
! “What determines whether a compilation unit is the same in
! two different partitions.  See 13.3(76).”
  @end itemize
  
  A compilation unit is the same in two different partitions if and only
*************** if it derives from the same source file.
*** 16139,16145 ****
  @itemize *
  
  @item 
! "Implementation-defined components.  See 13.5.1(15)."
  @end itemize
  
  The only implementation defined component is the tag for a tagged type,
--- 16654,16660 ----
  @itemize *
  
  @item 
! “Implementation-defined components.  See 13.5.1(15).”
  @end itemize
  
  The only implementation defined component is the tag for a tagged type,
*************** which contains a pointer to the dispatch
*** 16149,16156 ****
  @itemize *
  
  @item 
! "If @code{Word_Size} = @code{Storage_Unit}, the default bit
! ordering.  See 13.5.3(5)."
  @end itemize
  
  @code{Word_Size} (32) is not the same as @code{Storage_Unit} (8) for this
--- 16664,16671 ----
  @itemize *
  
  @item 
! “If @code{Word_Size} = @code{Storage_Unit}, the default bit
! ordering.  See 13.5.3(5).”
  @end itemize
  
  @code{Word_Size} (32) is not the same as @code{Storage_Unit} (8) for this
*************** bit ordering corresponds to the natural
*** 16161,16173 ****
  @itemize *
  
  @item 
! "The contents of the visible part of package @code{System}
! and its language-defined children.  See 13.7(2)."
  @end itemize
  
! See the definition of these packages in files @code{system.ads} and
! @code{s-stoele.ads}. Note that two declarations are added to package
! System.
  
  @example
  Max_Priority           : constant Positive := Priority'Last;
--- 16676,16686 ----
  @itemize *
  
  @item 
! “The contents of the visible part of package @code{System}.  See 13.7(2).”
  @end itemize
  
! See the definition of package System in @code{system.ads}.
! Note that two declarations are added to package System.
  
  @example
  Max_Priority           : constant Positive := Priority'Last;
*************** Max_Interrupt_Priority : constant Positi
*** 16178,16186 ****
  @itemize *
  
  @item 
! "The contents of the visible part of package
! @code{System.Machine_Code}, and the meaning of
! @emph{code_statements}.  See 13.8(7)."
  @end itemize
  
  See the definition and documentation in file @code{s-maccod.ads}.
--- 16691,16709 ----
  @itemize *
  
  @item 
! “The range of Storage_Elements.Storage_Offset, the modulus of
! Storage_Elements.Storage_Element, and the declaration of
! Storage_Elements.Integer_Address.  See 13.7.1(11).”
! @end itemize
! 
! See the definition of package System.Storage_Elements in @code{s-stoele.ads}.
! 
! 
! @itemize *
! 
! @item 
! “The contents of the visible part of package @code{System.Machine_Code},
! and the meaning of @emph{code_statements}.  See 13.8(7).”
  @end itemize
  
  See the definition and documentation in file @code{s-maccod.ads}.
*************** See the definition and documentation in
*** 16189,16195 ****
  @itemize *
  
  @item 
! "The effect of unchecked conversion.  See 13.9(11)."
  @end itemize
  
  Unchecked conversion between types of the same size
--- 16712,16719 ----
  @itemize *
  
  @item 
! “The result of unchecked conversion for instances with scalar result
! types whose result is not defined by the language.  See 13.9(11).”
  @end itemize
  
  Unchecked conversion between types of the same size
*************** made with appropriate alignment
*** 16210,16321 ****
  @itemize *
  
  @item 
! "The semantics of operations on invalid representations.
! See 13.9.2(10-11)."
  @end itemize
  
! For assignments and other operations where the use of invalid values cannot
! result in erroneous behavior, the compiler ignores the possibility of invalid
! values. An exception is raised at the point where an invalid value would
! result in erroneous behavior. For example executing:
! 
! @example
! procedure invalidvals is
!   X : Integer := -1;
!   Y : Natural range 1 .. 10;
!   for Y'Address use X'Address;
!   Z : Natural range 1 .. 10;
!   A : array (Natural range 1 .. 10) of Integer;
! begin
!   Z := Y;     -- no exception
!   A (Z) := 3; -- exception raised;
! end;
! @end example
! 
! As indicated, an exception is raised on the array assignment, but not
! on the simple assignment of the invalid negative value from Y to Z.
  
  
  @itemize *
  
  @item 
! "The manner of choosing a storage pool for an access type
! when @code{Storage_Pool} is not specified for the type.  See 13.11(17)."
  @end itemize
  
  There are 3 different standard pools used by the compiler when
  @code{Storage_Pool} is not specified depending whether the type is local
  to a subprogram or defined at the library level and whether
! @code{Storage_Size`@w{`}is specified or not.  See documentation in the runtime
  library units `@w{`}System.Pool_Global}, @code{System.Pool_Size} and
  @code{System.Pool_Local} in files @code{s-poosiz.ads},
  @code{s-pooglo.ads} and @code{s-pooloc.ads} for full details on the
! default pools used.
  
  
  @itemize *
  
  @item 
! "Whether or not the implementation provides user-accessible
! names for the standard pool type(s).  See 13.11(17)."
  @end itemize
  
! See documentation in the sources of the run time mentioned in the previous
! paragraph.  All these pools are accessible by means of @cite{with}ing
! these units.
  
  
  @itemize *
  
  @item 
! "The meaning of @code{Storage_Size}.  See 13.11(18)."
  @end itemize
  
! @code{Storage_Size} is measured in storage units, and refers to the
! total space available for an access type collection, or to the primary
! stack space for a task.
  
  
  @itemize *
  
  @item 
! "Implementation-defined aspects of storage pools.  See
! 13.11(22)."
  @end itemize
  
! See documentation in the sources of the run time mentioned in the
! paragraph about standard storage pools above
! for details on GNAT-defined aspects of storage pools.
  
  
  @itemize *
  
  @item 
! "The set of restrictions allowed in a pragma
! @code{Restrictions}.  See 13.12(7)."
  @end itemize
  
! See @ref{9,,Standard and Implementation Defined Restrictions}.
  
  
  @itemize *
  
  @item 
! "The consequences of violating limitations on
! @code{Restrictions} pragmas.  See 13.12(9)."
  @end itemize
  
! Restrictions that can be checked at compile time result in illegalities
! if violated.  Currently there are no other consequences of violating
! restrictions.
  
  
  @itemize *
  
  @item 
! "The representation used by the @code{Read} and
! @code{Write} attributes of elementary types in terms of stream
! elements.  See 13.13.2(9)."
  @end itemize
  
  The representation is the in-memory representation of the base type of
--- 16734,16824 ----
  @itemize *
  
  @item 
! “The result of unchecked conversion for instances with nonscalar result
! types whose result is not defined by the language.  See 13.9(11).”
  @end itemize
  
! See preceding definition for the scalar result case.
  
  
  @itemize *
  
  @item 
! “Whether or not the implementation provides user-accessible
! names for the standard pool type(s).  See 13.11(17).”
  @end itemize
  
  There are 3 different standard pools used by the compiler when
  @code{Storage_Pool} is not specified depending whether the type is local
  to a subprogram or defined at the library level and whether
! @code{Storage_Size`@w{`}is specified or not. See documentation in the runtime
  library units `@w{`}System.Pool_Global}, @code{System.Pool_Size} and
  @code{System.Pool_Local} in files @code{s-poosiz.ads},
  @code{s-pooglo.ads} and @code{s-pooloc.ads} for full details on the
! default pools used.  All these pools are accessible by means of @cite{with}ing
! these units.
  
  
  @itemize *
  
  @item 
! “The meaning of @code{Storage_Size} when neither the Storage_Size nor the
! Storage_Pool is specified for an access type.  See 13.11(18).”
  @end itemize
  
! @code{Storage_Size} is measured in storage units, and refers to the
! total space available for an access type collection, or to the primary
! stack space for a task.
  
  
  @itemize *
  
  @item 
! “The effect of specifying aspect Default_Storage_Pool on an instance
! of a language-defined generic unit.  See 13.11.3(5).”
  @end itemize
  
! Instances of language-defined generic units are treated the same as other
! instances with respect to the Default_Storage_Pool aspect.
  
  
  @itemize *
  
  @item 
! “Implementation-defined restrictions allowed in a pragma
! @code{Restrictions}.  See 13.12(8.7).”
  @end itemize
  
! See @ref{9,,Standard and Implementation Defined Restrictions}.
  
  
  @itemize *
  
  @item 
! “The consequences of violating limitations on
! @code{Restrictions} pragmas.  See 13.12(9).”
  @end itemize
  
! Restrictions that can be checked at compile time are enforced at
! compile time; violations are illegal. For other restrictions, any
! violation during program execution results in erroneous execution.
  
  
  @itemize *
  
  @item 
! “Implementation-defined usage profiles allowed in a pragma Profile.
! See 13.12(15).”
  @end itemize
  
! See @ref{7,,Implementation Defined Pragmas}.
  
  
  @itemize *
  
  @item 
! “The contents of the stream elements read and written by the Read and
! Write attributes of elementary types.  See 13.13.2(9).”
  @end itemize
  
  The representation is the in-memory representation of the base type of
*************** the type, using the number of bits corre
*** 16326,16333 ****
  @itemize *
  
  @item 
! "The names and characteristics of the numeric subtypes
! declared in the visible part of package @code{Standard}.  See A.1(3)."
  @end itemize
  
  See items describing the integer and floating-point types supported.
--- 16829,16836 ----
  @itemize *
  
  @item 
! “The names and characteristics of the numeric subtypes
! declared in the visible part of package @code{Standard}.  See A.1(3).”
  @end itemize
  
  See items describing the integer and floating-point types supported.
*************** See items describing the integer and flo
*** 16336,16458 ****
  @itemize *
  
  @item 
! "The string returned by @code{Character_Set_Version}.
! See A.3.5(3)."
  @end itemize
  
! @code{Ada.Wide_Characters.Handling.Character_Set_Version} returns
! the string "Unicode 4.0", referring to version 4.0 of the
! Unicode specification.
  
  
  @itemize *
  
  @item 
! "The accuracy actually achieved by the elementary
! functions.  See A.5.1(1)."
  @end itemize
  
! The elementary functions correspond to the functions available in the C
! library.  Only fast math mode is implemented.
  
  
  @itemize *
  
  @item 
! "The sign of a zero result from some of the operators or
! functions in @code{Numerics.Generic_Elementary_Functions}, when
! @code{Float_Type'Signed_Zeros} is @code{True}.  See A.5.1(46)."
  @end itemize
  
! The sign of zeroes follows the requirements of the IEEE 754 standard on
! floating-point.
  
  
  @itemize *
  
  @item 
! "The value of
! @code{Numerics.Float_Random.Max_Image_Width}.  See A.5.2(27)."
  @end itemize
  
! Maximum image width is 6864, see library file @code{s-rannum.ads}.
  
  
  @itemize *
  
  @item 
! "The value of
! @code{Numerics.Discrete_Random.Max_Image_Width}.  See A.5.2(27)."
  @end itemize
  
! Maximum image width is 6864, see library file @code{s-rannum.ads}.
  
  
  @itemize *
  
  @item 
! "The algorithms for random number generation.  See
! A.5.2(32)."
  @end itemize
  
! The algorithm is the Mersenne Twister, as documented in the source file
! @code{s-rannum.adb}. This version of the algorithm has a period of
! 2**19937-1.
  
  
  @itemize *
  
  @item 
! "The string representation of a random number generator's
! state.  See A.5.2(38)."
  @end itemize
  
! The value returned by the Image function is the concatenation of
! the fixed-width decimal representations of the 624 32-bit integers
! of the state vector.
  
  
  @itemize *
  
  @item 
! "The minimum time interval between calls to the
! time-dependent Reset procedure that are guaranteed to initiate different
! random number sequences.  See A.5.2(45)."
  @end itemize
  
! The minimum period between reset calls to guarantee distinct series of
! random numbers is one microsecond.
  
  
  @itemize *
  
  @item 
! "The values of the @code{Model_Mantissa},
  @code{Model_Emin}, @code{Model_Epsilon}, @code{Model},
  @code{Safe_First}, and @code{Safe_Last} attributes, if the Numerics
! Annex is not supported.  See A.5.3(72)."
! @end itemize
! 
! Run the compiler with @emph{-gnatS} to produce a listing of package
! @code{Standard}, has the values of all numeric attributes.
! 
! 
! @itemize *
! 
! @item 
! "Any implementation-defined characteristics of the
! input-output packages.  See A.7(14)."
  @end itemize
  
! There are no special implementation defined characteristics for these
! packages.
  
  
  @itemize *
  
  @item 
! "The value of @code{Buffer_Size} in @code{Storage_IO}.  See
! A.9(10)."
  @end itemize
  
  All type representations are contiguous, and the @code{Buffer_Size} is
--- 16839,16950 ----
  @itemize *
  
  @item 
! “The values returned by Strings.Hash.  See A.4.9(3).”
  @end itemize
  
! This hash function has predictable collisions and is subject to
! equivalent substring attacks. It is not suitable for construction of a
! hash table keyed on possibly malicious user input.
  
  
  @itemize *
  
  @item 
! “The value returned by a call to a Text_Buffer Get procedure if any
! character in the returned sequence is not defined in Character.
! See A.4.12(34).”
  @end itemize
  
! The contents of a buffer is represented internally as a UTF_8 string.
! The value return by Text_Buffer.Get is the result of passing that
! UTF_8 string to UTF_Encoding.Strings.Decode.
  
  
  @itemize *
  
  @item 
! “The value returned by a call to a Text_Buffer Wide_Get procedure if
! any character in the returned sequence is not defined in Wide_Character.
! See A.4.12(34).”
  @end itemize
  
! The contents of a buffer is represented internally as a UTF_8 string.
! The value return by Text_Buffer.Wide_Get is the result of passing that
! UTF_8 string to UTF_Encoding.Wide_Strings.Decode.
  
  
  @itemize *
  
  @item 
! “The accuracy actually achieved by the elementary
! functions.  See A.5.1(1).”
  @end itemize
  
! The elementary functions correspond to the functions available in the C
! library.  Only fast math mode is implemented.
  
  
  @itemize *
  
  @item 
! “The sign of a zero result from some of the operators or
! functions in @code{Numerics.Generic_Elementary_Functions}, when
! @code{Float_Type'Signed_Zeros} is @code{True}.  See A.5.1(46).”
  @end itemize
  
! The sign of zeroes follows the requirements of the IEEE 754 standard on
! floating-point.
  
  
  @itemize *
  
  @item 
! “The value of
! @code{Numerics.Float_Random.Max_Image_Width}.  See A.5.2(27).”
  @end itemize
  
! Maximum image width is 6864, see library file @code{s-rannum.ads}.
  
  
  @itemize *
  
  @item 
! “The value of
! @code{Numerics.Discrete_Random.Max_Image_Width}.  See A.5.2(27).”
  @end itemize
  
! Maximum image width is 6864, see library file @code{s-rannum.ads}.
  
  
  @itemize *
  
  @item 
! “The string representation of a random number generator’s
! state.  See A.5.2(38).”
  @end itemize
  
! The value returned by the Image function is the concatenation of
! the fixed-width decimal representations of the 624 32-bit integers
! of the state vector.
  
  
  @itemize *
  
  @item 
! “The values of the @code{Model_Mantissa},
  @code{Model_Emin}, @code{Model_Epsilon}, @code{Model},
  @code{Safe_First}, and @code{Safe_Last} attributes, if the Numerics
! Annex is not supported.  See A.5.3(72).”
  @end itemize
  
! Running the compiler with @emph{-gnatS} to produce a listing of package
! @code{Standard} displays the values of these attributes.
  
  
  @itemize *
  
  @item 
! “The value of @code{Buffer_Size} in @code{Storage_IO}.  See A.9(10).”
  @end itemize
  
  All type representations are contiguous, and the @code{Buffer_Size} is
*************** boundary.
*** 16463,16481 ****
  @itemize *
  
  @item 
! "External files for standard input, standard output, and
! standard error See A.10(5)."
  @end itemize
  
  These files are mapped onto the files provided by the C streams
! libraries.  See source file @code{i-cstrea.ads} for further details.
  
  
  @itemize *
  
  @item 
! "The accuracy of the value produced by @code{Put}.  See
! A.10.9(36)."
  @end itemize
  
  If more digits are requested in the output than are represented by the
--- 16955,16972 ----
  @itemize *
  
  @item 
! “External files for standard input, standard output, and
! standard error See A.10(5).”
  @end itemize
  
  These files are mapped onto the files provided by the C streams
! libraries. See source file @code{i-cstrea.ads} for further details.
  
  
  @itemize *
  
  @item 
! “The accuracy of the value produced by @code{Put}.  See A.10.9(36).”
  @end itemize
  
  If more digits are requested in the output than are represented by the
*************** significant digit positions.
*** 16486,16659 ****
  @itemize *
  
  @item 
! "The meaning of @code{Argument_Count}, @code{Argument}, and
! @code{Command_Name}.  See A.15(1)."
  @end itemize
  
! These are mapped onto the @code{argv} and @code{argc} parameters of the
! main program in the natural manner.
  
  
  @itemize *
  
  @item 
! "The interpretation of the @code{Form} parameter in procedure
! @code{Create_Directory}.  See A.16(56)."
  @end itemize
  
! The @code{Form} parameter is not used.
  
  
  @itemize *
  
  @item 
! "The interpretation of the @code{Form} parameter in procedure
! @code{Create_Path}.  See A.16(60)."
  @end itemize
  
! The @code{Form} parameter is not used.
  
  
  @itemize *
  
  @item 
! "The interpretation of the @code{Form} parameter in procedure
! @code{Copy_File}.  See A.16(68)."
  @end itemize
  
! The @code{Form} parameter is case-insensitive.
! Two fields are recognized in the @code{Form} parameter:
! 
! @example
! *preserve=<value>*
! *mode=<value>*
! @end example
! 
! <value> starts immediately after the character '=' and ends with the
! character immediately preceding the next comma (',') or with the last
! character of the parameter.
! 
! The only possible values for preserve= are:
! 
! 
! @multitable {xxxxxxxxxxxxxxxxxxxx} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} 
! @headitem
! 
! Value
! 
! @tab
! 
! Meaning
  
- @item
  
! @emph{no_attributes}
  
! @tab
  
! Do not try to preserve any file attributes. This is the
! default if no preserve= is found in Form.
  
! @item
  
! @emph{all_attributes}
  
! @tab
  
- Try to preserve all file attributes (timestamps, access rights).
  
! @item
  
! @emph{timestamps}
  
! @tab
  
! Preserve the timestamp of the copied file, but not the other
! file attributes.
  
! @end multitable
  
  
- The only possible values for mode= are:
  
  
! @multitable {xxxxxxxxxxxxxxxx} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} 
! @headitem
  
! Value
  
! @tab
  
! Meaning
  
! @item
  
! @emph{copy}
  
- @tab
  
! Only do the copy if the destination file does not already exist.
! If it already exists, Copy_File fails.
  
! @item
  
! @emph{overwrite}
  
! @tab
  
! Copy the file in all cases. Overwrite an already existing destination file.
  
! @item
  
- @emph{append}
  
! @tab
  
! Append the original file to the destination file. If the destination file
! does not exist, the destination file is a copy of the source file.
! When mode=append, the field preserve=, if it exists, is not taken into account.
  
! @end multitable
  
  
! If the Form parameter includes one or both of the fields and the value or
! values are incorrect, Copy_file fails with Use_Error.
  
! Examples of correct Forms:
  
! @example
! Form => "preserve=no_attributes,mode=overwrite" (the default)
! Form => "mode=append"
! Form => "mode=copy, preserve=all_attributes"
! @end example
  
! Examples of incorrect Forms:
  
! @example
! Form => "preserve=junk"
! Form => "mode=internal, preserve=timestamps"
! @end example
  
  
  @itemize *
  
  @item 
! "The interpretation of the @code{Pattern} parameter, when not the null string,
! in the @code{Start_Search} and @code{Search} procedures.
! See A.16(104) and A.16(112)."
  @end itemize
  
! 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{25b,,GNAT.Regexp (g-regexp.ads)}.
  
  
  @itemize *
  
  @item 
! "Implementation-defined convention names.  See B.1(11)."
  @end itemize
  
  The following convention names are supported
--- 16977,17122 ----
  @itemize *
  
  @item 
! “Current size for a stream file for which positioning is not supported.
! See A.12.1(1.1).”
  @end itemize
  
! Positioning is supported.
  
  
  @itemize *
  
  @item 
! “The meaning of @code{Argument_Count}, @code{Argument}, and
! @code{Command_Name}.  See A.15(1).”
  @end itemize
  
! These are mapped onto the @code{argv} and @code{argc} parameters of the
! main program in the natural manner.
  
  
  @itemize *
  
  @item 
! “The interpretation of file names and directory names.  See A.16(46).”
  @end itemize
  
! These names are interpreted consistently with the underlying file system.
  
  
  @itemize *
  
  @item 
! “The maxium value for a file size in Directories.  See A.16(87).”
  @end itemize
  
! Directories.File_Size’Last is equal to Long_Long_Integer’Last .
  
  
! @itemize *
  
! @item 
  
! @table @asis
  
! @item “The result for Directories.Size for a directory or special file.
  
! See A.16(93).”
! @end table
! @end itemize
  
! Name_Error is raised.
  
  
! @itemize *
  
! @item 
  
! @table @asis
  
! @item “The result for Directories.Modification_Time for a directory or special file.
  
! See A.16(93).”
! @end table
! @end itemize
  
+ Name_Error is raised.
  
  
+ @itemize *
  
! @item 
  
! @table @asis
  
! @item “The interpretation of a nonnull search pattern in Directories.
  
! See A.16(104).”
! @end table
! @end itemize
  
! 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{25b,,GNAT.Regexp (g-regexp.ads)}.
  
  
! @itemize *
  
! @item 
  
! @table @asis
  
! @item “The results of a Directories search if the contents of the directory are
  
! altered while a search is in progress.  See A.16(110).”
! @end table
! @end itemize
  
! The effect of a call to Get_Next_Entry is determined by the current
! state of the directory.
  
  
! @itemize *
  
! @item 
! “The definition and meaning of an environment variable.  See A.17(1).”
! @end itemize
  
! This definition is determined by the underlying operating system.
  
  
! @itemize *
  
! @item 
! “The circumstances where an environment variable cannot be defined.
! See A.17(16).”
  
! There are no such implementation-defined circumstances.
  
! @item 
! “Environment names for which Set has the effect of Clear.  See A.17(17).”
! @end itemize
  
! There are no such names.
  
  
  @itemize *
  
  @item 
! “The value of Containers.Hash_Type’Modulus. The value of
! Containers.Count_Type’Last.  See A.18.1(7).”
  @end itemize
  
! Containers.Hash_Type’Modulus is 2**32.
! Containers.Count_Type’Last is 2**31 - 1.
  
  
  @itemize *
  
  @item 
! “Implementation-defined convention names.  See B.1(11).”
  @end itemize
  
  The following convention names are supported
*************** use of such other names results in a war
*** 16836,16842 ****
  @itemize *
  
  @item 
! "The meaning of link names.  See B.1(36)."
  @end itemize
  
  Link names are the actual names used by the linker.
--- 17299,17305 ----
  @itemize *
  
  @item 
! “The meaning of link names.  See B.1(36).”
  @end itemize
  
  Link names are the actual names used by the linker.
*************** Link names are the actual names used by
*** 16845,16853 ****
  @itemize *
  
  @item 
! "The manner of choosing link names when neither the link
! name nor the address of an imported or exported entity is specified.  See
! B.1(36)."
  @end itemize
  
  The default linker name is that which would be assigned by the relevant
--- 17308,17315 ----
  @itemize *
  
  @item 
! “The manner of choosing link names when neither the link name nor the
! address of an imported or exported entity is specified.  See B.1(36).”
  @end itemize
  
  The default linker name is that which would be assigned by the relevant
*************** letters.
*** 16858,16864 ****
  @itemize *
  
  @item 
! "The effect of pragma @code{Linker_Options}.  See B.1(37)."
  @end itemize
  
  The string passed to @code{Linker_Options} is presented uninterpreted as
--- 17320,17326 ----
  @itemize *
  
  @item 
! “The effect of pragma @code{Linker_Options}.  See B.1(37).”
  @end itemize
  
  The string passed to @code{Linker_Options} is presented uninterpreted as
*************** from the corresponding package spec.
*** 16879,16886 ****
  @itemize *
  
  @item 
! "The contents of the visible part of package
! @code{Interfaces} and its language-defined descendants.  See B.2(1)."
  @end itemize
  
  See files with prefix @code{i-} in the distributed library.
--- 17341,17348 ----
  @itemize *
  
  @item 
! “The contents of the visible part of package
! @code{Interfaces} and its language-defined descendants.  See B.2(1).”
  @end itemize
  
  See files with prefix @code{i-} in the distributed library.
*************** See files with prefix @code{i-} in the d
*** 16889,16897 ****
  @itemize *
  
  @item 
! "Implementation-defined children of package
  @code{Interfaces}.  The contents of the visible part of package
! @code{Interfaces}.  See B.2(11)."
  @end itemize
  
  See files with prefix @code{i-} in the distributed library.
--- 17351,17359 ----
  @itemize *
  
  @item 
! “Implementation-defined children of package
  @code{Interfaces}.  The contents of the visible part of package
! @code{Interfaces}.  See B.2(11).”
  @end itemize
  
  See files with prefix @code{i-} in the distributed library.
*************** See files with prefix @code{i-} in the d
*** 16900,16910 ****
  @itemize *
  
  @item 
! "The types @code{Floating}, @code{Long_Floating},
  @code{Binary}, @code{Long_Binary}, @code{Decimal_ Element}, and
  @code{COBOL_Character}; and the initialization of the variables
  @code{Ada_To_COBOL} and @code{COBOL_To_Ada}, in
! @code{Interfaces.COBOL}.  See B.4(50)."
  @end itemize
  
  
--- 17362,17382 ----
  @itemize *
  
  @item 
! “The definitions of certain types and constants in Interfaces.C.
! See B.3(41).”
! @end itemize
! 
! See source file @code{i-c.ads}.
! 
! 
! @itemize *
! 
! @item 
! “The types @code{Floating}, @code{Long_Floating},
  @code{Binary}, @code{Long_Binary}, @code{Decimal_ Element}, and
  @code{COBOL_Character}; and the initialization of the variables
  @code{Ada_To_COBOL} and @code{COBOL_To_Ada}, in
! @code{Interfaces.COBOL}.  See B.4(50).”
  @end itemize
  
  
*************** For initialization, see the file @code{i
*** 16974,17040 ****
  @itemize *
  
  @item 
! "Support for access to machine instructions.  See C.1(1)."
  @end itemize
  
! See documentation in file @code{s-maccod.ads} in the distributed library.
  
  
  @itemize *
  
  @item 
! "Implementation-defined aspects of access to machine
! operations.  See C.1(9)."
  @end itemize
  
! See documentation in file @code{s-maccod.ads} in the distributed library.
  
  
  @itemize *
  
  @item 
! "Implementation-defined aspects of interrupts.  See C.3(2)."
  @end itemize
  
! Interrupts are mapped to signals or conditions as appropriate.  See
! definition of unit
! @code{Ada.Interrupt_Names} in source file @code{a-intnam.ads} for details
! on the interrupts supported on a particular target.
  
  
  @itemize *
  
  @item 
! "Implementation-defined aspects of pre-elaboration.  See
! C.4(13)."
  @end itemize
  
! GNAT does not permit a partition to be restarted without reloading,
! except under control of the debugger.
  
  
  @itemize *
  
  @item 
! "The semantics of pragma @code{Discard_Names}.  See C.5(7)."
  @end itemize
  
! Pragma @code{Discard_Names} causes names of enumeration literals to
! be suppressed.  In the presence of this pragma, the Image attribute
  provides the image of the Pos of the literal, and Value accepts
  Pos values.
  
! For tagged types, when pragmas @code{Discard_Names} and @code{No_Tagged_Streams}
! simultaneously apply, their Expanded_Name and External_Tag are initialized
! with empty strings. This is useful to avoid exposing entity names at binary
  level.
  
  
  @itemize *
  
  @item 
! "The result of the @code{Task_Identification.Image}
! attribute.  See C.7.1(7)."
  @end itemize
  
  The result of this attribute is a string that identifies
--- 17446,17534 ----
  @itemize *
  
  @item 
! “The types Fortran_Integer, Real, Double_Precision, and Character_Set
! in Interfaces.Fortran.  See B.5(17).”
  @end itemize
  
! See source file @code{i-fortra.ads}. These types are derived, respectively,
! from Integer, Float, Long_Float, and Character.
  
  
  @itemize *
  
  @item 
! “Implementation-defined intrinsic subprograms.  See C.1(1).”
  @end itemize
  
! See separate section on Intrinsic Subprograms.
  
  
  @itemize *
  
  @item 
! “Any restrictions on a protected procedure or its containing type when an
! aspect Attach_handler or Interrupt_Handler is specified.  See C.3.1(17).”
  @end itemize
  
! There are no such restrictions.
  
  
  @itemize *
  
  @item 
! “Any other forms of interrupt handler supported by the Attach_Handler and
! Interrupt_Handler aspects.  See C.3.1(19).”
  @end itemize
  
! There are no such forms.
  
  
  @itemize *
  
  @item 
! 
! @table @asis
! 
! @item “The semantics of some attributes and functions of an entity for which
! 
! aspect Discard_Names is True.  See C.5(7).”
! @end table
  @end itemize
  
! If Discard_Names is True for an enumeration type, the Image attribute
  provides the image of the Pos of the literal, and Value accepts
  Pos values.
  
! If both of the aspects`@w{`}Discard_Names`@w{`} and @code{No_Tagged_Streams} are true
! for a tagged type, its Expanded_Name and External_Tag values are
! empty strings. This is useful to avoid exposing entity names at binary
  level.
  
  
  @itemize *
  
  @item 
! “The modulus and size of Test_and_Set_Flag.  See C.6.3(8).”
! @end itemize
! 
! The modulus is 2**8. The size is 8.
! 
! 
! @itemize *
! 
! @item 
! “The value used to represent the set value for Atomic_Test_and_Set.
! See C.6.3(10).”
! @end itemize
! 
! The value is 1.
! 
! 
! @itemize *
! 
! @item 
! “The result of the @code{Task_Identification.Image}
! attribute.  See C.7.1(7).”
  @end itemize
  
  The result of this attribute is a string that identifies
*************** virtual address of the control block of
*** 17065,17072 ****
  @itemize *
  
  @item 
! "The value of @code{Current_Task} when in a protected entry
! or interrupt handler.  See C.7.1(17)."
  @end itemize
  
  Protected entries or interrupt handlers can be executed by any
--- 17559,17566 ----
  @itemize *
  
  @item 
! “The value of @code{Current_Task} when in a protected entry
! or interrupt handler.  See C.7.1(17).”
  @end itemize
  
  Protected entries or interrupt handlers can be executed by any
*************** convenient thread, so the value of @code
*** 17076,17123 ****
  @itemize *
  
  @item 
! "The effect of calling @code{Current_Task} from an entry
! body or interrupt handler.  See C.7.1(19)."
! @end itemize
! 
! When GNAT can determine statically that @code{Current_Task} is called directly in
! the body of an entry (or barrier) then a warning is emitted and @code{Program_Error}
! is raised at run time. Otherwise, the effect of calling @code{Current_Task} from an
! entry body or interrupt handler is to return the identification of the task
! currently executing the code.
! 
! 
! @itemize *
! 
! @item 
! "Implementation-defined aspects of
! @code{Task_Attributes}.  See C.7.2(19)."
! @end itemize
! 
! There are no implementation-defined aspects of @code{Task_Attributes}.
! 
! 
! @itemize *
! 
! @item 
! "Values of all @code{Metrics}.  See D(2)."
  @end itemize
  
! The metrics information for GNAT depends on the performance of the
! underlying operating system.  The sources of the run-time for tasking
! implementation, together with the output from @emph{-gnatG} can be
! used to determine the exact sequence of operating systems calls made
! to implement various tasking constructs.  Together with appropriate
! information on the performance of the underlying operating system,
! on the exact target in use, this information can be used to determine
! the required metrics.
  
  
  @itemize *
  
  @item 
! "The declarations of @code{Any_Priority} and
! @code{Priority}.  See D.1(11)."
  @end itemize
  
  See declarations in file @code{system.ads}.
--- 17570,17588 ----
  @itemize *
  
  @item 
! “Granularity of locking for Task_Attributes.  See C.7.2(16).”
  @end itemize
  
! No locking is needed if the formal type Attribute has the size and
! alignment of either Integer or System.Address and the bit representation
! of Initial_Value is all zeroes. Otherwise, locking is performed.
  
  
  @itemize *
  
  @item 
! “The declarations of @code{Any_Priority} and
! @code{Priority}.  See D.1(11).”
  @end itemize
  
  See declarations in file @code{system.ads}.
*************** See declarations in file @code{system.ad
*** 17126,17132 ****
  @itemize *
  
  @item 
! "Implementation-defined execution resources.  See D.1(15)."
  @end itemize
  
  There are no implementation-defined execution resources.
--- 17591,17597 ----
  @itemize *
  
  @item 
! “Implementation-defined execution resources.  See D.1(15).”
  @end itemize
  
  There are no implementation-defined execution resources.
*************** There are no implementation-defined exec
*** 17135,17142 ****
  @itemize *
  
  @item 
! "Whether, on a multiprocessor, a task that is waiting for
! access to a protected object keeps its processor busy.  See D.2.1(3)."
  @end itemize
  
  On a multi-processor, a task that is waiting for access to a protected
--- 17600,17607 ----
  @itemize *
  
  @item 
! “Whether, on a multiprocessor, a task that is waiting for
! access to a protected object keeps its processor busy.  See D.2.1(3).”
  @end itemize
  
  On a multi-processor, a task that is waiting for access to a protected
*************** object does not keep its processor busy.
*** 17146,17153 ****
  @itemize *
  
  @item 
! "The affect of implementation defined execution resources
! on task dispatching.  See D.2.1(9)."
  @end itemize
  
  Tasks map to threads in the threads package used by GNAT.  Where possible
--- 17611,17618 ----
  @itemize *
  
  @item 
! “The affect of implementation defined execution resources
! on task dispatching.  See D.2.1(9).”
  @end itemize
  
  Tasks map to threads in the threads package used by GNAT.  Where possible
*************** underlying operating system.
*** 17158,17196 ****
  @itemize *
  
  @item 
! "Implementation-defined @emph{policy_identifiers} allowed
! in a pragma @code{Task_Dispatching_Policy}.  See D.2.2(3)."
! @end itemize
! 
! There are no implementation-defined policy-identifiers allowed in this
! pragma.
! 
! 
! @itemize *
! 
! @item 
! "Implementation-defined aspects of priority inversion.  See
! D.2.2(16)."
  @end itemize
  
! Execution of a task cannot be preempted by the implementation processing
! of delay expirations for lower priority tasks.
  
  
  @itemize *
  
  @item 
! "Implementation-defined task dispatching.  See D.2.2(18)."
  @end itemize
  
! The policy is the same as that of the underlying threads implementation.
  
  
  @itemize *
  
  @item 
! "Implementation-defined @emph{policy_identifiers} allowed
! in a pragma @code{Locking_Policy}.  See D.3(4)."
  @end itemize
  
  The two implementation defined policies permitted in GNAT are
--- 17623,17648 ----
  @itemize *
  
  @item 
! “Implementation-defined task dispatching policies.  See D.2.2(3).”
  @end itemize
  
! There are no implementation-defined task dispatching policies.
  
  
  @itemize *
  
  @item 
! “The value of Default_Quantum in Dispatching.Round_Robin.  See D.2.5(4).”
  @end itemize
  
! The value is 10 milliseconds.
  
  
  @itemize *
  
  @item 
! “Implementation-defined @emph{policy_identifiers} allowed
! in a pragma @code{Locking_Policy}.  See D.3(4).”
  @end itemize
  
  The two implementation defined policies permitted in GNAT are
*************** concurrently.
*** 17207,17213 ****
  @itemize *
  
  @item 
! "Default ceiling priorities.  See D.3(10)."
  @end itemize
  
  The ceiling priority of protected objects of the type
--- 17659,17665 ----
  @itemize *
  
  @item 
! “Default ceiling priorities.  See D.3(10).”
  @end itemize
  
  The ceiling priority of protected objects of the type
*************** Reference Manual D.3(10),
*** 17218,17225 ****
  @itemize *
  
  @item 
! "The ceiling of any protected object used internally by
! the implementation.  See D.3(16)."
  @end itemize
  
  The ceiling priority of internal protected objects is
--- 17670,17677 ----
  @itemize *
  
  @item 
! “The ceiling of any protected object used internally by
! the implementation.  See D.3(16).”
  @end itemize
  
  The ceiling priority of internal protected objects is
*************** The ceiling priority of internal protect
*** 17229,17235 ****
  @itemize *
  
  @item 
! "Implementation-defined queuing policies.  See D.4(1)."
  @end itemize
  
  There are no implementation-defined queuing policies.
--- 17681,17687 ----
  @itemize *
  
  @item 
! “Implementation-defined queuing policies.  See D.4(1).”
  @end itemize
  
  There are no implementation-defined queuing policies.
*************** There are no implementation-defined queu
*** 17238,17257 ****
  @itemize *
  
  @item 
! "On a multiprocessor, any conditions that cause the
! completion of an aborted construct to be delayed later than what is
! specified for a single processor.  See D.6(3)."
  @end itemize
  
! The semantics for abort on a multi-processor is the same as on a single
! processor, there are no further delays.
  
  
  @itemize *
  
  @item 
! "Any operations that implicitly require heap storage
! allocation.  See D.7(8)."
  @end itemize
  
  The only operation that implicitly requires heap storage allocation is
--- 17690,17706 ----
  @itemize *
  
  @item 
! “Implementation-defined admission policies.  See D.4.1(1).”
  @end itemize
  
! There are no implementation-defined admission policies.
  
  
  @itemize *
  
  @item 
! “Any operations that implicitly require heap storage
! allocation.  See D.7(8).”
  @end itemize
  
  The only operation that implicitly requires heap storage allocation is
*************** task creation.
*** 17261,17268 ****
  @itemize *
  
  @item 
! "What happens when a task terminates in the presence of
! pragma @code{No_Task_Termination}. See D.7(15)."
  @end itemize
  
  Execution is erroneous in that case.
--- 17710,17733 ----
  @itemize *
  
  @item 
! “When restriction No_Dynamic_CPU_Assignment applies to a partition, the
! processor on which a task with a CPU value of a Not_A_Specific_CPU will
! execute.  See D.7(10).”
! @end itemize
! 
! Unknown.
! 
! 
! @itemize *
! 
! @item 
! 
! @table @asis
! 
! @item “When restriction No_Task_Termination applies to a partition, what happens
! 
! when a task terminates.  See D.7(15.1).”
! @end table
  @end itemize
  
  Execution is erroneous in that case.
*************** Execution is erroneous in that case.
*** 17271,17367 ****
  @itemize *
  
  @item 
! "Implementation-defined aspects of pragma
! @code{Restrictions}.  See D.7(20)."
  @end itemize
  
! There are no such implementation-defined aspects.
  
  
  @itemize *
  
  @item 
! "Implementation-defined aspects of package
! @code{Real_Time}.  See D.8(17)."
  @end itemize
  
! There are no implementation defined aspects of package @code{Real_Time}.
  
  
  @itemize *
  
  @item 
! "Implementation-defined aspects of
! @emph{delay_statements}.  See D.9(8)."
  @end itemize
  
! Any difference greater than one microsecond will cause the task to be
! delayed (see D.9(7)).
  
  
  @itemize *
  
  @item 
! "The upper bound on the duration of interrupt blocking
! caused by the implementation.  See D.12(5)."
  @end itemize
  
! The upper bound is determined by the underlying operating system.  In
! no cases is it more than 10 milliseconds.
  
  
  @itemize *
  
  @item 
! "The means for creating and executing distributed
! programs.  See E(5)."
  @end itemize
  
! The GLADE package provides a utility GNATDIST for creating and executing
! distributed programs.  See the GLADE reference manual for further details.
  
  
  @itemize *
  
  @item 
! "Any events that can result in a partition becoming
! inaccessible.  See E.1(7)."
  @end itemize
  
! See the GLADE reference manual for full details on such events.
  
  
  @itemize *
  
  @item 
! "The scheduling policies, treatment of priorities, and
! management of shared resources between partitions in certain cases.  See
! E.1(11)."
  @end itemize
  
! See the GLADE reference manual for full details on these aspects of
! multi-partition execution.
  
  
  @itemize *
  
  @item 
! "Events that cause the version of a compilation unit to
! change.  See E.3(5)."
  @end itemize
  
! Editing the source file of a compilation unit, or the source files of
! any units on which it is dependent in a significant way cause the version
! to change.  No other actions cause the version number to change.  All changes
! are significant except those which affect only layout, capitalization or
! comments.
  
  
  @itemize *
  
  @item 
! "Whether the execution of the remote subprogram is
! immediately aborted as a result of cancellation.  See E.4(13)."
  @end itemize
  
  See the GLADE reference manual for details on the effect of abort in
--- 17736,17874 ----
  @itemize *
  
  @item 
! 
! @table @asis
! 
! @item “The behavior when restriction Max_Storage_At_Blocking is violated.
! 
! See D.7(17).”
! @end table
  @end itemize
  
! Execution is erroneous in that case.
  
  
  @itemize *
  
  @item 
! “The behavior when restriction Max_Asynchronous_Select_Nesting is violated.
! See D.7(18).”
  @end itemize
  
! Execution is erroneous in that case.
  
  
  @itemize *
  
  @item 
! “The behavior when restriction Max_Tasks is violated.  See D.7(19).”
  @end itemize
  
! Execution is erroneous in that case.
  
  
  @itemize *
  
  @item 
! 
! @table @asis
! 
! @item “Whether the use of pragma Restrictions results in a reduction in program
! 
! code or data size or execution time.  See D.7(20).”
! 
! Yes it can, but the precise circumstances and properties of such reductions
! are difficult to characterize.
! @end table
! 
! @item 
! “The value of Barrier_Limit’Last in Synchronous_Barriers.  See D.10.1(4).”
  @end itemize
  
! Synchronous_Barriers.Barrier_Limit’Last is Integer’Last .
  
  
  @itemize *
  
  @item 
! “When an aborted task that is waiting on a Synchronous_Barrier is aborted.
! See D.10.1(13).”
  @end itemize
  
! Difficult to characterize.
  
  
  @itemize *
  
  @item 
! 
! @table @asis
! 
! @item “The value of Min_Handler_Ceiling in Execution_Time.Group_Budgets.
! 
! See D.14.2(7).”
! @end table
  @end itemize
  
! See source file @code{a-etgrbu.ads}.
  
  
  @itemize *
  
  @item 
! “The value of CPU_Range’Last in System.Multiprocessors.  See D.16(4).”
  @end itemize
  
! See source file @code{s-multip.ads}.
  
  
  @itemize *
  
  @item 
! “The processor on which the environment task executes in the absence
! of a value for the aspect CPU.  See D.16(13).”
  @end itemize
  
! Unknown.
  
  
  @itemize *
  
  @item 
! “The means for creating and executing distributed
! programs.  See E(5).”
! @end itemize
! 
! The GLADE package provides a utility GNATDIST for creating and executing
! distributed programs. See the GLADE reference manual for further details.
! 
! 
! @itemize *
! 
! @item 
! “Any events that can result in a partition becoming
! inaccessible.  See E.1(7).”
! @end itemize
! 
! See the GLADE reference manual for full details on such events.
! 
! 
! @itemize *
! 
! @item 
! “The scheduling policies, treatment of priorities, and management of
! shared resources between partitions in certain cases.  See E.1(11).”
! @end itemize
! 
! See the GLADE reference manual for full details on these aspects of
! multi-partition execution.
! 
! 
! @itemize *
! 
! @item 
! “Whether the execution of the remote subprogram is
! immediately aborted as a result of cancellation.  See E.4(13).”
  @end itemize
  
  See the GLADE reference manual for details on the effect of abort in
*************** a distributed application.
*** 17371,17388 ****
  @itemize *
  
  @item 
! "Implementation-defined aspects of the PCS.  See E.5(25)."
  @end itemize
  
! See the GLADE reference manual for a full description of all implementation
! defined aspects of the PCS.
  
  
  @itemize *
  
  @item 
! "Implementation-defined interfaces in the PCS.  See
! E.5(26)."
  @end itemize
  
  See the GLADE reference manual for a full description of all
--- 17878,17893 ----
  @itemize *
  
  @item 
! “The range of type System.RPC.Partition_Id.  See E.5(14).”
  @end itemize
  
! System.RPC.Partion_ID’Last is Integer’Last. See source file @code{s-rpc.ads}.
  
  
  @itemize *
  
  @item 
! “Implementation-defined interfaces in the PCS.  See E.5(26).”
  @end itemize
  
  See the GLADE reference manual for a full description of all
*************** implementation defined interfaces.
*** 17392,17399 ****
  @itemize *
  
  @item 
! "The values of named numbers in the package
! @code{Decimal}.  See F.2(7)."
  @end itemize
  
  
--- 17897,17904 ----
  @itemize *
  
  @item 
! “The values of named numbers in the package
! @code{Decimal}.  See F.2(7).”
  @end itemize
  
  
*************** Value
*** 17453,17460 ****
  @itemize *
  
  @item 
! "The value of @code{Max_Picture_Length} in the package
! @code{Text_IO.Editing}.  See F.3.3(16)."
  @end itemize
  
  64
--- 17958,17965 ----
  @itemize *
  
  @item 
! “The value of @code{Max_Picture_Length} in the package
! @code{Text_IO.Editing}.  See F.3.3(16).”
  @end itemize
  
  64
*************** Value
*** 17463,17470 ****
  @itemize *
  
  @item 
! "The value of @code{Max_Picture_Length} in the package
! @code{Wide_Text_IO.Editing}.  See F.3.4(5)."
  @end itemize
  
  64
--- 17968,17975 ----
  @itemize *
  
  @item 
! “The value of @code{Max_Picture_Length} in the package
! @code{Wide_Text_IO.Editing}.  See F.3.4(5).”
  @end itemize
  
  64
*************** Value
*** 17473,17480 ****
  @itemize *
  
  @item 
! "The accuracy actually achieved by the complex elementary
! functions and by other complex arithmetic operations.  See G.1(1)."
  @end itemize
  
  Standard library functions are used for the complex arithmetic
--- 17978,17985 ----
  @itemize *
  
  @item 
! “The accuracy actually achieved by the complex elementary
! functions and by other complex arithmetic operations.  See G.1(1).”
  @end itemize
  
  Standard library functions are used for the complex arithmetic
*************** operations.  Only fast math mode is curr
*** 17484,17492 ****
  @itemize *
  
  @item 
! "The sign of a zero result (or a component thereof) from
  any operator or function in @code{Numerics.Generic_Complex_Types}, when
! @code{Real'Signed_Zeros} is True.  See G.1.1(53)."
  @end itemize
  
  The signs of zero values are as recommended by the relevant
--- 17989,17997 ----
  @itemize *
  
  @item 
! “The sign of a zero result (or a component thereof) from
  any operator or function in @code{Numerics.Generic_Complex_Types}, when
! @code{Real'Signed_Zeros} is True.  See G.1.1(53).”
  @end itemize
  
  The signs of zero values are as recommended by the relevant
*************** implementation advice.
*** 17496,17505 ****
  @itemize *
  
  @item 
! "The sign of a zero result (or a component thereof) from
  any operator or function in
  @code{Numerics.Generic_Complex_Elementary_Functions}, when
! @code{Real'Signed_Zeros} is @code{True}.  See G.1.2(45)."
  @end itemize
  
  The signs of zero values are as recommended by the relevant
--- 18001,18010 ----
  @itemize *
  
  @item 
! “The sign of a zero result (or a component thereof) from
  any operator or function in
  @code{Numerics.Generic_Complex_Elementary_Functions}, when
! @code{Real'Signed_Zeros} is @code{True}.  See G.1.2(45).”
  @end itemize
  
  The signs of zero values are as recommended by the relevant
*************** implementation advice.
*** 17509,17516 ****
  @itemize *
  
  @item 
! "Whether the strict mode or the relaxed mode is the
! default.  See G.2(2)."
  @end itemize
  
  The strict mode is the default.  There is no separate relaxed mode.  GNAT
--- 18014,18021 ----
  @itemize *
  
  @item 
! “Whether the strict mode or the relaxed mode is the
! default.  See G.2(2).”
  @end itemize
  
  The strict mode is the default.  There is no separate relaxed mode.  GNAT
*************** provides a highly efficient implementati
*** 17520,17527 ****
  @itemize *
  
  @item 
! "The result interval in certain cases of fixed-to-float
! conversion.  See G.2.1(10)."
  @end itemize
  
  For cases where the result interval is implementation dependent, the
--- 18025,18032 ----
  @itemize *
  
  @item 
! “The result interval in certain cases of fixed-to-float
! conversion.  See G.2.1(10).”
  @end itemize
  
  For cases where the result interval is implementation dependent, the
*************** floating-point format.
*** 17532,17540 ****
  @itemize *
  
  @item 
! "The result of a floating point arithmetic operation in
  overflow situations, when the @code{Machine_Overflows} attribute of the
! result type is @code{False}.  See G.2.1(13)."
  @end itemize
  
  Infinite and NaN values are produced as dictated by the IEEE
--- 18037,18045 ----
  @itemize *
  
  @item 
! “The result of a floating point arithmetic operation in
  overflow situations, when the @code{Machine_Overflows} attribute of the
! result type is @code{False}.  See G.2.1(13).”
  @end itemize
  
  Infinite and NaN values are produced as dictated by the IEEE
*************** properly generated.
*** 17549,17557 ****
  @itemize *
  
  @item 
! "The result interval for division (or exponentiation by a
  negative exponent), when the floating point hardware implements division
! as multiplication by a reciprocal.  See G.2.1(16)."
  @end itemize
  
  Not relevant, division is IEEE exact.
--- 18054,18062 ----
  @itemize *
  
  @item 
! “The result interval for division (or exponentiation by a
  negative exponent), when the floating point hardware implements division
! as multiplication by a reciprocal.  See G.2.1(16).”
  @end itemize
  
  Not relevant, division is IEEE exact.
*************** Not relevant, division is IEEE exact.
*** 17560,17568 ****
  @itemize *
  
  @item 
! "The definition of close result set, which determines the
! accuracy of certain fixed point multiplications and divisions.  See
! G.2.3(5)."
  @end itemize
  
  Operations in the close result set are performed using IEEE long format
--- 18065,18072 ----
  @itemize *
  
  @item 
! “The definition of close result set, which determines the accuracy of
! certain fixed point multiplications and divisions.  See G.2.3(5).”
  @end itemize
  
  Operations in the close result set are performed using IEEE long format
*************** is converted to the target type.
*** 17574,17582 ****
  @itemize *
  
  @item 
! "Conditions on a @emph{universal_real} operand of a fixed
  point multiplication or division for which the result shall be in the
! perfect result set.  See G.2.3(22)."
  @end itemize
  
  The result is only defined to be in the perfect result set if the result
--- 18078,18086 ----
  @itemize *
  
  @item 
! “Conditions on a @emph{universal_real} operand of a fixed
  point multiplication or division for which the result shall be in the
! perfect result set.  See G.2.3(22).”
  @end itemize
  
  The result is only defined to be in the perfect result set if the result
*************** representable in 64 bits.
*** 17587,17595 ****
  @itemize *
  
  @item 
! "The result of a fixed point arithmetic operation in
  overflow situations, when the @code{Machine_Overflows} attribute of the
! result type is @code{False}.  See G.2.3(27)."
  @end itemize
  
  Not relevant, @code{Machine_Overflows} is @code{True} for fixed-point
--- 18091,18099 ----
  @itemize *
  
  @item 
! “The result of a fixed point arithmetic operation in
  overflow situations, when the @code{Machine_Overflows} attribute of the
! result type is @code{False}.  See G.2.3(27).”
  @end itemize
  
  Not relevant, @code{Machine_Overflows} is @code{True} for fixed-point
*************** types.
*** 17599,17607 ****
  @itemize *
  
  @item 
! "The result of an elementary function reference in
  overflow situations, when the @code{Machine_Overflows} attribute of the
! result type is @code{False}.  See G.2.4(4)."
  @end itemize
  
  IEEE infinite and Nan values are produced as appropriate.
--- 18103,18111 ----
  @itemize *
  
  @item 
! “The result of an elementary function reference in
  overflow situations, when the @code{Machine_Overflows} attribute of the
! result type is @code{False}.  See G.2.4(4).”
  @end itemize
  
  IEEE infinite and Nan values are produced as appropriate.
*************** IEEE infinite and Nan values are produce
*** 17610,17619 ****
  @itemize *
  
  @item 
! "The value of the angle threshold, within which certain
  elementary functions, complex arithmetic operations, and complex
  elementary functions yield results conforming to a maximum relative
! error bound.  See G.2.4(10)."
  @end itemize
  
  Information on this subject is not yet available.
--- 18114,18123 ----
  @itemize *
  
  @item 
! “The value of the angle threshold, within which certain
  elementary functions, complex arithmetic operations, and complex
  elementary functions yield results conforming to a maximum relative
! error bound.  See G.2.4(10).”
  @end itemize
  
  Information on this subject is not yet available.
*************** Information on this subject is not yet a
*** 17622,17629 ****
  @itemize *
  
  @item 
! "The accuracy of certain elementary functions for
! parameters beyond the angle threshold.  See G.2.4(10)."
  @end itemize
  
  Information on this subject is not yet available.
--- 18126,18133 ----
  @itemize *
  
  @item 
! “The accuracy of certain elementary functions for
! parameters beyond the angle threshold.  See G.2.4(10).”
  @end itemize
  
  Information on this subject is not yet available.
*************** Information on this subject is not yet a
*** 17632,17641 ****
  @itemize *
  
  @item 
! "The result of a complex arithmetic operation or complex
  elementary function reference in overflow situations, when the
  @code{Machine_Overflows} attribute of the corresponding real type is
! @code{False}.  See G.2.6(5)."
  @end itemize
  
  IEEE infinite and Nan values are produced as appropriate.
--- 18136,18145 ----
  @itemize *
  
  @item 
! “The result of a complex arithmetic operation or complex
  elementary function reference in overflow situations, when the
  @code{Machine_Overflows} attribute of the corresponding real type is
! @code{False}.  See G.2.6(5).”
  @end itemize
  
  IEEE infinite and Nan values are produced as appropriate.
*************** IEEE infinite and Nan values are produce
*** 17644,17652 ****
  @itemize *
  
  @item 
! "The accuracy of certain complex arithmetic operations and
  certain complex elementary functions for parameters (or components
! thereof) beyond the angle threshold.  See G.2.6(8)."
  @end itemize
  
  Information on those subjects is not yet available.
--- 18148,18156 ----
  @itemize *
  
  @item 
! “The accuracy of certain complex arithmetic operations and
  certain complex elementary functions for parameters (or components
! thereof) beyond the angle threshold.  See G.2.6(8).”
  @end itemize
  
  Information on those subjects is not yet available.
*************** Information on those subjects is not yet
*** 17655,17701 ****
  @itemize *
  
  @item 
- "Information regarding bounded errors and erroneous
- execution.  See H.2(1)."
- @end itemize
- 
- Information on this subject is not yet available.
  
  
! @itemize *
  
! @item 
! "Implementation-defined aspects of pragma
! @code{Inspection_Point}.  See H.3.2(8)."
  @end itemize
  
! Pragma @code{Inspection_Point} ensures that the variable is live and can
! be examined by the debugger at the inspection point.
  
  
  @itemize *
  
  @item 
! "Implementation-defined aspects of pragma
! @code{Restrictions}.  See H.4(25)."
  @end itemize
  
! There are no implementation-defined aspects of pragma @code{Restrictions}.  The
! use of pragma @code{Restrictions [No_Exceptions]} has no effect on the
! generated code.  Checks must suppressed by use of pragma @code{Suppress}.
  
  
  @itemize *
  
  @item 
! "Any restrictions on pragma @code{Restrictions}.  See
! H.4(27)."
  @end itemize
  
! There are no restrictions on pragma @code{Restrictions}.
  
  @node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top
! @anchor{gnat_rm/intrinsic_subprograms doc}@anchor{25c}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{25d}
  @chapter Intrinsic Subprograms
  
  
--- 18159,18203 ----
  @itemize *
  
  @item 
  
+ @table @asis
  
! @item “The accuracy requirements for the subprograms Solve, Inverse,
  
! Determinant, Eigenvalues and Eigensystem for type Real_Matrix.
! See G.3.1(81).”
! @end table
  @end itemize
  
! Information on those subjects is not yet available.
  
  
  @itemize *
  
  @item 
! 
! @table @asis
! 
! @item “The accuracy requirements for the subprograms Solve, Inverse,
! 
! Determinant, Eigenvalues and Eigensystem for type Complex_Matrix.
! See G.3.2(149).”
! @end table
  @end itemize
  
! Information on those subjects is not yet available.
  
  
  @itemize *
  
  @item 
! “The consequences of violating No_Hidden_Indirect_Globals.  See H.4(23.9).”
  @end itemize
  
! Execution is erroneous in that case.
  
  @node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top
! @anchor{gnat_rm/intrinsic_subprograms doc}@anchor{25c}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{25d}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c}
  @chapter Intrinsic Subprograms
  
  
*************** function "+" (X1 : Int1; X2 : Int2) retu
*** 17758,17770 ****
  pragma Import (Intrinsic, "+");
  @end example
  
! This declaration would permit 'mixed mode' arithmetic on items
  of the differing types @code{Int1} and @code{Int2}.
  It is also possible to specify such operators for private types, if the
  full views are appropriate arithmetic types.
  
  @node Compilation_ISO_Date,Compilation_Date,Intrinsic Operators,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id3}@anchor{260}@anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{261}
  @section Compilation_ISO_Date
  
  
--- 18260,18272 ----
  pragma Import (Intrinsic, "+");
  @end example
  
! This declaration would permit ‘mixed mode’ arithmetic on items
  of the differing types @code{Int1} and @code{Int2}.
  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{260}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{261}
  @section Compilation_ISO_Date
  
  
*************** application program should simply call t
*** 17802,17808 ****
  the current compilation (in local time format HH:MM:SS).
  
  @node Enclosing_Entity,Exception_Information,Compilation_Time,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id6}@anchor{266}@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{267}
  @section Enclosing_Entity
  
  
--- 18304,18310 ----
  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{266}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{267}
  @section Enclosing_Entity
  
  
*************** application program should simply call t
*** 17816,17822 ****
  the current subprogram, package, task, entry, or protected subprogram.
  
  @node Exception_Information,Exception_Message,Enclosing_Entity,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id7}@anchor{268}@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{269}
  @section Exception_Information
  
  
--- 18318,18324 ----
  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{268}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{269}
  @section Exception_Information
  
  
*************** so an application program should simply
*** 17858,17864 ****
  the name of the current exception.
  
  @node File,Line,Exception_Name,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id10}@anchor{26e}@anchor{gnat_rm/intrinsic_subprograms file}@anchor{26f}
  @section File
  
  
--- 18360,18366 ----
  the name of the current exception.
  
  @node File,Line,Exception_Name,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms file}@anchor{26e}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{26f}
  @section File
  
  
*************** application program should simply call t
*** 17886,17892 ****
  source line.
  
  @node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{272}@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{273}
  @section Shifts and Rotates
  
  
--- 18388,18394 ----
  source line.
  
  @node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms id12}@anchor{272}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{273}
  @section Shifts and Rotates
  
  
*************** type (signed or modular), as in this exa
*** 17908,17933 ****
  @example
  function Shift_Left
    (Value  : T;
!    Amount : Natural) return T;
  @end example
  
  The function name must be one of
  Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left, or
! Rotate_Right. T must be an integer type. T'Size must be
  8, 16, 32 or 64 bits; if T is modular, the modulus
  must be 2**8, 2**16, 2**32 or 2**64.
  The result type must be the same as the type of @code{Value}.
  The shift amount must be Natural.
  The formal parameter names can be anything.
  
! A more convenient way of providing these shift operators is to use
! the Provide_Shift_Operators pragma, which provides the function declarations
! and corresponding pragma Import's for all five shift functions. Note that in
! using these provided shift operations, shifts performed on negative numbers
! will result in modification of the sign bit.
  
  @node Source_Location,,Shifts and Rotates,Intrinsic Subprograms
! @anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{274}@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{275}
  @section Source_Location
  
  
--- 18410,18437 ----
  @example
  function Shift_Left
    (Value  : T;
!    Amount : Natural) return T
! with Import, Convention => Intrinsic;
  @end example
  
  The function name must be one of
  Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left, or
! Rotate_Right. T must be an integer type. T’Size must be
  8, 16, 32 or 64 bits; if T is modular, the modulus
  must be 2**8, 2**16, 2**32 or 2**64.
  The result type must be the same as the type of @code{Value}.
  The shift amount must be Natural.
  The formal parameter names can be anything.
  
! A more convenient way of providing these shift operators is to use the
! Provide_Shift_Operators pragma, which provides the function declarations and
! corresponding pragma Import’s for all five shift functions. For signed types
! the semantics of these operators is to interpret the bitwise result of the
! 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{274}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{275}
  @section Source_Location
  
  
*************** application program should simply call t
*** 17941,17947 ****
  source file location.
  
  @node Representation Clauses and Pragmas,Standard Library Routines,Intrinsic Subprograms,Top
! @anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d}@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{276}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{277}
  @chapter Representation Clauses and Pragmas
  
  
--- 18445,18451 ----
  source file location.
  
  @node Representation Clauses and Pragmas,Standard Library Routines,Intrinsic Subprograms,Top
! @anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{276}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{277}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d}
  @chapter Representation Clauses and Pragmas
  
  
*************** and this section describes the additiona
*** 17987,17993 ****
  @end menu
  
  @node Alignment Clauses,Size Clauses,,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{278}@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{279}
  @section Alignment Clauses
  
  
--- 18491,18497 ----
  @end menu
  
  @node Alignment Clauses,Size Clauses,,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{278}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{279}
  @section Alignment Clauses
  
  
*************** For elementary types, the alignment is t
*** 18009,18015 ****
  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{190,,Attribute Maximum_Alignment}.)
  
  @geindex Maximum_Alignment attribute
  
--- 18513,18519 ----
  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{18c,,Attribute Maximum_Alignment}.)
  
  @geindex Maximum_Alignment attribute
  
*************** in accordance with the specific Implemen
*** 18162,18171 ****
  
  @quotation
  
! "A @code{Size} clause should be supported for an object if the specified
! @code{Size} is at least as large as its subtype's @code{Size}, and corresponds
! to a size in storage elements that is a multiple of the object's
! @code{Alignment} (if the @code{Alignment} is nonzero)."
  @end quotation
  
  An explicit size clause may be used to override the default size by
--- 18666,18675 ----
  
  @quotation
  
! “A @code{Size} clause should be supported for an object if the specified
! @code{Size} is at least as large as its subtype’s @code{Size}, and corresponds
! to a size in storage elements that is a multiple of the object’s
! @code{Alignment} (if the @code{Alignment} is nonzero).”
  @end quotation
  
  An explicit size clause may be used to override the default size by
*************** if it is known that a Size value can be
*** 18195,18201 ****
  type Integer.
  
  @node Storage_Size Clauses,Size of Variant Record Objects,Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{27c}@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{27d}
  @section Storage_Size Clauses
  
  
--- 18699,18705 ----
  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{27c}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{27d}
  @section Storage_Size Clauses
  
  
*************** the maximum size, regardless of the curr
*** 18378,18384 ****
  variant value.
  
  @node Biased Representation,Value_Size and Object_Size Clauses,Size of Variant Record Objects,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{280}@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{281}
  @section Biased Representation
  
  
--- 18882,18888 ----
  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{280}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{281}
  @section Biased Representation
  
  
*************** objects of the type respectively.
*** 18463,18469 ****
  
  The @code{Object_Size} is used for determining the default size of
  objects and components.  This size value can be referred to using the
! @code{Object_Size} attribute.  The phrase 'is used' here means that it is
  the basis of the determination of the size.  The backend is free to
  pad this up if necessary for efficiency, e.g., an 8-bit stand-alone
  character might be stored in 32 bits on a machine with no efficient
--- 18967,18973 ----
  
  The @code{Object_Size} is used for determining the default size of
  objects and components.  This size value can be referred to using the
! @code{Object_Size} attribute.  The phrase ‘is used’ here means that it is
  the basis of the determination of the size.  The backend is free to
  pad this up if necessary for efficiency, e.g., an 8-bit stand-alone
  character might be stored in 32 bits on a machine with no efficient
*************** only if negative values are possible).
*** 18515,18522 ****
  @item 
  If a subtype statically matches the first subtype of a given type, then it has
  by default the same @code{Value_Size} as the first subtype.  This is a
! consequence of RM 13.1(14): "if two subtypes statically match,
! then their subtype-specific aspects are the same".)
  
  @item 
  All other subtypes have a @code{Value_Size} corresponding to the minimum
--- 19019,19026 ----
  @item 
  If a subtype statically matches the first subtype of a given type, then it has
  by default the same @code{Value_Size} as the first subtype.  This is a
! consequence of RM 13.1(14): “if two subtypes statically match,
! then their subtype-specific aspects are the same”.)
  
  @item 
  All other subtypes have a @code{Value_Size} corresponding to the minimum
*************** Value_Size
*** 18649,18655 ****
  @end multitable
  
  
! Note: the entries marked '*' are not actually specified by the Ada
  Reference Manual, which has nothing to say about size in the dynamic
  case. What GNAT does is to allocate sufficient bits to accommodate any
  possible dynamic values for the bounds at run-time.
--- 19153,19159 ----
  @end multitable
  
  
! Note: the entries marked ‘*’ are not actually specified by the Ada
  Reference Manual, which has nothing to say about size in the dynamic
  case. What GNAT does is to allocate sufficient bits to accommodate any
  possible dynamic values for the bounds at run-time.
*************** the alignment requirement for objects of
*** 18695,18701 ****
  component will require four-byte alignment because that is what type
  Integer requires, whereas the Y component, a Character, will only
  require 1-byte alignment. Since the alignment required for X is the
! greatest of all the components' alignments, that is the alignment
  required for the enclosing record type, i.e., 4 bytes or 32 bits. As
  indicated above, the actual object size must be rounded up so that it is
  a multiple of the alignment value. Therefore, 40 bits rounded up to the
--- 19199,19205 ----
  component will require four-byte alignment because that is what type
  Integer requires, whereas the Y component, a Character, will only
  require 1-byte alignment. Since the alignment required for X is the
! greatest of all the components’ alignments, that is the alignment
  required for the enclosing record type, i.e., 4 bytes or 32 bits. As
  indicated above, the actual object size must be rounded up so that it is
  a multiple of the alignment value. Therefore, 40 bits rounded up to the
*************** definition clause forces biased represen
*** 18732,18738 ****
  warning can be turned off using @code{-gnatw.B}.
  
  @node Component_Size Clauses,Bit_Order Clauses,Value_Size and Object_Size Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{284}@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{285}
  @section Component_Size Clauses
  
  
--- 19236,19242 ----
  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{284}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{285}
  @section Component_Size Clauses
  
  
*************** if desired.  The following section conta
*** 18886,18892 ****
  details regarding the issue of byte ordering.
  
  @node Effect of Bit_Order on Byte Ordering,Pragma Pack for Arrays,Bit_Order Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{288}@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{289}
  @section Effect of Bit_Order on Byte Ordering
  
  
--- 19390,19396 ----
  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{288}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{289}
  @section Effect of Bit_Order on Byte Ordering
  
  
*************** Reference Manual:
*** 18905,18912 ****
  
  @quotation
  
! "2   A bit ordering is a method of interpreting the meaning of
! the storage place attributes."
  @end quotation
  
  To understand the precise definition of storage place attributes in
--- 19409,19416 ----
  
  @quotation
  
! “2   A bit ordering is a method of interpreting the meaning of
! the storage place attributes.”
  @end quotation
  
  To understand the precise definition of storage place attributes in
*************** this context, we visit section 13.5.1 of
*** 18914,18924 ****
  
  @quotation
  
! "13   A record_representation_clause (without the mod_clause)
  specifies the layout.  The storage place attributes (see 13.5.2)
  are taken from the values of the position, first_bit, and last_bit
  expressions after normalizing those values so that first_bit is
! less than Storage_Unit."
  @end quotation
  
  The critical point here is that storage places are taken from
--- 19418,19428 ----
  
  @quotation
  
! “13   A record_representation_clause (without the mod_clause)
  specifies the layout.  The storage place attributes (see 13.5.2)
  are taken from the values of the position, first_bit, and last_bit
  expressions after normalizing those values so that first_bit is
! less than Storage_Unit.”
  @end quotation
  
  The critical point here is that storage places are taken from
*************** is described in the later part of the 13
*** 18928,18941 ****
  
  @quotation
  
! "2   A bit ordering is a method of interpreting the meaning of
  the storage place attributes.  High_Order_First (known in the
! vernacular as 'big endian') means that the first bit of a
  storage element (bit 0) is the most significant bit (interpreting
  the sequence of bits that represent a component as an unsigned
  integer value).  Low_Order_First (known in the vernacular as
! 'little endian') means the opposite: the first bit is the
! least significant."
  @end quotation
  
  Note that the numbering is with respect to the bits of a storage
--- 19432,19445 ----
  
  @quotation
  
! “2   A bit ordering is a method of interpreting the meaning of
  the storage place attributes.  High_Order_First (known in the
! vernacular as ‘big endian’) means that the first bit of a
  storage element (bit 0) is the most significant bit (interpreting
  the sequence of bits that represent a component as an unsigned
  integer value).  Low_Order_First (known in the vernacular as
! ‘little endian’) means the opposite: the first bit is the
! least significant.”
  @end quotation
  
  Note that the numbering is with respect to the bits of a storage
*************** byte presented, which is the first (low
*** 18949,18955 ****
  record is called Master, and the second byte is called Slave.
  
  The left most (most significant bit is called Control for each byte, and
! the remaining 7 bits are called V1, V2, ... V7, where V7 is the rightmost
  (least significant) bit.
  
  On a big-endian machine, we can write the following representation clause
--- 19453,19459 ----
  record is called Master, and the second byte is called Slave.
  
  The left most (most significant bit is called Control for each byte, and
! the remaining 7 bits are called V1, V2, … V7, where V7 is the rightmost
  (least significant) bit.
  
  On a big-endian machine, we can write the following representation clause
*************** to set the boolean constant @code{Master
*** 19143,19149 ****
  an appropriate manner.
  
  @node Pragma Pack for Arrays,Pragma Pack for Records,Effect of Bit_Order on Byte Ordering,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{28a}@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{28b}
  @section Pragma Pack for Arrays
  
  
--- 19647,19653 ----
  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{28a}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{28b}
  @section Pragma Pack for Arrays
  
  
*************** Here 31-bit packing is achieved as requi
*** 19263,19269 ****
  since in this case the programmer intention is clear.
  
  @node Pragma Pack for Records,Record Representation Clauses,Pragma Pack for Arrays,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{28c}@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{28d}
  @section Pragma Pack for Records
  
  
--- 19767,19773 ----
  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{28c}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{28d}
  @section Pragma Pack for Records
  
  
*************** end record;
*** 19432,19438 ****
  
  @geindex Handling of Records with Holes
  
! As a result of alignment considerations, records may contain "holes"
  or gaps which do not correspond to the data bits of any of the components.
  Record representation clauses can also result in holes in records.
  
--- 19936,19942 ----
  
  @geindex Handling of Records with Holes
  
! As a result of alignment considerations, records may contain “holes”
  or gaps which do not correspond to the data bits of any of the components.
  Record representation clauses can also result in holes in records.
  
*************** the overhead of converting representatio
*** 19545,19551 ****
  positional values, (i.e., the value delivered by the @code{Pos} attribute).
  
  @node Address Clauses,Use of Address Clauses for Memory-Mapped I/O,Enumeration Clauses,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{294}@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{295}
  @section Address Clauses
  
  
--- 20049,20055 ----
  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{294}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{295}
  @section Address Clauses
  
  
*************** as found in RM 13.1(22):
*** 19556,19567 ****
  
  @quotation
  
! "An implementation need not support representation
  items containing nonstatic expressions, except that
  an implementation should support a representation item
  for a given entity if each nonstatic expression in the
  representation item is a name that statically denotes
! a constant declared before the entity."
  @end quotation
  
  In practice this is applicable only to address clauses, since this is the
--- 20060,20071 ----
  
  @quotation
  
! “An implementation need not support representation
  items containing nonstatic expressions, except that
  an implementation should support a representation item
  for a given entity if each nonstatic expression in the
  representation item is a name that statically denotes
! a constant declared before the entity.”
  @end quotation
  
  In practice this is applicable only to address clauses, since this is the
*************** the AARM notes in sections 13.1 (22.a-22
*** 19572,19580 ****
  
  22.a   Reason: This is to avoid the following sort of thing:
  
! 22.b        X : Integer := F(...);
! Y : Address := G(...);
! for X'Address use Y;
  
  22.c   In the above, we have to evaluate the
  initialization expression for X before we
--- 20076,20084 ----
  
  22.a   Reason: This is to avoid the following sort of thing:
  
! 22.b        X : Integer := F(…);
! Y : Address := G(…);
! for X’Address use Y;
  
  22.c   In the above, we have to evaluate the
  initialization expression for X before we
*************** like an unreasonable implementation burd
*** 19584,19594 ****
  22.d   The above code should instead be written
  like this:
  
! 22.e        Y : constant Address := G(...);
! X : Integer := F(...);
! for X'Address use Y;
  
! 22.f   This allows the expression 'Y' to be safely
  evaluated before X is created.
  
  22.g   The constant could be a formal parameter of mode in.
--- 20088,20098 ----
  22.d   The above code should instead be written
  like this:
  
! 22.e        Y : constant Address := G(…);
! X : Integer := F(…);
! for X’Address use Y;
  
! 22.f   This allows the expression ‘Y’ to be safely
  evaluated before X is created.
  
  22.g   The constant could be a formal parameter of mode in.
*************** a component of a discriminated record.
*** 19635,19641 ****
  As noted above in section 22.h, address values are typically nonstatic.  In
  particular the To_Address function, even if applied to a literal value, is
  a nonstatic function call.  To avoid this minor annoyance, GNAT provides
! the implementation defined attribute 'To_Address.  The following two
  expressions have identical values:
  
  @geindex Attribute
--- 20139,20145 ----
  As noted above in section 22.h, address values are typically nonstatic.  In
  particular the To_Address function, even if applied to a literal value, is
  a nonstatic function call.  To avoid this minor annoyance, GNAT provides
! the implementation defined attribute ‘To_Address.  The following two
  expressions have identical values:
  
  @geindex Attribute
*************** implementation advice (RM 13.3(19)):
*** 19765,19778 ****
  
  @quotation
  
! "19  If the Address of an object is specified, or it is imported
  or exported, then the implementation should not perform
! optimizations based on assumptions of no aliases."
  @end quotation
  
  GNAT follows this recommendation, and goes further by also applying
  this recommendation to the overlaid variable (@code{A} in the above example)
! in this case. This means that the overlay works "as expected", in that
  a modification to one of the variables will affect the value of the other.
  
  More generally, GNAT interprets this recommendation conservatively for
--- 20269,20282 ----
  
  @quotation
  
! “19  If the Address of an object is specified, or it is imported
  or exported, then the implementation should not perform
! optimizations based on assumptions of no aliases.”
  @end quotation
  
  GNAT follows this recommendation, and goes further by also applying
  this recommendation to the overlaid variable (@code{A} in the above example)
! in this case. This means that the overlay works “as expected”, in that
  a modification to one of the variables will affect the value of the other.
  
  More generally, GNAT interprets this recommendation conservatively for
*************** of the use of this pragma. This may caus
*** 19824,19830 ****
  unintended clobbering effect. The compiler avoids this for scalar
  types, but not for composite objects (where in general the effect
  of @code{Initialize_Scalars} is part of the initialization routine
! for the composite object:
  
  @example
  pragma Initialize_Scalars;
--- 20328,20334 ----
  unintended clobbering effect. The compiler avoids this for scalar
  types, but not for composite objects (where in general the effect
  of @code{Initialize_Scalars} is part of the initialization routine
! for the composite object):
  
  @example
  pragma Initialize_Scalars;
*************** provides the pragma @code{Volatile_Full_
*** 19932,19938 ****
  pragma @code{Atomic} and will give the additional guarantee.
  
  @node Effect of Convention on Representation,Conventions and Anonymous Access Types,Use of Address Clauses for Memory-Mapped I/O,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{298}@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{299}
  @section Effect of Convention on Representation
  
  
--- 20436,20442 ----
  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{298}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{299}
  @section Effect of Convention on Representation
  
  
*************** then the convention will apply to this a
*** 20029,20035 ****
  seems to make sense since it is anomolous in any case to have a
  different convention for an object and its type, and there is clearly
  no way to explicitly specify a convention for an anonymous type, since
! it doesn't have a name to specify!
  
  Furthermore, we decide that if a convention is applied to a record type,
  then this convention is inherited by any of its components that are of an
--- 20533,20539 ----
  seems to make sense since it is anomolous in any case to have a
  different convention for an object and its type, and there is clearly
  no way to explicitly specify a convention for an anonymous type, since
! it doesn’t have a name to specify!
  
  Furthermore, we decide that if a convention is applied to a record type,
  then this convention is inherited by any of its components that are of an
*************** package ConvComp is
*** 20086,20092 ****
  @end example
  
  @node Determining the Representations chosen by GNAT,,Conventions and Anonymous Access Types,Representation Clauses and Pragmas
! @anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{29c}@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{29d}
  @section Determining the Representations chosen by GNAT
  
  
--- 20590,20596 ----
  @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{29c}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{29d}
  @section Determining the Representations chosen by GNAT
  
  
*************** generated by the compiler into the origi
*** 20238,20244 ****
  the actual representation to be used.
  
  @node Standard Library Routines,The Implementation of Standard I/O,Representation Clauses and Pragmas,Top
! @anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e}@anchor{gnat_rm/standard_library_routines doc}@anchor{29e}@anchor{gnat_rm/standard_library_routines id1}@anchor{29f}
  @chapter Standard Library Routines
  
  
--- 20742,20748 ----
  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{29e}@anchor{gnat_rm/standard_library_routines id1}@anchor{29f}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e}
  @chapter Standard Library Routines
  
  
*************** operations, which is not implemented in
*** 20413,20419 ****
  
  This package provides constants describing the range of decimal numbers
  implemented, and also a decimal divide routine (analogous to the COBOL
! verb DIVIDE ... GIVING ... REMAINDER ...)
  
  @item @code{Ada.Direct_IO} @emph{(A.8.4)}
  
--- 20917,20923 ----
  
  This package provides constants describing the range of decimal numbers
  implemented, and also a decimal divide routine (analogous to the COBOL
! verb DIVIDE … GIVING … REMAINDER …)
  
  @item @code{Ada.Direct_IO} @emph{(A.8.4)}
  
*************** all targets (see package spec for detail
*** 20461,20467 ****
  
  Not implemented in GNAT.
  
! @item @code{Ada.Execution_Time.Timers} @emph{(D.14.1)'}
  
  Not implemented in GNAT.
  
--- 20965,20971 ----
  
  Not implemented in GNAT.
  
! @item @code{Ada.Execution_Time.Timers} @emph{(D.14.1)’}
  
  Not implemented in GNAT.
  
*************** For packages in Interfaces and System, a
*** 21062,21068 ****
  available in GNAT, see the Ada 2012 RM for full details.
  
  @node The Implementation of Standard I/O,The GNAT Library,Standard Library Routines,Top
! @anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f}@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2a0}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2a1}
  @chapter The Implementation of Standard I/O
  
  
--- 21566,21572 ----
  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{2a0}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2a1}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f}
  @chapter The Implementation of Standard I/O
  
  
*************** these additional facilities are also des
*** 21114,21120 ****
  @end menu
  
  @node Standard I/O Packages,FORM Strings,,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2a2}@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2a3}
  @section Standard I/O Packages
  
  
--- 21618,21624 ----
  @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{2a2}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2a3}
  @section Standard I/O Packages
  
  
*************** There is no limit on the size of Direct_
*** 21231,21237 ****
  necessary to accommodate whatever records are written to the file.
  
  @node Sequential_IO,Text_IO,Direct_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2a8}@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2a9}
  @section Sequential_IO
  
  
--- 21735,21741 ----
  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{2a8}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2a9}
  @section Sequential_IO
  
  
*************** between two Ada files, then the differen
*** 21397,21403 ****
  situations.
  
  @node Reading and Writing Non-Regular Files,Get_Immediate,Stream Pointer Positioning,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2ae}@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2af}
  @subsection Reading and Writing Non-Regular Files
  
  
--- 21901,21907 ----
  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{2ae}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2af}
  @subsection Reading and Writing Non-Regular Files
  
  
*************** above they will not be treated as page m
*** 21438,21444 ****
  piped to another Ada program.
  
  Another important discrepancy when reading non-regular files is that the end
! of file indication is not 'sticky'.  If an end of file is entered, e.g., by
  pressing the @code{EOT} key,
  then end of file
  is signaled once (i.e., the test @code{End_Of_File}
--- 21942,21948 ----
  piped to another Ada program.
  
  Another important discrepancy when reading non-regular files is that the end
! of file indication is not ‘sticky’.  If an end of file is entered, e.g., by
  pressing the @code{EOT} key,
  then end of file
  is signaled once (i.e., the test @code{End_Of_File}
*************** the string is to be read.
*** 21510,21516 ****
  @end itemize
  
  @node Text_IO Facilities for Unbounded Strings,,Text_IO Extensions,Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2b6}@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2b7}
  @subsection Text_IO Facilities for Unbounded Strings
  
  
--- 22014,22020 ----
  @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{2b6}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2b7}
  @subsection Text_IO Facilities for Unbounded Strings
  
  
*************** files @code{a-szuzti.ads} and @code{a-sz
*** 21558,21564 ****
  @code{Wide_Wide_Text_IO} functionality for unbounded wide wide strings.
  
  @node Wide_Text_IO,Wide_Wide_Text_IO,Text_IO,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2b8}@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2b9}
  @section Wide_Text_IO
  
  
--- 22062,22068 ----
  @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{2b8}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2b9}
  @section Wide_Text_IO
  
  
*************** as UTF-8 will be used for text input out
*** 21761,21771 ****
  If brackets notation is used, then any occurrence of a left bracket
  in the input file which is not the start of a valid wide character
  sequence will cause Constraint_Error to be raised. It is possible to
! encode a left bracket as ["5B"] and Wide_Text_IO and Wide_Wide_Text_IO
  input will interpret this as a left bracket.
  
  However, when a left bracket is output, it will be output as a left bracket
! and not as ["5B"]. We make this decision because for normal use of
  Wide_Text_IO for outputting messages, it is unpleasant to clobber left
  brackets. For example, if we write:
  
--- 22265,22275 ----
  If brackets notation is used, then any occurrence of a left bracket
  in the input file which is not the start of a valid wide character
  sequence will cause Constraint_Error to be raised. It is possible to
! encode a left bracket as [“5B”] and Wide_Text_IO and Wide_Wide_Text_IO
  input will interpret this as a left bracket.
  
  However, when a left bracket is output, it will be output as a left bracket
! and not as [“5B”]. We make this decision because for normal use of
  Wide_Text_IO for outputting messages, it is unpleasant to clobber left
  brackets. For example, if we write:
  
*************** Start of output ["5B"]first run]
*** 21785,21791 ****
  @quotation
  
  In practice brackets encoding is reasonably useful for normal Put_Line use
! since we won't get confused between left brackets and wide character
  sequences in the output. But for input, or when files are written out
  and read back in, it really makes better sense to use one of the standard
  encoding methods such as UTF-8.
--- 22289,22295 ----
  @quotation
  
  In practice brackets encoding is reasonably useful for normal Put_Line use
! since we won’t get confused between left brackets and wide character
  sequences in the output. But for input, or when files are written out
  and read back in, it really makes better sense to use one of the standard
  encoding methods such as UTF-8.
*************** input also causes Constraint_Error to be
*** 21805,21811 ****
  @end menu
  
  @node Stream Pointer Positioning<2>,Reading and Writing Non-Regular Files<2>,,Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2ba}@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2bb}
  @subsection Stream Pointer Positioning
  
  
--- 22309,22315 ----
  @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{2ba}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2bb}
  @subsection Stream Pointer Positioning
  
  
*************** to a normal program using @code{Wide_Tex
*** 21829,21835 ****
  can be observed if the wide text file shares a stream with another file.
  
  @node Reading and Writing Non-Regular Files<2>,,Stream Pointer Positioning<2>,Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2bc}@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2bd}
  @subsection Reading and Writing Non-Regular Files
  
  
--- 22333,22339 ----
  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{2bc}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2bd}
  @subsection Reading and Writing Non-Regular Files
  
  
*************** input also causes Constraint_Error to be
*** 22009,22015 ****
  @end menu
  
  @node Stream Pointer Positioning<3>,Reading and Writing Non-Regular Files<3>,,Wide_Wide_Text_IO
! @anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2c0}@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2c1}
  @subsection Stream Pointer Positioning
  
  
--- 22513,22519 ----
  @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{2c0}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2c1}
  @subsection Stream Pointer Positioning
  
  
*************** Unicode 8-bit encoding
*** 22236,22242 ****
  This encoding is only supported on the Windows platform.
  
  @node Open Modes,Operations on C Streams,File content encoding,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2ce}@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2cf}
  @section Open Modes
  
  
--- 22740,22746 ----
  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{2ce}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2cf}
  @section Open Modes
  
  
*************** Append_File
*** 22269,22279 ****
  
  @tab
  
! "r+"
  
  @tab
  
! "w+"
  
  @item
  
--- 22773,22783 ----
  
  @tab
  
! “r+”
  
  @tab
  
! “w+”
  
  @item
  
*************** In_File
*** 22281,22291 ****
  
  @tab
  
! "r"
  
  @tab
  
! "w+"
  
  @item
  
--- 22785,22795 ----
  
  @tab
  
! “r”
  
  @tab
  
! “w+”
  
  @item
  
*************** Out_File (Direct_IO)
*** 22293,22303 ****
  
  @tab
  
! "r+"
  
  @tab
  
! "w"
  
  @item
  
--- 22797,22807 ----
  
  @tab
  
! “r+”
  
  @tab
  
! “w”
  
  @item
  
*************** Out_File (all other cases)
*** 22305,22315 ****
  
  @tab
  
! "w"
  
  @tab
  
! "w"
  
  @item
  
--- 22809,22819 ----
  
  @tab
  
! “w”
  
  @tab
  
! “w”
  
  @item
  
*************** Inout_File
*** 22317,22327 ****
  
  @tab
  
! "r+"
  
  @tab
  
! "w+"
  
  @end multitable
  
--- 22821,22831 ----
  
  @tab
  
! “r+”
  
  @tab
  
! “w+”
  
  @end multitable
  
*************** subsequently requires switching from rea
*** 22339,22345 ****
  then the file is reopened in @code{r+} mode to permit the required operation.
  
  @node Operations on C Streams,Interfacing to C Streams,Open Modes,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2d0}@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2d1}
  @section Operations on C Streams
  
  
--- 22843,22849 ----
  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{2d0}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2d1}
  @section Operations on C Streams
  
  
*************** end Interfaces.C_Streams;
*** 22499,22505 ****
  @end example
  
  @node Interfacing to C Streams,,Operations on C Streams,The Implementation of Standard I/O
! @anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2d2}@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2d3}
  @section Interfacing to C Streams
  
  
--- 23003,23009 ----
  @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{2d2}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2d3}
  @section Interfacing to C Streams
  
  
*************** imported from a C program, allowing an A
*** 22592,22598 ****
  existing C file.
  
  @node The GNAT Library,Interfacing to Other Languages,The Implementation of Standard I/O,Top
! @anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10}@anchor{gnat_rm/the_gnat_library doc}@anchor{2d4}@anchor{gnat_rm/the_gnat_library id1}@anchor{2d5}
  @chapter The GNAT Library
  
  
--- 23096,23102 ----
  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{2d4}@anchor{gnat_rm/the_gnat_library id1}@anchor{2d5}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10}
  @chapter The GNAT Library
  
  
*************** of GNAT, and will generate a warning mes
*** 22786,22792 ****
  @end menu
  
  @node Ada Characters Latin_9 a-chlat9 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id2}@anchor{2d6}@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2d7}
  @section @code{Ada.Characters.Latin_9} (@code{a-chlat9.ads})
  
  
--- 23290,23296 ----
  @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{2d6}@anchor{gnat_rm/the_gnat_library id2}@anchor{2d7}
  @section @code{Ada.Characters.Latin_9} (@code{a-chlat9.ads})
  
  
*************** is specifically authorized by the Ada Re
*** 22820,22826 ****
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Latin_9 a-cwila1 ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id4}@anchor{2da}@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila1-ads}@anchor{2db}
  @section @code{Ada.Characters.Wide_Latin_9} (@code{a-cwila1.ads})
  
  
--- 23324,23330 ----
  (RM A.3.3(27)).
  
  @node Ada Characters Wide_Latin_9 a-cwila1 ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila1-ads}@anchor{2da}@anchor{gnat_rm/the_gnat_library id4}@anchor{2db}
  @section @code{Ada.Characters.Wide_Latin_9} (@code{a-cwila1.ads})
  
  
*************** is specifically authorized by the Ada Re
*** 22871,22877 ****
  (RM A.3.3(27)).
  
  @node Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads,Ada Containers Formal_Hashed_Maps a-cfhama ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id7}@anchor{2e0}@anchor{gnat_rm/the_gnat_library ada-containers-formal-doubly-linked-lists-a-cfdlli-ads}@anchor{2e1}
  @section @code{Ada.Containers.Formal_Doubly_Linked_Lists} (@code{a-cfdlli.ads})
  
  
--- 23375,23381 ----
  (RM A.3.3(27)).
  
  @node Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads,Ada Containers Formal_Hashed_Maps a-cfhama ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-containers-formal-doubly-linked-lists-a-cfdlli-ads}@anchor{2e0}@anchor{gnat_rm/the_gnat_library id7}@anchor{2e1}
  @section @code{Ada.Containers.Formal_Doubly_Linked_Lists} (@code{a-cfdlli.ads})
  
  
*************** efficient version than the one defined i
*** 22890,22896 ****
  does not have the complex overhead required to detect cursor tampering.
  
  @node Ada Containers Formal_Hashed_Maps a-cfhama ads,Ada Containers Formal_Hashed_Sets a-cfhase ads,Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id8}@anchor{2e2}@anchor{gnat_rm/the_gnat_library ada-containers-formal-hashed-maps-a-cfhama-ads}@anchor{2e3}
  @section @code{Ada.Containers.Formal_Hashed_Maps} (@code{a-cfhama.ads})
  
  
--- 23394,23400 ----
  does not have the complex overhead required to detect cursor tampering.
  
  @node Ada Containers Formal_Hashed_Maps a-cfhama ads,Ada Containers Formal_Hashed_Sets a-cfhase ads,Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-containers-formal-hashed-maps-a-cfhama-ads}@anchor{2e2}@anchor{gnat_rm/the_gnat_library id8}@anchor{2e3}
  @section @code{Ada.Containers.Formal_Hashed_Maps} (@code{a-cfhama.ads})
  
  
*************** efficient version than the one defined i
*** 22909,22915 ****
  does not have the complex overhead required to detect cursor tampering.
  
  @node Ada Containers Formal_Hashed_Sets a-cfhase ads,Ada Containers Formal_Ordered_Maps a-cforma ads,Ada Containers Formal_Hashed_Maps a-cfhama ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id9}@anchor{2e4}@anchor{gnat_rm/the_gnat_library ada-containers-formal-hashed-sets-a-cfhase-ads}@anchor{2e5}
  @section @code{Ada.Containers.Formal_Hashed_Sets} (@code{a-cfhase.ads})
  
  
--- 23413,23419 ----
  does not have the complex overhead required to detect cursor tampering.
  
  @node Ada Containers Formal_Hashed_Sets a-cfhase ads,Ada Containers Formal_Ordered_Maps a-cforma ads,Ada Containers Formal_Hashed_Maps a-cfhama ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-containers-formal-hashed-sets-a-cfhase-ads}@anchor{2e4}@anchor{gnat_rm/the_gnat_library id9}@anchor{2e5}
  @section @code{Ada.Containers.Formal_Hashed_Sets} (@code{a-cfhase.ads})
  
  
*************** efficient version than the one defined i
*** 22928,22934 ****
  does not have the complex overhead required to detect cursor tampering.
  
  @node Ada Containers Formal_Ordered_Maps a-cforma ads,Ada Containers Formal_Ordered_Sets a-cforse ads,Ada Containers Formal_Hashed_Sets a-cfhase ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id10}@anchor{2e6}@anchor{gnat_rm/the_gnat_library ada-containers-formal-ordered-maps-a-cforma-ads}@anchor{2e7}
  @section @code{Ada.Containers.Formal_Ordered_Maps} (@code{a-cforma.ads})
  
  
--- 23432,23438 ----
  does not have the complex overhead required to detect cursor tampering.
  
  @node Ada Containers Formal_Ordered_Maps a-cforma ads,Ada Containers Formal_Ordered_Sets a-cforse ads,Ada Containers Formal_Hashed_Sets a-cfhase ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-containers-formal-ordered-maps-a-cforma-ads}@anchor{2e6}@anchor{gnat_rm/the_gnat_library id10}@anchor{2e7}
  @section @code{Ada.Containers.Formal_Ordered_Maps} (@code{a-cforma.ads})
  
  
*************** efficient version than the one defined i
*** 22966,22972 ****
  does not have the complex overhead required to detect cursor tampering.
  
  @node Ada Containers Formal_Vectors a-cofove ads,Ada Containers Formal_Indefinite_Vectors a-cfinve ads,Ada Containers Formal_Ordered_Sets a-cforse ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id12}@anchor{2ea}@anchor{gnat_rm/the_gnat_library ada-containers-formal-vectors-a-cofove-ads}@anchor{2eb}
  @section @code{Ada.Containers.Formal_Vectors} (@code{a-cofove.ads})
  
  
--- 23470,23476 ----
  does not have the complex overhead required to detect cursor tampering.
  
  @node Ada Containers Formal_Vectors a-cofove ads,Ada Containers Formal_Indefinite_Vectors a-cfinve ads,Ada Containers Formal_Ordered_Sets a-cforse ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-containers-formal-vectors-a-cofove-ads}@anchor{2ea}@anchor{gnat_rm/the_gnat_library id12}@anchor{2eb}
  @section @code{Ada.Containers.Formal_Vectors} (@code{a-cofove.ads})
  
  
*************** efficient version than the one defined i
*** 22985,22991 ****
  does not have the complex overhead required to detect cursor tampering.
  
  @node Ada Containers Formal_Indefinite_Vectors a-cfinve ads,Ada Containers Functional_Vectors a-cofuve ads,Ada Containers Formal_Vectors a-cofove ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id13}@anchor{2ec}@anchor{gnat_rm/the_gnat_library ada-containers-formal-indefinite-vectors-a-cfinve-ads}@anchor{2ed}
  @section @code{Ada.Containers.Formal_Indefinite_Vectors} (@code{a-cfinve.ads})
  
  
--- 23489,23495 ----
  does not have the complex overhead required to detect cursor tampering.
  
  @node Ada Containers Formal_Indefinite_Vectors a-cfinve ads,Ada Containers Functional_Vectors a-cofuve ads,Ada Containers Formal_Vectors a-cofove ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-containers-formal-indefinite-vectors-a-cfinve-ads}@anchor{2ec}@anchor{gnat_rm/the_gnat_library id13}@anchor{2ed}
  @section @code{Ada.Containers.Formal_Indefinite_Vectors} (@code{a-cfinve.ads})
  
  
*************** efficient version than the one defined i
*** 23004,23010 ****
  does not have the complex overhead required to detect cursor tampering.
  
  @node Ada Containers Functional_Vectors a-cofuve ads,Ada Containers Functional_Sets a-cofuse ads,Ada Containers Formal_Indefinite_Vectors a-cfinve ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id14}@anchor{2ee}@anchor{gnat_rm/the_gnat_library ada-containers-functional-vectors-a-cofuve-ads}@anchor{2ef}
  @section @code{Ada.Containers.Functional_Vectors} (@code{a-cofuve.ads})
  
  
--- 23508,23514 ----
  does not have the complex overhead required to detect cursor tampering.
  
  @node Ada Containers Functional_Vectors a-cofuve ads,Ada Containers Functional_Sets a-cofuse ads,Ada Containers Formal_Indefinite_Vectors a-cfinve ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-containers-functional-vectors-a-cofuve-ads}@anchor{2ee}@anchor{gnat_rm/the_gnat_library id14}@anchor{2ef}
  @section @code{Ada.Containers.Functional_Vectors} (@code{a-cofuve.ads})
  
  
*************** and annotations, so that they can be rem
*** 23048,23054 ****
  specification of this unit is compatible with SPARK 2014.
  
  @node Ada Containers Functional_Maps a-cofuma ads,Ada Containers Bounded_Holders a-coboho ads,Ada Containers Functional_Sets a-cofuse ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id16}@anchor{2f2}@anchor{gnat_rm/the_gnat_library ada-containers-functional-maps-a-cofuma-ads}@anchor{2f3}
  @section @code{Ada.Containers.Functional_Maps} (@code{a-cofuma.ads})
  
  
--- 23552,23558 ----
  specification of this unit is compatible with SPARK 2014.
  
  @node Ada Containers Functional_Maps a-cofuma ads,Ada Containers Bounded_Holders a-coboho ads,Ada Containers Functional_Sets a-cofuse ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library ada-containers-functional-maps-a-cofuma-ads}@anchor{2f2}@anchor{gnat_rm/the_gnat_library id16}@anchor{2f3}
  @section @code{Ada.Containers.Functional_Maps} (@code{a-cofuma.ads})
  
  
*************** provides a mechanism for obtaining envir
*** 23095,23101 ****
  where this concept makes sense.
  
  @node Ada Command_Line Remove a-colire ads,Ada Command_Line Response_File a-clrefi ads,Ada Command_Line Environment a-colien ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id19}@anchor{2f8}@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2f9}
  @section @code{Ada.Command_Line.Remove} (@code{a-colire.ads})
  
  
--- 23599,23605 ----
  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{2f8}@anchor{gnat_rm/the_gnat_library id19}@anchor{2f9}
  @section @code{Ada.Command_Line.Remove} (@code{a-colire.ads})
  
  
*************** to further calls on the subprograms in @
*** 23113,23119 ****
  see the removed argument.
  
  @node Ada Command_Line Response_File a-clrefi ads,Ada Direct_IO C_Streams a-diocst ads,Ada Command_Line Remove a-colire ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id20}@anchor{2fa}@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2fb}
  @section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads})
  
  
--- 23617,23623 ----
  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{2fa}@anchor{gnat_rm/the_gnat_library id20}@anchor{2fb}
  @section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads})
  
  
*************** see the removed argument.
*** 23128,23139 ****
  @geindex handling long command lines
  
  This child of @code{Ada.Command_Line} provides a mechanism facilities for
! getting command line arguments from a text file, called a "response file".
  Using a response file allow passing a set of arguments to an executable longer
  than the maximum allowed by the system on the command line.
  
  @node Ada Direct_IO C_Streams a-diocst ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Command_Line Response_File a-clrefi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id21}@anchor{2fc}@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{2fd}
  @section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads})
  
  
--- 23632,23643 ----
  @geindex handling long command lines
  
  This child of @code{Ada.Command_Line} provides a mechanism facilities for
! getting command line arguments from a text file, called a “response file”.
  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{2fc}@anchor{gnat_rm/the_gnat_library id21}@anchor{2fd}
  @section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads})
  
  
*************** extracted from a file opened on the Ada
*** 23148,23154 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Direct_IO C_Streams a-diocst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id22}@anchor{2fe}@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{2ff}
  @section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads})
  
  
--- 23652,23658 ----
  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{2fe}@anchor{gnat_rm/the_gnat_library id22}@anchor{2ff}
  @section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads})
  
  
*************** exception occurrence (@code{Null_Occurre
*** 23162,23168 ****
  an exception.
  
  @node Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Exceptions Traceback a-exctra ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id23}@anchor{300}@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{301}
  @section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads})
  
  
--- 23666,23672 ----
  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{300}@anchor{gnat_rm/the_gnat_library id23}@anchor{301}
  @section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads})
  
  
*************** extracted from a file opened on the Ada
*** 23204,23210 ****
  can be constructed from a stream opened on the C side.
  
  @node Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Strings Unbounded Text_IO a-suteio ads,Ada Sequential_IO C_Streams a-siocst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id26}@anchor{306}@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{307}
  @section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads})
  
  
--- 23708,23714 ----
  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{306}@anchor{gnat_rm/the_gnat_library id26}@anchor{307}
  @section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads})
  
  
*************** strings, avoiding the necessity for an i
*** 23236,23242 ****
  with ordinary strings.
  
  @node Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Strings Unbounded Text_IO a-suteio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id28}@anchor{30a}@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{30b}
  @section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads})
  
  
--- 23740,23746 ----
  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{30a}@anchor{gnat_rm/the_gnat_library id28}@anchor{30b}
  @section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads})
  
  
*************** wide strings, avoiding the necessity for
*** 23253,23259 ****
  with ordinary wide strings.
  
  @node Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Task_Initialization a-tasini ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id29}@anchor{30c}@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{30d}
  @section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads})
  
  
--- 23757,23763 ----
  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{30c}@anchor{gnat_rm/the_gnat_library id29}@anchor{30d}
  @section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads})
  
  
*************** execution (for example a standard input
*** 23312,23318 ****
  interactive).
  
  @node Ada Wide_Characters Unicode a-wichun ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id33}@anchor{314}@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{315}
  @section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads})
  
  
--- 23816,23822 ----
  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{314}@anchor{gnat_rm/the_gnat_library id33}@anchor{315}
  @section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads})
  
  
*************** This package provides subprograms that a
*** 23325,23331 ****
  Wide_Character values according to Unicode categories.
  
  @node Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Characters Unicode a-wichun ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id34}@anchor{316}@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{317}
  @section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads})
  
  
--- 23829,23835 ----
  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{316}@anchor{gnat_rm/the_gnat_library id34}@anchor{317}
  @section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads})
  
  
*************** execution (for example a standard input
*** 23355,23361 ****
  interactive).
  
  @node Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id36}@anchor{31a}@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{31b}
  @section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads})
  
  
--- 23859,23865 ----
  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{31a}@anchor{gnat_rm/the_gnat_library id36}@anchor{31b}
  @section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads})
  
  
*************** This package provides subprograms that a
*** 23368,23374 ****
  Wide_Wide_Character values according to Unicode categories.
  
  @node Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id37}@anchor{31c}@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{31d}
  @section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads})
  
  
--- 23872,23878 ----
  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{31c}@anchor{gnat_rm/the_gnat_library id37}@anchor{31d}
  @section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads})
  
  
*************** binding.
*** 23422,23428 ****
  This package provides the Vector/View conversion routines.
  
  @node GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Conversions g-altcon ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id41}@anchor{324}@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{325}
  @section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads})
  
  
--- 23926,23932 ----
  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{324}@anchor{gnat_rm/the_gnat_library id41}@anchor{325}
  @section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads})
  
  
*************** to AltiVec facilities.
*** 23456,23462 ****
  
  @geindex AltiVec
  
! This package provides public 'View' data types from/to which private
  vector representations can be converted via
  GNAT.Altivec.Conversions. This allows convenient access to individual
  vector elements and provides a simple way to initialize vector
--- 23960,23966 ----
  
  @geindex AltiVec
  
! This package provides public ‘View’ data types from/to which private
  vector representations can be converted via
  GNAT.Altivec.Conversions. This allows convenient access to individual
  vector elements and provides a simple way to initialize vector
*************** an array wherever the separators appear,
*** 23476,23482 ****
  to the resulting slices.
  
  @node GNAT AWK g-awk ads,GNAT Bind_Environment g-binenv ads,GNAT Array_Split g-arrspl ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id45}@anchor{32c}@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{32d}
  @section @code{GNAT.AWK} (@code{g-awk.ads})
  
  
--- 23980,23986 ----
  to the resulting slices.
  
  @node GNAT AWK g-awk ads,GNAT Bind_Environment g-binenv ads,GNAT Array_Split g-arrspl ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{32c}@anchor{gnat_rm/the_gnat_library id45}@anchor{32d}
  @section @code{GNAT.AWK} (@code{g-awk.ads})
  
  
*************** or more files containing formatted data.
*** 23491,23497 ****
  where each record is a line and a field is a data element in this line.
  
  @node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT AWK g-awk ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id46}@anchor{32e}@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{32f}
  @section @code{GNAT.Bind_Environment} (@code{g-binenv.ads})
  
  
--- 23995,24001 ----
  where each record is a line and a field is a data element in this line.
  
  @node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT AWK g-awk ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{32e}@anchor{gnat_rm/the_gnat_library id46}@anchor{32f}
  @section @code{GNAT.Bind_Environment} (@code{g-binenv.ads})
  
  
*************** These associations can be specified usin
*** 23504,23510 ****
  line switch.
  
  @node GNAT Branch_Prediction g-brapre ads,GNAT Bounded_Buffers g-boubuf ads,GNAT Bind_Environment g-binenv ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id47}@anchor{330}@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{331}
  @section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads})
  
  
--- 24008,24014 ----
  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{330}@anchor{gnat_rm/the_gnat_library id47}@anchor{331}
  @section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads})
  
  
*************** data items.  Exchange and comparison pro
*** 23558,23564 ****
  access-to-procedure values.
  
  @node GNAT Bubble_Sort_A g-busora ads,GNAT Bubble_Sort_G g-busorg ads,GNAT Bubble_Sort g-bubsor ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id51}@anchor{338}@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{339}
  @section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads})
  
  
--- 24062,24068 ----
  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{338}@anchor{gnat_rm/the_gnat_library id51}@anchor{339}
  @section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads})
  
  
*************** multiple instantiations.
*** 23601,23607 ****
  @geindex Wide characte representations
  
  Provides a routine which given a string, reads the start of the string to
! see whether it is one of the standard byte order marks (BOM's) which signal
  the encoding of the string. The routine includes detection of special XML
  sequences for various UCS input formats.
  
--- 24105,24111 ----
  @geindex Wide characte representations
  
  Provides a routine which given a string, reads the start of the string to
! see whether it is one of the standard byte order marks (BOM’s) which signal
  the encoding of the string. The routine includes detection of special XML
  sequences for various UCS input formats.
  
*************** General routines for swapping the bytes
*** 23620,23626 ****
  Machine-specific implementations are available in some cases.
  
  @node GNAT Calendar g-calend ads,GNAT Calendar Time_IO g-catiio ads,GNAT Byte_Swapping g-bytswa ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id55}@anchor{340}@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{341}
  @section @code{GNAT.Calendar} (@code{g-calend.ads})
  
  
--- 24124,24130 ----
  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{340}@anchor{gnat_rm/the_gnat_library id55}@anchor{341}
  @section @code{GNAT.Calendar} (@code{g-calend.ads})
  
  
*************** Also provides conversion of @code{Ada.Ca
*** 23634,23640 ****
  C @code{timeval} format.
  
  @node GNAT Calendar Time_IO g-catiio ads,GNAT CRC32 g-crc32 ads,GNAT Calendar g-calend ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id56}@anchor{342}@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{343}
  @section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads})
  
  
--- 24138,24144 ----
  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{342}@anchor{gnat_rm/the_gnat_library id56}@anchor{343}
  @section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads})
  
  
*************** C @code{timeval} format.
*** 23645,23651 ****
  @geindex GNAT.Calendar.Time_IO (g-catiio.ads)
  
  @node GNAT CRC32 g-crc32 ads,GNAT Case_Util g-casuti ads,GNAT Calendar Time_IO g-catiio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id57}@anchor{344}@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{345}
  @section @code{GNAT.CRC32} (@code{g-crc32.ads})
  
  
--- 24149,24155 ----
  @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{344}@anchor{gnat_rm/the_gnat_library id57}@anchor{345}
  @section @code{GNAT.CRC32} (@code{g-crc32.ads})
  
  
*************** of this algorithm see
*** 23662,23668 ****
  Aug. 1988.  Sarwate, D.V.
  
  @node GNAT Case_Util g-casuti ads,GNAT CGI g-cgi ads,GNAT CRC32 g-crc32 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id58}@anchor{346}@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{347}
  @section @code{GNAT.Case_Util} (@code{g-casuti.ads})
  
  
--- 24166,24172 ----
  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{346}@anchor{gnat_rm/the_gnat_library id58}@anchor{347}
  @section @code{GNAT.Case_Util} (@code{g-casuti.ads})
  
  
*************** without the overhead of the full casing
*** 23677,23683 ****
  in @code{Ada.Characters.Handling}.
  
  @node GNAT CGI g-cgi ads,GNAT CGI Cookie g-cgicoo ads,GNAT Case_Util g-casuti ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id59}@anchor{348}@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{349}
  @section @code{GNAT.CGI} (@code{g-cgi.ads})
  
  
--- 24181,24187 ----
  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{348}@anchor{gnat_rm/the_gnat_library id59}@anchor{349}
  @section @code{GNAT.CGI} (@code{g-cgi.ads})
  
  
*************** This is a package to help debugging CGI
*** 23719,23725 ****
  programs written in Ada.
  
  @node GNAT Command_Line g-comlin ads,GNAT Compiler_Version g-comver ads,GNAT CGI Debug g-cgideb ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id62}@anchor{34e}@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{34f}
  @section @code{GNAT.Command_Line} (@code{g-comlin.ads})
  
  
--- 24223,24229 ----
  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{34e}@anchor{gnat_rm/the_gnat_library id62}@anchor{34f}
  @section @code{GNAT.Command_Line} (@code{g-comlin.ads})
  
  
*************** of the compiler if a consistent tool set
*** 23750,23756 ****
  of a partition).
  
  @node GNAT Ctrl_C g-ctrl_c ads,GNAT Current_Exception g-curexc ads,GNAT Compiler_Version g-comver ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id64}@anchor{352}@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{353}
  @section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads})
  
  
--- 24254,24260 ----
  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{352}@anchor{gnat_rm/the_gnat_library id64}@anchor{353}
  @section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads})
  
  
*************** of a partition).
*** 23761,23767 ****
  Provides a simple interface to handle Ctrl-C keyboard events.
  
  @node GNAT Current_Exception g-curexc ads,GNAT Debug_Pools g-debpoo ads,GNAT Ctrl_C g-ctrl_c ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id65}@anchor{354}@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{355}
  @section @code{GNAT.Current_Exception} (@code{g-curexc.ads})
  
  
--- 24265,24271 ----
  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{354}@anchor{gnat_rm/the_gnat_library id65}@anchor{355}
  @section @code{GNAT.Current_Exception} (@code{g-curexc.ads})
  
  
*************** obtaining information about exceptions p
*** 23792,23798 ****
  
  Provide a debugging storage pools that helps tracking memory corruption
  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{358}@anchor{gnat_rm/the_gnat_library id67}@anchor{359}
--- 24296,24302 ----
  
  Provide a debugging storage pools that helps tracking memory corruption
  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{358}@anchor{gnat_rm/the_gnat_library id67}@anchor{359}
*************** preinstantiation for UTF-8. See next ent
*** 23853,23859 ****
  A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding.
  
  @node GNAT Directory_Operations g-dirope ads,GNAT Directory_Operations Iteration g-diopit ads,GNAT Decode_UTF8_String g-deutst ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id70}@anchor{35e}@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{35f}
  @section @code{GNAT.Directory_Operations} (@code{g-dirope.ads})
  
  
--- 24357,24363 ----
  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{35e}@anchor{gnat_rm/the_gnat_library id70}@anchor{35f}
  @section @code{GNAT.Directory_Operations} (@code{g-dirope.ads})
  
  
*************** the current directory, making new direct
*** 23866,23872 ****
  directory.
  
  @node GNAT Directory_Operations Iteration g-diopit ads,GNAT Dynamic_HTables g-dynhta ads,GNAT Directory_Operations g-dirope ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id71}@anchor{360}@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{361}
  @section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads})
  
  
--- 24370,24376 ----
  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{360}@anchor{gnat_rm/the_gnat_library id71}@anchor{361}
  @section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads})
  
  
*************** A child unit of GNAT.Directory_Operation
*** 23878,23884 ****
  for iterating through directories.
  
  @node GNAT Dynamic_HTables g-dynhta ads,GNAT Dynamic_Tables g-dyntab ads,GNAT Directory_Operations Iteration g-diopit ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id72}@anchor{362}@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{363}
  @section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads})
  
  
--- 24382,24388 ----
  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{362}@anchor{gnat_rm/the_gnat_library id72}@anchor{363}
  @section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads})
  
  
*************** dynamic instances of the table, while an
*** 23916,23922 ****
  @code{GNAT.Table} creates a single instance of the table type.
  
  @node GNAT Encode_String g-encstr ads,GNAT Encode_UTF8_String g-enutst ads,GNAT Dynamic_Tables g-dyntab ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id74}@anchor{366}@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{367}
  @section @code{GNAT.Encode_String} (@code{g-encstr.ads})
  
  
--- 24420,24426 ----
  @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{366}@anchor{gnat_rm/the_gnat_library id74}@anchor{367}
  @section @code{GNAT.Encode_String} (@code{g-encstr.ads})
  
  
*************** Provides an interface allowing to contro
*** 23986,23992 ****
  occurrences.
  
  @node GNAT Exceptions g-except ads,GNAT Expect g-expect ads,GNAT Exception_Traces g-exctra ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id78}@anchor{36e}@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{36f}
  @section @code{GNAT.Exceptions} (@code{g-except.ads})
  
  
--- 24490,24496 ----
  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{36e}@anchor{gnat_rm/the_gnat_library id78}@anchor{36f}
  @section @code{GNAT.Exceptions} (@code{g-except.ads})
  
  
*************** predefined exceptions, and for example a
*** 24007,24013 ****
  @code{Constraint_Error} with a message from a pure subprogram.
  
  @node GNAT Expect g-expect ads,GNAT Expect TTY g-exptty ads,GNAT Exceptions g-except ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id79}@anchor{370}@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{371}
  @section @code{GNAT.Expect} (@code{g-expect.ads})
  
  
--- 24511,24517 ----
  @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{370}@anchor{gnat_rm/the_gnat_library id79}@anchor{371}
  @section @code{GNAT.Expect} (@code{g-expect.ads})
  
  
*************** It is not implemented for cross ports, a
*** 24023,24029 ****
  implemented for VxWorks or LynxOS.
  
  @node GNAT Expect TTY g-exptty ads,GNAT Float_Control g-flocon ads,GNAT Expect g-expect ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id80}@anchor{372}@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{373}
  @section @code{GNAT.Expect.TTY} (@code{g-exptty.ads})
  
  
--- 24527,24533 ----
  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{372}@anchor{gnat_rm/the_gnat_library id80}@anchor{373}
  @section @code{GNAT.Expect.TTY} (@code{g-exptty.ads})
  
  
*************** ports. It is not implemented for cross p
*** 24035,24041 ****
  in particular is not implemented for VxWorks or LynxOS.
  
  @node GNAT Float_Control g-flocon ads,GNAT Formatted_String g-forstr ads,GNAT Expect TTY g-exptty ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id81}@anchor{374}@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{375}
  @section @code{GNAT.Float_Control} (@code{g-flocon.ads})
  
  
--- 24539,24545 ----
  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{374}@anchor{gnat_rm/the_gnat_library id81}@anchor{375}
  @section @code{GNAT.Float_Control} (@code{g-flocon.ads})
  
  
*************** library calls may cause this mode to be
*** 24049,24055 ****
  in this package can be used to reestablish the required mode.
  
  @node GNAT Formatted_String g-forstr ads,GNAT Heap_Sort g-heasor ads,GNAT Float_Control g-flocon ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id82}@anchor{376}@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{377}
  @section @code{GNAT.Formatted_String} (@code{g-forstr.ads})
  
  
--- 24553,24559 ----
  in this package can be used to reestablish the required mode.
  
  @node GNAT Formatted_String g-forstr ads,GNAT Heap_Sort g-heasor ads,GNAT Float_Control g-flocon ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{376}@anchor{gnat_rm/the_gnat_library id82}@anchor{377}
  @section @code{GNAT.Formatted_String} (@code{g-forstr.ads})
  
  
*************** derived from Integer, Float or enumerati
*** 24064,24070 ****
  formatted string.
  
  @node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Formatted_String g-forstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id83}@anchor{378}@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{379}
  @section @code{GNAT.Heap_Sort} (@code{g-heasor.ads})
  
  
--- 24568,24574 ----
  formatted string.
  
  @node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Formatted_String g-forstr ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{378}@anchor{gnat_rm/the_gnat_library id83}@anchor{379}
  @section @code{GNAT.Heap_Sort} (@code{g-heasor.ads})
  
  
*************** This differs from @code{GNAT.Heap_Sort}
*** 24094,24100 ****
  interface, but may be slightly more efficient.
  
  @node GNAT Heap_Sort_G g-hesorg ads,GNAT HTable g-htable ads,GNAT Heap_Sort_A g-hesora ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id85}@anchor{37c}@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{37d}
  @section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads})
  
  
--- 24598,24604 ----
  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{37c}@anchor{gnat_rm/the_gnat_library id85}@anchor{37d}
  @section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads})
  
  
*************** if the procedures can be inlined, at the
*** 24108,24114 ****
  multiple instantiations.
  
  @node GNAT HTable g-htable ads,GNAT IO g-io ads,GNAT Heap_Sort_G g-hesorg ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id86}@anchor{37e}@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{37f}
  @section @code{GNAT.HTable} (@code{g-htable.ads})
  
  
--- 24612,24618 ----
  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{37e}@anchor{gnat_rm/the_gnat_library id86}@anchor{37f}
  @section @code{GNAT.HTable} (@code{g-htable.ads})
  
  
*************** data.  Provides two approaches, one a si
*** 24121,24127 ****
  allowing arbitrary dynamic hash tables.
  
  @node GNAT IO g-io ads,GNAT IO_Aux g-io_aux ads,GNAT HTable g-htable ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id87}@anchor{380}@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{381}
  @section @code{GNAT.IO} (@code{g-io.ads})
  
  
--- 24625,24631 ----
  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{380}@anchor{gnat_rm/the_gnat_library id87}@anchor{381}
  @section @code{GNAT.IO} (@code{g-io.ads})
  
  
*************** Standard_Input, and writing characters,
*** 24137,24143 ****
  Standard_Output or Standard_Error.
  
  @node GNAT IO_Aux g-io_aux ads,GNAT Lock_Files g-locfil ads,GNAT IO g-io ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id88}@anchor{382}@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{383}
  @section @code{GNAT.IO_Aux} (@code{g-io_aux.ads})
  
  
--- 24641,24647 ----
  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{382}@anchor{gnat_rm/the_gnat_library id88}@anchor{383}
  @section @code{GNAT.IO_Aux} (@code{g-io_aux.ads})
  
  
*************** Provides some auxiliary functions for us
*** 24151,24157 ****
  for whether a file exists, and functions for reading a line of text.
  
  @node GNAT Lock_Files g-locfil ads,GNAT MBBS_Discrete_Random g-mbdira ads,GNAT IO_Aux g-io_aux ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id89}@anchor{384}@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{385}
  @section @code{GNAT.Lock_Files} (@code{g-locfil.ads})
  
  
--- 24655,24661 ----
  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{384}@anchor{gnat_rm/the_gnat_library id89}@anchor{385}
  @section @code{GNAT.Lock_Files} (@code{g-locfil.ads})
  
  
*************** Provides a general interface for using f
*** 24165,24171 ****
  providing program level synchronization.
  
  @node GNAT MBBS_Discrete_Random g-mbdira ads,GNAT MBBS_Float_Random g-mbflra ads,GNAT Lock_Files g-locfil ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id90}@anchor{386}@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{387}
  @section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads})
  
  
--- 24669,24675 ----
  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{386}@anchor{gnat_rm/the_gnat_library id90}@anchor{387}
  @section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads})
  
  
*************** The original implementation of @code{Ada
*** 24177,24183 ****
  a modified version of the Blum-Blum-Shub generator.
  
  @node GNAT MBBS_Float_Random g-mbflra ads,GNAT MD5 g-md5 ads,GNAT MBBS_Discrete_Random g-mbdira ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id91}@anchor{388}@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{389}
  @section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads})
  
  
--- 24681,24687 ----
  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{388}@anchor{gnat_rm/the_gnat_library id91}@anchor{389}
  @section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads})
  
  
*************** The original implementation of @code{Ada
*** 24189,24195 ****
  a modified version of the Blum-Blum-Shub generator.
  
  @node GNAT MD5 g-md5 ads,GNAT Memory_Dump g-memdum ads,GNAT MBBS_Float_Random g-mbflra ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id92}@anchor{38a}@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{38b}
  @section @code{GNAT.MD5} (@code{g-md5.ads})
  
  
--- 24693,24699 ----
  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{38a}@anchor{gnat_rm/the_gnat_library id92}@anchor{38b}
  @section @code{GNAT.MD5} (@code{g-md5.ads})
  
  
*************** the HMAC-MD5 message authentication func
*** 24202,24208 ****
  FIPS PUB 198.
  
  @node GNAT Memory_Dump g-memdum ads,GNAT Most_Recent_Exception g-moreex ads,GNAT MD5 g-md5 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id93}@anchor{38c}@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{38d}
  @section @code{GNAT.Memory_Dump} (@code{g-memdum.ads})
  
  
--- 24706,24712 ----
  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{38c}@anchor{gnat_rm/the_gnat_library id93}@anchor{38d}
  @section @code{GNAT.Memory_Dump} (@code{g-memdum.ads})
  
  
*************** Provides random number capabilities whic
*** 24275,24281 ****
  standard Ada library and are more convenient to use.
  
  @node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id98}@anchor{396}@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{25b}
  @section @code{GNAT.Regexp} (@code{g-regexp.ads})
  
  
--- 24779,24785 ----
  standard Ada library and are more convenient to use.
  
  @node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{25b}@anchor{gnat_rm/the_gnat_library id98}@anchor{396}
  @section @code{GNAT.Regexp} (@code{g-regexp.ads})
  
  
*************** standard Ada library and are more conven
*** 24288,24297 ****
  A simple implementation of regular expressions, using a subset of regular
  expression syntax copied from familiar Unix style utilities.  This is the
  simplest of the three pattern matching packages provided, and is particularly
! suitable for 'file globbing' applications.
  
  @node GNAT Registry g-regist ads,GNAT Regpat g-regpat ads,GNAT Regexp g-regexp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id99}@anchor{397}@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{398}
  @section @code{GNAT.Registry} (@code{g-regist.ads})
  
  
--- 24792,24801 ----
  A simple implementation of regular expressions, using a subset of regular
  expression syntax copied from familiar Unix style utilities.  This is the
  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{397}@anchor{gnat_rm/the_gnat_library id99}@anchor{398}
  @section @code{GNAT.Registry} (@code{g-regist.ads})
  
  
*************** registry API, but at a lower level of ab
*** 24305,24311 ****
  package provided with the Win32Ada binding
  
  @node GNAT Regpat g-regpat ads,GNAT Rewrite_Data g-rewdat ads,GNAT Registry g-regist ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id100}@anchor{399}@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{39a}
  @section @code{GNAT.Regpat} (@code{g-regpat.ads})
  
  
--- 24809,24815 ----
  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{399}@anchor{gnat_rm/the_gnat_library id100}@anchor{39a}
  @section @code{GNAT.Regpat} (@code{g-regpat.ads})
  
  
*************** from the original V7 style regular expre
*** 24320,24326 ****
  Henry Spencer (and binary compatible with this C library).
  
  @node GNAT Rewrite_Data g-rewdat ads,GNAT Secondary_Stack_Info g-sestin ads,GNAT Regpat g-regpat ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id101}@anchor{39b}@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{39c}
  @section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads})
  
  
--- 24824,24830 ----
  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{39b}@anchor{gnat_rm/the_gnat_library id101}@anchor{39c}
  @section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads})
  
  
*************** this interface usable for large files or
*** 24342,24352 ****
  
  @geindex Secondary Stack Info
  
! Provide the capability to query the high water mark of the current task's
  secondary stack.
  
  @node GNAT Semaphores g-semaph ads,GNAT Serial_Communications g-sercom ads,GNAT Secondary_Stack_Info g-sestin ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id103}@anchor{39f}@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3a0}
  @section @code{GNAT.Semaphores} (@code{g-semaph.ads})
  
  
--- 24846,24856 ----
  
  @geindex Secondary Stack Info
  
! Provide the capability to query the high water mark of the current task’s
  secondary stack.
  
  @node GNAT Semaphores g-semaph ads,GNAT Serial_Communications g-sercom ads,GNAT Secondary_Stack_Info g-sestin ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id103}@anchor{3a0}
  @section @code{GNAT.Semaphores} (@code{g-semaph.ads})
  
  
*************** and the HMAC-SHA256 message authenticati
*** 24408,24414 ****
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA384 g-sha384 ads,GNAT SHA512 g-sha512 ads,GNAT SHA256 g-sha256 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id108}@anchor{3a9}@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3aa}
  @section @code{GNAT.SHA384} (@code{g-sha384.ads})
  
  
--- 24912,24918 ----
  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{3a9}@anchor{gnat_rm/the_gnat_library id108}@anchor{3aa}
  @section @code{GNAT.SHA384} (@code{g-sha384.ads})
  
  
*************** and the HMAC-SHA384 message authenticati
*** 24421,24427 ****
  in RFC 2104 and FIPS PUB 198.
  
  @node GNAT SHA512 g-sha512 ads,GNAT Signals g-signal ads,GNAT SHA384 g-sha384 ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id109}@anchor{3ab}@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3ac}
  @section @code{GNAT.SHA512} (@code{g-sha512.ads})
  
  
--- 24925,24931 ----
  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{3ab}@anchor{gnat_rm/the_gnat_library id109}@anchor{3ac}
  @section @code{GNAT.SHA512} (@code{g-sha512.ads})
  
  
*************** the SNOBOL4 dynamic pattern construction
*** 24516,24522 ****
  efficient algorithm developed by Robert Dewar for the SPITBOL system.
  
  @node GNAT Spitbol g-spitbo ads,GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Patterns g-spipat ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id116}@anchor{3b9}@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3ba}
  @section @code{GNAT.Spitbol} (@code{g-spitbo.ads})
  
  
--- 25020,25026 ----
  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{3b9}@anchor{gnat_rm/the_gnat_library id116}@anchor{3ba}
  @section @code{GNAT.Spitbol} (@code{g-spitbo.ads})
  
  
*************** for type @code{Standard.Integer}, giving
*** 24563,24569 ****
  from string to integer values.
  
  @node GNAT Spitbol Table_VString g-sptavs ads,GNAT SSE g-sse ads,GNAT Spitbol Table_Integer g-sptain ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id119}@anchor{3bf}@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3c0}
  @section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads})
  
  
--- 25067,25073 ----
  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{3bf}@anchor{gnat_rm/the_gnat_library id119}@anchor{3c0}
  @section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads})
  
  
*************** a variable length string type, giving an
*** 24580,24586 ****
  maps from strings to strings.
  
  @node GNAT SSE g-sse ads,GNAT SSE Vector_Types g-ssvety ads,GNAT Spitbol Table_VString g-sptavs ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id120}@anchor{3c1}@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3c2}
  @section @code{GNAT.SSE} (@code{g-sse.ads})
  
  
--- 25084,25090 ----
  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{3c1}@anchor{gnat_rm/the_gnat_library id120}@anchor{3c2}
  @section @code{GNAT.SSE} (@code{g-sse.ads})
  
  
*************** Provides a generic hash function working
*** 24613,24619 ****
  type and the hash result type are parameters.
  
  @node GNAT Strings g-string ads,GNAT String_Split g-strspl ads,GNAT String_Hash g-strhas ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id123}@anchor{3c7}@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3c8}
  @section @code{GNAT.Strings} (@code{g-string.ads})
  
  
--- 25117,25123 ----
  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{3c7}@anchor{gnat_rm/the_gnat_library id123}@anchor{3c8}
  @section @code{GNAT.Strings} (@code{g-string.ads})
  
  
*************** to the resulting slices. This package is
*** 24637,24643 ****
  @code{GNAT.Array_Split}.
  
  @node GNAT Table g-table ads,GNAT Task_Lock g-tasloc ads,GNAT String_Split g-strspl ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id125}@anchor{3cb}@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3cc}
  @section @code{GNAT.Table} (@code{g-table.ads})
  
  
--- 25141,25147 ----
  @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{3cb}@anchor{gnat_rm/the_gnat_library id125}@anchor{3cc}
  @section @code{GNAT.Table} (@code{g-table.ads})
  
  
*************** while an instantiation of @code{GNAT.Dyn
*** 24657,24663 ****
  used to define dynamic instances of the table.
  
  @node GNAT Task_Lock g-tasloc ads,GNAT Time_Stamp g-timsta ads,GNAT Table g-table ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id126}@anchor{3cd}@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3ce}
  @section @code{GNAT.Task_Lock} (@code{g-tasloc.ads})
  
  
--- 25161,25167 ----
  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{3cd}@anchor{gnat_rm/the_gnat_library id126}@anchor{3ce}
  @section @code{GNAT.Task_Lock} (@code{g-tasloc.ads})
  
  
*************** single global task lock.  Appropriate fo
*** 24674,24680 ****
  between tasks is very rarely expected.
  
  @node GNAT Time_Stamp g-timsta ads,GNAT Threads g-thread ads,GNAT Task_Lock g-tasloc ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id127}@anchor{3cf}@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3d0}
  @section @code{GNAT.Time_Stamp} (@code{g-timsta.ads})
  
  
--- 25178,25184 ----
  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{3cf}@anchor{gnat_rm/the_gnat_library id127}@anchor{3d0}
  @section @code{GNAT.Time_Stamp} (@code{g-timsta.ads})
  
  
*************** further details if your program has thre
*** 24706,24712 ****
  environment which then accesses Ada code.
  
  @node GNAT Traceback g-traceb ads,GNAT Traceback Symbolic g-trasym ads,GNAT Threads g-thread ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id129}@anchor{3d3}@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3d4}
  @section @code{GNAT.Traceback} (@code{g-traceb.ads})
  
  
--- 25210,25216 ----
  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{3d3}@anchor{gnat_rm/the_gnat_library id129}@anchor{3d4}
  @section @code{GNAT.Traceback} (@code{g-traceb.ads})
  
  
*************** Provides a facility for obtaining non-sy
*** 24718,24724 ****
  in various debugging situations.
  
  @node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-table ads,GNAT Traceback g-traceb ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id130}@anchor{3d5}@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3d6}
  @section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads})
  
  
--- 25222,25228 ----
  in various debugging situations.
  
  @node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-table ads,GNAT Traceback g-traceb ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3d5}@anchor{gnat_rm/the_gnat_library id130}@anchor{3d6}
  @section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads})
  
  
*************** in various debugging situations.
*** 24727,24733 ****
  @geindex Trace back facilities
  
  @node GNAT UTF_32 g-table ads,GNAT Wide_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id131}@anchor{3d7}@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-table-ads}@anchor{3d8}
  @section @code{GNAT.UTF_32} (@code{g-table.ads})
  
  
--- 25231,25237 ----
  @geindex Trace back facilities
  
  @node GNAT UTF_32 g-table ads,GNAT Wide_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library gnat-utf-32-g-table-ads}@anchor{3d7}@anchor{gnat_rm/the_gnat_library id131}@anchor{3d8}
  @section @code{GNAT.UTF_32} (@code{g-table.ads})
  
  
*************** Provides a function for determining whet
*** 24771,24777 ****
  near misspelling of another wide string.
  
  @node GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Spelling_Checker g-wispch ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id134}@anchor{3dd}@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3de}
  @section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads})
  
  
--- 25275,25281 ----
  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{3dd}@anchor{gnat_rm/the_gnat_library id134}@anchor{3de}
  @section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads})
  
  
*************** to the resulting slices. This package is
*** 24811,24817 ****
  @code{GNAT.Array_Split}.
  
  @node Interfaces C Extensions i-cexten ads,Interfaces C Streams i-cstrea ads,GNAT Wide_Wide_String_Split g-zistsp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id137}@anchor{3e4}
  @section @code{Interfaces.C.Extensions} (@code{i-cexten.ads})
  
  
--- 25315,25321 ----
  @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 id137}@anchor{3e3}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3e4}
  @section @code{Interfaces.C.Extensions} (@code{i-cexten.ads})
  
  
*************** This package is a binding for the most c
*** 24835,24841 ****
  on C streams.
  
  @node Interfaces Packed_Decimal i-pacdec ads,Interfaces VxWorks i-vxwork ads,Interfaces C Streams i-cstrea ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3e7}@anchor{gnat_rm/the_gnat_library id139}@anchor{3e8}
  @section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads})
  
  
--- 25339,25345 ----
  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 id139}@anchor{3e7}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3e8}
  @section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads})
  
  
*************** from a packed decimal format compatible
*** 24850,24856 ****
  mainframes.
  
  @node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks Int_Connection i-vxinco ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3e9}@anchor{gnat_rm/the_gnat_library id140}@anchor{3ea}
  @section @code{Interfaces.VxWorks} (@code{i-vxwork.ads})
  
  
--- 25354,25360 ----
  mainframes.
  
  @node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks Int_Connection i-vxinco ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id140}@anchor{3e9}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3ea}
  @section @code{Interfaces.VxWorks} (@code{i-vxwork.ads})
  
  
*************** In particular, it interfaces with the
*** 24866,24872 ****
  VxWorks hardware interrupt facilities.
  
  @node Interfaces VxWorks Int_Connection i-vxinco ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces VxWorks i-vxwork ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library interfaces-vxworks-int-connection-i-vxinco-ads}@anchor{3eb}@anchor{gnat_rm/the_gnat_library id141}@anchor{3ec}
  @section @code{Interfaces.VxWorks.Int_Connection} (@code{i-vxinco.ads})
  
  
--- 25370,25376 ----
  VxWorks hardware interrupt facilities.
  
  @node Interfaces VxWorks Int_Connection i-vxinco ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces VxWorks i-vxwork ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id141}@anchor{3eb}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-int-connection-i-vxinco-ads}@anchor{3ec}
  @section @code{Interfaces.VxWorks.Int_Connection} (@code{i-vxinco.ads})
  
  
*************** intConnect() with a custom routine for i
*** 24882,24888 ****
  handlers.
  
  @node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks Int_Connection i-vxinco ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3ed}@anchor{gnat_rm/the_gnat_library id142}@anchor{3ee}
  @section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads})
  
  
--- 25386,25392 ----
  handlers.
  
  @node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks Int_Connection i-vxinco ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library id142}@anchor{3ed}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3ee}
  @section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads})
  
  
*************** function codes. A particular use of this
*** 24905,24911 ****
  to enable the use of Get_Immediate under VxWorks.
  
  @node System Address_Image s-addima ads,System Assertions s-assert ads,Interfaces VxWorks IO i-vxwoio ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3ef}@anchor{gnat_rm/the_gnat_library id143}@anchor{3f0}
  @section @code{System.Address_Image} (@code{s-addima.ads})
  
  
--- 25409,25415 ----
  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 id143}@anchor{3ef}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3f0}
  @section @code{System.Address_Image} (@code{s-addima.ads})
  
  
*************** This package provides the declaration of
*** 24947,24957 ****
  together with efficient routines (using hardware
  synchronization primitives) for incrementing, decrementing,
  and testing of these counters. This package is implemented
! on most targets, including all Alpha, ia64, PowerPC, SPARC V9,
  x86, and x86_64 platforms.
  
  @node System Memory s-memory ads,System Multiprocessors s-multip ads,System Atomic_Counters s-atocou ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3f5}@anchor{gnat_rm/the_gnat_library id146}@anchor{3f6}
  @section @code{System.Memory} (@code{s-memory.ads})
  
  
--- 25451,25461 ----
  together with efficient routines (using hardware
  synchronization primitives) for incrementing, decrementing,
  and testing of these counters. This package is implemented
! 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 id146}@anchor{3f5}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3f6}
  @section @code{System.Memory} (@code{s-memory.ads})
  
  
*************** in GNAT we also make it available in Ada
*** 24982,24988 ****
  technically an implementation-defined addition).
  
  @node System Multiprocessors Dispatching_Domains s-mudido ads,System Partition_Interface s-parint ads,System Multiprocessors s-multip ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{3f9}@anchor{gnat_rm/the_gnat_library id148}@anchor{3fa}
  @section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads})
  
  
--- 25486,25492 ----
  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 id148}@anchor{3f9}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{3fa}
  @section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads})
  
  
*************** declared. It uses malloc/free to allocat
*** 25025,25031 ****
  do any automatic reclamation.
  
  @node System Pool_Local s-pooloc ads,System Restrictions s-restri ads,System Pool_Global s-pooglo ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{3ff}@anchor{gnat_rm/the_gnat_library id151}@anchor{400}
  @section @code{System.Pool_Local} (@code{s-pooloc.ads})
  
  
--- 25529,25535 ----
  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 id151}@anchor{3ff}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{400}
  @section @code{System.Pool_Local} (@code{s-pooloc.ads})
  
  
*************** compiler determined information on which
*** 25058,25064 ****
  are violated by one or more packages in the partition.
  
  @node System Rident s-rident ads,System Strings Stream_Ops s-ststop ads,System Restrictions s-restri ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{403}@anchor{gnat_rm/the_gnat_library id153}@anchor{404}
  @section @code{System.Rident} (@code{s-rident.ads})
  
  
--- 25562,25568 ----
  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 id153}@anchor{403}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{404}
  @section @code{System.Rident} (@code{s-rident.ads})
  
  
*************** stream attributes are applied to string
*** 25090,25096 ****
  package can be used directly by application programs.
  
  @node System Unsigned_Types s-unstyp ads,System Wch_Cnv s-wchcnv ads,System Strings Stream_Ops s-ststop ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{407}@anchor{gnat_rm/the_gnat_library id155}@anchor{408}
  @section @code{System.Unsigned_Types} (@code{s-unstyp.ads})
  
  
--- 25594,25600 ----
  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 id155}@anchor{407}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{408}
  @section @code{System.Unsigned_Types} (@code{s-unstyp.ads})
  
  
*************** also contains some related definitions f
*** 25103,25109 ****
  used by the compiler in connection with packed array types.
  
  @node System Wch_Cnv s-wchcnv ads,System Wch_Con s-wchcon ads,System Unsigned_Types s-unstyp ads,The GNAT Library
! @anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{409}@anchor{gnat_rm/the_gnat_library id156}@anchor{40a}
  @section @code{System.Wch_Cnv} (@code{s-wchcnv.ads})
  
  
--- 25607,25613 ----
  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 id156}@anchor{409}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{40a}
  @section @code{System.Wch_Cnv} (@code{s-wchcnv.ads})
  
  
*************** in ordinary strings.  These definitions
*** 25136,25142 ****
  the package @code{System.Wch_Cnv}.
  
  @node Interfacing to Other Languages,Specialized Needs Annexes,The GNAT Library,Top
! @anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11}@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{40d}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{40e}
  @chapter Interfacing to Other Languages
  
  
--- 25640,25646 ----
  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{40d}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{40e}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11}
  @chapter Interfacing to Other Languages
  
  
*************** provided.
*** 25154,25160 ****
  @end menu
  
  @node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{40f}@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{410}
  @section Interfacing to C
  
  
--- 25658,25664 ----
  @end menu
  
  @node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{40f}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{410}
  @section Interfacing to C
  
  
*************** of the length corresponding to the @code
*** 25294,25300 ****
  @end itemize
  
  @node Interfacing to C++,Interfacing to COBOL,Interfacing to C,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{411}@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{47}
  @section Interfacing to C++
  
  
--- 25798,25804 ----
  @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{46}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{411}
  @section Interfacing to C++
  
  
*************** multi-dimensional array causes the array
*** 25369,25375 ****
  order as required for convenient interface to Fortran.
  
  @node Interfacing to non-GNAT Ada code,,Interfacing to Fortran,Interfacing to Other Languages
! @anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{416}@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{417}
  @section Interfacing to non-GNAT Ada code
  
  
--- 25873,25879 ----
  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{416}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{417}
  @section Interfacing to non-GNAT Ada code
  
  
*************** values or simple record types without va
*** 25393,25399 ****
  types with fixed bounds.
  
  @node Specialized Needs Annexes,Implementation of Specific Ada Features,Interfacing to Other Languages,Top
! @anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12}@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{418}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{419}
  @chapter Specialized Needs Annexes
  
  
--- 25897,25903 ----
  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{418}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{419}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12}
  @chapter Specialized Needs Annexes
  
  
*************** in Ada 2005) is fully implemented.
*** 25434,25440 ****
  @end table
  
  @node Implementation of Specific Ada Features,Implementation of Ada 2012 Features,Specialized Needs Annexes,Top
! @anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13}@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{41a}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{41b}
  @chapter Implementation of Specific Ada Features
  
  
--- 25938,25944 ----
  @end table
  
  @node Implementation of Specific Ada Features,Implementation of Ada 2012 Features,Specialized Needs Annexes,Top
! @anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{41a}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{41b}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13}
  @chapter Implementation of Specific Ada Features
  
  
*************** facilities.
*** 25447,25458 ****
  * GNAT Implementation of Shared Passive Packages:: 
  * Code Generation for Array Aggregates:: 
  * The Size of Discriminated Records with Default Discriminants:: 
  * Strict Conformance to the Ada Reference Manual:: 
  
  @end menu
  
  @node Machine Code Insertions,GNAT Implementation of Tasking,,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{169}@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{41c}
  @section Machine Code Insertions
  
  
--- 25951,25963 ----
  * GNAT Implementation of Shared Passive Packages:: 
  * Code Generation for Array Aggregates:: 
  * The Size of Discriminated Records with Default Discriminants:: 
+ * Image Values For Nonscalar Types:: 
  * Strict Conformance to the Ada Reference Manual:: 
  
  @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{41c}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{165}
  @section Machine Code Insertions
  
  
*************** result.  The possible values for constra
*** 25517,25523 ****
  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}.
! No support is provided for GNU C's symbolic names for output parameters.
  
  The second argument of @code{my_float'Asm_Output} functions as
  though it were an @code{out} parameter, which is a little curious, but
--- 26022,26028 ----
  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}.
! No support is provided for GNU C’s symbolic names for output parameters.
  
  The second argument of @code{my_float'Asm_Output} functions as
  though it were an @code{out} parameter, which is a little curious, but
*************** to be a static expression, and is the co
*** 25536,25542 ****
  value to be used as the input argument.  The possible values for the
  constraint are the same as those used in the RTL, and are dependent on
  the configuration file used to built the GCC back end.
! No support is provided for GNU C's symbolic names for input parameters.
  
  If there are no input operands, this argument may either be omitted, or
  explicitly given as @code{No_Input_Operands}.  The fourth argument, not
--- 26041,26047 ----
  value to be used as the input argument.  The possible values for the
  constraint are the same as those used in the RTL, and are dependent on
  the configuration file used to built the GCC back end.
! No support is provided for GNU C’s symbolic names for input parameters.
  
  If there are no input operands, this argument may either be omitted, or
  explicitly given as @code{No_Input_Operands}.  The fourth argument, not
*************** Generally it is strongly advisable to us
*** 25561,25571 ****
  that is missing either input or output operands or to avoid unwanted
  optimizations. A warning is generated if this advice is not followed.
  
! No support is provided for GNU C's @code{asm goto} feature.
  
  The @code{Asm} subprograms may be used in two ways.  First the procedure
  forms can be used anywhere a procedure call would be valid, and
! correspond to what the RM calls 'intrinsic' routines.  Such calls can
  be used to intersperse machine instructions with other Ada statements.
  Second, the function forms, which return a dummy value of the limited
  private type @code{Asm_Insn}, can be used in code statements, and indeed
--- 26066,26076 ----
  that is missing either input or output operands or to avoid unwanted
  optimizations. A warning is generated if this advice is not followed.
  
! No support is provided for GNU C’s @code{asm goto} feature.
  
  The @code{Asm} subprograms may be used in two ways.  First the procedure
  forms can be used anywhere a procedure call would be valid, and
! correspond to what the RM calls ‘intrinsic’ routines.  Such calls can
  be used to intersperse machine instructions with other Ada statements.
  Second, the function forms, which return a dummy value of the limited
  private type @code{Asm_Insn}, can be used in code statements, and indeed
*************** according to normal visibility rules. In
*** 25620,25626 ****
  qualification is required.
  
  @node GNAT Implementation of Tasking,GNAT Implementation of Shared Passive Packages,Machine Code Insertions,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{41d}@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{41e}
  @section GNAT Implementation of Tasking
  
  
--- 26125,26131 ----
  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{41d}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{41e}
  @section GNAT Implementation of Tasking
  
  
*************** to compliance with the Real-Time Systems
*** 25636,25646 ****
  @end menu
  
  @node Mapping Ada Tasks onto the Underlying Kernel Threads,Ensuring Compliance with the Real-Time Annex,,GNAT Implementation of Tasking
! @anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{41f}@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{420}
  @subsection Mapping Ada Tasks onto the Underlying Kernel Threads
  
  
! GNAT's run-time support comprises two layers:
  
  
  @itemize *
--- 26141,26151 ----
  @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{41f}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{420}
  @subsection Mapping Ada Tasks onto the Underlying Kernel Threads
  
  
! GNAT’s run-time support comprises two layers:
  
  
  @itemize *
*************** GNARL (GNAT Run-time Layer)
*** 25652,25663 ****
  GNULL (GNAT Low-level Library)
  @end itemize
  
! In GNAT, Ada's tasking services rely on a platform and OS independent
  layer known as GNARL.  This code is responsible for implementing the
! correct semantics of Ada's task creation, rendezvous, protected
  operations etc.
  
! GNARL decomposes Ada's tasking semantics into simpler lower level
  operations such as create a thread, set the priority of a thread,
  yield, create a lock, lock/unlock, etc.  The spec for these low-level
  operations constitutes GNULLI, the GNULL Interface.  This interface is
--- 26157,26168 ----
  GNULL (GNAT Low-level Library)
  @end itemize
  
! In GNAT, Ada’s tasking services rely on a platform and OS independent
  layer known as GNARL.  This code is responsible for implementing the
! correct semantics of Ada’s task creation, rendezvous, protected
  operations etc.
  
! GNARL decomposes Ada’s tasking semantics into simpler lower level
  operations such as create a thread, set the priority of a thread,
  yield, create a lock, lock/unlock, etc.  The spec for these low-level
  operations constitutes GNULLI, the GNULL Interface.  This interface is
*************** support this functionality when the pare
*** 25705,25711 ****
  @geindex Forking a new process
  
  @node Ensuring Compliance with the Real-Time Annex,Support for Locking Policies,Mapping Ada Tasks onto the Underlying Kernel Threads,GNAT Implementation of Tasking
! @anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{421}@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{422}
  @subsection Ensuring Compliance with the Real-Time Annex
  
  
--- 26210,26216 ----
  @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{421}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{422}
  @subsection Ensuring Compliance with the Real-Time Annex
  
  
*************** and VxWorks.
*** 25778,25796 ****
  @code{Concurrent_Readers_Locking} is supported on Linux.
  
  Notes about @code{Ceiling_Locking} on Linux:
! If the process is running as 'root', ceiling locking is used.
  If the capabilities facility is installed
! ("sudo apt-get --assume-yes install libcap-dev" on Ubuntu,
  for example),
  and the program is linked against that library
! ("-largs -lcap"),
  and the executable file has the cap_sys_nice capability
! ("sudo /sbin/setcap cap_sys_nice=ep executable_file_name"),
  then ceiling locking is used.
  Otherwise, the @code{Ceiling_Locking} policy is ignored.
  
  @node GNAT Implementation of Shared Passive Packages,Code Generation for Array Aggregates,GNAT Implementation of Tasking,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{424}@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{425}
  @section GNAT Implementation of Shared Passive Packages
  
  
--- 26283,26301 ----
  @code{Concurrent_Readers_Locking} is supported on Linux.
  
  Notes about @code{Ceiling_Locking} on Linux:
! If the process is running as ‘root’, ceiling locking is used.
  If the capabilities facility is installed
! (“sudo apt-get –assume-yes install libcap-dev” on Ubuntu,
  for example),
  and the program is linked against that library
! (“-largs -lcap”),
  and the executable file has the cap_sys_nice capability
! (“sudo /sbin/setcap cap_sys_nice=ep executable_file_name”),
  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{424}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{425}
  @section GNAT Implementation of Shared Passive Packages
  
  
*************** component values and static subtypes als
*** 25919,25925 ****
  @end menu
  
  @node Static constant aggregates with static bounds,Constant aggregates with unconstrained nominal types,,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{428}@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{429}
  @subsection Static constant aggregates with static bounds
  
  
--- 26424,26430 ----
  @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{428}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{429}
  @subsection Static constant aggregates with static bounds
  
  
*************** Cr_Unc : constant One_Unc := (12,24,36);
*** 25981,25987 ****
  @end example
  
  @node Aggregates with static bounds,Aggregates with nonstatic bounds,Constant aggregates with unconstrained nominal types,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{42c}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{42d}
  @subsection Aggregates with static bounds
  
  
--- 26486,26492 ----
  @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{42c}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{42d}
  @subsection Aggregates with static bounds
  
  
*************** end loop;
*** 26009,26015 ****
  @end example
  
  @node Aggregates with nonstatic bounds,Aggregates in assignment statements,Aggregates with static bounds,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{42e}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{42f}
  @subsection Aggregates with nonstatic bounds
  
  
--- 26514,26520 ----
  @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{42e}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{42f}
  @subsection Aggregates with nonstatic bounds
  
  
*************** have to be applied to sub-arrays individ
*** 26020,26026 ****
  compatible subtypes.
  
  @node Aggregates in assignment statements,,Aggregates with nonstatic bounds,Code Generation for Array Aggregates
! @anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{430}@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{431}
  @subsection Aggregates in assignment statements
  
  
--- 26525,26531 ----
  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{430}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{431}
  @subsection Aggregates in assignment statements
  
  
*************** If any of these conditions are violated,
*** 26061,26067 ****
  a temporary (created either by the front-end or the code generator) and then
  that temporary will be copied onto the target.
  
! @node The Size of Discriminated Records with Default Discriminants,Strict Conformance to the Ada Reference Manual,Code Generation for Array Aggregates,Implementation of Specific Ada Features
  @anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{433}
  @section The Size of Discriminated Records with Default Discriminants
  
--- 26566,26572 ----
  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{432}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{433}
  @section The Size of Discriminated Records with Default Discriminants
  
*************** object, and place it on the stack.
*** 26111,26118 ****
  This maximum size approach
  has been a source of surprise to some users, who expect the default
  values of the discriminants to determine the size reserved for an
! unconstrained object: "If the default is 15, why should the object occupy
! a larger size?"
  The answer, of course, is that the discriminant may be later modified,
  and its full range of values must be taken into account. This is why the
  declaration:
--- 26616,26623 ----
  This maximum size approach
  has been a source of surprise to some users, who expect the default
  values of the discriminants to determine the size reserved for an
! unconstrained object: “If the default is 15, why should the object occupy
! a larger size?”
  The answer, of course, is that the discriminant may be later modified,
  and its full range of values must be taken into account. This is why the
  declaration:
*************** is flagged by the compiler with a warnin
*** 26129,26135 ****
  an attempt to create @code{Too_Large} will raise @code{Storage_Error},
  because the required size includes @code{Positive'Last}
  bytes. As the first example indicates, the proper approach is to declare an
! index type of 'reasonable' range so that unconstrained objects are not too
  large.
  
  One final wrinkle: if the object is declared to be @code{aliased}, or if it is
--- 26634,26640 ----
  an attempt to create @code{Too_Large} will raise @code{Storage_Error},
  because the required size includes @code{Positive'Last}
  bytes. As the first example indicates, the proper approach is to declare an
! index type of ‘reasonable’ range so that unconstrained objects are not too
  large.
  
  One final wrinkle: if the object is declared to be @code{aliased}, or if it is
*************** aliasing all views of the object (which
*** 26141,26148 ****
  say) must be consistent, so it is imperative that the object, once created,
  remain invariant.
  
! @node Strict Conformance to the Ada Reference Manual,,The Size of Discriminated Records with Default Discriminants,Implementation of Specific Ada Features
! @anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{434}@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{435}
  @section Strict Conformance to the Ada Reference Manual
  
  
--- 26646,26673 ----
  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{434}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{435}
! @section Image Values For Nonscalar Types
! 
! 
! Ada 2022 defines the Image, Wide_Image, and Wide_Wide image attributes
! for nonscalar types; earlier Ada versions defined these attributes only
! for scalar types. Ada RM 4.10 provides some general guidance regarding
! the default implementation of these attributes and the GNAT compiler
! follows that guidance. However, beyond that the precise details of the
! image text generated in these cases are deliberately not documented and are
! subject to change. In particular, users should not rely on formatting details
! (such as spaces or line breaking), record field order, image values for access
! types, image values for types that have ancestor or subcomponent types
! declared in non-Ada2022 code, image values for predefined types, or the
! compiler’s choices regarding the implementation permissions described in
! Ada RM 4.10. This list is not intended to be exhaustive. If more precise
! 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{436}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{437}
  @section Strict Conformance to the Ada Reference Manual
  
  
*************** machines that are not fully compliant wi
*** 26168,26175 ****
  behavior (although at the cost of a significant performance penalty), so
  infinite and NaN values are properly generated.
  
! @node Implementation of Ada 2012 Features,Obsolescent Features,Implementation of Specific Ada Features,Top
! @anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{436}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{437}
  @chapter Implementation of Ada 2012 Features
  
  
--- 26693,26700 ----
  behavior (although at the cost of a significant performance penalty), so
  infinite and NaN values are properly generated.
  
! @node Implementation of Ada 2012 Features,Security Hardening Features,Implementation of Specific Ada Features,Top
! @anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{438}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{439}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14}
  @chapter Implementation of Ada 2012 Features
  
  
*************** subsequent releases. A date of 0000-00-0
*** 26203,26212 ****
  implemented the feature, or implemented it as soon as it appeared as a
  binding interpretation.
  
! Each feature corresponds to an Ada Issue ('AI') approved by the Ada
  standardization group (ISO/IEC JTC1/SC22/WG9) for inclusion in Ada 2012.
  The features are ordered based on the relevant sections of the Ada
! Reference Manual ("RM").  When a given AI relates to multiple points
  in the RM, the earliest is used.
  
  A complete description of the AIs may be found in
--- 26728,26737 ----
  implemented the feature, or implemented it as soon as it appeared as a
  binding interpretation.
  
! Each feature corresponds to an Ada Issue (‘AI’) approved by the Ada
  standardization group (ISO/IEC JTC1/SC22/WG9) for inclusion in Ada 2012.
  The features are ordered based on the relevant sections of the Ada
! Reference Manual (“RM”).  When a given AI relates to multiple points
  in the RM, the earliest is used.
  
  A complete description of the AIs may be found in
*************** RM References:  2.08 (7)   2.08 (16)
*** 26292,26298 ****
  @itemize *
  
  @item 
! @emph{AI-0080 'View of' not needed if clear from context (0000-00-00)}
  
  This is an editorial change only, described as non-testable in the AI.
  
--- 26817,26823 ----
  @itemize *
  
  @item 
! @emph{AI-0080 ‘View of’ not needed if clear from context (0000-00-00)}
  
  This is an editorial change only, described as non-testable in the AI.
  
*************** RM References:  3.01 (7)
*** 26308,26314 ****
  @emph{AI-0183 Aspect specifications (2010-08-16)}
  
  Aspect specifications have been fully implemented except for pre and post-
! conditions, and type invariants, which have their own separate AI's. All
  forms of declarations listed in the AI are supported. The following is a
  list of the aspects supported (with GNAT implementation aspects marked)
  @end itemize
--- 26833,26839 ----
  @emph{AI-0183 Aspect specifications (2010-08-16)}
  
  Aspect specifications have been fully implemented except for pre and post-
! conditions, and type invariants, which have their own separate AI’s. All
  forms of declarations listed in the AI are supported. The following is a
  list of the aspects supported (with GNAT implementation aspects marked)
  @end itemize
*************** Source
*** 26329,26335 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 26854,26860 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26337,26343 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 26862,26868 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26381,26387 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 26906,26912 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26401,26407 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 26926,26932 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26415,26421 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 26940,26946 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26423,26429 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 26948,26954 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26443,26449 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 26968,26974 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26457,26463 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 26982,26988 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26489,26495 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 27014,27020 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26497,26503 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 27022,27028 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26505,26511 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 27030,27036 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26543,26549 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 27068,27074 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26551,26557 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 27076,27082 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26559,26565 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 27084,27090 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26579,26585 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 27104,27110 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26587,26593 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 27112,27118 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26595,26601 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 27120,27126 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26603,26609 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 27128,27134 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26617,26623 ****
  
  @tab
  
! -- GNAT
  
  @item
  
--- 27142,27148 ----
  
  @tab
  
! – GNAT
  
  @item
  
*************** Source
*** 26637,26643 ****
  
  @tab
  
! -- GNAT
  
  @end multitable
  
--- 27162,27168 ----
  
  @tab
  
! – GNAT
  
  @end multitable
  
*************** RM References:  3.02.01 (3)   3.02.02 (2
*** 26665,26672 ****
  @item 
  @emph{AI-0128 Inequality is a primitive operation (0000-00-00)}
  
! If an equality operator ("=") is declared for a type, then the implicitly
! declared inequality operator ("/=") is a primitive operation of the type.
  This is the only reasonable interpretation, and is the one always implemented
  by GNAT, but the RM was not entirely clear in making this point.
  
--- 27190,27197 ----
  @item 
  @emph{AI-0128 Inequality is a primitive operation (0000-00-00)}
  
! If an equality operator (“=”) is declared for a type, then the implicitly
! declared inequality operator (“/=”) is a primitive operation of the type.
  This is the only reasonable interpretation, and is the one always implemented
  by GNAT, but the RM was not entirely clear in making this point.
  
*************** RM References:  3.03 (23)   3.10.02 (26/
*** 26730,26736 ****
  @emph{AI-0093 Additional rules use immutably limited (0000-00-00)}
  
  This is an editorial change only, to make more widespread use of the Ada 2012
! 'immutably limited'.
  
  RM References:  3.03 (23.4/3)
  @end itemize
--- 27255,27261 ----
  @emph{AI-0093 Additional rules use immutably limited (0000-00-00)}
  
  This is an editorial change only, to make more widespread use of the Ada 2012
! ‘immutably limited’.
  
  RM References:  3.03 (23.4/3)
  @end itemize
*************** RM References:  3.05 (56/2)
*** 26798,26804 ****
  Ada 2012 relaxes the restriction that forbids discriminants of tagged types
  to have default expressions by allowing them when the type is limited. It
  is often useful to define a default value for a discriminant even though
! it can't be changed by assignment.
  
  RM References:  3.07 (9.1/2)   3.07.02 (3)
  @end itemize
--- 27323,27329 ----
  Ada 2012 relaxes the restriction that forbids discriminants of tagged types
  to have default expressions by allowing them when the type is limited. It
  is often useful to define a default value for a discriminant even though
! it can’t be changed by assignment.
  
  RM References:  3.07 (9.1/2)   3.07.02 (3)
  @end itemize
*************** RM References:  3.09 (7.4/2)   3.09 (12.
*** 26857,26863 ****
  @emph{AI-0076 function with controlling result (0000-00-00)}
  
  This is an editorial change only. The RM defines calls with controlling
! results, but uses the term 'function with controlling result' without an
  explicit definition.
  
  RM References:  3.09.02 (2/2)
--- 27382,27388 ----
  @emph{AI-0076 function with controlling result (0000-00-00)}
  
  This is an editorial change only. The RM defines calls with controlling
! results, but uses the term ‘function with controlling result’ without an
  explicit definition.
  
  RM References:  3.09.02 (2/2)
*************** RM References:  7.05 (5/2)   12.05.01 (5
*** 27411,27420 ****
  @item 
  @emph{AI-0099 Tag determines whether finalization needed (0000-00-00)}
  
! This AI clarifies that 'needs finalization' is part of dynamic semantics,
  and therefore depends on the run-time characteristics of an object (i.e. its
! tag) and not on its nominal type. As the AI indicates: "we do not expect
! this to affect any implementation'@w{'}.
  
  RM References:  7.06.01 (6)   7.06.01 (7)   7.06.01 (8)   7.06.01 (9/2)
  @end itemize
--- 27936,27945 ----
  @item 
  @emph{AI-0099 Tag determines whether finalization needed (0000-00-00)}
  
! This AI clarifies that ‘needs finalization’ is part of dynamic semantics,
  and therefore depends on the run-time characteristics of an object (i.e. its
! tag) and not on its nominal type. As the AI indicates: “we do not expect
! this to affect any implementation’’.
  
  RM References:  7.06.01 (6)   7.06.01 (7)   7.06.01 (8)   7.06.01 (9/2)
  @end itemize
*************** C.06 (4)   C.06 (6)   C.06 (9)   C.06 (1
*** 27544,27550 ****
  @itemize *
  
  @item 
! @emph{AI-0072 Task signalling using 'Terminated (0000-00-00)}
  
  This AI clarifies that task signalling for reading @code{'Terminated} only
  occurs if the result is True. GNAT semantics has always been consistent with
--- 28069,28075 ----
  @itemize *
  
  @item 
! @emph{AI-0072 Task signalling using ‘Terminated (0000-00-00)}
  
  This AI clarifies that task signalling for reading @code{'Terminated} only
  occurs if the result is True. GNAT semantics has always been consistent with
*************** RM References:  10.02.01 (15.1/2)   10.0
*** 27684,27690 ****
  @emph{AI-0219 Pure permissions and limited parameters (2010-05-25)}
  
  This AI refines the rules for the cases with limited parameters which do not
! allow the implementations to omit 'redundant'. GNAT now properly conforms
  to the requirements of this binding interpretation.
  
  RM References:  10.02.01 (18/2)
--- 28209,28215 ----
  @emph{AI-0219 Pure permissions and limited parameters (2010-05-25)}
  
  This AI refines the rules for the cases with limited parameters which do not
! allow the implementations to omit ‘redundant’. GNAT now properly conforms
  to the requirements of this binding interpretation.
  
  RM References:  10.02.01 (18/2)
*************** RM References:  13.13.02 (1.2/2)
*** 27963,27969 ****
  @itemize *
  
  @item 
! @emph{AI-0109 Redundant check in S'Class'Input (0000-00-00)}
  
  This AI is an editorial change only. It removes the need for a tag check
  that can never fail.
--- 28488,28494 ----
  @itemize *
  
  @item 
! @emph{AI-0109 Redundant check in S’Class’Input (0000-00-00)}
  
  This AI is an editorial change only. It removes the need for a tag check
  that can never fail.
*************** RM References:  13.14 (2)   13.14 (3/1)
*** 28025,28031 ****
  @item 
  @emph{AI-0017 Freezing and incomplete types (0000-00-00)}
  
! So-called 'Taft-amendment types' (i.e., types that are completed in package
  bodies) are not frozen by the occurrence of bodies in the
  enclosing declarative part. GNAT always implemented this properly.
  
--- 28550,28556 ----
  @item 
  @emph{AI-0017 Freezing and incomplete types (0000-00-00)}
  
! So-called ‘Taft-amendment types’ (i.e., types that are completed in package
  bodies) are not frozen by the occurrence of bodies in the
  enclosing declarative part. GNAT always implemented this properly.
  
*************** where the type of the returned value is
*** 28334,28341 ****
  RM References:  H.04 (8/1)
  @end itemize
  
! @node Obsolescent Features,Compatibility and Porting Guide,Implementation of Ada 2012 Features,Top
! @anchor{gnat_rm/obsolescent_features id1}@anchor{438}@anchor{gnat_rm/obsolescent_features doc}@anchor{439}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{15}
  @chapter Obsolescent Features
  
  
--- 28859,29034 ----
  RM References:  H.04 (8/1)
  @end itemize
  
! @node Security Hardening Features,Obsolescent Features,Implementation of Ada 2012 Features,Top
! @anchor{gnat_rm/security_hardening_features doc}@anchor{43a}@anchor{gnat_rm/security_hardening_features id1}@anchor{43b}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15}
! @chapter Security Hardening Features
! 
! 
! This chapter describes Ada extensions aimed at security hardening that
! are provided by GNAT.
! 
! @c Register Scrubbing:
! 
! @menu
! * Register Scrubbing:: 
! * Stack Scrubbing:: 
! * Hardened Conditionals:: 
! 
! @end menu
! 
! @node Register Scrubbing,Stack Scrubbing,,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{43c}
! @section Register Scrubbing
! 
! 
! GNAT can generate code to zero-out hardware registers before returning
! from a subprogram.
! 
! It can be enabled with the @emph{-fzero-call-used-regs} command line
! option, to affect all subprograms in a compilation, and with a
! @code{Machine_Attribute} pragma, to affect only specific subprograms.
! 
! @example
! procedure Foo;
! pragma Machine_Attribute (Foo, "zero_call_used_regs", "used");
! --  Before returning, Foo scrubs only call-clobbered registers
! --  that it uses itself.
! 
! function Bar return Integer;
! pragma Machine_Attribute (Bar, "zero_call_used_regs", "all");
! --  Before returning, Bar scrubs all call-clobbered registers.
! @end example
! 
! For usage and more details on the command line option, and on the
! @code{zero_call_used_regs} attribute, 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{43d}
! @section Stack Scrubbing
! 
! 
! GNAT can generate code to zero-out stack frames used by subprograms.
! 
! It can be activated with the @code{Machine_Attribute} pragma, on
! specific subprograms and variables.
! 
! @example
! function Foo returns Integer;
! pragma Machine_Attribute (Foo, "strub");
! --  Foo and its callers are modified so as to scrub the stack
! --  space used by Foo after it returns.
! 
! procedure Bar;
! pragma Machine_Attribute (Bar, "strub", "internal");
! --  Bar is turned into a wrapper for its original body,
! --  and they scrub the stack used by the original body.
! 
! Var : Integer;
! pragma Machine_Attribute (Var, "strub");
! --  Reading from Var in a subprogram enables stack scrubbing
! --  of the stack space used by the subprogram.
! @end example
! 
! There are also @emph{-fstrub} command line options to control default
! settings.  For usage and more details on the command line option, and
! on the @code{strub} attribute, see @cite{Using the GNU Compiler Collection (GCC)}.
! 
! Note that Ada secondary stacks are not scrubbed.  The restriction
! @code{No_Secondary_Stack} avoids their use, and thus their accidental
! preservation of data that should be scrubbed.
! 
! Attributes @code{Access} and @code{Unconstrained_Access} of variables and
! constants with @code{strub} enabled require types with @code{strub} enabled;
! there is no way to express an access-to-strub type otherwise.
! @code{Unchecked_Access} bypasses this constraint, but the resulting
! access type designates a non-strub type.
! 
! @example
! VI : Integer;
! XsVI : access Integer := VI'Access; -- Error.
! UXsVI : access Integer := VI'Unchecked_Access; -- OK,
! -- UXsVI.all does not enable strub in the enclosing subprogram.
! 
! type Strub_Int is new Integer;
! pragma Machine_Attribute (Strub_Int, "strub");
! VSI : Strub_Int;
! XsVSI : access Strub_Int := VSI'Access; -- OK.
! -- XsVSI.all enables strub in the enclosing subprogram.
! @end example
! 
! Every access-to-subprogram type, renaming, and overriding and
! overridden dispatching operations that may refer to a subprogram with
! an attribute-modified interface must be annotated with the same
! interface-modifying attribute.  Access-to-subprogram types can be
! explicitly converted to different strub modes, as long as they are
! interface-compatible (i.e., adding or removing @code{at-calls} is not
! allowed).  For example, a @code{strub}-@code{disabled} subprogram can be
! turned @code{callable} through such an explicit conversion:
! 
! @example
! type TBar is access procedure;
! 
! type TBar_Callable is access procedure;
! pragma Machine_Attribute (TBar_Callable, "strub", "callable");
! 
! Bar_Callable_Ptr : constant TBar_Callable
!            := TBar_Callable (TBar'(Bar'Access));
! 
! procedure Bar_Callable renames Bar_Callable_Ptr.all;
! pragma Machine_Attribute (Bar_Callable, "strub", "callable");
! @end example
! 
! Note that the renaming declaration is expanded to a full subprogram
! body, it won’t be just an alias.  Only if it is inlined will it be as
! efficient as a call by dereferencing the access-to-subprogram constant
! Bar_Callable_Ptr.
! 
! @c Hardened Conditionals:
! 
! @node Hardened Conditionals,,Stack Scrubbing,Security Hardening Features
! @anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{43e}
! @section Hardened Conditionals
! 
! 
! GNAT can harden conditionals to protect against control flow attacks.
! 
! This is accomplished by two complementary transformations, each
! activated by a separate command-line option.
! 
! The option @emph{-fharden-compares} enables hardening of compares that
! compute results stored in variables, adding verification that the
! reversed compare yields the opposite result.
! 
! The option @emph{-fharden-conditional-branches} enables hardening of
! compares that guard conditional branches, adding verification of the
! reversed compare to both execution paths.
! 
! These transformations are introduced late in the compilation pipeline,
! long after boolean expressions are decomposed into separate compares,
! each one turned into either a conditional branch or a compare whose
! result is stored in a boolean variable or temporary.  Compiler
! optimizations, if enabled, may also turn conditional branches into
! stored compares, and vice-versa, or into operations with implied
! conditionals (e.g. MIN and MAX).  Conditionals may also be optimized
! out entirely, if their value can be determined at compile time, and
! occasionally multiple compares can be combined into one.
! 
! It is thus difficult to predict which of these two options will affect
! a specific compare operation expressed in source code.  Using both
! options ensures that every compare that is neither optimized out nor
! optimized into implied conditionals will be hardened.
! 
! The addition of reversed compares can be observed by enabling the dump
! files of the corresponding passes, through command line options
! @emph{-fdump-tree-hardcmp} and @emph{-fdump-tree-hardcbr}, respectively.
! 
! They are separate options, however, because of the significantly
! different performance impact of the hardening transformations.
! 
! @node Obsolescent Features,Compatibility and Porting Guide,Security Hardening Features,Top
! @anchor{gnat_rm/obsolescent_features doc}@anchor{43f}@anchor{gnat_rm/obsolescent_features id1}@anchor{440}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16}
  @chapter Obsolescent Features
  
  
*************** compatibility purposes.
*** 28354,28365 ****
  @end menu
  
  @node pragma No_Run_Time,pragma Ravenscar,,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id2}@anchor{43a}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{43b}
  @section pragma No_Run_Time
  
  
  The pragma @code{No_Run_Time} is used to achieve an affect similar
! to the use of the "Zero Foot Print" configurable run time, but without
  requiring a specially configured run time. The result of using this
  pragma, which must be used for all units in a partition, is to restrict
  the use of any language features requiring run-time support code. The
--- 29047,29058 ----
  @end menu
  
  @node pragma No_Run_Time,pragma Ravenscar,,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features id2}@anchor{441}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{442}
  @section pragma No_Run_Time
  
  
  The pragma @code{No_Run_Time} is used to achieve an affect similar
! to the use of the “Zero Foot Print” configurable run time, but without
  requiring a specially configured run time. The result of using this
  pragma, which must be used for all units in a partition, is to restrict
  the use of any language features requiring run-time support code. The
*************** preferred usage is to use an appropriate
*** 28367,28373 ****
  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{43c}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{43d}
  @section pragma Ravenscar
  
  
--- 29060,29066 ----
  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{443}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{444}
  @section pragma Ravenscar
  
  
*************** The pragma @code{Ravenscar} has exactly
*** 28376,28382 ****
  is part of the new Ada 2005 standard.
  
  @node pragma Restricted_Run_Time,pragma Task_Info,pragma Ravenscar,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{43e}@anchor{gnat_rm/obsolescent_features id4}@anchor{43f}
  @section pragma Restricted_Run_Time
  
  
--- 29069,29075 ----
  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{445}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{446}
  @section pragma Restricted_Run_Time
  
  
*************** preferred since the Ada 2005 pragma @cod
*** 28386,28392 ****
  this kind of implementation dependent addition.
  
  @node pragma Task_Info,package System Task_Info s-tasinf ads,pragma Restricted_Run_Time,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{440}@anchor{gnat_rm/obsolescent_features id5}@anchor{441}
  @section pragma Task_Info
  
  
--- 29079,29085 ----
  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{447}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{448}
  @section pragma Task_Info
  
  
*************** in the spec of package System.Task_Info
*** 28412,28428 ****
  library.
  
  @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{442}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{443}
  @section package System.Task_Info (@code{s-tasinf.ads})
  
  
  This package provides target dependent functionality that is used
  to support the @code{Task_Info} pragma. The predefined Ada package
  @code{System.Multiprocessors} and the @code{CPU} aspect now provide a
! standard replacement for GNAT's @code{Task_Info} functionality.
  
  @node Compatibility and Porting Guide,GNU Free Documentation License,Obsolescent Features,Top
! @anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{16}@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{444}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{445}
  @chapter Compatibility and Porting Guide
  
  
--- 29105,29121 ----
  library.
  
  @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features
! @anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{449}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{44a}
  @section package System.Task_Info (@code{s-tasinf.ads})
  
  
  This package provides target dependent functionality that is used
  to support the @code{Task_Info} pragma. The predefined Ada package
  @code{System.Multiprocessors} and the @code{CPU} aspect now provide a
! 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{44b}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{44c}
  @chapter Compatibility and Porting Guide
  
  
*************** applications developed in other Ada envi
*** 28444,28450 ****
  @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{446}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{447}
  @section Writing Portable Fixed-Point Declarations
  
  
--- 29137,29143 ----
  @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{44d}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{44e}
  @section Writing Portable Fixed-Point Declarations
  
  
*************** type F1 is delta 1.0 range -128.0 .. +12
*** 28459,28465 ****
  then the implementation is allowed to choose -128.0 .. +127.0 if it
  likes, but is not required to do so.
  
! This leads to possible portability problems, so let's have a closer
  look at this, and figure out how to avoid these problems.
  
  First, why does this freedom exist, and why would an implementation
--- 29152,29158 ----
  then the implementation is allowed to choose -128.0 .. +127.0 if it
  likes, but is not required to do so.
  
! This leads to possible portability problems, so let’s have a closer
  look at this, and figure out how to avoid these problems.
  
  First, why does this freedom exist, and why would an implementation
*************** it would need 9 bits to hold the largest
*** 28469,28479 ****
  that means 16 bits on all machines). But if the implementation chooses
  the +127.0 bound then it can fit values of the type in 8 bits.
  
! Why not make the user write +127.0 if that's what is wanted?
  The rationale is that if you are thinking of fixed point
! as a kind of 'poor man's floating-point', then you don't want
  to be thinking about the scaled integers that are used in its
! representation. Let's take another example:
  
  @example
  type F2 is delta 2.0**(-15) range -1.0 .. +1.0;
--- 29162,29172 ----
  that means 16 bits on all machines). But if the implementation chooses
  the +127.0 bound then it can fit values of the type in 8 bits.
  
! Why not make the user write +127.0 if that’s what is wanted?
  The rationale is that if you are thinking of fixed point
! as a kind of ‘poor man’s floating-point’, then you don’t want
  to be thinking about the scaled integers that are used in its
! representation. Let’s take another example:
  
  @example
  type F2 is delta 2.0**(-15) range -1.0 .. +1.0;
*************** type F2 is delta 2.0**(-15) range -1.0 .
*** 28489,28495 ****
  @end example
  
  and the Ada language design team felt that this was too annoying
! to require. We don't need to debate this decision at this point,
  since it is well established (the rule about narrowing the ranges
  dates to Ada 83).
  
--- 29182,29188 ----
  @end example
  
  and the Ada language design team felt that this was too annoying
! to require. We don’t need to debate this decision at this point,
  since it is well established (the rule about narrowing the ranges
  dates to Ada 83).
  
*************** If you follow this scheme you will be gu
*** 28566,28572 ****
  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{448}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{449}
  @section Compatibility with Ada 83
  
  
--- 29259,29265 ----
  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{44f}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{450}
  @section Compatibility with Ada 83
  
  
*************** following subsections treat the most lik
*** 28594,28600 ****
  @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{44a}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{44b}
  @subsection Legal Ada 83 programs that are illegal in Ada 95
  
  
--- 29287,29293 ----
  @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{451}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{452}
  @subsection Legal Ada 83 programs that are illegal in Ada 95
  
  
*************** For example:
*** 28616,28622 ****
  for Char in 'A' .. 'Z' loop ... end loop;
  @end example
  
! The problem is that 'A' and 'Z' could be from either
  @code{Character} or @code{Wide_Character}.  The simplest correction
  is to make the type explicit; e.g.:
  
--- 29309,29315 ----
  for Char in 'A' .. 'Z' loop ... end loop;
  @end example
  
! The problem is that ‘A’ and ‘Z’ could be from either
  @code{Character} or @code{Wide_Character}.  The simplest correction
  is to make the type explicit; e.g.:
  
*************** In Ada 83, it was permissible to pass an
*** 28679,28685 ****
  as the actual for a generic formal private type, but then the instantiation
  would be illegal if there were any instances of declarations of variables
  of this type in the generic body.  In Ada 95, to avoid this clear violation
! of the methodological principle known as the 'contract model',
  the generic declaration explicitly indicates whether
  or not such instantiations are permitted.  If a generic formal parameter
  has explicit unknown discriminants, indicated by using @code{(<>)} after the
--- 29372,29378 ----
  as the actual for a generic formal private type, but then the instantiation
  would be illegal if there were any instances of declarations of variables
  of this type in the generic body.  In Ada 95, to avoid this clear violation
! of the methodological principle known as the ‘contract model’,
  the generic declaration explicitly indicates whether
  or not such instantiations are permitted.  If a generic formal parameter
  has explicit unknown discriminants, indicated by using @code{(<>)} after the
*************** the fix is usually simply to add the @co
*** 28694,28700 ****
  @end itemize
  
  @node More deterministic semantics,Changed semantics,Legal Ada 83 programs that are illegal in Ada 95,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{44c}@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{44d}
  @subsection More deterministic semantics
  
  
--- 29387,29393 ----
  @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{453}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{454}
  @subsection More deterministic semantics
  
  
*************** which open select branches are executed.
*** 28722,28728 ****
  @end itemize
  
  @node Changed semantics,Other language compatibility issues,More deterministic semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{44e}@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{44f}
  @subsection Changed semantics
  
  
--- 29415,29421 ----
  @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{455}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{456}
  @subsection Changed semantics
  
  
*************** covers only the restricted range.
*** 28764,28770 ****
  @end itemize
  
  @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{450}@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{451}
  @subsection Other language compatibility issues
  
  
--- 29457,29463 ----
  @end itemize
  
  @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83
! @anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{457}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{458}
  @subsection Other language compatibility issues
  
  
*************** as identifiers as in Ada 83.  However,
*** 28782,28788 ****
  in practice, it is usually advisable to make the necessary modifications
  to the program to remove the need for using this switch.
  See the @code{Compiling Different Versions of Ada} section in
! the @cite{GNAT User's Guide}.
  
  @item 
  Support for removed Ada 83 pragmas and attributes
--- 29475,29481 ----
  in practice, it is usually advisable to make the necessary modifications
  to the program to remove the need for using this switch.
  See the @code{Compiling Different Versions of Ada} section in
! the @cite{GNAT User’s Guide}.
  
  @item 
  Support for removed Ada 83 pragmas and attributes
*************** include @code{pragma Interface} and the
*** 28797,28803 ****
  @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{452}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{453}
  @section Compatibility between Ada 95 and Ada 2005
  
  
--- 29490,29496 ----
  @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{459}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{45a}
  @section Compatibility between Ada 95 and Ada 2005
  
  
*************** now need to be considered in expression
*** 28854,28860 ****
  @item 
  @emph{Fixed-point multiplication and division.}
  
! Certain expressions involving '*' or '/' for a fixed-point type, which
  were legal in Ada 95 and invoked the predefined versions of these operations,
  are now ambiguous.
  The ambiguity may be resolved either by applying a type conversion to the
--- 29547,29553 ----
  @item 
  @emph{Fixed-point multiplication and division.}
  
! Certain expressions involving ‘*’ or ‘/’ for a fixed-point type, which
  were legal in Ada 95 and invoked the predefined versions of these operations,
  are now ambiguous.
  The ambiguity may be resolved either by applying a type conversion to the
*************** can declare a function returning a value
*** 28869,28875 ****
  @end itemize
  
  @node Implementation-dependent characteristics,Compatibility with Other Ada Systems,Compatibility between Ada 95 and Ada 2005,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{454}@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{455}
  @section Implementation-dependent characteristics
  
  
--- 29562,29568 ----
  @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{45b}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{45c}
  @section Implementation-dependent characteristics
  
  
*************** transition from certain Ada 83 compilers
*** 28892,28898 ****
  @end menu
  
  @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{456}@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{457}
  @subsection Implementation-defined pragmas
  
  
--- 29585,29591 ----
  @end menu
  
  @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{45d}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{45e}
  @subsection Implementation-defined pragmas
  
  
*************** Ada compilers are allowed to supplement
*** 28900,28906 ****
  these are a potential source of non-portability.  All GNAT-defined pragmas
  are described in @ref{7,,Implementation Defined Pragmas},
  and these include several that are specifically
! intended to correspond to other vendors' Ada 83 pragmas.
  For migrating from VADS, the pragma @code{Use_VADS_Size} may be useful.
  For compatibility with HP Ada 83, GNAT supplies the pragmas
  @code{Extend_System}, @code{Ident}, @code{Inline_Generic},
--- 29593,29599 ----
  these are a potential source of non-portability.  All GNAT-defined pragmas
  are described in @ref{7,,Implementation Defined Pragmas},
  and these include several that are specifically
! intended to correspond to other vendors’ Ada 83 pragmas.
  For migrating from VADS, the pragma @code{Use_VADS_Size} may be useful.
  For compatibility with HP Ada 83, GNAT supplies the pragmas
  @code{Extend_System}, @code{Ident}, @code{Inline_Generic},
*************** avoiding compiler rejection of units tha
*** 28914,28920 ****
  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{458}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{459}
  @subsection Implementation-defined attributes
  
  
--- 29607,29613 ----
  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{45f}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{460}
  @subsection Implementation-defined attributes
  
  
*************** Analogous to pragmas, the set of attribu
*** 28922,28934 ****
  implementation.  All GNAT-defined attributes are described in
  @ref{8,,Implementation Defined Attributes},
  and these include several that are specifically intended
! to correspond to other vendors' Ada 83 attributes.  For migrating from VADS,
  the attribute @code{VADS_Size} may be useful.  For compatibility with HP
  Ada 83, GNAT supplies the attributes @code{Bit}, @code{Machine_Size} and
  @code{Type_Class}.
  
  @node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{45a}@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{45b}
  @subsection Libraries
  
  
--- 29615,29627 ----
  implementation.  All GNAT-defined attributes are described in
  @ref{8,,Implementation Defined Attributes},
  and these include several that are specifically intended
! to correspond to other vendors’ Ada 83 attributes.  For migrating from VADS,
  the attribute @code{VADS_Size} may be useful.  For compatibility with HP
  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{461}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{462}
  @subsection Libraries
  
  
*************** be preferable to retrofit the applicatio
*** 28957,28969 ****
  @end itemize
  
  @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{45c}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{45d}
  @subsection Elaboration order
  
  
  The implementation can choose any elaboration order consistent with the unit
  dependency relationship.  This freedom means that some orders can result in
! Program_Error being raised due to an 'Access Before Elaboration': an attempt
  to invoke a subprogram before its body has been elaborated, or to instantiate
  a generic before the generic body has been elaborated.  By default GNAT
  attempts to choose a safe order (one that will not encounter access before
--- 29650,29662 ----
  @end itemize
  
  @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{463}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{464}
  @subsection Elaboration order
  
  
  The implementation can choose any elaboration order consistent with the unit
  dependency relationship.  This freedom means that some orders can result in
! Program_Error being raised due to an ‘Access Before Elaboration’: an attempt
  to invoke a subprogram before its body has been elaborated, or to instantiate
  a generic before the generic body has been elaborated.  By default GNAT
  attempts to choose a safe order (one that will not encounter access before
*************** elaboration problems) by implicitly inse
*** 28972,28978 ****
  needed.  However, this can lead to the creation of elaboration circularities
  and a resulting rejection of the program by gnatbind.  This issue is
  thoroughly described in the @emph{Elaboration Order Handling in GNAT} appendix
! in the @cite{GNAT User's Guide}.
  In brief, there are several
  ways to deal with this situation:
  
--- 29665,29671 ----
  needed.  However, this can lead to the creation of elaboration circularities
  and a resulting rejection of the program by gnatbind.  This issue is
  thoroughly described in the @emph{Elaboration Order Handling in GNAT} appendix
! in the @cite{GNAT User’s Guide}.
  In brief, there are several
  ways to deal with this situation:
  
*************** pragmas either globally (as an effect of
*** 28993,28999 ****
  @end itemize
  
  @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{45e}@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{45f}
  @subsection Target-specific aspects
  
  
--- 29686,29692 ----
  @end itemize
  
  @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics
! @anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{465}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{466}
  @subsection Target-specific aspects
  
  
*************** on the robustness of the original design
*** 29006,29015 ****
  Ada 2005 and Ada 2012) are sometimes
  incompatible with typical Ada 83 compiler practices regarding implicit
  packing, the meaning of the Size attribute, and the size of access values.
! GNAT's approach to these issues is described in @ref{460,,Representation Clauses}.
  
  @node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{461}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{462}
  @section Compatibility with Other Ada Systems
  
  
--- 29699,29708 ----
  Ada 2005 and Ada 2012) are sometimes
  incompatible with typical Ada 83 compiler practices regarding implicit
  packing, the meaning of the Size attribute, and the size of access values.
! GNAT’s approach to these issues is described in @ref{467,,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{468}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{469}
  @section Compatibility with Other Ada Systems
  
  
*************** far beyond this minimal set, as describe
*** 29052,29058 ****
  @end itemize
  
  @node Representation Clauses,Compatibility with HP Ada 83,Compatibility with Other Ada Systems,Compatibility and Porting Guide
! @anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{460}@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{463}
  @section Representation Clauses
  
  
--- 29745,29751 ----
  @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{46a}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{467}
  @section Representation Clauses
  
  
*************** Some Ada 83 compilers allowed a Size spe
*** 29082,29088 ****
  packing of an array or record.  This could cause expensive implicit
  conversions for change of representation in the presence of derived
  types, and the Ada design intends to avoid this possibility.
! Subsequent AI's were issued to make it clear that such implicit
  change of representation in response to a Size clause is inadvisable,
  and this recommendation is represented explicitly in the Ada 95 (and Ada 2005)
  Reference Manuals as implementation advice that is followed by GNAT.
--- 29775,29781 ----
  packing of an array or record.  This could cause expensive implicit
  conversions for change of representation in the presence of derived
  types, and the Ada design intends to avoid this possibility.
! Subsequent AI’s were issued to make it clear that such implicit
  change of representation in response to a Size clause is inadvisable,
  and this recommendation is represented explicitly in the Ada 95 (and Ada 2005)
  Reference Manuals as implementation advice that is followed by GNAT.
*************** on a 32-bit machine, the size of @code{N
*** 29100,29106 ****
  32 (since no sign bit is required).  Some Ada 83 compilers gave 31, and
  some 32 in this situation.  This problem will usually show up as a compile
  time error, but not always.  It is a good idea to check all uses of the
! 'Size attribute when porting Ada 83 code.  The GNAT specific attribute
  Object_Size can provide a useful way of duplicating the behavior of
  some Ada 83 compiler systems.
  
--- 29793,29799 ----
  32 (since no sign bit is required).  Some Ada 83 compilers gave 31, and
  some 32 in this situation.  This problem will usually show up as a compile
  time error, but not always.  It is a good idea to check all uses of the
! ‘Size attribute when porting Ada 83 code.  The GNAT specific attribute
  Object_Size can provide a useful way of duplicating the behavior of
  some Ada 83 compiler systems.
  
*************** A common assumption in Ada 83 code is th
*** 29111,29124 ****
  and that therefore it will be the same size as a System.Address value.  This
  assumption is true for GNAT in most cases with one exception.  For the case of
  a pointer to an unconstrained array type (where the bounds may vary from one
! value of the access type to another), the default is to use a 'fat pointer',
  which is represented as two separate pointers, one to the bounds, and one to
  the array.  This representation has a number of advantages, including improved
  efficiency.  However, it may cause some difficulties in porting existing Ada 83
  code which makes the assumption that, for example, pointers fit in 32 bits on
  a machine with 32-bit addressing.
  
! To get around this problem, GNAT also permits the use of 'thin pointers' for
  access types in this case (where the designated type is an unconstrained array
  type).  These thin pointers are indeed the same size as a System.Address value.
  To specify a thin pointer, use a size clause for the type, for example:
--- 29804,29817 ----
  and that therefore it will be the same size as a System.Address value.  This
  assumption is true for GNAT in most cases with one exception.  For the case of
  a pointer to an unconstrained array type (where the bounds may vary from one
! value of the access type to another), the default is to use a ‘fat pointer’,
  which is represented as two separate pointers, one to the bounds, and one to
  the array.  This representation has a number of advantages, including improved
  efficiency.  However, it may cause some difficulties in porting existing Ada 83
  code which makes the assumption that, for example, pointers fit in 32 bits on
  a machine with 32-bit addressing.
  
! To get around this problem, GNAT also permits the use of ‘thin pointers’ for
  access types in this case (where the designated type is an unconstrained array
  type).  These thin pointers are indeed the same size as a System.Address value.
  To specify a thin pointer, use a size clause for the type, for example:
*************** with thin pointers.
*** 29145,29151 ****
  @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{464}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{465}
  @section Compatibility with HP Ada 83
  
  
--- 29838,29844 ----
  @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{46b}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{46c}
  @section Compatibility with HP Ada 83
  
  
*************** extension of package System.
*** 29175,29188 ****
  @end itemize
  
  @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top
! @anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license doc}@anchor{466}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{467}
  @chapter GNU Free Documentation License
  
  
  Version 1.3, 3 November 2008
  
  Copyright  2000, 2001, 2002, 2007, 2008  Free Software Foundation, Inc
! @indicateurl{http://fsf.org/}
  
  Everyone is permitted to copy and distribute verbatim copies of this
  license document, but changing it is not allowed.
--- 29868,29881 ----
  @end itemize
  
  @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top
! @anchor{share/gnu_free_documentation_license doc}@anchor{46d}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{46e}
  @chapter GNU Free Documentation License
  
  
  Version 1.3, 3 November 2008
  
  Copyright  2000, 2001, 2002, 2007, 2008  Free Software Foundation, Inc
! @indicateurl{https://fsf.org/}
  
  Everyone is permitted to copy and distribute verbatim copies of this
  license document, but changing it is not allowed.
*************** license document, but changing it is not
*** 29190,29203 ****
  @strong{Preamble}
  
  The purpose of this License is to make a manual, textbook, or other
! functional and useful document "free" in the sense of freedom: to
  assure everyone the effective freedom to copy and redistribute it,
  with or without modifying it, either commercially or noncommercially.
  Secondarily, this License preserves for the author and publisher a way
  to get credit for their work, while not being considered responsible
  for modifications made by others.
  
! This License is a kind of "copyleft", which means that derivative
  works of the document must themselves be free in the same sense.  It
  complements the GNU General Public License, which is a copyleft
  license designed for free software.
--- 29883,29896 ----
  @strong{Preamble}
  
  The purpose of this License is to make a manual, textbook, or other
! functional and useful document “free” in the sense of freedom: to
  assure everyone the effective freedom to copy and redistribute it,
  with or without modifying it, either commercially or noncommercially.
  Secondarily, this License preserves for the author and publisher a way
  to get credit for their work, while not being considered responsible
  for modifications made by others.
  
! This License is a kind of “copyleft”, which means that derivative
  works of the document must themselves be free in the same sense.  It
  complements the GNU General Public License, which is a copyleft
  license designed for free software.
*************** distributed under the terms of this Lice
*** 29218,29234 ****
  world-wide, royalty-free license, unlimited in duration, to use that
  work under the conditions stated herein.  The @strong{Document}, below,
  refers to any such manual or work.  Any member of the public is a
! licensee, and is addressed as "@strong{you}".  You accept the license if you
  copy, modify or distribute the work in a way requiring permission
  under copyright law.
  
! A "@strong{Modified Version}" of the Document means any work containing the
  Document or a portion of it, either copied verbatim, or with
  modifications and/or translated into another language.
  
! A "@strong{Secondary Section}" is a named appendix or a front-matter section of
  the Document that deals exclusively with the relationship of the
! publishers or authors of the Document to the Document's overall subject
  (or to related matters) and contains nothing that could fall directly
  within that overall subject.  (Thus, if the Document is in part a
  textbook of mathematics, a Secondary Section may not explain any
--- 29911,29927 ----
  world-wide, royalty-free license, unlimited in duration, to use that
  work under the conditions stated herein.  The @strong{Document}, below,
  refers to any such manual or work.  Any member of the public is a
! licensee, and is addressed as “@strong{you}”.  You accept the license if you
  copy, modify or distribute the work in a way requiring permission
  under copyright law.
  
! A “@strong{Modified Version}” of the Document means any work containing the
  Document or a portion of it, either copied verbatim, or with
  modifications and/or translated into another language.
  
! A “@strong{Secondary Section}” is a named appendix or a front-matter section of
  the Document that deals exclusively with the relationship of the
! publishers or authors of the Document to the Document’s overall subject
  (or to related matters) and contains nothing that could fall directly
  within that overall subject.  (Thus, if the Document is in part a
  textbook of mathematics, a Secondary Section may not explain any
*************** connection with the subject or with rela
*** 29237,29243 ****
  commercial, philosophical, ethical or political position regarding
  them.
  
! The "@strong{Invariant Sections}" are certain Secondary Sections whose titles
  are designated, as being those of Invariant Sections, in the notice
  that says that the Document is released under this License.  If a
  section does not fit the above definition of Secondary then it is not
--- 29930,29936 ----
  commercial, philosophical, ethical or political position regarding
  them.
  
! The “@strong{Invariant Sections}” are certain Secondary Sections whose titles
  are designated, as being those of Invariant Sections, in the notice
  that says that the Document is released under this License.  If a
  section does not fit the above definition of Secondary then it is not
*************** allowed to be designated as Invariant.
*** 29245,29256 ****
  Invariant Sections.  If the Document does not identify any Invariant
  Sections then there are none.
  
! The "@strong{Cover Texts}" are certain short passages of text that are listed,
  as Front-Cover Texts or Back-Cover Texts, in the notice that says that
  the Document is released under this License.  A Front-Cover Text may
  be at most 5 words, and a Back-Cover Text may be at most 25 words.
  
! A "@strong{Transparent}" copy of the Document means a machine-readable copy,
  represented in a format whose specification is available to the
  general public, that is suitable for revising the document
  straightforwardly with generic text editors or (for images composed of
--- 29938,29949 ----
  Invariant Sections.  If the Document does not identify any Invariant
  Sections then there are none.
  
! The “@strong{Cover Texts}” are certain short passages of text that are listed,
  as Front-Cover Texts or Back-Cover Texts, in the notice that says that
  the Document is released under this License.  A Front-Cover Text may
  be at most 5 words, and a Back-Cover Text may be at most 25 words.
  
! A “@strong{Transparent}” copy of the Document means a machine-readable copy,
  represented in a format whose specification is available to the
  general public, that is suitable for revising the document
  straightforwardly with generic text editors or (for images composed of
*************** to text formatters.  A copy made in an o
*** 29261,29267 ****
  format whose markup, or absence of markup, has been arranged to thwart
  or discourage subsequent modification by readers is not Transparent.
  An image format is not Transparent if used for any substantial amount
! of text.  A copy that is not "Transparent" is called @strong{Opaque}.
  
  Examples of suitable formats for Transparent copies include plain
  ASCII without markup, Texinfo input format, LaTeX input format, SGML
--- 29954,29960 ----
  format whose markup, or absence of markup, has been arranged to thwart
  or discourage subsequent modification by readers is not Transparent.
  An image format is not Transparent if used for any substantial amount
! of text.  A copy that is not “Transparent” is called @strong{Opaque}.
  
  Examples of suitable formats for Transparent copies include plain
  ASCII without markup, Texinfo input format, LaTeX input format, SGML
*************** processing tools are not generally avail
*** 29274,29297 ****
  machine-generated HTML, PostScript or PDF produced by some word
  processors for output purposes only.
  
! The "@strong{Title Page}" means, for a printed book, the title page itself,
  plus such following pages as are needed to hold, legibly, the material
  this License requires to appear in the title page.  For works in
! formats which do not have any title page as such, "Title Page" means
! the text near the most prominent appearance of the work's title,
  preceding the beginning of the body of the text.
  
! The "@strong{publisher}" means any person or entity that distributes
  copies of the Document to the public.
  
! A section "@strong{Entitled XYZ}" means a named subunit of the Document whose
  title either is precisely XYZ or contains XYZ in parentheses following
  text that translates XYZ in another language.  (Here XYZ stands for a
! specific section name mentioned below, such as "@strong{Acknowledgements}",
! "@strong{Dedications}", "@strong{Endorsements}", or "@strong{History}".)
! To "@strong{Preserve the Title}"
  of such a section when you modify the Document means that it remains a
! section "Entitled XYZ" according to this definition.
  
  The Document may include Warranty Disclaimers next to the notice which
  states that this License applies to the Document.  These Warranty
--- 29967,29990 ----
  machine-generated HTML, PostScript or PDF produced by some word
  processors for output purposes only.
  
! The “@strong{Title Page}” means, for a printed book, the title page itself,
  plus such following pages as are needed to hold, legibly, the material
  this License requires to appear in the title page.  For works in
! formats which do not have any title page as such, “Title Page” means
! the text near the most prominent appearance of the work’s title,
  preceding the beginning of the body of the text.
  
! The “@strong{publisher}” means any person or entity that distributes
  copies of the Document to the public.
  
! A section “@strong{Entitled XYZ}” means a named subunit of the Document whose
  title either is precisely XYZ or contains XYZ in parentheses following
  text that translates XYZ in another language.  (Here XYZ stands for a
! specific section name mentioned below, such as “@strong{Acknowledgements}”,
! “@strong{Dedications}”, “@strong{Endorsements}”, or “@strong{History}”.)
! To “@strong{Preserve the Title}”
  of such a section when you modify the Document means that it remains a
! section “Entitled XYZ” according to this definition.
  
  The Document may include Warranty Disclaimers next to the notice which
  states that this License applies to the Document.  These Warranty
*************** you may publicly display copies.
*** 29319,29325 ****
  
  If you publish printed copies (or copies in media that commonly have
  printed covers) of the Document, numbering more than 100, and the
! Document's license notice requires Cover Texts, you must enclose the
  copies in covers that carry, clearly and legibly, all these Cover
  Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
  the back cover.  Both covers must also clearly and legibly identify
--- 30012,30018 ----
  
  If you publish printed copies (or copies in media that commonly have
  printed covers) of the Document, numbering more than 100, and the
! Document’s license notice requires Cover Texts, you must enclose the
  copies in covers that carry, clearly and legibly, all these Cover
  Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
  the back cover.  Both covers must also clearly and legibly identify
*************** terms of this License, in the form shown
*** 29396,29411 ****
  
  @item 
  Preserve in that license notice the full lists of Invariant Sections
! and required Cover Texts given in the Document's license notice.
  
  @item 
  Include an unaltered copy of this License.
  
  @item 
! Preserve the section Entitled "History", Preserve its Title, and add
  to it an item stating at least the title, year, new authors, and
  publisher of the Modified Version as given on the Title Page.  If
! there is no section Entitled "History" in the Document, create one
  stating the title, year, authors, and publisher of the Document as
  given on its Title Page, then add an item describing the Modified
  Version as stated in the previous sentence.
--- 30089,30104 ----
  
  @item 
  Preserve in that license notice the full lists of Invariant Sections
! and required Cover Texts given in the Document’s license notice.
  
  @item 
  Include an unaltered copy of this License.
  
  @item 
! Preserve the section Entitled “History”, Preserve its Title, and add
  to it an item stating at least the title, year, new authors, and
  publisher of the Modified Version as given on the Title Page.  If
! there is no section Entitled “History” in the Document, create one
  stating the title, year, authors, and publisher of the Document as
  given on its Title Page, then add an item describing the Modified
  Version as stated in the previous sentence.
*************** Version as stated in the previous senten
*** 29414,29426 ****
  Preserve the network location, if any, given in the Document for
  public access to a Transparent copy of the Document, and likewise
  the network locations given in the Document for previous versions
! it was based on.  These may be placed in the "History" section.
  You may omit a network location for a work that was published at
  least four years before the Document itself, or if the original
  publisher of the version it refers to gives permission.
  
  @item 
! For any section Entitled "Acknowledgements" or "Dedications",
  Preserve the Title of the section, and preserve in the section all
  the substance and tone of each of the contributor acknowledgements
  and/or dedications given therein.
--- 30107,30119 ----
  Preserve the network location, if any, given in the Document for
  public access to a Transparent copy of the Document, and likewise
  the network locations given in the Document for previous versions
! it was based on.  These may be placed in the “History” section.
  You may omit a network location for a work that was published at
  least four years before the Document itself, or if the original
  publisher of the version it refers to gives permission.
  
  @item 
! For any section Entitled “Acknowledgements” or “Dedications”,
  Preserve the Title of the section, and preserve in the section all
  the substance and tone of each of the contributor acknowledgements
  and/or dedications given therein.
*************** unaltered in their text and in their tit
*** 29431,29441 ****
  or the equivalent are not considered part of the section titles.
  
  @item 
! Delete any section Entitled "Endorsements".  Such a section
  may not be included in the Modified Version.
  
  @item 
! Do not retitle any existing section to be Entitled "Endorsements"
  or to conflict in title with any Invariant Section.
  
  @item 
--- 30124,30134 ----
  or the equivalent are not considered part of the section titles.
  
  @item 
! Delete any section Entitled “Endorsements”.  Such a section
  may not be included in the Modified Version.
  
  @item 
! Do not retitle any existing section to be Entitled “Endorsements”
  or to conflict in title with any Invariant Section.
  
  @item 
*************** If the Modified Version includes new fro
*** 29446,29457 ****
  appendices that qualify as Secondary Sections and contain no material
  copied from the Document, you may at your option designate some or all
  of these sections as invariant.  To do this, add their titles to the
! list of Invariant Sections in the Modified Version's license notice.
  These titles must be distinct from any other section titles.
  
! You may add a section Entitled "Endorsements", provided it contains
  nothing but endorsements of your Modified Version by various
! parties---for example, statements of peer review or that the text has
  been approved by an organization as the authoritative definition of a
  standard.
  
--- 30139,30150 ----
  appendices that qualify as Secondary Sections and contain no material
  copied from the Document, you may at your option designate some or all
  of these sections as invariant.  To do this, add their titles to the
! list of Invariant Sections in the Modified Version’s license notice.
  These titles must be distinct from any other section titles.
  
! You may add a section Entitled “Endorsements”, provided it contains
  nothing but endorsements of your Modified Version by various
! parties—for example, statements of peer review or that the text has
  been approved by an organization as the authoritative definition of a
  standard.
  
*************** author or publisher of that section if k
*** 29487,29497 ****
  Make the same adjustment to the section titles in the list of
  Invariant Sections in the license notice of the combined work.
  
! In the combination, you must combine any sections Entitled "History"
  in the various original documents, forming one section Entitled
! "History"; likewise combine any sections Entitled "Acknowledgements",
! and any sections Entitled "Dedications".  You must delete all sections
! Entitled "Endorsements".
  
  @strong{6. COLLECTIONS OF DOCUMENTS}
  
--- 30180,30190 ----
  Make the same adjustment to the section titles in the list of
  Invariant Sections in the license notice of the combined work.
  
! In the combination, you must combine any sections Entitled “History”
  in the various original documents, forming one section Entitled
! “History”; likewise combine any sections Entitled “Acknowledgements”,
! and any sections Entitled “Dedications”.  You must delete all sections
! Entitled “Endorsements”.
  
  @strong{6. COLLECTIONS OF DOCUMENTS}
  
*************** other respects regarding verbatim copyin
*** 29510,29525 ****
  
  A compilation of the Document or its derivatives with other separate
  and independent documents or works, in or on a volume of a storage or
! distribution medium, is called an "aggregate" if the copyright
  resulting from the compilation is not used to limit the legal rights
! of the compilation's users beyond what the individual works permit.
  When the Document is included in an aggregate, this License does not
  apply to the other works in the aggregate which are not themselves
  derivative works of the Document.
  
  If the Cover Text requirement of section 3 is applicable to these
  copies of the Document, then if the Document is less than one half of
! the entire aggregate, the Document's Cover Texts may be placed on
  covers that bracket the Document within the aggregate, or the
  electronic equivalent of covers if the Document is in electronic form.
  Otherwise they must appear on printed covers that bracket the whole
--- 30203,30218 ----
  
  A compilation of the Document or its derivatives with other separate
  and independent documents or works, in or on a volume of a storage or
! distribution medium, is called an “aggregate” if the copyright
  resulting from the compilation is not used to limit the legal rights
! of the compilation’s users beyond what the individual works permit.
  When the Document is included in an aggregate, this License does not
  apply to the other works in the aggregate which are not themselves
  derivative works of the Document.
  
  If the Cover Text requirement of section 3 is applicable to these
  copies of the Document, then if the Document is less than one half of
! the entire aggregate, the Document’s Cover Texts may be placed on
  covers that bracket the Document within the aggregate, or the
  electronic equivalent of covers if the Document is in electronic form.
  Otherwise they must appear on printed covers that bracket the whole
*************** of those notices and disclaimers.  In ca
*** 29540,29547 ****
  the translation and the original version of this License or a notice
  or disclaimer, the original version will prevail.
  
! If a section in the Document is Entitled "Acknowledgements",
! "Dedications", or "History", the requirement (section 4) to Preserve
  its Title (section 1) will typically require changing the actual
  title.
  
--- 30233,30240 ----
  the translation and the original version of this License or a notice
  or disclaimer, the original version will prevail.
  
! If a section in the Document is Entitled “Acknowledgements”,
! “Dedications”, or “History”, the requirement (section 4) to Preserve
  its Title (section 1) will typically require changing the actual
  title.
  
*************** The Free Software Foundation may publish
*** 29578,29618 ****
  of the GNU Free Documentation License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.  See
! @indicateurl{http://www.gnu.org/copyleft/}.
  
  Each version of the License is given a distinguishing version number.
  If the Document specifies that a particular numbered version of this
! License "or any later version" applies to it, you have the option of
  following the terms and conditions either of that specified version or
  of any later version that has been published (not as a draft) by the
  Free Software Foundation.  If the Document does not specify a version
  number of this License, you may choose any version ever published (not
  as a draft) by the Free Software Foundation.  If the Document
  specifies that a proxy can decide which future versions of this
! License can be used, that proxy's public statement of acceptance of a
  version permanently authorizes you to choose that version for the
  Document.
  
  @strong{11. RELICENSING}
  
! "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
  World Wide Web server that publishes copyrightable works and also
  provides prominent facilities for anybody to edit those works.  A
  public wiki that anybody can edit is an example of such a server.  A
! "Massive Multiauthor Collaboration" (or "MMC") contained in the
  site means any set of copyrightable works thus published on the MMC
  site.
  
! "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
  license published by Creative Commons Corporation, a not-for-profit
  corporation with a principal place of business in San Francisco,
  California, as well as future copyleft versions of that license
  published by that same organization.
  
! "Incorporate" means to publish or republish a Document, in whole or
  in part, as part of another Document.
  
! An MMC is "eligible for relicensing" if it is licensed under this
  License, and if all works that were first published under this License
  somewhere other than this MMC, and subsequently incorporated in whole
  or in part into the MMC, (1) had no cover texts or invariant sections,
--- 30271,30311 ----
  of the GNU Free Documentation License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.  See
! @indicateurl{https://www.gnu.org/copyleft/}.
  
  Each version of the License is given a distinguishing version number.
  If the Document specifies that a particular numbered version of this
! License “or any later version” applies to it, you have the option of
  following the terms and conditions either of that specified version or
  of any later version that has been published (not as a draft) by the
  Free Software Foundation.  If the Document does not specify a version
  number of this License, you may choose any version ever published (not
  as a draft) by the Free Software Foundation.  If the Document
  specifies that a proxy can decide which future versions of this
! License can be used, that proxy’s public statement of acceptance of a
  version permanently authorizes you to choose that version for the
  Document.
  
  @strong{11. RELICENSING}
  
! “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any
  World Wide Web server that publishes copyrightable works and also
  provides prominent facilities for anybody to edit those works.  A
  public wiki that anybody can edit is an example of such a server.  A
! “Massive Multiauthor Collaboration” (or “MMC”) contained in the
  site means any set of copyrightable works thus published on the MMC
  site.
  
! “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
  license published by Creative Commons Corporation, a not-for-profit
  corporation with a principal place of business in San Francisco,
  California, as well as future copyleft versions of that license
  published by that same organization.
  
! “Incorporate” means to publish or republish a Document, in whole or
  in part, as part of another Document.
  
! An MMC is “eligible for relicensing” if it is licensed under this
  License, and if all works that were first published under this License
  somewhere other than this MMC, and subsequently incorporated in whole
  or in part into the MMC, (1) had no cover texts or invariant sections,
*************** Permission is granted to copy, distribut
*** 29635,29646 ****
  under the terms of the GNU Free Documentation License, Version 1.3
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
! A copy of the license is included in the section entitled "GNU
! Free Documentation License".
  @end quotation
  
  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
! replace the "with ... Texts." line with this:
  
  @quotation
  
--- 30328,30339 ----
  under the terms of the GNU Free Documentation License, Version 1.3
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
! A copy of the license is included in the section entitled “GNU
! Free Documentation License”.
  @end quotation
  
  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
! replace the “with … Texts.” line with this:
  
  @quotation
  
diff -Nrcpad gcc-11.3.0/gcc/ada/gnat_ugn.texi gcc-12.1.0/gcc/ada/gnat_ugn.texi
*** gcc-11.3.0/gcc/ada/gnat_ugn.texi	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnat_ugn.texi	Fri May  6 07:30:56 2022
***************
*** 3,9 ****
  @setfilename gnat_ugn.info
  @documentencoding UTF-8
  @ifinfo
! @*Generated by Sphinx 1.4.6.@*
  @end ifinfo
  @settitle GNAT User's Guide for Native Platforms
  @defindex ge
--- 3,9 ----
  @setfilename gnat_ugn.info
  @documentencoding UTF-8
  @ifinfo
! @*Generated by Sphinx 4.3.1.@*
  @end ifinfo
  @settitle GNAT User's Guide for Native Platforms
  @defindex ge
***************
*** 21,31 ****
  
  @copying
  @quotation
! GNAT User's Guide for Native Platforms , Dec 11, 2020
  
  AdaCore
  
! Copyright @copyright{} 2008-2021, Free Software Foundation
  @end quotation
  
  @end copying
--- 21,31 ----
  
  @copying
  @quotation
! GNAT User's Guide for Native Platforms , Jan 03, 2022
  
  AdaCore
  
! Copyright @copyright{} 2008-2022, Free Software Foundation
  @end quotation
  
  @end copying
*************** Copyright @copyright{} 2008-2021, Free S
*** 41,47 ****
  @c %** end of user preamble
  
  @ifnottex
! @node Top, About This Guide
  @top GNAT User's Guide for Native Platforms
  @insertcopying
  @end ifnottex
--- 41,47 ----
  @c %** end of user preamble
  
  @ifnottex
! @node Top
  @top GNAT User's Guide for Native Platforms
  @insertcopying
  @end ifnottex
*************** Permission is granted to copy, distribut
*** 59,65 ****
  under the terms of the GNU Free Documentation License, Version 1.3 or
  any later version published by the Free Software Foundation; with no
  Invariant Sections, with the Front-Cover Texts being
! "GNAT User's Guide for Native Platforms",
  and with no Back-Cover Texts.  A copy of the license is
  included in the section entitled @ref{1,,GNU Free Documentation License}.
  
--- 59,65 ----
  under the terms of the GNU Free Documentation License, Version 1.3 or
  any later version published by the Free Software Foundation; with no
  Invariant Sections, with the Front-Cover Texts being
! “GNAT User’s Guide for Native Platforms”,
  and with no Back-Cover Texts.  A copy of the license is
  included in the section entitled @ref{1,,GNU Free Documentation License}.
  
*************** Specifying a Run-Time Library
*** 433,438 ****
--- 433,439 ----
  GNU/Linux Topics
  
  * Required Packages on GNU/Linux:: 
+ * A GNU/Linux Debug Quirk:: 
  
  Microsoft Windows Topics
  
*************** Other Asm Functionality
*** 538,544 ****
  @end menu
  
  @node About This Guide,Getting Started with GNAT,Top,Top
! @anchor{gnat_ugn/about_this_guide about-this-guide}@anchor{2}@anchor{gnat_ugn/about_this_guide doc}@anchor{3}@anchor{gnat_ugn/about_this_guide gnat-user-s-guide-for-native-platforms}@anchor{4}@anchor{gnat_ugn/about_this_guide id1}@anchor{5}
  @chapter About This Guide
  
  
--- 539,545 ----
  @end menu
  
  @node About This Guide,Getting Started with GNAT,Top,Top
! @anchor{gnat_ugn/about_this_guide doc}@anchor{2}@anchor{gnat_ugn/about_this_guide about-this-guide}@anchor{3}@anchor{gnat_ugn/about_this_guide gnat-user-s-guide-for-native-platforms}@anchor{4}@anchor{gnat_ugn/about_this_guide id1}@anchor{5}
  @chapter About This Guide
  
  
*************** invoked in Ada 83 compatibility mode.
*** 554,560 ****
  By default, GNAT assumes Ada 2012, but you can override with a
  compiler switch (@ref{6,,Compiling Different Versions of Ada})
  to explicitly specify the language version.
! Throughout this manual, references to 'Ada' without a year suffix
  apply to all Ada versions of the language, starting with Ada 95.
  
  @menu
--- 555,561 ----
  By default, GNAT assumes Ada 2012, but you can override with a
  compiler switch (@ref{6,,Compiling Different Versions of Ada})
  to explicitly specify the language version.
! Throughout this manual, references to ‘Ada’ without a year suffix
  apply to all Ada versions of the language, starting with Ada 95.
  
  @menu
*************** Commands that are entered by the user ar
*** 721,742 ****
  comprising the @code{$} character followed by a space.
  
  @item 
! Full file names are shown with the '/' character
  as the directory separator; e.g., @code{parent-dir/subdir/myfile.adb}.
  If you are using GNAT on a Windows platform, please note that
! the '\' character should be used instead.
  @end itemize
  
  @node Getting Started with GNAT,The GNAT Compilation Model,About This Guide,Top
! @anchor{gnat_ugn/getting_started_with_gnat getting-started-with-gnat}@anchor{8}@anchor{gnat_ugn/getting_started_with_gnat doc}@anchor{14}@anchor{gnat_ugn/getting_started_with_gnat id1}@anchor{15}
  @chapter Getting Started with GNAT
  
  
! This chapter describes how to use GNAT's command line interface to build
  executable Ada programs.
  On most platforms a visually oriented Integrated Development Environment
  is also available: GNAT Studio.
! GNAT Studio offers a graphical "look and feel", support for development in
  other programming languages, comprehensive browsing features, and
  many other capabilities.
  For information on GNAT Studio please refer to the
--- 722,743 ----
  comprising the @code{$} character followed by a space.
  
  @item 
! Full file names are shown with the ‘/’ character
  as the directory separator; e.g., @code{parent-dir/subdir/myfile.adb}.
  If you are using GNAT on a Windows platform, please note that
! the ‘\’ character should be used instead.
  @end itemize
  
  @node Getting Started with GNAT,The GNAT Compilation Model,About This Guide,Top
! @anchor{gnat_ugn/getting_started_with_gnat doc}@anchor{14}@anchor{gnat_ugn/getting_started_with_gnat getting-started-with-gnat}@anchor{8}@anchor{gnat_ugn/getting_started_with_gnat id1}@anchor{15}
  @chapter Getting Started with GNAT
  
  
! This chapter describes how to use GNAT’s command line interface to build
  executable Ada programs.
  On most platforms a visually oriented Integrated Development Environment
  is also available: GNAT Studio.
! GNAT Studio offers a graphical “look and feel”, support for development in
  other programming languages, comprehensive browsing features, and
  many other capabilities.
  For information on GNAT Studio please refer to the
*************** machine performing the run. This can be
*** 780,786 ****
  project file attribute.
  
  @node Running GNAT,Running a Simple Ada Program,System Requirements,Getting Started with GNAT
! @anchor{gnat_ugn/getting_started_with_gnat running-gnat}@anchor{18}@anchor{gnat_ugn/getting_started_with_gnat id3}@anchor{19}
  @section Running GNAT
  
  
--- 781,787 ----
  project file attribute.
  
  @node Running GNAT,Running a Simple Ada Program,System Requirements,Getting Started with GNAT
! @anchor{gnat_ugn/getting_started_with_gnat id3}@anchor{18}@anchor{gnat_ugn/getting_started_with_gnat running-gnat}@anchor{19}
  @section Running GNAT
  
  
*************** utility program that, given the name of
*** 805,811 ****
  performs the necessary compilation, binding and linking steps.
  
  @node Running a Simple Ada Program,Running a Program with Multiple Units,Running GNAT,Getting Started with GNAT
! @anchor{gnat_ugn/getting_started_with_gnat running-a-simple-ada-program}@anchor{1a}@anchor{gnat_ugn/getting_started_with_gnat id4}@anchor{1b}
  @section Running a Simple Ada Program
  
  
--- 806,812 ----
  performs the necessary compilation, binding and linking steps.
  
  @node Running a Simple Ada Program,Running a Program with Multiple Units,Running GNAT,Getting Started with GNAT
! @anchor{gnat_ugn/getting_started_with_gnat id4}@anchor{1a}@anchor{gnat_ugn/getting_started_with_gnat running-a-simple-ada-program}@anchor{1b}
  @section Running a Simple Ada Program
  
  
*************** switch must always be present.)
*** 862,868 ****
  This compile command generates a file
  @code{hello.o}, which is the object
  file corresponding to your Ada program. It also generates
! an 'Ada Library Information' file @code{hello.ali},
  which contains additional information used to check
  that an Ada program is consistent.
  
--- 863,869 ----
  This compile command generates a file
  @code{hello.o}, which is the object
  file corresponding to your Ada program. It also generates
! an ‘Ada Library Information’ file @code{hello.ali},
  which contains additional information used to check
  that an Ada program is consistent.
  
*************** the name of the main file: these tools a
*** 871,877 ****
  all the necessary build steps in the correct order.
  In particular, these builders automatically recompile any sources that have
  been modified since they were last compiled, or sources that depend
! on such modified sources, so that 'version skew' is avoided.
  
  @geindex Version skew (avoided by `@w{`}gnatmake`@w{`})
  
--- 872,878 ----
  all the necessary build steps in the correct order.
  In particular, these builders automatically recompile any sources that have
  been modified since they were last compiled, or sources that depend
! on such modified sources, so that ‘version skew’ is avoided.
  
  @geindex Version skew (avoided by `@w{`}gnatmake`@w{`})
  
*************** $ gnatmake gmain.adb
*** 972,978 ****
  @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit
  
  @node The GNAT Compilation Model,Building Executable Programs with GNAT,Getting Started with GNAT,Top
! @anchor{gnat_ugn/the_gnat_compilation_model doc}@anchor{20}@anchor{gnat_ugn/the_gnat_compilation_model the-gnat-compilation-model}@anchor{9}@anchor{gnat_ugn/the_gnat_compilation_model id1}@anchor{21}
  @chapter The GNAT Compilation Model
  
  
--- 973,979 ----
  @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit
  
  @node The GNAT Compilation Model,Building Executable Programs with GNAT,Getting Started with GNAT,Top
! @anchor{gnat_ugn/the_gnat_compilation_model doc}@anchor{20}@anchor{gnat_ugn/the_gnat_compilation_model id1}@anchor{21}@anchor{gnat_ugn/the_gnat_compilation_model the-gnat-compilation-model}@anchor{9}
  @chapter The GNAT Compilation Model
  
  
*************** Topics related to source file makeup and
*** 1054,1060 ****
  @end menu
  
  @node Source Representation,Foreign Language Representation,,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model source-representation}@anchor{22}@anchor{gnat_ugn/the_gnat_compilation_model id2}@anchor{2f}
  @section Source Representation
  
  
--- 1055,1061 ----
  @end menu
  
  @node Source Representation,Foreign Language Representation,,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model id2}@anchor{2f}@anchor{gnat_ugn/the_gnat_compilation_model source-representation}@anchor{22}
  @section Source Representation
  
  
*************** of the compiler (@ref{31,,Character Set
*** 1205,1211 ****
  
  The basic character set is Latin-1. This character set is defined by ISO
  standard 8859, part 1. The lower half (character codes @code{16#00#}
! ... @code{16#7F#)} is identical to standard ASCII coding, but the upper
  half is used to represent additional characters. These include extended letters
  used by European languages, such as French accents, the vowels with umlauts
  used in German, and the extra letter A-ring used in Swedish.
--- 1206,1212 ----
  
  The basic character set is Latin-1. This character set is defined by ISO
  standard 8859, part 1. The lower half (character codes @code{16#00#}
! … @code{16#7F#)} is identical to standard ASCII coding, but the upper
  half is used to represent additional characters. These include extended letters
  used by European languages, such as French accents, the vowels with umlauts
  used in German, and the extra letter A-ring used in Swedish.
*************** string literals. In addition, the extend
*** 1220,1226 ****
  letters can be used in identifiers.
  
  @node Other 8-Bit Codes,Wide_Character Encodings,Latin-1,Foreign Language Representation
! @anchor{gnat_ugn/the_gnat_compilation_model other-8-bit-codes}@anchor{34}@anchor{gnat_ugn/the_gnat_compilation_model id5}@anchor{35}
  @subsection Other 8-Bit Codes
  
  
--- 1221,1227 ----
  letters can be used in identifiers.
  
  @node Other 8-Bit Codes,Wide_Character Encodings,Latin-1,Foreign Language Representation
! @anchor{gnat_ugn/the_gnat_compilation_model id5}@anchor{34}@anchor{gnat_ugn/the_gnat_compilation_model other-8-bit-codes}@anchor{35}
  @subsection Other 8-Bit Codes
  
  
*************** This scheme is compatible with use of th
*** 1368,1374 ****
  @geindex Upper-Half Coding
  
  The wide character with encoding @code{16#abcd#} where the upper bit is on
! (in other words, 'a' is in the range 8-F) is represented as two bytes,
  @code{16#ab#} and @code{16#cd#}. The second byte cannot be a format control
  character, but is not required to be in the upper half. This method can
  be also used for shift-JIS or EUC, where the internal coding matches the
--- 1369,1375 ----
  @geindex Upper-Half Coding
  
  The wide character with encoding @code{16#abcd#} where the upper bit is on
! (in other words, ‘a’ is in the range 8-F) is represented as two bytes,
  @code{16#ab#} and @code{16#cd#}. The second byte cannot be a format control
  character, but is not required to be in the upper half. This method can
  be also used for shift-JIS or EUC, where the internal coding matches the
*************** character sequence:
*** 1429,1435 ****
  
  where @code{a}, @code{b}, @code{c}, @code{d} are the four hexadecimal
  characters (using uppercase letters) of the wide character code. For
! example, ['A345'] is used to represent the wide character with code
  @code{16#A345#}. It is also possible (though not required) to use the
  Brackets coding for upper half characters. For example, the code
  @code{16#A3#} can be represented as @code{['A3']}.
--- 1430,1436 ----
  
  where @code{a}, @code{b}, @code{c}, @code{d} are the four hexadecimal
  characters (using uppercase letters) of the wide character code. For
! example, [‘A345’] is used to represent the wide character with code
  @code{16#A345#}. It is also possible (though not required) to use the
  Brackets coding for upper half characters. For example, the code
  @code{16#A3#} can be represented as @code{['A3']}.
*************** twelve byte character sequence:
*** 1491,1497 ****
  
  where @code{a-h} are the six or eight hexadecimal
  characters (using uppercase letters) of the wide wide character code. For
! example, ["1F4567"] is used to represent the wide wide character with code
  @code{16#001F_4567#}.
  
  This scheme is compatible with use of the full Wide_Wide_Character set,
--- 1492,1498 ----
  
  where @code{a-h} are the six or eight hexadecimal
  characters (using uppercase letters) of the wide wide character code. For
! example, [“1F4567”] is used to represent the wide wide character with code
  @code{16#001F_4567#}.
  
  This scheme is compatible with use of the full Wide_Wide_Character set,
*************** ACATS (Ada Conformity Assessment Test Su
*** 1500,1506 ****
  @end table
  
  @node File Naming Topics and Utilities,Configuration Pragmas,Foreign Language Representation,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model id8}@anchor{3a}@anchor{gnat_ugn/the_gnat_compilation_model file-naming-topics-and-utilities}@anchor{24}
  @section File Naming Topics and Utilities
  
  
--- 1501,1507 ----
  @end table
  
  @node File Naming Topics and Utilities,Configuration Pragmas,Foreign Language Representation,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model file-naming-topics-and-utilities}@anchor{24}@anchor{gnat_ugn/the_gnat_compilation_model id8}@anchor{3a}
  @section File Naming Topics and Utilities
  
  
*************** Following these rules can result in exce
*** 1626,1632 ****
  file names if corresponding
  unit names are long (for example, if child units or subunits are
  heavily nested). An option is available to shorten such long file names
! (called file name 'krunching'). This may be particularly useful when
  programs being developed with GNAT are to be used on operating systems
  with limited file name lengths. @ref{3d,,Using gnatkr}.
  
--- 1627,1633 ----
  file names if corresponding
  unit names are long (for example, if child units or subunits are
  heavily nested). An option is available to shorten such long file names
! (called file name ‘krunching’). This may be particularly useful when
  programs being developed with GNAT are to be used on operating systems
  with limited file name lengths. @ref{3d,,Using gnatkr}.
  
*************** then it must be included in the @code{gn
*** 1707,1713 ****
  be omitted.
  
  @node Alternative File Naming Schemes,Handling Arbitrary File Naming Conventions with gnatname,Using Other File Names,File Naming Topics and Utilities
! @anchor{gnat_ugn/the_gnat_compilation_model id11}@anchor{40}@anchor{gnat_ugn/the_gnat_compilation_model alternative-file-naming-schemes}@anchor{41}
  @subsection Alternative File Naming Schemes
  
  
--- 1708,1714 ----
  be omitted.
  
  @node Alternative File Naming Schemes,Handling Arbitrary File Naming Conventions with gnatname,Using Other File Names,File Naming Topics and Utilities
! @anchor{gnat_ugn/the_gnat_compilation_model alternative-file-naming-schemes}@anchor{40}@anchor{gnat_ugn/the_gnat_compilation_model id11}@anchor{41}
  @subsection Alternative File Naming Schemes
  
  
*************** pragma Source_File_Name
*** 1825,1831 ****
  @end example
  
  Our final example implements a scheme typically used with one of the
! Ada 83 compilers, where the separator character for subunits was '__'
  (two underscores), specs were identified by adding @code{_.ADA}, bodies
  by adding @code{.ADA}, and subunits by
  adding @code{.SEP}. All file names were
--- 1826,1832 ----
  @end example
  
  Our final example implements a scheme typically used with one of the
! Ada 83 compilers, where the separator character for subunits was ‘__’
  (two underscores), specs were identified by adding @code{_.ADA}, bodies
  by adding @code{.ADA}, and subunits by
  adding @code{.SEP}. All file names were
*************** a configuration pragmas file (@ref{25,,C
*** 1881,1887 ****
  or a project file.
  When the non-standard file naming conventions are well-defined,
  a small number of pragmas @code{Source_File_Name} specifying a naming pattern
! (@ref{41,,Alternative File Naming Schemes}) may be sufficient. However,
  if the file naming conventions are irregular or arbitrary, a number
  of pragma @code{Source_File_Name} for individual compilation units
  must be defined.
--- 1882,1888 ----
  or a project file.
  When the non-standard file naming conventions are well-defined,
  a small number of pragmas @code{Source_File_Name} specifying a naming pattern
! (@ref{40,,Alternative File Naming Schemes}) may be sufficient. However,
  if the file naming conventions are irregular or arbitrary, a number
  of pragma @code{Source_File_Name} for individual compilation units
  must be defined.
*************** GNAT provides a tool @code{gnatname} to
*** 1891,1897 ****
  set of files.
  
  @node Running gnatname,Switches for gnatname,Arbitrary File Naming Conventions,Handling Arbitrary File Naming Conventions with gnatname
! @anchor{gnat_ugn/the_gnat_compilation_model running-gnatname}@anchor{46}@anchor{gnat_ugn/the_gnat_compilation_model id14}@anchor{47}
  @subsubsection Running @code{gnatname}
  
  
--- 1892,1898 ----
  set of files.
  
  @node Running gnatname,Switches for gnatname,Arbitrary File Naming Conventions,Handling Arbitrary File Naming Conventions with gnatname
! @anchor{gnat_ugn/the_gnat_compilation_model id14}@anchor{46}@anchor{gnat_ugn/the_gnat_compilation_model running-gnatname}@anchor{47}
  @subsubsection Running @code{gnatname}
  
  
*************** Examples of Naming Patterns are:
*** 1934,1940 ****
  
  For a more complete description of the syntax of Naming Patterns,
  see the second kind of regular expressions described in @code{g-regexp.ads}
! (the 'Glob' regular expressions).
  
  When invoked without the switch @code{-P}, @code{gnatname} will create a
  configuration pragmas file @code{gnat.adc} in the current working directory,
--- 1935,1941 ----
  
  For a more complete description of the syntax of Naming Patterns,
  see the second kind of regular expressions described in @code{g-regexp.ads}
! (the ‘Glob’ regular expressions).
  
  When invoked without the switch @code{-P}, @code{gnatname} will create a
  configuration pragmas file @code{gnat.adc} in the current working directory,
*************** When a switch @code{-P} is specified,
*** 2084,2090 ****
  no switch @code{-c} may be specified.
  On all platforms, except on VMS, when @code{gnatname} is invoked for an
  existing project file <proj>.gpr, a backup copy of the project file is created
! in the project directory with file name <proj>.gpr.saved_x. 'x' is the first
  non negative number that makes this backup copy a new file.
  
  @geindex -v (gnatname)
--- 2085,2091 ----
  no switch @code{-c} may be specified.
  On all platforms, except on VMS, when @code{gnatname} is invoked for an
  existing project file <proj>.gpr, a backup copy of the project file is created
! in the project directory with file name <proj>.gpr.saved_x. ‘x’ is the first
  non negative number that makes this backup copy a new file.
  
  @geindex -v (gnatname)
*************** applying this shortening.
*** 2172,2178 ****
  @end menu
  
  @node About gnatkr,Using gnatkr,,File Name Krunching with gnatkr
! @anchor{gnat_ugn/the_gnat_compilation_model id18}@anchor{4e}@anchor{gnat_ugn/the_gnat_compilation_model about-gnatkr}@anchor{4f}
  @subsubsection About @code{gnatkr}
  
  
--- 2173,2179 ----
  @end menu
  
  @node About gnatkr,Using gnatkr,,File Name Krunching with gnatkr
! @anchor{gnat_ugn/the_gnat_compilation_model about-gnatkr}@anchor{4e}@anchor{gnat_ugn/the_gnat_compilation_model id18}@anchor{4f}
  @subsubsection About @code{gnatkr}
  
  
*************** respectively.
*** 2202,2208 ****
  @end itemize
  
  The @code{-gnatk@emph{nn}}
! switch of the compiler activates a 'krunching'
  circuit that limits file names to nn characters (where nn is a decimal
  integer).
  
--- 2203,2209 ----
  @end itemize
  
  The @code{-gnatk@emph{nn}}
! switch of the compiler activates a ‘krunching’
  circuit that limits file names to nn characters (where nn is a decimal
  integer).
  
*************** program @code{gnatkr} is supplied for co
*** 2377,2383 ****
  krunched name of a file.
  
  @node Examples of gnatkr Usage,,Krunching Method,File Name Krunching with gnatkr
! @anchor{gnat_ugn/the_gnat_compilation_model id21}@anchor{53}@anchor{gnat_ugn/the_gnat_compilation_model examples-of-gnatkr-usage}@anchor{54}
  @subsubsection Examples of @code{gnatkr} Usage
  
  
--- 2378,2384 ----
  krunched name of a file.
  
  @node Examples of gnatkr Usage,,Krunching Method,File Name Krunching with gnatkr
! @anchor{gnat_ugn/the_gnat_compilation_model examples-of-gnatkr-usage}@anchor{53}@anchor{gnat_ugn/the_gnat_compilation_model id21}@anchor{54}
  @subsubsection Examples of @code{gnatkr} Usage
  
  
*************** files to meet the standard GNAT default
*** 2411,2417 ****
  @end menu
  
  @node Handling Files with Multiple Units,Operating gnatchop in Compilation Mode,,Renaming Files with gnatchop
! @anchor{gnat_ugn/the_gnat_compilation_model id23}@anchor{56}@anchor{gnat_ugn/the_gnat_compilation_model handling-files-with-multiple-units}@anchor{57}
  @subsubsection Handling Files with Multiple Units
  
  
--- 2412,2418 ----
  @end menu
  
  @node Handling Files with Multiple Units,Operating gnatchop in Compilation Mode,,Renaming Files with gnatchop
! @anchor{gnat_ugn/the_gnat_compilation_model handling-files-with-multiple-units}@anchor{56}@anchor{gnat_ugn/the_gnat_compilation_model id23}@anchor{57}
  @subsubsection Handling Files with Multiple Units
  
  
*************** Generated or modified project files can
*** 2427,2433 ****
  See @ref{42,,Handling Arbitrary File Naming Conventions with gnatname}
  for more details on how to use @cite{gnatname}.
  
! Alternatively, if you want to permanently restructure a set of 'foreign'
  files so that they match the GNAT rules, and do the remaining development
  using the GNAT structure, you can simply use @code{gnatchop} once, generate the
  new set of files and work with them from that point on.
--- 2428,2434 ----
  See @ref{42,,Handling Arbitrary File Naming Conventions with gnatname}
  for more details on how to use @cite{gnatname}.
  
! Alternatively, if you want to permanently restructure a set of ‘foreign’
  files so that they match the GNAT rules, and do the remaining development
  using the GNAT structure, you can simply use @code{gnatchop} once, generate the
  new set of files and work with them from that point on.
*************** will each start with a copy of this BOM,
*** 2438,2444 ****
  automatically in UTF-8 mode without needing to specify an explicit encoding.
  
  @node Operating gnatchop in Compilation Mode,Command Line for gnatchop,Handling Files with Multiple Units,Renaming Files with gnatchop
! @anchor{gnat_ugn/the_gnat_compilation_model operating-gnatchop-in-compilation-mode}@anchor{58}@anchor{gnat_ugn/the_gnat_compilation_model id24}@anchor{59}
  @subsubsection Operating gnatchop in Compilation Mode
  
  
--- 2439,2445 ----
  automatically in UTF-8 mode without needing to specify an explicit encoding.
  
  @node Operating gnatchop in Compilation Mode,Command Line for gnatchop,Handling Files with Multiple Units,Renaming Files with gnatchop
! @anchor{gnat_ugn/the_gnat_compilation_model id24}@anchor{58}@anchor{gnat_ugn/the_gnat_compilation_model operating-gnatchop-in-compilation-mode}@anchor{59}
  @subsubsection Operating gnatchop in Compilation Mode
  
  
*************** find this default to be what they want.
*** 2454,2460 ****
  submit a file containing only configuration pragmas, or one that ends in
  configuration pragmas, to @code{gnatchop}.
  
! However, using a special option to activate 'compilation mode',
  @code{gnatchop}
  can perform another function, which is to provide exactly the semantics
  required by the RM for handling of configuration pragmas in a compilation.
--- 2455,2461 ----
  submit a file containing only configuration pragmas, or one that ends in
  configuration pragmas, to @code{gnatchop}.
  
! However, using a special option to activate ‘compilation mode’,
  @code{gnatchop}
  can perform another function, which is to provide exactly the semantics
  required by the RM for handling of configuration pragmas in a compilation.
*************** switch provides the required behavior, a
*** 2498,2504 ****
  in which GNAT processes the ACVC tests.
  
  @node Command Line for gnatchop,Switches for gnatchop,Operating gnatchop in Compilation Mode,Renaming Files with gnatchop
! @anchor{gnat_ugn/the_gnat_compilation_model id25}@anchor{5a}@anchor{gnat_ugn/the_gnat_compilation_model command-line-for-gnatchop}@anchor{5b}
  @subsubsection Command Line for @code{gnatchop}
  
  
--- 2499,2505 ----
  in which GNAT processes the ACVC tests.
  
  @node Command Line for gnatchop,Switches for gnatchop,Operating gnatchop in Compilation Mode,Renaming Files with gnatchop
! @anchor{gnat_ugn/the_gnat_compilation_model command-line-for-gnatchop}@anchor{5a}@anchor{gnat_ugn/the_gnat_compilation_model id25}@anchor{5b}
  @subsubsection Command Line for @code{gnatchop}
  
  
*************** no source files written
*** 2572,2578 ****
  @end example
  
  @node Switches for gnatchop,Examples of gnatchop Usage,Command Line for gnatchop,Renaming Files with gnatchop
! @anchor{gnat_ugn/the_gnat_compilation_model switches-for-gnatchop}@anchor{5c}@anchor{gnat_ugn/the_gnat_compilation_model id26}@anchor{5d}
  @subsubsection Switches for @code{gnatchop}
  
  
--- 2573,2579 ----
  @end example
  
  @node Switches for gnatchop,Examples of gnatchop Usage,Command Line for gnatchop,Renaming Files with gnatchop
! @anchor{gnat_ugn/the_gnat_compilation_model id26}@anchor{5c}@anchor{gnat_ugn/the_gnat_compilation_model switches-for-gnatchop}@anchor{5d}
  @subsubsection Switches for @code{gnatchop}
  
  
*************** no attempt is made to add the prefix to
*** 2738,2744 ****
  @end table
  
  @node Examples of gnatchop Usage,,Switches for gnatchop,Renaming Files with gnatchop
! @anchor{gnat_ugn/the_gnat_compilation_model id27}@anchor{5e}@anchor{gnat_ugn/the_gnat_compilation_model examples-of-gnatchop-usage}@anchor{5f}
  @subsubsection Examples of @code{gnatchop} Usage
  
  
--- 2739,2745 ----
  @end table
  
  @node Examples of gnatchop Usage,,Switches for gnatchop,Renaming Files with gnatchop
! @anchor{gnat_ugn/the_gnat_compilation_model examples-of-gnatchop-usage}@anchor{5e}@anchor{gnat_ugn/the_gnat_compilation_model id27}@anchor{5f}
  @subsubsection Examples of @code{gnatchop} Usage
  
  
*************** be the one that is output, and earlier d
*** 2779,2785 ****
  unit will be skipped.
  
  @node Configuration Pragmas,Generating Object Files,File Naming Topics and Utilities,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model id28}@anchor{60}@anchor{gnat_ugn/the_gnat_compilation_model configuration-pragmas}@anchor{25}
  @section Configuration Pragmas
  
  
--- 2780,2786 ----
  unit will be skipped.
  
  @node Configuration Pragmas,Generating Object Files,File Naming Topics and Utilities,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model configuration-pragmas}@anchor{25}@anchor{gnat_ugn/the_gnat_compilation_model id28}@anchor{60}
  @section Configuration Pragmas
  
  
*************** C_Pass_By_Copy
*** 2814,2829 ****
  Check_Float_Overflow
  Check_Name
  Check_Policy
- Compile_Time_Error
- Compile_Time_Warning
- Compiler_Unit
- Compiler_Unit_Warning
  Component_Alignment
  Convention_Identifier
  Debug_Policy
- Detect_Blocking
  Default_Scalar_Storage_Order
  Default_Storage_Pool
  Disable_Atomic_Synchronization
  Discard_Names
  Elaboration_Checks
--- 2815,2826 ----
  Check_Float_Overflow
  Check_Name
  Check_Policy
  Component_Alignment
  Convention_Identifier
  Debug_Policy
  Default_Scalar_Storage_Order
  Default_Storage_Pool
+ Detect_Blocking
  Disable_Atomic_Synchronization
  Discard_Names
  Elaboration_Checks
*************** License
*** 2842,2848 ****
  Locking_Policy
  No_Component_Reordering
  No_Heap_Finalization
- No_Run_Time
  No_Strict_Aliasing
  Normalize_Scalars
  Optimize_Alignment
--- 2839,2844 ----
*************** Prefix_Exception_Messages
*** 2854,2870 ****
  Priority_Specific_Dispatching
  Profile
  Profile_Warnings
- Propagate_Exceptions
  Queuing_Policy
- Rational
- Ravenscar
  Rename_Pragma
- Restricted_Run_Time
  Restrictions
! Restrictions_Warnings
  Reviewable
  Short_Circuit_And_Or
- Short_Descriptors
  Source_File_Name
  Source_File_Name_Project
  SPARK_Mode
--- 2850,2861 ----
  Priority_Specific_Dispatching
  Profile
  Profile_Warnings
  Queuing_Policy
  Rename_Pragma
  Restrictions
! Restriction_Warnings
  Reviewable
  Short_Circuit_And_Or
  Source_File_Name
  Source_File_Name_Project
  SPARK_Mode
*************** Suppress
*** 2873,2879 ****
  Suppress_Exception_Locations
  Task_Dispatching_Policy
  Unevaluated_Use_Of_Old
- Universal_Data
  Unsuppress
  Use_VADS_Size
  Validity_Checks
--- 2864,2869 ----
*************** Wide_Character_Encoding
*** 2889,2895 ****
  @end menu
  
  @node Handling of Configuration Pragmas,The Configuration Pragmas Files,,Configuration Pragmas
! @anchor{gnat_ugn/the_gnat_compilation_model id29}@anchor{61}@anchor{gnat_ugn/the_gnat_compilation_model handling-of-configuration-pragmas}@anchor{3f}
  @subsection Handling of Configuration Pragmas
  
  
--- 2879,2885 ----
  @end menu
  
  @node Handling of Configuration Pragmas,The Configuration Pragmas Files,,Configuration Pragmas
! @anchor{gnat_ugn/the_gnat_compilation_model handling-of-configuration-pragmas}@anchor{3f}@anchor{gnat_ugn/the_gnat_compilation_model id29}@anchor{61}
  @subsection Handling of Configuration Pragmas
  
  
*************** all compilations performed in a given co
*** 2900,2906 ****
  GNAT also provides the @code{gnatchop} utility to provide an automatic
  way to handle configuration pragmas following the semantics for
  compilations (that is, files with multiple units), described in the RM.
! See @ref{58,,Operating gnatchop in Compilation Mode} for details.
  However, for most purposes, it will be more convenient to edit the
  @code{gnat.adc} file that contains configuration pragmas directly,
  as described in the following section.
--- 2890,2896 ----
  GNAT also provides the @code{gnatchop} utility to provide an automatic
  way to handle configuration pragmas following the semantics for
  compilations (that is, files with multiple units), described in the RM.
! See @ref{59,,Operating gnatchop in Compilation Mode} for details.
  However, for most purposes, it will be more convenient to edit the
  @code{gnat.adc} file that contains configuration pragmas directly,
  as described in the following section.
*************** only to the unit in which the pragma app
*** 2925,2936 ****
  The exception is No_Elaboration_Code which always applies to the entire
  object file from a compilation, i.e. to the body, spec, and all subunits.
  This restriction can be specified in a configuration pragma file, or it
! can be on the body and/or the spec (in eithe case it applies to all the
  relevant units). It can appear on a subunit only if it has previously
  appeared in the body of spec.
  
  @node The Configuration Pragmas Files,,Handling of Configuration Pragmas,Configuration Pragmas
! @anchor{gnat_ugn/the_gnat_compilation_model the-configuration-pragmas-files}@anchor{62}@anchor{gnat_ugn/the_gnat_compilation_model id30}@anchor{63}
  @subsection The Configuration Pragmas Files
  
  
--- 2915,2926 ----
  The exception is No_Elaboration_Code which always applies to the entire
  object file from a compilation, i.e. to the body, spec, and all subunits.
  This restriction can be specified in a configuration pragma file, or it
! can be on the body and/or the spec (in either case it applies to all the
  relevant units). It can appear on a subunit only if it has previously
  appeared in the body of spec.
  
  @node The Configuration Pragmas Files,,Handling of Configuration Pragmas,Configuration Pragmas
! @anchor{gnat_ugn/the_gnat_compilation_model id30}@anchor{62}@anchor{gnat_ugn/the_gnat_compilation_model the-configuration-pragmas-files}@anchor{63}
  @subsection The Configuration Pragmas Files
  
  
*************** Files containing configuration pragmas s
*** 2966,2972 ****
  temporary files. A file is considered temporary if its name ends in
  @code{.tmp} or @code{.TMP}. Certain tools follow this naming
  convention because they pass information to @code{gcc} via
! temporary files that are immediately deleted; it doesn't make sense to
  depend on a file that no longer exists. Such tools include
  @code{gprbuild}, @code{gnatmake}, and @code{gnatcheck}.
  
--- 2956,2962 ----
  temporary files. A file is considered temporary if its name ends in
  @code{.tmp} or @code{.TMP}. Certain tools follow this naming
  convention because they pass information to @code{gcc} via
! temporary files that are immediately deleted; it doesn’t make sense to
  depend on a file that no longer exists. Such tools include
  @code{gprbuild}, @code{gnatmake}, and @code{gnatcheck}.
  
*************** checking mode, use the @code{-gnatc} swi
*** 3057,3063 ****
  
  
  A given object file clearly depends on the source file which is compiled
! to produce it. Here we are using "depends" in the sense of a typical
  @code{make} utility; in other words, an object file depends on a source
  file if changes to the source file require the object file to be
  recompiled.
--- 3047,3053 ----
  
  
  A given object file clearly depends on the source file which is compiled
! to produce it. Here we are using “depends” in the sense of a typical
  @code{make} utility; in other words, an object file depends on a source
  file if changes to the source file require the object file to be
  recompiled.
*************** that is performed by the front end of th
*** 3107,3114 ****
  not require that the code generation be optimized. Like @code{-gnatn},
  the use of this switch generates additional dependencies.
  
! When using a gcc-based back end (in practice this means using any version
! of GNAT other than for the JVM, .NET or GNAAMP platforms), then the use of
  @code{-gnatN} is deprecated, and the use of @code{-gnatn} is preferred.
  Historically front end inlining was more extensive than the gcc back end
  inlining, but that is no longer the case.
--- 3097,3103 ----
  not require that the code generation be optimized. Like @code{-gnatn},
  the use of this switch generates additional dependencies.
  
! When using a gcc-based back end, then the use of
  @code{-gnatN} is deprecated, and the use of @code{-gnatn} is preferred.
  Historically front end inlining was more extensive than the gcc back end
  inlining, but that is no longer the case.
*************** see the source of the body of unit @code
*** 3215,3221 ****
  @code{lib-writ.adb} in the GNAT compiler sources.
  
  @node Binding an Ada Program,GNAT and Libraries,The Ada Library Information Files,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model id34}@anchor{67}@anchor{gnat_ugn/the_gnat_compilation_model binding-an-ada-program}@anchor{29}
  @section Binding an Ada Program
  
  
--- 3204,3210 ----
  @code{lib-writ.adb} in the GNAT compiler sources.
  
  @node Binding an Ada Program,GNAT and Libraries,The Ada Library Information Files,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model binding-an-ada-program}@anchor{29}@anchor{gnat_ugn/the_gnat_compilation_model id34}@anchor{67}
  @section Binding an Ada Program
  
  
*************** object files for the Ada units of the pr
*** 3260,3266 ****
  This section describes how to build and use libraries with GNAT, and also shows
  how to recompile the GNAT run-time library. You should be familiar with the
  Project Manager facility (see the @emph{GNAT_Project_Manager} chapter of the
! @emph{GPRbuild User's Guide}) before reading this chapter.
  
  @menu
  * Introduction to Libraries in GNAT:: 
--- 3249,3255 ----
  This section describes how to build and use libraries with GNAT, and also shows
  how to recompile the GNAT run-time library. You should be familiar with the
  Project Manager facility (see the @emph{GNAT_Project_Manager} chapter of the
! @emph{GPRbuild User’s Guide}) before reading this chapter.
  
  @menu
  * Introduction to Libraries in GNAT:: 
*************** Project Manager facility (see the @emph{
*** 3271,3277 ****
  @end menu
  
  @node Introduction to Libraries in GNAT,General Ada Libraries,,GNAT and Libraries
! @anchor{gnat_ugn/the_gnat_compilation_model introduction-to-libraries-in-gnat}@anchor{69}@anchor{gnat_ugn/the_gnat_compilation_model id36}@anchor{6a}
  @subsection Introduction to Libraries in GNAT
  
  
--- 3260,3266 ----
  @end menu
  
  @node Introduction to Libraries in GNAT,General Ada Libraries,,GNAT and Libraries
! @anchor{gnat_ugn/the_gnat_compilation_model id36}@anchor{69}@anchor{gnat_ugn/the_gnat_compilation_model introduction-to-libraries-in-gnat}@anchor{6a}
  @subsection Introduction to Libraries in GNAT
  
  
*************** inlined routine. In the case of @emph{st
*** 3313,3319 ****
  units are called @emph{interface units} (@ref{6b,,Stand-alone Ada Libraries}).
  
  All compilation units comprising an application, including those in a library,
! need to be elaborated in an order partially defined by Ada's semantics. GNAT
  computes the elaboration order from the @code{ALI} files and this is why they
  constitute a mandatory part of GNAT libraries.
  @emph{Stand-alone libraries} are the exception to this rule because a specific
--- 3302,3308 ----
  units are called @emph{interface units} (@ref{6b,,Stand-alone Ada Libraries}).
  
  All compilation units comprising an application, including those in a library,
! need to be elaborated in an order partially defined by Ada’s semantics. GNAT
  computes the elaboration order from the @code{ALI} files and this is why they
  constitute a mandatory part of GNAT libraries.
  @emph{Stand-alone libraries} are the exception to this rule because a specific
*************** using the library.
*** 3340,3346 ****
  The easiest way to build a library is to use the Project Manager,
  which supports a special type of project called a @emph{Library Project}
  (see the @emph{Library Projects} section in the @emph{GNAT Project Manager}
! chapter of the @emph{GPRbuild User's Guide}).
  
  A project is considered a library project, when two project-level attributes
  are defined in it: @code{Library_Name} and @code{Library_Dir}. In order to
--- 3329,3335 ----
  The easiest way to build a library is to use the Project Manager,
  which supports a special type of project called a @emph{Library Project}
  (see the @emph{Library Projects} section in the @emph{GNAT Project Manager}
! chapter of the @emph{GPRbuild User’s Guide}).
  
  A project is considered a library project, when two project-level attributes
  are defined in it: @code{Library_Name} and @code{Library_Dir}. In order to
*************** or @code{lib@emph{xxx}.so} (or @code{lib
*** 3466,3472 ****
  be accessed by the directive @code{-l@emph{xxx}} at link time.
  
  @node Installing a library,Using a library,Building a library,General Ada Libraries
! @anchor{gnat_ugn/the_gnat_compilation_model installing-a-library}@anchor{71}@anchor{gnat_ugn/the_gnat_compilation_model id39}@anchor{72}
  @subsubsection Installing a library
  
  
--- 3455,3461 ----
  be accessed by the directive @code{-l@emph{xxx}} at link time.
  
  @node Installing a library,Using a library,Building a library,General Ada Libraries
! @anchor{gnat_ugn/the_gnat_compilation_model id39}@anchor{71}@anchor{gnat_ugn/the_gnat_compilation_model installing-a-library}@anchor{72}
  @subsubsection Installing a library
  
  
*************** be accessed by the directive @code{-l@em
*** 3476,3489 ****
  
  If you use project files, library installation is part of the library build
  process (see the @emph{Installing a Library with Project Files} section of the
! @emph{GNAT Project Manager} chapter of the @emph{GPRbuild User's Guide}).
  
  When project files are not an option, it is also possible, but not recommended,
  to install the library so that the sources needed to use the library are on the
  Ada source path and the ALI files & libraries be on the Ada Object path (see
  @ref{73,,Search Paths and the Run-Time Library (RTL)}. Alternatively, the system
  administrator can place general-purpose libraries in the default compiler
! paths, by specifying the libraries' location in the configuration files
  @code{ada_source_path} and @code{ada_object_path}. These configuration files
  must be located in the GNAT installation tree at the same place as the gcc spec
  file. The location of the gcc spec file can be determined as follows:
--- 3465,3478 ----
  
  If you use project files, library installation is part of the library build
  process (see the @emph{Installing a Library with Project Files} section of the
! @emph{GNAT Project Manager} chapter of the @emph{GPRbuild User’s Guide}).
  
  When project files are not an option, it is also possible, but not recommended,
  to install the library so that the sources needed to use the library are on the
  Ada source path and the ALI files & libraries be on the Ada Object path (see
  @ref{73,,Search Paths and the Run-Time Library (RTL)}. Alternatively, the system
  administrator can place general-purpose libraries in the default compiler
! paths, by specifying the libraries’ location in the configuration files
  @code{ada_source_path} and @code{ada_object_path}. These configuration files
  must be located in the GNAT installation tree at the same place as the gcc spec
  file. The location of the gcc spec file can be determined as follows:
*************** library must be installed before the GNA
*** 3523,3529 ****
  any part of it.
  
  @node Using a library,,Installing a library,General Ada Libraries
! @anchor{gnat_ugn/the_gnat_compilation_model using-a-library}@anchor{74}@anchor{gnat_ugn/the_gnat_compilation_model id40}@anchor{75}
  @subsubsection Using a library
  
  
--- 3512,3518 ----
  any part of it.
  
  @node Using a library,,Installing a library,General Ada Libraries
! @anchor{gnat_ugn/the_gnat_compilation_model id40}@anchor{74}@anchor{gnat_ugn/the_gnat_compilation_model using-a-library}@anchor{75}
  @subsubsection Using a library
  
  
*************** project My_Proj is
*** 3540,3546 ****
  end My_Proj;
  @end example
  
! Even if you have a third-party, non-Ada library, you can still use GNAT's
  Project Manager facility to provide a wrapper for it. For example, the
  following project, when @emph{with}ed by your main project, will link with the
  third-party library @code{liba.a}:
--- 3529,3535 ----
  end My_Proj;
  @end example
  
! Even if you have a third-party, non-Ada library, you can still use GNAT’s
  Project Manager facility to provide a wrapper for it. For example, the
  following project, when @emph{with}ed by your main project, will link with the
  third-party library @code{liba.a}:
*************** in the directory @code{share/examples/gn
*** 3617,3623 ****
  install area.
  
  @node Stand-alone Ada Libraries,Rebuilding the GNAT Run-Time Library,General Ada Libraries,GNAT and Libraries
! @anchor{gnat_ugn/the_gnat_compilation_model stand-alone-ada-libraries}@anchor{6b}@anchor{gnat_ugn/the_gnat_compilation_model id41}@anchor{77}
  @subsection Stand-alone Ada Libraries
  
  
--- 3606,3612 ----
  install area.
  
  @node Stand-alone Ada Libraries,Rebuilding the GNAT Run-Time Library,General Ada Libraries,GNAT and Libraries
! @anchor{gnat_ugn/the_gnat_compilation_model id41}@anchor{77}@anchor{gnat_ugn/the_gnat_compilation_model stand-alone-ada-libraries}@anchor{6b}
  @subsection Stand-alone Ada Libraries
  
  
*************** install area.
*** 3632,3642 ****
  @end menu
  
  @node Introduction to Stand-alone Libraries,Building a Stand-alone Library,,Stand-alone Ada Libraries
! @anchor{gnat_ugn/the_gnat_compilation_model introduction-to-stand-alone-libraries}@anchor{78}@anchor{gnat_ugn/the_gnat_compilation_model id42}@anchor{79}
  @subsubsection Introduction to Stand-alone Libraries
  
  
! A Stand-alone Library (abbreviated 'SAL') is a library that contains the
  necessary code to
  elaborate the Ada units that are included in the library. In contrast with
  an ordinary library, which consists of all sources, objects and @code{ALI}
--- 3621,3631 ----
  @end menu
  
  @node Introduction to Stand-alone Libraries,Building a Stand-alone Library,,Stand-alone Ada Libraries
! @anchor{gnat_ugn/the_gnat_compilation_model id42}@anchor{78}@anchor{gnat_ugn/the_gnat_compilation_model introduction-to-stand-alone-libraries}@anchor{79}
  @subsubsection Introduction to Stand-alone Libraries
  
  
! A Stand-alone Library (abbreviated ‘SAL’) is a library that contains the
  necessary code to
  elaborate the Ada units that are included in the library. In contrast with
  an ordinary library, which consists of all sources, objects and @code{ALI}
*************** files of the
*** 3644,3653 ****
  library, a SAL may specify a restricted subset of compilation units
  to serve as a library interface. In this case, the fully
  self-sufficient set of files will normally consist of an objects
! archive, the sources of interface units' specs, and the @code{ALI}
  files of interface units.
  If an interface spec contains a generic unit or an inlined subprogram,
! the body's
  source must also be provided; if the units that must be provided in the source
  form depend on other units, the source and @code{ALI} files of those must
  also be provided.
--- 3633,3642 ----
  library, a SAL may specify a restricted subset of compilation units
  to serve as a library interface. In this case, the fully
  self-sufficient set of files will normally consist of an objects
! archive, the sources of interface units’ specs, and the @code{ALI}
  files of interface units.
  If an interface spec contains a generic unit or an inlined subprogram,
! the body’s
  source must also be provided; if the units that must be provided in the source
  form depend on other units, the source and @code{ALI} files of those must
  also be provided.
*************** version, controlled by @code{Library_Ver
*** 3660,3683 ****
  then the clients do not need to be relinked.
  
  SALs also allow the library providers to minimize the amount of library source
! text exposed to the clients.  Such 'information hiding' might be useful or
  necessary for various reasons.
  
  Stand-alone libraries are also well suited to be used in an executable whose
  main routine is not written in Ada.
  
  @node Building a Stand-alone Library,Creating a Stand-alone Library to be used in a non-Ada context,Introduction to Stand-alone Libraries,Stand-alone Ada Libraries
! @anchor{gnat_ugn/the_gnat_compilation_model id43}@anchor{7a}@anchor{gnat_ugn/the_gnat_compilation_model building-a-stand-alone-library}@anchor{7b}
  @subsubsection Building a Stand-alone Library
  
  
! GNAT's Project facility provides a simple way of building and installing
  stand-alone libraries; see the @emph{Stand-alone Library Projects} section
! in the @emph{GNAT Project Manager} chapter of the @emph{GPRbuild User's Guide}.
  To be a Stand-alone Library Project, in addition to the two attributes
  that make a project a Library Project (@code{Library_Name} and
  @code{Library_Dir}; see the @emph{Library Projects} section in the
! @emph{GNAT Project Manager} chapter of the @emph{GPRbuild User's Guide}),
  the attribute @code{Library_Interface} must be defined.  For example:
  
  @example
--- 3649,3672 ----
  then the clients do not need to be relinked.
  
  SALs also allow the library providers to minimize the amount of library source
! text exposed to the clients.  Such ‘information hiding’ might be useful or
  necessary for various reasons.
  
  Stand-alone libraries are also well suited to be used in an executable whose
  main routine is not written in Ada.
  
  @node Building a Stand-alone Library,Creating a Stand-alone Library to be used in a non-Ada context,Introduction to Stand-alone Libraries,Stand-alone Ada Libraries
! @anchor{gnat_ugn/the_gnat_compilation_model building-a-stand-alone-library}@anchor{7a}@anchor{gnat_ugn/the_gnat_compilation_model id43}@anchor{7b}
  @subsubsection Building a Stand-alone Library
  
  
! GNAT’s Project facility provides a simple way of building and installing
  stand-alone libraries; see the @emph{Stand-alone Library Projects} section
! in the @emph{GNAT Project Manager} chapter of the @emph{GPRbuild User’s Guide}.
  To be a Stand-alone Library Project, in addition to the two attributes
  that make a project a Library Project (@code{Library_Name} and
  @code{Library_Dir}; see the @emph{Library Projects} section in the
! @emph{GNAT Project Manager} chapter of the @emph{GPRbuild User’s Guide}),
  the attribute @code{Library_Interface} must be defined.  For example:
  
  @example
*************** the object directory.
*** 3781,3792 ****
  Copy the @code{ALI} files of the interface to the library directory,
  add in this copy an indication that it is an interface to a SAL
  (i.e., add a word @code{SL} on the line in the @code{ALI} file that starts
! with letter 'P') and make the modified copy of the @code{ALI} file
  read-only.
  @end itemize
  
  Using SALs is not different from using other libraries
! (see @ref{74,,Using a library}).
  
  @node Creating a Stand-alone Library to be used in a non-Ada context,Restrictions in Stand-alone Libraries,Building a Stand-alone Library,Stand-alone Ada Libraries
  @anchor{gnat_ugn/the_gnat_compilation_model creating-a-stand-alone-library-to-be-used-in-a-non-ada-context}@anchor{7c}@anchor{gnat_ugn/the_gnat_compilation_model id44}@anchor{7d}
--- 3770,3781 ----
  Copy the @code{ALI} files of the interface to the library directory,
  add in this copy an indication that it is an interface to a SAL
  (i.e., add a word @code{SL} on the line in the @code{ALI} file that starts
! with letter ‘P’) and make the modified copy of the @code{ALI} file
  read-only.
  @end itemize
  
  Using SALs is not different from using other libraries
! (see @ref{75,,Using a library}).
  
  @node Creating a Stand-alone Library to be used in a non-Ada context,Restrictions in Stand-alone Libraries,Building a Stand-alone Library,Stand-alone Ada Libraries
  @anchor{gnat_ugn/the_gnat_compilation_model creating-a-stand-alone-library-to-be-used-in-a-non-ada-context}@anchor{7c}@anchor{gnat_ugn/the_gnat_compilation_model id44}@anchor{7d}
*************** package My_Package is
*** 3814,3820 ****
  end My_Package;
  @end example
  
! On the foreign language side, you must provide a 'foreign' view of the
  library interface; remember that it should contain elaboration routines in
  addition to interface subprograms.
  
--- 3803,3809 ----
  end My_Package;
  @end example
  
! On the foreign language side, you must provide a ‘foreign’ view of the
  library interface; remember that it should contain elaboration routines in
  addition to interface subprograms.
  
*************** experiments or debugging, and is not sup
*** 3956,3962 ****
  @geindex Conditional compilation
  
  @node Conditional Compilation,Mixed Language Programming,GNAT and Libraries,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model id47}@anchor{82}@anchor{gnat_ugn/the_gnat_compilation_model conditional-compilation}@anchor{2b}
  @section Conditional Compilation
  
  
--- 3945,3951 ----
  @geindex Conditional compilation
  
  @node Conditional Compilation,Mixed Language Programming,GNAT and Libraries,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model conditional-compilation}@anchor{2b}@anchor{gnat_ugn/the_gnat_compilation_model id47}@anchor{82}
  @section Conditional Compilation
  
  
*************** gnatprep preprocessor utility.
*** 3973,3979 ****
  @end menu
  
  @node Modeling Conditional Compilation in Ada,Preprocessing with gnatprep,,Conditional Compilation
! @anchor{gnat_ugn/the_gnat_compilation_model modeling-conditional-compilation-in-ada}@anchor{83}@anchor{gnat_ugn/the_gnat_compilation_model id48}@anchor{84}
  @subsection Modeling Conditional Compilation in Ada
  
  
--- 3962,3968 ----
  @end menu
  
  @node Modeling Conditional Compilation in Ada,Preprocessing with gnatprep,,Conditional Compilation
! @anchor{gnat_ugn/the_gnat_compilation_model id48}@anchor{83}@anchor{gnat_ugn/the_gnat_compilation_model modeling-conditional-compilation-in-ada}@anchor{84}
  @subsection Modeling Conditional Compilation in Ada
  
  
*************** the @code{-gnata} switch is often the mo
*** 4168,4174 ****
  the status of these pragmas.
  
  Note that a pragma is not a statement, so in contexts where a statement
! sequence is required, you can't just write a pragma on its own. You have
  to add a @code{null} statement.
  
  @example
--- 4157,4163 ----
  the status of these pragmas.
  
  Note that a pragma is not a statement, so in contexts where a statement
! sequence is required, you can’t just write a pragma on its own. You have
  to add a @code{null} statement.
  
  @example
*************** constant was introduced as @code{System.
*** 4246,4252 ****
  need to define this one yourself).
  
  @node Use of Alternative Implementations,Preprocessing,Conditionalizing Declarations,Modeling Conditional Compilation in Ada
! @anchor{gnat_ugn/the_gnat_compilation_model use-of-alternative-implementations}@anchor{8b}@anchor{gnat_ugn/the_gnat_compilation_model id52}@anchor{8c}
  @subsubsection Use of Alternative Implementations
  
  
--- 4235,4241 ----
  need to define this one yourself).
  
  @node Use of Alternative Implementations,Preprocessing,Conditionalizing Declarations,Modeling Conditional Compilation in Ada
! @anchor{gnat_ugn/the_gnat_compilation_model id52}@anchor{8b}@anchor{gnat_ugn/the_gnat_compilation_model use-of-alternative-implementations}@anchor{8c}
  @subsubsection Use of Alternative Implementations
  
  
*************** end if;
*** 4280,4286 ****
  
  where @code{Ada_2005} is a Boolean constant.
  
! But this won't work when @code{Ada_2005} is set to @code{False},
  since the @code{then} clause will be illegal for an Ada 95 compiler.
  (Recall that although such unreachable code would eventually be deleted
  by the compiler, it still needs to be legal.  If it uses features
--- 4269,4275 ----
  
  where @code{Ada_2005} is a Boolean constant.
  
! But this won’t work when @code{Ada_2005} is set to @code{False},
  since the @code{then} clause will be illegal for an Ada 95 compiler.
  (Recall that although such unreachable code would eventually be deleted
  by the compiler, it still needs to be legal.  If it uses features
*************** have two files
*** 4309,4315 ****
  
  and the build script renames the appropriate file to @code{file_queries-insert.adb} and then carries out the compilation.
  
! This can also be done with project files' naming schemes. For example:
  
  @example
  for body ("File_Queries.Insert") use "file_queries-insert-2005.ada";
--- 4298,4304 ----
  
  and the build script renames the appropriate file to @code{file_queries-insert.adb} and then carries out the compilation.
  
! This can also be done with project files’ naming schemes. For example:
  
  @example
  for body ("File_Queries.Insert") use "file_queries-insert-2005.ada";
*************** VMS-compatible AST handling. The GNAT bu
*** 4366,4376 ****
  and operating system, and automatically selects the right version,
  renaming it if necessary to @code{s-asthan.adb} before the run-time build.
  
! Another style for arranging alternative implementations is through Ada's
  access-to-subprogram facility.
  In case some functionality is to be conditionally included,
  you can declare an access-to-procedure variable @code{Ref} that is initialized
! to designate a 'do nothing' procedure, and then invoke @code{Ref.all}
  when appropriate.
  In some library package, set @code{Ref} to @code{Proc'Access} for some
  procedure @code{Proc} that performs the relevant processing.
--- 4355,4365 ----
  and operating system, and automatically selects the right version,
  renaming it if necessary to @code{s-asthan.adb} before the run-time build.
  
! Another style for arranging alternative implementations is through Ada’s
  access-to-subprogram facility.
  In case some functionality is to be conditionally included,
  you can declare an access-to-procedure variable @code{Ref} that is initialized
! to designate a ‘do nothing’ procedure, and then invoke @code{Ref.all}
  when appropriate.
  In some library package, set @code{Ref} to @code{Proc'Access} for some
  procedure @code{Proc} that performs the relevant processing.
*************** The same idea can also be implemented us
*** 4380,4386 ****
  calls.
  
  @node Preprocessing,,Use of Alternative Implementations,Modeling Conditional Compilation in Ada
! @anchor{gnat_ugn/the_gnat_compilation_model preprocessing}@anchor{8d}@anchor{gnat_ugn/the_gnat_compilation_model id53}@anchor{8e}
  @subsubsection Preprocessing
  
  
--- 4369,4375 ----
  calls.
  
  @node Preprocessing,,Use of Alternative Implementations,Modeling Conditional Compilation in Ada
! @anchor{gnat_ugn/the_gnat_compilation_model id53}@anchor{8d}@anchor{gnat_ugn/the_gnat_compilation_model preprocessing}@anchor{8e}
  @subsubsection Preprocessing
  
  
*************** For more details on this approach, see @
*** 4434,4440 ****
  
  @geindex Preprocessing (gnatprep)
  
! This section discusses how to use GNAT's @code{gnatprep} utility for simple
  preprocessing.
  Although designed for use with GNAT, @code{gnatprep} does not depend on any
  special GNAT features.
--- 4423,4429 ----
  
  @geindex Preprocessing (gnatprep)
  
! This section discusses how to use GNAT’s @code{gnatprep} utility for simple
  preprocessing.
  Although designed for use with GNAT, @code{gnatprep} does not depend on any
  special GNAT features.
*************** normal Ada (case-insensitive) rules for
*** 4461,4467 ****
  all characters need to be in the ASCII set (no accented letters).
  
  @node Using gnatprep,Switches for gnatprep,Preprocessing Symbols,Preprocessing with gnatprep
! @anchor{gnat_ugn/the_gnat_compilation_model using-gnatprep}@anchor{94}@anchor{gnat_ugn/the_gnat_compilation_model id56}@anchor{95}
  @subsubsection Using @code{gnatprep}
  
  
--- 4450,4456 ----
  all characters need to be in the ASCII set (no accented letters).
  
  @node Using gnatprep,Switches for gnatprep,Preprocessing Symbols,Preprocessing with gnatprep
! @anchor{gnat_ugn/the_gnat_compilation_model id56}@anchor{94}@anchor{gnat_ugn/the_gnat_compilation_model using-gnatprep}@anchor{95}
  @subsubsection Using @code{gnatprep}
  
  
*************** optional, and can be replaced by the use
*** 4519,4525 ****
  @end itemize
  
  @node Switches for gnatprep,Form of Definitions File,Using gnatprep,Preprocessing with gnatprep
! @anchor{gnat_ugn/the_gnat_compilation_model switches-for-gnatprep}@anchor{96}@anchor{gnat_ugn/the_gnat_compilation_model id57}@anchor{97}
  @subsubsection Switches for @code{gnatprep}
  
  
--- 4508,4514 ----
  @end itemize
  
  @node Switches for gnatprep,Form of Definitions File,Using gnatprep,Preprocessing with gnatprep
! @anchor{gnat_ugn/the_gnat_compilation_model id57}@anchor{96}@anchor{gnat_ugn/the_gnat_compilation_model switches-for-gnatprep}@anchor{97}
  @subsubsection Switches for @code{gnatprep}
  
  
*************** the usual @code{--},
*** 4700,4706 ****
  and comments may be added to the definitions lines.
  
  @node Form of Input Text for gnatprep,,Form of Definitions File,Preprocessing with gnatprep
! @anchor{gnat_ugn/the_gnat_compilation_model id59}@anchor{9a}@anchor{gnat_ugn/the_gnat_compilation_model form-of-input-text-for-gnatprep}@anchor{9b}
  @subsubsection Form of Input Text for @code{gnatprep}
  
  
--- 4689,4695 ----
  and comments may be added to the definitions lines.
  
  @node Form of Input Text for gnatprep,,Form of Definitions File,Preprocessing with gnatprep
! @anchor{gnat_ugn/the_gnat_compilation_model form-of-input-text-for-gnatprep}@anchor{9a}@anchor{gnat_ugn/the_gnat_compilation_model id59}@anchor{9b}
  @subsubsection Form of Input Text for @code{gnatprep}
  
  
*************** In this example, <expression> is defined
*** 4742,4749 ****
  <expression> ::=  ( <expression> )
  @end example
  
! Note the following restriction: it is not allowed to have "and" or "or"
! following "not" in the same expression without parentheses. For example, this
  is not allowed:
  
  @example
--- 4731,4738 ----
  <expression> ::=  ( <expression> )
  @end example
  
! Note the following restriction: it is not allowed to have “and” or “or”
! following “not” in the same expression without parentheses. For example, this
  is not allowed:
  
  @example
*************** literal integer as defined in the Ada Re
*** 4769,4775 ****
  2#11#. The symbol value must also be a non negative integer. Integer values
  in the range 0 .. 2**31-1 are supported.
  
! The test (<expression> ::= <symbol>'Defined) is true only if
  the symbol has been defined in the definition file or by a @code{-D}
  switch on the command line. Otherwise, the test is false.
  
--- 4758,4764 ----
  2#11#. The symbol value must also be a non negative integer. Integer values
  in the range 0 .. 2**31-1 are supported.
  
! The test (<expression> ::= <symbol>’Defined) is true only if
  the symbol has been defined in the definition file or by a @code{-D}
  switch on the command line. Otherwise, the test is false.
  
*************** or @code{False}.
*** 4785,4792 ****
  
  The use of the @code{not} operator inverts the sense of this logical test.
  The @code{not} operator cannot be combined with the @code{or} or @code{and}
! operators, without parentheses. For example, "if not X or Y then" is not
! allowed, but "if (not X) or Y then" and "if not (X or Y) then" are.
  
  The @code{then} keyword is optional as shown
  
--- 4774,4781 ----
  
  The use of the @code{not} operator inverts the sense of this logical test.
  The @code{not} operator cannot be combined with the @code{or} or @code{and}
! operators, without parentheses. For example, “if not X or Y then” is not
! allowed, but “if (not X) or Y then” and “if not (X or Y) then” are.
  
  The @code{then} keyword is optional as shown
  
*************** that relate to integrated preprocessing.
*** 4906,4912 ****
  This switch specifies the file name (without directory
  information) of the preprocessor data file. Either place this file
  in one of the source directories, or, when using project
! files, reference the project file's directory via the
  @code{project_name'Project_Dir} project attribute; e.g:
  
  @quotation
--- 4895,4901 ----
  This switch specifies the file name (without directory
  information) of the preprocessor data file. Either place this file
  in one of the source directories, or, when using project
! files, reference the project file’s directory via the
  @code{project_name'Project_Dir} project attribute; e.g:
  
  @quotation
*************** preprocessing.
*** 4932,4938 ****
  Empty lines and comments (using Ada syntax) are also permitted, with no
  semantic effect.
  
! Here's an example of a preprocessor data file:
  
  @quotation
  
--- 4921,4927 ----
  Empty lines and comments (using Ada syntax) are also permitted, with no
  semantic effect.
  
! Here’s an example of a preprocessor data file:
  
  @quotation
  
*************** A preprocessor control line has the foll
*** 4971,4977 ****
  @end quotation
  
  Thus  each preprocessor control line starts with either a literal string or
! the character '*':
  
  
  @itemize *
--- 4960,4966 ----
  @end quotation
  
  Thus  each preprocessor control line starts with either a literal string or
! the character ‘*’:
  
  
  @itemize *
*************** A literal string is the file name (witho
*** 4981,4996 ****
  file that will be input to the preprocessor.
  
  @item 
! The character '*' is a wild-card indicator; the additional parameters on the line
  indicate the preprocessing for all the sources
  that are not specified explicitly on other lines (the order of the lines is not
  significant).
  @end itemize
  
  It is an error to have two lines with the same file name or two
! lines starting with the character '*'.
  
! After the file name or '*', an optional literal string specifies the name of
  the definition file to be used for preprocessing
  (@ref{98,,Form of Definitions File}). The definition files are found by the
  compiler in one of the source directories. In some cases, when compiling
--- 4970,4985 ----
  file that will be input to the preprocessor.
  
  @item 
! The character ‘*’ is a wild-card indicator; the additional parameters on the line
  indicate the preprocessing for all the sources
  that are not specified explicitly on other lines (the order of the lines is not
  significant).
  @end itemize
  
  It is an error to have two lines with the same file name or two
! lines starting with the character ‘*’.
  
! After the file name or ‘*’, an optional literal string specifies the name of
  the definition file to be used for preprocessing
  (@ref{98,,Form of Definitions File}). The definition files are found by the
  compiler in one of the source directories. In some cases, when compiling
*************** it cancels the effect of @code{-c}.
*** 5015,5021 ****
  
  Causes both preprocessor lines and the lines deleted
  by preprocessing to be retained as comments marked
! with the special string '@cite{--!}'.
  
  @item @code{-D@emph{symbol}=@emph{new_value}}
  
--- 5004,5010 ----
  
  Causes both preprocessor lines and the lines deleted
  by preprocessing to be retained as comments marked
! with the special string ‘@cite{–!}’.
  
  @item @code{-D@emph{symbol}=@emph{new_value}}
  
*************** the output file will be @code{foo.adb.pr
*** 5084,5090 ****
  @end table
  
  @node Mixed Language Programming,GNAT and Other Compilation Models,Conditional Compilation,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model mixed-language-programming}@anchor{2c}@anchor{gnat_ugn/the_gnat_compilation_model id61}@anchor{9d}
  @section Mixed Language Programming
  
  
--- 5073,5079 ----
  @end table
  
  @node Mixed Language Programming,GNAT and Other Compilation Models,Conditional Compilation,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model id61}@anchor{9d}@anchor{gnat_ugn/the_gnat_compilation_model mixed-language-programming}@anchor{2c}
  @section Mixed Language Programming
  
  
*************** with a focus on combining Ada with C or
*** 5103,5115 ****
  @end menu
  
  @node Interfacing to C,Calling Conventions,,Mixed Language Programming
! @anchor{gnat_ugn/the_gnat_compilation_model interfacing-to-c}@anchor{9e}@anchor{gnat_ugn/the_gnat_compilation_model id62}@anchor{9f}
  @subsection Interfacing to C
  
  
  Interfacing Ada with a foreign language such as C involves using
  compiler directives to import and/or export entity definitions in each
! language -- using @code{extern} statements in C, for instance, and the
  @code{Import}, @code{Export}, and @code{Convention} pragmas in Ada.
  A full treatment of these topics is provided in Appendix B, section 1
  of the Ada Reference Manual.
--- 5092,5104 ----
  @end menu
  
  @node Interfacing to C,Calling Conventions,,Mixed Language Programming
! @anchor{gnat_ugn/the_gnat_compilation_model id62}@anchor{9e}@anchor{gnat_ugn/the_gnat_compilation_model interfacing-to-c}@anchor{9f}
  @subsection Interfacing to C
  
  
  Interfacing Ada with a foreign language such as C involves using
  compiler directives to import and/or export entity definitions in each
! language – using @code{extern} statements in C, for instance, and the
  @code{Import}, @code{Export}, and @code{Convention} pragmas in Ada.
  A full treatment of these topics is provided in Appendix B, section 1
  of the Ada Reference Manual.
*************** end Unit2;
*** 5284,5290 ****
  @end example
  
  The build procedure for this application is similar to the last
! example's:
  
  
  @itemize *
--- 5273,5279 ----
  @end example
  
  The build procedure for this application is similar to the last
! example’s:
  
  
  @itemize *
*************** in section B.4 of the Ada Reference Manu
*** 5437,5443 ****
  Data will be passed according to the conventions described
  in section B.3 of the Ada Reference Manual.
  
! A note on interfacing to a C 'varargs' function:
  
  @quotation
  
--- 5426,5432 ----
  Data will be passed according to the conventions described
  in section B.3 of the Ada Reference Manual.
  
! A note on interfacing to a C ‘varargs’ function:
  
  @quotation
  
*************** The return type must be the same as the
*** 5543,5549 ****
  of this type can only be 8, 16, 32, or 64.
  
  @item 
! Binary arithmetic operators: '+', '-', '*', '/'.
  The corresponding operator declaration must have parameters and result type
  that have the same root numeric type (for example, all three are long_float
  types). This simplifies the definition of operations that use type checking
--- 5532,5538 ----
  of this type can only be 8, 16, 32, or 64.
  
  @item 
! Binary arithmetic operators: ‘+’, ‘-‘, ‘*’, ‘/’.
  The corresponding operator declaration must have parameters and result type
  that have the same root numeric type (for example, all three are long_float
  types). This simplifies the definition of operations that use type checking
*************** pragma Import (Intrinsic, builtin_sqrt,
*** 5580,5586 ****
  @end example
  
  Most of the GCC builtins are accessible this way, and as for other
! import conventions (e.g. C), it is the user's responsibility to ensure
  that the Ada subprogram profile matches the underlying builtin
  expectations.
  @end itemize
--- 5569,5575 ----
  @end example
  
  Most of the GCC builtins are accessible this way, and as for other
! import conventions (e.g. C), it is the user’s responsibility to ensure
  that the Ada subprogram profile matches the underlying builtin
  expectations.
  @end itemize
*************** identifier (for example in an @code{Impo
*** 5654,5660 ****
  meaning as Fortran.
  
  @node Building Mixed Ada and C++ Programs,Generating Ada Bindings for C and C++ headers,Calling Conventions,Mixed Language Programming
! @anchor{gnat_ugn/the_gnat_compilation_model id64}@anchor{a3}@anchor{gnat_ugn/the_gnat_compilation_model building-mixed-ada-and-c-programs}@anchor{a4}
  @subsection Building Mixed Ada and C++ Programs
  
  
--- 5643,5649 ----
  meaning as Fortran.
  
  @node Building Mixed Ada and C++ Programs,Generating Ada Bindings for C and C++ headers,Calling Conventions,Mixed Language Programming
! @anchor{gnat_ugn/the_gnat_compilation_model building-mixed-ada-and-c-programs}@anchor{a3}@anchor{gnat_ugn/the_gnat_compilation_model id64}@anchor{a4}
  @subsection Building Mixed Ada and C++ Programs
  
  
*************** challenge.  This section gives a few hin
*** 5678,5684 ****
  
  GNAT supports interfacing with the G++ compiler (or any C++ compiler
  generating code that is compatible with the G++ Application Binary
! Interface ---see @indicateurl{http://www.codesourcery.com/archives/cxx-abi}).
  
  Interfacing can be done at 3 levels: simple data, subprograms, and
  classes. In the first two cases, GNAT offers a specific @code{Convention C_Plus_Plus}
--- 5667,5673 ----
  
  GNAT supports interfacing with the G++ compiler (or any C++ compiler
  generating code that is compatible with the G++ Application Binary
! Interface —see @indicateurl{http://www.codesourcery.com/archives/cxx-abi}).
  
  Interfacing can be done at 3 levels: simple data, subprograms, and
  classes. In the first two cases, GNAT offers a specific @code{Convention C_Plus_Plus}
*************** important to note that environment varia
*** 5752,5758 ****
  at the same time and may make one of the two compilers operate
  improperly if set during invocation of the wrong compiler.  It is also
  very important that the linker uses the proper @code{libgcc.a} GCC
! library -- that is, the one from the C++ compiler installation. The
  implicit link command as suggested in the @code{gnatmake} command
  from the former example can be replaced by an explicit link command with
  the full-verbosity option in order to verify which library is used:
--- 5741,5747 ----
  at the same time and may make one of the two compilers operate
  improperly if set during invocation of the wrong compiler.  It is also
  very important that the linker uses the proper @code{libgcc.a} GCC
! library – that is, the one from the C++ compiler installation. The
  implicit link command as suggested in the @code{gnatmake} command
  from the former example can be replaced by an explicit link command with
  the full-verbosity option in order to verify which library is used:
*************** $ gnatlink ada_unit file1.o file2.o --LI
*** 5794,5800 ****
  
  where CC is the name of the non-GNU C++ compiler.
  
! If the "zero cost" exception mechanism is used, and the platform
  supports automatic registration of exception tables (e.g., Solaris),
  paths to more objects are required:
  
--- 5783,5789 ----
  
  where CC is the name of the non-GNU C++ compiler.
  
! If the “zero cost” exception mechanism is used, and the platform
  supports automatic registration of exception tables (e.g., Solaris),
  paths to more objects are required:
  
*************** gcc -print-file-name=crtend.o
*** 5807,5814 ****
  $ gnatlink ada_unit file1.o file2.o --LINK=./my_script
  @end example
  
! If the "zero cost exception" mechanism is used, and the platform
! doesn't support automatic registration of exception tables (e.g., HP-UX
  or AIX), the simple approach described above will not work and
  a pre-linking phase using GNAT will be necessary.
  @end itemize
--- 5796,5803 ----
  $ gnatlink ada_unit file1.o file2.o --LINK=./my_script
  @end example
  
! If the “zero cost exception” mechanism is used, and the platform
! doesn’t support automatic registration of exception tables (e.g., HP-UX
  or AIX), the simple approach described above will not work and
  a pre-linking phase using GNAT will be necessary.
  @end itemize
*************** which has a large knowledge base and kno
*** 5818,5824 ****
  together automatically in most cases.
  
  @node A Simple Example,Interfacing with C++ constructors,Linking a Mixed C++ & Ada Program,Building Mixed Ada and C++ Programs
! @anchor{gnat_ugn/the_gnat_compilation_model id67}@anchor{aa}@anchor{gnat_ugn/the_gnat_compilation_model a-simple-example}@anchor{ab}
  @subsubsection A Simple Example
  
  
--- 5807,5813 ----
  together automatically in most cases.
  
  @node A Simple Example,Interfacing with C++ constructors,Linking a Mixed C++ & Ada Program,Building Mixed Ada and C++ Programs
! @anchor{gnat_ugn/the_gnat_compilation_model a-simple-example}@anchor{aa}@anchor{gnat_ugn/the_gnat_compilation_model id67}@anchor{ab}
  @subsubsection A Simple Example
  
  
*************** by means of a limited aggregate. Any fur
*** 6144,6150 ****
  the constructor can be placed inside the construct.
  
  @node Interfacing with C++ at the Class Level,,Interfacing with C++ constructors,Building Mixed Ada and C++ Programs
! @anchor{gnat_ugn/the_gnat_compilation_model interfacing-with-c-at-the-class-level}@anchor{ae}@anchor{gnat_ugn/the_gnat_compilation_model id69}@anchor{af}
  @subsubsection Interfacing with C++ at the Class Level
  
  
--- 6133,6139 ----
  the constructor can be placed inside the construct.
  
  @node Interfacing with C++ at the Class Level,,Interfacing with C++ constructors,Building Mixed Ada and C++ Programs
! @anchor{gnat_ugn/the_gnat_compilation_model id69}@anchor{af}@anchor{gnat_ugn/the_gnat_compilation_model interfacing-with-c-at-the-class-level}@anchor{ae}
  @subsubsection Interfacing with C++ at the Class Level
  
  
*************** int main ()
*** 6390,6396 ****
  @end example
  
  @node Generating Ada Bindings for C and C++ headers,Generating C Headers for Ada Specifications,Building Mixed Ada and C++ Programs,Mixed Language Programming
! @anchor{gnat_ugn/the_gnat_compilation_model id70}@anchor{b0}@anchor{gnat_ugn/the_gnat_compilation_model generating-ada-bindings-for-c-and-c-headers}@anchor{a7}
  @subsection Generating Ada Bindings for C and C++ headers
  
  
--- 6379,6385 ----
  @end example
  
  @node Generating Ada Bindings for C and C++ headers,Generating C Headers for Ada Specifications,Building Mixed Ada and C++ Programs,Mixed Language Programming
! @anchor{gnat_ugn/the_gnat_compilation_model generating-ada-bindings-for-c-and-c-headers}@anchor{a7}@anchor{gnat_ugn/the_gnat_compilation_model id70}@anchor{b0}
  @subsection Generating Ada Bindings for C and C++ headers
  
  
*************** as comments, to be completed manually if
*** 6422,6431 ****
  some extensions (e.g. vector types) are not supported
  
  @item 
! pointers to pointers or complex structures are mapped to System.Address
  
  @item 
! identifiers with identical name (except casing) will generate compilation
  errors (e.g. @code{shm_get} vs @code{SHM_GET}).
  @end itemize
  
--- 6411,6420 ----
  some extensions (e.g. vector types) are not supported
  
  @item 
! pointers to pointers are mapped to System.Address
  
  @item 
! identifiers with identical name (except casing) may generate compilation
  errors (e.g. @code{shm_get} vs @code{SHM_GET}).
  @end itemize
  
*************** spec files for the header files specifie
*** 6451,6465 ****
  header files needed by these files transitively. For example:
  
  @example
! $ g++ -c -fdump-ada-spec -C /usr/include/time.h
  $ gcc -c *.ads
  @end example
  
  will generate, under GNU/Linux, the following files: @code{time_h.ads},
  @code{bits_time_h.ads}, @code{stddef_h.ads}, @code{bits_types_h.ads} which
  correspond to the files @code{/usr/include/time.h},
! @code{/usr/include/bits/time.h}, etc..., and will then compile these Ada specs
! in Ada 2005 mode.
  
  The @code{-C} switch tells @code{gcc} to extract comments from headers,
  and will attempt to generate corresponding Ada comments.
--- 6440,6457 ----
  header files needed by these files transitively. For example:
  
  @example
! $ gcc -c -fdump-ada-spec -C /usr/include/time.h
  $ gcc -c *.ads
  @end example
  
  will generate, under GNU/Linux, the following files: @code{time_h.ads},
  @code{bits_time_h.ads}, @code{stddef_h.ads}, @code{bits_types_h.ads} which
  correspond to the files @code{/usr/include/time.h},
! @code{/usr/include/bits/time.h}, etc…, and then compile these Ada specs.
! That is to say, the name of the Ada specs is in keeping with the relative path
! under @code{/usr/include/} of the header files. This behavior is specific to
! paths ending with @code{/include/}; in all the other cases, the name of the
! Ada specs is derived from the simple name of the header files instead.
  
  The @code{-C} switch tells @code{gcc} to extract comments from headers,
  and will attempt to generate corresponding Ada comments.
*************** can use instead the @code{-fdump-ada-spe
*** 6470,6515 ****
  You can optionally specify a parent unit, of which all generated units will
  be children, using @code{-fada-spec-parent=@emph{unit}}.
  
! Note that we recommend when possible to use the @emph{g++} driver to
! generate bindings, even for most C headers, since this will in general
! generate better Ada specs. For generating bindings for C++ headers, it is
! mandatory to use the @emph{g++} command, or @emph{gcc -x c++} which
! is equivalent in this case. If @emph{g++} cannot work on your C headers
! because of incompatibilities between C and C++, then you can fallback to
! @code{gcc} instead.
! 
! For an example of better bindings generated from the C++ front-end,
! the name of the parameters (when available) are actually ignored by the C
! front-end. Consider the following C header:
! 
! @example
! extern void foo (int variable);
! @end example
! 
! with the C front-end, @code{variable} is ignored, and the above is handled as:
! 
! @example
! extern void foo (int);
! @end example
! 
! generating a generic:
! 
! @example
! procedure foo (param1 : int);
! @end example
! 
! with the C++ front-end, the name is available, and we generate:
! 
! @example
! procedure foo (variable : int);
! @end example
  
  In some cases, the generated bindings will be more complete or more meaningful
  when defining some macros, which you can do via the @code{-D} switch. This
  is for example the case with @code{Xlib.h} under GNU/Linux:
  
  @example
! $ g++ -c -fdump-ada-spec -DXLIB_ILLEGAL_ACCESS -C /usr/include/X11/Xlib.h
  @end example
  
  The above will generate more complete bindings than a straight call without
--- 6462,6476 ----
  You can optionally specify a parent unit, of which all generated units will
  be children, using @code{-fada-spec-parent=@emph{unit}}.
  
! The simple @code{gcc`}-based command works only for C headers. For C++ headers
! you need to use either the @code{g++} command or the combination @code{gcc -x c++`}.
  
  In some cases, the generated bindings will be more complete or more meaningful
  when defining some macros, which you can do via the @code{-D} switch. This
  is for example the case with @code{Xlib.h} under GNU/Linux:
  
  @example
! $ gcc -c -fdump-ada-spec -DXLIB_ILLEGAL_ACCESS -C /usr/include/X11/Xlib.h
  @end example
  
  The above will generate more complete bindings than a straight call without
*************** lines in e.g. @code{readline1.h}:
*** 6531,6541 ****
  and then generate Ada bindings from this file:
  
  @example
! $ g++ -c -fdump-ada-spec readline1.h
  @end example
  
  @node Generating Bindings for C++ Headers,Switches,Running the Binding Generator,Generating Ada Bindings for C and C++ headers
! @anchor{gnat_ugn/the_gnat_compilation_model id72}@anchor{b3}@anchor{gnat_ugn/the_gnat_compilation_model generating-bindings-for-c-headers}@anchor{b4}
  @subsubsection Generating Bindings for C++ Headers
  
  
--- 6492,6502 ----
  and then generate Ada bindings from this file:
  
  @example
! $ gcc -c -fdump-ada-spec readline1.h
  @end example
  
  @node Generating Bindings for C++ Headers,Switches,Running the Binding Generator,Generating Ada Bindings for C and C++ headers
! @anchor{gnat_ugn/the_gnat_compilation_model generating-bindings-for-c-headers}@anchor{b3}@anchor{gnat_ugn/the_gnat_compilation_model id72}@anchor{b4}
  @subsubsection Generating Bindings for C++ Headers
  
  
*************** You can then @code{include} @code{pack1.
*** 6795,6806 ****
  call subprograms, reference objects, and constants.
  
  @node GNAT and Other Compilation Models,Using GNAT Files with External Tools,Mixed Language Programming,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model id74}@anchor{ba}@anchor{gnat_ugn/the_gnat_compilation_model gnat-and-other-compilation-models}@anchor{2d}
  @section GNAT and Other Compilation Models
  
  
  This section compares the GNAT model with the approaches taken in
! other environents, first the C/C++ model and then the mechanism that
  has been used in other Ada systems, in particular those traditionally
  used for Ada 83.
  
--- 6756,6767 ----
  call subprograms, reference objects, and constants.
  
  @node GNAT and Other Compilation Models,Using GNAT Files with External Tools,Mixed Language Programming,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model gnat-and-other-compilation-models}@anchor{2d}@anchor{gnat_ugn/the_gnat_compilation_model id74}@anchor{ba}
  @section GNAT and Other Compilation Models
  
  
  This section compares the GNAT model with the approaches taken in
! other environments, first the C/C++ model and then the mechanism that
  has been used in other Ada systems, in particular those traditionally
  used for Ada 83.
  
*************** used for Ada 83.
*** 6817,6823 ****
  
  The GNAT model of compilation is close to the C and C++ models. You can
  think of Ada specs as corresponding to header files in C. As in C, you
! don't need to compile specs; they are compiled when they are used. The
  Ada @emph{with} is similar in effect to the @code{#include} of a C
  header.
  
--- 6778,6784 ----
  
  The GNAT model of compilation is close to the C and C++ models. You can
  think of Ada specs as corresponding to header files in C. As in C, you
! don’t need to compile specs; they are compiled when they are used. The
  Ada @emph{with} is similar in effect to the @code{#include} of a C
  header.
  
*************** model, as described in the Ada Reference
*** 6855,6861 ****
  
  @geindex GNAT library
  
! In GNAT, there is no 'library' in the normal sense. Instead, the set of
  source files themselves acts as the library. Compiling Ada programs does
  not generate any centralized information, but rather an object file and
  a ALI file, which are of interest only to the binder and linker.
--- 6816,6822 ----
  
  @geindex GNAT library
  
! In GNAT, there is no ‘library’ in the normal sense. Instead, the set of
  source files themselves acts as the library. Compiling Ada programs does
  not generate any centralized information, but rather an object file and
  a ALI file, which are of interest only to the binder and linker.
*************** of rules saying what source files must b
*** 6913,6919 ****
  compiled.
  
  @node Using GNAT Files with External Tools,,GNAT and Other Compilation Models,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model using-gnat-files-with-external-tools}@anchor{2e}@anchor{gnat_ugn/the_gnat_compilation_model id77}@anchor{bf}
  @section Using GNAT Files with External Tools
  
  
--- 6874,6880 ----
  compiled.
  
  @node Using GNAT Files with External Tools,,GNAT and Other Compilation Models,The GNAT Compilation Model
! @anchor{gnat_ugn/the_gnat_compilation_model id77}@anchor{bf}@anchor{gnat_ugn/the_gnat_compilation_model using-gnat-files-with-external-tools}@anchor{2e}
  @section Using GNAT Files with External Tools
  
  
*************** used with tools designed for other langu
*** 6927,6933 ****
  @end menu
  
  @node Using Other Utility Programs with GNAT,The External Symbol Naming Scheme of GNAT,,Using GNAT Files with External Tools
! @anchor{gnat_ugn/the_gnat_compilation_model using-other-utility-programs-with-gnat}@anchor{c0}@anchor{gnat_ugn/the_gnat_compilation_model id78}@anchor{c1}
  @subsection Using Other Utility Programs with GNAT
  
  
--- 6888,6894 ----
  @end menu
  
  @node Using Other Utility Programs with GNAT,The External Symbol Naming Scheme of GNAT,,Using GNAT Files with External Tools
! @anchor{gnat_ugn/the_gnat_compilation_model id78}@anchor{c0}@anchor{gnat_ugn/the_gnat_compilation_model using-other-utility-programs-with-gnat}@anchor{c1}
  @subsection Using Other Utility Programs with GNAT
  
  
*************** gprof (a profiling program), gdb (the FS
*** 6942,6948 ****
  as Purify.
  
  @node The External Symbol Naming Scheme of GNAT,,Using Other Utility Programs with GNAT,Using GNAT Files with External Tools
! @anchor{gnat_ugn/the_gnat_compilation_model the-external-symbol-naming-scheme-of-gnat}@anchor{c2}@anchor{gnat_ugn/the_gnat_compilation_model id79}@anchor{c3}
  @subsection The External Symbol Naming Scheme of GNAT
  
  
--- 6903,6909 ----
  as Purify.
  
  @node The External Symbol Naming Scheme of GNAT,,Using Other Utility Programs with GNAT,Using GNAT Files with External Tools
! @anchor{gnat_ugn/the_gnat_compilation_model id79}@anchor{c2}@anchor{gnat_ugn/the_gnat_compilation_model the-external-symbol-naming-scheme-of-gnat}@anchor{c3}
  @subsection The External Symbol Naming Scheme of GNAT
  
  
*************** the external name of this procedure will
*** 7001,7007 ****
  @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit
  
  @node Building Executable Programs with GNAT,GNAT Utility Programs,The GNAT Compilation Model,Top
! @anchor{gnat_ugn/building_executable_programs_with_gnat building-executable-programs-with-gnat}@anchor{a}@anchor{gnat_ugn/building_executable_programs_with_gnat doc}@anchor{c4}@anchor{gnat_ugn/building_executable_programs_with_gnat id1}@anchor{c5}
  @chapter Building Executable Programs with GNAT
  
  
--- 6962,6968 ----
  @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit
  
  @node Building Executable Programs with GNAT,GNAT Utility Programs,The GNAT Compilation Model,Top
! @anchor{gnat_ugn/building_executable_programs_with_gnat doc}@anchor{c4}@anchor{gnat_ugn/building_executable_programs_with_gnat building-executable-programs-with-gnat}@anchor{a}@anchor{gnat_ugn/building_executable_programs_with_gnat id1}@anchor{c5}
  @chapter Building Executable Programs with GNAT
  
  
*************** in a GNAT context (see @ref{70,,Using th
*** 7032,7038 ****
  @end menu
  
  @node Building with gnatmake,Compiling with gcc,,Building Executable Programs with GNAT
! @anchor{gnat_ugn/building_executable_programs_with_gnat the-gnat-make-program-gnatmake}@anchor{c6}@anchor{gnat_ugn/building_executable_programs_with_gnat building-with-gnatmake}@anchor{ca}
  @section Building with @code{gnatmake}
  
  
--- 6993,6999 ----
  @end menu
  
  @node Building with gnatmake,Compiling with gcc,,Building Executable Programs with GNAT
! @anchor{gnat_ugn/building_executable_programs_with_gnat building-with-gnatmake}@anchor{ca}@anchor{gnat_ugn/building_executable_programs_with_gnat the-gnat-make-program-gnatmake}@anchor{c6}
  @section Building with @code{gnatmake}
  
  
*************** dependencies, they will always be tracke
*** 7081,7087 ****
  
  Note that for advanced forms of project structure, we recommend creating
  a project file as explained in the @emph{GNAT_Project_Manager} chapter in the
! @emph{GPRbuild User's Guide}, and using the
  @code{gprbuild} tool which supports building with project files and works similarly
  to @code{gnatmake}.
  
--- 7042,7048 ----
  
  Note that for advanced forms of project structure, we recommend creating
  a project file as explained in the @emph{GNAT_Project_Manager} chapter in the
! @emph{GPRbuild User’s Guide}, and using the
  @code{gprbuild} tool which supports building with project files and works similarly
  to @code{gnatmake}.
  
*************** to @code{gnatmake}.
*** 7096,7102 ****
  @end menu
  
  @node Running gnatmake,Switches for gnatmake,,Building with gnatmake
! @anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatmake}@anchor{cb}@anchor{gnat_ugn/building_executable_programs_with_gnat id2}@anchor{cc}
  @subsection Running @code{gnatmake}
  
  
--- 7057,7063 ----
  @end menu
  
  @node Running gnatmake,Switches for gnatmake,,Building with gnatmake
! @anchor{gnat_ugn/building_executable_programs_with_gnat id2}@anchor{cb}@anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatmake}@anchor{cc}
  @subsection Running @code{gnatmake}
  
  
*************** All @code{gnatmake} output (except when
*** 7131,7137 ****
  @code{-M} switch is sent to @code{stdout}.
  
  @node Switches for gnatmake,Mode Switches for gnatmake,Running gnatmake,Building with gnatmake
! @anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gnatmake}@anchor{cd}@anchor{gnat_ugn/building_executable_programs_with_gnat id3}@anchor{ce}
  @subsection Switches for @code{gnatmake}
  
  
--- 7092,7098 ----
  @code{-M} switch is sent to @code{stdout}.
  
  @node Switches for gnatmake,Mode Switches for gnatmake,Running gnatmake,Building with gnatmake
! @anchor{gnat_ugn/building_executable_programs_with_gnat id3}@anchor{cd}@anchor{gnat_ugn/building_executable_programs_with_gnat switches-for-gnatmake}@anchor{ce}
  @subsection Switches for @code{gnatmake}
  
  
*************** itself must not include any embedded spa
*** 7219,7225 ****
  @item @code{--create-map-file}
  
  When linking an executable, create a map file. The name of the map file
! has the same name as the executable with extension ".map".
  
  @item @code{--create-map-file=@emph{mapfile}}
  
--- 7180,7186 ----
  @item @code{--create-map-file}
  
  When linking an executable, create a map file. The name of the map file
! has the same name as the executable with extension “.map”.
  
  @item @code{--create-map-file=@emph{mapfile}}
  
*************** to process the project files, especially
*** 7267,7273 ****
  long time. If the source info file exists but cannot be parsed successfully,
  the Project Manager will attempt to recreate it. If the Project Manager fails
  to create the source info file, a message is issued, but gnatmake does not
! fail. @code{gnatmake} "trusts" the source info file. This means that
  if the source files have changed (addition, deletion, moving to a different
  source directory), then the source info file need to be deleted and recreated.
  @end table
--- 7228,7234 ----
  long time. If the source info file exists but cannot be parsed successfully,
  the Project Manager will attempt to recreate it. If the Project Manager fails
  to create the source info file, a message is issued, but gnatmake does not
! fail. @code{gnatmake} “trusts” the source info file. This means that
  if the source files have changed (addition, deletion, moving to a different
  source directory), then the source info file need to be deleted and recreated.
  @end table
*************** the objects.
*** 7347,7353 ****
  Use a temporary mapping file. A mapping file is a way to communicate
  to the compiler two mappings: from unit names to file names (without
  any directory information) and from file names to path names (with
! full directory information). A mapping file can make the compiler's
  file searches faster, especially if there are many source directories,
  or the sources are read over a slow network connection. If
  @code{-P} is used, a mapping file is always used, so
--- 7308,7314 ----
  Use a temporary mapping file. A mapping file is a way to communicate
  to the compiler two mappings: from unit names to file names (without
  any directory information) and from file names to path names (with
! full directory information). A mapping file can make the compiler’s
  file searches faster, especially if there are many source directories,
  or the sources are read over a slow network connection. If
  @code{-P} is used, a mapping file is always used, so
*************** directories, but is not needed in other
*** 7434,7440 ****
  @geindex naming scheme
  
  This also assumes that no directory matches the naming scheme for files (for
! instance that you do not have a directory called "sources.ads" when using the
  default GNAT naming scheme).
  
  When you do not have to use this switch (i.e., by default), gnatmake is able to
--- 7395,7401 ----
  @geindex naming scheme
  
  This also assumes that no directory matches the naming scheme for files (for
! instance that you do not have a directory called “sources.ads” when using the
  default GNAT naming scheme).
  
  When you do not have to use this switch (i.e., by default), gnatmake is able to
*************** instead of standard error.
*** 7463,7469 ****
  @item @code{-f}
  
  Force recompilations. Recompile all sources, even though some object
! files may be up to date, but don't recompile predefined or GNAT internal
  files or locked files (files with a write-protected ALI file),
  unless the @code{-a} switch is also specified.
  @end table
--- 7424,7430 ----
  @item @code{-f}
  
  Force recompilations. Recompile all sources, even though some object
! files may be up to date, but don’t recompile predefined or GNAT internal
  files or locked files (files with a write-protected ALI file),
  unless the @code{-a} switch is also specified.
  @end table
*************** rerun the make process with n set to 1 t
*** 7541,7547 ****
  @item @code{-k}
  
  Keep going. Continue as much as possible after a compilation error. To
! ease the programmer's task in case of compilation errors, the list of
  sources for which the compile fails is given when @code{gnatmake}
  terminates.
  
--- 7502,7508 ----
  @item @code{-k}
  
  Keep going. Continue as much as possible after a compilation error. To
! ease the programmer’s task in case of compilation errors, the list of
  sources for which the compile fails is given when @code{gnatmake}
  terminates.
  
*************** are never reported.
*** 7625,7631 ****
  
  @item @code{-n}
  
! Don't compile, bind, or link. Checks if all objects are up to date.
  If they are not, the full name of the first file that needs to be
  recompiled is printed.
  Repeated use of this option, followed by compiling the indicated source
--- 7586,7592 ----
  
  @item @code{-n}
  
! Don’t compile, bind, or link. Checks if all objects are up to date.
  If they are not, the full name of the first file that needs to be
  recompiled is printed.
  Repeated use of this option, followed by compiling the indicated source
*************** Quiet. When this flag is not set, the co
*** 7692,7698 ****
  Recompile if compiler switches have changed since last compilation.
  All compiler switches but -I and -o are taken into account in the
  following way:
! orders between different 'first letter' switches are ignored, but
  orders between same switches are taken into account. For example,
  @code{-O -O2} is different than @code{-O2 -O}, but @code{-g -O}
  is equivalent to @code{-O -g}.
--- 7653,7659 ----
  Recompile if compiler switches have changed since last compilation.
  All compiler switches but -I and -o are taken into account in the
  following way:
! orders between different ‘first letter’ switches are ignored, but
  orders between same switches are taken into account. For example,
  @code{-O -O2} is different than @code{-O2 -O}, but @code{-g -O}
  is equivalent to @code{-O -g}.
*************** that the debugging information may be ou
*** 8096,8107 ****
  @end itemize
  
  @node How gnatmake Works,Examples of gnatmake Usage,Notes on the Command Line,Building with gnatmake
! @anchor{gnat_ugn/building_executable_programs_with_gnat id6}@anchor{d4}@anchor{gnat_ugn/building_executable_programs_with_gnat how-gnatmake-works}@anchor{d5}
  @subsection How @code{gnatmake} Works
  
  
  Generally @code{gnatmake} automatically performs all necessary
! recompilations and you don't need to worry about how it works. However,
  it may be useful to have some basic understanding of the @code{gnatmake}
  approach and in particular to understand how it uses the results of
  previous compilations without incorrectly depending on them.
--- 8057,8068 ----
  @end itemize
  
  @node How gnatmake Works,Examples of gnatmake Usage,Notes on the Command Line,Building with gnatmake
! @anchor{gnat_ugn/building_executable_programs_with_gnat how-gnatmake-works}@anchor{d4}@anchor{gnat_ugn/building_executable_programs_with_gnat id6}@anchor{d5}
  @subsection How @code{gnatmake} Works
  
  
  Generally @code{gnatmake} automatically performs all necessary
! recompilations and you don’t need to worry about how it works. However,
  it may be useful to have some basic understanding of the @code{gnatmake}
  approach and in particular to understand how it uses the results of
  previous compilations without incorrectly depending on them.
*************** files.
*** 8124,8130 ****
  This process ensures that @code{gnatmake} only trusts the dependencies
  in an existing ALI file if they are known to be correct. Otherwise it
  always recompiles to determine a new, guaranteed accurate set of
! dependencies. As a result the program is compiled 'upside down' from what may
  be more familiar as the required order of compilation in some other Ada
  systems. In particular, clients are compiled before the units on which
  they depend. The ability of GNAT to compile in any order is critical in
--- 8085,8091 ----
  This process ensures that @code{gnatmake} only trusts the dependencies
  in an existing ALI file if they are known to be correct. Otherwise it
  always recompiles to determine a new, guaranteed accurate set of
! dependencies. As a result the program is compiled ‘upside down’ from what may
  be more familiar as the required order of compilation in some other Ada
  systems. In particular, clients are compiled before the units on which
  they depend. The ability of GNAT to compile in any order is critical in
*************** names separated by colons (semicolons wh
*** 8366,8372 ****
  The content of the @code{ada_source_path} file which is part of the GNAT
  installation tree and is used to store standard libraries such as the
  GNAT Run Time Library (RTL) source files.
! @ref{71,,Installing a library}
  @end itemize
  
  Specifying the switch @code{-I-}
--- 8327,8333 ----
  The content of the @code{ada_source_path} file which is part of the GNAT
  installation tree and is used to store standard libraries such as the
  GNAT Run Time Library (RTL) source files.
! @ref{72,,Installing a library}
  @end itemize
  
  Specifying the switch @code{-I-}
*************** described above), or you will receive a
*** 8449,8455 ****
  @end itemize
  
  @node Examples,,Order of Compilation Issues,Compiling with gcc
! @anchor{gnat_ugn/building_executable_programs_with_gnat id12}@anchor{df}@anchor{gnat_ugn/building_executable_programs_with_gnat examples}@anchor{e0}
  @subsection Examples
  
  
--- 8410,8416 ----
  @end itemize
  
  @node Examples,,Order of Compilation Issues,Compiling with gcc
! @anchor{gnat_ugn/building_executable_programs_with_gnat examples}@anchor{df}@anchor{gnat_ugn/building_executable_programs_with_gnat id12}@anchor{e0}
  @subsection Examples
  
  
*************** compilation units.
*** 8516,8522 ****
  @end menu
  
  @node Alphabetical List of All Switches,Output and Error Message Control,,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat id13}@anchor{e2}@anchor{gnat_ugn/building_executable_programs_with_gnat alphabetical-list-of-all-switches}@anchor{e3}
  @subsection Alphabetical List of All Switches
  
  
--- 8477,8483 ----
  @end menu
  
  @node Alphabetical List of All Switches,Output and Error Message Control,,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat alphabetical-list-of-all-switches}@anchor{e2}@anchor{gnat_ugn/building_executable_programs_with_gnat id13}@anchor{e3}
  @subsection Alphabetical List of All Switches
  
  
*************** system configuration. You must have a GN
*** 8542,8548 ****
  Load compiler executables (for example, @code{gnat1}, the Ada compiler)
  from @code{dir} instead of the default location. Only use this switch
  when multiple versions of the GNAT compiler are available.
! See the "Options for Directory Search" section in the
  @cite{Using the GNU Compiler Collection (GCC)} manual for further details.
  You would normally use the @code{-b} or @code{-V} switch instead.
  @end table
--- 8503,8509 ----
  Load compiler executables (for example, @code{gnat1}, the Ada compiler)
  from @code{dir} instead of the default location. Only use this switch
  when multiple versions of the GNAT compiler are available.
! See the “Options for Directory Search” section in the
  @cite{Using the GNU Compiler Collection (GCC)} manual for further details.
  You would normally use the @code{-b} or @code{-V} switch instead.
  @end table
*************** marker is specified, the callgraph is de
*** 8581,8586 ****
--- 8542,8559 ----
  dynamically allocated objects.
  @end table
  
+ @geindex -fdiagnostics-format (gcc)
+ 
+ 
+ @table @asis
+ 
+ @item @code{-fdiagnostics-format=json}
+ 
+ Makes GNAT emit warning and error messages as JSON. Inhibits printing of
+ text warning and errors messages except if @code{-gnatv} or
+ @code{-gnatl} are present.
+ @end table
+ 
  @geindex -fdump-scos (gcc)
  
  
*************** Allow full Ada 2005 features (same as @c
*** 8794,8799 ****
--- 8767,8782 ----
  @item @code{-gnat2012}
  
  Allow full Ada 2012 features (same as @code{-gnat12})
+ @end table
+ 
+ @geindex -gnat2022 (gcc)
+ 
+ 
+ @table @asis
+ 
+ @item @code{-gnat2022}
+ 
+ Allow full Ada 2022 features
  
  @item @code{-gnat83}
  
*************** Generate brief messages to @code{stderr}
*** 8867,8873 ****
  
  @item @code{-gnatB}
  
! Assume no invalid (bad) values except for 'Valid attribute use
  (@ref{e7,,Validity Checking}).
  @end table
  
--- 8850,8856 ----
  
  @item @code{-gnatB}
  
! Assume no invalid (bad) values except for ‘Valid attribute use
  (@ref{e7,,Validity Checking}).
  @end table
  
*************** as -gnatn, and enable others such as -gn
*** 8911,8919 ****
  @item @code{-gnatd}
  
  Specify debug options for the compiler. The string of characters after
! the @code{-gnatd} specify the specific debug options. The possible
! characters are 0-9, a-z, A-Z, optionally preceded by a dot. See
! compiler source file @code{debug.adb} for details of the implemented
  debug options. Certain debug options are relevant to applications
  programmers, and these are documented at appropriate points in this
  users guide.
--- 8894,8902 ----
  @item @code{-gnatd}
  
  Specify debug options for the compiler. The string of characters after
! the @code{-gnatd} specifies the specific debug options. The possible
! characters are 0-9, a-z, A-Z, optionally preceded by a dot or underscore.
! See compiler source file @code{debug.adb} for details of the implemented
  debug options. Certain debug options are relevant to applications
  programmers, and these are documented at appropriate points in this
  users guide.
*************** also suppresses generation of cross-refe
*** 8940,8948 ****
  @item @code{-gnateA}
  
  Check that the actual parameters of a subprogram call are not aliases of one
! another. To qualify as aliasing, the actuals must denote objects of a composite
! type, their memory locations must be identical or overlapping, and at least one
! of the corresponding formal parameters must be of mode OUT or IN OUT.
  
  @example
  type Rec_Typ is record
--- 8923,8932 ----
  @item @code{-gnateA}
  
  Check that the actual parameters of a subprogram call are not aliases of one
! another. To qualify as aliasing, their memory locations must be identical or
! overlapping, at least one of the corresponding formal parameters must be of
! mode OUT or IN OUT, and at least one of the corresponding formal parameters
! must have its parameter passing mechanism not specified.
  
  @example
  type Rec_Typ is record
*************** ALI files.
*** 8994,9000 ****
  
  Specify a configuration pragma file
  (the equal sign is optional)
! (@ref{62,,The Configuration Pragmas Files}).
  @end table
  
  @geindex -gnateC (gcc)
--- 8978,8984 ----
  
  Specify a configuration pragma file
  (the equal sign is optional)
! (@ref{63,,The Configuration Pragmas Files}).
  @end table
  
  @geindex -gnateC (gcc)
*************** be specified in GNAT. It is computed for
*** 9265,9272 ****
  follows: @cite{Biggest alignment that any data type can require on this machine@comma{} in bits.}
  
  @code{Max_Unaligned_Field} is the maximum size for unaligned bit field, which is
! 64 for the majority of GCC targets (but can be different on some targets like
! AAMP).
  
  @code{Strict_Alignment} is the equivalent of GCC macro @code{STRICT_ALIGNMENT}
  documented as follows: @cite{Define this macro to be the value 1 if instructions will fail to work if given data not on the nominal alignment. If instructions will merely go slower in that case@comma{} define this macro as 0.}
--- 9249,9255 ----
  follows: @cite{Biggest alignment that any data type can require on this machine@comma{} in bits.}
  
  @code{Max_Unaligned_Field} is the maximum size for unaligned bit field, which is
! 64 for the majority of GCC targets (but can be different on some targets).
  
  @code{Strict_Alignment} is the equivalent of GCC macro @code{STRICT_ALIGNMENT}
  documented as follows: @cite{Define this macro to be the value 1 if instructions will fail to work if given data not on the nominal alignment. If instructions will merely go slower in that case@comma{} define this macro as 0.}
*************** name  digs float_rep size alignment
*** 9299,9306 ****
  where @code{name} is the string name of the type (which can have
  single spaces embedded in the name (e.g. long double), @code{digs} is
  the number of digits for the floating-point type, @code{float_rep} is
! the float representation (I/V/A for IEEE-754-Binary, Vax_Native,
! AAMP), @code{size} is the size in bits, @code{alignment} is the
  alignment in bits. The name is followed by at least two blanks, fields
  are separated by at least one blank, and a LF character immediately
  follows the alignment field.
--- 9282,9290 ----
  where @code{name} is the string name of the type (which can have
  single spaces embedded in the name (e.g. long double), @code{digs} is
  the number of digits for the floating-point type, @code{float_rep} is
! the float representation (I for IEEE-754-Binary, which is
! the only one supported at this time),
! @code{size} is the size in bits, @code{alignment} is the
  alignment in bits. The name is followed by at least two blanks, fields
  are separated by at least one blank, and a LF character immediately
  follows the alignment field.
*************** For further details see @ref{f,,Elaborat
*** 9462,9468 ****
  
  @item @code{-gnati@emph{c}}
  
! Identifier character set (@code{c} = 1/2/3/4/8/9/p/f/n/w).
  For details of the possible selections for @code{c},
  see @ref{31,,Character Set Control}.
  @end table
--- 9446,9452 ----
  
  @item @code{-gnati@emph{c}}
  
! Identifier character set (@code{c} = 1/2/3/4/5/9/p/8/f/n/w).
  For details of the possible selections for @code{c},
  see @ref{31,,Character Set Control}.
  @end table
*************** and attribute_definition_clause for the
*** 9484,9490 ****
  Address, Alignment, Bit_Order, Component_Size, Machine_Radix,
  Object_Size, Scalar_Storage_Order, Size, Small, Stream_Size,
  and Value_Size. Pragma Default_Scalar_Storage_Order is also ignored.
! Note that this option should be used only for compiling -- the
  code is likely to malfunction at run time.
  @end table
  
--- 9468,9474 ----
  Address, Alignment, Bit_Order, Component_Size, Machine_Radix,
  Object_Size, Scalar_Storage_Order, Size, Small, Stream_Size,
  and Value_Size. Pragma Default_Scalar_Storage_Order is also ignored.
! Note that this option should be used only for compiling – the
  code is likely to malfunction at run time.
  @end table
  
*************** Calls to subprograms defined in instance
*** 9533,9539 ****
  Entry calls
  
  @item 
! Indirect calls using 'Access
  
  @item 
  Requeue statements
--- 9517,9523 ----
  Entry calls
  
  @item 
! Indirect calls using ‘Access
  
  @item 
  Requeue statements
*************** pragma @code{Inline} is specified. This
*** 9624,9631 ****
  by the front end and will be visible in the
  @code{-gnatG} output.
  
! When using a gcc-based back end (in practice this means using any version
! of GNAT other than the JGNAT, .NET or GNAAMP versions), then the use of
  @code{-gnatN} is deprecated, and the use of @code{-gnatn} is preferred.
  Historically front end inlining was more extensive than the gcc back end
  inlining, but that is no longer the case.
--- 9608,9614 ----
  by the front end and will be visible in the
  @code{-gnatG} output.
  
! When using a gcc-based back end, then the use of
  @code{-gnatN} is deprecated, and the use of @code{-gnatn} is preferred.
  Historically front end inlining was more extensive than the gcc back end
  inlining, but that is no longer the case.
*************** Cancel effect of previous @code{-gnatp}
*** 9744,9750 ****
  
  @item @code{-gnatq}
  
! Don't quit. Try semantics, even if parse errors.
  @end table
  
  @geindex -gnatQ (gcc)
--- 9727,9733 ----
  
  @item @code{-gnatq}
  
! Don’t quit. Try semantics, even if parse errors.
  @end table
  
  @geindex -gnatQ (gcc)
*************** Don't quit. Try semantics, even if parse
*** 9754,9760 ****
  
  @item @code{-gnatQ}
  
! Don't quit. Generate @code{ALI} and tree files even if illegalities.
  Note that code generation is still suppressed in the presence of any
  errors, so even with @code{-gnatQ} no object file is generated.
  @end table
--- 9737,9743 ----
  
  @item @code{-gnatQ}
  
! Don’t quit. Generate @code{ALI} and tree files even if illegalities.
  Note that code generation is still suppressed in the presence of any
  errors, so even with @code{-gnatQ} no object file is generated.
  @end table
*************** List units for this compilation.
*** 9829,9835 ****
  
  @item @code{-gnatU}
  
! Tag all error messages with the unique string 'error:'
  @end table
  
  @geindex -gnatv (gcc)
--- 9812,9818 ----
  
  @item @code{-gnatU}
  
! Tag all error messages with the unique string ‘error:’
  @end table
  
  @geindex -gnatv (gcc)
*************** exit status.
*** 10068,10074 ****
  @item @code{--RTS=@emph{rts-path}}
  
  Specifies the default location of the run-time library. Same meaning as the
! equivalent @code{gnatmake} flag (@ref{cd,,Switches for gnatmake}).
  @end table
  
  @geindex -S (gcc)
--- 10051,10057 ----
  @item @code{--RTS=@emph{rts-path}}
  
  Specifies the default location of the run-time library. Same meaning as the
! equivalent @code{gnatmake} flag (@ref{ce,,Switches for gnatmake}).
  @end table
  
  @geindex -S (gcc)
*************** switches, and only one of them may appea
*** 10177,10203 ****
  The switch @code{-gnat-p} may not be combined with any other switch.
  
  @item 
! Once a 'y' appears in the string (that is a use of the @code{-gnaty}
  switch), then all further characters in the switch are interpreted
  as style modifiers (see description of @code{-gnaty}).
  
  @item 
! Once a 'd' appears in the string (that is a use of the @code{-gnatd}
  switch), then all further characters in the switch are interpreted
  as debug flags (see description of @code{-gnatd}).
  
  @item 
! Once a 'w' appears in the string (that is a use of the @code{-gnatw}
  switch), then all further characters in the switch are interpreted
  as warning mode modifiers (see description of @code{-gnatw}).
  
  @item 
! Once a 'V' appears in the string (that is a use of the @code{-gnatV}
  switch), then all further characters in the switch are interpreted
  as validity checking options (@ref{e7,,Validity Checking}).
  
  @item 
! Option 'em', 'ec', 'ep', 'l=' and 'R' must be the last options in
  a combined list of options.
  @end itemize
  
--- 10160,10186 ----
  The switch @code{-gnat-p} may not be combined with any other switch.
  
  @item 
! Once a ‘y’ appears in the string (that is a use of the @code{-gnaty}
  switch), then all further characters in the switch are interpreted
  as style modifiers (see description of @code{-gnaty}).
  
  @item 
! Once a ‘d’ appears in the string (that is a use of the @code{-gnatd}
  switch), then all further characters in the switch are interpreted
  as debug flags (see description of @code{-gnatd}).
  
  @item 
! Once a ‘w’ appears in the string (that is a use of the @code{-gnatw}
  switch), then all further characters in the switch are interpreted
  as warning mode modifiers (see description of @code{-gnatw}).
  
  @item 
! Once a ‘V’ appears in the string (that is a use of the @code{-gnatV}
  switch), then all further characters in the switch are interpreted
  as validity checking options (@ref{e7,,Validity Checking}).
  
  @item 
! Option ‘em’, ‘ec’, ‘ep’, ‘l=’ and ‘R’ must be the last options in
  a combined list of options.
  @end itemize
  
*************** a combined list of options.
*** 10208,10214 ****
  
  @geindex stderr
  
! The standard default format for error messages is called 'brief format'.
  Brief format messages are written to @code{stderr} (the standard error
  file) and have the following form:
  
--- 10191,10197 ----
  
  @geindex stderr
  
! The standard default format for error messages is called ‘brief format’.
  Brief format messages are written to @code{stderr} (the standard error
  file) and have the following form:
  
*************** then the output is written to file xyz.a
*** 10332,10338 ****
  @item @code{-gnatU}
  
  This switch forces all error messages to be preceded by the unique
! string 'error:'. This means that error messages take a few more
  characters in space, but allows easy searching for and identification
  of error messages.
  @end table
--- 10315,10321 ----
  @item @code{-gnatU}
  
  This switch forces all error messages to be preceded by the unique
! string ‘error:’. This means that error messages take a few more
  characters in space, but allows easy searching for and identification
  of error messages.
  @end table
*************** is longer than nn characters.
*** 10460,10466 ****
  
  @item @code{-gnatq}
  
! The @code{q} stands for quit (really 'don't quit').
  In normal operation mode, the compiler first parses the program and
  determines if there are any syntax errors. If there are, appropriate
  error messages are generated and compilation is immediately terminated.
--- 10443,10449 ----
  
  @item @code{-gnatq}
  
! The @code{q} stands for quit (really ‘don’t quit’).
  In normal operation mode, the compiler first parses the program and
  determines if there are any syntax errors. If there are, appropriate
  error messages are generated and compilation is immediately terminated.
*************** since ALI files are never generated if @
*** 10497,10503 ****
  @end table
  
  @node Warning Message Control,Debugging and Assertion Control,Output and Error Message Control,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat warning-message-control}@anchor{eb}@anchor{gnat_ugn/building_executable_programs_with_gnat id15}@anchor{f0}
  @subsection Warning Message Control
  
  
--- 10480,10486 ----
  @end table
  
  @node Warning Message Control,Debugging and Assertion Control,Output and Error Message Control,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat id15}@anchor{f0}@anchor{gnat_ugn/building_executable_programs_with_gnat warning-message-control}@anchor{eb}
  @subsection Warning Message Control
  
  
*************** for conditional compilation in Ada, and
*** 10930,10939 ****
  false positive warnings.
  
  This warning option also activates a special test for comparisons using
! the operators '>=' and' <='.
  If the compiler can tell that only the equality condition is possible,
! then it will warn that the '>' or '<' part of the test
! is useless and that the operator could be replaced by '='.
  An example would be comparing a @code{Natural} variable <= 0.
  
  This warning option also generates warnings if
--- 10913,10922 ----
  false positive warnings.
  
  This warning option also activates a special test for comparisons using
! the operators ‘>=’ and’ <=’.
  If the compiler can tell that only the equality condition is possible,
! then it will warn that the ‘>’ or ‘<’ part of the test
! is useless and that the operator could be replaced by ‘=’.
  An example would be comparing a @code{Natural} variable <= 0.
  
  This warning option also generates warnings if
*************** of the pragma @code{Restriction_Warnings
*** 11099,11105 ****
  @emph{[warning-as-error]}
  Used to tag warning messages that have been converted to error messages by
  use of the pragma Warning_As_Error. Note that such warnings are prefixed by
! the string "error: " rather than "warning: ".
  
  @item 
  @emph{[enabled by default]}
--- 11082,11088 ----
  @emph{[warning-as-error]}
  Used to tag warning messages that have been converted to error messages by
  use of the pragma Warning_As_Error. Note that such warnings are prefixed by
! the string “error: ” rather than “warning: “.
  
  @item 
  @emph{[enabled by default]}
*************** implementation unit, defined as any unit
*** 11336,11342 ****
  or @code{System}
  hierarchies that is not
  documented in either the Ada Reference Manual or the GNAT
! Programmer's Reference Manual. Such units are intended only
  for internal implementation purposes and should not be @emph{with}ed
  by user programs. The default is that such warnings are generated
  @end table
--- 11319,11325 ----
  or @code{System}
  hierarchies that is not
  documented in either the Ada Reference Manual or the GNAT
! Programmer’s Reference Manual. Such units are intended only
  for internal implementation purposes and should not be @emph{with}ed
  by user programs. The default is that such warnings are generated
  @end table
*************** types of the actuals are not by-copy typ
*** 11377,11383 ****
  
  @emph{Disable warnings on overlapping actuals.}
  
! This switch disables warnings on overlapping actuals in a call..
  @end table
  
  @geindex -gnatwj (gcc)
--- 11360,11366 ----
  
  @emph{Disable warnings on overlapping actuals.}
  
! This switch disables warnings on overlapping actuals in a call.
  @end table
  
  @geindex -gnatwj (gcc)
*************** This switch suppresses warnings for poss
*** 11555,11562 ****
  @emph{List inherited aspects.}
  
  This switch causes the compiler to list inherited invariants,
! preconditions, and postconditions from Type_Invariant'Class, Invariant'Class,
! Pre'Class, and Post'Class aspects. Also list inherited subtype predicates.
  @end table
  
  @geindex -gnatw.L (gcc)
--- 11538,11545 ----
  @emph{List inherited aspects.}
  
  This switch causes the compiler to list inherited invariants,
! preconditions, and postconditions from Type_Invariant’Class, Invariant’Class,
! Pre’Class, and Post’Class aspects. Also list inherited subtype predicates.
  @end table
  
  @geindex -gnatw.L (gcc)
*************** a modulus of 7 with a size of 7 bits), a
*** 11616,11622 ****
  with no size clause. The guess in both cases is that 2**x was intended
  rather than x. In addition expressions of the form 2*x for small x
  generate a warning (the almost certainly accurate guess being that
! 2**x was intended). The default is that these warnings are given.
  @end table
  
  @geindex -gnatw.M (gcc)
--- 11599,11607 ----
  with no size clause. The guess in both cases is that 2**x was intended
  rather than x. In addition expressions of the form 2*x for small x
  generate a warning (the almost certainly accurate guess being that
! 2**x was intended). This switch also activates warnings for negative
! literal values of a modular type, which are interpreted as large positive
! integers after wrap-around. The default is that these warnings are given.
  @end table
  
  @geindex -gnatw.M (gcc)
*************** ordering when the list of arguments are
*** 11799,11805 ****
  match the names of the formals, but are in a different order. The
  warning is suppressed if any use of named parameter notation is used,
  so this is the appropriate way to suppress a false positive (and
! serves to emphasize that the "misordering" is deliberate). The
  default is that such warnings are not given.
  @end table
  
--- 11784,11790 ----
  match the names of the formals, but are in a different order. The
  warning is suppressed if any use of named parameter notation is used,
  so this is the appropriate way to suppress a false positive (and
! serves to emphasize that the “misordering” is deliberate). The
  default is that such warnings are not given.
  @end table
  
*************** This switch suppresses warnings on cases
*** 11816,11821 ****
--- 11801,11834 ----
  ordering.
  @end table
  
+ @geindex -gnatw_p (gcc)
+ 
+ 
+ @table @asis
+ 
+ @item @code{-gnatw_p}
+ 
+ @emph{Activate warnings for pedantic checks.}
+ 
+ This switch activates warnings for the failure of certain pedantic checks.
+ The only case currently supported is a check that the subtype_marks given
+ for corresponding formal parameter and function results in a subprogram
+ declaration and its body denote the same subtype declaration. The default
+ is that such warnings are not given.
+ @end table
+ 
+ @geindex -gnatw_P (gcc)
+ 
+ 
+ @table @asis
+ 
+ @item @code{-gnatw_P}
+ 
+ @emph{Suppress warnings for pedantic checks.}
+ 
+ This switch suppresses warnings on violations of pedantic checks.
+ @end table
+ 
  @geindex -gnatwq (gcc)
  
  @geindex Parentheses
*************** then the remaining components whose leng
*** 11889,11895 ****
  of the storage unit,
  
  @item 
! then the remaining components whose length doesn't depend on discriminants
  (that is to say, with variable but uniform length for all objects),
  
  @item 
--- 11902,11908 ----
  of the storage unit,
  
  @item 
! then the remaining components whose length doesn’t depend on discriminants
  (that is to say, with variable but uniform length for all objects),
  
  @item 
*************** to be non-negative
*** 11961,11966 ****
--- 11974,11982 ----
  @item 
  Comparison of an object or (unary or binary) operation of boolean type to
  an explicit True value.
+ 
+ @item 
+ Import of parent package.
  @end itemize
  
  The default is that warnings for redundant constructs are not given.
*************** This switch activates warnings to be gen
*** 12166,12172 ****
  are declared but not referenced, and for units that are @emph{with}ed
  and not
  referenced. In the case of packages, a warning is also generated if
! no entities in the package are referenced. This means that if a with'ed
  package is referenced but the only references are in @code{use}
  clauses or @code{renames}
  declarations, a warning is still generated. A warning is also generated
--- 12182,12188 ----
  are declared but not referenced, and for units that are @emph{with}ed
  and not
  referenced. In the case of packages, a warning is also generated if
! no entities in the package are referenced. This means that if a with’ed
  package is referenced but the only references are in @code{use}
  clauses or @code{renames}
  declarations, a warning is still generated. A warning is also generated
*************** may not be properly initialized.
*** 12275,12281 ****
  
  @emph{Activate info messages for non-default bit order.}
  
! This switch activates messages (labeled "info", they are not warnings,
  just informational messages) about the effects of non-default bit-order
  on records to which a component clause is applied. The effect of specifying
  non-default bit ordering is a bit subtle (and changed with Ada 2005), so
--- 12291,12297 ----
  
  @emph{Activate info messages for non-default bit order.}
  
! This switch activates messages (labeled “info”, they are not warnings,
  just informational messages) about the effects of non-default bit-order
  on records to which a component clause is applied. The effect of specifying
  non-default bit ordering is a bit subtle (and changed with Ada 2005), so
*************** non-default bit order on record componen
*** 12308,12314 ****
  @emph{Activate warnings on wrong low bound assumption.}
  
  This switch activates warnings for indexing an unconstrained string parameter
! with a literal or S'Length. This is a case where the code is assuming that the
  low bound is one, which is in general not true (for example when a slice is
  passed). The default is that such warnings are generated.
  @end table
--- 12324,12330 ----
  @emph{Activate warnings on wrong low bound assumption.}
  
  This switch activates warnings for indexing an unconstrained string parameter
! with a literal or S’Length. This is a case where the code is assuming that the
  low bound is one, which is in general not true (for example when a slice is
  passed). The default is that such warnings are generated.
  @end table
*************** passed). The default is that such warnin
*** 12323,12329 ****
  @emph{Suppress warnings on wrong low bound assumption.}
  
  This switch suppresses warnings for indexing an unconstrained string parameter
! with a literal or S'Length. Note that this warning can also be suppressed
  in a particular case by adding an assertion that the lower bound is 1,
  as shown in the following example:
  
--- 12339,12345 ----
  @emph{Suppress warnings on wrong low bound assumption.}
  
  This switch suppresses warnings for indexing an unconstrained string parameter
! with a literal or S’Length. Note that this warning can also be suppressed
  in a particular case by adding an assertion that the lower bound is 1,
  as shown in the following example:
  
*************** See @ref{e6,,Static Stack Usage Analysis
*** 12611,12618 ****
  This switch enables most warnings from the GCC back end.
  The code generator detects a number of warning situations that are missed
  by the GNAT front end, and this switch can be used to activate them.
! The use of this switch also sets the default front end warning mode to
! @code{-gnatwa}, that is, most front end warnings activated as well.
  @end table
  
  @geindex -w (gcc)
--- 12627,12634 ----
  This switch enables most warnings from the GCC back end.
  The code generator detects a number of warning situations that are missed
  by the GNAT front end, and this switch can be used to activate them.
! The use of this switch also sets the default front-end warning mode to
! @code{-gnatwa}, that is, most front-end warnings are activated as well.
  @end table
  
  @geindex -w (gcc)
*************** The use of this switch also sets the def
*** 12623,12630 ****
  @item @code{-w}
  
  Conversely, this switch suppresses warnings from the GCC back end.
! The use of this switch also sets the default front end warning mode to
! @code{-gnatws}, that is, front end warnings suppressed as well.
  @end table
  
  @geindex -Werror (gcc)
--- 12639,12646 ----
  @item @code{-w}
  
  Conversely, this switch suppresses warnings from the GCC back end.
! The use of this switch also sets the default front-end warning mode to
! @code{-gnatws}, that is, front-end warnings are suppressed as well.
  @end table
  
  @geindex -Werror (gcc)
*************** The use of this switch also sets the def
*** 12637,12642 ****
--- 12653,12661 ----
  This switch causes warnings from the GCC back end to be treated as
  errors.  The warning string still appears, but the warning messages are
  counted as errors, and prevent the generation of an object file.
+ The use of this switch also sets the default front-end warning mode to
+ @code{-gnatwe}, that is, front-end warning messages and style check
+ messages are treated as errors as well.
  @end table
  
  A string of warning parameters can be used in the same parameter. For example:
*************** pragma Assertion_Policy
*** 12843,12849 ****
  @end example
  
  The pragmas @code{Assert} and @code{Debug} normally have no effect and
! are ignored. This switch, where @code{a} stands for 'assert', causes
  pragmas @code{Assert} and @code{Debug} to be activated. This switch also
  causes preconditions, postconditions, subtype predicates, and
  type invariants to be activated.
--- 12862,12868 ----
  @end example
  
  The pragmas @code{Assert} and @code{Debug} normally have no effect and
! are ignored. This switch, where @code{a} stands for ‘assert’, causes
  pragmas @code{Assert} and @code{Debug} to be activated. This switch also
  causes preconditions, postconditions, subtype predicates, and
  type invariants to be activated.
*************** is @code{False}, the exception @code{Ass
*** 12885,12891 ****
  @end table
  
  @node Validity Checking,Style Checking,Debugging and Assertion Control,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat validity-checking}@anchor{e7}@anchor{gnat_ugn/building_executable_programs_with_gnat id17}@anchor{f3}
  @subsection Validity Checking
  
  
--- 12904,12910 ----
  @end table
  
  @node Validity Checking,Style Checking,Debugging and Assertion Control,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat id17}@anchor{f3}@anchor{gnat_ugn/building_executable_programs_with_gnat validity-checking}@anchor{e7}
  @subsection Validity Checking
  
  
*************** enforce specified style rules. A limited
*** 13187,13193 ****
  in writing the GNAT sources themselves. This switch allows user programs
  to activate all or some of these checks. If the source program fails a
  specified style check, an appropriate message is given, preceded by
! the character sequence '(style)'. This message does not prevent
  successful compilation (unless the @code{-gnatwe} switch is used).
  
  Note that this is by no means intended to be a general facility for
--- 13206,13212 ----
  in writing the GNAT sources themselves. This switch allows user programs
  to activate all or some of these checks. If the source program fails a
  specified style check, an appropriate message is given, preceded by
! the character sequence ‘(style)’. This message does not prevent
  successful compilation (unless the @code{-gnatwe} switch is used).
  
  Note that this is by no means intended to be a general facility for
*************** If a digit from 1-9 appears
*** 13215,13222 ****
  in the string after @code{-gnaty}
  then proper indentation is checked, with the digit indicating the
  indentation level required. A value of zero turns off this style check.
! The general style of required indentation is as specified by
! the examples in the Ada Reference Manual. Full line comments must be
  aligned with the @code{--} starting on a column that is a multiple of
  the alignment level, or they may be aligned the same way as the following
  non-blank line (this is useful when full line comments appear in the middle
--- 13234,13258 ----
  in the string after @code{-gnaty}
  then proper indentation is checked, with the digit indicating the
  indentation level required. A value of zero turns off this style check.
! The rule checks that the following constructs start on a column that is
! a multiple of the alignment level:
! 
! 
! @itemize *
! 
! @item 
! beginnings of declarations (except record component declarations)
! and statements;
! 
! @item 
! beginnings of the structural components of compound statements;
! 
! @item 
! @code{end} keyword that completes the declaration of a program unit declaration
! or body or that completes a compound statement.
! @end itemize
! 
! Full line comments must be
  aligned with the @code{--} starting on a column that is a multiple of
  the alignment level, or they may be aligned the same way as the following
  non-blank line (this is useful when full line comments appear in the middle
*************** with declarations.
*** 13708,13714 ****
  
  @emph{Check separate specs.}
  
! Separate declarations ('specs') are required for subprograms (a
  body is not allowed to serve as its own declaration). The only
  exception is that parameterless library level procedures are
  not required to have a separate declaration. This exception covers
--- 13744,13750 ----
  
  @emph{Check separate specs.}
  
! Separate declarations (‘specs’) are required for subprograms (a
  body is not allowed to serve as its own declaration). The only
  exception is that parameterless library level procedures are
  not required to have a separate declaration. This exception covers
*************** a requirement for no following space.
*** 13884,13890 ****
  
  If any of these style rules is violated, a message is generated giving
  details on the violation. The initial characters of such messages are
! always '@cite{(style)}'. Note that these messages are treated as warning
  messages, so they normally do not prevent the generation of an object
  file. The @code{-gnatwe} switch can be used to treat warning messages,
  including style messages, as fatal errors.
--- 13920,13926 ----
  
  If any of these style rules is violated, a message is generated giving
  details on the violation. The initial characters of such messages are
! always ‘@cite{(style)}’. Note that these messages are treated as warning
  messages, so they normally do not prevent the generation of an object
  file. The @code{-gnatwe} switch can be used to treat warning messages,
  including style messages, as fatal errors.
*************** built-in standard style check options ar
*** 13897,13903 ****
  The switch @code{-gnatyN} clears any previously set style checks.
  
  @node Run-Time Checks,Using gcc for Syntax Checking,Style Checking,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat run-time-checks}@anchor{ea}@anchor{gnat_ugn/building_executable_programs_with_gnat id19}@anchor{f5}
  @subsection Run-Time Checks
  
  
--- 13933,13939 ----
  The switch @code{-gnatyN} clears any previously set style checks.
  
  @node Run-Time Checks,Using gcc for Syntax Checking,Style Checking,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat id19}@anchor{f5}@anchor{gnat_ugn/building_executable_programs_with_gnat run-time-checks}@anchor{ea}
  @subsection Run-Time Checks
  
  
*************** required, to omit the checking code. If
*** 13945,13951 ****
  checking code is zero or near-zero, the compiler will generate it even
  if checks are suppressed. In particular, if the compiler can prove
  that a certain check will necessarily fail, it will generate code to
! do an unconditional 'raise', even if checks are suppressed. The
  compiler warns in this case. Another case in which checks may not be
  eliminated is when they are embedded in certain run-time routines such
  as math library routines.
--- 13981,13987 ----
  checking code is zero or near-zero, the compiler will generate it even
  if checks are suppressed. In particular, if the compiler can prove
  that a certain check will necessarily fail, it will generate code to
! do an unconditional ‘raise’, even if checks are suppressed. The
  compiler warns in this case. Another case in which checks may not be
  eliminated is when they are embedded in certain run-time routines such
  as math library routines.
*************** This switch cancels the effect of a prev
*** 14011,14018 ****
  This switch controls the mode used for computing intermediate
  arithmetic integer operations, and also enables overflow checking.
  For a full description of overflow mode and checking control, see
! the 'Overflow Check Handling in GNAT' appendix in this
! User's Guide.
  
  Overflow checks are always enabled by this switch. The argument
  controls the mode, using the codes
--- 14047,14054 ----
  This switch controls the mode used for computing intermediate
  arithmetic integer operations, and also enables overflow checking.
  For a full description of overflow mode and checking control, see
! the ‘Overflow Check Handling in GNAT’ appendix in this
! User’s Guide.
  
  Overflow checks are always enabled by this switch. The argument
  controls the mode, using the codes
*************** the program source.
*** 14129,14135 ****
  
  @item @code{-gnats}
  
! The @code{s} stands for 'syntax'.
  
  Run GNAT in syntax checking only mode. For
  example, the command
--- 14165,14171 ----
  
  @item @code{-gnats}
  
! The @code{s} stands for ‘syntax’.
  
  Run GNAT in syntax checking only mode. For
  example, the command
*************** together. This is primarily used by the
*** 14186,14192 ****
  
  @item @code{-gnatc}
  
! The @code{c} stands for 'check'.
  Causes the compiler to operate in semantic check mode,
  with full checking for all illegalities specified in the
  Ada Reference Manual, but without generation of any object code
--- 14222,14228 ----
  
  @item @code{-gnatc}
  
! The @code{c} stands for ‘check’.
  Causes the compiler to operate in semantic check mode,
  with full checking for all illegalities specified in the
  Ada Reference Manual, but without generation of any object code
*************** may generally be compiled using this swi
*** 14338,14343 ****
--- 14374,14392 ----
  for further information).
  @end table
  
+ @geindex -gnat2022 (gcc)
+ 
+ @geindex Ada 2022 mode
+ 
+ 
+ @table @asis
+ 
+ @item @code{-gnat2022} (Ada 2022 mode)
+ 
+ This switch directs the compiler to implement the Ada 2022 version of the
+ language.
+ @end table
+ 
  @geindex -gnatX (gcc)
  
  @geindex Ada language extensions
*************** for further information).
*** 14350,14362 ****
  @item @code{-gnatX} (Enable GNAT Extensions)
  
  This switch directs the compiler to implement the latest version of the
! language (currently Ada 2012) and also to enable certain GNAT implementation
  extensions that are not part of any Ada standard. For a full list of these
! extensions, see the GNAT reference manual.
  @end table
  
  @node Character Set Control,File Naming Control,Compiling Different Versions of Ada,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat id23}@anchor{fb}@anchor{gnat_ugn/building_executable_programs_with_gnat character-set-control}@anchor{31}
  @subsection Character Set Control
  
  
--- 14399,14411 ----
  @item @code{-gnatX} (Enable GNAT Extensions)
  
  This switch directs the compiler to implement the latest version of the
! language (currently Ada 2022) and also to enable certain GNAT implementation
  extensions that are not part of any Ada standard. For a full list of these
! extensions, see the GNAT reference manual, @code{Pragma Extensions_Allowed}.
  @end table
  
  @node Character Set Control,File Naming Control,Compiling Different Versions of Ada,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat character-set-control}@anchor{31}@anchor{gnat_ugn/building_executable_programs_with_gnat id23}@anchor{fb}
  @subsection Character Set Control
  
  
*************** methods see @ref{37,,Wide_Character Enco
*** 14539,14545 ****
  Note that brackets coding is always accepted, even if one of the other
  options is specified, so for example @code{-gnatW8} specifies that both
  brackets and UTF-8 encodings will be recognized. The units that are
! with'ed directly or indirectly will be scanned using the specified
  representation scheme, and so if one of the non-brackets scheme is
  used, it must be used consistently throughout the program. However,
  since brackets encoding is always recognized, it may be conveniently
--- 14588,14594 ----
  Note that brackets coding is always accepted, even if one of the other
  options is specified, so for example @code{-gnatW8} specifies that both
  brackets and UTF-8 encodings will be recognized. The units that are
! with’ed directly or indirectly will be scanned using the specified
  representation scheme, and so if one of the non-brackets scheme is
  used, it must be used consistently throughout the program. However,
  since brackets encoding is always recognized, it may be conveniently
*************** This is a common mode for many programs
*** 14594,14600 ****
  
  @item @code{-gnatk@emph{n}}
  
! Activates file name 'krunching'. @code{n}, a decimal integer in the range
  1-999, indicates the maximum allowable length of a file name (not
  including the @code{.ads} or @code{.adb} extension). The default is not
  to enable file name krunching.
--- 14643,14649 ----
  
  @item @code{-gnatk@emph{n}}
  
! Activates file name ‘krunching’. @code{n}, a decimal integer in the range
  1-999, indicates the maximum allowable length of a file name (not
  including the @code{.ads} or @code{.adb} extension). The default is not
  to enable file name krunching.
*************** For the source file naming rules, @ref{3
*** 14603,14609 ****
  @end table
  
  @node Subprogram Inlining Control,Auxiliary Output Control,File Naming Control,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat subprogram-inlining-control}@anchor{fe}@anchor{gnat_ugn/building_executable_programs_with_gnat id25}@anchor{ff}
  @subsection Subprogram Inlining Control
  
  
--- 14652,14658 ----
  @end table
  
  @node Subprogram Inlining Control,Auxiliary Output Control,File Naming Control,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat id25}@anchor{fe}@anchor{gnat_ugn/building_executable_programs_with_gnat subprogram-inlining-control}@anchor{ff}
  @subsection Subprogram Inlining Control
  
  
*************** For the source file naming rules, @ref{3
*** 14614,14620 ****
  
  @item @code{-gnatn[12]}
  
! The @code{n} here is intended to suggest the first syllable of the word 'inline'.
  GNAT recognizes and processes @code{Inline} pragmas. However, for inlining to
  actually occur, optimization must be enabled and, by default, inlining of
  subprograms across units is not performed. If you want to additionally
--- 14663,14669 ----
  
  @item @code{-gnatn[12]}
  
! The @code{n} here is intended to suggest the first syllable of the word ‘inline’.
  GNAT recognizes and processes @code{Inline} pragmas. However, for inlining to
  actually occur, optimization must be enabled and, by default, inlining of
  subprograms across units is not performed. If you want to additionally
*************** see @ref{100,,Inlining of Subprograms}.
*** 14649,14656 ****
  This switch activates front-end inlining which also
  generates additional dependencies.
  
! When using a gcc-based back end (in practice this means using any version
! of GNAT other than the JGNAT, .NET or GNAAMP versions), then the use of
  @code{-gnatN} is deprecated, and the use of @code{-gnatn} is preferred.
  Historically front end inlining was more extensive than the gcc back end
  inlining, but that is no longer the case.
--- 14698,14704 ----
  This switch activates front-end inlining which also
  generates additional dependencies.
  
! When using a gcc-based back end, then the use of
  @code{-gnatN} is deprecated, and the use of @code{-gnatn} is preferred.
  Historically front end inlining was more extensive than the gcc back end
  inlining, but that is no longer the case.
*************** is set).
*** 14969,14975 ****
  For @code{-gnatR3}, symbolic expressions for values that are computed
  at run time for records are included. These symbolic expressions have
  a mostly obvious format with #n being used to represent the value of the
! n'th discriminant. See source files @code{repinfo.ads/adb} in the
  GNAT sources for full details on the format of @code{-gnatR3} output.
  
  For @code{-gnatR4}, information for relevant compiler-generated types
--- 15017,15023 ----
  For @code{-gnatR3}, symbolic expressions for values that are computed
  at run time for records are included. These symbolic expressions have
  a mostly obvious format with #n being used to represent the value of the
! n’th discriminant. See source files @code{repinfo.ads/adb} in the
  GNAT sources for full details on the format of @code{-gnatR3} output.
  
  For @code{-gnatR4}, information for relevant compiler-generated types
*************** emitted in the debug information.
*** 15046,15055 ****
  Historically, old debug formats like stabs were not powerful enough to
  express some Ada types (for instance, variant records or fixed-point types).
  To work around this, GNAT introduced proprietary encodings that embed the
! missing information ("GNAT encodings").
  
  Recent versions of the DWARF debug information format are now able to
! correctly describe most of these Ada constructs ("standard DWARF"). As
  third-party tools started to use this format, GNAT has been enhanced to
  generate it. However, most tools (including GDB) are still relying on GNAT
  encodings.
--- 15094,15103 ----
  Historically, old debug formats like stabs were not powerful enough to
  express some Ada types (for instance, variant records or fixed-point types).
  To work around this, GNAT introduced proprietary encodings that embed the
! missing information (“GNAT encodings”).
  
  Recent versions of the DWARF debug information format are now able to
! correctly describe most of these Ada constructs (“standard DWARF”). As
  third-party tools started to use this format, GNAT has been enhanced to
  generate it. However, most tools (including GDB) are still relying on GNAT
  encodings.
*************** encodings for the rest.
*** 15076,15082 ****
  @end table
  
  @node Exception Handling Control,Units to Sources Mapping Files,Debugging Control,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat id28}@anchor{105}@anchor{gnat_ugn/building_executable_programs_with_gnat exception-handling-control}@anchor{106}
  @subsection Exception Handling Control
  
  
--- 15124,15130 ----
  @end table
  
  @node Exception Handling Control,Units to Sources Mapping Files,Debugging Control,Compiler Switches
! @anchor{gnat_ugn/building_executable_programs_with_gnat exception-handling-control}@anchor{105}@anchor{gnat_ugn/building_executable_programs_with_gnat id28}@anchor{106}
  @subsection Exception Handling Control
  
  
*************** need for tracing stack frames. This meth
*** 15088,15094 ****
  exception propagation, but introduces significant overhead for
  the use of exception handlers, even if no exception is raised.
  
! The other approach is called 'zero cost' exception handling.
  With this method, the compiler builds static tables to describe
  the exception ranges. No dynamic code is required when entering
  a frame containing an exception handler. When an exception is
--- 15136,15142 ----
  exception propagation, but introduces significant overhead for
  the use of exception handlers, even if no exception is raised.
  
! The other approach is called ‘zero cost’ exception handling.
  With this method, the compiler builds static tables to describe
  the exception ranges. No dynamic code is required when entering
  a frame containing an exception handler. When an exception is
*************** the propagation of exceptions, but there
*** 15099,15105 ****
  exception handlers if no exception is raised. Note that in this
  mode and in the context of mixed Ada and C/C++ programming,
  to propagate an exception through a C/C++ code, the C/C++ code
! must be compiled with the @code{-funwind-tables} GCC's
  option.
  
  The following switches may be used to control which of the
--- 15147,15153 ----
  exception handlers if no exception is raised. Note that in this
  mode and in the context of mixed Ada and C/C++ programming,
  to propagate an exception through a C/C++ code, the C/C++ code
! must be compiled with the @code{-funwind-tables} GCC’s
  option.
  
  The following switches may be used to control which of the
*************** is available for the target in use, othe
*** 15144,15150 ****
  
  The same option @code{--RTS} must be used both for @code{gcc}
  and @code{gnatbind}. Passing this option to @code{gnatmake}
! (@ref{cd,,Switches for gnatmake}) will ensure the required consistency
  through the compilation and binding steps.
  
  @node Units to Sources Mapping Files,Code Generation Control,Exception Handling Control,Compiler Switches
--- 15192,15198 ----
  
  The same option @code{--RTS} must be used both for @code{gcc}
  and @code{gnatbind}. Passing this option to @code{gnatmake}
! (@ref{ce,,Switches for gnatmake}) will ensure the required consistency
  through the compilation and binding steps.
  
  @node Units to Sources Mapping Files,Code Generation Control,Exception Handling Control,Compiler Switches
*************** there is no point in using @code{-m} swi
*** 15229,15235 ****
  unless you actually see a performance improvement.
  
  @node Linker Switches,Binding with gnatbind,Compiler Switches,Building Executable Programs with GNAT
! @anchor{gnat_ugn/building_executable_programs_with_gnat linker-switches}@anchor{10a}@anchor{gnat_ugn/building_executable_programs_with_gnat id31}@anchor{10b}
  @section Linker Switches
  
  
--- 15277,15283 ----
  unless you actually see a performance improvement.
  
  @node Linker Switches,Binding with gnatbind,Compiler Switches,Building Executable Programs with GNAT
! @anchor{gnat_ugn/building_executable_programs_with_gnat id31}@anchor{10a}@anchor{gnat_ugn/building_executable_programs_with_gnat linker-switches}@anchor{10b}
  @section Linker Switches
  
  
*************** to be read by the @code{gnatlink} utilit
*** 15300,15306 ****
  @end menu
  
  @node Running gnatbind,Switches for gnatbind,,Binding with gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatbind}@anchor{10d}@anchor{gnat_ugn/building_executable_programs_with_gnat id33}@anchor{10e}
  @subsection Running @code{gnatbind}
  
  
--- 15348,15354 ----
  @end menu
  
  @node Running gnatbind,Switches for gnatbind,,Binding with gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat id33}@anchor{10d}@anchor{gnat_ugn/building_executable_programs_with_gnat running-gnatbind}@anchor{10e}
  @subsection Running @code{gnatbind}
  
  
*************** Output complete list of elaboration-orde
*** 15543,15549 ****
  @item @code{-Ea}
  
  Store tracebacks in exception occurrences when the target supports it.
! The "a" is for "address"; tracebacks will contain hexadecimal addresses,
  unless symbolic tracebacks are enabled.
  
  See also the packages @code{GNAT.Traceback} and
--- 15591,15597 ----
  @item @code{-Ea}
  
  Store tracebacks in exception occurrences when the target supports it.
! The “a” is for “address”; tracebacks will contain hexadecimal addresses,
  unless symbolic tracebacks are enabled.
  
  See also the packages @code{GNAT.Traceback} and
*************** Note that on x86 ports, you must not use
*** 15560,15566 ****
  @item @code{-Es}
  
  Store tracebacks in exception occurrences when the target supports it.
! The "s" is for "symbolic"; symbolic tracebacks are enabled.
  @end table
  
  @geindex -E (gnatbind)
--- 15608,15614 ----
  @item @code{-Es}
  
  Store tracebacks in exception occurrences when the target supports it.
! The “s” is for “symbolic”; symbolic tracebacks are enabled.
  @end table
  
  @geindex -E (gnatbind)
*************** limitations:
*** 15708,15717 ****
  @itemize *
  
  @item 
! Starting the program's execution in the debugger will cause it to
  stop at the start of the @code{main} function instead of the main subprogram.
  This can be worked around by manually inserting a breakpoint on that
! subprogram and resuming the program's execution until reaching that breakpoint.
  
  @item 
  Programs using GNAT.Compiler_Version will not link.
--- 15756,15765 ----
  @itemize *
  
  @item 
! Starting the program’s execution in the debugger will cause it to
  stop at the start of the @code{main} function instead of the main subprogram.
  This can be worked around by manually inserting a breakpoint on that
! subprogram and resuming the program’s execution until reaching that breakpoint.
  
  @item 
  Programs using GNAT.Compiler_Version will not link.
*************** Do not look for library files in the sys
*** 15740,15746 ****
  @item @code{--RTS=@emph{rts-path}}
  
  Specifies the default location of the run-time library. Same meaning as the
! equivalent @code{gnatmake} flag (@ref{cd,,Switches for gnatmake}).
  
  @geindex -o (gnatbind)
  
--- 15788,15794 ----
  @item @code{--RTS=@emph{rts-path}}
  
  Specifies the default location of the run-time library. Same meaning as the
! equivalent @code{gnatmake} flag (@ref{ce,,Switches for gnatmake}).
  
  @geindex -o (gnatbind)
  
*************** scheduling policy to @code{FIFO_Within_P
*** 15892,15898 ****
  
  Enable dynamic stack usage, with @code{n} results stored and displayed
  at program termination. A result is generated when a task
! terminates. Results that can't be stored are displayed on the fly, at
  task termination. This option is currently not supported on Itanium
  platforms. (See @ref{113,,Dynamic Stack Usage Analysis} for details.)
  
--- 15940,15946 ----
  
  Enable dynamic stack usage, with @code{n} results stored and displayed
  at program termination. A result is generated when a task
! terminates. Results that can’t be stored are displayed on the fly, at
  task termination. This option is currently not supported on Itanium
  platforms. (See @ref{113,,Dynamic Stack Usage Analysis} for details.)
  
*************** case the checking against sources has al
*** 16028,16034 ****
  @end table
  
  @node Binder Error Message Control,Elaboration Control,Consistency-Checking Modes,Switches for gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat id36}@anchor{116}@anchor{gnat_ugn/building_executable_programs_with_gnat binder-error-message-control}@anchor{117}
  @subsubsection Binder Error Message Control
  
  
--- 16076,16082 ----
  @end table
  
  @node Binder Error Message Control,Elaboration Control,Consistency-Checking Modes,Switches for gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat binder-error-message-control}@anchor{116}@anchor{gnat_ugn/building_executable_programs_with_gnat id36}@anchor{117}
  @subsubsection Binder Error Message Control
  
  
*************** with extreme care.
*** 16138,16144 ****
  @end table
  
  @node Elaboration Control,Output Control,Binder Error Message Control,Switches for gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat id37}@anchor{118}@anchor{gnat_ugn/building_executable_programs_with_gnat elaboration-control}@anchor{111}
  @subsubsection Elaboration Control
  
  
--- 16186,16192 ----
  @end table
  
  @node Elaboration Control,Output Control,Binder Error Message Control,Switches for gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat elaboration-control}@anchor{111}@anchor{gnat_ugn/building_executable_programs_with_gnat id37}@anchor{118}
  @subsubsection Elaboration Control
  
  
*************** order. For further details see @ref{f,,E
*** 16154,16163 ****
  
  Force elaboration order.
  
! @code{elab-order} should be the name of a "forced elaboration order file", that
  is, a text file containing library item names, one per line. A name of the
! form "some.unit%s" or "some.unit (spec)" denotes the spec of Some.Unit. A
! name of the form "some.unit%b" or "some.unit (body)" denotes the body of
  Some.Unit. Each pair of lines is taken to mean that there is an elaboration
  dependence of the second line on the first. For example, if the file
  contains:
--- 16202,16211 ----
  
  Force elaboration order.
  
! @code{elab-order} should be the name of a “forced elaboration order file”, that
  is, a text file containing library item names, one per line. A name of the
! form “some.unit%s” or “some.unit (spec)” denotes the spec of Some.Unit. A
! name of the form “some.unit%b” or “some.unit (body)” denotes the body of
  Some.Unit. Each pair of lines is taken to mean that there is an elaboration
  dependence of the second line on the first. For example, if the file
  contains:
*************** forcing the body of This to be elaborate
*** 16178,16188 ****
  The given order must be consistent with Ada rules, or else @code{gnatbind} will
  give elaboration cycle errors. For example, if you say x (body) should be
  elaborated before x (spec), there will be a cycle, because Ada rules require
! x (spec) to be elaborated before x (body); you can't have the spec and body
  both elaborated before each other.
  
! If you later add "with That;" to the body of This, there will be a cycle, in
! which case you should erase either "this (body)" or "that (spec)" from the
  above forced elaboration order file.
  
  Blank lines and Ada-style comments are ignored. Unit names that do not exist
--- 16226,16236 ----
  The given order must be consistent with Ada rules, or else @code{gnatbind} will
  give elaboration cycle errors. For example, if you say x (body) should be
  elaborated before x (spec), there will be a cycle, because Ada rules require
! x (spec) to be elaborated before x (body); you can’t have the spec and body
  both elaborated before each other.
  
! If you later add “with That;” to the body of This, there will be a cycle, in
! which case you should erase either “this (body)” or “that (spec)” from the
  above forced elaboration order file.
  
  Blank lines and Ada-style comments are ignored. Unit names that do not exist
*************** debugging/experimental use.
*** 16223,16229 ****
  @end table
  
  @node Output Control,Dynamic Allocation Control,Elaboration Control,Switches for gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat output-control}@anchor{119}@anchor{gnat_ugn/building_executable_programs_with_gnat id38}@anchor{11a}
  @subsubsection Output Control
  
  
--- 16271,16277 ----
  @end table
  
  @node Output Control,Dynamic Allocation Control,Elaboration Control,Switches for gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat id38}@anchor{119}@anchor{gnat_ugn/building_executable_programs_with_gnat output-control}@anchor{11a}
  @subsubsection Output Control
  
  
*************** be used to improve code generation in so
*** 16308,16314 ****
  @subsubsection Dynamic Allocation Control
  
  
! The heap control switches -- @code{-H32} and @code{-H64} --
  determine whether dynamic allocation uses 32-bit or 64-bit memory.
  They only affect compiler-generated allocations via @code{__gnat_malloc};
  explicit calls to @code{malloc} and related functions from the C
--- 16356,16362 ----
  @subsubsection Dynamic Allocation Control
  
  
! The heap control switches – @code{-H32} and @code{-H64} –
  determine whether dynamic allocation uses 32-bit or 64-bit memory.
  They only affect compiler-generated allocations via @code{__gnat_malloc};
  explicit calls to @code{malloc} and related functions from the C
*************** the binder switch
*** 16457,16463 ****
  @end table
  
  @node Command-Line Access,Search Paths for gnatbind,Switches for gnatbind,Binding with gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat id42}@anchor{11f}@anchor{gnat_ugn/building_executable_programs_with_gnat command-line-access}@anchor{120}
  @subsection Command-Line Access
  
  
--- 16505,16511 ----
  @end table
  
  @node Command-Line Access,Search Paths for gnatbind,Switches for gnatbind,Binding with gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat command-line-access}@anchor{11f}@anchor{gnat_ugn/building_executable_programs_with_gnat id42}@anchor{120}
  @subsection Command-Line Access
  
  
*************** required, your main program must set @co
*** 16487,16493 ****
  it.
  
  @node Search Paths for gnatbind,Examples of gnatbind Usage,Command-Line Access,Binding with gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat search-paths-for-gnatbind}@anchor{76}@anchor{gnat_ugn/building_executable_programs_with_gnat id43}@anchor{121}
  @subsection Search Paths for @code{gnatbind}
  
  
--- 16535,16541 ----
  it.
  
  @node Search Paths for gnatbind,Examples of gnatbind Usage,Command-Line Access,Binding with gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat id43}@anchor{121}@anchor{gnat_ugn/building_executable_programs_with_gnat search-paths-for-gnatbind}@anchor{76}
  @subsection Search Paths for @code{gnatbind}
  
  
*************** of GNAT).
*** 16544,16550 ****
  The content of the @code{ada_object_path} file which is part of the GNAT
  installation tree and is used to store standard libraries such as the
  GNAT Run-Time Library (RTL) unless the switch @code{-nostdlib} is
! specified. See @ref{71,,Installing a library}
  @end itemize
  
  @geindex -I (gnatbind)
--- 16592,16598 ----
  The content of the @code{ada_object_path} file which is part of the GNAT
  installation tree and is used to store standard libraries such as the
  GNAT Run-Time Library (RTL) unless the switch @code{-nostdlib} is
! specified. See @ref{72,,Installing a library}
  @end itemize
  
  @geindex -I (gnatbind)
*************** in compiling sources from multiple direc
*** 16591,16597 ****
  development environments much more flexible.
  
  @node Examples of gnatbind Usage,,Search Paths for gnatbind,Binding with gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat id44}@anchor{122}@anchor{gnat_ugn/building_executable_programs_with_gnat examples-of-gnatbind-usage}@anchor{123}
  @subsection Examples of @code{gnatbind} Usage
  
  
--- 16639,16645 ----
  development environments much more flexible.
  
  @node Examples of gnatbind Usage,,Search Paths for gnatbind,Binding with gnatbind
! @anchor{gnat_ugn/building_executable_programs_with_gnat examples-of-gnatbind-usage}@anchor{122}@anchor{gnat_ugn/building_executable_programs_with_gnat id44}@anchor{123}
  @subsection Examples of @code{gnatbind} Usage
  
  
*************** for further details. You would normally
*** 16844,16850 ****
  @item @code{-M}
  
  When linking an executable, create a map file. The name of the map file
! has the same name as the executable with extension ".map".
  @end table
  
  @geindex -M= (gnatlink)
--- 16892,16898 ----
  @item @code{-M}
  
  When linking an executable, create a map file. The name of the map file
! has the same name as the executable with extension “.map”.
  @end table
  
  @geindex -M= (gnatlink)
*************** switch.
*** 16905,16911 ****
  @end table
  
  @node Using the GNU make Utility,,Linking with gnatlink,Building Executable Programs with GNAT
! @anchor{gnat_ugn/building_executable_programs_with_gnat using-the-gnu-make-utility}@anchor{70}@anchor{gnat_ugn/building_executable_programs_with_gnat id48}@anchor{12b}
  @section Using the GNU @code{make} Utility
  
  
--- 16953,16959 ----
  @end table
  
  @node Using the GNU make Utility,,Linking with gnatlink,Building Executable Programs with GNAT
! @anchor{gnat_ugn/building_executable_programs_with_gnat id48}@anchor{12b}@anchor{gnat_ugn/building_executable_programs_with_gnat using-the-gnu-make-utility}@anchor{70}
  @section Using the GNU @code{make} Utility
  
  
*************** is the same, these examples use some adv
*** 16930,16936 ****
  @end menu
  
  @node Using gnatmake in a Makefile,Automatically Creating a List of Directories,,Using the GNU make Utility
! @anchor{gnat_ugn/building_executable_programs_with_gnat using-gnatmake-in-a-makefile}@anchor{12c}@anchor{gnat_ugn/building_executable_programs_with_gnat id49}@anchor{12d}
  @subsection Using gnatmake in a Makefile
  
  
--- 16978,16984 ----
  @end menu
  
  @node Using gnatmake in a Makefile,Automatically Creating a List of Directories,,Using the GNU make Utility
! @anchor{gnat_ugn/building_executable_programs_with_gnat id49}@anchor{12c}@anchor{gnat_ugn/building_executable_programs_with_gnat using-gnatmake-in-a-makefile}@anchor{12d}
  @subsection Using gnatmake in a Makefile
  
  
*************** clean::
*** 17029,17035 ****
  @end example
  
  @node Automatically Creating a List of Directories,Generating the Command Line Switches,Using gnatmake in a Makefile,Using the GNU make Utility
! @anchor{gnat_ugn/building_executable_programs_with_gnat id50}@anchor{12f}@anchor{gnat_ugn/building_executable_programs_with_gnat automatically-creating-a-list-of-directories}@anchor{12e}
  @subsection Automatically Creating a List of Directories
  
  
--- 17077,17083 ----
  @end example
  
  @node Automatically Creating a List of Directories,Generating the Command Line Switches,Using gnatmake in a Makefile,Using the GNU make Utility
! @anchor{gnat_ugn/building_executable_programs_with_gnat automatically-creating-a-list-of-directories}@anchor{12e}@anchor{gnat_ugn/building_executable_programs_with_gnat id50}@anchor{12f}
  @subsection Automatically Creating a List of Directories
  
  
*************** DIRS := $@{shell find $@{ROOT_DIRECTORY@
*** 17102,17108 ****
  @end example
  
  @node Generating the Command Line Switches,Overcoming Command Line Length Limits,Automatically Creating a List of Directories,Using the GNU make Utility
! @anchor{gnat_ugn/building_executable_programs_with_gnat id51}@anchor{130}@anchor{gnat_ugn/building_executable_programs_with_gnat generating-the-command-line-switches}@anchor{131}
  @subsection Generating the Command Line Switches
  
  
--- 17150,17156 ----
  @end example
  
  @node Generating the Command Line Switches,Overcoming Command Line Length Limits,Automatically Creating a List of Directories,Using the GNU make Utility
! @anchor{gnat_ugn/building_executable_programs_with_gnat generating-the-command-line-switches}@anchor{130}@anchor{gnat_ugn/building_executable_programs_with_gnat id51}@anchor{131}
  @subsection Generating the Command Line Switches
  
  
*************** all:
*** 17128,17134 ****
  @end example
  
  @node Overcoming Command Line Length Limits,,Generating the Command Line Switches,Using the GNU make Utility
! @anchor{gnat_ugn/building_executable_programs_with_gnat overcoming-command-line-length-limits}@anchor{132}@anchor{gnat_ugn/building_executable_programs_with_gnat id52}@anchor{133}
  @subsection Overcoming Command Line Length Limits
  
  
--- 17176,17182 ----
  @end example
  
  @node Overcoming Command Line Length Limits,,Generating the Command Line Switches,Using the GNU make Utility
! @anchor{gnat_ugn/building_executable_programs_with_gnat id52}@anchor{132}@anchor{gnat_ugn/building_executable_programs_with_gnat overcoming-command-line-length-limits}@anchor{133}
  @subsection Overcoming Command Line Length Limits
  
  
*************** generated files and executable files.
*** 17248,17254 ****
  @end menu
  
  @node Running gnatclean,Switches for gnatclean,,The File Cleanup Utility gnatclean
! @anchor{gnat_ugn/gnat_utility_programs running-gnatclean}@anchor{139}@anchor{gnat_ugn/gnat_utility_programs id3}@anchor{13a}
  @subsection Running @code{gnatclean}
  
  
--- 17296,17302 ----
  @end menu
  
  @node Running gnatclean,Switches for gnatclean,,The File Cleanup Utility gnatclean
! @anchor{gnat_ugn/gnat_utility_programs id3}@anchor{139}@anchor{gnat_ugn/gnat_utility_programs running-gnatclean}@anchor{13a}
  @subsection Running @code{gnatclean}
  
  
*************** where @code{gnatclean} was invoked.
*** 17474,17480 ****
  @end table
  
  @node The GNAT Library Browser gnatls,,The File Cleanup Utility gnatclean,GNAT Utility Programs
! @anchor{gnat_ugn/gnat_utility_programs the-gnat-library-browser-gnatls}@anchor{137}@anchor{gnat_ugn/gnat_utility_programs id5}@anchor{13d}
  @section The GNAT Library Browser @code{gnatls}
  
  
--- 17522,17528 ----
  @end table
  
  @node The GNAT Library Browser gnatls,,The File Cleanup Utility gnatclean,GNAT Utility Programs
! @anchor{gnat_ugn/gnat_utility_programs id5}@anchor{13d}@anchor{gnat_ugn/gnat_utility_programs the-gnat-library-browser-gnatls}@anchor{137}
  @section The GNAT Library Browser @code{gnatls}
  
  
*************** Several such switches may be specified s
*** 17690,17696 ****
  @item @code{-aO@emph{dir}}, @code{-aI@emph{dir}}, @code{-I@emph{dir}}, @code{-I-}, @code{-nostdinc}
  
  Source path manipulation. Same meaning as the equivalent @code{gnatmake}
! flags (@ref{cd,,Switches for gnatmake}).
  @end table
  
  @geindex -aP (gnatls)
--- 17738,17744 ----
  @item @code{-aO@emph{dir}}, @code{-aI@emph{dir}}, @code{-I@emph{dir}}, @code{-I-}, @code{-nostdinc}
  
  Source path manipulation. Same meaning as the equivalent @code{gnatmake}
! flags (@ref{ce,,Switches for gnatmake}).
  @end table
  
  @geindex -aP (gnatls)
*************** Add @code{dir} at the beginning of the p
*** 17711,17717 ****
  @item @code{--RTS=@emph{rts-path}}
  
  Specifies the default location of the runtime library. Same meaning as the
! equivalent @code{gnatmake} flag (@ref{cd,,Switches for gnatmake}).
  @end table
  
  @geindex -v (gnatls)
--- 17759,17765 ----
  @item @code{--RTS=@emph{rts-path}}
  
  Specifies the default location of the runtime library. Same meaning as the
! equivalent @code{gnatmake} flag (@ref{ce,,Switches for gnatmake}).
  @end table
  
  @geindex -v (gnatls)
*************** by the user.
*** 17757,17763 ****
  @end table
  
  @node Example of gnatls Usage,,Switches for gnatls,The GNAT Library Browser gnatls
! @anchor{gnat_ugn/gnat_utility_programs id8}@anchor{142}@anchor{gnat_ugn/gnat_utility_programs example-of-gnatls-usage}@anchor{143}
  @subsection Example of @code{gnatls} Usage
  
  
--- 17805,17811 ----
  @end table
  
  @node Example of gnatls Usage,,Switches for gnatls,The GNAT Library Browser gnatls
! @anchor{gnat_ugn/gnat_utility_programs example-of-gnatls-usage}@anchor{142}@anchor{gnat_ugn/gnat_utility_programs id8}@anchor{143}
  @subsection Example of @code{gnatls} Usage
  
  
*************** instr.ads
*** 17846,17852 ****
  @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit
  
  @node GNAT and Program Execution,Platform-Specific Information,GNAT Utility Programs,Top
! @anchor{gnat_ugn/gnat_and_program_execution gnat-and-program-execution}@anchor{c}@anchor{gnat_ugn/gnat_and_program_execution doc}@anchor{144}@anchor{gnat_ugn/gnat_and_program_execution id1}@anchor{145}
  @chapter GNAT and Program Execution
  
  
--- 17894,17900 ----
  @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit
  
  @node GNAT and Program Execution,Platform-Specific Information,GNAT Utility Programs,Top
! @anchor{gnat_ugn/gnat_and_program_execution doc}@anchor{144}@anchor{gnat_ugn/gnat_and_program_execution gnat-and-program-execution}@anchor{c}@anchor{gnat_ugn/gnat_and_program_execution id1}@anchor{145}
  @chapter GNAT and Program Execution
  
  
*************** the incorrect user program.
*** 17943,17949 ****
  @end menu
  
  @node The GNAT Debugger GDB,Running GDB,,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution the-gnat-debugger-gdb}@anchor{14e}@anchor{gnat_ugn/gnat_and_program_execution id3}@anchor{14f}
  @subsection The GNAT Debugger GDB
  
  
--- 17991,17997 ----
  @end menu
  
  @node The GNAT Debugger GDB,Running GDB,,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id3}@anchor{14e}@anchor{gnat_ugn/gnat_and_program_execution the-gnat-debugger-gdb}@anchor{14f}
  @subsection The GNAT Debugger GDB
  
  
*************** exactly as if the debugger were not pres
*** 18027,18033 ****
  describes some of the additional commands that can be given to @code{GDB}.
  
  @node Introduction to GDB Commands,Using Ada Expressions,Running GDB,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution introduction-to-gdb-commands}@anchor{152}@anchor{gnat_ugn/gnat_and_program_execution id5}@anchor{153}
  @subsection Introduction to GDB Commands
  
  
--- 18075,18081 ----
  describes some of the additional commands that can be given to @code{GDB}.
  
  @node Introduction to GDB Commands,Using Ada Expressions,Running GDB,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id5}@anchor{152}@anchor{gnat_ugn/gnat_and_program_execution introduction-to-gdb-commands}@anchor{153}
  @subsection Introduction to GDB Commands
  
  
*************** Thus, for brevity, the debugger acts as
*** 18268,18279 ****
  implicit @code{with} and @code{use} clauses in effect for all user-written
  packages, thus making it unnecessary to fully qualify most names with
  their packages, regardless of context. Where this causes ambiguity,
! @code{GDB} asks the user's intent.
  
  For details on the supported Ada syntax, see @cite{Debugging with GDB}.
  
  @node Calling User-Defined Subprograms,Using the next Command in a Function,Using Ada Expressions,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id7}@anchor{156}@anchor{gnat_ugn/gnat_and_program_execution calling-user-defined-subprograms}@anchor{157}
  @subsection Calling User-Defined Subprograms
  
  
--- 18316,18327 ----
  implicit @code{with} and @code{use} clauses in effect for all user-written
  packages, thus making it unnecessary to fully qualify most names with
  their packages, regardless of context. Where this causes ambiguity,
! @code{GDB} asks the user’s intent.
  
  For details on the supported Ada syntax, see @cite{Debugging with GDB}.
  
  @node Calling User-Defined Subprograms,Using the next Command in a Function,Using Ada Expressions,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution calling-user-defined-subprograms}@anchor{156}@anchor{gnat_ugn/gnat_and_program_execution id7}@anchor{157}
  @subsection Calling User-Defined Subprograms
  
  
*************** elements directly from GDB, you can writ
*** 18332,18338 ****
  the elements in the desired format.
  
  @node Using the next Command in a Function,Stopping When Ada Exceptions Are Raised,Calling User-Defined Subprograms,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution using-the-next-command-in-a-function}@anchor{158}@anchor{gnat_ugn/gnat_and_program_execution id8}@anchor{159}
  @subsection Using the @emph{next} Command in a Function
  
  
--- 18380,18386 ----
  the elements in the desired format.
  
  @node Using the next Command in a Function,Stopping When Ada Exceptions Are Raised,Calling User-Defined Subprograms,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id8}@anchor{158}@anchor{gnat_ugn/gnat_and_program_execution using-the-next-command-in-a-function}@anchor{159}
  @subsection Using the @emph{next} Command in a Function
  
  
*************** When you use the @code{next} command in
*** 18340,18346 ****
  location will advance to the next statement as usual. A special case
  arises in the case of a @code{return} statement.
  
! Part of the code for a return statement is the 'epilogue' of the function.
  This is the code that returns to the caller. There is only one copy of
  this epilogue code, and it is typically associated with the last return
  statement in the function if there is more than one return. In some
--- 18388,18394 ----
  location will advance to the next statement as usual. A special case
  arises in the case of a @code{return} statement.
  
! Part of the code for a return statement is the ‘epilogue’ of the function.
  This is the code that returns to the caller. There is only one copy of
  this epilogue code, and it is typically associated with the last return
  statement in the function if there is more than one return. In some
*************** The value returned is always that from t
*** 18355,18361 ****
  that was stepped through.
  
  @node Stopping When Ada Exceptions Are Raised,Ada Tasks,Using the next Command in a Function,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution stopping-when-ada-exceptions-are-raised}@anchor{15a}@anchor{gnat_ugn/gnat_and_program_execution id9}@anchor{15b}
  @subsection Stopping When Ada Exceptions Are Raised
  
  
--- 18403,18409 ----
  that was stepped through.
  
  @node Stopping When Ada Exceptions Are Raised,Ada Tasks,Using the next Command in a Function,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id9}@anchor{15a}@anchor{gnat_ugn/gnat_and_program_execution stopping-when-ada-exceptions-are-raised}@anchor{15b}
  @subsection Stopping When Ada Exceptions Are Raised
  
  
*************** to refer to tasks in the following comma
*** 18450,18456 ****
  @itemize *
  
  @item 
! @code{break`@w{`}*linespec* `@w{`}task} @emph{taskid}, @code{break} @emph{linespec} @code{task} @emph{taskid} @code{if} ...
  
  @quotation
  
--- 18498,18504 ----
  @itemize *
  
  @item 
! @code{break`@w{`}*linespec* `@w{`}task} @emph{taskid}, @code{break} @emph{linespec} @code{task} @emph{taskid} @code{if} …
  
  @quotation
  
*************** other units.
*** 18558,18564 ****
  @geindex Remote Debugging with gdbserver
  
  @node Remote Debugging with gdbserver,GNAT Abnormal Termination or Failure to Terminate,Debugging Generic Units,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution remote-debugging-with-gdbserver}@anchor{160}@anchor{gnat_ugn/gnat_and_program_execution id12}@anchor{161}
  @subsection Remote Debugging with gdbserver
  
  
--- 18606,18612 ----
  @geindex Remote Debugging with gdbserver
  
  @node Remote Debugging with gdbserver,GNAT Abnormal Termination or Failure to Terminate,Debugging Generic Units,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id12}@anchor{160}@anchor{gnat_ugn/gnat_and_program_execution remote-debugging-with-gdbserver}@anchor{161}
  @subsection Remote Debugging with gdbserver
  
  
*************** Finally, you can start
*** 18671,18677 ****
  @code{gdb} directly on the @code{gnat1} executable. @code{gnat1} is the
  front-end of GNAT, and can be run independently (normally it is just
  called from @code{gcc}). You can use @code{gdb} on @code{gnat1} as you
! would on a C program (but @ref{14e,,The GNAT Debugger GDB} for caveats). The
  @code{where} command is the first line of attack; the variable
  @code{lineno} (seen by @code{print lineno}), used by the second phase of
  @code{gnat1} and by the @code{gcc} backend, indicates the source line at
--- 18719,18725 ----
  @code{gdb} directly on the @code{gnat1} executable. @code{gnat1} is the
  front-end of GNAT, and can be run independently (normally it is just
  called from @code{gcc}). You can use @code{gdb} on @code{gnat1} as you
! would on a C program (but @ref{14f,,The GNAT Debugger GDB} for caveats). The
  @code{where} command is the first line of attack; the variable
  @code{lineno} (seen by @code{print lineno}), used by the second phase of
  @code{gnat1} and by the @code{gcc} backend, indicates the source line at
*************** the source file.
*** 18680,18686 ****
  @end itemize
  
  @node Naming Conventions for GNAT Source Files,Getting Internal Debugging Information,GNAT Abnormal Termination or Failure to Terminate,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution naming-conventions-for-gnat-source-files}@anchor{164}@anchor{gnat_ugn/gnat_and_program_execution id14}@anchor{165}
  @subsection Naming Conventions for GNAT Source Files
  
  
--- 18728,18734 ----
  @end itemize
  
  @node Naming Conventions for GNAT Source Files,Getting Internal Debugging Information,GNAT Abnormal Termination or Failure to Terminate,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id14}@anchor{164}@anchor{gnat_ugn/gnat_and_program_execution naming-conventions-for-gnat-source-files}@anchor{165}
  @subsection Naming Conventions for GNAT Source Files
  
  
*************** the other @code{.c} files are modificati
*** 18761,18767 ****
  @end itemize
  
  @node Getting Internal Debugging Information,Stack Traceback,Naming Conventions for GNAT Source Files,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id15}@anchor{166}@anchor{gnat_ugn/gnat_and_program_execution getting-internal-debugging-information}@anchor{167}
  @subsection Getting Internal Debugging Information
  
  
--- 18809,18815 ----
  @end itemize
  
  @node Getting Internal Debugging Information,Stack Traceback,Naming Conventions for GNAT Source Files,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution getting-internal-debugging-information}@anchor{166}@anchor{gnat_ugn/gnat_and_program_execution id15}@anchor{167}
  @subsection Getting Internal Debugging Information
  
  
*************** are replaced with run-time calls.
*** 18789,18795 ****
  @geindex stack unwinding
  
  @node Stack Traceback,Pretty-Printers for the GNAT runtime,Getting Internal Debugging Information,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution stack-traceback}@anchor{168}@anchor{gnat_ugn/gnat_and_program_execution id16}@anchor{169}
  @subsection Stack Traceback
  
  
--- 18837,18843 ----
  @geindex stack unwinding
  
  @node Stack Traceback,Pretty-Printers for the GNAT runtime,Getting Internal Debugging Information,Running and Debugging Ada Programs
! @anchor{gnat_ugn/gnat_and_program_execution id16}@anchor{168}@anchor{gnat_ugn/gnat_and_program_execution stack-traceback}@anchor{169}
  @subsection Stack Traceback
  
  
*************** is enabled, and no exception is raised d
*** 18818,18824 ****
  @end menu
  
  @node Non-Symbolic Traceback,Symbolic Traceback,,Stack Traceback
! @anchor{gnat_ugn/gnat_and_program_execution non-symbolic-traceback}@anchor{16a}@anchor{gnat_ugn/gnat_and_program_execution id17}@anchor{16b}
  @subsubsection Non-Symbolic Traceback
  
  
--- 18866,18872 ----
  @end menu
  
  @node Non-Symbolic Traceback,Symbolic Traceback,,Stack Traceback
! @anchor{gnat_ugn/gnat_and_program_execution id17}@anchor{16a}@anchor{gnat_ugn/gnat_and_program_execution non-symbolic-traceback}@anchor{16b}
  @subsubsection Non-Symbolic Traceback
  
  
*************** From this traceback we can see that the
*** 18945,18951 ****
  @code{stb.adb} at line 5, which was reached from a procedure call in
  @code{stb.adb} at line 10, and so on. The @code{b~std.adb} is the binder file,
  which contains the call to the main program.
! @ref{10d,,Running gnatbind}. The remaining entries are assorted runtime routines,
  and the output will vary from platform to platform.
  
  It is also possible to use @code{GDB} with these traceback addresses to debug
--- 18993,18999 ----
  @code{stb.adb} at line 5, which was reached from a procedure call in
  @code{stb.adb} at line 10, and so on. The @code{b~std.adb} is the binder file,
  which contains the call to the main program.
! @ref{10e,,Running gnatbind}. The remaining entries are assorted runtime routines,
  and the output will vary from platform to platform.
  
  It is also possible to use @code{GDB} with these traceback addresses to debug
*************** In STB.P1 : 16#0040_F1E4# 16#0040_14F2#
*** 19097,19103 ****
  
  You can then get further information by invoking the @code{addr2line}
  tool as described earlier (note that the hexadecimal addresses
! need to be specified in C format, with a leading '0x').
  
  @geindex traceback
  @geindex symbolic
--- 19145,19151 ----
  
  You can then get further information by invoking the @code{addr2line}
  tool as described earlier (note that the hexadecimal addresses
! need to be specified in C format, with a leading ‘0x’).
  
  @geindex traceback
  @geindex symbolic
*************** program.
*** 19235,19241 ****
  @subsection Pretty-Printers for the GNAT runtime
  
  
! As discussed in @cite{Calling User-Defined Subprograms}, GDB's
  @code{print} command only knows about the physical layout of program data
  structures and therefore normally displays only low-level dumps, which
  are often hard to understand.
--- 19283,19289 ----
  @subsection Pretty-Printers for the GNAT runtime
  
  
! As discussed in @cite{Calling User-Defined Subprograms}, GDB’s
  @code{print} command only knows about the physical layout of program data
  structures and therefore normally displays only low-level dumps, which
  are often hard to understand.
*************** python import gnatdbg; gnatdbg.setup()
*** 19300,19306 ****
  @end example
  @end quotation
  
! Once this is done, GDB's @code{print} command will automatically use
  these pretty-printers when appropriate. Using the previous example:
  
  @quotation
--- 19348,19354 ----
  @end example
  @end quotation
  
! Once this is done, GDB’s @code{print} command will automatically use
  these pretty-printers when appropriate. Using the previous example:
  
  @quotation
*************** $1 = pp.int_to_nat.map of length 3 = @{
*** 19317,19324 ****
  
  Pretty-printers are invoked each time GDB tries to display a value,
  including when displaying the arguments of a called subprogram (in
! GDB's @code{backtrace} command) or when printing the value returned by a
! function (in GDB's @code{finish} command).
  
  To display a value without involving pretty-printers, @code{print} can be
  invoked with its @code{/r} option:
--- 19365,19372 ----
  
  Pretty-printers are invoked each time GDB tries to display a value,
  including when displaying the arguments of a called subprogram (in
! GDB’s @code{backtrace} command) or when printing the value returned by a
! function (in GDB’s @code{finish} command).
  
  To display a value without involving pretty-printers, @code{print} can be
  invoked with its @code{/r} option:
*************** for more information.
*** 19338,19344 ****
  @geindex Profiling
  
  @node Profiling,Improving Performance,Running and Debugging Ada Programs,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution profiling}@anchor{147}@anchor{gnat_ugn/gnat_and_program_execution id20}@anchor{170}
  @section Profiling
  
  
--- 19386,19392 ----
  @geindex Profiling
  
  @node Profiling,Improving Performance,Running and Debugging Ada Programs,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id20}@anchor{170}@anchor{gnat_ugn/gnat_and_program_execution profiling}@anchor{147}
  @section Profiling
  
  
*************** This section describes how to use the @c
*** 19359,19365 ****
  
  
  This section is not meant to be an exhaustive documentation of @code{gprof}.
! Full documentation for it can be found in the @cite{GNU Profiler User's Guide}
  documentation that is part of this GNAT distribution.
  
  Profiling a program helps determine the parts of a program that are executed
--- 19407,19413 ----
  
  
  This section is not meant to be an exhaustive documentation of @code{gprof}.
! Full documentation for it can be found in the @cite{GNU Profiler User’s Guide}
  documentation that is part of this GNAT distribution.
  
  Profiling a program helps determine the parts of a program that are executed
*************** to interpret the results.
*** 19408,19414 ****
  @end menu
  
  @node Compilation for profiling,Program execution,,Profiling an Ada Program with gprof
! @anchor{gnat_ugn/gnat_and_program_execution id22}@anchor{173}@anchor{gnat_ugn/gnat_and_program_execution compilation-for-profiling}@anchor{174}
  @subsubsection Compilation for profiling
  
  
--- 19456,19462 ----
  @end menu
  
  @node Compilation for profiling,Program execution,,Profiling an Ada Program with gprof
! @anchor{gnat_ugn/gnat_and_program_execution compilation-for-profiling}@anchor{173}@anchor{gnat_ugn/gnat_and_program_execution id22}@anchor{174}
  @subsubsection Compilation for profiling
  
  
*************** be profiled; if you need to profile your
*** 19436,19442 ****
  gnatmake switch to force full recompilation.
  
  @node Program execution,Running gprof,Compilation for profiling,Profiling an Ada Program with gprof
! @anchor{gnat_ugn/gnat_and_program_execution program-execution}@anchor{175}@anchor{gnat_ugn/gnat_and_program_execution id23}@anchor{176}
  @subsubsection Program execution
  
  
--- 19484,19490 ----
  gnatmake switch to force full recompilation.
  
  @node Program execution,Running gprof,Compilation for profiling,Profiling an Ada Program with gprof
! @anchor{gnat_ugn/gnat_and_program_execution id23}@anchor{175}@anchor{gnat_ugn/gnat_and_program_execution program-execution}@anchor{176}
  @subsubsection Program execution
  
  
*************** generated in the directory where the pro
*** 19451,19457 ****
  already exists, it will be overwritten.
  
  @node Running gprof,Interpretation of profiling results,Program execution,Profiling an Ada Program with gprof
! @anchor{gnat_ugn/gnat_and_program_execution running-gprof}@anchor{177}@anchor{gnat_ugn/gnat_and_program_execution id24}@anchor{178}
  @subsubsection Running gprof
  
  
--- 19499,19505 ----
  already exists, it will be overwritten.
  
  @node Running gprof,Interpretation of profiling results,Program execution,Profiling an Ada Program with gprof
! @anchor{gnat_ugn/gnat_and_program_execution id24}@anchor{177}@anchor{gnat_ugn/gnat_and_program_execution running-gprof}@anchor{178}
  @subsubsection Running gprof
  
  
*************** $ gprof [switches] [executable [data-fil
*** 19484,19490 ****
  
  @code{gprof} supports numerous switches. The order of these
  switch does not matter. The full list of options can be found in
! the GNU Profiler User's Guide documentation that comes with this documentation.
  
  The following is the subset of those switches that is most relevant:
  
--- 19532,19538 ----
  
  @code{gprof} supports numerous switches. The order of these
  switch does not matter. The full list of options can be found in
! the GNU Profiler User’s Guide documentation that comes with this documentation.
  
  The following is the subset of those switches that is most relevant:
  
*************** compiler, in particular Ada symbols gene
*** 19513,19519 ****
  
  The @code{-e @emph{function}} option tells @code{gprof} not to print
  information about the function @code{function_name} (and its
! children...) in the call graph.  The function will still be listed
  as a child of any functions that call it, but its index number will be
  shown as @code{[not printed]}.  More than one @code{-e} option may be
  given; only one @code{function_name} may be indicated with each @code{-e}
--- 19561,19567 ----
  
  The @code{-e @emph{function}} option tells @code{gprof} not to print
  information about the function @code{function_name} (and its
! children…) in the call graph.  The function will still be listed
  as a child of any functions that call it, but its index number will be
  shown as @code{[not printed]}.  More than one @code{-e} option may be
  given; only one @code{function_name} may be indicated with each @code{-e}
*************** the call graph.  More than one @code{-E}
*** 19543,19549 ****
  
  The @code{-f @emph{function}} option causes @code{gprof} to limit the
  call graph to the function @code{function_name} and its children (and
! their children...).  More than one @code{-f} option may be given;
  only one @code{function_name} may be indicated with each @code{-f}
  option.
  @end table
--- 19591,19597 ----
  
  The @code{-f @emph{function}} option causes @code{gprof} to limit the
  call graph to the function @code{function_name} and its children (and
! their children…).  More than one @code{-f} option may be given;
  only one @code{function_name} may be indicated with each @code{-f}
  option.
  @end table
*************** option.
*** 19557,19563 ****
  
  The @code{-F @emph{function}} option works like the @code{-f} option, but
  only time spent in the function and its children (and their
! children...) will be used to determine total-time and
  percentages-of-time for the call graph.  More than one @code{-F} option
  may be given; only one @code{function_name} may be indicated with each
  @code{-F} option.  The @code{-F} option overrides the @code{-E} option.
--- 19605,19611 ----
  
  The @code{-F @emph{function}} option works like the @code{-f} option, but
  only time spent in the function and its children (and their
! children…) will be used to determine total-time and
  percentages-of-time for the call graph.  More than one @code{-F} option
  may be given; only one @code{function_name} may be indicated with each
  @code{-F} option.  The @code{-F} option overrides the @code{-E} option.
*************** may be given; only one @code{function_na
*** 19569,19576 ****
  
  
  The results of the profiling analysis are represented by two arrays: the
! 'flat profile' and the 'call graph'. Full documentation of those outputs
! can be found in the GNU Profiler User's Guide.
  
  The flat profile shows the time spent in each function of the program, and how
  many time it has been called. This allows you to locate easily the most
--- 19617,19624 ----
  
  
  The results of the profiling analysis are represented by two arrays: the
! ‘flat profile’ and the ‘call graph’. Full documentation of those outputs
! can be found in the GNU Profiler User’s Guide.
  
  The flat profile shows the time spent in each function of the program, and how
  many time it has been called. This allows you to locate easily the most
*************** and the subprograms that it calls. It al
*** 19581,19587 ****
  spent in each of those callers/called subprograms.
  
  @node Improving Performance,Overflow Check Handling in GNAT,Profiling,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution improving-performance}@anchor{17b}@anchor{gnat_ugn/gnat_and_program_execution id26}@anchor{148}
  @section Improving Performance
  
  
--- 19629,19635 ----
  spent in each of those callers/called subprograms.
  
  @node Improving Performance,Overflow Check Handling in GNAT,Profiling,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id26}@anchor{148}@anchor{gnat_ugn/gnat_and_program_execution improving-performance}@anchor{17b}
  @section Improving Performance
  
  
*************** which can reduce the size of program exe
*** 19602,19608 ****
  @end menu
  
  @node Performance Considerations,Text_IO Suggestions,,Improving Performance
! @anchor{gnat_ugn/gnat_and_program_execution performance-considerations}@anchor{17c}@anchor{gnat_ugn/gnat_and_program_execution id27}@anchor{17d}
  @subsection Performance Considerations
  
  
--- 19650,19656 ----
  @end menu
  
  @node Performance Considerations,Text_IO Suggestions,,Improving Performance
! @anchor{gnat_ugn/gnat_and_program_execution id27}@anchor{17c}@anchor{gnat_ugn/gnat_and_program_execution performance-considerations}@anchor{17d}
  @subsection Performance Considerations
  
  
*************** some guidelines on debugging optimized c
*** 19663,19669 ****
  @end menu
  
  @node Controlling Run-Time Checks,Use of Restrictions,,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id28}@anchor{17e}@anchor{gnat_ugn/gnat_and_program_execution controlling-run-time-checks}@anchor{17f}
  @subsubsection Controlling Run-Time Checks
  
  
--- 19711,19717 ----
  @end menu
  
  @node Controlling Run-Time Checks,Use of Restrictions,,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution controlling-run-time-checks}@anchor{17e}@anchor{gnat_ugn/gnat_and_program_execution id28}@anchor{17f}
  @subsubsection Controlling Run-Time Checks
  
  
*************** possibility of an immediate abort at any
*** 19757,19763 ****
  @geindex -O (gcc)
  
  Without any optimization option,
! the compiler's goal is to reduce the cost of
  compilation and to make debugging produce the expected results.
  Statements are independent: if you stop the program with a breakpoint between
  statements, you can then assign a new value to any variable or change
--- 19805,19811 ----
  @geindex -O (gcc)
  
  Without any optimization option,
! the compiler’s goal is to reduce the cost of
  compilation and to make debugging produce the expected results.
  Statements are independent: if you stop the program with a breakpoint between
  statements, you can then assign a new value to any variable or change
*************** generates unoptimized code but has
*** 19794,19800 ****
  the fastest compilation time.
  
  Note that many other compilers do substantial optimization even
! if 'no optimization' is specified. With gcc, it is very unusual
  to use @code{-O0} for production if execution time is of any concern,
  since @code{-O0} means (almost) no optimization. This difference
  between gcc and other compilers should be kept in mind when
--- 19842,19848 ----
  the fastest compilation time.
  
  Note that many other compilers do substantial optimization even
! if ‘no optimization’ is specified. With gcc, it is very unusual
  to use @code{-O0} for production if execution time is of any concern,
  since @code{-O0} means (almost) no optimization. This difference
  between gcc and other compilers should be kept in mind when
*************** These are the most common cases:
*** 19912,19918 ****
  @itemize *
  
  @item 
! @emph{The 'hopping Program Counter':}  Repeated @code{step} or @code{next}
  commands show
  the PC bouncing back and forth in the code.  This may result from any of
  the following optimizations:
--- 19960,19966 ----
  @itemize *
  
  @item 
! @emph{The ‘hopping Program Counter’:}  Repeated @code{step} or @code{next}
  commands show
  the PC bouncing back and forth in the code.  This may result from any of
  the following optimizations:
*************** expected side-effects.
*** 19941,19947 ****
  @end itemize
  
  @item 
! @emph{The 'big leap':} More commonly known as @emph{cross-jumping}, in which
  two identical pieces of code are merged and the program counter suddenly
  jumps to a statement that is not supposed to be executed, simply because
  it (and the code following) translates to the same thing as the code
--- 19989,19995 ----
  @end itemize
  
  @item 
! @emph{The ‘big leap’:} More commonly known as @emph{cross-jumping}, in which
  two identical pieces of code are merged and the program counter suddenly
  jumps to a statement that is not supposed to be executed, simply because
  it (and the code following) translates to the same thing as the code
*************** sequences that end in a jump, such as a
*** 19950,19956 ****
  a @code{break} in a C @code{switch} statement.
  
  @item 
! @emph{The 'roving variable':} The symptom is an unexpected value in a variable.
  There are various reasons for this effect:
  
  
--- 19998,20004 ----
  a @code{break} in a C @code{switch} statement.
  
  @item 
! @emph{The ‘roving variable’:} The symptom is an unexpected value in a variable.
  There are various reasons for this effect:
  
  
*************** There are various reasons for this effec
*** 19958,19964 ****
  
  @item 
  In a subprogram prologue, a parameter may not yet have been moved to its
! 'home'.
  
  @item 
  A variable may be dead, and its register re-used.  This is
--- 20006,20012 ----
  
  @item 
  In a subprogram prologue, a parameter may not yet have been moved to its
! ‘home’.
  
  @item 
  A variable may be dead, and its register re-used.  This is
*************** values (one must apply the procedure rec
*** 19987,19993 ****
  other values); or re-running the code and stopping a little earlier
  (perhaps before the call) and stepping to better see how the variable obtained
  the value in question; or continuing to step @emph{from} the point of the
! strange value to see if code motion had simply moved the variable's
  assignments later.
  @end itemize
  
--- 20035,20041 ----
  other values); or re-running the code and stopping a little earlier
  (perhaps before the call) and stepping to better see how the variable obtained
  the value in question; or continuing to step @emph{from} the point of the
! strange value to see if code motion had simply moved the variable’s
  assignments later.
  @end itemize
  
*************** by default at this level, using @code{-O
*** 20203,20209 ****
  
  You also need to make sure that the target architecture features a supported
  SIMD instruction set.  For example, for the x86 architecture, you should at
! least specify @code{-msse2} to get significant vectorization (but you don't
  need to specify it for x86-64 as it is part of the base 64-bit architecture).
  Similarly, for the PowerPC architecture, you should specify @code{-maltivec}.
  
--- 20251,20257 ----
  
  You also need to make sure that the target architecture features a supported
  SIMD instruction set.  For example, for the x86 architecture, you should at
! least specify @code{-msse2} to get significant vectorization (but you don’t
  need to specify it for x86-64 as it is part of the base 64-bit architecture).
  Similarly, for the PowerPC architecture, you should specify @code{-maltivec}.
  
*************** placed immediately within the loop will
*** 20340,20346 ****
  omit the non-vectorized version of the loop as well as the run-time test.
  
  @node Other Optimization Switches,Optimization and Strict Aliasing,Vectorization of loops,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution other-optimization-switches}@anchor{18a}@anchor{gnat_ugn/gnat_and_program_execution id35}@anchor{18b}
  @subsubsection Other Optimization Switches
  
  
--- 20388,20394 ----
  omit the non-vectorized version of the loop as well as the run-time test.
  
  @node Other Optimization Switches,Optimization and Strict Aliasing,Vectorization of loops,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id35}@anchor{18a}@anchor{gnat_ugn/gnat_and_program_execution other-optimization-switches}@anchor{18b}
  @subsubsection Other Optimization Switches
  
  
*************** the @emph{Submodel Options} section in t
*** 20357,20363 ****
  chapter of @cite{Using the GNU Compiler Collection (GCC)}.
  
  @node Optimization and Strict Aliasing,Aliased Variables and Optimization,Other Optimization Switches,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution optimization-and-strict-aliasing}@anchor{e4}@anchor{gnat_ugn/gnat_and_program_execution id36}@anchor{18c}
  @subsubsection Optimization and Strict Aliasing
  
  
--- 20405,20411 ----
  chapter of @cite{Using the GNU Compiler Collection (GCC)}.
  
  @node Optimization and Strict Aliasing,Aliased Variables and Optimization,Other Optimization Switches,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id36}@anchor{18c}@anchor{gnat_ugn/gnat_and_program_execution optimization-and-strict-aliasing}@anchor{e4}
  @subsubsection Optimization and Strict Aliasing
  
  
*************** In this example, since the variable @cod
*** 20400,20406 ****
  of type @code{Int1}, and @code{Int2V} can only access objects of type
  @code{Int2}, there is no possibility that the assignment to
  @code{Int2V.all} affects the value of @code{Int1V.all}. This means that
! the compiler optimizer can "know" that the value @code{Int1V.all} is constant
  for all iterations of the loop and avoid the extra memory reference
  required to dereference it each time through the loop.
  
--- 20448,20454 ----
  of type @code{Int1}, and @code{Int2V} can only access objects of type
  @code{Int2}, there is no possibility that the assignment to
  @code{Int2V.all} affects the value of @code{Int1V.all}. This means that
! the compiler optimizer can “know” that the value @code{Int1V.all} is constant
  for all iterations of the loop and avoid the extra memory reference
  required to dereference it each time through the loop.
  
*************** end;
*** 20454,20460 ****
  @end quotation
  
  This program prints out 0 in @code{-O0} or @code{-O1}
! mode, but it prints out 1 in @code{-O2} mode. That's
  because in strict aliasing mode, the compiler can and
  does assume that the assignment to @code{v2.all} could not
  affect the value of @code{v1.all}, since different types
--- 20502,20508 ----
  @end quotation
  
  This program prints out 0 in @code{-O0} or @code{-O1}
! mode, but it prints out 1 in @code{-O2} mode. That’s
  because in strict aliasing mode, the compiler can and
  does assume that the assignment to @code{v2.all} could not
  affect the value of @code{v1.all}, since different types
*************** This behavior is not a case of non-confo
*** 20464,20470 ****
  the Ada RM specifies that an unchecked conversion where the resulting
  bit pattern is not a correct value of the target type can result in an
  abnormal value and attempting to reference an abnormal value makes the
! execution of a program erroneous.  That's the case here since the result
  does not point to an object of type @code{int2}.  This means that the
  effect is entirely unpredictable.
  
--- 20512,20518 ----
  the Ada RM specifies that an unchecked conversion where the resulting
  bit pattern is not a correct value of the target type can result in an
  abnormal value and attempting to reference an abnormal value makes the
! execution of a program erroneous.  That’s the case here since the result
  does not point to an object of type @code{int2}.  This means that the
  effect is entirely unpredictable.
  
*************** p2.adb:5:07: warning:  or use "pragma No
*** 20487,20493 ****
  @end quotation
  
  Unfortunately the problem is recognized when compiling the body of
! package @code{p2}, but the actual "bad" code is generated while
  compiling the body of @code{m} and this latter compilation does not see
  the suspicious @code{Unchecked_Conversion}.
  
--- 20535,20541 ----
  @end quotation
  
  Unfortunately the problem is recognized when compiling the body of
! package @code{p2}, but the actual “bad” code is generated while
  compiling the body of @code{m} and this latter compilation does not see
  the suspicious @code{Unchecked_Conversion}.
  
*************** the switch can be painful, so a more rea
*** 20508,20514 ****
  is to compile the entire program with options @code{-O2}
  and @code{-fno-strict-aliasing}. If the performance is
  satisfactory with this combination of options, then the
! advantage is that the entire issue of possible "wrong"
  optimization due to strict aliasing is avoided.
  
  To avoid the use of compiler switches, the configuration
--- 20556,20562 ----
  is to compile the entire program with options @code{-O2}
  and @code{-fno-strict-aliasing}. If the performance is
  satisfactory with this combination of options, then the
! advantage is that the entire issue of possible “wrong”
  optimization due to strict aliasing is avoided.
  
  To avoid the use of compiler switches, the configuration
*************** conversion to the unit in which the type
*** 20546,20552 ****
  this example, we would move the instantiation of
  @code{Unchecked_Conversion} from the body of package
  @code{p2} to the spec of package @code{p1}. Now the
! warning disappears. That's because any use of the
  access type knows there is a suspicious unchecked
  conversion, and the strict aliasing optimization
  is automatically suppressed for the type.
--- 20594,20600 ----
  this example, we would move the instantiation of
  @code{Unchecked_Conversion} from the body of package
  @code{p2} to the spec of package @code{p1}. Now the
! warning disappears. That’s because any use of the
  access type knows there is a suspicious unchecked
  conversion, and the strict aliasing optimization
  is automatically suppressed for the type.
*************** application code where the time is incre
*** 20587,20593 ****
  this optimization off. If you have code that includes significant
  usage of unchecked conversion, you might want to just stick with
  @code{-O1} and avoid the entire issue. If you get adequate
! performance at this level of optimization level, that's probably
  the safest approach. If tests show that you really need higher
  levels of optimization, then you can experiment with @code{-O2}
  and @code{-O2 -fno-strict-aliasing} to see how much effect this
--- 20635,20641 ----
  this optimization off. If you have code that includes significant
  usage of unchecked conversion, you might want to just stick with
  @code{-O1} and avoid the entire issue. If you get adequate
! performance at this level of optimization level, that’s probably
  the safest approach. If tests show that you really need higher
  levels of optimization, then you can experiment with @code{-O2}
  and @code{-O2 -fno-strict-aliasing} to see how much effect this
*************** review any uses of unchecked conversion
*** 20597,20603 ****
  particularly if you are getting the warnings described above.
  
  @node Aliased Variables and Optimization,Atomic Variables and Optimization,Optimization and Strict Aliasing,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id37}@anchor{18d}@anchor{gnat_ugn/gnat_and_program_execution aliased-variables-and-optimization}@anchor{18e}
  @subsubsection Aliased Variables and Optimization
  
  
--- 20645,20651 ----
  particularly if you are getting the warnings described above.
  
  @node Aliased Variables and Optimization,Atomic Variables and Optimization,Optimization and Strict Aliasing,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution aliased-variables-and-optimization}@anchor{18d}@anchor{gnat_ugn/gnat_and_program_execution id37}@anchor{18e}
  @subsubsection Aliased Variables and Optimization
  
  
*************** use low level techniques to modify varia
*** 20608,20614 ****
  that otherwise might be considered to be unassigned. For example,
  a variable can be passed to a procedure by reference, which takes
  the address of the parameter and uses the address to modify the
! variable's value, even though it is passed as an IN parameter.
  Consider the following example:
  
  @quotation
--- 20656,20662 ----
  that otherwise might be considered to be unassigned. For example,
  a variable can be passed to a procedure by reference, which takes
  the address of the parameter and uses the address to modify the
! variable’s value, even though it is passed as an IN parameter.
  Consider the following example:
  
  @quotation
*************** seems to work with no optimization to st
*** 20648,20657 ****
  levels of optimzization.
  
  What the compiler does for such cases is to assume that marking
! a variable as aliased indicates that some "funny business" may
  be going on. The optimizer recognizes the aliased keyword and
  inhibits optimizations that assume the value cannot be assigned.
! This means that the above example will in fact "work" reliably,
  that is, it will produce the expected results.
  
  @node Atomic Variables and Optimization,Passive Task Optimization,Aliased Variables and Optimization,Performance Considerations
--- 20696,20705 ----
  levels of optimzization.
  
  What the compiler does for such cases is to assume that marking
! a variable as aliased indicates that some “funny business” may
  be going on. The optimizer recognizes the aliased keyword and
  inhibits optimizations that assume the value cannot be assigned.
! This means that the above example will in fact “work” reliably,
  that is, it will produce the expected results.
  
  @node Atomic Variables and Optimization,Passive Task Optimization,Aliased Variables and Optimization,Performance Considerations
*************** Now the reference to RV must read the wh
*** 20722,20728 ****
  Actually one can imagine some compiler which figures
  out that the whole copy is not required (because only
  the B field is actually accessed), but GNAT
! certainly won't do that, and we don't know of any
  compiler that would not handle this right, and the
  above code will in practice work portably across
  all architectures (that permit the Atomic declaration).
--- 20770,20776 ----
  Actually one can imagine some compiler which figures
  out that the whole copy is not required (because only
  the B field is actually accessed), but GNAT
! certainly won’t do that, and we don’t know of any
  compiler that would not handle this right, and the
  above code will in practice work portably across
  all architectures (that permit the Atomic declaration).
*************** such synchronization code is not require
*** 20736,20742 ****
  useful to disable it.
  
  @node Passive Task Optimization,,Atomic Variables and Optimization,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution passive-task-optimization}@anchor{191}@anchor{gnat_ugn/gnat_and_program_execution id39}@anchor{192}
  @subsubsection Passive Task Optimization
  
  
--- 20784,20790 ----
  useful to disable it.
  
  @node Passive Task Optimization,,Atomic Variables and Optimization,Performance Considerations
! @anchor{gnat_ugn/gnat_and_program_execution id39}@anchor{191}@anchor{gnat_ugn/gnat_and_program_execution passive-task-optimization}@anchor{192}
  @subsubsection Passive Task Optimization
  
  
*************** operations will be optimized, and furthe
*** 20760,20766 ****
  performance is fully portable.
  
  Although it would theoretically be possible for GNAT to attempt to
! do this optimization, but it really doesn't make sense in the
  context of Ada 95, and none of the Ada 95 compilers implement
  this optimization as far as we know. In particular GNAT never
  attempts to perform this optimization.
--- 20808,20814 ----
  performance is fully portable.
  
  Although it would theoretically be possible for GNAT to attempt to
! do this optimization, but it really doesn’t make sense in the
  context of Ada 95, and none of the Ada 95 compilers implement
  this optimization as far as we know. In particular GNAT never
  attempts to perform this optimization.
*************** that typically clients of the tasks who
*** 20781,20787 ****
  to be modified, only the task definition itself.
  
  @node Text_IO Suggestions,Reducing Size of Executables with Unused Subprogram/Data Elimination,Performance Considerations,Improving Performance
! @anchor{gnat_ugn/gnat_and_program_execution text-io-suggestions}@anchor{193}@anchor{gnat_ugn/gnat_and_program_execution id40}@anchor{194}
  @subsection @code{Text_IO} Suggestions
  
  
--- 20829,20835 ----
  to be modified, only the task definition itself.
  
  @node Text_IO Suggestions,Reducing Size of Executables with Unused Subprogram/Data Elimination,Performance Considerations,Improving Performance
! @anchor{gnat_ugn/gnat_and_program_execution id40}@anchor{193}@anchor{gnat_ugn/gnat_and_program_execution text-io-suggestions}@anchor{194}
  @subsection @code{Text_IO} Suggestions
  
  
*************** your executable just by setting options
*** 20821,20827 ****
  @end menu
  
  @node About unused subprogram/data elimination,Compilation options,,Reducing Size of Executables with Unused Subprogram/Data Elimination
! @anchor{gnat_ugn/gnat_and_program_execution id42}@anchor{197}@anchor{gnat_ugn/gnat_and_program_execution about-unused-subprogram-data-elimination}@anchor{198}
  @subsubsection About unused subprogram/data elimination
  
  
--- 20869,20875 ----
  @end menu
  
  @node About unused subprogram/data elimination,Compilation options,,Reducing Size of Executables with Unused Subprogram/Data Elimination
! @anchor{gnat_ugn/gnat_and_program_execution about-unused-subprogram-data-elimination}@anchor{197}@anchor{gnat_ugn/gnat_and_program_execution id42}@anchor{198}
  @subsubsection About unused subprogram/data elimination
  
  
*************** architecture and on all cross platforms
*** 20837,20843 ****
  In both cases GNU binutils version 2.16 or later are required to enable it.
  
  @node Compilation options,Example of unused subprogram/data elimination,About unused subprogram/data elimination,Reducing Size of Executables with Unused Subprogram/Data Elimination
! @anchor{gnat_ugn/gnat_and_program_execution id43}@anchor{199}@anchor{gnat_ugn/gnat_and_program_execution compilation-options}@anchor{19a}
  @subsubsection Compilation options
  
  
--- 20885,20891 ----
  In both cases GNU binutils version 2.16 or later are required to enable it.
  
  @node Compilation options,Example of unused subprogram/data elimination,About unused subprogram/data elimination,Reducing Size of Executables with Unused Subprogram/Data Elimination
! @anchor{gnat_ugn/gnat_and_program_execution compilation-options}@anchor{199}@anchor{gnat_ugn/gnat_and_program_execution id43}@anchor{19a}
  @subsubsection Compilation options
  
  
*************** This section explains how to control the
*** 20962,20968 ****
  @end menu
  
  @node Background,Management of Overflows in GNAT,,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution id46}@anchor{19e}@anchor{gnat_ugn/gnat_and_program_execution background}@anchor{19f}
  @subsection Background
  
  
--- 21010,21016 ----
  @end menu
  
  @node Background,Management of Overflows in GNAT,,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution background}@anchor{19e}@anchor{gnat_ugn/gnat_and_program_execution id46}@anchor{19f}
  @subsection Background
  
  
*************** and then the application is moved to a c
*** 21039,21045 ****
  performed on the intermediate result and an unexpected exception is
  raised.
  
! Furthermore, when using Ada 2012's preconditions and other
  assertion forms, another issue arises. Consider:
  
  @quotation
--- 21087,21093 ----
  performed on the intermediate result and an unexpected exception is
  raised.
  
! Furthermore, when using Ada 2012’s preconditions and other
  assertion forms, another issue arises. Consider:
  
  @quotation
*************** mathematical versus run-time interpretat
*** 21097,21103 ****
  assertions, GNAT provides comprehensive control over the handling
  of intermediate overflow. GNAT can operate in three modes, and
  furthemore, permits separate selection of operating modes for
! the expressions within assertions (here the term 'assertions'
  is used in the technical sense, which includes preconditions and so forth)
  and for expressions appearing outside assertions.
  
--- 21145,21151 ----
  assertions, GNAT provides comprehensive control over the handling
  of intermediate overflow. GNAT can operate in three modes, and
  furthemore, permits separate selection of operating modes for
! the expressions within assertions (here the term ‘assertions’
  is used in the technical sense, which includes preconditions and so forth)
  and for expressions appearing outside assertions.
  
*************** out in the normal manner (with infinite
*** 21202,21208 ****
  range checks).
  
  @node Specifying the Desired Mode,Default Settings,Management of Overflows in GNAT,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution specifying-the-desired-mode}@anchor{e9}@anchor{gnat_ugn/gnat_and_program_execution id48}@anchor{1a2}
  @subsection Specifying the Desired Mode
  
  
--- 21250,21256 ----
  range checks).
  
  @node Specifying the Desired Mode,Default Settings,Management of Overflows in GNAT,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution id48}@anchor{1a2}@anchor{gnat_ugn/gnat_and_program_execution specifying-the-desired-mode}@anchor{e9}
  @subsection Specifying the Desired Mode
  
  
*************** pragma Overflow_Mode
*** 21251,21258 ****
  @end quotation
  
  specifies that general expressions outside assertions be evaluated
! in 'minimize intermediate overflows' mode, and expressions within
! assertions be evaluated in 'eliminate intermediate overflows' mode.
  This is often a reasonable choice, avoiding excessive overhead
  outside assertions, but assuring a high degree of portability
  when importing code from another compiler, while incurring
--- 21299,21306 ----
  @end quotation
  
  specifies that general expressions outside assertions be evaluated
! in ‘minimize intermediate overflows’ mode, and expressions within
! assertions be evaluated in ‘eliminate intermediate overflows’ mode.
  This is often a reasonable choice, avoiding excessive overhead
  outside assertions, but assuring a high degree of portability
  when importing code from another compiler, while incurring
*************** causing all intermediate operations to b
*** 21326,21332 ****
  type (@code{STRICT} mode).
  
  @node Default Settings,Implementation Notes,Specifying the Desired Mode,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution id49}@anchor{1a3}@anchor{gnat_ugn/gnat_and_program_execution default-settings}@anchor{1a4}
  @subsection Default Settings
  
  
--- 21374,21380 ----
  type (@code{STRICT} mode).
  
  @node Default Settings,Implementation Notes,Specifying the Desired Mode,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution default-settings}@anchor{1a3}@anchor{gnat_ugn/gnat_and_program_execution id49}@anchor{1a4}
  @subsection Default Settings
  
  
*************** checking, but it has no effect on the me
*** 21373,21379 ****
  intermediate results.
  
  @node Implementation Notes,,Default Settings,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution implementation-notes}@anchor{1a5}@anchor{gnat_ugn/gnat_and_program_execution id50}@anchor{1a6}
  @subsection Implementation Notes
  
  
--- 21421,21427 ----
  intermediate results.
  
  @node Implementation Notes,,Default Settings,Overflow Check Handling in GNAT
! @anchor{gnat_ugn/gnat_and_program_execution id50}@anchor{1a5}@anchor{gnat_ugn/gnat_and_program_execution implementation-notes}@anchor{1a6}
  @subsection Implementation Notes
  
  
*************** platforms for which @code{Long_Long_Inte
*** 21421,21427 ****
  platforms).
  
  @node Performing Dimensionality Analysis in GNAT,Stack Related Facilities,Overflow Check Handling in GNAT,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution performing-dimensionality-analysis-in-gnat}@anchor{1a7}@anchor{gnat_ugn/gnat_and_program_execution id51}@anchor{14a}
  @section Performing Dimensionality Analysis in GNAT
  
  
--- 21469,21475 ----
  platforms).
  
  @node Performing Dimensionality Analysis in GNAT,Stack Related Facilities,Overflow Check Handling in GNAT,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id51}@anchor{14a}@anchor{gnat_ugn/gnat_and_program_execution performing-dimensionality-analysis-in-gnat}@anchor{1a7}
  @section Performing Dimensionality Analysis in GNAT
  
  
*************** aspect.
*** 21655,21661 ****
  @end quotation
  
  The @code{Dimension} aspect of a dimensioned subtype @code{S} defines a mapping
! from the base type's Unit_Names to integer (or, more generally, rational)
  values. This mapping is the @emph{dimension vector} (also referred to as the
  @emph{dimensionality}) for that subtype, denoted by @code{DV(S)}, and thus for each
  object of that subtype. Intuitively, the value specified for each
--- 21703,21709 ----
  @end quotation
  
  The @code{Dimension} aspect of a dimensioned subtype @code{S} defines a mapping
! from the base type’s Unit_Names to integer (or, more generally, rational)
  values. This mapping is the @emph{dimension vector} (also referred to as the
  @emph{dimensionality}) for that subtype, denoted by @code{DV(S)}, and thus for each
  object of that subtype. Intuitively, the value specified for each
*************** then @emph{expr} is dimensionless; @code
*** 21698,21704 ****
  @code{DV(@emph{op expr})}, where @emph{op} is a unary operator, is @code{DV(@emph{expr})}
  
  @item 
! @code{DV(@emph{expr1 op expr2})} where @emph{op} is "+" or "-" is @code{DV(@emph{expr1})}
  provided that @code{DV(@emph{expr1})} = @code{DV(@emph{expr2})}.
  If this condition is not met then the construct is illegal.
  
--- 21746,21752 ----
  @code{DV(@emph{op expr})}, where @emph{op} is a unary operator, is @code{DV(@emph{expr})}
  
  @item 
! @code{DV(@emph{expr1 op expr2})} where @emph{op} is “+” or “-” is @code{DV(@emph{expr1})}
  provided that @code{DV(@emph{expr1})} = @code{DV(@emph{expr2})}.
  If this condition is not met then the construct is illegal.
  
*************** provided that @emph{power} is a static r
*** 21714,21726 ****
  met then the construct is illegal.
  @end itemize
  
! Note that, by the above rules, it is illegal to use binary "+" or "-" to
  combine a dimensioned and dimensionless value.  Thus an expression such as
  @code{acc-10.0} is illegal, where @code{acc} is an object of subtype
  @code{Acceleration}.
  
  The dimensionality checks for relationals use the same rules as
! for "+" and "-", except when comparing to a literal; thus
  
  @quotation
  
--- 21762,21774 ----
  met then the construct is illegal.
  @end itemize
  
! Note that, by the above rules, it is illegal to use binary “+” or “-” to
  combine a dimensioned and dimensionless value.  Thus an expression such as
  @code{acc-10.0} is illegal, where @code{acc} is an object of subtype
  @code{Acceleration}.
  
  The dimensionality checks for relationals use the same rules as
! for “+” and “-“, except when comparing to a literal; thus
  
  @quotation
  
*************** converted, for example, to a mass in pou
*** 21775,21781 ****
  If @code{T} is the base type for @emph{expr} (and the dimensionless root type of
  the dimension system), then @code{DV(T(@emph{expr}))} is @code{DV(expr)}.
  Thus, if @emph{expr} is of a dimensioned subtype of @code{T}, the conversion may
! be regarded as a "view conversion" that preserves dimensionality.
  
  This rule makes it possible to write generic code that can be instantiated
  with compatible dimensioned subtypes.  The generic unit will contain
--- 21823,21829 ----
  If @code{T} is the base type for @emph{expr} (and the dimensionless root type of
  the dimension system), then @code{DV(T(@emph{expr}))} is @code{DV(expr)}.
  Thus, if @emph{expr} is of a dimensioned subtype of @code{T}, the conversion may
! be regarded as a “view conversion” that preserves dimensionality.
  
  This rule makes it possible to write generic code that can be instantiated
  with compatible dimensioned subtypes.  The generic unit will contain
*************** passing (the dimension vector for the ac
*** 21808,21814 ****
  dimension vector for the formal parameter).
  
  @node Stack Related Facilities,Memory Management Issues,Performing Dimensionality Analysis in GNAT,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution stack-related-facilities}@anchor{1a8}@anchor{gnat_ugn/gnat_and_program_execution id52}@anchor{14b}
  @section Stack Related Facilities
  
  
--- 21856,21862 ----
  dimension vector for the formal parameter).
  
  @node Stack Related Facilities,Memory Management Issues,Performing Dimensionality Analysis in GNAT,GNAT and Program Execution
! @anchor{gnat_ugn/gnat_and_program_execution id52}@anchor{14b}@anchor{gnat_ugn/gnat_and_program_execution stack-related-facilities}@anchor{1a8}
  @section Stack Related Facilities
  
  
*************** some other task exceeds the available st
*** 21838,21844 ****
  behavior will occur. Most native systems offer some level of protection by
  adding a guard page at the end of each task stack. This mechanism is usually
  not enough for dealing properly with stack overflow situations because
! a large local variable could "jump" above the guard page.
  Furthermore, when the
  guard page is hit, there may not be any space left on the stack for executing
  the exception propagation code. Enabling stack checking avoids
--- 21886,21892 ----
  behavior will occur. Most native systems offer some level of protection by
  adding a guard page at the end of each task stack. This mechanism is usually
  not enough for dealing properly with stack overflow situations because
! a large local variable could “jump” above the guard page.
  Furthermore, when the
  guard page is hit, there may not be any space left on the stack for executing
  the exception propagation code. Enabling stack checking avoids
*************** subprogram whose stack usage might be la
*** 21918,21924 ****
  bytes.  The wording is in keeping with the qualifier documented above.
  
  @node Dynamic Stack Usage Analysis,,Static Stack Usage Analysis,Stack Related Facilities
! @anchor{gnat_ugn/gnat_and_program_execution id55}@anchor{1ab}@anchor{gnat_ugn/gnat_and_program_execution dynamic-stack-usage-analysis}@anchor{113}
  @subsection Dynamic Stack Usage Analysis
  
  
--- 21966,21972 ----
  bytes.  The wording is in keeping with the qualifier documented above.
  
  @node Dynamic Stack Usage Analysis,,Static Stack Usage Analysis,Stack Related Facilities
! @anchor{gnat_ugn/gnat_and_program_execution dynamic-stack-usage-analysis}@anchor{113}@anchor{gnat_ugn/gnat_and_program_execution id55}@anchor{1ab}
  @subsection Dynamic Stack Usage Analysis
  
  
*************** where:
*** 21977,21983 ****
  @item 
  @emph{Stack Usage} is the measure done by the stack analyzer.
  In order to prevent overflow, the stack
! is not entirely analyzed, and it's not possible to know exactly how
  much has actually been used.
  @end itemize
  
--- 22025,22031 ----
  @item 
  @emph{Stack Usage} is the measure done by the stack analyzer.
  In order to prevent overflow, the stack
! is not entirely analyzed, and it’s not possible to know exactly how
  much has actually been used.
  @end itemize
  
*************** stack-usage reports at run time. See its
*** 22006,22012 ****
  
  This section describes some useful memory pools provided in the GNAT library
  and in particular the GNAT Debug Pool facility, which can be used to detect
! incorrect uses of access values (including 'dangling references').
  
  
  @menu
--- 22054,22060 ----
  
  This section describes some useful memory pools provided in the GNAT library
  and in particular the GNAT Debug Pool facility, which can be used to detect
! incorrect uses of access values (including ‘dangling references’).
  
  
  @menu
*************** Debug Pool info:
*** 22260,22266 ****
  @c -- E.g. Ada |nbsp| 95
  
  @node Platform-Specific Information,Example of Binder Output File,GNAT and Program Execution,Top
! @anchor{gnat_ugn/platform_specific_information platform-specific-information}@anchor{d}@anchor{gnat_ugn/platform_specific_information doc}@anchor{1b1}@anchor{gnat_ugn/platform_specific_information id1}@anchor{1b2}
  @chapter Platform-Specific Information
  
  
--- 22308,22314 ----
  @c -- E.g. Ada |nbsp| 95
  
  @node Platform-Specific Information,Example of Binder Output File,GNAT and Program Execution,Top
! @anchor{gnat_ugn/platform_specific_information doc}@anchor{1b1}@anchor{gnat_ugn/platform_specific_information id1}@anchor{1b2}@anchor{gnat_ugn/platform_specific_information platform-specific-information}@anchor{d}
  @chapter Platform-Specific Information
  
  
*************** For exception handling, either or both o
*** 22306,22312 ****
  @itemize *
  
  @item 
! @strong{Zero-Cost Exceptions} ("ZCX"),
  which uses binder-generated tables that
  are interrogated at run time to locate a handler.
  
--- 22354,22360 ----
  @itemize *
  
  @item 
! @strong{Zero-Cost Exceptions} (“ZCX”),
  which uses binder-generated tables that
  are interrogated at run time to locate a handler.
  
*************** are interrogated at run time to locate a
*** 22315,22321 ****
  @geindex SJLJ (setjmp/longjmp Exception Model)
  
  @item 
! @strong{setjmp / longjmp} ('SJLJ'),
  which uses dynamically-set data to establish
  the set of handlers
  @end itemize
--- 22363,22369 ----
  @geindex SJLJ (setjmp/longjmp Exception Model)
  
  @item 
! @strong{setjmp / longjmp} (‘SJLJ’),
  which uses dynamically-set data to establish
  the set of handlers
  @end itemize
*************** are supplied on various GNAT platforms.
*** 22339,22345 ****
  @end menu
  
  @node Summary of Run-Time Configurations,,,Run-Time Libraries
! @anchor{gnat_ugn/platform_specific_information summary-of-run-time-configurations}@anchor{1b5}@anchor{gnat_ugn/platform_specific_information id3}@anchor{1b6}
  @subsection Summary of Run-Time Configurations
  
  
--- 22387,22393 ----
  @end menu
  
  @node Summary of Run-Time Configurations,,,Run-Time Libraries
! @anchor{gnat_ugn/platform_specific_information id3}@anchor{1b5}@anchor{gnat_ugn/platform_specific_information summary-of-run-time-configurations}@anchor{1b6}
  @subsection Summary of Run-Time Configurations
  
  
*************** ZCX
*** 22439,22445 ****
  
  
  @node Specifying a Run-Time Library,GNU/Linux Topics,Run-Time Libraries,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information specifying-a-run-time-library}@anchor{1b7}@anchor{gnat_ugn/platform_specific_information id4}@anchor{1b8}
  @section Specifying a Run-Time Library
  
  
--- 22487,22493 ----
  
  
  @node Specifying a Run-Time Library,GNU/Linux Topics,Run-Time Libraries,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information id4}@anchor{1b7}@anchor{gnat_ugn/platform_specific_information specifying-a-run-time-library}@anchor{1b8}
  @section Specifying a Run-Time Library
  
  
*************** Ignore : constant Boolean :=
*** 22590,22620 ****
  @end example
  @end quotation
  
! It gets the effective user id, and if it's not 0 (i.e. root), it raises
! Program_Error.
  
  @geindex Linux
  
  @geindex GNU/Linux
  
  @node GNU/Linux Topics,Microsoft Windows Topics,Specifying a Run-Time Library,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information id6}@anchor{1bb}@anchor{gnat_ugn/platform_specific_information gnu-linux-topics}@anchor{1bc}
  @section GNU/Linux Topics
  
  
  This section describes topics that are specific to GNU/Linux platforms.
! 
  @menu
  * Required Packages on GNU/Linux:: 
  
  @end menu
  
! @node Required Packages on GNU/Linux,,,GNU/Linux Topics
! @anchor{gnat_ugn/platform_specific_information id7}@anchor{1bd}@anchor{gnat_ugn/platform_specific_information required-packages-on-gnu-linux}@anchor{1be}
  @subsection Required Packages on GNU/Linux
  
  
! GNAT requires the C library developer's package to be installed.
  The name of of that package depends on your GNU/Linux distribution:
  
  
--- 22638,22672 ----
  @end example
  @end quotation
  
! It gets the effective user id, and if it’s not 0 (i.e. root), it raises
! Program_Error. Note that if you re running the code in a container, this may
! not be sufficient, as you may have sufficient priviledge on the container,
! but not on the host machine running the container, so check that you also
! have sufficient priviledge for running the container image.
  
  @geindex Linux
  
  @geindex GNU/Linux
  
  @node GNU/Linux Topics,Microsoft Windows Topics,Specifying a Run-Time Library,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information gnu-linux-topics}@anchor{1bb}@anchor{gnat_ugn/platform_specific_information id6}@anchor{1bc}
  @section GNU/Linux Topics
  
  
  This section describes topics that are specific to GNU/Linux platforms.
! @anchor{gnat_ugn/platform_specific_information required-packages-on-gnu-linux}@anchor{1bd}
  @menu
  * Required Packages on GNU/Linux:: 
+ * A GNU/Linux Debug Quirk:: 
  
  @end menu
  
! @node Required Packages on GNU/Linux,A GNU/Linux Debug Quirk,,GNU/Linux Topics
! @anchor{gnat_ugn/platform_specific_information a-gnu-linux-debug-quirk}@anchor{1be}@anchor{gnat_ugn/platform_specific_information id7}@anchor{1bf}
  @subsection Required Packages on GNU/Linux
  
  
! GNAT requires the C library developer’s package to be installed.
  The name of of that package depends on your GNU/Linux distribution:
  
  
*************** Debian, Ubuntu: @code{libc6-dev} (normal
*** 22628,22634 ****
  @end itemize
  
  If using the 32-bit version of GNAT on a 64-bit version of GNU/Linux,
! you'll need the 32-bit version of the following packages:
  
  
  @itemize *
--- 22680,22686 ----
  @end itemize
  
  If using the 32-bit version of GNAT on a 64-bit version of GNU/Linux,
! you’ll need the 32-bit version of the following packages:
  
  
  @itemize *
*************** Debian, Ubuntu: @code{libc6:i386}, @code
*** 22643,22652 ****
  Other GNU/Linux distributions might be choosing a different name
  for those packages.
  
  @geindex Windows
  
  @node Microsoft Windows Topics,Mac OS Topics,GNU/Linux Topics,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information microsoft-windows-topics}@anchor{1bf}@anchor{gnat_ugn/platform_specific_information id8}@anchor{1c0}
  @section Microsoft Windows Topics
  
  
--- 22695,22722 ----
  Other GNU/Linux distributions might be choosing a different name
  for those packages.
  
+ @node A GNU/Linux Debug Quirk,,Required Packages on GNU/Linux,GNU/Linux Topics
+ @anchor{gnat_ugn/platform_specific_information id8}@anchor{1c0}
+ @subsection A GNU/Linux Debug Quirk
+ 
+ 
+ On SuSE 15, some kernels have a defect causing issues when debugging
+ programs using threads or Ada tasks. Due to the lack of documentation
+ found regarding this kernel issue, we can only provide limited
+ information about which kernels are impacted: kernel version 5.3.18 is
+ known to be impacted, and kernels in the 5.14 range or newer are
+ believed to fix this problem.
+ 
+ The bug affects the debugging of 32-bit processes on a 64-bit system.
+ Symptoms can vary: Unexpected @code{SIGABRT} signals being received by
+ the program, “The futex facility returned an unexpected error code”
+ error message, and inferior programs hanging indefinitely range among
+ the symptoms most commonly observed.
+ 
  @geindex Windows
  
  @node Microsoft Windows Topics,Mac OS Topics,GNU/Linux Topics,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information id9}@anchor{1c1}@anchor{gnat_ugn/platform_specific_information microsoft-windows-topics}@anchor{1c2}
  @section Microsoft Windows Topics
  
  
*************** platforms.
*** 22667,22673 ****
  @end menu
  
  @node Using GNAT on Windows,Using a network installation of GNAT,,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information using-gnat-on-windows}@anchor{1c1}@anchor{gnat_ugn/platform_specific_information id9}@anchor{1c2}
  @subsection Using GNAT on Windows
  
  
--- 22737,22743 ----
  @end menu
  
  @node Using GNAT on Windows,Using a network installation of GNAT,,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information id10}@anchor{1c3}@anchor{gnat_ugn/platform_specific_information using-gnat-on-windows}@anchor{1c4}
  @subsection Using GNAT on Windows
  
  
*************** import libraries. Interfacing must be do
*** 22726,22732 ****
  @item 
  It is possible to link against Microsoft C libraries. Yet the preferred
  solution is to use C/C++ compiler that comes with GNAT, since it
! doesn't require having two different development environments and makes the
  inter-language debugging experience smoother.
  
  @item 
--- 22796,22802 ----
  @item 
  It is possible to link against Microsoft C libraries. Yet the preferred
  solution is to use C/C++ compiler that comes with GNAT, since it
! doesn’t require having two different development environments and makes the
  inter-language debugging experience smoother.
  
  @item 
*************** uninstall or integrate different GNAT pr
*** 22744,22750 ****
  @end itemize
  
  @node Using a network installation of GNAT,CONSOLE and WINDOWS subsystems,Using GNAT on Windows,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information id10}@anchor{1c3}@anchor{gnat_ugn/platform_specific_information using-a-network-installation-of-gnat}@anchor{1c4}
  @subsection Using a network installation of GNAT
  
  
--- 22814,22820 ----
  @end itemize
  
  @node Using a network installation of GNAT,CONSOLE and WINDOWS subsystems,Using GNAT on Windows,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information id11}@anchor{1c5}@anchor{gnat_ugn/platform_specific_information using-a-network-installation-of-gnat}@anchor{1c6}
  @subsection Using a network installation of GNAT
  
  
*************** transfer of large amounts of data across
*** 22771,22777 ****
  serious performance penalty.
  
  @node CONSOLE and WINDOWS subsystems,Temporary Files,Using a network installation of GNAT,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information id11}@anchor{1c5}@anchor{gnat_ugn/platform_specific_information console-and-windows-subsystems}@anchor{1c6}
  @subsection CONSOLE and WINDOWS subsystems
  
  
--- 22841,22847 ----
  serious performance penalty.
  
  @node CONSOLE and WINDOWS subsystems,Temporary Files,Using a network installation of GNAT,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information console-and-windows-subsystems}@anchor{1c7}@anchor{gnat_ugn/platform_specific_information id12}@anchor{1c8}
  @subsection CONSOLE and WINDOWS subsystems
  
  
*************** $ gnatmake winprog -largs -mwindows
*** 22796,22802 ****
  @end quotation
  
  @node Temporary Files,Disabling Command Line Argument Expansion,CONSOLE and WINDOWS subsystems,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information id12}@anchor{1c7}@anchor{gnat_ugn/platform_specific_information temporary-files}@anchor{1c8}
  @subsection Temporary Files
  
  
--- 22866,22872 ----
  @end quotation
  
  @node Temporary Files,Disabling Command Line Argument Expansion,CONSOLE and WINDOWS subsystems,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information id13}@anchor{1c9}@anchor{gnat_ugn/platform_specific_information temporary-files}@anchor{1ca}
  @subsection Temporary Files
  
  
*************** environments where you may not have writ
*** 22835,22841 ****
  directories.
  
  @node Disabling Command Line Argument Expansion,Windows Socket Timeouts,Temporary Files,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information disabling-command-line-argument-expansion}@anchor{1c9}
  @subsection Disabling Command Line Argument Expansion
  
  
--- 22905,22911 ----
  directories.
  
  @node Disabling Command Line Argument Expansion,Windows Socket Timeouts,Temporary Files,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information disabling-command-line-argument-expansion}@anchor{1cb}
  @subsection Disabling Command Line Argument Expansion
  
  
*************** Ada.Command_Line.Argument (1) -> "'*.txt
*** 22906,22912 ****
  @end example
  
  @node Windows Socket Timeouts,Mixed-Language Programming on Windows,Disabling Command Line Argument Expansion,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information windows-socket-timeouts}@anchor{1ca}
  @subsection Windows Socket Timeouts
  
  
--- 22976,22982 ----
  @end example
  
  @node Windows Socket Timeouts,Mixed-Language Programming on Windows,Disabling Command Line Argument Expansion,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information windows-socket-timeouts}@anchor{1cc}
  @subsection Windows Socket Timeouts
  
  
*************** shorter than 500 ms is needed on these W
*** 22952,22958 ****
  Check_Selector should be added before any socket read or write operations.
  
  @node Mixed-Language Programming on Windows,Windows Specific Add-Ons,Windows Socket Timeouts,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information id13}@anchor{1cb}@anchor{gnat_ugn/platform_specific_information mixed-language-programming-on-windows}@anchor{1cc}
  @subsection Mixed-Language Programming on Windows
  
  
--- 23022,23028 ----
  Check_Selector should be added before any socket read or write operations.
  
  @node Mixed-Language Programming on Windows,Windows Specific Add-Ons,Windows Socket Timeouts,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information id14}@anchor{1cd}@anchor{gnat_ugn/platform_specific_information mixed-language-programming-on-windows}@anchor{1ce}
  @subsection Mixed-Language Programming on Windows
  
  
*************** to use the Microsoft tools for your C++
*** 22974,22985 ****
  Encapsulate your C++ code in a DLL to be linked with your Ada
  application. In this case, use the Microsoft or whatever environment to
  build the DLL and use GNAT to build your executable
! (@ref{1cd,,Using DLLs with GNAT}).
  
  @item 
  Or you can encapsulate your Ada code in a DLL to be linked with the
  other part of your application. In this case, use GNAT to build the DLL
! (@ref{1ce,,Building DLLs with GNAT Project files}) and use the Microsoft
  or whatever environment to build your executable.
  @end itemize
  
--- 23044,23055 ----
  Encapsulate your C++ code in a DLL to be linked with your Ada
  application. In this case, use the Microsoft or whatever environment to
  build the DLL and use GNAT to build your executable
! (@ref{1cf,,Using DLLs with GNAT}).
  
  @item 
  Or you can encapsulate your Ada code in a DLL to be linked with the
  other part of your application. In this case, use GNAT to build the DLL
! (@ref{1d0,,Building DLLs with GNAT Project files}) and use the Microsoft
  or whatever environment to build your executable.
  @end itemize
  
*************** native SEH support is used.
*** 23036,23042 ****
  @end menu
  
  @node Windows Calling Conventions,Introduction to Dynamic Link Libraries DLLs,,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information windows-calling-conventions}@anchor{1cf}@anchor{gnat_ugn/platform_specific_information id14}@anchor{1d0}
  @subsubsection Windows Calling Conventions
  
  
--- 23106,23112 ----
  @end menu
  
  @node Windows Calling Conventions,Introduction to Dynamic Link Libraries DLLs,,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id15}@anchor{1d1}@anchor{gnat_ugn/platform_specific_information windows-calling-conventions}@anchor{1d2}
  @subsubsection Windows Calling Conventions
  
  
*************** calling convention. All convention speci
*** 23049,23057 ****
  platform.
  
  When a subprogram @code{F} (caller) calls a subprogram @code{G}
! (callee), there are several ways to push @code{G}'s parameters on the
  stack and there are several possible scenarios to clean up the stack
! upon @code{G}'s return. A calling convention is an agreed upon software
  protocol whereby the responsibilities between the caller (@code{F}) and
  the callee (@code{G}) are clearly defined. Several calling conventions
  are available for Windows:
--- 23119,23127 ----
  platform.
  
  When a subprogram @code{F} (caller) calls a subprogram @code{G}
! (callee), there are several ways to push @code{G}‘s parameters on the
  stack and there are several possible scenarios to clean up the stack
! upon @code{G}‘s return. A calling convention is an agreed upon software
  protocol whereby the responsibilities between the caller (@code{F}) and
  the callee (@code{G}) are clearly defined. Several calling conventions
  are available for Windows:
*************** are available for Windows:
*** 23081,23087 ****
  @end menu
  
  @node C Calling Convention,Stdcall Calling Convention,,Windows Calling Conventions
! @anchor{gnat_ugn/platform_specific_information c-calling-convention}@anchor{1d1}@anchor{gnat_ugn/platform_specific_information id15}@anchor{1d2}
  @subsubsection @code{C} Calling Convention
  
  
--- 23151,23157 ----
  @end menu
  
  @node C Calling Convention,Stdcall Calling Convention,,Windows Calling Conventions
! @anchor{gnat_ugn/platform_specific_information c-calling-convention}@anchor{1d3}@anchor{gnat_ugn/platform_specific_information id16}@anchor{1d4}
  @subsubsection @code{C} Calling Convention
  
  
*************** is missing, as in the above example, thi
*** 23123,23132 ****
  When importing a variable defined in C, you should always use the @code{C}
  calling convention unless the object containing the variable is part of a
  DLL (in which case you should use the @code{Stdcall} calling
! convention, @ref{1d3,,Stdcall Calling Convention}).
  
  @node Stdcall Calling Convention,Win32 Calling Convention,C Calling Convention,Windows Calling Conventions
! @anchor{gnat_ugn/platform_specific_information stdcall-calling-convention}@anchor{1d3}@anchor{gnat_ugn/platform_specific_information id16}@anchor{1d4}
  @subsubsection @code{Stdcall} Calling Convention
  
  
--- 23193,23202 ----
  When importing a variable defined in C, you should always use the @code{C}
  calling convention unless the object containing the variable is part of a
  DLL (in which case you should use the @code{Stdcall} calling
! convention, @ref{1d5,,Stdcall Calling Convention}).
  
  @node Stdcall Calling Convention,Win32 Calling Convention,C Calling Convention,Windows Calling Conventions
! @anchor{gnat_ugn/platform_specific_information id17}@anchor{1d6}@anchor{gnat_ugn/platform_specific_information stdcall-calling-convention}@anchor{1d5}
  @subsubsection @code{Stdcall} Calling Convention
  
  
*************** then the imported routine is @code{retri
*** 23194,23200 ****
  decoration at all. No leading underscore and no Stdcall suffix
  @code{@@@emph{nn}}.
  
! This is especially important as in some special cases a DLL's entry
  point name lacks a trailing @code{@@@emph{nn}} while the exported
  name generated for a call has it.
  
--- 23264,23270 ----
  decoration at all. No leading underscore and no Stdcall suffix
  @code{@@@emph{nn}}.
  
! This is especially important as in some special cases a DLL’s entry
  point name lacks a trailing @code{@@@emph{nn}} while the exported
  name generated for a call has it.
  
*************** Note that to ease building cross-platfor
*** 23223,23229 ****
  will be handled as a @code{C} calling convention on non-Windows platforms.
  
  @node Win32 Calling Convention,DLL Calling Convention,Stdcall Calling Convention,Windows Calling Conventions
! @anchor{gnat_ugn/platform_specific_information win32-calling-convention}@anchor{1d5}@anchor{gnat_ugn/platform_specific_information id17}@anchor{1d6}
  @subsubsection @code{Win32} Calling Convention
  
  
--- 23293,23299 ----
  will be handled as a @code{C} calling convention on non-Windows platforms.
  
  @node Win32 Calling Convention,DLL Calling Convention,Stdcall Calling Convention,Windows Calling Conventions
! @anchor{gnat_ugn/platform_specific_information id18}@anchor{1d7}@anchor{gnat_ugn/platform_specific_information win32-calling-convention}@anchor{1d8}
  @subsubsection @code{Win32} Calling Convention
  
  
*************** This convention, which is GNAT-specific
*** 23231,23237 ****
  @code{Stdcall} calling convention described above.
  
  @node DLL Calling Convention,,Win32 Calling Convention,Windows Calling Conventions
! @anchor{gnat_ugn/platform_specific_information id18}@anchor{1d7}@anchor{gnat_ugn/platform_specific_information dll-calling-convention}@anchor{1d8}
  @subsubsection @code{DLL} Calling Convention
  
  
--- 23301,23307 ----
  @code{Stdcall} calling convention described above.
  
  @node DLL Calling Convention,,Win32 Calling Convention,Windows Calling Conventions
! @anchor{gnat_ugn/platform_specific_information dll-calling-convention}@anchor{1d9}@anchor{gnat_ugn/platform_specific_information id19}@anchor{1da}
  @subsubsection @code{DLL} Calling Convention
  
  
*************** This convention, which is GNAT-specific
*** 23239,23245 ****
  @code{Stdcall} calling convention described above.
  
  @node Introduction to Dynamic Link Libraries DLLs,Using DLLs with GNAT,Windows Calling Conventions,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id19}@anchor{1d9}@anchor{gnat_ugn/platform_specific_information introduction-to-dynamic-link-libraries-dlls}@anchor{1da}
  @subsubsection Introduction to Dynamic Link Libraries (DLLs)
  
  
--- 23309,23315 ----
  @code{Stdcall} calling convention described above.
  
  @node Introduction to Dynamic Link Libraries DLLs,Using DLLs with GNAT,Windows Calling Conventions,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id20}@anchor{1db}@anchor{gnat_ugn/platform_specific_information introduction-to-dynamic-link-libraries-dlls}@anchor{1dc}
  @subsubsection Introduction to Dynamic Link Libraries (DLLs)
  
  
*************** application, a conflict will occur and t
*** 23316,23332 ****
  incorrectly. Hence, when possible, it is always preferable to use and
  build relocatable DLLs. Both relocatable and non-relocatable DLLs are
  supported by GNAT. Note that the @code{-s} linker option (see GNU Linker
! User's Guide) removes the debugging symbols from the DLL but the DLL can
  still be relocated.
  
  As a side note, an interesting difference between Microsoft DLLs and
  Unix shared libraries, is the fact that on most Unix systems all public
  routines are exported by default in a Unix shared library, while under
  Windows it is possible (but not required) to list exported routines in
! a definition file (see @ref{1db,,The Definition File}).
  
  @node Using DLLs with GNAT,Building DLLs with GNAT Project files,Introduction to Dynamic Link Libraries DLLs,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id20}@anchor{1dc}@anchor{gnat_ugn/platform_specific_information using-dlls-with-gnat}@anchor{1cd}
  @subsubsection Using DLLs with GNAT
  
  
--- 23386,23402 ----
  incorrectly. Hence, when possible, it is always preferable to use and
  build relocatable DLLs. Both relocatable and non-relocatable DLLs are
  supported by GNAT. Note that the @code{-s} linker option (see GNU Linker
! User’s Guide) removes the debugging symbols from the DLL but the DLL can
  still be relocated.
  
  As a side note, an interesting difference between Microsoft DLLs and
  Unix shared libraries, is the fact that on most Unix systems all public
  routines are exported by default in a Unix shared library, while under
  Windows it is possible (but not required) to list exported routines in
! a definition file (see @ref{1dd,,The Definition File}).
  
  @node Using DLLs with GNAT,Building DLLs with GNAT Project files,Introduction to Dynamic Link Libraries DLLs,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id21}@anchor{1de}@anchor{gnat_ugn/platform_specific_information using-dlls-with-gnat}@anchor{1cf}
  @subsubsection Using DLLs with GNAT
  
  
*************** header files provided with the DLL.
*** 23345,23351 ****
  The import library (@code{libAPI.dll.a} or @code{API.lib}). As previously
  mentioned an import library is a statically linked library containing the
  import table which will be filled at load time to point to the actual
! @code{API.dll} routines. Sometimes you don't have an import library for the
  DLL you want to use. The following sections will explain how to build
  one. Note that this is optional.
  
--- 23415,23421 ----
  The import library (@code{libAPI.dll.a} or @code{API.lib}). As previously
  mentioned an import library is a statically linked library containing the
  import table which will be filled at load time to point to the actual
! @code{API.dll} routines. Sometimes you don’t have an import library for the
  DLL you want to use. The following sections will explain how to build
  one. Note that this is optional.
  
*************** example a fictitious DLL called @code{AP
*** 23417,23423 ****
  @end menu
  
  @node Creating an Ada Spec for the DLL Services,Creating an Import Library,,Using DLLs with GNAT
! @anchor{gnat_ugn/platform_specific_information id21}@anchor{1dd}@anchor{gnat_ugn/platform_specific_information creating-an-ada-spec-for-the-dll-services}@anchor{1de}
  @subsubsection Creating an Ada Spec for the DLL Services
  
  
--- 23487,23493 ----
  @end menu
  
  @node Creating an Ada Spec for the DLL Services,Creating an Import Library,,Using DLLs with GNAT
! @anchor{gnat_ugn/platform_specific_information creating-an-ada-spec-for-the-dll-services}@anchor{1df}@anchor{gnat_ugn/platform_specific_information id22}@anchor{1e0}
  @subsubsection Creating an Ada Spec for the DLL Services
  
  
*************** end API;
*** 23457,23463 ****
  @end quotation
  
  @node Creating an Import Library,,Creating an Ada Spec for the DLL Services,Using DLLs with GNAT
! @anchor{gnat_ugn/platform_specific_information id22}@anchor{1df}@anchor{gnat_ugn/platform_specific_information creating-an-import-library}@anchor{1e0}
  @subsubsection Creating an Import Library
  
  
--- 23527,23533 ----
  @end quotation
  
  @node Creating an Import Library,,Creating an Ada Spec for the DLL Services,Using DLLs with GNAT
! @anchor{gnat_ugn/platform_specific_information creating-an-import-library}@anchor{1e1}@anchor{gnat_ugn/platform_specific_information id23}@anchor{1e2}
  @subsubsection Creating an Import Library
  
  
*************** as in this case it is possible to link d
*** 23471,23477 ****
  DLL. Otherwise read on.
  
  @geindex Definition file
! @anchor{gnat_ugn/platform_specific_information the-definition-file}@anchor{1db}
  @subsubheading The Definition File
  
  
--- 23541,23547 ----
  DLL. Otherwise read on.
  
  @geindex Definition file
! @anchor{gnat_ugn/platform_specific_information the-definition-file}@anchor{1dd}
  @subsubheading The Definition File
  
  
*************** EXPORTS
*** 23519,23535 ****
  @end table
  
  Note that you must specify the correct suffix (@code{@@@emph{nn}})
! (see @ref{1cf,,Windows Calling Conventions}) for a Stdcall
  calling convention function in the exported symbols list.
  
  There can actually be other sections in a definition file, but these
  sections are not relevant to the discussion at hand.
! @anchor{gnat_ugn/platform_specific_information create-def-file-automatically}@anchor{1e1}
  @subsubheading Creating a Definition File Automatically
  
  
  You can automatically create the definition file @code{API.def}
! (see @ref{1db,,The Definition File}) from a DLL.
  For that use the @code{dlltool} program as follows:
  
  @quotation
--- 23589,23605 ----
  @end table
  
  Note that you must specify the correct suffix (@code{@@@emph{nn}})
! (see @ref{1d2,,Windows Calling Conventions}) for a Stdcall
  calling convention function in the exported symbols list.
  
  There can actually be other sections in a definition file, but these
  sections are not relevant to the discussion at hand.
! @anchor{gnat_ugn/platform_specific_information create-def-file-automatically}@anchor{1e3}
  @subsubheading Creating a Definition File Automatically
  
  
  You can automatically create the definition file @code{API.def}
! (see @ref{1dd,,The Definition File}) from a DLL.
  For that use the @code{dlltool} program as follows:
  
  @quotation
*************** $ dlltool API.dll -z API.def --export-al
*** 23539,23546 ****
  @end example
  
  Note that if some routines in the DLL have the @code{Stdcall} convention
! (@ref{1cf,,Windows Calling Conventions}) with stripped @code{@@@emph{nn}}
! suffix then you'll have to edit @code{api.def} to add it, and specify
  @code{-k} to @code{gnatdll} when creating the import library.
  
  Here are some hints to find the right @code{@@@emph{nn}} suffix.
--- 23609,23616 ----
  @end example
  
  Note that if some routines in the DLL have the @code{Stdcall} convention
! (@ref{1d2,,Windows Calling Conventions}) with stripped @code{@@@emph{nn}}
! suffix then you’ll have to edit @code{api.def} to add it, and specify
  @code{-k} to @code{gnatdll} when creating the import library.
  
  Here are some hints to find the right @code{@@@emph{nn}} suffix.
*************** tells you what symbol is expected. You j
*** 23563,23575 ****
  definition file and add the right suffix.
  @end itemize
  @end quotation
! @anchor{gnat_ugn/platform_specific_information gnat-style-import-library}@anchor{1e2}
  @subsubheading GNAT-Style Import Library
  
  
  To create a static import library from @code{API.dll} with the GNAT tools
  you should create the .def file, then use @code{gnatdll} tool
! (see @ref{1e3,,Using gnatdll}) as follows:
  
  @quotation
  
--- 23633,23645 ----
  definition file and add the right suffix.
  @end itemize
  @end quotation
! @anchor{gnat_ugn/platform_specific_information gnat-style-import-library}@anchor{1e4}
  @subsubheading GNAT-Style Import Library
  
  
  To create a static import library from @code{API.dll} with the GNAT tools
  you should create the .def file, then use @code{gnatdll} tool
! (see @ref{1e5,,Using gnatdll}) as follows:
  
  @quotation
  
*************** definition file name is @code{xyz.def},
*** 23585,23603 ****
  be @code{libxyz.a}. Note that in the previous example option
  @code{-e} could have been removed because the name of the definition
  file (before the @code{.def} suffix) is the same as the name of the
! DLL (@ref{1e3,,Using gnatdll} for more information about @code{gnatdll}).
  @end quotation
! @anchor{gnat_ugn/platform_specific_information msvs-style-import-library}@anchor{1e4}
  @subsubheading Microsoft-Style Import Library
  
  
  A Microsoft import library is needed only if you plan to make an
  Ada DLL available to applications developed with Microsoft
! tools (@ref{1cc,,Mixed-Language Programming on Windows}).
  
  To create a Microsoft-style import library for @code{API.dll} you
  should create the .def file, then build the actual import library using
! Microsoft's @code{lib} utility:
  
  @quotation
  
--- 23655,23673 ----
  be @code{libxyz.a}. Note that in the previous example option
  @code{-e} could have been removed because the name of the definition
  file (before the @code{.def} suffix) is the same as the name of the
! DLL (@ref{1e5,,Using gnatdll} for more information about @code{gnatdll}).
  @end quotation
! @anchor{gnat_ugn/platform_specific_information msvs-style-import-library}@anchor{1e6}
  @subsubheading Microsoft-Style Import Library
  
  
  A Microsoft import library is needed only if you plan to make an
  Ada DLL available to applications developed with Microsoft
! tools (@ref{1ce,,Mixed-Language Programming on Windows}).
  
  To create a Microsoft-style import library for @code{API.dll} you
  should create the .def file, then build the actual import library using
! Microsoft’s @code{lib} utility:
  
  @quotation
  
*************** See the Microsoft documentation for furt
*** 23617,23623 ****
  @end quotation
  
  @node Building DLLs with GNAT Project files,Building DLLs with GNAT,Using DLLs with GNAT,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id23}@anchor{1e5}@anchor{gnat_ugn/platform_specific_information building-dlls-with-gnat-project-files}@anchor{1ce}
  @subsubsection Building DLLs with GNAT Project files
  
  
--- 23687,23693 ----
  @end quotation
  
  @node Building DLLs with GNAT Project files,Building DLLs with GNAT,Using DLLs with GNAT,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information building-dlls-with-gnat-project-files}@anchor{1d0}@anchor{gnat_ugn/platform_specific_information id24}@anchor{1e7}
  @subsubsection Building DLLs with GNAT Project files
  
  
*************** See the Microsoft documentation for furt
*** 23626,23639 ****
  
  There is nothing specific to Windows in the build process.
  See the @emph{Library Projects} section in the @emph{GNAT Project Manager}
! chapter of the @emph{GPRbuild User's Guide}.
  
  Due to a system limitation, it is not possible under Windows to create threads
  when inside the @code{DllMain} routine which is used for auto-initialization
  of shared libraries, so it is not possible to have library level tasks in SALs.
  
  @node Building DLLs with GNAT,Building DLLs with gnatdll,Building DLLs with GNAT Project files,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information building-dlls-with-gnat}@anchor{1e6}@anchor{gnat_ugn/platform_specific_information id24}@anchor{1e7}
  @subsubsection Building DLLs with GNAT
  
  
--- 23696,23709 ----
  
  There is nothing specific to Windows in the build process.
  See the @emph{Library Projects} section in the @emph{GNAT Project Manager}
! chapter of the @emph{GPRbuild User’s Guide}.
  
  Due to a system limitation, it is not possible under Windows to create threads
  when inside the @code{DllMain} routine which is used for auto-initialization
  of shared libraries, so it is not possible to have library level tasks in SALs.
  
  @node Building DLLs with GNAT,Building DLLs with gnatdll,Building DLLs with GNAT Project files,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information building-dlls-with-gnat}@anchor{1e8}@anchor{gnat_ugn/platform_specific_information id25}@anchor{1e9}
  @subsubsection Building DLLs with GNAT
  
  
*************** $ gcc -shared -shared-libgcc -o api.dll
*** 23664,23670 ****
  It is important to note that in this case all symbols found in the
  object files are automatically exported. It is possible to restrict
  the set of symbols to export by passing to @code{gcc} a definition
! file (see @ref{1db,,The Definition File}).
  For example:
  
  @example
--- 23734,23740 ----
  It is important to note that in this case all symbols found in the
  object files are automatically exported. It is possible to restrict
  the set of symbols to export by passing to @code{gcc} a definition
! file (see @ref{1dd,,The Definition File}).
  For example:
  
  @example
*************** $ gcc -shared -shared-libgcc -o api.dll
*** 23673,23679 ****
  
  If you use a definition file you must export the elaboration procedures
  for every package that required one. Elaboration procedures are named
! using the package name followed by "_E".
  
  @item 
  Preparing DLL to be used.
--- 23743,23749 ----
  
  If you use a definition file you must export the elaboration procedures
  for every package that required one. Elaboration procedures are named
! using the package name followed by “_E”.
  
  @item 
  Preparing DLL to be used.
*************** $ gnatmake main -Iapilib -bargs -shared
*** 23702,23708 ****
  @end quotation
  
  @node Building DLLs with gnatdll,Ada DLLs and Finalization,Building DLLs with GNAT,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information building-dlls-with-gnatdll}@anchor{1e8}@anchor{gnat_ugn/platform_specific_information id25}@anchor{1e9}
  @subsubsection Building DLLs with gnatdll
  
  
--- 23772,23778 ----
  @end quotation
  
  @node Building DLLs with gnatdll,Ada DLLs and Finalization,Building DLLs with GNAT,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information building-dlls-with-gnatdll}@anchor{1ea}@anchor{gnat_ugn/platform_specific_information id26}@anchor{1eb}
  @subsubsection Building DLLs with gnatdll
  
  
*************** $ gnatmake main -Iapilib -bargs -shared
*** 23710,23717 ****
  @geindex building
  
  Note that it is preferred to use GNAT Project files
! (@ref{1ce,,Building DLLs with GNAT Project files}) or the built-in GNAT
! DLL support (@ref{1e6,,Building DLLs with GNAT}) or to build DLLs.
  
  This section explains how to build DLLs containing Ada code using
  @code{gnatdll}. These DLLs will be referred to as Ada DLLs in the
--- 23780,23787 ----
  @geindex building
  
  Note that it is preferred to use GNAT Project files
! (@ref{1d0,,Building DLLs with GNAT Project files}) or the built-in GNAT
! DLL support (@ref{1e8,,Building DLLs with GNAT}) or to build DLLs.
  
  This section explains how to build DLLs containing Ada code using
  @code{gnatdll}. These DLLs will be referred to as Ada DLLs in the
*************** non-Ada applications are as follows:
*** 23727,23746 ****
  You need to mark each Ada entity exported by the DLL with a @code{C} or
  @code{Stdcall} calling convention to avoid any Ada name mangling for the
  entities exported by the DLL
! (see @ref{1ea,,Exporting Ada Entities}). You can
  skip this step if you plan to use the Ada DLL only from Ada applications.
  
  @item 
  Your Ada code must export an initialization routine which calls the routine
  @code{adainit} generated by @code{gnatbind} to perform the elaboration of
! the Ada code in the DLL (@ref{1eb,,Ada DLLs and Elaboration}). The initialization
  routine exported by the Ada DLL must be invoked by the clients of the DLL
  to initialize the DLL.
  
  @item 
  When useful, the DLL should also export a finalization routine which calls
  routine @code{adafinal} generated by @code{gnatbind} to perform the
! finalization of the Ada code in the DLL (@ref{1ec,,Ada DLLs and Finalization}).
  The finalization routine exported by the Ada DLL must be invoked by the
  clients of the DLL when the DLL services are no further needed.
  
--- 23797,23816 ----
  You need to mark each Ada entity exported by the DLL with a @code{C} or
  @code{Stdcall} calling convention to avoid any Ada name mangling for the
  entities exported by the DLL
! (see @ref{1ec,,Exporting Ada Entities}). You can
  skip this step if you plan to use the Ada DLL only from Ada applications.
  
  @item 
  Your Ada code must export an initialization routine which calls the routine
  @code{adainit} generated by @code{gnatbind} to perform the elaboration of
! the Ada code in the DLL (@ref{1ed,,Ada DLLs and Elaboration}). The initialization
  routine exported by the Ada DLL must be invoked by the clients of the DLL
  to initialize the DLL.
  
  @item 
  When useful, the DLL should also export a finalization routine which calls
  routine @code{adafinal} generated by @code{gnatbind} to perform the
! finalization of the Ada code in the DLL (@ref{1ee,,Ada DLLs and Finalization}).
  The finalization routine exported by the Ada DLL must be invoked by the
  clients of the DLL when the DLL services are no further needed.
  
*************** of the programming languages to which yo
*** 23750,23760 ****
  
  @item 
  You must provide a definition file listing the exported entities
! (@ref{1db,,The Definition File}).
  
  @item 
  Finally you must use @code{gnatdll} to produce the DLL and the import
! library (@ref{1e3,,Using gnatdll}).
  @end itemize
  
  Note that a relocatable DLL stripped using the @code{strip}
--- 23820,23830 ----
  
  @item 
  You must provide a definition file listing the exported entities
! (@ref{1dd,,The Definition File}).
  
  @item 
  Finally you must use @code{gnatdll} to produce the DLL and the import
! library (@ref{1e5,,Using gnatdll}).
  @end itemize
  
  Note that a relocatable DLL stripped using the @code{strip}
*************** binutils tool will not be relocatable an
*** 23762,23768 ****
  debug information pass @code{-largs -s} to @code{gnatdll}. This
  restriction does not apply to a DLL built using a Library Project.
  See the @emph{Library Projects} section in the @emph{GNAT Project Manager}
! chapter of the @emph{GPRbuild User's Guide}.
  
  @c Limitations_When_Using_Ada_DLLs_from Ada:
  
--- 23832,23838 ----
  debug information pass @code{-largs -s} to @code{gnatdll}. This
  restriction does not apply to a DLL built using a Library Project.
  See the @emph{Library Projects} section in the @emph{GNAT Project Manager}
! chapter of the @emph{GPRbuild User’s Guide}.
  
  @c Limitations_When_Using_Ada_DLLs_from Ada:
  
*************** chapter of the @emph{GPRbuild User's Gui
*** 23774,23780 ****
  @end menu
  
  @node Limitations When Using Ada DLLs from Ada,Exporting Ada Entities,,Building DLLs with gnatdll
! @anchor{gnat_ugn/platform_specific_information limitations-when-using-ada-dlls-from-ada}@anchor{1ed}
  @subsubsection Limitations When Using Ada DLLs from Ada
  
  
--- 23844,23850 ----
  @end menu
  
  @node Limitations When Using Ada DLLs from Ada,Exporting Ada Entities,,Building DLLs with gnatdll
! @anchor{gnat_ugn/platform_specific_information limitations-when-using-ada-dlls-from-ada}@anchor{1ef}
  @subsubsection Limitations When Using Ada DLLs from Ada
  
  
*************** It is completely safe to exchange plain
*** 23795,23801 ****
  Windows object handles, etc.
  
  @node Exporting Ada Entities,Ada DLLs and Elaboration,Limitations When Using Ada DLLs from Ada,Building DLLs with gnatdll
! @anchor{gnat_ugn/platform_specific_information exporting-ada-entities}@anchor{1ea}@anchor{gnat_ugn/platform_specific_information id26}@anchor{1ee}
  @subsubsection Exporting Ada Entities
  
  
--- 23865,23871 ----
  Windows object handles, etc.
  
  @node Exporting Ada Entities,Ada DLLs and Elaboration,Limitations When Using Ada DLLs from Ada,Building DLLs with gnatdll
! @anchor{gnat_ugn/platform_specific_information exporting-ada-entities}@anchor{1ec}@anchor{gnat_ugn/platform_specific_information id27}@anchor{1f0}
  @subsubsection Exporting Ada Entities
  
  
*************** end API;
*** 23895,23904 ****
  Note that if you do not export the Ada entities with a @code{C} or
  @code{Stdcall} convention you will have to provide the mangled Ada names
  in the definition file of the Ada DLL
! (@ref{1ef,,Creating the Definition File}).
  
  @node Ada DLLs and Elaboration,,Exporting Ada Entities,Building DLLs with gnatdll
! @anchor{gnat_ugn/platform_specific_information ada-dlls-and-elaboration}@anchor{1eb}@anchor{gnat_ugn/platform_specific_information id27}@anchor{1f0}
  @subsubsection Ada DLLs and Elaboration
  
  
--- 23965,23974 ----
  Note that if you do not export the Ada entities with a @code{C} or
  @code{Stdcall} convention you will have to provide the mangled Ada names
  in the definition file of the Ada DLL
! (@ref{1f1,,Creating the Definition File}).
  
  @node Ada DLLs and Elaboration,,Exporting Ada Entities,Building DLLs with gnatdll
! @anchor{gnat_ugn/platform_specific_information ada-dlls-and-elaboration}@anchor{1ed}@anchor{gnat_ugn/platform_specific_information id28}@anchor{1f2}
  @subsubsection Ada DLLs and Elaboration
  
  
*************** the Ada elaboration routine @code{adaini
*** 23916,23922 ****
  (@ref{a0,,Binding with Non-Ada Main Programs}). See the body of
  @code{Initialize_Api} for an example. Note that the GNAT binder is
  automatically invoked during the DLL build process by the @code{gnatdll}
! tool (@ref{1e3,,Using gnatdll}).
  
  When a DLL is loaded, Windows systematically invokes a routine called
  @code{DllMain}. It would therefore be possible to call @code{adainit}
--- 23986,23992 ----
  (@ref{a0,,Binding with Non-Ada Main Programs}). See the body of
  @code{Initialize_Api} for an example. Note that the GNAT binder is
  automatically invoked during the DLL build process by the @code{gnatdll}
! tool (@ref{1e5,,Using gnatdll}).
  
  When a DLL is loaded, Windows systematically invokes a routine called
  @code{DllMain}. It would therefore be possible to call @code{adainit}
*************** directly from @code{DllMain} without hav
*** 23924,23935 ****
  initialization routine. Unfortunately, it is not possible to call
  @code{adainit} from the @code{DllMain} if your program has library level
  tasks because access to the @code{DllMain} entry point is serialized by
! the system (that is, only a single thread can execute 'through' it at a
  time), which means that the GNAT run-time will deadlock waiting for the
  newly created task to complete its initialization.
  
  @node Ada DLLs and Finalization,Creating a Spec for Ada DLLs,Building DLLs with gnatdll,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id28}@anchor{1f1}@anchor{gnat_ugn/platform_specific_information ada-dlls-and-finalization}@anchor{1ec}
  @subsubsection Ada DLLs and Finalization
  
  
--- 23994,24005 ----
  initialization routine. Unfortunately, it is not possible to call
  @code{adainit} from the @code{DllMain} if your program has library level
  tasks because access to the @code{DllMain} entry point is serialized by
! the system (that is, only a single thread can execute ‘through’ it at a
  time), which means that the GNAT run-time will deadlock waiting for the
  newly created task to complete its initialization.
  
  @node Ada DLLs and Finalization,Creating a Spec for Ada DLLs,Building DLLs with gnatdll,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information ada-dlls-and-finalization}@anchor{1ee}@anchor{gnat_ugn/platform_specific_information id29}@anchor{1f3}
  @subsubsection Ada DLLs and Finalization
  
  
*************** routine @code{adafinal} generated by the
*** 23944,23953 ****
  See the body of @code{Finalize_Api} for an
  example. As already pointed out the GNAT binder is automatically invoked
  during the DLL build process by the @code{gnatdll} tool
! (@ref{1e3,,Using gnatdll}).
  
  @node Creating a Spec for Ada DLLs,GNAT and Windows Resources,Ada DLLs and Finalization,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id29}@anchor{1f2}@anchor{gnat_ugn/platform_specific_information creating-a-spec-for-ada-dlls}@anchor{1f3}
  @subsubsection Creating a Spec for Ada DLLs
  
  
--- 24014,24023 ----
  See the body of @code{Finalize_Api} for an
  example. As already pointed out the GNAT binder is automatically invoked
  during the DLL build process by the @code{gnatdll} tool
! (@ref{1e5,,Using gnatdll}).
  
  @node Creating a Spec for Ada DLLs,GNAT and Windows Resources,Ada DLLs and Finalization,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information creating-a-spec-for-ada-dlls}@anchor{1f4}@anchor{gnat_ugn/platform_specific_information id30}@anchor{1f5}
  @subsubsection Creating a Spec for Ada DLLs
  
  
*************** end API;
*** 24005,24011 ****
  @end menu
  
  @node Creating the Definition File,Using gnatdll,,Creating a Spec for Ada DLLs
! @anchor{gnat_ugn/platform_specific_information creating-the-definition-file}@anchor{1ef}@anchor{gnat_ugn/platform_specific_information id30}@anchor{1f4}
  @subsubsection Creating the Definition File
  
  
--- 24075,24081 ----
  @end menu
  
  @node Creating the Definition File,Using gnatdll,,Creating a Spec for Ada DLLs
! @anchor{gnat_ugn/platform_specific_information creating-the-definition-file}@anchor{1f1}@anchor{gnat_ugn/platform_specific_information id31}@anchor{1f6}
  @subsubsection Creating the Definition File
  
  
*************** EXPORTS
*** 24041,24047 ****
  @end quotation
  
  @node Using gnatdll,,Creating the Definition File,Creating a Spec for Ada DLLs
! @anchor{gnat_ugn/platform_specific_information using-gnatdll}@anchor{1e3}@anchor{gnat_ugn/platform_specific_information id31}@anchor{1f5}
  @subsubsection Using @code{gnatdll}
  
  
--- 24111,24117 ----
  @end quotation
  
  @node Using gnatdll,,Creating the Definition File,Creating a Spec for Ada DLLs
! @anchor{gnat_ugn/platform_specific_information id32}@anchor{1f7}@anchor{gnat_ugn/platform_specific_information using-gnatdll}@anchor{1e5}
  @subsubsection Using @code{gnatdll}
  
  
*************** object files needed to build the DLL.
*** 24145,24151 ****
  
  @item @code{-k}
  
! Removes the @code{@@@emph{nn}} suffix from the import library's exported
  names, but keeps them for the link names. You must specify this
  option if you want to use a @code{Stdcall} function in a DLL for which
  the @code{@@@emph{nn}} suffix has been removed. This is the case for most
--- 24215,24221 ----
  
  @item @code{-k}
  
! Removes the @code{@@@emph{nn}} suffix from the import library’s exported
  names, but keeps them for the link names. You must specify this
  option if you want to use a @code{Stdcall} function in a DLL for which
  the @code{@@@emph{nn}} suffix has been removed. This is the case for most
*************** asks @code{gnatlink} to generate the rou
*** 24252,24258 ****
  is loaded into memory.
  
  @item 
! @code{gnatdll} uses @code{dlltool} (see @ref{1f6,,Using dlltool}) to build the
  export table (@code{api.exp}). The export table contains the relocation
  information in a form which can be used during the final link to ensure
  that the Windows loader is able to place the DLL anywhere in memory.
--- 24322,24328 ----
  is loaded into memory.
  
  @item 
! @code{gnatdll} uses @code{dlltool} (see @ref{1f8,,Using dlltool}) to build the
  export table (@code{api.exp}). The export table contains the relocation
  information in a form which can be used during the final link to ensure
  that the Windows loader is able to place the DLL anywhere in memory.
*************** $ gnatbind -n api
*** 24291,24297 ****
  $ gnatlink api api.exp -o api.dll -mdll
  @end example
  @end itemize
! @anchor{gnat_ugn/platform_specific_information using-dlltool}@anchor{1f6}
  @subsubheading Using @code{dlltool}
  
  
--- 24361,24367 ----
  $ gnatlink api api.exp -o api.dll -mdll
  @end example
  @end itemize
! @anchor{gnat_ugn/platform_specific_information using-dlltool}@anchor{1f8}
  @subsubheading Using @code{dlltool}
  
  
*************** DLL in the static import library generat
*** 24350,24356 ****
  @item @code{-k}
  
  Kill @code{@@@emph{nn}} from exported names
! (@ref{1cf,,Windows Calling Conventions}
  for a discussion about @code{Stdcall}-style symbols.
  @end table
  
--- 24420,24426 ----
  @item @code{-k}
  
  Kill @code{@@@emph{nn}} from exported names
! (@ref{1d2,,Windows Calling Conventions}
  for a discussion about @code{Stdcall}-style symbols.
  @end table
  
*************** Use @code{assembler-name} as the assembl
*** 24406,24412 ****
  @end table
  
  @node GNAT and Windows Resources,Using GNAT DLLs from Microsoft Visual Studio Applications,Creating a Spec for Ada DLLs,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information gnat-and-windows-resources}@anchor{1f7}@anchor{gnat_ugn/platform_specific_information id32}@anchor{1f8}
  @subsubsection GNAT and Windows Resources
  
  
--- 24476,24482 ----
  @end table
  
  @node GNAT and Windows Resources,Using GNAT DLLs from Microsoft Visual Studio Applications,Creating a Spec for Ada DLLs,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information gnat-and-windows-resources}@anchor{1f9}@anchor{gnat_ugn/platform_specific_information id33}@anchor{1fa}
  @subsubsection GNAT and Windows Resources
  
  
*************** the corresponding Microsoft documentatio
*** 24501,24507 ****
  @end menu
  
  @node Building Resources,Compiling Resources,,GNAT and Windows Resources
! @anchor{gnat_ugn/platform_specific_information building-resources}@anchor{1f9}@anchor{gnat_ugn/platform_specific_information id33}@anchor{1fa}
  @subsubsection Building Resources
  
  
--- 24571,24577 ----
  @end menu
  
  @node Building Resources,Compiling Resources,,GNAT and Windows Resources
! @anchor{gnat_ugn/platform_specific_information building-resources}@anchor{1fb}@anchor{gnat_ugn/platform_specific_information id34}@anchor{1fc}
  @subsubsection Building Resources
  
  
*************** complete description of the resource scr
*** 24521,24527 ****
  Microsoft documentation.
  
  @node Compiling Resources,Using Resources,Building Resources,GNAT and Windows Resources
! @anchor{gnat_ugn/platform_specific_information compiling-resources}@anchor{1fb}@anchor{gnat_ugn/platform_specific_information id34}@anchor{1fc}
  @subsubsection Compiling Resources
  
  
--- 24591,24597 ----
  Microsoft documentation.
  
  @node Compiling Resources,Using Resources,Building Resources,GNAT and Windows Resources
! @anchor{gnat_ugn/platform_specific_information compiling-resources}@anchor{1fd}@anchor{gnat_ugn/platform_specific_information id35}@anchor{1fe}
  @subsubsection Compiling Resources
  
  
*************** $ windres -i myres.res -o myres.o
*** 24563,24569 ****
  @end quotation
  
  @node Using Resources,,Compiling Resources,GNAT and Windows Resources
! @anchor{gnat_ugn/platform_specific_information using-resources}@anchor{1fd}@anchor{gnat_ugn/platform_specific_information id35}@anchor{1fe}
  @subsubsection Using Resources
  
  
--- 24633,24639 ----
  @end quotation
  
  @node Using Resources,,Compiling Resources,GNAT and Windows Resources
! @anchor{gnat_ugn/platform_specific_information id36}@anchor{1ff}@anchor{gnat_ugn/platform_specific_information using-resources}@anchor{200}
  @subsubsection Using Resources
  
  
*************** $ gnatmake myprog -largs myres.o
*** 24583,24589 ****
  @end quotation
  
  @node Using GNAT DLLs from Microsoft Visual Studio Applications,Debugging a DLL,GNAT and Windows Resources,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information using-gnat-dll-from-msvs}@anchor{1ff}@anchor{gnat_ugn/platform_specific_information using-gnat-dlls-from-microsoft-visual-studio-applications}@anchor{200}
  @subsubsection Using GNAT DLLs from Microsoft Visual Studio Applications
  
  
--- 24653,24659 ----
  @end quotation
  
  @node Using GNAT DLLs from Microsoft Visual Studio Applications,Debugging a DLL,GNAT and Windows Resources,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information using-gnat-dll-from-msvs}@anchor{201}@anchor{gnat_ugn/platform_specific_information using-gnat-dlls-from-microsoft-visual-studio-applications}@anchor{202}
  @subsubsection Using GNAT DLLs from Microsoft Visual Studio Applications
  
  
*************** cookbook-style sequence of steps to foll
*** 24601,24607 ****
  
  @item 
  First develop and build the GNAT shared library using a library project
! (let's assume the project is @code{mylib.gpr}, producing the library @code{libmylib.dll}):
  @end enumerate
  
  @quotation
--- 24671,24677 ----
  
  @item 
  First develop and build the GNAT shared library using a library project
! (let’s assume the project is @code{mylib.gpr}, producing the library @code{libmylib.dll}):
  @end enumerate
  
  @quotation
*************** $ gprbuild -p mylib.gpr
*** 24617,24623 ****
  @item 
  Produce a .def file for the symbols you need to interface with, either by
  hand or automatically with possibly some manual adjustments
! (see @ref{1e1,,Creating Definition File Automatically}):
  @end enumerate
  
  @quotation
--- 24687,24693 ----
  @item 
  Produce a .def file for the symbols you need to interface with, either by
  hand or automatically with possibly some manual adjustments
! (see @ref{1e3,,Creating Definition File Automatically}):
  @end enumerate
  
  @quotation
*************** $ dlltool libmylib.dll -z libmylib.def -
*** 24634,24640 ****
  Make sure that MSVS command-line tools are accessible on the path.
  
  @item 
! Create the Microsoft-style import library (see @ref{1e4,,MSVS-Style Import Library}):
  @end enumerate
  
  @quotation
--- 24704,24710 ----
  Make sure that MSVS command-line tools are accessible on the path.
  
  @item 
! Create the Microsoft-style import library (see @ref{1e6,,MSVS-Style Import Library}):
  @end enumerate
  
  @quotation
*************** $ lib -machine:IX86 -def:libmylib.def -o
*** 24644,24650 ****
  @end example
  @end quotation
  
! If you are using a 64-bit toolchain, the above becomes...
  
  @quotation
  
--- 24714,24720 ----
  @end example
  @end quotation
  
! If you are using a 64-bit toolchain, the above becomes…
  
  @quotation
  
*************** or copy the DLL into into the directory
*** 24676,24682 ****
  @end enumerate
  
  @node Debugging a DLL,Setting Stack Size from gnatlink,Using GNAT DLLs from Microsoft Visual Studio Applications,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id36}@anchor{201}@anchor{gnat_ugn/platform_specific_information debugging-a-dll}@anchor{202}
  @subsubsection Debugging a DLL
  
  
--- 24746,24752 ----
  @end enumerate
  
  @node Debugging a DLL,Setting Stack Size from gnatlink,Using GNAT DLLs from Microsoft Visual Studio Applications,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information debugging-a-dll}@anchor{203}@anchor{gnat_ugn/platform_specific_information id37}@anchor{204}
  @subsubsection Debugging a DLL
  
  
*************** tools suite used to build the DLL.
*** 24714,24730 ****
  @end menu
  
  @node Program and DLL Both Built with GCC/GNAT,Program Built with Foreign Tools and DLL Built with GCC/GNAT,,Debugging a DLL
! @anchor{gnat_ugn/platform_specific_information id37}@anchor{203}@anchor{gnat_ugn/platform_specific_information program-and-dll-both-built-with-gcc-gnat}@anchor{204}
  @subsubsection Program and DLL Both Built with GCC/GNAT
  
  
  This is the simplest case. Both the DLL and the program have @code{GDB}
  compatible debugging information. It is then possible to break anywhere in
! the process. Let's suppose here that the main procedure is named
  @code{ada_main} and that in the DLL there is an entry point named
  @code{ada_dll}.
  
! The DLL (@ref{1da,,Introduction to Dynamic Link Libraries (DLLs)}) and
  program must have been built with the debugging information (see GNAT -g
  switch). Here are the step-by-step instructions for debugging it:
  
--- 24784,24800 ----
  @end menu
  
  @node Program and DLL Both Built with GCC/GNAT,Program Built with Foreign Tools and DLL Built with GCC/GNAT,,Debugging a DLL
! @anchor{gnat_ugn/platform_specific_information id38}@anchor{205}@anchor{gnat_ugn/platform_specific_information program-and-dll-both-built-with-gcc-gnat}@anchor{206}
  @subsubsection Program and DLL Both Built with GCC/GNAT
  
  
  This is the simplest case. Both the DLL and the program have @code{GDB}
  compatible debugging information. It is then possible to break anywhere in
! the process. Let’s suppose here that the main procedure is named
  @code{ada_main} and that in the DLL there is an entry point named
  @code{ada_dll}.
  
! The DLL (@ref{1dc,,Introduction to Dynamic Link Libraries (DLLs)}) and
  program must have been built with the debugging information (see GNAT -g
  switch). Here are the step-by-step instructions for debugging it:
  
*************** you can use the standard approach to deb
*** 24764,24770 ****
  (@ref{14d,,Running and Debugging Ada Programs}).
  
  @node Program Built with Foreign Tools and DLL Built with GCC/GNAT,,Program and DLL Both Built with GCC/GNAT,Debugging a DLL
! @anchor{gnat_ugn/platform_specific_information program-built-with-foreign-tools-and-dll-built-with-gcc-gnat}@anchor{205}@anchor{gnat_ugn/platform_specific_information id38}@anchor{206}
  @subsubsection Program Built with Foreign Tools and DLL Built with GCC/GNAT
  
  
--- 24834,24840 ----
  (@ref{14d,,Running and Debugging Ada Programs}).
  
  @node Program Built with Foreign Tools and DLL Built with GCC/GNAT,,Program and DLL Both Built with GCC/GNAT,Debugging a DLL
! @anchor{gnat_ugn/platform_specific_information id39}@anchor{207}@anchor{gnat_ugn/platform_specific_information program-built-with-foreign-tools-and-dll-built-with-gcc-gnat}@anchor{208}
  @subsubsection Program Built with Foreign Tools and DLL Built with GCC/GNAT
  
  
*************** example some C code built with Microsoft
*** 24781,24787 ****
  DLL named @code{test.dll} containing an Ada entry point named
  @code{ada_dll}.
  
! The DLL (see @ref{1da,,Introduction to Dynamic Link Libraries (DLLs)}) must have
  been built with debugging information (see the GNAT @code{-g} option).
  
  @subsubheading Debugging the DLL Directly
--- 24851,24857 ----
  DLL named @code{test.dll} containing an Ada entry point named
  @code{ada_dll}.
  
! The DLL (see @ref{1dc,,Introduction to Dynamic Link Libraries (DLLs)}) must have
  been built with debugging information (see the GNAT @code{-g} option).
  
  @subsubheading Debugging the DLL Directly
*************** $ main
*** 24875,24881 ****
  @end example
  
  @item 
! Use the Windows @emph{Task Manager} to find the process ID. Let's say
  that the process PID for @code{main.exe} is 208.
  
  @item 
--- 24945,24951 ----
  @end example
  
  @item 
! Use the Windows @emph{Task Manager} to find the process ID. Let’s say
  that the process PID for @code{main.exe} is 208.
  
  @item 
*************** approach to debug a program as described
*** 24920,24926 ****
  @ref{14d,,Running and Debugging Ada Programs}.
  
  @node Setting Stack Size from gnatlink,Setting Heap Size from gnatlink,Debugging a DLL,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information setting-stack-size-from-gnatlink}@anchor{127}@anchor{gnat_ugn/platform_specific_information id39}@anchor{207}
  @subsubsection Setting Stack Size from @code{gnatlink}
  
  
--- 24990,24996 ----
  @ref{14d,,Running and Debugging Ada Programs}.
  
  @node Setting Stack Size from gnatlink,Setting Heap Size from gnatlink,Debugging a DLL,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id40}@anchor{209}@anchor{gnat_ugn/platform_specific_information setting-stack-size-from-gnatlink}@anchor{127}
  @subsubsection Setting Stack Size from @code{gnatlink}
  
  
*************** because the comma is a separator for thi
*** 24963,24969 ****
  @end itemize
  
  @node Setting Heap Size from gnatlink,,Setting Stack Size from gnatlink,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information setting-heap-size-from-gnatlink}@anchor{128}@anchor{gnat_ugn/platform_specific_information id40}@anchor{208}
  @subsubsection Setting Heap Size from @code{gnatlink}
  
  
--- 25033,25039 ----
  @end itemize
  
  @node Setting Heap Size from gnatlink,,Setting Stack Size from gnatlink,Mixed-Language Programming on Windows
! @anchor{gnat_ugn/platform_specific_information id41}@anchor{20a}@anchor{gnat_ugn/platform_specific_information setting-heap-size-from-gnatlink}@anchor{128}
  @subsubsection Setting Heap Size from @code{gnatlink}
  
  
*************** because the comma is a separator for thi
*** 24996,25002 ****
  @end itemize
  
  @node Windows Specific Add-Ons,,Mixed-Language Programming on Windows,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information windows-specific-add-ons}@anchor{209}@anchor{gnat_ugn/platform_specific_information win32-specific-addons}@anchor{20a}
  @subsection Windows Specific Add-Ons
  
  
--- 25066,25072 ----
  @end itemize
  
  @node Windows Specific Add-Ons,,Mixed-Language Programming on Windows,Microsoft Windows Topics
! @anchor{gnat_ugn/platform_specific_information win32-specific-addons}@anchor{20b}@anchor{gnat_ugn/platform_specific_information windows-specific-add-ons}@anchor{20c}
  @subsection Windows Specific Add-Ons
  
  
*************** This section describes the Windows speci
*** 25009,25015 ****
  @end menu
  
  @node Win32Ada,wPOSIX,,Windows Specific Add-Ons
! @anchor{gnat_ugn/platform_specific_information win32ada}@anchor{20b}@anchor{gnat_ugn/platform_specific_information id41}@anchor{20c}
  @subsubsection Win32Ada
  
  
--- 25079,25085 ----
  @end menu
  
  @node Win32Ada,wPOSIX,,Windows Specific Add-Ons
! @anchor{gnat_ugn/platform_specific_information id42}@anchor{20d}@anchor{gnat_ugn/platform_specific_information win32ada}@anchor{20e}
  @subsubsection Win32Ada
  
  
*************** end P;
*** 25030,25036 ****
  @end quotation
  
  To build the application you just need to call gprbuild for the
! application's project, here p.gpr:
  
  @quotation
  
--- 25100,25106 ----
  @end quotation
  
  To build the application you just need to call gprbuild for the
! application’s project, here p.gpr:
  
  @quotation
  
*************** gprbuild p.gpr
*** 25040,25046 ****
  @end quotation
  
  @node wPOSIX,,Win32Ada,Windows Specific Add-Ons
! @anchor{gnat_ugn/platform_specific_information id42}@anchor{20d}@anchor{gnat_ugn/platform_specific_information wposix}@anchor{20e}
  @subsubsection wPOSIX
  
  
--- 25110,25116 ----
  @end quotation
  
  @node wPOSIX,,Win32Ada,Windows Specific Add-Ons
! @anchor{gnat_ugn/platform_specific_information id43}@anchor{20f}@anchor{gnat_ugn/platform_specific_information wposix}@anchor{210}
  @subsubsection wPOSIX
  
  
*************** end P;
*** 25063,25069 ****
  @end quotation
  
  To build the application you just need to call gprbuild for the
! application's project, here p.gpr:
  
  @quotation
  
--- 25133,25139 ----
  @end quotation
  
  To build the application you just need to call gprbuild for the
! application’s project, here p.gpr:
  
  @quotation
  
*************** gprbuild p.gpr
*** 25073,25085 ****
  @end quotation
  
  @node Mac OS Topics,,Microsoft Windows Topics,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information mac-os-topics}@anchor{20f}@anchor{gnat_ugn/platform_specific_information id43}@anchor{210}
  @section Mac OS Topics
  
  
  @geindex OS X
  
! This section describes topics that are specific to Apple's OS X
  platform.
  
  @menu
--- 25143,25155 ----
  @end quotation
  
  @node Mac OS Topics,,Microsoft Windows Topics,Platform-Specific Information
! @anchor{gnat_ugn/platform_specific_information id44}@anchor{211}@anchor{gnat_ugn/platform_specific_information mac-os-topics}@anchor{212}
  @section Mac OS Topics
  
  
  @geindex OS X
  
! This section describes topics that are specific to Apple’s OS X
  platform.
  
  @menu
*************** platform.
*** 25088,25094 ****
  @end menu
  
  @node Codesigning the Debugger,,,Mac OS Topics
! @anchor{gnat_ugn/platform_specific_information codesigning-the-debugger}@anchor{211}
  @subsection Codesigning the Debugger
  
  
--- 25158,25164 ----
  @end menu
  
  @node Codesigning the Debugger,,,Mac OS Topics
! @anchor{gnat_ugn/platform_specific_information codesigning-the-debugger}@anchor{213}
  @subsection Codesigning the Debugger
  
  
*************** Start the Keychain Access application (i
*** 25115,25121 ****
  
  @item 
  Select the Keychain Access -> Certificate Assistant ->
! Create a Certificate... menu
  
  @item 
  Then:
--- 25185,25191 ----
  
  @item 
  Select the Keychain Access -> Certificate Assistant ->
! Create a Certificate… menu
  
  @item 
  Then:
*************** Then:
*** 25125,25152 ****
  
  @item 
  Choose a name for the new certificate (this procedure will use
! "gdb-cert" as an example)
  
  @item 
! Set "Identity Type" to "Self Signed Root"
  
  @item 
! Set "Certificate Type" to "Code Signing"
  
  @item 
! Activate the "Let me override defaults" option
  @end itemize
  
  @item 
! Click several times on "Continue" until the "Specify a Location
! For The Certificate" screen appears, then set "Keychain" to "System"
  
  @item 
! Click on "Continue" until the certificate is created
  
  @item 
  Finally, in the view, double-click on the new certificate,
! and set "When using this certificate" to "Always Trust"
  
  @item 
  Exit the Keychain Access application and restart the computer
--- 25195,25222 ----
  
  @item 
  Choose a name for the new certificate (this procedure will use
! “gdb-cert” as an example)
  
  @item 
! Set “Identity Type” to “Self Signed Root”
  
  @item 
! Set “Certificate Type” to “Code Signing”
  
  @item 
! Activate the “Let me override defaults” option
  @end itemize
  
  @item 
! Click several times on “Continue” until the “Specify a Location
! For The Certificate” screen appears, then set “Keychain” to “System”
  
  @item 
! Click on “Continue” until the certificate is created
  
  @item 
  Finally, in the view, double-click on the new certificate,
! and set “When using this certificate” to “Always Trust”
  
  @item 
  Exit the Keychain Access application and restart the computer
*************** $ codesign -f -s  "gdb-cert"  <gnat_inst
*** 25163,25182 ****
  @end example
  @end quotation
  
! where "gdb-cert" should be replaced by the actual certificate
  name chosen above, and <gnat_install_prefix> should be replaced by
  the location where you installed GNAT.  Also, be sure that users are
  in the Unix group @code{_developer}.
  
  @node Example of Binder Output File,Elaboration Order Handling in GNAT,Platform-Specific Information,Top
! @anchor{gnat_ugn/example_of_binder_output example-of-binder-output-file}@anchor{e}@anchor{gnat_ugn/example_of_binder_output doc}@anchor{212}@anchor{gnat_ugn/example_of_binder_output id1}@anchor{213}
  @chapter Example of Binder Output File
  
  
  @geindex Binder output (example)
  
  This Appendix displays the source code for the output file
! generated by @emph{gnatbind} for a simple 'Hello World' program.
  Comments have been added for clarification purposes.
  
  @example
--- 25233,25252 ----
  @end example
  @end quotation
  
! where “gdb-cert” should be replaced by the actual certificate
  name chosen above, and <gnat_install_prefix> should be replaced by
  the location where you installed GNAT.  Also, be sure that users are
  in the Unix group @code{_developer}.
  
  @node Example of Binder Output File,Elaboration Order Handling in GNAT,Platform-Specific Information,Top
! @anchor{gnat_ugn/example_of_binder_output doc}@anchor{214}@anchor{gnat_ugn/example_of_binder_output example-of-binder-output-file}@anchor{e}@anchor{gnat_ugn/example_of_binder_output id1}@anchor{215}
  @chapter Example of Binder Output File
  
  
  @geindex Binder output (example)
  
  This Appendix displays the source code for the output file
! generated by @emph{gnatbind} for a simple ‘Hello World’ program.
  Comments have been added for clarification purposes.
  
  @example
*************** elaboration code in your own application
*** 25921,25927 ****
  @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit
  
  @node Elaboration Order Handling in GNAT,Inline Assembler,Example of Binder Output File,Top
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-order-handling-in-gnat}@anchor{f}@anchor{gnat_ugn/elaboration_order_handling_in_gnat doc}@anchor{214}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id1}@anchor{215}
  @chapter Elaboration Order Handling in GNAT
  
  
--- 25991,25997 ----
  @c -- Example: A |withing| unit has a |with| clause, it |withs| a |withed| unit
  
  @node Elaboration Order Handling in GNAT,Inline Assembler,Example of Binder Output File,Top
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat doc}@anchor{216}@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-order-handling-in-gnat}@anchor{f}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id1}@anchor{217}
  @chapter Elaboration Order Handling in GNAT
  
  
*************** GNAT, either automatically or with expli
*** 25951,25957 ****
  @end menu
  
  @node Elaboration Code,Elaboration Order,,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-code}@anchor{216}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id2}@anchor{217}
  @section Elaboration Code
  
  
--- 26021,26027 ----
  @end menu
  
  @node Elaboration Code,Elaboration Order,,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-code}@anchor{218}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id2}@anchor{219}
  @section Elaboration Code
  
  
*************** elaborated.
*** 26099,26105 ****
  @end itemize
  
  @node Elaboration Order,Checking the Elaboration Order,Elaboration Code,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-order}@anchor{218}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id3}@anchor{219}
  @section Elaboration Order
  
  
--- 26169,26175 ----
  @end itemize
  
  @node Elaboration Order,Checking the Elaboration Order,Elaboration Code,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-order}@anchor{21a}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id3}@anchor{21b}
  @section Elaboration Order
  
  
*************** body of Main
*** 26233,26243 ****
  @end example
  @end quotation
  
! The elaboration of @code{Server}'s spec materializes function @code{Func}, making it
! callable. The elaboration of @code{Client}'s spec elaborates the declaration of
  @code{Val}. This invokes function @code{Server.Func}, however the body of
! @code{Server.Func} has not been elaborated yet because @code{Server}'s body comes
! after @code{Client}'s spec in the elaboration order. As a result, the value of
  constant @code{Val} is now undefined.
  
  Without any guarantees from the language, an undetected ABE problem may hinder
--- 26303,26313 ----
  @end example
  @end quotation
  
! The elaboration of @code{Server}’s spec materializes function @code{Func}, making it
! callable. The elaboration of @code{Client}’s spec elaborates the declaration of
  @code{Val}. This invokes function @code{Server.Func}, however the body of
! @code{Server.Func} has not been elaborated yet because @code{Server}’s body comes
! after @code{Client}’s spec in the elaboration order. As a result, the value of
  constant @code{Val} is now undefined.
  
  Without any guarantees from the language, an undetected ABE problem may hinder
*************** however a compiler may not always find s
*** 26268,26274 ****
  respect to control and data flow.
  
  @node Checking the Elaboration Order,Controlling the Elaboration Order in Ada,Elaboration Order,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat id4}@anchor{21a}@anchor{gnat_ugn/elaboration_order_handling_in_gnat checking-the-elaboration-order}@anchor{21b}
  @section Checking the Elaboration Order
  
  
--- 26338,26344 ----
  respect to control and data flow.
  
  @node Checking the Elaboration Order,Controlling the Elaboration Order in Ada,Elaboration Order,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat checking-the-elaboration-order}@anchor{21c}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id4}@anchor{21d}
  @section Checking the Elaboration Order
  
  
*************** order.
*** 26329,26335 ****
  @end itemize
  
  @node Controlling the Elaboration Order in Ada,Controlling the Elaboration Order in GNAT,Checking the Elaboration Order,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-ada}@anchor{21c}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id5}@anchor{21d}
  @section Controlling the Elaboration Order in Ada
  
  
--- 26399,26405 ----
  @end itemize
  
  @node Controlling the Elaboration Order in Ada,Controlling the Elaboration Order in GNAT,Checking the Elaboration Order,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-ada}@anchor{21e}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id5}@anchor{21f}
  @section Controlling the Elaboration Order in Ada
  
  
*************** but still strong enough to prevent ABE p
*** 26396,26402 ****
  Pragma @code{Elaborate_Body} requires that the body of a unit is elaborated
  immediately after its spec. This restriction guarantees that no client
  scenario can invoke a server target before the target body has been
! elaborated because the spec and body are effectively "glued" together.
  
  @example
  package Server is
--- 26466,26472 ----
  Pragma @code{Elaborate_Body} requires that the body of a unit is elaborated
  immediately after its spec. This restriction guarantees that no client
  scenario can invoke a server target before the target body has been
! elaborated because the spec and body are effectively “glued” together.
  
  @example
  package Server is
*************** is that the program continues to stay in
*** 26657,26663 ****
  orders exist) even if maintenance changes the bodies of targets.
  
  @node Controlling the Elaboration Order in GNAT,Mixing Elaboration Models,Controlling the Elaboration Order in Ada,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat id6}@anchor{21e}@anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-gnat}@anchor{21f}
  @section Controlling the Elaboration Order in GNAT
  
  
--- 26727,26733 ----
  orders exist) even if maintenance changes the bodies of targets.
  
  @node Controlling the Elaboration Order in GNAT,Mixing Elaboration Models,Controlling the Elaboration Order in Ada,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-gnat}@anchor{220}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id6}@anchor{221}
  @section Controlling the Elaboration Order in GNAT
  
  
*************** The dynamic, legacy, and static models c
*** 26787,26793 ****
  may not diagnose certain elaboration issues or install run-time checks.
  
  @node Mixing Elaboration Models,ABE Diagnostics,Controlling the Elaboration Order in GNAT,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat mixing-elaboration-models}@anchor{220}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id7}@anchor{221}
  @section Mixing Elaboration Models
  
  
--- 26857,26863 ----
  may not diagnose certain elaboration issues or install run-time checks.
  
  @node Mixing Elaboration Models,ABE Diagnostics,Controlling the Elaboration Order in GNAT,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat id7}@anchor{222}@anchor{gnat_ugn/elaboration_order_handling_in_gnat mixing-elaboration-models}@anchor{223}
  @section Mixing Elaboration Models
  
  
*************** warning:   "y.ads" which has static elab
*** 26834,26840 ****
  The warnings can be suppressed by binder switch @code{-ws}.
  
  @node ABE Diagnostics,SPARK Diagnostics,Mixing Elaboration Models,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat abe-diagnostics}@anchor{222}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id8}@anchor{223}
  @section ABE Diagnostics
  
  
--- 26904,26910 ----
  The warnings can be suppressed by binder switch @code{-ws}.
  
  @node ABE Diagnostics,SPARK Diagnostics,Mixing Elaboration Models,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat abe-diagnostics}@anchor{224}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id8}@anchor{225}
  @section ABE Diagnostics
  
  
*************** end Guaranteed_ABE;
*** 26867,26873 ****
  @end example
  @end quotation
  
! In the example above, the elaboration of @code{Guaranteed_ABE}'s body elaborates
  the declaration of @code{Val}. This invokes function @code{ABE}, however the body of
  @code{ABE} has not been elaborated yet. GNAT emits the following diagnostic:
  
--- 26937,26943 ----
  @end example
  @end quotation
  
! In the example above, the elaboration of @code{Guaranteed_ABE}’s body elaborates
  the declaration of @code{Val}. This invokes function @code{ABE}, however the body of
  @code{ABE} has not been elaborated yet. GNAT emits the following diagnostic:
  
*************** declaration @code{Safe} because the body
*** 26941,26947 ****
  elaborated at that point.
  
  @node SPARK Diagnostics,Elaboration Circularities,ABE Diagnostics,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat spark-diagnostics}@anchor{224}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id9}@anchor{225}
  @section SPARK Diagnostics
  
  
--- 27011,27017 ----
  elaborated at that point.
  
  @node SPARK Diagnostics,Elaboration Circularities,ABE Diagnostics,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat id9}@anchor{226}@anchor{gnat_ugn/elaboration_order_handling_in_gnat spark-diagnostics}@anchor{227}
  @section SPARK Diagnostics
  
  
*************** rules.
*** 26967,26973 ****
  @end quotation
  
  @node Elaboration Circularities,Resolving Elaboration Circularities,SPARK Diagnostics,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat id10}@anchor{226}@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-circularities}@anchor{227}
  @section Elaboration Circularities
  
  
--- 27037,27043 ----
  @end quotation
  
  @node Elaboration Circularities,Resolving Elaboration Circularities,SPARK Diagnostics,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-circularities}@anchor{228}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id10}@anchor{229}
  @section Elaboration Circularities
  
  
*************** This section enumerates various tactics
*** 27067,27073 ****
  @end itemize
  
  @node Resolving Elaboration Circularities,Elaboration-related Compiler Switches,Elaboration Circularities,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat id11}@anchor{228}@anchor{gnat_ugn/elaboration_order_handling_in_gnat resolving-elaboration-circularities}@anchor{229}
  @section Resolving Elaboration Circularities
  
  
--- 27137,27143 ----
  @end itemize
  
  @node Resolving Elaboration Circularities,Elaboration-related Compiler Switches,Elaboration Circularities,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat id11}@anchor{22a}@anchor{gnat_ugn/elaboration_order_handling_in_gnat resolving-elaboration-circularities}@anchor{22b}
  @section Resolving Elaboration Circularities
  
  
*************** Use the relaxed dynamic-elaboration mode
*** 27338,27344 ****
  @end itemize
  
  @node Elaboration-related Compiler Switches,Summary of Procedures for Elaboration Control,Resolving Elaboration Circularities,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat id12}@anchor{22a}@anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-related-compiler-switches}@anchor{22b}
  @section Elaboration-related Compiler Switches
  
  
--- 27408,27414 ----
  @end itemize
  
  @node Elaboration-related Compiler Switches,Summary of Procedures for Elaboration Control,Resolving Elaboration Circularities,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat elaboration-related-compiler-switches}@anchor{22c}@anchor{gnat_ugn/elaboration_order_handling_in_gnat id12}@anchor{22d}
  @section Elaboration-related Compiler Switches
  
  
*************** eliminate some diagnostics and run-time
*** 27442,27448 ****
  
  @item @code{-gnatw.f}
  
! Turn on warnings for suspicious Subp'Access
  
  When this switch is in effect, GNAT will treat @code{'Access} of an entry,
  operator, or subprogram as a potential call to the target and issue warnings:
--- 27512,27518 ----
  
  @item @code{-gnatw.f}
  
! Turn on warnings for suspicious Subp’Access
  
  When this switch is in effect, GNAT will treat @code{'Access} of an entry,
  operator, or subprogram as a potential call to the target and issue warnings:
*************** checks. The example above will still fai
*** 27519,27525 ****
  @end table
  
  @node Summary of Procedures for Elaboration Control,Inspecting the Chosen Elaboration Order,Elaboration-related Compiler Switches,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat id13}@anchor{22c}@anchor{gnat_ugn/elaboration_order_handling_in_gnat summary-of-procedures-for-elaboration-control}@anchor{22d}
  @section Summary of Procedures for Elaboration Control
  
  
--- 27589,27595 ----
  @end table
  
  @node Summary of Procedures for Elaboration Control,Inspecting the Chosen Elaboration Order,Elaboration-related Compiler Switches,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat id13}@anchor{22e}@anchor{gnat_ugn/elaboration_order_handling_in_gnat summary-of-procedures-for-elaboration-control}@anchor{22f}
  @section Summary of Procedures for Elaboration Control
  
  
*************** Use the relaxed dynamic elaboration mode
*** 27577,27583 ****
  @end itemize
  
  @node Inspecting the Chosen Elaboration Order,,Summary of Procedures for Elaboration Control,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat id14}@anchor{22e}@anchor{gnat_ugn/elaboration_order_handling_in_gnat inspecting-the-chosen-elaboration-order}@anchor{22f}
  @section Inspecting the Chosen Elaboration Order
  
  
--- 27647,27653 ----
  @end itemize
  
  @node Inspecting the Chosen Elaboration Order,,Summary of Procedures for Elaboration Control,Elaboration Order Handling in GNAT
! @anchor{gnat_ugn/elaboration_order_handling_in_gnat id14}@anchor{230}@anchor{gnat_ugn/elaboration_order_handling_in_gnat inspecting-the-chosen-elaboration-order}@anchor{231}
  @section Inspecting the Chosen Elaboration Order
  
  
*************** gdbstr (body)
*** 27720,27726 ****
  @end quotation
  
  @node Inline Assembler,GNU Free Documentation License,Elaboration Order Handling in GNAT,Top
! @anchor{gnat_ugn/inline_assembler inline-assembler}@anchor{10}@anchor{gnat_ugn/inline_assembler doc}@anchor{230}@anchor{gnat_ugn/inline_assembler id1}@anchor{231}
  @chapter Inline Assembler
  
  
--- 27790,27796 ----
  @end quotation
  
  @node Inline Assembler,GNU Free Documentation License,Elaboration Order Handling in GNAT,Top
! @anchor{gnat_ugn/inline_assembler doc}@anchor{232}@anchor{gnat_ugn/inline_assembler id1}@anchor{233}@anchor{gnat_ugn/inline_assembler inline-assembler}@anchor{10}
  @chapter Inline Assembler
  
  
*************** and with assembly language programming.
*** 27779,27791 ****
  @end menu
  
  @node Basic Assembler Syntax,A Simple Example of Inline Assembler,,Inline Assembler
! @anchor{gnat_ugn/inline_assembler id2}@anchor{232}@anchor{gnat_ugn/inline_assembler basic-assembler-syntax}@anchor{233}
  @section Basic Assembler Syntax
  
  
  The assembler used by GNAT and gcc is based not on the Intel assembly
  language, but rather on a language that descends from the AT&T Unix
! assembler @code{as} (and which is often referred to as 'AT&T syntax').
  The following table summarizes the main features of @code{as} syntax
  and points out the differences from the Intel conventions.
  See the gcc @code{as} and @code{gas} (an @code{as} macro
--- 27849,27861 ----
  @end menu
  
  @node Basic Assembler Syntax,A Simple Example of Inline Assembler,,Inline Assembler
! @anchor{gnat_ugn/inline_assembler basic-assembler-syntax}@anchor{234}@anchor{gnat_ugn/inline_assembler id2}@anchor{235}
  @section Basic Assembler Syntax
  
  
  The assembler used by GNAT and gcc is based not on the Intel assembly
  language, but rather on a language that descends from the AT&T Unix
! assembler @code{as} (and which is often referred to as ‘AT&T syntax’).
  The following table summarizes the main features of @code{as} syntax
  and points out the differences from the Intel conventions.
  See the gcc @code{as} and @code{gas} (an @code{as} macro
*************** pre-processor) documentation for further
*** 27795,27801 ****
  @display
  @emph{Register names}@w{ }
  @display
! gcc / @code{as}: Prefix with '%'; for example @code{%eax}@w{ }
  Intel: No extra punctuation; for example @code{eax}@w{ }
  @end display
  @end display
--- 27865,27871 ----
  @display
  @emph{Register names}@w{ }
  @display
! gcc / @code{as}: Prefix with ‘%’; for example @code{%eax}@w{ }
  Intel: No extra punctuation; for example @code{eax}@w{ }
  @end display
  @end display
*************** Intel: No extra punctuation; for example
*** 27806,27812 ****
  @display
  @emph{Immediate operand}@w{ }
  @display
! gcc / @code{as}: Prefix with '$'; for example @code{$4}@w{ }
  Intel: No extra punctuation; for example @code{4}@w{ }
  @end display
  @end display
--- 27876,27882 ----
  @display
  @emph{Immediate operand}@w{ }
  @display
! gcc / @code{as}: Prefix with ‘$’; for example @code{$4}@w{ }
  Intel: No extra punctuation; for example @code{4}@w{ }
  @end display
  @end display
*************** Intel: No extra punctuation; for example
*** 27817,27823 ****
  @display
  @emph{Address}@w{ }
  @display
! gcc / @code{as}: Prefix with '$'; for example @code{$loc}@w{ }
  Intel: No extra punctuation; for example @code{loc}@w{ }
  @end display
  @end display
--- 27887,27893 ----
  @display
  @emph{Address}@w{ }
  @display
! gcc / @code{as}: Prefix with ‘$’; for example @code{$loc}@w{ }
  Intel: No extra punctuation; for example @code{loc}@w{ }
  @end display
  @end display
*************** Intel: Square brackets; for example @cod
*** 27850,27857 ****
  @display
  @emph{Hexadecimal numbers}@w{ }
  @display
! gcc / @code{as}: Leading '0x' (C language syntax); for example @code{0xA0}@w{ }
! Intel: Trailing 'h'; for example @code{A0h}@w{ }
  @end display
  @end display
  
--- 27920,27927 ----
  @display
  @emph{Hexadecimal numbers}@w{ }
  @display
! gcc / @code{as}: Leading ‘0x’ (C language syntax); for example @code{0xA0}@w{ }
! Intel: Trailing ‘h’; for example @code{A0h}@w{ }
  @end display
  @end display
  
*************** Intel: Destination first; for example @c
*** 27895,27901 ****
  
  
  @node A Simple Example of Inline Assembler,Output Variables in Inline Assembler,Basic Assembler Syntax,Inline Assembler
! @anchor{gnat_ugn/inline_assembler a-simple-example-of-inline-assembler}@anchor{234}@anchor{gnat_ugn/inline_assembler id3}@anchor{235}
  @section A Simple Example of Inline Assembler
  
  
--- 27965,27971 ----
  
  
  @node A Simple Example of Inline Assembler,Output Variables in Inline Assembler,Basic Assembler Syntax,Inline Assembler
! @anchor{gnat_ugn/inline_assembler a-simple-example-of-inline-assembler}@anchor{236}@anchor{gnat_ugn/inline_assembler id3}@anchor{237}
  @section A Simple Example of Inline Assembler
  
  
*************** L1:
*** 28018,28026 ****
  
  The assembly code you included is clearly indicated by
  the compiler, between the @code{#APP} and @code{#NO_APP}
! delimiters. The character before the 'APP' and 'NOAPP'
! can differ on different targets. For example, GNU/Linux uses '#APP' while
! on NT you will see '/APP'.
  
  If you make a mistake in your assembler code (such as using the
  wrong size modifier, or using a wrong operand for the instruction) GNAT
--- 28088,28096 ----
  
  The assembly code you included is clearly indicated by
  the compiler, between the @code{#APP} and @code{#NO_APP}
! delimiters. The character before the ‘APP’ and ‘NOAPP’
! can differ on different targets. For example, GNU/Linux uses ‘#APP’ while
! on NT you will see ‘/APP’.
  
  If you make a mistake in your assembler code (such as using the
  wrong size modifier, or using a wrong operand for the instruction) GNAT
*************** If there are no errors, @code{as} will g
*** 28044,28050 ****
  @code{nothing.out}.
  
  @node Output Variables in Inline Assembler,Input Variables in Inline Assembler,A Simple Example of Inline Assembler,Inline Assembler
! @anchor{gnat_ugn/inline_assembler id4}@anchor{236}@anchor{gnat_ugn/inline_assembler output-variables-in-inline-assembler}@anchor{237}
  @section Output Variables in Inline Assembler
  
  
--- 28114,28120 ----
  @code{nothing.out}.
  
  @node Output Variables in Inline Assembler,Input Variables in Inline Assembler,A Simple Example of Inline Assembler,Inline Assembler
! @anchor{gnat_ugn/inline_assembler id4}@anchor{238}@anchor{gnat_ugn/inline_assembler output-variables-in-inline-assembler}@anchor{239}
  @section Output Variables in Inline Assembler
  
  
*************** Unsigned_32'Asm_Output ("=r", Flags);
*** 28184,28190 ****
  uses the @code{"r"} (register) constraint, telling the compiler to
  store the variable in a register.
  
! If the constraint is preceded by the equal character '=', it tells
  the compiler that the variable will be used to store data into it.
  
  In the @code{Get_Flags} example, we used the @code{"g"} (global) constraint,
--- 28254,28260 ----
  uses the @code{"r"} (register) constraint, telling the compiler to
  store the variable in a register.
  
! If the constraint is preceded by the equal character ‘=’, it tells
  the compiler that the variable will be used to store data into it.
  
  In the @code{Get_Flags} example, we used the @code{"g"} (global) constraint,
*************** end Get_Flags_3;
*** 28411,28417 ****
  @end quotation
  
  @node Input Variables in Inline Assembler,Inlining Inline Assembler Code,Output Variables in Inline Assembler,Inline Assembler
! @anchor{gnat_ugn/inline_assembler id5}@anchor{238}@anchor{gnat_ugn/inline_assembler input-variables-in-inline-assembler}@anchor{239}
  @section Input Variables in Inline Assembler
  
  
--- 28481,28487 ----
  @end quotation
  
  @node Input Variables in Inline Assembler,Inlining Inline Assembler Code,Output Variables in Inline Assembler,Inline Assembler
! @anchor{gnat_ugn/inline_assembler id5}@anchor{23a}@anchor{gnat_ugn/inline_assembler input-variables-in-inline-assembler}@anchor{23b}
  @section Input Variables in Inline Assembler
  
  
*************** _increment__incr.1:
*** 28500,28513 ****
  @end quotation
  
  @node Inlining Inline Assembler Code,Other Asm Functionality,Input Variables in Inline Assembler,Inline Assembler
! @anchor{gnat_ugn/inline_assembler id6}@anchor{23a}@anchor{gnat_ugn/inline_assembler inlining-inline-assembler-code}@anchor{23b}
  @section Inlining Inline Assembler Code
  
  
  For a short subprogram such as the @code{Incr} function in the previous
  section, the overhead of the call and return (creating / deleting the stack
  frame) can be significant, compared to the amount of code in the subprogram
! body.  A solution is to apply Ada's @code{Inline} pragma to the subprogram,
  which directs the compiler to expand invocations of the subprogram at the
  point(s) of call, instead of setting up a stack frame for out-of-line calls.
  Here is the resulting program:
--- 28570,28583 ----
  @end quotation
  
  @node Inlining Inline Assembler Code,Other Asm Functionality,Input Variables in Inline Assembler,Inline Assembler
! @anchor{gnat_ugn/inline_assembler id6}@anchor{23c}@anchor{gnat_ugn/inline_assembler inlining-inline-assembler-code}@anchor{23d}
  @section Inlining Inline Assembler Code
  
  
  For a short subprogram such as the @code{Incr} function in the previous
  section, the overhead of the call and return (creating / deleting the stack
  frame) can be significant, compared to the amount of code in the subprogram
! body.  A solution is to apply Ada’s @code{Inline} pragma to the subprogram,
  which directs the compiler to expand invocations of the subprogram at the
  point(s) of call, instead of setting up a stack frame for out-of-line calls.
  Here is the resulting program:
*************** movl %esi,%eax
*** 28571,28577 ****
  thus saving the overhead of stack frame setup and an out-of-line call.
  
  @node Other Asm Functionality,,Inlining Inline Assembler Code,Inline Assembler
! @anchor{gnat_ugn/inline_assembler other-asm-functionality}@anchor{23c}@anchor{gnat_ugn/inline_assembler id7}@anchor{23d}
  @section Other @code{Asm} Functionality
  
  
--- 28641,28647 ----
  thus saving the overhead of stack frame setup and an out-of-line call.
  
  @node Other Asm Functionality,,Inlining Inline Assembler Code,Inline Assembler
! @anchor{gnat_ugn/inline_assembler id7}@anchor{23e}@anchor{gnat_ugn/inline_assembler other-asm-functionality}@anchor{23f}
  @section Other @code{Asm} Functionality
  
  
*************** and @code{Volatile}, which inhibits unwa
*** 28586,28592 ****
  @end menu
  
  @node The Clobber Parameter,The Volatile Parameter,,Other Asm Functionality
! @anchor{gnat_ugn/inline_assembler the-clobber-parameter}@anchor{23e}@anchor{gnat_ugn/inline_assembler id8}@anchor{23f}
  @subsection The @code{Clobber} Parameter
  
  
--- 28656,28662 ----
  @end menu
  
  @node The Clobber Parameter,The Volatile Parameter,,Other Asm Functionality
! @anchor{gnat_ugn/inline_assembler id8}@anchor{240}@anchor{gnat_ugn/inline_assembler the-clobber-parameter}@anchor{241}
  @subsection The @code{Clobber} Parameter
  
  
*************** the eax register).  But more generally,
*** 28599,28605 ****
  identification of the registers that are used by the Inline Assembly
  statements.
  
! Using a register that the compiler doesn't know about
  could be a side effect of an instruction (like @code{mull}
  storing its result in both eax and edx).
  It can also arise from explicit register usage in your
--- 28669,28675 ----
  identification of the registers that are used by the Inline Assembly
  statements.
  
! Using a register that the compiler doesn’t know about
  could be a side effect of an instruction (like @code{mull}
  storing its result in both eax and edx).
  It can also arise from explicit register usage in your
*************** The @code{Clobber} parameter has several
*** 28643,28656 ****
  @itemize *
  
  @item 
! Use 'register' name @code{cc} to indicate that flags might have changed
  
  @item 
! Use 'register' name @code{memory} if you changed a memory location
  @end itemize
  
  @node The Volatile Parameter,,The Clobber Parameter,Other Asm Functionality
! @anchor{gnat_ugn/inline_assembler the-volatile-parameter}@anchor{240}@anchor{gnat_ugn/inline_assembler id9}@anchor{241}
  @subsection The @code{Volatile} Parameter
  
  
--- 28713,28726 ----
  @itemize *
  
  @item 
! Use ‘register’ name @code{cc} to indicate that flags might have changed
  
  @item 
! Use ‘register’ name @code{memory} if you changed a memory location
  @end itemize
  
  @node The Volatile Parameter,,The Clobber Parameter,Other Asm Functionality
! @anchor{gnat_ugn/inline_assembler id9}@anchor{242}@anchor{gnat_ugn/inline_assembler the-volatile-parameter}@anchor{243}
  @subsection The @code{Volatile} Parameter
  
  
*************** By default, @code{Volatile} is set to @c
*** 28682,28699 ****
  Although setting @code{Volatile} to @code{True} prevents unwanted
  optimizations, it will also disable other optimizations that might be
  important for efficiency. In general, you should set @code{Volatile}
! to @code{True} only if the compiler's optimizations have created
  problems.
  
  @node GNU Free Documentation License,Index,Inline Assembler,Top
! @anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license doc}@anchor{242}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{243}
  @chapter GNU Free Documentation License
  
  
  Version 1.3, 3 November 2008
  
  Copyright  2000, 2001, 2002, 2007, 2008  Free Software Foundation, Inc
! @indicateurl{http://fsf.org/}
  
  Everyone is permitted to copy and distribute verbatim copies of this
  license document, but changing it is not allowed.
--- 28752,28769 ----
  Although setting @code{Volatile} to @code{True} prevents unwanted
  optimizations, it will also disable other optimizations that might be
  important for efficiency. In general, you should set @code{Volatile}
! to @code{True} only if the compiler’s optimizations have created
  problems.
  
  @node GNU Free Documentation License,Index,Inline Assembler,Top
! @anchor{share/gnu_free_documentation_license doc}@anchor{244}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{245}
  @chapter GNU Free Documentation License
  
  
  Version 1.3, 3 November 2008
  
  Copyright  2000, 2001, 2002, 2007, 2008  Free Software Foundation, Inc
! @indicateurl{https://fsf.org/}
  
  Everyone is permitted to copy and distribute verbatim copies of this
  license document, but changing it is not allowed.
*************** license document, but changing it is not
*** 28701,28714 ****
  @strong{Preamble}
  
  The purpose of this License is to make a manual, textbook, or other
! functional and useful document "free" in the sense of freedom: to
  assure everyone the effective freedom to copy and redistribute it,
  with or without modifying it, either commercially or noncommercially.
  Secondarily, this License preserves for the author and publisher a way
  to get credit for their work, while not being considered responsible
  for modifications made by others.
  
! This License is a kind of "copyleft", which means that derivative
  works of the document must themselves be free in the same sense.  It
  complements the GNU General Public License, which is a copyleft
  license designed for free software.
--- 28771,28784 ----
  @strong{Preamble}
  
  The purpose of this License is to make a manual, textbook, or other
! functional and useful document “free” in the sense of freedom: to
  assure everyone the effective freedom to copy and redistribute it,
  with or without modifying it, either commercially or noncommercially.
  Secondarily, this License preserves for the author and publisher a way
  to get credit for their work, while not being considered responsible
  for modifications made by others.
  
! This License is a kind of “copyleft”, which means that derivative
  works of the document must themselves be free in the same sense.  It
  complements the GNU General Public License, which is a copyleft
  license designed for free software.
*************** distributed under the terms of this Lice
*** 28729,28745 ****
  world-wide, royalty-free license, unlimited in duration, to use that
  work under the conditions stated herein.  The @strong{Document}, below,
  refers to any such manual or work.  Any member of the public is a
! licensee, and is addressed as "@strong{you}".  You accept the license if you
  copy, modify or distribute the work in a way requiring permission
  under copyright law.
  
! A "@strong{Modified Version}" of the Document means any work containing the
  Document or a portion of it, either copied verbatim, or with
  modifications and/or translated into another language.
  
! A "@strong{Secondary Section}" is a named appendix or a front-matter section of
  the Document that deals exclusively with the relationship of the
! publishers or authors of the Document to the Document's overall subject
  (or to related matters) and contains nothing that could fall directly
  within that overall subject.  (Thus, if the Document is in part a
  textbook of mathematics, a Secondary Section may not explain any
--- 28799,28815 ----
  world-wide, royalty-free license, unlimited in duration, to use that
  work under the conditions stated herein.  The @strong{Document}, below,
  refers to any such manual or work.  Any member of the public is a
! licensee, and is addressed as “@strong{you}”.  You accept the license if you
  copy, modify or distribute the work in a way requiring permission
  under copyright law.
  
! A “@strong{Modified Version}” of the Document means any work containing the
  Document or a portion of it, either copied verbatim, or with
  modifications and/or translated into another language.
  
! A “@strong{Secondary Section}” is a named appendix or a front-matter section of
  the Document that deals exclusively with the relationship of the
! publishers or authors of the Document to the Document’s overall subject
  (or to related matters) and contains nothing that could fall directly
  within that overall subject.  (Thus, if the Document is in part a
  textbook of mathematics, a Secondary Section may not explain any
*************** connection with the subject or with rela
*** 28748,28754 ****
  commercial, philosophical, ethical or political position regarding
  them.
  
! The "@strong{Invariant Sections}" are certain Secondary Sections whose titles
  are designated, as being those of Invariant Sections, in the notice
  that says that the Document is released under this License.  If a
  section does not fit the above definition of Secondary then it is not
--- 28818,28824 ----
  commercial, philosophical, ethical or political position regarding
  them.
  
! The “@strong{Invariant Sections}” are certain Secondary Sections whose titles
  are designated, as being those of Invariant Sections, in the notice
  that says that the Document is released under this License.  If a
  section does not fit the above definition of Secondary then it is not
*************** allowed to be designated as Invariant.
*** 28756,28767 ****
  Invariant Sections.  If the Document does not identify any Invariant
  Sections then there are none.
  
! The "@strong{Cover Texts}" are certain short passages of text that are listed,
  as Front-Cover Texts or Back-Cover Texts, in the notice that says that
  the Document is released under this License.  A Front-Cover Text may
  be at most 5 words, and a Back-Cover Text may be at most 25 words.
  
! A "@strong{Transparent}" copy of the Document means a machine-readable copy,
  represented in a format whose specification is available to the
  general public, that is suitable for revising the document
  straightforwardly with generic text editors or (for images composed of
--- 28826,28837 ----
  Invariant Sections.  If the Document does not identify any Invariant
  Sections then there are none.
  
! The “@strong{Cover Texts}” are certain short passages of text that are listed,
  as Front-Cover Texts or Back-Cover Texts, in the notice that says that
  the Document is released under this License.  A Front-Cover Text may
  be at most 5 words, and a Back-Cover Text may be at most 25 words.
  
! A “@strong{Transparent}” copy of the Document means a machine-readable copy,
  represented in a format whose specification is available to the
  general public, that is suitable for revising the document
  straightforwardly with generic text editors or (for images composed of
*************** to text formatters.  A copy made in an o
*** 28772,28778 ****
  format whose markup, or absence of markup, has been arranged to thwart
  or discourage subsequent modification by readers is not Transparent.
  An image format is not Transparent if used for any substantial amount
! of text.  A copy that is not "Transparent" is called @strong{Opaque}.
  
  Examples of suitable formats for Transparent copies include plain
  ASCII without markup, Texinfo input format, LaTeX input format, SGML
--- 28842,28848 ----
  format whose markup, or absence of markup, has been arranged to thwart
  or discourage subsequent modification by readers is not Transparent.
  An image format is not Transparent if used for any substantial amount
! of text.  A copy that is not “Transparent” is called @strong{Opaque}.
  
  Examples of suitable formats for Transparent copies include plain
  ASCII without markup, Texinfo input format, LaTeX input format, SGML
*************** processing tools are not generally avail
*** 28785,28808 ****
  machine-generated HTML, PostScript or PDF produced by some word
  processors for output purposes only.
  
! The "@strong{Title Page}" means, for a printed book, the title page itself,
  plus such following pages as are needed to hold, legibly, the material
  this License requires to appear in the title page.  For works in
! formats which do not have any title page as such, "Title Page" means
! the text near the most prominent appearance of the work's title,
  preceding the beginning of the body of the text.
  
! The "@strong{publisher}" means any person or entity that distributes
  copies of the Document to the public.
  
! A section "@strong{Entitled XYZ}" means a named subunit of the Document whose
  title either is precisely XYZ or contains XYZ in parentheses following
  text that translates XYZ in another language.  (Here XYZ stands for a
! specific section name mentioned below, such as "@strong{Acknowledgements}",
! "@strong{Dedications}", "@strong{Endorsements}", or "@strong{History}".)
! To "@strong{Preserve the Title}"
  of such a section when you modify the Document means that it remains a
! section "Entitled XYZ" according to this definition.
  
  The Document may include Warranty Disclaimers next to the notice which
  states that this License applies to the Document.  These Warranty
--- 28855,28878 ----
  machine-generated HTML, PostScript or PDF produced by some word
  processors for output purposes only.
  
! The “@strong{Title Page}” means, for a printed book, the title page itself,
  plus such following pages as are needed to hold, legibly, the material
  this License requires to appear in the title page.  For works in
! formats which do not have any title page as such, “Title Page” means
! the text near the most prominent appearance of the work’s title,
  preceding the beginning of the body of the text.
  
! The “@strong{publisher}” means any person or entity that distributes
  copies of the Document to the public.
  
! A section “@strong{Entitled XYZ}” means a named subunit of the Document whose
  title either is precisely XYZ or contains XYZ in parentheses following
  text that translates XYZ in another language.  (Here XYZ stands for a
! specific section name mentioned below, such as “@strong{Acknowledgements}”,
! “@strong{Dedications}”, “@strong{Endorsements}”, or “@strong{History}”.)
! To “@strong{Preserve the Title}”
  of such a section when you modify the Document means that it remains a
! section “Entitled XYZ” according to this definition.
  
  The Document may include Warranty Disclaimers next to the notice which
  states that this License applies to the Document.  These Warranty
*************** you may publicly display copies.
*** 28830,28836 ****
  
  If you publish printed copies (or copies in media that commonly have
  printed covers) of the Document, numbering more than 100, and the
! Document's license notice requires Cover Texts, you must enclose the
  copies in covers that carry, clearly and legibly, all these Cover
  Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
  the back cover.  Both covers must also clearly and legibly identify
--- 28900,28906 ----
  
  If you publish printed copies (or copies in media that commonly have
  printed covers) of the Document, numbering more than 100, and the
! Document’s license notice requires Cover Texts, you must enclose the
  copies in covers that carry, clearly and legibly, all these Cover
  Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
  the back cover.  Both covers must also clearly and legibly identify
*************** terms of this License, in the form shown
*** 28907,28922 ****
  
  @item 
  Preserve in that license notice the full lists of Invariant Sections
! and required Cover Texts given in the Document's license notice.
  
  @item 
  Include an unaltered copy of this License.
  
  @item 
! Preserve the section Entitled "History", Preserve its Title, and add
  to it an item stating at least the title, year, new authors, and
  publisher of the Modified Version as given on the Title Page.  If
! there is no section Entitled "History" in the Document, create one
  stating the title, year, authors, and publisher of the Document as
  given on its Title Page, then add an item describing the Modified
  Version as stated in the previous sentence.
--- 28977,28992 ----
  
  @item 
  Preserve in that license notice the full lists of Invariant Sections
! and required Cover Texts given in the Document’s license notice.
  
  @item 
  Include an unaltered copy of this License.
  
  @item 
! Preserve the section Entitled “History”, Preserve its Title, and add
  to it an item stating at least the title, year, new authors, and
  publisher of the Modified Version as given on the Title Page.  If
! there is no section Entitled “History” in the Document, create one
  stating the title, year, authors, and publisher of the Document as
  given on its Title Page, then add an item describing the Modified
  Version as stated in the previous sentence.
*************** Version as stated in the previous senten
*** 28925,28937 ****
  Preserve the network location, if any, given in the Document for
  public access to a Transparent copy of the Document, and likewise
  the network locations given in the Document for previous versions
! it was based on.  These may be placed in the "History" section.
  You may omit a network location for a work that was published at
  least four years before the Document itself, or if the original
  publisher of the version it refers to gives permission.
  
  @item 
! For any section Entitled "Acknowledgements" or "Dedications",
  Preserve the Title of the section, and preserve in the section all
  the substance and tone of each of the contributor acknowledgements
  and/or dedications given therein.
--- 28995,29007 ----
  Preserve the network location, if any, given in the Document for
  public access to a Transparent copy of the Document, and likewise
  the network locations given in the Document for previous versions
! it was based on.  These may be placed in the “History” section.
  You may omit a network location for a work that was published at
  least four years before the Document itself, or if the original
  publisher of the version it refers to gives permission.
  
  @item 
! For any section Entitled “Acknowledgements” or “Dedications”,
  Preserve the Title of the section, and preserve in the section all
  the substance and tone of each of the contributor acknowledgements
  and/or dedications given therein.
*************** unaltered in their text and in their tit
*** 28942,28952 ****
  or the equivalent are not considered part of the section titles.
  
  @item 
! Delete any section Entitled "Endorsements".  Such a section
  may not be included in the Modified Version.
  
  @item 
! Do not retitle any existing section to be Entitled "Endorsements"
  or to conflict in title with any Invariant Section.
  
  @item 
--- 29012,29022 ----
  or the equivalent are not considered part of the section titles.
  
  @item 
! Delete any section Entitled “Endorsements”.  Such a section
  may not be included in the Modified Version.
  
  @item 
! Do not retitle any existing section to be Entitled “Endorsements”
  or to conflict in title with any Invariant Section.
  
  @item 
*************** If the Modified Version includes new fro
*** 28957,28968 ****
  appendices that qualify as Secondary Sections and contain no material
  copied from the Document, you may at your option designate some or all
  of these sections as invariant.  To do this, add their titles to the
! list of Invariant Sections in the Modified Version's license notice.
  These titles must be distinct from any other section titles.
  
! You may add a section Entitled "Endorsements", provided it contains
  nothing but endorsements of your Modified Version by various
! parties---for example, statements of peer review or that the text has
  been approved by an organization as the authoritative definition of a
  standard.
  
--- 29027,29038 ----
  appendices that qualify as Secondary Sections and contain no material
  copied from the Document, you may at your option designate some or all
  of these sections as invariant.  To do this, add their titles to the
! list of Invariant Sections in the Modified Version’s license notice.
  These titles must be distinct from any other section titles.
  
! You may add a section Entitled “Endorsements”, provided it contains
  nothing but endorsements of your Modified Version by various
! parties—for example, statements of peer review or that the text has
  been approved by an organization as the authoritative definition of a
  standard.
  
*************** author or publisher of that section if k
*** 28998,29008 ****
  Make the same adjustment to the section titles in the list of
  Invariant Sections in the license notice of the combined work.
  
! In the combination, you must combine any sections Entitled "History"
  in the various original documents, forming one section Entitled
! "History"; likewise combine any sections Entitled "Acknowledgements",
! and any sections Entitled "Dedications".  You must delete all sections
! Entitled "Endorsements".
  
  @strong{6. COLLECTIONS OF DOCUMENTS}
  
--- 29068,29078 ----
  Make the same adjustment to the section titles in the list of
  Invariant Sections in the license notice of the combined work.
  
! In the combination, you must combine any sections Entitled “History”
  in the various original documents, forming one section Entitled
! “History”; likewise combine any sections Entitled “Acknowledgements”,
! and any sections Entitled “Dedications”.  You must delete all sections
! Entitled “Endorsements”.
  
  @strong{6. COLLECTIONS OF DOCUMENTS}
  
*************** other respects regarding verbatim copyin
*** 29021,29036 ****
  
  A compilation of the Document or its derivatives with other separate
  and independent documents or works, in or on a volume of a storage or
! distribution medium, is called an "aggregate" if the copyright
  resulting from the compilation is not used to limit the legal rights
! of the compilation's users beyond what the individual works permit.
  When the Document is included in an aggregate, this License does not
  apply to the other works in the aggregate which are not themselves
  derivative works of the Document.
  
  If the Cover Text requirement of section 3 is applicable to these
  copies of the Document, then if the Document is less than one half of
! the entire aggregate, the Document's Cover Texts may be placed on
  covers that bracket the Document within the aggregate, or the
  electronic equivalent of covers if the Document is in electronic form.
  Otherwise they must appear on printed covers that bracket the whole
--- 29091,29106 ----
  
  A compilation of the Document or its derivatives with other separate
  and independent documents or works, in or on a volume of a storage or
! distribution medium, is called an “aggregate” if the copyright
  resulting from the compilation is not used to limit the legal rights
! of the compilation’s users beyond what the individual works permit.
  When the Document is included in an aggregate, this License does not
  apply to the other works in the aggregate which are not themselves
  derivative works of the Document.
  
  If the Cover Text requirement of section 3 is applicable to these
  copies of the Document, then if the Document is less than one half of
! the entire aggregate, the Document’s Cover Texts may be placed on
  covers that bracket the Document within the aggregate, or the
  electronic equivalent of covers if the Document is in electronic form.
  Otherwise they must appear on printed covers that bracket the whole
*************** of those notices and disclaimers.  In ca
*** 29051,29058 ****
  the translation and the original version of this License or a notice
  or disclaimer, the original version will prevail.
  
! If a section in the Document is Entitled "Acknowledgements",
! "Dedications", or "History", the requirement (section 4) to Preserve
  its Title (section 1) will typically require changing the actual
  title.
  
--- 29121,29128 ----
  the translation and the original version of this License or a notice
  or disclaimer, the original version will prevail.
  
! If a section in the Document is Entitled “Acknowledgements”,
! “Dedications”, or “History”, the requirement (section 4) to Preserve
  its Title (section 1) will typically require changing the actual
  title.
  
*************** The Free Software Foundation may publish
*** 29089,29129 ****
  of the GNU Free Documentation License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.  See
! @indicateurl{http://www.gnu.org/copyleft/}.
  
  Each version of the License is given a distinguishing version number.
  If the Document specifies that a particular numbered version of this
! License "or any later version" applies to it, you have the option of
  following the terms and conditions either of that specified version or
  of any later version that has been published (not as a draft) by the
  Free Software Foundation.  If the Document does not specify a version
  number of this License, you may choose any version ever published (not
  as a draft) by the Free Software Foundation.  If the Document
  specifies that a proxy can decide which future versions of this
! License can be used, that proxy's public statement of acceptance of a
  version permanently authorizes you to choose that version for the
  Document.
  
  @strong{11. RELICENSING}
  
! "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
  World Wide Web server that publishes copyrightable works and also
  provides prominent facilities for anybody to edit those works.  A
  public wiki that anybody can edit is an example of such a server.  A
! "Massive Multiauthor Collaboration" (or "MMC") contained in the
  site means any set of copyrightable works thus published on the MMC
  site.
  
! "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
  license published by Creative Commons Corporation, a not-for-profit
  corporation with a principal place of business in San Francisco,
  California, as well as future copyleft versions of that license
  published by that same organization.
  
! "Incorporate" means to publish or republish a Document, in whole or
  in part, as part of another Document.
  
! An MMC is "eligible for relicensing" if it is licensed under this
  License, and if all works that were first published under this License
  somewhere other than this MMC, and subsequently incorporated in whole
  or in part into the MMC, (1) had no cover texts or invariant sections,
--- 29159,29199 ----
  of the GNU Free Documentation License from time to time.  Such new
  versions will be similar in spirit to the present version, but may
  differ in detail to address new problems or concerns.  See
! @indicateurl{https://www.gnu.org/copyleft/}.
  
  Each version of the License is given a distinguishing version number.
  If the Document specifies that a particular numbered version of this
! License “or any later version” applies to it, you have the option of
  following the terms and conditions either of that specified version or
  of any later version that has been published (not as a draft) by the
  Free Software Foundation.  If the Document does not specify a version
  number of this License, you may choose any version ever published (not
  as a draft) by the Free Software Foundation.  If the Document
  specifies that a proxy can decide which future versions of this
! License can be used, that proxy’s public statement of acceptance of a
  version permanently authorizes you to choose that version for the
  Document.
  
  @strong{11. RELICENSING}
  
! “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any
  World Wide Web server that publishes copyrightable works and also
  provides prominent facilities for anybody to edit those works.  A
  public wiki that anybody can edit is an example of such a server.  A
! “Massive Multiauthor Collaboration” (or “MMC”) contained in the
  site means any set of copyrightable works thus published on the MMC
  site.
  
! “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
  license published by Creative Commons Corporation, a not-for-profit
  corporation with a principal place of business in San Francisco,
  California, as well as future copyleft versions of that license
  published by that same organization.
  
! “Incorporate” means to publish or republish a Document, in whole or
  in part, as part of another Document.
  
! An MMC is “eligible for relicensing” if it is licensed under this
  License, and if all works that were first published under this License
  somewhere other than this MMC, and subsequently incorporated in whole
  or in part into the MMC, (1) had no cover texts or invariant sections,
*************** Permission is granted to copy, distribut
*** 29146,29157 ****
  under the terms of the GNU Free Documentation License, Version 1.3
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
! A copy of the license is included in the section entitled "GNU
! Free Documentation License".
  @end quotation
  
  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
! replace the "with ... Texts." line with this:
  
  @quotation
  
--- 29216,29227 ----
  under the terms of the GNU Free Documentation License, Version 1.3
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
! A copy of the license is included in the section entitled “GNU
! Free Documentation License”.
  @end quotation
  
  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
! replace the “with … Texts.” line with this:
  
  @quotation
  
*************** to permit their use in free software.
*** 29174,29181 ****
  
  @printindex ge
  
- @anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{                              }
  @anchor{cf}@w{                              }
  
  @c %**end of body
  @bye
--- 29244,29251 ----
  
  @printindex ge
  
  @anchor{cf}@w{                              }
+ @anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{                              }
  
  @c %**end of body
  @bye
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatbind.adb gcc-12.1.0/gcc/ada/gnatbind.adb
*** gcc-11.3.0/gcc/ada/gnatbind.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatbind.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** procedure Gnatbind is
*** 125,131 ****
          Scan_ALI
            (F             => Std_Lib_File,
             T             => Text,
-            Ignore_ED     => False,
             Err           => False,
             Ignore_Errors => Debug_Flag_I);
  
--- 125,130 ----
*************** begin
*** 770,776 ****
              Id := Scan_ALI
                      (F                => Main_Lib_File,
                       T                => Text,
-                      Ignore_ED        => False,
                       Err              => False,
                       Ignore_Errors    => Debug_Flag_I,
                       Directly_Scanned => True);
--- 769,774 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatbind.ads gcc-12.1.0/gcc/ada/gnatbind.ads
*** gcc-11.3.0/gcc/ada/gnatbind.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatbind.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatchop.adb gcc-12.1.0/gcc/ada/gnatchop.adb
*** gcc-11.3.0/gcc/ada/gnatchop.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatchop.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
*************** procedure Gnatchop is
*** 995,1003 ****
  
        Buffer (Read_Ptr) := EOF;
  
!       --  Comment needed for the following ???
!       --  Under what circumstances can the test fail ???
!       --  What is copy doing in that case???
  
        if Read_Ptr = Length then
           Contents := Buffer;
--- 995,1002 ----
  
        Buffer (Read_Ptr) := EOF;
  
!       --  The following test can fail if there was an I/O error, in which case
!       --  Success will be set to False.
  
        if Read_Ptr = Length then
           Contents := Buffer;
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatclean.adb gcc-12.1.0/gcc/ada/gnatclean.adb
*** gcc-11.3.0/gcc/ada/gnatclean.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatclean.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatcmd.adb gcc-12.1.0/gcc/ada/gnatcmd.adb
*** gcc-11.3.0/gcc/ada/gnatcmd.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatcmd.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
*************** begin
*** 472,477 ****
--- 472,486 ----
  
           Program := new String'(Command_List (The_Command).Unixcmd.all);
  
+       elsif The_Command in Check | Test then
+          Program := new String'(Command_List (The_Command).Unixcmd.all);
+          Find_Program_Name;
+ 
+          if Name_Len > 5 then
+             First_Switches.Append
+               (new String'
+                  ("--target=" & Name_Buffer (1 .. Name_Len - 5)));
+          end if;
        else
           Program :=
             Program_Name (Command_List (The_Command).Unixcmd.all, "gnat");
*************** begin
*** 481,493 ****
           --  instead of gnatmake/gnatclean.
           --  Ditto for gnatname -> gprname and gnatls -> gprls.
  
!          if The_Command = Make
!            or else The_Command = Compile
!            or else The_Command = Bind
!            or else The_Command = Link
!            or else The_Command = Clean
!            or else The_Command = Name
!            or else The_Command = List
           then
              declare
                 Switch        : String_Access;
--- 490,496 ----
           --  instead of gnatmake/gnatclean.
           --  Ditto for gnatname -> gprname and gnatls -> gprls.
  
!          if The_Command in Make | Compile | Bind | Link | Clean | Name | List
           then
              declare
                 Switch        : String_Access;
*************** begin
*** 588,610 ****
        end if;
  
        --  For FIND and XREF, look for switch -P. If it is specified, then
!       --  report an error indicating that the command is no longer supporting
!       --  project files.
  
!       if The_Command = Find or else The_Command = Xref then
           declare
              Argv : String_Access;
           begin
              for Arg_Num in 1 .. Last_Switches.Last loop
                 Argv := Last_Switches.Table (Arg_Num);
  
!                if Argv'Length >= 2 and then
!                   Argv (Argv'First .. Argv'First + 1) = "-P"
                 then
                    if The_Command = Find then
!                      Fail ("'gnat find -P' is no longer supported;");
                    else
!                      Fail ("'gnat xref -P' is no longer supported;");
                    end if;
                 end if;
              end loop;
--- 591,613 ----
        end if;
  
        --  For FIND and XREF, look for switch -P. If it is specified, then
!       --  report an error indicating that the command does not support project
!       --  files.
  
!       if The_Command in Find | Xref then
           declare
              Argv : String_Access;
           begin
              for Arg_Num in 1 .. Last_Switches.Last loop
                 Argv := Last_Switches.Table (Arg_Num);
  
!                if Argv'Length >= 2
!                  and then Argv (Argv'First .. Argv'First + 1) = "-P"
                 then
                    if The_Command = Find then
!                      Fail ("'gnat find -P' is not supported;");
                    else
!                      Fail ("'gnat xref -P' is not supported;");
                    end if;
                 end if;
              end loop;
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatcmd.ads gcc-12.1.0/gcc/ada/gnatcmd.ads
*** gcc-11.3.0/gcc/ada/gnatcmd.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatcmd.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatdll.adb gcc-12.1.0/gcc/ada/gnatdll.adb
*** gcc-11.3.0/gcc/ada/gnatdll.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatdll.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
*************** procedure Gnatdll is
*** 172,182 ****
        --  Add the files listed in List_Filename (one by line) to the list
        --  of file to handle
  
!       Max_Files   : constant := 5_000;
!       Max_Options : constant :=   100;
!       --  These are arbitrary limits, a better way will be to use linked list.
!       --  No, a better choice would be to use tables ???
!       --  Limits on what???
  
        Ofiles : Argument_List (1 .. Max_Files);
        O      : Positive := Ofiles'First;
--- 172,179 ----
        --  Add the files listed in List_Filename (one by line) to the list
        --  of file to handle
  
!       Max_Files   : constant := 50_000;
!       Max_Options : constant :=  1_000;
  
        Ofiles : Argument_List (1 .. Max_Files);
        O      : Positive := Ofiles'First;
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatfind.adb gcc-12.1.0/gcc/ada/gnatfind.adb
*** gcc-11.3.0/gcc/ada/gnatfind.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatfind.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
*************** procedure Gnatfind is
*** 347,352 ****
--- 347,357 ----
  --  Start of processing for Gnatfind
  
  begin
+    Put_Line
+      ("WARNING: gnatfind is obsolete and will be removed in the next release");
+    Put_Line
+      ("Consider using Libadalang or GNAT Studio python scripting instead");
+ 
     Parse_Cmd_Line;
  
     if not Have_Entity then
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatkr.adb gcc-12.1.0/gcc/ada/gnatkr.adb
*** gcc-11.3.0/gcc/ada/gnatkr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatkr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatkr.ads gcc-12.1.0/gcc/ada/gnatkr.ads
*** gcc-11.3.0/gcc/ada/gnatkr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatkr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatlink.adb gcc-12.1.0/gcc/ada/gnatlink.adb
*** gcc-11.3.0/gcc/ada/gnatlink.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatlink.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
*************** procedure Gnatlink is
*** 69,75 ****
       Table_Initial        => 20,
       Table_Increment      => 100,
       Table_Name           => "Gnatlink.Gcc_Linker_Options");
!    --  Comments needed ???
  
     package Libpath is new Table.Table (
       Table_Component_Type => Character,
--- 69,75 ----
       Table_Initial        => 20,
       Table_Increment      => 100,
       Table_Name           => "Gnatlink.Gcc_Linker_Options");
!    --  Options to be passed to the gcc linker
  
     package Libpath is new Table.Table (
       Table_Component_Type => Character,
*************** procedure Gnatlink is
*** 78,84 ****
       Table_Initial        => 4096,
       Table_Increment      => 100,
       Table_Name           => "Gnatlink.Libpath");
!    --  Comments needed ???
  
     package Linker_Options is new Table.Table (
       Table_Component_Type => String_Access,
--- 78,84 ----
       Table_Initial        => 4096,
       Table_Increment      => 100,
       Table_Name           => "Gnatlink.Libpath");
!    --  Library search path
  
     package Linker_Options is new Table.Table (
       Table_Component_Type => String_Access,
*************** procedure Gnatlink is
*** 87,93 ****
       Table_Initial        => 20,
       Table_Increment      => 100,
       Table_Name           => "Gnatlink.Linker_Options");
!    --  Comments needed ???
  
     package Linker_Objects is new Table.Table (
       Table_Component_Type => String_Access,
--- 87,93 ----
       Table_Initial        => 20,
       Table_Increment      => 100,
       Table_Name           => "Gnatlink.Linker_Options");
!    --  Options to be passed to gnatlink
  
     package Linker_Objects is new Table.Table (
       Table_Component_Type => String_Access,
*************** procedure Gnatlink is
*** 204,215 ****
     --  Indicates wether libgcc should be statically linked (use 'T') or
     --  dynamically linked (use 'H') by default.
  
     function Base_Name (File_Name : String) return String;
     --  Return just the file name part without the extension (if present)
  
     procedure Check_Existing_Executable (File_Name : String);
     --  Delete any existing executable to avoid accidentally updating the target
!    --  of a symbolic link, but produce a Fatail_Error if File_Name matches any
     --  of the source file names. This avoids overwriting of extensionless
     --  source files by accident on systems where executables do not have
     --  extensions.
--- 204,248 ----
     --  Indicates wether libgcc should be statically linked (use 'T') or
     --  dynamically linked (use 'H') by default.
  
+    Link_Max : Integer;
+    pragma Import (C, Link_Max, "__gnat_link_max");
+    --  Maximum number of bytes on the command line supported by the OS
+    --  linker. Passed this limit the response file mechanism must be used
+    --  if supported.
+ 
+    Run_Path_Option_Ptr : Interfaces.C.Strings.chars_ptr;
+    pragma Import (C, Run_Path_Option_Ptr, "__gnat_run_path_option");
+    --  Pointer to string representing the native linker option which
+    --  specifies the path where the dynamic loader should find shared
+    --  libraries. Equal to null string if this system doesn't support it.
+ 
+    Libgcc_Subdir_Ptr : Interfaces.C.Strings.chars_ptr;
+    pragma Import (C, Libgcc_Subdir_Ptr, "__gnat_default_libgcc_subdir");
+    --  Pointer to string indicating the installation subdirectory where
+    --  a default shared libgcc might be found.
+ 
+    Object_Library_Ext_Ptr : Interfaces.C.Strings.chars_ptr;
+    pragma Import
+      (C, Object_Library_Ext_Ptr, "__gnat_object_library_extension");
+    --  Pointer to string specifying the default extension for
+    --  object libraries, e.g. Unix uses ".a".
+ 
+    Separate_Run_Path_Options : Boolean;
+    for Separate_Run_Path_Options'Size use Character'Size;
+    pragma Import
+      (C, Separate_Run_Path_Options, "__gnat_separate_run_path_options");
+    --  Whether separate rpath options should be emitted for each directory
+ 
+    function Get_Maximum_File_Name_Length return Integer;
+    pragma Import (C, Get_Maximum_File_Name_Length,
+                      "__gnat_get_maximum_file_name_length");
+ 
     function Base_Name (File_Name : String) return String;
     --  Return just the file name part without the extension (if present)
  
     procedure Check_Existing_Executable (File_Name : String);
     --  Delete any existing executable to avoid accidentally updating the target
!    --  of a symbolic link, but produce a Fatal_Error if File_Name matches any
     --  of the source file names. This avoids overwriting of extensionless
     --  source files by accident on systems where executables do not have
     --  extensions.
*************** procedure Gnatlink is
*** 229,234 ****
--- 262,280 ----
     procedure Process_Binder_File (Name : String);
     --  Reads the binder file and extracts linker arguments
  
+    function Index (S, Pattern : String) return Natural;
+    --  Return the last occurrence of Pattern in S, or 0 if none
+ 
+    procedure Search_Library_Path
+      (Next_Line   : String;
+       Nfirst      : Integer;
+       Nlast       : Integer;
+       Last        : Integer;
+       GNAT_Static : Boolean;
+       GNAT_Shared : Boolean);
+    --  Given a Gnat standard library, search the library path to find the
+    --  library location. Parameters are documented in Process_Binder_File.
+ 
     procedure Usage;
     --  Display usage
  
*************** procedure Gnatlink is
*** 307,313 ****
        pragma Unreferenced (Status);
     begin
        Status := unlink (Name'Address);
-       --  Is it really right to ignore an error here ???
     end Delete;
  
     ---------------
--- 353,358 ----
*************** procedure Gnatlink is
*** 332,337 ****
--- 377,399 ----
        Exit_Program (E_Fatal);
     end Exit_With_Error;
  
+    -----------
+    -- Index --
+    -----------
+ 
+    function Index (S, Pattern : String) return Natural is
+       Len : constant Natural := Pattern'Length;
+ 
+    begin
+       for J in reverse S'First .. S'Last - Len + 1 loop
+          if Pattern = S (J .. J + Len - 1) then
+             return J;
+          end if;
+       end loop;
+ 
+       return 0;
+    end Index;
+ 
     ------------------
     -- Process_Args --
     ------------------
*************** procedure Gnatlink is
*** 362,382 ****
              Arg : constant String := Argument (Next_Arg);
  
           begin
!             --  Case of argument which is a switch
! 
!             --  We definitely need section by section comments here ???
  
              if Skip_Next then
  
-                --  This argument must not be parsed, just add it to the
-                --  list of linker's options.
- 
                 Skip_Next := False;
  
                 Linker_Options.Increment_Last;
                 Linker_Options.Table (Linker_Options.Last) :=
                   new String'(Arg);
  
              elsif Arg'Length /= 0 and then Arg (1) = '-' then
                 if Arg'Length > 4 and then Arg (2 .. 5) = "gnat" then
                    Exit_With_Error
--- 424,442 ----
              Arg : constant String := Argument (Next_Arg);
  
           begin
!             --  This argument must not be parsed, just add it to the list of
!             --  linker's options.
  
              if Skip_Next then
  
                 Skip_Next := False;
  
                 Linker_Options.Increment_Last;
                 Linker_Options.Table (Linker_Options.Last) :=
                   new String'(Arg);
  
+             --  Case of argument which is a switch
+ 
              elsif Arg'Length /= 0 and then Arg (1) = '-' then
                 if Arg'Length > 4 and then Arg (2 .. 5) = "gnat" then
                    Exit_With_Error
*************** procedure Gnatlink is
*** 689,700 ****
        Link_Bytes : Integer := 0;
        --  Projected number of bytes for the linker command line
  
-       Link_Max : Integer;
-       pragma Import (C, Link_Max, "__gnat_link_max");
-       --  Maximum number of bytes on the command line supported by the OS
-       --  linker. Passed this limit the response file mechanism must be used
-       --  if supported.
- 
        Next_Line : String (1 .. 1000);
        --  Current line value
  
--- 749,754 ----
*************** procedure Gnatlink is
*** 752,787 ****
        RB_Nlast     : Integer;             -- Slice last index
        RB_Nfirst    : Integer;             -- Slice first index
  
-       Run_Path_Option_Ptr : Interfaces.C.Strings.chars_ptr;
-       pragma Import (C, Run_Path_Option_Ptr, "__gnat_run_path_option");
-       --  Pointer to string representing the native linker option which
-       --  specifies the path where the dynamic loader should find shared
-       --  libraries. Equal to null string if this system doesn't support it.
- 
-       Libgcc_Subdir_Ptr : Interfaces.C.Strings.chars_ptr;
-       pragma Import (C, Libgcc_Subdir_Ptr, "__gnat_default_libgcc_subdir");
-       --  Pointer to string indicating the installation subdirectory where
-       --  a default shared libgcc might be found.
- 
-       Object_Library_Ext_Ptr : Interfaces.C.Strings.chars_ptr;
-       pragma Import
-         (C, Object_Library_Ext_Ptr, "__gnat_object_library_extension");
-       --  Pointer to string specifying the default extension for
-       --  object libraries, e.g. Unix uses ".a".
- 
-       Separate_Run_Path_Options : Boolean;
-       for Separate_Run_Path_Options'Size use Character'Size;
-       pragma Import
-         (C, Separate_Run_Path_Options, "__gnat_separate_run_path_options");
-       --  Whether separate rpath options should be emitted for each directory
- 
        procedure Get_Next_Line;
        --  Read the next line from the binder file without the line
        --  terminator.
  
-       function Index (S, Pattern : String) return Natural;
-       --  Return the last occurrence of Pattern in S, or 0 if none
- 
        procedure Store_File_Context;
        --  Store current file context, Fd position and current line data.
        --  The file context is stored into the rollback data above (RB_*).
--- 806,815 ----
*************** procedure Gnatlink is
*** 823,845 ****
           Nlast := Nlast - 1;
        end Get_Next_Line;
  
-       -----------
-       -- Index --
-       -----------
- 
-       function Index (S, Pattern : String) return Natural is
-          Len : constant Natural := Pattern'Length;
- 
-       begin
-          for J in reverse S'First .. S'Last - Len + 1 loop
-             if Pattern = S (J .. J + Len - 1) then
-                return J;
-             end if;
-          end loop;
- 
-          return 0;
-       end Index;
- 
        ---------------------------
        -- Rollback_File_Context --
        ---------------------------
--- 851,856 ----
*************** procedure Gnatlink is
*** 1003,1009 ****
           Create_Temp_File (Tname_FD, Tname);
  
           --  ??? File descriptor should be checked to not be Invalid_FD.
!          --  ??? Status of Write and Close operations should be checked, and
           --  failure should occur if a status is wrong.
  
           for J in Objs_Begin .. Objs_End loop
--- 1014,1020 ----
           Create_Temp_File (Tname_FD, Tname);
  
           --  ??? File descriptor should be checked to not be Invalid_FD.
!          --  Status of Write and Close operations should be checked, and
           --  failure should occur if a status is wrong.
  
           for J in Objs_Begin .. Objs_End loop
*************** procedure Gnatlink is
*** 1115,1382 ****
                       Last := Nlast;
                    end if;
  
!                   --  Given a Gnat standard library, search the library path to
!                   --  find the library location.
  
!                   --  Shouldn't we abstract a proc here, we are getting awfully
!                   --  heavily nested ???
  
!                   declare
!                      File_Path : String_Access;
  
!                      Object_Lib_Extension : constant String :=
!                        Value (Object_Library_Ext_Ptr);
  
!                      File_Name : constant String := "lib" &
!                        Next_Line (Nfirst + 2 .. Last) & Object_Lib_Extension;
  
!                      Run_Path_Opt : constant String :=
!                        Value (Run_Path_Option_Ptr);
  
!                      GCC_Index          : Natural;
!                      Run_Path_Opt_Index : Natural := 0;
  
!                   begin
!                      File_Path :=
!                        Locate_Regular_File (File_Name,
!                          String (Libpath.Table (1 .. Libpath.Last)));
  
!                      if File_Path /= null then
!                         if GNAT_Static then
  
!                            --  If static gnatlib found, explicitly specify to
!                            --  overcome possible linker default usage of shared
!                            --  version.
  
!                            Linker_Options.Increment_Last;
  
!                            Linker_Options.Table (Linker_Options.Last) :=
!                              new String'(File_Path.all);
  
!                         elsif GNAT_Shared then
!                            if Opt.Run_Path_Option then
  
!                               --  If shared gnatlib desired, add appropriate
!                               --  system specific switch so that it can be
!                               --  located at runtime.
  
!                               if Run_Path_Opt'Length /= 0 then
  
!                                  --  Output the system specific linker command
!                                  --  that allows the image activator to find
!                                  --  the shared library at runtime. Also add
!                                  --  path to find libgcc_s.so, if relevant.
  
!                                  declare
!                                     Path : String (1 .. File_Path'Length + 15);
  
!                                     Path_Last : constant Natural :=
!                                                   File_Path'Length;
  
!                                  begin
!                                     Path (1 .. File_Path'Length) :=
!                                       File_Path.all;
  
!                                  --  To find the location of the shared version
!                                  --  of libgcc, we look for "gcc-lib" in the
!                                  --  path of the library. However, this
!                                  --  subdirectory is no longer present in
!                                  --  recent versions of GCC. So, we look for
!                                  --  the last subdirectory "lib" in the path.
  
!                                     GCC_Index :=
!                                       Index (Path (1 .. Path_Last), "gcc-lib");
  
!                                     if GCC_Index /= 0 then
  
!                                        --  The shared version of libgcc is
!                                        --  located in the parent directory.
  
!                                        GCC_Index := GCC_Index - 1;
  
!                                     else
!                                        GCC_Index :=
!                                          Index
!                                            (Path (1 .. Path_Last),
!                                             "/lib/");
  
!                                        if GCC_Index = 0 then
!                                           GCC_Index :=
!                                             Index (Path (1 .. Path_Last),
!                                                    Directory_Separator & "lib"
!                                                    & Directory_Separator);
!                                        end if;
  
!                                        --  If we have found a "lib" subdir in
!                                        --  the path to libgnat, the possible
!                                        --  shared libgcc of interest by default
!                                        --  is in libgcc_subdir at the same
!                                        --  level.
  
!                                        if GCC_Index /= 0 then
!                                           declare
!                                              Subdir : constant String :=
!                                                Value (Libgcc_Subdir_Ptr);
!                                           begin
!                                              Path
!                                                (GCC_Index + 1 ..
!                                                 GCC_Index + Subdir'Length) :=
!                                                Subdir;
!                                              GCC_Index :=
!                                                GCC_Index + Subdir'Length;
!                                           end;
!                                        end if;
!                                     end if;
  
!                                  --  Look for an eventual run_path_option in
!                                  --  the linker switches.
  
!                                     if Separate_Run_Path_Options then
!                                        Linker_Options.Increment_Last;
!                                        Linker_Options.Table
!                                          (Linker_Options.Last) :=
!                                            new String'
!                                              (Run_Path_Opt
!                                               & File_Path
!                                                 (1 .. File_Path'Length
!                                                  - File_Name'Length));
  
!                                        if GCC_Index /= 0 then
!                                           Linker_Options.Increment_Last;
!                                           Linker_Options.Table
!                                             (Linker_Options.Last) :=
!                                             new String'
!                                               (Run_Path_Opt
!                                                & Path (1 .. GCC_Index));
!                                        end if;
  
!                                     else
!                                        for J in reverse
!                                          1 .. Linker_Options.Last
!                                        loop
!                                           if Linker_Options.Table (J) /= null
!                                             and then
!                                               Linker_Options.Table (J)'Length
!                                                         > Run_Path_Opt'Length
!                                             and then
!                                               Linker_Options.Table (J)
!                                                 (1 .. Run_Path_Opt'Length) =
!                                                                  Run_Path_Opt
!                                           then
!                                              --  We have found an already
!                                              --  specified run_path_option:
!                                              --  we will add to this
!                                              --  switch, because only one
!                                              --  run_path_option should be
!                                              --  specified.
  
!                                              Run_Path_Opt_Index := J;
!                                              exit;
!                                           end if;
!                                        end loop;
  
!                                        --  If there is no run_path_option, we
!                                        --  need to add one.
  
!                                        if Run_Path_Opt_Index = 0 then
!                                           Linker_Options.Increment_Last;
!                                        end if;
  
!                                        if GCC_Index = 0 then
!                                           if Run_Path_Opt_Index = 0 then
!                                              Linker_Options.Table
!                                                (Linker_Options.Last) :=
!                                                  new String'
!                                                    (Run_Path_Opt
!                                                     & File_Path
!                                                       (1 .. File_Path'Length
!                                                        - File_Name'Length));
  
!                                           else
!                                              Linker_Options.Table
!                                                (Run_Path_Opt_Index) :=
!                                                  new String'
!                                                    (Linker_Options.Table
!                                                      (Run_Path_Opt_Index).all
!                                                     & Path_Separator
!                                                     & File_Path
!                                                       (1 .. File_Path'Length
!                                                        - File_Name'Length));
!                                           end if;
  
!                                        else
!                                           if Run_Path_Opt_Index = 0 then
!                                              Linker_Options.Table
!                                                (Linker_Options.Last) :=
!                                                  new String'
!                                                    (Run_Path_Opt
!                                                     & File_Path
!                                                       (1 .. File_Path'Length
!                                                        - File_Name'Length)
!                                                     & Path_Separator
!                                                     & Path (1 .. GCC_Index));
  
!                                           else
!                                              Linker_Options.Table
!                                                (Run_Path_Opt_Index) :=
!                                                  new String'
!                                                    (Linker_Options.Table
!                                                      (Run_Path_Opt_Index).all
!                                                     & Path_Separator
!                                                     & File_Path
!                                                       (1 .. File_Path'Length
!                                                        - File_Name'Length)
!                                                     & Path_Separator
!                                                     & Path (1 .. GCC_Index));
!                                           end if;
!                                        end if;
!                                     end if;
!                                  end;
!                               end if;
                             end if;
  
!                            --  Then we add the appropriate -l switch
  
                             Linker_Options.Increment_Last;
-                            Linker_Options.Table (Linker_Options.Last) :=
-                              new String'(Next_Line (Nfirst .. Nlast));
                          end if;
  
!                      else
!                         --  If gnatlib library not found, then add it anyway in
!                         --  case some other mechanism may find it.
  
!                         Linker_Options.Increment_Last;
!                         Linker_Options.Table (Linker_Options.Last) :=
!                           new String'(Next_Line (Nfirst .. Nlast));
                       end if;
                    end;
-                else
-                   Linker_Options.Increment_Last;
-                   Linker_Options.Table (Linker_Options.Last) :=
-                     new String'(Next_Line (Nfirst .. Nlast));
                 end if;
              end if;
  
!             Xlinker_Was_Previous := Next_Line (Nfirst .. Nlast) = "-Xlinker";
! 
!             Get_Next_Line;
!             exit when Next_Line (Nfirst .. Nlast) = End_Info;
  
!             Next_Line (Nfirst .. Nlast - 8) := Next_Line (Nfirst + 8 .. Nlast);
!             Nlast := Nlast - 8;
!          end loop;
!       end if;
  
!       --  If -shared was specified, invoke gcc with -shared-libgcc
  
-       if GNAT_Shared then
           Linker_Options.Increment_Last;
!          Linker_Options.Table (Linker_Options.Last) := Shared_Libgcc;
        end if;
! 
!       Status := fclose (Fd);
!    end Process_Binder_File;
  
     -----------
     -- Usage --
--- 1126,1387 ----
                       Last := Nlast;
                    end if;
  
!                   Search_Library_Path
!                     (Next_Line   => Next_Line,
!                      Nfirst      => Nfirst,
!                      Nlast       => Nlast,
!                      Last        => Last,
!                      GNAT_Static => GNAT_Static,
!                      GNAT_Shared => GNAT_Shared);
  
!                else
!                   Linker_Options.Increment_Last;
!                   Linker_Options.Table (Linker_Options.Last) :=
!                     new String'(Next_Line (Nfirst .. Nlast));
!                end if;
!             end if;
  
!             Xlinker_Was_Previous := Next_Line (Nfirst .. Nlast) = "-Xlinker";
  
!             Get_Next_Line;
!             exit when Next_Line (Nfirst .. Nlast) = End_Info;
  
!             Next_Line (Nfirst .. Nlast - 8) := Next_Line (Nfirst + 8 .. Nlast);
!             Nlast := Nlast - 8;
!          end loop;
!       end if;
  
!       --  If -shared was specified, invoke gcc with -shared-libgcc
  
!       if GNAT_Shared then
!          Linker_Options.Increment_Last;
!          Linker_Options.Table (Linker_Options.Last) := Shared_Libgcc;
!       end if;
  
!       Status := fclose (Fd);
!    end Process_Binder_File;
  
!    -------------------------
!    -- Search_Library_Path --
!    -------------------------
  
!    procedure Search_Library_Path
!      (Next_Line   : String;
!       Nfirst      : Integer;
!       Nlast       : Integer;
!       Last        : Integer;
!       GNAT_Static : Boolean;
!       GNAT_Shared : Boolean)
!    is
!       File_Path : String_Access;
  
!       Object_Lib_Extension : constant String :=
!         Value (Object_Library_Ext_Ptr);
  
!       File_Name : constant String := "lib" &
!         Next_Line (Nfirst + 2 .. Last) & Object_Lib_Extension;
  
!       Run_Path_Opt : constant String :=
!         Value (Run_Path_Option_Ptr);
  
!       GCC_Index          : Natural;
!       Run_Path_Opt_Index : Natural := 0;
  
!    begin
!       File_Path :=
!         Locate_Regular_File (File_Name,
!           String (Libpath.Table (1 .. Libpath.Last)));
  
!       if File_Path /= null then
!          if GNAT_Static then
  
!             --  If static gnatlib found, explicitly specify to overcome
!             --  possible linker default usage of shared version.
  
!             Linker_Options.Increment_Last;
  
!             Linker_Options.Table (Linker_Options.Last) :=
!               new String'(File_Path.all);
  
!          elsif GNAT_Shared then
!             if Opt.Run_Path_Option then
  
!                --  If shared gnatlib desired, add appropriate system specific
!                --  switch so that it can be located at runtime.
  
!                if Run_Path_Opt'Length /= 0 then
  
!                   --  Output the system specific linker command that allows the
!                   --  image activator to find the shared library at
!                   --  runtime. Also add path to find libgcc_s.so, if relevant.
  
!                   declare
!                      Path : String (1 .. File_Path'Length + 15);
  
!                      Path_Last : constant Natural := File_Path'Length;
  
!                   begin
!                      Path (1 .. File_Path'Length) := File_Path.all;
  
!                   --  To find the location of the shared version of libgcc, we
!                   --  look for "gcc-lib" in the path of the library. However,
!                   --  this subdirectory is no longer present in recent versions
!                   --  of GCC. So, we look for the last subdirectory "lib" in
!                   --  the path.
  
!                      GCC_Index := Index (Path (1 .. Path_Last), "gcc-lib");
  
!                      if GCC_Index /= 0 then
  
!                         --  The shared version of libgcc is located in the
!                         --  parent directory.
  
!                         GCC_Index := GCC_Index - 1;
  
!                      else
!                         GCC_Index := Index (Path (1 .. Path_Last), "/lib/");
  
!                         if GCC_Index = 0 then
!                            GCC_Index :=
!                              Index (Path (1 .. Path_Last),
!                                     Directory_Separator & "lib"
!                                     & Directory_Separator);
!                         end if;
  
!                         --  If we have found a "lib" subdir in the path to
!                         --  libgnat, the possible shared libgcc of interest by
!                         --  default is in libgcc_subdir at the same level.
  
!                         if GCC_Index /= 0 then
!                            declare
!                               Subdir : constant String :=
!                                 Value (Libgcc_Subdir_Ptr);
  
!                            begin
!                               Path (GCC_Index + 1 .. GCC_Index + Subdir'Length)
!                                 := Subdir;
!                               GCC_Index := GCC_Index + Subdir'Length;
!                            end;
!                         end if;
!                      end if;
  
!                   --  Look for an eventual run_path_option in
!                   --  the linker switches.
  
!                      if Separate_Run_Path_Options then
!                         Linker_Options.Increment_Last;
!                         Linker_Options.Table
!                           (Linker_Options.Last) :=
!                             new String'
!                               (Run_Path_Opt
!                                & File_Path
!                                  (1 .. File_Path'Length
!                                   - File_Name'Length));
  
!                         if GCC_Index /= 0 then
!                            Linker_Options.Increment_Last;
!                            Linker_Options.Table (Linker_Options.Last) :=
!                              new String'
!                                (Run_Path_Opt
!                                 & Path (1 .. GCC_Index));
!                         end if;
! 
!                      else
!                         for J in reverse 1 .. Linker_Options.Last loop
!                            if Linker_Options.Table (J) /= null
!                              and then
!                                Linker_Options.Table (J)'Length
!                                          > Run_Path_Opt'Length
!                              and then
!                                Linker_Options.Table (J)
!                                  (1 .. Run_Path_Opt'Length) =
!                                                   Run_Path_Opt
!                            then
!                               --  We have found an already specified
!                               --  run_path_option: we will add to this switch,
!                               --  because only one run_path_option should be
!                               --  specified.
! 
!                               Run_Path_Opt_Index := J;
!                               exit;
                             end if;
+                         end loop;
  
!                         --  If there is no run_path_option, we need to add one.
  
+                         if Run_Path_Opt_Index = 0 then
                             Linker_Options.Increment_Last;
                          end if;
  
!                         if GCC_Index = 0 then
!                            if Run_Path_Opt_Index = 0 then
!                               Linker_Options.Table
!                                 (Linker_Options.Last) :=
!                                   new String'
!                                     (Run_Path_Opt
!                                      & File_Path
!                                        (1 .. File_Path'Length
!                                         - File_Name'Length));
  
!                            else
!                               Linker_Options.Table
!                                 (Run_Path_Opt_Index) :=
!                                   new String'
!                                     (Linker_Options.Table
!                                       (Run_Path_Opt_Index).all
!                                      & Path_Separator
!                                      & File_Path
!                                        (1 .. File_Path'Length
!                                         - File_Name'Length));
!                            end if;
! 
!                         else
!                            if Run_Path_Opt_Index = 0 then
!                               Linker_Options.Table
!                                 (Linker_Options.Last) :=
!                                   new String'
!                                     (Run_Path_Opt
!                                      & File_Path
!                                        (1 .. File_Path'Length
!                                         - File_Name'Length)
!                                      & Path_Separator
!                                      & Path (1 .. GCC_Index));
! 
!                            else
!                               Linker_Options.Table
!                                 (Run_Path_Opt_Index) :=
!                                   new String'
!                                     (Linker_Options.Table
!                                       (Run_Path_Opt_Index).all
!                                      & Path_Separator
!                                      & File_Path
!                                        (1 .. File_Path'Length
!                                         - File_Name'Length)
!                                      & Path_Separator
!                                      & Path (1 .. GCC_Index));
!                            end if;
!                         end if;
                       end if;
                    end;
                 end if;
              end if;
  
!             --  Then we add the appropriate -l switch
  
!             Linker_Options.Increment_Last;
!             Linker_Options.Table (Linker_Options.Last) :=
!               new String'(Next_Line (Nfirst .. Nlast));
!          end if;
  
!       else
!          --  If gnatlib library not found, then add it anyway in
!          --  case some other mechanism may find it.
  
           Linker_Options.Increment_Last;
!          Linker_Options.Table (Linker_Options.Last) :=
!            new String'(Next_Line (Nfirst .. Nlast));
        end if;
!    end Search_Library_Path;
  
     -----------
     -- Usage --
*************** begin
*** 1526,1532 ****
           A := Scan_ALI
                 (F,
                  T,
-                 Ignore_ED     => False,
                  Err           => False,
                  Ignore_Errors => True);
  
--- 1531,1536 ----
*************** begin
*** 1748,1757 ****
        Fname     : constant String  := Base_Name (Ali_File_Name.all);
        Fname_Len : Integer := Fname'Length;
  
-       function Get_Maximum_File_Name_Length return Integer;
-       pragma Import (C, Get_Maximum_File_Name_Length,
-                         "__gnat_get_maximum_file_name_length");
- 
        Maximum_File_Name_Length : constant Integer :=
                                     Get_Maximum_File_Name_Length;
  
--- 1752,1757 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatlink.ads gcc-12.1.0/gcc/ada/gnatlink.ads
*** gcc-11.3.0/gcc/ada/gnatlink.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatlink.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatls.adb gcc-12.1.0/gcc/ada/gnatls.adb
*** gcc-11.3.0/gcc/ada/gnatls.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatls.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** procedure Gnatls is
*** 234,242 ****
        --  already been initialized.
  
        procedure Add_Directories
!         (Self    : in out String_Access;
!          Path    : String;
!          Prepend : Boolean := False);
        --  Add one or more directories to the path. Directories added with this
        --  procedure are added in order after the current directory and before
        --  the path given by the environment variable GPR_PROJECT_PATH. A value
--- 234,241 ----
        --  already been initialized.
  
        procedure Add_Directories
!         (Self : in out String_Access;
!          Path : String);
        --  Add one or more directories to the path. Directories added with this
        --  procedure are added in order after the current directory and before
        --  the path given by the environment variable GPR_PROJECT_PATH. A value
*************** procedure Gnatls is
*** 1239,1247 ****
        ---------------------
  
        procedure Add_Directories
!         (Self    : in out String_Access;
!          Path    : String;
!          Prepend : Boolean := False)
        is
           Tmp : String_Access;
  
--- 1238,1245 ----
        ---------------------
  
        procedure Add_Directories
!         (Self : in out String_Access;
!          Path : String)
        is
           Tmp : String_Access;
  
*************** procedure Gnatls is
*** 1250,1260 ****
              Self := new String'(Uninitialized_Prefix & Path);
           else
              Tmp := Self;
!             if Prepend then
!                Self := new String'(Path & Path_Separator & Tmp.all);
!             else
!                Self := new String'(Tmp.all & Path_Separator & Path);
!             end if;
              Free (Tmp);
           end if;
        end Add_Directories;
--- 1248,1254 ----
              Self := new String'(Uninitialized_Prefix & Path);
           else
              Tmp := Self;
!             Self := new String'(Tmp.all & Path_Separator & Path);
              Free (Tmp);
           end if;
        end Add_Directories;
*************** procedure Gnatls is
*** 1345,1405 ****
           if Gpr_Prj_Path_File.all /= "" then
              FD := Open_Read (Gpr_Prj_Path_File.all, GNAT.OS_Lib.Text);
  
!             if FD = Invalid_FD then
!                Osint.Fail
!                  ("warning: could not read project path file """
!                   & Gpr_Prj_Path_File.all & """");
!             end if;
! 
!             Len := Integer (File_Length (FD));
  
!             declare
!                Buffer : String (1 .. Len);
!                Index  : Positive := 1;
!                Last   : Positive;
!                Tmp    : String_Access;
  
!             begin
!                --  Read the file
  
!                Len := Read (FD, Buffer (1)'Address, Len);
!                Close (FD);
  
!                --  Scan the file line by line
  
!                while Index < Buffer'Last loop
  
!                   --  Find the end of line
  
!                   Last := Index;
!                   while Last <= Buffer'Last
!                     and then Buffer (Last) /= ASCII.LF
!                     and then Buffer (Last) /= ASCII.CR
!                   loop
!                      Last := Last + 1;
!                   end loop;
  
!                   --  Ignore empty lines
  
!                   if Last > Index then
!                      Tmp := Self;
!                      Self :=
!                        new String'
!                          (Tmp.all & Path_Separator &
!                           Buffer (Index .. Last - 1));
!                      Free (Tmp);
!                   end if;
  
!                   --  Find the beginning of the next line
  
!                   Index := Last;
!                   while Buffer (Index) = ASCII.CR or else
!                         Buffer (Index) = ASCII.LF
!                   loop
!                      Index := Index + 1;
                    end loop;
!                end loop;
!             end;
  
           end if;
  
--- 1339,1395 ----
           if Gpr_Prj_Path_File.all /= "" then
              FD := Open_Read (Gpr_Prj_Path_File.all, GNAT.OS_Lib.Text);
  
!             if FD /= Invalid_FD then
!                Len := Integer (File_Length (FD));
  
!                declare
!                   Buffer : String (1 .. Len);
!                   Index  : Positive := 1;
!                   Last   : Positive;
!                   Tmp    : String_Access;
  
!                begin
!                   --  Read the file
  
!                   Len := Read (FD, Buffer (1)'Address, Len);
!                   Close (FD);
  
!                   --  Scan the file line by line
  
!                   while Index < Buffer'Last loop
  
!                      --  Find the end of line
  
!                      Last := Index;
!                      while Last <= Buffer'Last
!                        and then Buffer (Last) /= ASCII.LF
!                        and then Buffer (Last) /= ASCII.CR
!                      loop
!                         Last := Last + 1;
!                      end loop;
  
!                      --  Ignore empty lines
  
!                      if Last > Index then
!                         Tmp := Self;
!                         Self :=
!                           new String'
!                             (Tmp.all & Path_Separator &
!                              Buffer (Index .. Last - 1));
!                         Free (Tmp);
!                      end if;
  
!                      --  Find the beginning of the next line
  
!                      Index := Last;
!                      while Buffer (Index) = ASCII.CR or else
!                            Buffer (Index) = ASCII.LF
!                      loop
!                         Index := Index + 1;
!                      end loop;
                    end loop;
!                end;
!             end if;
  
           end if;
  
*************** begin
*** 2102,2111 ****
           Hi   : Source_Ptr;
  
        begin
!          Name_Buffer (1 .. 10) := "system.ads";
!          Name_Len := 10;
! 
!          Read_Source_File (Name_Find, 0, Hi, Text, FD);
  
           if Null_Source_Buffer_Ptr (Text) then
              No_Runtime := True;
--- 2092,2098 ----
           Hi   : Source_Ptr;
  
        begin
!          Read_Source_File (Name_Find ("system.ads"), 0, Hi, Text, FD);
  
           if Null_Source_Buffer_Ptr (Text) then
              No_Runtime := True;
*************** begin
*** 2278,2284 ****
                   Scan_ALI
                     (Ali_File,
                      Text,
-                     Ignore_ED     => False,
                      Err           => False,
                      Ignore_Errors => True);
              end;
--- 2265,2270 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatls.ads gcc-12.1.0/gcc/ada/gnatls.ads
*** gcc-11.3.0/gcc/ada/gnatls.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatls.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                S p e c                                   --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                S p e c                                   --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatmake.adb gcc-12.1.0/gcc/ada/gnatmake.adb
*** gcc-11.3.0/gcc/ada/gnatmake.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatmake.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatmake.ads gcc-12.1.0/gcc/ada/gnatmake.ads
*** gcc-11.3.0/gcc/ada/gnatmake.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatmake.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatname.adb gcc-12.1.0/gcc/ada/gnatname.adb
*** gcc-11.3.0/gcc/ada/gnatname.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatname.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatname.ads gcc-12.1.0/gcc/ada/gnatname.ads
*** gcc-11.3.0/gcc/ada/gnatname.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatname.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatprep.adb gcc-12.1.0/gcc/ada/gnatprep.adb
*** gcc-11.3.0/gcc/ada/gnatprep.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatprep.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatprep.ads gcc-12.1.0/gcc/ada/gnatprep.ads
*** gcc-11.3.0/gcc/ada/gnatprep.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatprep.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatvsn.adb gcc-12.1.0/gcc/ada/gnatvsn.adb
*** gcc-11.3.0/gcc/ada/gnatvsn.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatvsn.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Gnatvsn is
*** 48,59 ****
     end Gnat_Free_Software;
  
     type char_array is array (Natural range <>) of aliased Character;
!    Version_String : char_array (0 .. Ver_Len_Max - 1);
!    --  Import the C string defined in the (language-independent) source file
!    --  version.c using the zero-based convention of the C language.
!    --  The size is not the real one, which does not matter since we will
!    --  check for the nul character in Gnat_Version_String.
!    pragma Import (C, Version_String, "version_string");
  
     -------------------------
     -- Gnat_Version_String --
--- 48,58 ----
     end Gnat_Free_Software;
  
     type char_array is array (Natural range <>) of aliased Character;
!    C_Version_String : char_array (0 .. Ver_Len_Max - 1);
!    pragma Import (C, C_Version_String, "gnat_version_string");
!    --  Import the C string defined in the source file version.c using the
!    --  zero-based convention of the C language.  The size is not the real
!    --  one, which does not matter since we will check for the nul character.
  
     -------------------------
     -- Gnat_Version_String --
*************** package body Gnatvsn is
*** 64,72 ****
        Pos : Natural := 0;
     begin
        loop
!          exit when Version_String (Pos) = ASCII.NUL;
  
!          S (Pos + 1) := Version_String (Pos);
           Pos := Pos + 1;
  
           exit when Pos = Ver_Len_Max;
--- 63,71 ----
        Pos : Natural := 0;
     begin
        loop
!          exit when C_Version_String (Pos) = ASCII.NUL;
  
!          S (Pos + 1) := C_Version_String (Pos);
           Pos := Pos + 1;
  
           exit when Pos = Ver_Len_Max;
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatvsn.ads gcc-12.1.0/gcc/ada/gnatvsn.ads
*** gcc-11.3.0/gcc/ada/gnatvsn.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatvsn.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Gnatvsn is
*** 32,45 ****
     --  Static string identifying this version, that can be used as an argument
     --  to e.g. pragma Ident.
  
!    Library_Version : constant String := "11";
     --  Library version. It needs to be updated whenever the major version
     --  number is changed.
     --
     --  Note: Makefile.in uses the library version string to construct the
     --  soname value.
  
!    Current_Year : constant String := "2021";
     --  Used in printing copyright messages
  
     Verbose_Library_Version : constant String := "GNAT Lib v" & Library_Version;
--- 32,45 ----
     --  Static string identifying this version, that can be used as an argument
     --  to e.g. pragma Ident.
  
!    Library_Version : constant String := "12";
     --  Library version. It needs to be updated whenever the major version
     --  number is changed.
     --
     --  Note: Makefile.in uses the library version string to construct the
     --  soname value.
  
!    Current_Year : constant String := "2022";
     --  Used in printing copyright messages
  
     Verbose_Library_Version : constant String := "GNAT Lib v" & Library_Version;
diff -Nrcpad gcc-11.3.0/gcc/ada/gnatxref.adb gcc-12.1.0/gcc/ada/gnatxref.adb
*** gcc-11.3.0/gcc/ada/gnatxref.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gnatxref.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
*************** procedure Gnatxref is
*** 299,304 ****
--- 299,309 ----
     end Write_Usage;
  
  begin
+    Put_Line
+      ("WARNING: gnatxref is obsolete and will be removed in the next release");
+    Put_Line
+      ("Consider using Libadalang or GNAT Studio python scripting instead");
+ 
     Parse_Cmd_Line;
  
     if not Have_File then
diff -Nrcpad gcc-11.3.0/gcc/ada/gprep.adb gcc-12.1.0/gcc/ada/gprep.adb
*** gcc-11.3.0/gcc/ada/gprep.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gprep.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gprep.ads gcc-12.1.0/gcc/ada/gprep.ads
*** gcc-11.3.0/gcc/ada/gprep.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gprep.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/gsocket.h gcc-12.1.0/gcc/ada/gsocket.h
*** gcc-11.3.0/gcc/ada/gsocket.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/gsocket.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *         Copyright (C) 2004-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *         Copyright (C) 2004-2022, 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- *
***************
*** 215,220 ****
--- 215,221 ----
  #if !(defined (VMS) || defined (__MINGW32__))
  #include <sys/socket.h>
  #include <sys/un.h>
+ #include <net/if.h>
  #include <netinet/in.h>
  #include <netinet/tcp.h>
  #include <sys/ioctl.h>
diff -Nrcpad gcc-11.3.0/gcc/ada/hostparm.ads gcc-12.1.0/gcc/ada/hostparm.ads
*** gcc-11.3.0/gcc/ada/hostparm.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/hostparm.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Hostparm is
*** 56,64 ****
     --  of file names in the library, must be at least Max_Line_Length, but
     --  can be larger.
  
!    Tag_Errors : constant Boolean := False;
     --  If set to true, then brief form error messages will be prefaced by
!    --  the string "error:". Used as default for Opt.Unique_Error_Tag.
  
     Exclude_Missing_Objects : constant Boolean := True;
     --  If set to true, gnatbind will exclude from consideration all
--- 56,65 ----
     --  of file names in the library, must be at least Max_Line_Length, but
     --  can be larger.
  
!    Tag_Errors : constant Boolean := True;
     --  If set to true, then brief form error messages will be prefaced by
!    --  the string "error:". Used as default for Opt.Unique_Error_Tag. Disabled
!    --  by gnatd_U.
  
     Exclude_Missing_Objects : constant Boolean := True;
     --  If set to true, gnatbind will exclude from consideration all
diff -Nrcpad gcc-11.3.0/gcc/ada/impunit.adb gcc-12.1.0/gcc/ada/impunit.adb
*** gcc-11.3.0/gcc/ada/impunit.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/impunit.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2000-2022, 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- --
***************
*** 23,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Errout;   use Errout;
! with Sinfo;    use Sinfo;
! with Fname.UF; use Fname.UF;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Opt;      use Opt;
! with Uname;    use Uname;
  
  --  Note: this package body is used by GNAT Studio and GNATBench to supply a
  --  list of entries for help on available library routines.
--- 23,36 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Errout;      use Errout;
! with Sinfo;       use Sinfo;
! with Sinfo.Nodes; use Sinfo.Nodes;
! with Fname.UF;    use Fname.UF;
! with Lib;         use Lib;
! with Namet;       use Namet;
! with Opt;         use Opt;
! with Uname;       use Uname;
  
  --  Note: this package body is used by GNAT Studio and GNATBench to supply a
  --  list of entries for help on available library routines.
*************** package body Impunit is
*** 618,629 ****
     );                 -- GNATCOLL.OMP
  
     --------------------
!    -- Ada 202X Units --
     --------------------
  
!    --  The following units should be used only in Ada 202X mode
  
!    Non_Imp_File_Names_2X : constant File_List := (
      ("a-nubinu", T),  -- Ada.Numerics.Big_Numbers
      ("a-nbnbin", T),  -- Ada.Numerics.Big_Numbers.Big_Integers
      ("a-nbnbre", T),  -- Ada.Numerics.Big_Numbers.Big_Reals
--- 618,629 ----
     );                 -- GNATCOLL.OMP
  
     --------------------
!    -- Ada 2022 Units --
     --------------------
  
!    --  The following units should be used only in Ada 2022 mode
  
!    Non_Imp_File_Names_22 : constant File_List := (
      ("a-nubinu", T),  -- Ada.Numerics.Big_Numbers
      ("a-nbnbin", T),  -- Ada.Numerics.Big_Numbers.Big_Integers
      ("a-nbnbre", T),  -- Ada.Numerics.Big_Numbers.Big_Reals
*************** package body Impunit is
*** 632,647 ****
      ("s-aotase", T),  -- System.Atomic_Operations.Test_And_Set
      ("s-atoope", T),  -- System.Atomic_Operations
      ("s-atopex", T),  -- System.Atomic_Operations.Exchange
!     ("a-stteou", T),  -- Ada.Strings.Text_Output
!     ("a-stouut", T),  -- Ada.Strings.Text_Output.Utils
!     ("a-stoubu", T),  -- Ada.Strings.Text_Output.Buffers
!     ("a-stoufi", T),  -- Ada.Strings.Text_Output.Files
!     ("a-stobfi", T),  -- Ada.Strings.Text_Output.Basic_Files
!     ("a-stobbu", T),  -- Ada.Strings.Text_Output.Bit_Buckets
!     ("a-stoufo", T),  -- Ada.Strings.Text_Output.Formatting
      ("a-strsto", T),  -- Ada.Streams.Storage
      ("a-ststbo", T),  -- Ada.Streams.Storage.Bounded
!     ("a-ststun", T)   -- Ada.Streams.Storage.Unbounded
     );
  
     -----------------------
--- 632,651 ----
      ("s-aotase", T),  -- System.Atomic_Operations.Test_And_Set
      ("s-atoope", T),  -- System.Atomic_Operations
      ("s-atopex", T),  -- System.Atomic_Operations.Exchange
!     ("a-sttebu", T),  -- Ada.Strings.Text_Buffers
!     ("a-stbuun", T),  -- Ada.Strings.Text_Buffers.Unbounded
!     ("a-stbubo", T),  -- Ada.Strings.Text_Buffers.Bounded
      ("a-strsto", T),  -- Ada.Streams.Storage
      ("a-ststbo", T),  -- Ada.Streams.Storage.Bounded
!     ("a-ststun", T),  -- Ada.Streams.Storage.Unbounded
! 
!    ----------------------------------------
!    -- GNAT Defined Additions to Ada 2022 --
!    ----------------------------------------
! 
!    ("a-stbufi", T),   -- Ada.Strings.Text_Buffers.Files
!    ("a-stbufo", T),   -- Ada.Strings.Text_Buffers.Formatting
!    ("a-stbuut", T)    -- Ada.Strings.Text_Buffers.Utils
     );
  
     -----------------------
*************** package body Impunit is
*** 767,777 ****
           end if;
        end loop;
  
!       --  See if name is in 202X list
  
!       for J in Non_Imp_File_Names_2X'Range loop
!          if Buffer (1 .. 8) = Non_Imp_File_Names_2X (J).Fname then
!             return Ada_202X_Unit;
           end if;
        end loop;
  
--- 771,781 ----
           end if;
        end loop;
  
!       --  See if name is in 2022 list
  
!       for J in Non_Imp_File_Names_22'Range loop
!          if Buffer (1 .. 8) = Non_Imp_File_Names_22 (J).Fname then
!             return Ada_2022_Unit;
           end if;
        end loop;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/impunit.ads gcc-12.1.0/gcc/ada/impunit.ads
*** gcc-11.3.0/gcc/ada/impunit.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/impunit.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
*************** package Impunit is
*** 47,53 ****
        Ada_95_Unit,
        Ada_2005_Unit,
        Ada_2012_Unit,
!       Ada_202X_Unit);
        --  This unit is defined in the Ada RM of the given year. This is used to
        --  give a warning when withing a unit from a wrong mode (e.g. withing an
        --  Ada_2012_Unit when compiling with -gnat95). Note that in Ada 83 mode,
--- 47,53 ----
        Ada_95_Unit,
        Ada_2005_Unit,
        Ada_2012_Unit,
!       Ada_2022_Unit);
        --  This unit is defined in the Ada RM of the given year. This is used to
        --  give a warning when withing a unit from a wrong mode (e.g. withing an
        --  Ada_2012_Unit when compiling with -gnat95). Note that in Ada 83 mode,
diff -Nrcpad gcc-11.3.0/gcc/ada/indepsw-aix.adb gcc-12.1.0/gcc/ada/indepsw-aix.adb
*** gcc-11.3.0/gcc/ada/indepsw-aix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/indepsw-aix.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                              (AIX version)                               --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                              (AIX version)                               --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/indepsw-darwin.adb gcc-12.1.0/gcc/ada/indepsw-darwin.adb
*** gcc-11.3.0/gcc/ada/indepsw-darwin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/indepsw-darwin.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                            (Darwin version)                              --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                            (Darwin version)                              --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/indepsw-gnu.adb gcc-12.1.0/gcc/ada/indepsw-gnu.adb
*** gcc-11.3.0/gcc/ada/indepsw-gnu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/indepsw-gnu.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                              (GNU version)                               --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                              (GNU version)                               --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/indepsw.adb gcc-12.1.0/gcc/ada/indepsw.adb
*** gcc-11.3.0/gcc/ada/indepsw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/indepsw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/indepsw.ads gcc-12.1.0/gcc/ada/indepsw.ads
*** gcc-11.3.0/gcc/ada/indepsw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/indepsw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/init.c gcc-12.1.0/gcc/ada/init.c
*** gcc-11.3.0/gcc/ada/init.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/init.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
***************
*** 78,84 ****
  extern "C" {
  #endif
  
! extern void __gnat_raise_program_error (const char *, int);
  
  /* Addresses of exception data blocks for predefined exceptions.  Tasking_Error
     is not used in this unit, and the abort signal is only used on IRIX.
--- 78,84 ----
  extern "C" {
  #endif
  
! extern void __gnat_raise_program_error (const void *, int);
  
  /* Addresses of exception data blocks for predefined exceptions.  Tasking_Error
     is not used in this unit, and the abort signal is only used on IRIX.
*************** extern struct Exception_Data program_err
*** 89,105 ****
  extern struct Exception_Data storage_error;
  
  /* For the Cert run time we use the regular raise exception routine because
!    Raise_From_Signal_Handler is not available.  */
  #ifdef CERT
! #define Raise_From_Signal_Handler \
!                       __gnat_raise_exception
! extern void Raise_From_Signal_Handler (struct Exception_Data *, const char *);
  #else
! #define Raise_From_Signal_Handler \
!                       ada__exceptions__raise_from_signal_handler
! extern void Raise_From_Signal_Handler (struct Exception_Data *, const char *);
  #endif
  
  /* Global values computed by the binder.  Note that these variables are
     declared here, not in the binder file, to avoid having unresolved
     references in the shared libgnat.  */
--- 89,104 ----
  extern struct Exception_Data storage_error;
  
  /* For the Cert run time we use the regular raise exception routine because
!    __gnat_raise_from_signal_handler is not available.  */
  #ifdef CERT
! #define Raise_From_Signal_Handler __gnat_raise_exception
  #else
! #define Raise_From_Signal_Handler __gnat_raise_from_signal_handler
  #endif
  
+ extern void Raise_From_Signal_Handler (struct Exception_Data *, const void *)
+   ATTRIBUTE_NORETURN;
+ 
  /* Global values computed by the binder.  Note that these variables are
     declared here, not in the binder file, to avoid having unresolved
     references in the shared libgnat.  */
*************** __gnat_install_handler (void)
*** 662,667 ****
--- 661,688 ----
  #include <signal.h>
  #include <unistd.h>
  
+ /* SA_SIGINFO is not supported by default on LynxOS, so all we have
+    available here is the "sig" argument. On newer LynxOS versions it's
+    possible to support SA_SIGINFO by setting a kernel configuration macro.
+ 
+    To wit:
+ 
+    #define NONPOSIX_SA_HANDLER_PROTO (0)
+ 
+    This macro must be set to 1 in either sys/bsp.<bspname>/uparam.h
+    or in the associated uparam.h customization file sys/bsp.<bspname>/xparam.h
+    (uparam.h includes xparam.h for customization)
+ 
+    The NONPOSIX_SA_HANDLER_PROTO macro makes it possible to provide
+    signal-catching function with 'info' and 'context' input parameters
+    even if SA_SIGINFO flag is not set or it is set for a non-realtime signal.
+ 
+    It also allows signal-catching function to update thread context even
+    if SA_UPDATECTX flag is not set.
+ 
+    This would be useful, but relying on that would transmit the requirement
+    to users to configure that feature as well, which is undesirable.  */
+ 
  static void
  __gnat_error_handler (int sig)
  {
*************** __gnat_handle_vms_condition (int *sigarg
*** 1216,1222 ****
    if (__gnat_resignal_p (sigargs [1]))
      return SS$_RESIGNAL;
  #ifndef IN_RTS
!   /* toplev.c handles this for compiler.  */
    if (sigargs [1] == SS$_HPARITH)
      return SS$_RESIGNAL;
  #endif
--- 1237,1243 ----
    if (__gnat_resignal_p (sigargs [1]))
      return SS$_RESIGNAL;
  #ifndef IN_RTS
!   /* toplev.cc handles this for compiler.  */
    if (sigargs [1] == SS$_HPARITH)
      return SS$_RESIGNAL;
  #endif
*************** __gnat_error_handler (int sig, siginfo_t
*** 1990,1996 ****
       anything else.
       This mechanism is only need in kernel mode. */
  #if !(defined (__RTP__) || defined (VTHREADS)) && ((CPU == PPCE500V2) || (CPU == PPC85XX))
!   register unsigned msr;
    /* Read the MSR value */
    asm volatile ("mfmsr %0" : "=r" (msr));
    /* Force the SPE bit if not set.  */
--- 2011,2017 ----
       anything else.
       This mechanism is only need in kernel mode. */
  #if !(defined (__RTP__) || defined (VTHREADS)) && ((CPU == PPCE500V2) || (CPU == PPC85XX))
!   unsigned msr;
    /* Read the MSR value */
    asm volatile ("mfmsr %0" : "=r" (msr));
    /* Force the SPE bit if not set.  */
*************** __gnat_install_handler (void)
*** 2530,2535 ****
--- 2551,2557 ----
  #include <signal.h>
  #include <unistd.h>
  #include <string.h>
+ #include <errno.h>
  #include "sigtramp.h"
  
  void
*************** __gnat_install_handler (void)
*** 2623,2628 ****
--- 2645,2712 ----
    __gnat_handler_installed = 1;
  }
  
+ /*****************/
+ /* RTEMS Section */
+ /*****************/
+ 
+ #elif defined(__rtems__)
+ 
+ #include <signal.h>
+ #include <unistd.h>
+ 
+ static void
+ __gnat_error_handler (int sig)
+ {
+   struct Exception_Data *exception;
+   const char *msg;
+ 
+   switch(sig)
+   {
+     case SIGFPE:
+       exception = &constraint_error;
+       msg = "SIGFPE";
+       break;
+     case SIGILL:
+       exception = &constraint_error;
+       msg = "SIGILL";
+       break;
+     case SIGSEGV:
+       exception = &storage_error;
+       msg = "erroneous memory access";
+       break;
+     case SIGBUS:
+       exception = &constraint_error;
+       msg = "SIGBUS";
+       break;
+     default:
+       exception = &program_error;
+       msg = "unhandled signal";
+     }
+ 
+     Raise_From_Signal_Handler (exception, msg);
+ }
+ 
+ void
+ __gnat_install_handler (void)
+ {
+   struct sigaction act;
+ 
+   act.sa_handler = __gnat_error_handler;
+   sigemptyset (&act.sa_mask);
+ 
+   /* Do not install handlers if interrupt state is "System".  */
+   if (__gnat_get_interrupt_state (SIGFPE) != 's')
+     sigaction (SIGFPE,  &act, NULL);
+   if (__gnat_get_interrupt_state (SIGILL) != 's')
+     sigaction (SIGILL,  &act, NULL);
+   if (__gnat_get_interrupt_state (SIGSEGV) != 's')
+     sigaction (SIGSEGV, &act, NULL);
+   if (__gnat_get_interrupt_state (SIGBUS) != 's')
+     sigaction (SIGBUS,  &act, NULL);
+ 
+   __gnat_handler_installed = 1;
+ }
+ 
  #elif defined (__DJGPP__)
  
  void
*************** __gnat_install_handler (void)
*** 2749,2759 ****
  /* __gnat_init_float */
  /*********************/
  
! /* This routine is called as each process thread is created, for possible
!    initialization of the FP processor.  This version is used under INTERIX
!    and WIN32.  */
! 
! #if defined (_WIN32) || defined (__INTERIX) \
    || defined (__Lynx__) || defined(__NetBSD__) || defined(__FreeBSD__) \
    || defined (__OpenBSD__) || defined (__DragonFly__) || defined(__QNX__)
  
--- 2833,2839 ----
  /* __gnat_init_float */
  /*********************/
  
! #if defined (_WIN32) || defined (__INTERIX) || defined (__linux__) \
    || defined (__Lynx__) || defined(__NetBSD__) || defined(__FreeBSD__) \
    || defined (__OpenBSD__) || defined (__DragonFly__) || defined(__QNX__)
  
*************** void
*** 2763,2775 ****
  __gnat_init_float (void)
  {
  #if defined (__i386__) || defined (__x86_64__)
! 
!   /* This is used to properly initialize the FPU on an x86 for each
!      process thread.  */
! 
    asm ("finit");
! 
! #endif  /* Defined __i386__ */
  }
  #endif
  
--- 2843,2852 ----
  __gnat_init_float (void)
  {
  #if defined (__i386__) || defined (__x86_64__)
!   /* This is used to properly initialize the FPU to 64-bit precision on an x86
!      for each process thread and also for floating-point I/O.  */
    asm ("finit");
! #endif
  }
  #endif
  
diff -Nrcpad gcc-11.3.0/gcc/ada/initialize.c gcc-12.1.0/gcc/ada/initialize.c
*** gcc-11.3.0/gcc/ada/initialize.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/initialize.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
***************
*** 29,57 ****
   *                                                                          *
   ****************************************************************************/
  
! /*  This unit provides default implementation for __gnat_initialize ()
!     which is called before the elaboration of the partition. It is provided
!     in a separate file/object so that users can replace it easily.
!     The default implementation should be null on most targets.  */
! 
! /* The following include is here to meet the published VxWorks requirement
!    that the __vxworks header appear before any other include.  */
! #ifdef __vxworks
! #include "vxWorks.h"
! #endif
  
  #ifdef IN_RTS
  #include "runtime.h"
- /* We don't have libiberty, so use malloc.  */
- #define xmalloc(S) malloc (S)
- #define xrealloc(V,S) realloc (V,S)
  #else
  #include "config.h"
  #include "system.h"
  #endif
  
  #include "raise.h"
- #include <fcntl.h>
  
  #ifdef __cplusplus
  extern "C" {
--- 29,47 ----
   *                                                                          *
   ****************************************************************************/
  
! /*  This unit provides the default implementation of __gnat_initialize, which
!     is called before the elaboration of the partition.  It is provided in a
!     separate file so that users can replace it easily.  But the implementation
!     should be empty on most targets.  */
  
  #ifdef IN_RTS
  #include "runtime.h"
  #else
  #include "config.h"
  #include "system.h"
  #endif
  
  #include "raise.h"
  
  #ifdef __cplusplus
  extern "C" {
*************** extern "C" {
*** 63,127 ****
  
  #if defined (__MINGW32__)
  
- extern void __gnat_install_SEH_handler (void *);
- 
  void
! __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
-    /* Note that we do not activate this for the compiler itself to avoid a
-       bootstrap path problem.  Older version of gnatbind will generate a call
-       to __gnat_initialize() without argument. Therefore we cannot use eh in
-       this case.  It will be possible to remove the following #ifdef at some
-       point.  */
- #ifdef IN_RTS
     /* Install the Structured Exception handler.  */
     if (eh)
       __gnat_install_SEH_handler (eh);
- #endif
- }
- 
- /******************************************/
- /* __gnat_initialize (init_float version) */
- /******************************************/
- 
- #elif defined (__Lynx__) || defined (__FreeBSD__) || defined(__NetBSD__) \
-   || defined (__OpenBSD__) || defined (__DragonFly__)
- 
- void
- __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
- {
- }
- 
- /***************************************/
- /* __gnat_initialize (VxWorks Version) */
- /***************************************/
- 
- #elif defined(__vxworks)
- 
- void
- __gnat_initialize (void *eh)
- {
- }
- 
- #elif defined(_T_HPUX10) || (!defined(IN_RTS) && defined(_X_HPUX10))
- 
- /************************************************/
- /* __gnat_initialize (PA-RISC HP-UX 10 Version) */
- /************************************************/
- 
- extern void __main (void);
- 
- void
- __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
- {
-   __main ();
  }
  
  #else
  
- /* For all other versions of GNAT, the initialize routine and handler
-    installation do nothing */
- 
  /***************************************/
  /* __gnat_initialize (Default Version) */
  /***************************************/
--- 53,68 ----
  
  #if defined (__MINGW32__)
  
  void
! __gnat_initialize (void *eh)
  {
     /* Install the Structured Exception handler.  */
     if (eh)
       __gnat_install_SEH_handler (eh);
  }
  
  #else
  
  /***************************************/
  /* __gnat_initialize (Default Version) */
  /***************************************/
*************** void
*** 130,135 ****
--- 71,77 ----
  __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
  {
  }
+ 
  #endif
  
  #ifdef __cplusplus
diff -Nrcpad gcc-11.3.0/gcc/ada/inline.adb gcc-12.1.0/gcc/ada/inline.adb
*** gcc-11.3.0/gcc/ada/inline.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/inline.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 24,62 ****
  ------------------------------------------------------------------------------
  
  with Alloc;
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Expander; use Expander;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_Ch7;  use Exp_Ch7;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Fname;    use Fname;
! with Fname.UF; use Fname.UF;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nmake;    use Nmake;
! with Nlists;   use Nlists;
! with Output;   use Output;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Ch10; use Sem_Ch10;
! with Sem_Ch12; use Sem_Ch12;
! with Sem_Prag; use Sem_Prag;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stand;    use Stand;
  with Table;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Uname;    use Uname;
  
  with GNAT.HTable;
  
--- 24,66 ----
  ------------------------------------------------------------------------------
  
  with Alloc;
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Expander;       use Expander;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Fname;          use Fname;
! with Fname.UF;       use Fname.UF;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nmake;          use Nmake;
! with Nlists;         use Nlists;
! with Output;         use Output;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch10;       use Sem_Ch10;
! with Sem_Ch12;       use Sem_Ch12;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stand;          use Stand;
  with Table;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Uname;          use Uname;
  
  with GNAT.HTable;
  
*************** package body Inline is
*** 323,330 ****
     --    Unreferenced
  
     procedure Reset_Actual_Mapping_For_Inlined_Call (Subp : Entity_Id);
!    --  Reset the Renamed_Object flags on the formals of Subp, which can be set
!    --  by a call to Establish_Actual_Mapping_For_Inlined_Call.
  
     ------------------------------
     -- Deferred Cleanup Actions --
--- 327,334 ----
     --    Unreferenced
  
     procedure Reset_Actual_Mapping_For_Inlined_Call (Subp : Entity_Id);
!    --  Reset the Renamed_Object field to Empty on all formals of Subp, which
!    --  can be set by a call to Establish_Actual_Mapping_For_Inlined_Call.
  
     ------------------------------
     -- Deferred Cleanup Actions --
*************** package body Inline is
*** 1083,1091 ****
           --  subprograms for the unit.
  
           for Index in Inlined.First .. Inlined.Last loop
!             if Is_Called (Inlined.Table (Index).Name) then
!                Add_Inlined_Subprogram (Inlined.Table (Index).Name);
!             end if;
           end loop;
  
           Pop_Scope;
--- 1087,1100 ----
           --  subprograms for the unit.
  
           for Index in Inlined.First .. Inlined.Last loop
!             declare
!                E : constant Subprogram_Kind_Id := Inlined.Table (Index).Name;
! 
!             begin
!                if Is_Called (E) and then not Is_Ignored_Ghost_Entity (E) then
!                   Add_Inlined_Subprogram (E);
!                end if;
!             end;
           end loop;
  
           Pop_Scope;
*************** package body Inline is
*** 1451,1457 ****
             --  Skip inlining if the function returns an unconstrained type
             --  using an extended return statement, since this part of the
             --  new inlining model is not yet supported by the current
!            --  implementation. ???
  
             or else (Returns_Unconstrained_Type (Spec_Id)
                       and then Has_Extended_Return)
--- 1460,1466 ----
             --  Skip inlining if the function returns an unconstrained type
             --  using an extended return statement, since this part of the
             --  new inlining model is not yet supported by the current
!            --  implementation.
  
             or else (Returns_Unconstrained_Type (Spec_Id)
                       and then Has_Extended_Return)
*************** package body Inline is
*** 1469,1475 ****
        end if;
  
        Set_Body_To_Inline (Decl, Original_Body);
!       Set_Ekind (Defining_Entity (Original_Body), Ekind (Spec_Id));
        Set_Is_Inlined (Spec_Id);
     end Build_Body_To_Inline;
  
--- 1478,1484 ----
        end if;
  
        Set_Body_To_Inline (Decl, Original_Body);
!       Mutate_Ekind (Defining_Entity (Original_Body), Ekind (Spec_Id));
        Set_Is_Inlined (Spec_Id);
     end Build_Body_To_Inline;
  
*************** package body Inline is
*** 1531,1537 ****
  
        function Is_Unit_Subprogram (Id : Entity_Id) return Boolean;
        --  Return True if subprogram Id defines a compilation unit
-       --  Shouldn't this be in Sem_Aux???
  
        function In_Package_Spec (Id : Entity_Id) return Boolean;
        --  Return True if subprogram Id is defined in the package specification,
--- 1540,1545 ----
*************** package body Inline is
*** 2161,2170 ****
                 Body_To_Inline :=
                   Copy_Generic_Node (N, Empty, Instantiating => True);
              else
!                --  ??? Shouldn't this use New_Copy_Tree? What about global
!                --  references captured in the body to inline?
! 
!                Body_To_Inline := Copy_Separate_Tree (N);
              end if;
  
              --  Remove aspects/pragmas that have no meaning in an inlined body
--- 2169,2175 ----
                 Body_To_Inline :=
                   Copy_Generic_Node (N, Empty, Instantiating => True);
              else
!                Body_To_Inline := New_Copy_Tree (N);
              end if;
  
              --  Remove aspects/pragmas that have no meaning in an inlined body
*************** package body Inline is
*** 2184,2190 ****
              --  conflicts when the non-inlined body N is analyzed.
  
              Set_Defining_Unit_Name (Specification (Body_To_Inline),
!                Make_Defining_Identifier (Sloc (N), New_Internal_Name ('P')));
              Set_Corresponding_Spec (Body_To_Inline, Empty);
           end Generate_Subprogram_Body;
  
--- 2189,2195 ----
              --  conflicts when the non-inlined body N is analyzed.
  
              Set_Defining_Unit_Name (Specification (Body_To_Inline),
!                Make_Temporary (Sloc (N), 'P'));
              Set_Corresponding_Spec (Body_To_Inline, Empty);
           end Generate_Subprogram_Body;
  
*************** package body Inline is
*** 2251,2257 ****
  
           pragma Assert (No (Body_To_Inline (Decl)));
           Set_Body_To_Inline (Decl, Original_Body);
!          Set_Ekind (Defining_Entity (Original_Body), Ekind (Spec_Id));
        end Build_Body_To_Inline;
  
        --------------------------------
--- 2256,2262 ----
  
           pragma Assert (No (Body_To_Inline (Decl)));
           Set_Body_To_Inline (Decl, Original_Body);
!          Mutate_Ekind (Defining_Entity (Original_Body), Ekind (Spec_Id));
        end Build_Body_To_Inline;
  
        --------------------------------
*************** package body Inline is
*** 2372,2378 ****
        ------------------------
  
        function Copy_Return_Object (Obj_Decl : Node_Id) return Node_Id is
!          Obj_Id  : constant Entity_Id := Defining_Entity (Obj_Decl);
  
        begin
           --  The use of New_Copy_Tree ensures that global references are
--- 2377,2383 ----
        ------------------------
  
        function Copy_Return_Object (Obj_Decl : Node_Id) return Node_Id is
!          Obj_Id : constant Entity_Id := Defining_Entity (Obj_Decl);
  
        begin
           --  The use of New_Copy_Tree ensures that global references are
*************** package body Inline is
*** 2827,2833 ****
        -------------------------
  
        function Formal_Is_Used_Once (Formal : Entity_Id) return Boolean is
!          Use_Counter : Int := 0;
  
           function Count_Uses (N : Node_Id) return Traverse_Result;
           --  Traverse the tree and count the uses of the formal parameter.
--- 2832,2838 ----
        -------------------------
  
        function Formal_Is_Used_Once (Formal : Entity_Id) return Boolean is
!          Use_Counter : Nat := 0;
  
           function Count_Uses (N : Node_Id) return Traverse_Result;
           --  Traverse the tree and count the uses of the formal parameter.
*************** package body Inline is
*** 2856,2868 ****
              then
                 Use_Counter := Use_Counter + 1;
  
!                if Use_Counter > 1 then
! 
!                   --  Denote more than one use and abandon the traversal
  
!                   Use_Counter := 2;
                    return Abandon;
- 
                 end if;
              end if;
  
--- 2861,2870 ----
              then
                 Use_Counter := Use_Counter + 1;
  
!                --  If this is a second use then abandon the traversal
  
!                if Use_Counter > 1 then
                    return Abandon;
                 end if;
              end if;
  
*************** package body Inline is
*** 2897,2903 ****
           if Present (Renamed_Object (F)) then
  
              --  If expander is active, it is an error to try to inline a
!             --  recursive program. In GNATprove mode, just indicate that the
              --  inlining will not happen, and mark the subprogram as not always
              --  inlined.
  
--- 2899,2905 ----
           if Present (Renamed_Object (F)) then
  
              --  If expander is active, it is an error to try to inline a
!             --  recursive subprogram. In GNATprove mode, just indicate that the
              --  inlining will not happen, and mark the subprogram as not always
              --  inlined.
  
*************** package body Inline is
*** 3011,3020 ****
              if Nkind (A) = N_Type_Conversion
                and then Ekind (F) /= E_In_Parameter
              then
!                New_A :=
!                  Make_Unchecked_Type_Conversion (Loc,
!                    Subtype_Mark => New_Occurrence_Of (Etype (F), Loc),
!                    Expression   => Relocate_Node (Expression (A)));
  
              --  In GNATprove mode, keep the most precise type of the actual for
              --  the temporary variable, when the formal type is unconstrained.
--- 3013,3019 ----
              if Nkind (A) = N_Type_Conversion
                and then Ekind (F) /= E_In_Parameter
              then
!                New_A := Unchecked_Convert_To (Etype (F), Expression (A));
  
              --  In GNATprove mode, keep the most precise type of the actual for
              --  the temporary variable, when the formal type is unconstrained.
*************** package body Inline is
*** 3265,3271 ****
           ------------------
  
           function Process_Loop (N : Node_Id) return Traverse_Result is
!             Id  : Entity_Id;
  
           begin
              if Nkind (N) = N_Loop_Statement
--- 3264,3270 ----
           ------------------
  
           function Process_Loop (N : Node_Id) return Traverse_Result is
!             Id : Entity_Id;
  
           begin
              if Nkind (N) = N_Loop_Statement
*************** package body Inline is
*** 3557,3563 ****
        procedure Reset_Dispatching_Calls (N : Node_Id) is
  
           function Do_Reset (N : Node_Id) return Traverse_Result;
-          --  Comment required ???
  
           --------------
           -- Do_Reset --
--- 3556,3561 ----
*************** package body Inline is
*** 3578,3594 ****
              return OK;
           end Do_Reset;
  
!          function Do_Reset_Calls is new Traverse_Func (Do_Reset);
! 
!          --  Local variables
! 
!          Dummy : constant Traverse_Result := Do_Reset_Calls (N);
!          pragma Unreferenced (Dummy);
! 
!          --  Start of processing for Reset_Dispatching_Calls
  
        begin
!          null;
        end Reset_Dispatching_Calls;
  
        ---------------------------
--- 3576,3585 ----
              return OK;
           end Do_Reset;
  
!          procedure Do_Reset_Calls is new Traverse_Proc (Do_Reset);
  
        begin
!          Do_Reset_Calls (N);
        end Reset_Dispatching_Calls;
  
        ---------------------------
*************** package body Inline is
*** 3630,3636 ****
  
           --  If the context is an assignment, and the left-hand side is free of
           --  side-effects, the replacement is also safe.
-          --  Can this be generalized further???
  
           elsif Nkind (Parent (N)) = N_Assignment_Statement
             and then
--- 3621,3626 ----
*************** package body Inline is
*** 3686,3692 ****
        ----------------------------
  
        procedure Rewrite_Procedure_Call (N : Node_Id; Blk : Node_Id) is
!          HSS  : constant Node_Id := Handled_Statement_Sequence (Blk);
  
        begin
           Make_Loop_Labels_Unique (HSS);
--- 3676,3682 ----
        ----------------------------
  
        procedure Rewrite_Procedure_Call (N : Node_Id; Blk : Node_Id) is
!          HSS : constant Node_Id := Handled_Statement_Sequence (Blk);
  
        begin
           Make_Loop_Labels_Unique (HSS);
*************** package body Inline is
*** 4230,4237 ****
       (Subp  : Entity_Id;
        Decls : List_Id) return Boolean
     is
-       D : Node_Id;
- 
        function Is_Unchecked_Conversion (D : Node_Id) return Boolean;
        --  Nested subprograms make a given body ineligible for inlining, but
        --  we make an exception for instantiations of unchecked conversion.
--- 4220,4225 ----
*************** package body Inline is
*** 4265,4270 ****
--- 4253,4262 ----
             and then Is_Intrinsic_Subprogram (Conv);
        end Is_Unchecked_Conversion;
  
+       --  Local variables
+ 
+       Decl : Node_Id;
+ 
     --  Start of processing for Has_Excluded_Declaration
  
     begin
*************** package body Inline is
*** 4274,4292 ****
           return False;
        end if;
  
!       D := First (Decls);
!       while Present (D) loop
  
           --  First declarations universally excluded
  
!          if Nkind (D) = N_Package_Declaration then
              Cannot_Inline
!               ("cannot inline & (nested package declaration)?", D, Subp);
              return True;
  
!          elsif Nkind (D) = N_Package_Instantiation then
              Cannot_Inline
!               ("cannot inline & (nested package instantiation)?", D, Subp);
              return True;
           end if;
  
--- 4266,4284 ----
           return False;
        end if;
  
!       Decl := First (Decls);
!       while Present (Decl) loop
  
           --  First declarations universally excluded
  
!          if Nkind (Decl) = N_Package_Declaration then
              Cannot_Inline
!               ("cannot inline & (nested package declaration)?", Decl, Subp);
              return True;
  
!          elsif Nkind (Decl) = N_Package_Instantiation then
              Cannot_Inline
!               ("cannot inline & (nested package instantiation)?", Decl, Subp);
              return True;
           end if;
  
*************** package body Inline is
*** 4295,4345 ****
           if Back_End_Inlining then
              null;
  
!          elsif Nkind (D) = N_Task_Type_Declaration
!            or else Nkind (D) = N_Single_Task_Declaration
           then
              Cannot_Inline
!               ("cannot inline & (nested task type declaration)?", D, Subp);
              return True;
  
!          elsif Nkind (D) = N_Protected_Type_Declaration
!            or else Nkind (D) = N_Single_Protected_Declaration
           then
              Cannot_Inline
                ("cannot inline & (nested protected type declaration)?",
!                D, Subp);
              return True;
  
!          elsif Nkind (D) = N_Subprogram_Body then
              Cannot_Inline
!               ("cannot inline & (nested subprogram)?", D, Subp);
              return True;
  
!          elsif Nkind (D) = N_Function_Instantiation
!            and then not Is_Unchecked_Conversion (D)
           then
              Cannot_Inline
!               ("cannot inline & (nested function instantiation)?", D, Subp);
              return True;
  
!          elsif Nkind (D) = N_Procedure_Instantiation then
              Cannot_Inline
!               ("cannot inline & (nested procedure instantiation)?", D, Subp);
              return True;
  
           --  Subtype declarations with predicates will generate predicate
           --  functions, i.e. nested subprogram bodies, so inlining is not
           --  possible.
  
!          elsif Nkind (D) = N_Subtype_Declaration
!            and then Present (Aspect_Specifications (D))
!          then
              declare
                 A    : Node_Id;
                 A_Id : Aspect_Id;
  
              begin
!                A := First (Aspect_Specifications (D));
                 while Present (A) loop
                    A_Id := Get_Aspect_Id (Chars (Identifier (A)));
  
--- 4287,4336 ----
           if Back_End_Inlining then
              null;
  
!          elsif Nkind (Decl) = N_Task_Type_Declaration
!            or else Nkind (Decl) = N_Single_Task_Declaration
           then
              Cannot_Inline
!               ("cannot inline & (nested task type declaration)?", Decl, Subp);
              return True;
  
!          elsif Nkind (Decl) in N_Protected_Type_Declaration
!                              | N_Single_Protected_Declaration
           then
              Cannot_Inline
                ("cannot inline & (nested protected type declaration)?",
!                Decl, Subp);
              return True;
  
!          elsif Nkind (Decl) = N_Subprogram_Body then
              Cannot_Inline
!               ("cannot inline & (nested subprogram)?", Decl, Subp);
              return True;
  
!          elsif Nkind (Decl) = N_Function_Instantiation
!            and then not Is_Unchecked_Conversion (Decl)
           then
              Cannot_Inline
!               ("cannot inline & (nested function instantiation)?", Decl, Subp);
              return True;
  
!          elsif Nkind (Decl) = N_Procedure_Instantiation then
              Cannot_Inline
!               ("cannot inline & (nested procedure instantiation)?",
!                Decl, Subp);
              return True;
  
           --  Subtype declarations with predicates will generate predicate
           --  functions, i.e. nested subprogram bodies, so inlining is not
           --  possible.
  
!          elsif Nkind (Decl) = N_Subtype_Declaration then
              declare
                 A    : Node_Id;
                 A_Id : Aspect_Id;
  
              begin
!                A := First (Aspect_Specifications (Decl));
                 while Present (A) loop
                    A_Id := Get_Aspect_Id (Chars (Identifier (A)));
  
*************** package body Inline is
*** 4349,4355 ****
                    then
                       Cannot_Inline
                         ("cannot inline & (subtype declaration with "
!                         & "predicate)?", D, Subp);
                       return True;
                    end if;
  
--- 4340,4346 ----
                    then
                       Cannot_Inline
                         ("cannot inline & (subtype declaration with "
!                         & "predicate)?", Decl, Subp);
                       return True;
                    end if;
  
*************** package body Inline is
*** 4358,4364 ****
              end;
           end if;
  
!          Next (D);
        end loop;
  
        return False;
--- 4349,4355 ----
              end;
           end if;
  
!          Next (Decl);
        end loop;
  
        return False;
*************** package body Inline is
*** 4821,4827 ****
           end if;
        end Instantiate_Body;
  
!       J, K  : Nat;
        Info : Pending_Body_Info;
  
     --  Start of processing for Instantiate_Bodies
--- 4812,4818 ----
           end if;
        end Instantiate_Body;
  
!       J, K : Nat;
        Info : Pending_Body_Info;
  
     --  Start of processing for Instantiate_Bodies
*************** package body Inline is
*** 5168,5184 ****
     --------------------------
  
     procedure Remove_Dead_Instance (N : Node_Id) is
-       J : Int;
- 
     begin
!       J := 0;
!       while J <= Pending_Instantiations.Last loop
           if Pending_Instantiations.Table (J).Inst_Node = N then
              Pending_Instantiations.Table (J).Inst_Node := Empty;
              return;
           end if;
- 
-          J := J + 1;
        end loop;
     end Remove_Dead_Instance;
  
--- 5159,5170 ----
     --------------------------
  
     procedure Remove_Dead_Instance (N : Node_Id) is
     begin
!       for J in 0 .. Pending_Instantiations.Last loop
           if Pending_Instantiations.Table (J).Inst_Node = N then
              Pending_Instantiations.Table (J).Inst_Node := Empty;
              return;
           end if;
        end loop;
     end Remove_Dead_Instance;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/inline.ads gcc-12.1.0/gcc/ada/inline.ads
*** gcc-11.3.0/gcc/ada/inline.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/inline.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/itypes.adb gcc-12.1.0/gcc/ada/itypes.adb
*** gcc-11.3.0/gcc/ada/itypes.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/itypes.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,34 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Sem;      use Sem;
! with Sinfo;    use Sinfo;
! with Stand;    use Stand;
! with Targparm; use Targparm;
! with Uintp;    use Uintp;
  
  package body Itypes is
  
--- 23,34 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Einfo.Utils;    use Einfo.Utils;
! with Sem;            use Sem;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Stand;          use Stand;
! with Targparm;       use Targparm;
  
  package body Itypes is
  
*************** package body Itypes is
*** 61,69 ****
        end if;
  
        --  Make sure Esize (Typ) was properly initialized, it should be since
!       --  New_Internal_Entity/New_External_Entity call Init_Size_Align.
  
!       pragma Assert (Esize (Typ) = Uint_0);
  
        Set_Etype (Typ, Any_Type);
        Set_Is_Itype (Typ);
--- 61,69 ----
        end if;
  
        --  Make sure Esize (Typ) was properly initialized, it should be since
!       --  New_Internal_Entity/New_External_Entity call Reinit_Size_Align.
  
!       pragma Assert (not Known_Esize (Typ));
  
        Set_Etype (Typ, Any_Type);
        Set_Is_Itype (Typ);
*************** package body Itypes is
*** 89,95 ****
         Related_Nod : Node_Id;
         Scope_Id    : Entity_Id := Current_Scope) return Entity_Id
     is
!       I_Typ        : Entity_Id;
  
     begin
        pragma Assert (Is_Access_Type (T));
--- 89,95 ----
         Related_Nod : Node_Id;
         Scope_Id    : Entity_Id := Current_Scope) return Entity_Id
     is
!       I_Typ : Entity_Id;
  
     begin
        pragma Assert (Is_Access_Type (T));
*************** package body Itypes is
*** 110,115 ****
--- 110,116 ----
        Set_Is_Atomic                (I_Typ, Is_Atomic          (T));
        Set_Is_Ada_2005_Only         (I_Typ, Is_Ada_2005_Only   (T));
        Set_Is_Ada_2012_Only         (I_Typ, Is_Ada_2012_Only   (T));
+       Set_Is_Ada_2022_Only         (I_Typ, Is_Ada_2022_Only   (T));
        Set_Can_Never_Be_Null        (I_Typ);
  
        return I_Typ;
diff -Nrcpad gcc-11.3.0/gcc/ada/itypes.ads gcc-12.1.0/gcc/ada/itypes.ads
*** gcc-11.3.0/gcc/ada/itypes.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/itypes.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 25,33 ****
  
  --  This package contains declarations for handling of implicit types
  
! with Einfo;    use Einfo;
! with Sem_Util; use Sem_Util;
! with Types;    use Types;
  
  package Itypes is
  
--- 25,34 ----
  
  --  This package contains declarations for handling of implicit types
  
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Sem_Util;       use Sem_Util;
! with Types;          use Types;
  
  package Itypes is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/krunch.adb gcc-12.1.0/gcc/ada/krunch.adb
*** gcc-11.3.0/gcc/ada/krunch.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/krunch.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** begin
*** 92,106 ****
        Startloc := 3;
        Buffer (2 .. Len - 5) := Buffer (7 .. Len);
        Curlen := Len - 5;
!       if Buffer (Curlen - 2 .. Curlen) = "128"
!         or else Buffer (3 .. 9) = "exn_lll"
!         or else Buffer (3 .. 9) = "exp_lll"
!         or else Buffer (3 .. 9) = "img_lll"
!         or else Buffer (3 .. 9) = "val_lll"
!         or else Buffer (3 .. 9) = "wid_lll"
!         or else (Buffer (3 .. 6) = "pack" and then Curlen = 10)
        then
!          if Buffer (3 .. 15) = "compare_array" then
              Buffer (3 .. 4) := "ca";
              Buffer (5 .. Curlen - 11) := Buffer (16 .. Curlen);
              Curlen := Curlen - 11;
--- 92,107 ----
        Startloc := 3;
        Buffer (2 .. Len - 5) := Buffer (7 .. Len);
        Curlen := Len - 5;
!       if (Curlen >= 3 and then Buffer (Curlen - 2 .. Curlen) = "128")
!         or else (Len >= 9 and then
!                     (Buffer (3 .. 9) = "exn_lll"
!                       or else Buffer (3 .. 9) = "exp_lll"
!                       or else Buffer (3 .. 9) = "img_lll"
!                       or else Buffer (3 .. 9) = "val_lll"
!                       or else Buffer (3 .. 9) = "wid_lll"))
!            or else (Curlen = 10 and then Buffer (3 .. 6) = "pack")
        then
!          if Len >= 15 and then Buffer (3 .. 15) = "compare_array" then
              Buffer (3 .. 4) := "ca";
              Buffer (5 .. Curlen - 11) := Buffer (16 .. Curlen);
              Curlen := Curlen - 11;
diff -Nrcpad gcc-11.3.0/gcc/ada/krunch.ads gcc-12.1.0/gcc/ada/krunch.ads
*** gcc-11.3.0/gcc/ada/krunch.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/krunch.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/layout.adb gcc-12.1.0/gcc/ada/layout.adb
*** gcc-11.3.0/gcc/ada/layout.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/layout.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
***************
*** 23,41 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Opt;      use Opt;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch13; use Sem_Ch13;
! with Sem_Eval; use Sem_Eval;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Ttypes;   use Ttypes;
! with Uintp;    use Uintp;
  
  package body Layout is
  
--- 23,45 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Opt;            use Opt;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
  
  package body Layout is
  
*************** package body Layout is
*** 73,79 ****
     begin
        --  Nothing to do if size unknown
  
!       if Unknown_Esize (E) then
           return;
        end if;
  
--- 77,83 ----
     begin
        --  Nothing to do if size unknown
  
!       if not Known_Esize (E) then
           return;
        end if;
  
*************** package body Layout is
*** 115,121 ****
        --  Now we have the size set, it must be a multiple of the alignment
        --  nothing more we can do here if the alignment is unknown here.
  
!       if Unknown_Alignment (E) then
           return;
        end if;
  
--- 119,125 ----
        --  Now we have the size set, it must be a multiple of the alignment
        --  nothing more we can do here if the alignment is unknown here.
  
!       if not Known_Alignment (E) then
           return;
        end if;
  
*************** package body Layout is
*** 151,157 ****
              exit when Esize (E) mod Abits = 0;
           end loop;
  
!          Init_Alignment (E, Abits / SSU);
           return;
        end if;
  
--- 155,161 ----
              exit when Esize (E) mod Abits = 0;
           end loop;
  
!          Set_Alignment (E, UI_From_Int (Abits / SSU));
           return;
        end if;
  
*************** package body Layout is
*** 235,246 ****
        Desig_Type : Entity_Id;
  
     begin
!       --  For string literal types, for now, kill the size always, this is
!       --  because gigi does not like or need the size to be set ???
  
        if Ekind (E) = E_String_Literal_Subtype then
!          Set_Esize (E, Uint_0);
!          Set_RM_Size (E, Uint_0);
           return;
        end if;
  
--- 239,250 ----
        Desig_Type : Entity_Id;
  
     begin
!       --  For string literal types, kill the size always, because gigi does not
!       --  like or need the size to be set.
  
        if Ekind (E) = E_String_Literal_Subtype then
!          Reinit_Esize (E);
!          Reinit_RM_Size (E);
           return;
        end if;
  
*************** package body Layout is
*** 266,280 ****
              Desig_Type := Non_Limited_View (Designated_Type (E));
           end if;
  
!          --  If Esize already set (e.g. by a size clause), then nothing further
!          --  to be done here.
  
           if Known_Esize (E) then
              null;
  
!          --  Access to subprogram is a strange beast, and we let the backend
!          --  figure out what is needed (it may be some kind of fat pointer,
!          --  including the static link for example.
  
           elsif Is_Access_Protected_Subprogram_Type (E) then
              null;
--- 270,284 ----
              Desig_Type := Non_Limited_View (Designated_Type (E));
           end if;
  
!          --  If Esize already set (e.g. by a size or value size clause), then
!          --  nothing further to be done here.
  
           if Known_Esize (E) then
              null;
  
!          --  Access to protected subprogram is a strange beast, and we let the
!          --  backend figure out what is needed (it may be some kind of fat
!          --  pointer, including the static link for example).
  
           elsif Is_Access_Protected_Subprogram_Type (E) then
              null;
*************** package body Layout is
*** 283,289 ****
  
           elsif Ekind (E) = E_Access_Subtype then
              Set_Size_Info (E, Base_Type (E));
!             Set_RM_Size   (E, RM_Size (Base_Type (E)));
  
           --  For other access types, we use either address size, or, if a fat
           --  pointer is used (pointer-to-unconstrained array case), twice the
--- 287,293 ----
  
           elsif Ekind (E) = E_Access_Subtype then
              Set_Size_Info (E, Base_Type (E));
!             Copy_RM_Size (To => E, From => Base_Type (E));
  
           --  For other access types, we use either address size, or, if a fat
           --  pointer is used (pointer-to-unconstrained array case), twice the
*************** package body Layout is
*** 368,387 ****
  
              if not Known_Esize (E) then
                 declare
!                   S : Int := 8;
  
                 begin
                    loop
                       --  If size is big enough, set it and exit
  
                       if S >= RM_Size (E) then
!                         Init_Esize (E, S);
                          exit;
  
                       --  If the RM_Size is greater than System_Max_Integer_Size
                       --  (happens only when strange values are specified by the
                       --  user), then Esize is simply a copy of RM_Size, it will
!                      --  be further refined later on).
  
                       elsif S = System_Max_Integer_Size then
                          Set_Esize (E, RM_Size (E));
--- 372,391 ----
  
              if not Known_Esize (E) then
                 declare
!                   S : Pos := 8;
  
                 begin
                    loop
                       --  If size is big enough, set it and exit
  
                       if S >= RM_Size (E) then
!                         Set_Esize (E, UI_From_Int (S));
                          exit;
  
                       --  If the RM_Size is greater than System_Max_Integer_Size
                       --  (happens only when strange values are specified by the
                       --  user), then Esize is simply a copy of RM_Size, it will
!                      --  be further refined later on.
  
                       elsif S = System_Max_Integer_Size then
                          Set_Esize (E, RM_Size (E));
*************** package body Layout is
*** 400,406 ****
           --  it now to a copy of the Esize if the Esize is set.
  
           else
!             if Known_Esize (E) and then Unknown_RM_Size (E) then
                 Set_RM_Size (E, Esize (E));
              end if;
           end if;
--- 404,410 ----
           --  it now to a copy of the Esize if the Esize is set.
  
           else
!             if Known_Esize (E) and then not Known_RM_Size (E) then
                 Set_RM_Size (E, Esize (E));
              end if;
           end if;
*************** package body Layout is
*** 421,436 ****
                 PAT : constant Entity_Id := Packed_Array_Impl_Type (E);
  
              begin
!                if Unknown_Esize (E) then
!                   Set_Esize     (E, Esize     (PAT));
                 end if;
  
!                if Unknown_RM_Size (E) then
!                   Set_RM_Size   (E, RM_Size   (PAT));
                 end if;
  
!                if Unknown_Alignment (E) then
!                   Set_Alignment (E, Alignment (PAT));
                 end if;
              end;
           end if;
--- 425,440 ----
                 PAT : constant Entity_Id := Packed_Array_Impl_Type (E);
  
              begin
!                if not Known_Esize (E) then
!                   Copy_Esize (To => E, From => PAT);
                 end if;
  
!                if not Known_RM_Size (E) then
!                   Copy_RM_Size (To => E, From => PAT);
                 end if;
  
!                if not Known_Alignment (E) then
!                   Copy_Alignment (To => E, From => PAT);
                 end if;
              end;
           end if;
*************** package body Layout is
*** 442,454 ****
           --  gave up because, in this case, the object size is not a multiple
           --  of the alignment and, therefore, cannot be the component size.
  
!          if Ekind (E) = E_Array_Type and then Unknown_Component_Size (E) then
              declare
                 CT : constant Entity_Id := Component_Type (E);
  
              begin
                 --  For some reason, access types can cause trouble, So let's
!                --  just do this for scalar types ???
  
                 if Present (CT)
                   and then Is_Scalar_Type (CT)
--- 446,458 ----
           --  gave up because, in this case, the object size is not a multiple
           --  of the alignment and, therefore, cannot be the component size.
  
!          if Ekind (E) = E_Array_Type and then not Known_Component_Size (E) then
              declare
                 CT : constant Entity_Id := Component_Type (E);
  
              begin
                 --  For some reason, access types can cause trouble, So let's
!                --  just do this for scalar types.
  
                 if Present (CT)
                   and then Is_Scalar_Type (CT)
*************** package body Layout is
*** 474,480 ****
  
           if Is_Array_Type (E)
             and then not Is_Packed (E)
!            and then Unknown_Alignment (E)
             and then Known_Alignment (Component_Type (E))
             and then Known_Static_Component_Size (E)
             and then Known_Static_Esize (Component_Type (E))
--- 478,484 ----
  
           if Is_Array_Type (E)
             and then not Is_Packed (E)
!            and then not Known_Alignment (E)
             and then Known_Alignment (Component_Type (E))
             and then Known_Static_Component_Size (E)
             and then Known_Static_Esize (Component_Type (E))
*************** package body Layout is
*** 483,488 ****
--- 487,545 ----
           then
              Set_Alignment (E, Alignment (Component_Type (E)));
           end if;
+ 
+          --  If packing was requested, the one-dimensional array is constrained
+          --  with static bounds, the component size was set explicitly, and
+          --  the alignment is known, we can set (if not set explicitly) the
+          --  RM_Size and the Esize of the array type, as RM_Size is equal to
+          --  (arr'length * arr'component_size) and Esize is the same value
+          --  rounded to the next multiple of arr'alignment. This is not
+          --  applicable to packed arrays that are implemented specially
+          --  in GNAT, i.e. when Packed_Array_Impl_Type is set.
+ 
+          if Is_Array_Type (E)
+            and then Present (First_Index (E))  --  Skip types in error
+            and then Number_Dimensions (E) = 1
+            and then not Present (Packed_Array_Impl_Type (E))
+            and then Has_Pragma_Pack (E)
+            and then Is_Constrained (E)
+            and then Compile_Time_Known_Bounds (E)
+            and then Known_Component_Size (E)
+            and then Known_Alignment (E)
+          then
+             declare
+                Abits : constant Int := UI_To_Int (Alignment (E)) * SSU;
+                Lo, Hi : Node_Id;
+                Siz : Uint;
+ 
+             begin
+                Get_Index_Bounds (First_Index (E), Lo, Hi);
+ 
+                --  Even if the bounds are known at compile time, they could
+                --  have been replaced by an error node. Check each bound
+                --  explicitly.
+ 
+                if Compile_Time_Known_Value (Lo)
+                  and then Compile_Time_Known_Value (Hi)
+                then
+                   Siz := (Expr_Value (Hi) - Expr_Value (Lo) + 1)
+                     * Component_Size (E);
+ 
+                   --  Do not overwrite a different value of 'Size specified
+                   --  explicitly by the user. In that case, also do not set
+                   --  Esize.
+ 
+                   if not Known_RM_Size (E) or else RM_Size (E) = Siz then
+                      Set_RM_Size (E, Siz);
+ 
+                      if not Known_Esize (E) then
+                         Siz := ((Siz + (Abits - 1)) / Abits) * Abits;
+                         Set_Esize (E, Siz);
+                      end if;
+                   end if;
+                end if;
+             end;
+          end if;
        end if;
  
        --  Even if the backend performs the layout, we still do a little in
*************** package body Layout is
*** 519,525 ****
           --  arrays when passed to subprogram parameters (see special test
           --  in Exp_Ch6.Expand_Actuals).
  
!          if not Is_Packed (E) and then Unknown_Alignment (E) then
              if Known_Static_Component_Size (E)
                and then Component_Size (E) = 1
              then
--- 576,582 ----
           --  arrays when passed to subprogram parameters (see special test
           --  in Exp_Ch6.Expand_Actuals).
  
!          if not Is_Packed (E) and then not Known_Alignment (E) then
              if Known_Static_Component_Size (E)
                and then Component_Size (E) = 1
              then
*************** package body Layout is
*** 559,565 ****
                 Size : constant Uint := RM_Size (E);
  
              begin
!                Set_Esize (E, RM_Size (E));
  
                 --  For scalar types, increase Object_Size to power of 2, but
                 --  not less than a storage unit in any case (i.e., normally
--- 616,622 ----
                 Size : constant Uint := RM_Size (E);
  
              begin
!                Set_Esize (E, Size);
  
                 --  For scalar types, increase Object_Size to power of 2, but
                 --  not less than a storage unit in any case (i.e., normally
*************** package body Layout is
*** 567,579 ****
  
                 if Is_Scalar_Type (E) then
                    if Size <= SSU then
!                      Init_Esize (E, SSU);
                    elsif Size <= 16 then
!                      Init_Esize (E, 16);
                    elsif Size <= 32 then
!                      Init_Esize (E, 32);
                    else
!                      Set_Esize  (E, (Size + 63) / 64 * 64);
                    end if;
  
                    --  Finally, make sure that alignment is consistent with
--- 624,636 ----
  
                 if Is_Scalar_Type (E) then
                    if Size <= SSU then
!                      Set_Esize (E, UI_From_Int (SSU));
                    elsif Size <= 16 then
!                      Set_Esize (E, Uint_16);
                    elsif Size <= 32 then
!                      Set_Esize (E, Uint_32);
                    else
!                      Set_Esize (E, (Size + 63) / 64 * 64);
                    end if;
  
                    --  Finally, make sure that alignment is consistent with
*************** package body Layout is
*** 584,589 ****
--- 641,651 ----
                    loop
                       Set_Alignment (E, 2 * Alignment (E));
                    end loop;
+ 
+                --  For the other types, apply standard adjustments
+ 
+                else
+                   Adjust_Esize_Alignment (E);
                 end if;
              end;
           end if;
*************** package body Layout is
*** 691,697 ****
  
           if Known_Static_Esize (E) then
              Siz := Esize (E);
!          elsif Unknown_Esize (E) and then Known_Static_RM_Size (E) then
              Siz := RM_Size (E);
           else
              return;
--- 753,759 ----
  
           if Known_Static_Esize (E) then
              Siz := Esize (E);
!          elsif not Known_Esize (E) and then Known_Static_RM_Size (E) then
              Siz := RM_Size (E);
           else
              return;
*************** package body Layout is
*** 796,802 ****
  
                          if Calign > Align
                            and then
!                             (Unknown_Esize (Comp)
                                or else (Known_Static_Esize (Comp)
                                          and then
                                         Esize (Comp) = Calign * SSU))
--- 858,864 ----
  
                          if Calign > Align
                            and then
!                             (not Known_Esize (Comp)
                                or else (Known_Static_Esize (Comp)
                                          and then
                                         Esize (Comp) = Calign * SSU))
*************** package body Layout is
*** 842,848 ****
        --  nothing to do with code.
  
        if Is_Generic_Type (Root_Type (FST)) then
!          Set_RM_Size (Def_Id, Uint_0);
  
        --  If the subtype statically matches the first subtype, then it is
        --  required to have exactly the same layout. This is required by
--- 904,910 ----
        --  nothing to do with code.
  
        if Is_Generic_Type (Root_Type (FST)) then
!          Reinit_RM_Size (Def_Id);
  
        --  If the subtype statically matches the first subtype, then it is
        --  required to have exactly the same layout. This is required by
*************** package body Layout is
*** 963,970 ****
           --  If alignment is currently not set, then we can safely set it to
           --  this new calculated value.
  
!          if Unknown_Alignment (E) then
!             Init_Alignment (E, A);
  
           --  Cases where we have inherited an alignment
  
--- 1025,1032 ----
           --  If alignment is currently not set, then we can safely set it to
           --  this new calculated value.
  
!          if not Known_Alignment (E) then
!             Set_Alignment (E, UI_From_Int (A));
  
           --  Cases where we have inherited an alignment
  
*************** package body Layout is
*** 973,979 ****
           --  sure that no constructed types have weird alignments.
  
           elsif not Comes_From_Source (E) then
!             Init_Alignment (E, A);
  
           --  If this inherited alignment is the same as the one we computed,
           --  then obviously everything is fine, and we do not need to reset it.
--- 1035,1041 ----
           --  sure that no constructed types have weird alignments.
  
           elsif not Comes_From_Source (E) then
!             Set_Alignment (E, UI_From_Int (A));
  
           --  If this inherited alignment is the same as the one we computed,
           --  then obviously everything is fine, and we do not need to reset it.
*************** package body Layout is
*** 1079,1085 ****
                    --  ACATS problem which seems to have disappeared anyway, and
                    --  in any case, this peculiarity was never documented.
  
!                   Init_Alignment (E, A);
  
                 --  If no Size (or Object_Size) was specified, then we have
                 --  inherited the object size, so we should also inherit the
--- 1141,1147 ----
                    --  ACATS problem which seems to have disappeared anyway, and
                    --  in any case, this peculiarity was never documented.
  
!                   Set_Alignment (E, UI_From_Int (A));
  
                 --  If no Size (or Object_Size) was specified, then we have
                 --  inherited the object size, so we should also inherit the
diff -Nrcpad gcc-11.3.0/gcc/ada/layout.ads gcc-12.1.0/gcc/ada/layout.ads
*** gcc-11.3.0/gcc/ada/layout.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/layout.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
*************** with Types; use Types;
*** 32,41 ****
  
  package Layout is
  
!    --  The following procedures are called from Freeze, so all entities
!    --  for types and objects that get frozen (which should be all such
!    --  entities which are seen by the back end) will get laid out by one
!    --  of these two procedures.
  
     procedure Layout_Type (E : Entity_Id);
     --  This procedure may set or adjust the fields Esize, RM_Size and
--- 32,40 ----
  
  package Layout is
  
!    --  The following procedures are called from Freeze, so all entities for
!    --  types and objects that get frozen (i.e. all types and objects seen by
!    --  the back end) will get laid out by one of these two procedures.
  
     procedure Layout_Type (E : Entity_Id);
     --  This procedure may set or adjust the fields Esize, RM_Size and
diff -Nrcpad gcc-11.3.0/gcc/ada/lib-list.adb gcc-12.1.0/gcc/ada/lib-list.adb
*** gcc-11.3.0/gcc/ada/lib-list.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib-list.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/lib-load.adb gcc-12.1.0/gcc/ada/lib-load.adb
*** gcc-11.3.0/gcc/ada/lib-load.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib-load.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,49 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Fname;    use Fname;
! with Fname.UF; use Fname.UF;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Osint;    use Osint;
! with Osint.C;  use Osint.C;
! with Output;   use Output;
  with Par;
! with Restrict; use Restrict;
! with Scn;      use Scn;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Sinput.L; use Sinput.L;
! with Stand;    use Stand;
! with Tbuild;   use Tbuild;
! with Uname;    use Uname;
  
  package body Lib.Load is
  
--- 23,52 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Errout;         use Errout;
! with Fname;          use Fname;
! with Fname.UF;       use Fname.UF;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Osint;          use Osint;
! with Osint.C;        use Osint.C;
! with Output;         use Output;
  with Par;
! with Restrict;       use Restrict;
! with Scn;            use Scn;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Sinput.L;       use Sinput.L;
! with Stand;          use Stand;
! with Tbuild;         use Tbuild;
! with Uname;          use Uname;
  
  package body Lib.Load is
  
*************** package body Lib.Load is
*** 85,91 ****
  
        --  Note: for the following we should really generalize and consult the
        --  file name pattern data, but for now we just deal with the common
!       --  naming cases, which is probably good enough in practice ???
  
        --  Change .adb to .ads
  
--- 88,94 ----
  
        --  Note: for the following we should really generalize and consult the
        --  file name pattern data, but for now we just deal with the common
!       --  naming cases, which is good enough in practice.
  
        --  Change .adb to .ads
  
*************** package body Lib.Load is
*** 361,367 ****
              Error_Location         => No_Location,
              Expected_Unit          => No_Unit_Name,
              Fatal_Error            => None,
!             Generate_Code          => False,
              Has_RACW               => False,
              Filler                 => False,
              Ident_String           => Empty,
--- 364,370 ----
              Error_Location         => No_Location,
              Expected_Unit          => No_Unit_Name,
              Fatal_Error            => None,
!             Generate_Code          => True,
              Has_RACW               => False,
              Filler                 => False,
              Ident_String           => Empty,
*************** package body Lib.Load is
*** 393,406 ****
     ---------------
  
     function Load_Unit
!      (Load_Name         : Unit_Name_Type;
!       Required          : Boolean;
!       Error_Node        : Node_Id;
!       Subunit           : Boolean;
!       Corr_Body         : Unit_Number_Type := No_Unit;
!       Renamings         : Boolean          := False;
!       With_Node         : Node_Id          := Empty;
!       PMES              : Boolean          := False) return Unit_Number_Type
     is
        Calling_Unit : Unit_Number_Type;
        Uname_Actual : Unit_Name_Type;
--- 396,409 ----
     ---------------
  
     function Load_Unit
!      (Load_Name  : Unit_Name_Type;
!       Required   : Boolean;
!       Error_Node : Node_Id;
!       Subunit    : Boolean;
!       Corr_Body  : Unit_Number_Type := No_Unit;
!       Renamings  : Boolean          := False;
!       With_Node  : Node_Id          := Empty;
!       PMES       : Boolean          := False) return Unit_Number_Type
     is
        Calling_Unit : Unit_Number_Type;
        Uname_Actual : Unit_Name_Type;
*************** package body Lib.Load is
*** 424,430 ****
        --  it is part of the main extended source, otherwise reset them.
  
        --  Note: it's a bit odd but PMES is False for subunits, which is why
!       --  we have the OR here. Should be investigated some time???
  
        if PMES or Subunit then
           Restore_Config_Cunit_Boolean_Restrictions;
--- 427,433 ----
        --  it is part of the main extended source, otherwise reset them.
  
        --  Note: it's a bit odd but PMES is False for subunits, which is why
!       --  we have the OR here.
  
        if PMES or Subunit then
           Restore_Config_Cunit_Boolean_Restrictions;
*************** package body Lib.Load is
*** 448,455 ****
                With_Node  => With_Node);
  
           if Unump = No_Unit then
!             Parsing_Main_Extended_Source := Save_PMES;
!             return No_Unit;
           end if;
  
           --  If parent is a renaming, then we use the renamed package as
--- 451,458 ----
                With_Node  => With_Node);
  
           if Unump = No_Unit then
!             Unum := No_Unit;
!             goto Done;
           end if;
  
           --  If parent is a renaming, then we use the renamed package as
*************** package body Lib.Load is
*** 478,484 ****
              --  installing the context. The implicit with is on this entity,
              --  not on the package it renames. This is somewhat redundant given
              --  the with_clause just created, but it simplifies subsequent
!             --  expansion of the current with_clause. Optimizable ???
  
              if Nkind (Error_Node) = N_With_Clause
                and then Nkind (Name (Error_Node)) = N_Selected_Component
--- 481,487 ----
              --  installing the context. The implicit with is on this entity,
              --  not on the package it renames. This is somewhat redundant given
              --  the with_clause just created, but it simplifies subsequent
!             --  expansion of the current with_clause.
  
              if Nkind (Error_Node) = N_With_Clause
                and then Nkind (Name (Error_Node)) = N_Selected_Component
*************** package body Lib.Load is
*** 820,826 ****
                       Units.Table (Calling_Unit).Fatal_Error := Error_Detected;
  
                    --  If with'ed unit had an ignored error, then propagate it
!                   --  but do not overide an existring setting.
  
                    when Error_Ignored =>
                       if Units.Table (Calling_Unit).Fatal_Error = None then
--- 823,829 ----
                       Units.Table (Calling_Unit).Fatal_Error := Error_Detected;
  
                    --  If with'ed unit had an ignored error, then propagate it
!                   --  but do not overide an existing setting.
  
                    when Error_Ignored =>
                       if Units.Table (Calling_Unit).Fatal_Error = None then
*************** package body Lib.Load is
*** 897,903 ****
                 Remove_Unit (Unum);
  
              --  If unit not required, remove load stack entry and the junk
!             --  file table entry, and return No_Unit to indicate not found,
  
              else
                 Load_Stack.Decrement_Last;
--- 900,906 ----
                 Remove_Unit (Unum);
  
              --  If unit not required, remove load stack entry and the junk
!             --  file table entry, and return No_Unit to indicate not found.
  
              else
                 Load_Stack.Decrement_Last;
*************** package body Lib.Load is
*** 955,973 ****
     --  code will have to be generated for it.
  
     procedure Make_Instance_Unit (N : Node_Id; In_Main : Boolean) is
!       Sind  : constant Source_File_Index := Source_Index (Main_Unit);
  
     begin
        Units.Increment_Last;
  
        if In_Main then
!          Units.Table (Units.Last)               := Units.Table (Main_Unit);
!          Units.Table (Units.Last).Cunit         := Library_Unit (N);
!          Units.Table (Units.Last).Generate_Code := True;
           Init_Unit_Name (Units.Last, Unit_Name (Main_Unit));
  
!          Units.Table (Main_Unit).Cunit          := N;
!          Units.Table (Main_Unit).Version        := Source_Checksum (Sind);
           Init_Unit_Name (Main_Unit,
             Get_Body_Name
               (Unit_Name (Get_Cunit_Unit_Number (Library_Unit (N)))));
--- 958,975 ----
     --  code will have to be generated for it.
  
     procedure Make_Instance_Unit (N : Node_Id; In_Main : Boolean) is
!       Sind : constant Source_File_Index := Source_Index (Main_Unit);
  
     begin
        Units.Increment_Last;
  
        if In_Main then
!          Units.Table (Units.Last)        := Units.Table (Main_Unit);
!          Units.Table (Units.Last).Cunit  := Library_Unit (N);
           Init_Unit_Name (Units.Last, Unit_Name (Main_Unit));
  
!          Units.Table (Main_Unit).Cunit   := N;
!          Units.Table (Main_Unit).Version := Source_Checksum (Sind);
           Init_Unit_Name (Main_Unit,
             Get_Body_Name
               (Unit_Name (Get_Cunit_Unit_Number (Library_Unit (N)))));
diff -Nrcpad gcc-11.3.0/gcc/ada/lib-load.ads gcc-12.1.0/gcc/ada/lib-load.ads
*** gcc-11.3.0/gcc/ada/lib-load.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib-load.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/lib-sort.adb gcc-12.1.0/gcc/ada/lib-sort.adb
*** gcc-11.3.0/gcc/ada/lib-sort.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib-sort.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/lib-util.adb gcc-12.1.0/gcc/ada/lib-util.adb
*** gcc-11.3.0/gcc/ada/lib-util.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib-util.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/lib-util.ads gcc-12.1.0/gcc/ada/lib-util.ads
*** gcc-11.3.0/gcc/ada/lib-util.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib-util.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/lib-writ.adb gcc-12.1.0/gcc/ada/lib-writ.adb
*** gcc-11.3.0/gcc/ada/lib-writ.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib-writ.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,57 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with ALI;      use ALI;
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Fname;    use Fname;
! with Fname.UF; use Fname.UF;
! with Lib.Util; use Lib.Util;
! with Lib.Xref; use Lib.Xref;
! with Nlists;   use Nlists;
! with Gnatvsn;  use Gnatvsn;
! with Opt;      use Opt;
! with Osint;    use Osint;
! with Osint.C;  use Osint.C;
! with Output;   use Output;
  with Par;
! with Par_SCO;  use Par_SCO;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Stand;    use Stand;
! with Scn;      use Scn;
! with Sem_Eval; use Sem_Eval;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
! with Uname;    use Uname;
  
  with System.Case_Util; use System.Case_Util;
  with System.WCh_Con;   use System.WCh_Con;
--- 23,61 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with ALI;            use ALI;
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Fname;          use Fname;
! with Fname.UF;       use Fname.UF;
! with Lib.Util;       use Lib.Util;
! with Lib.Xref;       use Lib.Xref;
! with Nlists;         use Nlists;
! with Gnatvsn;        use Gnatvsn;
! with Opt;            use Opt;
! with Osint;          use Osint;
! with Osint.C;        use Osint.C;
! with Output;         use Output;
  with Par;
! with Par_SCO;        use Par_SCO;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Stand;          use Stand;
! with Scn;            use Scn;
! with Sem_Eval;       use Sem_Eval;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
! with Uname;          use Uname;
  
  with System.Case_Util; use System.Case_Util;
  with System.WCh_Con;   use System.WCh_Con;
*************** package body Lib.Writ is
*** 133,139 ****
     ------------------------------
  
     procedure Ensure_System_Dependency is
!       System_Uname : Unit_Name_Type;
        --  Unit name for system spec if needed for dummy entry
  
        System_Fname : File_Name_Type;
--- 137,144 ----
     ------------------------------
  
     procedure Ensure_System_Dependency is
!       System_Uname : constant Unit_Name_Type :=
!         Name_To_Unit_Name (Name_System);
        --  Unit name for system spec if needed for dummy entry
  
        System_Fname : File_Name_Type;
*************** package body Lib.Writ is
*** 142,152 ****
     begin
        --  Nothing to do if we already compiled System
  
!       for Unum in Units.First .. Last_Unit loop
!          if Source_Index (Unum) = System_Source_File_Index then
!             return;
!          end if;
!       end loop;
  
        --  If no entry for system.ads in the units table, then add a entry
        --  to the units table for system.ads, which will be referenced when
--- 147,155 ----
     begin
        --  Nothing to do if we already compiled System
  
!       if Is_Loaded (System_Uname) then
!          return;
!       end if;
  
        --  If no entry for system.ads in the units table, then add a entry
        --  to the units table for system.ads, which will be referenced when
*************** package body Lib.Writ is
*** 154,162 ****
        --  on system as a result of Targparm scanning the system.ads file to
        --  determine the target dependent parameters for the compilation.
  
-       Name_Len := 6;
-       Name_Buffer (1 .. 6) := "system";
-       System_Uname := Name_To_Unit_Name (Name_Enter);
        System_Fname := File_Name (System_Source_File_Index);
  
        Units.Increment_Last;
--- 157,162 ----
*************** package body Lib.Writ is
*** 203,209 ****
           Style_Check := False;
           Initialize_Scanner (Units.Last, System_Source_File_Index);
           Discard_List (Par (Configuration_Pragmas => False));
!          Set_Ekind (Cunit_Entity (Units.Last), E_Package);
           Set_Scope (Cunit_Entity (Units.Last), Standard_Standard);
           Style_Check := Save_Style;
           Multiple_Unit_Index := Save_Mindex;
--- 203,209 ----
           Style_Check := False;
           Initialize_Scanner (Units.Last, System_Source_File_Index);
           Discard_List (Par (Configuration_Pragmas => False));
!          Mutate_Ekind (Cunit_Entity (Units.Last), E_Package);
           Set_Scope (Cunit_Entity (Units.Last), Standard_Standard);
           Style_Check := Save_Style;
           Multiple_Unit_Index := Save_Mindex;
*************** package body Lib.Writ is
*** 705,711 ****
                    Write_Info_Char (' ');
  
                    case Pragma_Name (N) is
!                      when Name_Annotate =>
                          C := 'A';
                       when Name_Comment =>
                          C := 'C';
--- 705,711 ----
                    Write_Info_Char (' ');
  
                    case Pragma_Name (N) is
!                      when Name_Annotate | Name_GNAT_Annotate =>
                          C := 'A';
                       when Name_Comment =>
                          C := 'C';
*************** package body Lib.Writ is
*** 1014,1020 ****
           return;
        end if;
  
!       --  Build sorted source dependency table.
  
        for Unum in Units.First .. Last_Unit loop
           if Cunit_Entity (Unum) = Empty
--- 1014,1020 ----
           return;
        end if;
  
!       --  Build sorted source dependency table
  
        for Unum in Units.First .. Last_Unit loop
           if Cunit_Entity (Unum) = Empty
*************** package body Lib.Writ is
*** 1251,1259 ****
        --  for which we have generated code
  
        for Unit in Units.First .. Last_Unit loop
!          if Units.Table (Unit).Generate_Code or else Unit = Main_Unit then
              if not Has_No_Elaboration_Code (Cunit (Unit)) then
                 Main_Restrictions.Violated (No_Elaboration_Code) := True;
              end if;
           end if;
        end loop;
--- 1251,1260 ----
        --  for which we have generated code
  
        for Unit in Units.First .. Last_Unit loop
!          if Units.Table (Unit).Generate_Code then
              if not Has_No_Elaboration_Code (Cunit (Unit)) then
                 Main_Restrictions.Violated (No_Elaboration_Code) := True;
+                exit;
              end if;
           end if;
        end loop;
diff -Nrcpad gcc-11.3.0/gcc/ada/lib-writ.ads gcc-12.1.0/gcc/ada/lib-writ.ads
*** gcc-11.3.0/gcc/ada/lib-writ.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib-writ.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Lib.Writ is
*** 1053,1058 ****
--- 1053,1061 ----
     --  The Object parameter is true if an object file is created, and false
     --  otherwise. Note that the pseudo-object file generated in GNATprove mode
     --  does count as an object file from this point of view.
+    --  May output duplicate D lines caused by generic instantiations. This is
+    --  by design as GNATcoverage relies on them for its coverage of generic
+    --  instantiations, although this may be revisited in the future.
  
     procedure Add_Preprocessing_Dependency (S : Source_File_Index);
     --  Indicate that there is a dependency to be added on a preprocessing data
diff -Nrcpad gcc-11.3.0/gcc/ada/lib-xref-spark_specific.adb gcc-12.1.0/gcc/ada/lib-xref-spark_specific.adb
*** gcc-11.3.0/gcc/ada/lib-xref-spark_specific.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib-xref-spark_specific.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
***************
*** 23,31 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Einfo;       use Einfo;
! with Nmake;       use Nmake;
! with SPARK_Xrefs; use SPARK_Xrefs;
  
  separate (Lib.Xref)
  package body SPARK_Specific is
--- 23,31 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Einfo.Entities; use Einfo.Entities;
! with Nmake;          use Nmake;
! with SPARK_Xrefs;    use SPARK_Xrefs;
  
  separate (Lib.Xref)
  package body SPARK_Specific is
*************** package body SPARK_Specific is
*** 187,192 ****
--- 187,196 ----
                              | Generic_Subprogram_Kind
                              | Subprogram_Kind
        then
+          if No (Unit_Declaration_Node (N)) then
+             return Empty;
+          end if;
+ 
           Context := Parent (Unit_Declaration_Node (N));
  
           --  If this was a library-level subprogram then replace Context with
*************** package body SPARK_Specific is
*** 296,302 ****
               (Standard_Location,
                Name_Enter (Name_Of_Heap_Variable));
  
!          Set_Ekind       (Heap, E_Variable);
           Set_Is_Internal (Heap, True);
           Set_Etype       (Heap, Standard_Void_Type);
           Set_Scope       (Heap, Standard_Standard);
--- 300,306 ----
               (Standard_Location,
                Name_Enter (Name_Of_Heap_Variable));
  
!          Mutate_Ekind    (Heap, E_Variable);
           Set_Is_Internal (Heap, True);
           Set_Etype       (Heap, Standard_Void_Type);
           Set_Scope       (Heap, Standard_Standard);
diff -Nrcpad gcc-11.3.0/gcc/ada/lib-xref.adb gcc-12.1.0/gcc/ada/lib-xref.adb
*** gcc-11.3.0/gcc/ada/lib-xref.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib-xref.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
***************
*** 23,48 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Csets;    use Csets;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Lib.Util; use Lib.Util;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Prag; use Sem_Prag;
! with Sem_Util; use Sem_Util;
! with Sem_Warn; use Sem_Warn;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stringt;  use Stringt;
! with Stand;    use Stand;
! with Table;    use Table;
  
  with GNAT.Heap_Sort_G;
  with GNAT.HTable;
--- 23,52 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Csets;          use Csets;
! with Einfo;          use Einfo;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Lib.Util;       use Lib.Util;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stringt;        use Stringt;
! with Stand;          use Stand;
! with Table;          use Table;
  
  with GNAT.Heap_Sort_G;
  with GNAT.HTable;
*************** package body Lib.Xref is
*** 411,432 ****
        --  Get the enclosing entity through renamings, which may come from
        --  source or from the translation of generic instantiations.
  
-       function Is_On_LHS (Node : Node_Id) return Boolean;
-       --  Used to check if a node is on the left hand side of an assignment.
-       --  The following cases are handled:
-       --
-       --   Variable    Node is a direct descendant of left hand side of an
-       --               assignment statement.
-       --
-       --   Prefix      Of an indexed or selected component that is present in
-       --               a subtree rooted by an assignment statement. There is
-       --               no restriction of nesting of components, thus cases
-       --               such as A.B (C).D are handled properly. However a prefix
-       --               of a dereference (either implicit or explicit) is never
-       --               considered as on a LHS.
-       --
-       --   Out param   Same as above cases, but OUT parameter
- 
        function OK_To_Set_Referenced return Boolean;
        --  Returns True if the Referenced flag can be set. There are a few
        --  exceptions where we do not want to set this flag, see body for
--- 415,420 ----
*************** package body Lib.Xref is
*** 477,483 ****
                             --  e.g. function call, slicing of a function call,
                             --  pointer dereference, etc.
  
!                            if No (Obj) then
                                return Empty;
                             end if;
                          else
--- 465,473 ----
                             --  e.g. function call, slicing of a function call,
                             --  pointer dereference, etc.
  
!                            if No (Obj)
!                              or else Ekind (Obj) = E_Enumeration_Literal
!                            then
                                return Empty;
                             end if;
                          else
*************** package body Lib.Xref is
*** 493,577 ****
           end case;
        end Get_Through_Renamings;
  
-       ---------------
-       -- Is_On_LHS --
-       ---------------
- 
-       --  ??? There are several routines here and there that perform a similar
-       --      (but subtly different) computation, which should be factored:
- 
-       --      Sem_Util.Is_LHS
-       --      Sem_Util.May_Be_Lvalue
-       --      Sem_Util.Known_To_Be_Assigned
-       --      Exp_Ch2.Expand_Entry_Parameter.In_Assignment_Context
-       --      Exp_Smem.Is_Out_Actual
- 
-       function Is_On_LHS (Node : Node_Id) return Boolean is
-          N : Node_Id;
-          P : Node_Id;
-          K : Node_Kind;
- 
-       begin
-          --  Only identifiers are considered, is this necessary???
- 
-          if Nkind (Node) /= N_Identifier then
-             return False;
-          end if;
- 
-          --  Immediate return if appeared as OUT parameter
- 
-          if Kind = E_Out_Parameter then
-             return True;
-          end if;
- 
-          --  Search for assignment statement subtree root
- 
-          N := Node;
-          loop
-             P := Parent (N);
-             K := Nkind (P);
- 
-             if K = N_Assignment_Statement then
-                return Name (P) = N;
- 
-             --  Check whether the parent is a component and the current node is
-             --  its prefix, but return False if the current node has an access
-             --  type, as in that case the selected or indexed component is an
-             --  implicit dereference, and the LHS is the designated object, not
-             --  the access object.
- 
-             --  ??? case of a slice assignment?
- 
-             elsif (K = N_Selected_Component or else K = N_Indexed_Component)
-               and then Prefix (P) = N
-             then
-                --  Check for access type. First a special test, In some cases
-                --  this is called too early (see comments in Find_Direct_Name),
-                --  at a point where the tree is not fully typed yet. In that
-                --  case we may lack an Etype for N, and we can't check the
-                --  Etype. For now, we always return False in such a case,
-                --  but this is clearly not right in all cases ???
- 
-                if No (Etype (N)) then
-                   return False;
- 
-                elsif Is_Access_Type (Etype (N)) then
-                   return False;
- 
-                --  Access type case dealt with, keep going
- 
-                else
-                   N := P;
-                end if;
- 
-             --  All other cases, definitely not on left side
- 
-             else
-                return False;
-             end if;
-          end loop;
-       end Is_On_LHS;
- 
        ---------------------------
        -- OK_To_Set_Referenced --
        ---------------------------
--- 483,488 ----
*************** package body Lib.Xref is
*** 699,704 ****
--- 610,646 ----
           Error_Msg_NE ("& is only defined in Ada 2012?y?", N, E);
        end if;
  
+       --  Warn if reference to Ada 2022 entity not in Ada 2022 mode. We only
+       --  detect real explicit references (modifications and references).
+ 
+       if Comes_From_Source (N)
+         and then Is_Ada_2022_Only (E)
+         and then not Is_Subprogram (E)
+         and then Ada_Version < Ada_2022
+         and then Warn_On_Ada_2022_Compatibility
+         and then (Typ = 'm' or else Typ = 'r')
+       then
+          Error_Msg_NE ("& is only defined in Ada 2022?y?", N, E);
+ 
+       --  Error on static and dispatching calls to Ada 2022 subprograms that
+       --  require overriding if we are not in Ada 2022 mode (since overriding
+       --  was skipped); warn if the subprogram does not require overriding.
+ 
+       elsif Comes_From_Source (N)
+         and then Is_Ada_2022_Only (E)
+         and then Ada_Version < Ada_2022
+         and then Is_Subprogram (E)
+         and then (Typ = 'r' or else Typ = 's' or else Typ = 'R')
+       then
+          if Requires_Overriding (E) then
+             Error_Msg_NE
+               ("& is only defined in Ada 2022 and requires overriding", N, E);
+ 
+          elsif Warn_On_Ada_2022_Compatibility then
+             Error_Msg_NE ("& is only defined in Ada 2022?y?", N, E);
+          end if;
+       end if;
+ 
        --  Do not generate references if we are within a postcondition sub-
        --  program, because the reference does not comes from source, and the
        --  preanalysis of the aspect has already created an entry for the ALI
*************** package body Lib.Xref is
*** 785,830 ****
  
        if Set_Ref then
  
!          --  Assignable object appearing on left side of assignment or as
!          --  an out parameter.
  
           if Is_Assignable (E)
!            and then Is_On_LHS (N)
!            and then Ekind (E) /= E_In_Out_Parameter
           then
!             --  For objects that are renamings, just set as simply referenced
!             --  we do not try to do assignment type tracking in this case.
! 
!             if Present (Renamed_Object (E)) then
!                Set_Referenced (E);
! 
!             --  Out parameter case
! 
!             elsif Kind = E_Out_Parameter then
! 
!                --  If warning mode for all out parameters is set, or this is
!                --  the only warning parameter, then we want to mark this for
!                --  later warning logic by setting Referenced_As_Out_Parameter
  
!                if Warn_On_Modified_As_Out_Parameter (Formal) then
!                   Set_Referenced_As_Out_Parameter (E, True);
!                   Set_Referenced_As_LHS (E, False);
  
!                --  For OUT parameter not covered by the above cases, we simply
!                --  regard it as a normal reference (in this case we do not
!                --  want any of the warning machinery for out parameters).
  
!                else
!                   Set_Referenced (E);
!                end if;
  
!             --  For the left hand of an assignment case, we do nothing here.
!             --  The processing for Analyze_Assignment will set the
!             --  Referenced_As_LHS flag.
  
!             else
!                null;
!             end if;
  
           --  Check for a reference in a pragma that should not count as a
           --  making the variable referenced for warning purposes.
--- 727,758 ----
  
        if Set_Ref then
  
!          --  When E itself is an IN OUT parameter mark it referenced
  
           if Is_Assignable (E)
!            and then Ekind (E) = E_In_Out_Parameter
!            and then Known_To_Be_Assigned (N)
           then
!             Set_Referenced (E);
  
!          --  For the case where the entity is on the left hand side of an
!          --  assignment statment, we do nothing here.
  
!          --  The processing for Analyze_Assignment_Statement will set the
!          --  Referenced_As_LHS flag.
  
!          elsif Is_Assignable (E)
!            and then Known_To_Be_Assigned (N, Only_LHS => True)
!          then
!             null;
  
!          --  For objects that are renamings, just set as simply referenced.
!          --  We do not try to do assignment type tracking in this case.
  
!          elsif Is_Assignable (E)
!            and then Present (Renamed_Object (E))
!          then
!             Set_Referenced (E);
  
           --  Check for a reference in a pragma that should not count as a
           --  making the variable referenced for warning purposes.
*************** package body Lib.Xref is
*** 864,921 ****
           then
              null;
  
!          --  All other cases
  
!          else
!             --  Special processing for IN OUT parameters, where we have an
!             --  implicit assignment to a simple variable.
  
!             if Kind = E_In_Out_Parameter
!               and then Is_Assignable (E)
!             then
!                --  For sure this counts as a normal read reference
  
                 Set_Referenced (E);
!                Set_Last_Assignment (E, Empty);
  
!                --  We count it as being referenced as an out parameter if the
!                --  option is set to warn on all out parameters, except that we
!                --  have a special exclusion for an intrinsic subprogram, which
!                --  is most likely an instantiation of Unchecked_Deallocation
!                --  which we do not want to consider as an assignment since it
!                --  generates false positives. We also exclude the case of an
!                --  IN OUT parameter if the name of the procedure is Free,
!                --  since we suspect similar semantics.
  
!                if Warn_On_All_Unread_Out_Parameters
!                  and then Is_Entity_Name (Name (Call))
!                  and then not Is_Intrinsic_Subprogram (Entity (Name (Call)))
!                  and then Chars (Name (Call)) /= Name_Free
!                then
!                   Set_Referenced_As_Out_Parameter (E, True);
!                   Set_Referenced_As_LHS (E, False);
!                end if;
  
!             --  Don't count a recursive reference within a subprogram as a
!             --  reference (that allows detection of a recursive subprogram
!             --  whose only references are recursive calls as unreferenced).
  
!             elsif Is_Subprogram (E)
!               and then E = Nearest_Dynamic_Scope (Current_Scope)
              then
!                null;
  
!             --  Any other occurrence counts as referencing the entity
  
!             elsif OK_To_Set_Referenced then
!                Set_Referenced (E);
  
!                --  If variable, this is an OK reference after an assignment
!                --  so we can clear the Last_Assignment indication.
  
!                if Is_Assignable (E) then
!                   Set_Last_Assignment (E, Empty);
!                end if;
              end if;
           end if;
  
--- 792,866 ----
           then
              null;
  
!          --  Out parameter case
  
!          elsif Kind = E_Out_Parameter
!            and then Is_Assignable (E)
!          then
!             --  If warning mode for all out parameters is set, or this is
!             --  the only warning parameter, then we want to mark this for
!             --  later warning logic by setting Referenced_As_Out_Parameter
  
!             if Warn_On_Modified_As_Out_Parameter (Formal) then
!                Set_Referenced_As_Out_Parameter (E, True);
!                Set_Referenced_As_LHS (E, False);
! 
!             --  For OUT parameter not covered by the above cases, we simply
!             --  regard it as a non-reference.
  
+             else
+                Set_Referenced_As_Out_Parameter (E);
                 Set_Referenced (E);
!             end if;
  
!          --  Special processing for IN OUT parameters, where we have an
!          --  implicit assignment to a simple variable.
  
!          elsif Kind = E_In_Out_Parameter
!            and then Is_Assignable (E)
!          then
!             --  For sure this counts as a normal read reference
  
!             Set_Referenced (E);
!             Set_Last_Assignment (E, Empty);
  
!             --  We count it as being referenced as an out parameter if the
!             --  option is set to warn on all out parameters, except that we
!             --  have a special exclusion for an intrinsic subprogram, which
!             --  is most likely an instantiation of Unchecked_Deallocation
!             --  which we do not want to consider as an assignment since it
!             --  generates false positives. We also exclude the case of an
!             --  IN OUT parameter if the name of the procedure is Free,
!             --  since we suspect similar semantics.
! 
!             if Warn_On_All_Unread_Out_Parameters
!               and then Is_Entity_Name (Name (Call))
!               and then not Is_Intrinsic_Subprogram (Entity (Name (Call)))
!               and then Chars (Name (Call)) /= Name_Free
              then
!                Set_Referenced_As_Out_Parameter (E, True);
!                Set_Referenced_As_LHS (E, False);
!             end if;
  
!          --  Don't count a recursive reference within a subprogram as a
!          --  reference (that allows detection of a recursive subprogram
!          --  whose only references are recursive calls as unreferenced).
  
!          elsif Is_Subprogram (E)
!            and then E = Nearest_Dynamic_Scope (Current_Scope)
!          then
!             null;
  
!          --  Any other occurrence counts as referencing the entity
  
!          elsif OK_To_Set_Referenced then
!             Set_Referenced (E);
! 
!             --  If variable, this is an OK reference after an assignment
!             --  so we can clear the Last_Assignment indication.
! 
!             if Is_Assignable (E) then
!                Set_Last_Assignment (E, Empty);
              end if;
           end if;
  
*************** package body Lib.Xref is
*** 928,934 ****
             and then In_Same_Extended_Unit (E, N)
           then
              --  A reference as a named parameter in a call does not count as a
!             --  violation of pragma Unreferenced for this purpose...
  
              if Nkind (N) = N_Identifier
                and then Nkind (Parent (N)) = N_Parameter_Association
--- 873,879 ----
             and then In_Same_Extended_Unit (E, N)
           then
              --  A reference as a named parameter in a call does not count as a
!             --  violation of pragma Unreferenced for this purpose.
  
              if Nkind (N) = N_Identifier
                and then Nkind (Parent (N)) = N_Parameter_Association
*************** package body Lib.Xref is
*** 936,945 ****
              then
                 null;
  
!             --  ... Neither does a reference to a variable on the left side of
!             --  an assignment.
  
!             elsif Is_On_LHS (N) then
                 null;
  
              --  Do not consider F'Result as a violation of pragma Unreferenced
--- 881,904 ----
              then
                 null;
  
!             --  Neither does a reference to a variable on the left side of
!             --  an assignment or use of an out parameter with warnings for
!             --  unread out parameters specified (via -gnatw.o).
  
!             --  The reason for treating unread out parameters in a special
!             --  way is so that when pragma Unreferenced is specified on such
!             --  an out parameter we do not want to issue a warning about the
!             --  pragma being unnecessary - because the purpose of the flag
!             --  is to warn about them not being read (e.g. unreferenced)
!             --  after use.
! 
!             elsif (Known_To_Be_Assigned (N, Only_LHS => True)
!                     or else (Present (Formal)
!                               and then Ekind (Formal) = E_Out_Parameter
!                               and then Warn_On_All_Unread_Out_Parameters))
!               and then not (Ekind (E) = E_In_Out_Parameter
!                              and then Known_To_Be_Assigned (N))
!             then
                 null;
  
              --  Do not consider F'Result as a violation of pragma Unreferenced
*************** package body Lib.Xref is
*** 1277,1294 ****
        Formal : Entity_Id;
  
     begin
!       if Is_Generic_Subprogram (E) then
!          Formal := First_Entity (E);
! 
!          while Present (Formal)
!            and then not Is_Formal (Formal)
!          loop
!             Next_Entity (Formal);
!          end loop;
! 
!       elsif Ekind (E) in Access_Subprogram_Kind then
           Formal := First_Formal (Designated_Type (E));
- 
        else
           Formal := First_Formal (E);
        end if;
--- 1236,1243 ----
        Formal : Entity_Id;
  
     begin
!       if Is_Access_Subprogram_Type (E) then
           Formal := First_Formal (Designated_Type (E));
        else
           Formal := First_Formal (E);
        end if;
*************** package body Lib.Xref is
*** 1728,1734 ****
        --  declared in the main unit.
  
        Handle_Prim_Ops : declare
!          Ent  : Entity_Id;
  
        begin
           for J in 1 .. Xrefs.Last loop
--- 1677,1683 ----
        --  declared in the main unit.
  
        Handle_Prim_Ops : declare
!          Ent : Entity_Id;
  
        begin
           for J in 1 .. Xrefs.Last loop
*************** package body Lib.Xref is
*** 2814,2831 ****
              D : Deferred_Reference_Entry renames Deferred_References.Table (J);
  
           begin
!             case Is_LHS (D.N) is
!                when Yes =>
                    Generate_Reference (D.E, D.N, 'm');
  
!                when No =>
                    Generate_Reference (D.E, D.N, 'r');
  
-                --  Not clear if Unknown can occur at this stage, but if it
-                --  does we will treat it as a normal reference.
- 
-                when Unknown =>
-                   Generate_Reference (D.E, D.N, 'r');
              end case;
           end;
        end loop;
--- 2763,2775 ----
              D : Deferred_Reference_Entry renames Deferred_References.Table (J);
  
           begin
!             case Known_To_Be_Assigned (D.N) is
!                when True =>
                    Generate_Reference (D.E, D.N, 'm');
  
!                when False =>
                    Generate_Reference (D.E, D.N, 'r');
  
              end case;
           end;
        end loop;
diff -Nrcpad gcc-11.3.0/gcc/ada/lib-xref.ads gcc-12.1.0/gcc/ada/lib-xref.ads
*** gcc-11.3.0/gcc/ada/lib-xref.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib-xref.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
***************
*** 26,32 ****
  --  This package contains for collecting and outputting cross-reference
  --  information.
  
! with Einfo;       use Einfo;
  with SPARK_Xrefs;
  
  package Lib.Xref is
--- 26,32 ----
  --  This package contains for collecting and outputting cross-reference
  --  information.
  
! with Einfo.Entities; use Einfo.Entities;
  with SPARK_Xrefs;
  
  package Lib.Xref is
diff -Nrcpad gcc-11.3.0/gcc/ada/lib.adb gcc-12.1.0/gcc/ada/lib.adb
*** gcc-11.3.0/gcc/ada/lib.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** pragma Style_Checks (All_Checks);
*** 27,44 ****
  --  Subprogram ordering not enforced in this unit
  --  (because of some logical groupings).
  
! with Atree;    use Atree;
! with Csets;    use Csets;
! with Einfo;    use Einfo;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Output;   use Output;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Uname;    use Uname;
! with Widechar; use Widechar;
  
  package body Lib is
  
--- 27,46 ----
  --  Subprogram ordering not enforced in this unit
  --  (because of some logical groupings).
  
! with Atree;          use Atree;
! with Csets;          use Csets;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Output;         use Output;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinput;         use Sinput;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Uname;          use Uname;
! with Widechar;       use Widechar;
  
  package body Lib is
  
*************** package body Lib is
*** 126,137 ****
        return Units.Table (U).Is_Predefined_Renaming;
     end Is_Predefined_Renaming;
  
!    function Is_Internal_Unit       (U : Unit_Number_Type) return Boolean is
     begin
        return Units.Table (U).Is_Internal_Unit;
     end Is_Internal_Unit;
  
!    function Is_Predefined_Unit     (U : Unit_Number_Type) return Boolean is
     begin
        return Units.Table (U).Is_Predefined_Unit;
     end Is_Predefined_Unit;
--- 128,139 ----
        return Units.Table (U).Is_Predefined_Renaming;
     end Is_Predefined_Renaming;
  
!    function Is_Internal_Unit (U : Unit_Number_Type) return Boolean is
     begin
        return Units.Table (U).Is_Internal_Unit;
     end Is_Internal_Unit;
  
!    function Is_Predefined_Unit (U : Unit_Number_Type) return Boolean is
     begin
        return Units.Table (U).Is_Predefined_Unit;
     end Is_Predefined_Unit;
*************** package body Lib is
*** 480,497 ****
           --  body of the same unit. The location in the spec is considered
           --  earlier.
  
!          if Nkind (Unit1) = N_Subprogram_Body
!               or else
!             Nkind (Unit1) = N_Package_Body
!          then
              if Library_Unit (Cunit (Unum1)) = Cunit (Unum2) then
                 return Yes_After;
              end if;
  
!          elsif Nkind (Unit2) = N_Subprogram_Body
!                  or else
!                Nkind (Unit2) = N_Package_Body
!          then
              if Library_Unit (Cunit (Unum2)) = Cunit (Unum1) then
                 return Yes_Before;
              end if;
--- 482,493 ----
           --  body of the same unit. The location in the spec is considered
           --  earlier.
  
!          if Nkind (Unit1) in N_Subprogram_Body | N_Package_Body then
              if Library_Unit (Cunit (Unum1)) = Cunit (Unum2) then
                 return Yes_After;
              end if;
  
!          elsif Nkind (Unit2) in N_Subprogram_Body | N_Package_Body then
              if Library_Unit (Cunit (Unum2)) = Cunit (Unum1) then
                 return Yes_Before;
              end if;
*************** package body Lib is
*** 509,516 ****
  
           if Counter > Max_Iterations then
  
!             --  ??? Not quite right, but return a value to be able to generate
!             --  SCIL files and hope for the best.
  
              if CodePeer_Mode then
                 return No;
--- 505,512 ----
  
           if Counter > Max_Iterations then
  
!             --  In CodePeer_Mode, return a value to be able to generate SCIL
!             --  files and hope for the best.
  
              if CodePeer_Mode then
                 return No;
*************** package body Lib is
*** 1178,1187 ****
  
     procedure Remove_Unit (U : Unit_Number_Type) is
     begin
!       if U = Units.Last then
!          Unit_Names.Set (Unit_Name (U), No_Unit);
!          Units.Decrement_Last;
!       end if;
     end Remove_Unit;
  
     ----------------------------------
--- 1174,1182 ----
  
     procedure Remove_Unit (U : Unit_Number_Type) is
     begin
!       pragma Assert (U = Units.Last);
!       Unit_Names.Set (Unit_Name (U), No_Unit);
!       Units.Decrement_Last;
     end Remove_Unit;
  
     ----------------------------------
*************** package body Lib is
*** 1266,1275 ****
     -- Synchronize_Serial_Number --
     -------------------------------
  
!    procedure Synchronize_Serial_Number is
        TSN : Int renames Units.Table (Current_Sem_Unit).Serial_Number;
     begin
!       TSN := TSN + 1;
     end Synchronize_Serial_Number;
  
     --------------------
--- 1261,1276 ----
     -- Synchronize_Serial_Number --
     -------------------------------
  
!    procedure Synchronize_Serial_Number (SN : Nat) is
        TSN : Int renames Units.Table (Current_Sem_Unit).Serial_Number;
     begin
!       --  We should not be trying to synchronize downward
! 
!       pragma Assert (TSN <= SN);
! 
!       if TSN < SN then
!          TSN := SN;
!       end if;
     end Synchronize_Serial_Number;
  
     --------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/lib.ads gcc-12.1.0/gcc/ada/lib.ads
*** gcc-11.3.0/gcc/ada/lib.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/lib.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Lib is
*** 741,753 ****
     --  This procedure is called to register a pragma N for which a notes
     --  entry is required.
  
!    procedure Synchronize_Serial_Number;
     --  This function increments the Serial_Number field for the current unit
!    --  but does not return the incremented value. This is used when there
!    --  is a situation where one path of control increments a serial number
!    --  (using Increment_Serial_Number), and the other path does not and it is
!    --  important to keep the serial numbers synchronized in the two cases (e.g.
!    --  when the references in a package and a client must be kept consistent).
  
     procedure Unlock;
     --  Unlock internal tables, in cases where the back end needs to modify them
--- 741,753 ----
     --  This procedure is called to register a pragma N for which a notes
     --  entry is required.
  
!    procedure Synchronize_Serial_Number (SN : Nat);
     --  This function increments the Serial_Number field for the current unit
!    --  up to SN if it is initially lower and does nothing otherwise. This is
!    --  used in situations where one path of control increments serial numbers
!    --  and the other path does not and it is important to keep serial numbers
!    --  synchronized in the two cases (e.g. when the references in a package
!    --  and a client must be kept consistent).
  
     procedure Unlock;
     --  Unlock internal tables, in cases where the back end needs to modify them
*************** private
*** 926,932 ****
     --  The following table records a mapping between a name and the entry in
     --  the units table whose Unit_Name is this name. It is used to speed up
     --  the Is_Loaded function, whose original implementation (linear search)
!    --  could account for 2% of the time spent in the front end. Note that, in
     --  the case of source files containing multiple units, the units table may
     --  temporarily contain two entries with the same Unit_Name during parsing,
     --  which means that the mapping must be to the first entry in the table.
--- 926,934 ----
     --  The following table records a mapping between a name and the entry in
     --  the units table whose Unit_Name is this name. It is used to speed up
     --  the Is_Loaded function, whose original implementation (linear search)
!    --  could account for 2% of the time spent in the front end. When the unit
!    --  is an instance of a generic, the unit might get duplicated in the unit
!    --  table - see Make_Instance_Unit for more information. Note that, in
     --  the case of source files containing multiple units, the units table may
     --  temporarily contain two entries with the same Unit_Name during parsing,
     --  which means that the mapping must be to the first entry in the table.
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-astaco.adb gcc-12.1.0/gcc/ada/libgnarl/a-astaco.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-astaco.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-astaco.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-dispat.adb gcc-12.1.0/gcc/ada/libgnarl/a-dispat.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-dispat.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-dispat.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2015-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2015-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-dynpri.adb gcc-12.1.0/gcc/ada/libgnarl/a-dynpri.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-dynpri.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-dynpri.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-etgrbu.ads gcc-12.1.0/gcc/ada/libgnarl/a-etgrbu.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-etgrbu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-etgrbu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2015-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2015-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-exetim__darwin.adb gcc-12.1.0/gcc/ada/libgnarl/a-exetim__darwin.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-exetim__darwin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-exetim__darwin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2007-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-exetim__default.ads gcc-12.1.0/gcc/ada/libgnarl/a-exetim__default.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-exetim__default.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-exetim__default.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2007-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2007-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-exetim__mingw.adb gcc-12.1.0/gcc/ada/libgnarl/a-exetim__mingw.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-exetim__mingw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-exetim__mingw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2007-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-exetim__mingw.ads gcc-12.1.0/gcc/ada/libgnarl/a-exetim__mingw.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-exetim__mingw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-exetim__mingw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-exetim__posix.adb gcc-12.1.0/gcc/ada/libgnarl/a-exetim__posix.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-exetim__posix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-exetim__posix.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2007-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-interr.adb gcc-12.1.0/gcc/ada/libgnarl/a-interr.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-interr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-interr.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-interr.ads gcc-12.1.0/gcc/ada/libgnarl/a-interr.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-interr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-interr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__aix.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__aix.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__aix.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__aix.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__darwin.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__darwin.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__darwin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__darwin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__dragonfly.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__dragonfly.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__dragonfly.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__dragonfly.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__dummy.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__dummy.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__dummy.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__dummy.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                           (No Tasking Version)                           --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                           (No Tasking Version)                           --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__freebsd.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__freebsd.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__freebsd.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__freebsd.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__hpux.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__hpux.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__hpux.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__hpux.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__linux.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__linux.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__linux.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__linux.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__lynxos.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__lynxos.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__lynxos.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__lynxos.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__mingw.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__mingw.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__mingw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__mingw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__qnx.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__qnx.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__qnx.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__qnx.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__rtems.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__rtems.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__rtems.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__rtems.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 1991-2022, 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- --
***************
*** 34,114 ****
  ------------------------------------------------------------------------------
  
  --  This is a RTEMS version of this package
- --
- --  The following signals are reserved by the run time:
- --
- --  SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGTRAP, SIGABRT, SIGINT,
- --  SIGALRM, SIGEMT, SIGKILL
- --
- --  The pragma Unreserve_All_Interrupts affects the following signal(s):
- --
- --  SIGINT: made available for Ada handlers
- 
- --  This target-dependent package spec contains names of interrupts
- --  supported by the local system.
  
  with System.OS_Interface;
- --  used for names of interrupts
  
  package Ada.Interrupts.Names is
  
!    --  Beware that the mapping of names to signals may be
!    --  many-to-one.  There may be aliases.  Also, for all
!    --  signal names that are not supported on the current system
!    --  the value of the corresponding constant will be zero.
! 
!    SIGHUP : constant Interrupt_ID :=
!      System.OS_Interface.SIGHUP;      --  hangup
! 
!    SIGINT : constant Interrupt_ID :=
!      System.OS_Interface.SIGINT;      --  interrupt (rubout)
! 
!    SIGQUIT : constant Interrupt_ID :=
!      System.OS_Interface.SIGQUIT;     --  quit (ASCD FS)
! 
!    SIGILL : constant Interrupt_ID :=
!      System.OS_Interface.SIGILL;      --  illegal instruction (not reset)
! 
!    SIGTRAP : constant Interrupt_ID :=
!      System.OS_Interface.SIGTRAP;     --  trace trap (not reset)
! 
!    SIGIOT : constant Interrupt_ID :=
!      System.OS_Interface.SIGIOT;      --  IOT instruction
! 
!    SIGABRT : constant Interrupt_ID := --  used by abort,
!      System.OS_Interface.SIGABRT;     --  replace SIGIOT in the  future
! 
!    SIGEMT : constant Interrupt_ID :=
!      System.OS_Interface.SIGEMT;      --  EMT instruction
! 
!    SIGFPE : constant Interrupt_ID :=
!      System.OS_Interface.SIGFPE;      --  floating point exception
! 
!    SIGKILL : constant Interrupt_ID :=
!      System.OS_Interface.SIGKILL;     --  kill (cannot be caught or ignored)
! 
!    SIGBUS : constant Interrupt_ID :=
!      System.OS_Interface.SIGBUS;      --  bus error
! 
!    SIGSEGV : constant Interrupt_ID :=
!      System.OS_Interface.SIGSEGV;     --  segmentation violation
! 
!    SIGSYS : constant Interrupt_ID :=
!      System.OS_Interface.SIGSYS;      --  bad argument to system call
! 
!    SIGPIPE : constant Interrupt_ID := --  write on a pipe with
!      System.OS_Interface.SIGPIPE;     --  no one to read it
! 
!    SIGALRM : constant Interrupt_ID :=
!      System.OS_Interface.SIGALRM;     --  alarm clock
! 
!    SIGTERM : constant Interrupt_ID :=
!      System.OS_Interface.SIGTERM;     --  software termination signal from kill
  
!    SIGUSR1 : constant Interrupt_ID :=
!      System.OS_Interface.SIGUSR1;     --  user defined signal 1
  
!    SIGUSR2 : constant Interrupt_ID :=
!      System.OS_Interface.SIGUSR2;     --  user defined signal 2
  
  end Ada.Interrupts.Names;
--- 34,50 ----
  ------------------------------------------------------------------------------
  
  --  This is a RTEMS version of this package
  
  with System.OS_Interface;
  
  package Ada.Interrupts.Names is
  
!    --  All identifiers in this unit are implementation defined
  
!    pragma Implementation_Defined;
  
!    subtype Hardware_Interrupts is Interrupt_ID
!      range Interrupt_ID'First .. System.OS_Interface.Max_HW_Interrupt;
!    --  Range of values that can be used for hardware interrupts
  
  end Ada.Interrupts.Names;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__solaris.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__solaris.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__solaris.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__solaris.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-intnam__vxworks.ads gcc-12.1.0/gcc/ada/libgnarl/a-intnam__vxworks.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-intnam__vxworks.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-intnam__vxworks.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-reatim.adb gcc-12.1.0/gcc/ada/libgnarl/a-reatim.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-reatim.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-reatim.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-reatim.ads gcc-12.1.0/gcc/ada/libgnarl/a-reatim.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-reatim.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-reatim.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-retide.adb gcc-12.1.0/gcc/ada/libgnarl/a-retide.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-retide.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-retide.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-retide.ads gcc-12.1.0/gcc/ada/libgnarl/a-retide.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-retide.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-retide.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-rttiev.adb gcc-12.1.0/gcc/ada/libgnarl/a-rttiev.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-rttiev.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-rttiev.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2005-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-rttiev.ads gcc-12.1.0/gcc/ada/libgnarl/a-rttiev.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-rttiev.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-rttiev.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2005-2020, Free Software Foundation, Inc.        --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2005-2022, Free Software Foundation, Inc.        --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-synbar.adb gcc-12.1.0/gcc/ada/libgnarl/a-synbar.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-synbar.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-synbar.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-synbar.ads gcc-12.1.0/gcc/ada/libgnarl/a-synbar.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-synbar.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-synbar.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-synbar__posix.adb gcc-12.1.0/gcc/ada/libgnarl/a-synbar__posix.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-synbar__posix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-synbar__posix.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-synbar__posix.ads gcc-12.1.0/gcc/ada/libgnarl/a-synbar__posix.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-synbar__posix.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-synbar__posix.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-sytaco.adb gcc-12.1.0/gcc/ada/libgnarl/a-sytaco.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-sytaco.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-sytaco.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-sytaco.ads gcc-12.1.0/gcc/ada/libgnarl/a-sytaco.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-sytaco.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-sytaco.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-tasatt.adb gcc-12.1.0/gcc/ada/libgnarl/a-tasatt.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-tasatt.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-tasatt.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2014-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-tasatt.ads gcc-12.1.0/gcc/ada/libgnarl/a-tasatt.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-tasatt.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-tasatt.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2014-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2014-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-taside.adb gcc-12.1.0/gcc/ada/libgnarl/a-taside.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-taside.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-taside.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-taside.ads gcc-12.1.0/gcc/ada/libgnarl/a-taside.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-taside.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-taside.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** is
*** 92,98 ****
--- 92,100 ----
  
     function Activation_Is_Complete (T : Task_Id) return Boolean with
       Volatile_Function,
+      Pre    => T /= Null_Task_Id,
       Global => Tasking_State;
+    pragma Inline (Activation_Is_Complete);
  
  private
     pragma SPARK_Mode (Off);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-tasini.adb gcc-12.1.0/gcc/ada/libgnarl/a-tasini.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-tasini.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-tasini.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --             Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --             Copyright (C) 2020-2022, 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- --
***************
*** 26,38 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with Ada.Unchecked_Conversion;
- with System.Tasking;
- 
  package body Ada.Task_Initialization is
  
!    function To_STIH is new Ada.Unchecked_Conversion
!      (Initialization_Handler, System.Tasking.Initialization_Handler);
  
     --------------------------------
     -- Set_Initialization_Handler --
--- 26,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
  package body Ada.Task_Initialization is
  
!    Global_Initialization_Handler : Initialization_Handler := null;
!    pragma Atomic (Global_Initialization_Handler);
!    pragma Export (Ada, Global_Initialization_Handler,
!                   "__gnat_global_initialization_handler");
!    --  Global handler called when each task initializes.
  
     --------------------------------
     -- Set_Initialization_Handler --
*************** package body Ada.Task_Initialization is
*** 40,46 ****
  
     procedure Set_Initialization_Handler (Handler : Initialization_Handler) is
     begin
!       System.Tasking.Global_Initialization_Handler := To_STIH (Handler);
     end Set_Initialization_Handler;
  
  end Ada.Task_Initialization;
--- 40,46 ----
  
     procedure Set_Initialization_Handler (Handler : Initialization_Handler) is
     begin
!       Global_Initialization_Handler := Handler;
     end Set_Initialization_Handler;
  
  end Ada.Task_Initialization;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-tasini.ads gcc-12.1.0/gcc/ada/libgnarl/a-tasini.ads
*** gcc-11.3.0/gcc/ada/libgnarl/a-tasini.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-tasini.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2020-2022, 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- --
***************
*** 30,41 ****
  --  when tasks start.
  
  package Ada.Task_Initialization is
!    pragma Preelaborate (Task_Initialization);
  
     type Initialization_Handler is access procedure;
  
     procedure Set_Initialization_Handler (Handler : Initialization_Handler);
!    --  Set the global task initialization handler to Handler
  
  private
     pragma Favor_Top_Level (Initialization_Handler);
--- 30,46 ----
  --  when tasks start.
  
  package Ada.Task_Initialization is
!    pragma Preelaborate;
!    pragma No_Elaboration_Code_All;
  
     type Initialization_Handler is access procedure;
  
     procedure Set_Initialization_Handler (Handler : Initialization_Handler);
!    --  Set the global task initialization handler to Handler.
!    --  Note that only tasks created after this procedure is called will trigger
!    --  a call to Handler. You can use Ada's elaboration rules and pragma
!    --  Elaborate_All, or the pragma Linker_Constructor to ensure this
!    --  procedure is called early.
  
  private
     pragma Favor_Top_Level (Initialization_Handler);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/a-taster.adb gcc-12.1.0/gcc/ada/libgnarl/a-taster.adb
*** gcc-11.3.0/gcc/ada/libgnarl/a-taster.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/a-taster.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/g-boubuf.adb gcc-12.1.0/gcc/ada/libgnarl/g-boubuf.adb
*** gcc-11.3.0/gcc/ada/libgnarl/g-boubuf.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/g-boubuf.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/g-boubuf.ads gcc-12.1.0/gcc/ada/libgnarl/g-boubuf.ads
*** gcc-11.3.0/gcc/ada/libgnarl/g-boubuf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/g-boubuf.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/g-boumai.ads gcc-12.1.0/gcc/ada/libgnarl/g-boumai.ads
*** gcc-11.3.0/gcc/ada/libgnarl/g-boumai.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/g-boumai.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/g-semaph.adb gcc-12.1.0/gcc/ada/libgnarl/g-semaph.adb
*** gcc-11.3.0/gcc/ada/libgnarl/g-semaph.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/g-semaph.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/g-semaph.ads gcc-12.1.0/gcc/ada/libgnarl/g-semaph.ads
*** gcc-11.3.0/gcc/ada/libgnarl/g-semaph.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/g-semaph.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/g-signal.adb gcc-12.1.0/gcc/ada/libgnarl/g-signal.adb
*** gcc-11.3.0/gcc/ada/libgnarl/g-signal.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/g-signal.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/g-signal.ads gcc-12.1.0/gcc/ada/libgnarl/g-signal.ads
*** gcc-11.3.0/gcc/ada/libgnarl/g-signal.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/g-signal.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/g-tastus.ads gcc-12.1.0/gcc/ada/libgnarl/g-tastus.ads
*** gcc-11.3.0/gcc/ada/libgnarl/g-tastus.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/g-tastus.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/g-thread.adb gcc-12.1.0/gcc/ada/libgnarl/g-thread.adb
*** gcc-11.3.0/gcc/ada/libgnarl/g-thread.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/g-thread.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                    Copyright (C) 1998-2020, AdaCore                      --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                    Copyright (C) 1998-2022, AdaCore                      --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/g-thread.ads gcc-12.1.0/gcc/ada/libgnarl/g-thread.ads
*** gcc-11.3.0/gcc/ada/libgnarl/g-thread.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/g-thread.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/i-vxinco.adb gcc-12.1.0/gcc/ada/libgnarl/i-vxinco.adb
*** gcc-11.3.0/gcc/ada/libgnarl/i-vxinco.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/i-vxinco.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --                        Copyright (C) 2016-2020, AdaCore                  --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --                        Copyright (C) 2016-2022, AdaCore                  --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/i-vxinco.ads gcc-12.1.0/gcc/ada/libgnarl/i-vxinco.ads
*** gcc-11.3.0/gcc/ada/libgnarl/i-vxinco.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/i-vxinco.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --                        Copyright (C) 2016-2020, AdaCore                  --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --                        Copyright (C) 2016-2022, AdaCore                  --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-inmaop.ads gcc-12.1.0/gcc/ada/libgnarl/s-inmaop.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-inmaop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-inmaop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-inmaop__dummy.adb gcc-12.1.0/gcc/ada/libgnarl/s-inmaop__dummy.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-inmaop__dummy.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-inmaop__dummy.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-inmaop__hwint.adb gcc-12.1.0/gcc/ada/libgnarl/s-inmaop__hwint.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-inmaop__hwint.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnarl/s-inmaop__hwint.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,262 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                  GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                --
+ --                                                                          --
+ --                   SYSTEM.INTERRUPT_MANAGEMENT.OPERATIONS                 --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --             Copyright (C) 1991-2017, Florida State University            --
+ --                     Copyright (C) 1995-2022, AdaCore                     --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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 a hardware interrupt version of this package. Many operations are
+ --  null as this package supports the use of Ada interrupt handling facilities
+ --  for signals, while those facilities are used for hardware interrupts on
+ --  these targets.
+ 
+ with Ada.Exceptions;
+ 
+ with Interfaces.C;
+ 
+ with System.OS_Interface;
+ 
+ package body System.Interrupt_Management.Operations is
+ 
+    use Ada.Exceptions;
+    use Interfaces.C;
+    use System.OS_Interface;
+ 
+    ----------------------------
+    -- Thread_Block_Interrupt --
+    ----------------------------
+ 
+    procedure Thread_Block_Interrupt
+      (Interrupt : Interrupt_ID)
+    is
+       pragma Unreferenced (Interrupt);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Thread_Block_Interrupt unimplemented");
+    end Thread_Block_Interrupt;
+ 
+    ------------------------------
+    -- Thread_Unblock_Interrupt --
+    ------------------------------
+ 
+    procedure Thread_Unblock_Interrupt
+      (Interrupt : Interrupt_ID)
+    is
+       pragma Unreferenced (Interrupt);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Thread_Unblock_Interrupt unimplemented");
+    end Thread_Unblock_Interrupt;
+ 
+    ------------------------
+    -- Set_Interrupt_Mask --
+    ------------------------
+ 
+    procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask) is
+       pragma Unreferenced (Mask);
+    begin
+       null;
+    end Set_Interrupt_Mask;
+ 
+    procedure Set_Interrupt_Mask
+      (Mask  : access Interrupt_Mask;
+       OMask : access Interrupt_Mask)
+    is
+       pragma Unreferenced (Mask, OMask);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Set_Interrupt_Mask unimplemented");
+    end Set_Interrupt_Mask;
+ 
+    ------------------------
+    -- Get_Interrupt_Mask --
+    ------------------------
+ 
+    procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask) is
+       pragma Unreferenced (Mask);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Get_Interrupt_Mask unimplemented");
+    end Get_Interrupt_Mask;
+ 
+    --------------------
+    -- Interrupt_Wait --
+    --------------------
+ 
+    function Interrupt_Wait
+      (Mask : access Interrupt_Mask) return Interrupt_ID
+    is
+       pragma Unreferenced (Mask);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Interrupt_Wait unimplemented");
+       return 0;
+    end Interrupt_Wait;
+ 
+    ----------------------------
+    -- Install_Default_Action --
+    ----------------------------
+ 
+    procedure Install_Default_Action (Interrupt : Interrupt_ID) is
+       pragma Unreferenced (Interrupt);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Install_Default_Action unimplemented");
+    end Install_Default_Action;
+ 
+    ---------------------------
+    -- Install_Ignore_Action --
+    ---------------------------
+ 
+    procedure Install_Ignore_Action (Interrupt : Interrupt_ID) is
+       pragma Unreferenced (Interrupt);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Install_Ignore_Action unimplemented");
+    end Install_Ignore_Action;
+ 
+    -------------------------
+    -- Fill_Interrupt_Mask --
+    -------------------------
+ 
+    procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask) is
+       pragma Unreferenced (Mask);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Fill_Interrupt_Mask unimplemented");
+    end Fill_Interrupt_Mask;
+ 
+    --------------------------
+    -- Empty_Interrupt_Mask --
+    --------------------------
+ 
+    procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask) is
+       pragma Unreferenced (Mask);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Empty_Interrupt_Mask unimplemented");
+    end Empty_Interrupt_Mask;
+ 
+    ---------------------------
+    -- Add_To_Interrupt_Mask --
+    ---------------------------
+ 
+    procedure Add_To_Interrupt_Mask
+      (Mask      : access Interrupt_Mask;
+       Interrupt : Interrupt_ID)
+    is
+       pragma Unreferenced (Mask, Interrupt);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Add_To_Interrupt_Mask unimplemented");
+    end Add_To_Interrupt_Mask;
+ 
+    --------------------------------
+    -- Delete_From_Interrupt_Mask --
+    --------------------------------
+ 
+    procedure Delete_From_Interrupt_Mask
+      (Mask      : access Interrupt_Mask;
+       Interrupt : Interrupt_ID)
+    is
+       pragma Unreferenced (Mask, Interrupt);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Delete_From_Interrupt_Mask unimplemented");
+    end Delete_From_Interrupt_Mask;
+ 
+    ---------------
+    -- Is_Member --
+    ---------------
+ 
+    function Is_Member
+      (Mask      : access Interrupt_Mask;
+       Interrupt : Interrupt_ID) return Boolean
+    is
+       pragma Unreferenced (Mask, Interrupt);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Is_Member unimplemented");
+       return False;
+    end Is_Member;
+ 
+    -------------------------
+    -- Copy_Interrupt_Mask --
+    -------------------------
+ 
+    procedure Copy_Interrupt_Mask
+      (X : out Interrupt_Mask;
+       Y : Interrupt_Mask) is
+       pragma Unreferenced (X, Y);
+    begin
+       Raise_Exception
+         (Program_Error'Identity,
+          "Copy_Interrupt_Mask unimplemented");
+    end Copy_Interrupt_Mask;
+ 
+    ----------------------------
+    -- Interrupt_Self_Process --
+    ----------------------------
+ 
+    procedure Interrupt_Self_Process (Interrupt : Interrupt_ID) is
+       Result : Interfaces.C.int;
+    begin
+       Result := kill (getpid, Signal (Interrupt));
+       pragma Assert (Result = 0);
+    end Interrupt_Self_Process;
+ 
+    --------------------------
+    -- Setup_Interrupt_Mask --
+    --------------------------
+ 
+    procedure Setup_Interrupt_Mask is
+    begin
+       --  Nothing to be done. Ada interrupt facilities on VxWorks do not use
+       --  signals but hardware interrupts. Therefore, interrupt management does
+       --  not need anything related to signal masking. Note that this procedure
+       --  cannot raise an exception (as some others in this package) because
+       --  the generic implementation of the Timer_Server and timing events make
+       --  explicit calls to this routine to make ensure proper signal masking
+       --  on targets needed that.
+ 
+       null;
+    end Setup_Interrupt_Mask;
+ 
+ end System.Interrupt_Management.Operations;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-inmaop__posix.adb gcc-12.1.0/gcc/ada/libgnarl/s-inmaop__posix.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-inmaop__posix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-inmaop__posix.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-inmaop__vxworks.adb gcc-12.1.0/gcc/ada/libgnarl/s-inmaop__vxworks.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-inmaop__vxworks.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-inmaop__vxworks.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,261 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                  GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                --
- --                                                                          --
- --                   SYSTEM.INTERRUPT_MANAGEMENT.OPERATIONS                 --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --             Copyright (C) 1991-2017, Florida State University            --
- --                     Copyright (C) 1995-2020, AdaCore                     --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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 a VxWorks version of this package. Many operations are null as this
- --  package supports the use of Ada interrupt handling facilities for signals,
- --  while those facilities are used for hardware interrupts on these targets.
- 
- with Ada.Exceptions;
- 
- with Interfaces.C;
- 
- with System.OS_Interface;
- 
- package body System.Interrupt_Management.Operations is
- 
-    use Ada.Exceptions;
-    use Interfaces.C;
-    use System.OS_Interface;
- 
-    ----------------------------
-    -- Thread_Block_Interrupt --
-    ----------------------------
- 
-    procedure Thread_Block_Interrupt
-      (Interrupt : Interrupt_ID)
-    is
-       pragma Unreferenced (Interrupt);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Thread_Block_Interrupt unimplemented");
-    end Thread_Block_Interrupt;
- 
-    ------------------------------
-    -- Thread_Unblock_Interrupt --
-    ------------------------------
- 
-    procedure Thread_Unblock_Interrupt
-      (Interrupt : Interrupt_ID)
-    is
-       pragma Unreferenced (Interrupt);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Thread_Unblock_Interrupt unimplemented");
-    end Thread_Unblock_Interrupt;
- 
-    ------------------------
-    -- Set_Interrupt_Mask --
-    ------------------------
- 
-    procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask) is
-       pragma Unreferenced (Mask);
-    begin
-       null;
-    end Set_Interrupt_Mask;
- 
-    procedure Set_Interrupt_Mask
-      (Mask  : access Interrupt_Mask;
-       OMask : access Interrupt_Mask)
-    is
-       pragma Unreferenced (Mask, OMask);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Set_Interrupt_Mask unimplemented");
-    end Set_Interrupt_Mask;
- 
-    ------------------------
-    -- Get_Interrupt_Mask --
-    ------------------------
- 
-    procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask) is
-       pragma Unreferenced (Mask);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Get_Interrupt_Mask unimplemented");
-    end Get_Interrupt_Mask;
- 
-    --------------------
-    -- Interrupt_Wait --
-    --------------------
- 
-    function Interrupt_Wait
-      (Mask : access Interrupt_Mask) return Interrupt_ID
-    is
-       pragma Unreferenced (Mask);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Interrupt_Wait unimplemented");
-       return 0;
-    end Interrupt_Wait;
- 
-    ----------------------------
-    -- Install_Default_Action --
-    ----------------------------
- 
-    procedure Install_Default_Action (Interrupt : Interrupt_ID) is
-       pragma Unreferenced (Interrupt);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Install_Default_Action unimplemented");
-    end Install_Default_Action;
- 
-    ---------------------------
-    -- Install_Ignore_Action --
-    ---------------------------
- 
-    procedure Install_Ignore_Action (Interrupt : Interrupt_ID) is
-       pragma Unreferenced (Interrupt);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Install_Ignore_Action unimplemented");
-    end Install_Ignore_Action;
- 
-    -------------------------
-    -- Fill_Interrupt_Mask --
-    -------------------------
- 
-    procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask) is
-       pragma Unreferenced (Mask);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Fill_Interrupt_Mask unimplemented");
-    end Fill_Interrupt_Mask;
- 
-    --------------------------
-    -- Empty_Interrupt_Mask --
-    --------------------------
- 
-    procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask) is
-       pragma Unreferenced (Mask);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Empty_Interrupt_Mask unimplemented");
-    end Empty_Interrupt_Mask;
- 
-    ---------------------------
-    -- Add_To_Interrupt_Mask --
-    ---------------------------
- 
-    procedure Add_To_Interrupt_Mask
-      (Mask      : access Interrupt_Mask;
-       Interrupt : Interrupt_ID)
-    is
-       pragma Unreferenced (Mask, Interrupt);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Add_To_Interrupt_Mask unimplemented");
-    end Add_To_Interrupt_Mask;
- 
-    --------------------------------
-    -- Delete_From_Interrupt_Mask --
-    --------------------------------
- 
-    procedure Delete_From_Interrupt_Mask
-      (Mask      : access Interrupt_Mask;
-       Interrupt : Interrupt_ID)
-    is
-       pragma Unreferenced (Mask, Interrupt);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Delete_From_Interrupt_Mask unimplemented");
-    end Delete_From_Interrupt_Mask;
- 
-    ---------------
-    -- Is_Member --
-    ---------------
- 
-    function Is_Member
-      (Mask      : access Interrupt_Mask;
-       Interrupt : Interrupt_ID) return Boolean
-    is
-       pragma Unreferenced (Mask, Interrupt);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Is_Member unimplemented");
-       return False;
-    end Is_Member;
- 
-    -------------------------
-    -- Copy_Interrupt_Mask --
-    -------------------------
- 
-    procedure Copy_Interrupt_Mask
-      (X : out Interrupt_Mask;
-       Y : Interrupt_Mask) is
-       pragma Unreferenced (X, Y);
-    begin
-       Raise_Exception
-         (Program_Error'Identity,
-          "Copy_Interrupt_Mask unimplemented");
-    end Copy_Interrupt_Mask;
- 
-    ----------------------------
-    -- Interrupt_Self_Process --
-    ----------------------------
- 
-    procedure Interrupt_Self_Process (Interrupt : Interrupt_ID) is
-       Result : Interfaces.C.int;
-    begin
-       Result := kill (getpid, Signal (Interrupt));
-       pragma Assert (Result = 0);
-    end Interrupt_Self_Process;
- 
-    --------------------------
-    -- Setup_Interrupt_Mask --
-    --------------------------
- 
-    procedure Setup_Interrupt_Mask is
-    begin
-       --  Nothing to be done. Ada interrupt facilities on VxWorks do not use
-       --  signals but hardware interrupts. Therefore, interrupt management does
-       --  not need anything related to signal masking. Note that this procedure
-       --  cannot raise an exception (as some others in this package) because
-       --  the generic implementation of the Timer_Server and timing events make
-       --  explicit calls to this routine to make ensure proper signal masking
-       --  on targets needed that.
- 
-       null;
-    end Setup_Interrupt_Mask;
- 
- end System.Interrupt_Management.Operations;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-interr.adb gcc-12.1.0/gcc/ada/libgnarl/s-interr.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-interr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-interr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
*************** package body System.Interrupts is
*** 159,165 ****
     end record;
  
     User_Handler : array (Interrupt_ID'Range) of Handler_Assoc :=
!                     (others => (null, Static => False));
     pragma Volatile_Components (User_Handler);
     --  Holds the protected procedure handler (if any) and its Static
     --  information for each interrupt. A handler is a Static one if it is
--- 159,165 ----
     end record;
  
     User_Handler : array (Interrupt_ID'Range) of Handler_Assoc :=
!                     [others => (null, Static => False)];
     pragma Volatile_Components (User_Handler);
     --  Holds the protected procedure handler (if any) and its Static
     --  information for each interrupt. A handler is a Static one if it is
*************** package body System.Interrupts is
*** 167,193 ****
     --  not static)
  
     User_Entry : array (Interrupt_ID'Range) of Entry_Assoc :=
!                   (others => (T => Null_Task, E => Null_Task_Entry));
     pragma Volatile_Components (User_Entry);
     --  Holds the task and entry index (if any) for each interrupt
  
!    Blocked : array (Interrupt_ID'Range) of Boolean := (others => False);
     pragma Atomic_Components (Blocked);
     --  True iff the corresponding interrupt is blocked in the process level
  
!    Ignored : array (Interrupt_ID'Range) of Boolean := (others => False);
     pragma Atomic_Components (Ignored);
     --  True iff the corresponding interrupt is blocked in the process level
  
     Last_Unblocker :
!      array (Interrupt_ID'Range) of Task_Id := (others => Null_Task);
     pragma Atomic_Components (Last_Unblocker);
     --  Holds the ID of the last Task which Unblocked this Interrupt. It
     --  contains Null_Task if no tasks have ever requested the Unblocking
     --  operation or the Interrupt is currently Blocked.
  
     Server_ID : array (Interrupt_ID'Range) of Task_Id :=
!                  (others => Null_Task);
     pragma Atomic_Components (Server_ID);
     --  Holds the Task_Id of the Server_Task for each interrupt. Task_Id is
     --  needed to accomplish locking per Interrupt base. Also is needed to
--- 167,193 ----
     --  not static)
  
     User_Entry : array (Interrupt_ID'Range) of Entry_Assoc :=
!                   [others => (T => Null_Task, E => Null_Task_Entry)];
     pragma Volatile_Components (User_Entry);
     --  Holds the task and entry index (if any) for each interrupt
  
!    Blocked : array (Interrupt_ID'Range) of Boolean := [others => False];
     pragma Atomic_Components (Blocked);
     --  True iff the corresponding interrupt is blocked in the process level
  
!    Ignored : array (Interrupt_ID'Range) of Boolean := [others => False];
     pragma Atomic_Components (Ignored);
     --  True iff the corresponding interrupt is blocked in the process level
  
     Last_Unblocker :
!      array (Interrupt_ID'Range) of Task_Id := [others => Null_Task];
     pragma Atomic_Components (Last_Unblocker);
     --  Holds the ID of the last Task which Unblocked this Interrupt. It
     --  contains Null_Task if no tasks have ever requested the Unblocking
     --  operation or the Interrupt is currently Blocked.
  
     Server_ID : array (Interrupt_ID'Range) of Task_Id :=
!                  [others => Null_Task];
     pragma Atomic_Components (Server_ID);
     --  Holds the Task_Id of the Server_Task for each interrupt. Task_Id is
     --  needed to accomplish locking per Interrupt base. Also is needed to
*************** package body System.Interrupts is
*** 473,479 ****
     ---------------------------------
  
     procedure Install_Restricted_Handlers
!      (Prio     : Any_Priority;
        Handlers : New_Handler_Array)
     is
        pragma Unreferenced (Prio);
--- 473,479 ----
     ---------------------------------
  
     procedure Install_Restricted_Handlers
!      (Prio     : Interrupt_Priority;
        Handlers : New_Handler_Array)
     is
        pragma Unreferenced (Prio);
*************** package body System.Interrupts is
*** 783,789 ****
                    null;
  
                 when others =>
!                   pragma Assert (False);
                    null;
              end case;
  
--- 783,789 ----
                    null;
  
                 when others =>
!                   pragma Assert (Standard.False);
                    null;
              end case;
  
*************** package body System.Interrupts is
*** 1228,1234 ****
              when X : others =>
                 System.IO.Put_Line ("Exception in Interrupt_Manager");
                 System.IO.Put_Line (Ada.Exceptions.Exception_Information (X));
!                pragma Assert (False);
           end;
        end loop;
     end Interrupt_Manager;
--- 1228,1234 ----
              when X : others =>
                 System.IO.Put_Line ("Exception in Interrupt_Manager");
                 System.IO.Put_Line (Ada.Exceptions.Exception_Information (X));
!                pragma Assert (Standard.False);
           end;
        end loop;
     end Interrupt_Manager;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-interr.ads gcc-12.1.0/gcc/ada/libgnarl/s-interr.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-interr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-interr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package System.Interrupts is
*** 267,273 ****
     --  the new static handlers.
  
     procedure Install_Restricted_Handlers
!      (Prio     : Any_Priority;
        Handlers : New_Handler_Array);
     --  Install the static Handlers for the given interrupts and do not
     --  store previously installed handlers. This procedure is used when
--- 267,273 ----
     --  the new static handlers.
  
     procedure Install_Restricted_Handlers
!      (Prio     : Interrupt_Priority;
        Handlers : New_Handler_Array);
     --  Install the static Handlers for the given interrupts and do not
     --  store previously installed handlers. This procedure is used when
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-interr__dummy.adb gcc-12.1.0/gcc/ada/libgnarl/s-interr__dummy.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-interr__dummy.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-interr__dummy.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package body System.Interrupts is
*** 188,194 ****
     ---------------------------------
  
     procedure Install_Restricted_Handlers
!      (Prio     : Any_Priority;
        Handlers : New_Handler_Array)
     is
     begin
--- 188,194 ----
     ---------------------------------
  
     procedure Install_Restricted_Handlers
!      (Prio     : Interrupt_Priority;
        Handlers : New_Handler_Array)
     is
     begin
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-interr__hwint.adb gcc-12.1.0/gcc/ada/libgnarl/s-interr__hwint.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-interr__hwint.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-interr__hwint.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
***************
*** 29,57 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Invariants:
! 
! --  All user-handlable signals are masked at all times in all tasks/threads
! --  except possibly for the Interrupt_Manager task.
! 
! --  When a user task wants to have the effect of masking/unmasking an signal,
! --  it must call Block_Interrupt/Unblock_Interrupt, which will have the effect
! --  of unmasking/masking the signal in the Interrupt_Manager task. These
! --  comments do not apply to vectored hardware interrupts, which may be masked
! --  or unmasked using routined interfaced to the relevant embedded RTOS system
! --  calls.
  
! --  Once we associate a Signal_Server_Task with an signal, the task never goes
! --  away, and we never remove the association. On the other hand, it is more
! --  convenient to terminate an associated Interrupt_Server_Task for a vectored
! --  hardware interrupt (since we use a binary semaphore for synchronization
! --  with the umbrella handler).
  
! --  There is no more than one signal per Signal_Server_Task and no more than
! --  one Signal_Server_Task per signal. The same relation holds for hardware
! --  interrupts and Interrupt_Server_Task's at any given time. That is, only
! --  one non-terminated Interrupt_Server_Task exists for a give interrupt at
! --  any time.
  
  --  Within this package, the lock L is used to protect the various status
  --  tables. If there is a Server_Task associated with a signal or interrupt,
--- 29,43 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This is reasonably generic version of this package, supporting vectored
! --  hardware interrupts using non-RTOS specific adapter routines which should
! --  easily implemented on any RTOS capable of supporting GNAT.
  
! --  Invariants:
  
! --  There is no more than one interrupt per Interrupt_Server_Task and no more
! --  than one Interrupt_Server_Task per interrupt. If an interrupt handler is
! --  detached, the corresponding Interrupt_Server_Task is terminated.
  
  --  Within this package, the lock L is used to protect the various status
  --  tables. If there is a Server_Task associated with a signal or interrupt,
***************
*** 59,68 ****
  --  status between Interrupt_Manager and Server_Task. Protection among service
  --  requests are ensured via user calls to the Interrupt_Manager entries.
  
- --  This is reasonably generic version of this package, supporting vectored
- --  hardware interrupts using non-RTOS specific adapter routines which should
- --  easily implemented on any RTOS capable of supporting GNAT.
- 
  with Ada.Unchecked_Conversion;
  with Ada.Task_Identification;
  
--- 45,50 ----
*************** package body System.Interrupts is
*** 151,163 ****
       (others => (null, Static => False));
     pragma Volatile_Components (User_Handler);
     --  Holds the protected procedure handler (if any) and its Static
!    --  information for each interrupt or signal. A handler is static iff it
     --  is specified through the pragma Attach_Handler.
  
     User_Entry : array (Interrupt_ID) of Entry_Assoc :=
                    (others => (T => Null_Task, E => Null_Task_Entry));
     pragma Volatile_Components (User_Entry);
!    --  Holds the task and entry index (if any) for each interrupt / signal
  
     --  Type and Head, Tail of the list containing Registered Interrupt
     --  Handlers. These definitions are used to register the handlers
--- 133,145 ----
       (others => (null, Static => False));
     pragma Volatile_Components (User_Handler);
     --  Holds the protected procedure handler (if any) and its Static
!    --  information for each interrupt. A handler is static if and only if it
     --  is specified through the pragma Attach_Handler.
  
     User_Entry : array (Interrupt_ID) of Entry_Assoc :=
                    (others => (T => Null_Task, E => Null_Task_Entry));
     pragma Volatile_Components (User_Entry);
!    --  Holds the task and entry index (if any) for each interrupt
  
     --  Type and Head, Tail of the list containing Registered Interrupt
     --  Handlers. These definitions are used to register the handlers
*************** package body System.Interrupts is
*** 478,484 ****
     ---------------------------------
  
     procedure Install_Restricted_Handlers
!       (Prio     : Any_Priority;
         Handlers : New_Handler_Array)
     is
        pragma Unreferenced (Prio);
--- 460,466 ----
     ---------------------------------
  
     procedure Install_Restricted_Handlers
!       (Prio     : Interrupt_Priority;
         Handlers : New_Handler_Array)
     is
        pragma Unreferenced (Prio);
*************** package body System.Interrupts is
*** 1023,1029 ****
                 null;
  
              when others =>
!                pragma Assert (False);
                 null;
           end;
        end loop;
--- 1005,1011 ----
                 null;
  
              when others =>
!                pragma Assert (Standard.False);
                 null;
           end;
        end loop;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-interr__sigaction.adb gcc-12.1.0/gcc/ada/libgnarl/s-interr__sigaction.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-interr__sigaction.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-interr__sigaction.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
*************** package body System.Interrupts is
*** 291,297 ****
     ---------------------------------
  
     procedure Install_Restricted_Handlers
!       (Prio     : Any_Priority;
         Handlers : New_Handler_Array)
     is
        pragma Unreferenced (Prio);
--- 291,297 ----
     ---------------------------------
  
     procedure Install_Restricted_Handlers
!       (Prio     : Interrupt_Priority;
         Handlers : New_Handler_Array)
     is
        pragma Unreferenced (Prio);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-interr__vxworks.adb gcc-12.1.0/gcc/ada/libgnarl/s-interr__vxworks.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-interr__vxworks.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-interr__vxworks.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
***************
*** 66,72 ****
  with Ada.Unchecked_Conversion;
  with Ada.Task_Identification;
  
- with Interfaces.C; use Interfaces.C;
  with System.OS_Interface; use System.OS_Interface;
  with System.Interrupt_Management;
  with System.Task_Primitives.Operations;
--- 66,71 ----
*************** with System.Tasking.Utilities;
*** 76,87 ****
--- 75,92 ----
  with System.Tasking.Rendezvous;
  pragma Elaborate_All (System.Tasking.Rendezvous);
  
+ with System.VxWorks.Ext;
+ 
  package body System.Interrupts is
  
     use Tasking;
  
     package POP renames System.Task_Primitives.Operations;
  
+    use type System.VxWorks.Ext.STATUS;
+    subtype STATUS is System.VxWorks.Ext.STATUS;
+    OK : constant STATUS := System.VxWorks.Ext.OK;
+ 
     function To_Ada is new Ada.Unchecked_Conversion
       (System.Tasking.Task_Id, Ada.Task_Identification.Task_Id);
  
*************** package body System.Interrupts is
*** 199,205 ****
     type Interrupt_Connector is access function
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return int;
     --  Profile must match VxWorks intConnect()
  
     Interrupt_Connect : Interrupt_Connector :=
--- 204,210 ----
     type Interrupt_Connector is access function
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return STATUS;
     --  Profile must match VxWorks intConnect()
  
     Interrupt_Connect : Interrupt_Connector :=
*************** package body System.Interrupts is
*** 494,500 ****
     ---------------------------------
  
     procedure Install_Restricted_Handlers
!       (Prio     : Any_Priority;
         Handlers : New_Handler_Array)
     is
        pragma Unreferenced (Prio);
--- 499,505 ----
     ---------------------------------
  
     procedure Install_Restricted_Handlers
!       (Prio     : Interrupt_Priority;
         Handlers : New_Handler_Array)
     is
        pragma Unreferenced (Prio);
*************** package body System.Interrupts is
*** 515,521 ****
        Vec : constant Interrupt_Vector :=
                Interrupt_Number_To_Vector (int (Interrupt));
  
!       Status : int;
  
     begin
        --  Only install umbrella handler when no Ada handler has already been
--- 520,526 ----
        Vec : constant Interrupt_Vector :=
                Interrupt_Number_To_Vector (int (Interrupt));
  
!       Result : STATUS;
  
     begin
        --  Only install umbrella handler when no Ada handler has already been
*************** package body System.Interrupts is
*** 525,533 ****
        --  number.
  
        if not Handler_Installed (Interrupt) then
!          Status :=
             Interrupt_Connect.all (Vec, Handler, System.Address (Interrupt));
!          pragma Assert (Status = 0);
  
           Handler_Installed (Interrupt) := True;
        end if;
--- 530,538 ----
        --  number.
  
        if not Handler_Installed (Interrupt) then
!          Result :=
             Interrupt_Connect.all (Vec, Handler, System.Address (Interrupt));
!          pragma Assert (Result = OK);
  
           Handler_Installed (Interrupt) := True;
        end if;
*************** package body System.Interrupts is
*** 646,656 ****
     procedure Notify_Interrupt (Param : System.Address) is
        Interrupt : constant Interrupt_ID := Interrupt_ID (Param);
        Id        : constant Binary_Semaphore_Id := Semaphore_ID_Map (Interrupt);
!       Status    : int;
     begin
        if Id /= 0 then
!          Status := Binary_Semaphore_Release (Id);
!          pragma Assert (Status = 0);
        end if;
     end Notify_Interrupt;
  
--- 651,661 ----
     procedure Notify_Interrupt (Param : System.Address) is
        Interrupt : constant Interrupt_ID := Interrupt_ID (Param);
        Id        : constant Binary_Semaphore_Id := Semaphore_ID_Map (Interrupt);
!       Result    : STATUS;
     begin
        if Id /= 0 then
!          Result := Binary_Semaphore_Release (Id);
!          pragma Assert (Result = OK);
        end if;
     end Notify_Interrupt;
  
*************** package body System.Interrupts is
*** 787,799 ****
        --------------------
  
        procedure Unbind_Handler (Interrupt : Interrupt_ID) is
!          Status : int;
  
        begin
           --  Flush server task off semaphore, allowing it to terminate
  
!          Status := Binary_Semaphore_Flush (Semaphore_ID_Map (Interrupt));
!          pragma Assert (Status = 0);
        end Unbind_Handler;
  
        --------------------------------
--- 792,804 ----
        --------------------
  
        procedure Unbind_Handler (Interrupt : Interrupt_ID) is
!          Result : STATUS;
  
        begin
           --  Flush server task off semaphore, allowing it to terminate
  
!          Result := Binary_Semaphore_Flush (Semaphore_ID_Map (Interrupt));
!          pragma Assert (Result = OK);
        end Unbind_Handler;
  
        --------------------------------
*************** package body System.Interrupts is
*** 1040,1046 ****
                 null;
  
              when others =>
!                pragma Assert (False);
                 null;
           end;
        end loop;
--- 1045,1051 ----
                 null;
  
              when others =>
!                pragma Assert (Standard.False);
                 null;
           end;
        end loop;
*************** package body System.Interrupts is
*** 1067,1073 ****
        Tmp_Handler     : Parameterless_Handler;
        Tmp_ID          : Task_Id;
        Tmp_Entry_Index : Task_Entry_Index;
!       Status          : int;
  
     begin
        Semaphore_ID_Map (Interrupt) := Int_Sema;
--- 1072,1078 ----
        Tmp_Handler     : Parameterless_Handler;
        Tmp_ID          : Task_Id;
        Tmp_Entry_Index : Task_Entry_Index;
!       Result          : STATUS;
  
     begin
        Semaphore_ID_Map (Interrupt) := Int_Sema;
*************** package body System.Interrupts is
*** 1076,1083 ****
           --  Pend on semaphore that will be triggered by the umbrella handler
           --  when the associated interrupt comes in.
  
!          Status := Binary_Semaphore_Obtain (Int_Sema);
!          pragma Assert (Status = 0);
  
           if User_Handler (Interrupt).H /= null then
  
--- 1081,1088 ----
           --  Pend on semaphore that will be triggered by the umbrella handler
           --  when the associated interrupt comes in.
  
!          Result := Binary_Semaphore_Obtain (Int_Sema);
!          pragma Assert (Result = OK);
  
           if User_Handler (Interrupt).H /= null then
  
*************** package body System.Interrupts is
*** 1109,1117 ****
  
              --  Delete the associated semaphore
  
!             Status := Binary_Semaphore_Delete (Int_Sema);
  
!             pragma Assert (Status = 0);
  
              --  Set status for the Interrupt_Manager
  
--- 1114,1122 ----
  
              --  Delete the associated semaphore
  
!             Result := Binary_Semaphore_Delete (Int_Sema);
  
!             pragma Assert (Result = OK);
  
              --  Set status for the Interrupt_Manager
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman.ads gcc-12.1.0/gcc/ada/libgnarl/s-intman.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package System.Interrupt_Management is
*** 74,80 ****
     --  The interrupt that is used to implement task abort if an interrupt is
     --  used for that purpose. This is one of the reserved interrupts.
  
!    Keep_Unmasked : Interrupt_Set := (others => False);
     --  Keep_Unmasked (I) is true iff the interrupt I is one that must be kept
     --  unmasked at all times, except (perhaps) for short critical sections.
     --  This includes interrupts that are mapped to exceptions (see
--- 74,80 ----
     --  The interrupt that is used to implement task abort if an interrupt is
     --  used for that purpose. This is one of the reserved interrupts.
  
!    Keep_Unmasked : Interrupt_Set := [others => False];
     --  Keep_Unmasked (I) is true iff the interrupt I is one that must be kept
     --  unmasked at all times, except (perhaps) for short critical sections.
     --  This includes interrupts that are mapped to exceptions (see
*************** package System.Interrupt_Management is
*** 83,89 ****
     --  reasons. Where interrupts are implemented as OS signals, and signal
     --  masking is per-task, the interrupt should be unmasked in ALL TASKS.
  
!    Reserve : Interrupt_Set := (others => False);
     --  Reserve (I) is true iff the interrupt I is one that cannot be permitted
     --  to be attached to a user handler. The possible reasons are many. For
     --  example, it may be mapped to an exception used to implement task abort,
--- 83,89 ----
     --  reasons. Where interrupts are implemented as OS signals, and signal
     --  masking is per-task, the interrupt should be unmasked in ALL TASKS.
  
!    Reserve : Interrupt_Set := [others => False];
     --  Reserve (I) is true iff the interrupt I is one that cannot be permitted
     --  to be attached to a user handler. The possible reasons are many. For
     --  example, it may be mapped to an exception used to implement task abort,
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman__android.adb gcc-12.1.0/gcc/ada/libgnarl/s-intman__android.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman__android.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman__android.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 2014-2022, 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- --
*************** package body System.Interrupt_Management
*** 68,74 ****
     Exception_Interrupts : constant Interrupt_List :=
       (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
  
!    Unreserve_All_Interrupts : Interfaces.C.int;
     pragma Import
       (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
  
--- 68,74 ----
     Exception_Interrupts : constant Interrupt_List :=
       (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
  
!    Unreserve_All_Interrupts : constant Interfaces.C.int;
     pragma Import
       (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman__dummy.adb gcc-12.1.0/gcc/ada/libgnarl/s-intman__dummy.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman__dummy.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman__dummy.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman__lynxos.adb gcc-12.1.0/gcc/ada/libgnarl/s-intman__lynxos.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman__lynxos.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman__lynxos.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body System.Interrupt_Management
*** 68,74 ****
     Exception_Interrupts : constant Interrupt_List :=
       (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
  
!    Unreserve_All_Interrupts : Interfaces.C.int;
     pragma Import
       (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
  
--- 68,74 ----
     Exception_Interrupts : constant Interrupt_List :=
       (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
  
!    Unreserve_All_Interrupts : constant Interfaces.C.int;
     pragma Import
       (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman__mingw.adb gcc-12.1.0/gcc/ada/libgnarl/s-intman__mingw.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman__mingw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman__mingw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman__posix.adb gcc-12.1.0/gcc/ada/libgnarl/s-intman__posix.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman__posix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman__posix.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body System.Interrupt_Management
*** 66,74 ****
  
     type Interrupt_List is array (Interrupt_ID range <>) of Interrupt_ID;
     Exception_Interrupts : constant Interrupt_List :=
!      (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
  
!    Unreserve_All_Interrupts : Interfaces.C.int;
     pragma Import
       (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
  
--- 66,74 ----
  
     type Interrupt_List is array (Interrupt_ID range <>) of Interrupt_ID;
     Exception_Interrupts : constant Interrupt_List :=
!      [SIGFPE, SIGILL, SIGSEGV, SIGBUS];
  
!    Unreserve_All_Interrupts : constant Interfaces.C.int;
     pragma Import
       (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
  
*************** package body System.Interrupt_Management
*** 206,213 ****
  
        act.sa_mask := Signal_Mask;
  
!       pragma Assert (Keep_Unmasked = (Interrupt_ID'Range => False));
!       pragma Assert (Reserve = (Interrupt_ID'Range => False));
  
        --  Process state of exception signals
  
--- 206,213 ----
  
        act.sa_mask := Signal_Mask;
  
!       pragma Assert (Keep_Unmasked = [Interrupt_ID'Range => False]);
!       pragma Assert (Reserve = [Interrupt_ID'Range => False]);
  
        --  Process state of exception signals
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman__qnx.adb gcc-12.1.0/gcc/ada/libgnarl/s-intman__qnx.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman__qnx.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman__qnx.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body System.Interrupt_Management
*** 68,74 ****
     Exception_Interrupts : constant Interrupt_List :=
       (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
  
!    Unreserve_All_Interrupts : Interfaces.C.int;
     pragma Import
       (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
  
--- 68,74 ----
     Exception_Interrupts : constant Interrupt_List :=
       (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
  
!    Unreserve_All_Interrupts : constant Interfaces.C.int;
     pragma Import
       (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman__rtems.adb gcc-12.1.0/gcc/ada/libgnarl/s-intman__rtems.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman__rtems.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman__rtems.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,93 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
+ --                                                                          --
+ --           S Y S T E M . I N T E R R U P T _ M A N A G E M E N T          --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1992-2022, 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 RTEMS version of this package
+ 
+ --  It is simpler than other versions because the Ada interrupt handling
+ --  mechanisms are used for hardware interrupts rather than signals.
+ 
+ package body System.Interrupt_Management is
+ 
+    use System.OS_Interface;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function State (Int : Interrupt_ID) return Character;
+    pragma Import (C, State, "__gnat_get_interrupt_state");
+    --  Get interrupt state. Defined in init.c The input argument is the
+    --  hardware interrupt number, and the result is one of the following:
+ 
+    Runtime : constant Character := 'r';
+    Default : constant Character := 's';
+    --    'n'   this interrupt not set by any Interrupt_State pragma
+    --    'u'   Interrupt_State pragma set state to User
+    --    'r'   Interrupt_State pragma set state to Runtime
+    --    's'   Interrupt_State pragma set state to System (use "default"
+    --           system handler)
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    Initialized : Boolean := False;
+    --  Set to True once Initialize is called, further calls have no effect
+ 
+    procedure Initialize is
+ 
+    begin
+       if Initialized then
+          return;
+       end if;
+ 
+       Initialized := True;
+ 
+       --  Set the signal used to signal an abort to another task as defined in
+       --  System.OS_Interface.
+ 
+       Abort_Task_Interrupt := SIGADAABORT;
+ 
+       --  Initialize hardware interrupt handling
+ 
+       pragma Assert (Reserve = (Interrupt_ID'Range => False));
+ 
+       --  Check all interrupts for state that requires keeping them reserved
+ 
+       for J in Interrupt_ID'Range loop
+          if State (J) = Default or else State (J) = Runtime then
+             Reserve (J) := True;
+          end if;
+       end loop;
+ 
+    end Initialize;
+ 
+ end System.Interrupt_Management;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman__rtems.ads gcc-12.1.0/gcc/ada/libgnarl/s-intman__rtems.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman__rtems.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman__rtems.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,99 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
+ --                                                                          --
+ --            S Y S T E M . I N T E R R U P T _ M A N A G E M E N T         --
+ --                                                                          --
+ --                                  S p e c                                 --
+ --                                                                          --
+ --          Copyright (C) 1992-2022, 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 RTEMS version of this package
+ 
+ --  This package encapsulates and centralizes information about all
+ --  uses of interrupts (or signals), including the target-dependent
+ --  mapping of interrupts (or signals) to exceptions.
+ 
+ --  Unlike the original design, System.Interrupt_Management can only
+ --  be used for tasking systems.
+ 
+ --  PLEASE DO NOT put any subprogram declarations with arguments of
+ --  type Interrupt_ID into the visible part of this package. The type
+ --  Interrupt_ID is used to derive the type in Ada.Interrupts, and
+ --  adding more operations to that type would be illegal according
+ --  to the Ada Reference Manual. This is the reason why the signals
+ --  sets are implemented using visible arrays rather than functions.
+ 
+ with System.OS_Interface;
+ 
+ with Interfaces.C;
+ 
+ package System.Interrupt_Management is
+    pragma Preelaborate;
+ 
+    type Interrupt_Mask is limited private;
+ 
+    type Interrupt_ID is new Interfaces.C.int
+      range 0 .. System.OS_Interface.Max_Interrupt;
+ 
+    type Interrupt_Set is array (Interrupt_ID) of Boolean;
+ 
+    subtype Signal_ID is Interrupt_ID range 0 .. System.OS_Interface.NSIG - 1;
+ 
+    type Signal_Set is array (Signal_ID) of Boolean;
+ 
+    --  The following objects serve as constants, but are initialized in the
+    --  body to aid portability. This permits us to use more portable names for
+    --  interrupts, where distinct names may map to the same interrupt ID
+    --  value.
+ 
+    --  For example, suppose SIGRARE is a signal that is not defined on all
+    --  systems, but is always reserved when it is defined. If we have the
+    --  convention that ID zero is not used for any "real" signals, and SIGRARE
+    --  = 0 when SIGRARE is not one of the locally supported signals, we can
+    --  write:
+    --     Reserved (SIGRARE) := True;
+    --  and the initialization code will be portable.
+ 
+    Abort_Task_Interrupt : Signal_ID;
+    --  The signal that is used to implement task abort if an interrupt is used
+    --  for that purpose. This is one of the reserved signals.
+ 
+    Reserve : Interrupt_Set := (others => False);
+    --  Reserve (I) is true iff the interrupt I is one that cannot be permitted
+    --  to be attached to a user handler. The possible reasons are many. For
+    --  example, it may be mapped to an exception used to implement task abort,
+    --  or used to implement time delays.
+ 
+    procedure Initialize;
+    --  Initialize the various variables defined in this package. This procedure
+    --  must be called before accessing any object from this package and can be
+    --  called multiple times (only the first call has any effect).
+ 
+ private
+    type Interrupt_Mask is new System.OS_Interface.sigset_t;
+    --  In some implementation Interrupt_Mask can be represented as a linked
+    --  list.
+ 
+ end System.Interrupt_Management;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman__solaris.adb gcc-12.1.0/gcc/ada/libgnarl/s-intman__solaris.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman__solaris.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman__solaris.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body System.Interrupt_Management
*** 47,53 ****
     Exception_Interrupts : constant Interrupt_List :=
       (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
  
!    Unreserve_All_Interrupts : Interfaces.C.int;
     pragma Import
       (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
  
--- 47,53 ----
     Exception_Interrupts : constant Interrupt_List :=
       (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
  
!    Unreserve_All_Interrupts : constant Interfaces.C.int;
     pragma Import
       (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman__susv3.adb gcc-12.1.0/gcc/ada/libgnarl/s-intman__susv3.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman__susv3.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman__susv3.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body System.Interrupt_Management
*** 56,62 ****
     use Interfaces.C;
     use System.OS_Interface;
  
!    Unreserve_All_Interrupts : Interfaces.C.int;
     pragma Import
       (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
  
--- 56,62 ----
     use Interfaces.C;
     use System.OS_Interface;
  
!    Unreserve_All_Interrupts : constant Interfaces.C.int;
     pragma Import
       (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts");
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman__vxworks.adb gcc-12.1.0/gcc/ada/libgnarl/s-intman__vxworks.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman__vxworks.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman__vxworks.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-intman__vxworks.ads gcc-12.1.0/gcc/ada/libgnarl/s-intman__vxworks.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-intman__vxworks.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-intman__vxworks.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-linux.ads gcc-12.1.0/gcc/ada/libgnarl/s-linux.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-linux.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-linux.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2008-2022, 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- --
***************
*** 36,41 ****
--- 36,42 ----
  --  Preelaborate. This package is designed to be a bottom-level (leaf) package
  
  with Interfaces.C;
+ with System.Parameters;
  
  package System.Linux is
     pragma Preelaborate;
*************** package System.Linux is
*** 46,52 ****
  
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    subtype time_t      is Interfaces.C.long;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
--- 47,54 ----
  
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!         .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-linux__alpha.ads gcc-12.1.0/gcc/ada/libgnarl/s-linux__alpha.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-linux__alpha.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-linux__alpha.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
***************
*** 36,41 ****
--- 36,42 ----
  --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
  
  with Interfaces.C;
+ with System.Parameters;
  
  package System.Linux is
     pragma Preelaborate;
*************** package System.Linux is
*** 46,52 ****
  
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    subtype time_t      is Interfaces.C.long;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
--- 47,54 ----
  
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-linux__android.ads gcc-12.1.0/gcc/ada/libgnarl/s-linux__android.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-linux__android.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-linux__android.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --            Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --            Copyright (C) 2014-2022, 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- --
***************
*** 36,41 ****
--- 36,42 ----
  --  Preelaborate. This package is designed to be a bottom-level (leaf) package
  
  with Interfaces.C;
+ with System.Parameters;
  
  package System.Linux is
     pragma Preelaborate;
*************** package System.Linux is
*** 46,52 ****
  
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    subtype time_t      is Interfaces.C.long;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
--- 47,54 ----
  
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-linux__hppa.ads gcc-12.1.0/gcc/ada/libgnarl/s-linux__hppa.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-linux__hppa.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-linux__hppa.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2008-2022, 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- --
***************
*** 36,41 ****
--- 36,42 ----
  --  Preelaborate. This package is designed to be a bottom-level (leaf) package.
  
  with Interfaces.C;
+ with System.Parameters;
  
  package System.Linux is
     pragma Preelaborate;
*************** package System.Linux is
*** 46,52 ****
  
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    subtype time_t      is Interfaces.C.long;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
--- 47,54 ----
  
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-linux__mips.ads gcc-12.1.0/gcc/ada/libgnarl/s-linux__mips.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-linux__mips.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-linux__mips.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2009-2022, 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- --
***************
*** 35,40 ****
--- 35,41 ----
  --  Preelaborate. This package is designed to be a bottom-level (leaf) package
  
  with Interfaces.C;
+ with System.Parameters;
  
  package System.Linux is
     pragma Preelaborate;
*************** package System.Linux is
*** 46,52 ****
     subtype int         is Interfaces.C.int;
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    subtype time_t      is Interfaces.C.long;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
--- 47,54 ----
     subtype int         is Interfaces.C.int;
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-linux__riscv.ads gcc-12.1.0/gcc/ada/libgnarl/s-linux__riscv.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-linux__riscv.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-linux__riscv.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2009-2022, 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- --
***************
*** 35,40 ****
--- 35,41 ----
  --  Preelaborate. This package is designed to be a bottom-level (leaf) package
  
  with Interfaces.C;
+ with System.Parameters;
  
  package System.Linux is
     pragma Preelaborate;
*************** package System.Linux is
*** 46,52 ****
     subtype int         is Interfaces.C.int;
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    subtype time_t      is Interfaces.C.long;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
--- 47,54 ----
     subtype int         is Interfaces.C.int;
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-linux__sparc.ads gcc-12.1.0/gcc/ada/libgnarl/s-linux__sparc.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-linux__sparc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-linux__sparc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2009-2022, 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- --
***************
*** 36,41 ****
--- 36,42 ----
  --  Preelaborate. This package is designed to be a bottom-level (leaf) package
  
  with Interfaces.C;
+ with System.Parameters;
  
  package System.Linux is
     pragma Preelaborate;
*************** package System.Linux is
*** 46,52 ****
  
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    subtype time_t      is Interfaces.C.long;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
--- 47,54 ----
  
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-linux__x32.ads gcc-12.1.0/gcc/ada/libgnarl/s-linux__x32.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-linux__x32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-linux__x32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2013-2020, Free Software Foundation, Inc.         --
  --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2013-2022, Free Software Foundation, Inc.         --
  --
  --                                                                          --
  -- GNARL is free software; you can  redistribute it  and/or modify it under --
***************
*** 38,43 ****
--- 38,45 ----
  
  with Interfaces.C;
  
+ with System.Parameters;
+ 
  package System.Linux is
     pragma Preelaborate;
  
*************** package System.Linux is
*** 46,57 ****
     ----------
  
     subtype suseconds_t is Long_Long_Integer;
!    subtype time_t      is Long_Long_Integer;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
        tv_sec  : time_t;
        tv_nsec : Long_Long_Integer;
     end record;
     pragma Convention (C, timespec);
  
--- 48,62 ----
     ----------
  
     subtype suseconds_t is Long_Long_Integer;
!    --  Note that suseconds_t is 64 bits.
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
        tv_sec  : time_t;
        tv_nsec : Long_Long_Integer;
+       --  Note that tv_nsec is 64 bits.
     end record;
     pragma Convention (C, timespec);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-mudido.adb gcc-12.1.0/gcc/ada/libgnarl/s-mudido.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-mudido.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-mudido.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-mudido__affinity.adb gcc-12.1.0/gcc/ada/libgnarl/s-mudido__affinity.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-mudido__affinity.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-mudido__affinity.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
*************** package body System.Multiprocessors.Disp
*** 113,119 ****
  
     function Create (First : CPU; Last : CPU_Range) return Dispatching_Domain is
     begin
!       return Create ((First .. Last => True));
     end Create;
  
     function Create (Set : CPU_Set) return Dispatching_Domain is
--- 113,119 ----
  
     function Create (First : CPU; Last : CPU_Range) return Dispatching_Domain is
     begin
!       return Create ([First .. Last => True]);
     end Create;
  
     function Create (Set : CPU_Set) return Dispatching_Domain is
*************** package body System.Multiprocessors.Disp
*** 156,162 ****
             ST.System_Domain (Rng);
           Actual : constant ST.Dispatching_Domain :=
             ST_DD_Slice and not System_Domain_Slice;
!          Expected : constant ST.Dispatching_Domain := (Rng => False);
        begin
           if Actual /= Expected then
              raise Dispatching_Domain_Error with
--- 156,162 ----
             ST.System_Domain (Rng);
           Actual : constant ST.Dispatching_Domain :=
             ST_DD_Slice and not System_Domain_Slice;
!          Expected : constant ST.Dispatching_Domain := [Rng => False];
        begin
           if Actual /= Expected then
              raise Dispatching_Domain_Error with
*************** package body System.Multiprocessors.Disp
*** 184,190 ****
  
        New_System_Domain (Rng) := New_System_Domain (Rng) and not ST_DD_Slice;
  
!       if New_System_Domain = (New_System_Domain'Range => False) then
           raise Dispatching_Domain_Error with
             "would leave System_Dispatching_Domain empty";
        end if;
--- 184,190 ----
  
        New_System_Domain (Rng) := New_System_Domain (Rng) and not ST_DD_Slice;
  
!       if New_System_Domain = [New_System_Domain'Range => False] then
           raise Dispatching_Domain_Error with
             "would leave System_Dispatching_Domain empty";
        end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__aix.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__aix.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__aix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__aix.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__aix.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__aix.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__aix.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__aix.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2022, 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- --
*************** with Ada.Unchecked_Conversion;
*** 43,48 ****
--- 43,50 ----
  with Interfaces.C;
  with Interfaces.C.Extensions;
  
+ with System.Parameters;
+ 
  package System.OS_Interface is
     pragma Preelaborate;
  
*************** private
*** 540,546 ****
  
     type pid_t is new int;
  
!    type time_t is new long;
  
     type timespec is record
        tv_sec  : time_t;
--- 542,549 ----
  
     type pid_t is new int;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__android.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__android.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__android.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__android.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__android.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__android.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__android.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__android.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
*************** with Ada.Unchecked_Conversion;
*** 42,47 ****
--- 42,48 ----
  with Interfaces.C;
  with System.Linux;
  with System.OS_Constants;
+ with System.Parameters;
  
  package System.OS_Interface is
     pragma Preelaborate;
*************** private
*** 593,599 ****
  
     type pid_t is new int;
  
!    type time_t is new long;
  
     type timespec is record
        tv_sec  : time_t;
--- 594,601 ----
  
     type pid_t is new int;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__darwin.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__darwin.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__darwin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__darwin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__darwin.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__darwin.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__darwin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__darwin.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2022, 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- --
***************
*** 40,45 ****
--- 40,46 ----
  
  with Interfaces.C;
  with System.OS_Constants;
+ with System.Parameters;
  
  package System.OS_Interface is
     pragma Preelaborate;
*************** private
*** 514,520 ****
  
     type pid_t is new int32_t;
  
!    type time_t is new long;
  
     type timespec is record
        tv_sec  : time_t;
--- 515,522 ----
  
     type pid_t is new int32_t;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__dragonfly.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__dragonfly.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__dragonfly.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__dragonfly.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__dragonfly.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__dragonfly.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__dragonfly.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__dragonfly.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                   S p e c                                --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                   S p e c                                --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --          Copyright (C) 1995-2022, 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- --
*************** with Ada.Unchecked_Conversion;
*** 43,48 ****
--- 43,50 ----
  
  with Interfaces.C;
  
+ with System.Parameters;
+ 
  package System.OS_Interface is
     pragma Preelaborate;
  
*************** private
*** 633,639 ****
  
     type pid_t is new int;
  
!    type time_t is new long;
  
     type timespec is record
        ts_sec  : time_t;
--- 635,642 ----
  
     type pid_t is new int;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        ts_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__dummy.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__dummy.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__dummy.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__dummy.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__freebsd.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__freebsd.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__freebsd.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__freebsd.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__freebsd.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__freebsd.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__freebsd.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__freebsd.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                   S p e c                                --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                   S p e c                                --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2022, 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- --
*************** with Ada.Unchecked_Conversion;
*** 43,48 ****
--- 43,50 ----
  
  with Interfaces.C;
  
+ with System.Parameters;
+ 
  package System.OS_Interface is
     pragma Preelaborate;
  
*************** private
*** 630,636 ****
     type pid_t is new int;
     Self_PID : constant pid_t := 0;
  
!    type time_t is new long;
  
     type timespec is record
        ts_sec  : time_t;
--- 632,639 ----
     type pid_t is new int;
     Self_PID : constant pid_t := 0;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        ts_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__gnu.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__gnu.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__gnu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__gnu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --          Copyright (C) 2015-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --          Copyright (C) 2015-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__gnu.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__gnu.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__gnu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__gnu.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --          Copyright (C) 1995-2022, 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- --
***************
*** 39,44 ****
--- 39,45 ----
  --  Preelaborate. This package is designed to be a bottom-level (leaf) package
  
  with Interfaces.C;
+ with System.Parameters;
  with Unchecked_Conversion;
  
  package System.OS_Interface is
*************** private
*** 652,658 ****
  
     type pid_t is new int;
  
!    type time_t is new long;
  
     type timespec is record
        tv_sec  : time_t;
--- 653,660 ----
  
     type pid_t is new int;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__hpux-dce.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__hpux-dce.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__hpux-dce.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__hpux-dce.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__hpux-dce.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__hpux-dce.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__hpux-dce.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__hpux-dce.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --          Copyright (C) 1995-2022, 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- --
*************** with Ada.Unchecked_Conversion;
*** 42,47 ****
--- 42,49 ----
  
  with Interfaces.C;
  
+ with System.Parameters;
+ 
  package System.OS_Interface is
     pragma Preelaborate;
  
*************** private
*** 444,450 ****
  
     type pid_t is new int;
  
!    type time_t is new long;
  
     type timespec is record
        tv_sec  : time_t;
--- 446,453 ----
  
     type pid_t is new int;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__hpux.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__hpux.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__hpux.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__hpux.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --               Copyright (C) 1991-2017, Florida State University          --
! --            Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --               Copyright (C) 1991-2017, Florida State University          --
! --            Copyright (C) 1995-2022, 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- --
*************** with Ada.Unchecked_Conversion;
*** 42,47 ****
--- 42,49 ----
  
  with Interfaces.C;
  
+ with System.Parameters;
+ 
  package System.OS_Interface is
     pragma Preelaborate;
  
*************** private
*** 514,520 ****
  
     type pid_t is new int;
  
!    type time_t is new long;
  
     type timespec is record
        tv_sec  : time_t;
--- 516,523 ----
  
     type pid_t is new int;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --               Copyright (C) 1991-1994, Florida State University          --
! --            Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --               Copyright (C) 1991-1994, Florida State University          --
! --            Copyright (C) 1995-2022, 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- --
***************
*** 39,44 ****
--- 39,45 ----
  --  Preelaborate. This package is designed to be a bottom-level (leaf) package
  
  with Interfaces.C;
+ with System.Parameters;
  with Unchecked_Conversion;
  
  package System.OS_Interface is
*************** private
*** 598,604 ****
  
     type pid_t is new int;
  
!    type time_t is new long;
  
     type timespec is record
        tv_sec  : time_t;
--- 599,606 ----
  
     type pid_t is new int;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__linux.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__linux.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__linux.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2022, 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- --
*************** package System.OS_Interface is
*** 51,56 ****
--- 51,58 ----
  
     pragma Linker_Options ("-lpthread");
  
+    use type System.Linux.time_t;
+ 
     subtype int            is Interfaces.C.int;
     subtype char           is Interfaces.C.char;
     subtype short          is Interfaces.C.short;
*************** package System.OS_Interface is
*** 130,136 ****
  
     type Signal_Set is array (Natural range <>) of Signal;
  
!    Unmasked : constant Signal_Set := (
        SIGTRAP,
        --  To enable debugging on multithreaded applications, mark SIGTRAP to
        --  be kept unmasked.
--- 132,138 ----
  
     type Signal_Set is array (Natural range <>) of Signal;
  
!    Unmasked : constant Signal_Set := [
        SIGTRAP,
        --  To enable debugging on multithreaded applications, mark SIGTRAP to
        --  be kept unmasked.
*************** package System.OS_Interface is
*** 146,154 ****
  
        SIGKILL, SIGSTOP
        --  These two signals actually can't be masked (POSIX won't allow it)
!       );
  
!    Reserved : constant Signal_Set := (
        SIG32, SIG33, SIG34
        --  glibc POSIX threads implementation uses two (NPTL) or three
        --  (LinuxThreads) real-time signals for its own use (see SIGNAL(7)).
--- 148,156 ----
  
        SIGKILL, SIGSTOP
        --  These two signals actually can't be masked (POSIX won't allow it)
!       ];
  
!    Reserved : constant Signal_Set := [
        SIG32, SIG33, SIG34
        --  glibc POSIX threads implementation uses two (NPTL) or three
        --  (LinuxThreads) real-time signals for its own use (see SIGNAL(7)).
*************** package System.OS_Interface is
*** 156,162 ****
        --  not permit these signals to be used by the public signal.h API.
        --  While LinuxThreads is mostly likely unused now, SIG34 is still
        --  reserved as this behavior is consistent with past GNAT releases.
!       );
  
     type sigset_t is private;
  
--- 158,164 ----
        --  not permit these signals to be used by the public signal.h API.
        --  While LinuxThreads is mostly likely unused now, SIG34 is still
        --  reserved as this behavior is consistent with past GNAT releases.
!       ];
  
     type sigset_t is private;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__lynxos178.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__lynxos178.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__lynxos178.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__lynxos178.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__lynxos178e.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__lynxos178e.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__lynxos178e.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__lynxos178e.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-1994, Florida State University            --
! --          Copyright (C) 1995-2022, 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- --
*************** with Ada.Unchecked_Conversion;
*** 43,48 ****
--- 43,49 ----
  with Interfaces.C;
  
  with System.Multiprocessors;
+ with System.Parameters;
  
  package System.OS_Interface is
     pragma Preelaborate;
*************** private
*** 539,545 ****
  
     type pid_t is new long;
  
!    type time_t is new int64;
  
     type suseconds_t is new int;
  
--- 540,547 ----
  
     type pid_t is new long;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type suseconds_t is new int;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__mingw.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__mingw.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__mingw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__mingw.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__posix.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__posix.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__posix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__posix.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                   B o d y                                --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                   B o d y                                --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__qnx.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__qnx.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__qnx.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__qnx.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                   B o d y                                --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                   B o d y                                --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__qnx.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__qnx.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__qnx.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__qnx.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
***************
*** 40,45 ****
--- 40,46 ----
  with Ada.Unchecked_Conversion;
  with Interfaces.C;
  with System.OS_Constants;
+ with System.Parameters;
  
  package System.OS_Interface is
     pragma Preelaborate;
*************** private
*** 566,572 ****
  
     type pid_t is new int;
  
!    type time_t is new long;
  
     type timespec is record
        tv_sec  : time_t;
--- 567,574 ----
  
     type pid_t is new int;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__rtems.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__rtems.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__rtems.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__rtems.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  B o d y                                 --
  --                                                                          --
  --            Copyright (C) 1991-2017, Florida State University             --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  B o d y                                 --
  --                                                                          --
  --            Copyright (C) 1991-2017, Florida State University             --
! --          Copyright (C) 1995-2022, 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- --
*************** with Interfaces.C; use Interfaces.C;
*** 44,49 ****
--- 44,97 ----
  
  package body System.OS_Interface is
  
+    ---------------
+    -- RTEMS API --
+    ---------------
+ 
+    type RTEMS_Attributes is new unsigned;
+ 
+    RTEMS_SIMPLE_BINARY_SEMAPHORE : constant := 16#00000020#;
+    RTEMS_FIFO                    : constant := 16#00000000#;
+ 
+    type RTEMS_Interval is new unsigned;
+ 
+    RTEMS_NO_TIMEOUT : constant := 0;
+ 
+    type RTEMS_Options is new unsigned;
+ 
+    RTEMS_WAIT             : constant := 16#00000000#;
+    RTEMS_INTERRUPT_UNIQUE : constant := 16#00000001#;
+ 
+    type RTEMS_Name is new unsigned;
+ 
+    function RTEMS_Build_Name (C1, C2, C3, C4 : Character) return RTEMS_Name
+      with Import, External_Name => "rtems_build_name", Convention => C;
+ 
+    function RTEMS_Semaphore_Create
+      (Name             : RTEMS_Name;
+       Count            : unsigned;
+       Attributes       : RTEMS_Attributes;
+       Priority_Ceiling : unsigned;
+       Semaphore        : out Binary_Semaphore_Id) return int
+      with Import, External_Name => "rtems_semaphore_create", Convention => C;
+ 
+    function RTEMS_Semaphore_Delete (Semaphore : Binary_Semaphore_Id) return int
+      with Import, External_Name => "rtems_semaphore_delete", Convention => C;
+ 
+    function RTEMS_Semaphore_Flush (Semaphore : Binary_Semaphore_Id)
+      return int
+      with Import, External_Name => "rtems_semaphore_flush", Convention => C;
+ 
+    function RTEMS_Semaphore_Obtain
+      (Semaphore : Binary_Semaphore_Id;
+       Options   : RTEMS_Options;
+       Timeout   : RTEMS_Interval) return int
+      with Import, External_Name => "rtems_semaphore_obtain", Convention => C;
+ 
+    function RTEMS_Semaphore_Release (Semaphore : Binary_Semaphore_Id)
+      return int
+      with Import, External_Name => "rtems_semaphore_release", Convention => C;
+ 
     -----------------
     -- To_Duration --
     -----------------
*************** package body System.OS_Interface is
*** 85,90 ****
--- 133,240 ----
                         tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
     end To_Timespec;
  
+    -----------------------------
+    -- Binary_Semaphore_Create --
+    -----------------------------
+ 
+    function Binary_Semaphore_Create return Binary_Semaphore_Id is
+       Semaphore : Binary_Semaphore_Id;
+       Status    : int;
+    begin
+       Status :=
+         RTEMS_Semaphore_Create
+           (Name             => RTEMS_Build_Name ('G', 'N', 'A', 'T'),
+            Count            => 0,
+            Attributes       => RTEMS_SIMPLE_BINARY_SEMAPHORE or RTEMS_FIFO,
+            Priority_Ceiling => 0,
+            Semaphore        => Semaphore);
+ 
+       pragma Assert (Status = 0);
+ 
+       return Semaphore;
+    end Binary_Semaphore_Create;
+ 
+    -----------------------------
+    -- Binary_Semaphore_Delete --
+    -----------------------------
+ 
+    function Binary_Semaphore_Delete (ID : Binary_Semaphore_Id)
+      return int is
+    begin
+       return RTEMS_Semaphore_Delete (ID);
+    end Binary_Semaphore_Delete;
+ 
+    -----------------------------
+    -- Binary_Semaphore_Obtain --
+    -----------------------------
+ 
+    function Binary_Semaphore_Obtain (ID : Binary_Semaphore_Id)
+      return int is
+    begin
+       return RTEMS_Semaphore_Obtain (ID, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
+    end Binary_Semaphore_Obtain;
+ 
+    ------------------------------
+    -- Binary_Semaphore_Release --
+    ------------------------------
+ 
+    function Binary_Semaphore_Release (ID : Binary_Semaphore_Id)
+      return int is
+    begin
+       return RTEMS_Semaphore_Release (ID);
+    end Binary_Semaphore_Release;
+ 
+    ----------------------------
+    -- Binary_Semaphore_Flush --
+    ----------------------------
+ 
+    function Binary_Semaphore_Flush (ID : Binary_Semaphore_Id) return int is
+    begin
+       return RTEMS_Semaphore_Flush (ID);
+    end Binary_Semaphore_Flush;
+ 
+    -----------------------
+    -- Interrupt_Connect --
+    -----------------------
+ 
+    function Interrupt_Connect
+      (Vector    : Interrupt_Vector;
+       Handler   : Interrupt_Handler;
+       Parameter : System.Address := System.Null_Address) return int
+    is
+       function RTEMS_Interrupt_Handler_Install
+          (Vector    : Interrupt_Vector;
+           Info      : char_array;
+           Options   : RTEMS_Options;
+           Handler   : Interrupt_Handler;
+           Parameter : System.Address) return int
+         with Import,
+              External_Name => "rtems_interrupt_handler_install",
+              Convention => C;
+ 
+       Info_String : constant char_array := To_C ("GNAT Interrupt Handler");
+       --  Handler name that is registered with RTEMS
+    begin
+       return
+         RTEMS_Interrupt_Handler_Install
+           (Vector    => Vector,
+            Info      => Info_String,
+            Options   => RTEMS_INTERRUPT_UNIQUE,
+            Handler   => Handler,
+            Parameter => Parameter);
+    end Interrupt_Connect;
+ 
+    --------------------------------
+    -- Interrupt_Number_To_Vector --
+    --------------------------------
+ 
+    function Interrupt_Number_To_Vector (intNum : int)
+      return Interrupt_Vector
+    is
+    begin
+       return Interrupt_Vector (intNum);
+    end Interrupt_Number_To_Vector;
+ 
     ------------------
     -- pthread_init --
     ------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__rtems.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__rtems.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__rtems.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__rtems.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
***************
*** 52,57 ****
--- 52,58 ----
  
  with Interfaces.C;
  with System.OS_Constants;
+ with System.Parameters;
  
  package System.OS_Interface is
     pragma Preelaborate;
*************** package System.OS_Interface is
*** 84,101 ****
     ENOMEM    : constant := System.OS_Constants.ENOMEM;
     ETIMEDOUT : constant := System.OS_Constants.ETIMEDOUT;
  
!    -------------
!    -- Signals --
!    -------------
  
!    Num_HW_Interrupts : constant := 256;
  
!    Max_HW_Interrupt : constant := Num_HW_Interrupts - 1;
     type HW_Interrupt is new int range 0 .. Max_HW_Interrupt;
  
     Max_Interrupt : constant := Max_HW_Interrupt;
! 
!    type Signal is new int range 0 .. Max_Interrupt;
  
     SIGXCPU     : constant := 0; --  XCPU
     SIGHUP      : constant := 1; --  hangup
--- 85,104 ----
     ENOMEM    : constant := System.OS_Constants.ENOMEM;
     ETIMEDOUT : constant := System.OS_Constants.ETIMEDOUT;
  
!    ----------------------------
!    -- Signals and Interrupts --
!    ----------------------------
  
!    NSIG : constant := 64;
!    --  Number of signals on the target OS
!    type Signal is new int range 0 .. Interfaces.C."-" (NSIG, 1);
  
!    Max_HW_Interrupt : constant := 255;
     type HW_Interrupt is new int range 0 .. Max_HW_Interrupt;
  
     Max_Interrupt : constant := Max_HW_Interrupt;
!    subtype Interrupt_Range is Natural range 0 .. Max_HW_Interrupt;
!    --  For s-interr
  
     SIGXCPU     : constant := 0; --  XCPU
     SIGHUP      : constant := 1; --  hangup
*************** package System.OS_Interface is
*** 545,578 ****
     type Binary_Semaphore_Id is new rtems_id;
  
     function Binary_Semaphore_Create return Binary_Semaphore_Id;
!    pragma Import (
!       C,
!       Binary_Semaphore_Create,
!       "__gnat_binary_semaphore_create");
  
     function Binary_Semaphore_Delete (ID : Binary_Semaphore_Id) return int;
!    pragma Import (
!       C,
!       Binary_Semaphore_Delete,
!       "__gnat_binary_semaphore_delete");
  
     function Binary_Semaphore_Obtain (ID : Binary_Semaphore_Id) return int;
!    pragma Import (
!       C,
!       Binary_Semaphore_Obtain,
!       "__gnat_binary_semaphore_obtain");
  
     function Binary_Semaphore_Release (ID : Binary_Semaphore_Id) return int;
!    pragma Import (
!       C,
!       Binary_Semaphore_Release,
!       "__gnat_binary_semaphore_release");
  
     function Binary_Semaphore_Flush (ID : Binary_Semaphore_Id) return int;
!    pragma Import (
!       C,
!       Binary_Semaphore_Flush,
!       "__gnat_binary_semaphore_flush");
  
     ------------------------------------------------------------
     -- Hardware Interrupt Wrappers to Support Interrupt Tasks --
--- 548,566 ----
     type Binary_Semaphore_Id is new rtems_id;
  
     function Binary_Semaphore_Create return Binary_Semaphore_Id;
!    pragma Inline (Binary_Semaphore_Create);
  
     function Binary_Semaphore_Delete (ID : Binary_Semaphore_Id) return int;
!    pragma Inline (Binary_Semaphore_Delete);
  
     function Binary_Semaphore_Obtain (ID : Binary_Semaphore_Id) return int;
!    pragma Inline (Binary_Semaphore_Obtain);
  
     function Binary_Semaphore_Release (ID : Binary_Semaphore_Id) return int;
!    pragma Inline (Binary_Semaphore_Release);
  
     function Binary_Semaphore_Flush (ID : Binary_Semaphore_Id) return int;
!    pragma Inline (Binary_Semaphore_Flush);
  
     ------------------------------------------------------------
     -- Hardware Interrupt Wrappers to Support Interrupt Tasks --
*************** package System.OS_Interface is
*** 580,623 ****
  
     type Interrupt_Handler is access procedure (parameter : System.Address);
     pragma Convention (C, Interrupt_Handler);
     type Interrupt_Vector is new System.Address;
  
     function Interrupt_Connect
!      (vector    : Interrupt_Vector;
!       handler   : Interrupt_Handler;
!       parameter : System.Address := System.Null_Address) return int;
!    pragma Import (C, Interrupt_Connect, "__gnat_interrupt_connect");
     --  Use this to set up an user handler. The routine installs a
     --  a user handler which is invoked after RTEMS has saved enough
     --  context for a high-level language routine to be safely invoked.
  
-    function Interrupt_Vector_Get
-      (Vector : Interrupt_Vector) return Interrupt_Handler;
-    pragma Import (C, Interrupt_Vector_Get, "__gnat_interrupt_get");
-    --  Use this to get the existing handler for later restoral.
- 
-    procedure Interrupt_Vector_Set
-      (Vector  : Interrupt_Vector;
-       Handler : Interrupt_Handler);
-    pragma Import (C, Interrupt_Vector_Set, "__gnat_interrupt_set");
-    --  Use this to restore a handler obtained using Interrupt_Vector_Get.
- 
     function Interrupt_Number_To_Vector (intNum : int) return Interrupt_Vector;
     --  Convert a logical interrupt number to the hardware interrupt vector
     --  number used to connect the interrupt.
-    pragma Import (
-       C,
-       Interrupt_Number_To_Vector,
-       "__gnat_interrupt_number_to_vector"
-    );
  
  private
  
!    type sigset_t is new int;
  
     type pid_t is new int;
  
!    type time_t is new Long_Long_Integer;
  
     type timespec is record
        tv_sec  : time_t;
--- 568,596 ----
  
     type Interrupt_Handler is access procedure (parameter : System.Address);
     pragma Convention (C, Interrupt_Handler);
+ 
     type Interrupt_Vector is new System.Address;
  
     function Interrupt_Connect
!      (Vector    : Interrupt_Vector;
!       Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return int;
     --  Use this to set up an user handler. The routine installs a
     --  a user handler which is invoked after RTEMS has saved enough
     --  context for a high-level language routine to be safely invoked.
  
     function Interrupt_Number_To_Vector (intNum : int) return Interrupt_Vector;
     --  Convert a logical interrupt number to the hardware interrupt vector
     --  number used to connect the interrupt.
  
  private
  
!    type sigset_t is new unsigned_long;
  
     type pid_t is new int;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__solaris.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__solaris.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__solaris.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__solaris.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__solaris.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__solaris.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__solaris.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__solaris.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --          Copyright (C) 1995-2022, 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- --
*************** with Interfaces.C;
*** 42,47 ****
--- 42,49 ----
  
  with Ada.Unchecked_Conversion;
  
+ with System.Parameters;
+ 
  package System.OS_Interface is
     pragma Preelaborate;
  
*************** private
*** 523,529 ****
  
     type pid_t is new long;
  
!    type time_t is new long;
  
     type timespec is record
        tv_sec  : time_t;
--- 525,532 ----
  
     type pid_t is new long;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__vxworks.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__vxworks.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__vxworks.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__vxworks.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --         Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --         Copyright (C) 1997-2022, 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- --
*************** package body System.OS_Interface is
*** 100,109 ****
        Ticks          : Long_Long_Integer;
        Rate_Duration  : Duration;
        Ticks_Duration : Duration;
  
     begin
        if D < 0.0 then
!          return ERROR;
        end if;
  
        --  Ensure that the duration can be converted to ticks
--- 100,110 ----
        Ticks          : Long_Long_Integer;
        Rate_Duration  : Duration;
        Ticks_Duration : Duration;
+       IERR           : constant int := -1;
  
     begin
        if D < 0.0 then
!          return IERR;
        end if;
  
        --  Ensure that the duration can be converted to ticks
*************** package body System.OS_Interface is
*** 142,148 ****
     -- Binary_Semaphore_Delete --
     -----------------------------
  
!    function Binary_Semaphore_Delete (ID : Binary_Semaphore_Id) return int is
     begin
        return semDelete (SEM_ID (ID));
     end Binary_Semaphore_Delete;
--- 143,150 ----
     -- Binary_Semaphore_Delete --
     -----------------------------
  
!    function Binary_Semaphore_Delete (ID : Binary_Semaphore_Id)
!      return STATUS is
     begin
        return semDelete (SEM_ID (ID));
     end Binary_Semaphore_Delete;
*************** package body System.OS_Interface is
*** 151,157 ****
     -- Binary_Semaphore_Obtain --
     -----------------------------
  
!    function Binary_Semaphore_Obtain (ID : Binary_Semaphore_Id) return int is
     begin
        return semTake (SEM_ID (ID), WAIT_FOREVER);
     end Binary_Semaphore_Obtain;
--- 153,160 ----
     -- Binary_Semaphore_Obtain --
     -----------------------------
  
!    function Binary_Semaphore_Obtain (ID : Binary_Semaphore_Id)
!      return STATUS is
     begin
        return semTake (SEM_ID (ID), WAIT_FOREVER);
     end Binary_Semaphore_Obtain;
*************** package body System.OS_Interface is
*** 160,166 ****
     -- Binary_Semaphore_Release --
     ------------------------------
  
!    function Binary_Semaphore_Release (ID : Binary_Semaphore_Id) return int is
     begin
        return semGive (SEM_ID (ID));
     end Binary_Semaphore_Release;
--- 163,170 ----
     -- Binary_Semaphore_Release --
     ------------------------------
  
!    function Binary_Semaphore_Release (ID : Binary_Semaphore_Id)
!      return STATUS is
     begin
        return semGive (SEM_ID (ID));
     end Binary_Semaphore_Release;
*************** package body System.OS_Interface is
*** 169,175 ****
     -- Binary_Semaphore_Flush --
     ----------------------------
  
!    function Binary_Semaphore_Flush (ID : Binary_Semaphore_Id) return int is
     begin
        return semFlush (SEM_ID (ID));
     end Binary_Semaphore_Flush;
--- 173,179 ----
     -- Binary_Semaphore_Flush --
     ----------------------------
  
!    function Binary_Semaphore_Flush (ID : Binary_Semaphore_Id) return STATUS is
     begin
        return semFlush (SEM_ID (ID));
     end Binary_Semaphore_Flush;
*************** package body System.OS_Interface is
*** 190,196 ****
     function Interrupt_Connect
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return int is
     begin
        return
          System.VxWorks.Ext.Interrupt_Connect
--- 194,200 ----
     function Interrupt_Connect
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return STATUS is
     begin
        return
          System.VxWorks.Ext.Interrupt_Connect
*************** package body System.OS_Interface is
*** 203,209 ****
     -- Interrupt_Context --
     -----------------------
  
!    function Interrupt_Context return int is
     begin
        return System.VxWorks.Ext.Interrupt_Context;
     end Interrupt_Context;
--- 207,213 ----
     -- Interrupt_Context --
     -----------------------
  
!    function Interrupt_Context return BOOL is
     begin
        return System.VxWorks.Ext.Interrupt_Context;
     end Interrupt_Context;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__vxworks.ads gcc-12.1.0/gcc/ada/libgnarl/s-osinte__vxworks.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__vxworks.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__vxworks.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                   S p e c                                --
  --                                                                          --
  --            Copyright (C) 1991-2017, Florida State University             --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                   S p e c                                --
  --                                                                          --
  --            Copyright (C) 1991-2017, Florida State University             --
! --          Copyright (C) 1995-2022, 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- --
*************** with Interfaces.C;
*** 42,51 ****
--- 42,54 ----
  with System.VxWorks;
  with System.VxWorks.Ext;
  with System.Multiprocessors;
+ with System.Parameters;
  
  package System.OS_Interface is
     pragma Preelaborate;
  
+    package SVE renames System.VxWorks.Ext;
+ 
     subtype int             is Interfaces.C.int;
     subtype unsigned        is Interfaces.C.unsigned;
     subtype short           is Short_Integer;
*************** package System.OS_Interface is
*** 56,61 ****
--- 59,68 ----
     type unsigned_long_long is mod 2 ** long_long'Size;
     type size_t             is mod 2 ** Standard'Address_Size;
  
+    subtype STATUS    is SVE.STATUS;
+    subtype BOOL      is SVE.BOOL;
+    subtype vx_freq_t is SVE.vx_freq_t;
+ 
     -----------
     -- Errno --
     -----------
*************** package System.OS_Interface is
*** 200,206 ****
        oset : access sigset_t) return int;
     pragma Import (C, pthread_sigmask, "sigprocmask");
  
!    subtype t_id is System.VxWorks.Ext.t_id;
     subtype Thread_Id is t_id;
     --  Thread_Id and t_id are VxWorks identifiers for tasks. This value,
     --  although represented as a Long_Integer, is in fact an address. With
--- 207,213 ----
        oset : access sigset_t) return int;
     pragma Import (C, pthread_sigmask, "sigprocmask");
  
!    subtype t_id is SVE.t_id;
     subtype Thread_Id is t_id;
     --  Thread_Id and t_id are VxWorks identifiers for tasks. This value,
     --  although represented as a Long_Integer, is in fact an address. With
*************** package System.OS_Interface is
*** 210,236 ****
     function kill (pid : t_id; sig : Signal) return int;
     pragma Inline (kill);
  
!    function getpid return t_id renames System.VxWorks.Ext.getpid;
  
!    function Task_Stop (tid : t_id) return int
!      renames System.VxWorks.Ext.Task_Stop;
     --  If we are in the kernel space, stop the task whose t_id is given in
     --  parameter in such a way that it can be examined by the debugger. This
     --  typically maps to taskSuspend on VxWorks 5 and to taskStop on VxWorks 6.
  
!    function Task_Cont (tid : t_id) return int
!      renames System.VxWorks.Ext.Task_Cont;
     --  If we are in the kernel space, continue the task whose t_id is given
     --  in parameter if it has been stopped previously to be examined by the
     --  debugger (e.g. by taskStop). It typically maps to taskResume on VxWorks
     --  5 and to taskCont on VxWorks 6.
  
!    function Int_Lock return int renames System.VxWorks.Ext.Int_Lock;
     --  If we are in the kernel space, lock interrupts. It typically maps to
     --  intLock.
  
!    function Int_Unlock (Old : int) return int
!      renames System.VxWorks.Ext.Int_Unlock;
     --  If we are in the kernel space, unlock interrupts. It typically maps to
     --  intUnlock. The parameter Old is only used on PowerPC where it contains
     --  the returned value from Int_Lock (the old MPSR).
--- 217,240 ----
     function kill (pid : t_id; sig : Signal) return int;
     pragma Inline (kill);
  
!    function getpid return t_id renames SVE.getpid;
  
!    function Task_Stop (tid : t_id) return STATUS renames SVE.Task_Stop;
     --  If we are in the kernel space, stop the task whose t_id is given in
     --  parameter in such a way that it can be examined by the debugger. This
     --  typically maps to taskSuspend on VxWorks 5 and to taskStop on VxWorks 6.
  
!    function Task_Cont (tid : t_id) return STATUS renames SVE.Task_Cont;
     --  If we are in the kernel space, continue the task whose t_id is given
     --  in parameter if it has been stopped previously to be examined by the
     --  debugger (e.g. by taskStop). It typically maps to taskResume on VxWorks
     --  5 and to taskCont on VxWorks 6.
  
!    function Int_Lock return int renames SVE.Int_Lock;
     --  If we are in the kernel space, lock interrupts. It typically maps to
     --  intLock.
  
!    procedure Int_Unlock (Old : int) renames SVE.Int_Unlock;
     --  If we are in the kernel space, unlock interrupts. It typically maps to
     --  intUnlock. The parameter Old is only used on PowerPC where it contains
     --  the returned value from Int_Lock (the old MPSR).
*************** package System.OS_Interface is
*** 239,245 ****
     -- Time --
     ----------
  
!    type time_t is new unsigned_long;
  
     type timespec is record
        ts_sec  : time_t;
--- 243,253 ----
     -- Time --
     ----------
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
!    --  Time_t here used to be unsigned to match the VxWorks header declaration.
!    --  The header declaration has changed in newer releases and is now signed
!    --  for applications.
  
     type timespec is record
        ts_sec  : time_t;
*************** package System.OS_Interface is
*** 280,313 ****
     -- VxWorks specific API --
     --------------------------
  
-    subtype STATUS is int;
-    --  Equivalent of the C type STATUS
- 
-    OK    : constant STATUS := 0;
-    ERROR : constant STATUS := Interfaces.C.int (-1);
- 
     function taskIdVerify (tid : t_id) return STATUS;
     pragma Import (C, taskIdVerify, "taskIdVerify");
  
     function taskIdSelf return t_id;
     pragma Import (C, taskIdSelf, "taskIdSelf");
  
!    function taskOptionsGet (tid : t_id; pOptions : access int) return int;
     pragma Import (C, taskOptionsGet, "taskOptionsGet");
  
!    function taskSuspend (tid : t_id) return int;
     pragma Import (C, taskSuspend, "taskSuspend");
  
!    function taskResume (tid : t_id) return int;
     pragma Import (C, taskResume, "taskResume");
  
!    function taskIsSuspended (tid : t_id) return int;
     pragma Import (C, taskIsSuspended, "taskIsSuspended");
  
!    function taskDelay (ticks : int) return int;
     pragma Import (C, taskDelay, "taskDelay");
  
!    function sysClkRateGet return int;
     pragma Import (C, sysClkRateGet, "sysClkRateGet");
  
     --  VxWorks 5.x specific functions
--- 288,315 ----
     -- VxWorks specific API --
     --------------------------
  
     function taskIdVerify (tid : t_id) return STATUS;
     pragma Import (C, taskIdVerify, "taskIdVerify");
  
     function taskIdSelf return t_id;
     pragma Import (C, taskIdSelf, "taskIdSelf");
  
!    function taskOptionsGet (tid : t_id; pOptions : access int) return STATUS;
     pragma Import (C, taskOptionsGet, "taskOptionsGet");
  
!    function taskSuspend (tid : t_id) return STATUS;
     pragma Import (C, taskSuspend, "taskSuspend");
  
!    function taskResume (tid : t_id) return STATUS;
     pragma Import (C, taskResume, "taskResume");
  
!    function taskIsSuspended (tid : t_id) return BOOL;
     pragma Import (C, taskIsSuspended, "taskIsSuspended");
  
!    function taskDelay (ticks : int) return STATUS;
     pragma Import (C, taskDelay, "taskDelay");
  
!    function sysClkRateGet return vx_freq_t;
     pragma Import (C, sysClkRateGet, "sysClkRateGet");
  
     --  VxWorks 5.x specific functions
*************** package System.OS_Interface is
*** 315,331 ****
     --  taskVarLib: eg VxWorks 6 RTPs
  
     function taskVarAdd
!      (tid : t_id; pVar : access System.Address) return int;
     pragma Import (C, taskVarAdd, "taskVarAdd");
  
     function taskVarDelete
!      (tid : t_id; pVar : access System.Address) return int;
     pragma Import (C, taskVarDelete, "taskVarDelete");
  
     function taskVarSet
       (tid   : t_id;
        pVar  : access System.Address;
!       value : System.Address) return int;
     pragma Import (C, taskVarSet, "taskVarSet");
  
     function taskVarGet
--- 317,333 ----
     --  taskVarLib: eg VxWorks 6 RTPs
  
     function taskVarAdd
!      (tid : t_id; pVar : access System.Address) return STATUS;
     pragma Import (C, taskVarAdd, "taskVarAdd");
  
     function taskVarDelete
!      (tid : t_id; pVar : access System.Address) return STATUS;
     pragma Import (C, taskVarDelete, "taskVarDelete");
  
     function taskVarSet
       (tid   : t_id;
        pVar  : access System.Address;
!       value : System.Address) return STATUS;
     pragma Import (C, taskVarSet, "taskVarSet");
  
     function taskVarGet
*************** package System.OS_Interface is
*** 374,388 ****
     procedure taskDelete (tid : t_id);
     pragma Import (C, taskDelete, "taskDelete");
  
!    function Set_Time_Slice (ticks : int) return int
!      renames System.VxWorks.Ext.Set_Time_Slice;
     --  Calls kernelTimeSlice under VxWorks 5.x, VxWorks 653, or in VxWorks 6
     --  kernel apps. Returns ERROR for RTPs, VxWorks 5 /CERT
  
!    function taskPriorityGet (tid : t_id; pPriority : access int) return int;
     pragma Import (C, taskPriorityGet, "taskPriorityGet");
  
!    function taskPrioritySet (tid : t_id; newPriority : int) return int;
     pragma Import (C, taskPrioritySet, "taskPrioritySet");
  
     --  Semaphore creation flags
--- 376,390 ----
     procedure taskDelete (tid : t_id);
     pragma Import (C, taskDelete, "taskDelete");
  
!    function Set_Time_Slice (ticks : int) return STATUS renames
!      SVE.Set_Time_Slice;
     --  Calls kernelTimeSlice under VxWorks 5.x, VxWorks 653, or in VxWorks 6
     --  kernel apps. Returns ERROR for RTPs, VxWorks 5 /CERT
  
!    function taskPriorityGet (tid : t_id; pPriority : access int) return STATUS;
     pragma Import (C, taskPriorityGet, "taskPriorityGet");
  
!    function taskPrioritySet (tid : t_id; newPriority : int) return STATUS;
     pragma Import (C, taskPrioritySet, "taskPrioritySet");
  
     --  Semaphore creation flags
*************** package System.OS_Interface is
*** 414,420 ****
     --  semTake() timeout with ticks > NO_WAIT
     S_objLib_OBJ_TIMEOUT     : constant := M_objLib + 4;
  
!    subtype SEM_ID is System.VxWorks.Ext.SEM_ID;
     --  typedef struct semaphore *SEM_ID;
  
     --  We use two different kinds of VxWorks semaphores: mutex and binary
--- 416,422 ----
     --  semTake() timeout with ticks > NO_WAIT
     S_objLib_OBJ_TIMEOUT     : constant := M_objLib + 4;
  
!    subtype SEM_ID is SVE.SEM_ID;
     --  typedef struct semaphore *SEM_ID;
  
     --  We use two different kinds of VxWorks semaphores: mutex and binary
*************** package System.OS_Interface is
*** 428,441 ****
     function semMCreate (options : int) return SEM_ID;
     pragma Import (C, semMCreate, "semMCreate");
  
!    function semDelete (Sem : SEM_ID) return int
!      renames System.VxWorks.Ext.semDelete;
     --  Delete a semaphore
  
!    function semGive (Sem : SEM_ID) return int;
     pragma Import (C, semGive, "semGive");
  
!    function semTake (Sem : SEM_ID; timeout : int) return int;
     pragma Import (C, semTake, "semTake");
     --  Attempt to take binary semaphore.  Error is returned if operation
     --  times out
--- 430,442 ----
     function semMCreate (options : int) return SEM_ID;
     pragma Import (C, semMCreate, "semMCreate");
  
!    function semDelete (Sem : SEM_ID) return STATUS renames SVE.semDelete;
     --  Delete a semaphore
  
!    function semGive (Sem : SEM_ID) return STATUS;
     pragma Import (C, semGive, "semGive");
  
!    function semTake (Sem : SEM_ID; timeout : int) return STATUS;
     pragma Import (C, semTake, "semTake");
     --  Attempt to take binary semaphore.  Error is returned if operation
     --  times out
*************** package System.OS_Interface is
*** 453,468 ****
     function Binary_Semaphore_Create return Binary_Semaphore_Id;
     pragma Inline (Binary_Semaphore_Create);
  
!    function Binary_Semaphore_Delete (ID : Binary_Semaphore_Id) return int;
     pragma Inline (Binary_Semaphore_Delete);
  
!    function Binary_Semaphore_Obtain (ID : Binary_Semaphore_Id) return int;
     pragma Inline (Binary_Semaphore_Obtain);
  
!    function Binary_Semaphore_Release (ID : Binary_Semaphore_Id) return int;
     pragma Inline (Binary_Semaphore_Release);
  
!    function Binary_Semaphore_Flush (ID : Binary_Semaphore_Id) return int;
     pragma Inline (Binary_Semaphore_Flush);
  
     ------------------------------------------------------------
--- 454,469 ----
     function Binary_Semaphore_Create return Binary_Semaphore_Id;
     pragma Inline (Binary_Semaphore_Create);
  
!    function Binary_Semaphore_Delete (ID : Binary_Semaphore_Id) return STATUS;
     pragma Inline (Binary_Semaphore_Delete);
  
!    function Binary_Semaphore_Obtain (ID : Binary_Semaphore_Id) return STATUS;
     pragma Inline (Binary_Semaphore_Obtain);
  
!    function Binary_Semaphore_Release (ID : Binary_Semaphore_Id) return STATUS;
     pragma Inline (Binary_Semaphore_Release);
  
!    function Binary_Semaphore_Flush (ID : Binary_Semaphore_Id) return STATUS;
     pragma Inline (Binary_Semaphore_Flush);
  
     ------------------------------------------------------------
*************** package System.OS_Interface is
*** 477,492 ****
     function Interrupt_Connect
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return int;
     pragma Inline (Interrupt_Connect);
     --  Use this to set up an user handler. The routine installs a user handler
     --  which is invoked after the OS has saved enough context for a high-level
     --  language routine to be safely invoked.
  
!    function Interrupt_Context return int;
     pragma Inline (Interrupt_Context);
!    --  Return 1 if executing in an interrupt context; return 0 if executing in
!    --  a task context.
  
     function Interrupt_Number_To_Vector (intNum : int) return Interrupt_Vector;
     pragma Inline (Interrupt_Number_To_Vector);
--- 478,493 ----
     function Interrupt_Connect
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return STATUS;
     pragma Inline (Interrupt_Connect);
     --  Use this to set up an user handler. The routine installs a user handler
     --  which is invoked after the OS has saved enough context for a high-level
     --  language routine to be safely invoked.
  
!    function Interrupt_Context return BOOL;
     pragma Inline (Interrupt_Context);
!    --  Return 1 (TRUE) if executing in an interrupt context;
!    --  return 0 (FALSE) if executing in a task context.
  
     function Interrupt_Number_To_Vector (intNum : int) return Interrupt_Vector;
     pragma Inline (Interrupt_Number_To_Vector);
*************** package System.OS_Interface is
*** 498,509 ****
     --------------------------------
  
     function taskCpuAffinitySet (tid : t_id; CPU : int) return int
!      renames System.VxWorks.Ext.taskCpuAffinitySet;
     --  For SMP run-times the affinity to CPU.
     --  For uniprocessor systems return ERROR status.
  
     function taskMaskAffinitySet (tid : t_id; CPU_Set : unsigned) return int
!      renames System.VxWorks.Ext.taskMaskAffinitySet;
     --  For SMP run-times the affinity to CPU_Set.
     --  For uniprocessor systems return ERROR status.
  
--- 499,510 ----
     --------------------------------
  
     function taskCpuAffinitySet (tid : t_id; CPU : int) return int
!     renames SVE.taskCpuAffinitySet;
     --  For SMP run-times the affinity to CPU.
     --  For uniprocessor systems return ERROR status.
  
     function taskMaskAffinitySet (tid : t_id; CPU_Set : unsigned) return int
!      renames SVE.taskMaskAffinitySet;
     --  For SMP run-times the affinity to CPU_Set.
     --  For uniprocessor systems return ERROR status.
  
*************** private
*** 519,523 ****
  
     ERROR_PID : constant pid_t := -1;
  
!    type sigset_t is new System.VxWorks.Ext.sigset_t;
  end System.OS_Interface;
--- 520,524 ----
  
     ERROR_PID : constant pid_t := -1;
  
!    type sigset_t is new SVE.sigset_t;
  end System.OS_Interface;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-osinte__x32.adb gcc-12.1.0/gcc/ada/libgnarl/s-osinte__x32.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-osinte__x32.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-osinte__x32.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                   B o d y                                --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                   B o d y                                --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-proinf.adb gcc-12.1.0/gcc/ada/libgnarl/s-proinf.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-proinf.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-proinf.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-proinf.ads gcc-12.1.0/gcc/ada/libgnarl/s-proinf.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-proinf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-proinf.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 1996-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-putaim.adb gcc-12.1.0/gcc/ada/libgnarl/s-putaim.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-putaim.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnarl/s-putaim.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,48 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                          SYSTEM.PUT_TASK_IMAGES                          --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package body System.Put_Task_Images is
+ 
+    use Ada.Strings.Text_Buffers;
+ 
+    procedure Put_Image_Protected (S : in out Sink'Class) is
+    begin
+       Put_UTF_8 (S, "(protected object)");
+    end Put_Image_Protected;
+ 
+    procedure Put_Image_Task
+      (S : in out Sink'Class; Id : Ada.Task_Identification.Task_Id)
+    is
+    begin
+       Put_UTF_8 (S, "(task " & Ada.Task_Identification.Image (Id) & ")");
+    end Put_Image_Task;
+ 
+ end System.Put_Task_Images;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-putaim.ads gcc-12.1.0/gcc/ada/libgnarl/s-putaim.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-putaim.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnarl/s-putaim.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,48 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                          SYSTEM.PUT_TASK_IMAGES                          --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.Text_Buffers;
+ with Ada.Task_Identification;
+ 
+ package System.Put_Task_Images is
+ 
+    --  This package contains subprograms that are called by the generated code
+    --  for the 'Put_Image attribute for protected and task types. This is
+    --  separate from System.Put_Images to avoid dragging the tasking runtimes
+    --  into nontasking programs.
+ 
+    subtype Sink is Ada.Strings.Text_Buffers.Root_Buffer_Type;
+ 
+    procedure Put_Image_Protected (S : in out Sink'Class);
+    procedure Put_Image_Task
+      (S : in out Sink'Class; Id : Ada.Task_Identification.Task_Id);
+ 
+ end System.Put_Task_Images;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-qnx.ads gcc-12.1.0/gcc/ada/libgnarl/s-qnx.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-qnx.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-qnx.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2017-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2017-2022, 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- --
***************
*** 37,42 ****
--- 37,44 ----
  
  with Interfaces.C;
  
+ with System.Parameters;
+ 
  package System.QNX is
     pragma Preelaborate;
  
*************** package System.QNX is
*** 46,52 ****
  
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    subtype time_t      is Interfaces.C.long;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
--- 48,55 ----
  
     subtype long        is Interfaces.C.long;
     subtype suseconds_t is Interfaces.C.long;
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
     subtype clockid_t   is Interfaces.C.int;
  
     type timespec is record
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-solita.adb gcc-12.1.0/gcc/ada/libgnarl/s-solita.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-solita.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-solita.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-solita.ads gcc-12.1.0/gcc/ada/libgnarl/s-solita.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-solita.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-solita.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-stusta.adb gcc-12.1.0/gcc/ada/libgnarl/s-stusta.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-stusta.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-stusta.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with System.Stack_Usage;
- 
  --  This is why this package is part of GNARL:
  
  with System.Tasking.Debug;
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-stusta.ads gcc-12.1.0/gcc/ada/libgnarl/s-stusta.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-stusta.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-stusta.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taasde.adb gcc-12.1.0/gcc/ada/libgnarl/s-taasde.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taasde.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taasde.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1998-2022, 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- --
*************** package body System.Tasking.Async_Delays
*** 264,271 ****
        Dequeued         : Delay_Block_Access;
        Dequeued_Task    : Task_Id;
  
-       pragma Unreferenced (Timedout, Yielded);
- 
     begin
        pragma Assert (Timer_Server_ID = STPO.Self);
  
--- 264,269 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taasde.ads gcc-12.1.0/gcc/ada/libgnarl/s-taasde.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taasde.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taasde.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tadeca.adb gcc-12.1.0/gcc/ada/libgnarl/s-tadeca.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tadeca.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tadeca.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tadeca.ads gcc-12.1.0/gcc/ada/libgnarl/s-tadeca.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tadeca.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tadeca.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tadert.adb gcc-12.1.0/gcc/ada/libgnarl/s-tadert.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tadert.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tadert.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tadert.ads gcc-12.1.0/gcc/ada/libgnarl/s-tadert.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tadert.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tadert.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                S p e c                                   --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                S p e c                                   --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taenca.adb gcc-12.1.0/gcc/ada/libgnarl/s-taenca.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taenca.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taenca.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taenca.ads gcc-12.1.0/gcc/ada/libgnarl/s-taenca.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taenca.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taenca.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taprob.adb gcc-12.1.0/gcc/ada/libgnarl/s-taprob.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taprob.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taprob.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  B o d y                                 --
  --                                                                          --
  --            Copyright (C) 1991-2017, Florida State University             --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                  B o d y                                 --
  --                                                                          --
  --            Copyright (C) 1991-2017, Florida State University             --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package body System.Tasking.Protected_Ob
*** 47,53 ****
     -- Local Data --
     ----------------
  
!    Locking_Policy : Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
  
     -------------------------
--- 47,53 ----
     -- Local Data --
     ----------------
  
!    Locking_Policy : constant Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
  
     -------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taprob.ads gcc-12.1.0/gcc/ada/libgnarl/s-taprob.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taprob.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taprob.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taprop.ads gcc-12.1.0/gcc/ada/libgnarl/s-taprop.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taprop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taprop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taprop__dummy.adb gcc-12.1.0/gcc/ada/libgnarl/s-taprop__dummy.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taprop__dummy.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taprop__dummy.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taprop__hpux-dce.adb gcc-12.1.0/gcc/ada/libgnarl/s-taprop__hpux-dce.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taprop__hpux-dce.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taprop__hpux-dce.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
*************** package body System.Task_Primitives.Oper
*** 87,96 ****
     Unblocked_Signal_Mask : aliased sigset_t;
     --  The set of signals that should unblocked in all tasks
  
!    Time_Slice_Val : Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
!    Dispatching_Policy : Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
     --  Note: the reason that Locking_Policy is not needed is that this
--- 87,96 ----
     Unblocked_Signal_Mask : aliased sigset_t;
     --  The set of signals that should unblocked in all tasks
  
!    Time_Slice_Val : constant Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
!    Dispatching_Policy : constant Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
     --  Note: the reason that Locking_Policy is not needed is that this
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-12.1.0/gcc/ada/libgnarl/s-taprop__linux.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taprop__linux.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taprop__linux.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
*************** package body System.Task_Primitives.Oper
*** 84,96 ****
     Next_Serial_Number : Task_Serial_Number := 100;
     --  We start at 100 (reserve some special values for using in error checks)
  
!    Time_Slice_Val : Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
!    Dispatching_Policy : Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
!    Locking_Policy : Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
  
     Foreign_Task_Elaborated : aliased Boolean := True;
--- 84,96 ----
     Next_Serial_Number : Task_Serial_Number := 100;
     --  We start at 100 (reserve some special values for using in error checks)
  
!    Time_Slice_Val : constant Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
!    Dispatching_Policy : constant Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
!    Locking_Policy : constant Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
  
     Foreign_Task_Elaborated : aliased Boolean := True;
*************** package body System.Task_Primitives.Oper
*** 973,980 ****
        elsif T.Common.Domain /= null and then
          (T.Common.Domain /= ST.System_Domain
            or else T.Common.Domain.all /=
!                     (Multiprocessors.CPU'First ..
!                      Multiprocessors.Number_Of_CPUs => True))
        then
           declare
              CPUs    : constant size_t :=
--- 973,980 ----
        elsif T.Common.Domain /= null and then
          (T.Common.Domain /= ST.System_Domain
            or else T.Common.Domain.all /=
!                     [Multiprocessors.CPU'First ..
!                      Multiprocessors.Number_Of_CPUs => True])
        then
           declare
              CPUs    : constant size_t :=
*************** package body System.Task_Primitives.Oper
*** 1494,1501 ****
              elsif T.Common.Domain /= null and then
                (T.Common.Domain /= ST.System_Domain
                  or else T.Common.Domain.all /=
!                           (Multiprocessors.CPU'First ..
!                            Multiprocessors.Number_Of_CPUs => True))
              then
                 --  Set the affinity to all the processors belonging to the
                 --  dispatching domain. To avoid changing CPU affinities when
--- 1494,1501 ----
              elsif T.Common.Domain /= null and then
                (T.Common.Domain /= ST.System_Domain
                  or else T.Common.Domain.all /=
!                           [Multiprocessors.CPU'First ..
!                            Multiprocessors.Number_Of_CPUs => True])
              then
                 --  Set the affinity to all the processors belonging to the
                 --  dispatching domain. To avoid changing CPU affinities when
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taprop__mingw.adb gcc-12.1.0/gcc/ada/libgnarl/s-taprop__mingw.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taprop__mingw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taprop__mingw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body System.Task_Primitives.Oper
*** 109,118 ****
     --  a time; it is used to execute in mutual exclusion from all other tasks.
     --  Used to protect All_Tasks_List
  
!    Time_Slice_Val : Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
!    Dispatching_Policy : Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
     function Get_Policy (Prio : System.Any_Priority) return Character;
--- 109,118 ----
     --  a time; it is used to execute in mutual exclusion from all other tasks.
     --  Used to protect All_Tasks_List
  
!    Time_Slice_Val : constant Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
!    Dispatching_Policy : constant Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
     function Get_Policy (Prio : System.Any_Priority) return Character;
*************** package body System.Task_Primitives.Oper
*** 559,565 ****
        Abs_Time   : Duration;
  
        Result : Integer;
-       pragma Unreferenced (Result);
  
        Local_Timedout : Boolean;
  
--- 559,564 ----
*************** package body System.Task_Primitives.Oper
*** 615,621 ****
  
        Timedout : Boolean;
        Result   : Integer;
-       pragma Unreferenced (Timedout, Result);
  
     begin
        Write_Lock (Self_ID);
--- 614,619 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taprop__posix.adb gcc-12.1.0/gcc/ada/libgnarl/s-taprop__posix.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taprop__posix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taprop__posix.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body System.Task_Primitives.Oper
*** 83,89 ****
     Environment_Task_Id : Task_Id;
     --  A variable to hold Task_Id for the environment task
  
!    Locking_Policy : Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
     --  Value of the pragma Locking_Policy:
     --    'C' for Ceiling_Locking
--- 83,89 ----
     Environment_Task_Id : Task_Id;
     --  A variable to hold Task_Id for the environment task
  
!    Locking_Policy : constant Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
     --  Value of the pragma Locking_Policy:
     --    'C' for Ceiling_Locking
*************** package body System.Task_Primitives.Oper
*** 99,108 ****
     --  We start at 100, to reserve some special values for
     --  using in error checking.
  
!    Time_Slice_Val : Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
!    Dispatching_Policy : Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
     Foreign_Task_Elaborated : aliased Boolean := True;
--- 99,108 ----
     --  We start at 100, to reserve some special values for
     --  using in error checking.
  
!    Time_Slice_Val : constant Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
!    Dispatching_Policy : constant Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
     Foreign_Task_Elaborated : aliased Boolean := True;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taprop__qnx.adb gcc-12.1.0/gcc/ada/libgnarl/s-taprop__qnx.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taprop__qnx.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taprop__qnx.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body System.Task_Primitives.Oper
*** 83,89 ****
     Environment_Task_Id : Task_Id;
     --  A variable to hold Task_Id for the environment task
  
!    Locking_Policy : Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
     --  Value of the pragma Locking_Policy:
     --    'C' for Ceiling_Locking
--- 83,89 ----
     Environment_Task_Id : Task_Id;
     --  A variable to hold Task_Id for the environment task
  
!    Locking_Policy : constant Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
     --  Value of the pragma Locking_Policy:
     --    'C' for Ceiling_Locking
*************** package body System.Task_Primitives.Oper
*** 99,108 ****
     --  We start at 100, to reserve some special values for
     --  using in error checking.
  
!    Time_Slice_Val : Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
!    Dispatching_Policy : Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
     Foreign_Task_Elaborated : aliased Boolean := True;
--- 99,108 ----
     --  We start at 100, to reserve some special values for
     --  using in error checking.
  
!    Time_Slice_Val : constant Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
!    Dispatching_Policy : constant Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
     Foreign_Task_Elaborated : aliased Boolean := True;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taprop__rtems.adb gcc-12.1.0/gcc/ada/libgnarl/s-taprop__rtems.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taprop__rtems.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnarl/s-taprop__rtems.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,1347 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
+ --                                                                          --
+ --     S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S    --
+ --                                                                          --
+ --                                  B o d y                                 --
+ --                                                                          --
+ --          Copyright (C) 1992-2022, 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 RTEMS version of this package
+ 
+ --  This package contains all the GNULL primitives that interface directly with
+ --  the underlying OS.
+ 
+ with Ada.Unchecked_Conversion;
+ 
+ with Interfaces.C;
+ 
+ with System.Tasking.Debug;
+ with System.Interrupt_Management;
+ with System.OS_Constants;
+ with System.OS_Primitives;
+ with System.Task_Info;
+ 
+ with System.Soft_Links;
+ --  We use System.Soft_Links instead of System.Tasking.Initialization
+ --  because the later is a higher level package that we shouldn't depend on.
+ --  For example when using the restricted run time, it is replaced by
+ --  System.Tasking.Restricted.Stages.
+ 
+ package body System.Task_Primitives.Operations is
+ 
+    package OSC renames System.OS_Constants;
+    package SSL renames System.Soft_Links;
+ 
+    use System.Tasking.Debug;
+    use System.Tasking;
+    use Interfaces.C;
+    use System.OS_Interface;
+    use System.Parameters;
+    use System.OS_Primitives;
+ 
+    ----------------
+    -- Local Data --
+    ----------------
+ 
+    --  The followings are logically constants, but need to be initialized
+    --  at run time.
+ 
+    Single_RTS_Lock : aliased RTS_Lock;
+    --  This is a lock to allow only one thread of control in the RTS at
+    --  a time; it is used to execute in mutual exclusion from all other tasks.
+    --  Used to protect All_Tasks_List
+ 
+    Environment_Task_Id : Task_Id;
+    --  A variable to hold Task_Id for the environment task
+ 
+    Locking_Policy : constant Character;
+    pragma Import (C, Locking_Policy, "__gl_locking_policy");
+    --  Value of the pragma Locking_Policy:
+    --    'C' for Ceiling_Locking
+    --    'I' for Inherit_Locking
+    --    ' ' for none.
+ 
+    --  The followings are internal configuration constants needed
+ 
+    Next_Serial_Number : Task_Serial_Number := 100;
+    --  We start at 100, to reserve some special values for
+    --  using in error checking.
+ 
+    Time_Slice_Val : constant Integer;
+    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
+ 
+    Dispatching_Policy : constant Character;
+    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
+ 
+    Foreign_Task_Elaborated : aliased Boolean := True;
+    --  Used to identified fake tasks (i.e., non-Ada Threads)
+ 
+    Use_Alternate_Stack : constant Boolean := Alternate_Stack_Size /= 0;
+    --  Whether to use an alternate signal stack for stack overflows
+ 
+    Abort_Handler_Installed : Boolean := False;
+    --  True if a handler for the abort signal is installed
+ 
+    --------------------
+    -- Local Packages --
+    --------------------
+ 
+    package Specific is
+ 
+       procedure Initialize (Environment_Task : Task_Id);
+       pragma Inline (Initialize);
+       --  Initialize various data needed by this package
+ 
+       function Is_Valid_Task return Boolean;
+       pragma Inline (Is_Valid_Task);
+       --  Does executing thread have a TCB?
+ 
+       procedure Set (Self_Id : Task_Id);
+       pragma Inline (Set);
+       --  Set the self id for the current task
+ 
+       function Self return Task_Id;
+       pragma Inline (Self);
+       --  Return a pointer to the Ada Task Control Block of the calling task
+ 
+    end Specific;
+ 
+    package body Specific is separate;
+    --  The body of this package is target specific
+ 
+    package Monotonic is
+ 
+       function Monotonic_Clock return Duration;
+       pragma Inline (Monotonic_Clock);
+       --  Returns an absolute time, represented as an offset relative to some
+       --  unspecified starting point, typically system boot time.  This clock
+       --  is not affected by discontinuous jumps in the system time.
+ 
+       function RT_Resolution return Duration;
+       pragma Inline (RT_Resolution);
+       --  Returns resolution of the underlying clock used to implement RT_Clock
+ 
+       procedure Timed_Sleep
+         (Self_ID  : ST.Task_Id;
+          Time     : Duration;
+          Mode     : ST.Delay_Modes;
+          Reason   : System.Tasking.Task_States;
+          Timedout : out Boolean;
+          Yielded  : out Boolean);
+       --  Combination of Sleep (above) and Timed_Delay
+ 
+       procedure Timed_Delay
+         (Self_ID : ST.Task_Id;
+          Time    : Duration;
+          Mode    : ST.Delay_Modes);
+       --  Implement the semantics of the delay statement.
+       --  The caller should be abort-deferred and should not hold any locks.
+ 
+    end Monotonic;
+ 
+    package body Monotonic is separate;
+ 
+    ----------------------------------
+    -- ATCB allocation/deallocation --
+    ----------------------------------
+ 
+    package body ATCB_Allocation is separate;
+    --  The body of this package is shared across several targets
+ 
+    ---------------------------------
+    -- Support for foreign threads --
+    ---------------------------------
+ 
+    function Register_Foreign_Thread
+      (Thread         : Thread_Id;
+       Sec_Stack_Size : Size_Type := Unspecified_Size) return Task_Id;
+    --  Allocate and initialize a new ATCB for the current Thread. The size of
+    --  the secondary stack can be optionally specified.
+ 
+    function Register_Foreign_Thread
+      (Thread         : Thread_Id;
+       Sec_Stack_Size : Size_Type := Unspecified_Size)
+      return Task_Id is separate;
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    procedure Abort_Handler (Sig : Signal);
+    --  Signal handler used to implement asynchronous abort.
+    --  See also comment before body, below.
+ 
+    function To_Address is
+      new Ada.Unchecked_Conversion (Task_Id, System.Address);
+ 
+    function GNAT_pthread_condattr_setup
+      (attr : access pthread_condattr_t) return int;
+    pragma Import (C,
+      GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
+ 
+    -------------------
+    -- Abort_Handler --
+    -------------------
+ 
+    --  Target-dependent binding of inter-thread Abort signal to the raising of
+    --  the Abort_Signal exception.
+ 
+    --  The technical issues and alternatives here are essentially the
+    --  same as for raising exceptions in response to other signals
+    --  (e.g. Storage_Error). See code and comments in the package body
+    --  System.Interrupt_Management.
+ 
+    --  Some implementations may not allow an exception to be propagated out of
+    --  a handler, and others might leave the signal or interrupt that invoked
+    --  this handler masked after the exceptional return to the application
+    --  code.
+ 
+    --  GNAT exceptions are originally implemented using setjmp()/longjmp(). On
+    --  most UNIX systems, this will allow transfer out of a signal handler,
+    --  which is usually the only mechanism available for implementing
+    --  asynchronous handlers of this kind. However, some systems do not
+    --  restore the signal mask on longjmp(), leaving the abort signal masked.
+ 
+    procedure Abort_Handler (Sig : Signal) is
+       pragma Unreferenced (Sig);
+ 
+       T              : constant Task_Id := Self;
+       Old_Set        : aliased sigset_t;
+       Unblocked_Mask : aliased sigset_t;
+       Result         : Interfaces.C.int;
+       pragma Warnings (Off, Result);
+ 
+    begin
+       --  It's not safe to raise an exception when using GCC ZCX mechanism.
+       --  Note that we still need to install a signal handler, since in some
+       --  cases (e.g. shutdown of the Server_Task in System.Interrupts) we
+       --  need to send the Abort signal to a task.
+ 
+       if ZCX_By_Default then
+          return;
+       end if;
+ 
+       if T.Deferral_Level = 0
+         and then T.Pending_ATC_Level < T.ATC_Nesting_Level and then
+         not T.Aborting
+       then
+          T.Aborting := True;
+ 
+          --  Make sure signals used for RTS internal purpose are unmasked
+ 
+          Result := sigemptyset (Unblocked_Mask'Access);
+          pragma Assert (Result = 0);
+          Result :=
+            sigaddset
+            (Unblocked_Mask'Access,
+             Signal (Interrupt_Management.Abort_Task_Interrupt));
+          pragma Assert (Result = 0);
+          Result := sigaddset (Unblocked_Mask'Access, SIGBUS);
+          pragma Assert (Result = 0);
+          Result := sigaddset (Unblocked_Mask'Access, SIGFPE);
+          pragma Assert (Result = 0);
+          Result := sigaddset (Unblocked_Mask'Access, SIGILL);
+          pragma Assert (Result = 0);
+          Result := sigaddset (Unblocked_Mask'Access, SIGSEGV);
+          pragma Assert (Result = 0);
+ 
+          Result :=
+            pthread_sigmask
+              (SIG_UNBLOCK,
+               Unblocked_Mask'Access,
+               Old_Set'Access);
+          pragma Assert (Result = 0);
+ 
+          raise Standard'Abort_Signal;
+       end if;
+    end Abort_Handler;
+ 
+    -----------------
+    -- Stack_Guard --
+    -----------------
+ 
+    procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
+       Stack_Base : constant Address := Get_Stack_Base (T.Common.LL.Thread);
+       Page_Size  : Address;
+       Res        : Interfaces.C.int;
+ 
+    begin
+       if Stack_Base_Available then
+ 
+          --  Compute the guard page address
+ 
+          Page_Size := Address (Get_Page_Size);
+          Res :=
+            mprotect
+              (Stack_Base - (Stack_Base mod Page_Size) + Page_Size,
+               size_t (Page_Size),
+               prot => (if On then PROT_ON else PROT_OFF));
+          pragma Assert (Res = 0);
+       end if;
+    end Stack_Guard;
+ 
+    --------------------
+    -- Get_Thread_Id  --
+    --------------------
+ 
+    function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
+    begin
+       return T.Common.LL.Thread;
+    end Get_Thread_Id;
+ 
+    ----------
+    -- Self --
+    ----------
+ 
+    function Self return Task_Id renames Specific.Self;
+ 
+    ---------------------
+    -- Initialize_Lock --
+    ---------------------
+ 
+    --  Note: mutexes and cond_variables needed per-task basis are initialized
+    --  in Initialize_TCB and the Storage_Error is handled. Other mutexes (such
+    --  as RTS_Lock, Memory_Lock...) used in RTS is initialized before any
+    --  status change of RTS. Therefore raising Storage_Error in the following
+    --  routines should be able to be handled safely.
+ 
+    procedure Initialize_Lock
+      (Prio : System.Any_Priority;
+       L    : not null access Lock)
+    is
+       Attributes : aliased pthread_mutexattr_t;
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       if Locking_Policy = 'C' then
+          Result := pthread_mutexattr_setprotocol
+            (Attributes'Access, PTHREAD_PRIO_PROTECT);
+          pragma Assert (Result = 0);
+ 
+          Result := pthread_mutexattr_setprioceiling
+             (Attributes'Access, Interfaces.C.int (Prio));
+          pragma Assert (Result = 0);
+ 
+       elsif Locking_Policy = 'I' then
+          Result := pthread_mutexattr_setprotocol
+            (Attributes'Access, PTHREAD_PRIO_INHERIT);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_mutex_init (L.WO'Access, Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          Result := pthread_mutexattr_destroy (Attributes'Access);
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    procedure Initialize_Lock
+      (L : not null access RTS_Lock; Level : Lock_Level)
+    is
+       pragma Unreferenced (Level);
+ 
+       Attributes : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutexattr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       if Locking_Policy = 'C' then
+          Result := pthread_mutexattr_setprotocol
+            (Attributes'Access, PTHREAD_PRIO_PROTECT);
+          pragma Assert (Result = 0);
+ 
+          Result := pthread_mutexattr_setprioceiling
+             (Attributes'Access, Interfaces.C.int (System.Any_Priority'Last));
+          pragma Assert (Result = 0);
+ 
+       elsif Locking_Policy = 'I' then
+          Result := pthread_mutexattr_setprotocol
+            (Attributes'Access, PTHREAD_PRIO_INHERIT);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_mutex_init (L, Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          Result := pthread_mutexattr_destroy (Attributes'Access);
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+    end Initialize_Lock;
+ 
+    -------------------
+    -- Finalize_Lock --
+    -------------------
+ 
+    procedure Finalize_Lock (L : not null access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L.WO'Access);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    procedure Finalize_Lock (L : not null access RTS_Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_destroy (L);
+       pragma Assert (Result = 0);
+    end Finalize_Lock;
+ 
+    ----------------
+    -- Write_Lock --
+    ----------------
+ 
+    procedure Write_Lock
+      (L : not null access Lock; Ceiling_Violation : out Boolean)
+    is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutex_lock (L.WO'Access);
+ 
+       --  The cause of EINVAL is a priority ceiling violation
+ 
+       Ceiling_Violation := Result = EINVAL;
+       pragma Assert (Result = 0 or else Ceiling_Violation);
+    end Write_Lock;
+ 
+    procedure Write_Lock (L : not null access RTS_Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_lock (L);
+       pragma Assert (Result = 0);
+    end Write_Lock;
+ 
+    procedure Write_Lock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_lock (T.Common.LL.L'Access);
+       pragma Assert (Result = 0);
+    end Write_Lock;
+ 
+    ---------------
+    -- Read_Lock --
+    ---------------
+ 
+    procedure Read_Lock
+      (L : not null access Lock; Ceiling_Violation : out Boolean) is
+    begin
+       Write_Lock (L, Ceiling_Violation);
+    end Read_Lock;
+ 
+    ------------
+    -- Unlock --
+    ------------
+ 
+    procedure Unlock (L : not null access Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_unlock (L.WO'Access);
+       pragma Assert (Result = 0);
+    end Unlock;
+ 
+    procedure Unlock (L : not null access RTS_Lock) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_unlock (L);
+       pragma Assert (Result = 0);
+    end Unlock;
+ 
+    procedure Unlock (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_mutex_unlock (T.Common.LL.L'Access);
+       pragma Assert (Result = 0);
+    end Unlock;
+ 
+    -----------------
+    -- Set_Ceiling --
+    -----------------
+ 
+    --  Dynamic priority ceilings are not supported by the underlying system
+ 
+    procedure Set_Ceiling
+      (L    : not null access Lock;
+       Prio : System.Any_Priority)
+    is
+       pragma Unreferenced (L, Prio);
+    begin
+       null;
+    end Set_Ceiling;
+ 
+    -----------
+    -- Sleep --
+    -----------
+ 
+    procedure Sleep
+      (Self_ID : Task_Id;
+       Reason  : System.Tasking.Task_States)
+    is
+       pragma Unreferenced (Reason);
+ 
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result :=
+         pthread_cond_wait
+           (cond  => Self_ID.Common.LL.CV'Access,
+            mutex => Self_ID.Common.LL.L'Access);
+ 
+       --  EINTR is not considered a failure
+ 
+       pragma Assert (Result = 0 or else Result = EINTR);
+    end Sleep;
+ 
+    -----------------
+    -- Timed_Sleep --
+    -----------------
+ 
+    --  This is for use within the run-time system, so abort is
+    --  assumed to be already deferred, and the caller should be
+    --  holding its own ATCB lock.
+ 
+    procedure Timed_Sleep
+      (Self_ID  : Task_Id;
+       Time     : Duration;
+       Mode     : ST.Delay_Modes;
+       Reason   : Task_States;
+       Timedout : out Boolean;
+       Yielded  : out Boolean) renames Monotonic.Timed_Sleep;
+ 
+    -----------------
+    -- Timed_Delay --
+    -----------------
+ 
+    --  This is for use in implementing delay statements, so we assume the
+    --  caller is abort-deferred but is holding no locks.
+ 
+    procedure Timed_Delay
+      (Self_ID : Task_Id;
+       Time    : Duration;
+       Mode    : ST.Delay_Modes) renames Monotonic.Timed_Delay;
+ 
+    ---------------------
+    -- Monotonic_Clock --
+    ---------------------
+ 
+    function Monotonic_Clock return Duration renames Monotonic.Monotonic_Clock;
+ 
+    -------------------
+    -- RT_Resolution --
+    -------------------
+ 
+    function RT_Resolution return Duration renames Monotonic.RT_Resolution;
+ 
+    ------------
+    -- Wakeup --
+    ------------
+ 
+    procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
+       pragma Unreferenced (Reason);
+       Result : Interfaces.C.int;
+    begin
+       Result := pthread_cond_signal (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+    end Wakeup;
+ 
+    -----------
+    -- Yield --
+    -----------
+ 
+    procedure Yield (Do_Yield : Boolean := True) is
+       Result : Interfaces.C.int;
+       pragma Unreferenced (Result);
+    begin
+       if Do_Yield then
+          Result := sched_yield;
+       end if;
+    end Yield;
+ 
+    ------------------
+    -- Set_Priority --
+    ------------------
+ 
+    procedure Set_Priority
+      (T                   : Task_Id;
+       Prio                : System.Any_Priority;
+       Loss_Of_Inheritance : Boolean := False)
+    is
+       pragma Unreferenced (Loss_Of_Inheritance);
+ 
+       Result : Interfaces.C.int;
+       Param  : aliased struct_sched_param;
+ 
+       function Get_Policy (Prio : System.Any_Priority) return Character;
+       pragma Import (C, Get_Policy, "__gnat_get_specific_dispatching");
+       --  Get priority specific dispatching policy
+ 
+       Priority_Specific_Policy : constant Character := Get_Policy (Prio);
+       --  Upper case first character of the policy name corresponding to the
+       --  task as set by a Priority_Specific_Dispatching pragma.
+ 
+    begin
+       T.Common.Current_Priority := Prio;
+       Param.sched_priority := To_Target_Priority (Prio);
+ 
+       if Time_Slice_Supported
+         and then (Dispatching_Policy = 'R'
+                   or else Priority_Specific_Policy = 'R'
+                   or else Time_Slice_Val > 0)
+       then
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_RR, Param'Access);
+ 
+       elsif Dispatching_Policy = 'F'
+         or else Priority_Specific_Policy = 'F'
+         or else Time_Slice_Val = 0
+       then
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
+ 
+       else
+          Result := pthread_setschedparam
+            (T.Common.LL.Thread, SCHED_OTHER, Param'Access);
+       end if;
+ 
+       pragma Assert (Result = 0);
+    end Set_Priority;
+ 
+    ------------------
+    -- Get_Priority --
+    ------------------
+ 
+    function Get_Priority (T : Task_Id) return System.Any_Priority is
+    begin
+       return T.Common.Current_Priority;
+    end Get_Priority;
+ 
+    ----------------
+    -- Enter_Task --
+    ----------------
+ 
+    procedure Enter_Task (Self_ID : Task_Id) is
+    begin
+       Self_ID.Common.LL.Thread := pthread_self;
+       Self_ID.Common.LL.LWP := lwp_self;
+ 
+       Specific.Set (Self_ID);
+ 
+       if Use_Alternate_Stack then
+          declare
+             Stack  : aliased stack_t;
+             Result : Interfaces.C.int;
+          begin
+             Stack.ss_sp    := Self_ID.Common.Task_Alternate_Stack;
+             Stack.ss_size  := Alternate_Stack_Size;
+             Stack.ss_flags := 0;
+             Result := sigaltstack (Stack'Access, null);
+             pragma Assert (Result = 0);
+          end;
+       end if;
+    end Enter_Task;
+ 
+    -------------------
+    -- Is_Valid_Task --
+    -------------------
+ 
+    function Is_Valid_Task return Boolean renames Specific.Is_Valid_Task;
+ 
+    -----------------------------
+    -- Register_Foreign_Thread --
+    -----------------------------
+ 
+    function Register_Foreign_Thread return Task_Id is
+    begin
+       if Is_Valid_Task then
+          return Self;
+       else
+          return Register_Foreign_Thread (pthread_self);
+       end if;
+    end Register_Foreign_Thread;
+ 
+    --------------------
+    -- Initialize_TCB --
+    --------------------
+ 
+    procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
+       Mutex_Attr : aliased pthread_mutexattr_t;
+       Result     : Interfaces.C.int;
+       Cond_Attr  : aliased pthread_condattr_t;
+ 
+    begin
+       --  Give the task a unique serial number
+ 
+       Self_ID.Serial_Number := Next_Serial_Number;
+       Next_Serial_Number := Next_Serial_Number + 1;
+       pragma Assert (Next_Serial_Number /= 0);
+ 
+       Result := pthread_mutexattr_init (Mutex_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = 0 then
+          if Locking_Policy = 'C' then
+             Result :=
+               pthread_mutexattr_setprotocol
+                 (Mutex_Attr'Access,
+                  PTHREAD_PRIO_PROTECT);
+             pragma Assert (Result = 0);
+ 
+             Result :=
+               pthread_mutexattr_setprioceiling
+                 (Mutex_Attr'Access,
+                  Interfaces.C.int (System.Any_Priority'Last));
+             pragma Assert (Result = 0);
+ 
+          elsif Locking_Policy = 'I' then
+             Result :=
+               pthread_mutexattr_setprotocol
+                 (Mutex_Attr'Access,
+                  PTHREAD_PRIO_INHERIT);
+             pragma Assert (Result = 0);
+          end if;
+ 
+          Result :=
+            pthread_mutex_init
+                 (Self_ID.Common.LL.L'Access,
+               Mutex_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+       end if;
+ 
+       if Result /= 0 then
+          Succeeded := False;
+          return;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
+       pragma Assert (Result = 0);
+ 
+       Result := pthread_condattr_init (Cond_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = 0 then
+          Result := GNAT_pthread_condattr_setup (Cond_Attr'Access);
+          pragma Assert (Result = 0);
+ 
+          Result :=
+            pthread_cond_init
+              (Self_ID.Common.LL.CV'Access, Cond_Attr'Access);
+          pragma Assert (Result = 0 or else Result = ENOMEM);
+       end if;
+ 
+       if Result = 0 then
+          Succeeded := True;
+       else
+          Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
+          pragma Assert (Result = 0);
+          Succeeded := False;
+       end if;
+ 
+       Result := pthread_condattr_destroy (Cond_Attr'Access);
+       pragma Assert (Result = 0);
+    end Initialize_TCB;
+ 
+    -----------------
+    -- Create_Task --
+    -----------------
+ 
+    procedure Create_Task
+      (T          : Task_Id;
+       Wrapper    : System.Address;
+       Stack_Size : System.Parameters.Size_Type;
+       Priority   : System.Any_Priority;
+       Succeeded  : out Boolean)
+    is
+       Attributes          : aliased pthread_attr_t;
+       Adjusted_Stack_Size : Interfaces.C.size_t;
+       Page_Size           : constant Interfaces.C.size_t :=
+                               Interfaces.C.size_t (Get_Page_Size);
+       Result              : Interfaces.C.int;
+ 
+       function Thread_Body_Access is new
+         Ada.Unchecked_Conversion (System.Address, Thread_Body);
+ 
+       use System.Task_Info;
+ 
+    begin
+       Adjusted_Stack_Size :=
+          Interfaces.C.size_t (Stack_Size + Alternate_Stack_Size);
+ 
+       if Stack_Base_Available then
+ 
+          --  If Stack Checking is supported then allocate 2 additional pages:
+ 
+          --  In the worst case, stack is allocated at something like
+          --  N * Get_Page_Size - epsilon, we need to add the size for 2 pages
+          --  to be sure the effective stack size is greater than what
+          --  has been asked.
+ 
+          Adjusted_Stack_Size := Adjusted_Stack_Size + 2 * Page_Size;
+       end if;
+ 
+       --  Round stack size as this is required by some OSes (Darwin)
+ 
+       Adjusted_Stack_Size := Adjusted_Stack_Size + Page_Size - 1;
+       Adjusted_Stack_Size :=
+         Adjusted_Stack_Size - Adjusted_Stack_Size mod Page_Size;
+ 
+       Result := pthread_attr_init (Attributes'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result /= 0 then
+          Succeeded := False;
+          return;
+       end if;
+ 
+       Result :=
+         pthread_attr_setdetachstate
+           (Attributes'Access, PTHREAD_CREATE_DETACHED);
+       pragma Assert (Result = 0);
+ 
+       Result :=
+         pthread_attr_setstacksize
+           (Attributes'Access, Adjusted_Stack_Size);
+       pragma Assert (Result = 0);
+ 
+       if T.Common.Task_Info /= Default_Scope then
+          case T.Common.Task_Info is
+             when System.Task_Info.Process_Scope =>
+                Result :=
+                  pthread_attr_setscope
+                    (Attributes'Access, PTHREAD_SCOPE_PROCESS);
+ 
+             when System.Task_Info.System_Scope =>
+                Result :=
+                  pthread_attr_setscope
+                    (Attributes'Access, PTHREAD_SCOPE_SYSTEM);
+ 
+             when System.Task_Info.Default_Scope =>
+                Result := 0;
+          end case;
+ 
+          pragma Assert (Result = 0);
+       end if;
+ 
+       --  Since the initial signal mask of a thread is inherited from the
+       --  creator, and the Environment task has all its signals masked, we
+       --  do not need to manipulate caller's signal mask at this point.
+       --  All tasks in RTS will have All_Tasks_Mask initially.
+ 
+       --  Note: the use of Unrestricted_Access in the following call is needed
+       --  because otherwise we have an error of getting a access-to-volatile
+       --  value which points to a non-volatile object. But in this case it is
+       --  safe to do this, since we know we have no problems with aliasing and
+       --  Unrestricted_Access bypasses this check.
+ 
+       Result := pthread_create
+         (T.Common.LL.Thread'Unrestricted_Access,
+          Attributes'Access,
+          Thread_Body_Access (Wrapper),
+          To_Address (T));
+       pragma Assert (Result = 0 or else Result = EAGAIN);
+ 
+       Succeeded := Result = 0;
+ 
+       Result := pthread_attr_destroy (Attributes'Access);
+       pragma Assert (Result = 0);
+ 
+       if Succeeded then
+          Set_Priority (T, Priority);
+       end if;
+    end Create_Task;
+ 
+    ------------------
+    -- Finalize_TCB --
+    ------------------
+ 
+    procedure Finalize_TCB (T : Task_Id) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       Result := pthread_mutex_destroy (T.Common.LL.L'Access);
+       pragma Assert (Result = 0);
+ 
+       Result := pthread_cond_destroy (T.Common.LL.CV'Access);
+       pragma Assert (Result = 0);
+ 
+       if T.Known_Tasks_Index /= -1 then
+          Known_Tasks (T.Known_Tasks_Index) := null;
+       end if;
+ 
+       ATCB_Allocation.Free_ATCB (T);
+    end Finalize_TCB;
+ 
+    ---------------
+    -- Exit_Task --
+    ---------------
+ 
+    procedure Exit_Task is
+    begin
+       --  Mark this task as unknown, so that if Self is called, it won't
+       --  return a dangling pointer.
+ 
+       Specific.Set (null);
+    end Exit_Task;
+ 
+    ----------------
+    -- Abort_Task --
+    ----------------
+ 
+    procedure Abort_Task (T : Task_Id) is
+       Result : Interfaces.C.int;
+    begin
+       if Abort_Handler_Installed then
+          Result :=
+            pthread_kill
+              (T.Common.LL.Thread,
+               Signal (System.Interrupt_Management.Abort_Task_Interrupt));
+          pragma Assert (Result = 0);
+       end if;
+    end Abort_Task;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (S : in out Suspension_Object) is
+       Mutex_Attr : aliased pthread_mutexattr_t;
+       Cond_Attr  : aliased pthread_condattr_t;
+       Result     : Interfaces.C.int;
+ 
+    begin
+       --  Initialize internal state (always to False (RM D.10 (6)))
+ 
+       S.State := False;
+       S.Waiting := False;
+ 
+       --  Initialize internal mutex
+ 
+       Result := pthread_mutexattr_init (Mutex_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutex_init (S.L'Access, Mutex_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result = ENOMEM then
+          Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
+          pragma Assert (Result = 0);
+ 
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
+       pragma Assert (Result = 0);
+ 
+       --  Initialize internal condition variable
+ 
+       Result := pthread_condattr_init (Cond_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result /= 0 then
+          Result := pthread_mutex_destroy (S.L'Access);
+          pragma Assert (Result = 0);
+ 
+          --  Storage_Error is propagated as intended if the allocation of the
+          --  underlying OS entities fails.
+ 
+          raise Storage_Error;
+ 
+       else
+          Result := GNAT_pthread_condattr_setup (Cond_Attr'Access);
+          pragma Assert (Result = 0);
+       end if;
+ 
+       Result := pthread_cond_init (S.CV'Access, Cond_Attr'Access);
+       pragma Assert (Result = 0 or else Result = ENOMEM);
+ 
+       if Result /= 0 then
+          Result := pthread_mutex_destroy (S.L'Access);
+          pragma Assert (Result = 0);
+ 
+          Result := pthread_condattr_destroy (Cond_Attr'Access);
+          pragma Assert (Result = 0);
+ 
+          --  Storage_Error is propagated as intended if the allocation of the
+          --  underlying OS entities fails.
+ 
+          raise Storage_Error;
+       end if;
+ 
+       Result := pthread_condattr_destroy (Cond_Attr'Access);
+       pragma Assert (Result = 0);
+    end Initialize;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize (S : in out Suspension_Object) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       --  Destroy internal mutex
+ 
+       Result := pthread_mutex_destroy (S.L'Access);
+       pragma Assert (Result = 0);
+ 
+       --  Destroy internal condition variable
+ 
+       Result := pthread_cond_destroy (S.CV'Access);
+       pragma Assert (Result = 0);
+    end Finalize;
+ 
+    -------------------
+    -- Current_State --
+    -------------------
+ 
+    function Current_State (S : Suspension_Object) return Boolean is
+    begin
+       --  We do not want to use lock on this read operation. State is marked
+       --  as Atomic so that we ensure that the value retrieved is correct.
+ 
+       return S.State;
+    end Current_State;
+ 
+    ---------------
+    -- Set_False --
+    ---------------
+ 
+    procedure Set_False (S : in out Suspension_Object) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       SSL.Abort_Defer.all;
+ 
+       Result := pthread_mutex_lock (S.L'Access);
+       pragma Assert (Result = 0);
+ 
+       S.State := False;
+ 
+       Result := pthread_mutex_unlock (S.L'Access);
+       pragma Assert (Result = 0);
+ 
+       SSL.Abort_Undefer.all;
+    end Set_False;
+ 
+    --------------
+    -- Set_True --
+    --------------
+ 
+    procedure Set_True (S : in out Suspension_Object) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       SSL.Abort_Defer.all;
+ 
+       Result := pthread_mutex_lock (S.L'Access);
+       pragma Assert (Result = 0);
+ 
+       --  If there is already a task waiting on this suspension object then
+       --  we resume it, leaving the state of the suspension object to False,
+       --  as it is specified in (RM D.10(9)). Otherwise, it just leaves
+       --  the state to True.
+ 
+       if S.Waiting then
+          S.Waiting := False;
+          S.State := False;
+ 
+          Result := pthread_cond_signal (S.CV'Access);
+          pragma Assert (Result = 0);
+ 
+       else
+          S.State := True;
+       end if;
+ 
+       Result := pthread_mutex_unlock (S.L'Access);
+       pragma Assert (Result = 0);
+ 
+       SSL.Abort_Undefer.all;
+    end Set_True;
+ 
+    ------------------------
+    -- Suspend_Until_True --
+    ------------------------
+ 
+    procedure Suspend_Until_True (S : in out Suspension_Object) is
+       Result : Interfaces.C.int;
+ 
+    begin
+       SSL.Abort_Defer.all;
+ 
+       Result := pthread_mutex_lock (S.L'Access);
+       pragma Assert (Result = 0);
+ 
+       if S.Waiting then
+ 
+          --  Program_Error must be raised upon calling Suspend_Until_True
+          --  if another task is already waiting on that suspension object
+          --  (RM D.10(10)).
+ 
+          Result := pthread_mutex_unlock (S.L'Access);
+          pragma Assert (Result = 0);
+ 
+          SSL.Abort_Undefer.all;
+ 
+          raise Program_Error;
+ 
+       else
+          --  Suspend the task if the state is False. Otherwise, the task
+          --  continues its execution, and the state of the suspension object
+          --  is set to False (ARM D.10 par. 9).
+ 
+          if S.State then
+             S.State := False;
+          else
+             S.Waiting := True;
+ 
+             loop
+                --  Loop in case pthread_cond_wait returns earlier than expected
+                --  (e.g. in case of EINTR caused by a signal).
+ 
+                Result := pthread_cond_wait (S.CV'Access, S.L'Access);
+                pragma Assert (Result = 0 or else Result = EINTR);
+ 
+                exit when not S.Waiting;
+             end loop;
+          end if;
+ 
+          Result := pthread_mutex_unlock (S.L'Access);
+          pragma Assert (Result = 0);
+ 
+          SSL.Abort_Undefer.all;
+       end if;
+    end Suspend_Until_True;
+ 
+    ----------------
+    -- Check_Exit --
+    ----------------
+ 
+    --  Dummy version
+ 
+    function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_Exit;
+ 
+    --------------------
+    -- Check_No_Locks --
+    --------------------
+ 
+    function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
+       pragma Unreferenced (Self_ID);
+    begin
+       return True;
+    end Check_No_Locks;
+ 
+    ----------------------
+    -- Environment_Task --
+    ----------------------
+ 
+    function Environment_Task return Task_Id is
+    begin
+       return Environment_Task_Id;
+    end Environment_Task;
+ 
+    --------------
+    -- Lock_RTS --
+    --------------
+ 
+    procedure Lock_RTS is
+    begin
+       Write_Lock (Single_RTS_Lock'Access);
+    end Lock_RTS;
+ 
+    ----------------
+    -- Unlock_RTS --
+    ----------------
+ 
+    procedure Unlock_RTS is
+    begin
+       Unlock (Single_RTS_Lock'Access);
+    end Unlock_RTS;
+ 
+    ------------------
+    -- Suspend_Task --
+    ------------------
+ 
+    function Suspend_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Unreferenced (T, Thread_Self);
+    begin
+       return False;
+    end Suspend_Task;
+ 
+    -----------------
+    -- Resume_Task --
+    -----------------
+ 
+    function Resume_Task
+      (T           : ST.Task_Id;
+       Thread_Self : Thread_Id) return Boolean
+    is
+       pragma Unreferenced (T, Thread_Self);
+    begin
+       return False;
+    end Resume_Task;
+ 
+    --------------------
+    -- Stop_All_Tasks --
+    --------------------
+ 
+    procedure Stop_All_Tasks is
+    begin
+       null;
+    end Stop_All_Tasks;
+ 
+    ---------------
+    -- Stop_Task --
+    ---------------
+ 
+    function Stop_Task (T : ST.Task_Id) return Boolean is
+       pragma Unreferenced (T);
+    begin
+       return False;
+    end Stop_Task;
+ 
+    -------------------
+    -- Continue_Task --
+    -------------------
+ 
+    function Continue_Task (T : ST.Task_Id) return Boolean is
+       pragma Unreferenced (T);
+    begin
+       return False;
+    end Continue_Task;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize (Environment_Task : Task_Id) is
+       act     : aliased struct_sigaction;
+       old_act : aliased struct_sigaction;
+       Tmp_Set : aliased sigset_t;
+       Result  : Interfaces.C.int;
+ 
+       function State
+         (Int : System.Interrupt_Management.Interrupt_ID) return Character;
+       pragma Import (C, State, "__gnat_get_interrupt_state");
+       --  Get interrupt state.  Defined in a-init.c
+       --  The input argument is the interrupt number,
+       --  and the result is one of the following:
+ 
+       Default : constant Character := 's';
+       --    'n'   this interrupt not set by any Interrupt_State pragma
+       --    'u'   Interrupt_State pragma set state to User
+       --    'r'   Interrupt_State pragma set state to Runtime
+       --    's'   Interrupt_State pragma set state to System (use "default"
+       --           system handler)
+ 
+    begin
+       Environment_Task_Id := Environment_Task;
+ 
+       Interrupt_Management.Initialize;
+ 
+       --  Initialize the lock used to synchronize chain of all ATCBs
+ 
+       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);
+ 
+       Specific.Initialize (Environment_Task);
+ 
+       if Use_Alternate_Stack then
+          Environment_Task.Common.Task_Alternate_Stack :=
+            Alternate_Stack'Address;
+       end if;
+ 
+       --  Make environment task known here because it doesn't go through
+       --  Activate_Tasks, which does it for all other tasks.
+ 
+       Known_Tasks (Known_Tasks'First) := Environment_Task;
+       Environment_Task.Known_Tasks_Index := Known_Tasks'First;
+ 
+       Enter_Task (Environment_Task);
+ 
+       if State
+           (System.Interrupt_Management.Abort_Task_Interrupt) /= Default
+       then
+          act.sa_flags := 0;
+          act.sa_handler := Abort_Handler'Address;
+ 
+          Result := sigemptyset (Tmp_Set'Access);
+          pragma Assert (Result = 0);
+          act.sa_mask := Tmp_Set;
+ 
+          Result :=
+            sigaction
+              (Signal (System.Interrupt_Management.Abort_Task_Interrupt),
+               act'Unchecked_Access,
+               old_act'Unchecked_Access);
+          pragma Assert (Result = 0);
+          Abort_Handler_Installed := True;
+       end if;
+    end Initialize;
+ 
+    -----------------------
+    -- Set_Task_Affinity --
+    -----------------------
+ 
+    procedure Set_Task_Affinity (T : ST.Task_Id) is
+       pragma Unreferenced (T);
+ 
+    begin
+       --  Setting task affinity is not supported by the underlying system
+ 
+       null;
+    end Set_Task_Affinity;
+ 
+ end System.Task_Primitives.Operations;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taprop__solaris.adb gcc-12.1.0/gcc/ada/libgnarl/s-taprop__solaris.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taprop__solaris.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taprop__solaris.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
*************** package body System.Task_Primitives.Oper
*** 128,140 ****
     -- External Configuration Values --
     -----------------------------------
  
!    Time_Slice_Val : Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
!    Locking_Policy : Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
  
!    Dispatching_Policy : Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
     Foreign_Task_Elaborated : aliased Boolean := True;
--- 128,140 ----
     -- External Configuration Values --
     -----------------------------------
  
!    Time_Slice_Val : constant Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
!    Locking_Policy : constant Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
  
!    Dispatching_Policy : constant Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
     Foreign_Task_Elaborated : aliased Boolean := True;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taprop__vxworks.adb gcc-12.1.0/gcc/ada/libgnarl/s-taprop__vxworks.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taprop__vxworks.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taprop__vxworks.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
*************** package body System.Task_Primitives.Oper
*** 62,73 ****
     use System.Tasking;
     use System.OS_Interface;
     use System.Parameters;
-    use type System.VxWorks.Ext.t_id;
     use type Interfaces.C.int;
     use type System.OS_Interface.unsigned;
  
!    subtype int is System.OS_Interface.int;
     subtype unsigned is System.OS_Interface.unsigned;
  
     Relative : constant := 0;
  
--- 62,78 ----
     use System.Tasking;
     use System.OS_Interface;
     use System.Parameters;
     use type Interfaces.C.int;
     use type System.OS_Interface.unsigned;
+    use type System.VxWorks.Ext.t_id;
+    use type System.VxWorks.Ext.STATUS;
+    use type System.VxWorks.Ext.BOOL;
  
!    subtype int      is System.OS_Interface.int;
     subtype unsigned is System.OS_Interface.unsigned;
+    subtype STATUS   is System.VxWorks.Ext.STATUS;
+ 
+    OK  : constant STATUS := System.VxWorks.Ext.OK;
  
     Relative : constant := 0;
  
*************** package body System.Task_Primitives.Oper
*** 83,95 ****
  
     --  The followings are internal configuration constants needed
  
!    Dispatching_Policy : Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
     Foreign_Task_Elaborated : aliased Boolean := True;
     --  Used to identified fake tasks (i.e., non-Ada Threads)
  
!    Locking_Policy : Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
  
     Mutex_Protocol : Priority_Type;
--- 88,100 ----
  
     --  The followings are internal configuration constants needed
  
!    Dispatching_Policy : constant Character;
     pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
  
     Foreign_Task_Elaborated : aliased Boolean := True;
     --  Used to identified fake tasks (i.e., non-Ada Threads)
  
!    Locking_Policy : constant Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
  
     Mutex_Protocol : Priority_Type;
*************** package body System.Task_Primitives.Oper
*** 99,105 ****
     --  time; it is used to execute in mutual exclusion from all other tasks.
     --  Used to protect All_Tasks_List
  
!    Time_Slice_Val : Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
     Null_Thread_Id : constant Thread_Id := 0;
--- 104,110 ----
     --  time; it is used to execute in mutual exclusion from all other tasks.
     --  Used to protect All_Tasks_List
  
!    Time_Slice_Val : constant Integer;
     pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
  
     Null_Thread_Id : constant Thread_Id := 0;
*************** package body System.Task_Primitives.Oper
*** 333,349 ****
     -------------------
  
     procedure Finalize_Lock (L : not null access Lock) is
!       Result : int;
     begin
        Result := semDelete (L.Mutex);
!       pragma Assert (Result = 0);
     end Finalize_Lock;
  
     procedure Finalize_Lock (L : not null access RTS_Lock) is
!       Result : int;
     begin
        Result := semDelete (L.Mutex);
!       pragma Assert (Result = 0);
     end Finalize_Lock;
  
     ----------------
--- 338,354 ----
     -------------------
  
     procedure Finalize_Lock (L : not null access Lock) is
!       Result : STATUS;
     begin
        Result := semDelete (L.Mutex);
!       pragma Assert (Result = OK);
     end Finalize_Lock;
  
     procedure Finalize_Lock (L : not null access RTS_Lock) is
!       Result : STATUS;
     begin
        Result := semDelete (L.Mutex);
!       pragma Assert (Result = OK);
     end Finalize_Lock;
  
     ----------------
*************** package body System.Task_Primitives.Oper
*** 354,360 ****
       (L                 : not null access Lock;
        Ceiling_Violation : out Boolean)
     is
!       Result : int;
  
     begin
        if L.Protocol = Prio_Protect
--- 359,365 ----
       (L                 : not null access Lock;
        Ceiling_Violation : out Boolean)
     is
!       Result : STATUS;
  
     begin
        if L.Protocol = Prio_Protect
*************** package body System.Task_Primitives.Oper
*** 367,387 ****
        end if;
  
        Result := semTake (L.Mutex, WAIT_FOREVER);
!       pragma Assert (Result = 0);
     end Write_Lock;
  
     procedure Write_Lock (L : not null access RTS_Lock) is
!       Result : int;
     begin
        Result := semTake (L.Mutex, WAIT_FOREVER);
!       pragma Assert (Result = 0);
     end Write_Lock;
  
     procedure Write_Lock (T : Task_Id) is
!       Result : int;
     begin
        Result := semTake (T.Common.LL.L.Mutex, WAIT_FOREVER);
!       pragma Assert (Result = 0);
     end Write_Lock;
  
     ---------------
--- 372,392 ----
        end if;
  
        Result := semTake (L.Mutex, WAIT_FOREVER);
!       pragma Assert (Result = OK);
     end Write_Lock;
  
     procedure Write_Lock (L : not null access RTS_Lock) is
!       Result : STATUS;
     begin
        Result := semTake (L.Mutex, WAIT_FOREVER);
!       pragma Assert (Result = OK);
     end Write_Lock;
  
     procedure Write_Lock (T : Task_Id) is
!       Result : STATUS;
     begin
        Result := semTake (T.Common.LL.L.Mutex, WAIT_FOREVER);
!       pragma Assert (Result = OK);
     end Write_Lock;
  
     ---------------
*************** package body System.Task_Primitives.Oper
*** 400,423 ****
     ------------
  
     procedure Unlock (L : not null access Lock) is
!       Result : int;
     begin
        Result := semGive (L.Mutex);
!       pragma Assert (Result = 0);
     end Unlock;
  
     procedure Unlock (L : not null access RTS_Lock) is
!       Result : int;
     begin
        Result := semGive (L.Mutex);
!       pragma Assert (Result = 0);
     end Unlock;
  
     procedure Unlock (T : Task_Id) is
!       Result : int;
     begin
        Result := semGive (T.Common.LL.L.Mutex);
!       pragma Assert (Result = 0);
     end Unlock;
  
     -----------------
--- 405,428 ----
     ------------
  
     procedure Unlock (L : not null access Lock) is
!       Result : STATUS;
     begin
        Result := semGive (L.Mutex);
!       pragma Assert (Result = OK);
     end Unlock;
  
     procedure Unlock (L : not null access RTS_Lock) is
!       Result : STATUS;
     begin
        Result := semGive (L.Mutex);
!       pragma Assert (Result = OK);
     end Unlock;
  
     procedure Unlock (T : Task_Id) is
!       Result : STATUS;
     begin
        Result := semGive (T.Common.LL.L.Mutex);
!       pragma Assert (Result = OK);
     end Unlock;
  
     -----------------
*************** package body System.Task_Primitives.Oper
*** 442,448 ****
     procedure Sleep (Self_ID : Task_Id; Reason : System.Tasking.Task_States) is
        pragma Unreferenced (Reason);
  
!       Result : int;
  
     begin
        pragma Assert (Self_ID = Self);
--- 447,453 ----
     procedure Sleep (Self_ID : Task_Id; Reason : System.Tasking.Task_States) is
        pragma Unreferenced (Reason);
  
!       Result : STATUS;
  
     begin
        pragma Assert (Self_ID = Self);
*************** package body System.Task_Primitives.Oper
*** 450,456 ****
        --  Release the mutex before sleeping
  
        Result := semGive (Self_ID.Common.LL.L.Mutex);
!       pragma Assert (Result = 0);
  
        --  Perform a blocking operation to take the CV semaphore. Note that a
        --  blocking operation in VxWorks will reenable task scheduling. When we
--- 455,461 ----
        --  Release the mutex before sleeping
  
        Result := semGive (Self_ID.Common.LL.L.Mutex);
!       pragma Assert (Result = OK);
  
        --  Perform a blocking operation to take the CV semaphore. Note that a
        --  blocking operation in VxWorks will reenable task scheduling. When we
*************** package body System.Task_Primitives.Oper
*** 458,469 ****
        --  again be disabled.
  
        Result := semTake (Self_ID.Common.LL.CV, WAIT_FOREVER);
!       pragma Assert (Result = 0);
  
        --  Take the mutex back
  
        Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
!       pragma Assert (Result = 0);
     end Sleep;
  
     -----------------
--- 463,474 ----
        --  again be disabled.
  
        Result := semTake (Self_ID.Common.LL.CV, WAIT_FOREVER);
!       pragma Assert (Result = OK);
  
        --  Take the mutex back
  
        Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
!       pragma Assert (Result = OK);
     end Sleep;
  
     -----------------
*************** package body System.Task_Primitives.Oper
*** 486,492 ****
        Orig     : constant Duration := Monotonic_Clock;
        Absolute : Duration;
        Ticks    : int;
!       Result   : int;
        Wakeup   : Boolean := False;
  
     begin
--- 491,497 ----
        Orig     : constant Duration := Monotonic_Clock;
        Absolute : Duration;
        Ticks    : int;
!       Result   : STATUS;
        Wakeup   : Boolean := False;
  
     begin
*************** package body System.Task_Primitives.Oper
*** 516,522 ****
              --  Release the mutex before sleeping
  
              Result := semGive (Self_ID.Common.LL.L.Mutex);
!             pragma Assert (Result = 0);
  
              --  Perform a blocking operation to take the CV semaphore. Note
              --  that a blocking operation in VxWorks will reenable task
--- 521,527 ----
              --  Release the mutex before sleeping
  
              Result := semGive (Self_ID.Common.LL.L.Mutex);
!             pragma Assert (Result = OK);
  
              --  Perform a blocking operation to take the CV semaphore. Note
              --  that a blocking operation in VxWorks will reenable task
*************** package body System.Task_Primitives.Oper
*** 525,531 ****
  
              Result := semTake (Self_ID.Common.LL.CV, Ticks);
  
!             if Result = 0 then
  
                 --  Somebody may have called Wakeup for us
  
--- 530,536 ----
  
              Result := semTake (Self_ID.Common.LL.CV, Ticks);
  
!             if Result = OK then
  
                 --  Somebody may have called Wakeup for us
  
*************** package body System.Task_Primitives.Oper
*** 556,562 ****
              --  Take the mutex back
  
              Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
!             pragma Assert (Result = 0);
  
              exit when Timedout or Wakeup;
           end loop;
--- 561,567 ----
              --  Take the mutex back
  
              Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
!             pragma Assert (Result = OK);
  
              exit when Timedout or Wakeup;
           end loop;
*************** package body System.Task_Primitives.Oper
*** 590,596 ****
        Timedout : Boolean;
        Aborted  : Boolean := False;
  
!       Result : int;
        pragma Warnings (Off, Result);
  
     begin
--- 595,601 ----
        Timedout : Boolean;
        Aborted  : Boolean := False;
  
!       Result   : STATUS;
        pragma Warnings (Off, Result);
  
     begin
*************** package body System.Task_Primitives.Oper
*** 617,623 ****
  
           Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
  
!          pragma Assert (Result = 0);
  
           Self_ID.Common.State := Delay_Sleep;
           Timedout := False;
--- 622,628 ----
  
           Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
  
!          pragma Assert (Result = OK);
  
           Self_ID.Common.State := Delay_Sleep;
           Timedout := False;
*************** package body System.Task_Primitives.Oper
*** 628,640 ****
              --  Release the TCB before sleeping
  
              Result := semGive (Self_ID.Common.LL.L.Mutex);
!             pragma Assert (Result = 0);
  
              exit when Aborted;
  
              Result := semTake (Self_ID.Common.LL.CV, Ticks);
  
!             if Result /= 0 then
  
                 --  If Ticks = int'last, it was most probably truncated, so make
                 --  another round after recomputing Ticks from absolute time.
--- 633,645 ----
              --  Release the TCB before sleeping
  
              Result := semGive (Self_ID.Common.LL.L.Mutex);
!             pragma Assert (Result = OK);
  
              exit when Aborted;
  
              Result := semTake (Self_ID.Common.LL.CV, Ticks);
  
!             if Result /= OK then
  
                 --  If Ticks = int'last, it was most probably truncated, so make
                 --  another round after recomputing Ticks from absolute time.
*************** package body System.Task_Primitives.Oper
*** 655,661 ****
  
              Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
  
!             pragma Assert (Result = 0);
  
              exit when Timedout;
           end loop;
--- 660,666 ----
  
              Result := semTake (Self_ID.Common.LL.L.Mutex, WAIT_FOREVER);
  
!             pragma Assert (Result = OK);
  
              exit when Timedout;
           end loop;
*************** package body System.Task_Primitives.Oper
*** 697,706 ****
  
     procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
        pragma Unreferenced (Reason);
!       Result : int;
     begin
        Result := semGive (T.Common.LL.CV);
!       pragma Assert (Result = 0);
     end Wakeup;
  
     -----------
--- 702,711 ----
  
     procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
        pragma Unreferenced (Reason);
!       Result : STATUS;
     begin
        Result := semGive (T.Common.LL.CV);
!       pragma Assert (Result = OK);
     end Wakeup;
  
     -----------
*************** package body System.Task_Primitives.Oper
*** 709,715 ****
  
     procedure Yield (Do_Yield : Boolean := True) is
        pragma Unreferenced (Do_Yield);
!       Result : int;
        pragma Unreferenced (Result);
     begin
        Result := taskDelay (0);
--- 714,720 ----
  
     procedure Yield (Do_Yield : Boolean := True) is
        pragma Unreferenced (Do_Yield);
!       Result : STATUS;
        pragma Unreferenced (Result);
     begin
        Result := taskDelay (0);
*************** package body System.Task_Primitives.Oper
*** 726,738 ****
     is
        pragma Unreferenced (Loss_Of_Inheritance);
  
!       Result     : int;
  
     begin
        Result :=
          taskPrioritySet
            (T.Common.LL.Thread, To_VxWorks_Priority (int (Prio)));
!       pragma Assert (Result = 0);
  
        --  Note: in VxWorks 6.6 (or earlier), the task is placed at the end of
        --  the priority queue instead of the head. This is not the behavior
--- 731,743 ----
     is
        pragma Unreferenced (Loss_Of_Inheritance);
  
!       Result     : STATUS;
  
     begin
        Result :=
          taskPrioritySet
            (T.Common.LL.Thread, To_VxWorks_Priority (int (Prio)));
!       pragma Assert (Result = OK);
  
        --  Note: in VxWorks 6.6 (or earlier), the task is placed at the end of
        --  the priority queue instead of the head. This is not the behavior
*************** package body System.Task_Primitives.Oper
*** 938,953 ****
     ------------------
  
     procedure Finalize_TCB (T : Task_Id) is
!       Result : int;
  
     begin
        Result := semDelete (T.Common.LL.L.Mutex);
!       pragma Assert (Result = 0);
  
        T.Common.LL.Thread := Null_Thread_Id;
  
        Result := semDelete (T.Common.LL.CV);
!       pragma Assert (Result = 0);
  
        if T.Known_Tasks_Index /= -1 then
           Known_Tasks (T.Known_Tasks_Index) := null;
--- 943,958 ----
     ------------------
  
     procedure Finalize_TCB (T : Task_Id) is
!       Result : STATUS;
  
     begin
        Result := semDelete (T.Common.LL.L.Mutex);
!       pragma Assert (Result = OK);
  
        T.Common.LL.Thread := Null_Thread_Id;
  
        Result := semDelete (T.Common.LL.CV);
!       pragma Assert (Result = OK);
  
        if T.Known_Tasks_Index /= -1 then
           Known_Tasks (T.Known_Tasks_Index) := null;
*************** package body System.Task_Primitives.Oper
*** 1137,1143 ****
              S.State := False;
  
              Result := semGive (S.L);
!             pragma Assert (Result = 0);
  
              SSL.Abort_Undefer.all;
  
--- 1142,1148 ----
              S.State := False;
  
              Result := semGive (S.L);
!             pragma Assert (Result = OK);
  
              SSL.Abort_Undefer.all;
  
*************** package body System.Task_Primitives.Oper
*** 1218,1224 ****
        if T.Common.LL.Thread /= Null_Thread_Id
          and then T.Common.LL.Thread /= Thread_Self
        then
!          return taskSuspend (T.Common.LL.Thread) = 0;
        else
           return True;
        end if;
--- 1223,1229 ----
        if T.Common.LL.Thread /= Null_Thread_Id
          and then T.Common.LL.Thread /= Thread_Self
        then
!          return taskSuspend (T.Common.LL.Thread) = OK;
        else
           return True;
        end if;
*************** package body System.Task_Primitives.Oper
*** 1236,1242 ****
        if T.Common.LL.Thread /= Null_Thread_Id
          and then T.Common.LL.Thread /= Thread_Self
        then
!          return taskResume (T.Common.LL.Thread) = 0;
        else
           return True;
        end if;
--- 1241,1247 ----
        if T.Common.LL.Thread /= Null_Thread_Id
          and then T.Common.LL.Thread /= Thread_Self
        then
!          return taskResume (T.Common.LL.Thread) = OK;
        else
           return True;
        end if;
*************** package body System.Task_Primitives.Oper
*** 1251,1257 ****
        Thread_Self : constant Thread_Id := taskIdSelf;
        C           : Task_Id;
  
!       Dummy : int;
        Old   : int;
  
     begin
--- 1256,1262 ----
        Thread_Self : constant Thread_Id := taskIdSelf;
        C           : Task_Id;
  
!       Dummy : STATUS;
        Old   : int;
  
     begin
*************** package body System.Task_Primitives.Oper
*** 1268,1274 ****
           C := C.Common.All_Tasks_Link;
        end loop;
  
!       Dummy := Int_Unlock (Old);
     end Stop_All_Tasks;
  
     ---------------
--- 1273,1279 ----
           C := C.Common.All_Tasks_Link;
        end loop;
  
!       Int_Unlock (Old);
     end Stop_All_Tasks;
  
     ---------------
*************** package body System.Task_Primitives.Oper
*** 1278,1284 ****
     function Stop_Task (T : ST.Task_Id) return Boolean is
     begin
        if T.Common.LL.Thread /= Null_Thread_Id then
!          return Task_Stop (T.Common.LL.Thread) = 0;
        else
           return True;
        end if;
--- 1283,1289 ----
     function Stop_Task (T : ST.Task_Id) return Boolean is
     begin
        if T.Common.LL.Thread /= Null_Thread_Id then
!          return Task_Stop (T.Common.LL.Thread) = OK;
        else
           return True;
        end if;
*************** package body System.Task_Primitives.Oper
*** 1292,1298 ****
     is
     begin
        if T.Common.LL.Thread /= Null_Thread_Id then
!          return Task_Cont (T.Common.LL.Thread) = 0;
        else
           return True;
        end if;
--- 1297,1303 ----
     is
     begin
        if T.Common.LL.Thread /= Null_Thread_Id then
!          return Task_Cont (T.Common.LL.Thread) = OK;
        else
           return True;
        end if;
*************** package body System.Task_Primitives.Oper
*** 1304,1310 ****
  
     function Is_Task_Context return Boolean is
     begin
!       return System.OS_Interface.Interrupt_Context /= 1;
     end Is_Task_Context;
  
     ----------------
--- 1309,1315 ----
  
     function Is_Task_Context return Boolean is
     begin
!       return OSI.Interrupt_Context = 0;
     end Is_Task_Context;
  
     ----------------
*************** package body System.Task_Primitives.Oper
*** 1312,1318 ****
     ----------------
  
     procedure Initialize (Environment_Task : Task_Id) is
!       Result : int;
        pragma Unreferenced (Result);
  
     begin
--- 1317,1323 ----
     ----------------
  
     procedure Initialize (Environment_Task : Task_Id) is
!       Result : STATUS;
        pragma Unreferenced (Result);
  
     begin
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tarest.adb gcc-12.1.0/gcc/ada/libgnarl/s-tarest.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tarest.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tarest.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tarest.ads gcc-12.1.0/gcc/ada/libgnarl/s-tarest.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tarest.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tarest.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasdeb.adb gcc-12.1.0/gcc/ada/libgnarl/s-tasdeb.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasdeb.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasdeb.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
*************** package body System.Tasking.Debug is
*** 54,60 ****
  
     type Trace_Flag_Set is array (Character) of Boolean;
  
!    Trace_On : Trace_Flag_Set := ('A' .. 'Z' => False, others => True);
  
     Stderr_Fd : constant := 2;
     --  File descriptor for standard error
--- 54,60 ----
  
     type Trace_Flag_Set is array (Character) of Boolean;
  
!    Trace_On : Trace_Flag_Set := ['A' .. 'Z' => False, others => True];
  
     Stderr_Fd : constant := 2;
     --  File descriptor for standard error
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasdeb.ads gcc-12.1.0/gcc/ada/libgnarl/s-tasdeb.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasdeb.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasdeb.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
***************
*** 32,38 ****
  --  This package encapsulates all direct interfaces to task debugging services
  --  that are needed by gdb with gnat mode.
  
- with System.Tasking;
  with System.OS_Interface;
  
  package System.Tasking.Debug is
--- 32,37 ----
*************** package System.Tasking.Debug is
*** 65,73 ****
     -- General GDB support --
     -------------------------
  
!    Known_Tasks : array (0 .. 999) of Task_Id := (others => null);
     --  Global array of tasks read by gdb, and updated by Create_Task and
!    --  Finalize_TCB
  
     Debug_Event_Activating           : constant := 1;
     Debug_Event_Run                  : constant := 2;
--- 64,74 ----
     -- General GDB support --
     -------------------------
  
!    Known_Tasks : array (0 .. 999) of Task_Id := [others => null]
!      with Atomic_Components;
     --  Global array of tasks read by gdb, and updated by Create_Task and
!    --  Finalize_TCB. Ensure access to its components is atomic to allow
!    --  lock-free concurrent access.
  
     Debug_Event_Activating           : constant := 1;
     Debug_Event_Run                  : constant := 2;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasinf.adb gcc-12.1.0/gcc/ada/libgnarl/s-tasinf.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasinf.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasinf.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                           (Compiler Interface)                           --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                           (Compiler Interface)                           --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasinf.ads gcc-12.1.0/gcc/ada/libgnarl/s-tasinf.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasinf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasinf.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__linux.adb gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__linux.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__linux.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__linux.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__linux.ads gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__linux.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__linux.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__linux.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2007-2022, 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- --
*************** package System.Task_Info is
*** 79,86 ****
  
     subtype CPU_Set is System.OS_Interface.cpu_set_t;
  
!    Any_CPU : constant CPU_Set := (bits => (others => True));
!    No_CPU  : constant CPU_Set := (bits => (others => False));
  
     Invalid_CPU_Number : exception;
     --  Raised when an invalid CPU mask has been specified
--- 79,86 ----
  
     subtype CPU_Set is System.OS_Interface.cpu_set_t;
  
!    Any_CPU : constant CPU_Set := (bits => [others => True]);
!    No_CPU  : constant CPU_Set := (bits => [others => False]);
  
     Invalid_CPU_Number : exception;
     --  Raised when an invalid CPU mask has been specified
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__mingw.adb gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__mingw.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__mingw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__mingw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2007-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__mingw.ads gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__mingw.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__mingw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__mingw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2007-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__solaris.adb gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__solaris.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__solaris.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__solaris.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__solaris.ads gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__solaris.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__solaris.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__solaris.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__vxworks.ads gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__vxworks.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasinf__vxworks.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasinf__vxworks.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasini.adb gcc-12.1.0/gcc/ada/libgnarl/s-tasini.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasini.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasini.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
*************** package body System.Tasking.Initializati
*** 126,131 ****
--- 126,132 ----
        if Self_ID /= null
          and then Self_ID.Deferral_Level = 0
          and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
+         and then not Self_ID.Aborting
        then
           return 1;
        else
*************** package body System.Tasking.Initializati
*** 420,426 ****
              when Terminated
                 | Unactivated
              =>
!                pragma Assert (False);
                 null;
  
              when Activating
--- 421,427 ----
              when Terminated
                 | Unactivated
              =>
!                pragma Assert (Standard.False);
                 null;
  
              when Activating
*************** package body System.Tasking.Initializati
*** 535,541 ****
           C := C.Common.All_Tasks_Link;
        end loop;
  
!       pragma Assert (False);
     end Remove_From_All_Tasks_List;
  
     ---------------
--- 536,542 ----
           C := C.Common.All_Tasks_Link;
        end loop;
  
!       pragma Assert (Standard.False);
     end Remove_From_All_Tasks_List;
  
     ---------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasini.ads gcc-12.1.0/gcc/ada/libgnarl/s-tasini.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasini.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasini.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package System.Tasking.Initialization is
*** 115,121 ****
  
     function Check_Abort_Status return Integer;
     --  Returns Boolean'Pos (True) iff abort signal should raise
!    --  Standard'Abort_Signal. Only used by IRIX currently.
  
     --------------------------
     -- Change Base Priority --
--- 115,121 ----
  
     function Check_Abort_Status return Integer;
     --  Returns Boolean'Pos (True) iff abort signal should raise
!    --  Standard'Abort_Signal. Only used by RTEMS currently.
  
     --------------------------
     -- Change Base Priority --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taskin.adb gcc-12.1.0/gcc/ada/libgnarl/s-taskin.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-taskin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taskin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body System.Tasking is
*** 82,99 ****
     ---------------------
  
     procedure Initialize_ATCB
!      (Self_ID              : Task_Id;
!       Task_Entry_Point     : Task_Procedure_Access;
!       Task_Arg             : System.Address;
!       Parent               : Task_Id;
!       Elaborated           : Access_Boolean;
!       Base_Priority        : System.Any_Priority;
!       Base_CPU             : System.Multiprocessors.CPU_Range;
!       Domain               : Dispatching_Domain_Access;
!       Task_Info            : System.Task_Info.Task_Info_Type;
!       Stack_Size           : System.Parameters.Size_Type;
!       T                    : Task_Id;
!       Success              : out Boolean)
     is
     begin
        T.Common.State := Unactivated;
--- 82,99 ----
     ---------------------
  
     procedure Initialize_ATCB
!      (Self_ID          : Task_Id;
!       Task_Entry_Point : Task_Procedure_Access;
!       Task_Arg         : System.Address;
!       Parent           : Task_Id;
!       Elaborated       : Access_Boolean;
!       Base_Priority    : System.Any_Priority;
!       Base_CPU         : System.Multiprocessors.CPU_Range;
!       Domain           : Dispatching_Domain_Access;
!       Task_Info        : System.Task_Info.Task_Info_Type;
!       Stack_Size       : System.Parameters.Size_Type;
!       T                : Task_Id;
!       Success          : out Boolean)
     is
     begin
        T.Common.State := Unactivated;
*************** package body System.Tasking is
*** 127,133 ****
        end if;
        pragma Assert (T.Common.Domain /= null);
  
!       T.Common.Current_Priority         := 0;
        T.Common.Protected_Action_Nesting := 0;
        T.Common.Call                     := null;
        T.Common.Task_Arg                 := Task_Arg;
--- 127,133 ----
        end if;
        pragma Assert (T.Common.Domain /= null);
  
!       T.Common.Current_Priority         := Priority'First;
        T.Common.Protected_Action_Nesting := 0;
        T.Common.Call                     := null;
        T.Common.Task_Arg                 := Task_Arg;
*************** package body System.Tasking is
*** 140,146 ****
        T.Common.Global_Task_Lock_Nesting := 0;
        T.Common.Fall_Back_Handler        := null;
        T.Common.Specific_Handler         := null;
!       T.Common.Debug_Events             := (others => False);
        T.Common.Task_Image_Len           := 0;
  
        if T.Common.Parent = null then
--- 140,146 ----
        T.Common.Global_Task_Lock_Nesting := 0;
        T.Common.Fall_Back_Handler        := null;
        T.Common.Specific_Handler         := null;
!       T.Common.Debug_Events             := [others => False];
        T.Common.Task_Image_Len           := 0;
  
        if T.Common.Parent = null then
*************** package body System.Tasking is
*** 173,185 ****
     Main_Task_Image : constant String := "main_task";
     --  Image of environment task
  
!    Main_Priority : Integer;
     pragma Import (C, Main_Priority, "__gl_main_priority");
     --  Priority for main task. Note that this is of type Integer, not Priority,
     --  because we use the value -1 to indicate the default main priority, and
     --  that is of course not in Priority'range.
  
!    Main_CPU : Integer;
     pragma Import (C, Main_CPU, "__gl_main_cpu");
     --  Affinity for main task. Note that this is of type Integer, not
     --  CPU_Range, because we use the value -1 to indicate the unassigned
--- 173,185 ----
     Main_Task_Image : constant String := "main_task";
     --  Image of environment task
  
!    Main_Priority : constant Integer;
     pragma Import (C, Main_Priority, "__gl_main_priority");
     --  Priority for main task. Note that this is of type Integer, not Priority,
     --  because we use the value -1 to indicate the default main priority, and
     --  that is of course not in Priority'range.
  
!    Main_CPU : constant Integer;
     pragma Import (C, Main_CPU, "__gl_main_cpu");
     --  Affinity for main task. Note that this is of type Integer, not
     --  CPU_Range, because we use the value -1 to indicate the unassigned
*************** package body System.Tasking is
*** 228,245 ****
  
        T := STPO.New_ATCB (0);
        Initialize_ATCB
!         (Self_ID              => null,
!          Task_Entry_Point     => null,
!          Task_Arg             => Null_Address,
!          Parent               => Null_Task,
!          Elaborated           => null,
!          Base_Priority        => Base_Priority,
!          Base_CPU             => Base_CPU,
!          Domain               => System_Domain,
!          Task_Info            => Task_Info.Unspecified_Task_Info,
!          Stack_Size           => 0,
!          T                    => T,
!          Success              => Success);
        pragma Assert (Success);
  
        STPO.Initialize (T);
--- 228,245 ----
  
        T := STPO.New_ATCB (0);
        Initialize_ATCB
!         (Self_ID          => null,
!          Task_Entry_Point => null,
!          Task_Arg         => Null_Address,
!          Parent           => Null_Task,
!          Elaborated       => null,
!          Base_Priority    => Base_Priority,
!          Base_CPU         => Base_CPU,
!          Domain           => System_Domain,
!          Task_Info        => Task_Info.Unspecified_Task_Info,
!          Stack_Size       => 0,
!          T                => T,
!          Success          => Success);
        pragma Assert (Success);
  
        STPO.Initialize (T);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taskin.ads gcc-12.1.0/gcc/ada/libgnarl/s-taskin.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taskin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taskin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package System.Tasking is
*** 368,381 ****
     --  Used to represent protected procedures to be executed when task
     --  terminates.
  
-    type Initialization_Handler is access procedure;
-    pragma Favor_Top_Level (Initialization_Handler);
-    --  Use to represent procedures to be executed at task initialization.
- 
-    Global_Initialization_Handler : Initialization_Handler := null;
-    pragma Atomic (Global_Initialization_Handler);
-    --  Global handler called when each task initializes.
- 
     ------------------------------------
     -- Dispatching domain definitions --
     ------------------------------------
--- 368,373 ----
*************** package System.Tasking is
*** 773,784 ****
     Environment_Task_Level : constant Master_Level := 1;
     Independent_Task_Level : constant Master_Level := 2;
     Library_Task_Level     : constant Master_Level := 3;
  
     -------------------
     -- Priority info --
     -------------------
  
!    Unspecified_Priority : constant Integer := System.Priority'First - 1;
  
     Priority_Not_Boosted : constant Integer := System.Priority'First - 1;
     --  Definition of Priority actually has to come from the RTS configuration
--- 765,782 ----
     Environment_Task_Level : constant Master_Level := 1;
     Independent_Task_Level : constant Master_Level := 2;
     Library_Task_Level     : constant Master_Level := 3;
+    --  Note that the value of Library_Task_Level is also hard coded in the
+    --  compiler, see Rtsfind.Library_Task_Level. The two should be kept in
+    --  sync.
  
     -------------------
     -- Priority info --
     -------------------
  
!    Unspecified_Priority : constant Integer := -1;
!    --  Indicates that a task has an unspecified priority. This is hardcoded as
!    --  -1 rather than System.Priority'First - 1 as the value needs to be used
!    --  in init.c to specify that the main task has no specified priority.
  
     Priority_Not_Boosted : constant Integer := System.Priority'First - 1;
     --  Definition of Priority actually has to come from the RTS configuration
*************** package System.Tasking is
*** 1159,1165 ****
        --  non-terminated task so that the associated storage is automatically
        --  reclaimed when the task terminates.
  
!       Attributes : Attribute_Array := (others => 0);
        --  Task attributes
  
        --  IMPORTANT Note: the Entry_Queues field is last for efficiency of
--- 1157,1163 ----
        --  non-terminated task so that the associated storage is automatically
        --  reclaimed when the task terminates.
  
!       Attributes : Attribute_Array := [others => 0];
        --  Task attributes
  
        --  IMPORTANT Note: the Entry_Queues field is last for efficiency of
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taspri__dummy.ads gcc-12.1.0/gcc/ada/libgnarl/s-taspri__dummy.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taspri__dummy.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taspri__dummy.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taspri__hpux-dce.ads gcc-12.1.0/gcc/ada/libgnarl/s-taspri__hpux-dce.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taspri__hpux-dce.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taspri__hpux-dce.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taspri__lynxos.ads gcc-12.1.0/gcc/ada/libgnarl/s-taspri__lynxos.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taspri__lynxos.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taspri__lynxos.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                                                                          --
  --            Copyright (C) 1991-2017, Florida State University             --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                                                                          --
  --            Copyright (C) 1991-2017, Florida State University             --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taspri__mingw.ads gcc-12.1.0/gcc/ada/libgnarl/s-taspri__mingw.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taspri__mingw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taspri__mingw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1991-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taspri__posix-noaltstack.ads gcc-12.1.0/gcc/ada/libgnarl/s-taspri__posix-noaltstack.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taspri__posix-noaltstack.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taspri__posix-noaltstack.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                  S p e c                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taspri__posix.ads gcc-12.1.0/gcc/ada/libgnarl/s-taspri__posix.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taspri__posix.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taspri__posix.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                                                                          --
  --            Copyright (C) 1991-2017, Florida State University             --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                                                                          --
  --            Copyright (C) 1991-2017, Florida State University             --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taspri__solaris.ads gcc-12.1.0/gcc/ada/libgnarl/s-taspri__solaris.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taspri__solaris.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taspri__solaris.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-taspri__vxworks.ads gcc-12.1.0/gcc/ada/libgnarl/s-taspri__vxworks.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-taspri__vxworks.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-taspri__vxworks.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasque.adb gcc-12.1.0/gcc/ada/libgnarl/s-tasque.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasque.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasque.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
*************** package body System.Tasking.Queuing is
*** 44,50 ****
  
     --  Entry Queues implemented as doubly linked list
  
!    Queuing_Policy : Character;
     pragma Import (C, Queuing_Policy, "__gl_queuing_policy");
  
     Priority_Queuing : constant Boolean := Queuing_Policy = 'P';
--- 44,50 ----
  
     --  Entry Queues implemented as doubly linked list
  
!    Queuing_Policy : constant Character;
     pragma Import (C, Queuing_Policy, "__gl_queuing_policy");
  
     Priority_Queuing : constant Boolean := Queuing_Policy = 'P';
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasque.ads gcc-12.1.0/gcc/ada/libgnarl/s-tasque.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasque.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasque.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasren.adb gcc-12.1.0/gcc/ada/libgnarl/s-tasren.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasren.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasren.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
*************** package body System.Tasking.Rendezvous i
*** 59,86 ****
     ----------------
  
     Default_Treatment : constant array (Select_Modes) of Select_Treatment :=
!      (Simple_Mode         => No_Alternative_Open,
        Else_Mode           => Else_Selected,
        Terminate_Mode      => Terminate_Selected,
!       Delay_Mode          => No_Alternative_Open);
  
     New_State : constant array (Boolean, Entry_Call_State)
       of Entry_Call_State :=
!        (True =>
!          (Never_Abortable   => Never_Abortable,
            Not_Yet_Abortable => Now_Abortable,
            Was_Abortable     => Now_Abortable,
            Now_Abortable     => Now_Abortable,
            Done              => Done,
!           Cancelled         => Cancelled),
          False =>
!          (Never_Abortable   => Never_Abortable,
            Not_Yet_Abortable => Not_Yet_Abortable,
            Was_Abortable     => Was_Abortable,
            Now_Abortable     => Now_Abortable,
            Done              => Done,
!           Cancelled         => Cancelled)
!        );
  
     -----------------------
     -- Local Subprograms --
--- 59,86 ----
     ----------------
  
     Default_Treatment : constant array (Select_Modes) of Select_Treatment :=
!      [Simple_Mode         => No_Alternative_Open,
        Else_Mode           => Else_Selected,
        Terminate_Mode      => Terminate_Selected,
!       Delay_Mode          => No_Alternative_Open];
  
     New_State : constant array (Boolean, Entry_Call_State)
       of Entry_Call_State :=
!        [True =>
!          [Never_Abortable   => Never_Abortable,
            Not_Yet_Abortable => Now_Abortable,
            Was_Abortable     => Now_Abortable,
            Now_Abortable     => Now_Abortable,
            Done              => Done,
!           Cancelled         => Cancelled],
          False =>
!          [Never_Abortable   => Never_Abortable,
            Not_Yet_Abortable => Not_Yet_Abortable,
            Was_Abortable     => Was_Abortable,
            Now_Abortable     => Now_Abortable,
            Done              => Done,
!           Cancelled         => Cancelled]
!        ];
  
     -----------------------
     -- Local Subprograms --
*************** package body System.Tasking.Rendezvous i
*** 165,171 ****
  
           --  Should never get here ???
  
!          pragma Assert (False);
           raise Standard'Abort_Signal;
        end if;
  
--- 165,171 ----
  
           --  Should never get here ???
  
!          pragma Assert (Standard.False);
           raise Standard'Abort_Signal;
        end if;
  
*************** package body System.Tasking.Rendezvous i
*** 236,242 ****
  
           --  Should never get here ???
  
!          pragma Assert (False);
           raise Standard'Abort_Signal;
        end if;
  
--- 236,242 ----
  
           --  Should never get here ???
  
!          pragma Assert (Standard.False);
           raise Standard'Abort_Signal;
        end if;
  
*************** package body System.Tasking.Rendezvous i
*** 305,311 ****
        Uninterpreted_Data : System.Address)
     is
        Rendezvous_Successful : Boolean;
-       pragma Unreferenced (Rendezvous_Successful);
  
     begin
        --  If pragma Detect_Blocking is active then Program_Error must be
--- 305,310 ----
*************** package body System.Tasking.Rendezvous i
*** 646,652 ****
  
           --  Should never get here ???
  
!          pragma Assert (False);
           raise Standard'Abort_Signal;
        end if;
  
--- 645,651 ----
  
           --  Should never get here ???
  
!          pragma Assert (Standard.False);
           raise Standard'Abort_Signal;
        end if;
  
*************** package body System.Tasking.Rendezvous i
*** 1251,1257 ****
  
           --  Should never get here ???
  
!          pragma Assert (False);
           raise Standard'Abort_Signal;
        end if;
  
--- 1250,1256 ----
  
           --  Should never get here ???
  
!          pragma Assert (Standard.False);
           raise Standard'Abort_Signal;
        end if;
  
*************** package body System.Tasking.Rendezvous i
*** 1400,1406 ****
  
              --  Should never get here
  
!             pragma Assert (False);
              null;
        end case;
  
--- 1399,1405 ----
  
              --  Should never get here
  
!             pragma Assert (Standard.False);
              null;
        end case;
  
*************** package body System.Tasking.Rendezvous i
*** 1438,1444 ****
        Entry_Call : Entry_Call_Link;
  
        Yielded : Boolean;
-       pragma Unreferenced (Yielded);
  
     begin
        --  If pragma Detect_Blocking is active then Program_Error must be
--- 1437,1442 ----
*************** package body System.Tasking.Rendezvous i
*** 1452,1458 ****
             "potentially blocking operation";
        end if;
  
!       Initialization.Defer_Abort (Self_Id);
        Self_Id.ATC_Nesting_Level := Self_Id.ATC_Nesting_Level + 1;
  
        pragma Debug
--- 1450,1456 ----
             "potentially blocking operation";
        end if;
  
!       Initialization.Defer_Abort_Nestable (Self_Id);
        Self_Id.ATC_Nesting_Level := Self_Id.ATC_Nesting_Level + 1;
  
        pragma Debug
*************** package body System.Tasking.Rendezvous i
*** 1487,1493 ****
           STPO.Write_Lock (Self_Id);
           Utilities.Exit_One_ATC_Level (Self_Id);
           STPO.Unlock (Self_Id);
!          Initialization.Undefer_Abort (Self_Id);
  
           raise Tasking_Error;
        end if;
--- 1485,1491 ----
           STPO.Write_Lock (Self_Id);
           Utilities.Exit_One_ATC_Level (Self_Id);
           STPO.Unlock (Self_Id);
!          Initialization.Undefer_Abort_Nestable (Self_Id);
  
           raise Tasking_Error;
        end if;
*************** package body System.Tasking.Rendezvous i
*** 1500,1506 ****
        --  ??? Do we need to yield in case Yielded is False
  
        Rendezvous_Successful := Entry_Call.State = Done;
!       Initialization.Undefer_Abort (Self_Id);
        Entry_Calls.Check_Exception (Self_Id, Entry_Call);
     end Timed_Task_Entry_Call;
  
--- 1498,1504 ----
        --  ??? Do we need to yield in case Yielded is False
  
        Rendezvous_Successful := Entry_Call.State = Done;
!       Initialization.Undefer_Abort_Nestable (Self_Id);
        Entry_Calls.Check_Exception (Self_Id, Entry_Call);
     end Timed_Task_Entry_Call;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasren.ads gcc-12.1.0/gcc/ada/libgnarl/s-tasren.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasren.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasren.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasres.ads gcc-12.1.0/gcc/ada/libgnarl/s-tasres.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasres.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasres.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tassta.adb gcc-12.1.0/gcc/ada/libgnarl/s-tassta.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tassta.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tassta.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
*************** pragma Partition_Elaboration_Policy (Con
*** 35,40 ****
--- 35,41 ----
  
  with Ada.Exceptions;
  with Ada.Unchecked_Deallocation;
+ with Ada.Task_Initialization;
  
  with System.Interrupt_Management;
  with System.Tasking.Debug;
*************** package body System.Tasking.Stages is
*** 578,584 ****
  
           --  ??? Should never get here
  
!          pragma Assert (False);
           raise Standard'Abort_Signal;
        end if;
  
--- 579,585 ----
  
           --  ??? Should never get here
  
!          pragma Assert (Standard.False);
           raise Standard'Abort_Signal;
        end if;
  
*************** package body System.Tasking.Stages is
*** 910,921 ****
        Self_Id : constant Task_Id := Self;
  
     begin
        if T.Common.State = Terminated then
  
           --  It is not safe to call Abort_Defer or Write_Lock at this stage
  
-          Initialization.Task_Lock (Self_Id);
- 
           Lock_RTS;
           Initialization.Finalize_Attributes (T);
           Initialization.Remove_From_All_Tasks_List (T);
--- 911,922 ----
        Self_Id : constant Task_Id := Self;
  
     begin
+       Initialization.Task_Lock (Self_Id);
+ 
        if T.Common.State = Terminated then
  
           --  It is not safe to call Abort_Defer or Write_Lock at this stage
  
           Lock_RTS;
           Initialization.Finalize_Attributes (T);
           Initialization.Remove_From_All_Tasks_List (T);
*************** package body System.Tasking.Stages is
*** 930,935 ****
--- 931,937 ----
           --  upon termination.
  
           T.Free_On_Termination := True;
+          Initialization.Task_Unlock (Self_Id);
        end if;
     end Free_Task;
  
*************** package body System.Tasking.Stages is
*** 1176,1181 ****
--- 1178,1191 ----
           Debug.Signal_Debug_Event (Debug.Debug_Event_Run, Self_ID);
        end if;
  
+       declare
+          use Ada.Task_Initialization;
+ 
+          Global_Initialization_Handler : Initialization_Handler;
+          pragma Atomic (Global_Initialization_Handler);
+          pragma Import (Ada, Global_Initialization_Handler,
+                         "__gnat_global_initialization_handler");
+ 
        begin
           --  We are separating the following portion of the code in order to
           --  place the exception handlers in a different block. In this way,
*************** package body System.Tasking.Stages is
*** 1452,1458 ****
  
        To_Stderr (System.Address_Image (To_Address (Self_Id)));
        To_Stderr (" terminated by unhandled exception");
!       To_Stderr ((1 => ASCII.LF));
        To_Stderr (Exception_Information (Excep.all));
        Initialization.Task_Unlock (Self_Id);
     end Trace_Unhandled_Exception_In_Task;
--- 1462,1468 ----
  
        To_Stderr (System.Address_Image (To_Address (Self_Id)));
        To_Stderr (" terminated by unhandled exception");
!       To_Stderr ([ASCII.LF]);
        To_Stderr (Exception_Information (Excep.all));
        Initialization.Task_Unlock (Self_Id);
     end Trace_Unhandled_Exception_In_Task;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tassta.ads gcc-12.1.0/gcc/ada/libgnarl/s-tassta.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tassta.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tassta.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasuti.adb gcc-12.1.0/gcc/ada/libgnarl/s-tasuti.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasuti.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasuti.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tasuti.ads gcc-12.1.0/gcc/ada/libgnarl/s-tasuti.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tasuti.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tasuti.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tataat.adb gcc-12.1.0/gcc/ada/libgnarl/s-tataat.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tataat.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tataat.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 2014-2022, 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- --
*************** package body System.Tasking.Task_Attribu
*** 47,53 ****
     end record;
  
     Index_Array : array (1 .. Max_Attribute_Count) of Index_Info :=
!                    (others => (False, False));
  
     --  Note that this package will use an efficient implementation with no
     --  locks and no extra dynamic memory allocation if Attribute can fit in a
--- 47,53 ----
     end record;
  
     Index_Array : array (1 .. Max_Attribute_Count) of Index_Info :=
!                    [others => (False, False)];
  
     --  Note that this package will use an efficient implementation with no
     --  locks and no extra dynamic memory allocation if Attribute can fit in a
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tataat.ads gcc-12.1.0/gcc/ada/libgnarl/s-tataat.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tataat.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tataat.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --            Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --            Copyright (C) 2014-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpinop.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpinop.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpinop.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpinop.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpinop.ads gcc-12.1.0/gcc/ada/libgnarl/s-tpinop.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpinop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpinop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpoaal.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpoaal.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpoaal.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpoaal.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --        Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --        Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpoben.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpoben.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpoben.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpoben.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                               B o d y                                    --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                               B o d y                                    --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
*************** package body System.Tasking.Protected_Ob
*** 58,64 ****
     -- Local Data --
     ----------------
  
!    Locking_Policy : Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
  
     --------------
--- 58,64 ----
     -- Local Data --
     ----------------
  
!    Locking_Policy : constant Character;
     pragma Import (C, Locking_Policy, "__gl_locking_policy");
  
     --------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpoben.ads gcc-12.1.0/gcc/ada/libgnarl/s-tpoben.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpoben.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpoben.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpobmu.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpobmu.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpobmu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpobmu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                     M U L T I P R O C E S S O R S                        --
  --                               B o d y                                    --
  --                                                                          --
! --                       Copyright (C) 2010-2020, AdaCore                   --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                     M U L T I P R O C E S S O R S                        --
  --                               B o d y                                    --
  --                                                                          --
! --                       Copyright (C) 2010-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
*************** package body System.Tasking.Protected_Ob
*** 38,44 ****
     procedure Served (Entry_Call : Entry_Call_Link) is
        pragma Unreferenced (Entry_Call);
     begin
!       pragma Assert (False, "Invalid operation");
     end Served;
  
     -------------------------
--- 38,44 ----
     procedure Served (Entry_Call : Entry_Call_Link) is
        pragma Unreferenced (Entry_Call);
     begin
!       pragma Assert (Standard.False, "Invalid operation");
     end Served;
  
     -------------------------
*************** package body System.Tasking.Protected_Ob
*** 47,53 ****
  
     procedure Wakeup_Served_Entry is
     begin
!       pragma Assert (False, "Invalid operation");
     end Wakeup_Served_Entry;
  
  end System.Tasking.Protected_Objects.Multiprocessors;
--- 47,53 ----
  
     procedure Wakeup_Served_Entry is
     begin
!       pragma Assert (Standard.False, "Invalid operation");
     end Wakeup_Served_Entry;
  
  end System.Tasking.Protected_Objects.Multiprocessors;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpobmu.ads gcc-12.1.0/gcc/ada/libgnarl/s-tpobmu.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpobmu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpobmu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                     M U L T I P R O C E S S O R S                        --
  --                                S p e c                                   --
  --                                                                          --
! --                     Copyright (C) 2010-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                     M U L T I P R O C E S S O R S                        --
  --                                S p e c                                   --
  --                                                                          --
! --                     Copyright (C) 2010-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpobop.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpobop.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpobop.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpobop.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 1998-2022, 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- --
*************** package body System.Tasking.Protected_Ob
*** 601,607 ****
              when Asynchronous_Call
                 | Timed_Call
              =>
!                pragma Assert (False);
                 null;
           end case;
        end if;
--- 601,607 ----
              when Asynchronous_Call
                 | Timed_Call
              =>
!                pragma Assert (Standard.False);
                 null;
           end case;
        end if;
*************** package body System.Tasking.Protected_Ob
*** 857,863 ****
        Ceiling_Violation : Boolean;
  
        Yielded : Boolean;
-       pragma Unreferenced (Yielded);
  
     begin
        if Self_Id.ATC_Nesting_Level = ATC_Level'Last then
--- 857,862 ----
*************** package body System.Tasking.Protected_Ob
*** 942,962 ****
  
     New_State : constant array (Boolean, Entry_Call_State)
       of Entry_Call_State :=
!        (True =>
!          (Never_Abortable   => Never_Abortable,
            Not_Yet_Abortable => Now_Abortable,
            Was_Abortable     => Now_Abortable,
            Now_Abortable     => Now_Abortable,
            Done              => Done,
!           Cancelled         => Cancelled),
          False =>
!          (Never_Abortable   => Never_Abortable,
            Not_Yet_Abortable => Not_Yet_Abortable,
            Was_Abortable     => Was_Abortable,
            Now_Abortable     => Now_Abortable,
            Done              => Done,
!           Cancelled         => Cancelled)
!        );
  
     procedure Update_For_Queue_To_PO
       (Entry_Call : Entry_Call_Link;
--- 941,961 ----
  
     New_State : constant array (Boolean, Entry_Call_State)
       of Entry_Call_State :=
!        [True =>
!          [Never_Abortable   => Never_Abortable,
            Not_Yet_Abortable => Now_Abortable,
            Was_Abortable     => Now_Abortable,
            Now_Abortable     => Now_Abortable,
            Done              => Done,
!           Cancelled         => Cancelled],
          False =>
!          [Never_Abortable   => Never_Abortable,
            Not_Yet_Abortable => Not_Yet_Abortable,
            Was_Abortable     => Was_Abortable,
            Now_Abortable     => Now_Abortable,
            Done              => Done,
!           Cancelled         => Cancelled]
!        ];
  
     procedure Update_For_Queue_To_PO
       (Entry_Call : Entry_Call_Link;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpobop.ads gcc-12.1.0/gcc/ada/libgnarl/s-tpobop.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpobop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpobop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpopmo.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpopmo.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpopmo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpopmo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
*************** package body Monotonic is
*** 208,214 ****
                       exit Inner;
  
                    when others =>
!                      pragma Assert (False);
  
                 end case;
  
--- 208,214 ----
                       exit Inner;
  
                    when others =>
!                      pragma Assert (Standard.False);
  
                 end case;
  
*************** package body Monotonic is
*** 292,298 ****
                    when 0 | EINTR => null;
  
                    when others =>
!                      pragma Assert (False);
  
                 end case;
  
--- 292,298 ----
                    when 0 | EINTR => null;
  
                    when others =>
!                      pragma Assert (Standard.False);
  
                 end case;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__posix-foreign.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__posix-foreign.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__posix-foreign.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__posix-foreign.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__posix.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__posix.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__posix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__posix.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__solaris.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__solaris.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__solaris.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__solaris.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__tls.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__tls.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__tls.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__tls.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__vxworks-rtp.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__vxworks-rtp.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__vxworks-rtp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__vxworks-rtp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 35,40 ****
--- 35,42 ----
  separate (System.Task_Primitives.Operations)
  package body Specific is
  
+    ERROR : constant STATUS := System.VxWorks.Ext.ERROR;
+ 
     ATCB_Key : int := 0;
     --  Key used to find the Ada Task_Id associated with a thread
  
*************** package body Specific is
*** 43,51 ****
     ----------------
  
     procedure Initialize is
     begin
        ATCB_Key := tlsKeyCreate;
!       pragma Assert (ATCB_Key /= ERROR);
     end Initialize;
  
     -------------------
--- 45,54 ----
     ----------------
  
     procedure Initialize is
+       IERR : constant := -1;
     begin
        ATCB_Key := tlsKeyCreate;
!       pragma Assert (ATCB_Key /= IERR);
     end Initialize;
  
     -------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__vxworks-tls.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__vxworks-tls.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__vxworks-tls.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__vxworks-tls.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__vxworks.adb gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__vxworks.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tpopsp__vxworks.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tpopsp__vxworks.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1992-2022, 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- --
***************
*** 35,40 ****
--- 35,42 ----
  separate (System.Task_Primitives.Operations)
  package body Specific is
  
+    ERROR  : constant STATUS := System.VxWorks.Ext.ERROR;
+ 
     ATCB_Key : aliased System.Address := System.Null_Address;
     --  Key used to find the Ada Task_Id associated with a thread
  
*************** package body Specific is
*** 70,77 ****
     -------------------
  
     function Is_Valid_Task return Boolean is
     begin
!       return taskVarGet (taskIdSelf, ATCB_Key'Access) /= ERROR;
     end Is_Valid_Task;
  
     ---------
--- 72,80 ----
     -------------------
  
     function Is_Valid_Task return Boolean is
+       IERR : constant := -1;
     begin
!       return taskVarGet (taskIdSelf, ATCB_Key'Access) /= IERR;
     end Is_Valid_Task;
  
     ---------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tporft.adb gcc-12.1.0/gcc/ada/libgnarl/s-tporft.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tporft.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tporft.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tposen.adb gcc-12.1.0/gcc/ada/libgnarl/s-tposen.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-tposen.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tposen.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --         Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --         Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-tposen.ads gcc-12.1.0/gcc/ada/libgnarl/s-tposen.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-tposen.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-tposen.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwext.adb gcc-12.1.0/gcc/ada/libgnarl/s-vxwext.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwext.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwext.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
***************
*** 30,36 ****
  
  package body System.VxWorks.Ext is
  
!    ERROR : constant := -1;
  
     ------------------------
     -- taskCpuAffinitySet --
--- 30,36 ----
  
  package body System.VxWorks.Ext is
  
!    IERR : constant := -1;
  
     ------------------------
     -- taskCpuAffinitySet --
*************** package body System.VxWorks.Ext is
*** 39,45 ****
     function taskCpuAffinitySet (tid : t_id; CPU : int) return int is
        pragma Unreferenced (tid, CPU);
     begin
!       return ERROR;
     end taskCpuAffinitySet;
  
     -------------------------
--- 39,45 ----
     function taskCpuAffinitySet (tid : t_id; CPU : int) return int is
        pragma Unreferenced (tid, CPU);
     begin
!       return IERR;
     end taskCpuAffinitySet;
  
     -------------------------
*************** package body System.VxWorks.Ext is
*** 49,55 ****
     function taskMaskAffinitySet (tid : t_id; CPU_Set : unsigned) return int is
        pragma Unreferenced (tid, CPU_Set);
     begin
!       return ERROR;
     end taskMaskAffinitySet;
  
  end System.VxWorks.Ext;
--- 49,55 ----
     function taskMaskAffinitySet (tid : t_id; CPU_Set : unsigned) return int is
        pragma Unreferenced (tid, CPU_Set);
     begin
!       return IERR;
     end taskMaskAffinitySet;
  
  end System.VxWorks.Ext;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwext.ads gcc-12.1.0/gcc/ada/libgnarl/s-vxwext.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwext.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwext.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
*************** package System.VxWorks.Ext is
*** 46,51 ****
--- 46,63 ----
     subtype int is Interfaces.C.int;
     subtype unsigned is Interfaces.C.unsigned;
  
+    type STATUS is new int;
+    --  Equivalent of the C type STATUS
+ 
+    OK    : constant STATUS := 0;
+    ERROR : constant STATUS := -1;
+ 
+    type BOOL is new int;
+    --  Equivalent of the C type BOOL
+ 
+    type vx_freq_t is new unsigned;
+    --  Equivalent of the C type _Vx_freq_t
+ 
     type Interrupt_Handler is access procedure (parameter : System.Address);
     pragma Convention (C, Interrupt_Handler);
  
*************** package System.VxWorks.Ext is
*** 54,60 ****
     function Int_Lock return int;
     pragma Import (C, Int_Lock, "intLock");
  
!    function Int_Unlock (Old : int) return int;
     pragma Import (C, Int_Unlock, "intUnlock");
  
     function Interrupt_Connect
--- 66,72 ----
     function Int_Lock return int;
     pragma Import (C, Int_Lock, "intLock");
  
!    procedure Int_Unlock (Old : int);
     pragma Import (C, Int_Unlock, "intUnlock");
  
     function Interrupt_Connect
*************** package System.VxWorks.Ext is
*** 63,69 ****
        Parameter : System.Address := System.Null_Address) return int;
     pragma Import (C, Interrupt_Connect, "intConnect");
  
!    function Interrupt_Context return int;
     pragma Import (C, Interrupt_Context, "intContext");
  
     function Interrupt_Number_To_Vector
--- 75,81 ----
        Parameter : System.Address := System.Null_Address) return int;
     pragma Import (C, Interrupt_Connect, "intConnect");
  
!    function Interrupt_Context return BOOL;
     pragma Import (C, Interrupt_Context, "intContext");
  
     function Interrupt_Number_To_Vector
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__kernel-smp.adb gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__kernel-smp.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__kernel-smp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__kernel-smp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --          Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --          Copyright (C) 2008-2022, 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- --
***************
*** 33,39 ****
  
  package body System.VxWorks.Ext is
  
!    ERROR : constant := -1;
  
     --------------
     -- Int_Lock --
--- 33,39 ----
  
  package body System.VxWorks.Ext is
  
!    IERR : constant := -1;
  
     --------------
     -- Int_Lock --
*************** package body System.VxWorks.Ext is
*** 41,65 ****
  
     function Int_Lock return int is
     begin
!       return ERROR;
     end Int_Lock;
  
     ----------------
     -- Int_Unlock --
     ----------------
  
!    function Int_Unlock (Old : int) return int is
        pragma Unreferenced (Old);
     begin
!       return ERROR;
     end Int_Unlock;
  
     ---------------
     -- semDelete --
     ---------------
  
!    function semDelete (Sem : SEM_ID) return int is
!       function Os_Sem_Delete (Sem : SEM_ID) return int;
        pragma Import (C, Os_Sem_Delete, "semDelete");
     begin
        return Os_Sem_Delete (Sem);
--- 41,65 ----
  
     function Int_Lock return int is
     begin
!       return IERR;
     end Int_Lock;
  
     ----------------
     -- Int_Unlock --
     ----------------
  
!    procedure Int_Unlock (Old : int) is
        pragma Unreferenced (Old);
     begin
!       null;
     end Int_Unlock;
  
     ---------------
     -- semDelete --
     ---------------
  
!    function semDelete (Sem : SEM_ID) return STATUS is
!       function Os_Sem_Delete (Sem : SEM_ID) return STATUS;
        pragma Import (C, Os_Sem_Delete, "semDelete");
     begin
        return Os_Sem_Delete (Sem);
*************** package body System.VxWorks.Ext is
*** 92,99 ****
     -- Task_Cont --
     ---------------
  
!    function Task_Cont (tid : t_id) return int is
!       function taskCont (tid : t_id) return int;
        pragma Import (C, taskCont, "taskCont");
     begin
        return taskCont (tid);
--- 92,99 ----
     -- Task_Cont --
     ---------------
  
!    function Task_Cont (tid : t_id) return STATUS is
!       function taskCont (tid : t_id) return STATUS;
        pragma Import (C, taskCont, "taskCont");
     begin
        return taskCont (tid);
*************** package body System.VxWorks.Ext is
*** 103,110 ****
     -- Task_Stop --
     ---------------
  
!    function Task_Stop (tid : t_id) return int is
!       function taskStop (tid : t_id) return int;
        pragma Import (C, taskStop, "taskStop");
     begin
        return taskStop (tid);
--- 103,110 ----
     -- Task_Stop --
     ---------------
  
!    function Task_Stop (tid : t_id) return STATUS is
!       function taskStop (tid : t_id) return STATUS;
        pragma Import (C, taskStop, "taskStop");
     begin
        return taskStop (tid);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__kernel.adb gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__kernel.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__kernel.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__kernel.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 34,40 ****
  
  package body System.VxWorks.Ext is
  
!    ERROR : constant := -1;
  
     --------------
     -- Int_Lock --
--- 34,40 ----
  
  package body System.VxWorks.Ext is
  
!    IERR : constant := -1;
  
     --------------
     -- Int_Lock --
*************** package body System.VxWorks.Ext is
*** 49,65 ****
     -- Int_Unlock --
     ----------------
  
!    function intUnlock (Old : int) return int;
     pragma Import (C, intUnlock, "intUnlock");
  
!    function Int_Unlock (Old : int) return int renames intUnlock;
  
     ---------------
     -- semDelete --
     ---------------
  
!    function semDelete (Sem : SEM_ID) return int is
!       function Os_Sem_Delete (Sem : SEM_ID) return int;
        pragma Import (C, Os_Sem_Delete, "semDelete");
     begin
        return Os_Sem_Delete (Sem);
--- 49,65 ----
     -- Int_Unlock --
     ----------------
  
!    procedure intUnlock (Old : int);
     pragma Import (C, intUnlock, "intUnlock");
  
!    procedure Int_Unlock (Old : int) renames intUnlock;
  
     ---------------
     -- semDelete --
     ---------------
  
!    function semDelete (Sem : SEM_ID) return STATUS is
!       function Os_Sem_Delete (Sem : SEM_ID) return STATUS;
        pragma Import (C, Os_Sem_Delete, "semDelete");
     begin
        return Os_Sem_Delete (Sem);
*************** package body System.VxWorks.Ext is
*** 72,78 ****
     function taskCpuAffinitySet (tid : t_id; CPU : int) return int is
        pragma Unreferenced (tid, CPU);
     begin
!       return ERROR;
     end taskCpuAffinitySet;
  
     -------------------------
--- 72,78 ----
     function taskCpuAffinitySet (tid : t_id; CPU : int) return int is
        pragma Unreferenced (tid, CPU);
     begin
!       return IERR;
     end taskCpuAffinitySet;
  
     -------------------------
*************** package body System.VxWorks.Ext is
*** 82,96 ****
     function taskMaskAffinitySet (tid : t_id; CPU_Set : unsigned) return int is
        pragma Unreferenced (tid, CPU_Set);
     begin
!       return ERROR;
     end taskMaskAffinitySet;
  
     ---------------
     -- Task_Cont --
     ---------------
  
!    function Task_Cont (tid : t_id) return int is
!       function taskCont (tid : t_id) return int;
        pragma Import (C, taskCont, "taskCont");
     begin
        return taskCont (tid);
--- 82,96 ----
     function taskMaskAffinitySet (tid : t_id; CPU_Set : unsigned) return int is
        pragma Unreferenced (tid, CPU_Set);
     begin
!       return IERR;
     end taskMaskAffinitySet;
  
     ---------------
     -- Task_Cont --
     ---------------
  
!    function Task_Cont (tid : t_id) return STATUS is
!       function taskCont (tid : t_id) return STATUS;
        pragma Import (C, taskCont, "taskCont");
     begin
        return taskCont (tid);
*************** package body System.VxWorks.Ext is
*** 100,107 ****
     -- Task_Stop --
     ---------------
  
!    function Task_Stop (tid : t_id) return int is
!       function taskStop (tid : t_id) return int;
        pragma Import (C, taskStop, "taskStop");
     begin
        return taskStop (tid);
--- 100,107 ----
     -- Task_Stop --
     ---------------
  
!    function Task_Stop (tid : t_id) return STATUS is
!       function taskStop (tid : t_id) return STATUS;
        pragma Import (C, taskStop, "taskStop");
     begin
        return taskStop (tid);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__kernel.ads gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__kernel.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__kernel.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__kernel.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
*************** package System.VxWorks.Ext is
*** 45,50 ****
--- 45,62 ----
     subtype int is Interfaces.C.int;
     subtype unsigned is Interfaces.C.unsigned;
  
+    type STATUS is new int;
+    --  Equivalent of the C type STATUS
+ 
+    OK    : constant STATUS := 0;
+    ERROR : constant STATUS := -1;
+ 
+    type BOOL is new int;
+    --  Equivalent of the C type BOOL
+ 
+    type vx_freq_t is new unsigned;
+    --  Equivalent of the C type _Vx_freq_t
+ 
     type Interrupt_Handler is access procedure (parameter : System.Address);
     pragma Convention (C, Interrupt_Handler);
  
*************** package System.VxWorks.Ext is
*** 53,81 ****
     function Int_Lock return int;
     pragma Convention (C, Int_Lock);
  
!    function Int_Unlock (Old : int) return int;
     pragma Convention (C, Int_Unlock);
  
     function Interrupt_Connect
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return int;
     pragma Import (C, Interrupt_Connect, "intConnect");
  
!    function Interrupt_Context return int;
     pragma Import (C, Interrupt_Context, "intContext");
  
     function Interrupt_Number_To_Vector
       (intNum : int) return Interrupt_Vector;
     pragma Import (C, Interrupt_Number_To_Vector, "__gnat_inum_to_ivec");
  
!    function semDelete (Sem : SEM_ID) return int;
     pragma Convention (C, semDelete);
  
!    function Task_Cont (tid : t_id) return int;
     pragma Convention (C, Task_Cont);
  
!    function Task_Stop (tid : t_id) return int;
     pragma Convention (C, Task_Stop);
  
     function kill (pid : t_id; sig : int) return int;
--- 65,93 ----
     function Int_Lock return int;
     pragma Convention (C, Int_Lock);
  
!    procedure Int_Unlock (Old : int);
     pragma Convention (C, Int_Unlock);
  
     function Interrupt_Connect
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return STATUS;
     pragma Import (C, Interrupt_Connect, "intConnect");
  
!    function Interrupt_Context return BOOL;
     pragma Import (C, Interrupt_Context, "intContext");
  
     function Interrupt_Number_To_Vector
       (intNum : int) return Interrupt_Vector;
     pragma Import (C, Interrupt_Number_To_Vector, "__gnat_inum_to_ivec");
  
!    function semDelete (Sem : SEM_ID) return STATUS;
     pragma Convention (C, semDelete);
  
!    function Task_Cont (tid : t_id) return STATUS;
     pragma Convention (C, Task_Cont);
  
!    function Task_Stop (tid : t_id) return STATUS;
     pragma Convention (C, Task_Stop);
  
     function kill (pid : t_id; sig : int) return int;
*************** package System.VxWorks.Ext is
*** 84,90 ****
     function getpid return t_id;
     pragma Import (C, getpid, "taskIdSelf");
  
!    function Set_Time_Slice (ticks : int) return int;
     pragma Import (C, Set_Time_Slice, "kernelTimeSlice");
  
     type UINT64 is mod 2 ** Long_Long_Integer'Size;
--- 96,102 ----
     function getpid return t_id;
     pragma Import (C, getpid, "taskIdSelf");
  
!    function Set_Time_Slice (ticks : int) return STATUS;
     pragma Import (C, Set_Time_Slice, "kernelTimeSlice");
  
     type UINT64 is mod 2 ** Long_Long_Integer'Size;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__noints.adb gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__noints.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__noints.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__noints.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,126 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                  GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                --
- --                                                                          --
- --                     S Y S T E M . V X W O R K S . E X T                  --
- --                                                                          --
- --                                   B o d y                                --
- --                                                                          --
- --            Copyright (C) 2008-2020, Free Software Foundation, Inc.       --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides vxworks specific support functions needed
- --  by System.OS_Interface.
- 
- --  This is a version for VxWorks 5 based systems with no interrupts:
- --  HI-Ravenscar for VxWorks 5, VxWorks 653 vThreads (not ravenscar-cert)
- 
- package body System.VxWorks.Ext is
- 
-    ERROR : constant := -1;
- 
-    --------------
-    -- Int_Lock --
-    --------------
- 
-    function Int_Lock return int is
-    begin
-       return ERROR;
-    end Int_Lock;
- 
-    ----------------
-    -- Int_Unlock --
-    ----------------
- 
-    function Int_Unlock (Old : int) return int is
-       pragma Unreferenced (Old);
-    begin
-       return ERROR;
-    end Int_Unlock;
- 
-    -----------------------
-    -- Interrupt_Connect --
-    -----------------------
- 
-    function Interrupt_Connect
-      (Vector    : Interrupt_Vector;
-       Handler   : Interrupt_Handler;
-       Parameter : System.Address := System.Null_Address) return int
-    is
-       pragma Unreferenced (Vector, Handler, Parameter);
-    begin
-       return ERROR;
-    end Interrupt_Connect;
- 
-    -----------------------
-    -- Interrupt_Context --
-    -----------------------
- 
-    function Interrupt_Context return int is
-    begin
-       --  For VxWorks 653 vThreads, never in an interrupt context
- 
-       return 0;
-    end Interrupt_Context;
- 
-    --------------------------------
-    -- Interrupt_Number_To_Vector --
-    --------------------------------
- 
-    function Interrupt_Number_To_Vector
-      (intNum : int) return Interrupt_Vector
-    is
-       pragma Unreferenced (intNum);
-    begin
-       return 0;
-    end Interrupt_Number_To_Vector;
- 
-    ---------------
-    -- semDelete --
-    ---------------
- 
-    function semDelete (Sem : SEM_ID) return int is
-       function Os_Sem_Delete (Sem : SEM_ID) return int;
-       pragma Import (C, Os_Sem_Delete, "semDelete");
-    begin
-       return Os_Sem_Delete (Sem);
-    end semDelete;
- 
-    ------------------------
-    -- taskCpuAffinitySet --
-    ------------------------
- 
-    function taskCpuAffinitySet (tid : t_id; CPU : int) return int is
-       pragma Unreferenced (tid, CPU);
-    begin
-       return ERROR;
-    end taskCpuAffinitySet;
- 
-    -------------------------
-    -- taskMaskAffinitySet --
-    -------------------------
- 
-    function taskMaskAffinitySet (tid : t_id; CPU_Set : unsigned) return int is
-       pragma Unreferenced (tid, CPU_Set);
-    begin
-       return ERROR;
-    end taskMaskAffinitySet;
- 
- end System.VxWorks.Ext;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__rtp-smp.adb gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__rtp-smp.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__rtp-smp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__rtp-smp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 33,39 ****
  
  package body System.VxWorks.Ext is
  
!    ERROR : constant := -1;
  
     --------------
     -- Int_Lock --
--- 33,39 ----
  
  package body System.VxWorks.Ext is
  
!    IERR : constant := -1;
  
     --------------
     -- Int_Lock --
*************** package body System.VxWorks.Ext is
*** 41,57 ****
  
     function Int_Lock return int is
     begin
!       return ERROR;
     end Int_Lock;
  
     ----------------
     -- Int_Unlock --
     ----------------
  
!    function Int_Unlock (Old : int) return int is
        pragma Unreferenced (Old);
     begin
!       return ERROR;
     end Int_Unlock;
  
     -----------------------
--- 41,57 ----
  
     function Int_Lock return int is
     begin
!       return IERR;
     end Int_Lock;
  
     ----------------
     -- Int_Unlock --
     ----------------
  
!    procedure Int_Unlock (Old : int) is
        pragma Unreferenced (Old);
     begin
!       null;
     end Int_Unlock;
  
     -----------------------
*************** package body System.VxWorks.Ext is
*** 61,67 ****
     function Interrupt_Connect
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return int
     is
        pragma Unreferenced (Vector, Handler, Parameter);
     begin
--- 61,67 ----
     function Interrupt_Connect
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return STATUS
     is
        pragma Unreferenced (Vector, Handler, Parameter);
     begin
*************** package body System.VxWorks.Ext is
*** 72,78 ****
     -- Interrupt_Context --
     -----------------------
  
!    function Interrupt_Context return int is
     begin
        --  For RTPs, never in an interrupt context
  
--- 72,78 ----
     -- Interrupt_Context --
     -----------------------
  
!    function Interrupt_Context return BOOL is
     begin
        --  For RTPs, never in an interrupt context
  
*************** package body System.VxWorks.Ext is
*** 95,102 ****
     -- semDelete --
     ---------------
  
!    function semDelete (Sem : SEM_ID) return int is
!       function OS_semDelete (Sem : SEM_ID) return int;
        pragma Import (C, OS_semDelete, "semDelete");
     begin
        return OS_semDelete (Sem);
--- 95,102 ----
     -- semDelete --
     ---------------
  
!    function semDelete (Sem : SEM_ID) return STATUS is
!       function OS_semDelete (Sem : SEM_ID) return STATUS;
        pragma Import (C, OS_semDelete, "semDelete");
     begin
        return OS_semDelete (Sem);
*************** package body System.VxWorks.Ext is
*** 106,112 ****
     -- Set_Time_Slice --
     --------------------
  
!    function Set_Time_Slice (ticks : int) return int is
        pragma Unreferenced (ticks);
     begin
        return ERROR;
--- 106,112 ----
     -- Set_Time_Slice --
     --------------------
  
!    function Set_Time_Slice (ticks : int) return STATUS is
        pragma Unreferenced (ticks);
     begin
        return ERROR;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__rtp.adb gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__rtp.adb
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__rtp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__rtp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   B o d y                                --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 33,39 ****
  
  package body System.VxWorks.Ext is
  
!    ERROR : constant := -1;
  
     --------------
     -- Int_Lock --
--- 33,39 ----
  
  package body System.VxWorks.Ext is
  
!    IERR : constant := -1;
  
     --------------
     -- Int_Lock --
*************** package body System.VxWorks.Ext is
*** 41,57 ****
  
     function Int_Lock return int is
     begin
!       return ERROR;
     end Int_Lock;
  
     ----------------
     -- Int_Unlock --
     ----------------
  
!    function Int_Unlock (Old : int) return int is
        pragma Unreferenced (Old);
     begin
!       return ERROR;
     end Int_Unlock;
  
     -----------------------
--- 41,57 ----
  
     function Int_Lock return int is
     begin
!       return IERR;
     end Int_Lock;
  
     ----------------
     -- Int_Unlock --
     ----------------
  
!    procedure Int_Unlock (Old : int) is
        pragma Unreferenced (Old);
     begin
!       null;
     end Int_Unlock;
  
     -----------------------
*************** package body System.VxWorks.Ext is
*** 61,67 ****
     function Interrupt_Connect
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return int
     is
        pragma Unreferenced (Vector, Handler, Parameter);
     begin
--- 61,67 ----
     function Interrupt_Connect
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return STATUS
     is
        pragma Unreferenced (Vector, Handler, Parameter);
     begin
*************** package body System.VxWorks.Ext is
*** 72,78 ****
     -- Interrupt_Context --
     -----------------------
  
!    function Interrupt_Context return int is
     begin
        --  For RTPs, never in an interrupt context
  
--- 72,78 ----
     -- Interrupt_Context --
     -----------------------
  
!    function Interrupt_Context return BOOL is
     begin
        --  For RTPs, never in an interrupt context
  
*************** package body System.VxWorks.Ext is
*** 95,102 ****
     -- semDelete --
     ---------------
  
!    function semDelete (Sem : SEM_ID) return int is
!       function OS_semDelete (Sem : SEM_ID) return int;
        pragma Import (C, OS_semDelete, "semDelete");
     begin
        return OS_semDelete (Sem);
--- 95,102 ----
     -- semDelete --
     ---------------
  
!    function semDelete (Sem : SEM_ID) return STATUS is
!       function OS_semDelete (Sem : SEM_ID) return STATUS;
        pragma Import (C, OS_semDelete, "semDelete");
     begin
        return OS_semDelete (Sem);
*************** package body System.VxWorks.Ext is
*** 106,112 ****
     -- Set_Time_Slice --
     --------------------
  
!    function Set_Time_Slice (ticks : int) return int is
        pragma Unreferenced (ticks);
     begin
        return ERROR;
--- 106,112 ----
     -- Set_Time_Slice --
     --------------------
  
!    function Set_Time_Slice (ticks : int) return STATUS is
        pragma Unreferenced (ticks);
     begin
        return ERROR;
*************** package body System.VxWorks.Ext is
*** 119,125 ****
     function taskCpuAffinitySet (tid : t_id; CPU : int) return int is
        pragma Unreferenced (tid, CPU);
     begin
!       return ERROR;
     end taskCpuAffinitySet;
  
     -------------------------
--- 119,125 ----
     function taskCpuAffinitySet (tid : t_id; CPU : int) return int is
        pragma Unreferenced (tid, CPU);
     begin
!       return IERR;
     end taskCpuAffinitySet;
  
     -------------------------
*************** package body System.VxWorks.Ext is
*** 129,135 ****
     function taskMaskAffinitySet (tid : t_id; CPU_Set : unsigned) return int is
        pragma Unreferenced (tid, CPU_Set);
     begin
!       return ERROR;
     end taskMaskAffinitySet;
  
  end System.VxWorks.Ext;
--- 129,135 ----
     function taskMaskAffinitySet (tid : t_id; CPU_Set : unsigned) return int is
        pragma Unreferenced (tid, CPU_Set);
     begin
!       return IERR;
     end taskMaskAffinitySet;
  
  end System.VxWorks.Ext;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__rtp.ads gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__rtp.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__rtp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__rtp.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
*************** package System.VxWorks.Ext is
*** 45,50 ****
--- 45,62 ----
     subtype int is Interfaces.C.int;
     subtype unsigned is Interfaces.C.unsigned;
  
+    type STATUS is new int;
+    --  Equivalent of the C type STATUS
+ 
+    OK    : constant STATUS := 0;
+    ERROR : constant STATUS := -1;
+ 
+    type BOOL is new int;
+    --  Equivalent of the C type BOOL
+ 
+    type vx_freq_t is new unsigned;
+    --  Equivalent of the C type _Vx_freq_t
+ 
     type Interrupt_Handler is access procedure (parameter : System.Address);
     pragma Convention (C, Interrupt_Handler);
  
*************** package System.VxWorks.Ext is
*** 53,81 ****
     function Int_Lock return int;
     pragma Inline (Int_Lock);
  
!    function Int_Unlock (Old : int) return int;
     pragma Inline (Int_Unlock);
  
     function Interrupt_Connect
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return int;
     pragma Convention (C, Interrupt_Connect);
  
!    function Interrupt_Context return int;
     pragma Convention (C, Interrupt_Context);
  
     function Interrupt_Number_To_Vector
       (intNum : int) return Interrupt_Vector;
     pragma Convention (C, Interrupt_Number_To_Vector);
  
!    function semDelete (Sem : SEM_ID) return int;
     pragma Convention (C, semDelete);
  
!    function Task_Cont (tid : t_id) return int;
     pragma Import (C, Task_Cont, "taskResume");
  
!    function Task_Stop (tid : t_id) return int;
     pragma Import (C, Task_Stop, "taskSuspend");
  
     function kill (pid : t_id; sig : int) return int;
--- 65,93 ----
     function Int_Lock return int;
     pragma Inline (Int_Lock);
  
!    procedure Int_Unlock (Old : int);
     pragma Inline (Int_Unlock);
  
     function Interrupt_Connect
       (Vector    : Interrupt_Vector;
        Handler   : Interrupt_Handler;
!       Parameter : System.Address := System.Null_Address) return STATUS;
     pragma Convention (C, Interrupt_Connect);
  
!    function Interrupt_Context return BOOL;
     pragma Convention (C, Interrupt_Context);
  
     function Interrupt_Number_To_Vector
       (intNum : int) return Interrupt_Vector;
     pragma Convention (C, Interrupt_Number_To_Vector);
  
!    function semDelete (Sem : SEM_ID) return STATUS;
     pragma Convention (C, semDelete);
  
!    function Task_Cont (tid : t_id) return STATUS;
     pragma Import (C, Task_Cont, "taskResume");
  
!    function Task_Stop (tid : t_id) return STATUS;
     pragma Import (C, Task_Stop, "taskSuspend");
  
     function kill (pid : t_id; sig : int) return int;
*************** package System.VxWorks.Ext is
*** 84,90 ****
     function getpid return t_id;
     pragma Import (C, getpid, "getpid");
  
!    function Set_Time_Slice (ticks : int) return int;
     pragma Inline (Set_Time_Slice);
  
     --------------------------------
--- 96,102 ----
     function getpid return t_id;
     pragma Import (C, getpid, "getpid");
  
!    function Set_Time_Slice (ticks : int) return STATUS;
     pragma Inline (Set_Time_Slice);
  
     --------------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__vthreads.ads gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__vthreads.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwext__vthreads.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwext__vthreads.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,109 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                  GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                --
- --                                                                          --
- --                     S Y S T E M . V X W O R K S . E X T                  --
- --                                                                          --
- --                                   S p e c                                --
- --                                                                          --
- --            Copyright (C) 2008-2020, Free Software Foundation, Inc.       --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides VxWorks specific support functions needed
- --  by System.OS_Interface.
- 
- --  This is the VxWorks 653 vThreads version of this package
- 
- with Interfaces.C;
- 
- package System.VxWorks.Ext is
-    pragma Preelaborate;
- 
-    subtype SEM_ID is Long_Integer;
-    --  typedef struct semaphore *SEM_ID;
- 
-    type sigset_t is mod 2 ** Interfaces.C.long'Size;
- 
-    type t_id is new Long_Integer;
-    subtype int is Interfaces.C.int;
-    subtype unsigned is Interfaces.C.unsigned;
- 
-    type Interrupt_Handler is access procedure (parameter : System.Address);
-    pragma Convention (C, Interrupt_Handler);
- 
-    type Interrupt_Vector is new System.Address;
-    function Int_Lock return int;
-    pragma Inline (Int_Lock);
- 
-    function Int_Unlock (Old : int) return int;
-    pragma Inline (Int_Unlock);
- 
-    function Interrupt_Connect
-      (Vector    : Interrupt_Vector;
-       Handler   : Interrupt_Handler;
-       Parameter : System.Address := System.Null_Address) return int;
-    pragma Convention (C, Interrupt_Connect);
- 
-    function Interrupt_Context return int;
-    pragma Convention (C, Interrupt_Context);
- 
-    function Interrupt_Number_To_Vector
-      (intNum : int) return Interrupt_Vector;
-    pragma Convention (C, Interrupt_Number_To_Vector);
- 
-    function semDelete (Sem : SEM_ID) return int;
-    pragma Convention (C, semDelete);
- 
-    function Task_Cont (tid : t_id) return int;
-    pragma Import (C, Task_Cont, "taskResume");
- 
-    function Task_Stop (tid : t_id) return int;
-    pragma Import (C, Task_Stop, "taskSuspend");
- 
-    function kill (pid : t_id; sig : int) return int;
-    pragma Import (C, kill, "kill");
- 
-    function getpid return t_id;
-    pragma Import (C, getpid, "taskIdSelf");
- 
-    function Set_Time_Slice (ticks : int) return int;
-    pragma Import (C, Set_Time_Slice, "kernelTimeSlice");
- 
-    type UINT64 is mod 2 ** Long_Long_Integer'Size;
- 
-    function tickGet return UINT64;
-    --  "tickGet" not available for cert vThreads:
-    pragma Import (C, tickGet, "tick64Get");
- 
-    --------------------------------
-    -- Processor Affinity for SMP --
-    --------------------------------
- 
-    function taskCpuAffinitySet (tid : t_id; CPU : int) return int;
-    pragma Convention (C, taskCpuAffinitySet);
-    --  For SMP run-times set the CPU affinity.
-    --  For uniprocessor systems return ERROR status.
- 
-    function taskMaskAffinitySet (tid : t_id; CPU_Set : unsigned) return int;
-    pragma Convention (C, taskMaskAffinitySet);
-    --  For SMP run-times set the CPU mask affinity.
-    --  For uniprocessor systems return ERROR status.
- 
- end System.VxWorks.Ext;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwork__aarch64.ads gcc-12.1.0/gcc/ada/libgnarl/s-vxwork__aarch64.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwork__aarch64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwork__aarch64.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwork__arm.ads gcc-12.1.0/gcc/ada/libgnarl/s-vxwork__arm.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwork__arm.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwork__arm.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwork__ppc.ads gcc-12.1.0/gcc/ada/libgnarl/s-vxwork__ppc.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwork__ppc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwork__ppc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/s-vxwork__x86.ads gcc-12.1.0/gcc/ada/libgnarl/s-vxwork__x86.ads
*** gcc-11.3.0/gcc/ada/libgnarl/s-vxwork__x86.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/s-vxwork__x86.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnarl/thread.c gcc-12.1.0/gcc/ada/libgnarl/thread.c
*** gcc-11.3.0/gcc/ada/libgnarl/thread.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnarl/thread.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 2011-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 2011-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-assert.adb gcc-12.1.0/gcc/ada/libgnat/a-assert.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-assert.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-assert.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2007-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-assert.ads gcc-12.1.0/gcc/ada/libgnat/a-assert.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-assert.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-assert.ads	Fri May  6 07:30:56 2022
***************
*** 4,10 ****
  --                                                                          --
  --                       A D A . A S S E R T I O N S                        --
  --                                                                          --
! --            Copyright (C) 2015-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
--- 4,10 ----
  --                                                                          --
  --                       A D A . A S S E R T I O N S                        --
  --                                                                          --
! --            Copyright (C) 2015-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
***************
*** 39,61 ****
  
  pragma Assertion_Policy (Pre => Ignore);
  
- --  We do a with of System.Assertions to get hold of the exception (following
- --  the specific RM permission that lets' Assertion_Error being a renaming).
- --  The suppression of Warnings stops the warning about bad categorization.
- 
- pragma Warnings (Off);
- with System.Assertions;
- pragma Warnings (On);
- 
  package Ada.Assertions with
!   SPARK_Mode
  is
!    pragma Pure (Assertions);
! 
!    Assertion_Error : exception renames System.Assertions.Assert_Failure;
!    --  This is the renaming that is allowed by 11.4.2(24). Note that the
!    --  Exception_Name will refer to the one in System.Assertions (see
!    --  AARM-11.4.1(12.b)).
  
     procedure Assert (Check : Boolean) with
       Pre => Check;
--- 39,48 ----
  
  pragma Assertion_Policy (Pre => Ignore);
  
  package Ada.Assertions with
!   SPARK_Mode, Pure
  is
!    Assertion_Error : exception;
  
     procedure Assert (Check : Boolean) with
       Pre => Check;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-btgbso.adb gcc-12.1.0/gcc/ada/libgnat/a-btgbso.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-btgbso.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-btgbso.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-btgbso.ads gcc-12.1.0/gcc/ada/libgnat/a-btgbso.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-btgbso.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-btgbso.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-calari.adb gcc-12.1.0/gcc/ada/libgnat/a-calari.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-calari.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-calari.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2006-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-calari.ads gcc-12.1.0/gcc/ada/libgnat/a-calari.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-calari.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-calari.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2005-2020, Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT.  In accordance with the copyright of that document, you can freely --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2005-2022, Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT.  In accordance with the copyright of that document, you can freely --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-calcon.adb gcc-12.1.0/gcc/ada/libgnat/a-calcon.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-calcon.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-calcon.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --        Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --        Copyright (C) 2008-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-calcon.ads gcc-12.1.0/gcc/ada/libgnat/a-calcon.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-calcon.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-calcon.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2008-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-caldel.adb gcc-12.1.0/gcc/ada/libgnat/a-caldel.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-caldel.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-caldel.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                  B o d y                                 --
  --                                                                          --
  --             Copyright (C) 1991-2017, Florida State University            --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-caldel.ads gcc-12.1.0/gcc/ada/libgnat/a-caldel.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-caldel.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-caldel.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-calend.adb gcc-12.1.0/gcc/ada/libgnat/a-calend.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-calend.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-calend.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** with Interfaces.C;
*** 35,40 ****
--- 35,42 ----
  
  with System.OS_Primitives;
  
+ with System.OS_Lib;
+ 
  package body Ada.Calendar with
    SPARK_Mode => Off
  is
*************** is
*** 147,153 ****
     -- Leap seconds control --
     --------------------------
  
!    Flag : Integer;
     pragma Import (C, Flag, "__gl_leap_seconds_support");
     --  This imported value is used to determine whether the compilation had
     --  binder flag "-y" present which enables leap seconds. A value of zero
--- 149,155 ----
     -- Leap seconds control --
     --------------------------
  
!    Flag : constant Integer;
     pragma Import (C, Flag, "__gl_leap_seconds_support");
     --  This imported value is used to determine whether the compilation had
     --  binder flag "-y" present which enables leap seconds. A value of zero
*************** is
*** 204,217 ****
  
     Cumulative_Days_Before_Month :
       constant array (Month_Number) of Natural :=
!        (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334);
  
     --  The following table contains the hard time values of all existing leap
     --  seconds. The values are produced by the utility program xleaps.adb. This
     --  must be updated when additional leap second times are defined.
  
     Leap_Second_Times : constant array (1 .. Leap_Seconds_Count) of Time_Rep :=
!      (-5601484800000000000,
        -5585587199000000000,
        -5554051198000000000,
        -5522515197000000000,
--- 206,219 ----
  
     Cumulative_Days_Before_Month :
       constant array (Month_Number) of Natural :=
!        [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
  
     --  The following table contains the hard time values of all existing leap
     --  seconds. The values are produced by the utility program xleaps.adb. This
     --  must be updated when additional leap second times are defined.
  
     Leap_Second_Times : constant array (1 .. Leap_Seconds_Count) of Time_Rep :=
!      [-5601484800000000000,
        -5585587199000000000,
        -5554051198000000000,
        -5522515197000000000,
*************** is
*** 237,243 ****
        -4449513577000000000,
        -4339180776000000000,
        -4244572775000000000,
!       -4197052774000000000);
  
     ---------
     -- "+" --
--- 239,245 ----
        -4449513577000000000,
        -4339180776000000000,
        -4244572775000000000,
!       -4197052774000000000];
  
     ---------
     -- "+" --
*************** is
*** 488,494 ****
        Y : Year_Number;
        M : Month_Number;
        S : Day_Duration;
-       pragma Unreferenced (Y, M, S);
     begin
        Split (Date, Y, M, D, S);
        return D;
--- 490,495 ----
*************** is
*** 535,541 ****
        M : Month_Number;
        D : Day_Number;
        S : Day_Duration;
-       pragma Unreferenced (Y, D, S);
     begin
        Split (Date, Y, M, D, S);
        return M;
--- 536,541 ----
*************** is
*** 550,556 ****
        M : Month_Number;
        D : Day_Number;
        S : Day_Duration;
-       pragma Unreferenced (Y, M, D);
     begin
        Split (Date, Y, M, D, S);
        return S;
--- 550,555 ----
*************** is
*** 573,580 ****
        Ss : Duration;
        Le : Boolean;
  
-       pragma Unreferenced (H, M, Se, Ss, Le);
- 
     begin
        --  Even though the input time zone is UTC (0), the flag Use_TZ will
        --  ensure that Split picks up the local time zone.
--- 572,577 ----
*************** is
*** 685,697 ****
        type int_Pointer  is access all Interfaces.C.int;
        type long_Pointer is access all Interfaces.C.long;
  
!       type time_t is
!         range -(2 ** (Standard'Address_Size - Integer'(1))) ..
!               +(2 ** (Standard'Address_Size - Integer'(1)) - 1);
!       type time_t_Pointer is access all time_t;
  
        procedure localtime_tzoff
!         (timer       : time_t_Pointer;
           is_historic : int_Pointer;
           off         : long_Pointer);
        pragma Import (C, localtime_tzoff, "__gnat_localtime_tzoff");
--- 682,691 ----
        type int_Pointer  is access all Interfaces.C.int;
        type long_Pointer is access all Interfaces.C.long;
  
!       type OS_Time_Pointer is access all System.OS_Lib.OS_Time;
  
        procedure localtime_tzoff
!         (timer       : OS_Time_Pointer;
           is_historic : int_Pointer;
           off         : long_Pointer);
        pragma Import (C, localtime_tzoff, "__gnat_localtime_tzoff");
*************** is
*** 708,714 ****
        Date_N   : Time_Rep;
        Flag     : aliased Interfaces.C.int;
        Offset   : aliased Interfaces.C.long;
!       Secs_T   : aliased time_t;
  
     --  Start of processing for UTC_Time_Offset
  
--- 702,708 ----
        Date_N   : Time_Rep;
        Flag     : aliased Interfaces.C.int;
        Offset   : aliased Interfaces.C.long;
!       Secs_T   : aliased System.OS_Lib.OS_Time;
  
     --  Start of processing for UTC_Time_Offset
  
*************** is
*** 745,751 ****
  
        --  Convert the date into seconds
  
!       Secs_T := time_t (Date_N / Nano);
  
        --  Determine whether to treat the input date as historical or not. A
        --  value of "0" signifies that the date is NOT historic.
--- 739,745 ----
  
        --  Convert the date into seconds
  
!       Secs_T := System.OS_Lib.To_Ada (Long_Long_Integer (Date_N / Nano));
  
        --  Determine whether to treat the input date as historical or not. A
        --  value of "0" signifies that the date is NOT historic.
*************** is
*** 770,776 ****
        M : Month_Number;
        D : Day_Number;
        S : Day_Duration;
-       pragma Unreferenced (M, D, S);
     begin
        Split (Date, Y, M, D, S);
        return Y;
--- 764,769 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-calend.ads gcc-12.1.0/gcc/ada/libgnat/a-calend.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-calend.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-calend.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private
*** 242,248 ****
     --  epoch) expressed in nanoseconds. Note that year 2100 is non-leap.
  
     Days_In_Month : constant array (Month_Number) of Day_Number :=
!                      (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
     --  Days in month for non-leap year, leap year case is adjusted in code
  
     Invalid_Time_Zone_Offset : Long_Integer;
--- 242,248 ----
     --  epoch) expressed in nanoseconds. Note that year 2100 is non-leap.
  
     Days_In_Month : constant array (Month_Number) of Day_Number :=
!                      [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
     --  Days in month for non-leap year, leap year case is adjusted in code
  
     Invalid_Time_Zone_Offset : Long_Integer;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-calfor.adb gcc-12.1.0/gcc/ada/libgnat/a-calfor.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-calfor.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-calfor.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2006-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with Ada.Calendar;            use Ada.Calendar;
  with Ada.Calendar.Time_Zones; use Ada.Calendar.Time_Zones;
  
  package body Ada.Calendar.Formatting is
--- 29,34 ----
*************** package body Ada.Calendar.Formatting is
*** 100,107 ****
        Ss : Second_Duration;
        Le : Boolean;
  
-       pragma Unreferenced (Y, Mo, H, Mi);
- 
     begin
        Split (Date, Y, Mo, D, H, Mi, Se, Ss, Le, Time_Zone);
        return D;
--- 99,104 ----
*************** package body Ada.Calendar.Formatting is
*** 133,140 ****
        Ss : Second_Duration;
        Le : Boolean;
  
-       pragma Unreferenced (Y, Mo, D, Mi);
- 
     begin
        Split (Date, Y, Mo, D, H, Mi, Se, Ss, Le, Time_Zone);
        return H;
--- 130,135 ----
*************** package body Ada.Calendar.Formatting is
*** 291,298 ****
        Ss : Second_Duration;
        Le : Boolean;
  
-       pragma Unreferenced (Y, Mo, D, H);
- 
     begin
        Split (Date, Y, Mo, D, H, Mi, Se, Ss, Le, Time_Zone);
        return Mi;
--- 286,291 ----
*************** package body Ada.Calendar.Formatting is
*** 315,322 ****
        Ss : Second_Duration;
        Le : Boolean;
  
-       pragma Unreferenced (Y, D, H, Mi);
- 
     begin
        Split (Date, Y, Mo, D, H, Mi, Se, Ss, Le, Time_Zone);
        return Mo;
--- 308,313 ----
*************** package body Ada.Calendar.Formatting is
*** 336,343 ****
        Ss : Second_Duration;
        Le : Boolean;
  
-       pragma Unreferenced (Y, Mo, D, H, Mi);
- 
     begin
        Split (Date, Y, Mo, D, H, Mi, Se, Ss, Le);
        return Se;
--- 327,332 ----
*************** package body Ada.Calendar.Formatting is
*** 584,591 ****
        Ss : Second_Duration;
        Le : Boolean;
  
-       pragma Unreferenced (Y, Mo, D, H, Mi);
- 
     begin
        Split (Date, Y, Mo, D, H, Mi, Se, Ss, Le);
        return Ss;
--- 573,578 ----
*************** package body Ada.Calendar.Formatting is
*** 898,905 ****
        Ss : Second_Duration;
        Le : Boolean;
  
-       pragma Unreferenced (Mo, D, H, Mi);
- 
     begin
        Split (Date, Y, Mo, D, H, Mi, Se, Ss, Le, Time_Zone);
        return Y;
--- 885,890 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-calfor.ads gcc-12.1.0/gcc/ada/libgnat/a-calfor.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-calfor.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-calfor.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2005-2020, Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT.  In accordance with the copyright of that document, you can freely --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2005-2022, Free Software Foundation, Inc.          --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT.  In accordance with the copyright of that document, you can freely --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-catizo.adb gcc-12.1.0/gcc/ada/libgnat/a-catizo.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-catizo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-catizo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cbdlli.adb gcc-12.1.0/gcc/ada/libgnat/a-cbdlli.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cbdlli.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cbdlli.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
***************
*** 27,32 ****
--- 27,34 ----
  -- This unit was originally developed by Matthew J Heaney.                  --
  ------------------------------------------------------------------------------
  
+ with Ada.Containers.Stable_Sorting; use Ada.Containers.Stable_Sorting;
+ 
  with System; use type System.Address;
  with System.Put_Images;
  
*************** is
*** 312,318 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 314,320 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** is
*** 858,931 ****
  
        procedure Sort (Container : in out List) is
           N : Node_Array renames Container.Nodes;
- 
-          procedure Partition (Pivot, Back : Count_Type);
-          --  What does this do ???
- 
-          procedure Sort (Front, Back : Count_Type);
-          --  Internal procedure, what does it do??? rename it???
- 
-          ---------------
-          -- Partition --
-          ---------------
- 
-          procedure Partition (Pivot, Back : Count_Type) is
-             Node : Count_Type;
- 
-          begin
-             Node := N (Pivot).Next;
-             while Node /= Back loop
-                if N (Node).Element < N (Pivot).Element then
-                   declare
-                      Prev : constant Count_Type := N (Node).Prev;
-                      Next : constant Count_Type := N (Node).Next;
- 
-                   begin
-                      N (Prev).Next := Next;
- 
-                      if Next = 0 then
-                         Container.Last := Prev;
-                      else
-                         N (Next).Prev := Prev;
-                      end if;
- 
-                      N (Node).Next := Pivot;
-                      N (Node).Prev := N (Pivot).Prev;
- 
-                      N (Pivot).Prev := Node;
- 
-                      if N (Node).Prev = 0 then
-                         Container.First := Node;
-                      else
-                         N (N (Node).Prev).Next := Node;
-                      end if;
- 
-                      Node := Next;
-                   end;
- 
-                else
-                   Node := N (Node).Next;
-                end if;
-             end loop;
-          end Partition;
- 
-          ----------
-          -- Sort --
-          ----------
- 
-          procedure Sort (Front, Back : Count_Type) is
-             Pivot : constant Count_Type :=
-               (if Front = 0 then Container.First else N (Front).Next);
-          begin
-             if Pivot /= Back then
-                Partition (Pivot, Back);
-                Sort (Front, Pivot);
-                Sort (Pivot, Back);
-             end if;
-          end Sort;
- 
-       --  Start of processing for Sort
- 
        begin
           if Container.Length <= 1 then
              return;
--- 860,865 ----
*************** is
*** 941,948 ****
  
           declare
              Lock : With_Lock (Container.TC'Unchecked_Access);
           begin
!             Sort (Front => 0, Back => 0);
           end;
  
           pragma Assert (N (Container.First).Prev = 0);
--- 875,917 ----
  
           declare
              Lock : With_Lock (Container.TC'Unchecked_Access);
+ 
+             package Descriptors is new List_Descriptors
+               (Node_Ref => Count_Type, Nil => 0);
+             use Descriptors;
+ 
+             function Next (Idx : Count_Type) return Count_Type is
+               (N (Idx).Next);
+             procedure Set_Next (Idx : Count_Type; Next : Count_Type)
+               with Inline;
+             procedure Set_Prev (Idx : Count_Type; Prev : Count_Type)
+               with Inline;
+             function "<" (L, R : Count_Type) return Boolean is
+               (N (L).Element < N (R).Element);
+             procedure Update_Container (List : List_Descriptor) with Inline;
+ 
+             procedure Set_Next (Idx : Count_Type; Next : Count_Type) is
+             begin
+                N (Idx).Next := Next;
+             end Set_Next;
+ 
+             procedure Set_Prev (Idx : Count_Type; Prev : Count_Type) is
+             begin
+                N (Idx).Prev := Prev;
+             end Set_Prev;
+ 
+             procedure Update_Container (List : List_Descriptor) is
+             begin
+                Container.First  := List.First;
+                Container.Last   := List.Last;
+                Container.Length := List.Length;
+             end Update_Container;
+ 
+             procedure Sort_List is new Doubly_Linked_List_Sort;
           begin
!             Sort_List (List_Descriptor'(First  => Container.First,
!                                         Last   => Container.Last,
!                                         Length => Container.Length));
           end;
  
           pragma Assert (N (Container.First).Prev = 0);
*************** is
*** 1026,1032 ****
        Count     : Count_Type := 1)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
     begin
        Insert (Container, Before, New_Item, Position, Count);
     end Insert;
--- 995,1000 ----
*************** is
*** 1504,1510 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : List)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1472,1478 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : List)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** is
*** 1608,1614 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => N.Element'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 1576,1582 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => N.Element'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cbdlli.ads gcc-12.1.0/gcc/ada/libgnat/a-cbdlli.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cbdlli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cbdlli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  with Ada.Containers.Helpers;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type is private;
--- 36,42 ----
  with Ada.Containers.Helpers;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type is private;
*************** is
*** 56,67 ****
        Variable_Indexing => Reference,
        Default_Iterator  => Iterate,
        Iterator_Element  => Element_Type,
!       Aggregate         => (Empty        => Empty,
!                             Add_Unnamed  => Append);
!    pragma Preelaborable_Initialization (List);
  
!    type Cursor is private;
!    pragma Preelaborable_Initialization (Cursor);
  
     Empty_List : constant List;
  
--- 56,67 ----
        Variable_Indexing => Reference,
        Default_Iterator  => Iterate,
        Iterator_Element  => Element_Type,
!       Aggregate         => (Empty       => Empty,
!                             Add_Unnamed => Append),
!       Preelaborable_Initialization
!                         => Element_Type'Preelaborable_Initialization;
  
!    type Cursor is private with Preelaborable_Initialization;
  
     Empty_List : constant List;
  
*************** private
*** 285,291 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : List);
  
     procedure Read
       (Stream : not null access Root_Stream_Type'Class;
--- 285,291 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : List);
  
     procedure Read
       (Stream : not null access Root_Stream_Type'Class;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cbhama.adb gcc-12.1.0/gcc/ada/libgnat/a-cbhama.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cbhama.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cbhama.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 213,219 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 213,219 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** is
*** 239,245 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 239,245 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** is
*** 697,704 ****
        New_Item  : Element_Type)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 697,702 ----
*************** is
*** 902,908 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Map)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 900,906 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Map)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** is
*** 1028,1034 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => N.Element'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 1026,1032 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => N.Element'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** is
*** 1053,1059 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => N.Element'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 1051,1057 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => N.Element'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cbhama.ads gcc-12.1.0/gcc/ada/libgnat/a-cbhama.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cbhama.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cbhama.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  private with Ada.Containers.Hash_Tables;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Output;
  
  generic
     type Key_Type is private;
--- 36,42 ----
  private with Ada.Containers.Hash_Tables;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Key_Type is private;
*************** is
*** 59,70 ****
        Default_Iterator  => Iterate,
        Iterator_Element  => Element_Type,
        Aggregate         => (Empty     => Empty,
!                             Add_Named => Insert);
! 
!    pragma Preelaborable_Initialization (Map);
  
!    type Cursor is private;
!    pragma Preelaborable_Initialization (Cursor);
  
     Empty_Map : constant Map;
     --  Map objects declared without an initialization expression are
--- 59,71 ----
        Default_Iterator  => Iterate,
        Iterator_Element  => Element_Type,
        Aggregate         => (Empty     => Empty,
!                             Add_Named => Insert),
!       Preelaborable_Initialization
!                         => Element_Type'Preelaborable_Initialization
!                              and
!                            Key_Type'Preelaborable_Initialization;
  
!    type Cursor is private with Preelaborable_Initialization;
  
     Empty_Map : constant Map;
     --  Map objects declared without an initialization expression are
*************** private
*** 349,355 ****
        with null record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Map);
  
     use HT_Types, HT_Types.Implementation;
     use Ada.Streams;
--- 350,356 ----
        with null record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Map);
  
     use HT_Types, HT_Types.Implementation;
     use Ada.Streams;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cbhase.adb gcc-12.1.0/gcc/ada/libgnat/a-cbhase.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cbhase.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cbhase.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 232,238 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 232,238 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** is
*** 736,743 ****
        New_Item  : Element_Type)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 736,741 ----
*************** is
*** 1125,1131 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1123,1129 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** is
*** 1629,1654 ****
          (Container : aliased Set;
           Key       : Key_Type) return Constant_Reference_Type
        is
!          Node : constant Count_Type :=
!                   Key_Keys.Find (Container'Unrestricted_Access.all, Key);
  
        begin
!          if Checks and then Node = 0 then
              raise Constraint_Error with "key not in set";
           end if;
  
!          declare
!             N : Node_Type renames Container.Nodes (Node);
!             TC : constant Tamper_Counts_Access :=
!               Container.TC'Unrestricted_Access;
!          begin
!             return R : constant Constant_Reference_Type :=
!               (Element => N.Element'Access,
!                Control => (Controlled with TC))
!             do
!                Busy (TC.all);
!             end return;
!          end;
        end Constant_Reference;
  
        --------------
--- 1627,1640 ----
          (Container : aliased Set;
           Key       : Key_Type) return Constant_Reference_Type
        is
!          Position : constant Cursor := Find (Container, Key);
  
        begin
!          if Checks and then Position = No_Element then
              raise Constraint_Error with "key not in set";
           end if;
  
!          return Constant_Reference (Container, Position);
        end Constant_Reference;
  
        --------------
*************** is
*** 1836,1864 ****
          (Container : aliased in out Set;
           Key       : Key_Type) return Reference_Type
        is
!          Node : constant Count_Type := Key_Keys.Find (Container, Key);
  
        begin
!          if Checks and then Node = 0 then
              raise Constraint_Error with "key not in set";
           end if;
  
!          declare
!             P : constant Cursor := Find (Container, Key);
!          begin
!             return R : constant Reference_Type :=
!               (Element => Container.Nodes (Node).Element'Unrestricted_Access,
!                Control =>
!                  (Controlled with
!                     Container.TC'Unrestricted_Access,
!                     Container'Unrestricted_Access,
!                     Index  => Key_Keys.Index (Container, Key),
!                     Old_Pos => P,
!                     Old_Hash => Hash (Key)))
!             do
!                Busy (Container.TC);
!             end return;
!          end;
        end Reference_Preserving_Key;
  
        -------------
--- 1822,1835 ----
          (Container : aliased in out Set;
           Key       : Key_Type) return Reference_Type
        is
!          Position : constant Cursor := Find (Container, Key);
  
        begin
!          if Checks and then Position = No_Element then
              raise Constraint_Error with "key not in set";
           end if;
  
!          return Reference_Preserving_Key (Container, Position);
        end Reference_Preserving_Key;
  
        -------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cbhase.ads gcc-12.1.0/gcc/ada/libgnat/a-cbhase.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cbhase.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cbhase.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private with Ada.Containers.Hash_Tables;
*** 37,43 ****
  with Ada.Containers.Helpers;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type is private;
--- 37,43 ----
  with Ada.Containers.Helpers;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type is private;
*************** is
*** 61,72 ****
            Default_Iterator  => Iterate,
            Iterator_Element  => Element_Type,
            Aggregate         => (Empty       => Empty,
!                                 Add_Unnamed => Include);
! 
!    pragma Preelaborable_Initialization (Set);
  
!    type Cursor is private;
!    pragma Preelaborable_Initialization (Cursor);
  
     Empty_Set : constant Set;
     --  Set objects declared without an initialization expression are
--- 61,71 ----
            Default_Iterator  => Iterate,
            Iterator_Element  => Element_Type,
            Aggregate         => (Empty       => Empty,
!                                 Add_Unnamed => Include),
!           Preelaborable_Initialization
!                             => Element_Type'Preelaborable_Initialization;
  
!    type Cursor is private with Preelaborable_Initialization;
  
     Empty_Set : constant Set;
     --  Set objects declared without an initialization expression are
*************** private
*** 507,513 ****
        with null record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set);
  
     use HT_Types, HT_Types.Implementation;
     use Ada.Streams;
--- 506,512 ----
        with null record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set);
  
     use HT_Types, HT_Types.Implementation;
     use Ada.Streams;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cbmutr.adb gcc-12.1.0/gcc/ada/libgnat/a-cbmutr.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cbmutr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cbmutr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2011-2022, 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- --
*************** is
*** 600,606 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => Container.Elements (Position.Node)'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 600,606 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => Container.Elements (Position.Node)'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** is
*** 1490,1496 ****
        Count     : Count_Type := 1)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
  
     begin
        Insert_Child (Container, Parent, Before, New_Item, Position, Count);
--- 1490,1495 ----
*************** is
*** 2328,2334 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Tree)
     is
        use System.Put_Images;
  
--- 2327,2333 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Tree)
     is
        use System.Put_Images;
  
*************** is
*** 2533,2539 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => Container.Elements (Position.Node)'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 2532,2538 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => Container.Elements (Position.Node)'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cbmutr.ads gcc-12.1.0/gcc/ada/libgnat/a-cbmutr.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cbmutr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cbmutr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2014-2020, Free Software Foundation, Inc.        --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2014-2022, Free Software Foundation, Inc.        --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 35,41 ****
  
  with Ada.Containers.Helpers;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type is private;
--- 35,41 ----
  
  with Ada.Containers.Helpers;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type is private;
*************** is
*** 53,63 ****
       with Constant_Indexing => Constant_Reference,
            Variable_Indexing => Reference,
            Default_Iterator  => Iterate,
!           Iterator_Element  => Element_Type;
!    pragma Preelaborable_Initialization (Tree);
  
!    type Cursor is private;
!    pragma Preelaborable_Initialization (Cursor);
  
     Empty_Tree : constant Tree;
  
--- 53,63 ----
       with Constant_Indexing => Constant_Reference,
            Variable_Indexing => Reference,
            Default_Iterator  => Iterate,
!           Iterator_Element  => Element_Type,
!           Preelaborable_Initialization
!                             => Element_Type'Preelaborable_Initialization;
  
!    type Cursor is private with Preelaborable_Initialization;
  
     Empty_Tree : constant Tree;
  
*************** private
*** 311,317 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Tree);
  
     procedure Write
       (Stream    : not null access Root_Stream_Type'Class;
--- 311,317 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Tree);
  
     procedure Write
       (Stream    : not null access Root_Stream_Type'Class;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cborma.adb gcc-12.1.0/gcc/ada/libgnat/a-cborma.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cborma.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cborma.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 420,426 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 420,426 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** is
*** 445,451 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 445,451 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** is
*** 824,831 ****
        New_Item  : Element_Type)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 824,829 ----
*************** is
*** 1306,1312 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Map)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1304,1310 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Map)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** is
*** 1417,1423 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => N.Element'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 1415,1421 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => N.Element'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** is
*** 1442,1448 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => N.Element'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 1440,1446 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => N.Element'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cborma.ads gcc-12.1.0/gcc/ada/libgnat/a-cborma.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cborma.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cborma.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Output;
  
  generic
     type Key_Type is private;
--- 36,42 ----
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Key_Type is private;
*************** is
*** 60,71 ****
        Default_Iterator  => Iterate,
        Iterator_Element  => Element_Type,
        Aggregate         => (Empty     => Empty,
!                             Add_Named => Insert);
! 
!    pragma Preelaborable_Initialization (Map);
  
!    type Cursor is private;
!    pragma Preelaborable_Initialization (Cursor);
  
     Empty_Map : constant Map;
  
--- 60,72 ----
        Default_Iterator  => Iterate,
        Iterator_Element  => Element_Type,
        Aggregate         => (Empty     => Empty,
!                             Add_Named => Insert),
!       Preelaborable_Initialization
!                         => Element_Type'Preelaborable_Initialization
!                              and
!                            Key_Type'Preelaborable_Initialization;
  
!    type Cursor is private with Preelaborable_Initialization;
  
     Empty_Map : constant Map;
  
*************** private
*** 257,263 ****
        with null record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Map);
  
     use Red_Black_Trees;
     use Tree_Types, Tree_Types.Implementation;
--- 258,264 ----
        with null record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Map);
  
     use Red_Black_Trees;
     use Tree_Types, Tree_Types.Implementation;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cborse.adb gcc-12.1.0/gcc/ada/libgnat/a-cborse.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cborse.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cborse.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 420,426 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 420,426 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => N.Element'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** is
*** 739,763 ****
          (Container : aliased Set;
           Key       : Key_Type) return Constant_Reference_Type
        is
!          Node : constant Count_Type := Key_Keys.Find (Container, Key);
  
        begin
!          if Checks and then Node = 0 then
              raise Constraint_Error with "key not in set";
           end if;
  
!          declare
!             N : Node_Type renames Container.Nodes (Node);
!             TC : constant Tamper_Counts_Access :=
!               Container.TC'Unrestricted_Access;
!          begin
!             return R : constant Constant_Reference_Type :=
!               (Element => N.Element'Access,
!                Control => (Controlled with TC))
!             do
!                Busy (TC.all);
!             end return;
!          end;
        end Constant_Reference;
  
        --------------
--- 739,752 ----
          (Container : aliased Set;
           Key       : Key_Type) return Constant_Reference_Type
        is
!          Position : constant Cursor := Find (Container, Key);
  
        begin
!          if Checks and then Position = No_Element then
              raise Constraint_Error with "key not in set";
           end if;
  
!          return Constant_Reference (Container, Position);
        end Constant_Reference;
  
        --------------
*************** is
*** 943,949 ****
              N : Node_Type renames Container.Nodes (Position.Node);
           begin
              return R : constant Reference_Type :=
!                          (Element => N.Element'Access,
                            Control =>
                              (Controlled with
                                Container.TC'Unrestricted_Access,
--- 932,938 ----
              N : Node_Type renames Container.Nodes (Position.Node);
           begin
              return R : constant Reference_Type :=
!                          (Element => N.Element'Unchecked_Access,
                            Control =>
                              (Controlled with
                                Container.TC'Unrestricted_Access,
*************** is
*** 960,987 ****
          (Container : aliased in out Set;
           Key       : Key_Type) return Reference_Type
        is
!          Node : constant Count_Type := Key_Keys.Find (Container, Key);
  
        begin
!          if Checks and then Node = 0 then
              raise Constraint_Error with "key not in set";
           end if;
  
!          declare
!             N : Node_Type renames Container.Nodes (Node);
!          begin
!             return R : constant Reference_Type :=
!                          (Element => N.Element'Access,
!                           Control =>
!                             (Controlled with
!                               Container.TC'Unrestricted_Access,
!                               Container => Container'Unchecked_Access,
!                                Pos      => Find (Container, Key),
!                                Old_Key  => new Key_Type'(Key)))
!             do
!                Busy (Container.TC);
!             end return;
!          end;
        end Reference_Preserving_Key;
  
        -------------
--- 949,962 ----
          (Container : aliased in out Set;
           Key       : Key_Type) return Reference_Type
        is
!          Position : constant Cursor := Find (Container, Key);
  
        begin
!          if Checks and then Position = No_Element then
              raise Constraint_Error with "key not in set";
           end if;
  
!          return Reference_Preserving_Key (Container, Position);
        end Reference_Preserving_Key;
  
        -------------
*************** is
*** 1124,1131 ****
        New_Item  : Element_Type)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 1099,1104 ----
*************** is
*** 1205,1211 ****
        Dst_Node : out Count_Type)
     is
        Success : Boolean;
-       pragma Unreferenced (Success);
  
        procedure Set_Element (Node : in out Node_Type);
        pragma Inline (Set_Element);
--- 1178,1183 ----
*************** is
*** 1645,1651 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1617,1623 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** is
*** 2012,2017 ****
--- 1984,1990 ----
     function To_Set (New_Item : Element_Type) return Set is
        Node     : Count_Type;
        Inserted : Boolean;
+ 
     begin
        return S : Set (1) do
           Insert_Sans_Hint (S, New_Item, Node, Inserted);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cborse.ads gcc-12.1.0/gcc/ada/libgnat/a-cborse.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cborse.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cborse.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Containers.Helpers;
*** 37,43 ****
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type is private;
--- 37,43 ----
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type is private;
*************** is
*** 59,70 ****
          Default_Iterator  => Iterate,
          Iterator_Element  => Element_Type,
          Aggregate         => (Empty       => Empty,
!                               Add_Unnamed => Include);
! 
!    pragma Preelaborable_Initialization (Set);
  
!    type Cursor is private;
!    pragma Preelaborable_Initialization (Cursor);
  
     Empty_Set : constant Set;
  
--- 59,69 ----
          Default_Iterator  => Iterate,
          Iterator_Element  => Element_Type,
          Aggregate         => (Empty       => Empty,
!                               Add_Unnamed => Include),
!         Preelaborable_Initialization
!                           => Element_Type'Preelaborable_Initialization;
  
!    type Cursor is private with Preelaborable_Initialization;
  
     Empty_Set : constant Set;
  
*************** private
*** 345,351 ****
        with null record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set);
  
     use Tree_Types, Tree_Types.Implementation;
     use Ada.Finalization;
--- 344,350 ----
        with null record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set);
  
     use Tree_Types, Tree_Types.Implementation;
     use Ada.Finalization;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cbprqu.adb gcc-12.1.0/gcc/ada/libgnat/a-cbprqu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cbprqu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cbprqu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cbprqu.ads gcc-12.1.0/gcc/ada/libgnat/a-cbprqu.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cbprqu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cbprqu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cbsyqu.adb gcc-12.1.0/gcc/ada/libgnat/a-cbsyqu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cbsyqu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cbsyqu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cbsyqu.ads gcc-12.1.0/gcc/ada/libgnat/a-cbsyqu.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cbsyqu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cbsyqu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cdlili.adb gcc-12.1.0/gcc/ada/libgnat/a-cdlili.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cdlili.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cdlili.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
***************
*** 29,34 ****
--- 29,36 ----
  
  with Ada.Unchecked_Deallocation;
  
+ with Ada.Containers.Stable_Sorting; use Ada.Containers.Stable_Sorting;
+ 
  with System; use type System.Address;
  with System.Put_Images;
  
*************** is
*** 130,140 ****
        pragma Assert (Container.Last.Next = null);
        pragma Assert (Container.Length > 0);
  
-       Container.First := null;
-       Container.Last := null;
-       Container.Length := 0;
-       Zero_Counts (Container.TC);
- 
        Container.First := new Node_Type'(Src.Element, null, null);
        Container.Last := Container.First;
        Container.Length := 1;
--- 132,137 ----
*************** is
*** 232,240 ****
        Container.Last := null;
        Container.Length := 0;
  
-       pragma Warnings (Off);
        Free (X);
-       pragma Warnings (On);
     end Clear;
  
     ------------------------
--- 229,235 ----
*************** is
*** 681,752 ****
        ----------
  
        procedure Sort (Container : in out List) is
- 
-          procedure Partition (Pivot : Node_Access; Back : Node_Access);
- 
-          procedure Sort (Front, Back : Node_Access);
- 
-          ---------------
-          -- Partition --
-          ---------------
- 
-          procedure Partition (Pivot : Node_Access; Back : Node_Access) is
-             Node : Node_Access;
- 
-          begin
-             Node := Pivot.Next;
-             while Node /= Back loop
-                if Node.Element < Pivot.Element then
-                   declare
-                      Prev : constant Node_Access := Node.Prev;
-                      Next : constant Node_Access := Node.Next;
- 
-                   begin
-                      Prev.Next := Next;
- 
-                      if Next = null then
-                         Container.Last := Prev;
-                      else
-                         Next.Prev := Prev;
-                      end if;
- 
-                      Node.Next := Pivot;
-                      Node.Prev := Pivot.Prev;
- 
-                      Pivot.Prev := Node;
- 
-                      if Node.Prev = null then
-                         Container.First := Node;
-                      else
-                         Node.Prev.Next := Node;
-                      end if;
- 
-                      Node := Next;
-                   end;
- 
-                else
-                   Node := Node.Next;
-                end if;
-             end loop;
-          end Partition;
- 
-          ----------
-          -- Sort --
-          ----------
- 
-          procedure Sort (Front, Back : Node_Access) is
-             Pivot : constant Node_Access :=
-               (if Front = null then Container.First else Front.Next);
-          begin
-             if Pivot /= Back then
-                Partition (Pivot, Back);
-                Sort (Front, Pivot);
-                Sort (Pivot, Back);
-             end if;
-          end Sort;
- 
-       --  Start of processing for Sort
- 
        begin
           if Container.Length <= 1 then
              return;
--- 676,681 ----
*************** is
*** 762,769 ****
  
           declare
              Lock : With_Lock (Container.TC'Unchecked_Access);
           begin
!             Sort (Front => null, Back => null);
           end;
  
           pragma Assert (Container.First.Prev = null);
--- 691,732 ----
  
           declare
              Lock : With_Lock (Container.TC'Unchecked_Access);
+ 
+             package Descriptors is new List_Descriptors
+               (Node_Ref => Node_Access, Nil => null);
+             use Descriptors;
+ 
+             function Next (N : Node_Access) return Node_Access is (N.Next);
+             procedure Set_Next (N : Node_Access; Next : Node_Access)
+               with Inline;
+             procedure Set_Prev (N : Node_Access; Prev : Node_Access)
+               with Inline;
+             function "<" (L, R : Node_Access) return Boolean is
+               (L.Element < R.Element);
+             procedure Update_Container (List : List_Descriptor) with Inline;
+ 
+             procedure Set_Next (N : Node_Access; Next : Node_Access) is
+             begin
+                N.Next := Next;
+             end Set_Next;
+ 
+             procedure Set_Prev (N : Node_Access; Prev : Node_Access) is
+             begin
+                N.Prev := Prev;
+             end Set_Prev;
+ 
+             procedure Update_Container (List : List_Descriptor) is
+             begin
+                Container.First  := List.First;
+                Container.Last   := List.Last;
+                Container.Length := List.Length;
+             end Update_Container;
+ 
+             procedure Sort_List is new Doubly_Linked_List_Sort;
           begin
!             Sort_List (List_Descriptor'(First  => Container.First,
!                                         Last   => Container.Last,
!                                         Length => Container.Length));
           end;
  
           pragma Assert (Container.First.Prev = null);
*************** is
*** 847,853 ****
        Count     : Count_Type := 1)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
     begin
        Insert (Container, Before, New_Item, Position, Count);
     end Insert;
--- 810,815 ----
*************** is
*** 1269,1275 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : List)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1231,1237 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : List)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cdlili.ads gcc-12.1.0/gcc/ada/libgnat/a-cdlili.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cdlili.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cdlili.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type is private;
--- 36,42 ----
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type is private;
*************** is
*** 66,72 ****
--- 66,74 ----
     pragma Preelaborable_Initialization (Cursor);
  
     Empty_List : constant List;
+ 
     function Empty return List;
+    pragma Ada_2022 (Empty);
  
     No_Element : constant Cursor;
  
*************** private
*** 286,292 ****
       end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : List);
  
     overriding procedure Adjust (Container : in out List);
  
--- 288,294 ----
       end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : List);
  
     overriding procedure Adjust (Container : in out List);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cfdlli.adb gcc-12.1.0/gcc/ada/libgnat/a-cfdlli.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cfdlli.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cfdlli.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
***************
*** 25,30 ****
--- 25,32 ----
  -- <http://www.gnu.org/licenses/>.                                          --
  ------------------------------------------------------------------------------
  
+ with Ada.Containers.Stable_Sorting; use Ada.Containers.Stable_Sorting;
+ 
  with System; use type System.Address;
  
  package body Ada.Containers.Formal_Doubly_Linked_Lists with
*************** is
*** 188,193 ****
--- 190,211 ----
        Free (Container, X);
     end Clear;
  
+    ------------------------
+    -- Constant_Reference --
+    ------------------------
+ 
+    function Constant_Reference
+      (Container : aliased List;
+       Position  : Cursor) return not null access constant Element_Type
+    is
+    begin
+       if not Has_Element (Container => Container, Position  => Position) then
+          raise Constraint_Error with "Position cursor has no element";
+       end if;
+ 
+       return Container.Nodes (Position.Node).Element'Access;
+    end Constant_Reference;
+ 
     --------------
     -- Contains --
     --------------
*************** is
*** 960,1036 ****
  
        procedure Sort (Container : in out List) is
           N : Node_Array renames Container.Nodes;
- 
-          procedure Partition (Pivot : Count_Type; Back : Count_Type);
-          procedure Sort (Front : Count_Type; Back : Count_Type);
- 
-          ---------------
-          -- Partition --
-          ---------------
- 
-          procedure Partition (Pivot : Count_Type; Back : Count_Type) is
-             Node : Count_Type;
- 
-          begin
-             Node := N (Pivot).Next;
-             while Node /= Back loop
-                if N (Node).Element < N (Pivot).Element then
-                   declare
-                      Prev : constant Count_Type := N (Node).Prev;
-                      Next : constant Count_Type := N (Node).Next;
- 
-                   begin
-                      N (Prev).Next := Next;
- 
-                      if Next = 0 then
-                         Container.Last := Prev;
-                      else
-                         N (Next).Prev := Prev;
-                      end if;
- 
-                      N (Node).Next := Pivot;
-                      N (Node).Prev := N (Pivot).Prev;
- 
-                      N (Pivot).Prev := Node;
- 
-                      if N (Node).Prev = 0 then
-                         Container.First := Node;
-                      else
-                         N (N (Node).Prev).Next := Node;
-                      end if;
- 
-                      Node := Next;
-                   end;
- 
-                else
-                   Node := N (Node).Next;
-                end if;
-             end loop;
-          end Partition;
- 
-          ----------
-          -- Sort --
-          ----------
- 
-          procedure Sort (Front : Count_Type; Back : Count_Type) is
-             Pivot : Count_Type;
- 
-          begin
-             if Front = 0 then
-                Pivot := Container.First;
-             else
-                Pivot := N (Front).Next;
-             end if;
- 
-             if Pivot /= Back then
-                Partition (Pivot, Back);
-                Sort (Front, Pivot);
-                Sort (Pivot, Back);
-             end if;
-          end Sort;
- 
-       --  Start of processing for Sort
- 
        begin
           if Container.Length <= 1 then
              return;
--- 978,983 ----
*************** is
*** 1039,1045 ****
           pragma Assert (N (Container.First).Prev = 0);
           pragma Assert (N (Container.Last).Next = 0);
  
!          Sort (Front => 0, Back => 0);
  
           pragma Assert (N (Container.First).Prev = 0);
           pragma Assert (N (Container.Last).Next = 0);
--- 986,1029 ----
           pragma Assert (N (Container.First).Prev = 0);
           pragma Assert (N (Container.Last).Next = 0);
  
!          declare
!             package Descriptors is new List_Descriptors
!               (Node_Ref => Count_Type, Nil => 0);
!             use Descriptors;
! 
!             function Next (Idx : Count_Type) return Count_Type is
!               (N (Idx).Next);
!             procedure Set_Next (Idx : Count_Type; Next : Count_Type)
!               with Inline;
!             procedure Set_Prev (Idx : Count_Type; Prev : Count_Type)
!               with Inline;
!             function "<" (L, R : Count_Type) return Boolean is
!               (N (L).Element < N (R).Element);
!             procedure Update_Container (List : List_Descriptor) with Inline;
! 
!             procedure Set_Next (Idx : Count_Type; Next : Count_Type) is
!             begin
!                N (Idx).Next := Next;
!             end Set_Next;
! 
!             procedure Set_Prev (Idx : Count_Type; Prev : Count_Type) is
!             begin
!                N (Idx).Prev := Prev;
!             end Set_Prev;
! 
!             procedure Update_Container (List : List_Descriptor) is
!             begin
!                Container.First  := List.First;
!                Container.Last   := List.Last;
!                Container.Length := List.Length;
!             end Update_Container;
! 
!             procedure Sort_List is new Doubly_Linked_List_Sort;
!          begin
!             Sort_List (List_Descriptor'(First  => Container.First,
!                                         Last   => Container.Last,
!                                         Length => Container.Length));
!          end;
  
           pragma Assert (N (Container.First).Prev = 0);
           pragma Assert (N (Container.Last).Next = 0);
*************** is
*** 1376,1381 ****
--- 1360,1381 ----
        return (Node => Container.Nodes (Position.Node).Prev);
     end Previous;
  
+    ---------------
+    -- Reference --
+    ---------------
+ 
+    function Reference
+      (Container : not null access List;
+       Position  : Cursor) return not null access Element_Type
+    is
+    begin
+       if not Has_Element (Container.all, Position) then
+          raise Constraint_Error with "Position cursor has no element";
+       end if;
+ 
+       return Container.Nodes (Position.Node).Element'Access;
+    end Reference;
+ 
     ---------------------
     -- Replace_Element --
     ---------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cfdlli.ads gcc-12.1.0/gcc/ada/libgnat/a-cfdlli.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cfdlli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cfdlli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** generic
*** 39,44 ****
--- 39,50 ----
  package Ada.Containers.Formal_Doubly_Linked_Lists with
    SPARK_Mode
  is
+    --  Contracts in this unit are meant for analysis only, not for run-time
+    --  checking.
+ 
+    pragma Assertion_Policy (Pre => Ignore);
+    pragma Assertion_Policy (Post => Ignore);
+    pragma Assertion_Policy (Contract_Cases => Ignore);
     pragma Annotate (CodePeer, Skip_Analysis);
  
     type List (Capacity : Count_Type) is private with
*************** is
*** 382,387 ****
--- 388,440 ----
                  Model (Container),
                  P.Get (Positions (Container), Position));
  
+    function At_End (E : access constant List) return access constant List
+    is (E)
+    with Ghost,
+      Annotate => (GNATprove, At_End_Borrow);
+ 
+    function At_End
+      (E : access constant Element_Type) return access constant Element_Type
+    is (E)
+    with Ghost,
+      Annotate => (GNATprove, At_End_Borrow);
+ 
+    function Constant_Reference
+      (Container : aliased List;
+       Position  : Cursor) return not null access constant Element_Type
+    with
+      Global => null,
+      Pre    => Has_Element (Container, Position),
+      Post   =>
+        Constant_Reference'Result.all =
+          Element (Model (Container), P.Get (Positions (Container), Position));
+ 
+    function Reference
+      (Container : not null access List;
+       Position  : Cursor) return not null access Element_Type
+    with
+      Global => null,
+      Pre    => Has_Element (Container.all, Position),
+      Post   =>
+       Length (Container.all) = Length (At_End (Container).all)
+ 
+          --  Cursors are preserved
+ 
+          and Positions (Container.all) = Positions (At_End (Container).all)
+ 
+          --  Container will have Result.all at position Position
+ 
+          and At_End (Reference'Result).all =
+            Element (Model (At_End (Container).all),
+                     P.Get (Positions (At_End (Container).all), Position))
+ 
+          --  All other elements are preserved
+ 
+          and M.Equal_Except
+                (Model (Container.all),
+                 Model (At_End (Container).all),
+                 P.Get (Positions (At_End (Container).all), Position));
+ 
     procedure Move (Target : in out List; Source : in out List) with
       Global => null,
       Pre    => Target.Capacity >= Length (Source),
*************** is
*** 1544,1551 ****
               M_Elements_Sorted'Result =
                 (for all I in 1 .. M.Length (Container) =>
                   (for all J in I .. M.Length (Container) =>
!                    Element (Container, I) = Element (Container, J)
!                      or Element (Container, I) < Element (Container, J)));
           pragma Annotate (GNATprove, Inline_For_Proof, M_Elements_Sorted);
  
        end Formal_Model;
--- 1597,1603 ----
               M_Elements_Sorted'Result =
                 (for all I in 1 .. M.Length (Container) =>
                   (for all J in I .. M.Length (Container) =>
!                    not (Element (Container, J) < Element (Container, I))));
           pragma Annotate (GNATprove, Inline_For_Proof, M_Elements_Sorted);
  
        end Formal_Model;
*************** private
*** 1604,1610 ****
     type Node_Type is record
        Prev    : Count_Type'Base := -1;
        Next    : Count_Type;
!       Element : Element_Type;
     end record;
  
     function "=" (L, R : Node_Type) return Boolean is abstract;
--- 1656,1662 ----
     type Node_Type is record
        Prev    : Count_Type'Base := -1;
        Next    : Count_Type;
!       Element : aliased Element_Type;
     end record;
  
     function "=" (L, R : Node_Type) return Boolean is abstract;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cfhama.adb gcc-12.1.0/gcc/ada/libgnat/a-cfhama.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cfhama.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cfhama.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
*************** is
*** 109,128 ****
           ENode : Count_Type;
  
        begin
!          Node := Left.First.Node;
           while Node /= 0 loop
              ENode :=
                Find
                  (Container => Right,
!                  Key       => Left.Nodes (Node).Key).Node;
  
              if ENode = 0 or else
!               Right.Nodes (ENode).Element /= Left.Nodes (Node).Element
              then
                 return False;
              end if;
  
!             Node := HT_Ops.Next (Left, Node);
           end loop;
  
           return True;
--- 109,129 ----
           ENode : Count_Type;
  
        begin
!          Node := First (Left).Node;
           while Node /= 0 loop
              ENode :=
                Find
                  (Container => Right,
!                  Key       => Left.Content.Nodes (Node).Key).Node;
  
              if ENode = 0 or else
!               Right.Content.Nodes (ENode).Element /=
!               Left.Content.Nodes (Node).Element
              then
                 return False;
              end if;
  
!             Node := HT_Ops.Next (Left.Content, Node);
           end loop;
  
           return True;
*************** is
*** 145,151 ****
        --------------------
  
        procedure Insert_Element (Source_Node : Count_Type) is
!          N : Node_Type renames Source.Nodes (Source_Node);
        begin
           Insert (Target, N.Key, N.Element);
        end Insert_Element;
--- 146,152 ----
        --------------------
  
        procedure Insert_Element (Source_Node : Count_Type) is
!          N : Node_Type renames Source.Content.Nodes (Source_Node);
        begin
           Insert (Target, N.Key, N.Element);
        end Insert_Element;
*************** is
*** 164,170 ****
  
        Clear (Target);
  
!       Insert_Elements (Source);
     end Assign;
  
     --------------
--- 165,171 ----
  
        Clear (Target);
  
!       Insert_Elements (Source.Content);
     end Assign;
  
     --------------
*************** is
*** 173,179 ****
  
     function Capacity (Container : Map) return Count_Type is
     begin
!       return Container.Nodes'Length;
     end Capacity;
  
     -----------
--- 174,180 ----
  
     function Capacity (Container : Map) return Count_Type is
     begin
!       return Container.Content.Nodes'Length;
     end Capacity;
  
     -----------
*************** is
*** 182,190 ****
  
     procedure Clear (Container : in out Map) is
     begin
!       HT_Ops.Clear (Container);
     end Clear;
  
     --------------
     -- Contains --
     --------------
--- 183,226 ----
  
     procedure Clear (Container : in out Map) is
     begin
!       HT_Ops.Clear (Container.Content);
     end Clear;
  
+    ------------------------
+    -- Constant_Reference --
+    ------------------------
+ 
+    function Constant_Reference
+      (Container : aliased Map;
+       Position  : Cursor) return not null access constant Element_Type
+    is
+    begin
+       if not Has_Element (Container, Position) then
+          raise Constraint_Error with "Position cursor has no element";
+       end if;
+ 
+       pragma Assert
+         (Vet (Container, Position),
+          "bad cursor in function Constant_Reference");
+ 
+       return Container.Content.Nodes (Position.Node).Element'Access;
+    end Constant_Reference;
+ 
+    function Constant_Reference
+      (Container : aliased Map;
+       Key       : Key_Type) return not null access constant Element_Type
+    is
+       Node : constant Count_Type := Find (Container, Key).Node;
+ 
+    begin
+       if Node = 0 then
+          raise Constraint_Error with
+            "no element available because key not in map";
+       end if;
+ 
+       return Container.Content.Nodes (Node).Element'Access;
+    end Constant_Reference;
+ 
     --------------
     -- Contains --
     --------------
*************** is
*** 214,231 ****
           raise Capacity_Error;
        end if;
  
!       Target.Length := Source.Length;
!       Target.Free := Source.Free;
  
        H := 1;
        while H <= Source.Modulus loop
!          Target.Buckets (H) := Source.Buckets (H);
           H := H + 1;
        end loop;
  
        N := 1;
        while N <= Source.Capacity loop
!          Target.Nodes (N) := Source.Nodes (N);
           N := N + 1;
        end loop;
  
--- 250,267 ----
           raise Capacity_Error;
        end if;
  
!       Target.Content.Length := Source.Content.Length;
!       Target.Content.Free := Source.Content.Free;
  
        H := 1;
        while H <= Source.Modulus loop
!          Target.Content.Buckets (H) := Source.Content.Buckets (H);
           H := H + 1;
        end loop;
  
        N := 1;
        while N <= Source.Capacity loop
!          Target.Content.Nodes (N) := Source.Content.Nodes (N);
           N := N + 1;
        end loop;
  
*************** is
*** 255,261 ****
        X : Count_Type;
  
     begin
!       Key_Ops.Delete_Key_Sans_Free (Container, Key, X);
  
        if X = 0 then
           raise Constraint_Error with "attempt to delete key not in map";
--- 291,297 ----
        X : Count_Type;
  
     begin
!       Key_Ops.Delete_Key_Sans_Free (Container.Content, Key, X);
  
        if X = 0 then
           raise Constraint_Error with "attempt to delete key not in map";
*************** is
*** 273,279 ****
  
        pragma Assert (Vet (Container, Position), "bad cursor in Delete");
  
!       HT_Ops.Delete_Node_Sans_Free (Container, Position.Node);
  
        Free (Container, Position.Node);
        Position := No_Element;
--- 309,315 ----
  
        pragma Assert (Vet (Container, Position), "bad cursor in Delete");
  
!       HT_Ops.Delete_Node_Sans_Free (Container.Content, Position.Node);
  
        Free (Container, Position.Node);
        Position := No_Element;
*************** is
*** 292,298 ****
             "no element available because key not in map";
        end if;
  
!       return Container.Nodes (Node).Element;
     end Element;
  
     function Element (Container : Map; Position : Cursor) return Element_Type is
--- 328,334 ----
             "no element available because key not in map";
        end if;
  
!       return Container.Content.Nodes (Node).Element;
     end Element;
  
     function Element (Container : Map; Position : Cursor) return Element_Type is
*************** is
*** 304,310 ****
        pragma Assert
          (Vet (Container, Position), "bad cursor in function Element");
  
!       return Container.Nodes (Position.Node).Element;
     end Element;
  
     ---------------------
--- 340,346 ----
        pragma Assert
          (Vet (Container, Position), "bad cursor in function Element");
  
!       return Container.Content.Nodes (Position.Node).Element;
     end Element;
  
     ---------------------
*************** is
*** 326,332 ****
     procedure Exclude (Container : in out Map; Key : Key_Type) is
        X : Count_Type;
     begin
!       Key_Ops.Delete_Key_Sans_Free (Container, Key, X);
        Free (Container, X);
     end Exclude;
  
--- 362,368 ----
     procedure Exclude (Container : in out Map; Key : Key_Type) is
        X : Count_Type;
     begin
!       Key_Ops.Delete_Key_Sans_Free (Container.Content, Key, X);
        Free (Container, X);
     end Exclude;
  
*************** is
*** 335,341 ****
     ----------
  
     function Find (Container : Map; Key : Key_Type) return Cursor is
!       Node : constant Count_Type := Key_Ops.Find (Container, Key);
  
     begin
        if Node = 0 then
--- 371,377 ----
     ----------
  
     function Find (Container : Map; Key : Key_Type) return Cursor is
!       Node : constant Count_Type := Key_Ops.Find (Container.Content, Key);
  
     begin
        if Node = 0 then
*************** is
*** 350,356 ****
     -----------
  
     function First (Container : Map) return Cursor is
!       Node : constant Count_Type := HT_Ops.First (Container);
  
     begin
        if Node = 0 then
--- 386,392 ----
     -----------
  
     function First (Container : Map) return Cursor is
!       Node : constant Count_Type := HT_Ops.First (Container.Content);
  
     begin
        if Node = 0 then
*************** is
*** 407,413 ****
        ----------
  
        function Keys (Container : Map) return K.Sequence is
!          Position : Count_Type := HT_Ops.First (Container);
           R        : K.Sequence;
  
        begin
--- 443,449 ----
        ----------
  
        function Keys (Container : Map) return K.Sequence is
!          Position : Count_Type := HT_Ops.First (Container.Content);
           R        : K.Sequence;
  
        begin
*************** is
*** 415,422 ****
           --  for their postconditions.
  
           while Position /= 0 loop
!             R := K.Add (R, Container.Nodes (Position).Key);
!             Position := HT_Ops.Next (Container, Position);
           end loop;
  
           return R;
--- 451,458 ----
           --  for their postconditions.
  
           while Position /= 0 loop
!             R := K.Add (R, Container.Content.Nodes (Position).Key);
!             Position := HT_Ops.Next (Container.Content, Position);
           end loop;
  
           return R;
*************** is
*** 458,464 ****
        -----------
  
        function Model (Container : Map) return M.Map is
!          Position : Count_Type := HT_Ops.First (Container);
           R        : M.Map;
  
        begin
--- 494,500 ----
        -----------
  
        function Model (Container : Map) return M.Map is
!          Position : Count_Type := HT_Ops.First (Container.Content);
           R        : M.Map;
  
        begin
*************** is
*** 469,478 ****
              R :=
                M.Add
                  (Container => R,
!                  New_Key   => Container.Nodes (Position).Key,
!                  New_Item  => Container.Nodes (Position).Element);
  
!             Position := HT_Ops.Next (Container, Position);
           end loop;
  
           return R;
--- 505,514 ----
              R :=
                M.Add
                  (Container => R,
!                  New_Key   => Container.Content.Nodes (Position).Key,
!                  New_Item  => Container.Content.Nodes (Position).Element);
  
!             Position := HT_Ops.Next (Container.Content, Position);
           end loop;
  
           return R;
*************** is
*** 484,490 ****
  
        function Positions (Container : Map) return P.Map is
           I        : Count_Type := 1;
!          Position : Count_Type := HT_Ops.First (Container);
           R        : P.Map;
  
        begin
--- 520,526 ----
  
        function Positions (Container : Map) return P.Map is
           I        : Count_Type := 1;
!          Position : Count_Type := HT_Ops.First (Container.Content);
           R        : P.Map;
  
        begin
*************** is
*** 494,500 ****
           while Position /= 0 loop
              R := P.Add (R, (Node => Position), I);
              pragma Assert (P.Length (R) = I);
!             Position := HT_Ops.Next (Container, Position);
              I := I + 1;
           end loop;
  
--- 530,536 ----
           while Position /= 0 loop
              R := P.Add (R, (Node => Position), I);
              pragma Assert (P.Length (R) = I);
!             Position := HT_Ops.Next (Container.Content, Position);
              I := I + 1;
           end loop;
  
*************** is
*** 511,518 ****
     begin
        if X /= 0 then
           pragma Assert (X <= HT.Capacity);
!          HT.Nodes (X).Has_Element := False;
!          HT_Ops.Free (HT, X);
        end if;
     end Free;
  
--- 547,554 ----
     begin
        if X /= 0 then
           pragma Assert (X <= HT.Capacity);
!          HT.Content.Nodes (X).Has_Element := False;
!          HT_Ops.Free (HT.Content, X);
        end if;
     end Free;
  
*************** is
*** 525,532 ****
          new HT_Ops.Generic_Allocate (Set_Element);
  
     begin
!       Allocate (HT, Node);
!       HT.Nodes (Node).Has_Element := True;
     end Generic_Allocate;
  
     -----------------
--- 561,568 ----
          new HT_Ops.Generic_Allocate (Set_Element);
  
     begin
!       Allocate (HT.Content, Node);
!       HT.Content.Nodes (Node).Has_Element := True;
     end Generic_Allocate;
  
     -----------------
*************** is
*** 536,542 ****
     function Has_Element (Container : Map; Position : Cursor) return Boolean is
     begin
        if Position.Node = 0
!         or else not Container.Nodes (Position.Node).Has_Element
        then
           return False;
        else
--- 572,578 ----
     function Has_Element (Container : Map; Position : Cursor) return Boolean is
     begin
        if Position.Node = 0
!         or else not Container.Content.Nodes (Position.Node).Has_Element
        then
           return False;
        else
*************** is
*** 570,576 ****
  
        if not Inserted then
           declare
!             N : Node_Type renames Container.Nodes (Position.Node);
           begin
              N.Key := Key;
              N.Element := New_Item;
--- 606,612 ----
  
        if not Inserted then
           declare
!             N : Node_Type renames Container.Content.Nodes (Position.Node);
           begin
              N.Key := Key;
              N.Element := New_Item;
*************** is
*** 625,631 ****
     --  Start of processing for Insert
  
     begin
!       Local_Insert (Container, Key, Position.Node, Inserted);
     end Insert;
  
     procedure Insert
--- 661,667 ----
     --  Start of processing for Insert
  
     begin
!       Local_Insert (Container.Content, Key, Position.Node, Inserted);
     end Insert;
  
     procedure Insert
*************** is
*** 634,641 ****
        New_Item  : Element_Type)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 670,675 ----
*************** is
*** 668,674 ****
  
        pragma Assert (Vet (Container, Position), "bad cursor in function Key");
  
!       return Container.Nodes (Position.Node).Key;
     end Key;
  
     ------------
--- 702,708 ----
  
        pragma Assert (Vet (Container, Position), "bad cursor in function Key");
  
!       return Container.Content.Nodes (Position.Node).Key;
     end Key;
  
     ------------
*************** is
*** 677,683 ****
  
     function Length (Container : Map) return Count_Type is
     begin
!       return Container.Length;
     end Length;
  
     ----------
--- 711,717 ----
  
     function Length (Container : Map) return Count_Type is
     begin
!       return Container.Content.Length;
     end Length;
  
     ----------
*************** is
*** 688,694 ****
       (Target : in out Map;
        Source : in out Map)
     is
!       NN : HT_Types.Nodes_Type renames Source.Nodes;
        X  : Count_Type;
        Y  : Count_Type;
  
--- 722,728 ----
       (Target : in out Map;
        Source : in out Map)
     is
!       NN : HT_Types.Nodes_Type renames Source.Content.Nodes;
        X  : Count_Type;
        Y  : Count_Type;
  
*************** is
*** 704,720 ****
  
        Clear (Target);
  
!       if Source.Length = 0 then
           return;
        end if;
  
!       X := HT_Ops.First (Source);
        while X /= 0 loop
           Insert (Target, NN (X).Key, NN (X).Element);  -- optimize???
  
!          Y := HT_Ops.Next (Source, X);
  
!          HT_Ops.Delete_Node_Sans_Free (Source, X);
           Free (Source, X);
  
           X := Y;
--- 738,754 ----
  
        Clear (Target);
  
!       if Source.Content.Length = 0 then
           return;
        end if;
  
!       X := HT_Ops.First (Source.Content);
        while X /= 0 loop
           Insert (Target, NN (X).Key, NN (X).Element);  -- optimize???
  
!          Y := HT_Ops.Next (Source.Content, X);
  
!          HT_Ops.Delete_Node_Sans_Free (Source.Content, X);
           Free (Source, X);
  
           X := Y;
*************** is
*** 743,749 ****
        pragma Assert (Vet (Container, Position), "bad cursor in function Next");
  
        declare
!          Node : constant Count_Type := HT_Ops.Next (Container, Position.Node);
  
        begin
           if Node = 0 then
--- 777,784 ----
        pragma Assert (Vet (Container, Position), "bad cursor in function Next");
  
        declare
!          Node : constant Count_Type :=
!            HT_Ops.Next (Container.Content, Position.Node);
  
        begin
           if Node = 0 then
*************** is
*** 759,764 ****
--- 794,833 ----
        Position := Next (Container, Position);
     end Next;
  
+    ---------------
+    -- Reference --
+    ---------------
+ 
+    function Reference
+      (Container : not null access Map;
+       Position  : Cursor) return not null access Element_Type
+    is
+    begin
+       if not Has_Element (Container.all, Position) then
+          raise Constraint_Error with "Position cursor has no element";
+       end if;
+ 
+       pragma Assert
+         (Vet (Container.all, Position), "bad cursor in function Reference");
+ 
+       return Container.Content.Nodes (Position.Node).Element'Access;
+    end Reference;
+ 
+    function Reference
+      (Container : not null access Map;
+       Key       : Key_Type) return not null access Element_Type
+    is
+       Node : constant Count_Type := Find (Container.all, Key).Node;
+ 
+    begin
+       if Node = 0 then
+          raise Constraint_Error with
+            "no element available because key not in map";
+       end if;
+ 
+       return Container.Content.Nodes (Node).Element'Access;
+    end Reference;
+ 
     -------------
     -- Replace --
     -------------
*************** is
*** 768,774 ****
        Key       : Key_Type;
        New_Item  : Element_Type)
     is
!       Node : constant Count_Type := Key_Ops.Find (Container, Key);
  
     begin
        if Node = 0 then
--- 837,843 ----
        Key       : Key_Type;
        New_Item  : Element_Type)
     is
!       Node : constant Count_Type := Key_Ops.Find (Container.Content, Key);
  
     begin
        if Node = 0 then
*************** is
*** 776,782 ****
        end if;
  
        declare
!          N : Node_Type renames Container.Nodes (Node);
        begin
           N.Key := Key;
           N.Element := New_Item;
--- 845,851 ----
        end if;
  
        declare
!          N : Node_Type renames Container.Content.Nodes (Node);
        begin
           N.Key := Key;
           N.Element := New_Item;
*************** is
*** 801,807 ****
        pragma Assert
          (Vet (Container, Position), "bad cursor in Replace_Element");
  
!       Container.Nodes (Position.Node).Element := New_Item;
     end Replace_Element;
  
     ----------------------
--- 870,876 ----
        pragma Assert
          (Vet (Container, Position), "bad cursor in Replace_Element");
  
!       Container.Content.Nodes (Position.Node).Element := New_Item;
     end Replace_Element;
  
     ----------------------
*************** is
*** 841,847 ****
           X : Count_Type;
  
        begin
!          if Container.Length = 0 then
              return False;
           end if;
  
--- 910,916 ----
           X : Count_Type;
  
        begin
!          if Container.Content.Length = 0 then
              return False;
           end if;
  
*************** is
*** 849,855 ****
              return False;
           end if;
  
!          if Container.Buckets'Length = 0 then
              return False;
           end if;
  
--- 918,924 ----
              return False;
           end if;
  
!          if Container.Content.Buckets'Length = 0 then
              return False;
           end if;
  
*************** is
*** 857,871 ****
              return False;
           end if;
  
!          if Container.Nodes (Position.Node).Next = Position.Node then
              return False;
           end if;
  
           X :=
!            Container.Buckets
!              (Key_Ops.Index (Container, Container.Nodes (Position.Node).Key));
  
!          for J in 1 .. Container.Length loop
              if X = Position.Node then
                 return True;
              end if;
--- 926,942 ----
              return False;
           end if;
  
!          if Container.Content.Nodes (Position.Node).Next = Position.Node then
              return False;
           end if;
  
           X :=
!            Container.Content.Buckets
!              (Key_Ops.Index
!                 (Container.Content,
!                  Container.Content.Nodes (Position.Node).Key));
  
!          for J in 1 .. Container.Content.Length loop
              if X = Position.Node then
                 return True;
              end if;
*************** is
*** 874,887 ****
                 return False;
              end if;
  
!             if X = Container.Nodes (X).Next then
  
                 --  Prevent unnecessary looping
  
                 return False;
              end if;
  
!             X := Container.Nodes (X).Next;
           end loop;
  
           return False;
--- 945,958 ----
                 return False;
              end if;
  
!             if X = Container.Content.Nodes (X).Next then
  
                 --  Prevent unnecessary looping
  
                 return False;
              end if;
  
!             X := Container.Content.Nodes (X).Next;
           end loop;
  
           return False;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cfhama.ads gcc-12.1.0/gcc/ada/libgnat/a-cfhama.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cfhama.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cfhama.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** generic
*** 64,69 ****
--- 64,75 ----
  package Ada.Containers.Formal_Hashed_Maps with
    SPARK_Mode
  is
+    --  Contracts in this unit are meant for analysis only, not for run-time
+    --  checking.
+ 
+    pragma Assertion_Policy (Pre => Ignore);
+    pragma Assertion_Policy (Post => Ignore);
+    pragma Assertion_Policy (Contract_Cases => Ignore);
     pragma Annotate (CodePeer, Skip_Analysis);
  
     type Map (Capacity : Count_Type; Modulus : Hash_Type) is private with
*************** is
*** 389,394 ****
--- 395,489 ----
                  Model (Container)'Old,
                  Key (Container, Position));
  
+    function At_End
+      (E : not null access constant Map) return not null access constant Map
+    is (E)
+    with Ghost,
+      Annotate => (GNATprove, At_End_Borrow);
+ 
+    function At_End
+      (E : access constant Element_Type) return access constant Element_Type
+    is (E)
+    with Ghost,
+      Annotate => (GNATprove, At_End_Borrow);
+ 
+    function Constant_Reference
+      (Container : aliased Map;
+       Position  : Cursor) return not null access constant Element_Type
+    with
+      Global => null,
+      Pre    => Has_Element (Container, Position),
+      Post   =>
+        Constant_Reference'Result.all =
+            Element (Model (Container), Key (Container, Position));
+ 
+    function Reference
+      (Container : not null access Map;
+       Position  : Cursor) return not null access Element_Type
+    with
+      Global => null,
+      Pre    => Has_Element (Container.all, Position),
+      Post   =>
+ 
+        --  Order of keys and cursors is preserved
+ 
+        Keys (At_End (Container).all) = Keys (Container.all)
+          and Positions (At_End (Container).all) = Positions (Container.all)
+ 
+          --  The value designated by the result of Reference is now associated
+          --  with the key at position Position in Container.
+ 
+          and Element (At_End (Container).all, Position) =
+                At_End (Reference'Result).all
+ 
+          --  Elements associated with other keys are preserved
+ 
+          and M.Same_Keys
+                (Model (At_End (Container).all),
+                 Model (Container.all))
+          and M.Elements_Equal_Except
+                (Model (At_End (Container).all),
+                 Model (Container.all),
+                 Key (At_End (Container).all, Position));
+ 
+    function Constant_Reference
+      (Container : aliased Map;
+       Key       : Key_Type) return not null access constant Element_Type
+    with
+      Global => null,
+      Pre    => Contains (Container, Key),
+      Post   =>
+        Constant_Reference'Result.all = Element (Model (Container), Key);
+ 
+    function Reference
+      (Container : not null access Map;
+       Key       : Key_Type) return not null access Element_Type
+    with
+      Global => null,
+      Pre    => Contains (Container.all, Key),
+      Post   =>
+ 
+        --  Order of keys and cursors is preserved
+ 
+        Keys (At_End (Container).all) = Keys (Container.all)
+          and Positions (At_End (Container).all) = Positions (Container.all)
+ 
+          --  The value designated by the result of Reference is now associated
+          --  with Key in Container.
+ 
+          and Element (Model (At_End (Container).all), Key) =
+                At_End (Reference'Result).all
+ 
+          --  Elements associated with other keys are preserved
+ 
+          and M.Same_Keys
+                (Model (At_End (Container).all),
+                 Model (Container.all))
+          and M.Elements_Equal_Except
+                (Model (At_End (Container).all),
+                 Model (Container.all),
+                 Key);
+ 
     procedure Move (Target : in out Map; Source : in out Map) with
       Global => null,
       Pre    => Target.Capacity >= Length (Source),
*************** private
*** 799,805 ****
  
     type Node_Type is record
        Key         : Key_Type;
!       Element     : Element_Type;
        Next        : Count_Type;
        Has_Element : Boolean := False;
     end record;
--- 894,900 ----
  
     type Node_Type is record
        Key         : Key_Type;
!       Element     : aliased Element_Type;
        Next        : Count_Type;
        Has_Element : Boolean := False;
     end record;
*************** private
*** 807,814 ****
     package HT_Types is new
       Ada.Containers.Hash_Tables.Generic_Bounded_Hash_Table_Types (Node_Type);
  
!    type Map (Capacity : Count_Type; Modulus : Hash_Type) is
!      new HT_Types.Hash_Table_Type (Capacity, Modulus) with null record;
  
     Empty_Map : constant Map := (Capacity => 0, Modulus => 0, others => <>);
  
--- 902,910 ----
     package HT_Types is new
       Ada.Containers.Hash_Tables.Generic_Bounded_Hash_Table_Types (Node_Type);
  
!    type Map (Capacity : Count_Type; Modulus : Hash_Type) is record
!      Content : HT_Types.Hash_Table_Type (Capacity, Modulus);
!    end record;
  
     Empty_Map : constant Map := (Capacity => 0, Modulus => 0, others => <>);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cfhase.adb gcc-12.1.0/gcc/ada/libgnat/a-cfhase.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cfhase.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cfhase.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
*************** is
*** 136,150 ****
              ENode :=
                Find
                  (Container => Right,
!                  Item      => Left.Nodes (Node).Element).Node;
  
              if ENode = 0
!               or else Right.Nodes (ENode).Element /= Left.Nodes (Node).Element
              then
                 return False;
              end if;
  
!             Node := HT_Ops.Next (Left, Node);
           end loop;
  
           return True;
--- 136,151 ----
              ENode :=
                Find
                  (Container => Right,
!                  Item      => Left.Content.Nodes (Node).Element).Node;
  
              if ENode = 0
!               or else Right.Content.Nodes (ENode).Element /=
!               Left.Content.Nodes (Node).Element
              then
                 return False;
              end if;
  
!             Node := HT_Ops.Next (Left.Content, Node);
           end loop;
  
           return True;
*************** is
*** 166,172 ****
        --------------------
  
        procedure Insert_Element (Source_Node : Count_Type) is
!          N : Node_Type renames Source.Nodes (Source_Node);
           X : Count_Type;
           B : Boolean;
  
--- 167,173 ----
        --------------------
  
        procedure Insert_Element (Source_Node : Count_Type) is
!          N : Node_Type renames Source.Content.Nodes (Source_Node);
           X : Count_Type;
           B : Boolean;
  
*************** is
*** 186,193 ****
           raise Storage_Error with "not enough capacity";  -- SE or CE? ???
        end if;
  
!       HT_Ops.Clear (Target);
!       Insert_Elements (Source);
     end Assign;
  
     --------------
--- 187,194 ----
           raise Storage_Error with "not enough capacity";  -- SE or CE? ???
        end if;
  
!       HT_Ops.Clear (Target.Content);
!       Insert_Elements (Source.Content);
     end Assign;
  
     --------------
*************** is
*** 196,202 ****
  
     function Capacity (Container : Set) return Count_Type is
     begin
!       return Container.Nodes'Length;
     end Capacity;
  
     -----------
--- 197,203 ----
  
     function Capacity (Container : Set) return Count_Type is
     begin
!       return Container.Content.Nodes'Length;
     end Capacity;
  
     -----------
*************** is
*** 205,213 ****
  
     procedure Clear (Container : in out Set) is
     begin
!       HT_Ops.Clear (Container);
     end Clear;
  
     --------------
     -- Contains --
     --------------
--- 206,233 ----
  
     procedure Clear (Container : in out Set) is
     begin
!       HT_Ops.Clear (Container.Content);
     end Clear;
  
+    ------------------------
+    -- Constant_Reference --
+    ------------------------
+ 
+    function Constant_Reference
+      (Container : aliased Set;
+       Position  : Cursor) return not null access constant Element_Type
+    is
+    begin
+       if not Has_Element (Container, Position) then
+          raise Constraint_Error with "Position cursor equals No_Element";
+       end if;
+ 
+       pragma Assert
+         (Vet (Container, Position), "bad cursor in function Element");
+ 
+       return Container.Content.Nodes (Position.Node).Element'Access;
+    end Constant_Reference;
+ 
     --------------
     -- Contains --
     --------------
*************** is
*** 237,254 ****
           raise Capacity_Error;
        end if;
  
!       Target.Length := Source.Length;
!       Target.Free := Source.Free;
  
        H := 1;
        while H <= Source.Modulus loop
!          Target.Buckets (H) := Source.Buckets (H);
           H := H + 1;
        end loop;
  
        N := 1;
        while N <= Source.Capacity loop
!          Target.Nodes (N) := Source.Nodes (N);
           N := N + 1;
        end loop;
  
--- 257,274 ----
           raise Capacity_Error;
        end if;
  
!       Target.Content.Length := Source.Content.Length;
!       Target.Content.Free := Source.Content.Free;
  
        H := 1;
        while H <= Source.Modulus loop
!          Target.Content.Buckets (H) := Source.Content.Buckets (H);
           H := H + 1;
        end loop;
  
        N := 1;
        while N <= Source.Capacity loop
!          Target.Content.Nodes (N) := Source.Content.Nodes (N);
           N := N + 1;
        end loop;
  
*************** is
*** 278,284 ****
        X : Count_Type;
  
     begin
!       Element_Keys.Delete_Key_Sans_Free (Container, Item, X);
  
        if X = 0 then
           raise Constraint_Error with "attempt to delete element not in set";
--- 298,304 ----
        X : Count_Type;
  
     begin
!       Element_Keys.Delete_Key_Sans_Free (Container.Content, Item, X);
  
        if X = 0 then
           raise Constraint_Error with "attempt to delete element not in set";
*************** is
*** 295,301 ****
  
        pragma Assert (Vet (Container, Position), "bad cursor in Delete");
  
!       HT_Ops.Delete_Node_Sans_Free (Container, Position.Node);
        Free (Container, Position.Node);
  
        Position := No_Element;
--- 315,321 ----
  
        pragma Assert (Vet (Container, Position), "bad cursor in Delete");
  
!       HT_Ops.Delete_Node_Sans_Free (Container.Content, Position.Node);
        Free (Container, Position.Node);
  
        Position := No_Element;
*************** is
*** 311,318 ****
        Src_Node   : Count_Type;
        Tgt_Node   : Count_Type;
  
!       TN : Nodes_Type renames Target.Nodes;
!       SN : Nodes_Type renames Source.Nodes;
  
     begin
        if Target'Address = Source'Address then
--- 331,338 ----
        Src_Node   : Count_Type;
        Tgt_Node   : Count_Type;
  
!       TN : Nodes_Type renames Target.Content.Nodes;
!       SN : Nodes_Type renames Source.Content.Nodes;
  
     begin
        if Target'Address = Source'Address then
*************** is
*** 320,363 ****
           return;
        end if;
  
!       Src_Length := Source.Length;
  
        if Src_Length = 0 then
           return;
        end if;
  
!       if Src_Length >= Target.Length then
!          Tgt_Node := HT_Ops.First (Target);
           while Tgt_Node /= 0 loop
!             if Element_Keys.Find (Source, TN (Tgt_Node).Element) /= 0 then
                 declare
                    X : constant Count_Type := Tgt_Node;
                 begin
!                   Tgt_Node := HT_Ops.Next (Target, Tgt_Node);
!                   HT_Ops.Delete_Node_Sans_Free (Target, X);
                    Free (Target, X);
                 end;
  
              else
!                Tgt_Node := HT_Ops.Next (Target, Tgt_Node);
              end if;
           end loop;
  
           return;
        else
!          Src_Node := HT_Ops.First (Source);
           Src_Last := 0;
        end if;
  
        while Src_Node /= Src_Last loop
!          Tgt_Node := Element_Keys.Find (Target, SN (Src_Node).Element);
  
           if Tgt_Node /= 0 then
!             HT_Ops.Delete_Node_Sans_Free (Target, Tgt_Node);
              Free (Target, Tgt_Node);
           end if;
  
!          Src_Node := HT_Ops.Next (Source, Src_Node);
        end loop;
     end Difference;
  
--- 340,384 ----
           return;
        end if;
  
!       Src_Length := Source.Content.Length;
  
        if Src_Length = 0 then
           return;
        end if;
  
!       if Src_Length >= Target.Content.Length then
!          Tgt_Node := HT_Ops.First (Target.Content);
           while Tgt_Node /= 0 loop
!             if Element_Keys.Find (Source.Content, TN (Tgt_Node).Element) /= 0
!             then
                 declare
                    X : constant Count_Type := Tgt_Node;
                 begin
!                   Tgt_Node := HT_Ops.Next (Target.Content, Tgt_Node);
!                   HT_Ops.Delete_Node_Sans_Free (Target.Content, X);
                    Free (Target, X);
                 end;
  
              else
!                Tgt_Node := HT_Ops.Next (Target.Content, Tgt_Node);
              end if;
           end loop;
  
           return;
        else
!          Src_Node := HT_Ops.First (Source.Content);
           Src_Last := 0;
        end if;
  
        while Src_Node /= Src_Last loop
!          Tgt_Node := Element_Keys.Find (Target.Content, SN (Src_Node).Element);
  
           if Tgt_Node /= 0 then
!             HT_Ops.Delete_Node_Sans_Free (Target.Content, Tgt_Node);
              Free (Target, Tgt_Node);
           end if;
  
!          Src_Node := HT_Ops.Next (Source.Content, Src_Node);
        end loop;
     end Difference;
  
*************** is
*** 373,379 ****
  
        procedure Process (L_Node : Count_Type) is
           B : Boolean;
!          E : Element_Type renames Left.Nodes (L_Node).Element;
           X : Count_Type;
  
        begin
--- 394,400 ----
  
        procedure Process (L_Node : Count_Type) is
           B : Boolean;
!          E : Element_Type renames Left.Content.Nodes (L_Node).Element;
           X : Count_Type;
  
        begin
*************** is
*** 386,392 ****
     --  Start of processing for Difference
  
     begin
!       Iterate (Left);
     end Difference;
  
     function Difference (Left : Set; Right : Set) return Set is
--- 407,413 ----
     --  Start of processing for Difference
  
     begin
!       Iterate (Left.Content);
     end Difference;
  
     function Difference (Left : Set; Right : Set) return Set is
*************** is
*** 403,409 ****
        end if;
  
        if Length (Right) = 0 then
!          return Left.Copy;
        end if;
  
        C := Length (Left);
--- 424,430 ----
        end if;
  
        if Length (Right) = 0 then
!          return Copy (Left);
        end if;
  
        C := Length (Left);
*************** is
*** 430,436 ****
        pragma Assert
          (Vet (Container, Position), "bad cursor in function Element");
  
!       return Container.Nodes (Position.Node).Element;
     end Element;
  
     ---------------------
--- 451,457 ----
        pragma Assert
          (Vet (Container, Position), "bad cursor in function Element");
  
!       return Container.Content.Nodes (Position.Node).Element;
     end Element;
  
     ---------------------
*************** is
*** 479,485 ****
     --  Start of processing for Equivalent_Sets
  
     begin
!       return Is_Equivalent (Left, Right);
     end Equivalent_Sets;
  
     ---------------------
--- 500,506 ----
     --  Start of processing for Equivalent_Sets
  
     begin
!       return Is_Equivalent (Left.Content, Right.Content);
     end Equivalent_Sets;
  
     ---------------------
*************** is
*** 501,507 ****
     procedure Exclude (Container : in out Set; Item : Element_Type) is
        X : Count_Type;
     begin
!       Element_Keys.Delete_Key_Sans_Free (Container, Item, X);
        Free (Container, X);
     end Exclude;
  
--- 522,528 ----
     procedure Exclude (Container : in out Set; Item : Element_Type) is
        X : Count_Type;
     begin
!       Element_Keys.Delete_Key_Sans_Free (Container.Content, Item, X);
        Free (Container, X);
     end Exclude;
  
*************** is
*** 513,519 ****
       (Container : Set;
        Item      : Element_Type) return Cursor
     is
!       Node : constant Count_Type := Element_Keys.Find (Container, Item);
  
     begin
        if Node = 0 then
--- 534,541 ----
       (Container : Set;
        Item      : Element_Type) return Cursor
     is
!       Node : constant Count_Type :=
!         Element_Keys.Find (Container.Content, Item);
  
     begin
        if Node = 0 then
*************** is
*** 528,534 ****
     -----------
  
     function First (Container : Set) return Cursor is
!       Node : constant Count_Type := HT_Ops.First (Container);
  
     begin
        if Node = 0 then
--- 550,556 ----
     -----------
  
     function First (Container : Set) return Cursor is
!       Node : constant Count_Type := HT_Ops.First (Container.Content);
  
     begin
        if Node = 0 then
*************** is
*** 632,638 ****
        --------------
  
        function Elements (Container : Set) return E.Sequence is
!          Position : Count_Type := HT_Ops.First (Container);
           R        : E.Sequence;
  
        begin
--- 654,660 ----
        --------------
  
        function Elements (Container : Set) return E.Sequence is
!          Position : Count_Type := HT_Ops.First (Container.Content);
           R        : E.Sequence;
  
        begin
*************** is
*** 640,647 ****
           --  for their postconditions.
  
           while Position /= 0 loop
!             R := E.Add (R, Container.Nodes (Position).Element);
!             Position := HT_Ops.Next (Container, Position);
           end loop;
  
           return R;
--- 662,669 ----
           --  for their postconditions.
  
           while Position /= 0 loop
!             R := E.Add (R, Container.Content.Nodes (Position).Element);
!             Position := HT_Ops.Next (Container.Content, Position);
           end loop;
  
           return R;
*************** is
*** 710,716 ****
        -----------
  
        function Model (Container : Set) return M.Set is
!          Position : Count_Type := HT_Ops.First (Container);
           R        : M.Set;
  
        begin
--- 732,738 ----
        -----------
  
        function Model (Container : Set) return M.Set is
!          Position : Count_Type := HT_Ops.First (Container.Content);
           R        : M.Set;
  
        begin
*************** is
*** 721,729 ****
              R :=
                M.Add
                  (Container => R,
!                  Item      => Container.Nodes (Position).Element);
  
!             Position := HT_Ops.Next (Container, Position);
           end loop;
  
           return R;
--- 743,751 ----
              R :=
                M.Add
                  (Container => R,
!                  Item      => Container.Content.Nodes (Position).Element);
  
!             Position := HT_Ops.Next (Container.Content, Position);
           end loop;
  
           return R;
*************** is
*** 735,741 ****
  
        function Positions (Container : Set) return P.Map is
           I        : Count_Type := 1;
!          Position : Count_Type := HT_Ops.First (Container);
           R        : P.Map;
  
        begin
--- 757,763 ----
  
        function Positions (Container : Set) return P.Map is
           I        : Count_Type := 1;
!          Position : Count_Type := HT_Ops.First (Container.Content);
           R        : P.Map;
  
        begin
*************** is
*** 745,751 ****
           while Position /= 0 loop
              R := P.Add (R, (Node => Position), I);
              pragma Assert (P.Length (R) = I);
!             Position := HT_Ops.Next (Container, Position);
              I := I + 1;
           end loop;
  
--- 767,773 ----
           while Position /= 0 loop
              R := P.Add (R, (Node => Position), I);
              pragma Assert (P.Length (R) = I);
!             Position := HT_Ops.Next (Container.Content, Position);
              I := I + 1;
           end loop;
  
*************** is
*** 762,769 ****
     begin
        if X /= 0 then
           pragma Assert (X <= HT.Capacity);
!          HT.Nodes (X).Has_Element := False;
!          HT_Ops.Free (HT, X);
        end if;
     end Free;
  
--- 784,791 ----
     begin
        if X /= 0 then
           pragma Assert (X <= HT.Capacity);
!          HT.Content.Nodes (X).Has_Element := False;
!          HT_Ops.Free (HT.Content, X);
        end if;
     end Free;
  
*************** is
*** 774,781 ****
     procedure Generic_Allocate (HT : in out Set; Node : out Count_Type) is
        procedure Allocate is new HT_Ops.Generic_Allocate (Set_Element);
     begin
!       Allocate (HT, Node);
!       HT.Nodes (Node).Has_Element := True;
     end Generic_Allocate;
  
     package body Generic_Keys with SPARK_Mode => Off is
--- 796,803 ----
     procedure Generic_Allocate (HT : in out Set; Node : out Count_Type) is
        procedure Allocate is new HT_Ops.Generic_Allocate (Set_Element);
     begin
!       Allocate (HT.Content, Node);
!       HT.Content.Nodes (Node).Has_Element := True;
     end Generic_Allocate;
  
     package body Generic_Keys with SPARK_Mode => Off is
*************** is
*** 821,827 ****
           X : Count_Type;
  
        begin
!          Key_Keys.Delete_Key_Sans_Free (Container, Key, X);
  
           if X = 0 then
              raise Constraint_Error with "attempt to delete key not in set";
--- 843,849 ----
           X : Count_Type;
  
        begin
!          Key_Keys.Delete_Key_Sans_Free (Container.Content, Key, X);
  
           if X = 0 then
              raise Constraint_Error with "attempt to delete key not in set";
*************** is
*** 845,851 ****
              raise Constraint_Error with "key not in map";
           end if;
  
!          return Container.Nodes (Node).Element;
        end Element;
  
        -------------------------
--- 867,873 ----
              raise Constraint_Error with "key not in map";
           end if;
  
!          return Container.Content.Nodes (Node).Element;
        end Element;
  
        -------------------------
*************** is
*** 867,873 ****
        procedure Exclude (Container : in out Set; Key : Key_Type) is
           X : Count_Type;
        begin
!          Key_Keys.Delete_Key_Sans_Free (Container, Key, X);
           Free (Container, X);
        end Exclude;
  
--- 889,895 ----
        procedure Exclude (Container : in out Set; Key : Key_Type) is
           X : Count_Type;
        begin
!          Key_Keys.Delete_Key_Sans_Free (Container.Content, Key, X);
           Free (Container, X);
        end Exclude;
  
*************** is
*** 879,885 ****
          (Container : Set;
           Key       : Key_Type) return Cursor
        is
!          Node : constant Count_Type := Key_Keys.Find (Container, Key);
        begin
           return (if Node = 0 then No_Element else (Node => Node));
        end Find;
--- 901,907 ----
          (Container : Set;
           Key       : Key_Type) return Cursor
        is
!          Node : constant Count_Type := Key_Keys.Find (Container.Content, Key);
        begin
           return (if Node = 0 then No_Element else (Node => Node));
        end Find;
*************** is
*** 927,933 ****
             (Vet (Container, Position), "bad cursor in function Key");
  
           declare
!             N  : Node_Type renames Container.Nodes (Position.Node);
           begin
              return Key (N.Element);
           end;
--- 949,955 ----
             (Vet (Container, Position), "bad cursor in function Key");
  
           declare
!             N : Node_Type renames Container.Content.Nodes (Position.Node);
           begin
              return Key (N.Element);
           end;
*************** is
*** 942,955 ****
           Key       : Key_Type;
           New_Item  : Element_Type)
        is
!          Node : constant Count_Type := Key_Keys.Find (Container, Key);
  
        begin
           if Node = 0 then
              raise Constraint_Error with "attempt to replace key not in set";
           end if;
  
!          Replace_Element (Container, Node, New_Item);
        end Replace;
  
     end Generic_Keys;
--- 964,977 ----
           Key       : Key_Type;
           New_Item  : Element_Type)
        is
!          Node : constant Count_Type := Key_Keys.Find (Container.Content, Key);
  
        begin
           if Node = 0 then
              raise Constraint_Error with "attempt to replace key not in set";
           end if;
  
!          Replace_Element (Container.Content, Node, New_Item);
        end Replace;
  
     end Generic_Keys;
*************** is
*** 961,967 ****
     function Has_Element (Container : Set; Position : Cursor) return Boolean is
     begin
        if Position.Node = 0
!         or else not Container.Nodes (Position.Node).Has_Element
        then
           return False;
        end if;
--- 983,989 ----
     function Has_Element (Container : Set; Position : Cursor) return Boolean is
     begin
        if Position.Node = 0
!         or else not Container.Content.Nodes (Position.Node).Has_Element
        then
           return False;
        end if;
*************** is
*** 990,996 ****
        Insert (Container, New_Item, Position, Inserted);
  
        if not Inserted then
!          Container.Nodes (Position.Node).Element := New_Item;
        end if;
     end Include;
  
--- 1012,1018 ----
        Insert (Container, New_Item, Position, Inserted);
  
        if not Inserted then
!          Container.Content.Nodes (Position.Node).Element := New_Item;
        end if;
     end Include;
  
*************** is
*** 1062,1068 ****
     --  Start of processing for Insert
  
     begin
!       Local_Insert (Container, New_Item, Node, Inserted);
     end Insert;
  
     ------------------
--- 1084,1090 ----
     --  Start of processing for Insert
  
     begin
!       Local_Insert (Container.Content, New_Item, Node, Inserted);
     end Insert;
  
     ------------------
*************** is
*** 1071,1099 ****
  
     procedure Intersection (Target : in out Set; Source : Set) is
        Tgt_Node : Count_Type;
!       TN       : Nodes_Type renames Target.Nodes;
  
     begin
        if Target'Address = Source'Address then
           return;
        end if;
  
!       if Source.Length = 0 then
           Clear (Target);
           return;
        end if;
  
!       Tgt_Node := HT_Ops.First (Target);
        while Tgt_Node /= 0 loop
           if Find (Source, TN (Tgt_Node).Element).Node /= 0 then
!             Tgt_Node := HT_Ops.Next (Target, Tgt_Node);
  
           else
              declare
                 X : constant Count_Type := Tgt_Node;
              begin
!                Tgt_Node := HT_Ops.Next (Target, Tgt_Node);
!                HT_Ops.Delete_Node_Sans_Free (Target, X);
                 Free (Target, X);
              end;
           end if;
--- 1093,1121 ----
  
     procedure Intersection (Target : in out Set; Source : Set) is
        Tgt_Node : Count_Type;
!       TN       : Nodes_Type renames Target.Content.Nodes;
  
     begin
        if Target'Address = Source'Address then
           return;
        end if;
  
!       if Source.Content.Length = 0 then
           Clear (Target);
           return;
        end if;
  
!       Tgt_Node := HT_Ops.First (Target.Content);
        while Tgt_Node /= 0 loop
           if Find (Source, TN (Tgt_Node).Element).Node /= 0 then
!             Tgt_Node := HT_Ops.Next (Target.Content, Tgt_Node);
  
           else
              declare
                 X : constant Count_Type := Tgt_Node;
              begin
!                Tgt_Node := HT_Ops.Next (Target.Content, Tgt_Node);
!                HT_Ops.Delete_Node_Sans_Free (Target.Content, X);
                 Free (Target, X);
              end;
           end if;
*************** is
*** 1111,1117 ****
        -------------
  
        procedure Process (L_Node : Count_Type) is
!          E : Element_Type renames Left.Nodes (L_Node).Element;
           X : Count_Type;
           B : Boolean;
  
--- 1133,1139 ----
        -------------
  
        procedure Process (L_Node : Count_Type) is
!          E : Element_Type renames Left.Content.Nodes (L_Node).Element;
           X : Count_Type;
           B : Boolean;
  
*************** is
*** 1125,1131 ****
     --  Start of processing for Intersection
  
     begin
!       Iterate (Left);
     end Intersection;
  
     function Intersection (Left : Set; Right : Set) return Set is
--- 1147,1153 ----
     --  Start of processing for Intersection
  
     begin
!       Iterate (Left.Content);
     end Intersection;
  
     function Intersection (Left : Set; Right : Set) return Set is
*************** is
*** 1134,1140 ****
  
     begin
        if Left'Address = Right'Address then
!          return Left.Copy;
        end if;
  
        C := Count_Type'Min (Length (Left), Length (Right));  -- ???
--- 1156,1162 ----
  
     begin
        if Left'Address = Right'Address then
!          return Copy (Left);
        end if;
  
        C := Count_Type'Min (Length (Left), Length (Right));  -- ???
*************** is
*** 1162,1168 ****
  
     function Is_In (HT : Set; Key : Node_Type) return Boolean is
     begin
!       return Element_Keys.Find (HT, Key.Element) /= 0;
     end Is_In;
  
     ---------------
--- 1184,1190 ----
  
     function Is_In (HT : Set; Key : Node_Type) return Boolean is
     begin
!       return Element_Keys.Find (HT.Content, Key.Element) /= 0;
     end Is_In;
  
     ---------------
*************** is
*** 1171,1177 ****
  
     function Is_Subset (Subset : Set; Of_Set : Set) return Boolean is
        Subset_Node  : Count_Type;
!       Subset_Nodes : Nodes_Type renames Subset.Nodes;
  
     begin
        if Subset'Address = Of_Set'Address then
--- 1193,1199 ----
  
     function Is_Subset (Subset : Set; Of_Set : Set) return Boolean is
        Subset_Node  : Count_Type;
!       Subset_Nodes : Nodes_Type renames Subset.Content.Nodes;
  
     begin
        if Subset'Address = Of_Set'Address then
*************** is
*** 1194,1200 ****
              end if;
           end;
  
!          Subset_Node := HT_Ops.Next (Subset, Subset_Node);
        end loop;
  
        return True;
--- 1216,1222 ----
              end if;
           end;
  
!          Subset_Node := HT_Ops.Next (Subset.Content, Subset_Node);
        end loop;
  
        return True;
*************** is
*** 1206,1212 ****
  
     function Length (Container : Set) return Count_Type is
     begin
!       return Container.Length;
     end Length;
  
     ----------
--- 1228,1234 ----
  
     function Length (Container : Set) return Count_Type is
     begin
!       return Container.Content.Length;
     end Length;
  
     ----------
*************** is
*** 1216,1222 ****
     --  Comments???
  
     procedure Move (Target : in out Set; Source : in out Set) is
!       NN   : HT_Types.Nodes_Type renames Source.Nodes;
        X, Y : Count_Type;
  
     begin
--- 1238,1244 ----
     --  Comments???
  
     procedure Move (Target : in out Set; Source : in out Set) is
!       NN   : HT_Types.Nodes_Type renames Source.Content.Nodes;
        X, Y : Count_Type;
  
     begin
*************** is
*** 1231,1247 ****
  
        Clear (Target);
  
!       if Source.Length = 0 then
           return;
        end if;
  
!       X := HT_Ops.First (Source);
        while X /= 0 loop
           Insert (Target, NN (X).Element);  -- optimize???
  
!          Y := HT_Ops.Next (Source, X);
  
!          HT_Ops.Delete_Node_Sans_Free (Source, X);
           Free (Source, X);
  
           X := Y;
--- 1253,1269 ----
  
        Clear (Target);
  
!       if Source.Content.Length = 0 then
           return;
        end if;
  
!       X := HT_Ops.First (Source.Content);
        while X /= 0 loop
           Insert (Target, NN (X).Element);  -- optimize???
  
!          Y := HT_Ops.Next (Source.Content, X);
  
!          HT_Ops.Delete_Node_Sans_Free (Source.Content, X);
           Free (Source, X);
  
           X := Y;
*************** is
*** 1269,1275 ****
  
        pragma Assert (Vet (Container, Position), "bad cursor in Next");
  
!       return (Node => HT_Ops.Next (Container, Position.Node));
     end Next;
  
     procedure Next (Container : Set; Position : in out Cursor) is
--- 1291,1297 ----
  
        pragma Assert (Vet (Container, Position), "bad cursor in Next");
  
!       return (Node => HT_Ops.Next (Container.Content, Position.Node));
     end Next;
  
     procedure Next (Container : Set; Position : in out Cursor) is
*************** is
*** 1283,1289 ****
  
     function Overlap (Left, Right : Set) return Boolean is
        Left_Node  : Count_Type;
!       Left_Nodes : Nodes_Type renames Left.Nodes;
  
     begin
        if Length (Right) = 0 or Length (Left) = 0 then
--- 1305,1311 ----
  
     function Overlap (Left, Right : Set) return Boolean is
        Left_Node  : Count_Type;
!       Left_Nodes : Nodes_Type renames Left.Content.Nodes;
  
     begin
        if Length (Right) = 0 or Length (Left) = 0 then
*************** is
*** 1305,1311 ****
              end if;
           end;
  
!          Left_Node := HT_Ops.Next (Left, Left_Node);
        end loop;
  
        return False;
--- 1327,1333 ----
              end if;
           end;
  
!          Left_Node := HT_Ops.Next (Left.Content, Left_Node);
        end loop;
  
        return False;
*************** is
*** 1316,1329 ****
     -------------
  
     procedure Replace (Container : in out Set; New_Item : Element_Type) is
!       Node : constant Count_Type := Element_Keys.Find (Container, New_Item);
  
     begin
        if Node = 0 then
           raise Constraint_Error with "attempt to replace element not in set";
        end if;
  
!       Container.Nodes (Node).Element := New_Item;
     end Replace;
  
     ---------------------
--- 1338,1352 ----
     -------------
  
     procedure Replace (Container : in out Set; New_Item : Element_Type) is
!       Node : constant Count_Type :=
!         Element_Keys.Find (Container.Content, New_Item);
  
     begin
        if Node = 0 then
           raise Constraint_Error with "attempt to replace element not in set";
        end if;
  
!       Container.Content.Nodes (Node).Element := New_Item;
     end Replace;
  
     ---------------------
*************** is
*** 1343,1349 ****
        pragma Assert
          (Vet (Container, Position), "bad cursor in Replace_Element");
  
!       Replace_Element (Container, Position.Node, New_Item);
     end Replace_Element;
  
     ----------------------
--- 1366,1372 ----
        pragma Assert
          (Vet (Container, Position), "bad cursor in Replace_Element");
  
!       Replace_Element (Container.Content, Position.Node, New_Item);
     end Replace_Element;
  
     ----------------------
*************** is
*** 1394,1400 ****
  
        procedure Process (Source_Node : Count_Type) is
           B : Boolean;
!          N : Node_Type renames Source.Nodes (Source_Node);
           X : Count_Type;
  
        begin
--- 1417,1423 ----
  
        procedure Process (Source_Node : Count_Type) is
           B : Boolean;
!          N : Node_Type renames Source.Content.Nodes (Source_Node);
           X : Count_Type;
  
        begin
*************** is
*** 1419,1425 ****
           return;
        end if;
  
!       Iterate (Source);
     end Symmetric_Difference;
  
     function Symmetric_Difference (Left : Set; Right : Set) return Set is
--- 1442,1448 ----
           return;
        end if;
  
!       Iterate (Source.Content);
     end Symmetric_Difference;
  
     function Symmetric_Difference (Left : Set; Right : Set) return Set is
*************** is
*** 1432,1442 ****
        end if;
  
        if Length (Right) = 0 then
!          return Left.Copy;
        end if;
  
        if Length (Left) = 0 then
!          return Right.Copy;
        end if;
  
        C := Length (Left) + Length (Right);
--- 1455,1465 ----
        end if;
  
        if Length (Right) = 0 then
!          return Copy (Left);
        end if;
  
        if Length (Left) = 0 then
!          return Copy (Right);
        end if;
  
        C := Length (Left) + Length (Right);
*************** is
*** 1478,1484 ****
        -------------
  
        procedure Process (Src_Node : Count_Type) is
!          N : Node_Type renames Source.Nodes (Src_Node);
           E : Element_Type renames N.Element;
  
           X : Count_Type;
--- 1501,1507 ----
        -------------
  
        procedure Process (Src_Node : Count_Type) is
!          N : Node_Type renames Source.Content.Nodes (Src_Node);
           E : Element_Type renames N.Element;
  
           X : Count_Type;
*************** is
*** 1495,1501 ****
           return;
        end if;
  
!       Iterate (Source);
     end Union;
  
     function Union (Left : Set; Right : Set) return Set is
--- 1518,1524 ----
           return;
        end if;
  
!       Iterate (Source.Content);
     end Union;
  
     function Union (Left : Set; Right : Set) return Set is
*************** is
*** 1504,1518 ****
  
     begin
        if Left'Address = Right'Address then
!          return Left.Copy;
        end if;
  
        if Length (Right) = 0 then
!          return Left.Copy;
        end if;
  
        if Length (Left) = 0 then
!          return Right.Copy;
        end if;
  
        C := Length (Left) + Length (Right);
--- 1527,1541 ----
  
     begin
        if Left'Address = Right'Address then
!          return Copy (Left);
        end if;
  
        if Length (Right) = 0 then
!          return Copy (Left);
        end if;
  
        if Length (Left) = 0 then
!          return Copy (Right);
        end if;
  
        C := Length (Left) + Length (Right);
*************** is
*** 1535,1545 ****
  
        declare
           S : Set renames Container;
!          N : Nodes_Type renames S.Nodes;
           X : Count_Type;
  
        begin
!          if S.Length = 0 then
              return False;
           end if;
  
--- 1558,1568 ----
  
        declare
           S : Set renames Container;
!          N : Nodes_Type renames S.Content.Nodes;
           X : Count_Type;
  
        begin
!          if S.Content.Length = 0 then
              return False;
           end if;
  
*************** is
*** 1551,1559 ****
              return False;
           end if;
  
!          X := S.Buckets (Element_Keys.Index (S, N (Position.Node).Element));
  
!          for J in 1 .. S.Length loop
              if X = Position.Node then
                 return True;
              end if;
--- 1574,1583 ----
              return False;
           end if;
  
!          X := S.Content.Buckets
!            (Element_Keys.Index (S.Content, N (Position.Node).Element));
  
!          for J in 1 .. S.Content.Length loop
              if X = Position.Node then
                 return True;
              end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cfhase.ads gcc-12.1.0/gcc/ada/libgnat/a-cfhase.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cfhase.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cfhase.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** generic
*** 62,67 ****
--- 62,73 ----
  package Ada.Containers.Formal_Hashed_Sets with
    SPARK_Mode
  is
+    --  Contracts in this unit are meant for analysis only, not for run-time
+    --  checking.
+ 
+    pragma Assertion_Policy (Pre => Ignore);
+    pragma Assertion_Policy (Post => Ignore);
+    pragma Assertion_Policy (Contract_Cases => Ignore);
     pragma Annotate (CodePeer, Skip_Analysis);
  
     type Set (Capacity : Count_Type; Modulus : Hash_Type) is private with
*************** is
*** 510,515 ****
--- 516,531 ----
                   Position => Position)
            and Positions (Container) = Positions (Container)'Old;
  
+    function Constant_Reference
+      (Container : aliased Set;
+       Position  : Cursor) return not null access constant Element_Type
+    with
+      Global => null,
+      Pre    => Has_Element (Container, Position),
+      Post   =>
+        Constant_Reference'Result.all =
+          E.Get (Elements (Container), P.Get (Positions (Container), Position));
+ 
     procedure Move (Target : in out Set; Source : in out Set) with
       Global => null,
       Pre    => Target.Capacity >= Length (Source),
*************** private
*** 1457,1463 ****
  
     type Node_Type is
        record
!          Element     : Element_Type;
           Next        : Count_Type;
           Has_Element : Boolean := False;
        end record;
--- 1473,1479 ----
  
     type Node_Type is
        record
!          Element     : aliased Element_Type;
           Next        : Count_Type;
           Has_Element : Boolean := False;
        end record;
*************** private
*** 1465,1472 ****
     package HT_Types is new
       Ada.Containers.Hash_Tables.Generic_Bounded_Hash_Table_Types (Node_Type);
  
!    type Set (Capacity : Count_Type; Modulus : Hash_Type) is
!      new HT_Types.Hash_Table_Type (Capacity, Modulus) with null record;
  
     use HT_Types;
  
--- 1481,1489 ----
     package HT_Types is new
       Ada.Containers.Hash_Tables.Generic_Bounded_Hash_Table_Types (Node_Type);
  
!    type Set (Capacity : Count_Type; Modulus : Hash_Type) is record
!      Content : HT_Types.Hash_Table_Type (Capacity, Modulus);
!    end record;
  
     use HT_Types;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cfinve.adb gcc-12.1.0/gcc/ada/libgnat/a-cfinve.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cfinve.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cfinve.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
*************** is
*** 184,189 ****
--- 184,211 ----
        Free (Container.Elements_Ptr);
     end Clear;
  
+    ------------------------
+    -- Constant_Reference --
+    ------------------------
+ 
+    function Constant_Reference
+      (Container : aliased Vector;
+       Index     : Index_Type) return not null access constant Element_Type
+    is
+    begin
+       if Index > Container.Last then
+          raise Constraint_Error with "Index is out of range";
+       end if;
+ 
+       declare
+          II : constant Int'Base := Int (Index) - Int (No_Index);
+          I  : constant Capacity_Range := Capacity_Range (II);
+ 
+       begin
+          return Constant_Reference (Elemsc (Container) (I));
+       end;
+    end Constant_Reference;
+ 
     --------------
     -- Contains --
     --------------
*************** is
*** 849,855 ****
  
        J := To_Array_Index (Before);
  
!       Elems (Container) (J .. J - 1 + Count) := (others => H (New_Item));
     end Insert;
  
     procedure Insert
--- 871,877 ----
  
        J := To_Array_Index (Before);
  
!       Elems (Container) (J .. J - 1 + Count) := [others => H (New_Item)];
     end Insert;
  
     procedure Insert
*************** is
*** 1180,1185 ****
--- 1202,1233 ----
        Insert (Container, Index_Type'First, New_Item, Count);
     end Prepend;
  
+    ---------------
+    -- Reference --
+    ---------------
+ 
+    function Reference
+      (Container : not null access Vector;
+       Index     : Index_Type) return not null access Element_Type
+    is
+    begin
+       if Index > Container.Last then
+          raise Constraint_Error with "Index is out of range";
+       end if;
+ 
+       declare
+          II : constant Int'Base := Int (Index) - Int (No_Index);
+          I  : constant Capacity_Range := Capacity_Range (II);
+ 
+       begin
+          if Container.Elements_Ptr = null then
+             return Reference (Container.Elements (I)'Access);
+          else
+             return Reference (Container.Elements_Ptr (I)'Access);
+          end if;
+       end;
+    end Reference;
+ 
     ---------------------
     -- Replace_Element --
     ---------------------
*************** is
*** 1397,1403 ****
             (Capacity     => Length,
              Last         => Last,
              Elements_Ptr => <>,
!             Elements     => (others => H (New_Item)));
        end;
     end To_Vector;
  
--- 1445,1451 ----
             (Capacity     => Length,
              Last         => Last,
              Elements_Ptr => <>,
!             Elements     => [others => H (New_Item)]);
        end;
     end To_Vector;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cfinve.ads gcc-12.1.0/gcc/ada/libgnat/a-cfinve.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cfinve.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cfinve.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2014-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2014-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** generic
*** 55,60 ****
--- 55,66 ----
  package Ada.Containers.Formal_Indefinite_Vectors with
    SPARK_Mode => On
  is
+    --  Contracts in this unit are meant for analysis only, not for run-time
+    --  checking.
+ 
+    pragma Assertion_Policy (Pre => Ignore);
+    pragma Assertion_Policy (Post => Ignore);
+    pragma Assertion_Policy (Contract_Cases => Ignore);
     pragma Annotate (CodePeer, Skip_Analysis);
  
     subtype Extended_Index is Index_Type'Base
*************** is
*** 306,311 ****
--- 312,359 ----
                  Right    => Model (Container),
                  Position => Index);
  
+    function At_End (E : access constant Vector) return access constant Vector
+    is (E)
+    with Ghost,
+      Annotate => (GNATprove, At_End_Borrow);
+ 
+    function At_End
+      (E : access constant Element_Type) return access constant Element_Type
+    is (E)
+    with Ghost,
+      Annotate => (GNATprove, At_End_Borrow);
+ 
+    function Constant_Reference
+      (Container : aliased Vector;
+       Index     : Index_Type) return not null access constant Element_Type
+    with
+      Global => null,
+      Pre    => Index in First_Index (Container) .. Last_Index (Container),
+      Post   =>
+          Constant_Reference'Result.all = Element (Model (Container), Index);
+ 
+    function Reference
+      (Container : not null access Vector;
+       Index     : Index_Type) return not null access Element_Type
+    with
+      Global => null,
+      Pre    =>
+       Index in First_Index (Container.all) .. Last_Index (Container.all),
+      Post   =>
+       Length (Container.all) = Length (At_End (Container).all)
+ 
+          --  Container will have Result.all at index Index
+ 
+          and At_End (Reference'Result).all =
+            Element (Model (At_End (Container).all), Index)
+ 
+          --  All other elements are preserved
+ 
+          and M.Equal_Except
+                (Left     => Model (Container.all),
+                 Right    => Model (At_End (Container).all),
+                 Position => Index);
+ 
     procedure Insert
       (Container : in out Vector;
        Before    : Extended_Index;
*************** private
*** 904,910 ****
     use Holders;
  
     subtype Array_Index is Capacity_Range range 1 .. Capacity_Range'Last;
!    type Elements_Array is array (Array_Index range <>) of Holder;
     function "=" (L, R : Elements_Array) return Boolean is abstract;
  
     type Elements_Array_Ptr is access all Elements_Array;
--- 952,958 ----
     use Holders;
  
     subtype Array_Index is Capacity_Range range 1 .. Capacity_Range'Last;
!    type Elements_Array is array (Array_Index range <>) of aliased Holder;
     function "=" (L, R : Elements_Array) return Boolean is abstract;
  
     type Elements_Array_Ptr is access all Elements_Array;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cforma.adb gcc-12.1.0/gcc/ada/libgnat/a-cforma.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cforma.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cforma.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
*************** is
*** 133,151 ****
           return True;
        end if;
  
!       Lst := Next (Left, Last (Left).Node);
  
        Node := First (Left).Node;
        while Node /= Lst loop
!          ENode := Find (Right, Left.Nodes (Node).Key).Node;
  
           if ENode = 0 or else
!            Left.Nodes (Node).Element /= Right.Nodes (ENode).Element
           then
              return False;
           end if;
  
!          Node := Next (Left, Node);
        end loop;
  
        return True;
--- 133,152 ----
           return True;
        end if;
  
!       Lst := Next (Left.Content, Last (Left).Node);
  
        Node := First (Left).Node;
        while Node /= Lst loop
!          ENode := Find (Right, Left.Content.Nodes (Node).Key).Node;
  
           if ENode = 0 or else
!            Left.Content.Nodes (Node).Element /=
!            Right.Content.Nodes (ENode).Element
           then
              return False;
           end if;
  
!          Node := Next (Left.Content, Node);
        end loop;
  
        return True;
*************** is
*** 166,172 ****
        --------------------
  
        procedure Append_Element (Source_Node : Count_Type) is
!          SN : Node_Type renames Source.Nodes (Source_Node);
  
           procedure Set_Element (Node : in out Node_Type);
           pragma Inline (Set_Element);
--- 167,173 ----
        --------------------
  
        procedure Append_Element (Source_Node : Count_Type) is
!          SN : Node_Type renames Source.Content.Nodes (Source_Node);
  
           procedure Set_Element (Node : in out Node_Type);
           pragma Inline (Set_Element);
*************** is
*** 193,199 ****
           function New_Node return Count_Type is
              Result : Count_Type;
           begin
!             Allocate (Target, Result);
              return Result;
           end New_Node;
  
--- 194,200 ----
           function New_Node return Count_Type is
              Result : Count_Type;
           begin
!             Allocate (Target.Content, Result);
              return Result;
           end New_Node;
  
*************** is
*** 213,219 ****
  
        begin
           Unconditional_Insert_Avec_Hint
!            (Tree  => Target,
              Hint  => 0,
              Key   => SN.Key,
              Node  => Target_Node);
--- 214,220 ----
  
        begin
           Unconditional_Insert_Avec_Hint
!            (Tree  => Target.Content,
              Hint  => 0,
              Key   => SN.Key,
              Node  => Target_Node);
*************** is
*** 230,237 ****
           raise Storage_Error with "not enough capacity";  -- SE or CE? ???
        end if;
  
!       Tree_Operations.Clear_Tree (Target);
!       Append_Elements (Source);
     end Assign;
  
     -------------
--- 231,238 ----
           raise Storage_Error with "not enough capacity";  -- SE or CE? ???
        end if;
  
!       Tree_Operations.Clear_Tree (Target.Content);
!       Append_Elements (Source.Content);
     end Assign;
  
     -------------
*************** is
*** 239,245 ****
     -------------
  
     function Ceiling (Container : Map; Key : Key_Type) return Cursor is
!       Node : constant Count_Type := Key_Ops.Ceiling (Container, Key);
  
     begin
        if Node = 0 then
--- 240,246 ----
     -------------
  
     function Ceiling (Container : Map; Key : Key_Type) return Cursor is
!       Node : constant Count_Type := Key_Ops.Ceiling (Container.Content, Key);
  
     begin
        if Node = 0 then
*************** is
*** 255,261 ****
  
     procedure Clear (Container : in out Map) is
     begin
!       Tree_Operations.Clear_Tree (Container);
     end Clear;
  
     -----------
--- 256,262 ----
  
     procedure Clear (Container : in out Map) is
     begin
!       Tree_Operations.Clear_Tree (Container.Content);
     end Clear;
  
     -----------
*************** is
*** 267,272 ****
--- 268,307 ----
        return Node.Color;
     end Color;
  
+    ------------------------
+    -- Constant_Reference --
+    ------------------------
+ 
+    function Constant_Reference
+      (Container : aliased Map;
+       Position  : Cursor) return not null access constant Element_Type
+    is
+    begin
+       if not Has_Element (Container, Position) then
+          raise Constraint_Error with "Position cursor has no element";
+       end if;
+ 
+       pragma Assert (Vet (Container.Content, Position.Node),
+                      "bad cursor in function Constant_Reference");
+ 
+       return Container.Content.Nodes (Position.Node).Element'Access;
+    end Constant_Reference;
+ 
+    function Constant_Reference
+      (Container : aliased Map;
+       Key       : Key_Type) return not null access constant Element_Type
+    is
+       Node : constant Node_Access := Find (Container, Key).Node;
+ 
+    begin
+       if Node = 0 then
+          raise Constraint_Error with
+            "no element available because key not in map";
+       end if;
+ 
+       return Container.Content.Nodes (Node).Element'Access;
+    end Constant_Reference;
+ 
     --------------
     -- Contains --
     --------------
*************** is
*** 291,323 ****
  
        return Target : Map (Count_Type'Max (Source.Capacity, Capacity)) do
           if Length (Source) > 0 then
!             Target.Length := Source.Length;
!             Target.Root := Source.Root;
!             Target.First := Source.First;
!             Target.Last := Source.Last;
!             Target.Free := Source.Free;
  
              while Node <= Source.Capacity loop
!                Target.Nodes (Node).Element :=
!                  Source.Nodes (Node).Element;
!                Target.Nodes (Node).Key :=
!                  Source.Nodes (Node).Key;
!                Target.Nodes (Node).Parent :=
!                  Source.Nodes (Node).Parent;
!                Target.Nodes (Node).Left :=
!                  Source.Nodes (Node).Left;
!                Target.Nodes (Node).Right :=
!                  Source.Nodes (Node).Right;
!                Target.Nodes (Node).Color :=
!                  Source.Nodes (Node).Color;
!                Target.Nodes (Node).Has_Element :=
!                  Source.Nodes (Node).Has_Element;
                 Node := Node + 1;
              end loop;
  
              while Node <= Target.Capacity loop
                 N := Node;
!                Formal_Ordered_Maps.Free (Tree => Target, X => N);
                 Node := Node + 1;
              end loop;
           end if;
--- 326,358 ----
  
        return Target : Map (Count_Type'Max (Source.Capacity, Capacity)) do
           if Length (Source) > 0 then
!             Target.Content.Length := Source.Content.Length;
!             Target.Content.Root := Source.Content.Root;
!             Target.Content.First := Source.Content.First;
!             Target.Content.Last := Source.Content.Last;
!             Target.Content.Free := Source.Content.Free;
  
              while Node <= Source.Capacity loop
!                Target.Content.Nodes (Node).Element :=
!                  Source.Content.Nodes (Node).Element;
!                Target.Content.Nodes (Node).Key :=
!                  Source.Content.Nodes (Node).Key;
!                Target.Content.Nodes (Node).Parent :=
!                  Source.Content.Nodes (Node).Parent;
!                Target.Content.Nodes (Node).Left :=
!                  Source.Content.Nodes (Node).Left;
!                Target.Content.Nodes (Node).Right :=
!                  Source.Content.Nodes (Node).Right;
!                Target.Content.Nodes (Node).Color :=
!                  Source.Content.Nodes (Node).Color;
!                Target.Content.Nodes (Node).Has_Element :=
!                  Source.Content.Nodes (Node).Has_Element;
                 Node := Node + 1;
              end loop;
  
              while Node <= Target.Capacity loop
                 N := Node;
!                Free (Tree => Target, X => N);
                 Node := Node + 1;
              end loop;
           end if;
*************** is
*** 335,359 ****
             "Position cursor of Delete has no element";
        end if;
  
!       pragma Assert (Vet (Container, Position.Node),
                       "Position cursor of Delete is bad");
  
!       Tree_Operations.Delete_Node_Sans_Free (Container,
                                               Position.Node);
!       Formal_Ordered_Maps.Free (Container, Position.Node);
        Position := No_Element;
     end Delete;
  
     procedure Delete (Container : in out Map; Key : Key_Type) is
!       X : constant Node_Access := Key_Ops.Find (Container, Key);
  
     begin
        if X = 0 then
           raise Constraint_Error with "key not in map";
        end if;
  
!       Tree_Operations.Delete_Node_Sans_Free (Container, X);
!       Formal_Ordered_Maps.Free (Container, X);
     end Delete;
  
     ------------------
--- 370,394 ----
             "Position cursor of Delete has no element";
        end if;
  
!       pragma Assert (Vet (Container.Content, Position.Node),
                       "Position cursor of Delete is bad");
  
!       Tree_Operations.Delete_Node_Sans_Free (Container.Content,
                                               Position.Node);
!       Free (Container, Position.Node);
        Position := No_Element;
     end Delete;
  
     procedure Delete (Container : in out Map; Key : Key_Type) is
!       X : constant Node_Access := Key_Ops.Find (Container.Content, Key);
  
     begin
        if X = 0 then
           raise Constraint_Error with "key not in map";
        end if;
  
!       Tree_Operations.Delete_Node_Sans_Free (Container.Content, X);
!       Free (Container, X);
     end Delete;
  
     ------------------
*************** is
*** 364,371 ****
        X : constant Node_Access := First (Container).Node;
     begin
        if X /= 0 then
!          Tree_Operations.Delete_Node_Sans_Free (Container, X);
!          Formal_Ordered_Maps.Free (Container, X);
        end if;
     end Delete_First;
  
--- 399,406 ----
        X : constant Node_Access := First (Container).Node;
     begin
        if X /= 0 then
!          Tree_Operations.Delete_Node_Sans_Free (Container.Content, X);
!          Free (Container, X);
        end if;
     end Delete_First;
  
*************** is
*** 377,384 ****
        X : constant Node_Access := Last (Container).Node;
     begin
        if X /= 0 then
!          Tree_Operations.Delete_Node_Sans_Free (Container, X);
!          Formal_Ordered_Maps.Free (Container, X);
        end if;
     end Delete_Last;
  
--- 412,419 ----
        X : constant Node_Access := Last (Container).Node;
     begin
        if X /= 0 then
!          Tree_Operations.Delete_Node_Sans_Free (Container.Content, X);
!          Free (Container, X);
        end if;
     end Delete_Last;
  
*************** is
*** 393,402 ****
             "Position cursor of function Element has no element";
        end if;
  
!       pragma Assert (Vet (Container, Position.Node),
                       "Position cursor of function Element is bad");
  
!       return Container.Nodes (Position.Node).Element;
  
     end Element;
  
--- 428,437 ----
             "Position cursor of function Element has no element";
        end if;
  
!       pragma Assert (Vet (Container.Content, Position.Node),
                       "Position cursor of function Element is bad");
  
!       return Container.Content.Nodes (Position.Node).Element;
  
     end Element;
  
*************** is
*** 408,414 ****
           raise Constraint_Error with "key not in map";
        end if;
  
!       return Container.Nodes (Node).Element;
     end Element;
  
     ---------------------
--- 443,449 ----
           raise Constraint_Error with "key not in map";
        end if;
  
!       return Container.Content.Nodes (Node).Element;
     end Element;
  
     ---------------------
*************** is
*** 431,441 ****
     -------------
  
     procedure Exclude (Container : in out Map; Key : Key_Type) is
!       X : constant Node_Access := Key_Ops.Find (Container, Key);
     begin
        if X /= 0 then
!          Tree_Operations.Delete_Node_Sans_Free (Container, X);
!          Formal_Ordered_Maps.Free (Container, X);
        end if;
     end Exclude;
  
--- 466,476 ----
     -------------
  
     procedure Exclude (Container : in out Map; Key : Key_Type) is
!       X : constant Node_Access := Key_Ops.Find (Container.Content, Key);
     begin
        if X /= 0 then
!          Tree_Operations.Delete_Node_Sans_Free (Container.Content, X);
!          Free (Container, X);
        end if;
     end Exclude;
  
*************** is
*** 444,450 ****
     ----------
  
     function Find (Container : Map; Key : Key_Type) return Cursor is
!       Node : constant Count_Type := Key_Ops.Find (Container, Key);
  
     begin
        if Node = 0 then
--- 479,485 ----
     ----------
  
     function Find (Container : Map; Key : Key_Type) return Cursor is
!       Node : constant Count_Type := Key_Ops.Find (Container.Content, Key);
  
     begin
        if Node = 0 then
*************** is
*** 464,470 ****
           return No_Element;
        end if;
  
!       return (Node => Container.First);
     end First;
  
     -------------------
--- 499,505 ----
           return No_Element;
        end if;
  
!       return (Node => Container.Content.First);
     end First;
  
     -------------------
*************** is
*** 477,483 ****
           raise Constraint_Error with "map is empty";
        end if;
  
!       return Container.Nodes (First (Container).Node).Element;
     end First_Element;
  
     ---------------
--- 512,518 ----
           raise Constraint_Error with "map is empty";
        end if;
  
!       return Container.Content.Nodes (First (Container).Node).Element;
     end First_Element;
  
     ---------------
*************** is
*** 490,496 ****
           raise Constraint_Error with "map is empty";
        end if;
  
!       return Container.Nodes (First (Container).Node).Key;
     end First_Key;
  
     -----------
--- 525,531 ----
           raise Constraint_Error with "map is empty";
        end if;
  
!       return Container.Content.Nodes (First (Container).Node).Key;
     end First_Key;
  
     -----------
*************** is
*** 498,504 ****
     -----------
  
     function Floor (Container : Map; Key : Key_Type) return Cursor is
!       Node : constant Count_Type := Key_Ops.Floor (Container, Key);
  
     begin
        if Node = 0 then
--- 533,539 ----
     -----------
  
     function Floor (Container : Map; Key : Key_Type) return Cursor is
!       Node : constant Count_Type := Key_Ops.Floor (Container.Content, Key);
  
     begin
        if Node = 0 then
*************** is
*** 602,608 ****
        ----------
  
        function Keys (Container : Map) return K.Sequence is
!          Position : Count_Type := Container.First;
           R        : K.Sequence;
  
        begin
--- 637,643 ----
        ----------
  
        function Keys (Container : Map) return K.Sequence is
!          Position : Count_Type := Container.Content.First;
           R        : K.Sequence;
  
        begin
*************** is
*** 610,617 ****
           --  for their postconditions.
  
           while Position /= 0 loop
!             R := K.Add (R, Container.Nodes (Position).Key);
!             Position := Tree_Operations.Next (Container, Position);
           end loop;
  
           return R;
--- 645,652 ----
           --  for their postconditions.
  
           while Position /= 0 loop
!             R := K.Add (R, Container.Content.Nodes (Position).Key);
!             Position := Tree_Operations.Next (Container.Content, Position);
           end loop;
  
           return R;
*************** is
*** 628,634 ****
        -----------
  
        function Model (Container : Map) return M.Map is
!          Position : Count_Type := Container.First;
           R        : M.Map;
  
        begin
--- 663,669 ----
        -----------
  
        function Model (Container : Map) return M.Map is
!          Position : Count_Type := Container.Content.First;
           R        : M.Map;
  
        begin
*************** is
*** 639,648 ****
              R :=
                M.Add
                  (Container => R,
!                  New_Key   => Container.Nodes (Position).Key,
!                  New_Item  => Container.Nodes (Position).Element);
  
!             Position := Tree_Operations.Next (Container, Position);
           end loop;
  
           return R;
--- 674,683 ----
              R :=
                M.Add
                  (Container => R,
!                  New_Key   => Container.Content.Nodes (Position).Key,
!                  New_Item  => Container.Content.Nodes (Position).Element);
  
!             Position := Tree_Operations.Next (Container.Content, Position);
           end loop;
  
           return R;
*************** is
*** 701,707 ****
  
        function Positions (Container : Map) return P.Map is
           I        : Count_Type := 1;
!          Position : Count_Type := Container.First;
           R        : P.Map;
  
        begin
--- 736,742 ----
  
        function Positions (Container : Map) return P.Map is
           I        : Count_Type := 1;
!          Position : Count_Type := Container.Content.First;
           R        : P.Map;
  
        begin
*************** is
*** 711,717 ****
           while Position /= 0 loop
              R := P.Add (R, (Node => Position), I);
              pragma Assert (P.Length (R) = I);
!             Position := Tree_Operations.Next (Container, Position);
              I := I + 1;
           end loop;
  
--- 746,752 ----
           while Position /= 0 loop
              R := P.Add (R, (Node => Position), I);
              pragma Assert (P.Length (R) = I);
!             Position := Tree_Operations.Next (Container.Content, Position);
              I := I + 1;
           end loop;
  
*************** is
*** 729,736 ****
        X  : Count_Type)
     is
     begin
!       Tree.Nodes (X).Has_Element := False;
!       Tree_Operations.Free (Tree, X);
     end Free;
  
     ----------------------
--- 764,771 ----
        X  : Count_Type)
     is
     begin
!       Tree.Content.Nodes (X).Has_Element := False;
!       Tree_Operations.Free (Tree.Content, X);
     end Free;
  
     ----------------------
*************** is
*** 758,764 ****
           return False;
        end if;
  
!       return Container.Nodes (Position.Node).Has_Element;
     end Has_Element;
  
     -------------
--- 793,799 ----
           return False;
        end if;
  
!       return Container.Content.Nodes (Position.Node).Has_Element;
     end Has_Element;
  
     -------------
*************** is
*** 778,784 ****
  
        if not Inserted then
           declare
!             N : Node_Type renames Container.Nodes (Position.Node);
           begin
              N.Key := Key;
              N.Element := New_Item;
--- 813,819 ----
  
        if not Inserted then
           declare
!             N : Node_Type renames Container.Content.Nodes (Position.Node);
           begin
              N.Key := Key;
              N.Element := New_Item;
*************** is
*** 819,825 ****
           X : Node_Access;
  
        begin
!          Allocate_Node (Container, X);
           return X;
        end New_Node;
  
--- 854,860 ----
           X : Node_Access;
  
        begin
!          Allocate_Node (Container.Content, X);
           return X;
        end New_Node;
  
*************** is
*** 827,833 ****
  
     begin
        Insert_Sans_Hint
!         (Container,
           Key,
           Position.Node,
           Inserted);
--- 862,868 ----
  
     begin
        Insert_Sans_Hint
!         (Container.Content,
           Key,
           Position.Node,
           Inserted);
*************** is
*** 895,904 ****
             "Position cursor of function Key has no element";
        end if;
  
!       pragma Assert (Vet (Container, Position.Node),
                       "Position cursor of function Key is bad");
  
!       return Container.Nodes (Position.Node).Key;
     end Key;
  
     ----------
--- 930,939 ----
             "Position cursor of function Key has no element";
        end if;
  
!       pragma Assert (Vet (Container.Content, Position.Node),
                       "Position cursor of function Key is bad");
  
!       return Container.Content.Nodes (Position.Node).Key;
     end Key;
  
     ----------
*************** is
*** 911,917 ****
           return No_Element;
        end if;
  
!       return (Node => Container.Last);
     end Last;
  
     ------------------
--- 946,952 ----
           return No_Element;
        end if;
  
!       return (Node => Container.Content.Last);
     end Last;
  
     ------------------
*************** is
*** 924,930 ****
           raise Constraint_Error with "map is empty";
        end if;
  
!       return Container.Nodes (Last (Container).Node).Element;
     end Last_Element;
  
     --------------
--- 959,965 ----
           raise Constraint_Error with "map is empty";
        end if;
  
!       return Container.Content.Nodes (Last (Container).Node).Element;
     end Last_Element;
  
     --------------
*************** is
*** 937,943 ****
           raise Constraint_Error with "map is empty";
        end if;
  
!       return Container.Nodes (Last (Container).Node).Key;
     end Last_Key;
  
     --------------
--- 972,978 ----
           raise Constraint_Error with "map is empty";
        end if;
  
!       return Container.Content.Nodes (Last (Container).Node).Key;
     end Last_Key;
  
     --------------
*************** is
*** 955,961 ****
  
     function Length (Container : Map) return Count_Type is
     begin
!       return Container.Length;
     end Length;
  
     ----------
--- 990,996 ----
  
     function Length (Container : Map) return Count_Type is
     begin
!       return Container.Content.Length;
     end Length;
  
     ----------
*************** is
*** 963,969 ****
     ----------
  
     procedure Move (Target : in out Map; Source : in out Map) is
!       NN : Tree_Types.Nodes_Type renames Source.Nodes;
        X  : Node_Access;
  
     begin
--- 998,1004 ----
     ----------
  
     procedure Move (Target : in out Map; Source : in out Map) is
!       NN : Tree_Types.Nodes_Type renames Source.Content.Nodes;
        X  : Node_Access;
  
     begin
*************** is
*** 989,995 ****
  
           Insert (Target, NN (X).Key, NN (X).Element);  -- optimize???
  
!          Tree_Operations.Delete_Node_Sans_Free (Source, X);
           Formal_Ordered_Maps.Free (Source, X);
        end loop;
     end Move;
--- 1024,1030 ----
  
           Insert (Target, NN (X).Key, NN (X).Element);  -- optimize???
  
!          Tree_Operations.Delete_Node_Sans_Free (Source.Content, X);
           Formal_Ordered_Maps.Free (Source, X);
        end loop;
     end Move;
*************** is
*** 1013,1022 ****
           raise Constraint_Error;
        end if;
  
!       pragma Assert (Vet (Container, Position.Node),
                       "bad cursor in Next");
  
!       return (Node => Tree_Operations.Next (Container, Position.Node));
     end Next;
  
     ------------
--- 1048,1057 ----
           raise Constraint_Error;
        end if;
  
!       pragma Assert (Vet (Container.Content, Position.Node),
                       "bad cursor in Next");
  
!       return (Node => Tree_Operations.Next (Container.Content, Position.Node));
     end Next;
  
     ------------
*************** is
*** 1047,1058 ****
           raise Constraint_Error;
        end if;
  
!       pragma Assert (Vet (Container, Position.Node),
                       "bad cursor in Previous");
  
        declare
           Node : constant Count_Type :=
!            Tree_Operations.Previous (Container, Position.Node);
  
        begin
           if Node = 0 then
--- 1082,1093 ----
           raise Constraint_Error;
        end if;
  
!       pragma Assert (Vet (Container.Content, Position.Node),
                       "bad cursor in Previous");
  
        declare
           Node : constant Count_Type :=
!            Tree_Operations.Previous (Container.Content, Position.Node);
  
        begin
           if Node = 0 then
*************** is
*** 1063,1068 ****
--- 1098,1138 ----
        end;
     end Previous;
  
+    --------------
+    -- Reference --
+    --------------
+ 
+    function Reference
+      (Container : not null access Map;
+       Position  : Cursor) return not null access Element_Type
+    is
+    begin
+       if not Has_Element (Container.all, Position) then
+          raise Constraint_Error with "Position cursor has no element";
+       end if;
+ 
+       pragma Assert
+         (Vet (Container.Content, Position.Node),
+          "bad cursor in function Reference");
+ 
+       return Container.Content.Nodes (Position.Node).Element'Access;
+    end Reference;
+ 
+    function Reference
+      (Container : not null access Map;
+       Key       : Key_Type) return not null access Element_Type
+    is
+       Node : constant Count_Type := Find (Container.all, Key).Node;
+ 
+    begin
+       if Node = 0 then
+          raise Constraint_Error with
+            "no element available because key not in map";
+       end if;
+ 
+       return Container.Content.Nodes (Node).Element'Access;
+    end Reference;
+ 
     -------------
     -- Replace --
     -------------
*************** is
*** 1074,1080 ****
     is
     begin
        declare
!          Node : constant Node_Access := Key_Ops.Find (Container, Key);
  
        begin
           if Node = 0 then
--- 1144,1150 ----
     is
     begin
        declare
!          Node : constant Node_Access := Key_Ops.Find (Container.Content, Key);
  
        begin
           if Node = 0 then
*************** is
*** 1082,1088 ****
           end if;
  
           declare
!             N : Node_Type renames Container.Nodes (Node);
           begin
              N.Key := Key;
              N.Element := New_Item;
--- 1152,1158 ----
           end if;
  
           declare
!             N : Node_Type renames Container.Content.Nodes (Node);
           begin
              N.Key := Key;
              N.Element := New_Item;
*************** is
*** 1105,1114 ****
             "Position cursor of Replace_Element has no element";
        end if;
  
!       pragma Assert (Vet (Container, Position.Node),
                       "Position cursor of Replace_Element is bad");
  
!       Container.Nodes (Position.Node).Element := New_Item;
     end Replace_Element;
  
     ---------------
--- 1175,1184 ----
             "Position cursor of Replace_Element has no element";
        end if;
  
!       pragma Assert (Vet (Container.Content, Position.Node),
                       "Position cursor of Replace_Element is bad");
  
!       Container.Content.Nodes (Position.Node).Element := New_Item;
     end Replace_Element;
  
     ---------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cforma.ads gcc-12.1.0/gcc/ada/libgnat/a-cforma.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cforma.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cforma.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** generic
*** 63,68 ****
--- 63,74 ----
  package Ada.Containers.Formal_Ordered_Maps with
    SPARK_Mode
  is
+    --  Contracts in this unit are meant for analysis only, not for run-time
+    --  checking.
+ 
+    pragma Assertion_Policy (Pre => Ignore);
+    pragma Assertion_Policy (Post => Ignore);
+    pragma Assertion_Policy (Contract_Cases => Ignore);
     pragma Annotate (CodePeer, Skip_Analysis);
  
     function Equivalent_Keys (Left, Right : Key_Type) return Boolean with
*************** is
*** 395,400 ****
--- 401,495 ----
                  Model (Container)'Old,
                  Key (Container, Position));
  
+    function At_End
+      (E : not null access constant Map) return not null access constant Map
+    is (E)
+    with Ghost,
+      Annotate => (GNATprove, At_End_Borrow);
+ 
+    function At_End
+      (E : access constant Element_Type) return access constant Element_Type
+    is (E)
+    with Ghost,
+      Annotate => (GNATprove, At_End_Borrow);
+ 
+    function Constant_Reference
+      (Container : aliased Map;
+       Position  : Cursor) return not null access constant Element_Type
+    with
+      Global => null,
+      Pre    => Has_Element (Container, Position),
+      Post   =>
+        Constant_Reference'Result.all =
+            Element (Model (Container), Key (Container, Position));
+ 
+    function Reference
+      (Container : not null access Map;
+       Position  : Cursor) return not null access Element_Type
+    with
+      Global => null,
+      Pre    => Has_Element (Container.all, Position),
+      Post   =>
+ 
+        --  Order of keys and cursors is preserved
+ 
+        Keys (At_End (Container).all) = Keys (Container.all)
+          and Positions (At_End (Container).all) = Positions (Container.all)
+ 
+          --  The value designated by the result of Reference is now associated
+          --  with the key at position Position in Container.
+ 
+          and Element (At_End (Container).all, Position) =
+                At_End (Reference'Result).all
+ 
+          --  Elements associated with other keys are preserved
+ 
+          and M.Same_Keys
+                (Model (At_End (Container).all),
+                 Model (Container.all))
+          and M.Elements_Equal_Except
+                (Model (At_End (Container).all),
+                 Model (Container.all),
+                 Key (At_End (Container).all, Position));
+ 
+    function Constant_Reference
+      (Container : aliased Map;
+       Key       : Key_Type) return not null access constant Element_Type
+    with
+      Global => null,
+      Pre    => Contains (Container, Key),
+      Post   =>
+        Constant_Reference'Result.all = Element (Model (Container), Key);
+ 
+    function Reference
+      (Container : not null access Map;
+       Key       : Key_Type) return not null access Element_Type
+    with
+      Global => null,
+      Pre    => Contains (Container.all, Key),
+      Post   =>
+ 
+        --  Order of keys and cursors is preserved
+ 
+        Keys (At_End (Container).all) = Keys (Container.all)
+          and Positions (At_End (Container).all) = Positions (Container.all)
+ 
+          --  The value designated by the result of Reference is now associated
+          --  with Key in Container.
+ 
+          and Element (Model (At_End (Container).all), Key) =
+                At_End (Reference'Result).all
+ 
+          --  Elements associated with other keys are preserved
+ 
+          and M.Same_Keys
+                (Model (At_End (Container).all),
+                 Model (Container.all))
+          and M.Elements_Equal_Except
+                (Model (At_End (Container).all),
+                 Model (Container.all),
+                 Key);
+ 
     procedure Move (Target : in out Map; Source : in out Map) with
       Global => null,
       Pre    => Target.Capacity >= Length (Source),
*************** private
*** 1040,1053 ****
        Right   : Node_Access := 0;
        Color   : Red_Black_Trees.Color_Type := Red;
        Key     : Key_Type;
!       Element : Element_Type;
     end record;
  
     package Tree_Types is
       new Ada.Containers.Red_Black_Trees.Generic_Bounded_Tree_Types (Node_Type);
  
!    type Map (Capacity : Count_Type) is
!      new Tree_Types.Tree_Type (Capacity) with null record;
  
     Empty_Map : constant Map := (Capacity => 0, others => <>);
  
--- 1135,1149 ----
        Right   : Node_Access := 0;
        Color   : Red_Black_Trees.Color_Type := Red;
        Key     : Key_Type;
!       Element : aliased Element_Type;
     end record;
  
     package Tree_Types is
       new Ada.Containers.Red_Black_Trees.Generic_Bounded_Tree_Types (Node_Type);
  
!    type Map (Capacity : Count_Type) is record
!      Content : Tree_Types.Tree_Type (Capacity);
!    end record;
  
     Empty_Map : constant Map := (Capacity => 0, others => <>);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cforse.adb gcc-12.1.0/gcc/ada/libgnat/a-cforse.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cforse.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cforse.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
*************** is
*** 81,86 ****
--- 81,90 ----
  
     --  Comments needed???
  
+    procedure Assign
+      (Target : in out Tree_Types.Tree_Type;
+       Source : Tree_Types.Tree_Type);
+ 
     generic
        with procedure Set_Element (Node : in out Node_Type);
     procedure Generic_Allocate
*************** is
*** 90,102 ****
     procedure Free (Tree : in out Set; X : Count_Type);
  
     procedure Insert_Sans_Hint
!      (Container : in out Set;
        New_Item  : Element_Type;
        Node      : out Count_Type;
        Inserted  : out Boolean);
  
     procedure Insert_With_Hint
!      (Dst_Set  : in out Set;
        Dst_Hint : Count_Type;
        Src_Node : Node_Type;
        Dst_Node : out Count_Type);
--- 94,106 ----
     procedure Free (Tree : in out Set; X : Count_Type);
  
     procedure Insert_Sans_Hint
!      (Container : in out Tree_Types.Tree_Type;
        New_Item  : Element_Type;
        Node      : out Count_Type;
        Inserted  : out Boolean);
  
     procedure Insert_With_Hint
!      (Dst_Set  : in out Tree_Types.Tree_Type;
        Dst_Hint : Count_Type;
        Src_Node : Node_Type;
        Dst_Node : out Count_Type);
*************** is
*** 141,147 ****
     package Set_Ops is
       new Red_Black_Trees.Generic_Bounded_Set_Operations
         (Tree_Operations  => Tree_Operations,
!         Set_Type         => Set,
          Assign           => Assign,
          Insert_With_Hint => Insert_With_Hint,
          Is_Less          => Is_Less_Node_Node);
--- 145,151 ----
     package Set_Ops is
       new Red_Black_Trees.Generic_Bounded_Set_Operations
         (Tree_Operations  => Tree_Operations,
!         Set_Type         => Tree_Types.Tree_Type,
          Assign           => Assign,
          Insert_With_Hint => Insert_With_Hint,
          Is_Less          => Is_Less_Node_Node);
*************** is
*** 164,181 ****
           return True;
        end if;
  
!       Lst := Next (Left, Last (Left).Node);
  
        Node := First (Left).Node;
        while Node /= Lst loop
!          ENode := Find (Right, Left.Nodes (Node).Element).Node;
           if ENode = 0
!            or else Left.Nodes (Node).Element /= Right.Nodes (ENode).Element
           then
              return False;
           end if;
  
!          Node := Next (Left, Node);
        end loop;
  
        return True;
--- 168,186 ----
           return True;
        end if;
  
!       Lst := Next (Left.Content, Last (Left).Node);
  
        Node := First (Left).Node;
        while Node /= Lst loop
!          ENode := Find (Right, Left.Content.Nodes (Node).Element).Node;
           if ENode = 0
!            or else Left.Content.Nodes (Node).Element /=
!            Right.Content.Nodes (ENode).Element
           then
              return False;
           end if;
  
!          Node := Next (Left.Content, Node);
        end loop;
  
        return True;
*************** is
*** 185,191 ****
     -- Assign --
     ------------
  
!    procedure Assign (Target : in out Set; Source : Set) is
        procedure Append_Element (Source_Node : Count_Type);
  
        procedure Append_Elements is
--- 190,199 ----
     -- Assign --
     ------------
  
!    procedure Assign
!      (Target : in out Tree_Types.Tree_Type;
!       Source : Tree_Types.Tree_Type)
!    is
        procedure Append_Element (Source_Node : Count_Type);
  
        procedure Append_Elements is
*************** is
*** 267,278 ****
        Append_Elements (Source);
     end Assign;
  
     -------------
     -- Ceiling --
     -------------
  
     function Ceiling (Container : Set; Item : Element_Type) return Cursor is
!       Node : constant Count_Type := Element_Keys.Ceiling (Container, Item);
  
     begin
        if Node = 0 then
--- 275,292 ----
        Append_Elements (Source);
     end Assign;
  
+    procedure Assign (Target : in out Set; Source : Set) is
+    begin
+       Assign (Target.Content, Source.Content);
+    end Assign;
+ 
     -------------
     -- Ceiling --
     -------------
  
     function Ceiling (Container : Set; Item : Element_Type) return Cursor is
!       Node : constant Count_Type :=
!         Element_Keys.Ceiling (Container.Content, Item);
  
     begin
        if Node = 0 then
*************** is
*** 288,294 ****
  
     procedure Clear (Container : in out Set) is
     begin
!       Tree_Operations.Clear_Tree (Container);
     end Clear;
  
     -----------
--- 302,308 ----
  
     procedure Clear (Container : in out Set) is
     begin
!       Tree_Operations.Clear_Tree (Container.Content);
     end Clear;
  
     -----------
*************** is
*** 300,305 ****
--- 314,338 ----
        return Node.Color;
     end Color;
  
+    ------------------------
+    -- Constant_Reference --
+    ------------------------
+ 
+    function Constant_Reference
+      (Container : aliased Set;
+       Position  : Cursor) return not null access constant Element_Type
+    is
+    begin
+       if not Has_Element (Container, Position) then
+          raise Constraint_Error with "Position cursor has no element";
+       end if;
+ 
+       pragma Assert (Vet (Container.Content, Position.Node),
+                      "bad cursor in Element");
+ 
+       return Container.Content.Nodes (Position.Node).Element'Access;
+    end Constant_Reference;
+ 
     --------------
     -- Contains --
     --------------
*************** is
*** 327,358 ****
        end if;
  
        if Length (Source) > 0 then
!          Target.Length := Source.Length;
!          Target.Root   := Source.Root;
!          Target.First  := Source.First;
!          Target.Last   := Source.Last;
!          Target.Free   := Source.Free;
  
           Node := 1;
           while Node <= Source.Capacity loop
!             Target.Nodes (Node).Element :=
!               Source.Nodes (Node).Element;
!             Target.Nodes (Node).Parent :=
!               Source.Nodes (Node).Parent;
!             Target.Nodes (Node).Left :=
!               Source.Nodes (Node).Left;
!             Target.Nodes (Node).Right :=
!               Source.Nodes (Node).Right;
!             Target.Nodes (Node).Color :=
!               Source.Nodes (Node).Color;
!             Target.Nodes (Node).Has_Element :=
!               Source.Nodes (Node).Has_Element;
              Node := Node + 1;
           end loop;
  
           while Node <= Target.Capacity loop
              N := Node;
!             Formal_Ordered_Sets.Free (Tree => Target, X => N);
              Node := Node + 1;
           end loop;
        end if;
--- 360,391 ----
        end if;
  
        if Length (Source) > 0 then
!          Target.Content.Length := Source.Content.Length;
!          Target.Content.Root   := Source.Content.Root;
!          Target.Content.First  := Source.Content.First;
!          Target.Content.Last   := Source.Content.Last;
!          Target.Content.Free   := Source.Content.Free;
  
           Node := 1;
           while Node <= Source.Capacity loop
!             Target.Content.Nodes (Node).Element :=
!               Source.Content.Nodes (Node).Element;
!             Target.Content.Nodes (Node).Parent :=
!               Source.Content.Nodes (Node).Parent;
!             Target.Content.Nodes (Node).Left :=
!               Source.Content.Nodes (Node).Left;
!             Target.Content.Nodes (Node).Right :=
!               Source.Content.Nodes (Node).Right;
!             Target.Content.Nodes (Node).Color :=
!               Source.Content.Nodes (Node).Color;
!             Target.Content.Nodes (Node).Has_Element :=
!               Source.Content.Nodes (Node).Has_Element;
              Node := Node + 1;
           end loop;
  
           while Node <= Target.Capacity loop
              N := Node;
!             Free (Tree => Target, X => N);
              Node := Node + 1;
           end loop;
        end if;
*************** is
*** 370,394 ****
           raise Constraint_Error with "Position cursor has no element";
        end if;
  
!       pragma Assert (Vet (Container, Position.Node),
                       "bad cursor in Delete");
  
!       Tree_Operations.Delete_Node_Sans_Free (Container,
                                               Position.Node);
!       Formal_Ordered_Sets.Free (Container, Position.Node);
        Position := No_Element;
     end Delete;
  
     procedure Delete (Container : in out Set; Item : Element_Type) is
!       X : constant Count_Type := Element_Keys.Find (Container, Item);
  
     begin
        if X = 0 then
           raise Constraint_Error with "attempt to delete element not in set";
        end if;
  
!       Tree_Operations.Delete_Node_Sans_Free (Container, X);
!       Formal_Ordered_Sets.Free (Container, X);
     end Delete;
  
     ------------------
--- 403,427 ----
           raise Constraint_Error with "Position cursor has no element";
        end if;
  
!       pragma Assert (Vet (Container.Content, Position.Node),
                       "bad cursor in Delete");
  
!       Tree_Operations.Delete_Node_Sans_Free (Container.Content,
                                               Position.Node);
!       Free (Container, Position.Node);
        Position := No_Element;
     end Delete;
  
     procedure Delete (Container : in out Set; Item : Element_Type) is
!       X : constant Count_Type := Element_Keys.Find (Container.Content, Item);
  
     begin
        if X = 0 then
           raise Constraint_Error with "attempt to delete element not in set";
        end if;
  
!       Tree_Operations.Delete_Node_Sans_Free (Container.Content, X);
!       Free (Container, X);
     end Delete;
  
     ------------------
*************** is
*** 396,406 ****
     ------------------
  
     procedure Delete_First (Container : in out Set) is
!       X    : constant Count_Type := Container.First;
     begin
        if X /= 0 then
!          Tree_Operations.Delete_Node_Sans_Free (Container, X);
!          Formal_Ordered_Sets.Free (Container, X);
        end if;
     end Delete_First;
  
--- 429,439 ----
     ------------------
  
     procedure Delete_First (Container : in out Set) is
!       X : constant Count_Type := Container.Content.First;
     begin
        if X /= 0 then
!          Tree_Operations.Delete_Node_Sans_Free (Container.Content, X);
!          Free (Container, X);
        end if;
     end Delete_First;
  
*************** is
*** 409,419 ****
     -----------------
  
     procedure Delete_Last (Container : in out Set) is
!       X    : constant Count_Type := Container.Last;
     begin
        if X /= 0 then
!          Tree_Operations.Delete_Node_Sans_Free (Container, X);
!          Formal_Ordered_Sets.Free (Container, X);
        end if;
     end Delete_Last;
  
--- 442,452 ----
     -----------------
  
     procedure Delete_Last (Container : in out Set) is
!       X : constant Count_Type := Container.Content.Last;
     begin
        if X /= 0 then
!          Tree_Operations.Delete_Node_Sans_Free (Container.Content, X);
!          Free (Container, X);
        end if;
     end Delete_Last;
  
*************** is
*** 423,429 ****
  
     procedure Difference (Target : in out Set; Source : Set) is
     begin
!       Set_Ops.Set_Difference (Target, Source);
     end Difference;
  
     function Difference (Left, Right : Set) return Set is
--- 456,462 ----
  
     procedure Difference (Target : in out Set; Source : Set) is
     begin
!       Set_Ops.Set_Difference (Target.Content, Source.Content);
     end Difference;
  
     function Difference (Left, Right : Set) return Set is
*************** is
*** 437,447 ****
        end if;
  
        if Length (Right) = 0 then
!          return Left.Copy;
        end if;
  
        return S : Set (Length (Left)) do
!             Assign (S, Set_Ops.Set_Difference (Left, Right));
        end return;
     end Difference;
  
--- 470,481 ----
        end if;
  
        if Length (Right) = 0 then
!          return Copy (Left);
        end if;
  
        return S : Set (Length (Left)) do
!          Assign
!            (S.Content, Set_Ops.Set_Difference (Left.Content, Right.Content));
        end return;
     end Difference;
  
*************** is
*** 455,464 ****
           raise Constraint_Error with "Position cursor has no element";
        end if;
  
!       pragma Assert (Vet (Container, Position.Node),
                       "bad cursor in Element");
  
!       return Container.Nodes (Position.Node).Element;
     end Element;
  
     -------------------------
--- 489,498 ----
           raise Constraint_Error with "Position cursor has no element";
        end if;
  
!       pragma Assert (Vet (Container.Content, Position.Node),
                       "bad cursor in Element");
  
!       return Container.Content.Nodes (Position.Node).Element;
     end Element;
  
     -------------------------
*************** is
*** 506,512 ****
     --  Start of processing for Equivalent_Sets
  
     begin
!       return Is_Equivalent (Left, Right);
     end Equivalent_Sets;
  
     -------------
--- 540,546 ----
     --  Start of processing for Equivalent_Sets
  
     begin
!       return Is_Equivalent (Left.Content, Right.Content);
     end Equivalent_Sets;
  
     -------------
*************** is
*** 514,524 ****
     -------------
  
     procedure Exclude (Container : in out Set; Item : Element_Type) is
!       X : constant Count_Type := Element_Keys.Find (Container, Item);
     begin
        if X /= 0 then
!          Tree_Operations.Delete_Node_Sans_Free (Container, X);
!          Formal_Ordered_Sets.Free (Container, X);
        end if;
     end Exclude;
  
--- 548,558 ----
     -------------
  
     procedure Exclude (Container : in out Set; Item : Element_Type) is
!       X : constant Count_Type := Element_Keys.Find (Container.Content, Item);
     begin
        if X /= 0 then
!          Tree_Operations.Delete_Node_Sans_Free (Container.Content, X);
!          Free (Container, X);
        end if;
     end Exclude;
  
*************** is
*** 527,533 ****
     ----------
  
     function Find (Container : Set; Item : Element_Type) return Cursor is
!       Node : constant Count_Type := Element_Keys.Find (Container, Item);
  
     begin
        if Node = 0 then
--- 561,568 ----
     ----------
  
     function Find (Container : Set; Item : Element_Type) return Cursor is
!       Node : constant Count_Type :=
!         Element_Keys.Find (Container.Content, Item);
  
     begin
        if Node = 0 then
*************** is
*** 547,553 ****
           return No_Element;
        end if;
  
!       return (Node => Container.First);
     end First;
  
     -------------------
--- 582,588 ----
           return No_Element;
        end if;
  
!       return (Node => Container.Content.First);
     end First;
  
     -------------------
*************** is
*** 562,568 ****
        end if;
  
        declare
!          N : Tree_Types.Nodes_Type renames Container.Nodes;
        begin
           return N (Fst).Element;
        end;
--- 597,603 ----
        end if;
  
        declare
!          N : Tree_Types.Nodes_Type renames Container.Content.Nodes;
        begin
           return N (Fst).Element;
        end;
*************** is
*** 575,581 ****
     function Floor (Container : Set; Item : Element_Type) return Cursor is
     begin
        declare
!          Node : constant Count_Type := Element_Keys.Floor (Container, Item);
  
        begin
           if Node = 0 then
--- 610,617 ----
     function Floor (Container : Set; Item : Element_Type) return Cursor is
     begin
        declare
!          Node : constant Count_Type :=
!            Element_Keys.Floor (Container.Content, Item);
  
        begin
           if Node = 0 then
*************** is
*** 748,754 ****
        --------------
  
        function Elements (Container : Set) return E.Sequence is
!          Position : Count_Type := Container.First;
           R        : E.Sequence;
  
        begin
--- 784,790 ----
        --------------
  
        function Elements (Container : Set) return E.Sequence is
!          Position : Count_Type := Container.Content.First;
           R        : E.Sequence;
  
        begin
*************** is
*** 756,763 ****
           --  for their postconditions.
  
           while Position /= 0 loop
!             R := E.Add (R, Container.Nodes (Position).Element);
!             Position := Tree_Operations.Next (Container, Position);
           end loop;
  
           return R;
--- 792,799 ----
           --  for their postconditions.
  
           while Position /= 0 loop
!             R := E.Add (R, Container.Content.Nodes (Position).Element);
!             Position := Tree_Operations.Next (Container.Content, Position);
           end loop;
  
           return R;
*************** is
*** 873,879 ****
        -----------
  
        function Model (Container : Set) return M.Set is
!          Position : Count_Type := Container.First;
           R        : M.Set;
  
        begin
--- 909,915 ----
        -----------
  
        function Model (Container : Set) return M.Set is
!          Position : Count_Type := Container.Content.First;
           R        : M.Set;
  
        begin
*************** is
*** 884,892 ****
              R :=
                M.Add
                  (Container => R,
!                  Item      => Container.Nodes (Position).Element);
  
!             Position := Tree_Operations.Next (Container, Position);
           end loop;
  
           return R;
--- 920,928 ----
              R :=
                M.Add
                  (Container => R,
!                  Item      => Container.Content.Nodes (Position).Element);
  
!             Position := Tree_Operations.Next (Container.Content, Position);
           end loop;
  
           return R;
*************** is
*** 898,904 ****
  
        function Positions (Container : Set) return P.Map is
           I        : Count_Type := 1;
!          Position : Count_Type := Container.First;
           R        : P.Map;
  
        begin
--- 934,940 ----
  
        function Positions (Container : Set) return P.Map is
           I        : Count_Type := 1;
!          Position : Count_Type := Container.Content.First;
           R        : P.Map;
  
        begin
*************** is
*** 908,914 ****
           while Position /= 0 loop
              R := P.Add (R, (Node => Position), I);
              pragma Assert (P.Length (R) = I);
!             Position := Tree_Operations.Next (Container, Position);
              I := I + 1;
           end loop;
  
--- 944,950 ----
           while Position /= 0 loop
              R := P.Add (R, (Node => Position), I);
              pragma Assert (P.Length (R) = I);
!             Position := Tree_Operations.Next (Container.Content, Position);
              I := I + 1;
           end loop;
  
*************** is
*** 923,930 ****
  
     procedure Free (Tree : in out Set; X : Count_Type) is
     begin
!       Tree.Nodes (X).Has_Element := False;
!       Tree_Operations.Free (Tree, X);
     end Free;
  
     ----------------------
--- 959,966 ----
  
     procedure Free (Tree : in out Set; X : Count_Type) is
     begin
!       Tree.Content.Nodes (X).Has_Element := False;
!       Tree_Operations.Free (Tree.Content, X);
     end Free;
  
     ----------------------
*************** is
*** 978,984 ****
        -------------
  
        function Ceiling (Container : Set; Key : Key_Type) return Cursor is
!          Node : constant Count_Type := Key_Keys.Ceiling (Container, Key);
  
        begin
           if Node = 0 then
--- 1014,1021 ----
        -------------
  
        function Ceiling (Container : Set; Key : Key_Type) return Cursor is
!          Node : constant Count_Type :=
!            Key_Keys.Ceiling (Container.Content, Key);
  
        begin
           if Node = 0 then
*************** is
*** 1002,1016 ****
        ------------
  
        procedure Delete (Container : in out Set; Key : Key_Type) is
!          X : constant Count_Type := Key_Keys.Find (Container, Key);
  
        begin
           if X = 0 then
              raise Constraint_Error with "attempt to delete key not in set";
           end if;
  
!          Delete_Node_Sans_Free (Container, X);
!          Formal_Ordered_Sets.Free (Container, X);
        end Delete;
  
        -------------
--- 1039,1053 ----
        ------------
  
        procedure Delete (Container : in out Set; Key : Key_Type) is
!          X : constant Count_Type := Key_Keys.Find (Container.Content, Key);
  
        begin
           if X = 0 then
              raise Constraint_Error with "attempt to delete key not in set";
           end if;
  
!          Delete_Node_Sans_Free (Container.Content, X);
!          Free (Container, X);
        end Delete;
  
        -------------
*************** is
*** 1018,1024 ****
        -------------
  
        function Element (Container : Set; Key : Key_Type) return Element_Type is
!          Node : constant Count_Type := Key_Keys.Find (Container, Key);
  
        begin
           if Node = 0 then
--- 1055,1061 ----
        -------------
  
        function Element (Container : Set; Key : Key_Type) return Element_Type is
!          Node : constant Count_Type := Key_Keys.Find (Container.Content, Key);
  
        begin
           if Node = 0 then
*************** is
*** 1026,1032 ****
           end if;
  
           declare
!             N : Tree_Types.Nodes_Type renames Container.Nodes;
           begin
              return N (Node).Element;
           end;
--- 1063,1069 ----
           end if;
  
           declare
!             N : Tree_Types.Nodes_Type renames Container.Content.Nodes;
           begin
              return N (Node).Element;
           end;
*************** is
*** 1052,1062 ****
        -------------
  
        procedure Exclude (Container : in out Set; Key : Key_Type) is
!          X : constant Count_Type := Key_Keys.Find (Container, Key);
        begin
           if X /= 0 then
!             Delete_Node_Sans_Free (Container, X);
!             Formal_Ordered_Sets.Free (Container, X);
           end if;
        end Exclude;
  
--- 1089,1099 ----
        -------------
  
        procedure Exclude (Container : in out Set; Key : Key_Type) is
!          X : constant Count_Type := Key_Keys.Find (Container.Content, Key);
        begin
           if X /= 0 then
!             Delete_Node_Sans_Free (Container.Content, X);
!             Free (Container, X);
           end if;
        end Exclude;
  
*************** is
*** 1065,1071 ****
        ----------
  
        function Find (Container : Set; Key : Key_Type) return Cursor is
!          Node : constant Count_Type := Key_Keys.Find (Container, Key);
        begin
           return (if Node = 0 then No_Element else (Node => Node));
        end Find;
--- 1102,1108 ----
        ----------
  
        function Find (Container : Set; Key : Key_Type) return Cursor is
!          Node : constant Count_Type := Key_Keys.Find (Container.Content, Key);
        begin
           return (if Node = 0 then No_Element else (Node => Node));
        end Find;
*************** is
*** 1075,1081 ****
        -----------
  
        function Floor (Container : Set; Key : Key_Type) return Cursor is
!          Node : constant Count_Type := Key_Keys.Floor (Container, Key);
        begin
           return (if Node = 0 then No_Element else (Node => Node));
        end Floor;
--- 1112,1118 ----
        -----------
  
        function Floor (Container : Set; Key : Key_Type) return Cursor is
!          Node : constant Count_Type := Key_Keys.Floor (Container.Content, Key);
        begin
           return (if Node = 0 then No_Element else (Node => Node));
        end Floor;
*************** is
*** 1225,1235 ****
                "Position cursor has no element";
           end if;
  
!          pragma Assert (Vet (Container, Position.Node),
                          "bad cursor in Key");
  
           declare
!             N : Tree_Types.Nodes_Type renames Container.Nodes;
           begin
              return Key (N (Position.Node).Element);
           end;
--- 1262,1272 ----
                "Position cursor has no element";
           end if;
  
!          pragma Assert (Vet (Container.Content, Position.Node),
                          "bad cursor in Key");
  
           declare
!             N : Tree_Types.Nodes_Type renames Container.Content.Nodes;
           begin
              return Key (N (Position.Node).Element);
           end;
*************** is
*** 1244,1250 ****
           Key       : Key_Type;
           New_Item  : Element_Type)
        is
!          Node : constant Count_Type := Key_Keys.Find (Container, Key);
        begin
           if not Has_Element (Container, (Node => Node)) then
              raise Constraint_Error with
--- 1281,1287 ----
           Key       : Key_Type;
           New_Item  : Element_Type)
        is
!          Node : constant Count_Type := Key_Keys.Find (Container.Content, Key);
        begin
           if not Has_Element (Container, (Node => Node)) then
              raise Constraint_Error with
*************** is
*** 1265,1271 ****
        if Position.Node = 0 then
           return False;
        else
!          return Container.Nodes (Position.Node).Has_Element;
        end if;
     end Has_Element;
  
--- 1302,1308 ----
        if Position.Node = 0 then
           return False;
        else
!          return Container.Content.Nodes (Position.Node).Has_Element;
        end if;
     end Has_Element;
  
*************** is
*** 1282,1288 ****
  
        if not Inserted then
           declare
!             N : Tree_Types.Nodes_Type renames Container.Nodes;
           begin
              N (Position.Node).Element := New_Item;
           end;
--- 1319,1325 ----
  
        if not Inserted then
           declare
!             N : Tree_Types.Nodes_Type renames Container.Content.Nodes;
           begin
              N (Position.Node).Element := New_Item;
           end;
*************** is
*** 1300,1306 ****
        Inserted  : out Boolean)
     is
     begin
!       Insert_Sans_Hint (Container, New_Item, Position.Node, Inserted);
     end Insert;
  
     procedure Insert
--- 1337,1343 ----
        Inserted  : out Boolean)
     is
     begin
!       Insert_Sans_Hint (Container.Content, New_Item, Position.Node, Inserted);
     end Insert;
  
     procedure Insert
*************** is
*** 1324,1330 ****
     ----------------------
  
     procedure Insert_Sans_Hint
!      (Container : in out Set;
        New_Item  : Element_Type;
        Node      : out Count_Type;
        Inserted  : out Boolean)
--- 1361,1367 ----
     ----------------------
  
     procedure Insert_Sans_Hint
!      (Container : in out Tree_Types.Tree_Type;
        New_Item  : Element_Type;
        Node      : out Count_Type;
        Inserted  : out Boolean)
*************** is
*** 1377,1389 ****
     ----------------------
  
     procedure Insert_With_Hint
!      (Dst_Set  : in out Set;
        Dst_Hint : Count_Type;
        Src_Node : Node_Type;
        Dst_Node : out Count_Type)
     is
        Success : Boolean;
-       pragma Unreferenced (Success);
  
        procedure Set_Element (Node : in out Node_Type);
  
--- 1414,1425 ----
     ----------------------
  
     procedure Insert_With_Hint
!      (Dst_Set  : in out Tree_Types.Tree_Type;
        Dst_Hint : Count_Type;
        Src_Node : Node_Type;
        Dst_Node : out Count_Type)
     is
        Success : Boolean;
  
        procedure Set_Element (Node : in out Node_Type);
  
*************** is
*** 1439,1455 ****
  
     procedure Intersection (Target : in out Set; Source : Set) is
     begin
!       Set_Ops.Set_Intersection (Target, Source);
     end Intersection;
  
     function Intersection (Left, Right : Set) return Set is
     begin
        if Left'Address = Right'Address then
!          return Left.Copy;
        end if;
  
        return S : Set (Count_Type'Min (Length (Left), Length (Right))) do
!             Assign (S, Set_Ops.Set_Intersection (Left, Right));
        end return;
     end Intersection;
  
--- 1475,1492 ----
  
     procedure Intersection (Target : in out Set; Source : Set) is
     begin
!       Set_Ops.Set_Intersection (Target.Content, Source.Content);
     end Intersection;
  
     function Intersection (Left, Right : Set) return Set is
     begin
        if Left'Address = Right'Address then
!          return Copy (Left);
        end if;
  
        return S : Set (Count_Type'Min (Length (Left), Length (Right))) do
!             Assign (S.Content,
!                     Set_Ops.Set_Intersection (Left.Content, Right.Content));
        end return;
     end Intersection;
  
*************** is
*** 1503,1509 ****
  
     function Is_Subset (Subset : Set; Of_Set : Set) return Boolean is
     begin
!       return Set_Ops.Set_Subset (Subset, Of_Set => Of_Set);
     end Is_Subset;
  
     ----------
--- 1540,1546 ----
  
     function Is_Subset (Subset : Set; Of_Set : Set) return Boolean is
     begin
!       return Set_Ops.Set_Subset (Subset.Content, Of_Set => Of_Set.Content);
     end Is_Subset;
  
     ----------
*************** is
*** 1514,1520 ****
     begin
        return (if Length (Container) = 0
                then No_Element
!               else (Node => Container.Last));
     end Last;
  
     ------------------
--- 1551,1557 ----
     begin
        return (if Length (Container) = 0
                then No_Element
!               else (Node => Container.Content.Last));
     end Last;
  
     ------------------
*************** is
*** 1528,1534 ****
        end if;
  
        declare
!          N : Tree_Types.Nodes_Type renames Container.Nodes;
        begin
           return N (Last (Container).Node).Element;
        end;
--- 1565,1571 ----
        end if;
  
        declare
!          N : Tree_Types.Nodes_Type renames Container.Content.Nodes;
        begin
           return N (Last (Container).Node).Element;
        end;
*************** is
*** 1549,1555 ****
  
     function Length (Container : Set) return Count_Type is
     begin
!       return Container.Length;
     end Length;
  
     ----------
--- 1586,1592 ----
  
     function Length (Container : Set) return Count_Type is
     begin
!       return Container.Content.Length;
     end Length;
  
     ----------
*************** is
*** 1557,1563 ****
     ----------
  
     procedure Move (Target : in out Set; Source : in out Set) is
!       N : Tree_Types.Nodes_Type renames Source.Nodes;
        X : Count_Type;
  
     begin
--- 1594,1600 ----
     ----------
  
     procedure Move (Target : in out Set; Source : in out Set) is
!       N : Tree_Types.Nodes_Type renames Source.Content.Nodes;
        X : Count_Type;
  
     begin
*************** is
*** 1573,1585 ****
        Clear (Target);
  
        loop
!          X := Source.First;
           exit when X = 0;
  
           Insert (Target, N (X).Element);  -- optimize???
  
!          Tree_Operations.Delete_Node_Sans_Free (Source, X);
!          Formal_Ordered_Sets.Free (Source, X);
        end loop;
     end Move;
  
--- 1610,1622 ----
        Clear (Target);
  
        loop
!          X := Source.Content.First;
           exit when X = 0;
  
           Insert (Target, N (X).Element);  -- optimize???
  
!          Tree_Operations.Delete_Node_Sans_Free (Source.Content, X);
!          Free (Source, X);
        end loop;
     end Move;
  
*************** is
*** 1597,1605 ****
           raise Constraint_Error;
        end if;
  
!       pragma Assert (Vet (Container, Position.Node),
                       "bad cursor in Next");
!       return (Node => Tree_Operations.Next (Container, Position.Node));
     end Next;
  
     procedure Next (Container : Set; Position : in out Cursor) is
--- 1634,1642 ----
           raise Constraint_Error;
        end if;
  
!       pragma Assert (Vet (Container.Content, Position.Node),
                       "bad cursor in Next");
!       return (Node => Tree_Operations.Next (Container.Content, Position.Node));
     end Next;
  
     procedure Next (Container : Set; Position : in out Cursor) is
*************** is
*** 1613,1619 ****
  
     function Overlap (Left, Right : Set) return Boolean is
     begin
!       return Set_Ops.Set_Overlap (Left, Right);
     end Overlap;
  
     ------------
--- 1650,1656 ----
  
     function Overlap (Left, Right : Set) return Boolean is
     begin
!       return Set_Ops.Set_Overlap (Left.Content, Right.Content);
     end Overlap;
  
     ------------
*************** is
*** 1639,1650 ****
           raise Constraint_Error;
        end if;
  
!       pragma Assert (Vet (Container, Position.Node),
                       "bad cursor in Previous");
  
        declare
           Node : constant Count_Type :=
!            Tree_Operations.Previous (Container, Position.Node);
        begin
           return (if Node = 0 then No_Element else (Node => Node));
        end;
--- 1676,1687 ----
           raise Constraint_Error;
        end if;
  
!       pragma Assert (Vet (Container.Content, Position.Node),
                       "bad cursor in Previous");
  
        declare
           Node : constant Count_Type :=
!            Tree_Operations.Previous (Container.Content, Position.Node);
        begin
           return (if Node = 0 then No_Element else (Node => Node));
        end;
*************** is
*** 1660,1666 ****
     -------------
  
     procedure Replace (Container : in out Set; New_Item : Element_Type) is
!       Node : constant Count_Type := Element_Keys.Find (Container, New_Item);
  
     begin
        if Node = 0 then
--- 1697,1704 ----
     -------------
  
     procedure Replace (Container : in out Set; New_Item : Element_Type) is
!       Node : constant Count_Type :=
!         Element_Keys.Find (Container.Content, New_Item);
  
     begin
        if Node = 0 then
*************** is
*** 1668,1674 ****
             "attempt to replace element not in set";
        end if;
  
!       Container.Nodes (Node).Element := New_Item;
     end Replace;
  
     ---------------------
--- 1706,1712 ----
             "attempt to replace element not in set";
        end if;
  
!       Container.Content.Nodes (Node).Element := New_Item;
     end Replace;
  
     ---------------------
*************** is
*** 1696,1709 ****
            (Local_Insert_Post,
             Local_Insert_Sans_Hint);
  
!       NN : Tree_Types.Nodes_Type renames Tree.Nodes;
  
        --------------
        -- New_Node --
        --------------
  
        function New_Node return Count_Type is
!          N  : Node_Type renames NN (Node);
        begin
           N.Element := Item;
           N.Color   := Red;
--- 1734,1747 ----
            (Local_Insert_Post,
             Local_Insert_Sans_Hint);
  
!       NN : Tree_Types.Nodes_Type renames Tree.Content.Nodes;
  
        --------------
        -- New_Node --
        --------------
  
        function New_Node return Count_Type is
!          N : Node_Type renames NN (Node);
        begin
           N.Element := Item;
           N.Color   := Red;
*************** is
*** 1730,1736 ****
           return;
        end if;
  
!       Hint := Element_Keys.Ceiling (Tree, Item);
  
        if Hint = 0 then
           null;
--- 1768,1774 ----
           return;
        end if;
  
!       Hint := Element_Keys.Ceiling (Tree.Content, Item);
  
        if Hint = 0 then
           null;
*************** is
*** 1746,1755 ****
           raise Program_Error with "attempt to replace existing element";
        end if;
  
!       Tree_Operations.Delete_Node_Sans_Free (Tree, Node);
  
        Local_Insert_With_Hint
!         (Tree     => Tree,
           Position => Hint,
           Key      => Item,
           Node     => Result,
--- 1784,1793 ----
           raise Program_Error with "attempt to replace existing element";
        end if;
  
!       Tree_Operations.Delete_Node_Sans_Free (Tree.Content, Node);
  
        Local_Insert_With_Hint
!         (Tree     => Tree.Content,
           Position => Hint,
           Key      => Item,
           Node     => Result,
*************** is
*** 1770,1776 ****
             "Position cursor has no element";
        end if;
  
!       pragma Assert (Vet (Container, Position.Node),
                       "bad cursor in Replace_Element");
  
        Replace_Element (Container, Position.Node, New_Item);
--- 1808,1814 ----
             "Position cursor has no element";
        end if;
  
!       pragma Assert (Vet (Container.Content, Position.Node),
                       "bad cursor in Replace_Element");
  
        Replace_Element (Container, Position.Node, New_Item);
*************** is
*** 1830,1836 ****
  
     procedure Symmetric_Difference (Target : in out Set; Source : Set) is
     begin
!       Set_Ops.Set_Symmetric_Difference (Target, Source);
     end Symmetric_Difference;
  
     function Symmetric_Difference (Left, Right : Set) return Set is
--- 1868,1874 ----
  
     procedure Symmetric_Difference (Target : in out Set; Source : Set) is
     begin
!       Set_Ops.Set_Symmetric_Difference (Target.Content, Source.Content);
     end Symmetric_Difference;
  
     function Symmetric_Difference (Left, Right : Set) return Set is
*************** is
*** 1840,1854 ****
        end if;
  
        if Length (Right) = 0 then
!          return Left.Copy;
        end if;
  
        if Length (Left) = 0 then
!          return Right.Copy;
        end if;
  
        return S : Set (Length (Left) + Length (Right)) do
!          Assign (S, Set_Ops.Set_Symmetric_Difference (Left, Right));
        end return;
     end Symmetric_Difference;
  
--- 1878,1894 ----
        end if;
  
        if Length (Right) = 0 then
!          return Copy (Left);
        end if;
  
        if Length (Left) = 0 then
!          return Copy (Right);
        end if;
  
        return S : Set (Length (Left) + Length (Right)) do
!          Assign
!            (S.Content,
!             Set_Ops.Set_Symmetric_Difference (Left.Content, Right.Content));
        end return;
     end Symmetric_Difference;
  
*************** is
*** 1859,1867 ****
     function To_Set (New_Item : Element_Type) return Set is
        Node     : Count_Type;
        Inserted : Boolean;
     begin
        return S : Set (Capacity => 1) do
!          Insert_Sans_Hint (S, New_Item, Node, Inserted);
           pragma Assert (Inserted);
        end return;
     end To_Set;
--- 1899,1908 ----
     function To_Set (New_Item : Element_Type) return Set is
        Node     : Count_Type;
        Inserted : Boolean;
+ 
     begin
        return S : Set (Capacity => 1) do
!          Insert_Sans_Hint (S.Content, New_Item, Node, Inserted);
           pragma Assert (Inserted);
        end return;
     end To_Set;
*************** is
*** 1872,1892 ****
  
     procedure Union (Target : in out Set; Source : Set) is
     begin
!       Set_Ops.Set_Union (Target, Source);
     end Union;
  
     function Union (Left, Right : Set) return Set is
     begin
        if Left'Address = Right'Address then
!          return Left.Copy;
        end if;
  
        if Length (Left) = 0 then
!          return Right.Copy;
        end if;
  
        if Length (Right) = 0 then
!          return Left.Copy;
        end if;
  
        return S : Set (Length (Left) + Length (Right)) do
--- 1913,1933 ----
  
     procedure Union (Target : in out Set; Source : Set) is
     begin
!       Set_Ops.Set_Union (Target.Content, Source.Content);
     end Union;
  
     function Union (Left, Right : Set) return Set is
     begin
        if Left'Address = Right'Address then
!          return Copy (Left);
        end if;
  
        if Length (Left) = 0 then
!          return Copy (Right);
        end if;
  
        if Length (Right) = 0 then
!          return Copy (Left);
        end if;
  
        return S : Set (Length (Left) + Length (Right)) do
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cforse.ads gcc-12.1.0/gcc/ada/libgnat/a-cforse.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cforse.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cforse.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** generic
*** 59,64 ****
--- 59,70 ----
  package Ada.Containers.Formal_Ordered_Sets with
    SPARK_Mode
  is
+    --  Contracts in this unit are meant for analysis only, not for run-time
+    --  checking.
+ 
+    pragma Assertion_Policy (Pre => Ignore);
+    pragma Assertion_Policy (Post => Ignore);
+    pragma Assertion_Policy (Contract_Cases => Ignore);
     pragma Annotate (CodePeer, Skip_Analysis);
  
     function Equivalent_Elements (Left, Right : Element_Type) return Boolean
*************** is
*** 524,529 ****
--- 530,545 ----
                   Position => Position)
            and Positions (Container) = Positions (Container)'Old;
  
+    function Constant_Reference
+      (Container : aliased Set;
+       Position  : Cursor) return not null access constant Element_Type
+    with
+      Global => null,
+      Pre    => Has_Element (Container, Position),
+      Post   =>
+        Constant_Reference'Result.all =
+          E.Get (Elements (Container), P.Get (Positions (Container), Position));
+ 
     procedure Move (Target : in out Set; Source : in out Set) with
       Global => null,
       Pre    => Target.Capacity >= Length (Source),
*************** private
*** 1765,1782 ****
  
     type Node_Type is record
        Has_Element : Boolean := False;
!       Parent  : Count_Type := 0;
!       Left    : Count_Type := 0;
!       Right   : Count_Type := 0;
!       Color   : Red_Black_Trees.Color_Type;
!       Element : Element_Type;
     end record;
  
     package Tree_Types is
       new Red_Black_Trees.Generic_Bounded_Tree_Types (Node_Type);
  
!    type Set (Capacity : Count_Type) is
!      new Tree_Types.Tree_Type (Capacity) with null record;
  
     use Red_Black_Trees;
  
--- 1781,1799 ----
  
     type Node_Type is record
        Has_Element : Boolean := False;
!       Parent      : Count_Type := 0;
!       Left        : Count_Type := 0;
!       Right       : Count_Type := 0;
!       Color       : Red_Black_Trees.Color_Type;
!       Element     : aliased Element_Type;
     end record;
  
     package Tree_Types is
       new Red_Black_Trees.Generic_Bounded_Tree_Types (Node_Type);
  
!    type Set (Capacity : Count_Type) is record
!      Content : Tree_Types.Tree_Type (Capacity);
!    end record;
  
     use Red_Black_Trees;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cgaaso.adb gcc-12.1.0/gcc/ada/libgnat/a-cgaaso.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cgaaso.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cgaaso.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cgaaso.ads gcc-12.1.0/gcc/ada/libgnat/a-cgaaso.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cgaaso.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cgaaso.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cgarso.adb gcc-12.1.0/gcc/ada/libgnat/a-cgarso.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cgarso.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cgarso.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cgcaso.adb gcc-12.1.0/gcc/ada/libgnat/a-cgcaso.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cgcaso.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cgcaso.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chacon.adb gcc-12.1.0/gcc/ada/libgnat/a-chacon.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-chacon.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chacon.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chacon.ads gcc-12.1.0/gcc/ada/libgnat/a-chacon.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-chacon.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chacon.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chahan.adb gcc-12.1.0/gcc/ada/libgnat/a-chahan.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-chahan.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chahan.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,39 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  with Ada.Characters.Latin_1;     use Ada.Characters.Latin_1;
  with Ada.Strings.Maps;           use Ada.Strings.Maps;
  with Ada.Strings.Maps.Constants; use Ada.Strings.Maps.Constants;
  
! package body Ada.Characters.Handling is
  
     ------------------------------------
     -- Character Classification Table --
--- 29,47 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ --  Loop invariants in this unit are meant for analysis only, not for run-time
+ --  checking, as it would be too costly otherwise. This is enforced by setting
+ --  the assertion policy to Ignore.
+ 
+ pragma Assertion_Policy (Loop_Invariant => Ignore);
+ 
  with Ada.Characters.Latin_1;     use Ada.Characters.Latin_1;
  with Ada.Strings.Maps;           use Ada.Strings.Maps;
  with Ada.Strings.Maps.Constants; use Ada.Strings.Maps.Constants;
  
! package body Ada.Characters.Handling
!   with SPARK_Mode
! is
  
     ------------------------------------
     -- Character Classification Table --
*************** package body Ada.Characters.Handling is
*** 56,62 ****
     Graphic    : constant Character_Flags := Alphanum or Special;
  
     Char_Map : constant array (Character) of Character_Flags :=
!    (
       NUL                         => Control,
       SOH                         => Control,
       STX                         => Control,
--- 64,70 ----
     Graphic    : constant Character_Flags := Alphanum or Special;
  
     Char_Map : constant array (Character) of Character_Flags :=
!    [
       NUL                         => Control,
       SOH                         => Control,
       STX                         => Control,
*************** package body Ada.Characters.Handling is
*** 274,280 ****
       LC_Y_Acute                  => Lower,
       LC_Icelandic_Thorn          => Lower + Basic,
       LC_Y_Diaeresis              => Lower
!    );
  
     ---------------------
     -- Is_Alphanumeric --
--- 282,288 ----
       LC_Y_Acute                  => Lower,
       LC_Icelandic_Thorn          => Lower + Basic,
       LC_Y_Diaeresis              => Lower
!    ];
  
     ---------------------
     -- Is_Alphanumeric --
*************** package body Ada.Characters.Handling is
*** 299,307 ****
     ------------------
  
     function Is_Character (Item : Wide_Character) return Boolean is
!    begin
!       return Wide_Character'Pos (Item) < 256;
!    end Is_Character;
  
     ----------------
     -- Is_Control --
--- 307,313 ----
     ------------------
  
     function Is_Character (Item : Wide_Character) return Boolean is
!      (Wide_Character'Pos (Item) < 256);
  
     ----------------
     -- Is_Control --
*************** package body Ada.Characters.Handling is
*** 344,352 ****
     ----------------
  
     function Is_ISO_646 (Item : Character) return Boolean is
!    begin
!       return Item in ISO_646;
!    end Is_ISO_646;
  
     --  Note: much more efficient coding of the following function is possible
     --  by testing several 16#80# bits in a complete word in a single operation
--- 350,356 ----
     ----------------
  
     function Is_ISO_646 (Item : Character) return Boolean is
!      (Item in ISO_646);
  
     --  Note: much more efficient coding of the following function is possible
     --  by testing several 16#80# bits in a complete word in a single operation
*************** package body Ada.Characters.Handling is
*** 357,362 ****
--- 361,368 ----
           if Item (J) not in ISO_646 then
              return False;
           end if;
+          pragma Loop_Invariant
+            (for all K in Item'First .. J => Is_ISO_646 (Item (K)));
        end loop;
  
        return True;
*************** package body Ada.Characters.Handling is
*** 456,461 ****
--- 462,469 ----
           if Wide_Character'Pos (Item (J)) >= 256 then
              return False;
           end if;
+          pragma Loop_Invariant
+            (for all K in Item'First .. J => Is_Character (Item (K)));
        end loop;
  
        return True;
*************** package body Ada.Characters.Handling is
*** 475,489 ****
     --------------
  
     function To_Basic (Item : Character) return Character is
!    begin
!       return Value (Basic_Map, Item);
!    end To_Basic;
  
     function To_Basic (Item : String) return String is
     begin
!       return Result : String (1 .. Item'Length) do
           for J in Item'Range loop
              Result (J - (Item'First - 1)) := Value (Basic_Map, Item (J));
           end loop;
        end return;
     end To_Basic;
--- 483,500 ----
     --------------
  
     function To_Basic (Item : Character) return Character is
!       (Value (Basic_Map, Item));
  
     function To_Basic (Item : String) return String is
     begin
!       return Result : String (1 .. Item'Length) with Relaxed_Initialization do
           for J in Item'Range loop
              Result (J - (Item'First - 1)) := Value (Basic_Map, Item (J));
+             pragma Loop_Invariant
+               (Result (1 .. J - Item'First + 1)'Initialized);
+             pragma Loop_Invariant
+               (for all K in Item'First .. J =>
+                  Result (K - (Item'First - 1)) = To_Basic (Item (K)));
           end loop;
        end return;
     end To_Basic;
*************** package body Ada.Characters.Handling is
*** 511,534 ****
     function To_ISO_646
       (Item       : Character;
        Substitute : ISO_646 := ' ') return ISO_646
!    is
!    begin
!       return (if Item in ISO_646 then Item else Substitute);
!    end To_ISO_646;
  
     function To_ISO_646
       (Item       : String;
        Substitute : ISO_646 := ' ') return String
     is
-       Result : String (1 .. Item'Length);
- 
     begin
!       for J in Item'Range loop
!          Result (J - (Item'First - 1)) :=
!            (if Item (J) in ISO_646 then Item (J) else Substitute);
!       end loop;
! 
!       return Result;
     end To_ISO_646;
  
     --------------
--- 522,546 ----
     function To_ISO_646
       (Item       : Character;
        Substitute : ISO_646 := ' ') return ISO_646
!    is (if Item in ISO_646 then Item else Substitute);
  
     function To_ISO_646
       (Item       : String;
        Substitute : ISO_646 := ' ') return String
     is
     begin
!       return Result : String (1 .. Item'Length) with Relaxed_Initialization do
!          for J in Item'Range loop
!             Result (J - (Item'First - 1)) :=
!               (if Item (J) in ISO_646 then Item (J) else Substitute);
!             pragma Loop_Invariant
!               (Result (1 .. J - Item'First + 1)'Initialized);
!             pragma Loop_Invariant
!               (for all K in Item'First .. J =>
!                  Result (K - (Item'First - 1)) =
!                    To_ISO_646 (Item (K), Substitute));
!          end loop;
!       end return;
     end To_ISO_646;
  
     --------------
*************** package body Ada.Characters.Handling is
*** 536,550 ****
     --------------
  
     function To_Lower (Item : Character) return Character is
!    begin
!       return Value (Lower_Case_Map, Item);
!    end To_Lower;
  
     function To_Lower (Item : String) return String is
     begin
!       return Result : String (1 .. Item'Length) do
           for J in Item'Range loop
              Result (J - (Item'First - 1)) := Value (Lower_Case_Map, Item (J));
           end loop;
        end return;
     end To_Lower;
--- 548,565 ----
     --------------
  
     function To_Lower (Item : Character) return Character is
!      (Value (Lower_Case_Map, Item));
  
     function To_Lower (Item : String) return String is
     begin
!       return Result : String (1 .. Item'Length) with Relaxed_Initialization do
           for J in Item'Range loop
              Result (J - (Item'First - 1)) := Value (Lower_Case_Map, Item (J));
+             pragma Loop_Invariant
+               (Result (1 .. J - Item'First + 1)'Initialized);
+             pragma Loop_Invariant
+               (for all K in Item'First .. J =>
+                  Result (K - (Item'First - 1)) = To_Lower (Item (K)));
           end loop;
        end return;
     end To_Lower;
*************** package body Ada.Characters.Handling is
*** 557,590 ****
       (Item       : Wide_String;
        Substitute : Character := ' ') return String
     is
-       Result : String (1 .. Item'Length);
- 
     begin
!       for J in Item'Range loop
!          Result (J - (Item'First - 1)) := To_Character (Item (J), Substitute);
!       end loop;
! 
!       return Result;
     end To_String;
  
     --------------
     -- To_Upper --
     --------------
  
!    function To_Upper
!      (Item : Character) return Character
!    is
!    begin
!       return Value (Upper_Case_Map, Item);
!    end To_Upper;
  
     function To_Upper
       (Item : String) return String
     is
     begin
!       return Result : String (1 .. Item'Length) do
           for J in Item'Range loop
              Result (J - (Item'First - 1)) := Value (Upper_Case_Map, Item (J));
           end loop;
        end return;
     end To_Upper;
--- 572,611 ----
       (Item       : Wide_String;
        Substitute : Character := ' ') return String
     is
     begin
!       return Result : String (1 .. Item'Length) with Relaxed_Initialization do
!          for J in Item'Range loop
!             Result (J - (Item'First - 1)) :=
!               To_Character (Item (J), Substitute);
!             pragma Loop_Invariant
!               (Result (1 .. J - (Item'First - 1))'Initialized);
!             pragma Loop_Invariant
!               (for all K in Item'First .. J =>
!                  Result (K - (Item'First - 1)) =
!                    To_Character (Item (K), Substitute));
!          end loop;
!       end return;
     end To_String;
  
     --------------
     -- To_Upper --
     --------------
  
!    function To_Upper (Item : Character) return Character is
!      (Value (Upper_Case_Map, Item));
  
     function To_Upper
       (Item : String) return String
     is
     begin
!       return Result : String (1 .. Item'Length) with Relaxed_Initialization do
           for J in Item'Range loop
              Result (J - (Item'First - 1)) := Value (Upper_Case_Map, Item (J));
+             pragma Loop_Invariant
+               (Result (1 .. J - Item'First + 1)'Initialized);
+             pragma Loop_Invariant
+               (for all K in Item'First .. J =>
+                  Result (K - (Item'First - 1)) = To_Upper (Item (K)));
           end loop;
        end return;
     end To_Upper;
*************** package body Ada.Characters.Handling is
*** 607,620 ****
     function To_Wide_String
       (Item : String) return Wide_String
     is
-       Result : Wide_String (1 .. Item'Length);
- 
     begin
!       for J in Item'Range loop
!          Result (J - (Item'First - 1)) := To_Wide_Character (Item (J));
!       end loop;
! 
!       return Result;
     end To_Wide_String;
  
  end Ada.Characters.Handling;
--- 628,646 ----
     function To_Wide_String
       (Item : String) return Wide_String
     is
     begin
!       return Result : Wide_String (1 .. Item'Length)
!         with Relaxed_Initialization
!       do
!          for J in Item'Range loop
!             Result (J - (Item'First - 1)) := To_Wide_Character (Item (J));
!             pragma Loop_Invariant
!               (Result (1 .. J - (Item'First - 1))'Initialized);
!             pragma Loop_Invariant
!               (for all K in Item'First .. J =>
!                  Result (K - (Item'First - 1)) = To_Wide_Character (Item (K)));
!          end loop;
!       end return;
     end To_Wide_String;
  
  end Ada.Characters.Handling;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chahan.ads gcc-12.1.0/gcc/ada/libgnat/a-chahan.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-chahan.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chahan.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
***************
*** 33,39 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! package Ada.Characters.Handling is
     pragma Pure;
     --  In accordance with Ada 2005 AI-362
  
--- 33,48 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Postconditions in this unit are meant for analysis only, not for run-time
! --  checking, in order not to slow down the execution of these functions.
! 
! pragma Assertion_Policy (Post => Ignore);
! 
! with Ada.Characters.Latin_1;
! 
! package Ada.Characters.Handling
!   with SPARK_Mode
! is
     pragma Pure;
     --  In accordance with Ada 2005 AI-362
  
*************** package Ada.Characters.Handling is
*** 41,94 ****
     -- Character Classification Functions --
     ----------------------------------------
  
!    function Is_Control               (Item : Character) return Boolean;
!    function Is_Graphic               (Item : Character) return Boolean;
!    function Is_Letter                (Item : Character) return Boolean;
!    function Is_Lower                 (Item : Character) return Boolean;
!    function Is_Upper                 (Item : Character) return Boolean;
!    function Is_Basic                 (Item : Character) return Boolean;
!    function Is_Digit                 (Item : Character) return Boolean;
     function Is_Decimal_Digit         (Item : Character) return Boolean
       renames Is_Digit;
!    function Is_Hexadecimal_Digit     (Item : Character) return Boolean;
!    function Is_Alphanumeric          (Item : Character) return Boolean;
!    function Is_Special               (Item : Character) return Boolean;
!    function Is_Line_Terminator       (Item : Character) return Boolean;
!    function Is_Mark                  (Item : Character) return Boolean;
!    function Is_Other_Format          (Item : Character) return Boolean;
!    function Is_Punctuation_Connector (Item : Character) return Boolean;
!    function Is_Space                 (Item : Character) return Boolean;
!    function Is_NFKC                  (Item : Character) return Boolean;
  
     ---------------------------------------------------
     -- Conversion Functions for Character and String --
     ---------------------------------------------------
  
!    function To_Lower (Item : Character) return Character;
!    function To_Upper (Item : Character) return Character;
!    function To_Basic (Item : Character) return Character;
  
!    function To_Lower (Item : String) return String;
!    function To_Upper (Item : String) return String;
!    function To_Basic (Item : String) return String;
  
     ----------------------------------------------------------------------
     -- Classifications of and Conversions Between Character and ISO 646 --
     ----------------------------------------------------------------------
  
     subtype ISO_646 is
       Character range Character'Val (0) .. Character'Val (127);
  
!    function Is_ISO_646 (Item : Character) return Boolean;
!    function Is_ISO_646 (Item : String)    return Boolean;
  
     function To_ISO_646
       (Item       : Character;
!       Substitute : ISO_646 := ' ') return ISO_646;
  
     function To_ISO_646
       (Item       : String;
!       Substitute : ISO_646 := ' ') return String;
  
     ------------------------------------------------------
     -- Classifications of Wide_Character and Characters --
--- 50,345 ----
     -- Character Classification Functions --
     ----------------------------------------
  
!    --  In the description below for each function that returns a Boolean
!    --  result, the effect is described in terms of the conditions under which
!    --  the value True is returned. If these conditions are not met, then the
!    --  function returns False.
!    --
!    --  Each of the following classification functions has a formal Character
!    --  parameter, Item, and returns a Boolean result.
! 
!    function Is_Control               (Item : Character) return Boolean
!    with
!      Post => Is_Control'Result =
!        (Character'Pos (Item) in 0 .. 31 | 127 .. 159);
!    --  True if Item is a control character. A control character is a character
!    --  whose position is in one of the ranges 0..31 or 127..159.
! 
!    function Is_Graphic               (Item : Character) return Boolean
!    with
!      Post => Is_Graphic'Result =
!        (Character'Pos (Item) in 32 .. 126 | 160 .. 255);
!    --  True if Item is a graphic character. A graphic character is a character
!    --  whose position is in one of the ranges 32..126 or 160..255.
! 
!    function Is_Letter                (Item : Character) return Boolean
!    with
!      Post => Is_Letter'Result =
!        (Item in 'A' .. 'Z' | 'a' .. 'z'
!          or else Character'Pos (Item) in 192 .. 214 | 216 .. 246 | 248 .. 255);
!    --  True if Item is a letter. A letter is a character that is in one of the
!    --  ranges 'A'..'Z' or 'a'..'z', or whose position is in one of the ranges
!    --  192..214, 216..246, or 248..255.
! 
!    function Is_Lower                 (Item : Character) return Boolean
!    with
!      Post => Is_Lower'Result =
!        (Item in 'a' .. 'z'
!          or else Character'Pos (Item) in 223 .. 246 | 248 .. 255);
!    --  True if Item is a lower-case letter. A lower-case letter is a character
!    --  that is in the range 'a'..'z', or whose position is in one of the ranges
!    --  223..246 or 248..255.
! 
!    function Is_Upper                 (Item : Character) return Boolean
!    with
!      Post => Is_Upper'Result =
!        (Item in 'A' .. 'Z'
!          or else Character'Pos (Item) in 192 .. 214 | 216 .. 222);
!    --  True if Item is an upper-case letter. An upper-case letter is a
!    --  character that is in the range 'A'..'Z' or whose position is in one
!    --  of the ranges 192..214 or 216..222.
! 
!    function Is_Basic                 (Item : Character) return Boolean
!    with
!      Post => Is_Basic'Result =
!        (Item in 'A' .. 'Z'
!           | 'a' .. 'z'
!           | Latin_1.UC_AE_Diphthong
!           | Latin_1.LC_AE_Diphthong
!           | Latin_1.UC_Icelandic_Eth
!           | Latin_1.LC_Icelandic_Eth
!           | Latin_1.UC_Icelandic_Thorn
!           | Latin_1.LC_Icelandic_Thorn
!           | Latin_1.LC_German_Sharp_S);
!    --  True if Item is a basic letter. A basic letter is a character that
!    --  is in one of the ranges 'A'..'Z' and 'a'..'z', or that is one of
!    --  the following: UC_AE_Diphthong, LC_AE_Diphthong, UC_Icelandic_Eth,
!    --  LC_Icelandic_Eth, UC_Icelandic_Thorn, LC_Icelandic_Thorn, or
!    --  LC_German_Sharp_S.
! 
!    function Is_Digit                 (Item : Character) return Boolean
!    with
!      Post => Is_Digit'Result = (Item in '0' .. '9');
!    --  True if Item is a decimal digit. A decimal digit is a character in the
!    --  range '0'..'9'.
! 
     function Is_Decimal_Digit         (Item : Character) return Boolean
       renames Is_Digit;
! 
!    function Is_Hexadecimal_Digit     (Item : Character) return Boolean
!    with
!      Post => Is_Hexadecimal_Digit'Result =
!        (Is_Decimal_Digit (Item) or Item in 'A' .. 'F' | 'a' .. 'f');
!    --  True if Item is a hexadecimal digit. A hexadecimal digit is a character
!    --  that is either a decimal digit or that is in one of the ranges 'A'..'F'
!    --  or 'a'..'f'.
! 
!    function Is_Alphanumeric          (Item : Character) return Boolean
!    with
!      Post => Is_Alphanumeric'Result =
!        (Is_Letter (Item) or Is_Decimal_Digit (Item));
!    --  True if Item is an alphanumeric character. An alphanumeric character is
!    --  a character that is either a letter or a decimal digit.
! 
!    function Is_Special               (Item : Character) return Boolean
!    with
!      Post => Is_Special'Result =
!        (Is_Graphic (Item) and not Is_Alphanumeric (Item));
!    --  True if Item is a special graphic character. A special graphic character
!    --  is a graphic character that is not alphanumeric.
! 
!    function Is_Line_Terminator       (Item : Character) return Boolean
!    with
!      Post => Is_Line_Terminator'Result =
!        (Character'Pos (Item) in 10 .. 13 | 133);
!    --  True if Item is a character with position 10..13 (Line_Feed,
!    --  Line_Tabulation, Form_Feed, Carriage_Return) or 133 (Next_Line).
! 
!    function Is_Mark                  (Item : Character) return Boolean
!    with
!      Post => Is_Mark'Result = False;
!    --  Never True (no value of type Character has categories Mark, Non-Spacing
!    --  or Mark, Spacing Combining).
! 
!    function Is_Other_Format          (Item : Character) return Boolean
!    with
!      Post => Is_Other_Format'Result = (Character'Pos (Item) = 173);
!    --  True if Item is a character with position 173 (Soft_Hyphen).
! 
!    function Is_Punctuation_Connector (Item : Character) return Boolean
!    with
!      Post => Is_Punctuation_Connector'Result =
!        (Character'Pos (Item) = 95);
!    --  True if Item is a character with position 95 ('_', known as Low_Line or
!    --  Underscore).
! 
!    function Is_Space                 (Item : Character) return Boolean
!    with
!      Post => Is_Space'Result = (Character'Pos (Item) in 32 | 160);
!    --  True if Item is a character with position 32 (' ') or 160
!    --  (No_Break_Space).
! 
!    function Is_NFKC                  (Item : Character) return Boolean
!    with
!      Post => Is_NFKC'Result =
!        (Character'Pos (Item) not in
!             160 | 168 | 170 | 175 | 178 | 179 | 180
!           | 181 | 184 | 185 | 186 | 188 | 189 | 190);
!    --  True if Item could be present in a string normalized to Normalization
!    --  Form KC (as defined by Clause 21 of ISO/IEC 10646:2017); this includes
!    --  all characters except those with positions 160, 168, 170, 175, 178, 179,
!    --  180, 181, 184, 185, 186, 188, 189, and 190.
  
     ---------------------------------------------------
     -- Conversion Functions for Character and String --
     ---------------------------------------------------
  
!    --  Each of the names To_Lower, To_Upper, and To_Basic refers to two
!    --  functions: one that converts from Character to Character, and
!    --  the other that converts from String to String. The result of each
!    --  Character-to-Character function is described below, in terms of
!    --  the conversion applied to Item, its formal Character parameter. The
!    --  result of each String-to-String conversion is obtained by applying
!    --  to each element of the function's String parameter the corresponding
!    --  Character-to-Character conversion; the result is the null String if the
!    --  value of the formal parameter is the null String. The lower bound of the
!    --  result String is 1.
  
!    function To_Lower (Item : Character) return Character
!    with
!      Post => To_Lower'Result =
!        (if Is_Upper (Item) then
!           Character'Val (Character'Pos (Item) +
!             (if Item in 'A' .. 'Z' then
!                Character'Pos ('a') - Character'Pos ('A')
!              else
!                Character'Pos (Latin_1.LC_A_Grave)
!                  - Character'Pos (Latin_1.UC_A_Grave)))
!         else
!           Item);
!    --  Returns the corresponding lower-case value for Item if Is_Upper(Item),
!    --  and returns Item otherwise.
! 
!    function To_Upper (Item : Character) return Character
!    with
!      Post => To_Upper'Result =
!        (if Is_Lower (Item)
!           and then Item not in Latin_1.LC_German_Sharp_S
!                              | Latin_1.LC_Y_Diaeresis
!         then
!           Character'Val (Character'Pos (Item) +
!             (if Item in 'A' .. 'Z' then
!                Character'Pos ('A') - Character'Pos ('a')
!              else
!                Character'Pos (Latin_1.UC_A_Grave)
!                  - Character'Pos (Latin_1.LC_A_Grave)))
!         else
!           Item);
!    --  Returns the corresponding upper-case value for Item if Is_Lower(Item)
!    --  and Item has an upper-case form, and returns Item otherwise. The lower
!    --  case letters LC_German_Sharp_S and LC_Y_Diaeresis do not have upper case
!    --  forms.
! 
!    function To_Basic (Item : Character) return Character
!    with
!      Post => To_Basic'Result =
!        (if not Is_Letter (Item) or else Is_Basic (Item) then
!           Item
!         else
!           (case Item is
!              when Latin_1.UC_A_Grave .. Latin_1.UC_A_Ring      => 'A',
!              when Latin_1.UC_C_Cedilla                         => 'C',
!              when Latin_1.UC_E_Grave .. Latin_1.UC_E_Diaeresis => 'E',
!              when Latin_1.UC_I_Grave .. Latin_1.UC_I_Diaeresis => 'I',
!              when Latin_1.UC_N_Tilde                           => 'N',
!              when Latin_1.UC_O_Grave .. Latin_1.UC_O_Diaeresis => 'O',
!              when Latin_1.UC_O_Oblique_Stroke                  => 'O',
!              when Latin_1.UC_U_Grave .. Latin_1.UC_U_Diaeresis => 'U',
!              when Latin_1.UC_Y_Acute                           => 'Y',
!              when Latin_1.LC_A_Grave .. Latin_1.LC_A_Ring      => 'a',
!              when Latin_1.LC_C_Cedilla                         => 'c',
!              when Latin_1.LC_E_Grave .. Latin_1.LC_E_Diaeresis => 'e',
!              when Latin_1.LC_I_Grave .. Latin_1.LC_I_Diaeresis => 'i',
!              when Latin_1.LC_N_Tilde                           => 'n',
!              when Latin_1.LC_O_Grave .. Latin_1.LC_O_Diaeresis => 'o',
!              when Latin_1.LC_O_Oblique_Stroke                  => 'o',
!              when Latin_1.LC_U_Grave .. Latin_1.LC_U_Diaeresis => 'u',
!              when Latin_1.LC_Y_Acute                           => 'y',
!              when Latin_1.LC_Y_Diaeresis                       => 'y',
!              when others => raise Program_Error));
!    --  Returns the letter corresponding to Item but with no diacritical mark,
!    --  if Item is a letter but not a basic letter; returns Item otherwise.
! 
!    function To_Lower (Item : String) return String
!    with
!      Post => To_Lower'Result'First = 1
!        and then To_Lower'Result'Length = Item'Length
!        and then
!          (for all J in To_Lower'Result'Range =>
!             To_Lower'Result (J) = To_Lower (Item (Item'First + (J - 1))));
! 
!    function To_Upper (Item : String) return String
!    with
!      Post => To_Upper'Result'First = 1
!        and then To_Upper'Result'Length = Item'Length
!        and then
!          (for all J in To_Upper'Result'Range =>
!             To_Upper'Result (J) = To_Upper (Item (Item'First + (J - 1))));
! 
!    function To_Basic (Item : String) return String
!    with
!      Post => To_Basic'Result'First = 1
!        and then To_Basic'Result'Length = Item'Length
!        and then
!          (for all J in To_Basic'Result'Range =>
!             To_Basic'Result (J) = To_Basic (Item (Item'First + (J - 1))));
  
     ----------------------------------------------------------------------
     -- Classifications of and Conversions Between Character and ISO 646 --
     ----------------------------------------------------------------------
  
+    --  The following set of functions test for membership in the ISO 646
+    --  character range, or convert between ISO 646 and Character.
+ 
     subtype ISO_646 is
       Character range Character'Val (0) .. Character'Val (127);
  
!    function Is_ISO_646 (Item : Character) return Boolean
!    with
!      Post => Is_ISO_646'Result = (Item in ISO_646);
!    --  The function whose formal parameter, Item, is of type Character returns
!    --  True if Item is in the subtype ISO_646.
! 
!    function Is_ISO_646 (Item : String)    return Boolean
!    with
!      Post => Is_ISO_646'Result =
!        (for all J in Item'Range => Is_ISO_646 (Item (J)));
!    --  The function whose formal parameter, Item, is of type String returns
!    --  True if Is_ISO_646(Item(I)) is True for each I in Item'Range.
  
     function To_ISO_646
       (Item       : Character;
!       Substitute : ISO_646 := ' ') return ISO_646
!    with
!      Post => To_ISO_646'Result =
!        (if Is_ISO_646 (Item) then Item else Substitute);
!    --  The function whose first formal parameter, Item, is of type Character
!    --  returns Item if Is_ISO_646(Item), and returns the Substitute ISO_646
!    --  character otherwise.
  
     function To_ISO_646
       (Item       : String;
!       Substitute : ISO_646 := ' ') return String
!    with
!      Post => To_ISO_646'Result'First = 1
!        and then To_ISO_646'Result'Length = Item'Length
!        and then
!          (for all J in To_ISO_646'Result'Range =>
!             To_ISO_646'Result (J) =
!               To_ISO_646 (Item (Item'First + (J - 1)), Substitute));
!    --  The function whose first formal parameter, Item, is of type String
!    --  returns the String whose Range is 1..Item'Length and each of whose
!    --  elements is given by To_ISO_646 of the corresponding element in Item.
  
     ------------------------------------------------------
     -- Classifications of Wide_Character and Characters --
*************** package Ada.Characters.Handling is
*** 103,110 ****
     --  We do however have to flag these if the pragma No_Obsolescent_Features
     --  restriction is active (see Restrict.Check_Obsolescent_2005_Entity).
  
!    function Is_Character (Item : Wide_Character) return Boolean;
!    function Is_String    (Item : Wide_String)    return Boolean;
  
     ------------------------------------------------------
     -- Conversions between Wide_Character and Character --
--- 354,371 ----
     --  We do however have to flag these if the pragma No_Obsolescent_Features
     --  restriction is active (see Restrict.Check_Obsolescent_2005_Entity).
  
!    function Is_Character (Item : Wide_Character) return Boolean
!    with
!      Post => Is_Character'Result =
!        (Wide_Character'Pos (Item) <= Character'Pos (Character'Last));
!    --  Returns True if Wide_Character'Pos(Item) <=
!    --  Character'Pos(Character'Last).
! 
!    function Is_String    (Item : Wide_String)    return Boolean
!    with
!      Post => Is_String'Result =
!        (for all I in Item'Range => Is_Character (Item (I)));
!    --  Returns True if Is_Character(Item(I)) is True for each I in Item'Range.
  
     ------------------------------------------------------
     -- Conversions between Wide_Character and Character --
*************** package Ada.Characters.Handling is
*** 121,137 ****
  
     function To_Character
       (Item       : Wide_Character;
!       Substitute : Character := ' ') return Character;
  
     function To_String
       (Item       : Wide_String;
!       Substitute : Character := ' ') return String;
  
     function To_Wide_Character
!      (Item : Character) return Wide_Character;
  
     function To_Wide_String
!      (Item : String) return Wide_String;
  
  private
     pragma Inline (Is_Alphanumeric);
--- 382,430 ----
  
     function To_Character
       (Item       : Wide_Character;
!       Substitute : Character := ' ') return Character
!    with
!      Post => To_Character'Result =
!        (if Is_Character (Item) then
!           Character'Val (Wide_Character'Pos (Item))
!         else
!           Substitute);
!    --  Returns the Character corresponding to Item if Is_Character(Item), and
!    --  returns the Substitute Character otherwise.
  
     function To_String
       (Item       : Wide_String;
!       Substitute : Character := ' ') return String
!    with
!      Post => To_String'Result'First = 1
!        and then To_String'Result'Length = Item'Length
!        and then
!          (for all J in To_String'Result'Range =>
!             To_String'Result (J) =
!               To_Character (Item (Item'First + (J - 1)), Substitute));
!    --  Returns the String whose range is 1..Item'Length and each of whose
!    --  elements is given by To_Character of the corresponding element in Item.
  
     function To_Wide_Character
!      (Item : Character) return Wide_Character
!    with
!      Post => To_Wide_Character'Result =
!        Wide_Character'Val (Character'Pos (Item));
!    --  Returns the Wide_Character X such that Character'Pos(Item) =
!    --  Wide_Character'Pos (X).
  
     function To_Wide_String
!      (Item : String) return Wide_String
!    with
!      Post => To_Wide_String'Result'First = 1
!        and then To_Wide_String'Result'Length = Item'Length
!        and then
!          (for all J in To_Wide_String'Result'Range =>
!             To_Wide_String'Result (J) =
!               To_Wide_Character (Item (Item'First + (J - 1))));
!    --  Returns the Wide_String whose range is 1..Item'Length and each of whose
!    --  elements is given by To_Wide_Character of the corresponding element in
!    --  Item.
  
  private
     pragma Inline (Is_Alphanumeric);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chlat1.ads gcc-12.1.0/gcc/ada/libgnat/a-chlat1.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-chlat1.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chlat1.ads	Fri May  6 07:30:56 2022
***************
*** 13,20 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package Ada.Characters.Latin_1 is
     pragma Pure;
  
--- 13,18 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chlat9.ads gcc-12.1.0/gcc/ada/libgnat/a-chlat9.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-chlat9.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chlat9.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chtgbk.adb gcc-12.1.0/gcc/ada/libgnat/a-chtgbk.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-chtgbk.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chtgbk.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chtgbk.ads gcc-12.1.0/gcc/ada/libgnat/a-chtgbk.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-chtgbk.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chtgbk.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chtgbo.adb gcc-12.1.0/gcc/ada/libgnat/a-chtgbo.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-chtgbo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chtgbo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** package body Ada.Containers.Hash_Tables.
*** 60,66 ****
        --  HT.Busy := 0;
        --  HT.Lock := 0;
        HT.Free := -1;
!       HT.Buckets := (others => 0);  -- optimize this somehow ???
     end Clear;
  
     --------------------------
--- 60,66 ----
        --  HT.Busy := 0;
        --  HT.Lock := 0;
        HT.Free := -1;
!       HT.Buckets := [others => 0];  -- optimize this somehow ???
     end Clear;
  
     --------------------------
*************** package body Ada.Containers.Hash_Tables.
*** 439,445 ****
       (Stream : not null access Root_Stream_Type'Class;
        HT     : out Hash_Table_Type'Class)
     is
!       N  : Count_Type'Base;
  
     begin
        Clear (HT);
--- 439,445 ----
       (Stream : not null access Root_Stream_Type'Class;
        HT     : out Hash_Table_Type'Class)
     is
!       N : Count_Type'Base;
  
     begin
        Clear (HT);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chtgbo.ads gcc-12.1.0/gcc/ada/libgnat/a-chtgbo.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-chtgbo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chtgbo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chtgke.adb gcc-12.1.0/gcc/ada/libgnat/a-chtgke.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-chtgke.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chtgke.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chtgke.ads gcc-12.1.0/gcc/ada/libgnat/a-chtgke.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-chtgke.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chtgke.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chtgop.adb gcc-12.1.0/gcc/ada/libgnat/a-chtgop.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-chtgop.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chtgop.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chtgop.ads gcc-12.1.0/gcc/ada/libgnat/a-chtgop.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-chtgop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chtgop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chzla1.ads gcc-12.1.0/gcc/ada/libgnat/a-chzla1.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-chzla1.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chzla1.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-chzla9.ads gcc-12.1.0/gcc/ada/libgnat/a-chzla9.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-chzla9.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-chzla9.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cidlli.adb gcc-12.1.0/gcc/ada/libgnat/a-cidlli.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cidlli.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cidlli.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
***************
*** 29,34 ****
--- 29,36 ----
  
  with Ada.Unchecked_Deallocation;
  
+ with Ada.Containers.Stable_Sorting; use Ada.Containers.Stable_Sorting;
+ 
  with System; use type System.Address;
  with System.Put_Images;
  
*************** is
*** 731,803 ****
        ----------
  
        procedure Sort (Container : in out List) is
-          procedure Partition (Pivot : Node_Access; Back  : Node_Access);
-          --  Comment ???
- 
-          procedure Sort (Front, Back : Node_Access);
-          --  Comment??? Confusing name??? change name???
- 
-          ---------------
-          -- Partition --
-          ---------------
- 
-          procedure Partition (Pivot : Node_Access; Back : Node_Access) is
-             Node : Node_Access;
- 
-          begin
-             Node := Pivot.Next;
-             while Node /= Back loop
-                if Node.Element.all < Pivot.Element.all then
-                   declare
-                      Prev : constant Node_Access := Node.Prev;
-                      Next : constant Node_Access := Node.Next;
- 
-                   begin
-                      Prev.Next := Next;
- 
-                      if Next = null then
-                         Container.Last := Prev;
-                      else
-                         Next.Prev := Prev;
-                      end if;
- 
-                      Node.Next := Pivot;
-                      Node.Prev := Pivot.Prev;
- 
-                      Pivot.Prev := Node;
- 
-                      if Node.Prev = null then
-                         Container.First := Node;
-                      else
-                         Node.Prev.Next := Node;
-                      end if;
- 
-                      Node := Next;
-                   end;
- 
-                else
-                   Node := Node.Next;
-                end if;
-             end loop;
-          end Partition;
- 
-          ----------
-          -- Sort --
-          ----------
- 
-          procedure Sort (Front, Back : Node_Access) is
-             Pivot : constant Node_Access :=
-               (if Front = null then Container.First else Front.Next);
-          begin
-             if Pivot /= Back then
-                Partition (Pivot, Back);
-                Sort (Front, Pivot);
-                Sort (Pivot, Back);
-             end if;
-          end Sort;
- 
-       --  Start of processing for Sort
- 
        begin
           if Container.Length <= 1 then
              return;
--- 733,738 ----
*************** is
*** 813,820 ****
  
           declare
              Lock : With_Lock (Container.TC'Unchecked_Access);
           begin
!             Sort (Front => null, Back => null);
           end;
  
           pragma Assert (Container.First.Prev = null);
--- 748,789 ----
  
           declare
              Lock : With_Lock (Container.TC'Unchecked_Access);
+ 
+             package Descriptors is new List_Descriptors
+               (Node_Ref => Node_Access, Nil => null);
+             use Descriptors;
+ 
+             function Next (N : Node_Access) return Node_Access is (N.Next);
+             procedure Set_Next (N : Node_Access; Next : Node_Access)
+               with Inline;
+             procedure Set_Prev (N : Node_Access; Prev : Node_Access)
+               with Inline;
+             function "<" (L, R : Node_Access) return Boolean is
+               (L.Element.all < R.Element.all);
+             procedure Update_Container (List : List_Descriptor) with Inline;
+ 
+             procedure Set_Next (N : Node_Access; Next : Node_Access) is
+             begin
+                N.Next := Next;
+             end Set_Next;
+ 
+             procedure Set_Prev (N : Node_Access; Prev : Node_Access) is
+             begin
+                N.Prev := Prev;
+             end Set_Prev;
+ 
+             procedure Update_Container (List : List_Descriptor) is
+             begin
+                Container.First  := List.First;
+                Container.Last   := List.Last;
+                Container.Length := List.Length;
+             end Update_Container;
+ 
+             procedure Sort_List is new Doubly_Linked_List_Sort;
           begin
!             Sort_List (List_Descriptor'(First  => Container.First,
!                                         Last   => Container.Last,
!                                         Length => Container.Length));
           end;
  
           pragma Assert (Container.First.Prev = null);
*************** is
*** 933,939 ****
        Count     : Count_Type := 1)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
     begin
        Insert (Container, Before, New_Item, Position, Count);
     end Insert;
--- 902,907 ----
*************** is
*** 1311,1317 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : List)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1279,1285 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : List)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cidlli.ads gcc-12.1.0/gcc/ada/libgnat/a-cidlli.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cidlli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cidlli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type (<>) is private;
--- 36,42 ----
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type (<>) is private;
*************** is
*** 65,71 ****
--- 65,73 ----
     pragma Preelaborable_Initialization (Cursor);
  
     Empty_List : constant List;
+ 
     function Empty return List;
+    pragma Ada_2022 (Empty);
  
     No_Element : constant Cursor;
  
*************** private
*** 280,286 ****
       end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : List);
  
     overriding procedure Adjust (Container : in out List);
  
--- 282,288 ----
       end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : List);
  
     overriding procedure Adjust (Container : in out List);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cihama.adb gcc-12.1.0/gcc/ada/libgnat/a-cihama.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cihama.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cihama.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 522,528 ****
           return No_Element;
        end if;
  
!       return Cursor'(Container'Unrestricted_Access, Node, Hash_Type'Last);
     end Find;
  
     --------------------
--- 522,529 ----
           return No_Element;
        end if;
  
!       return Cursor'
!         (Container'Unrestricted_Access, Node, HT_Ops.Index (HT, Node));
     end Find;
  
     --------------------
*************** is
*** 748,753 ****
--- 749,755 ----
        end if;
  
        Position.Container := Container'Unchecked_Access;
+       Position.Position := HT_Ops.Index (HT, Position.Node);
     end Insert;
  
     procedure Insert
*************** is
*** 756,763 ****
        New_Item  : Element_Type)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 758,763 ----
*************** is
*** 971,977 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Map)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 971,977 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Map)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cihama.ads gcc-12.1.0/gcc/ada/libgnat/a-cihama.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cihama.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cihama.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  private with Ada.Containers.Hash_Tables;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Key_Type (<>) is private;
--- 36,42 ----
  private with Ada.Containers.Hash_Tables;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Key_Type (<>) is private;
*************** private
*** 336,342 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Map);
  
     overriding procedure Adjust   (Container : in out Map);
  
--- 336,342 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Map);
  
     overriding procedure Adjust   (Container : in out Map);
  
*************** private
*** 363,370 ****
--- 363,384 ----
  
     type Cursor is record
        Container : Map_Access;
+       --  Access to this cursor's container
+ 
        Node      : Node_Access;
+       --  Access to the node pointed to by this cursor
+ 
        Position  : Hash_Type := Hash_Type'Last;
+       --  Position of the node in the buckets of the container. If this is
+       --  equal to Hash_Type'Last, then it will not be used. Position is
+       --  not requried by the implementation, but improves the efficiency
+       --  of various operations.
+       --
+       --  However, this value must be maintained so that the predefined
+       --  equality operation acts as required by RM A.18.4-18/2, which
+       --  states: "The predefined "=" operator for type Cursor returns True
+       --  if both cursors are No_Element, or designate the same element
+       --  in the same container."
     end record;
  
     procedure Write
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cihase.adb gcc-12.1.0/gcc/ada/libgnat/a-cihase.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cihase.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cihase.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 854,861 ****
        New_Item  : Element_Type)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 854,859 ----
*************** is
*** 1281,1287 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1279,1285 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** is
*** 1728,1734 ****
        HT       : Hash_Table_Type;
        Node     : Node_Access;
        Inserted : Boolean;
-       pragma Unreferenced (Node, Inserted);
     begin
        Insert (HT, New_Item, Node, Inserted);
        return Set'(Controlled with HT);
--- 1726,1731 ----
*************** is
*** 1776,1782 ****
  
           Tgt_Node : Node_Access;
           Success  : Boolean;
-          pragma Unreferenced (Tgt_Node, Success);
  
        --  Start of processing for Process
  
--- 1773,1778 ----
*************** is
*** 2063,2091 ****
          (Container : aliased Set;
           Key       : Key_Type) return Constant_Reference_Type
        is
!          HT   : Hash_Table_Type renames Container'Unrestricted_Access.HT;
!          Node : constant Node_Access := Key_Keys.Find (HT, Key);
  
        begin
!          if Checks and then Node = null then
              raise Constraint_Error with "Key not in set";
           end if;
  
!          if Checks and then Node.Element = null then
!             raise Program_Error with "Node has no element";
!          end if;
! 
!          declare
!             TC : constant Tamper_Counts_Access :=
!               HT.TC'Unrestricted_Access;
!          begin
!             return R : constant Constant_Reference_Type :=
!               (Element => Node.Element.all'Access,
!                Control => (Controlled with TC))
!             do
!                Busy (TC.all);
!             end return;
!          end;
        end Constant_Reference;
  
        --------------
--- 2059,2072 ----
          (Container : aliased Set;
           Key       : Key_Type) return Constant_Reference_Type
        is
!          Position : constant Cursor := Find (Container, Key);
  
        begin
!          if Checks and then Position = No_Element then
              raise Constraint_Error with "Key not in set";
           end if;
  
!          return Constant_Reference (Container, Position);
        end Constant_Reference;
  
        --------------
*************** is
*** 2280,2313 ****
          (Container : aliased in out Set;
           Key       : Key_Type) return Reference_Type
        is
!          Node : constant Node_Access := Key_Keys.Find (Container.HT, Key);
  
        begin
!          if Checks and then Node = null then
              raise Constraint_Error with "Key not in set";
           end if;
  
!          if Checks and then Node.Element = null then
!             raise Program_Error with "Node has no element";
!          end if;
! 
!          declare
!             HT : Hash_Table_Type renames Container.HT;
!             P  : constant Cursor := Find (Container, Key);
!          begin
!             return R : constant Reference_Type :=
!                          (Element => Node.Element.all'Access,
!                           Control =>
!                             (Controlled with
!                               HT.TC'Unrestricted_Access,
!                               Container => Container'Unchecked_Access,
!                               Index     => HT_Ops.Index (HT, P.Node),
!                               Old_Pos   => P,
!                               Old_Hash  => Hash (Key)))
!             do
!                Busy (HT.TC);
!             end return;
!          end;
        end Reference_Preserving_Key;
  
        -------------
--- 2261,2274 ----
          (Container : aliased in out Set;
           Key       : Key_Type) return Reference_Type
        is
!          Position : constant Cursor := Find (Container, Key);
  
        begin
!          if Checks and then Position = No_Element then
              raise Constraint_Error with "Key not in set";
           end if;
  
!          return Reference_Preserving_Key (Container, Position);
        end Reference_Preserving_Key;
  
        -------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cihase.ads gcc-12.1.0/gcc/ada/libgnat/a-cihase.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cihase.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cihase.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private with Ada.Containers.Hash_Tables;
*** 37,43 ****
  with Ada.Containers.Helpers;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type (<>) is private;
--- 37,43 ----
  with Ada.Containers.Helpers;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type (<>) is private;
*************** private
*** 500,506 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set);
  
     overriding procedure Adjust (Container : in out Set);
  
--- 500,506 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set);
  
     overriding procedure Adjust (Container : in out Set);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cimutr.adb gcc-12.1.0/gcc/ada/libgnat/a-cimutr.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cimutr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cimutr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 1175,1181 ****
        Count     : Count_Type := 1)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
  
     begin
        Insert_Child (Container, Parent, Before, New_Item, Position, Count);
--- 1175,1180 ----
*************** is
*** 1881,1887 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Tree)
     is
        use System.Put_Images;
  
--- 1880,1886 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Tree)
     is
        use System.Put_Images;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cimutr.ads gcc-12.1.0/gcc/ada/libgnat/a-cimutr.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cimutr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cimutr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type (<>) is private;
--- 36,42 ----
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type (<>) is private;
*************** private
*** 352,358 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Tree);
  
     overriding procedure Adjust (Container : in out Tree);
  
--- 352,358 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Tree);
  
     overriding procedure Adjust (Container : in out Tree);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ciorma.adb gcc-12.1.0/gcc/ada/libgnat/a-ciorma.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ciorma.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ciorma.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 866,873 ****
        New_Item  : Element_Type)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 866,871 ----
*************** is
*** 1297,1303 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Map)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1295,1301 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Map)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ciorma.ads gcc-12.1.0/gcc/ada/libgnat/a-ciorma.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ciorma.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ciorma.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Key_Type (<>) is private;
--- 36,42 ----
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Key_Type (<>) is private;
*************** is
*** 70,75 ****
--- 70,76 ----
     Empty_Map : constant Map;
  
     function Empty return Map;
+    pragma Ada_2022 (Empty);
  
     No_Element : constant Cursor;
     function Has_Element (Position : Cursor) return Boolean;
*************** private
*** 264,270 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Map);
  
     overriding procedure Adjust (Container : in out Map);
  
--- 265,271 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Map);
  
     overriding procedure Adjust (Container : in out Map);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ciormu.adb gcc-12.1.0/gcc/ada/libgnat/a-ciormu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ciormu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ciormu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 1120,1126 ****
  
     procedure Insert (Container : in out Set; New_Item : Element_Type) is
        Position : Cursor;
-       pragma Unreferenced (Position);
     begin
        Insert (Container, New_Item, Position);
     end Insert;
--- 1120,1125 ----
*************** is
*** 1663,1669 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1662,1668 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** is
*** 1975,1981 ****
     function To_Set (New_Item : Element_Type) return Set is
        Tree : Tree_Type;
        Node : Node_Access;
-       pragma Unreferenced (Node);
     begin
        Insert_Sans_Hint (Tree, New_Item, Node);
        return Set'(Controlled with Tree);
--- 1974,1979 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ciormu.ads gcc-12.1.0/gcc/ada/libgnat/a-ciormu.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ciormu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ciormu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
***************
*** 35,41 ****
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  with Ada.Iterator_Interfaces;
  
  generic
--- 35,41 ----
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  with Ada.Iterator_Interfaces;
  
  generic
*************** private
*** 472,478 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set);
  
     overriding procedure Adjust (Container : in out Set);
  
--- 472,478 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set);
  
     overriding procedure Adjust (Container : in out Set);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ciorse.adb gcc-12.1.0/gcc/ada/libgnat/a-ciorse.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ciorse.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ciorse.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 771,799 ****
          (Container : aliased Set;
           Key       : Key_Type) return Constant_Reference_Type
        is
!          Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key);
  
        begin
!          if Checks and then Node = null then
              raise Constraint_Error with "Key not in set";
           end if;
  
!          if Checks and then Node.Element = null then
!             raise Program_Error with "Node has no element";
!          end if;
! 
!          declare
!             Tree : Tree_Type renames Container'Unrestricted_Access.all.Tree;
!             TC : constant Tamper_Counts_Access :=
!               Tree.TC'Unrestricted_Access;
!          begin
!             return R : constant Constant_Reference_Type :=
!               (Element => Node.Element.all'Access,
!                Control => (Controlled with TC))
!             do
!                Busy (TC.all);
!             end return;
!          end;
        end Constant_Reference;
  
        --------------
--- 771,784 ----
          (Container : aliased Set;
           Key       : Key_Type) return Constant_Reference_Type
        is
!          Position : constant Cursor := Find (Container, Key);
  
        begin
!          if Checks and then Position = No_Element then
              raise Constraint_Error with "Key not in set";
           end if;
  
!          return Constant_Reference (Container, Position);
        end Constant_Reference;
  
        --------------
*************** is
*** 1029,1060 ****
          (Container : aliased in out Set;
           Key       : Key_Type) return Reference_Type
        is
!          Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key);
  
        begin
!          if Checks and then Node = null then
              raise Constraint_Error with "Key not in set";
           end if;
  
!          if Checks and then Node.Element = null then
!             raise Program_Error with "Node has no element";
!          end if;
! 
!          declare
!             Tree : Tree_Type renames Container.Tree;
!          begin
!             return R : constant Reference_Type :=
!               (Element  => Node.Element.all'Unchecked_Access,
!                Control =>
!                  (Controlled with
!                     Tree.TC'Unrestricted_Access,
!                     Container => Container'Unchecked_Access,
!                     Pos       => Find (Container, Key),
!                     Old_Key   => new Key_Type'(Key)))
!             do
!                Busy (Tree.TC);
!             end return;
!          end;
        end Reference_Preserving_Key;
  
        -----------------------------------
--- 1014,1027 ----
          (Container : aliased in out Set;
           Key       : Key_Type) return Reference_Type
        is
!          Position : constant Cursor := Find (Container, Key);
  
        begin
!          if Checks and then Position = No_Element then
              raise Constraint_Error with "Key not in set";
           end if;
  
!          return Reference_Preserving_Key (Container, Position);
        end Reference_Preserving_Key;
  
        -----------------------------------
*************** is
*** 1193,1200 ****
  
     procedure Insert (Container : in out Set; New_Item  : Element_Type) is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 1160,1165 ----
*************** is
*** 1272,1278 ****
        Dst_Node : out Node_Access)
     is
        Success : Boolean;
-       pragma Unreferenced (Success);
  
        function New_Node return Node_Access;
  
--- 1237,1242 ----
*************** is
*** 1728,1734 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1692,1698 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** is
*** 2153,2159 ****
        Tree     : Tree_Type;
        Node     : Node_Access;
        Inserted : Boolean;
-       pragma Unreferenced (Node, Inserted);
     begin
        Insert_Sans_Hint (Tree, New_Item, Node, Inserted);
        return Set'(Controlled with Tree);
--- 2117,2122 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ciorse.ads gcc-12.1.0/gcc/ada/libgnat/a-ciorse.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ciorse.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ciorse.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Containers.Helpers;
*** 37,43 ****
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type (<>) is private;
--- 37,43 ----
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type (<>) is private;
*************** private
*** 364,370 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set);
  
     overriding procedure Adjust (Container : in out Set);
  
--- 364,370 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set);
  
     overriding procedure Adjust (Container : in out Set);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-clrefi.adb gcc-12.1.0/gcc/ada/libgnat/a-clrefi.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-clrefi.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-clrefi.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2007-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-clrefi.ads gcc-12.1.0/gcc/ada/libgnat/a-clrefi.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-clrefi.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-clrefi.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2007-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coboho.adb gcc-12.1.0/gcc/ada/libgnat/a-coboho.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-coboho.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coboho.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2015-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2015-2022, 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- --
*************** package body Ada.Containers.Bounded_Hold
*** 65,76 ****
        return Get (Left) = Get (Right);
     end "=";
  
     ---------------
     -- Put_Image --
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Holder)
     is
        use System.Put_Images;
     begin
--- 65,96 ----
        return Get (Left) = Get (Right);
     end "=";
  
+    ------------------------
+    -- Constant_Reference --
+    ------------------------
+ 
+    function Constant_Reference
+      (Container : aliased Holder) return not null access constant Element_Type
+    is
+    begin
+       return Cast (Container'Address);
+    end Constant_Reference;
+ 
+    ---------
+    -- Get --
+    ---------
+ 
+    function Get (Container : Holder) return Element_Type is
+    begin
+       return Cast (Container'Address).all;
+    end Get;
+ 
     ---------------
     -- Put_Image --
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Holder)
     is
        use System.Put_Images;
     begin
*************** package body Ada.Containers.Bounded_Hold
*** 79,92 ****
        Array_After (S);
     end Put_Image;
  
!    ---------
!    -- Get --
!    ---------
  
!    function Get (Container : Holder) return Element_Type is
     begin
!       return Cast (Container'Address).all;
!    end Get;
  
     ---------
     -- Set --
--- 99,114 ----
        Array_After (S);
     end Put_Image;
  
!    ---------------
!    -- Reference --
!    ---------------
  
!    function Reference
!      (Container : not null access Holder) return not null access Element_Type
!    is
     begin
!       return Cast (Container.all'Address);
!    end Reference;
  
     ---------
     -- Set --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coboho.ads gcc-12.1.0/gcc/ada/libgnat/a-coboho.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-coboho.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coboho.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2015-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2015-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
***************
*** 30,36 ****
  ------------------------------------------------------------------------------
  
  private with System;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type (<>) is private;
--- 30,36 ----
  ------------------------------------------------------------------------------
  
  private with System;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type (<>) is private;
*************** package Ada.Containers.Bounded_Holders i
*** 70,76 ****
     --  System.Storage_Unit; e.g. creating Holders from 5-bit objects won't
     --  work.
  
!    type Holder is private;
  
     function "=" (Left, Right : Holder) return Boolean;
  
--- 70,78 ----
     --  System.Storage_Unit; e.g. creating Holders from 5-bit objects won't
     --  work.
  
!    type Holder is private
!      with Preelaborable_Initialization
!             => Element_Type'Preelaborable_Initialization;
  
     function "=" (Left, Right : Holder) return Boolean;
  
*************** package Ada.Containers.Bounded_Holders i
*** 81,86 ****
--- 83,94 ----
  
     procedure Set (Container : in out Holder; New_Item  : Element_Type);
  
+    function Constant_Reference
+      (Container : aliased Holder) return not null access constant Element_Type;
+ 
+    function Reference
+      (Container : not null access Holder) return not null access Element_Type;
+ 
  private
  
     --  The implementation uses low-level tricks (Address clauses and unchecked
*************** private
*** 100,106 ****
     --  (default) alignment instead.
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Holder);
  
     type Element_Access is access all Element_Type;
     pragma Assert (Element_Access'Size = Standard'Address_Size,
--- 108,114 ----
     --  (default) alignment instead.
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Holder);
  
     type Element_Access is access all Element_Type;
     pragma Assert (Element_Access'Size = Standard'Address_Size,
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cobove.adb gcc-12.1.0/gcc/ada/libgnat/a-cobove.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cobove.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cobove.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** package body Ada.Containers.Bounded_Vect
*** 258,264 ****
        end if;
  
        return Vector'(Capacity => 2,
!                      Elements => (Left, Right),
                       Last     => Index_Type'First + 1,
                       others   => <>);
     end "&";
--- 258,264 ----
        end if;
  
        return Vector'(Capacity => 2,
!                      Elements => [Left, Right],
                       Last     => Index_Type'First + 1,
                       others   => <>);
     end "&";
*************** package body Ada.Containers.Bounded_Vect
*** 415,421 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => A (J)'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 415,421 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => A (J)'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** package body Ada.Containers.Bounded_Vect
*** 439,445 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => A (J)'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 439,445 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Constant_Reference_Type :=
!            (Element => A (J)'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** package body Ada.Containers.Bounded_Vect
*** 1227,1233 ****
           --  The new items are being appended to the vector, so no
           --  sliding of existing elements is required.
  
!          EA (J .. New_Length) := (others => New_Item);
  
        else
           --  The new items are being inserted before some existing
--- 1227,1233 ----
           --  The new items are being appended to the vector, so no
           --  sliding of existing elements is required.
  
!          EA (J .. New_Length) := [others => New_Item];
  
        else
           --  The new items are being inserted before some existing
*************** package body Ada.Containers.Bounded_Vect
*** 1235,1241 ****
           --  new home.
  
           EA (J + Count .. New_Length) := EA (J .. Old_Length);
!          EA (J .. J + Count - 1) := (others => New_Item);
        end if;
  
        if Index_Type'Base'Last >= Count_Type'Pos (Count_Type'Last) then
--- 1235,1241 ----
           --  new home.
  
           EA (J + Count .. New_Length) := EA (J .. Old_Length);
!          EA (J .. J + Count - 1) := [others => New_Item];
        end if;
  
        if Index_Type'Base'Last >= Count_Type'Pos (Count_Type'Last) then
*************** package body Ada.Containers.Bounded_Vect
*** 2140,2146 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Vector)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 2140,2146 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Vector)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** package body Ada.Containers.Bounded_Vect
*** 2238,2244 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => A (J)'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 2238,2244 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => A (J)'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** package body Ada.Containers.Bounded_Vect
*** 2262,2268 ****
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => A (J)'Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
--- 2262,2268 ----
             Container.TC'Unrestricted_Access;
        begin
           return R : constant Reference_Type :=
!            (Element => A (J)'Unchecked_Access,
              Control => (Controlled with TC))
           do
              Busy (TC.all);
*************** package body Ada.Containers.Bounded_Vect
*** 2770,2776 ****
        end if;
  
        return V : Vector (Capacity => Length) do
!          V.Elements := (others => New_Item);
           V.Last := Last;
        end return;
     end To_Vector;
--- 2770,2776 ----
        end if;
  
        return V : Vector (Capacity => Length) do
!          V.Elements := [others => New_Item];
           V.Last := Last;
        end return;
     end To_Vector;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cobove.ads gcc-12.1.0/gcc/ada/libgnat/a-cobove.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cobove.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cobove.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  with Ada.Containers.Helpers;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Output;
  
  generic
     type Index_Type is range <>;
--- 36,42 ----
  with Ada.Containers.Helpers;
  private with Ada.Streams;
  private with Ada.Finalization;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Index_Type is range <>;
*************** package Ada.Containers.Bounded_Vectors i
*** 63,74 ****
        Aggregate         => (Empty          => Empty,
                              Add_Unnamed    => Append,
                              New_Indexed    => New_Vector,
!                             Assign_Indexed => Replace_Element);
! 
!    pragma Preelaborable_Initialization (Vector);
  
!    type Cursor is private;
!    pragma Preelaborable_Initialization (Cursor);
  
     Empty_Vector : constant Vector;
  
--- 63,73 ----
        Aggregate         => (Empty          => Empty,
                              Add_Unnamed    => Append,
                              New_Indexed    => New_Vector,
!                             Assign_Indexed => Replace_Element),
!       Preelaborable_Initialization
!                         => Element_Type'Preelaborable_Initialization;
  
!    type Cursor is private with Preelaborable_Initialization;
  
     Empty_Vector : constant Vector;
  
*************** package Ada.Containers.Bounded_Vectors i
*** 80,91 ****
        Ada.Iterator_Interfaces (Cursor, Has_Element);
  
     function Empty (Capacity : Count_Type := 10) return Vector;
  
     overriding function "=" (Left, Right : Vector) return Boolean;
  
     function New_Vector (First, Last : Index_Type) return Vector
       with Pre => First = Index_Type'First;
!    --  Ada_2020 aggregate operation.
  
     function To_Vector (Length : Count_Type) return Vector;
  
--- 79,92 ----
        Ada.Iterator_Interfaces (Cursor, Has_Element);
  
     function Empty (Capacity : Count_Type := 10) return Vector;
+    pragma Ada_2022 (Empty);
  
     overriding function "=" (Left, Right : Vector) return Boolean;
  
     function New_Vector (First, Last : Index_Type) return Vector
       with Pre => First = Index_Type'First;
!    --  Ada 2022 aggregate operation.
!    pragma Ada_2022 (New_Vector);
  
     function To_Vector (Length : Count_Type) return Vector;
  
*************** package Ada.Containers.Bounded_Vectors i
*** 194,199 ****
--- 195,201 ----
       (Container : in out Vector;
        Before    : Extended_Index;
        New_Item  : Vector);
+    pragma Ada_2022 (Insert_Vector);
  
     procedure Insert
       (Container : in out Vector;
*************** package Ada.Containers.Bounded_Vectors i
*** 205,210 ****
--- 207,213 ----
       (Container : in out Vector;
        Before    : Cursor;
        New_Item  : Vector);
+    pragma Ada_2022 (Insert_Vector);
  
     procedure Insert
       (Container : in out Vector;
*************** package Ada.Containers.Bounded_Vectors i
*** 217,222 ****
--- 220,226 ----
        Before    : Cursor;
        New_Item  : Vector;
        Position  : out Cursor);
+    pragma Ada_2022 (Insert_Vector);
  
     procedure Insert
       (Container : in out Vector;
*************** package Ada.Containers.Bounded_Vectors i
*** 258,263 ****
--- 262,268 ----
     procedure Prepend_Vector
       (Container : in out Vector;
        New_Item  : Vector);
+    pragma Ada_2022 (Prepend_Vector);
  
     procedure Prepend
       (Container : in out Vector;
*************** package Ada.Containers.Bounded_Vectors i
*** 272,277 ****
--- 277,283 ----
     procedure Append_Vector
       (Container : in out Vector;
        New_Item  : Vector);
+    pragma Ada_2022 (Append_Vector);
  
     procedure Append
       (Container : in out Vector;
*************** private
*** 426,432 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Vector);
  
     procedure Write
       (Stream    : not null access Root_Stream_Type'Class;
--- 432,438 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Vector);
  
     procedure Write
       (Stream    : not null access Root_Stream_Type'Class;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cofove.adb gcc-12.1.0/gcc/ada/libgnat/a-cofove.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cofove.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cofove.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
*************** is
*** 142,147 ****
--- 142,163 ----
        Container.Last := No_Index;
     end Clear;
  
+    ------------------------
+    -- Constant_Reference --
+    ------------------------
+ 
+    function Constant_Reference
+      (Container : aliased Vector;
+       Index     : Index_Type) return not null access constant Element_Type
+    is
+    begin
+       if Index > Container.Last then
+          raise Constraint_Error with "Index is out of range";
+       end if;
+ 
+       return Container.Elements (To_Array_Index (Index))'Access;
+    end Constant_Reference;
+ 
     --------------
     -- Contains --
     --------------
*************** is
*** 747,753 ****
  
        J := To_Array_Index (Before);
  
!       Container.Elements (J .. J - 1 + Count) := (others => New_Item);
     end Insert;
  
     procedure Insert
--- 763,769 ----
  
        J := To_Array_Index (Before);
  
!       Container.Elements (J .. J - 1 + Count) := [others => New_Item];
     end Insert;
  
     procedure Insert
*************** is
*** 868,878 ****
              --  less than 0, so it is safe to compute the following sum without
              --  fear of overflow.
  
-             pragma Warnings
-               (Off, "value not in range of type ""T"" defined at line 4");
              Index := No_Index + Index_Type'Base (Count_Type'Last);
-             pragma Warnings
-               (On, "value not in range of type ""T"" defined at line 4");
  
              if Index <= Index_Type'Last then
  
--- 884,890 ----
*************** is
*** 1100,1105 ****
--- 1112,1133 ----
        end;
     end Replace_Element;
  
+    ---------------
+    -- Reference --
+    ---------------
+ 
+    function Reference
+      (Container : not null access Vector;
+       Index     : Index_Type) return not null access Element_Type
+    is
+    begin
+       if Index > Container.Last then
+          raise Constraint_Error with "Index is out of range";
+       end if;
+ 
+       return Container.Elements (To_Array_Index (Index))'Access;
+    end Reference;
+ 
     ----------------------
     -- Reserve_Capacity --
     ----------------------
*************** is
*** 1276,1282 ****
           return
             (Capacity => Length,
              Last     => Last,
!             Elements => (others => New_Item));
        end;
     end To_Vector;
  
--- 1304,1310 ----
           return
             (Capacity => Length,
              Last     => Last,
!             Elements => [others => New_Item]);
        end;
     end To_Vector;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cofove.ads gcc-12.1.0/gcc/ada/libgnat/a-cofove.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cofove.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cofove.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** generic
*** 45,50 ****
--- 45,56 ----
  package Ada.Containers.Formal_Vectors with
    SPARK_Mode
  is
+    --  Contracts in this unit are meant for analysis only, not for run-time
+    --  checking.
+ 
+    pragma Assertion_Policy (Pre => Ignore);
+    pragma Assertion_Policy (Post => Ignore);
+    pragma Assertion_Policy (Contract_Cases => Ignore);
     pragma Annotate (CodePeer, Skip_Analysis);
  
     subtype Extended_Index is Index_Type'Base
*************** is
*** 285,290 ****
--- 291,338 ----
                  Right    => Model (Container),
                  Position => Index);
  
+    function At_End (E : access constant Vector) return access constant Vector
+    is (E)
+    with Ghost,
+      Annotate => (GNATprove, At_End_Borrow);
+ 
+    function At_End
+      (E : access constant Element_Type) return access constant Element_Type
+    is (E)
+    with Ghost,
+      Annotate => (GNATprove, At_End_Borrow);
+ 
+    function Constant_Reference
+      (Container : aliased Vector;
+       Index     : Index_Type) return not null access constant Element_Type
+    with
+      Global => null,
+      Pre    => Index in First_Index (Container) .. Last_Index (Container),
+      Post   =>
+          Constant_Reference'Result.all = Element (Model (Container), Index);
+ 
+    function Reference
+      (Container : not null access Vector;
+       Index     : Index_Type) return not null access Element_Type
+    with
+      Global => null,
+      Pre    =>
+       Index in First_Index (Container.all) .. Last_Index (Container.all),
+      Post   =>
+       Length (Container.all) = Length (At_End (Container).all)
+ 
+          --  Container will have Result.all at index Index
+ 
+          and At_End (Reference'Result).all =
+            Element (Model (At_End (Container).all), Index)
+ 
+          --  All other elements are preserved
+ 
+          and M.Equal_Except
+                (Left     => Model (Container.all),
+                 Right    => Model (At_End (Container).all),
+                 Position => Index);
+ 
     procedure Insert
       (Container : in out Vector;
        Before    : Extended_Index;
*************** private
*** 900,906 ****
     pragma Inline (Contains);
  
     subtype Array_Index is Capacity_Range range 1 .. Capacity_Range'Last;
!    type Elements_Array is array (Array_Index range <>) of Element_Type;
     function "=" (L, R : Elements_Array) return Boolean is abstract;
  
     type Vector (Capacity : Capacity_Range) is record
--- 948,954 ----
     pragma Inline (Contains);
  
     subtype Array_Index is Capacity_Range range 1 .. Capacity_Range'Last;
!    type Elements_Array is array (Array_Index range <>) of aliased Element_Type;
     function "=" (L, R : Elements_Array) return Boolean is abstract;
  
     type Vector (Capacity : Capacity_Range) is record
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cofuba.adb gcc-12.1.0/gcc/ada/libgnat/a-cofuba.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cofuba.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cofuba.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2016-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2016-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cofuba.ads gcc-12.1.0/gcc/ada/libgnat/a-cofuba.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cofuba.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cofuba.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2016-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2016-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cofuma.adb gcc-12.1.0/gcc/ada/libgnat/a-cofuma.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cofuma.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cofuma.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2016-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2016-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cofuma.ads gcc-12.1.0/gcc/ada/libgnat/a-cofuma.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cofuma.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cofuma.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2016-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2016-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Containers.Functional_Maps w
*** 302,307 ****
--- 302,315 ----
       Global => null,
       Pre    => Has_Witness (Container, Witness);
  
+    function Copy_Key (Key : Key_Type) return Key_Type is (Key);
+    function Copy_Element (Item : Element_Type) return Element_Type is (Item);
+    --  Elements and Keys of maps are copied by numerous primitives in this
+    --  package. This function causes GNATprove to verify that such a copy is
+    --  valid (in particular, it does not break the ownership policy of SPARK,
+    --  i.e. it does not contain pointers that could be used to alias mutable
+    --  data).
+ 
     ---------------------------
     --  Iteration Primitives --
     ---------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cofuse.adb gcc-12.1.0/gcc/ada/libgnat/a-cofuse.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cofuse.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cofuse.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2016-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2016-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cofuse.ads gcc-12.1.0/gcc/ada/libgnat/a-cofuse.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cofuse.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cofuse.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2016-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2016-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Containers.Functional_Sets w
*** 249,254 ****
--- 249,261 ----
             and Right <= Union'Result
             and Included_In_Union (Union'Result, Left, Right);
  
+    function Copy_Element (Item : Element_Type) return Element_Type is (Item);
+    --  Elements of containers are copied by numerous primitives in this
+    --  package. This function causes GNATprove to verify that such a copy is
+    --  valid (in particular, it does not break the ownership policy of SPARK,
+    --  i.e. it does not contain pointers that could be used to alias mutable
+    --  data).
+ 
     ---------------------------
     --  Iteration Primitives --
     ---------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cofuve.adb gcc-12.1.0/gcc/ada/libgnat/a-cofuve.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cofuve.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cofuve.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2016-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2016-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cofuve.ads gcc-12.1.0/gcc/ada/libgnat/a-cofuve.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cofuve.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cofuve.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2016-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2016-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Containers.Functional_Vector
*** 303,309 ****
           and then Get (Add'Result, Position) = New_Item
           and then Range_Equal
                      (Left  => Container,
!                      Right =>  Add'Result,
                       Fst   => Index_Type'First,
                       Lst   => Index_Type'Pred (Position))
           and then Range_Shifted
--- 303,309 ----
           and then Get (Add'Result, Position) = New_Item
           and then Range_Equal
                      (Left  => Container,
!                      Right => Add'Result,
                       Fst   => Index_Type'First,
                       Lst   => Index_Type'Pred (Position))
           and then Range_Shifted
*************** package Ada.Containers.Functional_Vector
*** 336,341 ****
--- 336,348 ----
                       Lst    => Last (Remove'Result),
                       Offset => 1);
  
+    function Copy_Element (Item : Element_Type) return Element_Type is (Item);
+    --  Elements of containers are copied by numerous primitives in this
+    --  package. This function causes GNATprove to verify that such a copy is
+    --  valid (in particular, it does not break the ownership policy of SPARK,
+    --  i.e. it does not contain pointers that could be used to alias mutable
+    --  data).
+ 
     ---------------------------
     --  Iteration Primitives --
     ---------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cogeso.adb gcc-12.1.0/gcc/ada/libgnat/a-cogeso.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cogeso.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cogeso.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cogeso.ads gcc-12.1.0/gcc/ada/libgnat/a-cogeso.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cogeso.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cogeso.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cohama.adb gcc-12.1.0/gcc/ada/libgnat/a-cohama.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cohama.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cohama.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 116,121 ****
--- 116,128 ----
     -- "=" --
     ---------
  
+    function "=" (Left, Right : Cursor) return Boolean is
+    begin
+       return
+        Left.Container = Right.Container
+          and then Left.Node = Right.Node;
+    end "=";
+ 
     function "=" (Left, Right : Map) return Boolean is
     begin
        return Is_Equal (Left.HT, Right.HT);
*************** is
*** 478,484 ****
           return No_Element;
        end if;
  
!       return Cursor'(Container'Unrestricted_Access, Node, Hash_Type'Last);
     end Find;
  
     --------------------
--- 485,492 ----
           return No_Element;
        end if;
  
!       return Cursor'
!         (Container'Unrestricted_Access, Node, HT_Ops.Index (HT, Node));
     end Find;
  
     --------------------
*************** is
*** 635,640 ****
--- 643,653 ----
        end if;
  
        Position.Container := Container'Unrestricted_Access;
+ 
+       --  Note that we do not set the Position component of the cursor,
+       --  because it may become incorrect on subsequent insertions/deletions
+       --  from the container. This will lose some optimizations but prevents
+       --  anomalies when the underlying hash-table is expanded or shrunk.
     end Insert;
  
     procedure Insert
*************** is
*** 685,692 ****
        New_Item  : Element_Type)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 698,703 ----
*************** is
*** 889,895 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Map)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 900,906 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Map)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cohama.ads gcc-12.1.0/gcc/ada/libgnat/a-cohama.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cohama.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cohama.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  private with Ada.Containers.Hash_Tables;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  --  The language-defined generic package Containers.Hashed_Maps provides
  --  private types Map and Cursor, and a set of operations for each type. A map
--- 36,42 ----
  private with Ada.Containers.Hash_Tables;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  --  The language-defined generic package Containers.Hashed_Maps provides
  --  private types Map and Cursor, and a set of operations for each type. A map
*************** is
*** 110,115 ****
--- 110,123 ----
     type Cursor is private;
     pragma Preelaborable_Initialization (Cursor);
  
+    function "=" (Left, Right : Cursor) return Boolean;
+    --  The representation of cursors includes a component used to optimize
+    --  iteration over maps. This component may become unreliable after
+    --  multiple map insertions, and must be excluded from cursor equality,
+    --  so we need to provide an explicit definition for it, instead of
+    --  using predefined equality (as implied by a questionable comment
+    --  in the RM).
+ 
     Empty_Map : constant Map;
     --  Map objects declared without an initialization expression are
     --  initialized to the value Empty_Map.
*************** private
*** 431,437 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Map);
  
     overriding procedure Adjust (Container : in out Map);
  
--- 439,445 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Map);
  
     overriding procedure Adjust (Container : in out Map);
  
*************** private
*** 465,471 ****
  
        Position  : Hash_Type := Hash_Type'Last;
        --  Position of the node in the buckets of the container. If this is
!       --  equal to Hash_Type'Last, then it will not be used.
     end record;
  
     procedure Read
--- 473,487 ----
  
        Position  : Hash_Type := Hash_Type'Last;
        --  Position of the node in the buckets of the container. If this is
!       --  equal to Hash_Type'Last, then it will not be used. Position is
!       --  not requried by the implementation, but improves the efficiency
!       --  of various operations.
!       --
!       --  However, this value must be maintained so that the predefined
!       --  equality operation acts as required by RM A.18.4-18/2, which
!       --  states: "The predefined "=" operator for type Cursor returns True
!       --  if both cursors are No_Element, or designate the same element
!       --  in the same container."
     end record;
  
     procedure Read
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cohase.adb gcc-12.1.0/gcc/ada/libgnat/a-cohase.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cohase.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cohase.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 145,150 ****
--- 145,157 ----
     -- "=" --
     ---------
  
+    function "=" (Left, Right : Cursor) return Boolean is
+    begin
+       return
+        Left.Container = Right.Container
+          and then Left.Node = Right.Node;
+    end "=";
+ 
     function "=" (Left, Right : Set) return Boolean is
     begin
        return Is_Equal (Left.HT, Right.HT);
*************** is
*** 605,617 ****
     is
        HT   : Hash_Table_Type renames Container'Unrestricted_Access.HT;
        Node : constant Node_Access := Element_Keys.Find (HT, Item);
- 
     begin
        if Node = null then
           return No_Element;
        end if;
  
!       return Cursor'(Container'Unrestricted_Access, Node, Hash_Type'Last);
     end Find;
  
     --------------------
--- 612,624 ----
     is
        HT   : Hash_Table_Type renames Container'Unrestricted_Access.HT;
        Node : constant Node_Access := Element_Keys.Find (HT, Item);
     begin
        if Node = null then
           return No_Element;
        end if;
  
!       return Cursor'
!         (Container'Unrestricted_Access, Node, HT_Ops.Index (HT, Node));
     end Find;
  
     --------------------
*************** is
*** 766,771 ****
--- 773,783 ----
     begin
        Insert (Container.HT, New_Item, Position.Node, Inserted);
        Position.Container := Container'Unchecked_Access;
+ 
+       --  Note that we do not set the Position component of the cursor,
+       --  because it may become incorrect on subsequent insertions/deletions
+       --  from the container. This will lose some optimizations but prevents
+       --  anomalies when the underlying hash-table is expanded or shrunk.
     end Insert;
  
     procedure Insert
*************** is
*** 773,780 ****
        New_Item  : Element_Type)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 785,790 ----
*************** is
*** 1168,1174 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1178,1184 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** is
*** 1550,1556 ****
  
        Node     : Node_Access;
        Inserted : Boolean;
-       pragma Unreferenced (Node, Inserted);
  
     begin
        Insert (HT, New_Item, Node, Inserted);
--- 1560,1565 ----
*************** is
*** 1594,1600 ****
  
           Tgt_Node : Node_Access;
           Success  : Boolean;
-          pragma Unreferenced (Tgt_Node, Success);
  
        --  Start of processing for Process
  
--- 1603,1608 ----
*************** is
*** 1864,1888 ****
          (Container : aliased Set;
           Key       : Key_Type) return Constant_Reference_Type
        is
!          HT   : Hash_Table_Type renames Container'Unrestricted_Access.HT;
!          Node : constant Node_Access := Key_Keys.Find (HT, Key);
  
        begin
!          if Checks and then Node = null then
              raise Constraint_Error with "Key not in set";
           end if;
  
!          declare
!             TC : constant Tamper_Counts_Access :=
!               HT.TC'Unrestricted_Access;
!          begin
!             return R : constant Constant_Reference_Type :=
!               (Element => Node.Element'Access,
!                Control => (Controlled with TC))
!             do
!                Busy (TC.all);
!             end return;
!          end;
        end Constant_Reference;
  
        --------------
--- 1872,1885 ----
          (Container : aliased Set;
           Key       : Key_Type) return Constant_Reference_Type
        is
!          Position : constant Cursor := Find (Container, Key);
  
        begin
!          if Checks and then Position = No_Element then
              raise Constraint_Error with "Key not in set";
           end if;
  
!          return Constant_Reference (Container, Position);
        end Constant_Reference;
  
        --------------
*************** is
*** 1998,2004 ****
              return No_Element;
           else
              return Cursor'
!               (Container'Unrestricted_Access, Node, Hash_Type'Last);
           end if;
        end Find;
  
--- 1995,2001 ----
              return No_Element;
           else
              return Cursor'
!               (Container'Unrestricted_Access, Node, HT_Ops.Index (HT, Node));
           end if;
        end Find;
  
*************** is
*** 2075,2104 ****
          (Container : aliased in out Set;
           Key       : Key_Type) return Reference_Type
        is
!          Node : constant Node_Access := Key_Keys.Find (Container.HT, Key);
  
        begin
!          if Checks and then Node = null then
              raise Constraint_Error with "key not in set";
           end if;
  
!          declare
!             HT : Hash_Table_Type renames Container.HT;
!             P  : constant Cursor := Find (Container, Key);
!          begin
!             return R : constant Reference_Type :=
!                          (Element => Node.Element'Access,
!                           Control =>
!                             (Controlled with
!                               HT.TC'Unrestricted_Access,
!                               Container'Unrestricted_Access,
!                               Index    => HT_Ops.Index (HT, P.Node),
!                               Old_Pos  => P,
!                               Old_Hash => Hash (Key)))
!             do
!                Busy (HT.TC);
!             end return;
!          end;
        end Reference_Preserving_Key;
  
        -------------
--- 2072,2085 ----
          (Container : aliased in out Set;
           Key       : Key_Type) return Reference_Type
        is
!          Position : constant Cursor := Find (Container, Key);
  
        begin
!          if Checks and then Position = No_Element then
              raise Constraint_Error with "key not in set";
           end if;
  
!          return Reference_Preserving_Key (Container, Position);
        end Reference_Preserving_Key;
  
        -------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cohase.ads gcc-12.1.0/gcc/ada/libgnat/a-cohase.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cohase.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cohase.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private with Ada.Containers.Hash_Tables;
*** 37,43 ****
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type is private;
--- 37,43 ----
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type is private;
*************** is
*** 69,74 ****
--- 69,83 ----
     type Cursor is private;
     pragma Preelaborable_Initialization (Cursor);
  
+    function "=" (Left, Right : Cursor) return Boolean;
+    --  The representation of cursors includes a component used to optimize
+    --  iteration over sets. This component may become unreliable after
+    --  multiple set insertions, and must be excluded from cursor equality,
+    --  so we need to provide an explicit definition for it, instead of
+    --  using predefined equality (as implied by a questionable comment
+    --  in the RM). This is also the case for hashed maps, and affects the
+    --  use of Insert primitives in hashed structures.
+ 
     Empty_Set : constant Set;
     --  Set objects declared without an initialization expression are
     --  initialized to the value Empty_Set.
*************** private
*** 510,516 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set);
  
     overriding procedure Adjust (Container : in out Set);
  
--- 519,525 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set);
  
     overriding procedure Adjust (Container : in out Set);
  
*************** private
*** 537,544 ****
--- 546,567 ----
  
     type Cursor is record
        Container : Set_Access;
+       --  Access to this cursor's container
+ 
        Node      : Node_Access;
+       --  Access to the node pointed to by this cursor
+ 
        Position  : Hash_Type := Hash_Type'Last;
+       --  Position of the node in the buckets of the container. If this is
+       --  equal to Hash_Type'Last, then it will not be used. Position is
+       --  not requried by the implementation, but improves the efficiency
+       --  of various operations.
+       --
+       --  However, this value must be maintained so that the predefined
+       --  equality operation acts as required by RM A.18.7-17/2, which
+       --  states: "The predefined "=" operator for type Cursor returns True
+       --  if both cursors are No_Element, or designate the same element
+       --  in the same container."
     end record;
  
     procedure Write
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cohata.ads gcc-12.1.0/gcc/ada/libgnat/a-cohata.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cohata.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cohata.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** package Ada.Containers.Hash_Tables is
*** 73,79 ****
           TC      : aliased Helpers.Tamper_Counts;
           Free    : Count_Type'Base             := -1;
           Nodes   : Nodes_Type (1 .. Capacity);
!          Buckets : Buckets_Type (1 .. Modulus) := (others => 0);
        end record;
  
        package Implementation is new Helpers.Generic_Implementation;
--- 73,79 ----
           TC      : aliased Helpers.Tamper_Counts;
           Free    : Count_Type'Base             := -1;
           Nodes   : Nodes_Type (1 .. Capacity);
!          Buckets : Buckets_Type (1 .. Modulus) := [others => 0];
        end record;
  
        package Implementation is new Helpers.Generic_Implementation;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coinho.adb gcc-12.1.0/gcc/ada/libgnat/a-coinho.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-coinho.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coinho.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2012-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2012-2022, 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- --
*************** package body Ada.Containers.Indefinite_H
*** 235,241 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Holder)
     is
        use System.Put_Images;
     begin
--- 235,241 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Holder)
     is
        use System.Put_Images;
     begin
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coinho.ads gcc-12.1.0/gcc/ada/libgnat/a-coinho.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-coinho.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coinho.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
***************
*** 31,37 ****
  
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type (<>) is private;
--- 31,37 ----
  
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type (<>) is private;
*************** private
*** 119,125 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Holder);
  
     for Holder'Read use Read;
     for Holder'Write use Write;
--- 119,125 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Holder);
  
     for Holder'Read use Read;
     for Holder'Write use Write;
*************** private
*** 127,134 ****
     overriding procedure Adjust (Container : in out Holder);
     overriding procedure Finalize (Container : in out Holder);
  
!    type Reference_Control_Type is new Controlled with
!    record
        Container : Holder_Access;
     end record;
  
--- 127,133 ----
     overriding procedure Adjust (Container : in out Holder);
     overriding procedure Finalize (Container : in out Holder);
  
!    type Reference_Control_Type is new Controlled with record
        Container : Holder_Access;
     end record;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coinho__shared.adb gcc-12.1.0/gcc/ada/libgnat/a-coinho__shared.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-coinho__shared.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coinho__shared.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2013-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2013-2022, 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- --
*************** package body Ada.Containers.Indefinite_H
*** 325,331 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Holder)
     is
        use System.Put_Images;
     begin
--- 325,331 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Holder)
     is
        use System.Put_Images;
     begin
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coinho__shared.ads gcc-12.1.0/gcc/ada/libgnat/a-coinho__shared.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-coinho__shared.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coinho__shared.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2013-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2013-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private with Ada.Finalization;
*** 36,42 ****
  private with Ada.Streams;
  
  private with System.Atomic_Counters;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type (<>) is private;
--- 36,42 ----
  private with Ada.Streams;
  
  private with System.Atomic_Counters;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type (<>) is private;
*************** package Ada.Containers.Indefinite_Holder
*** 69,74 ****
--- 69,75 ----
     procedure Query_Element
       (Container : Holder;
        Process   : not null access procedure (Element : Element_Type));
+ 
     procedure Update_Element
       (Container : in out Holder;
        Process   : not null access procedure (Element : in out Element_Type));
*************** private
*** 105,110 ****
--- 106,112 ----
     use Ada.Streams;
  
     type Element_Access is access all Element_Type;
+ 
     type Holder_Access is access all Holder;
  
     type Shared_Holder is record
*************** private
*** 134,140 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Holder);
  
     for Holder'Read use Read;
     for Holder'Write use Write;
--- 136,142 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Holder);
  
     for Holder'Read use Read;
     for Holder'Write use Write;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coinve.adb gcc-12.1.0/gcc/ada/libgnat/a-coinve.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-coinve.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coinve.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 1027,1033 ****
                               SA (Index_Type'First .. Source.Last);
                    begin
                       TA (Index_Type'First .. J) := Src;
!                      Src := (others => null);
                    end;
  
                    Source.Last := No_Index;
--- 1027,1033 ----
                               SA (Index_Type'First .. Source.Last);
                    begin
                       TA (Index_Type'First .. J) := Src;
!                      Src := [others => null];
                    end;
  
                    Source.Last := No_Index;
*************** is
*** 1472,1478 ****
                       --  we started by clearing out all of the stale values,
                       --  leaving a "hole" in the middle of the array.
  
!                      E (K .. Index - 1) := (others => null);
                       raise;
                 end;
              end if;
--- 1472,1478 ----
                       --  we started by clearing out all of the stale values,
                       --  leaving a "hole" in the middle of the array.
  
!                      E (K .. Index - 1) := [others => null];
                       raise;
                 end;
              end if;
*************** is
*** 2157,2163 ****
                 end if;
  
                 E (Index .. New_Last) := E (Before .. Container.Last);
!                E (Before .. Index - 1) := (others => null);
              end if;
           end;
  
--- 2157,2163 ----
                 end if;
  
                 E (Index .. New_Last) := E (Before .. Container.Last);
!                E (Before .. Index - 1) := [others => null];
              end if;
           end;
  
*************** is
*** 2670,2676 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Vector)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 2670,2676 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Vector)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coinve.ads gcc-12.1.0/gcc/ada/libgnat/a-coinve.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-coinve.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coinve.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Index_Type is range <>;
--- 36,42 ----
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Index_Type is range <>;
*************** private
*** 428,434 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Vector);
  
     overriding procedure Adjust (Container : in out Vector);
     overriding procedure Finalize (Container : in out Vector);
--- 428,434 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Vector);
  
     overriding procedure Adjust (Container : in out Vector);
     overriding procedure Finalize (Container : in out Vector);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-colien.adb gcc-12.1.0/gcc/ada/libgnat/a-colien.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-colien.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-colien.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-colien.ads gcc-12.1.0/gcc/ada/libgnat/a-colien.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-colien.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-colien.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-colire.adb gcc-12.1.0/gcc/ada/libgnat/a-colire.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-colire.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-colire.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-colire.ads gcc-12.1.0/gcc/ada/libgnat/a-colire.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-colire.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-colire.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-comlin.adb gcc-12.1.0/gcc/ada/libgnat/a-comlin.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-comlin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-comlin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-comlin.ads gcc-12.1.0/gcc/ada/libgnat/a-comlin.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-comlin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-comlin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-comutr.adb gcc-12.1.0/gcc/ada/libgnat/a-comutr.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-comutr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-comutr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 1130,1136 ****
        Count     : Count_Type := 1)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
  
     begin
        Insert_Child (Container, Parent, Before, New_Item, Position, Count);
--- 1130,1135 ----
*************** is
*** 1864,1870 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Tree)
     is
        use System.Put_Images;
  
--- 1863,1869 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Tree)
     is
        use System.Put_Images;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-comutr.ads gcc-12.1.0/gcc/ada/libgnat/a-comutr.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-comutr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-comutr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type is private;
--- 36,42 ----
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type is private;
*************** private
*** 404,410 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Tree);
  
     overriding procedure Adjust (Container : in out Tree);
  
--- 404,410 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Tree);
  
     overriding procedure Adjust (Container : in out Tree);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-conhel.adb gcc-12.1.0/gcc/ada/libgnat/a-conhel.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-conhel.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-conhel.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2015-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2015-2022, 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- --
***************
*** 27,32 ****
--- 27,39 ----
  
  package body Ada.Containers.Helpers is
  
+    Max_Count : constant := 2**31 - 1;
+    --  Used in assertions below, to make sure the counts don't wrap around.
+    --  This can help detect bugs in which Adjust and Finalize calls are
+    --  improperly generated. An extra Decrement could otherwise cause
+    --  wraparound from 0 to 2**32-1. The highest count seen so far is
+    --  around 25, so this should be plenty.
+ 
     package body Generic_Implementation is
  
        use type SAC.Atomic_Unsigned;
*************** package body Ada.Containers.Helpers is
*** 50,55 ****
--- 57,63 ----
        begin
           if T_Check then
              SAC.Increment (T_Counts.Busy);
+             pragma Assert (T_Counts.Busy <= Max_Count);
           end if;
        end Busy;
  
*************** package body Ada.Containers.Helpers is
*** 112,118 ****
--- 120,128 ----
        begin
           if T_Check then
              SAC.Increment (T_Counts.Lock);
+             pragma Assert (T_Counts.Lock <= Max_Count);
              SAC.Increment (T_Counts.Busy);
+             pragma Assert (T_Counts.Busy <= Max_Count);
           end if;
        end Lock;
  
*************** package body Ada.Containers.Helpers is
*** 122,138 ****
  
        procedure TC_Check (T_Counts : Tamper_Counts) is
        begin
!          if T_Check and then T_Counts.Busy > 0 then
!             raise Program_Error with
!               "attempt to tamper with cursors";
!          end if;
  
!          --  The lock status (which monitors "element tampering") always
!          --  implies that the busy status (which monitors "cursor tampering")
!          --  is set too; this is a representation invariant. Thus if the busy
!          --  bit is not set, then the lock bit must not be set either.
  
!          pragma Assert (T_Counts.Lock = 0);
        end TC_Check;
  
        --------------
--- 132,151 ----
  
        procedure TC_Check (T_Counts : Tamper_Counts) is
        begin
!          if T_Check then
!             if T_Counts.Busy > 0 then
!                raise Program_Error with
!                  "attempt to tamper with cursors";
!             end if;
  
!             --  The lock status (which monitors "element tampering") always
!             --  implies that the busy status (which monitors "cursor
!             --  tampering") is set too; this is a representation invariant.
!             --  Thus if the busy count is zero, then the lock count
!             --  must also be zero.
  
!             pragma Assert (T_Counts.Lock = 0);
!          end if;
        end TC_Check;
  
        --------------
*************** package body Ada.Containers.Helpers is
*** 155,160 ****
--- 168,174 ----
        begin
           if T_Check then
              SAC.Decrement (T_Counts.Busy);
+             pragma Assert (T_Counts.Busy <= Max_Count);
           end if;
        end Unbusy;
  
*************** package body Ada.Containers.Helpers is
*** 166,172 ****
--- 180,188 ----
        begin
           if T_Check then
              SAC.Decrement (T_Counts.Lock);
+             pragma Assert (T_Counts.Lock <= Max_Count);
              SAC.Decrement (T_Counts.Busy);
+             pragma Assert (T_Counts.Busy <= Max_Count);
           end if;
        end Unlock;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-conhel.ads gcc-12.1.0/gcc/ada/libgnat/a-conhel.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-conhel.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-conhel.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2015-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2015-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-convec.adb gcc-12.1.0/gcc/ada/libgnat/a-convec.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-convec.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-convec.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 1161,1167 ****
  
           Container.Elements := new Elements_Type'
                                       (Last => New_Last,
!                                       EA   => (others => New_Item));
  
           --  The allocation of the new, internal array succeeded, so it is now
           --  safe to update the Last index, restoring container invariants.
--- 1161,1167 ----
  
           Container.Elements := new Elements_Type'
                                       (Last => New_Last,
!                                       EA   => [others => New_Item]);
  
           --  The allocation of the new, internal array succeeded, so it is now
           --  safe to update the Last index, restoring container invariants.
*************** is
*** 1189,1195 ****
                 --  The new items are being appended to the vector, so no
                 --  sliding of existing elements is required.
  
!                EA (Before .. New_Last) := (others => New_Item);
  
              else
                 --  The new items are being inserted before some existing
--- 1189,1195 ----
                 --  The new items are being appended to the vector, so no
                 --  sliding of existing elements is required.
  
!                EA (Before .. New_Last) := [others => New_Item];
  
              else
                 --  The new items are being inserted before some existing
*************** is
*** 1204,1210 ****
                 end if;
  
                 EA (Index .. New_Last) := EA (Before .. Container.Last);
!                EA (Before .. Index - 1) := (others => New_Item);
              end if;
           end;
  
--- 1204,1210 ----
                 end if;
  
                 EA (Index .. New_Last) := EA (Before .. Container.Last);
!                EA (Before .. Index - 1) := [others => New_Item];
              end if;
           end;
  
*************** is
*** 1264,1276 ****
        declare
           SA : Elements_Array renames Container.Elements.EA; -- source
           DA : Elements_Array renames Dst.EA;                -- destination
  
        begin
           DA (Index_Type'First .. Before - 1) :=
             SA (Index_Type'First .. Before - 1);
  
           if Before > Container.Last then
!             DA (Before .. New_Last) := (others => New_Item);
  
           else
              --  The new items are being inserted before some existing elements,
--- 1264,1277 ----
        declare
           SA : Elements_Array renames Container.Elements.EA; -- source
           DA : Elements_Array renames Dst.EA;                -- destination
+          pragma Unreferenced (DA);
  
        begin
           DA (Index_Type'First .. Before - 1) :=
             SA (Index_Type'First .. Before - 1);
  
           if Before > Container.Last then
!             DA (Before .. New_Last) := [others => New_Item];
  
           else
              --  The new items are being inserted before some existing elements,
*************** is
*** 1282,1288 ****
                 Index := Index_Type'Base (Count_Type'Base (Before) + Count);
              end if;
  
!             DA (Before .. Index - 1) := (others => New_Item);
              DA (Index .. New_Last) := SA (Before .. Container.Last);
           end if;
  
--- 1283,1289 ----
                 Index := Index_Type'Base (Count_Type'Base (Before) + Count);
              end if;
  
!             DA (Before .. Index - 1) := [others => New_Item];
              DA (Index .. New_Last) := SA (Before .. Container.Last);
           end if;
  
*************** is
*** 1918,1923 ****
--- 1919,1925 ----
        declare
           SA : Elements_Array renames Container.Elements.EA;  -- source
           DA : Elements_Array renames Dst.EA;                 -- destination
+          pragma Unreferenced (DA);
  
        begin
           DA (Index_Type'First .. Before - 1) :=
*************** is
*** 2345,2351 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Vector)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 2347,2353 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Vector)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** is
*** 3265,3271 ****
           Last := Index_Type'Base (Count_Type'Base (No_Index) + Length);
        end if;
  
!       Elements := new Elements_Type'(Last, EA => (others => New_Item));
  
        return (Controlled with Elements, Last, TC => <>);
     end To_Vector;
--- 3267,3273 ----
           Last := Index_Type'Base (Count_Type'Base (No_Index) + Length);
        end if;
  
!       Elements := new Elements_Type'(Last, EA => [others => New_Item]);
  
        return (Controlled with Elements, Last, TC => <>);
     end To_Vector;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-convec.ads gcc-12.1.0/gcc/ada/libgnat/a-convec.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-convec.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-convec.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  --  The language-defined generic package Containers.Vectors provides private
  --  types Vector and Cursor, and a set of operations for each type. A vector
--- 36,42 ----
  with Ada.Containers.Helpers;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  --  The language-defined generic package Containers.Vectors provides private
  --  types Vector and Cursor, and a set of operations for each type. A vector
*************** is
*** 332,338 ****
  
     function New_Vector (First, Last : Index_Type) return Vector
       with Pre => First = Index_Type'First;
!    --  Ada_2020 aggregate operation.
  
     procedure Insert_Vector
       (Container : in out Vector;
--- 332,338 ----
  
     function New_Vector (First, Last : Index_Type) return Vector
       with Pre => First = Index_Type'First;
!    --  Ada 2022 aggregate operation.
  
     procedure Insert_Vector
       (Container : in out Vector;
*************** private
*** 745,751 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Vector);
  
     overriding procedure Adjust (Container : in out Vector);
     overriding procedure Finalize (Container : in out Vector);
--- 745,751 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Vector);
  
     overriding procedure Adjust (Container : in out Vector);
     overriding procedure Finalize (Container : in out Vector);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coorma.adb gcc-12.1.0/gcc/ada/libgnat/a-coorma.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-coorma.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coorma.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 752,759 ****
        New_Item  : Element_Type)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 752,757 ----
*************** is
*** 1220,1226 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Map)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1218,1224 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Map)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coorma.ads gcc-12.1.0/gcc/ada/libgnat/a-coorma.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-coorma.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coorma.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Iterator_Interfaces;
*** 36,42 ****
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Key_Type is private;
--- 36,42 ----
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Key_Type is private;
*************** is
*** 61,72 ****
--- 61,75 ----
        Iterator_Element  => Element_Type,
        Aggregate         => (Empty     => Empty,
                              Add_Named => Insert);
+    pragma Preelaborable_Initialization (Map);
  
     type Cursor is private;
     pragma Preelaborable_Initialization (Cursor);
  
     Empty_Map : constant Map;
+ 
     function Empty return Map;
+    pragma Ada_2022 (Empty);
  
     No_Element : constant Cursor;
  
*************** private
*** 264,270 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Map);
  
     overriding procedure Adjust (Container : in out Map);
  
--- 267,273 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Map);
  
     overriding procedure Adjust (Container : in out Map);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coormu.adb gcc-12.1.0/gcc/ada/libgnat/a-coormu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-coormu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coormu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 1053,1059 ****
  
     procedure Insert (Container : in out Set; New_Item : Element_Type) is
        Position : Cursor;
-       pragma Unreferenced (Position);
     begin
        Insert (Container, New_Item, Position);
     end Insert;
--- 1053,1058 ----
*************** is
*** 1571,1577 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1570,1576 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** is
*** 1858,1864 ****
     function To_Set (New_Item : Element_Type) return Set is
        Tree : Tree_Type;
        Node : Node_Access;
-       pragma Unreferenced (Node);
     begin
        Insert_Sans_Hint (Tree, New_Item, Node);
        return Set'(Controlled with Tree);
--- 1857,1862 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coormu.ads gcc-12.1.0/gcc/ada/libgnat/a-coormu.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-coormu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coormu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
***************
*** 34,40 ****
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  with Ada.Iterator_Interfaces;
  
  generic
--- 34,40 ----
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  with Ada.Iterator_Interfaces;
  
  generic
*************** private
*** 476,482 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set);
  
     overriding procedure Adjust (Container : in out Set);
  
--- 476,482 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set);
  
     overriding procedure Adjust (Container : in out Set);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coorse.adb gcc-12.1.0/gcc/ada/libgnat/a-coorse.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-coorse.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coorse.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** is
*** 693,717 ****
          (Container : aliased Set;
           Key       : Key_Type) return Constant_Reference_Type
        is
!          Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key);
  
        begin
!          if Checks and then Node = null then
              raise Constraint_Error with "key not in set";
           end if;
  
!          declare
!             Tree : Tree_Type renames Container'Unrestricted_Access.all.Tree;
!             TC : constant Tamper_Counts_Access :=
!               Tree.TC'Unrestricted_Access;
!          begin
!             return R : constant Constant_Reference_Type :=
!               (Element => Node.Element'Access,
!                Control => (Controlled with TC))
!             do
!                Busy (TC.all);
!             end return;
!          end;
        end Constant_Reference;
  
        --------------
--- 693,706 ----
          (Container : aliased Set;
           Key       : Key_Type) return Constant_Reference_Type
        is
!          Position : constant Cursor := Find (Container, Key);
  
        begin
!          if Checks and then Position = No_Element then
              raise Constraint_Error with "key not in set";
           end if;
  
!          return Constant_Reference (Container, Position);
        end Constant_Reference;
  
        --------------
*************** is
*** 915,942 ****
          (Container : aliased in out Set;
           Key       : Key_Type) return Reference_Type
        is
!          Node : constant Node_Access := Key_Keys.Find (Container.Tree, Key);
  
        begin
!          if Checks and then Node = null then
              raise Constraint_Error with "Key not in set";
           end if;
  
!          declare
!             Tree : Tree_Type renames Container.Tree;
!          begin
!             return R : constant Reference_Type :=
!               (Element  => Node.Element'Access,
!                  Control =>
!                    (Controlled with
!                      Tree.TC'Unrestricted_Access,
!                      Container => Container'Unchecked_Access,
!                      Pos       => Find (Container, Key),
!                      Old_Key   => new Key_Type'(Key)))
!             do
!                Busy (Tree.TC);
!             end return;
!          end;
        end Reference_Preserving_Key;
  
        -------------
--- 904,917 ----
          (Container : aliased in out Set;
           Key       : Key_Type) return Reference_Type
        is
!          Position : constant Cursor := Find (Container, Key);
  
        begin
!          if Checks and then Position = No_Element then
              raise Constraint_Error with "Key not in set";
           end if;
  
!          return Reference_Preserving_Key (Container, Position);
        end Reference_Preserving_Key;
  
        -------------
*************** is
*** 1082,1089 ****
        New_Item  : Element_Type)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
- 
        Inserted : Boolean;
  
     begin
--- 1057,1062 ----
*************** is
*** 1148,1154 ****
        Dst_Node : out Node_Access)
     is
        Success : Boolean;
-       pragma Unreferenced (Success);
  
        function New_Node return Node_Access;
        pragma Inline (New_Node);
--- 1121,1126 ----
*************** is
*** 1586,1592 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
--- 1558,1564 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set)
     is
        First_Time : Boolean := True;
        use System.Put_Images;
*************** is
*** 1960,1966 ****
        Tree     : Tree_Type;
        Node     : Node_Access;
        Inserted : Boolean;
-       pragma Unreferenced (Node, Inserted);
     begin
        Insert_Sans_Hint (Tree, New_Item, Node, Inserted);
        return Set'(Controlled with Tree);
--- 1932,1937 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coorse.ads gcc-12.1.0/gcc/ada/libgnat/a-coorse.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-coorse.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coorse.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with Ada.Containers.Helpers;
*** 37,43 ****
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Output;
  
  generic
     type Element_Type is private;
--- 37,43 ----
  private with Ada.Containers.Red_Black_Trees;
  private with Ada.Finalization;
  private with Ada.Streams;
! private with Ada.Strings.Text_Buffers;
  
  generic
     type Element_Type is private;
*************** private
*** 347,353 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Set);
  
     overriding procedure Adjust (Container : in out Set);
  
--- 347,353 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : Set);
  
     overriding procedure Adjust (Container : in out Set);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coprnu.adb gcc-12.1.0/gcc/ada/libgnat/a-coprnu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-coprnu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coprnu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-coprnu.ads gcc-12.1.0/gcc/ada/libgnat/a-coprnu.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-coprnu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-coprnu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** package Ada.Containers.Prime_Numbers is
*** 38,49 ****
     type Primes_Type is array (Positive range <>) of Hash_Type;
  
     Primes : constant Primes_Type :=
!      (53,         97,         193,       389,       769,
        1543,       3079,       6151,      12289,     24593,
        49157,      98317,      196613,    393241,    786433,
        1572869,    3145739,    6291469,   12582917,  25165843,
        50331653,   100663319,  201326611, 402653189, 805306457,
!       1610612741, 3221225473, 4294967291);
  
     function To_Prime (Length : Count_Type) return Hash_Type;
     --  Returns the smallest value in Primes not less than Length
--- 38,49 ----
     type Primes_Type is array (Positive range <>) of Hash_Type;
  
     Primes : constant Primes_Type :=
!      [53,         97,         193,       389,       769,
        1543,       3079,       6151,      12289,     24593,
        49157,      98317,      196613,    393241,    786433,
        1572869,    3145739,    6291469,   12582917,  25165843,
        50331653,   100663319,  201326611, 402653189, 805306457,
!       1610612741, 3221225473, 4294967291];
  
     function To_Prime (Length : Count_Type) return Hash_Type;
     --  Returns the smallest value in Primes not less than Length
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-costso.adb gcc-12.1.0/gcc/ada/libgnat/a-costso.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-costso.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-costso.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,191 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                         --
+ --                                                                          --
+ --         A D A . C O N T A I N E R S . S T A B L E _ S O R T I N G        --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --                     Copyright (C) 1995-2022, AdaCore                     --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package body Ada.Containers.Stable_Sorting is
+    package body List_Descriptors is
+       procedure Doubly_Linked_List_Sort (List : List_Descriptor) is
+ 
+          Empty  : constant List_Descriptor := (Nil, Nil, 0);
+ 
+          function Merge_Sort (Arg : List_Descriptor) return List_Descriptor;
+          --  Sort list of given length using MergeSort; length must be >= 2.
+          --  As required by RM, the sort is stable.
+ 
+          ----------------
+          -- Merge_Sort --
+          ----------------
+ 
+          function Merge_Sort (Arg : List_Descriptor) return List_Descriptor
+          is
+             procedure Split_List
+               (Unsplit : List_Descriptor; Part1, Part2 : out List_Descriptor);
+             --  Split list into two parts for divide-and-conquer.
+             --  Unsplit.Length must be >= 2.
+ 
+             function Merge_Parts
+               (Part1, Part2 : List_Descriptor) return List_Descriptor;
+             --  Merge two sorted lists, preserving sorted property.
+ 
+             ----------------
+             -- Split_List --
+             ----------------
+ 
+             procedure Split_List
+               (Unsplit : List_Descriptor; Part1, Part2 : out List_Descriptor)
+             is
+                Rover : Node_Ref := Unsplit.First;
+                Bump_Count : constant Count_Type := (Unsplit.Length - 1) / 2;
+             begin
+                for Iter in 1 .. Bump_Count loop
+                   Rover := Next (Rover);
+                end loop;
+ 
+                Part1 := (First  => Unsplit.First,
+                          Last   => Rover,
+                          Length => Bump_Count + 1);
+ 
+                Part2 := (First => Next (Rover),
+                          Last  => Unsplit.Last,
+                          Length => Unsplit.Length - Part1.Length);
+ 
+                --  Detach
+                Set_Next (Part1.Last, Nil);
+                Set_Prev (Part2.First, Nil);
+             end Split_List;
+ 
+             -----------------
+             -- Merge_Parts --
+             -----------------
+ 
+             function Merge_Parts
+               (Part1, Part2 : List_Descriptor) return List_Descriptor
+             is
+                procedure Detach_First (Source   : in out List_Descriptor;
+                                        Detached : out Node_Ref);
+                --  Detach the first element from a non-empty list and
+                --  return the detached node via the Detached parameter.
+ 
+                ------------------
+                -- Detach_First --
+                ------------------
+ 
+                procedure Detach_First (Source   : in out List_Descriptor;
+                                        Detached : out Node_Ref) is
+                begin
+                   Detached := Source.First;
+ 
+                   if Source.Length = 1 then
+                      Source := Empty;
+                   else
+                      Source := (Next (Source.First),
+                                 Source.Last,
+                                 Source.Length - 1);
+ 
+                      Set_Prev (Next (Detached), Nil);
+                      Set_Next (Detached, Nil);
+                   end if;
+                end Detach_First;
+ 
+                P1     : List_Descriptor := Part1;
+                P2     : List_Descriptor := Part2;
+                Merged : List_Descriptor := Empty;
+ 
+                Take_From_P2 : Boolean;
+                Detached     : Node_Ref;
+ 
+             --  Start of processing for Merge_Parts
+ 
+             begin
+                while (P1.Length /= 0) or (P2.Length /= 0) loop
+                   if P1.Length = 0 then
+                      Take_From_P2 := True;
+                   elsif P2.Length = 0 then
+                      Take_From_P2 := False;
+                   else
+                      --  If the compared elements are equal then Take_From_P2
+                      --  must be False in order to ensure stability.
+ 
+                      Take_From_P2 := P2.First < P1.First;
+                   end if;
+ 
+                   if Take_From_P2 then
+                      Detach_First (P2, Detached);
+                   else
+                      Detach_First (P1, Detached);
+                   end if;
+ 
+                   if Merged.Length = 0 then
+                      Merged := (First | Last => Detached, Length => 1);
+                   else
+                      Set_Prev (Detached, Merged.Last);
+                      Set_Next (Merged.Last, Detached);
+                      Merged.Last := Detached;
+                      Merged.Length := Merged.Length + 1;
+                   end if;
+                end loop;
+                return Merged;
+             end Merge_Parts;
+ 
+          --  Start of processing for Merge_Sort
+ 
+          begin
+             if Positive (Arg.Length) < 2 then
+                --  already sorted
+                return Arg;
+             end if;
+ 
+             declare
+                Part1, Part2 : List_Descriptor;
+             begin
+                Split_List (Unsplit => Arg, Part1 => Part1, Part2 => Part2);
+ 
+                Part1 := Merge_Sort (Part1);
+                Part2 := Merge_Sort (Part2);
+ 
+                return Merge_Parts (Part1, Part2);
+             end;
+          end Merge_Sort;
+ 
+       --  Start of processing for Sort
+ 
+       begin
+          if List.Length > 1 then
+             --  If a call to the formal "<" op references the container
+             --  during sorting, seeing an empty container seems preferable
+             --  to seeing an internally inconsistent container.
+             --
+             Update_Container (Empty);
+ 
+             Update_Container (Merge_Sort (List));
+          end if;
+       end Doubly_Linked_List_Sort;
+    end List_Descriptors;
+ end Ada.Containers.Stable_Sorting;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-costso.ads gcc-12.1.0/gcc/ada/libgnat/a-costso.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-costso.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-costso.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,71 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT LIBRARY COMPONENTS                         --
+ --                                                                          --
+ --         A D A . C O N T A I N E R S . S T A B L E _ S O R T I N G        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --                     Copyright (C) 1995-2022, AdaCore                     --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Stable_Sorting package
+ 
+ --  This package provides a generic stable sorting procedure that is
+ --  intended for use by the various doubly linked list container generics.
+ --  If a stable array sorting algorithm with better-than-quadratic worst
+ --  case execution time is ever needed, then it could also reside here.
+ 
+ private package Ada.Containers.Stable_Sorting is
+    pragma Annotate (CodePeer, Skip_Analysis);
+    pragma Pure;
+    pragma Remote_Types;
+ 
+    --  Stable sorting algorithms with N-log-N worst case execution time.
+ 
+    generic
+       type Node_Ref is private; -- access value or array index
+       Nil : Node_Ref;
+    package List_Descriptors is
+ 
+       type List_Descriptor is
+          record
+             First, Last : Node_Ref := Nil;
+             Length      : Count_Type := 0;
+          end record;
+ 
+       --  We use a nested generic here so that the inner generic can
+       --  refer to the List_Descriptor type.
+ 
+       generic
+          with function Next (N : Node_Ref) return Node_Ref is <>;
+          with procedure Set_Next (N : Node_Ref; Next : Node_Ref) is <>;
+          with procedure Set_Prev (N : Node_Ref; Prev : Node_Ref) is <>;
+          with function "<" (L, R : Node_Ref) return Boolean is <>;
+ 
+          with procedure Update_Container (List : List_Descriptor) is <>;
+       procedure Doubly_Linked_List_Sort (List : List_Descriptor);
+ 
+    end List_Descriptors;
+ 
+ end Ada.Containers.Stable_Sorting;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-crbltr.ads gcc-12.1.0/gcc/ada/libgnat/a-crbltr.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-crbltr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-crbltr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-crbtgk.adb gcc-12.1.0/gcc/ada/libgnat/a-crbtgk.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-crbtgk.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-crbtgk.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-crbtgk.ads gcc-12.1.0/gcc/ada/libgnat/a-crbtgk.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-crbtgk.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-crbtgk.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-crbtgo.adb gcc-12.1.0/gcc/ada/libgnat/a-crbtgo.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-crbtgo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-crbtgo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-crbtgo.ads gcc-12.1.0/gcc/ada/libgnat/a-crbtgo.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-crbtgo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-crbtgo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-crdlli.adb gcc-12.1.0/gcc/ada/libgnat/a-crdlli.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-crdlli.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-crdlli.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
***************
*** 27,32 ****
--- 27,34 ----
  -- This unit was originally developed by Matthew J Heaney.                  --
  ------------------------------------------------------------------------------
  
+ with Ada.Containers.Stable_Sorting; use Ada.Containers.Stable_Sorting;
+ 
  with System; use type System.Address;
  
  package body Ada.Containers.Restricted_Doubly_Linked_Lists is
*************** package body Ada.Containers.Restricted_D
*** 509,591 ****
  
        procedure Sort (Container : in out List) is
           N : Node_Array renames Container.Nodes;
- 
-          procedure Partition (Pivot, Back : Count_Type);
-          procedure Sort (Front, Back : Count_Type);
- 
-          ---------------
-          -- Partition --
-          ---------------
- 
-          procedure Partition (Pivot, Back : Count_Type) is
-             Node : Count_Type := N (Pivot).Next;
- 
-          begin
-             while Node /= Back loop
-                if N (Node).Element < N (Pivot).Element then
-                   declare
-                      Prev : constant Count_Type := N (Node).Prev;
-                      Next : constant Count_Type := N (Node).Next;
- 
-                   begin
-                      N (Prev).Next := Next;
- 
-                      if Next = 0 then
-                         Container.Last := Prev;
-                      else
-                         N (Next).Prev := Prev;
-                      end if;
- 
-                      N (Node).Next := Pivot;
-                      N (Node).Prev := N (Pivot).Prev;
- 
-                      N (Pivot).Prev := Node;
- 
-                      if N (Node).Prev = 0 then
-                         Container.First := Node;
-                      else
-                         N (N (Node).Prev).Next := Node;
-                      end if;
- 
-                      Node := Next;
-                   end;
- 
-                else
-                   Node := N (Node).Next;
-                end if;
-             end loop;
-          end Partition;
- 
-          ----------
-          -- Sort --
-          ----------
- 
-          procedure Sort (Front, Back : Count_Type) is
-             Pivot : constant Count_Type :=
-               (if Front = 0 then Container.First else N (Front).Next);
-          begin
-             if Pivot /= Back then
-                Partition (Pivot, Back);
-                Sort (Front, Pivot);
-                Sort (Pivot, Back);
-             end if;
-          end Sort;
- 
-       --  Start of processing for Sort
- 
        begin
           if Container.Length <= 1 then
              return;
           end if;
  
-          pragma Assert (N (Container.First).Prev = 0);
-          pragma Assert (N (Container.Last).Next = 0);
- 
  --       if Container.Busy > 0 then
  --          raise Program_Error;
  --       end if;
  
!          Sort (Front => 0, Back => 0);
  
           pragma Assert (N (Container.First).Prev = 0);
           pragma Assert (N (Container.Last).Next = 0);
--- 511,563 ----
  
        procedure Sort (Container : in out List) is
           N : Node_Array renames Container.Nodes;
        begin
           if Container.Length <= 1 then
              return;
           end if;
  
  --       if Container.Busy > 0 then
  --          raise Program_Error;
  --       end if;
  
!          declare
!             package Descriptors is new List_Descriptors
!               (Node_Ref => Count_Type, Nil => 0);
!             use Descriptors;
! 
!             function Next (Idx : Count_Type) return Count_Type is
!               (N (Idx).Next);
!             procedure Set_Next (Idx : Count_Type; Next : Count_Type)
!               with Inline;
!             procedure Set_Prev (Idx : Count_Type; Prev : Count_Type)
!               with Inline;
!             function "<" (L, R : Count_Type) return Boolean is
!               (N (L).Element < N (R).Element);
!             procedure Update_Container (List : List_Descriptor) with Inline;
! 
!             procedure Set_Next (Idx : Count_Type; Next : Count_Type) is
!             begin
!                N (Idx).Next := Next;
!             end Set_Next;
! 
!             procedure Set_Prev (Idx : Count_Type; Prev : Count_Type) is
!             begin
!                N (Idx).Prev := Prev;
!             end Set_Prev;
! 
!             procedure Update_Container (List : List_Descriptor) is
!             begin
!                Container.First  := List.First;
!                Container.Last   := List.Last;
!                Container.Length := List.Length;
!             end Update_Container;
! 
!             procedure Sort_List is new Doubly_Linked_List_Sort;
!          begin
!             Sort_List (List_Descriptor'(First  => Container.First,
!                                         Last   => Container.Last,
!                                         Length => Container.Length));
!          end;
  
           pragma Assert (N (Container.First).Prev = 0);
           pragma Assert (N (Container.Last).Next = 0);
*************** package body Ada.Containers.Restricted_D
*** 658,664 ****
        Count     : Count_Type := 1)
     is
        Position : Cursor;
-       pragma Unreferenced (Position);
     begin
        Insert (Container, Before, New_Item, Position, Count);
     end Insert;
--- 630,635 ----
*************** package body Ada.Containers.Restricted_D
*** 1345,1351 ****
        pragma Assert (Vet (Position), "bad cursor in Update_Element");
  
        declare
!          N  : Node_Type renames Container.Nodes (Position.Node);
  
        begin
           Process (N.Element);
--- 1316,1322 ----
        pragma Assert (Vet (Position), "bad cursor in Update_Element");
  
        declare
!          N : Node_Type renames Container.Nodes (Position.Node);
  
        begin
           Process (N.Element);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-crdlli.ads gcc-12.1.0/gcc/ada/libgnat/a-crdlli.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-crdlli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-crdlli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-csquin.ads gcc-12.1.0/gcc/ada/libgnat/a-csquin.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-csquin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-csquin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cuprqu.adb gcc-12.1.0/gcc/ada/libgnat/a-cuprqu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cuprqu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cuprqu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cuprqu.ads gcc-12.1.0/gcc/ada/libgnat/a-cuprqu.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cuprqu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cuprqu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cusyqu.adb gcc-12.1.0/gcc/ada/libgnat/a-cusyqu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-cusyqu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cusyqu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cusyqu.ads gcc-12.1.0/gcc/ada/libgnat/a-cusyqu.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cusyqu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cusyqu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cwila1.ads gcc-12.1.0/gcc/ada/libgnat/a-cwila1.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cwila1.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cwila1.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-cwila9.ads gcc-12.1.0/gcc/ada/libgnat/a-cwila9.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-cwila9.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-cwila9.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-decima.adb gcc-12.1.0/gcc/ada/libgnat/a-decima.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-decima.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-decima.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-decima.ads gcc-12.1.0/gcc/ada/libgnat/a-decima.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-decima.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-decima.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-decima__128.ads gcc-12.1.0/gcc/ada/libgnat/a-decima__128.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-decima__128.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-decima__128.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, Free Software Foundation, Inc.            --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-dhfina.adb gcc-12.1.0/gcc/ada/libgnat/a-dhfina.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-dhfina.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-dhfina.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-dhfina.ads gcc-12.1.0/gcc/ada/libgnat/a-dhfina.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-dhfina.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-dhfina.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-diocst.adb gcc-12.1.0/gcc/ada/libgnat/a-diocst.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-diocst.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-diocst.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-diocst.ads gcc-12.1.0/gcc/ada/libgnat/a-diocst.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-diocst.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-diocst.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-direct.adb gcc-12.1.0/gcc/ada/libgnat/a-direct.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-direct.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-direct.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
***************
*** 31,42 ****
  
  with Ada.Calendar;               use Ada.Calendar;
  with Ada.Characters.Handling;    use Ada.Characters.Handling;
  with Ada.Directories.Validity;   use Ada.Directories.Validity;
  with Ada.Directories.Hierarchical_File_Names;
! use Ada.Directories.Hierarchical_File_Names;
  with Ada.Strings.Fixed;
  with Ada.Strings.Maps;           use Ada.Strings.Maps;
  with Ada.Strings.Unbounded;      use Ada.Strings.Unbounded;
  with Ada.Unchecked_Deallocation;
  
  with Interfaces.C;
--- 31,44 ----
  
  with Ada.Calendar;               use Ada.Calendar;
  with Ada.Characters.Handling;    use Ada.Characters.Handling;
+ with Ada.Containers.Vectors;
  with Ada.Directories.Validity;   use Ada.Directories.Validity;
  with Ada.Directories.Hierarchical_File_Names;
! use  Ada.Directories.Hierarchical_File_Names;
  with Ada.Strings.Fixed;
  with Ada.Strings.Maps;           use Ada.Strings.Maps;
  with Ada.Strings.Unbounded;      use Ada.Strings.Unbounded;
+ with Ada.Unchecked_Conversion;
  with Ada.Unchecked_Deallocation;
  
  with Interfaces.C;
*************** package body Ada.Directories is
*** 78,117 ****
     --  Result returned from C_Modification_Time call when routine unable to get
     --  file modification time.
  
!    type Search_Data is record
!       Is_Valid      : Boolean := False;
!       Name          : Unbounded_String;
!       Pattern       : Regexp;
!       Filter        : Filter_Type;
!       Dir           : Dir_Type_Value := No_Dir;
!       Entry_Fetched : Boolean := False;
!       Dir_Entry     : Directory_Entry_Type;
     end record;
!    --  The current state of a search
  
!    Empty_String : constant String := (1 .. 0 => ASCII.NUL);
!    --  Empty string, returned by function Extension when there is no extension
  
!    procedure Free is new Ada.Unchecked_Deallocation (Search_Data, Search_Ptr);
  
!    procedure Close (Dir : Dir_Type_Value);
  
     function File_Exists (Name : String) return Boolean;
     --  Returns True if the named file exists
  
-    procedure Fetch_Next_Entry (Search : Search_Type);
-    --  Get the next entry in a directory, setting Entry_Fetched if successful
-    --  or resetting Is_Valid if not.
- 
     procedure Start_Search_Internal
!      (Search                 : in out Search_Type;
!       Directory              : String;
!       Pattern                : String;
!       Filter                 : Filter_Type := (others => True);
!       Force_Case_Insensitive : Boolean);
!    --  Similar to Start_Search except we can force a search to be
!    --  case-insensitive, which is important for detecting the name-case
!    --  equivalence for a given directory.
  
     ---------------
     -- Base_Name --
--- 80,135 ----
     --  Result returned from C_Modification_Time call when routine unable to get
     --  file modification time.
  
!    Empty_String : constant String := "";
!    --  Empty string, returned by function Extension when there is no extension
! 
!    ----------------------------
!    -- Directory Search Types --
!    ----------------------------
! 
!    package Directory_Vectors is new
!      Ada.Containers.Vectors
!        (Index_Type   => Natural,
!         Element_Type => Directory_Entry_Type);
!    use Directory_Vectors;
!    --  Used to store the results of the directory search
! 
!    type Dir_Contents_Ptr is access Directory_Vectors.Vector;
! 
!    procedure Free is new Ada.Unchecked_Deallocation
!      (Directory_Vectors.Vector, Dir_Contents_Ptr);
!    --  Directory_Vectors.Vector deallocation routine
! 
!    type Search_State is new Ada.Finalization.Controlled with record
!       Dir_Contents : Dir_Contents_Ptr;
!       Next_Entry   : Cursor;
     end record;
!    --  The Search_State consists of a vector of directory items that match the
!    --  search pattern and filter, and a cursor pointing to the next item of the
!    --  vector to be returned to the user.
  
!    procedure Free is new Ada.Unchecked_Deallocation (Search_State, Search_Ptr);
!    --  Search_State deallocation routine
  
!    Dir_Vector_Initial_Size : constant := 100;
!    --  Initial size for the Dir_Contents vector, sized to ensure the vector
!    --  does not need to be reallocated for reasonably sized directory searches.
  
!    ------------------------
!    -- Helper Subprograms --
!    ------------------------
  
     function File_Exists (Name : String) return Boolean;
     --  Returns True if the named file exists
  
     procedure Start_Search_Internal
!      (Search           : in out Search_Type;
!       Directory        : String;
!       Pattern          : String;
!       Filter           : Filter_Type := [others => True];
!       Case_Insensitive : Boolean);
!    --  Similar to Start_Search except we can specify a case-insensitive search.
!    --  This enables detecting the name-case equivalence for a given directory.
  
     ---------------
     -- Base_Name --
*************** package body Ada.Directories is
*** 137,157 ****
        return Simple;
     end Base_Name;
  
-    -----------
-    -- Close --
-    -----------
- 
-    procedure Close (Dir : Dir_Type_Value) is
-       Discard : Integer;
-       pragma Warnings (Off, Discard);
- 
-       function closedir (directory : DIRs) return Integer;
-       pragma Import (C, closedir, "__gnat_closedir");
- 
-    begin
-       Discard := closedir (DIRs (Dir));
-    end Close;
- 
     -------------
     -- Compose --
     -------------
--- 155,160 ----
*************** package body Ada.Directories is
*** 378,384 ****
       (New_Directory : String;
        Form          : String := "")
     is
!       C_Dir_Name : constant String := New_Directory & ASCII.NUL;
  
     begin
        --  First, the invalid case
--- 381,387 ----
       (New_Directory : String;
        Form          : String := "")
     is
!       Dir_Name_C : constant String := New_Directory & ASCII.NUL;
  
     begin
        --  First, the invalid case
*************** package body Ada.Directories is
*** 411,417 ****
                 raise Use_Error with "invalid Form";
              end if;
  
!             if CRTL.mkdir (C_Dir_Name, Encoding) /= 0 then
                 raise Use_Error with
                   "creation of new directory """ & New_Directory & """ failed";
              end if;
--- 414,420 ----
                 raise Use_Error with "invalid Form";
              end if;
  
!             if CRTL.mkdir (Dir_Name_C, Encoding) /= 0 then
                 raise Use_Error with
                   "creation of new directory """ & New_Directory & """ failed";
              end if;
*************** package body Ada.Directories is
*** 553,561 ****
  
        else
           declare
!             C_Dir_Name : constant String := Directory & ASCII.NUL;
           begin
!             if rmdir (C_Dir_Name) /= 0 then
                 raise Use_Error with
                   "deletion of directory """ & Directory & """ failed";
              end if;
--- 556,564 ----
  
        else
           declare
!             Dir_Name_C : constant String := Directory & ASCII.NUL;
           begin
!             if rmdir (Dir_Name_C) /= 0 then
                 raise Use_Error with
                   "deletion of directory """ & Directory & """ failed";
              end if;
*************** package body Ada.Directories is
*** 640,649 ****
           End_Search (Search);
  
           declare
!             C_Dir_Name : constant String := Directory & ASCII.NUL;
  
           begin
!             if rmdir (C_Dir_Name) /= 0 then
                 raise Use_Error with
                   "directory tree rooted at """ &
                     Directory & """ could not be deleted";
--- 643,652 ----
           End_Search (Search);
  
           declare
!             Dir_Name_C : constant String := Directory & ASCII.NUL;
  
           begin
!             if rmdir (Dir_Name_C) /= 0 then
                 raise Use_Error with
                   "directory tree rooted at """ &
                     Directory & """ could not be deleted";
*************** package body Ada.Directories is
*** 710,850 ****
        end if;
     end Extension;
  
-    ----------------------
-    -- Fetch_Next_Entry --
-    ----------------------
- 
-    procedure Fetch_Next_Entry (Search : Search_Type) is
-       Name : String (1 .. NAME_MAX);
-       Last : Natural;
- 
-       Kind : File_Kind := Ordinary_File;
-       --  Initialized to avoid a compilation warning
- 
-       Filename_Addr : Address;
-       Filename_Len  : aliased Integer;
- 
-       Buffer : array (1 .. SIZEOF_struct_dirent_alloc) of Character;
- 
-       function readdir_gnat
-         (Directory : Address;
-          Buffer    : Address;
-          Last      : not null access Integer) return Address;
-       pragma Import (C, readdir_gnat, "__gnat_readdir");
- 
-    begin
-       --  Search.Value.Is_Valid is always True when Fetch_Next_Entry is called
- 
-       loop
-          Filename_Addr :=
-            readdir_gnat
-              (Address (Search.Value.Dir),
-               Buffer'Address,
-               Filename_Len'Access);
- 
-          --  If no matching entry is found, set Is_Valid to False
- 
-          if Filename_Addr = Null_Address then
-             Search.Value.Is_Valid := False;
-             exit;
-          end if;
- 
-          if Filename_Len > Name'Length then
-             raise Use_Error with "file name too long";
-          end if;
- 
-          declare
-             subtype Name_String is String (1 .. Filename_Len);
-             Dent_Name : Name_String;
-             for Dent_Name'Address use Filename_Addr;
-             pragma Import (Ada, Dent_Name);
- 
-          begin
-             Last := Filename_Len;
-             Name (1 .. Last) := Dent_Name;
-          end;
- 
-          --  Check if the entry matches the pattern
- 
-          if Match (Name (1 .. Last), Search.Value.Pattern) then
-             declare
-                C_Full_Name : constant String :=
-                                Compose (To_String (Search.Value.Name),
-                                         Name (1 .. Last)) & ASCII.NUL;
-                Full_Name   : String renames
-                                C_Full_Name
-                                  (C_Full_Name'First .. C_Full_Name'Last - 1);
-                Found       : Boolean := False;
-                Attr        : aliased File_Attributes;
-                Exists      : Integer;
-                Error       : Integer;
- 
-             begin
-                Reset_Attributes (Attr'Access);
-                Exists := File_Exists_Attr (C_Full_Name'Address, Attr'Access);
-                Error  := Error_Attributes (Attr'Access);
- 
-                if Error /= 0 then
-                   raise Use_Error
-                     with Full_Name & ": " & Errno_Message (Err => Error);
-                end if;
- 
-                if Exists = 1 then
-                   --  Ignore special directories "." and ".."
- 
-                   if (Full_Name'Length > 1
-                        and then
-                          Full_Name
-                             (Full_Name'Last - 1 .. Full_Name'Last) = "\.")
-                     or else
-                      (Full_Name'Length > 2
-                         and then
-                           Full_Name
-                             (Full_Name'Last - 2 .. Full_Name'Last) = "\..")
-                   then
-                      Exists := 0;
-                   end if;
- 
-                   --  Now check if the file kind matches the filter
- 
-                   if Is_Regular_File_Attr
-                        (C_Full_Name'Address, Attr'Access) = 1
-                   then
-                      if Search.Value.Filter (Ordinary_File) then
-                         Kind := Ordinary_File;
-                         Found := True;
-                      end if;
- 
-                   elsif Is_Directory_Attr
-                           (C_Full_Name'Address, Attr'Access) = 1
-                   then
-                      if Search.Value.Filter (Directory) then
-                         Kind := Directory;
-                         Found := True;
-                      end if;
- 
-                   elsif Search.Value.Filter (Special_File) then
-                      Kind := Special_File;
-                      Found := True;
-                   end if;
- 
-                   --  If it does, update Search and return
- 
-                   if Found then
-                      Search.Value.Entry_Fetched := True;
-                      Search.Value.Dir_Entry :=
-                        (Is_Valid => True,
-                         Simple   => To_Unbounded_String (Name (1 .. Last)),
-                         Full     => To_Unbounded_String (Full_Name),
-                         Kind     => Kind);
-                      exit;
-                   end if;
-                end if;
-             end;
-          end if;
-       end loop;
-    end Fetch_Next_Entry;
- 
     -----------------
     -- File_Exists --
     -----------------
--- 713,718 ----
*************** package body Ada.Directories is
*** 867,881 ****
  
     procedure Finalize (Search : in out Search_Type) is
     begin
!       if Search.Value /= null then
! 
!          --  Close the directory, if one is open
! 
!          if Search.Value.Dir /= No_Dir then
!             Close (Search.Value.Dir);
!          end if;
! 
!          Free (Search.Value);
        end if;
     end Finalize;
  
--- 735,743 ----
  
     procedure Finalize (Search : in out Search_Type) is
     begin
!       if Search.State /= null then
!          Free (Search.State.Dir_Contents);
!          Free (Search.State);
        end if;
     end Finalize;
  
*************** package body Ada.Directories is
*** 910,924 ****
  
     function Full_Name (Directory_Entry : Directory_Entry_Type) return String is
     begin
!       --  First, the invalid case
  
!       if not Directory_Entry.Is_Valid then
           raise Status_Error with "invalid directory entry";
- 
        else
!          --  The value to return has already been computed
! 
!          return To_String (Directory_Entry.Full);
        end if;
     end Full_Name;
  
--- 772,784 ----
  
     function Full_Name (Directory_Entry : Directory_Entry_Type) return String is
     begin
!       --  If the Directory_Entry is valid return the full name contained in the
!       --  entry record.
  
!       if not Directory_Entry.Valid then
           raise Status_Error with "invalid directory entry";
        else
!          return To_String (Directory_Entry.Full_Name);
        end if;
     end Full_Name;
  
*************** package body Ada.Directories is
*** 931,958 ****
        Directory_Entry : out Directory_Entry_Type)
     is
     begin
!       --  First, the invalid case
  
!       if Search.Value = null or else not Search.Value.Is_Valid then
!          raise Status_Error with "invalid search";
        end if;
  
!       --  Fetch the next entry, if needed
  
!       if not Search.Value.Entry_Fetched then
!          Fetch_Next_Entry (Search);
        end if;
  
!       --  It is an error if no valid entry is found
  
!       if not Search.Value.Is_Valid then
!          raise Status_Error with "no next entry";
  
!       else
!          --  Reset Entry_Fetched and return the entry
  
!          Search.Value.Entry_Fetched := False;
!          Directory_Entry := Search.Value.Dir_Entry;
        end if;
     end Get_Next_Entry;
  
--- 791,824 ----
        Directory_Entry : out Directory_Entry_Type)
     is
     begin
!       --  A Search with no state implies the user has not called Start_Search
  
!       if Search.State = null then
!          raise Status_Error with "search not started";
        end if;
  
!       --  If the next entry is No_Element it means the search is finished and
!       --  there are no more entries to return.
  
!       if Search.State.Next_Entry = No_Element then
!          raise Status_Error with "no more entries";
        end if;
  
!       --  Populate Directory_Entry with the next entry and update the search
!       --  state.
  
!       Directory_Entry := Element (Search.State.Next_Entry);
!       Next (Search.State.Next_Entry);
  
!       --  If Start_Search received a non-zero error code when trying to read
!       --  the file attributes of this entry, raise an Use_Error so the user
!       --  is aware that it was not possible to retrieve the attributes of this
!       --  entry.
  
!       if Directory_Entry.Attr_Error_Code /= 0 then
!          raise Use_Error
!            with To_String (Directory_Entry.Full_Name) & ": " &
!              Errno_Message (Err => Directory_Entry.Attr_Error_Code);
        end if;
     end Get_Next_Entry;
  
*************** package body Ada.Directories is
*** 982,995 ****
  
     function Kind (Directory_Entry : Directory_Entry_Type) return File_Kind is
     begin
!       --  First, the invalid case
! 
!       if not Directory_Entry.Is_Valid then
           raise Status_Error with "invalid directory entry";
- 
        else
-          --  The value to return has already be computed
- 
           return Directory_Entry.Kind;
        end if;
     end Kind;
--- 848,856 ----
  
     function Kind (Directory_Entry : Directory_Entry_Type) return File_Kind is
     begin
!       if not Directory_Entry.Valid then
           raise Status_Error with "invalid directory entry";
        else
           return Directory_Entry.Kind;
        end if;
     end Kind;
*************** package body Ada.Directories is
*** 1025,1039 ****
       (Directory_Entry : Directory_Entry_Type) return Ada.Calendar.Time
     is
     begin
!       --  First, the invalid case
  
!       if not Directory_Entry.Is_Valid then
           raise Status_Error with "invalid directory entry";
- 
        else
!          --  The value to return has already be computed
! 
!          return Modification_Time (To_String (Directory_Entry.Full));
        end if;
     end Modification_Time;
  
--- 886,900 ----
       (Directory_Entry : Directory_Entry_Type) return Ada.Calendar.Time
     is
     begin
!       --  If the Directory_Entry is valid return the modification time
!       --  contained in the entry record. The modification time is recorded in
!       --  the entry since its cheap to query all the file the attributes in
!       --  one read when the directory is searched.
  
!       if not Directory_Entry.Valid then
           raise Status_Error with "invalid directory entry";
        else
!          return Directory_Entry.Modification_Time;
        end if;
     end Modification_Time;
  
*************** package body Ada.Directories is
*** 1043,1061 ****
  
     function More_Entries (Search : Search_Type) return Boolean is
     begin
!       if Search.Value = null then
!          return False;
! 
!       elsif Search.Value.Is_Valid then
! 
!          --  Fetch the next entry, if needed
  
!          if not Search.Value.Entry_Fetched then
!             Fetch_Next_Entry (Search);
!          end if;
        end if;
- 
-       return Search.Value.Is_Valid;
     end More_Entries;
  
     ---------------------------
--- 904,920 ----
  
     function More_Entries (Search : Search_Type) return Boolean is
     begin
!       --  If the vector cursor Search.State.Next_Entry points to an element in
!       --  Search.State.Dir_Contents then there is another entry to return.
!       --  Otherwise, we return False.
  
!       if Search.State = null then
!          return False;
!       elsif Search.State.Next_Entry = No_Element then
!          return False;
!       else
!          return True;
        end if;
     end More_Entries;
  
     ---------------------------
*************** package body Ada.Directories is
*** 1094,1100 ****
          (Search    => S,
           Directory => To_String (Dir_Path),
           Pattern   => "",
!          Filter    => (Directory => False, others => True));
  
        loop
           Get_Next_Entry (S, Test_File);
--- 953,959 ----
          (Search    => S,
           Directory => To_String (Dir_Path),
           Pattern   => "",
!          Filter    => [Directory => False, others => True]);
  
        loop
           Get_Next_Entry (S, Test_File);
*************** package body Ada.Directories is
*** 1114,1121 ****
          (Search                 => S,
           Directory              => To_String (Dir_Path),
           Pattern                => Simple_Name (Test_File),
!          Filter                 => (Directory => False, others => True),
!          Force_Case_Insensitive => True);
  
        --  We will find at least one match due to the search hitting our test
        --  file.
--- 973,980 ----
          (Search                 => S,
           Directory              => To_String (Dir_Path),
           Pattern                => Simple_Name (Test_File),
!          Filter                 => [Directory => False, others => True],
!          Case_Insensitive => True);
  
        --  We will find at least one match due to the search hitting our test
        --  file.
*************** package body Ada.Directories is
*** 1215,1221 ****
     procedure Search
       (Directory : String;
        Pattern   : String;
!       Filter    : Filter_Type := (others => True);
        Process   : not null access procedure
                                      (Directory_Entry : Directory_Entry_Type))
     is
--- 1074,1080 ----
     procedure Search
       (Directory : String;
        Pattern   : String;
!       Filter    : Filter_Type := [others => True];
        Process   : not null access procedure
                                      (Directory_Entry : Directory_Entry_Type))
     is
*************** package body Ada.Directories is
*** 1237,1243 ****
     -------------------
  
     procedure Set_Directory (Directory : String) is
!       C_Dir_Name : constant String := Directory & ASCII.NUL;
     begin
        if not Is_Valid_Path_Name (Directory) then
           raise Name_Error with
--- 1096,1102 ----
     -------------------
  
     procedure Set_Directory (Directory : String) is
!       Dir_Name_C : constant String := Directory & ASCII.NUL;
     begin
        if not Is_Valid_Path_Name (Directory) then
           raise Name_Error with
*************** package body Ada.Directories is
*** 1247,1253 ****
           raise Name_Error with
             "directory """ & Directory & """ does not exist";
  
!       elsif chdir (C_Dir_Name) /= 0 then
           raise Name_Error with
             "could not set to designated directory """ & Directory & '"';
        end if;
--- 1106,1112 ----
           raise Name_Error with
             "directory """ & Directory & """ does not exist";
  
!       elsif chdir (Dir_Name_C) /= 0 then
           raise Name_Error with
             "could not set to designated directory """ & Directory & '"';
        end if;
*************** package body Ada.Directories is
*** 1344,1358 ****
     function Simple_Name
       (Directory_Entry : Directory_Entry_Type) return String is
     begin
!       --  First, the invalid case
  
!       if not Directory_Entry.Is_Valid then
           raise Status_Error with "invalid directory entry";
- 
        else
!          --  The value to return has already be computed
! 
!          return To_String (Directory_Entry.Simple);
        end if;
     end Simple_Name;
  
--- 1203,1215 ----
     function Simple_Name
       (Directory_Entry : Directory_Entry_Type) return String is
     begin
!       --  If the Directory_Entry is valid return the simple name contained in
!       --  the entry record.
  
!       if not Directory_Entry.Valid then
           raise Status_Error with "invalid directory entry";
        else
!          return To_String (Directory_Entry.Name);
        end if;
     end Simple_Name;
  
*************** package body Ada.Directories is
*** 1381,1395 ****
  
     function Size (Directory_Entry : Directory_Entry_Type) return File_Size is
     begin
!       --  First, the invalid case
  
!       if not Directory_Entry.Is_Valid then
           raise Status_Error with "invalid directory entry";
- 
        else
!          --  The value to return has already be computed
! 
!          return Size (To_String (Directory_Entry.Full));
        end if;
     end Size;
  
--- 1238,1252 ----
  
     function Size (Directory_Entry : Directory_Entry_Type) return File_Size is
     begin
!       --  If the Directory_Entry is valid return the size contained in the
!       --  entry record. The size is recorded in the entry since it is cheap to
!       --  query all the file the attributes in one read when the directory is
!       --  searched.
  
!       if not Directory_Entry.Valid then
           raise Status_Error with "invalid directory entry";
        else
!          return Directory_Entry.Size;
        end if;
     end Size;
  
*************** package body Ada.Directories is
*** 1401,1407 ****
       (Search    : in out Search_Type;
        Directory : String;
        Pattern   : String;
!       Filter    : Filter_Type := (others => True))
     is
     begin
        Start_Search_Internal (Search, Directory, Pattern, Filter, False);
--- 1258,1264 ----
       (Search    : in out Search_Type;
        Directory : String;
        Pattern   : String;
!       Filter    : Filter_Type := [others => True])
     is
     begin
        Start_Search_Internal (Search, Directory, Pattern, Filter, False);
*************** package body Ada.Directories is
*** 1412,1480 ****
     ---------------------------
  
     procedure Start_Search_Internal
!      (Search                 : in out Search_Type;
!       Directory              : String;
!       Pattern                : String;
!       Filter                 : Filter_Type := (others => True);
!       Force_Case_Insensitive : Boolean)
     is
!       function opendir (file_name : String) return DIRs;
!       pragma Import (C, opendir, "__gnat_opendir");
  
!       C_File_Name : constant String := Directory & ASCII.NUL;
!       Pat         : Regexp;
!       Dir         : Dir_Type_Value;
  
     begin
!       --  First, the invalid case Name_Error
  
        if not Is_Directory (Directory) then
           raise Name_Error with
             "unknown directory """ & Simple_Name (Directory) & '"';
        end if;
  
!       --  Check the pattern
  
        declare
           Case_Sensitive : Boolean := Is_Path_Name_Case_Sensitive;
        begin
!          if Force_Case_Insensitive then
              Case_Sensitive := False;
           end if;
  
!          Pat :=
!            Compile
!              (Pattern,
!               Glob           => True,
!               Case_Sensitive => Case_Sensitive);
        exception
           when Error_In_Regexp =>
-             Free (Search.Value);
              raise Name_Error with "invalid pattern """ & Pattern & '"';
        end;
  
!       Dir := Dir_Type_Value (opendir (C_File_Name));
  
!       if Dir = No_Dir then
           raise Use_Error with
             "unreadable directory """ & Simple_Name (Directory) & '"';
        end if;
  
!       --  If needed, finalize Search
  
        Finalize (Search);
  
!       --  Allocate the default data
  
!       Search.Value := new Search_Data;
  
!       --  Initialize some Search components
  
-       Search.Value.Filter   := Filter;
-       Search.Value.Name     := To_Unbounded_String (Full_Name (Directory));
-       Search.Value.Pattern  := Pat;
-       Search.Value.Dir      := Dir;
-       Search.Value.Is_Valid := True;
     end Start_Search_Internal;
  
  end Ada.Directories;
--- 1269,1474 ----
     ---------------------------
  
     procedure Start_Search_Internal
!      (Search           : in out Search_Type;
!       Directory        : String;
!       Pattern          : String;
!       Filter           : Filter_Type := [others => True];
!       Case_Insensitive : Boolean)
     is
!       function closedir (Directory : DIRs) return Integer
!         with Import, External_Name => "__gnat_closedir", Convention => C;
!       --  C lib function to close Directory
  
!       function opendir (Directory : String) return DIRs
!         with Import, External_Name => "__gnat_opendir", Convention => C;
!       --  C lib function to open Directory
! 
!       function readdir_gnat
!         (Directory : Address;
!          Buffer    : Address;
!          Last      : not null access Integer) return Address
!         with Import, External_Name => "__gnat_readdir", Convention => C;
!       --  Read the next item in Directory
! 
!       Dir_Name_C       : constant String := Directory & ASCII.NUL;
!       Dir_Entry_Buffer : array (1 .. SIZEOF_struct_dirent_alloc) of Character;
!       Dir_Pointer      : Dir_Type_Value;
!       File_Name_Addr   : Address;
!       File_Name_Len    : aliased Integer;
!       Pattern_Regex    : Regexp;
! 
!       Call_Result      : Integer;
!       pragma Warnings (Off, Call_Result);
!       --  Result of calling a C function that returns a status
  
     begin
!       --  Check that Directory is a valid directory
  
        if not Is_Directory (Directory) then
           raise Name_Error with
             "unknown directory """ & Simple_Name (Directory) & '"';
        end if;
  
!       --  Check and compile the pattern
  
        declare
           Case_Sensitive : Boolean := Is_Path_Name_Case_Sensitive;
        begin
!          if Case_Insensitive then
              Case_Sensitive := False;
           end if;
  
!          Pattern_Regex :=
!            Compile (Pattern, Glob => True, Case_Sensitive => Case_Sensitive);
        exception
           when Error_In_Regexp =>
              raise Name_Error with "invalid pattern """ & Pattern & '"';
        end;
  
!       --  Open Directory
  
!       Dir_Pointer := Dir_Type_Value (opendir (Dir_Name_C));
! 
!       if Dir_Pointer = No_Dir then
           raise Use_Error with
             "unreadable directory """ & Simple_Name (Directory) & '"';
        end if;
  
!       --  If needed, finalize Search. Note: we should probably raise an
!       --  exception here if Search belongs to an existing search rather than
!       --  quietly end it. However, we first need to check that it won't break
!       --  existing software.
  
        Finalize (Search);
  
!       --  Allocate and initialize the search state
  
!       Search.State := new Search_State'
!         (Ada.Finalization.Controlled with
!          Dir_Contents  => new Vector,
!          Next_Entry    => No_Element);
  
!       --  Increase the size of the Dir_Contents vector so it does not need to
!       --  grow for most reasonable directory searches.
! 
!       Search.State.Dir_Contents.Reserve_Capacity (Dir_Vector_Initial_Size);
! 
!       --  Read the contents of Directory into Search.State
! 
!       loop
!          --  Get next item in the directory
! 
!          File_Name_Addr :=
!            readdir_gnat
!              (Address (Dir_Pointer),
!               Dir_Entry_Buffer'Address,
!               File_Name_Len'Access);
! 
!          exit when File_Name_Addr = Null_Address;
! 
!          --  If the file name matches the Pattern and the file type matches
!          --  the Filter add it to our search vector.
! 
!          declare
!             subtype File_Name_String is String (1 .. File_Name_Len);
! 
!             File_Name : constant File_Name_String
!               with Import, Address => File_Name_Addr;
! 
!          begin
!             if Match (File_Name, Pattern_Regex) then
!                declare
!                   Path_C : constant String :=
!                              Compose (Directory, File_Name) & ASCII.NUL;
!                   Path   : String renames
!                              Path_C (Path_C'First .. Path_C'Last - 1);
!                   Found  : Boolean := False;
!                   Attr   : aliased File_Attributes;
!                   Exists : Integer;
!                   Error  : Integer;
!                   Kind   : File_Kind;
!                   Size   : File_Size;
! 
!                begin
!                   --  Get the file attributes for the directory item
! 
!                   Reset_Attributes (Attr'Access);
!                   Exists := File_Exists_Attr (Path_C'Address, Attr'Access);
!                   Error  := Error_Attributes (Attr'Access);
! 
!                   --  If there was an error when trying to read the attributes
!                   --  of a Directory entry, record the error so it can be
!                   --  propagated to the user when they interate through the
!                   --  directory results.
! 
!                   if Error /= 0 then
!                      Search.State.Dir_Contents.Append
!                        (Directory_Entry_Type'
!                           [Valid           => True,
!                            Name            => To_Unbounded_String (File_Name),
!                            Full_Name       => To_Unbounded_String (Path),
!                            Attr_Error_Code => Error,
!                            others          => <>]);
! 
!                   --  Otherwise, if the file exists and matches the file kind
!                   --  Filter, add the file to the search results. We capture
!                   --  the size and modification time here as we have already
!                   --  the entry's attributes above.
! 
!                   elsif Exists = 1 then
!                      if Is_Regular_File_Attr (Path_C'Address, Attr'Access) = 1
!                        and then Filter (Ordinary_File)
!                      then
!                         Found := True;
!                         Kind := Ordinary_File;
!                         Size :=
!                           File_Size
!                             (File_Length_Attr
!                                (-1, Path_C'Address, Attr'Access));
! 
!                      elsif Is_Directory_Attr (Path_C'Address, Attr'Access) = 1
!                        and then Filter (File_Kind'First)
!                      then
!                         Found := True;
!                         Kind := File_Kind'First;
!                         --  File_Kind'First is used instead of Directory due
!                         --  to a name overload issue with the procedure
!                         --  parameter Directory.
!                         Size := 0;
! 
!                      elsif Filter (Special_File) then
!                         Found := True;
!                         Kind := Special_File;
!                         Size := 0;
!                      end if;
! 
!                      if Found then
!                         Search.State.Dir_Contents.Append
!                           (Directory_Entry_Type'
!                              [Valid             => True,
!                               Name              =>
!                                 To_Unbounded_String (File_Name),
!                               Full_Name         => To_Unbounded_String (Path),
!                               Attr_Error_Code   => 0,
!                               Kind              => Kind,
!                               Modification_Time => Modification_Time (Path),
!                               Size              => Size]);
!                      end if;
!                   end if;
!                end;
!             end if;
!          end;
!       end loop;
! 
!       --  Set the first entry to be returned to the user to be the first
!       --  element of the Dir_Contents vector. If no items were found, First
!       --  will return No_Element, which signals
!       Search.State.Next_Entry := Search.State.Dir_Contents.First;
! 
!       --  Search is finished, close Directory
! 
!       Call_Result := closedir (DIRs (Dir_Pointer));
  
     end Start_Search_Internal;
  
  end Ada.Directories;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-direct.ads gcc-12.1.0/gcc/ada/libgnat/a-direct.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-direct.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-direct.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived for use with GNAT from AI-00248,  which is --
  -- expected to be a part of a future expected revised Ada Reference Manual. --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived for use with GNAT from AI-00248,  which is --
  -- expected to be a part of a future expected revised Ada Reference Manual. --
*************** package Ada.Directories is
*** 366,385 ****
       (Search    : in out Search_Type;
        Directory : String;
        Pattern   : String;
!       Filter    : Filter_Type := (others => True));
     --  Starts a search in the directory entry in the directory named by
     --  Directory for entries matching Pattern. Pattern represents a file name
     --  matching pattern. If Pattern is null, all items in the directory are
     --  matched; otherwise, the interpretation of Pattern is implementation-
     --  defined. Only items which match Filter will be returned. After a
!    --  successful call on Start_Search, the object Search may have entries
!    --  available, but it may have no entries available if no files or
!    --  directories match Pattern and Filter. The exception Name_Error is
!    --  propagated if the string given by Directory does not identify an
!    --  existing directory, or if Pattern does not allow the identification of
!    --  any possible external file or directory. The exception Use_Error is
!    --  propagated if the external environment does not support the searching
!    --  of the directory with the given name (in the absence of Name_Error).
  
     procedure End_Search (Search : in out Search_Type);
     --  Ends the search represented by Search. After a successful call on
--- 366,388 ----
       (Search    : in out Search_Type;
        Directory : String;
        Pattern   : String;
!       Filter    : Filter_Type := [others => True]);
     --  Starts a search in the directory entry in the directory named by
     --  Directory for entries matching Pattern. Pattern represents a file name
     --  matching pattern. If Pattern is null, all items in the directory are
     --  matched; otherwise, the interpretation of Pattern is implementation-
     --  defined. Only items which match Filter will be returned. After a
!    --  successful call on Start_Search, the object Search will be populated
!    --  with the items of the directory that match the Pattern and Filter, if
!    --  any. Any subsequent change to the directory after the call to
!    --  Start_Search will not be reflected in the Search object.
!    --
!    --  The exception Name_Error is propagated if the string given by Directory
!    --  does not identify an existing directory, or if Pattern does not allow
!    --  the identification of any possible external file or directory. The
!    --  exception Use_Error is propagated if the external environment does not
!    --  support the searching of the directory with the given name (in the
!    --  absence of Name_Error).
  
     procedure End_Search (Search : in out Search_Type);
     --  Ends the search represented by Search. After a successful call on
*************** package Ada.Directories is
*** 397,413 ****
        Directory_Entry : out Directory_Entry_Type);
     --  Returns the next Directory_Entry for the search described by Search that
     --  matches the pattern and filter. If no further matches are available,
!    --  Status_Error is raised. It is implementation-defined as to whether the
!    --  results returned by this routine are altered if the contents of the
!    --  directory are altered while the Search object is valid (for example, by
!    --  another program). The exception Use_Error is propagated if the external
!    --  environment does not support continued searching of the directory
!    --  represented by Search.
  
     procedure Search
       (Directory : String;
        Pattern   : String;
!       Filter    : Filter_Type := (others => True);
        Process   : not null access procedure
                                      (Directory_Entry : Directory_Entry_Type));
     --  Searches in the directory named by Directory for entries matching
--- 400,416 ----
        Directory_Entry : out Directory_Entry_Type);
     --  Returns the next Directory_Entry for the search described by Search that
     --  matches the pattern and filter. If no further matches are available,
!    --  Status_Error is raised. The results returned by this routine reflect the
!    --  contents of the directory at the time of the Start_Search call.
!    --  Consequently, changes to the contents of the directory, by this or
!    --  another program, will not be reflected in the Search object. The
!    --  exception Use_Error is propagated if the external environment does not
!    --  support continued searching of the directory represented by Search.
  
     procedure Search
       (Directory : String;
        Pattern   : String;
!       Filter    : Filter_Type := [others => True];
        Process   : not null access procedure
                                      (Directory_Entry : Directory_Entry_Type));
     --  Searches in the directory named by Directory for entries matching
*************** package Ada.Directories is
*** 472,501 ****
     Device_Error : exception renames Ada.IO_Exceptions.Device_Error;
  
  private
!    type Directory_Entry_Type is record
!       Is_Valid : Boolean := False;
!       Simple   : Ada.Strings.Unbounded.Unbounded_String;
!       Full     : Ada.Strings.Unbounded.Unbounded_String;
!       Kind     : File_Kind := Ordinary_File;
     end record;
  
!    --  The type Search_Data is defined in the body, so that the spec does not
!    --  depend on packages of the GNAT hierarchy.
  
!    type Search_Data;
!    type Search_Ptr is access Search_Data;
  
!    --  Search_Type need to be a controlled type, because it includes component
!    --  of type Dir_Type (in GNAT.Directory_Operations) that need to be closed
!    --  (if opened) during finalization. The component need to be an access
!    --  value, because Search_Data is not fully defined in the spec.
  
!    type Search_Type is new Ada.Finalization.Controlled with record
!       Value : Search_Ptr;
     end record;
  
     procedure Finalize (Search : in out Search_Type);
!    --  Close the directory, if opened, and deallocate Value
  
     procedure End_Search (Search : in out Search_Type) renames Finalize;
  
--- 475,523 ----
     Device_Error : exception renames Ada.IO_Exceptions.Device_Error;
  
  private
!    type Search_State;
!    type Search_Ptr is access Search_State;
!    --  To simplify the setup of a new search and its subsequent teardown, the
!    --  state of Search_Type is implemented in a seperate record type that can
!    --  be allocated when a new search is started and deallocated when the
!    --  search is ended. The type is defined in the body as it is not required
!    --  by child packages.
! 
!    type Search_Type is new Ada.Finalization.Controlled with record
!       State : Search_Ptr;
     end record;
  
!    type Directory_Entry_Type is record
!       Valid : Boolean := False;
!       --  Indicates if the record has been populated by the Get_Next_Entry
!       --  procedure. The default initialization ensures objects created through
!       --  declarations or allocators are identified as not valid for use with
!       --  the Directory_Entry_Type routines until Get_Next_Entry is called.
  
!       Name : Ada.Strings.Unbounded.Unbounded_String;
!       --  The name of the item in the directory
  
!       Full_Name : Ada.Strings.Unbounded.Unbounded_String;
!       --  The full path to the item
  
!       Attr_Error_Code : Integer;
!       --  The error code returned when querying the item's file attributes
!       --  during Start_Search. Allows Get_Next_Entry to raise an exception when
!       --  the error code is non-zero.
! 
!       Kind : File_Kind;
!       --  The type of item
! 
!       Modification_Time : Ada.Calendar.Time;
!       --  The modification time of the item at the time of Start_Search
! 
!       Size : File_Size;
!       --  The size of an ordinary file at the time of Start_Search. For special
!       --  files and directories, Size is always zero.
     end record;
  
     procedure Finalize (Search : in out Search_Type);
!    --  Deallocate the data structures used for the search
  
     procedure End_Search (Search : in out Search_Type) renames Finalize;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-direio.adb gcc-12.1.0/gcc/ada/libgnat/a-direio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-direio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-direio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** with Ada.Unchecked_Conversion;
*** 45,51 ****
  package body Ada.Direct_IO is
  
     Zeroes : constant System.Storage_Elements.Storage_Array :=
!      (1 .. System.Storage_Elements.Storage_Offset (Bytes) => 0);
     --  Buffer used to fill out partial records
  
     package FCB renames System.File_Control_Block;
--- 45,51 ----
  package body Ada.Direct_IO is
  
     Zeroes : constant System.Storage_Elements.Storage_Array :=
!      [1 .. System.Storage_Elements.Storage_Offset (Bytes) => 0];
     --  Buffer used to fill out partial records
  
     package FCB renames System.File_Control_Block;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-direio.ads gcc-12.1.0/gcc/ada/libgnat/a-direio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-direio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-direio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-dirval.adb gcc-12.1.0/gcc/ada/libgnat/a-dirval.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-dirval.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-dirval.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                             (POSIX Version)                              --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                             (POSIX Version)                              --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-dirval.ads gcc-12.1.0/gcc/ada/libgnat/a-dirval.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-dirval.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-dirval.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-dirval__mingw.adb gcc-12.1.0/gcc/ada/libgnat/a-dirval__mingw.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-dirval__mingw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-dirval__mingw.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                            (Windows Version)                             --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                            (Windows Version)                             --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-einuoc.adb gcc-12.1.0/gcc/ada/libgnat/a-einuoc.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-einuoc.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-einuoc.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-einuoc.ads gcc-12.1.0/gcc/ada/libgnat/a-einuoc.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-einuoc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-einuoc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-elchha.adb gcc-12.1.0/gcc/ada/libgnat/a-elchha.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-elchha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-elchha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
***************
*** 31,38 ****
  
  --  Default version for most targets
  
- pragma Compiler_Unit_Warning;
- 
  with System.Standard_Library; use System.Standard_Library;
  with System.Soft_Links; use System;
  
--- 31,36 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-elchha.ads gcc-12.1.0/gcc/ada/libgnat/a-elchha.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-elchha.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-elchha.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
***************
*** 31,38 ****
  
  --  Last chance handler. Unhandled exceptions are passed to this routine
  
- pragma Compiler_Unit_Warning;
- 
  procedure Ada.Exceptions.Last_Chance_Handler
    (Except :  Exception_Occurrence);
  pragma Export (C,
--- 31,36 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-elchha__vxworks-ppc-full.adb gcc-12.1.0/gcc/ada/libgnat/a-elchha__vxworks-ppc-full.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-elchha__vxworks-ppc-full.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-elchha__vxworks-ppc-full.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,150 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --    A D A . E X C E P T I O N S . L A S T _ C H A N C E _ H A N D L E R   --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 2003-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- pragma Warnings (Off);
- with System.Standard_Library;
- pragma Warnings (On);
- 
- with GNAT.Debug_Utilities; use GNAT.Debug_Utilities;
- with GNAT.IO; use GNAT.IO;
- 
- --  Default last chance handler for use with the full VxWorks 653 partition OS
- --  Ada run-time library.
- 
- --  Logs error with health monitor, and dumps exception identity and argument
- --  string for vxaddr2line for generation of a symbolic stack backtrace.
- 
- procedure Ada.Exceptions.Last_Chance_Handler (Except : Exception_Occurrence) is
- 
-    ----------------------
-    -- APEX definitions --
-    ----------------------
- 
-    pragma Warnings (Off);
-    type Error_Code_Type is (
-       Deadline_Missed,
-       Application_Error,
-       Numeric_Error,
-       Illegal_Request,
-       Stack_Overflow,
-       Memory_Violation,
-       Hardware_Fault,
-       Power_Fail);
-    pragma Warnings (On);
-    pragma Convention (C, Error_Code_Type);
-    --  APEX Health Management error codes
- 
-    type Message_Addr_Type is new System.Address;
- 
-    type Apex_Integer is range -(2 ** 31) .. (2 ** 31) - 1;
-    pragma Convention (C, Apex_Integer);
- 
-    Max_Error_Message_Size : constant := 64;
- 
-    type Error_Message_Size_Type is new Apex_Integer range
-       1 .. Max_Error_Message_Size;
- 
-    pragma Warnings (Off);
-    type Return_Code_Type is (
-       No_Error,        --  request valid and operation performed
-       No_Action,       --  status of system unaffected by request
-       Not_Available,   --  resource required by request unavailable
-       Invalid_Param,   --  invalid parameter specified in request
-       Invalid_Config,  --  parameter incompatible with configuration
-       Invalid_Mode,    --  request incompatible with current mode
-       Timed_Out);      --  time-out tied up with request has expired
-    pragma Warnings (On);
-    pragma Convention (C, Return_Code_Type);
-    --  APEX return codes
- 
-    procedure Raise_Application_Error
-      (Error_Code   : Error_Code_Type;
-       Message_Addr : Message_Addr_Type;
-       Length       : Error_Message_Size_Type;
-       Return_Code  : out Return_Code_Type);
-    pragma Import (C, Raise_Application_Error, "RAISE_APPLICATION_ERROR");
- 
-    procedure Unhandled_Terminate;
-    pragma No_Return (Unhandled_Terminate);
-    pragma Import (C, Unhandled_Terminate, "__gnat_unhandled_terminate");
-    --  Perform system dependent shutdown code
- 
-    procedure Adainit;
-    pragma Import (Ada, Adainit, "adainit");
- 
-    Adainit_Addr : constant System.Address := Adainit'Code_Address;
-    --  Part of arguments to vxaddr2line
- 
-    Result : Return_Code_Type;
- 
-    Message      : String :=
-      Exception_Name (Except) &   ": " & ASCII.LF &
-      Exception_Message (Except) & ASCII.NUL;
- 
-    Message_Length : Error_Message_Size_Type;
- 
- begin
-    New_Line;
-    Put_Line ("In last chance handler");
-    Put_Line (Message (1 .. Message'Length - 1));
-    New_Line;
- 
-    Put_Line ("adainit and traceback addresses for vxaddr2line:");
- 
-    Put (Image_C (Adainit_Addr)); Put (" ");
- 
-    for J in 1 .. Except.Num_Tracebacks loop
-       Put (Image_C (Except.Tracebacks (J)));
-       Put (" ");
-    end loop;
- 
-    New_Line;
- 
-    if Message'Length > Error_Message_Size_Type'Last then
-       Message_Length := Error_Message_Size_Type'Last;
-    else
-       Message_Length := Message'Length;
-    end if;
- 
-    Raise_Application_Error
-      (Error_Code   => Application_Error,
-       Message_Addr => Message_Addr_Type (Message (1)'Address),
-       Length       => Message_Length,
-       Return_Code  => Result);
- 
-    --  Shutdown the run-time library now. The rest of the procedure needs to be
-    --  careful not to use anything that would require runtime support. In
-    --  particular, functions returning strings are banned since the sec stack
-    --  is no longer functional.
- 
-    System.Standard_Library.Adafinal;
-    Unhandled_Terminate;
- end Ada.Exceptions.Last_Chance_Handler;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-envvar.adb gcc-12.1.0/gcc/ada/libgnat/a-envvar.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-envvar.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-envvar.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-excach.adb gcc-12.1.0/gcc/ada/libgnat/a-excach.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-excach.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-excach.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** pragma Warnings (On);
*** 41,47 ****
  separate (Ada.Exceptions)
  procedure Call_Chain (Excep : EOA) is
  
!    Exception_Tracebacks : Integer;
     pragma Import (C, Exception_Tracebacks, "__gl_exception_tracebacks");
     --  Boolean indicating whether tracebacks should be stored in exception
     --  occurrences.
--- 41,47 ----
  separate (Ada.Exceptions)
  procedure Call_Chain (Excep : EOA) is
  
!    Exception_Tracebacks : constant Integer;
     pragma Import (C, Exception_Tracebacks, "__gl_exception_tracebacks");
     --  Boolean indicating whether tracebacks should be stored in exception
     --  occurrences.
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-except.adb gcc-12.1.0/gcc/ada/libgnat/a-except.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-except.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-except.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Exceptions is
*** 279,284 ****
--- 279,301 ----
     pragma No_Return (Raise_Exception_No_Defer);
     --  Similar to Raise_Exception, but with no abort deferral
  
+    procedure Raise_From_Signal_Handler
+      (E : Exception_Id;
+       M : System.Address);
+    pragma Export
+      (C, Raise_From_Signal_Handler, "__gnat_raise_from_signal_handler");
+    pragma No_Return (Raise_From_Signal_Handler);
+    --  This routine is used to raise an exception from a signal handler. The
+    --  signal handler has already stored the machine state (i.e. the state that
+    --  corresponds to the location at which the signal was raised). E is the
+    --  Exception_Id specifying what exception is being raised, and M is a
+    --  pointer to a null-terminated string which is the message to be raised.
+    --  Note that this routine never returns, so it is permissible to simply
+    --  jump to this routine, rather than call it. This may be appropriate for
+    --  systems where the right way to get out of signal handler is to alter the
+    --  PC value in the machine state or in some other way ask the operating
+    --  system to return here rather than to the original location.
+ 
     procedure Raise_With_Msg (E : Exception_Id);
     pragma No_Return (Raise_With_Msg);
     pragma Export (C, Raise_With_Msg, "__gnat_raise_with_msg");
*************** package body Ada.Exceptions is
*** 612,617 ****
--- 629,724 ----
     pragma No_Return (Rcheck_CE_Invalid_Data_Ext);
     pragma No_Return (Rcheck_CE_Range_Check_Ext);
  
+    --  Make all of these procedures callable from strub contexts.
+    --  These attributes are not visible to callers; they are made
+    --  visible in trans.c:build_raise_check.
+ 
+    pragma Machine_Attribute (Rcheck_CE_Access_Check,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Null_Access_Parameter,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Discriminant_Check,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Divide_By_Zero,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Explicit_Raise,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Index_Check,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Invalid_Data,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Length_Check,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Null_Exception_Id,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Null_Not_Allowed,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Overflow_Check,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Partition_Check,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Range_Check,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Tag_Check,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Access_Before_Elaboration,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Accessibility_Check,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Address_Of_Intrinsic,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Aliased_Parameters,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_All_Guards_Closed,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Bad_Predicated_Generic_Type,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Build_In_Place_Mismatch,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Current_Task_In_Entry_Body,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Duplicated_Entry_Address,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Explicit_Raise,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Implicit_Return,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Misaligned_Address_Value,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Missing_Return,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Non_Transportable_Actual,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Overlaid_Controlled_Object,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Potentially_Blocking_Operation,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Stream_Operation_Not_Allowed,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Stubbed_Subprogram_Called,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Unchecked_Union_Restriction,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_PE_Finalize_Raised_Exception,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_SE_Empty_Storage_Pool,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_SE_Explicit_Raise,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_SE_Infinite_Recursion,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_SE_Object_Too_Large,
+                              "strub", "callable");
+ 
+    pragma Machine_Attribute (Rcheck_CE_Access_Check_Ext,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Index_Check_Ext,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Invalid_Data_Ext,
+                              "strub", "callable");
+    pragma Machine_Attribute (Rcheck_CE_Range_Check_Ext,
+                              "strub", "callable");
+ 
     ---------------------------------------------
     -- Reason Strings for Run-Time Check Calls --
     ---------------------------------------------
*************** package body Ada.Exceptions is
*** 1003,1009 ****
  
        else
           declare
!             New_Msg  : constant String := Prefix & Exception_Name (X);
  
           begin
              --  No message present, just provide our own
--- 1110,1116 ----
  
        else
           declare
!             New_Msg : constant String := Prefix & Exception_Name (X);
  
           begin
              --  No message present, just provide our own
*************** package body Ada.Exceptions is
*** 1653,1659 ****
     -- Wide_Exception_Name --
     -------------------------
  
!    WC_Encoding : Character;
     pragma Import (C, WC_Encoding, "__gl_wc_encoding");
     --  Encoding method for source, as exported by binder
  
--- 1760,1766 ----
     -- Wide_Exception_Name --
     -------------------------
  
!    WC_Encoding : constant Character;
     pragma Import (C, WC_Encoding, "__gl_wc_encoding");
     --  Encoding method for source, as exported by binder
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-except.ads gcc-12.1.0/gcc/ada/libgnat/a-except.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-except.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-except.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private
*** 184,209 ****
     --  Raise_Exception_Always if it can determine this is the case. The Export
     --  allows this routine to be accessed from Pure units.
  
!    procedure Raise_From_Signal_Handler
!      (E : Exception_Id;
!       M : System.Address);
!    pragma Export
!      (Ada, Raise_From_Signal_Handler,
!            "ada__exceptions__raise_from_signal_handler");
!    pragma No_Return (Raise_From_Signal_Handler);
!    --  This routine is used to raise an exception from a signal handler. The
!    --  signal handler has already stored the machine state (i.e. the state that
!    --  corresponds to the location at which the signal was raised). E is the
!    --  Exception_Id specifying what exception is being raised, and M is a
!    --  pointer to a null-terminated string which is the message to be raised.
!    --  Note that this routine never returns, so it is permissible to simply
!    --  jump to this routine, rather than call it. This may be appropriate for
!    --  systems where the right way to get out of signal handler is to alter the
!    --  PC value in the machine state or in some other way ask the operating
!    --  system to return here rather than to the original location.
  
!    procedure Raise_From_Controlled_Operation
!      (X : Ada.Exceptions.Exception_Occurrence);
     pragma No_Return (Raise_From_Controlled_Operation);
     pragma Export
       (Ada, Raise_From_Controlled_Operation,
--- 184,194 ----
     --  Raise_Exception_Always if it can determine this is the case. The Export
     --  allows this routine to be accessed from Pure units.
  
!    pragma Machine_Attribute (Raise_Exception_Always,
!                              "strub", "callable");
!    --  Make it callable from strub contexts
  
!    procedure Raise_From_Controlled_Operation (X : Exception_Occurrence);
     pragma No_Return (Raise_From_Controlled_Operation);
     pragma Export
       (Ada, Raise_From_Controlled_Operation,
*************** private
*** 301,308 ****
     pragma Stream_Convert (Exception_Occurrence, String_To_EO, EO_To_String);
     --  Functions for implementing Exception_Occurrence stream attributes
  
!    pragma Warnings (Off, "aggregate not fully initialized");
!    Null_Occurrence : constant Exception_Occurrence := (others => <>);
!    pragma Warnings (On, "aggregate not fully initialized");
  
  end Ada.Exceptions;
--- 286,295 ----
     pragma Stream_Convert (Exception_Occurrence, String_To_EO, EO_To_String);
     --  Functions for implementing Exception_Occurrence stream attributes
  
!    Null_Occurrence : constant Exception_Occurrence :=
!      (Machine_Occurrence => System.Null_Address,
!       Msg => (others => '*'),
!       Tracebacks => (others => System.Traceback_Entries.Null_TB_Entry),
!       others => <>);
  
  end Ada.Exceptions;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-exctra.adb gcc-12.1.0/gcc/ada/libgnat/a-exctra.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-exctra.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-exctra.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-exctra.ads gcc-12.1.0/gcc/ada/libgnat/a-exctra.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-exctra.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-exctra.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-exexda.adb gcc-12.1.0/gcc/ada/libgnat/a-exexda.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-exexda.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-exexda.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-exexpr.adb gcc-12.1.0/gcc/ada/libgnat/a-exexpr.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-exexpr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-exexpr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Exception_Propagation is
*** 91,96 ****
--- 91,99 ----
  
     use Exception_Traces;
  
+    type bool is new Boolean;
+    pragma Convention (C, bool);
+ 
     Foreign_Exception : aliased System.Standard_Library.Exception_Data;
     pragma Import (Ada, Foreign_Exception,
                    "system__exceptions__foreign_exception");
*************** package body Exception_Propagation is
*** 277,285 ****
     --  painful and error prone. These subprograms could be moved to a more
     --  widely visible location if need be.
  
!    function Is_Handled_By_Others (E : Exception_Data_Ptr) return Boolean;
     pragma Export (C, Is_Handled_By_Others, "__gnat_is_handled_by_others");
-    pragma Warnings (Off, Is_Handled_By_Others);
  
     function Language_For (E : Exception_Data_Ptr) return Character;
     pragma Export (C, Language_For, "__gnat_language_for");
--- 280,287 ----
     --  painful and error prone. These subprograms could be moved to a more
     --  widely visible location if need be.
  
!    function Is_Handled_By_Others (E : Exception_Data_Ptr) return bool;
     pragma Export (C, Is_Handled_By_Others, "__gnat_is_handled_by_others");
  
     function Language_For (E : Exception_Data_Ptr) return Character;
     pragma Export (C, Language_For, "__gnat_language_for");
*************** package body Exception_Propagation is
*** 685,693 ****
     -- Foreign_Data_For --
     ----------------------
  
!    function Foreign_Data_For
!      (E : SSL.Exception_Data_Ptr) return Address
!    is
     begin
        return E.Foreign_Data;
     end Foreign_Data_For;
--- 687,693 ----
     -- Foreign_Data_For --
     ----------------------
  
!    function Foreign_Data_For (E : Exception_Data_Ptr) return Address is
     begin
        return E.Foreign_Data;
     end Foreign_Data_For;
*************** package body Exception_Propagation is
*** 696,711 ****
     -- Is_Handled_By_Others --
     --------------------------
  
!    function Is_Handled_By_Others (E : SSL.Exception_Data_Ptr) return Boolean is
     begin
!       return not E.all.Not_Handled_By_Others;
     end Is_Handled_By_Others;
  
     ------------------
     -- Language_For --
     ------------------
  
!    function Language_For (E : SSL.Exception_Data_Ptr) return Character is
     begin
        return E.all.Lang;
     end Language_For;
--- 696,711 ----
     -- Is_Handled_By_Others --
     --------------------------
  
!    function Is_Handled_By_Others (E : Exception_Data_Ptr) return bool is
     begin
!       return not bool (E.all.Not_Handled_By_Others);
     end Is_Handled_By_Others;
  
     ------------------
     -- Language_For --
     ------------------
  
!    function Language_For (E : Exception_Data_Ptr) return Character is
     begin
        return E.all.Lang;
     end Language_For;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-exextr.adb gcc-12.1.0/gcc/ada/libgnat/a-exextr.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-exextr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-exextr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-exstat.adb gcc-12.1.0/gcc/ada/libgnat/a-exstat.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-exstat.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-exstat.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-finali.adb gcc-12.1.0/gcc/ada/libgnat/a-finali.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-finali.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-finali.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-finali.ads gcc-12.1.0/gcc/ada/libgnat/a-finali.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-finali.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-finali.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ioexce.ads gcc-12.1.0/gcc/ada/libgnat/a-ioexce.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ioexce.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ioexce.ads	Fri May  6 07:30:56 2022
***************
*** 13,20 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package Ada.IO_Exceptions is
     pragma Pure;
  
--- 13,18 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-iteint.ads gcc-12.1.0/gcc/ada/libgnat/a-iteint.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-iteint.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-iteint.ads	Fri May  6 07:30:56 2022
*************** generic
*** 21,27 ****
  package Ada.Iterator_Interfaces is
     pragma Pure;
  
!    type Forward_Iterator is limited interface;
  
     function First
       (Object : Forward_Iterator) return Cursor is abstract;
--- 21,27 ----
  package Ada.Iterator_Interfaces is
     pragma Pure;
  
!    type Forward_Iterator is limited interface with No_Task_Parts;
  
     function First
       (Object : Forward_Iterator) return Cursor is abstract;
*************** package Ada.Iterator_Interfaces is
*** 29,35 ****
       (Object   : Forward_Iterator;
        Position : Cursor) return Cursor is abstract;
  
!    type Reversible_Iterator is limited interface and Forward_Iterator;
  
     function Last
       (Object : Reversible_Iterator) return Cursor is abstract;
--- 29,36 ----
       (Object   : Forward_Iterator;
        Position : Cursor) return Cursor is abstract;
  
!    type Reversible_Iterator is limited interface and Forward_Iterator with
!      No_Task_Parts;
  
     function Last
       (Object : Reversible_Iterator) return Cursor is abstract;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-locale.adb gcc-12.1.0/gcc/ada/libgnat/a-locale.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-locale.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-locale.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-locale.ads gcc-12.1.0/gcc/ada/libgnat/a-locale.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-locale.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-locale.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT.  In accordance with the copyright of that document, you can freely --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT.  In accordance with the copyright of that document, you can freely --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nagefl.ads gcc-12.1.0/gcc/ada/libgnat/a-nagefl.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nagefl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nagefl.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                            (Generic Wrapper)                             --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                            (Generic Wrapper)                             --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-naliop.ads gcc-12.1.0/gcc/ada/libgnat/a-naliop.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-naliop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-naliop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-naliop__nolibm.ads gcc-12.1.0/gcc/ada/libgnat/a-naliop__nolibm.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-naliop__nolibm.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-naliop__nolibm.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nallfl.ads gcc-12.1.0/gcc/ada/libgnat/a-nallfl.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nallfl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nallfl.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                  (C Math Library Version, Long Long Float)               --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                  (C Math Library Version, Long Long Float)               --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nallfl__wraplf.ads gcc-12.1.0/gcc/ada/libgnat/a-nallfl__wraplf.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nallfl__wraplf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nallfl__wraplf.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --              (Long Long Float Wrapper in terms of Long Float)            --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --              (Long Long Float Wrapper in terms of Long Float)            --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nalofl.ads gcc-12.1.0/gcc/ada/libgnat/a-nalofl.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nalofl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nalofl.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                     (C Math Library Version, Long Float)                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                     (C Math Library Version, Long Float)                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nashfl.ads gcc-12.1.0/gcc/ada/libgnat/a-nashfl.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nashfl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nashfl.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                  (Short Float Wrapper in terms of Float)                 --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                  (Short Float Wrapper in terms of Float)                 --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nashfl__wraplf.ads gcc-12.1.0/gcc/ada/libgnat/a-nashfl__wraplf.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nashfl__wraplf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nashfl__wraplf.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                (Short Float Wrapper in terms of Long Float)              --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                (Short Float Wrapper in terms of Long Float)              --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nbnbig.adb gcc-12.1.0/gcc/ada/libgnat/a-nbnbig.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-nbnbig.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-nbnbig.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,81 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --               ADA.NUMERICS.BIG_NUMBERS.BIG_INTEGERS_GHOST                --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This body is provided as a work-around for a GNAT compiler bug, as GNAT
+ --  currently does not compile instantiations of the spec with imported ghost
+ --  generics for packages Signed_Conversions and Unsigned_Conversions.
+ 
+ --  Ghost code in this unit is meant for analysis only, not for run-time
+ --  checking. This is enforced by setting the assertion policy to Ignore.
+ 
+ pragma Assertion_Policy (Ghost => Ignore);
+ 
+ package body Ada.Numerics.Big_Numbers.Big_Integers_Ghost with
+    SPARK_Mode => Off
+ is
+ 
+    package body Signed_Conversions with
+      SPARK_Mode => Off
+    is
+ 
+       function To_Big_Integer (Arg : Int) return Valid_Big_Integer is
+       begin
+          raise Program_Error;
+          return (null record);
+       end To_Big_Integer;
+ 
+       function From_Big_Integer (Arg : Valid_Big_Integer) return Int is
+       begin
+          raise Program_Error;
+          return 0;
+       end From_Big_Integer;
+ 
+    end Signed_Conversions;
+ 
+    package body Unsigned_Conversions with
+      SPARK_Mode => Off
+    is
+ 
+       function To_Big_Integer (Arg : Int) return Valid_Big_Integer is
+       begin
+          raise Program_Error;
+          return (null record);
+       end To_Big_Integer;
+ 
+       function From_Big_Integer (Arg : Valid_Big_Integer) return Int is
+       begin
+          raise Program_Error;
+          return 0;
+       end From_Big_Integer;
+ 
+    end Unsigned_Conversions;
+ 
+ end Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nbnbig.ads gcc-12.1.0/gcc/ada/libgnat/a-nbnbig.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nbnbig.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-nbnbig.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,216 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --               ADA.NUMERICS.BIG_NUMBERS.BIG_INTEGERS_GHOST                --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This unit is provided as a replacement for the standard unit
+ --  Ada.Numerics.Big_Numbers.Big_Integers when only proof with SPARK is
+ --  intended. It cannot be used for execution, as all subprograms are marked
+ --  imported with no definition.
+ 
+ --  Contrary to Ada.Numerics.Big_Numbers.Big_Integers, this unit does not
+ --  depend on System or Ada.Finalization, which makes it more convenient for
+ --  use in run-time units.
+ 
+ --  Ghost code in this unit is meant for analysis only, not for run-time
+ --  checking. This is enforced by setting the assertion policy to Ignore.
+ 
+ pragma Assertion_Policy (Ghost => Ignore);
+ 
+ package Ada.Numerics.Big_Numbers.Big_Integers_Ghost with
+    SPARK_Mode,
+    Ghost,
+    Pure
+ is
+    type Big_Integer is private
+      with Integer_Literal => From_Universal_Image;
+ 
+    function Is_Valid (Arg : Big_Integer) return Boolean
+    with
+      Import,
+      Global => null;
+ 
+    subtype Valid_Big_Integer is Big_Integer
+      with Dynamic_Predicate => Is_Valid (Valid_Big_Integer),
+           Predicate_Failure => raise Program_Error;
+ 
+    function "=" (L, R : Valid_Big_Integer) return Boolean with
+       Import,
+       Global => null;
+ 
+    function "<" (L, R : Valid_Big_Integer) return Boolean with
+       Import,
+       Global => null;
+ 
+    function "<=" (L, R : Valid_Big_Integer) return Boolean with
+       Import,
+       Global => null;
+ 
+    function ">" (L, R : Valid_Big_Integer) return Boolean with
+       Import,
+       Global => null;
+ 
+    function ">=" (L, R : Valid_Big_Integer) return Boolean with
+       Import,
+       Global => null;
+ 
+    function To_Big_Integer (Arg : Integer) return Valid_Big_Integer
+      with
+        Import,
+        Global => null;
+ 
+    subtype Big_Positive is Big_Integer
+      with Dynamic_Predicate =>
+             (if Is_Valid (Big_Positive)
+              then Big_Positive > To_Big_Integer (0)),
+           Predicate_Failure => (raise Constraint_Error);
+ 
+    subtype Big_Natural is Big_Integer
+      with Dynamic_Predicate =>
+             (if Is_Valid (Big_Natural)
+              then Big_Natural >= To_Big_Integer (0)),
+           Predicate_Failure => (raise Constraint_Error);
+ 
+    function In_Range
+      (Arg : Valid_Big_Integer; Low, High : Big_Integer) return Boolean
+    is (Low <= Arg and Arg <= High)
+    with
+      Import,
+      Global => null;
+ 
+    function To_Integer (Arg : Valid_Big_Integer) return Integer
+    with
+      Import,
+      Pre    => In_Range (Arg,
+                          Low  => To_Big_Integer (Integer'First),
+                          High => To_Big_Integer (Integer'Last))
+                 or else (raise Constraint_Error),
+      Global => null;
+ 
+    generic
+       type Int is range <>;
+    package Signed_Conversions is
+ 
+       function To_Big_Integer (Arg : Int) return Valid_Big_Integer
+       with
+         Global => null;
+ 
+       function From_Big_Integer (Arg : Valid_Big_Integer) return Int
+       with
+         Pre    => In_Range (Arg,
+                             Low  => To_Big_Integer (Int'First),
+                             High => To_Big_Integer (Int'Last))
+                    or else (raise Constraint_Error),
+         Global => null;
+    end Signed_Conversions;
+ 
+    generic
+       type Int is mod <>;
+    package Unsigned_Conversions is
+ 
+       function To_Big_Integer (Arg : Int) return Valid_Big_Integer
+       with
+         Global => null;
+ 
+       function From_Big_Integer (Arg : Valid_Big_Integer) return Int
+       with
+         Pre    => In_Range (Arg,
+                             Low  => To_Big_Integer (Int'First),
+                             High => To_Big_Integer (Int'Last))
+                    or else (raise Constraint_Error),
+         Global => null;
+ 
+    end Unsigned_Conversions;
+ 
+    function From_String (Arg : String) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function From_Universal_Image (Arg : String) return Valid_Big_Integer
+      renames From_String;
+ 
+    function "+" (L : Valid_Big_Integer) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function "-" (L : Valid_Big_Integer) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function "abs" (L : Valid_Big_Integer) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function "+" (L, R : Valid_Big_Integer) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function "-" (L, R : Valid_Big_Integer) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function "*" (L, R : Valid_Big_Integer) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function "/" (L, R : Valid_Big_Integer) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function "mod" (L, R : Valid_Big_Integer) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function "rem" (L, R : Valid_Big_Integer) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function "**" (L : Valid_Big_Integer; R : Natural) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function Min (L, R : Valid_Big_Integer) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function Max (L, R : Valid_Big_Integer) return Valid_Big_Integer
+    with
+      Import,
+      Global => null;
+ 
+    function Greatest_Common_Divisor
+      (L, R : Valid_Big_Integer) return Big_Positive
+    with
+      Import,
+      Pre    => (L /= To_Big_Integer (0) and R /= To_Big_Integer (0))
+              or else (raise Constraint_Error),
+      Global => null;
+ 
+ private
+    pragma SPARK_Mode (Off);
+ 
+    type Big_Integer is null record;
+ 
+ end Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nbnbin.adb gcc-12.1.0/gcc/ada/libgnat/a-nbnbin.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-nbnbin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nbnbin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
***************
*** 30,36 ****
  ------------------------------------------------------------------------------
  
  with Ada.Unchecked_Deallocation;
- with Ada.Strings.Text_Output.Utils;
  
  with Interfaces; use Interfaces;
  
--- 30,35 ----
*************** package body Ada.Numerics.Big_Numbers.Bi
*** 432,443 ****
     -- Put_Image --
     ---------------
  
!    procedure Put_Image (S : in out Sink'Class; V : Big_Integer) is
        --  This is implemented in terms of To_String. It might be more elegant
        --  and more efficient to do it the other way around, but this is the
        --  most expedient implementation for now.
     begin
!       Strings.Text_Output.Utils.Put_UTF_8 (S, To_String (V));
     end Put_Image;
  
     ---------
--- 431,442 ----
     -- Put_Image --
     ---------------
  
!    procedure Put_Image (S : in out Root_Buffer_Type'Class; V : Big_Integer) is
        --  This is implemented in terms of To_String. It might be more elegant
        --  and more efficient to do it the other way around, but this is the
        --  most expedient implementation for now.
     begin
!       Strings.Text_Buffers.Put_UTF_8 (S, To_String (V));
     end Put_Image;
  
     ---------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nbnbin.ads gcc-12.1.0/gcc/ada/libgnat/a-nbnbin.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nbnbin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nbnbin.ads	Fri May  6 07:30:56 2022
***************
*** 13,19 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Ada.Strings.Text_Output; use Ada.Strings.Text_Output;
  
  private with Ada.Finalization;
  private with System;
--- 13,19 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Ada.Strings.Text_Buffers; use Ada.Strings.Text_Buffers;
  
  private with Ada.Finalization;
  private with System;
*************** package Ada.Numerics.Big_Numbers.Big_Int
*** 22,28 ****
    with Preelaborate
  is
     type Big_Integer is private
!      with Integer_Literal => From_String,
            Put_Image       => Put_Image;
  
     function Is_Valid (Arg : Big_Integer) return Boolean
--- 22,28 ----
    with Preelaborate
  is
     type Big_Integer is private
!      with Integer_Literal => From_Universal_Image,
            Put_Image       => Put_Image;
  
     function Is_Valid (Arg : Big_Integer) return Boolean
*************** is
*** 116,122 ****
     function From_String (Arg : String) return Valid_Big_Integer
       with Global => null;
  
!    procedure Put_Image (S : in out Sink'Class; V : Big_Integer);
  
     function "+" (L : Valid_Big_Integer) return Valid_Big_Integer
        with Global => null;
--- 116,125 ----
     function From_String (Arg : String) return Valid_Big_Integer
       with Global => null;
  
!    function From_Universal_Image (Arg : String) return Valid_Big_Integer
!      renames From_String;
! 
!    procedure Put_Image (S : in out Root_Buffer_Type'Class; V : Big_Integer);
  
     function "+" (L : Valid_Big_Integer) return Valid_Big_Integer
        with Global => null;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nbnbin__gmp.adb gcc-12.1.0/gcc/ada/libgnat/a-nbnbin__gmp.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-nbnbin__gmp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nbnbin__gmp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
*************** with Ada.Unchecked_Conversion;
*** 35,41 ****
  with Ada.Unchecked_Deallocation;
  with Interfaces.C;               use Interfaces.C;
  with Interfaces.C.Strings;       use Interfaces.C.Strings;
- with Ada.Strings.Text_Output.Utils;
  with Ada.Characters.Handling;    use Ada.Characters.Handling;
  
  package body Ada.Numerics.Big_Numbers.Big_Integers is
--- 35,40 ----
*************** package body Ada.Numerics.Big_Numbers.Bi
*** 328,334 ****
     -- From_String --
     -----------------
  
!    function From_String (Arg : String) return Big_Integer is
        function mpz_set_str
          (this : access mpz_t;
           str  : System.Address;
--- 327,333 ----
     -- From_String --
     -----------------
  
!    function From_String (Arg : String) return Valid_Big_Integer is
        function mpz_set_str
          (this : access mpz_t;
           str  : System.Address;
*************** package body Ada.Numerics.Big_Numbers.Bi
*** 403,414 ****
     -- Put_Image --
     ---------------
  
!    procedure Put_Image (S : in out Sink'Class; V : Big_Integer) is
        --  This is implemented in terms of To_String. It might be more elegant
        --  and more efficient to do it the other way around, but this is the
        --  most expedient implementation for now.
     begin
!       Strings.Text_Output.Utils.Put_UTF_8 (S, To_String (V));
     end Put_Image;
  
     ---------
--- 402,413 ----
     -- Put_Image --
     ---------------
  
!    procedure Put_Image (S : in out Root_Buffer_Type'Class; V : Big_Integer) is
        --  This is implemented in terms of To_String. It might be more elegant
        --  and more efficient to do it the other way around, but this is the
        --  most expedient implementation for now.
     begin
!       Strings.Text_Buffers.Put_UTF_8 (S, To_String (V));
     end Put_Image;
  
     ---------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nbnbre.adb gcc-12.1.0/gcc/ada/libgnat/a-nbnbre.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-nbnbre.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nbnbre.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2019-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with Ada.Strings.Text_Output.Utils;
  with System.Unsigned_Types; use System.Unsigned_Types;
  
  package body Ada.Numerics.Big_Numbers.Big_Reals is
--- 29,34 ----
*************** package body Ada.Numerics.Big_Numbers.Bi
*** 307,313 ****
  
     package body Fixed_Conversions is
  
!       package Float_Aux is new Float_Conversions (Long_Long_Float);
  
        subtype LLLI is Long_Long_Long_Integer;
        subtype LLLU is Long_Long_Long_Unsigned;
--- 306,312 ----
  
     package body Fixed_Conversions is
  
!       package Float_Aux is new Float_Conversions (Long_Float);
  
        subtype LLLI is Long_Long_Long_Integer;
        subtype LLLU is Long_Long_Long_Unsigned;
*************** package body Ada.Numerics.Big_Numbers.Bi
*** 316,322 ****
                      Num'Small_Numerator > LLLU'Last
                        or else Num'Small_Denominator > LLLU'Last;
        --  True if the Small is too large for Long_Long_Long_Unsigned, in which
!       --  case we convert to/from Long_Long_Float as an intermediate step.
  
        package Conv_I is new Big_Integers.Signed_Conversions (LLLI);
        package Conv_U is new Big_Integers.Unsigned_Conversions (LLLU);
--- 315,321 ----
                      Num'Small_Numerator > LLLU'Last
                        or else Num'Small_Denominator > LLLU'Last;
        --  True if the Small is too large for Long_Long_Long_Unsigned, in which
!       --  case we convert to/from Long_Float as an intermediate step.
  
        package Conv_I is new Big_Integers.Signed_Conversions (LLLI);
        package Conv_U is new Big_Integers.Unsigned_Conversions (LLLU);
*************** package body Ada.Numerics.Big_Numbers.Bi
*** 334,340 ****
  
        begin
           if Too_Large then
!             return Float_Aux.To_Big_Real (Long_Long_Float (Arg));
           end if;
  
           N := Conv_U.To_Big_Integer (Num'Small_Numerator);
--- 333,339 ----
  
        begin
           if Too_Large then
!             return Float_Aux.To_Big_Real (Long_Float (Arg));
           end if;
  
           N := Conv_U.To_Big_Integer (Num'Small_Numerator);
*************** package body Ada.Numerics.Big_Numbers.Bi
*** 442,449 ****
           if Str = "" then
              return Leading_Padding ("0", Min_Length, Char);
           else
!             return (1 .. Integer'Max (Integer (Min_Length) - Str'Length, 0)
!                            => Char) & Str;
           end if;
        end Leading_Padding;
  
--- 441,448 ----
           if Str = "" then
              return Leading_Padding ("0", Min_Length, Char);
           else
!             return [1 .. Integer'Max (Integer (Min_Length) - Str'Length, 0)
!                            => Char] & Str;
           end if;
        end Leading_Padding;
  
*************** package body Ada.Numerics.Big_Numbers.Bi
*** 469,476 ****
              return Str (Str'First .. Str'First + Length - 1);
           else
              return Str &
!               (1 .. Integer'Max (Integer (Length) - Str'Length, 0)
!                       => Char);
           end if;
        end Trailing_Padding;
  
--- 468,475 ----
              return Str (Str'First .. Str'First + Length - 1);
           else
              return Str &
!               [1 .. Integer'Max (Integer (Length) - Str'Length, 0)
!                       => Char];
           end if;
        end Trailing_Padding;
  
*************** package body Ada.Numerics.Big_Numbers.Bi
*** 496,502 ****
              if Index < 0 then
                 return Leading_Padding ("0", Fore)
                   & "."
!                  & Trailing_Padding ((1 .. -Index => '0') & Str, Aft)
                   & (if Exp = 0 then "" else "E+" & Image (Natural (Exp)));
              else
                 return Leading_Padding (Str (Str'First .. Index), Fore)
--- 495,501 ----
              if Index < 0 then
                 return Leading_Padding ("0", Fore)
                   & "."
!                  & Trailing_Padding ([1 .. -Index => '0'] & Str, Aft)
                   & (if Exp = 0 then "" else "E+" & Image (Natural (Exp)));
              else
                 return Leading_Padding (Str (Str'First .. Index), Fore)
*************** package body Ada.Numerics.Big_Numbers.Bi
*** 593,605 ****
        end;
     end From_String;
  
-    function From_String
-      (Numerator, Denominator : String) return Valid_Big_Real is
-    begin
-       return Big_Integers.From_String (Numerator) /
-         Big_Integers.From_String (Denominator);
-    end From_String;
- 
     --------------------------
     -- From_Quotient_String --
     --------------------------
--- 592,597 ----
*************** package body Ada.Numerics.Big_Numbers.Bi
*** 626,637 ****
     -- Put_Image --
     ---------------
  
!    procedure Put_Image (S : in out Sink'Class; V : Big_Real) is
        --  This is implemented in terms of To_String. It might be more elegant
        --  and more efficient to do it the other way around, but this is the
        --  most expedient implementation for now.
     begin
!       Strings.Text_Output.Utils.Put_UTF_8 (S, To_String (V));
     end Put_Image;
  
     ---------
--- 618,629 ----
     -- Put_Image --
     ---------------
  
!    procedure Put_Image (S : in out Root_Buffer_Type'Class; V : Big_Real) is
        --  This is implemented in terms of To_String. It might be more elegant
        --  and more efficient to do it the other way around, but this is the
        --  most expedient implementation for now.
     begin
!       Strings.Text_Buffers.Put_UTF_8 (S, To_String (V));
     end Put_Image;
  
     ---------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nbnbre.ads gcc-12.1.0/gcc/ada/libgnat/a-nbnbre.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nbnbre.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nbnbre.ads	Fri May  6 07:30:56 2022
***************
*** 15,27 ****
  
  with Ada.Numerics.Big_Numbers.Big_Integers;
  
! with Ada.Strings.Text_Output; use Ada.Strings.Text_Output;
  
  package Ada.Numerics.Big_Numbers.Big_Reals
    with Preelaborate
  is
     type Big_Real is private with
!      Real_Literal => From_String,
       Put_Image    => Put_Image;
  
     function Is_Valid (Arg : Big_Real) return Boolean
--- 15,27 ----
  
  with Ada.Numerics.Big_Numbers.Big_Integers;
  
! with Ada.Strings.Text_Buffers; use Ada.Strings.Text_Buffers;
  
  package Ada.Numerics.Big_Numbers.Big_Reals
    with Preelaborate
  is
     type Big_Real is private with
!      Real_Literal => From_Universal_Image,
       Put_Image    => Put_Image;
  
     function Is_Valid (Arg : Big_Real) return Boolean
*************** is
*** 122,129 ****
  
     function From_String (Arg : String) return Valid_Big_Real
       with Global => null;
!    function From_String (Numerator, Denominator : String) return Valid_Big_Real
!      with Global => null;
  
     function To_Quotient_String (Arg : Big_Real) return String is
       (Big_Integers.To_String (Numerator (Arg)) & " / "
--- 122,134 ----
  
     function From_String (Arg : String) return Valid_Big_Real
       with Global => null;
! 
!    function From_Universal_Image (Arg : String) return Valid_Big_Real
!      renames From_String;
!    function From_Universal_Image (Num, Den : String) return Valid_Big_Real is
!      (Big_Integers.From_Universal_Image (Num) /
!       Big_Integers.From_Universal_Image (Den))
!       with Global => null;
  
     function To_Quotient_String (Arg : Big_Real) return String is
       (Big_Integers.To_String (Numerator (Arg)) & " / "
*************** is
*** 133,139 ****
     function From_Quotient_String (Arg : String) return Valid_Big_Real
       with Global => null;
  
!    procedure Put_Image (S : in out Sink'Class; V : Big_Real);
  
     function "+" (L : Valid_Big_Real) return Valid_Big_Real
       with Global => null;
--- 138,144 ----
     function From_Quotient_String (Arg : String) return Valid_Big_Real
       with Global => null;
  
!    procedure Put_Image (S : in out Root_Buffer_Type'Class; V : Big_Real);
  
     function "+" (L : Valid_Big_Real) return Valid_Big_Real
       with Global => null;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ngcefu.adb gcc-12.1.0/gcc/ada/libgnat/a-ngcefu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ngcefu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ngcefu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ngcoar.adb gcc-12.1.0/gcc/ada/libgnat/a-ngcoar.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ngcoar.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ngcoar.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2006-2022, 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- --
***************
*** 29,34 ****
--- 29,45 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ --  Preconditions, postconditions, ghost code, loop invariants and assertions
+ --  in this unit are meant for analysis only, not for run-time checking, as it
+ --  would be too costly otherwise. This is enforced by setting the assertion
+ --  policy to Ignore.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with System.Generic_Array_Operations; use System.Generic_Array_Operations;
  
  package body Ada.Numerics.Generic_Complex_Arrays is
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ngcoty.adb gcc-12.1.0/gcc/ada/libgnat/a-ngcoty.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ngcoty.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ngcoty.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ngcoty.ads gcc-12.1.0/gcc/ada/libgnat/a-ngcoty.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ngcoty.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ngcoty.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ngelfu.adb gcc-12.1.0/gcc/ada/libgnat/a-ngelfu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ngelfu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ngelfu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ngelfu.ads gcc-12.1.0/gcc/ada/libgnat/a-ngelfu.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ngelfu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ngelfu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2012-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2012-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** is
*** 126,132 ****
       Pre => Cycle > 0.0
         and then X /= 0.0
         and then Float_Type'Base'Remainder (X, Cycle) /= 0.0
!        and then abs Float_Type'Base'Remainder (X, Cycle) = 0.5 * Cycle;
  
     function Arcsin (X : Float_Type'Base) return Float_Type'Base with
       Pre  => abs X <= 1.0,
--- 126,132 ----
       Pre => Cycle > 0.0
         and then X /= 0.0
         and then Float_Type'Base'Remainder (X, Cycle) /= 0.0
!        and then abs Float_Type'Base'Remainder (X, Cycle) /= 0.5 * Cycle;
  
     function Arcsin (X : Float_Type'Base) return Float_Type'Base with
       Pre  => abs X <= 1.0,
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ngrear.adb gcc-12.1.0/gcc/ada/libgnat/a-ngrear.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ngrear.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ngrear.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2006-2022, 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- --
***************
*** 36,41 ****
--- 36,52 ----
  --  BLAS/LAPACK implementation. Finally, on some platforms there are more
  --  floating point types than supported by BLAS/LAPACK.
  
+ --  Preconditions, postconditions, ghost code, loop invariants and assertions
+ --  in this unit are meant for analysis only, not for run-time checking, as it
+ --  would be too costly otherwise. This is enforced by setting the assertion
+ --  policy to Ignore.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with Ada.Containers.Generic_Anonymous_Array_Sort; use Ada.Containers;
  
  with System; use System;
*************** package body Ada.Numerics.Generic_Real_A
*** 614,620 ****
        --        different bounds, so take care indexing elements. Assignment
        --        as a whole is fine as sliding is automatic in that case.
  
!       Vectors := (if not Compute_Vectors then (1 .. 0 => (1 .. 0 => 0.0))
                    else Unit_Matrix (Vectors'Length (1), Vectors'Length (2)));
        Values := Diagonal (M);
  
--- 625,631 ----
        --        different bounds, so take care indexing elements. Assignment
        --        as a whole is fine as sliding is automatic in that case.
  
!       Vectors := (if not Compute_Vectors then [1 .. 0 => [1 .. 0 => 0.0]]
                    else Unit_Matrix (Vectors'Length (1), Vectors'Length (2)));
        Values := Diagonal (M);
  
*************** package body Ada.Numerics.Generic_Real_A
*** 637,643 ****
           --  an absolute value that exceeds the threshold.
  
           Diag := Values;
!          Diag_Adj := (others => 0.0); -- Accumulates adjustments to Diag
  
           for Row in 1 .. N - 1 loop
              for Col in Row + 1 .. N loop
--- 648,654 ----
           --  an absolute value that exceeds the threshold.
  
           Diag := Values;
!          Diag_Adj := [others => 0.0]; -- Accumulates adjustments to Diag
  
           for Row in 1 .. N - 1 loop
              for Col in Row + 1 .. N loop
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ngrear.ads gcc-12.1.0/gcc/ada/libgnat/a-ngrear.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ngrear.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ngrear.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nuauco.ads gcc-12.1.0/gcc/ada/libgnat/a-nuauco.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nuauco.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nuauco.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nuauco__x86.ads gcc-12.1.0/gcc/ada/libgnat/a-nuauco__x86.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nuauco__x86.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nuauco__x86.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nuaufl.ads gcc-12.1.0/gcc/ada/libgnat/a-nuaufl.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nuaufl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nuaufl.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                      (C Math Library Version, Float)                     --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                      (C Math Library Version, Float)                     --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nuaufl__wraplf.ads gcc-12.1.0/gcc/ada/libgnat/a-nuaufl__wraplf.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nuaufl__wraplf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nuaufl__wraplf.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                       (Double-based Version, Float)                      --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                       (Double-based Version, Float)                      --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nudira.adb gcc-12.1.0/gcc/ada/libgnat/a-nudira.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-nudira.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nudira.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nudira.ads gcc-12.1.0/gcc/ada/libgnat/a-nudira.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nudira.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nudira.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nuflra.adb gcc-12.1.0/gcc/ada/libgnat/a-nuflra.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-nuflra.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nuflra.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-nuflra.ads gcc-12.1.0/gcc/ada/libgnat/a-nuflra.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-nuflra.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-nuflra.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-numaux.ads gcc-12.1.0/gcc/ada/libgnat/a-numaux.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-numaux.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-numaux.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-rbtgbk.adb gcc-12.1.0/gcc/ada/libgnat/a-rbtgbk.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-rbtgbk.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-rbtgbk.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-rbtgbk.ads gcc-12.1.0/gcc/ada/libgnat/a-rbtgbk.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-rbtgbk.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-rbtgbk.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-rbtgbo.adb gcc-12.1.0/gcc/ada/libgnat/a-rbtgbo.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-rbtgbo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-rbtgbo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-rbtgbo.ads gcc-12.1.0/gcc/ada/libgnat/a-rbtgbo.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-rbtgbo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-rbtgbo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-rbtgso.adb gcc-12.1.0/gcc/ada/libgnat/a-rbtgso.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-rbtgso.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-rbtgso.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-rbtgso.ads gcc-12.1.0/gcc/ada/libgnat/a-rbtgso.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-rbtgso.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-rbtgso.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sbecin.adb gcc-12.1.0/gcc/ada/libgnat/a-sbecin.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-sbecin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sbecin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sbecin.ads gcc-12.1.0/gcc/ada/libgnat/a-sbecin.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-sbecin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sbecin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sbhcin.adb gcc-12.1.0/gcc/ada/libgnat/a-sbhcin.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-sbhcin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sbhcin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sbhcin.ads gcc-12.1.0/gcc/ada/libgnat/a-sbhcin.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-sbhcin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sbhcin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sblcin.adb gcc-12.1.0/gcc/ada/libgnat/a-sblcin.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-sblcin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sblcin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sblcin.ads gcc-12.1.0/gcc/ada/libgnat/a-sblcin.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-sblcin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sblcin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-secain.adb gcc-12.1.0/gcc/ada/libgnat/a-secain.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-secain.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-secain.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-secain.ads gcc-12.1.0/gcc/ada/libgnat/a-secain.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-secain.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-secain.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sequio.adb gcc-12.1.0/gcc/ada/libgnat/a-sequio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-sequio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sequio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sequio.ads gcc-12.1.0/gcc/ada/libgnat/a-sequio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-sequio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sequio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sfecin.ads gcc-12.1.0/gcc/ada/libgnat/a-sfecin.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-sfecin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sfecin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sfhcin.ads gcc-12.1.0/gcc/ada/libgnat/a-sfhcin.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-sfhcin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sfhcin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sflcin.ads gcc-12.1.0/gcc/ada/libgnat/a-sflcin.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-sflcin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sflcin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-shcain.adb gcc-12.1.0/gcc/ada/libgnat/a-shcain.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-shcain.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-shcain.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-shcain.ads gcc-12.1.0/gcc/ada/libgnat/a-shcain.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-shcain.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-shcain.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-siocst.adb gcc-12.1.0/gcc/ada/libgnat/a-siocst.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-siocst.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-siocst.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-siocst.ads gcc-12.1.0/gcc/ada/libgnat/a-siocst.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-siocst.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-siocst.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-slcain.adb gcc-12.1.0/gcc/ada/libgnat/a-slcain.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-slcain.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-slcain.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-slcain.ads gcc-12.1.0/gcc/ada/libgnat/a-slcain.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-slcain.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-slcain.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ssicst.adb gcc-12.1.0/gcc/ada/libgnat/a-ssicst.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ssicst.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ssicst.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ssicst.ads gcc-12.1.0/gcc/ada/libgnat/a-ssicst.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ssicst.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ssicst.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stboha.adb gcc-12.1.0/gcc/ada/libgnat/a-stboha.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stboha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stboha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stbubo.adb gcc-12.1.0/gcc/ada/libgnat/a-stbubo.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stbubo.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-stbubo.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,147 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                     ADA.STRINGS.TEXT_BUFFERS.BOUNDED                     --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.UTF_Encoding.Conversions;
+ with Ada.Strings.UTF_Encoding.Strings;
+ with Ada.Strings.UTF_Encoding.Wide_Strings;
+ with Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
+ package body Ada.Strings.Text_Buffers.Bounded is
+ 
+    --  Pretty much the same as the Unbounded version, except where different.
+    --
+    --  One could imagine inventing an Input_Mapping generic analogous to
+    --  the existing Output_Mapping generic to address the Get-related
+    --  Bounded/Unbounded code duplication issues, but let's not. In the
+    --  Output case, there was more substantial duplication and there were
+    --  3 clients (Bounded, Unbounded, and Files) instead of 2.
+ 
+    function Text_Truncated (Buffer : Buffer_Type) return Boolean is
+      (Buffer.Truncated);
+ 
+    function Get (Buffer : in out Buffer_Type) return String is
+    --  If all characters are 7 bits, we don't need to decode;
+    --  this is an optimization.
+    --  Otherwise, if all are 8 bits, we need to decode to get Latin-1.
+    --  Otherwise, the result is implementation defined, so we return a
+    --  String encoded as UTF-8. Note that the RM says "if any character
+    --  in the sequence is not defined in Character, the result is
+    --  implementation-defined", so we are not obliged to decode ANY
+    --  Latin-1 characters if ANY character is bigger than 8 bits.
+    begin
+       if Buffer.All_8_Bits and not Buffer.All_7_Bits then
+          return UTF_Encoding.Strings.Decode (Get_UTF_8 (Buffer));
+       else
+          return Get_UTF_8 (Buffer);
+       end if;
+    end Get;
+ 
+    function Wide_Get (Buffer : in out Buffer_Type) return Wide_String is
+    begin
+       return UTF_Encoding.Wide_Strings.Decode (Get_UTF_8 (Buffer));
+    end Wide_Get;
+ 
+    function Wide_Wide_Get (Buffer : in out Buffer_Type) return Wide_Wide_String
+    is
+    begin
+       return UTF_Encoding.Wide_Wide_Strings.Decode (Get_UTF_8 (Buffer));
+    end Wide_Wide_Get;
+ 
+    function Get_UTF_8
+      (Buffer : in out Buffer_Type) return UTF_Encoding.UTF_8_String
+    is
+    begin
+       return
+         Result : constant UTF_Encoding.UTF_8_String :=
+           UTF_Encoding.UTF_8_String
+             (Buffer.Chars (1 .. Text_Buffer_Count (Buffer.UTF_8_Length)))
+       do
+          --  Reset buffer to default initial value.
+          declare
+             Defaulted : Buffer_Type (0);
+ 
+             --  If this aggregate becomes illegal due to new field, don't
+             --  forget to add corresponding assignment statement below.
+             Dummy : array (1 .. 0) of Buffer_Type (0) :=
+               [others =>
+                  [Max_Characters => 0, Chars => <>, Indentation => <>,
+                   Indent_Pending => <>, UTF_8_Length => <>, UTF_8_Column => <>,
+                   All_7_Bits     => <>, All_8_Bits => <>, Truncated => <>]];
+          begin
+             Buffer.Indentation    := Defaulted.Indentation;
+             Buffer.Indent_Pending := Defaulted.Indent_Pending;
+             Buffer.UTF_8_Length   := Defaulted.UTF_8_Length;
+             Buffer.UTF_8_Column   := Defaulted.UTF_8_Column;
+             Buffer.All_7_Bits     := Defaulted.All_7_Bits;
+             Buffer.All_8_Bits     := Defaulted.All_8_Bits;
+             Buffer.Truncated      := Defaulted.Truncated;
+          end;
+       end return;
+    end Get_UTF_8;
+ 
+    function Wide_Get_UTF_16
+      (Buffer : in out Buffer_Type) return UTF_Encoding.UTF_16_Wide_String
+    is
+    begin
+       return
+         UTF_Encoding.Conversions.Convert
+           (Get_UTF_8 (Buffer), Input_Scheme => UTF_Encoding.UTF_8);
+    end Wide_Get_UTF_16;
+ 
+    procedure Put_UTF_8_Implementation
+      (Buffer : in out Root_Buffer_Type'Class;
+       Item   : UTF_Encoding.UTF_8_String)
+    is
+       procedure Buffer_Type_Implementation (Buffer : in out Buffer_Type);
+       --  View the passed-in Buffer parameter as being of type Buffer_Type,
+       --  not of Root_Buffer_Type'Class.
+ 
+       procedure Buffer_Type_Implementation (Buffer : in out Buffer_Type) is
+       begin
+          for Char of Item loop
+             if Buffer.UTF_8_Length = Integer (Buffer.Max_Characters) then
+                Buffer.Truncated := True;
+                return;
+             end if;
+ 
+             Buffer.All_7_Bits := @ and then Character'Pos (Char) < 128;
+ 
+             Buffer.UTF_8_Length                                    := @ + 1;
+             Buffer.UTF_8_Column                                    := @ + 1;
+             Buffer.Chars (Text_Buffer_Count (Buffer.UTF_8_Length)) := Char;
+          end loop;
+       end Buffer_Type_Implementation;
+    begin
+       if Item'Length > 0 then
+          Buffer_Type_Implementation (Buffer_Type (Buffer));
+       end if;
+    end Put_UTF_8_Implementation;
+ 
+ end Ada.Strings.Text_Buffers.Bounded;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stbubo.ads gcc-12.1.0/gcc/ada/libgnat/a-stbubo.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stbubo.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-stbubo.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,73 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                     ADA.STRINGS.TEXT_BUFFERS.BOUNDED                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package Ada.Strings.Text_Buffers.Bounded with
+    Pure
+ is
+ 
+    type Buffer_Type (Max_Characters : Text_Buffer_Count) is
+      new Root_Buffer_Type with private with
+       Default_Initial_Condition => not Text_Truncated (Buffer_Type);
+ 
+    function Text_Truncated (Buffer : Buffer_Type) return Boolean;
+ 
+    function Get (Buffer : in out Buffer_Type) return String with
+       Post'Class => Get'Result'First = 1 and then Current_Indent (Buffer) = 0;
+ 
+    function Wide_Get (Buffer : in out Buffer_Type) return Wide_String with
+       Post'Class => Wide_Get'Result'First = 1
+       and then Current_Indent (Buffer) = 0;
+ 
+    function Wide_Wide_Get
+      (Buffer : in out Buffer_Type) return Wide_Wide_String with
+       Post'Class => Wide_Wide_Get'Result'First = 1
+       and then Current_Indent (Buffer) = 0;
+ 
+    function Get_UTF_8
+      (Buffer : in out Buffer_Type) return UTF_Encoding.UTF_8_String with
+       Post'Class => Get_UTF_8'Result'First = 1
+       and then Current_Indent (Buffer) = 0;
+ 
+    function Wide_Get_UTF_16
+      (Buffer : in out Buffer_Type) return UTF_Encoding.UTF_16_Wide_String with
+       Post'Class => Wide_Get_UTF_16'Result'First = 1
+       and then Current_Indent (Buffer) = 0;
+ 
+ private
+ 
+    procedure Put_UTF_8_Implementation
+      (Buffer : in out Root_Buffer_Type'Class;
+       Item   : UTF_Encoding.UTF_8_String)
+      with Pre => Buffer in Buffer_Type'Class;
+ 
+    package Mapping is new Output_Mapping (Put_UTF_8_Implementation);
+ 
+    subtype Positive_Text_Buffer_Count is
+      Text_Buffer_Count range 1 .. Text_Buffer_Count'Last;
+ 
+    type Convertible_To_UTF_8_String is
+      array (Positive_Text_Buffer_Count range <>) of Character;
+ 
+    type Buffer_Type (Max_Characters : Text_Buffer_Count)
+    is new Mapping.Buffer_Type with record
+       Truncated : Boolean := False;
+       --  True if we ran out of space on a Put
+ 
+       Chars : Convertible_To_UTF_8_String (1 .. Max_Characters);
+    end record;
+ 
+ end Ada.Strings.Text_Buffers.Bounded;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stbufi.adb gcc-12.1.0/gcc/ada/libgnat/a-stbufi.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stbufi.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-stbufi.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,82 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                      ADA.STRINGS.TEXT_BUFFERS.FILES                      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package body Ada.Strings.Text_Buffers.Files is
+ 
+    procedure Put_UTF_8_Implementation
+      (Buffer : in out Root_Buffer_Type'Class;
+       Item : UTF_Encoding.UTF_8_String) is
+       Result : Integer;
+    begin
+       Result := OS.Write (File_Buffer (Buffer).FD,
+                           Item (Item'First)'Address,
+                           Item'Length);
+       if Result /= Item'Length then
+          raise Program_Error with OS.Errno_Message;
+       end if;
+    end Put_UTF_8_Implementation;
+ 
+    function Create_From_FD
+      (FD                      : System.OS_Lib.File_Descriptor;
+       Close_Upon_Finalization : Boolean := True) return File_Buffer
+    is
+       use OS;
+    begin
+       if FD = Invalid_FD then
+          raise Program_Error with OS.Errno_Message;
+       end if;
+       return Result : File_Buffer do
+          Result.FD := FD;
+          Result.Close_Upon_Finalization := Close_Upon_Finalization;
+       end return;
+    end Create_From_FD;
+ 
+    function Create_File (Name : String) return File_Buffer is
+    begin
+       return Create_From_FD (OS.Create_File (Name, Fmode => OS.Binary));
+    end Create_File;
+ 
+    procedure Finalize (Ref : in out Self_Ref) is
+       Success : Boolean;
+       use OS;
+    begin
+       if Ref.Self.FD /= OS.Invalid_FD
+         and then Ref.Self.Close_Upon_Finalization
+       then
+          Close (Ref.Self.FD, Success);
+          if not Success then
+             raise Program_Error with OS.Errno_Message;
+          end if;
+       end if;
+       Ref.Self.FD := OS.Invalid_FD;
+    end Finalize;
+ 
+ end Ada.Strings.Text_Buffers.Files;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stbufi.ads gcc-12.1.0/gcc/ada/libgnat/a-stbufi.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stbufi.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-stbufi.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,77 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                      ADA.STRINGS.TEXT_BUFFERS.FILES                      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Finalization;
+ with System.OS_Lib;
+ 
+ package Ada.Strings.Text_Buffers.Files is
+ 
+    type File_Buffer is new Root_Buffer_Type with private;
+    --  Output written to a File_Buffer is written to the associated file.
+ 
+    function Create_From_FD
+      (FD                      : System.OS_Lib.File_Descriptor;
+       Close_Upon_Finalization : Boolean := True)
+      return File_Buffer;
+    --  file closed upon finalization if specified
+ 
+    function Create_File (Name : String) return File_Buffer;
+    --  file closed upon finalization
+ 
+    function Create_Standard_Output_Buffer return File_Buffer is
+      (Create_From_FD (System.OS_Lib.Standout,
+                       Close_Upon_Finalization => False));
+    function Create_Standard_Error_Buffer return File_Buffer is
+      (Create_From_FD (System.OS_Lib.Standerr,
+                       Close_Upon_Finalization => False));
+ 
+ private
+ 
+    procedure Put_UTF_8_Implementation
+      (Buffer : in out Root_Buffer_Type'Class;
+       Item : UTF_Encoding.UTF_8_String)
+      with Pre => Buffer in File_Buffer'Class;
+ 
+    package Mapping is new Output_Mapping (Put_UTF_8_Implementation);
+ 
+    package OS renames System.OS_Lib;
+ 
+    type Self_Ref (Self : not null access File_Buffer)
+      is new Finalization.Limited_Controlled with null record;
+    overriding procedure Finalize (Ref : in out Self_Ref);
+ 
+    type File_Buffer is new Mapping.Buffer_Type with record
+       FD  : OS.File_Descriptor := OS.Invalid_FD;
+       Ref : Self_Ref (File_Buffer'Access);
+       Close_Upon_Finalization : Boolean := False;
+    end record;
+ 
+ end Ada.Strings.Text_Buffers.Files;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stbufo.adb gcc-12.1.0/gcc/ada/libgnat/a-stbufo.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stbufo.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-stbufo.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,158 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                    ADA.STRINGS.TEXT_BUFFERS.FORMATTING                   --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.Text_Buffers.Unbounded;
+ with Ada.Strings.Text_Buffers.Files;
+ 
+ package body Ada.Strings.Text_Buffers.Formatting is
+ 
+    use Ada.Strings.Text_Buffers.Files;
+    use Ada.Strings.Text_Buffers.Utils;
+ 
+    procedure Put
+      (S : in out Root_Buffer_Type'Class; T : Template;
+       X1, X2, X3, X4, X5, X6, X7, X8, X9 : Utils.UTF_8_Lines := "")
+    is
+       J : Positive := T'First;
+       Used : array (1 .. 9) of Boolean := [others => False];
+    begin
+       while J <= T'Last loop
+          if T (J) = '\' then
+             J := J + 1;
+             case T (J) is
+                when 'n' =>
+                   New_Line (S);
+                when '\' =>
+                   Put_7bit (S, '\');
+                when 'i' =>
+                   Increase_Indent (S);
+                when 'o' =>
+                   Decrease_Indent (S);
+                when 'I' =>
+                   Increase_Indent (S, 1);
+                when 'O' =>
+                   Decrease_Indent (S, 1);
+ 
+                when '1' =>
+                   Used (1) := True;
+                   Put_UTF_8_Lines (S, X1);
+                when '2' =>
+                   Used (2) := True;
+                   Put_UTF_8_Lines (S, X2);
+                when '3' =>
+                   Used (3) := True;
+                   Put_UTF_8_Lines (S, X3);
+                when '4' =>
+                   Used (4) := True;
+                   Put_UTF_8_Lines (S, X4);
+                when '5' =>
+                   Used (5) := True;
+                   Put_UTF_8_Lines (S, X5);
+                when '6' =>
+                   Used (6) := True;
+                   Put_UTF_8_Lines (S, X6);
+                when '7' =>
+                   Used (7) := True;
+                   Put_UTF_8_Lines (S, X7);
+                when '8' =>
+                   Used (8) := True;
+                   Put_UTF_8_Lines (S, X8);
+                when '9' =>
+                   Used (9) := True;
+                   Put_UTF_8_Lines (S, X9);
+ 
+                when others =>
+                   raise Program_Error;
+             end case;
+          else
+             Put_7bit (S, T (J));
+          end if;
+ 
+          J := J + 1;
+       end loop;
+ 
+       if not Used (1) then
+          pragma Assert (X1 = "");
+       end if;
+       if not Used (2) then
+          pragma Assert (X2 = "");
+       end if;
+       if not Used (3) then
+          pragma Assert (X3 = "");
+       end if;
+       if not Used (4) then
+          pragma Assert (X4 = "");
+       end if;
+       if not Used (5) then
+          pragma Assert (X5 = "");
+       end if;
+       if not Used (6) then
+          pragma Assert (X6 = "");
+       end if;
+       if not Used (7) then
+          pragma Assert (X7 = "");
+       end if;
+       if not Used (8) then
+          pragma Assert (X8 = "");
+       end if;
+       if not Used (9) then
+          pragma Assert (X9 = "");
+       end if;
+    end Put;
+ 
+    function Format
+      (T : Template;
+       X1, X2, X3, X4, X5, X6, X7, X8, X9 : Utils.UTF_8_Lines := "")
+      return Utils.UTF_8_Lines
+    is
+       Buffer : Unbounded.Buffer_Type;
+    begin
+       Put (Buffer, T, X1, X2, X3, X4, X5, X6, X7, X8, X9);
+       return Buffer.Get_UTF_8;
+    end Format;
+ 
+    procedure Put
+      (T : Template;
+       X1, X2, X3, X4, X5, X6, X7, X8, X9 : Utils.UTF_8_Lines := "") is
+       Buffer : File_Buffer := Create_Standard_Output_Buffer;
+    begin
+       Put (Buffer, T, X1, X2, X3, X4, X5, X6, X7, X8, X9);
+    end Put;
+ 
+    procedure Err
+      (T : Template;
+       X1, X2, X3, X4, X5, X6, X7, X8, X9 : Utils.UTF_8_Lines := "") is
+       Buffer : File_Buffer := Create_Standard_Error_Buffer;
+    begin
+       Put (Buffer, T, X1, X2, X3, X4, X5, X6, X7, X8, X9);
+    end Err;
+ 
+ end Ada.Strings.Text_Buffers.Formatting;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stbufo.ads gcc-12.1.0/gcc/ada/libgnat/a-stbufo.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stbufo.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-stbufo.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,73 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                    ADA.STRINGS.TEXT_BUFFERS.FORMATTING                   --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.Text_Buffers.Utils;
+ 
+ package Ada.Strings.Text_Buffers.Formatting is
+ 
+    --  Template-based output, based loosely on C's printf family. Unlike
+    --  printf, it is type safe. We don't support myriad formatting options; the
+    --  caller is expected to call 'Image, or other functions that might have
+    --  various formatting capabilities.
+ 
+    type Template is new Utils.UTF_8;
+ 
+    procedure Put
+      (S : in out Root_Buffer_Type'Class; T : Template;
+       X1, X2, X3, X4, X5, X6, X7, X8, X9 : Utils.UTF_8_Lines := "");
+    --  Prints the template as is, except for the following escape sequences:
+    --    "\n" is end of line.
+    --    "\i" indents by the default amount, and "\o" outdents.
+    --    "\I" indents by one space, and "\O" outdents.
+    --    "\1" is replaced with X1, and similarly for 2, 3, ....
+    --    "\\" is "\".
+ 
+    --  Note that the template is not type String, to avoid this sort of thing:
+    --
+    --      https://xkcd.com/327/
+ 
+    procedure Put
+      (T : Template;
+       X1, X2, X3, X4, X5, X6, X7, X8, X9 : Utils.UTF_8_Lines := "");
+    --  Sends to standard output
+ 
+    procedure Err
+      (T : Template;
+       X1, X2, X3, X4, X5, X6, X7, X8, X9 : Utils.UTF_8_Lines := "");
+    --  Sends to standard error
+ 
+    function Format
+      (T : Template;
+       X1, X2, X3, X4, X5, X6, X7, X8, X9 : Utils.UTF_8_Lines := "")
+      return Utils.UTF_8_Lines;
+    --  Returns a UTF-8-encoded String
+ 
+ end Ada.Strings.Text_Buffers.Formatting;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stbuun.adb gcc-12.1.0/gcc/ada/libgnat/a-stbuun.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stbuun.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-stbuun.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,193 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                    ADA.STRINGS.TEXT_BUFFERS.UNBOUNDED                    --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Unchecked_Deallocation;
+ with Ada.Strings.UTF_Encoding.Conversions;
+ with Ada.Strings.UTF_Encoding.Strings;
+ with Ada.Strings.UTF_Encoding.Wide_Strings;
+ with Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
+ package body Ada.Strings.Text_Buffers.Unbounded is
+ 
+    function Get (Buffer : in out Buffer_Type) return String is
+    --  If all characters are 7 bits, we don't need to decode;
+    --  this is an optimization.
+    --  Otherwise, if all are 8 bits, we need to decode to get Latin-1.
+    --  Otherwise, the result is implementation defined, so we return a
+    --  String encoded as UTF-8. Note that the RM says "if any character
+    --  in the sequence is not defined in Character, the result is
+    --  implementation-defined", so we are not obliged to decode ANY
+    --  Latin-1 characters if ANY character is bigger than 8 bits.
+    begin
+       if Buffer.All_8_Bits and not Buffer.All_7_Bits then
+          return UTF_Encoding.Strings.Decode (Get_UTF_8 (Buffer));
+       else
+          return Get_UTF_8 (Buffer);
+       end if;
+    end Get;
+ 
+    function Wide_Get (Buffer : in out Buffer_Type) return Wide_String is
+    begin
+       return UTF_Encoding.Wide_Strings.Decode (Get_UTF_8 (Buffer));
+    end Wide_Get;
+ 
+    function Wide_Wide_Get (Buffer : in out Buffer_Type) return Wide_Wide_String
+    is
+    begin
+       return UTF_Encoding.Wide_Wide_Strings.Decode (Get_UTF_8 (Buffer));
+    end Wide_Wide_Get;
+ 
+    function Get_UTF_8
+      (Buffer : in out Buffer_Type) return UTF_Encoding.UTF_8_String
+    is
+    begin
+       return Result : UTF_Encoding.UTF_8_String (1 .. Buffer.UTF_8_Length) do
+          declare
+             Target_First : Positive := 1;
+             Ptr : Chunk_Access := Buffer.List.First_Chunk'Unchecked_Access;
+             Target_Last  : Positive;
+          begin
+             while Ptr /= null loop
+                Target_Last := Target_First + Ptr.Chars'Length - 1;
+                if Target_Last <= Result'Last then
+                   --  all of chunk is assigned to Result
+                   Result (Target_First .. Target_Last) := Ptr.Chars;
+                   Target_First := Target_First + Ptr.Chars'Length;
+                else
+                   --  only part of (last) chunk is assigned to Result
+                   declare
+                      Final_Target : UTF_Encoding.UTF_8_String renames
+                        Result (Target_First .. Result'Last);
+                   begin
+                      Final_Target := Ptr.Chars (1 .. Final_Target'Length);
+                   end;
+                   pragma Assert (Ptr.Next = null);
+                   Target_First := Integer'Last;
+                end if;
+ 
+                Ptr := Ptr.Next;
+             end loop;
+          end;
+ 
+          --  Reset buffer to default initial value.
+          declare
+             Defaulted : Buffer_Type;
+ 
+             --  If this aggregate becomes illegal due to new field, don't
+             --  forget to add corresponding assignment statement below.
+             Dummy : array (1 .. 0) of Buffer_Type :=
+               [others =>
+                  [Indentation  => <>, Indent_Pending => <>, UTF_8_Length => <>,
+                   UTF_8_Column => <>, All_7_Bits => <>, All_8_Bits => <>,
+                   List         => <>, Last_Used => <>]];
+          begin
+             Buffer.Indentation    := Defaulted.Indentation;
+             Buffer.Indent_Pending := Defaulted.Indent_Pending;
+             Buffer.UTF_8_Length   := Defaulted.UTF_8_Length;
+             Buffer.UTF_8_Column   := Defaulted.UTF_8_Column;
+             Buffer.All_7_Bits     := Defaulted.All_7_Bits;
+             Buffer.All_8_Bits     := Defaulted.All_8_Bits;
+             Buffer.Last_Used      := Defaulted.Last_Used;
+             Finalize (Buffer.List); -- free any allocated chunks
+          end;
+       end return;
+    end Get_UTF_8;
+ 
+    function Wide_Get_UTF_16
+      (Buffer : in out Buffer_Type) return UTF_Encoding.UTF_16_Wide_String
+    is
+    begin
+       return
+         UTF_Encoding.Conversions.Convert
+           (Get_UTF_8 (Buffer), Input_Scheme => UTF_Encoding.UTF_8);
+    end Wide_Get_UTF_16;
+ 
+    procedure Put_UTF_8_Implementation
+      (Buffer : in out Root_Buffer_Type'Class;
+       Item   : UTF_Encoding.UTF_8_String)
+    is
+       procedure Buffer_Type_Implementation (Buffer : in out Buffer_Type);
+       --  View the passed-in Buffer parameter as being of type Buffer_Type,
+       --  not of type Root_Buffer_Type'Class.
+ 
+       procedure Buffer_Type_Implementation (Buffer : in out Buffer_Type) is
+       begin
+          for Char of Item loop
+             Buffer.All_7_Bits := @ and then Character'Pos (Char) < 128;
+ 
+             if Buffer.Last_Used = Buffer.List.Current_Chunk.Length then
+                --  Current chunk is full; allocate a new one with doubled size
+ 
+                declare
+                   Cc     : Chunk renames Buffer.List.Current_Chunk.all;
+                   Max    : constant Positive := Integer'Last / 2;
+                   Length : constant Natural  :=
+                     Integer'Min (Max, 2 * Cc.Length);
+                begin
+                   pragma Assert (Cc.Next = null);
+                   Cc.Next                   := new Chunk (Length => Length);
+                   Buffer.List.Current_Chunk := Cc.Next;
+                   Buffer.Last_Used          := 0;
+                end;
+             end if;
+ 
+             Buffer.UTF_8_Length                                := @ + 1;
+             Buffer.UTF_8_Column                                := @ + 1;
+             Buffer.Last_Used                                   := @ + 1;
+             Buffer.List.Current_Chunk.Chars (Buffer.Last_Used) := Char;
+          end loop;
+       end Buffer_Type_Implementation;
+    begin
+       Buffer_Type_Implementation (Buffer_Type (Buffer));
+    end Put_UTF_8_Implementation;
+ 
+    procedure Initialize (List : in out Managed_Chunk_List) is
+    begin
+       List.Current_Chunk := List.First_Chunk'Unchecked_Access;
+    end Initialize;
+ 
+    procedure Finalize (List : in out Managed_Chunk_List) is
+       procedure Free is new Ada.Unchecked_Deallocation (Chunk, Chunk_Access);
+       Ptr : Chunk_Access := List.First_Chunk.Next;
+    begin
+       while Ptr /= null loop
+          declare
+             Old_Ptr : Chunk_Access := Ptr;
+          begin
+             Ptr := Ptr.Next;
+             Free (Old_Ptr);
+          end;
+       end loop;
+ 
+       List.First_Chunk.Next := null;
+       Initialize (List);
+    end Finalize;
+ 
+ end Ada.Strings.Text_Buffers.Unbounded;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stbuun.ads gcc-12.1.0/gcc/ada/libgnat/a-stbuun.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stbuun.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-stbuun.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,87 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                    ADA.STRINGS.TEXT_BUFFERS.UNBOUNDED                    --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Finalization;
+ package Ada.Strings.Text_Buffers.Unbounded with
+    Preelaborate
+    --  , Nonblocking
+    --  , Global => null
+ is
+ 
+    type Buffer_Type is new Root_Buffer_Type with private;
+ 
+    function Get (Buffer : in out Buffer_Type) return String with
+       Post'Class => Get'Result'First = 1 and then Current_Indent (Buffer) = 0;
+ 
+    function Wide_Get (Buffer : in out Buffer_Type) return Wide_String with
+       Post'Class => Wide_Get'Result'First = 1
+       and then Current_Indent (Buffer) = 0;
+ 
+    function Wide_Wide_Get
+      (Buffer : in out Buffer_Type) return Wide_Wide_String with
+       Post'Class => Wide_Wide_Get'Result'First = 1
+       and then Current_Indent (Buffer) = 0;
+ 
+    function Get_UTF_8
+      (Buffer : in out Buffer_Type) return UTF_Encoding.UTF_8_String with
+       Post'Class => Get_UTF_8'Result'First = 1
+       and then Current_Indent (Buffer) = 0;
+ 
+    function Wide_Get_UTF_16
+      (Buffer : in out Buffer_Type) return UTF_Encoding.UTF_16_Wide_String with
+       Post'Class => Wide_Get_UTF_16'Result'First = 1
+       and then Current_Indent (Buffer) = 0;
+ 
+ private
+ 
+    procedure Put_UTF_8_Implementation
+      (Buffer : in out Root_Buffer_Type'Class;
+       Item : UTF_Encoding.UTF_8_String)
+      with Pre => Buffer in Buffer_Type'Class;
+ 
+    package Mapping is new Output_Mapping (Put_UTF_8_Implementation);
+ 
+    type Chunk;
+    type Chunk_Access is access all Chunk;
+    type Chunk (Length : Positive) is record
+       Next  : Chunk_Access := null;
+       Chars : UTF_Encoding.UTF_8_String (1 .. Length);
+    end record;
+ 
+    type Managed_Chunk_List is new Ada.Finalization.Limited_Controlled with
+    record
+       First_Chunk : aliased Chunk (64);
+       --  First chunk in list is not created by an allocator; it is
+       --  large enough to suffice for many common images.
+ 
+       Current_Chunk : Chunk_Access;
+       --  Chunk we are currrently writing to.
+       --  Initialized to Managed_Chunk_List.First'Access.
+    end record;
+ 
+    overriding procedure Initialize (List : in out Managed_Chunk_List);
+    --  List.Current_Chunk := List.First_Chunk'Unchecked_Access;
+ 
+    overriding procedure Finalize (List : in out Managed_Chunk_List);
+    --  Free any allocated chunks.
+ 
+    type Buffer_Type is new Mapping.Buffer_Type with record
+       List : Managed_Chunk_List;
+ 
+       Last_Used : Natural := 0;
+       --  Index of last used char in List.Current_Chunk.all; 0 if none used.
+    end record;
+ 
+ end Ada.Strings.Text_Buffers.Unbounded;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stbuut.adb gcc-12.1.0/gcc/ada/libgnat/a-stbuut.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stbuut.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-stbuut.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,81 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                      ADA.STRINGS.TEXT_BUFFERS.UTILS                      --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package body Ada.Strings.Text_Buffers.Utils is
+ 
+    procedure Put_7bit
+      (Buffer : in out Root_Buffer_Type'Class; Item : Character_7)
+    is
+    begin
+       Put (Buffer, [Item]);
+    end Put_7bit;
+ 
+    procedure Put_Character
+      (Buffer : in out Root_Buffer_Type'Class; Item : Character)
+    is
+    begin
+       Put (Buffer, [Item]);
+    end Put_Character;
+ 
+    procedure Put_Wide_Character
+      (Buffer : in out Root_Buffer_Type'Class; Item : Wide_Character)
+    is
+    begin
+       Wide_Put (Buffer, [Item]);
+    end Put_Wide_Character;
+ 
+    procedure Put_Wide_Wide_Character
+      (Buffer : in out Root_Buffer_Type'Class; Item : Wide_Wide_Character)
+    is
+    begin
+       Wide_Wide_Put (Buffer, [Item]);
+    end Put_Wide_Wide_Character;
+ 
+    procedure Put_UTF_8_Lines
+      (Buffer : in out Root_Buffer_Type'Class; Item : UTF_8_Lines)
+    is
+    begin
+       Put (Buffer, Item);
+    end Put_UTF_8_Lines;
+ 
+    function Column (Buffer : Root_Buffer_Type'Class) return Positive is
+    begin
+       return Buffer.UTF_8_Column;
+    end Column;
+ 
+    procedure Tab_To_Column
+      (Buffer : in out Root_Buffer_Type'Class; Column : Positive)
+    is
+    begin
+       Put (Buffer, String'(1 .. Column - Utils.Column (Buffer) => ' '));
+    end Tab_To_Column;
+ 
+ end Ada.Strings.Text_Buffers.Utils;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stbuut.ads gcc-12.1.0/gcc/ada/libgnat/a-stbuut.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stbuut.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-stbuut.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,82 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                      ADA.STRINGS.TEXT_BUFFERS.UTILS                      --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
+ 
+ package Ada.Strings.Text_Buffers.Utils with Pure is
+ 
+    --  Ada.Strings.Text_Buffers is a predefined unit (see Ada RM A.4.12).
+    --  This is a GNAT-defined child unit of that parent.
+ 
+    subtype Character_7 is
+      Character range Character'Val (0) .. Character'Val (2**7 - 1);
+ 
+    procedure Put_7bit
+      (Buffer : in out Root_Buffer_Type'Class; Item : Character_7);
+    procedure Put_Character
+      (Buffer : in out Root_Buffer_Type'Class; Item : Character);
+    procedure Put_Wide_Character
+      (Buffer : in out Root_Buffer_Type'Class; Item : Wide_Character);
+    procedure Put_Wide_Wide_Character
+      (Buffer : in out Root_Buffer_Type'Class; Item : Wide_Wide_Character);
+    --  Single character output procedures.
+ 
+    function Column (Buffer : Root_Buffer_Type'Class) return Positive with
+       Inline;
+    --  Current output column. The Column is initially 1, and is incremented for
+    --  each 8-bit character output. A call to New_Line sets Column back to 1.
+    --  The next character to be output will go in this column.
+ 
+    procedure Tab_To_Column
+      (Buffer : in out Root_Buffer_Type'Class; Column : Positive);
+    --  Put spaces until we're at or past Column.
+ 
+    subtype Sink is Root_Buffer_Type;
+ 
+    function NL return Character is (ASCII.LF) with Inline;
+ 
+    function UTF_8_Length (Buffer : Root_Buffer_Type'Class) return Natural;
+ 
+    subtype UTF_8_Lines is UTF_Encoding.UTF_8_String with
+      Predicate =>
+        UTF_Encoding.Wide_Wide_Strings.Encode
+          (UTF_Encoding.Wide_Wide_Strings.Decode (UTF_8_Lines)) = UTF_8_Lines;
+ 
+    subtype UTF_8 is UTF_8_Lines with
+      Predicate => (for all UTF_8_Char of UTF_8 => UTF_8_Char /= NL);
+ 
+    procedure Put_UTF_8_Lines
+      (Buffer : in out Root_Buffer_Type'Class; Item : UTF_8_Lines);
+ 
+ private
+    function UTF_8_Length (Buffer : Root_Buffer_Type'Class) return Natural
+      is (Buffer.UTF_8_Length);
+ end Ada.Strings.Text_Buffers.Utils;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stmaco.ads gcc-12.1.0/gcc/ada/libgnat/a-stmaco.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stmaco.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stmaco.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private
*** 64,100 ****
     package L renames Ada.Characters.Latin_1;
  
     Control_Set               : constant Character_Set :=
!      (L.NUL                  ..  L.US                  => True,
        L.DEL                  ..  L.APC                 => True,
!       others                                           => False);
  
     Graphic_Set               : constant Character_Set :=
!      (L.Space                ..  L.Tilde               => True,
        L.No_Break_Space       ..  L.LC_Y_Diaeresis      => True,
!       others                                           => False);
  
     Letter_Set                : constant Character_Set :=
!      ('A'                    .. 'Z'                    => True,
        L.LC_A                 ..  L.LC_Z                => True,
        L.UC_A_Grave           ..  L.UC_O_Diaeresis      => True,
        L.UC_O_Oblique_Stroke  ..  L.LC_O_Diaeresis      => True,
        L.LC_O_Oblique_Stroke  ..  L.LC_Y_Diaeresis      => True,
!       others                                           => False);
  
     Lower_Set                 : constant Character_Set :=
!      (L.LC_A                 ..  L.LC_Z                => True,
        L.LC_German_Sharp_S    ..  L.LC_O_Diaeresis      => True,
        L.LC_O_Oblique_Stroke  ..  L.LC_Y_Diaeresis      => True,
!       others                                           => False);
  
     Upper_Set                 : constant Character_Set :=
!      ('A'                    ..  'Z'                   => True,
        L.UC_A_Grave           ..  L.UC_O_Diaeresis      => True,
        L.UC_O_Oblique_Stroke  ..  L.UC_Icelandic_Thorn  => True,
!       others                                           => False);
  
     Basic_Set                 : constant Character_Set :=
!      ('A'                    .. 'Z'                    => True,
        L.LC_A                 ..  L.LC_Z                => True,
        L.UC_AE_Diphthong      ..  L.UC_AE_Diphthong     => True,
        L.LC_AE_Diphthong      ..  L.LC_AE_Diphthong     => True,
--- 64,100 ----
     package L renames Ada.Characters.Latin_1;
  
     Control_Set               : constant Character_Set :=
!      [L.NUL                  ..  L.US                  => True,
        L.DEL                  ..  L.APC                 => True,
!       others                                           => False];
  
     Graphic_Set               : constant Character_Set :=
!      [L.Space                ..  L.Tilde               => True,
        L.No_Break_Space       ..  L.LC_Y_Diaeresis      => True,
!       others                                           => False];
  
     Letter_Set                : constant Character_Set :=
!      ['A'                    .. 'Z'                    => True,
        L.LC_A                 ..  L.LC_Z                => True,
        L.UC_A_Grave           ..  L.UC_O_Diaeresis      => True,
        L.UC_O_Oblique_Stroke  ..  L.LC_O_Diaeresis      => True,
        L.LC_O_Oblique_Stroke  ..  L.LC_Y_Diaeresis      => True,
!       others                                           => False];
  
     Lower_Set                 : constant Character_Set :=
!      [L.LC_A                 ..  L.LC_Z                => True,
        L.LC_German_Sharp_S    ..  L.LC_O_Diaeresis      => True,
        L.LC_O_Oblique_Stroke  ..  L.LC_Y_Diaeresis      => True,
!       others                                           => False];
  
     Upper_Set                 : constant Character_Set :=
!      ['A'                    ..  'Z'                   => True,
        L.UC_A_Grave           ..  L.UC_O_Diaeresis      => True,
        L.UC_O_Oblique_Stroke  ..  L.UC_Icelandic_Thorn  => True,
!       others                                           => False];
  
     Basic_Set                 : constant Character_Set :=
!      ['A'                    .. 'Z'                    => True,
        L.LC_A                 ..  L.LC_Z                => True,
        L.UC_AE_Diphthong      ..  L.UC_AE_Diphthong     => True,
        L.LC_AE_Diphthong      ..  L.LC_AE_Diphthong     => True,
*************** private
*** 103,142 ****
        L.LC_Icelandic_Thorn   ..  L.LC_Icelandic_Thorn  => True,
        L.UC_Icelandic_Eth     ..  L.UC_Icelandic_Eth    => True,
        L.LC_Icelandic_Eth     ..  L.LC_Icelandic_Eth    => True,
!       others                                           => False);
  
     Decimal_Digit_Set         : constant Character_Set :=
!      ('0'                    ..  '9'                   => True,
!       others                                           => False);
  
     Hexadecimal_Digit_Set     : constant Character_Set :=
!      ('0'                    ..  '9'                   => True,
        'A'                    ..  'F'                   => True,
        L.LC_A                 ..  L.LC_F                => True,
!       others                                           => False);
  
     Alphanumeric_Set          : constant Character_Set :=
!      ('0'                    ..  '9'                   => True,
        'A'                    ..  'Z'                   => True,
        L.LC_A                 ..  L.LC_Z                => True,
        L.UC_A_Grave           ..  L.UC_O_Diaeresis      => True,
        L.UC_O_Oblique_Stroke  ..  L.LC_O_Diaeresis      => True,
        L.LC_O_Oblique_Stroke  ..  L.LC_Y_Diaeresis      => True,
!       others                                           => False);
  
     Special_Set               : constant Character_Set :=
!      (L.Space                ..  L.Solidus             => True,
        L.Colon                ..  L.Commercial_At       => True,
        L.Left_Square_Bracket  ..  L.Grave               => True,
        L.Left_Curly_Bracket   ..  L.Tilde               => True,
        L.No_Break_Space       ..  L.Inverted_Question   => True,
        L.Multiplication_Sign  ..  L.Multiplication_Sign => True,
        L.Division_Sign        ..  L.Division_Sign       => True,
!       others                                           => False);
  
     ISO_646_Set               : constant Character_Set :=
!      (L.NUL                  ..  L.DEL                 => True,
!       others                                           => False);
  
     Lower_Case_Map : constant Character_Mapping :=
       (L.NUL                         &  -- NUL                             0
--- 103,142 ----
        L.LC_Icelandic_Thorn   ..  L.LC_Icelandic_Thorn  => True,
        L.UC_Icelandic_Eth     ..  L.UC_Icelandic_Eth    => True,
        L.LC_Icelandic_Eth     ..  L.LC_Icelandic_Eth    => True,
!       others                                           => False];
  
     Decimal_Digit_Set         : constant Character_Set :=
!      ['0'                    ..  '9'                   => True,
!       others                                           => False];
  
     Hexadecimal_Digit_Set     : constant Character_Set :=
!      ['0'                    ..  '9'                   => True,
        'A'                    ..  'F'                   => True,
        L.LC_A                 ..  L.LC_F                => True,
!       others                                           => False];
  
     Alphanumeric_Set          : constant Character_Set :=
!      ['0'                    ..  '9'                   => True,
        'A'                    ..  'Z'                   => True,
        L.LC_A                 ..  L.LC_Z                => True,
        L.UC_A_Grave           ..  L.UC_O_Diaeresis      => True,
        L.UC_O_Oblique_Stroke  ..  L.LC_O_Diaeresis      => True,
        L.LC_O_Oblique_Stroke  ..  L.LC_Y_Diaeresis      => True,
!       others                                           => False];
  
     Special_Set               : constant Character_Set :=
!      [L.Space                ..  L.Solidus             => True,
        L.Colon                ..  L.Commercial_At       => True,
        L.Left_Square_Bracket  ..  L.Grave               => True,
        L.Left_Curly_Bracket   ..  L.Tilde               => True,
        L.No_Break_Space       ..  L.Inverted_Question   => True,
        L.Multiplication_Sign  ..  L.Multiplication_Sign => True,
        L.Division_Sign        ..  L.Division_Sign       => True,
!       others                                           => False];
  
     ISO_646_Set               : constant Character_Set :=
!      [L.NUL                  ..  L.DEL                 => True,
!       others                                           => False];
  
     Lower_Case_Map : constant Character_Mapping :=
       (L.NUL                         &  -- NUL                             0
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stobbu.adb gcc-12.1.0/gcc/ada/libgnat/a-stobbu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stobbu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stobbu.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,53 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                    ADA.STRINGS.TEXT_OUTPUT.BIT_BUCKETS                   --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package body Ada.Strings.Text_Output.Bit_Buckets is
- 
-    type Bit_Bucket_Type is new Sink with null record;
-    overriding procedure Full_Method (S : in out Bit_Bucket_Type);
-    overriding procedure Flush_Method (S : in out Bit_Bucket_Type);
- 
-    The_Bit_Bucket : aliased Bit_Bucket_Type
-      (Chunk_Length => Default_Chunk_Length);
-    function Bit_Bucket return Sink_Access is (The_Bit_Bucket'Access);
- 
-    overriding procedure Full_Method (S : in out Bit_Bucket_Type)
-                 renames Flush_Method;
- 
-    overriding procedure Flush_Method (S : in out Bit_Bucket_Type) is
-    begin
-       S.Last := 0;
-    end Flush_Method;
- 
- begin
-    The_Bit_Bucket.Indent_Amount := 0;
-    The_Bit_Bucket.Cur_Chunk := The_Bit_Bucket.Initial_Chunk'Access;
- end Ada.Strings.Text_Output.Bit_Buckets;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stobbu.ads gcc-12.1.0/gcc/ada/libgnat/a-stobbu.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stobbu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stobbu.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,34 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                    ADA.STRINGS.TEXT_OUTPUT.BIT_BUCKETS                   --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package Ada.Strings.Text_Output.Bit_Buckets is
-    function Bit_Bucket return Sink_Access;
- end Ada.Strings.Text_Output.Bit_Buckets;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stobfi.adb gcc-12.1.0/gcc/ada/libgnat/a-stobfi.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stobfi.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stobfi.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,118 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                    ADA.STRINGS.TEXT_OUTPUT.BASIC_FILES                   --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Ada.Strings.Text_Output.Utils; use Ada.Strings.Text_Output.Utils;
- package body Ada.Strings.Text_Output.Basic_Files is
-    use type OS.File_Descriptor;
- 
-    function Create_From_FD
-      (FD : OS.File_Descriptor;
-       Indent_Amount : Natural;
-       Chunk_Length : Positive) return File;
-    --  Create a file from an OS file descriptor
- 
-    function Create_From_FD
-      (FD : OS.File_Descriptor;
-       Indent_Amount : Natural;
-       Chunk_Length : Positive) return File
-    is
-    begin
-       if FD = OS.Invalid_FD then
-          raise Program_Error with OS.Errno_Message;
-       end if;
-       return Result : File (Chunk_Length) do
-          Result.Indent_Amount := Indent_Amount;
-          Result.Cur_Chunk := Result.Initial_Chunk'Unchecked_Access;
-          Result.FD := FD;
-       end return;
-    end Create_From_FD;
- 
-    function Create_File
-      (Name : String;
-       Indent_Amount : Natural := Default_Indent_Amount;
-       Chunk_Length : Positive := Default_Chunk_Length) return File
-    is
-    begin
-       return Create_From_FD
-         (OS.Create_File (Name, Fmode => OS.Text),
-          Indent_Amount, Chunk_Length);
-    end Create_File;
- 
-    function Create_New_File
-      (Name : String;
-       Indent_Amount : Natural := Default_Indent_Amount;
-       Chunk_Length : Positive := Default_Chunk_Length) return File
-    is
-    begin
-       return Create_From_FD
-         (OS.Create_New_File (Name, Fmode => OS.Text),
-          Indent_Amount, Chunk_Length);
-    end Create_New_File;
- 
-    procedure Close (S : in out File'Class) is
-       Status : Boolean;
-    begin
-       Flush (S);
- 
-       if S.FD not in OS.Standout | OS.Standerr then -- Don't close these
-          OS.Close (S.FD, Status);
-          if not Status then
-             raise Program_Error with OS.Errno_Message;
-          end if;
-       end if;
-    end Close;
- 
-    overriding procedure Full_Method (S : in out File) renames Flush_Method;
- 
-    overriding procedure Flush_Method (S : in out File) is
-       pragma Assert (S.Cur_Chunk = S.Initial_Chunk'Unchecked_Access);
-       Res : constant Integer :=
-         OS.Write (S.FD, S.Cur_Chunk.Chars'Address, S.Last);
-    begin
-       if Res /= S.Last then
-          raise Program_Error with OS.Errno_Message;
-       end if;
-       S.Last := 0;
-    end Flush_Method;
- 
-    The_Stdout : aliased File :=
-      Create_From_FD (OS.Standout,
-                      Indent_Amount => Default_Indent_Amount,
-                      Chunk_Length => Default_Chunk_Length);
-    The_Stderr : aliased File :=
-      Create_From_FD (OS.Standerr,
-                      Indent_Amount => Default_Indent_Amount,
-                      Chunk_Length => Default_Chunk_Length);
- 
-    function Standard_Output return Sink_Access is (The_Stdout'Access);
-    function Standard_Error return Sink_Access is (The_Stderr'Access);
- 
- end Ada.Strings.Text_Output.Basic_Files;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stobfi.ads gcc-12.1.0/gcc/ada/libgnat/a-stobfi.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stobfi.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stobfi.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,66 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                    ADA.STRINGS.TEXT_OUTPUT.BASIC_FILES                   --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- private with GNAT.OS_Lib;
- package Ada.Strings.Text_Output.Basic_Files is
-    --  Normally, you should use Ada.Strings.Text_Output.Files, which
-    --  automatically Closes files via finalization. If you don't want to use
-    --  finalization, use this package instead. You must then Close the file by
-    --  hand. The semantics is otherwise the same as Files.
- 
-    function Standard_Output return Sink_Access;
-    function Standard_Error return Sink_Access;
- 
-    type File (<>) is new Sink with private;
- 
-    function Create_File
-      (Name : String;
-       Indent_Amount : Natural := Default_Indent_Amount;
-       Chunk_Length : Positive := Default_Chunk_Length) return File;
-    function Create_New_File
-      (Name : String;
-       Indent_Amount : Natural := Default_Indent_Amount;
-       Chunk_Length : Positive := Default_Chunk_Length) return File;
- 
-    procedure Close (S : in out File'Class);
- 
- private
- 
-    package OS renames GNAT.OS_Lib;
- 
-    type File is new Sink with record
-       FD : OS.File_Descriptor := OS.Invalid_FD;
-    end record;
- 
-    overriding procedure Full_Method (S : in out File);
-    overriding procedure Flush_Method (S : in out File);
- 
- end Ada.Strings.Text_Output.Basic_Files;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-storio.adb gcc-12.1.0/gcc/ada/libgnat/a-storio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-storio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-storio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stoubu.adb gcc-12.1.0/gcc/ada/libgnat/a-stoubu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stoubu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stoubu.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,148 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                      ADA.STRINGS.TEXT_OUTPUT.BUFFERS                     --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Unchecked_Deallocation;
- with Ada.Strings.UTF_Encoding.Strings;
- with Ada.Strings.UTF_Encoding.Wide_Strings;
- with Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
- package body Ada.Strings.Text_Output.Buffers is
- 
-    type Chunk_Access is access all Chunk;
- 
-    function New_Buffer
-      (Indent_Amount : Natural := Default_Indent_Amount;
-       Chunk_Length : Positive := Default_Chunk_Length) return Buffer
-    is
-    begin
-       return Result : Buffer (Chunk_Length) do
-          Result.Indent_Amount := Indent_Amount;
-          Result.Cur_Chunk := Result.Initial_Chunk'Unchecked_Access;
-       end return;
-    end New_Buffer;
- 
-    --  We need type conversions of Chunk_Access values in the following two
-    --  procedures, because the one in Text_Output has Storage_Size => 0,
-    --  because Text_Output is Pure. We do not run afoul of 13.11.2(16/3),
-    --  which requires the allocation and deallocation to have the same pool,
-    --  because the allocation in Full_Method and the deallocation in Destroy
-    --  use the same access type, and therefore the same pool.
- 
-    procedure Destroy (S : in out Buffer) is
-       procedure Free is new Unchecked_Deallocation (Chunk, Chunk_Access);
-       Cur : Chunk_Access := Chunk_Access (S.Initial_Chunk.Next);
-    begin
-       while Cur /= null loop
-          declare
-             Temp : constant Chunk_Access := Chunk_Access (Cur.Next);
-          begin
-             Free (Cur);
-             Cur := Temp;
-          end;
-       end loop;
- 
-       S.Cur_Chunk := null;
-    end Destroy;
- 
-    overriding procedure Full_Method (S : in out Buffer) is
-    begin
-       pragma Assert (S.Cur_Chunk.Next = null);
-       pragma Assert (S.Last = S.Cur_Chunk.Chars'Length);
-       S.Cur_Chunk.Next :=
-         Text_Output.Chunk_Access (Chunk_Access'(new Chunk (S.Chunk_Length)));
-       S.Cur_Chunk := S.Cur_Chunk.Next;
-       S.Num_Extra_Chunks := @ + 1;
-       S.Last := 0;
-    end Full_Method;
- 
-    function UTF_8_Length (S : Buffer'Class) return Natural is
-    begin
-       return S.Num_Extra_Chunks * S.Chunk_Length + S.Last;
-    end UTF_8_Length;
- 
-    procedure Get_UTF_8
-      (S : Buffer'Class; Result : out UTF_8_Lines)
-    is
-       Cur : access constant Chunk := S.Initial_Chunk'Access;
-       First : Positive := 1;
-    begin
-       loop
-          if Cur.Next = null then
-             pragma Assert (Result'Last = First + S.Last - 1);
-             Result (First .. Result'Last) := Cur.Chars (1 .. S.Last);
-             exit;
-          end if;
- 
-          pragma Assert (S.Chunk_Length = Cur.Chars'Length);
-          Result (First .. First + S.Chunk_Length - 1) := Cur.Chars;
-          First := First + S.Chunk_Length;
-          Cur := Cur.Next;
-       end loop;
-    end Get_UTF_8;
- 
-    function Get_UTF_8 (S : Buffer'Class) return UTF_8_Lines is
-    begin
-       return Result : String (1 .. UTF_8_Length (S)) do
-          Get_UTF_8 (S, Result);
-       end return;
-    end Get_UTF_8;
- 
-    function Get (S : Buffer'Class) return String is
-    begin
-       --  If all characters are 7 bits, we don't need to decode;
-       --  this is an optimization.
- 
-       --  Otherwise, if all are 8 bits, we need to decode to get Latin-1.
-       --  Otherwise, the result is implementation defined, so we return a
-       --  String encoded as UTF-8. (Note that the AI says "if any character
-       --  in the sequence is not defined in Character, the result is
-       --  implementation-defined", so we are not obliged to decode ANY
-       --  Latin-1 characters if ANY character is bigger than 8 bits.
- 
-       if S.All_7_Bits then
-          return Get_UTF_8 (S);
-       elsif S.All_8_Bits then
-          return UTF_Encoding.Strings.Decode (Get_UTF_8 (S));
-       else
-          return Get_UTF_8 (S);
-       end if;
-    end Get;
- 
-    function Wide_Get (S : Buffer'Class) return Wide_String is
-    begin
-       return UTF_Encoding.Wide_Strings.Decode (Get_UTF_8 (S));
-    end Wide_Get;
- 
-    function Wide_Wide_Get (S : Buffer'Class) return Wide_Wide_String is
-    begin
-       return UTF_Encoding.Wide_Wide_Strings.Decode (Get_UTF_8 (S));
-    end Wide_Wide_Get;
- 
- end Ada.Strings.Text_Output.Buffers;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stoubu.ads gcc-12.1.0/gcc/ada/libgnat/a-stoubu.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stoubu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stoubu.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,73 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                      ADA.STRINGS.TEXT_OUTPUT.BUFFERS                     --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package Ada.Strings.Text_Output.Buffers is
- 
-    type Buffer (<>) is new Sink with private;
- 
-    function New_Buffer
-      (Indent_Amount : Natural := Default_Indent_Amount;
-       Chunk_Length : Positive := Default_Chunk_Length) return Buffer;
- 
-    procedure Destroy (S : in out Buffer);
-    --  Reclaim any heap-allocated data, and render the Buffer unusable.
-    --  It would make sense to do this via finalization, but we wish to
-    --  avoid controlled types in the generated code for 'Image.
- 
-    function Get_UTF_8 (S : Buffer'Class) return UTF_8_Lines;
-    --  Get the characters in S, encoded as UTF-8.
- 
-    function UTF_8_Length (S : Buffer'Class) return Natural;
-    procedure Get_UTF_8
-      (S : Buffer'Class; Result : out UTF_8_Lines) with
-        Pre => Result'First = 1 and Result'Last = UTF_8_Length (S);
-    --  This is a procedure version of the Get_UTF_8 function, for
-    --  efficiency. The Result String must be the exact right length.
- 
-    function Get (S : Buffer'Class) return String;
-    function Wide_Get (S : Buffer'Class) return Wide_String;
-    function Wide_Wide_Get (S : Buffer'Class) return Wide_Wide_String;
-    --  Get the characters in S, decoded as [[Wide_]Wide_]String.
-    --  There is no need for procedure versions of these, because
-    --  they are intended primarily to implement the [[Wide_]Wide_]Image
-    --  attribute, which is already a function.
- 
- private
-    type Chunk_Count is new Natural;
-    type Buffer is new Sink with record
-       Num_Extra_Chunks : Natural := 0;
-       --  Number of chunks in the linked list, not including Initial_Chunk.
-    end record;
- 
-    overriding procedure Full_Method (S : in out Buffer);
-    overriding procedure Flush_Method (S : in out Buffer) is null;
- 
- end Ada.Strings.Text_Output.Buffers;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stoufi.adb gcc-12.1.0/gcc/ada/libgnat/a-stoufi.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stoufi.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stoufi.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,123 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                       ADA.STRINGS.TEXT_OUTPUT.FILES                      --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Ada.Strings.Text_Output.Utils; use Ada.Strings.Text_Output.Utils;
- package body Ada.Strings.Text_Output.Files is
-    use type OS.File_Descriptor;
- 
-    function Create_From_FD
-      (FD : OS.File_Descriptor;
-       Indent_Amount : Natural;
-       Chunk_Length : Positive) return File;
-    --  Create a file from an OS file descriptor
- 
-    function Create_From_FD
-      (FD : OS.File_Descriptor;
-       Indent_Amount : Natural;
-       Chunk_Length : Positive) return File
-    is
-    begin
-       if FD = OS.Invalid_FD then
-          raise Program_Error with OS.Errno_Message;
-       end if;
-       return Result : File (Chunk_Length) do
-          Result.Indent_Amount := Indent_Amount;
-          Result.Cur_Chunk := Result.Initial_Chunk'Unchecked_Access;
-          Result.FD := FD;
-       end return;
-    end Create_From_FD;
- 
-    function Create_File
-      (Name : String;
-       Indent_Amount : Natural := Default_Indent_Amount;
-       Chunk_Length : Positive := Default_Chunk_Length) return File
-    is
-    begin
-       return Create_From_FD
-         (OS.Create_File (Name, Fmode => OS.Text),
-          Indent_Amount, Chunk_Length);
-    end Create_File;
- 
-    function Create_New_File
-      (Name : String;
-       Indent_Amount : Natural := Default_Indent_Amount;
-       Chunk_Length : Positive := Default_Chunk_Length) return File
-    is
-    begin
-       return Create_From_FD
-         (OS.Create_New_File (Name, Fmode => OS.Text),
-          Indent_Amount, Chunk_Length);
-    end Create_New_File;
- 
-    overriding procedure Finalize (Ref : in out Self_Ref) is
-    begin
-       Close (Ref.Self.all);
-    end Finalize;
- 
-    procedure Close (S : in out File'Class) is
-       Status : Boolean;
-    begin
-       Flush (S);
- 
-       if S.FD not in OS.Standout | OS.Standerr then -- Don't close these
-          OS.Close (S.FD, Status);
-          if not Status then
-             raise Program_Error with OS.Errno_Message;
-          end if;
-       end if;
-    end Close;
- 
-    overriding procedure Full_Method (S : in out File) renames Flush_Method;
- 
-    overriding procedure Flush_Method (S : in out File) is
-       pragma Assert (S.Cur_Chunk = S.Initial_Chunk'Unchecked_Access);
-       Res : constant Integer :=
-         OS.Write (S.FD, S.Cur_Chunk.Chars'Address, S.Last);
-    begin
-       if Res /= S.Last then
-          raise Program_Error with OS.Errno_Message;
-       end if;
-       S.Last := 0;
-    end Flush_Method;
- 
-    The_Stdout : aliased File :=
-      Create_From_FD (OS.Standout,
-                      Indent_Amount => Default_Indent_Amount,
-                      Chunk_Length => Default_Chunk_Length);
-    The_Stderr : aliased File :=
-      Create_From_FD (OS.Standerr,
-                      Indent_Amount => Default_Indent_Amount,
-                      Chunk_Length => Default_Chunk_Length);
- 
-    function Standard_Output return Sink_Access is (The_Stdout'Access);
-    function Standard_Error return Sink_Access is (The_Stderr'Access);
- 
- end Ada.Strings.Text_Output.Files;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stoufi.ads gcc-12.1.0/gcc/ada/libgnat/a-stoufi.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stoufi.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stoufi.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,72 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                       ADA.STRINGS.TEXT_OUTPUT.FILES                      --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- private with GNAT.OS_Lib;
- private with Ada.Finalization;
- package Ada.Strings.Text_Output.Files is
-    --  This package supports a Sink type that sends output to a file. The file
-    --  is automatically closed when finalized.
- 
-    function Standard_Output return Sink_Access;
-    function Standard_Error return Sink_Access;
- 
-    type File (<>) is new Sink with private;
- 
-    function Create_File
-      (Name : String;
-       Indent_Amount : Natural := Default_Indent_Amount;
-       Chunk_Length : Positive := Default_Chunk_Length) return File;
-    function Create_New_File
-      (Name : String;
-       Indent_Amount : Natural := Default_Indent_Amount;
-       Chunk_Length : Positive := Default_Chunk_Length) return File;
-    --  Create a file. Create_New_File raises an exception if the file already
-    --  exists; Create_File overwrites.
- 
-    procedure Close (S : in out File'Class);
- 
- private
- 
-    package OS renames GNAT.OS_Lib;
- 
-    type Self_Ref (Self : access File) is new Finalization.Limited_Controlled
-      with null record;
-    overriding procedure Finalize (Ref : in out Self_Ref);
- 
-    type File is new Sink with record
-       FD : OS.File_Descriptor := OS.Invalid_FD;
-       Ref : Self_Ref (File'Access);
-    end record;
- 
-    overriding procedure Full_Method (S : in out File);
-    overriding procedure Flush_Method (S : in out File);
- 
- end Ada.Strings.Text_Output.Files;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stoufo.adb gcc-12.1.0/gcc/ada/libgnat/a-stoufo.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stoufo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stoufo.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,155 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                    ADA.STRINGS.TEXT_OUTPUT.FORMATTING                    --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Ada.Strings.Text_Output.Files;
- with Ada.Strings.Text_Output.Buffers; use Ada.Strings.Text_Output.Buffers;
- with Ada.Strings.Text_Output.Utils; use Ada.Strings.Text_Output.Utils;
- package body Ada.Strings.Text_Output.Formatting is
- 
-    procedure Put
-      (S : in out Sink'Class; T : Template;
-       X1, X2, X3, X4, X5, X6, X7, X8, X9 : UTF_8_Lines := "")
-    is
-       J : Positive := T'First;
-       Used : array (1 .. 9) of Boolean := (others => False);
-    begin
-       while J <= T'Last loop
-          if T (J) = '\' then
-             J := J + 1;
-             case T (J) is
-                when 'n' =>
-                   New_Line (S);
-                when '\' =>
-                   Put_7bit (S, '\');
-                when 'i' =>
-                   Indent (S);
-                when 'o' =>
-                   Outdent (S);
-                when 'I' =>
-                   Indent (S, 1);
-                when 'O' =>
-                   Outdent (S, 1);
- 
-                when '1' =>
-                   Used (1) := True;
-                   Put_UTF_8_Lines (S, X1);
-                when '2' =>
-                   Used (2) := True;
-                   Put_UTF_8_Lines (S, X2);
-                when '3' =>
-                   Used (3) := True;
-                   Put_UTF_8_Lines (S, X3);
-                when '4' =>
-                   Used (4) := True;
-                   Put_UTF_8_Lines (S, X4);
-                when '5' =>
-                   Used (5) := True;
-                   Put_UTF_8_Lines (S, X5);
-                when '6' =>
-                   Used (6) := True;
-                   Put_UTF_8_Lines (S, X6);
-                when '7' =>
-                   Used (7) := True;
-                   Put_UTF_8_Lines (S, X7);
-                when '8' =>
-                   Used (8) := True;
-                   Put_UTF_8_Lines (S, X8);
-                when '9' =>
-                   Used (9) := True;
-                   Put_UTF_8_Lines (S, X9);
- 
-                when others =>
-                   raise Program_Error;
-             end case;
-          else
-             Put_7bit (S, T (J));
-          end if;
- 
-          J := J + 1;
-       end loop;
- 
-       if not Used (1) then
-          pragma Assert (X1 = "");
-       end if;
-       if not Used (2) then
-          pragma Assert (X2 = "");
-       end if;
-       if not Used (3) then
-          pragma Assert (X3 = "");
-       end if;
-       if not Used (4) then
-          pragma Assert (X4 = "");
-       end if;
-       if not Used (5) then
-          pragma Assert (X5 = "");
-       end if;
-       if not Used (6) then
-          pragma Assert (X6 = "");
-       end if;
-       if not Used (7) then
-          pragma Assert (X7 = "");
-       end if;
-       if not Used (8) then
-          pragma Assert (X8 = "");
-       end if;
-       if not Used (9) then
-          pragma Assert (X9 = "");
-       end if;
- 
-       Flush (S);
-    end Put;
- 
-    procedure Put
-      (T : Template;
-       X1, X2, X3, X4, X5, X6, X7, X8, X9 : UTF_8_Lines := "") is
-    begin
-       Put (Files.Standard_Output.all, T, X1, X2, X3, X4, X5, X6, X7, X8, X9);
-    end Put;
- 
-    procedure Err
-      (T : Template;
-       X1, X2, X3, X4, X5, X6, X7, X8, X9 : UTF_8_Lines := "") is
-    begin
-       Put (Files.Standard_Error.all, T, X1, X2, X3, X4, X5, X6, X7, X8, X9);
-    end Err;
- 
-    function Format
-      (T : Template;
-       X1, X2, X3, X4, X5, X6, X7, X8, X9 : UTF_8_Lines := "")
-      return UTF_8_Lines
-    is
-       Buf : Buffer := New_Buffer;
-    begin
-       Put (Buf, T, X1, X2, X3, X4, X5, X6, X7, X8, X9);
-       return Get_UTF_8 (Buf);
-    end Format;
- 
- end Ada.Strings.Text_Output.Formatting;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stoufo.ads gcc-12.1.0/gcc/ada/libgnat/a-stoufo.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stoufo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stoufo.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,72 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                    ADA.STRINGS.TEXT_OUTPUT.FORMATTING                    --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package Ada.Strings.Text_Output.Formatting is
- 
-    --  Template-based output, based loosely on C's printf family. Unlike
-    --  printf, it is type safe. We don't support myriad formatting options; the
-    --  caller is expected to call 'Image, or other functions that might have
-    --  various formatting capabilities.
-    --
-    --  Each of the following calls Flush
- 
-    type Template is new UTF_8;
-    procedure Put
-      (S : in out Sink'Class; T : Template;
-       X1, X2, X3, X4, X5, X6, X7, X8, X9 : UTF_8_Lines := "");
-    --  Prints the template as is, except for the following escape sequences:
-    --    "\n" is end of line.
-    --    "\i" indents by the default amount, and "\o" outdents.
-    --    "\I" indents by one space, and "\O" outdents.
-    --    "\1" is replaced with X1, and similarly for 2, 3, ....
-    --    "\\" is "\".
- 
-    --  Note that the template is not type String, to avoid this sort of thing:
-    --
-    --      https://xkcd.com/327/
- 
-    procedure Put
-      (T : Template;
-       X1, X2, X3, X4, X5, X6, X7, X8, X9 : UTF_8_Lines := "");
-    --  Sends to standard output
- 
-    procedure Err
-      (T : Template;
-       X1, X2, X3, X4, X5, X6, X7, X8, X9 : UTF_8_Lines := "");
-    --  Sends to standard error
- 
-    function Format
-      (T : Template;
-       X1, X2, X3, X4, X5, X6, X7, X8, X9 : UTF_8_Lines := "")
-      return UTF_8_Lines;
-    --  Returns a UTF-8-encoded String
- 
- end Ada.Strings.Text_Output.Formatting;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stouut.adb gcc-12.1.0/gcc/ada/libgnat/a-stouut.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stouut.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stouut.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,272 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                       ADA.STRINGS.TEXT_OUTPUT.UTILS                      --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
- 
- package body Ada.Strings.Text_Output.Utils is
- 
-    procedure Put_Octet (S : in out Sink'Class; Item : Character) with Inline;
-    --  Send a single octet to the current Chunk
- 
-    procedure Adjust_Column (S : in out Sink'Class) with Inline;
-    --  Adjust the column for a non-NL character.
- 
-    procedure Put_UTF_8_Outline (S : in out Sink'Class; Item : UTF_8);
-    --  Out-of-line portion of Put_UTF_8. This exists solely to make Put_UTF_8
-    --  small enough to reasonably inline it.
- 
-    procedure Full (S : in out Sink'Class) is
-    begin
-       pragma Assert (S.Last = S.Chunk_Length);
-       Full_Method (S);
-       pragma Assert (S.Last = 0);
-    end Full;
- 
-    procedure Flush (S : in out Sink'Class) is
-    begin
-       Flush_Method (S);
-    end Flush;
- 
-    procedure Put_Octet (S : in out Sink'Class; Item : Character) is
-    begin
-       S.Last := @ + 1;
-       S.Cur_Chunk.Chars (S.Last) := Item;
-       pragma Assert (S.Chunk_Length = S.Cur_Chunk.Chars'Length);
-       if S.Last = S.Chunk_Length then
-          Full (S);
-       end if;
-    end Put_Octet;
- 
-    procedure Adjust_Column (S : in out Sink'Class) is
-    begin
-       --  If we're in the first column, indent. This is handled here, rather
-       --  than when we see NL, because we don't want spaces in a blank line.
-       --  The character we're about to put is not NL; NL is handled in
-       --  New_Line. So after indenting, we simply increment the Column.
- 
-       if S.Column = 1 then
-          Tab_To_Column (S, S.Indentation + 1);
-       end if;
-       S.Column := @ + 1;
-    end Adjust_Column;
- 
-    procedure Put_7bit (S : in out Sink'Class; Item : Character_7) is
-    begin
-       Adjust_Column (S);
-       Put_Octet (S, Item);
-    end Put_7bit;
- 
-    procedure Put_7bit_NL (S : in out Sink'Class; Item : Character_7) is
-    begin
-       if Item = NL then
-          New_Line (S);
-       else
-          Put_7bit (S, Item);
-       end if;
-    end Put_7bit_NL;
- 
-    procedure Put_Character (S : in out Sink'Class; Item : Character) is
-    begin
-       if Character'Pos (Item) < 2**7 then
-          Put_7bit_NL (S, Item);
-       else
-          Put_Wide_Wide_Character (S, To_Wide_Wide (Item));
-       end if;
-    end Put_Character;
- 
-    procedure Put_Wide_Character
-      (S : in out Sink'Class; Item : Wide_Character) is
-    begin
-       if Wide_Character'Pos (Item) < 2**7 then
-          Put_7bit_NL (S, From_Wide (Item));
-       else
-          Put_Wide_Wide_Character (S, To_Wide_Wide (Item));
-       end if;
-    end Put_Wide_Character;
- 
-    procedure Put_Wide_Wide_Character
-      (S : in out Sink'Class; Item : Wide_Wide_Character) is
-    begin
-       if Wide_Wide_Character'Pos (Item) < 2**7 then
-          Put_7bit_NL (S, From_Wide_Wide (Item));
-       else
-          S.All_7_Bits := False;
-          if Wide_Wide_Character'Pos (Item) >= 2**8 then
-             S.All_8_Bits := False;
-          end if;
-          declare
-             Temp : constant UTF_8_Lines :=
-               UTF_Encoding.Wide_Wide_Strings.Encode ((1 => Item));
-          begin
-             for X of Temp loop
-                pragma Assert (X /= NL);
-                Adjust_Column (S);
-                Put_Octet (S, X);
-             end loop;
-          end;
-       end if;
-    end Put_Wide_Wide_Character;
- 
-    procedure Put_UTF_8_Outline (S : in out Sink'Class; Item : UTF_8) is
-    begin
-       if S.Last + Item'Length = S.Chunk_Length then
-          --  Item fits exactly in current chunk
- 
-          S.Cur_Chunk.Chars (S.Last + 1 .. S.Last + Item'Length) := Item;
-          S.Last := S.Last + Item'Length;
-          S.Column := S.Column + Item'Length;
-          Full (S);
-          --  ???Seems like maybe we shouldn't call Full until we have MORE
-          --  characters. But then we can't pass Chunk_Length => 1 to
-          --  Create_File to get unbuffered output.
-       else
-          --  We get here only if Item doesn't fit in the current chunk, which
-          --  should be fairly rare. We split Item into Left and Right, where
-          --  Left exactly fills the current chunk, and recurse on Left and
-          --  Right. Right will fit into the next chunk unless it's very long,
-          --  so another level of recursion will be extremely rare.
- 
-          declare
-             Left_Length : constant Natural := S.Chunk_Length - S.Last;
-             Right_First : constant Natural := Item'First + Left_Length;
-             Left : UTF_8 renames Item (Item'First .. Right_First - 1);
-             Right : UTF_8 renames Item (Right_First .. Item'Last);
-             pragma Assert (Left & Right = Item);
-          begin
-             Put_UTF_8 (S, Left); -- This will call Full.
-             Put_UTF_8 (S, Right); -- This might call Full, but probably not.
-          end;
-       end if;
-    end Put_UTF_8_Outline;
- 
-    procedure Put_UTF_8 (S : in out Sink'Class; Item : UTF_8) is
-    begin
-       Adjust_Column (S);
- 
-       if S.Last + Item'Length < S.Chunk_Length then
-          --  Item fits in current chunk
- 
-          S.Cur_Chunk.Chars (S.Last + 1 .. S.Last + Item'Length) := Item;
-          S.Last := S.Last + Item'Length;
-          S.Column := S.Column + Item'Length;
-       else
-          Put_UTF_8_Outline (S, Item);
-       end if;
-    end Put_UTF_8;
- 
-    procedure Put_UTF_8_Lines (S : in out Sink'Class; Item : UTF_8_Lines) is
-       Line_Start, Index : Integer := Item'First;
-       --  Needs to be Integer, because Item'First might be negative for empty
-       --  Items.
-    begin
-       while Index <= Item'Last loop
-          if Item (Index) = NL then
-             if Index > Line_Start then
-                Put_UTF_8 (S, Item (Line_Start .. Index - 1));
-             end if;
-             New_Line (S);
-             Line_Start := Index + 1;
-          end if;
- 
-          Index := @ + 1;
-       end loop;
- 
-       if Index > Line_Start then
-          Put_UTF_8 (S, Item (Line_Start .. Index - 1));
-       end if;
-    end Put_UTF_8_Lines;
- 
-    procedure Put_String (S : in out Sink'Class; Item : String) is
-    begin
-       for X of Item loop
-          Put_Character (S, X);
-       end loop;
-    end Put_String;
- 
-    procedure Put_Wide_String (S : in out Sink'Class; Item : Wide_String) is
-    begin
-       for X of Item loop
-          Put_Wide_Character (S, X);
-       end loop;
-    end Put_Wide_String;
- 
-    procedure Put_Wide_Wide_String
-      (S : in out Sink'Class; Item : Wide_Wide_String) is
-    begin
-       for X of Item loop
-          Put_Wide_Wide_Character (S, X);
-       end loop;
-    end Put_Wide_Wide_String;
- 
-    procedure New_Line (S : in out Sink'Class) is
-    begin
-       S.Column := 1;
-       Put_Octet (S, NL);
-    end New_Line;
- 
-    function Column (S : Sink'Class) return Positive is (S.Column);
- 
-    procedure Tab_To_Column (S : in out Sink'Class; Column : Positive) is
-    begin
-       if S.Column < Column then
-          for X in 1 .. Column - S.Column loop
-             Put_Octet (S, ' ');
-          end loop;
-          S.Column := Column;
-       end if;
-    end Tab_To_Column;
- 
-    procedure Set_Indentation (S : in out Sink'Class; Amount : Natural) is
-    begin
-       S.Indentation := Amount;
-    end Set_Indentation;
- 
-    function Indentation (S : Sink'Class) return Natural is (S.Indentation);
- 
-    procedure Indent
-      (S : in out Sink'Class; Amount : Optional_Indentation := Default)
-    is
-       By : constant Natural :=
-         (if Amount = Default then S.Indent_Amount else Amount);
-    begin
-       Set_Indentation (S, Indentation (S) + By);
-    end Indent;
- 
-    procedure Outdent
-      (S : in out Sink'Class; Amount : Optional_Indentation := Default)
-    is
-       By : constant Natural :=
-         (if Amount = Default then S.Indent_Amount else Amount);
-    begin
-       Set_Indentation (S, Indentation (S) - By);
-    end Outdent;
- 
- end Ada.Strings.Text_Output.Utils;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stouut.ads gcc-12.1.0/gcc/ada/libgnat/a-stouut.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stouut.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stouut.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,107 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                       ADA.STRINGS.TEXT_OUTPUT.UTILS                      --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package Ada.Strings.Text_Output.Utils with Pure is
- 
-    --  This package provides utility functions on Sink'Class. These are
-    --  intended for use by Put_Image attributes, both the default versions
-    --  generated by the compiler, and user-defined ones.
- 
-    procedure Full (S : in out Sink'Class) with Inline;
-    --  Must be called when the current chunk is full. Dispatches to
-    --  Full_Method.
- 
-    procedure Flush (S : in out Sink'Class) with Inline;
-    --  Dispatches to Flush_Method
- 
-    --  Full_Method and Flush_Method should be called only via Full and Flush
- 
-    procedure Put_Character (S : in out Sink'Class; Item : Character);
-    procedure Put_Wide_Character (S : in out Sink'Class; Item : Wide_Character);
-    procedure Put_Wide_Wide_Character
-      (S : in out Sink'Class; Item : Wide_Wide_Character);
-    procedure Put_String (S : in out Sink'Class; Item : String);
-    procedure Put_Wide_String (S : in out Sink'Class; Item : Wide_String);
-    procedure Put_Wide_Wide_String
-      (S : in out Sink'Class; Item : Wide_Wide_String);
-    --  Encode characters or strings as UTF-8, and send them to S.
- 
-    subtype Character_7 is
-      Character range Character'Val (0) .. Character'Val (2**7 - 1);
-    --  7-bit character. These are the same in both Latin-1 and UTF-8.
- 
-    procedure Put_7bit (S : in out Sink'Class; Item : Character_7)
-      with Inline, Pre => Item /= NL;
-    procedure Put_7bit_NL (S : in out Sink'Class; Item : Character_7)
-      with Inline;
-    --  Put a 7-bit character, and adjust the Column. For Put_7bit_NL, Item can
-    --  be NL.
- 
-    procedure Put_UTF_8 (S : in out Sink'Class; Item : UTF_8) with Inline;
-    procedure Put_UTF_8_Lines (S : in out Sink'Class; Item : UTF_8_Lines);
-    --  Send data that is already UTF-8 encoded (including 7-bit ASCII) to
-    --  S. These are more efficient than Put_String.
- 
-    procedure New_Line (S : in out Sink'Class) with
-      Inline, Post => Column (S) = 1;
-    --  Puts the new-line character.
- 
-    function Column (S : Sink'Class) return Positive with Inline;
-    --  Current output column. The Column is initially 1, and is incremented for
-    --  each 7-bit character output, except for the new-line character, which
-    --  sets Column back to 1. The next character to be output will go in this
-    --  column.
- 
-    procedure Tab_To_Column (S : in out Sink'Class; Column : Positive);
-    --  Put spaces until we're at or past Column.
- 
-    procedure Set_Indentation (S : in out Sink'Class; Amount : Natural)
-      with Inline;
-    function Indentation (S : Sink'Class) return Natural with Inline;
-    --  Indentation is initially 0. Set_Indentation sets it, and Indentation
-    --  returns it. This number of space characters are put at the start of
-    --  each nonempty line.
- 
-    subtype Optional_Indentation is Integer range -1 .. Natural'Last;
-    Default : constant Optional_Indentation := -1;
- 
-    procedure Indent
-      (S : in out Sink'Class; Amount : Optional_Indentation := Default)
-       with Inline;
-    procedure Outdent
-      (S : in out Sink'Class; Amount : Optional_Indentation := Default)
-       with Inline;
-    --  Increase/decrease Indentation by Amount. If Amount = Default, the amount
-    --  specified by the Indent_Amount parameter of the sink creation function
-    --  is used. The sink creation functions are New_Buffer, Create_File, and
-    --  Create_New_File.
- 
- end Ada.Strings.Text_Output.Utils;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strbou.adb gcc-12.1.0/gcc/ada/libgnat/a-strbou.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-strbou.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strbou.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! package body Ada.Strings.Bounded is
  
     package body Generic_Bounded_Length is
  
--- 29,35 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! package body Ada.Strings.Bounded with SPARK_Mode is
  
     package body Generic_Bounded_Length is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strbou.ads gcc-12.1.0/gcc/ada/libgnat/a-strbou.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-strbou.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strbou.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
***************
*** 33,57 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Preconditions in this unit are meant for analysis only, not for run-time
! --  checking, so that the expected exceptions are raised. This is enforced by
! --  setting the corresponding assertion policy to Ignore.
! 
! pragma Assertion_Policy (Pre => Ignore);
  
! with Ada.Strings.Maps;
  with Ada.Strings.Superbounded;
  
! package Ada.Strings.Bounded is
     pragma Preelaborate;
  
     generic
        Max : Positive;
        --  Maximum length of a Bounded_String
  
!    package Generic_Bounded_Length with
!      Initial_Condition => Length (Null_Bounded_String) = 0
     is
  
        Max_Length : constant Positive := Max;
  
--- 33,73 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  The language-defined package Strings.Bounded provides a generic package
! --  each of whose instances yields a private type Bounded_String and a set
! --  of operations. An object of a particular Bounded_String type represents
! --  a String whose low bound is 1 and whose length can vary conceptually
! --  between 0 and a maximum size established at the generic instantiation. The
! --  subprograms for fixed-length string handling are either overloaded directly
! --  for Bounded_String, or are modified as needed to reflect the variability in
! --  length. Additionally, since the Bounded_String type is private, appropriate
! --  constructor and selector operations are provided.
  
! with Ada.Strings.Maps; use type Ada.Strings.Maps.Character_Mapping_Function;
  with Ada.Strings.Superbounded;
+ with Ada.Strings.Search;
  
! package Ada.Strings.Bounded with SPARK_Mode is
     pragma Preelaborate;
  
     generic
        Max : Positive;
        --  Maximum length of a Bounded_String
  
!    package Generic_Bounded_Length with SPARK_Mode,
!      Initial_Condition => Length (Null_Bounded_String) = 0,
!      Abstract_State    => null
     is
+       --  Preconditions in this unit are meant for analysis only, not for
+       --  run-time checking, so that the expected exceptions are raised. This
+       --  is enforced by setting the corresponding assertion policy to Ignore.
+       --  Postconditions and contract cases should not be executed at runtime
+       --  as well, in order not to slow down the execution of these functions.
+ 
+       pragma Assertion_Policy (Pre            => Ignore,
+                                Post           => Ignore,
+                                Contract_Cases => Ignore,
+                                Ghost          => Ignore);
  
        Max_Length : constant Positive := Max;
  
*************** package Ada.Strings.Bounded is
*** 59,69 ****
--- 75,90 ----
        pragma Preelaborable_Initialization (Bounded_String);
  
        Null_Bounded_String : constant Bounded_String;
+       --  Null_Bounded_String represents the null string. If an object of type
+       --  Bounded_String is not otherwise initialized, it will be initialized
+       --  to the same value as Null_Bounded_String.
  
        subtype Length_Range is Natural range 0 .. Max_Length;
  
        function Length (Source : Bounded_String) return Length_Range with
          Global => null;
+       --  The Length function returns the length of the string represented by
+       --  Source.
  
        --------------------------------------------------------
        -- Conversion, Concatenation, and Selection Functions --
*************** package Ada.Strings.Bounded is
*** 73,235 ****
          (Source : String;
           Drop   : Truncation := Error) return Bounded_String
        with
!         Pre    => (if Source'Length > Max_Length then Drop /= Error),
!         Post   =>
!           Length (To_Bounded_String'Result)
!         = Natural'Min (Max_Length, Source'Length),
!         Global => null;
  
        function To_String (Source : Bounded_String) return String with
-         Post   => To_String'Result'Length = Length (Source),
          Global => null;
  
        procedure Set_Bounded_String
          (Target : out Bounded_String;
           Source : String;
           Drop   : Truncation := Error)
        with
!         Pre    => (if Source'Length > Max_Length then Drop /= Error),
!         Post   => Length (Target) = Natural'Min (Max_Length, Source'Length),
!         Global => null;
        pragma Ada_05 (Set_Bounded_String);
  
        function Append
          (Left  : Bounded_String;
           Right : Bounded_String;
           Drop  : Truncation  := Error) return Bounded_String
        with
!         Pre    =>
            (if Length (Left) > Max_Length - Length (Right)
             then Drop /= Error),
!         Post   =>
!           Length (Append'Result)
!         = Natural'Min (Max_Length, Length (Left) + Length (Right)),
!         Global => null;
  
        function Append
          (Left  : Bounded_String;
           Right : String;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre    =>
            (if Right'Length > Max_Length - Length (Left)
             then Drop /= Error),
!         Post   =>
!           Length (Append'Result)
!         = Natural'Min (Max_Length, Length (Left) + Right'Length),
!         Global => null;
  
        function Append
          (Left  : String;
           Right : Bounded_String;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre    =>
            (if Left'Length > Max_Length - Length (Right)
             then Drop /= Error),
!         Post   =>
!           Length (Append'Result)
!         = Natural'Min (Max_Length, Left'Length + Length (Right)),
!         Global => null;
  
        function Append
          (Left  : Bounded_String;
           Right : Character;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre    => (if Length (Left) = Max_Length then Drop /= Error),
!         Post   =>
!           Length (Append'Result)
!         = Natural'Min (Max_Length, Length (Left) + 1),
!         Global => null;
  
        function Append
          (Left  : Character;
           Right : Bounded_String;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre    => (if Length (Right) = Max_Length then Drop /= Error),
!         Post   =>
!           Length (Append'Result)
!         = Natural'Min (Max_Length, 1 + Length (Right)),
!         Global => null;
  
        procedure Append
          (Source   : in out Bounded_String;
           New_Item : Bounded_String;
           Drop     : Truncation  := Error)
        with
!         Pre    =>
            (if Length (Source) > Max_Length - Length (New_Item)
             then Drop /= Error),
!         Post   =>
!           Length (Source)
!         = Natural'Min (Max_Length, Length (Source)'Old + Length (New_Item)),
!         Global => null;
  
        procedure Append
          (Source   : in out Bounded_String;
           New_Item : String;
           Drop     : Truncation  := Error)
        with
!         Pre    =>
            (if New_Item'Length > Max_Length - Length (Source)
             then Drop /= Error),
!         Post   =>
!           Length (Source)
!         = Natural'Min (Max_Length, Length (Source)'Old + New_Item'Length),
!         Global => null;
  
        procedure Append
          (Source   : in out Bounded_String;
           New_Item : Character;
           Drop     : Truncation  := Error)
        with
!         Pre    => (if Length (Source) = Max_Length then Drop /= Error),
!         Post   =>
!           Length (Source)
!         = Natural'Min (Max_Length, Length (Source)'Old + 1),
!         Global => null;
  
        function "&"
          (Left  : Bounded_String;
           Right : Bounded_String) return Bounded_String
        with
!         Pre    => Length (Left) <= Max_Length - Length (Right),
!         Post   => Length ("&"'Result) = Length (Left) + Length (Right),
!         Global => null;
  
        function "&"
          (Left  : Bounded_String;
           Right : String) return Bounded_String
        with
!         Pre    => Right'Length <= Max_Length - Length (Left),
!         Post   => Length ("&"'Result) = Length (Left) + Right'Length,
!         Global => null;
  
        function "&"
          (Left  : String;
           Right : Bounded_String) return Bounded_String
        with
!         Pre    => Left'Length <= Max_Length - Length (Right),
!         Post   => Length ("&"'Result) = Left'Length + Length (Right),
!         Global => null;
  
        function "&"
          (Left  : Bounded_String;
           Right : Character) return Bounded_String
        with
!         Pre    => Length (Left) < Max_Length,
!         Post   => Length ("&"'Result) = Length (Left) + 1,
!         Global => null;
  
        function "&"
          (Left  : Character;
           Right : Bounded_String) return Bounded_String
        with
!         Pre    => Length (Right) < Max_Length,
!         Post   => Length ("&"'Result) = 1 + Length (Right),
!         Global => null;
  
        function Element
          (Source : Bounded_String;
--- 94,559 ----
          (Source : String;
           Drop   : Truncation := Error) return Bounded_String
        with
!         Pre            => (if Source'Length > Max_Length then Drop /= Error),
!         Contract_Cases =>
!           (Source'Length <= Max_Length
!            =>
!              To_String (To_Bounded_String'Result) = Source,
! 
!            Source'Length > Max_Length and then Drop = Left
!            =>
!              To_String (To_Bounded_String'Result) =
!                Source (Source'Last - Max_Length + 1 .. Source'Last),
! 
!            others  --  Drop = Right
!            =>
!              To_String (To_Bounded_String'Result) =
!                Source (Source'First .. Source'First - 1 + Max_Length));
!       --  If Source'Length <= Max_Length, then this function returns a
!       --  Bounded_String that represents Source. Otherwise, the effect
!       --  depends on the value of Drop:
!       --
!       --  * If Drop=Left, then the result is a Bounded_String that represents
!       --    the string comprising the rightmost Max_Length characters of
!       --    Source.
!       --
!       --  * If Drop=Right, then the result is a Bounded_String that represents
!       --    the string comprising the leftmost Max_Length characters of Source.
!       --
!       --  * If Drop=Error, then Strings.Length_Error is propagated.
  
        function To_String (Source : Bounded_String) return String with
          Global => null;
+       --  To_String returns the String value with lower bound 1
+       --  represented by Source. If B is a Bounded_String, then
+       --  B = To_Bounded_String(To_String(B)).
  
        procedure Set_Bounded_String
          (Target : out Bounded_String;
           Source : String;
           Drop   : Truncation := Error)
        with
!         Pre            => (if Source'Length > Max_Length then Drop /= Error),
!         Contract_Cases =>
!           (Source'Length <= Max_Length
!            =>
!              To_String (Target) = Source,
! 
!            Source'Length > Max_Length and then Drop = Left
!            =>
!              To_String (Target) =
!                Source (Source'Last - Max_Length + 1 .. Source'Last),
! 
!            others  --  Drop = Right
!            =>
!              To_String (Target) =
!                Source (Source'First .. Source'First - 1 + Max_Length));
        pragma Ada_05 (Set_Bounded_String);
+       --  Equivalent to Target := To_Bounded_String (Source, Drop);
+ 
+       --  Each of the Append functions returns a Bounded_String obtained by
+       --  concatenating the string or character given or represented by one
+       --  of the parameters, with the string or character given or represented
+       --  by the other parameter, and applying To_Bounded_String to the
+       --  concatenation result string, with Drop as provided to the Append
+       --  function.
  
        function Append
          (Left  : Bounded_String;
           Right : Bounded_String;
           Drop  : Truncation  := Error) return Bounded_String
        with
!         Pre            =>
            (if Length (Left) > Max_Length - Length (Right)
             then Drop /= Error),
!         Contract_Cases =>
!           (Length (Left) <= Max_Length - Length (Right)
!            =>
!              Length (Append'Result) = Length (Left) + Length (Right)
!                and then
!                  Slice (Append'Result, 1, Length (Left)) = To_String (Left)
!                and then
!                  (if Length (Right) > 0 then
!                     Slice (Append'Result,
!                       Length (Left) + 1, Length (Append'Result)) =
!                         To_String (Right)),
! 
!            Length (Left) > Max_Length - Length (Right)
!              and then Drop = Strings.Left
!            =>
!              Length (Append'Result) = Max_Length
!                and then
!                  (if Length (Right) < Max_Length then
!                     Slice (Append'Result, 1, Max_Length - Length (Right)) =
!                       Slice (Left,
!                         Length (Left) - Max_Length + Length (Right) + 1,
!                         Length (Left)))
!                and then
!                  Slice (Append'Result,
!                    Max_Length - Length (Right) + 1, Max_Length) =
!                      To_String (Right),
! 
!            others  --  Drop = Right
!            =>
!              Length (Append'Result) = Max_Length
!                and then
!                  Slice (Append'Result, 1, Length (Left)) = To_String (Left)
!                and then
!                  (if Length (Left) < Max_Length then
!                     Slice (Append'Result, Length (Left) + 1, Max_Length) =
!                       Slice (Right, 1, Max_Length - Length (Left))));
  
        function Append
          (Left  : Bounded_String;
           Right : String;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre            =>
            (if Right'Length > Max_Length - Length (Left)
             then Drop /= Error),
!         Contract_Cases =>
!           (Length (Left) <= Max_Length - Right'Length
!            =>
!              Length (Append'Result) = Length (Left) + Right'Length
!                and then
!                  Slice (Append'Result, 1, Length (Left)) = To_String (Left)
!                and then
!                  (if Right'Length > 0 then
!                     Slice (Append'Result,
!                       Length (Left) + 1, Length (Append'Result)) =
!                         Right),
! 
!            Length (Left) > Max_Length - Right'Length
!              and then Drop = Strings.Left
!            =>
!              Length (Append'Result) = Max_Length
!                and then
!                  (if Right'Length < Max_Length then
  
+                     --  The result is the end of Left followed by Right
+ 
+                     Slice (Append'Result, 1, Max_Length - Right'Length) =
+                       Slice (Left,
+                         Length (Left) - Max_Length + Right'Length + 1,
+                         Length (Left))
+                       and then
+                         Slice (Append'Result,
+                           Max_Length - Right'Length + 1, Max_Length) =
+                             Right
+                   else
+                     --  The result is the last Max_Length characters of Right
+ 
+                     To_String (Append'Result) =
+                       Right (Right'Last - Max_Length + 1 .. Right'Last)),
+ 
+            others  --  Drop = Right
+            =>
+              Length (Append'Result) = Max_Length
+                and then
+                  Slice (Append'Result, 1, Length (Left)) = To_String (Left)
+                and then
+                  (if Length (Left) < Max_Length then
+                     Slice (Append'Result, Length (Left) + 1, Max_Length) =
+                       Right (Right'First
+                         .. Max_Length - Length (Left) - 1 + Right'First)));
        function Append
          (Left  : String;
           Right : Bounded_String;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre            =>
            (if Left'Length > Max_Length - Length (Right)
             then Drop /= Error),
!         Contract_Cases =>
!           (Left'Length <= Max_Length - Length (Right)
!            =>
!              Length (Append'Result) = Left'Length + Length (Right)
!                and then Slice (Append'Result, 1, Left'Length) = Left
!                and then
!                  (if Length (Right) > 0 then
!                     Slice (Append'Result,
!                       Left'Length + 1, Length (Append'Result)) =
!                         To_String (Right)),
! 
!            Left'Length > Max_Length - Length (Right)
!              and then Drop = Strings.Left
!            =>
!              Length (Append'Result) = Max_Length
!                and then
!                  (if Length (Right) < Max_Length then
!                     Slice (Append'Result, 1, Max_Length - Length (Right)) =
!                       Left (Left'Last - Max_Length + Length (Right) + 1
!                             .. Left'Last))
!                and then
!                  Slice (Append'Result,
!                    Max_Length - Length (Right) + 1, Max_Length) =
!                      To_String (Right),
! 
!            others  --  Drop = Right
!            =>
!              Length (Append'Result) = Max_Length
!                and then
!                  (if Left'Length < Max_Length then
! 
!                     --  The result is Left followed by the beginning of Right
! 
!                     Slice (Append'Result, 1, Left'Length) = Left
!                       and then
!                         Slice (Append'Result, Left'Length + 1, Max_Length) =
!                           Slice (Right, 1, Max_Length - Left'Length)
!                   else
!                     --  The result is the first Max_Length characters of Left
! 
!                     To_String (Append'Result) =
!                       Left (Left'First .. Max_Length - 1 + Left'First)));
  
        function Append
          (Left  : Bounded_String;
           Right : Character;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre            => (if Length (Left) = Max_Length then Drop /= Error),
!         Contract_Cases =>
!           (Length (Left) < Max_Length
!            =>
!              Length (Append'Result) = Length (Left) + 1
!                and then
!                  Slice (Append'Result, 1, Length (Left)) = To_String (Left)
!                and then Element (Append'Result, Length (Left) + 1) = Right,
! 
!            Length (Left) = Max_Length and then Drop = Strings.Right
!            =>
!              Length (Append'Result) = Max_Length
!                and then To_String (Append'Result) = To_String (Left),
! 
!            others  --  Drop = Left
!            =>
!              Length (Append'Result) = Max_Length
!                and then
!                  Slice (Append'Result, 1, Max_Length - 1) =
!                    Slice (Left, 2, Max_Length)
!                and then Element (Append'Result, Max_Length) = Right);
  
        function Append
          (Left  : Character;
           Right : Bounded_String;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre            => (if Length (Right) = Max_Length then Drop /= Error),
!         Contract_Cases =>
!           (Length (Right) < Max_Length
!            =>
!              Length (Append'Result) = Length (Right) + 1
!                and then
!                  Slice (Append'Result, 2, Length (Right) + 1) =
!                    To_String (Right)
!                and then Element (Append'Result, 1) = Left,
! 
!            Length (Right) = Max_Length and then Drop = Strings.Left
!            =>
!              Length (Append'Result) = Max_Length
!                and then To_String (Append'Result) = To_String (Right),
! 
!            others  --  Drop = Right
!            =>
!              Length (Append'Result) = Max_Length
!                and then
!                  Slice (Append'Result, 2, Max_Length) =
!                    Slice (Right, 1, Max_Length - 1)
!                and then Element (Append'Result, 1) = Left);
! 
!       --  Each of the procedures Append(Source, New_Item, Drop) has the same
!       --  effect as the corresponding assignment
!       --  Source := Append(Source, New_Item, Drop).
  
        procedure Append
          (Source   : in out Bounded_String;
           New_Item : Bounded_String;
           Drop     : Truncation  := Error)
        with
!         Pre            =>
            (if Length (Source) > Max_Length - Length (New_Item)
             then Drop /= Error),
!         Contract_Cases =>
!           (Length (Source) <= Max_Length - Length (New_Item)
!            =>
!              Length (Source) = Length (Source'Old) + Length (New_Item)
!                and then
!                  Slice (Source, 1, Length (Source'Old)) =
!                    To_String (Source'Old)
!                and then
!                  (if Length (New_Item) > 0 then
!                     Slice (Source, Length (Source'Old) + 1, Length (Source)) =
!                       To_String (New_Item)),
! 
!            Length (Source) > Max_Length - Length (New_Item)
!              and then Drop = Left
!            =>
!              Length (Source) = Max_Length
!                and then
!                  (if Length (New_Item) < Max_Length then
!                     Slice (Source, 1, Max_Length - Length (New_Item)) =
!                       Slice (Source'Old,
!                         Length (Source'Old) - Max_Length + Length (New_Item)
!                           + 1,
!                         Length (Source'Old)))
!                and then
!                  Slice (Source, Max_Length - Length (New_Item) + 1, Max_Length)
!                    = To_String (New_Item),
! 
!            others  --  Drop = Right
!            =>
!              Length (Source) = Max_Length
!                and then
!                  Slice (Source, 1, Length (Source'Old)) =
!                    To_String (Source'Old)
!                and then
!                  (if Length (Source'Old) < Max_Length then
!                     Slice (Source, Length (Source'Old) + 1, Max_Length) =
!                       Slice (New_Item, 1, Max_Length - Length (Source'Old))));
  
        procedure Append
          (Source   : in out Bounded_String;
           New_Item : String;
           Drop     : Truncation  := Error)
        with
!         Pre            =>
            (if New_Item'Length > Max_Length - Length (Source)
             then Drop /= Error),
!         Contract_Cases =>
!           (Length (Source) <= Max_Length - New_Item'Length
!            =>
!              Length (Source) = Length (Source'Old) + New_Item'Length
!                and then
!                  Slice (Source, 1, Length (Source'Old)) =
!                    To_String (Source'Old)
!                and then
!                  (if New_Item'Length > 0 then
!                     Slice (Source, Length (Source'Old) + 1, Length (Source)) =
!                       New_Item),
! 
!            Length (Source) > Max_Length - New_Item'Length
!              and then Drop = Left
!            =>
!              Length (Source) = Max_Length
!                and then
!                  (if New_Item'Length < Max_Length then
! 
!                     --  The result is the end of Source followed by New_Item
! 
!                     Slice (Source, 1, Max_Length - New_Item'Length) =
!                       Slice (Source'Old,
!                         Length (Source'Old) - Max_Length + New_Item'Length + 1,
!                         Length (Source'Old))
!                     and then
!                       Slice (Source,
!                         Max_Length - New_Item'Length + 1, Max_Length) =
!                           New_Item
!                   else
!                     --  The result is the last Max_Length characters of
!                     --  New_Item.
! 
!                     To_String (Source) = New_Item
!                       (New_Item'Last - Max_Length + 1 .. New_Item'Last)),
! 
!            others  --  Drop = Right
!            =>
!              Length (Source) = Max_Length
!                and then
!                  Slice (Source, 1, Length (Source'Old)) =
!                    To_String (Source'Old)
!                and then
!                  (if Length (Source'Old) < Max_Length then
!                     Slice (Source, Length (Source'Old) + 1, Max_Length) =
!                       New_Item (New_Item'First
!                         .. Max_Length - Length (Source'Old) - 1
!                           + New_Item'First)));
  
        procedure Append
          (Source   : in out Bounded_String;
           New_Item : Character;
           Drop     : Truncation  := Error)
        with
!         Pre            => (if Length (Source) = Max_Length then Drop /= Error),
!         Contract_Cases =>
!           (Length (Source) < Max_Length
!            =>
!              Length (Source) = Length (Source'Old) + 1
!                and then
!                  Slice (Source, 1, Length (Source'Old)) =
!                    To_String (Source'Old)
!                and then Element (Source, Length (Source'Old) + 1) = New_Item,
! 
!            Length (Source) = Max_Length and then Drop = Right
!            =>
!              Length (Source) = Max_Length
!                and then To_String (Source) = To_String (Source'Old),
! 
!            others  --  Drop = Left
!            =>
!              Length (Source) = Max_Length
!                and then
!                  Slice (Source, 1, Max_Length - 1) =
!                    Slice (Source'Old, 2, Max_Length)
!                and then Element (Source, Max_Length) = New_Item);
! 
!       --  Each of the "&" functions has the same effect as the corresponding
!       --  Append function, with Error as the Drop parameter.
  
        function "&"
          (Left  : Bounded_String;
           Right : Bounded_String) return Bounded_String
        with
!         Pre  => Length (Left) <= Max_Length - Length (Right),
!         Post => Length ("&"'Result) = Length (Left) + Length (Right)
!           and then Slice ("&"'Result, 1, Length (Left)) = To_String (Left)
!           and then
!             (if Length (Right) > 0 then
!                Slice ("&"'Result, Length (Left) + 1, Length ("&"'Result)) =
!                  To_String (Right));
  
        function "&"
          (Left  : Bounded_String;
           Right : String) return Bounded_String
        with
!         Pre  => Right'Length <= Max_Length - Length (Left),
!         Post => Length ("&"'Result) = Length (Left) + Right'Length
!           and then Slice ("&"'Result, 1, Length (Left)) = To_String (Left)
!           and then
!             (if Right'Length > 0 then
!                Slice ("&"'Result, Length (Left) + 1, Length ("&"'Result)) =
!                  Right);
  
        function "&"
          (Left  : String;
           Right : Bounded_String) return Bounded_String
        with
!         Pre  => Left'Length <= Max_Length - Length (Right),
!         Post => Length ("&"'Result) = Left'Length + Length (Right)
!           and then Slice ("&"'Result, 1, Left'Length) = Left
!           and then
!             (if Length (Right) > 0 then
!                Slice ("&"'Result, Left'Length + 1, Length ("&"'Result)) =
!                  To_String (Right));
  
        function "&"
          (Left  : Bounded_String;
           Right : Character) return Bounded_String
        with
!         Pre  => Length (Left) < Max_Length,
!         Post => Length ("&"'Result) = Length (Left) + 1
!           and then Slice ("&"'Result, 1, Length (Left)) = To_String (Left)
!           and then Element ("&"'Result, Length (Left) + 1) = Right;
  
        function "&"
          (Left  : Character;
           Right : Bounded_String) return Bounded_String
        with
!         Pre  => Length (Right) < Max_Length,
!         Post => Length ("&"'Result) = 1 + Length (Right)
!           and then Element ("&"'Result, 1) = Left
!           and then
!             Slice ("&"'Result, 2, Length ("&"'Result)) = To_String (Right);
  
        function Element
          (Source : Bounded_String;
*************** package Ada.Strings.Bounded is
*** 237,242 ****
--- 561,568 ----
        with
          Pre    => Index <= Length (Source),
          Global => null;
+       --  Returns the character at position Index in the string represented by
+       --  Source; propagates Index_Error if Index > Length(Source).
  
        procedure Replace_Element
          (Source : in out Bounded_String;
*************** package Ada.Strings.Bounded is
*** 244,251 ****
           By     : Character)
        with
          Pre    => Index <= Length (Source),
!         Post   => Length (Source) = Length (Source)'Old,
          Global => null;
  
        function Slice
          (Source : Bounded_String;
--- 570,583 ----
           By     : Character)
        with
          Pre    => Index <= Length (Source),
!         Post   => Length (Source) = Length (Source'Old)
!           and then (for all K in 1 .. Length (Source) =>
!                       Element (Source, K) =
!                         (if K = Index then By else Element (Source'Old, K))),
          Global => null;
+       --  Updates Source such that the character at position Index in the
+       --  string represented by Source is By; propagates Index_Error if
+       --  Index > Length(Source).
  
        function Slice
          (Source : Bounded_String;
*************** package Ada.Strings.Bounded is
*** 253,260 ****
           High   : Natural) return String
        with
          Pre    => Low - 1 <= Length (Source) and then High <= Length (Source),
-         Post   => Slice'Result'Length = Natural'Max (0, High - Low + 1),
          Global => null;
  
        function Bounded_Slice
          (Source : Bounded_String;
--- 585,595 ----
           High   : Natural) return String
        with
          Pre    => Low - 1 <= Length (Source) and then High <= Length (Source),
          Global => null;
+       --  Returns the slice at positions Low through High in the
+       --  string represented by Source; propagates Index_Error if
+       --  Low > Length(Source)+1 or High > Length(Source).
+       --  The bounds of the returned string are Low and High.
  
        function Bounded_Slice
          (Source : Bounded_String;
*************** package Ada.Strings.Bounded is
*** 262,271 ****
           High   : Natural) return Bounded_String
         with
          Pre    => Low - 1 <= Length (Source) and then High <= Length (Source),
!         Post   =>
!           Length (Bounded_Slice'Result) = Natural'Max (0, High - Low + 1),
          Global => null;
        pragma Ada_05 (Bounded_Slice);
  
        procedure Bounded_Slice
          (Source : Bounded_String;
--- 597,608 ----
           High   : Natural) return Bounded_String
         with
          Pre    => Low - 1 <= Length (Source) and then High <= Length (Source),
!         Post   => To_String (Bounded_Slice'Result) = Slice (Source, Low, High),
          Global => null;
        pragma Ada_05 (Bounded_Slice);
+       --  Returns the slice at positions Low through High in the string
+       --  represented by Source as a bounded string; propagates Index_Error
+       --  if Low > Length(Source)+1 or High > Length(Source).
  
        procedure Bounded_Slice
          (Source : Bounded_String;
*************** package Ada.Strings.Bounded is
*** 274,385 ****
           High   : Natural)
        with
          Pre    => Low - 1 <= Length (Source) and then High <= Length (Source),
!         Post   => Length (Target) = Natural'Max (0, High - Low + 1),
          Global => null;
        pragma Ada_05 (Bounded_Slice);
  
        function "="
          (Left  : Bounded_String;
           Right : Bounded_String) return Boolean
        with
          Global => null;
  
        function "="
          (Left  : Bounded_String;
           Right : String) return Boolean
        with
          Global => null;
  
        function "="
          (Left  : String;
           Right : Bounded_String) return Boolean
        with
          Global => null;
  
        function "<"
          (Left  : Bounded_String;
           Right : Bounded_String) return Boolean
        with
          Global => null;
  
        function "<"
          (Left  : Bounded_String;
           Right : String) return Boolean
        with
          Global => null;
  
        function "<"
          (Left  : String;
           Right : Bounded_String) return Boolean
        with
          Global => null;
  
        function "<="
          (Left  : Bounded_String;
           Right : Bounded_String) return Boolean
        with
          Global => null;
  
        function "<="
          (Left  : Bounded_String;
           Right : String) return Boolean
        with
          Global => null;
  
        function "<="
          (Left  : String;
           Right : Bounded_String) return Boolean
        with
          Global => null;
  
        function ">"
          (Left  : Bounded_String;
           Right : Bounded_String) return Boolean
        with
          Global => null;
  
        function ">"
          (Left  : Bounded_String;
           Right : String) return Boolean
        with
          Global => null;
  
        function ">"
          (Left  : String;
           Right : Bounded_String) return Boolean
        with
          Global => null;
  
        function ">="
          (Left  : Bounded_String;
           Right : Bounded_String) return Boolean
        with
          Global => null;
  
        function ">="
          (Left  : Bounded_String;
           Right : String) return Boolean
        with
          Global => null;
  
        function ">="
          (Left  : String;
           Right : Bounded_String) return Boolean
        with
          Global => null;
  
        ----------------------
        -- Search Functions --
        ----------------------
  
        function Index
          (Source  : Bounded_String;
           Pattern : String;
           Going   : Direction := Forward;
           Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
        with
!         Pre    => Pattern'Length /= 0,
!         Global => null;
  
        function Index
          (Source  : Bounded_String;
--- 611,791 ----
           High   : Natural)
        with
          Pre    => Low - 1 <= Length (Source) and then High <= Length (Source),
!         Post   => To_String (Target) = Slice (Source, Low, High),
          Global => null;
        pragma Ada_05 (Bounded_Slice);
+       --  Equivalent to Target := Bounded_Slice (Source, Low, High);
+ 
+       --  Each of the functions "=", "<", ">", "<=", and ">=" returns the same
+       --  result as the corresponding String operation applied to the String
+       --  values given or represented by the two parameters.
  
        function "="
          (Left  : Bounded_String;
           Right : Bounded_String) return Boolean
        with
+         Post   => "="'Result = (To_String (Left) = To_String (Right)),
          Global => null;
  
        function "="
          (Left  : Bounded_String;
           Right : String) return Boolean
        with
+         Post   => "="'Result = (To_String (Left) = Right),
          Global => null;
  
        function "="
          (Left  : String;
           Right : Bounded_String) return Boolean
        with
+         Post   => "="'Result = (Left = To_String (Right)),
          Global => null;
  
        function "<"
          (Left  : Bounded_String;
           Right : Bounded_String) return Boolean
        with
+         Post   => "<"'Result = (To_String (Left) < To_String (Right)),
          Global => null;
  
        function "<"
          (Left  : Bounded_String;
           Right : String) return Boolean
        with
+         Post   => "<"'Result = (To_String (Left) < Right),
          Global => null;
  
        function "<"
          (Left  : String;
           Right : Bounded_String) return Boolean
        with
+         Post   => "<"'Result = (Left < To_String (Right)),
          Global => null;
  
        function "<="
          (Left  : Bounded_String;
           Right : Bounded_String) return Boolean
        with
+         Post   => "<="'Result = (To_String (Left) <= To_String (Right)),
          Global => null;
  
        function "<="
          (Left  : Bounded_String;
           Right : String) return Boolean
        with
+         Post   => "<="'Result = (To_String (Left) <= Right),
          Global => null;
  
        function "<="
          (Left  : String;
           Right : Bounded_String) return Boolean
        with
+         Post   => "<="'Result = (Left <= To_String (Right)),
          Global => null;
  
        function ">"
          (Left  : Bounded_String;
           Right : Bounded_String) return Boolean
        with
+         Post   => ">"'Result = (To_String (Left) > To_String (Right)),
          Global => null;
  
        function ">"
          (Left  : Bounded_String;
           Right : String) return Boolean
        with
+         Post   => ">"'Result = (To_String (Left) > Right),
          Global => null;
  
        function ">"
          (Left  : String;
           Right : Bounded_String) return Boolean
        with
+         Post   => ">"'Result = (Left > To_String (Right)),
          Global => null;
  
        function ">="
          (Left  : Bounded_String;
           Right : Bounded_String) return Boolean
        with
+         Post   => ">="'Result = (To_String (Left) >= To_String (Right)),
          Global => null;
  
        function ">="
          (Left  : Bounded_String;
           Right : String) return Boolean
        with
+         Post   => ">="'Result = (To_String (Left) >= Right),
          Global => null;
  
        function ">="
          (Left  : String;
           Right : Bounded_String) return Boolean
        with
+         Post   => ">="'Result = (Left >= To_String (Right)),
          Global => null;
  
        ----------------------
        -- Search Functions --
        ----------------------
  
+       --  Each of the search subprograms (Index, Index_Non_Blank, Count,
+       --  Find_Token) has the same effect as the corresponding subprogram in
+       --  Strings.Fixed applied to the string represented by the Bounded_String
+       --  parameter.
+ 
        function Index
          (Source  : Bounded_String;
           Pattern : String;
           Going   : Direction := Forward;
           Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
        with
!         Pre            => Pattern'Length > 0,
!         Post           => Index'Result <= Length (Source),
!         Contract_Cases =>
! 
!           --  If Source is the empty string, then 0 is returned
! 
!           (Length (Source) = 0
!            =>
!              Index'Result = 0,
! 
!            --  If some slice of Source matches Pattern, then a valid index is
!            --  returned.
! 
!            Length (Source) > 0
!              and then
!                (for some J in 1 .. Length (Source) - (Pattern'Length - 1) =>
!                   Search.Match (To_String (Source), Pattern, Mapping, J))
!            =>
!              --  The result is in the considered range of Source
! 
!              Index'Result in 1 .. Length (Source) - (Pattern'Length - 1)
! 
!                --  The slice beginning at the returned index matches Pattern
! 
!                and then Search.Match
!                  (To_String (Source), Pattern, Mapping, Index'Result)
! 
!                --  The result is the smallest or largest index which satisfies
!                --  the matching, respectively when Going = Forward and Going =
!                --  Backward.
! 
!                and then
!                  (for all J in 1 .. Length (Source) =>
!                     (if (if Going = Forward
!                          then J <= Index'Result - 1
!                          else J - 1 in Index'Result
!                                        .. Length (Source) - Pattern'Length)
!                      then not (Search.Match
!                        (To_String (Source), Pattern, Mapping, J)))),
! 
!            --  Otherwise, 0 is returned
! 
!            others
!            =>
!              Index'Result = 0),
!         Global         => null;
  
        function Index
          (Source  : Bounded_String;
*************** package Ada.Strings.Bounded is
*** 387,394 ****
           Going   : Direction := Forward;
           Mapping : Maps.Character_Mapping_Function) return Natural
        with
!         Pre    => Pattern'Length /= 0,
!         Global => null;
  
        function Index
          (Source : Bounded_String;
--- 793,844 ----
           Going   : Direction := Forward;
           Mapping : Maps.Character_Mapping_Function) return Natural
        with
!         Pre            => Pattern'Length /= 0 and then Mapping /= null,
!         Post           => Index'Result <= Length (Source),
!         Contract_Cases =>
! 
!           --  If Source is the empty string, then 0 is returned
! 
!           (Length (Source) = 0
!            =>
!              Index'Result = 0,
! 
!            --  If some slice of Source matches Pattern, then a valid index is
!            --  returned.
! 
!            Length (Source) > 0
!              and then
!                (for some J in 1 .. Length (Source) - (Pattern'Length - 1) =>
!                   Search.Match (To_String (Source), Pattern, Mapping, J))
!            =>
!              --  The result is in the considered range of Source
! 
!              Index'Result in 1 .. Length (Source) - (Pattern'Length - 1)
! 
!                --  The slice beginning at the returned index matches Pattern
! 
!                and then Search.Match
!                  (To_String (Source), Pattern, Mapping, Index'Result)
! 
!                --  The result is the smallest or largest index which satisfies
!                --  the matching, respectively when Going = Forward and Going =
!                --  Backward.
! 
!                and then
!                  (for all J in 1 .. Length (Source) =>
!                     (if (if Going = Forward
!                          then J <= Index'Result - 1
!                          else J - 1 in Index'Result
!                                        .. Length (Source) - Pattern'Length)
!                      then not (Search.Match
!                        (To_String (Source), Pattern, Mapping, J)))),
! 
!            --  Otherwise, 0 is returned
! 
!            others
!            =>
!              Index'Result = 0),
!         Global         => null;
  
        function Index
          (Source : Bounded_String;
*************** package Ada.Strings.Bounded is
*** 396,402 ****
           Test   : Membership := Inside;
           Going  : Direction  := Forward) return Natural
        with
!         Global => null;
  
        function Index
          (Source  : Bounded_String;
--- 846,888 ----
           Test   : Membership := Inside;
           Going  : Direction  := Forward) return Natural
        with
!         Post           => Index'Result <= Length (Source),
!         Contract_Cases =>
! 
!            --  If no character of Source satisfies the property Test on Set,
!            --  then 0 is returned.
! 
!           ((for all C of To_String (Source) =>
!               (Test = Inside) /= Maps.Is_In (C, Set))
!            =>
!              Index'Result = 0,
! 
!            --  Otherwise, an index in the range of Source is returned
! 
!            others
!            =>
!              --  The result is in the range of Source
! 
!              Index'Result in 1 .. Length (Source)
! 
!                --  The character at the returned index satisfies the property
!                --  Test on Set.
! 
!                and then
!                  (Test = Inside) =
!                    Maps.Is_In (Element (Source, Index'Result), Set)
! 
!                --  The result is the smallest or largest index which satisfies
!                --  the property, respectively when Going = Forward and Going =
!                --  Backward.
! 
!                and then
!                  (for all J in 1 .. Length (Source) =>
!                     (if J /= Index'Result
!                           and then (J < Index'Result) = (Going = Forward)
!                      then (Test = Inside)
!                           /= Maps.Is_In (Element (Source, J), Set)))),
!         Global         => null;
  
        function Index
          (Source  : Bounded_String;
*************** package Ada.Strings.Bounded is
*** 405,415 ****
           Going   : Direction := Forward;
           Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
        with
!         Pre    =>
!           (if Length (Source) /= 0
!            then From <= Length (Source))
!                   and then Pattern'Length /= 0,
!         Global => null;
        pragma Ada_05 (Index);
  
        function Index
--- 891,950 ----
           Going   : Direction := Forward;
           Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
        with
!         Pre            =>
!           (if Length (Source) /= 0 then From <= Length (Source))
!             and then Pattern'Length /= 0,
!         Post           => Index'Result <= Length (Source),
!         Contract_Cases =>
! 
!           --  If Source is the empty string, then 0 is returned
! 
!           (Length (Source) = 0
!            =>
!              Index'Result = 0,
! 
!            --  If some slice of Source matches Pattern, then a valid index is
!            --  returned.
! 
!            Length (Source) > 0
!              and then
!                (for some J in
!                  (if Going = Forward then From else 1)
!                   .. (if Going = Forward then Length (Source) else From)
!                    - (Pattern'Length - 1) =>
!                  Search.Match (To_String (Source), Pattern, Mapping, J))
!            =>
!              --  The result is in the considered range of Source
! 
!              Index'Result in
!                (if Going = Forward then From else 1)
!                .. (if Going = Forward then Length (Source) else From)
!                 - (Pattern'Length - 1)
! 
!                --  The slice beginning at the returned index matches Pattern
! 
!                and then Search.Match
!                  (To_String (Source), Pattern, Mapping, Index'Result)
! 
!                --  The result is the smallest or largest index which satisfies
!                --  the matching, respectively when Going = Forward and Going =
!                --  Backward.
! 
!                and then
!                  (for all J in 1 .. Length (Source) =>
!                     (if (if Going = Forward
!                          then J in From .. Index'Result - 1
!                          else J - 1 in Index'Result
!                                        .. From - Pattern'Length)
!                      then not (Search.Match
!                        (To_String (Source), Pattern, Mapping, J)))),
! 
!            --  Otherwise, 0 is returned
! 
!            others
!            =>
!              Index'Result = 0),
!         Global         => null;
        pragma Ada_05 (Index);
  
        function Index
*************** package Ada.Strings.Bounded is
*** 419,429 ****
           Going   : Direction := Forward;
           Mapping : Maps.Character_Mapping_Function) return Natural
        with
!         Pre    =>
!           (if Length (Source) /= 0
!            then From <= Length (Source))
!                   and then Pattern'Length /= 0,
!         Global => null;
        pragma Ada_05 (Index);
  
        function Index
--- 954,1014 ----
           Going   : Direction := Forward;
           Mapping : Maps.Character_Mapping_Function) return Natural
        with
!         Pre            =>
!           (if Length (Source) /= 0 then From <= Length (Source))
!             and then Pattern'Length /= 0
!             and then Mapping /= null,
!         Post           => Index'Result <= Length (Source),
!         Contract_Cases =>
! 
!           --  If Source is the empty string, then 0 is returned
! 
!           (Length (Source) = 0
!            =>
!              Index'Result = 0,
! 
!            --  If some slice of Source matches Pattern, then a valid index is
!            --  returned.
! 
!            Length (Source) > 0
!              and then
!                (for some J in
!                  (if Going = Forward then From else 1)
!                   .. (if Going = Forward then Length (Source) else From)
!                    - (Pattern'Length - 1) =>
!                  Search.Match (To_String (Source), Pattern, Mapping, J))
!            =>
!              --  The result is in the considered range of Source
! 
!              Index'Result in
!                (if Going = Forward then From else 1)
!                .. (if Going = Forward then Length (Source) else From)
!                 - (Pattern'Length - 1)
! 
!                --  The slice beginning at the returned index matches Pattern
! 
!                and then Search.Match
!                  (To_String (Source), Pattern, Mapping, Index'Result)
! 
!                --  The result is the smallest or largest index which satisfies
!                --  the matching, respectively when Going = Forward and Going =
!                --  Backward.
! 
!                and then
!                  (for all J in 1 .. Length (Source) =>
!                     (if (if Going = Forward
!                          then J in From .. Index'Result - 1
!                          else J - 1 in Index'Result
!                                        .. From - Pattern'Length)
!                      then not (Search.Match
!                        (To_String (Source), Pattern, Mapping, J)))),
! 
!            --  Otherwise, 0 is returned
! 
!            others
!            =>
!              Index'Result = 0),
!         Global         => null;
        pragma Ada_05 (Index);
  
        function Index
*************** package Ada.Strings.Bounded is
*** 433,455 ****
           Test    : Membership := Inside;
           Going   : Direction := Forward) return Natural
        with
!         Pre    => (if Length (Source) /= 0 then From <= Length (Source)),
!         Global => null;
        pragma Ada_05 (Index);
  
        function Index_Non_Blank
          (Source : Bounded_String;
           Going  : Direction := Forward) return Natural
        with
!         Global => null;
  
        function Index_Non_Blank
          (Source : Bounded_String;
           From   : Positive;
           Going  : Direction := Forward) return Natural
        with
!         Pre    => (if Length (Source) /= 0 then From <= Length (Source)),
!         Global => null;
        pragma Ada_05 (Index_Non_Blank);
  
        function Count
--- 1018,1164 ----
           Test    : Membership := Inside;
           Going   : Direction := Forward) return Natural
        with
!         Pre            =>
!           (if Length (Source) /= 0 then From <= Length (Source)),
!         Post           => Index'Result <= Length (Source),
!         Contract_Cases =>
! 
!            --  If Source is the empty string, or no character of the considered
!            --  slice of Source satisfies the property Test on Set, then 0 is
!            --  returned.
! 
!           (Length (Source) = 0
!              or else
!                (for all J in 1 .. Length (Source) =>
!                   (if J = From or else (J > From) = (Going = Forward) then
!                      (Test = Inside) /= Maps.Is_In (Element (Source, J), Set)))
!            =>
!              Index'Result = 0,
! 
!            --  Otherwise, an index in the considered range of Source is
!            --  returned.
! 
!            others
!            =>
!              --  The result is in the considered range of Source
! 
!              Index'Result in 1 .. Length (Source)
!                and then
!                  (Index'Result = From
!                     or else (Index'Result > From) = (Going = Forward))
! 
!                --  The character at the returned index satisfies the property
!                --  Test on Set.
! 
!                and then
!                  (Test = Inside) =
!                    Maps.Is_In (Element (Source, Index'Result), Set)
! 
!                --  The result is the smallest or largest index which satisfies
!                --  the property, respectively when Going = Forward and Going =
!                --  Backward.
! 
!                and then
!                  (for all J in 1 .. Length (Source) =>
!                     (if J /= Index'Result
!                        and then (J < Index'Result) = (Going = Forward)
!                        and then (J = From
!                                    or else (J > From) = (Going = Forward))
!                      then (Test = Inside)
!                           /= Maps.Is_In (Element (Source, J), Set)))),
!         Global         => null;
        pragma Ada_05 (Index);
  
        function Index_Non_Blank
          (Source : Bounded_String;
           Going  : Direction := Forward) return Natural
        with
!         Post           => Index_Non_Blank'Result <= Length (Source),
!         Contract_Cases =>
! 
!            --  If all characters of Source are Space characters, then 0 is
!            --  returned.
! 
!           ((for all C of To_String (Source) => C = ' ')
!            =>
!              Index_Non_Blank'Result = 0,
! 
!            --  Otherwise, an index in the range of Source is returned
! 
!            others
!            =>
!              --  The result is in the range of Source
! 
!              Index_Non_Blank'Result in 1 .. Length (Source)
! 
!                --  The character at the returned index is not a Space character
! 
!                and then Element (Source, Index_Non_Blank'Result) /= ' '
! 
!                --  The result is the smallest or largest index which is not a
!                --  Space character, respectively when Going = Forward and Going
!                --  = Backward.
! 
!                and then
!                  (for all J in 1 .. Length (Source) =>
!                     (if J /= Index_Non_Blank'Result
!                           and then
!                             (J < Index_Non_Blank'Result) = (Going = Forward)
!                      then Element (Source, J) = ' '))),
!         Global         => null;
  
        function Index_Non_Blank
          (Source : Bounded_String;
           From   : Positive;
           Going  : Direction := Forward) return Natural
        with
!         Pre            =>
!           (if Length (Source) /= 0 then From <= Length (Source)),
!         Post           => Index_Non_Blank'Result <= Length (Source),
!         Contract_Cases =>
! 
!            --  If Source is the empty string, or all characters of the
!            --  considered slice of Source are Space characters, then 0
!            --  is returned.
! 
!           (Length (Source) = 0
!              or else
!                (for all J in 1 .. Length (Source) =>
!                   (if J = From or else (J > From) = (Going = Forward) then
!                      Element (Source, J) = ' '))
!            =>
!              Index_Non_Blank'Result = 0,
! 
!            --  Otherwise, an index in the considered range of Source is
!            --  returned.
! 
!            others
!            =>
!              --  The result is in the considered range of Source
! 
!              Index_Non_Blank'Result in 1 .. Length (Source)
!                and then
!                  (Index_Non_Blank'Result = From
!                     or else
!                       (Index_Non_Blank'Result > From) = (Going = Forward))
! 
!                --  The character at the returned index is not a Space character
! 
!                and then Element (Source, Index_Non_Blank'Result) /= ' '
! 
!                --  The result is the smallest or largest index which isn't a
!                --  Space character, respectively when Going = Forward and Going
!                --  = Backward.
! 
!                and then
!                  (for all J in 1 .. Length (Source) =>
!                     (if J /= Index_Non_Blank'Result
!                        and then
!                          (J < Index_Non_Blank'Result) = (Going = Forward)
!                        and then (J = From
!                                    or else (J > From) = (Going = Forward))
!                      then Element (Source, J) = ' '))),
!         Global         => null;
        pragma Ada_05 (Index_Non_Blank);
  
        function Count
*************** package Ada.Strings.Bounded is
*** 465,471 ****
           Pattern : String;
           Mapping : Maps.Character_Mapping_Function) return Natural
        with
!         Pre    => Pattern'Length /= 0,
          Global => null;
  
        function Count
--- 1174,1180 ----
           Pattern : String;
           Mapping : Maps.Character_Mapping_Function) return Natural
        with
!         Pre    => Pattern'Length /= 0 and then Mapping /= null,
          Global => null;
  
        function Count
*************** package Ada.Strings.Bounded is
*** 482,489 ****
           First  : out Positive;
           Last   : out Natural)
        with
!         Pre    => (if Length (Source) /= 0 then From <= Length (Source)),
!         Global => null;
        pragma Ada_2012 (Find_Token);
  
        procedure Find_Token
--- 1191,1243 ----
           First  : out Positive;
           Last   : out Natural)
        with
!         Pre            =>
!           (if Length (Source) /= 0 then From <= Length (Source)),
!         Contract_Cases =>
! 
!            --  If Source is the empty string, or if no character of the
!            --  considered slice of Source satisfies the property Test on
!            --  Set, then First is set to From and Last is set to 0.
! 
!           (Length (Source) = 0
!              or else
!                (for all J in From .. Length (Source) =>
!                   (Test = Inside) /= Maps.Is_In (Element (Source, J), Set))
!            =>
!              First = From and then Last = 0,
! 
!            --  Otherwise, First and Last are set to valid indexes
! 
!            others
!            =>
!              --  First and Last are in the considered range of Source
! 
!              First in From .. Length (Source)
!                and then Last in First .. Length (Source)
! 
!                --  No character between From and First satisfies the property
!                --  Test on Set.
! 
!                and then
!                  (for all J in From .. First - 1 =>
!                     (Test = Inside) /= Maps.Is_In (Element (Source, J), Set))
! 
!                --  All characters between First and Last satisfy the property
!                --  Test on Set.
! 
!                and then
!                  (for all J in First .. Last =>
!                     (Test = Inside) = Maps.Is_In (Element (Source, J), Set))
! 
!                --  If Last is not Source'Last, then the character at position
!                --  Last + 1 does not satify the property Test on Set.
! 
!                and then
!                  (if Last < Length (Source)
!                   then
!                     (Test = Inside)
!                     /= Maps.Is_In (Element (Source, Last + 1), Set))),
!         Global         => null;
        pragma Ada_2012 (Find_Token);
  
        procedure Find_Token
*************** package Ada.Strings.Bounded is
*** 493,536 ****
           First  : out Positive;
           Last   : out Natural)
        with
!         Global => null;
  
        ------------------------------------
        -- String Translation Subprograms --
        ------------------------------------
  
        function Translate
          (Source  : Bounded_String;
           Mapping : Maps.Character_Mapping) return Bounded_String
        with
!         Post   => Length (Translate'Result) = Length (Source),
          Global => null;
  
        procedure Translate
          (Source   : in out Bounded_String;
           Mapping  : Maps.Character_Mapping)
        with
!         Post   => Length (Source) = Length (Source)'Old,
          Global => null;
  
        function Translate
          (Source  : Bounded_String;
           Mapping : Maps.Character_Mapping_Function) return Bounded_String
        with
!         Post   => Length (Translate'Result) = Length (Source),
          Global => null;
  
        procedure Translate
          (Source  : in out Bounded_String;
           Mapping : Maps.Character_Mapping_Function)
        with
!         Post   => Length (Source) = Length (Source)'Old,
          Global => null;
  
        ---------------------------------------
        -- String Transformation Subprograms --
        ---------------------------------------
  
        function Replace_Slice
          (Source : Bounded_String;
           Low    : Positive;
--- 1247,1373 ----
           First  : out Positive;
           Last   : out Natural)
        with
!         Contract_Cases =>
! 
!            --  If Source is the empty string, or if no character of the
!            --  considered slice of Source satisfies the property Test on
!            --  Set, then First is set to 1 and Last is set to 0.
! 
!           (Length (Source) = 0
!              or else
!                (for all J in 1 .. Length (Source) =>
!                   (Test = Inside) /= Maps.Is_In (Element (Source, J), Set))
!            =>
!              First = 1 and then Last = 0,
! 
!            --  Otherwise, First and Last are set to valid indexes
! 
!            others
!            =>
!              --  First and Last are in the considered range of Source
! 
!              First in 1 .. Length (Source)
!                and then Last in First .. Length (Source)
! 
!                --  No character between 1 and First satisfies the property Test
!                --  on Set.
! 
!                and then
!                  (for all J in 1 .. First - 1 =>
!                     (Test = Inside) /= Maps.Is_In (Element (Source, J), Set))
! 
!                --  All characters between First and Last satisfy the property
!                --  Test on Set.
! 
!                and then
!                  (for all J in First .. Last =>
!                     (Test = Inside) = Maps.Is_In (Element (Source, J), Set))
! 
!                --  If Last is not Source'Last, then the character at position
!                --  Last + 1 does not satify the property Test on Set.
! 
!                and then
!                  (if Last < Length (Source)
!                   then
!                     (Test = Inside)
!                     /= Maps.Is_In (Element (Source, Last + 1), Set))),
!         Global         => null;
  
        ------------------------------------
        -- String Translation Subprograms --
        ------------------------------------
  
+       --  Each of the Translate subprograms, when applied to a Bounded_String,
+       --  has an analogous effect to the corresponding subprogram in
+       --  Strings.Fixed. For the Translate function, the translation is applied
+       --  to the string represented by the Bounded_String parameter, and the
+       --  result is converted (via To_Bounded_String) to a Bounded_String. For
+       --  the Translate procedure, the string represented by the Bounded_String
+       --  parameter after the translation is given by the Translate function
+       --  for fixed-length strings applied to the string represented by the
+       --  original value of the parameter.
+ 
        function Translate
          (Source  : Bounded_String;
           Mapping : Maps.Character_Mapping) return Bounded_String
        with
!         Post   => Length (Translate'Result) = Length (Source)
!           and then
!             (for all K in 1 .. Length (Source) =>
!                Element (Translate'Result, K) =
!                  Ada.Strings.Maps.Value (Mapping, Element (Source, K))),
          Global => null;
  
        procedure Translate
          (Source   : in out Bounded_String;
           Mapping  : Maps.Character_Mapping)
        with
!         Post   => Length (Source) = Length (Source'Old)
!           and then
!             (for all K in 1 .. Length (Source) =>
!                Element (Source, K) =
!                  Ada.Strings.Maps.Value (Mapping, Element (Source'Old, K))),
          Global => null;
  
        function Translate
          (Source  : Bounded_String;
           Mapping : Maps.Character_Mapping_Function) return Bounded_String
        with
!         Pre    => Mapping /= null,
!         Post   => Length (Translate'Result) = Length (Source)
!           and then
!             (for all K in 1 .. Length (Source) =>
!                Element (Translate'Result, K) = Mapping (Element (Source, K))),
          Global => null;
  
        procedure Translate
          (Source  : in out Bounded_String;
           Mapping : Maps.Character_Mapping_Function)
        with
!         Pre    => Mapping /= null,
!         Post   => Length (Source) = Length (Source'Old)
!           and then
!             (for all K in 1 .. Length (Source) =>
!                Element (Source, K) = Mapping (Element (Source'Old, K))),
          Global => null;
  
        ---------------------------------------
        -- String Transformation Subprograms --
        ---------------------------------------
  
+       --  Each of the transformation subprograms (Replace_Slice, Insert,
+       --  Overwrite, Delete), selector subprograms (Trim, Head, Tail), and
+       --  constructor functions ("*") has an effect based on its corresponding
+       --  subprogram in Strings.Fixed, and Replicate is based on Fixed."*".
+       --  In the case of a function, the corresponding fixed-length string
+       --  subprogram is applied to the string represented by the Bounded_String
+       --  parameter. To_Bounded_String is applied the result string, with Drop
+       --  (or Error in the case of Generic_Bounded_Length."*") determining
+       --  the effect when the string length exceeds Max_Length. In
+       --  the case of a procedure, the corresponding function in
+       --  Strings.Bounded.Generic_Bounded_Length is applied, with the
+       --  result assigned into the Source parameter.
+ 
        function Replace_Slice
          (Source : Bounded_String;
           Low    : Positive;
*************** package Ada.Strings.Bounded is
*** 541,563 ****
          Pre            =>
            Low - 1 <= Length (Source)
              and then
!           (if Drop = Error
!            then (if High >= Low
!                  then Low - 1
!                    <= Max_Length - By'Length
!                     - Natural'Max (Length (Source) - High, 0)
!                  else Length (Source) <= Max_Length - By'Length)),
          Contract_Cases =>
!           (High >= Low =>
!              Length (Replace_Slice'Result)
!            = Natural'Min
!              (Max_Length,
!               Low - 1 + By'Length + Natural'Max (Length (Source) - High,
!                                                   0)),
!            others      =>
!              Length (Replace_Slice'Result)
!            = Natural'Min (Max_Length, Length (Source) + By'Length)),
!         Global         => null;
  
        procedure Replace_Slice
          (Source   : in out Bounded_String;
--- 1378,1504 ----
          Pre            =>
            Low - 1 <= Length (Source)
              and then
!               (if Drop = Error
!                  then (if High >= Low
!                          then Low - 1
!                            <= Max_Length - By'Length
!                             - Integer'Max (Length (Source) - High, 0)
!                          else Length (Source) <= Max_Length - By'Length)),
          Contract_Cases =>
!           (Low - 1 <= Max_Length - By'Length
!              - Integer'Max (Length (Source) - Integer'Max (High, Low - 1), 0)
!            =>
!              --  Total length is lower than Max_Length: nothing is dropped
! 
!              --  Note that if High < Low, the insertion is done before Low,
!              --  so in all cases the starting position of the slice of Source
!              --  remaining after the replaced Slice is Integer'Max (High + 1,
!              --  Low).
! 
!              Length (Replace_Slice'Result) = Low - 1 + By'Length
!                + Integer'Max (Length (Source) - Integer'Max (High, Low - 1), 0)
!                and then
!                  Slice (Replace_Slice'Result, 1, Low - 1) =
!                    Slice (Source, 1, Low - 1)
!                and then
!                  Slice (Replace_Slice'Result, Low, Low - 1 + By'Length) = By
!                and then
!                  (if Integer'Max (High, Low - 1) < Length (Source) then
!                     Slice (Replace_Slice'Result,
!                       Low + By'Length, Length (Replace_Slice'Result)) =
!                         Slice (Source,
!                           Integer'Max (High + 1, Low), Length (Source))),
! 
!            Low - 1 > Max_Length - By'Length
!              - Integer'Max (Length (Source) - Integer'Max (High, Low - 1), 0)
!              and then Drop = Left
!            =>
!              --  Final_Slice is the length of the slice of Source remaining
!              --  after the replaced part.
!              (declare
!                 Final_Slice : constant Natural :=
!                   Integer'Max
!                     (Length (Source) - Integer'Max (High, Low - 1), 0);
!               begin
!                 --  The result is of maximal length and ends by the last
!                 --  Final_Slice characters of Source.
! 
!                 Length (Replace_Slice'Result) = Max_Length
!                   and then
!                     (if Final_Slice > 0 then
!                        Slice (Replace_Slice'Result,
!                          Max_Length - Final_Slice + 1, Max_Length) =
!                            Slice (Source,
!                              Integer'Max (High + 1, Low), Length (Source)))
! 
!                   --  Depending on when we reach Max_Length, either the first
!                   --  part of Source is fully dropped and By is partly dropped,
!                   --  or By is fully added and the first part of Source is
!                   --  partly dropped.
! 
!                   and then
!                    (if Max_Length - Final_Slice - By'Length <= 0 then
! 
!                       --  The first (possibly zero) characters of By are
!                       --  dropped.
! 
!                       (if Final_Slice < Max_Length then
!                          Slice (Replace_Slice'Result,
!                            1, Max_Length - Final_Slice) =
!                              By (By'Last - Max_Length + Final_Slice + 1
!                                  .. By'Last))
! 
!                     else  --  By is added to the result
! 
!                       Slice (Replace_Slice'Result,
!                         Max_Length - Final_Slice - By'Length + 1,
!                         Max_Length - Final_Slice) =
!                           By
! 
!                         --  The first characters of Source (1 .. Low - 1) are
!                         --  dropped.
! 
!                         and then Slice (Replace_Slice'Result, 1,
!                           Max_Length - Final_Slice - By'Length) =
!                             Slice (Source,
!                               Low - Max_Length + Final_Slice + By'Length,
!                               Low - 1))),
! 
!            others  --  Drop = Right
!            =>
!              --  The result is of maximal length and starts by the first Low -
!              --  1 characters of Source.
! 
!              Length (Replace_Slice'Result) = Max_Length
!                and then
!                  Slice (Replace_Slice'Result, 1, Low - 1) =
!                    Slice (Source, 1, Low - 1)
! 
!                --  Depending on when we reach Max_Length, either the last part
!                --  of Source is fully dropped and By is partly dropped, or By
!                --  is fully added and the last part of Source is partly
!                --  dropped.
! 
!                and then
!                  (if Low - 1 >= Max_Length - By'Length then
! 
!                     --  The last characters of By are dropped
! 
!                     Slice (Replace_Slice'Result, Low, Max_Length) =
!                       By (By'First .. Max_Length - Low + By'First)
! 
!                   else  --  By is fully added
! 
!                     Slice (Replace_Slice'Result, Low, Low + By'Length - 1) = By
! 
!                       --  Then Source starting from Integer'Max (High + 1, Low)
!                       --  is added but the last characters are dropped.
! 
!                       and then Slice (Replace_Slice'Result,
!                         Low + By'Length, Max_Length) =
!                           Slice (Source, Integer'Max (High + 1, Low),
!                             Integer'Max (High + 1, Low) +
!                               (Max_Length - Low - By'Length))));
  
        procedure Replace_Slice
          (Source   : in out Bounded_String;
*************** package Ada.Strings.Bounded is
*** 569,591 ****
          Pre            =>
            Low - 1 <= Length (Source)
              and then
!           (if Drop = Error
!            then (if High >= Low
!                  then Low - 1
!                    <= Max_Length - By'Length
!                     - Natural'Max (Length (Source) - High, 0)
!                  else Length (Source) <= Max_Length - By'Length)),
          Contract_Cases =>
!           (High >= Low =>
!             Length (Source)
!           = Natural'Min
!               (Max_Length,
!                Low - 1 + By'Length + Natural'Max (Length (Source)'Old - High,
!                                                   0)),
!            others      =>
!              Length (Source)
!            = Natural'Min (Max_Length, Length (Source)'Old + By'Length)),
!         Global         => null;
  
        function Insert
          (Source   : Bounded_String;
--- 1510,1628 ----
          Pre            =>
            Low - 1 <= Length (Source)
              and then
!               (if Drop = Error
!                  then (if High >= Low
!                          then Low - 1
!                            <= Max_Length - By'Length
!                             - Natural'Max (Length (Source) - High, 0)
!                          else Length (Source) <= Max_Length - By'Length)),
          Contract_Cases =>
!           (Low - 1 <= Max_Length - By'Length
!              - Integer'Max (Length (Source) - Integer'Max (High, Low - 1), 0)
!            =>
!              --  Total length is lower than Max_Length: nothing is dropped
! 
!              --  Note that if High < Low, the insertion is done before Low,
!              --  so in all cases the starting position of the slice of Source
!              --  remaining after the replaced Slice is Integer'Max (High + 1,
!              --  Low).
! 
!              Length (Source) = Low - 1 + By'Length + Integer'Max
!                (Length (Source'Old) - Integer'Max (High, Low - 1), 0)
!                and then
!                  Slice (Source, 1, Low - 1) = Slice (Source'Old, 1, Low - 1)
!                and then Slice (Source, Low, Low - 1 + By'Length) = By
!                and then
!                  (if Integer'Max (High, Low - 1) < Length (Source'Old) then
!                     Slice (Source, Low + By'Length, Length (Source)) =
!                       Slice (Source'Old,
!                         Integer'Max (High + 1, Low), Length (Source'Old))),
! 
!            Low - 1 > Max_Length - By'Length
!              - Integer'Max (Length (Source) - Integer'Max (High, Low - 1), 0)
!              and then Drop = Left
!            =>
!              --  Final_Slice is the length of the slice of Source remaining
!              --  after the replaced part.
!              (declare
!                 Final_Slice : constant Integer :=
!                   Integer'Max (0,
!                     Length (Source'Old) - Integer'Max (High, Low - 1));
!               begin
!                 --  The result is of maximal length and ends by the last
!                 --  Final_Slice characters of Source.
! 
!                 Length (Source) = Max_Length
!                   and then
!                     (if Final_Slice > 0 then
!                        Slice (Source,
!                          Max_Length - Final_Slice + 1, Max_Length) =
!                            Slice (Source'Old,
!                              Integer'Max (High + 1, Low), Length (Source'Old)))
! 
!                   --  Depending on when we reach Max_Length, either the first
!                   --  part of Source is fully dropped and By is partly dropped,
!                   --  or By is fully added and the first part of Source is
!                   --  partly dropped.
! 
!                   and then
!                     (if Max_Length - Final_Slice - By'Length <= 0 then
! 
!                        --  The first characters of By are dropped
! 
!                        (if Final_Slice < Max_Length then
!                           Slice (Source, 1, Max_Length - Final_Slice) =
!                             By (By'Last - Max_Length + Final_Slice + 1
!                                 .. By'Last))
! 
!                      else  --  By is added to the result
! 
!                        Slice (Source,
!                          Max_Length - Final_Slice - By'Length + 1,
!                          Max_Length - Final_Slice) = By
! 
!                          --  The first characters of Source (1 .. Low - 1) are
!                          --  dropped.
! 
!                          and then Slice (Source, 1,
!                            Max_Length - Final_Slice - By'Length) =
!                              Slice (Source'Old,
!                                Low - Max_Length + Final_Slice + By'Length,
!                                Low - 1))),
! 
!            others  --  Drop = Right
!            =>
!              --  The result is of maximal length and starts by the first Low -
!              --  1 characters of Source.
! 
!              Length (Source) = Max_Length
!                and then
!                  Slice (Source, 1, Low - 1) = Slice (Source'Old, 1, Low - 1)
! 
!                --  Depending on when we reach Max_Length, either the last part
!                --  of Source is fully dropped and By is partly dropped, or By
!                --  is fully added and the last part of Source is partly
!                --  dropped.
! 
!                and then
!                  (if Low - 1 >= Max_Length - By'Length then
! 
!                     --  The last characters of By are dropped
! 
!                     Slice (Source, Low, Max_Length) =
!                       By (By'First .. Max_Length - Low + By'First)
! 
!                   else  --  By is fully added
! 
!                     Slice (Source, Low, Low + By'Length - 1) = By
! 
!                       --  Then Source starting from Natural'Max (High + 1, Low)
!                       --  is added but the last characters are dropped.
! 
!                       and then Slice (Source, Low + By'Length, Max_Length) =
!                         Slice (Source'Old, Integer'Max (High + 1, Low),
!                           Integer'Max (High + 1, Low) +
!                             (Max_Length - Low - By'Length))));
  
        function Insert
          (Source   : Bounded_String;
*************** package Ada.Strings.Bounded is
*** 593,606 ****
           New_Item : String;
           Drop     : Truncation := Error) return Bounded_String
        with
!         Pre    =>
            Before - 1 <= Length (Source)
              and then (if New_Item'Length > Max_Length - Length (Source)
                        then Drop /= Error),
!         Post   =>
!           Length (Insert'Result)
!         = Natural'Min (Max_Length, Length (Source) + New_Item'Length),
!         Global => null;
  
        procedure Insert
          (Source   : in out Bounded_String;
--- 1630,1742 ----
           New_Item : String;
           Drop     : Truncation := Error) return Bounded_String
        with
!         Pre            =>
            Before - 1 <= Length (Source)
              and then (if New_Item'Length > Max_Length - Length (Source)
                        then Drop /= Error),
!         Contract_Cases =>
!           (Length (Source) <= Max_Length - New_Item'Length
!            =>
!              --  Total length is lower than Max_Length: nothing is dropped
! 
!              Length (Insert'Result) = Length (Source) + New_Item'Length
!                and then
!                  Slice (Insert'Result, 1, Before - 1) =
!                    Slice (Source, 1, Before - 1)
!                and then
!                  Slice (Insert'Result, Before, Before - 1 + New_Item'Length) =
!                    New_Item
!                and then
!                  (if Before <= Length (Source) then
!                     Slice (Insert'Result,
!                       Before + New_Item'Length, Length (Insert'Result)) =
!                         Slice (Source, Before, Length (Source))),
! 
!            Length (Source) > Max_Length - New_Item'Length and then Drop = Left
!            =>
!              --  The result is of maximal length and ends by the last
!              --  characters of Source.
! 
!              Length (Insert'Result) = Max_Length
!                and then
!                  (if Before <= Length (Source) then
!                     Slice (Insert'Result,
!                       Max_Length - Length (Source) + Before, Max_Length) =
!                         Slice (Source, Before, Length (Source)))
! 
!                --  Depending on when we reach Max_Length, either the first part
!                --  of Source is fully dropped and New_Item is partly dropped,
!                --  or New_Item is fully added and the first part of Source is
!                --  partly dropped.
! 
!                and then
!                  (if Max_Length - Length (Source) - 1 + Before
!                    < New_Item'Length
!                   then
!                     --  The first characters of New_Item are dropped
! 
!                     (if Length (Source) - Before + 1 < Max_Length then
!                        Slice (Insert'Result,
!                          1, Max_Length - Length (Source) - 1 + Before) =
!                            New_Item
!                              (New_Item'Last - Max_Length + Length (Source)
!                                - Before + 2
!                               .. New_Item'Last))
! 
!                   else  --  New_Item is added to the result
! 
!                     Slice (Insert'Result,
!                       Max_Length - Length (Source) - New_Item'Length + Before,
!                       Max_Length - Length (Source) - 1 + Before) = New_Item
! 
!                       --  The first characters of Source (1 .. Before - 1) are
!                       --  dropped.
! 
!                       and then Slice (Insert'Result,
!                         1, Max_Length - Length (Source) - New_Item'Length
!                           - 1 + Before) =
!                             Slice (Source,
!                               Length (Source) - Max_Length + New_Item'Length
!                                 + 1,
!                               Before - 1)),
! 
!            others  --  Drop = Right
!            =>
!              --  The result is of maximal length and starts by the first
!              --  characters of Source.
! 
!              Length (Insert'Result) = Max_Length
!                and then
!                  Slice (Insert'Result, 1, Before - 1) =
!                    Slice (Source, 1, Before - 1)
! 
!                --  Depending on when we reach Max_Length, either the last part
!                --  of Source is fully dropped and New_Item is partly dropped,
!                --  or New_Item is fully added and the last part of Source is
!                --  partly dropped.
! 
!                and then
!                  (if Before - 1 >= Max_Length - New_Item'Length then
! 
!                     --  The last characters of New_Item are dropped
! 
!                     Slice (Insert'Result, Before, Max_Length) =
!                       New_Item (New_Item'First
!                         .. Max_Length - Before + New_Item'First)
! 
!                   else  --  New_Item is fully added
! 
!                     Slice (Insert'Result,
!                       Before, Before + New_Item'Length - 1) =
!                         New_Item
! 
!                       --  Then Source starting from Before is added but the
!                       --  last characters are dropped.
! 
!                       and then Slice (Insert'Result,
!                         Before + New_Item'Length, Max_Length) =
!                           Slice (Source,
!                             Before, Max_Length - New_Item'Length)));
  
        procedure Insert
          (Source   : in out Bounded_String;
*************** package Ada.Strings.Bounded is
*** 608,621 ****
           New_Item : String;
           Drop     : Truncation := Error)
        with
!         Pre    =>
            Before - 1 <= Length (Source)
              and then (if New_Item'Length > Max_Length - Length (Source)
                        then Drop /= Error),
!         Post   =>
!           Length (Source)
!         = Natural'Min (Max_Length, Length (Source)'Old + New_Item'Length),
!         Global => null;
  
        function Overwrite
          (Source   : Bounded_String;
--- 1744,1855 ----
           New_Item : String;
           Drop     : Truncation := Error)
        with
!         Pre            =>
            Before - 1 <= Length (Source)
              and then (if New_Item'Length > Max_Length - Length (Source)
                        then Drop /= Error),
!         Contract_Cases =>
!           (Length (Source) <= Max_Length - New_Item'Length
!            =>
!              --  Total length is lower than Max_Length: nothing is dropped
! 
!              Length (Source) = Length (Source'Old) + New_Item'Length
!                and then
!                  Slice (Source, 1, Before - 1) =
!                    Slice (Source'Old, 1, Before - 1)
!                and then
!                  Slice (Source, Before, Before - 1 + New_Item'Length) =
!                    New_Item
!                and then
!                  (if Before <= Length (Source'Old) then
!                     Slice (Source, Before + New_Item'Length, Length (Source)) =
!                       Slice (Source'Old, Before, Length (Source'Old))),
! 
!            Length (Source) > Max_Length - New_Item'Length and then Drop = Left
!            =>
!              --  The result is of maximal length and ends by the last
!              --  characters of Source.
! 
!              Length (Source) = Max_Length
!                and then
!                  (if Before <= Length (Source'Old) then
!                     Slice (Source,
!                       Max_Length - Length (Source'Old) + Before, Max_Length) =
!                         Slice (Source'Old, Before, Length (Source'Old)))
! 
!                --  Depending on when we reach Max_Length, either the first part
!                --  of Source is fully dropped and New_Item is partly dropped,
!                --  or New_Item is fully added and the first part of Source is
!                --  partly dropped.
! 
!                and then
!                  (if Max_Length - Length (Source'Old) - 1 + Before
!                    < New_Item'Length
!                   then
!                     --  The first characters of New_Item are dropped
! 
!                     (if Length (Source'Old) - Before + 1 < Max_Length then
!                        Slice (Source,
!                          1, Max_Length - Length (Source'Old) - 1 + Before) =
!                            New_Item
!                              (New_Item'Last - Max_Length + Length (Source'Old)
!                                - Before + 2
!                               .. New_Item'Last))
! 
!                   else  --  New_Item is added to the result
! 
!                     Slice (Source,
!                       Max_Length - Length (Source'Old) - New_Item'Length
!                         + Before,
!                       Max_Length - Length (Source'Old) - 1 + Before) = New_Item
! 
!                       --  The first characters of Source (1 .. Before - 1) are
!                       --  dropped.
! 
!                       and then Slice (Source, 1,
!                         Max_Length - Length (Source'Old) - New_Item'Length
!                           - 1 + Before) =
!                             Slice (Source'Old,
!                               Length (Source'Old)
!                                 - Max_Length + New_Item'Length + 1,
!                               Before - 1)),
! 
!            others  --  Drop = Right
!            =>
!              --  The result is of maximal length and starts by the first
!              --  characters of Source.
! 
!              Length (Source) = Max_Length
!                and then
!                  Slice (Source, 1, Before - 1) =
!                    Slice (Source'Old, 1, Before - 1)
! 
!                --  Depending on when we reach Max_Length, either the last part
!                --  of Source is fully dropped and New_Item is partly dropped,
!                --  or New_Item is fully added and the last part of Source is
!                --  partly dropped.
! 
!                and then
!                  (if Before - 1 >= Max_Length - New_Item'Length then
! 
!                     --  The last characters of New_Item are dropped
! 
!                     Slice (Source, Before, Max_Length) =
!                       New_Item (New_Item'First
!                         .. Max_Length - Before + New_Item'First)
! 
!                   else  --  New_Item is fully added
! 
!                     Slice (Source, Before, Before + New_Item'Length - 1) =
!                       New_Item
! 
!                       --  Then Source starting from Before is added but the
!                       --  last characters are dropped.
! 
!                       and then
!                         Slice (Source, Before + New_Item'Length, Max_Length) =
!                           Slice (Source'Old,
!                             Before, Max_Length - New_Item'Length)));
  
        function Overwrite
          (Source   : Bounded_String;
*************** package Ada.Strings.Bounded is
*** 623,638 ****
           New_Item : String;
           Drop     : Truncation := Error) return Bounded_String
        with
!         Pre    =>
            Position - 1 <= Length (Source)
              and then (if New_Item'Length > Max_Length - (Position - 1)
                        then Drop /= Error),
!         Post   =>
!           Length (Overwrite'Result)
!         = Natural'Max
!             (Length (Source),
!              Natural'Min (Max_Length, Position - 1 + New_Item'Length)),
!         Global => null;
  
        procedure Overwrite
          (Source    : in out Bounded_String;
--- 1857,1941 ----
           New_Item : String;
           Drop     : Truncation := Error) return Bounded_String
        with
!         Pre            =>
            Position - 1 <= Length (Source)
              and then (if New_Item'Length > Max_Length - (Position - 1)
                        then Drop /= Error),
!         Contract_Cases =>
!           (Position - 1 <= Max_Length - New_Item'Length
!            =>
!              --  The length is unchanged, unless New_Item overwrites further
!              --  than the end of Source. In this contract case, we suppose
!              --  New_Item doesn't overwrite further than Max_Length.
! 
!              Length (Overwrite'Result) =
!                Integer'Max (Length (Source), Position - 1 + New_Item'Length)
!                and then
!                  Slice (Overwrite'Result, 1, Position - 1) =
!                    Slice (Source, 1, Position - 1)
!                and then Slice (Overwrite'Result,
!                  Position, Position - 1 + New_Item'Length) =
!                    New_Item
!                and then
!                  (if Position - 1 + New_Item'Length < Length (Source) then
! 
!                     --  There are some unchanged characters of Source remaining
!                     --  after New_Item.
! 
!                     Slice (Overwrite'Result,
!                       Position + New_Item'Length, Length (Source)) =
!                         Slice (Source,
!                           Position + New_Item'Length, Length (Source))),
! 
!            Position - 1 > Max_Length - New_Item'Length and then Drop = Left
!            =>
!              Length (Overwrite'Result) = Max_Length
! 
!                --  If a part of the result has to be dropped, it means New_Item
!                --  is overwriting further than the end of Source. Thus the
!                --  result is necessarily ending by New_Item. However, we don't
!                --  know whether New_Item covers all Max_Length characters or
!                --  some characters of Source are remaining at the left.
! 
!                and then
!                  (if New_Item'Length > Max_Length then
! 
!                     --  New_Item covers all Max_Length characters
! 
!                     To_String (Overwrite'Result) =
!                       New_Item
!                         (New_Item'Last - Max_Length + 1 .. New_Item'Last)
!                   else
!                     --  New_Item fully appears at the end
! 
!                     Slice (Overwrite'Result,
!                       Max_Length - New_Item'Length + 1, Max_Length) =
!                         New_Item
! 
!                       --  The left of Source is cut
! 
!                       and then
!                         Slice (Overwrite'Result,
!                           1, Max_Length - New_Item'Length) =
!                             Slice (Source,
!                               Position - Max_Length + New_Item'Length,
!                               Position - 1)),
! 
!            others  --  Drop = Right
!            =>
!              --  The result is of maximal length and starts by the first
!              --  characters of Source.
! 
!              Length (Overwrite'Result) = Max_Length
!                and then
!                  Slice (Overwrite'Result, 1, Position - 1) =
!                    Slice (Source, 1, Position - 1)
! 
!                --  Then New_Item is written until Max_Length
! 
!                and then Slice (Overwrite'Result, Position, Max_Length) =
!                  New_Item
!                    (New_Item'First .. Max_Length - Position + New_Item'First));
  
        procedure Overwrite
          (Source    : in out Bounded_String;
*************** package Ada.Strings.Bounded is
*** 640,655 ****
           New_Item  : String;
           Drop      : Truncation := Error)
        with
!         Pre    =>
            Position - 1 <= Length (Source)
              and then (if New_Item'Length > Max_Length - (Position - 1)
                        then Drop /= Error),
!         Post   =>
!           Length (Source)
!         = Natural'Max
!             (Length (Source)'Old,
!              Natural'Min (Max_Length, Position - 1 + New_Item'Length)),
!         Global => null;
  
        function Delete
          (Source  : Bounded_String;
--- 1943,2026 ----
           New_Item  : String;
           Drop      : Truncation := Error)
        with
!         Pre            =>
            Position - 1 <= Length (Source)
              and then (if New_Item'Length > Max_Length - (Position - 1)
                        then Drop /= Error),
!         Contract_Cases =>
!           (Position - 1 <= Max_Length - New_Item'Length
!            =>
!              --  The length of Source is unchanged, unless New_Item overwrites
!              --  further than the end of Source. In this contract case, we
!              --  suppose New_Item doesn't overwrite further than Max_Length.
! 
!              Length (Source) = Integer'Max
!                (Length (Source'Old), Position - 1 + New_Item'Length)
!                and then
!                  Slice (Source, 1, Position - 1) =
!                    Slice (Source'Old, 1, Position - 1)
!                and then Slice (Source,
!                  Position, Position - 1 + New_Item'Length) =
!                    New_Item
!                and then
!                  (if Position - 1 + New_Item'Length < Length (Source'Old) then
! 
!                     --  There are some unchanged characters of Source remaining
!                     --  after New_Item.
! 
!                     Slice (Source,
!                       Position + New_Item'Length, Length (Source'Old)) =
!                         Slice (Source'Old,
!                           Position + New_Item'Length, Length (Source'Old))),
! 
!            Position - 1 > Max_Length - New_Item'Length and then Drop = Left
!            =>
!              Length (Source) = Max_Length
! 
!                --  If a part of the result has to be dropped, it means New_Item
!                --  is overwriting further than the end of Source. Thus the
!                --  result is necessarily ending by New_Item. However, we don't
!                --  know whether New_Item covers all Max_Length characters or
!                --  some characters of Source are remaining at the left.
! 
!                and then
!                  (if New_Item'Length > Max_Length then
! 
!                     --  New_Item covers all Max_Length characters
! 
!                     To_String (Source) =
!                       New_Item
!                         (New_Item'Last - Max_Length + 1 .. New_Item'Last)
!                   else
!                     --  New_Item fully appears at the end
! 
!                     Slice (Source,
!                       Max_Length - New_Item'Length + 1, Max_Length) =
!                         New_Item
! 
!                       --  The left of Source is cut
! 
!                       and then
!                         Slice (Source, 1, Max_Length - New_Item'Length) =
!                           Slice (Source'Old,
!                             Position - Max_Length + New_Item'Length,
!                             Position - 1)),
! 
!            others  --  Drop = Right
!            =>
!              --  The result is of maximal length and starts by the first
!              --  characters of Source.
! 
!              Length (Source) = Max_Length
!                and then
!                  Slice (Source, 1, Position - 1) =
!                    Slice (Source'Old, 1, Position - 1)
! 
!                --  New_Item is written until Max_Length
! 
!                and then Slice (Source, Position, Max_Length) =
!                  New_Item
!                    (New_Item'First .. Max_Length - Position + New_Item'First));
  
        function Delete
          (Source  : Bounded_String;
*************** package Ada.Strings.Bounded is
*** 657,669 ****
           Through : Natural) return Bounded_String
        with
          Pre            =>
!           (if Through <= From then From - 1 <= Length (Source)),
          Contract_Cases =>
            (Through >= From =>
!              Length (Delete'Result) = Length (Source) - (Through - From + 1),
             others          =>
!              Length (Delete'Result) = Length (Source)),
! 
          Global         => null;
  
        procedure Delete
--- 2028,2047 ----
           Through : Natural) return Bounded_String
        with
          Pre            =>
!           (if Through >= From then From - 1 <= Length (Source)),
          Contract_Cases =>
            (Through >= From =>
!              Length (Delete'Result) =
!                From - 1 + Natural'Max (Length (Source) - Through, 0)
!                and then
!                  Slice (Delete'Result, 1, From - 1) =
!                    Slice (Source, 1, From - 1)
!                and then
!                  (if Through < Length (Source) then
!                     Slice (Delete'Result, From, Length (Delete'Result)) =
!                       Slice (Source, Through + 1, Length (Source))),
             others          =>
!              Delete'Result = Source),
          Global         => null;
  
        procedure Delete
*************** package Ada.Strings.Bounded is
*** 672,683 ****
           Through : Natural)
        with
          Pre            =>
!           (if Through <= From then From - 1 <= Length (Source)),
          Contract_Cases =>
            (Through >= From =>
!              Length (Source) = Length (Source)'Old - (Through - From + 1),
             others          =>
!              Length (Source) = Length (Source)'Old),
          Global         => null;
  
        ---------------------------------
--- 2050,2068 ----
           Through : Natural)
        with
          Pre            =>
!           (if Through >= From then From - 1 <= Length (Source)),
          Contract_Cases =>
            (Through >= From =>
!              Length (Source) =
!                From - 1 + Natural'Max (Length (Source'Old) - Through, 0)
!                and then
!                  Slice (Source, 1, From - 1) = Slice (Source'Old, 1, From - 1)
!                and then
!                  (if Through < Length (Source) then
!                     Slice (Source, From, Length (Source)) =
!                       Slice (Source'Old, Through + 1, Length (Source'Old))),
             others          =>
!              Source = Source'Old),
          Global         => null;
  
        ---------------------------------
*************** package Ada.Strings.Bounded is
*** 688,718 ****
          (Source : Bounded_String;
           Side   : Trim_End) return Bounded_String
        with
!         Post   => Length (Trim'Result) <= Length (Source),
!         Global => null;
  
        procedure Trim
          (Source : in out Bounded_String;
           Side   : Trim_End)
        with
!         Post   => Length (Source) <= Length (Source)'Old,
!         Global => null;
  
        function Trim
          (Source : Bounded_String;
           Left   : Maps.Character_Set;
           Right  : Maps.Character_Set) return Bounded_String
        with
!         Post   => Length (Trim'Result) <= Length (Source),
!         Global => null;
  
        procedure Trim
          (Source : in out Bounded_String;
           Left   : Maps.Character_Set;
           Right  : Maps.Character_Set)
        with
!         Post   => Length (Source) <= Length (Source)'Old,
!         Global => null;
  
        function Head
          (Source : Bounded_String;
--- 2073,2183 ----
          (Source : Bounded_String;
           Side   : Trim_End) return Bounded_String
        with
!         Contract_Cases =>
!           --  If all characters in Source are Space, the returned string is
!           --  empty.
! 
!           ((for all C of To_String (Source) => C = ' ')
!            =>
!              Length (Trim'Result) = 0,
! 
!            --  Otherwise, the returned string is a slice of Source
! 
!            others
!            =>
!              (declare
!                 Low  : constant Positive :=
!                   (if Side = Right then 1
!                    else Index_Non_Blank (Source, Forward));
!                 High : constant Positive :=
!                   (if Side = Left then Length (Source)
!                    else Index_Non_Blank (Source, Backward));
!               begin
!                 To_String (Trim'Result) = Slice (Source, Low, High))),
!         Global         => null;
  
        procedure Trim
          (Source : in out Bounded_String;
           Side   : Trim_End)
        with
!         Contract_Cases =>
!           --  If all characters in Source are Space, the returned string is
!           --  empty.
! 
!           ((for all C of To_String (Source) => C = ' ')
!            =>
!              Length (Source) = 0,
! 
!            --  Otherwise, the returned string is a slice of Source
! 
!            others
!            =>
!              (declare
!                 Low  : constant Positive :=
!                   (if Side = Right then 1
!                    else Index_Non_Blank (Source'Old, Forward));
!                 High : constant Positive :=
!                   (if Side = Left then Length (Source'Old)
!                    else Index_Non_Blank (Source'Old, Backward));
!               begin
!                 To_String (Source) = Slice (Source'Old, Low, High))),
!         Global         => null;
  
        function Trim
          (Source : Bounded_String;
           Left   : Maps.Character_Set;
           Right  : Maps.Character_Set) return Bounded_String
        with
!         Contract_Cases =>
!           --  If all characters in Source are contained in one of the sets Left
!           --  or Right, then the returned string is empty.
! 
!           ((for all C of To_String (Source) => Maps.Is_In (C, Left))
!              or else
!                (for all C of To_String (Source) => Maps.Is_In (C, Right))
!            =>
!              Length (Trim'Result) = 0,
! 
!            --  Otherwise, the returned string is a slice of Source
! 
!            others
!            =>
!              (declare
!                 Low  : constant Positive :=
!                   Index (Source, Left, Outside, Forward);
!                 High : constant Positive :=
!                   Index (Source, Right, Outside, Backward);
!               begin
!                 To_String (Trim'Result) = Slice (Source, Low, High))),
!         Global         => null;
  
        procedure Trim
          (Source : in out Bounded_String;
           Left   : Maps.Character_Set;
           Right  : Maps.Character_Set)
        with
!         Contract_Cases =>
!           --  If all characters in Source are contained in one of the sets Left
!           --  or Right, then the returned string is empty.
! 
!           ((for all C of To_String (Source) => Maps.Is_In (C, Left))
!              or else
!                (for all C of To_String (Source) => Maps.Is_In (C, Right))
!            =>
!              Length (Source) = 0,
! 
!            --  Otherwise, the returned string is a slice of Source
! 
!            others
!            =>
!              (declare
!                 Low  : constant Positive :=
!                   Index (Source'Old, Left, Outside, Forward);
!                 High : constant Positive :=
!                   Index (Source'Old, Right, Outside, Backward);
!               begin
!                 To_String (Source) = Slice (Source'Old, Low, High))),
!         Global         => null;
  
        function Head
          (Source : Bounded_String;
*************** package Ada.Strings.Bounded is
*** 720,728 ****
           Pad    : Character := Space;
           Drop   : Truncation := Error) return Bounded_String
        with
!         Pre    => (if Count > Max_Length then Drop /= Error),
!         Post   => Length (Head'Result) = Natural'Min (Max_Length, Count),
!         Global => null;
  
        procedure Head
          (Source : in out Bounded_String;
--- 2185,2238 ----
           Pad    : Character := Space;
           Drop   : Truncation := Error) return Bounded_String
        with
!         Pre            => (if Count > Max_Length then Drop /= Error),
!         Contract_Cases =>
!           (Count <= Length (Source)
!            =>
!              --  Source is cut
! 
!              To_String (Head'Result) = Slice (Source, 1, Count),
! 
!            Count > Length (Source) and then Count <= Max_Length
!            =>
!              --  Source is followed by Pad characters
! 
!              Length (Head'Result) = Count
!                and then
!                  Slice (Head'Result, 1, Length (Source)) = To_String (Source)
!                and then
!                  Slice (Head'Result, Length (Source) + 1, Count) =
!                    [1 .. Count - Length (Source) => Pad],
! 
!            Count > Max_Length and then Drop = Right
!            =>
!              --  Source is followed by Pad characters
! 
!              Length (Head'Result) = Max_Length
!                and then
!                  Slice (Head'Result, 1, Length (Source)) = To_String (Source)
!                and then
!                  Slice (Head'Result, Length (Source) + 1, Max_Length) =
!                    [1 .. Max_Length - Length (Source) => Pad],
! 
!            Count - Length (Source) > Max_Length and then Drop = Left
!            =>
!              --  Source is fully dropped at the left
! 
!              To_String (Head'Result) = [1 .. Max_Length => Pad],
! 
!            others
!            =>
!              --  Source is partly dropped at the left
! 
!              Length (Head'Result) = Max_Length
!                and then
!                  Slice (Head'Result, 1, Max_Length - Count + Length (Source)) =
!                    Slice (Source, Count - Max_Length + 1, Length (Source))
!                and then
!                  Slice (Head'Result,
!                    Max_Length - Count + Length (Source) + 1, Max_Length) =
!                      [1 .. Count - Length (Source) => Pad]);
  
        procedure Head
          (Source : in out Bounded_String;
*************** package Ada.Strings.Bounded is
*** 730,738 ****
           Pad    : Character  := Space;
           Drop   : Truncation := Error)
        with
!         Pre    => (if Count > Max_Length then Drop /= Error),
!         Post   => Length (Source) = Natural'Min (Max_Length, Count),
!         Global => null;
  
        function Tail
          (Source : Bounded_String;
--- 2240,2296 ----
           Pad    : Character  := Space;
           Drop   : Truncation := Error)
        with
!         Pre            => (if Count > Max_Length then Drop /= Error),
!         Contract_Cases =>
!           (Count <= Length (Source)
!            =>
!              --  Source is cut
! 
!              To_String (Source) = Slice (Source'Old, 1, Count),
! 
!            Count > Length (Source) and then Count <= Max_Length
!            =>
!              --  Source is followed by Pad characters
! 
!              Length (Source) = Count
!                and then
!                  Slice (Source, 1, Length (Source'Old)) =
!                    To_String (Source'Old)
!                and then
!                  Slice (Source, Length (Source'Old) + 1, Count) =
!                    [1 .. Count - Length (Source'Old) => Pad],
! 
!            Count > Max_Length and then Drop = Right
!            =>
!              --  Source is followed by Pad characters
! 
!              Length (Source) = Max_Length
!                and then
!                  Slice (Source, 1, Length (Source'Old)) =
!                    To_String (Source'Old)
!                and then
!                  Slice (Source, Length (Source'Old) + 1, Max_Length) =
!                    [1 .. Max_Length - Length (Source'Old) => Pad],
! 
!            Count - Length (Source) > Max_Length and then Drop = Left
!            =>
!              --  Source is fully dropped on the left
! 
!              To_String (Source) = [1 .. Max_Length => Pad],
! 
!            others
!            =>
!              --  Source is partly dropped on the left
! 
!              Length (Source) = Max_Length
!                and then
!                  Slice (Source, 1, Max_Length - Count + Length (Source'Old)) =
!                    Slice (Source'Old,
!                      Count - Max_Length + 1, Length (Source'Old))
!                and then
!                  Slice (Source,
!                    Max_Length - Count + Length (Source'Old) + 1, Max_Length) =
!                      [1 .. Count - Length (Source'Old) => Pad]);
  
        function Tail
          (Source : Bounded_String;
*************** package Ada.Strings.Bounded is
*** 740,748 ****
           Pad    : Character  := Space;
           Drop   : Truncation := Error) return Bounded_String
        with
!         Pre    => (if Count > Max_Length then Drop /= Error),
!         Post   => Length (Tail'Result) = Natural'Min (Max_Length, Count),
!         Global => null;
  
        procedure Tail
          (Source : in out Bounded_String;
--- 2298,2357 ----
           Pad    : Character  := Space;
           Drop   : Truncation := Error) return Bounded_String
        with
!         Pre            => (if Count > Max_Length then Drop /= Error),
!         Contract_Cases =>
!           (Count < Length (Source)
!            =>
!              --  Source is cut
! 
!              (if Count > 0 then
!                 To_String (Tail'Result) =
!                   Slice (Source, Length (Source) - Count + 1, Length (Source))
!               else Length (Tail'Result) = 0),
! 
!            Count >= Length (Source) and then Count < Max_Length
!            =>
!              --  Source is preceded by Pad characters
! 
!              Length (Tail'Result) = Count
!                and then
!                  Slice (Tail'Result, 1, Count - Length (Source)) =
!                    [1 .. Count - Length (Source) => Pad]
!                and then
!                  Slice (Tail'Result, Count - Length (Source) + 1, Count) =
!                    To_String (Source),
! 
!            Count >= Max_Length and then Drop = Left
!            =>
!              --  Source is preceded by Pad characters
! 
!              Length (Tail'Result) = Max_Length
!                and then
!                  Slice (Tail'Result, 1, Max_Length - Length (Source)) =
!                    [1 .. Max_Length - Length (Source) => Pad]
!                and then
!                  (if Length (Source) > 0 then
!                     Slice (Tail'Result,
!                       Max_Length - Length (Source) + 1, Max_Length) =
!                         To_String (Source)),
! 
!            Count - Length (Source) >= Max_Length and then Drop /= Left
!            =>
!              --  Source is fully dropped on the right
! 
!              To_String (Tail'Result) = [1 .. Max_Length => Pad],
! 
!            others
!            =>
!              --  Source is partly dropped on the right
! 
!              Length (Tail'Result) = Max_Length
!                and then
!                  Slice (Tail'Result, 1, Count - Length (Source)) =
!                    [1 .. Count - Length (Source) => Pad]
!                and then
!                  Slice (Tail'Result, Count - Length (Source) + 1, Max_Length) =
!                    Slice (Source, 1, Max_Length - Count + Length (Source)));
  
        procedure Tail
          (Source : in out Bounded_String;
*************** package Ada.Strings.Bounded is
*** 750,758 ****
           Pad    : Character  := Space;
           Drop   : Truncation := Error)
        with
!         Pre    => (if Count > Max_Length then Drop /= Error),
!         Post   => Length (Source) = Natural'Min (Max_Length, Count),
!         Global => null;
  
        ------------------------------------
        -- String Constructor Subprograms --
--- 2359,2420 ----
           Pad    : Character  := Space;
           Drop   : Truncation := Error)
        with
!         Pre            => (if Count > Max_Length then Drop /= Error),
!         Contract_Cases =>
!           (Count < Length (Source)
!            =>
!              --  Source is cut
! 
!              (if Count > 0 then
!                 To_String (Source) =
!                   Slice (Source'Old,
!                     Length (Source'Old) - Count + 1, Length (Source'Old))
!               else Length (Source) = 0),
! 
!            Count >= Length (Source) and then Count < Max_Length
!            =>
!              --  Source is preceded by Pad characters
! 
!              Length (Source) = Count
!                and then
!                  Slice (Source, 1, Count - Length (Source'Old)) =
!                    [1 .. Count - Length (Source'Old) => Pad]
!                and then
!                  Slice (Source, Count - Length (Source'Old) + 1, Count) =
!                    To_String (Source'Old),
! 
!            Count >= Max_Length and then Drop = Left
!            =>
!              --  Source is preceded by Pad characters
! 
!              Length (Source) = Max_Length
!                and then
!                  Slice (Source, 1, Max_Length - Length (Source'Old)) =
!                    [1 .. Max_Length - Length (Source'Old) => Pad]
!                and then
!                  (if Length (Source'Old) > 0 then
!                     Slice (Source,
!                       Max_Length - Length (Source'Old) + 1, Max_Length) =
!                         To_String (Source'Old)),
! 
!            Count - Length (Source) >= Max_Length and then Drop /= Left
!            =>
!              --  Source is fully dropped at the right
! 
!              To_String (Source) = [1 .. Max_Length => Pad],
! 
!            others
!            =>
!              --  Source is partly dropped at the right
! 
!              Length (Source) = Max_Length
!                and then
!                  Slice (Source, 1, Count - Length (Source'Old)) =
!                    [1 .. Count - Length (Source'Old) => Pad]
!                and then
!                  Slice (Source, Count - Length (Source'Old) + 1, Max_Length) =
!                    Slice (Source'Old,
!                      1, Max_Length - Count + Length (Source'Old)));
  
        ------------------------------------
        -- String Constructor Subprograms --
*************** package Ada.Strings.Bounded is
*** 762,825 ****
          (Left  : Natural;
           Right : Character) return Bounded_String
        with
!         Pre    => Left <= Max_Length,
!         Post   => Length ("*"'Result) = Left,
!         Global => null;
  
        function "*"
          (Left  : Natural;
           Right : String) return Bounded_String
        with
!         Pre    => (if Left /= 0 then Right'Length <= Max_Length / Left),
!         Post   => Length ("*"'Result) = Left * Right'Length,
!         Global => null;
  
        function "*"
          (Left  : Natural;
           Right : Bounded_String) return Bounded_String
        with
!         Pre    => (if Left /= 0 then Length (Right) <= Max_Length / Left),
!         Post   => Length ("*"'Result) = Left * Length (Right),
!         Global => null;
  
        function Replicate
          (Count : Natural;
           Item  : Character;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre    => (if Count > Max_Length then Drop /= Error),
!         Post   =>
!           Length (Replicate'Result)
!         = Natural'Min (Max_Length, Count),
!         Global => null;
  
        function Replicate
          (Count : Natural;
           Item  : String;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre    =>
!           (if Item'Length /= 0
!              and then Count > Max_Length / Item'Length
             then Drop /= Error),
!         Post   =>
!           Length (Replicate'Result)
!         = Natural'Min (Max_Length, Count * Item'Length),
!         Global => null;
  
        function Replicate
          (Count : Natural;
           Item  : Bounded_String;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre    =>
!           (if Length (Item) /= 0
!              and then Count > Max_Length / Length (Item)
             then Drop /= Error),
!         Post   =>
!           Length (Replicate'Result)
!         = Natural'Min (Max_Length, Count * Length (Item)),
!         Global => null;
  
     private
        --  Most of the implementation is in the separate non generic package
--- 2424,2536 ----
          (Left  : Natural;
           Right : Character) return Bounded_String
        with
!         Pre  => Left <= Max_Length,
!         Post => To_String ("*"'Result) = [1 .. Left => Right];
  
        function "*"
          (Left  : Natural;
           Right : String) return Bounded_String
        with
!         Pre  => (if Left /= 0 then Right'Length <= Max_Length / Left),
!         Post =>
!           Length ("*"'Result) = Left * Right'Length
!             and then
!               (if Right'Length > 0 then
!                  (for all K in 1 .. Left * Right'Length =>
!                     Element ("*"'Result, K) =
!                       Right (Right'First + (K - 1) mod Right'Length)));
  
        function "*"
          (Left  : Natural;
           Right : Bounded_String) return Bounded_String
        with
!         Pre  => (if Left /= 0 then Length (Right) <= Max_Length / Left),
!         Post =>
!           Length ("*"'Result) = Left * Length (Right)
!             and then
!               (if Length (Right) > 0 then
!                  (for all K in 1 .. Left * Length (Right) =>
!                     Element ("*"'Result, K) =
!                       Element (Right, 1 + (K - 1) mod Length (Right))));
  
        function Replicate
          (Count : Natural;
           Item  : Character;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre  => (if Count > Max_Length then Drop /= Error),
!         Post =>
!           To_String (Replicate'Result) =
!             [1 .. Natural'Min (Max_Length, Count) => Item];
  
        function Replicate
          (Count : Natural;
           Item  : String;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre            =>
!           (if Count /= 0 and then Item'Length > Max_Length / Count
             then Drop /= Error),
!         Contract_Cases =>
!           (Count = 0 or else Item'Length <= Max_Length / Count
!            =>
!              Length (Replicate'Result) = Count * Item'Length
!                and then
!                  (if Item'Length > 0 then
!                     (for all K in 1 .. Count * Item'Length =>
!                        Element (Replicate'Result, K) =
!                          Item (Item'First + (K - 1) mod Item'Length))),
!            Count /= 0
!              and then Item'Length > Max_Length / Count
!              and then Drop = Right
!            =>
!              Length (Replicate'Result) = Max_Length
!                and then
!                  (for all K in 1 .. Max_Length =>
!                     Element (Replicate'Result, K) =
!                       Item (Item'First + (K - 1) mod Item'Length)),
!            others  --  Drop = Left
!            =>
!              Length (Replicate'Result) = Max_Length
!                and then
!                  (for all K in 1 .. Max_Length =>
!                     Element (Replicate'Result, K) =
!                       Item (Item'Last - (Max_Length - K) mod Item'Length)));
  
        function Replicate
          (Count : Natural;
           Item  : Bounded_String;
           Drop  : Truncation := Error) return Bounded_String
        with
!         Pre            =>
!           (if Count /= 0 and then Length (Item) > Max_Length / Count
             then Drop /= Error),
!         Contract_Cases =>
!           ((if Count /= 0 then Length (Item) <= Max_Length / Count)
!            =>
!              Length (Replicate'Result) = Count * Length (Item)
!                and then
!                  (if Length (Item) > 0 then
!                     (for all K in 1 .. Count * Length (Item) =>
!                        Element (Replicate'Result, K) =
!                          Element (Item, 1 + (K - 1) mod Length (Item)))),
!            Count /= 0
!              and then Length (Item) > Max_Length / Count
!              and then Drop = Right
!            =>
!              Length (Replicate'Result) = Max_Length
!                and then
!                  (for all K in 1 .. Max_Length =>
!                     Element (Replicate'Result, K) =
!                       Element (Item, 1 + (K - 1) mod Length (Item))),
!            others  --  Drop = Left
!            =>
!              Length (Replicate'Result) = Max_Length
!                and then
!                  (for all K in 1 .. Max_Length =>
!                     Element (Replicate'Result, K) =
!                       Element (Item,
!                         Length (Item) - (Max_Length - K) mod Length (Item))));
  
     private
        --  Most of the implementation is in the separate non generic package
*************** package Ada.Strings.Bounded is
*** 843,849 ****
        --  the generic instantiation is compatible with the Super_String
        --  type declared in the Superbounded package.
  
!       function From_String (Source : String) return Bounded_String;
        --  Private routine used only by Stream_Convert
  
        pragma Stream_Convert (Bounded_String, From_String, To_String);
--- 2554,2561 ----
        --  the generic instantiation is compatible with the Super_String
        --  type declared in the Superbounded package.
  
!       function From_String (Source : String) return Bounded_String
!       with Pre => Source'Length <= Max_Length;
        --  Private routine used only by Stream_Convert
  
        pragma Stream_Convert (Bounded_String, From_String, To_String);
*************** package Ada.Strings.Bounded is
*** 853,859 ****
                                (Max_Length     => Max_Length,
                                 Current_Length => 0,
                                 Data           =>
!                                  (1 .. Max_Length => ASCII.NUL));
  
        pragma Inline (To_Bounded_String);
  
--- 2565,2571 ----
                                (Max_Length     => Max_Length,
                                 Current_Length => 0,
                                 Data           =>
!                                  [1 .. Max_Length => ASCII.NUL]);
  
        pragma Inline (To_Bounded_String);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stream.adb gcc-12.1.0/gcc/ada/libgnat/a-stream.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stream.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stream.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2013-2020, Free Software Foundation, Inc.      --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2013-2022, Free Software Foundation, Inc.      --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stream.ads gcc-12.1.0/gcc/ada/libgnat/a-stream.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stream.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stream.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strfix.adb gcc-12.1.0/gcc/ada/libgnat/a-strfix.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-strfix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strfix.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 38,47 ****
  --  bounds of function return results were also fixed, and use of & removed for
  --  efficiency reasons.
  
  with Ada.Strings.Maps; use Ada.Strings.Maps;
- with Ada.Strings.Search;
  
! package body Ada.Strings.Fixed is
  
     ------------------------
     -- Search Subprograms --
--- 38,54 ----
  --  bounds of function return results were also fixed, and use of & removed for
  --  efficiency reasons.
  
+ --  Ghost code, loop invariants and assertions in this unit are meant for
+ --  analysis only, not for run-time checking, as it would be too costly
+ --  otherwise. This is enforced by setting the assertion policy to Ignore.
+ 
+ pragma Assertion_Policy (Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with Ada.Strings.Maps; use Ada.Strings.Maps;
  
! package body Ada.Strings.Fixed with SPARK_Mode is
  
     ------------------------
     -- Search Subprograms --
*************** package body Ada.Strings.Fixed is
*** 145,174 ****
       (Left  : Natural;
        Right : Character) return String
     is
-       Result : String (1 .. Left);
- 
     begin
!       for J in Result'Range loop
!          Result (J) := Right;
!       end loop;
! 
!       return Result;
     end "*";
  
     function "*"
       (Left  : Natural;
        Right : String) return String
     is
!       Result : String (1 .. Left * Right'Length);
!       Ptr    : Integer := 1;
  
     begin
!       for J in 1 .. Left loop
!          Result (Ptr .. Ptr + Right'Length - 1) := Right;
!          Ptr := Ptr + Right'Length;
!       end loop;
  
!       return Result;
     end "*";
  
     ------------
--- 152,251 ----
       (Left  : Natural;
        Right : Character) return String
     is
     begin
!       return Result : String (1 .. Left) with Relaxed_Initialization do
!          for J in Result'Range loop
!             Result (J) := Right;
!             pragma Loop_Invariant
!               (for all K in 1 .. J =>
!                  Result (K)'Initialized and then Result (K) = Right);
!          end loop;
!       end return;
     end "*";
  
     function "*"
       (Left  : Natural;
        Right : String) return String
     is
!       Ptr : Integer := 0;
! 
!       --  Parts of the proof involving manipulations with the modulo operator
!       --  are complicated for the prover and can't be done automatically in
!       --  the global subprogram. That's why we isolate them in these two ghost
!       --  lemmas.
! 
!       procedure Lemma_Mod (K : Integer) with
!         Ghost,
!         Pre =>
!           Right'Length /= 0
!           and then Ptr mod Right'Length = 0
!           and then Ptr in 0 .. Natural'Last - Right'Length
!           and then K in Ptr .. Ptr + Right'Length - 1,
!         Post => K mod Right'Length = K - Ptr;
!       --  Lemma_Mod is applied to an index considered in Lemma_Split to prove
!       --  that it has the right value modulo Right'Length.
! 
!       procedure Lemma_Split (Result : String) with
!         Ghost,
!         Relaxed_Initialization => Result,
!         Pre                    =>
!           Right'Length /= 0
!             and then Result'First = 1
!             and then Result'Last >= 0
!             and then Ptr mod Right'Length = 0
!             and then Ptr in 0 .. Result'Last - Right'Length
!             and then Result (Result'First .. Ptr + Right'Length)'Initialized
!             and then Result (Ptr + 1 .. Ptr + Right'Length) = Right,
!         Post                   =>
!           (for all K in Ptr + 1 .. Ptr + Right'Length =>
!             Result (K) = Right (Right'First + (K - 1) mod Right'Length));
!       --  Lemma_Split is used after Result (Ptr + 1 .. Ptr + Right'Length) is
!       --  updated to Right and concludes that the characters match for each
!       --  index when taken modulo Right'Length, as the considered slice starts
!       --  at index 1 modulo Right'Length.
! 
!       ---------------
!       -- Lemma_Mod --
!       ---------------
! 
!       procedure Lemma_Mod (K : Integer) is null;
! 
!       -----------------
!       -- Lemma_Split --
!       -----------------
! 
!       procedure Lemma_Split (Result : String)
!       is
!       begin
!          for K in Ptr + 1 .. Ptr + Right'Length loop
!             Lemma_Mod (K - 1);
!             pragma Loop_Invariant
!               (for all J in Ptr + 1 .. K =>
!                  Result (J) = Right (Right'First + (J - 1) mod Right'Length));
!          end loop;
!       end Lemma_Split;
! 
!    --  Start of processing for "*"
  
     begin
!       if Right'Length = 0 then
!          return "";
!       end if;
  
!       return Result : String (1 .. Left * Right'Length)
!         with Relaxed_Initialization
!       do
!          for J in 1 .. Left loop
!             Result (Ptr + 1 .. Ptr + Right'Length) := Right;
!             Lemma_Split (Result);
!             Ptr := Ptr + Right'Length;
!             pragma Loop_Invariant (Ptr = J * Right'Length);
!             pragma Loop_Invariant (Result (1 .. Ptr)'Initialized);
!             pragma Loop_Invariant
!               (for all K in 1 .. Ptr =>
!                  Result (K) = Right (Right'First + (K - 1) mod Right'Length));
!          end loop;
!       end return;
     end "*";
  
     ------------
*************** package body Ada.Strings.Fixed is
*** 208,223 ****
  
        else
           declare
!             Front  : constant Integer := From - Source'First;
!             Result : String (1 .. Source'Length - (Through - From + 1));
  
           begin
!             Result (1 .. Front) :=
!               Source (Source'First .. From - 1);
!             Result (Front + 1 .. Result'Last) :=
!               Source (Through + 1 .. Source'Last);
  
!             return Result;
           end;
        end if;
     end Delete;
--- 285,304 ----
  
        else
           declare
!             Front : constant Integer := From - Source'First;
  
           begin
!             return Result : String (1 .. Source'Length - (Through - From + 1))
!               with Relaxed_Initialization
!             do
!                Result (1 .. Front) :=
!                  Source (Source'First .. From - 1);
  
!                if Through < Source'Last then
!                   Result (Front + 1 .. Result'Last) :=
!                     Source (Through + 1 .. Source'Last);
!                end if;
!             end return;
           end;
        end if;
     end Delete;
*************** package body Ada.Strings.Fixed is
*** 248,270 ****
        subtype Result_Type is String (1 .. Count);
  
     begin
!       if Count < Source'Length then
           return
!            Result_Type (Source (Source'First .. Source'First + Count - 1));
  
        else
!          declare
!             Result : Result_Type;
! 
!          begin
              Result (1 .. Source'Length) := Source;
  
              for J in Source'Length + 1 .. Count loop
                 Result (J) := Pad;
              end loop;
! 
!             return Result;
!          end;
        end if;
     end Head;
  
--- 329,349 ----
        subtype Result_Type is String (1 .. Count);
  
     begin
!       if Count <= Source'Length then
           return
!            Result_Type (Source (Source'First .. Source'First + (Count - 1)));
  
        else
!          return Result : Result_Type with Relaxed_Initialization do
              Result (1 .. Source'Length) := Source;
  
              for J in Source'Length + 1 .. Count loop
                 Result (J) := Pad;
+                pragma Loop_Invariant
+                  (for all K in Source'Length + 1 .. J =>
+                     Result (K)'Initialized and then Result (K) = Pad);
              end loop;
!          end return;
        end if;
     end Head;
  
*************** package body Ada.Strings.Fixed is
*** 291,312 ****
        Before   : Positive;
        New_Item : String) return String
     is
!       Result : String (1 .. Source'Length + New_Item'Length);
!       Front  : constant Integer := Before - Source'First;
  
     begin
!       if Before not in Source'First .. Source'Last + 1 then
           raise Index_Error;
        end if;
  
!       Result (1 .. Front) :=
!         Source (Source'First .. Before - 1);
!       Result (Front + 1 .. Front + New_Item'Length) :=
!         New_Item;
!       Result (Front + New_Item'Length + 1 .. Result'Last) :=
!         Source (Before .. Source'Last);
  
!       return Result;
     end Insert;
  
     procedure Insert
--- 370,408 ----
        Before   : Positive;
        New_Item : String) return String
     is
!       Front : constant Integer := Before - Source'First;
  
     begin
!       if Before - 1 not in Source'First - 1 .. Source'Last then
           raise Index_Error;
        end if;
  
!       return Result : String (1 .. Source'Length + New_Item'Length)
!         with Relaxed_Initialization
!       do
!          Result (1 .. Front) :=
!            Source (Source'First .. Before - 1);
!          Result (Front + 1 .. Front + New_Item'Length) :=
!            New_Item;
  
!          pragma Assert
!            (Result (1 .. Before - Source'First)
!             = Source (Source'First .. Before - 1));
!          pragma Assert
!            (Result
!               (Before - Source'First + 1
!                .. Before - Source'First + New_Item'Length)
!             = New_Item);
! 
!          if Before <= Source'Last then
!             Result (Front + New_Item'Length + 1 .. Result'Last) :=
!               Source (Before .. Source'Last);
!          end if;
! 
!          pragma Assert
!            (Result (1 .. Before - Source'First)
!             = Source (Source'First .. Before - 1));
!       end return;
     end Insert;
  
     procedure Insert
*************** package body Ada.Strings.Fixed is
*** 331,336 ****
--- 427,433 ----
        Drop    : Truncation := Error;
        Justify : Alignment  := Left;
        Pad     : Character  := Space)
+    with SPARK_Mode => Off
     is
        Sfirst  : constant Integer := Source'First;
        Slast   : constant Integer := Source'Last;
*************** package body Ada.Strings.Fixed is
*** 435,464 ****
     function Overwrite
       (Source   : String;
        Position : Positive;
!       New_Item : String) return String
!    is
     begin
!       if Position not in Source'First .. Source'Last + 1 then
           raise Index_Error;
        end if;
  
        declare
           Result_Length : constant Natural :=
!            Integer'Max
!              (Source'Length,
!               Position - Source'First + New_Item'Length);
! 
!          Result : String (1 .. Result_Length);
!          Front  : constant Integer := Position - Source'First;
  
        begin
!          Result (1 .. Front) :=
!            Source (Source'First .. Position - 1);
!          Result (Front + 1 .. Front + New_Item'Length) :=
!            New_Item;
!          Result (Front + New_Item'Length + 1 .. Result'Length) :=
!            Source (Position + New_Item'Length .. Source'Last);
!          return Result;
        end;
     end Overwrite;
  
--- 532,583 ----
     function Overwrite
       (Source   : String;
        Position : Positive;
!       New_Item : String) return String is
     begin
!       if Position - 1 not in Source'First - 1 .. Source'Last then
           raise Index_Error;
        end if;
  
        declare
           Result_Length : constant Natural :=
!            Integer'Max (Source'Length,
!                         Position - Source'First + New_Item'Length);
!          Front         : constant Integer := Position - Source'First;
  
        begin
!          return Result : String (1 .. Result_Length)
!            with Relaxed_Initialization
!          do
!             Result (1 .. Front) := Source (Source'First .. Position - 1);
!             pragma Assert
!               (Result (1 .. Position - Source'First)
!                = Source (Source'First .. Position - 1));
!             Result (Front + 1 .. Front + New_Item'Length) := New_Item;
!             pragma Assert
!               (Result
!                  (Position - Source'First + 1
!                   .. Position - Source'First + New_Item'Length)
!                = New_Item);
! 
!             if Position <= Source'Last - New_Item'Length then
!                Result (Front + New_Item'Length + 1 .. Result'Last) :=
!                  Source (Position + New_Item'Length .. Source'Last);
! 
!                pragma Assert
!                  (Result
!                     (Position - Source'First + New_Item'Length + 1
!                      .. Result'Last)
!                   = Source (Position + New_Item'Length .. Source'Last));
!             end if;
! 
!             pragma Assert
!               (if Position <= Source'Last - New_Item'Length
!                then
!                   Result
!                     (Position - Source'First + New_Item'Length + 1
!                      .. Result'Last)
!                   = Source (Position + New_Item'Length .. Source'Last));
!          end return;
        end;
     end Overwrite;
  
*************** package body Ada.Strings.Fixed is
*** 482,491 ****
       (Source : String;
        Low    : Positive;
        High   : Natural;
!       By     : String) return String
!    is
     begin
!       if Low > Source'Last + 1 or else High < Source'First - 1 then
           raise Index_Error;
        end if;
  
--- 601,609 ----
       (Source : String;
        Low    : Positive;
        High   : Natural;
!       By     : String) return String is
     begin
!       if Low - 1 > Source'Last or else High < Source'First - 1 then
           raise Index_Error;
        end if;
  
*************** package body Ada.Strings.Fixed is
*** 495,518 ****
                Integer'Max (0, Low - Source'First);
              --  Length of prefix of Source copied to result
  
!             Back_Len : constant Integer :=
!               Integer'Max (0, Source'Last - High);
              --  Length of suffix of Source copied to result
  
              Result_Length : constant Integer :=
                Front_Len + By'Length + Back_Len;
              --  Length of result
  
-             Result : String (1 .. Result_Length);
- 
           begin
!             Result (1 .. Front_Len) := Source (Source'First .. Low - 1);
!             Result (Front_Len + 1 .. Front_Len + By'Length) := By;
!             Result (Front_Len + By'Length + 1 .. Result'Length) :=
!               Source (High + 1 .. Source'Last);
!             return Result;
!          end;
  
        else
           return Insert (Source, Before => Low, New_Item => By);
        end if;
--- 613,656 ----
                Integer'Max (0, Low - Source'First);
              --  Length of prefix of Source copied to result
  
!             Back_Len : constant Integer := Integer'Max (0, Source'Last - High);
              --  Length of suffix of Source copied to result
  
              Result_Length : constant Integer :=
                Front_Len + By'Length + Back_Len;
              --  Length of result
  
           begin
!             return Result : String (1 .. Result_Length)
!               with Relaxed_Initialization do
!                Result (1 .. Front_Len) := Source (Source'First .. Low - 1);
!                pragma Assert
!                  (Result (1 .. Integer'Max (0, Low - Source'First))
!                   = Source (Source'First .. Low - 1));
!                Result (Front_Len + 1 .. Front_Len + By'Length) := By;
  
+                if High < Source'Last then
+                   Result (Front_Len + By'Length + 1 .. Result'Last) :=
+                     Source (High + 1 .. Source'Last);
+                end if;
+ 
+                pragma Assert
+                  (Result (1 .. Integer'Max (0, Low - Source'First))
+                   = Source (Source'First .. Low - 1));
+                pragma Assert
+                  (Result
+                     (Integer'Max (0, Low - Source'First) + 1
+                      .. Integer'Max (0, Low - Source'First) + By'Length)
+                   = By);
+                pragma Assert
+                  (if High < Source'Last
+                   then
+                      Result
+                     (Integer'Max (0, Low - Source'First) + By'Length + 1
+                      .. Result'Last)
+                   = Source (High + 1 .. Source'Last));
+             end return;
+          end;
        else
           return Insert (Source, Before => Low, New_Item => By);
        end if;
*************** package body Ada.Strings.Fixed is
*** 543,565 ****
        subtype Result_Type is String (1 .. Count);
  
     begin
!       if Count < Source'Length then
           return Result_Type (Source (Source'Last - Count + 1 .. Source'Last));
  
        --  Pad on left
  
        else
!          declare
!             Result : Result_Type;
! 
!          begin
              for J in 1 .. Count - Source'Length loop
                 Result (J) := Pad;
              end loop;
  
!             Result (Count - Source'Length + 1 .. Count) := Source;
!             return Result;
!          end;
        end if;
     end Tail;
  
--- 681,707 ----
        subtype Result_Type is String (1 .. Count);
  
     begin
!       if Count = 0 then
!          return "";
! 
!       elsif Count < Source'Length then
           return Result_Type (Source (Source'Last - Count + 1 .. Source'Last));
  
        --  Pad on left
  
        else
!          return Result : Result_Type with Relaxed_Initialization do
              for J in 1 .. Count - Source'Length loop
                 Result (J) := Pad;
+                pragma Loop_Invariant
+                  (for all K in 1 .. J =>
+                     Result (K)'Initialized and then Result (K) = Pad);
              end loop;
  
!             if Source'Length /= 0 then
!                Result (Count - Source'Length + 1 .. Count) := Source;
!             end if;
!          end return;
        end if;
     end Tail;
  
*************** package body Ada.Strings.Fixed is
*** 585,598 ****
       (Source  : String;
        Mapping : Maps.Character_Mapping) return String
     is
-       Result : String (1 .. Source'Length);
- 
     begin
!       for J in Source'Range loop
!          Result (J - (Source'First - 1)) := Value (Mapping, Source (J));
!       end loop;
! 
!       return Result;
     end Translate;
  
     procedure Translate
--- 727,747 ----
       (Source  : String;
        Mapping : Maps.Character_Mapping) return String
     is
     begin
!       return Result : String (1 .. Source'Length)
!         with Relaxed_Initialization
!       do
!          for J in Source'Range loop
!             Result (J - (Source'First - 1)) := Value (Mapping, Source (J));
!             pragma Loop_Invariant
!               (for all K in Source'First .. J =>
!                  Result (K - (Source'First - 1))'Initialized);
!             pragma Loop_Invariant
!               (for all K in Source'First .. J =>
!                  Result (K - (Source'First - 1)) =
!                    Value (Mapping, Source (K)));
!          end loop;
!       end return;
     end Translate;
  
     procedure Translate
*************** package body Ada.Strings.Fixed is
*** 602,607 ****
--- 751,759 ----
     begin
        for J in Source'Range loop
           Source (J) := Value (Mapping, Source (J));
+          pragma Loop_Invariant
+            (for all K in Source'First .. J =>
+               Source (K) = Value (Mapping, Source'Loop_Entry (K)));
        end loop;
     end Translate;
  
*************** package body Ada.Strings.Fixed is
*** 609,623 ****
       (Source  : String;
        Mapping : Maps.Character_Mapping_Function) return String
     is
-       Result : String (1 .. Source'Length);
        pragma Unsuppress (Access_Check);
- 
     begin
!       for J in Source'Range loop
!          Result (J - (Source'First - 1)) := Mapping.all (Source (J));
!       end loop;
! 
!       return Result;
     end Translate;
  
     procedure Translate
--- 761,781 ----
       (Source  : String;
        Mapping : Maps.Character_Mapping_Function) return String
     is
        pragma Unsuppress (Access_Check);
     begin
!       return Result : String (1 .. Source'Length)
!         with Relaxed_Initialization
!       do
!          for J in Source'Range loop
!             Result (J - (Source'First - 1)) := Mapping.all (Source (J));
!             pragma Loop_Invariant
!               (for all K in Source'First .. J =>
!                  Result (K - (Source'First - 1))'Initialized);
!             pragma Loop_Invariant
!               (for all K in Source'First .. J =>
!                  Result (K - (Source'First - 1)) = Mapping (Source (K)));
!          end loop;
!       end return;
     end Translate;
  
     procedure Translate
*************** package body Ada.Strings.Fixed is
*** 628,633 ****
--- 786,794 ----
     begin
        for J in Source'Range loop
           Source (J) := Mapping.all (Source (J));
+          pragma Loop_Invariant
+            (for all K in Source'First .. J =>
+               Source (K) = Mapping (Source'Loop_Entry (K)));
        end loop;
     end Translate;
  
*************** package body Ada.Strings.Fixed is
*** 639,644 ****
--- 800,808 ----
       (Source : String;
        Side   : Trim_End) return String
     is
+       Empty_String : constant String (1 .. 0) := "";
+       --  Without declaring the empty string as a separate string starting
+       --  at 1, SPARK provers have trouble proving the postcondition.
     begin
        case Side is
           when Strings.Left =>
*************** package body Ada.Strings.Fixed is
*** 648,654 ****
                 --  All blanks case
  
                 if Low = 0 then
!                   return "";
                 end if;
  
                 declare
--- 812,818 ----
                 --  All blanks case
  
                 if Low = 0 then
!                   return Empty_String;
                 end if;
  
                 declare
*************** package body Ada.Strings.Fixed is
*** 665,671 ****
                 --  All blanks case
  
                 if High = 0 then
!                   return "";
                 end if;
  
                 declare
--- 829,835 ----
                 --  All blanks case
  
                 if High = 0 then
!                   return Empty_String;
                 end if;
  
                 declare
*************** package body Ada.Strings.Fixed is
*** 682,688 ****
                 --  All blanks case
  
                 if Low = 0 then
!                   return "";
                 end if;
  
                 declare
--- 846,852 ----
                 --  All blanks case
  
                 if Low = 0 then
!                   return Empty_String;
                 end if;
  
                 declare
*************** package body Ada.Strings.Fixed is
*** 717,723 ****
        High, Low : Integer;
  
     begin
!       Low := Index (Source, Set => Left, Test  => Outside, Going => Forward);
  
        --  Case where source comprises only characters in Left
  
--- 881,887 ----
        High, Low : Integer;
  
     begin
!       Low := Index (Source, Set => Left, Test => Outside, Going => Forward);
  
        --  Case where source comprises only characters in Left
  
*************** package body Ada.Strings.Fixed is
*** 725,732 ****
           return "";
        end if;
  
!       High :=
!         Index (Source, Set => Right, Test  => Outside, Going => Backward);
  
        --  Case where source comprises only characters in Right
  
--- 889,895 ----
           return "";
        end if;
  
!       High := Index (Source, Set => Right, Test => Outside, Going => Backward);
  
        --  Case where source comprises only characters in Right
  
*************** package body Ada.Strings.Fixed is
*** 735,741 ****
        end if;
  
        declare
!          subtype Result_Type is String (1 .. High - Low + 1);
  
        begin
           return Result_Type (Source (Low .. High));
--- 898,905 ----
        end if;
  
        declare
!          Result_Length : constant Integer := High - Low + 1;
!          subtype Result_Type is String (1 .. Result_Length);
  
        begin
           return Result_Type (Source (Low .. High));
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strfix.ads gcc-12.1.0/gcc/ada/libgnat/a-strfix.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-strfix.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strfix.ads	Fri May  6 07:30:56 2022
***************
*** 13,26 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- --  Preconditions in this unit are meant for analysis only, not for run-time
- --  checking, so that the expected exceptions are raised. This is enforced by
- --  setting the corresponding assertion policy to Ignore.
- 
- pragma Assertion_Policy (Pre => Ignore);
- 
- with Ada.Strings.Maps;
- 
  --  The language-defined package Strings.Fixed provides string-handling
  --  subprograms for fixed-length strings; that is, for values of type
  --  Standard.String. Several of these subprograms are procedures that modify
--- 13,18 ----
*************** with Ada.Strings.Maps;
*** 40,45 ****
--- 32,51 ----
  --  these effects. Similar control is provided by the string transformation
  --  procedures.
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
+ with Ada.Strings.Maps; use type Ada.Strings.Maps.Character_Mapping_Function;
+ with Ada.Strings.Search;
+ 
  package Ada.Strings.Fixed with SPARK_Mode is
     pragma Preelaborate;
  
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 108,163 ****
        Going   : Direction := Forward;
        Mapping : Maps.Character_Mapping_Function) return Natural
     with
!      Pre            =>
!        Pattern'Length /= 0
!          and then (if Source'Length /= 0 then From in Source'Range),
  
       Post           => Index'Result in 0 | Source'Range,
       Contract_Cases =>
  
!         --  If no slice in the considered range of Source matches Pattern,
!         --  then 0 is returned.
  
!        ((for all J in Source'Range =>
!            (if (if Going = Forward
!                 then J in From .. Source'Last - Pattern'Length + 1
!                 else J <= From - Pattern'Length + 1)
!             then Translate (Source (J .. J - 1 + Pattern'Length), Mapping)
!                  /= Pattern))
          =>
            Index'Result = 0,
  
!         --  Otherwise, a valid index is returned
  
!         others
          =>
- 
            --  The result is in the considered range of Source
  
!           (if Going = Forward
!            then Index'Result in From .. Source'Last - Pattern'Length + 1
!            else Index'Result in Source'First .. From - Pattern'Length + 1)
  
              --  The slice beginning at the returned index matches Pattern
  
              and then
!               Translate (Source (Index'Result
!                                  .. Index'Result - 1 + Pattern'Length),
!                          Mapping)
!               = Pattern
  
!             --  The result is the smallest or largest index which satisfies the
!             --  matching, respectively when Going = Forward and
!             --  Going = Backwards.
  
              and then
                (for all J in Source'Range =>
                   (if (if Going = Forward
                        then J in From .. Index'Result - 1
!                       else J - 1 in Index'Result .. From - Pattern'Length)
!                   then Translate (Source (J .. J - 1 + Pattern'Length),
!                                   Mapping)
!                        /= Pattern))),
       Global         => null;
     pragma Ada_05 (Index);
  
--- 114,173 ----
        Going   : Direction := Forward;
        Mapping : Maps.Character_Mapping_Function) return Natural
     with
!      Pre            => Pattern'Length > 0
!        and then Mapping /= null
!        and then (if Source'Length > 0 then From in Source'Range),
  
       Post           => Index'Result in 0 | Source'Range,
       Contract_Cases =>
  
!        --  If Source is the empty string, then 0 is returned
  
!        (Source'Length = 0
          =>
            Index'Result = 0,
  
!         --  If some slice of Source matches Pattern, then a valid index is
!         --  returned.
  
!         Source'Length > 0
!           and then
!             (for some J in
!               (if Going = Forward then From else Source'First)
!                .. (if Going = Forward then Source'Last else From)
!                 - (Pattern'Length - 1) =>
!               Ada.Strings.Search.Match (Source, Pattern, Mapping, J))
          =>
            --  The result is in the considered range of Source
  
!           Index'Result in
!             (if Going = Forward then From else Source'First)
!             .. (if Going = Forward then Source'Last else From)
!              - (Pattern'Length - 1)
  
              --  The slice beginning at the returned index matches Pattern
  
              and then
!               Ada.Strings.Search.Match (Source, Pattern, Mapping, Index'Result)
  
!             --  The result is the smallest or largest index which satisfies
!             --  the matching, respectively when Going = Forward and Going =
!             --  Backward.
  
              and then
                (for all J in Source'Range =>
                   (if (if Going = Forward
                        then J in From .. Index'Result - 1
!                       else J - 1 in Index'Result
!                                     .. From - Pattern'Length)
!                   then not (Ada.Strings.Search.Match
!                               (Source, Pattern, Mapping, J)))),
! 
!         --  Otherwise, 0 is returned
! 
!         others
!         =>
!           Index'Result = 0),
       Global         => null;
     pragma Ada_05 (Index);
  
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 168,223 ****
        Going   : Direction := Forward;
        Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     with
!      Pre            =>
!        Pattern'Length /= 0
!          and then (if Source'Length /= 0 then From in Source'Range),
  
       Post           => Index'Result in 0 | Source'Range,
       Contract_Cases =>
  
!         --  If no slice in the considered range of Source matches Pattern,
!         --  then 0 is returned.
  
!        ((for all J in Source'Range =>
!            (if (if Going = Forward
!                 then J in From .. Source'Last - Pattern'Length + 1
!                 else J <= From - Pattern'Length + 1)
!             then Translate (Source (J .. J - 1 + Pattern'Length), Mapping)
!                  /= Pattern))
          =>
            Index'Result = 0,
  
!         --  Otherwise, a valid index is returned
  
!         others
          =>
- 
            --  The result is in the considered range of Source
  
!           (if Going = Forward
!            then Index'Result in From .. Source'Last - Pattern'Length + 1
!            else Index'Result in Source'First .. From - Pattern'Length + 1)
  
!             --  The slice beginning at the returned index matches Pattern
  
!             and then
!               Translate (Source (Index'Result
!                                  .. Index'Result - 1 + Pattern'Length),
!                          Mapping)
!               = Pattern
  
              --  The result is the smallest or largest index which satisfies the
              --  matching, respectively when Going = Forward and
!             --  Going = Backwards.
  
              and then
                (for all J in Source'Range =>
                   (if (if Going = Forward
                        then J in From .. Index'Result - 1
!                       else J - 1 in Index'Result .. From - Pattern'Length)
!                   then Translate (Source (J .. J - 1 + Pattern'Length),
!                                   Mapping)
!                        /= Pattern))),
       Global         => null;
     pragma Ada_05 (Index);
  
--- 178,236 ----
        Going   : Direction := Forward;
        Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     with
!      Pre            => Pattern'Length > 0
!        and then (if Source'Length > 0 then From in Source'Range),
  
       Post           => Index'Result in 0 | Source'Range,
       Contract_Cases =>
  
!        --  If Source is the empty string, then 0 is returned
  
!        (Source'Length = 0
          =>
            Index'Result = 0,
  
!         --  If some slice of Source matches Pattern, then a valid index is
!         --  returned.
  
!         Source'Length > 0
!           and then
!             (for some J in
!               (if Going = Forward then From else Source'First)
!               .. (if Going = Forward then Source'Last else From)
!                - (Pattern'Length - 1) =>
!               Ada.Strings.Search.Match (Source, Pattern, Mapping, J))
          =>
            --  The result is in the considered range of Source
  
!           Index'Result in
!             (if Going = Forward then From else Source'First)
!             .. (if Going = Forward then Source'Last else From)
!              - (Pattern'Length - 1)
  
!           --  The slice beginning at the returned index matches Pattern
  
!           and then
!             Ada.Strings.Search.Match (Source, Pattern, Mapping, Index'Result)
  
              --  The result is the smallest or largest index which satisfies the
              --  matching, respectively when Going = Forward and
!             --  Going = Backward.
  
              and then
                (for all J in Source'Range =>
                   (if (if Going = Forward
                        then J in From .. Index'Result - 1
!                       else J - 1 in Index'Result
!                                     .. From - Pattern'Length)
!                   then not (Ada.Strings.Search.Match
!                               (Source, Pattern, Mapping, J)))),
! 
!         --  Otherwise, 0 is returned
! 
!         others
!         =>
!           Index'Result = 0),
       Global         => null;
     pragma Ada_05 (Index);
  
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 245,281 ****
       Post           => Index'Result in 0 | Source'Range,
       Contract_Cases =>
  
!         --  If Source is empty, or if no slice of Source matches Pattern, then
!         --  0 is returned.
  
         (Source'Length = 0
-           or else
-             (for all J in Source'First .. Source'Last - Pattern'Length + 1 =>
-                Translate (Source (J .. J - 1 + Pattern'Length), Mapping)
-                /= Pattern)
          =>
            Index'Result = 0,
  
!         --  Otherwise, a valid index is returned
  
!         others
          =>
- 
            --  The result is in the considered range of Source
  
!           Index'Result in Source'First .. Source'Last - Pattern'Length + 1
  
              --  The slice beginning at the returned index matches Pattern
  
              and then
!               Translate (Source (Index'Result
!                                  .. Index'Result - 1 + Pattern'Length),
!                          Mapping)
!               = Pattern
  
!             --  The result is the smallest or largest index which satisfies the
!             --  matching, respectively when Going = Forward and
!             --  Going = Backwards.
  
              and then
                (for all J in Source'Range =>
--- 258,290 ----
       Post           => Index'Result in 0 | Source'Range,
       Contract_Cases =>
  
!        --  If Source is the empty string, then 0 is returned
  
         (Source'Length = 0
          =>
            Index'Result = 0,
  
!         --  If some slice of Source matches Pattern, then a valid index is
!         --  returned.
  
!         Source'Length > 0
!           and then
!             (for some J in
!               Source'First .. Source'Last - (Pattern'Length - 1) =>
!                 Ada.Strings.Search.Match (Source, Pattern, Mapping, J))
          =>
            --  The result is in the considered range of Source
  
!           Index'Result in Source'First .. Source'Last - (Pattern'Length - 1)
  
              --  The slice beginning at the returned index matches Pattern
  
              and then
!               Ada.Strings.Search.Match (Source, Pattern, Mapping, Index'Result)
  
!             --  The result is the smallest or largest index which satisfies
!             --  the matching, respectively when Going = Forward and Going =
!             --  Backward.
  
              and then
                (for all J in Source'Range =>
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 283,291 ****
                        then J <= Index'Result - 1
                        else J - 1 in Index'Result
                                      .. Source'Last - Pattern'Length)
!                   then Translate (Source (J .. J - 1 + Pattern'Length),
!                                   Mapping)
!                        /= Pattern))),
       Global         => null;
  
     function Index
--- 292,305 ----
                        then J <= Index'Result - 1
                        else J - 1 in Index'Result
                                      .. Source'Last - Pattern'Length)
!                   then not (Ada.Strings.Search.Match
!                               (Source, Pattern, Mapping, J)))),
! 
!         --  Otherwise, 0 is returned
! 
!         others
!         =>
!           Index'Result = 0),
       Global         => null;
  
     function Index
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 294,335 ****
        Going   : Direction := Forward;
        Mapping : Maps.Character_Mapping_Function) return Natural
     with
!      Pre            => Pattern'Length > 0,
  
       Post           => Index'Result in 0 | Source'Range,
       Contract_Cases =>
  
!         --  If Source is empty, or if no slice of Source matches Pattern, then
!         --  0 is returned.
  
         (Source'Length = 0
-           or else
-             (for all J in Source'First .. Source'Last - Pattern'Length + 1 =>
-                Translate (Source (J .. J - 1 + Pattern'Length), Mapping)
-                /= Pattern)
          =>
            Index'Result = 0,
  
!         --  Otherwise, a valid index is returned
  
!         others
          =>
- 
            --  The result is in the considered range of Source
  
!           Index'Result in Source'First .. Source'Last - Pattern'Length + 1
  
!             --  The slice beginning at the returned index matches Pattern
  
!             and then
!               Translate (Source (Index'Result
!                                  .. Index'Result - 1 + Pattern'Length),
!                          Mapping)
!               = Pattern
  
!             --  The result is the smallest or largest index which satisfies the
!             --  matching, respectively when Going = Forward and
!             --  Going = Backwards.
  
              and then
                (for all J in Source'Range =>
--- 308,345 ----
        Going   : Direction := Forward;
        Mapping : Maps.Character_Mapping_Function) return Natural
     with
!      Pre            => Pattern'Length > 0 and then Mapping /= null,
  
       Post           => Index'Result in 0 | Source'Range,
       Contract_Cases =>
  
!        --  If Source is the empty string, then 0 is returned
  
         (Source'Length = 0
          =>
            Index'Result = 0,
  
!         --  If some slice of Source matches Pattern, then a valid index is
!         --  returned.
  
!         Source'Length > 0
!           and then
!             (for some J in
!               Source'First .. Source'Last - (Pattern'Length - 1) =>
!                 Ada.Strings.Search.Match (Source, Pattern, Mapping, J))
          =>
            --  The result is in the considered range of Source
  
!           Index'Result in Source'First .. Source'Last - (Pattern'Length - 1)
  
!           --  The slice beginning at the returned index matches Pattern
  
!           and then
!             Ada.Strings.Search.Match (Source, Pattern, Mapping, Index'Result)
  
!             --  The result is the smallest or largest index which satisfies
!             --  the matching, respectively when Going = Forward and Going =
!             --  Backward.
  
              and then
                (for all J in Source'Range =>
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 337,345 ****
                        then J <= Index'Result - 1
                        else J - 1 in Index'Result
                                      .. Source'Last - Pattern'Length)
!                   then Translate (Source (J .. J - 1 + Pattern'Length),
!                                   Mapping)
!                        /= Pattern))),
       Global         => null;
  
     --  If Going = Forward, returns:
--- 347,360 ----
                        then J <= Index'Result - 1
                        else J - 1 in Index'Result
                                      .. Source'Last - Pattern'Length)
!                   then not (Ada.Strings.Search.Match
!                               (Source, Pattern, Mapping, J)))),
! 
!         --  Otherwise, 0 is returned
! 
!         others
!         =>
!           Index'Result = 0),
       Global         => null;
  
     --  If Going = Forward, returns:
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 367,373 ****
          =>
            Index'Result = 0,
  
!         --  Otherwise, a index in the range of Source is returned
  
          others
          =>
--- 382,388 ----
          =>
            Index'Result = 0,
  
!         --  Otherwise, an index in the range of Source is returned
  
          others
          =>
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 377,391 ****
            Index'Result in Source'Range
  
              --  The character at the returned index satisfies the property
!             --  Test on Set
  
              and then
                (Test = Inside)
                = Ada.Strings.Maps.Is_In (Source (Index'Result), Set)
  
!             --  The result is the smallest or largest index which satisfies the
!             --  property, respectively when Going = Forward and
!             --  Going = Backwards.
  
              and then
                (for all J in Source'Range =>
--- 392,406 ----
            Index'Result in Source'Range
  
              --  The character at the returned index satisfies the property
!             --  Test on Set.
  
              and then
                (Test = Inside)
                = Ada.Strings.Maps.Is_In (Source (Index'Result), Set)
  
!             --  The result is the smallest or largest index which satisfies
!             --  the property, respectively when Going = Forward and Going =
!             --  Backward.
  
              and then
                (for all J in Source'Range =>
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 402,423 ****
        Test    : Membership := Inside;
        Going   : Direction := Forward) return Natural
     with
!      Pre            => (if Source'Length /= 0 then From in Source'Range),
! 
       Post           => Index'Result in 0 | Source'Range,
       Contract_Cases =>
  
!         --  If no character in the considered slice of Source satisfies the
!         --  property Test on Set, then 0 is returned.
  
!        ((for all I in Source'Range =>
!            (if I = From
!                  or else (I > From) = (Going = Forward)
!             then (Test = Inside) /= Ada.Strings.Maps.Is_In (Source (I), Set)))
          =>
            Index'Result = 0,
  
!         --  Otherwise, an index in the range of Source is returned
  
          others
          =>
--- 417,439 ----
        Test    : Membership := Inside;
        Going   : Direction := Forward) return Natural
     with
!      Pre            => (if Source'Length > 0 then From in Source'Range),
       Post           => Index'Result in 0 | Source'Range,
       Contract_Cases =>
  
!         --  If Source is the empty string, or no character of the considered
!         --  slice of Source satisfies the property Test on Set, then 0 is
!         --  returned.
  
!         (Source'Length = 0
!           or else
!             (for all J in Source'Range =>
!                (if J = From or else (J > From) = (Going = Forward) then
!                   (Test = Inside) /= Ada.Strings.Maps.Is_In (Source (J), Set)))
          =>
            Index'Result = 0,
  
!         --  Otherwise, an index in the considered range of Source is returned
  
          others
          =>
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 426,432 ****
  
            Index'Result in Source'Range
              and then (Index'Result = From
!                         or else (Index'Result > From) = (Going = Forward))
  
              --  The character at the returned index satisfies the property
              --  Test on Set.
--- 442,449 ----
  
            Index'Result in Source'Range
              and then (Index'Result = From
!                        or else
!                          (Index'Result > From) = (Going = Forward))
  
              --  The character at the returned index satisfies the property
              --  Test on Set.
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 435,453 ****
                (Test = Inside)
                = Ada.Strings.Maps.Is_In (Source (Index'Result), Set)
  
!             --  The result is the smallest or largest index which satisfies the
!             --  property, respectively when Going = Forward and
!             --  Going = Backwards.
  
              and then
                (for all J in Source'Range =>
                   (if J /= Index'Result
!                        and then (J < Index'Result) = (Going = Forward)
!                        and then (J = From
!                                    or else (J > From) = (Going = Forward))
!                   then
!                     (Test = Inside)
!                     /= Ada.Strings.Maps.Is_In (Source (J), Set)))),
       Global         => null;
     pragma Ada_05 (Index);
     --  Index searches for the first or last occurrence of any of a set of
--- 452,469 ----
                (Test = Inside)
                = Ada.Strings.Maps.Is_In (Source (Index'Result), Set)
  
!             --  The result is the smallest or largest index which satisfies
!             --  the property, respectively when Going = Forward and Going =
!             --  Backward.
  
              and then
                (for all J in Source'Range =>
                   (if J /= Index'Result
!                     and then (J < Index'Result) = (Going = Forward)
!                     and then (J = From
!                                 or else (J > From) = (Going = Forward))
!                   then (Test = Inside)
!                        /= Ada.Strings.Maps.Is_In (Source (J), Set)))),
       Global         => null;
     pragma Ada_05 (Index);
     --  Index searches for the first or last occurrence of any of a set of
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 469,480 ****
       Post           => Index_Non_Blank'Result in 0 | Source'Range,
       Contract_Cases =>
  
!         --  If all characters in the considered slice of Source are Space
!         --  characters, then 0 is returned.
  
!        ((for all J in Source'Range =>
!            (if J = From or else (J > From) = (Going = Forward)
!             then Source (J) = ' '))
          =>
            Index_Non_Blank'Result = 0,
  
--- 485,498 ----
       Post           => Index_Non_Blank'Result in 0 | Source'Range,
       Contract_Cases =>
  
!         --  If Source is the empty string, or all characters in the considered
!         --  slice of Source are Space characters, then 0 is returned.
  
!         (Source'Length = 0
!           or else
!             (for all J in Source'Range =>
!                (if J = From or else (J > From) = (Going = Forward) then
!                   Source (J) = ' '))
          =>
            Index_Non_Blank'Result = 0,
  
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 496,502 ****
  
              --  The result is the smallest or largest index which is not a
              --  Space character, respectively when Going = Forward and
!             --  Going = Backwards.
  
              and then
                (for all J in Source'Range =>
--- 514,520 ----
  
              --  The result is the smallest or largest index which is not a
              --  Space character, respectively when Going = Forward and
!             --  Going = Backward.
  
              and then
                (for all J in Source'Range =>
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 535,542 ****
              and then Source (Index_Non_Blank'Result) /= ' '
  
              --  The result is the smallest or largest index which is not a
!             --  Space character, respectively when Going = Forward and
!             --  Going = Backwards.
  
              and then
                (for all J in Source'Range =>
--- 553,560 ----
              and then Source (Index_Non_Blank'Result) /= ' '
  
              --  The result is the smallest or largest index which is not a
!             --  Space character, respectively when Going = Forward and Going
!             --  = Backward.
  
              and then
                (for all J in Source'Range =>
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 560,566 ****
        Pattern : String;
        Mapping : Maps.Character_Mapping_Function) return Natural
     with
!      Pre    => Pattern'Length /= 0,
       Global => null;
  
     --  Returns the maximum number of nonoverlapping slices of Source that match
--- 578,584 ----
        Pattern : String;
        Mapping : Maps.Character_Mapping_Function) return Natural
     with
!      Pre    => Pattern'Length /= 0 and then Mapping /= null,
       Global => null;
  
     --  Returns the maximum number of nonoverlapping slices of Source that match
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 646,651 ****
--- 664,670 ----
        First  : out Positive;
        Last   : out Natural)
     with
+      Pre            => Source'First > 0,
       Contract_Cases =>
  
          --  If Source is the empty string, or if no character of Source
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 701,706 ****
--- 720,726 ----
       (Source  : String;
        Mapping : Maps.Character_Mapping_Function) return String
     with
+      Pre    => Mapping /= null,
       Post   =>
  
         --  Lower bound of the returned string is 1
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 751,760 ****
       (Source  : in out String;
        Mapping : Maps.Character_Mapping_Function)
     with
       Post   =>
  
!        --  Each character in Source after the call is the translation of
!        --  the character at the same position before the call, through Mapping.
  
         (for all J in Source'Range => Source (J) = Mapping (Source'Old (J))),
       Global => null;
--- 771,781 ----
       (Source  : in out String;
        Mapping : Maps.Character_Mapping_Function)
     with
+      Pre    => Mapping /= null,
       Post   =>
  
!        --  Each character in Source after the call is the translation of the
!        --  character at the same position before the call, through Mapping.
  
         (for all J in Source'Range => Source (J) = Mapping (Source'Old (J))),
       Global => null;
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 765,772 ****
     with
       Post   =>
  
!        --  Each character in Source after the call is the translation of
!        --  the character at the same position before the call, through Mapping.
  
         (for all J in Source'Range =>
            Source (J) = Ada.Strings.Maps.Value (Mapping, Source'Old (J))),
--- 786,793 ----
     with
       Post   =>
  
!        --  Each character in Source after the call is the translation of the
!        --  character at the same position before the call, through Mapping.
  
         (for all J in Source'Range =>
            Source (J) = Ada.Strings.Maps.Value (Mapping, Source'Old (J))),
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 778,809 ****
     -- String Transformation Subprograms --
     ---------------------------------------
  
-    procedure Replace_Slice
-      (Source  : in out String;
-       Low     : Positive;
-       High    : Natural;
-       By      : String;
-       Drop    : Truncation := Error;
-       Justify : Alignment  := Left;
-       Pad     : Character  := Space)
-    with
-      Pre    =>
- 
-        --  Incomplete contract
- 
-        Low - 1 <= Source'Last
-          and then High >= Source'First - 1,
-      Global => null;
-    --  If Low > Source'Last+1, or High < Source'First - 1, then Index_Error is
-    --  propagated. Otherwise:
-    --
-    --  * If High >= Low, then the returned string comprises
-    --    Source (Source'First .. Low - 1)
-    --    & By & Source(High + 1 .. Source'Last), but with lower bound 1.
-    --
-    --  * If High < Low, then the returned string is
-    --    Insert (Source, Before => Low, New_Item => By).
- 
     function Replace_Slice
       (Source : String;
        Low    : Positive;
--- 799,804 ----
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 834,852 ****
            --  Length of the returned string
  
            Replace_Slice'Result'Length
!           = Natural'Max (0, Low - Source'First)
              + By'Length
!             + Natural'Max (Source'Last - High, 0)
  
              --  Elements starting at Low are replaced by elements of By
  
              and then
!               Replace_Slice'Result (1 .. Natural'Max (0, Low - Source'First))
                = Source (Source'First .. Low - 1)
              and then
                Replace_Slice'Result
!                 (Natural'Max (0, Low - Source'First) + 1
!                  .. Natural'Max (0, Low - Source'First) + By'Length)
                = By
  
              --  When there are remaining characters after the replaced slice,
--- 829,847 ----
            --  Length of the returned string
  
            Replace_Slice'Result'Length
!           = Integer'Max (0, Low - Source'First)
              + By'Length
!             + Integer'Max (Source'Last - High, 0)
  
              --  Elements starting at Low are replaced by elements of By
  
              and then
!               Replace_Slice'Result (1 .. Integer'Max (0, Low - Source'First))
                = Source (Source'First .. Low - 1)
              and then
                Replace_Slice'Result
!                 (Integer'Max (0, Low - Source'First) + 1
!                  .. Integer'Max (0, Low - Source'First) + By'Length)
                = By
  
              --  When there are remaining characters after the replaced slice,
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 856,862 ****
                (if High < Source'Last
                 then
                   Replace_Slice'Result
!                    (Natural'Max (0, Low - Source'First) + By'Length + 1
                      .. Replace_Slice'Result'Last)
                   = Source (High + 1 .. Source'Last)),
  
--- 851,857 ----
                (if High < Source'Last
                 then
                   Replace_Slice'Result
!                    (Integer'Max (0, Low - Source'First) + By'Length + 1
                      .. Replace_Slice'Result'Last)
                   = Source (High + 1 .. Source'Last)),
  
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 890,895 ****
--- 885,922 ----
                     .. Replace_Slice'Result'Last)
                  = Source (Low .. Source'Last))),
       Global         => null;
+    --  If Low > Source'Last + 1, or High < Source'First - 1, then Index_Error
+    --  is propagated. Otherwise:
+    --
+    --  * If High >= Low, then the returned string comprises
+    --    Source (Source'First .. Low - 1)
+    --    & By & Source(High + 1 .. Source'Last), but with lower bound 1.
+    --
+    --  * If High < Low, then the returned string is
+    --    Insert (Source, Before => Low, New_Item => By).
+ 
+    procedure Replace_Slice
+      (Source  : in out String;
+       Low     : Positive;
+       High    : Natural;
+       By      : String;
+       Drop    : Truncation := Error;
+       Justify : Alignment  := Left;
+       Pad     : Character  := Space)
+    with
+      Pre    =>
+        Low - 1 <= Source'Last
+          and then High >= Source'First - 1
+          and then (if High >= Low
+                    then Natural'Max (0, Low - Source'First)
+                         <= Natural'Last
+                            - By'Length
+                            - Natural'Max (Source'Last - High, 0)
+                    else Source'Length <= Natural'Last - By'Length),
+ 
+    --  Incomplete contract
+ 
+      Global => null;
     --  Equivalent to:
     --
     --    Move (Replace_Slice (Source, Low, High, By),
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 929,935 ****
           --  are appended to the returned string.
  
           and then
!            (if Before - 1 < Source'Last
              then
                Insert'Result
                  (Before - Source'First + New_Item'Length + 1
--- 956,962 ----
           --  are appended to the returned string.
  
           and then
!            (if Before <= Source'Last
              then
                Insert'Result
                  (Before - Source'First + New_Item'Length + 1
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 937,943 ****
                = Source (Before .. Source'Last)),
       Global => null;
     --  Propagates Index_Error if Before is not in
!    --  Source'First .. Source'Last+1; otherwise, returns
     --  Source (Source'First .. Before - 1)
     --  & New_Item & Source(Before..Source'Last), but with lower bound 1.
  
--- 964,970 ----
                = Source (Before .. Source'Last)),
       Global => null;
     --  Propagates Index_Error if Before is not in
!    --  Source'First .. Source'Last + 1; otherwise, returns
     --  Source (Source'First .. Before - 1)
     --  & New_Item & Source(Before..Source'Last), but with lower bound 1.
  
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 947,953 ****
        New_Item : String;
        Drop     : Truncation := Error)
     with
!      Pre    => Before - 1 in Source'First - 1 .. Source'Last,
  
       --  Incomplete contract
  
--- 974,982 ----
        New_Item : String;
        Drop     : Truncation := Error)
     with
!      Pre    =>
!        Before - 1 in Source'First - 1 .. Source'Last
!          and then Source'Length <= Natural'Last - New_Item'Length,
  
       --  Incomplete contract
  
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 1014,1020 ****
        New_Item : String;
        Drop     : Truncation := Right)
     with
!      Pre    => Position - 1 in Source'First - 1 .. Source'Last,
  
       --  Incomplete contract
  
--- 1043,1053 ----
        New_Item : String;
        Drop     : Truncation := Right)
     with
!      Pre    =>
!        Position - 1 in Source'First - 1 .. Source'Last
!          and then
!            (if Position - Source'First >= Source'Length - New_Item'Length
!             then Position - Source'First <= Natural'Last - New_Item'Length),
  
       --  Incomplete contract
  
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 1114,1144 ****
              --  Otherwise, the returned string is a slice of Source
  
              else
!               (for some Low in Source'Range =>
!                  (for some High in Source'Range =>
! 
!                     --  Trim returns the slice of Source between Low and High
! 
!                     Trim'Result = Source (Low .. High)
! 
!                       --  Values of Low and High and the characters at their
!                       --  position depend on Side.
! 
!                       and then
!                         (if Side = Left then High = Source'Last
!                          else Source (High) /= ' ')
!                       and then
!                         (if Side = Right then Low = Source'First
!                          else Source (Low) /= ' ')
! 
!                       --  All characters outside range Low .. High are
!                       --  Space characters.
! 
!                       and then
!                         (for all J in Source'Range =>
!                            (if J < Low then Source (J) = ' ')
!                               and then
!                                 (if J > High then Source (J) = ' '))))),
       Global => null;
     --  Returns the string obtained by removing from Source all leading Space
     --  characters (if Side = Left), all trailing Space characters (if
--- 1147,1161 ----
              --  Otherwise, the returned string is a slice of Source
  
              else
!               (declare
!                  Low  : constant Positive :=
!                    (if Side = Right then Source'First
!                     else Index_Non_Blank (Source, Forward));
!                  High : constant Positive :=
!                    (if Side = Left then Source'Last
!                     else Index_Non_Blank (Source, Backward));
!                begin
!                  Trim'Result = Source (Low .. High))),
       Global => null;
     --  Returns the string obtained by removing from Source all leading Space
     --  characters (if Side = Left), all trailing Space characters (if
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 1184,1213 ****
          --  Otherwise, the returned string is a slice of Source
  
          else
!           (for some Low in Source'Range =>
!              (for some High in Source'Range =>
! 
!                 --  Trim returns the slice of Source between Low and High
! 
!                 Trim'Result = Source (Low .. High)
! 
!                   --  Characters at the bounds of the returned string are
!                   --  not contained in Left or Right.
! 
!                   and then not Ada.Strings.Maps.Is_In (Source (Low), Left)
!                   and then not Ada.Strings.Maps.Is_In (Source (High), Right)
! 
!                   --  All characters before Low are contained in Left.
!                   --  All characters after High are contained in Right.
! 
!                   and then
!                     (for all K in Source'Range =>
!                        (if K < Low
!                         then
!                           Ada.Strings.Maps.Is_In (Source (K), Left))
!                             and then
!                               (if K > High then
!                                Ada.Strings.Maps.Is_In (Source (K), Right)))))),
       Global => null;
     --  Returns the string obtained by removing from Source all leading
     --  characters in Left and all trailing characters in Right.
--- 1201,1213 ----
          --  Otherwise, the returned string is a slice of Source
  
          else
!            (declare
!               Low  : constant Positive :=
!                 Index (Source, Left, Outside, Forward);
!               High : constant Positive :=
!                 Index (Source, Right, Outside, Backward);
!             begin
!               Trim'Result = Source (Low .. High))),
       Global => null;
     --  Returns the string obtained by removing from Source all leading
     --  characters in Left and all trailing characters in Right.
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 1258,1264 ****
            Head'Result (1 .. Source'Length) = Source
              and then
                Head'Result (Source'Length + 1 .. Count)
!               = (1 .. Count - Source'Length => Pad)),
       Global         => null;
     --  Returns a string of length Count. If Count <= Source'Length, the string
     --  comprises the first Count characters of Source. Otherwise, its contents
--- 1258,1264 ----
            Head'Result (1 .. Source'Length) = Source
              and then
                Head'Result (Source'Length + 1 .. Count)
!               = [1 .. Count - Source'Length => Pad]),
       Global         => null;
     --  Returns a string of length Count. If Count <= Source'Length, the string
     --  comprises the first Count characters of Source. Otherwise, its contents
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 1315,1324 ****
             --  characters.
  
            (if Source'Length = 0
!            then Tail'Result = (1 .. Count => Pad)
             else
               Tail'Result (1 .. Count - Source'Length)
!              = (1 .. Count - Source'Length => Pad)
                 and then
                   Tail'Result (Count - Source'Length + 1 .. Tail'Result'Last)
                   = Source)),
--- 1315,1324 ----
             --  characters.
  
            (if Source'Length = 0
!            then Tail'Result = [1 .. Count => Pad]
             else
               Tail'Result (1 .. Count - Source'Length)
!              = [1 .. Count - Source'Length => Pad]
                 and then
                   Tail'Result (Count - Source'Length + 1 .. Tail'Result'Last)
                   = Source)),
*************** package Ada.Strings.Fixed with SPARK_Mod
*** 1384,1392 ****
           --  Content of the string is Right concatenated with itself Left times
  
           and then
!            (for all J in 0 .. Left - 1 =>
!               "*"'Result (J * Right'Length + 1 .. (J + 1) * Right'Length)
!               = Right),
       Global => null;
  
     --  These functions replicate a character or string a specified number of
--- 1384,1391 ----
           --  Content of the string is Right concatenated with itself Left times
  
           and then
!            (for all K in "*"'Result'Range =>
!               "*"'Result (K) = Right (Right'First + (K - 1) mod Right'Length)),
       Global => null;
  
     --  These functions replicate a character or string a specified number of
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strhas.adb gcc-12.1.0/gcc/ada/libgnat/a-strhas.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-strhas.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strhas.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strhas.ads gcc-12.1.0/gcc/ada/libgnat/a-strhas.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-strhas.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strhas.ads	Fri May  6 07:30:56 2022
***************
*** 13,20 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Containers;
  
  function Ada.Strings.Hash (Key : String) return Containers.Hash_Type;
--- 13,18 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strmap.adb gcc-12.1.0/gcc/ada/libgnat/a-strmap.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-strmap.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strmap.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 35,41 ****
  --  is bit-by-bit or character-by-character and therefore rather slow.
  --  Generally for character sets we favor the full 32-byte representation.
  
! package body Ada.Strings.Maps is
  
     ---------
     -- "-" --
--- 35,51 ----
  --  is bit-by-bit or character-by-character and therefore rather slow.
  --  Generally for character sets we favor the full 32-byte representation.
  
! --  Assertions, ghost code and loop invariants in this unit are meant for
! --  analysis only, not for run-time checking, as it would be too costly
! --  otherwise. This is enforced by setting the assertion policy to Ignore.
! 
! pragma Assertion_Policy (Assert         => Ignore,
!                          Ghost          => Ignore,
!                          Loop_Invariant => Ignore);
! 
! package body Ada.Strings.Maps
!   with SPARK_Mode
! is
  
     ---------
     -- "-" --
*************** package body Ada.Strings.Maps is
*** 102,110 ****
       (Element : Character;
        Set     : Character_Set) return Boolean
     is
!    begin
!       return Set (Element);
!    end Is_In;
  
     ---------------
     -- Is_Subset --
--- 112,118 ----
       (Element : Character;
        Set     : Character_Set) return Boolean
     is
!       (Set (Element));
  
     ---------------
     -- Is_Subset --
*************** package body Ada.Strings.Maps is
*** 122,139 ****
     -- To_Domain --
     ---------------
  
!    function To_Domain (Map : Character_Mapping) return Character_Sequence
!    is
!       Result : String (1 .. Map'Length);
        J      : Natural;
  
     begin
        J := 0;
        for C in Map'Range loop
           if Map (C) /= C then
              J := J + 1;
              Result (J) := C;
           end if;
        end loop;
  
        return Result (1 .. J);
--- 130,166 ----
     -- To_Domain --
     ---------------
  
!    function To_Domain (Map : Character_Mapping) return Character_Sequence is
!       Result : String (1 .. Map'Length) with Relaxed_Initialization;
        J      : Natural;
  
+       type Character_Index is array (Character) of Natural with Ghost;
+       Indexes : Character_Index := [others => 0] with Ghost;
+ 
     begin
        J := 0;
        for C in Map'Range loop
           if Map (C) /= C then
              J := J + 1;
              Result (J) := C;
+             Indexes (C) := J;
           end if;
+ 
+          pragma Loop_Invariant (if Map = Identity then J = 0);
+          pragma Loop_Invariant (J <= Character'Pos (C) + 1);
+          pragma Loop_Invariant (Result (1 .. J)'Initialized);
+          pragma Loop_Invariant (for all K in 1 .. J => Result (K) <= C);
+          pragma Loop_Invariant
+            (SPARK_Proof_Sorted_Character_Sequence (Result (1 .. J)));
+          pragma Loop_Invariant
+            (for all D in Map'First .. C =>
+               (if Map (D) = D then
+                  Indexes (D) = 0
+                else
+                  Indexes (D) in 1 .. J
+                    and then Result (Indexes (D)) = D));
+          pragma Loop_Invariant
+            (for all Char of Result (1 .. J) => Map (Char) /= Char);
        end loop;
  
        return Result (1 .. J);
*************** package body Ada.Strings.Maps is
*** 146,152 ****
     function To_Mapping
       (From, To : Character_Sequence) return Character_Mapping
     is
!       Result   : Character_Mapping;
        Inserted : Character_Set := Null_Set;
        From_Len : constant Natural := From'Length;
        To_Len   : constant Natural := To'Length;
--- 173,179 ----
     function To_Mapping
       (From, To : Character_Sequence) return Character_Mapping
     is
!       Result   : Character_Mapping with Relaxed_Initialization;
        Inserted : Character_Set := Null_Set;
        From_Len : constant Natural := From'Length;
        To_Len   : constant Natural := To'Length;
*************** package body Ada.Strings.Maps is
*** 158,163 ****
--- 185,193 ----
  
        for Char in Character loop
           Result (Char) := Char;
+          pragma Loop_Invariant (Result (Result'First .. Char)'Initialized);
+          pragma Loop_Invariant
+            (for all C in Result'First .. Char => Result (C) = C);
        end loop;
  
        for J in From'Range loop
*************** package body Ada.Strings.Maps is
*** 167,172 ****
--- 197,219 ----
  
           Result   (From (J)) := To (J - From'First + To'First);
           Inserted (From (J)) := True;
+ 
+          pragma Loop_Invariant (Result'Initialized);
+          pragma Loop_Invariant
+            (for all K in From'First .. J =>
+               Result (From (K)) = To (K - From'First + To'First)
+                 and then Inserted (From (K)));
+          pragma Loop_Invariant
+            (for all Char in Character =>
+               (Inserted (Char) =
+                  (for some K in From'First .. J => Char = From (K))));
+          pragma Loop_Invariant
+            (for all Char in Character =>
+               (if not Inserted (Char) then Result (Char) = Char));
+          pragma Loop_Invariant
+            (if (for all K in From'First .. J =>
+                   From (K) = To (J - From'First + To'First))
+             then Result = Identity);
        end loop;
  
        return Result;
*************** package body Ada.Strings.Maps is
*** 176,194 ****
     -- To_Range --
     --------------
  
!    function To_Range (Map : Character_Mapping) return Character_Sequence
!    is
!       Result : String (1 .. Map'Length);
        J      : Natural;
     begin
        J := 0;
        for C in Map'Range loop
           if Map (C) /= C then
              J := J + 1;
              Result (J) := Map (C);
           end if;
        end loop;
  
        return Result (1 .. J);
     end To_Range;
  
--- 223,417 ----
     -- To_Range --
     --------------
  
!    function To_Range (Map : Character_Mapping) return Character_Sequence is
! 
!       --  Extract from the postcondition of To_Domain the essential properties
!       --  that define Seq as the domain of Map.
!       function Is_Domain
!         (Map : Character_Mapping;
!          Seq : Character_Sequence)
!          return Boolean
!       is
!         (Seq'First = 1
!            and then
!          SPARK_Proof_Sorted_Character_Sequence (Seq)
!            and then
!          (for all Char in Character =>
!             (if (for all X of Seq => X /= Char)
!              then Map (Char) = Char))
!            and then
!          (for all Char of Seq => Map (Char) /= Char))
!       with
!         Ghost;
! 
!       --  Given Map, there is a unique sequence Seq for which
!       --  Is_Domain(Map,Seq) holds.
!       procedure Lemma_Domain_Unicity
!         (Map        : Character_Mapping;
!          Seq1, Seq2 : Character_Sequence)
!       with
!         Ghost,
!         Pre  => Is_Domain (Map, Seq1)
!           and then Is_Domain (Map, Seq2),
!         Post => Seq1 = Seq2;
! 
!       --  Isolate the proof that To_Domain(Map) returns a sequence for which
!       --  Is_Domain holds.
!       procedure Lemma_Is_Domain (Map : Character_Mapping)
!       with
!         Ghost,
!         Post => Is_Domain (Map, To_Domain (Map));
! 
!       --  Deduce the alternative expression of sortedness from the one in
!       --  SPARK_Proof_Sorted_Character_Sequence which compares consecutive
!       --  elements.
!       procedure Lemma_Is_Sorted (Seq : Character_Sequence)
!       with
!         Ghost,
!         Pre  => SPARK_Proof_Sorted_Character_Sequence (Seq),
!         Post => (for all J in Seq'Range =>
!                    (for all K in Seq'Range =>
!                       (if J < K then Seq (J) < Seq (K))));
! 
!       --------------------------
!       -- Lemma_Domain_Unicity --
!       --------------------------
! 
!       procedure Lemma_Domain_Unicity
!         (Map        : Character_Mapping;
!          Seq1, Seq2 : Character_Sequence)
!       is
!          J : Positive := 1;
! 
!       begin
!          while J <= Seq1'Last
!            and then J <= Seq2'Last
!            and then Seq1 (J) = Seq2 (J)
!          loop
!             pragma Loop_Invariant
!               (Seq1 (Seq1'First .. J) = Seq2 (Seq2'First .. J));
! 
!             if J = Positive'Last then
!                return;
!             end if;
! 
!             J := J + 1;
!          end loop;
! 
!          Lemma_Is_Sorted (Seq1);
!          Lemma_Is_Sorted (Seq2);
! 
!          if J <= Seq1'Last
!            and then J <= Seq2'Last
!          then
!             if Seq1 (J) < Seq2 (J) then
!                pragma Assert (for all X of Seq2 => X /= Seq1 (J));
!                pragma Assert (Map (Seq1 (J)) = Seq1 (J));
!                pragma Assert (False);
!             else
!                pragma Assert (for all X of Seq1 => X /= Seq2 (J));
!                pragma Assert (Map (Seq2 (J)) = Seq2 (J));
!                pragma Assert (False);
!             end if;
! 
!          elsif J <= Seq1'Last then
!             pragma Assert (for all X of Seq2 => X /= Seq1 (J));
!             pragma Assert (Map (Seq1 (J)) = Seq1 (J));
!             pragma Assert (False);
! 
!          elsif J <= Seq2'Last then
!             pragma Assert (for all X of Seq1 => X /= Seq2 (J));
!             pragma Assert (Map (Seq2 (J)) = Seq2 (J));
!             pragma Assert (False);
!          end if;
!       end Lemma_Domain_Unicity;
! 
!       ---------------------
!       -- Lemma_Is_Domain --
!       ---------------------
! 
!       procedure Lemma_Is_Domain (Map : Character_Mapping) is
!          Ignore : constant Character_Sequence := To_Domain (Map);
!       begin
!          null;
!       end Lemma_Is_Domain;
! 
!       ---------------------
!       -- Lemma_Is_Sorted --
!       ---------------------
! 
!       procedure Lemma_Is_Sorted (Seq : Character_Sequence) is
!       begin
!          for A in Seq'Range loop
!             exit when A = Positive'Last;
! 
!             for B in A + 1 .. Seq'Last loop
!                pragma Loop_Invariant
!                  (for all K in A + 1 .. B => Seq (A) < Seq (K));
!             end loop;
! 
!             pragma Loop_Invariant
!               (for all J in Seq'First .. A =>
!                  (for all K in Seq'Range =>
!                     (if J < K then Seq (J) < Seq (K))));
!          end loop;
!       end Lemma_Is_Sorted;
! 
!       --  Local variables
! 
!       Result : String (1 .. Map'Length) with Relaxed_Initialization;
        J      : Natural;
+ 
+       --  Repeat the computation from To_Domain in ghost code, in order to
+       --  prove the relationship between Result and To_Domain(Map).
+ 
+       Domain : String (1 .. Map'Length) with Ghost, Relaxed_Initialization;
+       type Character_Index is array (Character) of Natural with Ghost;
+       Indexes : Character_Index := [others => 0] with Ghost;
+ 
+    --  Start of processing for To_Range
+ 
     begin
        J := 0;
        for C in Map'Range loop
           if Map (C) /= C then
              J := J + 1;
              Result (J) := Map (C);
+             Domain (J) := C;
+             Indexes (C) := J;
           end if;
+ 
+          --  Repeat the loop invariants from To_Domain regarding Domain and
+          --  Indexes. Add similar loop invariants for Result and Indexes.
+ 
+          pragma Loop_Invariant (J <= Character'Pos (C) + 1);
+          pragma Loop_Invariant (Result (1 .. J)'Initialized);
+          pragma Loop_Invariant (Domain (1 .. J)'Initialized);
+          pragma Loop_Invariant (for all K in 1 .. J => Domain (K) <= C);
+          pragma Loop_Invariant
+            (SPARK_Proof_Sorted_Character_Sequence (Domain (1 .. J)));
+          pragma Loop_Invariant
+            (for all D in Map'First .. C =>
+               (if Map (D) = D then
+                  Indexes (D) = 0
+                else
+                  Indexes (D) in 1 .. J
+                    and then Domain (Indexes (D)) = D
+                    and then Result (Indexes (D)) = Map (D)));
+          pragma Loop_Invariant
+            (for all Char of Domain (1 .. J) => Map (Char) /= Char);
+          pragma Loop_Invariant
+            (for all K in 1 .. J => Result (K) = Map (Domain (K)));
        end loop;
  
+       --  Show the equality of Domain and To_Domain(Map)
+ 
+       Lemma_Is_Domain (Map);
+       Lemma_Domain_Unicity (Map, Domain (1 .. J), To_Domain (Map));
+       pragma Assert
+         (for all K in 1 .. J => Domain (K) = To_Domain (Map) (K));
+       pragma Assert (To_Domain (Map)'Length = J);
+ 
        return Result (1 .. J);
     end To_Range;
  
*************** package body Ada.Strings.Maps is
*** 197,214 ****
     ---------------
  
     function To_Ranges (Set : Character_Set) return Character_Ranges is
!       Max_Ranges : Character_Ranges (1 .. Set'Length / 2 + 1);
        Range_Num  : Natural;
        C          : Character;
  
     begin
        C := Character'First;
        Range_Num := 0;
  
        loop
           --  Skip gap between subsets
  
           while not Set (C) loop
              exit when C = Character'Last;
              C := Character'Succ (C);
           end loop;
--- 420,445 ----
     ---------------
  
     function To_Ranges (Set : Character_Set) return Character_Ranges is
!       Max_Ranges : Character_Ranges (1 .. Set'Length / 2 + 1)
!         with Relaxed_Initialization;
        Range_Num  : Natural;
        C          : Character;
+       C_Iter     : Character with Ghost;
  
     begin
        C := Character'First;
        Range_Num := 0;
  
        loop
+          C_Iter := C;
+ 
           --  Skip gap between subsets
  
           while not Set (C) loop
+             pragma Loop_Invariant
+               (Character'Pos (C) >= Character'Pos (C'Loop_Entry));
+             pragma Loop_Invariant
+               (for all Char in C'Loop_Entry .. C => not Set (Char));
              exit when C = Character'Last;
              C := Character'Succ (C);
           end loop;
*************** package body Ada.Strings.Maps is
*** 221,236 ****
           --  Span a subset
  
           loop
              exit when not Set (C) or else C = Character'Last;
              C := Character'Succ (C);
           end loop;
  
           if Set (C) then
!             Max_Ranges (Range_Num). High := C;
              exit;
           else
!             Max_Ranges (Range_Num). High := Character'Pred (C);
           end if;
        end loop;
  
        return Max_Ranges (1 .. Range_Num);
--- 452,496 ----
           --  Span a subset
  
           loop
+             pragma Loop_Invariant
+               (Character'Pos (C) >= Character'Pos (C'Loop_Entry));
+             pragma Loop_Invariant
+               (for all Char in C'Loop_Entry .. C =>
+                  (if Char /= C then Set (Char)));
              exit when not Set (C) or else C = Character'Last;
              C := Character'Succ (C);
           end loop;
  
           if Set (C) then
!             Max_Ranges (Range_Num).High := C;
              exit;
           else
!             Max_Ranges (Range_Num).High := Character'Pred (C);
           end if;
+ 
+          pragma Assert
+            (for all Char in C_Iter .. C =>
+               (Set (Char) =
+                  (Char in Max_Ranges (Range_Num).Low ..
+                           Max_Ranges (Range_Num).High)));
+          pragma Assert
+            (for all Char in Character'First .. C_Iter =>
+               (if Char /= C_Iter then
+                  (Set (Char) =
+                     (for some Span of Max_Ranges (1 .. Range_Num - 1) =>
+                        Char in Span.Low .. Span.High))));
+ 
+          pragma Loop_Invariant (2 * Range_Num <= Character'Pos (C) + 1);
+          pragma Loop_Invariant (Max_Ranges (1 .. Range_Num)'Initialized);
+          pragma Loop_Invariant (not Set (C));
+          pragma Loop_Invariant
+            (for all Char in Character'First .. C =>
+               (Set (Char) =
+                  (for some Span of Max_Ranges (1 .. Range_Num) =>
+                     Char in Span.Low .. Span.High)));
+          pragma Loop_Invariant
+            (for all Span of Max_Ranges (1 .. Range_Num) =>
+               (for all Char in Span.Low .. Span.High => Set (Char)));
        end loop;
  
        return Max_Ranges (1 .. Range_Num);
*************** package body Ada.Strings.Maps is
*** 241,247 ****
     -----------------
  
     function To_Sequence (Set : Character_Set) return Character_Sequence is
!       Result : String (1 .. Character'Pos (Character'Last) + 1);
        Count  : Natural := 0;
     begin
        for Char in Set'Range loop
--- 501,508 ----
     -----------------
  
     function To_Sequence (Set : Character_Set) return Character_Sequence is
!       Result : String (1 .. Character'Pos (Character'Last) + 1)
!         with Relaxed_Initialization;
        Count  : Natural := 0;
     begin
        for Char in Set'Range loop
*************** package body Ada.Strings.Maps is
*** 249,254 ****
--- 510,526 ----
              Count := Count + 1;
              Result (Count) := Char;
           end if;
+ 
+          pragma Loop_Invariant (Count <= Character'Pos (Char) + 1);
+          pragma Loop_Invariant (Result (1 .. Count)'Initialized);
+          pragma Loop_Invariant (for all K in 1 .. Count => Result (K) <= Char);
+          pragma Loop_Invariant
+            (SPARK_Proof_Sorted_Character_Sequence (Result (1 .. Count)));
+          pragma Loop_Invariant
+            (for all C in Set'First .. Char =>
+               (Set (C) = (for some X of Result (1 .. Count) => C = X)));
+          pragma Loop_Invariant
+            (for all Char of Result (1 .. Count) => Is_In (Char, Set));
        end loop;
  
        return Result (1 .. Count);
*************** package body Ada.Strings.Maps is
*** 259,288 ****
     ------------
  
     function To_Set (Ranges : Character_Ranges) return Character_Set is
!       Result : Character_Set;
     begin
-       for C in Result'Range loop
-          Result (C) := False;
-       end loop;
- 
        for R in Ranges'Range loop
           for C in Ranges (R).Low .. Ranges (R).High loop
              Result (C) := True;
           end loop;
        end loop;
  
        return Result;
     end To_Set;
  
     function To_Set (Span : Character_Range) return Character_Set is
!       Result : Character_Set;
     begin
-       for C in Result'Range loop
-          Result (C) := False;
-       end loop;
- 
        for C in Span.Low .. Span.High loop
           Result (C) := True;
        end loop;
  
        return Result;
--- 531,567 ----
     ------------
  
     function To_Set (Ranges : Character_Ranges) return Character_Set is
!       Result : Character_Set := Null_Set;
     begin
        for R in Ranges'Range loop
           for C in Ranges (R).Low .. Ranges (R).High loop
              Result (C) := True;
+             pragma Loop_Invariant
+               (for all Char in Character =>
+                  Result (Char) =
+                    ((for some Prev in Ranges'First .. R - 1 =>
+                        Char in Ranges (Prev).Low .. Ranges (Prev).High)
+                     or else (Char in Ranges (R).Low .. C)));
           end loop;
+ 
+          pragma Loop_Invariant
+            (for all Char in Character =>
+               Result (Char) =
+                 (for some Prev in Ranges'First .. R =>
+                    Char in Ranges (Prev).Low .. Ranges (Prev).High));
        end loop;
  
        return Result;
     end To_Set;
  
     function To_Set (Span : Character_Range) return Character_Set is
!       Result : Character_Set := Null_Set;
     begin
        for C in Span.Low .. Span.High loop
           Result (C) := True;
+          pragma Loop_Invariant
+            (for all Char in Character =>
+               Result (Char) = (Char in Span.Low .. C));
        end loop;
  
        return Result;
*************** package body Ada.Strings.Maps is
*** 293,298 ****
--- 572,581 ----
     begin
        for J in Sequence'Range loop
           Result (Sequence (J)) := True;
+          pragma Loop_Invariant
+            (for all Char in Character =>
+               Result (Char) =
+                 (for some K in Sequence'First .. J => Char = Sequence (K)));
        end loop;
  
        return Result;
*************** package body Ada.Strings.Maps is
*** 313,320 ****
       (Map     : Character_Mapping;
        Element : Character) return Character
     is
!    begin
!       return Map (Element);
!    end Value;
  
  end Ada.Strings.Maps;
--- 596,601 ----
       (Map     : Character_Mapping;
        Element : Character) return Character
     is
!       (Map (Element));
  
  end Ada.Strings.Maps;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strmap.ads gcc-12.1.0/gcc/ada/libgnat/a-strmap.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-strmap.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strmap.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
***************
*** 33,47 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  --  Preconditions in this unit are meant for analysis only, not for run-time
  --  checking, so that the expected exceptions are raised. This is enforced by
! --  setting the corresponding assertion policy to Ignore.
  
! pragma Assertion_Policy (Pre => Ignore);
  
  with Ada.Characters.Latin_1;
  
! package Ada.Strings.Maps is
     pragma Pure;
     --  In accordance with Ada 2005 AI-362
  
--- 33,56 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ --  The package Strings.Maps defines the types, operations, and other entities
+ --  needed for character sets and character-to-character mappings.
+ 
  --  Preconditions in this unit are meant for analysis only, not for run-time
  --  checking, so that the expected exceptions are raised. This is enforced by
! --  setting the corresponding assertion policy to Ignore. Postconditions and
! --  ghost code should not be executed at runtime as well, in order not to slow
! --  down the execution of these functions.
  
! pragma Assertion_Policy (Pre   => Ignore,
!                          Post  => Ignore,
!                          Ghost => Ignore);
  
  with Ada.Characters.Latin_1;
  
! package Ada.Strings.Maps
!   with SPARK_Mode
! is
     pragma Pure;
     --  In accordance with Ada 2005 AI-362
  
*************** package Ada.Strings.Maps is
*** 51,59 ****
  
     type Character_Set is private;
     pragma Preelaborable_Initialization (Character_Set);
!    --  Representation for a set of character values:
  
     Null_Set : constant Character_Set;
  
     ---------------------------
     -- Constructors for Sets --
--- 60,69 ----
  
     type Character_Set is private;
     pragma Preelaborable_Initialization (Character_Set);
!    --  An object of type Character_Set represents a set of characters.
  
     Null_Set : constant Character_Set;
+    --  Null_Set represents the set containing no characters.
  
     ---------------------------
     -- Constructors for Sets --
*************** package Ada.Strings.Maps is
*** 63,71 ****
        Low  : Character;
        High : Character;
     end record;
!    --  Represents Character range Low .. High
  
     type Character_Ranges is array (Positive range <>) of Character_Range;
  
     function To_Set    (Ranges : Character_Ranges) return Character_Set with
       Post =>
--- 73,84 ----
        Low  : Character;
        High : Character;
     end record;
!    --  An object Obj of type Character_Range represents the set of characters
!    --  in the range Obj.Low .. Obj.High.
  
     type Character_Ranges is array (Positive range <>) of Character_Range;
+    --  An object Obj of type Character_Ranges represents the union of the sets
+    --  corresponding to Obj(I) for I in Obj'Range.
  
     function To_Set    (Ranges : Character_Ranges) return Character_Set with
       Post =>
*************** package Ada.Strings.Maps is
*** 78,83 ****
--- 91,98 ----
         (for all Span of Ranges =>
            (for all Char in Span.Low .. Span.High =>
               Is_In (Char, To_Set'Result)));
+    --  If Ranges'Length=0 then Null_Set is returned; otherwise, the returned
+    --  value represents the set corresponding to Ranges.
  
     function To_Set    (Span   : Character_Range)  return Character_Set with
       Post =>
*************** package Ada.Strings.Maps is
*** 87,92 ****
--- 102,108 ----
            (if Is_In (Char, To_Set'Result) then Char in Span.Low .. Span.High))
            and then
         (for all Char in Span.Low .. Span.High => Is_In (Char, To_Set'Result));
+    --  The returned value represents the set containing each character in Span.
  
     function To_Ranges (Set    : Character_Set)    return Character_Ranges with
       Post =>
*************** package Ada.Strings.Maps is
*** 100,105 ****
--- 116,127 ----
            and then
         (for all Span of To_Ranges'Result =>
            (for all Char in Span.Low .. Span.High => Is_In (Char, Set)));
+    --  If Set = Null_Set, then an empty Character_Ranges array is returned;
+    --  otherwise, the shortest array of contiguous ranges of Character values
+    --  in Set, in increasing order of Low, is returned.
+    --
+    --  The postcondition above does not express that the result is the shortest
+    --  array and that it is sorted.
  
     ----------------------------------
     -- Operations on Character Sets --
*************** package Ada.Strings.Maps is
*** 111,116 ****
--- 133,145 ----
           =
         (for all Char in Character =>
            (Is_In (Char, Left) = Is_In (Char, Right)));
+    --  The function "=" returns True if Left and Right represent identical
+    --  sets, and False otherwise.
+ 
+    --  Each of the logical operators "not", "and", "or", and "xor" returns a
+    --  Character_Set value that represents the set obtained by applying the
+    --  corresponding operation to the set(s) represented by the parameter(s)
+    --  of the operator.
  
     function "not" (Right       : Character_Set) return Character_Set with
       Post =>
*************** package Ada.Strings.Maps is
*** 146,155 ****
--- 175,186 ----
            (Is_In (Char, "-"'Result)
               =
             (Is_In (Char, Left) and not Is_In (Char, Right))));
+    --  "-"(Left, Right) is equivalent to "and"(Left, "not"(Right)).
  
     function Is_In
       (Element : Character;
        Set     : Character_Set) return Boolean;
+    --  Is_In returns True if Element is in Set, and False otherwise.
  
     function Is_Subset
       (Elements : Character_Set;
*************** package Ada.Strings.Maps is
*** 160,165 ****
--- 191,198 ----
             =
           (for all Char in Character =>
              (if Is_In (Char, Elements) then Is_In (Char, Set)));
+    --  Is_Subset returns True if Elements is a subset of Set, and False
+    --  otherwise.
  
     function "<="
       (Left  : Character_Set;
*************** package Ada.Strings.Maps is
*** 167,173 ****
     renames Is_Subset;
  
     subtype Character_Sequence is String;
!    --  Alternative representation for a set of character values
  
     function To_Set (Sequence  : Character_Sequence) return Character_Set with
       Post =>
--- 200,222 ----
     renames Is_Subset;
  
     subtype Character_Sequence is String;
!    --  The Character_Sequence subtype is used to portray a set of character
!    --  values and also to identify the domain and range of a character mapping.
! 
!    function SPARK_Proof_Sorted_Character_Sequence
!      (Seq : Character_Sequence) return Boolean
!    is
!      (for all J in Seq'Range =>
!         (if J /= Seq'Last then Seq (J) < Seq (J + 1)))
!    with
!      Ghost;
!    --  Check whether the Character_Sequence is sorted in stricly increasing
!    --  order, as expected from the result of To_Sequence and To_Domain.
! 
!    --  Sequence portrays the set of character values that it explicitly
!    --  contains (ignoring duplicates). Singleton portrays the set comprising a
!    --  single Character. Each of the To_Set functions returns a Character_Set
!    --  value that represents the set portrayed by Sequence or Singleton.
  
     function To_Set (Sequence  : Character_Sequence) return Character_Set with
       Post =>
*************** package Ada.Strings.Maps is
*** 197,206 ****
            and then
         (for all Char of To_Sequence'Result => Is_In (Char, Set))
            and then
!        (for all J in To_Sequence'Result'Range =>
!           (for all K in To_Sequence'Result'Range =>
!              (if J /= K
!               then To_Sequence'Result (J) /= To_Sequence'Result (K))));
  
     ------------------------------------
     -- Character Mapping Declarations --
--- 246,255 ----
            and then
         (for all Char of To_Sequence'Result => Is_In (Char, Set))
            and then
!        SPARK_Proof_Sorted_Character_Sequence (To_Sequence'Result);
!    --  The function To_Sequence returns a Character_Sequence value containing
!    --  each of the characters in the set represented by Set, in ascending order
!    --  with no duplicates.
  
     ------------------------------------
     -- Character Mapping Declarations --
*************** package Ada.Strings.Maps is
*** 208,220 ****
  
     type Character_Mapping is private;
     pragma Preelaborable_Initialization (Character_Mapping);
!    --  Representation for a character to character mapping:
  
     function Value
       (Map     : Character_Mapping;
!       Element : Character) return Character;
  
     Identity : constant Character_Mapping;
  
     ----------------------------
     -- Operations on Mappings --
--- 257,295 ----
  
     type Character_Mapping is private;
     pragma Preelaborable_Initialization (Character_Mapping);
!    --  An object of type Character_Mapping represents a Character-to-Character
!    --  mapping.
! 
!    type SPARK_Proof_Character_Mapping_Model is
!      array (Character) of Character
!    with Ghost;
!    --  Publicly visible model of a Character_Mapping
! 
!    function SPARK_Proof_Model
!      (Map : Character_Mapping)
!       return SPARK_Proof_Character_Mapping_Model
!    with Ghost;
!    --  Creation of a publicly visible model of a Character_Mapping
  
     function Value
       (Map     : Character_Mapping;
!       Element : Character) return Character
!    with
!      Post => Value'Result = SPARK_Proof_Model (Map) (Element);
!    --  The function Value returns the Character value to which Element maps
!    --  with respect to the mapping represented by Map.
! 
!    --  A character C matches a pattern character P with respect to a given
!    --  Character_Mapping value Map if Value(Map, C) = P. A string S matches
!    --  a pattern string P with respect to a given Character_Mapping if
!    --  their lengths are the same and if each character in S matches its
!    --  corresponding character in the pattern string P.
! 
!    --  String handling subprograms that deal with character mappings have
!    --  parameters whose type is Character_Mapping.
  
     Identity : constant Character_Mapping;
+    --  Identity maps each Character to itself.
  
     ----------------------------
     -- Operations on Mappings --
*************** package Ada.Strings.Maps is
*** 240,245 ****
--- 315,324 ----
               and then
             (if (for all X of From => Char /= X)
              then Value (To_Mapping'Result, Char) = Char)));
+    --  To_Mapping produces a Character_Mapping such that each element of From
+    --  maps to the corresponding element of To, and each other character maps
+    --  to itself. If From'Length /= To'Length, or if some character is repeated
+    --  in From, then Translation_Error is propagated.
  
     function To_Domain
       (Map : Character_Mapping) return Character_Sequence with
*************** package Ada.Strings.Maps is
*** 248,271 ****
            and then
         To_Domain'Result'First = 1
            and then
         (for all Char in Character =>
            (if (for all X of To_Domain'Result => X /= Char)
             then Value (Map, Char) = Char))
            and then
         (for all Char of To_Domain'Result => Value (Map, Char) /= Char);
  
     function To_Range
       (Map : Character_Mapping) return Character_Sequence with
       Post =>
         To_Range'Result'First = 1
           and then
!        To_Range'Result'Last = To_Domain (Map)'Last
           and then
         (for all J in To_Range'Result'Range =>
            To_Range'Result (J) = Value (Map, To_Domain (Map) (J)));
  
     type Character_Mapping_Function is
        access function (From : Character) return Character;
  
  private
     pragma Inline (Is_In);
--- 327,366 ----
            and then
         To_Domain'Result'First = 1
            and then
+        SPARK_Proof_Sorted_Character_Sequence (To_Domain'Result)
+           and then
         (for all Char in Character =>
            (if (for all X of To_Domain'Result => X /= Char)
             then Value (Map, Char) = Char))
            and then
         (for all Char of To_Domain'Result => Value (Map, Char) /= Char);
+    --  To_Domain returns the shortest Character_Sequence value D such that each
+    --  character not in D maps to itself, and such that the characters in D are
+    --  in ascending order. The lower bound of D is 1.
  
     function To_Range
       (Map : Character_Mapping) return Character_Sequence with
       Post =>
         To_Range'Result'First = 1
           and then
!        To_Range'Result'Length = To_Domain (Map)'Length
           and then
         (for all J in To_Range'Result'Range =>
            To_Range'Result (J) = Value (Map, To_Domain (Map) (J)));
+    --  To_Range returns the Character_Sequence value R, such that if D =
+    --  To_Domain(Map), then R has the same bounds as D, and D(I) maps to
+    --  R(I) for each I in D'Range.
+    --
+    --  A direct encoding of the Ada RM would be the postcondition
+    --    To_Range'Result'Last = To_Domain (Map)'Last
+    --  which is not provable unless the postcondition of To_Domain is also
+    --  strengthened to state the value of the high bound for an empty result.
  
     type Character_Mapping_Function is
        access function (From : Character) return Character;
+    --  An object F of type Character_Mapping_Function maps a Character value C
+    --  to the Character value F.all(C), which is said to match C with respect
+    --  to mapping function F.
  
  private
     pragma Inline (Is_In);
*************** private
*** 281,290 ****
     --  the defined operations in the spec, but the operations defined
     --  on Character_Set_Internal remain visible.
  
!    Null_Set : constant Character_Set := (others => False);
  
     type Character_Mapping is array (Character) of Character;
  
     package L renames Ada.Characters.Latin_1;
  
     Identity : constant Character_Mapping :=
--- 376,391 ----
     --  the defined operations in the spec, but the operations defined
     --  on Character_Set_Internal remain visible.
  
!    Null_Set : constant Character_Set := [others => False];
  
     type Character_Mapping is array (Character) of Character;
  
+    function SPARK_Proof_Model
+      (Map : Character_Mapping)
+       return SPARK_Proof_Character_Mapping_Model
+    is
+      (SPARK_Proof_Character_Mapping_Model (Map));
+ 
     package L renames Ada.Characters.Latin_1;
  
     Identity : constant Character_Mapping :=
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strsea.adb gcc-12.1.0/gcc/ada/libgnat/a-strsea.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-strsea.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strsea.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 35,44 ****
  --  case of identity mappings for Count and Index, and also Index_Non_Blank
  --  is specialized (rather than using the general Index routine).
  
  with Ada.Strings.Maps; use Ada.Strings.Maps;
  with System;           use System;
  
! package body Ada.Strings.Search is
  
     -----------------------
     -- Local Subprograms --
--- 35,52 ----
  --  case of identity mappings for Count and Index, and also Index_Non_Blank
  --  is specialized (rather than using the general Index routine).
  
+ --  Ghost code, loop invariants and assertions in this unit are meant for
+ --  analysis only, not for run-time checking, as it would be too costly
+ --  otherwise. This is enforced by setting the assertion policy to Ignore.
+ 
+ pragma Assertion_Policy (Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with Ada.Strings.Maps; use Ada.Strings.Maps;
  with System;           use System;
  
! package body Ada.Strings.Search with SPARK_Mode is
  
     -----------------------
     -- Local Subprograms --
*************** package body Ada.Strings.Search is
*** 61,73 ****
        Set     : Maps.Character_Set;
        Test    : Membership) return Boolean
     is
!    begin
!       if Test = Inside then
!          return Is_In (Element, Set);
!       else
!          return not Is_In (Element, Set);
!       end if;
!    end Belongs;
  
     -----------
     -- Count --
--- 69,77 ----
        Set     : Maps.Character_Set;
        Test    : Membership) return Boolean
     is
!       (if Test = Inside then
!           Is_In (Element, Set)
!       else not (Is_In (Element, Set)));
  
     -----------
     -- Count --
*************** package body Ada.Strings.Search is
*** 81,127 ****
        PL1 : constant Integer := Pattern'Length - 1;
        Num : Natural;
        Ind : Natural;
-       Cur : Natural;
  
     begin
        if Pattern = "" then
           raise Pattern_Error;
        end if;
  
        Num := 0;
!       Ind := Source'First;
  
        --  Unmapped case
  
!       if Mapping'Address = Maps.Identity'Address then
!          while Ind <= Source'Last - PL1 loop
              if Pattern = Source (Ind .. Ind + PL1) then
                 Num := Num + 1;
!                Ind := Ind + Pattern'Length;
!             else
!                Ind := Ind + 1;
              end if;
           end loop;
  
        --  Mapped case
  
        else
!          while Ind <= Source'Last - PL1 loop
!             Cur := Ind;
              for K in Pattern'Range loop
!                if Pattern (K) /= Value (Mapping, Source (Cur)) then
!                   Ind := Ind + 1;
                    goto Cont;
-                else
-                   Cur := Cur + 1;
                 end if;
              end loop;
  
              Num := Num + 1;
!             Ind := Ind + Pattern'Length;
  
!          <<Cont>>
              null;
           end loop;
        end if;
  
--- 85,147 ----
        PL1 : constant Integer := Pattern'Length - 1;
        Num : Natural;
        Ind : Natural;
  
     begin
        if Pattern = "" then
           raise Pattern_Error;
        end if;
  
+       --  Isolating the null string case to ensure Source'First, Source'Last in
+       --  Positive.
+ 
+       if Source = "" then
+          return 0;
+       end if;
+ 
        Num := 0;
!       Ind := Source'First - 1;
  
        --  Unmapped case
  
!       if Is_Identity (Mapping) then
!          while Ind < Source'Last - PL1 loop
!             Ind := Ind + 1;
              if Pattern = Source (Ind .. Ind + PL1) then
                 Num := Num + 1;
!                Ind := Ind + PL1;
              end if;
+ 
+             pragma Loop_Invariant (Num <= Ind - (Source'First - 1));
+             pragma Loop_Invariant (Ind >= Source'First);
           end loop;
  
        --  Mapped case
  
        else
!          while Ind < Source'Last - PL1 loop
!             Ind := Ind + 1;
              for K in Pattern'Range loop
!                if Pattern (K) /= Value (Mapping,
!                  Source (Ind + (K - Pattern'First)))
!                then
!                   pragma Assert (not (Match (Source, Pattern, Mapping, Ind)));
                    goto Cont;
                 end if;
+ 
+                pragma Loop_Invariant
+                  (for all J in Pattern'First .. K =>
+                     Pattern (J) = Value (Mapping,
+                       Source (Ind + (J - Pattern'First))));
              end loop;
  
+             pragma Assert (Match (Source, Pattern, Mapping, Ind));
              Num := Num + 1;
!             Ind := Ind + PL1;
  
!             <<Cont>>
              null;
+             pragma Loop_Invariant (Num <= Ind - (Source'First - 1));
+             pragma Loop_Invariant (Ind >= Source'First);
           end loop;
        end if;
  
*************** package body Ada.Strings.Search is
*** 138,150 ****
        PL1 : constant Integer := Pattern'Length - 1;
        Num : Natural;
        Ind : Natural;
-       Cur : Natural;
  
     begin
        if Pattern = "" then
           raise Pattern_Error;
        end if;
  
        --  Check for null pointer in case checks are off
  
        if Mapping = null then
--- 158,176 ----
        PL1 : constant Integer := Pattern'Length - 1;
        Num : Natural;
        Ind : Natural;
  
     begin
        if Pattern = "" then
           raise Pattern_Error;
        end if;
  
+       --  Isolating the null string case to ensure Source'First, Source'Last in
+       --  Positive.
+ 
+       if Source = "" then
+          return 0;
+       end if;
+ 
        --  Check for null pointer in case checks are off
  
        if Mapping = null then
*************** package body Ada.Strings.Search is
*** 152,174 ****
        end if;
  
        Num := 0;
!       Ind := Source'First;
!       while Ind <= Source'Last - PL1 loop
!          Cur := Ind;
           for K in Pattern'Range loop
!             if Pattern (K) /= Mapping (Source (Cur)) then
!                Ind := Ind + 1;
                 goto Cont;
-             else
-                Cur := Cur + 1;
              end if;
           end loop;
  
           Num := Num + 1;
!          Ind := Ind + Pattern'Length;
  
        <<Cont>>
           null;
        end loop;
  
        return Num;
--- 178,205 ----
        end if;
  
        Num := 0;
!       Ind := Source'First - 1;
!       while Ind < Source'Last - PL1 loop
!          Ind := Ind + 1;
           for K in Pattern'Range loop
!             if Pattern (K) /= Mapping (Source (Ind + (K - Pattern'First))) then
!                pragma Assert (not (Match (Source, Pattern, Mapping, Ind)));
                 goto Cont;
              end if;
+ 
+             pragma Loop_Invariant
+               (for all J in Pattern'First .. K =>
+                  Pattern (J) = Mapping (Source (Ind + (J - Pattern'First))));
           end loop;
  
+          pragma Assert (Match (Source, Pattern, Mapping, Ind));
           Num := Num + 1;
!          Ind := Ind + PL1;
  
        <<Cont>>
           null;
+          pragma Loop_Invariant (Num <= Ind - (Source'First - 1));
+          pragma Loop_Invariant (Ind >= Source'First);
        end loop;
  
        return Num;
*************** package body Ada.Strings.Search is
*** 182,187 ****
--- 213,219 ----
  
     begin
        for J in Source'Range loop
+          pragma Loop_Invariant (N <= J - Source'First);
           if Is_In (Source (J), Set) then
              N := N + 1;
           end if;
*************** package body Ada.Strings.Search is
*** 217,228 ****
           if Belongs (Source (J), Set, Test) then
              First := J;
  
!             for K in J + 1 .. Source'Last loop
!                if not Belongs (Source (K), Set, Test) then
!                   Last := K - 1;
!                   return;
!                end if;
!             end loop;
  
              --  Here if J indexes first char of token, and all chars after J
              --  are in the token.
--- 249,266 ----
           if Belongs (Source (J), Set, Test) then
              First := J;
  
!             if J < Source'Last then
!                for K in J + 1 .. Source'Last loop
!                   if not Belongs (Source (K), Set, Test) then
!                      Last := K - 1;
!                      return;
!                   end if;
! 
!                   pragma Loop_Invariant
!                     (for all L in J .. K =>
!                        Belongs (Source (L), Set, Test));
!                end loop;
!             end if;
  
              --  Here if J indexes first char of token, and all chars after J
              --  are in the token.
*************** package body Ada.Strings.Search is
*** 230,235 ****
--- 268,277 ----
              Last := Source'Last;
              return;
           end if;
+ 
+          pragma Loop_Invariant
+            (for all K in Integer'Max (From, Source'First) .. J =>
+                 not (Belongs (Source (K), Set, Test)));
        end loop;
  
        --  Here if no token found
*************** package body Ada.Strings.Search is
*** 250,261 ****
           if Belongs (Source (J), Set, Test) then
              First := J;
  
!             for K in J + 1 .. Source'Last loop
!                if not Belongs (Source (K), Set, Test) then
!                   Last := K - 1;
!                   return;
!                end if;
!             end loop;
  
              --  Here if J indexes first char of token, and all chars after J
              --  are in the token.
--- 292,309 ----
           if Belongs (Source (J), Set, Test) then
              First := J;
  
!             if J < Source'Last then
!                for K in J + 1 .. Source'Last loop
!                   if not Belongs (Source (K), Set, Test) then
!                      Last := K - 1;
!                      return;
!                   end if;
! 
!                   pragma Loop_Invariant
!                     (for all L in J .. K =>
!                        Belongs (Source (L), Set, Test));
!                end loop;
!             end if;
  
              --  Here if J indexes first char of token, and all chars after J
              --  are in the token.
*************** package body Ada.Strings.Search is
*** 263,268 ****
--- 311,320 ----
              Last := Source'Last;
              return;
           end if;
+ 
+          pragma Loop_Invariant
+            (for all K in Source'First .. J =>
+               not (Belongs (Source (K), Set, Test)));
        end loop;
  
        --  Here if no token found
*************** package body Ada.Strings.Search is
*** 292,344 ****
        Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
        PL1 : constant Integer := Pattern'Length - 1;
-       Cur : Natural;
- 
-       Ind : Integer;
-       --  Index for start of match check. This can be negative if the pattern
-       --  length is greater than the string length, which is why this variable
-       --  is Integer instead of Natural. In this case, the search loops do not
-       --  execute at all, so this Ind value is never used.
  
     begin
        if Pattern = "" then
           raise Pattern_Error;
        end if;
  
        --  Forwards case
  
        if Going = Forward then
-          Ind := Source'First;
  
           --  Unmapped forward case
  
!          if Mapping'Address = Maps.Identity'Address then
!             for J in 1 .. Source'Length - PL1 loop
                 if Pattern = Source (Ind .. Ind + PL1) then
                    return Ind;
-                else
-                   Ind := Ind + 1;
                 end if;
              end loop;
  
           --  Mapped forward case
  
           else
!             for J in 1 .. Source'Length - PL1 loop
!                Cur := Ind;
! 
                 for K in Pattern'Range loop
!                   if Pattern (K) /= Value (Mapping, Source (Cur)) then
                       goto Cont1;
-                   else
-                      Cur := Cur + 1;
                    end if;
                 end loop;
  
                 return Ind;
  
!             <<Cont1>>
!                Ind := Ind + 1;
              end loop;
           end if;
  
--- 344,404 ----
        Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
        PL1 : constant Integer := Pattern'Length - 1;
  
     begin
        if Pattern = "" then
           raise Pattern_Error;
        end if;
  
+       --  If Pattern is longer than Source, it can't be found
+ 
+       if Pattern'Length > Source'Length then
+          return 0;
+       end if;
+ 
        --  Forwards case
  
        if Going = Forward then
  
           --  Unmapped forward case
  
!          if Is_Identity (Mapping) then
!             for Ind in Source'First .. Source'Last - PL1 loop
                 if Pattern = Source (Ind .. Ind + PL1) then
+                   pragma Assert (Match (Source, Pattern, Mapping, Ind));
                    return Ind;
                 end if;
+ 
+                pragma Loop_Invariant
+                  (for all J in Source'First .. Ind =>
+                     not (Match (Source, Pattern, Mapping, J)));
              end loop;
  
           --  Mapped forward case
  
           else
!             for Ind in Source'First .. Source'Last - PL1 loop
                 for K in Pattern'Range loop
!                   if Pattern (K) /= Value (Mapping,
!                     Source (Ind + (K - Pattern'First)))
!                   then
                       goto Cont1;
                    end if;
+ 
+                   pragma Loop_Invariant
+                     (for all J in Pattern'First .. K =>
+                        Pattern (J) = Value (Mapping,
+                          Source (Ind + (J - Pattern'First))));
                 end loop;
  
+                pragma Assert (Match (Source, Pattern, Mapping, Ind));
                 return Ind;
  
!                <<Cont1>>
!                pragma Loop_Invariant
!                  (for all J in Source'First .. Ind =>
!                     not (Match (Source, Pattern, Mapping, J)));
!                null;
              end loop;
           end if;
  
*************** package body Ada.Strings.Search is
*** 347,381 ****
        else
           --  Unmapped backward case
  
!          Ind := Source'Last - PL1;
! 
!          if Mapping'Address = Maps.Identity'Address then
!             for J in reverse 1 .. Source'Length - PL1 loop
                 if Pattern = Source (Ind .. Ind + PL1) then
                    return Ind;
-                else
-                   Ind := Ind - 1;
                 end if;
              end loop;
  
           --  Mapped backward case
  
           else
!             for J in reverse 1 .. Source'Length - PL1 loop
!                Cur := Ind;
! 
                 for K in Pattern'Range loop
!                   if Pattern (K) /= Value (Mapping, Source (Cur)) then
                       goto Cont2;
-                   else
-                      Cur := Cur + 1;
                    end if;
                 end loop;
  
                 return Ind;
  
!             <<Cont2>>
!                Ind := Ind - 1;
              end loop;
           end if;
        end if;
--- 407,449 ----
        else
           --  Unmapped backward case
  
!          if Is_Identity (Mapping) then
!             for Ind in reverse Source'First .. Source'Last - PL1 loop
                 if Pattern = Source (Ind .. Ind + PL1) then
+                   pragma Assert (Match (Source, Pattern, Mapping, Ind));
                    return Ind;
                 end if;
+ 
+                pragma Loop_Invariant
+                  (for all J in Ind .. Source'Last - PL1 =>
+                     not (Match (Source, Pattern, Mapping, J)));
              end loop;
  
           --  Mapped backward case
  
           else
!             for Ind in reverse Source'First .. Source'Last - PL1 loop
                 for K in Pattern'Range loop
!                   if Pattern (K) /= Value (Mapping,
!                     Source (Ind + (K - Pattern'First)))
!                   then
                       goto Cont2;
                    end if;
+ 
+                   pragma Loop_Invariant
+                     (for all J in Pattern'First .. K =>
+                        Pattern (J) = Value (Mapping,
+                          Source (Ind + (J - Pattern'First))));
                 end loop;
  
+                pragma Assert (Match (Source, Pattern, Mapping, Ind));
                 return Ind;
  
!                <<Cont2>>
!                pragma Loop_Invariant
!                  (for all J in Ind .. Source'Last - PL1 =>
!                     not (Match (Source, Pattern, Mapping, J)));
!                null;
              end loop;
           end if;
        end if;
*************** package body Ada.Strings.Search is
*** 393,401 ****
        Mapping : Maps.Character_Mapping_Function) return Natural
     is
        PL1 : constant Integer := Pattern'Length - 1;
-       Ind : Natural;
-       Cur : Natural;
- 
     begin
        if Pattern = "" then
           raise Pattern_Error;
--- 461,466 ----
*************** package body Ada.Strings.Search is
*** 416,458 ****
        --  Forwards case
  
        if Going = Forward then
!          Ind := Source'First;
!          for J in 1 .. Source'Length - PL1 loop
!             Cur := Ind;
! 
              for K in Pattern'Range loop
!                if Pattern (K) /= Mapping.all (Source (Cur)) then
                    goto Cont1;
-                else
-                   Cur := Cur + 1;
                 end if;
              end loop;
  
              return Ind;
  
!          <<Cont1>>
!             Ind := Ind + 1;
           end loop;
  
        --  Backwards case
  
        else
!          Ind := Source'Last - PL1;
!          for J in reverse 1 .. Source'Length - PL1 loop
!             Cur := Ind;
! 
              for K in Pattern'Range loop
!                if Pattern (K) /= Mapping.all (Source (Cur)) then
                    goto Cont2;
-                else
-                   Cur := Cur + 1;
                 end if;
              end loop;
  
              return Ind;
  
!          <<Cont2>>
!             Ind := Ind - 1;
           end loop;
        end if;
  
--- 481,532 ----
        --  Forwards case
  
        if Going = Forward then
!          for Ind in Source'First .. Source'Last - PL1 loop
              for K in Pattern'Range loop
!                if Pattern (K) /= Mapping.all
!                  (Source (Ind + (K - Pattern'First)))
!                then
                    goto Cont1;
                 end if;
+ 
+                pragma Loop_Invariant
+                  (for all J in Pattern'First .. K =>
+                    Pattern (J) = Mapping (Source (Ind + (J - Pattern'First))));
              end loop;
  
+             pragma Assert (Match (Source, Pattern, Mapping, Ind));
              return Ind;
  
!             <<Cont1>>
!             pragma Loop_Invariant
!               (for all J in Source'First .. Ind =>
!                  not (Match (Source, Pattern, Mapping, J)));
!             null;
           end loop;
  
        --  Backwards case
  
        else
!          for Ind in reverse Source'First .. Source'Last - PL1 loop
              for K in Pattern'Range loop
!                if Pattern (K) /= Mapping.all
!                  (Source (Ind + (K - Pattern'First)))
!                then
                    goto Cont2;
                 end if;
+ 
+                pragma Loop_Invariant
+                  (for all J in Pattern'First .. K =>
+                    Pattern (J) = Mapping (Source (Ind + (J - Pattern'First))));
              end loop;
  
              return Ind;
  
!             <<Cont2>>
!             pragma Loop_Invariant
!               (for all J in Ind .. (Source'Last - PL1) =>
!                 not (Match (Source, Pattern, Mapping, J)));
!             null;
           end loop;
        end if;
  
*************** package body Ada.Strings.Search is
*** 476,481 ****
--- 550,559 ----
              if Belongs (Source (J), Set, Test) then
                 return J;
              end if;
+ 
+             pragma Loop_Invariant
+               (for all C of Source (Source'First .. J) =>
+                    not (Belongs (C, Set, Test)));
           end loop;
  
        --  Backwards case
*************** package body Ada.Strings.Search is
*** 485,490 ****
--- 563,572 ----
              if Belongs (Source (J), Set, Test) then
                 return J;
              end if;
+ 
+             pragma Loop_Invariant
+               (for all C of Source (J .. Source'Last) =>
+                    not (Belongs (C, Set, Test)));
           end loop;
        end if;
  
*************** package body Ada.Strings.Search is
*** 500,505 ****
--- 582,589 ----
        Going   : Direction := Forward;
        Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
+       Result : Natural;
+       PL1    : constant Integer := Pattern'Length - 1;
     begin
  
        --  AI05-056: If source is empty result is always zero
*************** package body Ada.Strings.Search is
*** 512,528 ****
              raise Index_Error;
           end if;
  
!          return
             Index (Source (From .. Source'Last), Pattern, Forward, Mapping);
  
        else
           if From > Source'Last then
              raise Index_Error;
           end if;
  
!          return
             Index (Source (Source'First .. From), Pattern, Backward, Mapping);
        end if;
     end Index;
  
     function Index
--- 596,624 ----
              raise Index_Error;
           end if;
  
!          Result :=
             Index (Source (From .. Source'Last), Pattern, Forward, Mapping);
+          pragma Assert
+            (if (for some J in From .. Source'Last - PL1 =>
+                  Match (Source, Pattern, Mapping, J))
+             then Result in From .. Source'Last - PL1
+             else Result = 0);
  
        else
           if From > Source'Last then
              raise Index_Error;
           end if;
  
!          Result :=
             Index (Source (Source'First .. From), Pattern, Backward, Mapping);
+          pragma Assert
+            (if (for some J in Source'First .. From - PL1 =>
+                   Match (Source, Pattern, Mapping, J))
+             then Result in Source'First .. From - PL1
+             else Result = 0);
        end if;
+ 
+       return Result;
     end Index;
  
     function Index
*************** package body Ada.Strings.Search is
*** 603,608 ****
--- 699,707 ----
              if Source (J) /= ' ' then
                 return J;
              end if;
+ 
+             pragma Loop_Invariant
+               (for all C of Source (Source'First .. J) => C = ' ');
           end loop;
  
        else -- Going = Backward
*************** package body Ada.Strings.Search is
*** 610,615 ****
--- 709,717 ----
              if Source (J) /= ' ' then
                 return J;
              end if;
+ 
+             pragma Loop_Invariant
+               (for all C of Source (J .. Source'Last) => C = ' ');
           end loop;
        end if;
  
*************** package body Ada.Strings.Search is
*** 624,629 ****
--- 726,738 ----
        Going  : Direction := Forward) return Natural
     is
     begin
+ 
+       --  For equivalence with Index, if Source is empty the result is 0
+ 
+       if Source'Length = 0 then
+          return 0;
+       end if;
+ 
        if Going = Forward then
           if From < Source'First then
              raise Index_Error;
*************** package body Ada.Strings.Search is
*** 642,645 ****
--- 751,762 ----
        end if;
     end Index_Non_Blank;
  
+    function Is_Identity
+      (Mapping : Maps.Character_Mapping) return Boolean
+    with SPARK_Mode => Off
+    is
+    begin
+       return Mapping'Address = Maps.Identity'Address;
+    end Is_Identity;
+ 
  end Ada.Strings.Search;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strsea.ads gcc-12.1.0/gcc/ada/libgnat/a-strsea.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-strsea.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strsea.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 32,107 ****
  --  This package contains the search functions from Ada.Strings.Fixed. They
  --  are separated out because they are shared by Ada.Strings.Bounded and
  --  Ada.Strings.Unbounded, and we don't want to drag in other irrelevant stuff
! --  from Ada.Strings.Fixed when using the other two packages. We make this a
! --  private package, since user programs should access these subprograms via
! --  one of the standard string packages.
  
! with Ada.Strings.Maps;
  
! private package Ada.Strings.Search is
     pragma Preelaborate;
  
     function Index
       (Source  : String;
        Pattern : String;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Index
       (Source  : String;
        Pattern : String;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Index
       (Source : String;
        Set    : Maps.Character_Set;
        Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural;
  
     function Index
       (Source  : String;
        Pattern : String;
        From    : Positive;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Index
       (Source  : String;
        Pattern : String;
        From    : Positive;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Index
       (Source  : String;
        Set     : Maps.Character_Set;
        From    : Positive;
        Test    : Membership := Inside;
!       Going   : Direction := Forward) return Natural;
  
     function Index_Non_Blank
       (Source : String;
!       Going  : Direction := Forward) return Natural;
  
     function Index_Non_Blank
       (Source : String;
        From   : Positive;
!       Going  : Direction := Forward) return Natural;
  
     function Count
       (Source  : String;
        Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Count
       (Source  : String;
        Pattern : String;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Count
       (Source : String;
!       Set    : Maps.Character_Set) return Natural;
  
     procedure Find_Token
       (Source : String;
--- 32,520 ----
  --  This package contains the search functions from Ada.Strings.Fixed. They
  --  are separated out because they are shared by Ada.Strings.Bounded and
  --  Ada.Strings.Unbounded, and we don't want to drag in other irrelevant stuff
! --  from Ada.Strings.Fixed when using the other two packages. Although user
! --  programs should access these subprograms via one of the standard string
! --  packages, we do not make this a private package, since ghost function
! --  Match is used in the contracts of the standard string packages.
  
! --  Preconditions in this unit are meant for analysis only, not for run-time
! --  checking, so that the expected exceptions are raised. This is enforced
! --  by setting the corresponding assertion policy to Ignore. Postconditions,
! --  contract cases and ghost code should not be executed at runtime as well,
! --  in order not to slow down the execution of these functions.
  
! pragma Assertion_Policy (Pre            => Ignore,
!                          Post           => Ignore,
!                          Contract_Cases => Ignore,
!                          Ghost          => Ignore);
! 
! with Ada.Strings.Maps; use type Ada.Strings.Maps.Character_Mapping_Function;
! 
! package Ada.Strings.Search with SPARK_Mode is
     pragma Preelaborate;
  
+    --  The ghost function Match tells whether the slice of Source starting at
+    --  From and of length Pattern'Length matches with Pattern with respect to
+    --  Mapping. Pattern should be non-empty and the considered slice should be
+    --  fully included in Source'Range.
+ 
+    function Match
+      (Source  : String;
+       Pattern : String;
+       Mapping : Maps.Character_Mapping_Function;
+       From    : Integer) return Boolean
+    is
+       (for all K in Pattern'Range =>
+          Pattern (K) = Mapping (Source (From + (K - Pattern'First))))
+    with
+      Ghost,
+      Pre    => Mapping /= null
+        and then Pattern'Length > 0
+        and then Source'Length > 0
+        and then From in Source'First .. Source'Last - (Pattern'Length - 1),
+      Global => null;
+ 
+    function Match
+      (Source  : String;
+       Pattern : String;
+       Mapping : Maps.Character_Mapping;
+       From    : Integer) return Boolean
+    is
+       (for all K in Pattern'Range =>
+          Pattern (K) =
+            Ada.Strings.Maps.Value
+              (Mapping, Source (From + (K - Pattern'First))))
+    with
+      Ghost,
+      Pre    => Pattern'Length > 0
+        and then Source'Length > 0
+        and then From in Source'First .. Source'Last - (Pattern'Length - 1),
+      Global => null;
+ 
+    function Is_Identity
+      (Mapping : Maps.Character_Mapping) return Boolean
+    with
+      Post   => (if Is_Identity'Result then
+                 (for all K in Character =>
+                    Ada.Strings.Maps.Value (Mapping, K) = K)),
+      Global => null;
+ 
     function Index
       (Source  : String;
        Pattern : String;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
!    with
!      Pre            => Pattern'Length > 0,
! 
!      Post           => Index'Result in 0 | Source'Range,
!      Contract_Cases =>
! 
!        --  If Source is the empty string, then 0 is returned
! 
!        (Source'Length = 0 => Index'Result = 0,
! 
!         --  If some slice of Source matches Pattern, then a valid index is
!         --  returned.
! 
!         Source'Length > 0
!           and then
!             (for some J in
!                Source'First .. Source'Last - (Pattern'Length - 1) =>
!                  Match (Source, Pattern, Mapping, J))
!         =>
! 
!           --  The result is in the considered range of Source
! 
!           Index'Result in Source'First .. Source'Last - (Pattern'Length - 1)
! 
!             --  The slice beginning at the returned index matches Pattern
! 
!             and then Match (Source, Pattern, Mapping, Index'Result)
! 
!             --  The result is the smallest or largest index which satisfies
!             --  the matching, respectively when Going = Forward and Going =
!             --  Backward.
! 
!             and then
!               (for all J in Source'Range =>
!                  (if (if Going = Forward
!                       then J <= Index'Result - 1
!                       else J - 1 in Index'Result
!                                     .. Source'Last - Pattern'Length)
!                   then not (Match (Source, Pattern, Mapping, J)))),
! 
!         --  Otherwise, 0 is returned
! 
!         others => Index'Result = 0),
!      Global         => null;
  
     function Index
       (Source  : String;
        Pattern : String;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural
!    with
!      Pre            => Pattern'Length > 0 and then Mapping /= null,
!      Post           => Index'Result in 0 | Source'Range,
!      Contract_Cases =>
! 
!        --  If Source is the null string, then 0 is returned
! 
!        (Source'Length = 0 => Index'Result = 0,
! 
!         --  If some slice of Source matches Pattern, then a valid index is
!         --  returned.
! 
!         Source'Length > 0 and then
!         (for some J in Source'First .. Source'Last - (Pattern'Length - 1) =>
!              Match (Source, Pattern, Mapping, J))
!         =>
! 
!           --  The result is in the considered range of Source
! 
!           Index'Result in Source'First .. Source'Last - (Pattern'Length - 1)
! 
!             --  The slice beginning at the returned index matches Pattern
! 
!             and then Match (Source, Pattern, Mapping, Index'Result)
! 
!             --  The result is the smallest or largest index which satisfies
!             --  the matching, respectively when Going = Forward and Going =
!             --  Backward.
! 
!             and then
!               (for all J in Source'Range =>
!                  (if (if Going = Forward
!                       then J <= Index'Result - 1
!                       else J - 1 in Index'Result
!                                     .. Source'Last - Pattern'Length)
!                   then not (Match (Source, Pattern, Mapping, J)))),
! 
!         --  Otherwise, 0 is returned
! 
!         others => Index'Result = 0),
!      Global         => null;
  
     function Index
       (Source : String;
        Set    : Maps.Character_Set;
        Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural
!    with
!      Post           => Index'Result in 0 | Source'Range,
!      Contract_Cases =>
! 
!         --  If no character of Source satisfies the property Test on Set, then
!         --  0 is returned.
! 
!        ((for all C of Source =>
!            (Test = Inside) /= Ada.Strings.Maps.Is_In (C, Set))
!         =>
!           Index'Result = 0,
! 
!         --  Otherwise, an index in the range of Source is returned
! 
!         others =>
! 
!           --  The result is in the range of Source
! 
!           Index'Result in Source'Range
! 
!             --  The character at the returned index satisfies the property
!             --  Test on Set.
! 
!             and then (Test = Inside)
!               = Ada.Strings.Maps.Is_In (Source (Index'Result), Set)
! 
!             --  The result is the smallest or largest index which satisfies
!             --  the property, respectively when Going = Forward and Going =
!             --  Backward.
! 
!             and then
!               (for all J in Source'Range =>
!                  (if J /= Index'Result
!                        and then (J < Index'Result) = (Going = Forward)
!                   then (Test = Inside)
!                        /= Ada.Strings.Maps.Is_In (Source (J), Set)))),
!      Global         => null;
  
     function Index
       (Source  : String;
        Pattern : String;
        From    : Positive;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
!    with
!      Pre            => Pattern'Length > 0
!        and then (if Source'Length > 0 then From in Source'Range),
! 
!      Post           => Index'Result in 0 | Source'Range,
!      Contract_Cases =>
! 
!        --  If Source is the empty string, then 0 is returned
! 
!        (Source'Length = 0 => Index'Result = 0,
! 
!         --  If some slice of Source matches Pattern, then a valid index is
!         --  returned.
! 
!         Source'Length > 0
!           and then
!             (for some J in
!               (if Going = Forward then From else Source'First)
!               .. (if Going = Forward then Source'Last else From)
!                - (Pattern'Length - 1) =>
!               Match (Source, Pattern, Mapping, J))
!         =>
! 
!           --  The result is in the considered range of Source
! 
!           Index'Result in
!             (if Going = Forward then From else Source'First)
!             .. (if Going = Forward then Source'Last else From)
!               - (Pattern'Length - 1)
! 
!             --  The slice beginning at the returned index matches Pattern
! 
!             and then Match (Source, Pattern, Mapping, Index'Result)
! 
!             --  The result is the smallest or largest index which satisfies
!             --  the matching, respectively when Going = Forward and Going =
!             --  Backward.
! 
!             and then
!               (for all J in Source'Range =>
!                  (if (if Going = Forward
!                       then J in From .. Index'Result - 1
!                       else J - 1 in Index'Result
!                                     .. From - Pattern'Length)
!                   then not (Match (Source, Pattern, Mapping, J)))),
! 
!         --  Otherwise, 0 is returned
! 
!         others => Index'Result = 0),
!      Global         => null;
  
     function Index
       (Source  : String;
        Pattern : String;
        From    : Positive;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural
!    with
!      Pre            => Pattern'Length > 0
!        and then Mapping /= null
!        and then (if Source'Length > 0 then From in Source'Range),
! 
!      Post           => Index'Result in 0 | Source'Range,
!      Contract_Cases =>
! 
!        --  If Source is the empty string, then 0 is returned
! 
!        (Source'Length = 0 => Index'Result = 0,
! 
!         --  If some slice of Source matches Pattern, then a valid index is
!         --  returned.
! 
!         Source'Length > 0
!           and then
!             (for some J in
!               (if Going = Forward then From else Source'First)
!               .. (if Going = Forward then Source'Last else From)
!                - (Pattern'Length - 1) =>
!               Match (Source, Pattern, Mapping, J))
!         =>
! 
!           --  The result is in the considered range of Source
! 
!           Index'Result in
!             (if Going = Forward then From else Source'First)
!             .. (if Going = Forward then Source'Last else From)
!               - (Pattern'Length - 1)
! 
!             --  The slice beginning at the returned index matches Pattern
! 
!             and then Match (Source, Pattern, Mapping, Index'Result)
! 
!             --  The result is the smallest or largest index which satisfies
!             --  the matching, respectively when Going = Forward and Going =
!             --  Backwards.
! 
!             and then
!               (for all J in Source'Range =>
!                  (if (if Going = Forward
!                       then J in From .. Index'Result - 1
!                       else J - 1 in Index'Result
!                                     .. From - Pattern'Length)
!                   then not (Match (Source, Pattern, Mapping, J)))),
! 
!         --  Otherwise, 0 is returned
! 
!         others => Index'Result = 0),
!      Global         => null;
  
     function Index
       (Source  : String;
        Set     : Maps.Character_Set;
        From    : Positive;
        Test    : Membership := Inside;
!       Going   : Direction := Forward) return Natural
!    with
!      Pre            => (if Source'Length > 0 then From in Source'Range),
!      Post           => Index'Result in 0 | Source'Range,
!      Contract_Cases =>
! 
!         --  If Source is the empty string, or no character of the considered
!         --  slice of Source satisfies the property Test on Set, then 0 is
!         --  returned.
! 
!         (Source'Length = 0
!           or else
!             (for all J in Source'Range =>
!                (if J = From or else (J > From) = (Going = Forward) then
!                   (Test = Inside) /= Ada.Strings.Maps.Is_In (Source (J), Set)))
!         =>
!           Index'Result = 0,
! 
!         --  Otherwise, an index in the considered range of Source is returned
! 
!         others =>
! 
!           --  The result is in the considered range of Source
! 
!           Index'Result in Source'Range
!             and then (Index'Result = From
!                        or else
!                          (Index'Result > From) = (Going = Forward))
! 
!             --  The character at the returned index satisfies the property
!             --  Test on Set
! 
!             and then
!               (Test = Inside)
!               = Ada.Strings.Maps.Is_In (Source (Index'Result), Set)
! 
!             --  The result is the smallest or largest index which satisfies
!             --  the property, respectively when Going = Forward and Going =
!             --  Backward.
! 
!             and then
!               (for all J in Source'Range =>
!                  (if J /= Index'Result
!                     and then (J < Index'Result) = (Going = Forward)
!                     and then (J = From
!                                 or else (J > From) = (Going = Forward))
!                   then (Test = Inside)
!                        /= Ada.Strings.Maps.Is_In (Source (J), Set)))),
!      Global         => null;
  
     function Index_Non_Blank
       (Source : String;
!       Going  : Direction := Forward) return Natural
!    with
!      Post           => Index_Non_Blank'Result in 0 | Source'Range,
!      Contract_Cases =>
! 
!         --  If all characters of Source are Space characters, then 0 is
!         --  returned.
! 
!        ((for all C of Source => C = ' ') => Index_Non_Blank'Result = 0,
! 
!         --  Otherwise, a valid index is returned
! 
!         others                           =>
! 
!           --  The result is in the range of Source
! 
!           Index_Non_Blank'Result in Source'Range
! 
!             --  The character at the returned index is not a Space character
! 
!             and then Source (Index_Non_Blank'Result) /= ' '
! 
!             --  The result is the smallest or largest index which is not a
!             --  Space character, respectively when Going = Forward and
!             --  Going = Backward.
! 
!             and then
!               (for all J in Source'Range =>
!                  (if J /= Index_Non_Blank'Result
!                        and then (J < Index_Non_Blank'Result)
!                               = (Going = Forward)
!                   then Source (J) = ' '))),
!      Global         => null;
  
     function Index_Non_Blank
       (Source : String;
        From   : Positive;
!       Going  : Direction := Forward) return Natural
!    with
!      Pre            => (if Source'Length /= 0 then From in Source'Range),
!      Post           => Index_Non_Blank'Result in 0 | Source'Range,
!      Contract_Cases =>
! 
!         --  If Source is the null string, or all characters in the considered
!         --  slice of Source are Space characters, then 0 is returned.
! 
!         (Source'Length = 0
!           or else
!             (for all J in Source'Range =>
!                (if J = From or else (J > From) = (Going = Forward) then
!                   Source (J) = ' '))
!         =>
!           Index_Non_Blank'Result = 0,
! 
!         --  Otherwise, a valid index is returned
! 
!         others =>
! 
!           --  The result is in the considered range of Source
! 
!           Index_Non_Blank'Result in Source'Range
!             and then (Index_Non_Blank'Result = From
!                         or else (Index_Non_Blank'Result > From)
!                                 = (Going = Forward))
! 
!             --  The character at the returned index is not a Space character
! 
!             and then Source (Index_Non_Blank'Result) /= ' '
! 
!             --  The result is the smallest or largest index which is not a
!             --  Space character, respectively when Going = Forward and
!             --  Going = Backward.
! 
!             and then
!               (for all J in Source'Range =>
!                  (if J /= Index_Non_Blank'Result
!                        and then (J < Index_Non_Blank'Result)
!                                 = (Going = Forward)
!                        and then (J = From or else (J > From)
!                                 = (Going = Forward))
!                   then Source (J) = ' '))),
!      Global         => null;
  
     function Count
       (Source  : String;
        Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
!    with
!      Pre    => Pattern'Length > 0,
!      Global => null;
  
     function Count
       (Source  : String;
        Pattern : String;
!       Mapping : Maps.Character_Mapping_Function) return Natural
!    with
!      Pre    => Pattern'Length > 0 and then Mapping /= null,
!      Global => null;
  
     function Count
       (Source : String;
!       Set    : Maps.Character_Set) return Natural
!    with
!      Global => null;
  
     procedure Find_Token
       (Source : String;
*************** private package Ada.Strings.Search is
*** 109,121 ****
        From   : Positive;
        Test   : Membership;
        First  : out Positive;
!       Last   : out Natural);
  
     procedure Find_Token
       (Source : String;
        Set    : Maps.Character_Set;
        Test   : Membership;
        First  : out Positive;
!       Last   : out Natural);
  
  end Ada.Strings.Search;
--- 522,625 ----
        From   : Positive;
        Test   : Membership;
        First  : out Positive;
!       Last   : out Natural)
!    with
!      Pre            => (if Source'Length /= 0 then From in Source'Range),
!      Contract_Cases =>
! 
!         --  If Source is the empty string, or if no character of the considered
!         --  slice of Source satisfies the property Test on Set, then First is
!         --  set to From and Last is set to 0.
! 
!        (Source'Length = 0
!          or else
!            (for all C of Source (From .. Source'Last) =>
!               (Test = Inside) /= Ada.Strings.Maps.Is_In (C, Set))
!         =>
!           First = From and then Last = 0,
! 
!         --  Otherwise, First and Last are set to valid indexes
! 
!         others =>
! 
!           --  First and Last are in the considered range of Source
! 
!           First in From .. Source'Last
!             and then Last in First .. Source'Last
! 
!             --  No character between From and First satisfies the property Test
!             --  on Set.
! 
!             and then
!               (for all C of Source (From .. First - 1) =>
!                  (Test = Inside) /= Ada.Strings.Maps.Is_In (C, Set))
! 
!             --  All characters between First and Last satisfy the property Test
!             --  on Set.
! 
!             and then
!               (for all C of Source (First .. Last) =>
!                  (Test = Inside) = Ada.Strings.Maps.Is_In (C, Set))
! 
!             --  If Last is not Source'Last, then the character at position
!             --  Last + 1 does not satify the property Test on Set.
! 
!             and then
!               (if Last < Source'Last
!                then (Test = Inside)
!                  /= Ada.Strings.Maps.Is_In (Source (Last + 1), Set))),
!      Global         => null;
  
     procedure Find_Token
       (Source : String;
        Set    : Maps.Character_Set;
        Test   : Membership;
        First  : out Positive;
!       Last   : out Natural)
!    with
!      Pre            => Source'First > 0,
!      Contract_Cases =>
! 
!         --  If Source is the empty string, or if no character of Source
!         --  satisfies the property Test on Set, then First is set to From
!         --  and Last is set to 0.
! 
!        (Source'Length = 0
!          or else
!            (for all C of Source =>
!               (Test = Inside) /= Ada.Strings.Maps.Is_In (C, Set))
!         =>
!           First = Source'First and then Last = 0,
! 
!         --  Otherwise, First and Last are set to valid indexes
! 
!         others =>
! 
!           --  First and Last are in the considered range of Source
! 
!           First in Source'Range
!             and then Last in First .. Source'Last
! 
!             --  No character before First satisfies the property Test on Set
! 
!             and then
!               (for all C of Source (Source'First .. First - 1) =>
!                  (Test = Inside) /= Ada.Strings.Maps.Is_In (C, Set))
! 
!             --  All characters between First and Last satisfy the property Test
!             --  on Set.
! 
!             and then
!               (for all C of Source (First .. Last) =>
!                  (Test = Inside) = Ada.Strings.Maps.Is_In (C, Set))
! 
!             --  If Last is not Source'Last, then the character at position
!             --  Last + 1 does not satify the property Test on Set.
! 
!             and then
!               (if Last < Source'Last
!                then (Test = Inside)
!                  /= Ada.Strings.Maps.Is_In (Source (Last + 1), Set))),
!      Global => null;
  
  end Ada.Strings.Search;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strsto.ads gcc-12.1.0/gcc/ada/libgnat/a-strsto.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-strsto.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strsto.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020, Free Software Foundation, Inc.           --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020-2022, Free Software Foundation, Inc.      --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strsup.adb gcc-12.1.0/gcc/ada/libgnat/a-strsup.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-strsup.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strsup.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
***************
*** 29,38 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Ada.Strings.Maps;   use Ada.Strings.Maps;
! with Ada.Strings.Search;
  
! package body Ada.Strings.Superbounded is
  
     ------------
     -- Concat --
--- 29,45 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Ghost code, loop invariants and assertions in this unit are meant for
! --  analysis only, not for run-time checking, as it would be too costly
! --  otherwise. This is enforced by setting the assertion policy to Ignore.
  
! pragma Assertion_Policy (Ghost          => Ignore,
!                          Loop_Invariant => Ignore,
!                          Assert         => Ignore);
! 
! with Ada.Strings.Maps; use Ada.Strings.Maps;
! 
! package body Ada.Strings.Superbounded with SPARK_Mode is
  
     ------------
     -- Concat --
*************** package body Ada.Strings.Superbounded is
*** 53,61 ****
                 raise Ada.Strings.Length_Error;
              end if;
  
-             Result.Current_Length := Nlen;
              Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
!             Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen);
           end;
        end return;
     end Concat;
--- 60,72 ----
                 raise Ada.Strings.Length_Error;
              end if;
  
              Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
! 
!             if Rlen > 0 then
!                Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen);
!             end if;
! 
!             Result.Current_Length := Nlen;
           end;
        end return;
     end Concat;
*************** package body Ada.Strings.Superbounded is
*** 74,82 ****
                 raise Ada.Strings.Length_Error;
              end if;
  
-             Result.Current_Length := Nlen;
              Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
!             Result.Data (Llen + 1 .. Nlen) := Right;
           end;
        end return;
     end Concat;
--- 85,97 ----
                 raise Ada.Strings.Length_Error;
              end if;
  
              Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
! 
!             if Right'Length > 0 then
!                Result.Data (Llen + 1 .. Nlen) := Super_String_Data (Right);
!             end if;
! 
!             Result.Current_Length := Nlen;
           end;
        end return;
     end Concat;
*************** package body Ada.Strings.Superbounded is
*** 97,105 ****
                 raise Ada.Strings.Length_Error;
              end if;
  
              Result.Current_Length := Nlen;
-             Result.Data (1 .. Llen) := Left;
-             Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen);
           end;
        end return;
     end Concat;
--- 112,124 ----
                 raise Ada.Strings.Length_Error;
              end if;
  
+             Result.Data (1 .. Llen) := Super_String_Data (Left);
+ 
+             if Rlen > 0 then
+                Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen);
+             end if;
+ 
              Result.Current_Length := Nlen;
           end;
        end return;
     end Concat;
*************** package body Ada.Strings.Superbounded is
*** 117,125 ****
                 raise Ada.Strings.Length_Error;
              end if;
  
-             Result.Current_Length := Llen + 1;
              Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
!             Result.Data (Result.Current_Length) := Right;
           end;
        end return;
     end Concat;
--- 136,144 ----
                 raise Ada.Strings.Length_Error;
              end if;
  
              Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
!             Result.Data (Llen + 1) := Right;
!             Result.Current_Length := Llen + 1;
           end;
        end return;
     end Concat;
*************** package body Ada.Strings.Superbounded is
*** 137,146 ****
                 raise Ada.Strings.Length_Error;
              end if;
  
-             Result.Current_Length := Rlen + 1;
              Result.Data (1) := Left;
!             Result.Data (2 .. Result.Current_Length) :=
!               Right.Data (1 .. Rlen);
           end;
        end return;
     end Concat;
--- 156,164 ----
                 raise Ada.Strings.Length_Error;
              end if;
  
              Result.Data (1) := Left;
!             Result.Data (2 .. Rlen + 1) := Right.Data (1 .. Rlen);
!             Result.Current_Length := Rlen + 1;
           end;
        end return;
     end Concat;
*************** package body Ada.Strings.Superbounded is
*** 154,162 ****
        Right : Super_String) return Boolean
     is
     begin
!       return Left.Current_Length = Right.Current_Length
!         and then Left.Data (1 .. Left.Current_Length) =
!                    Right.Data (1 .. Right.Current_Length);
     end "=";
  
     function Equal
--- 172,178 ----
        Right : Super_String) return Boolean
     is
     begin
!       return Super_To_String (Left) = Super_To_String (Right);
     end "=";
  
     function Equal
*************** package body Ada.Strings.Superbounded is
*** 164,171 ****
        Right : String) return Boolean
     is
     begin
!       return Left.Current_Length = Right'Length
!         and then Left.Data (1 .. Left.Current_Length) = Right;
     end Equal;
  
     function Equal
--- 180,186 ----
        Right : String) return Boolean
     is
     begin
!       return Super_To_String (Left) = Right;
     end Equal;
  
     function Equal
*************** package body Ada.Strings.Superbounded is
*** 173,180 ****
        Right : Super_String) return Boolean
     is
     begin
!       return Left'Length = Right.Current_Length
!         and then Left = Right.Data (1 .. Right.Current_Length);
     end Equal;
  
     -------------
--- 188,194 ----
        Right : Super_String) return Boolean
     is
     begin
!       return Left = Super_To_String (Right);
     end Equal;
  
     -------------
*************** package body Ada.Strings.Superbounded is
*** 186,193 ****
        Right : Super_String) return Boolean
     is
     begin
!       return Left.Data (1 .. Left.Current_Length) >
!                Right.Data (1 .. Right.Current_Length);
     end Greater;
  
     function Greater
--- 200,206 ----
        Right : Super_String) return Boolean
     is
     begin
!       return Super_To_String (Left) > Super_To_String (Right);
     end Greater;
  
     function Greater
*************** package body Ada.Strings.Superbounded is
*** 195,201 ****
        Right : String) return Boolean
     is
     begin
!       return Left.Data (1 .. Left.Current_Length) > Right;
     end Greater;
  
     function Greater
--- 208,214 ----
        Right : String) return Boolean
     is
     begin
!       return Super_To_String (Left) > Right;
     end Greater;
  
     function Greater
*************** package body Ada.Strings.Superbounded is
*** 203,209 ****
        Right : Super_String) return Boolean
     is
     begin
!       return Left > Right.Data (1 .. Right.Current_Length);
     end Greater;
  
     ----------------------
--- 216,222 ----
        Right : Super_String) return Boolean
     is
     begin
!       return Left > Super_To_String (Right);
     end Greater;
  
     ----------------------
*************** package body Ada.Strings.Superbounded is
*** 215,222 ****
        Right : Super_String) return Boolean
     is
     begin
!       return Left.Data (1 .. Left.Current_Length) >=
!                Right.Data (1 .. Right.Current_Length);
     end Greater_Or_Equal;
  
     function Greater_Or_Equal
--- 228,234 ----
        Right : Super_String) return Boolean
     is
     begin
!       return Super_To_String (Left) >= Super_To_String (Right);
     end Greater_Or_Equal;
  
     function Greater_Or_Equal
*************** package body Ada.Strings.Superbounded is
*** 224,230 ****
        Right : String) return Boolean
     is
     begin
!       return Left.Data (1 .. Left.Current_Length) >= Right;
     end Greater_Or_Equal;
  
     function Greater_Or_Equal
--- 236,242 ----
        Right : String) return Boolean
     is
     begin
!       return Super_To_String (Left) >= Right;
     end Greater_Or_Equal;
  
     function Greater_Or_Equal
*************** package body Ada.Strings.Superbounded is
*** 232,238 ****
        Right : Super_String) return Boolean
     is
     begin
!       return Left >= Right.Data (1 .. Right.Current_Length);
     end Greater_Or_Equal;
  
     ----------
--- 244,250 ----
        Right : Super_String) return Boolean
     is
     begin
!       return Left >= Super_To_String (Right);
     end Greater_Or_Equal;
  
     ----------
*************** package body Ada.Strings.Superbounded is
*** 244,251 ****
        Right : Super_String) return Boolean
     is
     begin
!       return Left.Data (1 .. Left.Current_Length) <
!                Right.Data (1 .. Right.Current_Length);
     end Less;
  
     function Less
--- 256,262 ----
        Right : Super_String) return Boolean
     is
     begin
!       return Super_To_String (Left) < Super_To_String (Right);
     end Less;
  
     function Less
*************** package body Ada.Strings.Superbounded is
*** 253,259 ****
        Right : String) return Boolean
     is
     begin
!       return Left.Data (1 .. Left.Current_Length) < Right;
     end Less;
  
     function Less
--- 264,270 ----
        Right : String) return Boolean
     is
     begin
!       return Super_To_String (Left) < Right;
     end Less;
  
     function Less
*************** package body Ada.Strings.Superbounded is
*** 261,267 ****
        Right : Super_String) return Boolean
     is
     begin
!       return Left < Right.Data (1 .. Right.Current_Length);
     end Less;
  
     -------------------
--- 272,278 ----
        Right : Super_String) return Boolean
     is
     begin
!       return Left < Super_To_String (Right);
     end Less;
  
     -------------------
*************** package body Ada.Strings.Superbounded is
*** 273,280 ****
        Right : Super_String) return Boolean
     is
     begin
!       return Left.Data (1 .. Left.Current_Length) <=
!                Right.Data (1 .. Right.Current_Length);
     end Less_Or_Equal;
  
     function Less_Or_Equal
--- 284,290 ----
        Right : Super_String) return Boolean
     is
     begin
!       return Super_To_String (Left) <= Super_To_String (Right);
     end Less_Or_Equal;
  
     function Less_Or_Equal
*************** package body Ada.Strings.Superbounded is
*** 282,288 ****
        Right : String) return Boolean
     is
     begin
!       return Left.Data (1 .. Left.Current_Length) <= Right;
     end Less_Or_Equal;
  
     function Less_Or_Equal
--- 292,298 ----
        Right : String) return Boolean
     is
     begin
!       return Super_To_String (Left) <= Right;
     end Less_Or_Equal;
  
     function Less_Or_Equal
*************** package body Ada.Strings.Superbounded is
*** 290,296 ****
        Right : Super_String) return Boolean
     is
     begin
!       return Left <= Right.Data (1 .. Right.Current_Length);
     end Less_Or_Equal;
  
     ----------------------
--- 300,306 ----
        Right : Super_String) return Boolean
     is
     begin
!       return Left <= Super_To_String (Right);
     end Less_Or_Equal;
  
     ----------------------
*************** package body Ada.Strings.Superbounded is
*** 307,326 ****
  
     begin
        if Slen <= Max_Length then
           Target.Current_Length := Slen;
-          Target.Data (1 .. Slen) := Source;
  
        else
           case Drop is
              when Strings.Right =>
                 Target.Current_Length := Max_Length;
-                Target.Data (1 .. Max_Length) :=
-                  Source (Source'First .. Source'First - 1 + Max_Length);
  
              when Strings.Left =>
                 Target.Current_Length := Max_Length;
-                Target.Data (1 .. Max_Length) :=
-                  Source (Source'Last - (Max_Length - 1) .. Source'Last);
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
--- 317,336 ----
  
     begin
        if Slen <= Max_Length then
+          Target.Data (1 .. Slen) := Super_String_Data (Source);
           Target.Current_Length := Slen;
  
        else
           case Drop is
              when Strings.Right =>
+                Target.Data (1 .. Max_Length) := Super_String_Data
+                  (Source (Source'First .. Source'First - 1 + Max_Length));
                 Target.Current_Length := Max_Length;
  
              when Strings.Left =>
+                Target.Data (1 .. Max_Length) := Super_String_Data
+                  (Source (Source'Last - (Max_Length - 1) .. Source'Last));
                 Target.Current_Length := Max_Length;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
*************** package body Ada.Strings.Superbounded is
*** 343,359 ****
        Result : Super_String (Max_Length);
        Llen   : constant Natural := Left.Current_Length;
        Rlen   : constant Natural := Right.Current_Length;
-       Nlen   : constant Natural := Llen + Rlen;
  
     begin
!       if Nlen <= Max_Length then
!          Result.Current_Length := Nlen;
           Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
-          Result.Data (Llen + 1 .. Nlen) := Right.Data (1 .. Rlen);
  
!       else
!          Result.Current_Length := Max_Length;
  
           case Drop is
              when Strings.Right =>
                 if Llen >= Max_Length then -- only case is Llen = Max_Length
--- 353,370 ----
        Result : Super_String (Max_Length);
        Llen   : constant Natural := Left.Current_Length;
        Rlen   : constant Natural := Right.Current_Length;
  
     begin
!       if Llen <= Max_Length - Rlen then
           Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
  
!          if Rlen > 0 then
!             Result.Data (Llen + 1 .. Llen + Rlen) := Right.Data (1 .. Rlen);
!          end if;
  
+          Result.Current_Length := Llen + Rlen;
+ 
+       else
           case Drop is
              when Strings.Right =>
                 if Llen >= Max_Length then -- only case is Llen = Max_Length
*************** package body Ada.Strings.Superbounded is
*** 379,384 ****
--- 390,397 ----
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Result.Current_Length := Max_Length;
        end if;
  
        return Result;
*************** package body Ada.Strings.Superbounded is
*** 392,407 ****
        Max_Length : constant Positive := Source.Max_Length;
        Llen       : constant Natural := Source.Current_Length;
        Rlen       : constant Natural := New_Item.Current_Length;
-       Nlen       : constant Natural := Llen + Rlen;
  
     begin
!       if Nlen <= Max_Length then
!          Source.Current_Length := Nlen;
!          Source.Data (Llen + 1 .. Nlen) := New_Item.Data (1 .. Rlen);
  
        else
-          Source.Current_Length := Max_Length;
- 
           case Drop is
              when Strings.Right =>
                 if Llen < Max_Length then
--- 405,419 ----
        Max_Length : constant Positive := Source.Max_Length;
        Llen       : constant Natural := Source.Current_Length;
        Rlen       : constant Natural := New_Item.Current_Length;
  
     begin
!       if Llen <= Max_Length - Rlen then
!          if Rlen > 0 then
!             Source.Data (Llen + 1 .. Llen + Rlen) := New_Item.Data (1 .. Rlen);
!             Source.Current_Length := Llen + Rlen;
!          end if;
  
        else
           case Drop is
              when Strings.Right =>
                 if Llen < Max_Length then
*************** package body Ada.Strings.Superbounded is
*** 423,428 ****
--- 435,442 ----
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Source.Current_Length := Max_Length;
        end if;
  
     end Super_Append;
*************** package body Ada.Strings.Superbounded is
*** 438,454 ****
        Result : Super_String (Max_Length);
        Llen   : constant Natural := Left.Current_Length;
        Rlen   : constant Natural := Right'Length;
-       Nlen   : constant Natural := Llen + Rlen;
  
     begin
!       if Nlen <= Max_Length then
!          Result.Current_Length := Nlen;
           Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
-          Result.Data (Llen + 1 .. Nlen) := Right;
  
!       else
!          Result.Current_Length := Max_Length;
  
           case Drop is
              when Strings.Right =>
                 if Llen >= Max_Length then -- only case is Llen = Max_Length
--- 452,469 ----
        Result : Super_String (Max_Length);
        Llen   : constant Natural := Left.Current_Length;
        Rlen   : constant Natural := Right'Length;
  
     begin
!       if Llen <= Max_Length - Rlen then
           Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
  
!          if Rlen > 0 then
!             Result.Data (Llen + 1 .. Llen + Rlen) := Super_String_Data (Right);
!          end if;
  
+          Result.Current_Length := Llen + Rlen;
+ 
+       else
           case Drop is
              when Strings.Right =>
                 if Llen >= Max_Length then -- only case is Llen = Max_Length
*************** package body Ada.Strings.Superbounded is
*** 456,482 ****
  
                 else
                    Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
!                   Result.Data (Llen + 1 .. Max_Length) :=
!                     Right (Right'First .. Right'First - 1 +
!                              Max_Length - Llen);
  
                 end if;
  
              when Strings.Left =>
                 if Rlen >= Max_Length then
!                   Result.Data (1 .. Max_Length) :=
!                     Right (Right'Last - (Max_Length - 1) .. Right'Last);
  
                 else
                    Result.Data (1 .. Max_Length - Rlen) :=
                      Left.Data (Llen - (Max_Length - Rlen - 1) .. Llen);
                    Result.Data (Max_Length - Rlen + 1 .. Max_Length) :=
!                     Right;
                 end if;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
        end if;
  
        return Result;
--- 471,499 ----
  
                 else
                    Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
!                   Result.Data (Llen + 1 .. Max_Length) := Super_String_Data
!                     (Right
!                        (Right'First .. Right'First - 1 - Llen + Max_Length));
  
                 end if;
  
              when Strings.Left =>
                 if Rlen >= Max_Length then
!                   Result.Data (1 .. Max_Length) := Super_String_Data
!                     (Right (Right'Last - (Max_Length - 1) .. Right'Last));
  
                 else
                    Result.Data (1 .. Max_Length - Rlen) :=
                      Left.Data (Llen - (Max_Length - Rlen - 1) .. Llen);
                    Result.Data (Max_Length - Rlen + 1 .. Max_Length) :=
!                     Super_String_Data (Right);
                 end if;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Result.Current_Length := Max_Length;
        end if;
  
        return Result;
*************** package body Ada.Strings.Superbounded is
*** 490,529 ****
        Max_Length : constant Positive := Source.Max_Length;
        Llen   : constant Natural := Source.Current_Length;
        Rlen   : constant Natural := New_Item'Length;
-       Nlen   : constant Natural := Llen + Rlen;
  
     begin
!       if Nlen <= Max_Length then
!          Source.Current_Length := Nlen;
!          Source.Data (Llen + 1 .. Nlen) := New_Item;
  
        else
-          Source.Current_Length := Max_Length;
- 
           case Drop is
              when Strings.Right =>
                 if Llen < Max_Length then
!                   Source.Data (Llen + 1 .. Max_Length) :=
!                     New_Item (New_Item'First ..
!                                 New_Item'First - 1 + Max_Length - Llen);
                 end if;
  
              when Strings.Left =>
                 if Rlen >= Max_Length then
!                   Source.Data (1 .. Max_Length) :=
!                     New_Item (New_Item'Last - (Max_Length - 1) ..
!                                 New_Item'Last);
  
                 else
                    Source.Data (1 .. Max_Length - Rlen) :=
                      Source.Data (Llen - (Max_Length - Rlen - 1) .. Llen);
                    Source.Data (Max_Length - Rlen + 1 .. Max_Length) :=
!                     New_Item;
                 end if;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
        end if;
  
     end Super_Append;
--- 507,548 ----
        Max_Length : constant Positive := Source.Max_Length;
        Llen   : constant Natural := Source.Current_Length;
        Rlen   : constant Natural := New_Item'Length;
  
     begin
!       if Llen <= Max_Length - Rlen then
!          if Rlen > 0 then
!             Source.Data (Llen + 1 .. Llen + Rlen) :=
!               Super_String_Data (New_Item);
!             Source.Current_Length := Llen + Rlen;
!          end if;
  
        else
           case Drop is
              when Strings.Right =>
                 if Llen < Max_Length then
!                   Source.Data (Llen + 1 .. Max_Length) := Super_String_Data
!                     (New_Item (New_Item'First ..
!                                 New_Item'First - 1 - Llen + Max_Length));
                 end if;
  
              when Strings.Left =>
                 if Rlen >= Max_Length then
!                   Source.Data (1 .. Max_Length) := Super_String_Data
!                     (New_Item (New_Item'Last - (Max_Length - 1) ..
!                                 New_Item'Last));
  
                 else
                    Source.Data (1 .. Max_Length - Rlen) :=
                      Source.Data (Llen - (Max_Length - Rlen - 1) .. Llen);
                    Source.Data (Max_Length - Rlen + 1 .. Max_Length) :=
!                     Super_String_Data (New_Item);
                 end if;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Source.Current_Length := Max_Length;
        end if;
  
     end Super_Append;
*************** package body Ada.Strings.Superbounded is
*** 539,563 ****
        Result     : Super_String (Max_Length);
        Llen       : constant Natural := Left'Length;
        Rlen       : constant Natural := Right.Current_Length;
-       Nlen       : constant Natural := Llen + Rlen;
  
     begin
!       if Nlen <= Max_Length then
!          Result.Current_Length := Nlen;
!          Result.Data (1 .. Llen) := Left;
!          Result.Data (Llen + 1 .. Llen + Rlen) := Right.Data (1 .. Rlen);
  
!       else
!          Result.Current_Length := Max_Length;
  
           case Drop is
              when Strings.Right =>
                 if Llen >= Max_Length then
!                   Result.Data (1 .. Max_Length) :=
!                     Left (Left'First .. Left'First + (Max_Length - 1));
  
                 else
!                   Result.Data (1 .. Llen) := Left;
                    Result.Data (Llen + 1 .. Max_Length) :=
                      Right.Data (1 .. Max_Length - Llen);
                 end if;
--- 558,582 ----
        Result     : Super_String (Max_Length);
        Llen       : constant Natural := Left'Length;
        Rlen       : constant Natural := Right.Current_Length;
  
     begin
!       if Llen <= Max_Length - Rlen then
!          Result.Data (1 .. Llen) := Super_String_Data (Left);
  
!          if Rlen > 0 then
!             Result.Data (Llen + 1 .. Llen + Rlen) := Right.Data (1 .. Rlen);
!          end if;
  
+          Result.Current_Length := Llen + Rlen;
+       else
           case Drop is
              when Strings.Right =>
                 if Llen >= Max_Length then
!                   Result.Data (1 .. Max_Length) := Super_String_Data
!                     (Left (Left'First .. Left'First + (Max_Length - 1)));
  
                 else
!                   Result.Data (1 .. Llen) := Super_String_Data (Left);
                    Result.Data (Llen + 1 .. Max_Length) :=
                      Right.Data (1 .. Max_Length - Llen);
                 end if;
*************** package body Ada.Strings.Superbounded is
*** 568,575 ****
                      Right.Data (Rlen - (Max_Length - 1) .. Rlen);
  
                 else
!                   Result.Data (1 .. Max_Length - Rlen) :=
!                     Left (Left'Last - (Max_Length - Rlen - 1) .. Left'Last);
                    Result.Data (Max_Length - Rlen + 1 .. Max_Length) :=
                      Right.Data (1 .. Rlen);
                 end if;
--- 587,594 ----
                      Right.Data (Rlen - (Max_Length - 1) .. Rlen);
  
                 else
!                   Result.Data (1 .. Max_Length - Rlen) := Super_String_Data
!                     (Left (Left'Last - (Max_Length - Rlen - 1) .. Left'Last));
                    Result.Data (Max_Length - Rlen + 1 .. Max_Length) :=
                      Right.Data (1 .. Rlen);
                 end if;
*************** package body Ada.Strings.Superbounded is
*** 577,582 ****
--- 596,603 ----
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Result.Current_Length := Max_Length;
        end if;
  
        return Result;
*************** package body Ada.Strings.Superbounded is
*** 595,603 ****
  
     begin
        if Llen  < Max_Length then
-          Result.Current_Length := Llen + 1;
           Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
           Result.Data (Llen + 1) := Right;
           return Result;
  
        else
--- 616,624 ----
  
     begin
        if Llen  < Max_Length then
           Result.Data (1 .. Llen) := Left.Data (1 .. Llen);
           Result.Data (Llen + 1) := Right;
+          Result.Current_Length := Llen + 1;
           return Result;
  
        else
*************** package body Ada.Strings.Superbounded is
*** 606,615 ****
                 return Left;
  
              when Strings.Left =>
-                Result.Current_Length := Max_Length;
                 Result.Data (1 .. Max_Length - 1) :=
                   Left.Data (2 .. Max_Length);
                 Result.Data (Max_Length) := Right;
                 return Result;
  
              when Strings.Error =>
--- 627,636 ----
                 return Left;
  
              when Strings.Left =>
                 Result.Data (1 .. Max_Length - 1) :=
                   Left.Data (2 .. Max_Length);
                 Result.Data (Max_Length) := Right;
+                Result.Current_Length := Max_Length;
                 return Result;
  
              when Strings.Error =>
*************** package body Ada.Strings.Superbounded is
*** 628,639 ****
  
     begin
        if Llen  < Max_Length then
-          Source.Current_Length := Llen + 1;
           Source.Data (Llen + 1) := New_Item;
  
        else
-          Source.Current_Length := Max_Length;
- 
           case Drop is
              when Strings.Right =>
                 null;
--- 649,658 ----
  
     begin
        if Llen  < Max_Length then
           Source.Data (Llen + 1) := New_Item;
+          Source.Current_Length := Llen + 1;
  
        else
           case Drop is
              when Strings.Right =>
                 null;
*************** package body Ada.Strings.Superbounded is
*** 663,680 ****
  
     begin
        if Rlen < Max_Length then
-          Result.Current_Length := Rlen + 1;
           Result.Data (1) := Left;
           Result.Data (2 .. Rlen + 1) := Right.Data (1 .. Rlen);
           return Result;
  
        else
           case Drop is
              when Strings.Right =>
-                Result.Current_Length := Max_Length;
                 Result.Data (1) := Left;
                 Result.Data (2 .. Max_Length) :=
                   Right.Data (1 .. Max_Length - 1);
                 return Result;
  
              when Strings.Left =>
--- 682,699 ----
  
     begin
        if Rlen < Max_Length then
           Result.Data (1) := Left;
           Result.Data (2 .. Rlen + 1) := Right.Data (1 .. Rlen);
+          Result.Current_Length := Rlen + 1;
           return Result;
  
        else
           case Drop is
              when Strings.Right =>
                 Result.Data (1) := Left;
                 Result.Data (2 .. Max_Length) :=
                   Right.Data (1 .. Max_Length - 1);
+                Result.Current_Length := Max_Length;
                 return Result;
  
              when Strings.Left =>
*************** package body Ada.Strings.Superbounded is
*** 696,704 ****
        Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
     begin
!       return
!         Search.Count
!           (Source.Data (1 .. Source.Current_Length), Pattern, Mapping);
     end Super_Count;
  
     function Super_Count
--- 715,721 ----
        Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
     begin
!       return Search.Count (Super_To_String (Source), Pattern, Mapping);
     end Super_Count;
  
     function Super_Count
*************** package body Ada.Strings.Superbounded is
*** 707,715 ****
        Mapping : Maps.Character_Mapping_Function) return Natural
     is
     begin
!       return
!         Search.Count
!           (Source.Data (1 .. Source.Current_Length), Pattern, Mapping);
     end Super_Count;
  
     function Super_Count
--- 724,730 ----
        Mapping : Maps.Character_Mapping_Function) return Natural
     is
     begin
!       return Search.Count (Super_To_String (Source), Pattern, Mapping);
     end Super_Count;
  
     function Super_Count
*************** package body Ada.Strings.Superbounded is
*** 717,723 ****
        Set    : Maps.Character_Set) return Natural
     is
     begin
!       return Search.Count (Source.Data (1 .. Source.Current_Length), Set);
     end Super_Count;
  
     ------------------
--- 732,738 ----
        Set    : Maps.Character_Set) return Natural
     is
     begin
!       return Search.Count (Super_To_String (Source), Set);
     end Super_Count;
  
     ------------------
*************** package body Ada.Strings.Superbounded is
*** 737,755 ****
        if Num_Delete <= 0 then
           return Source;
  
!       elsif From > Slen + 1 then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
-          Result.Current_Length := From - 1;
           Result.Data (1 .. From - 1) := Source.Data (1 .. From - 1);
           return Result;
  
        else
-          Result.Current_Length := Slen - Num_Delete;
           Result.Data (1 .. From - 1) := Source.Data (1 .. From - 1);
!          Result.Data (From .. Result.Current_Length) :=
             Source.Data (Through + 1 .. Slen);
           return Result;
        end if;
     end Super_Delete;
--- 752,770 ----
        if Num_Delete <= 0 then
           return Source;
  
!       elsif From - 1 > Slen then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
           Result.Data (1 .. From - 1) := Source.Data (1 .. From - 1);
+          Result.Current_Length := From - 1;
           return Result;
  
        else
           Result.Data (1 .. From - 1) := Source.Data (1 .. From - 1);
!          Result.Data (From .. Slen - Num_Delete) :=
             Source.Data (Through + 1 .. Slen);
+          Result.Current_Length := Slen - Num_Delete;
           return Result;
        end if;
     end Super_Delete;
*************** package body Ada.Strings.Superbounded is
*** 766,772 ****
        if Num_Delete <= 0 then
           return;
  
!       elsif From > Slen + 1 then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
--- 781,787 ----
        if Num_Delete <= 0 then
           return;
  
!       elsif From - 1 > Slen then
           raise Ada.Strings.Index_Error;
  
        elsif Through >= Slen then
*************** package body Ada.Strings.Superbounded is
*** 779,800 ****
        end if;
     end Super_Delete;
  
-    -------------------
-    -- Super_Element --
-    -------------------
- 
-    function Super_Element
-      (Source : Super_String;
-       Index  : Positive) return Character
-    is
-    begin
-       if Index <= Source.Current_Length then
-          return Source.Data (Index);
-       else
-          raise Strings.Index_Error;
-       end if;
-    end Super_Element;
- 
     ----------------------
     -- Super_Find_Token --
     ----------------------
--- 794,799 ----
*************** package body Ada.Strings.Superbounded is
*** 809,815 ****
     is
     begin
        Search.Find_Token
!         (Source.Data (From .. Source.Current_Length), Set, Test, First, Last);
     end Super_Find_Token;
  
     procedure Super_Find_Token
--- 808,814 ----
     is
     begin
        Search.Find_Token
!         (Super_To_String (Source), Set, From, Test, First, Last);
     end Super_Find_Token;
  
     procedure Super_Find_Token
*************** package body Ada.Strings.Superbounded is
*** 820,827 ****
        Last   : out Natural)
     is
     begin
!       Search.Find_Token
!         (Source.Data (1 .. Source.Current_Length), Set, Test, First, Last);
     end Super_Find_Token;
  
     ----------------
--- 819,825 ----
        Last   : out Natural)
     is
     begin
!       Search.Find_Token (Super_To_String (Source), Set, Test, First, Last);
     end Super_Find_Token;
  
     ----------------
*************** package body Ada.Strings.Superbounded is
*** 841,876 ****
  
     begin
        if Npad <= 0 then
-          Result.Current_Length := Count;
           Result.Data (1 .. Count) := Source.Data (1 .. Count);
  
        elsif Count <= Max_Length then
-          Result.Current_Length := Count;
           Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!          Result.Data (Slen + 1 .. Count) := (others => Pad);
  
        else
-          Result.Current_Length := Max_Length;
- 
           case Drop is
              when Strings.Right =>
                 Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!                Result.Data (Slen + 1 .. Max_Length) := (others => Pad);
  
              when Strings.Left =>
                 if Npad >= Max_Length then
!                   Result.Data := (others => Pad);
  
                 else
                    Result.Data (1 .. Max_Length - Npad) :=
                      Source.Data (Count - Max_Length + 1 .. Slen);
                    Result.Data (Max_Length - Npad + 1 .. Max_Length) :=
!                     (others => Pad);
                 end if;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
        end if;
  
        return Result;
--- 839,877 ----
  
     begin
        if Npad <= 0 then
           Result.Data (1 .. Count) := Source.Data (1 .. Count);
+          Result.Current_Length := Count;
  
        elsif Count <= Max_Length then
           Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!          Result.Data (Slen + 1 .. Count) := [others => Pad];
!          Result.Current_Length := Count;
  
        else
           case Drop is
              when Strings.Right =>
                 Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
! 
!                if Slen < Max_Length then
!                   Result.Data (Slen + 1 .. Max_Length) := [others => Pad];
!                end if;
  
              when Strings.Left =>
                 if Npad >= Max_Length then
!                   Result.Data := [others => Pad];
  
                 else
                    Result.Data (1 .. Max_Length - Npad) :=
                      Source.Data (Count - Max_Length + 1 .. Slen);
                    Result.Data (Max_Length - Npad + 1 .. Max_Length) :=
!                     [others => Pad];
                 end if;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Result.Current_Length := Max_Length;
        end if;
  
        return Result;
*************** package body Ada.Strings.Superbounded is
*** 885,924 ****
        Max_Length : constant Positive := Source.Max_Length;
        Slen       : constant Natural  := Source.Current_Length;
        Npad       : constant Integer  := Count - Slen;
!       Temp       : String (1 .. Max_Length);
  
     begin
        if Npad <= 0 then
           Source.Current_Length := Count;
  
        elsif Count <= Max_Length then
           Source.Current_Length := Count;
-          Source.Data (Slen + 1 .. Count) := (others => Pad);
  
        else
-          Source.Current_Length := Max_Length;
- 
           case Drop is
              when Strings.Right =>
!                Source.Data (Slen + 1 .. Max_Length) := (others => Pad);
  
              when Strings.Left =>
                 if Npad > Max_Length then
!                   Source.Data := (others => Pad);
  
                 else
                    Temp := Source.Data;
                    Source.Data (1 .. Max_Length - Npad) :=
                      Temp (Count - Max_Length + 1 .. Slen);
! 
!                   for J in Max_Length - Npad + 1 .. Max_Length loop
!                      Source.Data (J) := Pad;
!                   end loop;
                 end if;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
        end if;
     end Super_Head;
  
--- 886,925 ----
        Max_Length : constant Positive := Source.Max_Length;
        Slen       : constant Natural  := Source.Current_Length;
        Npad       : constant Integer  := Count - Slen;
!       Temp       : Super_String_Data (1 .. Max_Length);
  
     begin
        if Npad <= 0 then
           Source.Current_Length := Count;
  
        elsif Count <= Max_Length then
+          Source.Data (Slen + 1 .. Count) := [others => Pad];
           Source.Current_Length := Count;
  
        else
           case Drop is
              when Strings.Right =>
!                if Slen < Max_Length then
!                   Source.Data (Slen + 1 .. Max_Length) := [others => Pad];
!                end if;
  
              when Strings.Left =>
                 if Npad > Max_Length then
!                   Source.Data := [others => Pad];
  
                 else
                    Temp := Source.Data;
                    Source.Data (1 .. Max_Length - Npad) :=
                      Temp (Count - Max_Length + 1 .. Slen);
!                   Source.Data (Max_Length - Npad + 1 .. Max_Length) :=
!                     [others => Pad];
                 end if;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Source.Current_Length := Max_Length;
        end if;
     end Super_Head;
  
*************** package body Ada.Strings.Superbounded is
*** 933,940 ****
        Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
     begin
!       return Search.Index
!         (Source.Data (1 .. Source.Current_Length), Pattern, Going, Mapping);
     end Super_Index;
  
     function Super_Index
--- 934,940 ----
        Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     is
     begin
!       return Search.Index (Super_To_String (Source), Pattern, Going, Mapping);
     end Super_Index;
  
     function Super_Index
*************** package body Ada.Strings.Superbounded is
*** 944,951 ****
        Mapping : Maps.Character_Mapping_Function) return Natural
     is
     begin
!       return Search.Index
!         (Source.Data (1 .. Source.Current_Length), Pattern, Going, Mapping);
     end Super_Index;
  
     function Super_Index
--- 944,950 ----
        Mapping : Maps.Character_Mapping_Function) return Natural
     is
     begin
!       return Search.Index (Super_To_String (Source), Pattern, Going, Mapping);
     end Super_Index;
  
     function Super_Index
*************** package body Ada.Strings.Superbounded is
*** 955,962 ****
        Going  : Strings.Direction  := Strings.Forward) return Natural
     is
     begin
!       return Search.Index
!         (Source.Data (1 .. Source.Current_Length), Set, Test, Going);
     end Super_Index;
  
     function Super_Index
--- 954,960 ----
        Going  : Strings.Direction  := Strings.Forward) return Natural
     is
     begin
!       return Search.Index (Super_To_String (Source), Set, Test, Going);
     end Super_Index;
  
     function Super_Index
*************** package body Ada.Strings.Superbounded is
*** 968,975 ****
     is
     begin
        return Search.Index
!         (Source.Data (1 .. Source.Current_Length),
!          Pattern, From, Going, Mapping);
     end Super_Index;
  
     function Super_Index
--- 966,972 ----
     is
     begin
        return Search.Index
!         (Super_To_String (Source), Pattern, From, Going, Mapping);
     end Super_Index;
  
     function Super_Index
*************** package body Ada.Strings.Superbounded is
*** 981,988 ****
     is
     begin
        return Search.Index
!         (Source.Data (1 .. Source.Current_Length),
!          Pattern, From, Going, Mapping);
     end Super_Index;
  
     function Super_Index
--- 978,984 ----
     is
     begin
        return Search.Index
!         (Super_To_String (Source), Pattern, From, Going, Mapping);
     end Super_Index;
  
     function Super_Index
*************** package body Ada.Strings.Superbounded is
*** 993,1000 ****
        Going  : Direction := Forward) return Natural
     is
     begin
!       return Search.Index
!         (Source.Data (1 .. Source.Current_Length), Set, From, Test, Going);
     end Super_Index;
  
     ---------------------------
--- 989,1003 ----
        Going  : Direction := Forward) return Natural
     is
     begin
!       return Result : Natural do
!          Result :=
!            Search.Index (Super_To_String (Source), Set, From, Test, Going);
!          pragma Assert
!            (if (for all J in 1 .. Super_Length (Source) =>
!                   (if J = From or else (J > From) = (Going = Forward) then
!                      (Test = Inside) /= Maps.Is_In (Source.Data (J), Set)))
!             then Result = 0);
!       end return;
     end Super_Index;
  
     ---------------------------
*************** package body Ada.Strings.Superbounded is
*** 1006,1014 ****
        Going  : Strings.Direction := Strings.Forward) return Natural
     is
     begin
!       return
!         Search.Index_Non_Blank
!           (Source.Data (1 .. Source.Current_Length), Going);
     end Super_Index_Non_Blank;
  
     function Super_Index_Non_Blank
--- 1009,1015 ----
        Going  : Strings.Direction := Strings.Forward) return Natural
     is
     begin
!       return Search.Index_Non_Blank (Super_To_String (Source), Going);
     end Super_Index_Non_Blank;
  
     function Super_Index_Non_Blank
*************** package body Ada.Strings.Superbounded is
*** 1017,1025 ****
        Going  : Direction := Forward) return Natural
     is
     begin
!       return
!         Search.Index_Non_Blank
!           (Source.Data (1 .. Source.Current_Length), From, Going);
     end Super_Index_Non_Blank;
  
     ------------------
--- 1018,1024 ----
        Going  : Direction := Forward) return Natural
     is
     begin
!       return Search.Index_Non_Blank (Super_To_String (Source), From, Going);
     end Super_Index_Non_Blank;
  
     ------------------
*************** package body Ada.Strings.Superbounded is
*** 1031,1090 ****
        Before   : Positive;
        New_Item : String;
        Drop     : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
        Slen       : constant Natural := Source.Current_Length;
        Nlen       : constant Natural := New_Item'Length;
-       Tlen       : constant Natural := Slen + Nlen;
        Blen       : constant Natural := Before - 1;
        Alen       : constant Integer := Slen - Blen;
!       Droplen    : constant Integer := Tlen - Max_Length;
  
-       --  Tlen is the length of the total string before possible truncation.
        --  Blen, Alen are the lengths of the before and after pieces of the
!       --  source string.
  
     begin
        if Alen < 0 then
           raise Ada.Strings.Index_Error;
  
        elsif Droplen <= 0 then
-          Result.Current_Length := Tlen;
           Result.Data (1 .. Blen) := Source.Data (1 .. Blen);
!          Result.Data (Before .. Before + Nlen - 1) := New_Item;
!          Result.Data (Before + Nlen .. Tlen) :=
!            Source.Data (Before .. Slen);
  
!       else
!          Result.Current_Length := Max_Length;
  
           case Drop is
              when Strings.Right =>
                 Result.Data (1 .. Blen) := Source.Data (1 .. Blen);
  
!                if Droplen > Alen then
!                   Result.Data (Before .. Max_Length) :=
!                     New_Item (New_Item'First
!                                 .. New_Item'First + Max_Length - Before);
                 else
!                   Result.Data (Before .. Before + Nlen - 1) := New_Item;
                    Result.Data (Before + Nlen .. Max_Length) :=
                      Source.Data (Before .. Slen - Droplen);
                 end if;
  
              when Strings.Left =>
!                Result.Data (Max_Length - (Alen - 1) .. Max_Length) :=
!                  Source.Data (Before .. Slen);
  
!                if Droplen >= Blen then
!                   Result.Data (1 .. Max_Length - Alen) :=
!                     New_Item (New_Item'Last - (Max_Length - Alen) + 1
!                                 .. New_Item'Last);
                 else
!                   Result.Data
!                     (Blen - Droplen + 1 .. Max_Length - Alen) :=
!                     New_Item;
                    Result.Data (1 .. Blen - Droplen) :=
                      Source.Data (Droplen + 1 .. Blen);
                 end if;
--- 1030,1100 ----
        Before   : Positive;
        New_Item : String;
        Drop     : Strings.Truncation := Strings.Error) return Super_String
+    with SPARK_Mode => Off
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
        Slen       : constant Natural := Source.Current_Length;
        Nlen       : constant Natural := New_Item'Length;
        Blen       : constant Natural := Before - 1;
        Alen       : constant Integer := Slen - Blen;
!       Droplen    : constant Integer := Slen - Max_Length + Nlen;
  
        --  Blen, Alen are the lengths of the before and after pieces of the
!       --  source string. The number of dropped characters is Natural'Max (0,
!       --  Droplen).
  
     begin
        if Alen < 0 then
           raise Ada.Strings.Index_Error;
  
        elsif Droplen <= 0 then
           Result.Data (1 .. Blen) := Source.Data (1 .. Blen);
!          Result.Data (Before .. Before - 1 + Nlen) :=
!            Super_String_Data (New_Item);
  
!          if Before <= Slen then
!             Result.Data (Before + Nlen .. Slen + Nlen) :=
!               Source.Data (Before .. Slen);
!          end if;
  
+          Result.Current_Length := Slen + Nlen;
+ 
+       else
           case Drop is
              when Strings.Right =>
                 Result.Data (1 .. Blen) := Source.Data (1 .. Blen);
  
!                if Droplen >= Alen then
!                   Result.Data (Before .. Max_Length) := Super_String_Data
!                     (New_Item (New_Item'First
!                                .. New_Item'First - Before + Max_Length));
!                   pragma Assert
!                     (String (Result.Data (Before .. Max_Length)) =
!                        New_Item (New_Item'First
!                                  .. New_Item'First - Before + Max_Length));
                 else
!                   Result.Data (Before .. Before - 1 + Nlen) :=
!                     Super_String_Data (New_Item);
                    Result.Data (Before + Nlen .. Max_Length) :=
                      Source.Data (Before .. Slen - Droplen);
                 end if;
  
              when Strings.Left =>
!                if Alen > 0 then
!                   Result.Data (Max_Length - (Alen - 1) .. Max_Length) :=
!                     Source.Data (Before .. Slen);
!                end if;
  
!                if Droplen > Blen then
!                   if Alen < Max_Length then
!                      Result.Data (1 .. Max_Length - Alen) := Super_String_Data
!                        (New_Item (New_Item'Last - (Max_Length - Alen) + 1
!                                   .. New_Item'Last));
!                   end if;
                 else
!                   Result.Data (Blen - Droplen + 1 .. Max_Length - Alen) :=
!                     Super_String_Data (New_Item);
                    Result.Data (1 .. Blen - Droplen) :=
                      Source.Data (Droplen + 1 .. Blen);
                 end if;
*************** package body Ada.Strings.Superbounded is
*** 1092,1097 ****
--- 1102,1109 ----
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Result.Current_Length := Max_Length;
        end if;
  
        return Result;
*************** package body Ada.Strings.Superbounded is
*** 1111,1125 ****
        Source := Super_Insert (Source, Before, New_Item, Drop);
     end Super_Insert;
  
-    ------------------
-    -- Super_Length --
-    ------------------
- 
-    function Super_Length (Source : Super_String) return Natural is
-    begin
-       return Source.Current_Length;
-    end Super_Length;
- 
     ---------------------
     -- Super_Overwrite --
     ---------------------
--- 1123,1128 ----
*************** package body Ada.Strings.Superbounded is
*** 1132,1192 ****
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
-       Endpos     : constant Natural  := Position + New_Item'Length - 1;
        Slen       : constant Natural  := Source.Current_Length;
        Droplen    : Natural;
  
     begin
!       if Position > Slen + 1 then
           raise Ada.Strings.Index_Error;
  
        elsif New_Item'Length = 0 then
           return Source;
  
!       elsif Endpos <= Slen then
!          Result.Current_Length := Source.Current_Length;
           Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!          Result.Data (Position .. Endpos) := New_Item;
           return Result;
  
!       elsif Endpos <= Max_Length then
!          Result.Current_Length := Endpos;
           Result.Data (1 .. Position - 1) := Source.Data (1 .. Position - 1);
!          Result.Data (Position .. Endpos) := New_Item;
           return Result;
  
        else
!          Result.Current_Length := Max_Length;
!          Droplen := Endpos - Max_Length;
  
           case Drop is
              when Strings.Right =>
                 Result.Data (1 .. Position - 1) :=
                   Source.Data (1 .. Position - 1);
  
!                Result.Data (Position .. Max_Length) :=
!                  New_Item (New_Item'First .. New_Item'Last - Droplen);
!                return Result;
  
              when Strings.Left =>
                 if New_Item'Length >= Max_Length then
!                   Result.Data (1 .. Max_Length) :=
!                     New_Item (New_Item'Last - Max_Length + 1 ..
!                                 New_Item'Last);
!                   return Result;
  
                 else
                    Result.Data (1 .. Max_Length - New_Item'Length) :=
                      Source.Data (Droplen + 1 .. Position - 1);
                    Result.Data
                      (Max_Length - New_Item'Length + 1 .. Max_Length) :=
!                     New_Item;
!                   return Result;
                 end if;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
        end if;
     end Super_Overwrite;
  
--- 1135,1195 ----
     is
        Max_Length : constant Positive := Source.Max_Length;
        Result     : Super_String (Max_Length);
        Slen       : constant Natural  := Source.Current_Length;
        Droplen    : Natural;
  
     begin
!       if Position - 1 > Slen then
           raise Ada.Strings.Index_Error;
  
        elsif New_Item'Length = 0 then
           return Source;
  
!       elsif Position - 1 <= Slen - New_Item'Length then
           Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!          Result.Data (Position .. Position - 1 + New_Item'Length) :=
!            Super_String_Data (New_Item);
!          Result.Current_Length := Source.Current_Length;
           return Result;
  
!       elsif Position - 1 <= Max_Length - New_Item'Length then
           Result.Data (1 .. Position - 1) := Source.Data (1 .. Position - 1);
!          Result.Data (Position .. Position - 1 + New_Item'Length) :=
!            Super_String_Data (New_Item);
!          Result.Current_Length := Position - 1 + New_Item'Length;
           return Result;
  
        else
!          Droplen := Position - 1 - Max_Length + New_Item'Length;
  
           case Drop is
              when Strings.Right =>
                 Result.Data (1 .. Position - 1) :=
                   Source.Data (1 .. Position - 1);
  
!                Result.Data (Position .. Max_Length) := Super_String_Data
!                  (New_Item (New_Item'First .. New_Item'Last - Droplen));
  
              when Strings.Left =>
                 if New_Item'Length >= Max_Length then
!                   Result.Data (1 .. Max_Length) := Super_String_Data
!                     (New_Item (New_Item'Last - Max_Length + 1 ..
!                                 New_Item'Last));
  
                 else
                    Result.Data (1 .. Max_Length - New_Item'Length) :=
                      Source.Data (Droplen + 1 .. Position - 1);
                    Result.Data
                      (Max_Length - New_Item'Length + 1 .. Max_Length) :=
!                     Super_String_Data (New_Item);
                 end if;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Result.Current_Length := Max_Length;
+          return Result;
        end if;
     end Super_Overwrite;
  
*************** package body Ada.Strings.Superbounded is
*** 1195,1244 ****
        Position  : Positive;
        New_Item  : String;
        Drop      : Strings.Truncation := Strings.Error)
     is
        Max_Length : constant Positive := Source.Max_Length;
-       Endpos     : constant Positive := Position + New_Item'Length - 1;
        Slen       : constant Natural  := Source.Current_Length;
        Droplen    : Natural;
  
     begin
!       if Position > Slen + 1 then
           raise Ada.Strings.Index_Error;
  
!       elsif Endpos <= Slen then
!          Source.Data (Position .. Endpos) := New_Item;
  
!       elsif Endpos <= Max_Length then
!          Source.Data (Position .. Endpos) := New_Item;
!          Source.Current_Length := Endpos;
  
        else
!          Source.Current_Length := Max_Length;
!          Droplen := Endpos - Max_Length;
  
           case Drop is
              when Strings.Right =>
!                Source.Data (Position .. Max_Length) :=
!                  New_Item (New_Item'First .. New_Item'Last - Droplen);
  
              when Strings.Left =>
                 if New_Item'Length > Max_Length then
!                   Source.Data (1 .. Max_Length) :=
!                     New_Item (New_Item'Last - Max_Length + 1 ..
!                                 New_Item'Last);
  
                 else
                    Source.Data (1 .. Max_Length - New_Item'Length) :=
                      Source.Data (Droplen + 1 .. Position - 1);
- 
                    Source.Data
                      (Max_Length - New_Item'Length + 1 .. Max_Length) :=
!                     New_Item;
                 end if;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
        end if;
     end Super_Overwrite;
  
--- 1198,1249 ----
        Position  : Positive;
        New_Item  : String;
        Drop      : Strings.Truncation := Strings.Error)
+    with SPARK_Mode => Off
     is
        Max_Length : constant Positive := Source.Max_Length;
        Slen       : constant Natural  := Source.Current_Length;
        Droplen    : Natural;
  
     begin
!       if Position - 1 > Slen then
           raise Ada.Strings.Index_Error;
  
!       elsif Position - 1 <= Slen - New_Item'Length then
!          Source.Data (Position .. Position - 1 + New_Item'Length) :=
!            Super_String_Data (New_Item);
  
!       elsif Position - 1 <= Max_Length - New_Item'Length then
!          Source.Data (Position .. Position - 1 + New_Item'Length) :=
!            Super_String_Data (New_Item);
!          Source.Current_Length := Position - 1 + New_Item'Length;
  
        else
!          Droplen := Position - 1 - Max_Length + New_Item'Length;
  
           case Drop is
              when Strings.Right =>
!                Source.Data (Position .. Max_Length) := Super_String_Data
!                  (New_Item (New_Item'First .. New_Item'Last - Droplen));
  
              when Strings.Left =>
                 if New_Item'Length > Max_Length then
!                   Source.Data (1 .. Max_Length) := Super_String_Data
!                     (New_Item
!                       (New_Item'Last - Max_Length + 1 .. New_Item'Last));
  
                 else
                    Source.Data (1 .. Max_Length - New_Item'Length) :=
                      Source.Data (Droplen + 1 .. Position - 1);
                    Source.Data
                      (Max_Length - New_Item'Length + 1 .. Max_Length) :=
!                     Super_String_Data (New_Item);
                 end if;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Source.Current_Length := Max_Length;
        end if;
     end Super_Overwrite;
  
*************** package body Ada.Strings.Superbounded is
*** 1269,1280 ****
        High   : Natural;
        By     : String;
        Drop   : Strings.Truncation := Strings.Error) return Super_String
     is
        Max_Length : constant Positive := Source.Max_Length;
        Slen       : constant Natural  := Source.Current_Length;
  
     begin
!       if Low > Slen + 1 then
           raise Strings.Index_Error;
  
        elsif High < Low then
--- 1274,1286 ----
        High   : Natural;
        By     : String;
        Drop   : Strings.Truncation := Strings.Error) return Super_String
+    with SPARK_Mode => Off
     is
        Max_Length : constant Positive := Source.Max_Length;
        Slen       : constant Natural  := Source.Current_Length;
  
     begin
!       if Low - 1 > Slen then
           raise Strings.Index_Error;
  
        elsif High < Low then
*************** package body Ada.Strings.Superbounded is
*** 1282,1332 ****
  
        else
           declare
!             Blen    : constant Natural := Natural'Max (0, Low - 1);
              Alen    : constant Natural := Natural'Max (0, Slen - High);
!             Tlen    : constant Natural := Blen + By'Length + Alen;
!             Droplen : constant Integer := Tlen - Max_Length;
              Result  : Super_String (Max_Length);
  
!             --  Tlen is the total length of the result string before any
!             --  truncation. Blen and Alen are the lengths of the pieces
!             --  of the original string that end up in the result string
!             --  before and after the replaced slice.
  
           begin
              if Droplen <= 0 then
-                Result.Current_Length := Tlen;
                 Result.Data (1 .. Blen) := Source.Data (1 .. Blen);
!                Result.Data (Low .. Low + By'Length - 1) := By;
!                Result.Data (Low + By'Length .. Tlen) :=
!                  Source.Data (High + 1 .. Slen);
  
!             else
!                Result.Current_Length := Max_Length;
  
                 case Drop is
                    when Strings.Right =>
                       Result.Data (1 .. Blen) := Source.Data (1 .. Blen);
  
!                      if Droplen > Alen then
!                         Result.Data (Low .. Max_Length) :=
!                           By (By'First .. By'First + Max_Length - Low);
                       else
!                         Result.Data (Low .. Low + By'Length - 1) := By;
                          Result.Data (Low + By'Length .. Max_Length) :=
                            Source.Data (High + 1 .. Slen - Droplen);
                       end if;
  
                    when Strings.Left =>
!                      Result.Data (Max_Length - (Alen - 1) .. Max_Length) :=
!                        Source.Data (High + 1 .. Slen);
  
                       if Droplen >= Blen then
                          Result.Data (1 .. Max_Length - Alen) :=
!                           By (By'Last - (Max_Length - Alen) + 1 .. By'Last);
                       else
                          Result.Data
!                           (Blen - Droplen + 1 .. Max_Length - Alen) := By;
                          Result.Data (1 .. Blen - Droplen) :=
                            Source.Data (Droplen + 1 .. Blen);
                       end if;
--- 1288,1345 ----
  
        else
           declare
!             Blen    : constant Natural := Low - 1;
              Alen    : constant Natural := Natural'Max (0, Slen - High);
!             Droplen : constant Integer := Blen + Alen - Max_Length + By'Length;
              Result  : Super_String (Max_Length);
  
!             --  Blen and Alen are the lengths of the pieces of the original
!             --  string that end up in the result string before and after the
!             --  replaced slice. The number of dropped characters is Natural'Max
!             --  (0, Droplen).
  
           begin
              if Droplen <= 0 then
                 Result.Data (1 .. Blen) := Source.Data (1 .. Blen);
!                Result.Data (Low .. Blen + By'Length) :=
!                  Super_String_Data (By);
  
!                if Alen > 0 then
!                   Result.Data (Low + By'Length .. Blen + By'Length + Alen) :=
!                     Source.Data (High + 1 .. Slen);
!                end if;
! 
!                Result.Current_Length := Blen + By'Length + Alen;
  
+             else
                 case Drop is
                    when Strings.Right =>
                       Result.Data (1 .. Blen) := Source.Data (1 .. Blen);
  
!                      if Droplen >= Alen then
!                         Result.Data (Low .. Max_Length) := Super_String_Data
!                           (By (By'First .. By'First - Low + Max_Length));
                       else
!                         Result.Data (Low .. Low - 1 + By'Length) :=
!                           Super_String_Data (By);
                          Result.Data (Low + By'Length .. Max_Length) :=
                            Source.Data (High + 1 .. Slen - Droplen);
                       end if;
  
                    when Strings.Left =>
!                      if Alen > 0 then
!                         Result.Data (Max_Length - (Alen - 1) .. Max_Length) :=
!                           Source.Data (High + 1 .. Slen);
!                      end if;
  
                       if Droplen >= Blen then
                          Result.Data (1 .. Max_Length - Alen) :=
!                           Super_String_Data (By
!                             (By'Last - (Max_Length - Alen) + 1 .. By'Last));
                       else
                          Result.Data
!                           (Blen - Droplen + 1 .. Max_Length - Alen) :=
!                             Super_String_Data (By);
                          Result.Data (1 .. Blen - Droplen) :=
                            Source.Data (Droplen + 1 .. Blen);
                       end if;
*************** package body Ada.Strings.Superbounded is
*** 1334,1339 ****
--- 1347,1354 ----
                    when Strings.Error =>
                       raise Ada.Strings.Length_Error;
                 end case;
+ 
+                Result.Current_Length := Max_Length;
              end if;
  
              return Result;
*************** package body Ada.Strings.Superbounded is
*** 1370,1385 ****
  
     begin
        if Count <= Max_Length then
           Result.Current_Length := Count;
  
        elsif Drop = Strings.Error then
           raise Ada.Strings.Length_Error;
  
        else
           Result.Current_Length := Max_Length;
        end if;
  
-       Result.Data (1 .. Result.Current_Length) := (others => Item);
        return Result;
     end Super_Replicate;
  
--- 1385,1401 ----
  
     begin
        if Count <= Max_Length then
+          Result.Data (1 .. Count) := [others => Item];
           Result.Current_Length := Count;
  
        elsif Drop = Strings.Error then
           raise Ada.Strings.Length_Error;
  
        else
+          Result.Data (1 .. Max_Length) := [others => Item];
           Result.Current_Length := Max_Length;
        end if;
  
        return Result;
     end Super_Replicate;
  
*************** package body Ada.Strings.Superbounded is
*** 1389,1440 ****
        Drop       : Truncation := Error;
        Max_Length : Positive) return Super_String
     is
-       Length : constant Integer := Count * Item'Length;
        Result : Super_String (Max_Length);
!       Indx   : Positive;
  
!    begin
!       if Length <= Max_Length then
!          Result.Current_Length := Length;
  
!          if Length > 0 then
!             Indx := 1;
  
              for J in 1 .. Count loop
!                Result.Data (Indx .. Indx + Item'Length - 1) := Item;
!                Indx := Indx + Item'Length;
              end loop;
           end if;
  
!       else
!          Result.Current_Length := Max_Length;
  
           case Drop is
              when Strings.Right =>
!                Indx := 1;
  
!                while Indx + Item'Length <= Max_Length + 1 loop
!                   Result.Data (Indx .. Indx + Item'Length - 1) := Item;
!                   Indx := Indx + Item'Length;
                 end loop;
  
!                Result.Data (Indx .. Max_Length) :=
!                  Item (Item'First .. Item'First + Max_Length - Indx);
  
              when Strings.Left =>
                 Indx := Max_Length;
  
!                while Indx - Item'Length >= 1 loop
!                   Result.Data (Indx - (Item'Length - 1) .. Indx) := Item;
!                   Indx := Indx - Item'Length;
                 end loop;
  
                 Result.Data (1 .. Indx) :=
!                  Item (Item'Last - Indx + 1 .. Item'Last);
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
        end if;
  
        return Result;
--- 1405,1607 ----
        Drop       : Truncation := Error;
        Max_Length : Positive) return Super_String
     is
        Result : Super_String (Max_Length);
!       Indx   : Natural;
!       Ilen   : constant Natural := Item'Length;
  
!       --  Parts of the proof involving manipulations with the modulo operator
!       --  are complicated for the prover and can't be done automatically in
!       --  the global subprogram. That's why we isolate them in these two ghost
!       --  lemmas.
  
!       procedure Lemma_Mod (K : Natural; Q : Natural) with
!         Ghost,
!         Pre  => Ilen /= 0
!           and then Q mod Ilen = 0
!           and then K - Q in 0 .. Ilen - 1,
!         Post => K mod Ilen = K - Q;
!       --  Lemma_Mod is applied to an index considered in Lemma_Split to prove
!       --  that it has the right value modulo Item'Length.
! 
!       procedure Lemma_Mod_Zero (X : Natural) with
!         Ghost,
!         Pre  => Ilen /= 0
!           and then X mod Ilen = 0
!           and then X <= Natural'Last - Ilen,
!         Post => (X + Ilen) mod Ilen = 0;
!       --  Lemma_Mod_Zero is applied to prove that the length of the range
!       --  of indexes considered in the loop, when dropping on the Left, is
!       --  a multiple of Item'Length.
! 
!       procedure Lemma_Split (Going : Direction) with
!         Ghost,
!         Pre  =>
!           Ilen /= 0
!             and then Indx in 0 .. Max_Length - Ilen
!             and then
!               (if Going = Forward
!                then Indx mod Ilen = 0
!                else (Max_Length - Indx - Ilen) mod Ilen = 0)
!             and then Result.Data (Indx + 1 .. Indx + Ilen)'Initialized
!             and then String (Result.Data (Indx + 1 .. Indx + Ilen)) = Item,
!         Post =>
!           (if Going = Forward then
!              (for all J in Indx + 1 .. Indx + Ilen =>
!                 Result.Data (J) = Item (Item'First + (J - 1) mod Ilen))
!            else
!              (for all J in Indx + 1 .. Indx + Ilen =>
!                 Result.Data (J) =
!                   Item (Item'Last - (Max_Length - J) mod Ilen)));
!       --  Lemma_Split is used after Result.Data (Indx + 1 .. Indx + Ilen) is
!       --  updated to Item and concludes that the characters match for each
!       --  index when taken modulo Item'Length, as the considered slice starts
!       --  at index 1 (or ends at index Max_Length, if Going = Backward) modulo
!       --  Item'Length.
! 
!       ---------------
!       -- Lemma_Mod --
!       ---------------
! 
!       procedure Lemma_Mod (K : Natural; Q : Natural) is null;
! 
!       --------------------
!       -- Lemma_Mod_Zero --
!       --------------------
! 
!       procedure Lemma_Mod_Zero (X : Natural) is null;
! 
!       -----------------
!       -- Lemma_Split --
!       -----------------
! 
!       procedure Lemma_Split (Going : Direction) is
!       begin
!          if Going = Forward then
!             for K in Indx + 1 .. Indx + Ilen loop
!                Lemma_Mod (K - 1, Indx);
!                pragma Loop_Invariant
!                  (for all J in Indx + 1 .. K =>
!                     Result.Data (J) = Item (Item'First + (J - 1) mod Ilen));
!             end loop;
!          else
!             for K in Indx + 1 .. Indx + Ilen loop
!                Lemma_Mod (Max_Length - K, Max_Length - Indx - Ilen);
!                pragma Loop_Invariant
!                  (for all J in Indx + 1 .. K =>
!                     Result.Data (J) =
!                       Item (Item'Last - (Max_Length - J) mod Ilen));
!             end loop;
!          end if;
!       end Lemma_Split;
! 
!    begin
!       if Count = 0 or else Ilen <= Max_Length / Count then
!          if Count * Ilen > 0 then
!             Indx := 0;
  
              for J in 1 .. Count loop
!                Result.Data (Indx + 1 .. Indx + Ilen) :=
!                  Super_String_Data (Item);
!                pragma Assert
!                  (for all K in 1 .. Ilen =>
!                     Result.Data (Indx + K) = Item (Item'First - 1 + K));
!                pragma Assert
!                  (String (Result.Data (Indx + 1 .. Indx + Ilen)) = Item);
!                Lemma_Split (Forward);
!                Indx := Indx + Ilen;
!                pragma Loop_Invariant (Indx = J * Ilen);
!                pragma Loop_Invariant (Result.Data (1 .. Indx)'Initialized);
!                pragma Loop_Invariant
!                  (for all K in 1 .. Indx =>
!                     Result.Data (K) =
!                       Item (Item'First + (K - 1) mod Ilen));
              end loop;
           end if;
  
!          Result.Current_Length := Count * Ilen;
  
+       else
           case Drop is
              when Strings.Right =>
!                Indx := 0;
  
!                while Indx < Max_Length - Ilen loop
!                   Result.Data (Indx + 1 .. Indx + Ilen) :=
!                     Super_String_Data (Item);
!                   pragma Assert
!                     (for all K in 1 .. Ilen =>
!                        Result.Data (Indx + K) = Item (Item'First - 1 + K));
!                   pragma Assert
!                     (String (Result.Data (Indx + 1 .. Indx + Ilen)) = Item);
!                   Lemma_Split (Forward);
!                   Indx := Indx + Ilen;
!                   pragma Loop_Invariant (Indx mod Ilen = 0);
!                   pragma Loop_Invariant (Indx in 0 .. Max_Length - 1);
!                   pragma Loop_Invariant (Result.Data (1 .. Indx)'Initialized);
!                   pragma Loop_Invariant
!                     (for all K in 1 .. Indx =>
!                        Result.Data (K) =
!                          Item (Item'First + (K - 1) mod Ilen));
                 end loop;
  
!                Result.Data (Indx + 1 .. Max_Length) := Super_String_Data
!                  (Item (Item'First .. Item'First + (Max_Length - Indx - 1)));
!                pragma Assert
!                  (for all J in Indx + 1 .. Max_Length =>
!                     Result.Data (J) = Item (Item'First - 1 - Indx + J));
! 
!                for J in Indx + 1 .. Max_Length loop
!                   Lemma_Mod (J - 1, Indx);
!                   pragma Loop_Invariant
!                     (for all K in 1 .. J =>
!                        Result.Data (K) =
!                          Item (Item'First + (K - 1) mod Ilen));
!                end loop;
  
              when Strings.Left =>
                 Indx := Max_Length;
  
!                while Indx > Ilen loop
!                   Indx := Indx - Ilen;
!                   Result.Data (Indx + 1 .. Indx + Ilen) :=
!                     Super_String_Data (Item);
!                   pragma Assert
!                     (for all K in 1 .. Ilen =>
!                        Result.Data (Indx + K) = Item (Item'First - 1 + K));
!                   pragma Assert
!                     (String (Result.Data (Indx + 1 .. Indx + Ilen)) = Item);
!                   Lemma_Split (Backward);
!                   Lemma_Mod_Zero (Max_Length - Indx - Ilen);
!                   pragma Loop_Invariant
!                     ((Max_Length - Indx) mod Ilen = 0);
!                   pragma Loop_Invariant (Indx in 1 .. Max_Length);
!                   pragma Loop_Invariant
!                     (Result.Data (Indx + 1 .. Max_Length)'Initialized);
!                   pragma Loop_Invariant
!                     (for all K in Indx + 1 .. Max_Length =>
!                        Result.Data (K) =
!                          Item (Item'Last - (Max_Length - K) mod Ilen));
                 end loop;
  
                 Result.Data (1 .. Indx) :=
!                  Super_String_Data (Item (Item'Last - Indx + 1 .. Item'Last));
!                pragma Assert
!                  (for all J in 1 .. Indx =>
!                     Result.Data (J) = Item (Item'Last - Indx + J));
! 
!                for J in reverse 1 .. Indx loop
!                   Lemma_Mod (Max_Length - J, Max_Length - Indx);
!                   pragma Loop_Invariant
!                     (for all K in J .. Max_Length =>
!                        Result.Data (K) =
!                          Item (Item'Last - (Max_Length - K) mod Ilen));
!                end loop;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Result.Current_Length := Max_Length;
        end if;
  
        return Result;
*************** package body Ada.Strings.Superbounded is
*** 1447,1457 ****
     is
     begin
        return
!         Super_Replicate
!           (Count,
!            Item.Data (1 .. Item.Current_Length),
!            Drop,
!            Item.Max_Length);
     end Super_Replicate;
  
     -----------------
--- 1614,1620 ----
     is
     begin
        return
!         Super_Replicate (Count, Super_To_String (Item), Drop, Item.Max_Length);
     end Super_Replicate;
  
     -----------------
*************** package body Ada.Strings.Superbounded is
*** 1461,1502 ****
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
-       High   : Natural) return String
-    is
-    begin
-       --  Note: test of High > Length is in accordance with AI95-00128
- 
-       return R : String (Low .. High) do
-          if Low > Source.Current_Length + 1
-            or else High > Source.Current_Length
-          then
-             raise Index_Error;
-          end if;
- 
-          --  Note: in this case, superflat bounds are not a problem, we just
-          --  get the null string in accordance with normal Ada slice rules.
- 
-          R := Source.Data (Low .. High);
-       end return;
-    end Super_Slice;
- 
-    function Super_Slice
-      (Source : Super_String;
-       Low    : Positive;
        High   : Natural) return Super_String
     is
     begin
        return Result : Super_String (Source.Max_Length) do
!          if Low > Source.Current_Length + 1
             or else High > Source.Current_Length
           then
              raise Index_Error;
           end if;
  
!          --  Note: the Max operation here deals with the superflat case
! 
!          Result.Current_Length := Integer'Max (0, High - Low + 1);
!          Result.Data (1 .. Result.Current_Length) := Source.Data (Low .. High);
        end return;
     end Super_Slice;
  
--- 1624,1643 ----
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
        High   : Natural) return Super_String
     is
     begin
        return Result : Super_String (Source.Max_Length) do
!          if Low - 1 > Source.Current_Length
             or else High > Source.Current_Length
           then
              raise Index_Error;
           end if;
  
!          if High >= Low then
!             Result.Data (1 .. High - Low + 1) := Source.Data (Low .. High);
!             Result.Current_Length := High - Low + 1;
!          end if;
        end return;
     end Super_Slice;
  
*************** package body Ada.Strings.Superbounded is
*** 1507,1522 ****
        High   : Natural)
     is
     begin
!       if Low > Source.Current_Length + 1
          or else High > Source.Current_Length
        then
           raise Index_Error;
        end if;
  
!       --  Note: the Max operation here deals with the superflat case
! 
!       Target.Current_Length := Integer'Max (0, High - Low + 1);
!       Target.Data (1 .. Target.Current_Length) := Source.Data (Low .. High);
     end Super_Slice;
  
     ----------------
--- 1648,1665 ----
        High   : Natural)
     is
     begin
!       if Low - 1 > Source.Current_Length
          or else High > Source.Current_Length
        then
           raise Index_Error;
        end if;
  
!       if High >= Low then
!          Target.Data (1 .. High - Low + 1) := Source.Data (Low .. High);
!          Target.Current_Length := High - Low + 1;
!       else
!          Target.Current_Length := 0;
!       end if;
     end Super_Slice;
  
     ----------------
*************** package body Ada.Strings.Superbounded is
*** 1536,1572 ****
  
     begin
        if Npad <= 0 then
!          Result.Current_Length := Count;
!          Result.Data (1 .. Count) :=
!            Source.Data (Slen - (Count - 1) .. Slen);
  
        elsif Count <= Max_Length then
           Result.Current_Length := Count;
-          Result.Data (1 .. Npad) := (others => Pad);
-          Result.Data (Npad + 1 .. Count) := Source.Data (1 .. Slen);
  
        else
-          Result.Current_Length := Max_Length;
- 
           case Drop is
              when Strings.Right =>
                 if Npad >= Max_Length then
!                   Result.Data := (others => Pad);
  
                 else
!                   Result.Data (1 .. Npad) := (others => Pad);
                    Result.Data (Npad + 1 .. Max_Length) :=
                      Source.Data (1 .. Max_Length - Npad);
                 end if;
  
              when Strings.Left =>
!                Result.Data (1 .. Max_Length - Slen) := (others => Pad);
                 Result.Data (Max_Length - Slen + 1 .. Max_Length) :=
                   Source.Data (1 .. Slen);
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
        end if;
  
        return Result;
--- 1679,1721 ----
  
     begin
        if Npad <= 0 then
!          if Count > 0 then
!             Result.Data (1 .. Count) :=
!               Source.Data (Slen - (Count - 1) .. Slen);
!             Result.Current_Length := Count;
!          end if;
  
        elsif Count <= Max_Length then
+          Result.Data (1 .. Npad) := [others => Pad];
+ 
+          if Slen > 0 then
+             Result.Data (Npad + 1 .. Count) := Source.Data (1 .. Slen);
+          end if;
+ 
           Result.Current_Length := Count;
  
        else
           case Drop is
              when Strings.Right =>
                 if Npad >= Max_Length then
!                   Result.Data := [others => Pad];
  
                 else
!                   Result.Data (1 .. Npad) := [others => Pad];
                    Result.Data (Npad + 1 .. Max_Length) :=
                      Source.Data (1 .. Max_Length - Npad);
                 end if;
  
              when Strings.Left =>
!                Result.Data (1 .. Max_Length - Slen) := [others => Pad];
                 Result.Data (Max_Length - Slen + 1 .. Max_Length) :=
                   Source.Data (1 .. Slen);
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Result.Current_Length := Max_Length;
        end if;
  
        return Result;
*************** package body Ada.Strings.Superbounded is
*** 1582,1640 ****
        Slen       : constant Natural  := Source.Current_Length;
        Npad       : constant Integer  := Count - Slen;
  
!       Temp : constant String (1 .. Max_Length) := Source.Data;
  
     begin
        if Npad <= 0 then
           Source.Current_Length := Count;
!          Source.Data (1 .. Count) :=
!            Temp (Slen - (Count - 1) .. Slen);
  
        elsif Count <= Max_Length then
           Source.Current_Length := Count;
-          Source.Data (1 .. Npad) := (others => Pad);
-          Source.Data (Npad + 1 .. Count) := Temp (1 .. Slen);
  
        else
-          Source.Current_Length := Max_Length;
- 
           case Drop is
              when Strings.Right =>
                 if Npad >= Max_Length then
!                   Source.Data := (others => Pad);
  
                 else
!                   Source.Data (1 .. Npad) := (others => Pad);
                    Source.Data (Npad + 1 .. Max_Length) :=
                      Temp (1 .. Max_Length - Npad);
                 end if;
  
              when Strings.Left =>
!                for J in 1 .. Max_Length - Slen loop
!                   Source.Data (J) := Pad;
!                end loop;
! 
                 Source.Data (Max_Length - Slen + 1 .. Max_Length) :=
                   Temp (1 .. Slen);
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
        end if;
     end Super_Tail;
  
     ---------------------
-    -- Super_To_String --
-    ---------------------
- 
-    function Super_To_String (Source : Super_String) return String is
-    begin
-       return R : String (1 .. Source.Current_Length) do
-          R := Source.Data (1 .. Source.Current_Length);
-       end return;
-    end Super_To_String;
- 
-    ---------------------
     -- Super_Translate --
     ---------------------
  
--- 1731,1782 ----
        Slen       : constant Natural  := Source.Current_Length;
        Npad       : constant Integer  := Count - Slen;
  
!       Temp : constant Super_String_Data (1 .. Max_Length) := Source.Data;
  
     begin
        if Npad <= 0 then
           Source.Current_Length := Count;
! 
!          if Count > 0 then
!             Source.Data (1 .. Count) :=
!               Temp (Slen - (Count - 1) .. Slen);
!          end if;
  
        elsif Count <= Max_Length then
+          Source.Data (1 .. Npad) := [others => Pad];
+ 
+          if Slen > 0 then
+             Source.Data (Npad + 1 .. Count) := Temp (1 .. Slen);
+          end if;
+ 
           Source.Current_Length := Count;
  
        else
           case Drop is
              when Strings.Right =>
                 if Npad >= Max_Length then
!                   Source.Data := [others => Pad];
  
                 else
!                   Source.Data (1 .. Npad) := [others => Pad];
                    Source.Data (Npad + 1 .. Max_Length) :=
                      Temp (1 .. Max_Length - Npad);
                 end if;
  
              when Strings.Left =>
!                Source.Data (1 .. Max_Length - Slen) := [others => Pad];
                 Source.Data (Max_Length - Slen + 1 .. Max_Length) :=
                   Temp (1 .. Slen);
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
           end case;
+ 
+          Source.Current_Length := Max_Length;
        end if;
     end Super_Tail;
  
     ---------------------
     -- Super_Translate --
     ---------------------
  
*************** package body Ada.Strings.Superbounded is
*** 1645,1656 ****
        Result : Super_String (Source.Max_Length);
  
     begin
-       Result.Current_Length := Source.Current_Length;
- 
        for J in 1 .. Source.Current_Length loop
           Result.Data (J) := Value (Mapping, Source.Data (J));
        end loop;
  
        return Result;
     end Super_Translate;
  
--- 1787,1801 ----
        Result : Super_String (Source.Max_Length);
  
     begin
        for J in 1 .. Source.Current_Length loop
           Result.Data (J) := Value (Mapping, Source.Data (J));
+          pragma Loop_Invariant (Result.Data (1 .. J)'Initialized);
+          pragma Loop_Invariant
+            (for all K in 1 .. J =>
+               Result.Data (K) = Value (Mapping, Source.Data (K)));
        end loop;
  
+       Result.Current_Length := Source.Current_Length;
        return Result;
     end Super_Translate;
  
*************** package body Ada.Strings.Superbounded is
*** 1661,1666 ****
--- 1806,1814 ----
     begin
        for J in 1 .. Source.Current_Length loop
           Source.Data (J) := Value (Mapping, Source.Data (J));
+          pragma Loop_Invariant
+            (for all K in 1 .. J =>
+               Source.Data (K) = Value (Mapping, Source'Loop_Entry.Data (K)));
        end loop;
     end Super_Translate;
  
*************** package body Ada.Strings.Superbounded is
*** 1671,1682 ****
        Result : Super_String (Source.Max_Length);
  
     begin
-       Result.Current_Length := Source.Current_Length;
- 
        for J in 1 .. Source.Current_Length loop
           Result.Data (J) := Mapping.all (Source.Data (J));
        end loop;
  
        return Result;
     end Super_Translate;
  
--- 1819,1833 ----
        Result : Super_String (Source.Max_Length);
  
     begin
        for J in 1 .. Source.Current_Length loop
           Result.Data (J) := Mapping.all (Source.Data (J));
+          pragma Loop_Invariant (Result.Data (1 .. J)'Initialized);
+          pragma Loop_Invariant
+            (for all K in 1 .. J =>
+               Result.Data (K) = Mapping (Source.Data (K)));
        end loop;
  
+       Result.Current_Length := Source.Current_Length;
        return Result;
     end Super_Translate;
  
*************** package body Ada.Strings.Superbounded is
*** 1687,1692 ****
--- 1838,1846 ----
     begin
        for J in 1 .. Source.Current_Length loop
           Source.Data (J) := Mapping.all (Source.Data (J));
+          pragma Loop_Invariant
+            (for all K in 1 .. J =>
+               Source.Data (K) = Mapping (Source'Loop_Entry.Data (K)));
        end loop;
     end Super_Translate;
  
*************** package body Ada.Strings.Superbounded is
*** 1699,1722 ****
        Side   : Trim_End) return Super_String
     is
        Result : Super_String (Source.Max_Length);
!       Last   : Natural := Source.Current_Length;
!       First  : Positive := 1;
  
     begin
!       if Side = Left or else Side = Both then
!          while First <= Last and then Source.Data (First) = ' ' loop
!             First := First + 1;
!          end loop;
!       end if;
  
!       if Side = Right or else Side = Both then
!          while Last >= First and then Source.Data (Last) = ' ' loop
!             Last := Last - 1;
!          end loop;
!       end if;
  
-       Result.Current_Length := Last - First + 1;
-       Result.Data (1 .. Result.Current_Length) := Source.Data (First .. Last);
        return Result;
     end Super_Trim;
  
--- 1853,1914 ----
        Side   : Trim_End) return Super_String
     is
        Result : Super_String (Source.Max_Length);
!       Last   : constant Natural := Source.Current_Length;
  
     begin
!       case Side is
!          when Strings.Left =>
!             declare
!                Low : constant Natural :=
!                  Super_Index_Non_Blank (Source, Forward);
!             begin
!                --  All blanks case
  
!                if Low = 0 then
!                   return Result;
!                end if;
! 
!                Result.Data (1 .. Last - Low + 1) := Source.Data (Low .. Last);
!                Result.Current_Length := Last - Low + 1;
!             end;
! 
!          when Strings.Right =>
!             declare
!                High : constant Natural :=
!                  Super_Index_Non_Blank (Source, Backward);
!             begin
!                --  All blanks case
! 
!                if High = 0 then
!                   return Result;
!                end if;
! 
!                Result.Data (1 .. High) := Source.Data (1 .. High);
!                Result.Current_Length := High;
!             end;
! 
!          when Strings.Both =>
!             declare
!                Low : constant Natural :=
!                  Super_Index_Non_Blank (Source, Forward);
!             begin
!                --  All blanks case
! 
!                if Low = 0 then
!                   return Result;
!                end if;
! 
!                declare
!                   High : constant Natural :=
!                     Super_Index_Non_Blank (Source, Backward);
!                begin
!                   Result.Data (1 .. High - Low + 1) :=
!                     Source.Data (Low .. High);
!                   Result.Current_Length := High - Low + 1;
!                end;
!             end;
!       end case;
  
        return Result;
     end Super_Trim;
  
*************** package body Ada.Strings.Superbounded is
*** 1724,1751 ****
       (Source : in out Super_String;
        Side   : Trim_End)
     is
!       Max_Length : constant Positive := Source.Max_Length;
!       Last       : Natural           := Source.Current_Length;
!       First      : Positive          := 1;
!       Temp       : String (1 .. Max_Length);
! 
     begin
!       Temp (1 .. Last) := Source.Data (1 .. Last);
  
!       if Side = Left or else Side = Both then
!          while First <= Last and then Temp (First) = ' ' loop
!             First := First + 1;
!          end loop;
!       end if;
  
!       if Side = Right or else Side = Both then
!          while Last >= First and then Temp (Last) = ' ' loop
!             Last := Last - 1;
!          end loop;
!       end if;
  
!       Source.Current_Length := Last - First + 1;
!       Source.Data (1 .. Source.Current_Length) := Temp (First .. Last);
     end Super_Trim;
  
     function Super_Trim
--- 1916,1969 ----
       (Source : in out Super_String;
        Side   : Trim_End)
     is
!       Last : constant Natural := Source.Current_Length;
     begin
!       case Side is
!          when Strings.Left =>
!             declare
!                Low : constant Natural :=
!                  Super_Index_Non_Blank (Source, Forward);
!             begin
!                --  All blanks case
  
!                if Low = 0 then
!                   Source.Current_Length := 0;
!                else
!                   Source.Data (1 .. Last - Low + 1) :=
!                     Source.Data (Low .. Last);
!                   Source.Current_Length := Last - Low + 1;
!                end if;
!             end;
  
!          when Strings.Right =>
!             declare
!                High : constant Natural :=
!                  Super_Index_Non_Blank (Source, Backward);
!             begin
!                Source.Current_Length := High;
!             end;
  
!          when Strings.Both =>
!             declare
!                Low : constant Natural :=
!                  Super_Index_Non_Blank (Source, Forward);
!             begin
!                --  All blanks case
! 
!                if Low = 0 then
!                   Source.Current_Length := 0;
!                else
!                   declare
!                      High : constant Natural :=
!                        Super_Index_Non_Blank (Source, Backward);
!                   begin
!                      Source.Data (1 .. High - Low + 1) :=
!                        Source.Data (Low .. High);
!                      Source.Current_Length := High - Low + 1;
!                   end;
!                end if;
!             end;
!       end case;
     end Super_Trim;
  
     function Super_Trim
*************** package body Ada.Strings.Superbounded is
*** 1754,1775 ****
        Right  : Maps.Character_Set) return Super_String
     is
        Result : Super_String (Source.Max_Length);
  
     begin
!       for First in 1 .. Source.Current_Length loop
!          if not Is_In (Source.Data (First), Left) then
!             for Last in reverse First .. Source.Current_Length loop
!                if not Is_In (Source.Data (Last), Right) then
!                   Result.Current_Length := Last - First + 1;
!                   Result.Data (1 .. Result.Current_Length) :=
!                     Source.Data (First .. Last);
!                   return Result;
!                end if;
!             end loop;
!          end if;
!       end loop;
  
-       Result.Current_Length := 0;
        return Result;
     end Super_Trim;
  
--- 1972,2002 ----
        Right  : Maps.Character_Set) return Super_String
     is
        Result : Super_String (Source.Max_Length);
+       Low    : Natural;
+       High   : Natural;
  
     begin
!       Low := Super_Index (Source, Left, Outside, Forward);
! 
!       --  Case where source comprises only characters in Left
! 
!       if Low = 0 then
!          return Result;
!       end if;
! 
!       High := Super_Index (Source, Right, Outside, Backward);
! 
!       --  Case where source comprises only characters in Right
! 
!       if High = 0 then
!          return Result;
!       end if;
! 
!       if High >= Low then
!          Result.Data (1 .. High - Low + 1) := Source.Data (Low .. High);
!          Result.Current_Length := High - Low + 1;
!       end if;
  
        return Result;
     end Super_Trim;
  
*************** package body Ada.Strings.Superbounded is
*** 1778,1806 ****
        Left   : Maps.Character_Set;
        Right  : Maps.Character_Set)
     is
     begin
!       for First in 1 .. Source.Current_Length loop
!          if not Is_In (Source.Data (First), Left) then
!             for Last in reverse First .. Source.Current_Length loop
!                if not Is_In (Source.Data (Last), Right) then
!                   if First = 1 then
!                      Source.Current_Length := Last;
!                      return;
!                   else
!                      Source.Current_Length := Last - First + 1;
!                      Source.Data (1 .. Source.Current_Length) :=
!                        Source.Data (First .. Last);
!                      return;
!                   end if;
!                end if;
!             end loop;
  
              Source.Current_Length := 0;
-             return;
-          end if;
-       end loop;
  
!       Source.Current_Length := 0;
     end Super_Trim;
  
     -----------
--- 2005,2043 ----
        Left   : Maps.Character_Set;
        Right  : Maps.Character_Set)
     is
+       Last : constant Natural := Source.Current_Length;
+       Temp : Super_String_Data (1 .. Last);
+       Low  : Natural;
+       High : Natural;
+ 
     begin
!       Temp := Source.Data (1 .. Last);
!       Low := Super_Index (Source, Left, Outside, Forward);
  
+       --  Case where source comprises only characters in Left
+ 
+       if Low = 0 then
+          Source.Current_Length := 0;
+ 
+       else
+          High := Super_Index (Source, Right, Outside, Backward);
+ 
+          --  Case where source comprises only characters in Right
+ 
+          if High = 0 then
              Source.Current_Length := 0;
  
!          elsif Low = 1 then
!             Source.Current_Length := High;
! 
!          elsif High < Low then
!             Source.Current_Length := 0;
! 
!          else
!             Source.Data (1 .. High - Low + 1) := Temp (Low .. High);
!             Source.Current_Length := High - Low + 1;
!          end if;
!       end if;
     end Super_Trim;
  
     -----------
*************** package body Ada.Strings.Superbounded is
*** 1819,1829 ****
           raise Ada.Strings.Length_Error;
  
        else
-          Result.Current_Length := Left;
- 
           for J in 1 .. Left loop
              Result.Data (J) := Right;
           end loop;
        end if;
  
        return Result;
--- 2056,2069 ----
           raise Ada.Strings.Length_Error;
  
        else
           for J in 1 .. Left loop
              Result.Data (J) := Right;
+             pragma Loop_Invariant (Result.Data (1 .. J)'Initialized);
+             pragma Loop_Invariant
+               (for all K in 1 .. J => Result.Data (K) = Right);
           end loop;
+ 
+          Result.Current_Length := Left;
        end if;
  
        return Result;
*************** package body Ada.Strings.Superbounded is
*** 1835,1857 ****
        Max_Length : Positive) return Super_String
     is
        Result : Super_String (Max_Length);
!       Pos    : Positive         := 1;
        Rlen   : constant Natural := Right'Length;
        Nlen   : constant Natural := Left * Rlen;
  
     begin
        if Nlen > Max_Length then
           raise Ada.Strings.Length_Error;
  
        else
-          Result.Current_Length := Nlen;
- 
           if Nlen > 0 then
              for J in 1 .. Left loop
!                Result.Data (Pos .. Pos + Rlen - 1) := Right;
                 Pos := Pos + Rlen;
              end loop;
           end if;
        end if;
  
        return Result;
--- 2075,2162 ----
        Max_Length : Positive) return Super_String
     is
        Result : Super_String (Max_Length);
!       Pos    : Natural          := 0;
        Rlen   : constant Natural := Right'Length;
        Nlen   : constant Natural := Left * Rlen;
  
+       --  Parts of the proof involving manipulations with the modulo operator
+       --  are complicated for the prover and can't be done automatically in
+       --  the global subprogram. That's why we isolate them in these two ghost
+       --  lemmas.
+ 
+       procedure Lemma_Mod (K : Integer) with
+         Ghost,
+         Pre =>
+           Rlen /= 0
+           and then Pos mod Rlen = 0
+           and then Pos in 0 .. Max_Length - Rlen
+           and then K in Pos .. Pos + Rlen - 1,
+         Post => K mod Rlen = K - Pos;
+       --  Lemma_Mod is applied to an index considered in Lemma_Split to prove
+       --  that it has the right value modulo Right'Length.
+ 
+       procedure Lemma_Split with
+         Ghost,
+         Pre  =>
+           Rlen /= 0
+             and then Pos mod Rlen = 0
+             and then Pos in 0 .. Max_Length - Rlen
+             and then Result.Data (1 .. Pos + Rlen)'Initialized
+             and then String (Result.Data (Pos + 1 .. Pos + Rlen)) = Right,
+         Post =>
+           (for all K in Pos + 1 .. Pos + Rlen =>
+             Result.Data (K) = Right (Right'First + (K - 1) mod Rlen));
+       --  Lemma_Split is used after Result.Data (Pos + 1 .. Pos + Rlen) is
+       --  updated to Right and concludes that the characters match for each
+       --  index when taken modulo Right'Length, as the considered slice starts
+       --  at index 1 modulo Right'Length.
+ 
+       ---------------
+       -- Lemma_Mod --
+       ---------------
+ 
+       procedure Lemma_Mod (K : Integer) is null;
+ 
+       -----------------
+       -- Lemma_Split --
+       -----------------
+ 
+       procedure Lemma_Split is
+       begin
+          for K in Pos + 1 .. Pos + Rlen loop
+             Lemma_Mod (K - 1);
+             pragma Loop_Invariant
+               (for all J in Pos + 1 .. K =>
+                  Result.Data (J) = Right (Right'First + (J - 1) mod Rlen));
+          end loop;
+       end Lemma_Split;
+ 
     begin
        if Nlen > Max_Length then
           raise Ada.Strings.Length_Error;
  
        else
           if Nlen > 0 then
              for J in 1 .. Left loop
!                Result.Data (Pos + 1 .. Pos + Rlen) :=
!                  Super_String_Data (Right);
!                pragma Assert
!                  (for all K in 1 .. Rlen => Result.Data (Pos + K) =
!                     Right (Right'First - 1 + K));
!                pragma Assert
!                  (String (Result.Data (Pos + 1 .. Pos + Rlen)) = Right);
!                Lemma_Split;
                 Pos := Pos + Rlen;
+                pragma Loop_Invariant (Pos = J * Rlen);
+                pragma Loop_Invariant (Result.Data (1 .. Pos)'Initialized);
+                pragma Loop_Invariant
+                  (for all K in 1 .. Pos =>
+                     Result.Data (K) =
+                       Right (Right'First + (K - 1) mod Rlen));
              end loop;
           end if;
+ 
+          Result.Current_Length := Nlen;
        end if;
  
        return Result;
*************** package body Ada.Strings.Superbounded is
*** 1862,1868 ****
        Right : Super_String) return Super_String
     is
        Result : Super_String (Right.Max_Length);
!       Pos    : Positive := 1;
        Rlen   : constant Natural := Right.Current_Length;
        Nlen   : constant Natural := Left * Rlen;
  
--- 2167,2173 ----
        Right : Super_String) return Super_String
     is
        Result : Super_String (Right.Max_Length);
!       Pos    : Natural          := 0;
        Rlen   : constant Natural := Right.Current_Length;
        Nlen   : constant Natural := Left * Rlen;
  
*************** package body Ada.Strings.Superbounded is
*** 1871,1885 ****
           raise Ada.Strings.Length_Error;
  
        else
-          Result.Current_Length := Nlen;
- 
           if Nlen > 0 then
              for J in 1 .. Left loop
!                Result.Data (Pos .. Pos + Rlen - 1) :=
                   Right.Data (1 .. Rlen);
                 Pos := Pos + Rlen;
              end loop;
           end if;
        end if;
  
        return Result;
--- 2176,2196 ----
           raise Ada.Strings.Length_Error;
  
        else
           if Nlen > 0 then
              for J in 1 .. Left loop
!                Result.Data (Pos + 1 .. Pos + Rlen) :=
                   Right.Data (1 .. Rlen);
                 Pos := Pos + Rlen;
+                pragma Loop_Invariant (Pos = J * Rlen);
+                pragma Loop_Invariant (Result.Data (1 .. Pos)'Initialized);
+                pragma Loop_Invariant
+                  (for all K in 1 .. Pos =>
+                     Result.Data (K) =
+                       Right.Data (1 + (K - 1) mod Rlen));
              end loop;
           end if;
+ 
+          Result.Current_Length := Nlen;
        end if;
  
        return Result;
*************** package body Ada.Strings.Superbounded is
*** 1891,1897 ****
  
     function To_Super_String
       (Source     : String;
!       Max_Length : Natural;
        Drop       : Truncation := Error) return Super_String
     is
        Result : Super_String (Max_Length);
--- 2202,2208 ----
  
     function To_Super_String
       (Source     : String;
!       Max_Length : Positive;
        Drop       : Truncation := Error) return Super_String
     is
        Result : Super_String (Max_Length);
*************** package body Ada.Strings.Superbounded is
*** 1899,1918 ****
  
     begin
        if Slen <= Max_Length then
           Result.Current_Length := Slen;
-          Result.Data (1 .. Slen) := Source;
  
        else
           case Drop is
              when Strings.Right =>
                 Result.Current_Length := Max_Length;
-                Result.Data (1 .. Max_Length) :=
-                  Source (Source'First .. Source'First - 1 + Max_Length);
  
              when Strings.Left =>
                 Result.Current_Length := Max_Length;
-                Result.Data (1 .. Max_Length) :=
-                  Source (Source'Last - (Max_Length - 1) .. Source'Last);
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
--- 2210,2229 ----
  
     begin
        if Slen <= Max_Length then
+          Result.Data (1 .. Slen) := Super_String_Data (Source);
           Result.Current_Length := Slen;
  
        else
           case Drop is
              when Strings.Right =>
+                Result.Data (1 .. Max_Length) := Super_String_Data
+                  (Source (Source'First .. Source'First - 1 + Max_Length));
                 Result.Current_Length := Max_Length;
  
              when Strings.Left =>
+                Result.Data (1 .. Max_Length) := Super_String_Data
+                  (Source (Source'Last - (Max_Length - 1) .. Source'Last));
                 Result.Current_Length := Max_Length;
  
              when Strings.Error =>
                 raise Ada.Strings.Length_Error;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strsup.ads gcc-12.1.0/gcc/ada/libgnat/a-strsup.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-strsup.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strsup.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
***************
*** 36,63 ****
  --  length as the discriminant. Individual instantiations of Strings.Bounded
  --  use this type with an appropriate discriminant value set.
  
! with Ada.Strings.Maps;
  
! package Ada.Strings.Superbounded is
     pragma Preelaborate;
  
     --  Type Bounded_String in Ada.Strings.Bounded.Generic_Bounded_Length is
     --  derived from Super_String, with the constraint of the maximum length.
  
     type Super_String (Max_Length : Positive) is record
        Current_Length : Natural := 0;
!       Data           : String (1 .. Max_Length);
        --  A previous version had a default initial value for Data, which is
        --  no longer necessary, because we now special-case this type in the
        --  compiler, so "=" composes properly for descendants of this type.
        --  Leaving it out is more efficient.
!    end record;
  
     --  The subprograms defined for Super_String are similar to those
     --  defined for Bounded_String, except that they have different names, so
     --  that they can be renamed in Ada.Strings.Bounded.Generic_Bounded_Length.
  
!    function Super_Length (Source : Super_String) return Natural;
  
     --------------------------------------------------------
     -- Conversion, Concatenation, and Selection Functions --
--- 36,83 ----
  --  length as the discriminant. Individual instantiations of Strings.Bounded
  --  use this type with an appropriate discriminant value set.
  
! --  Preconditions in this unit are meant for analysis only, not for run-time
! --  checking, so that the expected exceptions are raised. This is enforced by
! --  setting the corresponding assertion policy to Ignore. Postconditions and
! --  contract cases should not be executed at runtime as well, in order not to
! --  slow down the execution of these functions.
  
! pragma Assertion_Policy (Pre            => Ignore,
!                          Post           => Ignore,
!                          Contract_Cases => Ignore,
!                          Ghost          => Ignore);
! 
! with Ada.Strings.Maps; use type Ada.Strings.Maps.Character_Mapping_Function;
! with Ada.Strings.Search;
! 
! package Ada.Strings.Superbounded with SPARK_Mode is
     pragma Preelaborate;
  
     --  Type Bounded_String in Ada.Strings.Bounded.Generic_Bounded_Length is
     --  derived from Super_String, with the constraint of the maximum length.
  
+    type Super_String_Data is new String with Relaxed_Initialization;
+ 
     type Super_String (Max_Length : Positive) is record
        Current_Length : Natural := 0;
!       Data           : Super_String_Data (1 .. Max_Length);
        --  A previous version had a default initial value for Data, which is
        --  no longer necessary, because we now special-case this type in the
        --  compiler, so "=" composes properly for descendants of this type.
        --  Leaving it out is more efficient.
!    end record
!    with
!      Predicate =>
!        Current_Length <= Max_Length
!          and then Data (1 .. Current_Length)'Initialized;
  
     --  The subprograms defined for Super_String are similar to those
     --  defined for Bounded_String, except that they have different names, so
     --  that they can be renamed in Ada.Strings.Bounded.Generic_Bounded_Length.
  
!    function Super_Length (Source : Super_String) return Natural
!    is (Source.Current_Length)
!    with Global => null;
  
     --------------------------------------------------------
     -- Conversion, Concatenation, and Selection Functions --
*************** package Ada.Strings.Superbounded is
*** 65,173 ****
  
     function To_Super_String
       (Source     : String;
!       Max_Length : Natural;
!       Drop       : Truncation := Error) return Super_String;
     --  Note the additional parameter Max_Length, which specifies the maximum
     --  length setting of the resulting Super_String value.
  
     --  The following procedures have declarations (and semantics) that are
     --  exactly analogous to those declared in Ada.Strings.Bounded.
  
!    function Super_To_String (Source : Super_String) return String;
  
     procedure Set_Super_String
       (Target : out Super_String;
        Source : String;
!       Drop   : Truncation := Error);
  
     function Super_Append
       (Left  : Super_String;
        Right : Super_String;
!       Drop  : Truncation  := Error) return Super_String;
  
     function Super_Append
       (Left  : Super_String;
        Right : String;
!       Drop  : Truncation := Error) return Super_String;
  
     function Super_Append
       (Left  : String;
        Right : Super_String;
!       Drop  : Truncation := Error) return Super_String;
  
     function Super_Append
       (Left  : Super_String;
        Right : Character;
!       Drop  : Truncation := Error) return Super_String;
  
     function Super_Append
       (Left  : Character;
        Right : Super_String;
!       Drop  : Truncation := Error) return Super_String;
  
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Super_String;
!       Drop     : Truncation  := Error);
  
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : String;
!       Drop     : Truncation  := Error);
  
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Character;
!       Drop     : Truncation  := Error);
  
     function Concat
       (Left  : Super_String;
!       Right : Super_String) return Super_String;
  
     function Concat
       (Left  : Super_String;
!       Right : String) return Super_String;
  
     function Concat
       (Left  : String;
!       Right : Super_String) return Super_String;
  
     function Concat
       (Left  : Super_String;
!       Right : Character) return Super_String;
  
     function Concat
       (Left  : Character;
!       Right : Super_String) return Super_String;
  
     function Super_Element
       (Source : Super_String;
!       Index  : Positive) return Character;
  
     procedure Super_Replace_Element
       (Source : in out Super_String;
        Index  : Positive;
!       By     : Character);
  
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
!       High   : Natural) return String;
  
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
!       High   : Natural) return Super_String;
  
     procedure Super_Slice
       (Source : Super_String;
        Target : out Super_String;
        Low    : Positive;
!       High   : Natural);
  
     function "="
       (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Equal
       (Left  : Super_String;
--- 85,692 ----
  
     function To_Super_String
       (Source     : String;
!       Max_Length : Positive;
!       Drop       : Truncation := Error) return Super_String
!    with
!      Pre            => (if Source'Length > Max_Length then Drop /= Error),
!      Post           => To_Super_String'Result.Max_Length = Max_Length,
!      Contract_Cases =>
!        (Source'Length <= Max_Length
!         =>
!           Super_To_String (To_Super_String'Result) = Source,
! 
!         Source'Length > Max_Length and then Drop = Left
!         =>
!           Super_To_String (To_Super_String'Result) =
!             Source (Source'Last - Max_Length + 1 .. Source'Last),
! 
!         others  --  Drop = Right
!         =>
!           Super_To_String (To_Super_String'Result) =
!             Source (Source'First .. Source'First - 1 + Max_Length)),
!      Global         => null;
     --  Note the additional parameter Max_Length, which specifies the maximum
     --  length setting of the resulting Super_String value.
  
     --  The following procedures have declarations (and semantics) that are
     --  exactly analogous to those declared in Ada.Strings.Bounded.
  
!    function Super_To_String (Source : Super_String) return String
!    is (String (Source.Data (1 .. Source.Current_Length)));
  
     procedure Set_Super_String
       (Target : out Super_String;
        Source : String;
!       Drop   : Truncation := Error)
!    with
!      Pre            =>
!        (if Source'Length > Target.Max_Length then Drop /= Error),
!      Contract_Cases =>
!        (Source'Length <= Target.Max_Length
!         =>
!           Super_To_String (Target) = Source,
! 
!         Source'Length > Target.Max_Length and then Drop = Left
!         =>
!           Super_To_String (Target) =
!             Source (Source'Last - Target.Max_Length + 1 .. Source'Last),
! 
!         others  --  Drop = Right
!         =>
!           Super_To_String (Target) =
!             Source (Source'First .. Source'First - 1 + Target.Max_Length)),
!      Global         => null;
  
     function Super_Append
       (Left  : Super_String;
        Right : Super_String;
!       Drop  : Truncation  := Error) return Super_String
!    with
!      Pre            =>
!        Left.Max_Length = Right.Max_Length
!          and then
!            (if Super_Length (Left) > Left.Max_Length - Super_Length (Right)
!             then Drop /= Error),
!      Post           => Super_Append'Result.Max_Length = Left.Max_Length,
!      Contract_Cases =>
!        (Super_Length (Left) <= Left.Max_Length - Super_Length (Right)
!         =>
!           Super_Length (Super_Append'Result) =
!             Super_Length (Left) + Super_Length (Right)
!             and then
!               Super_Slice (Super_Append'Result, 1, Super_Length (Left)) =
!                 Super_To_String (Left)
!             and then
!               (if Super_Length (Right) > 0 then
!                  Super_Slice (Super_Append'Result,
!                    Super_Length (Left) + 1,
!                    Super_Length (Super_Append'Result)) =
!                      Super_To_String (Right)),
! 
!         Super_Length (Left) > Left.Max_Length - Super_Length (Right)
!           and then Drop = Strings.Left
!         =>
!           Super_Length (Super_Append'Result) = Left.Max_Length
!             and then
!               (if Super_Length (Right) < Left.Max_Length then
!                  String'(Super_Slice (Super_Append'Result,
!                    1, Left.Max_Length - Super_Length (Right))) =
!                      Super_Slice (Left,
!                        Super_Length (Left) - Left.Max_Length
!                          + Super_Length (Right) + 1,
!                        Super_Length (Left)))
!             and then
!               Super_Slice (Super_Append'Result,
!                 Left.Max_Length - Super_Length (Right) + 1, Left.Max_Length) =
!                   Super_To_String (Right),
! 
!         others  --  Drop = Right
!         =>
!           Super_Length (Super_Append'Result) = Left.Max_Length
!             and then
!               Super_Slice (Super_Append'Result, 1, Super_Length (Left)) =
!                 Super_To_String (Left)
!             and then
!               (if Super_Length (Left) < Left.Max_Length then
!                  String'(Super_Slice (Super_Append'Result,
!                    Super_Length (Left) + 1, Left.Max_Length)) =
!                      Super_Slice (Right,
!                        1, Left.Max_Length - Super_Length (Left)))),
!      Global         => null;
  
     function Super_Append
       (Left  : Super_String;
        Right : String;
!       Drop  : Truncation := Error) return Super_String
!    with
!      Pre            =>
!        (if Right'Length > Left.Max_Length - Super_Length (Left)
!         then Drop /= Error),
!      Post           => Super_Append'Result.Max_Length = Left.Max_Length,
!      Contract_Cases =>
!        (Super_Length (Left) <= Left.Max_Length - Right'Length
!         =>
!           Super_Length (Super_Append'Result) =
!             Super_Length (Left) + Right'Length
!             and then
!               Super_Slice (Super_Append'Result, 1, Super_Length (Left)) =
!                 Super_To_String (Left)
!             and then
!               (if Right'Length > 0 then
!                  Super_Slice (Super_Append'Result,
!                    Super_Length (Left) + 1,
!                    Super_Length (Super_Append'Result)) =
!                      Right),
! 
!         Super_Length (Left) > Left.Max_Length - Right'Length
!           and then Drop = Strings.Left
!         =>
!           Super_Length (Super_Append'Result) = Left.Max_Length
!             and then
!               (if Right'Length < Left.Max_Length then
! 
!                  --  The result is the end of Left followed by Right
! 
!                  String'(Super_Slice (Super_Append'Result,
!                    1, Left.Max_Length - Right'Length)) =
!                      Super_Slice (Left,
!                        Super_Length (Left) - Left.Max_Length + Right'Length
!                          + 1,
!                        Super_Length (Left))
!                    and then
!                      Super_Slice (Super_Append'Result,
!                        Left.Max_Length - Right'Length + 1, Left.Max_Length) =
!                          Right
!                else
!                  --  The result is the last Max_Length characters of Right
! 
!                  Super_To_String (Super_Append'Result) =
!                    Right (Right'Last - Left.Max_Length + 1 .. Right'Last)),
! 
!         others  --  Drop = Right
!         =>
!           Super_Length (Super_Append'Result) = Left.Max_Length
!             and then
!               Super_Slice (Super_Append'Result, 1, Super_Length (Left)) =
!                 Super_To_String (Left)
!             and then
!               (if Super_Length (Left) < Left.Max_Length then
!                  Super_Slice (Super_Append'Result,
!                    Super_Length (Left) + 1, Left.Max_Length) =
!                      Right (Right'First
!                        .. Left.Max_Length - Super_Length (Left)
!                             - 1 + Right'First))),
!      Global         => null;
  
     function Super_Append
       (Left  : String;
        Right : Super_String;
!       Drop  : Truncation := Error) return Super_String
!    with
!      Pre            =>
!        (if Left'Length > Right.Max_Length - Super_Length (Right)
!         then Drop /= Error),
!      Post           => Super_Append'Result.Max_Length = Right.Max_Length,
!      Contract_Cases =>
!        (Left'Length <= Right.Max_Length - Super_Length (Right)
!         =>
!           Super_Length (Super_Append'Result) =
!             Left'Length + Super_Length (Right)
!             and then Super_Slice (Super_Append'Result, 1, Left'Length) = Left
!             and then
!               (if Super_Length (Right) > 0 then
!                  Super_Slice (Super_Append'Result,
!                    Left'Length + 1, Super_Length (Super_Append'Result)) =
!                      Super_To_String (Right)),
! 
!         Left'Length > Right.Max_Length - Super_Length (Right)
!           and then Drop = Strings.Left
!         =>
!           Super_Length (Super_Append'Result) = Right.Max_Length
!             and then
!               (if Super_Length (Right) < Right.Max_Length then
!                  Super_Slice (Super_Append'Result,
!                    1, Right.Max_Length - Super_Length (Right)) =
!                      Left
!                        (Left'Last - Right.Max_Length + Super_Length (Right) + 1
!                         .. Left'Last))
!             and then
!               Super_Slice (Super_Append'Result,
!                 Right.Max_Length - Super_Length (Right) + 1,
!                 Right.Max_Length) =
!                   Super_To_String (Right),
! 
!         others  --  Drop = Right
!         =>
!           Super_Length (Super_Append'Result) = Right.Max_Length
!             and then
!               (if Left'Length < Right.Max_Length then
! 
!                  --  The result is Left followed by the beginning of Right
! 
!                  Super_Slice (Super_Append'Result, 1, Left'Length) = Left
!                    and then
!                      String'(Super_Slice (Super_Append'Result,
!                        Left'Length + 1, Right.Max_Length)) =
!                          Super_Slice (Right, 1, Right.Max_Length - Left'Length)
!                else
!                  --  The result is the first Max_Length characters of Left
! 
!                  Super_To_String (Super_Append'Result) =
!                    Left (Left'First .. Right.Max_Length - 1 + Left'First))),
!      Global         => null;
  
     function Super_Append
       (Left  : Super_String;
        Right : Character;
!       Drop  : Truncation := Error) return Super_String
!    with
!      Pre            =>
!        (if Super_Length (Left) = Left.Max_Length then Drop /= Error),
!      Post           => Super_Append'Result.Max_Length = Left.Max_Length,
!      Contract_Cases =>
!        (Super_Length (Left) < Left.Max_Length
!         =>
!           Super_Length (Super_Append'Result) = Super_Length (Left) + 1
!             and then
!               Super_Slice (Super_Append'Result, 1, Super_Length (Left)) =
!                 Super_To_String (Left)
!             and then
!               Super_Element (Super_Append'Result, Super_Length (Left) + 1) =
!                 Right,
! 
!         Super_Length (Left) = Left.Max_Length and then Drop = Strings.Right
!         =>
!           Super_Length (Super_Append'Result) = Left.Max_Length
!             and then
!               Super_To_String (Super_Append'Result) = Super_To_String (Left),
! 
!         others  --  Drop = Left
!         =>
!           Super_Length (Super_Append'Result) = Left.Max_Length
!             and then
!               String'(Super_Slice (Super_Append'Result,
!                 1, Left.Max_Length - 1)) =
!                   Super_Slice (Left, 2, Left.Max_Length)
!             and then
!               Super_Element (Super_Append'Result, Left.Max_Length) = Right),
!      Global         => null;
  
     function Super_Append
       (Left  : Character;
        Right : Super_String;
!       Drop  : Truncation := Error) return Super_String
!    with
!      Pre            =>
!        (if Super_Length (Right) = Right.Max_Length then Drop /= Error),
!      Post           => Super_Append'Result.Max_Length = Right.Max_Length,
!      Contract_Cases =>
!        (Super_Length (Right) < Right.Max_Length
!         =>
!           Super_Length (Super_Append'Result) = Super_Length (Right) + 1
!             and then
!               Super_Slice (Super_Append'Result, 2, Super_Length (Right) + 1) =
!                 Super_To_String (Right)
!             and then Super_Element (Super_Append'Result, 1) = Left,
! 
!         Super_Length (Right) = Right.Max_Length and then Drop = Strings.Left
!         =>
!           Super_Length (Super_Append'Result) = Right.Max_Length
!             and then
!               Super_To_String (Super_Append'Result) = Super_To_String (Right),
! 
!         others  --  Drop = Right
!         =>
!           Super_Length (Super_Append'Result) = Right.Max_Length
!             and then
!               String'(Super_Slice (Super_Append'Result, 2, Right.Max_Length)) =
!                 Super_Slice (Right, 1, Right.Max_Length - 1)
!             and then Super_Element (Super_Append'Result, 1) = Left),
!      Global         => null;
  
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Super_String;
!       Drop     : Truncation  := Error)
!    with
!      Pre            =>
!        Source.Max_Length = New_Item.Max_Length
!          and then
!            (if Super_Length (Source) >
!                  Source.Max_Length - Super_Length (New_Item)
!             then Drop /= Error),
!      Contract_Cases =>
!        (Super_Length (Source) <= Source.Max_Length - Super_Length (New_Item)
!         =>
!           Super_Length (Source) =
!             Super_Length (Source'Old) + Super_Length (New_Item)
!             and then
!               Super_Slice (Source, 1, Super_Length (Source'Old)) =
!                 Super_To_String (Source'Old)
!             and then
!               (if Super_Length (New_Item) > 0 then
!                  Super_Slice (Source,
!                    Super_Length (Source'Old) + 1, Super_Length (Source)) =
!                      Super_To_String (New_Item)),
! 
!         Super_Length (Source) > Source.Max_Length - Super_Length (New_Item)
!           and then Drop = Left
!         =>
!           Super_Length (Source) = Source.Max_Length
!             and then
!               (if Super_Length (New_Item) < Source.Max_Length then
!                  String'(Super_Slice (Source,
!                    1, Source.Max_Length - Super_Length (New_Item))) =
!                      Super_Slice (Source'Old,
!                        Super_Length (Source'Old) - Source.Max_Length
!                          + Super_Length (New_Item) + 1,
!                        Super_Length (Source'Old)))
!             and then
!               Super_Slice (Source,
!                 Source.Max_Length - Super_Length (New_Item) + 1,
!                 Source.Max_Length) =
!                   Super_To_String (New_Item),
! 
!         others  --  Drop = Right
!         =>
!           Super_Length (Source) = Source.Max_Length
!             and then
!               Super_Slice (Source, 1, Super_Length (Source'Old)) =
!                 Super_To_String (Source'Old)
!             and then
!               (if Super_Length (Source'Old) < Source.Max_Length then
!                  String'(Super_Slice (Source,
!                    Super_Length (Source'Old) + 1, Source.Max_Length)) =
!                      Super_Slice (New_Item,
!                        1, Source.Max_Length - Super_Length (Source'Old)))),
!      Global         => null;
  
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : String;
!       Drop     : Truncation  := Error)
!    with
!      Pre            =>
!        (if New_Item'Length > Source.Max_Length - Super_Length (Source)
!         then Drop /= Error),
!      Contract_Cases =>
!        (Super_Length (Source) <= Source.Max_Length - New_Item'Length
!         =>
!           Super_Length (Source) = Super_Length (Source'Old) + New_Item'Length
!             and then
!               Super_Slice (Source, 1, Super_Length (Source'Old)) =
!                 Super_To_String (Source'Old)
!             and then
!               (if New_Item'Length > 0 then
!                  Super_Slice (Source,
!                    Super_Length (Source'Old) + 1, Super_Length (Source)) =
!                      New_Item),
! 
!         Super_Length (Source) > Source.Max_Length - New_Item'Length
!           and then Drop = Left
!         =>
!           Super_Length (Source) = Source.Max_Length
!             and then
!               (if New_Item'Length < Source.Max_Length then
! 
!                  --  The result is the end of Source followed by New_Item
! 
!                  String'(Super_Slice (Source,
!                    1, Source.Max_Length - New_Item'Length)) =
!                      Super_Slice (Source'Old,
!                        Super_Length (Source'Old) - Source.Max_Length
!                          + New_Item'Length + 1,
!                        Super_Length (Source'Old))
!                  and then
!                    Super_Slice (Source,
!                      Source.Max_Length - New_Item'Length + 1,
!                      Source.Max_Length) =
!                        New_Item
!                else
!                  --  The result is the last Max_Length characters of
!                  --  New_Item.
! 
!                  Super_To_String (Source) = New_Item
!                    (New_Item'Last - Source.Max_Length + 1 .. New_Item'Last)),
! 
!         others  --  Drop = Right
!         =>
!           Super_Length (Source) = Source.Max_Length
!             and then
!               Super_Slice (Source, 1, Super_Length (Source'Old)) =
!                 Super_To_String (Source'Old)
!             and then
!               (if Super_Length (Source'Old) < Source.Max_Length then
!                  Super_Slice (Source,
!                    Super_Length (Source'Old) + 1, Source.Max_Length) =
!                      New_Item (New_Item'First
!                        .. Source.Max_Length - Super_Length (Source'Old) - 1
!                          + New_Item'First))),
!      Global         => null;
  
     procedure Super_Append
       (Source   : in out Super_String;
        New_Item : Character;
!       Drop     : Truncation  := Error)
!    with
!      Pre            =>
!        (if Super_Length (Source) = Source.Max_Length then Drop /= Error),
!      Contract_Cases =>
!        (Super_Length (Source) < Source.Max_Length
!         =>
!           Super_Length (Source) = Super_Length (Source'Old) + 1
!             and then
!               Super_Slice (Source, 1, Super_Length (Source'Old)) =
!                 Super_To_String (Source'Old)
!             and then
!               Super_Element (Source, Super_Length (Source'Old) + 1) = New_Item,
! 
!         Super_Length (Source) = Source.Max_Length and then Drop = Right
!         =>
!           Super_Length (Source) = Source.Max_Length
!             and then Super_To_String (Source) = Super_To_String (Source'Old),
! 
!         others  --  Drop = Left
!         =>
!           Super_Length (Source) = Source.Max_Length
!             and then
!               String'(Super_Slice (Source, 1, Source.Max_Length - 1)) =
!                 Super_Slice (Source'Old, 2, Source.Max_Length)
!             and then Super_Element (Source, Source.Max_Length) = New_Item),
!      Global         => null;
  
     function Concat
       (Left  : Super_String;
!       Right : Super_String) return Super_String
!    with
!      Pre    => Left.Max_Length = Right.Max_Length
!        and then Super_Length (Left) <= Left.Max_Length - Super_Length (Right),
!      Post   => Concat'Result.Max_Length = Left.Max_Length
!        and then
!          Super_Length (Concat'Result) =
!            Super_Length (Left) + Super_Length (Right)
!        and then
!          Super_Slice (Concat'Result, 1, Super_Length (Left)) =
!            Super_To_String (Left)
!        and then
!          (if Super_Length (Right) > 0 then
!             Super_Slice (Concat'Result,
!               Super_Length (Left) + 1, Super_Length (Concat'Result)) =
!               Super_To_String (Right)),
!      Global => null;
  
     function Concat
       (Left  : Super_String;
!       Right : String) return Super_String
!    with
!      Pre    => Right'Length <= Left.Max_Length - Super_Length (Left),
!      Post   => Concat'Result.Max_Length = Left.Max_Length
!        and then
!          Super_Length (Concat'Result) = Super_Length (Left) + Right'Length
!        and then
!          Super_Slice (Concat'Result, 1, Super_Length (Left)) =
!            Super_To_String (Left)
!        and then
!          (if Right'Length > 0 then
!             Super_Slice (Concat'Result,
!               Super_Length (Left) + 1, Super_Length (Concat'Result)) =
!                 Right),
!      Global => null;
  
     function Concat
       (Left  : String;
!       Right : Super_String) return Super_String
!    with
!      Pre    => Left'Length <= Right.Max_Length - Super_Length (Right),
!      Post   => Concat'Result.Max_Length = Right.Max_Length
!        and then
!          Super_Length (Concat'Result) = Left'Length + Super_Length (Right)
!        and then Super_Slice (Concat'Result, 1, Left'Length) = Left
!        and then
!          (if Super_Length (Right) > 0 then
!             Super_Slice (Concat'Result,
!               Left'Length + 1, Super_Length (Concat'Result)) =
!                 Super_To_String (Right)),
!      Global => null;
  
     function Concat
       (Left  : Super_String;
!       Right : Character) return Super_String
!    with
!      Pre    => Super_Length (Left) < Left.Max_Length,
!      Post   => Concat'Result.Max_Length = Left.Max_Length
!        and then Super_Length (Concat'Result) = Super_Length (Left) + 1
!        and then
!          Super_Slice (Concat'Result, 1, Super_Length (Left)) =
!            Super_To_String (Left)
!        and then Super_Element (Concat'Result, Super_Length (Left) + 1) = Right,
!      Global => null;
  
     function Concat
       (Left  : Character;
!       Right : Super_String) return Super_String
!    with
!      Pre    => Super_Length (Right) < Right.Max_Length,
!      Post   => Concat'Result.Max_Length = Right.Max_Length
!        and then Super_Length (Concat'Result) = 1 + Super_Length (Right)
!        and then Super_Element (Concat'Result, 1) = Left
!        and then
!          Super_Slice (Concat'Result, 2, Super_Length (Concat'Result)) =
!            Super_To_String (Right),
!      Global => null;
  
     function Super_Element
       (Source : Super_String;
!       Index  : Positive) return Character
!    is (if Index <= Source.Current_Length
!        then Source.Data (Index)
!        else raise Index_Error)
!    with Pre    => Index <= Super_Length (Source),
!         Global => null;
  
     procedure Super_Replace_Element
       (Source : in out Super_String;
        Index  : Positive;
!       By     : Character)
!    with
!      Pre    => Index <= Super_Length (Source),
!      Post   => Super_Length (Source) = Super_Length (Source'Old)
!        and then
!          (for all K in 1 .. Super_Length (Source) =>
!             Super_Element (Source, K) =
!               (if K = Index then By else Super_Element (Source'Old, K))),
!      Global => null;
  
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
!       High   : Natural) return String
!    is (if Low - 1 > Source.Current_Length or else High > Source.Current_Length
! 
!        --  Note: test of High > Length is in accordance with AI95-00128
! 
!        then raise Index_Error
!        else
!           --  Note: in this case, superflat bounds are not a problem, we just
!           --  get the null string in accordance with normal Ada slice rules.
! 
!           String (Source.Data (Low .. High)))
!    with Pre    => Low - 1 <= Super_Length (Source)
!                     and then High <= Super_Length (Source),
!         Global => null;
  
     function Super_Slice
       (Source : Super_String;
        Low    : Positive;
!       High   : Natural) return Super_String
!     with
!      Pre    =>
!        Low - 1 <= Super_Length (Source) and then High <= Super_Length (Source),
!      Post   => Super_Slice'Result.Max_Length = Source.Max_Length
!        and then
!          Super_To_String (Super_Slice'Result) =
!            Super_Slice (Source, Low, High),
!      Global => null;
  
     procedure Super_Slice
       (Source : Super_String;
        Target : out Super_String;
        Low    : Positive;
!       High   : Natural)
!    with
!      Pre    => Source.Max_Length = Target.Max_Length
!        and then Low - 1 <= Super_Length (Source)
!        and then High <= Super_Length (Source),
!      Post   => Super_To_String (Target) = Super_Slice (Source, Low, High),
!      Global => null;
  
     function "="
       (Left  : Super_String;
!       Right : Super_String) return Boolean
!    with
!      Pre    => Left.Max_Length = Right.Max_Length,
!      Post   => "="'Result = (Super_To_String (Left) = Super_To_String (Right)),
!      Global => null;
  
     function Equal
       (Left  : Super_String;
*************** package Ada.Strings.Superbounded is
*** 175,233 ****
  
     function Equal
       (Left  : Super_String;
!       Right : String) return Boolean;
  
     function Equal
       (Left  : String;
!       Right : Super_String) return Boolean;
  
     function Less
       (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Less
       (Left  : Super_String;
!       Right : String) return Boolean;
  
     function Less
       (Left  : String;
!       Right : Super_String) return Boolean;
  
     function Less_Or_Equal
       (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Less_Or_Equal
       (Left  : Super_String;
!       Right : String) return Boolean;
  
     function Less_Or_Equal
       (Left  : String;
!       Right : Super_String) return Boolean;
  
     function Greater
       (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Greater
       (Left  : Super_String;
!       Right : String) return Boolean;
  
     function Greater
       (Left  : String;
!       Right : Super_String) return Boolean;
  
     function Greater_Or_Equal
       (Left  : Super_String;
!       Right : Super_String) return Boolean;
  
     function Greater_Or_Equal
       (Left  : Super_String;
!       Right : String) return Boolean;
  
     function Greater_Or_Equal
       (Left  : String;
!       Right : Super_String) return Boolean;
  
     ----------------------
     -- Search Functions --
--- 694,804 ----
  
     function Equal
       (Left  : Super_String;
!       Right : String) return Boolean
!    with
!      Post   => Equal'Result = (Super_To_String (Left) = Right),
!      Global => null;
  
     function Equal
       (Left  : String;
!       Right : Super_String) return Boolean
!    with
!      Post   => Equal'Result = (Left = Super_To_String (Right)),
!      Global => null;
  
     function Less
       (Left  : Super_String;
!       Right : Super_String) return Boolean
!    with
!      Pre    => Left.Max_Length = Right.Max_Length,
!      Post   =>
!        Less'Result = (Super_To_String (Left) < Super_To_String (Right)),
!      Global => null;
  
     function Less
       (Left  : Super_String;
!       Right : String) return Boolean
!    with
!      Post   => Less'Result = (Super_To_String (Left) < Right),
!      Global => null;
  
     function Less
       (Left  : String;
!       Right : Super_String) return Boolean
!    with
!      Post   => Less'Result = (Left < Super_To_String (Right)),
!      Global => null;
  
     function Less_Or_Equal
       (Left  : Super_String;
!       Right : Super_String) return Boolean
!    with
!      Pre    => Left.Max_Length = Right.Max_Length,
!      Post   =>
!        Less_Or_Equal'Result =
!          (Super_To_String (Left) <= Super_To_String (Right)),
!      Global => null;
  
     function Less_Or_Equal
       (Left  : Super_String;
!       Right : String) return Boolean
!    with
!      Post   => Less_Or_Equal'Result = (Super_To_String (Left) <= Right),
!      Global => null;
  
     function Less_Or_Equal
       (Left  : String;
!       Right : Super_String) return Boolean
!    with
!      Post   => Less_Or_Equal'Result = (Left <= Super_To_String (Right)),
!      Global => null;
  
     function Greater
       (Left  : Super_String;
!       Right : Super_String) return Boolean
!    with
!      Pre    => Left.Max_Length = Right.Max_Length,
!      Post   =>
!        Greater'Result = (Super_To_String (Left) > Super_To_String (Right)),
!      Global => null;
  
     function Greater
       (Left  : Super_String;
!       Right : String) return Boolean
!    with
!      Post   => Greater'Result = (Super_To_String (Left) > Right),
!      Global => null;
  
     function Greater
       (Left  : String;
!       Right : Super_String) return Boolean
!    with
!      Post   => Greater'Result = (Left > Super_To_String (Right)),
!      Global => null;
  
     function Greater_Or_Equal
       (Left  : Super_String;
!       Right : Super_String) return Boolean
!    with
!      Pre    => Left.Max_Length = Right.Max_Length,
!      Post   =>
!        Greater_Or_Equal'Result =
!          (Super_To_String (Left) >= Super_To_String (Right)),
!      Global => null;
  
     function Greater_Or_Equal
       (Left  : Super_String;
!       Right : String) return Boolean
!    with
!      Post   => Greater_Or_Equal'Result = (Super_To_String (Left) >= Right),
!      Global => null;
  
     function Greater_Or_Equal
       (Left  : String;
!       Right : Super_String) return Boolean
!    with
!      Post   => Greater_Or_Equal'Result = (Left >= Super_To_String (Right)),
!      Global => null;
  
     ----------------------
     -- Search Functions --
*************** package Ada.Strings.Superbounded is
*** 237,299 ****
       (Source  : Super_String;
        Pattern : String;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Super_Index
       (Source  : Super_String;
        Pattern : String;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Super_Index
       (Source : Super_String;
        Set    : Maps.Character_Set;
        Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural;
  
     function Super_Index
       (Source  : Super_String;
        Pattern : String;
        From    : Positive;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Super_Index
       (Source  : Super_String;
        Pattern : String;
        From    : Positive;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Super_Index
       (Source : Super_String;
        Set    : Maps.Character_Set;
        From   : Positive;
        Test   : Membership := Inside;
!       Going  : Direction := Forward) return Natural;
  
     function Super_Index_Non_Blank
       (Source : Super_String;
!       Going  : Direction := Forward) return Natural;
  
     function Super_Index_Non_Blank
       (Source : Super_String;
        From   : Positive;
!       Going  : Direction := Forward) return Natural;
  
     function Super_Count
       (Source  : Super_String;
        Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
  
     function Super_Count
       (Source  : Super_String;
        Pattern : String;
!       Mapping : Maps.Character_Mapping_Function) return Natural;
  
     function Super_Count
       (Source : Super_String;
!       Set    : Maps.Character_Set) return Natural;
  
     procedure Super_Find_Token
       (Source : Super_String;
--- 808,1256 ----
       (Source  : Super_String;
        Pattern : String;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
!    with
!      Pre            => Pattern'Length > 0,
!      Post           => Super_Index'Result <= Super_Length (Source),
!      Contract_Cases =>
! 
!        --  If Source is the empty string, then 0 is returned
! 
!        (Super_Length (Source) = 0
!         =>
!           Super_Index'Result = 0,
! 
!         --  If some slice of Source matches Pattern, then a valid index is
!         --  returned.
! 
!         Super_Length (Source) > 0
!           and then
!             (for some J in 1 .. Super_Length (Source) - (Pattern'Length - 1) =>
!                Search.Match (Super_To_String (Source), Pattern, Mapping, J))
!         =>
!           --  The result is in the considered range of Source
! 
!           Super_Index'Result in
!             1 .. Super_Length (Source) - (Pattern'Length - 1)
! 
!             --  The slice beginning at the returned index matches Pattern
! 
!             and then Search.Match
!               (Super_To_String (Source), Pattern, Mapping, Super_Index'Result)
! 
!             --  The result is the smallest or largest index which satisfies
!             --  the matching, respectively when Going = Forward and Going =
!             --  Backward.
! 
!             and then
!               (for all J in 1 .. Super_Length (Source) =>
!                  (if (if Going = Forward
!                       then J <= Super_Index'Result - 1
!                       else J - 1 in Super_Index'Result
!                                     .. Super_Length (Source) - Pattern'Length)
!                   then not (Search.Match
!                     (Super_To_String (Source), Pattern, Mapping, J)))),
! 
!         --  Otherwise, 0 is returned
! 
!         others
!         =>
!           Super_Index'Result = 0),
!      Global         => null;
  
     function Super_Index
       (Source  : Super_String;
        Pattern : String;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural
!    with
!      Pre            => Pattern'Length /= 0 and then Mapping /= null,
!      Post           => Super_Index'Result <= Super_Length (Source),
!      Contract_Cases =>
! 
!        --  If Source is the empty string, then 0 is returned
! 
!        (Super_Length (Source) = 0
!         =>
!           Super_Index'Result = 0,
! 
!         --  If some slice of Source matches Pattern, then a valid index is
!         --  returned.
! 
!         Super_Length (Source) > 0
!           and then
!             (for some J in 1 .. Super_Length (Source) - (Pattern'Length - 1) =>
!                Search.Match (Super_To_String (Source), Pattern, Mapping, J))
!         =>
!           --  The result is in the considered range of Source
! 
!           Super_Index'Result in
!             1 .. Super_Length (Source) - (Pattern'Length - 1)
! 
!             --  The slice beginning at the returned index matches Pattern
! 
!             and then Search.Match
!               (Super_To_String (Source), Pattern, Mapping, Super_Index'Result)
! 
!             --  The result is the smallest or largest index which satisfies
!             --  the matching, respectively when Going = Forward and Going =
!             --  Backward.
! 
!             and then
!               (for all J in 1 .. Super_Length (Source) =>
!                  (if (if Going = Forward
!                       then J <= Super_Index'Result - 1
!                       else J - 1 in Super_Index'Result
!                                     .. Super_Length (Source) - Pattern'Length)
!                   then not (Search.Match
!                     (Super_To_String (Source), Pattern, Mapping, J)))),
! 
!         --  Otherwise, 0 is returned
! 
!         others
!         =>
!           Super_Index'Result = 0),
!      Global         => null;
  
     function Super_Index
       (Source : Super_String;
        Set    : Maps.Character_Set;
        Test   : Membership := Inside;
!       Going  : Direction  := Forward) return Natural
!    with
!      Post           => Super_Index'Result <= Super_Length (Source),
!      Contract_Cases =>
! 
!         --  If no character of Source satisfies the property Test on Set,
!         --  then 0 is returned.
! 
!        ((for all C of Super_To_String (Source) =>
!            (Test = Inside) /= Maps.Is_In (C, Set))
!         =>
!           Super_Index'Result = 0,
! 
!         --  Otherwise, an index in the range of Source is returned
! 
!         others
!         =>
!           --  The result is in the range of Source
! 
!           Super_Index'Result in 1 .. Super_Length (Source)
! 
!             --  The character at the returned index satisfies the property
!             --  Test on Set.
! 
!             and then
!               (Test = Inside) =
!                 Maps.Is_In (Super_Element (Source, Super_Index'Result), Set)
! 
!             --  The result is the smallest or largest index which satisfies
!             --  the property, respectively when Going = Forward and Going =
!             --  Backward.
! 
!             and then
!               (for all J in 1 .. Super_Length (Source) =>
!                  (if J /= Super_Index'Result
!                        and then (J < Super_Index'Result) = (Going = Forward)
!                   then (Test = Inside)
!                        /= Maps.Is_In (Super_Element (Source, J), Set)))),
!      Global         => null;
  
     function Super_Index
       (Source  : Super_String;
        Pattern : String;
        From    : Positive;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
!    with
!      Pre            =>
!        (if Super_Length (Source) /= 0 then From <= Super_Length (Source))
!          and then Pattern'Length /= 0,
!      Post           => Super_Index'Result <= Super_Length (Source),
!      Contract_Cases =>
! 
!        --  If Source is the empty string, then 0 is returned
! 
!        (Super_Length (Source) = 0
!         =>
!           Super_Index'Result = 0,
! 
!         --  If some slice of Source matches Pattern, then a valid index is
!         --  returned.
! 
!         Super_Length (Source) > 0
!           and then
!             (for some J in
!               (if Going = Forward then From else 1)
!                .. (if Going = Forward then Super_Length (Source) else From)
!                 - (Pattern'Length - 1) =>
!               Search.Match (Super_To_String (Source), Pattern, Mapping, J))
!         =>
!           --  The result is in the considered range of Source
! 
!           Super_Index'Result in
!             (if Going = Forward then From else 1)
!             .. (if Going = Forward then Super_Length (Source) else From)
!              - (Pattern'Length - 1)
! 
!             --  The slice beginning at the returned index matches Pattern
! 
!             and then Search.Match
!               (Super_To_String (Source), Pattern, Mapping, Super_Index'Result)
! 
!             --  The result is the smallest or largest index which satisfies
!             --  the matching, respectively when Going = Forward and Going =
!             --  Backward.
! 
!             and then
!               (for all J in 1 .. Super_Length (Source) =>
!                  (if (if Going = Forward
!                       then J in From .. Super_Index'Result - 1
!                       else J - 1 in Super_Index'Result
!                                     .. From - Pattern'Length)
!                   then not (Search.Match
!                     (Super_To_String (Source), Pattern, Mapping, J)))),
! 
!         --  Otherwise, 0 is returned
! 
!         others
!         =>
!           Super_Index'Result = 0),
!      Global         => null;
  
     function Super_Index
       (Source  : Super_String;
        Pattern : String;
        From    : Positive;
        Going   : Direction := Forward;
!       Mapping : Maps.Character_Mapping_Function) return Natural
!    with
!      Pre            =>
!        (if Super_Length (Source) /= 0 then From <= Super_Length (Source))
!          and then Pattern'Length /= 0
!          and then Mapping /= null,
!      Post           => Super_Index'Result <= Super_Length (Source),
!      Contract_Cases =>
! 
!        --  If Source is the empty string, then 0 is returned
! 
!        (Super_Length (Source) = 0
!         =>
!           Super_Index'Result = 0,
! 
!         --  If some slice of Source matches Pattern, then a valid index is
!         --  returned.
! 
!         Super_Length (Source) > 0
!           and then
!             (for some J in
!               (if Going = Forward then From else 1)
!                .. (if Going = Forward then Super_Length (Source) else From)
!                 - (Pattern'Length - 1) =>
!               Search.Match (Super_To_String (Source), Pattern, Mapping, J))
!         =>
!           --  The result is in the considered range of Source
! 
!           Super_Index'Result in
!             (if Going = Forward then From else 1)
!             .. (if Going = Forward then Super_Length (Source) else From)
!              - (Pattern'Length - 1)
! 
!             --  The slice beginning at the returned index matches Pattern
! 
!             and then Search.Match
!               (Super_To_String (Source), Pattern, Mapping, Super_Index'Result)
! 
!             --  The result is the smallest or largest index which satisfies
!             --  the matching, respectively when Going = Forward and Going =
!             --  Backward.
! 
!             and then
!               (for all J in 1 .. Super_Length (Source) =>
!                  (if (if Going = Forward
!                       then J in From .. Super_Index'Result - 1
!                       else J - 1 in Super_Index'Result
!                                     .. From - Pattern'Length)
!                   then not (Search.Match
!                     (Super_To_String (Source), Pattern, Mapping, J)))),
! 
!         --  Otherwise, 0 is returned
! 
!         others
!         =>
!           Super_Index'Result = 0),
!      Global         => null;
  
     function Super_Index
       (Source : Super_String;
        Set    : Maps.Character_Set;
        From   : Positive;
        Test   : Membership := Inside;
!       Going  : Direction := Forward) return Natural
!    with
!      Pre            =>
!        (if Super_Length (Source) /= 0 then From <= Super_Length (Source)),
!      Post           => Super_Index'Result <= Super_Length (Source),
!      Contract_Cases =>
! 
!         --  If Source is the empty string, or no character of the considered
!         --  slice of Source satisfies the property Test on Set, then 0 is
!         --  returned.
! 
!        (Super_Length (Source) = 0
!           or else
!             (for all J in 1 .. Super_Length (Source) =>
!                (if J = From or else (J > From) = (Going = Forward) then
!                   (Test = Inside) /=
!                     Maps.Is_In (Super_Element (Source, J), Set)))
!         =>
!           Super_Index'Result = 0,
! 
!         --  Otherwise, an index in the considered range of Source is returned
! 
!         others
!         =>
!           --  The result is in the considered range of Source
! 
!           Super_Index'Result in 1 .. Super_Length (Source)
!             and then
!               (Super_Index'Result = From
!                  or else (Super_Index'Result > From) = (Going = Forward))
! 
!             --  The character at the returned index satisfies the property
!             --  Test on Set.
! 
!             and then
!               (Test = Inside) =
!                 Maps.Is_In (Super_Element (Source, Super_Index'Result), Set)
! 
!             --  The result is the smallest or largest index which satisfies
!             --  the property, respectively when Going = Forward and Going =
!             --  Backward.
! 
!             and then
!               (for all J in 1 .. Super_Length (Source) =>
!                  (if J /= Super_Index'Result
!                     and then (J < Super_Index'Result) = (Going = Forward)
!                     and then (J = From
!                                 or else (J > From) = (Going = Forward))
!                   then (Test = Inside)
!                        /= Maps.Is_In (Super_Element (Source, J), Set)))),
!      Global         => null;
  
     function Super_Index_Non_Blank
       (Source : Super_String;
!       Going  : Direction := Forward) return Natural
!    with
!      Post           => Super_Index_Non_Blank'Result <= Super_Length (Source),
!      Contract_Cases =>
! 
!         --  If all characters of Source are Space characters, then 0 is
!         --  returned.
! 
!        ((for all C of Super_To_String (Source) => C = ' ')
!         =>
!           Super_Index_Non_Blank'Result = 0,
! 
!         --  Otherwise, an index in the range of Source is returned
! 
!         others
!         =>
!           --  The result is in the range of Source
! 
!           Super_Index_Non_Blank'Result in 1 .. Super_Length (Source)
! 
!             --  The character at the returned index is not a Space character
! 
!             and then
!               Super_Element (Source, Super_Index_Non_Blank'Result) /= ' '
! 
!             --  The result is the smallest or largest index which is not a
!             --  Space character, respectively when Going = Forward and Going
!             --  = Backward.
! 
!             and then
!               (for all J in 1 .. Super_Length (Source) =>
!                  (if J /= Super_Index_Non_Blank'Result
!                        and then
!                          (J < Super_Index_Non_Blank'Result) = (Going = Forward)
!                   then Super_Element (Source, J) = ' '))),
!      Global         => null;
  
     function Super_Index_Non_Blank
       (Source : Super_String;
        From   : Positive;
!       Going  : Direction := Forward) return Natural
!    with
!      Pre            =>
!        (if Super_Length (Source) /= 0 then From <= Super_Length (Source)),
!      Post           => Super_Index_Non_Blank'Result <= Super_Length (Source),
!      Contract_Cases =>
! 
!         --  If Source is the empty string, or all characters of the
!         --  considered slice of Source are Space characters, then 0
!         --  is returned.
! 
!        (Super_Length (Source) = 0
!           or else
!             (for all J in 1 .. Super_Length (Source) =>
!                (if J = From or else (J > From) = (Going = Forward) then
!                   Super_Element (Source, J) = ' '))
!         =>
!           Super_Index_Non_Blank'Result = 0,
! 
!         --  Otherwise, an index in the considered range of Source is returned
! 
!         others
!         =>
!           --  The result is in the considered range of Source
! 
!           Super_Index_Non_Blank'Result in 1 .. Super_Length (Source)
!             and then
!               (Super_Index_Non_Blank'Result = From
!                  or else
!                    (Super_Index_Non_Blank'Result > From) = (Going = Forward))
! 
!             --  The character at the returned index is not a Space character
! 
!             and then
!               Super_Element (Source, Super_Index_Non_Blank'Result) /= ' '
! 
!             --  The result is the smallest or largest index which isn't a
!             --  Space character, respectively when Going = Forward and Going
!             --  = Backward.
! 
!             and then
!               (for all J in 1 .. Super_Length (Source) =>
!                  (if J /= Super_Index_Non_Blank'Result
!                     and then
!                       (J < Super_Index_Non_Blank'Result) = (Going = Forward)
!                     and then (J = From
!                                 or else (J > From) = (Going = Forward))
!                   then Super_Element (Source, J) = ' '))),
!      Global         => null;
  
     function Super_Count
       (Source  : Super_String;
        Pattern : String;
!       Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
!    with
!      Pre    => Pattern'Length /= 0,
!      Global => null;
  
     function Super_Count
       (Source  : Super_String;
        Pattern : String;
!       Mapping : Maps.Character_Mapping_Function) return Natural
!    with
!      Pre    => Pattern'Length /= 0 and then Mapping /= null,
!      Global => null;
  
     function Super_Count
       (Source : Super_String;
!       Set    : Maps.Character_Set) return Natural
!    with
!      Global => null;
  
     procedure Super_Find_Token
       (Source : Super_String;
*************** package Ada.Strings.Superbounded is
*** 301,314 ****
        From   : Positive;
        Test   : Membership;
        First  : out Positive;
!       Last   : out Natural);
  
     procedure Super_Find_Token
       (Source : Super_String;
        Set    : Maps.Character_Set;
        Test   : Membership;
        First  : out Positive;
!       Last   : out Natural);
  
     ------------------------------------
     -- String Translation Subprograms --
--- 1258,1369 ----
        From   : Positive;
        Test   : Membership;
        First  : out Positive;
!       Last   : out Natural)
!    with
!      Pre            =>
!        (if Super_Length (Source) /= 0 then From <= Super_Length (Source)),
!      Contract_Cases =>
! 
!         --  If Source is the empty string, or if no character of the
!         --  considered slice of Source satisfies the property Test on
!         --  Set, then First is set to From and Last is set to 0.
! 
!        (Super_Length (Source) = 0
!           or else
!             (for all J in From .. Super_Length (Source) =>
!                (Test = Inside) /= Maps.Is_In (Super_Element (Source, J), Set))
!         =>
!           First = From and then Last = 0,
! 
!         --  Otherwise, First and Last are set to valid indexes
! 
!         others
!         =>
!           --  First and Last are in the considered range of Source
! 
!           First in From .. Super_Length (Source)
!             and then Last in First .. Super_Length (Source)
! 
!             --  No character between From and First satisfies the property
!             --  Test on Set.
! 
!             and then
!               (for all J in From .. First - 1 =>
!                  (Test = Inside) /=
!                    Maps.Is_In (Super_Element (Source, J), Set))
! 
!             --  All characters between First and Last satisfy the property
!             --  Test on Set.
! 
!             and then
!               (for all J in First .. Last =>
!                  (Test = Inside) =
!                    Maps.Is_In (Super_Element (Source, J), Set))
! 
!             --  If Last is not Source'Last, then the character at position
!             --  Last + 1 does not satify the property Test on Set.
! 
!             and then
!               (if Last < Super_Length (Source)
!                then
!                  (Test = Inside) /=
!                    Maps.Is_In (Super_Element (Source, Last + 1), Set))),
!      Global         => null;
  
     procedure Super_Find_Token
       (Source : Super_String;
        Set    : Maps.Character_Set;
        Test   : Membership;
        First  : out Positive;
!       Last   : out Natural)
!    with
!      Contract_Cases =>
! 
!         --  If Source is the empty string, or if no character of the considered
!         --  slice of Source satisfies the property Test on Set, then First is
!         --  set to 1 and Last is set to 0.
! 
!        (Super_Length (Source) = 0
!           or else
!             (for all J in 1 .. Super_Length (Source) =>
!                (Test = Inside) /= Maps.Is_In (Super_Element (Source, J), Set))
!         =>
!           First = 1 and then Last = 0,
! 
!         --  Otherwise, First and Last are set to valid indexes
! 
!         others
!         =>
!           --  First and Last are in the considered range of Source
! 
!           First in 1 .. Super_Length (Source)
!             and then Last in First .. Super_Length (Source)
! 
!             --  No character between 1 and First satisfies the property Test on
!             --  Set.
! 
!             and then
!               (for all J in 1 .. First - 1 =>
!                  (Test = Inside) /=
!                    Maps.Is_In (Super_Element (Source, J), Set))
! 
!             --  All characters between First and Last satisfy the property
!             --  Test on Set.
! 
!             and then
!               (for all J in First .. Last =>
!                  (Test = Inside) =
!                    Maps.Is_In (Super_Element (Source, J), Set))
! 
!             --  If Last is not Source'Last, then the character at position
!             --  Last + 1 does not satify the property Test on Set.
! 
!             and then
!               (if Last < Super_Length (Source)
!                then
!                  (Test = Inside) /=
!                    Maps.Is_In (Super_Element (Source, Last + 1), Set))),
!      Global         => null;
  
     ------------------------------------
     -- String Translation Subprograms --
*************** package Ada.Strings.Superbounded is
*** 316,334 ****
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Maps.Character_Mapping) return Super_String;
  
     procedure Super_Translate
       (Source   : in out Super_String;
!       Mapping  : Maps.Character_Mapping);
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Maps.Character_Mapping_Function) return Super_String;
  
     procedure Super_Translate
       (Source  : in out Super_String;
!       Mapping : Maps.Character_Mapping_Function);
  
     ---------------------------------------
     -- String Transformation Subprograms --
--- 1371,1421 ----
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Maps.Character_Mapping) return Super_String
!    with
!      Post   => Super_Translate'Result.Max_Length = Source.Max_Length
!        and then Super_Length (Super_Translate'Result) = Super_Length (Source)
!        and then
!          (for all K in 1 .. Super_Length (Source) =>
!             Super_Element (Super_Translate'Result, K) =
!               Ada.Strings.Maps.Value (Mapping, Super_Element (Source, K))),
!      Global => null;
  
     procedure Super_Translate
       (Source   : in out Super_String;
!       Mapping  : Maps.Character_Mapping)
!    with
!      Post   => Super_Length (Source) = Super_Length (Source'Old)
!        and then
!          (for all K in 1 .. Super_Length (Source) =>
!             Super_Element (Source, K) =
!               Ada.Strings.Maps.Value (Mapping, Super_Element (Source'Old, K))),
!      Global => null;
  
     function Super_Translate
       (Source  : Super_String;
!       Mapping : Maps.Character_Mapping_Function) return Super_String
!    with
!      Pre    => Mapping /= null,
!      Post   => Super_Translate'Result.Max_Length = Source.Max_Length
!        and then Super_Length (Super_Translate'Result) = Super_Length (Source)
!        and then
!          (for all K in 1 .. Super_Length (Source) =>
!             Super_Element (Super_Translate'Result, K) =
!               Mapping (Super_Element (Source, K))),
!      Global => null;
  
     procedure Super_Translate
       (Source  : in out Super_String;
!       Mapping : Maps.Character_Mapping_Function)
!    with
!      Pre    => Mapping /= null,
!      Post   => Super_Length (Source) = Super_Length (Source'Old)
!        and then
!          (for all K in 1 .. Super_Length (Source) =>
!             Super_Element (Source, K) =
!               Mapping (Super_Element (Source'Old, K))),
!      Global => null;
  
     ---------------------------------------
     -- String Transformation Subprograms --
*************** package Ada.Strings.Superbounded is
*** 339,386 ****
        Low    : Positive;
        High   : Natural;
        By     : String;
!       Drop   : Truncation := Error) return Super_String;
  
     procedure Super_Replace_Slice
       (Source  : in out Super_String;
        Low     : Positive;
        High    : Natural;
        By      : String;
!       Drop    : Truncation := Error);
  
     function Super_Insert
       (Source   : Super_String;
        Before   : Positive;
        New_Item : String;
!       Drop     : Truncation := Error) return Super_String;
  
     procedure Super_Insert
       (Source   : in out Super_String;
        Before   : Positive;
        New_Item : String;
!       Drop     : Truncation := Error);
  
     function Super_Overwrite
       (Source   : Super_String;
        Position : Positive;
        New_Item : String;
!       Drop     : Truncation := Error) return Super_String;
  
     procedure Super_Overwrite
       (Source    : in out Super_String;
        Position  : Positive;
        New_Item  : String;
!       Drop      : Truncation := Error);
  
     function Super_Delete
       (Source  : Super_String;
        From    : Positive;
!       Through : Natural) return Super_String;
  
     procedure Super_Delete
       (Source  : in out Super_String;
        From    : Positive;
!       Through : Natural);
  
     ---------------------------------
     -- String Selector Subprograms --
--- 1426,2181 ----
        Low    : Positive;
        High   : Natural;
        By     : String;
!       Drop   : Truncation := Error) return Super_String
!    with
!      Pre            =>
!        Low - 1 <= Super_Length (Source)
!          and then
!            (if Drop = Error
!               then (if High >= Low
!                       then Low - 1
!                         <= Source.Max_Length - By'Length
!                          - Integer'Max (Super_Length (Source) - High, 0)
!                       else Super_Length (Source) <=
!                              Source.Max_Length - By'Length)),
!      Post           =>
!        Super_Replace_Slice'Result.Max_Length = Source.Max_Length,
!      Contract_Cases =>
!        (Low - 1 <= Source.Max_Length - By'Length - Integer'Max
!           (Super_Length (Source) - Integer'Max (High, Low - 1), 0)
!         =>
!           --  Total length is lower than Max_Length: nothing is dropped
! 
!           --  Note that if High < Low, the insertion is done before Low, so in
!           --  all cases the starting position of the slice of Source remaining
!           --  after the replaced Slice is Integer'Max (High + 1, Low).
! 
!           Super_Length (Super_Replace_Slice'Result) =
!             Low - 1 + By'Length + Integer'Max
!               (Super_Length (Source) - Integer'Max (High, Low - 1), 0)
!             and then
!               String'(Super_Slice (Super_Replace_Slice'Result, 1, Low - 1)) =
!                 Super_Slice (Source, 1, Low - 1)
!             and then
!               Super_Slice (Super_Replace_Slice'Result,
!                 Low, Low - 1 + By'Length) = By
!             and then
!               (if Integer'Max (High, Low - 1) < Super_Length (Source) then
!                  String'(Super_Slice (Super_Replace_Slice'Result,
!                    Low + By'Length,
!                    Super_Length (Super_Replace_Slice'Result))) =
!                      Super_Slice (Source,
!                        Integer'Max (High + 1, Low), Super_Length (Source))),
! 
!         Low - 1 > Source.Max_Length - By'Length - Integer'Max
!           (Super_Length (Source) - Integer'Max (High, Low - 1), 0)
!           and then Drop = Left
!         =>
!           --  Final_Super_Slice is the length of the slice of Source remaining
!           --  after the replaced part.
!           (declare
!              Final_Super_Slice : constant Natural :=
!                Integer'Max
!                  (Super_Length (Source) - Integer'Max (High, Low - 1), 0);
!            begin
!              --  The result is of maximal length and ends by the last
!              --  Final_Super_Slice characters of Source.
! 
!              Super_Length (Super_Replace_Slice'Result) = Source.Max_Length
!                and then
!                  (if Final_Super_Slice > 0 then
!                     String'(Super_Slice (Super_Replace_Slice'Result,
!                       Source.Max_Length - Final_Super_Slice + 1,
!                       Source.Max_Length)) =
!                         Super_Slice (Source,
!                           Integer'Max (High + 1, Low), Super_Length (Source)))
! 
!                --  Depending on when we reach Max_Length, either the first
!                --  part of Source is fully dropped and By is partly dropped,
!                --  or By is fully added and the first part of Source is partly
!                --  dropped.
! 
!                and then
!                 (if Source.Max_Length - Final_Super_Slice - By'Length <= 0 then
! 
!                    --  The first (possibly zero) characters of By are dropped
! 
!                    (if Final_Super_Slice < Source.Max_Length then
!                       Super_Slice (Super_Replace_Slice'Result,
!                         1, Source.Max_Length - Final_Super_Slice) =
!                           By (By'Last - Source.Max_Length + Final_Super_Slice
!                                 + 1
!                               .. By'Last))
! 
!                  else  --  By is added to the result
! 
!                    Super_Slice (Super_Replace_Slice'Result,
!                      Source.Max_Length - Final_Super_Slice - By'Length + 1,
!                      Source.Max_Length - Final_Super_Slice) =
!                        By
! 
!                      --  The first characters of Source (1 .. Low - 1) are
!                      --  dropped.
! 
!                      and then
!                        String'(Super_Slice (Super_Replace_Slice'Result, 1,
!                          Source.Max_Length - Final_Super_Slice - By'Length)) =
!                            Super_Slice (Source,
!                              Low - Source.Max_Length
!                                + Final_Super_Slice + By'Length,
!                              Low - 1))),
! 
!         others  --  Drop = Right
!         =>
!           --  The result is of maximal length and starts by the first Low - 1
!           --  characters of Source.
! 
!           Super_Length (Super_Replace_Slice'Result) = Source.Max_Length
!             and then
!               String'(Super_Slice (Super_Replace_Slice'Result, 1, Low - 1)) =
!                 Super_Slice (Source, 1, Low - 1)
! 
!             --  Depending on when we reach Max_Length, either the last part
!             --  of Source is fully dropped and By is partly dropped, or By
!             --  is fully added and the last part of Source is partly dropped.
! 
!             and then
!               (if Low - 1 >= Source.Max_Length - By'Length then
! 
!                  --  The last characters of By are dropped
! 
!                  Super_Slice (Super_Replace_Slice'Result,
!                    Low, Source.Max_Length) =
!                      By (By'First .. Source.Max_Length - Low + By'First)
! 
!                else  --  By is fully added
! 
!                  Super_Slice (Super_Replace_Slice'Result,
!                    Low, Low + By'Length - 1) = By
! 
!                    --  Then Source starting from Natural'Max (High + 1, Low)
!                    --  is added but the last characters are dropped.
! 
!                    and then
!                      String'(Super_Slice (Super_Replace_Slice'Result,
!                        Low + By'Length, Source.Max_Length)) =
!                          Super_Slice (Source, Integer'Max (High + 1, Low),
!                            Integer'Max (High + 1, Low) +
!                              (Source.Max_Length - Low - By'Length)))),
!      Global         => null;
  
     procedure Super_Replace_Slice
       (Source  : in out Super_String;
        Low     : Positive;
        High    : Natural;
        By      : String;
!       Drop    : Truncation := Error)
!    with
!      Pre            =>
!        Low - 1 <= Super_Length (Source)
!          and then
!            (if Drop = Error
!               then (if High >= Low
!                       then Low - 1
!                         <= Source.Max_Length - By'Length
!                          - Natural'Max (Super_Length (Source) - High, 0)
!                       else Super_Length (Source) <=
!                              Source.Max_Length - By'Length)),
!      Contract_Cases =>
!        (Low - 1 <= Source.Max_Length - By'Length - Integer'Max
!           (Super_Length (Source) - Integer'Max (High, Low - 1), 0)
!         =>
!           --  Total length is lower than Max_Length: nothing is dropped
! 
!           --  Note that if High < Low, the insertion is done before Low, so in
!           --  all cases the starting position of the slice of Source remaining
!           --  after the replaced Slice is Integer'Max (High + 1, Low).
! 
!           Super_Length (Source) = Low - 1 + By'Length + Integer'Max
!             (Super_Length (Source'Old) - Integer'Max (High, Low - 1), 0)
!             and then
!               String'(Super_Slice (Source, 1, Low - 1)) =
!                 Super_Slice (Source'Old, 1, Low - 1)
!             and then Super_Slice (Source, Low, Low - 1 + By'Length) = By
!             and then
!               (if Integer'Max (High, Low - 1) < Super_Length (Source'Old) then
!                  String'(Super_Slice (Source,
!                    Low + By'Length, Super_Length (Source))) =
!                      Super_Slice (Source'Old,
!                        Integer'Max (High + 1, Low),
!                        Super_Length (Source'Old))),
! 
!         Low - 1 > Source.Max_Length - By'Length - Integer'Max
!           (Super_Length (Source) - Integer'Max (High, Low - 1), 0)
!           and then Drop = Left
!         =>
!           --  Final_Super_Slice is the length of the slice of Source remaining
!           --  after the replaced part.
!           (declare
!              Final_Super_Slice : constant Natural :=
!                Integer'Max (0,
!                  Super_Length (Source'Old) - Integer'Max (High, Low - 1));
!            begin
!              --  The result is of maximal length and ends by the last
!              --  Final_Super_Slice characters of Source.
! 
!              Super_Length (Source) = Source.Max_Length
!                and then
!                  (if Final_Super_Slice > 0 then
!                     String'(Super_Slice (Source,
!                       Source.Max_Length - Final_Super_Slice + 1,
!                       Source.Max_Length)) =
!                         Super_Slice (Source'Old,
!                           Integer'Max (High + 1, Low),
!                           Super_Length (Source'Old)))
! 
!                --  Depending on when we reach Max_Length, either the first
!                --  part of Source is fully dropped and By is partly dropped,
!                --  or By is fully added and the first part of Source is partly
!                --  dropped.
! 
!                and then
!                  (if Source.Max_Length - Final_Super_Slice - By'Length <= 0
!                   then
!                     --  The first characters of By are dropped
! 
!                     (if Final_Super_Slice < Source.Max_Length then
!                        Super_Slice (Source,
!                          1, Source.Max_Length - Final_Super_Slice) =
!                            By (By'Last - Source.Max_Length + Final_Super_Slice
!                                  + 1
!                                .. By'Last))
! 
!                   else  --  By is added to the result
! 
!                     Super_Slice (Source,
!                       Source.Max_Length - Final_Super_Slice - By'Length + 1,
!                       Source.Max_Length - Final_Super_Slice) = By
! 
!                       --  The first characters of Source (1 .. Low - 1) are
!                       --  dropped.
! 
!                       and then
!                         String'(Super_Slice (Source, 1,
!                           Source.Max_Length - Final_Super_Slice - By'Length)) =
!                             Super_Slice (Source'Old,
!                               Low - Source.Max_Length + Final_Super_Slice
!                                 + By'Length,
!                               Low - 1))),
! 
!         others  --  Drop = Right
!         =>
!           --  The result is of maximal length and starts by the first Low - 1
!           --  characters of Source.
! 
!           Super_Length (Source) = Source.Max_Length
!             and then
!               String'(Super_Slice (Source, 1, Low - 1)) =
!                 Super_Slice (Source'Old, 1, Low - 1)
! 
!             --  Depending on when we reach Max_Length, either the last part
!             --  of Source is fully dropped and By is partly dropped, or By
!             --  is fully added and the last part of Source is partly dropped.
! 
!             and then
!               (if Low - 1 >= Source.Max_Length - By'Length then
! 
!                  --  The last characters of By are dropped
! 
!                  Super_Slice (Source, Low, Source.Max_Length) =
!                    By (By'First .. Source.Max_Length - Low + By'First)
! 
!                else  --  By is fully added
! 
!                  Super_Slice (Source, Low, Low + By'Length - 1) = By
! 
!                    --  Then Source starting from Natural'Max (High + 1, Low)
!                    --  is added but the last characters are dropped.
! 
!                    and then
!                      String'(Super_Slice (Source,
!                        Low + By'Length, Source.Max_Length)) =
!                          Super_Slice (Source'Old, Integer'Max (High + 1, Low),
!                            Integer'Max (High + 1, Low) +
!                              (Source.Max_Length - Low - By'Length)))),
!      Global         => null;
  
     function Super_Insert
       (Source   : Super_String;
        Before   : Positive;
        New_Item : String;
!       Drop     : Truncation := Error) return Super_String
!    with
!      Pre            =>
!        Before - 1 <= Super_Length (Source)
!          and then
!            (if New_Item'Length > Source.Max_Length - Super_Length (Source)
!             then Drop /= Error),
!      Post           => Super_Insert'Result.Max_Length = Source.Max_Length,
!      Contract_Cases =>
!        (Super_Length (Source) <= Source.Max_Length - New_Item'Length
!         =>
!           --  Total length is lower than Max_Length: nothing is dropped
! 
!           Super_Length (Super_Insert'Result) =
!             Super_Length (Source) + New_Item'Length
!             and then
!               String'(Super_Slice (Super_Insert'Result, 1, Before - 1)) =
!                 Super_Slice (Source, 1, Before - 1)
!             and then
!               Super_Slice (Super_Insert'Result,
!                 Before, Before - 1 + New_Item'Length) =
!                   New_Item
!             and then
!               (if Before <= Super_Length (Source) then
!                  String'(Super_Slice (Super_Insert'Result,
!                    Before + New_Item'Length,
!                    Super_Length (Super_Insert'Result))) =
!                      Super_Slice (Source, Before, Super_Length (Source))),
! 
!         Super_Length (Source) > Source.Max_Length - New_Item'Length
!           and then Drop = Left
!         =>
!           --  The result is of maximal length and ends by the last characters
!           --  of Source.
! 
!           Super_Length (Super_Insert'Result) = Source.Max_Length
!             and then
!               (if Before <= Super_Length (Source) then
!                  String'(Super_Slice (Super_Insert'Result,
!                    Source.Max_Length - Super_Length (Source) + Before,
!                    Source.Max_Length)) =
!                      Super_Slice (Source, Before, Super_Length (Source)))
! 
!             --  Depending on when we reach Max_Length, either the first part
!             --  of Source is fully dropped and New_Item is partly dropped, or
!             --  New_Item is fully added and the first part of Source is partly
!             --  dropped.
! 
!             and then
!               (if Source.Max_Length - Super_Length (Source) - 1 + Before
!                 < New_Item'Length
!                then
!                  --  The first characters of New_Item are dropped
! 
!                  (if Super_Length (Source) - Before + 1 < Source.Max_Length
!                   then
!                     Super_Slice (Super_Insert'Result, 1,
!                       Source.Max_Length - Super_Length (Source) - 1 + Before) =
!                         New_Item
!                           (New_Item'Last - Source.Max_Length
!                             + Super_Length (Source) - Before + 2
!                            .. New_Item'Last))
! 
!                else  --  New_Item is added to the result
! 
!                  Super_Slice (Super_Insert'Result,
!                    Source.Max_Length - Super_Length (Source) - New_Item'Length
!                      + Before,
!                    Source.Max_Length - Super_Length (Source) - 1 + Before) =
!                      New_Item
! 
!                    --  The first characters of Source (1 .. Before - 1) are
!                    --  dropped.
! 
!                    and then
!                      String'(Super_Slice (Super_Insert'Result,
!                        1, Source.Max_Length - Super_Length (Source)
!                          - New_Item'Length - 1 + Before)) =
!                            Super_Slice (Source,
!                              Super_Length (Source) - Source.Max_Length
!                                + New_Item'Length + 1,
!                              Before - 1)),
! 
!         others  --  Drop = Right
!         =>
!           --  The result is of maximal length and starts by the first
!           --  characters of Source.
! 
!           Super_Length (Super_Insert'Result) = Source.Max_Length
!             and then
!               String'(Super_Slice (Super_Insert'Result, 1, Before - 1)) =
!                 Super_Slice (Source, 1, Before - 1)
! 
!             --  Depending on when we reach Max_Length, either the last part
!             --  of Source is fully dropped and New_Item is partly dropped, or
!             --  New_Item is fully added and the last part of Source is partly
!             --  dropped.
! 
!             and then
!               (if Before - 1 >= Source.Max_Length - New_Item'Length then
! 
!                  --  The last characters of New_Item are dropped
! 
!                  Super_Slice (Super_Insert'Result, Before, Source.Max_Length) =
!                    New_Item (New_Item'First
!                      .. Source.Max_Length - Before + New_Item'First)
! 
!                else  --  New_Item is fully added
! 
!                  Super_Slice (Super_Insert'Result,
!                    Before, Before + New_Item'Length - 1) =
!                      New_Item
! 
!                    --  Then Source starting from Before is added but the
!                    --  last characters are dropped.
! 
!                    and then
!                      String'(Super_Slice (Super_Insert'Result,
!                        Before + New_Item'Length, Source.Max_Length)) =
!                          Super_Slice (Source,
!                            Before, Source.Max_Length - New_Item'Length))),
!      Global         => null;
  
     procedure Super_Insert
       (Source   : in out Super_String;
        Before   : Positive;
        New_Item : String;
!       Drop     : Truncation := Error)
!    with
!      Pre            =>
!        Before - 1 <= Super_Length (Source)
!          and then
!            (if New_Item'Length > Source.Max_Length - Super_Length (Source)
!             then Drop /= Error),
!      Contract_Cases =>
!        (Super_Length (Source) <= Source.Max_Length - New_Item'Length
!         =>
!           --  Total length is lower than Max_Length: nothing is dropped
! 
!           Super_Length (Source) = Super_Length (Source'Old) + New_Item'Length
!             and then
!               String'(Super_Slice (Source, 1, Before - 1)) =
!                 Super_Slice (Source'Old, 1, Before - 1)
!             and then
!               Super_Slice (Source, Before, Before - 1 + New_Item'Length) =
!                 New_Item
!             and then
!               (if Before <= Super_Length (Source'Old) then
!                  String'(Super_Slice (Source,
!                    Before + New_Item'Length, Super_Length (Source))) =
!                      Super_Slice (Source'Old,
!                        Before, Super_Length (Source'Old))),
! 
!         Super_Length (Source) > Source.Max_Length - New_Item'Length
!           and then Drop = Left
!         =>
!           --  The result is of maximal length and ends by the last characters
!           --  of Source.
! 
!           Super_Length (Source) = Source.Max_Length
!             and then
!               (if Before <= Super_Length (Source'Old) then
!                  String'(Super_Slice (Source,
!                    Source.Max_Length - Super_Length (Source'Old) + Before,
!                    Source.Max_Length)) =
!                      Super_Slice (Source'Old,
!                        Before, Super_Length (Source'Old)))
! 
!             --  Depending on when we reach Max_Length, either the first part
!             --  of Source is fully dropped and New_Item is partly dropped, or
!             --  New_Item is fully added and the first part of Source is partly
!             --  dropped.
! 
!             and then
!               (if Source.Max_Length - Super_Length (Source'Old) - 1 + Before
!                 < New_Item'Length
!                then
!                  --  The first characters of New_Item are dropped
! 
!                  (if Super_Length (Source'Old) - Before + 1 < Source.Max_Length
!                   then
!                     Super_Slice (Source,
!                       1, Source.Max_Length - Super_Length (Source'Old)
!                         - 1 + Before) =
!                           New_Item
!                             (New_Item'Last - Source.Max_Length
!                                + Super_Length (Source'Old) - Before + 2
!                              .. New_Item'Last))
! 
!                else  --  New_Item is added to the result
! 
!                  Super_Slice (Source,
!                    Source.Max_Length - Super_Length (Source'Old)
!                      - New_Item'Length + Before,
!                    Source.Max_Length - Super_Length (Source'Old) - 1 + Before)
!                      = New_Item
! 
!                    --  The first characters of Source (1 .. Before - 1) are
!                    --  dropped.
! 
!                    and then
!                      String'(Super_Slice (Source, 1,
!                        Source.Max_Length - Super_Length (Source'Old)
!                          - New_Item'Length - 1 + Before)) =
!                            Super_Slice (Source'Old,
!                              Super_Length (Source'Old)
!                                - Source.Max_Length + New_Item'Length + 1,
!                              Before - 1)),
! 
!         others  --  Drop = Right
!         =>
!           --  The result is of maximal length and starts by the first
!           --  characters of Source.
! 
!           Super_Length (Source) = Source.Max_Length
!             and then
!               String'(Super_Slice (Source, 1, Before - 1)) =
!                 Super_Slice (Source'Old, 1, Before - 1)
! 
!             --  Depending on when we reach Max_Length, either the last part
!             --  of Source is fully dropped and New_Item is partly dropped, or
!             --  New_Item is fully added and the last part of Source is partly
!             --  dropped.
! 
!             and then
!               (if Before - 1 >= Source.Max_Length - New_Item'Length then
! 
!                  --  The last characters of New_Item are dropped
! 
!                  Super_Slice (Source, Before, Source.Max_Length) =
!                    New_Item (New_Item'First
!                      .. Source.Max_Length - Before + New_Item'First)
! 
!                else  --  New_Item is fully added
! 
!                  Super_Slice (Source, Before, Before + New_Item'Length - 1) =
!                    New_Item
! 
!                    --  Then Source starting from Before is added but the
!                    --  last characters are dropped.
! 
!                    and then
!                      String'(Super_Slice (Source,
!                        Before + New_Item'Length, Source.Max_Length)) =
!                          Super_Slice (Source'Old,
!                            Before, Source.Max_Length - New_Item'Length))),
!      Global         => null;
  
     function Super_Overwrite
       (Source   : Super_String;
        Position : Positive;
        New_Item : String;
!       Drop     : Truncation := Error) return Super_String
!    with
!      Pre            =>
!        Position - 1 <= Super_Length (Source)
!          and then (if New_Item'Length > Source.Max_Length - (Position - 1)
!                    then Drop /= Error),
!      Post           => Super_Overwrite'Result.Max_Length = Source.Max_Length,
!      Contract_Cases =>
!        (Position - 1 <= Source.Max_Length - New_Item'Length
!         =>
!           --  The length is unchanged, unless New_Item overwrites further than
!           --  the end of Source. In this contract case, we suppose New_Item
!           --  doesn't overwrite further than Max_Length.
! 
!           Super_Length (Super_Overwrite'Result) =
!             Integer'Max (Super_Length (Source), Position - 1 + New_Item'Length)
!             and then
!               String'(Super_Slice (Super_Overwrite'Result, 1, Position - 1)) =
!                 Super_Slice (Source, 1, Position - 1)
!             and then Super_Slice (Super_Overwrite'Result,
!               Position, Position - 1 + New_Item'Length) =
!                 New_Item
!             and then
!               (if Position - 1 + New_Item'Length < Super_Length (Source) then
! 
!                  --  There are some unchanged characters of Source remaining
!                  --  after New_Item.
! 
!                  String'(Super_Slice (Super_Overwrite'Result,
!                    Position + New_Item'Length, Super_Length (Source))) =
!                      Super_Slice (Source,
!                        Position + New_Item'Length, Super_Length (Source))),
! 
!         Position - 1 > Source.Max_Length - New_Item'Length and then Drop = Left
!         =>
!           Super_Length (Super_Overwrite'Result) = Source.Max_Length
! 
!             --  If a part of the result has to be dropped, it means New_Item is
!             --  overwriting further than the end of Source. Thus the result is
!             --  necessarily ending by New_Item. However, we don't know whether
!             --  New_Item covers all Max_Length characters or some characters of
!             --  Source are remaining at the left.
! 
!             and then
!               (if New_Item'Length > Source.Max_Length then
! 
!                  --  New_Item covers all Max_Length characters
! 
!                  Super_To_String (Super_Overwrite'Result) =
!                    New_Item
!                      (New_Item'Last - Source.Max_Length + 1 .. New_Item'Last)
!                else
!                  --  New_Item fully appears at the end
! 
!                  Super_Slice (Super_Overwrite'Result,
!                    Source.Max_Length - New_Item'Length + 1,
!                    Source.Max_Length) =
!                      New_Item
! 
!                    --  The left of Source is cut
! 
!                    and then
!                      String'(Super_Slice (Super_Overwrite'Result,
!                        1, Source.Max_Length - New_Item'Length)) =
!                          Super_Slice (Source,
!                            Position - Source.Max_Length + New_Item'Length,
!                            Position - 1)),
! 
!         others  --  Drop = Right
!         =>
!           --  The result is of maximal length and starts by the first
!           --  characters of Source.
! 
!           Super_Length (Super_Overwrite'Result) = Source.Max_Length
!             and then
!               String'(Super_Slice (Super_Overwrite'Result, 1, Position - 1)) =
!                 Super_Slice (Source, 1, Position - 1)
! 
!             --  Then New_Item is written until Max_Length
! 
!             and then Super_Slice (Super_Overwrite'Result,
!               Position, Source.Max_Length) =
!                 New_Item (New_Item'First
!                           .. Source.Max_Length - Position + New_Item'First)),
!      Global         => null;
  
     procedure Super_Overwrite
       (Source    : in out Super_String;
        Position  : Positive;
        New_Item  : String;
!       Drop      : Truncation := Error)
!    with
!      Pre            =>
!        Position - 1 <= Super_Length (Source)
!          and then (if New_Item'Length > Source.Max_Length - (Position - 1)
!                    then Drop /= Error),
!      Contract_Cases =>
!        (Position - 1 <= Source.Max_Length - New_Item'Length
!         =>
!           --  The length is unchanged, unless New_Item overwrites further than
!           --  the end of Source. In this contract case, we suppose New_Item
!           --  doesn't overwrite further than Max_Length.
! 
!           Super_Length (Source) = Integer'Max
!             (Super_Length (Source'Old), Position - 1 + New_Item'Length)
!             and then
!               String'(Super_Slice (Source, 1, Position - 1)) =
!                 Super_Slice (Source'Old, 1, Position - 1)
!             and then Super_Slice (Source,
!               Position, Position - 1 + New_Item'Length) =
!                 New_Item
!             and then
!               (if Position - 1 + New_Item'Length < Super_Length (Source'Old)
!                then
!                  --  There are some unchanged characters of Source remaining
!                  --  after New_Item.
! 
!                  String'(Super_Slice (Source,
!                    Position + New_Item'Length, Super_Length (Source'Old))) =
!                      Super_Slice (Source'Old,
!                        Position + New_Item'Length, Super_Length (Source'Old))),
! 
!         Position - 1 > Source.Max_Length - New_Item'Length and then Drop = Left
!         =>
!           Super_Length (Source) = Source.Max_Length
! 
!             --  If a part of the result has to be dropped, it means New_Item is
!             --  overwriting further than the end of Source. Thus the result is
!             --  necessarily ending by New_Item. However, we don't know whether
!             --  New_Item covers all Max_Length characters or some characters of
!             --  Source are remaining at the left.
! 
!             and then
!               (if New_Item'Length > Source.Max_Length then
! 
!                  --  New_Item covers all Max_Length characters
! 
!                  Super_To_String (Source) =
!                    New_Item
!                      (New_Item'Last - Source.Max_Length + 1 .. New_Item'Last)
!                else
!                  --  New_Item fully appears at the end
! 
!                  Super_Slice (Source,
!                    Source.Max_Length - New_Item'Length + 1,
!                    Source.Max_Length) =
!                      New_Item
! 
!                    --  The left of Source is cut
! 
!                    and then
!                      String'(Super_Slice (Source,
!                        1, Source.Max_Length - New_Item'Length)) =
!                          Super_Slice (Source'Old,
!                            Position - Source.Max_Length + New_Item'Length,
!                            Position - 1)),
! 
!         others  --  Drop = Right
!         =>
!           --  The result is of maximal length and starts by the first
!           --  characters of Source.
! 
!           Super_Length (Source) = Source.Max_Length
!             and then
!               String'(Super_Slice (Source, 1, Position - 1)) =
!                 Super_Slice (Source'Old, 1, Position - 1)
! 
!             --  New_Item is written until Max_Length
! 
!             and then Super_Slice (Source, Position, Source.Max_Length) =
!               New_Item (New_Item'First
!                         .. Source.Max_Length - Position + New_Item'First)),
!      Global         => null;
  
     function Super_Delete
       (Source  : Super_String;
        From    : Positive;
!       Through : Natural) return Super_String
!    with
!      Pre            =>
!        (if Through >= From then From - 1 <= Super_Length (Source)),
!      Post           => Super_Delete'Result.Max_Length = Source.Max_Length,
!      Contract_Cases =>
!        (Through >= From =>
!           Super_Length (Super_Delete'Result) =
!             From - 1 + Natural'Max (Super_Length (Source) - Through, 0)
!             and then
!               String'(Super_Slice (Super_Delete'Result, 1, From - 1)) =
!                 Super_Slice (Source, 1, From - 1)
!             and then
!               (if Through < Super_Length (Source) then
!                  String'(Super_Slice (Super_Delete'Result,
!                    From, Super_Length (Super_Delete'Result))) =
!                      Super_Slice (Source, Through + 1, Super_Length (Source))),
!         others          =>
!           Super_Delete'Result = Source),
!      Global         => null;
  
     procedure Super_Delete
       (Source  : in out Super_String;
        From    : Positive;
!       Through : Natural)
!    with
!      Pre            =>
!        (if Through >= From then From - 1 <= Super_Length (Source)),
!      Contract_Cases =>
!        (Through >= From =>
!           Super_Length (Source) =
!             From - 1 + Natural'Max (Super_Length (Source'Old) - Through, 0)
!             and then
!               String'(Super_Slice (Source, 1, From - 1)) =
!                 Super_Slice (Source'Old, 1, From - 1)
!             and then
!               (if Through < Super_Length (Source) then
!                  String'(Super_Slice (Source, From, Super_Length (Source))) =
!                    Super_Slice (Source'Old,
!                      Through + 1, Super_Length (Source'Old))),
!         others          =>
!           Source = Source'Old),
!      Global         => null;
  
     ---------------------------------
     -- String Selector Subprograms --
*************** package Ada.Strings.Superbounded is
*** 388,432 ****
  
     function Super_Trim
       (Source : Super_String;
!       Side   : Trim_End) return Super_String;
  
     procedure Super_Trim
       (Source : in out Super_String;
!       Side   : Trim_End);
  
     function Super_Trim
       (Source : Super_String;
        Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set) return Super_String;
  
     procedure Super_Trim
       (Source : in out Super_String;
        Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set);
  
     function Super_Head
       (Source : Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Truncation := Error) return Super_String;
  
     procedure Super_Head
       (Source : in out Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Truncation := Error);
  
     function Super_Tail
       (Source : Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Truncation := Error) return Super_String;
  
     procedure Super_Tail
       (Source : in out Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Truncation := Error);
  
     ------------------------------------
     -- String Constructor Subprograms --
--- 2183,2558 ----
  
     function Super_Trim
       (Source : Super_String;
!       Side   : Trim_End) return Super_String
!    with
!      Post           => Super_Trim'Result.Max_Length = Source.Max_Length,
!      Contract_Cases =>
! 
!        --  If all characters in Source are Space, the returned string is empty
! 
!        ((for all C of Super_To_String (Source) => C = ' ')
!         =>
!           Super_Length (Super_Trim'Result) = 0,
! 
!         --  Otherwise, the returned string is a slice of Source
! 
!         others
!         =>
!           (declare
!              Low  : constant Positive :=
!                (if Side = Right then 1
!                 else Super_Index_Non_Blank (Source, Forward));
!              High : constant Positive :=
!                (if Side = Left then Super_Length (Source)
!                 else Super_Index_Non_Blank (Source, Backward));
!            begin
!              Super_To_String (Super_Trim'Result) =
!                Super_Slice (Source, Low, High))),
!      Global         => null;
  
     procedure Super_Trim
       (Source : in out Super_String;
!       Side   : Trim_End)
!    with
!      Contract_Cases =>
! 
!        --  If all characters in Source are Space, the returned string is empty
! 
!        ((for all C of Super_To_String (Source) => C = ' ')
!         =>
!           Super_Length (Source) = 0,
! 
!         --  Otherwise, the returned string is a slice of Source
! 
!         others
!         =>
!           (declare
!              Low  : constant Positive :=
!                (if Side = Right then 1
!                 else Super_Index_Non_Blank (Source'Old, Forward));
!              High : constant Positive :=
!                (if Side = Left then Super_Length (Source'Old)
!                 else Super_Index_Non_Blank (Source'Old, Backward));
!            begin
!              Super_To_String (Source) = Super_Slice (Source'Old, Low, High))),
!      Global => null;
  
     function Super_Trim
       (Source : Super_String;
        Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set) return Super_String
!    with
!      Post           => Super_Trim'Result.Max_Length = Source.Max_Length,
!      Contract_Cases =>
! 
!        --  If all characters in Source are contained in one of the sets Left or
!        --  Right, then the returned string is empty.
! 
!        ((for all C of Super_To_String (Source) => Maps.Is_In (C, Left))
!           or else
!             (for all C of Super_To_String (Source) => Maps.Is_In (C, Right))
!         =>
!           Super_Length (Super_Trim'Result) = 0,
! 
!         --  Otherwise, the returned string is a slice of Source
! 
!         others
!         =>
!           (declare
!              Low  : constant Positive :=
!                Super_Index (Source, Left, Outside, Forward);
!              High : constant Positive :=
!                Super_Index (Source, Right, Outside, Backward);
!            begin
!              Super_To_String (Super_Trim'Result) =
!                Super_Slice (Source, Low, High))),
!      Global         => null;
  
     procedure Super_Trim
       (Source : in out Super_String;
        Left   : Maps.Character_Set;
!       Right  : Maps.Character_Set)
!    with
!      Contract_Cases =>
! 
!        --  If all characters in Source are contained in one of the sets Left or
!        --  Right, then the returned string is empty.
! 
!        ((for all C of Super_To_String (Source) => Maps.Is_In (C, Left))
!           or else
!             (for all C of Super_To_String (Source) => Maps.Is_In (C, Right))
!         =>
!           Super_Length (Source) = 0,
! 
!         --  Otherwise, the returned string is a slice of Source
! 
!         others
!         =>
!           (declare
!              Low  : constant Positive :=
!                Super_Index (Source'Old, Left, Outside, Forward);
!              High : constant Positive :=
!                Super_Index (Source'Old, Right, Outside, Backward);
!            begin
!              Super_To_String (Source) = Super_Slice (Source'Old, Low, High))),
!      Global => null;
  
     function Super_Head
       (Source : Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Truncation := Error) return Super_String
!    with
!      Pre            => (if Count > Source.Max_Length then Drop /= Error),
!      Post           => Super_Head'Result.Max_Length = Source.Max_Length,
!      Contract_Cases =>
!        (Count <= Super_Length (Source)
!         =>
!           --  Source is cut
! 
!           Super_To_String (Super_Head'Result) = Super_Slice (Source, 1, Count),
!         Count > Super_Length (Source) and then Count <= Source.Max_Length
!         =>
!           --  Source is followed by Pad characters
! 
!           Super_Length (Super_Head'Result) = Count
!             and then
!               Super_Slice (Super_Head'Result, 1, Super_Length (Source)) =
!                 Super_To_String (Source)
!             and then
!               String'(Super_Slice (Super_Head'Result,
!                 Super_Length (Source) + 1, Count)) =
!                   [1 .. Count - Super_Length (Source) => Pad],
!         Count > Source.Max_Length and then Drop = Right
!         =>
!           --  Source is followed by Pad characters
! 
!           Super_Length (Super_Head'Result) = Source.Max_Length
!             and then
!               Super_Slice (Super_Head'Result, 1, Super_Length (Source)) =
!                 Super_To_String (Source)
!             and then
!               String'(Super_Slice (Super_Head'Result,
!                 Super_Length (Source) + 1, Source.Max_Length)) =
!                   [1 .. Source.Max_Length - Super_Length (Source) => Pad],
!         Count - Super_Length (Source) > Source.Max_Length and then Drop = Left
!         =>
!           --  Source is fully dropped on the left
! 
!           Super_To_String (Super_Head'Result) =
!             [1 .. Source.Max_Length => Pad],
!         others
!         =>
!           --  Source is partly dropped on the left
! 
!           Super_Length (Super_Head'Result) = Source.Max_Length
!             and then
!               String'(Super_Slice (Super_Head'Result,
!                 1, Source.Max_Length - Count + Super_Length (Source))) =
!                   Super_Slice (Source,
!                     Count - Source.Max_Length + 1, Super_Length (Source))
!             and then
!               String'(Super_Slice (Super_Head'Result,
!                 Source.Max_Length - Count + Super_Length (Source) + 1,
!                 Source.Max_Length)) =
!                   [1 .. Count - Super_Length (Source) => Pad]),
!      Global         => null;
  
     procedure Super_Head
       (Source : in out Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Truncation := Error)
!    with
!      Pre            => (if Count > Source.Max_Length then Drop /= Error),
!      Contract_Cases =>
!        (Count <= Super_Length (Source)
!         =>
!           --  Source is cut
! 
!           Super_To_String (Source) = Super_Slice (Source'Old, 1, Count),
!         Count > Super_Length (Source) and then Count <= Source.Max_Length
!         =>
!           --  Source is followed by Pad characters
! 
!           Super_Length (Source) = Count
!             and then
!               Super_Slice (Source, 1, Super_Length (Source'Old)) =
!                 Super_To_String (Source'Old)
!             and then
!               String'(Super_Slice (Source,
!                 Super_Length (Source'Old) + 1, Count)) =
!                   [1 .. Count - Super_Length (Source'Old) => Pad],
!         Count > Source.Max_Length and then Drop = Right
!         =>
!           --  Source is followed by Pad characters
! 
!           Super_Length (Source) = Source.Max_Length
!             and then
!               Super_Slice (Source, 1, Super_Length (Source'Old)) =
!                 Super_To_String (Source'Old)
!             and then
!               String'(Super_Slice (Source,
!                 Super_Length (Source'Old) + 1, Source.Max_Length)) =
!                   [1 .. Source.Max_Length - Super_Length (Source'Old) => Pad],
!         Count - Super_Length (Source) > Source.Max_Length and then Drop = Left
!         =>
!           --  Source is fully dropped on the left
! 
!           Super_To_String (Source) = [1 .. Source.Max_Length => Pad],
!         others
!         =>
!           --  Source is partly dropped on the left
! 
!           Super_Length (Source) = Source.Max_Length
!             and then
!               String'(Super_Slice (Source,
!                 1, Source.Max_Length - Count + Super_Length (Source'Old))) =
!                   Super_Slice (Source'Old,
!                     Count - Source.Max_Length + 1, Super_Length (Source'Old))
!             and then
!               String'(Super_Slice (Source,
!                 Source.Max_Length - Count + Super_Length (Source'Old) + 1,
!                 Source.Max_Length)) =
!                   [1 .. Count - Super_Length (Source'Old) => Pad]),
!      Global         => null;
  
     function Super_Tail
       (Source : Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Truncation := Error) return Super_String
!    with
!      Pre            => (if Count > Source.Max_Length then Drop /= Error),
!      Post           => Super_Tail'Result.Max_Length = Source.Max_Length,
!      Contract_Cases =>
!        (Count < Super_Length (Source)
!         =>
!           --  Source is cut
! 
!           (if Count > 0 then
!              Super_To_String (Super_Tail'Result) =
!                Super_Slice (Source,
!                  Super_Length (Source) - Count + 1, Super_Length (Source))
!            else Super_Length (Super_Tail'Result) = 0),
!         Count >= Super_Length (Source) and then Count < Source.Max_Length
!         =>
!           --  Source is preceded by Pad characters
! 
!           Super_Length (Super_Tail'Result) = Count
!             and then
!               String'(Super_Slice (Super_Tail'Result,
!                 1, Count - Super_Length (Source))) =
!                   [1 .. Count - Super_Length (Source) => Pad]
!             and then
!               Super_Slice (Super_Tail'Result,
!                 Count - Super_Length (Source) + 1, Count) =
!                   Super_To_String (Source),
!         Count >= Source.Max_Length and then Drop = Left
!         =>
!           --  Source is preceded by Pad characters
! 
!           Super_Length (Super_Tail'Result) = Source.Max_Length
!             and then
!               String'(Super_Slice (Super_Tail'Result,
!                 1, Source.Max_Length - Super_Length (Source))) =
!                   [1 .. Source.Max_Length - Super_Length (Source) => Pad]
!             and then
!               (if Super_Length (Source) > 0 then
!                  Super_Slice (Super_Tail'Result,
!                    Source.Max_Length - Super_Length (Source) + 1,
!                    Source.Max_Length) =
!                      Super_To_String (Source)),
!         Count - Super_Length (Source) >= Source.Max_Length
!           and then Drop /= Left
!         =>
!           --  Source is fully dropped on the right
! 
!           Super_To_String (Super_Tail'Result) =
!             [1 .. Source.Max_Length => Pad],
!         others
!         =>
!           --  Source is partly dropped on the right
! 
!           Super_Length (Super_Tail'Result) = Source.Max_Length
!             and then
!               String'(Super_Slice (Super_Tail'Result,
!                 1, Count - Super_Length (Source))) =
!                   [1 .. Count - Super_Length (Source) => Pad]
!             and then
!               String'(Super_Slice (Super_Tail'Result,
!                 Count - Super_Length (Source) + 1, Source.Max_Length)) =
!                   Super_Slice (Source,
!                     1, Source.Max_Length - Count + Super_Length (Source))),
!      Global         => null;
  
     procedure Super_Tail
       (Source : in out Super_String;
        Count  : Natural;
        Pad    : Character := Space;
!       Drop   : Truncation := Error)
!    with
!      Pre            => (if Count > Source.Max_Length then Drop /= Error),
!      Contract_Cases =>
!        (Count < Super_Length (Source)
!         =>
!           --  Source is cut
! 
!           (if Count > 0 then
!              Super_To_String (Source) =
!                Super_Slice (Source'Old,
!                  Super_Length (Source'Old) - Count + 1,
!                  Super_Length (Source'Old))
!            else Super_Length (Source) = 0),
!         Count >= Super_Length (Source) and then Count < Source.Max_Length
!         =>
!           --  Source is preceded by Pad characters
! 
!           Super_Length (Source) = Count
!             and then
!               String'(Super_Slice (Source,
!                 1, Count - Super_Length (Source'Old))) =
!                   [1 .. Count - Super_Length (Source'Old) => Pad]
!             and then
!               Super_Slice (Source,
!                 Count - Super_Length (Source'Old) + 1, Count) =
!                   Super_To_String (Source'Old),
!         Count >= Source.Max_Length and then Drop = Left
!         =>
!           --  Source is preceded by Pad characters
! 
!           Super_Length (Source) = Source.Max_Length
!             and then
!               String'(Super_Slice (Source,
!                 1, Source.Max_Length - Super_Length (Source'Old))) =
!                   [1 .. Source.Max_Length - Super_Length (Source'Old) => Pad]
!             and then
!               (if Super_Length (Source'Old) > 0 then
!                  Super_Slice (Source,
!                    Source.Max_Length - Super_Length (Source'Old) + 1,
!                    Source.Max_Length) =
!                      Super_To_String (Source'Old)),
!         Count - Super_Length (Source) >= Source.Max_Length
!           and then Drop /= Left
!         =>
!           --  Source is fully dropped on the right
! 
!           Super_To_String (Source) = [1 .. Source.Max_Length => Pad],
!         others
!         =>
!           --  Source is partly dropped on the right
! 
!           Super_Length (Source) = Source.Max_Length
!             and then
!               String'(Super_Slice (Source,
!                 1, Count - Super_Length (Source'Old))) =
!                   [1 .. Count - Super_Length (Source'Old) => Pad]
!             and then
!               String'(Super_Slice (Source,
!                 Count - Super_Length (Source'Old) + 1, Source.Max_Length)) =
!                   Super_Slice (Source'Old,
!                     1, Source.Max_Length - Count + Super_Length (Source'Old))),
!      Global         => null;
  
     ------------------------------------
     -- String Constructor Subprograms --
*************** package Ada.Strings.Superbounded is
*** 439,475 ****
     function Times
       (Left       : Natural;
        Right      : Character;
!       Max_Length : Positive) return Super_String;
     --  Note the additional parameter Max_Length
  
     function Times
       (Left       : Natural;
        Right      : String;
!       Max_Length : Positive) return Super_String;
     --  Note the additional parameter Max_Length
  
     function Times
       (Left  : Natural;
!       Right : Super_String) return Super_String;
  
     function Super_Replicate
       (Count      : Natural;
        Item       : Character;
        Drop       : Truncation := Error;
!       Max_Length : Positive) return Super_String;
     --  Note the additional parameter Max_Length
  
     function Super_Replicate
       (Count      : Natural;
        Item       : String;
        Drop       : Truncation := Error;
!       Max_Length : Positive) return Super_String;
     --  Note the additional parameter Max_Length
  
     function Super_Replicate
       (Count : Natural;
        Item  : Super_String;
!       Drop  : Truncation := Error) return Super_String;
  
  private
        --  Pragma Inline declarations
--- 2565,2699 ----
     function Times
       (Left       : Natural;
        Right      : Character;
!       Max_Length : Positive) return Super_String
!    with
!      Pre    => Left <= Max_Length,
!      Post   => Times'Result.Max_Length = Max_Length
!        and then Super_To_String (Times'Result) = [1 .. Left => Right],
!      Global => null;
     --  Note the additional parameter Max_Length
  
     function Times
       (Left       : Natural;
        Right      : String;
!       Max_Length : Positive) return Super_String
!    with
!      Pre    => (if Left /= 0 then Right'Length <= Max_Length / Left),
!      Post   => Times'Result.Max_Length = Max_Length
!        and then Super_Length (Times'Result) = Left * Right'Length
!        and then
!          (if Right'Length > 0 then
!             (for all K in 1 .. Left * Right'Length =>
!                Super_Element (Times'Result, K) =
!                  Right (Right'First + (K - 1) mod Right'Length))),
!      Global => null;
     --  Note the additional parameter Max_Length
  
     function Times
       (Left  : Natural;
!       Right : Super_String) return Super_String
!    with
!      Pre    =>
!        (if Left /= 0 then Super_Length (Right) <= Right.Max_Length / Left),
!      Post   => Times'Result.Max_Length = Right.Max_Length
!        and then Super_Length (Times'Result) = Left * Super_Length (Right)
!        and then
!          (if Super_Length (Right) > 0 then
!             (for all K in 1 .. Left * Super_Length (Right) =>
!                Super_Element (Times'Result, K) =
!                  Super_Element (Right, 1 + (K - 1) mod Super_Length (Right)))),
!      Global => null;
  
     function Super_Replicate
       (Count      : Natural;
        Item       : Character;
        Drop       : Truncation := Error;
!       Max_Length : Positive) return Super_String
!    with
!      Pre    => (if Count > Max_Length then Drop /= Error),
!      Post   => Super_Replicate'Result.Max_Length = Max_Length
!        and then Super_To_String (Super_Replicate'Result) =
!          [1 .. Natural'Min (Max_Length, Count) => Item],
!      Global => null;
     --  Note the additional parameter Max_Length
  
     function Super_Replicate
       (Count      : Natural;
        Item       : String;
        Drop       : Truncation := Error;
!       Max_Length : Positive) return Super_String
!    with
!      Pre            =>
!        (if Count /= 0 and then Item'Length > Max_Length / Count
!         then Drop /= Error),
!      Post           => Super_Replicate'Result.Max_Length = Max_Length,
!      Contract_Cases =>
!        (Count = 0 or else Item'Length <= Max_Length / Count
!         =>
!           Super_Length (Super_Replicate'Result) = Count * Item'Length
!             and then
!               (if Item'Length > 0 then
!                  (for all K in 1 .. Count * Item'Length =>
!                     Super_Element (Super_Replicate'Result, K) =
!                       Item (Item'First + (K - 1) mod Item'Length))),
!         Count /= 0
!           and then Item'Length > Max_Length / Count
!           and then Drop = Right
!         =>
!           Super_Length (Super_Replicate'Result) = Max_Length
!             and then
!               (for all K in 1 .. Max_Length =>
!                  Super_Element (Super_Replicate'Result, K) =
!                    Item (Item'First + (K - 1) mod Item'Length)),
!         others  --  Drop = Left
!         =>
!           Super_Length (Super_Replicate'Result) = Max_Length
!             and then
!               (for all K in 1 .. Max_Length =>
!                  Super_Element (Super_Replicate'Result, K) =
!                    Item (Item'Last - (Max_Length - K) mod Item'Length))),
!      Global         => null;
     --  Note the additional parameter Max_Length
  
     function Super_Replicate
       (Count : Natural;
        Item  : Super_String;
!       Drop  : Truncation := Error) return Super_String
!    with
!      Pre            =>
!        (if Count /= 0
!           and then Super_Length (Item) > Item.Max_Length / Count
!         then Drop /= Error),
!      Post           => Super_Replicate'Result.Max_Length = Item.Max_Length,
!      Contract_Cases =>
!        ((if Count /= 0 then Super_Length (Item) <= Item.Max_Length / Count)
!         =>
!           Super_Length (Super_Replicate'Result) = Count * Super_Length (Item)
!             and then
!               (if Super_Length (Item) > 0 then
!                  (for all K in 1 .. Count * Super_Length (Item) =>
!                     Super_Element (Super_Replicate'Result, K) =
!                       Super_Element (Item,
!                         1 + (K - 1) mod Super_Length (Item)))),
!         Count /= 0
!           and then Super_Length (Item) > Item.Max_Length / Count
!           and then Drop = Right
!         =>
!           Super_Length (Super_Replicate'Result) = Item.Max_Length
!             and then
!               (for all K in 1 .. Item.Max_Length =>
!                  Super_Element (Super_Replicate'Result, K) =
!                    Super_Element (Item, 1 + (K - 1) mod Super_Length (Item))),
!         others  --  Drop = Left
!         =>
!           Super_Length (Super_Replicate'Result) = Item.Max_Length
!             and then
!               (for all K in 1 .. Item.Max_Length =>
!                  Super_Element (Super_Replicate'Result, K) =
!                    Super_Element (Item,
!                      Super_Length (Item)
!                        - (Item.Max_Length - K) mod Super_Length (Item)))),
!      Global         => null;
  
  private
        --  Pragma Inline declarations
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strunb.adb gcc-12.1.0/gcc/ada/libgnat/a-strunb.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-strunb.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strunb.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Strings.Unbounded is
*** 505,512 ****
        --  Note: Don't try to free statically allocated null string
  
        if Object.Reference /= Null_String'Access then
!          Deallocate (Object.Reference);
!          Object.Reference := Null_Unbounded_String.Reference;
           Object.Last := 0;
        end if;
     end Finalize;
--- 505,518 ----
        --  Note: Don't try to free statically allocated null string
  
        if Object.Reference /= Null_String'Access then
!          declare
!             Old : String_Access := Object.Reference;
!             --  The original reference cannot be null, so we must create a
!             --  copy which will become null when deallocated.
!          begin
!             Deallocate (Old);
!             Object.Reference := Null_Unbounded_String.Reference;
!          end;
           Object.Last := 0;
        end if;
     end Finalize;
*************** package body Ada.Strings.Unbounded is
*** 783,789 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Unbounded_String) is
     begin
        String'Put_Image (S, To_String (V));
     end Put_Image;
--- 789,796 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class;
!       V : Unbounded_String) is
     begin
        String'Put_Image (S, To_String (V));
     end Put_Image;
*************** package body Ada.Strings.Unbounded is
*** 826,834 ****
              Tmp : constant String_Access :=
                new String (1 .. New_Rounded_Up_Size);
  
           begin
              Tmp (1 .. Source.Last) := Source.Reference (1 .. Source.Last);
!             Free (Source.Reference);
              Source.Reference := Tmp;
           end;
        end if;
--- 833,845 ----
              Tmp : constant String_Access :=
                new String (1 .. New_Rounded_Up_Size);
  
+             Old : String_Access := Source.Reference;
+             --  The original reference cannot be null, so we must create a copy
+             --  which will become null when deallocated.
+ 
           begin
              Tmp (1 .. Source.Last) := Source.Reference (1 .. Source.Last);
!             Free (Old);
              Source.Reference := Tmp;
           end;
        end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strunb.ads gcc-12.1.0/gcc/ada/libgnat/a-strunb.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-strunb.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strunb.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Assertion_Policy (Pre => Ignore);
*** 41,47 ****
  
  with Ada.Strings.Maps;
  with Ada.Finalization;
! private with Ada.Strings.Text_Output;
  
  --  The language-defined package Strings.Unbounded provides a private type
  --  Unbounded_String and a set of operations. An object of type
--- 41,47 ----
  
  with Ada.Strings.Maps;
  with Ada.Finalization;
! private with Ada.Strings.Text_Buffers;
  
  --  The language-defined package Strings.Unbounded provides a private type
  --  Unbounded_String and a set of operations. An object of type
*************** private with Ada.Strings.Text_Output;
*** 53,63 ****
  --  and selector operations are provided.
  
  package Ada.Strings.Unbounded with
    Initial_Condition => Length (Null_Unbounded_String) = 0
  is
     pragma Preelaborate;
  
!    type Unbounded_String is private;
     pragma Preelaborable_Initialization (Unbounded_String);
  
     Null_Unbounded_String : constant Unbounded_String;
--- 53,65 ----
  --  and selector operations are provided.
  
  package Ada.Strings.Unbounded with
+   SPARK_Mode,
    Initial_Condition => Length (Null_Unbounded_String) = 0
  is
     pragma Preelaborate;
  
!    type Unbounded_String is private with
!      Default_Initial_Condition => Length (Unbounded_String) = 0;
     pragma Preelaborable_Initialization (Unbounded_String);
  
     Null_Unbounded_String : constant Unbounded_String;
*************** is
*** 73,79 ****
     --  Provides a (nonprivate) access type for explicit processing of
     --  unbounded-length strings.
  
!    procedure Free (X : in out String_Access);
     --  Performs an unchecked deallocation of an object of type String_Access
  
     --------------------------------------------------------
--- 75,81 ----
     --  Provides a (nonprivate) access type for explicit processing of
     --  unbounded-length strings.
  
!    procedure Free (X : in out String_Access) with SPARK_Mode => Off;
     --  Performs an unchecked deallocation of an object of type String_Access
  
     --------------------------------------------------------
*************** is
*** 81,87 ****
     --------------------------------------------------------
  
     function To_Unbounded_String
!      (Source : String) return Unbounded_String
     with
       Post   => Length (To_Unbounded_String'Result) = Source'Length,
       Global => null;
--- 83,89 ----
     --------------------------------------------------------
  
     function To_Unbounded_String
!      (Source : String)  return Unbounded_String
     with
       Post   => Length (To_Unbounded_String'Result) = Source'Length,
       Global => null;
*************** is
*** 91,98 ****
       (Length : Natural) return Unbounded_String
     with
       Post   =>
!        Ada.Strings.Unbounded.Length (To_Unbounded_String'Result)
!      = Length,
       Global => null;
     --  Returns an Unbounded_String that represents an uninitialized String
     --  whose length is Length.
--- 93,99 ----
       (Length : Natural) return Unbounded_String
     with
       Post   =>
!        Ada.Strings.Unbounded.Length (To_Unbounded_String'Result) = Length,
       Global => null;
     --  Returns an Unbounded_String that represents an uninitialized String
     --  whose length is Length.
*************** is
*** 524,534 ****
     with
       Pre            =>
         Low - 1 <= Length (Source)
!        and then (if High >= Low
!                  then Low - 1
!                    <= Natural'Last - By'Length
!                     - Natural'Max (Length (Source) - High, 0)
!                  else Length (Source) <= Natural'Last - By'Length),
       Contract_Cases =>
         (High >= Low =>
            Length (Replace_Slice'Result)
--- 525,535 ----
     with
       Pre            =>
         Low - 1 <= Length (Source)
!          and then (if High >= Low
!                    then Low - 1
!                      <= Natural'Last - By'Length
!                       - Natural'Max (Length (Source) - High, 0)
!                    else Length (Source) <= Natural'Last - By'Length),
       Contract_Cases =>
         (High >= Low =>
            Length (Replace_Slice'Result)
*************** is
*** 545,555 ****
     with
       Pre            =>
         Low - 1 <= Length (Source)
!        and then (if High >= Low
!                  then Low - 1
!                    <= Natural'Last - By'Length
!                     - Natural'Max (Length (Source) - High, 0)
!                  else Length (Source) <= Natural'Last - By'Length),
       Contract_Cases =>
         (High >= Low =>
            Length (Source)
--- 546,556 ----
     with
       Pre            =>
         Low - 1 <= Length (Source)
!          and then (if High >= Low
!                    then Low - 1
!                      <= Natural'Last - By'Length
!                       - Natural'Max (Length (Source) - High, 0)
!                    else Length (Source) <= Natural'Last - By'Length),
       Contract_Cases =>
         (High >= Low =>
            Length (Source)
*************** is
*** 586,592 ****
       Pre    => Position - 1 <= Length (Source)
                   and then (if New_Item'Length /= 0
                             then
!                            New_Item'Length <= Natural'Last - (Position - 1)),
       Post   =>
         Length (Overwrite'Result)
       = Natural'Max (Length (Source), Position - 1 + New_Item'Length),
--- 587,593 ----
       Pre    => Position - 1 <= Length (Source)
                   and then (if New_Item'Length /= 0
                             then
!                              New_Item'Length <= Natural'Last - (Position - 1)),
       Post   =>
         Length (Overwrite'Result)
       = Natural'Max (Length (Source), Position - 1 + New_Item'Length),
*************** is
*** 600,606 ****
       Pre    => Position - 1 <= Length (Source)
                   and then (if New_Item'Length /= 0
                             then
!                            New_Item'Length <= Natural'Last - (Position - 1)),
       Post   =>
         Length (Source)
       = Natural'Max (Length (Source)'Old, Position - 1 + New_Item'Length),
--- 601,607 ----
       Pre    => Position - 1 <= Length (Source)
                   and then (if New_Item'Length /= 0
                             then
!                              New_Item'Length <= Natural'Last - (Position - 1)),
       Post   =>
         Length (Source)
       = Natural'Max (Length (Source)'Old, Position - 1 + New_Item'Length),
*************** is
*** 733,738 ****
--- 734,741 ----
     --  strings applied to the string represented by Source's original value.
  
  private
+    pragma SPARK_Mode (Off);  --  Controlled types are not in SPARK
+ 
     pragma Inline (Length);
  
     package AF renames Ada.Finalization;
*************** private
*** 743,754 ****
       renames To_Unbounded_String;
  
     type Unbounded_String is new AF.Controlled with record
!       Reference : String_Access := Null_String'Access;
!       Last      : Natural       := 0;
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Unbounded_String);
  
     --  The Unbounded_String is using a buffered implementation to increase
     --  speed of the Append/Delete/Insert procedures. The Reference string
--- 746,758 ----
       renames To_Unbounded_String;
  
     type Unbounded_String is new AF.Controlled with record
!       Reference : not null String_Access := Null_String'Access;
!       Last      : Natural                := 0;
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class;
!       V : Unbounded_String);
  
     --  The Unbounded_String is using a buffered implementation to increase
     --  speed of the Append/Delete/Insert procedures. The Reference string
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strunb__shared.adb gcc-12.1.0/gcc/ada/libgnat/a-strunb__shared.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-strunb__shared.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strunb__shared.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Strings.Unbounded is
*** 50,60 ****
     --  align the returned memory on the maximum alignment as malloc does not
     --  know the target alignment.
  
!    function Aligned_Max_Length (Max_Length : Natural) return Natural;
     --  Returns recommended length of the shared string which is greater or
!    --  equal to specified length. Calculation take in sense alignment of the
!    --  allocated memory segments to use memory effectively by Append/Insert/etc
!    --  operations.
  
     function Sum (Left : Natural; Right : Integer) return Natural with Inline;
     --  Returns summary of Left and Right, raise Constraint_Error on overflow
--- 50,62 ----
     --  align the returned memory on the maximum alignment as malloc does not
     --  know the target alignment.
  
!    function Aligned_Max_Length
!      (Required_Length : Natural;
!       Reserved_Length : Natural) return Natural;
     --  Returns recommended length of the shared string which is greater or
!    --  equal to specified required length and desired reserved length.
!    --  Calculation takes into account alignment of the allocated memory
!    --  segments to use memory effectively by Append/Insert/etc operations.
  
     function Sum (Left : Natural; Right : Integer) return Natural with Inline;
     --  Returns summary of Left and Right, raise Constraint_Error on overflow
*************** package body Ada.Strings.Unbounded is
*** 63,73 ****
     --  Returns multiplication of Left and Right, raise Constraint_Error on
     --  overflow
  
-    function Allocate
-      (Length, Growth : Natural) return not null Shared_String_Access;
-    --  Allocates new Shared_String with at least specified Length plus optional
-    --  Growth.
- 
     ---------
     -- "&" --
     ---------
--- 65,70 ----
*************** package body Ada.Strings.Unbounded is
*** 490,506 ****
     -- Aligned_Max_Length --
     ------------------------
  
!    function Aligned_Max_Length (Max_Length : Natural) return Natural is
        Static_Size : constant Natural :=
                        Empty_Shared_String'Size / Standard'Storage_Unit;
        --  Total size of all Shared_String static components
     begin
!       if Max_Length > Natural'Last - Static_Size then
           return Natural'Last;
        else
           return
!            ((Static_Size + Max_Length - 1) / Min_Mul_Alloc + 2) * Min_Mul_Alloc
!              - Static_Size;
        end if;
     end Aligned_Max_Length;
  
--- 487,510 ----
     -- Aligned_Max_Length --
     ------------------------
  
!    function Aligned_Max_Length
!      (Required_Length : Natural;
!       Reserved_Length : Natural) return Natural
!    is
        Static_Size : constant Natural :=
                        Empty_Shared_String'Size / Standard'Storage_Unit;
        --  Total size of all Shared_String static components
     begin
!       if Required_Length > Natural'Last - Static_Size - Reserved_Length then
!          --  Total requested length is larger than maximum possible length.
!          --  Use of Static_Size needed to avoid overflows in expression to
!          --  compute aligned length.
           return Natural'Last;
+ 
        else
           return
!            ((Static_Size + Required_Length + Reserved_Length - 1)
!               / Min_Mul_Alloc + 2) * Min_Mul_Alloc - Static_Size;
        end if;
     end Aligned_Max_Length;
  
*************** package body Ada.Strings.Unbounded is
*** 509,543 ****
     --------------
  
     function Allocate
!      (Max_Length : Natural) return not null Shared_String_Access
     is
     begin
        --  Empty string requested, return shared empty string
  
!       if Max_Length = 0 then
           return Empty_Shared_String'Access;
  
        --  Otherwise, allocate requested space (and probably some more room)
  
        else
!          return new Shared_String (Aligned_Max_Length (Max_Length));
!       end if;
!    end Allocate;
! 
!    --------------
!    -- Allocate --
!    --------------
! 
!    function Allocate
!      (Length, Growth : Natural) return not null Shared_String_Access is
!    begin
!       if Natural'Last - Growth < Length then
!          --  Then Length + Growth would be more than Natural'Last
! 
!          return new Shared_String (Integer'Last);
! 
!       else
!          return Allocate (Length + Growth);
        end if;
     end Allocate;
  
--- 513,533 ----
     --------------
  
     function Allocate
!      (Required_Length : Natural;
!       Reserved_Length : Natural := 0) return not null Shared_String_Access
     is
     begin
        --  Empty string requested, return shared empty string
  
!       if Required_Length = 0 then
           return Empty_Shared_String'Access;
  
        --  Otherwise, allocate requested space (and probably some more room)
  
        else
!          return
!            new Shared_String
!                  (Aligned_Max_Length (Required_Length, Reserved_Length));
        end if;
     end Allocate;
  
*************** package body Ada.Strings.Unbounded is
*** 657,663 ****
          System.Atomic_Counters.Is_One (Item.Counter)
            and then Item.Max_Length >= Length
            and then Item.Max_Length <=
!                      Aligned_Max_Length (Length + Length / Growth_Factor);
     end Can_Be_Reused;
  
     -----------
--- 647,653 ----
          System.Atomic_Counters.Is_One (Item.Counter)
            and then Item.Max_Length >= Length
            and then Item.Max_Length <=
!                      Aligned_Max_Length (Length, Length / Growth_Factor);
     end Can_Be_Reused;
  
     -----------
*************** package body Ada.Strings.Unbounded is
*** 1301,1307 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Unbounded_String) is
     begin
        String'Put_Image (S, To_String (V));
     end Put_Image;
--- 1291,1298 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class;
!       V : Unbounded_String) is
     begin
        String'Put_Image (S, To_String (V));
     end Put_Image;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-strunb__shared.ads gcc-12.1.0/gcc/ada/libgnat/a-strunb__shared.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-strunb__shared.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-strunb__shared.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** pragma Assertion_Policy (Pre => Ignore);
*** 45,50 ****
--- 45,52 ----
  
  --  This version is supported on:
  --    - all Alpha platforms
+ --    - all AARCH64 platforms
+ --    - all ARM platforms
  --    - all ia64 platforms
  --    - all PowerPC platforms
  --    - all SPARC V9 platforms
*************** pragma Assertion_Policy (Pre => Ignore);
*** 78,91 ****
  with Ada.Strings.Maps;
  private with Ada.Finalization;
  private with System.Atomic_Counters;
! private with Ada.Strings.Text_Output;
  
  package Ada.Strings.Unbounded with
    Initial_Condition => Length (Null_Unbounded_String) = 0
  is
     pragma Preelaborate;
  
!    type Unbounded_String is private;
     pragma Preelaborable_Initialization (Unbounded_String);
  
     Null_Unbounded_String : constant Unbounded_String;
--- 80,94 ----
  with Ada.Strings.Maps;
  private with Ada.Finalization;
  private with System.Atomic_Counters;
! private with Ada.Strings.Text_Buffers;
  
  package Ada.Strings.Unbounded with
    Initial_Condition => Length (Null_Unbounded_String) = 0
  is
     pragma Preelaborate;
  
!    type Unbounded_String is private with
!      Default_Initial_Condition => Length (Unbounded_String) = 0;
     pragma Preelaborable_Initialization (Unbounded_String);
  
     Null_Unbounded_String : constant Unbounded_String;
*************** is
*** 363,371 ****
        Going   : Direction := Forward;
        Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     with
!      Pre    => (if Length (Source) /= 0
!                 then From <= Length (Source))
!                        and then Pattern'Length /= 0,
       Global => null;
     pragma Ada_05 (Index);
  
--- 366,373 ----
        Going   : Direction := Forward;
        Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
     with
!      Pre    => (if Length (Source) /= 0 then From <= Length (Source))
!                and then Pattern'Length /= 0,
       Global => null;
     pragma Ada_05 (Index);
  
*************** is
*** 376,386 ****
        Going   : Direction := Forward;
        Mapping : Maps.Character_Mapping_Function) return Natural
     with
!      Pre    => (if Length (Source) /= 0
!                 then From <= Length (Source))
!                        and then Pattern'Length /= 0,
       Global => null;
- 
     pragma Ada_05 (Index);
  
     function Index
--- 378,386 ----
        Going   : Direction := Forward;
        Mapping : Maps.Character_Mapping_Function) return Natural
     with
!      Pre    => (if Length (Source) /= 0 then From <= Length (Source))
!                and then Pattern'Length /= 0,
       Global => null;
     pragma Ada_05 (Index);
  
     function Index
*************** private
*** 725,734 ****
     --  store string with specified length effectively.
  
     function Allocate
!      (Max_Length : Natural) return not null Shared_String_Access;
!    --  Allocates new Shared_String with at least specified maximum length.
!    --  Actual maximum length of the allocated Shared_String can be slightly
!    --  greater. Returns reference to Empty_Shared_String when requested length
     --  is zero.
  
     Empty_Shared_String : aliased Shared_String (0);
--- 725,736 ----
     --  store string with specified length effectively.
  
     function Allocate
!      (Required_Length : Natural;
!       Reserved_Length : Natural := 0) return not null Shared_String_Access;
!    --  Allocates new Shared_String. Actual maximum length of allocated object
!    --  is at least the specified required length. Additional storage is
!    --  allocated to allow to store up to the specified reserved length when
!    --  possible. Returns reference to Empty_Shared_String when requested length
     --  is zero.
  
     Empty_Shared_String : aliased Shared_String (0);
*************** private
*** 742,748 ****
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : Unbounded_String);
  
     pragma Stream_Convert (Unbounded_String, To_Unbounded, To_String);
     --  Provide stream routines without dragging in Ada.Streams
--- 744,751 ----
     end record with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class;
!       V : Unbounded_String);
  
     pragma Stream_Convert (Unbounded_String, To_Unbounded, To_String);
     --  Provide stream routines without dragging in Ada.Streams
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ststbo.adb gcc-12.1.0/gcc/ada/libgnat/a-ststbo.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ststbo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ststbo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ststbo.ads gcc-12.1.0/gcc/ada/libgnat/a-ststbo.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ststbo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ststbo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020, Free Software Foundation, Inc.           --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020-2022, Free Software Foundation, Inc.      --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ststio.adb gcc-12.1.0/gcc/ada/libgnat/a-ststio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ststio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ststio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ststio.ads gcc-12.1.0/gcc/ada/libgnat/a-ststio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ststio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ststio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ststun.adb gcc-12.1.0/gcc/ada/libgnat/a-ststun.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ststun.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ststun.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ststun.ads gcc-12.1.0/gcc/ada/libgnat/a-ststun.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ststun.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ststun.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020, Free Software Foundation, Inc.           --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020-2022, Free Software Foundation, Inc.      --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sttebu.adb gcc-12.1.0/gcc/ada/libgnat/a-sttebu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-sttebu.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-sttebu.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,121 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                         ADA.STRINGS.TEXT_BUFFERS                         --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2020-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.UTF_Encoding.Wide_Strings;
+ with Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
+ 
+ package body Ada.Strings.Text_Buffers is
+    function Current_Indent
+      (Buffer : Root_Buffer_Type) return Text_Buffer_Count is
+      (Text_Buffer_Count (Buffer.Indentation));
+ 
+    procedure Increase_Indent
+      (Buffer : in out Root_Buffer_Type;
+       Amount :        Text_Buffer_Count := Standard_Indent)
+    is
+    begin
+       Buffer.Indentation := @ + Natural (Amount);
+    end Increase_Indent;
+ 
+    procedure Decrease_Indent
+      (Buffer : in out Root_Buffer_Type;
+       Amount :        Text_Buffer_Count := Standard_Indent)
+    is
+    begin
+       Buffer.Indentation := @ - Natural (Amount);
+    end Decrease_Indent;
+ 
+    package body Output_Mapping is
+       --  Implement indentation in Put_UTF_8 and New_Line.
+       --  Implement other output procedures using Put_UTF_8.
+ 
+       procedure Put (Buffer : in out Buffer_Type; Item : String) is
+       begin
+          Put_UTF_8 (Buffer, Item);
+       end Put;
+ 
+       procedure Wide_Put (Buffer : in out Buffer_Type; Item : Wide_String) is
+       begin
+          Buffer.All_8_Bits :=
+            @ and then
+            (for all WChar of Item => Wide_Character'Pos (WChar) < 256);
+ 
+          Put_UTF_8 (Buffer, UTF_Encoding.Wide_Strings.Encode (Item));
+       end Wide_Put;
+ 
+       procedure Wide_Wide_Put
+         (Buffer : in out Buffer_Type; Item : Wide_Wide_String)
+       is
+       begin
+          Buffer.All_8_Bits :=
+            @ and then
+            (for all WWChar of Item => Wide_Wide_Character'Pos (WWChar) < 256);
+ 
+          Put_UTF_8 (Buffer, UTF_Encoding.Wide_Wide_Strings.Encode (Item));
+       end Wide_Wide_Put;
+ 
+       procedure Put_UTF_8
+         (Buffer : in out Buffer_Type;
+          Item   :        UTF_Encoding.UTF_8_String) is
+       begin
+          if Item'Length = 0 then
+             return;
+          end if;
+ 
+          if Buffer.Indent_Pending then
+             Buffer.Indent_Pending := False;
+             if Buffer.Indentation > 0 then
+                Put_UTF_8_Implementation
+                  (Buffer, [1 .. Buffer.Indentation => ' ']);
+             end if;
+          end if;
+ 
+          Put_UTF_8_Implementation (Buffer, Item);
+       end Put_UTF_8;
+ 
+       procedure Wide_Put_UTF_16
+         (Buffer : in out Buffer_Type; Item : UTF_Encoding.UTF_16_Wide_String)
+       is
+       begin
+          Wide_Wide_Put (Buffer, UTF_Encoding.Wide_Wide_Strings.Decode (Item));
+       end Wide_Put_UTF_16;
+ 
+       procedure New_Line (Buffer : in out Buffer_Type) is
+       begin
+          Buffer.Indent_Pending := False; --  just for a moment
+          Put (Buffer, [ASCII.LF]);
+          Buffer.Indent_Pending := True;
+          Buffer.UTF_8_Column   := 1;
+       end New_Line;
+ 
+    end Output_Mapping;
+ 
+ end Ada.Strings.Text_Buffers;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sttebu.ads gcc-12.1.0/gcc/ada/libgnat/a-sttebu.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-sttebu.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/a-sttebu.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,136 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                         ADA.STRINGS.TEXT_BUFFERS                         --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ -- This specification is derived from the Ada Reference Manual for use with --
+ -- GNAT.  In accordance with the copyright of that document, you can freely --
+ -- copy and modify this specification,  provided that if you redistribute a --
+ -- modified version,  any changes that you have made are clearly indicated. --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Strings.UTF_Encoding;
+ package Ada.Strings.Text_Buffers with
+    Pure
+ is
+ 
+    type Text_Buffer_Count is range 0 .. Integer'Last;
+ 
+    New_Line_Count : constant Text_Buffer_Count := 1;
+    --  There is no support for two-character CR/LF line endings.
+ 
+    type Root_Buffer_Type is abstract tagged limited private with
+       Default_Initial_Condition => Current_Indent (Root_Buffer_Type) = 0;
+ 
+    procedure Put (Buffer : in out Root_Buffer_Type; Item : String) is abstract;
+ 
+    procedure Wide_Put
+      (Buffer : in out Root_Buffer_Type; Item : Wide_String) is abstract;
+ 
+    procedure Wide_Wide_Put
+      (Buffer : in out Root_Buffer_Type; Item : Wide_Wide_String) is abstract;
+ 
+    procedure Put_UTF_8
+      (Buffer : in out Root_Buffer_Type;
+       Item   :        UTF_Encoding.UTF_8_String) is abstract;
+ 
+    procedure Wide_Put_UTF_16
+      (Buffer : in out Root_Buffer_Type;
+       Item   :        UTF_Encoding.UTF_16_Wide_String) is abstract;
+ 
+    procedure New_Line (Buffer : in out Root_Buffer_Type) is abstract;
+ 
+    Standard_Indent : constant Text_Buffer_Count := 3;
+ 
+    function Current_Indent
+      (Buffer : Root_Buffer_Type) return Text_Buffer_Count;
+ 
+    procedure Increase_Indent
+      (Buffer : in out Root_Buffer_Type;
+       Amount :        Text_Buffer_Count := Standard_Indent) with
+       Post'Class => Current_Indent (Buffer) =
+       Current_Indent (Buffer)'Old + Amount;
+ 
+    procedure Decrease_Indent
+      (Buffer : in out Root_Buffer_Type;
+       Amount :        Text_Buffer_Count := Standard_Indent) with
+       Pre'Class => Current_Indent (Buffer) >= Amount
+       --  or else raise Constraint_Error,
+       or else Boolean'Val (Current_Indent (Buffer) - Amount),
+       Post'Class => Current_Indent (Buffer) =
+       Current_Indent (Buffer)'Old - Amount;
+ 
+ private
+ 
+    type Root_Buffer_Type is abstract tagged limited record
+       Indentation : Natural := 0;
+       --  Current indentation
+ 
+       Indent_Pending : Boolean := True;
+       --  Set by calls to New_Line, cleared when indentation emitted.
+ 
+       UTF_8_Length : Natural := 0;
+       --  Count of UTF_8 characters in the buffer
+ 
+       UTF_8_Column : Positive := 1;
+       --  Column in which next character will be written.
+       --  Calling New_Line resets to 1.
+ 
+       All_7_Bits : Boolean := True;
+       --  True if all characters seen so far fit in 7 bits
+       All_8_Bits : Boolean := True;
+       --  True if all characters seen so far fit in 8 bits
+ 
+    end record;
+ 
+    generic
+       --  This generic allows a client to extend Root_Buffer_Type without
+       --  having to implement any of the abstract subprograms other than
+       --  Put_UTF_8 (i.e., Put, Wide_Put, Wide_Wide_Put, Wide_Put_UTF_16,
+       --  and New_Line). Without this generic, each client would have to
+       --  duplicate the implementations of those 5 subprograms.
+       --  This generic also takes care of handling indentation, thereby
+       --  avoiding further code duplication. The name "Output_Mapping" isn't
+       --  wonderful, but it refers to the idea that this package knows how
+       --  to implement all the other output operations in terms of
+       --  just Put_UTF_8.
+       --
+       --  The classwide parameter type here is somewhat tricky;
+       --  there are no dispatching calls associated with this parameter.
+       --  It would be more accurate to say that the parameter is of type
+       --  Output_Mapping.Buffer_Type'Class, but that type hasn't been declared
+       --  yet. Instantiators will typically declare a non-abstract extension,
+       --  B2, of the buffer type, B1, declared in their instantiation. The
+       --  actual Put_UTF_8_Implementation parameter may then have a
+       --  precondition "Buffer in B2'Class" and that subprogram can safely
+       --  access components declared as part of the declaration of B2.
+ 
+       with procedure Put_UTF_8_Implementation
+         (Buffer : in out Root_Buffer_Type'Class;
+          Item   :        UTF_Encoding.UTF_8_String);
+    package Output_Mapping is
+       type Buffer_Type is abstract new Root_Buffer_Type with null record;
+ 
+       overriding procedure Put (Buffer : in out Buffer_Type; Item : String);
+ 
+       overriding procedure Wide_Put
+         (Buffer : in out Buffer_Type; Item : Wide_String);
+ 
+       overriding procedure Wide_Wide_Put
+         (Buffer : in out Buffer_Type; Item : Wide_Wide_String);
+ 
+       overriding procedure Put_UTF_8
+         (Buffer : in out Buffer_Type;
+          Item   :        UTF_Encoding.UTF_8_String);
+ 
+       overriding procedure Wide_Put_UTF_16
+         (Buffer : in out Buffer_Type; Item : UTF_Encoding.UTF_16_Wide_String);
+ 
+       overriding procedure New_Line (Buffer : in out Buffer_Type);
+    end Output_Mapping;
+ 
+ end Ada.Strings.Text_Buffers;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stteou.ads gcc-12.1.0/gcc/ada/libgnat/a-stteou.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stteou.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stteou.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,193 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                          ADA.STRINGS.TEXT_OUTPUT                         --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Ada.Strings.UTF_Encoding;
- with Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
- 
- package Ada.Strings.Text_Output with Pure is
- 
-    --  This package provides a "Sink" abstraction, to which characters of type
-    --  Character, Wide_Character, and Wide_Wide_Character can be sent. This
-    --  type is used by the Put_Image attribute. In particular, T'Put_Image has
-    --  the following parameter types:
-    --
-    --     procedure T'Put_Image (S : in out Sink'Class; V : T);
-    --
-    --  The default generated code for Put_Image of a composite type will
-    --  typically call Put_Image on the components.
-    --
-    --  This is not a fully general abstraction that can be arbitrarily
-    --  extended. It is designed with particular extensions in mind, and these
-    --  extensions are declared in child packages of this package, because they
-    --  depend on implementation details in the private part of this
-    --  package.
-    --
-    --  Users are not expected to extend type Sink.
-    --
-    --  The primary extensions of Sink are:
-    --
-    --     Buffer. The characters sent to a Buffer are stored in memory, and can
-    --     be retrieved via Get functions. This is intended for the
-    --     implementation of the 'Image attribute. The compiler will generate a
-    --     T'Image function that declares a local Buffer, sends characters to
-    --     it, and then returns a call to Get, Destroying the Buffer on return.
-    --
-    --       function T'Image (V : T) return String is
-    --          Buf : Buffer := New_Buffer (...);
-    --       begin
-    --          T'Put_Image (Buf, V);
-    --          return Result : constant String := Get (Buf) do
-    --             Destroy (Buf);
-    --          end return;
-    --       end T'Image;
-    --       ????Perhaps Buffer should be controlled; if you don't like
-    --       controlled types, call Put_Image directly.
-    --
-    --     File. The characters are sent to a file, possibly opened by file
-    --     name, or possibly standard output or standard error. 'Put_Image
-    --     can be called directly on a File, thus avoiding any heap allocation.
- 
-    type Sink (<>) is abstract tagged limited private;
-    type Sink_Access is access all Sink'Class with Storage_Size => 0;
-    --  Sink is a character sink; you can send characters to a Sink.
-    --  UTF-8 encoding is used.
- 
-    procedure Full_Method (S : in out Sink) is abstract;
-    procedure Flush_Method (S : in out Sink) is abstract;
-    --  There is an internal buffer to store the characters. Full_Method is
-    --  called when the buffer is full, and Flush_Method may be called to flush
-    --  the buffer. For Buffer, Full_Method allocates more space for more
-    --  characters, and Flush_Method does nothing. For File, Full_Method and
-    --  Flush_Method do the same thing: write the characters to the file, and
-    --  empty the internal buffer.
-    --
-    --  These are the only dispatching subprograms on Sink. This is for
-    --  efficiency; we don't dispatch on every write to the Sink, but only when
-    --  the internal buffer is full (or upon client request).
-    --
-    --  Full_Method and Flush_Method must make the current chunk empty.
-    --
-    --  Additional operations operating on Sink'Class are declared in the Utils
-    --  child, including Full and Flush, which call the above.
- 
-    function To_Wide (C : Character) return Wide_Character is
-      (Wide_Character'Val (Character'Pos (C)));
-    function To_Wide_Wide (C : Character) return Wide_Wide_Character is
-      (Wide_Wide_Character'Val (Character'Pos (C)));
-    function To_Wide_Wide (C : Wide_Character) return Wide_Wide_Character is
-      (Wide_Wide_Character'Val (Wide_Character'Pos (C)));
-    --  Conversions [Wide_]Character --> [Wide_]Wide_Character.
-    --  These cannot fail.
- 
-    function From_Wide (C : Wide_Character) return Character is
-      (Character'Val (Wide_Character'Pos (C)));
-    function From_Wide_Wide (C : Wide_Wide_Character) return Character is
-      (Character'Val (Wide_Wide_Character'Pos (C)));
-    function From_Wide_Wide (C : Wide_Wide_Character) return Wide_Character is
-      (Wide_Character'Val (Wide_Wide_Character'Pos (C)));
-    --  Conversions [Wide_]Wide_Character --> [Wide_]Character.
-    --  These fail if the character is out of range.
- 
-    function NL return Character is (ASCII.LF) with Inline;
-    function Wide_NL return Wide_Character is (To_Wide (Character'(NL)))
-      with Inline;
-    function Wide_Wide_NL return Wide_Wide_Character is
-      (To_Wide_Wide (Character'(NL))) with Inline;
-    --  Character representing new line. There is no support for CR/LF line
-    --  endings.
- 
-    --  We have two subtypes of String that are encoded in UTF-8. UTF_8 cannot
-    --  contain newline characters; UTF_8_Lines can. Sending UTF_8 data to a
-    --  Sink is more efficient, because end-of-line processing is not needed.
-    --  Both of these are more efficient than [[Wide_]Wide_]String, because no
-    --  encoding is needed.
- 
-    subtype UTF_8_Lines is UTF_Encoding.UTF_8_String with
-      Predicate =>
-        UTF_Encoding.Wide_Wide_Strings.Encode
-          (UTF_Encoding.Wide_Wide_Strings.Decode (UTF_8_Lines)) = UTF_8_Lines;
- 
-    subtype UTF_8 is UTF_8_Lines with
-      Predicate => (for all UTF_8_Char of UTF_8 => UTF_8_Char /= NL);
- 
-    Default_Indent_Amount : constant Natural := 4;
- 
-    Default_Chunk_Length : constant Positive := 500;
-    --  Experiment shows this value to be reasonably efficient; decreasing it
-    --  slows things down, but increasing it doesn't gain much.
- 
- private
-    --  For Buffer, the "internal buffer" mentioned above is implemented as a
-    --  linked list of chunks. When the current chunk is full, we allocate a new
-    --  one. For File, there is only one chunk. When it is full, we send the
-    --  data to the file, and empty it.
- 
-    type Chunk;
-    type Chunk_Access is access all Chunk with Storage_Size => 0;
-    type Chunk (Length : Positive) is limited record
-       Next : Chunk_Access := null;
-       Chars : UTF_8_Lines (1 .. Length);
-    end record;
- 
-    type Sink (Chunk_Length : Positive) is abstract tagged limited record
-       Indent_Amount : Natural;
-       Column : Positive := 1;
-       Indentation : Natural := 0;
- 
-       All_7_Bits : Boolean := True;
-       --  For optimization of Text_Output.Buffers.Get (cf).
-       --  True if all characters seen so far fit in 7 bits.
-       --  7-bit characters are represented the same in Character
-       --  and in UTF-8, so they don't need translation.
- 
-       All_8_Bits : Boolean := True;
-       --  True if all characters seen so far fit in 8 bits.
-       --  This is needed in Text_Output.Buffers.Get to distinguish
-       --  the case where all characters are Latin-1 (so it should
-       --  decode) from the case where some characters are bigger than
-       --  8 bits (so the result is implementation defined).
- 
-       Cur_Chunk : Chunk_Access;
-       --  Points to the chunk we are currently sending characters to.
-       --  We want to say:
-       --     Cur_Chunk : Chunk_Access := Initial_Chunk'Access;
-       --  but that's illegal, so we have some horsing around to do.
- 
-       Last : Natural := 0;
-       --  Last-used character in Cur_Chunk.all.
- 
-       Initial_Chunk : aliased Chunk (Length => Chunk_Length);
-       --  For Buffer, this is the first chunk. Subsequent chunks are allocated
-       --  on the heap. For File, this is the only chunk, and there is no heap
-       --  allocation.
-    end record;
- 
- end Ada.Strings.Text_Output;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stunau.adb gcc-12.1.0/gcc/ada/libgnat/a-stunau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stunau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stunau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Strings.Unbounded.Aux i
*** 52,62 ****
     -- Set_String --
     ----------------
  
!    procedure Set_String (UP : in out Unbounded_String; S : String_Access) is
     begin
!       Finalize (UP);
!       UP.Reference := S;
!       UP.Last := UP.Reference'Length;
     end Set_String;
  
  end Ada.Strings.Unbounded.Aux;
--- 52,68 ----
     -- Set_String --
     ----------------
  
!    procedure Set_String
!      (U      : out Unbounded_String;
!       Length : Positive;
!       Set    : not null access procedure (S : out String))
!    is
!       Old : String_Access := U.Reference;
     begin
!       U.Last := Length;
!       U.Reference := new String (1 .. Length);
!       Set (U.Reference.all);
!       Free (Old);
     end Set_String;
  
  end Ada.Strings.Unbounded.Aux;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stunau.ads gcc-12.1.0/gcc/ada/libgnat/a-stunau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stunau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stunau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Ada.Strings.Unbounded.Aux is
*** 56,77 ****
        S : out Big_String_Access;
        L : out Natural);
     pragma Inline (Get_String);
!    --  This procedure returns the internal string pointer used in the
!    --  representation of an unbounded string as well as the actual current
!    --  length (which may be less than S.all'Length because in general there
!    --  can be extra space assigned). The characters of this string may be
!    --  not be modified via the returned pointer,  and are valid only as
!    --  long as the original unbounded string is not accessed or modified.
     --
     --  This procedure is much more efficient than the use of To_String
     --  since it avoids the need to copy the string. The lower bound of the
     --  referenced string returned by this call is always one, so the actual
     --  string data is always accessible as S (1 .. L).
  
!    procedure Set_String (UP : in out Unbounded_String; S : String_Access);
     pragma Inline (Set_String);
!    --  This version of Set_Unbounded_String takes a string access value, rather
!    --  than a string. The lower bound of the string value is required to be
!    --  one, and this requirement is not checked.
  
  end Ada.Strings.Unbounded.Aux;
--- 56,79 ----
        S : out Big_String_Access;
        L : out Natural);
     pragma Inline (Get_String);
!    --  Return the internal string pointer used in the representation of an
!    --  unbounded string as well as the actual current length (which may be less
!    --  than S.all'Length because in general there can be extra space assigned).
!    --  The characters of this string may be not be modified via the returned
!    --  pointer, and are valid only as long as the original unbounded string is
!    --  not accessed or modified.
     --
     --  This procedure is much more efficient than the use of To_String
     --  since it avoids the need to copy the string. The lower bound of the
     --  referenced string returned by this call is always one, so the actual
     --  string data is always accessible as S (1 .. L).
  
!    procedure Set_String
!      (U      : out Unbounded_String;
!       Length : Positive;
!       Set    : not null access procedure (S : out String));
     pragma Inline (Set_String);
!    --  Create an unbounded string U with the given Length, using Set to fill
!    --  the contents of U.
  
  end Ada.Strings.Unbounded.Aux;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stunau__shared.adb gcc-12.1.0/gcc/ada/libgnat/a-stunau__shared.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stunau__shared.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stunau__shared.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Strings.Unbounded.Aux i
*** 51,62 ****
     -- Set_String --
     ----------------
  
!    procedure Set_String (UP : in out Unbounded_String; S : String_Access) is
!       X : String_Access := S;
! 
     begin
!       Set_Unbounded_String (UP, S.all);
!       Free (X);
     end Set_String;
  
  end Ada.Strings.Unbounded.Aux;
--- 51,80 ----
     -- Set_String --
     ----------------
  
!    procedure Set_String
!      (U      : out Unbounded_String;
!       Length : Positive;
!       Set    : not null access procedure (S : out String))
!    is
!       TR : constant Shared_String_Access := U.Reference;
!       DR : Shared_String_Access;
     begin
!       --  Try to reuse existing shared string
! 
!       if Can_Be_Reused (TR, Length) then
!          Reference (TR);
!          DR := TR;
! 
!       --  Otherwise allocate new shared string
! 
!       else
!          DR := Allocate (Length);
!          U.Reference := DR;
!       end if;
! 
!       Set (DR.Data (1 .. Length));
!       DR.Last := Length;
!       Unreference (TR);
     end Set_String;
  
  end Ada.Strings.Unbounded.Aux;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stunha.adb gcc-12.1.0/gcc/ada/libgnat/a-stunha.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stunha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stunha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stuten.adb gcc-12.1.0/gcc/ada/libgnat/a-stuten.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stuten.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stuten.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2010-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stuten.ads gcc-12.1.0/gcc/ada/libgnat/a-stuten.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stuten.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stuten.ads	Fri May  6 07:30:56 2022
*************** package Ada.Strings.UTF_Encoding is
*** 94,100 ****
                  Character'Val (16#FE#);
  
     BOM_16   : constant UTF_16_Wide_String :=
!                 (1 => Wide_Character'Val (16#FEFF#));
  
     function Encoding
       (Item    : UTF_String;
--- 94,100 ----
                  Character'Val (16#FE#);
  
     BOM_16   : constant UTF_16_Wide_String :=
!                 [Wide_Character'Val (16#FEFF#)];
  
     function Encoding
       (Item    : UTF_String;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwibo.adb gcc-12.1.0/gcc/ada/libgnat/a-stwibo.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stwibo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwibo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwibo.ads gcc-12.1.0/gcc/ada/libgnat/a-stwibo.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stwibo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwibo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Strings.Wide_Bounded is
*** 487,494 ****
                                     (Max_Length         => Max_Length,
                                      Current_Length     => 0,
                                      Data               =>
!                                       (1 .. Max_Length =>
!                                          Wide_Superbounded.Wide_NUL));
  
        pragma Inline (To_Bounded_Wide_String);
  
--- 487,494 ----
                                     (Max_Length         => Max_Length,
                                      Current_Length     => 0,
                                      Data               =>
!                                       [1 .. Max_Length =>
!                                          Wide_Superbounded.Wide_NUL]);
  
        pragma Inline (To_Bounded_Wide_String);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwifi.adb gcc-12.1.0/gcc/ada/libgnat/a-stwifi.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stwifi.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwifi.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwiha.adb gcc-12.1.0/gcc/ada/libgnat/a-stwiha.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stwiha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwiha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwima.adb gcc-12.1.0/gcc/ada/libgnat/a-stwima.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stwima.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwima.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwima.ads gcc-12.1.0/gcc/ada/libgnat/a-stwima.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stwima.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwima.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private
*** 181,188 ****
     overriding procedure Adjust     (Object : in out Wide_Character_Set);
     overriding procedure Finalize   (Object : in out Wide_Character_Set);
  
!    Null_Range : aliased constant Wide_Character_Ranges :=
!                   (1 .. 0 => (Low => ' ', High => ' '));
  
     Null_Set : constant Wide_Character_Set :=
                  (AF.Controlled with
--- 181,187 ----
     overriding procedure Adjust     (Object : in out Wide_Character_Set);
     overriding procedure Finalize   (Object : in out Wide_Character_Set);
  
!    Null_Range : aliased constant Wide_Character_Ranges := [];
  
     Null_Set : constant Wide_Character_Set :=
                  (AF.Controlled with
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwise.adb gcc-12.1.0/gcc/ada/libgnat/a-stwise.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stwise.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwise.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwise.ads gcc-12.1.0/gcc/ada/libgnat/a-stwise.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stwise.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwise.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwisu.adb gcc-12.1.0/gcc/ada/libgnat/a-stwisu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stwisu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwisu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
*************** package body Ada.Strings.Wide_Superbound
*** 852,858 ****
        elsif Count <= Max_Length then
           Result.Current_Length := Count;
           Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!          Result.Data (Slen + 1 .. Count) := (others => Pad);
  
        else
           Result.Current_Length := Max_Length;
--- 852,858 ----
        elsif Count <= Max_Length then
           Result.Current_Length := Count;
           Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!          Result.Data (Slen + 1 .. Count) := [others => Pad];
  
        else
           Result.Current_Length := Max_Length;
*************** package body Ada.Strings.Wide_Superbound
*** 860,876 ****
           case Drop is
              when Strings.Right =>
                 Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!                Result.Data (Slen + 1 .. Max_Length) := (others => Pad);
  
              when Strings.Left =>
                 if Npad >= Max_Length then
!                   Result.Data := (others => Pad);
  
                 else
                    Result.Data (1 .. Max_Length - Npad) :=
                      Source.Data (Count - Max_Length + 1 .. Slen);
                    Result.Data (Max_Length - Npad + 1 .. Max_Length) :=
!                     (others => Pad);
                 end if;
  
              when Strings.Error =>
--- 860,876 ----
           case Drop is
              when Strings.Right =>
                 Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!                Result.Data (Slen + 1 .. Max_Length) := [others => Pad];
  
              when Strings.Left =>
                 if Npad >= Max_Length then
!                   Result.Data := [others => Pad];
  
                 else
                    Result.Data (1 .. Max_Length - Npad) :=
                      Source.Data (Count - Max_Length + 1 .. Slen);
                    Result.Data (Max_Length - Npad + 1 .. Max_Length) :=
!                     [others => Pad];
                 end if;
  
              when Strings.Error =>
*************** package body Ada.Strings.Wide_Superbound
*** 898,915 ****
  
        elsif Count <= Max_Length then
           Source.Current_Length := Count;
!          Source.Data (Slen + 1 .. Count) := (others => Pad);
  
        else
           Source.Current_Length := Max_Length;
  
           case Drop is
              when Strings.Right =>
!                Source.Data (Slen + 1 .. Max_Length) := (others => Pad);
  
              when Strings.Left =>
                 if Npad > Max_Length then
!                   Source.Data := (others => Pad);
  
                 else
                    Temp := Source.Data;
--- 898,915 ----
  
        elsif Count <= Max_Length then
           Source.Current_Length := Count;
!          Source.Data (Slen + 1 .. Count) := [others => Pad];
  
        else
           Source.Current_Length := Max_Length;
  
           case Drop is
              when Strings.Right =>
!                Source.Data (Slen + 1 .. Max_Length) := [others => Pad];
  
              when Strings.Left =>
                 if Npad > Max_Length then
!                   Source.Data := [others => Pad];
  
                 else
                    Temp := Source.Data;
*************** package body Ada.Strings.Wide_Superbound
*** 1386,1392 ****
           Result.Current_Length := Max_Length;
        end if;
  
!       Result.Data (1 .. Result.Current_Length) := (others => Item);
        return Result;
     end Super_Replicate;
  
--- 1386,1392 ----
           Result.Current_Length := Max_Length;
        end if;
  
!       Result.Data (1 .. Result.Current_Length) := [others => Item];
        return Result;
     end Super_Replicate;
  
*************** package body Ada.Strings.Wide_Superbound
*** 1542,1548 ****
  
        elsif Count <= Max_Length then
           Result.Current_Length := Count;
!          Result.Data (1 .. Npad) := (others => Pad);
           Result.Data (Npad + 1 .. Count) := Source.Data (1 .. Slen);
  
        else
--- 1542,1548 ----
  
        elsif Count <= Max_Length then
           Result.Current_Length := Count;
!          Result.Data (1 .. Npad) := [others => Pad];
           Result.Data (Npad + 1 .. Count) := Source.Data (1 .. Slen);
  
        else
*************** package body Ada.Strings.Wide_Superbound
*** 1551,1566 ****
           case Drop is
              when Strings.Right =>
                 if Npad >= Max_Length then
!                   Result.Data := (others => Pad);
  
                 else
!                   Result.Data (1 .. Npad) := (others => Pad);
                    Result.Data (Npad + 1 .. Max_Length) :=
                      Source.Data (1 .. Max_Length - Npad);
                 end if;
  
              when Strings.Left =>
!                Result.Data (1 .. Max_Length - Slen) := (others => Pad);
                 Result.Data (Max_Length - Slen + 1 .. Max_Length) :=
                   Source.Data (1 .. Slen);
  
--- 1551,1566 ----
           case Drop is
              when Strings.Right =>
                 if Npad >= Max_Length then
!                   Result.Data := [others => Pad];
  
                 else
!                   Result.Data (1 .. Npad) := [others => Pad];
                    Result.Data (Npad + 1 .. Max_Length) :=
                      Source.Data (1 .. Max_Length - Npad);
                 end if;
  
              when Strings.Left =>
!                Result.Data (1 .. Max_Length - Slen) := [others => Pad];
                 Result.Data (Max_Length - Slen + 1 .. Max_Length) :=
                   Source.Data (1 .. Slen);
  
*************** package body Ada.Strings.Wide_Superbound
*** 1592,1598 ****
  
        elsif Count <= Max_Length then
           Source.Current_Length := Count;
!          Source.Data (1 .. Npad) := (others => Pad);
           Source.Data (Npad + 1 .. Count) := Temp (1 .. Slen);
  
        else
--- 1592,1598 ----
  
        elsif Count <= Max_Length then
           Source.Current_Length := Count;
!          Source.Data (1 .. Npad) := [others => Pad];
           Source.Data (Npad + 1 .. Count) := Temp (1 .. Slen);
  
        else
*************** package body Ada.Strings.Wide_Superbound
*** 1601,1610 ****
           case Drop is
              when Strings.Right =>
                 if Npad >= Max_Length then
!                   Source.Data := (others => Pad);
  
                 else
!                   Source.Data (1 .. Npad) := (others => Pad);
                    Source.Data (Npad + 1 .. Max_Length) :=
                      Temp (1 .. Max_Length - Npad);
                 end if;
--- 1601,1610 ----
           case Drop is
              when Strings.Right =>
                 if Npad >= Max_Length then
!                   Source.Data := [others => Pad];
  
                 else
!                   Source.Data (1 .. Npad) := [others => Pad];
                    Source.Data (Npad + 1 .. Max_Length) :=
                      Temp (1 .. Max_Length - Npad);
                 end if;
*************** package body Ada.Strings.Wide_Superbound
*** 1744,1750 ****
           end loop;
        end if;
  
!       Source.Data := (others => Wide_NUL);
        Source.Current_Length := Last - First + 1;
        Source.Data (1 .. Source.Current_Length) := Temp (First .. Last);
     end Super_Trim;
--- 1744,1750 ----
           end loop;
        end if;
  
!       Source.Data := [others => Wide_NUL];
        Source.Current_Length := Last - First + 1;
        Source.Data (1 .. Source.Current_Length) := Temp (First .. Last);
     end Super_Trim;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwisu.ads gcc-12.1.0/gcc/ada/libgnat/a-stwisu.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stwisu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwisu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwiun.adb gcc-12.1.0/gcc/ada/libgnat/a-stwiun.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stwiun.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwiun.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwiun.ads gcc-12.1.0/gcc/ada/libgnat/a-stwiun.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stwiun.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwiun.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwiun__shared.adb gcc-12.1.0/gcc/ada/libgnat/a-stwiun__shared.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stwiun__shared.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwiun__shared.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Strings.Wide_Unbounded
*** 76,82 ****
           Reference (Empty_Shared_Wide_String'Access);
           DR := Empty_Shared_Wide_String'Access;
  
!       --  Left string is empty, return Rigth string
  
        elsif LR.Last = 0 then
           Reference (RR);
--- 76,82 ----
           Reference (Empty_Shared_Wide_String'Access);
           DR := Empty_Shared_Wide_String'Access;
  
!       --  Left string is empty, return Right string
  
        elsif LR.Last = 0 then
           Reference (RR);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stwiun__shared.ads gcc-12.1.0/gcc/ada/libgnat/a-stwiun__shared.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stwiun__shared.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stwiun__shared.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzbou.adb gcc-12.1.0/gcc/ada/libgnat/a-stzbou.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stzbou.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzbou.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzbou.ads gcc-12.1.0/gcc/ada/libgnat/a-stzbou.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stzbou.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzbou.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Strings.Wide_Wide_Bounded is
*** 493,503 ****
        --  the Wide_Wide_Superbounded package.
  
        Null_Bounded_Wide_Wide_String : constant Bounded_Wide_Wide_String :=
!                                    (Max_Length         => Max_Length,
                                      Current_Length     => 0,
                                      Data               =>
!                                       (1 .. Max_Length =>
!                                         Wide_Wide_Superbounded.Wide_Wide_NUL));
  
        pragma Inline (To_Bounded_Wide_Wide_String);
  
--- 493,503 ----
        --  the Wide_Wide_Superbounded package.
  
        Null_Bounded_Wide_Wide_String : constant Bounded_Wide_Wide_String :=
!                                    [Max_Length         => Max_Length,
                                      Current_Length     => 0,
                                      Data               =>
!                                       [1 .. Max_Length =>
!                                         Wide_Wide_Superbounded.Wide_Wide_NUL]];
  
        pragma Inline (To_Bounded_Wide_Wide_String);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzfix.adb gcc-12.1.0/gcc/ada/libgnat/a-stzfix.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stzfix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzfix.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzhas.adb gcc-12.1.0/gcc/ada/libgnat/a-stzhas.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stzhas.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzhas.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzmap.adb gcc-12.1.0/gcc/ada/libgnat/a-stzmap.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stzmap.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzmap.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzmap.ads gcc-12.1.0/gcc/ada/libgnat/a-stzmap.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stzmap.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzmap.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private
*** 183,190 ****
     procedure Adjust     (Object : in out Wide_Wide_Character_Set);
     procedure Finalize   (Object : in out Wide_Wide_Character_Set);
  
!    Null_Range : aliased constant Wide_Wide_Character_Ranges :=
!                   (1 .. 0 => (Low => ' ', High => ' '));
  
     Null_Set : constant Wide_Wide_Character_Set :=
                  (AF.Controlled with
--- 183,189 ----
     procedure Adjust     (Object : in out Wide_Wide_Character_Set);
     procedure Finalize   (Object : in out Wide_Wide_Character_Set);
  
!    Null_Range : aliased constant Wide_Wide_Character_Ranges := [];
  
     Null_Set : constant Wide_Wide_Character_Set :=
                  (AF.Controlled with
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzsea.adb gcc-12.1.0/gcc/ada/libgnat/a-stzsea.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stzsea.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzsea.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzsea.ads gcc-12.1.0/gcc/ada/libgnat/a-stzsea.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stzsea.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzsea.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzsup.adb gcc-12.1.0/gcc/ada/libgnat/a-stzsup.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stzsup.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzsup.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
*************** package body Ada.Strings.Wide_Wide_Super
*** 853,859 ****
        elsif Count <= Max_Length then
           Result.Current_Length := Count;
           Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!          Result.Data (Slen + 1 .. Count) := (others => Pad);
  
        else
           Result.Current_Length := Max_Length;
--- 853,859 ----
        elsif Count <= Max_Length then
           Result.Current_Length := Count;
           Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!          Result.Data (Slen + 1 .. Count) := [others => Pad];
  
        else
           Result.Current_Length := Max_Length;
*************** package body Ada.Strings.Wide_Wide_Super
*** 861,877 ****
           case Drop is
              when Strings.Right =>
                 Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!                Result.Data (Slen + 1 .. Max_Length) := (others => Pad);
  
              when Strings.Left =>
                 if Npad >= Max_Length then
!                   Result.Data := (others => Pad);
  
                 else
                    Result.Data (1 .. Max_Length - Npad) :=
                      Source.Data (Count - Max_Length + 1 .. Slen);
                    Result.Data (Max_Length - Npad + 1 .. Max_Length) :=
!                     (others => Pad);
                 end if;
  
              when Strings.Error =>
--- 861,877 ----
           case Drop is
              when Strings.Right =>
                 Result.Data (1 .. Slen) := Source.Data (1 .. Slen);
!                Result.Data (Slen + 1 .. Max_Length) := [others => Pad];
  
              when Strings.Left =>
                 if Npad >= Max_Length then
!                   Result.Data := [others => Pad];
  
                 else
                    Result.Data (1 .. Max_Length - Npad) :=
                      Source.Data (Count - Max_Length + 1 .. Slen);
                    Result.Data (Max_Length - Npad + 1 .. Max_Length) :=
!                     [others => Pad];
                 end if;
  
              when Strings.Error =>
*************** package body Ada.Strings.Wide_Wide_Super
*** 899,916 ****
  
        elsif Count <= Max_Length then
           Source.Current_Length := Count;
!          Source.Data (Slen + 1 .. Count) := (others => Pad);
  
        else
           Source.Current_Length := Max_Length;
  
           case Drop is
              when Strings.Right =>
!                Source.Data (Slen + 1 .. Max_Length) := (others => Pad);
  
              when Strings.Left =>
                 if Npad > Max_Length then
!                   Source.Data := (others => Pad);
  
                 else
                    Temp := Source.Data;
--- 899,916 ----
  
        elsif Count <= Max_Length then
           Source.Current_Length := Count;
!          Source.Data (Slen + 1 .. Count) := [others => Pad];
  
        else
           Source.Current_Length := Max_Length;
  
           case Drop is
              when Strings.Right =>
!                Source.Data (Slen + 1 .. Max_Length) := [others => Pad];
  
              when Strings.Left =>
                 if Npad > Max_Length then
!                   Source.Data := [others => Pad];
  
                 else
                    Temp := Source.Data;
*************** package body Ada.Strings.Wide_Wide_Super
*** 1389,1395 ****
           Result.Current_Length := Max_Length;
        end if;
  
!       Result.Data (1 .. Result.Current_Length) := (others => Item);
        return Result;
     end Super_Replicate;
  
--- 1389,1395 ----
           Result.Current_Length := Max_Length;
        end if;
  
!       Result.Data (1 .. Result.Current_Length) := [others => Item];
        return Result;
     end Super_Replicate;
  
*************** package body Ada.Strings.Wide_Wide_Super
*** 1546,1552 ****
  
        elsif Count <= Max_Length then
           Result.Current_Length := Count;
!          Result.Data (1 .. Npad) := (others => Pad);
           Result.Data (Npad + 1 .. Count) := Source.Data (1 .. Slen);
  
        else
--- 1546,1552 ----
  
        elsif Count <= Max_Length then
           Result.Current_Length := Count;
!          Result.Data (1 .. Npad) := [others => Pad];
           Result.Data (Npad + 1 .. Count) := Source.Data (1 .. Slen);
  
        else
*************** package body Ada.Strings.Wide_Wide_Super
*** 1555,1570 ****
           case Drop is
              when Strings.Right =>
                 if Npad >= Max_Length then
!                   Result.Data := (others => Pad);
  
                 else
!                   Result.Data (1 .. Npad) := (others => Pad);
                    Result.Data (Npad + 1 .. Max_Length) :=
                      Source.Data (1 .. Max_Length - Npad);
                 end if;
  
              when Strings.Left =>
!                Result.Data (1 .. Max_Length - Slen) := (others => Pad);
                 Result.Data (Max_Length - Slen + 1 .. Max_Length) :=
                   Source.Data (1 .. Slen);
  
--- 1555,1570 ----
           case Drop is
              when Strings.Right =>
                 if Npad >= Max_Length then
!                   Result.Data := [others => Pad];
  
                 else
!                   Result.Data (1 .. Npad) := [others => Pad];
                    Result.Data (Npad + 1 .. Max_Length) :=
                      Source.Data (1 .. Max_Length - Npad);
                 end if;
  
              when Strings.Left =>
!                Result.Data (1 .. Max_Length - Slen) := [others => Pad];
                 Result.Data (Max_Length - Slen + 1 .. Max_Length) :=
                   Source.Data (1 .. Slen);
  
*************** package body Ada.Strings.Wide_Wide_Super
*** 1596,1602 ****
  
        elsif Count <= Max_Length then
           Source.Current_Length := Count;
!          Source.Data (1 .. Npad) := (others => Pad);
           Source.Data (Npad + 1 .. Count) := Temp (1 .. Slen);
  
        else
--- 1596,1602 ----
  
        elsif Count <= Max_Length then
           Source.Current_Length := Count;
!          Source.Data (1 .. Npad) := [others => Pad];
           Source.Data (Npad + 1 .. Count) := Temp (1 .. Slen);
  
        else
*************** package body Ada.Strings.Wide_Wide_Super
*** 1605,1614 ****
           case Drop is
              when Strings.Right =>
                 if Npad >= Max_Length then
!                   Source.Data := (others => Pad);
  
                 else
!                   Source.Data (1 .. Npad) := (others => Pad);
                    Source.Data (Npad + 1 .. Max_Length) :=
                      Temp (1 .. Max_Length - Npad);
                 end if;
--- 1605,1614 ----
           case Drop is
              when Strings.Right =>
                 if Npad >= Max_Length then
!                   Source.Data := [others => Pad];
  
                 else
!                   Source.Data (1 .. Npad) := [others => Pad];
                    Source.Data (Npad + 1 .. Max_Length) :=
                      Temp (1 .. Max_Length - Npad);
                 end if;
*************** package body Ada.Strings.Wide_Wide_Super
*** 1752,1758 ****
           end loop;
        end if;
  
!       Source.Data := (others => Wide_Wide_NUL);
        Source.Current_Length := Last - First + 1;
        Source.Data (1 .. Source.Current_Length) := Temp (First .. Last);
     end Super_Trim;
--- 1752,1758 ----
           end loop;
        end if;
  
!       Source.Data := [others => Wide_Wide_NUL];
        Source.Current_Length := Last - First + 1;
        Source.Data (1 .. Source.Current_Length) := Temp (First .. Last);
     end Super_Trim;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzsup.ads gcc-12.1.0/gcc/ada/libgnat/a-stzsup.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stzsup.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzsup.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzunb.adb gcc-12.1.0/gcc/ada/libgnat/a-stzunb.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stzunb.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzunb.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzunb.ads gcc-12.1.0/gcc/ada/libgnat/a-stzunb.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stzunb.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzunb.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzunb__shared.adb gcc-12.1.0/gcc/ada/libgnat/a-stzunb__shared.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-stzunb__shared.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzunb__shared.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Strings.Wide_Wide_Unbou
*** 76,82 ****
           Reference (Empty_Shared_Wide_Wide_String'Access);
           DR := Empty_Shared_Wide_Wide_String'Access;
  
!       --  Left string is empty, return Rigth string
  
        elsif LR.Last = 0 then
           Reference (RR);
--- 76,82 ----
           Reference (Empty_Shared_Wide_Wide_String'Access);
           DR := Empty_Shared_Wide_Wide_String'Access;
  
!       --  Left string is empty, return Right string
  
        elsif LR.Last = 0 then
           Reference (RR);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-stzunb__shared.ads gcc-12.1.0/gcc/ada/libgnat/a-stzunb__shared.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-stzunb__shared.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-stzunb__shared.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-suecin.adb gcc-12.1.0/gcc/ada/libgnat/a-suecin.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-suecin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-suecin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-suecin.ads gcc-12.1.0/gcc/ada/libgnat/a-suecin.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-suecin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-suecin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-suenco.adb gcc-12.1.0/gcc/ada/libgnat/a-suenco.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-suenco.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-suenco.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-suenst.adb gcc-12.1.0/gcc/ada/libgnat/a-suenst.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-suenst.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-suenst.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-suewst.adb gcc-12.1.0/gcc/ada/libgnat/a-suewst.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-suewst.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-suewst.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-suezst.adb gcc-12.1.0/gcc/ada/libgnat/a-suezst.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-suezst.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-suezst.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-suhcin.adb gcc-12.1.0/gcc/ada/libgnat/a-suhcin.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-suhcin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-suhcin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-suhcin.ads gcc-12.1.0/gcc/ada/libgnat/a-suhcin.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-suhcin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-suhcin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sulcin.adb gcc-12.1.0/gcc/ada/libgnat/a-sulcin.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-sulcin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sulcin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-sulcin.ads gcc-12.1.0/gcc/ada/libgnat/a-sulcin.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-sulcin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-sulcin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, Free Software Foundation, Inc.       --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-suteio.adb gcc-12.1.0/gcc/ada/libgnat/a-suteio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-suteio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-suteio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-suteio.ads gcc-12.1.0/gcc/ada/libgnat/a-suteio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-suteio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-suteio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-suteio__shared.adb gcc-12.1.0/gcc/ada/libgnat/a-suteio__shared.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-suteio__shared.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-suteio__shared.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-swbwha.adb gcc-12.1.0/gcc/ada/libgnat/a-swbwha.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-swbwha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-swbwha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-swmwco.ads gcc-12.1.0/gcc/ada/libgnat/a-swmwco.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-swmwco.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-swmwco.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private
*** 66,117 ****
     subtype WC is Wide_Character;
  
     Control_Ranges           : aliased constant Wide_Character_Ranges :=
!      ((W.NUL, W.US),
!       (W.DEL, W.APC));
  
     Control_Set              : constant Wide_Character_Set :=
       (AF.Controlled with
        Control_Ranges'Unrestricted_Access);
  
     Graphic_Ranges           : aliased constant Wide_Character_Ranges :=
!      ((W.Space,       W.Tilde),
!       (WC'Val (256), WC'Last));
  
     Graphic_Set              : constant Wide_Character_Set :=
       (AF.Controlled with
        Graphic_Ranges'Unrestricted_Access);
  
     Letter_Ranges            : aliased constant Wide_Character_Ranges :=
!      (('A',                   'Z'),
!       (W.LC_A,                W.LC_Z),
!       (W.UC_A_Grave,          W.UC_O_Diaeresis),
!       (W.UC_O_Oblique_Stroke, W.LC_O_Diaeresis),
!       (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis));
  
     Letter_Set               : constant Wide_Character_Set :=
       (AF.Controlled with
        Letter_Ranges'Unrestricted_Access);
  
     Lower_Ranges             : aliased constant Wide_Character_Ranges :=
!      (1 => (W.LC_A,                 W.LC_Z),
        2 => (W.LC_German_Sharp_S,   W.LC_O_Diaeresis),
!       3 => (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis));
  
     Lower_Set                : constant Wide_Character_Set :=
       (AF.Controlled with
        Lower_Ranges'Unrestricted_Access);
  
     Upper_Ranges             : aliased constant Wide_Character_Ranges :=
!      (1 => ('A',                   'Z'),
        2 => (W.UC_A_Grave,          W.UC_O_Diaeresis),
!       3 => (W.UC_O_Oblique_Stroke, W.UC_Icelandic_Thorn));
  
     Upper_Set                : constant Wide_Character_Set :=
       (AF.Controlled with
        Upper_Ranges'Unrestricted_Access);
  
     Basic_Ranges             : aliased constant Wide_Character_Ranges :=
!      (1 => ('A',                   'Z'),
        2 => (W.LC_A,                W.LC_Z),
        3 => (W.UC_AE_Diphthong,     W.UC_AE_Diphthong),
        4 => (W.LC_AE_Diphthong,     W.LC_AE_Diphthong),
--- 66,117 ----
     subtype WC is Wide_Character;
  
     Control_Ranges           : aliased constant Wide_Character_Ranges :=
!      [ (W.NUL, W.US),
!        (W.DEL, W.APC)];
  
     Control_Set              : constant Wide_Character_Set :=
       (AF.Controlled with
        Control_Ranges'Unrestricted_Access);
  
     Graphic_Ranges           : aliased constant Wide_Character_Ranges :=
!      [ (W.Space,      W.Tilde),
!        (WC'Val (256), WC'Last)];
  
     Graphic_Set              : constant Wide_Character_Set :=
       (AF.Controlled with
        Graphic_Ranges'Unrestricted_Access);
  
     Letter_Ranges            : aliased constant Wide_Character_Ranges :=
!      [ ('A',                   'Z'),
!        (W.LC_A,                W.LC_Z),
!        (W.UC_A_Grave,          W.UC_O_Diaeresis),
!        (W.UC_O_Oblique_Stroke, W.LC_O_Diaeresis),
!        (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis)];
  
     Letter_Set               : constant Wide_Character_Set :=
       (AF.Controlled with
        Letter_Ranges'Unrestricted_Access);
  
     Lower_Ranges             : aliased constant Wide_Character_Ranges :=
!      [1 => (W.LC_A,                 W.LC_Z),
        2 => (W.LC_German_Sharp_S,   W.LC_O_Diaeresis),
!       3 => (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis)];
  
     Lower_Set                : constant Wide_Character_Set :=
       (AF.Controlled with
        Lower_Ranges'Unrestricted_Access);
  
     Upper_Ranges             : aliased constant Wide_Character_Ranges :=
!      [1 => ('A',                   'Z'),
        2 => (W.UC_A_Grave,          W.UC_O_Diaeresis),
!       3 => (W.UC_O_Oblique_Stroke, W.UC_Icelandic_Thorn)];
  
     Upper_Set                : constant Wide_Character_Set :=
       (AF.Controlled with
        Upper_Ranges'Unrestricted_Access);
  
     Basic_Ranges             : aliased constant Wide_Character_Ranges :=
!      [1 => ('A',                   'Z'),
        2 => (W.LC_A,                W.LC_Z),
        3 => (W.UC_AE_Diphthong,     W.UC_AE_Diphthong),
        4 => (W.LC_AE_Diphthong,     W.LC_AE_Diphthong),
*************** private
*** 119,187 ****
        6 => (W.UC_Icelandic_Thorn,  W.UC_Icelandic_Thorn),
        7 => (W.LC_Icelandic_Thorn,  W.LC_Icelandic_Thorn),
        8 => (W.UC_Icelandic_Eth,    W.UC_Icelandic_Eth),
!       9 => (W.LC_Icelandic_Eth,    W.LC_Icelandic_Eth));
  
     Basic_Set                : constant Wide_Character_Set :=
       (AF.Controlled with
        Basic_Ranges'Unrestricted_Access);
  
     Decimal_Digit_Ranges     : aliased constant Wide_Character_Ranges :=
!      (1 => ('0', '9'));
  
     Decimal_Digit_Set        : constant Wide_Character_Set :=
       (AF.Controlled with
        Decimal_Digit_Ranges'Unrestricted_Access);
  
     Hexadecimal_Digit_Ranges : aliased constant Wide_Character_Ranges :=
!      (1 => ('0', '9'),
        2 => ('A', 'F'),
!       3 => (W.LC_A, W.LC_F));
  
     Hexadecimal_Digit_Set    : constant Wide_Character_Set :=
       (AF.Controlled with
        Hexadecimal_Digit_Ranges'Unrestricted_Access);
  
     Alphanumeric_Ranges      : aliased constant Wide_Character_Ranges :=
!      (1 => ('0',                   '9'),
        2 => ('A',                   'Z'),
        3 => (W.LC_A,                W.LC_Z),
        4 => (W.UC_A_Grave,          W.UC_O_Diaeresis),
        5 => (W.UC_O_Oblique_Stroke, W.LC_O_Diaeresis),
!       6 => (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis));
  
     Alphanumeric_Set         : constant Wide_Character_Set :=
       (AF.Controlled with
        Alphanumeric_Ranges'Unrestricted_Access);
  
     Special_Graphic_Ranges   : aliased constant Wide_Character_Ranges :=
!      (1 => (Wide_Space,            W.Solidus),
        2 => (W.Colon,               W.Commercial_At),
        3 => (W.Left_Square_Bracket, W.Grave),
        4 => (W.Left_Curly_Bracket,  W.Tilde),
        5 => (W.No_Break_Space,      W.Inverted_Question),
        6 => (W.Multiplication_Sign, W.Multiplication_Sign),
!       7 => (W.Division_Sign,       W.Division_Sign));
  
     Special_Graphic_Set      : constant Wide_Character_Set :=
       (AF.Controlled with
        Special_Graphic_Ranges'Unrestricted_Access);
  
     ISO_646_Ranges           : aliased constant Wide_Character_Ranges :=
!      (1 => (W.NUL, W.DEL));
  
     ISO_646_Set              : constant Wide_Character_Set :=
       (AF.Controlled with
        ISO_646_Ranges'Unrestricted_Access);
  
     Character_Ranges         : aliased constant Wide_Character_Ranges :=
!      (1 => (W.NUL, WC'Val (255)));
  
     Character_Set            : constant Wide_Character_Set :=
       (AF.Controlled with
        Character_Ranges'Unrestricted_Access);
  
     Lower_Case_Mapping : aliased constant Wide_Character_Mapping_Values :=
!      (Length => 56,
  
        Domain =>
          "ABCDEFGHIJKLMNOPQRSTUVWXYZ" &
--- 119,187 ----
        6 => (W.UC_Icelandic_Thorn,  W.UC_Icelandic_Thorn),
        7 => (W.LC_Icelandic_Thorn,  W.LC_Icelandic_Thorn),
        8 => (W.UC_Icelandic_Eth,    W.UC_Icelandic_Eth),
!       9 => (W.LC_Icelandic_Eth,    W.LC_Icelandic_Eth)];
  
     Basic_Set                : constant Wide_Character_Set :=
       (AF.Controlled with
        Basic_Ranges'Unrestricted_Access);
  
     Decimal_Digit_Ranges     : aliased constant Wide_Character_Ranges :=
!      [ ('0', '9')];
  
     Decimal_Digit_Set        : constant Wide_Character_Set :=
       (AF.Controlled with
        Decimal_Digit_Ranges'Unrestricted_Access);
  
     Hexadecimal_Digit_Ranges : aliased constant Wide_Character_Ranges :=
!      [1 => ('0', '9'),
        2 => ('A', 'F'),
!       3 => (W.LC_A, W.LC_F)];
  
     Hexadecimal_Digit_Set    : constant Wide_Character_Set :=
       (AF.Controlled with
        Hexadecimal_Digit_Ranges'Unrestricted_Access);
  
     Alphanumeric_Ranges      : aliased constant Wide_Character_Ranges :=
!      [1 => ('0',                   '9'),
        2 => ('A',                   'Z'),
        3 => (W.LC_A,                W.LC_Z),
        4 => (W.UC_A_Grave,          W.UC_O_Diaeresis),
        5 => (W.UC_O_Oblique_Stroke, W.LC_O_Diaeresis),
!       6 => (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis)];
  
     Alphanumeric_Set         : constant Wide_Character_Set :=
       (AF.Controlled with
        Alphanumeric_Ranges'Unrestricted_Access);
  
     Special_Graphic_Ranges   : aliased constant Wide_Character_Ranges :=
!      [1 => (Wide_Space,            W.Solidus),
        2 => (W.Colon,               W.Commercial_At),
        3 => (W.Left_Square_Bracket, W.Grave),
        4 => (W.Left_Curly_Bracket,  W.Tilde),
        5 => (W.No_Break_Space,      W.Inverted_Question),
        6 => (W.Multiplication_Sign, W.Multiplication_Sign),
!       7 => (W.Division_Sign,       W.Division_Sign)];
  
     Special_Graphic_Set      : constant Wide_Character_Set :=
       (AF.Controlled with
        Special_Graphic_Ranges'Unrestricted_Access);
  
     ISO_646_Ranges           : aliased constant Wide_Character_Ranges :=
!      [ (W.NUL, W.DEL)];
  
     ISO_646_Set              : constant Wide_Character_Set :=
       (AF.Controlled with
        ISO_646_Ranges'Unrestricted_Access);
  
     Character_Ranges         : aliased constant Wide_Character_Ranges :=
!      [ (W.NUL, WC'Val (255))];
  
     Character_Set            : constant Wide_Character_Set :=
       (AF.Controlled with
        Character_Ranges'Unrestricted_Access);
  
     Lower_Case_Mapping : aliased constant Wide_Character_Mapping_Values :=
!      [Length => 56,
  
        Domain =>
          "ABCDEFGHIJKLMNOPQRSTUVWXYZ" &
*************** private
*** 247,260 ****
           W.LC_U_Circumflex           &
           W.LC_U_Diaeresis            &
           W.LC_Y_Acute                &
!          W.LC_Icelandic_Thorn);
  
     Lower_Case_Map : constant Wide_Character_Mapping :=
       (AF.Controlled with
        Map => Lower_Case_Mapping'Unrestricted_Access);
  
     Upper_Case_Mapping : aliased constant Wide_Character_Mapping_Values :=
!      (Length => 56,
  
        Domain =>
          "abcdefghijklmnopqrstuvwxyz" &
--- 247,260 ----
           W.LC_U_Circumflex           &
           W.LC_U_Diaeresis            &
           W.LC_Y_Acute                &
!          W.LC_Icelandic_Thorn];
  
     Lower_Case_Map : constant Wide_Character_Mapping :=
       (AF.Controlled with
        Map => Lower_Case_Mapping'Unrestricted_Access);
  
     Upper_Case_Mapping : aliased constant Wide_Character_Mapping_Values :=
!      [Length => 56,
  
        Domain =>
          "abcdefghijklmnopqrstuvwxyz" &
*************** private
*** 320,333 ****
           W.UC_U_Circumflex           &
           W.UC_U_Diaeresis            &
           W.UC_Y_Acute                &
!          W.UC_Icelandic_Thorn);
  
     Upper_Case_Map : constant Wide_Character_Mapping :=
       (AF.Controlled with
        Upper_Case_Mapping'Unrestricted_Access);
  
     Basic_Mapping : aliased constant Wide_Character_Mapping_Values :=
!      (Length => 55,
  
        Domain =>
          W.UC_A_Grave          &
--- 320,333 ----
           W.UC_U_Circumflex           &
           W.UC_U_Diaeresis            &
           W.UC_Y_Acute                &
!          W.UC_Icelandic_Thorn];
  
     Upper_Case_Map : constant Wide_Character_Mapping :=
       (AF.Controlled with
        Upper_Case_Mapping'Unrestricted_Access);
  
     Basic_Mapping : aliased constant Wide_Character_Mapping_Values :=
!      [Length => 55,
  
        Domain =>
          W.UC_A_Grave          &
*************** private
*** 441,447 ****
          'u'        &  -- LC_U_Circumflex
          'u'        &  -- LC_U_Diaeresis
          'y'        &  -- LC_Y_Acute
!         'y');         -- LC_Y_Diaeresis
  
     Basic_Map : constant Wide_Character_Mapping :=
       (AF.Controlled with
--- 441,447 ----
          'u'        &  -- LC_U_Circumflex
          'u'        &  -- LC_U_Diaeresis
          'y'        &  -- LC_Y_Acute
!         'y'];         -- LC_Y_Diaeresis
  
     Basic_Map : constant Wide_Character_Mapping :=
       (AF.Controlled with
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-swunau.adb gcc-12.1.0/gcc/ada/libgnat/a-swunau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-swunau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-swunau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-swunau.ads gcc-12.1.0/gcc/ada/libgnat/a-swunau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-swunau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-swunau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-swunau__shared.adb gcc-12.1.0/gcc/ada/libgnat/a-swunau__shared.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-swunau__shared.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-swunau__shared.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-swuwha.adb gcc-12.1.0/gcc/ada/libgnat/a-swuwha.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-swuwha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-swuwha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-swuwti.adb gcc-12.1.0/gcc/ada/libgnat/a-swuwti.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-swuwti.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-swuwti.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-swuwti.ads gcc-12.1.0/gcc/ada/libgnat/a-swuwti.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-swuwti.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-swuwti.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-swuwti__shared.adb gcc-12.1.0/gcc/ada/libgnat/a-swuwti__shared.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-swuwti__shared.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-swuwti__shared.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-szbzha.adb gcc-12.1.0/gcc/ada/libgnat/a-szbzha.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-szbzha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-szbzha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-szmzco.ads gcc-12.1.0/gcc/ada/libgnat/a-szmzco.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-szmzco.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-szmzco.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** private
*** 66,117 ****
     subtype WC is Wide_Wide_Character;
  
     Control_Ranges           : aliased constant Wide_Wide_Character_Ranges :=
!      ((W.NUL, W.US),
!       (W.DEL, W.APC));
  
     Control_Set              : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Control_Ranges'Unrestricted_Access);
  
     Graphic_Ranges           : aliased constant Wide_Wide_Character_Ranges :=
!      ((W.Space,       W.Tilde),
!       (WC'Val (256), WC'Last));
  
     Graphic_Set              : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Graphic_Ranges'Unrestricted_Access);
  
     Letter_Ranges            : aliased constant Wide_Wide_Character_Ranges :=
!      (('A',                   'Z'),
!       (W.LC_A,                W.LC_Z),
!       (W.UC_A_Grave,          W.UC_O_Diaeresis),
!       (W.UC_O_Oblique_Stroke, W.LC_O_Diaeresis),
!       (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis));
  
     Letter_Set               : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Letter_Ranges'Unrestricted_Access);
  
     Lower_Ranges             : aliased constant Wide_Wide_Character_Ranges :=
!      (1 => (W.LC_A,                 W.LC_Z),
        2 => (W.LC_German_Sharp_S,   W.LC_O_Diaeresis),
!       3 => (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis));
  
     Lower_Set                : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Lower_Ranges'Unrestricted_Access);
  
     Upper_Ranges             : aliased constant Wide_Wide_Character_Ranges :=
!      (1 => ('A',                   'Z'),
        2 => (W.UC_A_Grave,          W.UC_O_Diaeresis),
!       3 => (W.UC_O_Oblique_Stroke, W.UC_Icelandic_Thorn));
  
     Upper_Set                : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Upper_Ranges'Unrestricted_Access);
  
     Basic_Ranges             : aliased constant Wide_Wide_Character_Ranges :=
!      (1 => ('A',                   'Z'),
        2 => (W.LC_A,                W.LC_Z),
        3 => (W.UC_AE_Diphthong,     W.UC_AE_Diphthong),
        4 => (W.LC_AE_Diphthong,     W.LC_AE_Diphthong),
--- 66,117 ----
     subtype WC is Wide_Wide_Character;
  
     Control_Ranges           : aliased constant Wide_Wide_Character_Ranges :=
!      [ (W.NUL, W.US),
!        (W.DEL, W.APC)];
  
     Control_Set              : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Control_Ranges'Unrestricted_Access);
  
     Graphic_Ranges           : aliased constant Wide_Wide_Character_Ranges :=
!      [ (W.Space,      W.Tilde),
!        (WC'Val (256), WC'Last)];
  
     Graphic_Set              : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Graphic_Ranges'Unrestricted_Access);
  
     Letter_Ranges            : aliased constant Wide_Wide_Character_Ranges :=
!      [ ('A',                  'Z'),
!        (W.LC_A,                W.LC_Z),
!        (W.UC_A_Grave,          W.UC_O_Diaeresis),
!        (W.UC_O_Oblique_Stroke, W.LC_O_Diaeresis),
!        (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis)];
  
     Letter_Set               : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Letter_Ranges'Unrestricted_Access);
  
     Lower_Ranges             : aliased constant Wide_Wide_Character_Ranges :=
!      [1 => (W.LC_A,                 W.LC_Z),
        2 => (W.LC_German_Sharp_S,   W.LC_O_Diaeresis),
!       3 => (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis)];
  
     Lower_Set                : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Lower_Ranges'Unrestricted_Access);
  
     Upper_Ranges             : aliased constant Wide_Wide_Character_Ranges :=
!      [1 => ('A',                   'Z'),
        2 => (W.UC_A_Grave,          W.UC_O_Diaeresis),
!       3 => (W.UC_O_Oblique_Stroke, W.UC_Icelandic_Thorn)];
  
     Upper_Set                : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Upper_Ranges'Unrestricted_Access);
  
     Basic_Ranges             : aliased constant Wide_Wide_Character_Ranges :=
!      [1 => ('A',                   'Z'),
        2 => (W.LC_A,                W.LC_Z),
        3 => (W.UC_AE_Diphthong,     W.UC_AE_Diphthong),
        4 => (W.LC_AE_Diphthong,     W.LC_AE_Diphthong),
*************** private
*** 119,187 ****
        6 => (W.UC_Icelandic_Thorn,  W.UC_Icelandic_Thorn),
        7 => (W.LC_Icelandic_Thorn,  W.LC_Icelandic_Thorn),
        8 => (W.UC_Icelandic_Eth,    W.UC_Icelandic_Eth),
!       9 => (W.LC_Icelandic_Eth,    W.LC_Icelandic_Eth));
  
     Basic_Set                : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Basic_Ranges'Unrestricted_Access);
  
     Decimal_Digit_Ranges     : aliased constant Wide_Wide_Character_Ranges :=
!      (1 => ('0', '9'));
  
     Decimal_Digit_Set        : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Decimal_Digit_Ranges'Unrestricted_Access);
  
     Hexadecimal_Digit_Ranges : aliased constant Wide_Wide_Character_Ranges :=
!      (1 => ('0', '9'),
        2 => ('A', 'F'),
!       3 => (W.LC_A, W.LC_F));
  
     Hexadecimal_Digit_Set    : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Hexadecimal_Digit_Ranges'Unrestricted_Access);
  
     Alphanumeric_Ranges      : aliased constant Wide_Wide_Character_Ranges :=
!      (1 => ('0',                   '9'),
        2 => ('A',                   'Z'),
        3 => (W.LC_A,                W.LC_Z),
        4 => (W.UC_A_Grave,          W.UC_O_Diaeresis),
        5 => (W.UC_O_Oblique_Stroke, W.LC_O_Diaeresis),
!       6 => (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis));
  
     Alphanumeric_Set         : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Alphanumeric_Ranges'Unrestricted_Access);
  
     Special_Graphic_Ranges   : aliased constant Wide_Wide_Character_Ranges :=
!      (1 => (Wide_Wide_Space,            W.Solidus),
        2 => (W.Colon,               W.Commercial_At),
        3 => (W.Left_Square_Bracket, W.Grave),
        4 => (W.Left_Curly_Bracket,  W.Tilde),
        5 => (W.No_Break_Space,      W.Inverted_Question),
        6 => (W.Multiplication_Sign, W.Multiplication_Sign),
!       7 => (W.Division_Sign,       W.Division_Sign));
  
     Special_Graphic_Set      : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Special_Graphic_Ranges'Unrestricted_Access);
  
     ISO_646_Ranges           : aliased constant Wide_Wide_Character_Ranges :=
!      (1 => (W.NUL, W.DEL));
  
     ISO_646_Set              : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        ISO_646_Ranges'Unrestricted_Access);
  
     Character_Ranges         : aliased constant Wide_Wide_Character_Ranges :=
!      (1 => (W.NUL, WC'Val (255)));
  
     Character_Set            : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Character_Ranges'Unrestricted_Access);
  
     Lower_Case_Mapping : aliased constant Wide_Wide_Character_Mapping_Values :=
!      (Length => 56,
  
        Domain =>
          "ABCDEFGHIJKLMNOPQRSTUVWXYZ" &
--- 119,187 ----
        6 => (W.UC_Icelandic_Thorn,  W.UC_Icelandic_Thorn),
        7 => (W.LC_Icelandic_Thorn,  W.LC_Icelandic_Thorn),
        8 => (W.UC_Icelandic_Eth,    W.UC_Icelandic_Eth),
!       9 => (W.LC_Icelandic_Eth,    W.LC_Icelandic_Eth)];
  
     Basic_Set                : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Basic_Ranges'Unrestricted_Access);
  
     Decimal_Digit_Ranges     : aliased constant Wide_Wide_Character_Ranges :=
!      [ ('0', '9')];
  
     Decimal_Digit_Set        : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Decimal_Digit_Ranges'Unrestricted_Access);
  
     Hexadecimal_Digit_Ranges : aliased constant Wide_Wide_Character_Ranges :=
!      [1 => ('0', '9'),
        2 => ('A', 'F'),
!       3 => (W.LC_A, W.LC_F)];
  
     Hexadecimal_Digit_Set    : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Hexadecimal_Digit_Ranges'Unrestricted_Access);
  
     Alphanumeric_Ranges      : aliased constant Wide_Wide_Character_Ranges :=
!      [1 => ('0',                   '9'),
        2 => ('A',                   'Z'),
        3 => (W.LC_A,                W.LC_Z),
        4 => (W.UC_A_Grave,          W.UC_O_Diaeresis),
        5 => (W.UC_O_Oblique_Stroke, W.LC_O_Diaeresis),
!       6 => (W.LC_O_Oblique_Stroke, W.LC_Y_Diaeresis)];
  
     Alphanumeric_Set         : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Alphanumeric_Ranges'Unrestricted_Access);
  
     Special_Graphic_Ranges   : aliased constant Wide_Wide_Character_Ranges :=
!      [1 => (Wide_Wide_Space,            W.Solidus),
        2 => (W.Colon,               W.Commercial_At),
        3 => (W.Left_Square_Bracket, W.Grave),
        4 => (W.Left_Curly_Bracket,  W.Tilde),
        5 => (W.No_Break_Space,      W.Inverted_Question),
        6 => (W.Multiplication_Sign, W.Multiplication_Sign),
!       7 => (W.Division_Sign,       W.Division_Sign)];
  
     Special_Graphic_Set      : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Special_Graphic_Ranges'Unrestricted_Access);
  
     ISO_646_Ranges           : aliased constant Wide_Wide_Character_Ranges :=
!      [ (W.NUL, W.DEL)];
  
     ISO_646_Set              : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        ISO_646_Ranges'Unrestricted_Access);
  
     Character_Ranges         : aliased constant Wide_Wide_Character_Ranges :=
!      [ (W.NUL, WC'Val (255))];
  
     Character_Set            : constant Wide_Wide_Character_Set :=
       (AF.Controlled with
        Character_Ranges'Unrestricted_Access);
  
     Lower_Case_Mapping : aliased constant Wide_Wide_Character_Mapping_Values :=
!      [Length => 56,
  
        Domain =>
          "ABCDEFGHIJKLMNOPQRSTUVWXYZ" &
*************** private
*** 247,260 ****
           W.LC_U_Circumflex           &
           W.LC_U_Diaeresis            &
           W.LC_Y_Acute                &
!          W.LC_Icelandic_Thorn);
  
     Lower_Case_Map : constant Wide_Wide_Character_Mapping :=
       (AF.Controlled with
        Map => Lower_Case_Mapping'Unrestricted_Access);
  
     Upper_Case_Mapping : aliased constant Wide_Wide_Character_Mapping_Values :=
!      (Length => 56,
  
        Domain =>
          "abcdefghijklmnopqrstuvwxyz" &
--- 247,260 ----
           W.LC_U_Circumflex           &
           W.LC_U_Diaeresis            &
           W.LC_Y_Acute                &
!          W.LC_Icelandic_Thorn];
  
     Lower_Case_Map : constant Wide_Wide_Character_Mapping :=
       (AF.Controlled with
        Map => Lower_Case_Mapping'Unrestricted_Access);
  
     Upper_Case_Mapping : aliased constant Wide_Wide_Character_Mapping_Values :=
!      [Length => 56,
  
        Domain =>
          "abcdefghijklmnopqrstuvwxyz" &
*************** private
*** 320,333 ****
           W.UC_U_Circumflex           &
           W.UC_U_Diaeresis            &
           W.UC_Y_Acute                &
!          W.UC_Icelandic_Thorn);
  
     Upper_Case_Map : constant Wide_Wide_Character_Mapping :=
       (AF.Controlled with
        Upper_Case_Mapping'Unrestricted_Access);
  
     Basic_Mapping : aliased constant Wide_Wide_Character_Mapping_Values :=
!      (Length => 55,
  
        Domain =>
          W.UC_A_Grave          &
--- 320,333 ----
           W.UC_U_Circumflex           &
           W.UC_U_Diaeresis            &
           W.UC_Y_Acute                &
!          W.UC_Icelandic_Thorn];
  
     Upper_Case_Map : constant Wide_Wide_Character_Mapping :=
       (AF.Controlled with
        Upper_Case_Mapping'Unrestricted_Access);
  
     Basic_Mapping : aliased constant Wide_Wide_Character_Mapping_Values :=
!      [Length => 55,
  
        Domain =>
          W.UC_A_Grave          &
*************** private
*** 441,447 ****
          'u'        &  -- LC_U_Circumflex
          'u'        &  -- LC_U_Diaeresis
          'y'        &  -- LC_Y_Acute
!         'y');         -- LC_Y_Diaeresis
  
     Basic_Map : constant Wide_Wide_Character_Mapping :=
       (AF.Controlled with
--- 441,447 ----
          'u'        &  -- LC_U_Circumflex
          'u'        &  -- LC_U_Diaeresis
          'y'        &  -- LC_Y_Acute
!         'y'];         -- LC_Y_Diaeresis
  
     Basic_Map : constant Wide_Wide_Character_Mapping :=
       (AF.Controlled with
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-szunau.adb gcc-12.1.0/gcc/ada/libgnat/a-szunau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-szunau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-szunau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-szunau.ads gcc-12.1.0/gcc/ada/libgnat/a-szunau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-szunau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-szunau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-szunau__shared.adb gcc-12.1.0/gcc/ada/libgnat/a-szunau__shared.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-szunau__shared.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-szunau__shared.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-szuzha.adb gcc-12.1.0/gcc/ada/libgnat/a-szuzha.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-szuzha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-szuzha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-szuzti.adb gcc-12.1.0/gcc/ada/libgnat/a-szuzti.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-szuzti.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-szuzti.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-szuzti.ads gcc-12.1.0/gcc/ada/libgnat/a-szuzti.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-szuzti.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-szuzti.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-szuzti__shared.adb gcc-12.1.0/gcc/ada/libgnat/a-szuzti__shared.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-szuzti__shared.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-szuzti__shared.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tags.adb gcc-12.1.0/gcc/ada/libgnat/a-tags.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tags.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tags.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Tags is
*** 1032,1038 ****
     -- Wide_Expanded_Name --
     ------------------------
  
!    WC_Encoding : Character;
     pragma Import (C, WC_Encoding, "__gl_wc_encoding");
     --  Encoding method for source, as exported by binder
  
--- 1032,1038 ----
     -- Wide_Expanded_Name --
     ------------------------
  
!    WC_Encoding : constant Character;
     pragma Import (C, WC_Encoding, "__gl_wc_encoding");
     --  Encoding method for source, as exported by binder
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tags.ads gcc-12.1.0/gcc/ada/libgnat/a-tags.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-tags.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tags.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-teioed.adb gcc-12.1.0/gcc/ada/libgnat/a-teioed.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-teioed.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-teioed.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Text_IO.Editing is
*** 279,291 ****
             or else Pic.Start_Currency < Pic.Radix_Position
           then
              Answer (Pic.Start_Currency .. Pic.End_Currency) :=
!                                                         (others => ' ');
              Answer (Pic.End_Currency - Currency_Symbol'Length + 1 ..
                      Pic.End_Currency) := Currency_Symbol;
  
           else
              Answer (Pic.Start_Currency .. Pic.End_Currency) :=
!                                                         (others => ' ');
              Answer (Pic.Start_Currency ..
                      Pic.Start_Currency + Currency_Symbol'Length - 1) :=
                                                          Currency_Symbol;
--- 279,291 ----
             or else Pic.Start_Currency < Pic.Radix_Position
           then
              Answer (Pic.Start_Currency .. Pic.End_Currency) :=
!                                                         [others => ' '];
              Answer (Pic.End_Currency - Currency_Symbol'Length + 1 ..
                      Pic.End_Currency) := Currency_Symbol;
  
           else
              Answer (Pic.Start_Currency .. Pic.End_Currency) :=
!                                                         [others => ' '];
              Answer (Pic.Start_Currency ..
                      Pic.Start_Currency + Currency_Symbol'Length - 1) :=
                                                          Currency_Symbol;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-teioed.ads gcc-12.1.0/gcc/ada/libgnat/a-teioed.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-teioed.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-teioed.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-textio.adb gcc-12.1.0/gcc/ada/libgnat/a-textio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-textio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-textio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** pragma Elaborate_All (System.File_IO);
*** 44,49 ****
--- 44,50 ----
  --  Needed because of calls to Chain_File in package body elaboration
  
  package body Ada.Text_IO with
+   SPARK_Mode => Off,
    Refined_State => (File_System => (Standard_In,
                                      Standard_Out,
                                      Standard_Err,
*************** is
*** 66,72 ****
  
     use type System.CRTL.size_t;
  
!    WC_Encoding : Character;
     pragma Import (C, WC_Encoding, "__gl_wc_encoding");
     --  Default wide character encoding
  
--- 67,73 ----
  
     use type System.CRTL.size_t;
  
!    WC_Encoding : constant Character;
     pragma Import (C, WC_Encoding, "__gl_wc_encoding");
     --  Default wide character encoding
  
*************** is
*** 171,185 ****
        --  is required (RM A.10.3(23)) but it seems reasonable, and besides
        --  ACVC test CE3208A expects this behavior.
  
!       if File_Type (File) = Current_In then
           Current_In := null;
!       elsif File_Type (File) = Current_Out then
           Current_Out := null;
!       elsif File_Type (File) = Current_Err then
           Current_Err := null;
        end if;
  
!       Terminate_Line (File_Type (File));
     end AFCB_Close;
  
     ---------------
--- 172,186 ----
        --  is required (RM A.10.3(23)) but it seems reasonable, and besides
        --  ACVC test CE3208A expects this behavior.
  
!       if File = Current_In then
           Current_In := null;
!       elsif File = Current_Out then
           Current_Out := null;
!       elsif File = Current_Err then
           Current_Err := null;
        end if;
  
!       Terminate_Line (File.all'Access);
     end AFCB_Close;
  
     ---------------
*************** is
*** 187,196 ****
     ---------------
  
     procedure AFCB_Free (File : not null access Text_AFCB) is
!       type FCB_Ptr is access all Text_AFCB;
!       FT : FCB_Ptr := FCB_Ptr (File);
  
!       procedure Free is new Ada.Unchecked_Deallocation (Text_AFCB, FCB_Ptr);
  
     begin
        Free (FT);
--- 188,196 ----
     ---------------
  
     procedure AFCB_Free (File : not null access Text_AFCB) is
!       FT : File_Type := File.all'Access;
  
!       procedure Free is new Ada.Unchecked_Deallocation (Text_AFCB, File_Type);
  
     begin
        Free (FT);
*************** is
*** 403,409 ****
     -----------------
  
     function End_Of_Page (File : File_Type) return Boolean is
!       ch  : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
--- 403,409 ----
     -----------------
  
     function End_Of_Page (File : File_Type) return Boolean is
!       ch : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
*************** is
*** 598,604 ****
       (File : File_Type;
        Item : out Character)
     is
!       ch          : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
--- 598,604 ----
       (File : File_Type;
        Item : out Character)
     is
!       ch : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-textio.ads gcc-12.1.0/gcc/ada/libgnat/a-textio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-textio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-textio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** with System.File_Control_Block;
*** 56,63 ****
  with System.WCh_Con;
  
  package Ada.Text_IO with
!   Abstract_State    => (File_System),
!   Initializes       => (File_System),
    Initial_Condition => Line_Length = 0 and Page_Length = 0
  is
     pragma Elaborate_Body;
--- 56,64 ----
  with System.WCh_Con;
  
  package Ada.Text_IO with
!   SPARK_Mode,
!   Abstract_State    => File_System,
!   Initializes       => File_System,
    Initial_Condition => Line_Length = 0 and Page_Length = 0
  is
     pragma Elaborate_Body;
*************** is
*** 85,93 ****
     --  Line and page length
  
     subtype Field is Integer range 0 .. 255;
-    --  Note: if for any reason, there is a need to increase this value, then it
-    --  will be necessary to change the corresponding value in System.Img_Real
-    --  in file s-imgrea.adb.
  
     subtype Number_Base is Integer range 2 .. 16;
  
--- 86,91 ----
*************** is
*** 550,555 ****
--- 548,554 ----
     Layout_Error : exception renames IO_Exceptions.Layout_Error;
  
  private
+    pragma SPARK_Mode (Off);
  
     --  The following procedures have a File_Type formal of mode IN OUT because
     --  they may close the original file. The Close operation may raise an
*************** private
*** 718,724 ****
     --  Returns the system-specific character indicating the end of a text file.
     --  This is exported for use by child packages such as Enumeration_Aux to
     --  eliminate their needing to depend directly on Interfaces.C_Streams,
!    --  which is not available in certain target environments (such as AAMP).
  
     procedure Initialize_Standard_Files;
     --  Initializes the file control blocks for the standard files. Called from
--- 717,723 ----
     --  Returns the system-specific character indicating the end of a text file.
     --  This is exported for use by child packages such as Enumeration_Aux to
     --  eliminate their needing to depend directly on Interfaces.C_Streams,
!    --  which might not be available in certain target environments.
  
     procedure Initialize_Standard_Files;
     --  Initializes the file control blocks for the standard files. Called from
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tiboio.adb gcc-12.1.0/gcc/ada/libgnat/a-tiboio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tiboio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tiboio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with Ada.Text_IO; use Ada.Text_IO;
  with Ada.Unchecked_Deallocation;
  
  package body Ada.Text_IO.Bounded_IO is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ticoau.adb gcc-12.1.0/gcc/ada/libgnat/a-ticoau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ticoau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ticoau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,38 ****
  
  with Ada.Text_IO.Generic_Aux; use Ada.Text_IO.Generic_Aux;
  
- with System.Img_Real; use System.Img_Real;
- 
  package body Ada.Text_IO.Complex_Aux is
  
     ---------
--- 31,36 ----
*************** package body Ada.Text_IO.Complex_Aux is
*** 171,179 ****
        --  Both parts are initially converted with a Fore of 0
  
        Rptr := 0;
!       Set_Image_Real (Long_Long_Float (ItemR), R_String, Rptr, 0, Aft, Exp);
        Iptr := 0;
!       Set_Image_Real (Long_Long_Float (ItemI), I_String, Iptr, 0, Aft, Exp);
  
        --  Check room for both parts plus parens plus comma (RM G.1.3(34))
  
--- 169,177 ----
        --  Both parts are initially converted with a Fore of 0
  
        Rptr := 0;
!       Aux.Set_Image (ItemR, R_String, Rptr, 0, Aft, Exp);
        Iptr := 0;
!       Aux.Set_Image (ItemI, I_String, Iptr, 0, Aft, Exp);
  
        --  Check room for both parts plus parens plus comma (RM G.1.3(34))
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ticoau.ads gcc-12.1.0/gcc/ada/libgnat/a-ticoau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ticoau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ticoau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** private generic
*** 42,48 ****
  
     type Num is digits <>;
  
!    with package Aux is new Ada.Text_IO.Float_Aux (Num, <>);
  
  package Ada.Text_IO.Complex_Aux is
  
--- 42,48 ----
  
     type Num is digits <>;
  
!    with package Aux is new Ada.Text_IO.Float_Aux (Num, <>, <>);
  
  package Ada.Text_IO.Complex_Aux is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ticoio.adb gcc-12.1.0/gcc/ada/libgnat/a-ticoio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ticoio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ticoio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,36 ****
--- 31,39 ----
  
  with Ada.Text_IO.Complex_Aux;
  with Ada.Text_IO.Float_Aux;
+ with System.Img_Flt;  use System.Img_Flt;
+ with System.Img_LFlt; use System.Img_LFlt;
+ with System.Img_LLF;  use System.Img_LLF;
  with System.Val_Flt;  use System.Val_Flt;
  with System.Val_LFlt; use System.Val_LFlt;
  with System.Val_LLF;  use System.Val_LLF;
*************** package body Ada.Text_IO.Complex_IO is
*** 40,61 ****
     use Complex_Types;
  
     package Scalar_Float is new
!       Ada.Text_IO.Float_Aux (Float, Scan_Float);
  
     package Scalar_Long_Float is new
!       Ada.Text_IO.Float_Aux (Long_Float, Scan_Long_Float);
  
     package Scalar_Long_Long_Float is new
!       Ada.Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float);
  
     package Aux_Float is new
!       Ada.Text_IO.Complex_Aux (Float, Scalar_Float);
  
     package Aux_Long_Float is new
!       Ada.Text_IO.Complex_Aux (Long_Float, Scalar_Long_Float);
  
     package Aux_Long_Long_Float is new
!       Ada.Text_IO.Complex_Aux (Long_Long_Float, Scalar_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Float is OK, where type Long_Float is OK and where type Long_Long_Float
--- 43,66 ----
     use Complex_Types;
  
     package Scalar_Float is new
!      Ada.Text_IO.Float_Aux (Float, Scan_Float, Set_Image_Float);
  
     package Scalar_Long_Float is new
!      Ada.Text_IO.Float_Aux
!        (Long_Float, Scan_Long_Float, Set_Image_Long_Float);
  
     package Scalar_Long_Long_Float is new
!      Ada.Text_IO.Float_Aux
!        (Long_Long_Float, Scan_Long_Long_Float, Set_Image_Long_Long_Float);
  
     package Aux_Float is new
!      Ada.Text_IO.Complex_Aux (Float, Scalar_Float);
  
     package Aux_Long_Float is new
!      Ada.Text_IO.Complex_Aux (Long_Float, Scalar_Long_Float);
  
     package Aux_Long_Long_Float is new
!      Ada.Text_IO.Complex_Aux (Long_Long_Float, Scalar_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Float is OK, where type Long_Float is OK and where type Long_Long_Float
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ticoio.ads gcc-12.1.0/gcc/ada/libgnat/a-ticoio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ticoio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ticoio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tideau.adb gcc-12.1.0/gcc/ada/libgnat/a-tideau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tideau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tideau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tideau.ads gcc-12.1.0/gcc/ada/libgnat/a-tideau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-tideau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tideau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tideio.adb gcc-12.1.0/gcc/ada/libgnat/a-tideio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tideio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tideio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tideio.ads gcc-12.1.0/gcc/ada/libgnat/a-tideio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-tideio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tideio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tideio__128.adb gcc-12.1.0/gcc/ada/libgnat/a-tideio__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tideio__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tideio__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tienau.adb gcc-12.1.0/gcc/ada/libgnat/a-tienau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tienau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tienau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Text_IO.Enumeration_Aux
*** 213,219 ****
        Start : out Natural;
        Stop  : out Natural)
     is
!       C  : Character;
  
     --  Processing for Scan_Enum_Lit
  
--- 213,219 ----
        Start : out Natural;
        Stop  : out Natural)
     is
!       C : Character;
  
     --  Processing for Scan_Enum_Lit
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tienau.ads gcc-12.1.0/gcc/ada/libgnat/a-tienau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-tienau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tienau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tienio.adb gcc-12.1.0/gcc/ada/libgnat/a-tienio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tienio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tienio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tifiau.adb gcc-12.1.0/gcc/ada/libgnat/a-tifiau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tifiau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tifiau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tifiau.ads gcc-12.1.0/gcc/ada/libgnat/a-tifiau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-tifiau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tifiau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tifiio.adb gcc-12.1.0/gcc/ada/libgnat/a-tifiio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tifiio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tifiio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** with Ada.Text_IO.Fixed_Aux;
*** 158,173 ****
  with Ada.Text_IO.Float_Aux;
  with System.Img_Fixed_32; use System.Img_Fixed_32;
  with System.Img_Fixed_64; use System.Img_Fixed_64;
  with System.Val_Fixed_32; use System.Val_Fixed_32;
  with System.Val_Fixed_64; use System.Val_Fixed_64;
! with System.Val_LLF;      use System.Val_LLF;
  
  package body Ada.Text_IO.Fixed_IO with SPARK_Mode => Off is
  
     --  Note: we still use the floating-point I/O routines for types whose small
     --  is not the ratio of two sufficiently small integers. This will result in
     --  inaccuracies for fixed point types that require more precision than is
!    --  available in Long_Long_Float.
  
     subtype Int32 is Interfaces.Integer_32; use type Int32;
     subtype Int64 is Interfaces.Integer_64; use type Int64;
--- 158,174 ----
  with Ada.Text_IO.Float_Aux;
  with System.Img_Fixed_32; use System.Img_Fixed_32;
  with System.Img_Fixed_64; use System.Img_Fixed_64;
+ with System.Img_LFlt;     use System.Img_LFlt;
  with System.Val_Fixed_32; use System.Val_Fixed_32;
  with System.Val_Fixed_64; use System.Val_Fixed_64;
! with System.Val_LFlt;     use System.Val_LFlt;
  
  package body Ada.Text_IO.Fixed_IO with SPARK_Mode => Off is
  
     --  Note: we still use the floating-point I/O routines for types whose small
     --  is not the ratio of two sufficiently small integers. This will result in
     --  inaccuracies for fixed point types that require more precision than is
!    --  available in Long_Float.
  
     subtype Int32 is Interfaces.Integer_32; use type Int32;
     subtype Int64 is Interfaces.Integer_64; use type Int64;
*************** package body Ada.Text_IO.Fixed_IO with S
*** 178,185 ****
     package Aux64 is new
       Ada.Text_IO.Fixed_Aux (Int64, Scan_Fixed64, Set_Image_Fixed64);
  
!    package Aux_Long_Long_Float is new
!      Ada.Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Int32 is OK and where type Int64 is OK. These boolean constants are used
--- 179,186 ----
     package Aux64 is new
       Ada.Text_IO.Fixed_Aux (Int64, Scan_Fixed64, Set_Image_Fixed64);
  
!    package Aux_Long_Float is new
!      Ada.Text_IO.Float_Aux (Long_Float, Scan_Long_Float, Set_Image_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Int32 is OK and where type Int64 is OK. These boolean constants are used
*************** package body Ada.Text_IO.Fixed_IO with S
*** 283,289 ****
                                 -Num'Small_Numerator,
                                 -Num'Small_Denominator));
        else
!          Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width);
        end if;
  
     exception
--- 284,290 ----
                                 -Num'Small_Numerator,
                                 -Num'Small_Denominator));
        else
!          Aux_Long_Float.Get (File, Long_Float (Item), Width);
        end if;
  
     exception
*************** package body Ada.Text_IO.Fixed_IO with S
*** 317,323 ****
                                  -Num'Small_Numerator,
                                  -Num'Small_Denominator));
        else
!          Aux_Long_Long_Float.Gets (From, Long_Long_Float (Item), Last);
        end if;
  
     exception
--- 318,324 ----
                                  -Num'Small_Numerator,
                                  -Num'Small_Denominator));
        else
!          Aux_Long_Float.Gets (From, Long_Float (Item), Last);
        end if;
  
     exception
*************** package body Ada.Text_IO.Fixed_IO with S
*** 345,352 ****
                      -Num'Small_Numerator, -Num'Small_Denominator,
                      For0, Num'Aft);
        else
!          Aux_Long_Long_Float.Put
!            (File, Long_Long_Float (Item), Fore, Aft, Exp);
        end if;
     end Put;
  
--- 346,352 ----
                      -Num'Small_Numerator, -Num'Small_Denominator,
                      For0, Num'Aft);
        else
!          Aux_Long_Float.Put (File, Long_Float (Item), Fore, Aft, Exp);
        end if;
     end Put;
  
*************** package body Ada.Text_IO.Fixed_IO with S
*** 376,382 ****
                       -Num'Small_Numerator, -Num'Small_Denominator,
                       For0, Num'Aft);
        else
!          Aux_Long_Long_Float.Puts (To, Long_Long_Float (Item), Aft, Exp);
        end if;
     end Put;
  
--- 376,382 ----
                       -Num'Small_Numerator, -Num'Small_Denominator,
                       For0, Num'Aft);
        else
!          Aux_Long_Float.Puts (To, Long_Float (Item), Aft, Exp);
        end if;
     end Put;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tifiio__128.adb gcc-12.1.0/gcc/ada/libgnat/a-tifiio__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tifiio__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tifiio__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
*************** with Ada.Text_IO.Float_Aux;
*** 159,175 ****
  with System.Img_Fixed_32;  use System.Img_Fixed_32;
  with System.Img_Fixed_64;  use System.Img_Fixed_64;
  with System.Img_Fixed_128; use System.Img_Fixed_128;
  with System.Val_Fixed_32;  use System.Val_Fixed_32;
  with System.Val_Fixed_64;  use System.Val_Fixed_64;
  with System.Val_Fixed_128; use System.Val_Fixed_128;
! with System.Val_LLF;       use System.Val_LLF;
  
  package body Ada.Text_IO.Fixed_IO with SPARK_Mode => Off is
  
     --  Note: we still use the floating-point I/O routines for types whose small
     --  is not the ratio of two sufficiently small integers. This will result in
     --  inaccuracies for fixed point types that require more precision than is
!    --  available in Long_Long_Float.
  
     subtype Int32  is Interfaces.Integer_32;  use type Int32;
     subtype Int64  is Interfaces.Integer_64;  use type Int64;
--- 159,176 ----
  with System.Img_Fixed_32;  use System.Img_Fixed_32;
  with System.Img_Fixed_64;  use System.Img_Fixed_64;
  with System.Img_Fixed_128; use System.Img_Fixed_128;
+ with System.Img_LFlt;      use System.Img_LFlt;
  with System.Val_Fixed_32;  use System.Val_Fixed_32;
  with System.Val_Fixed_64;  use System.Val_Fixed_64;
  with System.Val_Fixed_128; use System.Val_Fixed_128;
! with System.Val_LFlt;      use System.Val_LFlt;
  
  package body Ada.Text_IO.Fixed_IO with SPARK_Mode => Off is
  
     --  Note: we still use the floating-point I/O routines for types whose small
     --  is not the ratio of two sufficiently small integers. This will result in
     --  inaccuracies for fixed point types that require more precision than is
!    --  available in Long_Float.
  
     subtype Int32  is Interfaces.Integer_32;  use type Int32;
     subtype Int64  is Interfaces.Integer_64;  use type Int64;
*************** package body Ada.Text_IO.Fixed_IO with S
*** 184,191 ****
     package Aux128 is new
       Ada.Text_IO.Fixed_Aux (Int128, Scan_Fixed128, Set_Image_Fixed128);
  
!    package Aux_Long_Long_Float is new
!      Ada.Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Int32 is OK, where type Int64 is OK and where type Int128 is OK. These
--- 185,192 ----
     package Aux128 is new
       Ada.Text_IO.Fixed_Aux (Int128, Scan_Fixed128, Set_Image_Fixed128);
  
!    package Aux_Long_Float is new
!      Ada.Text_IO.Float_Aux (Long_Float, Scan_Long_Float, Set_Image_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Int32 is OK, where type Int64 is OK and where type Int128 is OK. These
*************** package body Ada.Text_IO.Fixed_IO with S
*** 323,329 ****
                                  -Num'Small_Numerator,
                                  -Num'Small_Denominator));
        else
!          Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width);
        end if;
  
     exception
--- 324,330 ----
                                  -Num'Small_Numerator,
                                  -Num'Small_Denominator));
        else
!          Aux_Long_Float.Get (File, Long_Float (Item), Width);
        end if;
  
     exception
*************** package body Ada.Text_IO.Fixed_IO with S
*** 362,368 ****
                                   -Num'Small_Numerator,
                                   -Num'Small_Denominator));
        else
!          Aux_Long_Long_Float.Gets (From, Long_Long_Float (Item), Last);
        end if;
  
     exception
--- 363,369 ----
                                   -Num'Small_Numerator,
                                   -Num'Small_Denominator));
        else
!          Aux_Long_Float.Gets (From, Long_Float (Item), Last);
        end if;
  
     exception
*************** package body Ada.Text_IO.Fixed_IO with S
*** 394,401 ****
                       -Num'Small_Numerator, -Num'Small_Denominator,
                       For0, Num'Aft);
        else
!          Aux_Long_Long_Float.Put
!            (File, Long_Long_Float (Item), Fore, Aft, Exp);
        end if;
     end Put;
  
--- 395,401 ----
                       -Num'Small_Numerator, -Num'Small_Denominator,
                       For0, Num'Aft);
        else
!          Aux_Long_Float.Put (File, Long_Float (Item), Fore, Aft, Exp);
        end if;
     end Put;
  
*************** package body Ada.Text_IO.Fixed_IO with S
*** 429,435 ****
                        -Num'Small_Numerator, -Num'Small_Denominator,
                        For0, Num'Aft);
        else
!          Aux_Long_Long_Float.Puts (To, Long_Long_Float (Item), Aft, Exp);
        end if;
     end Put;
  
--- 429,435 ----
                        -Num'Small_Numerator, -Num'Small_Denominator,
                        For0, Num'Aft);
        else
!          Aux_Long_Float.Puts (To, Long_Float (Item), Aft, Exp);
        end if;
     end Put;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tiflau.adb gcc-12.1.0/gcc/ada/libgnat/a-tiflau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tiflau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tiflau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,37 ****
  
  with Ada.Text_IO.Generic_Aux; use Ada.Text_IO.Generic_Aux;
  
! with System.Img_Real; use System.Img_Real;
  
  package body Ada.Text_IO.Float_Aux is
  
--- 31,37 ----
  
  with Ada.Text_IO.Generic_Aux; use Ada.Text_IO.Generic_Aux;
  
! with System.Img_Util; use System.Img_Util;
  
  package body Ada.Text_IO.Float_Aux is
  
*************** package body Ada.Text_IO.Float_Aux is
*** 96,102 ****
        Ptr : Natural := 0;
  
     begin
!       Set_Image_Real (Long_Long_Float (Item), Buf, Ptr, Fore, Aft, Exp);
        Put_Item (File, Buf (1 .. Ptr));
     end Put;
  
--- 96,102 ----
        Ptr : Natural := 0;
  
     begin
!       Set_Image (Item, Buf, Ptr, Fore, Aft, Exp);
        Put_Item (File, Buf (1 .. Ptr));
     end Put;
  
*************** package body Ada.Text_IO.Float_Aux is
*** 114,121 ****
        Ptr : Natural := 0;
  
     begin
!       Set_Image_Real
!         (Long_Long_Float (Item), Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp);
  
        if Ptr > To'Length then
           raise Layout_Error;
--- 114,120 ----
        Ptr : Natural := 0;
  
     begin
!       Set_Image (Item, Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp);
  
        if Ptr > To'Length then
           raise Layout_Error;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tiflau.ads gcc-12.1.0/gcc/ada/libgnat/a-tiflau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-tiflau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tiflau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** private generic
*** 45,50 ****
--- 45,58 ----
        Ptr : not null access Integer;
        Max : Integer) return Num;
  
+    with procedure Set_Image
+      (V    : Num;
+       S    : in out String;
+       P    : in out Natural;
+       Fore : Natural;
+       Aft  : Natural;
+       Exp  : Natural);
+ 
  package Ada.Text_IO.Float_Aux is
  
     procedure Get
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tiflio.adb gcc-12.1.0/gcc/ada/libgnat/a-tiflio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tiflio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tiflio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 30,35 ****
--- 30,38 ----
  ------------------------------------------------------------------------------
  
  with Ada.Text_IO.Float_Aux;
+ with System.Img_Flt;  use System.Img_Flt;
+ with System.Img_LFlt; use System.Img_LFlt;
+ with System.Img_LLF;  use System.Img_LLF;
  with System.Val_Flt;  use System.Val_Flt;
  with System.Val_LFlt; use System.Val_LFlt;
  with System.Val_LLF;  use System.Val_LLF;
*************** with System.Val_LLF;  use System.Val_LLF
*** 37,49 ****
  package body Ada.Text_IO.Float_IO with SPARK_Mode => Off is
  
     package Aux_Float is new
!       Ada.Text_IO.Float_Aux (Float, Scan_Float);
  
     package Aux_Long_Float is new
!       Ada.Text_IO.Float_Aux (Long_Float, Scan_Long_Float);
  
     package Aux_Long_Long_Float is new
!       Ada.Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Float is OK, where type Long_Float is OK and where type Long_Long_Float
--- 40,54 ----
  package body Ada.Text_IO.Float_IO with SPARK_Mode => Off is
  
     package Aux_Float is new
!      Ada.Text_IO.Float_Aux (Float, Scan_Float, Set_Image_Float);
  
     package Aux_Long_Float is new
!      Ada.Text_IO.Float_Aux
!        (Long_Float, Scan_Long_Float, Set_Image_Long_Float);
  
     package Aux_Long_Long_Float is new
!      Ada.Text_IO.Float_Aux
!        (Long_Long_Float, Scan_Long_Long_Float, Set_Image_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Float is OK, where type Long_Float is OK and where type Long_Long_Float
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tiflio.ads gcc-12.1.0/gcc/ada/libgnat/a-tiflio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-tiflio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tiflio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tigeau.adb gcc-12.1.0/gcc/ada/libgnat/a-tigeau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tigeau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tigeau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Text_IO.Generic_Aux is
*** 317,323 ****
        Ptr    : in out Integer)
     is
        Junk : Boolean;
-       pragma Unreferenced (Junk);
     begin
        Load_Extended_Digits (File, Buf, Ptr, Junk);
     end Load_Extended_Digits;
--- 317,322 ----
*************** package body Ada.Text_IO.Generic_Aux is
*** 385,391 ****
        Buf  : out String;
        Ptr  : in out Natural)
     is
!       Loaded   : Boolean;
  
     begin
        --  Skip initial blanks, and load possible sign
--- 384,390 ----
        Buf  : out String;
        Ptr  : in out Natural)
     is
!       Loaded : Boolean;
  
     begin
        --  Skip initial blanks, and load possible sign
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tigeau.ads gcc-12.1.0/gcc/ada/libgnat/a-tigeau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-tigeau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tigeau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tigeli.adb gcc-12.1.0/gcc/ada/libgnat/a-tigeli.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tigeli.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tigeli.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tiinau.adb gcc-12.1.0/gcc/ada/libgnat/a-tiinau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tiinau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tiinau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Text_IO.Integer_Aux is
*** 54,60 ****
           Load_Integer (File, Buf, Stop);
        end if;
  
!       Item := Scan (Buf, Ptr'Access, Stop);
        Check_End_Of_Field (Buf, Stop, Ptr, Width);
     end Get;
  
--- 54,60 ----
           Load_Integer (File, Buf, Stop);
        end if;
  
!       Scan (Buf, Ptr'Access, Stop, Item);
        Check_End_Of_Field (Buf, Stop, Ptr, Width);
     end Get;
  
*************** package body Ada.Text_IO.Integer_Aux is
*** 71,77 ****
  
     begin
        String_Skip (From, Pos);
!       Item := Scan (From, Pos'Access, From'Last);
        Last := Pos - 1;
  
     exception
--- 71,77 ----
  
     begin
        String_Skip (From, Pos);
!       Scan (From, Pos'Access, From'Last, Item);
        Last := Pos - 1;
  
     exception
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tiinau.ads gcc-12.1.0/gcc/ada/libgnat/a-tiinau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-tiinau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tiinau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 38,45 ****
  private generic
     type Num is (<>);
  
!    with function Scan
!      (Str : String; Ptr : not null access Integer; Max : Integer) return Num;
     with procedure Set_Image
       (V : Num; S : in out String; P : in out Natural);
     with procedure Set_Image_Width
--- 38,48 ----
  private generic
     type Num is (<>);
  
!    with procedure Scan
!      (Str : String;
!       Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Num);
     with procedure Set_Image
       (V : Num; S : in out String; P : in out Natural);
     with procedure Set_Image_Width
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tiinio.adb gcc-12.1.0/gcc/ada/libgnat/a-tiinio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tiinio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tiinio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tiinio.ads gcc-12.1.0/gcc/ada/libgnat/a-tiinio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-tiinio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tiinio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tiinio__128.adb gcc-12.1.0/gcc/ada/libgnat/a-tiinio__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tiinio__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tiinio__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-timoio.adb gcc-12.1.0/gcc/ada/libgnat/a-timoio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-timoio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-timoio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-timoio.ads gcc-12.1.0/gcc/ada/libgnat/a-timoio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-timoio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-timoio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1993-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1993-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-timoio__128.adb gcc-12.1.0/gcc/ada/libgnat/a-timoio__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-timoio__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-timoio__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tiocst.adb gcc-12.1.0/gcc/ada/libgnat/a-tiocst.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tiocst.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tiocst.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tiocst.ads gcc-12.1.0/gcc/ada/libgnat/a-tiocst.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-tiocst.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tiocst.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tirsfi.adb gcc-12.1.0/gcc/ada/libgnat/a-tirsfi.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-tirsfi.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tirsfi.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-tirsfi.ads gcc-12.1.0/gcc/ada/libgnat/a-tirsfi.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-tirsfi.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-tirsfi.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-titest.adb gcc-12.1.0/gcc/ada/libgnat/a-titest.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-titest.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-titest.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-uncdea.ads gcc-12.1.0/gcc/ada/libgnat/a-uncdea.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-uncdea.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-uncdea.ads	Fri May  6 07:30:56 2022
*************** generic
*** 17,23 ****
     type Object (<>) is limited private;
     type Name is access Object;
  
! procedure Ada.Unchecked_Deallocation (X : in out Name);
  pragma Preelaborate (Unchecked_Deallocation);
  
  pragma Import (Intrinsic, Ada.Unchecked_Deallocation);
--- 17,26 ----
     type Object (<>) is limited private;
     type Name is access Object;
  
! procedure Ada.Unchecked_Deallocation (X : in out Name) with
!   Depends => (X    => null,  --  X on exit does not depend on its input value
!               null => X),    --  X's input value has no effect
!   Post => X = null;          --  X's output value is null
  pragma Preelaborate (Unchecked_Deallocation);
  
  pragma Import (Intrinsic, Ada.Unchecked_Deallocation);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-undesu.adb gcc-12.1.0/gcc/ada/libgnat/a-undesu.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-undesu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-undesu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wichha.adb gcc-12.1.0/gcc/ada/libgnat/a-wichha.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wichha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wichha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wichun.adb gcc-12.1.0/gcc/ada/libgnat/a-wichun.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wichun.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wichun.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wichun.ads gcc-12.1.0/gcc/ada/libgnat/a-wichun.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-wichun.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wichun.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-witeio.adb gcc-12.1.0/gcc/ada/libgnat/a-witeio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-witeio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-witeio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Wide_Text_IO is
*** 55,61 ****
  
     use type System.CRTL.size_t;
  
!    WC_Encoding : Character;
     pragma Import (C, WC_Encoding, "__gl_wc_encoding");
     --  Default wide character encoding
  
--- 55,61 ----
  
     use type System.CRTL.size_t;
  
!    WC_Encoding : constant Character;
     pragma Import (C, WC_Encoding, "__gl_wc_encoding");
     --  Default wide character encoding
  
*************** package body Ada.Wide_Text_IO is
*** 136,150 ****
        --  is required (RM A.10.3(23)) but it seems reasonable, and besides
        --  ACVC test CE3208A expects this behavior.
  
!       if File_Type (File) = Current_In then
           Current_In := null;
!       elsif File_Type (File) = Current_Out then
           Current_Out := null;
!       elsif File_Type (File) = Current_Err then
           Current_Err := null;
        end if;
  
!       Terminate_Line (File_Type (File));
     end AFCB_Close;
  
     ---------------
--- 136,150 ----
        --  is required (RM A.10.3(23)) but it seems reasonable, and besides
        --  ACVC test CE3208A expects this behavior.
  
!       if File = Current_In then
           Current_In := null;
!       elsif File = Current_Out then
           Current_Out := null;
!       elsif File = Current_Err then
           Current_Err := null;
        end if;
  
!       Terminate_Line (File.all'Access);
     end AFCB_Close;
  
     ---------------
*************** package body Ada.Wide_Text_IO is
*** 152,162 ****
     ---------------
  
     procedure AFCB_Free (File : not null access Wide_Text_AFCB) is
!       type FCB_Ptr is access all Wide_Text_AFCB;
!       FT : FCB_Ptr := FCB_Ptr (File);
  
        procedure Free is
!         new Ada.Unchecked_Deallocation (Wide_Text_AFCB, FCB_Ptr);
  
     begin
        Free (FT);
--- 152,161 ----
     ---------------
  
     procedure AFCB_Free (File : not null access Wide_Text_AFCB) is
!       FT : File_Type := File.all'Access;
  
        procedure Free is
!         new Ada.Unchecked_Deallocation (Wide_Text_AFCB, File_Type);
  
     begin
        Free (FT);
*************** package body Ada.Wide_Text_IO is
*** 275,281 ****
     -----------------
  
     function End_Of_File (File : File_Type) return Boolean is
!       ch  : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
--- 274,280 ----
     -----------------
  
     function End_Of_File (File : File_Type) return Boolean is
!       ch : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
*************** package body Ada.Wide_Text_IO is
*** 369,375 ****
     -----------------
  
     function End_Of_Page (File : File_Type) return Boolean is
!       ch  : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
--- 368,374 ----
     -----------------
  
     function End_Of_Page (File : File_Type) return Boolean is
!       ch : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
*************** package body Ada.Wide_Text_IO is
*** 445,451 ****
       (File : File_Type;
        Item : out Wide_Character)
     is
!       C  : Character;
  
     begin
        FIO.Check_Read_Status (AP (File));
--- 444,450 ----
       (File : File_Type;
        Item : out Wide_Character)
     is
!       C : Character;
  
     begin
        FIO.Check_Read_Status (AP (File));
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-witeio.ads gcc-12.1.0/gcc/ada/libgnat/a-witeio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-witeio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-witeio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Wide_Text_IO is
*** 73,81 ****
     --  Line and page length
  
     subtype Field is Integer range 0 .. 255;
-    --  Note: if for any reason, there is a need to increase this value, then it
-    --  will be necessary to change the corresponding value in System.Img_Real
-    --  in file s-imgrea.adb.
  
     subtype Number_Base is Integer range 2 .. 16;
  
--- 73,78 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wrstfi.adb gcc-12.1.0/gcc/ada/libgnat/a-wrstfi.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wrstfi.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wrstfi.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wrstfi.ads gcc-12.1.0/gcc/ada/libgnat/a-wrstfi.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-wrstfi.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wrstfi.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtcoau.adb gcc-12.1.0/gcc/ada/libgnat/a-wtcoau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtcoau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtcoau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,38 ****
  
  with Ada.Wide_Text_IO.Generic_Aux; use Ada.Wide_Text_IO.Generic_Aux;
  
- with System.Img_Real; use System.Img_Real;
- 
  package body Ada.Wide_Text_IO.Complex_Aux is
  
     ---------
--- 31,36 ----
*************** package body Ada.Wide_Text_IO.Complex_Au
*** 171,179 ****
        --  Both parts are initially converted with a Fore of 0
  
        Rptr := 0;
!       Set_Image_Real (Long_Long_Float (ItemR), R_String, Rptr, 0, Aft, Exp);
        Iptr := 0;
!       Set_Image_Real (Long_Long_Float (ItemI), I_String, Iptr, 0, Aft, Exp);
  
        --  Check room for both parts plus parens plus comma (RM G.1.3(34))
  
--- 169,177 ----
        --  Both parts are initially converted with a Fore of 0
  
        Rptr := 0;
!       Aux.Set_Image (ItemR, R_String, Rptr, 0, Aft, Exp);
        Iptr := 0;
!       Aux.Set_Image (ItemI, I_String, Iptr, 0, Aft, Exp);
  
        --  Check room for both parts plus parens plus comma (RM G.1.3(34))
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtcoau.ads gcc-12.1.0/gcc/ada/libgnat/a-wtcoau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-wtcoau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtcoau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** private generic
*** 42,48 ****
  
     type Num is digits <>;
  
!    with package Aux is new Ada.Wide_Text_IO.Float_Aux (Num, <>);
  
  package Ada.Wide_Text_IO.Complex_Aux is
  
--- 42,48 ----
  
     type Num is digits <>;
  
!    with package Aux is new Ada.Wide_Text_IO.Float_Aux (Num, <>, <>);
  
  package Ada.Wide_Text_IO.Complex_Aux is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtcoio.adb gcc-12.1.0/gcc/ada/libgnat/a-wtcoio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtcoio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtcoio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,36 ****
--- 31,39 ----
  
  with Ada.Wide_Text_IO.Complex_Aux;
  with Ada.Wide_Text_IO.Float_Aux;
+ with System.Img_Flt;  use System.Img_Flt;
+ with System.Img_LFlt; use System.Img_LFlt;
+ with System.Img_LLF;  use System.Img_LLF;
  with System.Val_Flt;  use System.Val_Flt;
  with System.Val_LFlt; use System.Val_LFlt;
  with System.Val_LLF;  use System.Val_LLF;
*************** package body Ada.Wide_Text_IO.Complex_IO
*** 42,63 ****
     use Complex_Types;
  
     package Scalar_Float is new
!       Ada.Wide_Text_IO.Float_Aux (Float, Scan_Float);
  
     package Scalar_Long_Float is new
!       Ada.Wide_Text_IO.Float_Aux (Long_Float, Scan_Long_Float);
  
     package Scalar_Long_Long_Float is new
!       Ada.Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float);
  
     package Aux_Float is new
!       Ada.Wide_Text_IO.Complex_Aux (Float, Scalar_Float);
  
     package Aux_Long_Float is new
!       Ada.Wide_Text_IO.Complex_Aux (Long_Float, Scalar_Long_Float);
  
     package Aux_Long_Long_Float is new
!       Ada.Wide_Text_IO.Complex_Aux (Long_Long_Float, Scalar_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Float is OK, where type Long_Float is OK and where type Long_Long_Float
--- 45,68 ----
     use Complex_Types;
  
     package Scalar_Float is new
!      Ada.Wide_Text_IO.Float_Aux (Float, Scan_Float, Set_Image_Float);
  
     package Scalar_Long_Float is new
!      Ada.Wide_Text_IO.Float_Aux
!        (Long_Float, Scan_Long_Float, Set_Image_Long_Float);
  
     package Scalar_Long_Long_Float is new
!      Ada.Wide_Text_IO.Float_Aux
!        (Long_Long_Float, Scan_Long_Long_Float, Set_Image_Long_Long_Float);
  
     package Aux_Float is new
!      Ada.Wide_Text_IO.Complex_Aux (Float, Scalar_Float);
  
     package Aux_Long_Float is new
!      Ada.Wide_Text_IO.Complex_Aux (Long_Float, Scalar_Long_Float);
  
     package Aux_Long_Long_Float is new
!      Ada.Wide_Text_IO.Complex_Aux (Long_Long_Float, Scalar_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Float is OK, where type Long_Float is OK and where type Long_Long_Float
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtcstr.adb gcc-12.1.0/gcc/ada/libgnat/a-wtcstr.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtcstr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtcstr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtcstr.ads gcc-12.1.0/gcc/ada/libgnat/a-wtcstr.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-wtcstr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtcstr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtdeau.adb gcc-12.1.0/gcc/ada/libgnat/a-wtdeau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtdeau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtdeau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtdeau.ads gcc-12.1.0/gcc/ada/libgnat/a-wtdeau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-wtdeau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtdeau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtdeio.adb gcc-12.1.0/gcc/ada/libgnat/a-wtdeio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtdeio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtdeio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtdeio__128.adb gcc-12.1.0/gcc/ada/libgnat/a-wtdeio__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtdeio__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtdeio__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtedit.adb gcc-12.1.0/gcc/ada/libgnat/a-wtedit.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtedit.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtedit.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Wide_Text_IO.Editing is
*** 450,462 ****
             or else Pic.Start_Currency < Pic.Radix_Position
           then
              Answer (Pic.Start_Currency .. Pic.End_Currency) :=
!                                                         (others => ' ');
              Answer (Pic.End_Currency - Currency_Symbol'Length + 1 ..
                      Pic.End_Currency) := Currency_Symbol;
  
           else
              Answer (Pic.Start_Currency .. Pic.End_Currency) :=
!                                                         (others => ' ');
              Answer (Pic.Start_Currency ..
                      Pic.Start_Currency + Currency_Symbol'Length - 1) :=
                                                          Currency_Symbol;
--- 450,462 ----
             or else Pic.Start_Currency < Pic.Radix_Position
           then
              Answer (Pic.Start_Currency .. Pic.End_Currency) :=
!                                                         [others => ' '];
              Answer (Pic.End_Currency - Currency_Symbol'Length + 1 ..
                      Pic.End_Currency) := Currency_Symbol;
  
           else
              Answer (Pic.Start_Currency .. Pic.End_Currency) :=
!                                                         [others => ' '];
              Answer (Pic.Start_Currency ..
                      Pic.Start_Currency + Currency_Symbol'Length - 1) :=
                                                          Currency_Symbol;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtedit.ads gcc-12.1.0/gcc/ada/libgnat/a-wtedit.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-wtedit.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtedit.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtenau.adb gcc-12.1.0/gcc/ada/libgnat/a-wtenau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtenau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtenau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Wide_Text_IO.Enumeratio
*** 227,233 ****
        Start : out Natural;
        Stop  : out Natural)
     is
!       WC  : Wide_Character;
  
     --  Processing for Scan_Enum_Lit
  
--- 227,233 ----
        Start : out Natural;
        Stop  : out Natural)
     is
!       WC : Wide_Character;
  
     --  Processing for Scan_Enum_Lit
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtenau.ads gcc-12.1.0/gcc/ada/libgnat/a-wtenau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-wtenau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtenau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtenio.adb gcc-12.1.0/gcc/ada/libgnat/a-wtenio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtenio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtenio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtfiau.adb gcc-12.1.0/gcc/ada/libgnat/a-wtfiau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtfiau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtfiau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtfiau.ads gcc-12.1.0/gcc/ada/libgnat/a-wtfiau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-wtfiau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtfiau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtfiio.adb gcc-12.1.0/gcc/ada/libgnat/a-wtfiio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtfiio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtfiio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** with Ada.Wide_Text_IO.Fixed_Aux;
*** 34,42 ****
  with Ada.Wide_Text_IO.Float_Aux;
  with System.Img_Fixed_32; use System.Img_Fixed_32;
  with System.Img_Fixed_64; use System.Img_Fixed_64;
  with System.Val_Fixed_32; use System.Val_Fixed_32;
  with System.Val_Fixed_64; use System.Val_Fixed_64;
! with System.Val_LLF;       use System.Val_LLF;
  with System.WCh_Con;      use System.WCh_Con;
  with System.WCh_WtS;      use System.WCh_WtS;
  
--- 34,43 ----
  with Ada.Wide_Text_IO.Float_Aux;
  with System.Img_Fixed_32; use System.Img_Fixed_32;
  with System.Img_Fixed_64; use System.Img_Fixed_64;
+ with System.Img_LFlt;     use System.Img_LFlt;
  with System.Val_Fixed_32; use System.Val_Fixed_32;
  with System.Val_Fixed_64; use System.Val_Fixed_64;
! with System.Val_LFlt;     use System.Val_LFlt;
  with System.WCh_Con;      use System.WCh_Con;
  with System.WCh_WtS;      use System.WCh_WtS;
  
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 45,51 ****
     --  Note: we still use the floating-point I/O routines for types whose small
     --  is not the ratio of two sufficiently small integers. This will result in
     --  inaccuracies for fixed point types that require more precision than is
!    --  available in Long_Long_Float.
  
     subtype Int32 is Interfaces.Integer_32; use type Int32;
     subtype Int64 is Interfaces.Integer_64; use type Int64;
--- 46,52 ----
     --  Note: we still use the floating-point I/O routines for types whose small
     --  is not the ratio of two sufficiently small integers. This will result in
     --  inaccuracies for fixed point types that require more precision than is
!    --  available in Long_Float.
  
     subtype Int32 is Interfaces.Integer_32; use type Int32;
     subtype Int64 is Interfaces.Integer_64; use type Int64;
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 56,63 ****
     package Aux64 is new
       Ada.Wide_Text_IO.Fixed_Aux (Int64, Scan_Fixed64, Set_Image_Fixed64);
  
!    package Aux_Long_Long_Float is new
!      Ada.Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Int32 is OK and where type Int64 is OK. These boolean constants are used
--- 57,65 ----
     package Aux64 is new
       Ada.Wide_Text_IO.Fixed_Aux (Int64, Scan_Fixed64, Set_Image_Fixed64);
  
!    package Aux_Long_Float is new
!      Ada.Wide_Text_IO.Float_Aux
!        (Long_Float, Scan_Long_Float, Set_Image_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Int32 is OK and where type Int64 is OK. These boolean constants are used
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 161,167 ****
                                 -Num'Small_Numerator,
                                 -Num'Small_Denominator));
        else
!          Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width);
        end if;
  
     exception
--- 163,169 ----
                                 -Num'Small_Numerator,
                                 -Num'Small_Denominator));
        else
!          Aux_Long_Float.Get (File, Long_Float (Item), Width);
        end if;
  
     exception
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 201,207 ****
                                  -Num'Small_Numerator,
                                  -Num'Small_Denominator));
        else
!          Aux_Long_Long_Float.Gets (S, Long_Long_Float (Item), Last);
        end if;
  
     exception
--- 203,209 ----
                                  -Num'Small_Numerator,
                                  -Num'Small_Denominator));
        else
!          Aux_Long_Float.Gets (S, Long_Float (Item), Last);
        end if;
  
     exception
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 229,236 ****
                      -Num'Small_Numerator, -Num'Small_Denominator,
                      For0, Num'Aft);
        else
!          Aux_Long_Long_Float.Put
!            (File, Long_Long_Float (Item), Fore, Aft, Exp);
        end if;
     end Put;
  
--- 231,237 ----
                      -Num'Small_Numerator, -Num'Small_Denominator,
                      For0, Num'Aft);
        else
!          Aux_Long_Float.Put (File, Long_Float (Item), Fore, Aft, Exp);
        end if;
     end Put;
  
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 262,268 ****
                       -Num'Small_Numerator, -Num'Small_Denominator,
                       For0, Num'Aft);
        else
!          Aux_Long_Long_Float.Puts (S, Long_Long_Float (Item), Aft, Exp);
        end if;
  
        for J in S'Range loop
--- 263,269 ----
                       -Num'Small_Numerator, -Num'Small_Denominator,
                       For0, Num'Aft);
        else
!          Aux_Long_Float.Puts (S, Long_Float (Item), Aft, Exp);
        end if;
  
        for J in S'Range loop
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtfiio__128.adb gcc-12.1.0/gcc/ada/libgnat/a-wtfiio__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtfiio__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtfiio__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
*************** with Ada.Wide_Text_IO.Float_Aux;
*** 35,44 ****
  with System.Img_Fixed_32;  use System.Img_Fixed_32;
  with System.Img_Fixed_64;  use System.Img_Fixed_64;
  with System.Img_Fixed_128; use System.Img_Fixed_128;
  with System.Val_Fixed_32;  use System.Val_Fixed_32;
  with System.Val_Fixed_64;  use System.Val_Fixed_64;
  with System.Val_Fixed_128; use System.Val_Fixed_128;
! with System.Val_LLF;       use System.Val_LLF;
  with System.WCh_Con;       use System.WCh_Con;
  with System.WCh_WtS;       use System.WCh_WtS;
  
--- 35,45 ----
  with System.Img_Fixed_32;  use System.Img_Fixed_32;
  with System.Img_Fixed_64;  use System.Img_Fixed_64;
  with System.Img_Fixed_128; use System.Img_Fixed_128;
+ with System.Img_LFlt;      use System.Img_LFlt;
  with System.Val_Fixed_32;  use System.Val_Fixed_32;
  with System.Val_Fixed_64;  use System.Val_Fixed_64;
  with System.Val_Fixed_128; use System.Val_Fixed_128;
! with System.Val_LFlt;      use System.Val_LFlt;
  with System.WCh_Con;       use System.WCh_Con;
  with System.WCh_WtS;       use System.WCh_WtS;
  
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 47,53 ****
     --  Note: we still use the floating-point I/O routines for types whose small
     --  is not the ratio of two sufficiently small integers. This will result in
     --  inaccuracies for fixed point types that require more precision than is
!    --  available in Long_Long_Float.
  
     subtype Int32  is Interfaces.Integer_32;  use type Int32;
     subtype Int64  is Interfaces.Integer_64;  use type Int64;
--- 48,54 ----
     --  Note: we still use the floating-point I/O routines for types whose small
     --  is not the ratio of two sufficiently small integers. This will result in
     --  inaccuracies for fixed point types that require more precision than is
!    --  available in Long_Float.
  
     subtype Int32  is Interfaces.Integer_32;  use type Int32;
     subtype Int64  is Interfaces.Integer_64;  use type Int64;
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 62,69 ****
     package Aux128 is new
       Ada.Wide_Text_IO.Fixed_Aux (Int128, Scan_Fixed128, Set_Image_Fixed128);
  
!    package Aux_Long_Long_Float is new
!      Ada.Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Int32 is OK, where type Int64 is OK and where type Int128 is OK. These
--- 63,71 ----
     package Aux128 is new
       Ada.Wide_Text_IO.Fixed_Aux (Int128, Scan_Fixed128, Set_Image_Fixed128);
  
!    package Aux_Long_Float is new
!      Ada.Wide_Text_IO.Float_Aux
!        (Long_Float, Scan_Long_Float, Set_Image_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Int32 is OK, where type Int64 is OK and where type Int128 is OK. These
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 201,207 ****
                                  -Num'Small_Numerator,
                                  -Num'Small_Denominator));
        else
!          Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width);
        end if;
  
     exception
--- 203,209 ----
                                  -Num'Small_Numerator,
                                  -Num'Small_Denominator));
        else
!          Aux_Long_Float.Get (File, Long_Float (Item), Width);
        end if;
  
     exception
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 246,252 ****
                                   -Num'Small_Numerator,
                                   -Num'Small_Denominator));
        else
!          Aux_Long_Long_Float.Gets (S, Long_Long_Float (Item), Last);
        end if;
  
     exception
--- 248,254 ----
                                   -Num'Small_Numerator,
                                   -Num'Small_Denominator));
        else
!          Aux_Long_Float.Gets (S, Long_Float (Item), Last);
        end if;
  
     exception
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 278,285 ****
                       -Num'Small_Numerator, -Num'Small_Denominator,
                       For0, Num'Aft);
        else
!          Aux_Long_Long_Float.Put
!            (File, Long_Long_Float (Item), Fore, Aft, Exp);
        end if;
     end Put;
  
--- 280,286 ----
                       -Num'Small_Numerator, -Num'Small_Denominator,
                       For0, Num'Aft);
        else
!          Aux_Long_Float.Put (File, Long_Float (Item), Fore, Aft, Exp);
        end if;
     end Put;
  
*************** package body Ada.Wide_Text_IO.Fixed_IO i
*** 315,321 ****
                        -Num'Small_Numerator, -Num'Small_Denominator,
                        For0, Num'Aft);
        else
!          Aux_Long_Long_Float.Puts (S, Long_Long_Float (Item), Aft, Exp);
        end if;
  
        for J in S'Range loop
--- 316,322 ----
                        -Num'Small_Numerator, -Num'Small_Denominator,
                        For0, Num'Aft);
        else
!          Aux_Long_Float.Puts (S, Long_Float (Item), Aft, Exp);
        end if;
  
        for J in S'Range loop
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtflau.adb gcc-12.1.0/gcc/ada/libgnat/a-wtflau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtflau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtflau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,37 ****
  
  with Ada.Wide_Text_IO.Generic_Aux; use Ada.Wide_Text_IO.Generic_Aux;
  
! with System.Img_Real; use System.Img_Real;
  
  package body Ada.Wide_Text_IO.Float_Aux is
  
--- 31,37 ----
  
  with Ada.Wide_Text_IO.Generic_Aux; use Ada.Wide_Text_IO.Generic_Aux;
  
! with System.Img_Util; use System.Img_Util;
  
  package body Ada.Wide_Text_IO.Float_Aux is
  
*************** package body Ada.Wide_Text_IO.Float_Aux
*** 96,102 ****
        Ptr : Natural := 0;
  
     begin
!       Set_Image_Real (Long_Long_Float (Item), Buf, Ptr, Fore, Aft, Exp);
        Put_Item (File, Buf (1 .. Ptr));
     end Put;
  
--- 96,102 ----
        Ptr : Natural := 0;
  
     begin
!       Set_Image (Item, Buf, Ptr, Fore, Aft, Exp);
        Put_Item (File, Buf (1 .. Ptr));
     end Put;
  
*************** package body Ada.Wide_Text_IO.Float_Aux
*** 114,121 ****
        Ptr : Natural := 0;
  
     begin
!       Set_Image_Real
!         (Long_Long_Float (Item), Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp);
  
        if Ptr > To'Length then
           raise Layout_Error;
--- 114,120 ----
        Ptr : Natural := 0;
  
     begin
!       Set_Image (Item, Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp);
  
        if Ptr > To'Length then
           raise Layout_Error;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtflau.ads gcc-12.1.0/gcc/ada/libgnat/a-wtflau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-wtflau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtflau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** private generic
*** 45,50 ****
--- 45,58 ----
        Ptr : not null access Integer;
        Max : Integer) return Num;
  
+    with procedure Set_Image
+      (V    : Num;
+       S    : in out String;
+       P    : in out Natural;
+       Fore : Natural;
+       Aft  : Natural;
+       Exp  : Natural);
+ 
  package Ada.Wide_Text_IO.Float_Aux is
  
     procedure Get
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtflio.adb gcc-12.1.0/gcc/ada/libgnat/a-wtflio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtflio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtflio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 30,35 ****
--- 30,38 ----
  ------------------------------------------------------------------------------
  
  with Ada.Wide_Text_IO.Float_Aux;
+ with System.Img_Flt;  use System.Img_Flt;
+ with System.Img_LFlt; use System.Img_LFlt;
+ with System.Img_LLF;  use System.Img_LLF;
  with System.Val_Flt;  use System.Val_Flt;
  with System.Val_LFlt; use System.Val_LFlt;
  with System.Val_LLF;  use System.Val_LLF;
*************** with System.WCh_WtS;  use System.WCh_WtS
*** 39,51 ****
  package body Ada.Wide_Text_IO.Float_IO is
  
     package Aux_Float is new
!       Ada.Wide_Text_IO.Float_Aux (Float, Scan_Float);
  
     package Aux_Long_Float is new
!       Ada.Wide_Text_IO.Float_Aux (Long_Float, Scan_Long_Float);
  
     package Aux_Long_Long_Float is new
!       Ada.Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Float is OK, where type Long_Float is OK and where type Long_Long_Float
--- 42,56 ----
  package body Ada.Wide_Text_IO.Float_IO is
  
     package Aux_Float is new
!      Ada.Wide_Text_IO.Float_Aux (Float, Scan_Float, Set_Image_Float);
  
     package Aux_Long_Float is new
!      Ada.Wide_Text_IO.Float_Aux
!        (Long_Float, Scan_Long_Float, Set_Image_Long_Float);
  
     package Aux_Long_Long_Float is new
!      Ada.Wide_Text_IO.Float_Aux
!        (Long_Long_Float, Scan_Long_Long_Float, Set_Image_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Float is OK, where type Long_Float is OK and where type Long_Long_Float
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtgeau.adb gcc-12.1.0/gcc/ada/libgnat/a-wtgeau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtgeau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtgeau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Wide_Text_IO.Generic_Au
*** 343,349 ****
        Ptr    : in out Integer)
     is
        Junk : Boolean;
-       pragma Unreferenced (Junk);
     begin
        Load_Extended_Digits (File, Buf, Ptr, Junk);
     end Load_Extended_Digits;
--- 343,348 ----
*************** package body Ada.Wide_Text_IO.Generic_Au
*** 411,417 ****
        Buf  : out String;
        Ptr  : in out Natural)
     is
!       Loaded   : Boolean;
  
     begin
        --  Skip initial blanks and load possible sign
--- 410,416 ----
        Buf  : out String;
        Ptr  : in out Natural)
     is
!       Loaded : Boolean;
  
     begin
        --  Skip initial blanks and load possible sign
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtgeau.ads gcc-12.1.0/gcc/ada/libgnat/a-wtgeau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-wtgeau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtgeau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtinau.adb gcc-12.1.0/gcc/ada/libgnat/a-wtinau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtinau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtinau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Wide_Text_IO.Integer_Au
*** 54,60 ****
           Load_Integer (File, Buf, Stop);
        end if;
  
!       Item := Scan (Buf, Ptr'Access, Stop);
        Check_End_Of_Field (Buf, Stop, Ptr, Width);
     end Get;
  
--- 54,60 ----
           Load_Integer (File, Buf, Stop);
        end if;
  
!       Scan (Buf, Ptr'Access, Stop, Item);
        Check_End_Of_Field (Buf, Stop, Ptr, Width);
     end Get;
  
*************** package body Ada.Wide_Text_IO.Integer_Au
*** 71,77 ****
  
     begin
        String_Skip (From, Pos);
!       Item := Scan (From, Pos'Access, From'Last);
        Last := Pos - 1;
  
     exception
--- 71,77 ----
  
     begin
        String_Skip (From, Pos);
!       Scan (From, Pos'Access, From'Last, Item);
        Last := Pos - 1;
  
     exception
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtinau.ads gcc-12.1.0/gcc/ada/libgnat/a-wtinau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-wtinau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtinau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 38,45 ****
  private generic
     type Num is (<>);
  
!    with function Scan
!      (Str : String; Ptr : not null access Integer; Max : Integer) return Num;
     with procedure Set_Image
       (V : Num; S : in out String; P : in out Natural);
     with procedure Set_Image_Width
--- 38,48 ----
  private generic
     type Num is (<>);
  
!    with procedure Scan
!      (Str : String;
!       Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Num);
     with procedure Set_Image
       (V : Num; S : in out String; P : in out Natural);
     with procedure Set_Image_Width
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtinio.adb gcc-12.1.0/gcc/ada/libgnat/a-wtinio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtinio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtinio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtinio__128.adb gcc-12.1.0/gcc/ada/libgnat/a-wtinio__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtinio__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtinio__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtmoio.adb gcc-12.1.0/gcc/ada/libgnat/a-wtmoio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtmoio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtmoio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtmoio.ads gcc-12.1.0/gcc/ada/libgnat/a-wtmoio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-wtmoio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtmoio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT.  In accordance with the copyright of that document, you can freely --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT.  In accordance with the copyright of that document, you can freely --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wtmoio__128.adb gcc-12.1.0/gcc/ada/libgnat/a-wtmoio__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wtmoio__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wtmoio__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wttest.adb gcc-12.1.0/gcc/ada/libgnat/a-wttest.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wttest.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wttest.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-wwboio.adb gcc-12.1.0/gcc/ada/libgnat/a-wwboio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-wwboio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-wwboio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with Ada.Wide_Text_IO; use Ada.Wide_Text_IO;
  with Ada.Unchecked_Deallocation;
  
  package body Ada.Wide_Text_IO.Wide_Bounded_IO is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-zchhan.adb gcc-12.1.0/gcc/ada/libgnat/a-zchhan.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-zchhan.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-zchhan.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
*************** with Ada.Wide_Wide_Characters.Unicode; u
*** 33,38 ****
--- 33,47 ----
  
  package body Ada.Wide_Wide_Characters.Handling is
  
+    ---------------------------
+    -- Character_Set_Version --
+    ---------------------------
+ 
+    function Character_Set_Version return String is
+    begin
+       return "Unicode 4.0";
+    end Character_Set_Version;
+ 
     ---------------------
     -- Is_Alphanumeric --
     ---------------------
*************** package body Ada.Wide_Wide_Characters.Ha
*** 42,47 ****
--- 51,63 ----
        return Is_Letter (Item) or else Is_Digit (Item);
     end Is_Alphanumeric;
  
+    --------------
+    -- Is_Basic --
+    --------------
+ 
+    function Is_Basic (Item : Wide_Wide_Character) return Boolean
+      renames Ada.Wide_Wide_Characters.Unicode.Is_Basic;
+ 
     ----------------
     -- Is_Control --
     ----------------
*************** package body Ada.Wide_Wide_Characters.Ha
*** 191,194 ****
--- 207,228 ----
        return Result;
     end To_Upper;
  
+    --------------
+    -- To_Basic --
+    --------------
+ 
+    function To_Basic (Item : Wide_Wide_Character) return Wide_Wide_Character
+      renames Ada.Wide_Wide_Characters.Unicode.To_Basic;
+ 
+    function To_Basic (Item : Wide_Wide_String) return Wide_Wide_String is
+       Result : Wide_Wide_String (Item'Range);
+ 
+    begin
+       for J in Result'Range loop
+          Result (J) := To_Basic (Item (J));
+       end loop;
+ 
+       return Result;
+    end To_Basic;
+ 
  end Ada.Wide_Wide_Characters.Handling;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-zchhan.ads gcc-12.1.0/gcc/ada/libgnat/a-zchhan.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-zchhan.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-zchhan.ads	Fri May  6 07:30:56 2022
***************
*** 15,24 ****
  
  package Ada.Wide_Wide_Characters.Handling is
     pragma Pure;
!    --  This package is clearly intended to be Pure, by analogy with the
!    --  base Ada.Characters.Handling package. The version in the RM does
!    --  not yet have this pragma, but that is a clear omission. This will
!    --  be fixed in a future version of AI05-0266-1.
  
     function Is_Control (Item : Wide_Wide_Character) return Boolean;
     pragma Inline (Is_Control);
--- 15,26 ----
  
  package Ada.Wide_Wide_Characters.Handling is
     pragma Pure;
! 
!    function Character_Set_Version return String;
!    pragma Inline (Character_Set_Version);
!    --  Returns an implementation-defined identifier that identifies the version
!    --  of the character set standard that is used for categorizing characters
!    --  by the implementation. For GNAT this is "Unicode v.v".
  
     function Is_Control (Item : Wide_Wide_Character) return Boolean;
     pragma Inline (Is_Control);
*************** package Ada.Wide_Wide_Characters.Handlin
*** 42,47 ****
--- 44,55 ----
     --  Returns True if the Wide_Wide_Character designated by Item is
     --  categorized as letter_uppercase, otherwise returns false.
  
+    function Is_Basic (Item : Wide_Wide_Character) return Boolean;
+    pragma Inline (Is_Basic);
+    --  Returns True if the Wide_Wide_Character designated by Item has no
+    --  Decomposition Mapping in the code charts of ISO/IEC 10646:2017,
+    --  otherwise returns False.
+ 
     function Is_Digit (Item : Wide_Wide_Character) return Boolean;
     pragma Inline (Is_Digit);
     --  Returns True if the Wide_Wide_Character designated by Item is
*************** package Ada.Wide_Wide_Characters.Handlin
*** 135,138 ****
--- 143,159 ----
     --  designated by Item. The result is the null Wide_Wide_String if the value
     --  of the formal parameter is the null Wide_Wide_String.
  
+    function To_Basic (Item : Wide_Wide_Character) return Wide_Wide_Character;
+    pragma Inline (To_Basic);
+    --  Returns the Wide_Wide_Character whose code point is given
+    --  by the first value of its Decomposition Mapping in the code charts
+    --  of ISO/IEC 10646:2017 if any, returns Item otherwise.
+ 
+    function To_Basic (Item : Wide_Wide_String) return Wide_Wide_String;
+    --  Returns the result of applying the To_Basic conversion to each
+    --  Wide_Wide_Character element of the Wide_Wide_String designated by Item.
+    --  The result is the null Wide_Wide_String if the value of the formal
+    --  parameter is the null Wide_Wide_String. The lower bound of the result
+    --  Wide_Wide_String is 1.
+ 
  end Ada.Wide_Wide_Characters.Handling;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-zchuni.adb gcc-12.1.0/gcc/ada/libgnat/a-zchuni.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-zchuni.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-zchuni.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, 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- --
*************** package body Ada.Wide_Wide_Characters.Un
*** 43,48 ****
--- 43,57 ----
     end Get_Category;
  
     --------------
+    -- Is_Basic --
+    --------------
+ 
+    function Is_Basic (U : Wide_Wide_Character) return Boolean is
+    begin
+       return G.Is_UTF_32_Basic (Wide_Wide_Character'Pos (U));
+    end Is_Basic;
+ 
+    --------------
     -- Is_Digit --
     --------------
  
*************** package body Ada.Wide_Wide_Characters.Un
*** 158,163 ****
--- 167,182 ----
        return G.Is_UTF_32_Space (G.Category (C));
     end Is_Space;
  
+    --------------
+    -- To_Basic --
+    --------------
+ 
+    function To_Basic (U : Wide_Wide_Character) return Wide_Wide_Character is
+    begin
+       return Wide_Wide_Character'Val
+         (G.UTF_32_To_Basic (Wide_Wide_Character'Pos (U)));
+    end To_Basic;
+ 
     -------------------
     -- To_Lower_Case --
     -------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-zchuni.ads gcc-12.1.0/gcc/ada/libgnat/a-zchuni.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-zchuni.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-zchuni.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, 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- --
*************** package Ada.Wide_Wide_Characters.Unicode
*** 177,182 ****
--- 177,194 ----
     --  in the list of categories above. This means that these characters can
     --  be included in character and string literals.
  
+    function Is_Basic (U : Wide_Wide_Character) return Boolean;
+    pragma Inline (Is_Basic);
+    --  Returns True if the Wide_Wide_Character designated by Item has no
+    --  Decomposition Mapping in the code charts of ISO/IEC 10646:2017,
+    --  otherwise returns False.
+ 
+    function To_Basic (U : Wide_Wide_Character) return Wide_Wide_Character;
+    pragma Inline (To_Basic);
+    --  Returns the Wide_Wide_Character whose code point is given by the first
+    --  value of its Decomposition Mapping in the code charts of
+    --  ISO/IEC 10646:2017 if any, returns Item otherwise.
+ 
     --  The following function is used to fold to upper case, as required by
     --  the Ada 2005 standard rules for identifier case folding. Two
     --  identifiers are equivalent if they are identical after folding all
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-zrstfi.adb gcc-12.1.0/gcc/ada/libgnat/a-zrstfi.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-zrstfi.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-zrstfi.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-zrstfi.ads gcc-12.1.0/gcc/ada/libgnat/a-zrstfi.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-zrstfi.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-zrstfi.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztcoau.adb gcc-12.1.0/gcc/ada/libgnat/a-ztcoau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztcoau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztcoau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,38 ****
  
  with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux;
  
- with System.Img_Real; use System.Img_Real;
- 
  package body Ada.Wide_Wide_Text_IO.Complex_Aux is
  
     ---------
--- 31,36 ----
*************** package body Ada.Wide_Wide_Text_IO.Compl
*** 171,179 ****
        --  Both parts are initially converted with a Fore of 0
  
        Rptr := 0;
!       Set_Image_Real (Long_Long_Float (ItemR), R_String, Rptr, 0, Aft, Exp);
        Iptr := 0;
!       Set_Image_Real (Long_Long_Float (ItemI), I_String, Iptr, 0, Aft, Exp);
  
        --  Check room for both parts plus parens plus comma (RM G.1.3(34))
  
--- 169,177 ----
        --  Both parts are initially converted with a Fore of 0
  
        Rptr := 0;
!       Aux.Set_Image (ItemR, R_String, Rptr, 0, Aft, Exp);
        Iptr := 0;
!       Aux.Set_Image (ItemI, I_String, Iptr, 0, Aft, Exp);
  
        --  Check room for both parts plus parens plus comma (RM G.1.3(34))
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztcoau.ads gcc-12.1.0/gcc/ada/libgnat/a-ztcoau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ztcoau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztcoau.ads	Fri May  6 07:30:56 2022
*************** private generic
*** 26,32 ****
  
     type Num is digits <>;
  
!    with package Aux is new Ada.Wide_Wide_Text_IO.Float_Aux (Num, <>);
  
  package Ada.Wide_Wide_Text_IO.Complex_Aux is
  
--- 26,32 ----
  
     type Num is digits <>;
  
!    with package Aux is new Ada.Wide_Wide_Text_IO.Float_Aux (Num, <>, <>);
  
  package Ada.Wide_Wide_Text_IO.Complex_Aux is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztcoio.adb gcc-12.1.0/gcc/ada/libgnat/a-ztcoio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztcoio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztcoio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,66 ****
  
  with Ada.Wide_Wide_Text_IO.Complex_Aux;
  with Ada.Wide_Wide_Text_IO.Float_Aux;
  with System.Val_Flt;  use System.Val_Flt;
  with System.Val_LFlt; use System.Val_LFlt;
  with System.Val_LLF;  use System.Val_LLF;
  with System.WCh_Con;  use System.WCh_Con;
  with System.WCh_WtS;  use System.WCh_WtS;
  
- with Ada.Unchecked_Conversion;
- 
  package body Ada.Wide_Wide_Text_IO.Complex_IO is
  
     use Complex_Types;
  
     package Scalar_Float is new
!       Ada.Wide_Wide_Text_IO.Float_Aux (Float, Scan_Float);
  
     package Scalar_Long_Float is new
!       Ada.Wide_Wide_Text_IO.Float_Aux (Long_Float, Scan_Long_Float);
  
     package Scalar_Long_Long_Float is new
!       Ada.Wide_Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float);
  
     package Aux_Float is new
!       Ada.Wide_Wide_Text_IO.Complex_Aux (Float, Scalar_Float);
  
     package Aux_Long_Float is new
!       Ada.Wide_Wide_Text_IO.Complex_Aux (Long_Float, Scalar_Long_Float);
  
     package Aux_Long_Long_Float is new
!       Ada.Wide_Wide_Text_IO.Complex_Aux
!         (Long_Long_Float, Scalar_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Float is OK, where type Long_Float is OK and where type Long_Long_Float
--- 31,69 ----
  
  with Ada.Wide_Wide_Text_IO.Complex_Aux;
  with Ada.Wide_Wide_Text_IO.Float_Aux;
+ with System.Img_Flt;  use System.Img_Flt;
+ with System.Img_LFlt; use System.Img_LFlt;
+ with System.Img_LLF;  use System.Img_LLF;
  with System.Val_Flt;  use System.Val_Flt;
  with System.Val_LFlt; use System.Val_LFlt;
  with System.Val_LLF;  use System.Val_LLF;
  with System.WCh_Con;  use System.WCh_Con;
  with System.WCh_WtS;  use System.WCh_WtS;
  
  package body Ada.Wide_Wide_Text_IO.Complex_IO is
  
     use Complex_Types;
  
     package Scalar_Float is new
!      Ada.Wide_Wide_Text_IO.Float_Aux (Float, Scan_Float, Set_Image_Float);
  
     package Scalar_Long_Float is new
!      Ada.Wide_Wide_Text_IO.Float_Aux
!        (Long_Float, Scan_Long_Float, Set_Image_Long_Float);
  
     package Scalar_Long_Long_Float is new
!      Ada.Wide_Wide_Text_IO.Float_Aux
!        (Long_Long_Float, Scan_Long_Long_Float, Set_Image_Long_Long_Float);
  
     package Aux_Float is new
!      Ada.Wide_Wide_Text_IO.Complex_Aux (Float, Scalar_Float);
  
     package Aux_Long_Float is new
!      Ada.Wide_Wide_Text_IO.Complex_Aux (Long_Float, Scalar_Long_Float);
  
     package Aux_Long_Long_Float is new
!      Ada.Wide_Wide_Text_IO.Complex_Aux
!        (Long_Long_Float, Scalar_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Float is OK, where type Long_Float is OK and where type Long_Long_Float
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztcstr.adb gcc-12.1.0/gcc/ada/libgnat/a-ztcstr.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztcstr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztcstr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztcstr.ads gcc-12.1.0/gcc/ada/libgnat/a-ztcstr.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ztcstr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztcstr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztdeau.adb gcc-12.1.0/gcc/ada/libgnat/a-ztdeau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztdeau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztdeau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztdeau.ads gcc-12.1.0/gcc/ada/libgnat/a-ztdeau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ztdeau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztdeau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztdeio.adb gcc-12.1.0/gcc/ada/libgnat/a-ztdeio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztdeio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztdeio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztdeio__128.adb gcc-12.1.0/gcc/ada/libgnat/a-ztdeio__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztdeio__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztdeio__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztedit.adb gcc-12.1.0/gcc/ada/libgnat/a-ztedit.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztedit.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztedit.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Wide_Wide_Text_IO.Editi
*** 451,463 ****
             or else Pic.Start_Currency < Pic.Radix_Position
           then
              Answer (Pic.Start_Currency .. Pic.End_Currency) :=
!                                                         (others => ' ');
              Answer (Pic.End_Currency - Currency_Symbol'Length + 1 ..
                      Pic.End_Currency) := Currency_Symbol;
  
           else
              Answer (Pic.Start_Currency .. Pic.End_Currency) :=
!                                                         (others => ' ');
              Answer (Pic.Start_Currency ..
                      Pic.Start_Currency + Currency_Symbol'Length - 1) :=
                                                          Currency_Symbol;
--- 451,463 ----
             or else Pic.Start_Currency < Pic.Radix_Position
           then
              Answer (Pic.Start_Currency .. Pic.End_Currency) :=
!                                                         [others => ' '];
              Answer (Pic.End_Currency - Currency_Symbol'Length + 1 ..
                      Pic.End_Currency) := Currency_Symbol;
  
           else
              Answer (Pic.Start_Currency .. Pic.End_Currency) :=
!                                                         [others => ' '];
              Answer (Pic.Start_Currency ..
                      Pic.Start_Currency + Currency_Symbol'Length - 1) :=
                                                          Currency_Symbol;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztedit.ads gcc-12.1.0/gcc/ada/libgnat/a-ztedit.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ztedit.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztedit.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztenau.adb gcc-12.1.0/gcc/ada/libgnat/a-ztenau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztenau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztenau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Wide_Wide_Text_IO.Enume
*** 229,235 ****
        Start : out Natural;
        Stop  : out Natural)
     is
!       WC  : Wide_Wide_Character;
  
     --  Processing for Scan_Enum_Lit
  
--- 229,235 ----
        Start : out Natural;
        Stop  : out Natural)
     is
!       WC : Wide_Wide_Character;
  
     --  Processing for Scan_Enum_Lit
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztenau.ads gcc-12.1.0/gcc/ada/libgnat/a-ztenau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ztenau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztenau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztenio.adb gcc-12.1.0/gcc/ada/libgnat/a-ztenio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztenio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztenio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztexio.adb gcc-12.1.0/gcc/ada/libgnat/a-ztexio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztexio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztexio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Wide_Wide_Text_IO is
*** 55,61 ****
  
     use type System.CRTL.size_t;
  
!    WC_Encoding : Character;
     pragma Import (C, WC_Encoding, "__gl_wc_encoding");
     --  Default wide character encoding
  
--- 55,61 ----
  
     use type System.CRTL.size_t;
  
!    WC_Encoding : constant Character;
     pragma Import (C, WC_Encoding, "__gl_wc_encoding");
     --  Default wide character encoding
  
*************** package body Ada.Wide_Wide_Text_IO is
*** 136,150 ****
        --  is required (RM A.10.3(23)) but it seems reasonable, and besides
        --  ACVC test CE3208A expects this behavior.
  
!       if File_Type (File) = Current_In then
           Current_In := null;
!       elsif File_Type (File) = Current_Out then
           Current_Out := null;
!       elsif File_Type (File) = Current_Err then
           Current_Err := null;
        end if;
  
!       Terminate_Line (File_Type (File));
     end AFCB_Close;
  
     ---------------
--- 136,150 ----
        --  is required (RM A.10.3(23)) but it seems reasonable, and besides
        --  ACVC test CE3208A expects this behavior.
  
!       if File = Current_In then
           Current_In := null;
!       elsif File = Current_Out then
           Current_Out := null;
!       elsif File = Current_Err then
           Current_Err := null;
        end if;
  
!       Terminate_Line (File.all'Access);
     end AFCB_Close;
  
     ---------------
*************** package body Ada.Wide_Wide_Text_IO is
*** 152,162 ****
     ---------------
  
     procedure AFCB_Free (File : not null access Wide_Wide_Text_AFCB) is
!       type FCB_Ptr is access all Wide_Wide_Text_AFCB;
!       FT : FCB_Ptr := FCB_Ptr (File);
  
        procedure Free is new
!         Ada.Unchecked_Deallocation (Wide_Wide_Text_AFCB, FCB_Ptr);
  
     begin
        Free (FT);
--- 152,161 ----
     ---------------
  
     procedure AFCB_Free (File : not null access Wide_Wide_Text_AFCB) is
!       FT : File_Type := File.all'Access;
  
        procedure Free is new
!         Ada.Unchecked_Deallocation (Wide_Wide_Text_AFCB, File_Type);
  
     begin
        Free (FT);
*************** package body Ada.Wide_Wide_Text_IO is
*** 275,281 ****
     -----------------
  
     function End_Of_File (File : File_Type) return Boolean is
!       ch  : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
--- 274,280 ----
     -----------------
  
     function End_Of_File (File : File_Type) return Boolean is
!       ch : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
*************** package body Ada.Wide_Wide_Text_IO is
*** 369,375 ****
     -----------------
  
     function End_Of_Page (File : File_Type) return Boolean is
!       ch  : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
--- 368,374 ----
     -----------------
  
     function End_Of_Page (File : File_Type) return Boolean is
!       ch : int;
  
     begin
        FIO.Check_Read_Status (AP (File));
*************** package body Ada.Wide_Wide_Text_IO is
*** 445,451 ****
       (File : File_Type;
        Item : out Wide_Wide_Character)
     is
!       C  : Character;
  
     begin
        FIO.Check_Read_Status (AP (File));
--- 444,450 ----
       (File : File_Type;
        Item : out Wide_Wide_Character)
     is
!       C : Character;
  
     begin
        FIO.Check_Read_Status (AP (File));
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztexio.ads gcc-12.1.0/gcc/ada/libgnat/a-ztexio.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ztexio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztexio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Ada.Wide_Wide_Text_IO is
*** 73,81 ****
     --  Line and page length
  
     subtype Field is Integer range 0 .. 255;
-    --  Note: if for any reason, there is a need to increase this value, then it
-    --  will be necessary to change the corresponding value in System.Img_Real
-    --  in file s-imgrea.adb.
  
     subtype Number_Base is Integer range 2 .. 16;
  
--- 73,78 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztfiau.adb gcc-12.1.0/gcc/ada/libgnat/a-ztfiau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztfiau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztfiau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztfiau.ads gcc-12.1.0/gcc/ada/libgnat/a-ztfiau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ztfiau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztfiau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztfiio.adb gcc-12.1.0/gcc/ada/libgnat/a-ztfiio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztfiio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztfiio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** with Ada.Wide_Wide_Text_IO.Fixed_Aux;
*** 34,42 ****
  with Ada.Wide_Wide_Text_IO.Float_Aux;
  with System.Img_Fixed_32; use System.Img_Fixed_32;
  with System.Img_Fixed_64; use System.Img_Fixed_64;
  with System.Val_Fixed_32; use System.Val_Fixed_32;
  with System.Val_Fixed_64; use System.Val_Fixed_64;
! with System.Val_LLF;      use System.Val_LLF;
  with System.WCh_Con;      use System.WCh_Con;
  with System.WCh_WtS;      use System.WCh_WtS;
  
--- 34,43 ----
  with Ada.Wide_Wide_Text_IO.Float_Aux;
  with System.Img_Fixed_32; use System.Img_Fixed_32;
  with System.Img_Fixed_64; use System.Img_Fixed_64;
+ with System.Img_LFlt;     use System.Img_LFlt;
  with System.Val_Fixed_32; use System.Val_Fixed_32;
  with System.Val_Fixed_64; use System.Val_Fixed_64;
! with System.Val_LFlt;     use System.Val_LFlt;
  with System.WCh_Con;      use System.WCh_Con;
  with System.WCh_WtS;      use System.WCh_WtS;
  
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 45,51 ****
     --  Note: we still use the floating-point I/O routines for types whose small
     --  is not the ratio of two sufficiently small integers. This will result in
     --  inaccuracies for fixed point types that require more precision than is
!    --  available in Long_Long_Float.
  
     subtype Int32 is Interfaces.Integer_32; use type Int32;
     subtype Int64 is Interfaces.Integer_64; use type Int64;
--- 46,52 ----
     --  Note: we still use the floating-point I/O routines for types whose small
     --  is not the ratio of two sufficiently small integers. This will result in
     --  inaccuracies for fixed point types that require more precision than is
!    --  available in Long_Float.
  
     subtype Int32 is Interfaces.Integer_32; use type Int32;
     subtype Int64 is Interfaces.Integer_64; use type Int64;
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 56,63 ****
     package Aux64 is new
       Ada.Wide_Wide_Text_IO.Fixed_Aux (Int64, Scan_Fixed64, Set_Image_Fixed64);
  
!    package Aux_Long_Long_Float is new
!      Ada.Wide_Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Int32 is OK and where type Int64 is OK. These boolean constants are used
--- 57,65 ----
     package Aux64 is new
       Ada.Wide_Wide_Text_IO.Fixed_Aux (Int64, Scan_Fixed64, Set_Image_Fixed64);
  
!    package Aux_Long_Float is new
!      Ada.Wide_Wide_Text_IO.Float_Aux
!        (Long_Float, Scan_Long_Float, Set_Image_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Int32 is OK and where type Int64 is OK. These boolean constants are used
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 161,167 ****
                                 -Num'Small_Numerator,
                                 -Num'Small_Denominator));
        else
!          Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width);
        end if;
  
     exception
--- 163,169 ----
                                 -Num'Small_Numerator,
                                 -Num'Small_Denominator));
        else
!          Aux_Long_Float.Get (File, Long_Float (Item), Width);
        end if;
  
     exception
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 201,207 ****
                                  -Num'Small_Numerator,
                                  -Num'Small_Denominator));
        else
!          Aux_Long_Long_Float.Gets (S, Long_Long_Float (Item), Last);
        end if;
  
     exception
--- 203,209 ----
                                  -Num'Small_Numerator,
                                  -Num'Small_Denominator));
        else
!          Aux_Long_Float.Gets (S, Long_Float (Item), Last);
        end if;
  
     exception
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 229,236 ****
                      -Num'Small_Numerator, -Num'Small_Denominator,
                      For0, Num'Aft);
        else
!          Aux_Long_Long_Float.Put
!            (File, Long_Long_Float (Item), Fore, Aft, Exp);
        end if;
     end Put;
  
--- 231,237 ----
                      -Num'Small_Numerator, -Num'Small_Denominator,
                      For0, Num'Aft);
        else
!          Aux_Long_Float.Put (File, Long_Float (Item), Fore, Aft, Exp);
        end if;
     end Put;
  
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 262,268 ****
                       -Num'Small_Numerator, -Num'Small_Denominator,
                       For0, Num'Aft);
        else
!          Aux_Long_Long_Float.Puts (S, Long_Long_Float (Item), Aft, Exp);
        end if;
  
        for J in S'Range loop
--- 263,269 ----
                       -Num'Small_Numerator, -Num'Small_Denominator,
                       For0, Num'Aft);
        else
!          Aux_Long_Float.Puts (S, Long_Float (Item), Aft, Exp);
        end if;
  
        for J in S'Range loop
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztfiio__128.adb gcc-12.1.0/gcc/ada/libgnat/a-ztfiio__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztfiio__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztfiio__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
*************** with Ada.Wide_Wide_Text_IO.Float_Aux;
*** 35,44 ****
  with System.Img_Fixed_32;  use System.Img_Fixed_32;
  with System.Img_Fixed_64;  use System.Img_Fixed_64;
  with System.Img_Fixed_128; use System.Img_Fixed_128;
  with System.Val_Fixed_32;  use System.Val_Fixed_32;
  with System.Val_Fixed_64;  use System.Val_Fixed_64;
  with System.Val_Fixed_128; use System.Val_Fixed_128;
! with System.Val_LLF;       use System.Val_LLF;
  with System.WCh_Con;       use System.WCh_Con;
  with System.WCh_WtS;       use System.WCh_WtS;
  
--- 35,45 ----
  with System.Img_Fixed_32;  use System.Img_Fixed_32;
  with System.Img_Fixed_64;  use System.Img_Fixed_64;
  with System.Img_Fixed_128; use System.Img_Fixed_128;
+ with System.Img_LFlt;      use System.Img_LFlt;
  with System.Val_Fixed_32;  use System.Val_Fixed_32;
  with System.Val_Fixed_64;  use System.Val_Fixed_64;
  with System.Val_Fixed_128; use System.Val_Fixed_128;
! with System.Val_LFlt;      use System.Val_LFlt;
  with System.WCh_Con;       use System.WCh_Con;
  with System.WCh_WtS;       use System.WCh_WtS;
  
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 47,53 ****
     --  Note: we still use the floating-point I/O routines for types whose small
     --  is not the ratio of two sufficiently small integers. This will result in
     --  inaccuracies for fixed point types that require more precision than is
!    --  available in Long_Long_Float.
  
     subtype Int32  is Interfaces.Integer_32;  use type Int32;
     subtype Int64  is Interfaces.Integer_64;  use type Int64;
--- 48,54 ----
     --  Note: we still use the floating-point I/O routines for types whose small
     --  is not the ratio of two sufficiently small integers. This will result in
     --  inaccuracies for fixed point types that require more precision than is
!    --  available in Long_Float.
  
     subtype Int32  is Interfaces.Integer_32;  use type Int32;
     subtype Int64  is Interfaces.Integer_64;  use type Int64;
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 63,70 ****
       Ada.Wide_Wide_Text_IO.Fixed_Aux
        (Int128, Scan_Fixed128, Set_Image_Fixed128);
  
!    package Aux_Long_Long_Float is new
!      Ada.Wide_Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Int32 is OK, where type Int64 is OK and where type Int128 is OK. These
--- 64,72 ----
       Ada.Wide_Wide_Text_IO.Fixed_Aux
        (Int128, Scan_Fixed128, Set_Image_Fixed128);
  
!    package Aux_Long_Float is new
!      Ada.Wide_Wide_Text_IO.Float_Aux
!        (Long_Float, Scan_Long_Float, Set_Image_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Int32 is OK, where type Int64 is OK and where type Int128 is OK. These
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 202,208 ****
                                  -Num'Small_Numerator,
                                  -Num'Small_Denominator));
        else
!          Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width);
        end if;
  
     exception
--- 204,210 ----
                                  -Num'Small_Numerator,
                                  -Num'Small_Denominator));
        else
!          Aux_Long_Float.Get (File, Long_Float (Item), Width);
        end if;
  
     exception
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 247,253 ****
                                   -Num'Small_Numerator,
                                   -Num'Small_Denominator));
        else
!          Aux_Long_Long_Float.Gets (S, Long_Long_Float (Item), Last);
        end if;
  
     exception
--- 249,255 ----
                                   -Num'Small_Numerator,
                                   -Num'Small_Denominator));
        else
!          Aux_Long_Float.Gets (S, Long_Float (Item), Last);
        end if;
  
     exception
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 279,286 ****
                       -Num'Small_Numerator, -Num'Small_Denominator,
                       For0, Num'Aft);
        else
!          Aux_Long_Long_Float.Put
!            (File, Long_Long_Float (Item), Fore, Aft, Exp);
        end if;
     end Put;
  
--- 281,287 ----
                       -Num'Small_Numerator, -Num'Small_Denominator,
                       For0, Num'Aft);
        else
!          Aux_Long_Float.Put (File, Long_Float (Item), Fore, Aft, Exp);
        end if;
     end Put;
  
*************** package body Ada.Wide_Wide_Text_IO.Fixed
*** 316,322 ****
                        -Num'Small_Numerator, -Num'Small_Denominator,
                        For0, Num'Aft);
        else
!          Aux_Long_Long_Float.Puts (S, Long_Long_Float (Item), Aft, Exp);
        end if;
  
        for J in S'Range loop
--- 317,323 ----
                        -Num'Small_Numerator, -Num'Small_Denominator,
                        For0, Num'Aft);
        else
!          Aux_Long_Float.Puts (S, Long_Float (Item), Aft, Exp);
        end if;
  
        for J in S'Range loop
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztflau.adb gcc-12.1.0/gcc/ada/libgnat/a-ztflau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztflau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztflau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,37 ****
  
  with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux;
  
! with System.Img_Real; use System.Img_Real;
  
  package body Ada.Wide_Wide_Text_IO.Float_Aux is
  
--- 31,37 ----
  
  with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux;
  
! with System.Img_Util; use System.Img_Util;
  
  package body Ada.Wide_Wide_Text_IO.Float_Aux is
  
*************** package body Ada.Wide_Wide_Text_IO.Float
*** 96,102 ****
        Ptr : Natural := 0;
  
     begin
!       Set_Image_Real (Long_Long_Float (Item), Buf, Ptr, Fore, Aft, Exp);
        Put_Item (File, Buf (1 .. Ptr));
     end Put;
  
--- 96,102 ----
        Ptr : Natural := 0;
  
     begin
!       Set_Image (Item, Buf, Ptr, Fore, Aft, Exp);
        Put_Item (File, Buf (1 .. Ptr));
     end Put;
  
*************** package body Ada.Wide_Wide_Text_IO.Float
*** 114,121 ****
        Ptr : Natural := 0;
  
     begin
!       Set_Image_Real
!         (Long_Long_Float (Item), Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp);
  
        if Ptr > To'Length then
           raise Layout_Error;
--- 114,120 ----
        Ptr : Natural := 0;
  
     begin
!       Set_Image (Item, Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp);
  
        if Ptr > To'Length then
           raise Layout_Error;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztflau.ads gcc-12.1.0/gcc/ada/libgnat/a-ztflau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ztflau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztflau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** private generic
*** 45,50 ****
--- 45,58 ----
        Ptr : not null access Integer;
        Max : Integer) return Num;
  
+    with procedure Set_Image
+      (V    : Num;
+       S    : in out String;
+       P    : in out Natural;
+       Fore : Natural;
+       Aft  : Natural;
+       Exp  : Natural);
+ 
  package Ada.Wide_Wide_Text_IO.Float_Aux is
  
     procedure Get
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztflio.adb gcc-12.1.0/gcc/ada/libgnat/a-ztflio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztflio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztflio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 30,35 ****
--- 30,38 ----
  ------------------------------------------------------------------------------
  
  with Ada.Wide_Wide_Text_IO.Float_Aux;
+ with System.Img_Flt;  use System.Img_Flt;
+ with System.Img_LFlt; use System.Img_LFlt;
+ with System.Img_LLF;  use System.Img_LLF;
  with System.Val_Flt;  use System.Val_Flt;
  with System.Val_LFlt; use System.Val_LFlt;
  with System.Val_LLF;  use System.Val_LLF;
*************** with System.WCh_WtS;  use System.WCh_WtS
*** 39,51 ****
  package body Ada.Wide_Wide_Text_IO.Float_IO is
  
     package Aux_Float is new
!       Ada.Wide_Wide_Text_IO.Float_Aux (Float, Scan_Float);
  
     package Aux_Long_Float is new
!       Ada.Wide_Wide_Text_IO.Float_Aux (Long_Float, Scan_Long_Float);
  
     package Aux_Long_Long_Float is new
!       Ada.Wide_Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Float is OK, where type Long_Float is OK and where type Long_Long_Float
--- 42,56 ----
  package body Ada.Wide_Wide_Text_IO.Float_IO is
  
     package Aux_Float is new
!      Ada.Wide_Wide_Text_IO.Float_Aux (Float, Scan_Float, Set_Image_Float);
  
     package Aux_Long_Float is new
!      Ada.Wide_Wide_Text_IO.Float_Aux
!        (Long_Float, Scan_Long_Float, Set_Image_Long_Float);
  
     package Aux_Long_Long_Float is new
!      Ada.Wide_Wide_Text_IO.Float_Aux
!        (Long_Long_Float, Scan_Long_Long_Float, Set_Image_Long_Long_Float);
  
     --  Throughout this generic body, we distinguish between the case where type
     --  Float is OK, where type Long_Float is OK and where type Long_Long_Float
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztgeau.adb gcc-12.1.0/gcc/ada/libgnat/a-ztgeau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztgeau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztgeau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Wide_Wide_Text_IO.Gener
*** 343,349 ****
        Ptr    : in out Integer)
     is
        Junk : Boolean;
-       pragma Unreferenced (Junk);
     begin
        Load_Extended_Digits (File, Buf, Ptr, Junk);
     end Load_Extended_Digits;
--- 343,348 ----
*************** package body Ada.Wide_Wide_Text_IO.Gener
*** 411,417 ****
        Buf  : out String;
        Ptr  : in out Natural)
     is
!       Loaded   : Boolean;
  
     begin
        --  Skip initial blanks and load possible sign
--- 410,416 ----
        Buf  : out String;
        Ptr  : in out Natural)
     is
!       Loaded : Boolean;
  
     begin
        --  Skip initial blanks and load possible sign
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztgeau.ads gcc-12.1.0/gcc/ada/libgnat/a-ztgeau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ztgeau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztgeau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztinau.adb gcc-12.1.0/gcc/ada/libgnat/a-ztinau.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztinau.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztinau.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ada.Wide_Wide_Text_IO.Integ
*** 54,60 ****
           Load_Integer (File, Buf, Stop);
        end if;
  
!       Item := Scan (Buf, Ptr'Access, Stop);
        Check_End_Of_Field (Buf, Stop, Ptr, Width);
     end Get;
  
--- 54,60 ----
           Load_Integer (File, Buf, Stop);
        end if;
  
!       Scan (Buf, Ptr'Access, Stop, Item);
        Check_End_Of_Field (Buf, Stop, Ptr, Width);
     end Get;
  
*************** package body Ada.Wide_Wide_Text_IO.Integ
*** 71,77 ****
  
     begin
        String_Skip (From, Pos);
!       Item := Scan (From, Pos'Access, From'Last);
        Last := Pos - 1;
  
     exception
--- 71,77 ----
  
     begin
        String_Skip (From, Pos);
!       Scan (From, Pos'Access, From'Last, Item);
        Last := Pos - 1;
  
     exception
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztinau.ads gcc-12.1.0/gcc/ada/libgnat/a-ztinau.ads
*** gcc-11.3.0/gcc/ada/libgnat/a-ztinau.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztinau.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 38,45 ****
  private generic
     type Num is (<>);
  
!    with function Scan
!      (Str : String; Ptr : not null access Integer; Max : Integer) return Num;
     with procedure Set_Image
       (V : Num; S : in out String; P : in out Natural);
     with procedure Set_Image_Width
--- 38,48 ----
  private generic
     type Num is (<>);
  
!    with procedure Scan
!      (Str : String;
!       Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Num);
     with procedure Set_Image
       (V : Num; S : in out String; P : in out Natural);
     with procedure Set_Image_Width
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztinio.adb gcc-12.1.0/gcc/ada/libgnat/a-ztinio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztinio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztinio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztinio__128.adb gcc-12.1.0/gcc/ada/libgnat/a-ztinio__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztinio__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztinio__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztmoio.adb gcc-12.1.0/gcc/ada/libgnat/a-ztmoio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztmoio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztmoio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-ztmoio__128.adb gcc-12.1.0/gcc/ada/libgnat/a-ztmoio__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-ztmoio__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-ztmoio__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-zttest.adb gcc-12.1.0/gcc/ada/libgnat/a-zttest.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-zttest.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-zttest.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/a-zzboio.adb gcc-12.1.0/gcc/ada/libgnat/a-zzboio.adb
*** gcc-11.3.0/gcc/ada/libgnat/a-zzboio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/a-zzboio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with Ada.Wide_Wide_Text_IO; use Ada.Wide_Wide_Text_IO;
  with Ada.Unchecked_Deallocation;
  
  package body Ada.Wide_Wide_Text_IO.Wide_Wide_Bounded_IO is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-allein.ads gcc-12.1.0/gcc/ada/libgnat/g-allein.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-allein.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-allein.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-alleve.adb gcc-12.1.0/gcc/ada/libgnat/g-alleve.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-alleve.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-alleve.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                         (Soft Binding Version)                           --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                         (Soft Binding Version)                           --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
*************** package body GNAT.Altivec.Low_Level_Vect
*** 258,264 ****
        pragma Convention (LL_Altivec, vspltisx);
  
        type Bit_Operation is
!         access function
          (Value  : Component_Type;
           Amount : Natural) return Component_Type;
  
--- 258,264 ----
        pragma Convention (LL_Altivec, vspltisx);
  
        type Bit_Operation is
!         not null access function
          (Value  : Component_Type;
           Amount : Natural) return Component_Type;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-alleve.ads gcc-12.1.0/gcc/ada/libgnat/g-alleve.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-alleve.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-alleve.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                         (Soft Binding Version)                           --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                         (Soft Binding Version)                           --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-alleve__hard.adb gcc-12.1.0/gcc/ada/libgnat/g-alleve__hard.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-alleve__hard.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-alleve__hard.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                          (Hard Binding Version)                          --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                          (Hard Binding Version)                          --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-alleve__hard.ads gcc-12.1.0/gcc/ada/libgnat/g-alleve__hard.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-alleve__hard.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-alleve__hard.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (Hard Binding Version)                          --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (Hard Binding Version)                          --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-altcon.adb gcc-12.1.0/gcc/ada/libgnat/g-altcon.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-altcon.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-altcon.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-altcon.ads gcc-12.1.0/gcc/ada/libgnat/g-altcon.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-altcon.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-altcon.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-altive.ads gcc-12.1.0/gcc/ada/libgnat/g-altive.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-altive.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-altive.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-alveop.adb gcc-12.1.0/gcc/ada/libgnat/g-alveop.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-alveop.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-alveop.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-alveop.ads gcc-12.1.0/gcc/ada/libgnat/g-alveop.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-alveop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-alveop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-alvety.ads gcc-12.1.0/gcc/ada/libgnat/g-alvety.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-alvety.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-alvety.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-alvevi.ads gcc-12.1.0/gcc/ada/libgnat/g-alvevi.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-alvevi.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-alvevi.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2005-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-arrspl.adb gcc-12.1.0/gcc/ada/libgnat/g-arrspl.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-arrspl.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-arrspl.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
*************** package body GNAT.Array_Split is
*** 181,200 ****
        then
           --  Whole string, or no separator used
  
!          return (Before => Array_End,
!                  After  => Array_End);
  
        elsif Index = 1 then
!          return (Before => Array_End,
!                  After  => S.D.Source (S.D.Slices (Index).Stop + 1));
  
        elsif Index = S.D.N_Slice then
!          return (Before => S.D.Source (S.D.Slices (Index).Start - 1),
!                  After  => Array_End);
  
        else
!          return (Before => S.D.Source (S.D.Slices (Index).Start - 1),
!                  After  => S.D.Source (S.D.Slices (Index).Stop + 1));
        end if;
     end Separators;
  
--- 181,200 ----
        then
           --  Whole string, or no separator used
  
!          return [Before => Array_End,
!                  After  => Array_End];
  
        elsif Index = 1 then
!          return [Before => Array_End,
!                  After  => S.D.Source (S.D.Slices (Index).Stop + 1)];
  
        elsif Index = S.D.N_Slice then
!          return [Before => S.D.Source (S.D.Slices (Index).Start - 1),
!                  After  => Array_End];
  
        else
!          return [Before => S.D.Source (S.D.Slices (Index).Start - 1),
!                  After  => S.D.Source (S.D.Slices (Index).Stop + 1)];
        end if;
     end Separators;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-arrspl.ads gcc-12.1.0/gcc/ada/libgnat/g-arrspl.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-arrspl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-arrspl.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-awk.adb gcc-12.1.0/gcc/ada/libgnat/g-awk.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-awk.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-awk.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-awk.ads gcc-12.1.0/gcc/ada/libgnat/g-awk.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-awk.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-awk.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-binenv.adb gcc-12.1.0/gcc/ada/libgnat/g-binenv.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-binenv.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-binenv.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2015-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2015-2022, 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- --
*************** package body GNAT.Bind_Environment is
*** 40,46 ****
     function Get (Key : String) return String is
        use type System.Address;
  
!       Bind_Env_Addr : System.Address;
        pragma Import (C, Bind_Env_Addr, "__gl_bind_env_addr");
        --  Variable provided by init.c/s-init.ads, and initialized by
        --  the binder generated file.
--- 40,46 ----
     function Get (Key : String) return String is
        use type System.Address;
  
!       Bind_Env_Addr : constant System.Address;
        pragma Import (C, Bind_Env_Addr, "__gl_bind_env_addr");
        --  Variable provided by init.c/s-init.ads, and initialized by
        --  the binder generated file.
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-binenv.ads gcc-12.1.0/gcc/ada/libgnat/g-binenv.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-binenv.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-binenv.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2015-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2015-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-brapre.ads gcc-12.1.0/gcc/ada/libgnat/g-brapre.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-brapre.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-brapre.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                         Copyright (C) 2019-2020, AdaCore                 --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                         Copyright (C) 2019-2022, AdaCore                 --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-bubsor.adb gcc-12.1.0/gcc/ada/libgnat/g-bubsor.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-bubsor.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-bubsor.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-bubsor.ads gcc-12.1.0/gcc/ada/libgnat/g-bubsor.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-bubsor.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-bubsor.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-busora.adb gcc-12.1.0/gcc/ada/libgnat/g-busora.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-busora.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-busora.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-busora.ads gcc-12.1.0/gcc/ada/libgnat/g-busora.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-busora.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-busora.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-busorg.adb gcc-12.1.0/gcc/ada/libgnat/g-busorg.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-busorg.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-busorg.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-busorg.ads gcc-12.1.0/gcc/ada/libgnat/g-busorg.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-busorg.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-busorg.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-byorma.adb gcc-12.1.0/gcc/ada/libgnat/g-byorma.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-byorma.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-byorma.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2006-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2006-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package body GNAT.Byte_Order_Mark is
  
     --------------
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-byorma.ads gcc-12.1.0/gcc/ada/libgnat/g-byorma.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-byorma.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-byorma.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2006-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2006-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 61,68 ****
  --     cases depend on the first character of the XML file being < so that the
  --     encoding of this character can be recognized.
  
- pragma Compiler_Unit_Warning;
- 
  package GNAT.Byte_Order_Mark is
  
     type BOM_Kind is
--- 61,66 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-bytswa.adb gcc-12.1.0/gcc/ada/libgnat/g-bytswa.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-bytswa.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-bytswa.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2006-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2006-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-bytswa.ads gcc-12.1.0/gcc/ada/libgnat/g-bytswa.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-bytswa.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-bytswa.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2006-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2006-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-calend.adb gcc-12.1.0/gcc/ada/libgnat/g-calend.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-calend.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-calend.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package body GNAT.Calendar is
*** 44,50 ****
        Month    : Month_Number;
        Day      : Day_Number;
        Day_Secs : Day_Duration;
-       pragma Unreferenced (Day_Secs);
     begin
        Split (Date, Year, Month, Day, Day_Secs);
        return Julian_Day (Year, Month, Day) - Julian_Day (Year, 1, 1) + 1;
--- 44,49 ----
*************** package body GNAT.Calendar is
*** 59,65 ****
        Month    : Month_Number;
        Day      : Day_Number;
        Day_Secs : Day_Duration;
-       pragma Unreferenced (Day_Secs);
     begin
        Split (Date, Year, Month, Day, Day_Secs);
        return Day_Name'Val ((Julian_Day (Year, Month, Day)) mod 7);
--- 58,63 ----
*************** package body GNAT.Calendar is
*** 77,83 ****
        Minute     : Minute_Number;
        Second     : Second_Number;
        Sub_Second : Second_Duration;
-       pragma Unreferenced (Year, Month, Day, Minute, Second, Sub_Second);
     begin
        Split (Date, Year, Month, Day, Hour, Minute, Second, Sub_Second);
        return Hour;
--- 75,80 ----
*************** package body GNAT.Calendar is
*** 137,143 ****
        Minute     : Minute_Number;
        Second     : Second_Number;
        Sub_Second : Second_Duration;
-       pragma Unreferenced (Year, Month, Day, Hour, Second, Sub_Second);
     begin
        Split (Date, Year, Month, Day, Hour, Minute, Second, Sub_Second);
        return Minute;
--- 134,139 ----
*************** package body GNAT.Calendar is
*** 155,161 ****
        Minute     : Minute_Number;
        Second     : Second_Number;
        Sub_Second : Second_Duration;
-       pragma Unreferenced (Year, Month, Day, Hour, Minute, Sub_Second);
     begin
        Split (Date, Year, Month, Day, Hour, Minute, Second, Sub_Second);
        return Second;
--- 151,156 ----
*************** package body GNAT.Calendar is
*** 222,229 ****
        Ds : Day_Duration;
        Le : Boolean;
  
-       pragma Unreferenced (Ds, Le);
- 
     begin
        --  Even though the input time zone is UTC (0), the flag Use_TZ will
        --  ensure that Split picks up the local time zone. ???But Use_TZ is
--- 217,222 ----
*************** package body GNAT.Calendar is
*** 257,263 ****
        Minute     : Minute_Number;
        Second     : Second_Number;
        Sub_Second : Second_Duration;
-       pragma Unreferenced (Year, Month, Day, Hour, Minute, Second);
     begin
        Split (Date, Year, Month, Day, Hour, Minute, Second, Sub_Second);
        return Sub_Second;
--- 250,255 ----
*************** package body GNAT.Calendar is
*** 398,404 ****
     function Week_In_Year (Date : Time) return Week_In_Year_Number is
        Year : Year_Number;
        Week : Week_In_Year_Number;
-       pragma Unreferenced (Year);
     begin
        Year_Week_In_Year (Date, Year, Week);
        return Week;
--- 390,395 ----
*************** package body GNAT.Calendar is
*** 423,430 ****
        Shift      : Week_In_Year_Number;
        Start_Week : Week_In_Year_Number;
  
-       pragma Unreferenced (Hour, Minute, Second, Sub_Second);
- 
        function Is_Leap (Year : Year_Number) return Boolean;
        --  Return True if Year denotes a leap year. Leap centennial years are
        --  properly handled.
--- 414,419 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-calend.ads gcc-12.1.0/gcc/ada/libgnat/g-calend.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-calend.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-calend.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-casuti.adb gcc-12.1.0/gcc/ada/libgnat/g-casuti.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-casuti.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-casuti.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 29,38 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This is a dummy body, required because if we remove the body we have
! --  bootstrap path problems (this unit used to have a body, and if we do not
! --  supply a dummy body, the old incorrect body is picked up during the
! --  bootstrap process.
  
! package body GNAT.Case_Util is
! end GNAT.Case_Util;
--- 29,36 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package does not require a body, since it is a package renaming. We
! --  provide a dummy file containing a No_Body pragma so that previous versions
! --  of the body (which did exist) will not interfere.
  
! pragma No_Body;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-casuti.ads gcc-12.1.0/gcc/ada/libgnat/g-casuti.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-casuti.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-casuti.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 40,77 ****
  
  with System.Case_Util;
  
! package GNAT.Case_Util is
!    pragma Pure;
!    pragma Elaborate_Body;
!    --  The elaborate body is because we have a dummy body to deal with
!    --  bootstrap path problems (we used to have a real body, and now we don't
!    --  need it any more, but the bootstrap requires that we have a dummy body,
!    --  since otherwise the old body gets picked up.
! 
!    --  Note: all the following functions handle the full Latin-1 set
! 
!    function To_Upper (A : Character) return Character
!      renames System.Case_Util.To_Upper;
!    --  Converts A to upper case if it is a lower case letter, otherwise
!    --  returns the input argument unchanged.
! 
!    procedure To_Upper (A : in out String)
!      renames System.Case_Util.To_Upper;
!    --  Folds all characters of string A to upper case
! 
!    function To_Lower (A : Character) return Character
!      renames System.Case_Util.To_Lower;
!    --  Converts A to lower case if it is an upper case letter, otherwise
!    --  returns the input argument unchanged.
! 
!    procedure To_Lower (A : in out String)
!      renames System.Case_Util.To_Lower;
!    --  Folds all characters of string A to lower case
! 
!    procedure To_Mixed (A : in out String)
!      renames System.Case_Util.To_Mixed;
!    --  Converts A to mixed case (i.e. lower case, except for initial
!    --  character and any character after an underscore, which are
!    --  converted to upper case.
! 
! end GNAT.Case_Util;
--- 40,43 ----
  
  with System.Case_Util;
  
! package GNAT.Case_Util renames System.Case_Util;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-catiio.adb gcc-12.1.0/gcc/ada/libgnat/g-catiio.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-catiio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-catiio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package body GNAT.Calendar.Time_IO is
*** 627,634 ****
        subtype String3 is String (1 .. 3);
        Abbrev_Upper_Month_Names :
          constant array (Ada.Calendar.Month_Number) of String3 :=
!          ("JAN", "FEB", "MAR", "APR", "MAY", "JUN",
!           "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");
        --  Short version of the month names, used when parsing date strings
  
        S : String := Str;
--- 627,634 ----
        subtype String3 is String (1 .. 3);
        Abbrev_Upper_Month_Names :
          constant array (Ada.Calendar.Month_Number) of String3 :=
!          ["JAN", "FEB", "MAR", "APR", "MAY", "JUN",
!           "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
        --  Short version of the month names, used when parsing date strings
  
        S : String := Str;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-catiio.ads gcc-12.1.0/gcc/ada/libgnat/g-catiio.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-catiio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-catiio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-cgi.adb gcc-12.1.0/gcc/ada/libgnat/g-cgi.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-cgi.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-cgi.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                      Copyright (C) 2001-2020, AdaCore                    --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                      Copyright (C) 2001-2022, AdaCore                    --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-cgi.ads gcc-12.1.0/gcc/ada/libgnat/g-cgi.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-cgi.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-cgi.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-cgicoo.adb gcc-12.1.0/gcc/ada/libgnat/g-cgicoo.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-cgicoo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-cgicoo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-cgicoo.ads gcc-12.1.0/gcc/ada/libgnat/g-cgicoo.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-cgicoo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-cgicoo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-cgideb.adb gcc-12.1.0/gcc/ada/libgnat/g-cgideb.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-cgideb.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-cgideb.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package body GNAT.CGI.Debug is
*** 167,173 ****
  
     package body HTML_IO is
  
!       NL : constant String := (1 => ASCII.LF);
  
        function Bold (S : String) return String;
        --  Returns S as an HTML bold string
--- 167,173 ----
  
     package body HTML_IO is
  
!       NL : constant String := [ASCII.LF];
  
        function Bold (S : String) return String;
        --  Returns S as an HTML bold string
*************** package body GNAT.CGI.Debug is
*** 270,276 ****
  
        function Title (IO : Format; Str : String) return String is
           Spaces : constant Natural := (80 - Str'Length) / 2;
!          Indent : constant String (1 .. Spaces) := (others => ' ');
        begin
           return Indent & Str & New_Line (IO);
        end Title;
--- 270,276 ----
  
        function Title (IO : Format; Str : String) return String is
           Spaces : constant Natural := (80 - Str'Length) / 2;
!          Indent : constant String (1 .. Spaces) := [others => ' '];
        begin
           return Indent & Str & New_Line (IO);
        end Title;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-cgideb.ads gcc-12.1.0/gcc/ada/libgnat/g-cgideb.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-cgideb.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-cgideb.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-comlin.adb gcc-12.1.0/gcc/ada/libgnat/g-comlin.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-comlin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-comlin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
*************** package body GNAT.Command_Line is
*** 465,472 ****
  
        if Do_Expansion then
           declare
!             Arg   : constant String :=
!                       Argument (Parser, Parser.Current_Argument - 1);
           begin
              for Index in Arg'Range loop
                 if Arg (Index) in '*' | '?' | '[' then
--- 465,472 ----
  
        if Do_Expansion then
           declare
!             Arg : constant String :=
!                     Argument (Parser, Parser.Current_Argument - 1);
           begin
              for Index in Arg'Range loop
                 if Arg (Index) in '*' | '?' | '[' then
*************** package body GNAT.Command_Line is
*** 1063,1069 ****
        Parser.In_Expansion     := False;
        Parser.Switch_Character := Switch_Char;
        Parser.Stop_At_First    := Stop_At_First_Non_Switch;
!       Parser.Section          := (others => 1);
  
        --  If we are using sections, we have to preprocess the command line to
        --  delimit them. A section can be repeated, so we just give each item
--- 1063,1069 ----
        Parser.In_Expansion     := False;
        Parser.Switch_Character := Switch_Char;
        Parser.Stop_At_First    := Stop_At_First_Non_Switch;
!       Parser.Section          := [others => 1];
  
        --  If we are using sections, we have to preprocess the command line to
        --  delimit them. A section can be repeated, so we just give each item
*************** package body GNAT.Command_Line is
*** 1257,1263 ****
        Expanded : String;
        Section  : String := "")
     is
!       Def    : Alias_Definition;
  
     begin
        if Config = null then
--- 1257,1263 ----
        Expanded : String;
        Section  : String := "")
     is
!       Def : Alias_Definition;
  
     begin
        if Config = null then
*************** package body GNAT.Command_Line is
*** 2235,2241 ****
        Add_Before : Boolean   := False)
     is
        Success : Boolean;
-       pragma Unreferenced (Success);
     begin
        Add_Switch (Cmd, Switch, Parameter, Separator,
                    Section, Add_Before, Success);
--- 2235,2240 ----
*************** package body GNAT.Command_Line is
*** 2453,2459 ****
        Section       : String := "")
     is
        Success : Boolean;
-       pragma Unreferenced (Success);
     begin
        Remove_Switch (Cmd, Switch, Remove_All, Has_Parameter, Section, Success);
     end Remove_Switch;
--- 2452,2457 ----
*************** package body GNAT.Command_Line is
*** 3225,3231 ****
                 if N /= "" then
                    Put (" ");
                    Put (N);
!                   Put ((1 .. Max_Len - N'Length + 1 => ' '));
  
                    if Config.Switches (S).Help /= null then
                       Put (Config.Switches (S).Help.all);
--- 3223,3229 ----
                 if N /= "" then
                    Put (" ");
                    Put (N);
!                   Put ([1 .. Max_Len - N'Length + 1 => ' ']);
  
                    if Config.Switches (S).Help /= null then
                       Put (Config.Switches (S).Help.all);
*************** package body GNAT.Command_Line is
*** 3243,3250 ****
                 if Config.Aliases (A).Section.all = Section then
                    Put (" ");
                    Put (Config.Aliases (A).Alias.all);
!                   Put ((1 .. Max_Len - Config.Aliases (A).Alias'Length + 1
!                        => ' '));
                    Put ("Equivalent to " & Config.Aliases (A).Expansion.all);
                    New_Line;
                 end if;
--- 3241,3248 ----
                 if Config.Aliases (A).Section.all = Section then
                    Put (" ");
                    Put (Config.Aliases (A).Alias.all);
!                   Put ([1 .. Max_Len - Config.Aliases (A).Alias'Length + 1
!                        => ' ']);
                    Put ("Equivalent to " & Config.Aliases (A).Expansion.all);
                    New_Line;
                 end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-comlin.ads gcc-12.1.0/gcc/ada/libgnat/g-comlin.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-comlin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-comlin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** private
*** 1097,1107 ****
        --  This type and this variable are provided to store the current switch
        --  and parameter.
  
!       Is_Switch : Is_Switch_Type (1 .. Arg_Count) := (others => False);
        --  Indicates wich arguments on the command line are considered not be
        --  switches or parameters to switches (leaving e.g. filenames,...)
  
!       Section : Section_Type (1 .. Arg_Count) := (others => 1);
        --  Contains the number of the section associated with the current
        --  switch. If this number is 0, then it is a section delimiter, which is
        --  never returned by GetOpt.
--- 1097,1107 ----
        --  This type and this variable are provided to store the current switch
        --  and parameter.
  
!       Is_Switch : Is_Switch_Type (1 .. Arg_Count) := [others => False];
        --  Indicates wich arguments on the command line are considered not be
        --  switches or parameters to switches (leaving e.g. filenames,...)
  
!       Section : Section_Type (1 .. Arg_Count) := [others => 1];
        --  Contains the number of the section associated with the current
        --  switch. If this number is 0, then it is a section delimiter, which is
        --  never returned by GetOpt.
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-comver.adb gcc-12.1.0/gcc/ada/libgnat/g-comver.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-comver.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-comver.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 33,38 ****
--- 33,40 ----
  --  GNAT compiler used to compile the program. It relies on the generated
  --  constant in the binder generated package that records this information.
  
+ with System;
+ 
  package body GNAT.Compiler_Version is
  
     Ver_Len_Max : constant := 256;
*************** package body GNAT.Compiler_Version is
*** 43,50 ****
     --  This is logically a reference to Gnatvsn.Ver_Prefix but we cannot
     --  import this directly since run-time units cannot WITH compiler units.
  
     GNAT_Version : constant String (1 .. Ver_Len_Max + Ver_Prefix'Length);
!    pragma Import (C, GNAT_Version, "__gnat_version");
  
     -------------
     -- Version --
--- 45,59 ----
     --  This is logically a reference to Gnatvsn.Ver_Prefix but we cannot
     --  import this directly since run-time units cannot WITH compiler units.
  
+    GNAT_Version_Address : constant System.Address;
+    pragma Import (C, GNAT_Version_Address, "__gnat_version_address");
+ 
     GNAT_Version : constant String (1 .. Ver_Len_Max + Ver_Prefix'Length);
!    pragma Import (Ada, GNAT_Version);
!    for GNAT_Version'Address use GNAT_Version_Address;
!    --  Use a level of indirection via __gnat_version_address to avoid LTO
!    --  type mismtch warnings between two string objects of potentially
!    --  different size.
  
     -------------
     -- Version --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-comver.ads gcc-12.1.0/gcc/ada/libgnat/g-comver.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-comver.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-comver.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-cppexc.adb gcc-12.1.0/gcc/ada/libgnat/g-cppexc.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-cppexc.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-cppexc.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                        Copyright (C) 2013-2020, AdaCore                  --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                        Copyright (C) 2013-2022, AdaCore                  --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-cppexc.ads gcc-12.1.0/gcc/ada/libgnat/g-cppexc.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-cppexc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-cppexc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                        Copyright (C) 2013-2020, AdaCore                  --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                        Copyright (C) 2013-2022, AdaCore                  --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-crc32.adb gcc-12.1.0/gcc/ada/libgnat/g-crc32.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-crc32.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-crc32.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-crc32.ads gcc-12.1.0/gcc/ada/libgnat/g-crc32.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-crc32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-crc32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2004-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2004-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-ctrl_c.adb gcc-12.1.0/gcc/ada/libgnat/g-ctrl_c.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-ctrl_c.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-ctrl_c.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                      Copyright (C) 2002-2020, AdaCore                    --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                      Copyright (C) 2002-2022, AdaCore                    --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-ctrl_c.ads gcc-12.1.0/gcc/ada/libgnat/g-ctrl_c.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-ctrl_c.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-ctrl_c.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                      Copyright (C) 2002-2020, AdaCore                    --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                      Copyright (C) 2002-2022, AdaCore                    --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-curexc.ads gcc-12.1.0/gcc/ada/libgnat/g-curexc.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-curexc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-curexc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                      Copyright (C) 1996-2020, AdaCore                    --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                      Copyright (C) 1996-2022, AdaCore                    --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-debpoo.adb gcc-12.1.0/gcc/ada/libgnat/g-debpoo.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-debpoo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-debpoo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body GNAT.Debug_Pools is
*** 362,368 ****
     --  These procedures are used as markers when computing the stacktraces,
     --  so that addresses in the debug pool itself are not reported to the user.
  
!    Code_Address_For_Allocate_End    : System.Address;
     Code_Address_For_Deallocate_End  : System.Address;
     Code_Address_For_Dereference_End : System.Address;
     --  Taking the address of the above procedures will not work on some
--- 362,368 ----
     --  These procedures are used as markers when computing the stacktraces,
     --  so that addresses in the debug pool itself are not reported to the user.
  
!    Code_Address_For_Allocate_End    : System.Address := System.Null_Address;
     Code_Address_For_Deallocate_End  : System.Address;
     Code_Address_For_Dereference_End : System.Address;
     --  Taking the address of the above procedures will not work on some
*************** package body GNAT.Debug_Pools is
*** 777,783 ****
        function Is_Valid_Or_Handled
          (Storage : System.Address;
           Valid   : Boolean) return Boolean is
!          Int_Storage  : constant Integer_Address := To_Integer (Storage);
  
        begin
           --  The pool only returns addresses aligned on Storage_Alignment so
--- 777,783 ----
        function Is_Valid_Or_Handled
          (Storage : System.Address;
           Valid   : Boolean) return Boolean is
!          Int_Storage : constant Integer_Address := To_Integer (Storage);
  
        begin
           --  The pool only returns addresses aligned on Storage_Alignment so
*************** package body GNAT.Debug_Pools is
*** 1148,1154 ****
        Modulo : constant Storage_Count :=
                   Size_In_Storage_Elements mod Dead_Bytes;
     begin
!       M.all := (others => Dead);
  
        --  Any bytes left (up to three of them)
  
--- 1148,1154 ----
        Modulo : constant Storage_Count :=
                   Size_In_Storage_Elements mod Dead_Bytes;
     begin
!       M.all := [others => Dead];
  
        --  Any bytes left (up to three of them)
  
*************** package body GNAT.Debug_Pools is
*** 1942,1948 ****
           Grand_Total : Float;
  
           Max  : array (1 .. Size) of Traceback_Htable_Elem_Ptr :=
!            (others => null);
           --  Sorted array for the biggest memory users
  
           Allocated_In_Pool : Byte_Count;
--- 1942,1948 ----
           Grand_Total : Float;
  
           Max  : array (1 .. Size) of Traceback_Htable_Elem_Ptr :=
!            [others => null];
           --  Sorted array for the biggest memory users
  
           Allocated_In_Pool : Byte_Count;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-debpoo.ads gcc-12.1.0/gcc/ada/libgnat/g-debpoo.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-debpoo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-debpoo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-debuti.adb gcc-12.1.0/gcc/ada/libgnat/g-debuti.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-debuti.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-debuti.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-debuti.ads gcc-12.1.0/gcc/ada/libgnat/g-debuti.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-debuti.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-debuti.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-decstr.adb gcc-12.1.0/gcc/ada/libgnat/g-decstr.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-decstr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-decstr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-decstr.ads gcc-12.1.0/gcc/ada/libgnat/g-decstr.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-decstr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-decstr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-deutst.ads gcc-12.1.0/gcc/ada/libgnat/g-deutst.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-deutst.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-deutst.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2007-2020, AdaCore                   --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2007-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-diopit.adb gcc-12.1.0/gcc/ada/libgnat/g-diopit.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-diopit.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-diopit.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-diopit.ads gcc-12.1.0/gcc/ada/libgnat/g-diopit.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-diopit.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-diopit.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-dirope.adb gcc-12.1.0/gcc/ada/libgnat/g-dirope.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-dirope.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-dirope.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-dirope.ads gcc-12.1.0/gcc/ada/libgnat/g-dirope.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-dirope.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-dirope.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-dynhta.adb gcc-12.1.0/gcc/ada/libgnat/g-dynhta.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-dynhta.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-dynhta.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-dynhta.ads gcc-12.1.0/gcc/ada/libgnat/g-dynhta.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-dynhta.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-dynhta.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 46,52 ****
  --  GNAT.HTable to keep as much coherency as possible between these two
  --  related units.
  
! pragma Compiler_Unit_Warning;
  
  package GNAT.Dynamic_HTables is
  
--- 46,53 ----
  --  GNAT.HTable to keep as much coherency as possible between these two
  --  related units.
  
! --  Note: this unit is used during bootstrap, see ADA_GENERATED_FILES in
! --  gcc-interface/Make-lang.in for details on the constraints.
  
  package GNAT.Dynamic_HTables is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-dyntab.adb gcc-12.1.0/gcc/ada/libgnat/g-dyntab.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-dyntab.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-dyntab.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with GNAT.Heap_Sort_G;
  
  with Ada.Unchecked_Deallocation;
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-dyntab.ads gcc-12.1.0/gcc/ada/libgnat/g-dyntab.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-dyntab.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-dyntab.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 45,51 ****
  --     GNAT.Table
  --     Table (the compiler unit)
  
! pragma Compiler_Unit_Warning;
  
  with Ada.Unchecked_Conversion;
  
--- 45,52 ----
  --     GNAT.Table
  --     Table (the compiler unit)
  
! --  Note: this unit is used during bootstrap, see ADA_GENERATED_FILES in
! --  gcc-interface/Make-lang.in for details on the constraints.
  
  with Ada.Unchecked_Conversion;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-eacodu.adb gcc-12.1.0/gcc/ada/libgnat/g-eacodu.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-eacodu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-eacodu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-encstr.adb gcc-12.1.0/gcc/ada/libgnat/g-encstr.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-encstr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-encstr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2007-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-encstr.ads gcc-12.1.0/gcc/ada/libgnat/g-encstr.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-encstr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-encstr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-enutst.ads gcc-12.1.0/gcc/ada/libgnat/g-enutst.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-enutst.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-enutst.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2007-2020, AdaCore                   --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2007-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-excact.adb gcc-12.1.0/gcc/ada/libgnat/g-excact.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-excact.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-excact.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-excact.ads gcc-12.1.0/gcc/ada/libgnat/g-excact.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-excact.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-excact.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-except.ads gcc-12.1.0/gcc/ada/libgnat/g-except.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-except.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-except.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-exctra.adb gcc-12.1.0/gcc/ada/libgnat/g-exctra.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-exctra.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-exctra.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-exctra.ads gcc-12.1.0/gcc/ada/libgnat/g-exctra.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-exctra.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-exctra.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-expect.adb gcc-12.1.0/gcc/ada/libgnat/g-expect.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-expect.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-expect.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package body GNAT.Expect is
*** 193,199 ****
        Str       : String;
        Filter_On : Filter_Type)
     is
!       Current_Filter  : Filter_List;
  
     begin
        if Pid.Filters_Lock = 0 then
--- 193,199 ----
        Str       : String;
        Filter_On : Filter_Type)
     is
!       Current_Filter : Filter_List;
  
     begin
        if Pid.Filters_Lock = 0 then
*************** package body GNAT.Expect is
*** 264,270 ****
  
     procedure Close (Descriptor : in out Process_Descriptor) is
        Status : Integer;
-       pragma Unreferenced (Status);
     begin
        Close (Descriptor, Status);
     end Close;
--- 264,269 ----
*************** package body GNAT.Expect is
*** 351,357 ****
        Full_Buffer : Boolean := False)
     is
        N           : Expect_Match;
!       Descriptors : Array_Of_Pd := (1 => Descriptor'Unrestricted_Access);
        Try_Until   : constant Time := Clock + Duration (Timeout) / 1000.0;
        Timeout_Tmp : Integer := Timeout;
  
--- 350,356 ----
        Full_Buffer : Boolean := False)
     is
        N           : Expect_Match;
!       Descriptors : Array_Of_Pd := [Descriptor'Unrestricted_Access];
        Try_Until   : constant Time := Clock + Duration (Timeout) / 1000.0;
        Timeout_Tmp : Integer := Timeout;
  
*************** package body GNAT.Expect is
*** 508,514 ****
        Full_Buffer : Boolean := False)
     is
        N           : Expect_Match;
!       Descriptors : Array_Of_Pd := (1 => Descriptor'Unrestricted_Access);
  
     begin
        pragma Assert (Matched'First = 0);
--- 507,513 ----
        Full_Buffer : Boolean := False)
     is
        N           : Expect_Match;
!       Descriptors : Array_Of_Pd := [Descriptor'Unrestricted_Access];
  
     begin
        pragma Assert (Matched'First = 0);
*************** package body GNAT.Expect is
*** 976,982 ****
  
        declare
           Result : Expect_Match;
-          pragma Unreferenced (Result);
  
        begin
           --  This loop runs until the call to Expect raises Process_Died
--- 975,980 ----
*************** package body GNAT.Expect is
*** 1078,1084 ****
  
     function Has_Process (Regexp : Multiprocess_Regexp_Array) return Boolean is
     begin
!       return Regexp /= (Regexp'Range => (null, null));
     end Has_Process;
  
     ---------------
--- 1076,1082 ----
  
     function Has_Process (Regexp : Multiprocess_Regexp_Array) return Boolean is
     begin
!       return Regexp /= [Regexp'Range => (null, null)];
     end Has_Process;
  
     ---------------
*************** package body GNAT.Expect is
*** 1294,1301 ****
        Add_LF       : Boolean := True;
        Empty_Buffer : Boolean := False)
     is
!       Line_Feed   : aliased constant String := (1 .. 1 => ASCII.LF);
!       Descriptors : Array_Of_Pd := (1 => Descriptor'Unrestricted_Access);
  
        Result  : Expect_Match;
        Discard : Natural;
--- 1292,1299 ----
        Add_LF       : Boolean := True;
        Empty_Buffer : Boolean := False)
     is
!       Line_Feed   : aliased constant String := [1 .. 1 => ASCII.LF];
!       Descriptors : Array_Of_Pd := [Descriptor'Unrestricted_Access];
  
        Result  : Expect_Match;
        Discard : Natural;
*************** package body GNAT.Expect is
*** 1439,1445 ****
        Pipe3      : not null access Pipe_Type)
     is
        Status : Boolean;
!       pragma Unreferenced (Status);
  
     begin
        --  Create the pipes
--- 1437,1443 ----
        Pipe3      : not null access Pipe_Type)
     is
        Status : Boolean;
!       pragma Warnings (Off, "modified by call, but value overwritten");
  
     begin
        --  Create the pipes
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-expect.ads gcc-12.1.0/gcc/ada/libgnat/g-expect.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-expect.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-expect.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-exptty.adb gcc-12.1.0/gcc/ada/libgnat/g-exptty.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-exptty.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-exptty.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                    Copyright (C) 2000-2020, AdaCore                      --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                    Copyright (C) 2000-2022, AdaCore                      --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-exptty.ads gcc-12.1.0/gcc/ada/libgnat/g-exptty.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-exptty.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-exptty.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                    Copyright (C) 2000-2020, AdaCore                      --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                    Copyright (C) 2000-2022, AdaCore                      --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-flocon.ads gcc-12.1.0/gcc/ada/libgnat/g-flocon.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-flocon.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-flocon.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-forstr.adb gcc-12.1.0/gcc/ada/libgnat/g-forstr.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-forstr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-forstr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2014-2022, 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- --
*************** package body GNAT.Formatted_String is
*** 131,137 ****
        return Formatted_String'
          (Finalization.Controlled with
             D => new Data'(Format'Length, 1, 1,
!              Null_Unbounded_String, 0, 0, (0, 0), Format));
     end "+";
  
     ---------
--- 131,137 ----
        return Formatted_String'
          (Finalization.Controlled with
             D => new Data'(Format'Length, 1, 1,
!              Null_Unbounded_String, 0, 0, [0, 0], Format));
     end "+";
  
     ---------
*************** package body GNAT.Formatted_String is
*** 420,430 ****
  
        --  Zero padding if required and possible
  
!       if F_Spec.Left_Justify = False
          and then F_Spec.Zero_Pad
          and then F_Spec.Width > Len + Value'First - S
        then
!          Append (Res, String'((F_Spec.Width - Len + Value'First - S) * '0'));
        end if;
  
        --  Add the value now
--- 420,430 ----
  
        --  Zero padding if required and possible
  
!       if not F_Spec.Left_Justify
          and then F_Spec.Zero_Pad
          and then F_Spec.Width > Len + Value'First - S
        then
!          Append (Res, String'((F_Spec.Width - (Len + Value'First - S)) * '0'));
        end if;
  
        --  Add the value now
*************** package body GNAT.Formatted_String is
*** 433,439 ****
  
        declare
           R : String (1 .. Natural'Max (Natural'Max (F_Spec.Width, Len),
!                                        Length (Res))) := (others => ' ');
        begin
           if F_Spec.Left_Justify then
              R (1 .. Length (Res)) := To_String (Res);
--- 433,439 ----
  
        declare
           R : String (1 .. Natural'Max (Natural'Max (F_Spec.Width, Len),
!                                        Length (Res))) := [others => ' '];
        begin
           if F_Spec.Left_Justify then
              R (1 .. Length (Res)) := To_String (Res);
*************** package body GNAT.Formatted_String is
*** 519,525 ****
           J := J + 1;
        end loop;
  
!       if F (J) /= '%' or else J = F'Last then
           raise Format_Error with "no format specifier found for parameter"
             & Positive'Image (Format.D.Current);
        end if;
--- 519,525 ----
           J := J + 1;
        end loop;
  
!       if J >= F'Last or else F (J) /= '%'  then
           raise Format_Error with "no format specifier found for parameter"
             & Positive'Image (Format.D.Current);
        end if;
*************** package body GNAT.Formatted_String is
*** 785,791 ****
  
           elsif F.Precision > E - S + 1 then
              Len := F.Precision - (E - S + 1);
!             Buffer (S - Len .. S - 1) := (others => '0');
              S := S - Len;
           end if;
  
--- 785,791 ----
  
           elsif F.Precision > E - S + 1 then
              Len := F.Precision - (E - S + 1);
!             Buffer (S - Len .. S - 1) := [others => '0'];
              S := S - Len;
           end if;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-forstr.ads gcc-12.1.0/gcc/ada/libgnat/g-forstr.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-forstr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-forstr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2014-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-graphs.adb gcc-12.1.0/gcc/ada/libgnat/g-graphs.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-graphs.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-graphs.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2018-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2018-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-graphs.ads gcc-12.1.0/gcc/ada/libgnat/g-graphs.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-graphs.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-graphs.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2018-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2018-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! pragma Compiler_Unit_Warning;
  
  with GNAT.Dynamic_HTables; use GNAT.Dynamic_HTables;
  with GNAT.Lists;           use GNAT.Lists;
--- 29,36 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Note: this unit is used during bootstrap, see ADA_GENERATED_FILES in
! --  gcc-interface/Make-lang.in for details on the constraints.
  
  with GNAT.Dynamic_HTables; use GNAT.Dynamic_HTables;
  with GNAT.Lists;           use GNAT.Lists;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-heasor.adb gcc-12.1.0/gcc/ada/libgnat/g-heasor.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-heasor.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-heasor.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-heasor.ads gcc-12.1.0/gcc/ada/libgnat/g-heasor.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-heasor.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-heasor.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-hesora.adb gcc-12.1.0/gcc/ada/libgnat/g-hesora.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-hesora.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-hesora.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package body GNAT.Heap_Sort_A is
  
     ----------
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-hesora.ads gcc-12.1.0/gcc/ada/libgnat/g-hesora.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-hesora.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-hesora.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 40,47 ****
  --  worst case and is in place with no additional storage required. See
  --  the body for exact details of the algorithm used.
  
- pragma Compiler_Unit_Warning;
- 
  package GNAT.Heap_Sort_A is
     pragma Preelaborate;
  
--- 40,45 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-hesorg.adb gcc-12.1.0/gcc/ada/libgnat/g-hesorg.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-hesorg.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-hesorg.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-hesorg.ads gcc-12.1.0/gcc/ada/libgnat/g-hesorg.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-hesorg.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-hesorg.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-htable.adb gcc-12.1.0/gcc/ada/libgnat/g-htable.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-htable.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-htable.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 34,40 ****
  --  supply a dummy body, the old incorrect body is picked up during the
  --  bootstrap process).
  
- pragma Compiler_Unit_Warning;
- 
  package body GNAT.HTable is
  end GNAT.HTable;
--- 34,38 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-htable.ads gcc-12.1.0/gcc/ada/libgnat/g-htable.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-htable.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-htable.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 39,46 ****
  
  --  See file s-htable.ads for full documentation of the interface
  
- pragma Compiler_Unit_Warning;
- 
  with System.HTable;
  
  package GNAT.HTable is
--- 39,44 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-io-put__vxworks.adb gcc-12.1.0/gcc/ada/libgnat/g-io-put__vxworks.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-io-put__vxworks.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-io-put__vxworks.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,53 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                              G N A T . I O                               --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --                     Copyright (C) 1995-2020, AdaCore                     --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  vxworks zfp version of Put (C : Character)
- 
- with Interfaces.C; use Interfaces.C;
- 
- separate (GNAT.IO)
- procedure Put (C : Character) is
- 
-    function ioGlobalStdGet
-      (File : int) return int;
-    pragma Import (C, ioGlobalStdGet, "ioGlobalStdGet");
- 
-    procedure fdprintf
-      (File   : int;
-       Format : String;
-       Value  : Character);
-    pragma Import (C, fdprintf, "fdprintf");
- 
-    Stdout_ID : constant int := 1;
- 
- begin
-    fdprintf (ioGlobalStdGet (Stdout_ID), "%c" & ASCII.NUL, C);
- end Put;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-io.adb gcc-12.1.0/gcc/ada/libgnat/g-io.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-io.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-io.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-io.ads gcc-12.1.0/gcc/ada/libgnat/g-io.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-io.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-io.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-io_aux.adb gcc-12.1.0/gcc/ada/libgnat/g-io_aux.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-io_aux.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-io_aux.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-io_aux.ads gcc-12.1.0/gcc/ada/libgnat/g-io_aux.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-io_aux.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-io_aux.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-lists.adb gcc-12.1.0/gcc/ada/libgnat/g-lists.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-lists.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-lists.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2018-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2018-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-lists.ads gcc-12.1.0/gcc/ada/libgnat/g-lists.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-lists.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-lists.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2018-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2018-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! pragma Compiler_Unit_Warning;
  
  package GNAT.Lists is
  
--- 29,36 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Note: this unit is used during bootstrap, see ADA_GENERATED_FILES in
! --  gcc-interface/Make-lang.in for details on the constraints.
  
  package GNAT.Lists is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-locfil.adb gcc-12.1.0/gcc/ada/libgnat/g-locfil.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-locfil.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-locfil.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-locfil.ads gcc-12.1.0/gcc/ada/libgnat/g-locfil.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-locfil.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-locfil.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-mbdira.adb gcc-12.1.0/gcc/ada/libgnat/g-mbdira.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-mbdira.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-mbdira.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-mbdira.ads gcc-12.1.0/gcc/ada/libgnat/g-mbdira.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-mbdira.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-mbdira.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-mbflra.adb gcc-12.1.0/gcc/ada/libgnat/g-mbflra.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-mbflra.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-mbflra.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body GNAT.MBBS_Float_Random is
*** 118,124 ****
  
     function Euclid (P, Q : Int) return Int is
        X, Y, GCD : Int;
-       pragma Unreferenced (Y, GCD);
     begin
        Euclid (P, Q, X, Y, GCD);
        return X;
--- 118,123 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-mbflra.ads gcc-12.1.0/gcc/ada/libgnat/g-mbflra.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-mbflra.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-mbflra.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-md5.adb gcc-12.1.0/gcc/ada/libgnat/g-md5.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-md5.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-md5.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-md5.ads gcc-12.1.0/gcc/ada/libgnat/g-md5.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-md5.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-md5.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-memdum.adb gcc-12.1.0/gcc/ada/libgnat/g-memdum.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-memdum.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-memdum.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package body GNAT.Memory_Dump is
*** 128,134 ****
                            (Count - Ctr, 16, 0, Offset_Buf, Last);
                          Len := Last - 4;
  
!                         Line_Buf (1 .. AIL - Len - 2) := (others => '0');
                          Line_Buf (AIL - Len - 1 .. AIL - 2) :=
                            Offset_Buf (4 .. Last - 1);
                          Line_Buf (AIL - 1 .. AIL) := ": ";
--- 128,134 ----
                            (Count - Ctr, 16, 0, Offset_Buf, Last);
                          Len := Last - 4;
  
!                         Line_Buf (1 .. AIL - Len - 2) := [others => '0'];
                          Line_Buf (AIL - Len - 1 .. AIL - 2) :=
                            Offset_Buf (4 .. Last - 1);
                          Line_Buf (AIL - 1 .. AIL) := ": ";
*************** package body GNAT.Memory_Dump is
*** 138,144 ****
                       null;
                 end case;
  
!                Line_Buf (AIL + 1 .. Line_Buf'Last) := (others => ' ');
                 Line_Buf (AIL + 3 * 16 + 1) := '"';
              end if;
  
--- 138,144 ----
                       null;
                 end case;
  
!                Line_Buf (AIL + 1 .. Line_Buf'Last) := [others => ' '];
                 Line_Buf (AIL + 3 * 16 + 1) := '"';
              end if;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-memdum.ads gcc-12.1.0/gcc/ada/libgnat/g-memdum.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-memdum.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-memdum.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2003-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package GNAT.Memory_Dump is
*** 46,54 ****
     --  Dumps indicated number (Count) of bytes, starting at the address given
     --  by Addr. The coding of this routine in its current form assumes the case
     --  of a byte addressable machine (and is therefore inapplicable to machines
!    --  like the AAMP, where the storage unit is not 8 bits). The output is one
!    --  or more lines in the following format, which is for the case of 32-bit
!    --  addresses (64-bit addresses are handled appropriately):
     --
     --    0234_3368: 66 67 68 . . .  73 74 75 "fghijklmnopqstuv"
     --
--- 46,54 ----
     --  Dumps indicated number (Count) of bytes, starting at the address given
     --  by Addr. The coding of this routine in its current form assumes the case
     --  of a byte addressable machine (and is therefore inapplicable to machines
!    --  where the storage unit is not 8 bits). The output is one or more lines
!    --  in the following format, which is for the case of 32-bit addresses
!    --  (64-bit addresses are handled appropriately):
     --
     --    0234_3368: 66 67 68 . . .  73 74 75 "fghijklmnopqstuv"
     --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-moreex.adb gcc-12.1.0/gcc/ada/libgnat/g-moreex.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-moreex.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-moreex.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-moreex.ads gcc-12.1.0/gcc/ada/libgnat/g-moreex.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-moreex.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-moreex.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-os_lib.adb gcc-12.1.0/gcc/ada/libgnat/g-os_lib.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-os_lib.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-os_lib.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-os_lib.ads gcc-12.1.0/gcc/ada/libgnat/g-os_lib.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-os_lib.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-os_lib.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-pehage.adb gcc-12.1.0/gcc/ada/libgnat/g-pehage.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-pehage.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-pehage.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 31,154 ****
  
  with Ada.IO_Exceptions;       use Ada.IO_Exceptions;
  with Ada.Characters.Handling; use Ada.Characters.Handling;
- with Ada.Directories;
  
! with GNAT.Heap_Sort_G;
! with GNAT.OS_Lib;      use GNAT.OS_Lib;
! with GNAT.Table;
  
  package body GNAT.Perfect_Hash_Generators is
  
!    --  We are using the algorithm of J. Czech as described in Zbigniew J.
!    --  Czech, George Havas, and Bohdan S. Majewski ``An Optimal Algorithm for
!    --  Generating Minimal Perfect Hash Functions'', Information Processing
!    --  Letters, 43(1992) pp.257-264, Oct.1992
! 
!    --  This minimal perfect hash function generator is based on random graphs
!    --  and produces a hash function of the form:
! 
!    --             h (w) = (g (f1 (w)) + g (f2 (w))) mod m
! 
!    --  where f1 and f2 are functions that map strings into integers, and g is
!    --  a function that maps integers into [0, m-1]. h can be order preserving.
!    --  For instance, let W = {w_0, ..., w_i, ..., w_m-1}, h can be defined
!    --  such that h (w_i) = i.
! 
!    --  This algorithm defines two possible constructions of f1 and f2. Method
!    --  b) stores the hash function in less memory space at the expense of
!    --  greater CPU time.
! 
!    --  a) fk (w) = sum (for i in 1 .. length (w)) (Tk (i, w (i))) mod n
! 
!    --     size (Tk) = max (for w in W) (length (w)) * size (used char set)
! 
!    --  b) fk (w) = sum (for i in 1 .. length (w)) (Tk (i) * w (i)) mod n
! 
!    --     size (Tk) = max (for w in W) (length (w)) but the table lookups are
!    --     replaced by multiplications.
! 
!    --  where Tk values are randomly generated. n is defined later on but the
!    --  algorithm recommends to use a value a little bit greater than 2m. Note
!    --  that for large values of m, the main memory space requirements comes
!    --  from the memory space for storing function g (>= 2m entries).
! 
!    --  Random graphs are frequently used to solve difficult problems that do
!    --  not have polynomial solutions. This algorithm is based on a weighted
!    --  undirected graph. It comprises two steps: mapping and assignment.
! 
!    --  In the mapping step, a graph G = (V, E) is constructed, where = {0, 1,
!    --  ..., n-1} and E = {(for w in W) (f1 (w), f2 (w))}. In order for the
!    --  assignment step to be successful, G has to be acyclic. To have a high
!    --  probability of generating an acyclic graph, n >= 2m. If it is not
!    --  acyclic, Tk have to be regenerated.
! 
!    --  In the assignment step, the algorithm builds function g. As G is
!    --  acyclic, there is a vertex v1 with only one neighbor v2. Let w_i be
!    --  the word such that v1 = f1 (w_i) and v2 = f2 (w_i). Let g (v1) = 0 by
!    --  construction and g (v2) = (i - g (v1)) mod n (or h (i) - g (v1) mod n).
!    --  If word w_j is such that v2 = f1 (w_j) and v3 = f2 (w_j), g (v3) = (j -
!    --  g (v2)) mod (or to be general, (h (j) - g (v2)) mod n). If w_i has no
!    --  neighbor, then another vertex is selected. The algorithm traverses G to
!    --  assign values to all the vertices. It cannot assign a value to an
!    --  already assigned vertex as G is acyclic.
! 
!    subtype Word_Id   is Integer;
!    subtype Key_Id    is Integer;
!    subtype Vertex_Id is Integer;
!    subtype Edge_Id   is Integer;
!    subtype Table_Id  is Integer;
! 
!    No_Vertex : constant Vertex_Id := -1;
!    No_Edge   : constant Edge_Id   := -1;
!    No_Table  : constant Table_Id  := -1;
! 
!    type Word_Type is new String_Access;
!    procedure Free_Word (W : in out Word_Type) renames Free;
!    function New_Word (S : String) return Word_Type;
! 
!    procedure Resize_Word (W : in out Word_Type; Len : Natural);
!    --  Resize string W to have a length Len
! 
!    type Key_Type is record
!       Edge : Edge_Id;
!    end record;
!    --  A key corresponds to an edge in the algorithm graph
! 
!    type Vertex_Type is record
!       First : Edge_Id;
!       Last  : Edge_Id;
!    end record;
!    --  A vertex can be involved in several edges. First and Last are the bounds
!    --  of an array of edges stored in a global edge table.
! 
!    type Edge_Type is record
!       X   : Vertex_Id;
!       Y   : Vertex_Id;
!       Key : Key_Id;
!    end record;
!    --  An edge is a peer of vertices. In the algorithm, a key is associated to
!    --  an edge.
! 
!    package WT is new GNAT.Table (Word_Type, Word_Id, 0, 32, 32);
!    package IT is new GNAT.Table (Integer, Integer, 0, 32, 32);
!    --  The two main tables. WT is used to store the words in their initial
!    --  version and in their reduced version (that is words reduced to their
!    --  significant characters). As an instance of GNAT.Table, WT does not
!    --  initialize string pointers to null. This initialization has to be done
!    --  manually when the table is allocated. IT is used to store several
!    --  tables of components containing only integers.
  
     function Image (Int : Integer; W : Natural := 0) return String;
     function Image (Str : String;  W : Natural := 0) return String;
     --  Return a string which includes string Str or integer Int preceded by
     --  leading spaces if required by width W.
  
-    function Trim_Trailing_Nuls (Str : String) return String;
-    --  Return Str with trailing NUL characters removed
- 
-    Output : File_Descriptor renames GNAT.OS_Lib.Standout;
-    --  Shortcuts
- 
     EOL : constant Character := ASCII.LF;
  
     Max  : constant := 78;
--- 31,48 ----
  
  with Ada.IO_Exceptions;       use Ada.IO_Exceptions;
  with Ada.Characters.Handling; use Ada.Characters.Handling;
  
! with GNAT.OS_Lib;             use GNAT.OS_Lib;
  
  package body GNAT.Perfect_Hash_Generators is
  
!    use SPHG;
  
     function Image (Int : Integer; W : Natural := 0) return String;
     function Image (Str : String;  W : Natural := 0) return String;
     --  Return a string which includes string Str or integer Int preceded by
     --  leading spaces if required by width W.
  
     EOL : constant Character := ASCII.LF;
  
     Max  : constant := 78;
*************** package body GNAT.Perfect_Hash_Generator
*** 156,161 ****
--- 50,61 ----
     Line : String (1 .. Max);
     --  Use this line to provide buffered IO
  
+    NK : Natural  := 0;
+    --  NK : Number of Keys
+ 
+    Opt : Optimization;
+    --  Optimization mode (memory vs CPU)
+ 
     procedure Add (C : Character);
     procedure Add (S : String);
     --  Add a character or a string in Line and update Last
*************** package body GNAT.Perfect_Hash_Generator
*** 185,508 ****
     procedure Put (File : File_Descriptor; Str : String);
     --  Simulate Ada.Text_IO.Put with GNAT.OS_Lib
  
-    procedure Put_Used_Char_Set (File : File_Descriptor; Title : String);
-    --  Output a title and a used character set
- 
-    procedure Put_Int_Vector
-      (File   : File_Descriptor;
-       Title  : String;
-       Vector : Integer;
-       Length : Natural);
-    --  Output a title and a vector
- 
     procedure Put_Int_Matrix
       (File  : File_Descriptor;
        Title : String;
!       Table : Table_Id;
        Len_1 : Natural;
        Len_2 : Natural);
     --  Output a title and a matrix. When the matrix has only one non-empty
     --  dimension (Len_2 = 0), output a vector.
  
-    procedure Put_Edges (File : File_Descriptor; Title : String);
-    --  Output a title and an edge table
- 
-    procedure Put_Initial_Keys (File : File_Descriptor; Title : String);
-    --  Output a title and a key table
- 
-    procedure Put_Reduced_Keys (File : File_Descriptor; Title : String);
-    --  Output a title and a key table
- 
-    procedure Put_Vertex_Table (File : File_Descriptor; Title : String);
-    --  Output a title and a vertex table
- 
     function Ada_File_Base_Name (Pkg_Name : String) return String;
     --  Return the base file name (i.e. without .ads/.adb extension) for an
     --  Ada source file containing the named package, using the standard GNAT
     --  file-naming convention. For example, if Pkg_Name is "Parent.Child", we
     --  return "parent-child".
  
-    ----------------------------------
-    -- Character Position Selection --
-    ----------------------------------
- 
-    --  We reduce the maximum key size by selecting representative positions
-    --  in these keys. We build a matrix with one word per line. We fill the
-    --  remaining space of a line with ASCII.NUL. The heuristic selects the
-    --  position that induces the minimum number of collisions. If there are
-    --  collisions, select another position on the reduced key set responsible
-    --  of the collisions. Apply the heuristic until there is no more collision.
- 
-    procedure Apply_Position_Selection;
-    --  Apply Position selection and build the reduced key table
- 
-    procedure Parse_Position_Selection (Argument : String);
-    --  Parse Argument and compute the position set. Argument is list of
-    --  substrings separated by commas. Each substring represents a position
-    --  or a range of positions (like x-y).
- 
-    procedure Select_Character_Set;
-    --  Define an optimized used character set like Character'Pos in order not
-    --  to allocate tables of 256 entries.
- 
-    procedure Select_Char_Position;
-    --  Find a min char position set in order to reduce the max key length. The
-    --  heuristic selects the position that induces the minimum number of
-    --  collisions. If there are collisions, select another position on the
-    --  reduced key set responsible of the collisions. Apply the heuristic until
-    --  there is no collision.
- 
-    -----------------------------
-    -- Random Graph Generation --
-    -----------------------------
- 
-    procedure Random (Seed : in out Natural);
-    --  Simulate Ada.Discrete_Numerics.Random
- 
-    procedure Generate_Mapping_Table
-      (Tab  : Table_Id;
-       L1   : Natural;
-       L2   : Natural;
-       Seed : in out Natural);
-    --  Random generation of the tables below. T is already allocated
- 
-    procedure Generate_Mapping_Tables
-      (Opt  : Optimization;
-       Seed : in out Natural);
-    --  Generate the mapping tables T1 and T2. They are used to define fk (w) =
-    --  sum (for i in 1 .. length (w)) (Tk (i, w (i))) mod n. Keys, NK and Chars
-    --  are used to compute the matrix size.
- 
-    ---------------------------
-    -- Algorithm Computation --
-    ---------------------------
- 
-    procedure Compute_Edges_And_Vertices (Opt : Optimization);
-    --  Compute the edge and vertex tables. These are empty when a self loop is
-    --  detected (f1 (w) = f2 (w)). The edge table is sorted by X value and then
-    --  Y value. Keys is the key table and NK the number of keys. Chars is the
-    --  set of characters really used in Keys. NV is the number of vertices
-    --  recommended by the algorithm. T1 and T2 are the mapping tables needed to
-    --  compute f1 (w) and f2 (w).
- 
-    function Acyclic return Boolean;
-    --  Return True when the graph is acyclic. Vertices is the current vertex
-    --  table and Edges the current edge table.
- 
-    procedure Assign_Values_To_Vertices;
-    --  Execute the assignment step of the algorithm. Keys is the current key
-    --  table. Vertices and Edges represent the random graph. G is the result of
-    --  the assignment step such that:
-    --    h (w) = (g (f1 (w)) + g (f2 (w))) mod m
- 
-    function Sum
-      (Word  : Word_Type;
-       Table : Table_Id;
-       Opt   : Optimization) return Natural;
-    --  For an optimization of CPU_Time return
-    --    fk (w) = sum (for i in 1 .. length (w)) (Tk (i, w (i))) mod n
-    --  For an optimization of Memory_Space return
-    --    fk (w) = sum (for i in 1 .. length (w)) (Tk (i) * w (i)) mod n
-    --  Here NV = n
- 
-    -------------------------------
-    -- Internal Table Management --
-    -------------------------------
- 
-    function Allocate (N : Natural; S : Natural := 1) return Table_Id;
-    --  Allocate N * S ints from IT table
- 
-    ----------
-    -- Keys --
-    ----------
- 
-    Keys : Table_Id := No_Table;
-    NK   : Natural  := 0;
-    --  NK : Number of Keys
- 
-    function Initial (K : Key_Id) return Word_Id;
-    pragma Inline (Initial);
- 
-    function Reduced (K : Key_Id) return Word_Id;
-    pragma Inline (Reduced);
- 
-    function  Get_Key (N : Key_Id) return Key_Type;
-    procedure Set_Key (N : Key_Id; Item : Key_Type);
-    --  Get or Set Nth element of Keys table
- 
-    ------------------
-    -- Char_Pos_Set --
-    ------------------
- 
-    Char_Pos_Set     : Table_Id := No_Table;
-    Char_Pos_Set_Len : Natural;
-    --  Character Selected Position Set
- 
-    function  Get_Char_Pos (P : Natural) return Natural;
-    procedure Set_Char_Pos (P : Natural; Item : Natural);
-    --  Get or Set the string position of the Pth selected character
- 
-    -------------------
-    -- Used_Char_Set --
-    -------------------
- 
-    Used_Char_Set     : Table_Id := No_Table;
-    Used_Char_Set_Len : Natural;
-    --  Used Character Set : Define a new character mapping. When all the
-    --  characters are not present in the keys, in order to reduce the size
-    --  of some tables, we redefine the character mapping.
- 
-    function  Get_Used_Char (C : Character) return Natural;
-    procedure Set_Used_Char (C : Character; Item : Natural);
- 
-    ------------
-    -- Tables --
-    ------------
- 
-    T1     : Table_Id := No_Table;
-    T2     : Table_Id := No_Table;
-    T1_Len : Natural;
-    T2_Len : Natural;
-    --  T1  : Values table to compute F1
-    --  T2  : Values table to compute F2
- 
-    function  Get_Table (T : Integer; X, Y : Natural) return Natural;
-    procedure Set_Table (T : Integer; X, Y : Natural; Item : Natural);
- 
-    -----------
-    -- Graph --
-    -----------
- 
-    G     : Table_Id := No_Table;
-    G_Len : Natural;
-    --  Values table to compute G
- 
-    NT : Natural := Default_Tries;
-    --  Number of tries running the algorithm before raising an error
- 
-    function  Get_Graph (N : Natural) return Integer;
-    procedure Set_Graph (N : Natural; Item : Integer);
-    --  Get or Set Nth element of graph
- 
-    -----------
-    -- Edges --
-    -----------
- 
-    Edge_Size : constant := 3;
-    Edges     : Table_Id := No_Table;
-    Edges_Len : Natural;
-    --  Edges  : Edge table of the random graph G
- 
-    function  Get_Edges (F : Natural) return Edge_Type;
-    procedure Set_Edges (F : Natural; Item : Edge_Type);
- 
-    --------------
-    -- Vertices --
-    --------------
- 
-    Vertex_Size : constant := 2;
- 
-    Vertices : Table_Id := No_Table;
-    --  Vertex table of the random graph G
- 
-    NV : Natural;
-    --  Number of Vertices
- 
-    function  Get_Vertices (F : Natural) return Vertex_Type;
-    procedure Set_Vertices (F : Natural; Item : Vertex_Type);
-    --  Comments needed ???
- 
-    K2V : Float;
-    --  Ratio between Keys and Vertices (parameter of Czech's algorithm)
- 
-    Opt : Optimization;
-    --  Optimization mode (memory vs CPU)
- 
-    Max_Key_Len : Natural := 0;
-    Min_Key_Len : Natural := 0;
-    --  Maximum and minimum of all the word length
- 
-    S : Natural;
-    --  Seed
- 
-    function Type_Size (L : Natural) return Natural;
-    --  Given the last L of an unsigned integer type T, return its size
- 
-    -------------
-    -- Acyclic --
-    -------------
- 
-    function Acyclic return Boolean is
-       Marks : array (0 .. NV - 1) of Vertex_Id := (others => No_Vertex);
- 
-       function Traverse (Edge : Edge_Id; Mark : Vertex_Id) return Boolean;
-       --  Propagate Mark from X to Y. X is already marked. Mark Y and propagate
-       --  it to the edges of Y except the one representing the same key. Return
-       --  False when Y is marked with Mark.
- 
-       --------------
-       -- Traverse --
-       --------------
- 
-       function Traverse (Edge : Edge_Id; Mark : Vertex_Id) return Boolean is
-          E : constant Edge_Type := Get_Edges (Edge);
-          K : constant Key_Id    := E.Key;
-          Y : constant Vertex_Id := E.Y;
-          M : constant Vertex_Id := Marks (E.Y);
-          V : Vertex_Type;
- 
-       begin
-          if M = Mark then
-             return False;
- 
-          elsif M = No_Vertex then
-             Marks (Y) := Mark;
-             V := Get_Vertices (Y);
- 
-             for J in V.First .. V.Last loop
- 
-                --  Do not propagate to the edge representing the same key
- 
-                if Get_Edges (J).Key /= K
-                  and then not Traverse (J, Mark)
-                then
-                   return False;
-                end if;
-             end loop;
-          end if;
- 
-          return True;
-       end Traverse;
- 
-       Edge  : Edge_Type;
- 
-    --  Start of processing for Acyclic
- 
-    begin
-       --  Edges valid range is
- 
-       for J in 1 .. Edges_Len - 1 loop
- 
-          Edge := Get_Edges (J);
- 
-          --  Mark X of E when it has not been already done
- 
-          if Marks (Edge.X) = No_Vertex then
-             Marks (Edge.X) := Edge.X;
-          end if;
- 
-          --  Traverse E when this has not already been done
- 
-          if Marks (Edge.Y) = No_Vertex
-            and then not Traverse (J, Edge.X)
-          then
-             return False;
-          end if;
-       end loop;
- 
-       return True;
-    end Acyclic;
- 
     ------------------------
     -- Ada_File_Base_Name --
     ------------------------
--- 85,105 ----
     procedure Put (File : File_Descriptor; Str : String);
     --  Simulate Ada.Text_IO.Put with GNAT.OS_Lib
  
     procedure Put_Int_Matrix
       (File  : File_Descriptor;
        Title : String;
!       Table : Table_Name;
        Len_1 : Natural;
        Len_2 : Natural);
     --  Output a title and a matrix. When the matrix has only one non-empty
     --  dimension (Len_2 = 0), output a vector.
  
     function Ada_File_Base_Name (Pkg_Name : String) return String;
     --  Return the base file name (i.e. without .ads/.adb extension) for an
     --  Ada source file containing the named package, using the standard GNAT
     --  file-naming convention. For example, if Pkg_Name is "Parent.Child", we
     --  return "parent-child".
  
     ------------------------
     -- Ada_File_Base_Name --
     ------------------------
*************** package body GNAT.Perfect_Hash_Generator
*** 547,1105 ****
        Last := Last + Len;
     end Add;
  
-    --------------
-    -- Allocate --
-    --------------
- 
-    function Allocate (N : Natural; S : Natural := 1) return Table_Id is
-       L : constant Integer := IT.Last;
-    begin
-       IT.Set_Last (L + N * S);
- 
-       --  Initialize, so debugging printouts don't trip over uninitialized
-       --  components.
- 
-       for J in L + 1 .. IT.Last loop
-          IT.Table (J) := -1;
-       end loop;
- 
-       return L + 1;
-    end Allocate;
- 
-    ------------------------------
-    -- Apply_Position_Selection --
-    ------------------------------
- 
-    procedure Apply_Position_Selection is
-    begin
-       for J in 0 .. NK - 1 loop
-          declare
-             IW : constant String := WT.Table (Initial (J)).all;
-             RW : String (1 .. IW'Length) := (others => ASCII.NUL);
-             N  : Natural := IW'First - 1;
- 
-          begin
-             --  Select the characters of Word included in the position
-             --  selection.
- 
-             for C in 0 .. Char_Pos_Set_Len - 1 loop
-                exit when IW (Get_Char_Pos (C)) = ASCII.NUL;
-                N := N + 1;
-                RW (N) := IW (Get_Char_Pos (C));
-             end loop;
- 
-             --  Build the new table with the reduced word. Be careful
-             --  to deallocate the old version to avoid memory leaks.
- 
-             Free_Word (WT.Table (Reduced (J)));
-             WT.Table (Reduced (J)) := New_Word (RW);
-             Set_Key (J, (Edge => No_Edge));
-          end;
-       end loop;
-    end Apply_Position_Selection;
- 
-    -------------------------------
-    -- Assign_Values_To_Vertices --
-    -------------------------------
- 
-    procedure Assign_Values_To_Vertices is
-       X : Vertex_Id;
- 
-       procedure Assign (X : Vertex_Id);
-       --  Execute assignment on X's neighbors except the vertex that we are
-       --  coming from which is already assigned.
- 
-       ------------
-       -- Assign --
-       ------------
- 
-       procedure Assign (X : Vertex_Id) is
-          E : Edge_Type;
-          V : constant Vertex_Type := Get_Vertices (X);
- 
-       begin
-          for J in V.First .. V.Last loop
-             E := Get_Edges (J);
- 
-             if Get_Graph (E.Y) = -1 then
-                pragma Assert (NK /= 0);
-                Set_Graph (E.Y, (E.Key - Get_Graph (X)) mod NK);
-                Assign (E.Y);
-             end if;
-          end loop;
-       end Assign;
- 
-    --  Start of processing for Assign_Values_To_Vertices
- 
-    begin
-       --  Value -1 denotes an uninitialized value as it is supposed to
-       --  be in the range 0 .. NK.
- 
-       if G = No_Table then
-          G_Len := NV;
-          G := Allocate (G_Len, 1);
-       end if;
- 
-       for J in 0 .. G_Len - 1 loop
-          Set_Graph (J, -1);
-       end loop;
- 
-       for K in 0 .. NK - 1 loop
-          X := Get_Edges (Get_Key (K).Edge).X;
- 
-          if Get_Graph (X) = -1 then
-             Set_Graph (X, 0);
-             Assign (X);
-          end if;
-       end loop;
- 
-       for J in 0 .. G_Len - 1 loop
-          if Get_Graph (J) = -1 then
-             Set_Graph (J, 0);
-          end if;
-       end loop;
- 
-       if Verbose then
-          Put_Int_Vector (Output, "Assign Values To Vertices", G, G_Len);
-       end if;
-    end Assign_Values_To_Vertices;
- 
     -------------
     -- Compute --
     -------------
  
     procedure Compute (Position : String := Default_Position) is
-       Success : Boolean := False;
- 
     begin
!       if NK = 0 then
!          raise Program_Error with "keywords set cannot be empty";
!       end if;
! 
!       if Verbose then
!          Put_Initial_Keys (Output, "Initial Key Table");
!       end if;
! 
!       if Position'Length /= 0 then
!          Parse_Position_Selection (Position);
!       else
!          Select_Char_Position;
!       end if;
! 
!       if Verbose then
!          Put_Int_Vector
!            (Output, "Char Position Set", Char_Pos_Set, Char_Pos_Set_Len);
!       end if;
! 
!       Apply_Position_Selection;
! 
!       if Verbose then
!          Put_Reduced_Keys (Output, "Reduced Keys Table");
!       end if;
! 
!       Select_Character_Set;
! 
!       if Verbose then
!          Put_Used_Char_Set (Output, "Character Position Table");
!       end if;
! 
!       --  Perform Czech's algorithm
! 
!       for J in 1 .. NT loop
!          Generate_Mapping_Tables (Opt, S);
!          Compute_Edges_And_Vertices (Opt);
! 
!          --  When graph is not empty (no self-loop from previous operation) and
!          --  not acyclic.
! 
!          if 0 < Edges_Len and then Acyclic then
!             Success := True;
!             exit;
!          end if;
!       end loop;
! 
!       if not Success then
!          raise Too_Many_Tries;
!       end if;
! 
!       Assign_Values_To_Vertices;
     end Compute;
  
-    --------------------------------
-    -- Compute_Edges_And_Vertices --
-    --------------------------------
- 
-    procedure Compute_Edges_And_Vertices (Opt : Optimization) is
-       X           : Natural;
-       Y           : Natural;
-       Key         : Key_Type;
-       Edge        : Edge_Type;
-       Vertex      : Vertex_Type;
-       Not_Acyclic : Boolean := False;
- 
-       procedure Move (From : Natural; To : Natural);
-       function Lt (L, R : Natural) return Boolean;
-       --  Subprograms needed for GNAT.Heap_Sort_G
- 
-       --------
-       -- Lt --
-       --------
- 
-       function Lt (L, R : Natural) return Boolean is
-          EL : constant Edge_Type := Get_Edges (L);
-          ER : constant Edge_Type := Get_Edges (R);
-       begin
-          return EL.X < ER.X or else (EL.X = ER.X and then EL.Y < ER.Y);
-       end Lt;
- 
-       ----------
-       -- Move --
-       ----------
- 
-       procedure Move (From : Natural; To : Natural) is
-       begin
-          Set_Edges (To, Get_Edges (From));
-       end Move;
- 
-       package Sorting is new GNAT.Heap_Sort_G (Move, Lt);
- 
-    --  Start of processing for Compute_Edges_And_Vertices
- 
-    begin
-       --  We store edges from 1 to 2 * NK and leave zero alone in order to use
-       --  GNAT.Heap_Sort_G.
- 
-       Edges_Len := 2 * NK + 1;
- 
-       if Edges = No_Table then
-          Edges := Allocate (Edges_Len, Edge_Size);
-       end if;
- 
-       if Vertices = No_Table then
-          Vertices := Allocate (NV, Vertex_Size);
-       end if;
- 
-       for J in 0 .. NV - 1 loop
-          Set_Vertices (J, (No_Vertex, No_Vertex - 1));
-       end loop;
- 
-       --  For each w, X = f1 (w) and Y = f2 (w)
- 
-       for J in 0 .. NK - 1 loop
-          Key := Get_Key (J);
-          Key.Edge := No_Edge;
-          Set_Key (J, Key);
- 
-          X := Sum (WT.Table (Reduced (J)), T1, Opt);
-          Y := Sum (WT.Table (Reduced (J)), T2, Opt);
- 
-          --  Discard T1 and T2 as soon as we discover a self loop
- 
-          if X = Y then
-             Not_Acyclic := True;
-             exit;
-          end if;
- 
-          --  We store (X, Y) and (Y, X) to ease assignment step
- 
-          Set_Edges (2 * J + 1, (X, Y, J));
-          Set_Edges (2 * J + 2, (Y, X, J));
-       end loop;
- 
-       --  Return an empty graph when self loop detected
- 
-       if Not_Acyclic then
-          Edges_Len := 0;
- 
-       else
-          if Verbose then
-             Put_Edges      (Output, "Unsorted Edge Table");
-             Put_Int_Matrix (Output, "Function Table 1", T1,
-                             T1_Len, T2_Len);
-             Put_Int_Matrix (Output, "Function Table 2", T2,
-                             T1_Len, T2_Len);
-          end if;
- 
-          --  Enforce consistency between edges and keys. Construct Vertices and
-          --  compute the list of neighbors of a vertex First .. Last as Edges
-          --  is sorted by X and then Y. To compute the neighbor list, sort the
-          --  edges.
- 
-          Sorting.Sort (Edges_Len - 1);
- 
-          if Verbose then
-             Put_Edges      (Output, "Sorted Edge Table");
-             Put_Int_Matrix (Output, "Function Table 1", T1,
-                             T1_Len, T2_Len);
-             Put_Int_Matrix (Output, "Function Table 2", T2,
-                             T1_Len, T2_Len);
-          end if;
- 
-          --  Edges valid range is 1 .. 2 * NK
- 
-          for E in 1 .. Edges_Len - 1 loop
-             Edge := Get_Edges (E);
-             Key  := Get_Key (Edge.Key);
- 
-             if Key.Edge = No_Edge then
-                Key.Edge := E;
-                Set_Key (Edge.Key, Key);
-             end if;
- 
-             Vertex := Get_Vertices (Edge.X);
- 
-             if Vertex.First = No_Edge then
-                Vertex.First := E;
-             end if;
- 
-             Vertex.Last := E;
-             Set_Vertices (Edge.X, Vertex);
-          end loop;
- 
-          if Verbose then
-             Put_Reduced_Keys (Output, "Key Table");
-             Put_Edges        (Output, "Edge Table");
-             Put_Vertex_Table (Output, "Vertex Table");
-          end if;
-       end if;
-    end Compute_Edges_And_Vertices;
- 
-    ------------
-    -- Define --
-    ------------
- 
-    procedure Define
-      (Name      : Table_Name;
-       Item_Size : out Natural;
-       Length_1  : out Natural;
-       Length_2  : out Natural)
-    is
-    begin
-       case Name is
-          when Character_Position =>
-             Item_Size := 8;
-             Length_1  := Char_Pos_Set_Len;
-             Length_2  := 0;
- 
-          when Used_Character_Set =>
-             Item_Size := 8;
-             Length_1  := 256;
-             Length_2  := 0;
- 
-          when Function_Table_1
-             | Function_Table_2
-          =>
-             Item_Size := Type_Size (NV);
-             Length_1  := T1_Len;
-             Length_2  := T2_Len;
- 
-          when Graph_Table =>
-             Item_Size := Type_Size (NK);
-             Length_1  := NV;
-             Length_2  := 0;
-       end case;
-    end Define;
- 
     --------------
     -- Finalize --
     --------------
  
     procedure Finalize is
     begin
-       if Verbose then
-          Put (Output, "Finalize");
-          New_Line (Output);
-       end if;
- 
-       --  Deallocate all the WT components (both initial and reduced ones) to
-       --  avoid memory leaks.
- 
-       for W in 0 .. WT.Last loop
- 
-          --  Note: WT.Table (NK) is a temporary variable, do not free it since
-          --  this would cause a double free.
- 
-          if W /= NK then
-             Free_Word (WT.Table (W));
-          end if;
-       end loop;
- 
-       WT.Release;
-       IT.Release;
- 
-       --  Reset all variables for next usage
- 
-       Keys := No_Table;
- 
-       Char_Pos_Set     := No_Table;
-       Char_Pos_Set_Len := 0;
- 
-       Used_Char_Set     := No_Table;
-       Used_Char_Set_Len := 0;
- 
-       T1 := No_Table;
-       T2 := No_Table;
- 
-       T1_Len := 0;
-       T2_Len := 0;
- 
-       G     := No_Table;
-       G_Len := 0;
- 
-       Edges     := No_Table;
-       Edges_Len := 0;
- 
-       Vertices := No_Table;
-       NV       := 0;
- 
        NK := 0;
!       Max_Key_Len := 0;
!       Min_Key_Len := 0;
     end Finalize;
  
-    ----------------------------
-    -- Generate_Mapping_Table --
-    ----------------------------
- 
-    procedure Generate_Mapping_Table
-      (Tab  : Integer;
-       L1   : Natural;
-       L2   : Natural;
-       Seed : in out Natural)
-    is
-    begin
-       for J in 0 .. L1 - 1 loop
-          for K in 0 .. L2 - 1 loop
-             Random (Seed);
-             Set_Table (Tab, J, K, Seed mod NV);
-          end loop;
-       end loop;
-    end Generate_Mapping_Table;
- 
-    -----------------------------
-    -- Generate_Mapping_Tables --
-    -----------------------------
- 
-    procedure Generate_Mapping_Tables
-      (Opt  : Optimization;
-       Seed : in out Natural)
-    is
-    begin
-       --  If T1 and T2 are already allocated no need to do it twice. Reuse them
-       --  as their size has not changed.
- 
-       if T1 = No_Table and then T2 = No_Table then
-          declare
-             Used_Char_Last : Natural := 0;
-             Used_Char      : Natural;
- 
-          begin
-             if Opt = CPU_Time then
-                for P in reverse Character'Range loop
-                   Used_Char := Get_Used_Char (P);
-                   if Used_Char /= 0 then
-                      Used_Char_Last := Used_Char;
-                      exit;
-                   end if;
-                end loop;
-             end if;
- 
-             T1_Len := Char_Pos_Set_Len;
-             T2_Len := Used_Char_Last + 1;
-             T1 := Allocate (T1_Len * T2_Len);
-             T2 := Allocate (T1_Len * T2_Len);
-          end;
-       end if;
- 
-       Generate_Mapping_Table (T1, T1_Len, T2_Len, Seed);
-       Generate_Mapping_Table (T2, T1_Len, T2_Len, Seed);
- 
-       if Verbose then
-          Put_Used_Char_Set (Output, "Used Character Set");
-          Put_Int_Matrix (Output, "Function Table 1", T1,
-                         T1_Len, T2_Len);
-          Put_Int_Matrix (Output, "Function Table 2", T2,
-                         T1_Len, T2_Len);
-       end if;
-    end Generate_Mapping_Tables;
- 
-    ------------------
-    -- Get_Char_Pos --
-    ------------------
- 
-    function Get_Char_Pos (P : Natural) return Natural is
-       N : constant Natural := Char_Pos_Set + P;
-    begin
-       return IT.Table (N);
-    end Get_Char_Pos;
- 
-    ---------------
-    -- Get_Edges --
-    ---------------
- 
-    function Get_Edges (F : Natural) return Edge_Type is
-       N : constant Natural := Edges + (F * Edge_Size);
-       E : Edge_Type;
-    begin
-       E.X   := IT.Table (N);
-       E.Y   := IT.Table (N + 1);
-       E.Key := IT.Table (N + 2);
-       return E;
-    end Get_Edges;
- 
-    ---------------
-    -- Get_Graph --
-    ---------------
- 
-    function Get_Graph (N : Natural) return Integer is
-    begin
-       return IT.Table (G + N);
-    end Get_Graph;
- 
-    -------------
-    -- Get_Key --
-    -------------
- 
-    function Get_Key (N : Key_Id) return Key_Type is
-       K : Key_Type;
-    begin
-       K.Edge := IT.Table (Keys + N);
-       return K;
-    end Get_Key;
- 
-    ---------------
-    -- Get_Table --
-    ---------------
- 
-    function Get_Table (T : Integer; X, Y : Natural) return Natural is
-       N : constant Natural := T + (Y * T1_Len) + X;
-    begin
-       return IT.Table (N);
-    end Get_Table;
- 
-    -------------------
-    -- Get_Used_Char --
-    -------------------
- 
-    function Get_Used_Char (C : Character) return Natural is
-       N : constant Natural := Used_Char_Set + Character'Pos (C);
-    begin
-       return IT.Table (N);
-    end Get_Used_Char;
- 
-    ------------------
-    -- Get_Vertices --
-    ------------------
- 
-    function Get_Vertices (F : Natural) return Vertex_Type is
-       N : constant Natural := Vertices + (F * Vertex_Size);
-       V : Vertex_Type;
-    begin
-       V.First := IT.Table (N);
-       V.Last  := IT.Table (N + 1);
-       return V;
-    end Get_Vertices;
- 
     -----------
     -- Image --
     -----------
--- 144,168 ----
        Last := Last + Len;
     end Add;
  
     -------------
     -- Compute --
     -------------
  
     procedure Compute (Position : String := Default_Position) is
     begin
!       SPHG.Compute (Position);
     end Compute;
  
     --------------
     -- Finalize --
     --------------
  
     procedure Finalize is
     begin
        NK := 0;
!       SPHG.Finalize;
     end Finalize;
  
     -----------
     -- Image --
     -----------
*************** package body GNAT.Perfect_Hash_Generator
*** 1164,1178 ****
        end;
     end Image;
  
-    -------------
-    -- Initial --
-    -------------
- 
-    function Initial (K : Key_Id) return Word_Id is
-    begin
-       return K;
-    end Initial;
- 
     ----------------
     -- Initialize --
     ----------------
--- 227,232 ----
*************** package body GNAT.Perfect_Hash_Generator
*** 1183,1269 ****
        Optim  : Optimization := Memory_Space;
        Tries  : Positive     := Default_Tries)
     is
!    begin
!       if Verbose then
!          Put (Output, "Initialize");
!          New_Line (Output);
!       end if;
! 
!       --  Deallocate the part of the table concerning the reduced words.
!       --  Initial words are already present in the table. We may have reduced
!       --  words already there because a previous computation failed. We are
!       --  currently retrying and the reduced words have to be deallocated.
! 
!       for W in Reduced (0) .. WT.Last loop
!          Free_Word (WT.Table (W));
!       end loop;
! 
!       IT.Init;
! 
!       --  Initialize of computation variables
! 
!       Keys := No_Table;
! 
!       Char_Pos_Set     := No_Table;
!       Char_Pos_Set_Len := 0;
! 
!       Used_Char_Set     := No_Table;
!       Used_Char_Set_Len := 0;
! 
!       T1 := No_Table;
!       T2 := No_Table;
! 
!       T1_Len := 0;
!       T2_Len := 0;
! 
!       G     := No_Table;
!       G_Len := 0;
! 
!       Edges     := No_Table;
!       Edges_Len := 0;
! 
!       Vertices := No_Table;
!       NV       := 0;
! 
!       S    := Seed;
!       K2V  := K_To_V;
!       Opt  := Optim;
!       NT   := Tries;
! 
!       if K2V <= 2.0 then
!          raise Program_Error with "K to V ratio cannot be lower than 2.0";
!       end if;
! 
!       --  Do not accept a value of K2V too close to 2.0 such that once
!       --  rounded up, NV = 2 * NK because the algorithm would not converge.
! 
!       NV := Natural (Float (NK) * K2V);
!       if NV <= 2 * NK then
!          NV := 2 * NK + 1;
!       end if;
! 
!       Keys := Allocate (NK);
! 
!       --  Resize initial words to have all of them at the same size
!       --  (so the size of the largest one).
! 
!       for K in 0 .. NK - 1 loop
!          Resize_Word (WT.Table (Initial (K)), Max_Key_Len);
!       end loop;
! 
!       --  Allocated the table to store the reduced words. As WT is a
!       --  GNAT.Table (using C memory management), pointers have to be
!       --  explicitly initialized to null.
! 
!       WT.Set_Last (Reduced (NK - 1));
! 
!       --  Note: Reduced (0) = NK + 1
! 
!       WT.Table (NK) := null;
  
!       for W in 0 .. NK - 1 loop
!          WT.Table (Reduced (W)) := null;
!       end loop;
     end Initialize;
  
     ------------
--- 237,247 ----
        Optim  : Optimization := Memory_Space;
        Tries  : Positive     := Default_Tries)
     is
!       V : constant Positive := Positive (Float (NK) * K_To_V);
  
!    begin
!       Opt := Optim;
!       SPHG.Initialize (Seed, V, SPHG.Optimization (Optim), Tries);
     end Initialize;
  
     ------------
*************** package body GNAT.Perfect_Hash_Generator
*** 1271,1300 ****
     ------------
  
     procedure Insert (Value : String) is
-       Len  : constant Natural := Value'Length;
- 
     begin
-       if Verbose then
-          Put (Output, "Inserting """ & Value & """");
-          New_Line (Output);
-       end if;
- 
-       for J in Value'Range loop
-          pragma Assert (Value (J) /= ASCII.NUL);
-          null;
-       end loop;
- 
-       WT.Set_Last (NK);
-       WT.Table (NK) := New_Word (Value);
        NK := NK + 1;
! 
!       if Max_Key_Len < Len then
!          Max_Key_Len := Len;
!       end if;
! 
!       if Min_Key_Len = 0 or else Len < Min_Key_Len then
!          Min_Key_Len := Len;
!       end if;
     end Insert;
  
     --------------
--- 249,257 ----
     ------------
  
     procedure Insert (Value : String) is
     begin
        NK := NK + 1;
!       SPHG.Insert (Value);
     end Insert;
  
     --------------
*************** package body GNAT.Perfect_Hash_Generator
*** 1308,1433 ****
        end if;
     end New_Line;
  
-    --------------
-    -- New_Word --
-    --------------
- 
-    function New_Word (S : String) return Word_Type is
-    begin
-       return new String'(S);
-    end New_Word;
- 
-    ------------------------------
-    -- Parse_Position_Selection --
-    ------------------------------
- 
-    procedure Parse_Position_Selection (Argument : String) is
-       N : Natural          := Argument'First;
-       L : constant Natural := Argument'Last;
-       M : constant Natural := Max_Key_Len;
- 
-       T : array (1 .. M) of Boolean := (others => False);
- 
-       function Parse_Index return Natural;
-       --  Parse argument starting at index N to find an index
- 
-       -----------------
-       -- Parse_Index --
-       -----------------
- 
-       function Parse_Index return Natural is
-          C : Character := Argument (N);
-          V : Natural   := 0;
- 
-       begin
-          if C = '$' then
-             N := N + 1;
-             return M;
-          end if;
- 
-          if C not in '0' .. '9' then
-             raise Program_Error with "cannot read position argument";
-          end if;
- 
-          while C in '0' .. '9' loop
-             V := V * 10 + (Character'Pos (C) - Character'Pos ('0'));
-             N := N + 1;
-             exit when L < N;
-             C := Argument (N);
-          end loop;
- 
-          return V;
-       end Parse_Index;
- 
-    --  Start of processing for Parse_Position_Selection
- 
-    begin
-       --  Empty specification means all the positions
- 
-       if L < N then
-          Char_Pos_Set_Len := M;
-          Char_Pos_Set := Allocate (Char_Pos_Set_Len);
- 
-          for C in 0 .. Char_Pos_Set_Len - 1 loop
-             Set_Char_Pos (C, C + 1);
-          end loop;
- 
-       else
-          loop
-             declare
-                First, Last : Natural;
- 
-             begin
-                First := Parse_Index;
-                Last  := First;
- 
-                --  Detect a range
- 
-                if N <= L and then Argument (N) = '-' then
-                   N := N + 1;
-                   Last := Parse_Index;
-                end if;
- 
-                --  Include the positions in the selection
- 
-                for J in First .. Last loop
-                   T (J) := True;
-                end loop;
-             end;
- 
-             exit when L < N;
- 
-             if Argument (N) /= ',' then
-                raise Program_Error with "cannot read position argument";
-             end if;
- 
-             N := N + 1;
-          end loop;
- 
-          --  Compute position selection length
- 
-          N := 0;
-          for J in T'Range loop
-             if T (J) then
-                N := N + 1;
-             end if;
-          end loop;
- 
-          --  Fill position selection
- 
-          Char_Pos_Set_Len := N;
-          Char_Pos_Set := Allocate (Char_Pos_Set_Len);
- 
-          N := 0;
-          for J in T'Range loop
-             if T (J) then
-                Set_Char_Pos (N, J);
-                N := N + 1;
-             end if;
-          end loop;
-       end if;
-    end Parse_Position_Selection;
- 
     -------------
     -- Produce --
     -------------
--- 265,270 ----
*************** package body GNAT.Perfect_Hash_Generator
*** 1438,1443 ****
--- 275,283 ----
     is
        File : File_Descriptor := Standout;
  
+       Siz, L1, L2 : Natural;
+       --  For calls to Define
+ 
        Status : Boolean;
        --  For call to Close
  
*************** package body GNAT.Perfect_Hash_Generator
*** 1447,1454 ****
        function Range_Img (F, L : Natural; T : String := "") return String;
        --  Return string "[T range ]F .. L"
  
!       function Type_Img (L : Natural) return String;
!       --  Return the larger unsigned type T such that T'Last < L
  
        ---------------
        -- Array_Img --
--- 287,294 ----
        function Range_Img (F, L : Natural; T : String := "") return String;
        --  Return string "[T range ]F .. L"
  
!       function Type_Img (Siz : Positive) return String;
!       --  Return the name of the unsigned type of size S
  
        ---------------
        -- Array_Img --
*************** package body GNAT.Perfect_Hash_Generator
*** 1510,1517 ****
        -- Type_Img --
        --------------
  
!       function Type_Img (L : Natural) return String is
!          S : constant String := Image (Type_Size (L));
           U : String  := "Unsigned_  ";
           N : Natural := 9;
  
--- 350,357 ----
        -- Type_Img --
        --------------
  
!       function Type_Img (Siz : Positive) return String is
!          S : constant String := Image (Siz);
           U : String  := "Unsigned_  ";
           N : Natural := 9;
  
*************** package body GNAT.Perfect_Hash_Generator
*** 1524,1531 ****
           return U (1 .. N);
        end Type_Img;
  
-       F : Natural;
-       L : Natural;
        P : Natural;
  
        FName : String := Ada_File_Base_Name (Pkg_Name) & ".ads";
--- 364,369 ----
*************** package body GNAT.Perfect_Hash_Generator
*** 1535,1547 ****
     --  Start of processing for Produce
  
     begin
- 
-       if Verbose and then not Use_Stdout then
-          Put (Output,
-               "Producing " & Ada.Directories.Current_Directory & "/" & FName);
-          New_Line (Output);
-       end if;
- 
        if not Use_Stdout then
           File := Create_File (FName, Binary);
  
--- 373,378 ----
*************** package body GNAT.Perfect_Hash_Generator
*** 1592,1666 ****
        New_Line (File);
  
        if Opt = CPU_Time then
!          Put      (File, Array_Img ("C", Type_Img (256), "Character"));
!          New_Line (File);
  
!          F := Character'Pos (Character'First);
!          L := Character'Pos (Character'Last);
  
!          for J in Character'Range loop
!             P := Get_Used_Char (J);
!             Put (File, Image (P), 1, 0, 1, F, L, Character'Pos (J));
           end loop;
  
           New_Line (File);
        end if;
  
!       F := 0;
!       L := Char_Pos_Set_Len - 1;
  
!       Put      (File, Array_Img ("P", "Natural", Range_Img (F, L)));
        New_Line (File);
  
!       for J in F .. L loop
!          Put (File, Image (Get_Char_Pos (J)), 1, 0, 1, F, L, J);
        end loop;
  
        New_Line (File);
  
        case Opt is
           when CPU_Time =>
              Put_Int_Matrix
                (File,
!                Array_Img ("T1", Type_Img (NV),
!                           Range_Img (0, T1_Len - 1),
!                           Range_Img (0, T2_Len - 1, Type_Img (256))),
!                T1, T1_Len, T2_Len);
  
           when Memory_Space =>
              Put_Int_Matrix
                (File,
!                Array_Img ("T1", Type_Img (NV),
!                           Range_Img (0, T1_Len - 1)),
!                T1, T1_Len, 0);
        end case;
  
        New_Line (File);
  
        case Opt is
           when CPU_Time =>
              Put_Int_Matrix
                (File,
!                Array_Img ("T2", Type_Img (NV),
!                           Range_Img (0, T1_Len - 1),
!                           Range_Img (0, T2_Len - 1, Type_Img (256))),
!                T2, T1_Len, T2_Len);
  
           when Memory_Space =>
              Put_Int_Matrix
                (File,
!                Array_Img ("T2", Type_Img (NV),
!                           Range_Img (0, T1_Len - 1)),
!                T2, T1_Len, 0);
        end case;
  
        New_Line (File);
  
!       Put_Int_Vector
!         (File,
!          Array_Img ("G", Type_Img (NK),
!                     Range_Img (0, G_Len - 1)),
!          G, G_Len);
        New_Line (File);
  
        Put      (File, "   function Hash (S : String) return Natural is");
--- 423,511 ----
        New_Line (File);
  
        if Opt = CPU_Time then
!          --  The format of this table is fixed
  
!          Define (Used_Character_Set, Siz, L1, L2);
!          pragma Assert (L1 = 256 and then L2 = 0);
  
!          Put      (File, Array_Img ("C", Type_Img (Siz), "Character"));
!          New_Line (File);
! 
!          for J in 0 .. 255 loop
!             P := Value (Used_Character_Set, J);
!             Put (File, Image (P), 1, 0, 1, 0, 255, J);
           end loop;
  
           New_Line (File);
        end if;
  
!       Define (Character_Position, Siz, L1, L2);
!       pragma Assert (Siz = 31 and then L2 = 0);
  
!       Put      (File, Array_Img ("P", "Natural", Range_Img (0, L1 - 1)));
        New_Line (File);
  
!       for J in 0 .. L1 - 1 loop
!          P := Value (Character_Position, J);
!          Put (File, Image (P), 1, 0, 1, 0, L1 - 1, J);
        end loop;
  
        New_Line (File);
  
+       Define (Function_Table_1, Siz, L1, L2);
+ 
        case Opt is
           when CPU_Time =>
              Put_Int_Matrix
                (File,
!                Array_Img ("T1", Type_Img (Siz),
!                           Range_Img (0, L1 - 1),
!                           Range_Img (0, L2 - 1, Type_Img (8))),
!                Function_Table_1, L1, L2);
  
           when Memory_Space =>
              Put_Int_Matrix
                (File,
!                Array_Img ("T1", Type_Img (Siz),
!                           Range_Img (0, L1 - 1)),
!                Function_Table_1, L1, 0);
        end case;
  
        New_Line (File);
  
+       Define (Function_Table_2, Siz, L1, L2);
+ 
        case Opt is
           when CPU_Time =>
              Put_Int_Matrix
                (File,
!                Array_Img ("T2", Type_Img (Siz),
!                           Range_Img (0, L1 - 1),
!                           Range_Img (0, L2 - 1, Type_Img (8))),
!                Function_Table_2, L1, L2);
  
           when Memory_Space =>
              Put_Int_Matrix
                (File,
!                Array_Img ("T2", Type_Img (Siz),
!                           Range_Img (0, L1 - 1)),
!                Function_Table_2, L1, 0);
        end case;
  
        New_Line (File);
  
!       Define (Graph_Table, Siz, L1, L2);
!       pragma Assert (L2 = 0);
! 
!       Put (File, Array_Img ("G", Type_Img (Siz),
!                     Range_Img (0, L1 - 1)));
!       New_Line (File);
! 
!       for J in 0 .. L1 - 1 loop
!          P := Value (Graph_Table, J);
!          Put (File, Image (P), 1, 0, 1, 0, L1 - 1, J);
!       end loop;
! 
        New_Line (File);
  
        Put      (File, "   function Hash (S : String) return Natural is");
*************** package body GNAT.Perfect_Hash_Generator
*** 1676,1682 ****
  
        case Opt is
           when CPU_Time =>
!             Put (File, Type_Img (256));
  
           when Memory_Space =>
              Put (File, "Natural");
--- 521,527 ----
  
        case Opt is
           when CPU_Time =>
!             Put (File, Type_Img (8));
  
           when Memory_Space =>
              Put (File, "Natural");
*************** package body GNAT.Perfect_Hash_Generator
*** 1717,1723 ****
        end if;
  
        Put      (File, ") mod ");
!       Put      (File, Image (NV));
        Put      (File, ";");
        New_Line (File);
  
--- 562,568 ----
        end if;
  
        Put      (File, ") mod ");
!       Put      (File, Image (L1));
        Put      (File, ";");
        New_Line (File);
  
*************** package body GNAT.Perfect_Hash_Generator
*** 1734,1740 ****
        end if;
  
        Put      (File, ") mod ");
!       Put      (File, Image (NV));
        Put      (File, ";");
        New_Line (File);
  
--- 579,585 ----
        end if;
  
        Put      (File, ") mod ");
!       Put      (File, Image (L1));
        Put      (File, ";");
        New_Line (File);
  
*************** package body GNAT.Perfect_Hash_Generator
*** 1874,1927 ****
        end if;
     end Put;
  
-    ---------------
-    -- Put_Edges --
-    ---------------
- 
-    procedure Put_Edges (File  : File_Descriptor; Title : String) is
-       E  : Edge_Type;
-       F1 : constant Natural := 1;
-       L1 : constant Natural := Edges_Len - 1;
-       M  : constant Natural := Max / 5;
- 
-    begin
-       Put (File, Title);
-       New_Line (File);
- 
-       --  Edges valid range is 1 .. Edge_Len - 1
- 
-       for J in F1 .. L1 loop
-          E := Get_Edges (J);
-          Put (File, Image (J, M),     F1, L1, J, 1, 4, 1);
-          Put (File, Image (E.X, M),   F1, L1, J, 1, 4, 2);
-          Put (File, Image (E.Y, M),   F1, L1, J, 1, 4, 3);
-          Put (File, Image (E.Key, M), F1, L1, J, 1, 4, 4);
-       end loop;
-    end Put_Edges;
- 
-    ----------------------
-    -- Put_Initial_Keys --
-    ----------------------
- 
-    procedure Put_Initial_Keys (File : File_Descriptor; Title : String) is
-       F1 : constant Natural := 0;
-       L1 : constant Natural := NK - 1;
-       M  : constant Natural := Max / 5;
-       K  : Key_Type;
- 
-    begin
-       Put (File, Title);
-       New_Line (File);
- 
-       for J in F1 .. L1 loop
-          K := Get_Key (J);
-          Put (File, Image (J, M),           F1, L1, J, 1, 3, 1);
-          Put (File, Image (K.Edge, M),      F1, L1, J, 1, 3, 2);
-          Put (File, Trim_Trailing_Nuls (WT.Table (Initial (J)).all),
-                     F1, L1, J, 1, 3, 3);
-       end loop;
-    end Put_Initial_Keys;
- 
     --------------------
     -- Put_Int_Matrix --
     --------------------
--- 719,724 ----
*************** package body GNAT.Perfect_Hash_Generator
*** 1929,1935 ****
     procedure Put_Int_Matrix
       (File   : File_Descriptor;
        Title  : String;
!       Table  : Integer;
        Len_1  : Natural;
        Len_2  : Natural)
     is
--- 726,732 ----
     procedure Put_Int_Matrix
       (File   : File_Descriptor;
        Title  : String;
!       Table  : Table_Name;
        Len_1  : Natural;
        Len_2  : Natural)
     is
*************** package body GNAT.Perfect_Hash_Generator
*** 1945,2609 ****
  
        if Len_2 = 0 then
           for J in F1 .. L1 loop
!             Ix := IT.Table (Table + J);
              Put (File, Image (Ix), 1, 0, 1, F1, L1, J);
           end loop;
  
        else
           for J in F1 .. L1 loop
              for K in F2 .. L2 loop
!                Ix := IT.Table (Table + J + K * Len_1);
                 Put (File, Image (Ix), F1, L1, J, F2, L2, K);
              end loop;
           end loop;
        end if;
     end Put_Int_Matrix;
  
-    --------------------
-    -- Put_Int_Vector --
-    --------------------
- 
-    procedure Put_Int_Vector
-      (File   : File_Descriptor;
-       Title  : String;
-       Vector : Integer;
-       Length : Natural)
-    is
-       F2 : constant Natural := 0;
-       L2 : constant Natural := Length - 1;
- 
-    begin
-       Put (File, Title);
-       New_Line (File);
- 
-       for J in F2 .. L2 loop
-          Put (File, Image (IT.Table (Vector + J)), 1, 0, 1, F2, L2, J);
-       end loop;
-    end Put_Int_Vector;
- 
-    ----------------------
-    -- Put_Reduced_Keys --
-    ----------------------
- 
-    procedure Put_Reduced_Keys (File : File_Descriptor; Title : String) is
-       F1 : constant Natural := 0;
-       L1 : constant Natural := NK - 1;
-       M  : constant Natural := Max / 5;
-       K  : Key_Type;
- 
-    begin
-       Put (File, Title);
-       New_Line (File);
- 
-       for J in F1 .. L1 loop
-          K := Get_Key (J);
-          Put (File, Image (J, M),           F1, L1, J, 1, 3, 1);
-          Put (File, Image (K.Edge, M),      F1, L1, J, 1, 3, 2);
-          Put (File, Trim_Trailing_Nuls (WT.Table (Reduced (J)).all),
-                     F1, L1, J, 1, 3, 3);
-       end loop;
-    end Put_Reduced_Keys;
- 
-    -----------------------
-    -- Put_Used_Char_Set --
-    -----------------------
- 
-    procedure Put_Used_Char_Set (File : File_Descriptor; Title : String) is
-       F : constant Natural := Character'Pos (Character'First);
-       L : constant Natural := Character'Pos (Character'Last);
- 
-    begin
-       Put (File, Title);
-       New_Line (File);
- 
-       for J in Character'Range loop
-          Put
-            (File, Image (Get_Used_Char (J)), 1, 0, 1, F, L, Character'Pos (J));
-       end loop;
-    end Put_Used_Char_Set;
- 
-    ----------------------
-    -- Put_Vertex_Table --
-    ----------------------
- 
-    procedure Put_Vertex_Table (File : File_Descriptor; Title : String) is
-       F1 : constant Natural := 0;
-       L1 : constant Natural := NV - 1;
-       M  : constant Natural := Max / 4;
-       V  : Vertex_Type;
- 
-    begin
-       Put (File, Title);
-       New_Line (File);
- 
-       for J in F1 .. L1 loop
-          V := Get_Vertices (J);
-          Put (File, Image (J, M),       F1, L1, J, 1, 3, 1);
-          Put (File, Image (V.First, M), F1, L1, J, 1, 3, 2);
-          Put (File, Image (V.Last, M),  F1, L1, J, 1, 3, 3);
-       end loop;
-    end Put_Vertex_Table;
- 
-    ------------
-    -- Random --
-    ------------
- 
-    procedure Random (Seed : in out Natural) is
- 
-       --  Park & Miller Standard Minimal using Schrage's algorithm to avoid
-       --  overflow: Xn+1 = 16807 * Xn mod (2 ** 31 - 1)
- 
-       R : Natural;
-       Q : Natural;
-       X : Integer;
- 
-    begin
-       R := Seed mod 127773;
-       Q := Seed / 127773;
-       X := 16807 * R - 2836 * Q;
- 
-       Seed := (if X < 0 then X + 2147483647 else X);
-    end Random;
- 
-    -------------
-    -- Reduced --
-    -------------
- 
-    function Reduced (K : Key_Id) return Word_Id is
-    begin
-       return K + NK + 1;
-    end Reduced;
- 
-    -----------------
-    -- Resize_Word --
-    -----------------
- 
-    procedure Resize_Word (W : in out Word_Type; Len : Natural) is
-       S1 : constant String := W.all;
-       S2 : String (1 .. Len) := (others => ASCII.NUL);
-       L  : constant Natural := S1'Length;
-    begin
-       if L /= Len then
-          Free_Word (W);
-          S2 (1 .. L) := S1;
-          W := New_Word (S2);
-       end if;
-    end Resize_Word;
- 
-    --------------------------
-    -- Select_Char_Position --
-    --------------------------
- 
-    procedure Select_Char_Position is
- 
-       type Vertex_Table_Type is array (Natural range <>) of Vertex_Type;
- 
-       procedure Build_Identical_Keys_Sets
-         (Table : in out Vertex_Table_Type;
-          Last  : in out Natural;
-          Pos   : Natural);
-       --  Build a list of keys subsets that are identical with the current
-       --  position selection plus Pos. Once this routine is called, reduced
-       --  words are sorted by subsets and each item (First, Last) in Sets
-       --  defines the range of identical keys.
-       --  Need comment saying exactly what Last is ???
- 
-       function Count_Different_Keys
-         (Table : Vertex_Table_Type;
-          Last  : Natural;
-          Pos   : Natural) return Natural;
-       --  For each subset in Sets, count the number of different keys if we add
-       --  Pos to the current position selection.
- 
-       Sel_Position : IT.Table_Type (1 .. Max_Key_Len);
-       Last_Sel_Pos : Natural := 0;
-       Max_Sel_Pos  : Natural := 0;
- 
-       -------------------------------
-       -- Build_Identical_Keys_Sets --
-       -------------------------------
- 
-       procedure Build_Identical_Keys_Sets
-         (Table : in out Vertex_Table_Type;
-          Last  : in out Natural;
-          Pos   : Natural)
-       is
-          S : constant Vertex_Table_Type := Table (Table'First .. Last);
-          C : constant Natural           := Pos;
-          --  Shortcuts (why are these not renames ???)
- 
-          F : Integer;
-          L : Integer;
-          --  First and last words of a subset
- 
-          Offset : Natural;
-          --  GNAT.Heap_Sort assumes that the first array index is 1. Offset
-          --  defines the translation to operate.
- 
-          function Lt (L, R : Natural) return Boolean;
-          procedure Move (From : Natural; To : Natural);
-          --  Subprograms needed by GNAT.Heap_Sort_G
- 
-          --------
-          -- Lt --
-          --------
- 
-          function Lt (L, R : Natural) return Boolean is
-             C     : constant Natural := Pos;
-             Left  : Natural;
-             Right : Natural;
- 
-          begin
-             if L = 0 then
-                Left  := NK;
-                Right := Offset + R;
-             elsif R = 0 then
-                Left  := Offset + L;
-                Right := NK;
-             else
-                Left  := Offset + L;
-                Right := Offset + R;
-             end if;
- 
-             return WT.Table (Left)(C) < WT.Table (Right)(C);
-          end Lt;
- 
-          ----------
-          -- Move --
-          ----------
- 
-          procedure Move (From : Natural; To : Natural) is
-             Target, Source : Natural;
- 
-          begin
-             if From = 0 then
-                Source := NK;
-                Target := Offset + To;
-             elsif To = 0 then
-                Source := Offset + From;
-                Target := NK;
-             else
-                Source := Offset + From;
-                Target := Offset + To;
-             end if;
- 
-             WT.Table (Target) := WT.Table (Source);
-             WT.Table (Source) := null;
-          end Move;
- 
-          package Sorting is new GNAT.Heap_Sort_G (Move, Lt);
- 
-       --  Start of processing for Build_Identical_Key_Sets
- 
-       begin
-          Last := 0;
- 
-          --  For each subset in S, extract the new subsets we have by adding C
-          --  in the position selection.
- 
-          for J in S'Range loop
-             pragma Annotate (CodePeer, Modified, S (J));
- 
-             if S (J).First = S (J).Last then
-                F := S (J).First;
-                L := S (J).Last;
-                Last := Last + 1;
-                Table (Last) := (F, L);
- 
-             else
-                Offset := Reduced (S (J).First) - 1;
-                Sorting.Sort (S (J).Last - S (J).First + 1);
- 
-                F := S (J).First;
-                L := F;
-                for N in S (J).First .. S (J).Last loop
- 
-                   --  For the last item, close the last subset
- 
-                   if N = S (J).Last then
-                      Last := Last + 1;
-                      Table (Last) := (F, N);
- 
-                   --  Two contiguous words are identical when they have the
-                   --  same Cth character.
- 
-                   elsif WT.Table (Reduced (N))(C) =
-                         WT.Table (Reduced (N + 1))(C)
-                   then
-                      L := N + 1;
- 
-                   --  Find a new subset of identical keys. Store the current
-                   --  one and create a new subset.
- 
-                   else
-                      Last := Last + 1;
-                      Table (Last) := (F, L);
-                      F := N + 1;
-                      L := F;
-                   end if;
-                end loop;
-             end if;
-          end loop;
-       end Build_Identical_Keys_Sets;
- 
-       --------------------------
-       -- Count_Different_Keys --
-       --------------------------
- 
-       function Count_Different_Keys
-         (Table : Vertex_Table_Type;
-          Last  : Natural;
-          Pos   : Natural) return Natural
-       is
-          N : array (Character) of Natural;
-          C : Character;
-          T : Natural := 0;
- 
-       begin
-          --  For each subset, count the number of words that are still
-          --  different when we include Pos in the position selection. Only
-          --  focus on this position as the other positions already produce
-          --  identical keys.
- 
-          for S in 1 .. Last loop
- 
-             --  Count the occurrences of the different characters
- 
-             N := (others => 0);
-             for K in Table (S).First .. Table (S).Last loop
-                C := WT.Table (Reduced (K))(Pos);
-                N (C) := N (C) + 1;
-             end loop;
- 
-             --  Update the number of different keys. Each character used
-             --  denotes a different key.
- 
-             for J in N'Range loop
-                if N (J) > 0 then
-                   T := T + 1;
-                end if;
-             end loop;
-          end loop;
- 
-          return T;
-       end Count_Different_Keys;
- 
-    --  Start of processing for Select_Char_Position
- 
-    begin
-       --  Initialize the reduced words set
- 
-       for K in 0 .. NK - 1 loop
-          WT.Table (Reduced (K)) := New_Word (WT.Table (Initial (K)).all);
-       end loop;
- 
-       declare
-          Differences          : Natural;
-          Max_Differences      : Natural := 0;
-          Old_Differences      : Natural;
-          Max_Diff_Sel_Pos     : Natural := 0; -- init to kill warning
-          Max_Diff_Sel_Pos_Idx : Natural := 0; -- init to kill warning
-          Same_Keys_Sets_Table : Vertex_Table_Type (1 .. NK);
-          Same_Keys_Sets_Last  : Natural := 1;
- 
-       begin
-          for C in Sel_Position'Range loop
-             Sel_Position (C) := C;
-          end loop;
- 
-          Same_Keys_Sets_Table (1) := (0, NK - 1);
- 
-          loop
-             --  Preserve maximum number of different keys and check later on
-             --  that this value is strictly incrementing. Otherwise, it means
-             --  that two keys are strictly identical.
- 
-             Old_Differences := Max_Differences;
- 
-             --  The first position should not exceed the minimum key length.
-             --  Otherwise, we may end up with an empty word once reduced.
- 
-             Max_Sel_Pos :=
-               (if Last_Sel_Pos = 0 then Min_Key_Len else Max_Key_Len);
- 
-             --  Find which position increases more the number of differences
- 
-             for J in Last_Sel_Pos + 1 .. Max_Sel_Pos loop
-                Differences := Count_Different_Keys
-                  (Same_Keys_Sets_Table,
-                   Same_Keys_Sets_Last,
-                   Sel_Position (J));
- 
-                if Verbose then
-                   Put (Output,
-                        "Selecting position" & Sel_Position (J)'Img &
-                          " results in" & Differences'Img &
-                          " differences");
-                   New_Line (Output);
-                end if;
- 
-                if Differences > Max_Differences then
-                   Max_Differences      := Differences;
-                   Max_Diff_Sel_Pos     := Sel_Position (J);
-                   Max_Diff_Sel_Pos_Idx := J;
-                end if;
-             end loop;
- 
-             if Old_Differences = Max_Differences then
-                raise Program_Error with "some keys are identical";
-             end if;
- 
-             --  Insert selected position and sort Sel_Position table
- 
-             Last_Sel_Pos := Last_Sel_Pos + 1;
-             Sel_Position (Last_Sel_Pos + 1 .. Max_Diff_Sel_Pos_Idx) :=
-               Sel_Position (Last_Sel_Pos .. Max_Diff_Sel_Pos_Idx - 1);
-             Sel_Position (Last_Sel_Pos) := Max_Diff_Sel_Pos;
- 
-             for P in 1 .. Last_Sel_Pos - 1 loop
-                if Max_Diff_Sel_Pos < Sel_Position (P) then
-                   pragma Annotate
-                     (CodePeer, False_Positive,
-                      "test always false", "false positive?");
- 
-                   Sel_Position (P + 1 .. Last_Sel_Pos) :=
-                     Sel_Position (P .. Last_Sel_Pos - 1);
-                   Sel_Position (P) := Max_Diff_Sel_Pos;
-                   exit;
-                end if;
-             end loop;
- 
-             exit when Max_Differences = NK;
- 
-             Build_Identical_Keys_Sets
-               (Same_Keys_Sets_Table,
-                Same_Keys_Sets_Last,
-                Max_Diff_Sel_Pos);
- 
-             if Verbose then
-                Put (Output,
-                     "Selecting position" & Max_Diff_Sel_Pos'Img &
-                       " results in" & Max_Differences'Img &
-                       " differences");
-                New_Line (Output);
-                Put (Output, "--");
-                New_Line (Output);
-                for J in 1 .. Same_Keys_Sets_Last loop
-                   for K in
-                     Same_Keys_Sets_Table (J).First ..
-                     Same_Keys_Sets_Table (J).Last
-                   loop
-                      Put (Output,
-                           Trim_Trailing_Nuls (WT.Table (Reduced (K)).all));
-                      New_Line (Output);
-                   end loop;
-                   Put (Output, "--");
-                   New_Line (Output);
-                end loop;
-             end if;
-          end loop;
-       end;
- 
-       Char_Pos_Set_Len := Last_Sel_Pos;
-       Char_Pos_Set := Allocate (Char_Pos_Set_Len);
- 
-       for C in 1 .. Last_Sel_Pos loop
-          Set_Char_Pos (C - 1, Sel_Position (C));
-       end loop;
-    end Select_Char_Position;
- 
-    --------------------------
-    -- Select_Character_Set --
-    --------------------------
- 
-    procedure Select_Character_Set is
-       Last : Natural := 0;
-       Used : array (Character) of Boolean := (others => False);
-       Char : Character;
- 
-    begin
-       for J in 0 .. NK - 1 loop
-          for K in 0 .. Char_Pos_Set_Len - 1 loop
-             Char := WT.Table (Initial (J))(Get_Char_Pos (K));
-             exit when Char = ASCII.NUL;
-             Used (Char) := True;
-          end loop;
-       end loop;
- 
-       Used_Char_Set_Len := 256;
-       Used_Char_Set := Allocate (Used_Char_Set_Len);
- 
-       for J in Used'Range loop
-          if Used (J) then
-             Set_Used_Char (J, Last);
-             Last := Last + 1;
-          else
-             Set_Used_Char (J, 0);
-          end if;
-       end loop;
-    end Select_Character_Set;
- 
-    ------------------
-    -- Set_Char_Pos --
-    ------------------
- 
-    procedure Set_Char_Pos (P : Natural; Item : Natural) is
-       N : constant Natural := Char_Pos_Set + P;
-    begin
-       IT.Table (N) := Item;
-    end Set_Char_Pos;
- 
-    ---------------
-    -- Set_Edges --
-    ---------------
- 
-    procedure Set_Edges (F : Natural; Item : Edge_Type) is
-       N : constant Natural := Edges + (F * Edge_Size);
-    begin
-       IT.Table (N)     := Item.X;
-       IT.Table (N + 1) := Item.Y;
-       IT.Table (N + 2) := Item.Key;
-    end Set_Edges;
- 
-    ---------------
-    -- Set_Graph --
-    ---------------
- 
-    procedure Set_Graph (N : Natural; Item : Integer) is
-    begin
-       IT.Table (G + N) := Item;
-    end Set_Graph;
- 
-    -------------
-    -- Set_Key --
-    -------------
- 
-    procedure Set_Key (N : Key_Id; Item : Key_Type) is
-    begin
-       IT.Table (Keys + N) := Item.Edge;
-    end Set_Key;
- 
-    ---------------
-    -- Set_Table --
-    ---------------
- 
-    procedure Set_Table (T : Integer; X, Y : Natural; Item : Natural) is
-       N : constant Natural := T + ((Y * T1_Len) + X);
-    begin
-       IT.Table (N) := Item;
-    end Set_Table;
- 
-    -------------------
-    -- Set_Used_Char --
-    -------------------
- 
-    procedure Set_Used_Char (C : Character; Item : Natural) is
-       N : constant Natural := Used_Char_Set + Character'Pos (C);
-    begin
-       IT.Table (N) := Item;
-    end Set_Used_Char;
- 
-    ------------------
-    -- Set_Vertices --
-    ------------------
- 
-    procedure Set_Vertices (F : Natural; Item : Vertex_Type) is
-       N : constant Natural := Vertices + (F * Vertex_Size);
-    begin
-       IT.Table (N)     := Item.First;
-       IT.Table (N + 1) := Item.Last;
-    end Set_Vertices;
- 
-    ---------
-    -- Sum --
-    ---------
- 
-    function Sum
-      (Word  : Word_Type;
-       Table : Table_Id;
-       Opt   : Optimization) return Natural
-    is
-       S : Natural := 0;
-       R : Natural;
- 
-    begin
-       case Opt is
-          when CPU_Time =>
-             for J in 0 .. T1_Len - 1 loop
-                exit when Word (J + 1) = ASCII.NUL;
-                R := Get_Table (Table, J, Get_Used_Char (Word (J + 1)));
-                pragma Assert (NV /= 0);
-                S := (S + R) mod NV;
-             end loop;
- 
-          when Memory_Space =>
-             for J in 0 .. T1_Len - 1 loop
-                exit when Word (J + 1) = ASCII.NUL;
-                R := Get_Table (Table, J, 0);
-                pragma Assert (NV /= 0);
-                S := (S + R * Character'Pos (Word (J + 1))) mod NV;
-             end loop;
-       end case;
- 
-       return S;
-    end Sum;
- 
-    ------------------------
-    -- Trim_Trailing_Nuls --
-    ------------------------
- 
-    function Trim_Trailing_Nuls (Str : String) return String is
-    begin
-       for J in reverse Str'Range loop
-          if Str (J) /= ASCII.NUL then
-             return Str (Str'First .. J);
-          end if;
-       end loop;
- 
-       return Str;
-    end Trim_Trailing_Nuls;
- 
-    ---------------
-    -- Type_Size --
-    ---------------
- 
-    function Type_Size (L : Natural) return Natural is
-    begin
-       if L <= 2 ** 8 then
-          return 8;
-       elsif L <= 2 ** 16 then
-          return 16;
-       else
-          return 32;
-       end if;
-    end Type_Size;
- 
-    -----------
-    -- Value --
-    -----------
- 
-    function Value
-      (Name : Table_Name;
-       J    : Natural;
-       K    : Natural := 0) return Natural
-    is
-    begin
-       case Name is
-          when Character_Position =>
-             return Get_Char_Pos (J);
- 
-          when Used_Character_Set =>
-             return Get_Used_Char (Character'Val (J));
- 
-          when Function_Table_1 =>
-             return Get_Table (T1, J, K);
- 
-          when Function_Table_2 =>
-             return Get_Table (T2, J, K);
- 
-          when Graph_Table =>
-             return Get_Graph (J);
-       end case;
-    end Value;
- 
  end GNAT.Perfect_Hash_Generators;
--- 742,759 ----
  
        if Len_2 = 0 then
           for J in F1 .. L1 loop
!             Ix := Value (Table, J, 0);
              Put (File, Image (Ix), 1, 0, 1, F1, L1, J);
           end loop;
  
        else
           for J in F1 .. L1 loop
              for K in F2 .. L2 loop
!                Ix := Value (Table, J, K);
                 Put (File, Image (Ix), F1, L1, J, F2, L2, K);
              end loop;
           end loop;
        end if;
     end Put_Int_Matrix;
  
  end GNAT.Perfect_Hash_Generators;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-pehage.ads gcc-12.1.0/gcc/ada/libgnat/g-pehage.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-pehage.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-pehage.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 64,71 ****
--- 64,75 ----
  --  < h (w2). These hashing functions are convenient for use with realtime
  --  applications.
  
+ with System.Perfect_Hash_Generators;
+ 
  package GNAT.Perfect_Hash_Generators is
  
+    package SPHG renames System.Perfect_Hash_Generators;
+ 
     Default_K_To_V : constant Float  := 2.05;
     --  Default ratio for the algorithm. When K is the number of keys, V =
     --  (K_To_V) * K is the size of the main table of the hash function. To
*************** package GNAT.Perfect_Hash_Generators is
*** 83,94 ****
     --  try and may have to iterate a number of times. This constant bounds the
     --  number of tries.
  
!    type Optimization is (Memory_Space, CPU_Time);
     --  Optimize either the memory space or the execution time. Note: in
     --  practice, the optimization mode has little effect on speed. The tables
     --  are somewhat smaller with Memory_Space.
  
!    Verbose : Boolean := False;
     --  Output the status of the algorithm. For instance, the tables, the random
     --  graph (edges, vertices) and selected char positions are output between
     --  two iterations.
--- 87,98 ----
     --  try and may have to iterate a number of times. This constant bounds the
     --  number of tries.
  
!    type Optimization is new SPHG.Optimization;
     --  Optimize either the memory space or the execution time. Note: in
     --  practice, the optimization mode has little effect on speed. The tables
     --  are somewhat smaller with Memory_Space.
  
!    Verbose : Boolean renames SPHG.Verbose;
     --  Output the status of the algorithm. For instance, the tables, the random
     --  graph (edges, vertices) and selected char positions are output between
     --  two iterations.
*************** package GNAT.Perfect_Hash_Generators is
*** 106,115 ****
     --  the same words.
     --
     --  A classical way of doing is to Insert all the words and then to invoke
!    --  Initialize and Compute. If Compute fails to find a perfect hash
!    --  function, invoke Initialize another time with other configuration
!    --  parameters (probably with a greater K_To_V ratio). Once successful,
!    --  invoke Produce and Finalize.
  
     procedure Finalize;
     --  Deallocate the internal structures and the words table
--- 110,119 ----
     --  the same words.
     --
     --  A classical way of doing is to Insert all the words and then to invoke
!    --  Initialize and Compute. If this fails to find a perfect hash function,
!    --  invoke Initialize again with other configuration parameters (probably
!    --  with a greater K_To_V ratio). Once successful, invoke Produce and then
!    --  Finalize.
  
     procedure Finalize;
     --  Deallocate the internal structures and the words table
*************** package GNAT.Perfect_Hash_Generators is
*** 117,123 ****
     procedure Insert (Value : String);
     --  Insert a new word into the table. ASCII.NUL characters are not allowed.
  
!    Too_Many_Tries : exception;
     --  Raised after Tries unsuccessful runs
  
     procedure Compute (Position : String := Default_Position);
--- 121,127 ----
     procedure Insert (Value : String);
     --  Insert a new word into the table. ASCII.NUL characters are not allowed.
  
!    Too_Many_Tries : exception renames SPHG.Too_Many_Tries;
     --  Raised after Tries unsuccessful runs
  
     procedure Compute (Position : String := Default_Position);
*************** package GNAT.Perfect_Hash_Generators is
*** 138,238 ****
     --  GNAT file name for a package named Pkg_Name. If Use_Stdout is True, the
     --  output goes to standard output, and no files are written.
  
-    ----------------------------------------------------------------
- 
-    --  The routines and structures defined below allow producing the hash
-    --  function using a different way from the procedure above. The procedure
-    --  Define returns the lengths of an internal table and its item type size.
-    --  The function Value returns the value of each item in the table.
- 
-    --  The hash function has the following form:
- 
-    --             h (w) = (g (f1 (w)) + g (f2 (w))) mod m
- 
-    --  G is a function based on a graph table [0,n-1] -> [0,m-1]. m is the
-    --  number of keys. n is an internally computed value and it can be obtained
-    --  as the length of vector G.
- 
-    --  F1 and F2 are two functions based on two function tables T1 and T2.
-    --  Their definition depends on the chosen optimization mode.
- 
-    --  Only some character positions are used in the words because they are
-    --  significant. They are listed in a character position table (P in the
-    --  pseudo-code below). For instance, in {"jan", "feb", "mar", "apr", "jun",
-    --  "jul", "aug", "sep", "oct", "nov", "dec"}, only positions 2 and 3 are
-    --  significant (the first character can be ignored). In this example, P =
-    --  {2, 3}
- 
-    --  When Optimization is CPU_Time, the first dimension of T1 and T2
-    --  corresponds to the character position in the word and the second to the
-    --  character set. As all the character set is not used, we define a used
-    --  character table which associates a distinct index to each used character
-    --  (unused characters are mapped to zero). In this case, the second
-    --  dimension of T1 and T2 is reduced to the used character set (C in the
-    --  pseudo-code below). Therefore, the hash function has the following:
- 
-    --    function Hash (S : String) return Natural is
-    --       F      : constant Natural := S'First - 1;
-    --       L      : constant Natural := S'Length;
-    --       F1, F2 : Natural := 0;
-    --       J      : <t>;
- 
-    --    begin
-    --       for K in P'Range loop
-    --          exit when L < P (K);
-    --          J  := C (S (P (K) + F));
-    --          F1 := (F1 + Natural (T1 (K, J))) mod <n>;
-    --          F2 := (F2 + Natural (T2 (K, J))) mod <n>;
-    --       end loop;
- 
-    --       return (Natural (G (F1)) + Natural (G (F2))) mod <m>;
-    --    end Hash;
- 
-    --  When Optimization is Memory_Space, the first dimension of T1 and T2
-    --  corresponds to the character position in the word and the second
-    --  dimension is ignored. T1 and T2 are no longer matrices but vectors.
-    --  Therefore, the used character table is not available. The hash function
-    --  has the following form:
- 
-    --     function Hash (S : String) return Natural is
-    --        F      : constant Natural := S'First - 1;
-    --        L      : constant Natural := S'Length;
-    --        F1, F2 : Natural := 0;
-    --        J      : <t>;
- 
-    --     begin
-    --        for K in P'Range loop
-    --           exit when L < P (K);
-    --           J  := Character'Pos (S (P (K) + F));
-    --           F1 := (F1 + Natural (T1 (K) * J)) mod <n>;
-    --           F2 := (F2 + Natural (T2 (K) * J)) mod <n>;
-    --        end loop;
- 
-    --        return (Natural (G (F1)) + Natural (G (F2))) mod <m>;
-    --     end Hash;
- 
-    type Table_Name is
-      (Character_Position,
-       Used_Character_Set,
-       Function_Table_1,
-       Function_Table_2,
-       Graph_Table);
- 
-    procedure Define
-      (Name      : Table_Name;
-       Item_Size : out Natural;
-       Length_1  : out Natural;
-       Length_2  : out Natural);
-    --  Return the definition of the table Name. This includes the length of
-    --  dimensions 1 and 2 and the size of an unsigned integer item. When
-    --  Length_2 is zero, the table has only one dimension. All the ranges
-    --  start from zero.
- 
-    function Value
-      (Name : Table_Name;
-       J    : Natural;
-       K    : Natural := 0) return Natural;
-    --  Return the value of the component (I, J) of the table Name. When the
-    --  table has only one dimension, J is ignored.
- 
  end GNAT.Perfect_Hash_Generators;
--- 142,145 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-rannum.adb gcc-12.1.0/gcc/ada/libgnat/g-rannum.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-rannum.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-rannum.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2007-2022, 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- --
*************** is
*** 385,391 ****
        Result : Image_String;
  
     begin
!       Result := (others => ' ');
        Result (1 .. Sys_Max_Image_Width) := Image (Gen.Rep);
  
        if Gen.Have_Gaussian then
--- 385,391 ----
        Result : Image_String;
  
     begin
!       Result := [others => ' '];
        Result (1 .. Sys_Max_Image_Width) := Image (Gen.Rep);
  
        if Gen.Have_Gaussian then
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-rannum.ads gcc-12.1.0/gcc/ada/libgnat/g-rannum.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-rannum.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-rannum.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2007-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-regexp.adb gcc-12.1.0/gcc/ada/libgnat/g-regexp.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-regexp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-regexp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-regexp.ads gcc-12.1.0/gcc/ada/libgnat/g-regexp.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-regexp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-regexp.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-regist.adb gcc-12.1.0/gcc/ada/libgnat/g-regist.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-regist.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-regist.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-regist.ads gcc-12.1.0/gcc/ada/libgnat/g-regist.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-regist.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-regist.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-regpat.adb gcc-12.1.0/gcc/ada/libgnat/g-regpat.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-regpat.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-regpat.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                                                                          --
  --               Copyright (C) 1986 by University of Toronto.               --
! --                      Copyright (C) 1999-2020, AdaCore                    --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                                                                          --
  --               Copyright (C) 1986 by University of Toronto.               --
! --                      Copyright (C) 1999-2022, AdaCore                    --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-regpat.ads gcc-12.1.0/gcc/ada/libgnat/g-regpat.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-regpat.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-regpat.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                                                                          --
  --               Copyright (C) 1986 by University of Toronto.               --
! --                     Copyright (C) 1996-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                                                                          --
  --               Copyright (C) 1986 by University of Toronto.               --
! --                     Copyright (C) 1996-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-rewdat.adb gcc-12.1.0/gcc/ada/libgnat/g-rewdat.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-rewdat.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-rewdat.adb	Fri May  6 07:30:56 2022
***************
*** 5,11 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2014-2020, 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- --
--- 5,11 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2014-2022, 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- --
*************** package body GNAT.Rewrite_Data is
*** 37,43 ****
     subtype SEO is Stream_Element_Offset;
  
     procedure Do_Output
!      (B      : in out Buffer;
        Data   : Stream_Element_Array;
        Output : not null access procedure (Data : Stream_Element_Array));
     --  Do the actual output. This ensures that we properly send the data
--- 37,43 ----
     subtype SEO is Stream_Element_Offset;
  
     procedure Do_Output
!      (B      : Buffer;
        Data   : Stream_Element_Array;
        Output : not null access procedure (Data : Stream_Element_Array));
     --  Do the actual output. This ensures that we properly send the data
*************** package body GNAT.Rewrite_Data is
*** 81,87 ****
     ---------------
  
     procedure Do_Output
!      (B      : in out Buffer;
        Data   : Stream_Element_Array;
        Output : not null access procedure (Data : Stream_Element_Array))
     is
--- 81,87 ----
     ---------------
  
     procedure Do_Output
!      (B      : Buffer;
        Data   : Stream_Element_Array;
        Output : not null access procedure (Data : Stream_Element_Array))
     is
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-rewdat.ads gcc-12.1.0/gcc/ada/libgnat/g-rewdat.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-rewdat.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-rewdat.ads	Fri May  6 07:30:56 2022
***************
*** 5,11 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2014-2020, 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- --
--- 5,11 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2014-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sechas.adb gcc-12.1.0/gcc/ada/libgnat/g-sechas.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sechas.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sechas.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
*************** package body GNAT.Secure_Hashes is
*** 38,44 ****
                   "0123456789abcdef";
  
     type Fill_Buffer_Access is
!      access procedure
         (M     : in out Message_State;
          SEA   : Stream_Element_Array;
          First : Stream_Element_Offset;
--- 38,44 ----
                   "0123456789abcdef";
  
     type Fill_Buffer_Access is
!      not null access procedure
         (M     : in out Message_State;
          SEA   : Stream_Element_Array;
          First : Stream_Element_Offset;
*************** package body GNAT.Secure_Hashes is
*** 238,244 ****
                       mod FC.M_State.Block_Length;
           declare
              Pad : Stream_Element_Array (1 .. 1 + Zeroes + Size_Length) :=
!                     (1 => 128, others => 0);
  
              Index       : Stream_Element_Offset;
              First_Index : Stream_Element_Offset;
--- 238,244 ----
                       mod FC.M_State.Block_Length;
           declare
              Pad : Stream_Element_Array (1 .. 1 + Zeroes + Size_Length) :=
!                     [1 => 128, others => 0];
  
              Index       : Stream_Element_Offset;
              First_Index : Stream_Element_Offset;
*************** package body GNAT.Secure_Hashes is
*** 281,287 ****
              declare
                 Outer_C : Context;
                 Opad    : Stream_Element_Array :=
!                  (1 .. Stream_Element_Offset (Block_Length) => 16#5c#);
  
              begin
                 for J in C.Key'Range loop
--- 281,287 ----
              declare
                 Outer_C : Context;
                 Opad    : Stream_Element_Array :=
!                  [1 .. Stream_Element_Offset (Block_Length) => 16#5c#];
  
              begin
                 for J in C.Key'Range loop
*************** package body GNAT.Secure_Hashes is
*** 329,335 ****
  
              declare
                 Ipad : Stream_Element_Array :=
!                  (1 .. Stream_Element_Offset (Block_Length) => 16#36#);
  
              begin
                 for J in C.Key'Range loop
--- 329,335 ----
  
              declare
                 Ipad : Stream_Element_Array :=
!                  [1 .. Stream_Element_Offset (Block_Length) => 16#36#];
  
              begin
                 for J in C.Key'Range loop
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sechas.ads gcc-12.1.0/gcc/ada/libgnat/g-sechas.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sechas.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sechas.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sehamd.adb gcc-12.1.0/gcc/ada/libgnat/g-sehamd.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sehamd.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sehamd.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sehamd.ads gcc-12.1.0/gcc/ada/libgnat/g-sehamd.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sehamd.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sehamd.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2002-2022, 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- --
*************** private
*** 68,74 ****
     Initial_D : constant := 16#10325476#;
  
     Initial_State : constant Hash_State.State :=
!                      (Initial_A, Initial_B, Initial_C, Initial_D);
     --  Initialization vector from RFC 1321
  
  end GNAT.Secure_Hashes.MD5;
--- 68,74 ----
     Initial_D : constant := 16#10325476#;
  
     Initial_State : constant Hash_State.State :=
!                      [Initial_A, Initial_B, Initial_C, Initial_D];
     --  Initialization vector from RFC 1321
  
  end GNAT.Secure_Hashes.MD5;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sehash.adb gcc-12.1.0/gcc/ada/libgnat/g-sehash.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sehash.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sehash.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sehash.ads gcc-12.1.0/gcc/ada/libgnat/g-sehash.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sehash.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sehash.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2002-2022, 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- --
*************** package GNAT.Secure_Hashes.SHA1 is
*** 62,72 ****
  private
  
     Initial_State : constant Hash_State.State :=
!                      (0 => 16#67452301#,
                        1 => 16#EFCDAB89#,
                        2 => 16#98BADCFE#,
                        3 => 16#10325476#,
!                       4 => 16#C3D2E1F0#);
     --  Initialization vector from FIPS PUB 180-3
  
  end GNAT.Secure_Hashes.SHA1;
--- 62,72 ----
  private
  
     Initial_State : constant Hash_State.State :=
!                      [0 => 16#67452301#,
                        1 => 16#EFCDAB89#,
                        2 => 16#98BADCFE#,
                        3 => 16#10325476#,
!                       4 => 16#C3D2E1F0#];
     --  Initialization vector from FIPS PUB 180-3
  
  end GNAT.Secure_Hashes.SHA1;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sercom.adb gcc-12.1.0/gcc/ada/libgnat/g-sercom.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sercom.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sercom.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sercom.ads gcc-12.1.0/gcc/ada/libgnat/g-sercom.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sercom.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sercom.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                    Copyright (C) 2007-2020, AdaCore                      --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                    Copyright (C) 2007-2022, AdaCore                      --
  --                                                                          --
  -- 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- --
*************** private
*** 192,198 ****
     end record;
  
     Data_Rate_Value : constant array (Data_Rate) of Interfaces.C.unsigned :=
!                        (B75      =>        75,
                          B110     =>       110,
                          B150     =>       150,
                          B300     =>       300,
--- 192,198 ----
     end record;
  
     Data_Rate_Value : constant array (Data_Rate) of Interfaces.C.unsigned :=
!                        [B75      =>        75,
                          B110     =>       110,
                          B150     =>       150,
                          B300     =>       300,
*************** private
*** 217,223 ****
                          B2500000 => 2_500_000,
                          B3000000 => 3_000_000,
                          B3500000 => 3_500_000,
!                         B4000000 => 4_000_000);
  
     function To_C (Port : Serial_Port) return Serial_Port_Descriptor is
        (Port.H);
--- 217,223 ----
                          B2500000 => 2_500_000,
                          B3000000 => 3_000_000,
                          B3500000 => 3_500_000,
!                         B4000000 => 4_000_000];
  
     function To_C (Port : Serial_Port) return Serial_Port_Descriptor is
        (Port.H);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sercom__linux.adb gcc-12.1.0/gcc/ada/libgnat/g-sercom__linux.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sercom__linux.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sercom__linux.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                    Copyright (C) 2007-2020, AdaCore                      --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                    Copyright (C) 2007-2022, AdaCore                      --
  --                                                                          --
  -- 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- --
*************** package body GNAT.Serial_Communications
*** 80,86 ****
     pragma Import (C, fcntl, "fcntl");
  
     C_Data_Rate : constant array (Data_Rate) of unsigned :=
!                    (B75      => OSC.B75,
                      B110     => OSC.B110,
                      B150     => OSC.B150,
                      B300     => OSC.B300,
--- 80,86 ----
     pragma Import (C, fcntl, "fcntl");
  
     C_Data_Rate : constant array (Data_Rate) of unsigned :=
!                    [B75      => OSC.B75,
                      B110     => OSC.B110,
                      B150     => OSC.B150,
                      B300     => OSC.B300,
*************** package body GNAT.Serial_Communications
*** 105,122 ****
                      B2500000 => OSC.B2500000,
                      B3000000 => OSC.B3000000,
                      B3500000 => OSC.B3500000,
!                     B4000000 => OSC.B4000000);
  
     C_Bits      : constant array (Data_Bits) of unsigned :=
!                    (CS7 => OSC.CS7, CS8 => OSC.CS8);
  
     C_Stop_Bits : constant array (Stop_Bits_Number) of unsigned :=
!                    (One => 0, Two => OSC.CSTOPB);
  
     C_Parity    : constant array (Parity_Check) of unsigned :=
!                    (None => 0,
                      Odd  => OSC.PARENB or OSC.PARODD,
!                     Even => OSC.PARENB);
  
     procedure Raise_Error (Message : String; Error : Integer := Errno);
     pragma No_Return (Raise_Error);
--- 105,122 ----
                      B2500000 => OSC.B2500000,
                      B3000000 => OSC.B3000000,
                      B3500000 => OSC.B3500000,
!                     B4000000 => OSC.B4000000];
  
     C_Bits      : constant array (Data_Bits) of unsigned :=
!                    [CS7 => OSC.CS7, CS8 => OSC.CS8];
  
     C_Stop_Bits : constant array (Stop_Bits_Number) of unsigned :=
!                    [One => 0, Two => OSC.CSTOPB];
  
     C_Parity    : constant array (Parity_Check) of unsigned :=
!                    [None => 0,
                      Odd  => OSC.PARENB or OSC.PARODD,
!                     Even => OSC.PARENB];
  
     procedure Raise_Error (Message : String; Error : Integer := Errno);
     pragma No_Return (Raise_Error);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sercom__mingw.adb gcc-12.1.0/gcc/ada/libgnat/g-sercom__mingw.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sercom__mingw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sercom__mingw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                    Copyright (C) 2007-2020, AdaCore                      --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                    Copyright (C) 2007-2022, AdaCore                      --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sestin.ads gcc-12.1.0/gcc/ada/libgnat/g-sestin.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sestin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sestin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                      Copyright (C) 2004-2020, AdaCore                    --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                      Copyright (C) 2004-2022, AdaCore                    --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sets.adb gcc-12.1.0/gcc/ada/libgnat/g-sets.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sets.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sets.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                        Copyright (C) 2018-2020, AdaCore                  --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                        Copyright (C) 2018-2022, AdaCore                  --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sets.ads gcc-12.1.0/gcc/ada/libgnat/g-sets.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sets.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sets.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                        Copyright (C) 2018-2020, AdaCore                  --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                        Copyright (C) 2018-2022, AdaCore                  --
  --                                                                          --
  -- 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! pragma Compiler_Unit_Warning;
  
  with GNAT.Dynamic_HTables; use GNAT.Dynamic_HTables;
  
--- 29,36 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Note: this unit is used during bootstrap, see ADA_GENERATED_FILES in
! --  gcc-interface/Make-lang.in for details on the constraints.
  
  with GNAT.Dynamic_HTables; use GNAT.Dynamic_HTables;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sha1.adb gcc-12.1.0/gcc/ada/libgnat/g-sha1.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sha1.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sha1.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sha1.ads gcc-12.1.0/gcc/ada/libgnat/g-sha1.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sha1.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sha1.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sha224.ads gcc-12.1.0/gcc/ada/libgnat/g-sha224.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sha224.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sha224.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sha256.ads gcc-12.1.0/gcc/ada/libgnat/g-sha256.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sha256.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sha256.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sha384.ads gcc-12.1.0/gcc/ada/libgnat/g-sha384.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sha384.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sha384.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sha512.ads gcc-12.1.0/gcc/ada/libgnat/g-sha512.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sha512.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sha512.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --        Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-shsh32.adb gcc-12.1.0/gcc/ada/libgnat/g-shsh32.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-shsh32.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-shsh32.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-shsh32.ads gcc-12.1.0/gcc/ada/libgnat/g-shsh32.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-shsh32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-shsh32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
*************** package GNAT.Secure_Hashes.SHA2_32 is
*** 50,56 ****
     --  SHA-224 and SHA-256 operate on 32-bit big endian words
  
     K : constant Hash_State.State (0 .. 63) :=
!          (16#428a2f98#, 16#71374491#, 16#b5c0fbcf#, 16#e9b5dba5#,
            16#3956c25b#, 16#59f111f1#, 16#923f82a4#, 16#ab1c5ed5#,
            16#d807aa98#, 16#12835b01#, 16#243185be#, 16#550c7dc3#,
            16#72be5d74#, 16#80deb1fe#, 16#9bdc06a7#, 16#c19bf174#,
--- 50,56 ----
     --  SHA-224 and SHA-256 operate on 32-bit big endian words
  
     K : constant Hash_State.State (0 .. 63) :=
!          [16#428a2f98#, 16#71374491#, 16#b5c0fbcf#, 16#e9b5dba5#,
            16#3956c25b#, 16#59f111f1#, 16#923f82a4#, 16#ab1c5ed5#,
            16#d807aa98#, 16#12835b01#, 16#243185be#, 16#550c7dc3#,
            16#72be5d74#, 16#80deb1fe#, 16#9bdc06a7#, 16#c19bf174#,
*************** package GNAT.Secure_Hashes.SHA2_32 is
*** 65,71 ****
            16#19a4c116#, 16#1e376c08#, 16#2748774c#, 16#34b0bcb5#,
            16#391c0cb3#, 16#4ed8aa4a#, 16#5b9cca4f#, 16#682e6ff3#,
            16#748f82ee#, 16#78a5636f#, 16#84c87814#, 16#8cc70208#,
!           16#90befffa#, 16#a4506ceb#, 16#bef9a3f7#, 16#c67178f2#);
     --  Constants from FIPS PUB 180-3
  
     function Sigma0 (X : Word) return Word;
--- 65,71 ----
            16#19a4c116#, 16#1e376c08#, 16#2748774c#, 16#34b0bcb5#,
            16#391c0cb3#, 16#4ed8aa4a#, 16#5b9cca4f#, 16#682e6ff3#,
            16#748f82ee#, 16#78a5636f#, 16#84c87814#, 16#8cc70208#,
!           16#90befffa#, 16#a4506ceb#, 16#bef9a3f7#, 16#c67178f2#];
     --  Constants from FIPS PUB 180-3
  
     function Sigma0 (X : Word) return Word;
*************** package GNAT.Secure_Hashes.SHA2_32 is
*** 86,108 ****
        S1         => S1);
  
     SHA224_Init_State : constant Hash_State.State (0 .. 7) :=
!                          (0 => 16#c1059ed8#,
                            1 => 16#367cd507#,
                            2 => 16#3070dd17#,
                            3 => 16#f70e5939#,
                            4 => 16#ffc00b31#,
                            5 => 16#68581511#,
                            6 => 16#64f98fa7#,
!                           7 => 16#befa4fa4#);
     SHA256_Init_State : constant Hash_State.State (0 .. 7) :=
!                          (0 => 16#6a09e667#,
                            1 => 16#bb67ae85#,
                            2 => 16#3c6ef372#,
                            3 => 16#a54ff53a#,
                            4 => 16#510e527f#,
                            5 => 16#9b05688c#,
                            6 => 16#1f83d9ab#,
!                           7 => 16#5be0cd19#);
     --  Initialization vectors from FIPS PUB 180-3
  
  end GNAT.Secure_Hashes.SHA2_32;
--- 86,108 ----
        S1         => S1);
  
     SHA224_Init_State : constant Hash_State.State (0 .. 7) :=
!                          [0 => 16#c1059ed8#,
                            1 => 16#367cd507#,
                            2 => 16#3070dd17#,
                            3 => 16#f70e5939#,
                            4 => 16#ffc00b31#,
                            5 => 16#68581511#,
                            6 => 16#64f98fa7#,
!                           7 => 16#befa4fa4#];
     SHA256_Init_State : constant Hash_State.State (0 .. 7) :=
!                          [0 => 16#6a09e667#,
                            1 => 16#bb67ae85#,
                            2 => 16#3c6ef372#,
                            3 => 16#a54ff53a#,
                            4 => 16#510e527f#,
                            5 => 16#9b05688c#,
                            6 => 16#1f83d9ab#,
!                           7 => 16#5be0cd19#];
     --  Initialization vectors from FIPS PUB 180-3
  
  end GNAT.Secure_Hashes.SHA2_32;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-shsh64.adb gcc-12.1.0/gcc/ada/libgnat/g-shsh64.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-shsh64.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-shsh64.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-shsh64.ads gcc-12.1.0/gcc/ada/libgnat/g-shsh64.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-shsh64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-shsh64.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
*************** package GNAT.Secure_Hashes.SHA2_64 is
*** 50,56 ****
     --  SHA-384 and SHA-512 operate on 64-bit big endian words
  
     K : Hash_State.State (0 .. 79) :=
!          (16#428a2f98d728ae22#, 16#7137449123ef65cd#,
            16#b5c0fbcfec4d3b2f#, 16#e9b5dba58189dbbc#,
            16#3956c25bf348b538#, 16#59f111f1b605d019#,
            16#923f82a4af194f9b#, 16#ab1c5ed5da6d8118#,
--- 50,56 ----
     --  SHA-384 and SHA-512 operate on 64-bit big endian words
  
     K : Hash_State.State (0 .. 79) :=
!          [16#428a2f98d728ae22#, 16#7137449123ef65cd#,
            16#b5c0fbcfec4d3b2f#, 16#e9b5dba58189dbbc#,
            16#3956c25bf348b538#, 16#59f111f1b605d019#,
            16#923f82a4af194f9b#, 16#ab1c5ed5da6d8118#,
*************** package GNAT.Secure_Hashes.SHA2_64 is
*** 89,95 ****
            16#28db77f523047d84#, 16#32caab7b40c72493#,
            16#3c9ebe0a15c9bebc#, 16#431d67c49c100d4c#,
            16#4cc5d4becb3e42b6#, 16#597f299cfc657e2a#,
!           16#5fcb6fab3ad6faec#, 16#6c44198c4a475817#);
     --  Constants from FIPS PUB 180-3
  
     function Sigma0 (X : Word) return Word;
--- 89,95 ----
            16#28db77f523047d84#, 16#32caab7b40c72493#,
            16#3c9ebe0a15c9bebc#, 16#431d67c49c100d4c#,
            16#4cc5d4becb3e42b6#, 16#597f299cfc657e2a#,
!           16#5fcb6fab3ad6faec#, 16#6c44198c4a475817#];
     --  Constants from FIPS PUB 180-3
  
     function Sigma0 (X : Word) return Word;
*************** package GNAT.Secure_Hashes.SHA2_64 is
*** 110,132 ****
        S1         => S1);
  
     SHA384_Init_State : constant Hash_State.State :=
!                          (0 => 16#cbbb9d5dc1059ed8#,
                            1 => 16#629a292a367cd507#,
                            2 => 16#9159015a3070dd17#,
                            3 => 16#152fecd8f70e5939#,
                            4 => 16#67332667ffc00b31#,
                            5 => 16#8eb44a8768581511#,
                            6 => 16#db0c2e0d64f98fa7#,
!                           7 => 16#47b5481dbefa4fa4#);
     SHA512_Init_State : constant Hash_State.State :=
!                          (0 => 16#6a09e667f3bcc908#,
                            1 => 16#bb67ae8584caa73b#,
                            2 => 16#3c6ef372fe94f82b#,
                            3 => 16#a54ff53a5f1d36f1#,
                            4 => 16#510e527fade682d1#,
                            5 => 16#9b05688c2b3e6c1f#,
                            6 => 16#1f83d9abfb41bd6b#,
!                           7 => 16#5be0cd19137e2179#);
     --  Initialization vectors from FIPS PUB 180-3
  
  end GNAT.Secure_Hashes.SHA2_64;
--- 110,132 ----
        S1         => S1);
  
     SHA384_Init_State : constant Hash_State.State :=
!                          [0 => 16#cbbb9d5dc1059ed8#,
                            1 => 16#629a292a367cd507#,
                            2 => 16#9159015a3070dd17#,
                            3 => 16#152fecd8f70e5939#,
                            4 => 16#67332667ffc00b31#,
                            5 => 16#8eb44a8768581511#,
                            6 => 16#db0c2e0d64f98fa7#,
!                           7 => 16#47b5481dbefa4fa4#];
     SHA512_Init_State : constant Hash_State.State :=
!                          [0 => 16#6a09e667f3bcc908#,
                            1 => 16#bb67ae8584caa73b#,
                            2 => 16#3c6ef372fe94f82b#,
                            3 => 16#a54ff53a5f1d36f1#,
                            4 => 16#510e527fade682d1#,
                            5 => 16#9b05688c2b3e6c1f#,
                            6 => 16#1f83d9abfb41bd6b#,
!                           7 => 16#5be0cd19137e2179#];
     --  Initialization vectors from FIPS PUB 180-3
  
  end GNAT.Secure_Hashes.SHA2_64;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-shshco.adb gcc-12.1.0/gcc/ada/libgnat/g-shshco.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-shshco.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-shshco.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-shshco.ads gcc-12.1.0/gcc/ada/libgnat/g-shshco.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-shshco.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-shshco.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-soccon.ads gcc-12.1.0/gcc/ada/libgnat/g-soccon.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-soccon.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-soccon.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socket.adb gcc-12.1.0/gcc/ada/libgnat/g-socket.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-socket.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socket.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package body GNAT.Sockets is
*** 71,101 ****
     --  Correspondence tables
  
     Levels : constant array (Level_Type) of C.int :=
!               (Socket_Level               => SOSC.SOL_SOCKET,
                 IP_Protocol_For_IP_Level   => SOSC.IPPROTO_IP,
                 IP_Protocol_For_IPv6_Level => SOSC.IPPROTO_IPV6,
                 IP_Protocol_For_UDP_Level  => SOSC.IPPROTO_UDP,
                 IP_Protocol_For_TCP_Level  => SOSC.IPPROTO_TCP,
                 IP_Protocol_For_ICMP_Level => SOSC.IPPROTO_ICMP,
                 IP_Protocol_For_IGMP_Level => SOSC.IPPROTO_IGMP,
!                IP_Protocol_For_RAW_Level  => SOSC.IPPROTO_RAW);
  
     Modes : constant array (Mode_Type) of C.int :=
!              (Socket_Stream   => SOSC.SOCK_STREAM,
                Socket_Datagram => SOSC.SOCK_DGRAM,
!               Socket_Raw      => SOSC.SOCK_RAW);
  
     Shutmodes : constant array (Shutmode_Type) of C.int :=
!                  (Shut_Read       => SOSC.SHUT_RD,
                    Shut_Write      => SOSC.SHUT_WR,
!                   Shut_Read_Write => SOSC.SHUT_RDWR);
  
     Requests : constant array (Request_Name) of SOSC.IOCTL_Req_T :=
!                 (Non_Blocking_IO => SOSC.FIONBIO,
!                  N_Bytes_To_Read => SOSC.FIONREAD);
  
     Options : constant array (Specific_Option_Name) of C.int :=
!                (Keep_Alive          => SOSC.SO_KEEPALIVE,
                  Reuse_Address       => SOSC.SO_REUSEADDR,
                  Broadcast           => SOSC.SO_BROADCAST,
                  Send_Buffer         => SOSC.SO_SNDBUF,
--- 71,104 ----
     --  Correspondence tables
  
     Levels : constant array (Level_Type) of C.int :=
!               [Socket_Level               => SOSC.SOL_SOCKET,
                 IP_Protocol_For_IP_Level   => SOSC.IPPROTO_IP,
                 IP_Protocol_For_IPv6_Level => SOSC.IPPROTO_IPV6,
                 IP_Protocol_For_UDP_Level  => SOSC.IPPROTO_UDP,
                 IP_Protocol_For_TCP_Level  => SOSC.IPPROTO_TCP,
                 IP_Protocol_For_ICMP_Level => SOSC.IPPROTO_ICMP,
                 IP_Protocol_For_IGMP_Level => SOSC.IPPROTO_IGMP,
!                IP_Protocol_For_RAW_Level  => SOSC.IPPROTO_RAW];
  
     Modes : constant array (Mode_Type) of C.int :=
!              [Socket_Stream   => SOSC.SOCK_STREAM,
                Socket_Datagram => SOSC.SOCK_DGRAM,
!               Socket_Raw      => SOSC.SOCK_RAW];
  
     Shutmodes : constant array (Shutmode_Type) of C.int :=
!                  [Shut_Read       => SOSC.SHUT_RD,
                    Shut_Write      => SOSC.SHUT_WR,
!                   Shut_Read_Write => SOSC.SHUT_RDWR];
  
     Requests : constant array (Request_Name) of SOSC.IOCTL_Req_T :=
!                 [Non_Blocking_IO => SOSC.FIONBIO,
!                  N_Bytes_To_Read => SOSC.FIONREAD];
  
     Options : constant array (Specific_Option_Name) of C.int :=
!                [Keep_Alive          => SOSC.SO_KEEPALIVE,
!                 Keep_Alive_Count    => SOSC.TCP_KEEPCNT,
!                 Keep_Alive_Idle     => SOSC.TCP_KEEPIDLE,
!                 Keep_Alive_Interval => SOSC.TCP_KEEPINTVL,
                  Reuse_Address       => SOSC.SO_REUSEADDR,
                  Broadcast           => SOSC.SO_BROADCAST,
                  Send_Buffer         => SOSC.SO_SNDBUF,
*************** package body GNAT.Sockets is
*** 117,131 ****
                  IPv6_Only           => SOSC.IPV6_V6ONLY,
                  Send_Timeout        => SOSC.SO_SNDTIMEO,
                  Receive_Timeout     => SOSC.SO_RCVTIMEO,
!                 Busy_Polling        => SOSC.SO_BUSY_POLL);
     --  ??? Note: for OpenSolaris, Receive_Packet_Info should be IP_RECVPKTINFO,
     --  but for Linux compatibility this constant is the same as IP_PKTINFO.
  
     Flags : constant array (0 .. 3) of C.int :=
!              (0 => SOSC.MSG_OOB,     --  Process_Out_Of_Band_Data
                1 => SOSC.MSG_PEEK,    --  Peek_At_Incoming_Data
                2 => SOSC.MSG_WAITALL, --  Wait_For_A_Full_Reception
!               3 => SOSC.MSG_EOR);    --  Send_End_Of_Record
  
     Socket_Error_Id : constant Exception_Id := Socket_Error'Identity;
     Host_Error_Id   : constant Exception_Id := Host_Error'Identity;
--- 120,134 ----
                  IPv6_Only           => SOSC.IPV6_V6ONLY,
                  Send_Timeout        => SOSC.SO_SNDTIMEO,
                  Receive_Timeout     => SOSC.SO_RCVTIMEO,
!                 Busy_Polling        => SOSC.SO_BUSY_POLL];
     --  ??? Note: for OpenSolaris, Receive_Packet_Info should be IP_RECVPKTINFO,
     --  but for Linux compatibility this constant is the same as IP_PKTINFO.
  
     Flags : constant array (0 .. 3) of C.int :=
!              [0 => SOSC.MSG_OOB,     --  Process_Out_Of_Band_Data
                1 => SOSC.MSG_PEEK,    --  Peek_At_Incoming_Data
                2 => SOSC.MSG_WAITALL, --  Wait_For_A_Full_Reception
!               3 => SOSC.MSG_EOR];    --  Send_End_Of_Record
  
     Socket_Error_Id : constant Exception_Id := Socket_Error'Identity;
     Host_Error_Id   : constant Exception_Id := Host_Error'Identity;
*************** package body GNAT.Sockets is
*** 1181,1188 ****
        Numeric_Serv : Boolean := False) return Host_Service
     is
        SA  : aliased Sockaddr;
!       H   : aliased C.char_array := (1 .. SOSC.NI_MAXHOST => C.nul);
!       S   : aliased C.char_array := (1 .. SOSC.NI_MAXSERV => C.nul);
        RC  : C.int;
        Len : C.int;
     begin
--- 1184,1191 ----
        Numeric_Serv : Boolean := False) return Host_Service
     is
        SA  : aliased Sockaddr;
!       H   : aliased C.char_array := [1 .. SOSC.NI_MAXHOST => C.nul];
!       S   : aliased C.char_array := [1 .. SOSC.NI_MAXSERV => C.nul];
        RC  : C.int;
        Len : C.int;
     begin
*************** package body GNAT.Sockets is
*** 1442,1447 ****
--- 1445,1453 ----
              | Error
              | Generic_Option
              | Keep_Alive
+             | Keep_Alive_Count
+             | Keep_Alive_Idle
+             | Keep_Alive_Interval
              | Multicast_If_V4
              | Multicast_If_V6
              | Multicast_Loop_V4
*************** package body GNAT.Sockets is
*** 1511,1516 ****
--- 1517,1531 ----
           =>
              Opt.Enabled := (V4 /= 0);
  
+          when Keep_Alive_Count =>
+             Opt.Count := Natural (V4);
+ 
+          when Keep_Alive_Idle =>
+             Opt.Idle_Seconds := Natural (V4);
+ 
+          when Keep_Alive_Interval =>
+             Opt.Interval_Seconds := Natural (V4);
+ 
           when Busy_Polling =>
              Opt.Microseconds := Natural (V4);
  
*************** package body GNAT.Sockets is
*** 1555,1568 ****
              | Send_Timeout
           =>
              if Is_Windows then
- 
-                --  Timeout is in milliseconds, actual value is 500 ms +
-                --  returned value (unless it is 0).
- 
                 if U4 = 0 then
                    Opt.Timeout := 0.0;
                 else
!                   Opt.Timeout :=  Duration (U4) / 1000 + 0.500;
                 end if;
  
              else
--- 1570,1587 ----
              | Send_Timeout
           =>
              if Is_Windows then
                 if U4 = 0 then
                    Opt.Timeout := 0.0;
+ 
                 else
!                   if Minus_500ms_Windows_Timeout then
!                      --  Timeout is in milliseconds, actual value is 500 ms +
!                      --  returned value (unless it is 0).
! 
!                      U4 := U4 + 500;
!                   end if;
! 
!                   Opt.Timeout := Duration (U4) / 1000;
                 end if;
  
              else
*************** package body GNAT.Sockets is
*** 1602,1608 ****
              when Family_Inet   => 4 * Value.Sin_V4'Length,
              when Family_Inet6  => 6 * 5 + 4 * 4);
              --  1234:1234:1234:1234:1234:1234:123.123.123.123
!       Dst : aliased C.char_array := (1 .. C.size_t (Size) => C.nul);
        Ia  : aliased In_Addr_Union (Value.Family);
     begin
        case Value.Family is
--- 1621,1627 ----
              when Family_Inet   => 4 * Value.Sin_V4'Length,
              when Family_Inet6  => 6 * 5 + 4 * 4);
              --  1234:1234:1234:1234:1234:1234:123.123.123.123
!       Dst : aliased C.char_array := [1 .. C.size_t (Size) => C.nul];
        Ia  : aliased In_Addr_Union (Value.Family);
     begin
        case Value.Family is
*************** package body GNAT.Sockets is
*** 2620,2625 ****
--- 2639,2659 ----
              Len := V4'Size / 8;
              Add := V4'Address;
  
+          when Keep_Alive_Count =>
+             V4  := C.int (Option.Count);
+             Len := V4'Size / 8;
+             Add := V4'Address;
+ 
+          when Keep_Alive_Idle =>
+             V4  := C.int (Option.Idle_Seconds);
+             Len := V4'Size / 8;
+             Add := V4'Address;
+ 
+          when Keep_Alive_Interval =>
+             V4  := C.int (Option.Interval_Seconds);
+             Len := V4'Size / 8;
+             Add := V4'Address;
+ 
           when Busy_Polling =>
              V4  := C.int (Option.Microseconds);
              Len := V4'Size / 8;
*************** package body GNAT.Sockets is
*** 2694,2700 ****
                 Len := U4'Size / 8;
                 Add := U4'Address;
  
!                U4 := C.unsigned (Option.Timeout / 0.001);
  
                 if Option.Timeout > 0.0 and then U4 = 0 then
                    --  Avoid round to zero. Zero timeout mean unlimited
--- 2728,2734 ----
                 Len := U4'Size / 8;
                 Add := U4'Address;
  
!                U4 := C.unsigned (Option.Timeout * 1000);
  
                 if Option.Timeout > 0.0 and then U4 = 0 then
                    --  Avoid round to zero. Zero timeout mean unlimited
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socket.ads gcc-12.1.0/gcc/ada/libgnat/g-socket.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-socket.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socket.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package GNAT.Sockets is
*** 506,512 ****
     --  Octet for Internet address
  
     Inet_Addr_Bytes_Length : constant array (Family_Inet_4_6) of Natural :=
!      (Family_Inet => 4, Family_Inet6 => 16);
  
     type Inet_Addr_Bytes is array (Natural range <>) of Inet_Addr_Comp_Type;
  
--- 506,512 ----
     --  Octet for Internet address
  
     Inet_Addr_Bytes_Length : constant array (Family_Inet_4_6) of Natural :=
!      [Family_Inet => 4, Family_Inet6 => 16];
  
     type Inet_Addr_Bytes is array (Natural range <>) of Inet_Addr_Comp_Type;
  
*************** package GNAT.Sockets is
*** 521,530 ****
     type Inet_Addr_Type (Family : Family_Inet_4_6 := Family_Inet) is record
        case Family is
           when Family_Inet =>
!             Sin_V4 : Inet_Addr_V4_Type := (others => 0);
  
           when Family_Inet6 =>
!             Sin_V6 : Inet_Addr_V6_Type := (others => 0);
  
        end case;
     end record;
--- 521,530 ----
     type Inet_Addr_Type (Family : Family_Inet_4_6 := Family_Inet) is record
        case Family is
           when Family_Inet =>
!             Sin_V4 : Inet_Addr_V4_Type := [others => 0];
  
           when Family_Inet6 =>
!             Sin_V6 : Inet_Addr_V6_Type := [others => 0];
  
        end case;
     end record;
*************** package GNAT.Sockets is
*** 571,577 ****
     --  Idem for IPv6 protocol
  
     IPv4_To_IPv6_Prefix : constant Inet_Addr_Bytes :=
!      (1 .. 10 => 0, 11 .. 12 => 255);
     --  Prefix for IPv4 mapped to IPv6 addresses
  
     --  Functions to handle masks and prefixes
--- 571,577 ----
     --  Idem for IPv6 protocol
  
     IPv4_To_IPv6_Prefix : constant Inet_Addr_Bytes :=
!      [1 .. 10 => 0, 11 .. 12 => 255];
     --  Prefix for IPv4 mapped to IPv6 addresses
  
     --  Functions to handle masks and prefixes
*************** package GNAT.Sockets is
*** 845,855 ****
        -- IP_Protocol_For_TCP_Level --
        -------------------------------
  
!       No_Delay, -- TCP_NODELAY
        --  Disable the Nagle algorithm. This means that output buffer content
        --  is always sent as soon as possible, even if there is only a small
        --  amount of data.
  
        ------------------------------
        -- IP_Protocol_For_IP_Level --
        ------------------------------
--- 845,864 ----
        -- IP_Protocol_For_TCP_Level --
        -------------------------------
  
!       No_Delay,            -- TCP_NODELAY
        --  Disable the Nagle algorithm. This means that output buffer content
        --  is always sent as soon as possible, even if there is only a small
        --  amount of data.
  
+       Keep_Alive_Count,    -- TCP_KEEPCNT
+       --  Maximum number of keepalive probes
+ 
+       Keep_Alive_Idle,     -- TCP_KEEPIDLE
+       --  Idle time before TCP starts sending keepalive probes
+ 
+       Keep_Alive_Interval, -- TCP_KEEPINTVL
+       --  Time between individual keepalive probes
+ 
        ------------------------------
        -- IP_Protocol_For_IP_Level --
        ------------------------------
*************** package GNAT.Sockets is
*** 923,948 ****
              Enabled : Boolean;
  
              case Name is
!                when Linger    =>
                    Seconds : Natural;
!                when others    =>
                    null;
              end case;
  
!          when Busy_Polling    =>
              Microseconds : Natural;
  
!          when Send_Buffer     |
!               Receive_Buffer  =>
              Size : Natural;
  
!          when Error           =>
              Error : Error_Type;
  
!          when Add_Membership_V4  |
!               Add_Membership_V6  |
!               Drop_Membership_V4 |
!               Drop_Membership_V6 =>
              Multicast_Address : Inet_Addr_Type;
              case Name is
                 when Add_Membership_V4  |
--- 932,966 ----
              Enabled : Boolean;
  
              case Name is
!                when Linger =>
                    Seconds : Natural;
!                when others =>
                    null;
              end case;
  
!          when Keep_Alive_Count    =>
!             Count : Natural;
! 
!          when Keep_Alive_Idle     =>
!             Idle_Seconds : Natural;
! 
!          when Keep_Alive_Interval =>
!             Interval_Seconds : Natural;
! 
!          when Busy_Polling        =>
              Microseconds : Natural;
  
!          when Send_Buffer         |
!               Receive_Buffer      =>
              Size : Natural;
  
!          when Error               =>
              Error : Error_Type;
  
!          when Add_Membership_V4   |
!               Add_Membership_V6   |
!               Drop_Membership_V4  |
!               Drop_Membership_V6  =>
              Multicast_Address : Inet_Addr_Type;
              case Name is
                 when Add_Membership_V4  |
*************** package GNAT.Sockets is
*** 958,970 ****
           when Multicast_If_V6 =>
              Outgoing_If_Index : Natural;
  
!          when Multicast_TTL  =>
              Time_To_Live : Natural;
  
!          when Multicast_Hops =>
              Hop_Limit : Integer range -1 .. 255;
  
!          when Send_Timeout |
                Receive_Timeout =>
              Timeout : Timeval_Duration;
  
--- 976,988 ----
           when Multicast_If_V6 =>
              Outgoing_If_Index : Natural;
  
!          when Multicast_TTL   =>
              Time_To_Live : Natural;
  
!          when Multicast_Hops  =>
              Hop_Limit : Integer range -1 .. 255;
  
!          when Send_Timeout    |
                Receive_Timeout =>
              Timeout : Timeval_Duration;
  
*************** package GNAT.Sockets is
*** 1104,1110 ****
        Family : Family_Type := Family_Inet;
        Mode   : Mode_Type   := Socket_Stream;
        Level  : Level_Type  := IP_Protocol_For_IP_Level);
!    --  Create an endpoint for communication. Raises Socket_Error on error.
  
     procedure Create_Socket_Pair
       (Left   : out Socket_Type;
--- 1122,1128 ----
        Family : Family_Type := Family_Inet;
        Mode   : Mode_Type   := Socket_Stream;
        Level  : Level_Type  := IP_Protocol_For_IP_Level);
!    --  Create an endpoint for communication. Raises Socket_Error on error
  
     procedure Create_Socket_Pair
       (Left   : out Socket_Type;
*************** private
*** 1511,1547 ****
     No_Port  : constant Port_Type := 0;
  
     Any_Inet_Addr       : constant Inet_Addr_Type :=
!                            (Family_Inet, (others => 0));
     Any_Inet6_Addr      : constant Inet_Addr_Type :=
!                            (Family_Inet6, (others => 0));
     No_Inet_Addr        : constant Inet_Addr_Type :=
!                            (Family_Inet, (others => 0));
     Broadcast_Inet_Addr : constant Inet_Addr_Type :=
!                            (Family_Inet, (others => 255));
     Loopback_Inet_Addr  : constant Inet_Addr_Type :=
!                            (Family_Inet, (127, 0, 0, 1));
     Loopback_Inet6_Addr : constant Inet_Addr_Type :=
                             (Family_Inet6,
!                             (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1));
  
     Unspecified_Group_Inet_Addr : constant Inet_Addr_Type :=
!                                    (Family_Inet, (224, 0, 0, 0));
     All_Hosts_Group_Inet_Addr   : constant Inet_Addr_Type :=
!                                    (Family_Inet, (224, 0, 0, 1));
     All_Routers_Group_Inet_Addr : constant Inet_Addr_Type :=
!                                    (Family_Inet, (224, 0, 0, 2));
  
     Unspecified_Group_Inet6_Addr : constant Inet_Addr_Type :=
!      (Family_Inet6, (255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
     All_Hosts_Group_Inet6_Addr   : constant Inet_Addr_Type :=
!      (Family_Inet6, (255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1));
     All_Routers_Group_Inet6_Addr : constant Inet_Addr_Type :=
!      (Family_Inet6, (255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2));
  
     No_Sock_Addr : constant Sock_Addr_Type := (Family_Inet, No_Inet_Addr, 0);
  
!    Max_Name_Length : constant := 64;
!    --  The constant MAXHOSTNAMELEN is usually set to 64
  
     subtype Name_Index is Natural range 1 .. Max_Name_Length;
  
--- 1529,1567 ----
     No_Port  : constant Port_Type := 0;
  
     Any_Inet_Addr       : constant Inet_Addr_Type :=
!                            (Family_Inet, [others => 0]);
     Any_Inet6_Addr      : constant Inet_Addr_Type :=
!                            (Family_Inet6, [others => 0]);
     No_Inet_Addr        : constant Inet_Addr_Type :=
!                            (Family_Inet, [others => 0]);
     Broadcast_Inet_Addr : constant Inet_Addr_Type :=
!                            (Family_Inet, [others => 255]);
     Loopback_Inet_Addr  : constant Inet_Addr_Type :=
!                            (Family_Inet, [127, 0, 0, 1]);
     Loopback_Inet6_Addr : constant Inet_Addr_Type :=
                             (Family_Inet6,
!                             [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
  
     Unspecified_Group_Inet_Addr : constant Inet_Addr_Type :=
!                                    (Family_Inet, [224, 0, 0, 0]);
     All_Hosts_Group_Inet_Addr   : constant Inet_Addr_Type :=
!                                    (Family_Inet, [224, 0, 0, 1]);
     All_Routers_Group_Inet_Addr : constant Inet_Addr_Type :=
!                                    (Family_Inet, [224, 0, 0, 2]);
  
     Unspecified_Group_Inet6_Addr : constant Inet_Addr_Type :=
!      (Family_Inet6, [255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
     All_Hosts_Group_Inet6_Addr   : constant Inet_Addr_Type :=
!      (Family_Inet6, [255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
     All_Routers_Group_Inet6_Addr : constant Inet_Addr_Type :=
!      (Family_Inet6, [255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2]);
  
     No_Sock_Addr : constant Sock_Addr_Type := (Family_Inet, No_Inet_Addr, 0);
  
!    Max_Name_Length : constant := SOSC.NI_MAXHOST;
!    --  Most systems don't provide constants that specify the maximum size
!    --  of either a FQDN or a service name. In order to aid applications in
!    --  allocating buffers, the constant NI_MAXHOST is defined in <netdb.h>.
  
     subtype Name_Index is Natural range 1 .. Max_Name_Length;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socket__dummy.adb gcc-12.1.0/gcc/ada/libgnat/g-socket__dummy.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-socket__dummy.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socket__dummy.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socket__dummy.ads gcc-12.1.0/gcc/ada/libgnat/g-socket__dummy.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-socket__dummy.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socket__dummy.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socpol.adb gcc-12.1.0/gcc/ada/libgnat/g-socpol.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-socpol.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socpol.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2020, AdaCore                        --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2020-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
*************** with GNAT.Sockets.Thin;
*** 36,42 ****
  package body GNAT.Sockets.Poll is
  
     To_C : constant array (Wait_Event_Type) of Events_Type :=
!             (Input => SOC.POLLIN or SOC.POLLPRI, Output => SOC.POLLOUT);
     --  To convert Wait_Event_Type to C I/O events flags
  
     procedure Set_Mode (Item : out Pollfd; Mode : Wait_Event_Set);
--- 36,42 ----
  package body GNAT.Sockets.Poll is
  
     To_C : constant array (Wait_Event_Type) of Events_Type :=
!             [Input => SOC.POLLIN or SOC.POLLPRI, Output => SOC.POLLOUT];
     --  To convert Wait_Event_Type to C I/O events flags
  
     procedure Set_Mode (Item : out Pollfd; Mode : Wait_Event_Set);
*************** package body GNAT.Sockets.Poll is
*** 50,60 ****
     --  raise Constraint_Error if Index is more than number of sockets in Self
  
     function Status (Item : Pollfd) return Event_Set is
!      (Input           => (Item.REvents and To_C (Input)) /= 0,
!       Output          => (Item.REvents and To_C (Output)) /= 0,
!       Error           => (Item.REvents and SOC.POLLERR) /= 0,
!       Hang_Up         => (Item.REvents and SOC.POLLHUP) /= 0,
!       Invalid_Request => (Item.REvents and SOC.POLLNVAL) /= 0);
     --  Get I/O events from C word
  
     procedure Wait
--- 50,60 ----
     --  raise Constraint_Error if Index is more than number of sockets in Self
  
     function Status (Item : Pollfd) return Event_Set is
!      ([Input           => (Item.REvents and To_C (Input)) /= 0,
!        Output          => (Item.REvents and To_C (Output)) /= 0,
!        Error           => (Item.REvents and SOC.POLLERR) /= 0,
!        Hang_Up         => (Item.REvents and SOC.POLLHUP) /= 0,
!        Invalid_Request => (Item.REvents and SOC.POLLNVAL) /= 0]);
     --  Get I/O events from C word
  
     procedure Wait
*************** package body GNAT.Sockets.Poll is
*** 188,195 ****
     begin
        Check_Range (Self, Index);
        return
!         (Input  => (Self.Fds (Index).Events and To_C (Input)) /= 0,
!          Output => (Self.Fds (Index).Events and To_C (Output)) /= 0);
     end Get_Events;
  
     ------------
--- 188,195 ----
     begin
        Check_Range (Self, Index);
        return
!         [Input  => (Self.Fds (Index).Events and To_C (Input)) /= 0,
!          Output => (Self.Fds (Index).Events and To_C (Output)) /= 0];
     end Get_Events;
  
     ------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socpol.ads gcc-12.1.0/gcc/ada/libgnat/g-socpol.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-socpol.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socpol.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2020, AdaCore                        --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2020-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
*************** package GNAT.Sockets.Poll is
*** 171,180 ****
  
  private
  
!    Input_Event  : constant Wait_Event_Set := (Input => True, Output => False);
!    Output_Event : constant Wait_Event_Set := (Input => False, Output => True);
!    Both_Events  : constant Wait_Event_Set := (others => True);
!    Error_Event  : constant Wait_Event_Set := (others => False);
  
     package SOC renames System.OS_Constants;
  
--- 171,180 ----
  
  private
  
!    Input_Event  : constant Wait_Event_Set := [Input => True, Output => False];
!    Output_Event : constant Wait_Event_Set := [Input => False, Output => True];
!    Both_Events  : constant Wait_Event_Set := [others => True];
!    Error_Event  : constant Wait_Event_Set := [others => False];
  
     package SOC renames System.OS_Constants;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socpol__dummy.adb gcc-12.1.0/gcc/ada/libgnat/g-socpol__dummy.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-socpol__dummy.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socpol__dummy.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                         Copyright (C) 2020, AdaCore                      --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                         Copyright (C) 2020-2022, AdaCore                 --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socpol__dummy.ads gcc-12.1.0/gcc/ada/libgnat/g-socpol__dummy.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-socpol__dummy.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socpol__dummy.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                         Copyright (C) 2020, AdaCore                      --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                         Copyright (C) 2020-2022, AdaCore                 --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socthi.adb gcc-12.1.0/gcc/ada/libgnat/g-socthi.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-socthi.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socthi.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socthi.ads gcc-12.1.0/gcc/ada/libgnat/g-socthi.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-socthi.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socthi.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socthi__dummy.adb gcc-12.1.0/gcc/ada/libgnat/g-socthi__dummy.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-socthi__dummy.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socthi__dummy.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socthi__dummy.ads gcc-12.1.0/gcc/ada/libgnat/g-socthi__dummy.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-socthi__dummy.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socthi__dummy.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socthi__mingw.adb gcc-12.1.0/gcc/ada/libgnat/g-socthi__mingw.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-socthi__mingw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socthi__mingw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socthi__mingw.ads gcc-12.1.0/gcc/ada/libgnat/g-socthi__mingw.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-socthi__mingw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socthi__mingw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socthi__vxworks.adb gcc-12.1.0/gcc/ada/libgnat/g-socthi__vxworks.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-socthi__vxworks.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socthi__vxworks.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-socthi__vxworks.ads gcc-12.1.0/gcc/ada/libgnat/g-socthi__vxworks.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-socthi__vxworks.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-socthi__vxworks.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-soliop.ads gcc-12.1.0/gcc/ada/libgnat/g-soliop.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-soliop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-soliop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-soliop__lynxos.ads gcc-12.1.0/gcc/ada/libgnat/g-soliop__lynxos.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-soliop__lynxos.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-soliop__lynxos.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-soliop__mingw.ads gcc-12.1.0/gcc/ada/libgnat/g-soliop__mingw.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-soliop__mingw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-soliop__mingw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-soliop__qnx.ads gcc-12.1.0/gcc/ada/libgnat/g-soliop__qnx.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-soliop__qnx.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-soliop__qnx.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-soliop__solaris.ads gcc-12.1.0/gcc/ada/libgnat/g-soliop__solaris.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-soliop__solaris.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-soliop__solaris.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sopowa.adb gcc-12.1.0/gcc/ada/libgnat/g-sopowa.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sopowa.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sopowa.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2020, AdaCore                        --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2020-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sopowa__mingw.adb gcc-12.1.0/gcc/ada/libgnat/g-sopowa__mingw.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sopowa__mingw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sopowa__mingw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2020, AdaCore                        --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2020-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sopowa__posix.adb gcc-12.1.0/gcc/ada/libgnat/g-sopowa__posix.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sopowa__posix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sopowa__posix.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2020, AdaCore                        --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2020-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sothco.adb gcc-12.1.0/gcc/ada/libgnat/g-sothco.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sothco.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sothco.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2008-2020, AdaCore                   --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2008-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sothco.ads gcc-12.1.0/gcc/ada/libgnat/g-sothco.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sothco.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sothco.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2008-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2008-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 34,39 ****
--- 34,40 ----
  
  with Ada.Unchecked_Conversion;
  with Interfaces.C.Strings;
+ with System.Parameters;
  
  package GNAT.Sockets.Thin_Common is
  
*************** package GNAT.Sockets.Thin_Common is
*** 44,52 ****
     Failure : constant C.int := -1;
  
     type time_t is
!      range -2 ** (8 * SOSC.SIZEOF_tv_sec - 1)
!          .. 2 ** (8 * SOSC.SIZEOF_tv_sec - 1) - 1;
!    for time_t'Size use 8 * SOSC.SIZEOF_tv_sec;
     pragma Convention (C, time_t);
  
     type suseconds_t is
--- 45,53 ----
     Failure : constant C.int := -1;
  
     type time_t is
!      range -2 ** (System.Parameters.time_t_bits - 1)
!         .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
!    for time_t'Size use System.Parameters.time_t_bits;
     pragma Convention (C, time_t);
  
     type suseconds_t is
*************** package GNAT.Sockets.Thin_Common is
*** 74,89 ****
     -------------------------------------------
  
     Families : constant array (Family_Type) of C.int :=
!                 (Family_Unspec => SOSC.AF_UNSPEC,
                   Family_Unix   => SOSC.AF_UNIX,
                   Family_Inet   => SOSC.AF_INET,
!                  Family_Inet6  => SOSC.AF_INET6);
  
     Lengths  : constant array (Family_Type) of C.unsigned_char :=
!                 (Family_Unspec => 0,
                   Family_Unix   => SOSC.SIZEOF_sockaddr_un,
                   Family_Inet   => SOSC.SIZEOF_sockaddr_in,
!                  Family_Inet6  => SOSC.SIZEOF_sockaddr_in6);
  
     ----------------------------
     -- Generic socket address --
--- 75,90 ----
     -------------------------------------------
  
     Families : constant array (Family_Type) of C.int :=
!                 [Family_Unspec => SOSC.AF_UNSPEC,
                   Family_Unix   => SOSC.AF_UNIX,
                   Family_Inet   => SOSC.AF_INET,
!                  Family_Inet6  => SOSC.AF_INET6];
  
     Lengths  : constant array (Family_Type) of C.unsigned_char :=
!                 [Family_Unspec => 0,
                   Family_Unix   => SOSC.SIZEOF_sockaddr_un,
                   Family_Inet   => SOSC.SIZEOF_sockaddr_in,
!                  Family_Inet6  => SOSC.SIZEOF_sockaddr_in6];
  
     ----------------------------
     -- Generic socket address --
*************** package GNAT.Sockets.Thin_Common is
*** 159,165 ****
           Sin_Addr : In_Addr := (others => 0);
           --  IPv4 address
  
!          Sin_Zero : C.char_array (1 .. 8) := (others => C.nul);
           --  Padding
           --
           --  Note that some platforms require that all unused (reserved) bytes
--- 160,166 ----
           Sin_Addr : In_Addr := (others => 0);
           --  IPv4 address
  
!          Sin_Zero : C.char_array (1 .. 8) := [others => C.nul];
           --  Padding
           --
           --  Note that some platforms require that all unused (reserved) bytes
*************** package GNAT.Sockets.Thin_Common is
*** 173,179 ****
           --  Port in network byte order
  
           Sin6_FlowInfo : Interfaces.Unsigned_32 := 0;
!          Sin6_Addr     : In6_Addr := (others => 0);
           Sin6_Scope_Id : Interfaces.Unsigned_32 := 0;
  
        when Family_Unix =>
--- 174,180 ----
           --  Port in network byte order
  
           Sin6_FlowInfo : Interfaces.Unsigned_32 := 0;
!          Sin6_Addr     : In6_Addr := [others => 0];
           Sin6_Scope_Id : Interfaces.Unsigned_32 := 0;
  
        when Family_Unix =>
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sothco__dummy.adb gcc-12.1.0/gcc/ada/libgnat/g-sothco__dummy.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sothco__dummy.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sothco__dummy.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2008-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sothco__dummy.ads gcc-12.1.0/gcc/ada/libgnat/g-sothco__dummy.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sothco__dummy.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sothco__dummy.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2008-2020, AdaCore                   --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2008-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-souinf.ads gcc-12.1.0/gcc/ada/libgnat/g-souinf.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-souinf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-souinf.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-spchge.adb gcc-12.1.0/gcc/ada/libgnat/g-spchge.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-spchge.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-spchge.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package body GNAT.Spelling_Checker_Generic is
  
     ------------------------
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-spchge.ads gcc-12.1.0/gcc/ada/libgnat/g-spchge.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-spchge.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-spchge.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 37,44 ****
  --  codes for ASCII characters in the range 16#20#..16#7F# have their normal
  --  expected encoding values (e.g. the Pos value 16#31# must be digit 1).
  
- pragma Compiler_Unit_Warning;
- 
  package GNAT.Spelling_Checker_Generic is
     pragma Pure;
  
--- 37,42 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-speche.adb gcc-12.1.0/gcc/ada/libgnat/g-speche.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-speche.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-speche.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with GNAT.Spelling_Checker_Generic;
  
  package body GNAT.Spelling_Checker is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-speche.ads gcc-12.1.0/gcc/ada/libgnat/g-speche.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-speche.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-speche.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 34,41 ****
  --  This package provides a utility routine for checking for bad spellings
  --  for the case of String arguments.
  
- pragma Compiler_Unit_Warning;
- 
  package GNAT.Spelling_Checker is
     pragma Pure;
  
--- 34,39 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-spipat.adb gcc-12.1.0/gcc/ada/libgnat/g-spipat.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-spipat.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-spipat.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package body GNAT.Spitbol.Patterns is
*** 367,373 ****
     --  one character on success, and not to make any entries on the stack.
  
     OK_For_Simple_Arbno : constant array (Pattern_Code) of Boolean :=
!      (PC_Any_CS    |
        PC_Any_CH    |
        PC_Any_VF    |
        PC_Any_VP    |
--- 367,373 ----
     --  one character on success, and not to make any entries on the stack.
  
     OK_For_Simple_Arbno : constant array (Pattern_Code) of Boolean :=
!      [PC_Any_CS    |
        PC_Any_CH    |
        PC_Any_VF    |
        PC_Any_VP    |
*************** package body GNAT.Spitbol.Patterns is
*** 387,393 ****
        PC_String_4  |
        PC_String_5  |
        PC_String_6   => True,
!       others        => False);
  
     -------------------------------
     -- The Pattern History Stack --
--- 387,393 ----
        PC_String_4  |
        PC_String_5  |
        PC_String_6   => True,
!       others        => False];
  
     -------------------------------
     -- The Pattern History Stack --
*************** package body GNAT.Spitbol.Patterns is
*** 2836,2842 ****
        L     : Natural;
        Start : Natural;
        Stop  : Natural;
-       pragma Unreferenced (Stop);
  
     begin
        Get_String (Subject, S, L);
--- 2836,2841 ----
*************** package body GNAT.Spitbol.Patterns is
*** 2855,2861 ****
        Pat     : Pattern) return Boolean
     is
        Start, Stop : Natural;
-       pragma Unreferenced (Stop);
  
        subtype String1 is String (1 .. Subject'Length);
  
--- 2854,2859 ----
*************** package body GNAT.Spitbol.Patterns is
*** 2935,2941 ****
  
        Start : Natural;
        Stop  : Natural;
-       pragma Unreferenced (Start, Stop);
  
     begin
        Get_String (Subject, S, L);
--- 2933,2938 ----
*************** package body GNAT.Spitbol.Patterns is
*** 2952,2958 ****
        Pat     : Pattern)
     is
        Start, Stop : Natural;
-       pragma Unreferenced (Start, Stop);
  
        subtype String1 is String (1 .. Subject'Length);
  
--- 2949,2954 ----
*************** package body GNAT.Spitbol.Patterns is
*** 3135,3141 ****
  
        Start : Natural;
        Stop  : Natural;
-       pragma Unreferenced (Start, Stop);
  
     begin
        Get_String (Subject, S, L);
--- 3131,3136 ----
*************** package body GNAT.Spitbol.Patterns is
*** 3152,3158 ****
        Pat     : PString)
     is
        Start, Stop : Natural;
-       pragma Unreferenced (Start, Stop);
  
        subtype String1 is String (1 .. Subject'Length);
  
--- 3147,3152 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-spipat.ads gcc-12.1.0/gcc/ada/libgnat/g-spipat.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-spipat.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-spipat.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package GNAT.Spitbol.Patterns is
*** 654,672 ****
     --  operations for constructing patterns that can be used in the pattern
     --  matching operations provided.
  
!    type Boolean_Func is access function return Boolean;
     --  General Boolean function type. When this type is used as a formal
     --  parameter type in this package, it indicates a deferred predicate
     --  pattern. The function will be called when the pattern element is
     --  matched and failure signalled if False is returned.
  
!    type Natural_Func is access function return Natural;
     --  General Natural function type. When this type is used as a formal
     --  parameter type in this package, it indicates a deferred pattern.
     --  The function will be called when the pattern element is matched
     --  to obtain the currently referenced Natural value.
  
!    type VString_Func is access function return VString;
     --  General VString function type. When this type is used as a formal
     --  parameter type in this package, it indicates a deferred pattern.
     --  The function will be called when the pattern element is matched
--- 654,672 ----
     --  operations for constructing patterns that can be used in the pattern
     --  matching operations provided.
  
!    type Boolean_Func is access function return Boolean with Favor_Top_Level;
     --  General Boolean function type. When this type is used as a formal
     --  parameter type in this package, it indicates a deferred predicate
     --  pattern. The function will be called when the pattern element is
     --  matched and failure signalled if False is returned.
  
!    type Natural_Func is access function return Natural with Favor_Top_Level;
     --  General Natural function type. When this type is used as a formal
     --  parameter type in this package, it indicates a deferred pattern.
     --  The function will be called when the pattern element is matched
     --  to obtain the currently referenced Natural value.
  
!    type VString_Func is access function return VString with Favor_Top_Level;
     --  General VString function type. When this type is used as a formal
     --  parameter type in this package, it indicates a deferred pattern.
     --  The function will be called when the pattern element is matched
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-spitbo.adb gcc-12.1.0/gcc/ada/libgnat/g-spitbo.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-spitbo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-spitbo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-spitbo.ads gcc-12.1.0/gcc/ada/libgnat/g-spitbo.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-spitbo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-spitbo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-spogwa.adb gcc-12.1.0/gcc/ada/libgnat/g-spogwa.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-spogwa.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-spogwa.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2020, AdaCore                        --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2020-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-spogwa.ads gcc-12.1.0/gcc/ada/libgnat/g-spogwa.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-spogwa.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-spogwa.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2020, AdaCore                        --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2020-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sptabo.ads gcc-12.1.0/gcc/ada/libgnat/g-sptabo.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sptabo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sptabo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sptain.ads gcc-12.1.0/gcc/ada/libgnat/g-sptain.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sptain.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sptain.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sptavs.ads gcc-12.1.0/gcc/ada/libgnat/g-sptavs.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sptavs.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sptavs.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sse.ads gcc-12.1.0/gcc/ada/libgnat/g-sse.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-sse.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sse.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-ssvety.ads gcc-12.1.0/gcc/ada/libgnat/g-ssvety.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-ssvety.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-ssvety.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-sthcso.adb gcc-12.1.0/gcc/ada/libgnat/g-sthcso.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-sthcso.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-sthcso.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-stheme.adb gcc-12.1.0/gcc/ada/libgnat/g-stheme.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-stheme.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-stheme.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-strhas.ads gcc-12.1.0/gcc/ada/libgnat/g-strhas.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-strhas.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-strhas.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2015-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2015-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-string.adb gcc-12.1.0/gcc/ada/libgnat/g-string.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-string.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-string.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-string.ads gcc-12.1.0/gcc/ada/libgnat/g-string.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-string.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-string.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-strspl.ads gcc-12.1.0/gcc/ada/libgnat/g-strspl.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-strspl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-strspl.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-stseme.adb gcc-12.1.0/gcc/ada/libgnat/g-stseme.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-stseme.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-stseme.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-stsifd__sockets.adb gcc-12.1.0/gcc/ada/libgnat/g-stsifd__sockets.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-stsifd__sockets.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-stsifd__sockets.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-table.adb gcc-12.1.0/gcc/ada/libgnat/g-table.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-table.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-table.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-table.ads gcc-12.1.0/gcc/ada/libgnat/g-table.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-table.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-table.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-tasloc.adb gcc-12.1.0/gcc/ada/libgnat/g-tasloc.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-tasloc.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-tasloc.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-tasloc.ads gcc-12.1.0/gcc/ada/libgnat/g-tasloc.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-tasloc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-tasloc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-timsta.adb gcc-12.1.0/gcc/ada/libgnat/g-timsta.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-timsta.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-timsta.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2008-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-timsta.ads gcc-12.1.0/gcc/ada/libgnat/g-timsta.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-timsta.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-timsta.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2008-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-traceb.adb gcc-12.1.0/gcc/ada/libgnat/g-traceb.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-traceb.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-traceb.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                      Copyright (C) 1999-2020, AdaCore                    --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                      Copyright (C) 1999-2022, AdaCore                    --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-traceb.ads gcc-12.1.0/gcc/ada/libgnat/g-traceb.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-traceb.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-traceb.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-trasym.adb gcc-12.1.0/gcc/ada/libgnat/g-trasym.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-trasym.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-trasym.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-trasym.ads gcc-12.1.0/gcc/ada/libgnat/g-trasym.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-trasym.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-trasym.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-tty.adb gcc-12.1.0/gcc/ada/libgnat/g-tty.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-tty.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-tty.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-tty.ads gcc-12.1.0/gcc/ada/libgnat/g-tty.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-tty.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-tty.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2002-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-u3spch.adb gcc-12.1.0/gcc/ada/libgnat/g-u3spch.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-u3spch.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-u3spch.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with GNAT.Spelling_Checker_Generic;
  
  package body GNAT.UTF_32_Spelling_Checker is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-u3spch.ads gcc-12.1.0/gcc/ada/libgnat/g-u3spch.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-u3spch.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-u3spch.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 34,41 ****
  --  This package provides a utility routine for checking for bad spellings
  --  for the case of System.WCh_Cnv.UTF_32_String arguments.
  
- pragma Compiler_Unit_Warning;
- 
  with System.WCh_Cnv;
  
  package GNAT.UTF_32_Spelling_Checker is
--- 34,39 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-utf_32.adb gcc-12.1.0/gcc/ada/libgnat/g-utf_32.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-utf_32.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-utf_32.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-utf_32.ads gcc-12.1.0/gcc/ada/libgnat/g-utf_32.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-utf_32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-utf_32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-wispch.adb gcc-12.1.0/gcc/ada/libgnat/g-wispch.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-wispch.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-wispch.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-wispch.ads gcc-12.1.0/gcc/ada/libgnat/g-wispch.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-wispch.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-wispch.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-wistsp.ads gcc-12.1.0/gcc/ada/libgnat/g-wistsp.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-wistsp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-wistsp.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-zspche.adb gcc-12.1.0/gcc/ada/libgnat/g-zspche.adb
*** gcc-11.3.0/gcc/ada/libgnat/g-zspche.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-zspche.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-zspche.ads gcc-12.1.0/gcc/ada/libgnat/g-zspche.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-zspche.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-zspche.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/g-zstspl.ads gcc-12.1.0/gcc/ada/libgnat/g-zstspl.ads
*** gcc-11.3.0/gcc/ada/libgnat/g-zstspl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/g-zstspl.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/gnat.ads gcc-12.1.0/gcc/ada/libgnat/gnat.ads
*** gcc-11.3.0/gcc/ada/libgnat/gnat.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/gnat.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1992-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1992-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 31,36 ****
--- 31,39 ----
  
  --  This is the parent package for a library of useful units provided with GNAT
  
+ --  Note: this unit is used during bootstrap, see ADA_GENERATED_FILES in
+ --  gcc-interface/Make-lang.in for details on the constraints.
+ 
  package GNAT is
     pragma Pure;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-c.adb gcc-12.1.0/gcc/ada/libgnat/i-c.adb
*** gcc-11.3.0/gcc/ada/libgnat/i-c.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-c.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! package body Interfaces.C is
  
     -----------------------
     -- Is_Nul_Terminated --
--- 29,105 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Ghost code, loop invariants and assertions in this unit are meant for
! --  analysis only, not for run-time checking, as it would be too costly
! --  otherwise. This is enforced by setting the assertion policy to Ignore.
! 
! pragma Assertion_Policy (Ghost          => Ignore,
!                          Loop_Invariant => Ignore,
!                          Assert         => Ignore);
! 
! package body Interfaces.C
!   with SPARK_Mode
! is
! 
!    --------------------
!    -- C_Length_Ghost --
!    --------------------
! 
!    function C_Length_Ghost (Item : char_array) return size_t is
!    begin
!       for J in Item'Range loop
!          if Item (J) = nul then
!             return J - Item'First;
!          end if;
! 
!          pragma Loop_Invariant
!            (for all K in Item'First .. J => Item (K) /= nul);
!       end loop;
! 
!       raise Program_Error;
!    end C_Length_Ghost;
! 
!    function C_Length_Ghost (Item : wchar_array) return size_t is
!    begin
!       for J in Item'Range loop
!          if Item (J) = wide_nul then
!             return J - Item'First;
!          end if;
! 
!          pragma Loop_Invariant
!            (for all K in Item'First .. J => Item (K) /= wide_nul);
!       end loop;
! 
!       raise Program_Error;
!    end C_Length_Ghost;
! 
!    function C_Length_Ghost (Item : char16_array) return size_t is
!    begin
!       for J in Item'Range loop
!          if Item (J) = char16_nul then
!             return J - Item'First;
!          end if;
! 
!          pragma Loop_Invariant
!            (for all K in Item'First .. J => Item (K) /= char16_nul);
!       end loop;
! 
!       raise Program_Error;
!    end C_Length_Ghost;
! 
!    function C_Length_Ghost (Item : char32_array) return size_t is
!    begin
!       for J in Item'Range loop
!          if Item (J) = char32_nul then
!             return J - Item'First;
!          end if;
! 
!          pragma Loop_Invariant
!            (for all K in Item'First .. J => Item (K) /= char32_nul);
!       end loop;
! 
!       raise Program_Error;
!    end C_Length_Ghost;
  
     -----------------------
     -- Is_Nul_Terminated --
*************** package body Interfaces.C is
*** 43,48 ****
--- 113,121 ----
           if Item (J) = nul then
              return True;
           end if;
+ 
+          pragma Loop_Invariant
+            (for all K in Item'First .. J => Item (K) /= nul);
        end loop;
  
        return False;
*************** package body Interfaces.C is
*** 56,61 ****
--- 129,137 ----
           if Item (J) = wide_nul then
              return True;
           end if;
+ 
+          pragma Loop_Invariant
+            (for all K in Item'First .. J => Item (K) /= wide_nul);
        end loop;
  
        return False;
*************** package body Interfaces.C is
*** 69,74 ****
--- 145,153 ----
           if Item (J) = char16_nul then
              return True;
           end if;
+ 
+          pragma Loop_Invariant
+            (for all K in Item'First .. J => Item (K) /= char16_nul);
        end loop;
  
        return False;
*************** package body Interfaces.C is
*** 82,87 ****
--- 161,169 ----
           if Item (J) = char32_nul then
              return True;
           end if;
+ 
+          pragma Loop_Invariant
+            (for all K in Item'First .. J => Item (K) /= char32_nul);
        end loop;
  
        return False;
*************** package body Interfaces.C is
*** 112,117 ****
--- 194,206 ----
           From := Item'First;
  
           loop
+             pragma Loop_Invariant (From in Item'Range);
+             pragma Loop_Invariant
+               (for some J in From .. Item'Last => Item (J) = nul);
+             pragma Loop_Invariant
+               (for all J in Item'First .. From when J /= From =>
+                  Item (J) /= nul);
+ 
              if From > Item'Last then
                 raise Terminator_Error;
              elsif Item (From) = nul then
*************** package body Interfaces.C is
*** 121,126 ****
--- 210,217 ----
              end if;
           end loop;
  
+          pragma Assert (From = Item'First + C_Length_Ghost (Item));
+ 
           Count := Natural (From - Item'First);
  
        else
*************** package body Interfaces.C is
*** 128,138 ****
        end if;
  
        declare
!          R : String (1 .. Count);
  
        begin
           for J in R'Range loop
!             R (J) := To_Ada (Item (size_t (J) + (Item'First - 1)));
           end loop;
  
           return R;
--- 219,235 ----
        end if;
  
        declare
!          Count_Cst : constant Natural := Count;
!          R : String (1 .. Count_Cst) with Relaxed_Initialization;
  
        begin
           for J in R'Range loop
!             R (J) := To_Ada (Item (size_t (J) - 1 + Item'First));
! 
!             pragma Loop_Invariant (for all K in 1 .. J => R (K)'Initialized);
!             pragma Loop_Invariant
!               (for all K in 1 .. J =>
!                 R (K) = To_Ada (Item (size_t (K) - 1 + Item'First)));
           end loop;
  
           return R;
*************** package body Interfaces.C is
*** 148,159 ****
        Trim_Nul : Boolean := True)
     is
        From : size_t;
!       To   : Positive;
  
     begin
        if Trim_Nul then
           From := Item'First;
           loop
              if From > Item'Last then
                 raise Terminator_Error;
              elsif Item (From) = nul then
--- 245,263 ----
        Trim_Nul : Boolean := True)
     is
        From : size_t;
!       To   : Integer;
  
     begin
        if Trim_Nul then
           From := Item'First;
           loop
+             pragma Loop_Invariant (From in Item'Range);
+             pragma Loop_Invariant
+               (for some J in From .. Item'Last => Item (J) = nul);
+             pragma Loop_Invariant
+               (for all J in Item'First .. From when J /= From =>
+                 Item (J) /= nul);
+ 
              if From > Item'Last then
                 raise Terminator_Error;
              elsif Item (From) = nul then
*************** package body Interfaces.C is
*** 178,188 ****
  
           for J in 1 .. Count loop
              Target (To) := Character (Item (From));
              From := From + 1;
              To   := To + 1;
           end loop;
        end if;
- 
     end To_Ada;
  
     --  Convert wchar_t to Wide_Character
--- 282,309 ----
  
           for J in 1 .. Count loop
              Target (To) := Character (Item (From));
+ 
+             pragma Loop_Invariant (From in Item'Range);
+             pragma Loop_Invariant (To in Target'Range);
+             pragma Loop_Invariant (To = Target'First + (J - 1));
+             pragma Loop_Invariant (From = Item'First + size_t (J - 1));
+             pragma Loop_Invariant
+               (for all J in Target'First .. To => Target (J)'Initialized);
+             pragma Loop_Invariant
+               (Target (Target'First .. To)'Initialized);
+             pragma Loop_Invariant
+               (for all K in Target'First .. To =>
+                 Target (K) =
+                   To_Ada (Item (size_t (K - Target'First) + Item'First)));
+ 
+             --  Avoid possible overflow when incrementing To in the last
+             --  iteration of the loop.
+             exit when J = Count;
+ 
              From := From + 1;
              To   := To + 1;
           end loop;
        end if;
     end To_Ada;
  
     --  Convert wchar_t to Wide_Character
*************** package body Interfaces.C is
*** 206,211 ****
--- 327,339 ----
           From := Item'First;
  
           loop
+             pragma Loop_Invariant (From in Item'Range);
+             pragma Loop_Invariant
+               (for some J in From .. Item'Last => Item (J) = wide_nul);
+             pragma Loop_Invariant
+               (for all J in Item'First .. From when J /= From =>
+                  Item (J) /= wide_nul);
+ 
              if From > Item'Last then
                 raise Terminator_Error;
              elsif Item (From) = wide_nul then
*************** package body Interfaces.C is
*** 215,220 ****
--- 343,350 ----
              end if;
           end loop;
  
+          pragma Assert (From = Item'First + C_Length_Ghost (Item));
+ 
           Count := Natural (From - Item'First);
  
        else
*************** package body Interfaces.C is
*** 222,232 ****
        end if;
  
        declare
!          R : Wide_String (1 .. Count);
  
        begin
           for J in R'Range loop
!             R (J) := To_Ada (Item (size_t (J) + (Item'First - 1)));
           end loop;
  
           return R;
--- 352,368 ----
        end if;
  
        declare
!          Count_Cst : constant Natural := Count;
!          R : Wide_String (1 .. Count_Cst) with Relaxed_Initialization;
  
        begin
           for J in R'Range loop
!             R (J) := To_Ada (Item (size_t (J) - 1 + Item'First));
! 
!             pragma Loop_Invariant (for all K in 1 .. J => R (K)'Initialized);
!             pragma Loop_Invariant
!               (for all K in 1 .. J =>
!                 R (K) = To_Ada (Item (size_t (K) - 1 + Item'First)));
           end loop;
  
           return R;
*************** package body Interfaces.C is
*** 242,253 ****
        Trim_Nul : Boolean := True)
     is
        From : size_t;
!       To   : Positive;
  
     begin
        if Trim_Nul then
           From := Item'First;
           loop
              if From > Item'Last then
                 raise Terminator_Error;
              elsif Item (From) = wide_nul then
--- 378,396 ----
        Trim_Nul : Boolean := True)
     is
        From : size_t;
!       To   : Integer;
  
     begin
        if Trim_Nul then
           From := Item'First;
           loop
+             pragma Loop_Invariant (From in Item'Range);
+             pragma Loop_Invariant
+               (for some J in From .. Item'Last => Item (J) = wide_nul);
+             pragma Loop_Invariant
+               (for all J in Item'First .. From when J /= From =>
+                 Item (J) /= wide_nul);
+ 
              if From > Item'Last then
                 raise Terminator_Error;
              elsif Item (From) = wide_nul then
*************** package body Interfaces.C is
*** 272,277 ****
--- 415,438 ----
  
           for J in 1 .. Count loop
              Target (To) := To_Ada (Item (From));
+ 
+             pragma Loop_Invariant (From in Item'Range);
+             pragma Loop_Invariant (To in Target'Range);
+             pragma Loop_Invariant (To = Target'First + (J - 1));
+             pragma Loop_Invariant (From = Item'First + size_t (J - 1));
+             pragma Loop_Invariant
+               (for all J in Target'First .. To => Target (J)'Initialized);
+             pragma Loop_Invariant
+               (Target (Target'First .. To)'Initialized);
+             pragma Loop_Invariant
+               (for all K in Target'First .. To =>
+                 Target (K) =
+                   To_Ada (Item (size_t (K - Target'First) + Item'First)));
+ 
+             --  Avoid possible overflow when incrementing To in the last
+             --  iteration of the loop.
+             exit when J = Count;
+ 
              From := From + 1;
              To   := To + 1;
           end loop;
*************** package body Interfaces.C is
*** 299,313 ****
           From := Item'First;
  
           loop
              if From > Item'Last then
                 raise Terminator_Error;
!             elsif Item (From) = char16_t'Val (0) then
                 exit;
              else
                 From := From + 1;
              end if;
           end loop;
  
           Count := Natural (From - Item'First);
  
        else
--- 460,483 ----
           From := Item'First;
  
           loop
+             pragma Loop_Invariant (From in Item'Range);
+             pragma Loop_Invariant
+               (for some J in From .. Item'Last => Item (J) = char16_nul);
+             pragma Loop_Invariant
+               (for all J in Item'First .. From when J /= From =>
+                  Item (J) /= char16_nul);
+ 
              if From > Item'Last then
                 raise Terminator_Error;
!             elsif Item (From) = char16_nul then
                 exit;
              else
                 From := From + 1;
              end if;
           end loop;
  
+          pragma Assert (From = Item'First + C_Length_Ghost (Item));
+ 
           Count := Natural (From - Item'First);
  
        else
*************** package body Interfaces.C is
*** 315,325 ****
        end if;
  
        declare
!          R : Wide_String (1 .. Count);
  
        begin
           for J in R'Range loop
!             R (J) := To_Ada (Item (size_t (J) + (Item'First - 1)));
           end loop;
  
           return R;
--- 485,501 ----
        end if;
  
        declare
!          Count_Cst : constant Natural := Count;
!          R : Wide_String (1 .. Count_Cst) with Relaxed_Initialization;
  
        begin
           for J in R'Range loop
!             R (J) := To_Ada (Item (size_t (J) - 1 + Item'First));
! 
!             pragma Loop_Invariant (for all K in 1 .. J => R (K)'Initialized);
!             pragma Loop_Invariant
!               (for all K in 1 .. J =>
!                 R (K) = To_Ada (Item (size_t (K) - 1 + Item'First)));
           end loop;
  
           return R;
*************** package body Interfaces.C is
*** 335,349 ****
        Trim_Nul : Boolean := True)
     is
        From : size_t;
!       To   : Positive;
  
     begin
        if Trim_Nul then
           From := Item'First;
           loop
              if From > Item'Last then
                 raise Terminator_Error;
!             elsif Item (From) = char16_t'Val (0) then
                 exit;
              else
                 From := From + 1;
--- 511,532 ----
        Trim_Nul : Boolean := True)
     is
        From : size_t;
!       To   : Integer;
  
     begin
        if Trim_Nul then
           From := Item'First;
           loop
+             pragma Loop_Invariant (From in Item'Range);
+             pragma Loop_Invariant
+               (for some J in From .. Item'Last => Item (J) = char16_nul);
+             pragma Loop_Invariant
+               (for all J in Item'First .. From when J /= From =>
+                 Item (J) /= char16_nul);
+ 
              if From > Item'Last then
                 raise Terminator_Error;
!             elsif Item (From) = char16_nul then
                 exit;
              else
                 From := From + 1;
*************** package body Interfaces.C is
*** 365,370 ****
--- 548,571 ----
  
           for J in 1 .. Count loop
              Target (To) := To_Ada (Item (From));
+ 
+             pragma Loop_Invariant (From in Item'Range);
+             pragma Loop_Invariant (To in Target'Range);
+             pragma Loop_Invariant (To = Target'First + (J - 1));
+             pragma Loop_Invariant (From = Item'First + size_t (J - 1));
+             pragma Loop_Invariant
+               (for all J in Target'First .. To => Target (J)'Initialized);
+             pragma Loop_Invariant
+               (Target (Target'First .. To)'Initialized);
+             pragma Loop_Invariant
+               (for all K in Target'First .. To =>
+                 Target (K) =
+                   To_Ada (Item (size_t (K - Target'First) + Item'First)));
+ 
+             --  Avoid possible overflow when incrementing To in the last
+             --  iteration of the loop.
+             exit when J = Count;
+ 
              From := From + 1;
              To   := To + 1;
           end loop;
*************** package body Interfaces.C is
*** 392,406 ****
           From := Item'First;
  
           loop
              if From > Item'Last then
                 raise Terminator_Error;
!             elsif Item (From) = char32_t'Val (0) then
                 exit;
              else
                 From := From + 1;
              end if;
           end loop;
  
           Count := Natural (From - Item'First);
  
        else
--- 593,616 ----
           From := Item'First;
  
           loop
+             pragma Loop_Invariant (From in Item'Range);
+             pragma Loop_Invariant
+               (for some J in From .. Item'Last => Item (J) = char32_nul);
+             pragma Loop_Invariant
+               (for all J in Item'First .. From when J /= From =>
+                  Item (J) /= char32_nul);
+ 
              if From > Item'Last then
                 raise Terminator_Error;
!             elsif Item (From) = char32_nul then
                 exit;
              else
                 From := From + 1;
              end if;
           end loop;
  
+          pragma Assert (From = Item'First + C_Length_Ghost (Item));
+ 
           Count := Natural (From - Item'First);
  
        else
*************** package body Interfaces.C is
*** 408,418 ****
        end if;
  
        declare
!          R : Wide_Wide_String (1 .. Count);
  
        begin
           for J in R'Range loop
!             R (J) := To_Ada (Item (size_t (J) + (Item'First - 1)));
           end loop;
  
           return R;
--- 618,634 ----
        end if;
  
        declare
!          Count_Cst : constant Natural := Count;
!          R : Wide_Wide_String (1 .. Count_Cst) with Relaxed_Initialization;
  
        begin
           for J in R'Range loop
!             R (J) := To_Ada (Item (size_t (J) - 1 + Item'First));
! 
!             pragma Loop_Invariant (for all K in 1 .. J => R (K)'Initialized);
!             pragma Loop_Invariant
!               (for all K in 1 .. J =>
!                 R (K) = To_Ada (Item (size_t (K) - 1 + Item'First)));
           end loop;
  
           return R;
*************** package body Interfaces.C is
*** 428,442 ****
        Trim_Nul : Boolean := True)
     is
        From : size_t;
!       To   : Positive;
  
     begin
        if Trim_Nul then
           From := Item'First;
           loop
              if From > Item'Last then
                 raise Terminator_Error;
!             elsif Item (From) = char32_t'Val (0) then
                 exit;
              else
                 From := From + 1;
--- 644,665 ----
        Trim_Nul : Boolean := True)
     is
        From : size_t;
!       To   : Integer;
  
     begin
        if Trim_Nul then
           From := Item'First;
           loop
+             pragma Loop_Invariant (From in Item'Range);
+             pragma Loop_Invariant
+               (for some J in From .. Item'Last => Item (J) = char32_nul);
+             pragma Loop_Invariant
+               (for all J in Item'First .. From when J /= From =>
+                 Item (J) /= char32_nul);
+ 
              if From > Item'Last then
                 raise Terminator_Error;
!             elsif Item (From) = char32_nul then
                 exit;
              else
                 From := From + 1;
*************** package body Interfaces.C is
*** 458,463 ****
--- 681,704 ----
  
           for J in 1 .. Count loop
              Target (To) := To_Ada (Item (From));
+ 
+             pragma Loop_Invariant (From in Item'Range);
+             pragma Loop_Invariant (To in Target'Range);
+             pragma Loop_Invariant (To = Target'First + (J - 1));
+             pragma Loop_Invariant (From = Item'First + size_t (J - 1));
+             pragma Loop_Invariant
+               (for all J in Target'First .. To => Target (J)'Initialized);
+             pragma Loop_Invariant
+               (Target (Target'First .. To)'Initialized);
+             pragma Loop_Invariant
+               (for all K in Target'First .. To =>
+                 Target (K) =
+                   To_Ada (Item (size_t (K - Target'First) + Item'First)));
+ 
+             --  Avoid possible overflow when incrementing To in the last
+             --  iteration of the loop.
+             exit when J = Count;
+ 
              From := From + 1;
              To   := To + 1;
           end loop;
*************** package body Interfaces.C is
*** 484,497 ****
     begin
        if Append_Nul then
           declare
!             R : char_array (0 .. Item'Length);
  
           begin
              for J in Item'Range loop
                 R (size_t (J - Item'First)) := To_C (Item (J));
              end loop;
  
              R (R'Last) := nul;
              return R;
           end;
  
--- 725,750 ----
     begin
        if Append_Nul then
           declare
!             R : char_array (0 .. Item'Length) with Relaxed_Initialization;
  
           begin
              for J in Item'Range loop
                 R (size_t (J - Item'First)) := To_C (Item (J));
+ 
+                pragma Loop_Invariant
+                  (for all K in 0 .. size_t (J - Item'First) =>
+                     R (K)'Initialized);
+                pragma Loop_Invariant
+                  (for all K in Item'First .. J =>
+                     R (size_t (K - Item'First)) = To_C (Item (K)));
              end loop;
  
              R (R'Last) := nul;
+ 
+             pragma Assert
+               (for all J in Item'Range =>
+                  R (size_t (J - Item'First)) = To_C (Item (J)));
+ 
              return R;
           end;
  
*************** package body Interfaces.C is
*** 512,522 ****
  
           else
              declare
!                R : char_array (0 .. Item'Length - 1);
  
              begin
                 for J in Item'Range loop
                    R (size_t (J - Item'First)) := To_C (Item (J));
                 end loop;
  
                 return R;
--- 765,783 ----
  
           else
              declare
!                R : char_array (0 .. Item'Length - 1)
!                  with Relaxed_Initialization;
  
              begin
                 for J in Item'Range loop
                    R (size_t (J - Item'First)) := To_C (Item (J));
+ 
+                   pragma Loop_Invariant
+                     (for all K in 0 .. size_t (J - Item'First) =>
+                        R (K)'Initialized);
+                   pragma Loop_Invariant
+                     (for all K in Item'First .. J =>
+                        R (size_t (K - Item'First)) = To_C (Item (K)));
                 end loop;
  
                 return R;
*************** package body Interfaces.C is
*** 543,548 ****
--- 804,822 ----
           To := Target'First;
           for From in Item'Range loop
              Target (To) := char (Item (From));
+ 
+             pragma Loop_Invariant (To in Target'Range);
+             pragma Loop_Invariant
+               (To - Target'First = size_t (From - Item'First));
+             pragma Loop_Invariant
+               (for all J in Target'First .. To => Target (J)'Initialized);
+             pragma Loop_Invariant
+               (Target (Target'First .. To)'Initialized);
+             pragma Loop_Invariant
+               (for all J in Item'First .. From =>
+                  Target (Target'First + size_t (J - Item'First)) =
+                    To_C (Item (J)));
+ 
              To := To + 1;
           end loop;
  
*************** package body Interfaces.C is
*** 576,589 ****
     begin
        if Append_Nul then
           declare
!             R : wchar_array (0 .. Item'Length);
  
           begin
              for J in Item'Range loop
                 R (size_t (J - Item'First)) := To_C (Item (J));
              end loop;
  
              R (R'Last) := wide_nul;
              return R;
           end;
  
--- 850,875 ----
     begin
        if Append_Nul then
           declare
!             R : wchar_array (0 .. Item'Length) with Relaxed_Initialization;
  
           begin
              for J in Item'Range loop
                 R (size_t (J - Item'First)) := To_C (Item (J));
+ 
+                pragma Loop_Invariant
+                  (for all K in 0 .. size_t (J - Item'First) =>
+                     R (K)'Initialized);
+                pragma Loop_Invariant
+                  (for all K in Item'First .. J =>
+                     R (size_t (K - Item'First)) = To_C (Item (K)));
              end loop;
  
              R (R'Last) := wide_nul;
+ 
+             pragma Assert
+               (for all J in Item'Range =>
+                  R (size_t (J - Item'First)) = To_C (Item (J)));
+ 
              return R;
           end;
  
*************** package body Interfaces.C is
*** 600,610 ****
  
           else
              declare
!                R : wchar_array (0 .. Item'Length - 1);
  
              begin
!                for J in size_t range 0 .. Item'Length - 1 loop
!                   R (J) := To_C (Item (Integer (J) + Item'First));
                 end loop;
  
                 return R;
--- 886,904 ----
  
           else
              declare
!                R : wchar_array (0 .. Item'Length - 1)
!                  with Relaxed_Initialization;
  
              begin
!                for J in Item'Range loop
!                   R (size_t (J - Item'First)) := To_C (Item (J));
! 
!                   pragma Loop_Invariant
!                     (for all K in 0 .. size_t (J - Item'First) =>
!                        R (K)'Initialized);
!                   pragma Loop_Invariant
!                     (for all K in Item'First .. J =>
!                        R (size_t (K - Item'First)) = To_C (Item (K)));
                 end loop;
  
                 return R;
*************** package body Interfaces.C is
*** 631,639 ****
--- 925,955 ----
           To := Target'First;
           for From in Item'Range loop
              Target (To) := To_C (Item (From));
+ 
+             pragma Loop_Invariant (To in Target'Range);
+             pragma Loop_Invariant
+               (To - Target'First = size_t (From - Item'First));
+             pragma Loop_Invariant
+               (for all J in Target'First .. To => Target (J)'Initialized);
+             pragma Loop_Invariant
+               (Target (Target'First .. To)'Initialized);
+             pragma Loop_Invariant
+               (for all J in Item'First .. From =>
+                 Target (Target'First + size_t (J - Item'First)) =
+                   To_C (Item (J)));
+ 
              To := To + 1;
           end loop;
  
+          pragma Assert
+            (for all J in Item'Range =>
+              Target (Target'First + size_t (J - Item'First)) =
+                To_C (Item (J)));
+          pragma Assert
+            (if Item'Length /= 0 then
+              Target (Target'First ..
+                      Target'First + (Item'Length - 1))'Initialized);
+ 
           if Append_Nul then
              if To > Target'Last then
                 raise Constraint_Error;
*************** package body Interfaces.C is
*** 664,677 ****
     begin
        if Append_Nul then
           declare
!             R : char16_array (0 .. Item'Length);
  
           begin
              for J in Item'Range loop
                 R (size_t (J - Item'First)) := To_C (Item (J));
              end loop;
  
!             R (R'Last) := char16_t'Val (0);
              return R;
           end;
  
--- 980,1005 ----
     begin
        if Append_Nul then
           declare
!             R : char16_array (0 .. Item'Length) with Relaxed_Initialization;
  
           begin
              for J in Item'Range loop
                 R (size_t (J - Item'First)) := To_C (Item (J));
+ 
+                pragma Loop_Invariant
+                  (for all K in 0 .. size_t (J - Item'First) =>
+                     R (K)'Initialized);
+                pragma Loop_Invariant
+                  (for all K in Item'First .. J =>
+                     R (size_t (K - Item'First)) = To_C (Item (K)));
              end loop;
  
!             R (R'Last) := char16_nul;
! 
!             pragma Assert
!               (for all J in Item'Range =>
!                  R (size_t (J - Item'First)) = To_C (Item (J)));
! 
              return R;
           end;
  
*************** package body Interfaces.C is
*** 688,698 ****
  
           else
              declare
!                R : char16_array (0 .. Item'Length - 1);
  
              begin
!                for J in size_t range 0 .. Item'Length - 1 loop
!                   R (J) := To_C (Item (Integer (J) + Item'First));
                 end loop;
  
                 return R;
--- 1016,1034 ----
  
           else
              declare
!                R : char16_array (0 .. Item'Length - 1)
!                  with Relaxed_Initialization;
  
              begin
!                for J in Item'Range loop
!                   R (size_t (J - Item'First)) := To_C (Item (J));
! 
!                   pragma Loop_Invariant
!                     (for all K in 0 .. size_t (J - Item'First) =>
!                        R (K)'Initialized);
!                   pragma Loop_Invariant
!                     (for all K in Item'First .. J =>
!                        R (size_t (K - Item'First)) = To_C (Item (K)));
                 end loop;
  
                 return R;
*************** package body Interfaces.C is
*** 719,732 ****
           To := Target'First;
           for From in Item'Range loop
              Target (To) := To_C (Item (From));
              To := To + 1;
           end loop;
  
           if Append_Nul then
              if To > Target'Last then
                 raise Constraint_Error;
              else
!                Target (To) := char16_t'Val (0);
                 Count := Item'Length + 1;
              end if;
  
--- 1055,1090 ----
           To := Target'First;
           for From in Item'Range loop
              Target (To) := To_C (Item (From));
+ 
+             pragma Loop_Invariant (To in Target'Range);
+             pragma Loop_Invariant
+               (To - Target'First = size_t (From - Item'First));
+             pragma Loop_Invariant
+               (for all J in Target'First .. To => Target (J)'Initialized);
+             pragma Loop_Invariant
+               (Target (Target'First .. To)'Initialized);
+             pragma Loop_Invariant
+               (for all J in Item'First .. From =>
+                 Target (Target'First + size_t (J - Item'First)) =
+                   To_C (Item (J)));
+ 
              To := To + 1;
           end loop;
  
+          pragma Assert
+            (for all J in Item'Range =>
+              Target (Target'First + size_t (J - Item'First)) =
+                To_C (Item (J)));
+          pragma Assert
+            (if Item'Length /= 0 then
+              Target (Target'First ..
+                      Target'First + (Item'Length - 1))'Initialized);
+ 
           if Append_Nul then
              if To > Target'Last then
                 raise Constraint_Error;
              else
!                Target (To) := char16_nul;
                 Count := Item'Length + 1;
              end if;
  
*************** package body Interfaces.C is
*** 752,765 ****
     begin
        if Append_Nul then
           declare
!             R : char32_array (0 .. Item'Length);
  
           begin
              for J in Item'Range loop
                 R (size_t (J - Item'First)) := To_C (Item (J));
              end loop;
  
!             R (R'Last) := char32_t'Val (0);
              return R;
           end;
  
--- 1110,1135 ----
     begin
        if Append_Nul then
           declare
!             R : char32_array (0 .. Item'Length) with Relaxed_Initialization;
  
           begin
              for J in Item'Range loop
                 R (size_t (J - Item'First)) := To_C (Item (J));
+ 
+                pragma Loop_Invariant
+                  (for all K in 0 .. size_t (J - Item'First) =>
+                     R (K)'Initialized);
+                pragma Loop_Invariant
+                  (for all K in Item'First .. J =>
+                     R (size_t (K - Item'First)) = To_C (Item (K)));
              end loop;
  
!             R (R'Last) := char32_nul;
! 
!             pragma Assert
!               (for all J in Item'Range =>
!                  R (size_t (J - Item'First)) = To_C (Item (J)));
! 
              return R;
           end;
  
*************** package body Interfaces.C is
*** 775,785 ****
  
           else
              declare
!                R : char32_array (0 .. Item'Length - 1);
  
              begin
!                for J in size_t range 0 .. Item'Length - 1 loop
!                   R (J) := To_C (Item (Integer (J) + Item'First));
                 end loop;
  
                 return R;
--- 1145,1163 ----
  
           else
              declare
!                R : char32_array (0 .. Item'Length - 1)
!                  with Relaxed_Initialization;
  
              begin
!                for J in Item'Range loop
!                   R (size_t (J - Item'First)) := To_C (Item (J));
! 
!                   pragma Loop_Invariant
!                     (for all K in 0 .. size_t (J - Item'First) =>
!                        R (K)'Initialized);
!                   pragma Loop_Invariant
!                     (for all K in Item'First .. J =>
!                        R (size_t (K - Item'First)) = To_C (Item (K)));
                 end loop;
  
                 return R;
*************** package body Interfaces.C is
*** 806,819 ****
           To := Target'First;
           for From in Item'Range loop
              Target (To) := To_C (Item (From));
              To := To + 1;
           end loop;
  
           if Append_Nul then
              if To > Target'Last then
                 raise Constraint_Error;
              else
!                Target (To) := char32_t'Val (0);
                 Count := Item'Length + 1;
              end if;
  
--- 1184,1219 ----
           To := Target'First;
           for From in Item'Range loop
              Target (To) := To_C (Item (From));
+ 
+             pragma Loop_Invariant (To in Target'Range);
+             pragma Loop_Invariant
+               (To - Target'First = size_t (From - Item'First));
+             pragma Loop_Invariant
+               (for all J in Target'First .. To => Target (J)'Initialized);
+             pragma Loop_Invariant
+               (Target (Target'First .. To)'Initialized);
+             pragma Loop_Invariant
+               (for all J in Item'First .. From =>
+                 Target (Target'First + size_t (J - Item'First)) =
+                   To_C (Item (J)));
+ 
              To := To + 1;
           end loop;
  
+          pragma Assert
+            (for all J in Item'Range =>
+              Target (Target'First + size_t (J - Item'First)) =
+                To_C (Item (J)));
+          pragma Assert
+            (if Item'Length /= 0 then
+              Target (Target'First ..
+                      Target'First + (Item'Length - 1))'Initialized);
+ 
           if Append_Nul then
              if To > Target'Last then
                 raise Constraint_Error;
              else
!                Target (To) := char32_nul;
                 Count := Item'Length + 1;
              end if;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-c.ads gcc-12.1.0/gcc/ada/libgnat/i-c.ads
*** gcc-11.3.0/gcc/ada/libgnat/i-c.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-c.ads	Fri May  6 07:30:56 2022
***************
*** 13,22 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  with System.Parameters;
  
! package Interfaces.C is
!    pragma Pure;
  
     --  Declaration's based on C's <limits.h>
  
--- 13,42 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
  with System.Parameters;
  
! package Interfaces.C
!   with SPARK_Mode, Pure
! is
!    --  Each of the types declared in Interfaces.C is C-compatible.
! 
!    --  The types int, short, long, unsigned, ptrdiff_t, size_t, double,
!    --  char, wchar_t, char16_t, and char32_t correspond respectively to the
!    --  C types having the same names. The types signed_char, unsigned_short,
!    --  unsigned_long, unsigned_char, C_bool, C_float, and long_double
!    --  correspond respectively to the C types signed char, unsigned
!    --  short, unsigned long, unsigned char, bool, float, and long double.
  
     --  Declaration's based on C's <limits.h>
  
*************** package Interfaces.C is
*** 49,55 ****
     type unsigned_char is mod (UCHAR_MAX + 1);
     for unsigned_char'Size use CHAR_BIT;
  
!    subtype plain_char is unsigned_char; -- ??? should be parameterized
  
     --  Note: the Integer qualifications used in the declaration of ptrdiff_t
     --  avoid ambiguities when compiling in the presence of s-auxdec.ads and
--- 69,79 ----
     type unsigned_char is mod (UCHAR_MAX + 1);
     for unsigned_char'Size use CHAR_BIT;
  
!    --  Note: Ada RM states that the type of the subtype plain_char is either
!    --  signed_char or unsigned_char, depending on the C implementation. GNAT
!    --  instead choses unsigned_char always.
! 
!    subtype plain_char is unsigned_char;
  
     --  Note: the Integer qualifications used in the declaration of ptrdiff_t
     --  avoid ambiguities when compiling in the presence of s-auxdec.ads and
*************** package Interfaces.C is
*** 61,66 ****
--- 85,95 ----
  
     type size_t is mod 2 ** System.Parameters.ptr_bits;
  
+    --  Boolean type
+ 
+    type C_bool is new Boolean;
+    pragma Convention (C, C_bool);
+ 
     --  Floating-Point
  
     type C_float     is new Float;
*************** package Interfaces.C is
*** 75,107 ****
  
     nul : constant char := char'First;
  
!    function To_C   (Item : Character) return char;
!    function To_Ada (Item : char)      return Character;
  
     type char_array is array (size_t range <>) of aliased char;
     for char_array'Component_Size use CHAR_BIT;
  
!    function Is_Nul_Terminated (Item : char_array) return Boolean;
  
     function To_C
       (Item       : String;
!       Append_Nul : Boolean := True) return char_array;
  
     function To_Ada
       (Item     : char_array;
!       Trim_Nul : Boolean := True) return String;
  
     procedure To_C
       (Item       : String;
        Target     : out char_array;
        Count      : out size_t;
!       Append_Nul : Boolean := True);
  
     procedure To_Ada
       (Item     : char_array;
        Target   : out String;
        Count    : out Natural;
!       Trim_Nul : Boolean := True);
  
     ------------------------------------
     -- Wide Character and Wide String --
--- 104,236 ----
  
     nul : constant char := char'First;
  
!    --  The functions To_C and To_Ada map between the Ada type Character and the
!    --  C type char.
! 
!    function To_C (Item : Character) return char
!    with
!      Post => To_C'Result = char'Val (Character'Pos (Item));
! 
!    function To_Ada (Item : char) return Character
!    with
!      Post => To_Ada'Result = Character'Val (char'Pos (Item));
  
     type char_array is array (size_t range <>) of aliased char;
     for char_array'Component_Size use CHAR_BIT;
  
!    function Is_Nul_Terminated (Item : char_array) return Boolean
!    with
!      Post => Is_Nul_Terminated'Result = (for some C of Item => C = nul);
!    --  The result of Is_Nul_Terminated is True if Item contains nul, and is
!    --  False otherwise.
! 
!    function C_Length_Ghost (Item : char_array) return size_t
!    with
!      Ghost,
!      Pre  => Is_Nul_Terminated (Item),
!      Post => C_Length_Ghost'Result <= Item'Last - Item'First
!        and then Item (Item'First + C_Length_Ghost'Result) = nul
!        and then (for all J in Item'First .. Item'First + C_Length_Ghost'Result
!                    when J /= Item'First + C_Length_Ghost'Result =>
!                      Item (J) /= nul);
!    --  Ghost function to compute the length of a char_array up to the first nul
!    --  character.
  
     function To_C
       (Item       : String;
!       Append_Nul : Boolean := True) return char_array
!    with
!      Pre  => not (Append_Nul = False and then Item'Length = 0),
!      Post => To_C'Result'First = 0
!        and then To_C'Result'Length =
!          (if Append_Nul then Item'Length + 1 else Item'Length)
!        and then (for all J in Item'Range =>
!                    To_C'Result (size_t (J - Item'First)) = To_C (Item (J)))
!        and then (if Append_Nul then To_C'Result (To_C'Result'Last) = nul);
!    --  The result of To_C is a char_array value of length Item'Length (if
!    --  Append_Nul is False) or Item'Length+1 (if Append_Nul is True). The lower
!    --  bound is 0. For each component Item(I), the corresponding component
!    --  in the result is To_C applied to Item(I). The value nul is appended if
!    --  Append_Nul is True. If Append_Nul is False and Item'Length is 0, then
!    --  To_C propagates Constraint_Error.
  
     function To_Ada
       (Item     : char_array;
!       Trim_Nul : Boolean := True) return String
!    with
!      Pre  => (if Trim_Nul then
!                 Is_Nul_Terminated (Item)
!                   and then C_Length_Ghost (Item) <= size_t (Natural'Last)
!               else
!                 Item'Last - Item'First < size_t (Natural'Last)),
!      Post => To_Ada'Result'First = 1
!        and then To_Ada'Result'Length =
!          (if Trim_Nul then C_Length_Ghost (Item) else Item'Length)
!        and then (for all J in To_Ada'Result'Range =>
!                    To_Ada'Result (J) =
!                      To_Ada (Item (size_t (J) - 1 + Item'First)));
!    --  The result of To_Ada is a String whose length is Item'Length (if
!    --  Trim_Nul is False) or the length of the slice of Item preceding the
!    --  first nul (if Trim_Nul is True). The lower bound of the result is 1.
!    --  If Trim_Nul is False, then for each component Item(I) the corresponding
!    --  component in the result is To_Ada applied to Item(I). If Trim_Nul
!    --  is True, then for each component Item(I) before the first nul the
!    --  corresponding component in the result is To_Ada applied to Item(I). The
!    --  function propagates Terminator_Error if Trim_Nul is True and Item does
!    --  not contain nul.
  
     procedure To_C
       (Item       : String;
        Target     : out char_array;
        Count      : out size_t;
!       Append_Nul : Boolean := True)
!    with
!      Relaxed_Initialization => Target,
!      Pre  => Target'Length >=
!        (if Append_Nul then Item'Length + 1 else Item'Length),
!      Post => Count = (if Append_Nul then Item'Length + 1 else Item'Length)
!        and then
!          (if Count /= 0 then
!            Target (Target'First .. Target'First + (Count - 1))'Initialized)
!        and then
!          (for all J in Item'Range =>
!            Target (Target'First + size_t (J - Item'First)) = To_C (Item (J)))
!        and then
!          (if Append_Nul then Target (Target'First + (Count - 1)) = nul);
!    --  For procedure To_C, each element of Item is converted (via the To_C
!    --  function) to a char, which is assigned to the corresponding element of
!    --  Target. If Append_Nul is True, nul is then assigned to the next element
!    --  of Target. In either case, Count is set to the number of Target elements
!    --  assigned. If Target is not long enough, Constraint_Error is propagated.
  
     procedure To_Ada
       (Item     : char_array;
        Target   : out String;
        Count    : out Natural;
!       Trim_Nul : Boolean := True)
!    with
!      Relaxed_Initialization => Target,
!      Pre  => (if Trim_Nul then
!                 Is_Nul_Terminated (Item)
!                   and then C_Length_Ghost (Item) <= size_t (Target'Length)
!               else
!                 Item'Last - Item'First < size_t (Target'Length)),
!      Post => Count =
!          (if Trim_Nul then Natural (C_Length_Ghost (Item)) else Item'Length)
!        and then
!          (if Count /= 0 then
!            Target (Target'First .. Target'First + (Count - 1))'Initialized)
!        and then
!          (for all J in Target'First .. Target'First + (Count - 1) =>
!            Target (J) =
!              To_Ada (Item (size_t (J - Target'First) + Item'First)));
!    --  For procedure To_Ada, each element of Item (if Trim_Nul is False) or
!    --  each element of Item preceding the first nul (if Trim_Nul is True) is
!    --  converted (via the To_Ada function) to a Character, which is assigned
!    --  to the corresponding element of Target. Count is set to the number of
!    --  Target elements assigned. If Target is not long enough, Constraint_Error
!    --  is propagated. If Trim_Nul is True and Item does not contain nul, then
!    --  Terminator_Error is propagated.
  
     ------------------------------------
     -- Wide Character and Wide String --
*************** package Interfaces.C is
*** 112,143 ****
  
     wide_nul : constant wchar_t := wchar_t'First;
  
!    function To_C   (Item : Wide_Character) return wchar_t;
!    function To_Ada (Item : wchar_t)        return Wide_Character;
  
     type wchar_array is array (size_t range <>) of aliased wchar_t;
  
!    function Is_Nul_Terminated (Item : wchar_array) return Boolean;
  
     function To_C
       (Item       : Wide_String;
!       Append_Nul : Boolean := True) return wchar_array;
  
     function To_Ada
       (Item     : wchar_array;
!       Trim_Nul : Boolean := True) return Wide_String;
  
     procedure To_C
       (Item       : Wide_String;
        Target     : out wchar_array;
        Count      : out size_t;
!       Append_Nul : Boolean := True);
  
     procedure To_Ada
       (Item     : wchar_array;
        Target   : out Wide_String;
        Count    : out Natural;
!       Trim_Nul : Boolean := True);
  
     Terminator_Error : exception;
  
--- 241,350 ----
  
     wide_nul : constant wchar_t := wchar_t'First;
  
!    --  To_C and To_Ada provide the mappings between the Ada and C wide
!    --  character types.
! 
!    function To_C (Item : Wide_Character) return wchar_t
!    with
!      Post => To_C'Result = wchar_t (Item);
! 
!    function To_Ada (Item : wchar_t) return Wide_Character
!    with
!      Post => To_Ada'Result = Wide_Character (Item);
  
     type wchar_array is array (size_t range <>) of aliased wchar_t;
  
!    function Is_Nul_Terminated (Item : wchar_array) return Boolean
!    with
!      Post => Is_Nul_Terminated'Result = (for some C of Item => C = wide_nul);
!    --  The result of Is_Nul_Terminated is True if Item contains wide_nul, and
!    --  is False otherwise.
! 
!    --  The To_C and To_Ada subprograms that convert between Wide_String and
!    --  wchar_array have analogous effects to the To_C and To_Ada subprograms
!    --  that convert between String and char_array, except that wide_nul is
!    --  used instead of nul.
! 
!    function C_Length_Ghost (Item : wchar_array) return size_t
!    with
!      Ghost,
!      Pre  => Is_Nul_Terminated (Item),
!      Post => C_Length_Ghost'Result <= Item'Last - Item'First
!        and then Item (Item'First + C_Length_Ghost'Result) = wide_nul
!        and then (for all J in Item'First .. Item'First + C_Length_Ghost'Result
!                    when J /= Item'First + C_Length_Ghost'Result =>
!                      Item (J) /= wide_nul);
!    --  Ghost function to compute the length of a wchar_array up to the first
!    --  wide_nul character.
  
     function To_C
       (Item       : Wide_String;
!       Append_Nul : Boolean := True) return wchar_array
!    with
!      Pre  => not (Append_Nul = False and then Item'Length = 0),
!      Post => To_C'Result'First = 0
!        and then To_C'Result'Length =
!          (if Append_Nul then Item'Length + 1 else Item'Length)
!        and then (for all J in Item'Range =>
!                    To_C'Result (size_t (J - Item'First)) = To_C (Item (J)))
!        and then (if Append_Nul then To_C'Result (To_C'Result'Last) = wide_nul);
  
     function To_Ada
       (Item     : wchar_array;
!       Trim_Nul : Boolean := True) return Wide_String
!    with
!      Pre  => (if Trim_Nul then
!                 Is_Nul_Terminated (Item)
!                   and then C_Length_Ghost (Item) <= size_t (Natural'Last)
!               else
!                 Item'Last - Item'First < size_t (Natural'Last)),
!      Post => To_Ada'Result'First = 1
!        and then To_Ada'Result'Length =
!          (if Trim_Nul then C_Length_Ghost (Item) else Item'Length)
!        and then (for all J in To_Ada'Result'Range =>
!                    To_Ada'Result (J) =
!                      To_Ada (Item (size_t (J) - 1 + Item'First)));
  
     procedure To_C
       (Item       : Wide_String;
        Target     : out wchar_array;
        Count      : out size_t;
!       Append_Nul : Boolean := True)
!    with
!      Relaxed_Initialization => Target,
!      Pre  => Target'Length >=
!        (if Append_Nul then Item'Length + 1 else Item'Length),
!      Post => Count = (if Append_Nul then Item'Length + 1 else Item'Length)
!        and then
!          (if Count /= 0 then
!            Target (Target'First .. Target'First + (Count - 1))'Initialized)
!        and then
!          (for all J in Item'Range =>
!            Target (Target'First + size_t (J - Item'First)) = To_C (Item (J)))
!        and then
!          (if Append_Nul then Target (Target'First + (Count - 1)) = wide_nul);
  
     procedure To_Ada
       (Item     : wchar_array;
        Target   : out Wide_String;
        Count    : out Natural;
!       Trim_Nul : Boolean := True)
!    with
!      Relaxed_Initialization => Target,
!      Pre  => (if Trim_Nul then
!                 Is_Nul_Terminated (Item)
!                   and then C_Length_Ghost (Item) <= size_t (Target'Length)
!               else
!                 Item'Last - Item'First < size_t (Target'Length)),
!      Post => Count =
!          (if Trim_Nul then Natural (C_Length_Ghost (Item)) else Item'Length)
!        and then
!          (if Count /= 0 then
!            Target (Target'First .. Target'First + (Count - 1))'Initialized)
!        and then
!          (for all J in Target'First .. Target'First + (Count - 1) =>
!            Target (J) =
!              To_Ada (Item (size_t (J - Target'First) + Item'First)));
  
     Terminator_Error : exception;
  
*************** package Interfaces.C is
*** 151,190 ****
     char16_nul : constant char16_t := char16_t'Val (0);
     pragma Ada_05 (char16_nul);
  
!    function To_C (Item : Wide_Character) return char16_t;
     pragma Ada_05 (To_C);
  
!    function To_Ada (Item : char16_t) return Wide_Character;
     pragma Ada_05 (To_Ada);
  
     type char16_array is array (size_t range <>) of aliased char16_t;
     pragma Ada_05 (char16_array);
  
!    function Is_Nul_Terminated (Item : char16_array) return Boolean;
     pragma Ada_05 (Is_Nul_Terminated);
  
     function To_C
       (Item       : Wide_String;
!       Append_Nul : Boolean := True) return char16_array;
     pragma Ada_05 (To_C);
  
     function To_Ada
       (Item     : char16_array;
!       Trim_Nul : Boolean := True) return Wide_String;
     pragma Ada_05 (To_Ada);
  
     procedure To_C
       (Item       : Wide_String;
        Target     : out char16_array;
        Count      : out size_t;
!       Append_Nul : Boolean := True);
     pragma Ada_05 (To_C);
  
     procedure To_Ada
       (Item     : char16_array;
        Target   : out Wide_String;
        Count    : out Natural;
!       Trim_Nul : Boolean := True);
     pragma Ada_05 (To_Ada);
  
     type char32_t is new Wide_Wide_Character;
--- 358,475 ----
     char16_nul : constant char16_t := char16_t'Val (0);
     pragma Ada_05 (char16_nul);
  
!    --  To_C and To_Ada provide mappings between the Ada and C 16-bit character
!    --  types.
! 
!    function To_C (Item : Wide_Character) return char16_t
!    with
!      Post => To_C'Result = char16_t (Item);
     pragma Ada_05 (To_C);
  
!    function To_Ada (Item : char16_t) return Wide_Character
!    with
!      Post => To_Ada'Result = Wide_Character (Item);
     pragma Ada_05 (To_Ada);
  
     type char16_array is array (size_t range <>) of aliased char16_t;
     pragma Ada_05 (char16_array);
  
!    function Is_Nul_Terminated (Item : char16_array) return Boolean
!    with
!      Post => Is_Nul_Terminated'Result = (for some C of Item => C = char16_nul);
     pragma Ada_05 (Is_Nul_Terminated);
+    --  The result of Is_Nul_Terminated is True if Item contains char16_nul, and
+    --  is False otherwise.
+ 
+    --  The To_C and To_Ada subprograms that convert between Wide_String and
+    --  char16_array have analogous effects to the To_C and To_Ada subprograms
+    --  that convert between String and char_array, except that char16_nul is
+    --  used instead of nul.
+ 
+    function C_Length_Ghost (Item : char16_array) return size_t
+    with
+      Ghost,
+      Pre  => Is_Nul_Terminated (Item),
+      Post => C_Length_Ghost'Result <= Item'Last - Item'First
+        and then Item (Item'First + C_Length_Ghost'Result) = char16_nul
+        and then (for all J in Item'First .. Item'First + C_Length_Ghost'Result
+                    when J /= Item'First + C_Length_Ghost'Result =>
+                      Item (J) /= char16_nul);
+    --  Ghost function to compute the length of a char16_array up to the first
+    --  char16_nul character.
  
     function To_C
       (Item       : Wide_String;
!       Append_Nul : Boolean := True) return char16_array
!    with
!      Pre  => not (Append_Nul = False and then Item'Length = 0),
!      Post => To_C'Result'First = 0
!        and then To_C'Result'Length =
!          (if Append_Nul then Item'Length + 1 else Item'Length)
!        and then (for all J in Item'Range =>
!                    To_C'Result (size_t (J - Item'First)) = To_C (Item (J)))
!        and then
!          (if Append_Nul then To_C'Result (To_C'Result'Last) = char16_nul);
     pragma Ada_05 (To_C);
  
     function To_Ada
       (Item     : char16_array;
!       Trim_Nul : Boolean := True) return Wide_String
!    with
!      Pre  => (if Trim_Nul then
!                 Is_Nul_Terminated (Item)
!                   and then C_Length_Ghost (Item) <= size_t (Natural'Last)
!               else
!                 Item'Last - Item'First < size_t (Natural'Last)),
!      Post => To_Ada'Result'First = 1
!        and then To_Ada'Result'Length =
!          (if Trim_Nul then C_Length_Ghost (Item) else Item'Length)
!        and then (for all J in To_Ada'Result'Range =>
!                    To_Ada'Result (J) =
!                      To_Ada (Item (size_t (J) - 1 + Item'First)));
     pragma Ada_05 (To_Ada);
  
     procedure To_C
       (Item       : Wide_String;
        Target     : out char16_array;
        Count      : out size_t;
!       Append_Nul : Boolean := True)
!    with
!      Relaxed_Initialization => Target,
!      Pre  => Target'Length >=
!        (if Append_Nul then Item'Length + 1 else Item'Length),
!      Post => Count = (if Append_Nul then Item'Length + 1 else Item'Length)
!        and then
!          (if Count /= 0 then
!            Target (Target'First .. Target'First + (Count - 1))'Initialized)
!        and then
!          (for all J in Item'Range =>
!            Target (Target'First + size_t (J - Item'First)) = To_C (Item (J)))
!        and then
!          (if Append_Nul then Target (Target'First + (Count - 1)) = char16_nul);
     pragma Ada_05 (To_C);
  
     procedure To_Ada
       (Item     : char16_array;
        Target   : out Wide_String;
        Count    : out Natural;
!       Trim_Nul : Boolean := True)
!    with
!      Relaxed_Initialization => Target,
!      Pre  => (if Trim_Nul then
!                 Is_Nul_Terminated (Item)
!                   and then C_Length_Ghost (Item) <= size_t (Target'Length)
!               else
!                 Item'Last - Item'First < size_t (Target'Length)),
!      Post => Count =
!          (if Trim_Nul then Natural (C_Length_Ghost (Item)) else Item'Length)
!        and then
!          (if Count /= 0 then
!            Target (Target'First .. Target'First + (Count - 1))'Initialized)
!        and then
!          (for all J in Target'First .. Target'First + (Count - 1) =>
!            Target (J) =
!              To_Ada (Item (size_t (J - Target'First) + Item'First)));
     pragma Ada_05 (To_Ada);
  
     type char32_t is new Wide_Wide_Character;
*************** package Interfaces.C is
*** 193,232 ****
     char32_nul : constant char32_t := char32_t'Val (0);
     pragma Ada_05 (char32_nul);
  
!    function To_C (Item : Wide_Wide_Character) return char32_t;
     pragma Ada_05 (To_C);
  
!    function To_Ada (Item : char32_t) return Wide_Wide_Character;
     pragma Ada_05 (To_Ada);
  
     type char32_array is array (size_t range <>) of aliased char32_t;
     pragma Ada_05 (char32_array);
  
!    function Is_Nul_Terminated (Item : char32_array) return Boolean;
     pragma Ada_05 (Is_Nul_Terminated);
  
     function To_C
       (Item       : Wide_Wide_String;
!       Append_Nul : Boolean := True) return char32_array;
     pragma Ada_05 (To_C);
  
     function To_Ada
       (Item     : char32_array;
!       Trim_Nul : Boolean := True) return Wide_Wide_String;
     pragma Ada_05 (To_Ada);
  
     procedure To_C
       (Item       : Wide_Wide_String;
        Target     : out char32_array;
        Count      : out size_t;
!       Append_Nul : Boolean := True);
     pragma Ada_05 (To_C);
  
     procedure To_Ada
       (Item     : char32_array;
        Target   : out Wide_Wide_String;
        Count    : out Natural;
!       Trim_Nul : Boolean := True);
     pragma Ada_05 (To_Ada);
  
  end Interfaces.C;
--- 478,595 ----
     char32_nul : constant char32_t := char32_t'Val (0);
     pragma Ada_05 (char32_nul);
  
!    --  To_C and To_Ada provide mappings between the Ada and C 32-bit character
!    --  types.
! 
!    function To_C (Item : Wide_Wide_Character) return char32_t
!    with
!      Post => To_C'Result = char32_t (Item);
     pragma Ada_05 (To_C);
  
!    function To_Ada (Item : char32_t) return Wide_Wide_Character
!    with
!      Post => To_Ada'Result = Wide_Wide_Character (Item);
     pragma Ada_05 (To_Ada);
  
     type char32_array is array (size_t range <>) of aliased char32_t;
     pragma Ada_05 (char32_array);
  
!    function Is_Nul_Terminated (Item : char32_array) return Boolean
!    with
!      Post => Is_Nul_Terminated'Result = (for some C of Item => C = char32_nul);
     pragma Ada_05 (Is_Nul_Terminated);
+    --  The result of Is_Nul_Terminated is True if Item contains char32_nul, and
+    --  is False otherwise.
+ 
+    function C_Length_Ghost (Item : char32_array) return size_t
+    with
+      Ghost,
+      Pre  => Is_Nul_Terminated (Item),
+      Post => C_Length_Ghost'Result <= Item'Last - Item'First
+        and then Item (Item'First + C_Length_Ghost'Result) = char32_nul
+        and then (for all J in Item'First .. Item'First + C_Length_Ghost'Result
+                    when J /= Item'First + C_Length_Ghost'Result =>
+                      Item (J) /= char32_nul);
+    --  Ghost function to compute the length of a char32_array up to the first
+    --  char32_nul character.
+ 
+    --  The To_C and To_Ada subprograms that convert between Wide_Wide_String
+    --  and char32_array have analogous effects to the To_C and To_Ada
+    --  subprograms that convert between String and char_array, except
+    --  that char32_nul is used instead of nul.
  
     function To_C
       (Item       : Wide_Wide_String;
!       Append_Nul : Boolean := True) return char32_array
!    with
!      Pre  => not (Append_Nul = False and then Item'Length = 0),
!      Post => To_C'Result'First = 0
!        and then To_C'Result'Length =
!          (if Append_Nul then Item'Length + 1 else Item'Length)
!        and then (for all J in Item'Range =>
!                    To_C'Result (size_t (J - Item'First)) = To_C (Item (J)))
!        and then
!          (if Append_Nul then To_C'Result (To_C'Result'Last) = char32_nul);
     pragma Ada_05 (To_C);
  
     function To_Ada
       (Item     : char32_array;
!       Trim_Nul : Boolean := True) return Wide_Wide_String
!    with
!      Pre  => (if Trim_Nul then
!                 Is_Nul_Terminated (Item)
!                   and then C_Length_Ghost (Item) <= size_t (Natural'Last)
!               else
!                 Item'Last - Item'First < size_t (Natural'Last)),
!      Post => To_Ada'Result'First = 1
!        and then To_Ada'Result'Length =
!          (if Trim_Nul then C_Length_Ghost (Item) else Item'Length)
!        and then (for all J in To_Ada'Result'Range =>
!                    To_Ada'Result (J) =
!                      To_Ada (Item (size_t (J) - 1 + Item'First)));
     pragma Ada_05 (To_Ada);
  
     procedure To_C
       (Item       : Wide_Wide_String;
        Target     : out char32_array;
        Count      : out size_t;
!       Append_Nul : Boolean := True)
!    with
!      Relaxed_Initialization => Target,
!      Pre  => Target'Length >=
!        (if Append_Nul then Item'Length + 1 else Item'Length),
!      Post => Count = (if Append_Nul then Item'Length + 1 else Item'Length)
!        and then
!          (if Count /= 0 then
!            Target (Target'First .. Target'First + (Count - 1))'Initialized)
!        and then
!          (for all J in Item'Range =>
!            Target (Target'First + size_t (J - Item'First)) = To_C (Item (J)))
!        and then
!          (if Append_Nul then Target (Target'First + (Count - 1)) = char32_nul);
     pragma Ada_05 (To_C);
  
     procedure To_Ada
       (Item     : char32_array;
        Target   : out Wide_Wide_String;
        Count    : out Natural;
!       Trim_Nul : Boolean := True)
!    with
!      Relaxed_Initialization => Target,
!      Pre  => (if Trim_Nul then
!                 Is_Nul_Terminated (Item)
!                   and then C_Length_Ghost (Item) <= size_t (Target'Length)
!               else
!                 Item'Last - Item'First < size_t (Target'Length)),
!      Post => Count =
!          (if Trim_Nul then Natural (C_Length_Ghost (Item)) else Item'Length)
!        and then
!          (if Count /= 0 then
!            Target (Target'First .. Target'First + (Count - 1))'Initialized)
!        and then
!          (for all J in Target'First .. Target'First + (Count - 1) =>
!            Target (J) =
!              To_Ada (Item (size_t (J - Target'First) + Item'First)));
     pragma Ada_05 (To_Ada);
  
  end Interfaces.C;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-cexten.ads gcc-12.1.0/gcc/ada/libgnat/i-cexten.ads
*** gcc-11.3.0/gcc/ada/libgnat/i-cexten.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-cexten.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Interfaces.C.Extensions is
*** 56,63 ****
  
     --  C bool
  
!    type bool is new Boolean;
!    pragma Convention (C, bool);
  
     --  64-bit integer types
  
--- 56,62 ----
  
     --  C bool
  
!    subtype bool is Interfaces.C.C_bool;
  
     --  64-bit integer types
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-cexten__128.ads gcc-12.1.0/gcc/ada/libgnat/i-cexten__128.ads
*** gcc-11.3.0/gcc/ada/libgnat/i-cexten__128.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-cexten__128.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Interfaces.C.Extensions is
*** 56,63 ****
  
     --  C bool
  
!    type bool is new Boolean;
!    pragma Convention (C, bool);
  
     --  64-bit integer types
  
--- 56,62 ----
  
     --  C bool
  
!    subtype bool is Interfaces.C.C_bool;
  
     --  64-bit integer types
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-cobol.adb gcc-12.1.0/gcc/ada/libgnat/i-cobol.adb
*** gcc-11.3.0/gcc/ada/libgnat/i-cobol.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-cobol.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 34,41 ****
  --  particular COBOL format is completely contained in the private part of
  --  the spec.
  
! with Interfaces; use Interfaces;
! with System;     use System;
  with Ada.Unchecked_Conversion;
  
  package body Interfaces.COBOL is
--- 34,40 ----
  --  particular COBOL format is completely contained in the private part of
  --  the spec.
  
! with System; use System;
  with Ada.Unchecked_Conversion;
  
  package body Interfaces.COBOL is
*************** package body Interfaces.COBOL is
*** 692,698 ****
              --  For signed, accept all standard and non-standard signs
  
              else
!                return Item (Item'Last) in 16#A# .. 16#F#;
              end if;
        end case;
     end Valid_Packed;
--- 691,697 ----
              --  For signed, accept all standard and non-standard signs
  
              else
!                return Item (Item'Last) >= 16#A#;
              end if;
        end case;
     end Valid_Packed;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-cobol.ads gcc-12.1.0/gcc/ada/libgnat/i-cobol.ads
*** gcc-11.3.0/gcc/ada/libgnat/i-cobol.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-cobol.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                             (ASCII Version)                              --
  --                                                                          --
! --          Copyright (C) 1993-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                             (ASCII Version)                              --
  --                                                                          --
! --          Copyright (C) 1993-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package Interfaces.COBOL is
*** 61,67 ****
  
     type COBOL_Character is new Character;
  
!    Ada_To_COBOL : array (Standard.Character) of COBOL_Character := (
       COBOL_Character'Val (000), COBOL_Character'Val (001),
       COBOL_Character'Val (002), COBOL_Character'Val (003),
       COBOL_Character'Val (004), COBOL_Character'Val (005),
--- 61,67 ----
  
     type COBOL_Character is new Character;
  
!    Ada_To_COBOL : array (Standard.Character) of COBOL_Character := [
       COBOL_Character'Val (000), COBOL_Character'Val (001),
       COBOL_Character'Val (002), COBOL_Character'Val (003),
       COBOL_Character'Val (004), COBOL_Character'Val (005),
*************** package Interfaces.COBOL is
*** 189,197 ****
       COBOL_Character'Val (248), COBOL_Character'Val (249),
       COBOL_Character'Val (250), COBOL_Character'Val (251),
       COBOL_Character'Val (252), COBOL_Character'Val (253),
!      COBOL_Character'Val (254), COBOL_Character'Val (255));
  
!    COBOL_To_Ada : array (COBOL_Character) of Standard.Character := (
       Standard.Character'Val (000), Standard.Character'Val (001),
       Standard.Character'Val (002), Standard.Character'Val (003),
       Standard.Character'Val (004), Standard.Character'Val (005),
--- 189,197 ----
       COBOL_Character'Val (248), COBOL_Character'Val (249),
       COBOL_Character'Val (250), COBOL_Character'Val (251),
       COBOL_Character'Val (252), COBOL_Character'Val (253),
!      COBOL_Character'Val (254), COBOL_Character'Val (255)];
  
!    COBOL_To_Ada : array (COBOL_Character) of Standard.Character := [
       Standard.Character'Val (000), Standard.Character'Val (001),
       Standard.Character'Val (002), Standard.Character'Val (003),
       Standard.Character'Val (004), Standard.Character'Val (005),
*************** package Interfaces.COBOL is
*** 319,325 ****
       Standard.Character'Val (248), Standard.Character'Val (249),
       Standard.Character'Val (250), Standard.Character'Val (251),
       Standard.Character'Val (252), Standard.Character'Val (253),
!      Standard.Character'Val (254), Standard.Character'Val (255));
  
     type Alphanumeric is array (Positive range <>) of COBOL_Character;
     --  pragma Pack (Alphanumeric);
--- 319,325 ----
       Standard.Character'Val (248), Standard.Character'Val (249),
       Standard.Character'Val (250), Standard.Character'Val (251),
       Standard.Character'Val (252), Standard.Character'Val (253),
!      Standard.Character'Val (254), Standard.Character'Val (255)];
  
     type Alphanumeric is array (Positive range <>) of COBOL_Character;
     --  pragma Pack (Alphanumeric);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-cpoint.adb gcc-12.1.0/gcc/ada/libgnat/i-cpoint.adb
*** gcc-11.3.0/gcc/ada/libgnat/i-cpoint.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-cpoint.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-cpoint.ads gcc-12.1.0/gcc/ada/libgnat/i-cpoint.ads
*** gcc-11.3.0/gcc/ada/libgnat/i-cpoint.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-cpoint.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1993-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1993-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-cstrea.adb gcc-12.1.0/gcc/ada/libgnat/i-cstrea.adb
*** gcc-11.3.0/gcc/ada/libgnat/i-cstrea.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-cstrea.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-cstrea.ads gcc-12.1.0/gcc/ada/libgnat/i-cstrea.ads
*** gcc-11.3.0/gcc/ada/libgnat/i-cstrea.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-cstrea.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-cstrin.adb gcc-12.1.0/gcc/ada/libgnat/i-cstrin.adb
*** gcc-11.3.0/gcc/ada/libgnat/i-cstrin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-cstrin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-cstrin.ads gcc-12.1.0/gcc/ada/libgnat/i-cstrin.ads
*** gcc-11.3.0/gcc/ada/libgnat/i-cstrin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-cstrin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1993-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1993-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-fortra.adb gcc-12.1.0/gcc/ada/libgnat/i-fortra.adb
*** gcc-11.3.0/gcc/ada/libgnat/i-fortra.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-fortra.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-pacdec.adb gcc-12.1.0/gcc/ada/libgnat/i-pacdec.adb
*** gcc-11.3.0/gcc/ada/libgnat/i-pacdec.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-pacdec.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --            (Version for IBM Mainframe Packed Decimal Format)             --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --            (Version for IBM Mainframe Packed Decimal Format)             --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Interfaces.Packed_Decimal i
*** 48,54 ****
     --  using table look up in this direction because divides are expensive.
  
     Packed_Byte : constant array (00 .. 99) of Unsigned_8 :=
!       (16#00#, 16#01#, 16#02#, 16#03#, 16#04#,
         16#05#, 16#06#, 16#07#, 16#08#, 16#09#,
         16#10#, 16#11#, 16#12#, 16#13#, 16#14#,
         16#15#, 16#16#, 16#17#, 16#18#, 16#19#,
--- 48,54 ----
     --  using table look up in this direction because divides are expensive.
  
     Packed_Byte : constant array (00 .. 99) of Unsigned_8 :=
!       [16#00#, 16#01#, 16#02#, 16#03#, 16#04#,
         16#05#, 16#06#, 16#07#, 16#08#, 16#09#,
         16#10#, 16#11#, 16#12#, 16#13#, 16#14#,
         16#15#, 16#16#, 16#17#, 16#18#, 16#19#,
*************** package body Interfaces.Packed_Decimal i
*** 67,73 ****
         16#80#, 16#81#, 16#82#, 16#83#, 16#84#,
         16#85#, 16#86#, 16#87#, 16#88#, 16#89#,
         16#90#, 16#91#, 16#92#, 16#93#, 16#94#,
!        16#95#, 16#96#, 16#97#, 16#98#, 16#99#);
  
     ---------------------
     -- Int32_To_Packed --
--- 67,73 ----
         16#80#, 16#81#, 16#82#, 16#83#, 16#84#,
         16#85#, 16#86#, 16#87#, 16#88#, 16#89#,
         16#90#, 16#91#, 16#92#, 16#93#, 16#94#,
!        16#95#, 16#96#, 16#97#, 16#98#, 16#99#];
  
     ---------------------
     -- Int32_To_Packed --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-pacdec.ads gcc-12.1.0/gcc/ada/libgnat/i-pacdec.ads
*** gcc-11.3.0/gcc/ada/libgnat/i-pacdec.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-pacdec.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --            (Version for IBM Mainframe Packed Decimal Format)             --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --            (Version for IBM Mainframe Packed Decimal Format)             --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Interfaces.Packed_Decimal is
*** 91,97 ****
     --  Range of possible byte lengths
  
     Packed_Size : constant array (1 .. 18) of Byte_Length :=
!       (01 => 01,    -- Length in bytes for digits 1
         02 => 02,    -- Length in bytes for digits 2
         03 => 02,    -- Length in bytes for digits 2
         04 => 03,    -- Length in bytes for digits 2
--- 91,97 ----
     --  Range of possible byte lengths
  
     Packed_Size : constant array (1 .. 18) of Byte_Length :=
!       [01 => 01,    -- Length in bytes for digits 1
         02 => 02,    -- Length in bytes for digits 2
         03 => 02,    -- Length in bytes for digits 2
         04 => 03,    -- Length in bytes for digits 2
*************** package Interfaces.Packed_Decimal is
*** 108,114 ****
         15 => 08,    -- Length in bytes for digits 2
         16 => 09,    -- Length in bytes for digits 2
         17 => 09,    -- Length in bytes for digits 2
!        18 => 10);   -- Length in bytes for digits 2
  
     -------------------------
     -- Conversion Routines --
--- 108,114 ----
         15 => 08,    -- Length in bytes for digits 2
         16 => 09,    -- Length in bytes for digits 2
         17 => 09,    -- Length in bytes for digits 2
!        18 => 10];   -- Length in bytes for digits 2
  
     -------------------------
     -- Conversion Routines --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-vxwoio.adb gcc-12.1.0/gcc/ada/libgnat/i-vxwoio.adb
*** gcc-11.3.0/gcc/ada/libgnat/i-vxwoio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-vxwoio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --           Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --           Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-vxwoio.ads gcc-12.1.0/gcc/ada/libgnat/i-vxwoio.ads
*** gcc-11.3.0/gcc/ada/libgnat/i-vxwoio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-vxwoio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-vxwork.ads gcc-12.1.0/gcc/ada/libgnat/i-vxwork.ads
*** gcc-11.3.0/gcc/ada/libgnat/i-vxwork.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-vxwork.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package Interfaces.VxWorks is
*** 133,138 ****
--- 133,141 ----
     OK    : constant STATUS := 0;
     ERROR : constant STATUS := -1;
  
+    type BOOL is new int;
+    --  Equivalent of the C type BOOL
+ 
     type VOIDFUNCPTR is access procedure (parameter : System.Address);
     type Interrupt_Vector is new System.Address;
     type Exception_Vector is new System.Address;
*************** package Interfaces.VxWorks is
*** 145,153 ****
     --  The routine generates a wrapper around the user handler to save and
     --  restore context
  
!    function intContext return int;
!    --  Binding to the C routine intContext. This function returns 1 only if the
!    --  current execution state is in interrupt context.
  
     function intVecGet
       (Vector : Interrupt_Vector) return VOIDFUNCPTR;
--- 148,156 ----
     --  The routine generates a wrapper around the user handler to save and
     --  restore context
  
!    function intContext return BOOL;
!    --  Binding to the C routine intContext. This function returns 1 (TRUE)
!    --  only if the current execution state is in interrupt context.
  
     function intVecGet
       (Vector : Interrupt_Vector) return VOIDFUNCPTR;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/i-vxwork__x86.ads gcc-12.1.0/gcc/ada/libgnat/i-vxwork__x86.ads
*** gcc-11.3.0/gcc/ada/libgnat/i-vxwork__x86.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/i-vxwork__x86.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                   S p e c                                --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package Interfaces.VxWorks is
*** 128,133 ****
--- 128,136 ----
     OK    : constant STATUS := 0;
     ERROR : constant STATUS := -1;
  
+    type BOOL is new int;
+    --  Equivalent of the C type BOOL
+ 
     type VOIDFUNCPTR is access procedure (parameter : System.Address);
     type Interrupt_Vector is new System.Address;
     type Exception_Vector is new System.Address;
*************** package Interfaces.VxWorks is
*** 140,148 ****
     --  The routine generates a wrapper around the user handler to save and
     --  restore context
  
!    function intContext return int;
!    --  Binding to the C routine intContext. This function returns 1 only if the
!    --  current execution state is in interrupt context.
  
     function intVecGet
       (Vector : Interrupt_Vector) return VOIDFUNCPTR;
--- 143,151 ----
     --  The routine generates a wrapper around the user handler to save and
     --  restore context
  
!    function intContext return BOOL;
!    --  Binding to the C routine intContext. This function returns 1 (TRUE)
!    --  only if the current execution state is in interrupt context.
  
     function intVecGet
       (Vector : Interrupt_Vector) return VOIDFUNCPTR;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/interfac.ads gcc-12.1.0/gcc/ada/libgnat/interfac.ads
*** gcc-11.3.0/gcc/ada/libgnat/interfac.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/interfac.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
***************
*** 35,42 ****
  
  --  This is the compiler version of this unit
  
- pragma Compiler_Unit_Warning;
- 
  package Interfaces is
     pragma No_Elaboration_Code_All;
     pragma Pure;
--- 35,40 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/interfac__2020.ads gcc-12.1.0/gcc/ada/libgnat/interfac__2020.ads
*** gcc-11.3.0/gcc/ada/libgnat/interfac__2020.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/interfac__2020.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/memtrack.adb gcc-12.1.0/gcc/ada/libgnat/memtrack.adb
*** gcc-11.3.0/gcc/ada/libgnat/memtrack.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/memtrack.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
***************
*** 69,78 ****
  pragma Source_File_Name (System.Memory, Body_File_Name => "memtrack.adb");
  
  with Ada.Exceptions;
  with System.Soft_Links;
  with System.Traceback;
  with System.Traceback_Entries;
! with GNAT.IO;
  with System.OS_Primitives;
  
  package body System.Memory is
--- 69,81 ----
  pragma Source_File_Name (System.Memory, Body_File_Name => "memtrack.adb");
  
  with Ada.Exceptions;
+ with GNAT.IO;
+ 
  with System.Soft_Links;
  with System.Traceback;
  with System.Traceback_Entries;
! with System.CRTL;
! with System.OS_Lib;
  with System.OS_Primitives;
  
  package body System.Memory is
*************** package body System.Memory is
*** 93,122 ****
       (Ptr : System.Address; Size : size_t) return System.Address;
     pragma Import (C, c_realloc, "realloc");
  
-    subtype File_Ptr is System.Address;
- 
-    function fopen (Path : String; Mode : String) return File_Ptr;
-    pragma Import (C, fopen);
- 
-    procedure OS_Exit (Status : Integer);
-    pragma Import (C, OS_Exit, "__gnat_os_exit");
-    pragma No_Return (OS_Exit);
- 
     In_Child_After_Fork : Integer;
     pragma Import (C, In_Child_After_Fork, "__gnat_in_child_after_fork");
  
!    procedure fwrite
!      (Ptr    : System.Address;
!       Size   : size_t;
!       Nmemb  : size_t;
!       Stream : File_Ptr);
!    pragma Import (C, fwrite);
  
!    procedure fputc (C : Integer; Stream : File_Ptr);
!    pragma Import (C, fputc);
  
!    procedure fclose (Stream : File_Ptr);
!    pragma Import (C, fclose);
  
     procedure Finalize;
     pragma Export (C, Finalize, "__gnat_finalize");
--- 96,109 ----
       (Ptr : System.Address; Size : size_t) return System.Address;
     pragma Import (C, c_realloc, "realloc");
  
     In_Child_After_Fork : Integer;
     pragma Import (C, In_Child_After_Fork, "__gnat_in_child_after_fork");
  
!    subtype File_Ptr is CRTL.FILEs;
  
!    procedure Write (Ptr : System.Address; Size : size_t);
  
!    procedure Putc (Char : Character);
  
     procedure Finalize;
     pragma Export (C, Finalize, "__gnat_finalize");
*************** package body System.Memory is
*** 210,229 ****
           Timestamp := System.OS_Primitives.Clock;
           Call_Chain
             (Tracebk, Max_Call_Stack, Num_Calls, Skip_Frames => 2);
!          fputc (Character'Pos ('A'), Gmemfile);
!          fwrite (Result'Address, Address_Size, 1, Gmemfile);
!          fwrite (Actual_Size'Address, size_t'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
!          fwrite (Timestamp'Address, Duration'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
!          fwrite (Num_Calls'Address, Integer'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
  
           for J in Tracebk'First .. Tracebk'First + Num_Calls - 1 loop
              declare
                 Ptr : System.Address := PC_For (Tracebk (J));
              begin
!                fwrite (Ptr'Address, Address_Size, 1, Gmemfile);
              end;
           end loop;
  
--- 197,213 ----
           Timestamp := System.OS_Primitives.Clock;
           Call_Chain
             (Tracebk, Max_Call_Stack, Num_Calls, Skip_Frames => 2);
!          Putc ('A');
!          Write (Result'Address, Address_Size);
!          Write (Actual_Size'Address, size_t'Max_Size_In_Storage_Elements);
!          Write (Timestamp'Address, Duration'Max_Size_In_Storage_Elements);
!          Write (Num_Calls'Address, Integer'Max_Size_In_Storage_Elements);
  
           for J in Tracebk'First .. Tracebk'First + Num_Calls - 1 loop
              declare
                 Ptr : System.Address := PC_For (Tracebk (J));
              begin
!                Write (Ptr'Address, Address_Size);
              end;
           end loop;
  
*************** package body System.Memory is
*** 246,253 ****
  
     procedure Finalize is
     begin
!       if not Needs_Init then
!          fclose (Gmemfile);
        end if;
     end Finalize;
  
--- 230,237 ----
  
     procedure Finalize is
     begin
!       if not Needs_Init and then CRTL.fclose (Gmemfile) /= 0 then
!          Put_Line ("gmem close error: " & OS_Lib.Errno_Message);
        end if;
     end Finalize;
  
*************** package body System.Memory is
*** 275,292 ****
           Call_Chain
             (Tracebk, Max_Call_Stack, Num_Calls, Skip_Frames => 2);
           Timestamp := System.OS_Primitives.Clock;
!          fputc (Character'Pos ('D'), Gmemfile);
!          fwrite (Addr'Address, Address_Size, 1, Gmemfile);
!          fwrite (Timestamp'Address, Duration'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
!          fwrite (Num_Calls'Address, Integer'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
  
           for J in Tracebk'First .. Tracebk'First + Num_Calls - 1 loop
              declare
                 Ptr : System.Address := PC_For (Tracebk (J));
              begin
!                fwrite (Ptr'Address, Address_Size, 1, Gmemfile);
              end;
           end loop;
  
--- 259,274 ----
           Call_Chain
             (Tracebk, Max_Call_Stack, Num_Calls, Skip_Frames => 2);
           Timestamp := System.OS_Primitives.Clock;
!          Putc ('D');
!          Write (Addr'Address, Address_Size);
!          Write (Timestamp'Address, Duration'Max_Size_In_Storage_Elements);
!          Write (Num_Calls'Address, Integer'Max_Size_In_Storage_Elements);
  
           for J in Tracebk'First .. Tracebk'First + Num_Calls - 1 loop
              declare
                 Ptr : System.Address := PC_For (Tracebk (J));
              begin
!                Write (Ptr'Address, Address_Size);
              end;
           end loop;
  
*************** package body System.Memory is
*** 304,332 ****
  
     procedure Gmem_Initialize is
        Timestamp : aliased Duration;
! 
     begin
        if Needs_Init then
           Needs_Init := False;
           System.OS_Primitives.Initialize;
           Timestamp := System.OS_Primitives.Clock;
!          Gmemfile := fopen (Gmemfname, "wb" & ASCII.NUL);
  
           if Gmemfile = System.Null_Address then
              Put_Line ("Couldn't open gnatmem log file for writing");
!             OS_Exit (255);
           end if;
  
           declare
              S : constant String := "GMEM DUMP" & ASCII.LF;
           begin
!             fwrite (S'Address, S'Length, 1, Gmemfile);
!             fwrite (Timestamp'Address, Duration'Max_Size_In_Storage_Elements,
!                     1, Gmemfile);
           end;
        end if;
     end Gmem_Initialize;
  
     -------------
     -- Realloc --
     -------------
--- 286,326 ----
  
     procedure Gmem_Initialize is
        Timestamp : aliased Duration;
!       File_Mode : constant String := "wb" & ASCII.NUL;
     begin
        if Needs_Init then
           Needs_Init := False;
           System.OS_Primitives.Initialize;
           Timestamp := System.OS_Primitives.Clock;
!          Gmemfile := CRTL.fopen (Gmemfname'Address, File_Mode'Address);
  
           if Gmemfile = System.Null_Address then
              Put_Line ("Couldn't open gnatmem log file for writing");
!             OS_Lib.OS_Exit (255);
           end if;
  
           declare
              S : constant String := "GMEM DUMP" & ASCII.LF;
           begin
!             Write (S'Address, S'Length);
!             Write (Timestamp'Address, Duration'Max_Size_In_Storage_Elements);
           end;
        end if;
     end Gmem_Initialize;
  
+    ----------
+    -- Putc --
+    ----------
+ 
+    procedure Putc (Char : Character) is
+       C : constant Integer := Character'Pos (Char);
+ 
+    begin
+       if CRTL.fputc (C, Gmemfile) /= C then
+          Put_Line ("gmem fputc error: " & OS_Lib.Errno_Message);
+       end if;
+    end Putc;
+ 
     -------------
     -- Realloc --
     -------------
*************** package body System.Memory is
*** 360,377 ****
           Call_Chain
             (Tracebk, Max_Call_Stack, Num_Calls, Skip_Frames => 2);
           Timestamp := System.OS_Primitives.Clock;
!          fputc (Character'Pos ('D'), Gmemfile);
!          fwrite (Addr'Address, Address_Size, 1, Gmemfile);
!          fwrite (Timestamp'Address, Duration'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
!          fwrite (Num_Calls'Address, Integer'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
  
           for J in Tracebk'First .. Tracebk'First + Num_Calls - 1 loop
              declare
                 Ptr : System.Address := PC_For (Tracebk (J));
              begin
!                fwrite (Ptr'Address, Address_Size, 1, Gmemfile);
              end;
           end loop;
  
--- 354,369 ----
           Call_Chain
             (Tracebk, Max_Call_Stack, Num_Calls, Skip_Frames => 2);
           Timestamp := System.OS_Primitives.Clock;
!          Putc ('D');
!          Write (Addr'Address, Address_Size);
!          Write (Timestamp'Address, Duration'Max_Size_In_Storage_Elements);
!          Write (Num_Calls'Address, Integer'Max_Size_In_Storage_Elements);
  
           for J in Tracebk'First .. Tracebk'First + Num_Calls - 1 loop
              declare
                 Ptr : System.Address := PC_For (Tracebk (J));
              begin
!                Write (Ptr'Address, Address_Size);
              end;
           end loop;
  
*************** package body System.Memory is
*** 381,400 ****
  
           --   Log allocation call using the same backtrace
  
!          fputc (Character'Pos ('A'), Gmemfile);
!          fwrite (Result'Address, Address_Size, 1, Gmemfile);
!          fwrite (Size'Address, size_t'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
!          fwrite (Timestamp'Address, Duration'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
!          fwrite (Num_Calls'Address, Integer'Max_Size_In_Storage_Elements, 1,
!                  Gmemfile);
  
           for J in Tracebk'First .. Tracebk'First + Num_Calls - 1 loop
              declare
                 Ptr : System.Address := PC_For (Tracebk (J));
              begin
!                fwrite (Ptr'Address, Address_Size, 1, Gmemfile);
              end;
           end loop;
  
--- 373,389 ----
  
           --   Log allocation call using the same backtrace
  
!          Putc ('A');
!          Write (Result'Address, Address_Size);
!          Write (Size'Address, size_t'Max_Size_In_Storage_Elements);
!          Write (Timestamp'Address, Duration'Max_Size_In_Storage_Elements);
!          Write (Num_Calls'Address, Integer'Max_Size_In_Storage_Elements);
  
           for J in Tracebk'First .. Tracebk'First + Num_Calls - 1 loop
              declare
                 Ptr : System.Address := PC_For (Tracebk (J));
              begin
!                Write (Ptr'Address, Address_Size);
              end;
           end loop;
  
*************** package body System.Memory is
*** 411,414 ****
--- 400,421 ----
        return Result;
     end Realloc;
  
+    -----------
+    -- Write --
+    -----------
+ 
+    procedure Write (Ptr : System.Address; Size : size_t) is
+       function fwrite
+         (buffer : System.Address;
+          size   : size_t;
+          count  : size_t;
+          stream : File_Ptr) return size_t;
+       pragma Import (C, fwrite);
+ 
+    begin
+       if fwrite (Ptr, Size, 1, Gmemfile) /= 1 then
+          Put_Line ("gmem fwrite error: " & OS_Lib.Errno_Message);
+       end if;
+    end Write;
+ 
  end System.Memory;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-addima.adb gcc-12.1.0/gcc/ada/libgnat/s-addima.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-addima.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-addima.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-addima.ads gcc-12.1.0/gcc/ada/libgnat/s-addima.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-addima.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-addima.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-addope.adb gcc-12.1.0/gcc/ada/libgnat/s-addope.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-addope.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-addope.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Unchecked_Conversion;
  
  package body System.Address_Operations is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-addope.ads gcc-12.1.0/gcc/ada/libgnat/s-addope.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-addope.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-addope.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
***************
*** 40,47 ****
  --  inappropriate use by applications programs). In addition, the logical
  --  operations may not be available if type Address is a signed integer.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Address_Operations is
     pragma Pure;
  
--- 40,45 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-aoinar.adb gcc-12.1.0/gcc/ada/libgnat/s-aoinar.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-aoinar.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-aoinar.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2022, 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- --
*************** package body System.Atomic_Operations.In
*** 72,93 ****
        Value : Atomic_Type) return Atomic_Type
     is
        pragma Warnings (Off);
!       function Atomic_Fetch_Add_1
!         (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
!         return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Add_1, "__atomic_fetch_add_1");
!       function Atomic_Fetch_Add_2
!         (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
!         return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Add_2, "__atomic_fetch_add_2");
!       function Atomic_Fetch_Add_4
!         (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
!         return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Add_4, "__atomic_fetch_add_4");
!       function Atomic_Fetch_Add_8
          (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
          return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Add_8, "__atomic_fetch_add_8");
        pragma Warnings (On);
  
     begin
--- 72,81 ----
        Value : Atomic_Type) return Atomic_Type
     is
        pragma Warnings (Off);
!       function Atomic_Fetch_Add
          (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
          return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Add, "__atomic_fetch_add");
        pragma Warnings (On);
  
     begin
*************** package body System.Atomic_Operations.In
*** 96,116 ****
  
        if Atomic_Type'Base'Last = Atomic_Type'Last
          and then Atomic_Type'Base'First = Atomic_Type'First
!         and then Atomic_Type'Last
!                   in 2 ** 7 - 1 | 2 ** 15 - 1 | 2 ** 31 - 1 | 2 ** 63 - 1
        then
!          case Long_Long_Integer (Atomic_Type'Last) is
!             when 2 ** 7 - 1  =>
!                return Atomic_Fetch_Add_1 (Item'Address, Value);
!             when 2 ** 15 - 1 =>
!                return Atomic_Fetch_Add_2 (Item'Address, Value);
!             when 2 ** 31 - 1 =>
!                return Atomic_Fetch_Add_4 (Item'Address, Value);
!             when 2 ** 63 - 1 =>
!                return Atomic_Fetch_Add_8 (Item'Address, Value);
!             when others      =>
!                raise Program_Error;
!          end case;
        else
           declare
              Old_Value : aliased Atomic_Type := Item;
--- 84,97 ----
  
        if Atomic_Type'Base'Last = Atomic_Type'Last
          and then Atomic_Type'Base'First = Atomic_Type'First
!         and then Atomic_Type'Last = 2**(Atomic_Type'Object_Size - 1) - 1
        then
!          if Atomic_Type'Object_Size in 8 | 16 | 32 | 64 then
!             return Atomic_Fetch_Add (Item'Address, Value);
!          else
!             raise Program_Error;
!          end if;
! 
        else
           declare
              Old_Value : aliased Atomic_Type := Item;
*************** package body System.Atomic_Operations.In
*** 138,159 ****
        Value : Atomic_Type) return Atomic_Type
     is
        pragma Warnings (Off);
!       function Atomic_Fetch_Sub_1
!         (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
!         return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Sub_1, "__atomic_fetch_sub_1");
!       function Atomic_Fetch_Sub_2
!         (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
!         return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Sub_2, "__atomic_fetch_sub_2");
!       function Atomic_Fetch_Sub_4
!         (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
!         return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Sub_4, "__atomic_fetch_sub_4");
!       function Atomic_Fetch_Sub_8
          (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
          return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Sub_8, "__atomic_fetch_sub_8");
        pragma Warnings (On);
  
     begin
--- 119,128 ----
        Value : Atomic_Type) return Atomic_Type
     is
        pragma Warnings (Off);
!       function Atomic_Fetch_Sub
          (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
          return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Sub, "__atomic_fetch_sub");
        pragma Warnings (On);
  
     begin
*************** package body System.Atomic_Operations.In
*** 162,182 ****
  
        if Atomic_Type'Base'Last = Atomic_Type'Last
          and then Atomic_Type'Base'First = Atomic_Type'First
!         and then Atomic_Type'Last
!                   in 2 ** 7 - 1 | 2 ** 15 - 1 | 2 ** 31 - 1 | 2 ** 63 - 1
        then
!          case Long_Long_Integer (Atomic_Type'Last) is
!             when 2 ** 7 - 1  =>
!                return Atomic_Fetch_Sub_1 (Item'Address, Value);
!             when 2 ** 15 - 1 =>
!                return Atomic_Fetch_Sub_2 (Item'Address, Value);
!             when 2 ** 31 - 1 =>
!                return Atomic_Fetch_Sub_4 (Item'Address, Value);
!             when 2 ** 63 - 1 =>
!                return Atomic_Fetch_Sub_8 (Item'Address, Value);
!             when others      =>
!                raise Program_Error;
!          end case;
        else
           declare
              Old_Value : aliased Atomic_Type := Item;
--- 131,144 ----
  
        if Atomic_Type'Base'Last = Atomic_Type'Last
          and then Atomic_Type'Base'First = Atomic_Type'First
!         and then Atomic_Type'Last = 2**(Atomic_Type'Object_Size - 1) - 1
        then
!          if Atomic_Type'Object_Size in 8 | 16 | 32 | 64 then
!             return Atomic_Fetch_Sub (Item'Address, Value);
!          else
!             raise Program_Error;
!          end if;
! 
        else
           declare
              Old_Value : aliased Atomic_Type := Item;
*************** package body System.Atomic_Operations.In
*** 203,209 ****
        pragma Unreferenced (Item);
        use type Interfaces.C.size_t;
     begin
!       return Boolean (Atomic_Always_Lock_Free (Atomic_Type'Object_Size / 8));
     end Is_Lock_Free;
  
  end System.Atomic_Operations.Integer_Arithmetic;
--- 165,171 ----
        pragma Unreferenced (Item);
        use type Interfaces.C.size_t;
     begin
!       return Atomic_Always_Lock_Free (Atomic_Type'Object_Size / 8);
     end Is_Lock_Free;
  
  end System.Atomic_Operations.Integer_Arithmetic;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-aoinar.ads gcc-12.1.0/gcc/ada/libgnat/s-aoinar.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-aoinar.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-aoinar.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2020, Free Software Foundation, Inc.  --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2022, Free Software Foundation, Inc.  --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-aomoar.adb gcc-12.1.0/gcc/ada/libgnat/s-aomoar.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-aomoar.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-aomoar.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2022, 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- --
*************** package body System.Atomic_Operations.Mo
*** 72,119 ****
        Value : Atomic_Type) return Atomic_Type
     is
        pragma Warnings (Off);
!       function Atomic_Fetch_Add_1
!         (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
!         return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Add_1, "__atomic_fetch_add_1");
!       function Atomic_Fetch_Add_2
!         (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
!         return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Add_2, "__atomic_fetch_add_2");
!       function Atomic_Fetch_Add_4
!         (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
!         return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Add_4, "__atomic_fetch_add_4");
!       function Atomic_Fetch_Add_8
          (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
          return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Add_8, "__atomic_fetch_add_8");
        pragma Warnings (On);
  
     begin
        --  Use the direct intrinsics when possible, and fallback to
        --  compare-and-exchange otherwise.
-       --  Also suppress spurious warnings.
  
-       pragma Warnings (Off);
        if Atomic_Type'Base'Last = Atomic_Type'Last
          and then Atomic_Type'First = 0
!         and then Atomic_Type'Last
!                   in 2 ** 8 - 1 | 2 ** 16 - 1 | 2 ** 32 - 1 | 2 ** 64 - 1
        then
!          pragma Warnings (On);
!          case Unsigned_64 (Atomic_Type'Last) is
!             when 2 ** 8 - 1  =>
!                return Atomic_Fetch_Add_1 (Item'Address, Value);
!             when 2 ** 16 - 1 =>
!                return Atomic_Fetch_Add_2 (Item'Address, Value);
!             when 2 ** 32 - 1 =>
!                return Atomic_Fetch_Add_4 (Item'Address, Value);
!             when 2 ** 64 - 1 =>
!                return Atomic_Fetch_Add_8 (Item'Address, Value);
!             when others      =>
!                raise Program_Error;
!          end case;
        else
           declare
              Old_Value : aliased Atomic_Type := Item;
--- 72,97 ----
        Value : Atomic_Type) return Atomic_Type
     is
        pragma Warnings (Off);
!       function Atomic_Fetch_Add
          (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
          return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Add, "__atomic_fetch_add");
        pragma Warnings (On);
  
     begin
        --  Use the direct intrinsics when possible, and fallback to
        --  compare-and-exchange otherwise.
  
        if Atomic_Type'Base'Last = Atomic_Type'Last
          and then Atomic_Type'First = 0
!         and then Atomic_Type'Last = 2**Atomic_Type'Object_Size - 1
        then
!          if Atomic_Type'Object_Size in 8 | 16 | 32 | 64 then
!             return Atomic_Fetch_Add (Item'Address, Value);
!          else
!             raise Program_Error;
!          end if;
! 
        else
           declare
              Old_Value : aliased Atomic_Type := Item;
*************** package body System.Atomic_Operations.Mo
*** 141,188 ****
        Value : Atomic_Type) return Atomic_Type
     is
        pragma Warnings (Off);
!       function Atomic_Fetch_Sub_1
!         (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
!         return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Sub_1, "__atomic_fetch_sub_1");
!       function Atomic_Fetch_Sub_2
!         (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
!         return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Sub_2, "__atomic_fetch_sub_2");
!       function Atomic_Fetch_Sub_4
!         (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
!         return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Sub_4, "__atomic_fetch_sub_4");
!       function Atomic_Fetch_Sub_8
          (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
          return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Sub_8, "__atomic_fetch_sub_8");
        pragma Warnings (On);
  
     begin
        --  Use the direct intrinsics when possible, and fallback to
        --  compare-and-exchange otherwise.
-       --  Also suppress spurious warnings.
  
-       pragma Warnings (Off);
        if Atomic_Type'Base'Last = Atomic_Type'Last
          and then Atomic_Type'First = 0
!         and then Atomic_Type'Last
!                   in 2 ** 8 - 1 | 2 ** 16 - 1 | 2 ** 32 - 1 | 2 ** 64 - 1
        then
!          pragma Warnings (On);
!          case Unsigned_64 (Atomic_Type'Last) is
!             when 2 ** 8 - 1  =>
!                return Atomic_Fetch_Sub_1 (Item'Address, Value);
!             when 2 ** 16 - 1 =>
!                return Atomic_Fetch_Sub_2 (Item'Address, Value);
!             when 2 ** 32 - 1 =>
!                return Atomic_Fetch_Sub_4 (Item'Address, Value);
!             when 2 ** 64 - 1 =>
!                return Atomic_Fetch_Sub_8 (Item'Address, Value);
!             when others      =>
!                raise Program_Error;
!          end case;
        else
           declare
              Old_Value : aliased Atomic_Type := Item;
--- 119,144 ----
        Value : Atomic_Type) return Atomic_Type
     is
        pragma Warnings (Off);
!       function Atomic_Fetch_Sub
          (Ptr : System.Address; Val : Atomic_Type; Model : Mem_Model := Seq_Cst)
          return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Fetch_Sub, "__atomic_fetch_sub");
        pragma Warnings (On);
  
     begin
        --  Use the direct intrinsics when possible, and fallback to
        --  compare-and-exchange otherwise.
  
        if Atomic_Type'Base'Last = Atomic_Type'Last
          and then Atomic_Type'First = 0
!         and then Atomic_Type'Last = 2**Atomic_Type'Object_Size - 1
        then
!          if Atomic_Type'Object_Size in 8 | 16 | 32 | 64 then
!             return Atomic_Fetch_Sub (Item'Address, Value);
!          else
!             raise Program_Error;
!          end if;
! 
        else
           declare
              Old_Value : aliased Atomic_Type := Item;
*************** package body System.Atomic_Operations.Mo
*** 209,215 ****
        pragma Unreferenced (Item);
        use type Interfaces.C.size_t;
     begin
!       return Boolean (Atomic_Always_Lock_Free (Atomic_Type'Object_Size / 8));
     end Is_Lock_Free;
  
  end System.Atomic_Operations.Modular_Arithmetic;
--- 165,171 ----
        pragma Unreferenced (Item);
        use type Interfaces.C.size_t;
     begin
!       return Atomic_Always_Lock_Free (Atomic_Type'Object_Size / 8);
     end Is_Lock_Free;
  
  end System.Atomic_Operations.Modular_Arithmetic;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-aomoar.ads gcc-12.1.0/gcc/ada/libgnat/s-aomoar.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-aomoar.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-aomoar.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2020, Free Software Foundation, Inc.  --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2022, Free Software Foundation, Inc.  --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-aotase.adb gcc-12.1.0/gcc/ada/libgnat/s-aotase.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-aotase.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-aotase.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2022, 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- --
*************** package body System.Atomic_Operations.Te
*** 40,46 ****
     function Atomic_Test_And_Set
       (Item : aliased in out Test_And_Set_Flag) return Boolean is
     begin
!       return Boolean (Atomic_Test_And_Set (Item'Address));
     end Atomic_Test_And_Set;
  
     ------------------
--- 40,46 ----
     function Atomic_Test_And_Set
       (Item : aliased in out Test_And_Set_Flag) return Boolean is
     begin
!       return Atomic_Test_And_Set (Item'Address);
     end Atomic_Test_And_Set;
  
     ------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-aotase.ads gcc-12.1.0/gcc/ada/libgnat/s-aotase.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-aotase.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-aotase.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2020, Free Software Foundation, Inc.  --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2022, Free Software Foundation, Inc.  --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-aridou.adb gcc-12.1.0/gcc/ada/libgnat/s-aridou.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-aridou.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-aridou.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,37 ****
  
  with Ada.Unchecked_Conversion;
  
! package body System.Arith_Double is
  
     pragma Suppress (Overflow_Check);
     pragma Suppress (Range_Check);
--- 31,50 ----
  
  with Ada.Unchecked_Conversion;
  
! package body System.Arith_Double
!   with SPARK_Mode
! is
!    --  Contracts, ghost code, loop invariants and assertions in this unit are
!    --  meant for analysis only, not for run-time checking, as it would be too
!    --  costly otherwise. This is enforced by setting the assertion policy to
!    --  Ignore.
! 
!    pragma Assertion_Policy (Pre            => Ignore,
!                             Post           => Ignore,
!                             Contract_Cases => Ignore,
!                             Ghost          => Ignore,
!                             Loop_Invariant => Ignore,
!                             Assert         => Ignore);
  
     pragma Suppress (Overflow_Check);
     pragma Suppress (Range_Check);
*************** package body System.Arith_Double is
*** 42,47 ****
--- 55,93 ----
     Double_Size : constant Natural := Double_Int'Size;
     Single_Size : constant Natural := Double_Int'Size / 2;
  
+    --  Log of Single_Size in base 2, so that Single_Size = 2 ** Log_Single_Size
+    Log_Single_Size : constant Natural :=
+      (case Single_Size is
+         when 32  => 5,
+         when 64  => 6,
+         when 128 => 7,
+         when others => raise Program_Error)
+    with Ghost;
+ 
+    --  Power-of-two constants
+ 
+    pragma Warnings
+      (Off, "non-preelaborable call not allowed in preelaborated unit",
+       Reason => "Ghost code is not compiled");
+    pragma Warnings
+      (Off, "non-static constant in preelaborated unit",
+       Reason => "Ghost code is not compiled");
+    Big_0 : constant Big_Integer :=
+      Big (Double_Uns'(0))
+    with Ghost;
+    Big_2xxSingle : constant Big_Integer :=
+      Big (Double_Int'(2 ** Single_Size))
+    with Ghost;
+    Big_2xxDouble_Minus_1 : constant Big_Integer :=
+      Big (Double_Uns'(2 ** (Double_Size - 1)))
+    with Ghost;
+    Big_2xxDouble : constant Big_Integer :=
+      Big (Double_Uns'(2 ** Double_Size - 1)) + 1
+    with Ghost;
+    pragma Warnings
+      (On, "non-preelaborable call not allowed in preelaborated unit");
+    pragma Warnings (On, "non-static constant in preelaborated unit");
+ 
     -----------------------
     -- Local Subprograms --
     -----------------------
*************** package body System.Arith_Double is
*** 57,63 ****
     --  Length doubling multiplication
  
     function "/" (A : Double_Uns; B : Single_Uns) return Double_Uns is
!      (A / Double_Uns (B));
     --  Length doubling division
  
     function "&" (Hi, Lo : Single_Uns) return Double_Uns is
--- 103,111 ----
     --  Length doubling multiplication
  
     function "/" (A : Double_Uns; B : Single_Uns) return Double_Uns is
!      (A / Double_Uns (B))
!    with
!      Pre => B /= 0;
     --  Length doubling division
  
     function "&" (Hi, Lo : Single_Uns) return Double_Uns is
*************** package body System.Arith_Double is
*** 66,81 ****
  
     function "abs" (X : Double_Int) return Double_Uns is
       (if X = Double_Int'First
!       then 2 ** (Double_Size - 1)
        else Double_Uns (Double_Int'(abs X)));
     --  Convert absolute value of X to unsigned. Note that we can't just use
     --  the expression of the Else since it overflows for X = Double_Int'First.
  
     function "rem" (A : Double_Uns; B : Single_Uns) return Double_Uns is
!      (A rem Double_Uns (B));
     --  Length doubling remainder
  
!    function Le3 (X1, X2, X3, Y1, Y2, Y3 : Single_Uns) return Boolean;
     --  Determines if (3 * Single_Size)-bit value X1&X2&X3 <= Y1&Y2&Y3
  
     function Lo (A : Double_Uns) return Single_Uns is
--- 114,148 ----
  
     function "abs" (X : Double_Int) return Double_Uns is
       (if X = Double_Int'First
!       then Double_Uns'(2 ** (Double_Size - 1))
        else Double_Uns (Double_Int'(abs X)));
     --  Convert absolute value of X to unsigned. Note that we can't just use
     --  the expression of the Else since it overflows for X = Double_Int'First.
  
     function "rem" (A : Double_Uns; B : Single_Uns) return Double_Uns is
!      (A rem Double_Uns (B))
!    with
!      Pre => B /= 0;
     --  Length doubling remainder
  
!    function Big_2xx (N : Natural) return Big_Integer is
!      (Big (Double_Uns'(2 ** N)))
!    with
!      Ghost,
!      Pre  => N < Double_Size,
!      Post => Big_2xx'Result > 0;
!    --  2**N as a big integer
! 
!    function Big3 (X1, X2, X3 : Single_Uns) return Big_Integer is
!      (Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (X1))
!                     + Big_2xxSingle * Big (Double_Uns (X2))
!                                     + Big (Double_Uns (X3)))
!    with Ghost;
!    --  X1&X2&X3 as a big integer
! 
!    function Le3 (X1, X2, X3, Y1, Y2, Y3 : Single_Uns) return Boolean
!    with
!      Post => Le3'Result = (Big3 (X1, X2, X3) <= Big3 (Y1, Y2, Y3));
     --  Determines if (3 * Single_Size)-bit value X1&X2&X3 <= Y1&Y2&Y3
  
     function Lo (A : Double_Uns) return Single_Uns is
*************** package body System.Arith_Double is
*** 86,101 ****
       (Single_Uns (Shift_Right (A, Single_Size)));
     --  High order half of double value
  
!    procedure Sub3 (X1, X2, X3 : in out Single_Uns; Y1, Y2, Y3 : Single_Uns);
     --  Computes X1&X2&X3 := X1&X2&X3 - Y1&Y1&Y3 mod 2 ** (3 * Single_Size)
  
!    function To_Neg_Int (A : Double_Uns) return Double_Int;
     --  Convert to negative integer equivalent. If the input is in the range
     --  0 .. 2 ** (Double_Size - 1), then the corresponding nonpositive signed
     --  integer (obtained by negating the given value) is returned, otherwise
     --  constraint error is raised.
  
!    function To_Pos_Int (A : Double_Uns) return Double_Int;
     --  Convert to positive integer equivalent. If the input is in the range
     --  0 .. 2 ** (Double_Size - 1) - 1, then the corresponding non-negative
     --  signed integer is returned, otherwise constraint error is raised.
--- 153,179 ----
       (Single_Uns (Shift_Right (A, Single_Size)));
     --  High order half of double value
  
!    procedure Sub3 (X1, X2, X3 : in out Single_Uns; Y1, Y2, Y3 : Single_Uns)
!    with
!      Pre  => Big3 (X1, X2, X3) >= Big3 (Y1, Y2, Y3),
!      Post => Big3 (X1, X2, X3) = Big3 (X1, X2, X3)'Old - Big3 (Y1, Y2, Y3);
     --  Computes X1&X2&X3 := X1&X2&X3 - Y1&Y1&Y3 mod 2 ** (3 * Single_Size)
  
!    function To_Neg_Int (A : Double_Uns) return Double_Int
!    with
!      Annotate => (GNATprove, Terminating),
!      Pre      => In_Double_Int_Range (-Big (A)),
!      Post     => Big (To_Neg_Int'Result) = -Big (A);
     --  Convert to negative integer equivalent. If the input is in the range
     --  0 .. 2 ** (Double_Size - 1), then the corresponding nonpositive signed
     --  integer (obtained by negating the given value) is returned, otherwise
     --  constraint error is raised.
  
!    function To_Pos_Int (A : Double_Uns) return Double_Int
!    with
!      Annotate => (GNATprove, Terminating),
!      Pre      => In_Double_Int_Range (Big (A)),
!      Post     => Big (To_Pos_Int'Result) = Big (A);
     --  Convert to positive integer equivalent. If the input is in the range
     --  0 .. 2 ** (Double_Size - 1) - 1, then the corresponding non-negative
     --  signed integer is returned, otherwise constraint error is raised.
*************** package body System.Arith_Double is
*** 104,109 ****
--- 182,600 ----
     pragma No_Return (Raise_Error);
     --  Raise constraint error with appropriate message
  
+    ------------------
+    -- Local Lemmas --
+    ------------------
+ 
+    procedure Inline_Le3 (X1, X2, X3, Y1, Y2, Y3 : Single_Uns)
+    with
+      Ghost,
+      Pre  => Le3 (X1, X2, X3, Y1, Y2, Y3),
+      Post => Big3 (X1, X2, X3) <= Big3 (Y1, Y2, Y3);
+ 
+    procedure Lemma_Abs_Commutation (X : Double_Int)
+    with
+      Ghost,
+      Post => abs (Big (X)) = Big (Double_Uns'(abs X));
+ 
+    procedure Lemma_Abs_Div_Commutation (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => abs (X / Y) = abs X / abs Y;
+ 
+    procedure Lemma_Abs_Mult_Commutation (X, Y : Big_Integer)
+    with
+      Ghost,
+      Post => abs (X * Y) = abs X * abs Y;
+ 
+    procedure Lemma_Mult_Non_Negative (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => (X >= Big_0 and then Y >= Big_0)
+        or else (X <= Big_0 and then Y <= Big_0),
+      Post => X * Y >= Big_0;
+ 
+    procedure Lemma_Mult_Non_Positive (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => (X <= Big_0 and then Y >= Big_0)
+        or else (X >= Big_0 and then Y <= Big_0),
+      Post => X * Y <= Big_0;
+ 
+    procedure Lemma_Abs_Rem_Commutation (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => abs (X rem Y) = (abs X) rem (abs Y);
+ 
+    procedure Lemma_Add_Commutation (X : Double_Uns; Y : Single_Uns)
+    with
+      Ghost,
+      Pre  => X <= 2 ** Double_Size - 2 ** Single_Size,
+      Post => Big (X) + Big (Double_Uns (Y)) = Big (X + Double_Uns (Y));
+ 
+    procedure Lemma_Add_One (X : Double_Uns)
+    with
+      Ghost,
+      Pre  => X /= Double_Uns'Last,
+      Post => Big (X + Double_Uns'(1)) = Big (X) + 1;
+ 
+    procedure Lemma_Bounded_Powers_Of_2_Increasing (M, N : Natural)
+    with
+      Ghost,
+      Pre  => M < N and then N < Double_Size,
+      Post => Double_Uns'(2)**M < Double_Uns'(2)**N;
+ 
+    procedure Lemma_Deep_Mult_Commutation
+      (Factor : Big_Integer;
+       X, Y   : Single_Uns)
+    with
+      Ghost,
+      Post =>
+        Factor * Big (Double_Uns (X)) * Big (Double_Uns (Y)) =
+          Factor * Big (Double_Uns (X) * Double_Uns (Y));
+ 
+    procedure Lemma_Div_Commutation (X, Y : Double_Uns)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => Big (X) / Big (Y) = Big (X / Y);
+ 
+    procedure Lemma_Div_Definition
+      (A : Double_Uns;
+       B : Single_Uns;
+       Q : Double_Uns;
+       R : Double_Uns)
+    with
+      Ghost,
+      Pre  => B /= 0 and then Q = A / B and then R = A rem B,
+      Post => Big (A) = Big (Double_Uns (B)) * Big (Q) + Big (R);
+ 
+    procedure Lemma_Div_Ge (X, Y, Z : Big_Integer)
+    with
+      Ghost,
+      Pre  => Z > 0 and then X >= Y * Z,
+      Post => X / Z >= Y;
+ 
+    procedure Lemma_Div_Lt (X, Y, Z : Big_Natural)
+    with
+      Ghost,
+      Pre  => Z > 0 and then X < Y * Z,
+      Post => X / Z < Y;
+ 
+    procedure Lemma_Div_Eq (A, B, S, R : Big_Integer)
+    with
+      Ghost,
+      Pre  => A * S = B * S + R and then S /= 0,
+      Post => A = B + R / S;
+ 
+    procedure Lemma_Double_Shift (X : Double_Uns; S, S1 : Double_Uns)
+    with
+      Ghost,
+      Pre  => S <= Double_Uns (Double_Size)
+        and then S1 <= Double_Uns (Double_Size),
+      Post => Shift_Left (Shift_Left (X, Natural (S)), Natural (S1)) =
+              Shift_Left (X, Natural (S + S1));
+ 
+    procedure Lemma_Double_Shift (X : Single_Uns; S, S1 : Natural)
+    with
+      Ghost,
+      Pre  => S <= Single_Size - S1,
+      Post => Shift_Left (Shift_Left (X, S), S1) = Shift_Left (X, S + S1);
+ 
+    procedure Lemma_Double_Shift (X : Double_Uns; S, S1 : Natural)
+    with
+      Ghost,
+      Pre  => S <= Double_Size - S1,
+      Post => Shift_Left (Shift_Left (X, S), S1) = Shift_Left (X, S + S1);
+ 
+    procedure Lemma_Double_Shift_Right (X : Double_Uns; S, S1 : Double_Uns)
+    with
+      Ghost,
+      Pre  => S <= Double_Uns (Double_Size)
+        and then S1 <= Double_Uns (Double_Size),
+      Post => Shift_Right (Shift_Right (X, Natural (S)), Natural (S1)) =
+              Shift_Right (X, Natural (S + S1));
+ 
+    procedure Lemma_Double_Shift_Right (X : Double_Uns; S, S1 : Natural)
+    with
+      Ghost,
+      Pre  => S <= Double_Size - S1,
+      Post => Shift_Right (Shift_Right (X, S), S1) = Shift_Right (X, S + S1);
+ 
+    procedure Lemma_Ge_Commutation (A, B : Double_Uns)
+    with
+      Ghost,
+      Pre  => A >= B,
+      Post => Big (A) >= Big (B);
+ 
+    procedure Lemma_Ge_Mult (A, B, C, D : Big_Integer)
+    with
+      Ghost,
+      Pre  => A >= B and then B * C >= D and then C > 0,
+      Post => A * C >= D;
+ 
+    procedure Lemma_Gt_Commutation (A, B : Double_Uns)
+    with
+      Ghost,
+      Pre  => A > B,
+      Post => Big (A) > Big (B);
+ 
+    procedure Lemma_Gt_Mult (A, B, C, D : Big_Integer)
+    with
+      Ghost,
+      Pre  => A >= B and then B * C > D and then C > 0,
+      Post => A * C > D;
+ 
+    procedure Lemma_Hi_Lo (Xu : Double_Uns; Xhi, Xlo : Single_Uns)
+    with
+      Ghost,
+      Pre  => Xhi = Hi (Xu) and Xlo = Lo (Xu),
+      Post => Big (Xu) =
+        Big_2xxSingle * Big (Double_Uns (Xhi)) + Big (Double_Uns (Xlo));
+ 
+    procedure Lemma_Hi_Lo_3 (Xu : Double_Uns; Xhi, Xlo : Single_Uns)
+    with
+      Ghost,
+      Pre  => Xhi = Hi (Xu) and then Xlo = Lo (Xu),
+      Post => Big (Xu) = Big3 (0, Xhi, Xlo);
+ 
+    procedure Lemma_Lo_Is_Ident (X : Double_Uns)
+    with
+      Ghost,
+      Pre  => Big (X) < Big_2xxSingle,
+      Post => Double_Uns (Lo (X)) = X;
+ 
+    procedure Lemma_Lt_Commutation (A, B : Double_Uns)
+    with
+      Ghost,
+      Pre  => A < B,
+      Post => Big (A) < Big (B);
+ 
+    procedure Lemma_Lt_Mult (A, B, C, D : Big_Integer)
+    with
+      Ghost,
+      Pre  => A < B and then B * C <= D and then C > 0,
+      Post => A * C < D;
+ 
+    procedure Lemma_Mult_Commutation (X, Y : Single_Uns)
+    with
+      Ghost,
+      Post =>
+        Big (Double_Uns (X)) * Big (Double_Uns (Y)) =
+          Big (Double_Uns (X) * Double_Uns (Y));
+ 
+    procedure Lemma_Mult_Commutation (X, Y : Double_Int)
+    with
+      Ghost,
+      Pre  => In_Double_Int_Range (Big (X) * Big (Y)),
+      Post => Big (X) * Big (Y) = Big (X * Y);
+ 
+    procedure Lemma_Mult_Commutation (X, Y, Z : Double_Uns)
+    with
+      Ghost,
+      Pre  => Big (X) * Big (Y) < Big_2xxDouble and then Z = X * Y,
+      Post => Big (X) * Big (Y) = Big (Z);
+ 
+    procedure Lemma_Mult_Decomposition
+      (Mult               : Big_Integer;
+       Xu, Yu             : Double_Uns;
+       Xhi, Xlo, Yhi, Ylo : Single_Uns)
+    with
+      Ghost,
+      Pre  => Mult = Big (Xu) * Big (Yu)
+        and then Xhi = Hi (Xu)
+        and then Xlo = Lo (Xu)
+        and then Yhi = Hi (Yu)
+        and then Ylo = Lo (Yu),
+      Post => Mult =
+        Big_2xxSingle * Big_2xxSingle * (Big (Double_Uns'(Xhi * Yhi)))
+                      + Big_2xxSingle * (Big (Double_Uns'(Xhi * Ylo)))
+                      + Big_2xxSingle * (Big (Double_Uns'(Xlo * Yhi)))
+                                      + (Big (Double_Uns'(Xlo * Ylo)));
+ 
+    procedure Lemma_Mult_Distribution (X, Y, Z : Big_Integer)
+    with
+      Ghost,
+      Post => X * (Y + Z) = X * Y + X * Z;
+ 
+    procedure Lemma_Neg_Div (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => X / Y = (-X) / (-Y);
+ 
+    procedure Lemma_Neg_Rem (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => X rem Y = X rem (-Y);
+ 
+    procedure Lemma_Not_In_Range_Big2xx64
+    with
+      Post => not In_Double_Int_Range (Big_2xxDouble)
+        and then not In_Double_Int_Range (-Big_2xxDouble);
+ 
+    procedure Lemma_Powers_Of_2 (M, N : Natural)
+    with
+      Ghost,
+      Pre  => M < Double_Size
+        and then N < Double_Size
+        and then M + N <= Double_Size,
+      Post =>
+        Big_2xx (M) * Big_2xx (N) =
+          (if M + N = Double_Size then Big_2xxDouble else Big_2xx (M + N));
+ 
+    procedure Lemma_Powers_Of_2_Commutation (M : Natural)
+    with
+      Ghost,
+      Subprogram_Variant => (Decreases => M),
+      Pre  => M <= Double_Size,
+      Post => Big (Double_Uns'(2))**M =
+               (if M < Double_Size then Big_2xx (M) else Big_2xxDouble);
+ 
+    procedure Lemma_Powers_Of_2_Increasing (M, N : Natural)
+    with
+      Ghost,
+      Subprogram_Variant => (Increases => M),
+      Pre  => M < N,
+      Post => Big (Double_Uns'(2))**M < Big (Double_Uns'(2))**N;
+ 
+    procedure Lemma_Rem_Abs (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => X rem Y = X rem (abs Y);
+    pragma Unreferenced (Lemma_Rem_Abs);
+ 
+    procedure Lemma_Rem_Commutation (X, Y : Double_Uns)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => Big (X) rem Big (Y) = Big (X rem Y);
+ 
+    procedure Lemma_Rem_Is_Ident (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => abs X < abs Y,
+      Post => X rem Y = X;
+    pragma Unreferenced (Lemma_Rem_Is_Ident);
+ 
+    procedure Lemma_Rem_Sign (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => Same_Sign (X rem Y, X);
+    pragma Unreferenced (Lemma_Rem_Sign);
+ 
+    procedure Lemma_Rev_Div_Definition (A, B, Q, R : Big_Natural)
+    with
+      Ghost,
+      Pre  => A = B * Q + R and then R < B,
+      Post => Q = A / B and then R = A rem B;
+ 
+    procedure Lemma_Shift_Right (X : Double_Uns; Shift : Natural)
+    with
+      Ghost,
+      Pre  => Shift < Double_Size,
+      Post => Big (Shift_Right (X, Shift)) = Big (X) / Big_2xx (Shift);
+ 
+    procedure Lemma_Shift_Without_Drop
+      (X, Y  : Double_Uns;
+       Mask  : Single_Uns;
+       Shift : Natural)
+    with
+      Ghost,
+      Pre  => (Hi (X) and Mask) = 0  --  X has the first Shift bits off
+        and then Shift <= Single_Size
+        and then Mask = Shift_Left (Single_Uns'Last, Single_Size - Shift)
+        and then Y = Shift_Left (X, Shift),
+      Post => Big (Y) = Big_2xx (Shift) * Big (X);
+ 
+    procedure Lemma_Simplify (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => X * Y / Y = X;
+ 
+    procedure Lemma_Substitution (A, B, C, C1, D : Big_Integer)
+    with
+      Ghost,
+      Pre  => C = C1 and then A = B * C + D,
+      Post => A = B * C1 + D;
+ 
+    procedure Lemma_Subtract_Commutation (X, Y : Double_Uns)
+    with
+      Ghost,
+      Pre  => X >= Y,
+      Post => Big (X) - Big (Y) = Big (X - Y);
+ 
+    procedure Lemma_Subtract_Double_Uns (X, Y : Double_Int)
+    with
+      Ghost,
+      Pre  => X >= 0 and then X <= Y,
+      Post => Double_Uns (Y - X) = Double_Uns (Y) - Double_Uns (X);
+ 
+    procedure Lemma_Word_Commutation (X : Single_Uns)
+    with
+      Ghost,
+      Post => Big_2xxSingle * Big (Double_Uns (X))
+        = Big (2**Single_Size * Double_Uns (X));
+ 
+    -----------------------------
+    -- Local lemma null bodies --
+    -----------------------------
+ 
+    procedure Inline_Le3 (X1, X2, X3, Y1, Y2, Y3 : Single_Uns) is null;
+    procedure Lemma_Abs_Commutation (X : Double_Int) is null;
+    procedure Lemma_Abs_Mult_Commutation (X, Y : Big_Integer) is null;
+    procedure Lemma_Add_Commutation (X : Double_Uns; Y : Single_Uns) is null;
+    procedure Lemma_Add_One (X : Double_Uns) is null;
+    procedure Lemma_Bounded_Powers_Of_2_Increasing (M, N : Natural) is null;
+    procedure Lemma_Deep_Mult_Commutation
+      (Factor : Big_Integer;
+       X, Y   : Single_Uns)
+    is null;
+    procedure Lemma_Div_Commutation (X, Y : Double_Uns) is null;
+    procedure Lemma_Div_Definition
+      (A : Double_Uns;
+       B : Single_Uns;
+       Q : Double_Uns;
+       R : Double_Uns)
+    is null;
+    procedure Lemma_Div_Ge (X, Y, Z : Big_Integer) is null;
+    procedure Lemma_Div_Lt (X, Y, Z : Big_Natural) is null;
+    procedure Lemma_Div_Eq (A, B, S, R : Big_Integer) is null;
+    procedure Lemma_Double_Shift (X : Double_Uns; S, S1 : Double_Uns) is null;
+    procedure Lemma_Double_Shift (X : Single_Uns; S, S1 : Natural) is null;
+    procedure Lemma_Double_Shift_Right (X : Double_Uns; S, S1 : Double_Uns)
+    is null;
+    procedure Lemma_Ge_Commutation (A, B : Double_Uns) is null;
+    procedure Lemma_Ge_Mult (A, B, C, D : Big_Integer) is null;
+    procedure Lemma_Gt_Commutation (A, B : Double_Uns) is null;
+    procedure Lemma_Gt_Mult (A, B, C, D : Big_Integer) is null;
+    procedure Lemma_Lo_Is_Ident (X : Double_Uns) is null;
+    procedure Lemma_Lt_Commutation (A, B : Double_Uns) is null;
+    procedure Lemma_Lt_Mult (A, B, C, D : Big_Integer) is null;
+    procedure Lemma_Mult_Commutation (X, Y : Single_Uns) is null;
+    procedure Lemma_Mult_Commutation (X, Y : Double_Int) is null;
+    procedure Lemma_Mult_Commutation (X, Y, Z : Double_Uns) is null;
+    procedure Lemma_Mult_Distribution (X, Y, Z : Big_Integer) is null;
+    procedure Lemma_Mult_Non_Negative (X, Y : Big_Integer) is null;
+    procedure Lemma_Mult_Non_Positive (X, Y : Big_Integer) is null;
+    procedure Lemma_Neg_Rem (X, Y : Big_Integer) is null;
+    procedure Lemma_Not_In_Range_Big2xx64 is null;
+    procedure Lemma_Rem_Commutation (X, Y : Double_Uns) is null;
+    procedure Lemma_Rem_Is_Ident (X, Y : Big_Integer) is null;
+    procedure Lemma_Rem_Sign (X, Y : Big_Integer) is null;
+    procedure Lemma_Rev_Div_Definition (A, B, Q, R : Big_Natural) is null;
+    procedure Lemma_Simplify (X, Y : Big_Integer) is null;
+    procedure Lemma_Substitution (A, B, C, C1, D : Big_Integer) is null;
+    procedure Lemma_Subtract_Commutation (X, Y : Double_Uns) is null;
+    procedure Lemma_Subtract_Double_Uns (X, Y : Double_Int) is null;
+    procedure Lemma_Word_Commutation (X : Single_Uns) is null;
+ 
     --------------------------
     -- Add_With_Ovflo_Check --
     --------------------------
*************** package body System.Arith_Double is
*** 111,128 ****
--- 602,725 ----
     function Add_With_Ovflo_Check (X, Y : Double_Int) return Double_Int is
        R : constant Double_Int := To_Int (To_Uns (X) + To_Uns (Y));
  
+       --  Local lemmas
+ 
+       procedure Prove_Negative_X
+       with
+         Ghost,
+         Pre  => X < 0 and then (Y > 0 or else R < 0),
+         Post => R = X + Y;
+ 
+       procedure Prove_Non_Negative_X
+       with
+         Ghost,
+         Pre  => X >= 0 and then (Y < 0 or else R >= 0),
+         Post => R = X + Y;
+ 
+       procedure Prove_Overflow_Case
+       with
+         Ghost,
+         Pre  =>
+           (if X >= 0 then Y >= 0 and then R < 0
+                      else Y <= 0 and then R >= 0),
+         Post => not In_Double_Int_Range (Big (X) + Big (Y));
+ 
+       ----------------------
+       -- Prove_Negative_X --
+       ----------------------
+ 
+       procedure Prove_Negative_X is
+       begin
+          if X = Double_Int'First then
+             if Y > 0 then
+                null;
+             else
+                pragma Assert
+                  (To_Uns (X) + To_Uns (Y) =
+                     2 ** (Double_Size - 1) - Double_Uns (-Y));
+                pragma Assert  --  as R < 0
+                  (To_Uns (X) + To_Uns (Y) >= 2 ** (Double_Size - 1));
+                pragma Assert (Y = 0);
+             end if;
+ 
+          elsif Y = Double_Int'First then
+             pragma Assert
+               (To_Uns (X) + To_Uns (Y) =
+                  2 ** (Double_Size - 1) - Double_Uns (-X));
+             pragma Assert (False);
+ 
+          elsif Y <= 0 then
+             pragma Assert
+               (To_Uns (X) + To_Uns (Y) = -Double_Uns (-X) - Double_Uns (-Y));
+ 
+          else  --  Y > 0, 0 > X > Double_Int'First
+             declare
+                Ru : constant Double_Uns := To_Uns (X) + To_Uns (Y);
+             begin
+                pragma Assert (Ru = -Double_Uns (-X) + Double_Uns (Y));
+                if Ru < 2 ** (Double_Size - 1) then  --  R >= 0
+                   Lemma_Subtract_Double_Uns (-X, Y);
+                   pragma Assert (Ru = Double_Uns (X + Y));
+ 
+                elsif Ru = 2 ** (Double_Size - 1) then
+                   pragma Assert (Double_Uns (Y) < 2 ** (Double_Size - 1));
+                   pragma Assert (Double_Uns (-X) < 2 ** (Double_Size - 1));
+                   pragma Assert (False);
+ 
+                else
+                   pragma Assert
+                     (R = -Double_Int (-(-Double_Uns (-X) + Double_Uns (Y))));
+                   pragma Assert
+                     (R = -Double_Int (-Double_Uns (Y) + Double_Uns (-X)));
+                end if;
+             end;
+          end if;
+       end Prove_Negative_X;
+ 
+       --------------------------
+       -- Prove_Non_Negative_X --
+       --------------------------
+ 
+       procedure Prove_Non_Negative_X is
+       begin
+          if Y >= 0 or else Y = Double_Int'First then
+             null;
+          else
+             pragma Assert
+               (To_Uns (X) + To_Uns (Y) = Double_Uns (X) - Double_Uns (-Y));
+          end if;
+       end Prove_Non_Negative_X;
+ 
+       -------------------------
+       -- Prove_Overflow_Case --
+       -------------------------
+ 
+       procedure Prove_Overflow_Case is
+       begin
+          if X < 0 and then X /= Double_Int'First and then Y /= Double_Int'First
+          then
+             pragma Assert
+               (To_Uns (X) + To_Uns (Y) = -Double_Uns (-X) - Double_Uns (-Y));
+          end if;
+       end Prove_Overflow_Case;
+ 
+    --  Start of processing for Add_With_Ovflo_Check
+ 
     begin
        if X >= 0 then
           if Y < 0 or else R >= 0 then
+             Prove_Non_Negative_X;
              return R;
           end if;
  
        else -- X < 0
           if Y > 0 or else R < 0 then
+             Prove_Negative_X;
              return R;
           end if;
        end if;
  
+       Prove_Overflow_Case;
        Raise_Error;
     end Add_With_Ovflo_Check;
  
*************** package body System.Arith_Double is
*** 147,170 ****
  
        T1, T2     : Double_Uns;
        Du, Qu, Ru : Double_Uns;
!       Den_Pos    : Boolean;
  
     begin
        if Yu = 0 or else Zu = 0 then
           Raise_Error;
        end if;
  
!       --  Set final signs (RM 4.5.5(27-30))
! 
!       Den_Pos := (Y < 0) = (Z < 0);
  
        --  Compute Y * Z. Note that if the result overflows Double_Uns, then
        --  the rounded result is zero, except for the very special case where
!       --  X = -2 ** (Double_Size - 1) and abs(Y*Z) = 2 ** Double_Size, when
        --  Round is True.
  
        if Yhi /= 0 then
           if Zhi /= 0 then
  
              --  Handle the special case when Round is True
  
--- 744,912 ----
  
        T1, T2     : Double_Uns;
        Du, Qu, Ru : Double_Uns;
!       Den_Pos    : constant Boolean := (Y < 0) = (Z < 0);
! 
!       --  Local ghost variables
! 
!       Mult  : constant Big_Integer := abs (Big (Y) * Big (Z)) with Ghost;
!       Quot  : Big_Integer with Ghost;
!       Big_R : Big_Integer with Ghost;
!       Big_Q : Big_Integer with Ghost;
! 
!       --  Local lemmas
! 
!       procedure Prove_Overflow_Case
!       with
!         Ghost,
!         Pre  => X = Double_Int'First and then Big (Y) * Big (Z) = -1,
!         Post => not In_Double_Int_Range (Big (X) / (Big (Y) * Big (Z)))
!           and then not In_Double_Int_Range
!             (Round_Quotient (Big (X), Big (Y) * Big (Z),
!                              Big (X) / (Big (Y) * Big (Z)),
!                              Big (X) rem (Big (Y) * Big (Z))));
!       --  Proves the special case where -2**(Double_Size - 1) is divided by -1,
!       --  generating an overflow.
! 
!       procedure Prove_Quotient_Zero
!       with
!         Ghost,
!         Pre  => Mult >= Big_2xxDouble
!           and then
!             not (Mult = Big_2xxDouble
!                    and then X = Double_Int'First
!                    and then Round)
!           and then Q = 0
!           and then R = X,
!         Post => Big (R) = Big (X) rem (Big (Y) * Big (Z))
!           and then
!             (if Round then
!                Big (Q) = Round_Quotient (Big (X), Big (Y) * Big (Z),
!                                          Big (X) / (Big (Y) * Big (Z)),
!                                          Big (R))
!              else Big (Q) = Big (X) / (Big (Y) * Big (Z)));
!       --  Proves the general case where divisor doesn't fit in Double_Uns and
!       --  quotient is 0.
! 
!       procedure Prove_Round_To_One
!       with
!         Ghost,
!         Pre  => Mult = Big_2xxDouble
!           and then X = Double_Int'First
!           and then Q = (if Den_Pos then -1 else 1)
!           and then R = X
!           and then Round,
!         Post => Big (R) = Big (X) rem (Big (Y) * Big (Z))
!           and then Big (Q) = Round_Quotient (Big (X), Big (Y) * Big (Z),
!                                              Big (X) / (Big (Y) * Big (Z)),
!                                              Big (R));
!       --  Proves the special case where the divisor doesn't fit in Double_Uns
!       --  but quotient is still 1 or -1 due to rounding
!       --  (abs (Y*Z) = 2**Double_Size and X = -2**(Double_Size - 1) and Round).
! 
!       procedure Prove_Rounding_Case
!       with
!         Ghost,
!         Pre  => Mult /= 0
!           and then Quot = Big (X) / (Big (Y) * Big (Z))
!           and then Big_R = Big (X) rem (Big (Y) * Big (Z))
!           and then Big_Q =
!             Round_Quotient (Big (X), Big (Y) * Big (Z), Quot, Big_R)
!           and then Big (Ru) = abs Big_R
!           and then Big (Du) = Mult
!           and then Big (Qu) =
!             (if Ru > (Du - Double_Uns'(1)) / Double_Uns'(2)
!              then abs Quot + 1
!              else abs Quot),
!         Post => abs Big_Q = Big (Qu);
!       --  Proves correctness of the rounding of the unsigned quotient
! 
!       procedure Prove_Signs
!       with
!         Ghost,
!         Pre  => Mult /= 0
!           and then Quot = Big (X) / (Big (Y) * Big (Z))
!           and then Big_R = Big (X) rem (Big (Y) * Big (Z))
!           and then Big_Q =
!             (if Round then
!                Round_Quotient (Big (X), Big (Y) * Big (Z), Quot, Big_R)
!              else Quot)
!           and then Big (Ru) = abs Big_R
!           and then Big (Qu) = abs Big_Q
!           and then R = (if X >= 0 then To_Int (Ru) else To_Int (-Ru))
!           and then
!             Q = (if (X >= 0) = Den_Pos then To_Int (Qu) else To_Int (-Qu))
!           and then not (X = Double_Int'First and then Big (Y) * Big (Z) = -1),
!         Post => Big (R) = Big_R and then Big (Q) = Big_Q;
!       --  Proves final signs match the intended result after the unsigned
!       --  division is done.
! 
!       -----------------------------
!       -- Local lemma null bodies --
!       -----------------------------
! 
!       procedure Prove_Overflow_Case is null;
!       procedure Prove_Quotient_Zero is null;
!       procedure Prove_Round_To_One is null;
! 
!       -------------------------
!       -- Prove_Rounding_Case --
!       -------------------------
! 
!       procedure Prove_Rounding_Case is
!       begin
!          if Same_Sign (Big (X), Big (Y) * Big (Z)) then
!             null;
!          end if;
!       end Prove_Rounding_Case;
! 
!       -----------------
!       -- Prove_Signs --
!       -----------------
! 
!       procedure Prove_Signs is
!       begin
!          if (X >= 0) = Den_Pos then
!             pragma Assert (Quot >= 0);
!             pragma Assert (Big_Q >= 0);
!             pragma Assert (Q >= 0);
!             pragma Assert (Big (Q) = Big_Q);
!          else
!             pragma Assert ((X >= 0) /= (Big (Y) * Big (Z) >= 0));
!             pragma Assert (Quot <= 0);
!             pragma Assert (Big_Q <= 0);
!             pragma Assert (if X >= 0 then R >= 0);
!             pragma Assert (if X < 0 then R <= 0);
!             pragma Assert (Big (R) = Big_R);
!          end if;
!       end Prove_Signs;
! 
!    --  Start of processing for Double_Divide
  
     begin
        if Yu = 0 or else Zu = 0 then
           Raise_Error;
        end if;
  
!       pragma Assert (Mult /= 0);
!       pragma Assert (Den_Pos = (Big (Y) * Big (Z) > 0));
!       Quot := Big (X) / (Big (Y) * Big (Z));
!       Big_R := Big (X) rem (Big (Y) * Big (Z));
!       if Round then
!          Big_Q := Round_Quotient (Big (X), Big (Y) * Big (Z), Quot, Big_R);
!       else
!          Big_Q := Quot;
!       end if;
!       Lemma_Abs_Mult_Commutation (Big (Y), Big (Z));
!       Lemma_Mult_Decomposition (Mult, Yu, Zu, Yhi, Ylo, Zhi, Zlo);
  
        --  Compute Y * Z. Note that if the result overflows Double_Uns, then
        --  the rounded result is zero, except for the very special case where
!       --  X = -2 ** (Double_Size - 1) and abs (Y * Z) = 2 ** Double_Size, when
        --  Round is True.
  
        if Yhi /= 0 then
           if Zhi /= 0 then
+             R := X;
  
              --  Handle the special case when Round is True
  
*************** package body System.Arith_Double is
*** 176,186 ****
                and then Round
              then
                 Q := (if Den_Pos then -1 else 1);
              else
                 Q := 0;
              end if;
  
-             R := X;
              return;
           else
              T2 := Yhi * Zlo;
--- 918,940 ----
                and then Round
              then
                 Q := (if Den_Pos then -1 else 1);
+ 
+                Prove_Round_To_One;
+ 
              else
                 Q := 0;
+ 
+                pragma Assert (Big (Double_Uns'(Yhi * Zhi)) >= 1);
+                if Yhi > 1 or else Zhi > 1 then
+                   pragma Assert (Big (Double_Uns'(Yhi * Zhi)) > 1);
+                elsif Zlo > 0 then
+                   pragma Assert (Big (Double_Uns'(Yhi * Zlo)) > 0);
+                elsif Ylo > 0 then
+                   pragma Assert (Big (Double_Uns'(Ylo * Zhi)) > 0);
+                end if;
+                Prove_Quotient_Zero;
              end if;
  
              return;
           else
              T2 := Yhi * Zlo;
*************** package body System.Arith_Double is
*** 191,199 ****
--- 945,982 ----
        end if;
  
        T1 := Ylo * Zlo;
+ 
+       pragma Assert (Big (T2) = Big (Double_Uns'(Yhi * Zlo))
+                               + Big (Double_Uns'(Ylo * Zhi)));
+       Lemma_Mult_Distribution (Big_2xxSingle,
+                                Big (Double_Uns'(Yhi * Zlo)),
+                                Big (Double_Uns'(Ylo * Zhi)));
+       pragma Assert (Mult = Big_2xxSingle * Big (T2) + Big (T1));
+       Lemma_Hi_Lo (T1, Hi (T1), Lo (T1));
+       pragma Assert
+         (Mult = Big_2xxSingle * Big (T2)
+               + Big_2xxSingle * Big (Double_Uns (Hi (T1)))
+                               + Big (Double_Uns (Lo (T1))));
+       Lemma_Mult_Distribution (Big_2xxSingle,
+                                Big (T2),
+                                Big (Double_Uns (Hi (T1))));
+       Lemma_Add_Commutation (T2, Hi (T1));
+ 
        T2 := T2 + Hi (T1);
  
+       pragma Assert
+         (Mult = Big_2xxSingle * Big (T2) + Big (Double_Uns (Lo (T1))));
+       Lemma_Hi_Lo (T2, Hi (T2), Lo (T2));
+       Lemma_Mult_Distribution (Big_2xxSingle,
+                                Big (Double_Uns (Hi (T2))),
+                                Big (Double_Uns (Lo (T2))));
+       pragma Assert
+         (Mult = Big_2xxDouble * Big (Double_Uns (Hi (T2)))
+               + Big_2xxSingle * Big (Double_Uns (Lo (T2)))
+                               + Big (Double_Uns (Lo (T1))));
+ 
        if Hi (T2) /= 0 then
+          R := X;
  
           --  Handle the special case when Round is True
  
*************** package body System.Arith_Double is
*** 204,222 ****
             and then Round
           then
              Q := (if Den_Pos then -1 else 1);
           else
              Q := 0;
           end if;
  
-          R := X;
           return;
        end if;
  
        Du := Lo (T2) & Lo (T1);
  
        --  Check overflow case of largest negative number divided by -1
  
        if X = Double_Int'First and then Du = 1 and then not Den_Pos then
           Raise_Error;
        end if;
  
--- 987,1035 ----
             and then Round
           then
              Q := (if Den_Pos then -1 else 1);
+ 
+             Prove_Round_To_One;
+ 
           else
              Q := 0;
+ 
+             pragma Assert (Big (Double_Uns (Hi (T2))) >= 1);
+             pragma Assert (Big (Double_Uns (Lo (T2))) >= 0);
+             pragma Assert (Big (Double_Uns (Lo (T1))) >= 0);
+             pragma Assert (Mult >= Big_2xxDouble);
+             if Hi (T2) > 1 then
+                pragma Assert (Big (Double_Uns (Hi (T2))) > 1);
+             elsif Lo (T2) > 0 then
+                pragma Assert (Big (Double_Uns (Lo (T2))) > 0);
+             elsif Lo (T1) > 0 then
+                pragma Assert (Double_Uns (Lo (T1)) > 0);
+                Lemma_Gt_Commutation (Double_Uns (Lo (T1)), 0);
+                pragma Assert (Big (Double_Uns (Lo (T1))) > 0);
+             end if;
+             Prove_Quotient_Zero;
           end if;
  
           return;
        end if;
  
        Du := Lo (T2) & Lo (T1);
  
+       Lemma_Hi_Lo (Du, Lo (T2), Lo (T1));
+       pragma Assert (Mult = Big (Du));
+       pragma Assert (Du /= 0);
+       --  Multiplication of 2-limb arguments Yu and Zu leads to 4-limb result
+       --  (where each limb is a single value). Cases where 4 limbs are needed
+       --  require Yhi /= 0 and Zhi /= 0 and lead to early exit. Remaining cases
+       --  where 3 limbs are needed correspond to Hi(T2) /= 0 and lead to early
+       --  exit. Thus, at this point, the result fits in 2 limbs which are
+       --  exactly Lo (T2) and Lo (T1), which corresponds to the value of Du.
+       --  As the case where one of Yu or Zu is null also led to early exit,
+       --  we have Du /= 0 here.
+ 
        --  Check overflow case of largest negative number divided by -1
  
        if X = Double_Int'First and then Du = 1 and then not Den_Pos then
+          Prove_Overflow_Case;
           Raise_Error;
        end if;
  
*************** package body System.Arith_Double is
*** 231,261 ****
        --  exactly Lo(T2) and Lo(T1), which corresponds to the value of Du.
        --  As the case where one of Yu or Zu is null also led to early exit,
        --  we have Du/=0 here.
        Qu := Xu / Du;
        Ru := Xu rem Du;
  
        --  Deal with rounding case
  
!       if Round and then Ru > (Du - Double_Uns'(1)) / Double_Uns'(2) then
!          Qu := Qu + Double_Uns'(1);
        end if;
  
        --  Case of dividend (X) sign positive
  
        if X >= 0 then
           R := To_Int (Ru);
!          Q := (if Den_Pos then To_Int (Qu) else -To_Int (Qu));
! 
!       --  Case of dividend (X) sign negative
  
        --  We perform the unary minus operation on the unsigned value
        --  before conversion to signed, to avoid a possible overflow
        --  for value -2 ** (Double_Size - 1), both for computing R and Q.
  
        else
           R := To_Int (-Ru);
           Q := (if Den_Pos then To_Int (-Qu) else To_Int (Qu));
        end if;
     end Double_Divide;
  
     ---------
--- 1044,1095 ----
        --  exactly Lo(T2) and Lo(T1), which corresponds to the value of Du.
        --  As the case where one of Yu or Zu is null also led to early exit,
        --  we have Du/=0 here.
+ 
        Qu := Xu / Du;
        Ru := Xu rem Du;
  
+       Lemma_Div_Commutation (Xu, Du);
+       Lemma_Abs_Div_Commutation (Big (X), Big (Y) * Big (Z));
+       Lemma_Abs_Commutation (X);
+       pragma Assert (abs Quot = Big (Qu));
+       Lemma_Rem_Commutation (Xu, Du);
+       Lemma_Abs_Rem_Commutation (Big (X), Big (Y) * Big (Z));
+       pragma Assert (abs Big_R = Big (Ru));
+ 
        --  Deal with rounding case
  
!       if Round then
!          if Ru > (Du - Double_Uns'(1)) / Double_Uns'(2) then
!             Lemma_Add_Commutation (Qu, 1);
! 
!             Qu := Qu + Double_Uns'(1);
!          end if;
! 
!          Prove_Rounding_Case;
        end if;
  
+       pragma Assert (abs Big_Q = Big (Qu));
+ 
+       --  Set final signs (RM 4.5.5(27-30))
+ 
        --  Case of dividend (X) sign positive
  
        if X >= 0 then
           R := To_Int (Ru);
!          Q := (if Den_Pos then To_Int (Qu) else To_Int (-Qu));
  
        --  We perform the unary minus operation on the unsigned value
        --  before conversion to signed, to avoid a possible overflow
        --  for value -2 ** (Double_Size - 1), both for computing R and Q.
  
+       --  Case of dividend (X) sign negative
+ 
        else
           R := To_Int (-Ru);
           Q := (if Den_Pos then To_Int (-Qu) else To_Int (Qu));
        end if;
+ 
+       Prove_Signs;
     end Double_Divide;
  
     ---------
*************** package body System.Arith_Double is
*** 278,283 ****
--- 1112,1372 ----
     end Le3;
  
     -------------------------------
+    -- Lemma_Abs_Div_Commutation --
+    -------------------------------
+ 
+    procedure Lemma_Abs_Div_Commutation (X, Y : Big_Integer) is
+    begin
+       if Y < 0 then
+          if X < 0 then
+             pragma Assert (abs (X / Y) = abs (X / (-Y)));
+          else
+             Lemma_Neg_Div (X, Y);
+             pragma Assert (abs (X / Y) = abs ((-X) / (-Y)));
+          end if;
+       end if;
+    end Lemma_Abs_Div_Commutation;
+ 
+    -------------------------------
+    -- Lemma_Abs_Rem_Commutation --
+    -------------------------------
+ 
+    procedure Lemma_Abs_Rem_Commutation (X, Y : Big_Integer) is
+    begin
+       if Y < 0 then
+          Lemma_Neg_Rem (X, Y);
+          if X < 0 then
+             pragma Assert (X rem Y = -((-X) rem (-Y)));
+             pragma Assert (abs (X rem Y) = (abs X) rem (abs Y));
+          else
+             pragma Assert (abs (X rem Y) = (abs X) rem (abs Y));
+          end if;
+       end if;
+    end Lemma_Abs_Rem_Commutation;
+ 
+    ------------------------
+    -- Lemma_Double_Shift --
+    ------------------------
+ 
+    procedure Lemma_Double_Shift (X : Double_Uns; S, S1 : Natural) is
+    begin
+       Lemma_Double_Shift (X, Double_Uns (S), Double_Uns (S1));
+       pragma Assert (Shift_Left (Shift_Left (X, S), S1)
+         = Shift_Left (Shift_Left (X, S), Natural (Double_Uns (S1))));
+       pragma Assert (Shift_Left (X, S + S1)
+         = Shift_Left (X, Natural (Double_Uns (S + S1))));
+    end Lemma_Double_Shift;
+ 
+    ------------------------------
+    -- Lemma_Double_Shift_Right --
+    ------------------------------
+ 
+    procedure Lemma_Double_Shift_Right (X : Double_Uns; S, S1 : Natural) is
+    begin
+       Lemma_Double_Shift_Right (X, Double_Uns (S), Double_Uns (S1));
+       pragma Assert (Shift_Right (Shift_Right (X, S), S1)
+         = Shift_Right (Shift_Right (X, S), Natural (Double_Uns (S1))));
+       pragma Assert (Shift_Right (X, S + S1)
+         = Shift_Right (X, Natural (Double_Uns (S + S1))));
+    end Lemma_Double_Shift_Right;
+ 
+    -----------------
+    -- Lemma_Hi_Lo --
+    -----------------
+ 
+    procedure Lemma_Hi_Lo (Xu : Double_Uns; Xhi, Xlo : Single_Uns) is
+    begin
+       pragma Assert (Double_Uns (Xhi) = Xu / Double_Uns'(2 ** Single_Size));
+       pragma Assert (Double_Uns (Xlo) = Xu mod 2 ** Single_Size);
+    end Lemma_Hi_Lo;
+ 
+    -------------------
+    -- Lemma_Hi_Lo_3 --
+    -------------------
+ 
+    procedure Lemma_Hi_Lo_3 (Xu : Double_Uns; Xhi, Xlo : Single_Uns) is
+    begin
+       Lemma_Hi_Lo (Xu, Xhi, Xlo);
+    end Lemma_Hi_Lo_3;
+ 
+    ------------------------------
+    -- Lemma_Mult_Decomposition --
+    ------------------------------
+ 
+    procedure Lemma_Mult_Decomposition
+      (Mult               : Big_Integer;
+       Xu, Yu             : Double_Uns;
+       Xhi, Xlo, Yhi, Ylo : Single_Uns)
+    is
+    begin
+       Lemma_Hi_Lo (Xu, Xhi, Xlo);
+       Lemma_Hi_Lo (Yu, Yhi, Ylo);
+ 
+       pragma Assert
+         (Mult =
+            (Big_2xxSingle * Big (Double_Uns (Xhi)) + Big (Double_Uns (Xlo))) *
+            (Big_2xxSingle * Big (Double_Uns (Yhi)) + Big (Double_Uns (Ylo))));
+       pragma Assert (Mult =
+         Big_2xxSingle
+           * Big_2xxSingle * Big (Double_Uns (Xhi)) * Big (Double_Uns (Yhi))
+           + Big_2xxSingle * Big (Double_Uns (Xhi)) * Big (Double_Uns (Ylo))
+           + Big_2xxSingle * Big (Double_Uns (Xlo)) * Big (Double_Uns (Yhi))
+                           + Big (Double_Uns (Xlo)) * Big (Double_Uns (Ylo)));
+       Lemma_Deep_Mult_Commutation (Big_2xxSingle * Big_2xxSingle, Xhi, Yhi);
+       Lemma_Deep_Mult_Commutation (Big_2xxSingle, Xhi, Ylo);
+       Lemma_Deep_Mult_Commutation (Big_2xxSingle, Xlo, Yhi);
+       Lemma_Mult_Commutation (Xlo, Ylo);
+       pragma Assert (Mult =
+         Big_2xxSingle * Big_2xxSingle * Big (Double_Uns'(Xhi * Yhi))
+                       + Big_2xxSingle * Big (Double_Uns'(Xhi * Ylo))
+                       + Big_2xxSingle * Big (Double_Uns'(Xlo * Yhi))
+                                       + Big (Double_Uns'(Xlo * Ylo)));
+    end Lemma_Mult_Decomposition;
+ 
+    -------------------
+    -- Lemma_Neg_Div --
+    -------------------
+ 
+    procedure Lemma_Neg_Div (X, Y : Big_Integer) is
+    begin
+       pragma Assert ((-X) / (-Y) = -(X / (-Y)));
+       pragma Assert (X / (-Y) = -(X / Y));
+    end Lemma_Neg_Div;
+ 
+    -----------------------
+    -- Lemma_Powers_Of_2 --
+    -----------------------
+ 
+    procedure Lemma_Powers_Of_2 (M, N : Natural) is
+    begin
+       if M + N < Double_Size then
+          pragma Assert (Double_Uns'(2**M) * Double_Uns'(2**N)
+                         = Double_Uns'(2**(M + N)));
+       end if;
+ 
+       Lemma_Powers_Of_2_Commutation (M);
+       Lemma_Powers_Of_2_Commutation (N);
+       Lemma_Powers_Of_2_Commutation (M + N);
+ 
+       if M + N < Double_Size then
+          pragma Assert (Big (Double_Uns'(2))**M * Big (Double_Uns'(2))**N
+                         = Big (Double_Uns'(2))**(M + N));
+          Lemma_Powers_Of_2_Increasing (M + N, Double_Size);
+          Lemma_Mult_Commutation (2 ** M, 2 ** N, 2 ** (M + N));
+       else
+          pragma Assert (Big (Double_Uns'(2))**M * Big (Double_Uns'(2))**N
+                         = Big (Double_Uns'(2))**(M + N));
+       end if;
+    end Lemma_Powers_Of_2;
+ 
+    -----------------------------------
+    -- Lemma_Powers_Of_2_Commutation --
+    -----------------------------------
+ 
+    procedure Lemma_Powers_Of_2_Commutation (M : Natural) is
+    begin
+       if M > 0 then
+          Lemma_Powers_Of_2_Commutation (M - 1);
+          pragma Assert (Big (Double_Uns'(2))**(M - 1) = Big_2xx (M - 1));
+          pragma Assert (Big (Double_Uns'(2))**M = Big_2xx (M - 1) * 2);
+          if M < Double_Size then
+             Lemma_Powers_Of_2_Increasing (M - 1, Double_Size - 1);
+             Lemma_Bounded_Powers_Of_2_Increasing (M - 1, Double_Size - 1);
+             pragma Assert (Double_Uns'(2 ** (M - 1)) * 2 = Double_Uns'(2**M));
+             Lemma_Mult_Commutation
+               (Double_Uns'(2 ** (M - 1)), 2, Double_Uns'(2**M));
+             pragma Assert (Big (Double_Uns'(2))**M = Big_2xx (M));
+          end if;
+       end if;
+    end Lemma_Powers_Of_2_Commutation;
+ 
+    ----------------------------------
+    -- Lemma_Powers_Of_2_Increasing --
+    ----------------------------------
+ 
+    procedure Lemma_Powers_Of_2_Increasing (M, N : Natural) is
+    begin
+       if M + 1 < N then
+          Lemma_Powers_Of_2_Increasing (M + 1, N);
+       end if;
+    end Lemma_Powers_Of_2_Increasing;
+ 
+    -------------------
+    -- Lemma_Rem_Abs --
+    -------------------
+ 
+    procedure Lemma_Rem_Abs (X, Y : Big_Integer) is
+    begin
+       Lemma_Neg_Rem (X, Y);
+    end Lemma_Rem_Abs;
+ 
+    -----------------------
+    -- Lemma_Shift_Right --
+    -----------------------
+ 
+    procedure Lemma_Shift_Right (X : Double_Uns; Shift : Natural) is
+       XX : Double_Uns := X;
+    begin
+       for J in 1 .. Shift loop
+          XX := Shift_Right (XX, 1);
+          Lemma_Double_Shift_Right (X, J - 1, 1);
+          pragma Loop_Invariant (XX = Shift_Right (X, J));
+          pragma Loop_Invariant (XX = X / Double_Uns'(2) ** J);
+       end loop;
+    end Lemma_Shift_Right;
+ 
+    ------------------------------
+    -- Lemma_Shift_Without_Drop --
+    ------------------------------
+ 
+    procedure Lemma_Shift_Without_Drop
+      (X, Y  : Double_Uns;
+       Mask  : Single_Uns;
+       Shift : Natural)
+    is
+       pragma Unreferenced (Mask);
+ 
+       procedure Lemma_Bound
+       with
+         Pre  => Shift <= Single_Size
+           and then X <= 2**Single_Size
+             * Double_Uns'(2**(Single_Size - Shift) - 1)
+             + Single_Uns'(2**Single_Size - 1),
+         Post => X <= 2**(Double_Size - Shift) - 1;
+ 
+       procedure Lemma_Exp_Pos (N : Integer)
+       with
+         Pre  => N in 0 .. Double_Size - 1,
+         Post => Double_Uns'(2**N) > 0;
+ 
+       -----------------------------
+       -- Local lemma null bodies --
+       -----------------------------
+ 
+       procedure Lemma_Bound is null;
+       procedure Lemma_Exp_Pos (N : Integer) is null;
+ 
+    --  Start of processing for Lemma_Shift_Without_Drop
+ 
+    begin
+       if Shift = 0 then
+          pragma Assert (Big (Y) = Big_2xx (Shift) * Big (X));
+          return;
+       end if;
+ 
+       Lemma_Bound;
+       Lemma_Exp_Pos (Double_Size - Shift);
+       pragma Assert (X < 2**(Double_Size - Shift));
+       pragma Assert (Big (X) < Big_2xx (Double_Size - Shift));
+       pragma Assert (Y = 2**Shift * X);
+       pragma Assert (Big_2xx (Shift) * Big (X)
+                      < Big_2xx (Shift) * Big_2xx (Double_Size - Shift));
+       Lemma_Powers_Of_2 (Shift, Double_Size - Shift);
+       Lemma_Mult_Commutation (2**Shift, X, Y);
+       pragma Assert (Big (Y) = Big_2xx (Shift) * Big (X));
+    end Lemma_Shift_Without_Drop;
+ 
+    -------------------------------
     -- Multiply_With_Ovflo_Check --
     -------------------------------
  
*************** package body System.Arith_Double is
*** 292,300 ****
--- 1381,1529 ----
  
        T1, T2 : Double_Uns;
  
+       --  Local ghost variables
+ 
+       Mult : constant Big_Integer := abs (Big (X) * Big (Y)) with Ghost;
+ 
+       --  Local lemmas
+ 
+       procedure Prove_Both_Too_Large
+       with
+         Ghost,
+         Pre  => Xhi /= 0
+           and then Yhi /= 0
+           and then Mult =
+             Big_2xxSingle * Big_2xxSingle * (Big (Double_Uns'(Xhi * Yhi)))
+                       + Big_2xxSingle * (Big (Double_Uns'(Xhi * Ylo)))
+                       + Big_2xxSingle * (Big (Double_Uns'(Xlo * Yhi)))
+                                   + (Big (Double_Uns'(Xlo * Ylo))),
+         Post => not In_Double_Int_Range (Big (X) * Big (Y));
+ 
+       procedure Prove_Final_Decomposition
+       with
+         Ghost,
+         Pre  => In_Double_Int_Range (Big (X) * Big (Y))
+           and then Mult = Big_2xxSingle * Big (T2) + Big (Double_Uns (Lo (T1)))
+           and then Hi (T2) = 0,
+         Post => Mult = Big (Lo (T2) & Lo (T1));
+ 
+       procedure Prove_Neg_Int
+       with
+         Ghost,
+         Pre  => In_Double_Int_Range (Big (X) * Big (Y))
+           and then Mult = Big (T2)
+           and then ((X >= 0 and then Y < 0) or else (X < 0 and then Y >= 0)),
+         Post => To_Neg_Int (T2) = X * Y;
+ 
+       procedure Prove_Pos_Int
+       with
+         Ghost,
+         Pre  => In_Double_Int_Range (Big (X) * Big (Y))
+           and then Mult = Big (T2)
+           and then ((X >= 0 and then Y >= 0) or else (X < 0 and then Y < 0)),
+         Post => In_Double_Int_Range (Big (T2))
+           and then To_Pos_Int (T2) = X * Y;
+ 
+       procedure Prove_Result_Too_Large
+       with
+         Ghost,
+         Pre  => Mult = Big_2xxSingle * Big (T2) + Big (Double_Uns (Lo (T1)))
+           and then Hi (T2) /= 0,
+         Post => not In_Double_Int_Range (Big (X) * Big (Y));
+ 
+       procedure Prove_Too_Large
+       with
+         Ghost,
+         Pre  => abs (Big (X) * Big (Y)) >= Big_2xxDouble,
+         Post => not In_Double_Int_Range (Big (X) * Big (Y));
+ 
+       --------------------------
+       -- Prove_Both_Too_Large --
+       --------------------------
+ 
+       procedure Prove_Both_Too_Large is
+       begin
+          pragma Assert (Mult >=
+            Big_2xxSingle * Big_2xxSingle * Big (Double_Uns'(Xhi * Yhi)));
+          pragma Assert (Double_Uns (Xhi) * Double_Uns (Yhi) >= 1);
+          pragma Assert (Mult >= Big_2xxSingle * Big_2xxSingle);
+          Prove_Too_Large;
+       end Prove_Both_Too_Large;
+ 
+       -------------------------------
+       -- Prove_Final_Decomposition --
+       -------------------------------
+ 
+       procedure Prove_Final_Decomposition is
+       begin
+          Lemma_Hi_Lo (T2, Hi (T2), Lo (T2));
+          pragma Assert (Mult = Big_2xxSingle * Big (Double_Uns (Lo (T2)))
+                                              + Big (Double_Uns (Lo (T1))));
+          pragma Assert (Mult <= Big_2xxDouble_Minus_1);
+          Lemma_Mult_Commutation (X, Y);
+          pragma Assert (Mult = abs (Big (X * Y)));
+          Lemma_Word_Commutation (Lo (T2));
+          pragma Assert (Mult = Big (Double_Uns'(2 ** Single_Size)
+                           * Double_Uns (Lo (T2)))
+                           + Big (Double_Uns (Lo (T1))));
+          Lemma_Add_Commutation (Double_Uns'(2 ** Single_Size)
+                                   * Double_Uns (Lo (T2)),
+                                 Lo (T1));
+          pragma Assert (Mult = Big (Double_Uns'(2 ** Single_Size)
+                           * Double_Uns (Lo (T2)) + Lo (T1)));
+          pragma Assert (Lo (T2) & Lo (T1) = Double_Uns'(2 ** Single_Size)
+                           * Double_Uns (Lo (T2)) + Lo (T1));
+       end Prove_Final_Decomposition;
+ 
+       -------------------
+       -- Prove_Neg_Int --
+       -------------------
+ 
+       procedure Prove_Neg_Int is
+       begin
+          pragma Assert (X * Y <= 0);
+          pragma Assert (Mult = -Big (X * Y));
+       end Prove_Neg_Int;
+ 
+       -------------------
+       -- Prove_Pos_Int --
+       -------------------
+ 
+       procedure Prove_Pos_Int is
+       begin
+          pragma Assert (X * Y >= 0);
+          pragma Assert (Mult = Big (X * Y));
+       end Prove_Pos_Int;
+ 
+       ----------------------------
+       -- Prove_Result_Too_Large --
+       ----------------------------
+ 
+       procedure Prove_Result_Too_Large is
+       begin
+          pragma Assert (Mult >= Big_2xxSingle * Big (T2));
+          Lemma_Hi_Lo (T2, Hi (T2), Lo (T2));
+          pragma Assert (Mult >=
+            Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (Hi (T2))));
+          pragma Assert (Double_Uns (Hi (T2)) >= 1);
+          pragma Assert (Mult >= Big_2xxSingle * Big_2xxSingle);
+          Prove_Too_Large;
+       end Prove_Result_Too_Large;
+ 
+       ---------------------
+       -- Prove_Too_Large --
+       ---------------------
+ 
+       procedure Prove_Too_Large is null;
+ 
+    --  Start of processing for Multiply_With_Ovflo_Check
+ 
     begin
+       Lemma_Mult_Decomposition (Mult, Xu, Yu, Xhi, Xlo, Yhi, Ylo);
+ 
        if Xhi /= 0 then
           if Yhi /= 0 then
+             Prove_Both_Too_Large;
              Raise_Error;
           else
              T2 := Xhi * Ylo;
*************** package body System.Arith_Double is
*** 311,338 ****
--- 1540,1590 ----
        --  result from the upper halves of the input values.
  
        T1 := Xlo * Ylo;
+ 
+       pragma Assert (Big (T2) = Big (Double_Uns'(Xhi * Ylo))
+                               + Big (Double_Uns'(Xlo * Yhi)));
+       Lemma_Mult_Distribution (Big_2xxSingle, Big (Double_Uns'(Xhi * Ylo)),
+                                           Big (Double_Uns'(Xlo * Yhi)));
+       pragma Assert (Mult = Big_2xxSingle * Big (T2) + Big (T1));
+       Lemma_Add_Commutation (T2, Hi (T1));
+       pragma Assert
+         (Big (T2 + Hi (T1)) = Big (T2) + Big (Double_Uns (Hi (T1))));
+ 
        T2 := T2 + Hi (T1);
  
+       Lemma_Hi_Lo (T1, Hi (T1), Lo (T1));
+       pragma Assert
+         (Mult = Big_2xxSingle * Big (T2) + Big (Double_Uns (Lo (T1))));
+ 
        if Hi (T2) /= 0 then
+          Prove_Result_Too_Large;
           Raise_Error;
        end if;
  
+       Prove_Final_Decomposition;
+ 
        T2 := Lo (T2) & Lo (T1);
  
+       pragma Assert (Mult = Big (T2));
+ 
        if X >= 0 then
           if Y >= 0 then
+             Prove_Pos_Int;
              return To_Pos_Int (T2);
              pragma Annotate (CodePeer, Intentional, "precondition",
                               "Intentional Unsigned->Signed conversion");
           else
+             Prove_Neg_Int;
              return To_Neg_Int (T2);
           end if;
        else -- X < 0
           if Y < 0 then
+             Prove_Pos_Int;
              return To_Pos_Int (T2);
              pragma Annotate (CodePeer, Intentional, "precondition",
                               "Intentional Unsigned->Signed conversion");
           else
+             Prove_Neg_Int;
              return To_Neg_Int (T2);
           end if;
        end if;
*************** package body System.Arith_Double is
*** 346,351 ****
--- 1598,1606 ----
     procedure Raise_Error is
     begin
        raise Constraint_Error with "Double arithmetic overflow";
+       pragma Annotate
+         (GNATprove, Intentional, "exception might be raised",
+          "Procedure Raise_Error is called to signal input errors");
     end Raise_Error;
  
     -------------------
*************** package body System.Arith_Double is
*** 369,378 ****
        Zhi : Single_Uns := Hi (Zu);
        Zlo : Single_Uns := Lo (Zu);
  
!       D : array (1 .. 4) of Single_Uns;
        --  The dividend, four digits (D(1) is high order)
  
!       Qd : array (1 .. 2) of Single_Uns;
        --  The quotient digits, two digits (Qd(1) is high order)
  
        S1, S2, S3 : Single_Uns;
--- 1624,1633 ----
        Zhi : Single_Uns := Hi (Zu);
        Zlo : Single_Uns := Lo (Zu);
  
!       D : array (1 .. 4) of Single_Uns with Relaxed_Initialization;
        --  The dividend, four digits (D(1) is high order)
  
!       Qd : array (1 .. 2) of Single_Uns with Relaxed_Initialization;
        --  The quotient digits, two digits (Qd(1) is high order)
  
        S1, S2, S3 : Single_Uns;
*************** package body System.Arith_Double is
*** 397,451 ****
        T1, T2, T3 : Double_Uns;
        --  Temporary values
  
     begin
        --  First do the multiplication, giving the four digit dividend
  
        T1 := Xlo * Ylo;
        D (4) := Lo (T1);
        D (3) := Hi (T1);
  
        if Yhi /= 0 then
           T1 := Xlo * Yhi;
           T2 := D (3) + Lo (T1);
           D (3) := Lo (T2);
           D (2) := Hi (T1) + Hi (T2);
  
           if Xhi /= 0 then
              T1 := Xhi * Ylo;
              T2 := D (3) + Lo (T1);
              D (3) := Lo (T2);
              T3 := D (2) + Hi (T1);
              T3 := T3 + Hi (T2);
!             D (2) := Lo (T3);
!             D (1) := Hi (T3);
  
!             T1 := (D (1) & D (2)) + Double_Uns'(Xhi * Yhi);
!             D (1) := Hi (T1);
              D (2) := Lo (T1);
  
           else
              D (1) := 0;
           end if;
  
        else
           if Xhi /= 0 then
              T1 := Xhi * Ylo;
              T2 := D (3) + Lo (T1);
              D (3) := Lo (T2);
              D (2) := Hi (T1) + Hi (T2);
  
           else
              D (2) := 0;
           end if;
  
           D (1) := 0;
        end if;
  
        --  Now it is time for the dreaded multiple precision division. First an
        --  easy case, check for the simple case of a one digit divisor.
  
        if Zhi = 0 then
           if D (1) /= 0 or else D (2) >= Zlo then
              Raise_Error;
  
           --  Here we are dividing at most three digits by one digit
--- 1652,2267 ----
        T1, T2, T3 : Double_Uns;
        --  Temporary values
  
+       --  Local ghost variables
+ 
+       Mult  : constant Big_Integer := abs (Big (X) * Big (Y)) with Ghost;
+       Quot  : Big_Integer with Ghost;
+       Big_R : Big_Integer with Ghost;
+       Big_Q : Big_Integer with Ghost;
+       Inter : Natural with Ghost;
+ 
+       --  Local lemmas
+ 
+       procedure Prove_Dividend_Scaling
+       with
+         Ghost,
+         Pre  => D'Initialized
+           and then Scale <= Single_Size
+           and then Mult =
+             Big_2xxSingle
+               * Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (1)))
+               + Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (2)))
+                               + Big_2xxSingle * Big (Double_Uns (D (3)))
+                                               + Big (Double_Uns (D (4)))
+           and then Big (D (1) & D (2)) * Big_2xx (Scale) < Big_2xxDouble
+           and then T1 = Shift_Left (D (1) & D (2), Scale)
+           and then T2 = Shift_Left (Double_Uns (D (3)), Scale)
+           and then T3 = Shift_Left (Double_Uns (D (4)), Scale),
+         Post => Mult * Big_2xx (Scale) =
+           Big_2xxSingle
+             * Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (Hi (T1)))
+             + Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (Lo (T1) or
+                                                                       Hi (T2)))
+                             + Big_2xxSingle * Big (Double_Uns (Lo (T2) or
+                                                                       Hi (T3)))
+                                             + Big (Double_Uns (Lo (T3)));
+       --  Proves the scaling of the 4-digit dividend actually multiplies it by
+       --  2**Scale.
+ 
+       procedure Prove_Multiplication (Q : Single_Uns)
+       with
+         Ghost,
+         Pre  => T1 = Q * Lo (Zu)
+           and then T2 = Q * Hi (Zu)
+           and then S3 = Lo (T1)
+           and then T3 = Hi (T1) + Lo (T2)
+           and then S2 = Lo (T3)
+           and then S1 = Hi (T3) + Hi (T2),
+         Post => Big3 (S1, S2, S3) = Big (Double_Uns (Q)) * Big (Zu);
+       --  Proves correctness of the multiplication of divisor by quotient to
+       --  compute amount to subtract.
+ 
+       procedure Prove_Negative_Dividend
+       with
+         Ghost,
+         Pre  => Z /= 0
+           and then Big (Qu) = abs Big_Q
+           and then In_Double_Int_Range (Big_Q)
+           and then Big (Ru) = abs Big_R
+           and then ((X >= 0 and Y < 0) or (X < 0 and Y >= 0))
+           and then Big_Q =
+             (if Round then Round_Quotient (Big (X) * Big (Y), Big (Z),
+                                            Big (X) * Big (Y) / Big (Z),
+                                            Big (X) * Big (Y) rem Big (Z))
+              else Big (X) * Big (Y) / Big (Z))
+           and then Big_R = Big (X) * Big (Y) rem Big (Z),
+          Post =>
+            (if Z > 0 then Big_Q <= Big_0
+               and then In_Double_Int_Range (-Big (Qu))
+             else Big_Q >= Big_0
+               and then In_Double_Int_Range (Big (Qu)))
+            and then In_Double_Int_Range (-Big (Ru));
+       --  Proves the sign of rounded quotient when dividend is non-positive
+ 
+       procedure Prove_Overflow
+       with
+         Ghost,
+         Pre  => Z /= 0
+           and then Mult >= Big_2xxDouble * Big (Double_Uns'(abs Z)),
+         Post => not In_Double_Int_Range (Big (X) * Big (Y) / Big (Z))
+           and then not In_Double_Int_Range
+             (Round_Quotient (Big (X) * Big (Y), Big (Z),
+                              Big (X) * Big (Y) / Big (Z),
+                              Big (X) * Big (Y) rem Big (Z)));
+       --  Proves overflow case when the quotient has at least 3 digits
+ 
+       procedure Prove_Positive_Dividend
+       with
+         Ghost,
+         Pre  => Z /= 0
+           and then Big (Qu) = abs Big_Q
+           and then In_Double_Int_Range (Big_Q)
+           and then Big (Ru) = abs Big_R
+           and then ((X >= 0 and Y >= 0) or (X < 0 and Y < 0))
+           and then Big_Q =
+             (if Round then Round_Quotient (Big (X) * Big (Y), Big (Z),
+                                            Big (X) * Big (Y) / Big (Z),
+                                            Big (X) * Big (Y) rem Big (Z))
+              else Big (X) * Big (Y) / Big (Z))
+           and then Big_R = Big (X) * Big (Y) rem Big (Z),
+         Post =>
+            (if Z > 0 then Big_Q >= Big_0
+               and then In_Double_Int_Range (Big (Qu))
+             else Big_Q <= Big_0
+               and then In_Double_Int_Range (-Big (Qu)))
+            and then In_Double_Int_Range (Big (Ru));
+       --  Proves the sign of rounded quotient when dividend is non-negative
+ 
+       procedure Prove_Qd_Calculation_Part_1 (J : Integer)
+       with
+         Ghost,
+         Pre  => J in 1 .. 2
+           and then D'Initialized
+           and then D (J) < Zhi
+           and then Hi (Zu) = Zhi
+           and then Qd (J)'Initialized
+           and then Qd (J) = Lo ((D (J) & D (J + 1)) / Zhi),
+         Post => Big (Double_Uns (Qd (J))) >=
+           Big3 (D (J), D (J + 1), D (J + 2)) / Big (Zu);
+       --  When dividing 3 digits by 2 digits, proves the initial calculation
+       --  of the quotient given by dividing the first 2 digits of the dividend
+       --  by the first digit of the divisor is not an underestimate (so
+       --  readjusting down works).
+ 
+       procedure Prove_Q_Too_Big
+       with
+         Ghost,
+         Pre  => In_Double_Int_Range (Big_Q)
+           and then abs Big_Q = Big_2xxDouble,
+         Post => False;
+       --  Proves the inconsistency when Q is equal to Big_2xx64
+ 
+       procedure Prove_Rescaling
+       with
+         Ghost,
+         Pre  => Scale <= Single_Size
+           and then Z /= 0
+           and then Mult * Big_2xx (Scale) = Big (Zu) * Big (Qu) + Big (Ru)
+           and then Big (Ru) < Big (Zu)
+           and then Big (Zu) = Big (Double_Uns'(abs Z)) * Big_2xx (Scale)
+           and then Quot = Big (X) * Big (Y) / Big (Z)
+           and then Big_R = Big (X) * Big (Y) rem Big (Z),
+         Post => abs Quot = Big (Qu)
+           and then abs Big_R = Big (Shift_Right (Ru, Scale));
+       --  Proves scaling back only the remainder is the right thing to do after
+       --  computing the scaled division.
+ 
+       procedure Prove_Rounding_Case
+       with
+         Ghost,
+         Pre  => Z /= 0
+           and then Quot = Big (X) * Big (Y) / Big (Z)
+           and then Big_R = Big (X) * Big (Y) rem Big (Z)
+           and then Big_Q =
+             Round_Quotient (Big (X) * Big (Y), Big (Z), Quot, Big_R)
+           and then Big (Ru) = abs Big_R
+           and then Big (Zu) = Big (Double_Uns'(abs Z)),
+         Post => abs Big_Q =
+           (if Ru > (Zu - Double_Uns'(1)) / Double_Uns'(2)
+            then abs Quot + 1
+            else abs Quot);
+       --  Proves correctness of the rounding of the unsigned quotient
+ 
+       procedure Prove_Sign_R
+       with
+         Ghost,
+         Pre  => Z /= 0 and then Big_R = Big (X) * Big (Y) rem Big (Z),
+         Post => In_Double_Int_Range (Big_R);
+ 
+       procedure Prove_Signs
+       with
+         Ghost,
+         Pre  => Z /= 0
+           and then Quot = Big (X) * Big (Y) / Big (Z)
+           and then Big_R = Big (X) * Big (Y) rem Big (Z)
+           and then Big_Q =
+             (if Round then
+                Round_Quotient (Big (X) * Big (Y), Big (Z), Quot, Big_R)
+              else Quot)
+           and then Big (Ru) = abs Big_R
+           and then Big (Qu) = abs Big_Q
+           and then In_Double_Int_Range (Big_Q)
+           and then In_Double_Int_Range (Big_R)
+           and then R =
+             (if (X >= 0) = (Y >= 0) then To_Pos_Int (Ru) else To_Neg_Int (Ru))
+           and then Q =
+             (if ((X >= 0) = (Y >= 0)) = (Z >= 0) then To_Pos_Int (Qu)
+              else To_Neg_Int (Qu)),  --  need to ensure To_Pos_Int precondition
+         Post => Big (R) = Big_R and then Big (Q) = Big_Q;
+       --  Proves final signs match the intended result after the unsigned
+       --  division is done.
+ 
+       procedure Prove_Z_Low
+       with
+         Ghost,
+         Pre  => Z /= 0
+           and then D'Initialized
+           and then Hi (abs Z) = 0
+           and then Lo (abs Z) = Zlo
+           and then Mult =
+             Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (2)))
+                           + Big_2xxSingle * Big (Double_Uns (D (3)))
+                                           + Big (Double_Uns (D (4)))
+           and then D (2) < Zlo
+           and then Quot = (Big (X) * Big (Y)) / Big (Z)
+           and then Big_R = (Big (X) * Big (Y)) rem Big (Z)
+           and then T1 = D (2) & D (3)
+           and then T2 = Lo (T1 rem Zlo) & D (4)
+           and then Qu = Lo (T1 / Zlo) & Lo (T2 / Zlo)
+           and then Ru = T2 rem Zlo,
+         Post => Big (Qu) = abs Quot
+           and then Big (Ru) = abs Big_R;
+       --  Proves the case where the divisor is only one digit
+ 
+       ----------------------------
+       -- Prove_Dividend_Scaling --
+       ----------------------------
+ 
+       procedure Prove_Dividend_Scaling is
+       begin
+          Lemma_Hi_Lo (D (1) & D (2), D (1), D (2));
+          pragma Assert (Mult * Big_2xx (Scale) =
+            Big_2xxSingle
+              * Big_2xxSingle * Big_2xx (Scale) * Big (D (1) & D (2))
+              + Big_2xxSingle * Big_2xx (Scale) * Big (Double_Uns (D (3)))
+                              + Big_2xx (Scale) * Big (Double_Uns (D (4))));
+          pragma Assert (Big_2xx (Scale) > 0);
+          Lemma_Lt_Mult (Big (Double_Uns (D (3))), Big_2xxSingle,
+                         Big_2xx (Scale), Big_2xxDouble);
+          Lemma_Lt_Mult (Big (Double_Uns (D (4))), Big_2xxSingle,
+                         Big_2xx (Scale), Big_2xxDouble);
+          Lemma_Mult_Commutation (2 ** Scale, D (1) & D (2), T1);
+          declare
+             Big_D12 : constant Big_Integer :=
+               Big_2xx (Scale) * Big (D (1) & D (2));
+             Big_T1  : constant Big_Integer := Big (T1);
+          begin
+             pragma Assert (Big_D12 = Big_T1);
+             pragma Assert (Big_2xxSingle * Big_2xxSingle * Big_D12
+                            = Big_2xxSingle * Big_2xxSingle * Big_T1);
+          end;
+          Lemma_Mult_Commutation (2 ** Scale, Double_Uns (D (3)), T2);
+          declare
+             Big_D3 : constant Big_Integer :=
+               Big_2xx (Scale) * Big (Double_Uns (D (3)));
+             Big_T2 : constant Big_Integer := Big (T2);
+          begin
+             pragma Assert (Big_D3 = Big_T2);
+             pragma Assert (Big_2xxSingle * Big_D3 = Big_2xxSingle * Big_T2);
+          end;
+          Lemma_Mult_Commutation (2 ** Scale, Double_Uns (D (4)), T3);
+          declare
+             Big_D4 : constant Big_Integer :=
+               Big_2xx (Scale) * Big (Double_Uns (D (4)));
+             Big_T3 : constant Big_Integer := Big (T3);
+          begin
+             pragma Assert (Big_D4 = Big_T3);
+          end;
+          pragma Assert (Mult * Big_2xx (Scale) =
+            Big_2xxSingle * Big_2xxSingle * Big (T1)
+                          + Big_2xxSingle * Big (T2)
+                                          + Big (T3));
+          Lemma_Hi_Lo (T1, Hi (T1), Lo (T1));
+          Lemma_Hi_Lo (T2, Hi (T2), Lo (T2));
+          Lemma_Hi_Lo (T3, Hi (T3), Lo (T3));
+          pragma Assert (Double_Uns (Lo (T1) or Hi (T2)) =
+                           Double_Uns (Lo (T1)) + Double_Uns (Hi (T2)));
+          pragma Assert (Double_Uns (Lo (T2) or Hi (T3)) =
+                           Double_Uns (Lo (T2)) + Double_Uns (Hi (T3)));
+       end Prove_Dividend_Scaling;
+ 
+       --------------------------
+       -- Prove_Multiplication --
+       --------------------------
+ 
+       procedure Prove_Multiplication (Q : Single_Uns) is
+       begin
+          Lemma_Hi_Lo (Zu, Hi (Zu), Lo (Zu));
+          Lemma_Hi_Lo (T1, Hi (T1), S3);
+          Lemma_Hi_Lo (T2, Hi (T2), Lo (T2));
+          Lemma_Hi_Lo (T3, Hi (T3), S2);
+          Lemma_Mult_Commutation (Double_Uns (Q), Double_Uns (Lo (Zu)), T1);
+          Lemma_Mult_Commutation (Double_Uns (Q), Double_Uns (Hi (Zu)), T2);
+          pragma Assert (Big (Double_Uns (Q)) * Big (Zu) =
+                           Big_2xxSingle * Big (T2) + Big (T1));
+          pragma Assert (Big (Double_Uns (Q)) * Big (Zu) =
+            Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (Hi (T2)))
+          + Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (Hi (T3)))
+                          + Big_2xxSingle * Big (Double_Uns (S2))
+                                          + Big (Double_Uns (S3)));
+          pragma Assert (Double_Uns (Hi (T3)) + Hi (T2) = Double_Uns (S1));
+          Lemma_Add_Commutation (Double_Uns (Hi (T3)), Hi (T2));
+          pragma Assert
+            (Big (Double_Uns (Hi (T3))) + Big (Double_Uns (Hi (T2))) =
+               Big (Double_Uns (S1)));
+       end Prove_Multiplication;
+ 
+       -----------------------------
+       -- Prove_Negative_Dividend --
+       -----------------------------
+ 
+       procedure Prove_Negative_Dividend is
+       begin
+          Lemma_Mult_Non_Positive (Big (X), Big (Y));
+       end Prove_Negative_Dividend;
+ 
+       --------------------
+       -- Prove_Overflow --
+       --------------------
+ 
+       procedure Prove_Overflow is
+       begin
+          Lemma_Div_Ge (Mult, Big_2xxDouble, Big (Double_Uns'(abs Z)));
+          Lemma_Abs_Commutation (Z);
+          Lemma_Abs_Div_Commutation (Big (X) * Big (Y), Big (Z));
+       end Prove_Overflow;
+ 
+       -----------------------------
+       -- Prove_Positive_Dividend --
+       -----------------------------
+ 
+       procedure Prove_Positive_Dividend is
+       begin
+          Lemma_Mult_Non_Negative (Big (X), Big (Y));
+       end Prove_Positive_Dividend;
+ 
+       ---------------------------------
+       -- Prove_Qd_Calculation_Part_1 --
+       ---------------------------------
+ 
+       procedure Prove_Qd_Calculation_Part_1 (J : Integer) is
+       begin
+          Lemma_Hi_Lo (D (J) & D (J + 1), D (J), D (J + 1));
+          Lemma_Lt_Commutation (Double_Uns (D (J)), Double_Uns (Zhi));
+          Lemma_Gt_Mult (Big (Double_Uns (Zhi)),
+                         Big (Double_Uns (D (J))) + 1,
+                         Big_2xxSingle, Big (D (J) & D (J + 1)));
+          Lemma_Div_Lt
+            (Big (D (J) & D (J + 1)), Big_2xxSingle, Big (Double_Uns (Zhi)));
+          Lemma_Div_Commutation (D (J) & D (J + 1), Double_Uns (Zhi));
+          Lemma_Lo_Is_Ident ((D (J) & D (J + 1)) / Zhi);
+          Lemma_Div_Definition (D (J) & D (J + 1), Zhi, Double_Uns (Qd (J)),
+                                (D (J) & D (J + 1)) rem Zhi);
+          Lemma_Lt_Commutation
+            ((D (J) & D (J + 1)) rem Zhi, Double_Uns (Zhi));
+          Lemma_Gt_Mult
+            ((Big (Double_Uns (Qd (J))) + 1) * Big (Double_Uns (Zhi)),
+             Big (D (J) & D (J + 1)) + 1, Big_2xxSingle,
+             Big3 (D (J), D (J + 1), D (J + 2)));
+          Lemma_Hi_Lo (Zu, Zhi, Lo (Zu));
+          Lemma_Gt_Mult (Big (Zu), Big_2xxSingle * Big (Double_Uns (Zhi)),
+                         Big (Double_Uns (Qd (J))) + 1,
+                         Big3 (D (J), D (J + 1), D (J + 2)));
+          Lemma_Div_Lt (Big3 (D (J), D (J + 1), D (J + 2)),
+                        Big (Double_Uns (Qd (J))) + 1, Big (Zu));
+       end Prove_Qd_Calculation_Part_1;
+ 
+       ---------------------
+       -- Prove_Q_Too_Big --
+       ---------------------
+ 
+       procedure Prove_Q_Too_Big is
+       begin
+          pragma Assert (Big_Q = Big_2xxDouble or Big_Q = -Big_2xxDouble);
+          Lemma_Not_In_Range_Big2xx64;
+       end Prove_Q_Too_Big;
+ 
+       ---------------------
+       -- Prove_Rescaling --
+       ---------------------
+ 
+       procedure Prove_Rescaling is
+       begin
+          Lemma_Div_Lt (Big (Ru), Big (Double_Uns'(abs Z)), Big_2xx (Scale));
+          Lemma_Div_Eq (Mult, Big (Double_Uns'(abs Z)) * Big (Qu),
+                        Big_2xx (Scale), Big (Ru));
+          Lemma_Rev_Div_Definition (Mult, Big (Double_Uns'(abs Z)),
+                                    Big (Qu), Big (Ru) / Big_2xx (Scale));
+          Lemma_Abs_Div_Commutation (Big (X) * Big (Y), Big (Z));
+          Lemma_Abs_Rem_Commutation (Big (X) * Big (Y), Big (Z));
+          Lemma_Abs_Commutation (Z);
+          Lemma_Shift_Right (Ru, Scale);
+       end Prove_Rescaling;
+ 
+       -------------------------
+       -- Prove_Rounding_Case --
+       -------------------------
+ 
+       procedure Prove_Rounding_Case is
+       begin
+          if Same_Sign (Big (X) * Big (Y), Big (Z)) then
+             null;
+          end if;
+       end Prove_Rounding_Case;
+ 
+       ------------------
+       -- Prove_Sign_R --
+       ------------------
+ 
+       procedure Prove_Sign_R is
+       begin
+          pragma Assert (In_Double_Int_Range (Big (Z)));
+       end Prove_Sign_R;
+ 
+       -----------------
+       -- Prove_Signs --
+       -----------------
+ 
+       procedure Prove_Signs is null;
+ 
+       -----------------
+       -- Prove_Z_Low --
+       -----------------
+ 
+       procedure Prove_Z_Low is
+       begin
+          Lemma_Hi_Lo (T1, D (2), D (3));
+          Lemma_Add_Commutation (Double_Uns (D (2)), 1);
+          pragma Assert
+            (Big (Double_Uns (D (2))) + 1 <= Big (Double_Uns (Zlo)));
+          Lemma_Div_Definition (T1, Zlo, T1 / Zlo, T1 rem Zlo);
+          pragma Assert (Double_Uns (Lo (T1 rem Zlo)) = T1 rem Zlo);
+          Lemma_Hi_Lo (T2, Lo (T1 rem Zlo), D (4));
+          pragma Assert (T1 rem Zlo + Double_Uns'(1) <= Double_Uns (Zlo));
+          Lemma_Add_Commutation (T1 rem Zlo, 1);
+          pragma Assert (Big (T1 rem Zlo) + 1 <= Big (Double_Uns (Zlo)));
+          Lemma_Div_Definition (T2, Zlo, T2 / Zlo, Ru);
+          pragma Assert
+            (Mult = Big (Double_Uns (Zlo)) *
+               (Big_2xxSingle * Big (T1 / Zlo) + Big (T2 / Zlo)) + Big (Ru));
+          Lemma_Div_Lt (Big (T1), Big_2xxSingle, Big (Double_Uns (Zlo)));
+          Lemma_Div_Commutation (T1, Double_Uns (Zlo));
+          Lemma_Lo_Is_Ident (T1 / Zlo);
+          Lemma_Div_Lt (Big (T2), Big_2xxSingle, Big (Double_Uns (Zlo)));
+          Lemma_Div_Commutation (T2, Double_Uns (Zlo));
+          Lemma_Lo_Is_Ident (T2 / Zlo);
+          Lemma_Hi_Lo (Qu, Lo (T1 / Zlo), Lo (T2 / Zlo));
+          Lemma_Substitution (Mult, Big (Double_Uns (Zlo)),
+                              Big_2xxSingle * Big (T1 / Zlo) + Big (T2 / Zlo),
+                              Big (Qu), Big (Ru));
+          Lemma_Lt_Commutation (Ru, Double_Uns (Zlo));
+          Lemma_Rev_Div_Definition
+            (Mult, Big (Double_Uns (Zlo)), Big (Qu), Big (Ru));
+          pragma Assert (Double_Uns (Zlo) = abs Z);
+          Lemma_Abs_Commutation (Z);
+          Lemma_Abs_Div_Commutation (Big (X) * Big (Y), Big (Z));
+          Lemma_Abs_Rem_Commutation (Big (X) * Big (Y), Big (Z));
+       end Prove_Z_Low;
+ 
+    --  Start of processing for Scaled_Divide
+ 
     begin
+       if Z = 0 then
+          Raise_Error;
+       end if;
+ 
+       Quot := Big (X) * Big (Y) / Big (Z);
+       Big_R := Big (X) * Big (Y) rem Big (Z);
+       if Round then
+          Big_Q := Round_Quotient (Big (X) * Big (Y), Big (Z), Quot, Big_R);
+       else
+          Big_Q := Quot;
+       end if;
+ 
        --  First do the multiplication, giving the four digit dividend
  
+       Lemma_Abs_Mult_Commutation (Big (X), Big (Y));
+       Lemma_Abs_Commutation (X);
+       Lemma_Abs_Commutation (Y);
+       Lemma_Mult_Decomposition (Mult, Xu, Yu, Xhi, Xlo, Yhi, Ylo);
+ 
        T1 := Xlo * Ylo;
        D (4) := Lo (T1);
        D (3) := Hi (T1);
  
+       Lemma_Hi_Lo (T1, D (3), D (4));
+ 
        if Yhi /= 0 then
           T1 := Xlo * Yhi;
+ 
+          Lemma_Hi_Lo (T1, Hi (T1), Lo (T1));
+ 
           T2 := D (3) + Lo (T1);
+ 
+          Lemma_Mult_Distribution (Big_2xxSingle,
+                                   Big (Double_Uns (D (3))),
+                                   Big (Double_Uns (Lo (T1))));
+          Lemma_Hi_Lo (T2, Hi (T2), Lo (T2));
+ 
           D (3) := Lo (T2);
           D (2) := Hi (T1) + Hi (T2);
  
+          pragma Assert (Double_Uns (Hi (T1)) + Hi (T2) = Double_Uns (D (2)));
+          Lemma_Add_Commutation (Double_Uns (Hi (T1)), Hi (T2));
+          pragma Assert
+            (Big (Double_Uns (Hi (T1))) + Big (Double_Uns (Hi (T2))) =
+               Big (Double_Uns (D (2))));
+ 
           if Xhi /= 0 then
              T1 := Xhi * Ylo;
+ 
+             Lemma_Hi_Lo (T1, Hi (T1), Lo (T1));
+ 
              T2 := D (3) + Lo (T1);
+ 
+             Lemma_Hi_Lo (T2, Hi (T2), Lo (T2));
+ 
              D (3) := Lo (T2);
              T3 := D (2) + Hi (T1);
+ 
+             Lemma_Add_Commutation (T3, Hi (T2));
+ 
              T3 := T3 + Hi (T2);
!             T2 := Double_Uns'(Xhi * Yhi);
  
!             Lemma_Hi_Lo (T2, Hi (T2), Lo (T2));
!             Lemma_Add_Commutation (T3, Lo (T2));
! 
!             T1 := T3 + Lo (T2);
              D (2) := Lo (T1);
  
+             Lemma_Hi_Lo (T1, Hi (T1), D (2));
+ 
+             D (1) := Hi (T2) + Hi (T1);
+ 
+             pragma Assert
+               (Double_Uns (Hi (T2)) + Hi (T1) = Double_Uns (D (1)));
+             Lemma_Add_Commutation (Double_Uns (Hi (T2)), Hi (T1));
+             pragma Assert
+               (Big (Double_Uns (Hi (T2))) + Big (Double_Uns (Hi (T1))) =
+                    Big (Double_Uns (D (1))));
+ 
+             pragma Assert (Mult =
+               Big_2xxSingle
+                 * Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (1)))
+                 + Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (2)))
+                                 + Big_2xxSingle * Big (Double_Uns (D (3)))
+                                                 + Big (Double_Uns (D (4))));
+ 
           else
              D (1) := 0;
           end if;
  
+          pragma Assert (Mult =
+            Big_2xxSingle
+              * Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (1)))
+              + Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (2)))
+                              + Big_2xxSingle * Big (Double_Uns (D (3)))
+                                              + Big (Double_Uns (D (4))));
+ 
        else
           if Xhi /= 0 then
              T1 := Xhi * Ylo;
+ 
+             Lemma_Hi_Lo (T1, Hi (T1), Lo (T1));
+ 
              T2 := D (3) + Lo (T1);
+ 
+             Lemma_Mult_Distribution (Big_2xxSingle,
+                                      Big (Double_Uns (D (3))),
+                                      Big (Double_Uns (Lo (T1))));
+             Lemma_Hi_Lo (T2, Hi (T2), Lo (T2));
+ 
              D (3) := Lo (T2);
              D (2) := Hi (T1) + Hi (T2);
  
+             pragma Assert
+               (Double_Uns (Hi (T1)) + Hi (T2) = Double_Uns (D (2)));
+             Lemma_Add_Commutation (Double_Uns (Hi (T1)), Hi (T2));
+             pragma Assert
+               (Big (Double_Uns (Hi (T1))) + Big (Double_Uns (Hi (T2))) =
+                  Big (Double_Uns (D (2))));
+             pragma Assert (Mult =
+               Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (2)))
+                             + Big_2xxSingle * Big (Double_Uns (D (3)))
+                                             + Big (Double_Uns (D (4))));
           else
              D (2) := 0;
+ 
+             pragma Assert (Mult =
+               Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (2)))
+                             + Big_2xxSingle * Big (Double_Uns (D (3)))
+                                             + Big (Double_Uns (D (4))));
           end if;
  
           D (1) := 0;
        end if;
  
+       pragma Assert (Mult =
+         Big_2xxSingle
+           * Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (1)))
+           + Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (2)))
+                           + Big_2xxSingle * Big (Double_Uns (D (3)))
+                                           + Big (Double_Uns (D (4))));
+ 
        --  Now it is time for the dreaded multiple precision division. First an
        --  easy case, check for the simple case of a one digit divisor.
  
        if Zhi = 0 then
           if D (1) /= 0 or else D (2) >= Zlo then
+             if D (1) > 0 then
+                pragma Assert
+                  (Mult >= Big_2xxSingle * Big_2xxSingle * Big_2xxSingle
+                           * Big (Double_Uns (D (1))));
+                pragma Assert (Mult >= Big_2xxDouble * Big_2xxSingle);
+                Lemma_Ge_Commutation (2 ** Single_Size, Zu);
+                pragma Assert (Mult >= Big_2xxDouble * Big (Zu));
+             else
+                Lemma_Ge_Commutation (Double_Uns (D (2)), Zu);
+                pragma Assert (Mult >= Big_2xxDouble * Big (Zu));
+             end if;
+ 
+             Prove_Overflow;
              Raise_Error;
  
           --  Here we are dividing at most three digits by one digit
*************** package body System.Arith_Double is
*** 456,466 ****
--- 2272,2287 ----
  
              Qu := Lo (T1 / Zlo) & Lo (T2 / Zlo);
              Ru := T2 rem Zlo;
+ 
+             Prove_Z_Low;
           end if;
  
        --  If divisor is double digit and dividend is too large, raise error
  
        elsif (D (1) & D (2)) >= Zu then
+          Lemma_Hi_Lo (D (1) & D (2), D (1), D (2));
+          Lemma_Ge_Commutation (D (1) & D (2), Zu);
+          Prove_Overflow;
           Raise_Error;
  
        --  This is the complex case where we definitely have a double digit
*************** package body System.Arith_Double is
*** 473,560 ****
           --  First normalize the divisor so that it has the leading bit on.
           --  We do this by finding the appropriate left shift amount.
  
!          Shift := Single_Size / 2;
!          Mask  := Shift_Left (2 ** (Single_Size / 2) - 1, Shift);
           Scale := 0;
  
!          while Shift /= 0 loop
!             if (Hi (Zu) and Mask) = 0 then
!                Scale := Scale + Shift;
!                Zu := Shift_Left (Zu, Shift);
!             end if;
  
!             Shift := Shift / 2;
!             Mask := Shift_Left (Mask, Shift);
           end loop;
  
           Zhi := Hi (Zu);
           Zlo := Lo (Zu);
  
!          pragma Assert (Zhi /= 0);
!          --  We have Hi(Zu)/=0 before normalization. The sequence of Shift_Left
!          --  operations results in the leading bit of Zu being 1 by moving the
!          --  leftmost 1-bit in Zu to leading position, thus Zhi=Hi(Zu)/=0 here.
  
           --  Note that when we scale up the dividend, it still fits in four
           --  digits, since we already tested for overflow, and scaling does
           --  not change the invariant that (D (1) & D (2)) < Zu.
  
           T1 := Shift_Left (D (1) & D (2), Scale);
           D (1) := Hi (T1);
-          T2 := Shift_Left (0 & D (3), Scale);
           D (2) := Lo (T1) or Hi (T2);
-          T3 := Shift_Left (0 & D (4), Scale);
           D (3) := Lo (T2) or Hi (T3);
           D (4) := Lo (T3);
  
!          --  Loop to compute quotient digits, runs twice for Qd(1) and Qd(2)
  
!          for J in 0 .. 1 loop
  
!             --  Compute next quotient digit. We have to divide three digits by
!             --  two digits. We estimate the quotient by dividing the leading
!             --  two digits by the leading digit. Given the scaling we did above
!             --  which ensured the first bit of the divisor is set, this gives
!             --  an estimate of the quotient that is at most two too high.
  
!             Qd (J + 1) := (if D (J + 1) = Zhi
!                            then 2 ** Single_Size - 1
!                            else Lo ((D (J + 1) & D (J + 2)) / Zhi));
  
!             --  Compute amount to subtract
  
!             T1 := Qd (J + 1) * Zlo;
!             T2 := Qd (J + 1) * Zhi;
!             S3 := Lo (T1);
!             T1 := Hi (T1) + Lo (T2);
!             S2 := Lo (T1);
!             S1 := Hi (T1) + Hi (T2);
  
!             --  Adjust quotient digit if it was too high
  
!             --  We use the version of the algorithm in the 2nd Edition of
!             --  "The Art of Computer Programming". This had a bug not
!             --  discovered till 1995, see Vol 2 errata:
!             --     http://www-cs-faculty.stanford.edu/~uno/err2-2e.ps.gz.
!             --  Under rare circumstances the expression in the test could
!             --  overflow. This version was further corrected in 2005, see
!             --  Vol 2 errata:
!             --     http://www-cs-faculty.stanford.edu/~uno/all2-pre.ps.gz.
!             --  This implementation is not impacted by these bugs, due to the
!             --  use of a word-size comparison done in function Le3 instead of
!             --  a comparison on two-word integer quantities in the original
!             --  algorithm.
  
!             loop
!                exit when Le3 (S1, S2, S3, D (J + 1), D (J + 2), D (J + 3));
!                Qd (J + 1) := Qd (J + 1) - 1;
!                Sub3 (S1, S2, S3, 0, Zhi, Zlo);
!             end loop;
  
!             --  Now subtract S1&S2&S3 from D1&D2&D3 ready for next step
  
!             Sub3 (D (J + 1), D (J + 2), D (J + 3), S1, S2, S3);
!          end loop;
  
           --  The two quotient digits are now set, and the remainder of the
           --  scaled division is in D3&D4. To get the remainder for the
--- 2294,2647 ----
           --  First normalize the divisor so that it has the leading bit on.
           --  We do this by finding the appropriate left shift amount.
  
!          Shift := Single_Size;
!          Mask  := Single_Uns'Last;
           Scale := 0;
  
!          Inter := 0;
!          pragma Assert (Big_2xx (Scale) = 1);
  
!          while Shift > 1 loop
!             pragma Loop_Invariant (Scale <= Single_Size - Shift);
!             pragma Loop_Invariant ((Hi (Zu) and Mask) /= 0);
!             pragma Loop_Invariant
!               (Mask = Shift_Left (Single_Uns'Last, Single_Size - Shift));
!             pragma Loop_Invariant (Zu = Shift_Left (abs Z, Scale));
!             pragma Loop_Invariant (Big (Zu) =
!               Big (Double_Uns'(abs Z)) * Big_2xx (Scale));
!             pragma Loop_Invariant (Inter in 0 .. Log_Single_Size - 1);
!             pragma Loop_Invariant (Shift = 2 ** (Log_Single_Size - Inter));
!             pragma Loop_Invariant (Shift mod 2 = 0);
! 
!             declare
!                --  Local ghost variables
! 
!                Shift_Prev : constant Natural := Shift with Ghost;
!                Mask_Prev  : constant Single_Uns := Mask with Ghost;
!                Zu_Prev    : constant Double_Uns := Zu with Ghost;
! 
!                --  Local lemmas
! 
!                procedure Prove_Power
!                with
!                  Ghost,
!                  Pre  => Inter in 0 .. Log_Single_Size - 1
!                    and then Shift = 2 ** (Log_Single_Size - Inter),
!                  Post => Shift / 2 = 2 ** (Log_Single_Size - (Inter + 1))
!                    and then (Shift = 2 or (Shift / 2) mod 2 = 0);
! 
!                procedure Prove_Shift_Progress
!                with
!                  Ghost,
!                  Pre  => Shift <= Single_Size / 2
!                    and then Shift_Prev = 2 * Shift
!                    and then Mask_Prev =
!                      Shift_Left (Single_Uns'Last, Single_Size - Shift_Prev)
!                    and then Mask =
!                      Shift_Left (Single_Uns'Last,
!                                  Single_Size - Shift_Prev + Shift),
!                  Post => Mask_Prev =
!                      Shift_Left (Single_Uns'Last, Single_Size - 2 * Shift)
!                    and then Mask =
!                      Shift_Left (Single_Uns'Last, Single_Size - Shift);
! 
!                procedure Prove_Shifting
!                with
!                  Ghost,
!                  Pre  => Shift <= Single_Size / 2
!                    and then Zu = Shift_Left (Zu_Prev, Shift)
!                    and then Mask_Prev =
!                      Shift_Left (Single_Uns'Last, Single_Size - 2 * Shift)
!                    and then Mask =
!                      Shift_Left (Single_Uns'Last, Single_Size - Shift)
!                    and then (Hi (Zu_Prev) and Mask_Prev and not Mask) /= 0,
!                  Post => (Hi (Zu) and Mask) /= 0;
! 
!                -----------------------------
!                -- Local lemma null bodies --
!                -----------------------------
! 
!                procedure Prove_Power is null;
!                procedure Prove_Shifting is null;
!                procedure Prove_Shift_Progress is null;
! 
!             begin
!                Prove_Power;
! 
!                Shift := Shift / 2;
! 
!                Inter := Inter + 1;
!                pragma Assert (Shift_Prev = 2 * Shift);
! 
!                Mask := Shift_Left (Mask, Shift);
! 
!                Lemma_Double_Shift
!                  (Single_Uns'Last, Single_Size - Shift_Prev, Shift);
!                Prove_Shift_Progress;
! 
!                if (Hi (Zu) and Mask) = 0 then
!                   Zu := Shift_Left (Zu, Shift);
! 
!                   Prove_Shifting;
!                   pragma Assert (Big (Zu_Prev) =
!                     Big (Double_Uns'(abs Z)) * Big_2xx (Scale));
!                   Lemma_Shift_Without_Drop (Zu_Prev, Zu, Mask, Shift);
!                   Lemma_Substitution
!                     (Big (Zu), Big_2xx (Shift),
!                      Big (Zu_Prev), Big (Double_Uns'(abs Z)) * Big_2xx (Scale),
!                      0);
!                   Lemma_Powers_Of_2 (Shift, Scale);
!                   Lemma_Substitution
!                     (Big (Zu), Big (Double_Uns'(abs Z)),
!                      Big_2xx (Shift) * Big_2xx (Scale),
!                      Big_2xx (Shift + Scale), 0);
!                   Lemma_Double_Shift (abs Z, Scale, Shift);
! 
!                   Scale := Scale + Shift;
! 
!                   pragma Assert (Zu = Shift_Left (abs Z, Scale));
!                   pragma Assert
!                     (Big (Zu) = Big (Double_Uns'(abs Z)) * Big_2xx (Scale));
!                end if;
! 
!                pragma Assert
!                  (Big (Zu) = Big (Double_Uns'(abs Z)) * Big_2xx (Scale));
!             end;
           end loop;
  
           Zhi := Hi (Zu);
           Zlo := Lo (Zu);
  
!          pragma Assert (Shift = 1);
!          pragma Assert (Mask = Shift_Left (Single_Uns'Last, Single_Size - 1));
!          pragma Assert ((Zhi and Mask) /= 0);
!          pragma Assert (Zhi >= 2 ** (Single_Size - 1));
!          pragma Assert (Big (Zu) = Big (Double_Uns'(abs Z)) * Big_2xx (Scale));
!          --  We have Hi (Zu) /= 0 before normalization. The sequence of
!          --  Shift_Left operations results in the leading bit of Zu being 1 by
!          --  moving the leftmost 1-bit in Zu to leading position, thus
!          --  Zhi = Hi (Zu) >= 2 ** (Single_Size - 1) here.
  
           --  Note that when we scale up the dividend, it still fits in four
           --  digits, since we already tested for overflow, and scaling does
           --  not change the invariant that (D (1) & D (2)) < Zu.
  
+          Lemma_Lt_Commutation (D (1) & D (2), abs Z);
+          Lemma_Lt_Mult (Big (D (1) & D (2)),
+                         Big (Double_Uns'(abs Z)), Big_2xx (Scale),
+                         Big_2xxDouble);
+ 
           T1 := Shift_Left (D (1) & D (2), Scale);
+          T2 := Shift_Left (Double_Uns (D (3)), Scale);
+          T3 := Shift_Left (Double_Uns (D (4)), Scale);
+ 
+          Prove_Dividend_Scaling;
+ 
           D (1) := Hi (T1);
           D (2) := Lo (T1) or Hi (T2);
           D (3) := Lo (T2) or Hi (T3);
           D (4) := Lo (T3);
  
!          pragma Assert (Mult * Big_2xx (Scale) =
!            Big_2xxSingle
!              * Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (1)))
!              + Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (2)))
!                              + Big_2xxSingle * Big (Double_Uns (D (3)))
!                                              + Big (Double_Uns (D (4))));
!          Lemma_Substitution (Big_2xxDouble * Big (Zu), Big_2xxDouble, Big (Zu),
!                              Big (Double_Uns'(abs Z)) * Big_2xx (Scale), 0);
!          Lemma_Lt_Mult (Mult, Big_2xxDouble * Big (Double_Uns'(abs Z)),
!                         Big_2xx (Scale), Big_2xxDouble * Big (Zu));
!          Lemma_Div_Lt (Mult * Big_2xx (Scale), Big (Zu), Big_2xxDouble);
!          Lemma_Substitution
!            (Mult * Big_2xx (Scale), Big_2xxSingle,
!             Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (1)))
!                           + Big_2xxSingle * Big (Double_Uns (D (2)))
!                                           + Big (Double_Uns (D (3))),
!             Big3 (D (1), D (2), D (3)),
!             Big (Double_Uns (D (4))));
  
!          --  Loop to compute quotient digits, runs twice for Qd (1) and Qd (2)
  
!          declare
!             --  Local lemmas
  
!             procedure Prove_First_Iteration (X1, X2, X3, X4 : Single_Uns)
!             with
!               Ghost,
!               Pre  => X1 = 0,
!               Post =>
!                 Big_2xxSingle * Big3 (X1, X2, X3) + Big (Double_Uns (X4))
!                   = Big3 (X2, X3, X4);
  
!             ---------------------------
!             -- Prove_First_Iteration --
!             ---------------------------
  
!             procedure Prove_First_Iteration (X1, X2, X3, X4 : Single_Uns) is
!             null;
  
!             --  Local ghost variables
  
!             Qd1  : Single_Uns := 0 with Ghost;
!             D123 : constant Big_Integer := Big3 (D (1), D (2), D (3))
!               with Ghost;
  
!          begin
!             for J in 1 .. 2 loop
!                Lemma_Hi_Lo (D (J) & D (J + 1), D (J), D (J + 1));
!                pragma Assert (Big (D (J) & D (J + 1)) < Big (Zu));
  
!                --  Compute next quotient digit. We have to divide three digits
!                --  by two digits. We estimate the quotient by dividing the
!                --  leading two digits by the leading digit. Given the scaling
!                --  we did above which ensured the first bit of the divisor is
!                --  set, this gives an estimate of the quotient that is at most
!                --  two too high.
  
!                if D (J) > Zhi then
!                   Lemma_Lt_Commutation (Zu, D (J) & D (J + 1));
!                   pragma Assert (False);
! 
!                elsif D (J) = Zhi then
!                   Qd (J) := Single_Uns'Last;
! 
!                   Lemma_Gt_Mult (Big (Zu), Big (D (J) & D (J + 1)) + 1,
!                                  Big_2xxSingle,
!                                  Big3 (D (J), D (J + 1), D (J + 2)));
!                   Lemma_Div_Lt
!                     (Big3 (D (J), D (J + 1), D (J + 2)),
!                      Big_2xxSingle, Big (Zu));
! 
!                else
!                   Qd (J) := Lo ((D (J) & D (J + 1)) / Zhi);
! 
!                   Prove_Qd_Calculation_Part_1 (J);
!                end if;
! 
!                Lemma_Gt_Mult
!                  (Big (Double_Uns (Qd (J))),
!                   Big3 (D (J), D (J + 1), D (J + 2)) / Big (Zu),
!                   Big (Zu), Big3 (D (J), D (J + 1), D (J + 2)) - Big (Zu));
! 
!                --  Compute amount to subtract
! 
!                T1 := Qd (J) * Zlo;
!                T2 := Qd (J) * Zhi;
!                S3 := Lo (T1);
!                T3 := Hi (T1) + Lo (T2);
!                S2 := Lo (T3);
!                S1 := Hi (T3) + Hi (T2);
! 
!                Prove_Multiplication (Qd (J));
! 
!                --  Adjust quotient digit if it was too high
! 
!                --  We use the version of the algorithm in the 2nd Edition
!                --  of "The Art of Computer Programming". This had a bug not
!                --  discovered till 1995, see Vol 2 errata:
!                --     http://www-cs-faculty.stanford.edu/~uno/err2-2e.ps.gz.
!                --  Under rare circumstances the expression in the test could
!                --  overflow. This version was further corrected in 2005, see
!                --  Vol 2 errata:
!                --     http://www-cs-faculty.stanford.edu/~uno/all2-pre.ps.gz.
!                --  This implementation is not impacted by these bugs, due
!                --  to the use of a word-size comparison done in function Le3
!                --  instead of a comparison on two-word integer quantities in
!                --  the original algorithm.
! 
!                Lemma_Hi_Lo_3 (Zu, Zhi, Zlo);
! 
!                while not Le3 (S1, S2, S3, D (J), D (J + 1), D (J + 2)) loop
!                   pragma Loop_Invariant (Qd (J)'Initialized);
!                   pragma Loop_Invariant
!                     (Big3 (S1, S2, S3) = Big (Double_Uns (Qd (J))) * Big (Zu));
!                   pragma Assert (Big3 (S1, S2, S3) > 0);
!                   if Qd (J) = 0 then
!                      pragma Assert (Big3 (S1, S2, S3) = 0);
!                      pragma Assert (False);
!                   end if;
!                   Lemma_Ge_Commutation (Double_Uns (Qd (J)), 1);
!                   Lemma_Ge_Mult
!                     (Big (Double_Uns (Qd (J))), 1, Big (Zu), Big (Zu));
! 
!                   Sub3 (S1, S2, S3, 0, Zhi, Zlo);
! 
!                   pragma Assert
!                     (Big3 (S1, S2, S3) >
!                        Big3 (D (J), D (J + 1), D (J + 2)) - Big (Zu));
!                   Lemma_Subtract_Commutation (Double_Uns (Qd (J)), 1);
!                   Lemma_Substitution (Big3 (S1, S2, S3), Big (Zu),
!                                       Big (Double_Uns (Qd (J))) - 1,
!                                       Big (Double_Uns (Qd (J) - 1)), 0);
! 
!                   Qd (J) := Qd (J) - 1;
! 
!                   pragma Assert
!                     (Big3 (S1, S2, S3) = Big (Double_Uns (Qd (J))) * Big (Zu));
!                end loop;
! 
!                --  Now subtract S1&S2&S3 from D1&D2&D3 ready for next step
! 
!                pragma Assert
!                  (Big3 (S1, S2, S3) = Big (Double_Uns (Qd (J))) * Big (Zu));
!                pragma Assert (Big3 (S1, S2, S3) >
!                                 Big3 (D (J), D (J + 1), D (J + 2)) - Big (Zu));
!                Inline_Le3 (S1, S2, S3, D (J), D (J + 1), D (J + 2));
! 
!                Sub3 (D (J), D (J + 1), D (J + 2), S1, S2, S3);
! 
!                pragma Assert (Big3 (D (J), D (J + 1), D (J + 2)) < Big (Zu));
!                if D (J) > 0 then
!                   pragma Assert
!                     (Big_2xxSingle * Big_2xxSingle = Big_2xxDouble);
!                   pragma Assert (Big3 (D (J), D (J + 1), D (J + 2)) =
!                     Big_2xxSingle
!                       * Big_2xxSingle * Big (Double_Uns (D (J)))
!                       + Big_2xxSingle * Big (Double_Uns (D (J + 1)))
!                                       + Big (Double_Uns (D (J + 2))));
!                   pragma Assert (Big3 (D (J), D (J + 1), D (J + 2)) =
!                     Big_2xxDouble * Big (Double_Uns (D (J)))
!                   + Big_2xxSingle * Big (Double_Uns (D (J + 1)))
!                                   + Big (Double_Uns (D (J + 2))));
!                   pragma Assert (Big3 (D (J), D (J + 1), D (J + 2)) >=
!                                    Big_2xxDouble * Big (Double_Uns (D (J))));
!                   Lemma_Ge_Commutation (Double_Uns (D (J)), Double_Uns'(1));
!                   pragma Assert
!                     (Big3 (D (J), D (J + 1), D (J + 2)) >= Big_2xxDouble);
!                   pragma Assert (False);
!                end if;
! 
!                if J = 1 then
!                   Qd1 := Qd (1);
!                   Lemma_Substitution
!                     (Mult * Big_2xx (Scale), Big_2xxSingle, D123,
!                      Big3 (D (1), D (2), D (3)) + Big3 (S1, S2, S3),
!                      Big (Double_Uns (D (4))));
!                   Prove_First_Iteration (D (1), D (2), D (3), D (4));
!                   Lemma_Substitution (Mult * Big_2xx (Scale), Big_2xxSingle,
!                                       Big3 (S1, S2, S3),
!                                       Big (Double_Uns (Qd1)) * Big (Zu),
!                                       Big3 (D (2), D (3), D (4)));
!                else
!                   pragma Assert (Qd1 = Qd (1));
!                   pragma Assert
!                     (Big_2xxSingle * Big_2xxSingle * Big (Double_Uns (D (2)))
!                      = 0);
!                   pragma Assert
!                     (Mult * Big_2xx (Scale) =
!                        Big_2xxSingle * Big (Double_Uns (Qd (1))) * Big (Zu)
!                      + Big3 (S1, S2, S3)
!                      + Big3 (D (2), D (3), D (4)));
!                   pragma Assert
!                     (Mult * Big_2xx (Scale) =
!                        Big_2xxSingle * Big (Double_Uns (Qd (1))) * Big (Zu)
!                                      + Big (Double_Uns (Qd (2))) * Big (Zu)
!                      + Big_2xxSingle * Big (Double_Uns (D (3)))
!                                      + Big (Double_Uns (D (4))));
!                end if;
!             end loop;
!          end;
  
           --  The two quotient digits are now set, and the remainder of the
           --  scaled division is in D3&D4. To get the remainder for the
*************** package body System.Arith_Double is
*** 564,601 ****
           --  for rounding below.
  
           Qu := Qd (1) & Qd (2);
!          Ru := Shift_Right (D (3) & D (4), Scale);
           Zu := Shift_Right (Zu, Scale);
        end if;
  
        --  Deal with rounding case
  
!       if Round and then Ru > (Zu - Double_Uns'(1)) / Double_Uns'(2) then
  
!          --  Protect against wrapping around when rounding, by signaling
!          --  an overflow when the quotient is too large.
  
!          if Qu = Double_Uns'Last then
!             Raise_Error;
!          end if;
  
!          Qu := Qu + Double_Uns'(1);
        end if;
  
        --  Set final signs (RM 4.5.5(27-30))
  
        --  Case of dividend (X * Y) sign positive
  
        if (X >= 0 and then Y >= 0) or else (X < 0 and then Y < 0) then
           R := To_Pos_Int (Ru);
           Q := (if Z > 0 then To_Pos_Int (Qu) else To_Neg_Int (Qu));
  
        --  Case of dividend (X * Y) sign negative
  
        else
           R := To_Neg_Int (Ru);
           Q := (if Z > 0 then To_Neg_Int (Qu) else To_Pos_Int (Qu));
        end if;
     end Scaled_Divide;
  
     ----------
--- 2651,2731 ----
           --  for rounding below.
  
           Qu := Qd (1) & Qd (2);
!          Ru := D (3) & D (4);
! 
!          pragma Assert
!            (Mult * Big_2xx (Scale) =
!               Big_2xxSingle * Big (Double_Uns (Qd (1))) * Big (Zu)
!                             + Big (Double_Uns (Qd (2))) * Big (Zu)
!             + Big_2xxSingle * Big (Double_Uns (D (3)))
!                             + Big (Double_Uns (D (4))));
!          Lemma_Hi_Lo (Qu, Qd (1), Qd (2));
!          Lemma_Hi_Lo (Ru, D (3), D (4));
!          Lemma_Substitution
!            (Mult * Big_2xx (Scale), Big (Zu),
!             Big_2xxSingle * Big (Double_Uns (Qd (1)))
!               + Big (Double_Uns (Qd (2))),
!             Big (Qu), Big (Ru));
!          Prove_Rescaling;
! 
!          Ru := Shift_Right (Ru, Scale);
! 
!          Lemma_Shift_Right (Zu, Scale);
! 
           Zu := Shift_Right (Zu, Scale);
+ 
+          Lemma_Simplify (Big (Double_Uns'(abs Z)), Big_2xx (Scale));
        end if;
  
+       pragma Assert (Big (Ru) = abs Big_R);
+       pragma Assert (Big (Qu) = abs Quot);
+       pragma Assert (Big (Zu) = Big (Double_Uns'(abs Z)));
+ 
        --  Deal with rounding case
  
!       if Round then
!          Prove_Rounding_Case;
  
!          if Ru > (Zu - Double_Uns'(1)) / Double_Uns'(2) then
!             pragma Assert (abs Big_Q = Big (Qu) + 1);
  
!             --  Protect against wrapping around when rounding, by signaling
!             --  an overflow when the quotient is too large.
  
!             if Qu = Double_Uns'Last then
!                Prove_Q_Too_Big;
!                Raise_Error;
!             end if;
! 
!             Lemma_Add_One (Qu);
! 
!             Qu := Qu + Double_Uns'(1);
!          end if;
        end if;
  
+       pragma Assert (Big (Qu) = abs Big_Q);
+ 
        --  Set final signs (RM 4.5.5(27-30))
  
        --  Case of dividend (X * Y) sign positive
  
        if (X >= 0 and then Y >= 0) or else (X < 0 and then Y < 0) then
+          Prove_Positive_Dividend;
+ 
           R := To_Pos_Int (Ru);
           Q := (if Z > 0 then To_Pos_Int (Qu) else To_Neg_Int (Qu));
  
        --  Case of dividend (X * Y) sign negative
  
        else
+          Prove_Negative_Dividend;
+ 
           R := To_Neg_Int (Ru);
           Q := (if Z > 0 then To_Neg_Int (Qu) else To_Pos_Int (Qu));
        end if;
+ 
+       Prove_Sign_R;
+       Prove_Signs;
     end Scaled_Divide;
  
     ----------
*************** package body System.Arith_Double is
*** 603,625 ****
--- 2733,2910 ----
     ----------
  
     procedure Sub3 (X1, X2, X3 : in out Single_Uns; Y1, Y2, Y3 : Single_Uns) is
+ 
+       --  Local ghost variables
+ 
+       XX1 : constant Single_Uns := X1 with Ghost;
+       XX2 : constant Single_Uns := X2 with Ghost;
+       XX3 : constant Single_Uns := X3 with Ghost;
+ 
+       --  Local lemmas
+ 
+       procedure Lemma_Add3_No_Carry (X1, X2, X3, Y1, Y2, Y3 : Single_Uns)
+       with
+         Ghost,
+         Pre  => X1 <= Single_Uns'Last - Y1
+           and then X2 <= Single_Uns'Last - Y2
+           and then X3 <= Single_Uns'Last - Y3,
+         Post => Big3 (X1 + Y1, X2 + Y2, X3 + Y3)
+               = Big3 (X1, X2, X3) + Big3 (Y1, Y2, Y3);
+ 
+       procedure Lemma_Ge_Expand (X1, X2, X3, Y1, Y2, Y3 : Single_Uns)
+       with
+         Ghost,
+         Pre  => Big3 (X1, X2, X3) >= Big3 (Y1, Y2, Y3),
+         Post => X1 > Y1
+           or else (X1 = Y1 and then X2 > Y2)
+           or else (X1 = Y1 and then X2 = Y2 and then X3 >= Y3);
+ 
+       procedure Lemma_Sub3_No_Carry (X1, X2, X3, Y1, Y2, Y3 : Single_Uns)
+       with
+         Ghost,
+         Pre  => X1 >= Y1 and then X2 >= Y2 and then X3 >= Y3,
+         Post => Big3 (X1 - Y1, X2 - Y2, X3 - Y3)
+               = Big3 (X1, X2, X3) - Big3 (Y1, Y2, Y3);
+ 
+       procedure Lemma_Sub3_With_Carry2 (X1, X2, X3, Y2 : Single_Uns)
+       with
+         Ghost,
+         Pre  => X2 < Y2,
+         Post => Big3 (X1, X2 - Y2, X3)
+               = Big3 (X1, X2, X3) + Big3 (1, 0, 0) - Big3 (0, Y2, 0);
+ 
+       procedure Lemma_Sub3_With_Carry3 (X1, X2, X3, Y3 : Single_Uns)
+       with
+         Ghost,
+         Pre  => X3 < Y3,
+         Post => Big3 (X1, X2, X3 - Y3)
+               = Big3 (X1, X2, X3) + Big3 (0, 1, 0) - Big3 (0, 0, Y3);
+ 
+       -------------------------
+       -- Lemma_Add3_No_Carry --
+       -------------------------
+ 
+       procedure Lemma_Add3_No_Carry (X1, X2, X3, Y1, Y2, Y3 : Single_Uns) is
+       begin
+          Lemma_Add_Commutation (Double_Uns (X1), Y1);
+          Lemma_Add_Commutation (Double_Uns (X2), Y2);
+          Lemma_Add_Commutation (Double_Uns (X3), Y3);
+          pragma Assert (Double_Uns (Single_Uns'(X1 + Y1))
+                         = Double_Uns (X1) + Double_Uns (Y1));
+          pragma Assert (Double_Uns (Single_Uns'(X2 + Y2))
+                         = Double_Uns (X2) + Double_Uns (Y2));
+          pragma Assert (Double_Uns (Single_Uns'(X3 + Y3))
+                         = Double_Uns (X3) + Double_Uns (Y3));
+       end Lemma_Add3_No_Carry;
+ 
+       ---------------------
+       -- Lemma_Ge_Expand --
+       ---------------------
+ 
+       procedure Lemma_Ge_Expand (X1, X2, X3, Y1, Y2, Y3 : Single_Uns) is null;
+ 
+       -------------------------
+       -- Lemma_Sub3_No_Carry --
+       -------------------------
+ 
+       procedure Lemma_Sub3_No_Carry (X1, X2, X3, Y1, Y2, Y3 : Single_Uns) is
+       begin
+          Lemma_Subtract_Commutation (Double_Uns (X1), Double_Uns (Y1));
+          Lemma_Subtract_Commutation (Double_Uns (X2), Double_Uns (Y2));
+          Lemma_Subtract_Commutation (Double_Uns (X3), Double_Uns (Y3));
+       end Lemma_Sub3_No_Carry;
+ 
+       ----------------------------
+       -- Lemma_Sub3_With_Carry2 --
+       ----------------------------
+ 
+       procedure Lemma_Sub3_With_Carry2 (X1, X2, X3, Y2 : Single_Uns) is
+          pragma Unreferenced (X1, X3);
+       begin
+          Lemma_Add_Commutation
+            (Double_Uns'(2 ** Single_Size) - Double_Uns (Y2), X2);
+          Lemma_Subtract_Commutation
+            (Double_Uns'(2 ** Single_Size), Double_Uns (Y2));
+       end Lemma_Sub3_With_Carry2;
+ 
+       ----------------------------
+       -- Lemma_Sub3_With_Carry3 --
+       ----------------------------
+ 
+       procedure Lemma_Sub3_With_Carry3 (X1, X2, X3, Y3 : Single_Uns) is
+          pragma Unreferenced (X1, X2);
+       begin
+          Lemma_Add_Commutation
+            (Double_Uns'(2 ** Single_Size) - Double_Uns (Y3), X3);
+          Lemma_Subtract_Commutation
+            (Double_Uns'(2 ** Single_Size), Double_Uns (Y3));
+       end Lemma_Sub3_With_Carry3;
+ 
+    --  Start of processing for Sub3
+ 
     begin
+       Lemma_Ge_Expand (X1, X2, X3, Y1, Y2, Y3);
+ 
        if Y3 > X3 then
           if X2 = 0 then
+             pragma Assert (X1 >= 1);
+             Lemma_Sub3_No_Carry (X1, X2, X3, 1, 0, 0);
+ 
              X1 := X1 - 1;
+ 
+             pragma Assert
+               (Big3 (X1, X2, X3) = Big3 (XX1, XX2, XX3) - Big3 (1, 0, 0));
+             pragma Assert
+               (Big3 (X1, X2, X3) = Big3 (XX1, XX2, XX3)
+                - Big3 (0, Single_Uns'Last, 0) - Big3 (0, 1, 0));
+             Lemma_Add3_No_Carry (X1, X2, X3, 0, Single_Uns'Last, 0);
+          else
+             Lemma_Sub3_No_Carry (X1, X2, X3, 0, 1, 0);
           end if;
  
           X2 := X2 - 1;
+ 
+          pragma Assert
+            (Big3 (X1, X2, X3) = Big3 (XX1, XX2, XX3) - Big3 (0, 1, 0));
+          Lemma_Sub3_With_Carry3 (X1, X2, X3, Y3);
+       else
+          Lemma_Sub3_No_Carry (X1, X2, X3, 0, 0, Y3);
        end if;
  
        X3 := X3 - Y3;
  
+       pragma Assert
+         (Big3 (X1, X2, X3) = Big3 (XX1, XX2, XX3) - Big3 (0, 0, Y3));
+ 
        if Y2 > X2 then
+          pragma Assert (X1 >= 1);
+          Lemma_Sub3_No_Carry (X1, X2, X3, 1, 0, 0);
+ 
           X1 := X1 - 1;
+ 
+          pragma Assert
+            (Big3 (X1, X2, X3) = Big3 (XX1, XX2, XX3)
+             - Big3 (0, 0, Y3) - Big3 (1, 0, 0));
+          Lemma_Sub3_With_Carry2 (X1, X2, X3, Y2);
+       else
+          Lemma_Sub3_No_Carry (X1, X2, X3, 0, Y2, 0);
        end if;
  
        X2 := X2 - Y2;
+ 
+       pragma Assert
+         (Big3 (X1, X2, X3) = Big3 (XX1, XX2, XX3) - Big3 (0, Y2, Y3));
+       pragma Assert (X1 >= Y1);
+       Lemma_Sub3_No_Carry (X1, Y2, X3, Y1, 0, 0);
+ 
        X1 := X1 - Y1;
+ 
+       pragma Assert
+         (Big3 (X1, X2, X3) = Big3 (XX1, XX2, XX3)
+          - Big3 (0, Y2, Y3) - Big3 (Y1, 0, 0));
+       Lemma_Add3_No_Carry (0, Y2, Y3, Y1, 0, 0);
+       pragma Assert
+         (Big3 (X1, X2, X3) = Big3 (XX1, XX2, XX3) - Big3 (Y1, Y2, Y3));
     end Sub3;
  
     -------------------------------
*************** package body System.Arith_Double is
*** 629,646 ****
--- 2914,3039 ----
     function Subtract_With_Ovflo_Check (X, Y : Double_Int) return Double_Int is
        R : constant Double_Int := To_Int (To_Uns (X) - To_Uns (Y));
  
+       --  Local lemmas
+ 
+       procedure Prove_Negative_X
+       with
+         Ghost,
+         Pre  => X < 0 and then (Y <= 0 or else R < 0),
+         Post => R = X - Y;
+ 
+       procedure Prove_Non_Negative_X
+       with
+         Ghost,
+         Pre  => X >= 0 and then (Y > 0 or else R >= 0),
+         Post => R = X - Y;
+ 
+       procedure Prove_Overflow_Case
+       with
+         Ghost,
+         Pre  =>
+           (if X >= 0 then Y <= 0 and then R < 0
+                      else Y > 0 and then R >= 0),
+         Post => not In_Double_Int_Range (Big (X) - Big (Y));
+ 
+       ----------------------
+       -- Prove_Negative_X --
+       ----------------------
+ 
+       procedure Prove_Negative_X is
+       begin
+          if X = Double_Int'First then
+             if Y = Double_Int'First or else Y > 0 then
+                null;
+             else
+                pragma Assert
+                  (To_Uns (X) - To_Uns (Y) =
+                     2 ** (Double_Size - 1) + Double_Uns (-Y));
+             end if;
+ 
+          elsif Y >= 0 or else Y = Double_Int'First then
+             null;
+ 
+          else
+             pragma Assert
+               (To_Uns (X) - To_Uns (Y) = -Double_Uns (-X) + Double_Uns (-Y));
+          end if;
+       end Prove_Negative_X;
+ 
+       --------------------------
+       -- Prove_Non_Negative_X --
+       --------------------------
+ 
+       procedure Prove_Non_Negative_X is
+       begin
+          if Y > 0 then
+             declare
+                Ru : constant Double_Uns := To_Uns (X) - To_Uns (Y);
+             begin
+                pragma Assert (Ru = Double_Uns (X) - Double_Uns (Y));
+                if Ru < 2 ** (Double_Size - 1) then  --  R >= 0
+                   Lemma_Subtract_Double_Uns (X => Y, Y => X);
+                   pragma Assert (Ru = Double_Uns (X - Y));
+ 
+                elsif Ru = 2 ** (Double_Size - 1) then
+                   pragma Assert (Double_Uns (Y) < 2 ** (Double_Size - 1));
+                   pragma Assert (False);
+ 
+                else
+                   pragma Assert
+                     (R = -Double_Int (-(Double_Uns (X) - Double_Uns (Y))));
+                   pragma Assert
+                     (R = -Double_Int (-Double_Uns (X) + Double_Uns (Y)));
+                   pragma Assert
+                     (R = -Double_Int (Double_Uns (Y) - Double_Uns (X)));
+                end if;
+             end;
+ 
+          elsif Y = Double_Int'First then
+             pragma Assert
+               (To_Uns (X) - To_Uns (Y) =
+                  Double_Uns (X) - 2 ** (Double_Size - 1));
+             pragma Assert (False);
+ 
+          else
+             pragma Assert
+               (To_Uns (X) - To_Uns (Y) = Double_Uns (X) + Double_Uns (-Y));
+          end if;
+       end Prove_Non_Negative_X;
+ 
+       -------------------------
+       -- Prove_Overflow_Case --
+       -------------------------
+ 
+       procedure Prove_Overflow_Case is
+       begin
+          if X >= 0 and then Y /= Double_Int'First then
+             pragma Assert
+               (To_Uns (X) - To_Uns (Y) = Double_Uns (X) + Double_Uns (-Y));
+ 
+          elsif X < 0 and then X /= Double_Int'First then
+             pragma Assert
+               (To_Uns (X) - To_Uns (Y) = -Double_Uns (-X) - Double_Uns (Y));
+          end if;
+       end Prove_Overflow_Case;
+ 
+    --  Start of processing for Subtract_With_Ovflo_Check
+ 
     begin
        if X >= 0 then
           if Y > 0 or else R >= 0 then
+             Prove_Non_Negative_X;
              return R;
           end if;
  
        else -- X < 0
           if Y <= 0 or else R < 0 then
+             Prove_Negative_X;
              return R;
           end if;
        end if;
  
+       Prove_Overflow_Case;
        Raise_Error;
     end Subtract_With_Ovflo_Check;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-aridou.ads gcc-12.1.0/gcc/ada/libgnat/s-aridou.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-aridou.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-aridou.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 33,38 ****
--- 33,41 ----
  --  signed integer values in cases where either overflow checking is required,
  --  or intermediate results are longer than the result type.
  
+ with Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
+ use Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
+ 
  generic
  
     type Double_Int is range <>;
*************** generic
*** 50,76 ****
     with function Shift_Left (A : Single_Uns; B : Natural) return Single_Uns
       is <>;
  
! package System.Arith_Double is
!    pragma Pure;
  
!    function Add_With_Ovflo_Check (X, Y : Double_Int) return Double_Int;
     --  Raises Constraint_Error if sum of operands overflows Double_Int,
     --  otherwise returns the signed integer sum.
  
!    function Subtract_With_Ovflo_Check (X, Y : Double_Int) return Double_Int;
     --  Raises Constraint_Error if difference of operands overflows Double_Int,
     --  otherwise returns the signed integer difference.
  
!    function Multiply_With_Ovflo_Check (X, Y : Double_Int) return Double_Int;
     pragma Convention (C, Multiply_With_Ovflo_Check);
     --  Raises Constraint_Error if product of operands overflows Double_Int,
     --  otherwise returns the signed integer product. Gigi may also call this
     --  routine directly.
  
     procedure Scaled_Divide
       (X, Y, Z : Double_Int;
        Q, R    : out Double_Int;
!       Round   : Boolean);
     --  Performs the division of (X * Y) / Z, storing the quotient in Q
     --  and the remainder in R. Constraint_Error is raised if Z is zero,
     --  or if the quotient does not fit in Double_Int. Round indicates if
--- 53,145 ----
     with function Shift_Left (A : Single_Uns; B : Natural) return Single_Uns
       is <>;
  
! package System.Arith_Double
!   with Pure, SPARK_Mode
! is
!    --  Preconditions in this unit are meant for analysis only, not for run-time
!    --  checking, so that the expected exceptions are raised. This is enforced
!    --  by setting the corresponding assertion policy to Ignore. Postconditions
!    --  and contract cases should not be executed at runtime as well, in order
!    --  not to slow down the execution of these functions.
  
!    pragma Assertion_Policy (Pre            => Ignore,
!                             Post           => Ignore,
!                             Contract_Cases => Ignore,
!                             Ghost          => Ignore);
! 
!    package Signed_Conversion is new Signed_Conversions (Int => Double_Int);
! 
!    function Big (Arg : Double_Int) return Big_Integer is
!      (Signed_Conversion.To_Big_Integer (Arg))
!    with Ghost;
! 
!    package Unsigned_Conversion is new Unsigned_Conversions (Int => Double_Uns);
! 
!    function Big (Arg : Double_Uns) return Big_Integer is
!      (Unsigned_Conversion.To_Big_Integer (Arg))
!    with Ghost;
! 
!    function In_Double_Int_Range (Arg : Big_Integer) return Boolean is
!      (In_Range (Arg, Big (Double_Int'First), Big (Double_Int'Last)))
!    with Ghost;
! 
!    function Add_With_Ovflo_Check (X, Y : Double_Int) return Double_Int
!    with
!      Pre  => In_Double_Int_Range (Big (X) + Big (Y)),
!      Post => Add_With_Ovflo_Check'Result = X + Y;
     --  Raises Constraint_Error if sum of operands overflows Double_Int,
     --  otherwise returns the signed integer sum.
  
!    function Subtract_With_Ovflo_Check (X, Y : Double_Int) return Double_Int
!    with
!      Pre  => In_Double_Int_Range (Big (X) - Big (Y)),
!      Post => Subtract_With_Ovflo_Check'Result = X - Y;
     --  Raises Constraint_Error if difference of operands overflows Double_Int,
     --  otherwise returns the signed integer difference.
  
!    function Multiply_With_Ovflo_Check (X, Y : Double_Int) return Double_Int
!    with
!      Pre  => In_Double_Int_Range (Big (X) * Big (Y)),
!      Post => Multiply_With_Ovflo_Check'Result = X * Y;
     pragma Convention (C, Multiply_With_Ovflo_Check);
     --  Raises Constraint_Error if product of operands overflows Double_Int,
     --  otherwise returns the signed integer product. Gigi may also call this
     --  routine directly.
  
+    function Same_Sign (X, Y : Big_Integer) return Boolean is
+      (X = Big (Double_Int'(0))
+         or else Y = Big (Double_Int'(0))
+         or else (X < Big (Double_Int'(0))) = (Y < Big (Double_Int'(0))))
+    with Ghost;
+ 
+    function Round_Quotient (X, Y, Q, R : Big_Integer) return Big_Integer is
+      (if abs R > (abs Y - Big (Double_Int'(1))) / Big (Double_Int'(2)) then
+        (if Same_Sign (X, Y) then Q + Big (Double_Int'(1))
+         else Q - Big (Double_Int'(1)))
+       else
+         Q)
+    with
+      Ghost,
+      Pre => Y /= 0 and then Q = X / Y and then R = X rem Y;
+ 
     procedure Scaled_Divide
       (X, Y, Z : Double_Int;
        Q, R    : out Double_Int;
!       Round   : Boolean)
!    with
!      Pre  => Z /= 0
!        and then In_Double_Int_Range
!          (if Round then Round_Quotient (Big (X) * Big (Y), Big (Z),
!                                         Big (X) * Big (Y) / Big (Z),
!                                         Big (X) * Big (Y) rem Big (Z))
!           else Big (X) * Big (Y) / Big (Z)),
!      Post => Big (R) = Big (X) * Big (Y) rem Big (Z)
!        and then
!          (if Round then
!             Big (Q) = Round_Quotient (Big (X) * Big (Y), Big (Z),
!                                       Big (X) * Big (Y) / Big (Z), Big (R))
!           else
!             Big (Q) = Big (X) * Big (Y) / Big (Z));
     --  Performs the division of (X * Y) / Z, storing the quotient in Q
     --  and the remainder in R. Constraint_Error is raised if Z is zero,
     --  or if the quotient does not fit in Double_Int. Round indicates if
*************** package System.Arith_Double is
*** 82,88 ****
     procedure Double_Divide
       (X, Y, Z : Double_Int;
        Q, R    : out Double_Int;
!       Round   : Boolean);
     --  Performs the division X / (Y * Z), storing the quotient in Q and
     --  the remainder in R. Constraint_Error is raised if Y or Z is zero,
     --  or if the quotient does not fit in Double_Int. Round indicates if the
--- 151,172 ----
     procedure Double_Divide
       (X, Y, Z : Double_Int;
        Q, R    : out Double_Int;
!       Round   : Boolean)
!    with
!      Pre  => Y /= 0
!        and then Z /= 0
!        and then In_Double_Int_Range
!          (if Round then Round_Quotient (Big (X), Big (Y) * Big (Z),
!                                         Big (X) / (Big (Y) * Big (Z)),
!                                         Big (X) rem (Big (Y) * Big (Z)))
!           else Big (X) / (Big (Y) * Big (Z))),
!      Post => Big (R) = Big (X) rem (Big (Y) * Big (Z))
!        and then
!          (if Round then
!             Big (Q) = Round_Quotient (Big (X), Big (Y) * Big (Z),
!                                       Big (X) / (Big (Y) * Big (Z)), Big (R))
!           else
!             Big (Q) = Big (X) / (Big (Y) * Big (Z)));
     --  Performs the division X / (Y * Z), storing the quotient in Q and
     --  the remainder in R. Constraint_Error is raised if Y or Z is zero,
     --  or if the quotient does not fit in Double_Int. Round indicates if the
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-arit128.adb gcc-12.1.0/gcc/ada/libgnat/s-arit128.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-arit128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-arit128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
***************
*** 31,37 ****
  
  with System.Arith_Double;
  
! package body System.Arith_128 is
  
     subtype Uns128 is Interfaces.Unsigned_128;
     subtype Uns64  is Interfaces.Unsigned_64;
--- 31,39 ----
  
  with System.Arith_Double;
  
! package body System.Arith_128
!   with SPARK_Mode
! is
  
     subtype Uns128 is Interfaces.Unsigned_128;
     subtype Uns64  is Interfaces.Unsigned_64;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-arit128.ads gcc-12.1.0/gcc/ada/libgnat/s-arit128.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-arit128.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-arit128.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
***************
*** 36,66 ****
  pragma Restrictions (No_Elaboration_Code);
  --  Allow direct call from gigi generated code
  
  with Interfaces;
  
! package System.Arith_128 is
!    pragma Pure;
  
     subtype Int128 is Interfaces.Integer_128;
  
!    function Add_With_Ovflo_Check128 (X, Y : Int128) return Int128;
     --  Raises Constraint_Error if sum of operands overflows 128 bits,
     --  otherwise returns the 128-bit signed integer sum.
  
!    function Subtract_With_Ovflo_Check128 (X, Y : Int128) return Int128;
     --  Raises Constraint_Error if difference of operands overflows 128
     --  bits, otherwise returns the 128-bit signed integer difference.
  
!    function Multiply_With_Ovflo_Check128 (X, Y : Int128) return Int128;
     pragma Export (C, Multiply_With_Ovflo_Check128, "__gnat_mulv128");
     --  Raises Constraint_Error if product of operands overflows 128
     --  bits, otherwise returns the 128-bit signed integer product.
     --  Gigi may also call this routine directly.
  
     procedure Scaled_Divide128
       (X, Y, Z : Int128;
        Q, R    : out Int128;
!       Round   : Boolean);
     --  Performs the division of (X * Y) / Z, storing the quotient in Q
     --  and the remainder in R. Constraint_Error is raised if Z is zero,
     --  or if the quotient does not fit in 128 bits. Round indicates if
--- 36,137 ----
  pragma Restrictions (No_Elaboration_Code);
  --  Allow direct call from gigi generated code
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced
+ --  by setting the corresponding assertion policy to Ignore. Postconditions
+ --  and contract cases should not be executed at runtime as well, in order
+ --  not to slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
+ with Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
  with Interfaces;
  
! package System.Arith_128
!   with Pure, SPARK_Mode
! is
!    use type Ada.Numerics.Big_Numbers.Big_Integers_Ghost.Big_Integer;
!    use type Interfaces.Integer_128;
  
     subtype Int128 is Interfaces.Integer_128;
  
!    subtype Big_Integer is
!      Ada.Numerics.Big_Numbers.Big_Integers_Ghost.Big_Integer
!    with Ghost;
! 
!    package Signed_Conversion is new
!      Ada.Numerics.Big_Numbers.Big_Integers_Ghost.Signed_Conversions
!      (Int => Int128);
! 
!    function Big (Arg : Int128) return Big_Integer is
!      (Signed_Conversion.To_Big_Integer (Arg))
!    with Ghost;
! 
!    function In_Int128_Range (Arg : Big_Integer) return Boolean is
!      (Ada.Numerics.Big_Numbers.Big_Integers_Ghost.In_Range
!        (Arg, Big (Int128'First), Big (Int128'Last)))
!    with Ghost;
! 
!    function Add_With_Ovflo_Check128 (X, Y : Int128) return Int128
!    with
!      Pre  => In_Int128_Range (Big (X) + Big (Y)),
!      Post => Add_With_Ovflo_Check128'Result = X + Y;
     --  Raises Constraint_Error if sum of operands overflows 128 bits,
     --  otherwise returns the 128-bit signed integer sum.
  
!    function Subtract_With_Ovflo_Check128 (X, Y : Int128) return Int128
!    with
!      Pre  => In_Int128_Range (Big (X) - Big (Y)),
!      Post => Subtract_With_Ovflo_Check128'Result = X - Y;
     --  Raises Constraint_Error if difference of operands overflows 128
     --  bits, otherwise returns the 128-bit signed integer difference.
  
!    function Multiply_With_Ovflo_Check128 (X, Y : Int128) return Int128
!    with
!      Pre  => In_Int128_Range (Big (X) * Big (Y)),
!      Post => Multiply_With_Ovflo_Check128'Result = X * Y;
     pragma Export (C, Multiply_With_Ovflo_Check128, "__gnat_mulv128");
     --  Raises Constraint_Error if product of operands overflows 128
     --  bits, otherwise returns the 128-bit signed integer product.
     --  Gigi may also call this routine directly.
  
+    function Same_Sign (X, Y : Big_Integer) return Boolean is
+      (X = Big (Int128'(0))
+         or else Y = Big (Int128'(0))
+         or else (X < Big (Int128'(0))) = (Y < Big (Int128'(0))))
+    with Ghost;
+ 
+    function Round_Quotient (X, Y, Q, R : Big_Integer) return Big_Integer is
+      (if abs R > (abs Y - Big (Int128'(1))) / Big (Int128'(2)) then
+        (if Same_Sign (X, Y) then Q + Big (Int128'(1))
+         else Q - Big (Int128'(1)))
+       else
+         Q)
+    with
+      Ghost,
+      Pre => Y /= 0 and then Q = X / Y and then R = X rem Y;
+ 
     procedure Scaled_Divide128
       (X, Y, Z : Int128;
        Q, R    : out Int128;
!       Round   : Boolean)
!    with
!      Pre  => Z /= 0
!        and then In_Int128_Range
!          (if Round then Round_Quotient (Big (X) * Big (Y), Big (Z),
!                                         Big (X) * Big (Y) / Big (Z),
!                                         Big (X) * Big (Y) rem Big (Z))
!           else Big (X) * Big (Y) / Big (Z)),
!      Post => Big (R) = Big (X) * Big (Y) rem Big (Z)
!        and then
!          (if Round then
!             Big (Q) = Round_Quotient (Big (X) * Big (Y), Big (Z),
!                                       Big (X) * Big (Y) / Big (Z), Big (R))
!           else
!             Big (Q) = Big (X) * Big (Y) / Big (Z));
     --  Performs the division of (X * Y) / Z, storing the quotient in Q
     --  and the remainder in R. Constraint_Error is raised if Z is zero,
     --  or if the quotient does not fit in 128 bits. Round indicates if
*************** package System.Arith_128 is
*** 72,78 ****
     procedure Double_Divide128
       (X, Y, Z : Int128;
        Q, R    : out Int128;
!       Round   : Boolean);
     --  Performs the division X / (Y * Z), storing the quotient in Q and
     --  the remainder in R. Constraint_Error is raised if Y or Z is zero,
     --  or if the quotient does not fit in 128 bits. Round indicates if the
--- 143,164 ----
     procedure Double_Divide128
       (X, Y, Z : Int128;
        Q, R    : out Int128;
!       Round   : Boolean)
!    with
!      Pre  => Y /= 0
!        and then Z /= 0
!        and then In_Int128_Range
!          (if Round then Round_Quotient (Big (X), Big (Y) * Big (Z),
!                                         Big (X) / (Big (Y) * Big (Z)),
!                                         Big (X) rem (Big (Y) * Big (Z)))
!           else Big (X) / (Big (Y) * Big (Z))),
!      Post => Big (R) = Big (X) rem (Big (Y) * Big (Z))
!        and then
!          (if Round then
!             Big (Q) = Round_Quotient (Big (X), Big (Y) * Big (Z),
!                                       Big (X) / (Big (Y) * Big (Z)), Big (R))
!           else
!             Big (Q) = Big (X) / (Big (Y) * Big (Z)));
     --  Performs the division X / (Y * Z), storing the quotient in Q and
     --  the remainder in R. Constraint_Error is raised if Y or Z is zero,
     --  or if the quotient does not fit in 128 bits. Round indicates if the
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-arit32.adb gcc-12.1.0/gcc/ada/libgnat/s-arit32.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-arit32.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-arit32.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
***************
*** 29,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  with Ada.Unchecked_Conversion;
  
! package body System.Arith_32 is
  
     pragma Suppress (Overflow_Check);
     pragma Suppress (Range_Check);
--- 29,52 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ --  Preconditions, postconditions, ghost code, loop invariants and assertions
+ --  in this unit are meant for analysis only, not for run-time checking, as it
+ --  would be too costly otherwise. This is enforced by setting the assertion
+ --  policy to Ignore.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
+ with Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
+ use Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
  with Ada.Unchecked_Conversion;
  
! package body System.Arith_32
!   with SPARK_Mode
! is
  
     pragma Suppress (Overflow_Check);
     pragma Suppress (Range_Check);
*************** package body System.Arith_32 is
*** 43,69 ****
  
     function To_Int is new Ada.Unchecked_Conversion (Uns32, Int32);
  
     -----------------------
     -- Local Subprograms --
     -----------------------
  
     function "abs" (X : Int32) return Uns32 is
       (if X = Int32'First
!       then 2**31
        else Uns32 (Int32'(abs X)));
     --  Convert absolute value of X to unsigned. Note that we can't just use
     --  the expression of the Else since it overflows for X = Int32'First.
  
     function Hi (A : Uns64) return Uns32 is (Uns32 (Shift_Right (A, 32)));
     --  High order half of 64-bit value
  
!    function To_Neg_Int (A : Uns32) return Int32;
     --  Convert to negative integer equivalent. If the input is in the range
     --  0 .. 2**31, then the corresponding nonpositive signed integer (obtained
     --  by negating the given value) is returned, otherwise constraint error is
     --  raised.
  
!    function To_Pos_Int (A : Uns32) return Int32;
     --  Convert to positive integer equivalent. If the input is in the range
     --  0 .. 2**31 - 1, then the corresponding nonnegative signed integer is
     --  returned, otherwise constraint error is raised.
--- 58,122 ----
  
     function To_Int is new Ada.Unchecked_Conversion (Uns32, Int32);
  
+    package Unsigned_Conversion is new Unsigned_Conversions (Int => Uns32);
+ 
+    function Big (Arg : Uns32) return Big_Integer is
+      (Unsigned_Conversion.To_Big_Integer (Arg))
+    with Ghost;
+ 
+    package Unsigned_Conversion_64 is new Unsigned_Conversions (Int => Uns64);
+ 
+    function Big (Arg : Uns64) return Big_Integer is
+      (Unsigned_Conversion_64.To_Big_Integer (Arg))
+    with Ghost;
+ 
+    pragma Warnings
+      (Off, "non-preelaborable call not allowed in preelaborated unit",
+       Reason => "Ghost code is not compiled");
+    Big_0 : constant Big_Integer :=
+      Big (Uns32'(0))
+    with Ghost;
+    Big_2xx32 : constant Big_Integer :=
+      Big (Uns32'(2 ** 32 - 1)) + 1
+    with Ghost;
+    Big_2xx64 : constant Big_Integer :=
+      Big (Uns64'(2 ** 64 - 1)) + 1
+    with Ghost;
+    pragma Warnings
+      (On, "non-preelaborable call not allowed in preelaborated unit");
+ 
     -----------------------
     -- Local Subprograms --
     -----------------------
  
     function "abs" (X : Int32) return Uns32 is
       (if X = Int32'First
!       then Uns32'(2**31)
        else Uns32 (Int32'(abs X)));
     --  Convert absolute value of X to unsigned. Note that we can't just use
     --  the expression of the Else since it overflows for X = Int32'First.
  
+    function Lo (A : Uns64) return Uns32 is (Uns32 (A and (2 ** 32 - 1)));
+    --  Low order half of 64-bit value
+ 
     function Hi (A : Uns64) return Uns32 is (Uns32 (Shift_Right (A, 32)));
     --  High order half of 64-bit value
  
!    function To_Neg_Int (A : Uns32) return Int32
!    with
!      Annotate => (GNATprove, Terminating),
!      Pre      => In_Int32_Range (-Big (A)),
!      Post     => Big (To_Neg_Int'Result) = -Big (A);
     --  Convert to negative integer equivalent. If the input is in the range
     --  0 .. 2**31, then the corresponding nonpositive signed integer (obtained
     --  by negating the given value) is returned, otherwise constraint error is
     --  raised.
  
!    function To_Pos_Int (A : Uns32) return Int32
!    with
!      Annotate => (GNATprove, Terminating),
!      Pre      => In_Int32_Range (Big (A)),
!      Post     => Big (To_Pos_Int'Result) = Big (A);
     --  Convert to positive integer equivalent. If the input is in the range
     --  0 .. 2**31 - 1, then the corresponding nonnegative signed integer is
     --  returned, otherwise constraint error is raised.
*************** package body System.Arith_32 is
*** 72,77 ****
--- 125,292 ----
     pragma No_Return (Raise_Error);
     --  Raise constraint error with appropriate message
  
+    ------------------
+    -- Local Lemmas --
+    ------------------
+ 
+    procedure Lemma_Abs_Commutation (X : Int32)
+    with
+      Ghost,
+      Post => abs (Big (X)) = Big (Uns32'(abs X));
+ 
+    procedure Lemma_Abs_Div_Commutation (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => abs (X / Y) = abs X / abs Y;
+ 
+    procedure Lemma_Abs_Mult_Commutation (X, Y : Big_Integer)
+    with
+      Ghost,
+      Post => abs (X * Y) = abs X * abs Y;
+ 
+    procedure Lemma_Abs_Rem_Commutation (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => abs (X rem Y) = (abs X) rem (abs Y);
+ 
+    procedure Lemma_Div_Commutation (X, Y : Uns64)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => Big (X) / Big (Y) = Big (X / Y);
+ 
+    procedure Lemma_Div_Ge (X, Y, Z : Big_Integer)
+    with
+      Ghost,
+      Pre  => Z > 0 and then X >= Y * Z,
+      Post => X / Z >= Y;
+ 
+    procedure Lemma_Ge_Commutation (A, B : Uns32)
+    with
+      Ghost,
+      Pre  => A >= B,
+      Post => Big (A) >= Big (B);
+ 
+    procedure Lemma_Hi_Lo (Xu : Uns64; Xhi, Xlo : Uns32)
+    with
+      Ghost,
+      Pre  => Xhi = Hi (Xu) and Xlo = Lo (Xu),
+      Post => Big (Xu) = Big_2xx32 * Big (Xhi) + Big (Xlo);
+ 
+    procedure Lemma_Mult_Commutation (X, Y, Z : Uns64)
+    with
+      Ghost,
+      Pre  => Big (X) * Big (Y) < Big_2xx64 and then Z = X * Y,
+      Post => Big (X) * Big (Y) = Big (Z);
+ 
+    procedure Lemma_Mult_Non_Negative (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => (X >= Big_0 and then Y >= Big_0)
+        or else (X <= Big_0 and then Y <= Big_0),
+      Post => X * Y >= Big_0;
+ 
+    procedure Lemma_Mult_Non_Positive (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => (X <= Big_0 and then Y >= Big_0)
+        or else (X >= Big_0 and then Y <= Big_0),
+      Post => X * Y <= Big_0;
+ 
+    procedure Lemma_Neg_Div (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => X / Y = (-X) / (-Y);
+ 
+    procedure Lemma_Neg_Rem (X, Y : Big_Integer)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => X rem Y = X rem (-Y);
+ 
+    procedure Lemma_Not_In_Range_Big2xx32
+    with
+      Post => not In_Int32_Range (Big_2xx32)
+        and then not In_Int32_Range (-Big_2xx32);
+ 
+    procedure Lemma_Rem_Commutation (X, Y : Uns64)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => Big (X) rem Big (Y) = Big (X rem Y);
+ 
+    -----------------------------
+    -- Local lemma null bodies --
+    -----------------------------
+ 
+    procedure Lemma_Abs_Commutation (X : Int32) is null;
+    procedure Lemma_Abs_Mult_Commutation (X, Y : Big_Integer) is null;
+    procedure Lemma_Div_Commutation (X, Y : Uns64) is null;
+    procedure Lemma_Div_Ge (X, Y, Z : Big_Integer) is null;
+    procedure Lemma_Ge_Commutation (A, B : Uns32) is null;
+    procedure Lemma_Mult_Commutation (X, Y, Z : Uns64) is null;
+    procedure Lemma_Mult_Non_Negative (X, Y : Big_Integer) is null;
+    procedure Lemma_Mult_Non_Positive (X, Y : Big_Integer) is null;
+    procedure Lemma_Neg_Rem (X, Y : Big_Integer) is null;
+    procedure Lemma_Not_In_Range_Big2xx32 is null;
+    procedure Lemma_Rem_Commutation (X, Y : Uns64) is null;
+ 
+    -------------------------------
+    -- Lemma_Abs_Div_Commutation --
+    -------------------------------
+ 
+    procedure Lemma_Abs_Div_Commutation (X, Y : Big_Integer) is
+    begin
+       if Y < 0 then
+          if X < 0 then
+             pragma Assert (abs (X / Y) = abs (X / (-Y)));
+          else
+             Lemma_Neg_Div (X, Y);
+             pragma Assert (abs (X / Y) = abs ((-X) / (-Y)));
+          end if;
+       end if;
+    end Lemma_Abs_Div_Commutation;
+ 
+    -------------------------------
+    -- Lemma_Abs_Rem_Commutation --
+    -------------------------------
+ 
+    procedure Lemma_Abs_Rem_Commutation (X, Y : Big_Integer) is
+    begin
+       if Y < 0 then
+          Lemma_Neg_Rem (X, Y);
+          if X < 0 then
+             pragma Assert (X rem Y = -((-X) rem (-Y)));
+             pragma Assert (abs (X rem Y) = (abs X) rem (abs Y));
+          else
+             pragma Assert (abs (X rem Y) = (abs X) rem (abs Y));
+          end if;
+       end if;
+    end Lemma_Abs_Rem_Commutation;
+ 
+    -----------------
+    -- Lemma_Hi_Lo --
+    -----------------
+ 
+    procedure Lemma_Hi_Lo (Xu : Uns64; Xhi, Xlo : Uns32) is
+    begin
+       pragma Assert (Uns64 (Xhi) = Xu / Uns64'(2 ** 32));
+       pragma Assert (Uns64 (Xlo) = Xu mod 2 ** 32);
+    end Lemma_Hi_Lo;
+ 
+    -------------------
+    -- Lemma_Neg_Div --
+    -------------------
+ 
+    procedure Lemma_Neg_Div (X, Y : Big_Integer) is
+    begin
+       pragma Assert ((-X) / (-Y) = -(X / (-Y)));
+       pragma Assert (X / (-Y) = -(X / Y));
+    end Lemma_Neg_Div;
+ 
     -----------------
     -- Raise_Error --
     -----------------
*************** package body System.Arith_32 is
*** 79,84 ****
--- 294,302 ----
     procedure Raise_Error is
     begin
        raise Constraint_Error with "32-bit arithmetic overflow";
+       pragma Annotate
+         (GNATprove, Intentional, "exception might be raised",
+          "Procedure Raise_Error is called to signal input errors");
     end Raise_Error;
  
     -------------------
*************** package body System.Arith_32 is
*** 101,151 ****
        Ru : Uns32;
        --  Unsigned quotient and remainder
  
     begin
        --  First do the 64-bit multiplication
  
        D := Uns64 (Xu) * Uns64 (Yu);
  
        --  If dividend is too large, raise error
  
        if Hi (D) >= Zu then
           Raise_Error;
  
        --  Then do the 64-bit division
  
!       else
!          Qu := Uns32 (D / Uns64 (Zu));
!          Ru := Uns32 (D rem Uns64 (Zu));
!       end if;
  
        --  Deal with rounding case
  
!       if Round and then Ru > (Zu - Uns32'(1)) / Uns32'(2) then
  
!          --  Protect against wrapping around when rounding, by signaling
!          --  an overflow when the quotient is too large.
  
!          if Qu = Uns32'Last then
!             Raise_Error;
!          end if;
  
!          Qu := Qu + Uns32'(1);
        end if;
  
        --  Set final signs (RM 4.5.5(27-30))
  
        --  Case of dividend (X * Y) sign positive
  
        if (X >= 0 and then Y >= 0) or else (X < 0 and then Y < 0) then
           R := To_Pos_Int (Ru);
           Q := (if Z > 0 then To_Pos_Int (Qu) else To_Neg_Int (Qu));
  
        --  Case of dividend (X * Y) sign negative
  
        else
           R := To_Neg_Int (Ru);
           Q := (if Z > 0 then To_Neg_Int (Qu) else To_Pos_Int (Qu));
        end if;
     end Scaled_Divide32;
  
     ----------------
--- 319,570 ----
        Ru : Uns32;
        --  Unsigned quotient and remainder
  
+       --  Local ghost variables
+ 
+       Mult  : constant Big_Integer := abs (Big (X) * Big (Y)) with Ghost;
+       Quot  : Big_Integer with Ghost;
+       Big_R : Big_Integer with Ghost;
+       Big_Q : Big_Integer with Ghost;
+ 
+       --  Local lemmas
+ 
+       procedure Prove_Negative_Dividend
+       with
+         Ghost,
+         Pre  => Z /= 0
+           and then ((X >= 0 and Y < 0) or (X < 0 and Y >= 0))
+           and then Big_Q =
+             (if Round then Round_Quotient (Big (X) * Big (Y), Big (Z),
+                                            Big (X) * Big (Y) / Big (Z),
+                                            Big (X) * Big (Y) rem Big (Z))
+              else Big (X) * Big (Y) / Big (Z)),
+          Post =>
+            (if Z > 0 then Big_Q <= Big_0 else Big_Q >= Big_0);
+       --  Proves the sign of rounded quotient when dividend is non-positive
+ 
+       procedure Prove_Overflow
+       with
+         Ghost,
+         Pre  => Z /= 0 and then Mult >= Big_2xx32 * Big (Uns32'(abs Z)),
+         Post => not In_Int32_Range (Big (X) * Big (Y) / Big (Z))
+           and then not In_Int32_Range
+             (Round_Quotient (Big (X) * Big (Y), Big (Z),
+                              Big (X) * Big (Y) / Big (Z),
+                              Big (X) * Big (Y) rem Big (Z)));
+       --  Proves overflow case
+ 
+       procedure Prove_Positive_Dividend
+       with
+         Ghost,
+         Pre  => Z /= 0
+           and then ((X >= 0 and Y >= 0) or (X < 0 and Y < 0))
+           and then Big_Q =
+             (if Round then Round_Quotient (Big (X) * Big (Y), Big (Z),
+                                            Big (X) * Big (Y) / Big (Z),
+                                            Big (X) * Big (Y) rem Big (Z))
+              else Big (X) * Big (Y) / Big (Z)),
+          Post =>
+            (if Z > 0 then Big_Q >= Big_0 else Big_Q <= Big_0);
+       --  Proves the sign of rounded quotient when dividend is non-negative
+ 
+       procedure Prove_Rounding_Case
+       with
+         Ghost,
+         Pre  => Z /= 0
+           and then Quot = Big (X) * Big (Y) / Big (Z)
+           and then Big_R = Big (X) * Big (Y) rem Big (Z)
+           and then Big_Q =
+             Round_Quotient (Big (X) * Big (Y), Big (Z), Quot, Big_R)
+           and then Big (Ru) = abs Big_R
+           and then Big (Zu) = Big (Uns32'(abs Z)),
+         Post => abs Big_Q =
+           (if Ru > (Zu - Uns32'(1)) / Uns32'(2)
+            then abs Quot + 1
+            else abs Quot);
+       --  Proves correctness of the rounding of the unsigned quotient
+ 
+       procedure Prove_Sign_R
+       with
+         Ghost,
+         Pre  => Z /= 0 and then Big_R = Big (X) * Big (Y) rem Big (Z),
+         Post => In_Int32_Range (Big_R);
+ 
+       procedure Prove_Signs
+       with
+         Ghost,
+         Pre  => Z /= 0
+           and then Quot = Big (X) * Big (Y) / Big (Z)
+           and then Big_R = Big (X) * Big (Y) rem Big (Z)
+           and then Big_Q =
+             (if Round then
+                Round_Quotient (Big (X) * Big (Y), Big (Z), Quot, Big_R)
+              else Quot)
+           and then Big (Ru) = abs Big_R
+           and then Big (Qu) = abs Big_Q
+           and then In_Int32_Range (Big_Q)
+           and then In_Int32_Range (Big_R)
+           and then R =
+             (if (X >= 0) = (Y >= 0) then To_Pos_Int (Ru) else To_Neg_Int (Ru))
+           and then Q =
+             (if ((X >= 0) = (Y >= 0)) = (Z >= 0) then To_Pos_Int (Qu)
+              else To_Neg_Int (Qu)),  --  need to ensure To_Pos_Int precondition
+         Post => Big (R) = Big_R and then Big (Q) = Big_Q;
+       --  Proves final signs match the intended result after the unsigned
+       --  division is done.
+ 
+       -----------------------------
+       -- Prove_Negative_Dividend --
+       -----------------------------
+ 
+       procedure Prove_Negative_Dividend is
+       begin
+          Lemma_Mult_Non_Positive (Big (X), Big (Y));
+       end Prove_Negative_Dividend;
+ 
+       --------------------
+       -- Prove_Overflow --
+       --------------------
+ 
+       procedure Prove_Overflow is
+       begin
+          Lemma_Div_Ge (Mult, Big_2xx32, Big (Uns32'(abs Z)));
+          Lemma_Abs_Commutation (Z);
+          Lemma_Abs_Div_Commutation (Big (X) * Big (Y), Big (Z));
+       end Prove_Overflow;
+ 
+       -----------------------------
+       -- Prove_Positive_Dividend --
+       -----------------------------
+ 
+       procedure Prove_Positive_Dividend is
+       begin
+          Lemma_Mult_Non_Negative (Big (X), Big (Y));
+       end Prove_Positive_Dividend;
+ 
+       -------------------------
+       -- Prove_Rounding_Case --
+       -------------------------
+ 
+       procedure Prove_Rounding_Case is
+       begin
+          if Same_Sign (Big (X) * Big (Y), Big (Z)) then
+             null;
+          end if;
+       end Prove_Rounding_Case;
+ 
+       ------------------
+       -- Prove_Sign_R --
+       ------------------
+ 
+       procedure Prove_Sign_R is
+       begin
+          pragma Assert (In_Int32_Range (Big (Z)));
+       end Prove_Sign_R;
+ 
+       -----------------
+       -- Prove_Signs --
+       -----------------
+ 
+       procedure Prove_Signs is null;
+ 
+    --  Start of processing for Scaled_Divide32
+ 
     begin
        --  First do the 64-bit multiplication
  
        D := Uns64 (Xu) * Uns64 (Yu);
  
+       pragma Assert (Mult = Big (D));
+       Lemma_Hi_Lo (D, Hi (D), Lo (D));
+       pragma Assert (Mult = Big_2xx32 * Big (Hi (D)) + Big (Lo (D)));
+ 
+       --  If divisor is zero, raise error
+ 
+       if Z = 0 then
+          Raise_Error;
+       end if;
+ 
+       Quot := Big (X) * Big (Y) / Big (Z);
+       Big_R := Big (X) * Big (Y) rem Big (Z);
+       if Round then
+          Big_Q := Round_Quotient (Big (X) * Big (Y), Big (Z), Quot, Big_R);
+       else
+          Big_Q := Quot;
+       end if;
+ 
        --  If dividend is too large, raise error
  
        if Hi (D) >= Zu then
+          Lemma_Ge_Commutation (Hi (D), Zu);
+          pragma Assert (Mult >= Big_2xx32 * Big (Zu));
+          Prove_Overflow;
           Raise_Error;
+       end if;
  
        --  Then do the 64-bit division
  
!       Qu := Uns32 (D / Uns64 (Zu));
!       Ru := Uns32 (D rem Uns64 (Zu));
! 
!       Lemma_Abs_Div_Commutation (Big (X) * Big (Y), Big (Z));
!       Lemma_Abs_Rem_Commutation (Big (X) * Big (Y), Big (Z));
!       Lemma_Abs_Mult_Commutation (Big (X), Big (Y));
!       Lemma_Abs_Commutation (X);
!       Lemma_Abs_Commutation (Y);
!       Lemma_Abs_Commutation (Z);
!       Lemma_Mult_Commutation (Uns64 (Xu), Uns64 (Yu), D);
!       Lemma_Div_Commutation (D, Uns64 (Zu));
!       Lemma_Rem_Commutation (D, Uns64 (Zu));
! 
!       pragma Assert (Big (Ru) = abs Big_R);
!       pragma Assert (Big (Qu) = abs Quot);
!       pragma Assert (Big (Zu) = Big (Uns32'(abs Z)));
  
        --  Deal with rounding case
  
!       if Round then
!          Prove_Rounding_Case;
  
!          if Ru > (Zu - Uns32'(1)) / Uns32'(2) then
!             pragma Assert (abs Big_Q = Big (Qu) + 1);
  
!             --  Protect against wrapping around when rounding, by signaling
!             --  an overflow when the quotient is too large.
  
!             if Qu = Uns32'Last then
!                pragma Assert (abs Big_Q = Big_2xx32);
!                Lemma_Not_In_Range_Big2xx32;
!                Raise_Error;
!             end if;
! 
!             Qu := Qu + Uns32'(1);
!          end if;
        end if;
  
+       pragma Assert (Big (Qu) = abs Big_Q);
+       pragma Assert (Big (Ru) = abs Big_R);
+ 
        --  Set final signs (RM 4.5.5(27-30))
  
        --  Case of dividend (X * Y) sign positive
  
        if (X >= 0 and then Y >= 0) or else (X < 0 and then Y < 0) then
+          Prove_Positive_Dividend;
+ 
           R := To_Pos_Int (Ru);
           Q := (if Z > 0 then To_Pos_Int (Qu) else To_Neg_Int (Qu));
  
        --  Case of dividend (X * Y) sign negative
  
        else
+          Prove_Negative_Dividend;
+ 
           R := To_Neg_Int (Ru);
           Q := (if Z > 0 then To_Neg_Int (Qu) else To_Pos_Int (Qu));
        end if;
+ 
+       Prove_Sign_R;
+       Prove_Signs;
     end Scaled_Divide32;
  
     ----------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-arit32.ads gcc-12.1.0/gcc/ada/libgnat/s-arit32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-arit32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-arit32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
***************
*** 33,49 ****
  --  signed integer values in cases where either overflow checking is
  --  required, or intermediate results are longer than 32 bits.
  
  with Interfaces;
  
! package System.Arith_32 is
!    pragma Pure;
  
     subtype Int32 is Interfaces.Integer_32;
  
     procedure Scaled_Divide32
       (X, Y, Z : Int32;
        Q, R    : out Int32;
!       Round   : Boolean);
     --  Performs the division of (X * Y) / Z, storing the quotient in Q
     --  and the remainder in R. Constraint_Error is raised if Z is zero,
     --  or if the quotient does not fit in 32 bits. Round indicates if
--- 33,111 ----
  --  signed integer values in cases where either overflow checking is
  --  required, or intermediate results are longer than 32 bits.
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced
+ --  by setting the corresponding assertion policy to Ignore. Postconditions
+ --  and contract cases should not be executed at runtime as well, in order
+ --  not to slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
  with Interfaces;
+ with Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
  
! package System.Arith_32
!   with Pure, SPARK_Mode
! is
!    use type Ada.Numerics.Big_Numbers.Big_Integers_Ghost.Big_Integer;
!    use type Interfaces.Integer_32;
  
     subtype Int32 is Interfaces.Integer_32;
  
+    subtype Big_Integer is
+      Ada.Numerics.Big_Numbers.Big_Integers_Ghost.Big_Integer
+    with Ghost;
+ 
+    package Signed_Conversion is new
+      Ada.Numerics.Big_Numbers.Big_Integers_Ghost.Signed_Conversions
+      (Int => Int32);
+ 
+    function Big (Arg : Int32) return Big_Integer is
+      (Signed_Conversion.To_Big_Integer (Arg))
+    with Ghost;
+ 
+    function In_Int32_Range (Arg : Big_Integer) return Boolean is
+      (Ada.Numerics.Big_Numbers.Big_Integers_Ghost.In_Range
+        (Arg, Big (Int32'First), Big (Int32'Last)))
+    with Ghost;
+ 
+    function Same_Sign (X, Y : Big_Integer) return Boolean is
+      (X = Big (Int32'(0))
+         or else Y = Big (Int32'(0))
+         or else (X < Big (Int32'(0))) = (Y < Big (Int32'(0))))
+    with Ghost;
+ 
+    function Round_Quotient (X, Y, Q, R : Big_Integer) return Big_Integer is
+      (if abs R > (abs Y - Big (Int32'(1))) / Big (Int32'(2)) then
+        (if Same_Sign (X, Y) then Q + Big (Int32'(1))
+         else Q - Big (Int32'(1)))
+       else
+         Q)
+    with
+      Ghost,
+      Pre => Y /= 0 and then Q = X / Y and then R = X rem Y;
+ 
     procedure Scaled_Divide32
       (X, Y, Z : Int32;
        Q, R    : out Int32;
!       Round   : Boolean)
!    with
!      Pre  => Z /= 0
!        and then In_Int32_Range
!          (if Round then Round_Quotient (Big (X) * Big (Y), Big (Z),
!                                         Big (X) * Big (Y) / Big (Z),
!                                         Big (X) * Big (Y) rem Big (Z))
!           else Big (X) * Big (Y) / Big (Z)),
!      Post => Big (R) = Big (X) * Big (Y) rem Big (Z)
!        and then
!          (if Round then
!             Big (Q) = Round_Quotient (Big (X) * Big (Y), Big (Z),
!                                       Big (X) * Big (Y) / Big (Z), Big (R))
!           else
!             Big (Q) = Big (X) * Big (Y) / Big (Z));
     --  Performs the division of (X * Y) / Z, storing the quotient in Q
     --  and the remainder in R. Constraint_Error is raised if Z is zero,
     --  or if the quotient does not fit in 32 bits. Round indicates if
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-arit64.adb gcc-12.1.0/gcc/ada/libgnat/s-arit64.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-arit64.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-arit64.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,37 ****
  
  with System.Arith_Double;
  
! package body System.Arith_64 is
  
     subtype Uns64 is Interfaces.Unsigned_64;
     subtype Uns32 is Interfaces.Unsigned_32;
--- 31,39 ----
  
  with System.Arith_Double;
  
! package body System.Arith_64
!   with SPARK_Mode
! is
  
     subtype Uns64 is Interfaces.Unsigned_64;
     subtype Uns32 is Interfaces.Unsigned_32;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-arit64.ads gcc-12.1.0/gcc/ada/libgnat/s-arit64.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-arit64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-arit64.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 36,66 ****
  pragma Restrictions (No_Elaboration_Code);
  --  Allow direct call from gigi generated code
  
  with Interfaces;
  
! package System.Arith_64 is
!    pragma Pure;
  
     subtype Int64 is Interfaces.Integer_64;
  
!    function Add_With_Ovflo_Check64 (X, Y : Int64) return Int64;
     --  Raises Constraint_Error if sum of operands overflows 64 bits,
     --  otherwise returns the 64-bit signed integer sum.
  
!    function Subtract_With_Ovflo_Check64 (X, Y : Int64) return Int64;
     --  Raises Constraint_Error if difference of operands overflows 64
     --  bits, otherwise returns the 64-bit signed integer difference.
  
!    function Multiply_With_Ovflo_Check64 (X, Y : Int64) return Int64;
     pragma Export (C, Multiply_With_Ovflo_Check64, "__gnat_mulv64");
     --  Raises Constraint_Error if product of operands overflows 64
     --  bits, otherwise returns the 64-bit signed integer product.
     --  Gigi may also call this routine directly.
  
     procedure Scaled_Divide64
       (X, Y, Z : Int64;
        Q, R    : out Int64;
!       Round   : Boolean);
     --  Performs the division of (X * Y) / Z, storing the quotient in Q
     --  and the remainder in R. Constraint_Error is raised if Z is zero,
     --  or if the quotient does not fit in 64 bits. Round indicates if
--- 36,137 ----
  pragma Restrictions (No_Elaboration_Code);
  --  Allow direct call from gigi generated code
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced
+ --  by setting the corresponding assertion policy to Ignore. Postconditions
+ --  and contract cases should not be executed at runtime as well, in order
+ --  not to slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
+ with Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
  with Interfaces;
  
! package System.Arith_64
!   with Pure, SPARK_Mode
! is
!    use type Ada.Numerics.Big_Numbers.Big_Integers_Ghost.Big_Integer;
!    use type Interfaces.Integer_64;
  
     subtype Int64 is Interfaces.Integer_64;
  
!    subtype Big_Integer is
!      Ada.Numerics.Big_Numbers.Big_Integers_Ghost.Big_Integer
!    with Ghost;
! 
!    package Signed_Conversion is new
!      Ada.Numerics.Big_Numbers.Big_Integers_Ghost.Signed_Conversions
!      (Int => Int64);
! 
!    function Big (Arg : Int64) return Big_Integer is
!      (Signed_Conversion.To_Big_Integer (Arg))
!    with Ghost;
! 
!    function In_Int64_Range (Arg : Big_Integer) return Boolean is
!      (Ada.Numerics.Big_Numbers.Big_Integers_Ghost.In_Range
!        (Arg, Big (Int64'First), Big (Int64'Last)))
!    with Ghost;
! 
!    function Add_With_Ovflo_Check64 (X, Y : Int64) return Int64
!    with
!      Pre  => In_Int64_Range (Big (X) + Big (Y)),
!      Post => Add_With_Ovflo_Check64'Result = X + Y;
     --  Raises Constraint_Error if sum of operands overflows 64 bits,
     --  otherwise returns the 64-bit signed integer sum.
  
!    function Subtract_With_Ovflo_Check64 (X, Y : Int64) return Int64
!    with
!      Pre  => In_Int64_Range (Big (X) - Big (Y)),
!      Post => Subtract_With_Ovflo_Check64'Result = X - Y;
     --  Raises Constraint_Error if difference of operands overflows 64
     --  bits, otherwise returns the 64-bit signed integer difference.
  
!    function Multiply_With_Ovflo_Check64 (X, Y : Int64) return Int64
!    with
!      Pre  => In_Int64_Range (Big (X) * Big (Y)),
!      Post => Multiply_With_Ovflo_Check64'Result = X * Y;
     pragma Export (C, Multiply_With_Ovflo_Check64, "__gnat_mulv64");
     --  Raises Constraint_Error if product of operands overflows 64
     --  bits, otherwise returns the 64-bit signed integer product.
     --  Gigi may also call this routine directly.
  
+    function Same_Sign (X, Y : Big_Integer) return Boolean is
+      (X = Big (Int64'(0))
+         or else Y = Big (Int64'(0))
+         or else (X < Big (Int64'(0))) = (Y < Big (Int64'(0))))
+    with Ghost;
+ 
+    function Round_Quotient (X, Y, Q, R : Big_Integer) return Big_Integer is
+      (if abs R > (abs Y - Big (Int64'(1))) / Big (Int64'(2)) then
+        (if Same_Sign (X, Y) then Q + Big (Int64'(1))
+         else Q - Big (Int64'(1)))
+       else
+         Q)
+    with
+      Ghost,
+      Pre => Y /= 0 and then Q = X / Y and then R = X rem Y;
+ 
     procedure Scaled_Divide64
       (X, Y, Z : Int64;
        Q, R    : out Int64;
!       Round   : Boolean)
!    with
!      Pre  => Z /= 0
!        and then In_Int64_Range
!          (if Round then Round_Quotient (Big (X) * Big (Y), Big (Z),
!                                         Big (X) * Big (Y) / Big (Z),
!                                         Big (X) * Big (Y) rem Big (Z))
!           else Big (X) * Big (Y) / Big (Z)),
!      Post => Big (R) = Big (X) * Big (Y) rem Big (Z)
!        and then
!          (if Round then
!             Big (Q) = Round_Quotient (Big (X) * Big (Y), Big (Z),
!                                       Big (X) * Big (Y) / Big (Z), Big (R))
!           else
!             Big (Q) = Big (X) * Big (Y) / Big (Z));
     --  Performs the division of (X * Y) / Z, storing the quotient in Q
     --  and the remainder in R. Constraint_Error is raised if Z is zero,
     --  or if the quotient does not fit in 64 bits. Round indicates if
*************** package System.Arith_64 is
*** 78,84 ****
     procedure Double_Divide64
       (X, Y, Z : Int64;
        Q, R    : out Int64;
!       Round   : Boolean);
     --  Performs the division X / (Y * Z), storing the quotient in Q and
     --  the remainder in R. Constraint_Error is raised if Y or Z is zero,
     --  or if the quotient does not fit in 64 bits. Round indicates if the
--- 149,170 ----
     procedure Double_Divide64
       (X, Y, Z : Int64;
        Q, R    : out Int64;
!       Round   : Boolean)
!    with
!      Pre  => Y /= 0
!        and then Z /= 0
!        and then In_Int64_Range
!          (if Round then Round_Quotient (Big (X), Big (Y) * Big (Z),
!                                         Big (X) / (Big (Y) * Big (Z)),
!                                         Big (X) rem (Big (Y) * Big (Z)))
!           else Big (X) / (Big (Y) * Big (Z))),
!      Post => Big (R) = Big (X) rem (Big (Y) * Big (Z))
!        and then
!          (if Round then
!             Big (Q) = Round_Quotient (Big (X), Big (Y) * Big (Z),
!                                       Big (X) / (Big (Y) * Big (Z)), Big (R))
!           else
!             Big (Q) = Big (X) / (Big (Y) * Big (Z)));
     --  Performs the division X / (Y * Z), storing the quotient in Q and
     --  the remainder in R. Constraint_Error is raised if Y or Z is zero,
     --  or if the quotient does not fit in 64 bits. Round indicates if the
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-assert.adb gcc-12.1.0/gcc/ada/libgnat/s-assert.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-assert.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-assert.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Exceptions;
  with System.Exceptions_Debug;
  
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-assert.ads gcc-12.1.0/gcc/ada/libgnat/s-assert.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-assert.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-assert.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 36,46 ****
  --  This unit may be used directly from an application program by providing
  --  an appropriate WITH, and the interface can be expected to remain stable.
  
! pragma Compiler_Unit_Warning;
  
  package System.Assertions is
  
!    Assert_Failure : exception;
     --  Exception raised when assertion fails
  
     procedure Raise_Assert_Failure (Msg : String);
--- 36,46 ----
  --  This unit may be used directly from an application program by providing
  --  an appropriate WITH, and the interface can be expected to remain stable.
  
! with Ada.Assertions;
  
  package System.Assertions is
  
!    Assert_Failure : exception renames Ada.Assertions.Assertion_Error;
     --  Exception raised when assertion fails
  
     procedure Raise_Assert_Failure (Msg : String);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-atacco.adb gcc-12.1.0/gcc/ada/libgnat/s-atacco.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-atacco.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-atacco.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-atacco.ads gcc-12.1.0/gcc/ada/libgnat/s-atacco.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-atacco.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-atacco.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-atocou.adb gcc-12.1.0/gcc/ada/libgnat/s-atocou.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-atocou.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-atocou.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-atocou.ads gcc-12.1.0/gcc/ada/libgnat/s-atocou.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-atocou.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-atocou.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
***************
*** 31,36 ****
--- 31,38 ----
  
  --  This package provides atomic counter on platforms where it is supported:
  --    - all Alpha platforms
+ --    - all AARCH64 platforms
+ --    - all ARM platforms
  --    - all ia64 platforms
  --    - all PowerPC platforms
  --    - all SPARC V9 platforms
*************** private
*** 101,107 ****
  
     type Atomic_Counter is record
        Value : aliased Atomic_Unsigned := 1;
-       pragma Atomic (Value);
     end record;
  
  end System.Atomic_Counters;
--- 103,108 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-atocou__builtin.adb gcc-12.1.0/gcc/ada/libgnat/s-atocou__builtin.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-atocou__builtin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-atocou__builtin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
***************
*** 29,49 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package implements Atomic_Counter and Atomic_Unsigned operations
! --  for platforms where GCC supports __sync_add_and_fetch_4 and
! --  __sync_sub_and_fetch_4 builtins.
  
  package body System.Atomic_Counters is
  
!    procedure Sync_Add_And_Fetch
!      (Ptr   : access Atomic_Unsigned;
!       Value : Atomic_Unsigned);
!    pragma Import (Intrinsic, Sync_Add_And_Fetch, "__sync_add_and_fetch_4");
  
!    function Sync_Sub_And_Fetch
!      (Ptr   : access Atomic_Unsigned;
!       Value : Atomic_Unsigned) return Atomic_Unsigned;
!    pragma Import (Intrinsic, Sync_Sub_And_Fetch, "__sync_sub_and_fetch_4");
  
     ---------------
     -- Decrement --
--- 29,55 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package implements Atomic_Counter and Atomic_Unsigned operations for
! --  platforms where GCC supports __atomic_add_fetch and __atomic_sub_fetch
! --  builtins.
! 
! with System.Atomic_Primitives; use System.Atomic_Primitives;
  
  package body System.Atomic_Counters is
  
!    function Atomic_Add_Fetch
!      (Ptr   : System.Address;
!       Val   : Atomic_Unsigned;
!       Model : Mem_Model := Seq_Cst)
!      return Atomic_Unsigned;
!    pragma Import (Intrinsic, Atomic_Add_Fetch, "__atomic_add_fetch");
  
!    function Atomic_Sub_Fetch
!      (Ptr   : System.Address;
!       Val   : Atomic_Unsigned;
!       Model : Mem_Model := Seq_Cst)
!      return Atomic_Unsigned;
!    pragma Import (Intrinsic, Atomic_Sub_Fetch, "__atomic_sub_fetch");
  
     ---------------
     -- Decrement --
*************** package body System.Atomic_Counters is
*** 51,74 ****
  
     procedure Decrement (Item : aliased in out Atomic_Unsigned) is
     begin
!       if Sync_Sub_And_Fetch (Item'Unrestricted_Access, 1) = 0 then
           null;
        end if;
     end Decrement;
  
     function Decrement (Item : aliased in out Atomic_Unsigned) return Boolean is
     begin
!       return Sync_Sub_And_Fetch (Item'Unrestricted_Access, 1) = 0;
     end Decrement;
  
     function Decrement (Item : in out Atomic_Counter) return Boolean is
     begin
!       --  Note: the use of Unrestricted_Access here is required because we
!       --  are obtaining an access-to-volatile pointer to a non-volatile object.
!       --  This is not allowed for [Unchecked_]Access, but is safe in this case
!       --  because we know that no aliases are being created.
! 
!       return Sync_Sub_And_Fetch (Item.Value'Unrestricted_Access, 1) = 0;
     end Decrement;
  
     ---------------
--- 57,75 ----
  
     procedure Decrement (Item : aliased in out Atomic_Unsigned) is
     begin
!       if Atomic_Sub_Fetch (Item'Address, 1) = 0 then
           null;
        end if;
     end Decrement;
  
     function Decrement (Item : aliased in out Atomic_Unsigned) return Boolean is
     begin
!       return Atomic_Sub_Fetch (Item'Address, 1) = 0;
     end Decrement;
  
     function Decrement (Item : in out Atomic_Counter) return Boolean is
     begin
!       return Atomic_Sub_Fetch (Item.Value'Address, 1) = 0;
     end Decrement;
  
     ---------------
*************** package body System.Atomic_Counters is
*** 77,93 ****
  
     procedure Increment (Item : aliased in out Atomic_Unsigned) is
     begin
!       Sync_Add_And_Fetch (Item'Unrestricted_Access, 1);
     end Increment;
  
     procedure Increment (Item : in out Atomic_Counter) is
     begin
!       --  Note: the use of Unrestricted_Access here is required because we are
!       --  obtaining an access-to-volatile pointer to a non-volatile object.
!       --  This is not allowed for [Unchecked_]Access, but is safe in this case
!       --  because we know that no aliases are being created.
! 
!       Sync_Add_And_Fetch (Item.Value'Unrestricted_Access, 1);
     end Increment;
  
     ----------------
--- 78,93 ----
  
     procedure Increment (Item : aliased in out Atomic_Unsigned) is
     begin
!       if Atomic_Add_Fetch (Item'Address, 1) = 0 then
!          null;
!       end if;
     end Increment;
  
     procedure Increment (Item : in out Atomic_Counter) is
     begin
!       if Atomic_Add_Fetch (Item.Value'Address, 1) = 0 then
!          null;
!       end if;
     end Increment;
  
     ----------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-atocou__x86.adb gcc-12.1.0/gcc/ada/libgnat/s-atocou__x86.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-atocou__x86.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-atocou__x86.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,112 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --               S Y S T E M . A T O M I C _ C O U N T E R S                --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 2011-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This implementation of the package for x86 processor. GCC can't generate
- --  code for atomic builtins for 386 CPU. Only increment/decrement instructions
- --  are supported, thus this implementaton uses machine code insertions to
- --  access the necessary instructions.
- 
- with System.Machine_Code;
- 
- package body System.Atomic_Counters is
- 
-    --  Add comments showing in normal asm language what we generate???
- 
-    ---------------
-    -- Decrement --
-    ---------------
- 
-    function Decrement (Item : aliased in out Atomic_Unsigned) return Boolean is
-       Aux : Boolean;
- 
-    begin
-       System.Machine_Code.Asm
-         (Template =>
-            "lock%; decl" & ASCII.HT & "%0" & ASCII.LF & ASCII.HT
-              & "sete %1",
-          Outputs  =>
-            (Atomic_Unsigned'Asm_Output ("=m", Item),
-             Boolean'Asm_Output ("=qm", Aux)),
-          Inputs   => Atomic_Unsigned'Asm_Input ("m", Item),
-          Volatile => True);
- 
-       return Aux;
-    end Decrement;
- 
-    procedure Decrement (Item : aliased in out Atomic_Unsigned) is
-    begin
-       if Decrement (Item) then
-          null;
-       end if;
-    end Decrement;
- 
-    function Decrement (Item : in out Atomic_Counter) return Boolean is
-    begin
-       return Decrement (Item.Value);
-    end Decrement;
- 
-    ---------------
-    -- Increment --
-    ---------------
- 
-    procedure Increment (Item : aliased in out Atomic_Unsigned) is
-    begin
-       System.Machine_Code.Asm
-         (Template => "lock%; incl" & ASCII.HT & "%0",
-          Outputs  => Atomic_Unsigned'Asm_Output ("=m", Item),
-          Inputs   => Atomic_Unsigned'Asm_Input ("m", Item),
-          Volatile => True);
-    end Increment;
- 
-    procedure Increment (Item : in out Atomic_Counter) is
-    begin
-       Increment (Item.Value);
-    end Increment;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize (Item : out Atomic_Counter) is
-    begin
-       Item.Value := 1;
-    end Initialize;
- 
-    ------------
-    -- Is_One --
-    ------------
- 
-    function Is_One (Item : Atomic_Counter) return Boolean is
-    begin
-       return Item.Value = 1;
-    end Is_One;
- 
- end System.Atomic_Counters;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-atoope.ads gcc-12.1.0/gcc/ada/libgnat/s-atoope.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-atoope.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-atoope.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2020, Free Software Foundation, Inc.  --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2022, Free Software Foundation, Inc.  --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-atopex.adb gcc-12.1.0/gcc/ada/libgnat/s-atopex.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-atopex.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-atopex.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2022, 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- --
*************** package body System.Atomic_Operations.Ex
*** 43,78 ****
        Value : Atomic_Type) return Atomic_Type
     is
        pragma Warnings (Off);
!       function Atomic_Exchange_1
!         (Ptr   : System.Address;
!          Val   : Atomic_Type;
!          Model : Mem_Model := Seq_Cst) return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Exchange_1, "__atomic_exchange_1");
!       function Atomic_Exchange_2
!         (Ptr   : System.Address;
!          Val   : Atomic_Type;
!          Model : Mem_Model := Seq_Cst) return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Exchange_2, "__atomic_exchange_2");
!       function Atomic_Exchange_4
!         (Ptr   : System.Address;
!          Val   : Atomic_Type;
!          Model : Mem_Model := Seq_Cst) return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Exchange_4, "__atomic_exchange_4");
!       function Atomic_Exchange_8
          (Ptr   : System.Address;
           Val   : Atomic_Type;
           Model : Mem_Model := Seq_Cst) return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Exchange_8, "__atomic_exchange_8");
        pragma Warnings (On);
  
     begin
!       case Atomic_Type'Object_Size is
!          when 8      => return Atomic_Exchange_1 (Item'Address, Value);
!          when 16     => return Atomic_Exchange_2 (Item'Address, Value);
!          when 32     => return Atomic_Exchange_4 (Item'Address, Value);
!          when 64     => return Atomic_Exchange_8 (Item'Address, Value);
!          when others => raise Program_Error;
!       end case;
     end Atomic_Exchange;
  
     ---------------------------------
--- 43,61 ----
        Value : Atomic_Type) return Atomic_Type
     is
        pragma Warnings (Off);
!       function Atomic_Exchange
          (Ptr   : System.Address;
           Val   : Atomic_Type;
           Model : Mem_Model := Seq_Cst) return Atomic_Type;
!       pragma Import (Intrinsic, Atomic_Exchange, "__atomic_exchange_n");
        pragma Warnings (On);
  
     begin
!       if Atomic_Type'Object_Size in 8 | 16 | 32 | 64 then
!          return Atomic_Exchange (Item'Address, Value);
!       else
!          raise Program_Error;
!       end if;
     end Atomic_Exchange;
  
     ---------------------------------
*************** package body System.Atomic_Operations.Ex
*** 85,149 ****
        Desired : Atomic_Type) return Boolean
     is
        pragma Warnings (Off);
!       function Atomic_Compare_Exchange_1
!         (Ptr           : System.Address;
!          Expected      : System.Address;
!          Desired       : Atomic_Type;
!          Weak          : bool := False;
!          Success_Model : Mem_Model := Seq_Cst;
!          Failure_Model : Mem_Model := Seq_Cst) return bool;
!       pragma Import
!         (Intrinsic, Atomic_Compare_Exchange_1, "__atomic_compare_exchange_1");
!       function Atomic_Compare_Exchange_2
!         (Ptr           : System.Address;
!          Expected      : System.Address;
!          Desired       : Atomic_Type;
!          Weak          : bool := False;
!          Success_Model : Mem_Model := Seq_Cst;
!          Failure_Model : Mem_Model := Seq_Cst) return bool;
!       pragma Import
!         (Intrinsic, Atomic_Compare_Exchange_2, "__atomic_compare_exchange_2");
!       function Atomic_Compare_Exchange_4
!         (Ptr           : System.Address;
!          Expected      : System.Address;
!          Desired       : Atomic_Type;
!          Weak          : bool := False;
!          Success_Model : Mem_Model := Seq_Cst;
!          Failure_Model : Mem_Model := Seq_Cst) return bool;
!       pragma Import
!         (Intrinsic, Atomic_Compare_Exchange_4, "__atomic_compare_exchange_4");
!       function Atomic_Compare_Exchange_8
          (Ptr           : System.Address;
           Expected      : System.Address;
           Desired       : Atomic_Type;
!          Weak          : bool := False;
           Success_Model : Mem_Model := Seq_Cst;
!          Failure_Model : Mem_Model := Seq_Cst) return bool;
        pragma Import
!         (Intrinsic, Atomic_Compare_Exchange_8, "__atomic_compare_exchange_8");
        pragma Warnings (On);
  
     begin
!       case Atomic_Type'Object_Size is
!          when 8 =>
!             return Boolean
!               (Atomic_Compare_Exchange_1
!                 (Item'Address, Prior'Address, Desired));
!          when 16 =>
!             return Boolean
!               (Atomic_Compare_Exchange_2
!                 (Item'Address, Prior'Address, Desired));
!          when 32 =>
!             return Boolean
!               (Atomic_Compare_Exchange_4
!                 (Item'Address, Prior'Address, Desired));
!          when 64 =>
!             return Boolean
!               (Atomic_Compare_Exchange_8
!                 (Item'Address, Prior'Address, Desired));
!          when others =>
!             raise Program_Error;
!       end case;
     end Atomic_Compare_And_Exchange;
  
     ------------------
--- 68,90 ----
        Desired : Atomic_Type) return Boolean
     is
        pragma Warnings (Off);
!       function Atomic_Compare_Exchange
          (Ptr           : System.Address;
           Expected      : System.Address;
           Desired       : Atomic_Type;
!          Weak          : Boolean := False;
           Success_Model : Mem_Model := Seq_Cst;
!          Failure_Model : Mem_Model := Seq_Cst) return Boolean;
        pragma Import
!         (Intrinsic, Atomic_Compare_Exchange, "__atomic_compare_exchange_n");
        pragma Warnings (On);
  
     begin
!       if Atomic_Type'Object_Size in 8 | 16 | 32 | 64 then
!          return Atomic_Compare_Exchange (Item'Address, Prior'Address, Desired);
!       else
!          raise Program_Error;
!       end if;
     end Atomic_Compare_And_Exchange;
  
     ------------------
*************** package body System.Atomic_Operations.Ex
*** 154,160 ****
        pragma Unreferenced (Item);
        use type Interfaces.C.size_t;
     begin
!       return Boolean (Atomic_Always_Lock_Free (Atomic_Type'Object_Size / 8));
     end Is_Lock_Free;
  
  end System.Atomic_Operations.Exchange;
--- 95,101 ----
        pragma Unreferenced (Item);
        use type Interfaces.C.size_t;
     begin
!       return Atomic_Always_Lock_Free (Atomic_Type'Object_Size / 8);
     end Is_Lock_Free;
  
  end System.Atomic_Operations.Exchange;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-atopex.ads gcc-12.1.0/gcc/ada/libgnat/s-atopex.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-atopex.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-atopex.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2020, Free Software Foundation, Inc.  --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                 Copyright (C) 2019-2022, Free Software Foundation, Inc.  --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-atopri.adb gcc-12.1.0/gcc/ada/libgnat/s-atopri.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-atopri.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-atopri.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --              Copyright (C) 2012-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --              Copyright (C) 2012-2022, 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- --
***************
*** 31,201 ****
  
  package body System.Atomic_Primitives is
  
!    ----------------------
!    -- Lock_Free_Read_8 --
!    ----------------------
! 
!    function Lock_Free_Read_8 (Ptr : Address) return uint8 is
!    begin
!       if uint8'Atomic_Always_Lock_Free then
!          return Atomic_Load_8 (Ptr, Acquire);
!       else
!          raise Program_Error;
!       end if;
!    end Lock_Free_Read_8;
! 
!    -----------------------
!    -- Lock_Free_Read_16 --
!    -----------------------
! 
!    function Lock_Free_Read_16 (Ptr : Address) return uint16 is
!    begin
!       if uint16'Atomic_Always_Lock_Free then
!          return Atomic_Load_16 (Ptr, Acquire);
!       else
!          raise Program_Error;
!       end if;
!    end Lock_Free_Read_16;
! 
!    -----------------------
!    -- Lock_Free_Read_32 --
!    -----------------------
! 
!    function Lock_Free_Read_32 (Ptr : Address) return uint32 is
!    begin
!       if uint32'Atomic_Always_Lock_Free then
!          return Atomic_Load_32 (Ptr, Acquire);
!       else
!          raise Program_Error;
!       end if;
!    end Lock_Free_Read_32;
  
!    -----------------------
!    -- Lock_Free_Read_64 --
!    -----------------------
  
-    function Lock_Free_Read_64 (Ptr : Address) return uint64 is
     begin
!       if uint64'Atomic_Always_Lock_Free then
!          return Atomic_Load_64 (Ptr, Acquire);
        else
           raise Program_Error;
        end if;
!    end Lock_Free_Read_64;
! 
!    ---------------------------
!    -- Lock_Free_Try_Write_8 --
!    ---------------------------
! 
!    function Lock_Free_Try_Write_8
!       (Ptr      : Address;
!        Expected : in out uint8;
!        Desired  : uint8) return Boolean
!    is
!       Actual : uint8;
! 
!    begin
!       if Expected /= Desired then
! 
!          if uint8'Atomic_Always_Lock_Free then
!             Actual := Sync_Compare_And_Swap_8 (Ptr, Expected, Desired);
!          else
!             raise Program_Error;
!          end if;
! 
!          if Actual /= Expected then
!             Expected := Actual;
!             return False;
!          end if;
!       end if;
! 
!       return True;
!    end Lock_Free_Try_Write_8;
! 
!    ----------------------------
!    -- Lock_Free_Try_Write_16 --
!    ----------------------------
! 
!    function Lock_Free_Try_Write_16
!       (Ptr      : Address;
!        Expected : in out uint16;
!        Desired  : uint16) return Boolean
!    is
!       Actual : uint16;
! 
!    begin
!       if Expected /= Desired then
! 
!          if uint16'Atomic_Always_Lock_Free then
!             Actual := Sync_Compare_And_Swap_16 (Ptr, Expected, Desired);
!          else
!             raise Program_Error;
!          end if;
! 
!          if Actual /= Expected then
!             Expected := Actual;
!             return False;
!          end if;
!       end if;
! 
!       return True;
!    end Lock_Free_Try_Write_16;
  
!    ----------------------------
!    -- Lock_Free_Try_Write_32 --
!    ----------------------------
  
!    function Lock_Free_Try_Write_32
        (Ptr      : Address;
!        Expected : in out uint32;
!        Desired  : uint32) return Boolean
     is
!       Actual : uint32;
  
     begin
        if Expected /= Desired then
! 
!          if uint32'Atomic_Always_Lock_Free then
!             Actual := Sync_Compare_And_Swap_32 (Ptr, Expected, Desired);
           else
              raise Program_Error;
           end if;
- 
-          if Actual /= Expected then
-             Expected := Actual;
-             return False;
-          end if;
        end if;
  
        return True;
!    end Lock_Free_Try_Write_32;
! 
!    ----------------------------
!    -- Lock_Free_Try_Write_64 --
!    ----------------------------
! 
!    function Lock_Free_Try_Write_64
!       (Ptr      : Address;
!        Expected : in out uint64;
!        Desired  : uint64) return Boolean
!    is
!       Actual : uint64;
! 
!    begin
!       if Expected /= Desired then
! 
!          if uint64'Atomic_Always_Lock_Free then
!             Actual := Sync_Compare_And_Swap_64 (Ptr, Expected, Desired);
!          else
!             raise Program_Error;
!          end if;
! 
!          if Actual /= Expected then
!             Expected := Actual;
!             return False;
!          end if;
!       end if;
  
-       return True;
-    end Lock_Free_Try_Write_64;
  end System.Atomic_Primitives;
--- 31,73 ----
  
  package body System.Atomic_Primitives is
  
!    --------------------
!    -- Lock_Free_Read --
!    --------------------
  
!    function Lock_Free_Read (Ptr : Address) return Atomic_Type is
!       function My_Atomic_Load is new Atomic_Load (Atomic_Type);
  
     begin
!       if Atomic_Type'Atomic_Always_Lock_Free then
!          return My_Atomic_Load (Ptr, Acquire);
        else
           raise Program_Error;
        end if;
!    end Lock_Free_Read;
  
!    -------------------------
!    -- Lock_Free_Try_Write --
!    -------------------------
  
!    function Lock_Free_Try_Write
        (Ptr      : Address;
!        Expected : in out Atomic_Type;
!        Desired  : Atomic_Type) return Boolean
     is
!       function My_Atomic_Compare_Exchange is
!         new Atomic_Compare_Exchange (Atomic_Type);
  
     begin
        if Expected /= Desired then
!          if Atomic_Type'Atomic_Always_Lock_Free then
!             return My_Atomic_Compare_Exchange (Ptr, Expected'Address, Desired);
           else
              raise Program_Error;
           end if;
        end if;
  
        return True;
!    end Lock_Free_Try_Write;
  
  end System.Atomic_Primitives;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-atopri.ads gcc-12.1.0/gcc/ada/libgnat/s-atopri.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-atopri.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-atopri.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --              Copyright (C) 2012-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --              Copyright (C) 2012-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains both atomic primitives defined from gcc built-in
  --  functions and operations used by the compiler to generate the lock-free
  --  implementation of protected objects.
  
--- 29,35 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains both atomic primitives defined from GCC built-in
  --  functions and operations used by the compiler to generate the lock-free
  --  implementation of protected objects.
  
*************** package System.Atomic_Primitives is
*** 62,143 ****
  
     subtype Mem_Model is Integer range Relaxed .. Last;
  
-    type bool is new Boolean;
-    pragma Convention (C, bool);
- 
     ------------------------------------
     -- GCC built-in atomic primitives --
     ------------------------------------
  
!    function Atomic_Load_8
!      (Ptr   : Address;
!       Model : Mem_Model := Seq_Cst) return uint8;
!    pragma Import (Intrinsic, Atomic_Load_8, "__atomic_load_1");
! 
!    function Atomic_Load_16
!      (Ptr   : Address;
!       Model : Mem_Model := Seq_Cst) return uint16;
!    pragma Import (Intrinsic, Atomic_Load_16, "__atomic_load_2");
! 
!    function Atomic_Load_32
!      (Ptr   : Address;
!       Model : Mem_Model := Seq_Cst) return uint32;
!    pragma Import (Intrinsic, Atomic_Load_32, "__atomic_load_4");
! 
!    function Atomic_Load_64
       (Ptr   : Address;
!       Model : Mem_Model := Seq_Cst) return uint64;
!    pragma Import (Intrinsic, Atomic_Load_64, "__atomic_load_8");
! 
!    function Sync_Compare_And_Swap_8
!      (Ptr      : Address;
!       Expected : uint8;
!       Desired  : uint8) return uint8;
!    pragma Import (Intrinsic,
!                   Sync_Compare_And_Swap_8,
!                   "__sync_val_compare_and_swap_1");
! 
!    function Sync_Compare_And_Swap_16
!      (Ptr      : Address;
!       Expected : uint16;
!       Desired  : uint16) return uint16;
!    pragma Import (Intrinsic,
!                   Sync_Compare_And_Swap_16,
!                   "__sync_val_compare_and_swap_2");
! 
!    function Sync_Compare_And_Swap_32
!      (Ptr      : Address;
!       Expected : uint32;
!       Desired  : uint32) return uint32;
!    pragma Import (Intrinsic,
!                   Sync_Compare_And_Swap_32,
!                   "__sync_val_compare_and_swap_4");
  
!    function Sync_Compare_And_Swap_64
!      (Ptr      : Address;
!       Expected : uint64;
!       Desired  : uint64) return uint64;
!    pragma Import (Intrinsic,
!                   Sync_Compare_And_Swap_64,
!                   "__sync_val_compare_and_swap_8");
  
!    --  ??? We might want to switch to the __atomic series of builtins for
!    --  compare-and-swap operations at some point.
  
!    --  function Atomic_Compare_Exchange_8
!    --    (Ptr           : Address;
!    --     Expected      : Address;
!    --     Desired       : uint8;
!    --     Weak          : Boolean   := False;
!    --     Success_Model : Mem_Model := Seq_Cst;
!    --     Failure_Model : Mem_Model := Seq_Cst) return Boolean;
!    --  pragma Import (Intrinsic,
!    --                 Atomic_Compare_Exchange_8,
!    --                 "__atomic_compare_exchange_1");
  
     function Atomic_Test_And_Set
       (Ptr   : System.Address;
!       Model : Mem_Model := Seq_Cst) return bool;
     pragma Import (Intrinsic, Atomic_Test_And_Set, "__atomic_test_and_set");
  
     procedure Atomic_Clear
--- 62,103 ----
  
     subtype Mem_Model is Integer range Relaxed .. Last;
  
     ------------------------------------
     -- GCC built-in atomic primitives --
     ------------------------------------
  
!    generic
!       type Atomic_Type is mod <>;
!    function Atomic_Load
       (Ptr   : Address;
!       Model : Mem_Model := Seq_Cst) return Atomic_Type;
!    pragma Import (Intrinsic, Atomic_Load, "__atomic_load_n");
  
!    function Atomic_Load_8  is new Atomic_Load (uint8);
!    function Atomic_Load_16 is new Atomic_Load (uint16);
!    function Atomic_Load_32 is new Atomic_Load (uint32);
!    function Atomic_Load_64 is new Atomic_Load (uint64);
  
!    generic
!       type Atomic_Type is mod <>;
!    function Atomic_Compare_Exchange
!      (Ptr           : Address;
!       Expected      : Address;
!       Desired       : Atomic_Type;
!       Weak          : Boolean   := False;
!       Success_Model : Mem_Model := Seq_Cst;
!       Failure_Model : Mem_Model := Seq_Cst) return Boolean;
!    pragma Import
!      (Intrinsic, Atomic_Compare_Exchange, "__atomic_compare_exchange_n");
  
!    function Atomic_Compare_Exchange_8  is new Atomic_Compare_Exchange (uint8);
!    function Atomic_Compare_Exchange_16 is new Atomic_Compare_Exchange (uint16);
!    function Atomic_Compare_Exchange_32 is new Atomic_Compare_Exchange (uint32);
!    function Atomic_Compare_Exchange_64 is new Atomic_Compare_Exchange (uint64);
  
     function Atomic_Test_And_Set
       (Ptr   : System.Address;
!       Model : Mem_Model := Seq_Cst) return Boolean;
     pragma Import (Intrinsic, Atomic_Test_And_Set, "__atomic_test_and_set");
  
     procedure Atomic_Clear
*************** package System.Atomic_Primitives is
*** 147,153 ****
  
     function Atomic_Always_Lock_Free
       (Size : Interfaces.C.size_t;
!       Ptr  : System.Address := System.Null_Address) return bool;
     pragma Import
       (Intrinsic, Atomic_Always_Lock_Free, "__atomic_always_lock_free");
  
--- 107,113 ----
  
     function Atomic_Always_Lock_Free
       (Size : Interfaces.C.size_t;
!       Ptr  : System.Address := System.Null_Address) return Boolean;
     pragma Import
       (Intrinsic, Atomic_Always_Lock_Free, "__atomic_always_lock_free");
  
*************** package System.Atomic_Primitives is
*** 158,203 ****
     --  The lock-free implementation uses two atomic instructions for the
     --  expansion of protected operations:
  
!    --  * Lock_Free_Read_N atomically loads the value of the protected component
!    --    accessed by the current protected operation.
! 
!    --  * Lock_Free_Try_Write_N tries to write the Desired value into Ptr only
!    --    if Expected and Desired mismatch.
! 
!    function Lock_Free_Read_8 (Ptr : Address) return uint8;
! 
!    function Lock_Free_Read_16 (Ptr : Address) return uint16;
! 
!    function Lock_Free_Read_32 (Ptr : Address) return uint32;
  
!    function Lock_Free_Read_64 (Ptr : Address) return uint64;
  
!    function Lock_Free_Try_Write_8
!       (Ptr      : Address;
!        Expected : in out uint8;
!        Desired  : uint8) return Boolean;
  
!    function Lock_Free_Try_Write_16
!       (Ptr      : Address;
!        Expected : in out uint16;
!        Desired  : uint16) return Boolean;
  
!    function Lock_Free_Try_Write_32
!       (Ptr      : Address;
!        Expected : in out uint32;
!        Desired  : uint32) return Boolean;
  
!    function Lock_Free_Try_Write_64
!       (Ptr      : Address;
!        Expected : in out uint64;
!        Desired  : uint64) return Boolean;
  
!    pragma Inline (Lock_Free_Read_8);
!    pragma Inline (Lock_Free_Read_16);
!    pragma Inline (Lock_Free_Read_32);
!    pragma Inline (Lock_Free_Read_64);
!    pragma Inline (Lock_Free_Try_Write_8);
!    pragma Inline (Lock_Free_Try_Write_16);
!    pragma Inline (Lock_Free_Try_Write_32);
!    pragma Inline (Lock_Free_Try_Write_64);
  end System.Atomic_Primitives;
--- 118,154 ----
     --  The lock-free implementation uses two atomic instructions for the
     --  expansion of protected operations:
  
!    --  * Lock_Free_Read atomically loads the value contained in Ptr (with the
!    --    Acquire synchronization mode).
  
!    --  * Lock_Free_Try_Write atomically tries to write the Desired value into
!    --    Ptr if Ptr contains the Expected value. It returns true if the value
!    --    in Ptr was changed, or False if it was not, in which case Expected is
!    --    updated to the unexpected value in Ptr. Note that it does nothing and
!    --    returns true if Desired and Expected are equal.
  
!    generic
!       type Atomic_Type is mod <>;
!    function Lock_Free_Read (Ptr : Address) return Atomic_Type;
  
!    function Lock_Free_Read_8  is new Lock_Free_Read (uint8);
!    function Lock_Free_Read_16 is new Lock_Free_Read (uint16);
!    function Lock_Free_Read_32 is new Lock_Free_Read (uint32);
!    function Lock_Free_Read_64 is new Lock_Free_Read (uint64);
  
!    generic
!       type Atomic_Type is mod <>;
!    function Lock_Free_Try_Write
!      (Ptr      : Address;
!       Expected : in out Atomic_Type;
!       Desired  : Atomic_Type) return Boolean;
  
!    function Lock_Free_Try_Write_8  is new Lock_Free_Try_Write (uint8);
!    function Lock_Free_Try_Write_16 is new Lock_Free_Try_Write (uint16);
!    function Lock_Free_Try_Write_32 is new Lock_Free_Try_Write (uint32);
!    function Lock_Free_Try_Write_64 is new Lock_Free_Try_Write (uint64);
  
! private
!    pragma Inline (Lock_Free_Read);
!    pragma Inline (Lock_Free_Try_Write);
  end System.Atomic_Primitives;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-auxdec.adb gcc-12.1.0/gcc/ada/libgnat/s-auxdec.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-auxdec.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-auxdec.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-auxdec.ads gcc-12.1.0/gcc/ada/libgnat/s-auxdec.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-auxdec.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-auxdec.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-bignum.adb gcc-12.1.0/gcc/ada/libgnat/s-bignum.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-bignum.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-bignum.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2012-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2012-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-bignum.ads gcc-12.1.0/gcc/ada/libgnat/s-bignum.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-bignum.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-bignum.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2012-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2012-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-bitfie.ads gcc-12.1.0/gcc/ada/libgnat/s-bitfie.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-bitfie.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-bitfie.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --               Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --               Copyright (C) 2019-2022, 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- --
*************** package System.Bitfields is
*** 47,56 ****
     pragma Provide_Shift_Operators (Val_2);
     type Val is mod 2**Val_Bits with Alignment => Val_Bytes;
  
!    --  ??? It turns out that enabling checks on the instantiation of
!    --  System.Bitfield_Utils.G makes a latent visibility bug appear on strict
!    --  alignment platforms related to alignment checks. Work around it by
!    --  suppressing these checks explicitly.
  
     pragma Suppress (Alignment_Check);
     package Utils is new System.Bitfield_Utils.G (Val, Val_2);
--- 47,55 ----
     pragma Provide_Shift_Operators (Val_2);
     type Val is mod 2**Val_Bits with Alignment => Val_Bytes;
  
!    --  Enabling checks on the instantiation of System.Bitfield_Utils.G makes a
!    --  latent visibility bug appear on strict alignment platforms related to
!    --  alignment checks. Work around it by suppressing these checks explicitly.
  
     pragma Suppress (Alignment_Check);
     package Utils is new System.Bitfield_Utils.G (Val, Val_2);
*************** package System.Bitfields is
*** 63,66 ****
--- 62,73 ----
        Size         : Utils.Bit_Size)
       renames Utils.Copy_Bitfield;
  
+    function Fast_Copy_Bitfield
+      (Src         : Val_2;
+       Src_Offset  : Utils.Bit_Offset;
+       Dest        : Val_2;
+       Dest_Offset : Utils.Bit_Offset;
+       Size        : Utils.Small_Size)
+      return Val_2 renames Utils.Fast_Copy_Bitfield;
+ 
  end System.Bitfields;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-bitops.adb gcc-12.1.0/gcc/ada/libgnat/s-bitops.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-bitops.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-bitops.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1996-2022, 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- --
***************
*** 29,38 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! pragma Compiler_Unit_Warning;
! 
! with System;                 use System;
! with System.Unsigned_Types;  use System.Unsigned_Types;
  
  with Ada.Exceptions;         use Ada.Exceptions;
  with Ada.Unchecked_Conversion;
--- 29,35 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with System.Unsigned_Types; use System.Unsigned_Types;
  
  with Ada.Exceptions;         use Ada.Exceptions;
  with Ada.Unchecked_Conversion;
*************** package body System.Bit_Ops is
*** 59,72 ****
     --  The following is an array of masks used to mask the final byte, either
     --  at the high end (big-endian case) or the low end (little-endian case).
  
!    Masks : constant array (1 .. 7) of Packed_Byte := (
       (1 - LE) * 2#1000_0000# + LE * 2#0000_0001#,
       (1 - LE) * 2#1100_0000# + LE * 2#0000_0011#,
       (1 - LE) * 2#1110_0000# + LE * 2#0000_0111#,
       (1 - LE) * 2#1111_0000# + LE * 2#0000_1111#,
       (1 - LE) * 2#1111_1000# + LE * 2#0001_1111#,
       (1 - LE) * 2#1111_1100# + LE * 2#0011_1111#,
!      (1 - LE) * 2#1111_1110# + LE * 2#0111_1111#);
  
     -----------------------
     -- Local Subprograms --
--- 56,69 ----
     --  The following is an array of masks used to mask the final byte, either
     --  at the high end (big-endian case) or the low end (little-endian case).
  
!    Masks : constant array (1 .. 7) of Packed_Byte := [
       (1 - LE) * 2#1000_0000# + LE * 2#0000_0001#,
       (1 - LE) * 2#1100_0000# + LE * 2#0000_0011#,
       (1 - LE) * 2#1110_0000# + LE * 2#0000_0111#,
       (1 - LE) * 2#1111_0000# + LE * 2#0000_1111#,
       (1 - LE) * 2#1111_1000# + LE * 2#0001_1111#,
       (1 - LE) * 2#1111_1100# + LE * 2#0011_1111#,
!      (1 - LE) * 2#1111_1110# + LE * 2#0111_1111#];
  
     -----------------------
     -- Local Subprograms --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-bitops.ads gcc-12.1.0/gcc/ada/libgnat/s-bitops.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-bitops.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-bitops.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,40 ****
  
  --  Operations on packed bit strings
  
- pragma Compiler_Unit_Warning;
- 
- with System;
- 
  package System.Bit_Ops is
  
     --  Note: in all the following routines, the System.Address parameters
--- 31,36 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-bituti.adb gcc-12.1.0/gcc/ada/libgnat/s-bituti.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-bituti.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-bituti.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --               Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --               Copyright (C) 2019-2022, 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- --
***************
*** 31,44 ****
  
  package body System.Bitfield_Utils is
  
-    --  ???
-    --
-    --  This code does not yet work for overlapping bit fields. We need to copy
-    --  backwards in some cases (i.e. from higher to lower bit addresses).
-    --  Alternatively, we could avoid calling this if Forwards_OK is False.
-    --
-    --  ???
- 
     package body G is
  
        Val_Bytes : constant Address := Address (Val'Size / Storage_Unit);
--- 31,36 ----
*************** package body System.Bitfield_Utils is
*** 77,83 ****
  
        function Get_Bitfield
          (Src : Val_2; Src_Offset : Bit_Offset; Size : Small_Size)
!          return Val;
        --  Returns the bit field in Src starting at Src_Offset, of the given
        --  Size. If Size < Small_Size'Last, then high order bits are zero.
  
--- 69,75 ----
  
        function Get_Bitfield
          (Src : Val_2; Src_Offset : Bit_Offset; Size : Small_Size)
!          return Val with Inline;
        --  Returns the bit field in Src starting at Src_Offset, of the given
        --  Size. If Size < Small_Size'Last, then high order bits are zero.
  
*************** package body System.Bitfield_Utils is
*** 86,92 ****
           Dest : Val_2;
           Dest_Offset : Bit_Offset;
           Size : Small_Size)
!         return Val_2;
        --  The bit field in Dest starting at Dest_Offset, of the given Size, is
        --  set to Src_Value. Src_Value must have high order bits (Size and
        --  above) zero. The result is returned as the function result.
--- 78,84 ----
           Dest : Val_2;
           Dest_Offset : Bit_Offset;
           Size : Small_Size)
!         return Val_2 with Inline;
        --  The bit field in Dest starting at Dest_Offset, of the given Size, is
        --  set to Src_Value. Src_Value must have high order bits (Size and
        --  above) zero. The result is returned as the function result.
*************** package body System.Bitfield_Utils is
*** 402,412 ****
--- 394,415 ----
           pragma Assert (Al_Src_Address mod Val'Alignment = 0);
           pragma Assert (Al_Dest_Address mod Val'Alignment = 0);
        begin
+          --  Optimized small case
+ 
           if Size in Small_Size then
              Copy_Small_Bitfield
                (Al_Src_Address, Al_Src_Offset,
                 Al_Dest_Address, Al_Dest_Offset,
                 Size);
+ 
+          --  Do nothing for zero size. This is necessary to avoid doing invalid
+          --  reads, which are detected by valgrind.
+ 
+          elsif Size = 0 then
+             null;
+ 
+          --  Large case
+ 
           else
              Copy_Large_Bitfield
                (Al_Src_Address, Al_Src_Offset,
*************** package body System.Bitfield_Utils is
*** 415,420 ****
--- 418,439 ----
           end if;
        end Copy_Bitfield;
  
+       function Fast_Copy_Bitfield
+         (Src         : Val_2;
+          Src_Offset  : Bit_Offset;
+          Dest        : Val_2;
+          Dest_Offset : Bit_Offset;
+          Size        : Small_Size)
+         return Val_2 is
+          Result : constant Val_2 := Set_Bitfield
+            (Get_Bitfield (Src, Src_Offset, Size), Dest, Dest_Offset, Size);
+       begin
+          --  No need to explicitly do nothing for zero size case, because Size
+          --  cannot be zero.
+ 
+          return Result;
+       end Fast_Copy_Bitfield;
+ 
     end G;
  
  end System.Bitfield_Utils;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-bituti.ads gcc-12.1.0/gcc/ada/libgnat/s-bituti.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-bituti.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-bituti.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --               Copyright (C) 2019-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --               Copyright (C) 2019-2022, 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- --
*************** package System.Bitfield_Utils is
*** 54,60 ****
     --  generic formal, or on a type derived from a generic formal, so they have
     --  to be passed in.
     --
!    --  Endian indicates whether we're on little-endian or big-endian machine.
  
     pragma Elaborate_Body;
  
--- 54,60 ----
     --  generic formal, or on a type derived from a generic formal, so they have
     --  to be passed in.
     --
!    --  Endian indicates whether we're on a little- or big-endian machine.
  
     pragma Elaborate_Body;
  
*************** package System.Bitfield_Utils is
*** 98,106 ****
        pragma Assert (Val_Array'Component_Size = Val'Size);
  
        subtype Bit_Size is Natural; -- Size in bits of a bit field
!       subtype Small_Size is Bit_Size range 0 .. Val'Size;
        --  Size of a small one
!       subtype Bit_Offset is Small_Size range 0 .. Val'Size - 1;
        --  Starting offset
        subtype Bit_Offset_In_Byte is Bit_Offset range 0 .. Storage_Unit - 1;
  
--- 98,106 ----
        pragma Assert (Val_Array'Component_Size = Val'Size);
  
        subtype Bit_Size is Natural; -- Size in bits of a bit field
!       subtype Small_Size is Bit_Size range 1 .. Val'Size;
        --  Size of a small one
!       subtype Bit_Offset is Small_Size'Base range 0 .. Val'Size - 1;
        --  Starting offset
        subtype Bit_Offset_In_Byte is Bit_Offset range 0 .. Storage_Unit - 1;
  
*************** package System.Bitfield_Utils is
*** 127,132 ****
--- 127,146 ----
        --        D (D_First)'Address, D (D_First)'Bit,
        --        Size);
  
+       function Fast_Copy_Bitfield
+         (Src         : Val_2;
+          Src_Offset  : Bit_Offset;
+          Dest        : Val_2;
+          Dest_Offset : Bit_Offset;
+          Size        : Small_Size)
+         return Val_2 with Inline;
+       --  Faster version of Copy_Bitfield, with a different calling convention.
+       --  In particular, we pass by copy rather than passing Addresses. The bit
+       --  field must fit in Val_Bits. Src and Dest must be properly aligned.
+       --  The result is supposed to be assigned back into Dest, as in:
+       --
+       --     Dest := Fast_Copy_Bitfield (Src, ..., Dest, ..., ...);
+ 
     end G;
  
  end System.Bitfield_Utils;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-boarop.ads gcc-12.1.0/gcc/ada/libgnat/s-boarop.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-boarop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-boarop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-boustr.adb gcc-12.1.0/gcc/ada/libgnat/s-boustr.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-boustr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-boustr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2016-2020, AdaCore                   --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2016-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-boustr.ads gcc-12.1.0/gcc/ada/libgnat/s-boustr.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-boustr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-boustr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2016-2020, AdaCore                   --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                       Copyright (C) 2016-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-bytswa.ads gcc-12.1.0/gcc/ada/libgnat/s-bytswa.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-bytswa.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-bytswa.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2006-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2006-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-carsi8.adb gcc-12.1.0/gcc/ada/libgnat/s-carsi8.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-carsi8.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-carsi8.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-carsi8.ads gcc-12.1.0/gcc/ada/libgnat/s-carsi8.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-carsi8.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-carsi8.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-carun8.adb gcc-12.1.0/gcc/ada/libgnat/s-carun8.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-carun8.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-carun8.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with System.Address_Operations; use System.Address_Operations;
  
  with Ada.Unchecked_Conversion;
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-carun8.ads gcc-12.1.0/gcc/ada/libgnat/s-carun8.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-carun8.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-carun8.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
***************
*** 32,39 ****
  --  This package contains functions for runtime comparisons on arrays whose
  --  elements are 8-bit discrete type values to be treated as unsigned.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Compare_Array_Unsigned_8 is
  
     --  Note: although the functions in this package are in a sense Pure, the
--- 32,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-casi128.adb gcc-12.1.0/gcc/ada/libgnat/s-casi128.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-casi128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-casi128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-casi128.ads gcc-12.1.0/gcc/ada/libgnat/s-casi128.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-casi128.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-casi128.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-casi16.adb gcc-12.1.0/gcc/ada/libgnat/s-casi16.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-casi16.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-casi16.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-casi16.ads gcc-12.1.0/gcc/ada/libgnat/s-casi16.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-casi16.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-casi16.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-casi32.adb gcc-12.1.0/gcc/ada/libgnat/s-casi32.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-casi32.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-casi32.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-casi32.ads gcc-12.1.0/gcc/ada/libgnat/s-casi32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-casi32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-casi32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-casi64.adb gcc-12.1.0/gcc/ada/libgnat/s-casi64.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-casi64.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-casi64.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-casi64.ads gcc-12.1.0/gcc/ada/libgnat/s-casi64.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-casi64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-casi64.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-casuti.adb gcc-12.1.0/gcc/ada/libgnat/s-casuti.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-casuti.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-casuti.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 29,38 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! pragma Compiler_Unit_Warning;
  
! package body System.Case_Util is
  
     --------------
     -- To_Lower --
     --------------
--- 29,45 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Ghost code, loop invariants and assertions in this unit are meant for
! --  analysis only, not for run-time checking, as it would be too costly
! --  otherwise. This is enforced by setting the assertion policy to Ignore.
  
! pragma Assertion_Policy (Ghost          => Ignore,
!                          Loop_Invariant => Ignore,
!                          Assert         => Ignore);
  
+ package body System.Case_Util
+   with SPARK_Mode
+ is
     --------------
     -- To_Lower --
     --------------
*************** package body System.Case_Util is
*** 55,60 ****
--- 62,70 ----
     begin
        for J in A'Range loop
           A (J) := To_Lower (A (J));
+ 
+          pragma Loop_Invariant
+            (for all K in A'First .. J => A (K) = To_Lower (A'Loop_Entry (K)));
        end loop;
     end To_Lower;
  
*************** package body System.Case_Util is
*** 80,85 ****
--- 90,104 ----
              A (J) := To_Lower (A (J));
           end if;
  
+          pragma Loop_Invariant
+            (for all K in A'First .. J =>
+               (if K = A'First
+                  or else A'Loop_Entry (K - 1) = '_'
+                then
+                  A (K) = To_Upper (A'Loop_Entry (K))
+                else
+                  A (K) = To_Lower (A'Loop_Entry (K))));
+ 
           Ucase := A (J) = '_';
        end loop;
     end To_Mixed;
*************** package body System.Case_Util is
*** 113,118 ****
--- 132,140 ----
     begin
        for J in A'Range loop
           A (J) := To_Upper (A (J));
+ 
+          pragma Loop_Invariant
+            (for all K in A'First .. J => A (K) = To_Upper (A'Loop_Entry (K)));
        end loop;
     end To_Upper;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-casuti.ads gcc-12.1.0/gcc/ada/libgnat/s-casuti.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-casuti.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-casuti.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
***************
*** 34,67 ****
  --  This package provides simple casing functions that do not require the
  --  overhead of the full casing tables found in Ada.Characters.Handling.
  
! --  Note that all the routines in this package are available to the user
! --  via GNAT.Case_Util, which imports all the entities from this package.
! 
! pragma Compiler_Unit_Warning;
  
! package System.Case_Util is
!    pragma Pure;
  
     --  Note: all the following functions handle the full Latin-1 set
  
!    function To_Upper (A : Character) return Character;
     --  Converts A to upper case if it is a lower case letter, otherwise
     --  returns the input argument unchanged.
  
!    procedure To_Upper (A : in out String);
!    function To_Upper (A : String) return String;
     --  Folds all characters of string A to upper case
  
!    function To_Lower (A : Character) return Character;
     --  Converts A to lower case if it is an upper case letter, otherwise
     --  returns the input argument unchanged.
  
!    procedure To_Lower (A : in out String);
!    function To_Lower (A : String) return String;
     --  Folds all characters of string A to lower case
  
!    procedure To_Mixed (A : in out String);
!    function To_Mixed (A : String) return String;
     --  Converts A to mixed case (i.e. lower case, except for initial
     --  character and any character after an underscore, which are
     --  converted to upper case.
--- 34,131 ----
  --  This package provides simple casing functions that do not require the
  --  overhead of the full casing tables found in Ada.Characters.Handling.
  
! --  Preconditions in this unit are meant for analysis only, not for run-time
! --  checking, so that the expected exceptions are raised. This is enforced by
! --  setting the corresponding assertion policy to Ignore. Postconditions and
! --  contract cases should not be executed at runtime as well, in order not to
! --  slow down the execution of these functions.
  
! pragma Assertion_Policy (Pre            => Ignore,
!                          Post           => Ignore,
!                          Contract_Cases => Ignore,
!                          Ghost          => Ignore);
  
+ package System.Case_Util
+   with Pure, SPARK_Mode
+ is
     --  Note: all the following functions handle the full Latin-1 set
  
!    function To_Upper (A : Character) return Character
!    with
!      Post => (declare
!                 A_Val : constant Natural := Character'Pos (A);
!               begin
!                 (if A in 'a' .. 'z'
!                    or else A_Val in 16#E0# .. 16#F6#
!                    or else A_Val in 16#F8# .. 16#FE#
!                  then
!                    To_Upper'Result = Character'Val (A_Val - 16#20#)
!                  else
!                    To_Upper'Result = A));
     --  Converts A to upper case if it is a lower case letter, otherwise
     --  returns the input argument unchanged.
  
!    procedure To_Upper (A : in out String)
!    with
!      Post => (for all J in A'Range => A (J) = To_Upper (A'Old (J)));
! 
!    function To_Upper (A : String) return String
!    with
!      Post => To_Upper'Result'First = A'First
!        and then To_Upper'Result'Last = A'Last
!        and then (for all J in A'Range =>
!                    To_Upper'Result (J) = To_Upper (A (J)));
     --  Folds all characters of string A to upper case
  
!    function To_Lower (A : Character) return Character
!    with
!      Post => (declare
!                 A_Val : constant Natural := Character'Pos (A);
!               begin
!                 (if A in 'A' .. 'Z'
!                    or else A_Val in 16#C0# .. 16#D6#
!                    or else A_Val in 16#D8# .. 16#DE#
!                  then
!                    To_Lower'Result = Character'Val (A_Val + 16#20#)
!                  else
!                    To_Lower'Result = A));
     --  Converts A to lower case if it is an upper case letter, otherwise
     --  returns the input argument unchanged.
  
!    procedure To_Lower (A : in out String)
!    with
!      Post => (for all J in A'Range => A (J) = To_Lower (A'Old (J)));
! 
!    function To_Lower (A : String) return String
!    with
!      Post => To_Lower'Result'First = A'First
!        and then To_Lower'Result'Last = A'Last
!        and then (for all J in A'Range =>
!                    To_Lower'Result (J) = To_Lower (A (J)));
     --  Folds all characters of string A to lower case
  
!    procedure To_Mixed (A : in out String)
!    with
!      Post =>
!        (for all J in A'Range =>
!           (if J = A'First
!              or else A'Old (J - 1) = '_'
!            then
!              A (J) = To_Upper (A'Old (J))
!            else
!              A (J) = To_Lower (A'Old (J))));
! 
!    function To_Mixed (A : String) return String
!    with
!      Post => To_Mixed'Result'First = A'First
!        and then To_Mixed'Result'Last = A'Last
!        and then (for all J in A'Range =>
!                    (if J = A'First
!                       or else A (J - 1) = '_'
!                     then
!                       To_Mixed'Result (J) = To_Upper (A (J))
!                     else
!                       To_Mixed'Result (J) = To_Lower (A (J))));
     --  Converts A to mixed case (i.e. lower case, except for initial
     --  character and any character after an underscore, which are
     --  converted to upper case.
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-caun128.adb gcc-12.1.0/gcc/ada/libgnat/s-caun128.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-caun128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-caun128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-caun128.ads gcc-12.1.0/gcc/ada/libgnat/s-caun128.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-caun128.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-caun128.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-caun16.adb gcc-12.1.0/gcc/ada/libgnat/s-caun16.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-caun16.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-caun16.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-caun16.ads gcc-12.1.0/gcc/ada/libgnat/s-caun16.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-caun16.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-caun16.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-caun32.adb gcc-12.1.0/gcc/ada/libgnat/s-caun32.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-caun32.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-caun32.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-caun32.ads gcc-12.1.0/gcc/ada/libgnat/s-caun32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-caun32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-caun32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-caun64.adb gcc-12.1.0/gcc/ada/libgnat/s-caun64.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-caun64.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-caun64.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-caun64.ads gcc-12.1.0/gcc/ada/libgnat/s-caun64.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-caun64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-caun64.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-chepoo.ads gcc-12.1.0/gcc/ada/libgnat/s-chepoo.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-chepoo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-chepoo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-commun.adb gcc-12.1.0/gcc/ada/libgnat/s-commun.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-commun.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-commun.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-commun.ads gcc-12.1.0/gcc/ada/libgnat/s-commun.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-commun.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-commun.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2001-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca2.adb gcc-12.1.0/gcc/ada/libgnat/s-conca2.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-conca2.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca2.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package body System.Concat_2 is
  
     pragma Suppress (All_Checks);
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca2.ads gcc-12.1.0/gcc/ada/libgnat/s-conca2.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-conca2.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca2.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 32,39 ****
  --  This package contains a procedure for runtime concatenation of two string
  --  operands. It is used when we want to save space in the generated code.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Concat_2 is
  
     procedure Str_Concat_2 (R : out String; S1, S2 : String);
--- 32,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca3.adb gcc-12.1.0/gcc/ada/libgnat/s-conca3.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-conca3.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca3.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with System.Concat_2;
  
  package body System.Concat_3 is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca3.ads gcc-12.1.0/gcc/ada/libgnat/s-conca3.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-conca3.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca3.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 32,39 ****
  --  This package contains a procedure for runtime concatenation of three string
  --  operands. It is used when we want to save space in the generated code.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Concat_3 is
  
     procedure Str_Concat_3 (R : out String; S1, S2, S3 : String);
--- 32,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca4.adb gcc-12.1.0/gcc/ada/libgnat/s-conca4.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-conca4.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca4.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with System.Concat_3;
  
  package body System.Concat_4 is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca4.ads gcc-12.1.0/gcc/ada/libgnat/s-conca4.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-conca4.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca4.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 32,39 ****
  --  This package contains a procedure for runtime concatenation of four string
  --  operands. It is used when we want to save space in the generated code.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Concat_4 is
  
     procedure Str_Concat_4 (R : out String; S1, S2, S3, S4 : String);
--- 32,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca5.adb gcc-12.1.0/gcc/ada/libgnat/s-conca5.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-conca5.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca5.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with System.Concat_4;
  
  package body System.Concat_5 is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca5.ads gcc-12.1.0/gcc/ada/libgnat/s-conca5.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-conca5.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca5.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 32,39 ****
  --  This package contains a procedure for runtime concatenation of five string
  --  operands. It is used when we want to save space in the generated code.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Concat_5 is
  
     procedure Str_Concat_5 (R : out String; S1, S2, S3, S4, S5 : String);
--- 32,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca6.adb gcc-12.1.0/gcc/ada/libgnat/s-conca6.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-conca6.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca6.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with System.Concat_5;
  
  package body System.Concat_6 is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca6.ads gcc-12.1.0/gcc/ada/libgnat/s-conca6.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-conca6.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca6.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 32,39 ****
  --  This package contains a procedure for runtime concatenation of six string
  --  operands. It is used when we want to save space in the generated code.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Concat_6 is
  
     procedure Str_Concat_6 (R : out String; S1, S2, S3, S4, S5, S6 : String);
--- 32,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca7.adb gcc-12.1.0/gcc/ada/libgnat/s-conca7.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-conca7.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca7.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with System.Concat_6;
  
  package body System.Concat_7 is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca7.ads gcc-12.1.0/gcc/ada/libgnat/s-conca7.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-conca7.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca7.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 32,39 ****
  --  This package contains a procedure for runtime concatenation of seven string
  --  operands. It is used when we want to save space in the generated code.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Concat_7 is
  
     procedure Str_Concat_7
--- 32,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca8.adb gcc-12.1.0/gcc/ada/libgnat/s-conca8.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-conca8.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca8.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with System.Concat_7;
  
  package body System.Concat_8 is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca8.ads gcc-12.1.0/gcc/ada/libgnat/s-conca8.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-conca8.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca8.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 32,39 ****
  --  This package contains a procedure for runtime concatenation of eight string
  --  operands. It is used when we want to save space in the generated code.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Concat_8 is
  
     procedure Str_Concat_8
--- 32,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca9.adb gcc-12.1.0/gcc/ada/libgnat/s-conca9.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-conca9.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca9.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with System.Concat_8;
  
  package body System.Concat_9 is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-conca9.ads gcc-12.1.0/gcc/ada/libgnat/s-conca9.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-conca9.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-conca9.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 32,39 ****
  --  This package contains a procedure for runtime concatenation of eight string
  --  operands. It is used when we want to save space in the generated code.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Concat_9 is
  
     procedure Str_Concat_9
--- 32,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-crc32.adb gcc-12.1.0/gcc/ada/libgnat/s-crc32.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-crc32.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-crc32.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package body System.CRC32 is
  
     Init   : constant CRC32 := 16#FFFF_FFFF#;  -- Initial value
--- 29,34 ----
*************** package body System.CRC32 is
*** 41,47 ****
     --  than processing the byte bit by bit.
  
     Table : constant array (CRC32 range 0 .. 255) of CRC32 :=
!      (16#0000_0000#, 16#7707_3096#, 16#EE0E_612C#, 16#9909_51BA#,
        16#076D_C419#, 16#706A_F48F#, 16#E963_A535#, 16#9E64_95A3#,
        16#0EDB_8832#, 16#79DC_B8A4#, 16#E0D5_E91E#, 16#97D2_D988#,
        16#09B6_4C2B#, 16#7EB1_7CBD#, 16#E7B8_2D07#, 16#90BF_1D91#,
--- 39,45 ----
     --  than processing the byte bit by bit.
  
     Table : constant array (CRC32 range 0 .. 255) of CRC32 :=
!      [16#0000_0000#, 16#7707_3096#, 16#EE0E_612C#, 16#9909_51BA#,
        16#076D_C419#, 16#706A_F48F#, 16#E963_A535#, 16#9E64_95A3#,
        16#0EDB_8832#, 16#79DC_B8A4#, 16#E0D5_E91E#, 16#97D2_D988#,
        16#09B6_4C2B#, 16#7EB1_7CBD#, 16#E7B8_2D07#, 16#90BF_1D91#,
*************** package body System.CRC32 is
*** 104,110 ****
        16#BDBD_F21C#, 16#CABA_C28A#, 16#53B3_9330#, 16#24B4_A3A6#,
        16#BAD0_3605#, 16#CDD7_0693#, 16#54DE_5729#, 16#23D9_67BF#,
        16#B366_7A2E#, 16#C461_4AB8#, 16#5D68_1B02#, 16#2A6F_2B94#,
!       16#B40B_BE37#, 16#C30C_8EA1#, 16#5A05_DF1B#, 16#2D02_EF8D#);
  
     ---------------
     -- Get_Value --
--- 102,108 ----
        16#BDBD_F21C#, 16#CABA_C28A#, 16#53B3_9330#, 16#24B4_A3A6#,
        16#BAD0_3605#, 16#CDD7_0693#, 16#54DE_5729#, 16#23D9_67BF#,
        16#B366_7A2E#, 16#C461_4AB8#, 16#5D68_1B02#, 16#2A6F_2B94#,
!       16#B40B_BE37#, 16#C30C_8EA1#, 16#5A05_DF1B#, 16#2D02_EF8D#];
  
     ---------------
     -- Get_Value --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-crc32.ads gcc-12.1.0/gcc/ada/libgnat/s-crc32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-crc32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-crc32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
***************
*** 54,61 ****
  --  "Computation of Cyclic Redundancy Checks via Table Look-Up", Communications
  --  of the ACM, Vol. 31 No. 8, pp.1008-1013 Aug. 1988. Sarwate, D.V.
  
- pragma Compiler_Unit_Warning;
- 
  with Interfaces;
  
  package System.CRC32 is
--- 54,59 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-crtl.ads gcc-12.1.0/gcc/ada/libgnat/s-crtl.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-crtl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-crtl.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
***************
*** 31,38 ****
  
  --  This package provides the low level interface to the C runtime library
  
- pragma Compiler_Unit_Warning;
- 
  with System.Parameters;
  
  package System.CRTL is
--- 31,36 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dfmkio.ads gcc-12.1.0/gcc/ada/libgnat/s-dfmkio.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dfmkio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dfmkio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2018-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2018-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dfmopr.ads gcc-12.1.0/gcc/ada/libgnat/s-dfmopr.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dfmopr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dfmopr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --              Copyright (C) 2018-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --              Copyright (C) 2018-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dgmgop.ads gcc-12.1.0/gcc/ada/libgnat/s-dgmgop.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dgmgop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dgmgop.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 2011-2020, 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- --
--- 7,13 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-diflio.adb gcc-12.1.0/gcc/ada/libgnat/s-diflio.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-diflio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-diflio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-diflio.ads gcc-12.1.0/gcc/ada/libgnat/s-diflio.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-diflio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-diflio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-diflmk.ads gcc-12.1.0/gcc/ada/libgnat/s-diflmk.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-diflmk.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-diflmk.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2018-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2018-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-digemk.ads gcc-12.1.0/gcc/ada/libgnat/s-digemk.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-digemk.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-digemk.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-diinio.adb gcc-12.1.0/gcc/ada/libgnat/s-diinio.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-diinio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-diinio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-diinio.ads gcc-12.1.0/gcc/ada/libgnat/s-diinio.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-diinio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-diinio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dilomk.ads gcc-12.1.0/gcc/ada/libgnat/s-dilomk.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dilomk.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dilomk.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2018-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2018-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dim.ads gcc-12.1.0/gcc/ada/libgnat/s-dim.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dim.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dim.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2012-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2012-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dimkio.ads gcc-12.1.0/gcc/ada/libgnat/s-dimkio.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dimkio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dimkio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dimmks.ads gcc-12.1.0/gcc/ada/libgnat/s-dimmks.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dimmks.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dimmks.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-direio.adb gcc-12.1.0/gcc/ada/libgnat/s-direio.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-direio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-direio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 32,38 ****
  with Ada.IO_Exceptions;          use Ada.IO_Exceptions;
  with Ada.Unchecked_Deallocation;
  with Interfaces.C_Streams;       use Interfaces.C_Streams;
- with System;                     use System;
  with System.CRTL;
  with System.File_IO;
  with System.Soft_Links;
--- 32,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-direio.ads gcc-12.1.0/gcc/ada/libgnat/s-direio.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-direio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-direio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dlmkio.ads gcc-12.1.0/gcc/ada/libgnat/s-dlmkio.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dlmkio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dlmkio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2018-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --             Copyright (C) 2018-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dlmopr.ads gcc-12.1.0/gcc/ada/libgnat/s-dlmopr.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dlmopr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dlmopr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --              Copyright (C) 2018-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --              Copyright (C) 2018-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dmotpr.ads gcc-12.1.0/gcc/ada/libgnat/s-dmotpr.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dmotpr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dmotpr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dorepr.adb gcc-12.1.0/gcc/ada/libgnat/s-dorepr.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-dorepr.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-dorepr.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,172 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --            S Y S T E M . D O U B L E _ R E A L . P R O D U C T           --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the default version of the separate package body
+ 
+ with Interfaces; use Interfaces;
+ 
+ separate (System.Double_Real)
+ 
+ package body Product is
+ 
+    procedure Split (N : Num; Hi : out Num; Lo : out Num);
+    --  Compute high part and low part of N
+ 
+    -----------
+    -- Split --
+    -----------
+ 
+    --  We use a bit manipulation algorithm instead of Veltkamp's splitting
+    --  because it is faster and has the property that the magnitude of the
+    --  high part is never larger than that of the input number, which will
+    --  avoid spurious overflows in the Two_Prod algorithm.
+ 
+    --  See the recent paper by Claude-Pierre Jeannerod, Jean-Michel Muller
+    --  and Paul Zimmermann: On various ways to split a floating-point number
+    --  ARITH 2018 - 25th IEEE Symposium on Computer Arithmetic, Jun 2018,
+    --  Amherst (MA), United States, pages 53-60.
+ 
+    procedure Split (N : Num; Hi : out Num; Lo : out Num) is
+       X : Num;
+ 
+    begin
+       --  Spill the input into the appropriate (maybe larger) bit container,
+       --  mask out the low bits and reload the modified value.
+ 
+       case Num'Machine_Mantissa is
+          when 24 =>
+             declare
+                Rep32 : aliased Interfaces.Unsigned_32;
+                Temp  : Num := N with Address => Rep32'Address;
+                pragma Annotate (CodePeer, Modified, Rep32);
+ 
+             begin
+                --  Mask out the low 12 bits
+ 
+                Rep32 := Rep32 and 16#FFFFF000#;
+ 
+                X := Temp;
+             end;
+ 
+          when 53 =>
+             declare
+                Rep64 : aliased Interfaces.Unsigned_64;
+                Temp  : Num := N with Address => Rep64'Address;
+                pragma Annotate (CodePeer, Modified, Rep64);
+ 
+             begin
+                --  Mask out the low 27 bits
+ 
+                Rep64 := Rep64 and 16#FFFFFFFFF8000000#;
+ 
+                X := Temp;
+             end;
+ 
+          when 64 =>
+             declare
+                Rep80 : aliased array (1 .. 2) of Interfaces.Unsigned_64;
+                Temp  : Num := N with Address => Rep80'Address;
+                pragma Annotate (CodePeer, Modified, Rep80);
+ 
+             begin
+                --  Mask out the low 32 bits
+ 
+                if System.Default_Bit_Order = High_Order_First then
+                   Rep80 (1) := Rep80 (1) and 16#FFFFFFFFFFFF0000#;
+                   Rep80 (2) := Rep80 (2) and 16#0000FFFFFFFFFFFF#;
+                else
+                   Rep80 (1) := Rep80 (1) and 16#FFFFFFFF00000000#;
+                end if;
+ 
+                X := Temp;
+             end;
+ 
+          when others =>
+             raise Program_Error;
+       end case;
+ 
+       --  Deal with denormalized numbers
+ 
+       if X = 0.0 then
+          Hi := N;
+          Lo := 0.0;
+       else
+          Hi := X;
+          Lo := N - X;
+       end if;
+    end Split;
+ 
+    --------------
+    -- Two_Prod --
+    --------------
+ 
+    function Two_Prod (A, B : Num) return Double_T is
+       P : constant Num := A * B;
+ 
+       Ahi, Alo, Bhi, Blo, E : Num;
+ 
+    begin
+       if Is_Infinity (P) or else Is_Zero (P) then
+          return (P, 0.0);
+ 
+       else
+          Split (A, Ahi, Alo);
+          Split (B, Bhi, Blo);
+ 
+          E := ((Ahi * Bhi - P) + Ahi * Blo + Alo * Bhi) + Alo * Blo;
+ 
+          return (P, E);
+       end if;
+    end Two_Prod;
+ 
+    -------------
+    -- Two_Sqr --
+    -------------
+ 
+    function Two_Sqr (A : Num) return Double_T is
+       Q : constant Num := A * A;
+ 
+       Hi, Lo, E : Num;
+ 
+    begin
+       if Is_Infinity (Q) or else Is_Zero (Q) then
+          return (Q, 0.0);
+ 
+       else
+          Split (A, Hi, Lo);
+ 
+          E := ((Hi * Hi - Q) + 2.0 * Hi * Lo) + Lo * Lo;
+ 
+          return (Q, E);
+       end if;
+    end Two_Sqr;
+ 
+ end Product;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dorepr__fma.adb gcc-12.1.0/gcc/ada/libgnat/s-dorepr__fma.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-dorepr__fma.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-dorepr__fma.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,97 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --            S Y S T E M . D O U B L E _ R E A L . P R O D U C T           --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the version of the separate package body for targets with an FMA
+ 
+ separate (System.Double_Real)
+ 
+ package body Product is
+ 
+    function Fused_Multiply_Add (A, B, C : Num) return Num;
+    --  Return the result of A * B + C without intermediate rounding
+ 
+    ------------------------
+    -- Fused_Multiply_Add --
+    ------------------------
+ 
+    function Fused_Multiply_Add (A, B, C : Num) return Num is
+    begin
+       case Num'Size is
+          when 32 =>
+             declare
+                function Do_FMA (A, B, C : Num) return Num;
+                pragma Import (Intrinsic, Do_FMA, "__builtin_fmaf");
+ 
+             begin
+                return Do_FMA (A, B, C);
+             end;
+ 
+          when 64 =>
+             declare
+                function Do_FMA (A, B, C : Num) return Num;
+                pragma Import (Intrinsic, Do_FMA, "__builtin_fma");
+ 
+             begin
+                return Do_FMA (A, B, C);
+             end;
+ 
+          when others =>
+             raise Program_Error;
+       end case;
+    end Fused_Multiply_Add;
+ 
+    --------------
+    -- Two_Prod --
+    --------------
+ 
+    function Two_Prod (A, B : Num) return Double_T is
+       P : constant Num := A * B;
+ 
+       E : Num;
+ 
+    begin
+       if Is_Infinity (P) or else Is_Zero (P) then
+          return (P, 0.0);
+ 
+       else
+          E := Fused_Multiply_Add (A, B, -P);
+ 
+          return (P, E);
+       end if;
+    end Two_Prod;
+ 
+    -------------
+    -- Two_Sqr --
+    -------------
+ 
+    function Two_Sqr (A : Num) return Double_T is (Two_Prod (A, A));
+ 
+ end Product;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dourea.adb gcc-12.1.0/gcc/ada/libgnat/s-dourea.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-dourea.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-dourea.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,258 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . D O U B L E _ R E A L                   --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ package body System.Double_Real is
+ 
+    function Is_NaN (N : Num) return Boolean is (N /= N);
+    --  Return True if N is a NaN
+ 
+    function Is_Infinity (N : Num) return Boolean is (Is_NaN (N - N));
+    --  Return True if N is an infinity. Used to avoid propagating meaningless
+    --  errors when the result of a product is an infinity.
+ 
+    function Is_Zero (N : Num) return Boolean is (N = -N);
+    --  Return True if N is a Zero. Used to preserve the sign when the result of
+    --  a product is a zero.
+ 
+    package Product is
+       function Two_Prod (A, B : Num) return Double_T;
+       function Two_Sqr (A : Num) return Double_T;
+    end Product;
+    --  The low-level implementation of multiplicative operations
+ 
+    package body Product is separate;
+    --  This is a separate body because the implementation depends on whether a
+    --  Fused Multiply-Add instruction is available on the target.
+ 
+    -------------------
+    -- Quick_Two_Sum --
+    -------------------
+ 
+    function Quick_Two_Sum (A, B : Num) return Double_T is
+       S : constant Num := A + B;
+       V : constant Num := S - A;
+       E : constant Num := B - V;
+ 
+    begin
+       return (S, E);
+    end Quick_Two_Sum;
+ 
+    -------------
+    -- Two_Sum --
+    -------------
+ 
+    function Two_Sum (A, B : Num) return Double_T is
+       S : constant Num := A + B;
+       V : constant Num := S - A;
+       E : constant Num := (A - (S - V)) + (B - V);
+ 
+    begin
+       return (S, E);
+    end Two_Sum;
+ 
+    --------------
+    -- Two_Diff --
+    --------------
+ 
+    function Two_Diff (A, B : Num) return Double_T is
+       S : constant Num := A - B;
+       V : constant Num := S - A;
+       E : constant Num := (A - (S - V)) - (B + V);
+ 
+    begin
+       return (S, E);
+    end Two_Diff;
+ 
+    --------------
+    -- Two_Prod --
+    --------------
+ 
+    function Two_Prod (A, B : Num) return Double_T renames Product.Two_Prod;
+ 
+    -------------
+    -- Two_Sqr --
+    -------------
+ 
+    function Two_Sqr (A : Num) return Double_T renames Product.Two_Sqr;
+ 
+    ---------
+    -- "+" --
+    ---------
+ 
+    function "+" (A : Double_T; B : Num) return Double_T is
+       S : constant Double_T := Two_Sum (A.Hi, B);
+ 
+    begin
+       return Quick_Two_Sum (S.Hi, S.Lo + A.Lo);
+    end "+";
+ 
+    function "+" (A, B : Double_T) return Double_T is
+       S1 : constant Double_T := Two_Sum (A.Hi, B.Hi);
+       S2 : constant Double_T := Two_Sum (A.Lo, B.Lo);
+       S3 : constant Double_T := Quick_Two_Sum (S1.Hi, S1.Lo + S2.Hi);
+ 
+    begin
+       return Quick_Two_Sum (S3.Hi, S3.Lo + S2.Lo);
+    end "+";
+ 
+    ---------
+    -- "-" --
+    ---------
+ 
+    function "-" (A : Double_T; B : Num) return Double_T is
+       D : constant Double_T := Two_Diff (A.Hi, B);
+ 
+    begin
+       return Quick_Two_Sum (D.Hi, D.Lo + A.Lo);
+    end "-";
+ 
+    function "-" (A, B : Double_T) return Double_T is
+       D1 : constant Double_T := Two_Diff (A.Hi, B.Hi);
+       D2 : constant Double_T := Two_Diff (A.Lo, B.Lo);
+       D3 : constant Double_T := Quick_Two_Sum (D1.Hi, D1.Lo + D2.Hi);
+ 
+    begin
+       return Quick_Two_Sum (D3.Hi, D3.Lo + D2.Lo);
+    end "-";
+ 
+    ---------
+    -- "*" --
+    ---------
+ 
+    function "*" (A : Double_T; B : Num) return Double_T is
+       P : constant Double_T := Two_Prod (A.Hi, B);
+ 
+    begin
+       if Is_Infinity (P.Hi) or else Is_Zero (P.Hi) then
+          return (P.Hi, 0.0);
+       else
+          return Quick_Two_Sum (P.Hi, P.Lo + A.Lo * B);
+       end if;
+    end "*";
+ 
+    function "*" (A, B : Double_T) return Double_T is
+       P : constant Double_T := Two_Prod (A.Hi, B.Hi);
+ 
+    begin
+       if Is_Infinity (P.Hi) or else Is_Zero (P.Hi) then
+          return (P.Hi, 0.0);
+       else
+          return Quick_Two_Sum (P.Hi, P.Lo + A.Hi * B.Lo + A.Lo * B.Hi);
+       end if;
+    end "*";
+ 
+    ---------
+    -- "/" --
+    ---------
+ 
+    function "/" (A : Double_T; B : Num) return Double_T is
+       Q1, Q2 : Num;
+       P, R   : Double_T;
+ 
+    begin
+       Q1 := A.Hi / B;
+ 
+       --  Compute R = A - B * Q1
+ 
+       P := Two_Prod (B, Q1);
+       R := Two_Diff (A.Hi, P.Hi);
+       R.Lo := (R.Lo + A.Lo) - P.Lo;
+ 
+       Q2 := (R.Hi + R.Lo) / B;
+ 
+       return Quick_Two_Sum (Q1, Q2);
+    end "/";
+ 
+    function "/" (A, B : Double_T) return Double_T is
+       Q1, Q2, Q3 : Num;
+       R, S       : Double_T;
+ 
+    begin
+       Q1 := A.Hi / B.Hi;
+       R := A - B * Q1;
+ 
+       Q2 := R.Hi / B.Hi;
+       R := R - B * Q2;
+ 
+       Q3 := R.Hi / B.Hi;
+ 
+       S := Quick_Two_Sum (Q1, Q2);
+       return Quick_Two_Sum (S.Hi, S.Lo + Q3);
+    end "/";
+ 
+    ---------
+    -- Sqr --
+    ---------
+ 
+    function Sqr (A : Double_T) return Double_T is
+       Q : constant Double_T := Two_Sqr (A.Hi);
+ 
+    begin
+       if Is_Infinity (Q.Hi) or else Is_Zero (Q.Hi) then
+          return (Q.Hi, 0.0);
+       else
+          return Quick_Two_Sum (Q.Hi, Q.Lo + 2.0 * A.Hi * A.Lo + A.Lo * A.Lo);
+       end if;
+    end Sqr;
+ 
+    -------------------
+    -- From_Unsigned --
+    -------------------
+ 
+    function From_Unsigned (U : Uns) return Double_T is
+    begin
+       return To_Double (Num (U));
+    end From_Unsigned;
+ 
+    -----------------
+    -- To_Unsigned --
+    -----------------
+ 
+    function To_Unsigned (D : Double_T) return Uns is
+       Hi : constant Num := Num'Truncation (D.Hi);
+ 
+    begin
+       --  If the high part is already an integer, add Floor of the low part,
+       --  which means subtract Ceiling of its opposite if it is negative.
+ 
+       if Hi = D.Hi then
+          if D.Lo < 0.0 then
+             return Uns (Hi) - Uns (Num'Ceiling (-D.Lo));
+          else
+             return Uns (Hi) + Uns (Num'Floor (D.Lo));
+          end if;
+ 
+       else
+          return Uns (Hi);
+       end if;
+    end To_Unsigned;
+ 
+ end System.Double_Real;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dourea.ads gcc-12.1.0/gcc/ada/libgnat/s-dourea.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dourea.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-dourea.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,123 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . D O U B L E _ R E A L                   --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains routines for supporting floating-point computations
+ --  in double precision, i.e. using a second number to estimate the error due
+ --  to rounding and more generally performing computations with twice as many
+ --  bits of mantissa. It is based on the Double-Double library available at
+ --  https://www.davidhbailey.com/dhbsoftware written by David H.Bailey et al.
+ 
+ generic
+ 
+    type Num is digits <>;
+ 
+ package System.Double_Real is
+    pragma Pure;
+ 
+    type Double_T is record
+      Hi, Lo : Num;
+    end record;
+ 
+    function To_Double (N : Num) return Double_T is ((Hi => N, Lo => 0.0));
+    --  Convert a single to a double real
+ 
+    function To_Single (D : Double_T) return Num is (D.Hi);
+    --  Convert a double to a single real
+ 
+    function Quick_Two_Sum (A, B : Num) return Double_T
+      with Pre => A = 0.0 or else abs (A) >= abs (B);
+    --  Compute A + B and its rounding error exactly, but assume |A| >= |B|
+ 
+    function Two_Sum (A, B : Num) return Double_T;
+    --  Compute A + B and its rounding error exactly
+ 
+    function Two_Diff (A, B : Num) return Double_T;
+    --  Compute A - B and its rounding error exactly
+ 
+    function Two_Prod (A, B : Num) return Double_T;
+    --  Compute A * B and its rounding error exactly
+ 
+    function Two_Sqr (A : Num) return Double_T;
+    --  Compute A * A and its rounding error exactly
+ 
+    function "+" (A : Double_T; B : Num) return Double_T;
+    function "-" (A : Double_T; B : Num) return Double_T;
+    function "*" (A : Double_T; B : Num) return Double_T;
+    function "/" (A : Double_T; B : Num) return Double_T
+      with Pre => B /= 0.0;
+    --  Mixed precision arithmetic operations
+ 
+    function "+" (A, B : Double_T) return Double_T;
+    function "-" (A, B : Double_T) return Double_T;
+    function "*" (A, B : Double_T) return Double_T;
+    function "/" (A, B : Double_T) return Double_T
+      with Pre => B.Hi /= 0.0;
+    --  Double precision arithmetic operations
+ 
+    function Sqr (A : Double_T) return Double_T;
+    --  Faster version of A * A
+ 
+    function "=" (A : Double_T; B : Num) return Boolean is
+      (A.Hi = B and then A.Lo = 0.0);
+    function "<" (A : Double_T; B : Num) return Boolean is
+      (A.Hi < B or else (A.Hi = B and then A.Lo < 0.0));
+    function "<=" (A : Double_T; B : Num) return Boolean is
+      (A.Hi < B or else (A.Hi = B and then A.Lo <= 0.0));
+    function ">" (A : Double_T; B : Num) return Boolean is
+      (A.Hi > B or else (A.Hi = B and then A.Lo > 0.0));
+    function ">=" (A : Double_T; B : Num) return Boolean is
+      (A.Hi > B or else (A.Hi = B and then A.Lo >= 0.0));
+    --  Mixed precision comparisons
+ 
+    function "=" (A, B : Double_T) return Boolean is
+      (A.Hi = B.Hi and then A.Lo = B.Lo);
+    function "<" (A, B : Double_T) return Boolean is
+      (A.Hi < B.Hi or else (A.Hi = B.Hi and then A.Lo < B.Lo));
+    function "<=" (A, B : Double_T) return Boolean is
+      (A.Hi < B.Hi or else (A.Hi = B.Hi and then A.Lo <= B.Lo));
+    function ">" (A, B : Double_T) return Boolean is
+      (A.Hi > B.Hi or else (A.Hi = B.Hi and then A.Lo > B.Lo));
+    function ">=" (A, B : Double_T) return Boolean is
+      (A.Hi > B.Hi or else (A.Hi = B.Hi and then A.Lo >= B.Lo));
+    --  Double precision comparisons
+ 
+    generic
+       type Uns is mod <>;
+    function From_Unsigned (U : Uns) return Double_T;
+    --  Convert Uns to Double_T
+ 
+    generic
+       type Uns is mod <>;
+    function To_Unsigned (D : Double_T) return Uns
+      with Pre => D >= 0.0;
+    --  Convert Double_T to Uns with truncation
+ 
+ end System.Double_Real;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dsaser.ads gcc-12.1.0/gcc/ada/libgnat/s-dsaser.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dsaser.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dsaser.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 2006-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dwalin.adb gcc-12.1.0/gcc/ada/libgnat/s-dwalin.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-dwalin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dwalin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
*************** with Ada.Unchecked_Deallocation;
*** 35,41 ****
  
  with Interfaces; use Interfaces;
  
- with System;                   use System;
  with System.Address_Image;
  with System.Bounded_Strings;   use System.Bounded_Strings;
  with System.IO;                use System.IO;
--- 35,40 ----
*************** package body System.Dwarf_Lines is
*** 138,144 ****
        File :        uint32) return String;
     --  Extract a file name from the header
  
!    type Callback is access procedure (C : in out Dwarf_Context);
     procedure For_Each_Row (C : in out Dwarf_Context; F : Callback);
     --  Traverse each .debug_line entry with a callback
  
--- 137,143 ----
        File :        uint32) return String;
     --  Extract a file name from the header
  
!    type Callback is not null access procedure (C : in out Dwarf_Context);
     procedure For_Each_Row (C : in out Dwarf_Context; F : Callback);
     --  Traverse each .debug_line entry with a callback
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-dwalin.ads gcc-12.1.0/gcc/ada/libgnat/s-dwalin.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-dwalin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-dwalin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-elaall.adb gcc-12.1.0/gcc/ada/libgnat/s-elaall.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-elaall.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-elaall.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2014-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-elaall.ads gcc-12.1.0/gcc/ada/libgnat/s-elaall.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-elaall.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-elaall.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2014-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2014-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-excdeb.adb gcc-12.1.0/gcc/ada/libgnat/s-excdeb.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-excdeb.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-excdeb.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2006-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package body System.Exceptions_Debug is
  
     ---------------------------
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-excdeb.ads gcc-12.1.0/gcc/ada/libgnat/s-excdeb.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-excdeb.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-excdeb.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2006-2022, 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- --
***************
*** 33,40 ****
  --  It should be compiled without optimization to let debuggers inspect
  --  parameter values reliably from breakpoints on the routines.
  
- pragma Compiler_Unit_Warning;
- 
  with System.Standard_Library;
  
  package System.Exceptions_Debug is
--- 33,38 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-except.adb gcc-12.1.0/gcc/ada/libgnat/s-except.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-except.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-except.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2006-2022, 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- --
***************
*** 29,45 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package does not require a body, since it is a package renaming. We
! --  provide a dummy file containing a No_Body pragma so that previous versions
! --  of the body (which did exist) will not interfere.
! 
! --  pragma No_Body;
! 
! --  The above pragma is commented out, since for now we can't use No_Body in
! --  a unit marked as a Compiler_Unit, since this requires GNAT 6.1, and we
! --  do not yet require this for bootstrapping. So instead we use a dummy Taft
! --  amendment type to require the body:
! 
! package body System.Exceptions is
!    type Require_Body is new Integer;
! end System.Exceptions;
--- 29,32 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! pragma No_Body;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-except.ads gcc-12.1.0/gcc/ada/libgnat/s-except.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-except.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-except.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2006-2022, 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- --
***************
*** 29,63 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package System.Exceptions is
  
     pragma Preelaborate;
!    --  To let Ada.Exceptions "with" us and let us "with" Standard_Library
! 
!    ZCX_By_Default : constant Boolean;
!    --  Visible copy to allow Ada.Exceptions to know the exception model
  
  private
  
-    type Require_Body;
-    --  Dummy Taft-amendment type to make it legal (and required) to provide
-    --  a body for this package.
-    --
-    --  We do this because this unit used to have a body in earlier versions
-    --  of GNAT, and it causes various bootstrap path problems etc if we remove
-    --  a body, since we may pick up old unwanted bodies.
-    --
-    --  Note: we use this standard Ada method of requiring a body rather
-    --  than the cleaner pragma No_Body because System.Exceptions is a compiler
-    --  unit, and older bootstrap compilers do not support pragma No_Body. This
-    --  type can be removed, and s-except.adb can be replaced by a source
-    --  containing just that pragma, when we decide to move to a 2008 compiler
-    --  as the minimal bootstrap compiler version. ???
- 
-    ZCX_By_Default : constant Boolean := System.ZCX_By_Default;
- 
     Foreign_Exception : exception;
     pragma Unreferenced (Foreign_Exception);
     --  This hidden exception is used to represent non-Ada exception to
--- 29,41 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
  package System.Exceptions is
  
     pragma Preelaborate;
!    --  To let Ada.Exceptions "with" us
  
  private
  
     Foreign_Exception : exception;
     pragma Unreferenced (Foreign_Exception);
     --  This hidden exception is used to represent non-Ada exception to
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-excmac__arm.adb gcc-12.1.0/gcc/ada/libgnat/s-excmac__arm.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-excmac__arm.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-excmac__arm.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2013-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2013-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-excmac__arm.ads gcc-12.1.0/gcc/ada/libgnat/s-excmac__arm.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-excmac__arm.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-excmac__arm.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2013-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2013-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-excmac__gcc.adb gcc-12.1.0/gcc/ada/libgnat/s-excmac__gcc.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-excmac__gcc.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-excmac__gcc.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2013-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2013-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-excmac__gcc.ads gcc-12.1.0/gcc/ada/libgnat/s-excmac__gcc.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-excmac__gcc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-excmac__gcc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2013-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2013-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exctab.adb gcc-12.1.0/gcc/ada/libgnat/s-exctab.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-exctab.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exctab.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with System.Soft_Links; use System.Soft_Links;
  
  package body System.Exception_Table is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exctab.ads gcc-12.1.0/gcc/ada/libgnat/s-exctab.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-exctab.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exctab.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
***************
*** 33,40 ****
  --  registered exception names, for the implementation of the mapping
  --  of names to exceptions (used for exception streams and attributes)
  
- pragma Compiler_Unit_Warning;
- 
  with System.Standard_Library;
  
  package System.Exception_Table is
--- 33,38 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exctra.adb gcc-12.1.0/gcc/ada/libgnat/s-exctra.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-exctra.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exctra.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exctra.ads gcc-12.1.0/gcc/ada/libgnat/s-exctra.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-exctra.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exctra.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exnflt.ads gcc-12.1.0/gcc/ada/libgnat/s-exnflt.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-exnflt.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-exnflt.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,41 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                       S Y S T E M . E X N _ F L T                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Float exponentiation (checks off)
+ 
+ with System.Exponr;
+ 
+ package System.Exn_Flt is
+ 
+    function Exn_Float is new Exponr (Float);
+    pragma Pure_Function (Exn_Float);
+ 
+ end System.Exn_Flt;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exnint.adb gcc-12.1.0/gcc/ada/libgnat/s-exnint.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-exnint.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exnint.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exnint.ads gcc-12.1.0/gcc/ada/libgnat/s-exnint.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-exnint.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exnint.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,41 ****
  
  --  Integer exponentiation (checks off)
  
  with System.Exponn;
  
! package System.Exn_Int is
  
!    function Exn_Integer is new Exponn (Integer);
!    pragma Pure_Function (Exn_Integer);
  
  end System.Exn_Int;
--- 31,56 ----
  
  --  Integer exponentiation (checks off)
  
+ --  Preconditions, postconditions, ghost code, loop invariants and assertions
+ --  in this unit are meant for analysis only, not for run-time checking, as it
+ --  would be too costly otherwise. This is enforced by setting the assertion
+ --  policy to Ignore.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with System.Exponn;
  
! package System.Exn_Int
!   with SPARK_Mode
! is
  
!    package Exponn_Integer is new Exponn (Integer);
! 
!    function Exn_Integer (Left : Integer; Right : Natural) return Integer
!      renames Exponn_Integer.Expon;
  
  end System.Exn_Int;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exnlfl.ads gcc-12.1.0/gcc/ada/libgnat/s-exnlfl.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-exnlfl.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-exnlfl.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,41 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                      S Y S T E M . E X N _ L F L T                       --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Long_Float exponentiation (checks off)
+ 
+ with System.Exponr;
+ 
+ package System.Exn_LFlt is
+ 
+    function Exn_Long_Float is new Exponr (Long_Float);
+    pragma Pure_Function (Exn_Long_Float);
+ 
+ end System.Exn_LFlt;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exnllf.adb gcc-12.1.0/gcc/ada/libgnat/s-exnllf.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-exnllf.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exnllf.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,182 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Note: the reason for treating exponents in the range 0 .. 4 specially is
! --  to ensure identical results to the static inline expansion in the case of
! --  a compile time known exponent in this range. The use of Float'Machine and
! --  Long_Float'Machine is to avoid unwanted extra precision in the results.
! 
! --  Note that for a negative exponent in Left ** Right, we compute the result
! --  as:
! 
! --     1.0 / (Left ** (-Right))
! 
! --  Note that the case of Left being zero is not special, it will simply result
! --  in a division by zero at the end, yielding a correctly signed infinity, or
! --  possibly generating an overflow.
! 
! --  Note on overflow: This coding assumes that the target generates infinities
! --  with standard IEEE semantics. If this is not the case, then the code
! --  for negative exponent may raise Constraint_Error. This follows the
! --  implementation permission given in RM 4.5.6(12).
! 
! package body System.Exn_LLF is
! 
!    subtype Negative is Integer range Integer'First .. -1;
! 
!    function Exp
!      (Left  : Long_Long_Float;
!       Right : Natural) return Long_Long_Float;
!    --  Common routine used if Right is greater or equal to 5
! 
!    ---------------
!    -- Exn_Float --
!    ---------------
! 
!    function Exn_Float
!      (Left  : Float;
!       Right : Integer) return Float
!    is
!       Temp : Float;
!    begin
!       case Right is
!          when 0 =>
!             return 1.0;
!          when 1 =>
!             return Left;
!          when 2 =>
!             return Float'Machine (Left * Left);
!          when 3 =>
!             return Float'Machine (Left * Left * Left);
!          when 4 =>
!             Temp := Float'Machine (Left * Left);
!             return Float'Machine (Temp * Temp);
!          when Negative =>
!             return Float'Machine (1.0 / Exn_Float (Left, -Right));
!          when others =>
!             return
!               Float'Machine
!                 (Float (Exp (Long_Long_Float (Left), Right)));
!       end case;
!    end Exn_Float;
! 
!    --------------------
!    -- Exn_Long_Float --
!    --------------------
! 
!    function Exn_Long_Float
!      (Left  : Long_Float;
!       Right : Integer) return Long_Float
!    is
!       Temp : Long_Float;
!    begin
!       case Right is
!          when 0 =>
!             return 1.0;
!          when 1 =>
!             return Left;
!          when 2 =>
!             return Long_Float'Machine (Left * Left);
!          when 3 =>
!             return Long_Float'Machine (Left * Left * Left);
!          when 4 =>
!             Temp := Long_Float'Machine (Left * Left);
!             return Long_Float'Machine (Temp * Temp);
!          when Negative =>
!             return Long_Float'Machine (1.0 / Exn_Long_Float (Left, -Right));
!          when others =>
!             return
!               Long_Float'Machine
!                 (Long_Float (Exp (Long_Long_Float (Left), Right)));
!       end case;
!    end Exn_Long_Float;
! 
!    -------------------------
!    -- Exn_Long_Long_Float --
!    -------------------------
! 
!    function Exn_Long_Long_Float
!      (Left  : Long_Long_Float;
!       Right : Integer) return Long_Long_Float
!    is
!       Temp : Long_Long_Float;
!    begin
!       case Right is
!          when 0 =>
!             return 1.0;
!          when 1 =>
!             return Left;
!          when 2 =>
!             return Left * Left;
!          when 3 =>
!             return Left * Left * Left;
!          when 4 =>
!             Temp := Left * Left;
!             return Temp * Temp;
!          when Negative =>
!             return 1.0 / Exn_Long_Long_Float (Left, -Right);
!          when others =>
!             return Exp (Left, Right);
!       end case;
!    end Exn_Long_Long_Float;
! 
!    ---------
!    -- Exp --
!    ---------
! 
!    function Exp
!      (Left  : Long_Long_Float;
!       Right : Natural) return Long_Long_Float
!    is
!       Result : Long_Long_Float := 1.0;
!       Factor : Long_Long_Float := Left;
!       Exp    : Natural := Right;
! 
!    begin
!       --  We use the standard logarithmic approach, Exp gets shifted right
!       --  testing successive low order bits and Factor is the value of the
!       --  base raised to the next power of 2. If the low order bit or Exp is
!       --  set, multiply the result by this factor.
! 
!       loop
!          if Exp rem 2 /= 0 then
!             Result := Result * Factor;
!          end if;
! 
!          Exp := Exp / 2;
!          exit when Exp = 0;
!          Factor := Factor * Factor;
!       end loop;
! 
!       return Result;
!    end Exp;
  
! end System.Exn_LLF;
--- 29,36 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package does not require a body, since it is an instantiation. We
! --  provide a dummy file containing a No_Body pragma so that previous versions
! --  of the body (which did exist) will not interfere.
  
! pragma No_Body;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exnllf.ads gcc-12.1.0/gcc/ada/libgnat/s-exnllf.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-exnllf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exnllf.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,49 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  [Long_[Long_]]Float exponentiation (checks off)
! 
! package System.Exn_LLF is
!    pragma Pure;
  
!    function Exn_Float
!      (Left  : Float;
!       Right : Integer) return Float;
  
!    function Exn_Long_Float
!      (Left  : Long_Float;
!       Right : Integer) return Long_Float;
  
!    function Exn_Long_Long_Float
!      (Left  : Long_Long_Float;
!       Right : Integer) return Long_Long_Float;
  
  end System.Exn_LLF;
--- 29,41 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Long_Long_Float exponentiation (checks off)
  
! with System.Exponr;
  
! package System.Exn_LLF is
  
!    function Exn_Long_Long_Float is new Exponr (Long_Long_Float);
!    pragma Pure_Function (Exn_Long_Long_Float);
  
  end System.Exn_LLF;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exnlli.adb gcc-12.1.0/gcc/ada/libgnat/s-exnlli.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-exnlli.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exnlli.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exnlli.ads gcc-12.1.0/gcc/ada/libgnat/s-exnlli.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-exnlli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exnlli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,41 ****
  
  --  Long_Long_Integer exponentiation (checks off)
  
  with System.Exponn;
  
! package System.Exn_LLI is
  
!    function Exn_Long_Long_Integer is new Exponn (Long_Long_Integer);
!    pragma Pure_Function (Exn_Long_Long_Integer);
  
  end System.Exn_LLI;
--- 31,57 ----
  
  --  Long_Long_Integer exponentiation (checks off)
  
+ --  Preconditions, postconditions, ghost code, loop invariants and assertions
+ --  in this unit are meant for analysis only, not for run-time checking, as it
+ --  would be too costly otherwise. This is enforced by setting the assertion
+ --  policy to Ignore.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with System.Exponn;
  
! package System.Exn_LLI
!   with SPARK_Mode
! is
  
!    package Exponn_Integer is new Exponn (Long_Long_Integer);
! 
!    function Exn_Long_Long_Integer
!      (Left : Long_Long_Integer; Right : Natural) return Long_Long_Integer
!      renames Exponn_Integer.Expon;
  
  end System.Exn_LLI;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exnllli.ads gcc-12.1.0/gcc/ada/libgnat/s-exnllli.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-exnllli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exnllli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,41 ****
  
  --  Long_Long_Long_Integer exponentiation (checks off)
  
  with System.Exponn;
  
! package System.Exn_LLLI is
  
!    function Exn_Long_Long_Long_Integer is new Exponn (Long_Long_Long_Integer);
!    pragma Pure_Function (Exn_Long_Long_Long_Integer);
  
  end System.Exn_LLLI;
--- 31,58 ----
  
  --  Long_Long_Long_Integer exponentiation (checks off)
  
+ --  Preconditions, postconditions, ghost code, loop invariants and assertions
+ --  in this unit are meant for analysis only, not for run-time checking, as it
+ --  would be too costly otherwise. This is enforced by setting the assertion
+ --  policy to Ignore.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with System.Exponn;
  
! package System.Exn_LLLI
!   with SPARK_Mode
! is
  
!    package Exponn_Integer is new Exponn (Long_Long_Long_Integer);
! 
!    function Exn_Long_Long_Long_Integer
!      (Left : Long_Long_Long_Integer; Right : Natural)
!       return Long_Long_Long_Integer
!      renames Exponn_Integer.Expon;
  
  end System.Exn_LLLI;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-expint.adb gcc-12.1.0/gcc/ada/libgnat/s-expint.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-expint.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-expint.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-expint.ads gcc-12.1.0/gcc/ada/libgnat/s-expint.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-expint.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-expint.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,41 ****
  
  --  Integer exponentiation (checks on)
  
  with System.Expont;
  
! package System.Exp_Int is
  
!    function Exp_Integer is new Expont (Integer);
!    pragma Pure_Function (Exp_Integer);
  
  end System.Exp_Int;
--- 31,56 ----
  
  --  Integer exponentiation (checks on)
  
+ --  Preconditions, postconditions, ghost code, loop invariants and assertions
+ --  in this unit are meant for analysis only, not for run-time checking, as it
+ --  would be too costly otherwise. This is enforced by setting the assertion
+ --  policy to Ignore.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with System.Expont;
  
! package System.Exp_Int
!   with SPARK_Mode
! is
  
!    package Expont_Integer is new Expont (Integer);
! 
!    function Exp_Integer (Left : Integer; Right : Natural) return Integer
!      renames Expont_Integer.Expon;
  
  end System.Exp_Int;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-explli.adb gcc-12.1.0/gcc/ada/libgnat/s-explli.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-explli.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-explli.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-explli.ads gcc-12.1.0/gcc/ada/libgnat/s-explli.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-explli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-explli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,41 ****
  
  --  Long_Long_Integer exponentiation (checks on)
  
  with System.Expont;
  
! package System.Exp_LLI is
  
!    function Exp_Long_Long_Integer is new Expont (Long_Long_Integer);
!    pragma Pure_Function (Exp_Long_Long_Integer);
  
  end System.Exp_LLI;
--- 31,57 ----
  
  --  Long_Long_Integer exponentiation (checks on)
  
+ --  Preconditions, postconditions, ghost code, loop invariants and assertions
+ --  in this unit are meant for analysis only, not for run-time checking, as it
+ --  would be too costly otherwise. This is enforced by setting the assertion
+ --  policy to Ignore.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with System.Expont;
  
! package System.Exp_LLI
!   with SPARK_Mode
! is
  
!    package Expont_Integer is new Expont (Long_Long_Integer);
! 
!    function Exp_Long_Long_Integer
!      (Left : Long_Long_Integer; Right : Natural) return Long_Long_Integer
!      renames Expont_Integer.Expon;
  
  end System.Exp_LLI;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-expllli.ads gcc-12.1.0/gcc/ada/libgnat/s-expllli.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-expllli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-expllli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,41 ****
  
  --  Long_Long_Long_Integer exponentiation (checks on)
  
  with System.Expont;
  
! package System.Exp_LLLI is
  
!    function Exp_Long_Long_Long_Integer is new Expont (Long_Long_Long_Integer);
!    pragma Pure_Function (Exp_Long_Long_Long_Integer);
  
  end System.Exp_LLLI;
--- 31,58 ----
  
  --  Long_Long_Long_Integer exponentiation (checks on)
  
+ --  Preconditions, postconditions, ghost code, loop invariants and assertions
+ --  in this unit are meant for analysis only, not for run-time checking, as it
+ --  would be too costly otherwise. This is enforced by setting the assertion
+ --  policy to Ignore.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with System.Expont;
  
! package System.Exp_LLLI
!   with SPARK_Mode
! is
  
!    package Expont_Integer is new Expont (Long_Long_Long_Integer);
! 
!    function Exp_Long_Long_Long_Integer
!      (Left : Long_Long_Long_Integer; Right : Natural)
!       return Long_Long_Long_Integer
!      renames Expont_Integer.Expon;
  
  end System.Exp_LLLI;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-explllu.ads gcc-12.1.0/gcc/ada/libgnat/s-explllu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-explllu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-explllu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 34,43 ****
  --  The result is always full width, the caller must do a masking operation if
  --  the modulus is less than 2 ** Long_Long_Long_Unsigned'Size.
  
  with System.Exponu;
  with System.Unsigned_Types;
  
! package System.Exp_LLLU is
  
     subtype Long_Long_Long_Unsigned is Unsigned_Types.Long_Long_Long_Unsigned;
  
--- 34,56 ----
  --  The result is always full width, the caller must do a masking operation if
  --  the modulus is less than 2 ** Long_Long_Long_Unsigned'Size.
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced
+ --  by setting the corresponding assertion policy to Ignore. Postconditions
+ --  and contract cases should not be executed at runtime as well, in order
+ --  not to slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
  with System.Exponu;
  with System.Unsigned_Types;
  
! package System.Exp_LLLU
!   with SPARK_Mode
! is
  
     subtype Long_Long_Long_Unsigned is Unsigned_Types.Long_Long_Long_Unsigned;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-expllu.adb gcc-12.1.0/gcc/ada/libgnat/s-expllu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-expllu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-expllu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-expllu.ads gcc-12.1.0/gcc/ada/libgnat/s-expllu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-expllu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-expllu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 34,43 ****
  --  The result is always full width, the caller must do a masking operation if
  --  the modulus is less than 2 ** Long_Long_Unsigned'Size.
  
  with System.Exponu;
  with System.Unsigned_Types;
  
! package System.Exp_LLU is
  
     subtype Long_Long_Unsigned is Unsigned_Types.Long_Long_Unsigned;
  
--- 34,56 ----
  --  The result is always full width, the caller must do a masking operation if
  --  the modulus is less than 2 ** Long_Long_Unsigned'Size.
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced
+ --  by setting the corresponding assertion policy to Ignore. Postconditions
+ --  and contract cases should not be executed at runtime as well, in order
+ --  not to slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
  with System.Exponu;
  with System.Unsigned_Types;
  
! package System.Exp_LLU
!   with SPARK_Mode
! is
  
     subtype Long_Long_Unsigned is Unsigned_Types.Long_Long_Unsigned;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-expmod.adb gcc-12.1.0/gcc/ada/libgnat/s-expmod.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-expmod.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-expmod.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! package body System.Exp_Mod is
     use System.Unsigned_Types;
  
     -----------------
     -- Exp_Modular --
     -----------------
--- 29,196 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Preconditions, postconditions, ghost code, loop invariants and assertions
! --  in this unit are meant for analysis only, not for run-time checking, as it
! --  would be too costly otherwise. This is enforced by setting the assertion
! --  policy to Ignore.
! 
! pragma Assertion_Policy (Pre            => Ignore,
!                          Post           => Ignore,
!                          Ghost          => Ignore,
!                          Loop_Invariant => Ignore,
!                          Assert         => Ignore);
! 
! with Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
! use Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
! 
! package body System.Exp_Mod
!   with SPARK_Mode
! is
     use System.Unsigned_Types;
  
+    --  Local lemmas
+ 
+    procedure Lemma_Add_Mod (X, Y : Big_Natural; B : Big_Positive)
+    with
+      Ghost,
+      Post => (X + Y) mod B = ((X mod B) + (Y mod B)) mod B;
+ 
+    procedure Lemma_Exp_Expand (A : Big_Integer; Exp : Natural)
+    with
+      Ghost,
+      Post =>
+        (if Exp rem 2 = 0 then
+           A ** Exp = A ** (Exp / 2) * A ** (Exp / 2)
+         else
+           A ** Exp = A ** (Exp / 2) * A ** (Exp / 2) * A);
+ 
+    procedure Lemma_Exp_Mod (A : Big_Natural; Exp : Natural; B : Big_Positive)
+    with
+      Ghost,
+      Subprogram_Variant => (Decreases => Exp),
+      Post => ((A mod B) ** Exp) mod B = (A ** Exp) mod B;
+ 
+    procedure Lemma_Mod_Ident (A : Big_Natural; B : Big_Positive)
+    with
+      Ghost,
+      Pre => A < B,
+      Post => A mod B = A;
+ 
+    procedure Lemma_Mod_Mod (A : Big_Integer; B : Big_Positive)
+    with
+      Ghost,
+      Post => A mod B mod B = A mod B;
+ 
+    procedure Lemma_Mult_Div (X : Big_Natural; Y : Big_Positive)
+    with
+      Ghost,
+      Post => X * Y / Y = X;
+ 
+    procedure Lemma_Mult_Mod (X, Y : Big_Natural; B : Big_Positive)
+    with
+      Ghost,
+      --  The following subprogram variant can be added as soon as supported
+      --  Subprogram_Variant => (Decreases => Y),
+      Post => (X * Y) mod B = ((X mod B) * (Y mod B)) mod B;
+ 
+    -----------------------------
+    -- Local lemma null bodies --
+    -----------------------------
+ 
+    procedure Lemma_Mod_Ident (A : Big_Natural; B : Big_Positive) is null;
+    procedure Lemma_Mod_Mod (A : Big_Integer; B : Big_Positive) is null;
+    procedure Lemma_Mult_Div (X : Big_Natural; Y : Big_Positive) is null;
+ 
+    -------------------
+    -- Lemma_Add_Mod --
+    -------------------
+ 
+    procedure Lemma_Add_Mod (X, Y : Big_Natural; B : Big_Positive) is
+       Left  : constant Big_Natural := (X + Y) mod B;
+       Right : constant Big_Natural := ((X mod B) + (Y mod B)) mod B;
+       XQuot : constant Big_Natural := X / B;
+       YQuot : constant Big_Natural := Y / B;
+       AQuot : constant Big_Natural := (X mod B + Y mod B) / B;
+    begin
+       if Y /= 0 and B > 1 then
+          pragma Assert (X = XQuot * B + X mod B);
+          pragma Assert (Y = YQuot * B + Y mod B);
+          pragma Assert
+            (Left = ((XQuot + YQuot) * B + X mod B + Y mod B) mod B);
+          pragma Assert (X mod B + Y mod B = AQuot * B + Right);
+          pragma Assert (Left = ((XQuot + YQuot + AQuot) * B + Right) mod B);
+          pragma Assert (Left = Right);
+       end if;
+    end Lemma_Add_Mod;
+ 
+    ----------------------
+    -- Lemma_Exp_Expand --
+    ----------------------
+ 
+    procedure Lemma_Exp_Expand (A : Big_Integer; Exp : Natural) is
+    begin
+       if Exp rem 2 = 0 then
+          pragma Assert (Exp = Exp / 2 + Exp / 2);
+       else
+          pragma Assert (Exp = Exp / 2 + Exp / 2 + 1);
+          pragma Assert (A ** Exp = A ** (Exp / 2) * A ** (Exp / 2 + 1));
+          pragma Assert (A ** (Exp / 2 + 1) = A ** (Exp / 2) * A);
+          pragma Assert (A ** Exp = A ** (Exp / 2) * A ** (Exp / 2) * A);
+       end if;
+    end Lemma_Exp_Expand;
+ 
+    -------------------
+    -- Lemma_Exp_Mod --
+    -------------------
+ 
+    procedure Lemma_Exp_Mod (A : Big_Natural; Exp : Natural; B : Big_Positive)
+    is
+    begin
+       if Exp /= 0 then
+          declare
+             Left  : constant Big_Integer := ((A mod B) ** Exp) mod B;
+             Right : constant Big_Integer := (A ** Exp) mod B;
+          begin
+             Lemma_Mult_Mod (A mod B, (A mod B) ** (Exp - 1), B);
+             Lemma_Mod_Mod (A, B);
+             Lemma_Exp_Mod (A, Exp - 1, B);
+             Lemma_Mult_Mod (A, A ** (Exp - 1), B);
+             pragma Assert (Left = Right);
+          end;
+       end if;
+    end Lemma_Exp_Mod;
+ 
+    --------------------
+    -- Lemma_Mult_Mod --
+    --------------------
+ 
+    procedure Lemma_Mult_Mod (X, Y : Big_Natural; B : Big_Positive) is
+       Left : constant Big_Natural := (X * Y) mod B;
+       Right : constant Big_Natural := ((X mod B) * (Y mod B)) mod B;
+    begin
+       if Y /= 0 and B > 1 then
+          Lemma_Add_Mod (X * (Y - 1), X, B);
+          Lemma_Mult_Mod (X, Y - 1, B);
+          Lemma_Mod_Mod (X, B);
+          Lemma_Add_Mod ((X mod B) * ((Y - 1) mod B), X mod B, B);
+          Lemma_Add_Mod (Y - 1, 1, B);
+          pragma Assert (((Y - 1) mod B + 1) mod B = Y mod B);
+          if (Y - 1) mod B + 1 < B then
+             Lemma_Mod_Ident ((Y - 1) mod B + 1, B);
+             Lemma_Mod_Mod ((X mod B) * (Y mod B), B);
+             pragma Assert (Left = Right);
+          else
+             pragma Assert (Y mod B = 0);
+             pragma Assert ((X * Y) mod B = (X * Y) - (X * Y) / B * B);
+             pragma Assert
+               ((X * Y) mod B = (X * Y) - (X * (Y / B) * B) / B * B);
+             Lemma_Mult_Div (X * (Y / B), B);
+             pragma Assert (Left = 0);
+             pragma Assert (Left = Right);
+          end if;
+       end if;
+    end Lemma_Mult_Mod;
+ 
     -----------------
     -- Exp_Modular --
     -----------------
*************** package body System.Exp_Mod is
*** 47,57 ****
  
        function Mult (X, Y : Unsigned) return Unsigned is
          (Unsigned (Long_Long_Unsigned (X) * Long_Long_Unsigned (Y)
!                     mod Long_Long_Unsigned (Modulus)));
        --  Modular multiplication. Note that we can't take advantage of the
        --  compiler's circuit, because the modulus is not known statically.
  
     begin
        --  We use the standard logarithmic approach, Exp gets shifted right
        --  testing successive low order bits and Factor is the value of the
        --  base raised to the next power of 2.
--- 206,241 ----
  
        function Mult (X, Y : Unsigned) return Unsigned is
          (Unsigned (Long_Long_Unsigned (X) * Long_Long_Unsigned (Y)
!                     mod Long_Long_Unsigned (Modulus)))
!       with
!         Pre => Modulus /= 0;
        --  Modular multiplication. Note that we can't take advantage of the
        --  compiler's circuit, because the modulus is not known statically.
  
+       --  Local ghost variables, functions and lemmas
+ 
+       M : constant Big_Positive := Big (Modulus) with Ghost;
+ 
+       function Equal_Modulo (X, Y : Big_Integer) return Boolean is
+          (X mod M = Y mod M)
+       with
+         Ghost,
+         Pre => Modulus /= 0;
+ 
+       procedure Lemma_Mult (X, Y : Unsigned)
+       with
+         Ghost,
+         Post => Big (Mult (X, Y)) = (Big (X) * Big (Y)) mod M
+           and then Big (Mult (X, Y)) < M;
+ 
+       procedure Lemma_Mult (X, Y : Unsigned) is null;
+ 
+       Rest : Big_Integer with Ghost;
+       --  Ghost variable to hold Factor**Exp between Exp and Factor updates
+ 
     begin
+       pragma Assert (Modulus /= 1);
+ 
        --  We use the standard logarithmic approach, Exp gets shifted right
        --  testing successive low order bits and Factor is the value of the
        --  base raised to the next power of 2.
*************** package body System.Exp_Mod is
*** 62,75 ****
--- 246,314 ----
  
        if Exp /= 0 then
           loop
+             pragma Loop_Invariant (Exp > 0);
+             pragma Loop_Invariant (Result < Modulus);
+             pragma Loop_Invariant (Equal_Modulo
+               (Big (Result) * Big (Factor) ** Exp, Big (Left) ** Right));
+             pragma Loop_Variant (Decreases => Exp);
+             pragma Annotate
+               (CodePeer, False_Positive,
+                "validity check", "confusion on generated code");
+ 
              if Exp rem 2 /= 0 then
+                pragma Assert
+                  (Big (Factor) ** Exp
+                   = Big (Factor) * Big (Factor) ** (Exp - 1));
+                pragma Assert (Equal_Modulo
+                  ((Big (Result) * Big (Factor)) * Big (Factor) ** (Exp - 1),
+                   Big (Left) ** Right));
+                Lemma_Mult_Mod (Big (Result) * Big (Factor),
+                                   Big (Factor) ** (Exp - 1),
+                                   Big (Modulus));
+                Lemma_Mult (Result, Factor);
+ 
                 Result := Mult (Result, Factor);
+ 
+                Lemma_Mod_Ident (Big (Result), Big (Modulus));
+                Lemma_Mod_Mod (Big (Factor) ** (Exp - 1), Big (Modulus));
+                Lemma_Mult_Mod (Big (Result),
+                                   Big (Factor) ** (Exp - 1),
+                                   Big (Modulus));
+                pragma Assert (Equal_Modulo
+                  (Big (Result) * Big (Factor) ** (Exp - 1),
+                   Big (Left) ** Right));
+                Lemma_Exp_Expand (Big (Factor), Exp - 1);
+                pragma Assert (Exp / 2 = (Exp - 1) / 2);
              end if;
  
+             Lemma_Exp_Expand (Big (Factor), Exp);
+ 
              Exp := Exp / 2;
              exit when Exp = 0;
+ 
+             Rest := Big (Factor) ** Exp;
+             pragma Assert (Equal_Modulo
+               (Big (Result) * (Rest * Rest), Big (Left) ** Right));
+             Lemma_Exp_Mod (Big (Factor) * Big (Factor), Exp, Big (Modulus));
+             pragma Assert
+               ((Big (Factor) * Big (Factor)) ** Exp = Rest * Rest);
+             pragma Assert (Equal_Modulo
+               ((Big (Factor) * Big (Factor)) ** Exp,
+                Rest * Rest));
+             Lemma_Mult (Factor, Factor);
+ 
              Factor := Mult (Factor, Factor);
+ 
+             Lemma_Mod_Mod (Rest * Rest, Big (Modulus));
+             Lemma_Mod_Ident (Big (Result), Big (Modulus));
+             Lemma_Mult_Mod (Big (Result), Rest * Rest, Big (Modulus));
+             Lemma_Mult_Mod (Big (Result), Big (Factor) ** Exp,
+                                Big (Modulus));
+             pragma Assert (Equal_Modulo
+               (Big (Result) * Big (Factor) ** Exp, Big (Left) ** Right));
           end loop;
+ 
+          pragma Assert (Big (Result) = Big (Left) ** Right mod Big (Modulus));
        end if;
  
        return Result;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-expmod.ads gcc-12.1.0/gcc/ada/libgnat/s-expmod.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-expmod.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-expmod.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2022, 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- --
***************
*** 35,56 ****
  --  Note that 1 is a binary modulus (2**0), so the compiler should not (and
  --  will not) call this function with Modulus equal to 1.
  
  with System.Unsigned_Types;
  
! package System.Exp_Mod is
!    pragma Pure;
     use type System.Unsigned_Types.Unsigned;
  
!    subtype Power_Of_2 is System.Unsigned_Types.Unsigned with
       Dynamic_Predicate =>
          Power_Of_2 /= 0 and then (Power_Of_2 and (Power_Of_2 - 1)) = 0;
  
     function Exp_Modular
!      (Left    : System.Unsigned_Types.Unsigned;
!       Modulus : System.Unsigned_Types.Unsigned;
!       Right   : Natural) return System.Unsigned_Types.Unsigned
     with
!        Pre  => Modulus /= 0 and then Modulus not in Power_Of_2,
!        Post => Exp_Modular'Result = Left ** Right mod Modulus;
  
  end System.Exp_Mod;
--- 35,84 ----
  --  Note that 1 is a binary modulus (2**0), so the compiler should not (and
  --  will not) call this function with Modulus equal to 1.
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
+ with Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
+ 
  with System.Unsigned_Types;
  
! package System.Exp_Mod
!   with Pure, SPARK_Mode
! is
     use type System.Unsigned_Types.Unsigned;
+    subtype Unsigned is System.Unsigned_Types.Unsigned;
  
!    use type Ada.Numerics.Big_Numbers.Big_Integers_Ghost.Big_Integer;
!    subtype Big_Integer is
!      Ada.Numerics.Big_Numbers.Big_Integers_Ghost.Big_Integer
!    with Ghost;
! 
!    package Unsigned_Conversion is
!      new Ada.Numerics.Big_Numbers.Big_Integers_Ghost.Unsigned_Conversions
!        (Int => Unsigned);
! 
!    function Big (Arg : Unsigned) return Big_Integer is
!      (Unsigned_Conversion.To_Big_Integer (Arg))
!    with Ghost;
! 
!    subtype Power_Of_2 is Unsigned with
       Dynamic_Predicate =>
          Power_Of_2 /= 0 and then (Power_Of_2 and (Power_Of_2 - 1)) = 0;
  
     function Exp_Modular
!      (Left    : Unsigned;
!       Modulus : Unsigned;
!       Right   : Natural) return Unsigned
     with
!      Pre  => Modulus /= 0 and then Modulus not in Power_Of_2,
!      Post => Big (Exp_Modular'Result) = Big (Left) ** Right mod Big (Modulus);
  
  end System.Exp_Mod;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exponn.adb gcc-12.1.0/gcc/ada/libgnat/s-exponn.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-exponn.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exponn.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,72 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! function System.Exponn (Left : Int; Right : Natural) return Int is
  
!    --  Note that negative exponents get a constraint error because the
!    --  subtype of the Right argument (the exponent) is Natural.
  
!    Result : Int     := 1;
!    Factor : Int     := Left;
!    Exp    : Natural := Right;
  
! begin
!    --  We use the standard logarithmic approach, Exp gets shifted right
!    --  testing successive low order bits and Factor is the value of the
!    --  base raised to the next power of 2.
  
!    --  Note: it is not worth special casing base values -1, 0, +1 since
!    --  the expander does this when the base is a literal, and other cases
!    --  will be extremely rare.
  
-    if Exp /= 0 then
        loop
           if Exp rem 2 /= 0 then
              declare
                 pragma Suppress (Overflow_Check);
              begin
                 Result := Result * Factor;
              end;
           end if;
  
           Exp := Exp / 2;
           exit when Exp = 0;
  
           declare
              pragma Suppress (Overflow_Check);
           begin
              Factor := Factor * Factor;
           end;
        end loop;
-    end if;
  
!    return Result;
  end System.Exponn;
--- 29,223 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! package body System.Exponn
!   with SPARK_Mode
! is
  
!    --  Preconditions, postconditions, ghost code, loop invariants and
!    --  assertions in this unit are meant for analysis only, not for run-time
!    --  checking, as it would be too costly otherwise. This is enforced by
!    --  setting the assertion policy to Ignore.
  
!    pragma Assertion_Policy (Pre            => Ignore,
!                             Post           => Ignore,
!                             Ghost          => Ignore,
!                             Loop_Invariant => Ignore,
!                             Assert         => Ignore);
  
!    --  Local lemmas
  
!    procedure Lemma_Exp_Expand (A : Big_Integer; Exp : Natural)
!    with
!      Ghost,
!      Pre  => A /= 0,
!      Post =>
!        (if Exp rem 2 = 0 then
!           A ** Exp = A ** (Exp / 2) * A ** (Exp / 2)
!         else
!           A ** Exp = A ** (Exp / 2) * A ** (Exp / 2) * A);
! 
!    procedure Lemma_Exp_In_Range (A : Big_Integer; Exp : Positive)
!    with
!      Ghost,
!      Pre  => In_Int_Range (A ** Exp * A ** Exp),
!      Post => In_Int_Range (A * A);
! 
!    procedure Lemma_Exp_Not_Zero (A : Big_Integer; Exp : Natural)
!    with
!      Ghost,
!      Pre  => A /= 0,
!      Post => A ** Exp /= 0;
! 
!    procedure Lemma_Exp_Positive (A : Big_Integer; Exp : Natural)
!    with
!      Ghost,
!      Pre  => A /= 0
!        and then Exp rem 2 = 0,
!      Post => A ** Exp > 0;
! 
!    procedure Lemma_Mult_In_Range (X, Y, Z : Big_Integer)
!    with
!      Ghost,
!      Pre  => Y /= 0
!        and then not (X = -Big (Int'First) and Y = -1)
!        and then X * Y = Z
!        and then In_Int_Range (Z),
!      Post => In_Int_Range (X);
! 
!    -----------------------------
!    -- Local lemma null bodies --
!    -----------------------------
! 
!    procedure Lemma_Exp_Not_Zero (A : Big_Integer; Exp : Natural) is null;
!    procedure Lemma_Mult_In_Range (X, Y, Z : Big_Integer) is null;
! 
!    -----------
!    -- Expon --
!    -----------
! 
!    function Expon (Left : Int; Right : Natural) return Int is
! 
!       --  Note that negative exponents get a constraint error because the
!       --  subtype of the Right argument (the exponent) is Natural.
! 
!       Result : Int     := 1;
!       Factor : Int     := Left;
!       Exp    : Natural := Right;
! 
!       Rest : Big_Integer with Ghost;
!       --  Ghost variable to hold Factor**Exp between Exp and Factor updates
! 
!    begin
!       --  We use the standard logarithmic approach, Exp gets shifted right
!       --  testing successive low order bits and Factor is the value of the
!       --  base raised to the next power of 2.
! 
!       --  Note: for compilation only, it is not worth special casing base
!       --  values -1, 0, +1 since the expander does this when the base is a
!       --  literal, and other cases will be extremely rare. But for proof,
!       --  special casing zero in both positions makes ghost code and lemmas
!       --  simpler, so we do it.
! 
!       if Right = 0 then
!          return 1;
!       elsif Left = 0 then
!          return 0;
!       end if;
  
        loop
+          pragma Loop_Invariant (Exp > 0);
+          pragma Loop_Invariant (Factor /= 0);
+          pragma Loop_Invariant
+            (Big (Result) * Big (Factor) ** Exp = Big (Left) ** Right);
+          pragma Loop_Variant (Decreases => Exp);
+ 
           if Exp rem 2 /= 0 then
              declare
                 pragma Suppress (Overflow_Check);
              begin
+                pragma Assert
+                  (Big (Factor) ** Exp
+                   = Big (Factor) * Big (Factor) ** (Exp - 1));
+                Lemma_Exp_Positive (Big (Factor), Exp - 1);
+                Lemma_Mult_In_Range (Big (Result) * Big (Factor),
+                                     Big (Factor) ** (Exp - 1),
+                                     Big (Left) ** Right);
+ 
                 Result := Result * Factor;
              end;
           end if;
  
+          Lemma_Exp_Expand (Big (Factor), Exp);
+ 
           Exp := Exp / 2;
           exit when Exp = 0;
  
+          Rest := Big (Factor) ** Exp;
+          pragma Assert
+            (Big (Result) * (Rest * Rest) = Big (Left) ** Right);
+ 
           declare
              pragma Suppress (Overflow_Check);
           begin
+             Lemma_Mult_In_Range (Rest * Rest,
+                                  Big (Result),
+                                  Big (Left) ** Right);
+             Lemma_Exp_In_Range (Big (Factor), Exp);
+ 
              Factor := Factor * Factor;
           end;
+ 
+          pragma Assert (Big (Factor) ** Exp = Rest * Rest);
        end loop;
  
!       pragma Assert (Big (Result) = Big (Left) ** Right);
! 
!       return Result;
!    end Expon;
! 
!    ----------------------
!    -- Lemma_Exp_Expand --
!    ----------------------
! 
!    procedure Lemma_Exp_Expand (A : Big_Integer; Exp : Natural) is
!    begin
!       if Exp rem 2 = 0 then
!          pragma Assert (Exp = Exp / 2 + Exp / 2);
!       else
!          pragma Assert (Exp = Exp / 2 + Exp / 2 + 1);
!          pragma Assert (A ** Exp = A ** (Exp / 2) * A ** (Exp / 2 + 1));
!          pragma Assert (A ** (Exp / 2 + 1) = A ** (Exp / 2) * A);
!          pragma Assert (A ** Exp = A ** (Exp / 2) * A ** (Exp / 2) * A);
!       end if;
!    end Lemma_Exp_Expand;
! 
!    ------------------------
!    -- Lemma_Exp_In_Range --
!    ------------------------
! 
!    procedure Lemma_Exp_In_Range (A : Big_Integer; Exp : Positive) is
!    begin
!       if A /= 0 and Exp /= 1 then
!          pragma Assert (A ** Exp = A * A ** (Exp - 1));
!          Lemma_Mult_In_Range
!            (A * A, A ** (Exp - 1) * A ** (Exp - 1), A ** Exp * A ** Exp);
!       end if;
!    end Lemma_Exp_In_Range;
! 
!    ------------------------
!    -- Lemma_Exp_Positive --
!    ------------------------
! 
!    procedure Lemma_Exp_Positive (A : Big_Integer; Exp : Natural) is
!    begin
!       if Exp = 0 then
!          pragma Assert (A ** Exp = 1);
!       else
!          pragma Assert (Exp = 2 * (Exp / 2));
!          pragma Assert (A ** Exp = A ** (Exp / 2) * A ** (Exp / 2));
!          pragma Assert (A ** Exp = (A ** (Exp / 2)) ** 2);
!          Lemma_Exp_Not_Zero (A, Exp / 2);
!       end if;
!    end Lemma_Exp_Positive;
! 
  end System.Exponn;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exponn.ads gcc-12.1.0/gcc/ada/libgnat/s-exponn.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-exponn.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exponn.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,38 ****
  
  --  Signed integer exponentiation (checks off)
  
  generic
  
     type Int is range <>;
  
! function System.Exponn (Left : Int; Right : Natural) return Int;
--- 31,71 ----
  
  --  Signed integer exponentiation (checks off)
  
+ with Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
+ use Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
+ 
  generic
  
     type Int is range <>;
  
! package System.Exponn
!   with Pure, SPARK_Mode
! is
! 
!    --  Preconditions in this unit are meant for analysis only, not for run-time
!    --  checking, so that the expected exceptions are raised. This is enforced
!    --  by setting the corresponding assertion policy to Ignore. Postconditions
!    --  and contract cases should not be executed at runtime as well, in order
!    --  not to slow down the execution of these functions.
! 
!    pragma Assertion_Policy (Pre            => Ignore,
!                             Post           => Ignore,
!                             Contract_Cases => Ignore,
!                             Ghost          => Ignore);
! 
!    package Signed_Conversion is new Signed_Conversions (Int => Int);
! 
!    function Big (Arg : Int) return Big_Integer is
!      (Signed_Conversion.To_Big_Integer (Arg))
!    with Ghost;
! 
!    function In_Int_Range (Arg : Big_Integer) return Boolean is
!      (In_Range (Arg, Big (Int'First), Big (Int'Last)))
!    with Ghost;
! 
!    function Expon (Left : Int; Right : Natural) return Int
!    with
!      Pre  => In_Int_Range (Big (Left) ** Right),
!      Post => Expon'Result = Left ** Right;
! 
! end System.Exponn;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exponr.adb gcc-12.1.0/gcc/ada/libgnat/s-exponr.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-exponr.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-exponr.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,125 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                        S Y S T E M . E X P O N R                         --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Note that the reason for treating exponents in the range 0 .. 4 specially
+ --  is to ensure identical results with the static expansion in the case of a
+ --  compile-time known exponent in this range; similarly, the use 'Machine is
+ --  to avoid unwanted extra precision in the results.
+ 
+ --  For a negative exponent, we compute the result as per RM 4.5.6(11/3):
+ 
+ --     Left ** Right = 1.0 / (Left ** (-Right))
+ 
+ --  Note that the case of Left being zero is not special, it will simply result
+ --  in a division by zero at the end, yielding a correctly signed infinity, or
+ --  possibly raising an overflow exception.
+ 
+ --  Note on overflow: this coding assumes that the target generates infinities
+ --  with standard IEEE semantics. If this is not the case, then the code for
+ --  negative exponents may raise Constraint_Error, which is in keeping with the
+ --  implementation permission given in RM 4.5.6(12).
+ 
+ with System.Double_Real;
+ 
+ function System.Exponr (Left : Num; Right : Integer) return Num is
+ 
+    package Double_Real is new System.Double_Real (Num);
+    use type Double_Real.Double_T;
+ 
+    subtype Double_T is Double_Real.Double_T;
+    --  The double floating-point type
+ 
+    subtype Safe_Negative is Integer range Integer'First + 1 .. -1;
+    --  The range of safe negative exponents
+ 
+    function Expon (Left : Num; Right : Natural) return Num;
+    --  Routine used if Right is greater than 4
+ 
+    -----------
+    -- Expon --
+    -----------
+ 
+    function Expon (Left : Num; Right : Natural) return Num is
+       Result : Double_T := Double_Real.To_Double (1.0);
+       Factor : Double_T := Double_Real.To_Double (Left);
+       Exp    : Natural  := Right;
+ 
+    begin
+       --  We use the standard logarithmic approach, Exp gets shifted right
+       --  testing successive low order bits and Factor is the value of the
+       --  base raised to the next power of 2. If the low order bit or Exp
+       --  is set, multiply the result by this factor.
+ 
+       loop
+          if Exp rem 2 /= 0 then
+             Result := Result * Factor;
+             exit when Exp = 1;
+          end if;
+ 
+          Exp := Exp / 2;
+          Factor := Double_Real.Sqr (Factor);
+       end loop;
+ 
+       return Double_Real.To_Single (Result);
+    end Expon;
+ 
+ begin
+    case Right is
+       when 0 =>
+          return 1.0;
+ 
+       when 1 =>
+          return Left;
+ 
+       when 2 =>
+          return Num'Machine (Left * Left);
+ 
+       when 3 =>
+          return Num'Machine (Left * Left * Left);
+ 
+       when 4 =>
+          declare
+             Sqr : constant Num := Num'Machine (Left * Left);
+ 
+          begin
+             return Num'Machine (Sqr * Sqr);
+          end;
+ 
+       when Safe_Negative =>
+          return Num'Machine (1.0 / Exponr (Left, -Right));
+ 
+       when Integer'First =>
+          return Num'Machine (1.0 / (Exponr (Left, Integer'Last) * Left));
+ 
+       when others =>
+          return Num'Machine (Expon (Left, Right));
+    end case;
+ end System.Exponr;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exponr.ads gcc-12.1.0/gcc/ada/libgnat/s-exponr.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-exponr.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-exponr.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,38 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                        S Y S T E M . E X P O N R                         --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Real exponentiation (checks off)
+ 
+ generic
+ 
+    type Num is digits <>;
+ 
+ function System.Exponr (Left : Num; Right : Integer) return Num;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-expont.adb gcc-12.1.0/gcc/ada/libgnat/s-expont.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-expont.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-expont.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,72 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! function System.Expont (Left : Int; Right : Natural) return Int is
  
!    --  Note that negative exponents get a constraint error because the
!    --  subtype of the Right argument (the exponent) is Natural.
  
!    Result : Int     := 1;
!    Factor : Int     := Left;
!    Exp    : Natural := Right;
  
! begin
!    --  We use the standard logarithmic approach, Exp gets shifted right
!    --  testing successive low order bits and Factor is the value of the
!    --  base raised to the next power of 2.
  
!    --  Note: it is not worth special casing base values -1, 0, +1 since
!    --  the expander does this when the base is a literal, and other cases
!    --  will be extremely rare.
  
-    if Exp /= 0 then
        loop
           if Exp rem 2 /= 0 then
              declare
                 pragma Unsuppress (Overflow_Check);
              begin
                 Result := Result * Factor;
              end;
           end if;
  
           Exp := Exp / 2;
           exit when Exp = 0;
  
           declare
              pragma Unsuppress (Overflow_Check);
           begin
              Factor := Factor * Factor;
           end;
        end loop;
-    end if;
  
!    return Result;
  end System.Expont;
--- 29,223 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! package body System.Expont
!   with SPARK_Mode
! is
  
!    --  Preconditions, postconditions, ghost code, loop invariants and
!    --  assertions in this unit are meant for analysis only, not for run-time
!    --  checking, as it would be too costly otherwise. This is enforced by
!    --  setting the assertion policy to Ignore.
  
!    pragma Assertion_Policy (Pre            => Ignore,
!                             Post           => Ignore,
!                             Ghost          => Ignore,
!                             Loop_Invariant => Ignore,
!                             Assert         => Ignore);
  
!    --  Local lemmas
  
!    procedure Lemma_Exp_Expand (A : Big_Integer; Exp : Natural)
!    with
!      Ghost,
!      Pre  => A /= 0,
!      Post =>
!        (if Exp rem 2 = 0 then
!           A ** Exp = A ** (Exp / 2) * A ** (Exp / 2)
!         else
!           A ** Exp = A ** (Exp / 2) * A ** (Exp / 2) * A);
! 
!    procedure Lemma_Exp_In_Range (A : Big_Integer; Exp : Positive)
!    with
!      Ghost,
!      Pre  => In_Int_Range (A ** Exp * A ** Exp),
!      Post => In_Int_Range (A * A);
! 
!    procedure Lemma_Exp_Not_Zero (A : Big_Integer; Exp : Natural)
!    with
!      Ghost,
!      Pre  => A /= 0,
!      Post => A ** Exp /= 0;
! 
!    procedure Lemma_Exp_Positive (A : Big_Integer; Exp : Natural)
!    with
!      Ghost,
!      Pre  => A /= 0
!        and then Exp rem 2 = 0,
!      Post => A ** Exp > 0;
! 
!    procedure Lemma_Mult_In_Range (X, Y, Z : Big_Integer)
!    with
!      Ghost,
!      Pre  => Y /= 0
!        and then not (X = -Big (Int'First) and Y = -1)
!        and then X * Y = Z
!        and then In_Int_Range (Z),
!      Post => In_Int_Range (X);
! 
!    -----------------------------
!    -- Local lemma null bodies --
!    -----------------------------
! 
!    procedure Lemma_Exp_Not_Zero (A : Big_Integer; Exp : Natural) is null;
!    procedure Lemma_Mult_In_Range (X, Y, Z : Big_Integer) is null;
! 
!    -----------
!    -- Expon --
!    -----------
! 
!    function Expon (Left : Int; Right : Natural) return Int is
! 
!       --  Note that negative exponents get a constraint error because the
!       --  subtype of the Right argument (the exponent) is Natural.
! 
!       Result : Int     := 1;
!       Factor : Int     := Left;
!       Exp    : Natural := Right;
! 
!       Rest : Big_Integer with Ghost;
!       --  Ghost variable to hold Factor**Exp between Exp and Factor updates
! 
!    begin
!       --  We use the standard logarithmic approach, Exp gets shifted right
!       --  testing successive low order bits and Factor is the value of the
!       --  base raised to the next power of 2.
! 
!       --  Note: for compilation only, it is not worth special casing base
!       --  values -1, 0, +1 since the expander does this when the base is a
!       --  literal, and other cases will be extremely rare. But for proof,
!       --  special casing zero in both positions makes ghost code and lemmas
!       --  simpler, so we do it.
! 
!       if Right = 0 then
!          return 1;
!       elsif Left = 0 then
!          return 0;
!       end if;
  
        loop
+          pragma Loop_Invariant (Exp > 0);
+          pragma Loop_Invariant (Factor /= 0);
+          pragma Loop_Invariant
+            (Big (Result) * Big (Factor) ** Exp = Big (Left) ** Right);
+          pragma Loop_Variant (Decreases => Exp);
+ 
           if Exp rem 2 /= 0 then
              declare
                 pragma Unsuppress (Overflow_Check);
              begin
+                pragma Assert
+                  (Big (Factor) ** Exp
+                   = Big (Factor) * Big (Factor) ** (Exp - 1));
+                Lemma_Exp_Positive (Big (Factor), Exp - 1);
+                Lemma_Mult_In_Range (Big (Result) * Big (Factor),
+                                     Big (Factor) ** (Exp - 1),
+                                     Big (Left) ** Right);
+ 
                 Result := Result * Factor;
              end;
           end if;
  
+          Lemma_Exp_Expand (Big (Factor), Exp);
+ 
           Exp := Exp / 2;
           exit when Exp = 0;
  
+          Rest := Big (Factor) ** Exp;
+          pragma Assert
+            (Big (Result) * (Rest * Rest) = Big (Left) ** Right);
+ 
           declare
              pragma Unsuppress (Overflow_Check);
           begin
+             Lemma_Mult_In_Range (Rest * Rest,
+                                  Big (Result),
+                                  Big (Left) ** Right);
+             Lemma_Exp_In_Range (Big (Factor), Exp);
+ 
              Factor := Factor * Factor;
           end;
+ 
+          pragma Assert (Big (Factor) ** Exp = Rest * Rest);
        end loop;
  
!       pragma Assert (Big (Result) = Big (Left) ** Right);
! 
!       return Result;
!    end Expon;
! 
!    ----------------------
!    -- Lemma_Exp_Expand --
!    ----------------------
! 
!    procedure Lemma_Exp_Expand (A : Big_Integer; Exp : Natural) is
!    begin
!       if Exp rem 2 = 0 then
!          pragma Assert (Exp = Exp / 2 + Exp / 2);
!       else
!          pragma Assert (Exp = Exp / 2 + Exp / 2 + 1);
!          pragma Assert (A ** Exp = A ** (Exp / 2) * A ** (Exp / 2 + 1));
!          pragma Assert (A ** (Exp / 2 + 1) = A ** (Exp / 2) * A);
!          pragma Assert (A ** Exp = A ** (Exp / 2) * A ** (Exp / 2) * A);
!       end if;
!    end Lemma_Exp_Expand;
! 
!    ------------------------
!    -- Lemma_Exp_In_Range --
!    ------------------------
! 
!    procedure Lemma_Exp_In_Range (A : Big_Integer; Exp : Positive) is
!    begin
!       if A /= 0 and Exp /= 1 then
!          pragma Assert (A ** Exp = A * A ** (Exp - 1));
!          Lemma_Mult_In_Range
!            (A * A, A ** (Exp - 1) * A ** (Exp - 1), A ** Exp * A ** Exp);
!       end if;
!    end Lemma_Exp_In_Range;
! 
!    ------------------------
!    -- Lemma_Exp_Positive --
!    ------------------------
! 
!    procedure Lemma_Exp_Positive (A : Big_Integer; Exp : Natural) is
!    begin
!       if Exp = 0 then
!          pragma Assert (A ** Exp = 1);
!       else
!          pragma Assert (Exp = 2 * (Exp / 2));
!          pragma Assert (A ** Exp = A ** (Exp / 2) * A ** (Exp / 2));
!          pragma Assert (A ** Exp = (A ** (Exp / 2)) ** 2);
!          Lemma_Exp_Not_Zero (A, Exp / 2);
!       end if;
!    end Lemma_Exp_Positive;
! 
  end System.Expont;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-expont.ads gcc-12.1.0/gcc/ada/libgnat/s-expont.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-expont.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-expont.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,38 ****
  
  --  Signed integer exponentiation (checks on)
  
  generic
  
     type Int is range <>;
  
! function System.Expont (Left : Int; Right : Natural) return Int;
--- 31,71 ----
  
  --  Signed integer exponentiation (checks on)
  
+ with Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
+ use Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
+ 
  generic
  
     type Int is range <>;
  
! package System.Expont
!   with Pure, SPARK_Mode
! is
! 
!    --  Preconditions in this unit are meant for analysis only, not for run-time
!    --  checking, so that the expected exceptions are raised. This is enforced
!    --  by setting the corresponding assertion policy to Ignore. Postconditions
!    --  and contract cases should not be executed at runtime as well, in order
!    --  not to slow down the execution of these functions.
! 
!    pragma Assertion_Policy (Pre            => Ignore,
!                             Post           => Ignore,
!                             Contract_Cases => Ignore,
!                             Ghost          => Ignore);
! 
!    package Signed_Conversion is new Signed_Conversions (Int => Int);
! 
!    function Big (Arg : Int) return Big_Integer is
!      (Signed_Conversion.To_Big_Integer (Arg))
!    with Ghost;
! 
!    function In_Int_Range (Arg : Big_Integer) return Boolean is
!      (In_Range (Arg, Big (Int'First), Big (Int'Last)))
!    with Ghost;
! 
!    function Expon (Left : Int; Right : Natural) return Int
!    with
!      Pre  => In_Int_Range (Big (Left) ** Right),
!      Post => Expon'Result = Left ** Right;
! 
! end System.Expont;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exponu.adb gcc-12.1.0/gcc/ada/libgnat/s-exponu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-exponu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exponu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! function System.Exponu (Left : Int; Right : Natural) return Int is
  
     --  Note that negative exponents get a constraint error because the
     --  subtype of the Right argument (the exponent) is Natural.
--- 29,47 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! function System.Exponu (Left : Int; Right : Natural) return Int
!   with SPARK_Mode
! is
!    --  Preconditions, postconditions, ghost code, loop invariants and
!    --  assertions in this unit are meant for analysis only, not for run-time
!    --  checking, as it would be too costly otherwise. This is enforced by
!    --  setting the assertion policy to Ignore.
! 
!    pragma Assertion_Policy (Pre            => Ignore,
!                             Post           => Ignore,
!                             Ghost          => Ignore,
!                             Loop_Invariant => Ignore,
!                             Assert         => Ignore);
  
     --  Note that negative exponents get a constraint error because the
     --  subtype of the Right argument (the exponent) is Natural.
*************** begin
*** 49,55 ****
--- 61,76 ----
  
     if Exp /= 0 then
        loop
+          pragma Loop_Invariant (Exp > 0);
+          pragma Loop_Invariant (Result * Factor ** Exp = Left ** Right);
+          pragma Loop_Variant (Decreases => Exp);
+ 
           if Exp rem 2 /= 0 then
+             pragma Assert
+               (Result * (Factor * Factor ** (Exp - 1)) = Left ** Right);
+             pragma Assert
+               ((Result * Factor) * Factor ** (Exp - 1) = Left ** Right);
+ 
              Result := Result * Factor;
           end if;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-exponu.ads gcc-12.1.0/gcc/ada/libgnat/s-exponu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-exponu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-exponu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,38 ****
  
  --  Modular integer exponentiation
  
  generic
  
     type Int is mod <>;
  
! function System.Exponu (Left : Int; Right : Natural) return Int;
--- 31,52 ----
  
  --  Modular integer exponentiation
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced
+ --  by setting the corresponding assertion policy to Ignore. Postconditions
+ --  and contract cases should not be executed at runtime as well, in order
+ --  not to slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
  generic
  
     type Int is mod <>;
  
! function System.Exponu (Left : Int; Right : Natural) return Int
! with
!   SPARK_Mode,
!   Post => System.Exponu'Result = Left ** Right;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-expuns.adb gcc-12.1.0/gcc/ada/libgnat/s-expuns.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-expuns.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-expuns.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-expuns.ads gcc-12.1.0/gcc/ada/libgnat/s-expuns.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-expuns.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-expuns.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 34,43 ****
  --  The result is always full width, the caller must do a masking operation if
  --  the modulus is less than 2 ** Unsigned'Size.
  
  with System.Exponu;
  with System.Unsigned_Types;
  
! package System.Exp_Uns is
  
     subtype Unsigned is Unsigned_Types.Unsigned;
  
--- 34,56 ----
  --  The result is always full width, the caller must do a masking operation if
  --  the modulus is less than 2 ** Unsigned'Size.
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced
+ --  by setting the corresponding assertion policy to Ignore. Postconditions
+ --  and contract cases should not be executed at runtime as well, in order
+ --  not to slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
  with System.Exponu;
  with System.Unsigned_Types;
  
! package System.Exp_Uns
!   with SPARK_Mode
! is
  
     subtype Unsigned is Unsigned_Types.Unsigned;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fatflt.ads gcc-12.1.0/gcc/ada/libgnat/s-fatflt.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fatflt.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fatflt.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fatgen.adb gcc-12.1.0/gcc/ada/libgnat/s-fatgen.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-fatgen.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fatgen.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 35,49 ****
  --  floating-point implementations.
  
  with Ada.Unchecked_Conversion;
- with Interfaces;
  with System.Unsigned_Types;
  
  pragma Warnings (Off, "non-static constant in preelaborated unit");
  --  Every constant is static given our instantiation model
  
  package body System.Fat_Gen is
-    use type Interfaces.Unsigned_64;
- 
     pragma Assert (T'Machine_Radix = 2);
     --  This version does not handle radix 16
  
--- 35,46 ----
*************** package body System.Fat_Gen is
*** 62,78 ****
     --  Tiny : constant T := Rad ** (T'Machine_Emin - Mantissa);
     --  Smallest positive denormalized number
  
-    Tiny16 : constant Interfaces.Unsigned_16 := 1;
-    Tiny32 : constant Interfaces.Unsigned_32 := 1;
-    Tiny64 : constant Interfaces.Unsigned_64 := 1;
-    Tiny80 : constant array (1 .. 2) of Interfaces.Unsigned_64 :=
-               (1 * Standard'Default_Bit_Order,
-                2**48 * (1 - Standard'Default_Bit_Order));
-    for Tiny80'Alignment use Standard'Maximum_Alignment;
-    --  We cannot use the direct declaration because it cannot be translated
-    --  into C90, as the hexadecimal floating constants were introduced in C99.
-    --  So we work around this by using an overlay of the integer constant.
- 
     RM1 : constant T := Rad ** (Mantissa - 1);
     --  Smallest positive member of the large consecutive integers. It is equal
     --  to the ratio Small / Tiny, which means that multiplying by it normalizes
--- 59,64 ----
*************** package body System.Fat_Gen is
*** 110,131 ****
     --      component of Float_Rep, named Most Significant Word (MSW).
  
     --    - The sign occupies the most significant bit of the MSW and the
!    --      exponent is in the following bits. The exception is 80-bit
!    --      double extended, where they occupy the low 16-bit halfword.
  
!    --  The low-level primitives Copy_Sign, Decompose, Scaling and Valid are
!    --  implemented by accessing the bit pattern of the floating-point number.
!    --  Only the normalization of denormalized numbers, if any, and the gradual
!    --  underflow are left to the hardware, mainly because there is some leeway
!    --  for the hardware implementation in this area: for example, the MSB of
!    --  the mantissa, which is 1 for normalized numbers and 0 for denormalized
     --  numbers, may or may not be stored by the hardware.
  
!    Siz : constant := (if System.Word_Size > 32 then 32 else System.Word_Size);
     type Float_Word is mod 2**Siz;
  
!    N : constant Natural := (T'Size + Siz - 1) / Siz;
!    Rep_Last : constant Natural := Natural'Min (N - 1, (Mantissa + 16) / Siz);
     --  Determine the number of Float_Words needed for representing the
     --  entire floating-point value. Do not take into account excessive
     --  padding, as occurs on IA-64 where 80 bits floats get padded to 128
--- 96,118 ----
     --      component of Float_Rep, named Most Significant Word (MSW).
  
     --    - The sign occupies the most significant bit of the MSW and the
!    --      exponent is in the following bits.
  
!    --  The low-level primitives Copy_Sign, Decompose, Finite_Succ, Scaling and
!    --  Valid are implemented by accessing the bit pattern of the floating-point
!    --  number. Only the normalization of denormalized numbers, if any, and the
!    --  gradual underflow are left to the hardware, mainly because there is some
!    --  leeway for the hardware implementation in this area: for example the MSB
!    --  of the mantissa, that is 1 for normalized numbers and 0 for denormalized
     --  numbers, may or may not be stored by the hardware.
  
!    Siz : constant := 16;
     type Float_Word is mod 2**Siz;
+    --  We use the GCD of the size of all the supported floating-point formats
  
!    N  : constant Natural := (T'Size + Siz - 1) / Siz;
!    NR : constant Natural := (Mantissa + 16 + Siz - 1) / Siz;
!    Rep_Last : constant Natural := Natural'Min (N, NR) - 1;
     --  Determine the number of Float_Words needed for representing the
     --  entire floating-point value. Do not take into account excessive
     --  padding, as occurs on IA-64 where 80 bits floats get padded to 128
*************** package body System.Fat_Gen is
*** 143,154 ****
     --  we assume Word_Order = Bit_Order.
  
     Exp_Factor : constant Float_Word :=
!                   (if Mantissa = 64
!                    then 1
!                    else 2**(Siz - 1) / Float_Word (IEEE_Emax - IEEE_Emin + 3));
     --  Factor that the extracted exponent needs to be divided by to be in
!    --  range 0 .. IEEE_Emax - IEEE_Emin + 2. The special case is 80-bit
!    --  double extended, where the exponent starts the 3rd float word.
  
     Exp_Mask : constant Float_Word :=
                  Float_Word (IEEE_Emax - IEEE_Emin + 2) * Exp_Factor;
--- 130,138 ----
     --  we assume Word_Order = Bit_Order.
  
     Exp_Factor : constant Float_Word :=
!                   2**(Siz - 1) / Float_Word (IEEE_Emax - IEEE_Emin + 3);
     --  Factor that the extracted exponent needs to be divided by to be in
!    --  range 0 .. IEEE_Emax - IEEE_Emin + 2
  
     Exp_Mask : constant Float_Word :=
                  Float_Word (IEEE_Emax - IEEE_Emin + 2) * Exp_Factor;
*************** package body System.Fat_Gen is
*** 156,165 ****
     --  range 0 .. IEEE_Emax - IEEE_Emin + 2 contains 2**N values, for some
     --  N in Natural.
  
!    Sign_Mask : constant Float_Word :=
!                  (if Mantissa = 64 then 2**15 else 2**(Siz - 1));
!    --  Value needed to mask out the sign field. The special case is 80-bit
!    --  double extended, where the exponent starts the 3rd float word.
  
     -----------------------
     -- Local Subprograms --
--- 140,147 ----
     --  range 0 .. IEEE_Emax - IEEE_Emin + 2 contains 2**N values, for some
     --  N in Natural.
  
!    Sign_Mask : constant Float_Word := 2**(Siz - 1);
!    --  Value needed to mask out the sign field
  
     -----------------------
     -- Local Subprograms --
*************** package body System.Fat_Gen is
*** 171,176 ****
--- 153,161 ----
     --  the sign of the exponent. The absolute value of Frac is in the range
     --  0.0 <= Frac < 1.0. If Frac = 0.0 or -0.0, then Expo is always zero.
  
+    function Finite_Succ (X : T) return T;
+    --  Return the successor of X, a finite number not equal to T'Last
+ 
     --------------
     -- Adjacent --
     --------------
*************** package body System.Fat_Gen is
*** 209,215 ****
     function Compose (Fraction : T; Exponent : UI) return T is
        Arg_Frac : T;
        Arg_Exp  : UI;
-       pragma Unreferenced (Arg_Exp);
     begin
        Decompose (Fraction, Arg_Frac, Arg_Exp);
        return Scaling (Arg_Frac, Exponent);
--- 194,199 ----
*************** package body System.Fat_Gen is
*** 300,311 ****
     function Exponent (X : T) return UI is
        X_Frac : T;
        X_Exp  : UI;
-       pragma Unreferenced (X_Frac);
     begin
        Decompose (X, X_Frac, X_Exp);
        return X_Exp;
     end Exponent;
  
     -----------
     -- Floor --
     -----------
--- 284,467 ----
     function Exponent (X : T) return UI is
        X_Frac : T;
        X_Exp  : UI;
     begin
        Decompose (X, X_Frac, X_Exp);
        return X_Exp;
     end Exponent;
  
+    -----------------
+    -- Finite_Succ --
+    -----------------
+ 
+    function Finite_Succ (X : T) return T is
+       XX : T := T'Machine (X);
+ 
+       Rep : Float_Rep;
+       for Rep'Address use XX'Address;
+       --  Rep is a view of the input floating-point parameter
+ 
+    begin
+       --  If the floating-point type does not support denormalized numbers,
+       --  there is a couple of problematic values, namely -Small and Zero,
+       --  because the increment is equal to Small in these cases.
+ 
+       if not T'Denorm then
+          declare
+             Small : constant T := Rad ** (T'Machine_Emin - 1);
+             --  Smallest positive normalized number declared here and not at
+             --  library level for the sake of the CCG compiler, which cannot
+             --  currently compile the constant because the target is C90.
+ 
+          begin
+             if X = -Small then
+                XX := 0.0;
+                return -XX;
+             elsif X = 0.0 then
+                return Small;
+             end if;
+          end;
+       end if;
+ 
+       --  In all the other cases, the increment is equal to 1 in the binary
+       --  integer representation of the number if X is nonnegative and equal
+       --  to -1 if X is negative.
+ 
+       if XX >= 0.0 then
+          --  First clear the sign of negative Zero
+ 
+          Rep (MSW) := Rep (MSW) and not Sign_Mask;
+ 
+          --  Deal with big endian
+ 
+          if MSW = 0 then
+             for J in reverse 0 .. Rep_Last loop
+                Rep (J) := Rep (J) + 1;
+ 
+                --  For 80-bit IEEE Extended, the MSB of the mantissa is stored
+                --  so, when it has been flipped, its status must be reanalyzed.
+ 
+                if Mantissa = 64 and then J = 1 then
+ 
+                   --  If the MSB changed from denormalized to normalized, then
+                   --  keep it normalized since the exponent will be bumped.
+ 
+                   if Rep (J) = 2**(Siz - 1) then
+                      null;
+ 
+                   --  If the MSB changed from normalized, restore it since we
+                   --  cannot denormalize in this context.
+ 
+                   elsif Rep (J) = 0 then
+                      Rep (J) := 2**(Siz - 1);
+ 
+                   else
+                      exit;
+                   end if;
+ 
+                --  In other cases, stop if there is no carry
+ 
+                else
+                   exit when Rep (J) > 0;
+                end if;
+             end loop;
+ 
+          --  Deal with little endian
+ 
+          else
+             for J in 0 .. Rep_Last loop
+                Rep (J) := Rep (J) + 1;
+ 
+                --  For 80-bit IEEE Extended, the MSB of the mantissa is stored
+                --  so, when it has been flipped, its status must be reanalyzed.
+ 
+                if Mantissa = 64 and then J = Rep_Last - 1 then
+ 
+                   --  If the MSB changed from denormalized to normalized, then
+                   --  keep it normalized since the exponent will be bumped.
+ 
+                   if Rep (J) = 2**(Siz - 1) then
+                      null;
+ 
+                   --  If the MSB changed from normalized, restore it since we
+                   --  cannot denormalize in this context.
+ 
+                   elsif Rep (J) = 0 then
+                      Rep (J) := 2**(Siz - 1);
+ 
+                   else
+                      exit;
+                   end if;
+ 
+                --  In other cases, stop if there is no carry
+ 
+                else
+                   exit when Rep (J) > 0;
+                end if;
+             end loop;
+          end if;
+ 
+       else
+          if MSW = 0 then
+             for J in reverse 0 .. Rep_Last loop
+                Rep (J) := Rep (J) - 1;
+ 
+                --  For 80-bit IEEE Extended, the MSB of the mantissa is stored
+                --  so, when it has been flipped, its status must be reanalyzed.
+ 
+                if Mantissa = 64 and then J = 1 then
+ 
+                   --  If the MSB changed from normalized to denormalized, then
+                   --  keep it normalized if the exponent is not 1.
+ 
+                   if Rep (J) = 2**(Siz - 1) - 1 then
+                      if Rep (0) /= 2**(Siz - 1) + 1 then
+                         Rep (J) := 2**Siz - 1;
+                      end if;
+ 
+                   else
+                      exit;
+                   end if;
+ 
+                --  In other cases, stop if there is no borrow
+ 
+                else
+                   exit when Rep (J) < 2**Siz - 1;
+                end if;
+             end loop;
+ 
+          else
+             for J in 0 .. Rep_Last loop
+                Rep (J) := Rep (J) - 1;
+ 
+                --  For 80-bit IEEE Extended, the MSB of the mantissa is stored
+                --  so, when it has been flipped, its status must be reanalyzed.
+ 
+                if Mantissa = 64 and then J = Rep_Last - 1 then
+ 
+                   --  If the MSB changed from normalized to denormalized, then
+                   --  keep it normalized if the exponent is not 1.
+ 
+                   if Rep (J) = 2**(Siz - 1) - 1 then
+                      if Rep (Rep_Last) /= 2**(Siz - 1) + 1 then
+                         Rep (J) := 2**Siz - 1;
+                      end if;
+ 
+                   else
+                      exit;
+                   end if;
+ 
+                --  In other cases, stop if there is no borrow
+ 
+                else
+                   exit when Rep (J) < 2**Siz - 1;
+                end if;
+             end loop;
+          end if;
+       end if;
+ 
+       return XX;
+    end Finite_Succ;
+ 
     -----------
     -- Floor --
     -----------
*************** package body System.Fat_Gen is
*** 329,335 ****
     function Fraction (X : T) return T is
        X_Frac : T;
        X_Exp  : UI;
-       pragma Unreferenced (X_Exp);
     begin
        Decompose (X, X_Frac, X_Exp);
        return X_Frac;
--- 485,490 ----
*************** package body System.Fat_Gen is
*** 424,489 ****
     ----------
  
     function Pred (X : T) return T is
-       Tiny : constant T;
-       pragma Import (Ada, Tiny);
-       for Tiny'Address use (if     T'Size   = 16 then Tiny16'Address
-                              elsif T'Size   = 32 then Tiny32'Address
-                              elsif T'Size   = 64 then Tiny64'Address
-                              elsif Mantissa = 64 then Tiny80'Address
-                              else raise Program_Error);
-       X_Frac : T;
-       X_Exp  : UI;
- 
     begin
-       --  Zero has to be treated specially, since its exponent is zero
- 
-       if X = 0.0 then
-          return -Tiny;
- 
        --  Special treatment for largest negative number: raise Constraint_Error
  
!       elsif X = T'First then
           raise Constraint_Error with "Pred of largest negative number";
  
!       --  For infinities, return unchanged
  
!       elsif X < T'First or else X > T'Last then
           pragma Annotate (CodePeer, Intentional, "condition predetermined",
                            "Check for invalid float");
!          return X;
!          pragma Annotate (CodePeer, Intentional, "dead code",
!                           "Check float range.");
  
!       --  Subtract from the given number a number equivalent to the value
!       --  of its least significant bit. Given that the most significant bit
!       --  represents a value of 1.0 * Radix ** (Exp - 1), the value we want
!       --  is obtained by shifting this by (Mantissa-1) bits to the right,
!       --  i.e. decreasing the exponent by that amount.
  
        else
!          Decompose (X, X_Frac, X_Exp);
! 
!          --  For a denormalized number or a normalized number with the lowest
!          --  exponent, just subtract the Tiny.
! 
!          if X_Exp <= T'Machine_Emin then
!             return X - Tiny;
! 
!          --  A special case, if the number we had was a power of two on the
!          --  positive side of zero, then we want to subtract half of what we
!          --  would have subtracted, since the exponent is going to be reduced.
! 
!          --  Note that X_Frac has the same sign as X so, if X_Frac is Invrad,
!          --  then we know that we had a power of two on the positive side.
! 
!          elsif X_Frac = Invrad then
!             return X - Scaling (1.0, X_Exp - Mantissa - 1);
! 
!          --  Otherwise the adjustment is unchanged
! 
!          else
!             return X - Scaling (1.0, X_Exp - Mantissa);
!          end if;
        end if;
     end Pred;
  
--- 579,605 ----
     ----------
  
     function Pred (X : T) return T is
     begin
        --  Special treatment for largest negative number: raise Constraint_Error
  
!       if X = T'First then
           raise Constraint_Error with "Pred of largest negative number";
  
!       --  For finite numbers, use the symmetry around zero of floating point
  
!       elsif X > T'First and then X <= T'Last then
!          pragma Annotate (CodePeer, Intentional, "test always true",
!                           "Check for invalid float");
           pragma Annotate (CodePeer, Intentional, "condition predetermined",
                            "Check for invalid float");
!          return -Finite_Succ (-X);
  
!       --  For infinities and NaNs, return unchanged
  
        else
!          return X;
!          pragma Annotate (CodePeer, Intentional, "dead code",
!                           "Check float range.");
        end if;
     end Pred;
  
*************** package body System.Fat_Gen is
*** 505,511 ****
        P_Even   : Boolean;
  
        Arg_Frac : T;
-       pragma Unreferenced (Arg_Frac);
  
     begin
        if Y = 0.0 then
--- 621,626 ----
*************** package body System.Fat_Gen is
*** 652,672 ****
           --  Check for overflow
  
           if Adjustment > IEEE_Emax - Exp then
!             XX := 0.0;
!             return (if Minus then -1.0 / XX else 1.0 / XX);
!             pragma Annotate
!               (CodePeer, Intentional, "overflow check", "Infinity produced");
!             pragma Annotate
!               (CodePeer, Intentional, "divide by zero", "Infinity produced");
  
           --  Check for underflow
  
           elsif Adjustment < IEEE_Emin - Exp then
!             --  Check for gradual underflow
  
!             if T'Denorm
!               and then Adjustment >= IEEE_Emin - (Mantissa - 1) - Exp
!             then
                 Expf := IEEE_Emin;
                 Expi := Exp + Adjustment - Expf;
  
--- 767,792 ----
           --  Check for overflow
  
           if Adjustment > IEEE_Emax - Exp then
!             --  Optionally raise Constraint_Error as per RM A.5.3(29)
! 
!             if T'Machine_Overflows then
!                raise Constraint_Error with "Too large exponent";
! 
!             else
!                XX := 0.0;
!                return (if Minus then -1.0 / XX else 1.0 / XX);
!                pragma Annotate (CodePeer, Intentional, "overflow check",
!                                 "Infinity produced");
!                pragma Annotate (CodePeer, Intentional, "divide by zero",
!                                 "Infinity produced");
!             end if;
  
           --  Check for underflow
  
           elsif Adjustment < IEEE_Emin - Exp then
!             --  Check for possibly gradual underflow (up to the hardware)
  
!             if Adjustment >= IEEE_Emin - Mantissa - Exp then
                 Expf := IEEE_Emin;
                 Expi := Exp + Adjustment - Expf;
  
*************** package body System.Fat_Gen is
*** 688,693 ****
--- 808,823 ----
                          Float_Word (IEEE_Ebias + Expf) * Exp_Factor;
  
           if Expi < 0 then
+             --  Given that Expi >= -Mantissa, only -64 is problematic
+ 
+             if Expi = -64 then
+                pragma Annotate
+                  (CodePeer, Intentional, "test always false",
+                   "test always false in some instantiations");
+                XX := XX / 2.0;
+                Expi := -63;
+             end if;
+ 
              XX := XX / T (UST.Long_Long_Unsigned (2) ** (-Expi));
           end if;
  
*************** package body System.Fat_Gen is
*** 700,765 ****
     ----------
  
     function Succ (X : T) return T is
-       Tiny : constant T;
-       pragma Import (Ada, Tiny);
-       for Tiny'Address use (if     T'Size   = 16 then Tiny16'Address
-                              elsif T'Size   = 32 then Tiny32'Address
-                              elsif T'Size   = 64 then Tiny64'Address
-                              elsif Mantissa = 64 then Tiny80'Address
-                              else raise Program_Error);
-       X_Frac : T;
-       X_Exp  : UI;
- 
     begin
-       --  Treat zero specially since it has a zero exponent
- 
-       if X = 0.0 then
-          return Tiny;
- 
        --  Special treatment for largest positive number: raise Constraint_Error
  
!       elsif X = T'Last then
           raise Constraint_Error with "Succ of largest positive number";
  
!       --  For infinities, return unchanged
  
!       elsif X < T'First or else X > T'Last then
           pragma Annotate (CodePeer, Intentional, "condition predetermined",
                            "Check for invalid float");
!          return X;
!          pragma Annotate (CodePeer, Intentional, "dead code",
!                           "Check float range.");
  
!       --  Add to the given number a number equivalent to the value of its
!       --  least significant bit. Given that the most significant bit
!       --  represents a value of 1.0 * Radix ** (Exp - 1), the value we want
!       --  is obtained by shifting this by (Mantissa-1) bits to the right,
!       --  i.e. decreasing the exponent by that amount.
  
        else
!          Decompose (X, X_Frac, X_Exp);
! 
!          --  For a denormalized number or a normalized number with the lowest
!          --  exponent, just add the Tiny.
! 
!          if X_Exp <= T'Machine_Emin then
!             return X + Tiny;
! 
!          --  A special case, if the number we had was a power of two on the
!          --  negative side of zero, then we want to add half of what we would
!          --  have added, since the exponent is going to be reduced.
! 
!          --  Note that X_Frac has the same sign as X, so if X_Frac is -Invrad,
!          --  then we know that we had a power of two on the negative side.
! 
!          elsif X_Frac = -Invrad then
!             return X + Scaling (1.0, X_Exp - Mantissa - 1);
! 
!          --  Otherwise the adjustment is unchanged
! 
!          else
!             return X + Scaling (1.0, X_Exp - Mantissa);
!          end if;
        end if;
     end Succ;
  
--- 830,856 ----
     ----------
  
     function Succ (X : T) return T is
     begin
        --  Special treatment for largest positive number: raise Constraint_Error
  
!       if X = T'Last then
           raise Constraint_Error with "Succ of largest positive number";
  
!       --  For finite numbers, call the specific routine
  
!       elsif X >= T'First and then X < T'Last then
!          pragma Annotate (CodePeer, Intentional, "test always true",
!                           "Check for invalid float");
           pragma Annotate (CodePeer, Intentional, "condition predetermined",
                            "Check for invalid float");
!          return Finite_Succ (X);
  
!       --  For infinities and NaNs, return unchanged
  
        else
!          return X;
!          pragma Annotate (CodePeer, Intentional, "dead code",
!                           "Check float range.");
        end if;
     end Succ;
  
*************** package body System.Fat_Gen is
*** 879,885 ****
        else pragma Assert (Exp = IEEE_Emin - 1);
           --  This is a denormalized number, valid if T'Denorm is True or 0.0
  
!          return T'Denorm or else X.all = 0.0;
        end if;
     end Valid;
  
--- 970,988 ----
        else pragma Assert (Exp = IEEE_Emin - 1);
           --  This is a denormalized number, valid if T'Denorm is True or 0.0
  
!          if T'Denorm then
!             return True;
! 
!          --  Note that we cannot do a direct comparison with 0.0 because the
!          --  hardware may evaluate it to True for all denormalized numbers.
! 
!          else
!             --  First clear the sign bit (the exponent is already zero)
! 
!             Rep (MSW) := Rep (MSW) and not Sign_Mask;
! 
!             return (for all J in 0 .. Rep_Last => Rep (J) = 0);
!          end if;
        end if;
     end Valid;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fatgen.ads gcc-12.1.0/gcc/ada/libgnat/s-fatgen.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fatgen.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fatgen.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fatlfl.ads gcc-12.1.0/gcc/ada/libgnat/s-fatlfl.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fatlfl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fatlfl.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fatllf.ads gcc-12.1.0/gcc/ada/libgnat/s-fatllf.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fatllf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fatllf.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-ficobl.ads gcc-12.1.0/gcc/ada/libgnat/s-ficobl.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-ficobl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-ficobl.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 1992-2022, 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- --
*************** with Ada.Streams;
*** 39,45 ****
  with Interfaces.C_Streams;
  with System.CRTL;
  
! package System.File_Control_Block is
     pragma Preelaborate;
  
     ----------------------------
--- 39,45 ----
  with Interfaces.C_Streams;
  with System.CRTL;
  
! package System.File_Control_Block with SPARK_Mode => Off is
     pragma Preelaborate;
  
     ----------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-filatt.ads gcc-12.1.0/gcc/ada/libgnat/s-filatt.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-filatt.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-filatt.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2013-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2013-2022, 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- --
*************** package System.File_Attributes is
*** 46,51 ****
--- 46,56 ----
       (N : System.Address;
        A : access File_Attributes) return Integer;
  
+    function File_Length_Attr
+      (FD : Integer;
+       N  : System.Address;
+       A  : access File_Attributes) return Long_Long_Integer;
+ 
     function Is_Regular_File_Attr
       (N : System.Address;
        A : access File_Attributes) return Integer;
*************** private
*** 65,70 ****
--- 70,76 ----
     pragma Import (C, Reset_Attributes,     "__gnat_reset_attributes");
     pragma Import (C, Error_Attributes,     "__gnat_error_attributes");
     pragma Import (C, File_Exists_Attr,     "__gnat_file_exists_attr");
+    pragma Import (C, File_Length_Attr,     "__gnat_file_length_attr");
     pragma Import (C, Is_Regular_File_Attr, "__gnat_is_regular_file_attr");
     pragma Import (C, Is_Directory_Attr,    "__gnat_is_directory_attr");
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fileio.adb gcc-12.1.0/gcc/ada/libgnat/s-fileio.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-fileio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fileio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body System.File_IO is
*** 244,250 ****
  
           if File.Shared_Status = Yes then
              declare
!                P   : AFCB_Ptr;
  
              begin
                 P := Open_Files;
--- 244,250 ----
  
           if File.Shared_Status = Yes then
              declare
!                P : AFCB_Ptr;
  
              begin
                 P := Open_Files;
*************** package body System.File_IO is
*** 576,582 ****
        Default : Boolean) return Boolean
     is
        V1, V2 : Natural;
-       pragma Unreferenced (V2);
  
     begin
        Form_Parameter (Form, Keyword, V1, V2);
--- 576,581 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fileio.ads gcc-12.1.0/gcc/ada/libgnat/s-fileio.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fileio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fileio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-finmas.adb gcc-12.1.0/gcc/ada/libgnat/s-finmas.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-finmas.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-finmas.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2015-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2015-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-finmas.ads gcc-12.1.0/gcc/ada/libgnat/s-finmas.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-finmas.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-finmas.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
*************** with Ada.Finalization;
*** 33,40 ****
  with System.Storage_Elements;
  with System.Storage_Pools;
  
- pragma Compiler_Unit_Warning;
- 
  package System.Finalization_Masters is
     pragma Preelaborate;
  
--- 33,38 ----
*************** package System.Finalization_Masters is
*** 74,80 ****
     for Finalization_Master_Ptr'Storage_Size use 0;
  
     procedure Attach (N : not null FM_Node_Ptr; L : not null FM_Node_Ptr);
!    --  Compiler interface, do not call from withing the run-time. Prepend a
     --  node to a specific finalization master.
  
     procedure Attach_Unprotected
--- 72,78 ----
     for Finalization_Master_Ptr'Storage_Size use 0;
  
     procedure Attach (N : not null FM_Node_Ptr; L : not null FM_Node_Ptr);
!    --  Compiler interface, do not call from within the run-time. Prepend a
     --  node to a specific finalization master.
  
     procedure Attach_Unprotected
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-finroo.adb gcc-12.1.0/gcc/ada/libgnat/s-finroo.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-finroo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-finroo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-finroo.ads gcc-12.1.0/gcc/ada/libgnat/s-finroo.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-finroo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-finroo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-flocon.adb gcc-12.1.0/gcc/ada/libgnat/s-flocon.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-flocon.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-flocon.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2011-2020, AdaCore                   --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2011-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-flocon.ads gcc-12.1.0/gcc/ada/libgnat/s-flocon.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-flocon.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-flocon.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2000-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-flocon__none.adb gcc-12.1.0/gcc/ada/libgnat/s-flocon__none.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-flocon__none.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-flocon__none.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2011-2020, AdaCore                   --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                       Copyright (C) 2011-2022, AdaCore                   --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fode128.ads gcc-12.1.0/gcc/ada/libgnat/s-fode128.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fode128.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fode128.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fode32.ads gcc-12.1.0/gcc/ada/libgnat/s-fode32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fode32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fode32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fode64.ads gcc-12.1.0/gcc/ada/libgnat/s-fode64.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fode64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fode64.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fofi128.ads gcc-12.1.0/gcc/ada/libgnat/s-fofi128.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fofi128.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fofi128.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fofi32.ads gcc-12.1.0/gcc/ada/libgnat/s-fofi32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fofi32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fofi32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fofi64.ads gcc-12.1.0/gcc/ada/libgnat/s-fofi64.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fofi64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fofi64.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fore_d.adb gcc-12.1.0/gcc/ada/libgnat/s-fore_d.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-fore_d.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fore_d.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fore_d.ads gcc-12.1.0/gcc/ada/libgnat/s-fore_d.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fore_d.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fore_d.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fore_f.adb gcc-12.1.0/gcc/ada/libgnat/s-fore_f.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-fore_f.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fore_f.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-fore_f.ads gcc-12.1.0/gcc/ada/libgnat/s-fore_f.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-fore_f.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-fore_f.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-forrea.adb gcc-12.1.0/gcc/ada/libgnat/s-forrea.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-forrea.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-forrea.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,42 ****
  
  package body System.Fore_Real is
  
!    ---------------
!    -- Fore_Real --
!    ---------------
  
!    function Fore_Real (Lo, Hi : Long_Long_Float) return Natural is
!       T : Long_Long_Float := Long_Long_Float'Max (abs Lo, abs Hi);
        F : Natural;
  
     begin
--- 31,42 ----
  
  package body System.Fore_Real is
  
!    ----------------
!    -- Fore_Fixed --
!    ----------------
  
!    function Fore_Fixed (Lo, Hi : Long_Float) return Natural is
!       T : Long_Float := Long_Float'Max (abs Lo, abs Hi);
        F : Natural;
  
     begin
*************** package body System.Fore_Real is
*** 52,57 ****
        end loop;
  
        return F;
!    end Fore_Real;
  
  end System.Fore_Real;
--- 52,57 ----
        end loop;
  
        return F;
!    end Fore_Fixed;
  
  end System.Fore_Real;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-forrea.ads gcc-12.1.0/gcc/ada/libgnat/s-forrea.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-forrea.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-forrea.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,42 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routine used for the Fore attribute of ordinary
! --  fixed point types whose Small is neither an integer nor its reciprocal.
  
  package System.Fore_Real is
     pragma Pure;
  
!    function Fore_Real (Lo, Hi : Long_Long_Float) return Natural;
     --  Compute Fore attribute value for a fixed point type. The parameters
!    --  are the low and high bounds, converted to Long_Long_Float.
  
  end System.Fore_Real;
--- 29,42 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package contains the routine for the Fore attribute of ordinary fixed
! --  point types whose Small is not a ratio of two sufficiently small integers.
  
  package System.Fore_Real is
     pragma Pure;
  
!    function Fore_Fixed (Lo, Hi : Long_Float) return Natural;
     --  Compute Fore attribute value for a fixed point type. The parameters
!    --  are the low and high bounds, converted to Long_Float.
  
  end System.Fore_Real;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-gearop.adb gcc-12.1.0/gcc/ada/libgnat/s-gearop.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-gearop.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-gearop.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2006-2022, 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- --
***************
*** 29,46 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  with Ada.Numerics; use Ada.Numerics;
! package body System.Generic_Array_Operations is
     function Check_Unit_Last
       (Index : Integer;
        Order : Positive;
!       First : Integer) return Integer;
     pragma Inline_Always (Check_Unit_Last);
     --  Compute index of last element returned by Unit_Vector or Unit_Matrix.
     --  A separate function is needed to allow raising Constraint_Error before
     --  declaring the function result variable. The result variable needs to be
     --  declared first, to allow front-end inlining.
  
     --------------
     -- Diagonal --
     --------------
--- 29,72 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ --  Preconditions, postconditions, ghost code, loop invariants and assertions
+ --  in this unit are meant for analysis only, not for run-time checking, as it
+ --  would be too costly otherwise. This is enforced by setting the assertion
+ --  policy to Ignore.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with Ada.Numerics; use Ada.Numerics;
! 
! package body System.Generic_Array_Operations
!   with SPARK_Mode
! is
!    pragma Warnings
!      (Off, "aspect * not enforced on inlined subprogram",
!       Reason => "Contracts in this unit are never executed");
! 
     function Check_Unit_Last
       (Index : Integer;
        Order : Positive;
!       First : Integer) return Integer
!    with
!      Pre => Index >= First
!        and then First <= Integer'Last - Order + 1
!        and then Index <= First + (Order - 1),
!      Post => Check_Unit_Last'Result = First + (Order - 1);
! 
     pragma Inline_Always (Check_Unit_Last);
     --  Compute index of last element returned by Unit_Vector or Unit_Matrix.
     --  A separate function is needed to allow raising Constraint_Error before
     --  declaring the function result variable. The result variable needs to be
     --  declared first, to allow front-end inlining.
  
+    pragma Warnings (On, "aspect * not enforced on inlined subprogram");
+ 
     --------------
     -- Diagonal --
     --------------
*************** package body System.Generic_Array_Operat
*** 48,56 ****
     function Diagonal (A : Matrix) return Vector is
        N : constant Natural := Natural'Min (A'Length (1), A'Length (2));
     begin
!       return R : Vector (A'First (1) .. A'First (1) + N - 1) do
           for J in 0 .. N - 1 loop
              R (R'First + J) := A (A'First (1) + J, A'First (2) + J);
           end loop;
        end return;
     end Diagonal;
--- 74,87 ----
     function Diagonal (A : Matrix) return Vector is
        N : constant Natural := Natural'Min (A'Length (1), A'Length (2));
     begin
!       return R : Vector (A'First (1) .. A'First (1) + (N - 1))
!         with Relaxed_Initialization
!       do
           for J in 0 .. N - 1 loop
              R (R'First + J) := A (A'First (1) + J, A'First (2) + J);
+ 
+             pragma Loop_Invariant
+               (for all JJ in R'First .. R'First + J => R (JJ)'Initialized);
           end loop;
        end return;
     end Diagonal;
*************** package body System.Generic_Array_Operat
*** 103,109 ****
          (M      : in out Matrix;
           Target : Integer;
           Source : Integer;
!          Factor : Scalar);
        --  Elementary row operation that subtracts Factor * M (Source, <>) from
        --  M (Target, <>)
  
--- 134,143 ----
          (M      : in out Matrix;
           Target : Integer;
           Source : Integer;
!          Factor : Scalar)
!       with
!         Pre => Target in M'Range (1)
!           and then Source in M'Range (1);
        --  Elementary row operation that subtracts Factor * M (Source, <>) from
        --  M (Target, <>)
  
*************** package body System.Generic_Array_Operat
*** 131,136 ****
--- 165,173 ----
  
     begin
        Do_Rows : for Row in reverse M'Range (1) loop
+ 
+          pragma Loop_Invariant (Max_Col <= M'Last (2));
+ 
           Find_Non_Zero : for Col in reverse M'First (2) .. Max_Col loop
              if Is_Non_Zero (M (Row, Col)) then
  
*************** package body System.Generic_Array_Operat
*** 144,155 ****
                    --  equals Integer'First, which is true for aggregates
                    --  without explicit bounds..
  
!                   J : Integer := M'First (1);
  
                 begin
                    while J < Row loop
!                      Sub_Row (N, J, Row, (M (J, Col) / M (Row, Col)));
!                      Sub_Row (M, J, Row, (M (J, Col) / M (Row, Col)));
                       J := J + 1;
                    end loop;
                 end;
--- 181,195 ----
                    --  equals Integer'First, which is true for aggregates
                    --  without explicit bounds..
  
!                   J  : Integer := M'First (1);
!                   NZ : constant Scalar := M (Row, Col);
  
                 begin
                    while J < Row loop
!                      pragma Loop_Invariant (J in M'Range (1));
! 
!                      Sub_Row (N, J, Row, (M (J, Col) / NZ));
!                      Sub_Row (M, J, Row, (M (J, Col) / NZ));
                       J := J + 1;
                    end loop;
                 end;
*************** package body System.Generic_Array_Operat
*** 189,207 ****
          (M      : in out Matrix;
           Target : Integer;
           Source : Integer;
!          Factor : Scalar);
        --  Subtrace Factor * M (Source, <>) from M (Target, <>)
  
        procedure Divide_Row
          (M, N  : in out Matrix;
           Row   : Integer;
!          Scale : Scalar);
        --  Divide M (Row) and N (Row) by Scale, and update Det
  
        procedure Switch_Row
          (M, N  : in out Matrix;
           Row_1 : Integer;
!          Row_2 : Integer);
        --  Exchange M (Row_1) and N (Row_1) with M (Row_2) and N (Row_2),
        --  negating Det in the process.
  
--- 229,266 ----
          (M      : in out Matrix;
           Target : Integer;
           Source : Integer;
!          Factor : Scalar)
!       with
!         Pre => Target in M'Range (1)
!           and then Source in M'Range (1);
        --  Subtrace Factor * M (Source, <>) from M (Target, <>)
  
        procedure Divide_Row
          (M, N  : in out Matrix;
           Row   : Integer;
!          Scale : Scalar)
!       with
!         Pre => Row in M'Range (1)
!           and then M'First (1) = N'First (1)
!           and then M'Last (1) = N'Last (1)
!           and then Scale /= Zero;
        --  Divide M (Row) and N (Row) by Scale, and update Det
  
        procedure Switch_Row
          (M, N  : in out Matrix;
           Row_1 : Integer;
!          Row_2 : Integer)
!       with
!         Pre  => Row_1 in M'Range (1)
!           and then Row_2 in M'Range (1)
!           and then M'First (1) = N'First (1)
!           and then M'Last (1) = N'Last (1),
!         Post => (for all J in M'Range (2) =>
!                    M (Row_1, J) = M'Old (Row_2, J)
!                      and then M (Row_2, J) = M'Old (Row_1, J))
!           and then (for all J in N'Range (2) =>
!                       N (Row_1, J) = N'Old (Row_2, J)
!                         and then N (Row_2, J) = N'Old (Row_1, J));
        --  Exchange M (Row_1) and N (Row_1) with M (Row_2) and N (Row_2),
        --  negating Det in the process.
  
*************** package body System.Generic_Array_Operat
*** 238,245 ****
           end loop;
  
           for J in N'Range (2) loop
!             N (Row - M'First (1) + N'First (1), J) :=
!               N (Row - M'First (1) + N'First (1), J) / Scale;
              pragma Annotate
                (CodePeer, False_Positive, "divide by zero", "Scale /= 0");
           end loop;
--- 297,303 ----
           end loop;
  
           for J in N'Range (2) loop
!             N (Row, J) := N (Row, J) / Scale;
              pragma Annotate
                (CodePeer, False_Positive, "divide by zero", "Scale /= 0");
           end loop;
*************** package body System.Generic_Array_Operat
*** 254,260 ****
           Row_1 : Integer;
           Row_2 : Integer)
        is
!          procedure Swap (X, Y : in out Scalar);
           --  Exchange the values of X and Y
  
           ----------
--- 312,320 ----
           Row_1 : Integer;
           Row_2 : Integer)
        is
!          procedure Swap (X, Y : in out Scalar)
!          with
!            Post => X = Y'Old and then Y = X'Old;
           --  Exchange the values of X and Y
  
           ----------
*************** package body System.Generic_Array_Operat
*** 276,286 ****
  
              for J in M'Range (2) loop
                 Swap (M (Row_1, J), M (Row_2, J));
              end loop;
  
              for J in N'Range (2) loop
!                Swap (N (Row_1 - M'First (1) + N'First (1), J),
!                      N (Row_2 - M'First (1) + N'First (1), J));
              end loop;
           end if;
        end Switch_Row;
--- 336,363 ----
  
              for J in M'Range (2) loop
                 Swap (M (Row_1, J), M (Row_2, J));
+                pragma Annotate
+                  (GNATprove, False_Positive,
+                   "formal parameters ""X"" and ""Y"" might be aliased",
+                   "Row_1 /= Row_2");
+ 
+                pragma Loop_Invariant
+                  (for all JJ in M'First (2) .. J =>
+                     M (Row_1, JJ) = M'Loop_Entry (Row_2, JJ)
+                       and then M (Row_2, JJ) = M'Loop_Entry (Row_1, JJ));
              end loop;
  
              for J in N'Range (2) loop
!                Swap (N (Row_1, J), N (Row_2, J));
!                pragma Annotate
!                  (GNATprove, False_Positive,
!                   "formal parameters ""X"" and ""Y"" might be aliased",
!                   "Row_1 /= Row_2");
! 
!                pragma Loop_Invariant
!                  (for all JJ in N'First (2) .. J =>
!                     N (Row_1, JJ) = N'Loop_Entry (Row_2, JJ)
!                       and then N (Row_2, JJ) = N'Loop_Entry (Row_1, JJ));
              end loop;
           end if;
        end Switch_Row;
*************** package body System.Generic_Array_Operat
*** 295,300 ****
--- 372,379 ----
        Det := One;
  
        for J in M'Range (2) loop
+          pragma Loop_Invariant (Row >= M'First (1));
+ 
           declare
              Max_Row : Integer := Row;
              Max_Abs : Real'Base := 0.0;
*************** package body System.Generic_Array_Operat
*** 303,308 ****
--- 382,391 ----
              --  Find best pivot in column J, starting in row Row
  
              for K in Row .. M'Last (1) loop
+                pragma Loop_Invariant (Max_Row in M'Range (1));
+                pragma Loop_Invariant
+                  (if Max_Abs /= 0.0 then Max_Abs = abs M (Max_Row, J));
+ 
                 declare
                    New_Abs : constant Real'Base := abs M (K, J);
                 begin
*************** package body System.Generic_Array_Operat
*** 316,321 ****
--- 399,406 ----
              if Max_Abs > 0.0 then
                 Switch_Row (M, N, Row, Max_Row);
  
+                pragma Assert (Max_Abs = abs M (Row, J));
+ 
                 --  The temporaries below are necessary to force a copy of the
                 --  value and avoid improper aliasing.
  
*************** package body System.Generic_Array_Operat
*** 325,331 ****
                    Divide_Row (M, N, Row, Scale);
                 end;
  
!                for U in Row + 1 .. M'Last (1) loop
                    declare
                       Factor : constant Scalar := M (U, J);
                    begin
--- 410,416 ----
                    Divide_Row (M, N, Row, Scale);
                 end;
  
!                for U in Row .. M'Last (1) when U /= Row loop
                    declare
                       Factor : constant Scalar := M (U, J);
                    begin
*************** package body System.Generic_Array_Operat
*** 379,385 ****
--- 464,474 ----
  
     begin
        for J in X'Range loop
+          pragma Loop_Invariant (Sum >= 0.0);
           Sum := Sum + Result_Real'Base (abs X (J))**2;
+          pragma Annotate
+            (GNATprove, Intentional, "float overflow check might fail",
+             "Intermediate computation might overflow in L2_Norm");
        end loop;
  
        return Sqrt (Sum);
*************** package body System.Generic_Array_Operat
*** 391,401 ****
  
     function Matrix_Elementwise_Operation (X : X_Matrix) return Result_Matrix is
     begin
!       return R : Result_Matrix (X'Range (1), X'Range (2)) do
           for J in R'Range (1) loop
              for K in R'Range (2) loop
                 R (J, K) := Operation (X (J, K));
              end loop;
           end loop;
        end return;
     end Matrix_Elementwise_Operation;
--- 480,504 ----
  
     function Matrix_Elementwise_Operation (X : X_Matrix) return Result_Matrix is
     begin
!       return R : Result_Matrix (X'Range (1), X'Range (2))
!         with Relaxed_Initialization
!       do
           for J in R'Range (1) loop
              for K in R'Range (2) loop
                 R (J, K) := Operation (X (J, K));
+ 
+                pragma Loop_Invariant
+                  (for all JJ in R'First (1) .. J when JJ /= J =>
+                     (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+                pragma Loop_Invariant
+                  (for all KK in R'First (2) .. K => R (J, KK)'Initialized);
              end loop;
+ 
+             pragma Loop_Invariant
+               (for all JJ in R'First (1) .. J when JJ /= J =>
+                  (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+             pragma Loop_Invariant
+               (for all KK in R'Range (2) => R (J, KK)'Initialized);
           end loop;
        end return;
     end Matrix_Elementwise_Operation;
*************** package body System.Generic_Array_Operat
*** 422,428 ****
        Right : Right_Matrix) return Result_Matrix
     is
     begin
!       return R : Result_Matrix (Left'Range (1), Left'Range (2)) do
           if Left'Length (1) /= Right'Length (1)
                or else
              Left'Length (2) /= Right'Length (2)
--- 525,533 ----
        Right : Right_Matrix) return Result_Matrix
     is
     begin
!       return R : Result_Matrix (Left'Range (1), Left'Range (2))
!         with Relaxed_Initialization
!       do
           if Left'Length (1) /= Right'Length (1)
                or else
              Left'Length (2) /= Right'Length (2)
*************** package body System.Generic_Array_Operat
*** 439,445 ****
--- 544,562 ----
                      Right
                        (J - R'First (1) + Right'First (1),
                         K - R'First (2) + Right'First (2)));
+ 
+                pragma Loop_Invariant
+                  (for all JJ in R'First (1) .. J when JJ /= J =>
+                     (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+                pragma Loop_Invariant
+                  (for all KK in R'First (2) .. K => R (J, KK)'Initialized);
              end loop;
+ 
+             pragma Loop_Invariant
+               (for all JJ in R'First (1) .. J when JJ /= J =>
+                  (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+             pragma Loop_Invariant
+               (for all KK in R'Range (2) => R (J, KK)'Initialized);
           end loop;
        end return;
     end Matrix_Matrix_Elementwise_Operation;
*************** package body System.Generic_Array_Operat
*** 454,460 ****
        Z : Z_Scalar) return Result_Matrix
     is
     begin
!       return R : Result_Matrix (X'Range (1), X'Range (2)) do
           if X'Length (1) /= Y'Length (1)
                or else
              X'Length (2) /= Y'Length (2)
--- 571,579 ----
        Z : Z_Scalar) return Result_Matrix
     is
     begin
!       return R : Result_Matrix (X'Range (1), X'Range (2))
!         with Relaxed_Initialization
!       do
           if X'Length (1) /= Y'Length (1)
                or else
              X'Length (2) /= Y'Length (2)
*************** package body System.Generic_Array_Operat
*** 471,477 ****
--- 590,608 ----
                      Y (J - R'First (1) + Y'First (1),
                         K - R'First (2) + Y'First (2)),
                      Z);
+ 
+                pragma Loop_Invariant
+                  (for all JJ in R'First (1) .. J when JJ /= J =>
+                     (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+                pragma Loop_Invariant
+                  (for all KK in R'First (2) .. K => R (J, KK)'Initialized);
              end loop;
+ 
+             pragma Loop_Invariant
+               (for all JJ in R'First (1) .. J when JJ /= J =>
+                  (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+             pragma Loop_Invariant
+               (for all KK in R'Range (2) => R (J, KK)'Initialized);
           end loop;
        end return;
     end Matrix_Matrix_Scalar_Elementwise_Operation;
*************** package body System.Generic_Array_Operat
*** 527,537 ****
        Right : Right_Scalar) return Result_Matrix
     is
     begin
!       return R : Result_Matrix (Left'Range (1), Left'Range (2)) do
           for J in R'Range (1) loop
              for K in R'Range (2) loop
                 R (J, K) := Operation (Left (J, K), Right);
              end loop;
           end loop;
        end return;
     end Matrix_Scalar_Elementwise_Operation;
--- 658,682 ----
        Right : Right_Scalar) return Result_Matrix
     is
     begin
!       return R : Result_Matrix (Left'Range (1), Left'Range (2))
!         with Relaxed_Initialization
!       do
           for J in R'Range (1) loop
              for K in R'Range (2) loop
                 R (J, K) := Operation (Left (J, K), Right);
+ 
+                pragma Loop_Invariant
+                  (for all JJ in R'First (1) .. J when JJ /= J =>
+                     (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+                pragma Loop_Invariant
+                  (for all KK in R'First (2) .. K => R (J, KK)'Initialized);
              end loop;
+ 
+             pragma Loop_Invariant
+               (for all JJ in R'First (1) .. J when JJ /= J =>
+                  (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+             pragma Loop_Invariant
+               (for all KK in R'Range (2) => R (J, KK)'Initialized);
           end loop;
        end return;
     end Matrix_Scalar_Elementwise_Operation;
*************** package body System.Generic_Array_Operat
*** 561,571 ****
        Right : Right_Matrix) return Result_Matrix
     is
     begin
!       return R : Result_Matrix (Right'Range (1), Right'Range (2)) do
           for J in R'Range (1) loop
              for K in R'Range (2) loop
                 R (J, K) := Operation (Left, Right (J, K));
              end loop;
           end loop;
        end return;
     end Scalar_Matrix_Elementwise_Operation;
--- 706,730 ----
        Right : Right_Matrix) return Result_Matrix
     is
     begin
!       return R : Result_Matrix (Right'Range (1), Right'Range (2))
!         with Relaxed_Initialization
!       do
           for J in R'Range (1) loop
              for K in R'Range (2) loop
                 R (J, K) := Operation (Left, Right (J, K));
+ 
+                pragma Loop_Invariant
+                  (for all JJ in R'First (1) .. J when JJ /= J =>
+                     (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+                pragma Loop_Invariant
+                  (for all KK in R'First (2) .. K => R (J, KK)'Initialized);
              end loop;
+ 
+             pragma Loop_Invariant
+               (for all JJ in R'First (1) .. J when JJ /= J =>
+                  (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+             pragma Loop_Invariant
+               (for all KK in R'Range (2) => R (J, KK)'Initialized);
           end loop;
        end return;
     end Scalar_Matrix_Elementwise_Operation;
*************** package body System.Generic_Array_Operat
*** 590,596 ****
     -- Sqrt --
     ----------
  
!    function Sqrt (X : Real'Base) return Real'Base is
        Root, Next : Real'Base;
  
     begin
--- 749,757 ----
     -- Sqrt --
     ----------
  
!    function Sqrt (X : Real'Base) return Real'Base
!      with SPARK_Mode => Off  --  Not in SPARK due to use of Real'Exponent
!    is
        Root, Next : Real'Base;
  
     begin
*************** package body System.Generic_Array_Operat
*** 651,657 ****
        Right : Right_Matrix) return Result_Matrix
     is
     begin
!       return R : Result_Matrix (Left'Range (1), Right'Range (2)) do
           if Left'Length (2) /= Right'Length (1) then
              raise Constraint_Error with
                "incompatible dimensions in matrix multiplication";
--- 812,820 ----
        Right : Right_Matrix) return Result_Matrix
     is
     begin
!       return R : Result_Matrix (Left'Range (1), Right'Range (2))
!         with Relaxed_Initialization
!       do
           if Left'Length (2) /= Right'Length (1) then
              raise Constraint_Error with
                "incompatible dimensions in matrix multiplication";
*************** package body System.Generic_Array_Operat
*** 671,677 ****
--- 834,852 ----
  
                    R (J, K) := S;
                 end;
+ 
+                pragma Loop_Invariant
+                  (for all JJ in R'First (1) .. J when JJ /= J =>
+                     (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+                pragma Loop_Invariant
+                  (for all KK in R'First (2) .. K => R (J, KK)'Initialized);
              end loop;
+ 
+             pragma Loop_Invariant
+               (for all JJ in R'First (1) .. J when JJ /= J =>
+                  (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+             pragma Loop_Invariant
+               (for all KK in R'Range (2) => R (J, KK)'Initialized);
           end loop;
        end return;
     end  Matrix_Matrix_Product;
*************** package body System.Generic_Array_Operat
*** 681,690 ****
     ----------------------------
  
     function Matrix_Vector_Solution (A : Matrix; X : Vector) return Vector is
        N   : constant Natural := A'Length (1);
        MA  : Matrix := A;
!       MX  : Matrix (A'Range (1), 1 .. 1);
!       R   : Vector (A'Range (2));
        Det : Scalar;
  
     begin
--- 856,876 ----
     ----------------------------
  
     function Matrix_Vector_Solution (A : Matrix; X : Vector) return Vector is
+ 
+       procedure Ignore (M : Matrix)
+       with
+         Ghost,
+         Depends => (null => M);
+ 
+       procedure Ignore (M : Matrix) is null;
+       --  Ghost procedure to document that the value of argument M is ignored,
+       --  which prevents a warning being issued about the value not being used
+       --  in the rest of the code.
+ 
        N   : constant Natural := A'Length (1);
        MA  : Matrix := A;
!       MX  : Matrix (A'Range (1), 1 .. 1) with Relaxed_Initialization;
!       R   : Vector (A'Range (2)) with Relaxed_Initialization;
        Det : Scalar;
  
     begin
*************** package body System.Generic_Array_Operat
*** 698,715 ****
--- 884,912 ----
  
        for J in 0 .. MX'Length (1) - 1 loop
           MX (MX'First (1) + J, 1) := X (X'First + J);
+ 
+          pragma Loop_Invariant
+            (for all JJ in MX'First (1) .. MX'First (1) + J =>
+               MX (JJ, 1)'Initialized);
        end loop;
  
        Forward_Eliminate (MA, MX, Det);
  
        if Det = Zero then
           raise Constraint_Error with "matrix is singular";
+          pragma Annotate
+            (GNATprove, Intentional, "exception might be raised",
+             "An exception should be raised on a singular matrix");
        end if;
  
        Back_Substitute (MA, MX);
+       Ignore (MA);
  
        for J in 0 .. R'Length - 1 loop
           R (R'First + J) := MX (MX'First (1) + J, 1);
+ 
+          pragma Loop_Invariant
+            (for all JJ in R'First .. R'First + J => R (JJ)'Initialized);
        end loop;
  
        return R;
*************** package body System.Generic_Array_Operat
*** 720,728 ****
     ----------------------------
  
     function Matrix_Matrix_Solution (A, X : Matrix) return Matrix is
        N   : constant Natural := A'Length (1);
!       MA  : Matrix (A'Range (2), A'Range (2));
!       MB  : Matrix (A'Range (2), X'Range (2));
        Det : Scalar;
  
     begin
--- 917,936 ----
     ----------------------------
  
     function Matrix_Matrix_Solution (A, X : Matrix) return Matrix is
+ 
+       procedure Ignore (M : Matrix)
+       with
+         Ghost,
+         Depends => (null => M);
+ 
+       procedure Ignore (M : Matrix) is null;
+       --  Ghost procedure to document that the value of argument M is ignored,
+       --  which prevents a warning being issued about the value not being used
+       --  in the rest of the code.
+ 
        N   : constant Natural := A'Length (1);
!       MA  : Matrix (A'Range (2), A'Range (2)) with Relaxed_Initialization;
!       MB  : Matrix (A'Range (2), X'Range (2)) with Relaxed_Initialization;
        Det : Scalar;
  
     begin
*************** package body System.Generic_Array_Operat
*** 737,756 ****
--- 945,997 ----
        for J in 0 .. A'Length (1) - 1 loop
           for K in MA'Range (2) loop
              MA (MA'First (1) + J, K) := A (A'First (1) + J, K);
+ 
+             pragma Loop_Invariant
+               (for all JJ in MA'First (1) .. MA'First (1) + J
+                  when JJ /= MA'First (1) + J
+                =>
+                  (for all KK in MA'Range (2) =>
+                     MA (JJ, KK)'Initialized));
+             pragma Loop_Invariant
+               (for all KK in MA'First (2) .. K =>
+                  MA (MA'First (1) + J, KK)'Initialized);
           end loop;
  
           for K in MB'Range (2) loop
              MB (MB'First (1) + J, K) := X (X'First (1) + J, K);
+ 
+             pragma Loop_Invariant
+               (for all JJ in MB'First (1) .. MB'First (1) + J
+                  when JJ /= MB'First (1) + J
+                =>
+                  (for all KK in MB'Range (2) =>
+                     MB (JJ, KK)'Initialized));
+             pragma Loop_Invariant
+               (for all KK in MB'First (2) .. K =>
+                  MB (MB'First (1) + J, KK)'Initialized);
           end loop;
+ 
+          pragma Loop_Invariant
+            (for all JJ in MA'First (1) .. MA'First (1) + J =>
+               (for all KK in MA'Range (2) =>
+                  MA (JJ, KK)'Initialized));
+          pragma Loop_Invariant
+            (for all JJ in MB'First (1) .. MB'First (1) + J =>
+               (for all KK in MB'Range (2) =>
+                  MB (JJ, KK)'Initialized));
        end loop;
  
        Forward_Eliminate (MA, MB, Det);
  
        if Det = Zero then
           raise Constraint_Error with "matrix is singular";
+          pragma Annotate
+            (GNATprove, Intentional, "exception might be raised",
+             "An exception should be raised on a singular matrix");
        end if;
  
        Back_Substitute (MA, MB);
+       Ignore (MA);
  
        return MB;
     end Matrix_Matrix_Solution;
*************** package body System.Generic_Array_Operat
*** 795,805 ****
        Right : Right_Vector) return Matrix
     is
     begin
!       return R : Matrix (Left'Range, Right'Range) do
           for J in R'Range (1) loop
              for K in R'Range (2) loop
                 R (J, K) := Left (J) * Right (K);
              end loop;
           end loop;
        end return;
     end Outer_Product;
--- 1036,1060 ----
        Right : Right_Vector) return Matrix
     is
     begin
!       return R : Matrix (Left'Range, Right'Range)
!         with Relaxed_Initialization
!       do
           for J in R'Range (1) loop
              for K in R'Range (2) loop
                 R (J, K) := Left (J) * Right (K);
+ 
+                pragma Loop_Invariant
+                  (for all JJ in R'First (1) .. J when JJ /= J =>
+                     (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+                pragma Loop_Invariant
+                  (for all KK in R'First (2) .. K => R (J, KK)'Initialized);
              end loop;
+ 
+             pragma Loop_Invariant
+               (for all JJ in R'First (1) .. J when JJ /= J =>
+                  (for all KK in R'Range (2) => R (JJ, KK)'Initialized));
+             pragma Loop_Invariant
+               (for all KK in R'Range (2) => R (J, KK)'Initialized);
           end loop;
        end return;
     end Outer_Product;
*************** package body System.Generic_Array_Operat
*** 828,834 ****
--- 1083,1099 ----
           for K in R'Range (2) loop
              R (J, K) := A (K - R'First (2) + A'First (1),
                             J - R'First (1) + A'First (2));
+ 
+             pragma Loop_Invariant
+               (for all JJ in R'First (1) .. J when JJ /= J =>
+                 (for all K in R'Range (2) => R (JJ, K)'Initialized));
+             pragma Loop_Invariant
+               (for all KK in R'First (2) .. K => R (J, KK)'Initialized);
           end loop;
+ 
+          pragma Loop_Invariant
+            (for all JJ in R'First (1) .. J =>
+              (for all K in R'Range (2) => R (JJ, K)'Initialized));
        end loop;
     end Transpose;
  
*************** package body System.Generic_Array_Operat
*** 883,889 ****
        return R : Matrix (First_1 .. Check_Unit_Last (First_1, Order, First_1),
                           First_2 .. Check_Unit_Last (First_2, Order, First_2))
        do
!          R := (others => (others => Zero));
  
           for J in 0 .. Order - 1 loop
              R (First_1 + J, First_2 + J) := One;
--- 1148,1154 ----
        return R : Matrix (First_1 .. Check_Unit_Last (First_1, Order, First_1),
                           First_2 .. Check_Unit_Last (First_2, Order, First_2))
        do
!          R := [others => [others => Zero]];
  
           for J in 0 .. Order - 1 loop
              R (First_1 + J, First_2 + J) := One;
*************** package body System.Generic_Array_Operat
*** 902,908 ****
     is
     begin
        return R : Vector (First .. Check_Unit_Last (Index, Order, First)) do
!          R := (others => Zero);
           R (Index) := One;
        end return;
     end Unit_Vector;
--- 1167,1173 ----
     is
     begin
        return R : Vector (First .. Check_Unit_Last (Index, Order, First)) do
!          R := [others => Zero];
           R (Index) := One;
        end return;
     end Unit_Vector;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-gearop.ads gcc-12.1.0/gcc/ada/libgnat/s-gearop.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-gearop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-gearop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2006-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2006-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! package System.Generic_Array_Operations is
! pragma Pure (Generic_Array_Operations);
  
     ---------------------
     -- Back_Substitute --
--- 29,57 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Proof of this unit is only done up to silver level, i.e. absence of runtime
! --  errors, and only regarding runtime checks that depend on the generic part,
! --  ignoring runtime checks related to formal generic subprogram parameters
! --  in instantiations. For example, contracts do not protect against scalar
! --  overflows in arithmetic operations passed on as formal generic subprogram
! --  parameters.
! 
! --  Preconditions in this unit are meant for analysis only, not for run-time
! --  checking, so that the expected exceptions are raised. This is enforced
! --  by setting the corresponding assertion policy to Ignore. Postconditions
! --  and contract cases should not be executed at runtime as well, in order
! --  not to slow down the execution of these functions.
! 
! pragma Assertion_Policy (Pre            => Ignore,
!                          Post           => Ignore,
!                          Contract_Cases => Ignore,
!                          Ghost          => Ignore);
! 
! package System.Generic_Array_Operations
!   with SPARK_Mode
! is
! 
!    pragma Pure (Generic_Array_Operations);
  
     ---------------------
     -- Back_Substitute --
*************** pragma Pure (Generic_Array_Operations);
*** 43,49 ****
        with function "*" (Left, Right : Scalar) return Scalar is <>;
        with function "/" (Left, Right : Scalar) return Scalar is <>;
        with function Is_Non_Zero (X : Scalar) return Boolean is <>;
!    procedure Back_Substitute (M, N : in out Matrix);
  
     --------------
     -- Diagonal --
--- 64,73 ----
        with function "*" (Left, Right : Scalar) return Scalar is <>;
        with function "/" (Left, Right : Scalar) return Scalar is <>;
        with function Is_Non_Zero (X : Scalar) return Boolean is <>;
!    procedure Back_Substitute (M, N : in out Matrix)
!    with
!      Pre => M'First (1) = N'First (1)
!        and then M'Last (1) = N'Last (1);
  
     --------------
     -- Diagonal --
*************** pragma Pure (Generic_Array_Operations);
*** 53,59 ****
        type Scalar is private;
        type Vector is array (Integer range <>) of Scalar;
        type Matrix is array (Integer range <>, Integer range <>) of Scalar;
!    function Diagonal (A : Matrix) return Vector;
  
     -----------------------
     -- Forward_Eliminate --
--- 77,90 ----
        type Scalar is private;
        type Vector is array (Integer range <>) of Scalar;
        type Matrix is array (Integer range <>, Integer range <>) of Scalar;
!    function Diagonal (A : Matrix) return Vector
!    with
!      Pre => A'First (1) < A'Last (1)
!        and then A'First (2) < A'Last (2)
!        and then (if A'First (1) <= 0 then
!                    A'Last (1) < Integer'Last + A'First (1))
!        and then (if A'First (2) <= 0 then
!                    A'Last (2) < Integer'Last + A'First (2));
  
     -----------------------
     -- Forward_Eliminate --
*************** pragma Pure (Generic_Array_Operations);
*** 76,82 ****
     procedure Forward_Eliminate
       (M   : in out Matrix;
        N   : in out Matrix;
!       Det : out Scalar);
  
     --------------------------
     -- Square_Matrix_Length --
--- 107,116 ----
     procedure Forward_Eliminate
       (M   : in out Matrix;
        N   : in out Matrix;
!       Det : out Scalar)
!    with
!      Pre => M'First (1) = N'First (1)
!        and then M'Last (1) = N'Last (1);
  
     --------------------------
     -- Square_Matrix_Length --
*************** pragma Pure (Generic_Array_Operations);
*** 85,92 ****
     generic
        type Scalar is private;
        type Matrix is array (Integer range <>, Integer range <>) of Scalar;
!    function Square_Matrix_Length (A : Matrix) return Natural;
!    --  If A is non-square, raise Constraint_Error,  else return its dimension
  
     ----------------------------------
     -- Vector_Elementwise_Operation --
--- 119,132 ----
     generic
        type Scalar is private;
        type Matrix is array (Integer range <>, Integer range <>) of Scalar;
!    function Square_Matrix_Length (A : Matrix) return Natural
!    with
!      Pre => (if A'First (1) <= 0 then
!                A'Last (1) < Integer'Last + A'First (1))
!        and then (if A'First (2) <= 0 then
!                    A'Last (2) < Integer'Last + A'First (2))
!        and then A'Length (1) = A'Length (2);
!    --  If A is non-square, raise Constraint_Error, else return its dimension
  
     ----------------------------------
     -- Vector_Elementwise_Operation --
*************** pragma Pure (Generic_Array_Operations);
*** 129,135 ****
                Right : Right_Scalar) return Result_Scalar;
     function Vector_Vector_Elementwise_Operation
       (Left  : Left_Vector;
!       Right : Right_Vector) return Result_Vector;
  
     ------------------------------------------------
     -- Vector_Vector_Scalar_Elementwise_Operation --
--- 169,181 ----
                Right : Right_Scalar) return Result_Scalar;
     function Vector_Vector_Elementwise_Operation
       (Left  : Left_Vector;
!       Right : Right_Vector) return Result_Vector
!    with
!      Pre => (if Left'First <= 0 then
!                Left'Last < Integer'Last + Left'First)
!        and then (if Right'First <= 0 then
!                    Right'Last < Integer'Last + Right'First)
!        and then Left'Length = Right'Length;
  
     ------------------------------------------------
     -- Vector_Vector_Scalar_Elementwise_Operation --
*************** pragma Pure (Generic_Array_Operations);
*** 150,156 ****
     function Vector_Vector_Scalar_Elementwise_Operation
       (X : X_Vector;
        Y : Y_Vector;
!       Z : Z_Scalar) return Result_Vector;
  
     -----------------------------------------
     -- Matrix_Matrix_Elementwise_Operation --
--- 196,206 ----
     function Vector_Vector_Scalar_Elementwise_Operation
       (X : X_Vector;
        Y : Y_Vector;
!       Z : Z_Scalar) return Result_Vector
!    with
!      Pre => (if X'First <= 0 then X'Last < Integer'Last + X'First)
!        and then (if Y'First <= 0 then Y'Last < Integer'Last + Y'First)
!        and then X'Length = Y'Length;
  
     -----------------------------------------
     -- Matrix_Matrix_Elementwise_Operation --
*************** pragma Pure (Generic_Array_Operations);
*** 171,177 ****
                Right : Right_Scalar) return Result_Scalar;
     function Matrix_Matrix_Elementwise_Operation
       (Left  : Left_Matrix;
!       Right : Right_Matrix) return Result_Matrix;
  
     ------------------------------------------------
     -- Matrix_Matrix_Scalar_Elementwise_Operation --
--- 221,238 ----
                Right : Right_Scalar) return Result_Scalar;
     function Matrix_Matrix_Elementwise_Operation
       (Left  : Left_Matrix;
!       Right : Right_Matrix) return Result_Matrix
!    with
!      Pre => (if Left'First (1) <= 0 then
!                Left'Last (1) < Integer'Last + Left'First (1))
!        and then (if Right'First (1) <= 0 then
!                    Right'Last (1) < Integer'Last + Right'First (1))
!        and then Left'Length (1) = Right'Length (1)
!        and then (if Left'First (2) <= 0 then
!                    Left'Last (2) < Integer'Last + Left'First (2))
!        and then (if Right'First (2) <= 0 then
!                    Right'Last (2) < Integer'Last + Right'First (2))
!        and then Left'Length (2) = Right'Length (2);
  
     ------------------------------------------------
     -- Matrix_Matrix_Scalar_Elementwise_Operation --
*************** pragma Pure (Generic_Array_Operations);
*** 193,199 ****
     function Matrix_Matrix_Scalar_Elementwise_Operation
       (X : X_Matrix;
        Y : Y_Matrix;
!       Z : Z_Scalar) return Result_Matrix;
  
     -----------------------------------------
     -- Vector_Scalar_Elementwise_Operation --
--- 254,271 ----
     function Matrix_Matrix_Scalar_Elementwise_Operation
       (X : X_Matrix;
        Y : Y_Matrix;
!       Z : Z_Scalar) return Result_Matrix
!    with
!      Pre => (if X'First (1) <= 0 then
!                X'Last (1) < Integer'Last + X'First (1))
!        and then (if Y'First (1) <= 0 then
!                    Y'Last (1) < Integer'Last + Y'First (1))
!        and then X'Length (1) = Y'Length (1)
!        and then (if X'First (2) <= 0 then
!                    X'Last (2) < Integer'Last + X'First (2))
!        and then (if Y'First (2) <= 0 then
!                    Y'Last (2) < Integer'Last + Y'First (2))
!        and then X'Length (2) = Y'Length (2);
  
     -----------------------------------------
     -- Vector_Scalar_Elementwise_Operation --
*************** pragma Pure (Generic_Array_Operations);
*** 286,292 ****
                Right : Result_Scalar) return Result_Scalar is <>;
     function Inner_Product
       (Left  : Left_Vector;
!       Right : Right_Vector) return Result_Scalar;
  
     -------------
     -- L2_Norm --
--- 358,370 ----
                Right : Result_Scalar) return Result_Scalar is <>;
     function Inner_Product
       (Left  : Left_Vector;
!       Right : Right_Vector) return Result_Scalar
!    with
!      Pre => (if Left'First <= 0 then
!                Left'Last < Integer'Last + Left'First)
!        and then (if Right'First <= 0 then
!                    Right'Last < Integer'Last + Right'First)
!        and then Left'Length = Right'Length;
  
     -------------
     -- L2_Norm --
*************** pragma Pure (Generic_Array_Operations);
*** 340,346 ****
                Right : Result_Scalar) return Result_Scalar is <>;
     function Matrix_Vector_Product
       (Left  : Matrix;
!       Right : Right_Vector) return Result_Vector;
  
     ---------------------------
     -- Vector_Matrix_Product --
--- 418,430 ----
                Right : Result_Scalar) return Result_Scalar is <>;
     function Matrix_Vector_Product
       (Left  : Matrix;
!       Right : Right_Vector) return Result_Vector
!    with
!      Pre => (if Left'First (2) <= 0 then
!                Left'Last (2) < Integer'Last + Left'First (2))
!        and then (if Right'First <= 0 then
!                    Right'Last < Integer'Last + Right'First)
!        and then Left'Length (2) = Right'Length;
  
     ---------------------------
     -- Vector_Matrix_Product --
*************** pragma Pure (Generic_Array_Operations);
*** 363,369 ****
                Right : Result_Scalar) return Result_Scalar is <>;
     function Vector_Matrix_Product
       (Left  : Left_Vector;
!       Right : Matrix) return Result_Vector;
  
     ---------------------------
     -- Matrix_Matrix_Product --
--- 447,459 ----
                Right : Result_Scalar) return Result_Scalar is <>;
     function Vector_Matrix_Product
       (Left  : Left_Vector;
!       Right : Matrix) return Result_Vector
!    with
!      Pre => (if Left'First <= 0 then
!                Left'Last < Integer'Last + Left'First)
!        and then (if Right'First (1) <= 0 then
!                    Right'Last (1) < Integer'Last + Right'First (1))
!        and then Left'Length = Right'Length (1);
  
     ---------------------------
     -- Matrix_Matrix_Product --
*************** pragma Pure (Generic_Array_Operations);
*** 388,394 ****
                Right : Result_Scalar) return Result_Scalar is <>;
     function Matrix_Matrix_Product
       (Left  : Left_Matrix;
!       Right : Right_Matrix) return Result_Matrix;
  
     ----------------------------
     -- Matrix_Vector_Solution --
--- 478,490 ----
                Right : Result_Scalar) return Result_Scalar is <>;
     function Matrix_Matrix_Product
       (Left  : Left_Matrix;
!       Right : Right_Matrix) return Result_Matrix
!    with
!      Pre => (if Left'First (2) <= 0 then
!                Left'Last (2) < Integer'Last + Left'First (2))
!        and then (if Right'First (1) <= 0 then
!                    Right'Last (1) < Integer'Last + Right'First (1))
!        and then Left'Length (2) = Right'Length (1);
  
     ----------------------------
     -- Matrix_Vector_Solution --
*************** pragma Pure (Generic_Array_Operations);
*** 404,410 ****
               (M   : in out Matrix;
                N   : in out Matrix;
                Det : out Scalar) is <>;
!    function Matrix_Vector_Solution (A : Matrix; X : Vector) return Vector;
  
     ----------------------------
     -- Matrix_Matrix_Solution --
--- 500,515 ----
               (M   : in out Matrix;
                N   : in out Matrix;
                Det : out Scalar) is <>;
!    function Matrix_Vector_Solution (A : Matrix; X : Vector) return Vector
!    with
!      Pre => (if A'First (1) <= 0 then
!                A'Last (1) < Integer'Last + A'First (1))
!        and then (if A'First (2) <= 0 then
!                    A'Last (2) < Integer'Last + A'First (2))
!        and then A'Length (1) = A'Length (2)
!        and then (if X'First <= 0 then
!                    X'Last < Integer'Last + X'First)
!        and then A'Length (1) = X'Length;
  
     ----------------------------
     -- Matrix_Matrix_Solution --
*************** pragma Pure (Generic_Array_Operations);
*** 419,425 ****
               (M   : in out Matrix;
                N   : in out Matrix;
                Det : out Scalar) is <>;
!    function Matrix_Matrix_Solution (A : Matrix; X : Matrix) return Matrix;
  
     ----------
     -- Sqrt --
--- 524,539 ----
               (M   : in out Matrix;
                N   : in out Matrix;
                Det : out Scalar) is <>;
!    function Matrix_Matrix_Solution (A : Matrix; X : Matrix) return Matrix
!    with
!      Pre => (if A'First (1) <= 0 then
!                A'Last (1) < Integer'Last + A'First (1))
!        and then (if A'First (2) <= 0 then
!                    A'Last (2) < Integer'Last + A'First (2))
!        and then A'Length (1) = A'Length (2)
!        and then (if X'First (1) <= 0 then
!                    X'Last (1) < Integer'Last + X'First (1))
!        and then A'Length (1) = X'Length (1);
  
     ----------
     -- Sqrt --
*************** pragma Pure (Generic_Array_Operations);
*** 436,442 ****
     generic
        type Scalar is private;
        type Matrix is array (Integer range <>, Integer range <>) of Scalar;
!    procedure Swap_Column (A : in out Matrix; Left, Right : Integer);
  
     ---------------
     -- Transpose --
--- 550,559 ----
     generic
        type Scalar is private;
        type Matrix is array (Integer range <>, Integer range <>) of Scalar;
!    procedure Swap_Column (A : in out Matrix; Left, Right : Integer)
!    with
!      Pre => Left in A'Range (2)
!        and then Right in A'Range (2);
  
     ---------------
     -- Transpose --
*************** pragma Pure (Generic_Array_Operations);
*** 445,451 ****
     generic
        type Scalar is private;
        type Matrix is array (Integer range <>, Integer range <>) of Scalar;
!    procedure Transpose (A : Matrix; R : out Matrix);
  
     -------------------------------
     -- Update_Vector_With_Vector --
--- 562,579 ----
     generic
        type Scalar is private;
        type Matrix is array (Integer range <>, Integer range <>) of Scalar;
!    procedure Transpose (A : Matrix; R : out Matrix)
!    with
!      Relaxed_Initialization => R,
!      Pre  => A'First (1) = R'First (2)
!        and then A'Last (1) = R'Last (2)
!        and then A'First (2) = R'First (1)
!        and then A'Last (2) = R'Last (1)
!        and then (if A'First (1) < 0 then
!                    A'Last (1) <= Integer'Last + A'First (1))
!        and then (if A'First (2) < 0 then
!                    A'Last (2) <= Integer'Last + A'First (2)),
!      Post => R'Initialized;
  
     -------------------------------
     -- Update_Vector_With_Vector --
*************** pragma Pure (Generic_Array_Operations);
*** 457,463 ****
        type X_Vector is array (Integer range <>) of X_Scalar;
        type Y_Vector is array (Integer range <>) of Y_Scalar;
        with procedure Update (X : in out X_Scalar; Y : Y_Scalar);
!    procedure Update_Vector_With_Vector (X : in out X_Vector; Y : Y_Vector);
  
     -------------------------------
     -- Update_Matrix_With_Matrix --
--- 585,597 ----
        type X_Vector is array (Integer range <>) of X_Scalar;
        type Y_Vector is array (Integer range <>) of Y_Scalar;
        with procedure Update (X : in out X_Scalar; Y : Y_Scalar);
!    procedure Update_Vector_With_Vector (X : in out X_Vector; Y : Y_Vector)
!    with
!      Pre => (if X'First <= 0 then
!                X'Last < Integer'Last + X'First)
!        and then (if Y'First <= 0 then
!                    Y'Last < Integer'Last + Y'First)
!        and then X'Length = Y'Length;
  
     -------------------------------
     -- Update_Matrix_With_Matrix --
*************** pragma Pure (Generic_Array_Operations);
*** 469,475 ****
        type X_Matrix is array (Integer range <>, Integer range <>) of X_Scalar;
        type Y_Matrix is array (Integer range <>, Integer range <>) of Y_Scalar;
        with procedure Update (X : in out X_Scalar; Y : Y_Scalar);
!    procedure Update_Matrix_With_Matrix (X : in out X_Matrix; Y : Y_Matrix);
  
     -----------------
     -- Unit_Matrix --
--- 603,620 ----
        type X_Matrix is array (Integer range <>, Integer range <>) of X_Scalar;
        type Y_Matrix is array (Integer range <>, Integer range <>) of Y_Scalar;
        with procedure Update (X : in out X_Scalar; Y : Y_Scalar);
!    procedure Update_Matrix_With_Matrix (X : in out X_Matrix; Y : Y_Matrix)
!    with
!      Pre => (if X'First (1) <= 0 then
!                X'Last (1) < Integer'Last + X'First (1))
!        and then (if Y'First (1) <= 0 then
!                    Y'Last (1) < Integer'Last + Y'First (1))
!        and then X'Length (1) = Y'Length (1)
!        and then (if X'First (2) <= 0 then
!                    X'Last (2) < Integer'Last + X'First (2))
!        and then (if Y'First (2) <= 0 then
!                    Y'Last (2) < Integer'Last + Y'First (2))
!        and then X'Length (2) = Y'Length (2);
  
     -----------------
     -- Unit_Matrix --
*************** pragma Pure (Generic_Array_Operations);
*** 483,489 ****
     function Unit_Matrix
       (Order   : Positive;
        First_1 : Integer := 1;
!       First_2 : Integer := 1) return Matrix;
  
     -----------------
     -- Unit_Vector --
--- 628,637 ----
     function Unit_Matrix
       (Order   : Positive;
        First_1 : Integer := 1;
!       First_2 : Integer := 1) return Matrix
!    with
!      Pre => First_1 <= Integer'Last - Order + 1
!        and then First_2 <= Integer'Last - Order + 1;
  
     -----------------
     -- Unit_Vector --
*************** pragma Pure (Generic_Array_Operations);
*** 497,502 ****
     function Unit_Vector
       (Index : Integer;
        Order : Positive;
!       First : Integer := 1) return Vector;
  
  end System.Generic_Array_Operations;
--- 645,654 ----
     function Unit_Vector
       (Index : Integer;
        Order : Positive;
!       First : Integer := 1) return Vector
!    with
!      Pre => Index >= First
!        and then First <= Integer'Last - Order + 1
!        and then Index <= First + (Order - 1);
  
  end System.Generic_Array_Operations;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-genbig.adb gcc-12.1.0/gcc/ada/libgnat/s-genbig.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-genbig.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-genbig.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2012-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2012-2022, 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- --
*************** package body System.Generic_Bignums is
*** 50,59 ****
  
     subtype LLI is Long_Long_Integer;
  
!    One_Data : constant Digit_Vector (1 .. 1) := (1 => 1);
     --  Constant one
  
!    Zero_Data : constant Digit_Vector (1 .. 0) := (1 .. 0 => 0);
     --  Constant zero
  
     -----------------------
--- 50,59 ----
  
     subtype LLI is Long_Long_Integer;
  
!    One_Data : constant Digit_Vector (1 .. 1) := [1];
     --  Constant one
  
!    Zero_Data : constant Digit_Vector (1 .. 0) := [];
     --  Constant zero
  
     -----------------------
*************** package body System.Generic_Bignums is
*** 332,338 ****
        elsif X.Len = 1 and then X.D (1) = 2 and then Y.D (1) < 32 then
           declare
              D : constant Digit_Vector (1 .. 1) :=
!                   (1 => Shift_Left (SD'(1), Natural (Y.D (1))));
           begin
              return Normalize (D, X.Neg);
           end;
--- 332,338 ----
        elsif X.Len = 1 and then X.D (1) = 2 and then Y.D (1) < 32 then
           declare
              D : constant Digit_Vector (1 .. 1) :=
!                   [Shift_Left (SD'(1), Natural (Y.D (1)))];
           begin
              return Normalize (D, X.Neg);
           end;
*************** package body System.Generic_Bignums is
*** 573,579 ****
     -------------
  
     function Big_Mul (X, Y : Bignum) return Big_Integer is
!       Result : Digit_Vector (1 .. X.Len + Y.Len) := (others => 0);
        --  Accumulate result (max length of result is sum of operand lengths)
  
        L : Length;
--- 573,579 ----
     -------------
  
     function Big_Mul (X, Y : Bignum) return Big_Integer is
!       Result : Digit_Vector (1 .. X.Len + Y.Len) := [others => 0];
        --  Accumulate result (max length of result is sum of operand lengths)
  
        L : Length;
*************** package body System.Generic_Bignums is
*** 1149,1170 ****
  
     begin
        if X = 0 then
!          return Allocate_Big_Integer ((1 .. 0 => <>), False);
  
        --  One word result
  
        elsif X in -(2 ** 32 - 1) .. +(2 ** 32 - 1) then
!          return Allocate_Big_Integer ((1 => SD (abs X)), X < 0);
  
        --  Large negative number annoyance
  
        elsif X = -2 ** 63 then
!          return Allocate_Big_Integer ((2 ** 31, 0), True);
  
        elsif Long_Long_Long_Integer'Size = 128
          and then X = Long_Long_Long_Integer'First
        then
!          return Allocate_Big_Integer ((2 ** 31, 0, 0, 0), True);
  
        --  Other negative numbers
  
--- 1149,1170 ----
  
     begin
        if X = 0 then
!          return Allocate_Big_Integer ([], False);
  
        --  One word result
  
        elsif X in -(2 ** 32 - 1) .. +(2 ** 32 - 1) then
!          return Allocate_Big_Integer ([SD (abs X)], X < 0);
  
        --  Large negative number annoyance
  
        elsif X = -2 ** 63 then
!          return Allocate_Big_Integer ([2 ** 31, 0], True);
  
        elsif Long_Long_Long_Integer'Size = 128
          and then X = Long_Long_Long_Integer'First
        then
!          return Allocate_Big_Integer ([2 ** 31, 0, 0, 0], True);
  
        --  Other negative numbers
  
*************** package body System.Generic_Bignums is
*** 1196,1212 ****
     function To_Bignum (X : Unsigned_128) return Big_Integer is
     begin
        if X = 0 then
!          return Allocate_Big_Integer ((1 .. 0 => <>), False);
  
        --  One word result
  
        elsif X < 2 ** 32 then
!          return Allocate_Big_Integer ((1 => SD (X)), False);
  
        --  Two word result
  
        elsif Shift_Right (X, 32) < 2 ** 32 then
!          return Allocate_Big_Integer ((SD (X / Base), SD (X mod Base)), False);
  
        --  Three or four word result
  
--- 1196,1212 ----
     function To_Bignum (X : Unsigned_128) return Big_Integer is
     begin
        if X = 0 then
!          return Allocate_Big_Integer ([], False);
  
        --  One word result
  
        elsif X < 2 ** 32 then
!          return Allocate_Big_Integer ([SD (X)], False);
  
        --  Two word result
  
        elsif Shift_Right (X, 32) < 2 ** 32 then
!          return Allocate_Big_Integer ([SD (X / Base), SD (X mod Base)], False);
  
        --  Three or four word result
  
*************** package body System.Generic_Bignums is
*** 1241,1247 ****
     function To_String
       (X : Bignum; Width : Natural := 0; Base : Positive := 10) return String
     is
!       Big_Base : aliased Bignum_Data := (1, False, (1 => SD (Base)));
  
        function Add_Base (S : String) return String;
        --  Add base information if Base /= 10
--- 1241,1247 ----
     function To_String
       (X : Bignum; Width : Natural := 0; Base : Positive := 10) return String
     is
!       Big_Base : aliased Bignum_Data := (1, False, [SD (Base)]);
  
        function Add_Base (S : String) return String;
        --  Add base information if Base /= 10
*************** package body System.Generic_Bignums is
*** 1285,1291 ****
        function Image (Arg : Bignum) return String is
        begin
           if Big_LT (Arg, Big_Base'Unchecked_Access) then
!             return (1 => Hex_Chars (Natural (From_Bignum (Arg))));
           else
              declare
                 Div    : aliased Big_Integer;
--- 1285,1291 ----
        function Image (Arg : Bignum) return String is
        begin
           if Big_LT (Arg, Big_Base'Unchecked_Access) then
!             return [Hex_Chars (Natural (From_Bignum (Arg)))];
           else
              declare
                 Div    : aliased Big_Integer;
*************** package body System.Generic_Bignums is
*** 1315,1322 ****
           Min_Length : Natural;
           Char       : Character := ' ') return String is
        begin
!          return (1 .. Integer'Max (Integer (Min_Length) - Str'Length, 0)
!                         => Char) & Str;
        end Leading_Padding;
  
        Zero : aliased Bignum_Data := (0, False, D => Zero_Data);
--- 1315,1322 ----
           Min_Length : Natural;
           Char       : Character := ' ') return String is
        begin
!          return [1 .. Integer'Max (Integer (Min_Length) - Str'Length, 0)
!                         => Char] & Str;
        end Leading_Padding;
  
        Zero : aliased Bignum_Data := (0, False, D => Zero_Data);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-genbig.ads gcc-12.1.0/gcc/ada/libgnat/s-genbig.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-genbig.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-genbig.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2012-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2012-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-geveop.adb gcc-12.1.0/gcc/ada/libgnat/s-geveop.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-geveop.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-geveop.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with System;                    use System;
  with System.Address_Operations; use System.Address_Operations;
  with System.Storage_Elements;   use System.Storage_Elements;
  
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-geveop.ads gcc-12.1.0/gcc/ada/libgnat/s-geveop.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-geveop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-geveop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-gloloc.adb gcc-12.1.0/gcc/ada/libgnat/s-gloloc.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-gloloc.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-gloloc.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-gloloc.ads gcc-12.1.0/gcc/ada/libgnat/s-gloloc.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-gloloc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-gloloc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-gloloc__mingw.adb gcc-12.1.0/gcc/ada/libgnat/s-gloloc__mingw.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-gloloc__mingw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-gloloc__mingw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-htable.adb gcc-12.1.0/gcc/ada/libgnat/s-htable.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-htable.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-htable.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                    Copyright (C) 1995-2020, AdaCore                      --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                    Copyright (C) 1995-2022, AdaCore                      --
  --                                                                          --
  -- 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Unchecked_Deallocation;
  with System.String_Hash;
  
--- 29,34 ----
*************** package body System.HTable is
*** 173,179 ****
        begin
           --  Use an aggregate for efficiency reasons
  
!          Table := (others => Null_Ptr);
        end Reset;
  
        ---------
--- 171,177 ----
        begin
           --  Use an aggregate for efficiency reasons
  
!          Table := [others => Null_Ptr];
        end Reset;
  
        ---------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-htable.ads gcc-12.1.0/gcc/ada/libgnat/s-htable.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-htable.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-htable.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 37,44 ****
  --  The Static_HTable package provides a more complex interface that allows
  --  complete control over allocation.
  
- pragma Compiler_Unit_Warning;
- 
  package System.HTable is
     pragma Preelaborate;
  
--- 37,42 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imageb.adb gcc-12.1.0/gcc/ada/libgnat/s-imageb.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imageb.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imageb.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imageb.ads gcc-12.1.0/gcc/ada/libgnat/s-imageb.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imageb.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imageb.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imaged.adb gcc-12.1.0/gcc/ada/libgnat/s-imaged.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imaged.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imaged.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imaged.ads gcc-12.1.0/gcc/ada/libgnat/s-imaged.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imaged.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imaged.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imagef.adb gcc-12.1.0/gcc/ada/libgnat/s-imagef.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imagef.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imagef.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imagef.ads gcc-12.1.0/gcc/ada/libgnat/s-imagef.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imagef.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imagef.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
*************** package System.Image_F is
*** 60,66 ****
     --  For0 and Aft0 are the values of the Fore and Aft attributes for the
     --  fixed point type whose mantissa type is Int and whose small is Num/Den.
     --  This function is used only for fixed point whose Small is an integer or
!    --  its reciprocal (see package System.Img_Real for the handling of other
     --  ordinary fixed-point types). The caller guarantees that S is long enough
     --  to hold the result and has a lower bound of 1.
  
--- 60,66 ----
     --  For0 and Aft0 are the values of the Fore and Aft attributes for the
     --  fixed point type whose mantissa type is Int and whose small is Num/Den.
     --  This function is used only for fixed point whose Small is an integer or
!    --  its reciprocal (see package System.Image_R for the handling of other
     --  ordinary fixed-point types). The caller guarantees that S is long enough
     --  to hold the result and has a lower bound of 1.
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imagei.adb gcc-12.1.0/gcc/ada/libgnat/s-imagei.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imagei.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imagei.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imagei.ads gcc-12.1.0/gcc/ada/libgnat/s-imagei.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imagei.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imagei.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imagen.adb gcc-12.1.0/gcc/ada/libgnat/s-imagen.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imagen.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-imagen.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,79 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                       S Y S T E M . I M A G E _ N                        --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2021-2022, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Unchecked_Conversion;
+ 
+ package body System.Image_N is
+ 
+    -----------------------
+    -- Image_Enumeration --
+    -----------------------
+ 
+    procedure Image_Enumeration
+      (Pos     : Natural;
+       S       : in out String;
+       P       : out Natural;
+       Names   : String;
+       Indexes : System.Address)
+    is
+       pragma Assert (S'First = 1);
+ 
+       subtype Names_Index is
+         Index_Type range Index_Type (Names'First)
+                           .. Index_Type (Names'Last) + 1;
+       subtype Index is Natural range Natural'First .. Names'Length;
+       type Index_Table is array (Index) of Names_Index;
+       type Index_Table_Ptr is access Index_Table;
+ 
+       function To_Index_Table_Ptr is
+         new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
+ 
+       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
+ 
+       pragma Assert (Pos in IndexesT'Range);
+       pragma Assert (Pos + 1 in IndexesT'Range);
+ 
+       Start : constant Natural := Natural (IndexesT (Pos));
+       Next  : constant Natural := Natural (IndexesT (Pos + 1));
+ 
+       pragma Assert (Next - 1 >= Start);
+       pragma Assert (Start >= Names'First);
+       pragma Assert (Next - 1 <= Names'Last);
+ 
+       pragma Assert (Next - Start <= S'Last);
+       --  The caller should guarantee that S is large enough to contain the
+       --  enumeration image.
+    begin
+       S (1 .. Next - Start) := Names (Start .. Next - 1);
+       P := Next - Start;
+    end Image_Enumeration;
+ 
+ end System.Image_N;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imagen.ads gcc-12.1.0/gcc/ada/libgnat/s-imagen.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imagen.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-imagen.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,63 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                       S Y S T E M . I M A G E _ N                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2021-2022, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Enumeration_Type'Image for all enumeration types except those in package
+ --  Standard (where we have no opportunity to build image tables), and in
+ --  package System (where it is too early to start building image tables).
+ --  Special routines exist for the enumeration types in these packages.
+ 
+ generic
+ 
+    type Index_Type is range <>;
+ 
+ package System.Image_N is
+    pragma Pure;
+ 
+    procedure Image_Enumeration
+      (Pos     : Natural;
+       S       : in out String;
+       P       : out Natural;
+       Names   : String;
+       Indexes : System.Address);
+    --  Used to compute Enum'Image (Str) where Enum is some enumeration type
+    --  other than those defined in package Standard. Names is a string with
+    --  a lower bound of 1 containing the characters of all the enumeration
+    --  literals concatenated together in sequence. Indexes is the address of
+    --  an array of type array (0 .. N) of Index_Type, where N is the number of
+    --  enumeration literals in the type. The Indexes values are the starting
+    --  subscript of each enumeration literal, indexed by Pos values, with an
+    --  extra entry at the end containing Names'Length + 1. The reason that
+    --  Indexes is passed by address is that the actual type is created on the
+    --  fly by the expander. The desired 'Image value is stored in S (1 .. P)
+    --  and P is set on return. The caller guarantees that S is long enough to
+    --  hold the result and that the lower bound is 1.
+ 
+ end System.Image_N;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imager.adb gcc-12.1.0/gcc/ada/libgnat/s-imager.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imager.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-imager.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,464 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                        GNAT RUN-TIME COMPONENTS                          --
+ --                                                                          --
+ --                       S Y S T E M . I M A G E _ R                        --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with System.Double_Real;
+ with System.Float_Control;
+ with System.Img_Util; use System.Img_Util;
+ 
+ package body System.Image_R is
+ 
+    --  The following defines the maximum number of digits that we can convert
+    --  accurately. This is limited by the precision of the Num type, and also
+    --  by the number of digits that can be held in the Uns type, which is the
+    --  integer type we use as an intermediate in the computation. But, in both
+    --  cases, we can work with a double value in these types.
+ 
+    --  Note that in the following, the "-2" accounts for the space and one
+    --  extra digit, since we need the maximum number of 9's that can be
+    --  represented, e.g. for the 64-bit case, Long_Long_Unsigned'Width is
+    --  21, since the maximum value (approx 1.8E+19) has 20 digits, but the
+    --  maximum number of 9's that can be represented is only 19.
+ 
+    Maxdigs : constant Natural := 2 * Natural'Min (Uns'Width - 2, Num'Digits);
+ 
+    Maxscaling : constant := 5000;
+    --  Max decimal scaling required during conversion of floating-point
+    --  numbers to decimal. This is used to defend against infinite
+    --  looping in the conversion, as can be caused by erroneous executions.
+    --  The largest exponent used on any current system is 2**16383, which
+    --  is approximately 10**4932, and the highest number of decimal digits
+    --  is about 35 for 128-bit floating-point formats, so 5000 leaves
+    --  enough room for scaling such values
+ 
+    package Double_Real is new System.Double_Real (Num);
+    use type Double_Real.Double_T;
+ 
+    subtype Double_T is Double_Real.Double_T;
+    --  The double floating-point type
+ 
+    function From_Unsigned is new Double_Real.From_Unsigned (Uns);
+    function To_Unsigned is new Double_Real.To_Unsigned (Uns);
+    --  Convert betwwen a double Num and a single Uns
+ 
+    function Is_Negative (V : Num) return Boolean;
+    --  Return True if V is negative for the purpose of the output, i.e. return
+    --  True for negative zeros only if Signed_Zeros is True.
+ 
+    -----------------------
+    -- Image_Fixed_Point --
+    -----------------------
+ 
+    procedure Image_Fixed_Point
+      (V   : Num;
+       S   : in out String;
+       P   : out Natural;
+       Aft : Natural)
+    is
+       pragma Assert (S'First = 1);
+ 
+    begin
+       --  Output space at start if non-negative
+ 
+       if V >= 0.0 then
+          S (1) := ' ';
+          P := 1;
+       else
+          P := 0;
+       end if;
+ 
+       Set_Image_Real (V, S, P, 1, Aft, 0);
+    end Image_Fixed_Point;
+ 
+    --------------------------
+    -- Image_Floating_Point --
+    --------------------------
+ 
+    procedure Image_Floating_Point
+      (V    : Num;
+       S    : in out String;
+       P    : out Natural;
+       Digs : Natural)
+    is
+       pragma Assert (S'First = 1);
+ 
+    begin
+       --  Decide whether a blank should be prepended before the call to
+       --  Set_Image_Real. We generate a blank for positive values, and
+       --  also for positive zeros. For negative zeros, we generate a
+       --  blank only if Signed_Zeros is False (the RM only permits the
+       --  output of -0.0 when Signed_Zeros is True). We do not generate
+       --  a blank for positive infinity, since we output an explicit +.
+ 
+       if not Is_Negative (V) and then V <= Num'Last then
+          pragma Annotate (CodePeer, False_Positive, "condition predetermined",
+                           "CodePeer analysis ignores NaN and Inf values");
+          pragma Assert (S'Last > 1);
+          --  The caller is responsible for S to be large enough for all
+          --  Image_Floating_Point operation.
+          S (1) := ' ';
+          P := 1;
+       else
+          P := 0;
+       end if;
+ 
+       Set_Image_Real (V, S, P, 1, Digs - 1, 3);
+    end Image_Floating_Point;
+ 
+    -----------------
+    -- Is_Negative --
+    -----------------
+ 
+    function Is_Negative (V : Num) return Boolean is
+    begin
+       if V < 0.0 then
+          return True;
+ 
+       elsif V > 0.0 then
+          return False;
+ 
+       elsif not Num'Signed_Zeros then
+          return False;
+ 
+       else
+          return Num'Copy_Sign (1.0, V) < 0.0;
+       end if;
+    end Is_Negative;
+ 
+    --------------------
+    -- Set_Image_Real --
+    --------------------
+ 
+    procedure Set_Image_Real
+      (V    : Num;
+       S    : in out String;
+       P    : in out Natural;
+       Fore : Natural;
+       Aft  : Natural;
+       Exp  : Natural)
+    is
+       Powten : constant array (0 .. Maxpow) of Double_T;
+       pragma Import (Ada, Powten);
+       for Powten'Address use Powten_Address;
+ 
+       NFrac : constant Natural := Natural'Max (Aft, 1);
+       --  Number of digits after the decimal point
+ 
+       Digs : String (1 .. 3 + Maxdigs);
+       --  Array used to hold digits of converted integer value
+ 
+       Ndigs : Natural;
+       --  Number of digits stored in Digs (and also subscript of last digit)
+ 
+       Scale : Integer := 0;
+       --  Exponent such that the result is Digs (1 .. NDigs) * 10**(-Scale)
+ 
+       X : Double_T;
+       --  Current absolute value of the input after scaling
+ 
+       procedure Adjust_Scale (S : Natural);
+       --  Adjusts the value in X by multiplying or dividing by a power of
+       --  ten so that it is in the range 10**(S-1) <= X < 10**S. Scale is
+       --  adjusted to reflect the power of ten used to divide the result,
+       --  i.e. one is added to the scale value for each multiplication by
+       --  10.0 and one is subtracted for each division by 10.0.
+ 
+       ------------------
+       -- Adjust_Scale --
+       ------------------
+ 
+       procedure Adjust_Scale (S : Natural) is
+          Lo, Mid, Hi : Natural;
+          XP : Double_T;
+ 
+       begin
+          --  Cases where scaling up is required
+ 
+          if X < Powten (S - 1) then
+ 
+             --  What we are looking for is a power of ten to multiply X by
+             --  so that the result lies within the required range.
+ 
+             loop
+                XP := X * Powten (Maxpow);
+                exit when XP >= Powten (S - 1) or else Scale > Maxscaling;
+                X := XP;
+                Scale := Scale + Maxpow;
+             end loop;
+ 
+             --  The following exception is only raised in case of erroneous
+             --  execution, where a number was considered valid but still
+             --  fails to scale up. One situation where this can happen is
+             --  when a system which is supposed to be IEEE-compliant, but
+             --  has been reconfigured to flush denormals to zero.
+ 
+             if Scale > Maxscaling then
+                raise Constraint_Error;
+             end if;
+ 
+             --  Here we know that we must multiply by at least 10**1 and that
+             --  10**Maxpow takes us too far: binary search to find right one.
+ 
+             --  Because of roundoff errors, it is possible for the value
+             --  of XP to be just outside of the interval when Lo >= Hi. In
+             --  that case we adjust explicitly by a factor of 10. This
+             --  can only happen with a value that is very close to an
+             --  exact power of 10.
+ 
+             Lo := 1;
+             Hi := Maxpow;
+ 
+             loop
+                Mid := (Lo + Hi) / 2;
+                XP := X * Powten (Mid);
+ 
+                if XP < Powten (S - 1) then
+ 
+                   if Lo >= Hi then
+                      Mid := Mid + 1;
+                      XP := XP * 10.0;
+                      exit;
+ 
+                   else
+                      Lo := Mid + 1;
+                   end if;
+ 
+                elsif XP >= Powten (S) then
+ 
+                   if Lo >= Hi then
+                      Mid := Mid - 1;
+                      XP := XP / 10.0;
+                      exit;
+ 
+                   else
+                      Hi := Mid - 1;
+                   end if;
+ 
+                else
+                   exit;
+                end if;
+             end loop;
+ 
+             X := XP;
+             Scale := Scale + Mid;
+ 
+          --  Cases where scaling down is required
+ 
+          elsif X >= Powten (S) then
+ 
+             --  What we are looking for is a power of ten to divide X by
+             --  so that the result lies within the required range.
+ 
+             loop
+                XP := X / Powten (Maxpow);
+                exit when XP < Powten (S) or else Scale < -Maxscaling;
+                X := XP;
+                Scale := Scale - Maxpow;
+             end loop;
+ 
+             --  The following exception is only raised in case of erroneous
+             --  execution, where a number was considered valid but still
+             --  fails to scale up. One situation where this can happen is
+             --  when a system which is supposed to be IEEE-compliant, but
+             --  has been reconfigured to flush denormals to zero.
+ 
+             if Scale < -Maxscaling then
+                raise Constraint_Error;
+             end if;
+ 
+             --  Here we know that we must divide by at least 10**1 and that
+             --  10**Maxpow takes us too far, binary search to find right one.
+ 
+             Lo := 1;
+             Hi := Maxpow;
+ 
+             loop
+                Mid := (Lo + Hi) / 2;
+                XP := X / Powten (Mid);
+ 
+                if XP < Powten (S - 1) then
+ 
+                   if Lo >= Hi then
+                      XP := XP * 10.0;
+                      Mid := Mid - 1;
+                      exit;
+ 
+                   else
+                      Hi := Mid - 1;
+                   end if;
+ 
+                elsif XP >= Powten (S) then
+ 
+                   if Lo >= Hi then
+                      XP := XP / 10.0;
+                      Mid := Mid + 1;
+                      exit;
+ 
+                   else
+                      Lo := Mid + 1;
+                   end if;
+ 
+                else
+                   exit;
+                end if;
+             end loop;
+ 
+             X := XP;
+             Scale := Scale - Mid;
+ 
+          --  Here we are already scaled right
+ 
+          else
+             null;
+          end if;
+       end Adjust_Scale;
+ 
+    --  Start of processing for Set_Image_Real
+ 
+    begin
+       --  We call the floating-point processor reset routine so we can be sure
+       --  that the processor is properly set for conversions. This is notably
+       --  needed on Windows, where calls to the operating system randomly reset
+       --  the processor into 64-bit mode.
+ 
+       if Num'Machine_Mantissa = 64 then
+          System.Float_Control.Reset;
+       end if;
+ 
+       --  Deal with invalid values first
+ 
+       if not V'Valid then
+ 
+          --  Note that we're taking our chances here, as V might be
+          --  an invalid bit pattern resulting from erroneous execution
+          --  (caused by using uninitialized variables for example).
+ 
+          --  No matter what, we'll at least get reasonable behavior,
+          --  converting to infinity or some other value, or causing an
+          --  exception to be raised is fine.
+ 
+          --  If the following two tests succeed, then we definitely have
+          --  an infinite value, so we print +Inf or -Inf.
+ 
+          if V > Num'Last then
+             pragma Annotate (CodePeer, False_Positive, "dead code",
+                              "CodePeer analysis ignores NaN and Inf values");
+             pragma Annotate (CodePeer, False_Positive, "test always true",
+                              "CodePeer analysis ignores NaN and Inf values");
+ 
+             Set_Floating_Invalid_Value (Infinity, S, P, Fore, Aft, Exp);
+ 
+          elsif V < Num'First then
+             Set_Floating_Invalid_Value (Minus_Infinity, S, P, Fore, Aft, Exp);
+ 
+          --  In all other cases we print NaN
+ 
+          else
+             Set_Floating_Invalid_Value (Not_A_Number, S, P, Fore, Aft, Exp);
+          end if;
+ 
+          return;
+       end if;
+ 
+       --  Set the first character like Image
+ 
+       Digs (1) := (if Is_Negative (V) then '-' else ' ');
+       Ndigs := 1;
+ 
+       X := Double_Real.To_Double (abs (V));
+ 
+       --  If X is zero, we are done
+ 
+       if X = 0.0 then
+          Digs (2) := '0';
+          Ndigs := 2;
+ 
+       --  Otherwise, scale X and convert it to an integer
+ 
+       else
+          --  In exponent notation, we need exactly NFrac + 1 digits and always
+          --  round the last one.
+ 
+          if Exp > 0 then
+             Adjust_Scale (Natural'Min (NFrac + 1, Maxdigs));
+             X := X + 0.5;
+ 
+          --  In straight notation, we compute the maximum number of digits and
+          --  compare how many of them will be put after the decimal point with
+          --  Nfrac, in order to find out whether we need to round the last one
+          --  here or whether the rounding is performed by Set_Decimal_Digits.
+ 
+          else
+             Adjust_Scale (Maxdigs);
+             if Scale <= NFrac then
+                X := X + 0.5;
+             end if;
+          end if;
+ 
+          --  If X fits in an Uns, do the conversion directly. Note that this is
+          --  always the case for the Image attribute.
+ 
+          if X <= Num (Uns'Last) then
+             Set_Image_Unsigned (To_Unsigned (X), Digs, Ndigs);
+ 
+          --  Otherwise, do the conversion in two steps
+ 
+          else pragma Assert (X <= 10.0 ** Num'Digits * Num (Uns'Last));
+             declare
+                Y : constant Uns := To_Unsigned (X / Powten (Num'Digits));
+ 
+                Buf : String (1 .. Num'Digits);
+                Len : Natural;
+ 
+             begin
+                Set_Image_Unsigned (Y, Digs, Ndigs);
+ 
+                X := X - From_Unsigned (Y) * Powten (Num'Digits);
+ 
+                Len := 0;
+                Set_Image_Unsigned (To_Unsigned (X), Buf, Len);
+ 
+                for J in 1 .. Num'Digits - Len loop
+                   Digs (Ndigs + J) := '0';
+                end loop;
+ 
+                for J in 1 .. Len loop
+                   Digs (Ndigs + Num'Digits - Len + J) := Buf (J);
+                end loop;
+ 
+                Ndigs := Ndigs + Num'Digits;
+             end;
+          end if;
+       end if;
+ 
+       Set_Decimal_Digits (Digs, Ndigs, S, P, Scale, Fore, Aft, Exp);
+    end Set_Image_Real;
+ 
+ end System.Image_R;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imager.ads gcc-12.1.0/gcc/ada/libgnat/s-imager.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imager.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-imager.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,92 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                       S Y S T E M . I M A G E _ R                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains routines for the Image attribute of real types, and
+ --  is also for Float_IO/Fixed_IO output.
+ 
+ generic
+ 
+    type Num is digits <>;
+ 
+    Maxpow : Positive;
+ 
+    Powten_Address : System.Address;
+ 
+    type Uns is mod <>;
+ 
+    with procedure Set_Image_Unsigned
+      (V : Uns;
+       S : in out String;
+       P : in out Natural);
+ 
+ package System.Image_R is
+    pragma Pure;
+ 
+    procedure Image_Fixed_Point
+      (V   : Num;
+       S   : in out String;
+       P   : out Natural;
+       Aft : Natural);
+    --  Computes fixed_type'Image (V) and returns the result in S (1 .. P)
+    --  updating P on return. The result is computed according to the rules for
+    --  image for fixed-point types (RM 3.5(34)), where Aft is the value of the
+    --  Aft attribute for the fixed-point type. The caller guarantees that S is
+    --  long enough to hold the result and has a lower bound of 1.
+    --
+    --  Note: this procedure should NOT be called with V = -0.0 or V = +/-Inf.
+ 
+    procedure Image_Floating_Point
+      (V    : Num;
+       S    : in out String;
+       P    : out Natural;
+       Digs : Natural);
+    --  Computes Uns'Image (V) and returns the result in S (1 .. P) updating P
+    --  on return. The result is computed according to the rules for image for
+    --  floating-point types (RM 3.5(33)), where Digs is the value of the Digits
+    --  attribute for the floating-point type. The caller guarantees that S is
+    --  long enough to hold the result and has a lower bound of 1.
+ 
+    procedure Set_Image_Real
+      (V    : Num;
+       S    : in out String;
+       P    : in out Natural;
+       Fore : Natural;
+       Aft  : Natural;
+       Exp  : Natural);
+    --  Sets the image of V starting at S (P + 1), updating P to point to the
+    --  last character stored, the caller promises that the buffer is large
+    --  enough and no check is made for this. Constraint_Error will not
+    --  necessarily be raised if this is violated, since it is perfectly valid
+    --  to compile this unit with checks off). The Fore, Aft and Exp values
+    --  can be set to any valid values for the case of use from Text_IO. Note
+    --  that no space is stored at the start for non-negative values.
+ 
+ end System.Image_R;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imageu.adb gcc-12.1.0/gcc/ada/libgnat/s-imageu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imageu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imageu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imageu.ads gcc-12.1.0/gcc/ada/libgnat/s-imageu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imageu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imageu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imagew.adb gcc-12.1.0/gcc/ada/libgnat/s-imagew.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imagew.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imagew.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imagew.ads gcc-12.1.0/gcc/ada/libgnat/s-imagew.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imagew.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imagew.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imde128.ads gcc-12.1.0/gcc/ada/libgnat/s-imde128.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imde128.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imde128.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imde32.ads gcc-12.1.0/gcc/ada/libgnat/s-imde32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imde32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imde32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imde64.ads gcc-12.1.0/gcc/ada/libgnat/s-imde64.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imde64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imde64.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imen16.ads gcc-12.1.0/gcc/ada/libgnat/s-imen16.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imen16.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-imen16.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,51 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                   S Y S T E M . I M G _ E N U M _ 1 6                    --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2021-2022, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Instantiation of System.Image_N for enumeration types whose names table
+ --  has a length that fits in a 16-bit but not a 8-bit integer.
+ 
+ with Interfaces;
+ with System.Image_N;
+ 
+ package System.Img_Enum_16 is
+    pragma Pure;
+ 
+    package Impl is new Image_N (Interfaces.Integer_16);
+ 
+    procedure Image_Enumeration_16
+      (Pos     : Natural;
+       S       : in out String;
+       P       : out Natural;
+       Names   : String;
+       Indexes : System.Address)
+      renames Impl.Image_Enumeration;
+ 
+ end System.Img_Enum_16;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imen32.ads gcc-12.1.0/gcc/ada/libgnat/s-imen32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imen32.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-imen32.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,51 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                   S Y S T E M . I M G _ E N U M _ 3 2                    --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2021-2022, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Instantiation of System.Image_N for enumeration types whose names table
+ --  has a length that fits in a 32-bit but not a 16-bit integer.
+ 
+ with Interfaces;
+ with System.Image_N;
+ 
+ package System.Img_Enum_32 is
+    pragma Pure;
+ 
+    package Impl is new Image_N (Interfaces.Integer_32);
+ 
+    procedure Image_Enumeration_32
+      (Pos     : Natural;
+       S       : in out String;
+       P       : out Natural;
+       Names   : String;
+       Indexes : System.Address)
+      renames Impl.Image_Enumeration;
+ 
+ end System.Img_Enum_32;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imenne.adb gcc-12.1.0/gcc/ada/libgnat/s-imenne.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imenne.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imenne.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,170 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                  S Y S T E M . I M G _ E N U M _ N E W                   --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 2000-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- pragma Compiler_Unit_Warning;
- 
- with Ada.Unchecked_Conversion;
- 
- package body System.Img_Enum_New is
- 
-    -------------------------
-    -- Image_Enumeration_8 --
-    -------------------------
- 
-    procedure Image_Enumeration_8
-      (Pos     : Natural;
-       S       : in out String;
-       P       : out Natural;
-       Names   : String;
-       Indexes : System.Address)
-    is
-       pragma Assert (S'First = 1);
- 
-       type Natural_8 is range 0 .. 2 ** 7 - 1;
-       subtype Names_Index is
-         Natural_8 range Natural_8 (Names'First)
-                           .. Natural_8 (Names'Last) + 1;
-       subtype Index is Natural range Natural'First .. Names'Length;
-       type Index_Table is array (Index) of Names_Index;
-       type Index_Table_Ptr is access Index_Table;
- 
-       function To_Index_Table_Ptr is
-         new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
- 
-       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
- 
-       pragma Assert (Pos in IndexesT'Range);
-       pragma Assert (Pos + 1 in IndexesT'Range);
- 
-       Start : constant Natural := Natural (IndexesT (Pos));
-       Next  : constant Natural := Natural (IndexesT (Pos + 1));
- 
-       pragma Assert (Next - 1 >= Start);
-       pragma Assert (Start >= Names'First);
-       pragma Assert (Next - 1 <= Names'Last);
- 
-       pragma Assert (Next - Start <= S'Last);
-       --  The caller should guarantee that S is large enough to contain the
-       --  enumeration image.
-    begin
-       S (1 .. Next - Start) := Names (Start .. Next - 1);
-       P := Next - Start;
-    end Image_Enumeration_8;
- 
-    --------------------------
-    -- Image_Enumeration_16 --
-    --------------------------
- 
-    procedure Image_Enumeration_16
-      (Pos     : Natural;
-       S       : in out String;
-       P       : out Natural;
-       Names   : String;
-       Indexes : System.Address)
-    is
-       pragma Assert (S'First = 1);
- 
-       type Natural_16 is range 0 .. 2 ** 15 - 1;
-       subtype Names_Index is
-         Natural_16 range Natural_16 (Names'First)
-                            .. Natural_16 (Names'Last) + 1;
-       subtype Index is Natural range Natural'First .. Names'Length;
-       type Index_Table is array (Index) of Names_Index;
-       type Index_Table_Ptr is access Index_Table;
- 
-       function To_Index_Table_Ptr is
-         new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
- 
-       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
- 
-       pragma Assert (Pos in IndexesT'Range);
-       pragma Assert (Pos + 1 in IndexesT'Range);
- 
-       Start : constant Natural := Natural (IndexesT (Pos));
-       Next  : constant Natural := Natural (IndexesT (Pos + 1));
- 
-       pragma Assert (Next - 1 >= Start);
-       pragma Assert (Start >= Names'First);
-       pragma Assert (Next - 1 <= Names'Last);
- 
-       pragma Assert (Next - Start <= S'Last);
-       --  The caller should guarantee that S is large enough to contain the
-       --  enumeration image.
-    begin
-       S (1 .. Next - Start) := Names (Start .. Next - 1);
-       P := Next - Start;
-    end Image_Enumeration_16;
- 
-    --------------------------
-    -- Image_Enumeration_32 --
-    --------------------------
- 
-    procedure Image_Enumeration_32
-      (Pos     : Natural;
-       S       : in out String;
-       P       : out Natural;
-       Names   : String;
-       Indexes : System.Address)
-    is
-       pragma Assert (S'First = 1);
- 
-       type Natural_32 is range 0 .. 2 ** 31 - 1;
-       subtype Names_Index is
-         Natural_32 range Natural_32 (Names'First)
-                            .. Natural_32 (Names'Last) + 1;
-       subtype Index is Natural range Natural'First .. Names'Length;
-       type Index_Table is array (Index) of Names_Index;
-       type Index_Table_Ptr is access Index_Table;
- 
-       function To_Index_Table_Ptr is
-         new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
- 
-       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
- 
-       pragma Assert (Pos in IndexesT'Range);
-       pragma Assert (Pos + 1 in IndexesT'Range);
- 
-       Start : constant Natural := Natural (IndexesT (Pos));
-       Next  : constant Natural := Natural (IndexesT (Pos + 1));
- 
-       pragma Assert (Next - 1 >= Start);
-       pragma Assert (Start >= Names'First);
-       pragma Assert (Next - 1 <= Names'Last);
- 
-       pragma Assert (Next - Start <= S'Last);
-       --  The caller should guarantee that S is large enough to contain the
-       --  enumeration image.
-    begin
-       S (1 .. Next - Start) := Names (Start .. Next - 1);
-       P := Next - Start;
-    end Image_Enumeration_32;
- 
- end System.Img_Enum_New;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imenne.ads gcc-12.1.0/gcc/ada/libgnat/s-imenne.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imenne.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imenne.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,85 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                  S Y S T E M . I M G _ E N U M _ N E W                   --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Enumeration_Type'Image for all enumeration types except those in package
- --  Standard (where we have no opportunity to build image tables), and in
- --  package System (where it is too early to start building image tables).
- --  Special routines exist for the enumeration types in these packages.
- 
- --  This is the new version of the package, for use by compilers built after
- --  Nov 21st, 2007, which provides procedures that avoid using the secondary
- --  stack. The original package System.Img_Enum is maintained in the sources
- --  for bootstrapping with older versions of the compiler which expect to find
- --  functions in this package.
- 
- pragma Compiler_Unit_Warning;
- 
- package System.Img_Enum_New is
-    pragma Pure;
- 
-    procedure Image_Enumeration_8
-      (Pos     : Natural;
-       S       : in out String;
-       P       : out Natural;
-       Names   : String;
-       Indexes : System.Address);
-    --  Used to compute Enum'Image (Str) where Enum is some enumeration type
-    --  other than those defined in package Standard. Names is a string with
-    --  a lower bound of 1 containing the characters of all the enumeration
-    --  literals concatenated together in sequence. Indexes is the address of
-    --  an array of type array (0 .. N) of Natural_8, where N is the number of
-    --  enumeration literals in the type. The Indexes values are the starting
-    --  subscript of each enumeration literal, indexed by Pos values, with an
-    --  extra entry at the end containing Names'Length + 1. The reason that
-    --  Indexes is passed by address is that the actual type is created on the
-    --  fly by the expander. The desired 'Image value is stored in S (1 .. P)
-    --  and P is set on return. The caller guarantees that S is long enough to
-    --  hold the result and that the lower bound is 1.
- 
-    procedure Image_Enumeration_16
-      (Pos     : Natural;
-       S       : in out String;
-       P       : out Natural;
-       Names   : String;
-       Indexes : System.Address);
-    --  Identical to Set_Image_Enumeration_8 except that it handles types using
-    --  array (0 .. Num) of Natural_16 for the Indexes table.
- 
-    procedure Image_Enumeration_32
-      (Pos     : Natural;
-       S       : in out String;
-       P       : out Natural;
-       Names   : String;
-       Indexes : System.Address);
-    --  Identical to Set_Image_Enumeration_8 except that it handles types using
-    --  array (0 .. Num) of Natural_32 for the Indexes table.
- 
- end System.Img_Enum_New;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imenu8.ads gcc-12.1.0/gcc/ada/libgnat/s-imenu8.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imenu8.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-imenu8.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,51 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . I M G _ E N U M _ 8                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2021-2022, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Instantiation of System.Image_N for enumeration types whose names table
+ --  has a length that fits in a 8-bit integer.
+ 
+ with Interfaces;
+ with System.Image_N;
+ 
+ package System.Img_Enum_8 is
+    pragma Pure;
+ 
+    package Impl is new Image_N (Interfaces.Integer_8);
+ 
+    procedure Image_Enumeration_8
+      (Pos     : Natural;
+       S       : in out String;
+       P       : out Natural;
+       Names   : String;
+       Indexes : System.Address)
+      renames Impl.Image_Enumeration;
+ 
+ end System.Img_Enum_8;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imfi128.ads gcc-12.1.0/gcc/ada/libgnat/s-imfi128.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imfi128.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imfi128.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imfi32.ads gcc-12.1.0/gcc/ada/libgnat/s-imfi32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imfi32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imfi32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imfi64.ads gcc-12.1.0/gcc/ada/libgnat/s-imfi64.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imfi64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imfi64.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgbiu.adb gcc-12.1.0/gcc/ada/libgnat/s-imgbiu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imgbiu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgbiu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgbiu.ads gcc-12.1.0/gcc/ada/libgnat/s-imgbiu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgbiu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgbiu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgboo.adb gcc-12.1.0/gcc/ada/libgnat/s-imgboo.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imgboo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgboo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 1992-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! package body System.Img_Bool is
  
     -------------------
     -- Image_Boolean --
--- 29,45 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Ghost code, loop invariants and assertions in this unit are meant for
! --  analysis only, not for run-time checking, as it would be too costly
! --  otherwise. This is enforced by setting the assertion policy to Ignore.
! 
! pragma Assertion_Policy (Ghost          => Ignore,
!                          Loop_Invariant => Ignore,
!                          Assert         => Ignore);
! 
! package body System.Img_Bool
!   with SPARK_Mode
! is
  
     -------------------
     -- Image_Boolean --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgboo.ads gcc-12.1.0/gcc/ada/libgnat/s-imgboo.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgboo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgboo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,43 ****
  
  --  Boolean'Image
  
! package System.Img_Bool is
!    pragma Pure;
  
     procedure Image_Boolean
       (V : Boolean;
        S : in out String;
!       P : out Natural);
     --  Computes Boolean'Image (V) and stores the result in S (1 .. P)
     --  setting the resulting value of P. The caller guarantees that S
     --  is long enough to hold the result, and that S'First is 1.
--- 31,63 ----
  
  --  Boolean'Image
  
! --  Preconditions in this unit are meant for analysis only, not for run-time
! --  checking, so that the expected exceptions are raised. This is enforced by
! --  setting the corresponding assertion policy to Ignore. Postconditions and
! --  contract cases should not be executed at runtime as well, in order not to
! --  slow down the execution of these functions.
! 
! pragma Assertion_Policy (Pre            => Ignore,
!                          Post           => Ignore,
!                          Contract_Cases => Ignore,
!                          Ghost          => Ignore);
! 
! with System.Val_Bool;
! 
! package System.Img_Bool
!   with SPARK_Mode, Preelaborate
! is
  
     procedure Image_Boolean
       (V : Boolean;
        S : in out String;
!       P : out Natural)
!    with
!      Pre  => S'First = 1
!        and then (if V then S'Length >= 4 else S'Length >= 5),
!      Post => (if V then P = 4 else P = 5)
!        and then System.Val_Bool.Is_Boolean_Image_Ghost (S (1 .. P))
!        and then System.Val_Bool.Value_Boolean (S (1 .. P)) = V;
     --  Computes Boolean'Image (V) and stores the result in S (1 .. P)
     --  setting the resulting value of P. The caller guarantees that S
     --  is long enough to hold the result, and that S'First is 1.
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgcha.adb gcc-12.1.0/gcc/ada/libgnat/s-imgcha.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imgcha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgcha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body System.Img_Char is
*** 48,54 ****
          range Character'Val (16#00#) .. Character'Val (16#1F#);
  
        C0 : constant array (C0_Range) of Cname :=
!               (Character'Val (16#00#) => "NUL",
                 Character'Val (16#01#) => "SOH",
                 Character'Val (16#02#) => "STX",
                 Character'Val (16#03#) => "ETX",
--- 48,54 ----
          range Character'Val (16#00#) .. Character'Val (16#1F#);
  
        C0 : constant array (C0_Range) of Cname :=
!               [Character'Val (16#00#) => "NUL",
                 Character'Val (16#01#) => "SOH",
                 Character'Val (16#02#) => "STX",
                 Character'Val (16#03#) => "ETX",
*************** package body System.Img_Char is
*** 79,91 ****
                 Character'Val (16#1C#) => "FS ",
                 Character'Val (16#1D#) => "GS ",
                 Character'Val (16#1E#) => "RS ",
!                Character'Val (16#1F#) => "US ");
  
        subtype C1_Range is Character
          range Character'Val (16#7F#) .. Character'Val (16#9F#);
  
        C1 : constant array (C1_Range) of Cname :=
!               (Character'Val (16#7F#) => "DEL",
                 Character'Val (16#80#) => "res",
                 Character'Val (16#81#) => "res",
                 Character'Val (16#82#) => "BPH",
--- 79,91 ----
                 Character'Val (16#1C#) => "FS ",
                 Character'Val (16#1D#) => "GS ",
                 Character'Val (16#1E#) => "RS ",
!                Character'Val (16#1F#) => "US "];
  
        subtype C1_Range is Character
          range Character'Val (16#7F#) .. Character'Val (16#9F#);
  
        C1 : constant array (C1_Range) of Cname :=
!               [Character'Val (16#7F#) => "DEL",
                 Character'Val (16#80#) => "res",
                 Character'Val (16#81#) => "res",
                 Character'Val (16#82#) => "BPH",
*************** package body System.Img_Char is
*** 117,123 ****
                 Character'Val (16#9C#) => "ST ",
                 Character'Val (16#9D#) => "OSC",
                 Character'Val (16#9E#) => "PM ",
!                Character'Val (16#9F#) => "APC");
  
     begin
        --  Control characters are represented by their names (RM 3.5(32))
--- 117,123 ----
                 Character'Val (16#9C#) => "ST ",
                 Character'Val (16#9D#) => "OSC",
                 Character'Val (16#9E#) => "PM ",
!                Character'Val (16#9F#) => "APC"];
  
     begin
        --  Control characters are represented by their names (RM 3.5(32))
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgcha.ads gcc-12.1.0/gcc/ada/libgnat/s-imgcha.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgcha.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgcha.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgenu.adb gcc-12.1.0/gcc/ada/libgnat/s-imgenu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imgenu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgenu.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,128 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                      S Y S T E M . I M G _ E N U M                       --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 2000-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- pragma Compiler_Unit_Warning;
- 
- with Ada.Unchecked_Conversion;
- 
- package body System.Img_Enum is
- 
-    -------------------------
-    -- Image_Enumeration_8 --
-    -------------------------
- 
-    function Image_Enumeration_8
-      (Pos     : Natural;
-       Names   : String;
-       Indexes : System.Address)
-       return    String
-    is
-       type Natural_8 is range 0 .. 2 ** 7 - 1;
-       type Index_Table is array (Natural) of Natural_8;
-       type Index_Table_Ptr is access Index_Table;
- 
-       function To_Index_Table_Ptr is
-         new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
- 
-       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
- 
-       Start : constant Natural := Natural (IndexesT (Pos));
-       Next  : constant Natural := Natural (IndexesT (Pos + 1));
- 
-       subtype Result_Type is String (1 .. Next - Start);
-       --  We need this result type to force the result to have the
-       --  required lower bound of 1, rather than the slice bounds.
- 
-    begin
-       return Result_Type (Names (Start .. Next - 1));
-    end Image_Enumeration_8;
- 
-    --------------------------
-    -- Image_Enumeration_16 --
-    --------------------------
- 
-    function Image_Enumeration_16
-      (Pos     : Natural;
-       Names   : String;
-       Indexes : System.Address)
-       return    String
-    is
-       type Natural_16 is range 0 .. 2 ** 15 - 1;
-       type Index_Table is array (Natural) of Natural_16;
-       type Index_Table_Ptr is access Index_Table;
- 
-       function To_Index_Table_Ptr is
-         new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
- 
-       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
- 
-       Start : constant Natural := Natural (IndexesT (Pos));
-       Next  : constant Natural := Natural (IndexesT (Pos + 1));
- 
-       subtype Result_Type is String (1 .. Next - Start);
-       --  We need this result type to force the result to have the
-       --  required lower bound of 1, rather than the slice bounds.
- 
-    begin
-       return Result_Type (Names (Start .. Next - 1));
-    end Image_Enumeration_16;
- 
-    --------------------------
-    -- Image_Enumeration_32 --
-    --------------------------
- 
-    function Image_Enumeration_32
-      (Pos     : Natural;
-       Names   : String;
-       Indexes : System.Address)
-       return    String
-    is
-       type Natural_32 is range 0 .. 2 ** 31 - 1;
-       type Index_Table is array (Natural) of Natural_32;
-       type Index_Table_Ptr is access Index_Table;
- 
-       function To_Index_Table_Ptr is
-         new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
- 
-       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
- 
-       Start : constant Natural := Natural (IndexesT (Pos));
-       Next  : constant Natural := Natural (IndexesT (Pos + 1));
- 
-       subtype Result_Type is String (1 .. Next - Start);
-       --  We need this result type to force the result to have the
-       --  required lower bound of 1, rather than the slice bounds.
- 
-    begin
-       return Result_Type (Names (Start .. Next - 1));
-    end Image_Enumeration_32;
- 
- end System.Img_Enum;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgenu.ads gcc-12.1.0/gcc/ada/libgnat/s-imgenu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgenu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgenu.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,78 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                      S Y S T E M . I M G _ E N U M                       --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 2000-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Enumeration_Type'Image for all enumeration types except those in package
- --  Standard (where we have no opportunity to build image tables), and in
- --  package System (where it is too early to start building image tables).
- --  Special routines exist for the enumeration types in these packages.
- 
- --  Note: this is an obsolete package, replaced by System.Img_Enum_New, which
- --  provides procedures instead of functions for these enumeration image calls.
- --  The reason we maintain this package is that when bootstrapping with old
- --  compilers, the old compiler will search for this unit, expecting to find
- --  these functions. The new compiler will search for procedures in the new
- --  version of the unit.
- 
- pragma Compiler_Unit_Warning;
- 
- package System.Img_Enum is
-    pragma Pure;
- 
-    function Image_Enumeration_8
-      (Pos     : Natural;
-       Names   : String;
-       Indexes : System.Address) return String;
-    --  Used to compute Enum'Image (Str) where Enum is some enumeration type
-    --  other than those defined in package Standard. Names is a string with a
-    --  lower bound of 1 containing the characters of all the enumeration
-    --  literals concatenated together in sequence. Indexes is the address of an
-    --  array of type array (0 .. N) of Natural_8, where N is the number of
-    --  enumeration literals in the type. The Indexes values are the starting
-    --  subscript of each enumeration literal, indexed by Pos values, with an
-    --  extra entry at the end containing Names'Length + 1. The reason that
-    --  Indexes is passed by address is that the actual type is created on the
-    --  fly by the expander. The value returned is the desired 'Image value.
- 
-    function Image_Enumeration_16
-      (Pos     : Natural;
-       Names   : String;
-       Indexes : System.Address) return String;
-    --  Identical to Image_Enumeration_8 except that it handles types
-    --  using array (0 .. Num) of Natural_16 for the Indexes table.
- 
-    function Image_Enumeration_32
-      (Pos     : Natural;
-       Names   : String;
-       Indexes : System.Address) return String;
-    --  Identical to Image_Enumeration_8 except that it handles types
-    --  using array (0 .. Num) of Natural_32 for the Indexes table.
- 
- end System.Img_Enum;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgflt.ads gcc-12.1.0/gcc/ada/libgnat/s-imgflt.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgflt.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-imgflt.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,66 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                       S Y S T E M . I M G _ F L T                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains routines for the Image attribute of floating point
+ --  types based on Float, also used for Float_IO output.
+ 
+ with System.Image_R;
+ with System.Img_Uns;
+ with System.Powten_Flt;
+ with System.Unsigned_Types;
+ 
+ package System.Img_Flt is
+    pragma Pure;
+ 
+    package Impl is new Image_R
+      (Float,
+       System.Powten_Flt.Maxpow,
+       System.Powten_Flt.Powten'Address,
+       Unsigned_Types.Unsigned,
+       System.Img_Uns.Set_Image_Unsigned);
+ 
+    procedure Image_Float
+      (V    : Float;
+       S    : in out String;
+       P    : out Natural;
+       Digs : Natural)
+      renames Impl.Image_Floating_Point;
+ 
+    procedure Set_Image_Float
+      (V    : Float;
+       S    : in out String;
+       P    : in out Natural;
+       Fore : Natural;
+       Aft  : Natural;
+       Exp  : Natural)
+      renames Impl.Set_Image_Real;
+ 
+ end System.Img_Flt;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgint.adb gcc-12.1.0/gcc/ada/libgnat/s-imgint.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imgint.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgint.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgint.ads gcc-12.1.0/gcc/ada/libgnat/s-imgint.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgint.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgint.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imglfl.ads gcc-12.1.0/gcc/ada/libgnat/s-imglfl.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imglfl.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-imglfl.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,80 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                      S Y S T E M . I M G _ L F L T                       --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains routines for the Image attribute of fixed or floating
+ --  point types based on Long_Float, also used for Float_IO/Fixed_IO output.
+ 
+ with System.Img_LLU;
+ with System.Image_R;
+ with System.Powten_LFlt;
+ with System.Unsigned_Types;
+ 
+ package System.Img_LFlt is
+    pragma Pure;
+ 
+    --  Note that the following instantiation is really for a 32-bit target,
+    --  where 128-bit integer types are not available. For a 64-bit targaet,
+    --  it is possible to use Long_Long_Unsigned and Long_Long_Long_Unsigned
+    --  instead of Unsigned and Long_Long_Unsigned, in order to double the
+    --  number of significant digits. But we do not do it by default to avoid
+    --  dragging 128-bit integer types for the sake of backward compatibility.
+ 
+    package Impl is new Image_R
+      (Long_Float,
+       System.Powten_LFlt.Maxpow,
+       System.Powten_LFlt.Powten'Address,
+       Unsigned_Types.Long_Long_Unsigned,
+       System.Img_LLU.Set_Image_Long_Long_Unsigned);
+ 
+    procedure Image_Fixed
+      (V   : Long_Float;
+       S   : in out String;
+       P   : out Natural;
+       Aft : Natural)
+      renames Impl.Image_Fixed_Point;
+ 
+    procedure Image_Long_Float
+      (V    : Long_Float;
+       S    : in out String;
+       P    : out Natural;
+       Digs : Natural)
+      renames Impl.Image_Floating_Point;
+ 
+    procedure Set_Image_Long_Float
+      (V    : Long_Float;
+       S    : in out String;
+       P    : in out Natural;
+       Fore : Natural;
+       Aft  : Natural;
+       Exp  : Natural)
+      renames Impl.Set_Image_Real;
+ 
+ end System.Img_LFlt;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgllb.adb gcc-12.1.0/gcc/ada/libgnat/s-imgllb.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imgllb.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgllb.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgllb.ads gcc-12.1.0/gcc/ada/libgnat/s-imgllb.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgllb.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgllb.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgllf.ads gcc-12.1.0/gcc/ada/libgnat/s-imgllf.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgllf.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-imgllf.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,73 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                       S Y S T E M . I M G _ L L F                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package contains routines for the Image attribute of floating point
+ --  types based on Long_Long_Float, also used for Float_IO output.
+ 
+ with System.Img_LLU;
+ with System.Image_R;
+ with System.Powten_LLF;
+ with System.Unsigned_Types;
+ 
+ package System.Img_LLF is
+    pragma Pure;
+ 
+    --  Note that the following instantiation is really for a 32-bit target,
+    --  where 128-bit integer types are not available. For a 64-bit targaet,
+    --  it is possible to use Long_Long_Unsigned and Long_Long_Long_Unsigned
+    --  instead of Unsigned and Long_Long_Unsigned, in order to double the
+    --  number of significant digits. But we do not do it by default to avoid
+    --  dragging 128-bit integer types for the sake of backward compatibility.
+ 
+    package Impl is new Image_R
+      (Long_Long_Float,
+       System.Powten_LLF.Maxpow,
+       System.Powten_LLF.Powten'Address,
+       Unsigned_Types.Long_Long_Unsigned,
+       System.Img_LLU.Set_Image_Long_Long_Unsigned);
+ 
+    procedure Image_Long_Long_Float
+      (V    : Long_Long_Float;
+       S    : in out String;
+       P    : out Natural;
+       Digs : Natural)
+      renames Impl.Image_Floating_Point;
+ 
+    procedure Set_Image_Long_Long_Float
+      (V    : Long_Long_Float;
+       S    : in out String;
+       P    : in out Natural;
+       Fore : Natural;
+       Aft  : Natural;
+       Exp  : Natural)
+      renames Impl.Set_Image_Real;
+ 
+ end System.Img_LLF;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imglli.adb gcc-12.1.0/gcc/ada/libgnat/s-imglli.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imglli.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imglli.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imglli.ads gcc-12.1.0/gcc/ada/libgnat/s-imglli.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imglli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imglli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 30,37 ****
  ------------------------------------------------------------------------------
  
  --  This package contains the routines for supporting the Image attribute for
! --  signed integer types larger Integer, and also for conversion operations
! --  required in Text_IO.Integer_IO for such types.
  
  with System.Image_I;
  
--- 30,37 ----
  ------------------------------------------------------------------------------
  
  --  This package contains the routines for supporting the Image attribute for
! --  signed integer types larger than Integer, and also for conversion
! --  operations required in Text_IO.Integer_IO for such types.
  
  with System.Image_I;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imglllb.ads gcc-12.1.0/gcc/ada/libgnat/s-imglllb.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imglllb.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imglllb.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgllli.ads gcc-12.1.0/gcc/ada/libgnat/s-imgllli.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgllli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgllli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imglllu.ads gcc-12.1.0/gcc/ada/libgnat/s-imglllu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imglllu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imglllu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imglllw.ads gcc-12.1.0/gcc/ada/libgnat/s-imglllw.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imglllw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imglllw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgllu.adb gcc-12.1.0/gcc/ada/libgnat/s-imgllu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imgllu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgllu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgllu.ads gcc-12.1.0/gcc/ada/libgnat/s-imgllu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgllu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgllu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgllw.adb gcc-12.1.0/gcc/ada/libgnat/s-imgllw.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imgllw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgllw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgllw.ads gcc-12.1.0/gcc/ada/libgnat/s-imgllw.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgllw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgllw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgrea.adb gcc-12.1.0/gcc/ada/libgnat/s-imgrea.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imgrea.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgrea.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,717 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with System.Img_LLU;    use System.Img_LLU;
! with System.Img_Uns;    use System.Img_Uns;
! with System.Powten_LLF; use System.Powten_LLF;
! with System.Float_Control;
! 
! package body System.Img_Real is
! 
!    --  The following defines the maximum number of digits that we can convert
!    --  accurately. This is limited by the precision of Long_Long_Float, and
!    --  also by the number of digits we can hold in Long_Long_Unsigned, which
!    --  is the integer type we use as an intermediate for the result.
! 
!    --  We assume that in practice, the limitation will come from the digits
!    --  value, rather than the integer value. This is true for typical IEEE
!    --  implementations, and at worst, the only loss is for some precision
!    --  in very high precision floating-point output.
! 
!    --  Note that in the following, the "-2" accounts for the sign and one
!    --  extra digit, since we need the maximum number of 9's that can be
!    --  represented, e.g. for the 64-bit case, Long_Long_Unsigned'Width is
!    --  21, since the maximum value (approx 1.8E+19) has 20 digits, but the
!    --  maximum number of 9's that can be represented is only 19.
! 
!    Maxdigs : constant :=
!                Natural'Min
!                  (Long_Long_Unsigned'Width - 2, Long_Long_Float'Digits);
! 
!    Unsdigs : constant := Unsigned'Width - 2;
!    --  Number of digits that can be converted using type Unsigned
! 
!    Maxscaling : constant := 5000;
!    --  Max decimal scaling required during conversion of floating-point
!    --  numbers to decimal. This is used to defend against infinite
!    --  looping in the conversion, as can be caused by erroneous executions.
!    --  The largest exponent used on any current system is 2**16383, which
!    --  is approximately 10**4932, and the highest number of decimal digits
!    --  is about 35 for 128-bit floating-point formats, so 5000 leaves
!    --  enough room for scaling such values
! 
!    function Is_Negative (V : Long_Long_Float) return Boolean;
!    pragma Import (Intrinsic, Is_Negative);
! 
!    --------------------------
!    -- Image_Floating_Point --
!    --------------------------
! 
!    procedure Image_Floating_Point
!      (V    : Long_Long_Float;
!       S    : in out String;
!       P    : out Natural;
!       Digs : Natural)
!    is
!       pragma Assert (S'First = 1);
! 
!    begin
!       --  Decide whether a blank should be prepended before the call to
!       --  Set_Image_Real. We generate a blank for positive values, and
!       --  also for positive zeroes. For negative zeroes, we generate a
!       --  blank only if Signed_Zeros is False (the RM only permits the
!       --  output of -0.0 when Signed_Zeros is True). We do not generate
!       --  a blank for positive infinity, since we output an explicit +.
! 
!       if (not Is_Negative (V) and then V <= Long_Long_Float'Last)
!         or else (not Long_Long_Float'Signed_Zeros and then V = -0.0)
!       then
!          pragma Annotate (CodePeer, False_Positive, "condition predetermined",
!                           "CodePeer analysis ignores NaN and Inf values");
!          pragma Assert (S'Last > 1);
!          --  The caller is responsible for S to be large enough for all
!          --  Image_Floating_Point operation.
!          S (1) := ' ';
!          P := 1;
!       else
!          P := 0;
!       end if;
! 
!       Set_Image_Real (V, S, P, 1, Digs - 1, 3);
!    end Image_Floating_Point;
! 
!    --------------------------------
!    -- Image_Ordinary_Fixed_Point --
!    --------------------------------
! 
!    procedure Image_Ordinary_Fixed_Point
!      (V   : Long_Long_Float;
!       S   : in out String;
!       P   : out Natural;
!       Aft : Natural)
!    is
!       pragma Assert (S'First = 1);
! 
!    begin
!       --  Output space at start if non-negative
! 
!       if V >= 0.0 then
!          S (1) := ' ';
!          P := 1;
!       else
!          P := 0;
!       end if;
! 
!       Set_Image_Real (V, S, P, 1, Aft, 0);
!    end Image_Ordinary_Fixed_Point;
! 
!    --------------------
!    -- Set_Image_Real --
!    --------------------
! 
!    procedure Set_Image_Real
!      (V    : Long_Long_Float;
!       S    : out String;
!       P    : in out Natural;
!       Fore : Natural;
!       Aft  : Natural;
!       Exp  : Natural)
!    is
!       NFrac : constant Natural := Natural'Max (Aft, 1);
!       Minus : Boolean;
!       X     : Long_Long_Float;
!       Scale : Integer;
!       Expon : Integer;
! 
!       Digs : String (1 .. Max_Real_Image_Length);
!       --  Array used to hold digits of converted integer value. This is a large
!       --  enough buffer to accommodate ludicrous Fore/Aft/Exp combinations.
! 
!       Ndigs : Natural;
!       --  Number of digits stored in Digs (and also subscript of last digit)
! 
!       procedure Adjust_Scale (S : Natural);
!       --  Adjusts the value in X by multiplying or dividing by a power of
!       --  ten so that it is in the range 10**(S-1) <= X < 10**S. Includes
!       --  adding 0.5 to round the result, readjusting if the rounding causes
!       --  the result to wander out of the range. Scale is adjusted to reflect
!       --  the power of ten used to divide the result (i.e. one is added to
!       --  the scale value for each division by 10.0, or one is subtracted
!       --  for each multiplication by 10.0).
! 
!       procedure Convert_Integer;
!       --  Takes the value in X, outputs integer digits into Digs. On return,
!       --  Ndigs is set to the number of digits stored. The digits are stored
!       --  in Digs (1 .. Ndigs),
! 
!       procedure Set (C : Character);
!       --  Sets character C in output buffer
! 
!       procedure Set_Blanks_And_Sign (N : Integer);
!       --  Sets leading blanks and minus sign if needed. N is the number of
!       --  positions to be filled (a minus sign is output even if N is zero
!       --  or negative, but for a positive value, if N is non-positive, then
!       --  the call has no effect).
! 
!       procedure Set_Digs (S, E : Natural);
!       --  Set digits S through E from Digs buffer. No effect if S > E
! 
!       procedure Set_Special_Fill (N : Natural);
!       --  After outputting +Inf, -Inf or NaN, this routine fills out the
!       --  rest of the field with * characters. The argument is the number
!       --  of characters output so far (either 3 or 4)
! 
!       procedure Set_Zeros (N : Integer);
!       --  Set N zeros, no effect if N is negative
! 
!       pragma Inline (Set);
!       pragma Inline (Set_Digs);
!       pragma Inline (Set_Zeros);
! 
!       ------------------
!       -- Adjust_Scale --
!       ------------------
! 
!       procedure Adjust_Scale (S : Natural) is
!          Lo  : Natural;
!          Hi  : Natural;
!          Mid : Natural;
!          XP  : Long_Long_Float;
! 
!       begin
!          --  Cases where scaling up is required
! 
!          if X < Powten (S - 1) then
! 
!             --  What we are looking for is a power of ten to multiply X by
!             --  so that the result lies within the required range.
! 
!             loop
!                XP := X * Powten (Maxpow);
!                exit when XP >= Powten (S - 1) or else Scale < -Maxscaling;
!                X := XP;
!                Scale := Scale - Maxpow;
!             end loop;
! 
!             --  The following exception is only raised in case of erroneous
!             --  execution, where a number was considered valid but still
!             --  fails to scale up. One situation where this can happen is
!             --  when a system which is supposed to be IEEE-compliant, but
!             --  has been reconfigured to flush denormals to zero.
! 
!             if Scale < -Maxscaling then
!                raise Constraint_Error;
!             end if;
! 
!             --  Here we know that we must multiply by at least 10**1 and that
!             --  10**Maxpow takes us too far: binary search to find right one.
! 
!             --  Because of roundoff errors, it is possible for the value
!             --  of XP to be just outside of the interval when Lo >= Hi. In
!             --  that case we adjust explicitly by a factor of 10. This
!             --  can only happen with a value that is very close to an
!             --  exact power of 10.
! 
!             Lo := 1;
!             Hi := Maxpow;
! 
!             loop
!                Mid := (Lo + Hi) / 2;
!                XP := X * Powten (Mid);
! 
!                if XP < Powten (S - 1) then
! 
!                   if Lo >= Hi then
!                      Mid := Mid + 1;
!                      XP := XP * 10.0;
!                      exit;
! 
!                   else
!                      Lo := Mid + 1;
!                   end if;
! 
!                elsif XP >= Powten (S) then
! 
!                   if Lo >= Hi then
!                      Mid := Mid - 1;
!                      XP := XP / 10.0;
!                      exit;
! 
!                   else
!                      Hi := Mid - 1;
!                   end if;
! 
!                else
!                   exit;
!                end if;
!             end loop;
! 
!             X := XP;
!             Scale := Scale - Mid;
! 
!          --  Cases where scaling down is required
! 
!          elsif X >= Powten (S) then
! 
!             --  What we are looking for is a power of ten to divide X by
!             --  so that the result lies within the required range.
! 
!             pragma Assert (Powten (Maxpow) /= 0.0);
! 
!             loop
!                XP := X / Powten (Maxpow);
!                exit when XP < Powten (S) or else Scale > Maxscaling;
!                X := XP;
!                Scale := Scale + Maxpow;
!             end loop;
! 
!             --  The following exception is only raised in case of erroneous
!             --  execution, where a number was considered valid but still
!             --  fails to scale up. One situation where this can happen is
!             --  when a system which is supposed to be IEEE-compliant, but
!             --  has been reconfigured to flush denormals to zero.
! 
!             if Scale > Maxscaling then
!                raise Constraint_Error;
!             end if;
! 
!             --  Here we know that we must divide by at least 10**1 and that
!             --  10**Maxpow takes us too far, binary search to find right one.
! 
!             Lo := 1;
!             Hi := Maxpow;
! 
!             loop
!                Mid := (Lo + Hi) / 2;
!                XP := X / Powten (Mid);
! 
!                if XP < Powten (S - 1) then
! 
!                   if Lo >= Hi then
!                      XP := XP * 10.0;
!                      Mid := Mid - 1;
!                      exit;
! 
!                   else
!                      Hi := Mid - 1;
!                   end if;
! 
!                elsif XP >= Powten (S) then
! 
!                   if Lo >= Hi then
!                      XP := XP / 10.0;
!                      Mid := Mid + 1;
!                      exit;
! 
!                   else
!                      Lo := Mid + 1;
!                   end if;
! 
!                else
!                   exit;
!                end if;
!             end loop;
! 
!             X := XP;
!             Scale := Scale + Mid;
! 
!          --  Here we are already scaled right
! 
!          else
!             null;
!          end if;
! 
!          --  Round, readjusting scale if needed. Note that if a readjustment
!          --  occurs, then it is never necessary to round again, because there
!          --  is no possibility of such a second rounding causing a change.
! 
!          X := X + 0.5;
! 
!          if X >= Powten (S) then
!             X := X / 10.0;
!             Scale := Scale + 1;
!          end if;
! 
!       end Adjust_Scale;
! 
!       ---------------------
!       -- Convert_Integer --
!       ---------------------
! 
!       procedure Convert_Integer is
!       begin
!          --  Use Unsigned routine if possible, since on many machines it will
!          --  be significantly more efficient than the Long_Long_Unsigned one.
! 
!          if X < Powten (Unsdigs) then
!             pragma Assert (X in 0.0 .. Long_Long_Float (Unsigned'Last));
!             Ndigs := 0;
!             Set_Image_Unsigned
!               (Unsigned (Long_Long_Float'Truncation (X)),
!                Digs, Ndigs);
! 
!          --  But if we want more digits than fit in Unsigned, we have to use
!          --  the Long_Long_Unsigned routine after all.
! 
!          else
!             pragma Assert (X < Powten (Maxdigs));
!             pragma Assert
!               (X in 0.0 .. Long_Long_Float (Long_Long_Unsigned'Last));
! 
!             Ndigs := 0;
!             Set_Image_Long_Long_Unsigned
!               (Long_Long_Unsigned (Long_Long_Float'Truncation (X)),
!                Digs, Ndigs);
!          end if;
!       end Convert_Integer;
! 
!       ---------
!       -- Set --
!       ---------
! 
!       procedure Set (C : Character) is
!       begin
!          pragma Assert (P in S'First - 1 .. S'Last - 1);
!          --  No check is done as documented in the header: updating P to point
!          --  to the last character stored, the caller promises that the buffer
!          --  is large enough and no check is made for this. Constraint_Error
!          --  will not necessarily be raised if this requirement is violated,
!          --  since it is perfectly valid to compile this unit with checks off.
!          P := P + 1;
!          S (P) := C;
!       end Set;
! 
!       -------------------------
!       -- Set_Blanks_And_Sign --
!       -------------------------
! 
!       procedure Set_Blanks_And_Sign (N : Integer) is
!       begin
!          if Minus then
!             for J in 1 .. N - 1 loop
!                Set (' ');
!             end loop;
! 
!             Set ('-');
! 
!          else
!             for J in 1 .. N loop
!                Set (' ');
!             end loop;
!          end if;
!       end Set_Blanks_And_Sign;
! 
!       --------------
!       -- Set_Digs --
!       --------------
! 
!       procedure Set_Digs (S, E : Natural) is
!       begin
!          pragma Assert (S >= Digs'First and E <= Digs'Last);
!          --  S and E should be in the Digs array range
!          for J in S .. E loop
!             Set (Digs (J));
!          end loop;
!       end Set_Digs;
! 
!       ----------------------
!       -- Set_Special_Fill --
!       ----------------------
! 
!       procedure Set_Special_Fill (N : Natural) is
!          F : Natural;
! 
!       begin
!          pragma Assert ((Fore + Aft - N + 1) in Natural);
!          --  Fore + Aft - N + 1 should be in the Natural range
!          F := Fore + 1 + Aft - N;
! 
!          if Exp /= 0 then
!             pragma Assert (F + Exp + 1 <= Natural'Last);
!             --  F + Exp + 1 should be in the Natural range
!             F := F + Exp + 1;
!          end if;
! 
!          for J in 1 .. F loop
!             Set ('*');
!          end loop;
!       end Set_Special_Fill;
! 
!       ---------------
!       -- Set_Zeros --
!       ---------------
! 
!       procedure Set_Zeros (N : Integer) is
!       begin
!          for J in 1 .. N loop
!             Set ('0');
!          end loop;
!       end Set_Zeros;
! 
!    --  Start of processing for Set_Image_Real
! 
!    begin
!       --  We call the floating-point processor reset routine so we can be sure
!       --  that the processor is properly set for conversions. This is notably
!       --  needed on Windows, where calls to the operating system randomly reset
!       --  the processor into 64-bit mode.
! 
!       System.Float_Control.Reset;
! 
!       Scale := 0;
! 
!       --  Deal with invalid values first,
! 
!       if not V'Valid then
! 
!          --  Note that we're taking our chances here, as V might be
!          --  an invalid bit pattern resulting from erroneous execution
!          --  (caused by using uninitialized variables for example).
! 
!          --  No matter what, we'll at least get reasonable behavior,
!          --  converting to infinity or some other value, or causing an
!          --  exception to be raised is fine.
! 
!          --  If the following test succeeds, then we definitely have
!          --  an infinite value, so we print Inf.
! 
!          if V > Long_Long_Float'Last then
!             pragma Annotate (CodePeer, False_Positive, "dead code",
!                              "CodePeer analysis ignores NaN and Inf values");
!             pragma Annotate (CodePeer, False_Positive, "test always true",
!                              "CodePeer analysis ignores NaN and Inf values");
!             Set ('+');
!             Set ('I');
!             Set ('n');
!             Set ('f');
!             Set_Special_Fill (4);
!          --  In all other cases we print NaN
! 
!          elsif V < Long_Long_Float'First then
!             Set ('-');
!             Set ('I');
!             Set ('n');
!             Set ('f');
!             Set_Special_Fill (4);
!          else
!             Set ('N');
!             Set ('a');
!             Set ('N');
!             Set_Special_Fill (3);
!          end if;
! 
!          return;
!       end if;
! 
!       --  Positive values
! 
!       if V > 0.0 then
!          X := V;
!          Minus := False;
! 
!       --  Negative values
! 
!       elsif V < 0.0 then
!          X := -V;
!          Minus := True;
! 
!       --  Zero values
! 
!       elsif V = 0.0 then
!          if Long_Long_Float'Signed_Zeros and then Is_Negative (V) then
!             Minus := True;
!          else
!             Minus := False;
!          end if;
! 
!          Set_Blanks_And_Sign (Fore - 1);
!          Set ('0');
!          Set ('.');
!          Set_Zeros (NFrac);
! 
!          if Exp /= 0 then
!             Set ('E');
!             Set ('+');
!             Set_Zeros (Natural'Max (1, Exp - 1));
!          end if;
! 
!          return;
! 
!       else
!          --  It should not be possible for a NaN to end up here.
!          --  Either the 'Valid test has failed, or we have some form
!          --  of erroneous execution. Raise Constraint_Error instead of
!          --  attempting to go ahead printing the value.
! 
!          raise Constraint_Error;
!       end if;
! 
!       --  X and Minus are set here, and X is known to be a valid,
!       --  non-zero floating-point number.
! 
!       --  Case of non-zero value with Exp = 0
! 
!       if Exp = 0 then
! 
!          --  First step is to multiply by 10 ** Nfrac to get an integer
!          --  value to be output, an then add 0.5 to round the result.
! 
!          declare
!             NF : Natural := NFrac;
! 
!          begin
!             loop
!                --  If we are larger than Powten (Maxdigs) now, then
!                --  we have too many significant digits, and we have
!                --  not even finished multiplying by NFrac (NF shows
!                --  the number of unaccounted-for digits).
! 
!                if X >= Powten (Maxdigs) then
! 
!                   --  In this situation, we only to generate a reasonable
!                   --  number of significant digits, and then zeroes after.
!                   --  So first we rescale to get:
! 
!                   --    10 ** (Maxdigs - 1) <= X < 10 ** Maxdigs
! 
!                   --  and then convert the resulting integer
! 
!                   Adjust_Scale (Maxdigs);
!                   Convert_Integer;
! 
!                   --  If that caused rescaling, then add zeros to the end
!                   --  of the number to account for this scaling. Also add
!                   --  zeroes to account for the undone multiplications
! 
!                   for J in 1 .. Scale + NF loop
!                      Ndigs := Ndigs + 1;
!                      pragma Assert (Ndigs <= Digs'Last);
!                      Digs (Ndigs) := '0';
!                   end loop;
! 
!                   exit;
! 
!                --  If multiplication is complete, then convert the resulting
!                --  integer after rounding (note that X is non-negative)
! 
!                elsif NF = 0 then
!                   X := X + 0.5;
!                   Convert_Integer;
!                   exit;
! 
!                --  Otherwise we can go ahead with the multiplication. If it
!                --  can be done in one step, then do it in one step.
! 
!                elsif NF < Maxpow then
!                   X := X * Powten (NF);
!                   NF := 0;
! 
!                --  If it cannot be done in one step, then do partial scaling
! 
!                else
!                   X := X * Powten (Maxpow);
!                   NF := NF - Maxpow;
!                end if;
!             end loop;
!          end;
! 
!          --  If number of available digits is less or equal to NFrac,
!          --  then we need an extra zero before the decimal point.
! 
!          if Ndigs <= NFrac then
!             Set_Blanks_And_Sign (Fore - 1);
!             Set ('0');
!             Set ('.');
!             Set_Zeros (NFrac - Ndigs);
!             Set_Digs (1, Ndigs);
! 
!          --  Normal case with some digits before the decimal point
! 
!          else
!             Set_Blanks_And_Sign (Fore - (Ndigs - NFrac));
!             Set_Digs (1, Ndigs - NFrac);
!             Set ('.');
!             Set_Digs (Ndigs - NFrac + 1, Ndigs);
!          end if;
! 
!       --  Case of non-zero value with non-zero Exp value
! 
!       else
!          --  If NFrac is less than Maxdigs, then all the fraction digits are
!          --  significant, so we can scale the resulting integer accordingly.
! 
!          if NFrac < Maxdigs then
!             Adjust_Scale (NFrac + 1);
!             Convert_Integer;
! 
!          --  Otherwise, we get the maximum number of digits available
! 
!          else
!             Adjust_Scale (Maxdigs);
!             Convert_Integer;
! 
!             for J in 1 .. NFrac - Maxdigs + 1 loop
!                Ndigs := Ndigs + 1;
!                pragma Assert (Ndigs <= Digs'Last);
!                Digs (Ndigs) := '0';
!                Scale := Scale - 1;
!             end loop;
!          end if;
! 
!          Set_Blanks_And_Sign (Fore - 1);
!          Set (Digs (1));
!          Set ('.');
!          Set_Digs (2, Ndigs);
! 
!          --  The exponent is the scaling factor adjusted for the digits
!          --  that we output after the decimal point, since these were
!          --  included in the scaled digits that we output.
! 
!          Expon := Scale + NFrac;
! 
!          Set ('E');
!          Ndigs := 0;
! 
!          if Expon >= 0 then
!             Set ('+');
!             Set_Image_Unsigned (Unsigned (Expon), Digs, Ndigs);
!          else
!             Set ('-');
!             Set_Image_Unsigned (Unsigned (-Expon), Digs, Ndigs);
!          end if;
! 
!          Set_Zeros (Exp - Ndigs - 1);
!          Set_Digs (1, Ndigs);
!       end if;
! 
!    end Set_Image_Real;
  
! end System.Img_Real;
--- 29,36 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package does not require a body, since it is a package renaming. We
! --  provide a dummy file containing a No_Body pragma so that previous versions
! --  of the body (which did exist) will not interfere.
  
! pragma No_Body;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgrea.ads gcc-12.1.0/gcc/ada/libgnat/s-imgrea.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgrea.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgrea.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,84 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Image for fixed and float types (also used for Float_IO/Fixed_IO output)
  
  package System.Img_Real is
     pragma Pure;
  
-    procedure Image_Ordinary_Fixed_Point
-      (V   : Long_Long_Float;
-       S   : in out String;
-       P   : out Natural;
-       Aft : Natural);
-    --  Computes fixed_type'Image (V) and returns the result in S (1 .. P)
-    --  updating P on return. The result is computed according to the rules for
-    --  image for fixed-point types (RM 3.5(34)), where Aft is the value of the
-    --  Aft attribute for the fixed-point type. This function is used only for
-    --  ordinary fixed point (see package System.Img_Dec for handling of decimal
-    --  fixed point). The caller guarantees that S is long enough to hold the
-    --  result and has a lower bound of 1.
-    --
-    --  Remark: This procedure should NOT be called with V = -0.0 or V = +/-Inf,
-    --          The result is irrelevant.
- 
-    procedure Image_Floating_Point
-      (V    : Long_Long_Float;
-       S    : in out String;
-       P    : out Natural;
-       Digs : Natural);
-    --  Computes float_type'Image (V) and returns the result in S (1 .. P)
-    --  updating P on return. The result is computed according to the rules for
-    --  image for floating-point types (RM 3.5(33)), where Digs is the value of
-    --  the Digits attribute for the floating-point type. The caller guarantees
-    --  that S is long enough to hold the result and has a lower bound of 1.
- 
     procedure Set_Image_Real
       (V    : Long_Long_Float;
!       S    : out String;
        P    : in out Natural;
        Fore : Natural;
        Aft  : Natural;
!       Exp  : Natural);
!    --  Sets the image of V starting at S (P + 1), updating P to point to the
!    --  last character stored, the caller promises that the buffer is large
!    --  enough and no check is made for this. Constraint_Error will not
!    --  necessarily be raised if this is violated, since it is perfectly valid
!    --  to compile this unit with checks off). The Fore, Aft and Exp values
!    --  can be set to any valid values for the case of use from Text_IO. Note
!    --  that no space is stored at the start for non-negative values.
! 
!    Max_Real_Image_Length : constant := 5200;
!    --   If Exp is set to zero and Aft is set to Text_IO.Field'Last (i.e., 255)
!    --   then Long_Long_Float'Last generates an image whose length is
!    --   slightly less than 5200.
  
  end System.Img_Real;
--- 29,48 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This obsolete package is preserved for the sake of backward compatibility
! 
! with System.Img_LLF;
  
  package System.Img_Real is
     pragma Pure;
  
     procedure Set_Image_Real
       (V    : Long_Long_Float;
!       S    : in out String;
        P    : in out Natural;
        Fore : Natural;
        Aft  : Natural;
!       Exp  : Natural)
!      renames System.Img_LLF.Set_Image_Long_Long_Float;
  
  end System.Img_Real;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imguns.adb gcc-12.1.0/gcc/ada/libgnat/s-imguns.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imguns.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imguns.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imguns.ads gcc-12.1.0/gcc/ada/libgnat/s-imguns.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imguns.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imguns.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imguti.adb gcc-12.1.0/gcc/ada/libgnat/s-imguti.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imguti.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imguti.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
*************** package body System.Img_Util is
*** 400,403 ****
--- 400,484 ----
        end if;
     end Set_Decimal_Digits;
  
+    --------------------------------
+    -- Set_Floating_Invalid_Value --
+    --------------------------------
+ 
+    procedure Set_Floating_Invalid_Value
+      (V    : Floating_Invalid_Value;
+       S    : out String;
+       P    : in out Natural;
+       Fore : Natural;
+       Aft  : Natural;
+       Exp  : Natural)
+    is
+       procedure Set (C : Character);
+       --  Sets character C in output buffer
+ 
+       procedure Set_Special_Fill (N : Natural);
+       --  After outputting +Inf, -Inf or NaN, this routine fills out the
+       --  rest of the field with * characters. The argument is the number
+       --  of characters output so far (either 3 or 4)
+ 
+       ---------
+       -- Set --
+       ---------
+ 
+       procedure Set (C : Character) is
+       begin
+          pragma Assert (P in S'First - 1 .. S'Last - 1);
+          --  No check is done as documented in the header: updating P to point
+          --  to the last character stored, the caller promises that the buffer
+          --  is large enough and no check is made for this. Constraint_Error
+          --  will not necessarily be raised if this requirement is violated,
+          --  since it is perfectly valid to compile this unit with checks off.
+ 
+          P := P + 1;
+          S (P) := C;
+       end Set;
+ 
+       ----------------------
+       -- Set_Special_Fill --
+       ----------------------
+ 
+       procedure Set_Special_Fill (N : Natural) is
+       begin
+          if Exp /= 0 then
+             for J in N + 1 .. Fore + 1 + Aft + 1 + Exp loop
+                Set ('*');
+             end loop;
+ 
+          else
+             for J in N + 1 .. Fore + 1 + Aft loop
+                Set ('*');
+             end loop;
+          end if;
+       end Set_Special_Fill;
+ 
+    --  Start of processing for Set_Floating_Invalid_Value
+ 
+    begin
+       case V is
+          when Minus_Infinity =>
+             Set ('-');
+             Set ('I');
+             Set ('n');
+             Set ('f');
+             Set_Special_Fill (4);
+ 
+          when Infinity =>
+             Set ('+');
+             Set ('I');
+             Set ('n');
+             Set ('f');
+             Set_Special_Fill (4);
+ 
+          when Not_A_Number =>
+             Set ('N');
+             Set ('a');
+             Set ('N');
+             Set_Special_Fill (3);
+       end case;
+    end Set_Floating_Invalid_Value;
+ 
  end System.Img_Util;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imguti.ads gcc-12.1.0/gcc/ada/libgnat/s-imguti.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imguti.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imguti.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
***************
*** 34,39 ****
--- 34,44 ----
  package System.Img_Util is
     pragma Pure;
  
+    Max_Real_Image_Length : constant := 5200;
+    --  If Exp is set to zero and Aft is set to Text_IO.Field'Last (i.e., 255)
+    --  then Long_Long_Float'Last generates an image whose length is slightly
+    --  less than 5200.
+ 
     procedure Set_Decimal_Digits
       (Digs  : in out String;
        NDigs : Natural;
*************** package System.Img_Util is
*** 58,61 ****
--- 63,81 ----
     --  may destroy the value in Digs, which is why Digs is in-out (this happens
     --  if rounding is required).
  
+    type Floating_Invalid_Value is (Minus_Infinity, Infinity, Not_A_Number);
+ 
+    procedure Set_Floating_Invalid_Value
+      (V    : Floating_Invalid_Value;
+       S    : out String;
+       P    : in out Natural;
+       Fore : Natural;
+       Aft  : Natural;
+       Exp  : Natural);
+    --  Sets the image of a floating-point invalid value, starting at S (P + 1),
+    --  updating P to point to the last character stored. The caller promises
+    --  that the buffer is large enough and therefore no check is made for it.
+    --  Constraint_Error will not necessarily be raised if the requirement is
+    --  violated since it is valid to compile this unit with checks off.
+ 
  end System.Img_Util;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgwch.adb gcc-12.1.0/gcc/ada/libgnat/s-imgwch.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imgwch.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgwch.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgwch.ads gcc-12.1.0/gcc/ada/libgnat/s-imgwch.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgwch.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgwch.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgwiu.adb gcc-12.1.0/gcc/ada/libgnat/s-imgwiu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-imgwiu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgwiu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-imgwiu.ads gcc-12.1.0/gcc/ada/libgnat/s-imgwiu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-imgwiu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-imgwiu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-io.adb gcc-12.1.0/gcc/ada/libgnat/s-io.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-io.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-io.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-io.ads gcc-12.1.0/gcc/ada/libgnat/s-io.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-io.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-io.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-llflex.ads gcc-12.1.0/gcc/ada/libgnat/s-llflex.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-llflex.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-llflex.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-maccod.ads gcc-12.1.0/gcc/ada/libgnat/s-maccod.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-maccod.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-maccod.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-mantis.adb gcc-12.1.0/gcc/ada/libgnat/s-mantis.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-mantis.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-mantis.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-mantis.ads gcc-12.1.0/gcc/ada/libgnat/s-mantis.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-mantis.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-mantis.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-mastop.adb gcc-12.1.0/gcc/ada/libgnat/s-mastop.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-mastop.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-mastop.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                             (Dummy version)                              --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                             (Dummy version)                              --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
***************
*** 33,40 ****
  --  This dummy version of System.Machine_State_Operations is used on targets
  --  for which zero cost exception handling is not implemented.
  
- pragma Compiler_Unit_Warning;
- 
  package body System.Machine_State_Operations is
  
     --  Turn off warnings since many unused parameters
--- 33,38 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-mastop.ads gcc-12.1.0/gcc/ada/libgnat/s-mastop.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-mastop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-mastop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with System.Storage_Elements;
  
  package System.Machine_State_Operations is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-memcop.ads gcc-12.1.0/gcc/ada/libgnat/s-memcop.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-memcop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-memcop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-memory.adb gcc-12.1.0/gcc/ada/libgnat/s-memory.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-memory.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-memory.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
***************
*** 38,45 ****
  --  of task on sjlj runtimes) cannot safely be handled while malloc is
  --  executing.
  
- pragma Compiler_Unit_Warning;
- 
  with System.CRTL;
  with System.Parameters;
  with System.Soft_Links;
--- 38,43 ----
*************** package body System.Memory is
*** 136,142 ****
        Size : size_t)
        return System.Address
     is
!       Result      : System.Address;
     begin
        if Size = size_t'Last then
           raise Storage_Error with "object too large";
--- 134,140 ----
        Size : size_t)
        return System.Address
     is
!       Result : System.Address;
     begin
        if Size = size_t'Last then
           raise Storage_Error with "object too large";
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-memory.ads gcc-12.1.0/gcc/ada/libgnat/s-memory.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-memory.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-memory.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
***************
*** 40,47 ****
  --  This unit may be used directly from an application program by providing
  --  an appropriate WITH, and the interface can be expected to remain stable.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Memory is
     pragma Elaborate_Body;
  
--- 40,45 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-mmap.adb gcc-12.1.0/gcc/ada/libgnat/s-mmap.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-mmap.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-mmap.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
*************** package body System.Mmap is
*** 367,373 ****
        Length  : File_Size := 0;
        Mutable : Boolean := False) return Mapped_Region
     is
!       Region  : Mapped_Region := Invalid_Mapped_Region;
     begin
        Read (File, Region, Offset, Length, Mutable);
        return Region;
--- 367,373 ----
        Length  : File_Size := 0;
        Mutable : Boolean := False) return Mapped_Region
     is
!       Region : Mapped_Region := Invalid_Mapped_Region;
     begin
        Read (File, Region, Offset, Length, Mutable);
        return Region;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-mmap.ads gcc-12.1.0/gcc/ada/libgnat/s-mmap.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-mmap.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-mmap.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-mmauni__long.ads gcc-12.1.0/gcc/ada/libgnat/s-mmauni__long.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-mmauni__long.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-mmauni__long.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-mmosin__mingw.adb gcc-12.1.0/gcc/ada/libgnat/s-mmosin__mingw.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-mmosin__mingw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-mmosin__mingw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-mmosin__mingw.ads gcc-12.1.0/gcc/ada/libgnat/s-mmosin__mingw.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-mmosin__mingw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-mmosin__mingw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-mmosin__unix.adb gcc-12.1.0/gcc/ada/libgnat/s-mmosin__unix.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-mmosin__unix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-mmosin__unix.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
***************
*** 30,36 ****
  ------------------------------------------------------------------------------
  
  with Ada.IO_Exceptions;
- with System; use System;
  
  with System.OS_Lib; use System.OS_Lib;
  with System.Mmap.Unix; use System.Mmap.Unix;
--- 30,35 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-mmosin__unix.ads gcc-12.1.0/gcc/ada/libgnat/s-mmosin__unix.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-mmosin__unix.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-mmosin__unix.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2020, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 2007-2022, AdaCore                     --
  --                                                                          --
  -- This library is free software;  you can redistribute it and/or modify it --
  -- under terms of the  GNU General Public License  as published by the Free --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-multip.adb gcc-12.1.0/gcc/ada/libgnat/s-multip.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-multip.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-multip.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --         Copyright (C) 2010-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-objrea.adb gcc-12.1.0/gcc/ada/libgnat/s-objrea.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-objrea.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-objrea.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2009-2022, 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- --
*************** package body System.Object_Reader is
*** 48,54 ****
     function Trim_Trailing_Nuls (Str : String) return String;
     --  Return a copy of a string with any trailing NUL characters truncated
  
!    procedure Check_Read_Offset (S : in out Mapped_Stream; Size : uint32);
     --  Check that the SIZE bytes at the current offset are still in the stream
  
     -------------------------------------
--- 48,54 ----
     function Trim_Trailing_Nuls (Str : String) return String;
     --  Return a copy of a string with any trailing NUL characters truncated
  
!    procedure Check_Read_Offset (S : Mapped_Stream; Size : uint32);
     --  Check that the SIZE bytes at the current offset are still in the stream
  
     -------------------------------------
*************** package body System.Object_Reader is
*** 79,84 ****
--- 79,85 ----
        EM_SPARCV9     : constant := 43; --  SPARC v9 64-bit
        EM_IA_64       : constant := 50; --  Intel Merced
        EM_X86_64      : constant := 62; --  AMD x86-64 architecture
+       EM_AARCH64     : constant := 183; --  Aarch64
  
        EN_NIDENT  : constant := 16;
  
*************** package body System.Object_Reader is
*** 645,650 ****
--- 646,654 ----
              when EM_ARM =>
                 Res.Arch := ARM;
  
+             when EM_AARCH64 =>
+                Res.Arch := AARCH64;
+ 
              when others =>
                 raise Format_Error with "unrecognized architecture";
           end case;
*************** package body System.Object_Reader is
*** 1468,1474 ****
          (Obj : in out XCOFF32_Object_File;
           Sym : Object_Symbol) return String_Ptr_Len
        is
!          Symbol  : Symbol_Entry;
  
        begin
           Seek (Obj.Symtab_Stream, Sym.Off);
--- 1472,1478 ----
          (Obj : in out XCOFF32_Object_File;
           Sym : Object_Symbol) return String_Ptr_Len
        is
!          Symbol : Symbol_Entry;
  
        begin
           Seek (Obj.Symtab_Stream, Sym.Off);
*************** package body System.Object_Reader is
*** 1816,1822 ****
       (S : in out Mapped_Stream;
        Off : Offset) return String
     is
!       Buf     : Buffer;
  
     begin
        Seek (S, Off);
--- 1820,1826 ----
       (S : in out Mapped_Stream;
        Off : Offset) return String
     is
!       Buf : Buffer;
  
     begin
        Seek (S, Off);
*************** package body System.Object_Reader is
*** 1952,1958 ****
        return To_String_Ptr_Len (Read (S));
     end Read;
  
!    procedure Check_Read_Offset (S : in out Mapped_Stream; Size : uint32) is
     begin
        if S.Off + Offset (Size) > Offset (Last (S.Region)) then
           raise IO_Error with "could not read from object file";
--- 1956,1962 ----
        return To_String_Ptr_Len (Read (S));
     end Read;
  
!    procedure Check_Read_Offset (S : Mapped_Stream; Size : uint32) is
     begin
        if S.Off + Offset (Size) > Offset (Last (S.Region)) then
           raise IO_Error with "could not read from object file";
*************** package body System.Object_Reader is
*** 2060,2066 ****
              Address_32 := Read (S);
              return uint64 (Address_32);
  
!          when IA64
              | PPC64
              | SPARC64
              | x86_64
--- 2064,2071 ----
              Address_32 := Read (S);
              return uint64 (Address_32);
  
!          when AARCH64
!             | IA64
              | PPC64
              | SPARC64
              | x86_64
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-objrea.ads gcc-12.1.0/gcc/ada/libgnat/s-objrea.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-objrea.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-objrea.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
*************** package System.Object_Reader is
*** 120,128 ****
        PPC64,
        --  64-bit PowerPC
  
!       ARM);
        --  32-bit ARM
  
     ------------------
     -- Target types --
     ------------------
--- 120,131 ----
        PPC64,
        --  64-bit PowerPC
  
!       ARM,
        --  32-bit ARM
  
+       AARCH64);
+       --  64-bit ARM
+ 
     ------------------
     -- Target types --
     ------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-optide.adb gcc-12.1.0/gcc/ada/libgnat/s-optide.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-optide.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-optide.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2012-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2012-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-os_lib.adb gcc-12.1.0/gcc/ada/libgnat/s-os_lib.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-os_lib.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-os_lib.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1995-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
***************
*** 29,39 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Unchecked_Conversion;
  with Ada.Unchecked_Deallocation;
- with System; use System;
  with System.Case_Util;
  with System.CRTL;
  with System.Soft_Links;
--- 29,36 ----
*************** package body System.OS_Lib is
*** 133,174 ****
     --  Converts a C String to an Ada String. We could do this making use of
     --  Interfaces.C.Strings but we prefer not to import that entire package
  
-    ---------
-    -- "<" --
-    ---------
- 
-    function "<"  (X, Y : OS_Time) return Boolean is
-    begin
-       return Long_Integer (X) < Long_Integer (Y);
-    end "<";
- 
-    ----------
-    -- "<=" --
-    ----------
- 
-    function "<="  (X, Y : OS_Time) return Boolean is
-    begin
-       return Long_Integer (X) <= Long_Integer (Y);
-    end "<=";
- 
-    ---------
-    -- ">" --
-    ---------
- 
-    function ">"  (X, Y : OS_Time) return Boolean is
-    begin
-       return Long_Integer (X) > Long_Integer (Y);
-    end ">";
- 
-    ----------
-    -- ">=" --
-    ----------
- 
-    function ">="  (X, Y : OS_Time) return Boolean is
-    begin
-       return Long_Integer (X) >= Long_Integer (Y);
-    end ">=";
- 
     -----------------
     -- Args_Length --
     -----------------
--- 130,135 ----
*************** package body System.OS_Lib is
*** 1250,1256 ****
        H  : Hour_Type;
        Mn : Minute_Type;
        S  : Second_Type;
-       pragma Unreferenced (Y, Mo, H, Mn, S);
  
     begin
        GM_Split (Date, Y, Mo, D, H, Mn, S);
--- 1211,1216 ----
*************** package body System.OS_Lib is
*** 1269,1275 ****
        D  : Day_Type;
        Mn : Minute_Type;
        S  : Second_Type;
-       pragma Unreferenced (Y, Mo, D, Mn, S);
  
     begin
        GM_Split (Date, Y, Mo, D, H, Mn, S);
--- 1229,1234 ----
*************** package body System.OS_Lib is
*** 1288,1294 ****
        D  : Day_Type;
        H  : Hour_Type;
        S  : Second_Type;
-       pragma Unreferenced (Y, Mo, D, H, S);
  
     begin
        GM_Split (Date, Y, Mo, D, H, Mn, S);
--- 1247,1252 ----
*************** package body System.OS_Lib is
*** 1307,1313 ****
        H  : Hour_Type;
        Mn : Minute_Type;
        S  : Second_Type;
-       pragma Unreferenced (Y, D, H, Mn, S);
  
     begin
        GM_Split (Date, Y, Mo, D, H, Mn, S);
--- 1265,1270 ----
*************** package body System.OS_Lib is
*** 1326,1332 ****
        D  : Day_Type;
        H  : Hour_Type;
        Mn : Minute_Type;
-       pragma Unreferenced (Y, Mo, D, H, Mn);
  
     begin
        GM_Split (Date, Y, Mo, D, H, Mn, S);
--- 1283,1288 ----
*************** package body System.OS_Lib is
*** 1347,1359 ****
        Second : out Second_Type)
     is
        procedure To_GM_Time
!         (P_Time_T : Address;
!          P_Year   : Address;
!          P_Month  : Address;
!          P_Day    : Address;
!          P_Hours  : Address;
!          P_Mins   : Address;
!          P_Secs   : Address);
        pragma Import (C, To_GM_Time, "__gnat_to_gm_time");
  
        T  : OS_Time := Date;
--- 1303,1315 ----
        Second : out Second_Type)
     is
        procedure To_GM_Time
!         (P_OS_Time : Address;
!          P_Year    : Address;
!          P_Month   : Address;
!          P_Day     : Address;
!          P_Hours   : Address;
!          P_Mins    : Address;
!          P_Secs    : Address);
        pragma Import (C, To_GM_Time, "__gnat_to_gm_time");
  
        T  : OS_Time := Date;
*************** package body System.OS_Lib is
*** 1385,1397 ****
        Locked_Processing : begin
           SSL.Lock_Task.all;
           To_GM_Time
!            (P_Time_T => T'Address,
!             P_Year   => Y'Address,
!             P_Month  => Mo'Address,
!             P_Day    => D'Address,
!             P_Hours  => H'Address,
!             P_Mins   => Mn'Address,
!             P_Secs   => S'Address);
           SSL.Unlock_Task.all;
  
        exception
--- 1341,1353 ----
        Locked_Processing : begin
           SSL.Lock_Task.all;
           To_GM_Time
!            (P_OS_Time => T'Address,
!             P_Year    => Y'Address,
!             P_Month   => Mo'Address,
!             P_Day     => D'Address,
!             P_Hours   => H'Address,
!             P_Mins    => Mn'Address,
!             P_Secs    => S'Address);
           SSL.Unlock_Task.all;
  
        exception
*************** package body System.OS_Lib is
*** 1429,1454 ****
        Second : Second_Type) return OS_Time
     is
        procedure To_OS_Time
!         (P_Time_T : Address;
!          P_Year   : Integer;
!          P_Month  : Integer;
!          P_Day    : Integer;
!          P_Hours  : Integer;
!          P_Mins   : Integer;
!          P_Secs   : Integer);
        pragma Import (C, To_OS_Time, "__gnat_to_os_time");
  
        Result : OS_Time;
  
     begin
        To_OS_Time
!         (P_Time_T => Result'Address,
!          P_Year   => Year - 1900,
!          P_Month  => Month - 1,
!          P_Day    => Day,
!          P_Hours  => Hour,
!          P_Mins   => Minute,
!          P_Secs   => Second);
        return Result;
     end GM_Time_Of;
  
--- 1385,1410 ----
        Second : Second_Type) return OS_Time
     is
        procedure To_OS_Time
!         (P_OS_Time : Address;
!          P_Year    : Integer;
!          P_Month   : Integer;
!          P_Day     : Integer;
!          P_Hours   : Integer;
!          P_Mins    : Integer;
!          P_Secs    : Integer);
        pragma Import (C, To_OS_Time, "__gnat_to_os_time");
  
        Result : OS_Time;
  
     begin
        To_OS_Time
!         (P_OS_Time => Result'Address,
!          P_Year    => Year - 1900,
!          P_Month   => Month - 1,
!          P_Day     => Day,
!          P_Hours   => Hour,
!          P_Mins    => Minute,
!          P_Secs    => Second);
        return Result;
     end GM_Time_Of;
  
*************** package body System.OS_Lib is
*** 1464,1470 ****
        H  : Hour_Type;
        Mn : Minute_Type;
        S  : Second_Type;
-       pragma Unreferenced (Mo, D, H, Mn, S);
  
     begin
        GM_Split (Date, Y, Mo, D, H, Mn, S);
--- 1420,1425 ----
*************** package body System.OS_Lib is
*** 2158,2165 ****
           return On_Windows
             and then not Is_With_Drive (Name)
             and then (Name'Length < 2 -- not \\name case
!                      or else Name (Name'First .. Name'First + 1)
!                              /= Directory_Separator & Directory_Separator);
        end Missed_Drive_Letter;
  
        -----------------
--- 2113,2122 ----
           return On_Windows
             and then not Is_With_Drive (Name)
             and then (Name'Length < 2 -- not \\name case
!                      or else Name (Name'First)
!                              /= Directory_Separator
!                      or else Name (Name'First + 1)
!                              /= Directory_Separator);
        end Missed_Drive_Letter;
  
        -----------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-os_lib.ads gcc-12.1.0/gcc/ada/libgnat/s-os_lib.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-os_lib.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-os_lib.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
***************
*** 48,56 ****
  --  be used by other predefined packages. User access to this package is via
  --  a renaming of this package in GNAT.OS_Lib (file g-os_lib.ads).
  
- pragma Compiler_Unit_Warning;
- 
- with System;
  with System.Strings;
  
  package System.OS_Lib is
--- 48,53 ----
*************** package System.OS_Lib is
*** 164,171 ****
     --  component parts to be interpreted in the local time zone, and returns
     --  an OS_Time. Returns Invalid_Time if the creation fails.
  
!    subtype time_t is Long_Integer;
!    --  C time_t type of the time representation
  
     function To_C (Time : OS_Time) return time_t;
     --  Convert OS_Time to C time_t type
--- 161,180 ----
     --  component parts to be interpreted in the local time zone, and returns
     --  an OS_Time. Returns Invalid_Time if the creation fails.
  
!    ------------------
!    -- Time_t Stuff --
!    ------------------
! 
!    --  Note: Do not use time_t in the compiler and host-based tools; instead
!    --  use OS_Time.
! 
!    subtype time_t is Long_Long_Integer;
!    --  C time_t can be either long or long long, so we choose the Ada
!    --  equivalent of the latter because eventually that will be the
!    --  type used out of necessity. This may affect some user code on 32-bit
!    --  targets that have not yet migrated to the Posix 2008 standard,
!    --  particularly pre version 5 32-bit Linux. Do not change this
!    --  declaration without coordinating it with conversions in Ada.Calendar.
  
     function To_C (Time : OS_Time) return time_t;
     --  Convert OS_Time to C time_t type
*************** private
*** 1098,1121 ****
     pragma Import (C, Current_Process_Id, "__gnat_current_process_id");
  
     type OS_Time is
!      range -(2 ** (Standard'Address_Size - Integer'(1))) ..
!            +(2 ** (Standard'Address_Size - Integer'(1)) - 1);
     --  Type used for timestamps in the compiler. This type is used to hold
     --  time stamps, but may have a different representation than C's time_t.
     --  This type needs to match the declaration of OS_Time in adaint.h.
  
-    --  Add pragma Inline statements for comparison operations on OS_Time. It
-    --  would actually be nice to use pragma Import (Intrinsic) here, but this
-    --  was not properly supported till GNAT 3.15a, so that would cause
-    --  bootstrap path problems. To be changed later ???
- 
     Invalid_Time : constant OS_Time := -1;
     --  This value should match the return value from __gnat_file_time_*
  
!    pragma Inline ("<");
!    pragma Inline (">");
!    pragma Inline ("<=");
!    pragma Inline (">=");
     pragma Inline (To_C);
     pragma Inline (To_Ada);
  
--- 1107,1124 ----
     pragma Import (C, Current_Process_Id, "__gnat_current_process_id");
  
     type OS_Time is
!      range -(2 ** 63) ..  +(2 ** 63 - 1);
     --  Type used for timestamps in the compiler. This type is used to hold
     --  time stamps, but may have a different representation than C's time_t.
     --  This type needs to match the declaration of OS_Time in adaint.h.
  
     Invalid_Time : constant OS_Time := -1;
     --  This value should match the return value from __gnat_file_time_*
  
!    pragma Import (Intrinsic, "<");
!    pragma Import (Intrinsic, ">");
!    pragma Import (Intrinsic, "<=");
!    pragma Import (Intrinsic, ">=");
     pragma Inline (To_C);
     pragma Inline (To_Ada);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-osprim.ads gcc-12.1.0/gcc/ada/libgnat/s-osprim.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-osprim.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-osprim.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-osprim__darwin.adb gcc-12.1.0/gcc/ada/libgnat/s-osprim__darwin.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-osprim__darwin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-osprim__darwin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
***************
*** 31,36 ****
--- 31,37 ----
  
  --  This version is for darwin
  
+ with System.Parameters;
  package body System.OS_Primitives is
  
     --  ??? These definitions are duplicated from System.OS_Interface
*************** package body System.OS_Primitives is
*** 45,51 ****
     pragma Convention (C, struct_timezone);
     type struct_timezone_ptr is access all struct_timezone;
  
!    type time_t is new Long_Integer;
  
     type struct_timeval is record
        tv_sec       : time_t;
--- 46,53 ----
     pragma Convention (C, struct_timezone);
     type struct_timezone_ptr is access all struct_timezone;
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type struct_timeval is record
        tv_sec       : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-osprim__lynxos.ads gcc-12.1.0/gcc/ada/libgnat/s-osprim__lynxos.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-osprim__lynxos.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-osprim__lynxos.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-osprim__mingw.adb gcc-12.1.0/gcc/ada/libgnat/s-osprim__mingw.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-osprim__mingw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-osprim__mingw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-osprim__posix.adb gcc-12.1.0/gcc/ada/libgnat/s-osprim__posix.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-osprim__posix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-osprim__posix.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
***************
*** 30,35 ****
--- 30,36 ----
  ------------------------------------------------------------------------------
  
  --  This version is for POSIX-like operating systems
+ with System.Parameters;
  
  package body System.OS_Primitives is
  
*************** package body System.OS_Primitives is
*** 38,44 ****
     --  these declarations in System.OS_Interface and move these ones in
     --  the spec.
  
!    type time_t is new Long_Integer;
  
     type timespec is record
        tv_sec  : time_t;
--- 39,46 ----
     --  these declarations in System.OS_Interface and move these ones in
     --  the spec.
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-osprim__posix2008.adb gcc-12.1.0/gcc/ada/libgnat/s-osprim__posix2008.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-osprim__posix2008.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-osprim__posix2008.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
***************
*** 33,38 ****
--- 33,39 ----
  
  with System.CRTL;
  with System.OS_Constants;
+ with System.Parameters;
  package body System.OS_Primitives is
  
     subtype int is System.CRTL.int;
*************** package body System.OS_Primitives is
*** 41,47 ****
     --  we don't want to depend on any package. Consider removing these
     --  declarations in System.OS_Interface and move these ones to the spec.
  
!    type time_t is new System.CRTL.int64;
  
     type timespec is record
        tv_sec  : time_t;
--- 42,49 ----
     --  we don't want to depend on any package. Consider removing these
     --  declarations in System.OS_Interface and move these ones to the spec.
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-osprim__rtems.adb gcc-12.1.0/gcc/ada/libgnat/s-osprim__rtems.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-osprim__rtems.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-osprim__rtems.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
***************
*** 31,36 ****
--- 31,37 ----
  
  --  This version is for POSIX-like operating systems
  
+ with System.Parameters;
  package body System.OS_Primitives is
  
     --  ??? These definitions are duplicated from System.OS_Interface
*************** package body System.OS_Primitives is
*** 38,44 ****
     --  these declarations in System.OS_Interface and move these ones in
     --  the spec.
  
!    type time_t is new Long_Long_Integer;
  
     type timespec is record
        tv_sec  : time_t;
--- 39,46 ----
     --  these declarations in System.OS_Interface and move these ones in
     --  the spec.
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!       .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-osprim__solaris.adb gcc-12.1.0/gcc/ada/libgnat/s-osprim__solaris.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-osprim__solaris.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-osprim__solaris.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-osprim__unix.adb gcc-12.1.0/gcc/ada/libgnat/s-osprim__unix.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-osprim__unix.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-osprim__unix.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-osprim__vxworks.adb gcc-12.1.0/gcc/ada/libgnat/s-osprim__vxworks.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-osprim__vxworks.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-osprim__vxworks.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,162 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
- --                                                                          --
- --                  S Y S T E M . O S _ P R I M I T I V E S                 --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1998-2020, 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 version is for VxWorks targets
- 
- with System.OS_Interface;
- --  Since the thread library is part of the VxWorks kernel, using OS_Interface
- --  is not a problem here, as long as we only use System.OS_Interface as a
- --  set of C imported routines: using Ada routines from this package would
- --  create a dependency on libgnarl in libgnat, which is not desirable.
- 
- with System.OS_Constants;
- with Interfaces.C;
- 
- package body System.OS_Primitives is
- 
-    use System.OS_Interface;
-    use type Interfaces.C.int;
- 
-    package OSC renames System.OS_Constants;
- 
-    ------------------------
-    -- Internal functions --
-    ------------------------
- 
-    function To_Clock_Ticks (D : Duration) return int;
-    --  Convert a duration value (in seconds) into clock ticks.
-    --  Note that this routine is duplicated from System.OS_Interface since
-    --  as explained above, we do not want to depend on libgnarl
- 
-    function To_Clock_Ticks (D : Duration) return int is
-       Ticks          : Long_Long_Integer;
-       Rate_Duration  : Duration;
-       Ticks_Duration : Duration;
- 
-    begin
-       if D < 0.0 then
-          return -1;
-       end if;
- 
-       --  Ensure that the duration can be converted to ticks
-       --  at the current clock tick rate without overflowing.
- 
-       Rate_Duration := Duration (sysClkRateGet);
- 
-       if D > (Duration'Last / Rate_Duration) then
-          Ticks := Long_Long_Integer (int'Last);
-       else
-          Ticks_Duration := D * Rate_Duration;
-          Ticks := Long_Long_Integer (Ticks_Duration);
- 
-          if Ticks_Duration > Duration (Ticks) then
-             Ticks := Ticks + 1;
-          end if;
- 
-          if Ticks > Long_Long_Integer (int'Last) then
-             Ticks := Long_Long_Integer (int'Last);
-          end if;
-       end if;
- 
-       return int (Ticks);
-    end To_Clock_Ticks;
- 
-    -----------
-    -- Clock --
-    -----------
- 
-    function Clock return Duration is
-       TS     : aliased timespec;
-       Result : int;
-    begin
-       Result := clock_gettime (OSC.CLOCK_RT_Ada, TS'Unchecked_Access);
-       pragma Assert (Result = 0);
-       return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9;
-    end Clock;
- 
-    -----------------
-    -- Timed_Delay --
-    -----------------
- 
-    procedure Timed_Delay
-      (Time : Duration;
-       Mode : Integer)
-    is
-       Rel_Time   : Duration;
-       Abs_Time   : Duration;
-       Base_Time  : constant Duration := Clock;
-       Check_Time : Duration := Base_Time;
-       Ticks      : int;
- 
-       Result     : int;
-       pragma Unreferenced (Result);
- 
-    begin
-       if Mode = Relative then
-          Rel_Time := Time;
-          Abs_Time := Time + Check_Time;
-       else
-          Rel_Time := Time - Check_Time;
-          Abs_Time := Time;
-       end if;
- 
-       if Rel_Time > 0.0 then
-          loop
-             Ticks := To_Clock_Ticks (Rel_Time);
- 
-             if Mode = Relative and then Ticks < int'Last then
-                --  The first tick will delay anytime between 0 and
-                --  1 / sysClkRateGet seconds, so we need to add one to
-                --  be on the safe side.
- 
-                Ticks := Ticks + 1;
-             end if;
- 
-             Result := taskDelay (Ticks);
-             Check_Time := Clock;
- 
-             exit when Abs_Time <= Check_Time or else Check_Time < Base_Time;
- 
-             Rel_Time := Abs_Time - Check_Time;
-          end loop;
-       end if;
-    end Timed_Delay;
- 
-    ----------------
-    -- Initialize --
-    ----------------
- 
-    procedure Initialize is
-    begin
-       null;
-    end Initialize;
- 
- end System.OS_Primitives;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-osprim__x32.adb gcc-12.1.0/gcc/ada/libgnat/s-osprim__x32.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-osprim__x32.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-osprim__x32.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --             Copyright (C) 2013-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --             Copyright (C) 2013-2022, 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- --
***************
*** 31,36 ****
--- 31,38 ----
  
  --  This version is for Linux/x32
  
+ with System.Parameters;
+ 
  package body System.OS_Primitives is
  
     --  ??? These definitions are duplicated from System.OS_Interface
*************** package body System.OS_Primitives is
*** 38,44 ****
     --  these declarations in System.OS_Interface and move these ones in
     --  the spec.
  
!    type time_t is new Long_Long_Integer;
  
     type timespec is record
        tv_sec  : time_t;
--- 40,47 ----
     --  these declarations in System.OS_Interface and move these ones in
     --  the spec.
  
!    type time_t is range -2 ** (System.Parameters.time_t_bits - 1)
!      .. 2 ** (System.Parameters.time_t_bits - 1) - 1;
  
     type timespec is record
        tv_sec  : time_t;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-osvers__vxworks-653.ads gcc-12.1.0/gcc/ada/libgnat/s-osvers__vxworks-653.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-osvers__vxworks-653.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-osvers__vxworks-653.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,38 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                      GNAT RUN-TIME LIBRARY COMPONENTS                    --
- --                                                                          --
- --                      S Y S T E M . O S _ V E R S I O N                   --
- --                                                                          --
- --                                  S p e c                                 --
- --                                                                          --
- --                      Copyright (C) 2010-2020, AdaCore                    --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the VxWorks 653 Partition OS version of this file. If you add an OS
- --  variant please be sure to update type OS_Version in all variants of this
- --  file, which is part of the Level A certified run-time libraries.
- 
- package System.OS_Versions is
-    pragma Pure (System.OS_Versions);
-    type OS_Version is
-      (LynxOS_178, VxWorks_Cert, VxWorks_Cert_RTP, VxWorks_653, VxWorks_MILS);
-    OS : constant OS_Version := VxWorks_653;
- end System.OS_Versions;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack03.adb gcc-12.1.0/gcc/ada/libgnat/s-pack03.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack03.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack03.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack03.ads gcc-12.1.0/gcc/ada/libgnat/s-pack03.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack03.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack03.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack05.adb gcc-12.1.0/gcc/ada/libgnat/s-pack05.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack05.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack05.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack05.ads gcc-12.1.0/gcc/ada/libgnat/s-pack05.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack05.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack05.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack06.adb gcc-12.1.0/gcc/ada/libgnat/s-pack06.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack06.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack06.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack06.ads gcc-12.1.0/gcc/ada/libgnat/s-pack06.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack06.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack06.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack07.adb gcc-12.1.0/gcc/ada/libgnat/s-pack07.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack07.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack07.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack07.ads gcc-12.1.0/gcc/ada/libgnat/s-pack07.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack07.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack07.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack09.adb gcc-12.1.0/gcc/ada/libgnat/s-pack09.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack09.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack09.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack09.ads gcc-12.1.0/gcc/ada/libgnat/s-pack09.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack09.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack09.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack10.adb gcc-12.1.0/gcc/ada/libgnat/s-pack10.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack10.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack10.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack10.ads gcc-12.1.0/gcc/ada/libgnat/s-pack10.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack10.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack10.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack100.adb gcc-12.1.0/gcc/ada/libgnat/s-pack100.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack100.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack100.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack100.ads gcc-12.1.0/gcc/ada/libgnat/s-pack100.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack100.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack100.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack101.adb gcc-12.1.0/gcc/ada/libgnat/s-pack101.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack101.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack101.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack101.ads gcc-12.1.0/gcc/ada/libgnat/s-pack101.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack101.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack101.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack102.adb gcc-12.1.0/gcc/ada/libgnat/s-pack102.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack102.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack102.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack102.ads gcc-12.1.0/gcc/ada/libgnat/s-pack102.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack102.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack102.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack103.adb gcc-12.1.0/gcc/ada/libgnat/s-pack103.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack103.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack103.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack103.ads gcc-12.1.0/gcc/ada/libgnat/s-pack103.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack103.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack103.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack104.adb gcc-12.1.0/gcc/ada/libgnat/s-pack104.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack104.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack104.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack104.ads gcc-12.1.0/gcc/ada/libgnat/s-pack104.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack104.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack104.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack105.adb gcc-12.1.0/gcc/ada/libgnat/s-pack105.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack105.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack105.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack105.ads gcc-12.1.0/gcc/ada/libgnat/s-pack105.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack105.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack105.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack106.adb gcc-12.1.0/gcc/ada/libgnat/s-pack106.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack106.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack106.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack106.ads gcc-12.1.0/gcc/ada/libgnat/s-pack106.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack106.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack106.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack107.adb gcc-12.1.0/gcc/ada/libgnat/s-pack107.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack107.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack107.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack107.ads gcc-12.1.0/gcc/ada/libgnat/s-pack107.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack107.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack107.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack108.adb gcc-12.1.0/gcc/ada/libgnat/s-pack108.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack108.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack108.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack108.ads gcc-12.1.0/gcc/ada/libgnat/s-pack108.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack108.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack108.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack109.adb gcc-12.1.0/gcc/ada/libgnat/s-pack109.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack109.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack109.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack109.ads gcc-12.1.0/gcc/ada/libgnat/s-pack109.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack109.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack109.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack11.adb gcc-12.1.0/gcc/ada/libgnat/s-pack11.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack11.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack11.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack11.ads gcc-12.1.0/gcc/ada/libgnat/s-pack11.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack11.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack11.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack110.adb gcc-12.1.0/gcc/ada/libgnat/s-pack110.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack110.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack110.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack110.ads gcc-12.1.0/gcc/ada/libgnat/s-pack110.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack110.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack110.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack111.adb gcc-12.1.0/gcc/ada/libgnat/s-pack111.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack111.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack111.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack111.ads gcc-12.1.0/gcc/ada/libgnat/s-pack111.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack111.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack111.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack112.adb gcc-12.1.0/gcc/ada/libgnat/s-pack112.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack112.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack112.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack112.ads gcc-12.1.0/gcc/ada/libgnat/s-pack112.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack112.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack112.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack113.adb gcc-12.1.0/gcc/ada/libgnat/s-pack113.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack113.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack113.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack113.ads gcc-12.1.0/gcc/ada/libgnat/s-pack113.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack113.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack113.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack114.adb gcc-12.1.0/gcc/ada/libgnat/s-pack114.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack114.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack114.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack114.ads gcc-12.1.0/gcc/ada/libgnat/s-pack114.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack114.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack114.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack115.adb gcc-12.1.0/gcc/ada/libgnat/s-pack115.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack115.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack115.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack115.ads gcc-12.1.0/gcc/ada/libgnat/s-pack115.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack115.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack115.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack116.adb gcc-12.1.0/gcc/ada/libgnat/s-pack116.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack116.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack116.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack116.ads gcc-12.1.0/gcc/ada/libgnat/s-pack116.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack116.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack116.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack117.adb gcc-12.1.0/gcc/ada/libgnat/s-pack117.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack117.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack117.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack117.ads gcc-12.1.0/gcc/ada/libgnat/s-pack117.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack117.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack117.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack118.adb gcc-12.1.0/gcc/ada/libgnat/s-pack118.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack118.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack118.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack118.ads gcc-12.1.0/gcc/ada/libgnat/s-pack118.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack118.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack118.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack119.adb gcc-12.1.0/gcc/ada/libgnat/s-pack119.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack119.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack119.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack119.ads gcc-12.1.0/gcc/ada/libgnat/s-pack119.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack119.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack119.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack12.adb gcc-12.1.0/gcc/ada/libgnat/s-pack12.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack12.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack12.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack12.ads gcc-12.1.0/gcc/ada/libgnat/s-pack12.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack12.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack12.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack120.adb gcc-12.1.0/gcc/ada/libgnat/s-pack120.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack120.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack120.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack120.ads gcc-12.1.0/gcc/ada/libgnat/s-pack120.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack120.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack120.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack121.adb gcc-12.1.0/gcc/ada/libgnat/s-pack121.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack121.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack121.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack121.ads gcc-12.1.0/gcc/ada/libgnat/s-pack121.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack121.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack121.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack122.adb gcc-12.1.0/gcc/ada/libgnat/s-pack122.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack122.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack122.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack122.ads gcc-12.1.0/gcc/ada/libgnat/s-pack122.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack122.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack122.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack123.adb gcc-12.1.0/gcc/ada/libgnat/s-pack123.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack123.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack123.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack123.ads gcc-12.1.0/gcc/ada/libgnat/s-pack123.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack123.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack123.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack124.adb gcc-12.1.0/gcc/ada/libgnat/s-pack124.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack124.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack124.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack124.ads gcc-12.1.0/gcc/ada/libgnat/s-pack124.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack124.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack124.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack125.adb gcc-12.1.0/gcc/ada/libgnat/s-pack125.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack125.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack125.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack125.ads gcc-12.1.0/gcc/ada/libgnat/s-pack125.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack125.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack125.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack126.adb gcc-12.1.0/gcc/ada/libgnat/s-pack126.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack126.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack126.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack126.ads gcc-12.1.0/gcc/ada/libgnat/s-pack126.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack126.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack126.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack127.adb gcc-12.1.0/gcc/ada/libgnat/s-pack127.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack127.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack127.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack127.ads gcc-12.1.0/gcc/ada/libgnat/s-pack127.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack127.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack127.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack13.adb gcc-12.1.0/gcc/ada/libgnat/s-pack13.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack13.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack13.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack13.ads gcc-12.1.0/gcc/ada/libgnat/s-pack13.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack13.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack13.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack14.adb gcc-12.1.0/gcc/ada/libgnat/s-pack14.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack14.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack14.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack14.ads gcc-12.1.0/gcc/ada/libgnat/s-pack14.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack14.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack14.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack15.adb gcc-12.1.0/gcc/ada/libgnat/s-pack15.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack15.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack15.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack15.ads gcc-12.1.0/gcc/ada/libgnat/s-pack15.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack15.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack15.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack17.adb gcc-12.1.0/gcc/ada/libgnat/s-pack17.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack17.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack17.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack17.ads gcc-12.1.0/gcc/ada/libgnat/s-pack17.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack17.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack17.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack18.adb gcc-12.1.0/gcc/ada/libgnat/s-pack18.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack18.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack18.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack18.ads gcc-12.1.0/gcc/ada/libgnat/s-pack18.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack18.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack18.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack19.adb gcc-12.1.0/gcc/ada/libgnat/s-pack19.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack19.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack19.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack19.ads gcc-12.1.0/gcc/ada/libgnat/s-pack19.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack19.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack19.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack20.adb gcc-12.1.0/gcc/ada/libgnat/s-pack20.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack20.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack20.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack20.ads gcc-12.1.0/gcc/ada/libgnat/s-pack20.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack20.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack20.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack21.adb gcc-12.1.0/gcc/ada/libgnat/s-pack21.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack21.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack21.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack21.ads gcc-12.1.0/gcc/ada/libgnat/s-pack21.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack21.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack21.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack22.adb gcc-12.1.0/gcc/ada/libgnat/s-pack22.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack22.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack22.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack22.ads gcc-12.1.0/gcc/ada/libgnat/s-pack22.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack22.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack22.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack23.adb gcc-12.1.0/gcc/ada/libgnat/s-pack23.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack23.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack23.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack23.ads gcc-12.1.0/gcc/ada/libgnat/s-pack23.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack23.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack23.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack24.adb gcc-12.1.0/gcc/ada/libgnat/s-pack24.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack24.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack24.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack24.ads gcc-12.1.0/gcc/ada/libgnat/s-pack24.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack24.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack24.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack25.adb gcc-12.1.0/gcc/ada/libgnat/s-pack25.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack25.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack25.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack25.ads gcc-12.1.0/gcc/ada/libgnat/s-pack25.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack25.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack25.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack26.adb gcc-12.1.0/gcc/ada/libgnat/s-pack26.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack26.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack26.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack26.ads gcc-12.1.0/gcc/ada/libgnat/s-pack26.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack26.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack26.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack27.adb gcc-12.1.0/gcc/ada/libgnat/s-pack27.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack27.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack27.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack27.ads gcc-12.1.0/gcc/ada/libgnat/s-pack27.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack27.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack27.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack28.adb gcc-12.1.0/gcc/ada/libgnat/s-pack28.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack28.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack28.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack28.ads gcc-12.1.0/gcc/ada/libgnat/s-pack28.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack28.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack28.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack29.adb gcc-12.1.0/gcc/ada/libgnat/s-pack29.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack29.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack29.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack29.ads gcc-12.1.0/gcc/ada/libgnat/s-pack29.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack29.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack29.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack30.adb gcc-12.1.0/gcc/ada/libgnat/s-pack30.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack30.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack30.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack30.ads gcc-12.1.0/gcc/ada/libgnat/s-pack30.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack30.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack30.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack31.adb gcc-12.1.0/gcc/ada/libgnat/s-pack31.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack31.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack31.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack31.ads gcc-12.1.0/gcc/ada/libgnat/s-pack31.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack31.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack31.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack33.adb gcc-12.1.0/gcc/ada/libgnat/s-pack33.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack33.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack33.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack33.ads gcc-12.1.0/gcc/ada/libgnat/s-pack33.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack33.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack33.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack34.adb gcc-12.1.0/gcc/ada/libgnat/s-pack34.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack34.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack34.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack34.ads gcc-12.1.0/gcc/ada/libgnat/s-pack34.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack34.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack34.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack35.adb gcc-12.1.0/gcc/ada/libgnat/s-pack35.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack35.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack35.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack35.ads gcc-12.1.0/gcc/ada/libgnat/s-pack35.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack35.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack35.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack36.adb gcc-12.1.0/gcc/ada/libgnat/s-pack36.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack36.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack36.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack36.ads gcc-12.1.0/gcc/ada/libgnat/s-pack36.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack36.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack36.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack37.adb gcc-12.1.0/gcc/ada/libgnat/s-pack37.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack37.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack37.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack37.ads gcc-12.1.0/gcc/ada/libgnat/s-pack37.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack37.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack37.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack38.adb gcc-12.1.0/gcc/ada/libgnat/s-pack38.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack38.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack38.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack38.ads gcc-12.1.0/gcc/ada/libgnat/s-pack38.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack38.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack38.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack39.adb gcc-12.1.0/gcc/ada/libgnat/s-pack39.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack39.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack39.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack39.ads gcc-12.1.0/gcc/ada/libgnat/s-pack39.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack39.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack39.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack40.adb gcc-12.1.0/gcc/ada/libgnat/s-pack40.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack40.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack40.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack40.ads gcc-12.1.0/gcc/ada/libgnat/s-pack40.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack40.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack40.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack41.adb gcc-12.1.0/gcc/ada/libgnat/s-pack41.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack41.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack41.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack41.ads gcc-12.1.0/gcc/ada/libgnat/s-pack41.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack41.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack41.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack42.adb gcc-12.1.0/gcc/ada/libgnat/s-pack42.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack42.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack42.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack42.ads gcc-12.1.0/gcc/ada/libgnat/s-pack42.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack42.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack42.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack43.adb gcc-12.1.0/gcc/ada/libgnat/s-pack43.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack43.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack43.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack43.ads gcc-12.1.0/gcc/ada/libgnat/s-pack43.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack43.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack43.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack44.adb gcc-12.1.0/gcc/ada/libgnat/s-pack44.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack44.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack44.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack44.ads gcc-12.1.0/gcc/ada/libgnat/s-pack44.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack44.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack44.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack45.adb gcc-12.1.0/gcc/ada/libgnat/s-pack45.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack45.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack45.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack45.ads gcc-12.1.0/gcc/ada/libgnat/s-pack45.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack45.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack45.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack46.adb gcc-12.1.0/gcc/ada/libgnat/s-pack46.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack46.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack46.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack46.ads gcc-12.1.0/gcc/ada/libgnat/s-pack46.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack46.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack46.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack47.adb gcc-12.1.0/gcc/ada/libgnat/s-pack47.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack47.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack47.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack47.ads gcc-12.1.0/gcc/ada/libgnat/s-pack47.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack47.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack47.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack48.adb gcc-12.1.0/gcc/ada/libgnat/s-pack48.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack48.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack48.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack48.ads gcc-12.1.0/gcc/ada/libgnat/s-pack48.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack48.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack48.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack49.adb gcc-12.1.0/gcc/ada/libgnat/s-pack49.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack49.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack49.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack49.ads gcc-12.1.0/gcc/ada/libgnat/s-pack49.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack49.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack49.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack50.adb gcc-12.1.0/gcc/ada/libgnat/s-pack50.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack50.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack50.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack50.ads gcc-12.1.0/gcc/ada/libgnat/s-pack50.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack50.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack50.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack51.adb gcc-12.1.0/gcc/ada/libgnat/s-pack51.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack51.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack51.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack51.ads gcc-12.1.0/gcc/ada/libgnat/s-pack51.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack51.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack51.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack52.adb gcc-12.1.0/gcc/ada/libgnat/s-pack52.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack52.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack52.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack52.ads gcc-12.1.0/gcc/ada/libgnat/s-pack52.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack52.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack52.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack53.adb gcc-12.1.0/gcc/ada/libgnat/s-pack53.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack53.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack53.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack53.ads gcc-12.1.0/gcc/ada/libgnat/s-pack53.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack53.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack53.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack54.adb gcc-12.1.0/gcc/ada/libgnat/s-pack54.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack54.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack54.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack54.ads gcc-12.1.0/gcc/ada/libgnat/s-pack54.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack54.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack54.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack55.adb gcc-12.1.0/gcc/ada/libgnat/s-pack55.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack55.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack55.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack55.ads gcc-12.1.0/gcc/ada/libgnat/s-pack55.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack55.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack55.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack56.adb gcc-12.1.0/gcc/ada/libgnat/s-pack56.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack56.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack56.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack56.ads gcc-12.1.0/gcc/ada/libgnat/s-pack56.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack56.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack56.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack57.adb gcc-12.1.0/gcc/ada/libgnat/s-pack57.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack57.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack57.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack57.ads gcc-12.1.0/gcc/ada/libgnat/s-pack57.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack57.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack57.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack58.adb gcc-12.1.0/gcc/ada/libgnat/s-pack58.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack58.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack58.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack58.ads gcc-12.1.0/gcc/ada/libgnat/s-pack58.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack58.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack58.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack59.adb gcc-12.1.0/gcc/ada/libgnat/s-pack59.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack59.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack59.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack59.ads gcc-12.1.0/gcc/ada/libgnat/s-pack59.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack59.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack59.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack60.adb gcc-12.1.0/gcc/ada/libgnat/s-pack60.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack60.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack60.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack60.ads gcc-12.1.0/gcc/ada/libgnat/s-pack60.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack60.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack60.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack61.adb gcc-12.1.0/gcc/ada/libgnat/s-pack61.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack61.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack61.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack61.ads gcc-12.1.0/gcc/ada/libgnat/s-pack61.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack61.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack61.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack62.adb gcc-12.1.0/gcc/ada/libgnat/s-pack62.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack62.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack62.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack62.ads gcc-12.1.0/gcc/ada/libgnat/s-pack62.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack62.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack62.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack63.adb gcc-12.1.0/gcc/ada/libgnat/s-pack63.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack63.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack63.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack63.ads gcc-12.1.0/gcc/ada/libgnat/s-pack63.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack63.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack63.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack65.adb gcc-12.1.0/gcc/ada/libgnat/s-pack65.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack65.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack65.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack65.ads gcc-12.1.0/gcc/ada/libgnat/s-pack65.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack65.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack65.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack66.adb gcc-12.1.0/gcc/ada/libgnat/s-pack66.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack66.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack66.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack66.ads gcc-12.1.0/gcc/ada/libgnat/s-pack66.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack66.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack66.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack67.adb gcc-12.1.0/gcc/ada/libgnat/s-pack67.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack67.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack67.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack67.ads gcc-12.1.0/gcc/ada/libgnat/s-pack67.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack67.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack67.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack68.adb gcc-12.1.0/gcc/ada/libgnat/s-pack68.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack68.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack68.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack68.ads gcc-12.1.0/gcc/ada/libgnat/s-pack68.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack68.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack68.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack69.adb gcc-12.1.0/gcc/ada/libgnat/s-pack69.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack69.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack69.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack69.ads gcc-12.1.0/gcc/ada/libgnat/s-pack69.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack69.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack69.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack70.adb gcc-12.1.0/gcc/ada/libgnat/s-pack70.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack70.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack70.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack70.ads gcc-12.1.0/gcc/ada/libgnat/s-pack70.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack70.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack70.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack71.adb gcc-12.1.0/gcc/ada/libgnat/s-pack71.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack71.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack71.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack71.ads gcc-12.1.0/gcc/ada/libgnat/s-pack71.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack71.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack71.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack72.adb gcc-12.1.0/gcc/ada/libgnat/s-pack72.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack72.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack72.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack72.ads gcc-12.1.0/gcc/ada/libgnat/s-pack72.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack72.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack72.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack73.adb gcc-12.1.0/gcc/ada/libgnat/s-pack73.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack73.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack73.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack73.ads gcc-12.1.0/gcc/ada/libgnat/s-pack73.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack73.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack73.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack74.adb gcc-12.1.0/gcc/ada/libgnat/s-pack74.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack74.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack74.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack74.ads gcc-12.1.0/gcc/ada/libgnat/s-pack74.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack74.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack74.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack75.adb gcc-12.1.0/gcc/ada/libgnat/s-pack75.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack75.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack75.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack75.ads gcc-12.1.0/gcc/ada/libgnat/s-pack75.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack75.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack75.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack76.adb gcc-12.1.0/gcc/ada/libgnat/s-pack76.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack76.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack76.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack76.ads gcc-12.1.0/gcc/ada/libgnat/s-pack76.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack76.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack76.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack77.adb gcc-12.1.0/gcc/ada/libgnat/s-pack77.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack77.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack77.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack77.ads gcc-12.1.0/gcc/ada/libgnat/s-pack77.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack77.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack77.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack78.adb gcc-12.1.0/gcc/ada/libgnat/s-pack78.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack78.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack78.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack78.ads gcc-12.1.0/gcc/ada/libgnat/s-pack78.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack78.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack78.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack79.adb gcc-12.1.0/gcc/ada/libgnat/s-pack79.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack79.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack79.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack79.ads gcc-12.1.0/gcc/ada/libgnat/s-pack79.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack79.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack79.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack80.adb gcc-12.1.0/gcc/ada/libgnat/s-pack80.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack80.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack80.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack80.ads gcc-12.1.0/gcc/ada/libgnat/s-pack80.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack80.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack80.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack81.adb gcc-12.1.0/gcc/ada/libgnat/s-pack81.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack81.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack81.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack81.ads gcc-12.1.0/gcc/ada/libgnat/s-pack81.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack81.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack81.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack82.adb gcc-12.1.0/gcc/ada/libgnat/s-pack82.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack82.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack82.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack82.ads gcc-12.1.0/gcc/ada/libgnat/s-pack82.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack82.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack82.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack83.adb gcc-12.1.0/gcc/ada/libgnat/s-pack83.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack83.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack83.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack83.ads gcc-12.1.0/gcc/ada/libgnat/s-pack83.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack83.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack83.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack84.adb gcc-12.1.0/gcc/ada/libgnat/s-pack84.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack84.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack84.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack84.ads gcc-12.1.0/gcc/ada/libgnat/s-pack84.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack84.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack84.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack85.adb gcc-12.1.0/gcc/ada/libgnat/s-pack85.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack85.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack85.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack85.ads gcc-12.1.0/gcc/ada/libgnat/s-pack85.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack85.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack85.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack86.adb gcc-12.1.0/gcc/ada/libgnat/s-pack86.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack86.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack86.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack86.ads gcc-12.1.0/gcc/ada/libgnat/s-pack86.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack86.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack86.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack87.adb gcc-12.1.0/gcc/ada/libgnat/s-pack87.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack87.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack87.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack87.ads gcc-12.1.0/gcc/ada/libgnat/s-pack87.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack87.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack87.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack88.adb gcc-12.1.0/gcc/ada/libgnat/s-pack88.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack88.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack88.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack88.ads gcc-12.1.0/gcc/ada/libgnat/s-pack88.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack88.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack88.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack89.adb gcc-12.1.0/gcc/ada/libgnat/s-pack89.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack89.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack89.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack89.ads gcc-12.1.0/gcc/ada/libgnat/s-pack89.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack89.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack89.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack90.adb gcc-12.1.0/gcc/ada/libgnat/s-pack90.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack90.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack90.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack90.ads gcc-12.1.0/gcc/ada/libgnat/s-pack90.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack90.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack90.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack91.adb gcc-12.1.0/gcc/ada/libgnat/s-pack91.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack91.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack91.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack91.ads gcc-12.1.0/gcc/ada/libgnat/s-pack91.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack91.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack91.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack92.adb gcc-12.1.0/gcc/ada/libgnat/s-pack92.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack92.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack92.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack92.ads gcc-12.1.0/gcc/ada/libgnat/s-pack92.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack92.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack92.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack93.adb gcc-12.1.0/gcc/ada/libgnat/s-pack93.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack93.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack93.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack93.ads gcc-12.1.0/gcc/ada/libgnat/s-pack93.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack93.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack93.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack94.adb gcc-12.1.0/gcc/ada/libgnat/s-pack94.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack94.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack94.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack94.ads gcc-12.1.0/gcc/ada/libgnat/s-pack94.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack94.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack94.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack95.adb gcc-12.1.0/gcc/ada/libgnat/s-pack95.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack95.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack95.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack95.ads gcc-12.1.0/gcc/ada/libgnat/s-pack95.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack95.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack95.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack96.adb gcc-12.1.0/gcc/ada/libgnat/s-pack96.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack96.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack96.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack96.ads gcc-12.1.0/gcc/ada/libgnat/s-pack96.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack96.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack96.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack97.adb gcc-12.1.0/gcc/ada/libgnat/s-pack97.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack97.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack97.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack97.ads gcc-12.1.0/gcc/ada/libgnat/s-pack97.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack97.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack97.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack98.adb gcc-12.1.0/gcc/ada/libgnat/s-pack98.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack98.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack98.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack98.ads gcc-12.1.0/gcc/ada/libgnat/s-pack98.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack98.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack98.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack99.adb gcc-12.1.0/gcc/ada/libgnat/s-pack99.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pack99.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack99.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pack99.ads gcc-12.1.0/gcc/ada/libgnat/s-pack99.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pack99.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pack99.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-parame.adb gcc-12.1.0/gcc/ada/libgnat/s-parame.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-parame.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-parame.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
***************
*** 31,38 ****
  
  --  This is the default (used on all native platforms) version of this package
  
- pragma Compiler_Unit_Warning;
- 
  package body System.Parameters is
  
     -------------------------
--- 31,36 ----
*************** package body System.Parameters is
*** 55,61 ****
     ------------------------
  
     function Default_Stack_Size return Size_Type is
!       Default_Stack_Size : Integer;
        pragma Import (C, Default_Stack_Size, "__gl_default_stack_size");
     begin
        if Default_Stack_Size = -1 then
--- 53,59 ----
     ------------------------
  
     function Default_Stack_Size return Size_Type is
!       Default_Stack_Size : constant Integer;
        pragma Import (C, Default_Stack_Size, "__gl_default_stack_size");
     begin
        if Default_Stack_Size = -1 then
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-parame.ads gcc-12.1.0/gcc/ada/libgnat/s-parame.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-parame.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-parame.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 46,53 ****
  --  Note: do not introduce any pragma Inline statements into this unit, since
  --  otherwise the relinking and rebinding capability would be deactivated.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Parameters is
     pragma Pure;
  
--- 46,51 ----
*************** package System.Parameters is
*** 100,105 ****
--- 98,110 ----
     --  Indicates if secondary stacks can grow and shrink at run-time. If False,
     --  the size of a secondary stack is fixed at the point of its creation.
  
+    ------------------------------------
+    -- Characteristics of time_t type --
+    ------------------------------------
+ 
+    time_t_bits : constant := Long_Integer'Size;
+    --  Number of bits in type time_t
+ 
     ----------------------------------------------
     -- Characteristics of types in Interfaces.C --
     ----------------------------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-parame__ae653.ads gcc-12.1.0/gcc/ada/libgnat/s-parame__ae653.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-parame__ae653.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-parame__ae653.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,185 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                    S Y S T E M . P A R A M E T E R S                     --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Version is used by VxWorks 653, VxWorks MILS, and VxWorks6 cert Ravenscar
- 
- --  This package defines some system dependent parameters for GNAT. These
- --  are values that are referenced by the runtime library and are therefore
- --  relevant to the target machine.
- 
- --  The parameters whose value is defined in the spec are not generally
- --  expected to be changed. If they are changed, it will be necessary to
- --  recompile the run-time library.
- 
- --  The parameters which are defined by functions can be changed by modifying
- --  the body of System.Parameters in file s-parame.adb. A change to this body
- --  requires only rebinding and relinking of the application.
- 
- --  Note: do not introduce any pragma Inline statements into this unit, since
- --  otherwise the relinking and rebinding capability would be deactivated.
- 
- package System.Parameters is
-    pragma Pure;
- 
-    ---------------------------------------
-    -- Task And Stack Allocation Control --
-    ---------------------------------------
- 
-    type Size_Type is range
-      -(2 ** (Integer'(Standard'Address_Size) - 1)) ..
-      +(2 ** (Integer'(Standard'Address_Size) - 1)) - 1;
-    --  Type used to provide task stack sizes to the runtime. Sized to permit
-    --  stack sizes of up to half the total addressable memory space. This may
-    --  seem excessively large (even for 32-bit systems), however there are many
-    --  instances of users requiring large stack sizes (for example string
-    --  processing).
- 
-    Unspecified_Size : constant Size_Type := Size_Type'First;
-    --  Value used to indicate that no size type is set
- 
-    function Default_Stack_Size return Size_Type;
-    --  Default task stack size used if none is specified
- 
-    function Minimum_Stack_Size return Size_Type;
-    --  Minimum task stack size permitted
- 
-    function Adjust_Storage_Size (Size : Size_Type) return Size_Type;
-    --  Given the storage size stored in the TCB, return the Storage_Size
-    --  value required by the RM for the Storage_Size attribute. The
-    --  required adjustment is as follows:
-    --
-    --    when Size = Unspecified_Size, return Default_Stack_Size
-    --    when Size < Minimum_Stack_Size, return Minimum_Stack_Size
-    --    otherwise return given Size
- 
-    Default_Env_Stack_Size : constant Size_Type := 14_336;
-    --  Assumed size of the environment task, if no other information
-    --  is available. This value is used when stack checking is
-    --  enabled and no GNAT_STACK_LIMIT environment variable is set.
-    --  This value is chosen as the VxWorks default stack size is 20kB,
-    --  and a little more than 4kB is necessary for the run time.
- 
-    Stack_Grows_Down  : constant Boolean := True;
-    --  This constant indicates whether the stack grows up (False) or
-    --  down (True) in memory as functions are called. It is used for
-    --  proper implementation of the stack overflow check.
- 
-    Runtime_Default_Sec_Stack_Size : constant Size_Type := 10 * 1024;
-    --  The run-time chosen default size for secondary stacks that may be
-    --  overridden by the user with the use of binder -D switch.
- 
-    Sec_Stack_Dynamic : constant Boolean := False;
-    --  Indicates if secondary stacks can grow and shrink at run-time. If False,
-    --  the size of a secondary stack is fixed at the point of its creation.
- 
-    ----------------------------------------------
-    -- Characteristics of types in Interfaces.C --
-    ----------------------------------------------
- 
-    long_bits : constant := Long_Integer'Size;
-    --  Number of bits in type long and unsigned_long. The normal convention
-    --  is that this is the same as type Long_Integer, but this may not be true
-    --  of all targets.
- 
-    ptr_bits  : constant := Standard'Address_Size;
-    subtype C_Address is System.Address;
-    --  Number of bits in Interfaces.C pointers, normally a standard address
- 
-    C_Malloc_Linkname : constant String := "__gnat_malloc";
-    --  Name of runtime function used to allocate such a pointer
- 
-    ----------------------------------------------
-    -- Behavior of Pragma Finalize_Storage_Only --
-    ----------------------------------------------
- 
-    --  Garbage_Collected is a Boolean constant whose value indicates the
-    --  effect of the pragma Finalize_Storage_Entry on a controlled type.
- 
-    --    Garbage_Collected = False
- 
-    --      The system releases all storage on program termination only,
-    --      but not other garbage collection occurs, so finalization calls
-    --      are omitted only for outer level objects can be omitted if
-    --      pragma Finalize_Storage_Only is used.
- 
-    --    Garbage_Collected = True
- 
-    --      The system provides full garbage collection, so it is never
-    --      necessary to release storage for controlled objects for which
-    --      a pragma Finalize_Storage_Only is used.
- 
-    Garbage_Collected : constant Boolean := False;
-    --  The storage mode for this system (release on program exit)
- 
-    ---------------------
-    -- Tasking Profile --
-    ---------------------
- 
-    --  In the following sections, constant parameters are defined to
-    --  allow some optimizations and fine tuning within the tasking run time
-    --  based on restrictions on the tasking features.
- 
-    -------------------
-    -- Task Abortion --
-    -------------------
- 
-    No_Abort : constant Boolean := False;
-    --  This constant indicates whether abort statements and asynchronous
-    --  transfer of control (ATC) are disallowed. If set to True, it is
-    --  assumed that neither construct is used, and the run time does not
-    --  need to defer/undefer abort and check for pending actions at
-    --  completion points. A value of True for No_Abort corresponds to:
-    --  pragma Restrictions (No_Abort_Statements);
-    --  pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
- 
-    ---------------------
-    -- Task Attributes --
-    ---------------------
- 
-    Max_Attribute_Count : constant := 8;
-    --  Number of task attributes stored in the task control block
- 
-    -----------------------
-    -- Task Image Length --
-    -----------------------
- 
-    Max_Task_Image_Length : constant := 32;
-    --  This constant specifies the maximum length of a task's image
- 
-    ------------------------------
-    -- Exception Message Length --
-    ------------------------------
- 
-    Default_Exception_Msg_Max_Length : constant := 200;
-    --  This constant specifies the default number of characters to allow
-    --  in an exception message (200 is minimum required by RM 11.4.1(18)).
- 
- end System.Parameters;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-parame__hpux.ads gcc-12.1.0/gcc/ada/libgnat/s-parame__hpux.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-parame__hpux.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-parame__hpux.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package System.Parameters is
*** 98,103 ****
--- 98,110 ----
     --  Indicates if secondary stacks can grow and shrink at run-time. If False,
     --  the size of a secondary stack is fixed at the point of its creation.
  
+    ------------------------------------
+    -- Characteristics of time_t type --
+    ------------------------------------
+ 
+    time_t_bits : constant := Long_Integer'Size;
+    --  Number of bits in type time_t
+ 
     ----------------------------------------------
     -- Characteristics of Types in Interfaces.C --
     ----------------------------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-parame__posix2008.ads gcc-12.1.0/gcc/ada/libgnat/s-parame__posix2008.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-parame__posix2008.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-parame__posix2008.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,191 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . P A R A M E T E R S                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the Posix 2008 version for 64 bit time_t.
+ 
+ --  This package defines some system dependent parameters for GNAT. These
+ --  are values that are referenced by the runtime library and are therefore
+ --  relevant to the target machine.
+ 
+ --  The parameters whose value is defined in the spec are not generally
+ --  expected to be changed. If they are changed, it will be necessary to
+ --  recompile the run-time library.
+ 
+ --  The parameters which are defined by functions can be changed by modifying
+ --  the body of System.Parameters in file s-parame.adb. A change to this body
+ --  requires only rebinding and relinking of the application.
+ 
+ --  Note: do not introduce any pragma Inline statements into this unit, since
+ --  otherwise the relinking and rebinding capability would be deactivated.
+ 
+ package System.Parameters is
+    pragma Pure;
+ 
+    ---------------------------------------
+    -- Task And Stack Allocation Control --
+    ---------------------------------------
+ 
+    type Size_Type is range
+      -(2 ** (Integer'(Standard'Address_Size) - 1)) ..
+      +(2 ** (Integer'(Standard'Address_Size) - 1)) - 1;
+    --  Type used to provide task stack sizes to the runtime. Sized to permit
+    --  stack sizes of up to half the total addressable memory space. This may
+    --  seem excessively large (even for 32-bit systems), however there are many
+    --  instances of users requiring large stack sizes (for example string
+    --  processing).
+ 
+    Unspecified_Size : constant Size_Type := Size_Type'First;
+    --  Value used to indicate that no size type is set
+ 
+    function Default_Stack_Size return Size_Type;
+    --  Default task stack size used if none is specified
+ 
+    function Minimum_Stack_Size return Size_Type;
+    --  Minimum task stack size permitted
+ 
+    function Adjust_Storage_Size (Size : Size_Type) return Size_Type;
+    --  Given the storage size stored in the TCB, return the Storage_Size
+    --  value required by the RM for the Storage_Size attribute. The
+    --  required adjustment is as follows:
+    --
+    --    when Size = Unspecified_Size, return Default_Stack_Size
+    --    when Size < Minimum_Stack_Size, return Minimum_Stack_Size
+    --    otherwise return given Size
+ 
+    Default_Env_Stack_Size : constant Size_Type := 8_192_000;
+    --  Assumed size of the environment task, if no other information is
+    --  available. This value is used when stack checking is enabled and
+    --  no GNAT_STACK_LIMIT environment variable is set.
+ 
+    Stack_Grows_Down  : constant Boolean := True;
+    --  This constant indicates whether the stack grows up (False) or
+    --  down (True) in memory as functions are called. It is used for
+    --  proper implementation of the stack overflow check.
+ 
+    Runtime_Default_Sec_Stack_Size : constant Size_Type := 10 * 1024;
+    --  The run-time chosen default size for secondary stacks that may be
+    --  overridden by the user with the use of binder -D switch.
+ 
+    Sec_Stack_Dynamic : constant Boolean := True;
+    --  Indicates if secondary stacks can grow and shrink at run-time. If False,
+    --  the size of a secondary stack is fixed at the point of its creation.
+ 
+    ------------------------------------
+    -- Characteristics of time_t type --
+    ------------------------------------
+ 
+    time_t_bits : constant := Long_Long_Integer'Size;
+    --  Number of bits in type time_t. Use for targets that are Posix 2008
+    --  compliant (fixes the year 2038 time_t overflow).
+ 
+    ----------------------------------------------
+    -- Characteristics of types in Interfaces.C --
+    ----------------------------------------------
+ 
+    long_bits : constant := Long_Integer'Size;
+    --  Number of bits in type long and unsigned_long. The normal convention
+    --  is that this is the same as type Long_Integer, but this may not be true
+    --  of all targets.
+ 
+    ptr_bits  : constant := Standard'Address_Size;
+    subtype C_Address is System.Address;
+    --  Number of bits in Interfaces.C pointers, normally a standard address
+ 
+    C_Malloc_Linkname : constant String := "__gnat_malloc";
+    --  Name of runtime function used to allocate such a pointer
+ 
+    ----------------------------------------------
+    -- Behavior of Pragma Finalize_Storage_Only --
+    ----------------------------------------------
+ 
+    --  Garbage_Collected is a Boolean constant whose value indicates the
+    --  effect of the pragma Finalize_Storage_Entry on a controlled type.
+ 
+    --    Garbage_Collected = False
+ 
+    --      The system releases all storage on program termination only,
+    --      but not other garbage collection occurs, so finalization calls
+    --      are omitted only for outer level objects can be omitted if
+    --      pragma Finalize_Storage_Only is used.
+ 
+    --    Garbage_Collected = True
+ 
+    --      The system provides full garbage collection, so it is never
+    --      necessary to release storage for controlled objects for which
+    --      a pragma Finalize_Storage_Only is used.
+ 
+    Garbage_Collected : constant Boolean := False;
+    --  The storage mode for this system (release on program exit)
+ 
+    ---------------------
+    -- Tasking Profile --
+    ---------------------
+ 
+    --  In the following sections, constant parameters are defined to
+    --  allow some optimizations and fine tuning within the tasking run time
+    --  based on restrictions on the tasking features.
+ 
+    -------------------
+    -- Task Abortion --
+    -------------------
+ 
+    No_Abort : constant Boolean := False;
+    --  This constant indicates whether abort statements and asynchronous
+    --  transfer of control (ATC) are disallowed. If set to True, it is
+    --  assumed that neither construct is used, and the run time does not
+    --  need to defer/undefer abort and check for pending actions at
+    --  completion points. A value of True for No_Abort corresponds to:
+    --  pragma Restrictions (No_Abort_Statements);
+    --  pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
+ 
+    ---------------------
+    -- Task Attributes --
+    ---------------------
+ 
+    Max_Attribute_Count : constant := 32;
+    --  Number of task attributes stored in the task control block
+ 
+    -----------------------
+    -- Task Image Length --
+    -----------------------
+ 
+    Max_Task_Image_Length : constant := 256;
+    --  This constant specifies the maximum length of a task's image
+ 
+    ------------------------------
+    -- Exception Message Length --
+    ------------------------------
+ 
+    Default_Exception_Msg_Max_Length : constant := 200;
+    --  This constant specifies the default number of characters to allow
+    --  in an exception message (200 is minimum required by RM 11.4.1(18)).
+ 
+ end System.Parameters;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-parame__rtems.adb gcc-12.1.0/gcc/ada/libgnat/s-parame__rtems.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-parame__rtems.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-parame__rtems.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
*************** with Interfaces.C;
*** 35,44 ****
  
  package body System.Parameters is
  
-    function ada_pthread_minimum_stack_size return Interfaces.C.size_t;
-    pragma Import (C, ada_pthread_minimum_stack_size,
-      "_ada_pthread_minimum_stack_size");
- 
     -------------------------
     -- Adjust_Storage_Size --
     -------------------------
--- 35,40 ----
*************** package body System.Parameters is
*** 61,68 ****
     ------------------------
  
     function Default_Stack_Size return Size_Type is
     begin
!       return Size_Type (ada_pthread_minimum_stack_size);
     end Default_Stack_Size;
  
     ------------------------
--- 57,71 ----
     ------------------------
  
     function Default_Stack_Size return Size_Type is
+       Default_Stack_Size : constant Integer
+         with Import, Convention => C,
+              External_Name => "__gl_default_stack_size";
     begin
!       if Default_Stack_Size = -1 then
!          return 32 * 1024;
!       else
!          return Size_Type (Default_Stack_Size);
!       end if;
     end Default_Stack_Size;
  
     ------------------------
*************** package body System.Parameters is
*** 70,78 ****
     ------------------------
  
     function Minimum_Stack_Size return Size_Type is
! 
     begin
!       return Size_Type (ada_pthread_minimum_stack_size);
     end Minimum_Stack_Size;
  
  end System.Parameters;
--- 73,83 ----
     ------------------------
  
     function Minimum_Stack_Size return Size_Type is
!       POSIX_Threads_Minimum_stack_size : constant Interfaces.C.size_t
!         with Import, Convention => C,
!              External_Name => "_POSIX_Threads_Minimum_stack_size";
     begin
!       return Size_Type (POSIX_Threads_Minimum_stack_size);
     end Minimum_Stack_Size;
  
  end System.Parameters;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-parame__vxworks.adb gcc-12.1.0/gcc/ada/libgnat/s-parame__vxworks.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-parame__vxworks.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-parame__vxworks.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
*************** package body System.Parameters is
*** 53,59 ****
     ------------------------
  
     function Default_Stack_Size return Size_Type is
!       Default_Stack_Size : Integer;
        pragma Import (C, Default_Stack_Size, "__gl_default_stack_size");
     begin
        if Default_Stack_Size = -1 then
--- 53,59 ----
     ------------------------
  
     function Default_Stack_Size return Size_Type is
!       Default_Stack_Size : constant Integer;
        pragma Import (C, Default_Stack_Size, "__gl_default_stack_size");
     begin
        if Default_Stack_Size = -1 then
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-parame__vxworks.ads gcc-12.1.0/gcc/ada/libgnat/s-parame__vxworks.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-parame__vxworks.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-parame__vxworks.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package System.Parameters is
*** 100,105 ****
--- 100,120 ----
     --  Indicates if secondary stacks can grow and shrink at run-time. If False,
     --  the size of a secondary stack is fixed at the point of its creation.
  
+    ------------------------------------
+    -- Characteristics of time_t type --
+    ------------------------------------
+ 
+    --  IMPORTANT NOTE:
+    --  Select the appropriate time_t_bits for the VSB in use, then rebuild
+    --  the runtime using instructions in adainclude/libada.gpr.
+ 
+    --  time_t_bits : constant := Long_Integer'Size;
+    --  Number of bits in type time_t for SR0650 and before and SR0660 with
+    --  non-default configuration.
+ 
+    time_t_bits : constant := Long_Long_Integer'Size;
+    --  Number of bits in type time_t for SR0660 with default configuration.
+ 
     ----------------------------------------------
     -- Characteristics of types in Interfaces.C --
     ----------------------------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-parint.adb gcc-12.1.0/gcc/ada/libgnat/s-parint.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-parint.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-parint.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                  B o d y                                 --
  --                   (Dummy body for non-distributed case)                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 7,13 ----
  --                                  B o d y                                 --
  --                   (Dummy body for non-distributed case)                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-parint.ads gcc-12.1.0/gcc/ada/libgnat/s-parint.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-parint.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-parint.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pehage.adb gcc-12.1.0/gcc/ada/libgnat/s-pehage.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pehage.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-pehage.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,2235 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --        S Y S T E M . P E R F E C T _ H A S H _ G E N E R A T O R S       --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --                     Copyright (C) 2002-2022, AdaCore                     --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with GNAT.Heap_Sort_G;
+ with GNAT.Table;
+ 
+ with System.OS_Lib; use System.OS_Lib;
+ 
+ package body System.Perfect_Hash_Generators is
+ 
+    --  We are using the algorithm of J. Czech as described in Zbigniew J.
+    --  Czech, George Havas, and Bohdan S. Majewski ``An Optimal Algorithm for
+    --  Generating Minimal Perfect Hash Functions'', Information Processing
+    --  Letters, 43(1992) pp.257-264, Oct.1992
+ 
+    --  This minimal perfect hash function generator is based on random graphs
+    --  and produces a hash function of the form:
+ 
+    --             h (w) = (g (f1 (w)) + g (f2 (w))) mod m
+ 
+    --  where f1 and f2 are functions that map strings into integers, and g is
+    --  a function that maps integers into [0, m-1]. h can be order preserving.
+    --  For instance, let W = {w_0, ..., w_i, ..., w_m-1}, h can be defined
+    --  such that h (w_i) = i.
+ 
+    --  This algorithm defines two possible constructions of f1 and f2. Method
+    --  b) stores the hash function in less memory space at the expense of
+    --  greater CPU time.
+ 
+    --  a) fk (w) = sum (for i in 1 .. length (w)) (Tk (i, w (i))) mod n
+ 
+    --     size (Tk) = max (for w in W) (length (w)) * size (used char set)
+ 
+    --  b) fk (w) = sum (for i in 1 .. length (w)) (Tk (i) * w (i)) mod n
+ 
+    --     size (Tk) = max (for w in W) (length (w)) but the table lookups are
+    --     replaced by multiplications.
+ 
+    --  where Tk values are randomly generated. n is defined later on but the
+    --  algorithm recommends to use a value a little bit greater than 2m. Note
+    --  that for large values of m, the main memory space requirements comes
+    --  from the memory space for storing function g (>= 2m entries).
+ 
+    --  Random graphs are frequently used to solve difficult problems that do
+    --  not have polynomial solutions. This algorithm is based on a weighted
+    --  undirected graph. It comprises two steps: mapping and assignment.
+ 
+    --  In the mapping step, a graph G = (V, E) is constructed, where = {0, 1,
+    --  ..., n-1} and E = {(for w in W) (f1 (w), f2 (w))}. In order for the
+    --  assignment step to be successful, G has to be acyclic. To have a high
+    --  probability of generating an acyclic graph, n >= 2m. If it is not
+    --  acyclic, Tk have to be regenerated.
+ 
+    --  In the assignment step, the algorithm builds function g. As G is
+    --  acyclic, there is a vertex v1 with only one neighbor v2. Let w_i be
+    --  the word such that v1 = f1 (w_i) and v2 = f2 (w_i). Let g (v1) = 0 by
+    --  construction and g (v2) = (i - g (v1)) mod n (or h (i) - g (v1) mod n).
+    --  If word w_j is such that v2 = f1 (w_j) and v3 = f2 (w_j), g (v3) = (j -
+    --  g (v2)) mod (or to be general, (h (j) - g (v2)) mod n). If w_i has no
+    --  neighbor, then another vertex is selected. The algorithm traverses G to
+    --  assign values to all the vertices. It cannot assign a value to an
+    --  already assigned vertex as G is acyclic.
+ 
+    subtype Word_Id   is Integer;
+    subtype Key_Id    is Integer;
+    subtype Vertex_Id is Integer;
+    subtype Edge_Id   is Integer;
+    subtype Table_Id  is Integer;
+ 
+    No_Vertex : constant Vertex_Id := -1;
+    No_Edge   : constant Edge_Id   := -1;
+    No_Table  : constant Table_Id  := -1;
+ 
+    type Word_Type is new String_Access;
+    procedure Free_Word (W : in out Word_Type) renames Free;
+    function New_Word (S : String) return Word_Type;
+ 
+    procedure Resize_Word (W : in out Word_Type; Len : Natural);
+    --  Resize string W to have a length Len
+ 
+    type Key_Type is record
+       Edge : Edge_Id;
+    end record;
+    --  A key corresponds to an edge in the algorithm graph
+ 
+    type Vertex_Type is record
+       First : Edge_Id;
+       Last  : Edge_Id;
+    end record;
+    --  A vertex can be involved in several edges. First and Last are the bounds
+    --  of an array of edges stored in a global edge table.
+ 
+    type Edge_Type is record
+       X   : Vertex_Id;
+       Y   : Vertex_Id;
+       Key : Key_Id;
+    end record;
+    --  An edge is a peer of vertices. In the algorithm, a key is associated to
+    --  an edge.
+ 
+    package WT is new GNAT.Table (Word_Type, Word_Id, 0, 32, 32);
+    package IT is new GNAT.Table (Integer, Integer, 0, 32, 32);
+    --  The two main tables. WT is used to store the words in their initial
+    --  version and in their reduced version (that is words reduced to their
+    --  significant characters). As an instance of GNAT.Table, WT does not
+    --  initialize string pointers to null. This initialization has to be done
+    --  manually when the table is allocated. IT is used to store several
+    --  tables of components containing only integers.
+ 
+    function Image (Int : Integer; W : Natural := 0) return String;
+    function Image (Str : String;  W : Natural := 0) return String;
+    --  Return a string which includes string Str or integer Int preceded by
+    --  leading spaces if required by width W.
+ 
+    function Trim_Trailing_Nuls (Str : String) return String;
+    --  Return Str with trailing NUL characters removed
+ 
+    Output : File_Descriptor renames System.OS_Lib.Standout;
+    --  Shortcuts
+ 
+    EOL : constant Character := ASCII.LF;
+ 
+    Max  : constant := 78;
+    Last : Natural  := 0;
+    Line : String (1 .. Max);
+    --  Use this line to provide buffered IO
+ 
+    procedure Add (C : Character);
+    procedure Add (S : String);
+    --  Add a character or a string in Line and update Last
+ 
+    procedure Put
+      (F  : File_Descriptor;
+       S  : String;
+       F1 : Natural;
+       L1 : Natural;
+       C1 : Natural;
+       F2 : Natural;
+       L2 : Natural;
+       C2 : Natural);
+    --  Write string S into file F as a element of an array of one or two
+    --  dimensions. Fk (resp. Lk and Ck) indicates the first (resp last and
+    --  current) index in the k-th dimension. If F1 = L1 the array is considered
+    --  as a one dimension array. This dimension is described by F2 and L2. This
+    --  routine takes care of all the parenthesis, spaces and commas needed to
+    --  format correctly the array. Moreover, the array is well indented and is
+    --  wrapped to fit in a 80 col line. When the line is full, the routine
+    --  writes it into file F. When the array is completed, the routine adds
+    --  semi-colon and writes the line into file F.
+ 
+    procedure New_Line (File : File_Descriptor);
+    --  Simulate Ada.Text_IO.New_Line with GNAT.OS_Lib
+ 
+    procedure Put (File : File_Descriptor; Str : String);
+    --  Simulate Ada.Text_IO.Put with GNAT.OS_Lib
+ 
+    procedure Put_Used_Char_Set (File : File_Descriptor; Title : String);
+    --  Output a title and a used character set
+ 
+    procedure Put_Int_Vector
+      (File   : File_Descriptor;
+       Title  : String;
+       Vector : Integer;
+       Length : Natural);
+    --  Output a title and a vector
+ 
+    procedure Put_Int_Matrix
+      (File  : File_Descriptor;
+       Title : String;
+       Table : Table_Id;
+       Len_1 : Natural;
+       Len_2 : Natural);
+    --  Output a title and a matrix. When the matrix has only one non-empty
+    --  dimension (Len_2 = 0), output a vector.
+ 
+    procedure Put_Edges (File : File_Descriptor; Title : String);
+    --  Output a title and an edge table
+ 
+    procedure Put_Initial_Keys (File : File_Descriptor; Title : String);
+    --  Output a title and a key table
+ 
+    procedure Put_Reduced_Keys (File : File_Descriptor; Title : String);
+    --  Output a title and a key table
+ 
+    procedure Put_Vertex_Table (File : File_Descriptor; Title : String);
+    --  Output a title and a vertex table
+ 
+    ----------------------------------
+    -- Character Position Selection --
+    ----------------------------------
+ 
+    --  We reduce the maximum key size by selecting representative positions
+    --  in these keys. We build a matrix with one word per line. We fill the
+    --  remaining space of a line with ASCII.NUL. The heuristic selects the
+    --  position that induces the minimum number of collisions. If there are
+    --  collisions, select another position on the reduced key set responsible
+    --  of the collisions. Apply the heuristic until there is no more collision.
+ 
+    procedure Apply_Position_Selection;
+    --  Apply Position selection and build the reduced key table
+ 
+    procedure Parse_Position_Selection (Argument : String);
+    --  Parse Argument and compute the position set. Argument is list of
+    --  substrings separated by commas. Each substring represents a position
+    --  or a range of positions (like x-y).
+ 
+    procedure Select_Character_Set;
+    --  Define an optimized used character set like Character'Pos in order not
+    --  to allocate tables of 256 entries.
+ 
+    procedure Select_Char_Position;
+    --  Find a min char position set in order to reduce the max key length. The
+    --  heuristic selects the position that induces the minimum number of
+    --  collisions. If there are collisions, select another position on the
+    --  reduced key set responsible of the collisions. Apply the heuristic until
+    --  there is no collision.
+ 
+    -----------------------------
+    -- Random Graph Generation --
+    -----------------------------
+ 
+    procedure Random (Seed : in out Natural);
+    --  Simulate Ada.Discrete_Numerics.Random
+ 
+    procedure Generate_Mapping_Table
+      (Tab  : Table_Id;
+       L1   : Natural;
+       L2   : Natural;
+       Seed : in out Natural);
+    --  Random generation of the tables below. T is already allocated
+ 
+    procedure Generate_Mapping_Tables
+      (Opt  : Optimization;
+       Seed : in out Natural);
+    --  Generate the mapping tables T1 and T2. They are used to define fk (w) =
+    --  sum (for i in 1 .. length (w)) (Tk (i, w (i))) mod n. Keys, NK and Chars
+    --  are used to compute the matrix size.
+ 
+    ---------------------------
+    -- Algorithm Computation --
+    ---------------------------
+ 
+    procedure Compute_Edges_And_Vertices (Opt : Optimization);
+    --  Compute the edge and vertex tables. These are empty when a self loop is
+    --  detected (f1 (w) = f2 (w)). The edge table is sorted by X value and then
+    --  Y value. Keys is the key table and NK the number of keys. Chars is the
+    --  set of characters really used in Keys. NV is the number of vertices
+    --  recommended by the algorithm. T1 and T2 are the mapping tables needed to
+    --  compute f1 (w) and f2 (w).
+ 
+    function Acyclic return Boolean;
+    --  Return True when the graph is acyclic. Vertices is the current vertex
+    --  table and Edges the current edge table.
+ 
+    procedure Assign_Values_To_Vertices;
+    --  Execute the assignment step of the algorithm. Keys is the current key
+    --  table. Vertices and Edges represent the random graph. G is the result of
+    --  the assignment step such that:
+    --    h (w) = (g (f1 (w)) + g (f2 (w))) mod m
+ 
+    function Sum
+      (Word  : Word_Type;
+       Table : Table_Id;
+       Opt   : Optimization) return Natural;
+    --  For an optimization of CPU_Time return
+    --    fk (w) = sum (for i in 1 .. length (w)) (Tk (i, w (i))) mod n
+    --  For an optimization of Memory_Space return
+    --    fk (w) = sum (for i in 1 .. length (w)) (Tk (i) * w (i)) mod n
+    --  Here NV = n
+ 
+    -------------------------------
+    -- Internal Table Management --
+    -------------------------------
+ 
+    function Allocate (N : Natural; S : Natural := 1) return Table_Id;
+    --  Allocate N * S ints from IT table
+ 
+    ----------
+    -- Keys --
+    ----------
+ 
+    Keys : Table_Id := No_Table;
+    NK   : Natural  := 0;
+    --  NK : Number of Keys
+ 
+    function Initial (K : Key_Id) return Word_Id;
+    pragma Inline (Initial);
+ 
+    function Reduced (K : Key_Id) return Word_Id;
+    pragma Inline (Reduced);
+ 
+    function  Get_Key (N : Key_Id) return Key_Type;
+    procedure Set_Key (N : Key_Id; Item : Key_Type);
+    --  Get or Set Nth element of Keys table
+ 
+    ------------------
+    -- Char_Pos_Set --
+    ------------------
+ 
+    Char_Pos_Set     : Table_Id := No_Table;
+    Char_Pos_Set_Len : Natural;
+    --  Character Selected Position Set
+ 
+    function  Get_Char_Pos (P : Natural) return Natural;
+    procedure Set_Char_Pos (P : Natural; Item : Natural);
+    --  Get or Set the string position of the Pth selected character
+ 
+    -------------------
+    -- Used_Char_Set --
+    -------------------
+ 
+    Used_Char_Set     : Table_Id := No_Table;
+    Used_Char_Set_Len : Natural;
+    --  Used Character Set : Define a new character mapping. When all the
+    --  characters are not present in the keys, in order to reduce the size
+    --  of some tables, we redefine the character mapping.
+ 
+    function  Get_Used_Char (C : Character) return Natural;
+    procedure Set_Used_Char (C : Character; Item : Natural);
+ 
+    ------------
+    -- Tables --
+    ------------
+ 
+    T1     : Table_Id := No_Table;
+    T2     : Table_Id := No_Table;
+    T1_Len : Natural;
+    T2_Len : Natural;
+    --  T1  : Values table to compute F1
+    --  T2  : Values table to compute F2
+ 
+    function  Get_Table (T : Integer; X, Y : Natural) return Natural;
+    procedure Set_Table (T : Integer; X, Y : Natural; Item : Natural);
+ 
+    -----------
+    -- Graph --
+    -----------
+ 
+    G     : Table_Id := No_Table;
+    G_Len : Natural;
+    --  Values table to compute G
+ 
+    NT : Natural;
+    --  Number of tries running the algorithm before raising an error
+ 
+    function  Get_Graph (N : Natural) return Integer;
+    procedure Set_Graph (N : Natural; Item : Integer);
+    --  Get or Set Nth element of graph
+ 
+    -----------
+    -- Edges --
+    -----------
+ 
+    Edge_Size : constant := 3;
+    Edges     : Table_Id := No_Table;
+    Edges_Len : Natural;
+    --  Edges  : Edge table of the random graph G
+ 
+    function  Get_Edges (F : Natural) return Edge_Type;
+    procedure Set_Edges (F : Natural; Item : Edge_Type);
+ 
+    --------------
+    -- Vertices --
+    --------------
+ 
+    Vertex_Size : constant := 2;
+ 
+    Vertices : Table_Id := No_Table;
+    --  Vertex table of the random graph G
+ 
+    NV : Natural;
+    --  Number of Vertices
+ 
+    function  Get_Vertices (F : Natural) return Vertex_Type;
+    procedure Set_Vertices (F : Natural; Item : Vertex_Type);
+    --  Comments needed ???
+ 
+    Opt : Optimization;
+    --  Optimization mode (memory vs CPU)
+ 
+    Max_Key_Len : Natural := 0;
+    Min_Key_Len : Natural := 0;
+    --  Maximum and minimum of all the word length
+ 
+    S : Natural;
+    --  Seed
+ 
+    function Type_Size (L : Natural) return Natural;
+    --  Given the last L of an unsigned integer type T, return its size
+ 
+    -------------
+    -- Acyclic --
+    -------------
+ 
+    function Acyclic return Boolean is
+       Marks : array (0 .. NV - 1) of Vertex_Id := (others => No_Vertex);
+ 
+       function Traverse (Edge : Edge_Id; Mark : Vertex_Id) return Boolean;
+       --  Propagate Mark from X to Y. X is already marked. Mark Y and propagate
+       --  it to the edges of Y except the one representing the same key. Return
+       --  False when Y is marked with Mark.
+ 
+       --------------
+       -- Traverse --
+       --------------
+ 
+       function Traverse (Edge : Edge_Id; Mark : Vertex_Id) return Boolean is
+          E : constant Edge_Type := Get_Edges (Edge);
+          K : constant Key_Id    := E.Key;
+          Y : constant Vertex_Id := E.Y;
+          M : constant Vertex_Id := Marks (E.Y);
+          V : Vertex_Type;
+ 
+       begin
+          if M = Mark then
+             return False;
+ 
+          elsif M = No_Vertex then
+             Marks (Y) := Mark;
+             V := Get_Vertices (Y);
+ 
+             for J in V.First .. V.Last loop
+ 
+                --  Do not propagate to the edge representing the same key
+ 
+                if Get_Edges (J).Key /= K
+                  and then not Traverse (J, Mark)
+                then
+                   return False;
+                end if;
+             end loop;
+          end if;
+ 
+          return True;
+       end Traverse;
+ 
+       Edge  : Edge_Type;
+ 
+    --  Start of processing for Acyclic
+ 
+    begin
+       --  Edges valid range is
+ 
+       for J in 1 .. Edges_Len - 1 loop
+ 
+          Edge := Get_Edges (J);
+ 
+          --  Mark X of E when it has not been already done
+ 
+          if Marks (Edge.X) = No_Vertex then
+             Marks (Edge.X) := Edge.X;
+          end if;
+ 
+          --  Traverse E when this has not already been done
+ 
+          if Marks (Edge.Y) = No_Vertex
+            and then not Traverse (J, Edge.X)
+          then
+             return False;
+          end if;
+       end loop;
+ 
+       return True;
+    end Acyclic;
+ 
+    ---------
+    -- Add --
+    ---------
+ 
+    procedure Add (C : Character) is
+       pragma Assert (C /= ASCII.NUL);
+    begin
+       Line (Last + 1) := C;
+       Last := Last + 1;
+    end Add;
+ 
+    ---------
+    -- Add --
+    ---------
+ 
+    procedure Add (S : String) is
+       Len : constant Natural := S'Length;
+    begin
+       for J in S'Range loop
+          pragma Assert (S (J) /= ASCII.NUL);
+          null;
+       end loop;
+ 
+       Line (Last + 1 .. Last + Len) := S;
+       Last := Last + Len;
+    end Add;
+ 
+    --------------
+    -- Allocate --
+    --------------
+ 
+    function Allocate (N : Natural; S : Natural := 1) return Table_Id is
+       L : constant Integer := IT.Last;
+    begin
+       IT.Set_Last (L + N * S);
+ 
+       --  Initialize, so debugging printouts don't trip over uninitialized
+       --  components.
+ 
+       for J in L + 1 .. IT.Last loop
+          IT.Table (J) := -1;
+       end loop;
+ 
+       return L + 1;
+    end Allocate;
+ 
+    ------------------------------
+    -- Apply_Position_Selection --
+    ------------------------------
+ 
+    procedure Apply_Position_Selection is
+    begin
+       for J in 0 .. NK - 1 loop
+          declare
+             IW : constant String := WT.Table (Initial (J)).all;
+             RW : String (1 .. IW'Length) := (others => ASCII.NUL);
+             N  : Natural := IW'First - 1;
+ 
+          begin
+             --  Select the characters of Word included in the position
+             --  selection.
+ 
+             for C in 0 .. Char_Pos_Set_Len - 1 loop
+                exit when IW (Get_Char_Pos (C)) = ASCII.NUL;
+                N := N + 1;
+                RW (N) := IW (Get_Char_Pos (C));
+             end loop;
+ 
+             --  Build the new table with the reduced word. Be careful
+             --  to deallocate the old version to avoid memory leaks.
+ 
+             Free_Word (WT.Table (Reduced (J)));
+             WT.Table (Reduced (J)) := New_Word (RW);
+             Set_Key (J, (Edge => No_Edge));
+          end;
+       end loop;
+    end Apply_Position_Selection;
+ 
+    -------------------------------
+    -- Assign_Values_To_Vertices --
+    -------------------------------
+ 
+    procedure Assign_Values_To_Vertices is
+       X : Vertex_Id;
+ 
+       procedure Assign (X : Vertex_Id);
+       --  Execute assignment on X's neighbors except the vertex that we are
+       --  coming from which is already assigned.
+ 
+       ------------
+       -- Assign --
+       ------------
+ 
+       procedure Assign (X : Vertex_Id) is
+          E : Edge_Type;
+          V : constant Vertex_Type := Get_Vertices (X);
+ 
+       begin
+          for J in V.First .. V.Last loop
+             E := Get_Edges (J);
+ 
+             if Get_Graph (E.Y) = -1 then
+                pragma Assert (NK /= 0);
+                Set_Graph (E.Y, (E.Key - Get_Graph (X)) mod NK);
+                Assign (E.Y);
+             end if;
+          end loop;
+       end Assign;
+ 
+    --  Start of processing for Assign_Values_To_Vertices
+ 
+    begin
+       --  Value -1 denotes an uninitialized value as it is supposed to
+       --  be in the range 0 .. NK.
+ 
+       if G = No_Table then
+          G_Len := NV;
+          G := Allocate (G_Len, 1);
+       end if;
+ 
+       for J in 0 .. G_Len - 1 loop
+          Set_Graph (J, -1);
+       end loop;
+ 
+       for K in 0 .. NK - 1 loop
+          X := Get_Edges (Get_Key (K).Edge).X;
+ 
+          if Get_Graph (X) = -1 then
+             Set_Graph (X, 0);
+             Assign (X);
+          end if;
+       end loop;
+ 
+       for J in 0 .. G_Len - 1 loop
+          if Get_Graph (J) = -1 then
+             Set_Graph (J, 0);
+          end if;
+       end loop;
+ 
+       if Verbose then
+          Put_Int_Vector (Output, "Assign Values To Vertices", G, G_Len);
+       end if;
+    end Assign_Values_To_Vertices;
+ 
+    -------------
+    -- Compute --
+    -------------
+ 
+    procedure Compute (Position : String) is
+       Success : Boolean := False;
+ 
+    begin
+       if NK = 0 then
+          raise Program_Error with "keywords set cannot be empty";
+       end if;
+ 
+       if Verbose then
+          Put_Initial_Keys (Output, "Initial Key Table");
+       end if;
+ 
+       if Position'Length /= 0 then
+          Parse_Position_Selection (Position);
+       else
+          Select_Char_Position;
+       end if;
+ 
+       if Verbose then
+          Put_Int_Vector
+            (Output, "Char Position Set", Char_Pos_Set, Char_Pos_Set_Len);
+       end if;
+ 
+       Apply_Position_Selection;
+ 
+       if Verbose then
+          Put_Reduced_Keys (Output, "Reduced Keys Table");
+       end if;
+ 
+       Select_Character_Set;
+ 
+       if Verbose then
+          Put_Used_Char_Set (Output, "Character Position Table");
+       end if;
+ 
+       --  Perform Czech's algorithm
+ 
+       for J in 1 .. NT loop
+          Generate_Mapping_Tables (Opt, S);
+          Compute_Edges_And_Vertices (Opt);
+ 
+          --  When graph is not empty (no self-loop from previous operation) and
+          --  not acyclic.
+ 
+          if 0 < Edges_Len and then Acyclic then
+             Success := True;
+             exit;
+          end if;
+       end loop;
+ 
+       if not Success then
+          raise Too_Many_Tries;
+       end if;
+ 
+       Assign_Values_To_Vertices;
+    end Compute;
+ 
+    --------------------------------
+    -- Compute_Edges_And_Vertices --
+    --------------------------------
+ 
+    procedure Compute_Edges_And_Vertices (Opt : Optimization) is
+       X           : Natural;
+       Y           : Natural;
+       Key         : Key_Type;
+       Edge        : Edge_Type;
+       Vertex      : Vertex_Type;
+       Not_Acyclic : Boolean := False;
+ 
+       procedure Move (From : Natural; To : Natural);
+       function Lt (L, R : Natural) return Boolean;
+       --  Subprograms needed for GNAT.Heap_Sort_G
+ 
+       --------
+       -- Lt --
+       --------
+ 
+       function Lt (L, R : Natural) return Boolean is
+          EL : constant Edge_Type := Get_Edges (L);
+          ER : constant Edge_Type := Get_Edges (R);
+       begin
+          return EL.X < ER.X or else (EL.X = ER.X and then EL.Y < ER.Y);
+       end Lt;
+ 
+       ----------
+       -- Move --
+       ----------
+ 
+       procedure Move (From : Natural; To : Natural) is
+       begin
+          Set_Edges (To, Get_Edges (From));
+       end Move;
+ 
+       package Sorting is new GNAT.Heap_Sort_G (Move, Lt);
+ 
+    --  Start of processing for Compute_Edges_And_Vertices
+ 
+    begin
+       --  We store edges from 1 to 2 * NK and leave zero alone in order to use
+       --  GNAT.Heap_Sort_G.
+ 
+       Edges_Len := 2 * NK + 1;
+ 
+       if Edges = No_Table then
+          Edges := Allocate (Edges_Len, Edge_Size);
+       end if;
+ 
+       if Vertices = No_Table then
+          Vertices := Allocate (NV, Vertex_Size);
+       end if;
+ 
+       for J in 0 .. NV - 1 loop
+          Set_Vertices (J, (No_Vertex, No_Vertex - 1));
+       end loop;
+ 
+       --  For each w, X = f1 (w) and Y = f2 (w)
+ 
+       for J in 0 .. NK - 1 loop
+          Key := Get_Key (J);
+          Key.Edge := No_Edge;
+          Set_Key (J, Key);
+ 
+          X := Sum (WT.Table (Reduced (J)), T1, Opt);
+          Y := Sum (WT.Table (Reduced (J)), T2, Opt);
+ 
+          --  Discard T1 and T2 as soon as we discover a self loop
+ 
+          if X = Y then
+             Not_Acyclic := True;
+             exit;
+          end if;
+ 
+          --  We store (X, Y) and (Y, X) to ease assignment step
+ 
+          Set_Edges (2 * J + 1, (X, Y, J));
+          Set_Edges (2 * J + 2, (Y, X, J));
+       end loop;
+ 
+       --  Return an empty graph when self loop detected
+ 
+       if Not_Acyclic then
+          Edges_Len := 0;
+ 
+       else
+          if Verbose then
+             Put_Edges      (Output, "Unsorted Edge Table");
+             Put_Int_Matrix (Output, "Function Table 1", T1,
+                             T1_Len, T2_Len);
+             Put_Int_Matrix (Output, "Function Table 2", T2,
+                             T1_Len, T2_Len);
+          end if;
+ 
+          --  Enforce consistency between edges and keys. Construct Vertices and
+          --  compute the list of neighbors of a vertex First .. Last as Edges
+          --  is sorted by X and then Y. To compute the neighbor list, sort the
+          --  edges.
+ 
+          Sorting.Sort (Edges_Len - 1);
+ 
+          if Verbose then
+             Put_Edges      (Output, "Sorted Edge Table");
+             Put_Int_Matrix (Output, "Function Table 1", T1,
+                             T1_Len, T2_Len);
+             Put_Int_Matrix (Output, "Function Table 2", T2,
+                             T1_Len, T2_Len);
+          end if;
+ 
+          --  Edges valid range is 1 .. 2 * NK
+ 
+          for E in 1 .. Edges_Len - 1 loop
+             Edge := Get_Edges (E);
+             Key  := Get_Key (Edge.Key);
+ 
+             if Key.Edge = No_Edge then
+                Key.Edge := E;
+                Set_Key (Edge.Key, Key);
+             end if;
+ 
+             Vertex := Get_Vertices (Edge.X);
+ 
+             if Vertex.First = No_Edge then
+                Vertex.First := E;
+             end if;
+ 
+             Vertex.Last := E;
+             Set_Vertices (Edge.X, Vertex);
+          end loop;
+ 
+          if Verbose then
+             Put_Reduced_Keys (Output, "Key Table");
+             Put_Edges        (Output, "Edge Table");
+             Put_Vertex_Table (Output, "Vertex Table");
+          end if;
+       end if;
+    end Compute_Edges_And_Vertices;
+ 
+    ------------
+    -- Define --
+    ------------
+ 
+    procedure Define
+      (Name      : Table_Name;
+       Item_Size : out Natural;
+       Length_1  : out Natural;
+       Length_2  : out Natural)
+    is
+    begin
+       case Name is
+          when Character_Position =>
+             Item_Size := 31;
+             Length_1  := Char_Pos_Set_Len;
+             Length_2  := 0;
+ 
+          when Used_Character_Set =>
+             Item_Size := 8;
+             Length_1  := 256;
+             Length_2  := 0;
+ 
+          when Function_Table_1
+             | Function_Table_2
+          =>
+             Item_Size := Type_Size (NV);
+             Length_1  := T1_Len;
+             Length_2  := T2_Len;
+ 
+          when Graph_Table =>
+             Item_Size := Type_Size (NK);
+             Length_1  := NV;
+             Length_2  := 0;
+       end case;
+    end Define;
+ 
+    --------------
+    -- Finalize --
+    --------------
+ 
+    procedure Finalize is
+    begin
+       if Verbose then
+          Put (Output, "Finalize");
+          New_Line (Output);
+       end if;
+ 
+       --  Deallocate all the WT components (both initial and reduced ones) to
+       --  avoid memory leaks.
+ 
+       for W in 0 .. WT.Last loop
+ 
+          --  Note: WT.Table (NK) is a temporary variable, do not free it since
+          --  this would cause a double free.
+ 
+          if W /= NK then
+             Free_Word (WT.Table (W));
+          end if;
+       end loop;
+ 
+       WT.Release;
+       IT.Release;
+ 
+       --  Reset all variables for next usage
+ 
+       Keys := No_Table;
+ 
+       Char_Pos_Set     := No_Table;
+       Char_Pos_Set_Len := 0;
+ 
+       Used_Char_Set     := No_Table;
+       Used_Char_Set_Len := 0;
+ 
+       T1 := No_Table;
+       T2 := No_Table;
+ 
+       T1_Len := 0;
+       T2_Len := 0;
+ 
+       G     := No_Table;
+       G_Len := 0;
+ 
+       Edges     := No_Table;
+       Edges_Len := 0;
+ 
+       Vertices := No_Table;
+       NV       := 0;
+ 
+       NK := 0;
+       Max_Key_Len := 0;
+       Min_Key_Len := 0;
+    end Finalize;
+ 
+    ----------------------------
+    -- Generate_Mapping_Table --
+    ----------------------------
+ 
+    procedure Generate_Mapping_Table
+      (Tab  : Integer;
+       L1   : Natural;
+       L2   : Natural;
+       Seed : in out Natural)
+    is
+    begin
+       for J in 0 .. L1 - 1 loop
+          for K in 0 .. L2 - 1 loop
+             Random (Seed);
+             Set_Table (Tab, J, K, Seed mod NV);
+          end loop;
+       end loop;
+    end Generate_Mapping_Table;
+ 
+    -----------------------------
+    -- Generate_Mapping_Tables --
+    -----------------------------
+ 
+    procedure Generate_Mapping_Tables
+      (Opt  : Optimization;
+       Seed : in out Natural)
+    is
+    begin
+       --  If T1 and T2 are already allocated no need to do it twice. Reuse them
+       --  as their size has not changed.
+ 
+       if T1 = No_Table and then T2 = No_Table then
+          declare
+             Used_Char_Last : Natural := 0;
+             Used_Char      : Natural;
+ 
+          begin
+             if Opt = CPU_Time then
+                for P in reverse Character'Range loop
+                   Used_Char := Get_Used_Char (P);
+                   if Used_Char /= 0 then
+                      Used_Char_Last := Used_Char;
+                      exit;
+                   end if;
+                end loop;
+             end if;
+ 
+             T1_Len := Char_Pos_Set_Len;
+             T2_Len := Used_Char_Last + 1;
+             T1 := Allocate (T1_Len * T2_Len);
+             T2 := Allocate (T1_Len * T2_Len);
+          end;
+       end if;
+ 
+       Generate_Mapping_Table (T1, T1_Len, T2_Len, Seed);
+       Generate_Mapping_Table (T2, T1_Len, T2_Len, Seed);
+ 
+       if Verbose then
+          Put_Used_Char_Set (Output, "Used Character Set");
+          Put_Int_Matrix (Output, "Function Table 1", T1,
+                         T1_Len, T2_Len);
+          Put_Int_Matrix (Output, "Function Table 2", T2,
+                         T1_Len, T2_Len);
+       end if;
+    end Generate_Mapping_Tables;
+ 
+    ------------------
+    -- Get_Char_Pos --
+    ------------------
+ 
+    function Get_Char_Pos (P : Natural) return Natural is
+       N : constant Natural := Char_Pos_Set + P;
+    begin
+       return IT.Table (N);
+    end Get_Char_Pos;
+ 
+    ---------------
+    -- Get_Edges --
+    ---------------
+ 
+    function Get_Edges (F : Natural) return Edge_Type is
+       N : constant Natural := Edges + (F * Edge_Size);
+       E : Edge_Type;
+    begin
+       E.X   := IT.Table (N);
+       E.Y   := IT.Table (N + 1);
+       E.Key := IT.Table (N + 2);
+       return E;
+    end Get_Edges;
+ 
+    ---------------
+    -- Get_Graph --
+    ---------------
+ 
+    function Get_Graph (N : Natural) return Integer is
+    begin
+       return IT.Table (G + N);
+    end Get_Graph;
+ 
+    -------------
+    -- Get_Key --
+    -------------
+ 
+    function Get_Key (N : Key_Id) return Key_Type is
+       K : Key_Type;
+    begin
+       K.Edge := IT.Table (Keys + N);
+       return K;
+    end Get_Key;
+ 
+    ---------------
+    -- Get_Table --
+    ---------------
+ 
+    function Get_Table (T : Integer; X, Y : Natural) return Natural is
+       N : constant Natural := T + (Y * T1_Len) + X;
+    begin
+       return IT.Table (N);
+    end Get_Table;
+ 
+    -------------------
+    -- Get_Used_Char --
+    -------------------
+ 
+    function Get_Used_Char (C : Character) return Natural is
+       N : constant Natural := Used_Char_Set + Character'Pos (C);
+    begin
+       return IT.Table (N);
+    end Get_Used_Char;
+ 
+    ------------------
+    -- Get_Vertices --
+    ------------------
+ 
+    function Get_Vertices (F : Natural) return Vertex_Type is
+       N : constant Natural := Vertices + (F * Vertex_Size);
+       V : Vertex_Type;
+    begin
+       V.First := IT.Table (N);
+       V.Last  := IT.Table (N + 1);
+       return V;
+    end Get_Vertices;
+ 
+    -----------
+    -- Image --
+    -----------
+ 
+    function Image (Int : Integer; W : Natural := 0) return String is
+       B : String (1 .. 32);
+       L : Natural := 0;
+ 
+       procedure Img (V : Natural);
+       --  Compute image of V into B, starting at B (L), incrementing L
+ 
+       ---------
+       -- Img --
+       ---------
+ 
+       procedure Img (V : Natural) is
+       begin
+          if V > 9 then
+             Img (V / 10);
+          end if;
+ 
+          L := L + 1;
+          B (L) := Character'Val ((V mod 10) + Character'Pos ('0'));
+       end Img;
+ 
+    --  Start of processing for Image
+ 
+    begin
+       if Int < 0 then
+          L := L + 1;
+          B (L) := '-';
+          Img (-Int);
+       else
+          Img (Int);
+       end if;
+ 
+       return Image (B (1 .. L), W);
+    end Image;
+ 
+    -----------
+    -- Image --
+    -----------
+ 
+    function Image (Str : String; W : Natural := 0) return String is
+       Len : constant Natural := Str'Length;
+       Max : Natural := Len;
+ 
+    begin
+       if Max < W then
+          Max := W;
+       end if;
+ 
+       declare
+          Buf : String (1 .. Max) := (1 .. Max => ' ');
+ 
+       begin
+          for J in 0 .. Len - 1 loop
+             Buf (Max - Len + 1 + J) := Str (Str'First + J);
+          end loop;
+ 
+          return Buf;
+       end;
+    end Image;
+ 
+    -------------
+    -- Initial --
+    -------------
+ 
+    function Initial (K : Key_Id) return Word_Id is
+    begin
+       return K;
+    end Initial;
+ 
+    ----------------
+    -- Initialize --
+    ----------------
+ 
+    procedure Initialize
+      (Seed  : Natural;
+       V     : Positive;
+       Optim : Optimization;
+       Tries : Positive)
+    is
+    begin
+       if Verbose then
+          Put (Output, "Initialize");
+          New_Line (Output);
+       end if;
+ 
+       --  Deallocate the part of the table concerning the reduced words.
+       --  Initial words are already present in the table. We may have reduced
+       --  words already there because a previous computation failed. We are
+       --  currently retrying and the reduced words have to be deallocated.
+ 
+       for W in Reduced (0) .. WT.Last loop
+          Free_Word (WT.Table (W));
+       end loop;
+ 
+       IT.Init;
+ 
+       --  Initialize of computation variables
+ 
+       Keys := No_Table;
+ 
+       Char_Pos_Set     := No_Table;
+       Char_Pos_Set_Len := 0;
+ 
+       Used_Char_Set     := No_Table;
+       Used_Char_Set_Len := 0;
+ 
+       T1 := No_Table;
+       T2 := No_Table;
+ 
+       T1_Len := 0;
+       T2_Len := 0;
+ 
+       G     := No_Table;
+       G_Len := 0;
+ 
+       Edges     := No_Table;
+       Edges_Len := 0;
+ 
+       if V <= 2 * NK then
+          raise Program_Error with "K to V ratio cannot be lower than 2";
+       end if;
+ 
+       Vertices := No_Table;
+       NV       := V;
+ 
+       S    := Seed;
+       Opt  := Optim;
+       NT   := Tries;
+ 
+       Keys := Allocate (NK);
+ 
+       --  Resize initial words to have all of them at the same size
+       --  (so the size of the largest one).
+ 
+       for K in 0 .. NK - 1 loop
+          Resize_Word (WT.Table (Initial (K)), Max_Key_Len);
+       end loop;
+ 
+       --  Allocated the table to store the reduced words. As WT is a
+       --  GNAT.Table (using C memory management), pointers have to be
+       --  explicitly initialized to null.
+ 
+       WT.Set_Last (Reduced (NK - 1));
+ 
+       --  Note: Reduced (0) = NK + 1
+ 
+       WT.Table (NK) := null;
+ 
+       for W in 0 .. NK - 1 loop
+          WT.Table (Reduced (W)) := null;
+       end loop;
+    end Initialize;
+ 
+    ------------
+    -- Insert --
+    ------------
+ 
+    procedure Insert (Value : String) is
+       Len : constant Natural := Value'Length;
+ 
+    begin
+       if Verbose then
+          Put (Output, "Inserting """ & Value & """");
+          New_Line (Output);
+       end if;
+ 
+       for J in Value'Range loop
+          pragma Assert (Value (J) /= ASCII.NUL);
+          null;
+       end loop;
+ 
+       WT.Set_Last (NK);
+       WT.Table (NK) := New_Word (Value);
+       NK := NK + 1;
+ 
+       if Max_Key_Len < Len then
+          Max_Key_Len := Len;
+       end if;
+ 
+       if Min_Key_Len = 0 or else Len < Min_Key_Len then
+          Min_Key_Len := Len;
+       end if;
+    end Insert;
+ 
+    --------------
+    -- New_Line --
+    --------------
+ 
+    procedure New_Line (File : File_Descriptor) is
+    begin
+       if Write (File, EOL'Address, 1) /= 1 then
+          raise Program_Error;
+       end if;
+    end New_Line;
+ 
+    --------------
+    -- New_Word --
+    --------------
+ 
+    function New_Word (S : String) return Word_Type is
+    begin
+       return new String'(S);
+    end New_Word;
+ 
+    ------------------------------
+    -- Parse_Position_Selection --
+    ------------------------------
+ 
+    procedure Parse_Position_Selection (Argument : String) is
+       N : Natural          := Argument'First;
+       L : constant Natural := Argument'Last;
+       M : constant Natural := Max_Key_Len;
+ 
+       T : array (1 .. M) of Boolean := (others => False);
+ 
+       function Parse_Index return Natural;
+       --  Parse argument starting at index N to find an index
+ 
+       -----------------
+       -- Parse_Index --
+       -----------------
+ 
+       function Parse_Index return Natural is
+          C : Character := Argument (N);
+          V : Natural   := 0;
+ 
+       begin
+          if C = '$' then
+             N := N + 1;
+             return M;
+          end if;
+ 
+          if C not in '0' .. '9' then
+             raise Program_Error with "cannot read position argument";
+          end if;
+ 
+          while C in '0' .. '9' loop
+             V := V * 10 + (Character'Pos (C) - Character'Pos ('0'));
+             N := N + 1;
+             exit when L < N;
+             C := Argument (N);
+          end loop;
+ 
+          return V;
+       end Parse_Index;
+ 
+    --  Start of processing for Parse_Position_Selection
+ 
+    begin
+       --  Empty specification means all the positions
+ 
+       if L < N then
+          Char_Pos_Set_Len := M;
+          Char_Pos_Set := Allocate (Char_Pos_Set_Len);
+ 
+          for C in 0 .. Char_Pos_Set_Len - 1 loop
+             Set_Char_Pos (C, C + 1);
+          end loop;
+ 
+       else
+          loop
+             declare
+                First, Last : Natural;
+ 
+             begin
+                First := Parse_Index;
+                Last  := First;
+ 
+                --  Detect a range
+ 
+                if N <= L and then Argument (N) = '-' then
+                   N := N + 1;
+                   Last := Parse_Index;
+                end if;
+ 
+                --  Include the positions in the selection
+ 
+                for J in First .. Last loop
+                   T (J) := True;
+                end loop;
+             end;
+ 
+             exit when L < N;
+ 
+             if Argument (N) /= ',' then
+                raise Program_Error with "cannot read position argument";
+             end if;
+ 
+             N := N + 1;
+          end loop;
+ 
+          --  Compute position selection length
+ 
+          N := 0;
+          for J in T'Range loop
+             if T (J) then
+                N := N + 1;
+             end if;
+          end loop;
+ 
+          --  Fill position selection
+ 
+          Char_Pos_Set_Len := N;
+          Char_Pos_Set := Allocate (Char_Pos_Set_Len);
+ 
+          N := 0;
+          for J in T'Range loop
+             if T (J) then
+                Set_Char_Pos (N, J);
+                N := N + 1;
+             end if;
+          end loop;
+       end if;
+    end Parse_Position_Selection;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put (File : File_Descriptor; Str : String) is
+       Len : constant Natural := Str'Length;
+    begin
+       for J in Str'Range loop
+          pragma Assert (Str (J) /= ASCII.NUL);
+          null;
+       end loop;
+ 
+       if Write (File, Str'Address, Len) /= Len then
+          raise Program_Error;
+       end if;
+    end Put;
+ 
+    ---------
+    -- Put --
+    ---------
+ 
+    procedure Put
+      (F  : File_Descriptor;
+       S  : String;
+       F1 : Natural;
+       L1 : Natural;
+       C1 : Natural;
+       F2 : Natural;
+       L2 : Natural;
+       C2 : Natural)
+    is
+       Len : constant Natural := S'Length;
+ 
+       procedure Flush;
+       --  Write current line, followed by LF
+ 
+       -----------
+       -- Flush --
+       -----------
+ 
+       procedure Flush is
+       begin
+          Put (F, Line (1 .. Last));
+          New_Line (F);
+          Last := 0;
+       end Flush;
+ 
+    --  Start of processing for Put
+ 
+    begin
+       if C1 = F1 and then C2 = F2 then
+          Last := 0;
+       end if;
+ 
+       if Last + Len + 3 >= Max then
+          Flush;
+       end if;
+ 
+       if Last = 0 then
+          Add ("     ");
+ 
+          if F1 <= L1 then
+             if C1 = F1 and then C2 = F2 then
+                Add ('(');
+ 
+                if F1 = L1 then
+                   Add ("0 .. 0 => ");
+                end if;
+ 
+             else
+                Add (' ');
+             end if;
+          end if;
+       end if;
+ 
+       if C2 = F2 then
+          Add ('(');
+ 
+          if F2 = L2 then
+             Add ("0 .. 0 => ");
+          end if;
+ 
+       else
+          Add (' ');
+       end if;
+ 
+       Add (S);
+ 
+       if C2 = L2 then
+          Add (')');
+ 
+          if F1 > L1 then
+             Add (';');
+             Flush;
+ 
+          elsif C1 /= L1 then
+             Add (',');
+             Flush;
+ 
+          else
+             Add (')');
+             Add (';');
+             Flush;
+          end if;
+ 
+       else
+          Add (',');
+       end if;
+    end Put;
+ 
+    ---------------
+    -- Put_Edges --
+    ---------------
+ 
+    procedure Put_Edges (File  : File_Descriptor; Title : String) is
+       E  : Edge_Type;
+       F1 : constant Natural := 1;
+       L1 : constant Natural := Edges_Len - 1;
+       M  : constant Natural := Max / 5;
+ 
+    begin
+       Put (File, Title);
+       New_Line (File);
+ 
+       --  Edges valid range is 1 .. Edge_Len - 1
+ 
+       for J in F1 .. L1 loop
+          E := Get_Edges (J);
+          Put (File, Image (J, M),     F1, L1, J, 1, 4, 1);
+          Put (File, Image (E.X, M),   F1, L1, J, 1, 4, 2);
+          Put (File, Image (E.Y, M),   F1, L1, J, 1, 4, 3);
+          Put (File, Image (E.Key, M), F1, L1, J, 1, 4, 4);
+       end loop;
+    end Put_Edges;
+ 
+    ----------------------
+    -- Put_Initial_Keys --
+    ----------------------
+ 
+    procedure Put_Initial_Keys (File : File_Descriptor; Title : String) is
+       F1 : constant Natural := 0;
+       L1 : constant Natural := NK - 1;
+       M  : constant Natural := Max / 5;
+       K  : Key_Type;
+ 
+    begin
+       Put (File, Title);
+       New_Line (File);
+ 
+       for J in F1 .. L1 loop
+          K := Get_Key (J);
+          Put (File, Image (J, M),           F1, L1, J, 1, 3, 1);
+          Put (File, Image (K.Edge, M),      F1, L1, J, 1, 3, 2);
+          Put (File, Trim_Trailing_Nuls (WT.Table (Initial (J)).all),
+                     F1, L1, J, 1, 3, 3);
+       end loop;
+    end Put_Initial_Keys;
+ 
+    --------------------
+    -- Put_Int_Matrix --
+    --------------------
+ 
+    procedure Put_Int_Matrix
+      (File   : File_Descriptor;
+       Title  : String;
+       Table  : Integer;
+       Len_1  : Natural;
+       Len_2  : Natural)
+    is
+       F1 : constant Integer := 0;
+       L1 : constant Integer := Len_1 - 1;
+       F2 : constant Integer := 0;
+       L2 : constant Integer := Len_2 - 1;
+       Ix : Natural;
+ 
+    begin
+       Put (File, Title);
+       New_Line (File);
+ 
+       if Len_2 = 0 then
+          for J in F1 .. L1 loop
+             Ix := IT.Table (Table + J);
+             Put (File, Image (Ix), 1, 0, 1, F1, L1, J);
+          end loop;
+ 
+       else
+          for J in F1 .. L1 loop
+             for K in F2 .. L2 loop
+                Ix := IT.Table (Table + J + K * Len_1);
+                Put (File, Image (Ix), F1, L1, J, F2, L2, K);
+             end loop;
+          end loop;
+       end if;
+    end Put_Int_Matrix;
+ 
+    --------------------
+    -- Put_Int_Vector --
+    --------------------
+ 
+    procedure Put_Int_Vector
+      (File   : File_Descriptor;
+       Title  : String;
+       Vector : Integer;
+       Length : Natural)
+    is
+       F2 : constant Natural := 0;
+       L2 : constant Natural := Length - 1;
+ 
+    begin
+       Put (File, Title);
+       New_Line (File);
+ 
+       for J in F2 .. L2 loop
+          Put (File, Image (IT.Table (Vector + J)), 1, 0, 1, F2, L2, J);
+       end loop;
+    end Put_Int_Vector;
+ 
+    ----------------------
+    -- Put_Reduced_Keys --
+    ----------------------
+ 
+    procedure Put_Reduced_Keys (File : File_Descriptor; Title : String) is
+       F1 : constant Natural := 0;
+       L1 : constant Natural := NK - 1;
+       M  : constant Natural := Max / 5;
+       K  : Key_Type;
+ 
+    begin
+       Put (File, Title);
+       New_Line (File);
+ 
+       for J in F1 .. L1 loop
+          K := Get_Key (J);
+          Put (File, Image (J, M),           F1, L1, J, 1, 3, 1);
+          Put (File, Image (K.Edge, M),      F1, L1, J, 1, 3, 2);
+          Put (File, Trim_Trailing_Nuls (WT.Table (Reduced (J)).all),
+                     F1, L1, J, 1, 3, 3);
+       end loop;
+    end Put_Reduced_Keys;
+ 
+    -----------------------
+    -- Put_Used_Char_Set --
+    -----------------------
+ 
+    procedure Put_Used_Char_Set (File : File_Descriptor; Title : String) is
+       F : constant Natural := Character'Pos (Character'First);
+       L : constant Natural := Character'Pos (Character'Last);
+ 
+    begin
+       Put (File, Title);
+       New_Line (File);
+ 
+       for J in Character'Range loop
+          Put
+            (File, Image (Get_Used_Char (J)), 1, 0, 1, F, L, Character'Pos (J));
+       end loop;
+    end Put_Used_Char_Set;
+ 
+    ----------------------
+    -- Put_Vertex_Table --
+    ----------------------
+ 
+    procedure Put_Vertex_Table (File : File_Descriptor; Title : String) is
+       F1 : constant Natural := 0;
+       L1 : constant Natural := NV - 1;
+       M  : constant Natural := Max / 4;
+       V  : Vertex_Type;
+ 
+    begin
+       Put (File, Title);
+       New_Line (File);
+ 
+       for J in F1 .. L1 loop
+          V := Get_Vertices (J);
+          Put (File, Image (J, M),       F1, L1, J, 1, 3, 1);
+          Put (File, Image (V.First, M), F1, L1, J, 1, 3, 2);
+          Put (File, Image (V.Last, M),  F1, L1, J, 1, 3, 3);
+       end loop;
+    end Put_Vertex_Table;
+ 
+    ------------
+    -- Random --
+    ------------
+ 
+    procedure Random (Seed : in out Natural) is
+ 
+       --  Park & Miller Standard Minimal using Schrage's algorithm to avoid
+       --  overflow: Xn+1 = 16807 * Xn mod (2 ** 31 - 1)
+ 
+       R : Natural;
+       Q : Natural;
+       X : Integer;
+ 
+    begin
+       R := Seed mod 127773;
+       Q := Seed / 127773;
+       X := 16807 * R - 2836 * Q;
+ 
+       Seed := (if X < 0 then X + 2147483647 else X);
+    end Random;
+ 
+    -------------
+    -- Reduced --
+    -------------
+ 
+    function Reduced (K : Key_Id) return Word_Id is
+    begin
+       return K + NK + 1;
+    end Reduced;
+ 
+    -----------------
+    -- Resize_Word --
+    -----------------
+ 
+    procedure Resize_Word (W : in out Word_Type; Len : Natural) is
+       S1 : constant String := W.all;
+       S2 : String (1 .. Len) := (others => ASCII.NUL);
+       L  : constant Natural := S1'Length;
+    begin
+       if L /= Len then
+          Free_Word (W);
+          S2 (1 .. L) := S1;
+          W := New_Word (S2);
+       end if;
+    end Resize_Word;
+ 
+    --------------------------
+    -- Select_Char_Position --
+    --------------------------
+ 
+    procedure Select_Char_Position is
+ 
+       type Vertex_Table_Type is array (Natural range <>) of Vertex_Type;
+ 
+       procedure Build_Identical_Keys_Sets
+         (Table : in out Vertex_Table_Type;
+          Last  : in out Natural;
+          Pos   : Natural);
+       --  Build a list of keys subsets that are identical with the current
+       --  position selection plus Pos. Once this routine is called, reduced
+       --  words are sorted by subsets and each item (First, Last) in Sets
+       --  defines the range of identical keys.
+       --  Need comment saying exactly what Last is ???
+ 
+       function Count_Different_Keys
+         (Table : Vertex_Table_Type;
+          Last  : Natural;
+          Pos   : Natural) return Natural;
+       --  For each subset in Sets, count the number of different keys if we add
+       --  Pos to the current position selection.
+ 
+       Sel_Position : IT.Table_Type (1 .. Max_Key_Len);
+       Last_Sel_Pos : Natural := 0;
+       Max_Sel_Pos  : Natural := 0;
+ 
+       -------------------------------
+       -- Build_Identical_Keys_Sets --
+       -------------------------------
+ 
+       procedure Build_Identical_Keys_Sets
+         (Table : in out Vertex_Table_Type;
+          Last  : in out Natural;
+          Pos   : Natural)
+       is
+          S : constant Vertex_Table_Type := Table (Table'First .. Last);
+          C : constant Natural           := Pos;
+          --  Shortcuts (why are these not renames ???)
+ 
+          F : Integer;
+          L : Integer;
+          --  First and last words of a subset
+ 
+          Offset : Natural;
+          --  GNAT.Heap_Sort assumes that the first array index is 1. Offset
+          --  defines the translation to operate.
+ 
+          function Lt (L, R : Natural) return Boolean;
+          procedure Move (From : Natural; To : Natural);
+          --  Subprograms needed by GNAT.Heap_Sort_G
+ 
+          --------
+          -- Lt --
+          --------
+ 
+          function Lt (L, R : Natural) return Boolean is
+             C     : constant Natural := Pos;
+             Left  : Natural;
+             Right : Natural;
+ 
+          begin
+             if L = 0 then
+                Left  := NK;
+                Right := Offset + R;
+             elsif R = 0 then
+                Left  := Offset + L;
+                Right := NK;
+             else
+                Left  := Offset + L;
+                Right := Offset + R;
+             end if;
+ 
+             return WT.Table (Left)(C) < WT.Table (Right)(C);
+          end Lt;
+ 
+          ----------
+          -- Move --
+          ----------
+ 
+          procedure Move (From : Natural; To : Natural) is
+             Target, Source : Natural;
+ 
+          begin
+             if From = 0 then
+                Source := NK;
+                Target := Offset + To;
+             elsif To = 0 then
+                Source := Offset + From;
+                Target := NK;
+             else
+                Source := Offset + From;
+                Target := Offset + To;
+             end if;
+ 
+             WT.Table (Target) := WT.Table (Source);
+             WT.Table (Source) := null;
+          end Move;
+ 
+          package Sorting is new GNAT.Heap_Sort_G (Move, Lt);
+ 
+       --  Start of processing for Build_Identical_Key_Sets
+ 
+       begin
+          Last := 0;
+ 
+          --  For each subset in S, extract the new subsets we have by adding C
+          --  in the position selection.
+ 
+          for J in S'Range loop
+             pragma Annotate (CodePeer, Modified, S (J));
+ 
+             if S (J).First = S (J).Last then
+                F := S (J).First;
+                L := S (J).Last;
+                Last := Last + 1;
+                Table (Last) := (F, L);
+ 
+             else
+                Offset := Reduced (S (J).First) - 1;
+                Sorting.Sort (S (J).Last - S (J).First + 1);
+ 
+                F := S (J).First;
+                L := F;
+                for N in S (J).First .. S (J).Last loop
+ 
+                   --  For the last item, close the last subset
+ 
+                   if N = S (J).Last then
+                      Last := Last + 1;
+                      Table (Last) := (F, N);
+ 
+                   --  Two contiguous words are identical when they have the
+                   --  same Cth character.
+ 
+                   elsif WT.Table (Reduced (N))(C) =
+                         WT.Table (Reduced (N + 1))(C)
+                   then
+                      L := N + 1;
+ 
+                   --  Find a new subset of identical keys. Store the current
+                   --  one and create a new subset.
+ 
+                   else
+                      Last := Last + 1;
+                      Table (Last) := (F, L);
+                      F := N + 1;
+                      L := F;
+                   end if;
+                end loop;
+             end if;
+          end loop;
+       end Build_Identical_Keys_Sets;
+ 
+       --------------------------
+       -- Count_Different_Keys --
+       --------------------------
+ 
+       function Count_Different_Keys
+         (Table : Vertex_Table_Type;
+          Last  : Natural;
+          Pos   : Natural) return Natural
+       is
+          N : array (Character) of Natural;
+          C : Character;
+          T : Natural := 0;
+ 
+       begin
+          --  For each subset, count the number of words that are still
+          --  different when we include Pos in the position selection. Only
+          --  focus on this position as the other positions already produce
+          --  identical keys.
+ 
+          for S in 1 .. Last loop
+ 
+             --  Count the occurrences of the different characters
+ 
+             N := (others => 0);
+             for K in Table (S).First .. Table (S).Last loop
+                C := WT.Table (Reduced (K))(Pos);
+                N (C) := N (C) + 1;
+             end loop;
+ 
+             --  Update the number of different keys. Each character used
+             --  denotes a different key.
+ 
+             for J in N'Range loop
+                if N (J) > 0 then
+                   T := T + 1;
+                end if;
+             end loop;
+          end loop;
+ 
+          return T;
+       end Count_Different_Keys;
+ 
+    --  Start of processing for Select_Char_Position
+ 
+    begin
+       --  Initialize the reduced words set
+ 
+       for K in 0 .. NK - 1 loop
+          WT.Table (Reduced (K)) := New_Word (WT.Table (Initial (K)).all);
+       end loop;
+ 
+       declare
+          Differences          : Natural;
+          Max_Differences      : Natural := 0;
+          Old_Differences      : Natural;
+          Max_Diff_Sel_Pos     : Natural := 0; -- init to kill warning
+          Max_Diff_Sel_Pos_Idx : Natural := 0; -- init to kill warning
+          Same_Keys_Sets_Table : Vertex_Table_Type (1 .. NK);
+          Same_Keys_Sets_Last  : Natural := 1;
+ 
+       begin
+          for C in Sel_Position'Range loop
+             Sel_Position (C) := C;
+          end loop;
+ 
+          Same_Keys_Sets_Table (1) := (0, NK - 1);
+ 
+          loop
+             --  Preserve maximum number of different keys and check later on
+             --  that this value is strictly incrementing. Otherwise, it means
+             --  that two keys are strictly identical.
+ 
+             Old_Differences := Max_Differences;
+ 
+             --  The first position should not exceed the minimum key length.
+             --  Otherwise, we may end up with an empty word once reduced.
+ 
+             Max_Sel_Pos :=
+               (if Last_Sel_Pos = 0 then Min_Key_Len else Max_Key_Len);
+ 
+             --  Find which position increases more the number of differences
+ 
+             for J in Last_Sel_Pos + 1 .. Max_Sel_Pos loop
+                Differences := Count_Different_Keys
+                  (Same_Keys_Sets_Table,
+                   Same_Keys_Sets_Last,
+                   Sel_Position (J));
+ 
+                if Verbose then
+                   Put (Output,
+                        "Selecting position" & Sel_Position (J)'Img &
+                          " results in" & Differences'Img &
+                          " differences");
+                   New_Line (Output);
+                end if;
+ 
+                if Differences > Max_Differences then
+                   Max_Differences      := Differences;
+                   Max_Diff_Sel_Pos     := Sel_Position (J);
+                   Max_Diff_Sel_Pos_Idx := J;
+                end if;
+             end loop;
+ 
+             if Old_Differences = Max_Differences then
+                raise Program_Error with "some keys are identical";
+             end if;
+ 
+             --  Insert selected position and sort Sel_Position table
+ 
+             Last_Sel_Pos := Last_Sel_Pos + 1;
+             Sel_Position (Last_Sel_Pos + 1 .. Max_Diff_Sel_Pos_Idx) :=
+               Sel_Position (Last_Sel_Pos .. Max_Diff_Sel_Pos_Idx - 1);
+             Sel_Position (Last_Sel_Pos) := Max_Diff_Sel_Pos;
+ 
+             for P in 1 .. Last_Sel_Pos - 1 loop
+                if Max_Diff_Sel_Pos < Sel_Position (P) then
+                   pragma Annotate
+                     (CodePeer, False_Positive,
+                      "test always false", "false positive?");
+ 
+                   Sel_Position (P + 1 .. Last_Sel_Pos) :=
+                     Sel_Position (P .. Last_Sel_Pos - 1);
+                   Sel_Position (P) := Max_Diff_Sel_Pos;
+                   exit;
+                end if;
+             end loop;
+ 
+             exit when Max_Differences = NK;
+ 
+             Build_Identical_Keys_Sets
+               (Same_Keys_Sets_Table,
+                Same_Keys_Sets_Last,
+                Max_Diff_Sel_Pos);
+ 
+             if Verbose then
+                Put (Output,
+                     "Selecting position" & Max_Diff_Sel_Pos'Img &
+                       " results in" & Max_Differences'Img &
+                       " differences");
+                New_Line (Output);
+                Put (Output, "--");
+                New_Line (Output);
+                for J in 1 .. Same_Keys_Sets_Last loop
+                   for K in
+                     Same_Keys_Sets_Table (J).First ..
+                     Same_Keys_Sets_Table (J).Last
+                   loop
+                      Put (Output,
+                           Trim_Trailing_Nuls (WT.Table (Reduced (K)).all));
+                      New_Line (Output);
+                   end loop;
+                   Put (Output, "--");
+                   New_Line (Output);
+                end loop;
+             end if;
+          end loop;
+       end;
+ 
+       Char_Pos_Set_Len := Last_Sel_Pos;
+       Char_Pos_Set := Allocate (Char_Pos_Set_Len);
+ 
+       for C in 1 .. Last_Sel_Pos loop
+          Set_Char_Pos (C - 1, Sel_Position (C));
+       end loop;
+    end Select_Char_Position;
+ 
+    --------------------------
+    -- Select_Character_Set --
+    --------------------------
+ 
+    procedure Select_Character_Set is
+       Last : Natural := 0;
+       Used : array (Character) of Boolean := (others => False);
+       Char : Character;
+ 
+    begin
+       for J in 0 .. NK - 1 loop
+          for K in 0 .. Char_Pos_Set_Len - 1 loop
+             Char := WT.Table (Initial (J))(Get_Char_Pos (K));
+             exit when Char = ASCII.NUL;
+             Used (Char) := True;
+          end loop;
+       end loop;
+ 
+       Used_Char_Set_Len := 256;
+       Used_Char_Set := Allocate (Used_Char_Set_Len);
+ 
+       for J in Used'Range loop
+          if Used (J) then
+             Set_Used_Char (J, Last);
+             Last := Last + 1;
+          else
+             Set_Used_Char (J, 0);
+          end if;
+       end loop;
+    end Select_Character_Set;
+ 
+    ------------------
+    -- Set_Char_Pos --
+    ------------------
+ 
+    procedure Set_Char_Pos (P : Natural; Item : Natural) is
+       N : constant Natural := Char_Pos_Set + P;
+    begin
+       IT.Table (N) := Item;
+    end Set_Char_Pos;
+ 
+    ---------------
+    -- Set_Edges --
+    ---------------
+ 
+    procedure Set_Edges (F : Natural; Item : Edge_Type) is
+       N : constant Natural := Edges + (F * Edge_Size);
+    begin
+       IT.Table (N)     := Item.X;
+       IT.Table (N + 1) := Item.Y;
+       IT.Table (N + 2) := Item.Key;
+    end Set_Edges;
+ 
+    ---------------
+    -- Set_Graph --
+    ---------------
+ 
+    procedure Set_Graph (N : Natural; Item : Integer) is
+    begin
+       IT.Table (G + N) := Item;
+    end Set_Graph;
+ 
+    -------------
+    -- Set_Key --
+    -------------
+ 
+    procedure Set_Key (N : Key_Id; Item : Key_Type) is
+    begin
+       IT.Table (Keys + N) := Item.Edge;
+    end Set_Key;
+ 
+    ---------------
+    -- Set_Table --
+    ---------------
+ 
+    procedure Set_Table (T : Integer; X, Y : Natural; Item : Natural) is
+       N : constant Natural := T + ((Y * T1_Len) + X);
+    begin
+       IT.Table (N) := Item;
+    end Set_Table;
+ 
+    -------------------
+    -- Set_Used_Char --
+    -------------------
+ 
+    procedure Set_Used_Char (C : Character; Item : Natural) is
+       N : constant Natural := Used_Char_Set + Character'Pos (C);
+    begin
+       IT.Table (N) := Item;
+    end Set_Used_Char;
+ 
+    ------------------
+    -- Set_Vertices --
+    ------------------
+ 
+    procedure Set_Vertices (F : Natural; Item : Vertex_Type) is
+       N : constant Natural := Vertices + (F * Vertex_Size);
+    begin
+       IT.Table (N)     := Item.First;
+       IT.Table (N + 1) := Item.Last;
+    end Set_Vertices;
+ 
+    ---------
+    -- Sum --
+    ---------
+ 
+    function Sum
+      (Word  : Word_Type;
+       Table : Table_Id;
+       Opt   : Optimization) return Natural
+    is
+       S : Natural := 0;
+       R : Natural;
+ 
+    begin
+       case Opt is
+          when CPU_Time =>
+             for J in 0 .. T1_Len - 1 loop
+                exit when Word (J + 1) = ASCII.NUL;
+                R := Get_Table (Table, J, Get_Used_Char (Word (J + 1)));
+                pragma Assert (NV /= 0);
+                S := (S + R) mod NV;
+             end loop;
+ 
+          when Memory_Space =>
+             for J in 0 .. T1_Len - 1 loop
+                exit when Word (J + 1) = ASCII.NUL;
+                R := Get_Table (Table, J, 0);
+                pragma Assert (NV /= 0);
+                S := (S + R * Character'Pos (Word (J + 1))) mod NV;
+             end loop;
+       end case;
+ 
+       return S;
+    end Sum;
+ 
+    ------------------------
+    -- Trim_Trailing_Nuls --
+    ------------------------
+ 
+    function Trim_Trailing_Nuls (Str : String) return String is
+    begin
+       for J in reverse Str'Range loop
+          if Str (J) /= ASCII.NUL then
+             return Str (Str'First .. J);
+          end if;
+       end loop;
+ 
+       return Str;
+    end Trim_Trailing_Nuls;
+ 
+    ---------------
+    -- Type_Size --
+    ---------------
+ 
+    function Type_Size (L : Natural) return Natural is
+    begin
+       if L <= 2 ** 8 then
+          return 8;
+       elsif L <= 2 ** 16 then
+          return 16;
+       else
+          return 32;
+       end if;
+    end Type_Size;
+ 
+    -----------
+    -- Value --
+    -----------
+ 
+    function Value
+      (Name : Table_Name;
+       J    : Natural;
+       K    : Natural := 0) return Natural
+    is
+    begin
+       case Name is
+          when Character_Position =>
+             return Get_Char_Pos (J);
+ 
+          when Used_Character_Set =>
+             return Get_Used_Char (Character'Val (J));
+ 
+          when Function_Table_1 =>
+             return Get_Table (T1, J, K);
+ 
+          when Function_Table_2 =>
+             return Get_Table (T2, J, K);
+ 
+          when Graph_Table =>
+             return Get_Graph (J);
+       end case;
+    end Value;
+ 
+ end System.Perfect_Hash_Generators;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pehage.ads gcc-12.1.0/gcc/ada/libgnat/s-pehage.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pehage.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-pehage.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,210 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --        S Y S T E M . P E R F E C T _ H A S H _ G E N E R A T O R S       --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --                     Copyright (C) 2002-2022, AdaCore                     --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package provides a generator of static minimal perfect hash functions.
+ --  To understand what a perfect hash function is, we define several notions.
+ --  These definitions are inspired from the following paper:
+ 
+ --    Zbigniew J. Czech, George Havas, and Bohdan S. Majewski ``An Optimal
+ --    Algorithm for Generating Minimal Perfect Hash Functions'', Information
+ --    Processing Letters, 43(1992) pp.257-264, Oct.1992
+ 
+ --  Let W be a set of m words. A hash function h is a function that maps the
+ --  set of words W into some given interval I of integers [0, k-1], where k is
+ --  an integer, usually k >= m. h (w) where w is a word in W computes an
+ --  address or an integer from I for the storage or the retrieval of that
+ --  item. The storage area used to store items is known as a hash table. Words
+ --  for which the same address is computed are called synonyms. Due to the
+ --  existence of synonyms a situation called collision may arise in which two
+ --  items w1 and w2 have the same address. Several schemes for resolving
+ --  collisions are known. A perfect hash function is an injection from the word
+ --  set W to the integer interval I with k >= m.  If k = m, then h is a minimal
+ --  perfect hash function. A hash function is order preserving if it puts
+ --  entries into the hash table in a prespecified order.
+ 
+ --  A minimal perfect hash function is defined by two properties:
+ 
+ --    Since no collisions occur each item can be retrieved from the table in
+ --    *one* probe. This represents the "perfect" property.
+ 
+ --    The hash table size corresponds to the exact size of W and *no larger*.
+ --    This represents the "minimal" property.
+ 
+ --  The functions generated by this package require the words to be known in
+ --  advance (they are "static" hash functions). The hash functions are also
+ --  order preserving. If w2 is inserted after w1 in the generator, then h (w1)
+ --  < h (w2). These hashing functions are convenient for use with realtime
+ --  applications.
+ 
+ package System.Perfect_Hash_Generators is
+ 
+    type Optimization is (Memory_Space, CPU_Time);
+    --  Optimize either the memory space or the execution time. Note: in
+    --  practice, the optimization mode has little effect on speed. The tables
+    --  are somewhat smaller with Memory_Space.
+ 
+    Verbose : Boolean := False;
+    --  Output the status of the algorithm. For instance, the tables, the random
+    --  graph (edges, vertices) and selected char positions are output between
+    --  two iterations.
+ 
+    procedure Initialize
+      (Seed  : Natural;
+       V     : Positive;
+       Optim : Optimization;
+       Tries : Positive);
+    --  Initialize the generator and its internal structures. Set the number of
+    --  vertices in the random graphs. This value has to be greater than twice
+    --  the number of keys in order for the algorithm to succeed. The word set
+    --  is not modified (in particular when it is already set). For instance, it
+    --  is possible to run several times the generator with different settings
+    --  on the same words.
+    --
+    --  A classical way of doing is to Insert all the words and then to invoke
+    --  Initialize and Compute. If this fails to find a perfect hash function,
+    --  invoke Initialize again with other configuration parameters (probably
+    --  with a greater number of vertices). Once successful, invoke Define and
+    --  Value, and then Finalize.
+ 
+    procedure Finalize;
+    --  Deallocate the internal structures and the words table
+ 
+    procedure Insert (Value : String);
+    --  Insert a new word into the table. ASCII.NUL characters are not allowed.
+ 
+    Too_Many_Tries : exception;
+    --  Raised after Tries unsuccessful runs
+ 
+    procedure Compute (Position : String);
+    --  Compute the hash function. Position allows the definition of selection
+    --  of character positions used in the word hash function. Positions can be
+    --  separated by commas and ranges like x-y may be used. Character '$'
+    --  represents the final character of a word. With an empty position, the
+    --  generator automatically produces positions to reduce the memory usage.
+    --  Raise Too_Many_Tries if the algorithm does not succeed within Tries
+    --  attempts (see Initialize).
+ 
+    --  The procedure Define returns the lengths of an internal table and its
+    --  item type size. The function Value returns the value of each item in
+    --  the table. Together they can be used to retrieve the parameters of the
+    --  hash function which has been computed by a call to Compute.
+ 
+    --  The hash function has the following form:
+ 
+    --             h (w) = (g (f1 (w)) + g (f2 (w))) mod m
+ 
+    --  G is a function based on a graph table [0,n-1] -> [0,m-1]. m is the
+    --  number of keys. n is an internally computed value and it can be obtained
+    --  as the length of vector G.
+ 
+    --  F1 and F2 are two functions based on two function tables T1 and T2.
+    --  Their definition depends on the chosen optimization mode.
+ 
+    --  Only some character positions are used in the words because they are
+    --  significant. They are listed in a character position table (P in the
+    --  pseudo-code below). For instance, in {"jan", "feb", "mar", "apr", "jun",
+    --  "jul", "aug", "sep", "oct", "nov", "dec"}, only positions 2 and 3 are
+    --  significant (the first character can be ignored). In this example, P =
+    --  {2, 3}
+ 
+    --  When Optimization is CPU_Time, the first dimension of T1 and T2
+    --  corresponds to the character position in the word and the second to the
+    --  character set. As all the character set is not used, we define a used
+    --  character table which associates a distinct index to each used character
+    --  (unused characters are mapped to zero). In this case, the second
+    --  dimension of T1 and T2 is reduced to the used character set (C in the
+    --  pseudo-code below). Therefore, the hash function has the following:
+ 
+    --    function Hash (S : String) return Natural is
+    --       F      : constant Natural := S'First - 1;
+    --       L      : constant Natural := S'Length;
+    --       F1, F2 : Natural := 0;
+    --       J      : <t>;
+ 
+    --    begin
+    --       for K in P'Range loop
+    --          exit when L < P (K);
+    --          J  := C (S (P (K) + F));
+    --          F1 := (F1 + Natural (T1 (K, J))) mod <n>;
+    --          F2 := (F2 + Natural (T2 (K, J))) mod <n>;
+    --       end loop;
+ 
+    --       return (Natural (G (F1)) + Natural (G (F2))) mod <m>;
+    --    end Hash;
+ 
+    --  When Optimization is Memory_Space, the first dimension of T1 and T2
+    --  corresponds to the character position in the word and the second
+    --  dimension is ignored. T1 and T2 are no longer matrices but vectors.
+    --  Therefore, the used character table is not available. The hash function
+    --  has the following form:
+ 
+    --     function Hash (S : String) return Natural is
+    --        F      : constant Natural := S'First - 1;
+    --        L      : constant Natural := S'Length;
+    --        F1, F2 : Natural := 0;
+    --        J      : <t>;
+ 
+    --     begin
+    --        for K in P'Range loop
+    --           exit when L < P (K);
+    --           J  := Character'Pos (S (P (K) + F));
+    --           F1 := (F1 + Natural (T1 (K) * J)) mod <n>;
+    --           F2 := (F2 + Natural (T2 (K) * J)) mod <n>;
+    --        end loop;
+ 
+    --        return (Natural (G (F1)) + Natural (G (F2))) mod <m>;
+    --     end Hash;
+ 
+    type Table_Name is
+      (Character_Position,
+       Used_Character_Set,
+       Function_Table_1,
+       Function_Table_2,
+       Graph_Table);
+ 
+    procedure Define
+      (Name      : Table_Name;
+       Item_Size : out Natural;
+       Length_1  : out Natural;
+       Length_2  : out Natural);
+    --  Return the definition of the table Name. This includes the length of
+    --  dimensions 1 and 2 and the size of an unsigned integer item. When
+    --  Length_2 is zero, the table has only one dimension. All the ranges
+    --  start from zero.
+ 
+    function Value
+      (Name : Table_Name;
+       J    : Natural;
+       K    : Natural := 0) return Natural;
+    --  Return the value of the component (J, K) of the table Name. When the
+    --  table has only one dimension, K is ignored.
+ 
+ end System.Perfect_Hash_Generators;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pooglo.adb gcc-12.1.0/gcc/ada/libgnat/s-pooglo.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pooglo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pooglo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pooglo.ads gcc-12.1.0/gcc/ada/libgnat/s-pooglo.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pooglo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pooglo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 32,38 ****
  --  Storage pool corresponding to default global storage pool used for types
  --  for which no storage pool is specified.
  
- with System;
  with System.Storage_Pools;
  with System.Storage_Elements;
  
--- 32,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pooloc.adb gcc-12.1.0/gcc/ada/libgnat/s-pooloc.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-pooloc.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pooloc.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-pooloc.ads gcc-12.1.0/gcc/ada/libgnat/s-pooloc.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-pooloc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-pooloc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-poosiz.adb gcc-12.1.0/gcc/ada/libgnat/s-poosiz.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-poosiz.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-poosiz.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-poosiz.ads gcc-12.1.0/gcc/ada/libgnat/s-poosiz.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-poosiz.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-poosiz.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-powflt.ads gcc-12.1.0/gcc/ada/libgnat/s-powflt.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-powflt.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-powflt.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020-2022, 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- --
***************
*** 34,85 ****
  package System.Powten_Flt is
     pragma Pure;
  
-    Maxpow : constant := 38;
-    --  Largest power of ten representable with Float
- 
     Maxpow_Exact : constant := 10;
     --  Largest power of ten exactly representable with Float. It is equal to
     --  floor (M * log 2 / log 5), when M is the size of the mantissa (24).
  
!    Powten : constant array (0 .. Maxpow) of Float :=
!       (00 => 1.0E+00,
!        01 => 1.0E+01,
!        02 => 1.0E+02,
!        03 => 1.0E+03,
!        04 => 1.0E+04,
!        05 => 1.0E+05,
!        06 => 1.0E+06,
!        07 => 1.0E+07,
!        08 => 1.0E+08,
!        09 => 1.0E+09,
!        10 => 1.0E+10,
!        11 => 1.0E+11,
!        12 => 1.0E+12,
!        13 => 1.0E+13,
!        14 => 1.0E+14,
!        15 => 1.0E+15,
!        16 => 1.0E+16,
!        17 => 1.0E+17,
!        18 => 1.0E+18,
!        19 => 1.0E+19,
!        20 => 1.0E+20,
!        21 => 1.0E+21,
!        22 => 1.0E+22,
!        23 => 1.0E+23,
!        24 => 1.0E+24,
!        25 => 1.0E+25,
!        26 => 1.0E+26,
!        27 => 1.0E+27,
!        28 => 1.0E+28,
!        29 => 1.0E+29,
!        30 => 1.0E+30,
!        31 => 1.0E+31,
!        32 => 1.0E+32,
!        33 => 1.0E+33,
!        34 => 1.0E+34,
!        35 => 1.0E+35,
!        36 => 1.0E+36,
!        37 => 1.0E+37,
!        38 => 1.0E+38);
  
  end System.Powten_Flt;
--- 34,67 ----
  package System.Powten_Flt is
     pragma Pure;
  
     Maxpow_Exact : constant := 10;
     --  Largest power of ten exactly representable with Float. It is equal to
     --  floor (M * log 2 / log 5), when M is the size of the mantissa (24).
  
!    Maxpow : constant := Maxpow_Exact * 2;
!    --  Largest power of ten exactly representable with a double Float
! 
!    Powten : constant array (0 .. Maxpow, 1 .. 2) of Float :=
!      [00 => [1.0E+00, 0.0],
!       01 => [1.0E+01, 0.0],
!       02 => [1.0E+02, 0.0],
!       03 => [1.0E+03, 0.0],
!       04 => [1.0E+04, 0.0],
!       05 => [1.0E+05, 0.0],
!       06 => [1.0E+06, 0.0],
!       07 => [1.0E+07, 0.0],
!       08 => [1.0E+08, 0.0],
!       09 => [1.0E+09, 0.0],
!       10 => [1.0E+10, 0.0],
!       11 => [1.0E+11, 1.0E+11 - Float'Machine (1.0E+11)],
!       12 => [1.0E+12, 1.0E+12 - Float'Machine (1.0E+12)],
!       13 => [1.0E+13, 1.0E+13 - Float'Machine (1.0E+13)],
!       14 => [1.0E+14, 1.0E+14 - Float'Machine (1.0E+14)],
!       15 => [1.0E+15, 1.0E+15 - Float'Machine (1.0E+15)],
!       16 => [1.0E+16, 1.0E+16 - Float'Machine (1.0E+16)],
!       17 => [1.0E+17, 1.0E+17 - Float'Machine (1.0E+17)],
!       18 => [1.0E+18, 1.0E+18 - Float'Machine (1.0E+18)],
!       19 => [1.0E+19, 1.0E+19 - Float'Machine (1.0E+19)],
!       20 => [1.0E+20, 1.0E+20 - Float'Machine (1.0E+20)]];
  
  end System.Powten_Flt;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-powlfl.ads gcc-12.1.0/gcc/ada/libgnat/s-powlfl.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-powlfl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-powlfl.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020-2022, 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- --
***************
*** 34,355 ****
  package System.Powten_LFlt is
     pragma Pure;
  
-    Maxpow : constant := 308;
-    --  Largest power of ten representable with Long_Float
- 
     Maxpow_Exact : constant := 22;
     --  Largest power of ten exactly representable with Long_Float. It is equal
     --  to floor (M * log 2 / log 5), when M is the size of the mantissa (53).
  
!    Powten : constant array (0 .. Maxpow) of Long_Float :=
!       (00 => 1.0E+00,
!        01 => 1.0E+01,
!        02 => 1.0E+02,
!        03 => 1.0E+03,
!        04 => 1.0E+04,
!        05 => 1.0E+05,
!        06 => 1.0E+06,
!        07 => 1.0E+07,
!        08 => 1.0E+08,
!        09 => 1.0E+09,
!        10 => 1.0E+10,
!        11 => 1.0E+11,
!        12 => 1.0E+12,
!        13 => 1.0E+13,
!        14 => 1.0E+14,
!        15 => 1.0E+15,
!        16 => 1.0E+16,
!        17 => 1.0E+17,
!        18 => 1.0E+18,
!        19 => 1.0E+19,
!        20 => 1.0E+20,
!        21 => 1.0E+21,
!        22 => 1.0E+22,
!        23 => 1.0E+23,
!        24 => 1.0E+24,
!        25 => 1.0E+25,
!        26 => 1.0E+26,
!        27 => 1.0E+27,
!        28 => 1.0E+28,
!        29 => 1.0E+29,
!        30 => 1.0E+30,
!        31 => 1.0E+31,
!        32 => 1.0E+32,
!        33 => 1.0E+33,
!        34 => 1.0E+34,
!        35 => 1.0E+35,
!        36 => 1.0E+36,
!        37 => 1.0E+37,
!        38 => 1.0E+38,
!        39 => 1.0E+39,
!        40 => 1.0E+40,
!        41 => 1.0E+41,
!        42 => 1.0E+42,
!        43 => 1.0E+43,
!        44 => 1.0E+44,
!        45 => 1.0E+45,
!        46 => 1.0E+46,
!        47 => 1.0E+47,
!        48 => 1.0E+48,
!        49 => 1.0E+49,
!        50 => 1.0E+50,
!        51 => 1.0E+51,
!        52 => 1.0E+52,
!        53 => 1.0E+53,
!        54 => 1.0E+54,
!        55 => 1.0E+55,
!        56 => 1.0E+56,
!        57 => 1.0E+57,
!        58 => 1.0E+58,
!        59 => 1.0E+59,
!        60 => 1.0E+60,
!        61 => 1.0E+61,
!        62 => 1.0E+62,
!        63 => 1.0E+63,
!        64 => 1.0E+64,
!        65 => 1.0E+65,
!        66 => 1.0E+66,
!        67 => 1.0E+67,
!        68 => 1.0E+68,
!        69 => 1.0E+69,
!        70 => 1.0E+70,
!        71 => 1.0E+71,
!        72 => 1.0E+72,
!        73 => 1.0E+73,
!        74 => 1.0E+74,
!        75 => 1.0E+75,
!        76 => 1.0E+76,
!        77 => 1.0E+77,
!        78 => 1.0E+78,
!        79 => 1.0E+79,
!        80 => 1.0E+80,
!        81 => 1.0E+81,
!        82 => 1.0E+82,
!        83 => 1.0E+83,
!        84 => 1.0E+84,
!        85 => 1.0E+85,
!        86 => 1.0E+86,
!        87 => 1.0E+87,
!        88 => 1.0E+88,
!        89 => 1.0E+89,
!        90 => 1.0E+90,
!        91 => 1.0E+91,
!        92 => 1.0E+92,
!        93 => 1.0E+93,
!        94 => 1.0E+94,
!        95 => 1.0E+95,
!        96 => 1.0E+96,
!        97 => 1.0E+97,
!        98 => 1.0E+98,
!        99 => 1.0E+99,
!        100 => 1.0E+100,
!        101 => 1.0E+101,
!        102 => 1.0E+102,
!        103 => 1.0E+103,
!        104 => 1.0E+104,
!        105 => 1.0E+105,
!        106 => 1.0E+106,
!        107 => 1.0E+107,
!        108 => 1.0E+108,
!        109 => 1.0E+109,
!        110 => 1.0E+110,
!        111 => 1.0E+111,
!        112 => 1.0E+112,
!        113 => 1.0E+113,
!        114 => 1.0E+114,
!        115 => 1.0E+115,
!        116 => 1.0E+116,
!        117 => 1.0E+117,
!        118 => 1.0E+118,
!        119 => 1.0E+119,
!        120 => 1.0E+120,
!        121 => 1.0E+121,
!        122 => 1.0E+122,
!        123 => 1.0E+123,
!        124 => 1.0E+124,
!        125 => 1.0E+125,
!        126 => 1.0E+126,
!        127 => 1.0E+127,
!        128 => 1.0E+128,
!        129 => 1.0E+129,
!        130 => 1.0E+130,
!        131 => 1.0E+131,
!        132 => 1.0E+132,
!        133 => 1.0E+133,
!        134 => 1.0E+134,
!        135 => 1.0E+135,
!        136 => 1.0E+136,
!        137 => 1.0E+137,
!        138 => 1.0E+138,
!        139 => 1.0E+139,
!        140 => 1.0E+140,
!        141 => 1.0E+141,
!        142 => 1.0E+142,
!        143 => 1.0E+143,
!        144 => 1.0E+144,
!        145 => 1.0E+145,
!        146 => 1.0E+146,
!        147 => 1.0E+147,
!        148 => 1.0E+148,
!        149 => 1.0E+149,
!        150 => 1.0E+150,
!        151 => 1.0E+151,
!        152 => 1.0E+152,
!        153 => 1.0E+153,
!        154 => 1.0E+154,
!        155 => 1.0E+155,
!        156 => 1.0E+156,
!        157 => 1.0E+157,
!        158 => 1.0E+158,
!        159 => 1.0E+159,
!        160 => 1.0E+160,
!        161 => 1.0E+161,
!        162 => 1.0E+162,
!        163 => 1.0E+163,
!        164 => 1.0E+164,
!        165 => 1.0E+165,
!        166 => 1.0E+166,
!        167 => 1.0E+167,
!        168 => 1.0E+168,
!        169 => 1.0E+169,
!        170 => 1.0E+170,
!        171 => 1.0E+171,
!        172 => 1.0E+172,
!        173 => 1.0E+173,
!        174 => 1.0E+174,
!        175 => 1.0E+175,
!        176 => 1.0E+176,
!        177 => 1.0E+177,
!        178 => 1.0E+178,
!        179 => 1.0E+179,
!        180 => 1.0E+180,
!        181 => 1.0E+181,
!        182 => 1.0E+182,
!        183 => 1.0E+183,
!        184 => 1.0E+184,
!        185 => 1.0E+185,
!        186 => 1.0E+186,
!        187 => 1.0E+187,
!        188 => 1.0E+188,
!        189 => 1.0E+189,
!        190 => 1.0E+190,
!        191 => 1.0E+191,
!        192 => 1.0E+192,
!        193 => 1.0E+193,
!        194 => 1.0E+194,
!        195 => 1.0E+195,
!        196 => 1.0E+196,
!        197 => 1.0E+197,
!        198 => 1.0E+198,
!        199 => 1.0E+199,
!        200 => 1.0E+200,
!        201 => 1.0E+201,
!        202 => 1.0E+202,
!        203 => 1.0E+203,
!        204 => 1.0E+204,
!        205 => 1.0E+205,
!        206 => 1.0E+206,
!        207 => 1.0E+207,
!        208 => 1.0E+208,
!        209 => 1.0E+209,
!        210 => 1.0E+210,
!        211 => 1.0E+211,
!        212 => 1.0E+212,
!        213 => 1.0E+213,
!        214 => 1.0E+214,
!        215 => 1.0E+215,
!        216 => 1.0E+216,
!        217 => 1.0E+217,
!        218 => 1.0E+218,
!        219 => 1.0E+219,
!        220 => 1.0E+220,
!        221 => 1.0E+221,
!        222 => 1.0E+222,
!        223 => 1.0E+223,
!        224 => 1.0E+224,
!        225 => 1.0E+225,
!        226 => 1.0E+226,
!        227 => 1.0E+227,
!        228 => 1.0E+228,
!        229 => 1.0E+229,
!        230 => 1.0E+230,
!        231 => 1.0E+231,
!        232 => 1.0E+232,
!        233 => 1.0E+233,
!        234 => 1.0E+234,
!        235 => 1.0E+235,
!        236 => 1.0E+236,
!        237 => 1.0E+237,
!        238 => 1.0E+238,
!        239 => 1.0E+239,
!        240 => 1.0E+240,
!        241 => 1.0E+241,
!        242 => 1.0E+242,
!        243 => 1.0E+243,
!        244 => 1.0E+244,
!        245 => 1.0E+245,
!        246 => 1.0E+246,
!        247 => 1.0E+247,
!        248 => 1.0E+248,
!        249 => 1.0E+249,
!        250 => 1.0E+250,
!        251 => 1.0E+251,
!        252 => 1.0E+252,
!        253 => 1.0E+253,
!        254 => 1.0E+254,
!        255 => 1.0E+255,
!        256 => 1.0E+256,
!        257 => 1.0E+257,
!        258 => 1.0E+258,
!        259 => 1.0E+259,
!        260 => 1.0E+260,
!        261 => 1.0E+261,
!        262 => 1.0E+262,
!        263 => 1.0E+263,
!        264 => 1.0E+264,
!        265 => 1.0E+265,
!        266 => 1.0E+266,
!        267 => 1.0E+267,
!        268 => 1.0E+268,
!        269 => 1.0E+269,
!        270 => 1.0E+270,
!        271 => 1.0E+271,
!        272 => 1.0E+272,
!        273 => 1.0E+273,
!        274 => 1.0E+274,
!        275 => 1.0E+275,
!        276 => 1.0E+276,
!        277 => 1.0E+277,
!        278 => 1.0E+278,
!        279 => 1.0E+279,
!        280 => 1.0E+280,
!        281 => 1.0E+281,
!        282 => 1.0E+282,
!        283 => 1.0E+283,
!        284 => 1.0E+284,
!        285 => 1.0E+285,
!        286 => 1.0E+286,
!        287 => 1.0E+287,
!        288 => 1.0E+288,
!        289 => 1.0E+289,
!        290 => 1.0E+290,
!        291 => 1.0E+291,
!        292 => 1.0E+292,
!        293 => 1.0E+293,
!        294 => 1.0E+294,
!        295 => 1.0E+295,
!        296 => 1.0E+296,
!        297 => 1.0E+297,
!        298 => 1.0E+298,
!        299 => 1.0E+299,
!        300 => 1.0E+300,
!        301 => 1.0E+301,
!        302 => 1.0E+302,
!        303 => 1.0E+303,
!        304 => 1.0E+304,
!        305 => 1.0E+305,
!        306 => 1.0E+306,
!        307 => 1.0E+307,
!        308 => 1.0E+308);
  
  end System.Powten_LFlt;
--- 34,91 ----
  package System.Powten_LFlt is
     pragma Pure;
  
     Maxpow_Exact : constant := 22;
     --  Largest power of ten exactly representable with Long_Float. It is equal
     --  to floor (M * log 2 / log 5), when M is the size of the mantissa (53).
  
!    Maxpow : constant := Maxpow_Exact * 2;
!    --  Largest power of ten exactly representable with a double Long_Float
! 
!    Powten : constant array (0 .. Maxpow, 1 .. 2) of Long_Float :=
!      [00 => [1.0E+00, 0.0],
!       01 => [1.0E+01, 0.0],
!       02 => [1.0E+02, 0.0],
!       03 => [1.0E+03, 0.0],
!       04 => [1.0E+04, 0.0],
!       05 => [1.0E+05, 0.0],
!       06 => [1.0E+06, 0.0],
!       07 => [1.0E+07, 0.0],
!       08 => [1.0E+08, 0.0],
!       09 => [1.0E+09, 0.0],
!       10 => [1.0E+10, 0.0],
!       11 => [1.0E+11, 0.0],
!       12 => [1.0E+12, 0.0],
!       13 => [1.0E+13, 0.0],
!       14 => [1.0E+14, 0.0],
!       15 => [1.0E+15, 0.0],
!       16 => [1.0E+16, 0.0],
!       17 => [1.0E+17, 0.0],
!       18 => [1.0E+18, 0.0],
!       19 => [1.0E+19, 0.0],
!       20 => [1.0E+20, 0.0],
!       21 => [1.0E+21, 0.0],
!       22 => [1.0E+22, 0.0],
!       23 => [1.0E+23, 1.0E+23 - Long_Float'Machine (1.0E+23)],
!       24 => [1.0E+24, 1.0E+24 - Long_Float'Machine (1.0E+24)],
!       25 => [1.0E+25, 1.0E+25 - Long_Float'Machine (1.0E+25)],
!       26 => [1.0E+26, 1.0E+26 - Long_Float'Machine (1.0E+26)],
!       27 => [1.0E+27, 1.0E+27 - Long_Float'Machine (1.0E+27)],
!       28 => [1.0E+28, 1.0E+28 - Long_Float'Machine (1.0E+28)],
!       29 => [1.0E+29, 1.0E+29 - Long_Float'Machine (1.0E+29)],
!       30 => [1.0E+30, 1.0E+30 - Long_Float'Machine (1.0E+30)],
!       31 => [1.0E+31, 1.0E+31 - Long_Float'Machine (1.0E+31)],
!       32 => [1.0E+32, 1.0E+32 - Long_Float'Machine (1.0E+32)],
!       33 => [1.0E+33, 1.0E+33 - Long_Float'Machine (1.0E+33)],
!       34 => [1.0E+34, 1.0E+34 - Long_Float'Machine (1.0E+34)],
!       35 => [1.0E+35, 1.0E+35 - Long_Float'Machine (1.0E+35)],
!       36 => [1.0E+36, 1.0E+36 - Long_Float'Machine (1.0E+36)],
!       37 => [1.0E+37, 1.0E+37 - Long_Float'Machine (1.0E+37)],
!       38 => [1.0E+38, 1.0E+38 - Long_Float'Machine (1.0E+38)],
!       39 => [1.0E+39, 1.0E+39 - Long_Float'Machine (1.0E+39)],
!       40 => [1.0E+40, 1.0E+40 - Long_Float'Machine (1.0E+40)],
!       41 => [1.0E+41, 1.0E+41 - Long_Float'Machine (1.0E+41)],
!       42 => [1.0E+42, 1.0E+42 - Long_Float'Machine (1.0E+42)],
!       43 => [1.0E+43, 1.0E+43 - Long_Float'Machine (1.0E+43)],
!       44 => [1.0E+44, 1.0E+44 - Long_Float'Machine (1.0E+44)]];
  
  end System.Powten_LFlt;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-powllf.ads gcc-12.1.0/gcc/ada/libgnat/s-powllf.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-powllf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-powllf.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 34,70 ****
  package System.Powten_LLF is
     pragma Pure;
  
!    Maxpow : constant := 22;
!    --  The number of entries in this table is chosen to include powers of ten
!    --  that are exactly representable with Long_Long_Float. Assuming that on
!    --  all targets we have 53 bits of mantissa for the type, the upper bound
!    --  is given by 53 * log 2 / log 5. If the scaling factor is greater than
!    --  Maxpow, it can be obtained by several multiplications, which is less
!    --  efficient than with a bigger table, but avoids anomalies at end points.
  
!    Powten : constant array (0 .. Maxpow) of Long_Long_Float :=
!       (00 => 1.0E+00,
!        01 => 1.0E+01,
!        02 => 1.0E+02,
!        03 => 1.0E+03,
!        04 => 1.0E+04,
!        05 => 1.0E+05,
!        06 => 1.0E+06,
!        07 => 1.0E+07,
!        08 => 1.0E+08,
!        09 => 1.0E+09,
!        10 => 1.0E+10,
!        11 => 1.0E+11,
!        12 => 1.0E+12,
!        13 => 1.0E+13,
!        14 => 1.0E+14,
!        15 => 1.0E+15,
!        16 => 1.0E+16,
!        17 => 1.0E+17,
!        18 => 1.0E+18,
!        19 => 1.0E+19,
!        20 => 1.0E+20,
!        21 => 1.0E+21,
!        22 => 1.0E+22);
  
  end System.Powten_LLF;
--- 34,103 ----
  package System.Powten_LLF is
     pragma Pure;
  
!    Maxpow_Exact : constant :=
!      (if Long_Long_Float'Machine_Mantissa = 64 then 27 else 22);
!    --  Largest power of ten exactly representable with Long_Long_Float. It is
!    --  equal to floor (M * log 2 / log 5), when M is the size of the mantissa
!    --  assumed to be either 64 for IEEE Extended or 53 for IEEE Double.
  
!    Maxpow : constant := Maxpow_Exact * 2;
!    --  Largest power of ten exactly representable with a double Long_Long_Float
! 
!    Powten : constant array (0 .. 54, 1 .. 2) of Long_Long_Float :=
!      [00 => [1.0E+00, 0.0],
!       01 => [1.0E+01, 0.0],
!       02 => [1.0E+02, 0.0],
!       03 => [1.0E+03, 0.0],
!       04 => [1.0E+04, 0.0],
!       05 => [1.0E+05, 0.0],
!       06 => [1.0E+06, 0.0],
!       07 => [1.0E+07, 0.0],
!       08 => [1.0E+08, 0.0],
!       09 => [1.0E+09, 0.0],
!       10 => [1.0E+10, 0.0],
!       11 => [1.0E+11, 0.0],
!       12 => [1.0E+12, 0.0],
!       13 => [1.0E+13, 0.0],
!       14 => [1.0E+14, 0.0],
!       15 => [1.0E+15, 0.0],
!       16 => [1.0E+16, 0.0],
!       17 => [1.0E+17, 0.0],
!       18 => [1.0E+18, 0.0],
!       19 => [1.0E+19, 0.0],
!       20 => [1.0E+20, 0.0],
!       21 => [1.0E+21, 0.0],
!       22 => [1.0E+22, 0.0],
!       23 => [1.0E+23, 1.0E+23 - Long_Long_Float'Machine (1.0E+23)],
!       24 => [1.0E+24, 1.0E+24 - Long_Long_Float'Machine (1.0E+24)],
!       25 => [1.0E+25, 1.0E+25 - Long_Long_Float'Machine (1.0E+25)],
!       26 => [1.0E+26, 1.0E+26 - Long_Long_Float'Machine (1.0E+26)],
!       27 => [1.0E+27, 1.0E+27 - Long_Long_Float'Machine (1.0E+27)],
!       28 => [1.0E+28, 1.0E+28 - Long_Long_Float'Machine (1.0E+28)],
!       29 => [1.0E+29, 1.0E+29 - Long_Long_Float'Machine (1.0E+29)],
!       30 => [1.0E+30, 1.0E+30 - Long_Long_Float'Machine (1.0E+30)],
!       31 => [1.0E+31, 1.0E+31 - Long_Long_Float'Machine (1.0E+31)],
!       32 => [1.0E+32, 1.0E+32 - Long_Long_Float'Machine (1.0E+32)],
!       33 => [1.0E+33, 1.0E+33 - Long_Long_Float'Machine (1.0E+33)],
!       34 => [1.0E+34, 1.0E+34 - Long_Long_Float'Machine (1.0E+34)],
!       35 => [1.0E+35, 1.0E+35 - Long_Long_Float'Machine (1.0E+35)],
!       36 => [1.0E+36, 1.0E+36 - Long_Long_Float'Machine (1.0E+36)],
!       37 => [1.0E+37, 1.0E+37 - Long_Long_Float'Machine (1.0E+37)],
!       38 => [1.0E+38, 1.0E+38 - Long_Long_Float'Machine (1.0E+38)],
!       39 => [1.0E+39, 1.0E+39 - Long_Long_Float'Machine (1.0E+39)],
!       40 => [1.0E+40, 1.0E+40 - Long_Long_Float'Machine (1.0E+40)],
!       41 => [1.0E+41, 1.0E+41 - Long_Long_Float'Machine (1.0E+41)],
!       42 => [1.0E+42, 1.0E+42 - Long_Long_Float'Machine (1.0E+42)],
!       43 => [1.0E+43, 1.0E+43 - Long_Long_Float'Machine (1.0E+43)],
!       44 => [1.0E+44, 1.0E+44 - Long_Long_Float'Machine (1.0E+44)],
!       45 => [1.0E+45, 1.0E+45 - Long_Long_Float'Machine (1.0E+45)],
!       46 => [1.0E+46, 1.0E+46 - Long_Long_Float'Machine (1.0E+46)],
!       47 => [1.0E+47, 1.0E+47 - Long_Long_Float'Machine (1.0E+47)],
!       48 => [1.0E+48, 1.0E+48 - Long_Long_Float'Machine (1.0E+48)],
!       49 => [1.0E+49, 1.0E+49 - Long_Long_Float'Machine (1.0E+49)],
!       50 => [1.0E+50, 1.0E+50 - Long_Long_Float'Machine (1.0E+50)],
!       51 => [1.0E+51, 1.0E+51 - Long_Long_Float'Machine (1.0E+51)],
!       52 => [1.0E+52, 1.0E+52 - Long_Long_Float'Machine (1.0E+52)],
!       53 => [1.0E+53, 1.0E+53 - Long_Long_Float'Machine (1.0E+53)],
!       54 => [1.0E+54, 1.0E+54 - Long_Long_Float'Machine (1.0E+54)]];
  
  end System.Powten_LLF;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-purexc.ads gcc-12.1.0/gcc/ada/libgnat/s-purexc.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-purexc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-purexc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
***************
*** 33,40 ****
  --  an exception message. It can be used from Pure units. This unit is for
  --  internal use only, it is not generally available to applications.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Pure_Exceptions is
     pragma Pure;
  
--- 33,38 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-putaim.adb gcc-12.1.0/gcc/ada/libgnat/s-putaim.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-putaim.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-putaim.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,51 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                          SYSTEM.PUT_TASK_IMAGES                          --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Unchecked_Conversion;
- with Ada.Strings.Text_Output.Utils;
- use Ada.Strings.Text_Output;
- use Ada.Strings.Text_Output.Utils;
- 
- package body System.Put_Task_Images is
- 
-    procedure Put_Image_Protected (S : in out Sink'Class) is
-    begin
-       Put_UTF_8 (S, "(protected object)");
-    end Put_Image_Protected;
- 
-    procedure Put_Image_Task
-      (S : in out Sink'Class; Id : Ada.Task_Identification.Task_Id)
-    is
-    begin
-       Put_UTF_8 (S, "(task " & Ada.Task_Identification.Image (Id) & ")");
-    end Put_Image_Task;
- 
- end System.Put_Task_Images;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-putaim.ads gcc-12.1.0/gcc/ada/libgnat/s-putaim.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-putaim.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-putaim.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,48 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --                          SYSTEM.PUT_TASK_IMAGES                          --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --            Copyright (C) 2020, Free Software Foundation, Inc.            --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Ada.Strings.Text_Output;
- with Ada.Task_Identification;
- 
- package System.Put_Task_Images is
- 
-    --  This package contains subprograms that are called by the generated code
-    --  for the 'Put_Image attribute for protected and task types. This is
-    --  separate from System.Put_Images to avoid dragging the tasking runtimes
-    --  into nontasking programs.
- 
-    subtype Sink is Ada.Strings.Text_Output.Sink;
- 
-    procedure Put_Image_Protected (S : in out Sink'Class);
-    procedure Put_Image_Task
-      (S : in out Sink'Class; Id : Ada.Task_Identification.Task_Id);
- 
- end System.Put_Task_Images;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-putima.adb gcc-12.1.0/gcc/ada/libgnat/s-putima.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-putima.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-putima.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
***************
*** 29,38 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  with Unchecked_Conversion;
- with Ada.Strings.Text_Output.Utils;
- use Ada.Strings.Text_Output;
- use Ada.Strings.Text_Output.Utils;
  
  package body System.Put_Images is
  
--- 29,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with Ada.Strings.Text_Buffers.Utils;
+ use Ada.Strings.Text_Buffers;
+ use Ada.Strings.Text_Buffers.Utils;
  with Unchecked_Conversion;
  
  package body System.Put_Images is
  
*************** package body System.Put_Images is
*** 215,221 ****
     begin
        New_Line (S);
        Put_7bit (S, '[');
!       Indent (S, 1);
     end Array_Before;
  
     procedure Array_Between (S : in out Sink'Class) is
--- 215,221 ----
     begin
        New_Line (S);
        Put_7bit (S, '[');
!       Increase_Indent (S, 1);
     end Array_Before;
  
     procedure Array_Between (S : in out Sink'Class) is
*************** package body System.Put_Images is
*** 226,232 ****
  
     procedure Array_After (S : in out Sink'Class) is
     begin
!       Outdent (S, 1);
        Put_7bit (S, ']');
     end Array_After;
  
--- 226,232 ----
  
     procedure Array_After (S : in out Sink'Class) is
     begin
!       Decrease_Indent (S, 1);
        Put_7bit (S, ']');
     end Array_After;
  
*************** package body System.Put_Images is
*** 244,250 ****
     begin
        New_Line (S);
        Put_7bit (S, '(');
!       Indent (S, 1);
     end Record_Before;
  
     procedure Record_Between (S : in out Sink'Class) is
--- 244,250 ----
     begin
        New_Line (S);
        Put_7bit (S, '(');
!       Increase_Indent (S, 1);
     end Record_Before;
  
     procedure Record_Between (S : in out Sink'Class) is
*************** package body System.Put_Images is
*** 255,261 ****
  
     procedure Record_After (S : in out Sink'Class) is
     begin
!       Outdent (S, 1);
        Put_7bit (S, ')');
     end Record_After;
  
--- 255,261 ----
  
     procedure Record_After (S : in out Sink'Class) is
     begin
!       Decrease_Indent (S, 1);
        Put_7bit (S, ')');
     end Record_After;
  
*************** package body System.Put_Images is
*** 267,273 ****
     procedure Put_Image_Unknown (S : in out Sink'Class; Type_Name : String) is
     begin
        Put_UTF_8 (S, "{");
!       Put_String (S, Type_Name);
        Put_UTF_8 (S, " object}");
     end Put_Image_Unknown;
  
--- 267,273 ----
     procedure Put_Image_Unknown (S : in out Sink'Class; Type_Name : String) is
     begin
        Put_UTF_8 (S, "{");
!       Put (S, Type_Name);
        Put_UTF_8 (S, " object}");
     end Put_Image_Unknown;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-putima.ads gcc-12.1.0/gcc/ada/libgnat/s-putima.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-putima.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-putima.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Ada.Strings.Text_Output;
  with System.Unsigned_Types;
  
  package System.Put_Images with Pure is
--- 29,35 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Ada.Strings.Text_Buffers;
  with System.Unsigned_Types;
  
  package System.Put_Images with Pure is
*************** package System.Put_Images with Pure is
*** 50,56 ****
  
     pragma Preelaborate;
  
!    subtype Sink is Ada.Strings.Text_Output.Sink;
  
     procedure Put_Image_Integer (S : in out Sink'Class; X : Integer);
     procedure Put_Image_Long_Long_Integer
--- 50,56 ----
  
     pragma Preelaborate;
  
!    subtype Sink is Ada.Strings.Text_Buffers.Root_Buffer_Type;
  
     procedure Put_Image_Integer (S : in out Sink'Class; X : Integer);
     procedure Put_Image_Long_Long_Integer
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-rannum.adb gcc-12.1.0/gcc/ada/libgnat/s-rannum.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-rannum.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-rannum.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2007-2022, 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- --
***************
*** 86,92 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with Ada.Strings.Text_Output.Utils;
  with Ada.Unchecked_Conversion;
  
  with System.Random_Seed;
--- 86,91 ----
*************** is
*** 110,116 ****
     Upper_Mask : constant := 2**31;
  
     Matrix_A   : constant array (State_Val range 0 .. 1) of State_Val
!      := (0, 16#9908b0df#);
     --  The twist transformation is represented by a matrix of the form
     --
     --               [  0    I(31) ]
--- 109,115 ----
     Upper_Mask : constant := 2**31;
  
     Matrix_A   : constant array (State_Val range 0 .. 1) of State_Val
!      := [0, 16#9908b0df#];
     --  The twist transformation is represented by a matrix of the form
     --
     --               [  0    I(31) ]
*************** is
*** 178,184 ****
     function Random (Gen : Generator) return Unsigned_32 is
        G : Generator renames Gen.Writable.Self.all;
        Y : State_Val;
!       I : Integer;      --  should avoid use of identifier I ???
  
     begin
        I := G.I;
--- 177,186 ----
     function Random (Gen : Generator) return Unsigned_32 is
        G : Generator renames Gen.Writable.Self.all;
        Y : State_Val;
!       I : Integer;
!       --  Naming exception: I is fine to use here as it is the name used in
!       --  the original paper describing the Mersenne Twister and in common
!       --  descriptions of the algorithm.
  
     begin
        I := G.I;
*************** is
*** 273,288 ****
  
              Trailing_Ones : constant array (Unsigned_32 range 0 .. 15)
                of Bit_Count :=
!                   (2#00000# => 0, 2#00001# => 1, 2#00010# => 0, 2#00011# => 2,
                     2#00100# => 0, 2#00101# => 1, 2#00110# => 0, 2#00111# => 3,
                     2#01000# => 0, 2#01001# => 1, 2#01010# => 0, 2#01011# => 2,
!                    2#01100# => 0, 2#01101# => 1, 2#01110# => 0, 2#01111# => 4);
  
              Pow_Tab : constant array (Bit_Count range 0 .. 3) of Real
!               := (0 => 2.0**(0 - T'Machine_Mantissa),
                    1 => 2.0**(-1 - T'Machine_Mantissa),
                    2 => 2.0**(-2 - T'Machine_Mantissa),
!                   3 => 2.0**(-3 - T'Machine_Mantissa));
  
              Extra_Bits : constant Natural :=
                           (Unsigned'Size - T'Machine_Mantissa + 1);
--- 275,290 ----
  
              Trailing_Ones : constant array (Unsigned_32 range 0 .. 15)
                of Bit_Count :=
!                   [2#00000# => 0, 2#00001# => 1, 2#00010# => 0, 2#00011# => 2,
                     2#00100# => 0, 2#00101# => 1, 2#00110# => 0, 2#00111# => 3,
                     2#01000# => 0, 2#01001# => 1, 2#01010# => 0, 2#01011# => 2,
!                    2#01100# => 0, 2#01101# => 1, 2#01110# => 0, 2#01111# => 4];
  
              Pow_Tab : constant array (Bit_Count range 0 .. 3) of Real
!               := [0 => 2.0**(0 - T'Machine_Mantissa),
                    1 => 2.0**(-1 - T'Machine_Mantissa),
                    2 => 2.0**(-2 - T'Machine_Mantissa),
!                   3 => 2.0**(-3 - T'Machine_Mantissa)];
  
              Extra_Bits : constant Natural :=
                           (Unsigned'Size - T'Machine_Mantissa + 1);
*************** is
*** 660,666 ****
        Result : Image_String;
  
     begin
!       Result := (others => ' ');
  
        for J in Of_State'Range loop
           Insert_Image (Result, J, Of_State (J));
--- 662,668 ----
        Result : Image_String;
  
     begin
!       Result := [others => ' '];
  
        for J in Of_State'Range loop
           Insert_Image (Result, J, Of_State (J));
*************** is
*** 673,679 ****
        Result : Image_String;
  
     begin
!       Result := (others => ' ');
        for J in 0 .. N - 1 loop
           Insert_Image (Result, J, Gen.S ((J + Gen.I) mod N));
        end loop;
--- 675,681 ----
        Result : Image_String;
  
     begin
!       Result := [others => ' '];
        for J in 0 .. N - 1 loop
           Insert_Image (Result, J, Gen.S ((J + Gen.I) mod N));
        end loop;
*************** is
*** 686,694 ****
     ---------------
  
     procedure Put_Image
!      (S : in out Strings.Text_Output.Sink'Class; V : State) is
     begin
!       Strings.Text_Output.Utils.Put_String (S, Image (V));
     end Put_Image;
  
     -----------
--- 688,696 ----
     ---------------
  
     procedure Put_Image
!      (S : in out Strings.Text_Buffers.Root_Buffer_Type'Class; V : State) is
     begin
!       Strings.Text_Buffers.Put (S, Image (V));
     end Put_Image;
  
     -----------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-rannum.ads gcc-12.1.0/gcc/ada/libgnat/s-rannum.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-rannum.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-rannum.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2007-2022, 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- --
***************
*** 57,63 ****
  
  with Interfaces;
  
! private with Ada.Strings.Text_Output;
  
  package System.Random_Numbers with
    SPARK_Mode => Off
--- 57,63 ----
  
  with Interfaces;
  
! private with Ada.Strings.Text_Buffers;
  
  package System.Random_Numbers with
    SPARK_Mode => Off
*************** private
*** 148,154 ****
     type State is array (0 .. N - 1) of State_Val with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Output.Sink'Class; V : State);
  
     type Writable_Access (Self : access Generator) is limited null record;
     --  Auxiliary type to make Generator a self-referential type
--- 148,154 ----
     type State is array (0 .. N - 1) of State_Val with Put_Image => Put_Image;
  
     procedure Put_Image
!      (S : in out Ada.Strings.Text_Buffers.Root_Buffer_Type'Class; V : State);
  
     type Writable_Access (Self : access Generator) is limited null record;
     --  Auxiliary type to make Generator a self-referential type
*************** private
*** 157,168 ****
        Writable  : Writable_Access (Generator'Access);
        --  This self reference allows functions to modify Generator arguments
  
!       S : State := (others => 0);
        --  The shift register, a circular buffer
  
        I : Integer := N;
        --  Current starting position in shift register S (N means uninitialized)
!       --  We should avoid using the identifier I here ???
     end record;
  
  end System.Random_Numbers;
--- 157,170 ----
        Writable  : Writable_Access (Generator'Access);
        --  This self reference allows functions to modify Generator arguments
  
!       S : State := [others => 0];
        --  The shift register, a circular buffer
  
        I : Integer := N;
        --  Current starting position in shift register S (N means uninitialized)
!       --  Naming exception: I is fine to use here as it is the name used in the
!       --  original paper describing the Mersenne Twister and in common
!       --  descriptions of the algorithm.
     end record;
  
  end System.Random_Numbers;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-ransee.adb gcc-12.1.0/gcc/ada/libgnat/s-ransee.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-ransee.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-ransee.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-ransee.ads gcc-12.1.0/gcc/ada/libgnat/s-ransee.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-ransee.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-ransee.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-regexp.adb gcc-12.1.0/gcc/ada/libgnat/s-regexp.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-regexp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-regexp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package body System.Regexp is
*** 122,130 ****
     is
        S : String := Pattern;
        --  The pattern which is really compiled (when the pattern is case
!       --  insensitive, we convert this string to lower-cases
  
!       Map : Mapping := (others => 0);
        --  Mapping between characters and columns in the tables
  
        Alphabet_Size : Column_Index := 0;
--- 122,130 ----
     is
        S : String := Pattern;
        --  The pattern which is really compiled (when the pattern is case
!       --  insensitive, we convert this string to lower-cases).
  
!       Map : Mapping := [others => 0];
        --  Mapping between characters and columns in the tables
  
        Alphabet_Size : Column_Index := 0;
*************** package body System.Regexp is
*** 209,216 ****
           --  The last occurrence of an opening parenthesis, if Glob=False,
           --  or the last occurrence of an opening curly brace, if Glob=True.
  
           procedure Raise_Exception_If_No_More_Chars (K : Integer := 0);
!          --  If no more characters are raised, call Raise_Exception
  
           --------------------------------------
           -- Raise_Exception_If_No_More_Chars --
--- 209,267 ----
           --  The last occurrence of an opening parenthesis, if Glob=False,
           --  or the last occurrence of an opening curly brace, if Glob=True.
  
+          procedure Find_Close_Bracket;
+          --  Go through the pattern to find a closing bracket. Raise an
+          --  exception if none is found.
+ 
           procedure Raise_Exception_If_No_More_Chars (K : Integer := 0);
!          --  If J + K > S'Last then call Raise_Exception
! 
!          ------------------------
!          -- Find_Close_Bracket --
!          ------------------------
! 
!          procedure Find_Close_Bracket is
!             Possible_Range_Start : Boolean := True;
!             --  Set True everywhere a range character '-' can occur
! 
!          begin
!             loop
!                exit when S (J) = Close_Bracket;
! 
!                Raise_Exception_If_No_More_Chars (1);
!                --  The current character is not a close_bracket, thus it should
!                --  be followed by at least one more char. If not, no close
!                --  bracket is present and the pattern is ill-formed.
! 
!                if S (J) = '-' and then S (J + 1) /= Close_Bracket then
!                   if not Possible_Range_Start then
!                      Raise_Exception
!                         ("No mix of ranges is allowed in "
!                         & "regular expression", J);
!                   end if;
! 
!                   J := J + 1;
!                   Raise_Exception_If_No_More_Chars (1);
! 
!                   Possible_Range_Start := False;
!                   --  Range cannot be followed by '-' character,
!                   --  except as last character in the set.
! 
!                else
!                   Possible_Range_Start := True;
!                end if;
! 
!                if S (J) = '\' then
!                   J := J + 1;
!                   Raise_Exception_If_No_More_Chars (1);
!                   --  We ignore the next character and need to check we have
!                   --  one more available character. This is necessary for
!                   --  the erroneous [\] pattern which stands for [\]] or [\\].
!                end if;
! 
!                J := J + 1;
!             end loop;
!          end Find_Close_Bracket;
  
           --------------------------------------
           -- Raise_Exception_If_No_More_Chars --
*************** package body System.Regexp is
*** 240,302 ****
                       end if;
                    end if;
  
!                   --  The first character never has a special meaning
! 
                    if S (J) = ']' or else S (J) = '-' then
                       J := J + 1;
                       Raise_Exception_If_No_More_Chars;
                    end if;
  
-                   --  The set of characters cannot be empty
- 
                    if S (J) = ']' then
                       Raise_Exception
                         ("Set of characters cannot be empty in regular "
                            & "expression", J);
                    end if;
  
!                   declare
!                      Possible_Range_Start : Boolean := True;
!                      --  Set True everywhere a range character '-' can occur
! 
!                   begin
!                      loop
!                         exit when S (J) = Close_Bracket;
! 
!                         --  The current character should be followed by a
!                         --  closing bracket.
! 
!                         Raise_Exception_If_No_More_Chars (1);
! 
!                         if S (J) = '-'
!                           and then S (J + 1) /= Close_Bracket
!                         then
!                            if not Possible_Range_Start then
!                               Raise_Exception
!                                 ("No mix of ranges is allowed in "
!                                    & "regular expression", J);
!                            end if;
! 
!                            J := J + 1;
!                            Raise_Exception_If_No_More_Chars;
! 
!                            --  Range cannot be followed by '-' character,
!                            --  except as last character in the set.
! 
!                            Possible_Range_Start := False;
! 
!                         else
!                            Possible_Range_Start := True;
!                         end if;
! 
!                         if S (J) = '\' then
!                            J := J + 1;
!                            Raise_Exception_If_No_More_Chars;
!                         end if;
! 
!                         J := J + 1;
!                      end loop;
!                   end;
  
                    --  A closing bracket can end an elmt or term
  
--- 291,313 ----
                       end if;
                    end if;
  
!                   --  Characters ']' and '-' are meant as literals when first
!                   --  in the list.  As such, they have no special meaning and
!                   --  we pass them.
                    if S (J) = ']' or else S (J) = '-' then
                       J := J + 1;
                       Raise_Exception_If_No_More_Chars;
                    end if;
  
                    if S (J) = ']' then
+                      --  ??? This message is misleading since the check forbids
+                      --  the sets []] and [-] but not the empty set [].
                       Raise_Exception
                         ("Set of characters cannot be empty in regular "
                            & "expression", J);
                    end if;
  
!                   Find_Close_Bracket;
  
                    --  A closing bracket can end an elmt or term
  
*************** package body System.Regexp is
*** 431,436 ****
--- 442,450 ----
                             & "applied to a term in regular expression", J);
                       end if;
  
+                      --  A second term must follow
+                      Raise_Exception_If_No_More_Chars (K => 1);
+ 
                       Past_Elmt := False;
                       Past_Term := False;
                    end if;
*************** package body System.Regexp is
*** 1089,1095 ****
        --  Start of processing for Create_Primary_Table
  
        begin
!          Table.all := (others => (others => 0));
           Create_Simple (S'First, S'Last, Start_State, End_State);
           Num_States := Current_State;
        end Create_Primary_Table;
--- 1103,1109 ----
        --  Start of processing for Create_Primary_Table
  
        begin
!          Table.all := [others => [others => 0]];
           Create_Simple (S'First, S'Last, Start_State, End_State);
           Num_States := Current_State;
        end Create_Primary_Table;
*************** package body System.Regexp is
*** 1358,1364 ****
        --  Start of processing for Create_Primary_Table_Glob
  
        begin
!          Table.all := (others => (others => 0));
           Create_Simple (S'First, S'Last, Start_State, End_State);
           Num_States := Current_State;
        end Create_Primary_Table_Glob;
--- 1372,1378 ----
        --  Start of processing for Create_Primary_Table_Glob
  
        begin
!          Table.all := [others => [others => 0]];
           Create_Simple (S'First, S'Last, Start_State, End_State);
           Num_States := Current_State;
        end Create_Primary_Table_Glob;
*************** package body System.Regexp is
*** 1378,1384 ****
           pragma Pack (Meta_State);
           --  Whether a state from first_table belongs to a metastate.
  
!          No_States : constant Meta_State := (others => False);
  
           type Meta_States_Array is array (State_Index range <>) of Meta_State;
           type Meta_States_List is access all Meta_States_Array;
--- 1392,1398 ----
           pragma Pack (Meta_State);
           --  Whether a state from first_table belongs to a metastate.
  
!          No_States : constant Meta_State := [others => False];
  
           type Meta_States_Array is array (State_Index range <>) of Meta_State;
           type Meta_States_List is access all Meta_States_Array;
*************** package body System.Regexp is
*** 1430,1454 ****
              if Meta_States = null then
                 Meta_States := new Meta_States_Array
                    (1 .. State_Index'Max (Last_Index, Meta) + 1);
!                Meta_States (Meta_States'Range) := (others => No_States);
  
                 Table := new Meta_States_Transition_Arr
                    (1 .. State_Index'Max (Last_Index, Meta) + 1);
!                Table.all := (others => (others => 0));
  
              elsif Meta > Meta_States'Last then
                 Meta_States := new Meta_States_Array
                    (1 .. State_Index'Max (2 * Tmp'Last, Meta));
                 Meta_States (Tmp'Range) := Tmp.all;
                 Meta_States (Tmp'Last + 1 .. Meta_States'Last) :=
!                   (others => No_States);
                 Unchecked_Free (Tmp);
  
                 Table := new Meta_States_Transition_Arr
                    (1 .. State_Index'Max (2 * Tmp2'Last, Meta) + 1);
                 Table (Tmp2'Range) := Tmp2.all;
                 Table (Tmp2'Last + 1 .. Table'Last) :=
!                   (others => (others => 0));
                 Unchecked_Free (Tmp2);
              end if;
           end Ensure_Meta_State;
--- 1444,1468 ----
              if Meta_States = null then
                 Meta_States := new Meta_States_Array
                    (1 .. State_Index'Max (Last_Index, Meta) + 1);
!                Meta_States (Meta_States'Range) := [others => No_States];
  
                 Table := new Meta_States_Transition_Arr
                    (1 .. State_Index'Max (Last_Index, Meta) + 1);
!                Table.all := [others => [others => 0]];
  
              elsif Meta > Meta_States'Last then
                 Meta_States := new Meta_States_Array
                    (1 .. State_Index'Max (2 * Tmp'Last, Meta));
                 Meta_States (Tmp'Range) := Tmp.all;
                 Meta_States (Tmp'Last + 1 .. Meta_States'Last) :=
!                   [others => No_States];
                 Unchecked_Free (Tmp);
  
                 Table := new Meta_States_Transition_Arr
                    (1 .. State_Index'Max (2 * Tmp2'Last, Meta) + 1);
                 Table (Tmp2'Range) := Tmp2.all;
                 Table (Tmp2'Last + 1 .. Table'Last) :=
!                   [others => [others => 0]];
                 Unchecked_Free (Tmp2);
              end if;
           end Ensure_Meta_State;
*************** package body System.Regexp is
*** 1581,1589 ****
                   R => new Regexp_Value'
                        (Alphabet_Size => 0,
                         Num_States    => 1,
!                        Map           => (others => 0),
!                        States        => (others => (others => 1)),
!                        Is_Final      => (others => True),
                         Case_Sensitive => True));
        end if;
  
--- 1595,1603 ----
                   R => new Regexp_Value'
                        (Alphabet_Size => 0,
                         Num_States    => 1,
!                        Map           => [others => 0],
!                        States        => [others => [others => 1]],
!                        Is_Final      => [others => True],
                         Case_Sensitive => True));
        end if;
  
*************** package body System.Regexp is
*** 1712,1718 ****
           New_Columns := Table'Last (2) * (Column / Table'Last (2) + 1);
           New_Table := new Regexp_Array (Table'First (1) .. New_Lines,
                                          Table'First (2) .. New_Columns);
!          New_Table.all := (others => (others => 0));
  
           for J in Table'Range (1) loop
              for K in Table'Range (2) loop
--- 1726,1732 ----
           New_Columns := Table'Last (2) * (Column / Table'Last (2) + 1);
           New_Table := new Regexp_Array (Table'First (1) .. New_Lines,
                                          Table'First (2) .. New_Columns);
!          New_Table.all := [others => [others => 0]];
  
           for J in Table'Range (1) loop
              for K in Table'Range (2) loop
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-regexp.ads gcc-12.1.0/gcc/ada/libgnat/s-regexp.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-regexp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-regexp.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-regpat.adb gcc-12.1.0/gcc/ada/libgnat/s-regpat.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-regpat.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-regpat.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 B o d y                                  --
  --                                                                          --
  --               Copyright (C) 1986 by University of Toronto.               --
! --                      Copyright (C) 1999-2020, AdaCore                    --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                 B o d y                                  --
  --                                                                          --
  --               Copyright (C) 1986 by University of Toronto.               --
! --                      Copyright (C) 1999-2022, AdaCore                    --
  --                                                                          --
  -- 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- --
*************** package body System.Regpat is
*** 199,205 ****
  
     type Bit_Conversion_Array is array (Class_Byte range 0 .. 7) of Class_Byte;
     Bit_Conversion : constant Bit_Conversion_Array :=
!                       (1, 2, 4, 8, 16, 32, 64, 128);
  
     type Std_Class is (ANYOF_NONE,
                        ANYOF_ALNUM,   --  Alphanumeric class [a-zA-Z0-9]
--- 199,205 ----
  
     type Bit_Conversion_Array is array (Class_Byte range 0 .. 7) of Class_Byte;
     Bit_Conversion : constant Bit_Conversion_Array :=
!                       [1, 2, 4, 8, 16, 32, 64, 128];
  
     type Std_Class is (ANYOF_NONE,
                        ANYOF_ALNUM,   --  Alphanumeric class [a-zA-Z0-9]
*************** package body System.Regpat is
*** 664,670 ****
           Operand : Pointer;
           Greedy  : Boolean := True)
        is
!          Old    : Pointer;
        begin
           Old := Insert_Operator_Before (Op, Operand, Greedy, Opsize => 7);
           Emit_Natural (Old + Next_Pointer_Bytes, Min);
--- 664,670 ----
           Operand : Pointer;
           Greedy  : Boolean := True)
        is
!          Old : Pointer;
        begin
           Old := Insert_Operator_Before (Op, Operand, Greedy, Opsize => 7);
           Emit_Natural (Old + Next_Pointer_Bytes, Min);
*************** package body System.Regpat is
*** 1974,1980 ****
        Result : Pointer;
  
        Expr_Flags : Expression_Flags;
-       pragma Unreferenced (Expr_Flags);
  
     --  Start of processing for Compile
  
--- 1974,1979 ----
*************** package body System.Regpat is
*** 2109,2119 ****
  
           if Do_Print then
              declare
!                Point   : constant String := Pointer'Image (Index);
              begin
!                Put ((1 .. 4 - Point'Length => ' ')
                      & Point & ":"
!                     & (1 .. Local_Indent * 2 => ' ') & Opcode'Image (Op));
              end;
  
              --  Print the parenthesis number
--- 2108,2118 ----
  
           if Do_Print then
              declare
!                Point : constant String := Pointer'Image (Index);
              begin
!                Put ([1 .. 4 - Point'Length => ' ']
                      & Point & ":"
!                     & [1 .. Local_Indent * 2 => ' '] & Opcode'Image (Op));
              end;
  
              --  Print the parenthesis number
*************** package body System.Regpat is
*** 2506,2516 ****
  
        begin
           if Prefix then
!             Put ((1 .. 5 - Pos'Length => ' '));
              Put (Pos & " <"
                   & Data (Input_Pos
                       .. Integer'Min (Last_In_Data, Input_Pos + Length - 1)));
!             Put ((1 .. Length - 1 - Last_In_Data + Input_Pos => ' '));
              Put ("> |");
  
           else
--- 2505,2515 ----
  
        begin
           if Prefix then
!             Put ([1 .. 5 - Pos'Length => ' ']);
              Put (Pos & " <"
                   & Data (Input_Pos
                       .. Integer'Min (Last_In_Data, Input_Pos + Length - 1)));
!             Put ([1 .. Length - 1 - Last_In_Data + Input_Pos => ' ']);
              Put ("> |");
  
           else
*************** package body System.Regpat is
*** 2527,2533 ****
        procedure Dump_Error (Msg : String) is
        begin
           Put ("                   |     ");
!          Put ((1 .. Dump_Indent * 2 => ' '));
           Put_Line (Msg);
        end Dump_Error;
  
--- 2526,2532 ----
        procedure Dump_Error (Msg : String) is
        begin
           Put ("                   |     ");
!          Put ([1 .. Dump_Indent * 2 => ' ']);
           Put_Line (Msg);
        end Dump_Error;
  
*************** package body System.Regpat is
*** 3381,3387 ****
        begin
           Input_Pos  := Pos;
           Last_Paren := 0;
!          Matches_Full := (others => No_Match);
  
           if Match (Program_First) then
              Matches_Full (0) := (Pos, Input_Pos - 1);
--- 3380,3386 ----
        begin
           Input_Pos  := Pos;
           Last_Paren := 0;
!          Matches_Full := [others => No_Match];
  
           if Match (Program_First) then
              Matches_Full (0) := (Pos, Input_Pos - 1);
*************** package body System.Regpat is
*** 3397,3403 ****
        --  Do we have the regexp Never_Match?
  
        if Self.Size = 0 then
!          Matches := (others => No_Match);
           return;
        end if;
  
--- 3396,3402 ----
        --  Do we have the regexp Never_Match?
  
        if Self.Size = 0 then
!          Matches := [others => No_Match];
           return;
        end if;
  
*************** package body System.Regpat is
*** 3420,3426 ****
              end loop;
  
              if Next_Try = 0 then
!                Matches := (others => No_Match);
                 return;                  -- Not present
              end if;
           end;
--- 3419,3425 ----
              end loop;
  
              if Next_Try = 0 then
!                Matches := [others => No_Match];
                 return;                  -- Not present
              end if;
           end;
*************** package body System.Regpat is
*** 3463,3480 ****
           end;
  
        elsif Self.First /= ASCII.NUL then
!          --  We know what char it must start with
  
!          declare
!             Next_Try : Natural := Index (First_In_Data, Self.First);
  
!          begin
!             while Next_Try /= 0 loop
!                Matched := Try (Next_Try);
!                exit when Matched;
!                Next_Try := Index (Next_Try + 1, Self.First);
!             end loop;
!          end;
  
        else
           --  Messy cases: try all locations (including for the empty string)
--- 3462,3519 ----
           end;
  
        elsif Self.First /= ASCII.NUL then
!          --  We know what char (modulo casing) it must start with
  
!          if (Self.Flags and Case_Insensitive) = 0
!            or else Self.First not in 'a' .. 'z'
!          then
!             declare
!                Next_Try : Natural := Index (First_In_Data, Self.First);
!             begin
!                while Next_Try /= 0 loop
!                   Matched := Try (Next_Try);
!                   exit when Matched;
!                   Next_Try := Index (Next_Try + 1, Self.First);
!                end loop;
!             end;
!          else
!             declare
!                Uc_First : constant Character := To_Upper (Self.First);
  
!                function Case_Insensitive_Index
!                  (Start : Positive) return Natural;
!                --  Search for both Self.First and To_Upper (Self.First).
!                --  If both are nonzero, return the smaller one; if exactly
!                --  one is nonzero, return it; if both are zero, return zero.
! 
!                ---------------------------
!                -- Case_Insenstive_Index --
!                ---------------------------
! 
!                function Case_Insensitive_Index
!                  (Start : Positive) return Natural
!                is
!                   Lc_Index : constant Natural := Index (Start, Self.First);
!                   Uc_Index : constant Natural := Index (Start, Uc_First);
!                begin
!                   if Lc_Index = 0 then
!                      return Uc_Index;
!                   elsif Uc_Index = 0 then
!                      return Lc_Index;
!                   else
!                      return Natural'Min (Lc_Index, Uc_Index);
!                   end if;
!                end Case_Insensitive_Index;
! 
!                Next_Try : Natural := Case_Insensitive_Index (First_In_Data);
!             begin
!                while Next_Try /= 0 loop
!                   Matched := Try (Next_Try);
!                   exit when Matched;
!                   Next_Try := Case_Insensitive_Index (Next_Try + 1);
!                end loop;
!             end;
!          end if;
  
        else
           --  Messy cases: try all locations (including for the empty string)
*************** package body System.Regpat is
*** 3542,3548 ****
     is
        PM            : Pattern_Matcher (Size);
        Finalize_Size : Program_Size;
-       pragma Unreferenced (Finalize_Size);
     begin
        if Size = 0 then
           Match (Compile (Expression), Data, Matches, Data_First, Data_Last);
--- 3581,3586 ----
*************** package body System.Regpat is
*** 3565,3571 ****
     is
        PM         : Pattern_Matcher (Size);
        Final_Size : Program_Size;
-       pragma Unreferenced (Final_Size);
     begin
        if Size = 0 then
           return Match (Compile (Expression), Data, Data_First, Data_Last);
--- 3603,3608 ----
*************** package body System.Regpat is
*** 3589,3595 ****
        Matches    : Match_Array (0 .. 0);
        PM         : Pattern_Matcher (Size);
        Final_Size : Program_Size;
-       pragma Unreferenced (Final_Size);
     begin
        if Size = 0 then
           Match (Compile (Expression), Data, Matches, Data_First, Data_Last);
--- 3626,3631 ----
*************** package body System.Regpat is
*** 3634,3639 ****
--- 3670,3678 ----
        if Program (Scan) = EXACT then
           Self.First := Program (String_Operand (Scan));
  
+       elsif Program (Scan) = EXACTF then
+          Self.First := To_Lower (Program (String_Operand (Scan)));
+ 
        elsif Program (Scan) = BOL
          or else Program (Scan) = SBOL
          or else Program (Scan) = MBOL
*************** package body System.Regpat is
*** 3697,3703 ****
  
     procedure Reset_Class (Bitmap : out Character_Class) is
     begin
!       Bitmap := (others => 0);
     end Reset_Class;
  
     ------------------
--- 3736,3742 ----
  
     procedure Reset_Class (Bitmap : out Character_Class) is
     begin
!       Bitmap := [others => 0];
     end Reset_Class;
  
     ------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-regpat.ads gcc-12.1.0/gcc/ada/libgnat/s-regpat.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-regpat.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-regpat.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                                                                          --
  --               Copyright (C) 1986 by University of Toronto.               --
! --                     Copyright (C) 1996-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 7,13 ----
  --                                 S p e c                                  --
  --                                                                          --
  --               Copyright (C) 1986 by University of Toronto.               --
! --                     Copyright (C) 1996-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package System.Regpat is
*** 482,499 ****
     --    Data_First is the lower bound for the match, i.e. Data (Data_First)
     --    will be the first character to be examined. If Data_First is set to
     --    the special value of -1 (the default), then the first character to
!    --    be examined is Data (Data_First). However, the regular expression
!    --    character ^ (start of string) still refers to the first character
     --    of the full string (Data (Data'First)), which is why there is a
     --    separate mechanism for specifying Data_First.
  
     --    Data_Last is the upper bound for the match, i.e. Data (Data_Last)
     --    will be the last character to be examined. If Data_Last is set to
     --    the special value of Positive'Last (the default), then the last
!    --    character to be examined is Data (Data_Last). However, the regular
!    --    expression character $ (end of string) still refers to the last
!    --    character of the full string (Data (Data'Last)), which is why there
!    --    is a separate mechanism for specifying Data_Last.
  
     --    Note: the use of Data_First and Data_Last is not equivalent to
     --    simply passing a slice as Expression because of the handling of
--- 482,498 ----
     --    Data_First is the lower bound for the match, i.e. Data (Data_First)
     --    will be the first character to be examined. If Data_First is set to
     --    the special value of -1 (the default), then the first character to
!    --    be examined is Data (Data'First). However, the regular expression
!    --    character ^ (start of string) always refers to the first character
     --    of the full string (Data (Data'First)), which is why there is a
     --    separate mechanism for specifying Data_First.
  
     --    Data_Last is the upper bound for the match, i.e. Data (Data_Last)
     --    will be the last character to be examined. If Data_Last is set to
     --    the special value of Positive'Last (the default), then the last
!    --    character to be examined is Data (Data'Last). However, the regular
!    --    expression character $ (end of string) always refers to the last
!    --    character of the full string (Data (Data'Last)).
  
     --    Note: the use of Data_First and Data_Last is not equivalent to
     --    simply passing a slice as Expression because of the handling of
*************** private
*** 640,649 ****
        Paren_Count      : Natural      := 0;          --  # paren groups
        Flags            : Regexp_Flags := No_Flags;
        Program          : Program_Data (Program_First .. Size) :=
!                            (others => ASCII.NUL);
     end record;
  
     Never_Match : constant Pattern_Matcher :=
!       (0, ASCII.NUL, False, 0, 0, 0, No_Flags, (others => ASCII.NUL));
  
  end System.Regpat;
--- 639,648 ----
        Paren_Count      : Natural      := 0;          --  # paren groups
        Flags            : Regexp_Flags := No_Flags;
        Program          : Program_Data (Program_First .. Size) :=
!                            [others => ASCII.NUL];
     end record;
  
     Never_Match : constant Pattern_Matcher :=
!       (0, ASCII.NUL, False, 0, 0, 0, No_Flags, [others => ASCII.NUL]);
  
  end System.Regpat;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-resfil.adb gcc-12.1.0/gcc/ada/libgnat/s-resfil.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-resfil.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-resfil.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2007-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Unchecked_Deallocation;
  
  with System.OS_Lib; use System.OS_Lib;
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-resfil.ads gcc-12.1.0/gcc/ada/libgnat/s-resfil.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-resfil.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-resfil.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2007-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2007-2022, 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- --
***************
*** 35,41 ****
  --  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.
  
! pragma Compiler_Unit_Warning;
  
  with System.Strings;
  
--- 35,42 ----
  --  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.
  
! --  Note: this unit is used during bootstrap, see ADA_GENERATED_FILES in
! --  gcc-interface/Make-lang.in for details on the constraints.
  
  with System.Strings;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-restri.adb gcc-12.1.0/gcc/ada/libgnat/s-restri.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-restri.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-restri.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package body System.Restrictions is
     use Rident;
  
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-restri.ads gcc-12.1.0/gcc/ada/libgnat/s-restri.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-restri.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-restri.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
***************
*** 38,45 ****
  --  with names discarded, so that we do not have image tables for the
  --  large restriction enumeration types at run time.
  
- pragma Compiler_Unit_Warning;
- 
  with System.Rident;
  
  package System.Restrictions is
--- 38,43 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-rident.ads gcc-12.1.0/gcc/ada/libgnat/s-rident.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-rident.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-rident.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 41,46 ****
--- 41,49 ----
  --  so we can do the instantiation under control of Discard_Names to remove
  --  the tables.
  
+ --  Note: this unit is used during bootstrap, see ADA_GENERATED_FILES in
+ --  gcc-interface/Make-lang.in for details on the constraints.
+ 
  ---------------------------------------------------
  -- Note On Compile/Run-Time Consistency Checking --
  ---------------------------------------------------
***************
*** 69,76 ****
  --  restrictions are ignored, and the consistency checking for restrictions
  --  might be incomplete, which is no big deal.
  
- pragma Compiler_Unit_Warning;
- 
  generic
  package System.Rident is
     pragma Preelaborate;
--- 72,77 ----
*************** package System.Rident is
*** 103,108 ****
--- 104,110 ----
        No_Direct_Boolean_Operators,               -- GNAT
        No_Dispatch,                               -- (RM H.4(19))
        No_Dispatching_Calls,                      -- GNAT
+       No_Dynamic_Accessibility_Checks,           -- GNAT
        No_Dynamic_Attachment,                     -- Ada 2012 (RM E.7(10/3))
        No_Dynamic_CPU_Assignment,                 -- Ada 202x (RM D.7(10/3))
        No_Dynamic_Priorities,                     -- (RM D.9(9))
*************** package System.Rident is
*** 143,148 ****
--- 145,151 ----
        No_Standard_Storage_Pools,                 -- GNAT
        No_Stream_Optimizations,                   -- GNAT
        No_Streams,                                -- GNAT
+       No_Tagged_Type_Registration,               -- GNAT
        No_Task_Allocators,                        -- (RM D.7(7))
        No_Task_Attributes_Package,                -- GNAT
        No_Task_At_Interrupt_Priority,             -- GNAT
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-rpc.adb gcc-12.1.0/gcc/ada/libgnat/s-rpc.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-rpc.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-rpc.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-rpc.ads gcc-12.1.0/gcc/ada/libgnat/s-rpc.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-rpc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-rpc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-scaval.adb gcc-12.1.0/gcc/ada/libgnat/s-scaval.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-scaval.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-scaval.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
*************** package body System.Scalar_Values is
*** 60,85 ****
        EFloat : constant Boolean := Long_Long_Float'Size > Long_Float'Size;
        --  Set True if we are on an x86 with 96-bit floats for extended
  
!       AFloat : constant Boolean :=
!                  Long_Float'Size = 48 and then Long_Long_Float'Size = 48;
!       --  Set True if we are on an AAMP with 48-bit extended floating point
! 
!       type ByteLF is array (0 .. 7 - 2 * Boolean'Pos (AFloat)) of Byte1;
  
        for ByteLF'Component_Size use 8;
  
!       --  Type used to hold Long_Float values on all targets and to initialize
!       --  48-bit Long_Float values used on AAMP. On AAMP, this type is 6 bytes.
!       --  On other targets the type is 8 bytes, and type Byte8 is used for
!       --  values that are then converted to ByteLF.
  
-       pragma Warnings (Off); --  why ???
        function To_ByteLF is new Ada.Unchecked_Conversion (Byte8, ByteLF);
-       pragma Warnings (On);
  
!       type ByteLLF is
!         array (0 .. 7 + 4 * Boolean'Pos (EFloat) - 2 * Boolean'Pos (AFloat))
!           of Byte1;
  
        for ByteLLF'Component_Size use 8;
  
--- 60,76 ----
        EFloat : constant Boolean := Long_Long_Float'Size > Long_Float'Size;
        --  Set True if we are on an x86 with 96-bit floats for extended
  
!       type ByteLF is array (0 .. 7) of Byte1;
  
        for ByteLF'Component_Size use 8;
  
!       --  Type used to hold Long_Float values on all targets. On most targets
!       --  the type is 8 bytes, and type Byte8 is used for values that are then
!       --  converted to ByteLF.
  
        function To_ByteLF is new Ada.Unchecked_Conversion (Byte8, ByteLF);
  
!       type ByteLLF is array (0 .. 7 + 4 * Boolean'Pos (EFloat)) of Byte1;
  
        for ByteLLF'Component_Size use 8;
  
*************** package body System.Scalar_Values is
*** 186,201 ****
           IS_Iz4 := 16#0000_0000#;
           IS_Iz8 := 16#0000_0000_0000_0000#;
  
!          if AFloat then
!             IV_Isf := 16#FFFF_FF00#;
!             IV_Ifl := 16#FFFF_FF00#;
!             IV_Ilf := (0, 16#FF#, 16#FF#, 16#FF#, 16#FF#, 16#FF#);
! 
!          else
!             IV_Isf := IS_Iu4;
!             IV_Ifl := IS_Iu4;
!             IV_Ilf := To_ByteLF (IS_Iu8);
!          end if;
  
           if EFloat then
              IV_Ill := (0, 0, 0, 0, 0, 0, 0, 16#C0#, 16#FF#, 16#FF#, 0, 0);
--- 177,185 ----
           IS_Iz4 := 16#0000_0000#;
           IS_Iz8 := 16#0000_0000_0000_0000#;
  
!          IV_Isf := IS_Iu4;
!          IV_Ifl := IS_Iu4;
!          IV_Ilf := To_ByteLF (IS_Iu8);
  
           if EFloat then
              IV_Ill := (0, 0, 0, 0, 0, 0, 0, 16#C0#, 16#FF#, 16#FF#, 0, 0);
*************** package body System.Scalar_Values is
*** 219,234 ****
           IS_Iz4 := 16#0000_0000#;
           IS_Iz8 := 16#0000_0000_0000_0000#;
  
!          if AFloat then
!             IV_Isf := 16#0000_0001#;
!             IV_Ifl := 16#0000_0001#;
!             IV_Ilf := (1, 0, 0, 0, 0, 0);
! 
!          else
!             IV_Isf := 16#FF80_0000#;
!             IV_Ifl := 16#FF80_0000#;
!             IV_Ilf := To_ByteLF (16#FFF0_0000_0000_0000#);
!          end if;
  
           if EFloat then
              IV_Ill := (0, 0, 0, 0, 0, 0, 0, 16#80#, 16#FF#, 16#FF#, 0, 0);
--- 203,211 ----
           IS_Iz4 := 16#0000_0000#;
           IS_Iz8 := 16#0000_0000_0000_0000#;
  
!          IV_Isf := 16#FF80_0000#;
!          IV_Ifl := 16#FF80_0000#;
!          IV_Ilf := To_ByteLF (16#FFF0_0000_0000_0000#);
  
           if EFloat then
              IV_Ill := (0, 0, 0, 0, 0, 0, 0, 16#80#, 16#FF#, 16#FF#, 0, 0);
*************** package body System.Scalar_Values is
*** 252,267 ****
           IS_Iz4 := 16#FFFF_FFFF#;
           IS_Iz8 := 16#FFFF_FFFF_FFFF_FFFF#;
  
!          if AFloat then
!             IV_Isf := 16#7FFF_FFFF#;
!             IV_Ifl := 16#7FFF_FFFF#;
!             IV_Ilf := (16#FF#, 16#FF#, 16#FF#, 16#FF#, 16#FF#, 16#7F#);
! 
!          else
!             IV_Isf := 16#7F80_0000#;
!             IV_Ifl := 16#7F80_0000#;
!             IV_Ilf := To_ByteLF (16#7FF0_0000_0000_0000#);
!          end if;
  
           if EFloat then
              IV_Ill := (0, 0, 0, 0, 0, 0, 0, 16#80#, 16#FF#, 16#7F#, 0, 0);
--- 229,237 ----
           IS_Iz4 := 16#FFFF_FFFF#;
           IS_Iz8 := 16#FFFF_FFFF_FFFF_FFFF#;
  
!          IV_Isf := 16#7F80_0000#;
!          IV_Ifl := 16#7F80_0000#;
!          IV_Ilf := To_ByteLF (16#7FF0_0000_0000_0000#);
  
           if EFloat then
              IV_Ill := (0, 0, 0, 0, 0, 0, 0, 16#80#, 16#FF#, 16#7F#, 0, 0);
*************** package body System.Scalar_Values is
*** 301,311 ****
           IV_Isf := IS_Is4;
           IV_Ifl := IS_Is4;
  
!          if AFloat then
!             IV_Ill := (B, B, B, B, B, B);
!          else
!             IV_Ilf := To_ByteLF (IS_Is8);
!          end if;
  
           if EFloat then
              IV_Ill := (B, B, B, B, B, B, B, B, B, B, B, B);
--- 271,277 ----
           IV_Isf := IS_Is4;
           IV_Ifl := IS_Is4;
  
!          IV_Ilf := To_ByteLF (IS_Is8);
  
           if EFloat then
              IV_Ill := (B, B, B, B, B, B, B, B, B, B, B, B);
*************** package body System.Scalar_Values is
*** 317,323 ****
  
        if not EFloat then
           declare
!             pragma Warnings (Off);  -- why???
              function To_ByteLLF is
                new Ada.Unchecked_Conversion (ByteLF, ByteLLF);
              pragma Warnings (On);
--- 283,289 ----
  
        if not EFloat then
           declare
!             pragma Warnings (Off); -- because sizes don't match
              function To_ByteLLF is
                new Ada.Unchecked_Conversion (ByteLF, ByteLLF);
              pragma Warnings (On);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-scaval.ads gcc-12.1.0/gcc/ada/libgnat/s-scaval.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-scaval.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-scaval.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-scaval__128.adb gcc-12.1.0/gcc/ada/libgnat/s-scaval__128.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-scaval__128.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-scaval__128.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
*************** package body System.Scalar_Values is
*** 60,85 ****
        EFloat : constant Boolean := Long_Long_Float'Size > Long_Float'Size;
        --  Set True if we are on an x86 with 96-bit floats for extended
  
!       AFloat : constant Boolean :=
!                  Long_Float'Size = 48 and then Long_Long_Float'Size = 48;
!       --  Set True if we are on an AAMP with 48-bit extended floating point
! 
!       type ByteLF is array (0 .. 7 - 2 * Boolean'Pos (AFloat)) of Byte1;
  
        for ByteLF'Component_Size use 8;
- 
-       --  Type used to hold Long_Float values on all targets and to initialize
-       --  48-bit Long_Float values used on AAMP. On AAMP, this type is 6 bytes.
-       --  On other targets the type is 8 bytes, and type Byte8 is used for
-       --  values that are then converted to ByteLF.
- 
-       pragma Warnings (Off); --  why ???
        function To_ByteLF is new Ada.Unchecked_Conversion (Byte8, ByteLF);
-       pragma Warnings (On);
  
!       type ByteLLF is
!         array (0 .. 7 + 4 * Boolean'Pos (EFloat) - 2 * Boolean'Pos (AFloat))
!           of Byte1;
  
        for ByteLLF'Component_Size use 8;
  
--- 60,71 ----
        EFloat : constant Boolean := Long_Long_Float'Size > Long_Float'Size;
        --  Set True if we are on an x86 with 96-bit floats for extended
  
!       type ByteLF is array (0 .. 7) of Byte1;
  
        for ByteLF'Component_Size use 8;
        function To_ByteLF is new Ada.Unchecked_Conversion (Byte8, ByteLF);
  
!       type ByteLLF is array (0 .. 7 + 4 * Boolean'Pos (EFloat)) of Byte1;
  
        for ByteLLF'Component_Size use 8;
  
*************** package body System.Scalar_Values is
*** 189,207 ****
           IS_Iz8  := 16#0000_0000_0000_0000#;
           IS_Iz16 := 16#0000_0000_0000_0000_0000_0000_0000_0000#;
  
!          if AFloat then
!             IV_Isf := 16#FFFF_FF00#;
!             IV_Ifl := 16#FFFF_FF00#;
!             IV_Ilf := (0, 16#FF#, 16#FF#, 16#FF#, 16#FF#, 16#FF#);
! 
!          else
!             IV_Isf := IS_Iu4;
!             IV_Ifl := IS_Iu4;
!             IV_Ilf := To_ByteLF (IS_Iu8);
!          end if;
  
           if EFloat then
!             IV_Ill := (0, 0, 0, 0, 0, 0, 0, 16#C0#, 16#FF#, 16#FF#, 0, 0);
           end if;
  
        --  LO (Low values)
--- 175,186 ----
           IS_Iz8  := 16#0000_0000_0000_0000#;
           IS_Iz16 := 16#0000_0000_0000_0000_0000_0000_0000_0000#;
  
!          IV_Isf := IS_Iu4;
!          IV_Ifl := IS_Iu4;
!          IV_Ilf := To_ByteLF (IS_Iu8);
  
           if EFloat then
!             IV_Ill := [0, 0, 0, 0, 0, 0, 0, 16#C0#, 16#FF#, 16#FF#, 0, 0];
           end if;
  
        --  LO (Low values)
*************** package body System.Scalar_Values is
*** 225,243 ****
           IS_Iz8  := 16#0000_0000_0000_0000#;
           IS_Iz16 := 16#0000_0000_0000_0000_0000_0000_0000_0000#;
  
!          if AFloat then
!             IV_Isf := 16#0000_0001#;
!             IV_Ifl := 16#0000_0001#;
!             IV_Ilf := (1, 0, 0, 0, 0, 0);
! 
!          else
!             IV_Isf := 16#FF80_0000#;
!             IV_Ifl := 16#FF80_0000#;
!             IV_Ilf := To_ByteLF (16#FFF0_0000_0000_0000#);
!          end if;
  
           if EFloat then
!             IV_Ill := (0, 0, 0, 0, 0, 0, 0, 16#80#, 16#FF#, 16#FF#, 0, 0);
           end if;
  
        --  HI (High values)
--- 204,215 ----
           IS_Iz8  := 16#0000_0000_0000_0000#;
           IS_Iz16 := 16#0000_0000_0000_0000_0000_0000_0000_0000#;
  
!          IV_Isf := 16#FF80_0000#;
!          IV_Ifl := 16#FF80_0000#;
!          IV_Ilf := To_ByteLF (16#FFF0_0000_0000_0000#);
  
           if EFloat then
!             IV_Ill := [0, 0, 0, 0, 0, 0, 0, 16#80#, 16#FF#, 16#FF#, 0, 0];
           end if;
  
        --  HI (High values)
*************** package body System.Scalar_Values is
*** 261,279 ****
           IS_Iz8  := 16#FFFF_FFFF_FFFF_FFFF#;
           IS_Iz16 := 16#FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF#;
  
!          if AFloat then
!             IV_Isf := 16#7FFF_FFFF#;
!             IV_Ifl := 16#7FFF_FFFF#;
!             IV_Ilf := (16#FF#, 16#FF#, 16#FF#, 16#FF#, 16#FF#, 16#7F#);
! 
!          else
!             IV_Isf := 16#7F80_0000#;
!             IV_Ifl := 16#7F80_0000#;
!             IV_Ilf := To_ByteLF (16#7FF0_0000_0000_0000#);
!          end if;
  
           if EFloat then
!             IV_Ill := (0, 0, 0, 0, 0, 0, 0, 16#80#, 16#FF#, 16#7F#, 0, 0);
           end if;
  
        --  -Shh (hex byte)
--- 233,244 ----
           IS_Iz8  := 16#FFFF_FFFF_FFFF_FFFF#;
           IS_Iz16 := 16#FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF#;
  
!          IV_Isf := 16#7F80_0000#;
!          IV_Ifl := 16#7F80_0000#;
!          IV_Ilf := To_ByteLF (16#7FF0_0000_0000_0000#);
  
           if EFloat then
!             IV_Ill := [0, 0, 0, 0, 0, 0, 0, 16#80#, 16#FF#, 16#7F#, 0, 0];
           end if;
  
        --  -Shh (hex byte)
*************** package body System.Scalar_Values is
*** 313,326 ****
           IV_Isf := IS_Is4;
           IV_Ifl := IS_Is4;
  
!          if AFloat then
!             IV_Ill := (B, B, B, B, B, B);
!          else
!             IV_Ilf := To_ByteLF (IS_Is8);
!          end if;
  
           if EFloat then
!             IV_Ill := (B, B, B, B, B, B, B, B, B, B, B, B);
           end if;
        end if;
  
--- 278,287 ----
           IV_Isf := IS_Is4;
           IV_Ifl := IS_Is4;
  
!          IV_Ilf := To_ByteLF (IS_Is8);
  
           if EFloat then
!             IV_Ill := [B, B, B, B, B, B, B, B, B, B, B, B];
           end if;
        end if;
  
*************** package body System.Scalar_Values is
*** 329,335 ****
  
        if not EFloat then
           declare
!             pragma Warnings (Off);  -- why???
              function To_ByteLLF is
                new Ada.Unchecked_Conversion (ByteLF, ByteLLF);
              pragma Warnings (On);
--- 290,296 ----
  
        if not EFloat then
           declare
!             pragma Warnings (Off); -- because sizes don't match
              function To_ByteLLF is
                new Ada.Unchecked_Conversion (ByteLF, ByteLLF);
              pragma Warnings (On);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-scaval__128.ads gcc-12.1.0/gcc/ada/libgnat/s-scaval__128.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-scaval__128.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-scaval__128.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-secsta.adb gcc-12.1.0/gcc/ada/libgnat/s-secsta.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-secsta.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-secsta.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,40 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Unchecked_Conversion;
  with Ada.Unchecked_Deallocation;
  
- with System;                  use System;
  with System.Parameters;       use System.Parameters;
  with System.Soft_Links;       use System.Soft_Links;
  with System.Storage_Elements; use System.Storage_Elements;
--- 29,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-secsta.ads gcc-12.1.0/gcc/ada/libgnat/s-secsta.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-secsta.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-secsta.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with System.Parameters;
  with System.Storage_Elements;
  
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-sequio.adb gcc-12.1.0/gcc/ada/libgnat/s-sequio.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-sequio.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-sequio.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-sequio.ads gcc-12.1.0/gcc/ada/libgnat/s-sequio.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-sequio.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-sequio.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --           Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-shabig.ads gcc-12.1.0/gcc/ada/libgnat/s-shabig.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-shabig.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-shabig.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2012-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2012-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-shasto.adb gcc-12.1.0/gcc/ada/libgnat/s-shasto.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-shasto.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-shasto.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
*************** with Ada.Streams.Stream_IO;
*** 36,42 ****
  with System.Global_Locks;
  with System.Soft_Links;
  
- with System;
  with System.CRTL;
  with System.File_Control_Block;
  with System.File_IO;
--- 36,41 ----
*************** package body System.Shared_Storage is
*** 441,447 ****
  
        if SFE = null then
           declare
!             S  : aliased constant String := Dir.all & Var;
  
           begin
              SFE := new Shared_Var_File_Entry;
--- 440,446 ----
  
        if SFE = null then
           declare
!             S : aliased constant String := Dir.all & Var;
  
           begin
              SFE := new Shared_Var_File_Entry;
*************** package body System.Shared_Storage is
*** 522,528 ****
  
        if SFE = null then
           declare
!             S  : aliased constant String := Dir.all & Var;
  
           begin
              SFE := new Shared_Var_File_Entry;
--- 521,527 ----
  
        if SFE = null then
           declare
!             S : aliased constant String := Dir.all & Var;
  
           begin
              SFE := new Shared_Var_File_Entry;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-shasto.ads gcc-12.1.0/gcc/ada/libgnat/s-shasto.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-shasto.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-shasto.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-soflin.adb gcc-12.1.0/gcc/ada/libgnat/s-soflin.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-soflin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-soflin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  pragma Warnings (Off);
  --  Disable warnings as System.Soft_Links.Initialize is not Preelaborate. It is
  --  safe to with this unit as its elaboration routine will only be initializing
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-soflin.ads gcc-12.1.0/gcc/ada/libgnat/s-soflin.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-soflin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-soflin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 37,44 ****
  --  initialized to non-tasking versions, and then if the tasking support is
  --  initialized, they are set to the real tasking versions.
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Exceptions;
  with System.Parameters;
  with System.Secondary_Stack;
--- 37,42 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-soliin.adb gcc-12.1.0/gcc/ada/libgnat/s-soliin.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-soliin.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-soliin.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2017-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2017-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-soliin.ads gcc-12.1.0/gcc/ada/libgnat/s-soliin.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-soliin.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-soliin.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2017-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2017-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-sopco3.adb gcc-12.1.0/gcc/ada/libgnat/s-sopco3.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-sopco3.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-sopco3.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,64 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --           S Y S T E M . S T R I N G _ O P S _ C O N C A T _ 3            --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  NOTE: This package is obsolescent. It is no longer used by the compiler
- --  which now generates concatenation inline. It is retained only because
- --  it may be used during bootstrapping using old versions of the compiler.
- 
- pragma Compiler_Unit_Warning;
- 
- package body System.String_Ops_Concat_3 is
- 
-    ------------------
-    -- Str_Concat_3 --
-    ------------------
- 
-    function Str_Concat_3 (S1, S2, S3 : String) return String is
-    begin
-       if S1'Length = 0 then
-          return S2 & S3;
- 
-       else
-          declare
-             L12 : constant Natural := S1'Length + S2'Length;
-             L13 : constant Natural := L12 + S3'Length;
-             R : String (S1'First .. S1'First + L13 - 1);
- 
-          begin
-             R (S1'First       .. S1'Last)            := S1;
-             R (S1'Last + 1    .. S1'First + L12 - 1) := S2;
-             R (S1'First + L12 .. R'Last)             := S3;
-             return R;
-          end;
-       end if;
-    end Str_Concat_3;
- 
- end System.String_Ops_Concat_3;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-sopco3.ads gcc-12.1.0/gcc/ada/libgnat/s-sopco3.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-sopco3.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-sopco3.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,46 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --           S Y S T E M . S T R I N G _ O P S _ C O N C A T _ 3            --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package contains the function for concatenating three strings
- 
- --  NOTE: This package is obsolescent. It is no longer used by the compiler
- --  which now generates concatenation inline. It is retained only because
- --  it may be used during bootstrapping using old versions of the compiler.
- 
- pragma Compiler_Unit_Warning;
- 
- package System.String_Ops_Concat_3 is
-    pragma Pure;
- 
-    function Str_Concat_3 (S1, S2, S3 : String) return String;
-    --  Concatenate three strings and return resulting string
- 
- end System.String_Ops_Concat_3;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-sopco4.adb gcc-12.1.0/gcc/ada/libgnat/s-sopco4.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-sopco4.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-sopco4.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,66 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --           S Y S T E M . S T R I N G _ O P S _ C O N C A T _ 4            --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  NOTE: This package is obsolescent. It is no longer used by the compiler
- --  which now generates concatenation inline. It is retained only because
- --  it may be used during bootstrapping using old versions of the compiler.
- 
- pragma Compiler_Unit_Warning;
- 
- package body System.String_Ops_Concat_4 is
- 
-    ------------------
-    -- Str_Concat_4 --
-    ------------------
- 
-    function Str_Concat_4 (S1, S2, S3, S4 : String) return String is
-    begin
-       if S1'Length = 0 then
-          return S2 & S3 & S4;
- 
-       else
-          declare
-             L12 : constant Natural := S1'Length + S2'Length;
-             L13 : constant Natural := L12 + S3'Length;
-             L14 : constant Natural := L13 + S4'Length;
-             R : String (S1'First .. S1'First + L14 - 1);
- 
-          begin
-             R (S1'First       .. S1'Last)            := S1;
-             R (S1'Last + 1    .. S1'First + L12 - 1) := S2;
-             R (S1'First + L12 .. S1'First + L13 - 1) := S3;
-             R (S1'First + L13 .. R'Last)             := S4;
-             return R;
-          end;
-       end if;
-    end Str_Concat_4;
- 
- end System.String_Ops_Concat_4;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-sopco4.ads gcc-12.1.0/gcc/ada/libgnat/s-sopco4.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-sopco4.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-sopco4.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,46 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --           S Y S T E M . S T R I N G _ O P S _ C O N C A T _ 4            --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package contains the function for concatenating four strings
- 
- --  NOTE: This package is obsolescent. It is no longer used by the compiler
- --  which now generates concatenation inline. It is retained only because
- --  it may be used during bootstrapping using old versions of the compiler.
- 
- pragma Compiler_Unit_Warning;
- 
- package System.String_Ops_Concat_4 is
-    pragma Pure;
- 
-    function Str_Concat_4 (S1, S2, S3, S4 : String) return String;
-    --  Concatenate four strings and return resulting string
- 
- end System.String_Ops_Concat_4;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-sopco5.adb gcc-12.1.0/gcc/ada/libgnat/s-sopco5.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-sopco5.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-sopco5.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,68 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --           S Y S T E M . S T R I N G _ O P S _ C O N C A T _ 5            --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  NOTE: This package is obsolescent. It is no longer used by the compiler
- --  which now generates concatenation inline. It is retained only because
- --  it may be used during bootstrapping using old versions of the compiler.
- 
- pragma Compiler_Unit_Warning;
- 
- package body System.String_Ops_Concat_5 is
- 
-    ------------------
-    -- Str_Concat_5 --
-    ------------------
- 
-    function Str_Concat_5 (S1, S2, S3, S4, S5 : String) return String is
-    begin
-       if S1'Length = 0 then
-          return S2 & S3 & S4 & S5;
- 
-       else
-          declare
-             L12 : constant Natural := S1'Length + S2'Length;
-             L13 : constant Natural := L12 + S3'Length;
-             L14 : constant Natural := L13 + S4'Length;
-             L15 : constant Natural := L14 + S5'Length;
-             R : String (S1'First .. S1'First + L15 - 1);
- 
-          begin
-             R (S1'First       .. S1'Last)            := S1;
-             R (S1'Last + 1    .. S1'First + L12 - 1) := S2;
-             R (S1'First + L12 .. S1'First + L13 - 1) := S3;
-             R (S1'First + L13 .. S1'First + L14 - 1) := S4;
-             R (S1'First + L14 .. R'Last)             := S5;
-             return R;
-          end;
-       end if;
-    end Str_Concat_5;
- 
- end System.String_Ops_Concat_5;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-sopco5.ads gcc-12.1.0/gcc/ada/libgnat/s-sopco5.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-sopco5.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-sopco5.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,46 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT RUN-TIME COMPONENTS                         --
- --                                                                          --
- --           S Y S T E M . S T R I N G _ O P S _ C O N C A T _ 5            --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package contains the function for concatenating five strings
- 
- --  NOTE: This package is obsolescent. It is no longer used by the compiler
- --  which now generates concatenation inline. It is retained only because
- --  it may be used during bootstrapping using old versions of the compiler.
- 
- pragma Compiler_Unit_Warning;
- 
- package System.String_Ops_Concat_5 is
-    pragma Pure;
- 
-    function Str_Concat_5 (S1, S2, S3, S4, S5 : String) return String;
-    --  Concatenate five strings and return resulting string
- 
- end System.String_Ops_Concat_5;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-spsufi.adb gcc-12.1.0/gcc/ada/libgnat/s-spsufi.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-spsufi.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-spsufi.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-spsufi.ads gcc-12.1.0/gcc/ada/libgnat/s-spsufi.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-spsufi.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-spsufi.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package System.Storage_Pools.Subpools.Finalization is
  
     --  The pragma is needed because package System.Storage_Pools.Subpools which
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stache.adb gcc-12.1.0/gcc/ada/libgnat/s-stache.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-stache.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stache.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --           Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --           Copyright (C) 1999-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  --  As noted in the spec, this dummy body is present because otherwise we
  --  have bootstrapping path problems (there used to be a real body).
  
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stache.ads gcc-12.1.0/gcc/ada/libgnat/s-stache.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-stache.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stache.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --           Copyright (C) 1999-2022, 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- --
***************
*** 35,42 ****
  --  This package defines basic types and objects. Operations related to
  --  stack checking can be found in package System.Stack_Checking.Operations.
  
- pragma Compiler_Unit_Warning;
- 
  with System.Storage_Elements;
  
  package System.Stack_Checking is
--- 35,40 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stalib.adb gcc-12.1.0/gcc/ada/libgnat/s-stalib.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-stalib.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stalib.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  --  The purpose of this body is simply to ensure that the two with'ed units
  --  are properly included in the link. They are not with'ed from the spec
  --  of System.Standard_Library, since this would cause order of elaboration
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stalib.ads gcc-12.1.0/gcc/ada/libgnat/s-stalib.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-stalib.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stalib.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 44,51 ****
  --  package and the packages it references are included in all Ada programs,
  --  together with the included data.
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Unchecked_Conversion;
  
  package System.Standard_Library is
--- 44,49 ----
*************** package System.Standard_Library is
*** 86,129 ****
  
     --  The following record defines the underlying representation of exceptions
  
!    --  WARNING: Any changes to this may need to be reflected in the following
     --  locations in the compiler and runtime code:
  
!    --    1. The Internal_Exception routine in s-exctab.adb
!    --    2. The processing in gigi that tests Not_Handled_By_Others
!    --    3. Expand_N_Exception_Declaration in Exp_Ch11
!    --    4. The construction of the exception type in Cstand
  
     type Exception_Data is record
!       Not_Handled_By_Others : Boolean;
        --  Normally set False, indicating that the exception is handled in the
        --  usual way by others (i.e. an others handler handles the exception).
        --  Set True to indicate that this exception is not caught by others
        --  handlers, but must be explicitly named in a handler. This latter
        --  setting is currently used by the Abort_Signal.
  
!       Lang : Character;
        --  A character indicating the language raising the exception.
        --  Set to "A" for exceptions defined by an Ada program.
        --  Set to "C" for imported C++ exceptions.
  
!       Name_Length : Natural;
        --  Length of fully expanded name of exception
  
!       Full_Name : System.Address;
        --  Fully expanded name of exception, null terminated
        --  You can use To_Ptr to convert this to a string.
  
!       HTable_Ptr : Exception_Data_Ptr;
        --  Hash table pointer used to link entries together in the hash table
        --  built (by Register_Exception in s-exctab.adb) for converting between
        --  identities and names.
  
!       Foreign_Data : Address;
        --  Data for imported exceptions. Not used in the Ada case. This
        --  represents the address of the RTTI for the C++ case.
  
!       Raise_Hook : Raise_Action;
        --  This field can be used to place a "hook" on an exception. If the
        --  value is non-null, then it points to a procedure which is called
        --  whenever the exception is raised. This call occurs immediately,
--- 84,129 ----
  
     --  The following record defines the underlying representation of exceptions
  
!    --  WARNING: Any change to the record needs to be reflected in the following
     --  locations in the compiler and runtime code:
  
!    --    1. The construction of the exception type in Cstand
!    --    2. Expand_N_Exception_Declaration in Exp_Ch11
!    --    3. Expand_Pragma_Import_Or_Interface in Exp_Prag
!    --    4. The processing in gigi that tests Not_Handled_By_Others
!    --    5. The Internal_Exception routine in s-exctab.adb
!    --    6. The declaration of the corresponding C type in raise.h
  
     type Exception_Data is record
!       Not_Handled_By_Others : aliased Boolean;
        --  Normally set False, indicating that the exception is handled in the
        --  usual way by others (i.e. an others handler handles the exception).
        --  Set True to indicate that this exception is not caught by others
        --  handlers, but must be explicitly named in a handler. This latter
        --  setting is currently used by the Abort_Signal.
  
!       Lang : aliased Character;
        --  A character indicating the language raising the exception.
        --  Set to "A" for exceptions defined by an Ada program.
        --  Set to "C" for imported C++ exceptions.
  
!       Name_Length : aliased Natural;
        --  Length of fully expanded name of exception
  
!       Full_Name : aliased System.Address;
        --  Fully expanded name of exception, null terminated
        --  You can use To_Ptr to convert this to a string.
  
!       HTable_Ptr : aliased Exception_Data_Ptr;
        --  Hash table pointer used to link entries together in the hash table
        --  built (by Register_Exception in s-exctab.adb) for converting between
        --  identities and names.
  
!       Foreign_Data : aliased System.Address;
        --  Data for imported exceptions. Not used in the Ada case. This
        --  represents the address of the RTTI for the C++ case.
  
!       Raise_Hook : aliased Raise_Action;
        --  This field can be used to place a "hook" on an exception. If the
        --  value is non-null, then it points to a procedure which is called
        --  whenever the exception is raised. This call occurs immediately,
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-statxd.adb gcc-12.1.0/gcc/ada/libgnat/s-statxd.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-statxd.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-statxd.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1996-2020, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GARLIC 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 1996-2022, Free Software Foundation, Inc.          --
  --                                                                          --
  -- GARLIC 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- --
*************** package body System.Stream_Attributes.XD
*** 72,111 ****
  
     type Precision is (Single, Double, Quadruple);
  
!    Fields : constant array (Precision) of Field_Type := (
  
                 --  Single precision
  
!               (E_Size  => 8,
                 E_Bias  => 127,
                 F_Size  => 23,
                 E_Last  => 2 ** 8 - 1,
                 F_Mask  => 16#7F#,                  --  2 ** 7 - 1,
                 E_Bytes => 2,
                 F_Bytes => 3,
!                F_Bits  => 23 mod US),
  
                 --  Double precision
  
!               (E_Size  => 11,
                 E_Bias  => 1023,
                 F_Size  => 52,
                 E_Last  => 2 ** 11 - 1,
                 F_Mask  => 16#0F#,                  --  2 ** 4 - 1,
                 E_Bytes => 2,
                 F_Bytes => 7,
!                F_Bits  => 52 mod US),
  
                 --  Quadruple precision
  
!               (E_Size  => 15,
                 E_Bias  => 16383,
                 F_Size  => 112,
                 E_Last  => 2 ** 8 - 1,
                 F_Mask  => 16#FF#,                  --  2 ** 8 - 1,
                 E_Bytes => 2,
                 F_Bytes => 14,
!                F_Bits  => 112 mod US));
  
     --  The representation of all items requires a multiple of four bytes
     --  (or 32 bits) of data. The bytes are numbered 0 through n-1. The bytes
--- 72,111 ----
  
     type Precision is (Single, Double, Quadruple);
  
!    Fields : constant array (Precision) of Field_Type := [
  
                 --  Single precision
  
!               [E_Size  => 8,
                 E_Bias  => 127,
                 F_Size  => 23,
                 E_Last  => 2 ** 8 - 1,
                 F_Mask  => 16#7F#,                  --  2 ** 7 - 1,
                 E_Bytes => 2,
                 F_Bytes => 3,
!                F_Bits  => 23 mod US],
  
                 --  Double precision
  
!               [E_Size  => 11,
                 E_Bias  => 1023,
                 F_Size  => 52,
                 E_Last  => 2 ** 11 - 1,
                 F_Mask  => 16#0F#,                  --  2 ** 4 - 1,
                 E_Bytes => 2,
                 F_Bytes => 7,
!                F_Bits  => 52 mod US],
  
                 --  Quadruple precision
  
!               [E_Size  => 15,
                 E_Bias  => 16383,
                 F_Size  => 112,
                 E_Last  => 2 ** 8 - 1,
                 F_Mask  => 16#FF#,                  --  2 ** 8 - 1,
                 E_Bytes => 2,
                 F_Bytes => 14,
!                F_Bits  => 112 mod US]];
  
     --  The representation of all items requires a multiple of four bytes
     --  (or 32 bits) of data. The bytes are numbered 0 through n-1. The bytes
*************** package body System.Stream_Attributes.XD
*** 1244,1250 ****
        Is_Positive : Boolean;
        E           : Integer;
        F           : Float;
!       S           : SEA (1 .. F_L) := (others => 0);
  
     begin
        if not Item'Valid then
--- 1244,1250 ----
        Is_Positive : Boolean;
        E           : Integer;
        F           : Float;
!       S           : SEA (1 .. F_L) := [others => 0];
  
     begin
        if not Item'Valid then
*************** package body System.Stream_Attributes.XD
*** 1390,1396 ****
        Is_Positive : Boolean;
        E           : Integer;
        F           : Long_Float;
!       S           : SEA (1 .. LF_L) := (others => 0);
  
     begin
        if not Item'Valid then
--- 1390,1396 ----
        Is_Positive : Boolean;
        E           : Integer;
        F           : Long_Float;
!       S           : SEA (1 .. LF_L) := [others => 0];
  
     begin
        if not Item'Valid then
*************** package body System.Stream_Attributes.XD
*** 1519,1525 ****
        Is_Positive : Boolean;
        E           : Integer;
        F           : Long_Long_Float := Item;
!       S           : SEA (1 .. LLF_L) := (others => 0);
  
     begin
        if not Item'Valid then
--- 1519,1525 ----
        Is_Positive : Boolean;
        E           : Integer;
        F           : Long_Long_Float := Item;
!       S           : SEA (1 .. LLF_L) := [others => 0];
  
     begin
        if not Item'Valid then
*************** package body System.Stream_Attributes.XD
*** 1737,1743 ****
        Is_Positive : Boolean;
        E           : Integer;
        F           : Short_Float;
!       S           : SEA (1 .. SF_L) := (others => 0);
  
     begin
        if not Item'Valid then
--- 1737,1743 ----
        Is_Positive : Boolean;
        E           : Integer;
        F           : Short_Float;
!       S           : SEA (1 .. SF_L) := [others => 0];
  
     begin
        if not Item'Valid then
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-statxd.ads gcc-12.1.0/gcc/ada/libgnat/s-statxd.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-statxd.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-statxd.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stausa.adb gcc-12.1.0/gcc/ada/libgnat/s-stausa.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-stausa.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stausa.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --         Copyright (C) 2004-2022, 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- --
*************** package body System.Stack_Usage is
*** 127,136 ****
  
        Result_Array := new Result_Array_Type (1 .. Buffer_Size);
        Result_Array.all :=
!         (others =>
!            (Task_Name   => (others => ASCII.NUL),
              Value       => 0,
!             Stack_Size  => 0));
  
        --  Set the Is_Enabled flag to true, so that the task wrapper knows that
        --  it has to handle dynamic stack analysis
--- 127,136 ----
  
        Result_Array := new Result_Array_Type (1 .. Buffer_Size);
        Result_Array.all :=
!         [others =>
!            [Task_Name   => [others => ASCII.NUL],
              Value       => 0,
!             Stack_Size  => 0]];
  
        --  Set the Is_Enabled flag to true, so that the task wrapper knows that
        --  it has to handle dynamic stack analysis
*************** package body System.Stack_Usage is
*** 282,288 ****
        Analyzer.Pattern_Size  := Pattern_Size;
        Analyzer.Pattern       := Pattern;
        Analyzer.Result_Id     := Next_Id;
!       Analyzer.Task_Name     := (others => ' ');
  
        --  Compute the task name, and truncate if bigger than Task_Name_Length
  
--- 282,288 ----
        Analyzer.Pattern_Size  := Pattern_Size;
        Analyzer.Pattern       := Pattern;
        Analyzer.Result_Id     := Next_Id;
!       Analyzer.Task_Name     := [others => ' '];
  
        --  Compute the task name, and truncate if bigger than Task_Name_Length
  
*************** package body System.Stack_Usage is
*** 455,466 ****
              Stack_Size_Blanks  : constant
                                     String (1 .. Max_Stack_Size_Len -
                                                    Stack_Size_Str'Length) :=
!                                       (others => ' ');
  
              Stack_Usage_Blanks : constant
                                     String (1 .. Max_Actual_Use_Len -
                                                    Actual_Size_Str'Length) :=
!                                       (others => ' ');
  
           begin
              if Stack_Size_Str'Length > Max_Stack_Size_Len then
--- 455,466 ----
              Stack_Size_Blanks  : constant
                                     String (1 .. Max_Stack_Size_Len -
                                                    Stack_Size_Str'Length) :=
!                                       [others => ' '];
  
              Stack_Usage_Blanks : constant
                                     String (1 .. Max_Actual_Use_Len -
                                                    Actual_Size_Str'Length) :=
!                                       [others => ' '];
  
           begin
              if Stack_Size_Str'Length > Max_Stack_Size_Len then
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stausa.ads gcc-12.1.0/gcc/ada/libgnat/s-stausa.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-stausa.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stausa.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2004-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with System;
  with System.Storage_Elements;
  with System.Address_To_Access_Conversions;
  with Interfaces;
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stchop.adb gcc-12.1.0/gcc/ada/libgnat/s-stchop.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-stchop.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stchop.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stchop.ads gcc-12.1.0/gcc/ada/libgnat/s-stchop.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-stchop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stchop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stchop__limit.ads gcc-12.1.0/gcc/ada/libgnat/s-stchop__limit.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-stchop__limit.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stchop__limit.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  S p e c                                 --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stchop__rtems.adb gcc-12.1.0/gcc/ada/libgnat/s-stchop__rtems.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-stchop__rtems.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stchop__rtems.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,113 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
- --                                                                          --
- --     S Y S T E M . S T A C K _ C H E C K I N G . O P E R A T I O N S      --
- --                                                                          --
- --                                  B o d y                                 --
- --                                                                          --
- --          Copyright (C) 1999-2020, 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 RTEMS version of this package.
- --  This file should be kept synchronized with the general implementation
- --  provided by s-stchop.adb.
- 
- pragma Restrictions (No_Elaboration_Code);
- --  We want to guarantee the absence of elaboration code because the
- --  binder does not handle references to this package.
- 
- with Ada.Exceptions;
- 
- with Interfaces.C; use Interfaces.C;
- 
- package body System.Stack_Checking.Operations is
- 
-    ----------------------------
-    -- Invalidate_Stack_Cache --
-    ----------------------------
- 
-    procedure Invalidate_Stack_Cache (Any_Stack : Stack_Access) is
-       pragma Warnings (Off, Any_Stack);
-    begin
-       Cache := Null_Stack;
-    end Invalidate_Stack_Cache;
- 
-    -----------------------------
-    -- Notify_Stack_Attributes --
-    -----------------------------
- 
-    procedure Notify_Stack_Attributes
-      (Initial_SP : System.Address;
-       Size       : System.Storage_Elements.Storage_Offset)
-    is
- 
-       --  RTEMS keeps all the information we need.
- 
-       pragma Unreferenced (Size);
-       pragma Unreferenced (Initial_SP);
- 
-    begin
-       null;
-    end Notify_Stack_Attributes;
- 
-    -----------------
-    -- Stack_Check --
-    -----------------
- 
-    function Stack_Check
-      (Stack_Address : System.Address) return Stack_Access
-    is
-       pragma Unreferenced (Stack_Address);
- 
-       --  RTEMS has a routine to check if the stack is blown.
-       --  It returns a C99 bool.
-       function rtems_stack_checker_is_blown return Interfaces.C.unsigned_char;
-       pragma Import (C,
-          rtems_stack_checker_is_blown, "rtems_stack_checker_is_blown");
- 
-    begin
-       --  RTEMS has a routine to check this.  So use it.
- 
-       if rtems_stack_checker_is_blown /= 0 then
-          Ada.Exceptions.Raise_Exception
-            (E       => Storage_Error'Identity,
-             Message => "stack overflow detected");
-       end if;
- 
-       return null;
- 
-    end Stack_Check;
- 
-    ------------------------
-    -- Update_Stack_Cache --
-    ------------------------
- 
-    procedure Update_Stack_Cache (Stack : Stack_Access) is
-    begin
-       if not Multi_Processor then
-          Cache := Stack;
-       end if;
-    end Update_Stack_Cache;
- 
- end System.Stack_Checking.Operations;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stchop__vxworks.adb gcc-12.1.0/gcc/ada/libgnat/s-stchop__vxworks.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-stchop__vxworks.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stchop__vxworks.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                  B o d y                                 --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stoele.adb gcc-12.1.0/gcc/ada/libgnat/s-stoele.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-stoele.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stoele.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Unchecked_Conversion;
  
  package body System.Storage_Elements is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stoele.ads gcc-12.1.0/gcc/ada/libgnat/s-stoele.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-stoele.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stoele.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
***************
*** 37,44 ****
  --  extra declarations that can be introduced into System using Extend_System.
  --  It is a good idea to avoid use clauses for this package.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Storage_Elements is
     pragma Pure;
     --  Note that we take advantage of the implementation permission to make
--- 37,42 ----
*************** package System.Storage_Elements is
*** 56,63 ****
       +(2 ** (Integer'(Standard'Address_Size) - 1)) - Long_Long_Integer'(1);
     --  Note: the reason for the Long_Long_Integer qualification here is to
     --  avoid a bogus ambiguity when this unit is analyzed in an rtsfind
!    --  context. It may be possible to remove this in the future, but it is
!    --  certainly harmless in any case ???
  
     subtype Storage_Count is Storage_Offset range 0 .. Storage_Offset'Last;
  
--- 54,60 ----
       +(2 ** (Integer'(Standard'Address_Size) - 1)) - Long_Long_Integer'(1);
     --  Note: the reason for the Long_Long_Integer qualification here is to
     --  avoid a bogus ambiguity when this unit is analyzed in an rtsfind
!    --  context.
  
     subtype Storage_Count is Storage_Offset range 0 .. Storage_Offset'Last;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stopoo.adb gcc-12.1.0/gcc/ada/libgnat/s-stopoo.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-stopoo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stopoo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stopoo.ads gcc-12.1.0/gcc/ada/libgnat/s-stopoo.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-stopoo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stopoo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stposu.adb gcc-12.1.0/gcc/ada/libgnat/s-stposu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-stposu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stposu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stposu.ads gcc-12.1.0/gcc/ada/libgnat/s-stposu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-stposu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stposu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stratt.adb gcc-12.1.0/gcc/ada/libgnat/s-stratt.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-stratt.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stratt.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** with System.Stream_Attributes.XDR;
*** 36,48 ****
  
  package body System.Stream_Attributes is
  
!    XDR_Flag : Integer;
!    pragma Import (C, XDR_Flag, "__gl_xdr_stream");
     --  This imported value is used to determine whether the build had the
     --  binder switch "-xdr" present which enables XDR streaming and sets this
     --  flag to 1.
  
!    function XDR_Support return Boolean;
     pragma Inline (XDR_Support);
     --  Return True if XDR streaming should be used. Note that 128-bit integers
     --  are not supported by the XDR protocol and will raise Device_Error.
--- 36,48 ----
  
  package body System.Stream_Attributes is
  
!    XDR_Stream : constant Integer;
!    pragma Import (C, XDR_Stream, "__gl_xdr_stream");
     --  This imported value is used to determine whether the build had the
     --  binder switch "-xdr" present which enables XDR streaming and sets this
     --  flag to 1.
  
!    function XDR_Support return Boolean is (XDR_Stream = 1);
     pragma Inline (XDR_Support);
     --  Return True if XDR streaming should be used. Note that 128-bit integers
     --  are not supported by the XDR protocol and will raise Device_Error.
*************** package body System.Stream_Attributes is
*** 142,156 ****
     function To_WWC  is new UC (S_WWC,  Wide_Wide_Character);
  
     -----------------
-    -- XDR_Support --
-    -----------------
- 
-    function XDR_Support return Boolean is
-    begin
-       return XDR_Flag = 1;
-    end XDR_Support;
- 
-    -----------------
     -- Block_IO_OK --
     -----------------
  
--- 142,147 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-stratt.ads gcc-12.1.0/gcc/ada/libgnat/s-stratt.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-stratt.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-stratt.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 37,43 ****
  --  defined types, the subprogram for the corresponding root type is called
  --  with an appropriate conversion.
  
- with System;
  with System.Unsigned_Types;
  with Ada.Streams;
  
--- 37,42 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-strcom.adb gcc-12.1.0/gcc/ada/libgnat/s-strcom.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-strcom.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-strcom.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Unchecked_Conversion;
  
  package body System.String_Compare is
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-strcom.ads gcc-12.1.0/gcc/ada/libgnat/s-strcom.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-strcom.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-strcom.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
***************
*** 31,38 ****
  
  --  This package contains functions for runtime comparisons on strings
  
- pragma Compiler_Unit_Warning;
- 
  package System.String_Compare is
  
     function Str_Compare
--- 31,36 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-strhas.adb gcc-12.1.0/gcc/ada/libgnat/s-strhas.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-strhas.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-strhas.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package body System.String_Hash is
  
     --  Compute a hash value for a key. The approach here follows the algorithm
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-strhas.ads gcc-12.1.0/gcc/ada/libgnat/s-strhas.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-strhas.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-strhas.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-string.adb gcc-12.1.0/gcc/ada/libgnat/s-string.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-string.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-string.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package body System.Strings is
  
     ----------
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-string.ads gcc-12.1.0/gcc/ada/libgnat/s-string.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-string.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-string.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1995-2022, 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- --
***************
*** 35,42 ****
  --  be used by other predefined packages. User access to this package is via
  --  a renaming of this package in GNAT.String (file g-string.ads).
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Unchecked_Deallocation;
  
  package System.Strings is
--- 35,40 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-strops.adb gcc-12.1.0/gcc/ada/libgnat/s-strops.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-strops.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-strops.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,109 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
- --                                                                          --
- --                    S Y S T E M . S T R I N G _ O P S                     --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  NOTE: This package is obsolescent. It is no longer used by the compiler
- --  which now generates concatenation inline. It is retained only because
- --  it may be used during bootstrapping using old versions of the compiler.
- 
- pragma Compiler_Unit_Warning;
- 
- package body System.String_Ops is
- 
-    ----------------
-    -- Str_Concat --
-    ----------------
- 
-    function Str_Concat (X, Y : String) return String is
-    begin
-       if X'Length = 0 then
-          return Y;
- 
-       else
-          declare
-             L : constant Natural := X'Length + Y'Length;
-             R : String (X'First .. X'First + L - 1);
- 
-          begin
-             R (X'Range) := X;
-             R (X'First + X'Length .. R'Last) := Y;
-             return R;
-          end;
-       end if;
-    end Str_Concat;
- 
-    -------------------
-    -- Str_Concat_CC --
-    -------------------
- 
-    function Str_Concat_CC (X, Y : Character) return String is
-       R : String (1 .. 2);
- 
-    begin
-       R (1) := X;
-       R (2) := Y;
-       return R;
-    end Str_Concat_CC;
- 
-    -------------------
-    -- Str_Concat_CS --
-    -------------------
- 
-    function Str_Concat_CS (X : Character; Y : String) return String is
-       R : String (1 .. Y'Length + 1);
- 
-    begin
-       R (1) := X;
-       R (2 .. R'Last) := Y;
-       return R;
-    end Str_Concat_CS;
- 
-    -------------------
-    -- Str_Concat_SC --
-    -------------------
- 
-    function Str_Concat_SC (X : String; Y : Character) return String is
-    begin
-       if X'Length = 0 then
-          return (1 => Y);
- 
-       else
-          declare
-             R : String (X'First .. X'Last + 1);
- 
-          begin
-             R (X'Range) := X;
-             R (R'Last) := Y;
-             return R;
-          end;
-       end if;
-    end Str_Concat_SC;
- 
- end System.String_Ops;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-strops.ads gcc-12.1.0/gcc/ada/libgnat/s-strops.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-strops.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-strops.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,56 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
- --                                                                          --
- --                    S Y S T E M . S T R I N G _ O P S                     --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package contains functions for runtime operations on strings
- --  (other than runtime comparison, found in s-strcom.ads).
- 
- --  NOTE: This package is obsolescent. It is no longer used by the compiler
- --  which now generates concatenation inline. It is retained only because
- --  it may be used during bootstrapping using old versions of the compiler.
- 
- pragma Compiler_Unit_Warning;
- 
- package System.String_Ops is
-    pragma Pure;
- 
-    function Str_Concat (X, Y : String) return String;
-    --  Concatenate two strings and return resulting string
- 
-    function Str_Concat_SC (X : String; Y : Character) return String;
-    --  Concatenate string and character
- 
-    function Str_Concat_CS (X : Character; Y : String) return String;
-    --  Concatenate character and string
- 
-    function Str_Concat_CC (X, Y : Character) return String;
-    --  Concatenate two characters
- 
- end System.String_Ops;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-ststop.adb gcc-12.1.0/gcc/ada/libgnat/s-ststop.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-ststop.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-ststop.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2008-2022, 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- --
***************
*** 29,41 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.IO_Exceptions;        use Ada.IO_Exceptions;
  with Ada.Streams;              use Ada.Streams;
  with Ada.Unchecked_Conversion;
  
- with System;                   use System;
  with System.Storage_Elements;  use System.Storage_Elements;
  with System.Stream_Attributes;
  
--- 29,38 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-ststop.ads gcc-12.1.0/gcc/ada/libgnat/s-ststop.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-ststop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-ststop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
***************
*** 63,70 ****
  --  handles the XDR implementation of System.Stream_Attributes in particular
  --  which does not permit block io optimization.
  
- pragma Compiler_Unit_Warning;
- 
  with Ada.Streams;
  
  with System.Storage_Elements;
--- 63,68 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-tasloc.adb gcc-12.1.0/gcc/ada/libgnat/s-tasloc.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-tasloc.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-tasloc.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1997-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-tasloc.ads gcc-12.1.0/gcc/ada/libgnat/s-tasloc.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-tasloc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-tasloc.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1998-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-thread.ads gcc-12.1.0/gcc/ada/libgnat/s-thread.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-thread.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-thread.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,92 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                       S Y S T E M . T H R E A D S                        --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package provides facilities to register a thread to the runtime,
- --  and allocate its task specific datas.
- 
- --  This package is currently implemented for:
- 
- --    VxWorks AE653 rts-cert
- --    VxWorks AE653 rts-full (not rts-kernel)
- 
- with Ada.Exceptions;
- with Ada.Unchecked_Conversion;
- 
- with Interfaces.C;
- 
- with System.Secondary_Stack;
- with System.Soft_Links;
- 
- package System.Threads is
- 
-    package SST renames System.Secondary_Stack;
- 
-    type ATSD is limited private;
-    --  Type of the Ada thread specific data. It contains datas needed
-    --  by the GNAT runtime.
- 
-    type ATSD_Access is access ATSD;
-    function From_Address is
-      new Ada.Unchecked_Conversion (Address, ATSD_Access);
- 
-    subtype STATUS is Interfaces.C.int;
-    --  Equivalent of the C type STATUS
- 
-    type t_id is new Interfaces.C.long;
-    subtype Thread_Id is t_id;
- 
-    function Register (T : Thread_Id) return STATUS;
-    --  Create the task specific data necessary for Ada language support
- 
-    --------------------------
-    -- Thread Body Handling --
-    --------------------------
- 
-    --  The subprograms in this section are called from the process body
-    --  wrapper in the APEX process registration package.
- 
-    procedure Thread_Body_Enter
-      (Sec_Stack_Ptr        : SST.SS_Stack_Ptr;
-       Process_ATSD_Address : System.Address);
-    --  Enter thread body, see above for details
- 
-    procedure Thread_Body_Leave;
-    --  Leave thread body (normally), see above for details
- 
-    procedure Thread_Body_Exceptional_Exit
-      (EO : Ada.Exceptions.Exception_Occurrence);
-    --  Leave thread body (abnormally on exception), see above for details
- 
- private
- 
-    type ATSD is new System.Soft_Links.TSD;
- 
- end System.Threads;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-thread__ae653.adb gcc-12.1.0/gcc/ada/libgnat/s-thread__ae653.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-thread__ae653.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-thread__ae653.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,227 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                       S Y S T E M . T H R E A D S                        --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is the VxWorks 653 version of this package
- 
- pragma Restrictions (No_Tasking);
- --  The VxWorks 653 version of this package is intended only for programs
- --  which do not use Ada tasking. This restriction ensures that this
- --  will be checked by the binder.
- 
- with System.Storage_Elements; use System.Storage_Elements;
- with System.OS_Versions; use System.OS_Versions;
- 
- package body System.Threads is
- 
-    use Interfaces.C;
- 
-    package SSL renames System.Soft_Links;
- 
-    Main_ATSD : aliased ATSD;
-    --  TSD for environment task
- 
-    Current_ATSD : aliased System.Address := System.Null_Address;
-    pragma Thread_Local_Storage (Current_ATSD);
-    --  pragma TLS needed since TaskVarAdd no longer available
- 
-    --  Assume guard pages for Helix APEX partitions, but leave
-    --  checking mechanism in for now, in case of surprises. ???
-    Stack_Limit : Address;
-    pragma Import (C, Stack_Limit, "__gnat_stack_limit");
- 
-    type Set_Stack_Limit_Proc_Acc is access procedure;
-    pragma Convention (C, Set_Stack_Limit_Proc_Acc);
- 
-    Set_Stack_Limit_Hook : Set_Stack_Limit_Proc_Acc;
-    pragma Import (C, Set_Stack_Limit_Hook, "__gnat_set_stack_limit_hook");
-    --  Procedure to be called when a task is created to set stack limit if
-    --  limit checking is used.
- 
-    --  VxWorks specific API
- 
-    ERROR : constant STATUS := Interfaces.C.int (-1);
-    OK    : constant STATUS := Interfaces.C.int (0);
- 
-    function taskIdVerify (tid : t_id) return STATUS;
-    pragma Import (C, taskIdVerify, "taskIdVerify");
- 
-    function taskIdSelf return t_id;
-    pragma Import (C, taskIdSelf, "taskIdSelf");
- 
-    -----------------------
-    -- Local Subprograms --
-    -----------------------
- 
-    procedure Init_RTS;
-    --  This procedure performs the initialization of the run-time lib.
-    --  It installs System.Threads versions of certain operations of the
-    --  run-time lib.
- 
-    procedure Install_Handler;
-    pragma Import (C, Install_Handler, "__gnat_install_handler");
- 
-    function  Get_Sec_Stack return SST.SS_Stack_Ptr;
- 
-    procedure Set_Sec_Stack (Stack : SST.SS_Stack_Ptr);
- 
-    -----------------------
-    -- Thread_Body_Enter --
-    -----------------------
- 
-    procedure Thread_Body_Enter
-      (Sec_Stack_Ptr        : SST.SS_Stack_Ptr;
-       Process_ATSD_Address : System.Address)
-    is
- 
-       ATSD : constant ATSD_Access := From_Address (Process_ATSD_Address);
- 
-    begin
- 
-       ATSD.Sec_Stack_Ptr := Sec_Stack_Ptr;
-       SST.SS_Init (ATSD.Sec_Stack_Ptr);
-       Current_ATSD := Process_ATSD_Address;
-       Install_Handler;
- 
-       --  Assume guard pages for Helix/Vx7, but leave in for now ???
-       --  Initialize stack limit if needed.
- 
-       if Current_ATSD /= Main_ATSD'Address
-         and then Set_Stack_Limit_Hook /= null
-       then
-          Set_Stack_Limit_Hook.all;
-       end if;
-    end Thread_Body_Enter;
- 
-    ----------------------------------
-    -- Thread_Body_Exceptional_Exit --
-    ----------------------------------
- 
-    procedure Thread_Body_Exceptional_Exit
-      (EO : Ada.Exceptions.Exception_Occurrence)
-    is
-       pragma Unreferenced (EO);
- 
-    begin
-       --  No action for this target
- 
-       null;
-    end Thread_Body_Exceptional_Exit;
- 
-    -----------------------
-    -- Thread_Body_Leave --
-    -----------------------
- 
-    procedure Thread_Body_Leave is
-    begin
-       --  No action for this target
- 
-       null;
-    end Thread_Body_Leave;
- 
-    --------------
-    -- Init_RTS --
-    --------------
- 
-    procedure Init_RTS is
-       --  Register environment task
-       Result : constant Interfaces.C.int := Register (taskIdSelf);
-       pragma Assert (Result /= ERROR);
- 
-    begin
-       Main_ATSD.Sec_Stack_Ptr := SSL.Get_Sec_Stack_NT;
-       Current_ATSD := Main_ATSD'Address;
-       Install_Handler;
-       SSL.Get_Sec_Stack := Get_Sec_Stack'Access;
-       SSL.Set_Sec_Stack := Set_Sec_Stack'Access;
-    end Init_RTS;
- 
-    -------------------
-    -- Get_Sec_Stack --
-    -------------------
- 
-    function  Get_Sec_Stack return SST.SS_Stack_Ptr is
-       CTSD : constant ATSD_Access := From_Address (Current_ATSD);
-    begin
-       pragma Assert (CTSD /= null);
-       return CTSD.Sec_Stack_Ptr;
-    end Get_Sec_Stack;
- 
-    --------------
-    -- Register --
-    --------------
- 
-    function Register (T : Thread_Id) return STATUS is
-    begin
-       --  It cannot be assumed that the caller of this routine has a ATSD;
-       --  so neither this procedure nor the procedures that it calls should
-       --  raise or handle exceptions, or make use of a secondary stack.
- 
-       if taskIdVerify (T) = ERROR then
-          return ERROR;
-       end if;
- 
-       Current_ATSD := To_Address (Integer_Address (T));
- 
-       --  The same issue applies to the task variable that contains the stack
-       --  limit when that overflow checking mechanism is used instead of
-       --  probing. If stack checking is enabled and limit checking is used,
-       --  allocate the limit for this task. The environment task has this
-       --  initialized by the binder-generated main when
-       --  System.Stack_Check_Limits = True.
- 
-       pragma Warnings (Off);
- 
-       --  OS is a constant
-       if OS /= VxWorks_653 and then Set_Stack_Limit_Hook /= null then
-          --  Check that this is correct if limit checking left in. ???
-          Stack_Limit := To_Address (Integer_Address (T));
-       end if;
-       pragma Warnings (On);
- 
-       return OK;
-    end Register;
- 
-    -------------------
-    -- Set_Sec_Stack --
-    -------------------
- 
-    procedure Set_Sec_Stack (Stack : SST.SS_Stack_Ptr) is
-       CTSD : constant ATSD_Access := From_Address (Current_ATSD);
-    begin
-       pragma Assert (CTSD /= null);
-       CTSD.Sec_Stack_Ptr := Stack;
-    end Set_Sec_Stack;
- 
- begin
-    --  Initialize run-time library
- 
-    Init_RTS;
- end System.Threads;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-traceb.adb gcc-12.1.0/gcc/ada/libgnat/s-traceb.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-traceb.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-traceb.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
***************
*** 34,41 ****
  --  Note: this unit must be compiled using -fno-optimize-sibling-calls.
  --  See comment below in body of Call_Chain for details on the reason.
  
- pragma Compiler_Unit_Warning;
- 
  package body System.Traceback is
  
     procedure Call_Chain
--- 34,39 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-traceb.ads gcc-12.1.0/gcc/ada/libgnat/s-traceb.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-traceb.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-traceb.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
***************
*** 33,40 ****
  --  execution location. The traceback shows the locations of calls in the call
  --  chain, up to either the top or a designated number of levels.
  
- pragma Compiler_Unit_Warning;
- 
  with System.Traceback_Entries;
  
  package System.Traceback is
--- 33,38 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-traceb__hpux.adb gcc-12.1.0/gcc/ada/libgnat/s-traceb__hpux.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-traceb__hpux.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-traceb__hpux.adb	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2009-2020, 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- --
--- 7,13 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --           Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-traceb__mastop.adb gcc-12.1.0/gcc/ada/libgnat/s-traceb__mastop.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-traceb__mastop.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-traceb__mastop.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-traent.adb gcc-12.1.0/gcc/ada/libgnat/s-traent.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-traent.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-traent.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package body System.Traceback_Entries is
  
     ------------
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-traent.ads gcc-12.1.0/gcc/ada/libgnat/s-traent.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-traent.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-traent.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
***************
*** 38,45 ****
  --  version of the package, an entry is a mere code location representing the
  --  address of a call instruction part of the call-chain.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Traceback_Entries is
     pragma Preelaborate;
  
--- 38,43 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-trasym.adb gcc-12.1.0/gcc/ada/libgnat/s-trasym.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-trasym.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-trasym.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-trasym.ads gcc-12.1.0/gcc/ada/libgnat/s-trasym.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-trasym.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-trasym.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-trasym__dwarf.adb gcc-12.1.0/gcc/ada/libgnat/s-trasym__dwarf.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-trasym__dwarf.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-trasym__dwarf.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 1999-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
*************** package body System.Traceback.Symbolic i
*** 691,697 ****
        return Symbolic_Traceback (E, Suppress_Hex => True);
     end Symbolic_Traceback_No_Hex;
  
!    Exception_Tracebacks_Symbolic : Integer;
     pragma Import
       (C,
        Exception_Tracebacks_Symbolic,
--- 691,697 ----
        return Symbolic_Traceback (E, Suppress_Hex => True);
     end Symbolic_Traceback_No_Hex;
  
!    Exception_Tracebacks_Symbolic : constant Integer;
     pragma Import
       (C,
        Exception_Tracebacks_Symbolic,
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-tsmona.adb gcc-12.1.0/gcc/ada/libgnat/s-tsmona.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-tsmona.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-tsmona.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2012-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2012-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-tsmona__linux.adb gcc-12.1.0/gcc/ada/libgnat/s-tsmona__linux.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-tsmona__linux.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-tsmona__linux.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2012-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2012-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-tsmona__mingw.adb gcc-12.1.0/gcc/ada/libgnat/s-tsmona__mingw.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-tsmona__mingw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-tsmona__mingw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2012-2020, AdaCore                     --
  --                                                                          --
  -- 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --                     Copyright (C) 2012-2022, AdaCore                     --
  --                                                                          --
  -- 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-unstyp.ads gcc-12.1.0/gcc/ada/libgnat/s-unstyp.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-unstyp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-unstyp.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 35,42 ****
  --  also contains some related definitions for other specialized types
  --  used by the compiler in connection with packed array types.
  
- pragma Compiler_Unit_Warning;
- 
  package System.Unsigned_Types is
     pragma Pure;
     pragma No_Elaboration_Code_All;
--- 35,40 ----
*************** package System.Unsigned_Types is
*** 48,56 ****
     type Long_Long_Unsigned      is mod 2 ** Long_Long_Integer'Size;
     type Long_Long_Long_Unsigned is mod Max_Binary_Modulus;
  
-    type Float_Unsigned          is mod 2 ** Float'Size;
-    --  Used in the implementation of Is_Negative intrinsic (see Exp_Intr)
- 
     type Packed_Byte is mod 2 ** 8;
     for Packed_Byte'Size use 8;
     pragma Universal_Aliasing (Packed_Byte);
--- 46,51 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-utf_32.adb gcc-12.1.0/gcc/ada/libgnat/s-utf_32.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-utf_32.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-utf_32.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, 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- --
***************
*** 29,46 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! pragma Compiler_Unit_Warning;
! 
! pragma Style_Checks (Off);
! --  Allow long lines in this unit. Note this could be more specific, but we
! --  keep this simple form because of bootstrap constraints ???
  
! --  pragma Warnings (Off, "non-static constant in preelaborated unit");
! --  We need this to be pure, and the three constants in question are not a
! --  real problem, they are completely known at compile time. This pragma
! --  is commented out for now, because we still want to be able to bootstrap
! --  with old versions of the compiler that did not support this form. We
! --  have added additional pragma Warnings (Off/On) for now ???
  
  package body System.UTF_32 is
  
--- 29,41 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! pragma Style_Checks ("M512");
! --  Allow long lines in this unit
  
! pragma Warnings (Off, "non-static constant in preelaborated unit");
! --  We need package to be pure, and multiple constants in this unit will
! --  trigger the "non-static" warning - so ignore this since they are known at
! --  compile time and not a real problem for us.
  
  package body System.UTF_32 is
  
*************** package body System.UTF_32 is
*** 1858,1866 ****
       (16#F0000#, 16#FFFFD#),  -- (Co)  <Plane 15 Private Use, First> .. <Plane 15 Private Use, Last>
       (16#100000#, 16#10FFFD#));  -- (Co)  <Plane 16 Private Use, First> .. <Plane 16 Private Use, Last>
  
-    pragma Warnings (Off);
-    --  Temporary, until pragma at start can be activated ???
- 
     --  The following array is parallel to the Unicode_Ranges table above. For
     --  each entry in the Unicode_Ranges table, there is a corresponding entry
     --  in the following table indicating the corresponding unicode category.
--- 1853,1858 ----
*************** package body System.UTF_32 is
*** 6508,6516 ****
       (16#1FBF0#, 16#1FBF9#),   -- SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
       (16#2F800#, 16#2FA1D#));  -- CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
  
-    pragma Warnings (On);
-    --  Temporary until pragma Warnings at start can be activated ???
- 
     type Decomposition_Mapping is record
        Item               : UTF_32;
        First_Char_Mapping : UTF_32;
--- 6500,6505 ----
*************** package body System.UTF_32 is
*** 12314,12320 ****
        return C = Nd;
     end Is_UTF_32_Digit;
  
!     ----------------------
     -- Is_UTF_32_Letter --
     ----------------------
  
--- 12303,12309 ----
        return C = Nd;
     end Is_UTF_32_Digit;
  
!    ----------------------
     -- Is_UTF_32_Letter --
     ----------------------
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-utf_32.ads gcc-12.1.0/gcc/ada/libgnat/s-utf_32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-utf_32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-utf_32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, 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- --
***************
*** 41,47 ****
  --  the same services. The reason this package is in System is so that it can
  --  with'ed by other packages in the Ada and System hierarchies.
  
! pragma Compiler_Unit_Warning;
  
  package System.UTF_32 is
     pragma Pure;
--- 41,48 ----
  --  the same services. The reason this package is in System is so that it can
  --  with'ed by other packages in the Ada and System hierarchies.
  
! --  Note: this unit is used during bootstrap, see ADA_GENERATED_FILES in
! --  gcc-interface/Make-lang.in for details on the constraints.
  
  package System.UTF_32 is
     pragma Pure;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vade128.ads gcc-12.1.0/gcc/ada/libgnat/s-vade128.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vade128.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vade128.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vade32.ads gcc-12.1.0/gcc/ada/libgnat/s-vade32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vade32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vade32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vade64.ads gcc-12.1.0/gcc/ada/libgnat/s-vade64.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vade64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vade64.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vaen16.ads gcc-12.1.0/gcc/ada/libgnat/s-vaen16.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vaen16.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-vaen16.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,61 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                   S Y S T E M . V A L _ E N U M _ 1 6                    --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2021-2022, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Instantiation of System.Value_N for enumeration types whose names table
+ --  has a length that fits in a 16-bit but not an 8-bit integer.
+ 
+ with Interfaces;
+ with System.Value_N;
+ 
+ package System.Val_Enum_16 is
+    pragma Preelaborate;
+ 
+    package Impl is new Value_N (Interfaces.Integer_16);
+ 
+    function Value_Enumeration_16
+      (Names   : String;
+       Indexes : System.Address;
+       Hash    : Impl.Hash_Function_Ptr;
+       Num     : Natural;
+       Str     : String)
+       return    Natural
+      renames Impl.Value_Enumeration;
+ 
+    function Valid_Value_Enumeration_16
+      (Names   : String;
+       Indexes : System.Address;
+       Hash    : Impl.Hash_Function_Ptr;
+       Num     : Natural;
+       Str     : String)
+       return    Boolean
+      renames Impl.Valid_Value_Enumeration;
+ 
+ end System.Val_Enum_16;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vaen32.ads gcc-12.1.0/gcc/ada/libgnat/s-vaen32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vaen32.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-vaen32.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,61 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                   S Y S T E M . V A L _ E N U M _ 3 2                    --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2021-2022, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Instantiation of System.Value_N for enumeration types whose names table
+ --  has a length that fits in a 32-bit but not a 16-bit integer.
+ 
+ with Interfaces;
+ with System.Value_N;
+ 
+ package System.Val_Enum_32 is
+    pragma Preelaborate;
+ 
+    package Impl is new Value_N (Interfaces.Integer_32);
+ 
+    function Value_Enumeration_32
+      (Names   : String;
+       Indexes : System.Address;
+       Hash    : Impl.Hash_Function_Ptr;
+       Num     : Natural;
+       Str     : String)
+       return    Natural
+      renames Impl.Value_Enumeration;
+ 
+    function Valid_Value_Enumeration_32
+      (Names   : String;
+       Indexes : System.Address;
+       Hash    : Impl.Hash_Function_Ptr;
+       Num     : Natural;
+       Str     : String)
+       return    Boolean
+      renames Impl.Valid_Value_Enumeration;
+ 
+ end System.Val_Enum_32;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vaenu8.ads gcc-12.1.0/gcc/ada/libgnat/s-vaenu8.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vaenu8.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-vaenu8.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,61 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT RUN-TIME COMPONENTS                         --
+ --                                                                          --
+ --                    S Y S T E M . V A L _ E N U M _ 8                     --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2021-2022, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Instantiation of System.Value_N for enumeration types whose names table
+ --  has a length that fits in an 8-bit integer.
+ 
+ with Interfaces;
+ with System.Value_N;
+ 
+ package System.Val_Enum_8 is
+    pragma Preelaborate;
+ 
+    package Impl is new Value_N (Interfaces.Integer_8);
+ 
+    function Value_Enumeration_8
+      (Names   : String;
+       Indexes : System.Address;
+       Hash    : Impl.Hash_Function_Ptr;
+       Num     : Natural;
+       Str     : String)
+       return    Natural
+      renames Impl.Value_Enumeration;
+ 
+    function Valid_Value_Enumeration_8
+      (Names   : String;
+       Indexes : System.Address;
+       Hash    : Impl.Hash_Function_Ptr;
+       Num     : Natural;
+       Str     : String)
+       return    Boolean
+      renames Impl.Valid_Value_Enumeration;
+ 
+ end System.Val_Enum_8;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vafi128.ads gcc-12.1.0/gcc/ada/libgnat/s-vafi128.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vafi128.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vafi128.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vafi32.ads gcc-12.1.0/gcc/ada/libgnat/s-vafi32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vafi32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vafi32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vafi64.ads gcc-12.1.0/gcc/ada/libgnat/s-vafi64.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vafi64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vafi64.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valboo.adb gcc-12.1.0/gcc/ada/libgnat/s-valboo.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valboo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valboo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,50 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  with System.Val_Util; use System.Val_Util;
  
! package body System.Val_Bool is
  
     -------------------
     -- Value_Boolean --
     -------------------
  
     function Value_Boolean (Str : String) return Boolean is
!       F : Natural;
!       L : Natural;
        S : String (Str'Range) := Str;
  
     begin
        Normalize_String (S, F, L);
  
        if S (F .. L) = "TRUE" then
           return True;
  
--- 29,63 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ --  Ghost code, loop invariants and assertions in this unit are meant for
+ --  analysis only, not for run-time checking, as it would be too costly
+ --  otherwise. This is enforced by setting the assertion policy to Ignore.
+ 
+ pragma Assertion_Policy (Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with System.Val_Util; use System.Val_Util;
  
! package body System.Val_Bool
!   with SPARK_Mode
! is
  
     -------------------
     -- Value_Boolean --
     -------------------
  
     function Value_Boolean (Str : String) return Boolean is
!       F : Integer;
!       L : Integer;
        S : String (Str'Range) := Str;
  
     begin
        Normalize_String (S, F, L);
  
+       pragma Assert (F = System.Val_Util.First_Non_Space_Ghost
+                      (S, Str'First, Str'Last));
+ 
        if S (F .. L) = "TRUE" then
           return True;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valboo.ads gcc-12.1.0/gcc/ada/libgnat/s-valboo.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valboo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valboo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,38 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! package System.Val_Bool is
     pragma Preelaborate;
  
!    function Value_Boolean (Str : String) return Boolean;
     --  Computes Boolean'Value (Str)
  
  end System.Val_Bool;
--- 29,90 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Preconditions in this unit are meant for analysis only, not for run-time
! --  checking, so that the expected exceptions are raised. This is enforced by
! --  setting the corresponding assertion policy to Ignore. Postconditions and
! --  contract cases should not be executed at runtime as well, in order not to
! --  slow down the execution of these functions.
! 
! pragma Assertion_Policy (Pre            => Ignore,
!                          Post           => Ignore,
!                          Contract_Cases => Ignore,
!                          Ghost          => Ignore);
! 
! with System.Val_Util;
! 
! package System.Val_Bool
!   with SPARK_Mode
! is
     pragma Preelaborate;
  
!    function Is_Boolean_Image_Ghost (Str : String) return Boolean is
!      (not System.Val_Util.Only_Space_Ghost (Str, Str'First, Str'Last)
!         and then
!       (declare
!          F : constant Positive := System.Val_Util.First_Non_Space_Ghost
!            (Str, Str'First, Str'Last);
!        begin
!          (F <= Str'Last - 3
!           and then Str (F)     in 't' | 'T'
!           and then Str (F + 1) in 'r' | 'R'
!           and then Str (F + 2) in 'u' | 'U'
!           and then Str (F + 3) in 'e' | 'E'
!           and then
!             (if F + 3 < Str'Last then
!                System.Val_Util.Only_Space_Ghost (Str, F + 4, Str'Last)))
!            or else
!          (F <= Str'Last - 4
!           and then Str (F)     in 'f' | 'F'
!           and then Str (F + 1) in 'a' | 'A'
!           and then Str (F + 2) in 'l' | 'L'
!           and then Str (F + 3) in 's' | 'S'
!           and then Str (F + 4) in 'e' | 'E'
!           and then
!             (if F + 4 < Str'Last then
!                System.Val_Util.Only_Space_Ghost (Str, F + 5, Str'Last)))))
!    with
!      Ghost;
!    --  Ghost function that returns True iff Str is the image of a boolean, that
!    --  is "true" or "false" in any capitalization, possibly surounded by space
!    --  characters.
! 
!    function Value_Boolean (Str : String) return Boolean
!    with
!      Pre  => Is_Boolean_Image_Ghost (Str),
!      Post =>
!        Value_Boolean'Result =
!          (Str (System.Val_Util.First_Non_Space_Ghost
!             (Str, Str'First, Str'Last)) in 't' | 'T');
     --  Computes Boolean'Value (Str)
  
  end System.Val_Bool;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valcha.adb gcc-12.1.0/gcc/ada/libgnat/s-valcha.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valcha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valcha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valcha.ads gcc-12.1.0/gcc/ada/libgnat/s-valcha.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valcha.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valcha.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valenu.adb gcc-12.1.0/gcc/ada/libgnat/s-valenu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valenu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valenu.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,155 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                      S Y S T E M . V A L _ E N U M                       --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- with Ada.Unchecked_Conversion;
- 
- with System.Val_Util; use System.Val_Util;
- 
- package body System.Val_Enum is
- 
-    -------------------------
-    -- Value_Enumeration_8 --
-    -------------------------
- 
-    function Value_Enumeration_8
-      (Names   : String;
-       Indexes : System.Address;
-       Num     : Natural;
-       Str     : String)
-       return    Natural
-    is
-       F : Natural;
-       L : Natural;
-       S : String (Str'Range) := Str;
- 
-       type Natural_8 is range 0 .. 2 ** 7 - 1;
-       type Index_Table is array (Natural) of Natural_8;
-       type Index_Table_Ptr is access Index_Table;
- 
-       function To_Index_Table_Ptr is
-         new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
- 
-       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
- 
-    begin
-       Normalize_String (S, F, L);
- 
-       for J in 0 .. Num loop
-          if Names
-            (Natural (IndexesT (J)) ..
-             Natural (IndexesT (J + 1)) - 1) = S (F .. L)
-          then
-             return J;
-          end if;
-       end loop;
- 
-       Bad_Value (Str);
-    end Value_Enumeration_8;
- 
-    --------------------------
-    -- Value_Enumeration_16 --
-    --------------------------
- 
-    function Value_Enumeration_16
-      (Names   : String;
-       Indexes : System.Address;
-       Num     : Natural;
-       Str     : String)
-       return    Natural
-    is
-       F : Natural;
-       L : Natural;
-       S : String (Str'Range) := Str;
- 
-       type Natural_16 is range 0 .. 2 ** 15 - 1;
-       type Index_Table is array (Natural) of Natural_16;
-       type Index_Table_Ptr is access Index_Table;
- 
-       function To_Index_Table_Ptr is
-         new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
- 
-       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
- 
-    begin
-       Normalize_String (S, F, L);
- 
-       for J in 0 .. Num loop
-          if Names
-            (Natural (IndexesT (J)) ..
-             Natural (IndexesT (J + 1)) - 1) = S (F .. L)
-          then
-             return J;
-          end if;
-       end loop;
- 
-       Bad_Value (Str);
-    end Value_Enumeration_16;
- 
-    --------------------------
-    -- Value_Enumeration_32 --
-    --------------------------
- 
-    function Value_Enumeration_32
-      (Names   : String;
-       Indexes : System.Address;
-       Num     : Natural;
-       Str     : String)
-       return    Natural
-    is
-       F : Natural;
-       L : Natural;
-       S : String (Str'Range) := Str;
- 
-       type Natural_32 is range 0 .. 2 ** 31 - 1;
-       type Index_Table is array (Natural) of Natural_32;
-       type Index_Table_Ptr is access Index_Table;
- 
-       function To_Index_Table_Ptr is
-         new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
- 
-       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
- 
-    begin
-       Normalize_String (S, F, L);
- 
-       for J in 0 .. Num loop
-          if Names
-            (Natural (IndexesT (J)) ..
-             Natural (IndexesT (J + 1)) - 1) = S (F .. L)
-          then
-             return J;
-          end if;
-       end loop;
- 
-       Bad_Value (Str);
-    end Value_Enumeration_32;
- 
- end System.Val_Enum;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valenu.ads gcc-12.1.0/gcc/ada/libgnat/s-valenu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valenu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valenu.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,80 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                      S Y S T E M . V A L _ E N U M                       --
- --                                                                          --
- --                                 S p e c                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This package is used to compute the Value attribute for enumeration types
- --  other than those in packages Standard and System. See unit Exp_Imgv for
- --  details of the format of constructed image tables.
- 
- package System.Val_Enum is
-    pragma Preelaborate;
- 
-    function Value_Enumeration_8
-      (Names   : String;
-       Indexes : System.Address;
-       Num     : Natural;
-       Str     : String)
-       return    Natural;
-    --  Used to compute Enum'Value (Str) where Enum is some enumeration type
-    --  other than those defined in package Standard. Names is a string with
-    --  a lower bound of 1 containing the characters of all the enumeration
-    --  literals concatenated together in sequence. Indexes is the address
-    --  of an array of type array (0 .. N) of Natural_8, where N is the
-    --  number of enumeration literals in the type. The Indexes values are
-    --  the starting subscript of each enumeration literal, indexed by Pos
-    --  values, with an extra entry at the end containing Names'Length + 1.
-    --  The parameter Num is the value N - 1 (i.e. Enum'Pos (Enum'Last)).
-    --  The reason that Indexes is passed by address is that the actual type
-    --  is created on the fly by the expander.
-    --
-    --  Str is the argument of the attribute function, and may have leading
-    --  and trailing spaces, and letters can be upper or lower case or mixed.
-    --  If the image is found in Names, then the corresponding Pos value is
-    --  returned. If not, Constraint_Error is raised.
- 
-    function Value_Enumeration_16
-      (Names   : String;
-       Indexes : System.Address;
-       Num     : Natural;
-       Str     : String)
-       return    Natural;
-    --  Identical to Value_Enumeration_8 except that it handles types
-    --  using array (0 .. Num) of Natural_16 for the Indexes table.
- 
-    function Value_Enumeration_32
-      (Names   : String;
-       Indexes : System.Address;
-       Num     : Natural;
-       Str     : String)
-       return    Natural;
-    --  Identical to Value_Enumeration_8 except that it handles types
-    --  using array (0 .. Num) of Natural_32 for the Indexes table.
- 
- end System.Val_Enum;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valflt.ads gcc-12.1.0/gcc/ada/libgnat/s-valflt.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valflt.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valflt.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
***************
*** 32,39 ****
  --  This package contains routines for scanning real values for floating point
  --  type Float, for use in Text_IO.Float_IO and the Value attribute.
  
- with Interfaces;
  with System.Powten_Flt;
  with System.Val_Real;
  
  package System.Val_Flt is
--- 32,39 ----
  --  This package contains routines for scanning real values for floating point
  --  type Float, for use in Text_IO.Float_IO and the Value attribute.
  
  with System.Powten_Flt;
+ with System.Unsigned_Types;
  with System.Val_Real;
  
  package System.Val_Flt is
*************** package System.Val_Flt is
*** 41,49 ****
  
     package Impl is new Val_Real
       (Float,
-       Interfaces.Unsigned_32,
        System.Powten_Flt.Maxpow,
!       System.Powten_Flt.Powten'Address);
  
     function Scan_Float
       (Str : String;
--- 41,49 ----
  
     package Impl is new Val_Real
       (Float,
        System.Powten_Flt.Maxpow,
!       System.Powten_Flt.Powten'Address,
!       Unsigned_Types.Unsigned);
  
     function Scan_Float
       (Str : String;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valint.adb gcc-12.1.0/gcc/ada/libgnat/s-valint.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valint.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valint.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valint.ads gcc-12.1.0/gcc/ada/libgnat/s-valint.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valint.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valint.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package System.Val_Int is
*** 43,52 ****
  
     package Impl is new Value_I (Integer, Unsigned, Val_Uns.Scan_Raw_Unsigned);
  
!    function Scan_Integer
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Integer
       renames Impl.Scan_Integer;
  
     function Value_Integer (Str : String) return Integer
--- 43,53 ----
  
     package Impl is new Value_I (Integer, Unsigned, Val_Uns.Scan_Raw_Unsigned);
  
!    procedure Scan_Integer
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Integer)
       renames Impl.Scan_Integer;
  
     function Value_Integer (Str : String) return Integer
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vallfl.ads gcc-12.1.0/gcc/ada/libgnat/s-vallfl.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vallfl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vallfl.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
***************
*** 32,39 ****
  --  This package contains routines for scanning real values for floating point
  --  type Long_Float, for use in Text_IO.Float_IO and the Value attribute.
  
- with Interfaces;
  with System.Powten_LFlt;
  with System.Val_Real;
  
  package System.Val_LFlt is
--- 32,39 ----
  --  This package contains routines for scanning real values for floating point
  --  type Long_Float, for use in Text_IO.Float_IO and the Value attribute.
  
  with System.Powten_LFlt;
+ with System.Unsigned_Types;
  with System.Val_Real;
  
  package System.Val_LFlt is
*************** package System.Val_LFlt is
*** 41,49 ****
  
     package Impl is new Val_Real
       (Long_Float,
-       Interfaces.Unsigned_64,
        System.Powten_LFlt.Maxpow,
!       System.Powten_LFlt.Powten'Address);
  
     function Scan_Long_Float
       (Str : String;
--- 41,49 ----
  
     package Impl is new Val_Real
       (Long_Float,
        System.Powten_LFlt.Maxpow,
!       System.Powten_LFlt.Powten'Address,
!       Unsigned_Types.Long_Long_Unsigned);
  
     function Scan_Long_Float
       (Str : String;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valllf.ads gcc-12.1.0/gcc/ada/libgnat/s-valllf.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valllf.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valllf.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
***************
*** 32,39 ****
  --  This package contains routines for scanning real values for floating point
  --  type Long_Long_Float, for use in Text_IO.Float_IO and the Value attribute.
  
- with Interfaces;
  with System.Powten_LLF;
  with System.Val_Real;
  
  package System.Val_LLF is
--- 32,39 ----
  --  This package contains routines for scanning real values for floating point
  --  type Long_Long_Float, for use in Text_IO.Float_IO and the Value attribute.
  
  with System.Powten_LLF;
+ with System.Unsigned_Types;
  with System.Val_Real;
  
  package System.Val_LLF is
*************** package System.Val_LLF is
*** 41,49 ****
  
     package Impl is new Val_Real
       (Long_Long_Float,
-       Interfaces.Unsigned_64,
        System.Powten_LLF.Maxpow,
!       System.Powten_LLF.Powten'Address);
  
     function Scan_Long_Long_Float
       (Str : String;
--- 41,49 ----
  
     package Impl is new Val_Real
       (Long_Long_Float,
        System.Powten_LLF.Maxpow,
!       System.Powten_LLF.Powten'Address,
!       System.Unsigned_Types.Long_Long_Unsigned);
  
     function Scan_Long_Long_Float
       (Str : String;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vallli.adb gcc-12.1.0/gcc/ada/libgnat/s-vallli.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-vallli.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vallli.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vallli.ads gcc-12.1.0/gcc/ada/libgnat/s-vallli.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vallli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vallli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package System.Val_LLI is
*** 46,55 ****
                Long_Long_Unsigned,
                Val_LLU.Scan_Raw_Long_Long_Unsigned);
  
!    function Scan_Long_Long_Integer
       (Str  : String;
        Ptr  : not null access Integer;
!       Max  : Integer) return Long_Long_Integer
       renames Impl.Scan_Integer;
  
     function Value_Long_Long_Integer (Str : String) return Long_Long_Integer
--- 46,56 ----
                Long_Long_Unsigned,
                Val_LLU.Scan_Raw_Long_Long_Unsigned);
  
!    procedure Scan_Long_Long_Integer
       (Str  : String;
        Ptr  : not null access Integer;
!       Max  : Integer;
!       Res  : out Long_Long_Integer)
       renames Impl.Scan_Integer;
  
     function Value_Long_Long_Integer (Str : String) return Long_Long_Integer
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valllli.ads gcc-12.1.0/gcc/ada/libgnat/s-valllli.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valllli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valllli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package System.Val_LLLI is
*** 46,55 ****
                Long_Long_Long_Unsigned,
                Val_LLLU.Scan_Raw_Long_Long_Long_Unsigned);
  
!    function Scan_Long_Long_Long_Integer
       (Str  : String;
        Ptr  : not null access Integer;
!       Max  : Integer) return Long_Long_Long_Integer
       renames Impl.Scan_Integer;
  
     function Value_Long_Long_Long_Integer
--- 46,56 ----
                Long_Long_Long_Unsigned,
                Val_LLLU.Scan_Raw_Long_Long_Long_Unsigned);
  
!    procedure Scan_Long_Long_Long_Integer
       (Str  : String;
        Ptr  : not null access Integer;
!       Max  : Integer;
!       Res  : out  Long_Long_Long_Integer)
       renames Impl.Scan_Integer;
  
     function Value_Long_Long_Long_Integer
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vallllu.ads gcc-12.1.0/gcc/ada/libgnat/s-vallllu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vallllu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vallllu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 32,57 ****
  --  This package contains routines for scanning modular Long_Long_Unsigned
  --  values for use in Text_IO.Modular_IO, and the Value attribute.
  
  with System.Unsigned_Types;
  with System.Value_U;
  
! package System.Val_LLLU is
     pragma Preelaborate;
  
     subtype Long_Long_Long_Unsigned is Unsigned_Types.Long_Long_Long_Unsigned;
  
     package Impl is new Value_U (Long_Long_Long_Unsigned);
  
!    function Scan_Raw_Long_Long_Long_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Long_Long_Long_Unsigned
       renames Impl.Scan_Raw_Unsigned;
  
!    function Scan_Long_Long_Long_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Long_Long_Long_Unsigned
       renames Impl.Scan_Unsigned;
  
     function Value_Long_Long_Long_Unsigned
--- 32,71 ----
  --  This package contains routines for scanning modular Long_Long_Unsigned
  --  values for use in Text_IO.Modular_IO, and the Value attribute.
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre                => Ignore,
+                          Post               => Ignore,
+                          Contract_Cases     => Ignore,
+                          Ghost              => Ignore,
+                          Subprogram_Variant => Ignore);
+ 
  with System.Unsigned_Types;
  with System.Value_U;
  
! package System.Val_LLLU with SPARK_Mode is
     pragma Preelaborate;
  
     subtype Long_Long_Long_Unsigned is Unsigned_Types.Long_Long_Long_Unsigned;
  
     package Impl is new Value_U (Long_Long_Long_Unsigned);
  
!    procedure Scan_Raw_Long_Long_Long_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Long_Long_Long_Unsigned)
       renames Impl.Scan_Raw_Unsigned;
  
!    procedure Scan_Long_Long_Long_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Long_Long_Long_Unsigned)
       renames Impl.Scan_Unsigned;
  
     function Value_Long_Long_Long_Unsigned
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valllu.adb gcc-12.1.0/gcc/ada/libgnat/s-valllu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valllu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valllu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valllu.ads gcc-12.1.0/gcc/ada/libgnat/s-valllu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valllu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valllu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 32,57 ****
  --  This package contains routines for scanning modular Long_Long_Unsigned
  --  values for use in Text_IO.Modular_IO, and the Value attribute.
  
  with System.Unsigned_Types;
  with System.Value_U;
  
! package System.Val_LLU is
     pragma Preelaborate;
  
     subtype Long_Long_Unsigned is Unsigned_Types.Long_Long_Unsigned;
  
     package Impl is new Value_U (Long_Long_Unsigned);
  
!    function Scan_Raw_Long_Long_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Long_Long_Unsigned
       renames Impl.Scan_Raw_Unsigned;
  
!    function Scan_Long_Long_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Long_Long_Unsigned
       renames Impl.Scan_Unsigned;
  
     function Value_Long_Long_Unsigned
--- 32,71 ----
  --  This package contains routines for scanning modular Long_Long_Unsigned
  --  values for use in Text_IO.Modular_IO, and the Value attribute.
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre                => Ignore,
+                          Post               => Ignore,
+                          Contract_Cases     => Ignore,
+                          Ghost              => Ignore,
+                          Subprogram_Variant => Ignore);
+ 
  with System.Unsigned_Types;
  with System.Value_U;
  
! package System.Val_LLU with SPARK_Mode is
     pragma Preelaborate;
  
     subtype Long_Long_Unsigned is Unsigned_Types.Long_Long_Unsigned;
  
     package Impl is new Value_U (Long_Long_Unsigned);
  
!    procedure Scan_Raw_Long_Long_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Long_Long_Unsigned)
       renames Impl.Scan_Raw_Unsigned;
  
!    procedure Scan_Long_Long_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Long_Long_Unsigned)
       renames Impl.Scan_Unsigned;
  
     function Value_Long_Long_Unsigned
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valrea.adb gcc-12.1.0/gcc/ada/libgnat/s-valrea.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valrea.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valrea.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,34 ****
--- 29,35 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with System.Double_Real;
  with System.Float_Control;
  with System.Unsigned_Types; use System.Unsigned_Types;
  with System.Val_Util;       use System.Val_Util;
*************** package body System.Val_Real is
*** 46,52 ****
     --  If the mantissa of the floating-point type is almost as large as the
     --  unsigned type, we do not have enough space for an extra digit in the
     --  unsigned type so we handle the extra digit separately, at the cost of
!    --  a potential roundoff error.
  
     Precision_Limit : constant Uns :=
       (if Need_Extra then 2**Num'Machine_Mantissa - 1 else 2**Uns'Size - 1);
--- 47,53 ----
     --  If the mantissa of the floating-point type is almost as large as the
     --  unsigned type, we do not have enough space for an extra digit in the
     --  unsigned type so we handle the extra digit separately, at the cost of
!    --  a bit more work in Integer_to_Real.
  
     Precision_Limit : constant Uns :=
       (if Need_Extra then 2**Num'Machine_Mantissa - 1 else 2**Uns'Size - 1);
*************** package body System.Val_Real is
*** 62,80 ****
     --  index N is the largest K such that N**K <= Num'Last.
  
     Maxexp32 : constant array (Base_T) of Positive :=
!      (2  => 127, 3 => 80,  4 => 63,  5 => 55,  6 => 49,
        7  => 45,  8 => 42,  9 => 40, 10 => 38, 11 => 37,
!       12 => 35, 13 => 34, 14 => 33, 15 => 32, 16 => 31);
  
     Maxexp64 : constant array (Base_T) of Positive :=
!      (2  => 1023, 3 => 646,  4 => 511,  5 => 441,  6 => 396,
        7  => 364,  8 => 341,  9 => 323, 10 => 308, 11 => 296,
!       12 => 285, 13 => 276, 14 => 268, 15 => 262, 16 => 255);
  
     Maxexp80 : constant array (Base_T) of Positive :=
!      (2  => 16383, 3 => 10337, 4 => 8191,  5 => 7056,  6 => 6338,
        7  => 5836,  8 => 5461,  9 => 5168, 10 => 4932, 11 => 4736,
!       12 => 4570, 13 => 4427, 14 => 4303, 15 => 4193, 16 => 4095);
  
     function Integer_to_Real
       (Str   : String;
--- 63,87 ----
     --  index N is the largest K such that N**K <= Num'Last.
  
     Maxexp32 : constant array (Base_T) of Positive :=
!      [2  => 127, 3 => 80,  4 => 63,  5 => 55,  6 => 49,
        7  => 45,  8 => 42,  9 => 40, 10 => 38, 11 => 37,
!       12 => 35, 13 => 34, 14 => 33, 15 => 32, 16 => 31];
  
     Maxexp64 : constant array (Base_T) of Positive :=
!      [2  => 1023, 3 => 646,  4 => 511,  5 => 441,  6 => 396,
        7  => 364,  8 => 341,  9 => 323, 10 => 308, 11 => 296,
!       12 => 285, 13 => 276, 14 => 268, 15 => 262, 16 => 255];
  
     Maxexp80 : constant array (Base_T) of Positive :=
!      [2  => 16383, 3 => 10337, 4 => 8191,  5 => 7056,  6 => 6338,
        7  => 5836,  8 => 5461,  9 => 5168, 10 => 4932, 11 => 4736,
!       12 => 4570, 13 => 4427, 14 => 4303, 15 => 4193, 16 => 4095];
! 
!    package Double_Real is new System.Double_Real (Num);
!    use type Double_Real.Double_T;
! 
!    subtype Double_T is Double_Real.Double_T;
!    --  The double floating-point type
  
     function Integer_to_Real
       (Str   : String;
*************** package body System.Val_Real is
*** 85,90 ****
--- 92,100 ----
        Minus : Boolean) return Num;
     --  Convert the real value from integer to real representation
  
+    function Large_Powten (Exp : Natural) return Double_T;
+    --  Return 10.0**Exp as a double number, where Exp > Maxpow
+ 
     ---------------------
     -- Integer_to_Real --
     ---------------------
*************** package body System.Val_Real is
*** 110,118 ****
                    else  raise Program_Error);
        --  Maximum exponent of the base that can fit in Num
  
-       B : constant Num := Num (Base);
- 
        R_Val : Num;
        S     : Integer := Scale;
  
     begin
--- 120,127 ----
                    else  raise Program_Error);
        --  Maximum exponent of the base that can fit in Num
  
        R_Val : Num;
+       D_Val : Double_T;
        S     : Integer := Scale;
  
     begin
*************** package body System.Val_Real is
*** 125,199 ****
           System.Float_Control.Reset;
        end if;
  
!       --  Do the conversion
  
!       R_Val := Num (Val);
  
!       --  Take into account the extra digit, if need be. In this case, the
!       --  three operands are exact, so using an FMA would be ideal.
  
        if Need_Extra and then Extra > 0 then
!          R_Val := R_Val * B + Num (Extra);
!          S := S - 1;
        end if;
  
!       --  Compute the final value
  
!       if R_Val /= 0.0 and then S /= 0 then
           case Base is
              --  If the base is a power of two, we use the efficient Scaling
              --  attribute with an overflow check, if it is not 2, to catch
              --  ludicrous exponents that would result in an infinity or zero.
  
              when 2 =>
!                R_Val := Num'Scaling (R_Val, S);
  
              when 4 =>
                 if Integer'First / 2 <= S and then S <= Integer'Last / 2 then
                    S := S * 2;
                 end if;
  
!                R_Val := Num'Scaling (R_Val, S);
  
              when 8 =>
                 if Integer'First / 3 <= S and then S <= Integer'Last / 3 then
                    S := S * 3;
                 end if;
  
!                R_Val := Num'Scaling (R_Val, S);
  
              when 16 =>
                 if Integer'First / 4 <= S and then S <= Integer'Last / 4 then
                    S := S * 4;
                 end if;
  
!                R_Val := Num'Scaling (R_Val, S);
  
!             --  If the base is 10, we use a table of powers for accuracy's sake
  
              when 10 =>
                 declare
!                   Powten : constant array (0 .. Maxpow) of Num;
                    pragma Import (Ada, Powten);
                    for Powten'Address use Powten_Address;
  
                 begin
                    if S > 0 then
!                      while S > Maxpow loop
!                         R_Val := R_Val * Powten (Maxpow);
!                         S := S - Maxpow;
!                      end loop;
! 
!                      R_Val := R_Val * Powten (S);
  
                    else
!                      while S < -Maxpow loop
!                         R_Val := R_Val / Powten (Maxpow);
!                         S := S + Maxpow;
!                      end loop;
  
!                      R_Val := R_Val / Powten (-S);
                    end if;
                 end;
  
              --  Implementation for other bases with exponentiation
--- 134,284 ----
           System.Float_Control.Reset;
        end if;
  
!       --  Take into account the extra digit, i.e. do the two computations
  
!       --    (1)  R_Val := R_Val * Num (B) + Num (Extra)
!       --    (2)  S := S - 1
  
!       --  In the first, the three operands are exact, so using an FMA would
!       --  be ideal, but we are most likely running on the x87 FPU, hence we
!       --  may not have one. That is why we turn the multiplication into an
!       --  iterated addition with exact error handling, so that we can do a
!       --  single rounding at the end.
  
        if Need_Extra and then Extra > 0 then
!          declare
!             B   : Unsigned := Base;
!             Acc : Num      := 0.0;
!             Err : Num      := 0.0;
!             Fac : Num      := Num (Val);
!             DS  : Double_T;
! 
!          begin
!             loop
!                --  If B is odd, add one factor. Note that the accumulator is
!                --  never larger than the factor at this point (it is in fact
!                --  never larger than the factor minus the initial value).
! 
!                if B rem 2 /= 0 then
!                   if Acc = 0.0 then
!                      Acc := Fac;
!                   else
!                      DS  := Double_Real.Quick_Two_Sum (Fac, Acc);
!                      Acc := DS.Hi;
!                      Err := Err + DS.Lo;
!                   end if;
!                   exit when B = 1;
!                end if;
! 
!                --  Now B is (morally) even, halve it and double the factor,
!                --  which is always an exact operation.
! 
!                B := B / 2;
!                Fac := Fac * 2.0;
!             end loop;
! 
!             --  Add Extra to the error, which are both small integers
! 
!             D_Val := Double_Real.Quick_Two_Sum (Acc, Err + Num (Extra));
! 
!             S := S - 1;
!          end;
! 
!       --  Or else, if the Extra digit is zero, do the exact conversion
! 
!       elsif Need_Extra then
!          D_Val := Double_Real.To_Double (Num (Val));
! 
!       --  Otherwise, the value contains more bits than the mantissa so do the
!       --  conversion in two steps.
! 
!       else
!          declare
!             Mask : constant Uns := 2**(Uns'Size - Num'Machine_Mantissa) - 1;
!             Hi   : constant Uns := Val and not Mask;
!             Lo   : constant Uns := Val and Mask;
! 
!          begin
!             if Hi = 0 then
!                D_Val := Double_Real.To_Double (Num (Lo));
!             else
!                D_Val := Double_Real.Quick_Two_Sum (Num (Hi), Num (Lo));
!             end if;
!          end;
        end if;
  
!       --  Compute the final value by applying the scaling, if any
  
!       if Val = 0 or else S = 0 then
!          R_Val := Double_Real.To_Single (D_Val);
! 
!       else
           case Base is
              --  If the base is a power of two, we use the efficient Scaling
              --  attribute with an overflow check, if it is not 2, to catch
              --  ludicrous exponents that would result in an infinity or zero.
  
              when 2 =>
!                R_Val := Num'Scaling (Double_Real.To_Single (D_Val), S);
  
              when 4 =>
                 if Integer'First / 2 <= S and then S <= Integer'Last / 2 then
                    S := S * 2;
                 end if;
  
!                R_Val := Num'Scaling (Double_Real.To_Single (D_Val), S);
  
              when 8 =>
                 if Integer'First / 3 <= S and then S <= Integer'Last / 3 then
                    S := S * 3;
                 end if;
  
!                R_Val := Num'Scaling (Double_Real.To_Single (D_Val), S);
  
              when 16 =>
                 if Integer'First / 4 <= S and then S <= Integer'Last / 4 then
                    S := S * 4;
                 end if;
  
!                R_Val := Num'Scaling (Double_Real.To_Single (D_Val), S);
  
!             --  If the base is 10, use a double implementation for the sake
!             --  of accuracy, to be removed when exponentiation is improved.
! 
!             --  When the exponent is positive, we can do the computation
!             --  directly because, if the exponentiation overflows, then
!             --  the final value overflows as well. But when the exponent
!             --  is negative, we may need to do it in two steps to avoid
!             --  an artificial underflow.
  
              when 10 =>
                 declare
!                   Powten : constant array (0 .. Maxpow) of Double_T;
                    pragma Import (Ada, Powten);
                    for Powten'Address use Powten_Address;
  
                 begin
                    if S > 0 then
!                      if S <= Maxpow then
!                         D_Val := D_Val * Powten (S);
!                      else
!                         D_Val := D_Val * Large_Powten (S);
!                      end if;
  
                    else
!                      if S < -Maxexp then
!                         D_Val := D_Val / Large_Powten (Maxexp);
!                         S := S + Maxexp;
!                      end if;
  
!                      if S >= -Maxpow then
!                         D_Val := D_Val / Powten (-S);
!                      else
!                         D_Val := D_Val / Large_Powten (-S);
!                      end if;
                    end if;
+ 
+                   R_Val := Double_Real.To_Single (D_Val);
                 end;
  
              --  Implementation for other bases with exponentiation
*************** package body System.Val_Real is
*** 205,221 ****
              --  an artificial underflow.
  
              when others =>
!                if S > 0 then
!                   R_Val := R_Val * B ** S;
  
!                else
!                   if S < -Maxexp then
!                      R_Val := R_Val / B ** Maxexp;
!                      S := S + Maxexp;
!                   end if;
  
!                   R_Val := R_Val / B ** (-S);
!                end if;
           end case;
        end if;
  
--- 290,313 ----
              --  an artificial underflow.
  
              when others =>
!                declare
!                   B : constant Num := Num (Base);
  
!                begin
!                   R_Val := Double_Real.To_Single (D_Val);
  
!                   if S > 0 then
!                      R_Val := R_Val * B ** S;
! 
!                   else
!                      if S < -Maxexp then
!                         R_Val := R_Val / B ** Maxexp;
!                         S := S + Maxexp;
!                      end if;
! 
!                      R_Val := R_Val / B ** (-S);
!                   end if;
!                end;
           end case;
        end if;
  
*************** package body System.Val_Real is
*** 228,233 ****
--- 320,353 ----
        when Constraint_Error => Bad_Value (Str);
     end Integer_to_Real;
  
+    ------------------
+    -- Large_Powten --
+    ------------------
+ 
+    function Large_Powten (Exp : Natural) return Double_T is
+       Powten : constant array (0 .. Maxpow) of Double_T;
+       pragma Import (Ada, Powten);
+       for Powten'Address use Powten_Address;
+ 
+       R : Double_T;
+       E : Natural;
+ 
+    begin
+       pragma Assert (Exp > Maxpow);
+ 
+       R := Powten (Maxpow);
+       E := Exp - Maxpow;
+ 
+       while E > Maxpow loop
+          R := R * Powten (Maxpow);
+          E := E - Maxpow;
+       end loop;
+ 
+       R := R * Powten (E);
+ 
+       return R;
+    end Large_Powten;
+ 
     ---------------
     -- Scan_Real --
     ---------------
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valrea.ads gcc-12.1.0/gcc/ada/libgnat/s-valrea.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valrea.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valrea.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** generic
*** 36,47 ****
  
     type Num is digits <>;
  
-    type Uns is mod <>;
- 
     Maxpow : Positive;
  
     Powten_Address : System.Address;
  
  package System.Val_Real is
     pragma Preelaborate;
  
--- 36,47 ----
  
     type Num is digits <>;
  
     Maxpow : Positive;
  
     Powten_Address : System.Address;
  
+    type Uns is mod <>;
+ 
  package System.Val_Real is
     pragma Preelaborate;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valued.adb gcc-12.1.0/gcc/ada/libgnat/s-valued.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valued.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valued.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
*************** package body System.Value_D is
*** 186,192 ****
  
              elsif S > 0 then
                 declare
!                   LS  : Integer := S;
  
                 begin
                    Y := Safe_Expont (B, LS, 10 ** Integer'Max (0, Scale));
--- 186,192 ----
  
              elsif S > 0 then
                 declare
!                   LS : Integer := S;
  
                 begin
                    Y := Safe_Expont (B, LS, 10 ** Integer'Max (0, Scale));
*************** package body System.Value_D is
*** 232,238 ****
        Base   : Unsigned;
        ScaleB : Integer;
        Extra  : Unsigned;
-       pragma Unreferenced (Extra);
        Minus  : Boolean;
        Val    : Uns;
  
--- 232,237 ----
*************** package body System.Value_D is
*** 250,256 ****
        Base   : Unsigned;
        ScaleB : Integer;
        Extra  : Unsigned;
-       pragma Unreferenced (Extra);
        Minus  : Boolean;
        Val    : Uns;
  
--- 249,254 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valued.ads gcc-12.1.0/gcc/ada/libgnat/s-valued.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valued.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valued.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valuef.adb gcc-12.1.0/gcc/ada/libgnat/s-valuef.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valuef.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valuef.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
*************** package body System.Value_F is
*** 255,261 ****
  
        elsif ScaleB > 0 then
           declare
!             LS  : Integer := ScaleB;
  
           begin
              Y := Safe_Expont (B, LS, Den);
--- 255,261 ----
  
        elsif ScaleB > 0 then
           declare
!             LS : Integer := ScaleB;
  
           begin
              Y := Safe_Expont (B, LS, Den);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valuef.ads gcc-12.1.0/gcc/ada/libgnat/s-valuef.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valuef.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valuef.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valuei.adb gcc-12.1.0/gcc/ada/libgnat/s-valuei.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valuei.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valuei.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body System.Value_I is
*** 37,46 ****
     -- Scan_Integer --
     ------------------
  
!    function Scan_Integer
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Int
     is
        Uval : Uns;
        --  Unsigned result
--- 37,47 ----
     -- Scan_Integer --
     ------------------
  
!    procedure Scan_Integer
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Int)
     is
        Uval : Uns;
        --  Unsigned result
*************** package body System.Value_I is
*** 59,71 ****
           Bad_Value (Str);
        end if;
  
!       Uval := Scan_Raw_Unsigned (Str, Ptr, Max);
  
        --  Deal with overflow cases, and also with largest negative number
  
        if Uval > Uns (Int'Last) then
           if Minus and then Uval = Uns (-(Int'First)) then
!             return Int'First;
           else
              Bad_Value (Str);
           end if;
--- 60,72 ----
           Bad_Value (Str);
        end if;
  
!       Scan_Raw_Unsigned (Str, Ptr, Max, Uval);
  
        --  Deal with overflow cases, and also with largest negative number
  
        if Uval > Uns (Int'Last) then
           if Minus and then Uval = Uns (-(Int'First)) then
!             Res := Int'First;
           else
              Bad_Value (Str);
           end if;
*************** package body System.Value_I is
*** 73,84 ****
        --  Negative values
  
        elsif Minus then
!          return -(Int (Uval));
  
        --  Positive values
  
        else
!          return Int (Uval);
        end if;
     end Scan_Integer;
  
--- 74,85 ----
        --  Negative values
  
        elsif Minus then
!          Res := -(Int (Uval));
  
        --  Positive values
  
        else
!          Res := Int (Uval);
        end if;
     end Scan_Integer;
  
*************** package body System.Value_I is
*** 106,112 ****
              V : Int;
              P : aliased Integer := Str'First;
           begin
!             V := Scan_Integer (Str, P'Access, Str'Last);
              Scan_Trailing_Blanks (Str, P);
              return V;
           end;
--- 107,113 ----
              V : Int;
              P : aliased Integer := Str'First;
           begin
!             Scan_Integer (Str, P'Access, Str'Last, V);
              Scan_Trailing_Blanks (Str, P);
              return V;
           end;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valuei.ads gcc-12.1.0/gcc/ada/libgnat/s-valuei.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valuei.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valuei.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** generic
*** 38,56 ****
  
     type Uns is mod <>;
  
!    with function Scan_Raw_Unsigned
            (Str : String;
             Ptr : not null access Integer;
!            Max : Integer) return Uns;
  
  package System.Value_I is
     pragma Preelaborate;
  
!    function Scan_Integer
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Int;
!    --  This function scans the string starting at Str (Ptr.all) for a valid
     --  integer according to the syntax described in (RM 3.5(43)). The substring
     --  scanned extends no further than Str (Max). There are three cases for the
     --  return:
--- 38,58 ----
  
     type Uns is mod <>;
  
!    with procedure Scan_Raw_Unsigned
            (Str : String;
             Ptr : not null access Integer;
!            Max : Integer;
!            Res : out Uns);
  
  package System.Value_I is
     pragma Preelaborate;
  
!    procedure Scan_Integer
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Int);
!    --  This procedure scans the string starting at Str (Ptr.all) for a valid
     --  integer according to the syntax described in (RM 3.5(43)). The substring
     --  scanned extends no further than Str (Max). There are three cases for the
     --  return:
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valuen.adb gcc-12.1.0/gcc/ada/libgnat/s-valuen.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valuen.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-valuen.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,155 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                       S Y S T E M . V A L U E _ N                        --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --             Copyright (C) 2021-2022, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Ada.Unchecked_Conversion;
+ 
+ with System.Val_Util; use System.Val_Util;
+ 
+ package body System.Value_N is
+ 
+    function Value_Enumeration_Pos
+      (Names   : String;
+       Indexes : System.Address;
+       Hash    : Hash_Function_Ptr;
+       Num     : Natural;
+       Str     : String)
+       return    Integer with Pure_Function;
+    --  Same as Value_Enumeration, except returns negative if Value_Enumeration
+    --  would raise Constraint_Error.
+ 
+    ---------------------------
+    -- Value_Enumeration_Pos --
+    ---------------------------
+ 
+    function Value_Enumeration_Pos
+      (Names   : String;
+       Indexes : System.Address;
+       Hash    : Hash_Function_Ptr;
+       Num     : Natural;
+       Str     : String)
+       return    Integer
+    is
+       F, L : Integer;
+       H  : Natural;
+       S  : String (Str'Range) := Str;
+ 
+       subtype Names_Index is
+         Index_Type range Index_Type (Names'First)
+                           .. Index_Type (Names'Last) + 1;
+       subtype Index is Natural range Natural'First .. Names'Length;
+       type Index_Table is array (Index) of Names_Index;
+       type Index_Table_Ptr is access Index_Table;
+ 
+       function To_Index_Table_Ptr is
+         new Ada.Unchecked_Conversion (System.Address, Index_Table_Ptr);
+ 
+       IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
+ 
+       pragma Assert (Num + 1 in IndexesT'Range);
+ 
+    begin
+       Normalize_String (S, F, L);
+ 
+       declare
+          Normal : String renames S (F .. L);
+ 
+       begin
+          --  If we have a valid hash value, do a single lookup
+ 
+          H := (if Hash /= null then Hash.all (Normal) else Natural'Last);
+ 
+          if H /= Natural'Last then
+             if Names
+               (Natural (IndexesT (H)) ..
+                Natural (IndexesT (H + 1)) - 1) = Normal
+             then
+                return H;
+             end if;
+ 
+          --  Otherwise do a linear search
+ 
+          else
+             for J in 0 .. Num loop
+                if Names
+                  (Natural (IndexesT (J)) ..
+                   Natural (IndexesT (J + 1)) - 1) = Normal
+                then
+                   return J;
+                end if;
+             end loop;
+          end if;
+       end;
+ 
+       return -1;
+    end Value_Enumeration_Pos;
+ 
+    -----------------------------
+    -- Valid_Value_Enumeration --
+    -----------------------------
+ 
+    function Valid_Value_Enumeration
+      (Names   : String;
+       Indexes : System.Address;
+       Hash    : Hash_Function_Ptr;
+       Num     : Natural;
+       Str     : String)
+       return    Boolean
+    is
+    begin
+       return Value_Enumeration_Pos (Names, Indexes, Hash, Num, Str) >= 0;
+    end Valid_Value_Enumeration;
+ 
+    -----------------------
+    -- Value_Enumeration --
+    -----------------------
+ 
+    function Value_Enumeration
+      (Names   : String;
+       Indexes : System.Address;
+       Hash    : Hash_Function_Ptr;
+       Num     : Natural;
+       Str     : String)
+       return    Natural
+    is
+       Result : constant Integer :=
+         Value_Enumeration_Pos (Names, Indexes, Hash, Num, Str);
+ 
+    begin
+       --  The comparison eliminates the need for a range check on return
+ 
+       if Result < 0 then
+          Bad_Value (Str);
+       else
+          return Result;
+       end if;
+    end Value_Enumeration;
+ 
+ end System.Value_N;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valuen.ads gcc-12.1.0/gcc/ada/libgnat/s-valuen.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valuen.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/libgnat/s-valuen.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,82 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                       S Y S T E M . V A L U E _ N                        --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --             Copyright (C) 2021-2022, Free Software Foundation, Inc.      --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This package is used to compute the Value attribute for enumeration types
+ --  other than those in packages Standard and System. See unit Exp_Imgv for
+ --  details of the format of constructed image tables.
+ 
+ generic
+ 
+    type Index_Type is range <>;
+ 
+ package System.Value_N is
+    pragma Preelaborate;
+ 
+    type Hash_Function_Ptr is access function (S : String) return Natural;
+ 
+    function Value_Enumeration
+      (Names   : String;
+       Indexes : System.Address;
+       Hash    : Hash_Function_Ptr;
+       Num     : Natural;
+       Str     : String)
+       return    Natural with Inline;
+    --  Used to compute Enum'Value (Str) where Enum is some enumeration type
+    --  other than those defined in package Standard. Names is a string with
+    --  a lower bound of 1 containing the characters of all the enumeration
+    --  literals concatenated together in sequence. Indexes is the address
+    --  of an array of type array (0 .. N) of Index_Type, where N is the
+    --  number of enumeration literals in the type. The Indexes values are
+    --  the starting subscript of each enumeration literal, indexed by Pos
+    --  values, with an extra entry at the end containing Names'Length + 1.
+    --  The parameter Hash is a (perfect) hash function for Names and Indexes.
+    --  The parameter Num is the value N - 1 (i.e. Enum'Pos (Enum'Last)).
+    --  The reason that Indexes is passed by address is that the actual type
+    --  is created on the fly by the expander.
+    --
+    --  Str is the argument of the attribute function, and may have leading
+    --  and trailing spaces, and letters can be upper or lower case or mixed.
+    --  If the image is found in Names, then the corresponding Pos value is
+    --  returned. If not, Constraint_Error is raised.
+ 
+    function Valid_Value_Enumeration
+      (Names   : String;
+       Indexes : System.Address;
+       Hash    : Hash_Function_Ptr;
+       Num     : Natural;
+       Str     : String)
+       return    Boolean with Inline;
+    --  Returns True if Str is a valid Image of some enumeration literal, False
+    --  otherwise. That is, returns False if and only if Value_Enumeration would
+    --  raise Constraint_Error. The parameters have the same meaning as for
+    --  Value_Enumeration.
+ 
+ end System.Value_N;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valuer.adb gcc-12.1.0/gcc/ada/libgnat/s-valuer.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valuer.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valuer.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
*************** package body System.Value_R is
*** 128,133 ****
--- 128,135 ----
        Extra : in out Char_As_Digit;
        Base  : Unsigned)
     is
+       pragma Assert (Base in 2 .. 16);
+ 
        B : constant Uns := Uns (Base);
  
     begin
*************** package body System.Value_R is
*** 259,265 ****
--- 261,271 ----
                       Scale := Scale - 1;
  
                    else
+                      Extra := 0;
                       Precision_Limit_Reached := True;
+                      if Round and then J = Trailing_Zeros then
+                         Round_Extra (Digit, Value, Scale, Extra, Base);
+                      end if;
                       exit;
                    end if;
                 end loop;
*************** package body System.Value_R is
*** 272,282 ****
  
                 Temp := Value * Uns (Base) + Uns (Digit);
  
                 --  Check if Temp is larger than Precision_Limit, taking into
                 --  account that Temp may wrap around when Precision_Limit is
                 --  equal to the largest integer.
  
!                if Value <= Umax
                   or else (Value <= UmaxB
                             and then ((Precision_Limit < Uns'Last
                                         and then Temp <= Precision_Limit)
--- 278,293 ----
  
                 Temp := Value * Uns (Base) + Uns (Digit);
  
+                --  Precision_Limit_Reached may have been set above
+ 
+                if Precision_Limit_Reached then
+                   null;
+ 
                 --  Check if Temp is larger than Precision_Limit, taking into
                 --  account that Temp may wrap around when Precision_Limit is
                 --  equal to the largest integer.
  
!                elsif Value <= Umax
                   or else (Value <= UmaxB
                             and then ((Precision_Limit < Uns'Last
                                         and then Temp <= Precision_Limit)
*************** package body System.Value_R is
*** 495,505 ****
        --  Local copy of string pointer
  
        Start : Positive;
-       pragma Unreferenced (Start);
  
        Value : Uns;
        --  Mantissa as an Integer
  
     begin
        --  The default base is 10
  
--- 506,517 ----
        --  Local copy of string pointer
  
        Start : Positive;
  
        Value : Uns;
        --  Mantissa as an Integer
  
+       Expon : Integer;
+ 
     begin
        --  The default base is 10
  
*************** package body System.Value_R is
*** 632,638 ****
        --  Update pointer and scan exponent
  
        Ptr.all := Index;
!       Scale := Scale + Scan_Exponent (Str, Ptr, Max, Real => True);
  
        --  Here is where we check for a bad based number
  
--- 644,651 ----
        --  Update pointer and scan exponent
  
        Ptr.all := Index;
!       Scan_Exponent (Str, Ptr, Max, Expon, Real => True);
!       Scale := Scale + Expon;
  
        --  Here is where we check for a bad based number
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valuer.ads gcc-12.1.0/gcc/ada/libgnat/s-valuer.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valuer.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valuer.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --            Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valueu.adb gcc-12.1.0/gcc/ada/libgnat/s-valueu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valueu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valueu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,46 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with System.Val_Util; use System.Val_Util;
- 
  package body System.Value_U is
  
     -----------------------
     -- Scan_Raw_Unsigned --
     -----------------------
  
!    function Scan_Raw_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Uns
     is
        P : Integer;
        --  Local copy of the pointer
--- 29,248 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
  package body System.Value_U is
  
+    --  Ghost code, loop invariants and assertions in this unit are meant for
+    --  analysis only, not for run-time checking, as it would be too costly
+    --  otherwise. This is enforced by setting the assertion policy to Ignore.
+ 
+    pragma Assertion_Policy (Ghost              => Ignore,
+                             Loop_Invariant     => Ignore,
+                             Assert             => Ignore,
+                             Assert_And_Cut     => Ignore,
+                             Subprogram_Variant => Ignore);
+ 
+    --  Local lemmas
+ 
+    procedure Lemma_Digit_Is_Before_Last
+      (Str  : String;
+       P    : Integer;
+       From : Integer;
+       To   : Integer)
+    with Ghost,
+      Pre  => Str'Last /= Positive'Last
+        and then From in Str'Range
+        and then To in From .. Str'Last
+        and then Str (From) in '0' .. '9' | 'a' .. 'f' | 'A' .. 'F'
+        and then P in From .. To
+        and then Str (P) in '0' .. '9' | 'a' .. 'f' | 'A' .. 'F',
+      Post => P /= Last_Hexa_Ghost (Str (From .. To)) + 1;
+    --  If the character at position P is a digit, P cannot be the position of
+    --  of the first non-digit in Str.
+ 
+    procedure Lemma_End_Of_Scan
+      (Str  : String;
+       From : Integer;
+       To   : Integer;
+       Base : Uns;
+       Acc  : Uns)
+    with Ghost,
+      Pre  => Str'Last /= Positive'Last and then From > To,
+      Post => Scan_Based_Number_Ghost (Str, From, To, Base, Acc) =
+        (False, Acc);
+    --  Unfold the definition of Scan_Based_Number_Ghost on an empty string
+ 
+    procedure Lemma_Scan_Digit
+      (Str          : String;
+       P            : Integer;
+       Lst          : Integer;
+       Digit        : Uns;
+       Base         : Uns;
+       Old_Acc      : Uns;
+       Acc          : Uns;
+       Scan_Val     : Uns_Option;
+       Old_Overflow : Boolean;
+       Overflow     : Boolean)
+    with Ghost,
+      Pre  => Str'Last /= Positive'Last
+        and then Lst in Str'Range
+        and then P in Str'First .. Lst
+        and then Str (P) in '0' .. '9' | 'a' .. 'f' | 'A' .. 'F'
+        and then Digit = Hexa_To_Unsigned_Ghost (Str (P))
+        and then Only_Hexa_Ghost (Str, P, Lst)
+        and then Base in 2 .. 16
+        and then (if Digit < Base and then Old_Acc <= Uns'Last / Base
+                  then Acc = Base * Old_Acc + Digit)
+        and then (if Digit >= Base
+                    or else Old_Acc > Uns'Last / Base
+                    or else (Old_Acc > (Uns'Last - Base + 1) / Base
+                             and then Acc < Uns'Last / Base)
+                  then Overflow
+                  else Overflow = Old_Overflow)
+        and then
+          (if not Old_Overflow then
+            Scan_Val = Scan_Based_Number_Ghost
+               (Str, P, Lst, Base, Old_Acc)),
+      Post =>
+         (if not Overflow then
+            Scan_Val = Scan_Based_Number_Ghost
+              (Str, P + 1, Lst, Base, Acc))
+        and then
+         (if Overflow then Old_Overflow or else Scan_Val.Overflow);
+    --  Unfold the definition of Scan_Based_Number_Ghost when the string starts
+    --  with a digit.
+ 
+    procedure Lemma_Scan_Underscore
+      (Str      : String;
+       P        : Integer;
+       From     : Integer;
+       To       : Integer;
+       Lst      : Integer;
+       Base     : Uns;
+       Acc      : Uns;
+       Scan_Val : Uns_Option;
+       Overflow : Boolean;
+       Ext      : Boolean)
+    with Ghost,
+      Pre  => Str'Last /= Positive'Last
+        and then From in Str'Range
+        and then To in From .. Str'Last
+        and then Lst <= To
+        and then P in From .. Lst + 1
+        and then P <= To
+        and then
+          (if Ext then
+             Is_Based_Format_Ghost (Str (From .. To))
+             and then Lst = Last_Hexa_Ghost (Str (From .. To))
+           else Is_Natural_Format_Ghost (Str (From .. To))
+             and then Lst = Last_Number_Ghost (Str (From .. To)))
+        and then Str (P) = '_'
+        and then
+          (if not Overflow then
+            Scan_Val = Scan_Based_Number_Ghost (Str, P, Lst, Base, Acc)),
+      Post => P + 1 <= Lst
+        and then
+          (if Ext then Str (P + 1) in '0' .. '9' | 'a' .. 'f' | 'A' .. 'F'
+           else Str (P + 1) in '0' .. '9')
+        and then
+          (if not Overflow then
+            Scan_Val = Scan_Based_Number_Ghost (Str, P + 1, Lst, Base, Acc));
+    --  Unfold the definition of Scan_Based_Number_Ghost when the string starts
+    --  with an underscore.
+ 
+    -----------------------------
+    -- Local lemma null bodies --
+    -----------------------------
+ 
+    procedure Lemma_Digit_Is_Before_Last
+      (Str  : String;
+       P    : Integer;
+       From : Integer;
+       To   : Integer)
+    is null;
+ 
+    procedure Lemma_End_Of_Scan
+      (Str          : String;
+       From         : Integer;
+       To           : Integer;
+       Base         : Uns;
+       Acc          : Uns)
+    is null;
+ 
+    procedure Lemma_Scan_Underscore
+      (Str      : String;
+       P        : Integer;
+       From     : Integer;
+       To       : Integer;
+       Lst      : Integer;
+       Base     : Uns;
+       Acc      : Uns;
+       Scan_Val : Uns_Option;
+       Overflow : Boolean;
+       Ext      : Boolean)
+    is null;
+ 
+    ---------------------
+    -- Last_Hexa_Ghost --
+    ---------------------
+ 
+    function Last_Hexa_Ghost (Str : String) return Positive is
+    begin
+       for J in Str'Range loop
+          if Str (J) not in '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' | '_' then
+             return J - 1;
+          end if;
+ 
+          pragma Loop_Invariant
+            (for all K in Str'First .. J =>
+               Str (K) in '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' | '_');
+       end loop;
+ 
+       return Str'Last;
+    end Last_Hexa_Ghost;
+ 
+    ----------------------
+    -- Lemma_Scan_Digit --
+    ----------------------
+ 
+    procedure Lemma_Scan_Digit
+      (Str          : String;
+       P            : Integer;
+       Lst          : Integer;
+       Digit        : Uns;
+       Base         : Uns;
+       Old_Acc      : Uns;
+       Acc          : Uns;
+       Scan_Val     : Uns_Option;
+       Old_Overflow : Boolean;
+       Overflow     : Boolean)
+    is
+       pragma Unreferenced (Str, P, Lst, Scan_Val, Overflow, Old_Overflow);
+    begin
+       if Digit >= Base then
+          null;
+ 
+       elsif Old_Acc <= (Uns'Last - Base + 1) / Base then
+          pragma Assert (not Scan_Overflows_Ghost (Digit, Base, Old_Acc));
+ 
+       elsif Old_Acc > Uns'Last / Base then
+          null;
+ 
+       else
+          pragma Assert
+            ((Acc < Uns'Last / Base) =
+               Scan_Overflows_Ghost (Digit, Base, Old_Acc));
+       end if;
+    end Lemma_Scan_Digit;
+ 
     -----------------------
     -- Scan_Raw_Unsigned --
     -----------------------
  
!    procedure Scan_Raw_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Uns)
     is
        P : Integer;
        --  Local copy of the pointer
*************** package body System.Value_U is
*** 63,68 ****
--- 265,304 ----
        Digit : Uns;
        --  Digit value
  
+       Ptr_Old       : constant Integer := Ptr.all
+       with Ghost;
+       Last_Num_Init : constant Integer :=
+         Last_Number_Ghost (Str (Ptr.all .. Max))
+       with Ghost;
+       Init_Val      : constant Uns_Option :=
+         Scan_Based_Number_Ghost (Str, Ptr.all, Last_Num_Init)
+       with Ghost;
+       Starts_As_Based : constant Boolean :=
+         Last_Num_Init < Max - 1
+         and then Str (Last_Num_Init + 1) in '#' | ':'
+         and then Str (Last_Num_Init + 2) in
+         '0' .. '9' | 'a' .. 'f' | 'A' .. 'F'
+       with Ghost;
+       Last_Num_Based  : constant Integer :=
+         (if Starts_As_Based
+          then Last_Hexa_Ghost (Str (Last_Num_Init + 2 .. Max))
+          else Last_Num_Init)
+       with Ghost;
+       Is_Based        : constant Boolean :=
+         Starts_As_Based
+         and then Last_Num_Based < Max
+         and then Str (Last_Num_Based + 1) = Str (Last_Num_Init + 1)
+       with Ghost;
+       Based_Val       : constant Uns_Option :=
+         (if Starts_As_Based and then not Init_Val.Overflow
+          then Scan_Based_Number_Ghost
+            (Str, Last_Num_Init + 2, Last_Num_Based, Init_Val.Value)
+          else Init_Val)
+       with Ghost;
+       First_Exp       : constant Integer :=
+         (if Is_Based then Last_Num_Based + 2 else Last_Num_Init + 1)
+       with Ghost;
+ 
     begin
        --  We do not tolerate strings with Str'Last = Positive'Last
  
*************** package body System.Value_U is
*** 85,93 ****
--- 321,340 ----
           Umax10 : constant Uns := Uns'Last / 10;
           --  Numbers bigger than Umax10 overflow if multiplied by 10
  
+          Old_Uval     : Uns with Ghost;
+          Old_Overflow : Boolean with Ghost;
+ 
        begin
           --  Loop through decimal digits
           loop
+             pragma Loop_Invariant (P in P'Loop_Entry .. Last_Num_Init + 1);
+             pragma Loop_Invariant
+               (if Overflow then Init_Val.Overflow);
+             pragma Loop_Invariant
+               (if not Overflow
+                then Init_Val = Scan_Based_Number_Ghost
+                  (Str, P, Last_Num_Init, Acc => Uval));
+ 
              exit when P > Max;
  
              Digit := Character'Pos (Str (P)) - Character'Pos ('0');
*************** package body System.Value_U is
*** 96,101 ****
--- 343,351 ----
  
              if Digit > 9 then
                 if Str (P) = '_' then
+                   Lemma_Scan_Underscore
+                     (Str, P, Ptr_Old, Max, Last_Num_Init, 10, Uval,
+                      Init_Val, Overflow, False);
                    Scan_Underscore (Str, P, Ptr, Max, False);
                 else
                    exit;
*************** package body System.Value_U is
*** 104,109 ****
--- 354,362 ----
              --  Accumulate result, checking for overflow
  
              else
+                Old_Uval := Uval;
+                Old_Overflow := Overflow;
+ 
                 if Uval <= Umax then
                    Uval := 10 * Uval + Digit;
  
*************** package body System.Value_U is
*** 118,128 ****
--- 371,392 ----
                    end if;
                 end if;
  
+                Lemma_Scan_Digit
+                  (Str, P, Last_Num_Init, Digit, 10, Old_Uval, Uval, Init_Val,
+                   Old_Overflow, Overflow);
+ 
                 P := P + 1;
              end if;
           end loop;
+          pragma Assert (P = Last_Num_Init + 1);
+          pragma Assert (Init_Val.Overflow = Overflow);
        end;
  
+       pragma Assert_And_Cut
+         (P = Last_Num_Init + 1
+          and then Overflow = Init_Val.Overflow
+          and then (if not Overflow then Init_Val.Value = Uval));
+ 
        Ptr.all := P;
  
        --  Deal with based case. We recognize either the standard '#' or the
*************** package body System.Value_U is
*** 153,162 ****
--- 417,434 ----
              UmaxB : constant Uns := Uns'Last / Base;
              --  Numbers bigger than UmaxB overflow if multiplied by base
  
+             Old_Uval     : Uns with Ghost;
+             Old_Overflow : Boolean with Ghost;
+ 
           begin
+             pragma Assert
+               (if Str (P) in '0' .. '9' | 'A' .. 'F' | 'a' .. 'f'
+                then Is_Based_Format_Ghost (Str (P .. Max)));
+ 
              --  Loop to scan out based integer value
  
              loop
+ 
                 --  We require a digit at this stage
  
                 if Str (P) in '0' .. '9' then
*************** package body System.Value_U is
*** 177,185 ****
--- 449,480 ----
  
                 else
                    Uval := Base;
+                   Base := 10;
+                   pragma Assert (Ptr.all = Last_Num_Init + 1);
+                   pragma Assert (if not Overflow then Uval = Init_Val.Value);
                    exit;
                 end if;
  
+                Lemma_Digit_Is_Before_Last (Str, P, Last_Num_Init + 2, Max);
+ 
+                pragma Loop_Invariant (P in P'Loop_Entry .. Last_Num_Based);
+                pragma Loop_Invariant
+                  (Str (P) in '0' .. '9' | 'a' .. 'f' | 'A' .. 'F'
+                   and then Digit = Hexa_To_Unsigned_Ghost (Str (P)));
+                pragma Loop_Invariant
+                  (if Overflow'Loop_Entry then Overflow);
+                pragma Loop_Invariant
+                  (if Overflow then
+                     Overflow'Loop_Entry or else Based_Val.Overflow);
+                pragma Loop_Invariant
+                  (if not Overflow
+                   then Based_Val = Scan_Based_Number_Ghost
+                     (Str, P, Last_Num_Based, Base, Uval));
+                pragma Loop_Invariant (Ptr.all = Last_Num_Init + 1);
+ 
+                Old_Uval := Uval;
+                Old_Overflow := Overflow;
+ 
                 --  If digit is too large, just signal overflow and continue.
                 --  The idea here is to keep scanning as long as the input is
                 --  syntactically valid, even if we have detected overflow
*************** package body System.Value_U is
*** 203,208 ****
--- 498,507 ----
                    end if;
                 end if;
  
+                Lemma_Scan_Digit
+                  (Str, P, Last_Num_Based, Digit, Base, Old_Uval, Uval,
+                   Based_Val, Old_Overflow, Overflow);
+ 
                 --  If at end of string with no base char, not a based number
                 --  but we signal Constraint_Error and set the pointer past
                 --  the end of the field, since this is what the ACVC tests
*************** package body System.Value_U is
*** 219,240 ****
  
                 if Str (P) = Base_Char then
                    Ptr.all := P + 1;
                    exit;
  
                 --  Deal with underscore
  
                 elsif Str (P) = '_' then
                    Scan_Underscore (Str, P, Ptr, Max, True);
                 end if;
- 
              end loop;
           end;
        end if;
  
        --  Come here with scanned unsigned value in Uval. The only remaining
        --  required step is to deal with exponent if one is present.
  
!       Expon := Scan_Exponent (Str, Ptr, Max);
  
        if Expon /= 0 and then Uval /= 0 then
  
--- 518,578 ----
  
                 if Str (P) = Base_Char then
                    Ptr.all := P + 1;
+                   pragma Assert (Ptr.all = Last_Num_Based + 2);
+                   Lemma_End_Of_Scan (Str, P, Last_Num_Based, Base, Uval);
+                   pragma Assert (if not Overflow then Uval = Based_Val.Value);
                    exit;
  
                 --  Deal with underscore
  
                 elsif Str (P) = '_' then
+                   Lemma_Scan_Underscore
+                     (Str, P, Last_Num_Init + 2, Max, Last_Num_Based, Base,
+                      Uval, Based_Val, Overflow, True);
                    Scan_Underscore (Str, P, Ptr, Max, True);
+                   pragma Assert
+                     (if not Overflow
+                      then Based_Val = Scan_Based_Number_Ghost
+                        (Str, P, Last_Num_Based, Base, Uval));
                 end if;
              end loop;
           end;
+          pragma Assert
+            (if Starts_As_Based then P = Last_Num_Based + 1
+             else P = Last_Num_Init + 2);
+          pragma Assert
+            (Overflow =
+               (Init_Val.Overflow
+                or else Init_Val.Value not in 2 .. 16
+                or else (Starts_As_Based and then Based_Val.Overflow)));
        end if;
  
+       pragma Assert_And_Cut
+         (Overflow =
+            (Init_Val.Overflow
+             or else
+               (Last_Num_Init < Max - 1
+                and then Str (Last_Num_Init + 1) in '#' | ':'
+                and then Init_Val.Value not in 2 .. 16)
+             or else (Starts_As_Based and then Based_Val.Overflow))
+          and then
+            (if not Overflow then
+                 (if Is_Based then Uval = Based_Val.Value
+                  else Uval = Init_Val.Value))
+          and then Ptr.all = First_Exp
+          and then Base in 2 .. 16
+          and then
+            (if not Overflow then
+                 (if Is_Based then Base = Init_Val.Value else Base = 10)));
+ 
        --  Come here with scanned unsigned value in Uval. The only remaining
        --  required step is to deal with exponent if one is present.
  
!       Scan_Exponent (Str, Ptr, Max, Expon);
! 
!       pragma Assert
!         (if Starts_As_Exponent_Format_Ghost (Str (First_Exp .. Max))
!          then Expon = Scan_Exponent_Ghost (Str (First_Exp .. Max)));
  
        if Expon /= 0 and then Uval /= 0 then
  
*************** package body System.Value_U is
*** 246,253 ****
--- 584,607 ----
              UmaxB : constant Uns := Uns'Last / Base;
              --  Numbers bigger than UmaxB overflow if multiplied by base
  
+             Res_Val : constant Uns_Option :=
+               Exponent_Unsigned_Ghost (Uval, Expon, Base)
+             with Ghost;
           begin
              for J in 1 .. Expon loop
+                pragma Loop_Invariant
+                  (if Overflow'Loop_Entry then Overflow);
+                pragma Loop_Invariant
+                  (if Overflow
+                   then Overflow'Loop_Entry or else Res_Val.Overflow);
+                pragma Loop_Invariant
+                  (if not Overflow
+                   then Res_Val = Exponent_Unsigned_Ghost
+                     (Uval, Expon - J + 1, Base));
+ 
+                pragma Assert
+                  ((Uval > UmaxB) = Scan_Overflows_Ghost (0, Base, Uval));
+ 
                 if Uval > UmaxB then
                    Overflow := True;
                    exit;
*************** package body System.Value_U is
*** 255,269 ****
  
                 Uval := Uval * Base;
              end loop;
           end;
        end if;
  
!       --  Return result, dealing with sign and overflow
  
        if Overflow then
           Bad_Value (Str);
        else
!          return Uval;
        end if;
     end Scan_Raw_Unsigned;
  
--- 609,653 ----
  
                 Uval := Uval * Base;
              end loop;
+             pragma Assert
+               (Overflow = (Init_Val.Overflow
+                or else
+                  (Last_Num_Init < Max - 1
+                   and then Str (Last_Num_Init + 1) in '#' | ':'
+                   and then Init_Val.Value not in 2 .. 16)
+                or else (Starts_As_Based and then Based_Val.Overflow)
+                or else Res_Val.Overflow));
+             pragma Assert
+               (Overflow = Raw_Unsigned_Overflows_Ghost (Str, Ptr_Old, Max));
+             pragma Assert
+               (Exponent_Unsigned_Ghost (Uval, 0, Base) = (False, Uval));
+             pragma Assert
+               (if not Overflow then Uval = Res_Val.Value);
+             pragma Assert
+               (if not Overflow then
+                   Uval = Scan_Raw_Unsigned_Ghost (Str, Ptr_Old, Max));
           end;
        end if;
+       pragma Assert
+         (if Expon = 0 or else Uval = 0 then
+             Exponent_Unsigned_Ghost (Uval, Expon, Base) = (False, Uval));
+       pragma Assert
+         (Overflow = Raw_Unsigned_Overflows_Ghost (Str, Ptr_Old, Max));
+       pragma Assert
+         (if not Overflow then
+             Uval = Scan_Raw_Unsigned_Ghost (Str, Ptr_Old, Max));
  
!       --  Return result, dealing with overflow
  
        if Overflow then
           Bad_Value (Str);
+          pragma Annotate
+            (GNATprove, Intentional,
+             "call to nonreturning subprogram might be executed",
+             "it is expected that Constraint_Error is raised in case of"
+             & " overflow");
        else
!          Res := Uval;
        end if;
     end Scan_Raw_Unsigned;
  
*************** package body System.Value_U is
*** 271,293 ****
     -- Scan_Unsigned --
     -------------------
  
!    function Scan_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Uns
     is
        Start : Positive;
        --  Save location of first non-blank character
  
     begin
        Scan_Plus_Sign (Str, Ptr, Max, Start);
  
        if Str (Ptr.all) not in '0' .. '9' then
           Ptr.all := Start;
           Bad_Value (Str);
        end if;
  
!       return Scan_Raw_Unsigned (Str, Ptr, Max);
     end Scan_Unsigned;
  
     --------------------
--- 655,684 ----
     -- Scan_Unsigned --
     -------------------
  
!    procedure Scan_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Uns)
     is
        Start : Positive;
        --  Save location of first non-blank character
  
     begin
+       pragma Warnings
+         (Off,
+          """Start"" is set by ""Scan_Plus_Sign"" but not used after the call");
        Scan_Plus_Sign (Str, Ptr, Max, Start);
+       pragma Warnings
+         (On,
+          """Start"" is set by ""Scan_Plus_Sign"" but not used after the call");
  
        if Str (Ptr.all) not in '0' .. '9' then
           Ptr.all := Start;
           Bad_Value (Str);
        end if;
  
!       Scan_Raw_Unsigned (Str, Ptr, Max, Res);
     end Scan_Unsigned;
  
     --------------------
*************** package body System.Value_U is
*** 313,321 ****
           declare
              V : Uns;
              P : aliased Integer := Str'First;
           begin
!             V := Scan_Unsigned (Str, P'Access, Str'Last);
              Scan_Trailing_Blanks (Str, P);
              return V;
           end;
        end if;
--- 704,735 ----
           declare
              V : Uns;
              P : aliased Integer := Str'First;
+ 
+             Non_Blank : constant Positive := First_Non_Space_Ghost
+               (Str, Str'First, Str'Last)
+             with Ghost;
+             Fst_Num   : constant Positive :=
+               (if Str (Non_Blank) = '+' then Non_Blank + 1 else Non_Blank)
+             with Ghost;
           begin
!             pragma Assert
!               (Is_Raw_Unsigned_Format_Ghost (Str (Fst_Num .. Str'Last)));
! 
!             declare
!                P_Acc : constant not null access Integer := P'Access;
!             begin
!                Scan_Unsigned (Str, P_Acc, Str'Last, V);
!             end;
! 
!             pragma Assert
!               (P = Raw_Unsigned_Last_Ghost (Str, Fst_Num, Str'Last));
!             pragma Assert
!               (V = Scan_Raw_Unsigned_Ghost (Str, Fst_Num, Str'Last));
! 
              Scan_Trailing_Blanks (Str, P);
+ 
+             pragma Assert
+               (Is_Value_Unsigned_Ghost (Slide_If_Necessary (Str), V));
              return V;
           end;
        end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valueu.ads gcc-12.1.0/gcc/ada/libgnat/s-valueu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valueu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valueu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 32,37 ****
--- 32,53 ----
  --  This package contains routines for scanning modular Unsigned
  --  values for use in Text_IO.Modular_IO, and the Value attribute.
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre                => Ignore,
+                          Post               => Ignore,
+                          Contract_Cases     => Ignore,
+                          Ghost              => Ignore,
+                          Subprogram_Variant => Ignore);
+ pragma Warnings (Off, "postcondition does not mention function result");
+ --  True postconditions are used to avoid inlining for GNATprove
+ 
+ with System.Val_Util; use System.Val_Util;
+ 
  generic
  
     type Uns is mod <>;
*************** generic
*** 39,48 ****
  package System.Value_U is
     pragma Preelaborate;
  
!    function Scan_Raw_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Uns;
     --  This function scans the string starting at Str (Ptr.all) for a valid
     --  integer according to the syntax described in (RM 3.5(43)). The substring
     --  scanned extends no further than Str (Max).  Note: this does not scan
--- 55,368 ----
  package System.Value_U is
     pragma Preelaborate;
  
!    type Uns_Option (Overflow : Boolean := False) is record
!       case Overflow is
!          when True =>
!             null;
!          when False =>
!             Value : Uns := 0;
!       end case;
!    end record with Ghost;
! 
!    function Only_Hexa_Ghost (Str : String; From, To : Integer) return Boolean
!    is
!       (for all J in From .. To =>
!           Str (J) in '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' | '_')
!    with
!      Ghost,
!      Pre => From > To or else (From >= Str'First and then To <= Str'Last);
!    --  Ghost function that returns True if S has only hexadecimal characters
!    --  from index From to index To.
! 
!    function Last_Hexa_Ghost (Str : String) return Positive
!    with
!      Ghost,
!      Pre  => Str /= ""
!        and then Str (Str'First) in '0' .. '9' | 'a' .. 'f' | 'A' .. 'F',
!      Post => Last_Hexa_Ghost'Result in Str'Range
!        and then (if Last_Hexa_Ghost'Result < Str'Last then
!                    Str (Last_Hexa_Ghost'Result + 1) not in
!                      '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' | '_')
!        and then Only_Hexa_Ghost (Str, Str'First, Last_Hexa_Ghost'Result);
!    --  Ghost function that returns the index of the last character in S that
!    --  is either an hexadecimal digit or an underscore, which necessarily
!    --  exists given the precondition on Str.
! 
!    function Is_Based_Format_Ghost (Str : String) return Boolean
!    is
!      (Str /= ""
!         and then Str (Str'First) in '0' .. '9' | 'a' .. 'f' | 'A' .. 'F'
!         and then
!         (declare
!            L : constant Positive := Last_Hexa_Ghost (Str);
!          begin
!            Str (L) /= '_'
!              and then (for all J in Str'First .. L =>
!                          (if Str (J) = '_' then Str (J + 1) /= '_'))))
!    with
!      Ghost;
!    --  Ghost function that determines if Str has the correct format for a
!    --  based number, consisting in a sequence of hexadecimal digits possibly
!    --  separated by single underscores. It may be followed by other characters.
! 
!    function Hexa_To_Unsigned_Ghost (X : Character) return Uns is
!      (case X is
!          when '0' .. '9' => Character'Pos (X) - Character'Pos ('0'),
!          when 'a' .. 'f' => Character'Pos (X) - Character'Pos ('a') + 10,
!          when 'A' .. 'F' => Character'Pos (X) - Character'Pos ('A') + 10,
!          when others     => raise Program_Error)
!    with
!      Ghost,
!      Pre => X in '0' .. '9' | 'a' .. 'f' | 'A' .. 'F';
!    --  Ghost function that computes the value corresponding to an hexadecimal
!    --  digit.
! 
!    function Scan_Overflows_Ghost
!      (Digit : Uns;
!       Base  : Uns;
!       Acc   : Uns) return Boolean
!    is
!      (Digit >= Base
!       or else Acc > Uns'Last / Base
!       or else Uns'Last - Digit < Base * Acc)
!    with Ghost;
!    --  Ghost function which returns True if Digit + Base * Acc overflows or
!    --  Digit is greater than Base, as this is used by the algorithm for the
!    --  test of overflow.
! 
!    function Scan_Based_Number_Ghost
!      (Str      : String;
!       From, To : Integer;
!       Base     : Uns := 10;
!       Acc      : Uns := 0) return Uns_Option
!    with
!      Ghost,
!      Subprogram_Variant => (Increases => From),
!      Pre  => Str'Last /= Positive'Last
!          and then
!            (From > To or else (From >= Str'First and then To <= Str'Last))
!          and then Only_Hexa_Ghost (Str, From, To);
!    --  Ghost function that recursively computes the based number in Str,
!    --  assuming Acc has been scanned already and scanning continues at index
!    --  From.
! 
!    function Exponent_Unsigned_Ghost
!      (Value : Uns;
!       Exp   : Natural;
!       Base  : Uns := 10) return Uns_Option
!    with
!      Ghost,
!      Subprogram_Variant => (Decreases => Exp);
!    --  Ghost function that recursively computes Value * Base ** Exp
! 
!    function Is_Raw_Unsigned_Format_Ghost (Str : String) return Boolean is
!      (Is_Natural_Format_Ghost (Str)
!       and then
!         (declare
!            Last_Num_Init   : constant Integer := Last_Number_Ghost (Str);
!            Starts_As_Based : constant Boolean :=
!              Last_Num_Init < Str'Last - 1
!              and then Str (Last_Num_Init + 1) in '#' | ':'
!              and then Str (Last_Num_Init + 2) in
!                '0' .. '9' | 'a' .. 'f' | 'A' .. 'F';
!            Last_Num_Based  : constant Integer :=
!              (if Starts_As_Based
!               then Last_Hexa_Ghost (Str (Last_Num_Init + 2 .. Str'Last))
!               else Last_Num_Init);
!            Is_Based        : constant Boolean :=
!              Starts_As_Based
!              and then Last_Num_Based < Str'Last
!              and then Str (Last_Num_Based + 1) = Str (Last_Num_Init + 1);
!            First_Exp       : constant Integer :=
!              (if Is_Based then Last_Num_Based + 2 else Last_Num_Init + 1);
!          begin
!            (if Starts_As_Based then
!               Is_Based_Format_Ghost (Str (Last_Num_Init + 2 .. Str'Last))
!               and then Last_Num_Based < Str'Last)
!             and then Is_Opt_Exponent_Format_Ghost
!               (Str (First_Exp .. Str'Last))))
!    with
!      Ghost,
!      Pre  => Str'Last /= Positive'Last,
!      Post => True;
!    --  Ghost function that determines if Str has the correct format for an
!    --  unsigned number without a sign character.
!    --  It is a natural number in base 10, optionally followed by a based
!    --  number surrounded by delimiters # or :, optionally followed by an
!    --  exponent part.
! 
!    function Raw_Unsigned_Overflows_Ghost
!      (Str      : String;
!       From, To : Integer)
!       return Boolean
!    is
!      (declare
!         Last_Num_Init   : constant Integer :=
!           Last_Number_Ghost (Str (From .. To));
!         Init_Val        : constant Uns_Option :=
!           Scan_Based_Number_Ghost (Str, From, Last_Num_Init);
!         Starts_As_Based : constant Boolean :=
!           Last_Num_Init < To - 1
!           and then Str (Last_Num_Init + 1) in '#' | ':'
!           and then Str (Last_Num_Init + 2) in
!           '0' .. '9' | 'a' .. 'f' | 'A' .. 'F';
!         Last_Num_Based  : constant Integer :=
!           (if Starts_As_Based
!            then Last_Hexa_Ghost (Str (Last_Num_Init + 2 .. To))
!            else Last_Num_Init);
!         Is_Based        : constant Boolean :=
!           Starts_As_Based
!           and then Last_Num_Based < To
!           and then Str (Last_Num_Based + 1) = Str (Last_Num_Init + 1);
!         Based_Val       : constant Uns_Option :=
!           (if Starts_As_Based and then not Init_Val.Overflow
!            then Scan_Based_Number_Ghost
!              (Str, Last_Num_Init + 2, Last_Num_Based, Init_Val.Value)
!            else Init_Val);
!         First_Exp       : constant Integer :=
!           (if Is_Based then Last_Num_Based + 2 else Last_Num_Init + 1);
!         Expon           : constant Natural :=
!           (if Starts_As_Exponent_Format_Ghost (Str (First_Exp .. To))
!            then Scan_Exponent_Ghost (Str (First_Exp .. To))
!            else 0);
!       begin
!         Init_Val.Overflow
!         or else
!           (Last_Num_Init < To - 1
!            and then Str (Last_Num_Init + 1) in '#' | ':'
!            and then Init_Val.Value not in 2 .. 16)
!         or else
!           (Starts_As_Based
!            and then Based_Val.Overflow)
!         or else
!           (Starts_As_Exponent_Format_Ghost (Str (First_Exp .. To))
!            and then
!              (declare
!                 Base  : constant Uns :=
!                   (if Is_Based then Init_Val.Value else 10);
!                 Value : constant Uns :=
!                   (if Is_Based then Based_Val.Value else Init_Val.Value);
!               begin
!                 Exponent_Unsigned_Ghost
!                   (Value, Expon, Base).Overflow)))
!    with
!      Ghost,
!      Pre  => Str'Last /= Positive'Last
!        and then From in Str'Range
!        and then To in From .. Str'Last
!        and then Str (From) in '0' .. '9',
!      Post => True;
!    --  Ghost function that determines if the computation of the unsigned number
!    --  represented by Str will overflow. The computation overflows if either:
!    --    * The computation of the decimal part overflows,
!    --    * The decimal part is followed by a valid delimiter for a based
!    --      part, and the number corresponding to the base is not a valid base,
!    --    * The computation of the based part overflows, or
!    --    * There is an exponent and the computation of the exponentiation
!    --      overflows.
! 
!    function Scan_Raw_Unsigned_Ghost
!      (Str      : String;
!       From, To : Integer)
!       return Uns
!    is
!      (declare
!         Last_Num_Init   : constant Integer :=
!           Last_Number_Ghost (Str (From .. To));
!         Init_Val        : constant Uns_Option :=
!           Scan_Based_Number_Ghost (Str, From, Last_Num_Init);
!         Starts_As_Based : constant Boolean :=
!           Last_Num_Init < To - 1
!           and then Str (Last_Num_Init + 1) in '#' | ':'
!           and then Str (Last_Num_Init + 2) in
!           '0' .. '9' | 'a' .. 'f' | 'A' .. 'F';
!         Last_Num_Based  : constant Integer :=
!           (if Starts_As_Based
!            then Last_Hexa_Ghost (Str (Last_Num_Init + 2 .. To))
!            else Last_Num_Init);
!         Is_Based        : constant Boolean :=
!           Starts_As_Based
!           and then Last_Num_Based < To
!           and then Str (Last_Num_Based + 1) = Str (Last_Num_Init + 1);
!         Based_Val       : constant Uns_Option :=
!           (if Starts_As_Based and then not Init_Val.Overflow
!            then Scan_Based_Number_Ghost
!              (Str, Last_Num_Init + 2, Last_Num_Based, Init_Val.Value)
!            else Init_Val);
!         First_Exp       : constant Integer :=
!           (if Is_Based then Last_Num_Based + 2 else Last_Num_Init + 1);
!         Expon           : constant Natural :=
!           (if Starts_As_Exponent_Format_Ghost (Str (First_Exp .. To))
!            then Scan_Exponent_Ghost (Str (First_Exp .. To))
!            else 0);
!         Base            : constant Uns :=
!           (if Is_Based then Init_Val.Value else 10);
!         Value           : constant Uns :=
!           (if Is_Based then Based_Val.Value else Init_Val.Value);
!       begin
!         Exponent_Unsigned_Ghost (Value, Expon, Base).Value)
!    with
!      Ghost,
!      Pre  => Str'Last /= Positive'Last
!        and then From in Str'Range
!        and then To in From .. Str'Last
!        and then Str (From) in '0' .. '9'
!        and then not Raw_Unsigned_Overflows_Ghost (Str, From, To),
!      Post => True;
!    --  Ghost function that scans an unsigned number without a sign character
! 
!    function Raw_Unsigned_Last_Ghost
!      (Str      : String;
!       From, To : Integer)
!       return Positive
!    is
!      (declare
!         Last_Num_Init   : constant Integer :=
!           Last_Number_Ghost (Str (From .. To));
!         Starts_As_Based : constant Boolean :=
!           Last_Num_Init < To - 1
!           and then Str (Last_Num_Init + 1) in '#' | ':'
!           and then Str (Last_Num_Init + 2) in
!           '0' .. '9' | 'a' .. 'f' | 'A' .. 'F';
!         Last_Num_Based  : constant Integer :=
!           (if Starts_As_Based
!            then Last_Hexa_Ghost (Str (Last_Num_Init + 2 .. To))
!            else Last_Num_Init);
!         Is_Based        : constant Boolean :=
!           Starts_As_Based
!           and then Last_Num_Based < To
!           and then Str (Last_Num_Based + 1) = Str (Last_Num_Init + 1);
!         First_Exp       : constant Integer :=
!           (if Is_Based then Last_Num_Based + 2 else Last_Num_Init + 1);
!       begin
!         (if not Starts_As_Exponent_Format_Ghost (Str (First_Exp .. To))
!          then First_Exp
!          elsif Str (First_Exp + 1) in '-' | '+' then
!            Last_Number_Ghost (Str (First_Exp + 2 .. To)) + 1
!          else Last_Number_Ghost (Str (First_Exp + 1 .. To)) + 1))
!    with
!      Ghost,
!      Pre  => Str'Last /= Positive'Last
!        and then From in Str'Range
!        and then To in From .. Str'Last
!        and then Str (From) in '0' .. '9',
!      Post => Raw_Unsigned_Last_Ghost'Result in From .. To + 1;
!    --  Ghost function that returns the position of the cursor once an unsigned
!    --  number has been seen.
! 
!    procedure Scan_Raw_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Uns)
!    with Pre => Str'Last /= Positive'Last
!      and then Ptr.all in Str'Range
!      and then Max in Ptr.all .. Str'Last
!      and then Is_Raw_Unsigned_Format_Ghost (Str (Ptr.all .. Max)),
!      Post => not Raw_Unsigned_Overflows_Ghost (Str, Ptr.all'Old, Max)
!      and Res = Scan_Raw_Unsigned_Ghost (Str, Ptr.all'Old, Max)
!      and Ptr.all = Raw_Unsigned_Last_Ghost (Str, Ptr.all'Old, Max);
! 
     --  This function scans the string starting at Str (Ptr.all) for a valid
     --  integer according to the syntax described in (RM 3.5(43)). The substring
     --  scanned extends no further than Str (Max).  Note: this does not scan
*************** package System.Value_U is
*** 106,131 ****
     --  Note: if Str is empty, i.e. if Max is less than Ptr, then this is a
     --  special case of an all-blank string, and Ptr is unchanged, and hence
     --  is greater than Max as required in this case.
     --
     --  Note: this routine should not be called with Str'Last = Positive'Last.
     --  If this occurs Program_Error is raised with a message noting that this
     --  case is not supported. Most such cases are eliminated by the caller.
  
!    function Scan_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Uns;
     --  Same as Scan_Raw_Unsigned, except scans optional leading
     --  blanks, and an optional leading plus sign.
     --
     --  Note: if a minus sign is present, Constraint_Error will be raised.
     --  Note: trailing blanks are not scanned.
  
     function Value_Unsigned
!      (Str : String) return Uns;
     --  Used in computing X'Value (Str) where X is a modular integer type whose
     --  modulus does not exceed the range of System.Unsigned_Types.Unsigned. Str
     --  is the string argument of the attribute. Constraint_Error is raised if
     --  the string is malformed, or if the value is out of range.
  
  end System.Value_U;
--- 426,583 ----
     --  Note: if Str is empty, i.e. if Max is less than Ptr, then this is a
     --  special case of an all-blank string, and Ptr is unchanged, and hence
     --  is greater than Max as required in this case.
+    --  ??? This is not the case. We will read Str (Ptr.all) without checking
+    --  and increase Ptr.all by one.
     --
     --  Note: this routine should not be called with Str'Last = Positive'Last.
     --  If this occurs Program_Error is raised with a message noting that this
     --  case is not supported. Most such cases are eliminated by the caller.
  
!    procedure Scan_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Uns)
!    with Pre => Str'Last /= Positive'Last
!      and then Ptr.all in Str'Range
!      and then Max in Ptr.all .. Str'Last
!      and then not Only_Space_Ghost (Str, Ptr.all, Max)
!      and then
!        (declare
!           Non_Blank : constant Positive :=
!             First_Non_Space_Ghost (Str, Ptr.all, Max);
!           Fst_Num   : constant Positive :=
!             (if Str (Non_Blank) = '+' then Non_Blank + 1 else Non_Blank);
!         begin
!           Is_Raw_Unsigned_Format_Ghost (Str (Fst_Num .. Max))),
!      Post =>
!        (declare
!           Non_Blank : constant Positive :=
!             First_Non_Space_Ghost (Str, Ptr.all'Old, Max);
!           Fst_Num   : constant Positive :=
!             (if Str (Non_Blank) = '+' then Non_Blank + 1 else Non_Blank);
!         begin
!           not Raw_Unsigned_Overflows_Ghost (Str, Fst_Num, Max)
!           and then Res = Scan_Raw_Unsigned_Ghost (Str, Fst_Num, Max)
!           and then Ptr.all = Raw_Unsigned_Last_Ghost (Str, Fst_Num, Max));
! 
     --  Same as Scan_Raw_Unsigned, except scans optional leading
     --  blanks, and an optional leading plus sign.
     --
     --  Note: if a minus sign is present, Constraint_Error will be raised.
     --  Note: trailing blanks are not scanned.
  
+    function Slide_To_1 (Str : String) return String
+    with Ghost,
+        Post =>
+          Only_Space_Ghost (Str, Str'First, Str'Last) =
+          (for all J in Str'First .. Str'Last =>
+             Slide_To_1'Result (J - Str'First + 1) = ' ');
+    --  Slides Str so that it starts at 1
+ 
+    function Slide_If_Necessary (Str : String) return String is
+      (if Str'Last = Positive'Last then Slide_To_1 (Str) else Str)
+    with Ghost,
+        Post =>
+          Only_Space_Ghost (Str, Str'First, Str'Last) =
+          Only_Space_Ghost (Slide_If_Necessary'Result,
+                            Slide_If_Necessary'Result'First,
+                            Slide_If_Necessary'Result'Last);
+    --  If Str'Last = Positive'Last then slides Str so that it starts at 1
+ 
+    function Is_Unsigned_Ghost (Str : String) return Boolean is
+      (declare
+         Non_Blank : constant Positive := First_Non_Space_Ghost
+           (Str, Str'First, Str'Last);
+         Fst_Num   : constant Positive :=
+           (if Str (Non_Blank) = '+' then Non_Blank + 1 else Non_Blank);
+       begin
+         Is_Raw_Unsigned_Format_Ghost (Str (Fst_Num .. Str'Last))
+           and then not Raw_Unsigned_Overflows_Ghost (Str, Fst_Num, Str'Last)
+           and then Only_Space_Ghost
+              (Str, Raw_Unsigned_Last_Ghost (Str, Fst_Num, Str'Last), Str'Last))
+    with Ghost,
+        Pre => not Only_Space_Ghost (Str, Str'First, Str'Last)
+        and then Str'Last /= Positive'Last,
+        Post => True;
+    --  Ghost function that determines if Str has the correct format for an
+    --  unsigned number, consisting in some blank characters, an optional
+    --  + sign, a raw unsigned number which does not overflow and then some
+    --  more blank characters.
+ 
+    function Is_Value_Unsigned_Ghost (Str : String; Val : Uns) return Boolean is
+      (declare
+         Non_Blank : constant Positive := First_Non_Space_Ghost
+           (Str, Str'First, Str'Last);
+         Fst_Num   : constant Positive :=
+           (if Str (Non_Blank) = '+' then Non_Blank + 1 else Non_Blank);
+       begin
+         Val = Scan_Raw_Unsigned_Ghost (Str, Fst_Num, Str'Last))
+    with Ghost,
+        Pre => not Only_Space_Ghost (Str, Str'First, Str'Last)
+        and then Str'Last /= Positive'Last
+        and then Is_Unsigned_Ghost (Str),
+        Post => True;
+    --  Ghost function that returns True if Val is the value corresponding to
+    --  the unsigned number represented by Str.
+ 
     function Value_Unsigned
!      (Str : String) return Uns
!    with Pre => not Only_Space_Ghost (Str, Str'First, Str'Last)
!      and then Str'Length /= Positive'Last
!      and then Is_Unsigned_Ghost (Slide_If_Necessary (Str)),
!      Post =>
!          Is_Value_Unsigned_Ghost
!            (Slide_If_Necessary (Str), Value_Unsigned'Result),
!      Subprogram_Variant => (Decreases => Str'First);
     --  Used in computing X'Value (Str) where X is a modular integer type whose
     --  modulus does not exceed the range of System.Unsigned_Types.Unsigned. Str
     --  is the string argument of the attribute. Constraint_Error is raised if
     --  the string is malformed, or if the value is out of range.
  
+ private
+ 
+    -----------------------------
+    -- Exponent_Unsigned_Ghost --
+    -----------------------------
+ 
+    function Exponent_Unsigned_Ghost
+      (Value : Uns;
+       Exp   : Natural;
+       Base  : Uns := 10) return Uns_Option
+    is
+       (if Exp = 0 or Value = 0 then (Overflow => False, Value => Value)
+        elsif Scan_Overflows_Ghost (0, Base, Value) then (Overflow => True)
+        else Exponent_Unsigned_Ghost (Value * Base, Exp - 1, Base));
+ 
+    -----------------------------
+    -- Scan_Based_Number_Ghost --
+    -----------------------------
+ 
+    function Scan_Based_Number_Ghost
+      (Str      : String;
+       From, To : Integer;
+       Base     : Uns := 10;
+       Acc      : Uns := 0) return Uns_Option
+    is
+       (if From > To then (Overflow => False, Value => Acc)
+        elsif Str (From) = '_'
+        then Scan_Based_Number_Ghost (Str, From + 1, To, Base, Acc)
+        elsif Scan_Overflows_Ghost
+          (Hexa_To_Unsigned_Ghost (Str (From)), Base, Acc)
+        then (Overflow => True)
+        else Scan_Based_Number_Ghost
+          (Str, From + 1, To, Base,
+           Base * Acc + Hexa_To_Unsigned_Ghost (Str (From))));
+ 
+    ----------------
+    -- Slide_To_1 --
+    ----------------
+ 
+    function Slide_To_1 (Str : String) return String is
+       (declare
+          Res : constant String (1 .. Str'Length) := Str;
+        begin
+          Res);
+ 
  end System.Value_U;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valuns.adb gcc-12.1.0/gcc/ada/libgnat/s-valuns.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valuns.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valuns.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valuns.ads gcc-12.1.0/gcc/ada/libgnat/s-valuns.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valuns.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valuns.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 32,57 ****
  --  This package contains routines for scanning modular Unsigned
  --  values for use in Text_IO.Modular_IO, and the Value attribute.
  
  with System.Unsigned_Types;
  with System.Value_U;
  
! package System.Val_Uns is
     pragma Preelaborate;
  
     subtype Unsigned is Unsigned_Types.Unsigned;
  
     package Impl is new Value_U (Unsigned);
  
!    function Scan_Raw_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Unsigned
       renames Impl.Scan_Raw_Unsigned;
  
!    function Scan_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer) return Unsigned
       renames Impl.Scan_Unsigned;
  
     function Value_Unsigned
--- 32,71 ----
  --  This package contains routines for scanning modular Unsigned
  --  values for use in Text_IO.Modular_IO, and the Value attribute.
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre                => Ignore,
+                          Post               => Ignore,
+                          Contract_Cases     => Ignore,
+                          Ghost              => Ignore,
+                          Subprogram_Variant => Ignore);
+ 
  with System.Unsigned_Types;
  with System.Value_U;
  
! package System.Val_Uns with SPARK_Mode is
     pragma Preelaborate;
  
     subtype Unsigned is Unsigned_Types.Unsigned;
  
     package Impl is new Value_U (Unsigned);
  
!    procedure Scan_Raw_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Unsigned)
       renames Impl.Scan_Raw_Unsigned;
  
!    procedure Scan_Unsigned
       (Str : String;
        Ptr : not null access Integer;
!       Max : Integer;
!       Res : out Unsigned)
       renames Impl.Scan_Unsigned;
  
     function Value_Unsigned
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valuti.adb gcc-12.1.0/gcc/ada/libgnat/s-valuti.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valuti.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valuti.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,43 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  with System.Case_Util; use System.Case_Util;
  
! package body System.Val_Util is
  
     ---------------
     -- Bad_Value --
     ---------------
  
     procedure Bad_Value (S : String) is
     begin
        --  Bad_Value might be called with very long strings allocated on the
        --  heap. Limit the size of the message so that we avoid creating a
--- 29,55 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ --  Ghost code, loop invariants and assertions in this unit are meant for
+ --  analysis only, not for run-time checking, as it would be too costly
+ --  otherwise. This is enforced by setting the assertion policy to Ignore.
+ 
+ pragma Assertion_Policy (Ghost          => Ignore,
+                          Loop_Invariant => Ignore,
+                          Assert         => Ignore);
+ 
  with System.Case_Util; use System.Case_Util;
  
! package body System.Val_Util
!   with SPARK_Mode
! is
  
     ---------------
     -- Bad_Value --
     ---------------
  
     procedure Bad_Value (S : String) is
+       pragma Annotate (GNATprove, Intentional, "exception might be raised",
+                        "Intentional exception from Bad_Value");
     begin
        --  Bad_Value might be called with very long strings allocated on the
        --  heap. Limit the size of the message so that we avoid creating a
*************** package body System.Val_Util is
*** 50,55 ****
--- 62,105 ----
        end if;
     end Bad_Value;
  
+    ---------------------------
+    -- First_Non_Space_Ghost --
+    ---------------------------
+ 
+    function First_Non_Space_Ghost
+      (S        : String;
+       From, To : Integer) return Positive
+    is
+    begin
+       for J in From .. To loop
+          if S (J) /= ' ' then
+             return J;
+          end if;
+ 
+          pragma Loop_Invariant (for all K in From .. J => S (K) = ' ');
+       end loop;
+ 
+       raise Program_Error;
+    end First_Non_Space_Ghost;
+ 
+    -----------------------
+    -- Last_Number_Ghost --
+    -----------------------
+ 
+    function Last_Number_Ghost (Str : String) return Positive is
+    begin
+       for J in Str'Range loop
+          if Str (J) not in '0' .. '9' | '_' then
+             return J - 1;
+          end if;
+ 
+          pragma Loop_Invariant
+            (for all K in Str'First .. J => Str (K) in '0' .. '9' | '_');
+       end loop;
+ 
+       return Str'Last;
+    end Last_Number_Ghost;
+ 
     ----------------------
     -- Normalize_String --
     ----------------------
*************** package body System.Val_Util is
*** 62,82 ****
        F := S'First;
        L := S'Last;
  
        --  Scan for leading spaces
  
!       while F <= L and then S (F) = ' ' loop
           F := F + 1;
        end loop;
  
!       --  Check for case when the string contained no characters
  
!       if F > L then
!          Bad_Value (S);
        end if;
  
        --  Scan for trailing spaces
  
        while S (L) = ' ' loop
           L := L - 1;
        end loop;
  
--- 112,144 ----
        F := S'First;
        L := S'Last;
  
+       --  Case of empty string
+ 
+       if F > L then
+          return;
+       end if;
+ 
        --  Scan for leading spaces
  
!       while F < L and then S (F) = ' ' loop
!          pragma Loop_Invariant (F in S'First .. L - 1);
!          pragma Loop_Invariant (for all J in S'First .. F => S (J) = ' ');
           F := F + 1;
        end loop;
  
!       --  Case of no nonspace characters found. Decrease L to ensure L < F
!       --  without risking an overflow if F is Integer'Last.
  
!       if S (F) = ' ' then
!          L := L - 1;
!          return;
        end if;
  
        --  Scan for trailing spaces
  
        while S (L) = ' ' loop
+          pragma Loop_Invariant (L in F + 1 .. S'Last);
+          pragma Loop_Invariant (for all J in L .. S'Last => S (J) = ' ');
           L := L - 1;
        end loop;
  
*************** package body System.Val_Util is
*** 85,90 ****
--- 147,154 ----
        if S (F) /= ''' then
           for J in F .. L loop
              S (J) := To_Upper (S (J));
+             pragma Loop_Invariant
+               (for all K in F .. J => S (K) = To_Upper (S'Loop_Entry (K)));
           end loop;
        end if;
     end Normalize_String;
*************** package body System.Val_Util is
*** 93,105 ****
     -- Scan_Exponent --
     -------------------
  
!    function Scan_Exponent
       (Str  : String;
        Ptr  : not null access Integer;
        Max  : Integer;
!       Real : Boolean := False) return Integer
     is
!       P : Natural := Ptr.all;
        M : Boolean;
        X : Integer;
  
--- 157,170 ----
     -- Scan_Exponent --
     -------------------
  
!    procedure Scan_Exponent
       (Str  : String;
        Ptr  : not null access Integer;
        Max  : Integer;
!       Exp  : out Integer;
!       Real : Boolean := False)
     is
!       P : Integer := Ptr.all;
        M : Boolean;
        X : Integer;
  
*************** package body System.Val_Util is
*** 107,114 ****
        if P >= Max
          or else (Str (P) /= 'E' and then Str (P) /= 'e')
        then
!          return 0;
        end if;
  
        --  We have an E/e, see if sign follows
  
--- 172,183 ----
        if P >= Max
          or else (Str (P) /= 'E' and then Str (P) /= 'e')
        then
!          Exp := 0;
!          return;
        end if;
+       pragma Annotate
+         (CodePeer, False_Positive, "test always false",
+          "the slice might be empty or not start with an 'e'");
  
        --  We have an E/e, see if sign follows
  
*************** package body System.Val_Util is
*** 118,124 ****
           P := P + 1;
  
           if P > Max then
!             return 0;
           else
              M := False;
           end if;
--- 187,194 ----
           P := P + 1;
  
           if P > Max then
!             Exp := 0;
!             return;
           else
              M := False;
           end if;
*************** package body System.Val_Util is
*** 127,133 ****
           P := P + 1;
  
           if P > Max or else not Real then
!             return 0;
           else
              M := True;
           end if;
--- 197,204 ----
           P := P + 1;
  
           if P > Max or else not Real then
!             Exp := 0;
!             return;
           else
              M := True;
           end if;
*************** package body System.Val_Util is
*** 137,143 ****
        end if;
  
        if Str (P) not in '0' .. '9' then
!          return 0;
        end if;
  
        --  Scan out the exponent value as an unsigned integer. Values larger
--- 208,215 ----
        end if;
  
        if Str (P) not in '0' .. '9' then
!          Exp := 0;
!          return;
        end if;
  
        --  Scan out the exponent value as an unsigned integer. Values larger
*************** package body System.Val_Util is
*** 148,175 ****
  
        X := 0;
  
!       loop
!          if X < (Integer'Last / 10) then
!             X := X * 10 + (Character'Pos (Str (P)) - Character'Pos ('0'));
!          end if;
  
!          P := P + 1;
  
!          exit when P > Max;
  
!          if Str (P) = '_' then
!             Scan_Underscore (Str, P, Ptr, Max, False);
!          else
!             exit when Str (P) not in '0' .. '9';
!          end if;
!       end loop;
  
        if M then
           X := -X;
        end if;
  
        Ptr.all := P;
!       return X;
     end Scan_Exponent;
  
     --------------------
--- 220,266 ----
  
        X := 0;
  
!       declare
!          Rest : constant String := Str (P .. Max) with Ghost;
!          Last : constant Natural := Last_Number_Ghost (Rest) with Ghost;
  
!       begin
!          pragma Assert (Is_Natural_Format_Ghost (Rest));
  
!          loop
!             pragma Assert (Str (P) in '0' .. '9');
  
!             if X < (Integer'Last / 10) then
!                X := X * 10 + (Character'Pos (Str (P)) - Character'Pos ('0'));
!             end if;
! 
!             pragma Loop_Invariant (X >= 0);
!             pragma Loop_Invariant (P in Rest'First .. Last);
!             pragma Loop_Invariant (Str (P) in '0' .. '9');
!             pragma Loop_Invariant
!               (Scan_Natural_Ghost (Rest, Rest'First, 0)
!                = Scan_Natural_Ghost (Rest, P + 1, X));
! 
!             P := P + 1;
! 
!             exit when P > Max;
! 
!             if Str (P) = '_' then
!                Scan_Underscore (Str, P, Ptr, Max, False);
!             else
!                exit when Str (P) not in '0' .. '9';
!             end if;
!          end loop;
! 
!          pragma Assert (P = Last + 1);
!       end;
  
        if M then
           X := -X;
        end if;
  
        Ptr.all := P;
!       Exp := X;
     end Scan_Exponent;
  
     --------------------
*************** package body System.Val_Util is
*** 182,188 ****
        Max   : Integer;
        Start : out Positive)
     is
!       P : Natural := Ptr.all;
  
     begin
        if P > Max then
--- 273,279 ----
        Max   : Integer;
        Start : out Positive)
     is
!       P : Integer := Ptr.all;
  
     begin
        if P > Max then
*************** package body System.Val_Util is
*** 194,199 ****
--- 285,296 ----
        while Str (P) = ' ' loop
           P := P + 1;
  
+          pragma Loop_Invariant (Ptr.all = Ptr.all'Loop_Entry);
+          pragma Loop_Invariant (P in Ptr.all .. Max);
+          pragma Loop_Invariant (for some J in P .. Max => Str (J) /= ' ');
+          pragma Loop_Invariant
+            (for all J in Ptr.all .. P - 1 => Str (J) = ' ');
+ 
           if P > Max then
              Ptr.all := P;
              Bad_Value (Str);
*************** package body System.Val_Util is
*** 202,207 ****
--- 299,306 ----
  
        Start := P;
  
+       pragma Assert (Start = First_Non_Space_Ghost (Str, Ptr.all, Max));
+ 
        --  Skip past an initial plus sign
  
        if Str (P) = '+' then
*************** package body System.Val_Util is
*** 227,233 ****
        Minus : out Boolean;
        Start : out Positive)
     is
!       P : Natural := Ptr.all;
  
     begin
        --  Deal with case of null string (all blanks). As per spec, we raise
--- 326,332 ----
        Minus : out Boolean;
        Start : out Positive)
     is
!       P : Integer := Ptr.all;
  
     begin
        --  Deal with case of null string (all blanks). As per spec, we raise
*************** package body System.Val_Util is
*** 242,247 ****
--- 341,352 ----
        while Str (P) = ' ' loop
           P := P + 1;
  
+          pragma Loop_Invariant (Ptr.all = Ptr.all'Loop_Entry);
+          pragma Loop_Invariant (P in Ptr.all .. Max);
+          pragma Loop_Invariant (for some J in P .. Max => Str (J) /= ' ');
+          pragma Loop_Invariant
+            (for all J in Ptr.all .. P - 1 => Str (J) = ' ');
+ 
           if P > Max then
              Ptr.all := P;
              Bad_Value (Str);
*************** package body System.Val_Util is
*** 250,255 ****
--- 355,362 ----
  
        Start := P;
  
+       pragma Assert (Start = First_Non_Space_Ghost (Str, Ptr.all, Max));
+ 
        --  Remember an initial minus sign
  
        if Str (P) = '-' then
*************** package body System.Val_Util is
*** 289,294 ****
--- 396,403 ----
           if Str (J) /= ' ' then
              Bad_Value (Str);
           end if;
+ 
+          pragma Loop_Invariant (for all K in P .. J => Str (K) = ' ');
        end loop;
     end Scan_Trailing_Blanks;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valuti.ads gcc-12.1.0/gcc/ada/libgnat/s-valuti.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valuti.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valuti.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,60 ****
  
  --  This package provides some common utilities used by the s-valxxx files
  
! package System.Val_Util is
!    pragma Pure;
  
!    procedure Bad_Value (S : String);
     pragma No_Return (Bad_Value);
     --  Raises constraint error with message: bad input for 'Value: "xxx"
  
     procedure Normalize_String
       (S    : in out String;
!       F, L : out Integer);
     --  This procedure scans the string S setting F to be the index of the first
     --  non-blank character of S and L to be the index of the last non-blank
     --  character of S. Any lower case characters present in S will be folded to
     --  their upper case equivalent except for character literals. If S consists
!    --  of entirely blanks then Constraint_Error is raised.
!    --
!    --  Note: if S is the null string, F is set to S'First, L to S'Last
  
     procedure Scan_Sign
       (Str   : String;
        Ptr   : not null access Integer;
        Max   : Integer;
        Minus : out Boolean;
!       Start : out Positive);
     --  The Str, Ptr, Max parameters are as for the scan routines (Str is the
     --  string to be scanned starting at Ptr.all, and Max is the index of the
     --  last character in the string). Scan_Sign first scans out any initial
--- 31,141 ----
  
  --  This package provides some common utilities used by the s-valxxx files
  
! --  Preconditions in this unit are meant for analysis only, not for run-time
! --  checking, so that the expected exceptions are raised. This is enforced by
! --  setting the corresponding assertion policy to Ignore. Postconditions and
! --  contract cases should not be executed at runtime as well, in order not to
! --  slow down the execution of these functions.
  
! pragma Assertion_Policy (Pre            => Ignore,
!                          Post           => Ignore,
!                          Contract_Cases => Ignore,
!                          Ghost          => Ignore);
! pragma Warnings (Off, "postcondition does not mention function result");
! --  True postconditions are used to avoid inlining for GNATprove
! 
! with System.Case_Util;
! 
! package System.Val_Util
!   with SPARK_Mode, Pure
! is
!    pragma Unevaluated_Use_Of_Old (Allow);
! 
!    procedure Bad_Value (S : String)
!    with
!      Depends => (null => S);
     pragma No_Return (Bad_Value);
     --  Raises constraint error with message: bad input for 'Value: "xxx"
  
+    function Only_Space_Ghost (S : String; From, To : Integer) return Boolean is
+       (for all J in From .. To => S (J) = ' ')
+    with
+      Ghost,
+      Pre  => From > To or else (From >= S'First and then To <= S'Last),
+      Post => True;
+    --  Ghost function that returns True if S has only space characters from
+    --  index From to index To.
+ 
+    function First_Non_Space_Ghost
+      (S        : String;
+       From, To : Integer) return Positive
+    with
+      Ghost,
+      Pre  => From in S'Range
+        and then To in S'Range
+        and then not Only_Space_Ghost (S, From, To),
+      Post => First_Non_Space_Ghost'Result in From .. To
+        and then S (First_Non_Space_Ghost'Result) /= ' '
+        and then Only_Space_Ghost
+          (S, From, First_Non_Space_Ghost'Result - 1);
+    --  Ghost function that returns the index of the first non-space character
+    --  in S, which necessarily exists given the precondition on S.
+ 
     procedure Normalize_String
       (S    : in out String;
!       F, L : out Integer)
!    with
!      Post => (if Only_Space_Ghost (S'Old, S'First, S'Last) then
!                 F > L
!               else
!                 F >= S'First
!                   and then L <= S'Last
!                   and then F <= L
!                   and then Only_Space_Ghost (S'Old, S'First, F - 1)
!                   and then S'Old (F) /= ' '
!                   and then S'Old (L) /= ' '
!                   and then
!                     (if L < S'Last then
!                       Only_Space_Ghost (S'Old, L + 1, S'Last))
!                   and then
!                     (if S'Old (F) /= ''' then
!                       (for all J in S'Range =>
!                         (if J in F .. L then
!                            S (J) = System.Case_Util.To_Upper (S'Old (J))
!                          else
!                            S (J) = S'Old (J)))));
     --  This procedure scans the string S setting F to be the index of the first
     --  non-blank character of S and L to be the index of the last non-blank
     --  character of S. Any lower case characters present in S will be folded to
     --  their upper case equivalent except for character literals. If S consists
!    --  of entirely blanks (including when S = "") then we return with F > L.
  
     procedure Scan_Sign
       (Str   : String;
        Ptr   : not null access Integer;
        Max   : Integer;
        Minus : out Boolean;
!       Start : out Positive)
!    with
!      Pre  =>
!        --  Ptr.all .. Max is either an empty range, or a valid range in Str
!        (Ptr.all > Max or else (Ptr.all >= Str'First and then Max <= Str'Last))
!        and then not Only_Space_Ghost (Str, Ptr.all, Max)
!        and then
!          (declare
!             F : constant Positive :=
!               First_Non_Space_Ghost (Str, Ptr.all, Max);
!           begin
!             (if Str (F) in '+' | '-' then
!                F <= Max - 1 and then Str (F + 1) /= ' ')),
!      Post =>
!        (declare
!           F : constant Positive :=
!             First_Non_Space_Ghost (Str, Ptr.all'Old, Max);
!         begin
!           Minus = (Str (F) = '-')
!             and then Ptr.all = (if Str (F) in '+' | '-' then F + 1 else F)
!             and then Start = F);
     --  The Str, Ptr, Max parameters are as for the scan routines (Str is the
     --  string to be scanned starting at Ptr.all, and Max is the index of the
     --  last character in the string). Scan_Sign first scans out any initial
*************** package System.Val_Util is
*** 79,93 ****
       (Str   : String;
        Ptr   : not null access Integer;
        Max   : Integer;
!       Start : out Positive);
     --  Same as Scan_Sign, but allows only plus, not minus. This is used for
     --  modular types.
  
!    function Scan_Exponent
       (Str  : String;
        Ptr  : not null access Integer;
        Max  : Integer;
!       Real : Boolean := False) return Integer;
     --  Called to scan a possible exponent. Str, Ptr, Max are as described above
     --  for Scan_Sign. If Ptr.all < Max and Str (Ptr.all) = 'E' or 'e', then an
     --  exponent is scanned out, with the exponent value returned in Exp, and
--- 160,326 ----
       (Str   : String;
        Ptr   : not null access Integer;
        Max   : Integer;
!       Start : out Positive)
!    with
!      Pre  =>
!        --  Ptr.all .. Max is either an empty range, or a valid range in Str
!        (Ptr.all > Max or else (Ptr.all >= Str'First and then Max <= Str'Last))
!        and then not Only_Space_Ghost (Str, Ptr.all, Max)
!        and then
!          (declare
!             F : constant Positive :=
!               First_Non_Space_Ghost (Str, Ptr.all, Max);
!           begin
!             (if Str (F) = '+' then
!                F <= Max - 1 and then Str (F + 1) /= ' ')),
!      Post =>
!        (declare
!           F : constant Positive :=
!             First_Non_Space_Ghost (Str, Ptr.all'Old, Max);
!         begin
!           Ptr.all = (if Str (F) = '+' then F + 1 else F)
!             and then Start = F);
     --  Same as Scan_Sign, but allows only plus, not minus. This is used for
     --  modular types.
  
!    function Only_Number_Ghost (Str : String; From, To : Integer) return Boolean
!    is
!       (for all J in From .. To => Str (J) in '0' .. '9' | '_')
!    with
!      Ghost,
!      Pre => From > To or else (From >= Str'First and then To <= Str'Last);
!    --  Ghost function that returns True if S has only number characters from
!    --  index From to index To.
! 
!    function Last_Number_Ghost (Str : String) return Positive
!    with
!      Ghost,
!      Pre  => Str /= "" and then Str (Str'First) in '0' .. '9',
!      Post => Last_Number_Ghost'Result in Str'Range
!        and then (if Last_Number_Ghost'Result < Str'Last then
!                    Str (Last_Number_Ghost'Result + 1) not in '0' .. '9' | '_')
!        and then Only_Number_Ghost (Str, Str'First, Last_Number_Ghost'Result);
!    --  Ghost function that returns the index of the last character in S that
!    --  is either a figure or underscore, which necessarily exists given the
!    --  precondition on Str.
! 
!    function Is_Natural_Format_Ghost (Str : String) return Boolean is
!      (Str /= ""
!         and then Str (Str'First) in '0' .. '9'
!         and then
!         (declare
!            L : constant Positive := Last_Number_Ghost (Str);
!          begin
!            Str (L) in '0' .. '9'
!              and then (for all J in Str'First .. L =>
!                          (if Str (J) = '_' then Str (J + 1) /= '_'))))
!    with
!      Ghost;
!    --  Ghost function that determines if Str has the correct format for a
!    --  natural number, consisting in a sequence of figures possibly separated
!    --  by single underscores. It may be followed by other characters.
! 
!    function Starts_As_Exponent_Format_Ghost
!      (Str  : String;
!       Real : Boolean := False) return Boolean
!    is
!      (Str'Length > 1
!       and then Str (Str'First) in 'E' | 'e'
!       and then
!         (declare
!             Plus_Sign  : constant Boolean := Str (Str'First + 1) = '+';
!             Minus_Sign : constant Boolean := Str (Str'First + 1) = '-';
!             Sign       : constant Boolean := Plus_Sign or Minus_Sign;
!          begin
!            (if Minus_Sign then Real)
!             and then (if Sign then Str'Length > 2)
!             and then
!               (declare
!                  Start : constant Natural :=
!                   (if Sign then Str'First + 2 else Str'First + 1);
!                begin
!                  Str (Start) in '0' .. '9')))
!    with
!      Ghost;
!    --  Ghost function that determines if Str is recognized as something which
!    --  might be an exponent, ie. it starts with an 'e', capitalized or not,
!    --  followed by an optional sign which can only be '-' if we are working on
!    --  real numbers (Real is True), and then a digit in decimal notation.
! 
!    function Is_Opt_Exponent_Format_Ghost
!      (Str  : String;
!       Real : Boolean := False) return Boolean
!    is
!      (not Starts_As_Exponent_Format_Ghost (Str, Real)
!       or else
!         (declare
!            Start : constant Natural :=
!              (if Str (Str'First + 1) in '+' | '-' then Str'First + 2
!               else Str'First + 1);
!          begin Is_Natural_Format_Ghost (Str (Start .. Str'Last))))
!    with
!      Ghost;
!    --  Ghost function that determines if Str has the correct format for an
!    --  optional exponent, that is, either it does not start as an exponent, or
!    --  it is in a correct format for a natural number.
! 
!    function Scan_Natural_Ghost
!      (Str : String;
!       P   : Natural;
!       Acc : Natural)
!       return Natural
!    with
!      Ghost,
!      Subprogram_Variant => (Increases => P),
!      Pre => Str /= "" and then Str (Str'First) in '0' .. '9'
!        and then Str'Last < Natural'Last
!        and then P in Str'First .. Last_Number_Ghost (Str) + 1;
!    --  Ghost function that recursively computes the natural number in Str, up
!    --  to the first number greater or equal to Natural'Last / 10, assuming Acc
!    --  has been scanned already and scanning continues at index P.
! 
!    function Scan_Exponent_Ghost
!      (Str  : String;
!       Real : Boolean := False)
!       return Integer
!    is
!      (declare
!         Plus_Sign  : constant Boolean := Str (Str'First + 1) = '+';
!         Minus_Sign : constant Boolean := Str (Str'First + 1) = '-';
!         Sign       : constant Boolean := Plus_Sign or Minus_Sign;
!         Start      : constant Natural :=
!           (if Sign then Str'First + 2 else Str'First + 1);
!         Value      : constant Natural :=
!           Scan_Natural_Ghost (Str (Start .. Str'Last), Start, 0);
!       begin
!         (if Minus_Sign then -Value else Value))
!    with
!      Ghost,
!      Pre  => Str'Last < Natural'Last
!        and then Starts_As_Exponent_Format_Ghost (Str, Real),
!      Post => (if not Real then Scan_Exponent_Ghost'Result >= 0);
!    --  Ghost function that scans an exponent
! 
!    procedure Scan_Exponent
       (Str  : String;
        Ptr  : not null access Integer;
        Max  : Integer;
!       Exp  : out Integer;
!       Real : Boolean := False)
!    with
!      Pre =>
!        --  Ptr.all .. Max is either an empty range, or a valid range in Str
!        (Ptr.all > Max or else (Ptr.all >= Str'First and then Max <= Str'Last))
!          and then Max < Natural'Last
!          and then Is_Opt_Exponent_Format_Ghost (Str (Ptr.all .. Max), Real),
!      Post =>
!        (if Starts_As_Exponent_Format_Ghost (Str (Ptr.all'Old .. Max), Real)
!         then Exp = Scan_Exponent_Ghost (Str (Ptr.all'Old .. Max), Real)
!           and then
!           (if Str (Ptr.all'Old + 1) in '-' | '+' then
!              Ptr.all = Last_Number_Ghost (Str (Ptr.all'Old + 2 .. Max)) + 1
!            else Ptr.all = Last_Number_Ghost (Str (Ptr.all'Old + 1 .. Max)) + 1)
!         else Exp = 0 and Ptr.all = Ptr.all'Old);
     --  Called to scan a possible exponent. Str, Ptr, Max are as described above
     --  for Scan_Sign. If Ptr.all < Max and Str (Ptr.all) = 'E' or 'e', then an
     --  exponent is scanned out, with the exponent value returned in Exp, and
*************** package System.Val_Util is
*** 102,119 ****
     --  This routine must not be called with Str'Last = Positive'Last. There is
     --  no check for this case, the caller must ensure this condition is met.
  
!    procedure Scan_Trailing_Blanks (Str : String; P : Positive);
     --  Checks that the remainder of the field Str (P .. Str'Last) is all
     --  blanks. Raises Constraint_Error if a non-blank character is found.
  
     procedure Scan_Underscore
       (Str : String;
        P   : in out Natural;
        Ptr : not null access Integer;
        Max : Integer;
!       Ext : Boolean);
     --  Called if an underscore is encountered while scanning digits. Str (P)
!    --  contains the underscore. Ptr it the pointer to be returned to the
     --  ultimate caller of the scan routine, Max is the maximum subscript in
     --  Str, and Ext indicates if extended digits are allowed. In the case
     --  where the underscore is invalid, Constraint_Error is raised with Ptr
--- 335,371 ----
     --  This routine must not be called with Str'Last = Positive'Last. There is
     --  no check for this case, the caller must ensure this condition is met.
  
!    procedure Scan_Trailing_Blanks (Str : String; P : Positive)
!    with
!      Pre => P >= Str'First
!        and then Only_Space_Ghost (Str, P, Str'Last);
     --  Checks that the remainder of the field Str (P .. Str'Last) is all
     --  blanks. Raises Constraint_Error if a non-blank character is found.
  
+    pragma Warnings
+      (GNATprove, Off, """Ptr"" is not modified",
+       Reason => "Ptr is actually modified when raising an exception");
     procedure Scan_Underscore
       (Str : String;
        P   : in out Natural;
        Ptr : not null access Integer;
        Max : Integer;
!       Ext : Boolean)
!    with
!      Pre  => P in Str'Range
!        and then Str (P) = '_'
!        and then Max in Str'Range
!        and then P < Max
!        and then
!          (if Ext then
!             Str (P + 1) in '0' .. '9' | 'A' .. 'F' | 'a' .. 'f'
!           else
!             Str (P + 1) in '0' .. '9'),
!      Post =>
!        P = P'Old + 1
!          and then Ptr.all'Old = Ptr.all;
     --  Called if an underscore is encountered while scanning digits. Str (P)
!    --  contains the underscore. Ptr is the pointer to be returned to the
     --  ultimate caller of the scan routine, Max is the maximum subscript in
     --  Str, and Ext indicates if extended digits are allowed. In the case
     --  where the underscore is invalid, Constraint_Error is raised with Ptr
*************** package System.Val_Util is
*** 122,126 ****
--- 374,407 ----
     --
     --  This routine must not be called with Str'Last = Positive'Last. There is
     --  no check for this case, the caller must ensure this condition is met.
+    pragma Warnings (GNATprove, On, """Ptr"" is not modified");
+ 
+ private
+ 
+    ------------------------
+    -- Scan_Natural_Ghost --
+    ------------------------
+ 
+    function Scan_Natural_Ghost
+      (Str : String;
+       P   : Natural;
+       Acc : Natural)
+       return Natural
+    is
+      (if P > Str'Last
+         or else Str (P) not in '0' .. '9' | '_'
+         or else Acc >= Integer'Last / 10
+       then
+         Acc
+       elsif Str (P) = '_' then
+         Scan_Natural_Ghost (Str, P + 1, Acc)
+       else
+         (declare
+            Shift_Acc : constant Natural :=
+              Acc * 10 +
+                (Integer'(Character'Pos (Str (P))) -
+                   Integer'(Character'Pos ('0')));
+          begin
+            Scan_Natural_Ghost (Str, P + 1, Shift_Acc)));
  
  end System.Val_Util;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valwch.adb gcc-12.1.0/gcc/ada/libgnat/s-valwch.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-valwch.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valwch.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-valwch.ads gcc-12.1.0/gcc/ada/libgnat/s-valwch.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-valwch.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-valwch.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-veboop.adb gcc-12.1.0/gcc/ada/libgnat/s-veboop.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-veboop.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-veboop.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
***************
*** 29,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! package body System.Vectors.Boolean_Operations is
  
     SU : constant := Storage_Unit;
     --  Convenient short hand, used throughout
--- 29,45 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Ghost code, loop invariants and assertions in this unit are meant for
! --  analysis only, not for run-time checking, as it would be too costly
! --  otherwise. This is enforced by setting the assertion policy to Ignore.
! 
! pragma Assertion_Policy (Ghost          => Ignore,
!                          Loop_Invariant => Ignore,
!                          Assert         => Ignore);
! 
! package body System.Vectors.Boolean_Operations
!   with SPARK_Mode
! is
  
     SU : constant := Storage_Unit;
     --  Convenient short hand, used throughout
*************** package body System.Vectors.Boolean_Oper
*** 76,82 ****
--- 86,111 ----
     -----------
  
     function "not" (Item : Vectors.Vector) return Vectors.Vector is
+ 
+       procedure Prove_Not (Result : Vectors.Vector)
+       with
+         Ghost,
+         Pre  => Valid (Item)
+           and then Result = (Item xor True_Val),
+         Post => Valid (Result)
+           and then (for all J in 1 .. Vector_Boolean_Size =>
+                       Model (Result) (J) = not Model (Item) (J));
+ 
+       procedure Prove_Not (Result : Vectors.Vector) is
+       begin
+          for J in 1 .. Vector_Boolean_Size loop
+             pragma Assert
+               (Element (Result, J) = 1 - Element (Item, J));
+          end loop;
+       end Prove_Not;
+ 
     begin
+       Prove_Not (Item xor True_Val);
        return Item xor True_Val;
     end "not";
  
*************** package body System.Vectors.Boolean_Oper
*** 90,96 ****
--- 119,150 ----
     end Nand;
  
     function Nand (Left, Right : Vectors.Vector) return Vectors.Vector is
+ 
+       procedure Prove_And (Result : Vectors.Vector)
+       with
+         Ghost,
+         Pre  => Valid (Left)
+           and then Valid (Right)
+           and then Result = (Left and Right),
+           Post => Valid (Result)
+             and then (for all J in 1 .. Vector_Boolean_Size =>
+                         Model (Result) (J) =
+                           (Model (Left) (J) and Model (Right) (J)));
+ 
+       procedure Prove_And (Result : Vectors.Vector) is
+       begin
+          for J in 1 .. Vector_Boolean_Size loop
+             pragma Assert
+               (Element (Result, J) =
+                  (if Element (Left, J) = 1
+                     and Element (Right, J) = 1
+                   then 1
+                   else 0));
+          end loop;
+       end Prove_And;
+ 
     begin
+       Prove_And (Left and Right);
        return not (Left and Right);
     end Nand;
  
*************** package body System.Vectors.Boolean_Oper
*** 104,110 ****
--- 158,189 ----
     end Nor;
  
     function Nor (Left, Right : Vectors.Vector) return Vectors.Vector is
+ 
+       procedure Prove_Or (Result : Vectors.Vector)
+       with
+         Ghost,
+         Pre  => Valid (Left)
+           and then Valid (Right)
+           and then Result = (Left or Right),
+           Post => Valid (Result)
+             and then (for all J in 1 .. Vector_Boolean_Size =>
+                         Model (Result) (J) =
+                           (Model (Left) (J) or Model (Right) (J)));
+ 
+       procedure Prove_Or (Result : Vectors.Vector) is
+       begin
+          for J in 1 .. Vector_Boolean_Size loop
+             pragma Assert
+               (Element (Result, J) =
+                  (if Element (Left, J) = 1
+                     or Element (Right, J) = 1
+                   then 1
+                   else 0));
+          end loop;
+       end Prove_Or;
+ 
     begin
+       Prove_Or (Left or Right);
        return not (Left or Right);
     end Nor;
  
*************** package body System.Vectors.Boolean_Oper
*** 118,124 ****
--- 197,228 ----
     end Nxor;
  
     function Nxor (Left, Right : Vectors.Vector) return Vectors.Vector is
+ 
+       procedure Prove_Xor (Result : Vectors.Vector)
+       with
+         Ghost,
+         Pre  => Valid (Left)
+           and then Valid (Right)
+           and then Result = (Left xor Right),
+           Post => Valid (Result)
+             and then (for all J in 1 .. Vector_Boolean_Size =>
+                         Model (Result) (J) =
+                           (Model (Left) (J) xor Model (Right) (J)));
+ 
+       procedure Prove_Xor (Result : Vectors.Vector) is
+       begin
+          for J in 1 .. Vector_Boolean_Size loop
+             pragma Assert
+               (Element (Result, J) =
+                  (if Element (Left, J) = 1
+                     xor Element (Right, J) = 1
+                   then 1
+                   else 0));
+          end loop;
+       end Prove_Xor;
+ 
     begin
+       Prove_Xor (Left xor Right);
        return not (Left xor Right);
     end Nxor;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-veboop.ads gcc-12.1.0/gcc/ada/libgnat/s-veboop.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-veboop.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-veboop.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
***************
*** 31,45 ****
  
  --  This package contains functions for runtime operations on boolean vectors
  
! package System.Vectors.Boolean_Operations is
!    pragma Pure;
  
     --  Although in general the boolean operations on arrays of booleans are
     --  identical to operations on arrays of unsigned words of the same size,
     --  for the "not" operator this is not the case as False is typically
     --  represented by 0 and true by 1.
  
!    function "not" (Item : Vectors.Vector) return Vectors.Vector;
  
     --  The three boolean operations "nand", "nor" and "nxor" are needed
     --  for cases where the compiler moves boolean array operations into
--- 31,107 ----
  
  --  This package contains functions for runtime operations on boolean vectors
  
! --  Preconditions in this unit are meant for analysis only, not for run-time
! --  checking, so that the expected exceptions are raised. This is enforced by
! --  setting the corresponding assertion policy to Ignore. Postconditions and
! --  contract cases should not be executed at runtime as well, in order not to
! --  slow down the execution of these functions.
! 
! pragma Assertion_Policy (Pre            => Ignore,
!                          Post           => Ignore,
!                          Contract_Cases => Ignore,
!                          Ghost          => Ignore);
! 
! package System.Vectors.Boolean_Operations
!   with Pure, SPARK_Mode
! is
!    pragma Warnings (Off, "aspect ""Pre"" not enforced on inlined subprogram",
!                     Reason => "Pre only used in proof");
!    pragma Warnings (Off, "aspect ""Post"" not enforced on inlined subprogram",
!                     Reason => "Post only used in proof");
! 
!    --  Type Vectors.Vector represents an array of Boolean, each of which
!    --  takes 8 bits of the representation, with the 7 msb set to zero. Express
!    --  in contracts the constraint on valid vectors and the model that they
!    --  represent, and the relationship between input models and output model.
! 
!    Vector_Boolean_Size : constant Positive :=
!      System.Word_Size / System.Storage_Unit
!    with Ghost;
! 
!    type Vector_Element is mod 2 ** System.Storage_Unit with Ghost;
! 
!    type Vector_Boolean_Array is array (1 .. Vector_Boolean_Size) of Boolean
!    with Ghost;
! 
!    function Shift_Right (V : Vectors.Vector; N : Natural) return Vectors.Vector
!    with Ghost, Import, Convention => Intrinsic;
! 
!    function Element (V : Vectors.Vector; N : Positive) return Vector_Element is
!      (Vector_Element (Shift_Right (V, (N - 1) * System.Storage_Unit)
!                         and (2 ** System.Storage_Unit - 1)))
!    with
!      Ghost,
!      Pre => N <= Vector_Boolean_Size;
!    --  Return the Nth element represented by the vector
! 
!    function Valid (V : Vectors.Vector) return Boolean is
!      (for all J in 1 .. Vector_Boolean_Size =>
!         Element (V, J) in 0 .. 1)
!    with Ghost;
!    --  A valid vector is one for which all elements are 0 (representing False)
!    --  or 1 (representing True).
! 
!    function Model (V : Vectors.Vector) return Vector_Boolean_Array
!    with
!      Ghost,
!      Pre => Valid (V);
! 
!    function Model (V : Vectors.Vector) return Vector_Boolean_Array is
!      (for J in 1 .. Vector_Boolean_Size => Element (V, J) = 1);
!    --  The model of a valid vector is the corresponding array of Boolean values
  
     --  Although in general the boolean operations on arrays of booleans are
     --  identical to operations on arrays of unsigned words of the same size,
     --  for the "not" operator this is not the case as False is typically
     --  represented by 0 and true by 1.
  
!    function "not" (Item : Vectors.Vector) return Vectors.Vector
!    with
!      Pre  => Valid (Item),
!      Post => Valid ("not"'Result)
!        and then (for all J in 1 .. Vector_Boolean_Size =>
!                    Model ("not"'Result) (J) = not Model (Item) (J));
  
     --  The three boolean operations "nand", "nor" and "nxor" are needed
     --  for cases where the compiler moves boolean array operations into
*************** package System.Vectors.Boolean_Operation
*** 51,63 ****
     --    (not X) xor (not Y)  =  X xor Y
     --    X       xor (not Y)  =  not (X xor Y)  =  Nxor (X, Y)
  
!    function Nand (Left, Right : Boolean) return Boolean;
!    function Nor  (Left, Right : Boolean) return Boolean;
!    function Nxor (Left, Right : Boolean) return Boolean;
  
!    function Nand (Left, Right : Vectors.Vector) return Vectors.Vector;
!    function Nor (Left, Right : Vectors.Vector) return Vectors.Vector;
!    function Nxor (Left, Right : Vectors.Vector) return Vectors.Vector;
  
     pragma Inline_Always ("not");
     pragma Inline_Always (Nand);
--- 113,156 ----
     --    (not X) xor (not Y)  =  X xor Y
     --    X       xor (not Y)  =  not (X xor Y)  =  Nxor (X, Y)
  
!    function Nand (Left, Right : Boolean) return Boolean
!    with
!      Post => Nand'Result = not (Left and Right);
  
!    function Nor  (Left, Right : Boolean) return Boolean
!    with
!      Post => Nor'Result = not (Left or Right);
! 
!    function Nxor (Left, Right : Boolean) return Boolean
!    with
!      Post => Nxor'Result = not (Left xor Right);
! 
!    function Nand (Left, Right : Vectors.Vector) return Vectors.Vector
!    with
!      Pre  => Valid (Left)
!        and then Valid (Right),
!      Post => Valid (Nand'Result)
!        and then (for all J in 1 .. Vector_Boolean_Size =>
!                    Model (Nand'Result) (J) =
!                      Nand (Model (Left) (J), Model (Right) (J)));
! 
!    function Nor (Left, Right : Vectors.Vector) return Vectors.Vector
!    with
!      Pre  => Valid (Left)
!        and then Valid (Right),
!      Post => Valid (Nor'Result)
!        and then (for all J in 1 .. Vector_Boolean_Size =>
!                    Model (Nor'Result) (J) =
!                      Nor (Model (Left) (J), Model (Right) (J)));
! 
!    function Nxor (Left, Right : Vectors.Vector) return Vectors.Vector
!    with
!      Pre  => Valid (Left)
!        and then Valid (Right),
!      Post => Valid (Nxor'Result)
!        and then (for all J in 1 .. Vector_Boolean_Size =>
!                    Model (Nxor'Result) (J) =
!                      Nxor (Model (Left) (J), Model (Right) (J)));
  
     pragma Inline_Always ("not");
     pragma Inline_Always (Nand);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vector.ads gcc-12.1.0/gcc/ada/libgnat/s-vector.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vector.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vector.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vercon.adb gcc-12.1.0/gcc/ada/libgnat/s-vercon.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-vercon.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vercon.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-vercon.ads gcc-12.1.0/gcc/ada/libgnat/s-vercon.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-vercon.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-vercon.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wchcnv.adb gcc-12.1.0/gcc/ada/libgnat/s-wchcnv.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-wchcnv.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wchcnv.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  with Interfaces;     use Interfaces;
  with System.WCh_Con; use System.WCh_Con;
  with System.WCh_JIS; use System.WCh_JIS;
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wchcnv.ads gcc-12.1.0/gcc/ada/libgnat/s-wchcnv.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-wchcnv.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wchcnv.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 43,50 ****
  --  This unit may be used directly from an application program by providing
  --  an appropriate WITH, and the interface can be expected to remain stable.
  
- pragma Compiler_Unit_Warning;
- 
  with System.WCh_Con;
  
  package System.WCh_Cnv is
--- 43,48 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wchcon.adb gcc-12.1.0/gcc/ada/libgnat/s-wchcon.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-wchcon.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wchcon.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2005-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package body System.WCh_Con is
  
     ----------------------------
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wchcon.ads gcc-12.1.0/gcc/ada/libgnat/s-wchcon.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-wchcon.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wchcon.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 36,43 ****
  --  This unit may be used directly from an application program by providing
  --  an appropriate WITH, and the interface can be expected to remain stable.
  
- pragma Compiler_Unit_Warning;
- 
  package System.WCh_Con is
     pragma Pure;
  
--- 36,41 ----
*************** package System.WCh_Con is
*** 167,178 ****
     --  no ambiguity in Ada sources, since the above sequences are illegal Ada).
  
     WC_Encoding_Letters : constant array (WC_Encoding_Method) of Character :=
!      (WCEM_Hex       => 'h',
        WCEM_Upper     => 'u',
        WCEM_Shift_JIS => 's',
        WCEM_EUC       => 'e',
        WCEM_UTF8      => '8',
!       WCEM_Brackets  => 'b');
     --  Letters used for selection of wide character encoding method in the
     --  compiler options (-gnatW? switch) and for Wide_Text_IO (WCEM parameter
     --  in the form string).
--- 165,176 ----
     --  no ambiguity in Ada sources, since the above sequences are illegal Ada).
  
     WC_Encoding_Letters : constant array (WC_Encoding_Method) of Character :=
!      [WCEM_Hex       => 'h',
        WCEM_Upper     => 'u',
        WCEM_Shift_JIS => 's',
        WCEM_EUC       => 'e',
        WCEM_UTF8      => '8',
!       WCEM_Brackets  => 'b'];
     --  Letters used for selection of wide character encoding method in the
     --  compiler options (-gnatW? switch) and for Wide_Text_IO (WCEM parameter
     --  in the form string).
*************** package System.WCh_Con is
*** 191,202 ****
     --  or wide wide character sequence for any of the active encoding methods.
  
     WC_Longest_Sequences : constant array (WC_Encoding_Method) of Natural :=
!      (WCEM_Hex       => 5,
        WCEM_Upper     => 2,
        WCEM_Shift_JIS => 2,
        WCEM_EUC       => 2,
        WCEM_UTF8      => 6,
!       WCEM_Brackets  => 12);
     --  The longest number of characters that can be used for a wide character
     --  or wide wide character sequence using the given encoding method.
  
--- 189,200 ----
     --  or wide wide character sequence for any of the active encoding methods.
  
     WC_Longest_Sequences : constant array (WC_Encoding_Method) of Natural :=
!      [WCEM_Hex       => 5,
        WCEM_Upper     => 2,
        WCEM_Shift_JIS => 2,
        WCEM_EUC       => 2,
        WCEM_UTF8      => 6,
!       WCEM_Brackets  => 12];
     --  The longest number of characters that can be used for a wide character
     --  or wide wide character sequence using the given encoding method.
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wchjis.adb gcc-12.1.0/gcc/ada/libgnat/s-wchjis.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-wchjis.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wchjis.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- pragma Compiler_Unit_Warning;
- 
  package body System.WCh_JIS is
  
     type Byte is mod 256;
--- 29,34 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wchjis.ads gcc-12.1.0/gcc/ada/libgnat/s-wchjis.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-wchjis.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wchjis.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 32,39 ****
  --  This package contains routines used for converting between internal
  --  JIS codes and the two external forms we support (EUC and Shift-JIS)
  
- pragma Compiler_Unit_Warning;
- 
  package System.WCh_JIS is
     pragma Pure;
  
--- 32,37 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wchstw.adb gcc-12.1.0/gcc/ada/libgnat/s-wchstw.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-wchstw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wchstw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wchstw.ads gcc-12.1.0/gcc/ada/libgnat/s-wchstw.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-wchstw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wchstw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wchwts.adb gcc-12.1.0/gcc/ada/libgnat/s-wchwts.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-wchwts.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wchwts.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wchwts.ads gcc-12.1.0/gcc/ada/libgnat/s-wchwts.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-wchwts.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wchwts.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widboo.adb gcc-12.1.0/gcc/ada/libgnat/s-widboo.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-widboo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widboo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widboo.ads gcc-12.1.0/gcc/ada/libgnat/s-widboo.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-widboo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widboo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widcha.adb gcc-12.1.0/gcc/ada/libgnat/s-widcha.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-widcha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widcha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widcha.ads gcc-12.1.0/gcc/ada/libgnat/s-widcha.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-widcha.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widcha.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widenu.adb gcc-12.1.0/gcc/ada/libgnat/s-widenu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-widenu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widenu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widenu.ads gcc-12.1.0/gcc/ada/libgnat/s-widenu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-widenu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widenu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widint.ads gcc-12.1.0/gcc/ada/libgnat/s-widint.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-widint.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widint.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,39 ****
  
  --  Width attribute for signed integers up to Integer
  
  with System.Width_I;
  
! package System.Wid_Int is
  
     function Width_Integer is new Width_I (Integer);
     pragma Pure_Function (Width_Integer);
--- 31,52 ----
  
  --  Width attribute for signed integers up to Integer
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
  with System.Width_I;
  
! package System.Wid_Int
!   with SPARK_Mode
! is
  
     function Width_Integer is new Width_I (Integer);
     pragma Pure_Function (Width_Integer);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widlli.adb gcc-12.1.0/gcc/ada/libgnat/s-widlli.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-widlli.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widlli.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widlli.ads gcc-12.1.0/gcc/ada/libgnat/s-widlli.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-widlli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widlli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,39 ****
  
  --  Width attribute for signed integers larger than Integer
  
  with System.Width_I;
  
! package System.Wid_LLI is
  
     function Width_Long_Long_Integer is new Width_I (Long_Long_Integer);
     pragma Pure_Function (Width_Long_Long_Integer);
--- 31,52 ----
  
  --  Width attribute for signed integers larger than Integer
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
  with System.Width_I;
  
! package System.Wid_LLI
!   with SPARK_Mode
! is
  
     function Width_Long_Long_Integer is new Width_I (Long_Long_Integer);
     pragma Pure_Function (Width_Long_Long_Integer);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widllli.ads gcc-12.1.0/gcc/ada/libgnat/s-widllli.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-widllli.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widllli.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,39 ****
  
  --  Width attribute for signed integers larger than Long_Long_Integer
  
  with System.Width_I;
  
! package System.Wid_LLLI is
  
     function Width_Long_Long_Long_Integer is
       new Width_I (Long_Long_Long_Integer);
--- 31,52 ----
  
  --  Width attribute for signed integers larger than Long_Long_Integer
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
  with System.Width_I;
  
! package System.Wid_LLLI
!   with SPARK_Mode
! is
  
     function Width_Long_Long_Long_Integer is
       new Width_I (Long_Long_Long_Integer);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widlllu.ads gcc-12.1.0/gcc/ada/libgnat/s-widlllu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-widlllu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widlllu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,41 ****
  
  --  Width attribute for modular integers larger than Long_Long_Integer
  
  with System.Width_U;
  with System.Unsigned_Types;
  
! package System.Wid_LLLU is
! 
     subtype Long_Long_Long_Unsigned is Unsigned_Types.Long_Long_Long_Unsigned;
  
     function Width_Long_Long_Long_Unsigned is
--- 31,53 ----
  
  --  Width attribute for modular integers larger than Long_Long_Integer
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
  with System.Width_U;
  with System.Unsigned_Types;
  
! package System.Wid_LLLU
!   with SPARK_Mode
! is
     subtype Long_Long_Long_Unsigned is Unsigned_Types.Long_Long_Long_Unsigned;
  
     function Width_Long_Long_Long_Unsigned is
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widllu.adb gcc-12.1.0/gcc/ada/libgnat/s-widllu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-widllu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widllu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widllu.ads gcc-12.1.0/gcc/ada/libgnat/s-widllu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-widllu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widllu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,41 ****
  
  --  Width attribute for modular integers larger than Integer
  
  with System.Width_U;
  with System.Unsigned_Types;
  
! package System.Wid_LLU is
! 
     subtype Long_Long_Unsigned is Unsigned_Types.Long_Long_Unsigned;
  
     function Width_Long_Long_Unsigned is new Width_U (Long_Long_Unsigned);
--- 31,53 ----
  
  --  Width attribute for modular integers larger than Integer
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
  with System.Width_U;
  with System.Unsigned_Types;
  
! package System.Wid_LLU
!   with SPARK_Mode
! is
     subtype Long_Long_Unsigned is Unsigned_Types.Long_Long_Unsigned;
  
     function Width_Long_Long_Unsigned is new Width_U (Long_Long_Unsigned);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widthi.adb gcc-12.1.0/gcc/ada/libgnat/s-widthi.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-widthi.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widthi.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,38 ****
--- 29,137 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
+ use Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
+ 
  function System.Width_I (Lo, Hi : Int) return Natural is
+ 
+    --  Ghost code, loop invariants and assertions in this unit are meant for
+    --  analysis only, not for run-time checking, as it would be too costly
+    --  otherwise. This is enforced by setting the assertion policy to Ignore.
+ 
+    pragma Assertion_Policy (Ghost          => Ignore,
+                             Loop_Invariant => Ignore,
+                             Assert         => Ignore);
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    package Signed_Conversion is new Signed_Conversions (Int => Int);
+ 
+    function Big (Arg : Int) return Big_Integer renames
+      Signed_Conversion.To_Big_Integer;
+ 
+    --  Maximum value of exponent for 10 that fits in Uns'Base
+    function Max_Log10 return Natural is
+      (case Int'Base'Size is
+         when 8   => 2,
+         when 16  => 4,
+         when 32  => 9,
+         when 64  => 19,
+         when 128 => 38,
+         when others => raise Program_Error)
+    with Ghost;
+ 
+    ------------------
+    -- Local Lemmas --
+    ------------------
+ 
+    procedure Lemma_Lower_Mult (A, B, C : Big_Natural)
+    with
+      Ghost,
+      Pre  => A <= B,
+      Post => A * C <= B * C;
+ 
+    procedure Lemma_Div_Commutation (X, Y : Int)
+    with
+      Ghost,
+      Pre  => X >= 0 and Y > 0,
+      Post => Big (X) / Big (Y) = Big (X / Y);
+ 
+    procedure Lemma_Div_Twice (X : Big_Natural; Y, Z : Big_Positive)
+    with
+      Ghost,
+      Post => X / Y / Z = X / (Y * Z);
+ 
+    ----------------------
+    -- Lemma_Lower_Mult --
+    ----------------------
+ 
+    procedure Lemma_Lower_Mult (A, B, C : Big_Natural) is null;
+ 
+    ---------------------------
+    -- Lemma_Div_Commutation --
+    ---------------------------
+ 
+    procedure Lemma_Div_Commutation (X, Y : Int) is null;
+ 
+    ---------------------
+    -- Lemma_Div_Twice --
+    ---------------------
+ 
+    procedure Lemma_Div_Twice (X : Big_Natural; Y, Z : Big_Positive) is
+       XY  : constant Big_Natural := X / Y;
+       YZ  : constant Big_Natural := Y * Z;
+       XYZ : constant Big_Natural := X / Y / Z;
+       R   : constant Big_Natural := (XY rem Z) * Y + (X rem Y);
+    begin
+       pragma Assert (X = XY * Y + (X rem Y));
+       pragma Assert (XY = XY / Z * Z + (XY rem Z));
+       pragma Assert (X = XYZ * YZ + R);
+       pragma Assert ((XY rem Z) * Y <= (Z - 1) * Y);
+       pragma Assert (R <= YZ - 1);
+       pragma Assert (X / YZ = (XYZ * YZ + R) / YZ);
+       pragma Assert (X / YZ = XYZ + R / YZ);
+    end Lemma_Div_Twice;
+ 
+    --  Local variables
+ 
     W : Natural;
     T : Int;
  
+    --  Local ghost variables
+ 
+    Max_W  : constant Natural := Max_Log10 with Ghost;
+    Big_10 : constant Big_Integer := Big (10) with Ghost;
+ 
+    Pow    : Big_Integer := 1 with Ghost;
+    T_Init : constant Int :=
+      Int'Max (abs (Int'Max (Lo, Int'First + 1)),
+               abs (Int'Max (Hi, Int'First + 1)))
+      with Ghost;
+ 
+ --  Start of processing for System.Width_I
+ 
  begin
     if Lo > Hi then
        return 0;
*************** begin
*** 52,61 ****
--- 151,191 ----
        --  Increase value if more digits required
  
        while T >= 10 loop
+          Lemma_Div_Commutation (T, 10);
+          Lemma_Div_Twice (Big (T_Init), Big_10 ** (W - 2), Big_10);
+ 
           T := T / 10;
           W := W + 1;
+          Pow := Pow * 10;
+ 
+          pragma Loop_Invariant (T >= 0);
+          pragma Loop_Invariant (W in 3 .. Max_W + 3);
+          pragma Loop_Invariant (Pow = Big_10 ** (W - 2));
+          pragma Loop_Invariant (Big (T) = Big (T_Init) / Pow);
+          pragma Loop_Variant (Decreases => T);
        end loop;
  
+       declare
+          F : constant Big_Integer := Big_10 ** (W - 2) with Ghost;
+          Q : constant Big_Integer := Big (T_Init) / F with Ghost;
+          R : constant Big_Integer := Big (T_Init) rem F with Ghost;
+       begin
+          pragma Assert (Q < Big_10);
+          pragma Assert (Big (T_Init) = Q * F + R);
+          Lemma_Lower_Mult (Q, Big (9), F);
+          pragma Assert (Big (T_Init) <= Big (9) * F + F - 1);
+          pragma Assert (Big (T_Init) < Big_10 * F);
+          pragma Assert (Big_10 * F = Big_10 ** (W - 1));
+       end;
+ 
+       --  This is an expression of the functional postcondition for Width_I,
+       --  which cannot be expressed readily as a postcondition as this would
+       --  require making the instantiation Signed_Conversion and function Big
+       --  available from the spec.
+ 
+       pragma Assert (Big (Int'Max (Lo, Int'First + 1)) < Big_10 ** (W - 1));
+       pragma Assert (Big (Int'Max (Hi, Int'First + 1)) < Big_10 ** (W - 1));
+ 
        return W;
     end if;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widthi.ads gcc-12.1.0/gcc/ada/libgnat/s-widthi.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-widthi.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widthi.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** generic
*** 36,39 ****
  
     type Int is range <>;
  
! function System.Width_I (Lo, Hi : Int) return Natural;
--- 36,44 ----
  
     type Int is range <>;
  
! function System.Width_I (Lo, Hi : Int) return Natural
! with
!   Post => (if Lo > Hi then
!              System.Width_I'Result = 0
!            else
!              System.Width_I'Result > 0);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widthu.adb gcc-12.1.0/gcc/ada/libgnat/s-widthu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-widthu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widthu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,59 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
  function System.Width_U (Lo, Hi : Uns) return Natural is
     W : Natural;
     T : Uns;
  
  begin
     if Lo > Hi then
        return 0;
  
     else
!       --  Minimum value is 2, one for sign, one for digit
  
        W := 2;
  
!       --  Get max of absolute values, but avoid bomb if we have the maximum
!       --  negative number (note that First + 1 has same digits as First)
  
        T := Uns'Max (Lo, Hi);
  
        --  Increase value if more digits required
  
        while T >= 10 loop
           T := T / 10;
           W := W + 1;
        end loop;
  
        return W;
     end if;
  
--- 29,184 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
+ use Ada.Numerics.Big_Numbers.Big_Integers_Ghost;
+ 
  function System.Width_U (Lo, Hi : Uns) return Natural is
+ 
+    --  Ghost code, loop invariants and assertions in this unit are meant for
+    --  analysis only, not for run-time checking, as it would be too costly
+    --  otherwise. This is enforced by setting the assertion policy to Ignore.
+ 
+    pragma Assertion_Policy (Ghost          => Ignore,
+                             Loop_Invariant => Ignore,
+                             Assert         => Ignore);
+ 
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    package Unsigned_Conversion is new Unsigned_Conversions (Int => Uns);
+ 
+    function Big (Arg : Uns) return Big_Integer renames
+      Unsigned_Conversion.To_Big_Integer;
+ 
+    --  Maximum value of exponent for 10 that fits in Uns'Base
+    function Max_Log10 return Natural is
+      (case Uns'Base'Size is
+         when 8   => 2,
+         when 16  => 4,
+         when 32  => 9,
+         when 64  => 19,
+         when 128 => 38,
+         when others => raise Program_Error)
+    with Ghost;
+ 
+    ------------------
+    -- Local Lemmas --
+    ------------------
+ 
+    procedure Lemma_Lower_Mult (A, B, C : Big_Natural)
+    with
+      Ghost,
+      Pre  => A <= B,
+      Post => A * C <= B * C;
+ 
+    procedure Lemma_Div_Commutation (X, Y : Uns)
+    with
+      Ghost,
+      Pre  => Y /= 0,
+      Post => Big (X) / Big (Y) = Big (X / Y);
+ 
+    procedure Lemma_Div_Twice (X : Big_Natural; Y, Z : Big_Positive)
+    with
+      Ghost,
+      Post => X / Y / Z = X / (Y * Z);
+ 
+    ----------------------
+    -- Lemma_Lower_Mult --
+    ----------------------
+ 
+    procedure Lemma_Lower_Mult (A, B, C : Big_Natural) is null;
+ 
+    ---------------------------
+    -- Lemma_Div_Commutation --
+    ---------------------------
+ 
+    procedure Lemma_Div_Commutation (X, Y : Uns) is null;
+ 
+    ---------------------
+    -- Lemma_Div_Twice --
+    ---------------------
+ 
+    procedure Lemma_Div_Twice (X : Big_Natural; Y, Z : Big_Positive) is
+       XY  : constant Big_Natural := X / Y;
+       YZ  : constant Big_Natural := Y * Z;
+       XYZ : constant Big_Natural := X / Y / Z;
+       R   : constant Big_Natural := (XY rem Z) * Y + (X rem Y);
+    begin
+       pragma Assert (X = XY * Y + (X rem Y));
+       pragma Assert (XY = XY / Z * Z + (XY rem Z));
+       pragma Assert (X = XYZ * YZ + R);
+       pragma Assert ((XY rem Z) * Y <= (Z - 1) * Y);
+       pragma Assert (R <= YZ - 1);
+       pragma Assert (X / YZ = (XYZ * YZ + R) / YZ);
+       pragma Assert (X / YZ = XYZ + R / YZ);
+    end Lemma_Div_Twice;
+ 
+    --  Local variables
+ 
     W : Natural;
     T : Uns;
  
+    --  Local ghost variables
+ 
+    Max_W  : constant Natural := Max_Log10 with Ghost;
+    Big_10 : constant Big_Integer := Big (10) with Ghost;
+ 
+    Pow    : Big_Integer := 1 with Ghost;
+    T_Init : constant Uns := Uns'Max (Lo, Hi) with Ghost;
+ 
+ --  Start of processing for System.Width_U
+ 
  begin
     if Lo > Hi then
        return 0;
  
     else
!       --  Minimum value is 2, one for space, one for digit
  
        W := 2;
  
!       --  Get max of absolute values
  
        T := Uns'Max (Lo, Hi);
  
        --  Increase value if more digits required
  
        while T >= 10 loop
+          Lemma_Div_Commutation (T, 10);
+          Lemma_Div_Twice (Big (T_Init), Big_10 ** (W - 2), Big_10);
+ 
           T := T / 10;
           W := W + 1;
+          Pow := Pow * 10;
+ 
+          pragma Loop_Invariant (W in 3 .. Max_W + 3);
+          pragma Loop_Invariant (Pow = Big_10 ** (W - 2));
+          pragma Loop_Invariant (Big (T) = Big (T_Init) / Pow);
+          pragma Loop_Variant (Decreases => T);
        end loop;
  
+       declare
+          F : constant Big_Integer := Big_10 ** (W - 2) with Ghost;
+          Q : constant Big_Integer := Big (T_Init) / F with Ghost;
+          R : constant Big_Integer := Big (T_Init) rem F with Ghost;
+       begin
+          pragma Assert (Q < Big_10);
+          pragma Assert (Big (T_Init) = Q * F + R);
+          Lemma_Lower_Mult (Q, Big (9), F);
+          pragma Assert (Big (T_Init) <= Big (9) * F + F - 1);
+          pragma Assert (Big (T_Init) < Big_10 * F);
+          pragma Assert (Big_10 * F = Big_10 ** (W - 1));
+       end;
+ 
+       --  This is an expression of the functional postcondition for Width_U,
+       --  which cannot be expressed readily as a postcondition as this would
+       --  require making the instantiation Unsigned_Conversion and function
+       --  Big available from the spec.
+ 
+       pragma Assert (Big (Lo) < Big_10 ** (W - 1));
+       pragma Assert (Big (Hi) < Big_10 ** (W - 1));
+ 
        return W;
     end if;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widthu.ads gcc-12.1.0/gcc/ada/libgnat/s-widthu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-widthu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widthu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** generic
*** 36,39 ****
  
     type Uns is mod <>;
  
! function System.Width_U (Lo, Hi : Uns) return Natural;
--- 36,44 ----
  
     type Uns is mod <>;
  
! function System.Width_U (Lo, Hi : Uns) return Natural
! with
!   Post => (if Lo > Hi then
!              System.Width_U'Result = 0
!            else
!              System.Width_U'Result > 0);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widuns.ads gcc-12.1.0/gcc/ada/libgnat/s-widuns.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-widuns.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widuns.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,41 ****
  
  --  Width attribute for modular integers up to Integer
  
  with System.Width_U;
  with System.Unsigned_Types;
  
! package System.Wid_Uns is
! 
     subtype Unsigned is Unsigned_Types.Unsigned;
  
     function Width_Unsigned is new Width_U (Unsigned);
--- 31,53 ----
  
  --  Width attribute for modular integers up to Integer
  
+ --  Preconditions in this unit are meant for analysis only, not for run-time
+ --  checking, so that the expected exceptions are raised. This is enforced by
+ --  setting the corresponding assertion policy to Ignore. Postconditions and
+ --  contract cases should not be executed at runtime as well, in order not to
+ --  slow down the execution of these functions.
+ 
+ pragma Assertion_Policy (Pre            => Ignore,
+                          Post           => Ignore,
+                          Contract_Cases => Ignore,
+                          Ghost          => Ignore);
+ 
  with System.Width_U;
  with System.Unsigned_Types;
  
! package System.Wid_Uns
!   with SPARK_Mode
! is
     subtype Unsigned is Unsigned_Types.Unsigned;
  
     function Width_Unsigned is new Width_U (Unsigned);
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widwch.adb gcc-12.1.0/gcc/ada/libgnat/s-widwch.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-widwch.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widwch.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-widwch.ads gcc-12.1.0/gcc/ada/libgnat/s-widwch.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-widwch.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-widwch.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-win32.ads gcc-12.1.0/gcc/ada/libgnat/s-win32.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-win32.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-win32.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2008-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-winext.ads gcc-12.1.0/gcc/ada/libgnat/s-winext.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-winext.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-winext.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --         Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wwdcha.adb gcc-12.1.0/gcc/ada/libgnat/s-wwdcha.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-wwdcha.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wwdcha.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wwdcha.ads gcc-12.1.0/gcc/ada/libgnat/s-wwdcha.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-wwdcha.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wwdcha.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wwdenu.adb gcc-12.1.0/gcc/ada/libgnat/s-wwdenu.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-wwdenu.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wwdenu.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wwdenu.ads gcc-12.1.0/gcc/ada/libgnat/s-wwdenu.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-wwdenu.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wwdenu.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wwdwch.adb gcc-12.1.0/gcc/ada/libgnat/s-wwdwch.adb
*** gcc-11.3.0/gcc/ada/libgnat/s-wwdwch.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wwdwch.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/s-wwdwch.ads gcc-12.1.0/gcc/ada/libgnat/s-wwdwch.ads
*** gcc-11.3.0/gcc/ada/libgnat/s-wwdwch.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/s-wwdwch.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-aix.ads gcc-12.1.0/gcc/ada/libgnat/system-aix.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-aix.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-aix.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                            (AIX/PPC Version)                             --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                            (AIX/PPC Version)                             --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-darwin-arm.ads gcc-12.1.0/gcc/ada/libgnat/system-darwin-arm.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-darwin-arm.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-darwin-arm.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (Darwin/ARM Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (Darwin/ARM Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-darwin-ppc.ads gcc-12.1.0/gcc/ada/libgnat/system-darwin-ppc.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-darwin-ppc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-darwin-ppc.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (Darwin/PPC Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (Darwin/PPC Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-darwin-x86.ads gcc-12.1.0/gcc/ada/libgnat/system-darwin-x86.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-darwin-x86.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-darwin-x86.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (Darwin/x86 Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (Darwin/x86 Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-djgpp.ads gcc-12.1.0/gcc/ada/libgnat/system-djgpp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-djgpp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-djgpp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                            (DJGPP Version)                               --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                            (DJGPP Version)                               --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-dragonfly-x86_64.ads gcc-12.1.0/gcc/ada/libgnat/system-dragonfly-x86_64.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-dragonfly-x86_64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-dragonfly-x86_64.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                      (DragonFly BSD/x86_64 Version)                      --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                      (DragonFly BSD/x86_64 Version)                      --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-freebsd.ads gcc-12.1.0/gcc/ada/libgnat/system-freebsd.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-freebsd.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-freebsd.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                            (FreeBSD Version)                             --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                            (FreeBSD Version)                             --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-hpux-ia64.ads gcc-12.1.0/gcc/ada/libgnat/system-hpux-ia64.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-hpux-ia64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-hpux-ia64.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                           (HP-UX/ia64 Version)                           --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                           (HP-UX/ia64 Version)                           --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-hpux.ads gcc-12.1.0/gcc/ada/libgnat/system-hpux.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-hpux.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-hpux.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                             (HP-UX Version)                              --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                             (HP-UX Version)                              --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-linux-alpha.ads gcc-12.1.0/gcc/ada/libgnat/system-linux-alpha.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-linux-alpha.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-linux-alpha.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                        (GNU-Linux/alpha Version)                         --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                        (GNU-Linux/alpha Version)                         --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-linux-arm.ads gcc-12.1.0/gcc/ada/libgnat/system-linux-arm.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-linux-arm.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-linux-arm.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                        (GNU-Linux/ARM Version)                           --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                        (GNU-Linux/ARM Version)                           --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-linux-hppa.ads gcc-12.1.0/gcc/ada/libgnat/system-linux-hppa.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-linux-hppa.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-linux-hppa.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                        (GNU/Linux-HPPA Version)                          --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                        (GNU/Linux-HPPA Version)                          --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-linux-ia64.ads gcc-12.1.0/gcc/ada/libgnat/system-linux-ia64.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-linux-ia64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-linux-ia64.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                        (GNU-Linux/ia64 Version)                          --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                        (GNU-Linux/ia64 Version)                          --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-linux-m68k.ads gcc-12.1.0/gcc/ada/libgnat/system-linux-m68k.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-linux-m68k.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-linux-m68k.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                         (GNU/Linux/m68k Version)                         --
  --                                                                          --
! --          Copyright (C) 2014-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                         (GNU/Linux/m68k Version)                         --
  --                                                                          --
! --          Copyright (C) 2014-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-linux-mips.ads gcc-12.1.0/gcc/ada/libgnat/system-linux-mips.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-linux-mips.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-linux-mips.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (GNU-Linux/MIPS Version)                        --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (GNU-Linux/MIPS Version)                        --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-linux-ppc.ads gcc-12.1.0/gcc/ada/libgnat/system-linux-ppc.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-linux-ppc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-linux-ppc.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                         (GNU-Linux/PPC Version)                          --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                         (GNU-Linux/PPC Version)                          --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-linux-riscv.ads gcc-12.1.0/gcc/ada/libgnat/system-linux-riscv.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-linux-riscv.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-linux-riscv.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (GNU-Linux/RISC-V Version)                      --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (GNU-Linux/RISC-V Version)                      --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-linux-s390.ads gcc-12.1.0/gcc/ada/libgnat/system-linux-s390.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-linux-s390.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-linux-s390.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (GNU-Linux/s390 Version)                        --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (GNU-Linux/s390 Version)                        --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-linux-sh4.ads gcc-12.1.0/gcc/ada/libgnat/system-linux-sh4.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-linux-sh4.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-linux-sh4.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                         (GNU-Linux/sh4 Version)                          --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                         (GNU-Linux/sh4 Version)                          --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-linux-sparc.ads gcc-12.1.0/gcc/ada/libgnat/system-linux-sparc.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-linux-sparc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-linux-sparc.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (GNU/Linux-SPARC Version)                       --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (GNU/Linux-SPARC Version)                       --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-linux-x86.ads gcc-12.1.0/gcc/ada/libgnat/system-linux-x86.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-linux-x86.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-linux-x86.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                         (GNU-Linux/x86 Version)                          --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                         (GNU-Linux/x86 Version)                          --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-lynxos178-ppc.ads gcc-12.1.0/gcc/ada/libgnat/system-lynxos178-ppc.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-lynxos178-ppc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-lynxos178-ppc.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                         (LynxOS-178 PPC Version)                         --
  --                                                                          --
! --          Copyright (C) 2009-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                         (LynxOS-178 PPC Version)                         --
  --                                                                          --
! --          Copyright (C) 2009-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-lynxos178-x86.ads gcc-12.1.0/gcc/ada/libgnat/system-lynxos178-x86.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-lynxos178-x86.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-lynxos178-x86.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                         (LynxOS-178 X86 Version)                         --
  --                                                                          --
! --          Copyright (C) 2009-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                         (LynxOS-178 X86 Version)                         --
  --                                                                          --
! --          Copyright (C) 2009-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-mingw.ads gcc-12.1.0/gcc/ada/libgnat/system-mingw.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-mingw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-mingw.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                            (Windows Version)                             --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                            (Windows Version)                             --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-qnx-aarch64.ads gcc-12.1.0/gcc/ada/libgnat/system-qnx-aarch64.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-qnx-aarch64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-qnx-aarch64.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                         (QNX/Aarch64 Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                         (QNX/Aarch64 Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-rtems.ads gcc-12.1.0/gcc/ada/libgnat/system-rtems.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-rtems.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-rtems.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                            (Compiler Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                            (Compiler Version)                            --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
*************** package System is
*** 109,123 ****
     --             hardware priority levels.  Protected Object ceilings can
     --             override these values.
     --  245        is used by the Interrupt_Manager task
!    --  0          is reserved for the RTEMS IDLE task and really should not
!    --             be accessible from Ada but GNAT initializes
!    --             Current_Priority to 0 so it must be valid
  
     Max_Priority           : constant Positive := 244;
     Max_Interrupt_Priority : constant Positive := 254;
  
!    subtype Any_Priority       is Integer      range   0 .. 254;
!    subtype Priority           is Any_Priority range   0 .. 244;
     subtype Interrupt_Priority is Any_Priority range 245 .. 254;
  
     Default_Priority : constant Priority := 122;
--- 109,121 ----
     --             hardware priority levels.  Protected Object ceilings can
     --             override these values.
     --  245        is used by the Interrupt_Manager task
!    --  0          is reserved for the RTEMS IDLE task
  
     Max_Priority           : constant Positive := 244;
     Max_Interrupt_Priority : constant Positive := 254;
  
!    subtype Any_Priority       is Integer      range   1 .. 254;
!    subtype Priority           is Any_Priority range   1 .. 244;
     subtype Interrupt_Priority is Any_Priority range 245 .. 254;
  
     Default_Priority : constant Priority := 122;
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-solaris-sparc.ads gcc-12.1.0/gcc/ada/libgnat/system-solaris-sparc.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-solaris-sparc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-solaris-sparc.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (SUN Solaris Version)                           --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (SUN Solaris Version)                           --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-solaris-x86.ads gcc-12.1.0/gcc/ada/libgnat/system-solaris-x86.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-solaris-x86.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-solaris-x86.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (x86 Solaris Version)                           --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (x86 Solaris Version)                           --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (VxWorks 6.x ARM RTP)                           --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (VxWorks 6.x ARM RTP)                           --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-arm-rtp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-arm-rtp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-arm-rtp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-arm-rtp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (VxWorks 6.x ARM RTP)                           --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (VxWorks 6.x ARM RTP)                           --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-arm.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-arm.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-arm.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-arm.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (VxWorks Version ARM)                           --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (VxWorks Version ARM)                           --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-e500-kernel.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-e500-kernel.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-e500-kernel.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-e500-kernel.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                      (VxWorks 6 Kernel Version E500)                     --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                      (VxWorks 6 Kernel Version E500)                     --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                        (VxWorks 6.x SMP E500 RTP)                        --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                        (VxWorks 6.x SMP E500 RTP)                        --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-e500-rtp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-e500-rtp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-e500-rtp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-e500-rtp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (VxWorks 6.x E500 RTP)                          --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (VxWorks 6.x E500 RTP)                          --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-e500-vthread.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-e500-vthread.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-e500-vthread.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-e500-vthread.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,162 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                      (VxWorks e500 AE653 vThreads)                       --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version is for the AE653/e500v2 vThreads full run-time
- 
- package System is
-    pragma Pure;
-    --  Note that we take advantage of the implementation permission to make
-    --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
-    --  2005, this is Pure in any case (AI-362).
- 
-    pragma No_Elaboration_Code_All;
-    --  Allow the use of that restriction in units that WITH this unit
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int             : constant := -2 ** (Standard'Max_Integer_Size - 1);
-    Max_Int             : constant :=  2 ** (Standard'Max_Integer_Size - 1) - 1;
- 
-    Max_Binary_Modulus    : constant := 2 ** Standard'Max_Integer_Size;
-    Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := Standard'Max_Integer_Size - 1;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    pragma Preelaborable_Initialization (Address);
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
-    pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  Ada priorities are mapped to VxWorks priorities using the following
-    --  transformation: 255 - Ada Priority
- 
-    --  Ada priorities are used as follows:
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := True;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    Preallocated_Stacks       : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := True;
-    Stack_Check_Limits        : constant Boolean := False;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Always_Compatible_Rep     : constant Boolean := False;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    Frontend_Exceptions       : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
- 
-    Executable_Extension : constant String := ".out";
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                      (VxWorks 6 Kernel Version PPC)                      --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                      (VxWorks 6 Kernel Version PPC)                      --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-ppc-ravenscar.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-ppc-ravenscar.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-ppc-ravenscar.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-ppc-ravenscar.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,185 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                   (VxWorks/HIE Ravenscar Version PPC)                    --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This is a Ravenscar VxWorks version of this package for PowerPC targets
- 
- pragma Restrictions (No_Exception_Propagation);
- --  Only local exception handling is supported in this profile
- 
- pragma Restrictions (No_Exception_Registration);
- --  Disable exception name registration. This capability is not used because
- --  it is only required by exception stream attributes which are not supported
- --  in this run time.
- 
- pragma Restrictions (No_Implicit_Dynamic_Code);
- --  Pointers to nested subprograms are not allowed in this run time, in order
- --  to prevent the compiler from building "trampolines".
- 
- pragma Restrictions (No_Finalization);
- --  Controlled types are not supported in this run time
- 
- pragma Profile (Ravenscar);
- --  This is a Ravenscar run time
- 
- pragma Discard_Names;
- --  Disable explicitly the generation of names associated with entities in
- --  order to reduce the amount of storage used. These names are not used anyway
- --  (attributes such as 'Image and 'Value are not supported in this run time).
- 
- package System is
-    pragma Pure;
-    --  Note that we take advantage of the implementation permission to make
-    --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
-    --  2005, this is Pure in any case (AI-362).
- 
-    pragma No_Elaboration_Code_All;
-    --  Allow the use of that restriction in units that WITH this unit
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int             : constant := -2 ** (Standard'Max_Integer_Size - 1);
-    Max_Int             : constant :=  2 ** (Standard'Max_Integer_Size - 1) - 1;
- 
-    Max_Binary_Modulus    : constant := 2 ** Standard'Max_Integer_Size;
-    Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := Standard'Max_Integer_Size - 1;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    pragma Preelaborable_Initialization (Address);
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
-    pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  Ada priorities are mapped to VxWorks priorities using the following
-    --  transformation: 255 - Ada Priority
- 
-    --  Ada priorities are used as follows:
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := True;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := True;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := True;
-    Exit_Status_Supported     : constant Boolean := True;
-    Machine_Overflows         : constant Boolean := True;
-    Machine_Rounds            : constant Boolean := True;
-    Preallocated_Stacks       : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Stack_Check_Limits        : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Always_Compatible_Rep     : constant Boolean := True;
-    Suppress_Standard_Library : constant Boolean := True;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    Frontend_Exceptions       : constant Boolean := True;
-    ZCX_By_Default            : constant Boolean := False;
- 
-    Executable_Extension : constant String := ".out";
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                        (VxWorks 6.x SMP PPC RTP)                         --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                        (VxWorks 6.x SMP PPC RTP)                         --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (VxWorks 6.x PPC RTP)                           --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (VxWorks 6.x PPC RTP)                           --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-ppc-vthread.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-ppc-vthread.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-ppc-vthread.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-ppc-vthread.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,162 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                       (VxWorks PPC AE653 vThreads)                       --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version is for the AE653 vThreads full run-time
- 
- package System is
-    pragma Pure;
-    --  Note that we take advantage of the implementation permission to make
-    --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
-    --  2005, this is Pure in any case (AI-362).
- 
-    pragma No_Elaboration_Code_All;
-    --  Allow the use of that restriction in units that WITH this unit
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int             : constant := -2 ** (Standard'Max_Integer_Size - 1);
-    Max_Int             : constant :=  2 ** (Standard'Max_Integer_Size - 1) - 1;
- 
-    Max_Binary_Modulus    : constant := 2 ** Standard'Max_Integer_Size;
-    Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := Standard'Max_Integer_Size - 1;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    pragma Preelaborable_Initialization (Address);
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
-    pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  Ada priorities are mapped to VxWorks priorities using the following
-    --  transformation: 255 - Ada Priority
- 
-    --  Ada priorities are used as follows:
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := True;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Machine_Overflows         : constant Boolean := True;
-    Machine_Rounds            : constant Boolean := True;
-    Preallocated_Stacks       : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := True;
-    Stack_Check_Limits        : constant Boolean := False;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Always_Compatible_Rep     : constant Boolean := False;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    Frontend_Exceptions       : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
- 
-    Executable_Extension : constant String := ".out";
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-ppc.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-ppc.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-ppc.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-ppc.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,163 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                         (VxWorks 5 Version PPC)                          --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
-    pragma Pure;
-    --  Note that we take advantage of the implementation permission to make
-    --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
-    --  2005, this is Pure in any case (AI-362).
- 
-    pragma No_Elaboration_Code_All;
-    --  Allow the use of that restriction in units that WITH this unit
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int             : constant := -2 ** (Standard'Max_Integer_Size - 1);
-    Max_Int             : constant :=  2 ** (Standard'Max_Integer_Size - 1) - 1;
- 
-    Max_Binary_Modulus    : constant := 2 ** Standard'Max_Integer_Size;
-    Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := Standard'Max_Integer_Size - 1;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    pragma Preelaborable_Initialization (Address);
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := High_Order_First;
-    pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  Ada priorities are mapped to VxWorks priorities using the following
-    --  transformation: 255 - Ada Priority
- 
-    --  Ada priorities are used as follows:
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    pragma Linker_Options ("--specs=vxworks-ppc-link.spec");
-    --  Setup proper set of -L's for this configuration
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := True;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    Preallocated_Stacks       : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Stack_Check_Limits        : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Always_Compatible_Rep     : constant Boolean := False;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    Frontend_Exceptions       : constant Boolean := True;
-    ZCX_By_Default            : constant Boolean := False;
- 
-    Executable_Extension : constant String := ".out";
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-x86-kernel.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-x86-kernel.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-x86-kernel.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-x86-kernel.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                      (VxWorks 6 Kernel Version x86)                      --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                      (VxWorks 6 Kernel Version x86)                      --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                    (VxWorks Version x86 for SMP RTPs)                    --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                    (VxWorks Version x86 for SMP RTPs)                    --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-x86-rtp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-x86-rtp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-x86-rtp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-x86-rtp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                     (VxWorks Version x86 for RTPs)                       --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                     (VxWorks Version x86 for RTPs)                       --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-x86-vthread.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-x86-vthread.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-x86-vthread.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-x86-vthread.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,163 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                         (VxWorks 653 x86 vThreads)                       --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  This version is for the AE653 vThreads full run-time
- 
- package System is
-    pragma Pure;
-    --  Note that we take advantage of the implementation permission to make
-    --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
-    --  2005, this is Pure in any case (AI-362).
- 
-    pragma No_Elaboration_Code_All;
-    --  Allow the use of that restriction in units that WITH this unit
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int             : constant := -2 ** (Standard'Max_Integer_Size - 1);
-    Max_Int             : constant :=  2 ** (Standard'Max_Integer_Size - 1) - 1;
- 
-    Max_Binary_Modulus    : constant := 2 ** Standard'Max_Integer_Size;
-    Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := Standard'Max_Integer_Size - 1;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    pragma Preelaborable_Initialization (Address);
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
-    pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  Ada priorities are mapped to VxWorks priorities using the following
-    --  transformation: 255 - Ada Priority
- 
-    --  Ada priorities are used as follows:
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := True;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Machine_Overflows         : constant Boolean := True;
-    Machine_Rounds            : constant Boolean := True;
-    Preallocated_Stacks       : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := True;
-    Stack_Check_Limits        : constant Boolean := False;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Atomic_Primitives : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Always_Compatible_Rep     : constant Boolean := False;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    Frontend_Exceptions       : constant Boolean := False;
-    ZCX_By_Default            : constant Boolean := False;
- 
-    Executable_Extension : constant String := ".out";
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks-x86.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks-x86.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks-x86.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks-x86.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,164 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                        GNAT RUN-TIME COMPONENTS                          --
- --                                                                          --
- --                               S Y S T E M                                --
- --                                                                          --
- --                                 S p e c                                  --
- --                         (VxWorks 5 Version x86)                          --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- This specification is derived from the Ada Reference Manual for use with --
- -- GNAT. The copyright notice above, and the license provisions that follow --
- -- apply solely to the  contents of the part following the private keyword. --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
- --                                                                          --
- -- 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/>.                                          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- package System is
-    pragma Pure;
-    --  Note that we take advantage of the implementation permission to make
-    --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
-    --  2005, this is Pure in any case (AI-362).
- 
-    pragma No_Elaboration_Code_All;
-    --  Allow the use of that restriction in units that WITH this unit
- 
-    type Name is (SYSTEM_NAME_GNAT);
-    System_Name : constant Name := SYSTEM_NAME_GNAT;
- 
-    --  System-Dependent Named Numbers
- 
-    Min_Int             : constant := -2 ** (Standard'Max_Integer_Size - 1);
-    Max_Int             : constant :=  2 ** (Standard'Max_Integer_Size - 1) - 1;
- 
-    Max_Binary_Modulus    : constant := 2 ** Standard'Max_Integer_Size;
-    Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
- 
-    Max_Base_Digits       : constant := Long_Long_Float'Digits;
-    Max_Digits            : constant := Long_Long_Float'Digits;
- 
-    Max_Mantissa          : constant := Standard'Max_Integer_Size - 1;
-    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
- 
-    Tick                  : constant := 1.0 / 60.0;
- 
-    --  Storage-related Declarations
- 
-    type Address is private;
-    pragma Preelaborable_Initialization (Address);
-    Null_Address : constant Address;
- 
-    Storage_Unit : constant := 8;
-    Word_Size    : constant := 32;
-    Memory_Size  : constant := 2 ** 32;
- 
-    --  Address comparison
- 
-    function "<"  (Left, Right : Address) return Boolean;
-    function "<=" (Left, Right : Address) return Boolean;
-    function ">"  (Left, Right : Address) return Boolean;
-    function ">=" (Left, Right : Address) return Boolean;
-    function "="  (Left, Right : Address) return Boolean;
- 
-    pragma Import (Intrinsic, "<");
-    pragma Import (Intrinsic, "<=");
-    pragma Import (Intrinsic, ">");
-    pragma Import (Intrinsic, ">=");
-    pragma Import (Intrinsic, "=");
- 
-    --  Other System-Dependent Declarations
- 
-    type Bit_Order is (High_Order_First, Low_Order_First);
-    Default_Bit_Order : constant Bit_Order := Low_Order_First;
-    pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
- 
-    --  Priority-related Declarations (RM D.1)
- 
-    --  Ada priorities are mapped to VxWorks priorities using the following
-    --  transformation: 255 - Ada Priority
- 
-    --  Ada priorities are used as follows:
- 
-    --  256        is reserved for the VxWorks kernel
-    --  248 - 255  correspond to hardware interrupt levels 0 .. 7
-    --  247        is a catchall default "interrupt" priority for signals,
-    --             allowing higher priority than normal tasks, but lower than
-    --             hardware priority levels.  Protected Object ceilings can
-    --             override these values.
-    --  246        is used by the Interrupt_Manager task
- 
-    Max_Priority           : constant Positive := 245;
-    Max_Interrupt_Priority : constant Positive := 255;
- 
-    subtype Any_Priority       is Integer      range   0 .. 255;
-    subtype Priority           is Any_Priority range   0 .. 245;
-    subtype Interrupt_Priority is Any_Priority range 246 .. 255;
- 
-    Default_Priority : constant Priority := 122;
- 
- private
- 
-    pragma Linker_Options ("--specs=vxworks-x86-link.spec");
-    --  Setup proper set of -L's for this configuration
- 
-    type Address is mod Memory_Size;
-    Null_Address : constant Address := 0;
- 
-    --------------------------------------
-    -- System Implementation Parameters --
-    --------------------------------------
- 
-    --  These parameters provide information about the target that is used
-    --  by the compiler. They are in the private part of System, where they
-    --  can be accessed using the special circuitry in the Targparm unit
-    --  whose source should be consulted for more detailed descriptions
-    --  of the individual switch values.
- 
-    Backend_Divide_Checks     : constant Boolean := False;
-    Backend_Overflow_Checks   : constant Boolean := True;
-    Command_Line_Args         : constant Boolean := False;
-    Configurable_Run_Time     : constant Boolean := False;
-    Denorm                    : constant Boolean := True;
-    Duration_32_Bits          : constant Boolean := False;
-    Exit_Status_Supported     : constant Boolean := True;
-    Machine_Overflows         : constant Boolean := False;
-    Machine_Rounds            : constant Boolean := True;
-    Preallocated_Stacks       : constant Boolean := False;
-    Signed_Zeros              : constant Boolean := True;
-    Stack_Check_Default       : constant Boolean := False;
-    Stack_Check_Probes        : constant Boolean := False;
-    Stack_Check_Limits        : constant Boolean := True;
-    Support_Aggregates        : constant Boolean := True;
-    Support_Atomic_Primitives : constant Boolean := True;
-    Support_Composite_Assign  : constant Boolean := True;
-    Support_Composite_Compare : constant Boolean := True;
-    Support_Long_Shifts       : constant Boolean := True;
-    Always_Compatible_Rep     : constant Boolean := False;
-    Suppress_Standard_Library : constant Boolean := False;
-    Use_Ada_Main_Program_Name : constant Boolean := True;
-    Frontend_Exceptions       : constant Boolean := True;
-    ZCX_By_Default            : constant Boolean := False;
- 
-    Executable_Extension : constant String := ".out";
- 
- end System;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                        (VxWorks 7.x AARCH64 RTP)                         --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                        (VxWorks 7.x AARCH64 RTP)                         --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-aarch64.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-aarch64.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-aarch64.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-aarch64.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                      (VxWorks 7.x AARCH64 Kernel)                        --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                      (VxWorks 7.x AARCH64 Kernel)                        --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                           (VxWorks 7 ARM RTP)                            --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                           (VxWorks 7 ARM RTP)                            --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-arm.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-arm.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-arm.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-arm.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (VxWorks Version ARM)                           --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (VxWorks Version ARM)                           --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-e500-kernel.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-e500-kernel.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-e500-kernel.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-e500-kernel.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                      (VxWorks 7 Kernel Version E500)                     --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                      (VxWorks 7 Kernel Version E500)                     --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                         (VxWorks 7.x E500 RTP)                           --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                         (VxWorks 7.x E500 RTP)                           --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-e500-rtp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-e500-rtp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-e500-rtp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-e500-rtp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (VxWorks 7.x E500 RTP)                          --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (VxWorks 7.x E500 RTP)                          --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                      (VxWorks 7 Kernel Version PPC)                      --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                      (VxWorks 7 Kernel Version PPC)                      --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (VxWorks 7.x PPC RTP)                           --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (VxWorks 7.x PPC RTP)                           --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-ppc-rtp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-ppc-rtp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-ppc-rtp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-ppc-rtp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                          (VxWorks 7.x PPC RTP)                           --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                          (VxWorks 7.x PPC RTP)                           --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                       (VxWorks 7.x PPC64 Kernel)                         --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                       (VxWorks 7.x PPC64 Kernel)                         --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                         (VxWorks 7.x PPC64 RTP)                          --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                         (VxWorks 7.x PPC64 RTP)                          --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                      (VxWorks 7 Kernel Version x86)                      --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                      (VxWorks 7 Kernel Version x86)                      --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                     (VxWorks 7 Version x86 for RTPs)                     --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                     (VxWorks 7 Version x86 for RTPs)                     --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-x86-rtp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-x86-rtp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-x86-rtp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-x86-rtp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                    (VxWorks 7 Version x86 for RTPs)                      --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                    (VxWorks 7 Version x86 for RTPs)                      --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                    (VxWorks 7 Kernel Version x86_64)                     --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                    (VxWorks 7 Kernel Version x86_64)                     --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads
*** gcc-11.3.0/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                 S p e c                                  --
  --                    (VxWorks 7 Version x86_64 for RTPs)                   --
  --                                                                          --
! --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
--- 7,13 ----
  --                                 S p e c                                  --
  --                    (VxWorks 7 Version x86_64 for RTPs)                   --
  --                                                                          --
! --          Copyright (C) 1992-2022, Free Software Foundation, Inc.         --
  --                                                                          --
  -- This specification is derived from the Ada Reference Manual for use with --
  -- GNAT. The copyright notice above, and the license provisions that follow --
diff -Nrcpad gcc-11.3.0/gcc/ada/link.c gcc-12.1.0/gcc/ada/link.c
*** gcc-11.3.0/gcc/ada/link.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/link.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/live.adb gcc-12.1.0/gcc/ada/live.adb
*** gcc-11.3.0/gcc/ada/live.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/live.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
***************
*** 23,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Lib;      use Lib;
! with Nlists;   use Nlists;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Types;    use Types;
  
  package body Live is
  
--- 23,40 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Lib;            use Lib;
! with Nlists;         use Nlists;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Types;          use Types;
  
  package body Live is
  
*************** package body Live is
*** 41,47 ****
     --  any valuable per-node space and possibly results in better locality and
     --  cache usage.
  
!    type Name_Set is array (Node_Id range <>) of Boolean;
     pragma Pack (Name_Set);
  
     function Marked (Marks : Name_Set; Name : Node_Id) return Boolean;
--- 45,52 ----
     --  any valuable per-node space and possibly results in better locality and
     --  cache usage.
  
!    type Name_Set is array (Node_Id'Base range <>) of Boolean;
!    --  We use 'Base here, in case we want to add a predicate to Node_Id
     pragma Pack (Name_Set);
  
     function Marked (Marks : Name_Set; Name : Node_Id) return Boolean;
*************** package body Live is
*** 82,90 ****
     function Spec_Of (N : Node_Id) return Entity_Id;
     --  Given a subprogram body N, return defining identifier of its declaration
  
-    --  ??? the body of this package contains no comments at all, this
-    --  should be fixed.
- 
     -------------
     -- Body_Of --
     -------------
--- 87,92 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/live.ads gcc-12.1.0/gcc/ada/live.ads
*** gcc-11.3.0/gcc/ada/live.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/live.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/locales.c gcc-12.1.0/gcc/ada/locales.c
*** gcc-11.3.0/gcc/ada/locales.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/locales.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *             Copyright (C) 2010-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *             Copyright (C) 2010-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/make.adb gcc-12.1.0/gcc/ada/make.adb
*** gcc-11.3.0/gcc/ada/make.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/make.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** with Ada.Directories;
*** 61,66 ****
--- 61,67 ----
  with Ada.Exceptions;   use Ada.Exceptions;
  
  with GNAT.Command_Line;         use GNAT.Command_Line;
+ with GNAT.Ctrl_C;
  with GNAT.Directory_Operations; use GNAT.Directory_Operations;
  with GNAT.OS_Lib;               use GNAT.OS_Lib;
  
*************** package body Make is
*** 76,90 ****
     --  is not always explicit and considering it is important when -f and -a
     --  are used.
  
-    type Sigint_Handler is access procedure;
-    pragma Convention (C, Sigint_Handler);
- 
-    procedure Install_Int_Handler (Handler : Sigint_Handler);
-    pragma Import (C, Install_Int_Handler, "__gnat_install_int_handler");
-    --  Called by Gnatmake to install the SIGINT handler below
- 
     procedure Sigint_Intercepted;
-    pragma Convention (C, Sigint_Intercepted);
     pragma No_Return (Sigint_Intercepted);
     --  Called when the program is interrupted by Ctrl-C to delete the
     --  temporary mapping files and configuration pragmas files.
--- 77,83 ----
*************** package body Make is
*** 406,412 ****
        Non_Std_Executable : out Boolean);
     --  Parse the linker switches and project file to compute the name of the
     --  executable to generate.
!    --  ??? What is the meaning of Non_Std_Executable
  
     procedure Compilation_Phase
       (Main_Source_File           : File_Name_Type;
--- 399,408 ----
        Non_Std_Executable : out Boolean);
     --  Parse the linker switches and project file to compute the name of the
     --  executable to generate.
!    --
!    --  When the platform expects a specific extension for the generated binary,
!    --  there is a chance that the linker might not use the right name for the
!    --  it. Non_Std_Executable is set to True in this case.
  
     procedure Compilation_Phase
       (Main_Source_File           : File_Name_Type;
*************** package body Make is
*** 1172,1178 ****
           end if;
  
        else
!          ALI := Scan_ALI (Lib_File, Text, Ignore_ED => False, Err => True);
           Free (Text);
  
           if ALI = No_ALI_Id then
--- 1168,1174 ----
           end if;
  
        else
!          ALI := Scan_ALI (Lib_File, Text, Err => True);
           Free (Text);
  
           if ALI = No_ALI_Id then
*************** package body Make is
*** 2368,2374 ****
              Osint.Full_Source_Name
                (Source.File,
                 Full_File => Full_Source_File,
!                Attr      => Source_File_Attr'Access);
  
              Lib_File := Osint.Lib_File_Name (Source.File, Source.Index);
  
--- 2364,2370 ----
              Osint.Full_Source_Name
                (Source.File,
                 Full_File => Full_Source_File,
!                Attr      => Source_File_Attr'Unchecked_Access);
  
              Lib_File := Osint.Lib_File_Name (Source.File, Source.Index);
  
*************** package body Make is
*** 2396,2402 ****
                    Get_Name_String (Full_Lib_File);
                    Name_Buffer (Name_Len + 1) := ASCII.NUL;
                    Read_Only := not Is_Writable_File
!                     (Name_Buffer'Address, Lib_File_Attr'Access);
                 else
                    Read_Only := False;
                 end if;
--- 2392,2398 ----
                    Get_Name_String (Full_Lib_File);
                    Name_Buffer (Name_Len + 1) := ASCII.NUL;
                    Read_Only := not Is_Writable_File
!                     (Name_Buffer'Address, Lib_File_Attr'Unchecked_Access);
                 else
                    Read_Only := False;
                 end if;
*************** package body Make is
*** 2464,2470 ****
                           The_Args       => Args,
                           Lib_File       => Lib_File,
                           Full_Lib_File  => Full_Lib_File,
!                          Lib_File_Attr  => Lib_File_Attr'Access,
                           Read_Only      => Read_Only,
                           ALI            => ALI,
                           O_File         => Obj_File,
--- 2460,2466 ----
                           The_Args       => Args,
                           Lib_File       => Lib_File,
                           Full_Lib_File  => Full_Lib_File,
!                          Lib_File_Attr  => Lib_File_Attr'Unchecked_Access,
                           Read_Only      => Read_Only,
                           ALI            => ALI,
                           O_File         => Obj_File,
*************** package body Make is
*** 2634,2640 ****
  
                    Text :=
                      Read_Library_Info_From_Full
!                       (Data.Full_Lib_File, Data.Lib_File_Attr'Access);
  
                    --  Restore Check_Object_Consistency to its initial value
  
--- 2630,2637 ----
  
                    Text :=
                      Read_Library_Info_From_Full
!                       (Data.Full_Lib_File,
!                        Data.Lib_File_Attr'Unchecked_Access);
  
                    --  Restore Check_Object_Consistency to its initial value
  
*************** package body Make is
*** 2650,2656 ****
                 if Text /= null then
                    ALI :=
                      Scan_ALI
!                       (Data.Lib_File, Text, Ignore_ED => False, Err => True);
  
                    if ALI = No_ALI_Id then
  
--- 2647,2653 ----
                 if Text /= null then
                    ALI :=
                      Scan_ALI
!                       (Data.Lib_File, Text, Err => True);
  
                    if ALI = No_ALI_Id then
  
*************** package body Make is
*** 3322,3328 ****
        pragma Warnings (Off, Discard);
  
     begin
!       Install_Int_Handler (Sigint_Intercepted'Access);
  
        Do_Compile_Step := True;
        Do_Bind_Step    := True;
--- 3319,3325 ----
        pragma Warnings (Off, Discard);
  
     begin
!       GNAT.Ctrl_C.Install_Handler (Sigint_Intercepted'Access);
  
        Do_Compile_Step := True;
        Do_Bind_Step    := True;
*************** package body Make is
*** 3768,3774 ****
                 declare
                    Arg : constant String := Argument (J);
                 begin
!                   if Arg = "-cargs" or Arg = "-bargs" or Arg = "-largs" then
                       In_Gnatmake_Switches := False;
  
                    elsif Arg = "-margs" then
--- 3765,3771 ----
                 declare
                    Arg : constant String := Argument (J);
                 begin
!                   if Arg in "-cargs" | "-bargs" | "-largs" then
                       In_Gnatmake_Switches := False;
  
                    elsif Arg = "-margs" then
*************** package body Make is
*** 4598,4615 ****
              Add_Switch
                ("-aO" & Argv (4 .. Argv'Last), Binder);
  
-          --  -aamp_target=...
- 
-          elsif Argv'Length >= 13 and then Argv (2 .. 13) = "aamp_target=" then
-             Add_Switch (Argv, Compiler);
- 
-             --  Set the aamp_target environment variable so that the binder and
-             --  linker will use the proper target library. This is consistent
-             --  with how things work when -aamp_target is passed on the command
-             --  line to gnaampmake.
- 
-             Setenv ("aamp_target", Argv (14 .. Argv'Last));
- 
           --  -Adir (to gnatbind this is like a -aO switch, to gcc like a -I)
  
           elsif Argv (2) = 'A' then
--- 4595,4600 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/make.ads gcc-12.1.0/gcc/ada/make.ads
*** gcc-11.3.0/gcc/ada/make.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/make.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/make_util.adb gcc-12.1.0/gcc/ada/make_util.adb
*** gcc-11.3.0/gcc/ada/make_util.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/make_util.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/make_util.ads gcc-12.1.0/gcc/ada/make_util.ads
*** gcc-11.3.0/gcc/ada/make_util.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/make_util.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2004-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/makeusg.adb gcc-12.1.0/gcc/ada/makeusg.adb
*** gcc-11.3.0/gcc/ada/makeusg.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/makeusg.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/makeusg.ads gcc-12.1.0/gcc/ada/makeusg.ads
*** gcc-11.3.0/gcc/ada/makeusg.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/makeusg.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/mdll-fil.adb gcc-12.1.0/gcc/ada/mdll-fil.adb
*** gcc-11.3.0/gcc/ada/mdll-fil.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/mdll-fil.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/mdll-fil.ads gcc-12.1.0/gcc/ada/mdll-fil.ads
*** gcc-11.3.0/gcc/ada/mdll-fil.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/mdll-fil.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/mdll-utl.adb gcc-12.1.0/gcc/ada/mdll-utl.adb
*** gcc-11.3.0/gcc/ada/mdll-utl.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/mdll-utl.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/mdll-utl.ads gcc-12.1.0/gcc/ada/mdll-utl.ads
*** gcc-11.3.0/gcc/ada/mdll-utl.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/mdll-utl.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/mdll.adb gcc-12.1.0/gcc/ada/mdll.adb
*** gcc-11.3.0/gcc/ada/mdll.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/mdll.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/mdll.ads gcc-12.1.0/gcc/ada/mdll.ads
*** gcc-11.3.0/gcc/ada/mdll.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/mdll.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 27,33 ****
  --  to build Windows DLL
  
  with GNAT.OS_Lib;
- --  Should have USE here ???
  
  package MDLL is
  
--- 27,32 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/mingw32.h gcc-12.1.0/gcc/ada/mingw32.h
*** gcc-11.3.0/gcc/ada/mingw32.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/mingw32.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 2002-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 2002-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/mkdir.c gcc-12.1.0/gcc/ada/mkdir.c
*** gcc-11.3.0/gcc/ada/mkdir.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/mkdir.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *             Copyright (C) 2002-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *             Copyright (C) 2002-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/namet-sp.adb gcc-12.1.0/gcc/ada/namet-sp.adb
*** gcc-11.3.0/gcc/ada/namet-sp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/namet-sp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --            Copyright (C) 2008-2022, 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- --
***************
*** 23,28 ****
--- 23,30 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
+ with Aspects;
+ with Snames;
  with System.WCh_Cnv; use System.WCh_Cnv;
  
  with GNAT.UTF_32_Spelling_Checker;
*************** package body Namet.Sp is
*** 44,49 ****
--- 46,89 ----
     --  either Name_Buffer or Name_Len. The result is in Result (1 .. Length).
     --  The caller must ensure that the result buffer is long enough.
  
+    ------------------------
+    -- Aspect_Spell_Check --
+    ------------------------
+ 
+    function Aspect_Spell_Check (Name : Name_Id) return Boolean is
+      (Aspect_Spell_Check (Name) /= No_Name);
+ 
+    function Aspect_Spell_Check (Name : Name_Id) return Name_Id is
+       use Aspects;
+    begin
+       for J in Aspect_Id_Exclude_No_Aspect loop
+          if Is_Bad_Spelling_Of (Name, Aspect_Names (J)) then
+             return Aspect_Names (J);
+          end if;
+       end loop;
+ 
+       return No_Name;
+    end Aspect_Spell_Check;
+ 
+    ---------------------------
+    -- Attribute_Spell_Check --
+    ---------------------------
+ 
+    function Attribute_Spell_Check (N : Name_Id) return Boolean is
+      (Attribute_Spell_Check (N) /= No_Name);
+ 
+    function Attribute_Spell_Check (N : Name_Id) return Name_Id is
+       use Snames;
+    begin
+       for J in First_Attribute_Name .. Last_Attribute_Name loop
+          if Is_Bad_Spelling_Of (N, J) then
+             return J;
+          end if;
+       end loop;
+ 
+       return No_Name;
+    end Attribute_Spell_Check;
+ 
     ----------------------------
     -- Get_Name_String_UTF_32 --
     ----------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/namet-sp.ads gcc-12.1.0/gcc/ada/namet-sp.ads
*** gcc-11.3.0/gcc/ada/namet-sp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/namet-sp.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 31,36 ****
--- 31,50 ----
  
  package Namet.Sp is
  
+    function Aspect_Spell_Check (Name : Name_Id) return Boolean;
+    --  Returns True, if Name is a misspelling of some aspect name
+ 
+    function Aspect_Spell_Check (Name : Name_Id) return Name_Id;
+    --  Returns a possible correction, if Name is a misspelling of some aspect
+    --  name. If not, return No_Name.
+ 
+    function Attribute_Spell_Check (N : Name_Id) return Boolean;
+    --  Returns True, if Name is a misspelling of some attribute name
+ 
+    function Attribute_Spell_Check (N : Name_Id) return Name_Id;
+    --  Returns a possible correction, if Name is a misspelling of some
+    --  attribute name. If not, return No_Name.
+ 
     function Is_Bad_Spelling_Of (Found, Expect : Name_Id) return Boolean;
     --  Compares two identifier names from the names table, and returns True if
     --  Found is a plausible misspelling of Expect. This function properly deals
diff -Nrcpad gcc-11.3.0/gcc/ada/namet.adb gcc-12.1.0/gcc/ada/namet.adb
*** gcc-11.3.0/gcc/ada/namet.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/namet.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Namet is
*** 1133,1143 ****
            Name_Len              => Short (Buf.Length),
            Byte_Info             => 0,
            Int_Info              => 0,
            Boolean1_Info         => False,
            Boolean2_Info         => False,
            Boolean3_Info         => False,
!           Name_Has_No_Encodings => False,
!           Hash_Link             => No_Name));
  
        --  Set corresponding string entry in the Name_Chars table
  
--- 1133,1144 ----
            Name_Len              => Short (Buf.Length),
            Byte_Info             => 0,
            Int_Info              => 0,
+           Hash_Link             => No_Name,
+           Name_Has_No_Encodings => False,
            Boolean1_Info         => False,
            Boolean2_Info         => False,
            Boolean3_Info         => False,
!           Spare                 => False));
  
        --  Set corresponding string entry in the Name_Chars table
  
*************** package body Namet is
*** 1239,1250 ****
             ((Name_Chars_Index      => Name_Chars.Last,
               Name_Len              => Short (Buf.Length),
               Hash_Link             => No_Name,
-              Name_Has_No_Encodings => False,
               Int_Info              => 0,
               Byte_Info             => 0,
               Boolean1_Info         => False,
               Boolean2_Info         => False,
!              Boolean3_Info         => False));
  
           --  Set corresponding string entry in the Name_Chars table
  
--- 1240,1252 ----
             ((Name_Chars_Index      => Name_Chars.Last,
               Name_Len              => Short (Buf.Length),
               Hash_Link             => No_Name,
               Int_Info              => 0,
               Byte_Info             => 0,
+              Name_Has_No_Encodings => False,
               Boolean1_Info         => False,
               Boolean2_Info         => False,
!              Boolean3_Info         => False,
!              Spare                 => False));
  
           --  Set corresponding string entry in the Name_Chars table
  
*************** package body Namet is
*** 1324,1334 ****
               Name_Len              => 1,
               Byte_Info             => 0,
               Int_Info              => 0,
               Boolean1_Info         => False,
               Boolean2_Info         => False,
               Boolean3_Info         => False,
!              Name_Has_No_Encodings => True,
!              Hash_Link             => No_Name));
  
           Name_Chars.Append (C);
           Name_Chars.Append (ASCII.NUL);
--- 1326,1337 ----
               Name_Len              => 1,
               Byte_Info             => 0,
               Int_Info              => 0,
+              Hash_Link             => No_Name,
+              Name_Has_No_Encodings => True,
               Boolean1_Info         => False,
               Boolean2_Info         => False,
               Boolean3_Info         => False,
!              Spare                 => False));
  
           Name_Chars.Append (C);
           Name_Chars.Append (ASCII.NUL);
diff -Nrcpad gcc-11.3.0/gcc/ada/namet.ads gcc-12.1.0/gcc/ada/namet.ads
*** gcc-11.3.0/gcc/ada/namet.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/namet.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Namet is
*** 442,448 ****
     --  The following routines operate on Global_Name_Buffer. New code should
     --  use the routines above, and declare Bounded_Strings as local
     --  variables. Existing code can be improved incrementally by removing calls
!    --  to the following. ???If we eliminate all of these, we can remove
     --  Global_Name_Buffer. But be sure to look at namet.h first.
  
     --  To see what these do, look at the bodies. They are all trivially defined
--- 442,448 ----
     --  The following routines operate on Global_Name_Buffer. New code should
     --  use the routines above, and declare Bounded_Strings as local
     --  variables. Existing code can be improved incrementally by removing calls
!    --  to the following. If we eliminate all of these, we can remove
     --  Global_Name_Buffer. But be sure to look at namet.h first.
  
     --  To see what these do, look at the bodies. They are all trivially defined
*************** private
*** 570,602 ****
       Table_Name           => "Name_Chars");
  
     type Name_Entry is record
!       Name_Chars_Index : Int;
        --  Starting location of characters in the Name_Chars table minus one
        --  (i.e. pointer to character just before first character). The reason
        --  for the bias of one is that indexes in Name_Buffer are one's origin,
        --  so this avoids unnecessary adds and subtracts of 1.
  
!       Name_Len : Short;
        --  Length of this name in characters
  
!       Byte_Info : Byte;
        --  Byte value associated with this name
  
-       Boolean1_Info : Boolean;
-       Boolean2_Info : Boolean;
-       Boolean3_Info : Boolean;
-       --  Boolean values associated with the name
- 
        Name_Has_No_Encodings : Boolean;
        --  This flag is set True if the name entry is known not to contain any
        --  special character encodings. This is used to speed up repeated calls
        --  to Append_Decoded. A value of False means that it is not known
        --  whether the name contains any such encodings.
  
!       Hash_Link : Name_Id;
        --  Link to next entry in names table for same hash code
  
!       Int_Info : Int;
        --  Int Value associated with this name
  
     end record;
--- 570,605 ----
       Table_Name           => "Name_Chars");
  
     type Name_Entry is record
!       Name_Chars_Index : aliased Int;
        --  Starting location of characters in the Name_Chars table minus one
        --  (i.e. pointer to character just before first character). The reason
        --  for the bias of one is that indexes in Name_Buffer are one's origin,
        --  so this avoids unnecessary adds and subtracts of 1.
  
!       Name_Len : aliased Short;
        --  Length of this name in characters
  
!       Byte_Info : aliased Byte;
        --  Byte value associated with this name
  
        Name_Has_No_Encodings : Boolean;
        --  This flag is set True if the name entry is known not to contain any
        --  special character encodings. This is used to speed up repeated calls
        --  to Append_Decoded. A value of False means that it is not known
        --  whether the name contains any such encodings.
  
!       Boolean1_Info : Boolean;
!       Boolean2_Info : Boolean;
!       Boolean3_Info : Boolean;
!       --  Boolean values associated with the name
! 
!       Spare : Boolean;
!       --  Four remaining bits in the current byte
! 
!       Hash_Link : aliased Name_Id;
        --  Link to next entry in names table for same hash code
  
!       Int_Info : aliased Int;
        --  Int Value associated with this name
  
     end record;
*************** private
*** 605,614 ****
        Name_Chars_Index      at  0 range 0 .. 31;
        Name_Len              at  4 range 0 .. 15;
        Byte_Info             at  6 range 0 .. 7;
!       Boolean1_Info         at  7 range 0 .. 0;
!       Boolean2_Info         at  7 range 1 .. 1;
!       Boolean3_Info         at  7 range 2 .. 2;
!       Name_Has_No_Encodings at  7 range 3 .. 7;
        Hash_Link             at  8 range 0 .. 31;
        Int_Info              at 12 range 0 .. 31;
     end record;
--- 608,618 ----
        Name_Chars_Index      at  0 range 0 .. 31;
        Name_Len              at  4 range 0 .. 15;
        Byte_Info             at  6 range 0 .. 7;
!       Name_Has_No_Encodings at  7 range 0 .. 0;
!       Boolean1_Info         at  7 range 1 .. 1;
!       Boolean2_Info         at  7 range 2 .. 2;
!       Boolean3_Info         at  7 range 3 .. 3;
!       Spare                 at  7 range 4 .. 7;
        Hash_Link             at  8 range 0 .. 31;
        Int_Info              at 12 range 0 .. 31;
     end record;
diff -Nrcpad gcc-11.3.0/gcc/ada/namet.h gcc-12.1.0/gcc/ada/namet.h
*** gcc-11.3.0/gcc/ada/namet.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/namet.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 1992-2022, 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- *
***************
*** 32,57 ****
  extern "C" {
  #endif
  
! /* Structure defining a names table entry.  */
! 
  struct Name_Entry
  {
!   Int Name_Chars_Index; /* Starting location of char in Name_Chars table. */
!   Short Name_Len;         /* Length of this name in characters. */
!   Byte Byte_Info;       /* Byte value associated with this name */
!   Byte Spare;           /* Unused */
!   Name_Id Hash_Link;    /* Link to next entry in names table for same hash
!                            code. Not accessed by C routines.  */
!   Int Int_Info;         /* Int value associated with this name */
  };
  
! /* Pointer to names table vector. */
  #define Names_Ptr namet__name_entries__table
! extern struct Name_Entry *Names_Ptr;
  
! /* Pointer to name characters table. */
  #define Name_Chars_Ptr namet__name_chars__table
! extern char *Name_Chars_Ptr;
  
  /* This is Hostparm.Max_Line_Length.  */
  #define Max_Line_Length (32767 - 1)
--- 32,59 ----
  extern "C" {
  #endif
  
! /* Structure defining a name table entry.  */
  struct Name_Entry
  {
!   Int Name_Chars_Index;
!   Short Name_Len;
!   Byte Byte_Info;
!   Byte Name_Has_No_Encodings : 1;
!   Byte Boolean1_Info : 1;
!   Byte Boolean2_Info : 1;
!   Byte Boolean3_Info : 1;
!   Byte Spare : 4;
!   Name_Id Hash_Link;
!   Int Int_Info;
  };
  
! /* Pointer to the name table.  */
  #define Names_Ptr namet__name_entries__table
! extern struct Name_Entry (*Names_Ptr)[];
  
! /* Pointer to the name character table.  */
  #define Name_Chars_Ptr namet__name_chars__table
! extern char (*Name_Chars_Ptr)[];
  
  /* This is Hostparm.Max_Line_Length.  */
  #define Max_Line_Length (32767 - 1)
*************** extern struct Bounded_String Global_Name
*** 75,86 ****
     strings we want are sitting in the name strings table in exactly the form
     we need them (NUL terminated), we just point to the name directly. */
  
! static char *Get_Name_String (Name_Id);
  
  INLINE char *
  Get_Name_String (Name_Id Id)
  {
!   return Name_Chars_Ptr + Names_Ptr[Id - First_Name_Id].Name_Chars_Index + 1;
  }
  
  #define Name_Equals namet__name_equals
--- 77,89 ----
     strings we want are sitting in the name strings table in exactly the form
     we need them (NUL terminated), we just point to the name directly. */
  
! INLINE char *Get_Name_String (Name_Id);
  
  INLINE char *
  Get_Name_String (Name_Id Id)
  {
!   return
!     &(*Name_Chars_Ptr)[(*Names_Ptr)[Id - First_Name_Id].Name_Chars_Index + 1];
  }
  
  #define Name_Equals namet__name_equals
diff -Nrcpad gcc-11.3.0/gcc/ada/nlists.adb gcc-12.1.0/gcc/ada/nlists.adb
*** gcc-11.3.0/gcc/ada/nlists.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/nlists.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 27,36 ****
  --  file must be properly reflected in the corresponding C header a-nlists.h
  
  with Alloc;
! with Atree;  use Atree;
! with Debug;  use Debug;
! with Output; use Output;
! with Sinfo;  use Sinfo;
  with Table;
  
  package body Nlists is
--- 27,37 ----
  --  file must be properly reflected in the corresponding C header a-nlists.h
  
  with Alloc;
! with Atree;       use Atree;
! with Debug;       use Debug;
! with Output;      use Output;
! with Sinfo;       use Sinfo;
! with Sinfo.Nodes; use Sinfo.Nodes;
  with Table;
  
  package body Nlists is
*************** package body Nlists is
*** 39,47 ****
     --  permitted only when this switch is set to False; compiling without
     --  assertions this lock has no effect.
  
-    use Atree_Private_Part;
-    --  Get access to Nodes table
- 
     ----------------------------------
     -- Implementation of Node Lists --
     ----------------------------------
--- 40,45 ----
*************** package body Nlists is
*** 86,102 ****
        Table_Component_Type => Node_Or_Entity_Id,
        Table_Index_Type     => Node_Or_Entity_Id'Base,
        Table_Low_Bound      => First_Node_Id,
!       Table_Initial        => Alloc.Nodes_Initial,
!       Table_Increment      => Alloc.Nodes_Increment,
!       Release_Threshold    => Alloc.Nodes_Release_Threshold,
        Table_Name           => "Next_Node");
  
     package Prev_Node is new Table.Table (
        Table_Component_Type => Node_Or_Entity_Id,
        Table_Index_Type     => Node_Or_Entity_Id'Base,
        Table_Low_Bound      => First_Node_Id,
!       Table_Initial        => Alloc.Nodes_Initial,
!       Table_Increment      => Alloc.Nodes_Increment,
        Table_Name           => "Prev_Node");
  
     -----------------------
--- 84,99 ----
        Table_Component_Type => Node_Or_Entity_Id,
        Table_Index_Type     => Node_Or_Entity_Id'Base,
        Table_Low_Bound      => First_Node_Id,
!       Table_Initial        => Alloc.Node_Offsets_Initial,
!       Table_Increment      => Alloc.Node_Offsets_Increment,
        Table_Name           => "Next_Node");
  
     package Prev_Node is new Table.Table (
        Table_Component_Type => Node_Or_Entity_Id,
        Table_Index_Type     => Node_Or_Entity_Id'Base,
        Table_Low_Bound      => First_Node_Id,
!       Table_Initial        => Alloc.Node_Offsets_Initial,
!       Table_Increment      => Alloc.Node_Offsets_Increment,
        Table_Name           => "Prev_Node");
  
     -----------------------
*************** package body Nlists is
*** 188,194 ****
  
        Set_Last (To, Node);
  
!       Nodes.Table (Node).In_List := True;
  
        Set_Next      (Node, Empty);
        Set_Prev      (Node, L);
--- 185,191 ----
  
        Set_Last (To, Node);
  
!       Set_In_List (Node, True);
  
        Set_Next      (Node, Empty);
        Set_Prev      (Node, L);
*************** package body Nlists is
*** 406,412 ****
  
           Set_Next (After, Node);
  
!          Nodes.Table (Node).In_List := True;
  
           Set_Prev      (Node, After);
           Set_Next      (Node, Before);
--- 403,409 ----
  
           Set_Next (After, Node);
  
!          Set_In_List (Node, True);
  
           Set_Prev      (Node, After);
           Set_Next      (Node, Before);
*************** package body Nlists is
*** 466,472 ****
  
           Set_Prev (Before, Node);
  
!          Nodes.Table (Node).In_List := True;
  
           Set_Prev      (Node, After);
           Set_Next      (Node, Before);
--- 463,469 ----
  
           Set_Prev (Before, Node);
  
!          Set_In_List (Node, True);
  
           Set_Prev      (Node, After);
           Set_Next      (Node, Before);
*************** package body Nlists is
*** 623,629 ****
  
     function Is_List_Member (Node : Node_Or_Entity_Id) return Boolean is
     begin
!       return Nodes.Table (Node).In_List;
     end Is_List_Member;
  
     -----------------------
--- 620,626 ----
  
     function Is_List_Member (Node : Node_Or_Entity_Id) return Boolean is
     begin
!       return In_List (Node);
     end Is_List_Member;
  
     -----------------------
*************** package body Nlists is
*** 675,681 ****
     function List_Containing (Node : Node_Or_Entity_Id) return List_Id is
     begin
        pragma Assert (Is_List_Member (Node));
!       return List_Id (Nodes.Table (Node).Link);
     end List_Containing;
  
     -----------------
--- 672,678 ----
     function List_Containing (Node : Node_Or_Entity_Id) return List_Id is
     begin
        pragma Assert (Is_List_Member (Node));
!       return List_Id (Link (Node));
     end List_Containing;
  
     -----------------
*************** package body Nlists is
*** 866,872 ****
              Set_First  (List, Node);
              Set_Last   (List, Node);
  
!             Nodes.Table (Node).In_List := True;
              Set_List_Link (Node, List);
              Set_Prev (Node, Empty);
              Set_Next (Node, Empty);
--- 863,869 ----
              Set_First  (List, Node);
              Set_Last   (List, Node);
  
!             Set_In_List (Node, True);
              Set_List_Link (Node, List);
              Set_Prev (Node, Empty);
              Set_Next (Node, Empty);
*************** package body Nlists is
*** 1018,1023 ****
--- 1015,1021 ----
  
     function Parent (List : List_Id) return Node_Or_Entity_Id is
     begin
+       pragma Assert (Present (List));
        pragma Assert (List <= Lists.Last);
        return Lists.Table (List).Parent;
     end Parent;
*************** package body Nlists is
*** 1083,1089 ****
  
        Set_First (To, Node);
  
!       Nodes.Table (Node).In_List := True;
  
        Set_Next      (Node, F);
        Set_Prev      (Node, Empty);
--- 1081,1087 ----
  
        Set_First (To, Node);
  
!       Set_In_List (Node, True);
  
        Set_Next      (Node, F);
        Set_Prev      (Node, Empty);
*************** package body Nlists is
*** 1292,1298 ****
           Set_Prev (Nxt, Prv);
        end if;
  
!       Nodes.Table (Node).In_List := False;
        Set_Parent (Node, Empty);
     end Remove;
  
--- 1290,1296 ----
           Set_Prev (Nxt, Prv);
        end if;
  
!       Set_In_List (Node, False);
        Set_Parent (Node, Empty);
     end Remove;
  
*************** package body Nlists is
*** 1341,1347 ****
                 Set_Prev (Nxt, Empty);
              end if;
  
!             Nodes.Table (Frst).In_List := False;
              Set_Parent (Frst, Empty);
              return Frst;
           end;
--- 1339,1345 ----
                 Set_Prev (Nxt, Empty);
              end if;
  
!             Set_In_List (Frst, False);
              Set_Parent (Frst, Empty);
              return Frst;
           end;
*************** package body Nlists is
*** 1392,1398 ****
                 Set_Prev (Nxt2, Node);
              end if;
  
!             Nodes.Table (Nxt).In_List := False;
              Set_Parent (Nxt, Empty);
           end;
        end if;
--- 1390,1396 ----
                 Set_Prev (Nxt2, Node);
              end if;
  
!             Set_In_List (Nxt, False);
              Set_Parent (Nxt, Empty);
           end;
        end if;
*************** package body Nlists is
*** 1427,1433 ****
     procedure Set_List_Link (Node : Node_Or_Entity_Id; To : List_Id) is
     begin
        pragma Assert (not Locked);
!       Nodes.Table (Node).Link := Union_Id (To);
     end Set_List_Link;
  
     --------------
--- 1425,1431 ----
     procedure Set_List_Link (Node : Node_Or_Entity_Id; To : List_Id) is
     begin
        pragma Assert (not Locked);
!       Set_Link (Node, Union_Id (To));
     end Set_List_Link;
  
     --------------
diff -Nrcpad gcc-11.3.0/gcc/ada/nlists.ads gcc-12.1.0/gcc/ada/nlists.ads
*** gcc-11.3.0/gcc/ada/nlists.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/nlists.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Nlists is
*** 146,154 ****
     --  No_List. (No_List is not considered to be the same as an empty list).
  
     function List_Length (List : List_Id) return Nat;
!    --  Returns number of items in the given list. It is an error to call
!    --  this function with No_List (No_List is not considered to be the same
!    --  as an empty list).
  
     function Next (Node : Node_Or_Entity_Id) return Node_Or_Entity_Id;
     pragma Inline (Next);
--- 146,154 ----
     --  No_List. (No_List is not considered to be the same as an empty list).
  
     function List_Length (List : List_Id) return Nat;
!    --  Returns number of items in the given list. If called on No_List it
!    --  returns 0, even though No_List is not considered to be the same as an
!    --  empty list.
  
     function Next (Node : Node_Or_Entity_Id) return Node_Or_Entity_Id;
     pragma Inline (Next);
diff -Nrcpad gcc-11.3.0/gcc/ada/nlists.h gcc-12.1.0/gcc/ada/nlists.h
*** gcc-11.3.0/gcc/ada/nlists.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/nlists.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 1992-2022, 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- *
*************** Prev (Node_Id Node)
*** 105,113 ****
  extern Node_Id Prev_Non_Pragma		(Node_Id);
  
  static Boolean Is_Empty_List		(List_Id);
- static Boolean Is_Non_Empty_List	(List_Id);
- static Boolean Is_List_Member		(Node_Id);
- static List_Id List_Containing		(Node_Id);
  
  INLINE Boolean
  Is_Empty_List (List_Id Id)
--- 105,110 ----
*************** Is_Empty_List (List_Id Id)
*** 115,138 ****
    return (First (Id) == Empty);
  }
  
- INLINE Boolean
- Is_Non_Empty_List (List_Id Id)
- {
-   return (Present (Id) && First (Id) != Empty);
- }
- 
- INLINE Boolean
- Is_List_Member (Node_Id Node)
- {
-   return Nodes_Ptr[Node - First_Node_Id].U.K.in_list;
- }
- 
- INLINE List_Id
- List_Containing (Node_Id Node)
- {
-   return Nodes_Ptr[Node - First_Node_Id].V.NX.link;
- }
- 
  #ifdef __cplusplus
  }
  #endif
--- 112,117 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/nmake.adt gcc-12.1.0/gcc/ada/nmake.adt
*** gcc-11.3.0/gcc/ada/nmake.adt	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/nmake.adt	Thu Jan  1 00:00:00 1970
***************
*** 1,80 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                                N M A K E                                 --
- --                                                                          --
- --                             T e m p l a t e                              --
- --                                                                          --
- --          Copyright (C) 1992-2007, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
- -- http://www.gnu.org/licenses for a complete copy of the license.          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- --  This file is a template used as input to the utility program XNmake,
- --  which reads this template, and the spec of Sinfo (sinfo.ads) and
- --  generates the body and/or the spec for the Nmake package (files
- --  nmake.ads and nmake.adb)
- 
- pragma Style_Checks (All_Checks);
- --  Turn off subprogram order checking, since the routines here are
- --  generated automatically in order.
- 
- with Atree;  use Atree;       --  body only
- with Namet;  use Namet;       --  spec only
- with Nlists; use Nlists;      --  spec only
- with Sinfo;  use Sinfo;       --  body only
- with Snames; use Snames;      --  body only
- with Stand;  use Stand;       --  body only
- with Types;  use Types;       --  spec only
- with Uintp;  use Uintp;       --  spec only
- with Urealp; use Urealp;      --  spec only
- 
- package Nmake is
- 
- --  This package contains a set of routines used to construct tree nodes
- --  using a functional style. There is one routine for each node type defined
- --  in Sinfo with the general interface:
- 
- --    function Make_xxx (Sloc : Source_Ptr,
- --                       Field_Name_1 : Field_Name_1_Type [:= default]
- --                       Field_Name_2 : Field_Name_2_Type [:= default]
- --                       ...)
- --    return Node_Id
- 
- --  Only syntactic fields are included (i.e. fields marked as "-Sem" or "-Lib"
- --  in the Sinfo spec are excluded). In addition, the following four syntactic
- --  fields are excluded:
- 
- --    Prev_Ids
- --    More_Ids
- --    Comes_From_Source
- --    Paren_Count
- 
- --  since they are very rarely set in expanded code. If they need to be set,
- --  to other than the default values (False, False, False, zero), then the
- --  appropriate Set_xxx procedures must be used on the returned value.
- 
- --  Default values are provided only for flag fields (where the default is
- --  False), and for optional fields. An optional field is one where the
- --  comment line describing the field contains the string "(set to xxx if".
- --  For such fields, a default value of xxx is provided."
- 
- --  Warning: since calls to Make_xxx routines are normal function calls, the
- --  arguments can be evaluated in any order. This means that at most one such
- --  argument can have side effects (e.g. be a call to a parse routine).
- 
- !!TEMPLATE INSERTION POINT
- 
- end Nmake;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/opt.adb gcc-12.1.0/gcc/ada/opt.adb
*** gcc-11.3.0/gcc/ada/opt.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/opt.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Opt is
*** 84,90 ****
        Default_SSO_Config                    := Default_SSO;
        Dynamic_Elaboration_Checks_Config     := Dynamic_Elaboration_Checks;
        Exception_Locations_Suppressed_Config := Exception_Locations_Suppressed;
-       Extensions_Allowed_Config             := Extensions_Allowed;
        External_Name_Exp_Casing_Config       := External_Name_Exp_Casing;
        External_Name_Imp_Casing_Config       := External_Name_Imp_Casing;
        Fast_Math_Config                      := Fast_Math;
--- 84,89 ----
*************** package body Opt is
*** 123,129 ****
        Default_SSO                    := Save.Default_SSO;
        Dynamic_Elaboration_Checks     := Save.Dynamic_Elaboration_Checks;
        Exception_Locations_Suppressed := Save.Exception_Locations_Suppressed;
-       Extensions_Allowed             := Save.Extensions_Allowed;
        External_Name_Exp_Casing       := Save.External_Name_Exp_Casing;
        External_Name_Imp_Casing       := Save.External_Name_Imp_Casing;
        Fast_Math                      := Save.Fast_Math;
--- 122,127 ----
*************** package body Opt is
*** 165,171 ****
           Default_SSO                    => Default_SSO,
           Dynamic_Elaboration_Checks     => Dynamic_Elaboration_Checks,
           Exception_Locations_Suppressed => Exception_Locations_Suppressed,
-          Extensions_Allowed             => Extensions_Allowed,
           External_Name_Exp_Casing       => External_Name_Exp_Casing,
           External_Name_Imp_Casing       => External_Name_Imp_Casing,
           Fast_Math                      => Fast_Math,
--- 163,168 ----
*************** package body Opt is
*** 204,210 ****
           Ada_Version_Pragma          := Empty;
           Default_SSO                 := ' ';
           Dynamic_Elaboration_Checks  := False;
-          Extensions_Allowed          := True;
           External_Name_Exp_Casing    := As_Is;
           External_Name_Imp_Casing    := Lowercase;
           No_Component_Reordering     := False;
--- 201,206 ----
*************** package body Opt is
*** 263,269 ****
           Check_Policy_List           := Check_Policy_List_Config;
           Default_SSO                 := Default_SSO_Config;
           Dynamic_Elaboration_Checks  := Dynamic_Elaboration_Checks_Config;
-          Extensions_Allowed          := Extensions_Allowed_Config;
           External_Name_Exp_Casing    := External_Name_Exp_Casing_Config;
           External_Name_Imp_Casing    := External_Name_Imp_Casing_Config;
           Fast_Math                   := Fast_Math_Config;
--- 259,264 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/opt.ads gcc-12.1.0/gcc/ada/opt.ads
*** gcc-11.3.0/gcc/ada/opt.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/opt.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Opt is
*** 68,84 ****
     --  the default values.
  
     Latest_Ada_Only : Boolean := False;
!    --  If True, the only value valid for Ada_Version is Ada_Version_Type'Last,
!    --  trying to specify other values will be ignored (in case of pragma
     --  Ada_xxx) or generate an error (in case of -gnat83/95/xx switches).
  
!    type Ada_Version_Type is (Ada_83, Ada_95, Ada_2005, Ada_2012, Ada_2020);
     pragma Ordered (Ada_Version_Type);
     pragma Convention (C, Ada_Version_Type);
     --  Versions of Ada for Ada_Version below. Note that these are ordered,
     --  so that tests like Ada_Version >= Ada_95 are legitimate and useful.
     --  Think twice before using "="; Ada_Version >= Ada_2012 is more likely
     --  what you want, because it will apply to future versions of the language.
  
     --  WARNING: There is a matching C declaration of this type in fe.h
  
--- 68,87 ----
     --  the default values.
  
     Latest_Ada_Only : Boolean := False;
!    --  If True, the only value valid for Ada_Version is Ada_2012 or later.
!    --  Trying to specify other values will be ignored (in case of pragma
     --  Ada_xxx) or generate an error (in case of -gnat83/95/xx switches).
  
!    type Ada_Version_Type is
!      (Ada_83, Ada_95, Ada_2005, Ada_2012, Ada_2022, Ada_With_Extensions);
     pragma Ordered (Ada_Version_Type);
     pragma Convention (C, Ada_Version_Type);
     --  Versions of Ada for Ada_Version below. Note that these are ordered,
     --  so that tests like Ada_Version >= Ada_95 are legitimate and useful.
     --  Think twice before using "="; Ada_Version >= Ada_2012 is more likely
     --  what you want, because it will apply to future versions of the language.
+    --  Note that Ada_With_Extensions should always be last since it should
+    --  always be a superset of the latest Ada version.
  
     --  WARNING: There is a matching C declaration of this type in fe.h
  
*************** package Opt is
*** 108,114 ****
     --  remains set to Ada_Version_Default). This is used in the rare cases
     --  (notably pragma Obsolescent) where we want the explicit version set.
  
!    Ada_Version_Runtime : Ada_Version_Type := Ada_2020;
     --  GNAT
     --  Ada version used to compile the runtime. Used to set Ada_Version (but
     --  not Ada_Version_Explicit) when compiling predefined or internal units.
--- 111,117 ----
     --  remains set to Ada_Version_Default). This is used in the rare cases
     --  (notably pragma Obsolescent) where we want the explicit version set.
  
!    Ada_Version_Runtime : Ada_Version_Type := Ada_With_Extensions;
     --  GNAT
     --  Ada version used to compile the runtime. Used to set Ada_Version (but
     --  not Ada_Version_Explicit) when compiling predefined or internal units.
*************** package Opt is
*** 188,193 ****
--- 191,198 ----
     --  are valid and in range of their representations. This feature is now
     --  fully enabled in the compiler.
  
+    --  WARNING: There is a matching C declaration of this variable in fe.h
+ 
     Back_Annotate_Rep_Info : Boolean := False;
     --  GNAT
     --  If set True, enables back annotation of representation information
*************** package Opt is
*** 347,361 ****
     --    set True to delete only the files produced by the compiler but not the
     --    library files or the executable files.
  
-    Compiler_Unit : Boolean := False;
-    --  GNAT1
-    --  Set True by an occurrence of pragma Compiler_Unit_Warning (or of the
-    --  obsolete pragma Compiler_Unit) in the main unit. Once set True, stays
-    --  True, since any units that are with'ed directly or indirectly by
-    --  a Compiler_Unit_Warning main unit are subject to the same restrictions.
-    --  Such units really should have their own pragmas, but we do not bother to
-    --  check for that, so this transitivity provides extra checking.
- 
     Config_File : Boolean := True;
     --  GNAT
     --  Set to False to inhibit reading and processing of gnat.adc file
--- 352,357 ----
*************** package Opt is
*** 623,632 ****
     --  Set to True to convert nonbinary modular additions into code
     --  that relies on the front-end expansion of operator Mod.
  
!    Extensions_Allowed : Boolean := False;
!    --  GNAT
!    --  Set to True by switch -gnatX if GNAT specific language extensions
!    --  are allowed. See GNAT RM for details.
  
     type External_Casing_Type is (
       As_Is,       -- External names cased as they appear in the Ada source
--- 619,628 ----
     --  Set to True to convert nonbinary modular additions into code
     --  that relies on the front-end expansion of operator Mod.
  
!    function Extensions_Allowed return Boolean is
!      (Ada_Version = Ada_With_Extensions);
!    --  True if GNAT specific language extensions are allowed. See GNAT RM for
!    --  details.
  
     type External_Casing_Type is (
       As_Is,       -- External names cased as they appear in the Ada source
*************** package Opt is
*** 912,917 ****
--- 908,918 ----
     --  directory if these files already exist or in the source directory
     --  if not.
  
+    JSON_Output : Boolean := False;
+    --  GNAT
+    --  Output error and warning messages in JSON format. Set to true when the
+    --  backend option "-fdiagnostics-format=json" is found on the command line.
+ 
     Keep_Going : Boolean := False;
     --  GNATMAKE, GPRBUILD
     --  When True signals to ignore compilation errors and keep processing
*************** package Opt is
*** 1021,1042 ****
     --  GNATBIND
     --  Set to True to enable XDR in s-stratt.adb. Set by -xdr.
  
-    type Create_Repinfo_File_Proc is access procedure (Src  : String);
-    type Write_Repinfo_Line_Proc  is access procedure (Info : String);
-    type Close_Repinfo_File_Proc  is access procedure;
-    --  Types used for procedure addresses below
- 
-    Create_Repinfo_File_Access : Create_Repinfo_File_Proc := null;
-    Write_Repinfo_Line_Access  : Write_Repinfo_Line_Proc  := null;
-    Close_Repinfo_File_Access  : Close_Repinfo_File_Proc  := null;
-    --  GNAT
-    --  These three locations are left null when operating in non-compiler (e.g.
-    --  ASIS mode), but when operating in compiler mode, they are set to point
-    --  to the three corresponding procedures in Osint-C. The reason for this
-    --  slightly strange interface is to stop Repinfo from dragging in Osint in
-    --  ASIS mode, which would include lots of unwanted units in the ASIS build.
-    --  ??? Revisit this now that ASIS mode is gone.
- 
     type Create_List_File_Proc is access procedure (S : String);
     type Write_List_Info_Proc  is access procedure (S : String);
     type Close_List_File_Proc  is access procedure;
--- 1022,1027 ----
*************** package Opt is
*** 1528,1534 ****
     Table_Factor : Int := 1;
     --  GNAT
     --  Factor by which all initial table sizes set in Alloc are multiplied.
!    --  Used in Table to calculate initial table sizes (the initial table size
     --  is the value in Alloc, used as the Table_Initial parameter value,
     --  multiplied by the factor given here. The default value is used if no
     --  -gnatT switch appears.
--- 1513,1519 ----
     Table_Factor : Int := 1;
     --  GNAT
     --  Factor by which all initial table sizes set in Alloc are multiplied.
!    --  Used in Table to calculate initial table sizes. The initial table size
     --  is the value in Alloc, used as the Table_Initial parameter value,
     --  multiplied by the factor given here. The default value is used if no
     --  -gnatT switch appears.
*************** package Opt is
*** 1643,1649 ****
     Unique_Error_Tag : Boolean := Tag_Errors;
     --  GNAT
     --  Indicates if error messages are to be prefixed by the string error:
!    --  Initialized from Tag_Errors, can be forced on with the -gnatU switch.
  
     Unnest_Subprogram_Mode : Boolean := False;
     --  If true, activates the circuitry for unnesting subprograms (see the spec
--- 1628,1635 ----
     Unique_Error_Tag : Boolean := Tag_Errors;
     --  GNAT
     --  Indicates if error messages are to be prefixed by the string error:
!    --  Initialized from Tag_Errors, can be forced on with the -gnatU switch and
!    --  disabled with -gnatd_U.
  
     Unnest_Subprogram_Mode : Boolean := False;
     --  If true, activates the circuitry for unnesting subprograms (see the spec
*************** package Opt is
*** 1726,1736 ****
     --  including warnings on Ada 2012 obsolescent features used in Ada 2012
     --  mode. Modified by use of -gnatwy/Y.
  
!    Warn_On_Ada_202X_Compatibility : Boolean := True;
     --  GNAT
!    --  Set to True to generate all warnings on Ada 202X compatibility issues,
!    --  including warnings on Ada 202X obsolescent features used in Ada 202X
!    --  mode. ???There is no warning switch for this yet.
  
     Warn_On_All_Unread_Out_Parameters : Boolean := False;
     --  GNAT
--- 1712,1722 ----
     --  including warnings on Ada 2012 obsolescent features used in Ada 2012
     --  mode. Modified by use of -gnatwy/Y.
  
!    Warn_On_Ada_2022_Compatibility : Boolean := True;
     --  GNAT
!    --  Set to True to generate all warnings on Ada 2022 compatibility issues,
!    --  including warnings on Ada 2022 obsolescent features used in Ada 2022
!    --  mode.
  
     Warn_On_All_Unread_Out_Parameters : Boolean := False;
     --  GNAT
*************** package Opt is
*** 1885,1892 ****
  
     Warn_On_Suspicious_Modulus_Value : Boolean := True;
     --  GNAT
!    --  Set to True to generate warnings for suspicious modulus values. The
!    --  default is that this warning is enabled. Modified by -gnatw.m/.M.
  
     Warn_On_Unchecked_Conversion : Boolean := True;
     --  GNAT
--- 1871,1879 ----
  
     Warn_On_Suspicious_Modulus_Value : Boolean := True;
     --  GNAT
!    --  Set to True to generate warnings for suspicious modulus values, as well
!    --  as negative literals of a modular type. The default is that this warning
!    --  is enabled. Modified by -gnatw.m/.M.
  
     Warn_On_Unchecked_Conversion : Boolean := True;
     --  GNAT
*************** package Opt is
*** 2039,2052 ****
     --  GNAT
     --  Set True by use of the configuration pragma Suppress_Exception_Messages
  
-    Extensions_Allowed_Config : Boolean;
-    --  GNAT
-    --  This is the flag that indicates whether extensions are allowed. It can
-    --  be set True either by use of the -gnatX switch, or by use of the
-    --  configuration pragma Extensions_Allowed (On). It is always set to True
-    --  for internal GNAT units, since extensions are always permitted in such
-    --  units.
- 
     External_Name_Exp_Casing_Config : External_Casing_Type;
     --  GNAT
     --  This is the value of the configuration switch that controls casing of
--- 2026,2031 ----
*************** private
*** 2330,2336 ****
        Default_SSO                    : Character;
        Dynamic_Elaboration_Checks     : Boolean;
        Exception_Locations_Suppressed : Boolean;
-       Extensions_Allowed             : Boolean;
        External_Name_Exp_Casing       : External_Casing_Type;
        External_Name_Imp_Casing       : External_Casing_Type;
        Fast_Math                      : Boolean;
--- 2309,2314 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/osint-b.adb gcc-12.1.0/gcc/ada/osint-b.adb
*** gcc-11.3.0/gcc/ada/osint-b.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/osint-b.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/osint-b.ads gcc-12.1.0/gcc/ada/osint-b.ads
*** gcc-11.3.0/gcc/ada/osint-b.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/osint-b.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/osint-c.adb gcc-12.1.0/gcc/ada/osint-c.adb
*** gcc-11.3.0/gcc/ada/osint-c.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/osint-c.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
*************** package body Osint.C is
*** 520,529 ****
  begin
     Adjust_OS_Resource_Limits;
  
-    Opt.Create_Repinfo_File_Access := Create_Repinfo_File'Access;
-    Opt.Write_Repinfo_Line_Access  := Write_Repinfo_Line'Access;
-    Opt.Close_Repinfo_File_Access  := Close_Repinfo_File'Access;
- 
     Opt.Create_List_File_Access := Create_List_File'Access;
     Opt.Write_List_Info_Access  := Write_List_Info'Access;
     Opt.Close_List_File_Access  := Close_List_File'Access;
--- 520,525 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/osint-c.ads gcc-12.1.0/gcc/ada/osint-c.ads
*** gcc-11.3.0/gcc/ada/osint-c.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/osint-c.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/osint-l.adb gcc-12.1.0/gcc/ada/osint-l.adb
*** gcc-11.3.0/gcc/ada/osint-l.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/osint-l.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/osint-l.ads gcc-12.1.0/gcc/ada/osint-l.ads
*** gcc-11.3.0/gcc/ada/osint-l.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/osint-l.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/osint-m.adb gcc-12.1.0/gcc/ada/osint-m.adb
*** gcc-11.3.0/gcc/ada/osint-m.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/osint-m.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
***************
*** 23,39 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
- with Osint;
- 
- pragma Elaborate_All (Osint);
- --  This pragma is needed because of the call to Set_Program in the
- --  elaboration of the package. We cannot rely on the static model
- --  of elaboration since the compiler is routinely compiled with
- --  checks off (-gnatp), and with older versions of the compiler
- --  (up to and including most 5.04 wavefronts), -gnatp suppresses
- --  the static elaboration check mechanisms. It could be removed
- --  one day, but there really is no need to do so.
- 
  package body Osint.M is
  
     -----------------------
--- 23,28 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/osint-m.ads gcc-12.1.0/gcc/ada/osint-m.ads
*** gcc-11.3.0/gcc/ada/osint-m.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/osint-m.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/osint.adb gcc-12.1.0/gcc/ada/osint.adb
*** gcc-11.3.0/gcc/ada/osint.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/osint.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Osint is
*** 49,58 ****
     use type CRTL.size_t;
  
     Running_Program : Program_Type := Unspecified;
!    --  comment required here ???
  
     Program_Set : Boolean := False;
!    --  comment required here ???
  
     Std_Prefix : String_Ptr;
     --  Standard prefix, computed dynamically the first time Relocate_Path
--- 49,59 ----
     use type CRTL.size_t;
  
     Running_Program : Program_Type := Unspecified;
!    --  Set by Set_Program to indicate which of Compiler, Binder, etc is
!    --  running.
  
     Program_Set : Boolean := False;
!    --  True if Set_Program has been called; used to detect duplicate calls.
  
     Std_Prefix : String_Ptr;
     --  Standard prefix, computed dynamically the first time Relocate_Path
*************** package body Osint is
*** 151,159 ****
     function To_Path_String_Access
       (Path_Addr : Address;
        Path_Len  : CRTL.size_t) return String_Access;
!    --  Converts a C String to an Ada String. Are we doing this to avoid withing
!    --  Interfaces.C.Strings ???
!    --  Caller must free result.
  
     function Include_Dir_Default_Prefix return String_Access;
     --  Same as exported version, except returns a String_Access
--- 152,160 ----
     function To_Path_String_Access
       (Path_Addr : Address;
        Path_Len  : CRTL.size_t) return String_Access;
!    --  Converts a C String to an Ada String. We don't use a more general
!    --  purpose facility, because we are dealing with low-level types like
!    --  Address. Caller must free result.
  
     function Include_Dir_Default_Prefix return String_Access;
     --  Same as exported version, except returns a String_Access
*************** package body Osint is
*** 1058,1063 ****
--- 1059,1082 ----
     ----------------------
  
     function File_Names_Equal (File1, File2 : String) return Boolean is
+ 
+       function To_Lower (A : String) return String;
+       --  For bootstrap reasons, we cannot use To_Lower function from
+       --  System.Case_Util.
+ 
+       --------------
+       -- To_Lower --
+       --------------
+ 
+       function To_Lower (A : String) return String is
+          Result : String := A;
+       begin
+          To_Lower (Result);
+          return Result;
+       end To_Lower;
+ 
+    --  Start of processing for File_Names_Equal
+ 
     begin
        if File_Names_Case_Sensitive then
           return File1 = File2;
*************** package body Osint is
*** 1348,1358 ****
        Lib_File : out File_Name_Type;
        Attr     : out File_Attributes)
     is
-       A : aliased File_Attributes;
     begin
!       --  ??? seems we could use Smart_Find_File here
!       Find_File (N, Library, Lib_File, A'Access);
!       Attr := A;
     end Full_Lib_File_Name;
  
     ------------------------
--- 1367,1374 ----
        Lib_File : out File_Name_Type;
        Attr     : out File_Attributes)
     is
     begin
!       Smart_Find_File (N, Library, Lib_File, Attr);
     end Full_Lib_File_Name;
  
     ------------------------
*************** package body Osint is
*** 1891,1897 ****
                 Name_Len := Full_Name'Length - 1;
                 Name_Buffer (1 .. Name_Len) :=
                   Full_Name (1 .. Full_Name'Last - 1);
!                Found := Name_Find;  --  ??? Was Name_Enter, no obvious reason
              end if;
           end if;
        end;
--- 1907,1913 ----
                 Name_Len := Full_Name'Length - 1;
                 Name_Buffer (1 .. Name_Len) :=
                   Full_Name (1 .. Full_Name'Last - 1);
!                Found := Name_Find;
              end if;
           end if;
        end;
*************** package body Osint is
*** 1917,1923 ****
        begin
           if Opt.Look_In_Primary_Dir then
              Locate_File
!               (N, Source, Primary_Directory, File_Name, File, Attr'Access);
  
              if File /= No_File and then T = File_Stamp (N) then
                 return File;
--- 1933,1940 ----
        begin
           if Opt.Look_In_Primary_Dir then
              Locate_File
!               (N, Source, Primary_Directory, File_Name, File,
!                Attr'Unchecked_Access);
  
              if File /= No_File and then T = File_Stamp (N) then
                 return File;
*************** package body Osint is
*** 1927,1933 ****
           Last_Dir := Src_Search_Directories.Last;
  
           for D in Primary_Directory + 1 .. Last_Dir loop
!             Locate_File (N, Source, D, File_Name, File, Attr'Access);
  
              if File /= No_File and then T = File_Stamp (File) then
                 return File;
--- 1944,1950 ----
           Last_Dir := Src_Search_Directories.Last;
  
           for D in Primary_Directory + 1 .. Last_Dir loop
!             Locate_File (N, Source, D, File_Name, File, Attr'Unchecked_Access);
  
              if File /= No_File and then T = File_Stamp (File) then
                 return File;
*************** package body Osint is
*** 2193,2200 ****
        GNAT_Time : Time_Stamp_Type;
  
        type Underlying_OS_Time is
!         range -(2 ** (Standard'Address_Size - Integer'(1))) ..
!               +(2 ** (Standard'Address_Size - Integer'(1)) - 1);
        --  Underlying_OS_Time is a redeclaration of OS_Time to allow integer
        --  manipulation. Remove this in favor of To_Ada/To_C once newer
        --  GNAT releases are available with these functions.
--- 2210,2216 ----
        GNAT_Time : Time_Stamp_Type;
  
        type Underlying_OS_Time is
!         range -(2 ** 63) ..  +(2 ** 63 - 1);
        --  Underlying_OS_Time is a redeclaration of OS_Time to allow integer
        --  manipulation. Remove this in favor of To_Ada/To_C once newer
        --  GNAT releases are available with these functions.
*************** package body Osint is
*** 2263,2270 ****
  
        Find_Program_Name;
  
-       Start_Of_Suffix := Name_Len + 1;
- 
        --  Find the target prefix if any, for the cross compilation case.
        --  For instance in "powerpc-elf-gcc" the target prefix is
        --  "powerpc-elf-"
--- 2279,2284 ----
*************** package body Osint is
*** 2288,2296 ****
           end if;
        end loop;
  
!       if End_Of_Prefix > 1 then
!          Start_Of_Suffix := End_Of_Prefix + Prog'Length + 1;
!       end if;
  
        --  Create the new program name
  
--- 2302,2308 ----
           end if;
        end loop;
  
!       Start_Of_Suffix := End_Of_Prefix + Prog'Length + 1;
  
        --  Create the new program name
  
*************** package body Osint is
*** 2375,2388 ****
        Nb_Relative_Dir := 0;
        for J in 1 .. Len loop
  
!          --  Treat any control character as a path separator. Note that we do
           --  not treat space as a path separator (we used to treat space as a
           --  path separator in an earlier version). That way space can appear
           --  as a legitimate character in a path name.
  
!          --  Why do we treat all control characters as path separators???
! 
!          if S (J) in ASCII.NUL .. ASCII.US then
              S (J) := Path_Separator;
           end if;
  
--- 2387,2398 ----
        Nb_Relative_Dir := 0;
        for J in 1 .. Len loop
  
!          --  Treat any EOL character as a path separator. Note that we do
           --  not treat space as a path separator (we used to treat space as a
           --  path separator in an earlier version). That way space can appear
           --  as a legitimate character in a path name.
  
!          if S (J) = ASCII.LF or else S (J) = ASCII.CR then
              S (J) := Path_Separator;
           end if;
  
*************** package body Osint is
*** 2566,2572 ****
        --  Read data from the file
  
        declare
!          Actual_Len : Integer := 0;
  
           Lo : constant Text_Ptr := 0;
           --  Low bound for allocated text buffer
--- 2576,2582 ----
        --  Read data from the file
  
        declare
!          Actual_Len : Integer;
  
           Lo : constant Text_Ptr := 0;
           --  Low bound for allocated text buffer
*************** package body Osint is
*** 3164,3170 ****
     -- Write_With_Check --
     ----------------------
  
!    procedure Write_With_Check (A  : Address; N  : Integer) is
        Ignore : Boolean;
     begin
        if N = Write (Output_FD, A, N) then
--- 3174,3180 ----
     -- Write_With_Check --
     ----------------------
  
!    procedure Write_With_Check (A : Address; N : Integer) is
        Ignore : Boolean;
     begin
        if N = Write (Output_FD, A, N) then
diff -Nrcpad gcc-11.3.0/gcc/ada/osint.ads gcc-12.1.0/gcc/ada/osint.ads
*** gcc-11.3.0/gcc/ada/osint.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/osint.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,39 ****
  with Namet; use Namet;
  with Types; use Types;
  
! with System;                  use System;
  
  pragma Warnings (Off);
  --  This package is used also by gnatcoll
! with System.OS_Lib;           use System.OS_Lib;
  pragma Warnings (On);
  
  with System.Storage_Elements;
--- 29,39 ----
  with Namet; use Namet;
  with Types; use Types;
  
! with System; use System;
  
  pragma Warnings (Off);
  --  This package is used also by gnatcoll
! with System.OS_Lib; use System.OS_Lib;
  pragma Warnings (On);
  
  with System.Storage_Elements;
*************** package Osint is
*** 52,57 ****
--- 52,61 ----
     Project_Include_Path_File : constant String := "ADA_PRJ_INCLUDE_FILE";
     Project_Objects_Path_File : constant String := "ADA_PRJ_OBJECTS_FILE";
  
+    Null_FD : constant File_Descriptor := -2;
+    --  Uninitialized file descriptor. Copied from System.OS_Lib for bootstrap
+    --  reasons.
+ 
     Output_FD : File_Descriptor;
     --  File descriptor for current library info, list, tree, C, H, or binder
     --  output. Only one of these is open at a time, so we need only one FD.
*************** package Osint is
*** 140,153 ****
     --  path) in Name_Buffer, with the length in Name_Len.
  
     function Program_Name (Nam : String; Prog : String) return String_Access;
!    --  In the native compilation case, Create a string containing Nam. In the
     --  cross compilation case, looks at the prefix of the current program being
!    --  run and prepend it to Nam. For instance if the program being run is
     --  <target>-gnatmake and Nam is "gcc", the returned value will be a pointer
!    --  to "<target>-gcc". In the specific case where AAMP_On_Target is set, the
!    --  name "gcc" is mapped to "gnaamp", and names of the form "gnat*" are
!    --  mapped to "gnaamp*". This function clobbers Name_Buffer and Name_Len.
!    --  Also look at any suffix, e.g. gnatmake-4.1 -> "gcc-4.1". Prog is the
     --  default name of the current program being executed, e.g. "gnatmake",
     --  "gnatlink".
  
--- 144,155 ----
     --  path) in Name_Buffer, with the length in Name_Len.
  
     function Program_Name (Nam : String; Prog : String) return String_Access;
!    --  In the native compilation case, creates a string containing Nam. In the
     --  cross compilation case, looks at the prefix of the current program being
!    --  run and prepends it to Nam. For instance if the program being run is
     --  <target>-gnatmake and Nam is "gcc", the returned value will be a pointer
!    --  to "<target>-gcc". This function clobbers Name_Buffer and Name_Len.
!    --  Also looks at any suffix, e.g. gnatmake-4.1 -> "gcc-4.1". Prog is the
     --  default name of the current program being executed, e.g. "gnatmake",
     --  "gnatlink".
  
*************** private
*** 718,726 ****
     File_Names : File_Name_Array_Ptr :=
                    new File_Name_Array (1 .. Int (Argument_Count) + 2);
     --  As arguments are scanned, file names are stored in this array. The
!    --  strings do not have terminating NUL files. The array is extensible,
!    --  because when using project files, there may be more files than
!    --  arguments on the command line.
  
     type File_Index_Array is array (Int range <>) of Int;
     type File_Index_Array_Ptr is access File_Index_Array;
--- 720,728 ----
     File_Names : File_Name_Array_Ptr :=
                    new File_Name_Array (1 .. Int (Argument_Count) + 2);
     --  As arguments are scanned, file names are stored in this array. The
!    --  strings do not have terminating NULs. The array is extensible, because
!    --  when using project files, there may be more files than arguments on the
!    --  command line.
  
     type File_Index_Array is array (Int range <>) of Int;
     type File_Index_Array_Ptr is access File_Index_Array;
*************** private
*** 772,778 ****
     procedure Write_Info (Info : String);
     --  Implements Write_Binder_Info, Write_Debug_Info, and Write_Library_Info
  
!    procedure Write_With_Check (A : Address; N  : Integer);
     --  Writes N bytes from buffer starting at address A to file whose FD is
     --  stored in Output_FD, and whose file name is stored as a File_Name_Type
     --  in Output_File_Name. A check is made for disk full, and if this is
--- 774,780 ----
     procedure Write_Info (Info : String);
     --  Implements Write_Binder_Info, Write_Debug_Info, and Write_Library_Info
  
!    procedure Write_With_Check (A : Address; N : Integer);
     --  Writes N bytes from buffer starting at address A to file whose FD is
     --  stored in Output_FD, and whose file name is stored as a File_Name_Type
     --  in Output_File_Name. A check is made for disk full, and if this is
diff -Nrcpad gcc-11.3.0/gcc/ada/output.adb gcc-12.1.0/gcc/ada/output.adb
*** gcc-11.3.0/gcc/ada/output.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/output.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Output is
*** 467,472 ****
--- 467,498 ----
        end if;
     end Write_Int;
  
+    ------------------
+    -- Write_Int_64 --
+    ------------------
+ 
+    procedure Write_Int_64 (Val : Int_64) is
+       subtype Nonpositive is Int_64 range Int_64'First .. 0;
+       procedure Write_Abs (Val : Nonpositive);
+ 
+       procedure Write_Abs (Val : Nonpositive) is
+       begin
+          if Val < -9 then
+             Write_Abs (Val / 10);
+          end if;
+ 
+          Write_Char (Character'Val (-(Val rem 10) + Character'Pos ('0')));
+       end Write_Abs;
+ 
+    begin
+       if Val < 0 then
+          Write_Char ('-');
+          Write_Abs (Val);
+       else
+          Write_Abs (-Val);
+       end if;
+    end Write_Int_64;
+ 
     ----------------
     -- Write_Line --
     ----------------
diff -Nrcpad gcc-11.3.0/gcc/ada/output.ads gcc-12.1.0/gcc/ada/output.ads
*** gcc-11.3.0/gcc/ada/output.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/output.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Output is
*** 124,129 ****
--- 124,130 ----
     --  Similar as Write_Eol, except that trailing spaces are not removed
  
     procedure Write_Int (Val : Int);
+    procedure Write_Int_64 (Val : Int_64);
     --  Write an integer value with no leading blanks or zeroes. Negative values
     --  are preceded by a minus sign).
  
diff -Nrcpad gcc-11.3.0/gcc/ada/par-ch10.adb gcc-12.1.0/gcc/ada/par-ch10.adb
*** gcc-11.3.0/gcc/ada/par-ch10.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-ch10.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ch10 is
*** 532,544 ****
                                 | N_Subprogram_Body
                                 | N_Subprogram_Renaming_Declaration
           then
!             Unit_Node := Specification (Unit_Node);
! 
!          elsif Nkind (Unit_Node) = N_Subprogram_Renaming_Declaration then
!             if Ada_Version = Ada_83 then
                 Error_Msg_N
                   ("(Ada 83) library unit renaming not allowed", Unit_Node);
              end if;
           end if;
  
           if Nkind (Unit_Node) in N_Task_Body
--- 532,545 ----
                                 | N_Subprogram_Body
                                 | N_Subprogram_Renaming_Declaration
           then
!             if Nkind (Unit_Node) = N_Subprogram_Renaming_Declaration
!               and then Ada_Version = Ada_83
!             then
                 Error_Msg_N
                   ("(Ada 83) library unit renaming not allowed", Unit_Node);
              end if;
+ 
+             Unit_Node := Specification (Unit_Node);
           end if;
  
           if Nkind (Unit_Node) in N_Task_Body
*************** package body Ch10 is
*** 555,561 ****
                                    | N_Generic_Function_Renaming_Declaration
                                    | N_Generic_Package_Renaming_Declaration
                                    | N_Generic_Procedure_Renaming_Declaration
!           or else Nkind (Unit_Node) in N_Package_Body
                                    | N_Package_Instantiation
                                    | N_Package_Renaming_Declaration
                                    | N_Package_Specification
--- 556,562 ----
                                    | N_Generic_Function_Renaming_Declaration
                                    | N_Generic_Package_Renaming_Declaration
                                    | N_Generic_Procedure_Renaming_Declaration
!                                   | N_Package_Body
                                    | N_Package_Instantiation
                                    | N_Package_Renaming_Declaration
                                    | N_Package_Specification
*************** package body Ch10 is
*** 1162,1185 ****
        Loc        : Source_Ptr;
        SR_Present : Boolean)
     is
!       Unum : constant Unit_Number_Type    := Get_Cunit_Unit_Number (Cunit);
!       Sind : constant Source_File_Index   := Source_Index (Unum);
!       Unam : constant Unit_Name_Type      := Unit_Name (Unum);
  
     begin
!       if List_Units then
!          Write_Str ("Unit ");
!          Write_Unit_Name (Unit_Name (Unum));
!          Unit_Location (Sind, Loc);
! 
!          if SR_Present then
!             Write_Str (", SR");
!          end if;
  
!          Write_Str (", file name ");
!          Write_Name (Get_File_Name (Unam, Nkind (Unit (Cunit)) = N_Subunit));
!          Write_Eol;
        end if;
     end Unit_Display;
  
     -------------------
--- 1163,1184 ----
        Loc        : Source_Ptr;
        SR_Present : Boolean)
     is
!       Unum : constant Unit_Number_Type  := Get_Cunit_Unit_Number (Cunit);
!       Sind : constant Source_File_Index := Source_Index (Unum);
!       Unam : constant Unit_Name_Type    := Unit_Name (Unum);
  
     begin
!       Write_Str ("Unit ");
!       Write_Unit_Name (Unit_Name (Unum));
!       Unit_Location (Sind, Loc);
  
!       if SR_Present then
!          Write_Str (", SR");
        end if;
+ 
+       Write_Str (", file name ");
+       Write_Name (Get_File_Name (Unam, Nkind (Unit (Cunit)) = N_Subunit));
+       Write_Eol;
     end Unit_Display;
  
     -------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/par-ch11.adb gcc-12.1.0/gcc/ada/par-ch11.adb
*** gcc-11.3.0/gcc/ada/par-ch11.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-ch11.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** pragma Style_Checks (All_Checks);
*** 27,33 ****
  --  Turn off subprogram body ordering check. Subprograms are in order
  --  by RM section rather than alphabetical
  
! with Sinfo.CN; use Sinfo.CN;
  
  separate (Par)
  package body Ch11 is
--- 27,33 ----
  --  Turn off subprogram body ordering check. Subprograms are in order
  --  by RM section rather than alphabetical
  
! with Sinfo.CN;       use Sinfo.CN;
  
  separate (Par)
  package body Ch11 is
*************** package body Ch11 is
*** 56,62 ****
     --  Error_Recovery : Cannot raise Error_Resync
  
     function P_Handled_Sequence_Of_Statements return Node_Id is
!       Handled_Stmt_Seq_Node  : Node_Id;
     begin
        Handled_Stmt_Seq_Node :=
          New_Node (N_Handled_Sequence_Of_Statements, Token_Ptr);
--- 56,62 ----
     --  Error_Recovery : Cannot raise Error_Resync
  
     function P_Handled_Sequence_Of_Statements return Node_Id is
!       Handled_Stmt_Seq_Node : Node_Id;
     begin
        Handled_Stmt_Seq_Node :=
          New_Node (N_Handled_Sequence_Of_Statements, Token_Ptr);
*************** package body Ch11 is
*** 233,238 ****
--- 233,256 ----
           Set_Expression (Raise_Node, P_Expression);
        end if;
  
+       if Token = Tok_When then
+          Error_Msg_GNAT_Extension ("raise when statement");
+ 
+          Mutate_Nkind (Raise_Node, N_Raise_When_Statement);
+ 
+          if Token = Tok_When and then not Missing_Semicolon_On_When then
+             Scan; -- past WHEN
+             Set_Condition (Raise_Node, P_Expression_No_Right_Paren);
+ 
+          --  Allow IF instead of WHEN, giving error message
+ 
+          elsif Token = Tok_If then
+             T_When;
+             Scan; -- past IF used in place of WHEN
+             Set_Condition (Raise_Node, P_Expression_No_Right_Paren);
+          end if;
+       end if;
+ 
        TF_Semicolon;
        return Raise_Node;
     end P_Raise_Statement;
diff -Nrcpad gcc-11.3.0/gcc/ada/par-ch12.adb gcc-12.1.0/gcc/ada/par-ch12.adb
*** gcc-11.3.0/gcc/ada/par-ch12.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-ch12.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ch12 is
*** 184,190 ****
                 if Token = Tok_Package then
                    Append (P_Formal_Package_Declaration, Decls);
  
!                elsif Token = Tok_Procedure or Token = Tok_Function then
                    Append (P_Formal_Subprogram_Declaration, Decls);
  
                 else
--- 184,190 ----
                 if Token = Tok_Package then
                    Append (P_Formal_Package_Declaration, Decls);
  
!                elsif Token in Tok_Procedure | Tok_Function then
                    Append (P_Formal_Subprogram_Declaration, Decls);
  
                 else
*************** package body Ch12 is
*** 559,564 ****
--- 559,578 ----
  
        if Def_Node /= Error then
           Set_Formal_Type_Definition (Decl_Node, Def_Node);
+ 
+          if Token = Tok_Or then
+             Error_Msg_Ada_2022_Feature
+               ("default for formal type", Sloc (Decl_Node));
+             Scan;   --  Past OR
+ 
+             if Token /= Tok_Use then
+                Error_Msg_SC ("missing USE for default subtype");
+             else
+                Scan;   -- Past USE
+                Set_Default_Subtype_Mark (Decl_Node, P_Name);
+             end if;
+          end if;
+ 
           P_Aspect_Specifications (Decl_Node);
  
        else
*************** package body Ch12 is
*** 727,737 ****
                 return Error;
              end if;
  
           when Tok_Private =>
              return P_Formal_Private_Type_Definition;
  
           when Tok_Tagged =>
!             if Next_Token_Is (Tok_Semicolon) then
                 Typedef_Node :=
                   New_Node (N_Formal_Incomplete_Type_Definition, Token_Ptr);
                 Set_Tagged_Present (Typedef_Node);
--- 741,758 ----
                 return Error;
              end if;
  
+          when Tok_Or =>
+             --  Ada_2022: incomplete type with default
+             return
+                  New_Node (N_Formal_Incomplete_Type_Definition, Token_Ptr);
+ 
           when Tok_Private =>
              return P_Formal_Private_Type_Definition;
  
           when Tok_Tagged =>
!             if Next_Token_Is (Tok_Semicolon)
!               or else Next_Token_Is (Tok_Or)
!             then
                 Typedef_Node :=
                   New_Node (N_Formal_Incomplete_Type_Definition, Token_Ptr);
                 Set_Tagged_Present (Typedef_Node);
*************** package body Ch12 is
*** 960,966 ****
  
              --    type DT is new T with private with Atomic;
  
!             Error_Msg_Ada_2020_Feature
                ("formal type with aspect specification", Token_Ptr);
  
              return Def_Node;
--- 981,987 ----
  
              --    type DT is new T with private with Atomic;
  
!             Error_Msg_Ada_2022_Feature
                ("formal type with aspect specification", Token_Ptr);
  
              return Def_Node;
*************** package body Ch12 is
*** 1144,1149 ****
--- 1165,1171 ----
     --      [ASPECT_SPECIFICATIONS];
  
     --  SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <>
+    --                       | ( EXPRESSION )  -- Allowed as extension (-gnatX)
  
     --  DEFAULT_NAME ::= NAME | null
  
*************** package body Ch12 is
*** 1198,1203 ****
--- 1220,1248 ----
  
              Scan;  --  past NULL
  
+          --  When extensions are enabled, a formal function can have a default
+          --  given by a parenthesized expression (expression function syntax).
+ 
+          elsif Token = Tok_Left_Paren then
+             Error_Msg_GNAT_Extension
+               ("expression default for formal subprograms");
+ 
+             if Nkind (Spec_Node) = N_Function_Specification then
+                Scan;  --  past "("
+ 
+                Set_Expression (Def_Node, P_Expression);
+ 
+                if Token /= Tok_Right_Paren then
+                   Error_Msg_SC ("missing "")"" at end of expression default");
+                else
+                   Scan;  --  past ")"
+                end if;
+ 
+             else
+                Error_Msg_SP
+                  ("only functions can specify a default expression");
+             end if;
+ 
           else
              Set_Default_Name (Def_Node, P_Name);
           end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/par-ch13.adb gcc-12.1.0/gcc/ada/par-ch13.adb
*** gcc-11.3.0/gcc/ada/par-ch13.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-ch13.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ch13 is
*** 47,74 ****
        Scan_State : Saved_Scan_State;
        Result     : Boolean;
  
-       function Possible_Misspelled_Aspect return Boolean;
-       --  Returns True, if Token_Name is a misspelling of some aspect name
- 
        function With_Present return Boolean;
        --  Returns True if WITH is present, indicating presence of aspect
        --  specifications. Also allows incorrect use of WHEN in place of WITH.
  
-       --------------------------------
-       -- Possible_Misspelled_Aspect --
-       --------------------------------
- 
-       function Possible_Misspelled_Aspect return Boolean is
-       begin
-          for J in Aspect_Id_Exclude_No_Aspect loop
-             if Is_Bad_Spelling_Of (Token_Name, Aspect_Names (J)) then
-                return True;
-             end if;
-          end loop;
- 
-          return False;
-       end Possible_Misspelled_Aspect;
- 
        ------------------
        -- With_Present --
        ------------------
--- 47,56 ----
*************** package body Ch13 is
*** 89,95 ****
                 Scan; -- past WHEN
  
                 if Token = Tok_Identifier
!                  and then Get_Aspect_Id (Token_Name) /= No_Aspect
                 then
                    Error_Msg_SC ("WHEN should be WITH");
                    Restore_Scan_State (Scan_State);
--- 71,77 ----
                 Scan; -- past WHEN
  
                 if Token = Tok_Identifier
!                  and then Is_Aspect_Id (Token_Name)
                 then
                    Error_Msg_SC ("WHEN should be WITH");
                    Restore_Scan_State (Scan_State);
*************** package body Ch13 is
*** 149,156 ****
        --  specification is ill-formed.
  
        elsif not Strict then
!          if Get_Aspect_Id (Token_Name) /= No_Aspect
!            or else Possible_Misspelled_Aspect
           then
              Result := True;
           else
--- 131,138 ----
        --  specification is ill-formed.
  
        elsif not Strict then
!          if Is_Aspect_Id (Token_Name)
!            or else Aspect_Spell_Check (Token_Name)
           then
              Result := True;
           else
*************** package body Ch13 is
*** 164,170 ****
        --  is still an aspect specification so we give an appropriate message.
  
        else
!          if Get_Aspect_Id (Token_Name) = No_Aspect then
              Result := False;
  
           else
--- 146,152 ----
        --  is still an aspect specification so we give an appropriate message.
  
        else
!          if not Is_Aspect_Id (Token_Name) then
              Result := False;
  
           else
*************** package body Ch13 is
*** 271,291 ****
              begin
                 Check_Restriction (Msg_Issued, No_Unrecognized_Aspects, Aspect);
                 if not Msg_Issued then
!                   Error_Msg_Warn := not Debug_Flag_2;
!                   Error_Msg_N
!                     ("<<& is not a valid aspect identifier", Token_Node);
!                   OK := False;
  
!                   --  Check bad spelling
  
-                   for J in Aspect_Id_Exclude_No_Aspect loop
-                      if Is_Bad_Spelling_Of (Token_Name, Aspect_Names (J)) then
-                         Error_Msg_Name_1 := Aspect_Names (J);
-                         Error_Msg_N -- CODEFIX
-                           ("\<<possible misspelling of%", Token_Node);
-                         exit;
-                      end if;
-                   end loop;
                 end if;
              end;
  
--- 253,262 ----
              begin
                 Check_Restriction (Msg_Issued, No_Unrecognized_Aspects, Aspect);
                 if not Msg_Issued then
!                   Bad_Aspect (Token_Node, Token_Name, not Debug_Flag_2);
  
!                   OK := False;
  
                 end if;
              end;
  
*************** package body Ch13 is
*** 456,462 ****
                             --         Aspect => ...
  
                             if Token = Tok_Identifier
!                              and then Get_Aspect_Id (Token_Name) /= No_Aspect
                             then
                                Restore_Scan_State (Scan_State);
  
--- 427,433 ----
                             --         Aspect => ...
  
                             if Token = Tok_Identifier
!                              and then Is_Aspect_Id (Token_Name)
                             then
                                Restore_Scan_State (Scan_State);
  
*************** package body Ch13 is
*** 588,594 ****
           --  and proceed to the next aspect.
  
           elsif Token = Tok_Identifier
!            and then Get_Aspect_Id (Token_Name) /= No_Aspect
           then
              declare
                 Scan_State : Saved_Scan_State;
--- 559,565 ----
           --  and proceed to the next aspect.
  
           elsif Token = Tok_Identifier
!            and then Is_Aspect_Id (Token_Name)
           then
              declare
                 Scan_State : Saved_Scan_State;
*************** package body Ch13 is
*** 626,632 ****
                 Scan; -- past semicolon
  
                 if Token = Tok_Identifier
!                  and then Get_Aspect_Id (Token_Name) /= No_Aspect
                 then
                    Scan; -- past identifier
  
--- 597,603 ----
                 Scan; -- past semicolon
  
                 if Token = Tok_Identifier
!                  and then Is_Aspect_Id (Token_Name)
                 then
                    Scan; -- past identifier
  
diff -Nrcpad gcc-11.3.0/gcc/ada/par-ch2.adb gcc-12.1.0/gcc/ada/par-ch2.adb
*** gcc-11.3.0/gcc/ada/par-ch2.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-ch2.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ch2 is
*** 62,89 ****
  
     --  Error recovery: can raise Error_Resync (cannot return Error)
  
!    function P_Identifier (C : Id_Check := None) return Node_Id is
        Ident_Node : Node_Id;
  
     begin
        --  All set if we do indeed have an identifier
  
-       --  Code duplication, see Par_Ch3.P_Defining_Identifier???
- 
        if Token = Tok_Identifier then
           Check_Future_Keyword;
-          Ident_Node := Token_Node;
-          Scan; -- past Identifier
-          return Ident_Node;
  
        --  If we have a reserved identifier, manufacture an identifier with
        --  a corresponding name after posting an appropriate error message
  
        elsif Is_Reserved_Identifier (C) then
!          Scan_Reserved_Identifier (Force_Msg => False);
!          Ident_Node := Token_Node;
!          Scan; -- past the node
!          return Ident_Node;
  
        --  Otherwise we have junk that cannot be interpreted as an identifier
  
--- 62,85 ----
  
     --  Error recovery: can raise Error_Resync (cannot return Error)
  
!    function P_Identifier
!      (C         : Id_Check := None;
!       Force_Msg : Boolean  := False)
!      return Node_Id
!    is
        Ident_Node : Node_Id;
  
     begin
        --  All set if we do indeed have an identifier
  
        if Token = Tok_Identifier then
           Check_Future_Keyword;
  
        --  If we have a reserved identifier, manufacture an identifier with
        --  a corresponding name after posting an appropriate error message
  
        elsif Is_Reserved_Identifier (C) then
!          Scan_Reserved_Identifier (Force_Msg => Force_Msg);
  
        --  Otherwise we have junk that cannot be interpreted as an identifier
  
*************** package body Ch2 is
*** 91,96 ****
--- 87,101 ----
           T_Identifier; -- to give message
           raise Error_Resync;
        end if;
+ 
+       if Style_Check then
+          Style.Check_Defining_Identifier_Casing;
+       end if;
+ 
+       Ident_Node := Token_Node;
+       Scan; -- past the identifier
+ 
+       return Ident_Node;
     end P_Identifier;
  
     --------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/par-ch3.adb gcc-12.1.0/gcc/ada/par-ch3.adb
*** gcc-11.3.0/gcc/ada/par-ch3.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-ch3.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** pragma Style_Checks (All_Checks);
*** 27,33 ****
  --  Turn off subprogram body ordering check. Subprograms are in order
  --  by RM section rather than alphabetical.
  
! with Sinfo.CN; use Sinfo.CN;
  
  separate (Par)
  
--- 27,33 ----
  --  Turn off subprogram body ordering check. Subprograms are in order
  --  by RM section rather than alphabetical.
  
! with Sinfo.CN;       use Sinfo.CN;
  
  separate (Par)
  
*************** package body Ch3 is
*** 209,247 ****
     --  Error recovery: can raise Error_Resync
  
     function P_Defining_Identifier (C : Id_Check := None) return Node_Id is
!       Ident_Node : Node_Id;
  
     begin
-       --  Scan out the identifier. Note that this code is essentially identical
-       --  to P_Identifier, except that in the call to Scan_Reserved_Identifier
-       --  we set Force_Msg to True, since we want at least one message for each
-       --  separate declaration (but not use) of a reserved identifier.
- 
-       --  Duplication should be removed, common code should be factored???
- 
-       if Token = Tok_Identifier then
-          Check_Future_Keyword;
- 
-       --  If we have a reserved identifier, manufacture an identifier with
-       --  a corresponding name after posting an appropriate error message
- 
-       elsif Is_Reserved_Identifier (C) then
-          Scan_Reserved_Identifier (Force_Msg => True);
- 
-       --  Otherwise we have junk that cannot be interpreted as an identifier
- 
-       else
-          T_Identifier; -- to give message
-          raise Error_Resync;
-       end if;
- 
-       if Style_Check then
-          Style.Check_Defining_Identifier_Casing;
-       end if;
- 
-       Ident_Node := Token_Node;
-       Scan; -- past the identifier
- 
        --  If we already have a defining identifier, clean it out and make
        --  a new clean identifier. This situation arises in some error cases
        --  and we need to fix it.
--- 209,217 ----
     --  Error recovery: can raise Error_Resync
  
     function P_Defining_Identifier (C : Id_Check := None) return Node_Id is
!       Ident_Node : Node_Id := P_Identifier (C, True);
  
     begin
        --  If we already have a defining identifier, clean it out and make
        --  a new clean identifier. This situation arises in some error cases
        --  and we need to fix it.
*************** package body Ch3 is
*** 1379,1387 ****
        procedure No_List is
        begin
           if Num_Idents > 1 then
!             Error_Msg
                ("identifier list not allowed for RENAMES",
!                Sloc (Idents (2)));
           end if;
  
           List_OK := False;
--- 1349,1357 ----
        procedure No_List is
        begin
           if Num_Idents > 1 then
!             Error_Msg_N
                ("identifier list not allowed for RENAMES",
!                Idents (2));
           end if;
  
           List_OK := False;
*************** package body Ch3 is
*** 1486,1492 ****
        --  access_definition
  
        elsif Token = Tok_Renames then
!          Error_Msg_Ada_2020_Feature
             ("object renaming without subtype", Token_Ptr);
  
           Scan; -- past renames
--- 1456,1462 ----
        --  access_definition
  
        elsif Token = Tok_Renames then
!          Error_Msg_Ada_2022_Feature
             ("object renaming without subtype", Token_Ptr);
  
           Scan; -- past renames
*************** package body Ch3 is
*** 2693,2698 ****
--- 2663,2735 ----
        Scan_State       : Saved_Scan_State;
        Aliased_Present  : Boolean := False;
  
+       procedure P_Index_Subtype_Def_With_Fixed_Lower_Bound
+         (Subtype_Mark : Node_Id);
+       --  Parse an unconstrained index range with a fixed lower bound:
+       --    subtype_mark range <expression> .. <>
+       --  This procedure creates a subtype_indication node for the index.
+ 
+       --------------------------------------------
+       --  P_Index_Range_With_Fixed_Lower_Bound  --
+       --------------------------------------------
+ 
+       procedure P_Index_Subtype_Def_With_Fixed_Lower_Bound
+         (Subtype_Mark : Node_Id)
+       is
+          Low_Expr_Node  : constant Node_Id := P_Expression;
+          High_Expr_Node : Node_Id;
+          Indic_Node     : Node_Id;
+          Constr_Node    : Node_Id;
+          Range_Node     : Node_Id;
+ 
+       begin
+          T_Dot_Dot;  -- Error if no ..
+ 
+          --  A box is required at this point, and we'll set the upper bound to
+          --  the same expression as the lower bound (see further below), to
+          --  avoid problems with trying to analyze an Empty node. Analysis can
+          --  still tell that this is a fixed-lower-bound range because the
+          --  index is represented by a subtype_indication in an unconstrained
+          --  array type definition.
+ 
+          if Token = Tok_Box then
+             Scan;
+             High_Expr_Node := Low_Expr_Node;
+ 
+          --  Error if no <> was found, and try to parse an expression since
+          --  it's likely one was given in place of the <>.
+ 
+          else
+             Error_Msg_AP -- CODEFIX
+               ("missing ""'<'>""");
+ 
+             High_Expr_Node := P_Expression;
+          end if;
+ 
+          Constr_Node := New_Node (N_Range_Constraint, Token_Ptr);
+          Range_Node  := New_Node (N_Range, Token_Ptr);
+          Set_Range_Expression (Constr_Node, Range_Node);
+ 
+          Check_Simple_Expression (Low_Expr_Node);
+ 
+          Set_Low_Bound (Range_Node, Low_Expr_Node);
+          Set_High_Bound (Range_Node, High_Expr_Node);
+ 
+          Indic_Node :=
+            New_Node (N_Subtype_Indication, Sloc (Subtype_Mark));
+          Set_Subtype_Mark (Indic_Node, Check_Subtype_Mark (Subtype_Mark));
+          Set_Constraint (Indic_Node, Constr_Node);
+ 
+          Append (Indic_Node, Subs_List);
+       end P_Index_Subtype_Def_With_Fixed_Lower_Bound;
+ 
+       --  Local variables
+ 
+       Is_Constrained_Array_Def : Boolean := True;
+       Subtype_Mark_Node        : Node_Id;
+ 
+    --  Start of processing for P_Array_Type_Definition
+ 
     begin
        Array_Loc := Token_Ptr;
        Scan; -- past ARRAY
*************** package body Ch3 is
*** 2724,2740 ****
           Def_Node := New_Node (N_Unconstrained_Array_Definition, Array_Loc);
           Restore_Scan_State (Scan_State); -- to first subtype mark
  
           loop
!             Append (P_Subtype_Mark_Resync, Subs_List);
              T_Range;
!             T_Box;
              exit when Token = Tok_Right_Paren or else Token = Tok_Of;
              T_Comma;
           end loop;
  
           Set_Subtype_Marks (Def_Node, Subs_List);
  
!       else
           Def_Node := New_Node (N_Constrained_Array_Definition, Array_Loc);
           Restore_Scan_State (Scan_State); -- to first discrete range
  
--- 2761,2875 ----
           Def_Node := New_Node (N_Unconstrained_Array_Definition, Array_Loc);
           Restore_Scan_State (Scan_State); -- to first subtype mark
  
+          Is_Constrained_Array_Def := False;
+ 
+          --  Now parse a sequence of indexes where each is either of form:
+          --    <subtype_mark> range <>
+          --  or
+          --    <subtype_mark> range <expr> .. <>
+          --
+          --  The latter syntax indicates an index with a fixed lower bound,
+          --  and only applies when extensions are enabled (-gnatX).
+ 
           loop
!             Subtype_Mark_Node := P_Subtype_Mark_Resync;
! 
              T_Range;
! 
!             --  Normal "subtype_mark range <>" form, so simply append
!             --  the subtype reference.
! 
!             if Token = Tok_Box then
!                Append (Subtype_Mark_Node, Subs_List);
!                Scan;
! 
!             --  Fixed-lower-bound form ("subtype_mark range <expr> .. <>")
! 
!             else
!                P_Index_Subtype_Def_With_Fixed_Lower_Bound (Subtype_Mark_Node);
! 
!                Error_Msg_GNAT_Extension ("fixed-lower-bound array");
!             end if;
! 
              exit when Token = Tok_Right_Paren or else Token = Tok_Of;
              T_Comma;
           end loop;
  
           Set_Subtype_Marks (Def_Node, Subs_List);
  
!       --  If we don't have "range <>", then "range" will be followed by an
!       --  expression, for either a normal range or a fixed-lower-bound range
!       --  ("<exp> .. <>"), and we have to know which, in order to determine
!       --  whether to parse the indexes for an unconstrained or constrained
!       --  array definition. So we look ahead to see if "<>" follows the "..".
!       --  If not, then this must be a discrete_subtype_indication for a
!       --  constrained_array_definition, which will be processed further below.
! 
!       elsif Prev_Token = Tok_Range
!         and then Token /= Tok_Right_Paren and then Token /= Tok_Comma
!       then
!          --  If we have an expression followed by "..", then scan farther
!          --  and check for "<>" to see if we have a fixed-lower-bound range.
! 
!          if P_Expression_Or_Range_Attribute /= Error
!            and then Expr_Form /= EF_Range_Attr
!            and then Token = Tok_Dot_Dot
!          then
!             Scan;
! 
!             --  If there's a "<>", then we know we have a fixed-lower-bound
!             --  index, so we can proceed with parsing an unconstrained array
!             --  definition.
! 
!             if Token = Tok_Box then
!                Is_Constrained_Array_Def := False;
! 
!                Def_Node :=
!                  New_Node (N_Unconstrained_Array_Definition, Array_Loc);
! 
!                Restore_Scan_State (Scan_State); -- to first subtype mark
! 
!                --  Now parse a sequence of indexes where each is either of
!                --  form:
!                --     <subtype_mark> range <>
!                --  or
!                --     <subtype_mark> range <expr> .. <>
!                --
!                --  The latter indicates an index with a fixed lower bound,
!                --  and only applies when extensions are enabled (-gnatX).
! 
!                loop
!                   Subtype_Mark_Node := P_Subtype_Mark_Resync;
! 
!                   T_Range;
! 
!                   --  Normal "subtype_mark range <>" form, so simply append
!                   --  the subtype reference.
! 
!                   if Token = Tok_Box then
!                      Append (Subtype_Mark_Node, Subs_List);
!                      Scan;
! 
!                   --  This must be an index of form:
!                   --    <subtype_mark> range <expr> .. <>"
! 
!                   else
!                      P_Index_Subtype_Def_With_Fixed_Lower_Bound
!                        (Subtype_Mark_Node);
! 
!                      Error_Msg_GNAT_Extension ("fixed-lower-bound array");
!                   end if;
! 
!                   exit when Token = Tok_Right_Paren or else Token = Tok_Of;
!                   T_Comma;
!                end loop;
! 
!                Set_Subtype_Marks (Def_Node, Subs_List);
!             end if;
!          end if;
!       end if;
! 
!       if Is_Constrained_Array_Def then
           Def_Node := New_Node (N_Constrained_Array_Definition, Array_Loc);
           Restore_Scan_State (Scan_State); -- to first discrete range
  
*************** package body Ch3 is
*** 3217,3224 ****
              Constr_Node := New_Node (N_Range, Token_Ptr);
              Set_Low_Bound (Constr_Node, Expr_Node);
              Scan; -- past ..
!             Expr_Node := P_Expression;
!             Check_Simple_Expression (Expr_Node);
              Set_High_Bound (Constr_Node, Expr_Node);
              Append (Constr_Node, Constr_List);
              goto Loop_Continue;
--- 3352,3376 ----
              Constr_Node := New_Node (N_Range, Token_Ptr);
              Set_Low_Bound (Constr_Node, Expr_Node);
              Scan; -- past ..
! 
!             --  If the upper bound is given by "<>", this is an index for
!             --  a fixed-lower-bound subtype, so set the expression to Empty
!             --  for now (it will be set to the ranges maximum upper bound
!             --  later during analysis), and scan to the next token.
! 
!             if Token = Tok_Box then
!                Error_Msg_GNAT_Extension ("fixed-lower-bound array");
! 
!                Expr_Node := Empty;
!                Scan;
! 
!             --  Otherwise parse the range's upper bound expression
! 
!             else
!                Expr_Node := P_Expression;
!                Check_Simple_Expression (Expr_Node);
!             end if;
! 
              Set_High_Bound (Constr_Node, Expr_Node);
              Append (Constr_Node, Constr_List);
              goto Loop_Continue;
*************** package body Ch3 is
*** 4004,4017 ****
     function P_Access_Type_Definition
       (Header_Already_Parsed : Boolean := False) return Node_Id
     is
-       Access_Loc       : constant Source_Ptr := Token_Ptr;
-       Prot_Flag        : Boolean;
-       Not_Null_Present : Boolean := False;
-       Not_Null_Subtype : Boolean := False;
-       Type_Def_Node    : Node_Id;
-       Result_Not_Null  : Boolean;
-       Result_Node      : Node_Id;
- 
        procedure Check_Junk_Subprogram_Name;
        --  Used in access to subprogram definition cases to check for an
        --  identifier or operator symbol that does not belong.
--- 4156,4161 ----
*************** package body Ch3 is
*** 4038,4059 ****
           end if;
        end Check_Junk_Subprogram_Name;
  
     --  Start of processing for P_Access_Type_Definition
  
     begin
        if not Header_Already_Parsed then
  
!          --  NOT NULL ACCESS .. is a common form of access definition.
!          --  ACCESS NOT NULL ..  is certainly rare, but syntactically legal.
!          --  NOT NULL ACCESS NOT NULL .. is rarer yet, and also legal.
!          --  The last two cases are only meaningful if the following subtype
!          --  indication denotes an access type (semantic check). The flag
!          --  Not_Null_Subtype indicates that this second null exclusion is
!          --  present in the access type definition.
! 
!          Not_Null_Present := P_Null_Exclusion;     --  Ada 2005 (AI-231)
           Scan; -- past ACCESS
!          Not_Null_Subtype := P_Null_Exclusion;     --  Might also appear
        end if;
  
        if Token_Name = Name_Protected then
--- 4182,4213 ----
           end if;
        end Check_Junk_Subprogram_Name;
  
+       Access_Loc           : constant Source_Ptr := Token_Ptr;
+       Prot_Flag            : Boolean;
+       Not_Null_Present     : Boolean := False;
+       Not_Null_Subtype     : Boolean := False;
+       Not_Null_Subtype_Loc : Source_Ptr; -- loc of second "not null"
+       Type_Def_Node        : Node_Id;
+       Result_Not_Null      : Boolean;
+       Result_Node          : Node_Id;
+ 
     --  Start of processing for P_Access_Type_Definition
  
     begin
        if not Header_Already_Parsed then
+          --  NOT NULL ACCESS... is a common form of access definition. ACCESS
+          --  NOT NULL... is certainly rare, but syntactically legal. NOT NULL
+          --  ACCESS NOT NULL... is rarer yet, and also legal. The last two
+          --  cases are only meaningful if the following subtype indication
+          --  denotes an access type. We check below for "not null procedure"
+          --  and "not null function"; in the access-to-object case it is a
+          --  semantic check. The flag Not_Null_Subtype indicates that this
+          --  second null exclusion is present in the access type definition.
  
!          Not_Null_Present := P_Null_Exclusion; --  Ada 2005 (AI-231)
           Scan; -- past ACCESS
!          Not_Null_Subtype_Loc := Token_Ptr;
!          Not_Null_Subtype := P_Null_Exclusion; --  Might also appear
        end if;
  
        if Token_Name = Name_Protected then
*************** package body Ch3 is
*** 4072,4077 ****
--- 4226,4245 ----
           end if;
        end if;
  
+       --  Access-to-subprogram case
+ 
+       if Token in Tok_Procedure | Tok_Function then
+ 
+          --  Check for "not null [protected] procedure" and "not null
+          --  [protected] function".
+ 
+          if Not_Null_Subtype then
+             Error_Msg
+               ("null exclusion must apply to access type",
+                Not_Null_Subtype_Loc);
+          end if;
+       end if;
+ 
        if Token = Tok_Procedure then
           if Ada_Version = Ada_83 then
              Error_Msg_SC ("(Ada 83) access to procedure not allowed!");
*************** package body Ch3 is
*** 4120,4128 ****
  
           Set_Result_Definition (Type_Def_Node, Result_Node);
  
        else
!          Type_Def_Node :=
!            New_Node (N_Access_To_Object_Definition, Access_Loc);
           Set_Null_Exclusion_Present (Type_Def_Node, Not_Null_Present);
           Set_Null_Excluding_Subtype (Type_Def_Node, Not_Null_Subtype);
  
--- 4288,4297 ----
  
           Set_Result_Definition (Type_Def_Node, Result_Node);
  
+       --  Access-to-object case
+ 
        else
!          Type_Def_Node := New_Node (N_Access_To_Object_Definition, Access_Loc);
           Set_Null_Exclusion_Present (Type_Def_Node, Not_Null_Present);
           Set_Null_Excluding_Subtype (Type_Def_Node, Not_Null_Subtype);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/par-ch4.adb gcc-12.1.0/gcc/ada/par-ch4.adb
*** gcc-11.3.0/gcc/ada/par-ch4.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-ch4.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ch4 is
*** 1194,1200 ****
       (Prefix_Node : Node_Id)
        return        Node_Id
     is
!       Attr_Node  : Node_Id;
  
     begin
        Attr_Node := New_Node (N_Attribute_Reference, Token_Ptr);
--- 1194,1200 ----
       (Prefix_Node : Node_Id)
        return        Node_Id
     is
!       Attr_Node : Node_Id;
  
     begin
        Attr_Node := New_Node (N_Attribute_Reference, Token_Ptr);
*************** package body Ch4 is
*** 1280,1286 ****
        if Nkind (Aggr_Node) /= N_Aggregate
             and then
           Nkind (Aggr_Node) /= N_Extension_Aggregate
!          and then Ada_Version < Ada_2020
        then
           Error_Msg
             ("aggregate may not have single positional component", Aggr_Sloc);
--- 1280,1286 ----
        if Nkind (Aggr_Node) /= N_Aggregate
             and then
           Nkind (Aggr_Node) /= N_Extension_Aggregate
!          and then Ada_Version < Ada_2022
        then
           Error_Msg
             ("aggregate may not have single positional component", Aggr_Sloc);
*************** package body Ch4 is
*** 1399,1405 ****
        if Token = Tok_Left_Bracket then
           Scan;
  
!          --  Special case for null aggregate in Ada 2020
  
           if Token = Tok_Right_Bracket then
              Scan;   --  past ]
--- 1399,1405 ----
        if Token = Tok_Left_Bracket then
           Scan;
  
!          --  Special case for null aggregate in Ada 2022
  
           if Token = Tok_Right_Bracket then
              Scan;   --  past ]
*************** package body Ch4 is
*** 1601,1607 ****
           --  identifier or OTHERS follows (the latter cases are missing
           --  comma cases). Also assume positional if a semicolon follows,
           --  which can happen if there are missing parens.
!          --  In Ada_2012 and Ada_2020 an iterated association can appear.
  
           elsif Nkind (Expr_Node) in
             N_Iterated_Component_Association | N_Iterated_Element_Association
--- 1601,1607 ----
           --  identifier or OTHERS follows (the latter cases are missing
           --  comma cases). Also assume positional if a semicolon follows,
           --  which can happen if there are missing parens.
!          --  In Ada 2012 and 2022 an iterated association can appear.
  
           elsif Nkind (Expr_Node) in
             N_Iterated_Component_Association | N_Iterated_Element_Association
*************** package body Ch4 is
*** 1694,1699 ****
--- 1694,1703 ----
                 end if;
              end if;
           when Tok_Left_Paren =>
+             if Nkind (Aggregate_Node) = N_Aggregate then
+                Set_Is_Parenthesis_Aggregate (Aggregate_Node);
+             end if;
+ 
              T_Right_Paren;
           when others => raise Program_Error;
        end case;
*************** package body Ch4 is
*** 1734,1741 ****
     --        aggregates (AI-287)
  
     function P_Record_Or_Array_Component_Association return Node_Id is
!       Assoc_Node : Node_Id;
! 
     begin
        --  A loop indicates an iterated_component_association
  
--- 1738,1746 ----
     --        aggregates (AI-287)
  
     function P_Record_Or_Array_Component_Association return Node_Id is
!       Assoc_Node                  : Node_Id;
!       Box_Present                 : Boolean := False;
!       Box_With_Identifier_Present : Boolean := False;
     begin
        --  A loop indicates an iterated_component_association
  
*************** package body Ch4 is
*** 1744,1749 ****
--- 1749,1756 ----
        end if;
  
        Assoc_Node := New_Node (N_Component_Association, Token_Ptr);
+       Set_Binding_Chars (Assoc_Node, No_Name);
+ 
        Set_Choices (Assoc_Node, P_Discrete_Choice_List);
        Set_Sloc (Assoc_Node, Token_Ptr);
        TF_Arrow;
*************** package body Ch4 is
*** 1755,1766 ****
  
           Error_Msg_Ada_2005_Extension ("component association with '<'>");
  
           Set_Box_Present (Assoc_Node);
!          Scan; -- Past box
!       else
           Set_Expression (Assoc_Node, P_Expression);
        end if;
  
        return Assoc_Node;
     end P_Record_Or_Array_Component_Association;
  
--- 1762,1839 ----
  
           Error_Msg_Ada_2005_Extension ("component association with '<'>");
  
+          Box_Present := True;
           Set_Box_Present (Assoc_Node);
!          Scan; -- past box
!       elsif Token = Tok_Less then
!          declare
!             Scan_State : Saved_Scan_State;
!             Id         : Node_Id;
!          begin
!             Save_Scan_State (Scan_State);
!             Scan; -- past "<"
!             if Token = Tok_Identifier then
!                Id := P_Defining_Identifier;
!                if Token = Tok_Greater then
!                   if Extensions_Allowed then
!                      Set_Box_Present (Assoc_Node);
!                      Set_Binding_Chars (Assoc_Node, Chars (Id));
!                      Box_Present := True;
!                      Box_With_Identifier_Present := True;
!                      Scan; -- past ">"
!                   else
!                      Error_Msg
!                        ("Identifier within box only supported under -gnatX",
!                         Token_Ptr);
!                      Box_Present := True;
!                      --  Avoid cascading errors by ignoring the identifier
!                   end if;
!                end if;
!             end if;
!             if not Box_Present then
!                --  it wasn't an "is <identifier>", so restore.
!                Restore_Scan_State (Scan_State);
!             end if;
!          end;
!       end if;
! 
!       if not Box_Present then
           Set_Expression (Assoc_Node, P_Expression);
        end if;
  
+       --  Check for "is <identifier>" for aggregate that is part of
+       --  a pattern for a general case statement.
+ 
+       if Token = Tok_Is then
+          declare
+             Scan_State : Saved_Scan_State;
+             Id         : Node_Id;
+          begin
+             Save_Scan_State (Scan_State);
+             Scan; -- past "is"
+             if Token = Tok_Identifier then
+                Id := P_Defining_Identifier;
+ 
+                if not Extensions_Allowed then
+                   Error_Msg
+                     ("IS following component association"
+                        & " only supported under -gnatX",
+                      Token_Ptr);
+                elsif Box_With_Identifier_Present then
+                   Error_Msg
+                     ("Both identifier-in-box and trailing identifier"
+                        & " specified for one component association",
+                      Token_Ptr);
+                else
+                   Set_Binding_Chars (Assoc_Node, Chars (Id));
+                end if;
+             else
+                --  It wasn't an "is <identifier>", so restore.
+                Restore_Scan_State (Scan_State);
+             end if;
+          end;
+       end if;
+ 
        return Assoc_Node;
     end P_Record_Or_Array_Component_Association;
  
*************** package body Ch4 is
*** 2398,2406 ****
                and then Num_Concats >= Num_Concats_Threshold
              then
                 declare
-                   Empty_String_Val : String_Id;
-                   --  String_Id for ""
- 
                    Strlit_Concat_Val : String_Id;
                    --  Contains the folded value (which will be correct if the
                    --  "&" operators are the predefined ones).
--- 2471,2476 ----
*************** package body Ch4 is
*** 2436,2446 ****
                    --  Create new folded node, and rewrite result with a concat-
                    --  enation of an empty string literal and the folded node.
  
-                   Start_String;
-                   Empty_String_Val := End_String;
                    New_Node :=
                      Make_Op_Concat (Loc,
!                       Make_String_Literal (Loc, Empty_String_Val),
                        Make_String_Literal (Loc, Strlit_Concat_Val,
                          Is_Folded_In_Parser => True));
                    Rewrite (Node1, New_Node);
--- 2506,2514 ----
                    --  Create new folded node, and rewrite result with a concat-
                    --  enation of an empty string literal and the folded node.
  
                    New_Node :=
                      Make_Op_Concat (Loc,
!                       Make_String_Literal (Loc, Null_String_Id),
                        Make_String_Literal (Loc, Strlit_Concat_Val,
                          Is_Folded_In_Parser => True));
                    Rewrite (Node1, New_Node);
*************** package body Ch4 is
*** 2823,2830 ****
                 if Token_Is_At_Start_Of_Line
                   and then not
                     (Ada_Version >= Ada_2012
!                      and then Style_Check_Indentation /= 0
!                      and then Start_Column rem Style_Check_Indentation /= 0)
                 then
                    Error_Msg_AP ("missing operand");
                    return Error;
--- 2891,2900 ----
                 if Token_Is_At_Start_Of_Line
                   and then not
                     (Ada_Version >= Ada_2012
!                       and then
!                         (Style_Check_Indentation = 0
!                            or else
!                              Start_Column rem Style_Check_Indentation /= 0))
                 then
                    Error_Msg_AP ("missing operand");
                    return Error;
*************** package body Ch4 is
*** 2898,2904 ****
                    Save_Scan_State (Scan_State);
                    Scan;   --  past FOR
  
!                   if Token = Tok_All or else Token = Tok_Some  then
                       Restore_Scan_State (Scan_State);  -- To FOR
                       Node1 := P_Quantified_Expression;
  
--- 2968,2974 ----
                    Save_Scan_State (Scan_State);
                    Scan;   --  past FOR
  
!                   if Token = Tok_All or else Token = Tok_Some then
                       Restore_Scan_State (Scan_State);  -- To FOR
                       Node1 := P_Quantified_Expression;
  
*************** package body Ch4 is
*** 2928,2934 ****
                 Scan; -- past minus
  
              when Tok_At_Sign =>  --  AI12-0125 : target_name
!                Error_Msg_Ada_2020_Feature ("target name", Token_Ptr);
  
                 Node1 := P_Name;
                 return Node1;
--- 2998,3004 ----
                 Scan; -- past minus
  
              when Tok_At_Sign =>  --  AI12-0125 : target_name
!                Error_Msg_Ada_2022_Feature ("target name", Token_Ptr);
  
                 Node1 := P_Name;
                 return Node1;
*************** package body Ch4 is
*** 3396,3402 ****
  
        procedure Build_Iterated_Element_Association;
        --  If the iterator includes a key expression or a filter, it is
!       --  an Ada_2020 Iterator_Element_Association within a container
        --  aggregate.
  
        ----------------------------------------
--- 3466,3472 ----
  
        procedure Build_Iterated_Element_Association;
        --  If the iterator includes a key expression or a filter, it is
!       --  an Ada 2022 Iterator_Element_Association within a container
        --  aggregate.
  
        ----------------------------------------
*************** package body Ch4 is
*** 3411,3417 ****
             New_Node (N_Loop_Parameter_Specification, Prev_Token_Ptr);
           Set_Defining_Identifier (Loop_Spec, Id);
  
!          Choice :=  First (Discrete_Choices (Assoc_Node));
           Assoc_Node :=
             New_Node (N_Iterated_Element_Association, Prev_Token_Ptr);
           Set_Loop_Parameter_Specification (Assoc_Node, Loop_Spec);
--- 3481,3487 ----
             New_Node (N_Loop_Parameter_Specification, Prev_Token_Ptr);
           Set_Defining_Identifier (Loop_Spec, Id);
  
!          Choice := First (Discrete_Choices (Assoc_Node));
           Assoc_Node :=
             New_Node (N_Iterated_Element_Association, Prev_Token_Ptr);
           Set_Loop_Parameter_Specification (Assoc_Node, Loop_Spec);
*************** package body Ch4 is
*** 3432,3438 ****
        Save_Scan_State (State);
  
        --  A lookahead is necessary to differentiate between the
!       --  Ada 2012 form with a choice list, and the Ada 202x element
        --  iterator form, recognized by the presence of "OF". Other
        --  disambiguation requires context and is done during semantic
        --  analysis. Note that "for X in E" is syntactically ambiguous:
--- 3502,3508 ----
        Save_Scan_State (State);
  
        --  A lookahead is necessary to differentiate between the
!       --  Ada 2012 form with a choice list, and the Ada 2022 element
        --  iterator form, recognized by the presence of "OF". Other
        --  disambiguation requires context and is done during semantic
        --  analysis. Note that "for X in E" is syntactically ambiguous:
*************** package body Ch4 is
*** 3449,3510 ****
        Assoc_Node :=
          New_Node (N_Iterated_Component_Association, Prev_Token_Ptr);
  
!       if Token = Tok_In then
!          Set_Defining_Identifier (Assoc_Node, Id);
!          T_In;
!          Set_Discrete_Choices (Assoc_Node, P_Discrete_Choice_List);
  
!          --  The iterator may include a filter
  
!          if Token = Tok_When then
!             Scan;    -- past WHEN
!             Filter := P_Condition;
!          end if;
  
!          if Token = Tok_Use then
  
!             --  Ada_2020 Key-expression is present, rewrite node as an
!             --  Iterated_Element_Association.
  
!             Scan;  --  past USE
!             Build_Iterated_Element_Association;
!             Set_Key_Expression (Assoc_Node, P_Expression);
  
!          elsif Present (Filter) then
!             --  A loop_parameter_specification also indicates an Ada_2020
!             --  construct, in contrast with a subtype indication used in
!             --  array aggregates.
  
!             Build_Iterated_Element_Association;
!          end if;
  
!          TF_Arrow;
!          Set_Expression (Assoc_Node, P_Expression);
  
!       elsif Ada_Version >= Ada_2020
!         and then Token = Tok_Of
!       then
!          Restore_Scan_State (State);
!          Scan;  -- past OF
!          Set_Defining_Identifier (Assoc_Node, Id);
!          Iter_Spec := P_Iterator_Specification (Id);
!          Set_Iterator_Specification (Assoc_Node, Iter_Spec);
  
!          if Token = Tok_Use then
!             Scan;  -- past USE
!             --  This is an iterated_element_association
  
!             Assoc_Node :=
!               New_Node (N_Iterated_Element_Association, Prev_Token_Ptr);
!             Set_Iterator_Specification (Assoc_Node, Iter_Spec);
!             Set_Key_Expression (Assoc_Node, P_Expression);
!          end if;
  
!          TF_Arrow;
!          Set_Expression (Assoc_Node, P_Expression);
!       end if;
  
!       Error_Msg_Ada_2020_Feature ("iterated component", Token_Ptr);
  
        return Assoc_Node;
     end P_Iterated_Component_Association;
--- 3519,3580 ----
        Assoc_Node :=
          New_Node (N_Iterated_Component_Association, Prev_Token_Ptr);
  
!       case Token is
!          when Tok_In =>
!             Set_Defining_Identifier (Assoc_Node, Id);
!             T_In;
!             Set_Discrete_Choices (Assoc_Node, P_Discrete_Choice_List);
  
!             --  The iterator may include a filter
  
!             if Token = Tok_When then
!                Scan;    -- past WHEN
!                Filter := P_Condition;
!             end if;
  
!             if Token = Tok_Use then
  
!                --  Ada 2022 Key-expression is present, rewrite node as an
!                --  Iterated_Element_Association.
  
!                Scan;  --  past USE
!                Build_Iterated_Element_Association;
!                Set_Key_Expression (Assoc_Node, P_Expression);
  
!             elsif Present (Filter) then
!                --  A loop_parameter_specification also indicates an Ada 2022
!                --  construct, in contrast with a subtype indication used in
!                --  array aggregates.
  
!                Build_Iterated_Element_Association;
!             end if;
  
!             TF_Arrow;
!             Set_Expression (Assoc_Node, P_Expression);
  
!          when Tok_Of =>
!             Restore_Scan_State (State);
!             Scan;  -- past OF
!             Set_Defining_Identifier (Assoc_Node, Id);
!             Iter_Spec := P_Iterator_Specification (Id);
!             Set_Iterator_Specification (Assoc_Node, Iter_Spec);
  
!             if Token = Tok_Use then
!                Scan;  -- past USE
!                --  This is an iterated_element_association
  
!                Assoc_Node :=
!                  New_Node (N_Iterated_Element_Association, Prev_Token_Ptr);
!                Set_Iterator_Specification (Assoc_Node, Iter_Spec);
!                Set_Key_Expression (Assoc_Node, P_Expression);
!             end if;
  
!             TF_Arrow;
!             Set_Expression (Assoc_Node, P_Expression);
  
!          when others =>
!             Error_Msg_AP ("missing IN or OF");
!       end case;
  
        return Assoc_Node;
     end P_Iterated_Component_Association;
*************** package body Ch4 is
*** 3689,3695 ****
              Result : constant Node_Id :=
                Make_Expression_With_Actions (Loc, Actions, Expression);
           begin
!             Error_Msg_Ada_2020_Feature ("declare expression", Loc);
  
              return Result;
           end;
--- 3759,3765 ----
              Result : constant Node_Id :=
                Make_Expression_With_Actions (Loc, Actions, Expression);
           begin
!             Error_Msg_Ada_2022_Feature ("declare expression", Loc);
  
              return Result;
           end;
diff -Nrcpad gcc-11.3.0/gcc/ada/par-ch5.adb gcc-12.1.0/gcc/ada/par-ch5.adb
*** gcc-11.3.0/gcc/ada/par-ch5.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-ch5.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** pragma Style_Checks (All_Checks);
*** 27,33 ****
  --  Turn off subprogram body ordering check. Subprograms are in order by RM
  --  section rather than alphabetical.
  
! with Sinfo.CN; use Sinfo.CN;
  
  separate (Par)
  package body Ch5 is
--- 27,33 ----
  --  Turn off subprogram body ordering check. Subprograms are in order by RM
  --  section rather than alphabetical.
  
! with Sinfo.CN;       use Sinfo.CN;
  
  separate (Par)
  package body Ch5 is
*************** package body Ch5 is
*** 235,244 ****
                     and then Statement_Seen)
                  or else All_Pragmas)
              then
-                --  This Ada 2012 construct not allowed in a compiler unit
- 
-                Check_Compiler_Unit ("null statement list", Token_Ptr);
- 
                 declare
                    Null_Stm : constant Node_Id :=
                                 Make_Null_Statement (Token_Ptr);
--- 235,240 ----
*************** package body Ch5 is
*** 1299,1315 ****
  
           return Cond;
  
!       --  Otherwise check for redundant parentheses
! 
!       --  If the condition is a conditional or a quantified expression, it is
!       --  parenthesized in the context of a condition, because of a separate
!       --  syntax rule.
  
        else
           if Style_Check
             and then
               Paren_Count (Cond) >
                 (if Nkind (Cond) in N_Case_Expression
                                   | N_If_Expression
                                   | N_Quantified_Expression
                  then 1
--- 1295,1310 ----
  
           return Cond;
  
!       --  Otherwise check for redundant parentheses but do not emit messages
!       --  about expressions that require parentheses (e.g. conditional,
!       --  quantified or declaration expressions).
  
        else
           if Style_Check
             and then
               Paren_Count (Cond) >
                 (if Nkind (Cond) in N_Case_Expression
+                                  | N_Expression_With_Actions
                                   | N_If_Expression
                                   | N_Quantified_Expression
                  then 1
*************** package body Ch5 is
*** 1715,1721 ****
          (Loop_Param_Specification_Node, P_Discrete_Subtype_Definition);
  
        if Token = Tok_When then
!          Error_Msg_Ada_2020_Feature ("iterator filter", Token_Ptr);
  
           Scan; -- past WHEN
           Set_Iterator_Filter
--- 1710,1716 ----
          (Loop_Param_Specification_Node, P_Discrete_Subtype_Definition);
  
        if Token = Tok_When then
!          Error_Msg_Ada_2022_Feature ("iterator filter", Token_Ptr);
  
           Scan; -- past WHEN
           Set_Iterator_Filter
*************** package body Ch5 is
*** 1742,1748 ****
  
        if Token = Tok_Colon then
           Scan;  --  past :
!          Set_Subtype_Indication (Node1, P_Subtype_Indication);
        end if;
  
        if Token = Tok_Of then
--- 1737,1751 ----
  
        if Token = Tok_Colon then
           Scan;  --  past :
! 
!          if Token = Tok_Access then
!             Error_Msg_Ada_2022_Feature
!               ("access definition in loop parameter", Token_Ptr);
!             Set_Subtype_Indication (Node1, P_Access_Definition (False));
! 
!          else
!             Set_Subtype_Indication (Node1, P_Subtype_Indication);
!          end if;
        end if;
  
        if Token = Tok_Of then
*************** package body Ch5 is
*** 1762,1768 ****
           Set_Of_Present (Node1);
           Error_Msg_N
             ("subtype indication is only legal on an element iterator",
!               Subtype_Indication (Node1));
  
        else
           return Error;
--- 1765,1771 ----
           Set_Of_Present (Node1);
           Error_Msg_N
             ("subtype indication is only legal on an element iterator",
!             Subtype_Indication (Node1));
  
        else
           return Error;
*************** package body Ch5 is
*** 1776,1782 ****
        Set_Name (Node1, P_Name);
  
        if Token = Tok_When then
!          Error_Msg_Ada_2020_Feature ("iterator filter", Token_Ptr);
  
           Scan; -- past WHEN
           Set_Iterator_Filter
--- 1779,1785 ----
        Set_Name (Node1, P_Name);
  
        if Token = Tok_When then
!          Error_Msg_Ada_2022_Feature ("iterator filter", Token_Ptr);
  
           Scan; -- past WHEN
           Set_Iterator_Filter
*************** package body Ch5 is
*** 1906,1952 ****
     function P_Exit_Statement return Node_Id is
        Exit_Node : Node_Id;
  
-       function Missing_Semicolon_On_Exit return Boolean;
-       --  This function deals with the following specialized situation
-       --
-       --    when 'x' =>
-       --       exit [identifier]
-       --    when 'y' =>
-       --
-       --  This looks like a messed up EXIT WHEN, when in fact the problem
-       --  is a missing semicolon. It is called with Token pointing to the
-       --  WHEN token, and returns True if a semicolon is missing before
-       --  the WHEN as in the above example.
- 
-       -------------------------------
-       -- Missing_Semicolon_On_Exit --
-       -------------------------------
- 
-       function Missing_Semicolon_On_Exit return Boolean is
-          State : Saved_Scan_State;
- 
-       begin
-          if not Token_Is_At_Start_Of_Line then
-             return False;
- 
-          elsif Scopes (Scope.Last).Etyp /= E_Case then
-             return False;
- 
-          else
-             Save_Scan_State (State);
-             Scan; -- past WHEN
-             Scan; -- past token after WHEN
- 
-             if Token = Tok_Arrow then
-                Restore_Scan_State (State);
-                return True;
-             else
-                Restore_Scan_State (State);
-                return False;
-             end if;
-          end if;
-       end Missing_Semicolon_On_Exit;
- 
     --  Start of processing for P_Exit_Statement
  
     begin
--- 1909,1914 ----
*************** package body Ch5 is
*** 1976,1982 ****
           end loop Check_No_Exit_Name;
        end if;
  
!       if Token = Tok_When and then not Missing_Semicolon_On_Exit then
           Scan; -- past WHEN
           Set_Condition (Exit_Node, P_Condition);
  
--- 1938,1944 ----
           end loop Check_No_Exit_Name;
        end if;
  
!       if Token = Tok_When and then not Missing_Semicolon_On_When then
           Scan; -- past WHEN
           Set_Condition (Exit_Node, P_Condition);
  
*************** package body Ch5 is
*** 2011,2017 ****
        Scan; -- past GOTO (or TO)
        Set_Name (Goto_Node, P_Qualified_Simple_Name_Resync);
        Append_Elmt (Goto_Node, Goto_List);
!       No_Constraint;
        TF_Semicolon;
        return Goto_Node;
     end P_Goto_Statement;
--- 1973,1987 ----
        Scan; -- past GOTO (or TO)
        Set_Name (Goto_Node, P_Qualified_Simple_Name_Resync);
        Append_Elmt (Goto_Node, Goto_List);
! 
!       if Token = Tok_When then
!          Error_Msg_GNAT_Extension ("goto when statement");
! 
!          Scan; -- past WHEN
!          Mutate_Nkind (Goto_Node, N_Goto_When_Statement);
!          Set_Condition (Goto_Node, P_Expression_No_Right_Paren);
!       end if;
! 
        TF_Semicolon;
        return Goto_Node;
     end P_Goto_Statement;
diff -Nrcpad gcc-11.3.0/gcc/ada/par-ch6.adb gcc-12.1.0/gcc/ada/par-ch6.adb
*** gcc-11.3.0/gcc/ada/par-ch6.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-ch6.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** pragma Style_Checks (All_Checks);
*** 27,33 ****
  --  Turn off subprogram body ordering check. Subprograms are in order
  --  by RM section rather than alphabetical
  
! with Sinfo.CN; use Sinfo.CN;
  
  separate (Par)
  package body Ch6 is
--- 27,33 ----
  --  Turn off subprogram body ordering check. Subprograms are in order
  --  by RM section rather than alphabetical
  
! with Sinfo.CN;       use Sinfo.CN;
  
  separate (Par)
  package body Ch6 is
*************** package body Ch6 is
*** 201,206 ****
--- 201,228 ----
     --  Error recovery: cannot raise Error_Resync
  
     function P_Subprogram (Pf_Flags : Pf_Rec) return Node_Id is
+ 
+       function Contains_Import_Aspect (Aspects : List_Id) return Boolean;
+       --  Return True if Aspects contains an Import aspect.
+ 
+       ----------------------------
+       -- Contains_Import_Aspect --
+       ----------------------------
+ 
+       function Contains_Import_Aspect (Aspects : List_Id) return Boolean is
+          Aspect : Node_Id := First (Aspects);
+       begin
+          while Present (Aspect) loop
+             if Chars (Identifier (Aspect)) = Name_Import then
+                return True;
+             end if;
+ 
+             Next (Aspect);
+          end loop;
+ 
+          return False;
+       end Contains_Import_Aspect;
+ 
        Specification_Node : Node_Id;
        Name_Node          : Node_Id;
        Aspects            : List_Id;
*************** package body Ch6 is
*** 819,825 ****
              begin
                 --  Expression_Function case
  
!                if Token = Tok_Left_Paren
                   or else Likely_Expression_Function
                 then
                    --  Check expression function allowed here
--- 841,854 ----
              begin
                 --  Expression_Function case
  
!                --  If likely an aggregate, check we are in Ada 2022 mode
! 
!                if Token = Tok_Left_Bracket then
!                   Error_Msg_Ada_2022_Feature
!                     ("!aggregates as expression function", Token_Ptr);
!                end if;
! 
!                if Token in Tok_Left_Paren | Tok_Left_Bracket
                   or else Likely_Expression_Function
                 then
                    --  Check expression function allowed here
*************** package body Ch6 is
*** 982,991 ****
           if Pf_Flags.Pbod
  
             --  Disconnect this processing if we have scanned a null procedure
!            --  because in this case the spec is complete anyway with no body.
  
             and then (Nkind (Specification_Node) /= N_Procedure_Specification
                        or else not Null_Present (Specification_Node))
           then
              SIS_Labl := Scopes (Scope.Last).Labl;
              SIS_Sloc := Scopes (Scope.Last).Sloc;
--- 1011,1022 ----
           if Pf_Flags.Pbod
  
             --  Disconnect this processing if we have scanned a null procedure
!            --  or an Import aspect because in this case the spec is complete
!            --  anyway with no body.
  
             and then (Nkind (Specification_Node) /= N_Procedure_Specification
                        or else not Null_Present (Specification_Node))
+            and then not Contains_Import_Aspect (Aspects)
           then
              SIS_Labl := Scopes (Scope.Last).Labl;
              SIS_Sloc := Scopes (Scope.Last).Sloc;
*************** package body Ch6 is
*** 1120,1126 ****
        --------------
  
        function Real_Dot return Boolean is
!          Scan_State  : Saved_Scan_State;
  
        begin
           if Token /= Tok_Dot then
--- 1151,1157 ----
        --------------
  
        function Real_Dot return Boolean is
!          Scan_State : Saved_Scan_State;
  
        begin
           if Token /= Tok_Dot then
*************** package body Ch6 is
*** 1620,1626 ****
           --  the time being.
  
           elsif Token = Tok_With then
!             Error_Msg_Ada_2020_Feature
                ("aspect on formal parameter", Token_Ptr);
  
              P_Aspect_Specifications (Specification_Node, False);
--- 1651,1657 ----
           --  the time being.
  
           elsif Token = Tok_With then
!             Error_Msg_Ada_2022_Feature
                ("aspect on formal parameter", Token_Ptr);
  
              P_Aspect_Specifications (Specification_Node, False);
*************** package body Ch6 is
*** 1874,1906 ****
     function P_Return_Statement return Node_Id is
        --  The caller has checked that the initial token is RETURN
  
!       function Is_Simple return Boolean;
        --  Scan state is just after RETURN (and is left that way). Determine
        --  whether this is a simple or extended return statement by looking
        --  ahead for "identifier :", which implies extended.
  
!       ---------------
!       -- Is_Simple --
!       ---------------
  
!       function Is_Simple return Boolean is
!          Scan_State : Saved_Scan_State;
!          Result     : Boolean := True;
  
        begin
           if Token = Tok_Identifier then
              Save_Scan_State (Scan_State); -- at identifier
              Scan; -- past identifier
  
              if Token = Tok_Colon then
!                Result := False; -- It's an extended_return_statement.
              end if;
  
              Restore_Scan_State (Scan_State); -- to identifier
           end if;
  
!          return Result;
!       end Is_Simple;
  
        Ret_Sloc : constant Source_Ptr := Token_Ptr;
        Ret_Strt : constant Column_Number := Start_Column;
--- 1905,1938 ----
     function P_Return_Statement return Node_Id is
        --  The caller has checked that the initial token is RETURN
  
!       function Is_Extended return Boolean;
        --  Scan state is just after RETURN (and is left that way). Determine
        --  whether this is a simple or extended return statement by looking
        --  ahead for "identifier :", which implies extended.
  
!       -----------------
!       -- Is_Extended --
!       -----------------
  
!       function Is_Extended return Boolean is
!          Scan_State  : Saved_Scan_State;
!          Is_Extended : Boolean := False;
  
        begin
+ 
           if Token = Tok_Identifier then
              Save_Scan_State (Scan_State); -- at identifier
              Scan; -- past identifier
  
              if Token = Tok_Colon then
!                Is_Extended := True;
              end if;
  
              Restore_Scan_State (Scan_State); -- to identifier
           end if;
  
!          return Is_Extended;
!       end Is_Extended;
  
        Ret_Sloc : constant Source_Ptr := Token_Ptr;
        Ret_Strt : constant Column_Number := Start_Column;
*************** package body Ch6 is
*** 1922,1943 ****
        --  Nontrivial case
  
        else
-          --  Simple_return_statement with expression
- 
-          --  We avoid trying to scan an expression if we are at an
-          --  expression terminator since in that case the best error
-          --  message is probably that we have a missing semicolon.
- 
-          if Is_Simple then
-             Ret_Node := New_Node (N_Simple_Return_Statement, Ret_Sloc);
- 
-             if Token not in Token_Class_Eterm then
-                Set_Expression (Ret_Node, P_Expression_No_Right_Paren);
-             end if;
- 
           --  Extended_return_statement (Ada 2005 only -- AI-318):
  
!          else
              Error_Msg_Ada_2005_Extension ("extended return statement");
  
              Ret_Node := New_Node (N_Extended_Return_Statement, Ret_Sloc);
--- 1954,1962 ----
        --  Nontrivial case
  
        else
           --  Extended_return_statement (Ada 2005 only -- AI-318):
  
!          if Is_Extended then
              Error_Msg_Ada_2005_Extension ("extended return statement");
  
              Ret_Node := New_Node (N_Extended_Return_Statement, Ret_Sloc);
*************** package body Ch6 is
*** 1954,1960 ****
                 Scopes (Scope.Last).Etyp := E_Return;
                 Scopes (Scope.Last).Labl := Error;
                 Scopes (Scope.Last).Sloc := Ret_Sloc;
- 
                 Scan; -- past DO
                 Set_Handled_Statement_Sequence
                   (Ret_Node, P_Handled_Sequence_Of_Statements);
--- 1973,1978 ----
*************** package body Ch6 is
*** 1962,1967 ****
--- 1980,2020 ----
  
                 --  Do we need to handle Error_Resync here???
              end if;
+ 
+          --  Simple_return_statement or Return_when_Statement
+          --  with expression.
+ 
+          --  We avoid trying to scan an expression if we are at an
+          --  expression terminator since in that case the best error
+          --  message is probably that we have a missing semicolon.
+ 
+          else
+             Ret_Node := New_Node (N_Simple_Return_Statement, Ret_Sloc);
+ 
+             if Token not in Token_Class_Eterm then
+                Set_Expression (Ret_Node, P_Expression_No_Right_Paren);
+             end if;
+ 
+             --  When the next token is WHEN or IF we know that we are looking
+             --  at a Return_when_statement
+ 
+             if Token = Tok_When and then not Missing_Semicolon_On_When then
+                Error_Msg_GNAT_Extension ("return when statement");
+                Mutate_Nkind (Ret_Node, N_Return_When_Statement);
+ 
+                Scan; -- past WHEN
+                Set_Condition (Ret_Node, P_Condition);
+ 
+             --  Allow IF instead of WHEN, giving error message
+ 
+             elsif Token = Tok_If then
+                Error_Msg_GNAT_Extension ("return when statement");
+                Mutate_Nkind (Ret_Node, N_Return_When_Statement);
+ 
+                T_When;
+                Scan; -- past IF used in place of WHEN
+                Set_Condition (Ret_Node, P_Condition);
+             end if;
           end if;
  
           TF_Semicolon;
diff -Nrcpad gcc-11.3.0/gcc/ada/par-ch7.adb gcc-12.1.0/gcc/ada/par-ch7.adb
*** gcc-11.3.0/gcc/ada/par-ch7.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-ch7.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/par-ch8.adb gcc-12.1.0/gcc/ada/par-ch8.adb
*** gcc-11.3.0/gcc/ada/par-ch8.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-ch8.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/par-ch9.adb gcc-12.1.0/gcc/ada/par-ch9.adb
*** gcc-11.3.0/gcc/ada/par-ch9.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-ch9.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Ch9 is
*** 283,289 ****
     --  Error recovery:  cannot raise Error_Resync
  
     function P_Task_Definition return Node_Id is
!       Def_Node  : Node_Id;
  
     begin
        Def_Node := New_Node (N_Task_Definition, Token_Ptr);
--- 283,289 ----
     --  Error recovery:  cannot raise Error_Resync
  
     function P_Task_Definition return Node_Id is
!       Def_Node : Node_Id;
  
     begin
        Def_Node := New_Node (N_Task_Definition, Token_Ptr);
diff -Nrcpad gcc-11.3.0/gcc/ada/par-endh.adb gcc-12.1.0/gcc/ada/par-endh.adb
*** gcc-11.3.0/gcc/ada/par-endh.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-endh.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Endh is
*** 732,738 ****
        --       ...
        --    end My_Label;
  
!       --  This is the case where we want to use the entry in the suspicous
        --  label table to flag the semicolon saying it should be a colon.
  
        --  Label_OK will be false because the label does not match (we have
--- 732,738 ----
        --       ...
        --    end My_Label;
  
!       --  This is the case where we want to use the entry in the suspicious
        --  label table to flag the semicolon saying it should be a colon.
  
        --  Label_OK will be false because the label does not match (we have
diff -Nrcpad gcc-11.3.0/gcc/ada/par-labl.adb gcc-12.1.0/gcc/ada/par-labl.adb
*** gcc-11.3.0/gcc/ada/par-labl.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-labl.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/par-load.adb gcc-12.1.0/gcc/ada/par-load.adb
*** gcc-11.3.0/gcc/ada/par-load.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-load.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** begin
*** 129,136 ****
     Save_Style_Check_Options (Save_Style_Checks);
     Save_Style_Check := Opt.Style_Check;
  
!    --  If main unit, set Main_Unit_Entity (this will get overwritten if
!    --  the main unit has a separate spec, that happens later on in Load)
  
     if Cur_Unum = Main_Unit then
        Main_Unit_Entity := Cunit_Entity (Main_Unit);
--- 129,136 ----
     Save_Style_Check_Options (Save_Style_Checks);
     Save_Style_Check := Opt.Style_Check;
  
!    --  If main unit, set Main_Unit_Entity (this will get overwritten if the
!    --  main unit has a separate spec, that happens later on in Load).
  
     if Cur_Unum = Main_Unit then
        Main_Unit_Entity := Cunit_Entity (Main_Unit);
*************** begin
*** 182,195 ****
        --  Check for predefined file case
  
        if Name_Len > 1
          and then Name_Buffer (2) = '-'
-         and then (Name_Buffer (1) = 'a'
-                     or else
-                   Name_Buffer (1) = 's'
-                     or else
-                   Name_Buffer (1) = 'i'
-                     or else
-                   Name_Buffer (1) = 'g')
        then
           declare
              Expect_Name : constant Unit_Name_Type := Expected_Unit (Cur_Unum);
--- 182,189 ----
        --  Check for predefined file case
  
        if Name_Len > 1
+         and then Name_Buffer (1) in 'a' | 's' | 'i' | 'g'
          and then Name_Buffer (2) = '-'
        then
           declare
              Expect_Name : constant Unit_Name_Type := Expected_Unit (Cur_Unum);
*************** begin
*** 240,256 ****
           Error_Msg ("\\found unit $!", Loc);
        end if;
  
!       --  In both cases, remove the unit if it is the last unit (which it
!       --  normally (always?) will be) so that it is out of the way later.
  
!       Remove_Unit (Cur_Unum);
     end if;
  
     --  If current unit is a body, load its corresponding spec
  
!    if Nkind (Unit (Curunit)) = N_Package_Body
!      or else Nkind (Unit (Curunit)) = N_Subprogram_Body
!    then
        Spec_Name := Get_Spec_Name (Unit_Name (Cur_Unum));
        Unum :=
          Load_Unit
--- 234,248 ----
           Error_Msg ("\\found unit $!", Loc);
        end if;
  
!       --  In both cases, flag the fatal error and give up
  
!       Set_Fatal_Error (Cur_Unum, Error_Detected);
!       return;
     end if;
  
     --  If current unit is a body, load its corresponding spec
  
!    if Nkind (Unit (Curunit)) in N_Package_Body | N_Subprogram_Body then
        Spec_Name := Get_Spec_Name (Unit_Name (Cur_Unum));
        Unum :=
          Load_Unit
*************** begin
*** 274,279 ****
--- 266,277 ----
           --  and this is also where we generate the SCO's for this spec.
  
           if Cur_Unum = Main_Unit then
+ 
+             --  We generate code for the main unit body, so we need to generate
+             --  code for its spec too.
+ 
+             Set_Generate_Code (Unum, True);
+ 
              Main_Unit_Entity := Cunit_Entity (Unum);
  
              if Generate_SCO then
*************** begin
*** 304,314 ****
     --  If current unit is a child unit spec, load its parent. If the child unit
     --  is loaded through a limited with, the parent must be as well.
  
!    elsif     Nkind (Unit (Curunit)) =  N_Package_Declaration
!      or else Nkind (Unit (Curunit)) =  N_Subprogram_Declaration
!      or else Nkind (Unit (Curunit)) in N_Generic_Declaration
!      or else Nkind (Unit (Curunit)) in N_Generic_Instantiation
!      or else Nkind (Unit (Curunit)) in N_Renaming_Declaration
     then
        --  Turn style checks off for parent unit
  
--- 302,312 ----
     --  If current unit is a child unit spec, load its parent. If the child unit
     --  is loaded through a limited with, the parent must be as well.
  
!    elsif Nkind (Unit (Curunit)) in N_Package_Declaration
!                                  | N_Subprogram_Declaration
!                                  | N_Generic_Declaration
!                                  | N_Generic_Instantiation
!                                  | N_Renaming_Declaration
     then
        --  Turn style checks off for parent unit
  
diff -Nrcpad gcc-11.3.0/gcc/ada/par-prag.adb gcc-12.1.0/gcc/ada/par-prag.adb
*** gcc-11.3.0/gcc/ada/par-prag.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-prag.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** function Prag (Pragma_Node : Node_Id; Se
*** 158,164 ****
     procedure Check_Arg_Count (Required : Int) is
     begin
        if Arg_Count /= Required then
!          Error_Msg ("wrong number of arguments for pragma%", Pragma_Sloc);
           raise Error_Resync;
        end if;
     end Check_Arg_Count;
--- 158,164 ----
     procedure Check_Arg_Count (Required : Int) is
     begin
        if Arg_Count /= Required then
!          Error_Msg_N ("wrong number of arguments for pragma%", Pragma_Node);
           raise Error_Resync;
        end if;
     end Check_Arg_Count;
*************** function Prag (Pragma_Node : Node_Id; Se
*** 177,183 ****
           Error_Msg_Name_2 := Name_On;
           Error_Msg_Name_3 := Name_Off;
  
!          Error_Msg ("argument for pragma% must be% or%", Sloc (Argx));
           raise Error_Resync;
        end if;
     end Check_Arg_Is_On_Or_Off;
--- 177,183 ----
           Error_Msg_Name_2 := Name_On;
           Error_Msg_Name_3 := Name_Off;
  
!          Error_Msg_N ("argument for pragma% must be% or%", Argx);
           raise Error_Resync;
        end if;
     end Check_Arg_Is_On_Or_Off;
*************** function Prag (Pragma_Node : Node_Id; Se
*** 189,197 ****
     procedure Check_Arg_Is_String_Literal (Arg : Node_Id) is
     begin
        if Nkind (Expression (Arg)) /= N_String_Literal then
!          Error_Msg
             ("argument for pragma% must be string literal",
!              Sloc (Expression (Arg)));
           raise Error_Resync;
        end if;
     end Check_Arg_Is_String_Literal;
--- 189,197 ----
     procedure Check_Arg_Is_String_Literal (Arg : Node_Id) is
     begin
        if Nkind (Expression (Arg)) /= N_String_Literal then
!          Error_Msg_N
             ("argument for pragma% must be string literal",
!             Expression (Arg));
           raise Error_Resync;
        end if;
     end Check_Arg_Is_String_Literal;
*************** begin
*** 385,418 ****
           end if;
  
        --------------
!       -- Ada_2020 --
        --------------
  
!       when Pragma_Ada_2020 =>
           if Arg_Count = 0 then
!             Ada_Version := Ada_2020;
!             Ada_Version_Explicit := Ada_2020;
              Ada_Version_Pragma := Pragma_Node;
           end if;
  
-       ---------------------------
-       -- Compiler_Unit_Warning --
-       ---------------------------
- 
-       --  This pragma must be processed at parse time, since the resulting
-       --  status may be tested during the parsing of the program.
- 
-       when Pragma_Compiler_Unit
-          | Pragma_Compiler_Unit_Warning
-       =>
-          Check_Arg_Count (0);
- 
-          --  Only recognized in main unit
- 
-          if Current_Source_Unit = Main_Unit then
-             Compiler_Unit := True;
-          end if;
- 
        -----------
        -- Debug --
        -----------
--- 385,400 ----
           end if;
  
        --------------
!       -- Ada_2022 --
        --------------
  
!       when Pragma_Ada_2022 =>
           if Arg_Count = 0 then
!             Ada_Version := Ada_2022;
!             Ada_Version_Explicit := Ada_2022;
              Ada_Version_Pragma := Pragma_Node;
           end if;
  
        -----------
        -- Debug --
        -----------
*************** begin
*** 443,452 ****
           Check_Arg_Is_On_Or_Off (Arg1);
  
           if Chars (Expression (Arg1)) = Name_On then
!             Extensions_Allowed := True;
!             Ada_Version := Ada_Version_Type'Last;
           else
-             Extensions_Allowed := False;
              Ada_Version := Ada_Version_Explicit;
           end if;
  
--- 425,432 ----
           Check_Arg_Is_On_Or_Off (Arg1);
  
           if Chars (Expression (Arg1)) = Name_On then
!             Ada_Version := Ada_With_Extensions;
           else
              Ada_Version := Ada_Version_Explicit;
           end if;
  
*************** begin
*** 466,472 ****
           A := Expression (Arg1);
  
           if Nkind (A) /= N_Identifier then
!             Error_Msg ("incorrect argument for pragma %", Sloc (A));
           else
              Set_Name_Table_Boolean3 (Chars (A), True);
           end if;
--- 446,452 ----
           A := Expression (Arg1);
  
           if Nkind (A) /= N_Identifier then
!             Error_Msg_N ("incorrect argument for pragma %", A);
           else
              Set_Name_Table_Boolean3 (Chars (A), True);
           end if;
*************** begin
*** 718,726 ****
           begin
              if Prag_Id = Pragma_Source_File_Name then
                 if Project_File_In_Use = In_Use then
!                   Error_Msg
                      ("pragma Source_File_Name cannot be used " &
!                      "with a project file", Pragma_Sloc);
  
                 else
                    Project_File_In_Use := Not_In_Use;
--- 698,706 ----
           begin
              if Prag_Id = Pragma_Source_File_Name then
                 if Project_File_In_Use = In_Use then
!                   Error_Msg_N
                      ("pragma Source_File_Name cannot be used " &
!                      "with a project file", Pragma_Node);
  
                 else
                    Project_File_In_Use := Not_In_Use;
*************** begin
*** 728,736 ****
  
              else
                 if Project_File_In_Use = Not_In_Use then
!                   Error_Msg
                      ("pragma Source_File_Name_Project should only be used " &
!                      "with a project file", Pragma_Sloc);
                 else
                    Project_File_In_Use := In_Use;
                 end if;
--- 708,716 ----
  
              else
                 if Project_File_In_Use = Not_In_Use then
!                   Error_Msg_N
                      ("pragma Source_File_Name_Project should only be used " &
!                      "with a project file", Pragma_Node);
                 else
                    Project_File_In_Use := In_Use;
                 end if;
*************** begin
*** 773,781 ****
                      or else Intval (Expr) > 999
                      or else Intval (Expr) <= 0
                    then
!                      Error_Msg
                         ("pragma% index must be integer literal" &
!                         " in range 1 .. 999", Sloc (Expr));
                       raise Error_Resync;
                    else
                       Index := UI_To_Int (Intval (Expr));
--- 753,761 ----
                      or else Intval (Expr) > 999
                      or else Intval (Expr) <= 0
                    then
!                      Error_Msg_N
                         ("pragma% index must be integer literal" &
!                         " in range 1 .. 999", Expr);
                       raise Error_Resync;
                    else
                       Index := UI_To_Int (Intval (Expr));
*************** begin
*** 908,915 ****
             and then Num_SRef_Pragmas (Current_Source_File) = 0
             and then Operating_Mode /= Check_Syntax
           then
!             Error_Msg -- CODEFIX
!               ("first % pragma must be first line of file", Pragma_Sloc);
              raise Error_Resync;
           end if;
  
--- 888,895 ----
             and then Num_SRef_Pragmas (Current_Source_File) = 0
             and then Operating_Mode /= Check_Syntax
           then
!             Error_Msg_N -- CODEFIX
!               ("first % pragma must be first line of file", Pragma_Node);
              raise Error_Resync;
           end if;
  
*************** begin
*** 917,925 ****
  
           if Arg_Count = 1 then
              if Num_SRef_Pragmas (Current_Source_File) = 0 then
!                Error_Msg
                   ("file name required for first % pragma in file",
!                   Pragma_Sloc);
                 raise Error_Resync;
              else
                 Fname := No_File;
--- 897,905 ----
  
           if Arg_Count = 1 then
              if Num_SRef_Pragmas (Current_Source_File) = 0 then
!                Error_Msg_N
                   ("file name required for first % pragma in file",
!                   Pragma_Node);
                 raise Error_Resync;
              else
                 Fname := No_File;
*************** begin
*** 934,950 ****
  
              if Num_SRef_Pragmas (Current_Source_File) > 0 then
                 if Fname /= Full_Ref_Name (Current_Source_File) then
!                   Error_Msg
!                     ("file name must be same in all % pragmas", Pragma_Sloc);
                    raise Error_Resync;
                 end if;
              end if;
           end if;
  
           if Nkind (Expression (Arg1)) /= N_Integer_Literal then
!             Error_Msg
                ("argument for pragma% must be integer literal",
!                 Sloc (Expression (Arg1)));
              raise Error_Resync;
  
           --  OK, this source reference pragma is effective, however, we
--- 914,930 ----
  
              if Num_SRef_Pragmas (Current_Source_File) > 0 then
                 if Fname /= Full_Ref_Name (Current_Source_File) then
!                   Error_Msg_N
!                     ("file name must be same in all % pragmas", Pragma_Node);
                    raise Error_Resync;
                 end if;
              end if;
           end if;
  
           if Nkind (Expression (Arg1)) /= N_Integer_Literal then
!             Error_Msg_N
                ("argument for pragma% must be integer literal",
!                Expression (Arg1));
              raise Error_Resync;
  
           --  OK, this source reference pragma is effective, however, we
*************** begin
*** 1059,1065 ****
              end if;
  
              if not OK then
!                Error_Msg ("incorrect argument for pragma%", Sloc (A));
                 raise Error_Resync;
              end if;
           end if;
--- 1039,1045 ----
              end if;
  
              if not OK then
!                Error_Msg_N ("incorrect argument for pragma%", A);
                 raise Error_Resync;
              end if;
           end if;
*************** begin
*** 1340,1345 ****
--- 1320,1326 ----
           | Pragma_CPP_Virtual
           | Pragma_CPP_Vtable
           | Pragma_CPU
+          | Pragma_CUDA_Device
           | Pragma_CUDA_Execute
           | Pragma_CUDA_Global
           | Pragma_C_Pass_By_Copy
*************** begin
*** 1381,1387 ****
           | Pragma_Export_Function
           | Pragma_Export_Object
           | Pragma_Export_Procedure
-          | Pragma_Export_Value
           | Pragma_Export_Valued_Procedure
           | Pragma_Extend_System
           | Pragma_Extensions_Visible
--- 1362,1367 ----
*************** begin
*** 1392,1397 ****
--- 1372,1378 ----
           | Pragma_Finalize_Storage_Only
           | Pragma_Ghost
           | Pragma_Global
+          | Pragma_GNAT_Annotate
           | Pragma_Ident
           | Pragma_Implementation_Defined
           | Pragma_Implemented
*************** begin
*** 1525,1531 ****
           | Pragma_Unevaluated_Use_Of_Old
           | Pragma_Unimplemented_Unit
           | Pragma_Universal_Aliasing
-          | Pragma_Universal_Data
           | Pragma_Unmodified
           | Pragma_Unreferenced
           | Pragma_Unreferenced_Objects
--- 1506,1511 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/par-sync.adb gcc-12.1.0/gcc/ada/par-sync.adb
*** gcc-11.3.0/gcc/ada/par-sync.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-sync.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Sync is
*** 172,178 ****
                 --  current malformed aspect has been successfully skipped.
  
                 if Token = Tok_Identifier
!                  and then Get_Aspect_Id (Token_Name) /= No_Aspect
                 then
                    Restore_Scan_State (Scan_State);
                    exit;
--- 172,178 ----
                 --  current malformed aspect has been successfully skipped.
  
                 if Token = Tok_Identifier
!                  and then Is_Aspect_Id (Token_Name)
                 then
                    Restore_Scan_State (Scan_State);
                    exit;
diff -Nrcpad gcc-11.3.0/gcc/ada/par-tchk.adb gcc-12.1.0/gcc/ada/par-tchk.adb
*** gcc-11.3.0/gcc/ada/par-tchk.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-tchk.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/par-util.adb gcc-12.1.0/gcc/ada/par-util.adb
*** gcc-11.3.0/gcc/ada/par-util.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par-util.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Util is
*** 254,260 ****
        then
           return Mark;
        else
!          Error_Msg ("subtype mark expected", Sloc (Mark));
           return Error;
        end if;
     end Check_Subtype_Mark;
--- 254,260 ----
        then
           return Mark;
        else
!          Error_Msg_N ("subtype mark expected", Mark);
           return Error;
        end if;
     end Check_Subtype_Mark;
*************** package body Util is
*** 276,285 ****
  
        --  If we have a right paren, then that is taken as ending the list
        --  i.e. no comma is present.
!       --  Ditto for a right bracket in Ada 2020.
  
        elsif Token = Tok_Right_Paren
!         or else (Token = Tok_Right_Bracket and then Ada_Version >= Ada_2020)
        then
           return False;
  
--- 276,285 ----
  
        --  If we have a right paren, then that is taken as ending the list
        --  i.e. no comma is present.
!       --  Ditto for a right bracket in Ada 2022.
  
        elsif Token = Tok_Right_Paren
!         or else (Token = Tok_Right_Bracket and then Ada_Version >= Ada_2022)
        then
           return False;
  
*************** package body Util is
*** 630,635 ****
--- 630,664 ----
        Scan;
     end Merge_Identifier;
  
+    -------------------------------
+    -- Missing_Semicolon_On_When --
+    -------------------------------
+ 
+    function Missing_Semicolon_On_When return Boolean is
+       State : Saved_Scan_State;
+ 
+    begin
+       if not Token_Is_At_Start_Of_Line then
+          return False;
+ 
+       elsif Scopes (Scope.Last).Etyp /= E_Case then
+          return False;
+ 
+       else
+          Save_Scan_State (State);
+          Scan; -- past WHEN
+          Scan; -- past token after WHEN
+ 
+          if Token = Tok_Arrow then
+             Restore_Scan_State (State);
+             return True;
+          else
+             Restore_Scan_State (State);
+             return False;
+          end if;
+       end if;
+    end Missing_Semicolon_On_When;
+ 
     -------------------
     -- Next_Token_Is --
     -------------------
*************** package body Util is
*** 787,793 ****
              C : constant Entity_Id := Current_Entity (N);
           begin
              if Present (C) and then Sloc (C) = Standard_Location then
!                Error_Msg_N ("redefinition of entity& in Standard?K?", N);
              end if;
           end;
        end if;
--- 816,822 ----
              C : constant Entity_Id := Current_Entity (N);
           begin
              if Present (C) and then Sloc (C) = Standard_Location then
!                Error_Msg_N ("redefinition of entity& in Standard?.k?", N);
              end if;
           end;
        end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/par.adb gcc-12.1.0/gcc/ada/par.adb
*** gcc-11.3.0/gcc/ada/par.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,55 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Debug;    use Debug;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Fname;    use Fname;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Namet.Sp; use Namet.Sp;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Output;   use Output;
! with Par_SCO;  use Par_SCO;
! with Restrict; use Restrict;
! with Scans;    use Scans;
! with Scn;      use Scn;
! with Sem_Util; use Sem_Util;
! with Sinput;   use Sinput;
! with Sinput.L; use Sinput.L;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
  with Style;
! with Stylesw;  use Stylesw;
  with Table;
! with Tbuild;   use Tbuild;
  
  ---------
  -- Par --
--- 23,57 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Debug;          use Debug;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Fname;          use Fname;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Namet.Sp;       use Namet.Sp;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Output;         use Output;
! with Par_SCO;        use Par_SCO;
! with Restrict;       use Restrict;
! with Scans;          use Scans;
! with Scn;            use Scn;
! with Sem_Util;       use Sem_Util;
! with Sinput;         use Sinput;
! with Sinput.L;       use Sinput.L;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
  with Style;
! with Stylesw;        use Stylesw;
  with Table;
! with Tbuild;         use Tbuild;
  
  ---------
  -- Par --
*************** function Par (Configuration_Pragmas : Bo
*** 482,492 ****
        --  This field is used to provide the name of the construct being parsed
        --  and indirectly its kind. For loops and blocks, the field contains the
        --  source name or the generated one. For package specifications, bodies,
!       --  subprogram specifications and bodies the field holds the correponding
!       --  program unit name. For task declarations and bodies, protected types
!       --  and bodies, and accept statements the field hold the name of the type
!       --  or operation. For if-statements, case-statements, return statements,
!       --  and selects, the field is initialized to Error.
  
        --  Note: this is a bit of an odd (mis)use of Error, since there is no
        --  Error, but we use this value as a place holder to indicate that it
--- 484,494 ----
        --  This field is used to provide the name of the construct being parsed
        --  and indirectly its kind. For loops and blocks, the field contains the
        --  source name or the generated one. For package specifications, bodies,
!       --  subprogram specifications and bodies the field holds the
!       --  corresponding program unit name. For task declarations and bodies,
!       --  protected types and bodies, and accept statements the field hold the
!       --  name of the type or operation. For if-statements, case-statements,
!       --  return statements, and selects, the field is initialized to Error.
  
        --  Note: this is a bit of an odd (mis)use of Error, since there is no
        --  Error, but we use this value as a place holder to indicate that it
*************** function Par (Configuration_Pragmas : Bo
*** 562,568 ****
     -- Table for Handling Suspicious Labels --
     ------------------------------------------
  
!    --  This is a special data structure which is used to deal very spefifically
     --  with the following error case
  
     --     label;
--- 564,570 ----
     -- Table for Handling Suspicious Labels --
     ------------------------------------------
  
!    --  This is a special data structure which is used to deal very specifically
     --  with the following error case
  
     --     label;
*************** function Par (Configuration_Pragmas : Bo
*** 647,656 ****
        --  procedure more than once for the same pragma. All parse-time pragma
        --  handling must be prepared to handle such multiple calls correctly.
  
!       function P_Identifier (C : Id_Check := None) return Node_Id;
        --  Scans out an identifier. The parameter C determines the treatment
        --  of reserved identifiers. See declaration of Id_Check for details.
  
        function P_Pragmas_Opt return List_Id;
        --  This function scans for a sequence of pragmas in other than a
        --  declaration sequence or statement sequence context. All pragmas
--- 649,664 ----
        --  procedure more than once for the same pragma. All parse-time pragma
        --  handling must be prepared to handle such multiple calls correctly.
  
!       function P_Identifier
!         (C         : Id_Check := None;
!          Force_Msg : Boolean  := False) return Node_Id;
        --  Scans out an identifier. The parameter C determines the treatment
        --  of reserved identifiers. See declaration of Id_Check for details.
  
+       --  An appropriate error message, pointing to the token, is also issued
+       --  if either this is the first occurrence of misuse of this identifier,
+       --  or if Force_Msg is True.
+ 
        function P_Pragmas_Opt return List_Id;
        --  This function scans for a sequence of pragmas in other than a
        --  declaration sequence or statement sequence context. All pragmas
*************** function Par (Configuration_Pragmas : Bo
*** 1349,1354 ****
--- 1357,1374 ----
        --  conditions are met, an error message is issued, and the merge is
        --  carried out, modifying the Chars field of Prev.
  
+       function Missing_Semicolon_On_When return Boolean;
+       --  This function deals with the following specialized situations
+       --
+       --    when 'x' =>
+       --       exit/return [identifier]
+       --    when 'y' =>
+       --
+       --  This looks like a messed up EXIT WHEN or RETURN WHEN, when in fact
+       --  the problem is a missing semicolon. It is called with Token pointing
+       --  to the WHEN token, and returns True if a semicolon is missing before
+       --  the WHEN as in the above example.
+ 
        function Next_Token_Is (Tok : Token_Type) return Boolean;
        --  Looks at token after current one and returns True if the token type
        --  matches Tok. The scan is unconditionally restored on return.
*************** begin
*** 1636,1649 ****
                       Uname : constant String :=
                                 Get_Name_String
                                   (Unit_Name (Current_Source_Unit));
!                      Name  : String (1 .. Uname'Length - 2);
! 
!                   begin
                       --  Because Unit_Name includes "%s"/"%b", we need to strip
                       --  the last two characters to get the real unit name.
  
!                      Name := Uname (Uname'First .. Uname'Last - 2);
! 
                       if Name = "ada"         or else
                          Name = "interfaces"  or else
                          Name = "system"
--- 1656,1667 ----
                       Uname : constant String :=
                                 Get_Name_String
                                   (Unit_Name (Current_Source_Unit));
!                      Name  : String renames
!                        Uname (Uname'First .. Uname'Last - 2);
                       --  Because Unit_Name includes "%s"/"%b", we need to strip
                       --  the last two characters to get the real unit name.
  
!                   begin
                       if Name = "ada"         or else
                          Name = "interfaces"  or else
                          Name = "system"
diff -Nrcpad gcc-11.3.0/gcc/ada/par.ads gcc-12.1.0/gcc/ada/par.ads
*** gcc-11.3.0/gcc/ada/par.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/par_sco.adb gcc-12.1.0/gcc/ada/par_sco.adb
*** gcc-11.3.0/gcc/ada/par_sco.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par_sco.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
***************
*** 23,48 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Errout;   use Errout;
! with Lib;      use Lib;
! with Lib.Util; use Lib.Util;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Output;   use Output;
  with Put_SCOs;
! with SCOs;     use SCOs;
! with Sem;      use Sem;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
  with Table;
  
! with GNAT.HTable;      use GNAT.HTable;
  with GNAT.Heap_Sort_G;
  
  package body Par_SCO is
--- 23,50 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Errout;         use Errout;
! with Lib;            use Lib;
! with Lib.Util;       use Lib.Util;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Output;         use Output;
  with Put_SCOs;
! with SCOs;           use SCOs;
! with Sem;            use Sem;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
  with Table;
  
! with GNAT.HTable;    use GNAT.HTable;
  with GNAT.Heap_Sort_G;
  
  package body Par_SCO is
*************** package body Par_SCO is
*** 214,222 ****
     --  Parameter D, when present, indicates the dominant of the first
     --  declaration or statement within N.
  
-    --  Why is Traverse_Sync_Definition commented specifically, whereas
-    --  the others are not???
- 
     procedure Traverse_Generic_Package_Declaration (N : Node_Id);
  
     procedure Traverse_Handled_Statement_Sequence
--- 216,221 ----
*************** package body Par_SCO is
*** 233,240 ****
       (N : Node_Id;
        D : Dominant_Info := No_Dominant);
  
!    procedure Traverse_Sync_Definition (N : Node_Id);
!    --  Traverse a protected definition or task definition
  
     --  Note regarding traversals: In a few cases where an Alternatives list is
     --  involved, pragmas such as "pragma Page" may show up before the first
--- 232,238 ----
       (N : Node_Id;
        D : Dominant_Info := No_Dominant);
  
!    procedure Traverse_Protected_Or_Task_Definition (N : Node_Id);
  
     --  Note regarding traversals: In a few cases where an Alternatives list is
     --  involved, pragmas such as "pragma Page" may show up before the first
*************** package body Par_SCO is
*** 681,692 ****
                 --  two levels (through the pragma argument association) to
                 --  get to the pragma node itself. For the guard on a select
                 --  alternative, we do not have access to the token location for
!                --  the WHEN, so we use the first sloc of the condition itself
!                --  (note: we use First_Sloc, not Sloc, because this is what is
!                --  referenced by dominance markers).
! 
!                --  Doesn't this requirement of using First_Sloc need to be
!                --  documented in the spec ???
  
                 if Nkind (Parent (N)) in N_Accept_Alternative
                                        | N_Delay_Alternative
--- 679,690 ----
                 --  two levels (through the pragma argument association) to
                 --  get to the pragma node itself. For the guard on a select
                 --  alternative, we do not have access to the token location for
!                --  the WHEN, so we use the first sloc of the condition itself.
!                --  First_Sloc gives the most sensible result, but we have to
!                --  beware of also using it when computing the dominance marker
!                --  sloc (in the Set_Statement_Entry procedure), as this is not
!                --  fully equivalent to the "To" sloc computed by
!                --  Sloc_Range (Guard, To, From).
  
                 if Nkind (Parent (N)) in N_Accept_Alternative
                                        | N_Delay_Alternative
*************** package body Par_SCO is
*** 829,834 ****
--- 827,840 ----
                    return Skip;
                 end;
  
+             when N_Quantified_Expression =>
+                declare
+                   Cond : constant Node_Id := Condition (N);
+                begin
+                   Process_Decisions (Cond, 'W', Pragma_Sloc);
+                   return Skip;
+                end;
+ 
              --  All other cases, continue scan
  
              when others =>
*************** package body Par_SCO is
*** 916,923 ****
     ---------------------
  
     procedure Record_Instance (Id : Instance_Id; Inst_Sloc : Source_Ptr) is
!       Inst_Src  : constant Source_File_Index :=
!                     Get_Source_File_Index (Inst_Sloc);
     begin
        SCO_Instance_Table.Append
          ((Inst_Dep_Num       => Dependency_Num (Unit (Inst_Src)),
--- 922,929 ----
     ---------------------
  
     procedure Record_Instance (Id : Instance_Id; Inst_Sloc : Source_Ptr) is
!       Inst_Src : constant Source_File_Index :=
!                    Get_Source_File_Index (Inst_Sloc);
     begin
        SCO_Instance_Table.Append
          ((Inst_Dep_Num       => Dependency_Num (Unit (Inst_Src)),
*************** package body Par_SCO is
*** 1422,1428 ****
        --  Dominance information for the current basic block
  
        Current_Test : Node_Id;
!       --  Conditional node (N_If_Statement or N_Elsiif being processed
  
        N : Node_Id;
  
--- 1428,1434 ----
        --  Dominance information for the current basic block
  
        Current_Test : Node_Id;
!       --  Conditional node (N_If_Statement or N_Elsif being processed)
  
        N : Node_Id;
  
*************** package body Par_SCO is
*** 1577,1582 ****
--- 1583,1600 ----
                          To := No_Location;
                       end if;
  
+                      --  Be consistent with the location determined in
+                      --  Output_Header.
+ 
+                      if Current_Dominant.K = 'T'
+                         and then Nkind (Parent (Current_Dominant.N))
+                                    in N_Accept_Alternative
+                                     | N_Delay_Alternative
+                                     | N_Terminate_Alternative
+                      then
+                         From := First_Sloc (Current_Dominant.N);
+                      end if;
+ 
                       Set_Raw_Table_Entry
                         (C1                 => '>',
                          C2                 => Current_Dominant.K,
*************** package body Par_SCO is
*** 1865,1871 ****
                       Process_Decisions_Defer (Cond, 'G');
  
                       --  For an entry body with a barrier, the entry body
!                      --  is dominanted by a True evaluation of the barrier.
  
                       Inner_Dominant := ('T', N);
                    end if;
--- 1883,1889 ----
                       Process_Decisions_Defer (Cond, 'G');
  
                       --  For an entry body with a barrier, the entry body
!                      --  is dominated by a True evaluation of the barrier.
  
                       Inner_Dominant := ('T', N);
                    end if;
*************** package body Par_SCO is
*** 2231,2236 ****
--- 2249,2256 ----
                          | Name_Loop_Invariant
                          | Name_Postcondition
                          | Name_Precondition
+                         | Name_Type_Invariant
+                         | Name_Invariant
                       =>
                          --  For Assert/Check/Precondition/Postcondition, we
                          --  must generate a P entry for the decision. Note
*************** package body Par_SCO is
*** 2239,2245 ****
                          --  on when we output the decision line in Put_SCOs,
                          --  depending on setting by Set_SCO_Pragma_Enabled.
  
!                         if Nam = Name_Check then
                             Next (Arg);
                          end if;
  
--- 2259,2268 ----
                          --  on when we output the decision line in Put_SCOs,
                          --  depending on setting by Set_SCO_Pragma_Enabled.
  
!                         if Nam = Name_Check
!                            or else Nam = Name_Type_Invariant
!                            or else Nam = Name_Invariant
!                         then
                             Next (Arg);
                          end if;
  
*************** package body Par_SCO is
*** 2268,2275 ****
                       --  never disabled.
  
                       --  Should generate P decisions (not X) for assertion
!                      --  related pragmas: [Type_]Invariant,
!                      --  [{Static,Dynamic}_]Predicate???
  
                       when others =>
                          Process_Decisions_Defer (N, 'X');
--- 2291,2297 ----
                       --  never disabled.
  
                       --  Should generate P decisions (not X) for assertion
!                      --  related pragmas: [{Static,Dynamic}_]Predicate???
  
                       when others =>
                          Process_Decisions_Defer (N, 'X');
*************** package body Par_SCO is
*** 2310,2316 ****
                 Process_Decisions_Defer (Discriminant_Specifications (N), 'X');
                 Set_Statement_Entry;
  
!                Traverse_Sync_Definition (N);
  
              when N_Single_Protected_Declaration
                 | N_Single_Task_Declaration
--- 2332,2338 ----
                 Process_Decisions_Defer (Discriminant_Specifications (N), 'X');
                 Set_Statement_Entry;
  
!                Traverse_Protected_Or_Task_Definition (N);
  
              when N_Single_Protected_Declaration
                 | N_Single_Task_Declaration
*************** package body Par_SCO is
*** 2318,2324 ****
                 Extend_Statement_Sequence (N, 'o');
                 Set_Statement_Entry;
  
!                Traverse_Sync_Definition (N);
  
              when others =>
  
--- 2340,2346 ----
                 Extend_Statement_Sequence (N, 'o');
                 Set_Statement_Entry;
  
!                Traverse_Protected_Or_Task_Definition (N);
  
              when others =>
  
*************** package body Par_SCO is
*** 2395,2415 ****
  
        --  Loop through statements or declarations
  
!       if Is_Non_Empty_List (L) then
!          N := First (L);
!          while Present (N) loop
! 
!             --  Note: For separate bodies, we see the tree after Par.Labl has
!             --  introduced implicit labels, so we need to ignore those nodes.
  
!             if Nkind (N) /= N_Implicit_Label_Declaration then
!                Traverse_One (N);
!             end if;
  
!             Next (N);
!          end loop;
  
!       end if;
  
        --  End sequence of statements and flush deferred decisions
  
--- 2417,2434 ----
  
        --  Loop through statements or declarations
  
!       N := First (L);
!       while Present (N) loop
  
!          --  Note: For separate bodies, we see the tree after Par.Labl has
!          --  introduced implicit labels, so we need to ignore those nodes.
  
!          if Nkind (N) /= N_Implicit_Label_Declaration then
!             Traverse_One (N);
!          end if;
  
!          Next (N);
!       end loop;
  
        --  End sequence of statements and flush deferred decisions
  
*************** package body Par_SCO is
*** 2496,2506 ****
        Traverse_Declarations_Or_Statements (Private_Declarations (Spec), Dom);
     end Traverse_Package_Declaration;
  
!    ------------------------------
!    -- Traverse_Sync_Definition --
!    ------------------------------
  
!    procedure Traverse_Sync_Definition (N : Node_Id) is
        Dom_Info : Dominant_Info := ('S', N);
        --  The first declaration is dominated by the protected or task [type]
        --  declaration.
--- 2515,2525 ----
        Traverse_Declarations_Or_Statements (Private_Declarations (Spec), Dom);
     end Traverse_Package_Declaration;
  
!    -------------------------------------------
!    -- Traverse_Protected_Or_Task_Definition --
!    -------------------------------------------
  
!    procedure Traverse_Protected_Or_Task_Definition (N : Node_Id) is
        Dom_Info : Dominant_Info := ('S', N);
        --  The first declaration is dominated by the protected or task [type]
        --  declaration.
*************** package body Par_SCO is
*** 2549,2555 ****
        Traverse_Declarations_Or_Statements
          (L => Priv_Decl,
           D => Dom_Info);
!    end Traverse_Sync_Definition;
  
     --------------------------------------
     -- Traverse_Subprogram_Or_Task_Body --
--- 2568,2574 ----
        Traverse_Declarations_Or_Statements
          (L => Priv_Decl,
           D => Dom_Info);
!    end Traverse_Protected_Or_Task_Definition;
  
     --------------------------------------
     -- Traverse_Subprogram_Or_Task_Body --
diff -Nrcpad gcc-11.3.0/gcc/ada/par_sco.ads gcc-12.1.0/gcc/ada/par_sco.ads
*** gcc-11.3.0/gcc/ada/par_sco.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/par_sco.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/pprint.adb gcc-12.1.0/gcc/ada/pprint.adb
*** gcc-11.3.0/gcc/ada/pprint.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/pprint.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2008-2022, 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- --
***************
*** 23,42 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;   use Atree;
! with Csets;   use Csets;
! with Einfo;   use Einfo;
! with Namet;   use Namet;
! with Nlists;  use Nlists;
! with Opt;     use Opt;
! with Sinfo;   use Sinfo;
! with Sinput;  use Sinput;
! with Snames;  use Snames;
! with Uintp;   use Uintp;
  
  package body Pprint is
  
!    List_Name_Count : Integer := 0;
     --  Counter used to prevent infinite recursion while computing name of
     --  complex expressions.
  
--- 23,47 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Uintp;          use Uintp;
! 
! with System.Case_Util;
  
  package body Pprint is
  
!    List_Name_Count : Natural := 0;
     --  Counter used to prevent infinite recursion while computing name of
     --  complex expressions.
  
*************** package body Pprint is
*** 95,101 ****
              Add_Space : Boolean := True;
              Add_Paren : Boolean := True;
              Num       : Natural := 1) return String;
!          --  ??? what does this do
  
           ------------------------
           -- Internal_List_Name --
--- 100,106 ----
              Add_Space : Boolean := True;
              Add_Paren : Boolean := True;
              Num       : Natural := 1) return String;
!          --  Created for purposes of recursing on embedded lists
  
           ------------------------
           -- Internal_List_Name --
*************** package body Pprint is
*** 108,137 ****
              Add_Paren : Boolean := True;
              Num       : Natural := 1) return String
           is
-             function Prepend (S : String) return String;
-             --  ??? what does this do
- 
-             -------------
-             -- Prepend --
-             -------------
- 
-             function Prepend (S : String) return String is
-             begin
-                if Add_Space then
-                   if Add_Paren then
-                      return " (" & S;
-                   else
-                      return ' ' & S;
-                   end if;
-                elsif Add_Paren then
-                   return '(' & S;
-                else
-                   return S;
-                end if;
-             end Prepend;
- 
-          --  Start of processing for Internal_List_Name
- 
           begin
              if not Present (List) then
                 if First or else not Add_Paren then
--- 113,118 ----
*************** package body Pprint is
*** 147,169 ****
                 end if;
              end if;
  
!             --  ??? the Internal_List_Name calls can be factored out
  
!             if First then
!                return Prepend (Expr_Name (List)
!                  & Internal_List_Name
!                      (List      => Next (List),
!                       First     => False,
!                       Add_Paren => Add_Paren,
!                       Num       => Num + 1));
!             else
!                return ", " & Expr_Name (List)
!                  & Internal_List_Name
!                      (List      => Next (List),
!                       First     => False,
!                       Add_Paren => Add_Paren,
!                       Num       => Num + 1);
!             end if;
           end Internal_List_Name;
  
        --  Start of processing for List_Name
--- 128,149 ----
                 end if;
              end if;
  
!             --  Continue recursing on the list - handling the first element
!             --  in a special way.
  
!             return
!               (if First then
!                   (if Add_Space and Add_Paren then " ("
!                    elsif Add_Paren then "("
!                    elsif Add_Space then " "
!                    else "")
!                else ", ")
!                & Expr_Name (List)
!                & Internal_List_Name
!                    (List      => Next (List),
!                     First     => False,
!                     Add_Paren => Add_Paren,
!                     Num       => Num + 1);
           end Internal_List_Name;
  
        --  Start of processing for List_Name
*************** package body Pprint is
*** 225,232 ****
                 end;
  
              when N_Integer_Literal =>
!                UI_Image (Intval (Expr));
!                return UI_Image_Buffer (1 .. UI_Image_Length);
  
              when N_Real_Literal =>
                 return Real_Image (Realval (Expr));
--- 205,211 ----
                 end;
  
              when N_Integer_Literal =>
!                return UI_Image (Intval (Expr));
  
              when N_Real_Literal =>
                 return Real_Image (Realval (Expr));
*************** package body Pprint is
*** 238,247 ****
                 return "new " & Expr_Name (Expression (Expr));
  
              when N_Aggregate =>
!                if Present (Sinfo.Expressions (Expr)) then
                    return
                      List_Name
!                       (List      => First (Sinfo.Expressions (Expr)),
                         Add_Space => False);
  
                 --  Do not return empty string for (others => <>) aggregate
--- 217,226 ----
                 return "new " & Expr_Name (Expression (Expr));
  
              when N_Aggregate =>
!                if Present (Expressions (Expr)) then
                    return
                      List_Name
!                       (List      => First (Expressions (Expr)),
                         Add_Space => False);
  
                 --  Do not return empty string for (others => <>) aggregate
*************** package body Pprint is
*** 265,303 ****
              when N_Extension_Aggregate =>
                 return "(" & Expr_Name (Ancestor_Part (Expr)) & " with "
                   & List_Name
!                      (List      => First (Sinfo.Expressions (Expr)),
                        Add_Space => False,
                        Add_Paren => False) & ")";
  
              when N_Attribute_Reference =>
                 if Take_Prefix then
                    declare
-                      function To_Mixed_Case (S : String) return String;
-                      --  Transform given string into the corresponding one in
-                      --  mixed case form.
- 
-                      -------------------
-                      -- To_Mixed_Case --
-                      -------------------
- 
-                      function To_Mixed_Case (S : String) return String is
-                         Result : String (S'Range);
-                         Ucase  : Boolean := True;
- 
-                      begin
-                         for J in S'Range loop
-                            if Ucase then
-                               Result (J) := Fold_Upper (S (J));
-                            else
-                               Result (J) := Fold_Lower (S (J));
-                            end if;
- 
-                            Ucase := (S (J) = '_');
-                         end loop;
- 
-                         return Result;
-                      end To_Mixed_Case;
- 
                       Id : constant Attribute_Id :=
                              Get_Attribute_Id (Attribute_Name (Expr));
  
--- 244,256 ----
              when N_Extension_Aggregate =>
                 return "(" & Expr_Name (Ancestor_Part (Expr)) & " with "
                   & List_Name
!                      (List      => First (Expressions (Expr)),
                        Add_Space => False,
                        Add_Paren => False) & ")";
  
              when N_Attribute_Reference =>
                 if Take_Prefix then
                    declare
                       Id : constant Attribute_Id :=
                              Get_Attribute_Id (Attribute_Name (Expr));
  
*************** package body Pprint is
*** 306,312 ****
                       Str : constant String :=
                               Expr_Name (Prefix (Expr))
                                 & "'"
!                                & To_Mixed_Case
                                     (Get_Name_String (Attribute_Name (Expr)));
  
                       N      : Node_Id;
--- 259,265 ----
                       Str : constant String :=
                               Expr_Name (Prefix (Expr))
                                 & "'"
!                                & System.Case_Util.To_Mixed
                                     (Get_Name_String (Attribute_Name (Expr)));
  
                       N      : Node_Id;
*************** package body Pprint is
*** 382,390 ****
                            and then Nkind (Decl) = N_Object_Declaration
                            and then not Comes_From_Source (Decl)
                            and then Constant_Present (Decl)
!                           and then Present (Sinfo.Expression (Decl))
!                           and then Nkind (Sinfo.Expression (Decl)) =
!                                      N_Reference
                          then
                             return "";
                          end if;
--- 335,342 ----
                            and then Nkind (Decl) = N_Object_Declaration
                            and then not Comes_From_Source (Decl)
                            and then Constant_Present (Decl)
!                           and then Present (Expression (Decl))
!                           and then Nkind (Expression (Decl)) = N_Reference
                          then
                             return "";
                          end if;
*************** package body Pprint is
*** 437,448 ****
  
              when N_If_Expression =>
                 declare
!                   N : constant Node_Id := First (Sinfo.Expressions (Expr));
                 begin
                    return
!                     "if " & Expr_Name (N) & " then "
!                       & Expr_Name (Next (N)) & " else "
!                       & Expr_Name (Next (Next (N)));
                 end;
  
              when N_Qualified_Expression =>
--- 389,402 ----
  
              when N_If_Expression =>
                 declare
!                   Cond_Expr : constant Node_Id := First (Expressions (Expr));
!                   Then_Expr : constant Node_Id := Next (Cond_Expr);
!                   Else_Expr : constant Node_Id := Next (Then_Expr);
                 begin
                    return
!                     "if " & Expr_Name (Cond_Expr) & " then "
!                       & Expr_Name (Then_Expr) & " else "
!                       & Expr_Name (Else_Expr);
                 end;
  
              when N_Qualified_Expression =>
*************** package body Pprint is
*** 648,656 ****
                 if Take_Prefix then
                    return
                      Expr_Name (Prefix (Expr))
!                       & List_Name (First (Sinfo.Expressions (Expr)));
                 else
!                   return List_Name (First (Sinfo.Expressions (Expr)));
                 end if;
  
              when N_Function_Call =>
--- 602,610 ----
                 if Take_Prefix then
                    return
                      Expr_Name (Prefix (Expr))
!                       & List_Name (First (Expressions (Expr)));
                 else
!                   return List_Name (First (Expressions (Expr)));
                 end if;
  
              when N_Function_Call =>
*************** package body Pprint is
*** 662,674 ****
                 if Default = "" then
                    return '('
                      & Expr_Name (Name (Expr))
!                     & List_Name (First (Sinfo.Parameter_Associations (Expr)))
                      & ')';
                 else
                    return
                      Expr_Name (Name (Expr))
!                       & List_Name
!                           (First (Sinfo.Parameter_Associations (Expr)));
                 end if;
  
              when N_Null =>
--- 616,627 ----
                 if Default = "" then
                    return '('
                      & Expr_Name (Name (Expr))
!                     & List_Name (First (Parameter_Associations (Expr)))
                      & ')';
                 else
                    return
                      Expr_Name (Name (Expr))
!                       & List_Name (First (Parameter_Associations (Expr)));
                 end if;
  
              when N_Null =>
*************** package body Pprint is
*** 682,688 ****
           end case;
        end Expr_Name;
  
!    --  Start of processing for Expression_Name
  
     begin
        if not From_Source then
--- 635,641 ----
           end case;
        end Expr_Name;
  
!    --  Start of processing for Expression_Image
  
     begin
        if not From_Source then
*************** package body Pprint is
*** 697,702 ****
--- 650,661 ----
           end;
        end if;
  
+       --  Reach to the underlying expression for an expression-with-actions
+ 
+       if Nkind (Expr) = N_Expression_With_Actions then
+          return Expression_Image (Expression (Expr), Default);
+       end if;
+ 
        --  Compute left (start) and right (end) slocs for the expression
        --  Consider using Sinput.Sloc_Range instead, except that it does not
        --  work properly currently???
*************** package body Pprint is
*** 788,798 ****
                 end if;
  
              when N_Indexed_Component =>
!                Right := Original_Node (Last (Sinfo.Expressions (Right)));
                 Append_Paren := Append_Paren + 1;
  
              when N_Function_Call =>
!                if Present (Sinfo.Parameter_Associations (Right)) then
                    declare
                       Rover : Node_Id;
                       Found : Boolean;
--- 747,757 ----
                 end if;
  
              when N_Indexed_Component =>
!                Right := Original_Node (Last (Expressions (Right)));
                 Append_Paren := Append_Paren + 1;
  
              when N_Function_Call =>
!                if Present (Parameter_Associations (Right)) then
                    declare
                       Rover : Node_Id;
                       Found : Boolean;
*************** package body Pprint is
*** 801,807 ****
                       --  Avoid source position confusion associated with
                       --  parameters for which Comes_From_Source is False.
  
!                      Rover := First (Sinfo.Parameter_Associations (Right));
                       Found := False;
                       while Present (Rover) loop
                          if Comes_From_Source (Original_Node (Rover)) then
--- 760,766 ----
                       --  Avoid source position confusion associated with
                       --  parameters for which Comes_From_Source is False.
  
!                      Rover := First (Parameter_Associations (Right));
                       Found := False;
                       while Present (Rover) loop
                          if Comes_From_Source (Original_Node (Rover)) then
diff -Nrcpad gcc-11.3.0/gcc/ada/pprint.ads gcc-12.1.0/gcc/ada/pprint.ads
*** gcc-11.3.0/gcc/ada/pprint.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/pprint.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2008-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/prep.adb gcc-12.1.0/gcc/ada/prep.adb
*** gcc-11.3.0/gcc/ada/prep.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/prep.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
*************** package body Prep is
*** 114,122 ****
     --  Used to avoid repetition of the part of the initialisation that needs
     --  to be done only once.
  
-    Empty_String : String_Id;
-    --  "", as a string_id
- 
     String_False : String_Id;
     --  "false", as a string_id
  
--- 114,119 ----
*************** package body Prep is
*** 810,818 ****
           True_Value.Value := End_String;
  
           Start_String;
-          Empty_String := End_String;
- 
-          Start_String;
           Store_String_Chars ("False");
           String_False := End_String;
  
--- 807,812 ----
*************** package body Prep is
*** 1072,1078 ****
                          Original            => Original_Name,
                          On_The_Command_Line => False,
                          Is_A_String         => False,
!                         Value               => Empty_String);
  
              else
                 Value_Start := Token_Ptr;
--- 1066,1072 ----
                          Original            => Original_Name,
                          On_The_Command_Line => False,
                          Is_A_String         => False,
!                         Value               => Null_String_Id);
  
              else
                 Value_Start := Token_Ptr;
*************** package body Prep is
*** 1410,1416 ****
  
                       Scan.all;
  
!                      if Token /= Tok_If then
                          Error_Msg -- CODEFIX
                            ("IF expected", Token_Ptr);
                          No_Error_Found := False;
--- 1404,1415 ----
  
                       Scan.all;
  
!                      --  Ignore all recoverable errors if Relaxed_RM_Semantics
! 
!                      if Relaxed_RM_Semantics then
!                         null;
! 
!                      elsif Token /= Tok_If then
                          Error_Msg -- CODEFIX
                            ("IF expected", Token_Ptr);
                          No_Error_Found := False;
*************** package body Prep is
*** 1453,1473 ****
                    --  Illegal preprocessor line
  
                    when others =>
-                      No_Error_Found := False;
- 
                       if Pp_States.Last = 0 then
                          Error_Msg -- CODEFIX
                            ("IF expected", Token_Ptr);
  
!                      elsif
!                        Pp_States.Table (Pp_States.Last).Else_Ptr = 0
                       then
                          Error_Msg
                            ("IF, ELSIF, ELSE, or `END IF` expected",
                             Token_Ptr);
  
                       else
                          Error_Msg ("IF or `END IF` expected", Token_Ptr);
                       end if;
  
                       --  Skip to the end of this illegal line
--- 1452,1482 ----
                    --  Illegal preprocessor line
  
                    when others =>
                       if Pp_States.Last = 0 then
                          Error_Msg -- CODEFIX
                            ("IF expected", Token_Ptr);
+                         No_Error_Found := False;
  
!                      elsif Relaxed_RM_Semantics
!                        and then Get_Name_String (Token_Name) = "endif"
                       then
+                         --  In relaxed mode, accept "endif" instead of
+                         --  "end if".
+ 
+                         --  Decrement the depth of the #if stack
+ 
+                         if Pp_States.Last > 0 then
+                            Pp_States.Decrement_Last;
+                         end if;
+                      elsif Pp_States.Table (Pp_States.Last).Else_Ptr = 0 then
                          Error_Msg
                            ("IF, ELSIF, ELSE, or `END IF` expected",
                             Token_Ptr);
+                         No_Error_Found := False;
  
                       else
                          Error_Msg ("IF or `END IF` expected", Token_Ptr);
+                         No_Error_Found := False;
                       end if;
  
                       --  Skip to the end of this illegal line
diff -Nrcpad gcc-11.3.0/gcc/ada/prep.ads gcc-12.1.0/gcc/ada/prep.ads
*** gcc-11.3.0/gcc/ada/prep.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/prep.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/prepcomp.adb gcc-12.1.0/gcc/ada/prepcomp.adb
*** gcc-11.3.0/gcc/ada/prepcomp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/prepcomp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/prepcomp.ads gcc-12.1.0/gcc/ada/prepcomp.ads
*** gcc-11.3.0/gcc/ada/prepcomp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/prepcomp.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/put_scos.adb gcc-12.1.0/gcc/ada/put_scos.adb
*** gcc-11.3.0/gcc/ada/put_scos.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/put_scos.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/put_scos.ads gcc-12.1.0/gcc/ada/put_scos.ads
*** gcc-11.3.0/gcc/ada/put_scos.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/put_scos.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/raise-gcc.c gcc-12.1.0/gcc/ada/raise-gcc.c
*** gcc-11.3.0/gcc/ada/raise-gcc.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/raise-gcc.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *             Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *             Copyright (C) 1992-2022, 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- *
***************
*** 48,61 ****
  # endif
  #endif
  
- #include <stdarg.h>
- 
  #ifdef __cplusplus
  # include <cstdlib>
  #else
! typedef char bool;
! # define true 1
! # define false 0
  #endif
  
  #include "raise.h"
--- 48,60 ----
  # endif
  #endif
  
  #ifdef __cplusplus
+ # include <cstdarg>
  # include <cstdlib>
  #else
! # include <stdarg.h>
! # include <stdbool.h>
! # include <stdlib.h>
  #endif
  
  #include "raise.h"
*************** extern void __gnat_raise_abort (void) __
*** 123,129 ****
  #define abort() __gnat_raise_abort()
  
  #elif defined(STANDALONE)
- #include <stdlib.h>
  #define inhibit_libc
  #endif
  
--- 122,127 ----
*************** typedef struct
*** 542,558 ****
    /* ABI header, maximally aligned. */
  } _GNAT_Exception;
  
! /* The two constants below are specific ttype identifiers for special
     exception ids.  Their type should match what a-exexpr exports.  */
  
! extern const int __gnat_others_value;
! #define GNAT_OTHERS      ((_Unwind_Ptr) &__gnat_others_value)
  
! extern const int __gnat_all_others_value;
! #define GNAT_ALL_OTHERS  ((_Unwind_Ptr) &__gnat_all_others_value)
  
! extern const int __gnat_unhandled_others_value;
! #define GNAT_UNHANDLED_OTHERS  ((_Unwind_Ptr) &__gnat_unhandled_others_value)
  
  /* Describe the useful region data associated with an unwind context.  */
  
--- 540,556 ----
    /* ABI header, maximally aligned. */
  } _GNAT_Exception;
  
! /* The three constants below are specific ttype identifiers for special
     exception ids.  Their type should match what a-exexpr exports.  */
  
! extern char __gnat_others_value;
! #define GNAT_OTHERS ((Exception_Id) &__gnat_others_value)
  
! extern char __gnat_all_others_value;
! #define GNAT_ALL_OTHERS ((Exception_Id) &__gnat_all_others_value)
  
! extern char __gnat_unhandled_others_value;
! #define GNAT_UNHANDLED_OTHERS ((Exception_Id) &__gnat_unhandled_others_value)
  
  /* Describe the useful region data associated with an unwind context.  */
  
*************** get_call_site_action_for (_Unwind_Ptr ip
*** 902,913 ****
  #define Foreign_Data_For      __gnat_foreign_data_for
  #define EID_For               __gnat_eid_for
  
! extern bool Is_Handled_By_Others (_Unwind_Ptr eid);
! extern char Language_For (_Unwind_Ptr eid);
! 
! extern void *Foreign_Data_For (_Unwind_Ptr eid);
! 
! extern Exception_Id EID_For (_GNAT_Exception * e);
  
  #define Foreign_Exception system__exceptions__foreign_exception
  extern struct Exception_Data Foreign_Exception;
--- 900,909 ----
  #define Foreign_Data_For      __gnat_foreign_data_for
  #define EID_For               __gnat_eid_for
  
! extern bool Is_Handled_By_Others (Exception_Id eid);
! extern char Language_For         (Exception_Id eid);
! extern void *Foreign_Data_For    (Exception_Id eid);
! extern Exception_Id EID_For      (_GNAT_Exception *e);
  
  #define Foreign_Exception system__exceptions__foreign_exception
  extern struct Exception_Data Foreign_Exception;
*************** exception_class_eq (const _GNAT_Exceptio
*** 928,934 ****
  /* Return how CHOICE matches PROPAGATED_EXCEPTION.  */
  
  static enum action_kind
! is_handled_by (_Unwind_Ptr choice, _GNAT_Exception *propagated_exception)
  {
    /* All others choice match everything.  */
    if (choice == GNAT_ALL_OTHERS)
--- 924,930 ----
  /* Return how CHOICE matches PROPAGATED_EXCEPTION.  */
  
  static enum action_kind
! is_handled_by (Exception_Id choice, _GNAT_Exception *propagated_exception)
  {
    /* All others choice match everything.  */
    if (choice == GNAT_ALL_OTHERS)
*************** is_handled_by (_Unwind_Ptr choice, _GNAT
*** 937,950 ****
    /* GNAT exception occurrence.  */
    if (exception_class_eq (propagated_exception, GNAT_EXCEPTION_CLASS))
      {
-       /* Pointer to the GNAT exception data corresponding to the propagated
-          occurrence.  */
-       _Unwind_Ptr E = (_Unwind_Ptr) EID_For (propagated_exception);
- 
        if (choice == GNAT_UNHANDLED_OTHERS)
  	return unhandler;
  
!       E = (_Unwind_Ptr) EID_For (propagated_exception);
  
        /* Base matching rules: An exception data (id) matches itself, "when
           all_others" matches anything and "when others" matches anything
--- 933,942 ----
    /* GNAT exception occurrence.  */
    if (exception_class_eq (propagated_exception, GNAT_EXCEPTION_CLASS))
      {
        if (choice == GNAT_UNHANDLED_OTHERS)
  	return unhandler;
  
!       Exception_Id E = EID_For (propagated_exception);
  
        /* Base matching rules: An exception data (id) matches itself, "when
           all_others" matches anything and "when others" matches anything
*************** is_handled_by (_Unwind_Ptr choice, _GNAT
*** 960,966 ****
    if (choice == GNAT_ALL_OTHERS
        || choice == GNAT_OTHERS
  #ifndef CERT
!       || choice == (_Unwind_Ptr) &Foreign_Exception
  #endif
        )
      return handler;
--- 952,958 ----
    if (choice == GNAT_ALL_OTHERS
        || choice == GNAT_OTHERS
  #ifndef CERT
!       || choice == &Foreign_Exception
  #endif
        )
      return handler;
*************** get_action_description_for (_Unwind_Ptr
*** 1057,1081 ****
  	  /* Positive filters are for regular handlers.  */
  	  else if (ar_filter > 0)
  	    {
!               /* Do not catch an exception if the _UA_FORCE_UNWIND flag is
!                  passed (to follow the ABI).  */
!               if (!(uw_phase & _UA_FORCE_UNWIND))
!                 {
  		  enum action_kind act;
  
!                   /* See if the filter we have is for an exception which
!                      matches the one we are propagating.  */
!                   _Unwind_Ptr choice =
! 		    get_ttype_entry_for (region, ar_filter);
  
  		  act = is_handled_by (choice, gnat_exception);
!                   if (act != nothing)
!                     {
  		      action->kind = act;
!                       action->ttype_filter = ar_filter;
!                       return;
!                     }
!                 }
  	    }
  
  	  /* Negative filter values are for C++ exception specifications.
--- 1049,1073 ----
  	  /* Positive filters are for regular handlers.  */
  	  else if (ar_filter > 0)
  	    {
! 	      /* Do not catch an exception if the _UA_FORCE_UNWIND flag is
! 		 passed (to follow the ABI).  */
! 	      if (!(uw_phase & _UA_FORCE_UNWIND))
! 		{
  		  enum action_kind act;
  
! 		  /* See if the filter we have is for an exception which
! 		     matches the one we are propagating.  */
! 		  Exception_Id choice
! 		    = (Exception_Id) get_ttype_entry_for (region, ar_filter);
  
  		  act = is_handled_by (choice, gnat_exception);
! 		  if (act != nothing)
! 		    {
  		      action->kind = act;
! 		      action->ttype_filter = ar_filter;
! 		      return;
! 		    }
! 		}
  	    }
  
  	  /* Negative filter values are for C++ exception specifications.
*************** __gnat_personality_seh0 (PEXCEPTION_RECO
*** 1612,1618 ****
  
    return
      _GCC_specific_handler (ms_exc, this_frame, ms_orig_context, ms_disp,
! 			   __gnat_personality_imp);
  }
  
  /* Define __gnat_personality_v0 for convenience */
--- 1604,1610 ----
  
    return
      _GCC_specific_handler (ms_exc, this_frame, ms_orig_context, ms_disp,
! 			   PERSONALITY_FUNCTION);
  }
  
  /* Define __gnat_personality_v0 for convenience */
diff -Nrcpad gcc-11.3.0/gcc/ada/raise.c gcc-12.1.0/gcc/ada/raise.c
*** gcc-11.3.0/gcc/ada/raise.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/raise.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *             Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *             Copyright (C) 1992-2022, 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- *
*************** __gnat_unhandled_terminate (void)
*** 62,128 ****
  #ifndef IN_RTS
  int
  __gnat_backtrace (void **array ATTRIBUTE_UNUSED,
!                   int size ATTRIBUTE_UNUSED,
!                   void *exclude_min ATTRIBUTE_UNUSED,
!                   void *exclude_max ATTRIBUTE_UNUSED,
!                   int skip_frames ATTRIBUTE_UNUSED)
  {
    return 0;
  }
- 
- void
- __gnat_eh_personality (void)
- {
-   abort ();
- }
- 
- void
- __gnat_rcheck_04 (void)
- {
-   abort ();
- }
- 
- void
- __gnat_rcheck_10 (void)
- {
-   abort ();
- }
- 
- void
- __gnat_rcheck_19 (void)
- {
-   abort ();
- }
- 
- void
- __gnat_rcheck_20 (void)
- {
-   abort ();
- }
- 
- void
- __gnat_rcheck_21 (void)
- {
-   abort ();
- }
- 
- void
- __gnat_rcheck_30 (void)
- {
-   abort ();
- }
- 
- void
- __gnat_rcheck_31 (void)
- {
-   abort ();
- }
- 
- void
- __gnat_rcheck_32 (void)
- {
-   abort ();
- }
  #endif
  #ifdef __cplusplus
  }
--- 62,74 ----
  #ifndef IN_RTS
  int
  __gnat_backtrace (void **array ATTRIBUTE_UNUSED,
! 		  int size ATTRIBUTE_UNUSED,
! 		  void *exclude_min ATTRIBUTE_UNUSED,
! 		  void *exclude_max ATTRIBUTE_UNUSED,
! 		  int skip_frames ATTRIBUTE_UNUSED)
  {
    return 0;
  }
  #endif
  #ifdef __cplusplus
  }
diff -Nrcpad gcc-11.3.0/gcc/ada/raise.h gcc-12.1.0/gcc/ada/raise.h
*** gcc-11.3.0/gcc/ada/raise.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/raise.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
*************** struct Exception_Data
*** 40,48 ****
    char Not_Handled_By_Others;
    char Lang;
    int Name_Length;
!   char *Full_Name;
!   char *Htable_Ptr;
!   void *Foreign_Data;
    void (*Raise_Hook)(void);
  };
  
--- 40,48 ----
    char Not_Handled_By_Others;
    char Lang;
    int Name_Length;
!   __UINTPTR_TYPE__ Full_Name;
!   void *HTable_Ptr;
!   __UINTPTR_TYPE__ Foreign_Data;
    void (*Raise_Hook)(void);
  };
  
*************** typedef struct Exception_Data *Exception
*** 50,62 ****
  
  struct Exception_Occurrence;
  
- extern void _gnat_builtin_longjmp	(void *, int);
  extern void __gnat_unhandled_terminate	(void);
  extern void *__gnat_malloc		(__SIZE_TYPE__);
  extern void __gnat_free			(void *);
  extern void *__gnat_realloc		(void *, __SIZE_TYPE__);
  extern void __gnat_finalize		(void);
- extern void set_gnat_exit_status	(int);
  extern void __gnat_set_globals		(void);
  extern void __gnat_initialize		(void *);
  extern void __gnat_init_float		(void);
--- 50,60 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/repinfo-input.adb gcc-12.1.0/gcc/ada/repinfo-input.adb
*** gcc-11.3.0/gcc/ada/repinfo-input.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/repinfo-input.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2018-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2018-2022, 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- --
*************** package body Repinfo.Input is
*** 38,44 ****
     --  Value for Storage_Unit
  
     type JSON_Entity_Kind is (JE_Record_Type, JE_Array_Type, JE_Other);
!    --  Kind of an entiy
  
     type JSON_Entity_Node (Kind : JSON_Entity_Kind := JE_Other) is record
        Esize   : Node_Ref_Or_Val;
--- 38,44 ----
     --  Value for Storage_Unit
  
     type JSON_Entity_Kind is (JE_Record_Type, JE_Array_Type, JE_Other);
!    --  Kind of an entity
  
     type JSON_Entity_Node (Kind : JSON_Entity_Kind := JE_Other) is record
        Esize   : Node_Ref_Or_Val;
*************** package body Repinfo.Input is
*** 215,221 ****
           J_COMMA,
           J_COLON,
           J_EOF);
!       --  JSON Token kind. Note that in ECMA 404 there is no notion of integer.
        --  Only numbers are supported. In our implementation we return J_INTEGER
        --  if there is no decimal part in the number. The semantic is that this
        --  is a J_NUMBER token that might be represented as an integer. Special
--- 215,221 ----
           J_COMMA,
           J_COLON,
           J_EOF);
!       --  JSON token kind. Note that in ECMA 404 there is no notion of integer.
        --  Only numbers are supported. In our implementation we return J_INTEGER
        --  if there is no decimal part in the number. The semantic is that this
        --  is a J_NUMBER token that might be represented as an integer. Special
*************** package body Repinfo.Input is
*** 288,294 ****
        ----------------------
  
        function Decode_Integer (Lo, Hi : Text_Ptr) return Uint is
!          Len  : constant Nat := Int (Hi) - Int (Lo) + 1;
  
        begin
           --  Decode up to 9 characters manually, otherwise call into Uint
--- 288,294 ----
        ----------------------
  
        function Decode_Integer (Lo, Hi : Text_Ptr) return Uint is
!          Len : constant Nat := Int (Hi) - Int (Lo) + 1;
  
        begin
           --  Decode up to 9 characters manually, otherwise call into Uint
*************** package body Repinfo.Input is
*** 776,782 ****
              --  Compute Component_Bit_Offset from Position and First_Bit,
              --  either symbolically or literally depending on Position.
  
!             if Position = No_Uint or else First_Bit = No_Uint then
                 Error ("bit offset expected");
              end if;
  
--- 776,782 ----
              --  Compute Component_Bit_Offset from Position and First_Bit,
              --  either symbolically or literally depending on Position.
  
!             if No (Position) or else No (First_Bit) then
                 Error ("bit offset expected");
              end if;
  
*************** package body Repinfo.Input is
*** 1219,1225 ****
           Var         : JSON_Variant_Node;
  
        begin
!          --  Read a non-empty array of components
  
           Read_Token_And_Error (J_ARRAY, Token_Start, Token_End);
  
--- 1219,1225 ----
           Var         : JSON_Variant_Node;
  
        begin
!          --  Read a nonempty array of components
  
           Read_Token_And_Error (J_ARRAY, Token_Start, Token_End);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/repinfo-input.ads gcc-12.1.0/gcc/ada/repinfo-input.ads
*** gcc-11.3.0/gcc/ada/repinfo-input.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/repinfo-input.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2018-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2018-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/repinfo.adb gcc-12.1.0/gcc/ada/repinfo.adb
*** gcc-11.3.0/gcc/ada/repinfo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/repinfo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
***************
*** 24,48 ****
  ------------------------------------------------------------------------------
  
  with Alloc;
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Output;   use Output;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Eval; use Sem_Eval;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stringt;  use Stringt;
  with Table;
  with Ttypes;
! with Uname;    use Uname;
! with Urealp;   use Urealp;
  
  with Ada.Unchecked_Conversion;
  
--- 24,54 ----
  ------------------------------------------------------------------------------
  
  with Alloc;
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Output;         use Output;
! with Osint.C;        use Osint.C;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stringt;        use Stringt;
  with Table;
  with Ttypes;
! with Uname;          use Uname;
! with Urealp;         use Urealp;
  
  with Ada.Unchecked_Conversion;
  
*************** package body Repinfo is
*** 362,420 ****
           null;
  
        else
!          --  If Esize and RM_Size are the same, list as Size. This is a common
!          --  case, which we may as well list in simple form.
  
!          if Esize (Ent) = RM_Size (Ent) then
!             if List_Representation_Info_To_JSON then
!                Write_Str ("  ""Size"": ");
!                Write_Val (Esize (Ent));
!                Write_Line (",");
!             else
!                Write_Str ("for ");
!                List_Name (Ent);
!                Write_Str ("'Size use ");
!                Write_Val (Esize (Ent));
!                Write_Line (";");
!             end if;
  
!          --  Otherwise list size values separately
  
!          else
!             if List_Representation_Info_To_JSON then
!                Write_Str ("  ""Object_Size"": ");
!                Write_Val (Esize (Ent));
!                Write_Line (",");
  
!                Write_Str ("  ""Value_Size"": ");
!                Write_Val (RM_Size (Ent));
!                Write_Line (",");
  
!             else
!                Write_Str ("for ");
!                List_Name (Ent);
!                Write_Str ("'Object_Size use ");
!                Write_Val (Esize (Ent));
!                Write_Line (";");
  
!                Write_Str ("for ");
!                List_Name (Ent);
!                Write_Str ("'Value_Size use ");
!                Write_Val (RM_Size (Ent));
!                Write_Line (";");
              end if;
           end if;
        end if;
  
!       if List_Representation_Info_To_JSON then
!          Write_Str ("  ""Alignment"": ");
!          Write_Val (Alignment (Ent));
        else
!          Write_Str ("for ");
!          List_Name (Ent);
!          Write_Str ("'Alignment use ");
!          Write_Val (Alignment (Ent));
!          Write_Line (";");
        end if;
     end List_Common_Type_Info;
  
--- 368,440 ----
           null;
  
        else
!          if Known_Esize (Ent) and then Known_RM_Size (Ent) then
!             --  If Esize and RM_Size are the same, list as Size. This is a
!             --  common case, which we may as well list in simple form.
  
!             if Esize (Ent) = RM_Size (Ent) then
!                if List_Representation_Info_To_JSON then
!                   Write_Str ("  ""Size"": ");
!                   Write_Val (Esize (Ent));
!                   Write_Line (",");
!                else
!                   Write_Str ("for ");
!                   List_Name (Ent);
!                   Write_Str ("'Size use ");
!                   Write_Val (Esize (Ent));
!                   Write_Line (";");
!                end if;
  
!             --  Otherwise list size values separately
  
!             else
!                if List_Representation_Info_To_JSON then
!                   Write_Str ("  ""Object_Size"": ");
!                   Write_Val (Esize (Ent));
!                   Write_Line (",");
  
!                   Write_Str ("  ""Value_Size"": ");
!                   Write_Val (RM_Size (Ent));
!                   Write_Line (",");
  
!                else
!                   Write_Str ("for ");
!                   List_Name (Ent);
!                   Write_Str ("'Object_Size use ");
!                   Write_Val (Esize (Ent));
!                   Write_Line (";");
  
!                   Write_Str ("for ");
!                   List_Name (Ent);
!                   Write_Str ("'Value_Size use ");
!                   Write_Val (RM_Size (Ent));
!                   Write_Line (";");
!                end if;
              end if;
           end if;
        end if;
  
!       if Known_Alignment (Ent) then
!          if List_Representation_Info_To_JSON then
!             Write_Str ("  ""Alignment"": ");
!             Write_Val (Alignment (Ent));
!          else
!             Write_Str ("for ");
!             List_Name (Ent);
!             Write_Str ("'Alignment use ");
!             Write_Val (Alignment (Ent));
!             Write_Line (";");
!          end if;
! 
!       --  Alignment is not always set for task, protected, and class-wide
!       --  types. Representation aspects are not computed for types in a
!       --  generic unit.
! 
        else
!          pragma Assert
!            (Is_Concurrent_Type (Ent) or else
!               Is_Class_Wide_Type (Ent) or else
!               Sem_Util.In_Generic_Scope (Ent));
        end if;
     end List_Common_Type_Info;
  
*************** package body Repinfo is
*** 471,479 ****
           --  been produced when listing the enclosing scope.
  
           if List_Representation_Info_Mechanisms
!            and then (Is_Subprogram (Ent)
!                       or else Ekind (Ent) = E_Entry
!                       or else Ekind (Ent) = E_Entry_Family)
             and then not In_Subprogram
           then
              List_Subprogram_Info (Ent);
--- 491,497 ----
           --  been produced when listing the enclosing scope.
  
           if List_Representation_Info_Mechanisms
!            and then Is_Subprogram_Or_Entry (Ent)
             and then not In_Subprogram
           then
              List_Subprogram_Info (Ent);
*************** package body Repinfo is
*** 521,532 ****
                 elsif Is_Record_Type (E) then
                    if List_Representation_Info >= 1 then
                       List_Record_Info (E, Bytes_Big_Endian);
-                   end if;
  
!                   --  Recurse into entities local to a record type
  
!                   if List_Representation_Info = 4 then
!                      List_Entities (E, Bytes_Big_Endian, False);
                    end if;
  
                 elsif Is_Array_Type (E) then
--- 539,550 ----
                 elsif Is_Record_Type (E) then
                    if List_Representation_Info >= 1 then
                       List_Record_Info (E, Bytes_Big_Endian);
  
!                      --  Recurse into entities local to a record type
  
!                      if List_Representation_Info = 4 then
!                         List_Entities (E, Bytes_Big_Endian, False);
!                      end if;
                    end if;
  
                 elsif Is_Array_Type (E) then
*************** package body Repinfo is
*** 550,561 ****
                    end if;
                 end if;
  
!                --  Recurse into nested package, but not if they are package
!                --  renamings (in particular renamings of the enclosing package,
!                --  as for some Java bindings and for generic instances).
  
                 if Ekind (E) = E_Package then
!                   if No (Renamed_Object (E)) then
                       List_Entities (E, Bytes_Big_Endian);
                    end if;
  
--- 568,581 ----
                    end if;
                 end if;
  
!                --  Recurse into nested package, but not child packages, and not
!                --  nested package renamings (in particular renamings of the
!                --  enclosing package, as for some Java bindings and for generic
!                --  instances).
  
                 if Ekind (E) = E_Package then
!                   if No (Renamed_Entity (E)) and then not Is_Child_Unit (E)
!                   then
                       List_Entities (E, Bytes_Big_Endian);
                    end if;
  
*************** package body Repinfo is
*** 795,801 ****
     --  Start of processing for List_GCC_Expression
  
     begin
!       if U = No_Uint then
           Write_Unknown_Val;
        else
           Print_Expr (U);
--- 815,821 ----
     --  Start of processing for List_GCC_Expression
  
     begin
!       if No (U) then
           Write_Unknown_Val;
        else
           Print_Expr (U);
*************** package body Repinfo is
*** 886,891 ****
--- 906,918 ----
  
     procedure List_Object_Info (Ent : Entity_Id) is
     begin
+       --  The information has not been computed in a generic unit, so don't try
+       --  to print it.
+ 
+       if Sem_Util.In_Generic_Scope (Ent) then
+          return;
+       end if;
+ 
        Write_Separator;
  
        if List_Representation_Info_To_JSON then
*************** package body Repinfo is
*** 959,968 ****
  
        procedure List_Structural_Record_Layout
          (Ent       : Entity_Id;
!          Outer_Ent : Entity_Id;
           Variant   : Node_Id := Empty;
           Indent    : Natural := 0);
!       --  Internal recursive procedure to display the structural layout
  
        Incomplete_Layout : exception;
        --  Exception raised if the layout is incomplete in -gnatc mode
--- 986,1000 ----
  
        procedure List_Structural_Record_Layout
          (Ent       : Entity_Id;
!          Ext_Ent   : Entity_Id;
!          Ext_Level : Nat := 0;
           Variant   : Node_Id := Empty;
           Indent    : Natural := 0);
!       --  Internal recursive procedure to display the structural layout.
!       --  If Ext_Ent is not equal to Ent, it is an extension of Ent and
!       --  Ext_Level is the number of successive extensions between them.
!       --  If Variant is present, it's for a variant in the variant part
!       --  instead of the common part of Ent. Indent is the indentation.
  
        Incomplete_Layout : exception;
        --  Exception raised if the layout is incomplete in -gnatc mode
*************** package body Repinfo is
*** 1027,1033 ****
                    --  whose position is not specified have starting normalized
                    --  bit position of zero.
  
!                   if Unknown_Normalized_First_Bit (Comp)
                      and then not Is_Packed (Ent)
                    then
                       Set_Normalized_First_Bit (Comp, Uint_0);
--- 1059,1065 ----
                    --  whose position is not specified have starting normalized
                    --  bit position of zero.
  
!                   if not Known_Normalized_First_Bit (Comp)
                      and then not Is_Packed (Ent)
                    then
                       Set_Normalized_First_Bit (Comp, Uint_0);
*************** package body Repinfo is
*** 1040,1046 ****
  
                    --  Complete annotation in case not done
  
!                   if Unknown_Normalized_First_Bit (Comp) then
                       Set_Normalized_Position  (Comp, Npos);
                       Set_Normalized_First_Bit (Comp, Fbit);
                    end if;
--- 1072,1078 ----
  
                    --  Complete annotation in case not done
  
!                   if not Known_Normalized_First_Bit (Comp) then
                       Set_Normalized_Position  (Comp, Npos);
                       Set_Normalized_First_Bit (Comp, Fbit);
                    end if;
*************** package body Repinfo is
*** 1091,1097 ****
           Npos  : constant Uint := Normalized_Position (Ent);
           Fbit  : constant Uint := Normalized_First_Bit (Ent);
           Spos  : Uint;
!          Sbit  : Uint;
           Lbit  : Uint;
  
        begin
--- 1123,1129 ----
           Npos  : constant Uint := Normalized_Position (Ent);
           Fbit  : constant Uint := Normalized_First_Bit (Ent);
           Spos  : Uint;
!          Sbit  : Uint := No_Uint;
           Lbit  : Uint;
  
        begin
*************** package body Repinfo is
*** 1155,1167 ****
              Write_Str (" range  ");
           end if;
  
!          Sbit := Starting_First_Bit + Fbit;
  
!          if Sbit >= SSU then
!             Sbit := Sbit - SSU;
!          end if;
  
!          UI_Write (Sbit, Decimal);
  
           if List_Representation_Info_To_JSON then
              Write_Line (", ");
--- 1187,1203 ----
              Write_Str (" range  ");
           end if;
  
!          if Known_Static_Normalized_First_Bit (Ent) then
!             Sbit := Starting_First_Bit + Fbit;
  
!             if Sbit >= SSU then
!                Sbit := Sbit - SSU;
!             end if;
  
!             UI_Write (Sbit, Decimal);
!          else
!             Write_Unknown_Val;
!          end if;
  
           if List_Representation_Info_To_JSON then
              Write_Line (", ");
*************** package body Repinfo is
*** 1171,1183 ****
              Write_Str (" .. ");
           end if;
  
!          --  Allowing Uint_0 here is an annoying special case. Really this
!          --  should be a fine Esize value but currently it means unknown,
!          --  except that we know after gigi has back annotated that a size
!          --  of zero is real, since otherwise gigi back annotates using
!          --  No_Uint as the value to indicate unknown.
! 
!          if (Esize (Ent) = Uint_0 or else Known_Static_Esize (Ent))
             and then Known_Static_Normalized_First_Bit (Ent)
           then
              Lbit := Sbit + Esiz - 1;
--- 1207,1213 ----
              Write_Str (" .. ");
           end if;
  
!          if Known_Static_Esize (Ent)
             and then Known_Static_Normalized_First_Bit (Ent)
           then
              Lbit := Sbit + Esiz - 1;
*************** package body Repinfo is
*** 1192,1205 ****
                 UI_Write (Lbit, Decimal);
              end if;
  
!          --  The test for Esize (Ent) not Uint_0 here is an annoying special
!          --  case. Officially a value of zero for Esize means unknown, but
!          --  here we use the fact that we know that gigi annotates Esize with
!          --  No_Uint, not Uint_0. Really everyone should use No_Uint???
! 
!          elsif List_Representation_Info < 3
!            or else (Esize (Ent) /= Uint_0 and then Unknown_Esize (Ent))
!          then
              Write_Unknown_Val;
  
           --  List_Representation >= 3 and Known_Esize (Ent)
--- 1222,1228 ----
                 UI_Write (Lbit, Decimal);
              end if;
  
!          elsif List_Representation_Info < 3 or else not Known_Esize (Ent) then
              Write_Unknown_Val;
  
           --  List_Representation >= 3 and Known_Esize (Ent)
*************** package body Repinfo is
*** 1315,1321 ****
                    end if;
                 end if;
  
!                List_Component_Layout (Comp,
                   Starting_Position, Starting_First_Bit, Prefix);
              end;
  
--- 1338,1349 ----
                    end if;
                 end if;
  
!                --  The Parent_Subtype in an extension is not back-annotated
! 
!                List_Component_Layout (
!                  (if Known_Normalized_Position (Comp)
!                   then Comp
!                   else Original_Record_Component (Comp)),
                   Starting_Position, Starting_First_Bit, Prefix);
              end;
  
*************** package body Repinfo is
*** 1330,1344 ****
  
        procedure List_Structural_Record_Layout
          (Ent       : Entity_Id;
!          Outer_Ent : Entity_Id;
           Variant   : Node_Id := Empty;
           Indent    : Natural := 0)
        is
           function Derived_Discriminant (Disc : Entity_Id) return Entity_Id;
!          --  This function assumes that Outer_Ent is an extension of Ent.
           --  Disc is a discriminant of Ent that does not itself constrain a
           --  discriminant of the parent type of Ent. Return the discriminant
!          --  of Outer_Ent that ultimately constrains Disc, if any.
  
           ----------------------------
           --  Derived_Discriminant  --
--- 1358,1373 ----
  
        procedure List_Structural_Record_Layout
          (Ent       : Entity_Id;
!          Ext_Ent   : Entity_Id;
!          Ext_Level : Nat := 0;
           Variant   : Node_Id := Empty;
           Indent    : Natural := 0)
        is
           function Derived_Discriminant (Disc : Entity_Id) return Entity_Id;
!          --  This function assumes that Ext_Ent is an extension of Ent.
           --  Disc is a discriminant of Ent that does not itself constrain a
           --  discriminant of the parent type of Ent. Return the discriminant
!          --  of Ext_Ent that ultimately constrains Disc, if any.
  
           ----------------------------
           --  Derived_Discriminant  --
*************** package body Repinfo is
*** 1349,1355 ****
              Derived_Disc : Entity_Id;
  
           begin
!             Derived_Disc := First_Discriminant (Outer_Ent);
  
              --  Loop over the discriminants of the extension
  
--- 1378,1384 ----
              Derived_Disc : Entity_Id;
  
           begin
!             Derived_Disc := First_Discriminant (Ext_Ent);
  
              --  Loop over the discriminants of the extension
  
*************** package body Repinfo is
*** 1376,1382 ****
                 Next_Discriminant (Derived_Disc);
              end loop;
  
!             --  Disc is not constrained by a discriminant of Outer_Ent
  
              return Empty;
           end Derived_Discriminant;
--- 1405,1411 ----
                 Next_Discriminant (Derived_Disc);
              end loop;
  
!             --  Disc is not constrained by a discriminant of Ext_Ent
  
              return Empty;
           end Derived_Discriminant;
*************** package body Repinfo is
*** 1428,1439 ****
                       pragma Assert (Present (Parent_Type));
                    end if;
  
!                   Parent_Type := Base_Type (Parent_Type);
!                   if not In_Extended_Main_Source_Unit (Parent_Type) then
!                      raise Not_In_Extended_Main;
                    end if;
  
-                   List_Structural_Record_Layout (Parent_Type, Outer_Ent);
                    First := False;
  
                    if Present (Record_Extension_Part (Definition)) then
--- 1457,1477 ----
                       pragma Assert (Present (Parent_Type));
                    end if;
  
!                   --  Do not list variants if one of them has been selected
! 
!                   if Has_Static_Discriminants (Parent_Type) then
!                      List_Record_Layout (Parent_Type);
! 
!                   else
!                      Parent_Type := Base_Type (Parent_Type);
!                      if not In_Extended_Main_Source_Unit (Parent_Type) then
!                         raise Not_In_Extended_Main;
!                      end if;
! 
!                      List_Structural_Record_Layout
!                        (Parent_Type, Ext_Ent, Ext_Level + 1);
                    end if;
  
                    First := False;
  
                    if Present (Record_Extension_Part (Definition)) then
*************** package body Repinfo is
*** 1463,1469 ****
                       --  If this is the parent type of an extension, retrieve
                       --  the derived discriminant from the extension, if any.
  
!                      if Ent /= Outer_Ent then
                          Listed_Disc := Derived_Discriminant (Disc);
  
                          if No (Listed_Disc) then
--- 1501,1507 ----
                       --  If this is the parent type of an extension, retrieve
                       --  the derived discriminant from the extension, if any.
  
!                      if Ent /= Ext_Ent then
                          Listed_Disc := Derived_Discriminant (Disc);
  
                          if No (Listed_Disc) then
*************** package body Repinfo is
*** 1540,1546 ****
           Spaces (Indent);
           Write_Line ("  ],");
           Spaces (Indent);
!          Write_Str ("  ""variant"" : [");
  
           --  Otherwise we recurse on each variant
  
--- 1578,1588 ----
           Spaces (Indent);
           Write_Line ("  ],");
           Spaces (Indent);
!          Write_Str ("  """);
!          for J in 1 .. Ext_Level loop
!             Write_Str ("parent_");
!          end loop;
!          Write_Str ("variant"" : [");
  
           --  Otherwise we recurse on each variant
  
*************** package body Repinfo is
*** 1563,1569 ****
              Spaces (Indent);
              Write_Str ("      ""record"": [");
  
!             List_Structural_Record_Layout (Ent, Outer_Ent, Var, Indent + 4);
  
              Write_Eol;
              Spaces (Indent);
--- 1605,1612 ----
              Spaces (Indent);
              Write_Str ("      ""record"": [");
  
!             List_Structural_Record_Layout
!               (Ent, Ext_Ent, Ext_Level, Var, Indent + 4);
  
              Write_Eol;
              Spaces (Indent);
*************** package body Repinfo is
*** 1699,1705 ****
                 --  List representation information to file
  
                 else
!                   Create_Repinfo_File_Access.all
                      (Get_Name_String (File_Name (Source_Index (U))));
                    Set_Special_Output (Write_Info_Line'Access);
                    if List_Representation_Info_To_JSON then
--- 1742,1748 ----
                 --  List representation information to file
  
                 else
!                   Create_Repinfo_File
                      (Get_Name_String (File_Name (Source_Index (U))));
                    Set_Special_Output (Write_Info_Line'Access);
                    if List_Representation_Info_To_JSON then
*************** package body Repinfo is
*** 1711,1717 ****
                       Write_Line ("]");
                    end if;
                    Cancel_Special_Output;
!                   Close_Repinfo_File_Access.all;
                 end if;
              end if;
           end loop;
--- 1754,1760 ----
                       Write_Line ("]");
                    end if;
                    Cancel_Special_Output;
!                   Close_Repinfo_File;
                 end if;
              end if;
           end loop;
*************** package body Repinfo is
*** 2026,2032 ****
           if List_Representation_Info_To_JSON then
              Write_Line (",");
              Write_Str ("  ""Small"": ");
!             UR_Write (Small_Value (Ent));
           else
              Write_Str ("for ");
              List_Name (Ent);
--- 2069,2075 ----
           if List_Representation_Info_To_JSON then
              Write_Line (",");
              Write_Str ("  ""Small"": ");
!             UR_Write_To_JSON (Small_Value (Ent));
           else
              Write_Str ("for ");
              List_Name (Ent);
*************** package body Repinfo is
*** 2048,2056 ****
                 if List_Representation_Info_To_JSON then
                    Write_Line (",");
                    Write_Str ("  ""Range"": [ ");
!                   UR_Write (Realval (Low_Bound (R)));
                    Write_Str (", ");
!                   UR_Write (Realval (High_Bound (R)));
                    Write_Str (" ]");
                 else
                    Write_Str ("for ");
--- 2091,2099 ----
                 if List_Representation_Info_To_JSON then
                    Write_Line (",");
                    Write_Str ("  ""Range"": [ ");
!                   UR_Write_To_JSON (Realval (Low_Bound (R)));
                    Write_Str (", ");
!                   UR_Write_To_JSON (Realval (High_Bound (R)));
                    Write_Str (" ]");
                 else
                    Write_Str ("for ");
*************** package body Repinfo is
*** 2079,2085 ****
  
     function Rep_Not_Constant (Val : Node_Ref_Or_Val) return Boolean is
     begin
!       if Val = No_Uint or else Val < 0 then
           return True;
        else
           return False;
--- 2122,2128 ----
  
     function Rep_Not_Constant (Val : Node_Ref_Or_Val) return Boolean is
     begin
!       if No (Val) or else Val < 0 then
           return True;
        else
           return False;
*************** package body Repinfo is
*** 2092,2098 ****
  
     function Rep_Value (Val : Node_Ref_Or_Val; D : Discrim_List) return Uint is
  
!       function B (Val : Boolean) return Uint;
        --  Returns Uint_0 for False, Uint_1 for True
  
        function T (Val : Node_Ref_Or_Val) return Boolean;
--- 2135,2141 ----
  
     function Rep_Value (Val : Node_Ref_Or_Val; D : Discrim_List) return Uint is
  
!       function B (Val : Boolean) return Ubool;
        --  Returns Uint_0 for False, Uint_1 for True
  
        function T (Val : Node_Ref_Or_Val) return Boolean;
*************** package body Repinfo is
*** 2113,2119 ****
        -- B --
        -------
  
!       function B (Val : Boolean) return Uint is
        begin
           if Val then
              return Uint_1;
--- 2156,2162 ----
        -- B --
        -------
  
!       function B (Val : Boolean) return Ubool is
        begin
           if Val then
              return Uint_1;
*************** package body Repinfo is
*** 2278,2284 ****
     --  Start of processing for Rep_Value
  
     begin
!       if Val = No_Uint then
           return No_Uint;
  
        else
--- 2321,2327 ----
     --  Start of processing for Rep_Value
  
     begin
!       if No (Val) then
           return No_Uint;
  
        else
*************** package body Repinfo is
*** 2303,2309 ****
  
     procedure Write_Info_Line (S : String) is
     begin
!       Write_Repinfo_Line_Access.all (S (S'First .. S'Last - 1));
     end Write_Info_Line;
  
     ---------------------
--- 2346,2352 ----
  
     procedure Write_Info_Line (S : String) is
     begin
!       Write_Repinfo_Line (S (S'First .. S'Last - 1));
     end Write_Info_Line;
  
     ---------------------
*************** package body Repinfo is
*** 2364,2370 ****
     procedure Write_Val (Val : Node_Ref_Or_Val; Paren : Boolean := False) is
     begin
        if Rep_Not_Constant (Val) then
!          if List_Representation_Info < 3 or else Val = No_Uint then
              Write_Unknown_Val;
  
           else
--- 2407,2413 ----
     procedure Write_Val (Val : Node_Ref_Or_Val; Paren : Boolean := False) is
     begin
        if Rep_Not_Constant (Val) then
!          if List_Representation_Info < 3 or else No (Val) then
              Write_Unknown_Val;
  
           else
diff -Nrcpad gcc-11.3.0/gcc/ada/repinfo.ads gcc-12.1.0/gcc/ada/repinfo.ads
*** gcc-11.3.0/gcc/ada/repinfo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/repinfo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
*************** package Repinfo is
*** 118,129 ****
     --  this field is done only in -gnatR3 mode, and in other modes, the value
     --  is set to Uint_Minus_1.
  
!    subtype Node_Ref is Uint;
     --  Subtype used for negative Uint values used to represent nodes
  
     subtype Node_Ref_Or_Val is Uint;
!    --  Subtype used for values that can either be a Node_Ref (negative)
!    --  or a value (non-negative)
  
     type TCode is range 0 .. 27;
     --  Type used on Ada side to represent DEFTREECODE values defined in
--- 118,129 ----
     --  this field is done only in -gnatR3 mode, and in other modes, the value
     --  is set to Uint_Minus_1.
  
!    subtype Node_Ref is Unegative;
     --  Subtype used for negative Uint values used to represent nodes
  
     subtype Node_Ref_Or_Val is Uint;
!    --  Subtype used for values that can be a Node_Ref (negative) or a value
!    --  (non-negative) or No_Uint.
  
     type TCode is range 0 .. 27;
     --  Type used on Ada side to represent DEFTREECODE values defined in
*************** package Repinfo is
*** 189,195 ****
     --    "name"                 :  string
     --    "location"             :  string
     --    "record"               :  array of components
!    --    "variant"              :  array of variants
     --    "formal"               :  array of formal parameters
     --    "mechanism"            :  string
     --    "Size"                 :  numerical expression
--- 189,195 ----
     --    "name"                 :  string
     --    "location"             :  string
     --    "record"               :  array of components
!    --    "[parent_]*variant"    :  array of variants
     --    "formal"               :  array of formal parameters
     --    "mechanism"            :  string
     --    "Size"                 :  numerical expression
*************** package Repinfo is
*** 209,216 ****
     --    fully qualified Ada name. The value of "location" is the expanded
     --    chain of instantiation locations that contains the entity.
     --    "record" is present for every record type and its value is the list of
!    --    components. "variant" is present only if the record type has a variant
!    --    part and its value is the list of variants.
     --    "formal" is present for every subprogram and entry, and its value is
     --    the list of formal parameters. "mechanism" is present for functions
     --    only and its value is the return mechanim.
--- 209,217 ----
     --    fully qualified Ada name. The value of "location" is the expanded
     --    chain of instantiation locations that contains the entity.
     --    "record" is present for every record type and its value is the list of
!    --    components. "[parent_]*variant" is present only if the record type, or
!    --    one of its ancestors (parent, grand-parent, etc) if it's an extension,
!    --    has a variant part and its value is the list of variants.
     --    "formal" is present for every subprogram and entry, and its value is
     --    the list of formal parameters. "mechanism" is present for functions
     --    only and its value is the return mechanim.
*************** package Repinfo is
*** 305,311 ****
     --  In the case of components, if the location of the component is static,
     --  then all four fields (Component_Bit_Offset, Normalized_Position, Esize,
     --  and Normalized_First_Bit) are set to appropriate values. In the case of
!    --  a non-static component location, Component_Bit_Offset is not used and
     --  is left set to Unknown. Normalized_Position and Normalized_First_Bit
     --  are set appropriately.
  
--- 306,312 ----
     --  In the case of components, if the location of the component is static,
     --  then all four fields (Component_Bit_Offset, Normalized_Position, Esize,
     --  and Normalized_First_Bit) are set to appropriate values. In the case of
!    --  a nonstatic component location, Component_Bit_Offset is not used and
     --  is left set to Unknown. Normalized_Position and Normalized_First_Bit
     --  are set appropriately.
  
diff -Nrcpad gcc-11.3.0/gcc/ada/repinfo.h gcc-12.1.0/gcc/ada/repinfo.h
*** gcc-11.3.0/gcc/ada/repinfo.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/repinfo.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1999-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1999-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/restrict.adb gcc-12.1.0/gcc/ada/restrict.adb
*** gcc-11.3.0/gcc/ada/restrict.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/restrict.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,42 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Debug;    use Debug;
! with Fname;    use Fname;
! with Fname.UF; use Fname.UF;
! with Lib;      use Lib;
! with Opt;      use Opt;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Stand;    use Stand;
! with Targparm; use Targparm;
! with Uname;    use Uname;
  
  package body Restrict is
  
--- 23,46 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Debug;          use Debug;
! with Fname;          use Fname;
! with Fname.UF;       use Fname.UF;
! with Lib;            use Lib;
! with Opt;            use Opt;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Stand;          use Stand;
! with Targparm;       use Targparm;
! with Uname;          use Uname;
  
  package body Restrict is
  
*************** package body Restrict is
*** 62,78 ****
  
     No_Specification_Of_Aspects : array (Aspect_Id) of Source_Ptr :=
                                     (others => No_Location);
!    --  Entries in this array are set to point to a previously occuring pragma
     --  that activates a No_Specification_Of_Aspect check.
  
     No_Specification_Of_Aspect_Warning : array (Aspect_Id) of Boolean :=
                                            (others => True);
!    --  An entry in this array is set False in reponse to a previous call to
!    --  Set_No_Speficiation_Of_Aspect for pragmas in the main unit that
     --  specify Warning as False. Once set False, an entry is never reset.
  
     No_Specification_Of_Aspect_Set : Boolean := False;
!    --  Set True if any entry of No_Specifcation_Of_Aspects has been set True.
     --  Once set True, this is never turned off again.
  
     No_Use_Of_Attribute : array (Attribute_Id) of Source_Ptr :=
--- 66,82 ----
  
     No_Specification_Of_Aspects : array (Aspect_Id) of Source_Ptr :=
                                     (others => No_Location);
!    --  Entries in this array are set to point to a previously occurring pragma
     --  that activates a No_Specification_Of_Aspect check.
  
     No_Specification_Of_Aspect_Warning : array (Aspect_Id) of Boolean :=
                                            (others => True);
!    --  An entry in this array is set False in response to a previous call to
!    --  Set_No_Specification_Of_Aspect for pragmas in the main unit that
     --  specify Warning as False. Once set False, an entry is never reset.
  
     No_Specification_Of_Aspect_Set : Boolean := False;
!    --  Set True if any entry of No_Specification_Of_Aspects has been set True.
     --  Once set True, this is never turned off again.
  
     No_Use_Of_Attribute : array (Attribute_Id) of Source_Ptr :=
*************** package body Restrict is
*** 145,168 ****
     --  Add specified restriction to stored configuration boolean restrictions.
     --  This is used for handling the special case of No_Elaboration_Code.
  
-    -------------------------
-    -- Check_Compiler_Unit --
-    -------------------------
- 
-    procedure Check_Compiler_Unit (Feature : String; N : Node_Id) is
-    begin
-       if Compiler_Unit then
-          Error_Msg_N (Feature & " not allowed in compiler unit!!??", N);
-       end if;
-    end Check_Compiler_Unit;
- 
-    procedure Check_Compiler_Unit (Feature : String; Loc : Source_Ptr) is
-    begin
-       if Compiler_Unit then
-          Error_Msg (Feature & " not allowed in compiler unit!!??", Loc);
-       end if;
-    end Check_Compiler_Unit;
- 
     ------------------------------------
     -- Check_Elaboration_Code_Allowed --
     ------------------------------------
--- 149,154 ----
*************** package body Restrict is
*** 392,401 ****
        N : Node_Id;
        V : Uint := Uint_Minus_1)
     is
!       Msg_Issued : Boolean;
!       pragma Unreferenced (Msg_Issued);
     begin
!       Check_Restriction (Msg_Issued, R, N, V);
     end Check_Restriction;
  
     procedure Check_Restriction
--- 378,386 ----
        N : Node_Id;
        V : Uint := Uint_Minus_1)
     is
!       Ignore_Msg_Issued : Boolean;
     begin
!       Check_Restriction (Ignore_Msg_Issued, R, N, V);
     end Check_Restriction;
  
     procedure Check_Restriction
*************** package body Restrict is
*** 920,925 ****
--- 905,925 ----
          or else Targparm.Restrictions_On_Target.Set (No_Tasking);
     end Global_No_Tasking;
  
+    ---------------------------------------------
+    -- No_Dynamic_Accessibility_Checks_Enabled --
+    ---------------------------------------------
+ 
+    function No_Dynamic_Accessibility_Checks_Enabled
+      (N : Node_Id) return Boolean
+    is
+       pragma Unreferenced (N);
+       --  N is currently unreferenced but present for debugging purposes and
+       --  potential future use.
+ 
+    begin
+       return Restrictions.Set (No_Dynamic_Accessibility_Checks);
+    end No_Dynamic_Accessibility_Checks_Enabled;
+ 
     -------------------------------
     -- No_Exception_Handlers_Set --
     -------------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/restrict.ads gcc-12.1.0/gcc/ada/restrict.ads
*** gcc-11.3.0/gcc/ada/restrict.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/restrict.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Restrict is
*** 114,119 ****
--- 114,120 ----
        No_Default_Initialization          => True,
        No_Direct_Boolean_Operators        => True,
        No_Dispatching_Calls               => True,
+       No_Dynamic_Accessibility_Checks    => True,
        No_Dynamic_Attachment              => True,
        No_Elaboration_Code                => True,
        No_Enumeration_Maps                => True,
*************** package Restrict is
*** 142,147 ****
--- 143,149 ----
        No_Standard_Storage_Pools          => True,
        No_Stream_Optimizations            => True,
        No_Streams                         => True,
+       No_Tagged_Type_Registration        => True,
        No_Task_Attributes_Package         => True,
        No_Task_Termination                => True,
        No_Tasking                         => True,
*************** package Restrict is
*** 239,254 ****
     --  For abort to be allowed, either No_Abort_Statements must be False,
     --  or Max_Asynchronous_Select_Nesting must be non-zero.
  
-    procedure Check_Compiler_Unit (Feature : String; N : Node_Id);
-    --  If unit N is in a unit that has a pragma Compiler_Unit_Warning, then
-    --  a message is posted on node N noting use of the given feature is not
-    --  permitted in the compiler (bootstrap considerations).
- 
-    procedure Check_Compiler_Unit (Feature : String; Loc : Source_Ptr);
-    --  If unit N is in a unit that has a pragma Compiler_Unit_Warning, then a
-    --  message is posted at location Loc noting use of the given feature is not
-    --  permitted in the compiler (bootstrap considerations).
- 
     procedure Check_Restricted_Unit (U : Unit_Name_Type; N : Node_Id);
     --  Checks if loading of unit U is prohibited by the setting of some
     --  restriction (e.g. No_IO restricts the loading of unit Ada.Text_IO).
--- 241,246 ----
*************** package Restrict is
*** 377,382 ****
--- 369,383 ----
     --  pragma Restrictions_Warning, or attribute Restriction_Set. Returns
     --  True if N has the proper form for an entity name, False otherwise.
  
+    function No_Dynamic_Accessibility_Checks_Enabled
+      (N : Node_Id) return Boolean;
+    --  Test to see if the current restrictions settings specify that
+    --  No_Dynamic_Accessibility_Checks is activated.
+ 
+    --  N is currently unused, but is reserved for future use and debugging
+    --  purposes to provide more context on a node for which an accessibility
+    --  check is being performed or generated (e.g. is N in a predefined unit).
+ 
     function No_Exception_Handlers_Set return Boolean;
     --  Test to see if current restrictions settings specify that no exception
     --  handlers are present. This function is called by Gigi when it needs to
*************** package Restrict is
*** 392,397 ****
--- 393,400 ----
     --  Test to see if current restrictions settings specify that no
     --  exception propagation is activated.
  
+    --  WARNING: There is a matching C declaration of this subprogram in fe.h
+ 
     function Process_Restriction_Synonyms (N : Node_Id) return Name_Id;
     --  Id is a node whose Chars field contains the name of a restriction.
     --  If it is one of synonyms that we allow for historical purposes (for
diff -Nrcpad gcc-11.3.0/gcc/ada/rident.ads gcc-12.1.0/gcc/ada/rident.ads
*** gcc-11.3.0/gcc/ada/rident.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/rident.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/rtfinal.c gcc-12.1.0/gcc/ada/rtfinal.c
*** gcc-11.3.0/gcc/ada/rtfinal.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/rtfinal.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *            Copyright (C) 2014-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *            Copyright (C) 2014-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/rtinit.c gcc-12.1.0/gcc/ada/rtinit.c
*** gcc-11.3.0/gcc/ada/rtinit.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/rtinit.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *            Copyright (C) 2014-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *            Copyright (C) 2014-2022, 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- *
*************** static void skip_quoted_string (const WC
*** 147,152 ****
--- 147,165 ----
  	}
        ci++;
      }
+ 
+   /* Handle the case in which a nul character was found instead of a closing
+      double quote. In that case consider all the backslashes as literal
+      characters. */
+   if (*ci == '\0')
+     {
+       for (int i=0; i<qbs_count; i++)
+         {
+           *co='\\';
+           co++;
+         }
+     }
+ 
    *current_in = ci;
    *current_out = co;
  }
*************** static void skip_argument (const WCHAR *
*** 205,211 ****
  	  bs_count = 0;
  	  *co = *ci; co++;
  	}
!       ci++;
      }
  
    for (int i=0; i<bs_count; i++)
--- 218,227 ----
  	  bs_count = 0;
  	  *co = *ci; co++;
  	}
!       if (*ci != '\0')
!         {
!           ci++;
!         }
      }
  
    for (int i=0; i<bs_count; i++)
diff -Nrcpad gcc-11.3.0/gcc/ada/rtsfind.adb gcc-12.1.0/gcc/ada/rtsfind.adb
*** gcc-11.3.0/gcc/ada/rtsfind.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/rtsfind.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,57 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Csets;    use Csets;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
  with Exp_Dist;
! with Fname;    use Fname;
! with Fname.UF; use Fname.UF;
! with Ghost;    use Ghost;
! with Lib;      use Lib;
! with Lib.Load; use Lib.Load;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Output;   use Output;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch7;  use Sem_Ch7;
! with Sem_Dist; use Sem_Dist;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Stand;    use Stand;
! with Snames;   use Snames;
! with Tbuild;   use Tbuild;
! with Uname;    use Uname;
  
  package body Rtsfind is
  
--- 23,61 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Csets;          use Csets;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
  with Exp_Dist;
! with Fname;          use Fname;
! with Fname.UF;       use Fname.UF;
! with Ghost;          use Ghost;
! with Lib;            use Lib;
! with Lib.Load;       use Lib.Load;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Output;         use Output;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Stand;          use Stand;
! with Snames;         use Snames;
! with Tbuild;         use Tbuild;
! with Uname;          use Uname;
  
  package body Rtsfind is
  
*************** package body Rtsfind is
*** 570,579 ****
       range Ada_Streams_Stream_IO .. Ada_Streams_Stream_IO;
  
     subtype Ada_Strings_Descendant is Ada_Descendant
!      range Ada_Strings_Superbounded .. Ada_Strings_Text_Output_Buffers;
  
!    subtype Ada_Strings_Text_Output_Descendant is Ada_Strings_Descendant
!      range Ada_Strings_Text_Output_Utils .. Ada_Strings_Text_Output_Buffers;
  
     subtype Ada_Text_IO_Descendant is Ada_Descendant
       range Ada_Text_IO_Decimal_IO .. Ada_Text_IO_Modular_IO;
--- 574,584 ----
       range Ada_Streams_Stream_IO .. Ada_Streams_Stream_IO;
  
     subtype Ada_Strings_Descendant is Ada_Descendant
!      range Ada_Strings_Superbounded .. Ada_Strings_Text_Buffers_Unbounded;
  
!    subtype Ada_Strings_Text_Buffers_Descendant is Ada_Strings_Descendant
!      range Ada_Strings_Text_Buffers_Unbounded ..
!            Ada_Strings_Text_Buffers_Unbounded;
  
     subtype Ada_Text_IO_Descendant is Ada_Descendant
       range Ada_Text_IO_Decimal_IO .. Ada_Text_IO_Modular_IO;
*************** package body Rtsfind is
*** 597,602 ****
--- 602,611 ----
     subtype System_Descendant is RTU_Id
       range System_Address_Image .. System_Tasking_Stages;
  
+    subtype System_Atomic_Operations_Descendant is System_Descendant
+      range System_Atomic_Operations_Test_And_Set ..
+            System_Atomic_Operations_Test_And_Set;
+ 
     subtype System_Dim_Descendant is System_Descendant
       range System_Dim_Float_IO .. System_Dim_Integer_IO;
  
*************** package body Rtsfind is
*** 657,664 ****
           elsif U_Id in Ada_Strings_Descendant then
              Name_Buffer (12) := '.';
  
!             if U_Id in Ada_Strings_Text_Output_Descendant then
!                Name_Buffer (24) := '.';
              end if;
  
           elsif U_Id in Ada_Text_IO_Descendant then
--- 666,673 ----
           elsif U_Id in Ada_Strings_Descendant then
              Name_Buffer (12) := '.';
  
!             if U_Id in Ada_Strings_Text_Buffers_Descendant then
!                Name_Buffer (25) := '.';
              end if;
  
           elsif U_Id in Ada_Text_IO_Descendant then
*************** package body Rtsfind is
*** 684,689 ****
--- 693,702 ----
        elsif U_Id in System_Descendant then
           Name_Buffer (7) := '.';
  
+          if U_Id in System_Atomic_Operations_Descendant then
+             Name_Buffer (25) := '.';
+          end if;
+ 
           if U_Id in System_Dim_Descendant then
              Name_Buffer (11) := '.';
           end if;
*************** package body Rtsfind is
*** 1235,1243 ****
        --  for this unit to the current compilation unit.
  
        declare
!          LibUnit : constant Node_Id := Unit (Cunit (U.Unum));
!          Clause  : Node_Id;
!          Withn   : Node_Id;
  
        begin
           Clause := U.First_Implicit_With;
--- 1248,1257 ----
        --  for this unit to the current compilation unit.
  
        declare
!          LibUnit  : constant Node_Id         := Unit (Cunit (U.Unum));
!          Saved_GM : constant Ghost_Mode_Type := Ghost_Mode;
!          Clause   : Node_Id;
!          Withn    : Node_Id;
  
        begin
           Clause := U.First_Implicit_With;
*************** package body Rtsfind is
*** 1249,1259 ****
--- 1263,1280 ----
              Clause := Next_Implicit_With (Clause);
           end loop;
  
+          --  We want to make sure that the "with" we create below isn't
+          --  marked as ignored ghost code because this list may be walked
+          --  later, after ignored ghost code is converted to a null
+          --  statement.
+ 
+          Ghost_Mode := None;
           Withn :=
             Make_With_Clause (Standard_Location,
               Name =>
                 Make_Unit_Name
                   (U, Defining_Unit_Name (Specification (LibUnit))));
+          Ghost_Mode := Saved_GM;
  
           Set_Corresponding_Spec  (Withn, U.Entity);
           Set_First_Name          (Withn);
*************** package body Rtsfind is
*** 1795,1808 ****
     -------------------------
  
     procedure SPARK_Implicit_Load (E : RE_Id) is
-       Unused : Entity_Id;
- 
     begin
        pragma Assert (GNATprove_Mode);
  
        --  Force loading of a predefined unit
  
!       Unused := RTE (E);
     end SPARK_Implicit_Load;
  
  end Rtsfind;
--- 1816,1827 ----
     -------------------------
  
     procedure SPARK_Implicit_Load (E : RE_Id) is
     begin
        pragma Assert (GNATprove_Mode);
  
        --  Force loading of a predefined unit
  
!       Discard_Node (RTE (E));
     end SPARK_Implicit_Load;
  
  end Rtsfind;
diff -Nrcpad gcc-11.3.0/gcc/ada/rtsfind.ads gcc-12.1.0/gcc/ada/rtsfind.ads
*** gcc-11.3.0/gcc/ada/rtsfind.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/rtsfind.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,34 ****
--- 29,35 ----
  --  not been explicitly With'ed.
  
  with Types; use Types;
+ with Uintp; use Uintp;
  
  package Rtsfind is
  
*************** package Rtsfind is
*** 59,64 ****
--- 60,71 ----
     --  the compilation except in the presence of use clauses, which might
     --  result in unexpected ambiguities.
  
+    --  IMPORTANT NOTE: the specs of packages and procedures with'ed using
+    --  this mechanism must not contain private with clauses. This is because
+    --  the special context installation/removal for private with clauses
+    --  only works in a clean environment for compilation, and could lead
+    --  here to removing visibility over lib units in the calling context.
+ 
     --  NOTE: If RTU_Id is modified, the subtypes of RTU_Id in the package body
     --  might need to be modified. See Get_Unit_Name.
  
*************** package Rtsfind is
*** 125,136 ****
        Ada_Strings_Wide_Superbounded,
        Ada_Strings_Wide_Wide_Superbounded,
        Ada_Strings_Unbounded,
!       Ada_Strings_Text_Output,
  
!       --  Children of Ada.Strings.Text_Output
  
!       Ada_Strings_Text_Output_Utils,
!       Ada_Strings_Text_Output_Buffers,
  
        --  Children of Ada.Text_IO (for Check_Text_IO_Special_Unit)
  
--- 132,142 ----
        Ada_Strings_Wide_Superbounded,
        Ada_Strings_Wide_Wide_Superbounded,
        Ada_Strings_Unbounded,
!       Ada_Strings_Text_Buffers,
  
!       --  Children of Ada.Strings.Text_Buffers
  
!       Ada_Strings_Text_Buffers_Unbounded,
  
        --  Children of Ada.Text_IO (for Check_Text_IO_Special_Unit)
  
*************** package Rtsfind is
*** 195,200 ****
--- 201,207 ----
        System_Arith_128,
        System_AST_Handling,
        System_Assertions,
+       System_Atomic_Operations,
        System_Atomic_Primitives,
        System_Aux_DEC,
        System_Bignums,
*************** package Rtsfind is
*** 228,233 ****
--- 235,242 ----
        System_Exception_Table,
        System_Exceptions_Debug,
        System_Exn_Int,
+       System_Exn_Flt,
+       System_Exn_LFlt,
        System_Exn_LLF,
        System_Exn_LLI,
        System_Exn_LLLI,
*************** package Rtsfind is
*** 259,276 ****
        System_Img_Decimal_32,
        System_Img_Decimal_64,
        System_Img_Decimal_128,
!       System_Img_Enum,
!       System_Img_Enum_New,
        System_Img_Fixed_32,
        System_Img_Fixed_64,
        System_Img_Fixed_128,
        System_Img_Int,
        System_Img_LLI,
        System_Img_LLLI,
        System_Img_LLU,
        System_Img_LLLU,
        System_Img_Name,
-       System_Img_Real,
        System_Img_Uns,
        System_Img_WChar,
        System_Interrupts,
--- 268,288 ----
        System_Img_Decimal_32,
        System_Img_Decimal_64,
        System_Img_Decimal_128,
!       System_Img_Enum_8,
!       System_Img_Enum_16,
!       System_Img_Enum_32,
        System_Img_Fixed_32,
        System_Img_Fixed_64,
        System_Img_Fixed_128,
+       System_Img_Flt,
        System_Img_Int,
+       System_Img_LFlt,
+       System_Img_LLF,
        System_Img_LLI,
        System_Img_LLLI,
        System_Img_LLU,
        System_Img_LLLU,
        System_Img_Name,
        System_Img_Uns,
        System_Img_WChar,
        System_Interrupts,
*************** package Rtsfind is
*** 428,434 ****
        System_Val_Decimal_32,
        System_Val_Decimal_64,
        System_Val_Decimal_128,
!       System_Val_Enum,
        System_Val_Fixed_32,
        System_Val_Fixed_64,
        System_Val_Fixed_128,
--- 440,448 ----
        System_Val_Decimal_32,
        System_Val_Decimal_64,
        System_Val_Decimal_128,
!       System_Val_Enum_8,
!       System_Val_Enum_16,
!       System_Val_Enum_32,
        System_Val_Fixed_32,
        System_Val_Fixed_64,
        System_Val_Fixed_128,
*************** package Rtsfind is
*** 461,466 ****
--- 475,484 ----
        System_WWd_Enum,
        System_WWd_Wchar,
  
+       --  Children of System.Atomic_Operations
+ 
+        System_Atomic_Operations_Test_And_Set,
+ 
        --  Children of System.Dim
  
        System_Dim_Float_IO,
*************** package Rtsfind is
*** 596,614 ****
  
       RE_Unbounded_String,                -- Ada.Strings.Unbounded
  
!      RE_Sink,                            -- Ada.Strings.Text_Output
! 
!      RE_Put_UTF_8,                       -- Ada.Strings.Text_Output.Utils
!      RE_Put_Wide_Wide_String,            -- Ada.Strings.Text_Output.Utils
  
!      RE_Buffer,                          -- Ada.Strings.Text_Output.Buffers
!      RE_New_Buffer,                      -- Ada.Strings.Text_Output.Buffers
!      RE_Destroy,                         -- Ada.Strings.Text_Output.Buffers
!      RE_Get,                             -- Ada.Strings.Text_Output.Buffers
  
       RE_Wait_For_Release,                -- Ada.Synchronous_Barriers
  
       RE_Suspend_Until_True,              -- Ada.Synchronous_Task_Control
  
       RE_Access_Level,                    -- Ada.Tags
       RE_Alignment,                       -- Ada.Tags
--- 614,632 ----
  
       RE_Unbounded_String,                -- Ada.Strings.Unbounded
  
!      RE_Root_Buffer_Type,                -- Ada.Strings.Text_Buffers
!      RE_Put_UTF_8,                       -- Ada.Strings.Text_Buffers
!      RE_Wide_Wide_Put,                   -- Ada.Strings.Text_Buffers
  
!      RE_Buffer_Type,                     -- Ada.Strings.Text_Buffers.Unbounded
!      RE_Get,                             -- Ada.Strings.Text_Buffers.Unbounded
!      RE_Wide_Get,                        -- Ada.Strings.Text_Buffers.Unbounded
!      RE_Wide_Wide_Get,                   -- Ada.Strings.Text_Buffers.Unbounded
  
       RE_Wait_For_Release,                -- Ada.Synchronous_Barriers
  
       RE_Suspend_Until_True,              -- Ada.Synchronous_Task_Control
+      RE_Suspension_Object,               -- Ada.Synchronous_Task_Control
  
       RE_Access_Level,                    -- Ada.Tags
       RE_Alignment,                       -- Ada.Tags
*************** package Rtsfind is
*** 702,707 ****
--- 720,726 ----
       RE_TK_Tagged,                       -- Ada.Tags
       RE_TK_Task,                         -- Ada.Tags
       RE_Unregister_Tag,                  -- Ada.Tags
+      RE_Wide_Wide_Expanded_Name,         -- Ada.Tags
  
       RE_Set_Specific_Handler,            -- Ada.Task_Termination
       RE_Specific_Handler,                -- Ada.Task_Termination
*************** package Rtsfind is
*** 793,798 ****
--- 812,820 ----
       RE_Uint32,                          -- System.Atomic_Primitives
       RE_Uint64,                          -- System.Atomic_Primitives
  
+      RE_Test_And_Set_Flag,             -- System.Atomic_Operations.Test_And_Set
+      RE_Atomic_Test_And_Set,           -- System.Atomic_Operations.Test_And_Set
+ 
       RE_AST_Handler,                     -- System.Aux_DEC
       RE_Import_Address,                  -- System.Aux_DEC
       RE_Import_Value,                    -- System.Aux_DEC
*************** package Rtsfind is
*** 830,836 ****
--- 852,860 ----
       RE_To_Bignum,                       -- System.Bignums
       RE_From_Bignum,                     -- System.Bignums
  
+      RE_Val_2,                           -- System.Bitfields
       RE_Copy_Bitfield,                   -- System.Bitfields
+      RE_Fast_Copy_Bitfield,              -- System.Bitfields
  
       RE_Bit_And,                         -- System.Bit_Ops
       RE_Bit_Eq,                          -- System.Bit_Ops
*************** package Rtsfind is
*** 901,908 ****
  
       RE_Exn_Integer,                     -- System.Exn_Int
  
!      RE_Exn_Float,                       -- System.Exn_LLF
!      RE_Exn_Long_Float,                  -- System.Exn_LLF
       RE_Exn_Long_Long_Float,             -- System.Exn_LLF
  
       RE_Exn_Long_Long_Integer,           -- System.Exn_LLI
--- 925,934 ----
  
       RE_Exn_Integer,                     -- System.Exn_Int
  
!      RE_Exn_Float,                       -- System.Exn_Flt
! 
!      RE_Exn_Long_Float,                  -- System.Exn_LFlt
! 
       RE_Exn_Long_Long_Float,             -- System.Exn_LLF
  
       RE_Exn_Long_Long_Integer,           -- System.Exn_LLI
*************** package Rtsfind is
*** 956,969 ****
  
       RE_Fore_Decimal128,                 -- System.Fore_Decimal_128
  
       RE_Fore_Fixed32,                    -- System.Fore_Fixed_32
  
       RE_Fore_Fixed64,                    -- System.Fore_Fixed_64
  
       RE_Fore_Fixed128,                   -- System.Fore_Fixed_128
  
-      RE_Fore_Real,                       -- System.Fore_Real
- 
       RE_Image_Boolean,                   -- System.Img_Bool
  
       RE_Image_Character,                 -- System.Img_Char
--- 982,995 ----
  
       RE_Fore_Decimal128,                 -- System.Fore_Decimal_128
  
+      RE_Fore_Fixed,                      -- System.Fore_Real
+ 
       RE_Fore_Fixed32,                    -- System.Fore_Fixed_32
  
       RE_Fore_Fixed64,                    -- System.Fore_Fixed_64
  
       RE_Fore_Fixed128,                   -- System.Fore_Fixed_128
  
       RE_Image_Boolean,                   -- System.Img_Bool
  
       RE_Image_Character,                 -- System.Img_Char
*************** package Rtsfind is
*** 979,986 ****
--- 1005,1018 ----
       RE_Image_Enumeration_16,            -- System.Img_Enum_New
       RE_Image_Enumeration_32,            -- System.Img_Enum_New
  
+      RE_Image_Float,                     -- System_Img_Flt
+ 
       RE_Image_Integer,                   -- System.Img_Int
  
+      RE_Image_Long_Float,                -- System_Img_LFlt
+ 
+      RE_Image_Long_Long_Float,           -- System_Img_LLF
+ 
       RE_Image_Long_Long_Integer,         -- System.Img_LLI
  
       RE_Image_Long_Long_Long_Integer,    -- System.Img_LLLI
*************** package Rtsfind is
*** 989,1000 ****
  
       RE_Image_Long_Long_Long_Unsigned,   -- System.Img_LLLU
  
       RE_Image_Fixed32,                   -- System.Img_Fixed_32
       RE_Image_Fixed64,                   -- System.Img_Fixed_64
-      RE_Image_Fixed128,                  -- System.Img_Fixed_128
  
!      RE_Image_Ordinary_Fixed_Point,      -- System.Img_Real
!      RE_Image_Floating_Point,            -- System.Img_Real
  
       RE_Image_Unsigned,                  -- System.Img_Uns
  
--- 1021,1033 ----
  
       RE_Image_Long_Long_Long_Unsigned,   -- System.Img_LLLU
  
+      RE_Image_Fixed,                     -- System.Img_LFlt
+ 
       RE_Image_Fixed32,                   -- System.Img_Fixed_32
+ 
       RE_Image_Fixed64,                   -- System.Img_Fixed_64
  
!      RE_Image_Fixed128,                  -- System.Img_Fixed_128
  
       RE_Image_Unsigned,                  -- System.Img_Uns
  
*************** package Rtsfind is
*** 1959,1969 ****
       RE_Conditional_Call,                -- System.Tasking
       RE_Asynchronous_Call,               -- System.Tasking
  
-      RE_Foreign_Task_Level,              -- System.Tasking
-      RE_Environment_Task_Level,          -- System.Tasking
-      RE_Independent_Task_Level,          -- System.Tasking
-      RE_Library_Task_Level,              -- System.Tasking
- 
       RE_Ada_Task_Control_Block,          -- System.Tasking
  
       RE_Task_List,                       -- System.Tasking
--- 1992,1997 ----
*************** package Rtsfind is
*** 1980,1986 ****
       RE_Task_Entry_Index,                -- System.Tasking
       RE_Self,                            -- System.Tasking
  
-      RE_Master_Id,                       -- System.Tasking
       RE_Unspecified_Priority,            -- System.Tasking
  
       RE_Activation_Chain,                -- System.Tasking
--- 2008,2013 ----
*************** package Rtsfind is
*** 2004,2010 ****
       RE_Bits_1,                          -- System.Unsigned_Types
       RE_Bits_2,                          -- System.Unsigned_Types
       RE_Bits_4,                          -- System.Unsigned_Types
-      RE_Float_Unsigned,                  -- System.Unsigned_Types
       RE_Long_Long_Unsigned,              -- System.Unsigned_Types
       RE_Long_Long_Long_Unsigned,         -- System.Unsigned_Types
       RE_Packed_Byte,                     -- System.Unsigned_Types
--- 2031,2036 ----
*************** package Rtsfind is
*** 2026,2034 ****
  
       RE_Value_Decimal128,                -- System_Val_Decimal_128
  
!      RE_Value_Enumeration_8,             -- System.Val_Enum
!      RE_Value_Enumeration_16,            -- System.Val_Enum
!      RE_Value_Enumeration_32,            -- System.Val_Enum
  
       RE_Value_Fixed32,                   -- System_Val_Fixed_32
  
--- 2052,2064 ----
  
       RE_Value_Decimal128,                -- System_Val_Decimal_128
  
!      RE_Value_Enumeration_8,             -- System.Val_Enum_8
!      RE_Value_Enumeration_16,            -- System.Val_Enum_16
!      RE_Value_Enumeration_32,            -- System.Val_Enum_32
! 
!      RE_Valid_Value_Enumeration_8,       -- System.Val_Enum_8
!      RE_Valid_Value_Enumeration_16,      -- System.Val_Enum_16
!      RE_Valid_Value_Enumeration_32,      -- System.Val_Enum_32
  
       RE_Value_Fixed32,                   -- System_Val_Fixed_32
  
*************** package Rtsfind is
*** 2270,2288 ****
  
       RE_Unbounded_String                 => Ada_Strings_Unbounded,
  
!      RE_Sink                             => Ada_Strings_Text_Output,
! 
!      RE_Put_UTF_8                        => Ada_Strings_Text_Output_Utils,
!      RE_Put_Wide_Wide_String             => Ada_Strings_Text_Output_Utils,
  
!      RE_Buffer                           => Ada_Strings_Text_Output_Buffers,
!      RE_New_Buffer                       => Ada_Strings_Text_Output_Buffers,
!      RE_Destroy                          => Ada_Strings_Text_Output_Buffers,
!      RE_Get                              => Ada_Strings_Text_Output_Buffers,
  
       RE_Wait_For_Release                 => Ada_Synchronous_Barriers,
  
       RE_Suspend_Until_True               => Ada_Synchronous_Task_Control,
  
       RE_Access_Level                     => Ada_Tags,
       RE_Alignment                        => Ada_Tags,
--- 2300,2318 ----
  
       RE_Unbounded_String                 => Ada_Strings_Unbounded,
  
!      RE_Root_Buffer_Type                 => Ada_Strings_Text_Buffers,
!      RE_Put_UTF_8                        => Ada_Strings_Text_Buffers,
!      RE_Wide_Wide_Put                    => Ada_Strings_Text_Buffers,
  
!      RE_Buffer_Type                      => Ada_Strings_Text_Buffers_Unbounded,
!      RE_Get                              => Ada_Strings_Text_Buffers_Unbounded,
!      RE_Wide_Get                         => Ada_Strings_Text_Buffers_Unbounded,
!      RE_Wide_Wide_Get                    => Ada_Strings_Text_Buffers_Unbounded,
  
       RE_Wait_For_Release                 => Ada_Synchronous_Barriers,
  
       RE_Suspend_Until_True               => Ada_Synchronous_Task_Control,
+      RE_Suspension_Object                => Ada_Synchronous_Task_Control,
  
       RE_Access_Level                     => Ada_Tags,
       RE_Alignment                        => Ada_Tags,
*************** package Rtsfind is
*** 2376,2381 ****
--- 2406,2412 ----
       RE_TK_Tagged                        => Ada_Tags,
       RE_TK_Task                          => Ada_Tags,
       RE_Unregister_Tag                   => Ada_Tags,
+      RE_Wide_Wide_Expanded_Name          => Ada_Tags,
  
       RE_Set_Specific_Handler             => Ada_Task_Termination,
       RE_Specific_Handler                 => Ada_Task_Termination,
*************** package Rtsfind is
*** 2467,2472 ****
--- 2498,2506 ----
       RE_Uint32                           => System_Atomic_Primitives,
       RE_Uint64                           => System_Atomic_Primitives,
  
+      RE_Test_And_Set_Flag             => System_Atomic_Operations_Test_And_Set,
+      RE_Atomic_Test_And_Set           => System_Atomic_Operations_Test_And_Set,
+ 
       RE_AST_Handler                      => System_Aux_DEC,
       RE_Import_Address                   => System_Aux_DEC,
       RE_Import_Value                     => System_Aux_DEC,
*************** package Rtsfind is
*** 2504,2510 ****
--- 2538,2546 ----
       RE_To_Bignum                        => System_Bignums,
       RE_From_Bignum                      => System_Bignums,
  
+      RE_Val_2                            => System_Bitfields,
       RE_Copy_Bitfield                    => System_Bitfields,
+      RE_Fast_Copy_Bitfield               => System_Bitfields,
  
       RE_Bit_And                          => System_Bit_Ops,
       RE_Bit_Eq                           => System_Bit_Ops,
*************** package Rtsfind is
*** 2581,2588 ****
  
       RE_Exn_Integer                      => System_Exn_Int,
  
!      RE_Exn_Float                        => System_Exn_LLF,
!      RE_Exn_Long_Float                   => System_Exn_LLF,
       RE_Exn_Long_Long_Float              => System_Exn_LLF,
  
       RE_Exn_Long_Long_Integer            => System_Exn_LLI,
--- 2617,2626 ----
  
       RE_Exn_Integer                      => System_Exn_Int,
  
!      RE_Exn_Float                        => System_Exn_Flt,
! 
!      RE_Exn_Long_Float                   => System_Exn_LFlt,
! 
       RE_Exn_Long_Long_Float              => System_Exn_LLF,
  
       RE_Exn_Long_Long_Integer            => System_Exn_LLI,
*************** package Rtsfind is
*** 2636,2649 ****
  
       RE_Fore_Decimal128                  => System_Fore_Decimal_128,
  
       RE_Fore_Fixed32                     => System_Fore_Fixed_32,
  
       RE_Fore_Fixed64                     => System_Fore_Fixed_64,
  
       RE_Fore_Fixed128                    => System_Fore_Fixed_128,
  
-      RE_Fore_Real                        => System_Fore_Real,
- 
       RE_Image_Boolean                    => System_Img_Bool,
  
       RE_Image_Character                  => System_Img_Char,
--- 2674,2687 ----
  
       RE_Fore_Decimal128                  => System_Fore_Decimal_128,
  
+      RE_Fore_Fixed                       => System_Fore_Real,
+ 
       RE_Fore_Fixed32                     => System_Fore_Fixed_32,
  
       RE_Fore_Fixed64                     => System_Fore_Fixed_64,
  
       RE_Fore_Fixed128                    => System_Fore_Fixed_128,
  
       RE_Image_Boolean                    => System_Img_Bool,
  
       RE_Image_Character                  => System_Img_Char,
*************** package Rtsfind is
*** 2655,2666 ****
  
       RE_Image_Decimal128                 => System_Img_Decimal_128,
  
!      RE_Image_Enumeration_8              => System_Img_Enum_New,
!      RE_Image_Enumeration_16             => System_Img_Enum_New,
!      RE_Image_Enumeration_32             => System_Img_Enum_New,
  
       RE_Image_Integer                    => System_Img_Int,
  
       RE_Image_Long_Long_Integer          => System_Img_LLI,
  
       RE_Image_Long_Long_Long_Integer     => System_Img_LLLI,
--- 2693,2712 ----
  
       RE_Image_Decimal128                 => System_Img_Decimal_128,
  
!      RE_Image_Enumeration_8              => System_Img_Enum_8,
! 
!      RE_Image_Enumeration_16             => System_Img_Enum_16,
! 
!      RE_Image_Enumeration_32             => System_Img_Enum_32,
! 
!      RE_Image_Float                      => System_Img_Flt,
  
       RE_Image_Integer                    => System_Img_Int,
  
+      RE_Image_Long_Float                 => System_Img_LFlt,
+ 
+      RE_Image_Long_Long_Float            => System_Img_LLF,
+ 
       RE_Image_Long_Long_Integer          => System_Img_LLI,
  
       RE_Image_Long_Long_Long_Integer     => System_Img_LLLI,
*************** package Rtsfind is
*** 2669,2680 ****
  
       RE_Image_Long_Long_Long_Unsigned    => System_Img_LLLU,
  
       RE_Image_Fixed32                    => System_Img_Fixed_32,
       RE_Image_Fixed64                    => System_Img_Fixed_64,
-      RE_Image_Fixed128                   => System_Img_Fixed_128,
  
!      RE_Image_Ordinary_Fixed_Point       => System_Img_Real,
!      RE_Image_Floating_Point             => System_Img_Real,
  
       RE_Image_Unsigned                   => System_Img_Uns,
  
--- 2715,2727 ----
  
       RE_Image_Long_Long_Long_Unsigned    => System_Img_LLLU,
  
+      RE_Image_Fixed                      => System_Img_LFlt,
+ 
       RE_Image_Fixed32                    => System_Img_Fixed_32,
+ 
       RE_Image_Fixed64                    => System_Img_Fixed_64,
  
!      RE_Image_Fixed128                   => System_Img_Fixed_128,
  
       RE_Image_Unsigned                   => System_Img_Uns,
  
*************** package Rtsfind is
*** 3639,3649 ****
       RE_Conditional_Call                 => System_Tasking,
       RE_Asynchronous_Call                => System_Tasking,
  
-      RE_Foreign_Task_Level               => System_Tasking,
-      RE_Environment_Task_Level           => System_Tasking,
-      RE_Independent_Task_Level           => System_Tasking,
-      RE_Library_Task_Level               => System_Tasking,
- 
       RE_Ada_Task_Control_Block           => System_Tasking,
  
       RE_Task_List                        => System_Tasking,
--- 3686,3691 ----
*************** package Rtsfind is
*** 3660,3666 ****
       RE_Task_Entry_Index                 => System_Tasking,
       RE_Self                             => System_Tasking,
  
-      RE_Master_Id                        => System_Tasking,
       RE_Unspecified_Priority             => System_Tasking,
  
       RE_Activation_Chain                 => System_Tasking,
--- 3702,3707 ----
*************** package Rtsfind is
*** 3684,3690 ****
       RE_Bits_1                           => System_Unsigned_Types,
       RE_Bits_2                           => System_Unsigned_Types,
       RE_Bits_4                           => System_Unsigned_Types,
-      RE_Float_Unsigned                   => System_Unsigned_Types,
       RE_Long_Long_Unsigned               => System_Unsigned_Types,
       RE_Long_Long_Long_Unsigned          => System_Unsigned_Types,
       RE_Packed_Byte                      => System_Unsigned_Types,
--- 3725,3730 ----
*************** package Rtsfind is
*** 3706,3714 ****
  
       RE_Value_Decimal128                 => System_Val_Decimal_128,
  
!      RE_Value_Enumeration_8              => System_Val_Enum,
!      RE_Value_Enumeration_16             => System_Val_Enum,
!      RE_Value_Enumeration_32             => System_Val_Enum,
  
       RE_Value_Fixed32                    => System_Val_Fixed_32,
  
--- 3746,3762 ----
  
       RE_Value_Decimal128                 => System_Val_Decimal_128,
  
!      RE_Value_Enumeration_8              => System_Val_Enum_8,
! 
!      RE_Value_Enumeration_16             => System_Val_Enum_16,
! 
!      RE_Value_Enumeration_32             => System_Val_Enum_32,
! 
!      RE_Valid_Value_Enumeration_8        => System_Val_Enum_8,
! 
!      RE_Valid_Value_Enumeration_16       => System_Val_Enum_16,
! 
!      RE_Valid_Value_Enumeration_32       => System_Val_Enum_32,
  
       RE_Value_Fixed32                    => System_Val_Fixed_32,
  
*************** package Rtsfind is
*** 3967,3972 ****
--- 4015,4023 ----
        System_Unsigned_Types   => True,
        others                  => False);
  
+    Library_Task_Level : constant Uint := Uint_3;
+    --  Corresponds to System.Tasking.Library_Task_Level
+ 
     -----------------
     -- Subprograms --
     -----------------
*************** package Rtsfind is
*** 4055,4064 ****
     --  and without generating an error message, i.e. if the call will obtain
     --  the desired entity without any problems.
     --
!    --  If we call this and it returns True, we should generate a call to E.
!    --  In other words, the compiler should not call RTE_Available (E) until
!    --  it has decided it wants to generate a call to E. Otherwise we can get
!    --  spurious dependencies and elaboration orders.
     --
     --     if RTE_Available (E) -- WRONG!
     --       and then <some condition>
--- 4106,4116 ----
     --  and without generating an error message, i.e. if the call will obtain
     --  the desired entity without any problems.
     --
!    --  If we call this and it returns True, we should generate a reference to
!    --  E (usually a call). In other words, for a subprogram E, the compiler
!    --  should not call RTE_Available (E) until it has decided it wants to
!    --  generate a call to E. Otherwise we can get spurious dependencies and
!    --  elaboration orders.
     --
     --     if RTE_Available (E) -- WRONG!
     --       and then <some condition>
diff -Nrcpad gcc-11.3.0/gcc/ada/runtime.h gcc-12.1.0/gcc/ada/runtime.h
*** gcc-11.3.0/gcc/ada/runtime.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/runtime.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 2019-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 2019-2022, 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- *
***************
*** 31,39 ****
  
  /* This file provides common definitions used by GNAT C runtime files.  */
  
  #ifdef __vxworks
  #include "vxWorks.h"
! #endif /* __vxworks */
  
  #ifndef ATTRIBUTE_UNUSED
  #define ATTRIBUTE_UNUSED __attribute__((unused))
--- 31,41 ----
  
  /* This file provides common definitions used by GNAT C runtime files.  */
  
+ /* The following include is here to meet the published VxWorks requirement
+    that the vxWorks.h header appear before any other header.  */
  #ifdef __vxworks
  #include "vxWorks.h"
! #endif
  
  #ifndef ATTRIBUTE_UNUSED
  #define ATTRIBUTE_UNUSED __attribute__((unused))
diff -Nrcpad gcc-11.3.0/gcc/ada/s-oscons-tmplt.c gcc-12.1.0/gcc/ada/s-oscons-tmplt.c
*** gcc-11.3.0/gcc/ada/s-oscons-tmplt.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/s-oscons-tmplt.c	Fri May  6 07:30:56 2022
***************
*** 7,13 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 7,13 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
*************** CND(MSG_PEEK, "Peek at incoming data")
*** 1463,1476 ****
  CND(MSG_EOR, "Send end of record")
  
  #ifndef MSG_WAITALL
- #ifdef __MINWGW32__
- /* The value of MSG_WAITALL is 8.  Nevertheless winsock.h doesn't
-    define it, but it is still usable as we link to winsock2 API.  */
- # define MSG_WAITALL (1 << 3)
- #else
  # define MSG_WAITALL -1
  #endif
- #endif
  CND(MSG_WAITALL, "Wait for full reception")
  
  #ifndef MSG_NOSIGNAL
--- 1463,1470 ----
*************** CNS(MSG_Forced_Flags, "")
*** 1501,1506 ****
--- 1495,1533 ----
  #endif
  CND(TCP_NODELAY, "Do not coalesce packets")
  
+ #ifndef TCP_KEEPCNT
+ #ifdef __MINGW32__
+ /* Windows headers can be too old to have all available constants.
+  * We know this one. */
+ # define TCP_KEEPCNT 16
+ #else
+ # define TCP_KEEPCNT -1
+ #endif
+ #endif
+ CND(TCP_KEEPCNT, "Maximum number of keepalive probes")
+ 
+ #ifndef TCP_KEEPIDLE
+ #ifdef __MINGW32__
+ /* Windows headers can be too old to have all available constants.
+  * We know this one. */
+ # define TCP_KEEPIDLE 3
+ #else
+ # define TCP_KEEPIDLE -1
+ #endif
+ #endif
+ CND(TCP_KEEPIDLE, "Idle time before TCP starts sending keepalive probes")
+ 
+ #ifndef TCP_KEEPINTVL
+ #ifdef __MINGW32__
+ /* Windows headers can be too old to have all available constants.
+  * We know this one. */
+ # define TCP_KEEPINTVL 17
+ #else
+ # define TCP_KEEPINTVL -1
+ #endif
+ #endif
+ CND(TCP_KEEPINTVL, "Time between individual keepalive probes")
+ 
  #ifndef SO_REUSEADDR
  # define SO_REUSEADDR -1
  #endif
*************** CND(IPV6_DSTOPTS, "Set the destination o
*** 1662,1669 ****
--- 1689,1702 ----
  CND(IPV6_HOPOPTS, "Set the hop options delivery")
  
  #ifndef IPV6_FLOWINFO
+ #ifdef __linux__
+ /* The IPV6_FLOWINFO is defined in linux/in6.h, but we can't include it because
+  * of conflicts with other headers. */
+ # define IPV6_FLOWINFO 11
+ #else
  # define IPV6_FLOWINFO -1
  #endif
+ #endif
  CND(IPV6_FLOWINFO, "Set the flow ID delivery")
  
  #ifndef IPV6_HOPLIMIT
diff -Nrcpad gcc-11.3.0/gcc/ada/sa_messages.adb gcc-12.1.0/gcc/ada/sa_messages.adb
*** gcc-11.3.0/gcc/ada/sa_messages.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sa_messages.adb	Fri May  6 07:30:56 2022
***************
*** 1,7 ****
  ------------------------------------------------------------------------------
  --                       C O D E P E E R / S P A R K                        --
  --                                                                          --
! --                     Copyright (C) 2015-2020, AdaCore                     --
  --                                                                          --
  -- This 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- --
--- 1,7 ----
  ------------------------------------------------------------------------------
  --                       C O D E P E E R / S P A R K                        --
  --                                                                          --
! --                     Copyright (C) 2015-2022, AdaCore                     --
  --                                                                          --
  -- This 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sa_messages.ads gcc-12.1.0/gcc/ada/sa_messages.ads
*** gcc-11.3.0/gcc/ada/sa_messages.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sa_messages.ads	Fri May  6 07:30:56 2022
***************
*** 1,7 ****
  ------------------------------------------------------------------------------
  --                       C O D E P E E R / S P A R K                        --
  --                                                                          --
! --                     Copyright (C) 2015-2020, AdaCore                     --
  --                                                                          --
  -- This 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- --
--- 1,7 ----
  ------------------------------------------------------------------------------
  --                       C O D E P E E R / S P A R K                        --
  --                                                                          --
! --                     Copyright (C) 2015-2022, AdaCore                     --
  --                                                                          --
  -- This 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- --
*************** package SA_Messages is
*** 96,102 ****
     --  Contract_Cases, Default_Initial_Condition, Initial_Condition,
     --  Loop_Invariant, Loop_Variant, Refined_Post, and Subprogram_Variant.
     --
!    --  TBD: it might be nice to distinguish these different kinds of assertions
     --  as is done in SPARK's VC_Kind enumeration type, but any distinction
     --  which isn't already present in CP's BE_Message_Subkind enumeration type
     --  would require more work on the CP side.
--- 96,102 ----
     --  Contract_Cases, Default_Initial_Condition, Initial_Condition,
     --  Loop_Invariant, Loop_Variant, Refined_Post, and Subprogram_Variant.
     --
!    --  It might be nice to distinguish these different kinds of assertions
     --  as is done in SPARK's VC_Kind enumeration type, but any distinction
     --  which isn't already present in CP's BE_Message_Subkind enumeration type
     --  would require more work on the CP side.
diff -Nrcpad gcc-11.3.0/gcc/ada/scans.adb gcc-12.1.0/gcc/ada/scans.adb
*** gcc-11.3.0/gcc/ada/scans.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/scans.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/scans.ads gcc-12.1.0/gcc/ada/scans.ads
*** gcc-11.3.0/gcc/ada/scans.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/scans.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Scans is
*** 81,87 ****
        --  exception-name". This degrades error recovery slightly, and perhaps
        --  we could do better, but not worth the effort.
  
!       --  Ada 2020 introduces square brackets as delimiters for array and
        --  container aggregates.
  
        Tok_Raise,           -- RAISE
--- 81,87 ----
        --  exception-name". This degrades error recovery slightly, and perhaps
        --  we could do better, but not worth the effort.
  
!       --  Ada 2022 introduces square brackets as delimiters for array and
        --  container aggregates.
  
        Tok_Raise,           -- RAISE
*************** package Scans is
*** 441,452 ****
     --  scanned literal.
  
     Real_Literal_Value : Ureal;
!    --  Valid only when Token is Tok_Real_Literal, contains the value of the
     --  scanned literal.
  
     Int_Literal_Value : Uint;
!    --  Valid only when Token = Tok_Integer_Literal, contains the value of the
!    --  scanned literal.
  
     Based_Literal_Uses_Colon : Boolean;
     --  Valid only when Token = Tok_Integer_Literal or Tok_Real_Literal. Set
--- 441,452 ----
     --  scanned literal.
  
     Real_Literal_Value : Ureal;
!    --  Valid only when Token is Tok_Real_Literal. Contains the value of the
     --  scanned literal.
  
     Int_Literal_Value : Uint;
!    --  Valid only when Token = Tok_Integer_Literal, and we are not in
!    --  syntax-only mode. Contains the value of the scanned literal.
  
     Based_Literal_Uses_Colon : Boolean;
     --  Valid only when Token = Tok_Integer_Literal or Tok_Real_Literal. Set
diff -Nrcpad gcc-11.3.0/gcc/ada/scil_ll.adb gcc-12.1.0/gcc/ada/scil_ll.adb
*** gcc-11.3.0/gcc/ada/scil_ll.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/scil_ll.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
***************
*** 23,32 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;         use Atree;
! with Opt;           use Opt;
! with Sinfo;         use Sinfo;
! with System.HTable; use System.HTable;
  
  package body SCIL_LL is
  
--- 23,33 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Opt;            use Opt;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with System.HTable;  use System.HTable;
  
  package body SCIL_LL is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/scil_ll.ads gcc-12.1.0/gcc/ada/scil_ll.ads
*** gcc-11.3.0/gcc/ada/scil_ll.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/scil_ll.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2010-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2010-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/scn.adb gcc-12.1.0/gcc/ada/scn.adb
*** gcc-11.3.0/gcc/ada/scn.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/scn.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,38 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Csets;    use Csets;
! with Namet;    use Namet;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Scans;    use Scans;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Uintp;    use Uintp;
  
  package body Scn is
  
--- 23,39 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Csets;          use Csets;
! with Namet;          use Namet;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Scans;          use Scans;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinput;         use Sinput;
! with Uintp;          use Uintp;
  
  package body Scn is
  
*************** package body Scn is
*** 154,160 ****
  
           when Tok_Integer_Literal =>
              Token_Node := New_Node (N_Integer_Literal, Token_Ptr);
!             Set_Intval (Token_Node, Int_Literal_Value);
              Check_Obsolete_Base_Char;
  
           when Tok_String_Literal =>
--- 155,168 ----
  
           when Tok_Integer_Literal =>
              Token_Node := New_Node (N_Integer_Literal, Token_Ptr);
! 
!             --  Int_Literal_Value can be No_Uint in some cases in syntax-only
!             --  mode (see Scng.Scan.Nlit).
! 
!             if Present (Int_Literal_Value) then
!                Set_Intval (Token_Node, Int_Literal_Value);
!             end if;
! 
              Check_Obsolete_Base_Char;
  
           when Tok_String_Literal =>
diff -Nrcpad gcc-11.3.0/gcc/ada/scn.ads gcc-12.1.0/gcc/ada/scn.ads
*** gcc-11.3.0/gcc/ada/scn.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/scn.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/scng.adb gcc-12.1.0/gcc/ada/scng.adb
*** gcc-11.3.0/gcc/ada/scng.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/scng.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Scng is
*** 230,245 ****
  
        --  Initialize scan control variables
  
!       Current_Source_File       := Index;
!       Source                    := Source_Text (Current_Source_File);
!       Scan_Ptr                  := Source_First (Current_Source_File);
!       Token                     := No_Token;
!       Token_Ptr                 := Scan_Ptr;
!       Current_Line_Start        := Scan_Ptr;
!       Token_Node                := Empty;
!       Token_Name                := No_Name;
!       Start_Column              := Set_Start_Column;
!       First_Non_Blank_Location  := Scan_Ptr;
  
        Initialize_Checksum;
        Wide_Char_Byte_Count := 0;
--- 230,245 ----
  
        --  Initialize scan control variables
  
!       Current_Source_File      := Index;
!       Source                   := Source_Text (Current_Source_File);
!       Scan_Ptr                 := Source_First (Current_Source_File);
!       Token                    := No_Token;
!       Token_Ptr                := Scan_Ptr;
!       Current_Line_Start       := Scan_Ptr;
!       Token_Node               := Empty;
!       Token_Name               := No_Name;
!       Start_Column             := Set_Start_Column;
!       First_Non_Blank_Location := Scan_Ptr;
  
        Initialize_Checksum;
        Wide_Char_Byte_Count := 0;
*************** package body Scng is
*** 322,327 ****
--- 322,370 ----
        --  Returns True if the scan pointer is pointing to the start of a wide
        --  character sequence, does not modify the scan pointer in any case.
  
+       procedure Check_Bidi (Code : Char_Code);
+       --  Give a warning if Code is a bidirectional character, which can cause
+       --  security vulnerabilities. See the following article:
+       --
+       --  @article{boucher_trojansource_2021,
+       --      title = {Trojan {Source}: {Invisible} {Vulnerabilities}},
+       --      author = {Nicholas Boucher and Ross Anderson},
+       --      year = {2021},
+       --      journal = {Preprint},
+       --      eprint = {2111.00169},
+       --      archivePrefix = {arXiv},
+       --      primaryClass = {cs.CR},
+       --      url = {https://arxiv.org/abs/2111.00169}
+       --  }
+ 
+       ----------------
+       -- Check_Bidi --
+       ----------------
+ 
+       type Bidi_Characters is
+         (LRE, RLE, LRO, RLO, LRI, RLI, FSI, PDF, PDI);
+       Bidi_Character_Codes : constant array (Bidi_Characters) of Char_Code :=
+         (LRE => 16#202A#,
+          RLE => 16#202B#,
+          LRO => 16#202D#,
+          RLO => 16#202E#,
+          LRI => 16#2066#,
+          RLI => 16#2067#,
+          FSI => 16#2068#,
+          PDF => 16#202C#,
+          PDI => 16#2069#);
+       --  Above are the bidirectional characters, along with their Unicode code
+       --  points.
+ 
+       procedure Check_Bidi (Code : Char_Code) is
+       begin
+          for Bidi_Code of Bidi_Character_Codes loop
+             if Code = Bidi_Code then
+                Error_Msg ("??bidirectional wide character", Wptr);
+             end if;
+          end loop;
+       end Check_Bidi;
+ 
        -----------------------
        -- Double_Char_Token --
        -----------------------
*************** package body Scng is
*** 1070,1075 ****
--- 1113,1120 ----
                    if Err then
                       Error_Illegal_Wide_Character;
                       Code := Get_Char_Code (' ');
+                   else
+                      Check_Bidi (Code);
                    end if;
  
                    Accumulate_Checksum (Code);
*************** package body Scng is
*** 1303,1309 ****
           --  AI12-0125-03 : @ is target_name
  
           when '@' =>
!             Error_Msg_Ada_2020_Feature ("target name", Token_Ptr);
  
              Accumulate_Checksum ('@');
              Scan_Ptr := Scan_Ptr + 1;
--- 1348,1354 ----
           --  AI12-0125-03 : @ is target_name
  
           when '@' =>
!             Error_Msg_Ada_2022_Feature ("target name", Token_Ptr);
  
              Accumulate_Checksum ('@');
              Scan_Ptr := Scan_Ptr + 1;
*************** package body Scng is
*** 1380,1390 ****
  
           when '[' =>
  
!             --  [] under -gnatX is an aggregate notation and the special
              --  wide character notation becomes unsupported since the two
              --  are ambiguous.
  
!             if Extensions_Allowed then
                 Scan_Ptr := Scan_Ptr + 1;
                 Token := Tok_Left_Bracket;
                 return;
--- 1425,1435 ----
  
           when '[' =>
  
!             --  [] under -gnat2022 is an aggregate notation and the special
              --  wide character notation becomes unsupported since the two
              --  are ambiguous.
  
!             if Ada_Version >= Ada_2022 then
                 Scan_Ptr := Scan_Ptr + 1;
                 Token := Tok_Left_Bracket;
                 return;
*************** package body Scng is
*** 1611,1621 ****
  
                    elsif Start_Of_Wide_Character then
                       declare
-                         Wptr : constant Source_Ptr := Scan_Ptr;
                          Code : Char_Code;
                          Err  : Boolean;
  
                       begin
                          Scan_Wide (Source, Scan_Ptr, Code, Err);
  
                          --  If not well formed wide character, then just skip
--- 1656,1666 ----
  
                    elsif Start_Of_Wide_Character then
                       declare
                          Code : Char_Code;
                          Err  : Boolean;
  
                       begin
+                         Wptr := Scan_Ptr;
                          Scan_Wide (Source, Scan_Ptr, Code, Err);
  
                          --  If not well formed wide character, then just skip
*************** package body Scng is
*** 1629,1634 ****
--- 1674,1681 ----
                          elsif Is_UTF_32_Line_Terminator (UTF_32 (Code)) then
                             Scan_Ptr := Wptr;
                             exit;
+                         else
+                            Check_Bidi (Code);
                          end if;
                       end;
  
*************** package body Scng is
*** 1707,1713 ****
              --  "abs"'Address. Other literals are included to give better error
              --  behavior for illegal cases like 123'Img.
              --
!             --  In Ada 2020, a target name (i.e. @) is a valid prefix of an
              --  attribute, and functions like a name.
  
              if Prev_Token = Tok_All
--- 1754,1760 ----
              --  "abs"'Address. Other literals are included to give better error
              --  behavior for illegal cases like 123'Img.
              --
!             --  In Ada 2022, a target name (i.e. @) is a valid prefix of an
              --  attribute, and functions like a name.
  
              if Prev_Token = Tok_All
*************** package body Scng is
*** 1736,1759 ****
                 if Start_Of_Wide_Character then
                    Wptr := Scan_Ptr;
                    Scan_Wide (Source, Scan_Ptr, Code, Err);
-                   Accumulate_Checksum (Code);
  
                    if Err then
                       Error_Illegal_Wide_Character;
                       Code := Character'Pos (' ');
  
                    --  In Ada 95 mode we allow any wide character in a character
!                   --  literal, but in Ada 2005, the set of characters allowed
!                   --  is restricted to graphic characters.
  
                    elsif Ada_Version >= Ada_2005
                      and then Is_UTF_32_Non_Graphic (UTF_32 (Code))
                    then
!                      Error_Msg -- CODEFIX????
                         ("(Ada 2005) non-graphic character not permitted " &
                          "in character literal", Wptr);
                    end if;
  
                    if Source (Scan_Ptr) /= ''' then
                          Error_Msg_S ("missing apostrophe");
                    else
--- 1783,1809 ----
                 if Start_Of_Wide_Character then
                    Wptr := Scan_Ptr;
                    Scan_Wide (Source, Scan_Ptr, Code, Err);
  
                    if Err then
                       Error_Illegal_Wide_Character;
                       Code := Character'Pos (' ');
  
                    --  In Ada 95 mode we allow any wide character in a character
!                   --  literal, but in later versions, the set of characters
!                   --  allowed is restricted to graphic characters.
  
                    elsif Ada_Version >= Ada_2005
                      and then Is_UTF_32_Non_Graphic (UTF_32 (Code))
                    then
!                      Error_Msg -- CODEFIX
                         ("(Ada 2005) non-graphic character not permitted " &
                          "in character literal", Wptr);
+                   else
+                      Check_Bidi (Code);
                    end if;
  
+                   Accumulate_Checksum (Code);
+ 
                    if Source (Scan_Ptr) /= ''' then
                          Error_Msg_S ("missing apostrophe");
                    else
*************** package body Scng is
*** 1827,1836 ****
              return;
  
           --  Right bracket or right brace, treated as right paren but proper
!          --  aggregate delimiter in Ada 2020.
  
           when ']' | '}' =>
!             if Ada_Version >= Ada_2020 then
                 Token := Tok_Right_Bracket;
  
              else
--- 1877,1886 ----
              return;
  
           --  Right bracket or right brace, treated as right paren but proper
!          --  aggregate delimiter in Ada 2022.
  
           when ']' | '}' =>
!             if Ada_Version >= Ada_2022 then
                 Token := Tok_Right_Bracket;
  
              else
*************** package body Scng is
*** 2701,2752 ****
  
        Tabs_Loop : loop
  
!          --  Inner loop scans past blanks as fast as possible, bumping Scan_Ptr
!          --  past the blanks and adjusting Start_Column to account for them.
  
!          Blanks_Loop : loop
!             if Source (Scan_Ptr) = ' ' then
!                if Source (Scan_Ptr + 1) = ' ' then
!                   if Source (Scan_Ptr + 2) = ' ' then
!                      if Source (Scan_Ptr + 3) = ' ' then
!                         if Source (Scan_Ptr + 4) = ' ' then
!                            if Source (Scan_Ptr + 5) = ' ' then
!                               if Source (Scan_Ptr + 6) = ' ' then
!                                  Scan_Ptr := Scan_Ptr + 7;
!                                  Start_Column := Start_Column + 7;
!                               else
!                                  Scan_Ptr := Scan_Ptr + 6;
!                                  Start_Column := Start_Column + 6;
!                                  exit Blanks_Loop;
!                               end if;
!                            else
!                               Scan_Ptr := Scan_Ptr + 5;
!                               Start_Column := Start_Column + 5;
!                               exit Blanks_Loop;
!                            end if;
!                         else
!                            Scan_Ptr := Scan_Ptr + 4;
!                            Start_Column := Start_Column + 4;
!                            exit Blanks_Loop;
!                         end if;
!                      else
!                         Scan_Ptr := Scan_Ptr + 3;
!                         Start_Column := Start_Column + 3;
!                         exit Blanks_Loop;
!                      end if;
!                   else
!                      Scan_Ptr := Scan_Ptr + 2;
!                      Start_Column := Start_Column + 2;
!                      exit Blanks_Loop;
!                   end if;
!                else
!                   Scan_Ptr := Scan_Ptr + 1;
!                   Start_Column := Start_Column + 1;
!                   exit Blanks_Loop;
!                end if;
!             else
!                exit Blanks_Loop;
!             end if;
           end loop Blanks_Loop;
  
           --  Outer loop keeps going only if a horizontal tab follows
--- 2751,2763 ----
  
        Tabs_Loop : loop
  
!          --  Inner loop scans past blanks, bumping Scan_Ptr past the blanks and
!          --  adjusting Start_Column to account for them.
  
!          Blanks_Loop :
!          while Source (Scan_Ptr) = ' ' loop
!             Scan_Ptr := Scan_Ptr + 1;
!             Start_Column := Start_Column + 1;
           end loop Blanks_Loop;
  
           --  Outer loop keeps going only if a horizontal tab follows
*************** package body Scng is
*** 2771,2777 ****
  
     exception
        when Constraint_Error =>
!          return Start_Column;
     end Set_Start_Column;
  
  end Scng;
--- 2782,2788 ----
  
     exception
        when Constraint_Error =>
!          return Column_Number'Last;
     end Set_Start_Column;
  
  end Scng;
diff -Nrcpad gcc-11.3.0/gcc/ada/scng.ads gcc-12.1.0/gcc/ada/scng.ads
*** gcc-11.3.0/gcc/ada/scng.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/scng.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/scos.adb gcc-12.1.0/gcc/ada/scos.adb
*** gcc-11.3.0/gcc/ada/scos.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/scos.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/scos.ads gcc-12.1.0/gcc/ada/scos.ads
*** gcc-11.3.0/gcc/ada/scos.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/scos.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
*************** package SCOs is
*** 257,263 ****
     --      I       decision in IF statement or if expression
     --      P       decision in pragma Assert / Check / Pre/Post_Condition
     --      A[name] decision in aspect Pre/Post (aspect name optional)
!    --      W       decision in WHILE iteration scheme
     --      X       decision in some other expression context
  
     --    For E, G, I, P, W, sloc is the source location of the EXIT, ENTRY, IF,
--- 257,263 ----
     --      I       decision in IF statement or if expression
     --      P       decision in pragma Assert / Check / Pre/Post_Condition
     --      A[name] decision in aspect Pre/Post (aspect name optional)
!    --      W       decision in WHILE iteration scheme or quantified expression
     --      X       decision in some other expression context
  
     --    For E, G, I, P, W, sloc is the source location of the EXIT, ENTRY, IF,
diff -Nrcpad gcc-11.3.0/gcc/ada/scos.h gcc-12.1.0/gcc/ada/scos.h
*** gcc-11.3.0/gcc/ada/scos.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/scos.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *           Copyright (C) 2014-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *           Copyright (C) 2014-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/sdefault.ads gcc-12.1.0/gcc/ada/sdefault.ads
*** gcc-11.3.0/gcc/ada/sdefault.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sdefault.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/seh_init.c gcc-12.1.0/gcc/ada/seh_init.c
*** gcc-11.3.0/gcc/ada/seh_init.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/seh_init.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 2005-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *           Copyright (C) 2005-2022, 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- *
*************** extern struct Exception_Data storage_err
*** 64,71 ****
  extern struct Exception_Data tasking_error;
  extern struct Exception_Data _abort_signal;
  
! #define Raise_From_Signal_Handler ada__exceptions__raise_from_signal_handler
! extern void Raise_From_Signal_Handler (struct Exception_Data *, const char *)
    ATTRIBUTE_NORETURN;
  
  
--- 64,71 ----
  extern struct Exception_Data tasking_error;
  extern struct Exception_Data _abort_signal;
  
! #define Raise_From_Signal_Handler __gnat_raise_from_signal_handler
! extern void Raise_From_Signal_Handler (struct Exception_Data *, const void *)
    ATTRIBUTE_NORETURN;
  
  
diff -Nrcpad gcc-11.3.0/gcc/ada/sem.adb gcc-12.1.0/gcc/ada/sem.adb
*** gcc-11.3.0/gcc/ada/sem.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,60 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;     use Atree;
! with Debug;     use Debug;
! with Debug_A;   use Debug_A;
! with Elists;    use Elists;
! with Exp_SPARK; use Exp_SPARK;
! with Expander;  use Expander;
! with Ghost;     use Ghost;
! with Lib;       use Lib;
! with Lib.Load;  use Lib.Load;
! with Nlists;    use Nlists;
! with Output;    use Output;
! with Restrict;  use Restrict;
! with Sem_Attr;  use Sem_Attr;
! with Sem_Ch2;   use Sem_Ch2;
! with Sem_Ch3;   use Sem_Ch3;
! with Sem_Ch4;   use Sem_Ch4;
! with Sem_Ch5;   use Sem_Ch5;
! with Sem_Ch6;   use Sem_Ch6;
! with Sem_Ch7;   use Sem_Ch7;
! with Sem_Ch8;   use Sem_Ch8;
! with Sem_Ch9;   use Sem_Ch9;
! with Sem_Ch10;  use Sem_Ch10;
! with Sem_Ch11;  use Sem_Ch11;
! with Sem_Ch12;  use Sem_Ch12;
! with Sem_Ch13;  use Sem_Ch13;
! with Sem_Prag;  use Sem_Prag;
! with Sem_Util;  use Sem_Util;
! with Sinfo;     use Sinfo;
! with Stand;     use Stand;
! with Stylesw;   use Stylesw;
! with Uintp;     use Uintp;
! with Uname;     use Uname;
  
  with Unchecked_Deallocation;
  
--- 23,65 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Debug_A;        use Debug_A;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Exp_SPARK;      use Exp_SPARK;
! with Expander;       use Expander;
! with Ghost;          use Ghost;
! with Lib;            use Lib;
! with Lib.Load;       use Lib.Load;
! with Nlists;         use Nlists;
! with Output;         use Output;
! with Restrict;       use Restrict;
! with Sem_Attr;       use Sem_Attr;
! with Sem_Ch2;        use Sem_Ch2;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch4;        use Sem_Ch4;
! with Sem_Ch5;        use Sem_Ch5;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch9;        use Sem_Ch9;
! with Sem_Ch10;       use Sem_Ch10;
! with Sem_Ch11;       use Sem_Ch11;
! with Sem_Ch12;       use Sem_Ch12;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Stand;          use Stand;
! with Stylesw;        use Stylesw;
! with Uintp;          use Uintp;
! with Uname;          use Uname;
  
  with Unchecked_Deallocation;
  
*************** package body Sem is
*** 293,298 ****
--- 298,306 ----
           when N_Goto_Statement =>
              Analyze_Goto_Statement (N);
  
+          when N_Goto_When_Statement =>
+             Analyze_Goto_When_Statement (N);
+ 
           when N_Handled_Sequence_Of_Statements =>
              Analyze_Handled_Statements (N);
  
*************** package body Sem is
*** 500,505 ****
--- 508,516 ----
           when N_Raise_Statement =>
              Analyze_Raise_Statement (N);
  
+          when N_Raise_When_Statement =>
+             Analyze_Raise_When_Statement (N);
+ 
           when N_Raise_xxx_Error =>
              Analyze_Raise_xxx_Error (N);
  
*************** package body Sem is
*** 521,526 ****
--- 532,540 ----
           when N_Requeue_Statement =>
              Analyze_Requeue (N);
  
+          when N_Return_When_Statement =>
+             Analyze_Return_When_Statement (N);
+ 
           when N_Simple_Return_Statement =>
              Analyze_Simple_Return_Statement (N);
  
*************** package body Sem is
*** 1008,1023 ****
        Scop : Entity_Id;
  
     begin
!       --  Entity is global if defined outside of current outer_generic_scope:
!       --  Either the entity has a smaller depth that the outer generic, or it
        --  is in a different compilation unit, or it is defined within a unit
!       --  in the same compilation, that is not within the outer_generic.
  
        if No (Outer_Generic_Scope) then
           return False;
  
!       elsif Scope_Depth (Scope (E)) < Scope_Depth (Outer_Generic_Scope)
!         or else not In_Same_Source_Unit (E, Outer_Generic_Scope)
        then
           return True;
  
--- 1022,1041 ----
        Scop : Entity_Id;
  
     begin
!       --  Entity is global if defined outside of current Outer_Generic_Scope:
!       --  Either the entity has a smaller depth than the outer generic, or it
        --  is in a different compilation unit, or it is defined within a unit
!       --  in the same compilation, that is not within the outer generic.
  
        if No (Outer_Generic_Scope) then
           return False;
  
!       --  It makes no sense to compare depths if not in same unit. Scope_Depth
!       --  is not set for inherited operations.
! 
!       elsif not In_Same_Source_Unit (E, Outer_Generic_Scope)
!         or else not Scope_Depth_Set (Scope (E))
!         or else Scope_Depth (Scope (E)) < Scope_Depth (Outer_Generic_Scope)
        then
           return True;
  
*************** package body Sem is
*** 1388,1394 ****
        procedure Do_Analyze is
           Saved_GM  : constant Ghost_Mode_Type := Ghost_Mode;
           Saved_IGR : constant Node_Id         := Ignored_Ghost_Region;
!          --  Save the Ghost-related attributes to restore on exit
  
           --  Generally style checks are preserved across compilations, with
           --  one exception: s-oscons.ads, which allows arbitrary long lines
--- 1406,1414 ----
        procedure Do_Analyze is
           Saved_GM  : constant Ghost_Mode_Type := Ghost_Mode;
           Saved_IGR : constant Node_Id         := Ignored_Ghost_Region;
!          Saved_ISMP : constant Boolean        :=
!                         Ignore_SPARK_Mode_Pragmas_In_Instance;
!          --  Save Ghost and SPARK mode-related data to restore on exit
  
           --  Generally style checks are preserved across compilations, with
           --  one exception: s-oscons.ads, which allows arbitrary long lines
*************** package body Sem is
*** 1407,1412 ****
--- 1427,1433 ----
           --  Set up a clean environment before analyzing
  
           Install_Ghost_Region (None, Empty);
+          Ignore_SPARK_Mode_Pragmas_In_Instance := False;
  
           Outer_Generic_Scope := Empty;
           Scope_Suppress      := Suppress_Options;
*************** package body Sem is
*** 1429,1437 ****
  
           Pop_Scope;
           Restore_Scope_Stack  (List);
-          Restore_Ghost_Region (Saved_GM, Saved_IGR);
           Style_Max_Line_Length := Saved_ML;
           Style_Check_Max_Line_Length := Saved_CML;
        end Do_Analyze;
  
        --  Local variables
--- 1450,1460 ----
  
           Pop_Scope;
           Restore_Scope_Stack  (List);
           Style_Max_Line_Length := Saved_ML;
           Style_Check_Max_Line_Length := Saved_CML;
+ 
+          Restore_Ghost_Region (Saved_GM, Saved_IGR);
+          Ignore_SPARK_Mode_Pragmas_In_Instance := Saved_ISMP;
        end Do_Analyze;
  
        --  Local variables
diff -Nrcpad gcc-11.3.0/gcc/ada/sem.ads gcc-12.1.0/gcc/ada/sem.ads
*** gcc-11.3.0/gcc/ada/sem.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 202,208 ****
  --  called Preanalyze_And_Resolve and is in Sem_Res.
  
  with Alloc;
- with Einfo;  use Einfo;
  with Opt;    use Opt;
  with Table;
  with Types;  use Types;
--- 202,207 ----
*************** package Sem is
*** 292,297 ****
--- 291,300 ----
     --  freezing nodes can modify the status of this flag, any other client
     --  should regard it as read-only.
  
+    Inside_Class_Condition_Preanalysis : Boolean := False;
+    --  Flag indicating whether we are preanalyzing a class-wide precondition
+    --  or postcondition.
+ 
     Inside_Preanalysis_Without_Freezing : Nat := 0;
     --  Flag indicating whether we are preanalyzing an expression performing no
     --  freezing. Non-zero means we are inside (it is actually a level counter
*************** package Sem is
*** 500,506 ****
        --  Save contents of Check_Policy_List on entry to restore on exit. The
        --  Check_Policy pragmas are chained with Check_Policy_List pointing to
        --  the most recent entry. This list is searched starting here, so that
!       --  the search finds the most recent appicable entry. When we restore
        --  Check_Policy_List on exit from the scope, the effect is to remove
        --  all entries set in the scope being exited.
  
--- 503,509 ----
        --  Save contents of Check_Policy_List on entry to restore on exit. The
        --  Check_Policy pragmas are chained with Check_Policy_List pointing to
        --  the most recent entry. This list is searched starting here, so that
!       --  the search finds the most recent applicable entry. When we restore
        --  Check_Policy_List on exit from the scope, the effect is to remove
        --  all entries set in the scope being exited.
  
*************** package Sem is
*** 534,540 ****
        --  See Sem_Ch10 (Install_Parents, Remove_Parents).
  
        Node_To_Be_Wrapped : Node_Id;
!       --  Only used in transient scopes. Records the node which will be wrapped
        --  by the transient block.
  
        Actions_To_Be_Wrapped : Scope_Actions;
--- 537,543 ----
        --  See Sem_Ch10 (Install_Parents, Remove_Parents).
  
        Node_To_Be_Wrapped : Node_Id;
!       --  Only used in transient scopes. Records the node that will be wrapped
        --  by the transient block.
  
        Actions_To_Be_Wrapped : Scope_Actions;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_aggr.adb gcc-12.1.0/gcc/ada/sem_aggr.adb
*** gcc-11.3.0/gcc/ada/sem_aggr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_aggr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,71 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Expander; use Expander;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Itypes;   use Itypes;
! with Lib;      use Lib;
! with Lib.Xref; use Lib.Xref;
! with Namet;    use Namet;
! with Namet.Sp; use Namet.Sp;
! with Nmake;    use Nmake;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Cat;  use Sem_Cat;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch5;  use Sem_Ch5;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Ch13; use Sem_Ch13;
! with Sem_Dim;  use Sem_Dim;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sem_Type; use Sem_Type;
! with Sem_Warn; use Sem_Warn;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stringt;  use Stringt;
! with Stand;    use Stand;
! with Style;    use Style;
! with Targparm; use Targparm;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Uintp;    use Uintp;
  
  package body Sem_Aggr is
  
--- 23,76 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Expander;       use Expander;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Itypes;         use Itypes;
! with Lib;            use Lib;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Namet.Sp;       use Namet.Sp;
! with Nmake;          use Nmake;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Case;       use Sem_Case;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch5;        use Sem_Ch5;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Dim;        use Sem_Dim;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sem_Type;       use Sem_Type;
! with Sem_Warn;       use Sem_Warn;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stringt;        use Stringt;
! with Stand;          use Stand;
! with Style;          use Style;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
  
  package body Sem_Aggr is
  
*************** package body Sem_Aggr is
*** 243,249 ****
     --  The procedure works by recursively checking each nested aggregate.
     --  Specifically, after checking a sub-aggregate nested at the i-th level
     --  we recursively check all the subaggregates at the i+1-st level (if any).
!    --  Note that for aggregates analysis and resolution go hand in hand.
     --  Aggregate analysis has been delayed up to here and it is done while
     --  resolving the aggregate.
     --
--- 248,254 ----
     --  The procedure works by recursively checking each nested aggregate.
     --  Specifically, after checking a sub-aggregate nested at the i-th level
     --  we recursively check all the subaggregates at the i+1-st level (if any).
!    --  Note that aggregates analysis and resolution go hand in hand.
     --  Aggregate analysis has been delayed up to here and it is done while
     --  resolving the aggregate.
     --
*************** package body Sem_Aggr is
*** 360,366 ****
     --  to the expansion phase. As an optimization, if the discrete choice
     --  specifies a single value we do not delay resolution.
  
!    function Array_Aggr_Subtype (N : Node_Id; Typ : Node_Id) return Entity_Id;
     --  This routine returns the type or subtype of an array aggregate.
     --
     --    N is the array aggregate node whose type we return.
--- 365,371 ----
     --  to the expansion phase. As an optimization, if the discrete choice
     --  specifies a single value we do not delay resolution.
  
!    function Array_Aggr_Subtype (N : Node_Id; Typ : Entity_Id) return Entity_Id;
     --  This routine returns the type or subtype of an array aggregate.
     --
     --    N is the array aggregate node whose type we return.
*************** package body Sem_Aggr is
*** 540,545 ****
--- 545,558 ----
        --  Make sure that the list of index constraints is properly attached to
        --  the tree, and then collect the aggregate bounds.
  
+       --  If no aggregaate bounds have been set, this is an aggregate with
+       --  iterator specifications and a dynamic size to be determined by
+       --  first pass of expanded code.
+ 
+       if No (Aggregate_Bounds (N)) then
+          return Typ;
+       end if;
+ 
        Set_Parent (Index_Constraints, N);
        Collect_Aggr_Bounds (N, 1);
  
*************** package body Sem_Aggr is
*** 878,884 ****
  
        --  Ada 2005 (AI-287): Limited aggregates allowed
  
!       --  In an instance, ignore aggregate subcomponents tnat may be limited,
        --  because they originate in view conflicts. If the original aggregate
        --  is legal and the actuals are legal, the aggregate itself is legal.
  
--- 891,897 ----
  
        --  Ada 2005 (AI-287): Limited aggregates allowed
  
!       --  In an instance, ignore aggregate subcomponents that may be limited,
        --  because they originate in view conflicts. If the original aggregate
        --  is legal and the actuals are legal, the aggregate itself is legal.
  
*************** package body Sem_Aggr is
*** 903,910 ****
  
        elsif Present (Find_Aspect (Typ, Aspect_Aggregate))
          and then Ekind (Typ) /= E_Record_Type
!         and then Ada_Version >= Ada_2020
        then
           Resolve_Container_Aggregate (N, Typ);
  
        elsif Is_Record_Type (Typ) then
--- 916,929 ----
  
        elsif Present (Find_Aspect (Typ, Aspect_Aggregate))
          and then Ekind (Typ) /= E_Record_Type
!         and then Ada_Version >= Ada_2022
        then
+          --  Check for Ada 2022 and () aggregate.
+ 
+          if not Is_Homogeneous_Aggregate (N) then
+             Error_Msg_N ("container aggregate must use '['], not ()", N);
+          end if;
+ 
           Resolve_Container_Aggregate (N, Typ);
  
        elsif Is_Record_Type (Typ) then
*************** package body Sem_Aggr is
*** 1592,1597 ****
--- 1611,1618 ----
           Loc : constant Source_Ptr := Sloc (N);
           Id  : constant Entity_Id  := Defining_Identifier (N);
  
+          Id_Typ : Entity_Id := Any_Type;
+ 
           -----------------------
           -- Remove_References --
           -----------------------
*************** package body Sem_Aggr is
*** 1625,1666 ****
        --  Start of processing for Resolve_Iterated_Component_Association
  
        begin
!          --  An element iterator specification cannot appear in
!          --  an array aggregate because it does not provide index
!          --  values for the association. This must be a semantic
!          --  check because the parser cannot tell whether this is
!          --  an array aggregate or a container aggregate.
  
           if Present (Iterator_Specification (N)) then
!             Error_Msg_N ("container element Iterator cannot appear "
!               & "in an array aggregate", N);
!             return;
!          end if;
  
!          Choice := First (Discrete_Choices (N));
  
!          while Present (Choice) loop
!             if Nkind (Choice) = N_Others_Choice then
!                Others_Present := True;
  
!             else
!                Analyze (Choice);
  
!                --  Choice can be a subtype name, a range, or an expression
  
!                if Is_Entity_Name (Choice)
!                  and then Is_Type (Entity (Choice))
!                  and then Base_Type (Entity (Choice)) = Base_Type (Index_Typ)
!                then
!                   null;
  
                 else
!                   Analyze_And_Resolve (Choice, Index_Typ);
                 end if;
-             end if;
  
!             Next (Choice);
!          end loop;
  
           --  Create a scope in which to introduce an index, which is usually
           --  visible in the expression for the component, and needed for its
--- 1646,1710 ----
        --  Start of processing for Resolve_Iterated_Component_Association
  
        begin
!          Error_Msg_Ada_2022_Feature ("iterated component", Loc);
  
           if Present (Iterator_Specification (N)) then
!             Analyze (Name (Iterator_Specification (N)));
  
!             --  We assume that the domain of iteration cannot be overloaded.
  
!             declare
!                Domain : constant Node_Id := Name (Iterator_Specification (N));
!                D_Type : constant Entity_Id := Etype (Domain);
!                Elt    : Entity_Id;
!             begin
!                if Is_Array_Type (D_Type) then
!                   Id_Typ := Component_Type (D_Type);
  
!                else
!                   if Has_Aspect (D_Type, Aspect_Iterable) then
!                      Elt :=
!                        Get_Iterable_Type_Primitive (D_Type, Name_Element);
!                      if No (Elt) then
!                         Error_Msg_N
!                           ("missing Element primitive for iteration", Domain);
!                      else
!                         Id_Typ := Etype (Elt);
!                      end if;
!                   else
!                      Error_Msg_N ("cannot iterate over", Domain);
!                   end if;
!                end if;
!             end;
  
!          else
!             Id_Typ := Index_Typ;
!             Choice := First (Discrete_Choices (N));
  
!             while Present (Choice) loop
!                if Nkind (Choice) = N_Others_Choice then
!                   Others_Present := True;
  
                 else
!                   Analyze (Choice);
! 
!                   --  Choice can be a subtype name, a range, or an expression
! 
!                   if Is_Entity_Name (Choice)
!                     and then Is_Type (Entity (Choice))
!                     and then
!                       Base_Type (Entity (Choice)) = Base_Type (Index_Typ)
!                   then
!                      null;
! 
!                   else
!                      Analyze_And_Resolve (Choice, Index_Typ);
!                   end if;
                 end if;
  
!                Next (Choice);
!             end loop;
!          end if;
  
           --  Create a scope in which to introduce an index, which is usually
           --  visible in the expression for the component, and needed for its
*************** package body Sem_Aggr is
*** 1676,1683 ****
           --  directly visible.
  
           Enter_Name (Id);
!          Set_Etype (Id, Index_Typ);
!          Set_Ekind (Id, E_Variable);
           Set_Scope (Id, Ent);
  
           --  Analyze  expression without expansion, to verify legality.
--- 1720,1727 ----
           --  directly visible.
  
           Enter_Name (Id);
!          Set_Etype (Id, Id_Typ);
!          Mutate_Ekind (Id, E_Variable);
           Set_Scope (Id, Ent);
  
           --  Analyze  expression without expansion, to verify legality.
*************** package body Sem_Aggr is
*** 1730,1735 ****
--- 1774,1785 ----
        Delete_Choice : Boolean;
        --  Used when replacing a subtype choice with predicate by a list
  
+       Has_Iterator_Specifications : Boolean := False;
+       --  Flag to indicate that all named associations are iterated component
+       --  associations with iterator specifications, in which case the
+       --  expansion will create two loops: one to evaluate the size and one
+       --  to generate the elements (4.3.3 (20.2/5)).
+ 
        Nb_Elements : Uint := Uint_0;
        --  The number of elements in a positional aggregate
  
*************** package body Sem_Aggr is
*** 1748,1756 ****
--- 1798,1870 ----
           return False;
        end if;
  
+       --  Disable the warning for GNAT Mode to allow for easier transition.
+ 
+       if Ada_Version >= Ada_2022
+         and then Warn_On_Obsolescent_Feature
+         and then not GNAT_Mode
+         and then not Is_Homogeneous_Aggregate (N)
+         and then not Is_Enum_Array_Aggregate (N)
+         and then Is_Parenthesis_Aggregate (N)
+         and then Nkind (Parent (N)) /= N_Qualified_Expression
+         and then Comes_From_Source (N)
+       then
+          Error_Msg_N
+            ("?j?array aggregate using () is an" &
+               " obsolescent syntax, use '['] instead", N);
+       end if;
+ 
        --  STEP 1: make sure the aggregate is correctly formatted
  
        if Present (Component_Associations (N)) then
+ 
+          --  Verify that all or none of the component associations
+          --  include an iterator specification.
+ 
+          Assoc := First (Component_Associations (N));
+          if Nkind (Assoc) = N_Iterated_Component_Association
+            and then Present (Iterator_Specification (Assoc))
+          then
+             --  All other component associations must have an iterator spec.
+ 
+             Next (Assoc);
+             while Present (Assoc) loop
+                if Nkind (Assoc) /= N_Iterated_Component_Association
+                  or else No (Iterator_Specification (Assoc))
+                then
+                   Error_Msg_N ("mixed iterated component association"
+                    & " (RM 4.4.3 (17.1/5))",
+                       Assoc);
+                   return False;
+                end if;
+ 
+                Next (Assoc);
+             end loop;
+ 
+             Has_Iterator_Specifications := True;
+ 
+          else
+             --  or none of them do.
+ 
+             Next (Assoc);
+             while Present (Assoc) loop
+                if Nkind (Assoc) = N_Iterated_Component_Association
+                  and then Present (Iterator_Specification (Assoc))
+                then
+                   Error_Msg_N ("mixed iterated component association"
+                     & " (RM 4.4.3 (17.1/5))",
+                       Assoc);
+                   return False;
+                end if;
+ 
+                Next (Assoc);
+             end loop;
+ 
+             while Present (Assoc) loop
+                Next (Assoc);
+             end loop;
+          end if;
+ 
           Assoc := First (Component_Associations (N));
           while Present (Assoc) loop
              if Nkind (Assoc) = N_Iterated_Component_Association then
*************** package body Sem_Aggr is
*** 1862,1868 ****
                     or else (Nb_Choices = 1 and then not Others_Present))
        then
           Error_Msg_N
!            ("named association cannot follow positional association",
              First (Choice_List (First (Component_Associations (N)))));
           return Failure;
        end if;
--- 1976,1982 ----
                     or else (Nb_Choices = 1 and then not Others_Present))
        then
           Error_Msg_N
!            ("cannot mix named and positional associations in array aggregate",
              First (Choice_List (First (Component_Associations (N)))));
           return Failure;
        end if;
*************** package body Sem_Aggr is
*** 1943,1951 ****
  
           begin
              --  STEP 2 (A): Check discrete choices validity
  
              Assoc := First (Component_Associations (N));
!             while Present (Assoc) loop
                 Prev_Nb_Discrete_Choices := Nb_Discrete_Choices;
                 Choice := First (Choice_List (Assoc));
  
--- 2057,2068 ----
  
           begin
              --  STEP 2 (A): Check discrete choices validity
+             --  No need if this is an element iteration.
  
              Assoc := First (Component_Associations (N));
!             while Present (Assoc)
!               and then Present (Choice_List (Assoc))
!             loop
                 Prev_Nb_Discrete_Choices := Nb_Discrete_Choices;
                 Choice := First (Choice_List (Assoc));
  
*************** package body Sem_Aggr is
*** 2386,2391 ****
--- 2503,2514 ----
                 end Check_Choices;
              end if;
  
+             if Has_Iterator_Specifications then
+                --  Bounds will be determined dynamically.
+ 
+                return Success;
+             end if;
+ 
              --  STEP 2 (B): Compute aggregate bounds and min/max choices values
  
              if Nb_Discrete_Choices > 0 then
*************** package body Sem_Aggr is
*** 2701,2707 ****
        --  Exp_Aggr.Convert_To_Positional, so we don't want to change those
        --  bounds.
  
!       if Present (Aggregate_Bounds (N)) and then not Others_Allowed then
           Aggr_Low  := Low_Bound  (Aggregate_Bounds (N));
           Aggr_High := High_Bound (Aggregate_Bounds (N));
        end if;
--- 2824,2833 ----
        --  Exp_Aggr.Convert_To_Positional, so we don't want to change those
        --  bounds.
  
!       if Present (Aggregate_Bounds (N))
!         and then not Others_Allowed
!         and then not Comes_From_Source (N)
!       then
           Aggr_Low  := Low_Bound  (Aggregate_Bounds (N));
           Aggr_High := High_Bound (Aggregate_Bounds (N));
        end if;
*************** package body Sem_Aggr is
*** 2765,2770 ****
--- 2891,2897 ----
          Key_Type  : Entity_Id;
          Elmt_Type : Entity_Id)
        is
+          Loc      : constant Source_Ptr := Sloc (N);
           Choice   : Node_Id;
           Ent      : Entity_Id;
           Expr     : Node_Id;
*************** package body Sem_Aggr is
*** 2775,2780 ****
--- 2902,2909 ----
           Typ      : Entity_Id := Empty;
  
        begin
+          Error_Msg_Ada_2022_Feature ("iterated component", Loc);
+ 
           --  If this is an Iterated_Element_Association then either a
           --  an Iterator_Specification or a Loop_Parameter specification
           --  is present. In both cases a Key_Expression is present.
*************** package body Sem_Aggr is
*** 2859,2865 ****
              Set_Etype (Id, Key_Type);
           end if;
  
!          Set_Ekind (Id, E_Variable);
           Set_Scope (Id, Ent);
           Set_Referenced (Id);
  
--- 2988,2994 ----
              Set_Etype (Id, Key_Type);
           end if;
  
!          Mutate_Ekind (Id, E_Variable);
           Set_Scope (Id, Ent);
           Set_Referenced (Id);
  
*************** package body Sem_Aggr is
*** 2980,2988 ****
              Index_Type : constant Entity_Id := Etype (Next_Formal (Container));
              Comp_Type  : constant Entity_Id :=
                                   Etype (Next_Formal (Next_Formal (Container)));
!             Comp   : Node_Id;
!             Choice : Node_Id;
  
           begin
              if Present (Expressions (N)) then
                 Comp := First (Expressions (N));
--- 3109,3120 ----
              Index_Type : constant Entity_Id := Etype (Next_Formal (Container));
              Comp_Type  : constant Entity_Id :=
                                   Etype (Next_Formal (Next_Formal (Container)));
!             Comp        : Node_Id;
!             Choice      : Node_Id;
!             Num_Choices : Nat := 0;
  
+             Hi_Val : Uint;
+             Lo_Val : Uint;
           begin
              if Present (Expressions (N)) then
                 Comp := First (Expressions (N));
*************** package body Sem_Aggr is
*** 2999,3005 ****
                    return;
                 end if;
  
!                Comp := First (Expressions (N));
  
                 while Present (Comp) loop
                    if Nkind (Comp) = N_Component_Association then
--- 3131,3137 ----
                    return;
                 end if;
  
!                Comp := First (Component_Associations (N));
  
                 while Present (Comp) loop
                    if Nkind (Comp) = N_Component_Association then
*************** package body Sem_Aggr is
*** 3007,3012 ****
--- 3139,3145 ----
  
                       while Present (Choice) loop
                          Analyze_And_Resolve (Choice, Index_Type);
+                         Num_Choices := Num_Choices + 1;
                          Next (Choice);
                       end loop;
  
*************** package body Sem_Aggr is
*** 3018,3027 ****
--- 3151,3257 ----
                    then
                       Resolve_Iterated_Association
                         (Comp, Index_Type, Comp_Type);
+                      Num_Choices := Num_Choices + 1;
                    end if;
  
                    Next (Comp);
                 end loop;
+ 
+                --  The component associations in an indexed aggregate
+                --  must denote a contiguous set of static values. We
+                --  build a table of values/ranges and sort it, as is done
+                --  elsewhere for case statements and array aggregates.
+                --  If the aggregate has a single iterated association it
+                --  is allowed to be nonstatic and there is nothing to check.
+ 
+                if Num_Choices > 1 then
+                   declare
+                      Table     : Case_Table_Type (1 .. Num_Choices);
+                      No_Choice : Pos := 1;
+                      Lo, Hi    : Node_Id;
+ 
+                   --  Traverse aggregate to determine size of needed table.
+                   --  Verify that bounds are static and that loops have no
+                   --  filters or key expressions.
+ 
+                   begin
+                      Comp := First (Component_Associations (N));
+                      while Present (Comp) loop
+                         if Nkind (Comp) = N_Iterated_Element_Association then
+                            if Present
+                              (Loop_Parameter_Specification (Comp))
+                            then
+                               if Present (Iterator_Filter
+                                 (Loop_Parameter_Specification (Comp)))
+                               then
+                                  Error_Msg_N
+                                    ("iterator filter not allowed " &
+                                      "in indexed aggregate", Comp);
+                                  return;
+ 
+                               elsif Present (Key_Expression
+                                 (Loop_Parameter_Specification (Comp)))
+                               then
+                                  Error_Msg_N
+                                    ("key expression not allowed " &
+                                      "in indexed aggregate", Comp);
+                                  return;
+                               end if;
+                            end if;
+                         else
+                            Choice := First (Choices (Comp));
+ 
+                            while Present (Choice) loop
+                               Get_Index_Bounds (Choice, Lo, Hi);
+                               Table (No_Choice).Choice := Choice;
+                               Table (No_Choice).Lo := Lo;
+                               Table (No_Choice).Hi := Hi;
+ 
+                               --  Verify staticness of value or range
+ 
+                               if not Is_Static_Expression (Lo)
+                                 or else not Is_Static_Expression (Hi)
+                               then
+                                  Error_Msg_N
+                                    ("nonstatic expression for index " &
+                                      "for indexed aggregate", Choice);
+                                  return;
+                               end if;
+ 
+                               No_Choice := No_Choice + 1;
+                               Next (Choice);
+                            end loop;
+                         end if;
+ 
+                         Next (Comp);
+                      end loop;
+ 
+                      Sort_Case_Table (Table);
+ 
+                      for J in 1 .. Num_Choices - 1 loop
+                         Hi_Val := Expr_Value (Table (J).Hi);
+                         Lo_Val := Expr_Value (Table (J + 1).Lo);
+ 
+                         if Lo_Val = Hi_Val then
+                            Error_Msg_N
+                              ("duplicate index in indexed aggregate",
+                                Table (J + 1).Choice);
+                            exit;
+ 
+                         elsif Lo_Val < Hi_Val then
+                            Error_Msg_N
+                              ("overlapping indices in indexed aggregate",
+                                Table (J + 1).Choice);
+                            exit;
+ 
+                         elsif Lo_Val > Hi_Val + 1 then
+                            Error_Msg_N
+                              ("missing index values", Table (J + 1).Choice);
+                            exit;
+                         end if;
+                      end loop;
+                   end;
+                end if;
              end if;
           end;
        end if;
*************** package body Sem_Aggr is
*** 3035,3041 ****
        Base : constant Node_Id := Expression (N);
  
     begin
!       Error_Msg_Ada_2020_Feature ("delta aggregate", Sloc (N));
  
        if not Is_Composite_Type (Typ) then
           Error_Msg_N ("not a composite type", N);
--- 3265,3271 ----
        Base : constant Node_Id := Expression (N);
  
     begin
!       Error_Msg_Ada_2022_Feature ("delta aggregate", Sloc (N));
  
        if not Is_Composite_Type (Typ) then
           Error_Msg_N ("not a composite type", N);
*************** package body Sem_Aggr is
*** 3098,3104 ****
  
                 if No (Scope (Id)) then
                    Set_Etype (Id, Index_Type);
!                   Set_Ekind (Id, E_Variable);
                    Set_Scope (Id, Ent);
                 end if;
                 Enter_Name (Id);
--- 3328,3334 ----
  
                 if No (Scope (Id)) then
                    Set_Etype (Id, Index_Type);
!                   Mutate_Ekind (Id, E_Variable);
                    Set_Scope (Id, Ent);
                 end if;
                 Enter_Name (Id);
*************** package body Sem_Aggr is
*** 3176,3184 ****
        function Nested_In (V1 : Node_Id; V2 : Node_Id) return Boolean;
        --  Determine whether variant V1 is within variant V2
  
!       function Variant_Depth (N : Node_Id) return Integer;
!       --  Determine the distance of a variant to the enclosing type
!       --  declaration.
  
        --------------------
        --  Check_Variant --
--- 3406,3413 ----
        function Nested_In (V1 : Node_Id; V2 : Node_Id) return Boolean;
        --  Determine whether variant V1 is within variant V2
  
!       function Variant_Depth (N : Node_Id) return Natural;
!       --  Determine the distance of a variant to the enclosing type declaration
  
        --------------------
        --  Check_Variant --
*************** package body Sem_Aggr is
*** 3284,3291 ****
        -- Variant_Depth --
        -------------------
  
!       function Variant_Depth (N : Node_Id) return Integer is
!          Depth : Integer;
           Par   : Node_Id;
  
        begin
--- 3513,3520 ----
        -- Variant_Depth --
        -------------------
  
!       function Variant_Depth (N : Node_Id) return Natural is
!          Depth : Natural;
           Par   : Node_Id;
  
        begin
*************** package body Sem_Aggr is
*** 3338,3344 ****
           end loop;
  
           pragma Assert (Present (Comp_Type));
!          Analyze_And_Resolve (Expression (Assoc), Comp_Type);
           Next (Assoc);
        end loop;
     end Resolve_Delta_Record_Aggregate;
--- 3567,3585 ----
           end loop;
  
           pragma Assert (Present (Comp_Type));
! 
!          --  A record_component_association in record_delta_aggregate shall not
!          --  use the box compound delimiter <> rather than an expression; see
!          --  RM 4.3.1(17.3/5).
! 
!          pragma Assert (Present (Expression (Assoc)) xor Box_Present (Assoc));
! 
!          if Box_Present (Assoc) then
!             Error_Msg_N
!               ("'<'> in record delta aggregate is not allowed", Assoc);
!          else
!             Analyze_And_Resolve (Expression (Assoc), Comp_Type);
!          end if;
           Next (Assoc);
        end loop;
     end Resolve_Delta_Record_Aggregate;
*************** package body Sem_Aggr is
*** 4743,4749 ****
           then
              Error_Msg_NE
                ("aggregate not available for type& whose ancestor "
!                & "has unknown discriminants ", N, Typ);
           end if;
  
           if Has_Unknown_Discriminants (Typ)
--- 4984,4990 ----
           then
              Error_Msg_NE
                ("aggregate not available for type& whose ancestor "
!                & "has unknown discriminants", N, Typ);
           end if;
  
           if Has_Unknown_Discriminants (Typ)
*************** package body Sem_Aggr is
*** 4922,4933 ****
                 Prepend_Elmt (Parent_Typ, To => Parent_Typ_List);
                 Parent_Typ := Etype (Parent_Typ);
  
                 if Nkind (Parent (Base_Type (Parent_Typ))) =
                                          N_Private_Type_Declaration
                   or else Nkind (Parent (Base_Type (Parent_Typ))) =
                                          N_Private_Extension_Declaration
                 then
!                   if Nkind (N) /= N_Extension_Aggregate then
                       Error_Msg_NE
                         ("type of aggregate has private ancestor&!",
                          N, Parent_Typ);
--- 5163,5181 ----
                 Prepend_Elmt (Parent_Typ, To => Parent_Typ_List);
                 Parent_Typ := Etype (Parent_Typ);
  
+                --  Check whether a private parent requires the use of
+                --  an extension aggregate. This test does not apply in
+                --  an instantiation: if the generic unit is legal so is
+                --  the instance.
+ 
                 if Nkind (Parent (Base_Type (Parent_Typ))) =
                                          N_Private_Type_Declaration
                   or else Nkind (Parent (Base_Type (Parent_Typ))) =
                                          N_Private_Extension_Declaration
                 then
!                   if Nkind (N) /= N_Extension_Aggregate
!                     and then not In_Instance
!                   then
                       Error_Msg_NE
                         ("type of aggregate has private ancestor&!",
                          N, Parent_Typ);
*************** package body Sem_Aggr is
*** 5031,5037 ****
  
           if Present (Get_Value (Component, Component_Associations (N))) then
              Error_Msg_NE
!               ("more than one value supplied for Component &", N, Component);
           end if;
  
           Next (Positional_Expr);
--- 5279,5285 ----
  
           if Present (Get_Value (Component, Component_Associations (N))) then
              Error_Msg_NE
!               ("more than one value supplied for component &", N, Component);
           end if;
  
           Next (Positional_Expr);
*************** package body Sem_Aggr is
*** 5085,5091 ****
                 --  replace the reference to the current instance by the target
                 --  object of the aggregate.
  
!                if Present (Parent (Component))
                   and then Nkind (Parent (Component)) = N_Component_Declaration
                   and then Present (Expression (Parent (Component)))
                 then
--- 5333,5350 ----
                 --  replace the reference to the current instance by the target
                 --  object of the aggregate.
  
!                if Is_Case_Choice_Pattern (N) then
! 
!                   --  Do not transform box component values in a case-choice
!                   --  aggregate.
! 
!                   Add_Association
!                    (Component      => Component,
!                     Expr           => Empty,
!                     Assoc_List     => New_Assoc_List,
!                     Is_Box_Present => True);
! 
!                elsif Present (Parent (Component))
                   and then Nkind (Parent (Component)) = N_Component_Declaration
                   and then Present (Expression (Parent (Component)))
                 then
*************** package body Sem_Aggr is
*** 5161,5234 ****
                       Assoc_List => New_Assoc_List);
                    Set_Has_Self_Reference (N);
  
!                --  A box-defaulted access component gets the value null. Also
!                --  included are components of private types whose underlying
!                --  type is an access type. In either case set the type of the
!                --  literal, for subsequent use in semantic checks.
! 
!                elsif Present (Underlying_Type (Ctyp))
!                  and then Is_Access_Type (Underlying_Type (Ctyp))
!                then
!                   --  If the component's type is private with an access type as
!                   --  its underlying type then we have to create an unchecked
!                   --  conversion to satisfy type checking.
! 
!                   if Is_Private_Type (Ctyp) then
!                      declare
!                         Qual_Null : constant Node_Id :=
!                                       Make_Qualified_Expression (Sloc (N),
!                                         Subtype_Mark =>
!                                           New_Occurrence_Of
!                                             (Underlying_Type (Ctyp), Sloc (N)),
!                                         Expression   => Make_Null (Sloc (N)));
! 
!                         Convert_Null : constant Node_Id :=
!                                          Unchecked_Convert_To
!                                            (Ctyp, Qual_Null);
! 
!                      begin
!                         Analyze_And_Resolve (Convert_Null, Ctyp);
!                         Add_Association
!                           (Component  => Component,
!                            Expr       => Convert_Null,
!                            Assoc_List => New_Assoc_List);
!                      end;
! 
!                   --  Otherwise the component type is non-private
! 
!                   else
!                      Expr := Make_Null (Sloc (N));
!                      Set_Etype (Expr, Ctyp);
! 
!                      Add_Association
!                        (Component  => Component,
!                         Expr       => Expr,
!                         Assoc_List => New_Assoc_List);
!                   end if;
! 
!                --  Ada 2012: If component is scalar with default value, use it
!                --  by converting it to Ctyp, so that subtype constraints are
!                --  checked.
! 
!                elsif Is_Scalar_Type (Ctyp)
!                  and then Has_Default_Aspect (Ctyp)
!                then
!                   declare
!                      Conv : constant Node_Id :=
!                        Convert_To
!                          (Typ  => Ctyp,
!                           Expr =>
!                             New_Copy_Tree
!                               (Default_Aspect_Value
!                                  (First_Subtype (Underlying_Type (Ctyp)))));
! 
!                   begin
!                      Analyze_And_Resolve (Conv, Ctyp);
!                      Add_Association
!                        (Component  => Component,
!                         Expr       => Conv,
!                         Assoc_List => New_Assoc_List);
!                   end;
  
                 elsif Has_Non_Null_Base_Init_Proc (Ctyp)
                   or else not Expander_Active
--- 5420,5431 ----
                       Assoc_List => New_Assoc_List);
                    Set_Has_Self_Reference (N);
  
!                elsif Needs_Simple_Initialization (Ctyp) then
!                   Add_Association
!                     (Component      => Component,
!                      Expr           => Empty,
!                      Assoc_List     => New_Assoc_List,
!                      Is_Box_Present => True);
  
                 elsif Has_Non_Null_Base_Init_Proc (Ctyp)
                   or else not Expander_Active
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_aggr.ads gcc-12.1.0/gcc/ada/sem_aggr.ads
*** gcc-11.3.0/gcc/ada/sem_aggr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_aggr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_attr.adb gcc-12.1.0/gcc/ada/sem_attr.adb
*** gcc-11.3.0/gcc/ada/sem_attr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_attr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 25,85 ****
  
  with Ada.Characters.Latin_1; use Ada.Characters.Latin_1;
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
  with Eval_Fat;
! with Exp_Dist; use Exp_Dist;
! with Exp_Util; use Exp_Util;
! with Expander; use Expander;
! with Freeze;   use Freeze;
! with Gnatvsn;  use Gnatvsn;
! with Itypes;   use Itypes;
! with Lib;      use Lib;
! with Lib.Xref; use Lib.Xref;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
  with Sdefault;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Cat;  use Sem_Cat;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Ch10; use Sem_Ch10;
! with Sem_Dim;  use Sem_Dim;
! with Sem_Dist; use Sem_Dist;
! with Sem_Elab; use Sem_Elab;
! with Sem_Elim; use Sem_Elim;
! with Sem_Eval; use Sem_Eval;
! with Sem_Prag; use Sem_Prag;
! with Sem_Res;  use Sem_Res;
! with Sem_Type; use Sem_Type;
! with Sem_Util; use Sem_Util;
  with Sem_Warn;
! with Stand;    use Stand;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
  with System;
! with Stringt;  use Stringt;
  with Style;
! with Stylesw;  use Stylesw;
! with Targparm; use Targparm;
! with Ttypes;   use Ttypes;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Uname;    use Uname;
! with Urealp;   use Urealp;
  
! with System.CRC32; use System.CRC32;
  
  package body Sem_Attr is
  
--- 25,90 ----
  
  with Ada.Characters.Latin_1; use Ada.Characters.Latin_1;
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
  with Eval_Fat;
! with Exp_Dist;       use Exp_Dist;
! with Exp_Util;       use Exp_Util;
! with Expander;       use Expander;
! with Freeze;         use Freeze;
! with Gnatvsn;        use Gnatvsn;
! with Itypes;         use Itypes;
! with Lib;            use Lib;
! with Lib.Xref;       use Lib.Xref;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
  with Sdefault;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch10;       use Sem_Ch10;
! with Sem_Dim;        use Sem_Dim;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Elim;       use Sem_Elim;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Res;        use Sem_Res;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
  with Sem_Warn;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
  with System;
! with Stringt;        use Stringt;
! with Strub;          use Strub;
  with Style;
! with Stylesw;        use Stylesw;
! with Targparm;       use Targparm;
! with Ttypes;         use Ttypes;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Uname;          use Uname;
! with Urealp;         use Urealp;
  
! with System.CRC32;   use System.CRC32;
  
  package body Sem_Attr is
  
*************** package body Sem_Attr is
*** 164,176 ****
        Attribute_Max_Alignment_For_Allocation => True,
        others                                 => False);
  
!    --  The following array is the list of attributes defined in the Ada 2020
     --  RM which are not defined in Ada 2012. These are recognized in Ada
     --  95/2005/2012 modes, but are considered to be implementation defined.
  
!    Attribute_20 : constant Attribute_Class_Array := Attribute_Class_Array'(
        Attribute_Enum_Rep                     |
        Attribute_Enum_Val                     => True,
        others                                 => False);
  
     --  The following array contains all attributes that imply a modification
--- 169,182 ----
        Attribute_Max_Alignment_For_Allocation => True,
        others                                 => False);
  
!    --  The following array is the list of attributes defined in the Ada 2022
     --  RM which are not defined in Ada 2012. These are recognized in Ada
     --  95/2005/2012 modes, but are considered to be implementation defined.
  
!    Attribute_22 : constant Attribute_Class_Array := Attribute_Class_Array'(
        Attribute_Enum_Rep                     |
        Attribute_Enum_Val                     => True,
+       Attribute_Preelaborable_Initialization => True,
        others                                 => False);
  
     --  The following array contains all attributes that imply a modification
*************** package body Sem_Attr is
*** 318,331 ****
        procedure Check_E2;
        --  Check that two attribute arguments are present
  
!       procedure Check_Enum_Image;
!       --  If the prefix type of 'Image is an enumeration type, set all its
!       --  literals as referenced, since the image function could possibly end
!       --  up referencing any of the literals indirectly. Same for Enum_Val.
!       --  Set the flag only if the reference is in the main code unit. Same
!       --  restriction when resolving 'Value; otherwise an improperly set
!       --  reference when analyzing an inlined body will lose a proper
!       --  warning on a useless with_clause.
  
        procedure Check_First_Last_Valid;
        --  Perform all checks for First_Valid and Last_Valid attributes
--- 324,344 ----
        procedure Check_E2;
        --  Check that two attribute arguments are present
  
!       procedure Check_Enum_Image (Check_Enumeration_Maps : Boolean := False);
!       --  Common processing for the Image and Value family of attributes,
!       --  including their Wide and Wide_Wide versions, Enum_Val, Img,
!       --  and Valid_Value.
!       --
!       --  If the prefix type of an attribute is an enumeration type, set all
!       --  its literals as referenced, since the attribute function can
!       --  indirectly reference any of the literals. Set the referenced flag
!       --  only if the attribute is in the main code unit; otherwise an
!       --  improperly set reference when analyzing an inlined body will lose a
!       --  proper warning on a useless with_clause.
!       --
!       --  If Check_Enumeration_Maps is True, then the attribute expansion
!       --  requires enumeration maps, so check whether restriction
!       --  No_Enumeration_Maps is active.
  
        procedure Check_First_Last_Valid;
        --  Perform all checks for First_Valid and Last_Valid attributes
*************** package body Sem_Attr is
*** 378,383 ****
--- 391,399 ----
        procedure Check_Real_Type;
        --  Verify that prefix of attribute N is fixed or float type
  
+       procedure Check_Enumeration_Type;
+       --  Verify that prefix of attribute N is an enumeration type
+ 
        procedure Check_Scalar_Type;
        --  Verify that prefix of attribute N is a scalar type
  
*************** package body Sem_Attr is
*** 834,843 ****
  
        begin
           --  Access and Unchecked_Access are illegal in declare_expressions,
!          --  according to the RM. We also make the GNAT-specific
!          --  Unrestricted_Access attribute illegal.
  
!          if In_Declare_Expr > 0 then
              Error_Attr ("% attribute cannot occur in a declare_expression", N);
           end if;
  
--- 850,862 ----
  
        begin
           --  Access and Unchecked_Access are illegal in declare_expressions,
!          --  according to the RM. We also make the GNAT Unrestricted_Access
!          --  attribute illegal if it comes from source.
  
!          if In_Declare_Expr > 0
!            and then (Attr_Id /= Attribute_Unrestricted_Access
!                       or else Comes_From_Source (N))
!          then
              Error_Attr ("% attribute cannot occur in a declare_expression", N);
           end if;
  
*************** package body Sem_Attr is
*** 905,913 ****
              --  a tagged type cleans constant indications from its scope).
  
              elsif Nkind (Parent (N)) = N_Unchecked_Type_Conversion
!               and then (Etype (Parent (N)) = RTE (RE_Prim_Ptr)
                            or else
!                         Etype (Parent (N)) = RTE (RE_Size_Ptr))
                and then Is_Dispatching_Operation
                           (Directly_Designated_Type (Etype (N)))
              then
--- 924,932 ----
              --  a tagged type cleans constant indications from its scope).
  
              elsif Nkind (Parent (N)) = N_Unchecked_Type_Conversion
!               and then (Is_RTE (Etype (Parent (N)), RE_Prim_Ptr)
                            or else
!                         Is_RTE (Etype (Parent (N)), RE_Size_Ptr))
                and then Is_Dispatching_Operation
                           (Directly_Designated_Type (Etype (N)))
              then
*************** package body Sem_Attr is
*** 970,976 ****
                    Set_Etype  (P, Typ);
                 end if;
  
!                if Typ = Scop then
                    declare
                       Q : Node_Id := Parent (N);
  
--- 989,1003 ----
                    Set_Etype  (P, Typ);
                 end if;
  
!                --  A current instance typically appears immediately within
!                --  the type declaration, but may be nested within an internally
!                --  generated temporary scope - as for an aggregate of a
!                --  discriminated component.
! 
!                if Typ = Scop
!                  or else (In_Open_Scopes (Typ)
!                            and then not Comes_From_Source (Scop))
!                then
                    declare
                       Q : Node_Id := Parent (N);
  
*************** package body Sem_Attr is
*** 1157,1163 ****
           function Is_Within
             (Nod      : Node_Id;
              Encl_Nod : Node_Id) return Boolean;
!          --  Subsidiary to Check_Placemenet_In_XXX. Determine whether arbitrary
           --  node Nod is within enclosing node Encl_Nod.
  
           procedure Placement_Error;
--- 1184,1190 ----
           function Is_Within
             (Nod      : Node_Id;
              Encl_Nod : Node_Id) return Boolean;
!          --  Subsidiary to Check_Placement_In_XXX. Determine whether arbitrary
           --  node Nod is within enclosing node Encl_Nod.
  
           procedure Placement_Error;
*************** package body Sem_Attr is
*** 1321,1326 ****
--- 1348,1363 ----
           Legal   := False;
           Spec_Id := Empty;
  
+          --  Skip processing during preanalysis of class-wide preconditions and
+          --  postconditions since at this stage the expression is not installed
+          --  yet on its definite context.
+ 
+          if Inside_Class_Condition_Preanalysis then
+             Legal   := True;
+             Spec_Id := Current_Scope;
+             return;
+          end if;
+ 
           --  Traverse the parent chain to find the aspect or pragma where the
           --  attribute resides.
  
*************** package body Sem_Attr is
*** 1385,1390 ****
--- 1422,1436 ----
                 return;
              end if;
  
+          --  'Old attribute reference ok in a _Postconditions procedure
+ 
+          elsif Nkind (Prag) = N_Subprogram_Body
+            and then not Comes_From_Source (Prag)
+            and then Nkind (Corresponding_Spec (Prag)) = N_Defining_Identifier
+            and then Chars (Corresponding_Spec (Prag)) = Name_uPostconditions
+          then
+             null;
+ 
           --  Otherwise the placement of the attribute is illegal
  
           else
*************** package body Sem_Attr is
*** 1396,1401 ****
--- 1442,1456 ----
  
           if Nkind (Prag) = N_Aspect_Specification then
              Subp_Decl := Parent (Prag);
+          elsif Nkind (Prag) = N_Subprogram_Body then
+             declare
+                Enclosing_Scope : constant Node_Id :=
+                  Scope (Corresponding_Spec (Prag));
+             begin
+                pragma Assert (Postconditions_Proc (Enclosing_Scope)
+                                = Corresponding_Spec (Prag));
+                Subp_Decl := Parent (Parent (Enclosing_Scope));
+             end;
           else
              Subp_Decl := Find_Related_Declaration_Or_Body (Prag);
           end if;
*************** package body Sem_Attr is
*** 1464,1475 ****
           --  Check that Image_Type is legal as the type of a prefix of 'Image.
           --  Legality depends on the Ada language version.
  
           procedure Check_Image_Type (Image_Type : Entity_Id) is
           begin
!             if Ada_Version < Ada_2020
                and then not Is_Scalar_Type (Image_Type)
              then
!                Error_Msg_Ada_2020_Feature ("nonscalar ''Image", Sloc (P));
                 Error_Attr;
              end if;
           end Check_Image_Type;
--- 1519,1538 ----
           --  Check that Image_Type is legal as the type of a prefix of 'Image.
           --  Legality depends on the Ada language version.
  
+          ----------------------
+          -- Check_Image_Type --
+          ----------------------
+ 
           procedure Check_Image_Type (Image_Type : Entity_Id) is
           begin
!             --  Image_Type may be empty in case of another error detected,
!             --  or if an N_Raise_xxx_Error node is a parent of N.
! 
!             if Ada_Version < Ada_2022
!               and then Present (Image_Type)
                and then not Is_Scalar_Type (Image_Type)
              then
!                Error_Msg_Ada_2022_Feature ("nonscalar ''Image", Sloc (P));
                 Error_Attr;
              end if;
           end Check_Image_Type;
*************** package body Sem_Attr is
*** 1486,1506 ****
              Set_Etype (N, Str_Typ);
              Check_Image_Type (Etype (P));
  
!             if Attr_Id /= Attribute_Img and then Ada_Version < Ada_2012 then
                 Error_Msg_Ada_2012_Feature ("|Object''Image", Sloc (P));
              end if;
           else
              Check_E1;
              Set_Etype (N, Str_Typ);
  
-             --  ???It's not clear why 'Img should behave any differently than
-             --  'Image.
- 
-             if Attr_Id = Attribute_Img then
-                Error_Attr_P
-                  ("prefix of % attribute must be a scalar object name");
-             end if;
- 
              pragma Assert (Is_Entity_Name (P) and then Is_Type (Entity (P)));
  
              if Ekind (Entity (P)) = E_Incomplete_Type
--- 1549,1561 ----
              Set_Etype (N, Str_Typ);
              Check_Image_Type (Etype (P));
  
!             if Attr_Id /= Attribute_Img then
                 Error_Msg_Ada_2012_Feature ("|Object''Image", Sloc (P));
              end if;
           else
              Check_E1;
              Set_Etype (N, Str_Typ);
  
              pragma Assert (Is_Entity_Name (P) and then Is_Type (Entity (P)));
  
              if Ekind (Entity (P)) = E_Incomplete_Type
*************** package body Sem_Attr is
*** 1516,1522 ****
              Validate_Non_Static_Attribute_Function_Call;
           end if;
  
!          Check_Enum_Image;
  
           --  Check restriction No_Fixed_IO. Note the check of Comes_From_Source
           --  to avoid giving a duplicate message for when Image attributes
--- 1571,1577 ----
              Validate_Non_Static_Attribute_Function_Call;
           end if;
  
!          Check_Enum_Image (Check_Enumeration_Maps => True);
  
           --  Check restriction No_Fixed_IO. Note the check of Comes_From_Source
           --  to avoid giving a duplicate message for when Image attributes
*************** package body Sem_Attr is
*** 1582,1588 ****
  
           --  Local variables
  
-          Dims  : Int;
           Index : Entity_Id;
  
        --  Start of processing for Check_Array_Or_Scalar_Type
--- 1637,1642 ----
*************** package body Sem_Attr is
*** 1646,1659 ****
                 Set_Etype (N, Base_Type (Etype (Index)));
  
              else
!                Dims := UI_To_Int (Intval (E1));
! 
!                for J in 1 .. Dims - 1 loop
!                   Next_Index (Index);
!                end loop;
  
                 Set_Etype (N, Base_Type (Etype (Index)));
-                Set_Etype (E1, Standard_Integer);
              end if;
           end if;
        end Check_Array_Or_Scalar_Type;
--- 1700,1715 ----
                 Set_Etype (N, Base_Type (Etype (Index)));
  
              else
!                declare
!                   Udims : constant Uint := Expr_Value (E1);
!                   Dims  : constant Int  := UI_To_Int (Udims);
!                begin
!                   for J in 1 .. Dims - 1 loop
!                      Next_Index (Index);
!                   end loop;
!                end;
  
                 Set_Etype (N, Base_Type (Etype (Index)));
              end if;
           end if;
        end Check_Array_Or_Scalar_Type;
*************** package body Sem_Attr is
*** 1951,1960 ****
        -- Check_Enum_Image --
        ----------------------
  
!       procedure Check_Enum_Image is
           Lit : Entity_Id;
  
        begin
           --  When an enumeration type appears in an attribute reference, all
           --  literals of the type are marked as referenced. This must only be
           --  done if the attribute reference appears in the current source.
--- 2007,2029 ----
        -- Check_Enum_Image --
        ----------------------
  
!       procedure Check_Enum_Image (Check_Enumeration_Maps : Boolean := False) is
           Lit : Entity_Id;
  
        begin
+          --  Ensure that Check_Enumeration_Maps parameter is set precisely for
+          --  attributes whose implementation requires enumeration maps.
+ 
+          pragma Assert
+            (Check_Enumeration_Maps = (Attr_Id in Attribute_Image
+                                                | Attribute_Img
+                                                | Attribute_Valid_Value
+                                                | Attribute_Value
+                                                | Attribute_Wide_Image
+                                                | Attribute_Wide_Value
+                                                | Attribute_Wide_Wide_Image
+                                                | Attribute_Wide_Wide_Value));
+ 
           --  When an enumeration type appears in an attribute reference, all
           --  literals of the type are marked as referenced. This must only be
           --  done if the attribute reference appears in the current source.
*************** package body Sem_Attr is
*** 1964,1969 ****
--- 2033,2042 ----
           if Is_Enumeration_Type (P_Base_Type)
             and then In_Extended_Main_Code_Unit (N)
           then
+             if Check_Enumeration_Maps then
+                Check_Restriction (No_Enumeration_Maps, N);
+             end if;
+ 
              Lit := First_Literal (P_Base_Type);
              while Present (Lit) loop
                 Set_Referenced (Lit);
*************** package body Sem_Attr is
*** 2294,2313 ****
        begin
           if Is_Entity_Name (P) then
              declare
!                K : constant Entity_Kind := Ekind (Entity (P));
!                T : constant Entity_Id   := Etype (Entity (P));
! 
              begin
!                if K in Subprogram_Kind
!                  or else K in Task_Kind
!                  or else K in Protected_Kind
!                  or else K = E_Package
!                  or else K in Generic_Unit_Kind
!                  or else (K = E_Variable
!                             and then
!                               (Is_Task_Type (T)
!                                  or else
!                                Is_Protected_Type (T)))
                 then
                    return;
                 end if;
--- 2367,2381 ----
        begin
           if Is_Entity_Name (P) then
              declare
!                E : constant Entity_Id := Entity (P);
              begin
!                if Ekind (E) in E_Protected_Type
!                              | E_Task_Type
!                              | Entry_Kind
!                              | Generic_Unit_Kind
!                              | Subprogram_Kind
!                              | E_Package
!                  or else Is_Single_Concurrent_Object (E)
                 then
                    return;
                 end if;
*************** package body Sem_Attr is
*** 2330,2335 ****
--- 2398,2416 ----
           end if;
        end Check_Real_Type;
  
+       ----------------------------
+       -- Check_Enumeration_Type --
+       ----------------------------
+ 
+       procedure Check_Enumeration_Type is
+       begin
+          Check_Type;
+ 
+          if not Is_Enumeration_Type (P_Type) then
+             Error_Attr_P ("prefix of % attribute must be enumeration type");
+          end if;
+       end Check_Enumeration_Type;
+ 
        -----------------------
        -- Check_Scalar_Type --
        -----------------------
*************** package body Sem_Attr is
*** 2381,2395 ****
           Analyze_And_Resolve (E1);
  
           --  Check that the first argument is
!          --  Ada.Strings.Text_Output.Sink'Class.
  
           --  Note: the double call to Root_Type here is needed because the
           --  root type of a class-wide type is the corresponding type (e.g.
           --  X for X'Class, and we really want to go to the root.)
  
!          if Root_Type (Root_Type (Etype (E1))) /= RTE (RE_Sink) then
              Error_Attr
!               ("expected Ada.Strings.Text_Output.Sink''Class", E1);
           end if;
  
           --  Check that the second argument is of the right type
--- 2462,2479 ----
           Analyze_And_Resolve (E1);
  
           --  Check that the first argument is
!          --  Ada.Strings.Text_Buffers.Root_Buffer_Type'Class.
  
           --  Note: the double call to Root_Type here is needed because the
           --  root type of a class-wide type is the corresponding type (e.g.
           --  X for X'Class, and we really want to go to the root.)
  
!          if not Is_RTE (Root_Type (Root_Type (Etype (E1))),
!                         RE_Root_Buffer_Type)
!          then
              Error_Attr
!               ("expected Ada.Strings.Text_Buffers.Root_Buffer_Type''Class",
!                E1);
           end if;
  
           --  Check that the second argument is of the right type
*************** package body Sem_Attr is
*** 2546,2551 ****
--- 2630,2644 ----
              Check_Restriction (No_Exception_Registration, P);
           end if;
  
+          --  If the No_Tagged_Type_Registration restriction is active, then
+          --  class-wide streaming attributes are not allowed.
+ 
+          if Restriction_Check_Required (No_Tagged_Type_Registration)
+            and then Is_Class_Wide_Type (P_Type)
+          then
+             Check_Restriction (No_Tagged_Type_Registration, P);
+          end if;
+ 
           --  Here we must check that the first argument is an access type
           --  that is compatible with Ada.Streams.Root_Stream_Type'Class.
  
*************** package body Sem_Attr is
*** 2557,2564 ****
           --  X for X'Class, and we really want to go to the root.)
  
           if not Is_Access_Type (Etyp)
!            or else Root_Type (Root_Type (Designated_Type (Etyp))) /=
!                      RTE (RE_Root_Stream_Type)
           then
              Error_Attr
                ("expected access to Ada.Streams.Root_Stream_Type''Class", E1);
--- 2650,2657 ----
           --  X for X'Class, and we really want to go to the root.)
  
           if not Is_Access_Type (Etyp)
!            or else not Is_RTE (Root_Type (Root_Type (Designated_Type (Etyp))),
!                                RE_Root_Stream_Type)
           then
              Error_Attr
                ("expected access to Ada.Streams.Root_Stream_Type''Class", E1);
*************** package body Sem_Attr is
*** 2779,2785 ****
           if Bad_Unordered_Enumeration_Reference (N, P_Base_Type) then
              Error_Msg_Sloc := Sloc (P_Base_Type);
              Error_Msg_NE
!               ("comparison on unordered enumeration type& declared#?U?",
                 N, P_Base_Type);
           end if;
        end Min_Max;
--- 2872,2878 ----
           if Bad_Unordered_Enumeration_Reference (N, P_Base_Type) then
              Error_Msg_Sloc := Sloc (P_Base_Type);
              Error_Msg_NE
!               ("comparison on unordered enumeration type& declared#?.u?",
                 N, P_Base_Type);
           end if;
        end Min_Max;
*************** package body Sem_Attr is
*** 2838,2854 ****
  
           case Uneval_Old_Setting is
              when 'E' =>
!                --  ??? In the case where Ada_Version is < Ada_2020 and
!                --  an illegal 'Old prefix would be legal in Ada_2020,
!                --  we'd like to call Error_Msg_Ada_2020_Feature.
                 --  Identifying that case involves some work.
  
                 Error_Attr_P
                   ("prefix of attribute % that is potentially "
                    & "unevaluated must statically name an entity"
  
!                   --  further text needed for accuracy if Ada_2020
!                   & (if Ada_Version >= Ada_2020
                         and then Attr_Id = Attribute_Old
                       then " or be eligible for conditional evaluation"
                            & " (RM 6.1.1 (27))"
--- 2931,2947 ----
  
           case Uneval_Old_Setting is
              when 'E' =>
!                --  ??? In the case where Ada_Version is < Ada_2022 and
!                --  an illegal 'Old prefix would be legal in Ada_2022,
!                --  we'd like to call Error_Msg_Ada_2022_Feature.
                 --  Identifying that case involves some work.
  
                 Error_Attr_P
                   ("prefix of attribute % that is potentially "
                    & "unevaluated must statically name an entity"
  
!                   --  further text needed for accuracy if Ada_2022
!                   & (if Ada_Version >= Ada_2022
                         and then Attr_Id = Attribute_Old
                       then " or be eligible for conditional evaluation"
                            & " (RM 6.1.1 (27))"
*************** package body Sem_Attr is
*** 2925,2937 ****
  
        --  Deal with Ada 2005 attributes that are implementation attributes
        --  because they appear in a version of Ada before Ada 2005, ditto for
!       --  Ada 2012 and Ada 2020 attributes appearing in an earlier version.
  
        if (Attribute_05 (Attr_Id) and then Ada_Version < Ada_2005)
              or else
           (Attribute_12 (Attr_Id) and then Ada_Version < Ada_2012)
              or else
!          (Attribute_20 (Attr_Id) and then Ada_Version < Ada_2020)
        then
           Check_Restriction (No_Implementation_Attributes, N);
        end if;
--- 3018,3030 ----
  
        --  Deal with Ada 2005 attributes that are implementation attributes
        --  because they appear in a version of Ada before Ada 2005, ditto for
!       --  Ada 2012 and Ada 2022 attributes appearing in an earlier version.
  
        if (Attribute_05 (Attr_Id) and then Ada_Version < Ada_2005)
              or else
           (Attribute_12 (Attr_Id) and then Ada_Version < Ada_2012)
              or else
!          (Attribute_22 (Attr_Id) and then Ada_Version < Ada_2022)
        then
           Check_Restriction (No_Implementation_Attributes, N);
        end if;
*************** package body Sem_Attr is
*** 5058,5068 ****
                 --  Entities mentioned within the prefix of attribute 'Old must
                 --  be global to the related postcondition. If this is not the
                 --  case, then the scope of the local entity is nested within
!                --  that of the subprogram.
  
                 elsif Is_Entity_Name (Nod)
                   and then Present (Entity (Nod))
                   and then Scope_Within (Scope (Entity (Nod)), Subp_Id)
                 then
                    Error_Attr
                      ("prefix of attribute % cannot reference local entities",
--- 5151,5164 ----
                 --  Entities mentioned within the prefix of attribute 'Old must
                 --  be global to the related postcondition. If this is not the
                 --  case, then the scope of the local entity is nested within
!                --  that of the subprogram. Moreover, we need to know whether
!                --  Entity (Nod) occurs in the tree rooted at the prefix to
!                --  ensure the entity is not declared within then prefix itself.
  
                 elsif Is_Entity_Name (Nod)
                   and then Present (Entity (Nod))
                   and then Scope_Within (Scope (Entity (Nod)), Subp_Id)
+                  and then not In_Subtree (Entity (Nod), P)
                 then
                    Error_Attr
                      ("prefix of attribute % cannot reference local entities",
*************** package body Sem_Attr is
*** 5170,5176 ****
           else
              --  Ensure that the prefix of attribute 'Old is an entity when it
              --  is potentially unevaluated (6.1.1 (27/3)). This rule is
!             --  relaxed in Ada2020 - this relaxation is reflected in the
              --  call (below) to Eligible_For_Conditional_Evaluation.
  
              if Is_Potentially_Unevaluated (N)
--- 5266,5272 ----
           else
              --  Ensure that the prefix of attribute 'Old is an entity when it
              --  is potentially unevaluated (6.1.1 (27/3)). This rule is
!             --  relaxed in Ada 2022 - this relaxation is reflected in the
              --  call (below) to Eligible_For_Conditional_Evaluation.
  
              if Is_Potentially_Unevaluated (N)
*************** package body Sem_Attr is
*** 5354,5359 ****
--- 5450,5494 ----
              end if;
           end if;
  
+       ----------------------------------
+       -- Preelaborable_Initialization --
+       ----------------------------------
+ 
+       when Attribute_Preelaborable_Initialization =>
+          Check_E0;
+          Check_Type;
+ 
+          --  If we're in an instance, we know that the legality of the
+          --  attribute prefix type was already checked in the generic.
+ 
+          if not In_Instance then
+ 
+             --  If the prefix type is a generic formal type, then it must be
+             --  either a formal private type or a formal derived type.
+ 
+             if Is_Generic_Type (P_Type) then
+                if not Is_Private_Type (P_Type)
+                  and then not Is_Derived_Type (P_Type)
+                then
+                   Error_Attr_P ("formal type prefix of % attribute must be "
+                                  & "formal private or formal derived type");
+                end if;
+ 
+             --  Otherwise, the prefix type must be a nonformal composite
+             --  type declared within the visible part of a package or
+             --  generic package.
+ 
+             elsif not Is_Composite_Type (P_Type)
+               or else not Original_View_In_Visible_Part (P_Type)
+             then
+                Error_Attr_P
+                  ("prefix of % attribute must be composite type declared "
+                     & "in visible part of a package or generic package");
+             end if;
+          end if;
+ 
+          Set_Etype (N, Standard_Boolean);
+ 
        --------------
        -- Priority --
        --------------
*************** package body Sem_Attr is
*** 5377,5383 ****
             or else (Is_Access_Type (Etype (P))
                        and then Is_Protected_Type (Designated_Type (Etype (P))))
           then
!             Resolve (P, Etype (P));
           else
              Error_Attr_P ("prefix of % attribute must be a protected object");
           end if;
--- 5512,5518 ----
             or else (Is_Access_Type (Etype (P))
                        and then Is_Protected_Type (Designated_Type (Etype (P))))
           then
!             Resolve (P);
           else
              Error_Attr_P ("prefix of % attribute must be a protected object");
           end if;
*************** package body Sem_Attr is
*** 5678,5684 ****
                    null;
                 else
                    Error_Msg_NE
!                     ("cannot apply Reduce to object of type$", N, Typ);
                 end if;
  
              elsif Present (Expressions (Stream))
--- 5813,5819 ----
                    null;
                 else
                    Error_Msg_NE
!                     ("cannot apply Reduce to object of type&", N, Typ);
                 end if;
  
              elsif Present (Expressions (Stream))
*************** package body Sem_Attr is
*** 6547,6553 ****
           Initialize (CRC);
           Compute_Type_Key (Entity (P));
  
!          if not Is_Frozen (Entity (P)) then
              Error_Msg_N ("premature usage of Type_Key?", N);
           end if;
  
--- 6682,6691 ----
           Initialize (CRC);
           Compute_Type_Key (Entity (P));
  
!          if not Is_Frozen (Entity (P))
!            and then not Is_Generic_Type (Entity (P))
!            and then not Is_Generic_Actual_Type (Entity (P))
!          then
              Error_Msg_N ("premature usage of Type_Key?", N);
           end if;
  
*************** package body Sem_Attr is
*** 7041,7046 ****
--- 7179,7209 ----
           Set_Etype (N, Standard_Boolean);
        end Valid;
  
+       -----------------
+       -- Valid_Value --
+       -----------------
+ 
+       when Attribute_Valid_Value =>
+          Check_E1;
+          Check_Enumeration_Type;
+          Check_Enum_Image (Check_Enumeration_Maps => True);
+          Set_Etype (N, Standard_Boolean);
+          Validate_Non_Static_Attribute_Function_Call;
+ 
+          if P_Type in Standard_Boolean
+                     | Standard_Character
+                     | Standard_Wide_Character
+                     | Standard_Wide_Wide_Character
+          then
+             Error_Attr_P
+               ("prefix of % attribute must not be a type in Standard");
+          end if;
+ 
+          if Discard_Names (First_Subtype (P_Type)) then
+             Error_Attr_P
+               ("prefix of % attribute must not have Discard_Names");
+          end if;
+ 
        -------------------
        -- Valid_Scalars --
        -------------------
*************** package body Sem_Attr is
*** 7110,7142 ****
        =>
           Check_E1;
           Check_Scalar_Type;
! 
!          --  Case of enumeration type
! 
!          --  When an enumeration type appears in an attribute reference, all
!          --  literals of the type are marked as referenced. This must only be
!          --  done if the attribute reference appears in the current source.
!          --  Otherwise the information on references may differ between a
!          --  normal compilation and one that performs inlining.
! 
!          if Is_Enumeration_Type (P_Type)
!            and then In_Extended_Main_Code_Unit (N)
!          then
!             Check_Restriction (No_Enumeration_Maps, N);
! 
!             --  Mark all enumeration literals as referenced, since the use of
!             --  the Value attribute can implicitly reference any of the
!             --  literals of the enumeration base type.
! 
!             declare
!                Ent : Entity_Id := First_Literal (P_Base_Type);
!             begin
!                while Present (Ent) loop
!                   Set_Referenced (Ent);
!                   Next_Literal (Ent);
!                end loop;
!             end;
!          end if;
  
           --  Set Etype before resolving expression because expansion of
           --  expression may require enclosing type. Note that the type
--- 7273,7279 ----
        =>
           Check_E1;
           Check_Scalar_Type;
!          Check_Enum_Image (Check_Enumeration_Maps => True);
  
           --  Set Etype before resolving expression because expansion of
           --  expression may require enclosing type. Note that the type
*************** package body Sem_Attr is
*** 7976,7989 ****
                 end if;
              end;
  
-          --  For Size, give size of object if available, otherwise we
-          --  cannot fold Size.
- 
           elsif Id = Attribute_Size then
              if Is_Entity_Name (P)
!               and then Known_Static_Esize (Entity (P))
              then
                 Compile_Time_Known_Attribute (N, Esize (Entity (P)));
              else
                 Check_Expressions;
              end if;
--- 8113,8139 ----
                 end if;
              end;
  
           elsif Id = Attribute_Size then
+             --  For Enum_Lit'Size, use Enum_Type'Object_Size. Taking the 'Size
+             --  of a literal is kind of a strange thing to do, so we don't want
+             --  to pass this oddity on to the back end. Note that Etype of an
+             --  enumeration literal is always a (base) type, never a
+             --  constrained subtype, so the Esize is always known.
+ 
              if Is_Entity_Name (P)
!               and then Ekind (Entity (P)) = E_Enumeration_Literal
!             then
!                pragma Assert (Known_Static_Esize (Etype (P)));
!                Compile_Time_Known_Attribute (N, Esize (Etype (P)));
! 
!             --  Otherwise, if Size is available, use that
! 
!             elsif Is_Entity_Name (P) and then Known_Static_Esize (Entity (P))
              then
                 Compile_Time_Known_Attribute (N, Esize (Entity (P)));
+ 
+             --  Otherwise, we cannot fold
+ 
              else
                 Check_Expressions;
              end if;
*************** package body Sem_Attr is
*** 8018,8030 ****
        end if;
  
        --  If we are asked to evaluate an attribute where the prefix is a
!       --  non-frozen generic actual type whose RM_Size is still set to zero,
        --  then abandon the effort.
  
        if Is_Type (P_Entity)
          and then (not Is_Frozen (P_Entity)
                     and then Is_Generic_Actual_Type (P_Entity)
!                    and then RM_Size (P_Entity) = 0)
  
          --  However, the attribute Unconstrained_Array must be evaluated,
          --  since it is documented to be a static attribute (and can for
--- 8168,8180 ----
        end if;
  
        --  If we are asked to evaluate an attribute where the prefix is a
!       --  non-frozen generic actual type whose RM_Size has not been set,
        --  then abandon the effort.
  
        if Is_Type (P_Entity)
          and then (not Is_Frozen (P_Entity)
                     and then Is_Generic_Actual_Type (P_Entity)
!                    and then not Known_RM_Size (P_Entity))
  
          --  However, the attribute Unconstrained_Array must be evaluated,
          --  since it is documented to be a static attribute (and can for
*************** package body Sem_Attr is
*** 8116,8130 ****
        --  is to say if we are within an instantiation. Same processing applies
        --  to selected GNAT attributes.
  
!       elsif (Id = Attribute_Atomic_Always_Lock_Free or else
!              Id = Attribute_Definite                or else
!              Id = Attribute_Descriptor_Size         or else
!              Id = Attribute_Has_Access_Values       or else
!              Id = Attribute_Has_Discriminants       or else
!              Id = Attribute_Has_Tagged_Values       or else
!              Id = Attribute_Lock_Free               or else
!              Id = Attribute_Type_Class              or else
!              Id = Attribute_Unconstrained_Array     or else
               Id = Attribute_Max_Alignment_For_Allocation)
          and then not Is_Generic_Type (P_Entity)
        then
--- 8266,8281 ----
        --  is to say if we are within an instantiation. Same processing applies
        --  to selected GNAT attributes.
  
!       elsif (Id = Attribute_Atomic_Always_Lock_Free      or else
!              Id = Attribute_Definite                     or else
!              Id = Attribute_Descriptor_Size              or else
!              Id = Attribute_Has_Access_Values            or else
!              Id = Attribute_Has_Discriminants            or else
!              Id = Attribute_Has_Tagged_Values            or else
!              Id = Attribute_Lock_Free                    or else
!              Id = Attribute_Preelaborable_Initialization or else
!              Id = Attribute_Type_Class                   or else
!              Id = Attribute_Unconstrained_Array          or else
               Id = Attribute_Max_Alignment_For_Allocation)
          and then not Is_Generic_Type (P_Entity)
        then
*************** package body Sem_Attr is
*** 8249,8263 ****
        --  unconstrained arrays. Furthermore, it is essential to fold this
        --  in the packed case, since otherwise the value will be incorrect.
  
!       elsif Id = Attribute_Atomic_Always_Lock_Free or else
!             Id = Attribute_Definite                or else
!             Id = Attribute_Descriptor_Size         or else
!             Id = Attribute_Has_Access_Values       or else
!             Id = Attribute_Has_Discriminants       or else
!             Id = Attribute_Has_Tagged_Values       or else
!             Id = Attribute_Lock_Free               or else
!             Id = Attribute_Type_Class              or else
!             Id = Attribute_Unconstrained_Array     or else
              Id = Attribute_Component_Size
        then
           Static := False;
--- 8400,8419 ----
        --  unconstrained arrays. Furthermore, it is essential to fold this
        --  in the packed case, since otherwise the value will be incorrect.
  
!       --  Folding can also be done for Preelaborable_Initialization based on
!       --  whether the prefix type has preelaborable initialization, even though
!       --  the attribute is nonstatic.
! 
!       elsif Id = Attribute_Atomic_Always_Lock_Free      or else
!             Id = Attribute_Definite                     or else
!             Id = Attribute_Descriptor_Size              or else
!             Id = Attribute_Has_Access_Values            or else
!             Id = Attribute_Has_Discriminants            or else
!             Id = Attribute_Has_Tagged_Values            or else
!             Id = Attribute_Lock_Free                    or else
!             Id = Attribute_Preelaborable_Initialization or else
!             Id = Attribute_Type_Class                   or else
!             Id = Attribute_Unconstrained_Array          or else
              Id = Attribute_Component_Size
        then
           Static := False;
*************** package body Sem_Attr is
*** 9019,9030 ****
        -- Leading_Part --
        ------------------
  
!       when Attribute_Leading_Part =>
           Fold_Ureal
             (N,
              Eval_Fat.Leading_Part
!               (P_Base_Type, Expr_Value_R (E1), Expr_Value (E2)),
              Static);
  
        ------------
        -- Length --
--- 9175,9200 ----
        -- Leading_Part --
        ------------------
  
!       when Attribute_Leading_Part => Leading_Part : declare
!          Radix_Digits : constant Uint := Expr_Value (E2);
! 
!       begin
!          if UI_Le (Radix_Digits, Uint_0) then
!             Apply_Compile_Time_Constraint_Error
!               (N, "Radix_Digits in Leading_Part is zero or negative",
!                CE_Explicit_Raise,
!                Warn => not Static);
! 
!             Check_Expressions;
!             return;
!          end if;
! 
           Fold_Ureal
             (N,
              Eval_Fat.Leading_Part
!               (P_Base_Type, Expr_Value_R (E1), Radix_Digits),
              Static);
+       end Leading_Part;
  
        ------------
        -- Length --
*************** package body Sem_Attr is
*** 9077,9083 ****
                    Fold_Uint (N, Uint_0, Static);
  
                 when LT =>
!                   if Diff /= No_Uint then
                       Fold_Uint (N, Diff + 1, Static);
                    end if;
  
--- 9247,9253 ----
                    Fold_Uint (N, Uint_0, Static);
  
                 when LT =>
!                   if Present (Diff) then
                       Fold_Uint (N, Diff + 1, Static);
                    end if;
  
*************** package body Sem_Attr is
*** 9103,9114 ****
        -- Machine --
        -------------
  
        when Attribute_Machine =>
           Fold_Ureal
!            (N,
!             Eval_Fat.Machine
!               (P_Base_Type, Expr_Value_R (E1), Eval_Fat.Round, N),
!             Static);
  
        ------------------
        -- Machine_Emax --
--- 9273,9284 ----
        -- Machine --
        -------------
  
+       --  We use the same rounding as the one used for RM 4.9(38/2)
+ 
        when Attribute_Machine =>
           Fold_Ureal
!            (N, Machine_Number (P_Base_Type, Expr_Value_R (E1), N), Static);
!          Set_Is_Machine_Number (N);
  
        ------------------
        -- Machine_Emax --
*************** package body Sem_Attr is
*** 9541,9546 ****
--- 9711,9727 ----
              Fold_Uint (N, Expr_Value (E1) - 1, Static);
           end if;
  
+       ----------------------------------
+       -- Preelaborable_Initialization --
+       ----------------------------------
+ 
+       when Attribute_Preelaborable_Initialization =>
+          Fold_Uint
+            (N,
+             UI_From_Int
+               (Boolean'Pos (Has_Preelaborable_Initialization (P_Type))),
+             Static);
+ 
        -----------
        -- Range --
        -----------
*************** package body Sem_Attr is
*** 9585,9591 ****
                 Fold_Uint (N, Uint_0, Static);
  
              when LT =>
!                if Diff /= No_Uint then
                    Fold_Uint (N, Diff + 1, Static);
                 end if;
  
--- 9766,9772 ----
                 Fold_Uint (N, Uint_0, Static);
  
              when LT =>
!                if Present (Diff) then
                    Fold_Uint (N, Diff + 1, Static);
                 end if;
  
*************** package body Sem_Attr is
*** 9756,9764 ****
              P_TypeA : constant Entity_Id := Underlying_Type (P_Type);
  
           begin
!             if Is_Scalar_Type (P_TypeA)
!               or else RM_Size (P_TypeA) /= Uint_0
!             then
                 --  VADS_Size case
  
                 if Id = Attribute_VADS_Size or else Use_VADS_Size then
--- 9937,9945 ----
              P_TypeA : constant Entity_Id := Underlying_Type (P_Type);
  
           begin
!             pragma Assert
!               (if Is_Scalar_Type (P_TypeA) then Known_RM_Size (P_TypeA));
!             if Known_RM_Size (P_TypeA) then
                 --  VADS_Size case
  
                 if Id = Attribute_VADS_Size or else Use_VADS_Size then
*************** package body Sem_Attr is
*** 10034,10040 ****
           P_TypeA : constant Entity_Id := Underlying_Type (P_Type);
  
        begin
!          if Is_Scalar_Type (P_TypeA) or else RM_Size (P_TypeA) /= Uint_0 then
              Fold_Uint (N, RM_Size (P_TypeA), Static);
           end if;
        end Value_Size;
--- 10215,10223 ----
           P_TypeA : constant Entity_Id := Underlying_Type (P_Type);
  
        begin
!          pragma Assert
!            (if Is_Scalar_Type (P_TypeA) then Known_RM_Size (P_TypeA));
!          if Known_RM_Size (P_TypeA) then
              Fold_Uint (N, RM_Size (P_TypeA), Static);
           end if;
        end Value_Size;
*************** package body Sem_Attr is
*** 10457,10462 ****
--- 10640,10646 ----
           | Attribute_Unrestricted_Access
           | Attribute_Valid
           | Attribute_Valid_Scalars
+          | Attribute_Valid_Value
           | Attribute_Value
           | Attribute_Wchar_T_Size
           | Attribute_Wide_Value
*************** package body Sem_Attr is
*** 10714,10722 ****
  
        --  If attribute was universal type, reset to actual type
  
!       if Etype (N) = Universal_Integer
!         or else Etype (N) = Universal_Real
!       then
           Set_Etype (N, Typ);
        end if;
  
--- 10898,10904 ----
  
        --  If attribute was universal type, reset to actual type
  
!       if Is_Universal_Numeric_Type (Etype (N)) then
           Set_Etype (N, Typ);
        end if;
  
*************** package body Sem_Attr is
*** 10745,10754 ****
                    Nm : Node_Id;
  
                    Note : Boolean := True;
!                   --  Skip this for the case of Unrestricted_Access occuring in
!                   --  the context of a Valid check, since this otherwise leads
!                   --  to a missed warning (the Valid check does not really
!                   --  modify!) If this case, Note will be reset to False.
  
                    --  Skip it as well if the type is an Access_To_Constant,
                    --  given that no use of the value can modify the prefix.
--- 10927,10937 ----
                    Nm : Node_Id;
  
                    Note : Boolean := True;
!                   --  Skip this for the case of Unrestricted_Access occurring
!                   --  in the context of a Valid check, since this otherwise
!                   --  leads to a missed warning (the Valid check does not
!                   --  really modify!) If this case, Note will be reset to
!                   --  False.
  
                    --  Skip it as well if the type is an Access_To_Constant,
                    --  given that no use of the value can modify the prefix.
*************** package body Sem_Attr is
*** 10881,10914 ****
                    if Convention (Designated_Type (Btyp)) /=
                       Convention (Entity (P))
                    then
!                      --  The rule in 6.3.1 (8) deserves a special error
!                      --  message.
! 
!                      if Convention (Btyp) = Convention_Intrinsic
!                        and then Nkind (Parent (N)) = N_Procedure_Call_Statement
!                        and then Is_Entity_Name (Name (Parent (N)))
!                        and then Inside_A_Generic
!                      then
!                         declare
!                            Subp : constant Entity_Id :=
!                                     Entity (Name (Parent (N)));
!                         begin
!                            if Convention (Subp) = Convention_Intrinsic then
!                               Error_Msg_FE
!                                 ("?subprogram and its formal access "
!                                  & "parameters have convention Intrinsic",
!                                  Parent (N), Subp);
!                               Error_Msg_N
!                                 ("actual cannot be access attribute", N);
!                            end if;
!                         end;
! 
!                      else
!                         Error_Msg_FE
!                           ("subprogram & has wrong convention", P, Entity (P));
!                         Error_Msg_Sloc := Sloc (Btyp);
!                         Error_Msg_FE ("\does not match & declared#", P, Btyp);
!                      end if;
  
                       if not Is_Itype (Btyp)
                         and then not Has_Convention_Pragma (Btyp)
--- 11064,11073 ----
                    if Convention (Designated_Type (Btyp)) /=
                       Convention (Entity (P))
                    then
!                      Error_Msg_FE
!                        ("subprogram & has wrong convention", P, Entity (P));
!                      Error_Msg_Sloc := Sloc (Btyp);
!                      Error_Msg_FE ("\does not match & declared#", P, Btyp);
  
                       if not Is_Itype (Btyp)
                         and then not Has_Convention_Pragma (Btyp)
*************** package body Sem_Attr is
*** 11157,11162 ****
--- 11316,11342 ----
                 Resolve (P);
              end if;
  
+             --  Refuse to compute access to variables and constants when that
+             --  would drop the strub mode associated with them, unless they're
+             --  unchecked conversions. We don't have to do this when the types
+             --  of the data objects are annotated: then the access type
+             --  designates the annotated type, and there's no loss. Only when
+             --  the variable is annotated directly that the pragma gets
+             --  attached to the variable, rather than to its type, and then,
+             --  expressing an access-to-annotated-type type to hold the 'Access
+             --  result is not possible without resorting to that very annotated
+             --  type.
+ 
+             if Attr_Id /= Attribute_Unchecked_Access
+               and then Comes_From_Source (N)
+               and then Is_Entity_Name (P)
+               and then Explicit_Strub_Mode (Entity (P)) = Enabled
+               and then
+                 Explicit_Strub_Mode (Designated_Type (Btyp)) = Unspecified
+             then
+                Error_Msg_F ("target access type drops `strub` mode from &", P);
+             end if;
+ 
              --  X'Access is illegal if X denotes a constant and the access type
              --  is access-to-variable. Same for 'Unchecked_Access. The rule
              --  does not apply to 'Unrestricted_Access. If the reference is a
*************** package body Sem_Attr is
*** 11246,11252 ****
                    --  this kind of warning is an error in SPARK mode.
  
                    if In_Instance_Body then
!                      Error_Msg_Warn := SPARK_Mode /= On;
                       Error_Msg_F
                         ("non-local pointer cannot point to local object<<", P);
                       Error_Msg_F ("\Program_Error [<<", P);
--- 11426,11436 ----
                    --  this kind of warning is an error in SPARK mode.
  
                    if In_Instance_Body then
!                      Error_Msg_Warn :=
!                        SPARK_Mode /= On
!                          and then
!                            not No_Dynamic_Accessibility_Checks_Enabled (P);
! 
                       Error_Msg_F
                         ("non-local pointer cannot point to local object<<", P);
                       Error_Msg_F ("\Program_Error [<<", P);
*************** package body Sem_Attr is
*** 11378,11405 ****
                 --  Check the static accessibility rule of 3.10.2(28). Note that
                 --  this check is not performed for the case of an anonymous
                 --  access type, since the access attribute is always legal
!                --  in such a context.
  
!                if Attr_Id /= Attribute_Unchecked_Access
!                  and then Ekind (Btyp) = E_General_Access_Type
  
!                  --  Call Accessibility_Level directly to avoid returning zero
!                  --  on cases where the prefix is an explicitly aliased
!                  --  parameter in a return statement, instead of using the
!                  --  normal Static_Accessibility_Level function.
  
!                  --  Shouldn't this be handled somehow in
!                  --  Static_Accessibility_Level ???
  
!                  and then Nkind (Accessibility_Level (P, Dynamic_Level))
!                             = N_Integer_Literal
!                  and then
!                    Intval (Accessibility_Level (P, Dynamic_Level))
!                      > Deepest_Type_Access_Level (Btyp)
!                then
!                   Accessibility_Message;
!                   return;
!                end if;
              end if;
  
              if Ekind (Btyp) in E_Access_Protected_Subprogram_Type
--- 11562,11609 ----
                 --  Check the static accessibility rule of 3.10.2(28). Note that
                 --  this check is not performed for the case of an anonymous
                 --  access type, since the access attribute is always legal
!                --  in such a context - unless the restriction
!                --  No_Dynamic_Accessibility_Checks is active.
  
!                declare
!                   No_Dynamic_Acc_Checks : constant Boolean :=
!                     No_Dynamic_Accessibility_Checks_Enabled (Btyp);
  
!                   Compatible_Alt_Checks : constant Boolean :=
!                     No_Dynamic_Acc_Checks and then not Debug_Flag_Underscore_B;
!                begin
!                   if Attr_Id /= Attribute_Unchecked_Access
!                     and then (Ekind (Btyp) = E_General_Access_Type
!                                or else No_Dynamic_Acc_Checks)
  
!                     --  In the case of the alternate "compatibility"
!                     --  accessibility model we do not perform a static
!                     --  accessibility check on actuals for anonymous access
!                     --  types - so exclude them here.
  
!                     and then not (Compatible_Alt_Checks
!                                    and then Is_Actual_Parameter (N)
!                                    and then Ekind (Btyp)
!                                               = E_Anonymous_Access_Type)
! 
!                     --  Call Accessibility_Level directly to avoid returning
!                     --  zero on cases where the prefix is an explicitly aliased
!                     --  parameter in a return statement, instead of using the
!                     --  normal Static_Accessibility_Level function.
! 
!                     --  Shouldn't this be handled somehow in
!                     --  Static_Accessibility_Level ???
! 
!                     and then Nkind (Accessibility_Level (P, Dynamic_Level))
!                                = N_Integer_Literal
!                     and then
!                       Intval (Accessibility_Level (P, Dynamic_Level))
!                         > Deepest_Type_Access_Level (Btyp)
!                   then
!                      Accessibility_Message;
!                      return;
!                   end if;
!                end;
              end if;
  
              if Ekind (Btyp) in E_Access_Protected_Subprogram_Type
*************** package body Sem_Attr is
*** 11448,11453 ****
--- 11652,11676 ----
                 Error_Msg_F ("context requires a non-protected subprogram", P);
              end if;
  
+             --  AI12-0412: The rule in RM 6.1.1(18.2/5) disallows applying
+             --  attribute Access to a primitive of an abstract type when the
+             --  primitive has any Pre'Class or Post'Class aspects specified
+             --  with nonstatic expressions.
+ 
+             if Attr_Id = Attribute_Access
+               and then Ekind (Btyp) in E_Access_Subprogram_Type
+                                      | E_Anonymous_Access_Subprogram_Type
+               and then Is_Entity_Name (P)
+               and then Is_Dispatching_Operation (Entity (P))
+               and then
+                 Is_Prim_Of_Abst_Type_With_Nonstatic_CW_Pre_Post (Entity (P))
+             then
+                Error_Msg_N
+                  ("attribute not allowed for primitive of abstract type with "
+                    & "nonstatic class-wide pre/postconditions",
+                   N);
+             end if;
+ 
              --  The context cannot be a pool-specific type, but this is a
              --  legality rule, not a resolution rule, so it must be checked
              --  separately, after possibly disambiguation (see AI-245).
*************** package body Sem_Attr is
*** 11475,11488 ****
                      ("access to atomic object cannot yield access-to-" &
                       "non-atomic type", P);
  
!                elsif Is_Volatile_Object (P)
                   and then not Is_Volatile (Designated_Type (Typ))
                 then
                    Error_Msg_F
                      ("access to volatile object cannot yield access-to-" &
                       "non-volatile type", P);
  
!                elsif Is_Volatile_Full_Access_Object (P)
                   and then not Is_Volatile_Full_Access (Designated_Type (Typ))
                 then
                    Error_Msg_F
--- 11698,11711 ----
                      ("access to atomic object cannot yield access-to-" &
                       "non-atomic type", P);
  
!                elsif Is_Volatile_Object_Ref (P)
                   and then not Is_Volatile (Designated_Type (Typ))
                 then
                    Error_Msg_F
                      ("access to volatile object cannot yield access-to-" &
                       "non-volatile type", P);
  
!                elsif Is_Volatile_Full_Access_Object_Ref (P)
                   and then not Is_Volatile_Full_Access (Designated_Type (Typ))
                 then
                    Error_Msg_F
*************** package body Sem_Attr is
*** 11491,11499 ****
                 end if;
  
                 --  Check for nonatomic subcomponent of a full access object
!                --  in Ada 2020 (RM C.6 (12)).
  
!                if Ada_Version >= Ada_2020
                   and then Is_Subcomponent_Of_Full_Access_Object (P)
                   and then not Is_Atomic_Object (P)
                 then
--- 11714,11722 ----
                 end if;
  
                 --  Check for nonatomic subcomponent of a full access object
!                --  in Ada 2022 (RM C.6 (12)).
  
!                if Ada_Version >= Ada_2022
                   and then Is_Subcomponent_Of_Full_Access_Object (P)
                   and then not Is_Atomic_Object (P)
                 then
*************** package body Sem_Attr is
*** 12274,12280 ****
              --  reference is resolved.
  
              case Attr_Id is
!                when Attribute_Value =>
                    Resolve (First (Expressions (N)), Standard_String);
  
                 when Attribute_Wide_Value =>
--- 12497,12503 ----
              --  reference is resolved.
  
              case Attr_Id is
!                when Attribute_Valid_Value | Attribute_Value =>
                    Resolve (First (Expressions (N)), Standard_String);
  
                 when Attribute_Wide_Value =>
*************** package body Sem_Attr is
*** 12348,12371 ****
     function Stream_Attribute_Available
       (Typ          : Entity_Id;
        Nam          : TSS_Name_Type;
!       Partial_View : Node_Id := Empty) return Boolean
     is
        Etyp : Entity_Id := Typ;
  
     --  Start of processing for Stream_Attribute_Available
  
     begin
!       --  We need some comments in this body ???
  
!       if Has_Stream_Attribute_Definition (Typ, Nam) then
           return True;
        end if;
  
        if Is_Class_Wide_Type (Typ) then
           return not Is_Limited_Type (Typ)
             or else Stream_Attribute_Available (Etype (Typ), Nam);
        end if;
  
        if Nam = TSS_Stream_Input
          and then Is_Abstract_Type (Typ)
          and then not Is_Class_Wide_Type (Typ)
--- 12571,12603 ----
     function Stream_Attribute_Available
       (Typ          : Entity_Id;
        Nam          : TSS_Name_Type;
!       Partial_View : Entity_Id := Empty) return Boolean
     is
        Etyp : Entity_Id := Typ;
  
+       Real_Rep : Node_Id;
+ 
     --  Start of processing for Stream_Attribute_Available
  
     begin
!       --  Test if the attribute is specified directly on the type
  
!       if Has_Stream_Attribute_Definition (Typ, Nam, Real_Rep) then
           return True;
        end if;
  
+       --  We assume class-wide types have stream attributes
+       --  when they are not limited. Otherwise we recurse on the
+       --  parent type.
+ 
        if Is_Class_Wide_Type (Typ) then
           return not Is_Limited_Type (Typ)
             or else Stream_Attribute_Available (Etype (Typ), Nam);
        end if;
  
+       --  Non-class-wide abstract types cannot have Input streams
+       --  specified.
+ 
        if Nam = TSS_Stream_Input
          and then Is_Abstract_Type (Typ)
          and then not Is_Class_Wide_Type (Typ)
*************** package body Sem_Attr is
*** 12373,12378 ****
--- 12605,12612 ----
           return False;
        end if;
  
+       --  Otherwise, nonlimited types have stream attributes
+ 
        if not (Is_Limited_Type (Typ)
          or else (Present (Partial_View)
                     and then Is_Limited_Type (Partial_View)))
*************** package body Sem_Attr is
*** 12384,12396 ****
  
        if Nam = TSS_Stream_Input
          and then Ada_Version >= Ada_2005
!         and then Stream_Attribute_Available (Etyp, TSS_Stream_Read)
        then
           return True;
  
        elsif Nam = TSS_Stream_Output
          and then Ada_Version >= Ada_2005
!         and then Stream_Attribute_Available (Etyp, TSS_Stream_Write)
        then
           return True;
        end if;
--- 12618,12630 ----
  
        if Nam = TSS_Stream_Input
          and then Ada_Version >= Ada_2005
!         and then Stream_Attribute_Available (Etyp, TSS_Stream_Read, Real_Rep)
        then
           return True;
  
        elsif Nam = TSS_Stream_Output
          and then Ada_Version >= Ada_2005
!         and then Stream_Attribute_Available (Etyp, TSS_Stream_Write, Real_Rep)
        then
           return True;
        end if;
*************** package body Sem_Attr is
*** 12404,12410 ****
           begin
              Etyp := Etype (Etyp);
  
!             if Has_Stream_Attribute_Definition (Etyp, Nam) then
                 if not Derivation_Too_Early_To_Inherit (Derived_Type, Nam) then
                    return True;
                 end if;
--- 12638,12644 ----
           begin
              Etyp := Etype (Etyp);
  
!             if Has_Stream_Attribute_Definition (Etyp, Nam, Real_Rep) then
                 if not Derivation_Too_Early_To_Inherit (Derived_Type, Nam) then
                    return True;
                 end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_attr.ads gcc-12.1.0/gcc/ada/sem_attr.ads
*** gcc-11.3.0/gcc/ada/sem_attr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_attr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_aux.adb gcc-12.1.0/gcc/ada/sem_aux.adb
*** gcc-11.3.0/gcc/ada/sem_aux.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_aux.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;  use Atree;
! with Einfo;  use Einfo;
! with Nlists; use Nlists;
! with Sinfo;  use Sinfo;
! with Snames; use Snames;
! with Stand;  use Stand;
! with Uintp;  use Uintp;
  
  package body Sem_Aux is
  
--- 23,39 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Nlists;         use Nlists;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Uintp;          use Uintp;
  
  package body Sem_Aux is
  
*************** package body Sem_Aux is
*** 332,341 ****
  
     function First_Subtype (Typ : Entity_Id) return Entity_Id is
        B   : constant Entity_Id := Base_Type (Typ);
!       F   : constant Node_Id   := Freeze_Node (B);
        Ent : Entity_Id;
  
     begin
        --  If the base type has no freeze node, it is a type in Standard, and
        --  always acts as its own first subtype, except where it is one of the
        --  predefined integer types. If the type is formal, it is also a first
--- 336,353 ----
  
     function First_Subtype (Typ : Entity_Id) return Entity_Id is
        B   : constant Entity_Id := Base_Type (Typ);
!       F   : Node_Id := Freeze_Node (B);
        Ent : Entity_Id;
  
     begin
+       --  The freeze node of a ghost type might have been rewritten in a null
+       --  statement by the time gigi calls First_Subtype on the corresponding
+       --  type.
+ 
+       if Nkind (F) = N_Null_Statement then
+          F := Original_Node (F);
+       end if;
+ 
        --  If the base type has no freeze node, it is a type in Standard, and
        --  always acts as its own first subtype, except where it is one of the
        --  predefined integer types. If the type is formal, it is also a first
*************** package body Sem_Aux is
*** 842,851 ****
        Btype : constant Entity_Id := Base_Type (Ent);
  
     begin
!       if Error_Posted (Ent) or else Error_Posted (Btype) then
!          return False;
! 
!       elsif Is_Private_Type (Btype) then
           declare
              Utyp : constant Entity_Id := Underlying_Type (Btype);
           begin
--- 854,860 ----
        Btype : constant Entity_Id := Base_Type (Ent);
  
     begin
!       if Is_Private_Type (Btype) then
           declare
              Utyp : constant Entity_Id := Underlying_Type (Btype);
           begin
*************** package body Sem_Aux is
*** 1072,1085 ****
     ---------------------
  
     function Is_Limited_Type (Ent : Entity_Id) return Boolean is
!       Btype : constant E := Base_Type (Ent);
!       Rtype : constant E := Root_Type (Btype);
  
     begin
        if not Is_Type (Ent) then
           return False;
  
!       elsif Ekind (Btype) = E_Limited_Private_Type
          or else Is_Limited_Composite (Btype)
        then
           return True;
--- 1081,1098 ----
     ---------------------
  
     function Is_Limited_Type (Ent : Entity_Id) return Boolean is
!       Btype : Entity_Id;
!       Rtype : Entity_Id;
  
     begin
        if not Is_Type (Ent) then
           return False;
+       end if;
  
!       Btype := Base_Type (Ent);
!       Rtype := Root_Type (Btype);
! 
!       if Ekind (Btype) = E_Limited_Private_Type
          or else Is_Limited_Composite (Btype)
        then
           return True;
*************** package body Sem_Aux is
*** 1397,1402 ****
--- 1410,1440 ----
     end Object_Type_Has_Constrained_Partial_View;
  
     ------------------
+    -- Package_Body --
+    ------------------
+ 
+    function Package_Body (E : Entity_Id) return Node_Id is
+       Body_Decl : Node_Id;
+       Body_Id   : constant Opt_E_Package_Body_Id :=
+         Corresponding_Body (Package_Spec (E));
+ 
+    begin
+       if Present (Body_Id) then
+          Body_Decl := Parent (Body_Id);
+ 
+          if Nkind (Body_Decl) = N_Defining_Program_Unit_Name then
+             Body_Decl := Parent (Body_Decl);
+          end if;
+ 
+          pragma Assert (Nkind (Body_Decl) = N_Package_Body);
+ 
+          return Body_Decl;
+       else
+          return Empty;
+       end if;
+    end Package_Body;
+ 
+    ------------------
     -- Package_Spec --
     ------------------
  
*************** package body Sem_Aux is
*** 1413,1424 ****
--- 1451,1466 ----
        N : Node_Id;
  
     begin
+       pragma Assert (Is_Package_Or_Generic_Package (E));
+ 
        N := Parent (E);
  
        if Nkind (N) = N_Defining_Program_Unit_Name then
           N := Parent (N);
        end if;
  
+       pragma Assert (Nkind (N) = N_Package_Specification);
+ 
        return N;
     end Package_Specification;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_aux.ads gcc-12.1.0/gcc/ada/sem_aux.ads
*** gcc-11.3.0/gcc/ada/sem_aux.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_aux.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Aux is
*** 377,382 ****
--- 377,386 ----
     --  derived type, and the subtype is not an unconstrained array subtype
     --  (RM 3.3(23.10/3)).
  
+    function Package_Body (E : Entity_Id) return Node_Id;
+    --  Given an entity for a package, return the corresponding package body, if
+    --  any, or else Empty.
+ 
     function Package_Spec (E : Entity_Id) return Node_Id;
     --  Given an entity for a package spec, return the corresponding package
     --  spec if any, or else Empty.
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_case.adb gcc-12.1.0/gcc/ada/sem_case.adb
*** gcc-11.3.0/gcc/ada/sem_case.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_case.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
***************
*** 23,50 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sem_Type; use Sem_Type;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Sinfo;    use Sinfo;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
  
  with Ada.Unchecked_Deallocation;
  
  with GNAT.Heap_Sort_G;
  
  package body Sem_Case is
  
--- 23,58 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sem_Type;       use Sem_Type;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Stringt;        use Stringt;
! with Table;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
  
  with Ada.Unchecked_Deallocation;
  
  with GNAT.Heap_Sort_G;
+ with GNAT.Sets;
  
  package body Sem_Case is
  
*************** package body Sem_Case is
*** 84,96 ****
     --
     --  Bounds_Type is the type whose range must be covered by the alternatives
     --
!    --  Subtyp is the subtype of the expression. If its bounds are non-static
     --  the alternatives must cover its base type.
  
     function Choice_Image (Value : Uint; Ctype : Entity_Id) return Name_Id;
     --  Given a Pos value of enumeration type Ctype, returns the name
     --  ID of an appropriate string to be used in error message output.
  
     procedure Expand_Others_Choice
       (Case_Table    : Choice_Table_Type;
        Others_Choice : Node_Id;
--- 92,271 ----
     --
     --  Bounds_Type is the type whose range must be covered by the alternatives
     --
!    --  Subtyp is the subtype of the expression. If its bounds are nonstatic
     --  the alternatives must cover its base type.
  
     function Choice_Image (Value : Uint; Ctype : Entity_Id) return Name_Id;
     --  Given a Pos value of enumeration type Ctype, returns the name
     --  ID of an appropriate string to be used in error message output.
  
+    function Has_Static_Discriminant_Constraint
+      (Subtyp : Entity_Id) return Boolean;
+    --  Returns True if the given subtype is subject to a discriminant
+    --  constraint and at least one of the constraint values is nonstatic.
+ 
+    package Composite_Case_Ops is
+ 
+       function Box_Value_Required (Subtyp : Entity_Id) return Boolean;
+       --  If result is True, then the only allowed value (in a choice
+       --  aggregate) for a component of this (sub)type is a box. This rule
+       --  means that such a component can be ignored in case alternative
+       --  selection. This in turn implies that it is ok if the component
+       --  type doesn't meet the usual restrictions, such as not being an
+       --  access/task/protected type, since nobody is going to look
+       --  at it.
+ 
+       function Choice_Count (Alternatives : List_Id) return Nat;
+       --  The sum of the number of choices for each alternative in the given
+       --  list.
+ 
+       function Normalized_Case_Expr_Type
+         (Case_Statement : Node_Id) return Entity_Id;
+       --  Usually returns the Etype of the selector expression of the
+       --  case statement. However, in the case of a constrained composite
+       --  subtype with a nonstatic constraint, returns the unconstrained
+       --  base type.
+ 
+       function Scalar_Part_Count (Subtyp : Entity_Id) return Nat;
+       --  Given the composite type Subtyp of a case selector, returns the
+       --  number of scalar parts in an object of this type. This is the
+       --  dimensionality of the associated Cartesian product space.
+ 
+       package Array_Case_Ops is
+          function Array_Choice_Length (Choice : Node_Id) return Nat;
+          --  Given a choice expression of an array type, returns its length.
+ 
+          function Unconstrained_Array_Effective_Length
+            (Array_Type : Entity_Id; Case_Statement : Node_Id) return Nat;
+          --  If the nominal subtype of the case selector is unconstrained,
+          --  then use the length of the longest choice of the case statement.
+          --  Components beyond that index value will not influence the case
+          --  selection decision.
+ 
+          function Unconstrained_Array_Scalar_Part_Count
+            (Array_Type : Entity_Id; Case_Statement : Node_Id) return Nat;
+          --  Same as Scalar_Part_Count except that the value used for the
+          --  "length" of the array subtype being cased on is determined by
+          --  calling Unconstrained_Array_Effective_Length.
+       end Array_Case_Ops;
+ 
+       generic
+          Case_Statement : Node_Id;
+       package Choice_Analysis is
+ 
+          use Array_Case_Ops;
+ 
+          type Alternative_Id is
+            new Int range 1 .. List_Length (Alternatives (Case_Statement));
+          type Choice_Id is
+            new Int range 1 .. Choice_Count (Alternatives (Case_Statement));
+ 
+          Case_Expr_Type : constant Entity_Id :=
+            Normalized_Case_Expr_Type (Case_Statement);
+ 
+          Unconstrained_Array_Case : constant Boolean :=
+            Is_Array_Type (Case_Expr_Type)
+              and then not Is_Constrained (Case_Expr_Type);
+ 
+          --  If Unconstrained_Array_Case is True, choice lengths may differ:
+          --    when "Aaa" | "Bb" | "C" | "" =>
+          --
+          --  Strictly speaking, the name "Unconstrained_Array_Case" is
+          --  slightly imprecise; a subtype with a nonstatic constraint is
+          --  also treated as unconstrained (see Normalize_Case_Expr_Type).
+ 
+          type Part_Id is new Int range
+            1 .. (if Unconstrained_Array_Case
+                  then Unconstrained_Array_Scalar_Part_Count
+                         (Case_Expr_Type, Case_Statement)
+                  else Scalar_Part_Count (Case_Expr_Type));
+ 
+          type Discrete_Range_Info is
+            record
+               Low, High : Uint;
+            end record;
+ 
+          type Composite_Range_Info is array (Part_Id) of Discrete_Range_Info;
+ 
+          type Choice_Range_Info (Is_Others : Boolean := False) is
+            record
+               case Is_Others is
+                  when False =>
+                     Ranges : Composite_Range_Info;
+                  when True =>
+                     null;
+               end case;
+            end record;
+ 
+          type Choices_Range_Info is array (Choice_Id) of Choice_Range_Info;
+ 
+          package Value_Sets is
+ 
+             type Value_Set is private;
+             --  A set of points in the Cartesian product space defined
+             --  by the composite type of the case selector.
+             --  Implemented as an access type.
+ 
+             type Set_Comparison is
+               (Disjoint, Equal, Contains, Contained_By, Overlaps);
+ 
+             function Compare (S1, S2 : Value_Set) return Set_Comparison;
+             --  If either argument (or both) is empty, result is Disjoint.
+             --  Otherwise, result is Equal if the two sets are equal.
+ 
+             Empty : constant Value_Set;
+ 
+             function Matching_Values
+               (Info : Composite_Range_Info) return Value_Set;
+             --  The Cartesian product of the given array of ranges
+             --  (excluding any values outside the Cartesian product of the
+             --  component ranges).
+ 
+             procedure Union (Target : in out Value_Set; Source : Value_Set);
+             --  Add elements of Source into Target
+ 
+             procedure Remove (Target : in out Value_Set; Source : Value_Set);
+             --  Remove elements of Source from Target
+ 
+             function Complement_Is_Empty (Set : Value_Set) return Boolean;
+             --  Return True iff the set is "maximal", in the sense that it
+             --  includes every value in the Cartesian product of the
+             --  component ranges.
+ 
+             procedure Free_Value_Sets;
+             --  Reclaim storage associated with implementation of this package.
+ 
+          private
+             type Value_Set is new Natural;
+             --  An index for a table that will be declared in the package body.
+ 
+             Empty : constant Value_Set := 0;
+ 
+          end Value_Sets;
+ 
+          type Single_Choice_Info (Is_Others : Boolean := False) is
+            record
+               Alternative : Alternative_Id;
+               case Is_Others is
+                  when False =>
+                     Matches : Value_Sets.Value_Set;
+                  when True =>
+                     null;
+               end case;
+            end record;
+ 
+          type Choices_Info is array (Choice_Id) of Single_Choice_Info;
+ 
+          function Analysis return Choices_Info;
+          --  Parse the case choices in order to determine the set of
+          --  matching values associated with each choice.
+ 
+          type Bound_Values is array (Positive range <>) of Node_Id;
+ 
+       end Choice_Analysis;
+ 
+    end Composite_Case_Ops;
+ 
     procedure Expand_Others_Choice
       (Case_Table    : Choice_Table_Type;
        Others_Choice : Node_Id;
*************** package body Sem_Case is
*** 141,149 ****
        --  is posted at location C. Caller sets Error_Msg_Sloc for xx.
  
        procedure Explain_Non_Static_Bound;
!       --  Called when we find a non-static bound, requiring the base type to
        --  be covered. Provides where possible a helpful explanation of why the
!       --  bounds are non-static, since this is not always obvious.
  
        function Lt_Choice (C1, C2 : Natural) return Boolean;
        --  Comparison routine for comparing Choice_Table entries. Use the lower
--- 316,324 ----
        --  is posted at location C. Caller sets Error_Msg_Sloc for xx.
  
        procedure Explain_Non_Static_Bound;
!       --  Called when we find a nonstatic bound, requiring the base type to
        --  be covered. Provides where possible a helpful explanation of why the
!       --  bounds are nonstatic, since this is not always obvious.
  
        function Lt_Choice (C1, C2 : Natural) return Boolean;
        --  Comparison routine for comparing Choice_Table entries. Use the lower
*************** package body Sem_Case is
*** 531,550 ****
                   and then Compile_Time_Known_Value (C)
                   and then Expr_Value (C) = Lo
                 then
!                   Error_Msg_N ("duplication of choice value: &#!", C);
  
                 --  Not that special case, so just output the integer value
  
                 else
                    Error_Msg_Uint_1 := Lo;
!                   Error_Msg_N ("duplication of choice value: ^#!", C);
                 end if;
  
              --  Enumeration type
  
              else
                 Error_Msg_Name_1 := Choice_Image (Lo, Bounds_Type);
!                Error_Msg_N ("duplication of choice value: %#!", C);
              end if;
  
           --  More than one choice value, so print range of values
--- 706,728 ----
                   and then Compile_Time_Known_Value (C)
                   and then Expr_Value (C) = Lo
                 then
!                   Error_Msg_N
!                     ("duplication of choice value: &#!", Original_Node (C));
  
                 --  Not that special case, so just output the integer value
  
                 else
                    Error_Msg_Uint_1 := Lo;
!                   Error_Msg_N
!                     ("duplication of choice value: ^#!", Original_Node (C));
                 end if;
  
              --  Enumeration type
  
              else
                 Error_Msg_Name_1 := Choice_Image (Lo, Bounds_Type);
!                Error_Msg_N
!                  ("duplication of choice value: %#!", Original_Node (C));
              end if;
  
           --  More than one choice value, so print range of values
*************** package body Sem_Case is
*** 577,583 ****
                 else
                    Error_Msg_Uint_1 := Lo;
                    Error_Msg_Uint_2 := Hi;
!                   Error_Msg_N ("duplication of choice values: ^ .. ^#!", C);
                 end if;
  
              --  Enumeration type
--- 755,763 ----
                 else
                    Error_Msg_Uint_1 := Lo;
                    Error_Msg_Uint_2 := Hi;
!                   Error_Msg_N
!                     ("duplication of choice values: ^ .. ^#!",
!                      Original_Node (C));
                 end if;
  
              --  Enumeration type
*************** package body Sem_Case is
*** 585,591 ****
              else
                 Error_Msg_Name_1 := Choice_Image (Lo, Bounds_Type);
                 Error_Msg_Name_2 := Choice_Image (Hi, Bounds_Type);
!                Error_Msg_N ("duplication of choice values: % .. %#!", C);
              end if;
           end if;
        end Dup_Choice;
--- 765,772 ----
              else
                 Error_Msg_Name_1 := Choice_Image (Lo, Bounds_Type);
                 Error_Msg_Name_2 := Choice_Image (Hi, Bounds_Type);
!                Error_Msg_N
!                  ("duplication of choice values: % .. %#!", Original_Node (C));
              end if;
           end if;
        end Dup_Choice;
*************** package body Sem_Case is
*** 614,620 ****
                   ("bounds of & are not static, "
                    & "alternatives must cover base type!", Expr, Expr);
  
!             --  If this is a case statement, the expression may be non-static
              --  or else the subtype may be at fault.
  
              elsif Is_Entity_Name (Expr) then
--- 795,801 ----
                   ("bounds of & are not static, "
                    & "alternatives must cover base type!", Expr, Expr);
  
!             --  If this is a case statement, the expression may be nonstatic
              --  or else the subtype may be at fault.
  
              elsif Is_Entity_Name (Expr) then
*************** package body Sem_Case is
*** 677,684 ****
        --------------------
  
        procedure Missing_Choice (Value1 : Uint; Value2 : Uint) is
-          Msg_Sloc : constant Source_Ptr := Sloc (Case_Node);
- 
        begin
           --  AI05-0188 : within an instance the non-others choices do not have
           --  to belong to the actual subtype.
--- 858,863 ----
*************** package body Sem_Case is
*** 692,698 ****
           elsif Value1 > Value2 then
              return;
  
!          --  If predicate is already known to be violated, do no check for
           --  coverage error, to prevent cascaded messages.
  
           elsif Predicate_Error then
--- 871,877 ----
           elsif Value1 > Value2 then
              return;
  
!          --  If predicate is already known to be violated, do not check for
           --  coverage error, to prevent cascaded messages.
  
           elsif Predicate_Error then
*************** package body Sem_Case is
*** 704,713 ****
           if Value1 = Value2 then
              if Is_Integer_Type (Bounds_Type) then
                 Error_Msg_Uint_1 := Value1;
!                Error_Msg ("missing case value: ^!", Msg_Sloc);
              else
                 Error_Msg_Name_1 := Choice_Image (Value1, Bounds_Type);
!                Error_Msg ("missing case value: %!", Msg_Sloc);
              end if;
  
           --  More than one choice value, so print range of values
--- 883,892 ----
           if Value1 = Value2 then
              if Is_Integer_Type (Bounds_Type) then
                 Error_Msg_Uint_1 := Value1;
!                Error_Msg_N ("missing case value: ^!", Case_Node);
              else
                 Error_Msg_Name_1 := Choice_Image (Value1, Bounds_Type);
!                Error_Msg_N ("missing case value: %!", Case_Node);
              end if;
  
           --  More than one choice value, so print range of values
*************** package body Sem_Case is
*** 716,726 ****
              if Is_Integer_Type (Bounds_Type) then
                 Error_Msg_Uint_1 := Value1;
                 Error_Msg_Uint_2 := Value2;
!                Error_Msg ("missing case values: ^ .. ^!", Msg_Sloc);
              else
                 Error_Msg_Name_1 := Choice_Image (Value1, Bounds_Type);
                 Error_Msg_Name_2 := Choice_Image (Value2, Bounds_Type);
!                Error_Msg ("missing case values: % .. %!", Msg_Sloc);
              end if;
           end if;
        end Missing_Choice;
--- 895,905 ----
              if Is_Integer_Type (Bounds_Type) then
                 Error_Msg_Uint_1 := Value1;
                 Error_Msg_Uint_2 := Value2;
!                Error_Msg_N ("missing case values: ^ .. ^!", Case_Node);
              else
                 Error_Msg_Name_1 := Choice_Image (Value1, Bounds_Type);
                 Error_Msg_Name_2 := Choice_Image (Value2, Bounds_Type);
!                Error_Msg_N ("missing case values: % .. %!", Case_Node);
              end if;
           end if;
        end Missing_Choice;
*************** package body Sem_Case is
*** 972,977 ****
--- 1151,2838 ----
        return Name_Find;
     end Choice_Image;
  
+    package body Composite_Case_Ops is
+ 
+       function Static_Array_Length (Subtyp : Entity_Id) return Nat;
+       --  Given a one-dimensional constrained array subtype with
+       --  statically known bounds, return its length.
+ 
+       -------------------------
+       -- Static_Array_Length --
+       -------------------------
+ 
+       function Static_Array_Length (Subtyp : Entity_Id) return Nat is
+          pragma Assert (Is_Constrained (Subtyp));
+          pragma Assert (Number_Dimensions (Subtyp) = 1);
+          Index : constant Node_Id := First_Index (Subtyp);
+          pragma Assert (Is_OK_Static_Range (Index));
+          Lo  : constant Uint := Expr_Value (Low_Bound (Index));
+          Hi  : constant Uint := Expr_Value (High_Bound (Index));
+          Len : constant Uint := UI_Max (0, (Hi - Lo) + 1);
+       begin
+          return UI_To_Int (Len);
+       end Static_Array_Length;
+ 
+       ------------------------
+       -- Box_Value_Required --
+       ------------------------
+ 
+       function Box_Value_Required (Subtyp : Entity_Id) return Boolean is
+          --  Some of these restrictions will be relaxed eventually, but best
+          --  to initially err in the direction of being too restrictive.
+       begin
+          if Has_Predicates (Subtyp) then
+             return True;
+          elsif Is_Discrete_Type (Subtyp) then
+             if not Is_Static_Subtype (Subtyp) then
+                return True;
+             elsif Is_Enumeration_Type (Subtyp)
+                and then Has_Enumeration_Rep_Clause (Subtyp)
+                --  Maybe enumeration rep clauses can be ignored here?
+             then
+                return True;
+             end if;
+          elsif Is_Array_Type (Subtyp) then
+             if Number_Dimensions (Subtyp) /= 1 then
+                return True;
+             elsif not Is_Constrained (Subtyp) then
+                if not Is_Static_Subtype (Etype (First_Index (Subtyp))) then
+                   return True;
+                end if;
+             elsif not Is_OK_Static_Range (First_Index (Subtyp)) then
+                return True;
+             end if;
+          elsif Is_Record_Type (Subtyp) then
+             if Has_Discriminants (Subtyp)
+               and then Is_Constrained (Subtyp)
+               and then not Has_Static_Discriminant_Constraint (Subtyp)
+             then
+                --  Perhaps treat differently the case where Subtyp is the
+                --  subtype of the top-level selector expression, as opposed
+                --  to the subtype of some subcomponent thereof.
+                return True;
+             end if;
+          else
+             --  Return True for any type that is not a discrete type,
+             --  a record type, or an array type.
+             return True;
+          end if;
+ 
+          return False;
+       end Box_Value_Required;
+ 
+       ------------------
+       -- Choice_Count --
+       ------------------
+ 
+       function Choice_Count (Alternatives : List_Id) return Nat is
+          Result : Nat := 0;
+          Alt : Node_Id := First (Alternatives);
+       begin
+          while Present (Alt) loop
+             Result := Result + List_Length (Discrete_Choices (Alt));
+             Next (Alt);
+          end loop;
+          return Result;
+       end Choice_Count;
+ 
+       -------------------------------
+       -- Normalized_Case_Expr_Type --
+       -------------------------------
+ 
+       function Normalized_Case_Expr_Type
+         (Case_Statement : Node_Id) return Entity_Id
+       is
+          Unnormalized : constant Entity_Id :=
+            Etype (Expression (Case_Statement));
+ 
+          Is_Dynamically_Constrained_Array : constant Boolean :=
+            Is_Array_Type (Unnormalized)
+              and then Is_Constrained (Unnormalized)
+              and then not Has_Static_Array_Bounds (Unnormalized);
+ 
+          Is_Dynamically_Constrained_Record : constant Boolean :=
+            Is_Record_Type (Unnormalized)
+              and then Has_Discriminants (Unnormalized)
+              and then Is_Constrained (Unnormalized)
+              and then not Has_Static_Discriminant_Constraint (Unnormalized);
+       begin
+          if Is_Dynamically_Constrained_Array
+            or Is_Dynamically_Constrained_Record
+          then
+             return Base_Type (Unnormalized);
+          else
+             return Unnormalized;
+          end if;
+       end Normalized_Case_Expr_Type;
+ 
+       -----------------------
+       -- Scalar_Part_Count --
+       -----------------------
+ 
+       function Scalar_Part_Count (Subtyp : Entity_Id) return Nat is
+       begin
+          if Box_Value_Required (Subtyp) then
+             return 0; -- component does not participate in case selection
+          elsif Is_Scalar_Type (Subtyp) then
+             return 1;
+          elsif Is_Array_Type (Subtyp) then
+             return Static_Array_Length (Subtyp)
+               * Scalar_Part_Count (Component_Type (Subtyp));
+          elsif Is_Record_Type (Subtyp) then
+             declare
+                Result : Nat := 0;
+                Comp : Entity_Id := First_Component_Or_Discriminant
+                                      (Base_Type (Subtyp));
+             begin
+                while Present (Comp) loop
+                   Result := Result + Scalar_Part_Count (Etype (Comp));
+                   Next_Component_Or_Discriminant (Comp);
+                end loop;
+                return Result;
+             end;
+          else
+             pragma Assert (Serious_Errors_Detected > 0);
+             return 0;
+          end if;
+       end Scalar_Part_Count;
+ 
+       package body Array_Case_Ops is
+ 
+          -------------------------
+          -- Array_Choice_Length --
+          -------------------------
+ 
+          function Array_Choice_Length (Choice : Node_Id) return Nat is
+          begin
+             case Nkind (Choice) is
+                when N_String_Literal =>
+                   return String_Length (Strval (Choice));
+                when N_Aggregate =>
+                   declare
+                      Bounds : constant Node_Id :=
+                        Aggregate_Bounds (Choice);
+                      pragma Assert (Is_OK_Static_Range (Bounds));
+                      Lo     : constant Uint :=
+                        Expr_Value (Low_Bound (Bounds));
+                      Hi     : constant Uint :=
+                        Expr_Value (High_Bound (Bounds));
+                      Len : constant Uint := (Hi - Lo) + 1;
+                   begin
+                      return UI_To_Int (Len);
+                   end;
+                when N_Has_Entity =>
+                   if Present (Entity (Choice))
+                     and then Ekind (Entity (Choice)) = E_Constant
+                   then
+                      return Array_Choice_Length
+                               (Expression (Parent (Entity (Choice))));
+                   end if;
+                when N_Others_Choice =>
+                   return 0;
+                when others =>
+                   null;
+             end case;
+ 
+             if Nkind (Original_Node (Choice))
+                  in N_String_Literal | N_Aggregate
+             then
+                return Array_Choice_Length (Original_Node (Choice));
+             end if;
+ 
+             Error_Msg_N ("Unsupported case choice", Choice);
+             return 0;
+          end Array_Choice_Length;
+ 
+          ------------------------------------------
+          -- Unconstrained_Array_Effective_Length --
+          ------------------------------------------
+ 
+          function Unconstrained_Array_Effective_Length
+            (Array_Type : Entity_Id; Case_Statement : Node_Id) return Nat
+          is
+             pragma Assert (Is_Array_Type (Array_Type));
+             --  Array_Type is otherwise unreferenced for now.
+ 
+             Result : Nat := 0;
+             Alt : Node_Id := First (Alternatives (Case_Statement));
+          begin
+             while Present (Alt) loop
+                declare
+                   Choice : Node_Id := First (Discrete_Choices (Alt));
+                begin
+                   while Present (Choice) loop
+                      Result := Nat'Max (Result, Array_Choice_Length (Choice));
+                      Next (Choice);
+                   end loop;
+                end;
+                Next (Alt);
+             end loop;
+ 
+             return Result;
+          end Unconstrained_Array_Effective_Length;
+ 
+          -------------------------------------------
+          -- Unconstrained_Array_Scalar_Part_Count --
+          -------------------------------------------
+ 
+          function Unconstrained_Array_Scalar_Part_Count
+            (Array_Type : Entity_Id; Case_Statement : Node_Id) return Nat
+          is
+          begin
+             --  Add one for the length, which is treated like a discriminant
+ 
+             return 1 + (Unconstrained_Array_Effective_Length
+                           (Array_Type     => Array_Type,
+                            Case_Statement => Case_Statement)
+                         * Scalar_Part_Count (Component_Type (Array_Type)));
+          end Unconstrained_Array_Scalar_Part_Count;
+ 
+       end Array_Case_Ops;
+ 
+       package body Choice_Analysis is
+ 
+          function Component_Bounds_Info return Composite_Range_Info;
+          --  Returns the (statically known) bounds for each component.
+          --  The selector expression value (or any other value of the type
+          --  of the selector expression) can be thought of as a point in the
+          --  Cartesian product of these sets.
+ 
+          function Parse_Choice (Choice : Node_Id;
+                                 Alt    : Node_Id) return Choice_Range_Info;
+          --  Extract Choice_Range_Info from a Choice node
+ 
+          ---------------------------
+          -- Component_Bounds_Info --
+          ---------------------------
+ 
+          function Component_Bounds_Info return Composite_Range_Info is
+             Result : Composite_Range_Info;
+             Next   : Part_Id := 1;
+             Done   : Boolean := False;
+ 
+             procedure Update_Result (Info : Discrete_Range_Info);
+             --  Initialize first remaining uninitialized element of Result.
+             --  Also set Next and Done.
+ 
+             -------------------
+             -- Update_Result --
+             -------------------
+ 
+             procedure Update_Result (Info : Discrete_Range_Info) is
+             begin
+                Result (Next) := Info;
+                if Next /= Part_Id'Last then
+                   Next := Next + 1;
+                else
+                   pragma Assert (not Done);
+                   Done := True;
+                end if;
+             end Update_Result;
+ 
+             procedure Traverse_Discrete_Parts (Subtyp : Entity_Id);
+             --  Traverse the given subtype, looking for discrete parts.
+             --  For an array subtype of length N, the element subtype
+             --  is traversed N times. For a record subtype, traverse
+             --  each component's subtype (once). When a discrete part is
+             --  found, call Update_Result.
+ 
+             -----------------------------
+             -- Traverse_Discrete_Parts --
+             -----------------------------
+ 
+             procedure Traverse_Discrete_Parts (Subtyp : Entity_Id) is
+             begin
+                if Box_Value_Required (Subtyp) then
+                   return;
+                end if;
+ 
+                if Is_Discrete_Type (Subtyp) then
+                   Update_Result
+                     ((Low  => Expr_Value (Type_Low_Bound (Subtyp)),
+                       High => Expr_Value (Type_High_Bound (Subtyp))));
+                elsif Is_Array_Type (Subtyp) then
+                   declare
+                      Len : Nat;
+                   begin
+                      if Is_Constrained (Subtyp) then
+                         Len := Static_Array_Length (Subtyp);
+                      else
+                         --  Length will be treated like a discriminant;
+                         --  We could compute High more precisely as
+                         --    1 + Index_Subtype'Last - Index_Subtype'First
+                         --  (we currently require that those bounds be
+                         --  static, so this is an option), but only downside of
+                         --  overshooting is if somebody wants to omit a
+                         --  "when others" choice and exhaustively cover all
+                         --  possibilities explicitly.
+                         Update_Result
+                           ((Low  => Uint_0,
+                             High => Uint_2 ** Uint_32));
+ 
+                         Len := Unconstrained_Array_Effective_Length
+                                  (Array_Type     => Subtyp,
+                                   Case_Statement => Case_Statement);
+                      end if;
+                      for I in 1 .. Len loop
+                         Traverse_Discrete_Parts (Component_Type (Subtyp));
+                      end loop;
+                   end;
+                elsif Is_Record_Type (Subtyp) then
+                   if Has_Static_Discriminant_Constraint (Subtyp) then
+ 
+                      --  The component range for a constrained discriminant
+                      --  is a single value.
+                      declare
+                         Dc_Elmt : Elmt_Id :=
+                           First_Elmt (Discriminant_Constraint (Subtyp));
+                         Dc_Value : Uint;
+                      begin
+                         while Present (Dc_Elmt) loop
+                            Dc_Value := Expr_Value (Node (Dc_Elmt));
+                            Update_Result ((Low  => Dc_Value,
+                                            High => Dc_Value));
+ 
+                            Next_Elmt (Dc_Elmt);
+                         end loop;
+                      end;
+ 
+                      --  Generate ranges for nondiscriminant components.
+                      declare
+                         Comp : Entity_Id := First_Component
+                                               (Base_Type (Subtyp));
+                      begin
+                         while Present (Comp) loop
+                            Traverse_Discrete_Parts (Etype (Comp));
+                            Next_Component (Comp);
+                         end loop;
+                      end;
+                   else
+                      --  Generate ranges for all components
+                      declare
+                         Comp : Entity_Id :=
+                           First_Component_Or_Discriminant
+                             (Base_Type (Subtyp));
+                      begin
+                         while Present (Comp) loop
+                            Traverse_Discrete_Parts (Etype (Comp));
+                            Next_Component_Or_Discriminant (Comp);
+                         end loop;
+                      end;
+                   end if;
+                else
+                   Error_Msg_N
+                     ("case selector type having a non-discrete non-record"
+                      & "  non-array subcomponent type not implemented",
+                      Expression (Case_Statement));
+                end if;
+             end Traverse_Discrete_Parts;
+ 
+          begin
+             Traverse_Discrete_Parts (Case_Expr_Type);
+             pragma Assert (Done or else Serious_Errors_Detected > 0);
+             return Result;
+          end Component_Bounds_Info;
+ 
+          Component_Bounds : constant Composite_Range_Info
+            := Component_Bounds_Info;
+ 
+          package Case_Bindings is
+ 
+             procedure Note_Binding
+               (Comp_Assoc : Node_Id;
+                Choice     : Node_Id;
+                Alt        : Node_Id);
+             --  Note_Binding is called once for each component association
+             --  that defines a binding (using either "A => B is X" or
+             --  "A => <X>" syntax);
+ 
+             procedure Check_Bindings;
+             --  After all calls to Note_Binding, check that bindings are
+             --  ok (e.g., check consistency among different choices of
+             --  one alternative).
+ 
+          end Case_Bindings;
+ 
+          procedure Refresh_Binding_Info (Aggr : Node_Id);
+          --  The parser records binding-related info in the tree.
+          --  The choice nodes that we see here might not be (will never be?)
+          --  the original nodes that were produced by the parser. The info
+          --  recorded by the parser is missing in that case, so this
+          --  procedure recovers it.
+          --
+          --  There are bugs here. In some cases involving nested aggregates,
+          --  the path back to the parser-created nodes is lost. In particular,
+          --  we may fail to detect an illegal case like
+          --   when (F1 | F2 => (Aa => Natural, Bb => Natural is X)) =>
+          --  This should be rejected because it is binding X to both the
+          --  F1.Bb and to the F2.Bb subcomponents of the case selector.
+          --  It would be nice if the not-specific-to-pattern-matching
+          --  aggregate-processing code could remain unaware of the existence
+          --  of this binding-related info but perhaps that isn't possible.
+ 
+          --------------------------
+          -- Refresh_Binding_Info --
+          --------------------------
+ 
+          procedure Refresh_Binding_Info (Aggr : Node_Id) is
+             Orig_Aggr : constant Node_Id := Original_Node (Aggr);
+             Orig_Comp : Node_Id := First (Component_Associations (Orig_Aggr));
+          begin
+             if Aggr = Orig_Aggr then
+                return;
+             end if;
+ 
+             while Present (Orig_Comp) loop
+                if Nkind (Orig_Comp) = N_Component_Association
+                  and then Binding_Chars (Orig_Comp) /= No_Name
+                then
+                   if List_Length (Choices (Orig_Comp)) /= 1 then
+                      --  Conceivably this could be checked during parsing,
+                      --  but checking is easier here.
+ 
+                      Error_Msg_N
+                        ("binding shared by multiple components", Orig_Comp);
+                      return;
+                   end if;
+ 
+                   declare
+                      Orig_Name : constant Name_Id :=
+                        Chars (First (Choices (Orig_Comp)));
+                      Comp : Node_Id := First (Component_Associations (Aggr));
+                      Matching_Comp : Node_Id := Empty;
+                   begin
+                      while Present (Comp) loop
+                         if Chars (First (Choices (Comp))) = Orig_Name then
+                            pragma Assert (not Present (Matching_Comp));
+                            Matching_Comp := Comp;
+                         end if;
+ 
+                         Next (Comp);
+                      end loop;
+ 
+                      pragma Assert (Present (Matching_Comp));
+ 
+                      Set_Binding_Chars
+                        (Matching_Comp,
+                         Binding_Chars (Orig_Comp));
+                   end;
+                end if;
+ 
+                Next (Orig_Comp);
+             end loop;
+          end Refresh_Binding_Info;
+ 
+          ------------------
+          -- Parse_Choice --
+          ------------------
+ 
+          function Parse_Choice (Choice : Node_Id;
+                                 Alt    : Node_Id) return Choice_Range_Info
+          is
+             Result    : Choice_Range_Info (Is_Others => False);
+             Ranges    : Composite_Range_Info renames Result.Ranges;
+             Next_Part : Part_Id'Base range 1 .. Part_Id'Last + 1 := 1;
+ 
+             procedure Traverse_Choice (Expr : Node_Id);
+             --  Traverse a legal choice expression, looking for
+             --  values/ranges of discrete parts. Call Update_Result
+             --  for each.
+ 
+             procedure Update_Result (Discrete_Range : Discrete_Range_Info);
+             --  Initialize first remaining uninitialized element of Ranges.
+             --  Also set Next_Part.
+ 
+             procedure Update_Result_For_Full_Coverage (Comp_Type  : Entity_Id);
+             --  For each scalar part of the given component type, call
+             --  Update_Result with the full range for that scalar part.
+             --  This is used for both box components in aggregates and
+             --  for any inactive-variant components that do not appear in
+             --  a given aggregate.
+ 
+             -------------------
+             -- Update_Result --
+             -------------------
+ 
+             procedure Update_Result (Discrete_Range : Discrete_Range_Info) is
+             begin
+                Ranges (Next_Part) := Discrete_Range;
+                Next_Part := Next_Part + 1;
+             end Update_Result;
+ 
+             -------------------------------------
+             -- Update_Result_For_Full_Coverage --
+             -------------------------------------
+ 
+             procedure Update_Result_For_Full_Coverage (Comp_Type : Entity_Id)
+             is
+             begin
+                for Counter in 1 .. Scalar_Part_Count (Comp_Type) loop
+                   Update_Result (Component_Bounds (Next_Part));
+                end loop;
+             end Update_Result_For_Full_Coverage;
+ 
+             ---------------------
+             -- Traverse_Choice --
+             ---------------------
+ 
+             procedure Traverse_Choice (Expr : Node_Id) is
+             begin
+                if Nkind (Expr) = N_Qualified_Expression then
+                   Traverse_Choice (Expression (Expr));
+ 
+                elsif Nkind (Expr) = N_Type_Conversion
+                   and then not Comes_From_Source (Expr)
+                then
+                   if Expr /= Original_Node (Expr) then
+                      Traverse_Choice (Original_Node (Expr));
+                   else
+                      Traverse_Choice (Expression (Expr));
+                   end if;
+ 
+                elsif Nkind (Expr) = N_Aggregate then
+                   if Is_Record_Type (Etype (Expr)) then
+                      Refresh_Binding_Info (Aggr => Expr);
+ 
+                      declare
+                         Comp_Assoc : Node_Id :=
+                           First (Component_Associations (Expr));
+                         --  Aggregate has been normalized (components in
+                         --  order, only one component per choice, etc.).
+ 
+                         Comp_From_Type : Node_Id :=
+                           First_Component_Or_Discriminant
+                             (Base_Type (Etype (Expr)));
+ 
+                         Saved_Next_Part : constant Part_Id := Next_Part;
+                      begin
+                         while Present (Comp_Assoc) loop
+                            pragma Assert
+                              (List_Length (Choices (Comp_Assoc)) = 1);
+ 
+                            declare
+                               Comp : constant Node_Id :=
+                                 Entity (First (Choices (Comp_Assoc)));
+                               Comp_Seen : Boolean := False;
+                            begin
+                               loop
+                                  if Original_Record_Component (Comp) =
+                                    Original_Record_Component (Comp_From_Type)
+                                  then
+                                     Comp_Seen := True;
+                                  else
+                                     --  We have an aggregate of a type that
+                                     --  has a variant part (or has a
+                                     --  subcomponent type that has a variant
+                                     --  part) and we have to deal with a
+                                     --  component that is present in the type
+                                     --  but not in the aggregate (because the
+                                     --  component is in an inactive variant).
+                                     --
+                                     Update_Result_For_Full_Coverage
+                                       (Comp_Type => Etype (Comp_From_Type));
+                                  end if;
+ 
+                                  Comp_From_Type :=
+                                    Next_Component_Or_Discriminant
+                                      (Comp_From_Type);
+ 
+                                  exit when Comp_Seen;
+                               end loop;
+                            end;
+ 
+                            declare
+                               Comp_Type : constant Entity_Id :=
+                                 Etype (First (Choices (Comp_Assoc)));
+                            begin
+                               if Box_Value_Required (Comp_Type) then
+                                  --  This component is not allowed to
+                                  --  influence which alternative is
+                                  --  chosen; case choice must be box.
+                                  --
+                                  --  For example, component might be
+                                  --  of a real type or of an access type
+                                  --  or of a non-static discrete subtype.
+                                  if not Box_Present (Comp_Assoc) then
+                                     Error_Msg_N
+                                       ("Non-box case choice component value" &
+                                          " of unsupported type/subtype",
+                                        Expression (Comp_Assoc));
+                                  end if;
+                               elsif Box_Present (Comp_Assoc) then
+                                  --  Box matches all values
+                                  Update_Result_For_Full_Coverage
+                                    (Etype (First (Choices (Comp_Assoc))));
+                               else
+                                  Traverse_Choice (Expression (Comp_Assoc));
+                               end if;
+                            end;
+ 
+                            if Binding_Chars (Comp_Assoc) /= No_Name
+                            then
+                               Case_Bindings.Note_Binding
+                                 (Comp_Assoc => Comp_Assoc,
+                                  Choice     => Choice,
+                                  Alt        => Alt);
+                            end if;
+ 
+                            Next (Comp_Assoc);
+                         end loop;
+ 
+                         while Present (Comp_From_Type) loop
+                            --  Deal with any trailing inactive-variant
+                            --  components.
+                            --
+                            --  See earlier commment about calling
+                            --  Update_Result_For_Full_Coverage for such
+                            --  components.
+ 
+                            Update_Result_For_Full_Coverage
+                              (Comp_Type => Etype (Comp_From_Type));
+ 
+                            Comp_From_Type :=
+                              Next_Component_Or_Discriminant (Comp_From_Type);
+                         end loop;
+ 
+                         declare
+                            Expr_Type : Entity_Id := Etype (Expr);
+                         begin
+                            if Has_Discriminants (Expr_Type) then
+                               --  Avoid nonstatic choice expr types,
+                               --  for which Scalar_Part_Count returns 0.
+                               Expr_Type := Base_Type (Expr_Type);
+                            end if;
+ 
+                            pragma Assert
+                              (Nat (Next_Part - Saved_Next_Part)
+                                = Scalar_Part_Count (Expr_Type));
+                         end;
+                      end;
+                   elsif Is_Array_Type (Etype (Expr)) then
+                      if Is_Non_Empty_List (Component_Associations (Expr)) then
+                         Error_Msg_N
+                           ("non-positional array aggregate as/within case "
+                            & "choice not implemented", Expr);
+                      end if;
+ 
+                      if not Unconstrained_Array_Case
+                         and then List_Length (Expressions (Expr))
+                            /= Nat (Part_Id'Last)
+                      then
+                         Error_Msg_Uint_1 := UI_From_Int
+                           (List_Length (Expressions (Expr)));
+                         Error_Msg_Uint_2 := UI_From_Int (Int (Part_Id'Last));
+                         Error_Msg_N
+                           ("array aggregate length ^ does not match length " &
+                            "of statically constrained case selector ^", Expr);
+                         return;
+                      end if;
+ 
+                      declare
+                         Subexpr : Node_Id := First (Expressions (Expr));
+                      begin
+                         while Present (Subexpr) loop
+                            Traverse_Choice (Subexpr);
+                            Next (Subexpr);
+                         end loop;
+                      end;
+                   else
+                      raise Program_Error;
+                   end if;
+                elsif Nkind (Expr) = N_String_Literal then
+                   if not Is_Array_Type (Etype (Expr)) then
+                      Error_Msg_N
+                        ("User-defined string literal not allowed as/within"
+                         & "case choice", Expr);
+                   else
+                      declare
+                         Char_Type : constant Entity_Id :=
+                           Root_Type (Component_Type (Etype (Expr)));
+ 
+                         --  If the component type is not a standard character
+                         --  type then this string lit should have already been
+                         --  transformed into an aggregate in
+                         --  Resolve_String_Literal.
+                         --
+                         pragma Assert (Is_Standard_Character_Type (Char_Type));
+ 
+                         Str      : constant String_Id := Strval (Expr);
+                         Strlen   : constant Nat       := String_Length (Str);
+                         Char_Val : Uint;
+                      begin
+                         if not Unconstrained_Array_Case
+                            and then Strlen /= Nat (Part_Id'Last)
+                         then
+                            Error_Msg_Uint_1 := UI_From_Int (Strlen);
+                            Error_Msg_Uint_2 := UI_From_Int
+                              (Int (Part_Id'Last));
+                            Error_Msg_N
+                              ("String literal length ^ does not match length" &
+                               " of statically constrained case selector ^",
+                               Expr);
+                            return;
+                         end if;
+ 
+                         for Idx in 1 .. Strlen loop
+                            Char_Val :=
+                              UI_From_CC (Get_String_Char (Str, Idx));
+                            Update_Result ((Low | High => Char_Val));
+                         end loop;
+                      end;
+                   end if;
+                elsif Is_Discrete_Type (Etype (Expr)) then
+                   if Nkind (Expr) in N_Has_Entity
+                     and then Present (Entity (Expr))
+                     and then Is_Type (Entity (Expr))
+                   then
+                      declare
+                         Low  : constant Node_Id :=
+                           Type_Low_Bound (Entity (Expr));
+                         High : constant Node_Id :=
+                           Type_High_Bound (Entity (Expr));
+                      begin
+                         Update_Result ((Low  => Expr_Value (Low),
+                                         High => Expr_Value (High)));
+                      end;
+                   else
+                      pragma Assert (Compile_Time_Known_Value (Expr));
+                      Update_Result ((Low | High => Expr_Value (Expr)));
+                   end if;
+                elsif Nkind (Expr) in N_Has_Entity
+                  and then Present (Entity (Expr))
+                  and then Ekind (Entity (Expr)) = E_Constant
+                then
+                   Traverse_Choice (Expression (Parent (Entity (Expr))));
+                elsif Nkind (Original_Node (Expr))
+                        in N_Aggregate | N_String_Literal
+                then
+                   Traverse_Choice (Original_Node (Expr));
+                else
+                   Error_Msg_N
+                     ("non-aggregate case choice (or subexpression thereof)"
+                      & " that is not of a discrete type not implemented",
+                      Expr);
+                end if;
+             end Traverse_Choice;
+ 
+          --  Start of processing for Parse_Choice
+ 
+          begin
+             if Nkind (Choice) = N_Others_Choice then
+                return (Is_Others => True);
+             end if;
+ 
+             if Unconstrained_Array_Case then
+                --  Treat length like a discriminant
+                Update_Result ((Low | High =>
+                                  UI_From_Int (Array_Choice_Length (Choice))));
+             end if;
+ 
+             Traverse_Choice (Choice);
+ 
+             if Unconstrained_Array_Case then
+                --  This is somewhat tricky. Suppose we are casing on String,
+                --  the longest choice in the case statement is length 10, and
+                --  the choice we are looking at now is of length 6. We fill
+                --  in the trailing 4 slots here.
+                while Next_Part <= Part_Id'Last loop
+                   Update_Result_For_Full_Coverage
+                     (Comp_Type => Component_Type (Case_Expr_Type));
+                end loop;
+             end if;
+ 
+             --  Avoid returning uninitialized garbage in error case
+             if Next_Part /= Part_Id'Last + 1 then
+                pragma Assert (Serious_Errors_Detected > 0);
+                Result.Ranges := (others => (Low => Uint_1, High => Uint_0));
+             end if;
+ 
+             return Result;
+          end Parse_Choice;
+ 
+          package body Case_Bindings is
+ 
+             type Binding is record
+                Comp_Assoc : Node_Id;
+                Choice     : Node_Id;
+                Alt        : Node_Id;
+             end record;
+ 
+             type Binding_Index is new Natural;
+ 
+             package Case_Bindings_Table is new Table.Table
+               (Table_Component_Type => Binding,
+                Table_Index_Type     => Binding_Index,
+                Table_Low_Bound      => 1,
+                Table_Initial        => 16,
+                Table_Increment      => 64,
+                Table_Name           => "Composite_Case_Ops.Case_Bindings");
+ 
+             ------------------
+             -- Note_Binding --
+             ------------------
+ 
+             procedure Note_Binding
+               (Comp_Assoc : Node_Id;
+                Choice     : Node_Id;
+                Alt        : Node_Id)
+             is
+             begin
+                Case_Bindings_Table.Append
+                  ((Comp_Assoc => Comp_Assoc,
+                    Choice     => Choice,
+                    Alt        => Alt));
+             end Note_Binding;
+ 
+             --------------------
+             -- Check_Bindings --
+             --------------------
+ 
+             procedure Check_Bindings
+             is
+                use Case_Bindings_Table;
+ 
+                function Binding_Subtype (Idx : Binding_Index;
+                                          Tab : Table_Type)
+                  return Entity_Id is
+                  (Etype (Nlists.First (Choices (Tab (Idx).Comp_Assoc))));
+ 
+                procedure Declare_Binding_Objects
+                   (Alt_Start             : Binding_Index;
+                    Alt                   : Node_Id;
+                    First_Choice_Bindings : Natural;
+                    Tab                   : Table_Type);
+                --  Declare the binding objects for a given alternative
+ 
+                ------------------------------
+                --  Declare_Binding_Objects --
+                ------------------------------
+ 
+                procedure Declare_Binding_Objects
+                   (Alt_Start             : Binding_Index;
+                    Alt                   : Node_Id;
+                    First_Choice_Bindings : Natural;
+                    Tab                   : Table_Type)
+                is
+                   Loc : constant Source_Ptr := Sloc (Alt);
+                   Declarations : constant List_Id := New_List;
+                   Decl         : Node_Id;
+                   Obj_Type     : Entity_Id;
+                   Def_Id       : Entity_Id;
+                begin
+                   for FC_Idx in Alt_Start ..
+                     Alt_Start + Binding_Index (First_Choice_Bindings - 1)
+                   loop
+                      Obj_Type := Binding_Subtype (FC_Idx, Tab);
+                      Def_Id := Make_Defining_Identifier
+                                  (Loc,
+                                   Binding_Chars (Tab (FC_Idx).Comp_Assoc));
+ 
+                      --  Either make a copy or rename the original. At a
+                      --  minimum, we do not want a copy if it would need
+                      --  finalization. Copies may also introduce problems
+                      --  if default init can have side effects (although we
+                      --  could suppress such default initialization).
+                      --  We have to make a copy in any cases where
+                      --  Unrestricted_Access doesn't work.
+                      --
+                      --  This is where the copy-or-rename decision is made.
+                      --  In many cases either way would work and so we have
+                      --  some flexibility here.
+ 
+                      if not Is_By_Copy_Type (Obj_Type) then
+                         --  Generate
+                         --     type Ref
+                         --       is access constant Obj_Type;
+                         --     Ptr : Ref := <some bogus value>;
+                         --     Obj : Obj_Type renames Ptr.all;
+                                        --
+                         --  Initialization of Ptr will be generated later
+                         --  during expansion.
+ 
+                         declare
+                            Ptr_Type : constant Entity_Id :=
+                              Make_Temporary (Loc, 'P');
+ 
+                            Ptr_Type_Def : constant Node_Id :=
+                              Make_Access_To_Object_Definition (Loc,
+                                All_Present => True,
+                                Subtype_Indication =>
+                                  New_Occurrence_Of (Obj_Type, Loc));
+ 
+                            Ptr_Type_Decl : constant Node_Id :=
+                              Make_Full_Type_Declaration (Loc,
+                                Ptr_Type,
+                                Type_Definition => Ptr_Type_Def);
+ 
+                            Ptr_Obj : constant Entity_Id :=
+                              Make_Temporary (Loc, 'T');
+ 
+                            --  We will generate initialization code for this
+                            --  object later (during expansion) but in the
+                            --  meantime we don't want the dereference that
+                            --  is generated a few lines below here to be
+                            --  transformed into a Raise_C_E. To prevent this,
+                            --  we provide a bogus initial value here; this
+                            --  initial value will be removed later during
+                            --  expansion.
+ 
+                            Ptr_Obj_Decl : constant Node_Id :=
+                              Make_Object_Declaration
+                                (Loc, Ptr_Obj,
+                                 Object_Definition =>
+                                   New_Occurrence_Of (Ptr_Type, Loc),
+                                 Expression =>
+                                   Unchecked_Convert_To
+                                     (Ptr_Type,
+                                      Make_Integer_Literal (Loc, 5432)));
+                         begin
+                            Mutate_Ekind (Ptr_Type, E_Access_Type);
+ 
+                            --  in effect, Storage_Size => 0
+                            Set_No_Pool_Assigned (Ptr_Type);
+ 
+                            Set_Is_Access_Constant (Ptr_Type);
+ 
+                            --  We could set Ptr_Type'Alignment here if that
+                            --  ever turns out to be needed for renaming a
+                            --  misaligned subcomponent.
+ 
+                            Mutate_Ekind (Ptr_Obj, E_Variable);
+                            Set_Etype (Ptr_Obj, Ptr_Type);
+ 
+                            Decl :=
+                              Make_Object_Renaming_Declaration
+                                (Loc, Def_Id,
+                                 Subtype_Mark =>
+                                   New_Occurrence_Of (Obj_Type, Loc),
+                                 Name =>
+                                   Make_Explicit_Dereference
+                                     (Loc, New_Occurrence_Of (Ptr_Obj, Loc)));
+ 
+                            Append_To (Declarations, Ptr_Type_Decl);
+                            Append_To (Declarations, Ptr_Obj_Decl);
+                         end;
+                      else
+                         Decl := Make_Object_Declaration
+                           (Sloc => Loc,
+                            Defining_Identifier => Def_Id,
+                            Object_Definition =>
+                               New_Occurrence_Of (Obj_Type, Loc));
+                      end if;
+                      Append_To (Declarations, Decl);
+                   end loop;
+ 
+                   declare
+                      Old_Statements : constant List_Id := Statements (Alt);
+                      New_Statements : constant List_Id := New_List;
+ 
+                      Block_Statement : constant Node_Id :=
+                        Make_Block_Statement (Sloc => Loc,
+                          Declarations => Declarations,
+                          Handled_Statement_Sequence =>
+                            Make_Handled_Sequence_Of_Statements
+                              (Loc, Old_Statements),
+                          Has_Created_Identifier => True);
+                   begin
+                      Append_To (New_Statements, Block_Statement);
+                      Set_Statements (Alt, New_Statements);
+                   end;
+                end Declare_Binding_Objects;
+             begin
+                if Last = 0 then
+                   --  no bindings to check
+                   return;
+                end if;
+ 
+                declare
+                   Tab : Table_Type
+                           renames Case_Bindings_Table.Table (1 .. Last);
+ 
+                   function Same_Id (Idx1, Idx2 : Binding_Index)
+                     return Boolean is (
+                     Binding_Chars (Tab (Idx1).Comp_Assoc) =
+                     Binding_Chars (Tab (Idx2).Comp_Assoc));
+                begin
+                   --  Verify that elements with given choice or alt value
+                   --  are contiguous, and that elements with equal
+                   --  choice values have same alt value.
+ 
+                   for Idx1 in 2 .. Tab'Last loop
+                      if Tab (Idx1 - 1).Choice /= Tab (Idx1).Choice then
+                         pragma Assert
+                           (for all Idx2 in Idx1 + 1 .. Tab'Last =>
+                              Tab (Idx2).Choice /= Tab (Idx1 - 1).Choice);
+                      else
+                         pragma Assert (Tab (Idx1 - 1).Alt = Tab (Idx1).Alt);
+                      end if;
+                      if Tab (Idx1 - 1).Alt /= Tab (Idx1).Alt then
+                         pragma Assert
+                           (for all Idx2 in Idx1 + 1 .. Tab'Last =>
+                              Tab (Idx2).Alt /= Tab (Idx1 - 1).Alt);
+                      end if;
+                   end loop;
+ 
+                   --  Check for user errors:
+                   --  1) Two choices for a given alternative shall define the
+                   --     same set of names. Can't have
+                   --        when (<X>, 0) | (0, <Y>) =>
+                   --  2) A choice shall not define a name twice. Can't have
+                   --        when (A => <X>, B => <X>, C => 0) =>
+                   --  3) Two definitions of a name within one alternative
+                   --     shall have statically matching component subtypes.
+                   --     Can't have
+                   --        type R is record Int : Integer;
+                   --                         Nat : Natural; end record;
+                   --        case R'(...) is
+                   --          when (<X>, 1) | (1, <X>) =>
+                   --  4) A given binding shall match only one value.
+                   --     Can't have
+                   --         (Fld1 | Fld2 => (Fld => <X>))
+                   --     For now, this is enforced *very* conservatively
+                   --     with respect to arrays - a binding cannot match
+                   --     any part of an array. This is temporary.
+ 
+                   for Idx1 in Tab'Range loop
+                      if Idx1 = 1
+                        or else Tab (Idx1 - 1).Alt /= Tab (Idx1).Alt
+                      then
+                         --  Process one alternative
+                         declare
+                            Alt_Start : constant Binding_Index := Idx1;
+                            Alt : constant Node_Id := Tab (Alt_Start).Alt;
+ 
+                            First_Choice : constant Node_Id :=
+                              Nlists.First (Discrete_Choices (Alt));
+                            First_Choice_Bindings : Natural := 0;
+                         begin
+                            --  Check for duplicates within one choice,
+                            --  and for choices with no bindings.
+ 
+                            if First_Choice /= Tab (Alt_Start).Choice then
+                               Error_Msg_N ("binding(s) missing for choice",
+                                            First_Choice);
+                               return;
+                            end if;
+ 
+                            declare
+                               Current_Choice : Node_Id := First_Choice;
+                               Choice_Start : Binding_Index := Alt_Start;
+                            begin
+                               for Idx2 in Alt_Start .. Tab'Last loop
+                                  exit when Tab (Idx2).Alt /= Alt;
+                                  if Tab (Idx2).Choice = Current_Choice then
+                                     for Idx3 in Choice_Start .. Idx2 - 1 loop
+                                        if Same_Id (Idx2, Idx3)
+                                        then
+                                           Error_Msg_N
+                                             ("duplicate binding in choice",
+                                              Current_Choice);
+                                           return;
+                                        end if;
+                                     end loop;
+                                  else
+                                     Next (Current_Choice);
+                                     pragma Assert (Present (Current_Choice));
+                                     Choice_Start := Idx2;
+ 
+                                     if Tab (Idx2).Choice /= Current_Choice
+                                     then
+                                        Error_Msg_N
+                                          ("binding(s) missing for choice",
+                                           Current_Choice);
+                                        return;
+                                     end if;
+                                  end if;
+                               end loop;
+ 
+                               --  If we made it through all the bindings
+                               --  for this alternative but didn't make it
+                               --  to the last choice, then bindings are
+                               --  missing for all remaining choices.
+                               --  We only complain about the first one.
+ 
+                               if Present (Next (Current_Choice)) then
+                                  Error_Msg_N
+                                    ("binding(s) missing for choice",
+                                      Next (Current_Choice));
+                                  return;
+                               end if;
+                            end;
+ 
+                            --  Count bindings for first choice of alternative
+ 
+                            for FC_Idx in Alt_Start .. Tab'Last loop
+                               exit when Tab (FC_Idx).Choice /= First_Choice;
+                               First_Choice_Bindings :=
+                                 First_Choice_Bindings + 1;
+                            end loop;
+ 
+                            declare
+                               Current_Choice : Node_Id := First_Choice;
+                               Current_Choice_Bindings : Natural := 0;
+                            begin
+                               for Idx2 in Alt_Start .. Tab'Last loop
+                                  exit when Tab (Idx2).Alt /= Alt;
+ 
+                                  --  If starting a new choice
+ 
+                                  if Tab (Idx2).Choice /= Current_Choice then
+ 
+                                     --  Check count for choice just finished
+ 
+                                     if Current_Choice_Bindings
+                                       /= First_Choice_Bindings
+                                     then
+                                        Error_Msg_N
+                                          ("subsequent choice has different"
+                                           & " number of bindings than first"
+                                           & " choice", Current_Choice);
+                                     end if;
+ 
+                                     Current_Choice := Tab (Idx2).Choice;
+                                     Current_Choice_Bindings := 1;
+ 
+                                     --  Remember that Alt has both one or more
+                                     --  bindings and two or more choices; we'll
+                                     --  need to know this during expansion.
+ 
+                                     Set_Multidefined_Bindings (Alt, True);
+                                  else
+                                     Current_Choice_Bindings :=
+                                       Current_Choice_Bindings + 1;
+                                  end if;
+ 
+                                  --  Check that first choice has binding with
+                                  --  matching name; check subtype consistency.
+ 
+                                  declare
+                                     Found : Boolean := False;
+                                  begin
+                                     for FC_Idx in
+                                       Alt_Start ..
+                                       Alt_Start + Binding_Index
+                                                     (First_Choice_Bindings - 1)
+                                     loop
+                                        if Same_Id (Idx2, FC_Idx) then
+                                           if not Subtypes_Statically_Match
+                                             (Binding_Subtype (Idx2, Tab),
+                                              Binding_Subtype (FC_Idx, Tab))
+                                           then
+                                              Error_Msg_N
+                                                ("subtype of binding in "
+                                                 & "subsequent choice does not "
+                                                 & "match that in first choice",
+                                                 Tab (Idx2).Comp_Assoc);
+                                           end if;
+                                           Found := True;
+                                           exit;
+                                        end if;
+                                     end loop;
+ 
+                                     if not Found then
+                                        Error_Msg_N
+                                          ("binding defined in subsequent "
+                                           & "choice not defined in first "
+                                           & "choice", Current_Choice);
+                                     end if;
+                                  end;
+ 
+                                  --  Check for illegal repeated binding
+                                  --  via an enclosing aggregate, as in
+                                  --  (F1 | F2 => (F3 => Natural is X,
+                                  --               F4 => Natural))
+                                  --  where the inner aggregate would be ok.
+ 
+                                  declare
+                                     Rover : Node_Id := Tab (Idx2).Comp_Assoc;
+                                  begin
+                                     while Rover /= Tab (Idx2).Choice loop
+                                        Rover :=
+                                          (if Is_List_Member (Rover) then
+                                             Parent (List_Containing (Rover))
+                                           else Parent (Rover));
+                                        pragma Assert (Present (Rover));
+                                        if Nkind (Rover)
+                                          = N_Component_Association
+                                          and then List_Length (Choices (Rover))
+                                          > 1
+                                        then
+                                           Error_Msg_N
+                                             ("binding shared by multiple "
+                                                 & "enclosing components",
+                                              Tab (Idx2).Comp_Assoc);
+                                        end if;
+                                     end loop;
+                                  end;
+                               end loop;
+                            end;
+ 
+                            --  Construct the (unanalyzed) declarations for
+                            --  the current alternative. Then analyze them.
+ 
+                            if First_Choice_Bindings > 0 then
+                               Declare_Binding_Objects
+                                 (Alt_Start             => Alt_Start,
+                                  Alt                   => Alt,
+                                  First_Choice_Bindings =>
+                                    First_Choice_Bindings,
+                                  Tab                   => Tab);
+                            end if;
+                         end;
+                      end if;
+                   end loop;
+                end;
+             end Check_Bindings;
+          end Case_Bindings;
+ 
+          function Choice_Bounds_Info return Choices_Range_Info;
+          --  Returns mapping from any given Choice_Id value to that choice's
+          --  component-to-range map.
+ 
+          ------------------------
+          -- Choice_Bounds_Info --
+          ------------------------
+ 
+          function Choice_Bounds_Info return Choices_Range_Info is
+             Result : Choices_Range_Info;
+             Alt    : Node_Id := First (Alternatives (Case_Statement));
+             C_Id   : Choice_Id := 1;
+          begin
+             while Present (Alt) loop
+                declare
+                   Choice : Node_Id := First (Discrete_Choices (Alt));
+                begin
+                   while Present (Choice) loop
+                      Result (C_Id) := Parse_Choice (Choice, Alt => Alt);
+ 
+                      Next (Choice);
+                      if C_Id /= Choice_Id'Last then
+                         C_Id := C_Id + 1;
+                      end if;
+                   end loop;
+                end;
+                Next (Alt);
+             end loop;
+ 
+             pragma Assert (C_Id = Choice_Id'Last);
+ 
+             --  No more calls to Note_Binding, so time for checks.
+             Case_Bindings.Check_Bindings;
+ 
+             return Result;
+          end Choice_Bounds_Info;
+ 
+          Choices_Bounds : constant Choices_Range_Info := Choice_Bounds_Info;
+ 
+          package body Value_Sets is
+             use GNAT;
+ 
+             function Hash (Key : Uint) return Bucket_Range_Type is
+               (Bucket_Range_Type
+                  (UI_To_Int (Key mod (Uint_2 ** Uint_31))));
+ 
+             package Uint_Sets is new GNAT.Sets.Membership_Sets
+               (Uint, "=", Hash);
+ 
+             type Representative_Values_Array is
+               array (Part_Id) of Uint_Sets.Membership_Set;
+ 
+             function Representative_Values_Init
+               return Representative_Values_Array;
+             --  Select the representative values for each Part_Id value.
+             --  This function is called exactly once, immediately after it
+             --  is declared.
+ 
+             --------------------------------
+             -- Representative_Values_Init --
+             --------------------------------
+ 
+             function Representative_Values_Init
+               return Representative_Values_Array
+             is
+                --  For each range of each choice (as well as the range for the
+                --  component subtype, which is handled in the first loop),
+                --  insert the low bound of the range and the successor of
+                --  the high bound into the corresponding R_V element.
+                --
+                --  The idea we are trying to capture here is somewhat tricky.
+                --  Given an arbitrary point P1 in the Cartesian product
+                --  of the Component_Bounds sets, we want to be able
+                --  to map that to a point P2 in the (smaller) Cartesian product
+                --  of the Representative_Values sets that has the property
+                --  that for every choice of the case statement, P1 matches
+                --  the choice if and only if P2 also matches. Given that,
+                --  we can implement the overlapping/containment/etc. rules
+                --  safely by just looking at (using brute force enumeration)
+                --  the (smaller) Cartesian product of the R_V sets.
+                --  We are never going to actually perform this point-to-point
+                --  mapping - just the fact that it exists is enough to ensure
+                --  we can safely look at just the R_V sets.
+                --
+                --  The desired mapping can be implemented by mapping a point
+                --  P1 to a point P2 by reducing each of P1's coordinates down
+                --  to the largest element of the corresponding R_V set that is
+                --  less than or equal to the original coordinate value (such
+                --  an element Y will always exist because the R_V set for a
+                --  given component always includes the low bound of the
+                --  component subtype). It then suffices to show that every
+                --  choice in the case statement yields the same Boolean result
+                --  for P1 as for P2.
+                --
+                --  Suppose the contrary. Then there is some particular
+                --  coordinate position X (i.e., a Part_Id value) and some
+                --  choice C where exactly one of P1(X) and P2(X) belongs to
+                --  the (contiguous) range associated with C(X); call that
+                --  range L .. H. We know that P2(X) <= P1(X) because the
+                --  mapping never increases coordinate values. Consider three
+                --  cases: P1(X) lies within the L .. H range, or it is greater
+                --  than H, or it is lower than L.
+                --  The third case is impossible because reducing a value that
+                --  is less than L can only produce another such value,
+                --  violating the "exactly one" assumption. The second
+                --  case is impossible because L belongs to the corresponding
+                --  R_V set, so P2(X) >= L and both values belong to the
+                --  range, again violating the "exactly one" assumption.
+                --  Finally, the third case is impossible because H+1 belongs
+                --  to the corresponding R_V set, so P2(X) > H, so neither
+                --  value belongs to the range, again violating the "exactly
+                --  one" assumption. So our initial supposition was wrong. QED.
+ 
+                use Uint_Sets;
+ 
+                Result : constant Representative_Values_Array
+                  := (others => Uint_Sets.Create (Initial_Size => 32));
+ 
+                procedure Insert_Representative (Value : Uint; P : Part_Id);
+                --  Insert the given Value into the representative values set
+                --  for the given component if it belongs to the component's
+                --  subtype. Otherwise, do nothing.
+ 
+                ---------------------------
+                -- Insert_Representative --
+                ---------------------------
+ 
+                procedure Insert_Representative (Value : Uint; P : Part_Id) is
+                begin
+                   if Value >= Component_Bounds (P).Low and
+                     Value <= Component_Bounds (P).High
+                   then
+                      Insert (Result (P), Value);
+                   end if;
+                end Insert_Representative;
+ 
+             begin
+                for P in Part_Id loop
+                   Insert_Representative (Component_Bounds (P).Low, P);
+                end loop;
+                for C of Choices_Bounds loop
+                   if not C.Is_Others then
+                      for P in Part_Id loop
+                         if C.Ranges (P).Low <= C.Ranges (P).High then
+                            Insert_Representative (C.Ranges (P).Low, P);
+                            Insert_Representative (C.Ranges (P).High + 1, P);
+                         end if;
+                      end loop;
+                   end if;
+                end loop;
+                return Result;
+             end Representative_Values_Init;
+ 
+             Representative_Values : constant Representative_Values_Array
+               := Representative_Values_Init;
+             --  We want to avoid looking at every point in the Cartesian
+             --  product of all component values. Instead we select, for each
+             --  component, a set of representative values and then look only
+             --  at the Cartesian product of those sets. A single value can
+             --  safely represent a larger enclosing interval if every choice
+             --  for that component either completely includes or completely
+             --  excludes the interval. The elements of this array will be
+             --  populated by a call to Initialize_Representative_Values and
+             --  will remain constant after that.
+ 
+             type Value_Index_Base is new Natural;
+ 
+             function Value_Index_Count return Value_Index_Base;
+             --  Returns the product of the sizes of the Representative_Values
+             --  sets (i.e., the size of the Cartesian product of the sets).
+             --  May return zero if one of the sets is empty.
+             --  This function is called exactly once, immediately after it
+             --  is declared.
+ 
+             -----------------------
+             -- Value_Index_Count --
+             -----------------------
+ 
+             function Value_Index_Count return Value_Index_Base is
+                Result : Value_Index_Base := 1;
+             begin
+                for Set of Representative_Values loop
+                   Result := Result * Value_Index_Base (Uint_Sets.Size (Set));
+                end loop;
+                return Result;
+             exception
+                when Constraint_Error =>
+                   Error_Msg_N
+                     ("Capacity exceeded in compiling case statement with"
+                       & " composite selector type", Case_Statement);
+                   raise;
+             end Value_Index_Count;
+ 
+             Max_Value_Index : constant Value_Index_Base := Value_Index_Count;
+ 
+             subtype Value_Index is Value_Index_Base range 1 .. Max_Value_Index;
+             type Value_Index_Set is array (Value_Index) of Boolean;
+ 
+             package Value_Index_Set_Table is new Table.Table
+               (Table_Component_Type => Value_Index_Set,
+                Table_Index_Type     => Value_Set,
+                Table_Low_Bound      => 1,
+                Table_Initial        => 16,
+                Table_Increment      => 100,
+                Table_Name           => "Composite_Case_Ops.Value_Sets");
+             --  A nonzero Value_Set value is an index into this table.
+ 
+             function Indexed (Index : Value_Set) return Value_Index_Set
+               is (Value_Index_Set_Table.Table.all (Index));
+ 
+             function Allocate_Table_Element (Initial_Value : Value_Index_Set)
+               return Value_Set;
+             --  Allocate and initialize a new table element; return its index.
+ 
+             ----------------------------
+             -- Allocate_Table_Element --
+             ----------------------------
+ 
+             function Allocate_Table_Element (Initial_Value : Value_Index_Set)
+               return Value_Set
+             is
+                use Value_Index_Set_Table;
+             begin
+                Append (Initial_Value);
+                return Last;
+             end Allocate_Table_Element;
+ 
+             procedure Assign_Table_Element (Index : Value_Set;
+                                             Value : Value_Index_Set);
+             --  Assign specified value to specified table element.
+ 
+             --------------------------
+             -- Assign_Table_Element --
+             --------------------------
+ 
+             procedure Assign_Table_Element (Index : Value_Set;
+                                             Value : Value_Index_Set)
+             is
+             begin
+                Value_Index_Set_Table.Table.all (Index) := Value;
+             end Assign_Table_Element;
+ 
+             -------------
+             -- Compare --
+             -------------
+ 
+             function Compare (S1, S2 : Value_Set) return Set_Comparison is
+             begin
+                if S1 = Empty or S2 = Empty then
+                   return Disjoint;
+                elsif Indexed (S1) = Indexed (S2) then
+                   return Equal;
+                else
+                   declare
+                      Intersection : constant Value_Index_Set
+                        := Indexed (S1) and Indexed (S2);
+                   begin
+                      if (for all Flag of Intersection => not Flag) then
+                         return Disjoint;
+                      elsif Intersection = Indexed (S1) then
+                         return Contained_By;
+                      elsif Intersection = Indexed (S2) then
+                         return Contains;
+                      else
+                         return Overlaps;
+                      end if;
+                   end;
+                end if;
+             end Compare;
+ 
+             -------------------------
+             -- Complement_Is_Empty --
+             -------------------------
+ 
+             function Complement_Is_Empty (Set : Value_Set) return Boolean
+               is (Set /= Empty
+                   and then (for all Flag of Indexed (Set) => Flag));
+ 
+             ---------------------
+             -- Free_Value_Sets --
+             ---------------------
+             procedure Free_Value_Sets is
+             begin
+                Value_Index_Set_Table.Free;
+             end Free_Value_Sets;
+ 
+             -----------
+             -- Union --
+             -----------
+ 
+             procedure Union (Target : in out Value_Set; Source : Value_Set) is
+             begin
+                if Source /= Empty then
+                   if Target = Empty then
+                      Target := Allocate_Table_Element (Indexed (Source));
+                   else
+                      Assign_Table_Element
+                        (Target, Indexed (Target) or Indexed (Source));
+                   end if;
+                end if;
+             end Union;
+ 
+             ------------
+             -- Remove --
+             ------------
+ 
+             procedure Remove (Target : in out Value_Set; Source : Value_Set) is
+             begin
+                if Source /= Empty and Target /= Empty then
+                   Assign_Table_Element
+                     (Target, Indexed (Target) and not Indexed (Source));
+                   if (for all V of Indexed (Target) => not V) then
+                      Target := Empty;
+                   end if;
+                end if;
+             end Remove;
+ 
+             ---------------------
+             -- Matching_Values --
+             ---------------------
+ 
+             function Matching_Values
+               (Info : Composite_Range_Info) return Value_Set
+             is
+                Matches    : Value_Index_Set;
+                Next_Index : Value_Index := 1;
+                Done       : Boolean := False;
+                Point      : array (Part_Id) of Uint;
+ 
+                procedure Test_Point_For_Match;
+                --  Point identifies a point in the Cartesian product of the
+                --  representative value sets. Record whether that Point
+                --  belongs to the product-of-ranges specified by Info.
+ 
+                --------------------------
+                -- Test_Point_For_Match --
+                --------------------------
+ 
+                procedure Test_Point_For_Match is
+                   function In_Range (Val : Uint; Rang : Discrete_Range_Info)
+                     return Boolean is
+                     ((Rang.Low <= Val) and then (Val <= Rang.High));
+                begin
+                   pragma Assert (not Done);
+                   Matches (Next_Index) :=
+                     (for all P in Part_Id => In_Range (Point (P), Info (P)));
+                   if Next_Index = Matches'Last then
+                      Done := True;
+                   else
+                      Next_Index := Next_Index + 1;
+                   end if;
+                end Test_Point_For_Match;
+ 
+                procedure Test_Points (P : Part_Id);
+                --  Iterate over the Cartesian product of the representative
+                --  value sets, calling Test_Point_For_Match for each point.
+ 
+                -----------------
+                -- Test_Points --
+                -----------------
+ 
+                procedure Test_Points (P : Part_Id) is
+                   use Uint_Sets;
+                   Iter : Iterator := Iterate (Representative_Values (P));
+                begin
+                   --  We could traverse here in sorted order, as opposed to
+                   --  whatever order the set iterator gives us.
+                   --  No need for that as long as every iteration over
+                   --  a given representative values set yields the same order.
+                   --  Not sorting is more efficient, but it makes it harder to
+                   --  interpret a Value_Index_Set bit vector when debugging.
+ 
+                   while Has_Next (Iter) loop
+                      Next (Iter, Point (P));
+ 
+                      --  If we have finished building up a Point value, then
+                      --  test it for matching. Otherwise, recurse to continue
+                      --  building up a point value.
+ 
+                      if P = Part_Id'Last then
+                         Test_Point_For_Match;
+                      else
+                         Test_Points (P + 1);
+                      end if;
+                   end loop;
+                end Test_Points;
+ 
+             begin
+                Test_Points (1);
+                if (for all Flag of Matches => not Flag) then
+                   return Empty;
+                end if;
+                return Allocate_Table_Element (Matches);
+             end Matching_Values;
+ 
+          end Value_Sets;
+ 
+          --------------
+          -- Analysis --
+          --------------
+ 
+          function Analysis return Choices_Info is
+             Result : Choices_Info;
+             Alt    : Node_Id := First (Alternatives (Case_Statement));
+             A_Id   : Alternative_Id := 1;
+             C_Id   : Choice_Id := 1;
+          begin
+             while Present (Alt) loop
+                declare
+                   Choice : Node_Id := First (Discrete_Choices (Alt));
+                begin
+                   while Present (Choice) loop
+                      if Nkind (Choice) = N_Others_Choice then
+                         pragma Assert (Choices_Bounds (C_Id).Is_Others);
+                         Result (C_Id) :=
+                           (Alternative => A_Id,
+                            Is_Others   => True);
+                      else
+                         Result (C_Id) :=
+                           (Alternative => A_Id,
+                            Is_Others   => False,
+                            Matches     => Value_Sets.Matching_Values
+                                             (Choices_Bounds (C_Id).Ranges));
+                      end if;
+                      Next (Choice);
+                      if C_Id /= Choice_Id'Last then
+                         C_Id := C_Id + 1;
+                      end if;
+                   end loop;
+                end;
+ 
+                Next (Alt);
+                if A_Id /= Alternative_Id'Last then
+                   A_Id := A_Id + 1;
+                end if;
+             end loop;
+ 
+             pragma Assert (A_Id = Alternative_Id'Last);
+             pragma Assert (C_Id = Choice_Id'Last);
+ 
+             return Result;
+          end Analysis;
+ 
+       end Choice_Analysis;
+ 
+    end Composite_Case_Ops;
+ 
     --------------------------
     -- Expand_Others_Choice --
     --------------------------
*************** package body Sem_Case is
*** 1065,1073 ****
  
           if Is_Standard_Character_Type (Choice_Type) then
              Set_Character_Literal_Name (Char_Code (UI_To_Int (Value)));
!             Lit := New_Node (N_Character_Literal, Loc);
!             Set_Chars (Lit, Name_Find);
!             Set_Char_Literal_Value (Lit, Value);
              Set_Etype (Lit, Choice_Type);
              Set_Is_Static_Expression (Lit, True);
              return Lit;
--- 2926,2935 ----
  
           if Is_Standard_Character_Type (Choice_Type) then
              Set_Character_Literal_Name (Char_Code (UI_To_Int (Value)));
!             Lit :=
!               Make_Character_Literal (Loc,
!                 Chars              => Name_Find,
!                 Char_Literal_Value => Value);
              Set_Etype (Lit, Choice_Type);
              Set_Is_Static_Expression (Lit, True);
              return Lit;
*************** package body Sem_Case is
*** 1315,1324 ****
        -------------------
  
        procedure Check_Choices
!         (N                        : Node_Id;
!          Alternatives             : List_Id;
!          Subtyp                   : Entity_Id;
!          Others_Present           : out Boolean)
        is
           E : Entity_Id;
  
--- 3177,3186 ----
        -------------------
  
        procedure Check_Choices
!         (N              : Node_Id;
!          Alternatives   : List_Id;
!          Subtyp         : Entity_Id;
!          Others_Present : out Boolean)
        is
           E : Entity_Id;
  
*************** package body Sem_Case is
*** 1370,1375 ****
--- 3232,3246 ----
           --  later entry into the choices table so that they can be sorted
           --  later on.
  
+          procedure Check_Case_Pattern_Choices;
+          --  Check choices validity for the Ada extension case where the
+          --  selecting expression is not of a discrete type and so the
+          --  choices are patterns.
+ 
+          procedure Check_Composite_Case_Selector;
+          --  Check that the (non-discrete) type of the expression being
+          --  cased on is suitable.
+ 
           procedure Handle_Static_Predicate
             (Typ : Entity_Id;
              Lo  : Node_Id;
*************** package body Sem_Case is
*** 1491,1496 ****
--- 3362,3501 ----
              Num_Choices := Num_Choices + 1;
           end Check;
  
+          --------------------------------
+          -- Check_Case_Pattern_Choices --
+          --------------------------------
+ 
+          procedure Check_Case_Pattern_Choices is
+             --  ??? Need to Free/Finalize value sets allocated here.
+ 
+             package Ops is new Composite_Case_Ops.Choice_Analysis
+               (Case_Statement => N);
+             use Ops;
+             use Ops.Value_Sets;
+ 
+             Empty : Value_Set renames Value_Sets.Empty;
+             --  Cope with hiding due to multiple use clauses
+ 
+             Info        : constant Choices_Info := Analysis;
+             Others_Seen : Boolean := False;
+ 
+          begin
+             declare
+                Matches : array (Alternative_Id) of Value_Sets.Value_Set :=
+                  (others => Empty);
+ 
+                Flag_Overlapping_Within_One_Alternative : constant Boolean :=
+                  False;
+                --  We may want to flag overlapping (perhaps with only a
+                --  warning) if the pattern binds an identifier, as in
+                --    when (Positive, <X>) | (Integer, <X>) =>
+ 
+                Covered : Value_Set := Empty;
+                --  The union of all alternatives seen so far
+ 
+             begin
+                for Choice of Info loop
+                   if Choice.Is_Others then
+                      Others_Seen := True;
+                   else
+                      if Flag_Overlapping_Within_One_Alternative
+                         and then (Compare (Matches (Choice.Alternative),
+                                   Choice.Matches) /= Disjoint)
+                      then
+                         Error_Msg_N
+                           ("bad overlapping within one alternative", N);
+                      end if;
+ 
+                      Union (Target => Matches (Choice.Alternative),
+                             Source => Choice.Matches);
+                   end if;
+                end loop;
+ 
+                for A1 in Alternative_Id loop
+                   for A2 in Alternative_Id
+                               range A1 + 1 .. Alternative_Id'Last
+                   loop
+                      case Compare (Matches (A1), Matches (A2)) is
+                         when Disjoint | Contained_By =>
+                            null; -- OK
+                         when Overlaps =>
+                            declare
+                               Uncovered_1, Uncovered_2 : Value_Set := Empty;
+                            begin
+                               Union (Uncovered_1, Matches (A1));
+                               Remove (Uncovered_1, Covered);
+                               Union (Uncovered_2, Matches (A2));
+                               Remove (Uncovered_2, Covered);
+ 
+                               --  Recheck for overlap after removing choices
+                               --  covered by earlier alternatives.
+ 
+                               case Compare (Uncovered_1, Uncovered_2) is
+                                  when Disjoint | Contained_By =>
+                                     null;
+                                  when Contains | Overlaps | Equal =>
+                                     Error_Msg_N
+                                       ("bad alternative overlapping", N);
+                               end case;
+                            end;
+ 
+                         when Equal =>
+                            Error_Msg_N ("alternatives match same values", N);
+                         when Contains =>
+                            Error_Msg_N ("alternatives in wrong order", N);
+                      end case;
+                   end loop;
+ 
+                   Union (Target => Covered, Source => Matches (A1));
+                end loop;
+ 
+                if (not Others_Seen) and then not Complement_Is_Empty (Covered)
+                then
+                   Error_Msg_N ("not all values are covered", N);
+                end if;
+             end;
+ 
+             Ops.Value_Sets.Free_Value_Sets;
+          end Check_Case_Pattern_Choices;
+ 
+          -----------------------------------
+          -- Check_Composite_Case_Selector --
+          -----------------------------------
+ 
+          procedure Check_Composite_Case_Selector is
+          begin
+             if not Is_Composite_Type (Subtyp) then
+                Error_Msg_N
+                  ("case selector type must be discrete or composite", N);
+             elsif Is_Limited_Type (Subtyp) then
+                Error_Msg_N ("case selector type must not be limited", N);
+             elsif Is_Class_Wide_Type (Subtyp) then
+                Error_Msg_N ("case selector type must not be class-wide", N);
+             elsif Needs_Finalization (Subtyp)
+               and then Is_Newly_Constructed
+                          (Expression (N), Context_Requires_NC => False)
+             then
+                --  We could allow this case as long as there are no bindings.
+                --
+                --  If there are bindings, then allowing this case will get
+                --  messy because the selector expression will be finalized
+                --  before the statements of the selected alternative are
+                --  executed (unless we add an INOX-specific change to the
+                --  accessibility rules to prevent this earlier-than-wanted
+                --  finalization, but adding new INOX-specific accessibility
+                --  complexity is probably not the direction we want to go).
+                --  This early selector finalization would be ok if we made
+                --  copies in this case (so that the bindings would not yield
+                --  a view of a finalized object), but then we'd have to deal
+                --  with finalizing those copies (which would necessarily
+                --  include defining their accessibility level). So it gets
+                --  messy either way.
+ 
+                Error_Msg_N ("case selector must not require finalization", N);
+             end if;
+          end Check_Composite_Case_Selector;
+ 
           -----------------------------
           -- Handle_Static_Predicate --
           -----------------------------
*************** package body Sem_Case is
*** 1523,1528 ****
--- 3528,3534 ----
                 then
                    C := New_Copy (P);
                    Set_Sloc (C, Sloc (Choice));
+                   Set_Original_Node (C, Choice);
  
                    if Expr_Value (Low_Bound (C)) < Expr_Value (Lo) then
                       Set_Low_Bound (C, Lo);
*************** package body Sem_Case is
*** 1552,1557 ****
--- 3558,3571 ----
           --  a complete mess.
  
           if not Is_Discrete_Type (Subtyp) or else Subtyp = Any_Type then
+ 
+             --  Hold on, maybe it isn't a complete mess after all.
+ 
+             if Extensions_Allowed and then Subtyp /= Any_Type then
+                Check_Composite_Case_Selector;
+                Check_Case_Pattern_Choices;
+             end if;
+ 
              return;
           end if;
  
*************** package body Sem_Case is
*** 1559,1565 ****
           --  bounds of its base type to determine the values covered by the
           --  discrete choices.
  
!          --  In Ada 2012, if the subtype has a non-static predicate the full
           --  range of the base type must be covered as well.
  
           if Is_OK_Static_Subtype (Subtyp) then
--- 3573,3579 ----
           --  bounds of its base type to determine the values covered by the
           --  discrete choices.
  
!          --  In Ada 2012, if the subtype has a nonstatic predicate the full
           --  range of the base type must be covered as well.
  
           if Is_OK_Static_Subtype (Subtyp) then
*************** package body Sem_Case is
*** 1576,1582 ****
           end if;
  
           --  Obtain static bounds of type, unless this is a generic formal
!          --  discrete type for which all choices will be non-static.
  
           if not Is_Generic_Type (Root_Type (Bounds_Type))
             or else Ekind (Bounds_Type) /= E_Enumeration_Type
--- 3590,3596 ----
           end if;
  
           --  Obtain static bounds of type, unless this is a generic formal
!          --  discrete type for which all choices will be nonstatic.
  
           if not Is_Generic_Type (Root_Type (Bounds_Type))
             or else Ekind (Bounds_Type) /= E_Enumeration_Type
*************** package body Sem_Case is
*** 1638,1644 ****
  
                          if Has_Predicates (E) then
  
!                            --  Use of non-static predicate is an error
  
                             if not Is_Discrete_Type (E)
                               or else not Has_Static_Predicate (E)
--- 3652,3658 ----
  
                          if Has_Predicates (E) then
  
!                            --  Use of nonstatic predicate is an error
  
                             if not Is_Discrete_Type (E)
                               or else not Has_Static_Predicate (E)
*************** package body Sem_Case is
*** 1799,1802 ****
--- 3813,3873 ----
  
     end Generic_Check_Choices;
  
+    -----------------------------------------
+    --  Has_Static_Discriminant_Constraint --
+    -----------------------------------------
+ 
+    function Has_Static_Discriminant_Constraint
+      (Subtyp : Entity_Id) return Boolean
+    is
+    begin
+       if Has_Discriminants (Subtyp) and then Is_Constrained (Subtyp) then
+          declare
+             DC_Elmt : Elmt_Id := First_Elmt (Discriminant_Constraint (Subtyp));
+          begin
+             while Present (DC_Elmt) loop
+                if not All_Composite_Constraints_Static (Node (DC_Elmt)) then
+                   return False;
+                end if;
+                Next_Elmt (DC_Elmt);
+             end loop;
+             return True;
+          end;
+       end if;
+       return False;
+    end Has_Static_Discriminant_Constraint;
+ 
+    ----------------------------
+    -- Is_Case_Choice_Pattern --
+    ----------------------------
+ 
+    function Is_Case_Choice_Pattern (Expr : Node_Id) return Boolean is
+       E : Node_Id := Expr;
+    begin
+       if not Extensions_Allowed then
+          return False;
+       end if;
+ 
+       loop
+          case Nkind (E) is
+             when N_Case_Statement_Alternative
+                | N_Case_Expression_Alternative
+             =>
+                --  We could return False if selecting expression is discrete,
+                --  but this doesn't seem to be worth the bother.
+                return True;
+ 
+             when N_Empty
+                | N_Statement_Other_Than_Procedure_Call
+                | N_Procedure_Call_Statement
+                | N_Declaration
+             =>
+                return False;
+ 
+             when others =>
+                E := Parent (E);
+          end case;
+       end loop;
+    end Is_Case_Choice_Pattern;
+ 
  end Sem_Case;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_case.ads gcc-12.1.0/gcc/ada/sem_case.ads
*** gcc-11.3.0/gcc/ada/sem_case.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_case.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
***************
*** 44,51 ****
  --    till the freeze point in this case.
  
  --    3. Set the Others_Discrete_Choices list for an others choice. This is
! --    used in various ways, e.g. to construct the disriminant checking function
! --    for the case of a variant with an others choice.
  
  --    4. In the case of static predicates, we need to expand out choices that
  --    correspond to the predicate for the back end. This expansion destroys
--- 44,51 ----
  --    till the freeze point in this case.
  
  --    3. Set the Others_Discrete_Choices list for an others choice. This is
! --    used in various ways, e.g. to construct the discriminant checking
! --    function for the case of a variant with an others choice.
  
  --    4. In the case of static predicates, we need to expand out choices that
  --    correspond to the predicate for the back end. This expansion destroys
*************** package Sem_Case is
*** 125,134 ****
     package Generic_Check_Choices is
  
        procedure Check_Choices
!         (N                        : Node_Id;
!          Alternatives             : List_Id;
!          Subtyp                   : Entity_Id;
!          Others_Present           : out Boolean);
        --  From a case expression, case statement, or record variant N, this
        --  routine analyzes the corresponding list of discrete choices which
        --  appear in each element of the list Alternatives (for the variant
--- 125,134 ----
     package Generic_Check_Choices is
  
        procedure Check_Choices
!         (N              : Node_Id;
!          Alternatives   : List_Id;
!          Subtyp         : Entity_Id;
!          Others_Present : out Boolean);
        --  From a case expression, case statement, or record variant N, this
        --  routine analyzes the corresponding list of discrete choices which
        --  appear in each element of the list Alternatives (for the variant
*************** package Sem_Case is
*** 147,150 ****
--- 147,156 ----
        --  the parent node (N_Variant, N_Case_Expression/Statement_Alternative).
  
     end Generic_Check_Choices;
+ 
+    function Is_Case_Choice_Pattern (Expr : Node_Id) return Boolean;
+    --  GNAT language extensions allow casing on a non-discrete value, with
+    --  patterns as case choices. Return True iff Expr is such a pattern, or
+    --  a subexpression thereof.
+ 
  end Sem_Case;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_cat.adb gcc-12.1.0/gcc/ada/sem_cat.adb
*** gcc-11.3.0/gcc/ada/sem_cat.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_cat.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,46 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Sem;      use Sem;
! with Sem_Attr; use Sem_Attr;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Dist; use Sem_Dist;
! with Sem_Eval; use Sem_Eval;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
  
  package body Sem_Cat is
  
--- 23,50 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Sem;            use Sem;
! with Sem_Attr;       use Sem_Attr;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
  
  package body Sem_Cat is
  
*************** package body Sem_Cat is
*** 275,281 ****
             and then Is_Preelaborated (Depended_Entity)
           then
              Error_Msg_NE
!               ("<<must use private with clause for preelaborated unit& ",
                 N, Depended_Entity);
  
           --  Subunit case
--- 279,285 ----
             and then Is_Preelaborated (Depended_Entity)
           then
              Error_Msg_NE
!               ("<<must use private with clause for preelaborated unit&",
                 N, Depended_Entity);
  
           --  Subunit case
*************** package body Sem_Cat is
*** 296,313 ****
           --  Add further explanation for Pure/Preelaborate common cases
  
           if Unit_Category = Pure then
!             Error_Msg_NE
!               ("\<<pure unit cannot depend on non-pure unit",
!                N, Depended_Entity);
  
           elsif Is_Preelaborated (Unit_Entity)
             and then not Is_Preelaborated (Depended_Entity)
             and then not Is_Pure (Depended_Entity)
           then
!             Error_Msg_NE
                ("\<<preelaborated unit cannot depend on "
!                & "non-preelaborated unit",
!                N, Depended_Entity);
           end if;
        end if;
     end Check_Categorization_Dependencies;
--- 300,315 ----
           --  Add further explanation for Pure/Preelaborate common cases
  
           if Unit_Category = Pure then
!             Error_Msg_N
!               ("\<<pure unit cannot depend on non-pure unit", N);
  
           elsif Is_Preelaborated (Unit_Entity)
             and then not Is_Preelaborated (Depended_Entity)
             and then not Is_Pure (Depended_Entity)
           then
!             Error_Msg_N
                ("\<<preelaborated unit cannot depend on "
!                & "non-preelaborated unit", N);
           end if;
        end if;
     end Check_Categorization_Dependencies;
*************** package body Sem_Cat is
*** 354,359 ****
--- 356,369 ----
           if Present (Expression (Component_Decl))
             and then Nkind (Expression (Component_Decl)) /= N_Null
             and then not Is_OK_Static_Expression (Expression (Component_Decl))
+ 
+            --  If we're in a predefined unit, we can put whatever we like in a
+            --  preelaborated package, and in fact in some cases it's necessary
+            --  to bend the rules. Ada.Containers.Bounded_Hashed_Maps contains
+            --  some code that would not be considered preelaborable in user
+            --  code, for example.
+ 
+            and then not In_Predefined_Unit (Component_Decl)
           then
              Error_Msg_Sloc := Sloc (Component_Decl);
              Error_Msg_F
*************** package body Sem_Cat is
*** 422,433 ****
     -------------------------------
  
     function Has_Read_Write_Attributes (E : Entity_Id) return Boolean is
     begin
        return True
          and then Has_Stream_Attribute_Definition
!                    (E, TSS_Stream_Read,  At_Any_Place => True)
          and then Has_Stream_Attribute_Definition
!                    (E, TSS_Stream_Write, At_Any_Place => True);
     end Has_Read_Write_Attributes;
  
     -------------------------------------
--- 432,444 ----
     -------------------------------
  
     function Has_Read_Write_Attributes (E : Entity_Id) return Boolean is
+       Real_Rep : Node_Id;
     begin
        return True
          and then Has_Stream_Attribute_Definition
!                    (E, TSS_Stream_Read, Real_Rep, At_Any_Place => True)
          and then Has_Stream_Attribute_Definition
!                    (E, TSS_Stream_Write, Real_Rep, At_Any_Place => True);
     end Has_Read_Write_Attributes;
  
     -------------------------------------
*************** package body Sem_Cat is
*** 437,454 ****
     function Has_Stream_Attribute_Definition
       (Typ          : Entity_Id;
        Nam          : TSS_Name_Type;
        At_Any_Place : Boolean := False) return Boolean
     is
        Rep_Item : Node_Id;
  
-       Real_Rep : Node_Id;
-       --  The stream operation may be specified by an attribute definition
-       --  clause in the source, or by an aspect that generates such an
-       --  attribute definition. For an aspect, the generated attribute
-       --  definition may be placed at the freeze point of the full view of
-       --  the type, but the aspect specification makes the operation visible
-       --  to a client wherever the partial view is visible.
- 
     begin
        --  We start from the declaration node and then loop until the end of
        --  the list until we find the requested attribute definition clause.
--- 448,458 ----
     function Has_Stream_Attribute_Definition
       (Typ          : Entity_Id;
        Nam          : TSS_Name_Type;
+       Real_Rep     : out Node_Id;
        At_Any_Place : Boolean := False) return Boolean
     is
        Rep_Item : Node_Id;
  
     begin
        --  We start from the declaration node and then loop until the end of
        --  the list until we find the requested attribute definition clause.
*************** package body Sem_Cat is
*** 457,462 ****
--- 461,468 ----
        --  inserted by the expander at the point where the clause occurs),
        --  unless At_Any_Place is true.
  
+       Real_Rep := Empty;
+ 
        Rep_Item := First_Rep_Item (Typ);
        while Present (Rep_Item) loop
           Real_Rep := Rep_Item;
*************** package body Sem_Cat is
*** 501,507 ****
          and then Present (Full_View (Typ))
        then
           return Has_Stream_Attribute_Definition
!             (Underlying_Type (Typ), Nam, At_Any_Place);
  
        --  Otherwise, if At_Any_Place is true, return True if the attribute is
        --  available at any place; if it is false, return True only if the
--- 507,513 ----
          and then Present (Full_View (Typ))
        then
           return Has_Stream_Attribute_Definition
!                   (Underlying_Type (Typ), Nam, Real_Rep, At_Any_Place);
  
        --  Otherwise, if At_Any_Place is true, return True if the attribute is
        --  available at any place; if it is false, return True only if the
*************** package body Sem_Cat is
*** 520,527 ****
     ----------------------------
  
     function In_Package_Declaration return Boolean is
!       Unit_Kind   : constant Node_Kind :=
!                       Nkind (Unit (Cunit (Current_Sem_Unit)));
  
     begin
        --  There are no restrictions on the body of an RCI or RT unit
--- 526,533 ----
     ----------------------------
  
     function In_Package_Declaration return Boolean is
!       Unit_Kind  : constant Node_Kind :=
!                      Nkind (Unit (Cunit (Current_Sem_Unit)));
  
     begin
        --  There are no restrictions on the body of an RCI or RT unit
*************** package body Sem_Cat is
*** 691,746 ****
     -------------------------------------
  
     procedure Set_Categorization_From_Pragmas (N : Node_Id) is
!       P   : constant Node_Id := Parent (N);
!       S   : constant Entity_Id := Current_Scope;
! 
!       procedure Set_Parents (Visibility : Boolean);
!          --  If this is a child instance, the parents are not immediately
!          --  visible during analysis. Make them momentarily visible so that
!          --  the argument of the pragma can be resolved properly, and reset
!          --  afterwards.
! 
!       -----------------
!       -- Set_Parents --
!       -----------------
! 
!       procedure Set_Parents (Visibility : Boolean) is
!          Par : Entity_Id;
!       begin
!          Par := Scope (S);
!          while Present (Par) and then Par /= Standard_Standard loop
!             Set_Is_Immediately_Visible (Par, Visibility);
!             Par := Scope (Par);
!          end loop;
!       end Set_Parents;
  
!    --  Start of processing for Set_Categorization_From_Pragmas
  
!    begin
!       --  Deal with categorization pragmas in Pragmas of Compilation_Unit.
!       --  The purpose is to set categorization flags before analyzing the
!       --  unit itself, so as to diagnose violations of categorization as
!       --  we process each declaration, even though the pragma appears after
!       --  the unit. This processing is only needed if compilation unit pragmas
!       --  are present.
!       --  Note: This code may be incorrect in the unlikely case a child generic
!       --  unit is instantiated as a child of its (nongeneric) parent, so that
!       --  generic and instance are siblings.
  
!       if Nkind (P) /= N_Compilation_Unit
!          or else No (First (Pragmas_After (Aux_Decls_Node (P))))
!       then
!          return;
!       end if;
  
!       declare
           PN : Node_Id;
  
        begin
-          if Is_Child_Unit (S) and then Is_Generic_Instance (S) then
-             Set_Parents (True);
-          end if;
- 
           PN := First (Pragmas_After (Aux_Decls_Node (P)));
           while Present (PN) loop
  
--- 697,721 ----
     -------------------------------------
  
     procedure Set_Categorization_From_Pragmas (N : Node_Id) is
!       P : constant Node_Id := Parent (N);
  
!       procedure Make_Parents_Visible_And_Process_Pragmas (Par : Entity_Id);
!       --  Parents might not be immediately visible during analysis. Make
!       --  them momentarily visible so that the argument of the pragma can
!       --  be resolved properly, process pragmas and restore the previous
!       --  visibility.
  
!       procedure Process_Categorization_Pragmas;
!       --  Process categorization pragmas, if any
  
!       ------------------------------------
!       -- Process_Categorization_Pragmas --
!       ------------------------------------
  
!       procedure Process_Categorization_Pragmas is
           PN : Node_Id;
  
        begin
           PN := First (Pragmas_After (Aux_Decls_Node (P)));
           while Present (PN) loop
  
*************** package body Sem_Cat is
*** 765,775 ****
  
              Next (PN);
           end loop;
  
!          if Is_Child_Unit (S) and then Is_Generic_Instance (S) then
!             Set_Parents (False);
           end if;
!       end;
     end Set_Categorization_From_Pragmas;
  
     -----------------------------------
--- 740,788 ----
  
              Next (PN);
           end loop;
+       end Process_Categorization_Pragmas;
  
!       ----------------------------------------------
!       -- Make_Parents_Visible_And_Process_Pragmas --
!       ----------------------------------------------
! 
!       procedure Make_Parents_Visible_And_Process_Pragmas (Par : Entity_Id) is
!       begin
!          --  When we reached the Standard scope, then just process pragmas
! 
!          if Par = Standard_Standard then
!             Process_Categorization_Pragmas;
! 
!          --  Otherwise make the current scope momentarily visible, recurse
!          --  into its enclosing scope, and restore the visibility. This is
!          --  required for child units that are instances of generic parents.
! 
!          else
!             declare
!                Save_Is_Immediately_Visible : constant Boolean :=
!                  Is_Immediately_Visible (Par);
!             begin
!                Set_Is_Immediately_Visible (Par);
!                Make_Parents_Visible_And_Process_Pragmas (Scope (Par));
!                Set_Is_Immediately_Visible (Par, Save_Is_Immediately_Visible);
!             end;
           end if;
!       end Make_Parents_Visible_And_Process_Pragmas;
! 
!    --  Start of processing for Set_Categorization_From_Pragmas
! 
!    begin
!       --  Deal with categorization pragmas in Pragmas of Compilation_Unit.
!       --  The purpose is to set categorization flags before analyzing the
!       --  unit itself, so as to diagnose violations of categorization as
!       --  we process each declaration, even though the pragma appears after
!       --  the unit.
! 
!       if Nkind (P) /= N_Compilation_Unit then
!          return;
!       end if;
! 
!       Make_Parents_Visible_And_Process_Pragmas (Scope (Current_Scope));
     end Set_Categorization_From_Pragmas;
  
     -----------------------------------
*************** package body Sem_Cat is
*** 790,796 ****
        end if;
  
        if not Is_Remote_Call_Interface (E) then
!          if Ekind (E) in Subprogram_Kind then
              Declaration := Unit_Declaration_Node (E);
  
              if Nkind (Declaration) in
--- 803,809 ----
        end if;
  
        if not Is_Remote_Call_Interface (E) then
!          if Is_Subprogram (E) then
              Declaration := Unit_Declaration_Node (E);
  
              if Nkind (Declaration) in
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_cat.ads gcc-12.1.0/gcc/ada/sem_cat.ads
*** gcc-11.3.0/gcc/ada/sem_cat.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_cat.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 27,33 ****
  --  the semantic restrictions required for the categorization pragmas:
  --
  --    Preelaborate
! --    Pure,
  --    Remote_Call_Interface
  --    Remote_Types
  --    Shared_Passive
--- 27,33 ----
  --  the semantic restrictions required for the categorization pragmas:
  --
  --    Preelaborate
! --    Pure
  --    Remote_Call_Interface
  --    Remote_Types
  --    Shared_Passive
*************** package Sem_Cat is
*** 43,48 ****
--- 43,49 ----
     function Has_Stream_Attribute_Definition
       (Typ          : Entity_Id;
        Nam          : TSS_Name_Type;
+       Real_Rep     : out Node_Id;
        At_Any_Place : Boolean := False) return Boolean;
     --  True when there is a attribute definition clause specifying attribute
     --  Nam for Typ. In Ada 2005 mode, returns True only when the attribute
*************** package Sem_Cat is
*** 54,59 ****
--- 55,68 ----
     --  specific type, excluding inherited definitions, the flags
     --  Has_Specified_Stream_* can be used instead).
  
+    --  The stream operation may be specified by an attribute definition
+    --  clause in the source, or by an aspect that generates such an
+    --  attribute definition. For an aspect, the generated attribute
+    --  definition may be placed at the freeze point of the full view of
+    --  the type, but the aspect specification makes the operation visible
+    --  to a client wherever the partial view is visible. This real
+    --  representation is returned in the Real_Rep parameter.
+ 
     function In_Preelaborated_Unit return Boolean;
     --  Determines if the current scope is within a preelaborated compilation
     --  unit, that is one to which one of the pragmas Preelaborate, Pure,
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch10.adb gcc-12.1.0/gcc/ada/sem_ch10.adb
*** gcc-11.3.0/gcc/ada/sem_ch10.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch10.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,74 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;   use Aspects;
! with Atree;     use Atree;
! with Contracts; use Contracts;
! with Debug;     use Debug;
! with Einfo;     use Einfo;
! with Errout;    use Errout;
  with Exp_Put_Image;
! with Exp_Util;  use Exp_Util;
! with Elists;    use Elists;
! with Fname;     use Fname;
! with Fname.UF;  use Fname.UF;
! with Freeze;    use Freeze;
! with Impunit;   use Impunit;
! with Inline;    use Inline;
! with Lib;       use Lib;
! with Lib.Load;  use Lib.Load;
! with Lib.Xref;  use Lib.Xref;
! with Namet;     use Namet;
! with Nlists;    use Nlists;
! with Nmake;     use Nmake;
! with Opt;       use Opt;
! with Output;    use Output;
! with Par_SCO;   use Par_SCO;
! with Restrict;  use Restrict;
! with Rident;    use Rident;
! with Rtsfind;   use Rtsfind;
! with Sem;       use Sem;
! with Sem_Aux;   use Sem_Aux;
! with Sem_Ch3;   use Sem_Ch3;
! with Sem_Ch6;   use Sem_Ch6;
! with Sem_Ch7;   use Sem_Ch7;
! with Sem_Ch8;   use Sem_Ch8;
! with Sem_Ch13;  use Sem_Ch13;
! with Sem_Dist;  use Sem_Dist;
! with Sem_Prag;  use Sem_Prag;
! with Sem_Util;  use Sem_Util;
! with Sem_Warn;  use Sem_Warn;
! with Stand;     use Stand;
! with Sinfo;     use Sinfo;
! with Sinfo.CN;  use Sinfo.CN;
! with Sinput;    use Sinput;
! with Snames;    use Snames;
! with Style;     use Style;
! with Stylesw;   use Stylesw;
! with Tbuild;    use Tbuild;
! with Uname;     use Uname;
  
  package body Sem_Ch10 is
  
--- 23,78 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Contracts;      use Contracts;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
  with Exp_Put_Image;
! with Exp_Util;       use Exp_Util;
! with Elists;         use Elists;
! with Fname;          use Fname;
! with Fname.UF;       use Fname.UF;
! with Freeze;         use Freeze;
! with Impunit;        use Impunit;
! with Inline;         use Inline;
! with Lib;            use Lib;
! with Lib.Load;       use Lib.Load;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Output;         use Output;
! with Par_SCO;        use Par_SCO;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinfo.CN;       use Sinfo.CN;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Style;          use Style;
! with Stylesw;        use Stylesw;
! with Tbuild;         use Tbuild;
! with Uname;          use Uname;
  
  package body Sem_Ch10 is
  
*************** package body Sem_Ch10 is
*** 264,269 ****
--- 268,275 ----
     ------------------------------
  
     procedure Analyze_Compilation_Unit (N : Node_Id) is
+       Unit_Node : constant Node_Id := Unit (N);
+ 
        procedure Check_Redundant_Withs
          (Context_Items      : List_Id;
           Spec_Context_Items : List_Id := No_List);
*************** package body Sem_Ch10 is
*** 337,344 ****
              function Same_Unit (N : Node_Id; P : Entity_Id) return Boolean is
              begin
                 return Entity (N) = P
!                  or else (Present (Renamed_Object (P))
!                            and then Entity (N) = Renamed_Object (P));
              end Same_Unit;
  
           --  Start of processing for Process_Body_Clauses
--- 343,350 ----
              function Same_Unit (N : Node_Id; P : Entity_Id) return Boolean is
              begin
                 return Entity (N) = P
!                  or else (Present (Renamed_Entity (P))
!                            and then Entity (N) = Renamed_Entity (P));
              end Same_Unit;
  
           --  Start of processing for Process_Body_Clauses
*************** package body Sem_Ch10 is
*** 573,588 ****
                          Error_Msg_N -- CODEFIX
                            ("redundant with clause in body?r?", Clause);
                       end if;
- 
-                      Used_In_Body      := False;
-                      Used_In_Spec      := False;
-                      Used_Type_Or_Elab := False;
-                      Withed_In_Spec    := False;
                    end;
  
                 --  Standalone package spec or body check
  
                 else
                    declare
                       Dummy  : Boolean := False;
                       Withed : Boolean := False;
--- 579,596 ----
                          Error_Msg_N -- CODEFIX
                            ("redundant with clause in body?r?", Clause);
                       end if;
                    end;
  
                 --  Standalone package spec or body check
  
                 else
+                   if Is_Ancestor_Package (Entity (Name (Clause)),
+                                           Defining_Entity (Unit_Node))
+                   then
+                      Error_Msg_N
+                        ("unnecessary with of ancestor?r?", Clause);
+                   end if;
+ 
                    declare
                       Dummy  : Boolean := False;
                       Withed : Boolean := False;
*************** package body Sem_Ch10 is
*** 613,619 ****
        --  Local variables
  
        Main_Cunit    : constant Node_Id := Cunit (Main_Unit);
-       Unit_Node     : constant Node_Id := Unit (N);
        Lib_Unit      : Node_Id          := Library_Unit (N);
        Par_Spec_Name : Unit_Name_Type;
        Spec_Id       : Entity_Id;
--- 621,626 ----
*************** package body Sem_Ch10 is
*** 622,628 ****
     --  Start of processing for Analyze_Compilation_Unit
  
     begin
!       Exp_Put_Image.Preload_Sink (N);
  
        Process_Compilation_Unit_Pragmas (N);
  
--- 629,635 ----
     --  Start of processing for Analyze_Compilation_Unit
  
     begin
!       Exp_Put_Image.Preload_Root_Buffer_Type (N);
  
        Process_Compilation_Unit_Pragmas (N);
  
*************** package body Sem_Ch10 is
*** 1098,1111 ****
                    then
                       Style_Check := False;
  
!                      if Present (Renamed_Object (Nam)) then
                          Un :=
                            Load_Unit
                              (Load_Name  =>
                                 Get_Body_Name
                                   (Get_Unit_Name
                                     (Unit_Declaration_Node
!                                      (Renamed_Object (Nam)))),
                               Required   => False,
                               Subunit    => False,
                               Error_Node => N,
--- 1105,1118 ----
                    then
                       Style_Check := False;
  
!                      if Present (Renamed_Entity (Nam)) then
                          Un :=
                            Load_Unit
                              (Load_Name  =>
                                 Get_Body_Name
                                   (Get_Unit_Name
                                     (Unit_Declaration_Node
!                                      (Renamed_Entity (Nam)))),
                               Required   => False,
                               Subunit    => False,
                               Error_Node => N,
*************** package body Sem_Ch10 is
*** 1561,1569 ****
                                   Error_Msg_N
                                     ("simultaneous visibility of limited and "
                                      & "unlimited views not allowed", Item);
!                                  Error_Msg_NE
                                     ("\unlimited view visible through context "
!                                     & "clause #", Item, It);
                                   exit;
  
                                elsif Nkind (Unit_Name) = N_Identifier then
--- 1568,1576 ----
                                   Error_Msg_N
                                     ("simultaneous visibility of limited and "
                                      & "unlimited views not allowed", Item);
!                                  Error_Msg_N
                                     ("\unlimited view visible through context "
!                                     & "clause #", Item);
                                   exit;
  
                                elsif Nkind (Unit_Name) = N_Identifier then
*************** package body Sem_Ch10 is
*** 1643,1649 ****
           --  when we load the proper body.
  
           Set_Scope (Id, Current_Scope);
!          Set_Ekind (Id, E_Package_Body);
           Set_Etype (Id, Standard_Void_Type);
  
           if Has_Aspects (N) then
--- 1650,1656 ----
           --  when we load the proper body.
  
           Set_Scope (Id, Current_Scope);
!          Mutate_Ekind (Id, E_Package_Body);
           Set_Etype (Id, Standard_Void_Type);
  
           if Has_Aspects (N) then
*************** package body Sem_Ch10 is
*** 1985,1991 ****
           Opts := Save_Config_Switches;
  
           Set_Scope (Id, Current_Scope);
!          Set_Ekind (Id, E_Protected_Body);
           Set_Etype (Id, Standard_Void_Type);
  
           if Has_Aspects (N) then
--- 1992,1998 ----
           Opts := Save_Config_Switches;
  
           Set_Scope (Id, Current_Scope);
!          Mutate_Ekind (Id, E_Protected_Body);
           Set_Etype (Id, Standard_Void_Type);
  
           if Has_Aspects (N) then
*************** package body Sem_Ch10 is
*** 2272,2278 ****
        ----------------------------
  
        procedure Re_Install_Use_Clauses is
!          U  : Node_Id;
        begin
           for J in reverse 1 .. Num_Scopes loop
              U := Use_Clauses (J);
--- 2279,2285 ----
        ----------------------------
  
        procedure Re_Install_Use_Clauses is
!          U : Node_Id;
        begin
           for J in reverse 1 .. Num_Scopes loop
              U := Use_Clauses (J);
*************** package body Sem_Ch10 is
*** 2433,2440 ****
  
        --  The syntax rules require a proper body for a subprogram subunit
  
!       if Nkind (Proper_Body (Sinfo.Unit (N))) = N_Subprogram_Declaration then
!          if Null_Present (Specification (Proper_Body (Sinfo.Unit (N)))) then
              Error_Msg_N
                ("null procedure not allowed as subunit",
                 Proper_Body (Unit (N)));
--- 2440,2449 ----
  
        --  The syntax rules require a proper body for a subprogram subunit
  
!       if Nkind (Proper_Body (Sinfo.Nodes.Unit (N))) = N_Subprogram_Declaration
!       then
!          if Null_Present (Specification (Proper_Body (Sinfo.Nodes.Unit (N))))
!          then
              Error_Msg_N
                ("null procedure not allowed as subunit",
                 Proper_Body (Unit (N)));
*************** package body Sem_Ch10 is
*** 2494,2500 ****
  
        else
           Set_Scope (Id, Current_Scope);
!          Set_Ekind (Id, E_Task_Body);
           Set_Etype (Id, Standard_Void_Type);
  
           if Has_Aspects (N) then
--- 2503,2509 ----
  
        else
           Set_Scope (Id, Current_Scope);
!          Mutate_Ekind (Id, E_Task_Body);
           Set_Etype (Id, Standard_Void_Type);
  
           if Has_Aspects (N) then
*************** package body Sem_Ch10 is
*** 2702,2712 ****
                       Error_Msg_N ("& is an Ada 2012 unit?i?", Name (N));
                    end if;
  
!                when Ada_202X_Unit =>
!                   if Ada_Version < Ada_2020
!                     and then Warn_On_Ada_202X_Compatibility
                    then
!                      Error_Msg_N ("& is an Ada 202x unit?i?", Name (N));
                    end if;
              end case;
           end if;
--- 2711,2721 ----
                       Error_Msg_N ("& is an Ada 2012 unit?i?", Name (N));
                    end if;
  
!                when Ada_2022_Unit =>
!                   if Ada_Version < Ada_2022
!                     and then Warn_On_Ada_2022_Compatibility
                    then
!                      Error_Msg_N ("& is an Ada 2022 unit?i?", Name (N));
                    end if;
              end case;
           end if;
*************** package body Sem_Ch10 is
*** 2864,2870 ****
              --  been analyzed.
  
              Analyze (Parent (Parent (Entity (Pref))));
!             pragma Assert (Renamed_Object (Entity (Pref)) = Par_Name);
              Par_Name := Entity (Pref);
           end if;
  
--- 2873,2879 ----
              --  been analyzed.
  
              Analyze (Parent (Parent (Entity (Pref))));
!             pragma Assert (Renamed_Entity (Entity (Pref)) = Par_Name);
              Par_Name := Entity (Pref);
           end if;
  
*************** package body Sem_Ch10 is
*** 2946,2968 ****
        Par_Lib    : Entity_Id;
        Par_Spec   : Node_Id;
  
-       function Is_Private_Library_Unit (Unit : Entity_Id) return Boolean;
-       --  Returns true if and only if the library unit is declared with
-       --  an explicit designation of private.
- 
-       -----------------------------
-       -- Is_Private_Library_Unit --
-       -----------------------------
- 
-       function Is_Private_Library_Unit (Unit : Entity_Id) return Boolean is
-          Comp_Unit : constant Node_Id := Parent (Unit_Declaration_Node (Unit));
- 
-       begin
-          return Private_Present (Comp_Unit);
-       end Is_Private_Library_Unit;
- 
-    --  Start of processing for Check_Private_Child_Unit
- 
     begin
        if Nkind (Lib_Unit) in N_Package_Body | N_Subprogram_Body then
           Curr_Unit := Defining_Entity (Unit (Library_Unit (N)));
--- 2955,2960 ----
*************** package body Sem_Ch10 is
*** 3832,3838 ****
  
                    if E2 = WEnt then
                       Error_Msg_N
!                        ("unlimited view visible through use clause ", W);
                       return;
                    end if;
                 end if;
--- 3824,3830 ----
  
                    if E2 = WEnt then
                       Error_Msg_N
!                        ("unlimited view visible through use clause", W);
                       return;
                    end if;
                 end if;
*************** package body Sem_Ch10 is
*** 4114,4120 ****
                       Set_Subtype_Indication (Decl,
                         New_Occurrence_Of (Non_Lim_View, Sloc (Def_Id)));
                       Set_Etype (Def_Id, Non_Lim_View);
!                      Set_Ekind (Def_Id, Subtype_Kind (Ekind (Non_Lim_View)));
                       Set_Analyzed (Decl, False);
  
                       --  Reanalyze the declaration, suppressing the call to
--- 4106,4113 ----
                       Set_Subtype_Indication (Decl,
                         New_Occurrence_Of (Non_Lim_View, Sloc (Def_Id)));
                       Set_Etype (Def_Id, Non_Lim_View);
!                      Mutate_Ekind
!                        (Def_Id, Subtype_Kind (Ekind (Non_Lim_View)));
                       Set_Analyzed (Decl, False);
  
                       --  Reanalyze the declaration, suppressing the call to
*************** package body Sem_Ch10 is
*** 4155,4162 ****
        end if;
  
        if Ekind (P_Name) = E_Generic_Package
!         and then Nkind (Lib_Unit) not in N_Generic_Subprogram_Declaration
!                                        | N_Generic_Package_Declaration
                                         | N_Generic_Renaming_Declaration
        then
           Error_Msg_N
--- 4148,4154 ----
        end if;
  
        if Ekind (P_Name) = E_Generic_Package
!         and then Nkind (Lib_Unit) not in N_Generic_Declaration
                                         | N_Generic_Renaming_Declaration
        then
           Error_Msg_N
*************** package body Sem_Ch10 is
*** 4167,4173 ****
             ("parent unit must be package or generic package", Lib_Unit);
           raise Unrecoverable_Error;
  
!       elsif Present (Renamed_Object (P_Name)) then
           Error_Msg_N ("parent unit cannot be a renaming", Lib_Unit);
           raise Unrecoverable_Error;
  
--- 4159,4165 ----
             ("parent unit must be package or generic package", Lib_Unit);
           raise Unrecoverable_Error;
  
!       elsif Present (Renamed_Entity (P_Name)) then
           Error_Msg_N ("parent unit cannot be a renaming", Lib_Unit);
           raise Unrecoverable_Error;
  
*************** package body Sem_Ch10 is
*** 4980,4986 ****
  
              --  Minimum decoration
  
!             Set_Ekind (P, E_Package);
              Set_Etype (P, Standard_Void_Type);
              Set_Scope (P, Standard_Standard);
              Set_Is_Visible_Lib_Unit (P);
--- 4972,4978 ----
  
              --  Minimum decoration
  
!             Mutate_Ekind (P, E_Package);
              Set_Etype (P, Standard_Void_Type);
              Set_Scope (P, Standard_Standard);
              Set_Is_Visible_Lib_Unit (P);
*************** package body Sem_Ch10 is
*** 5282,5288 ****
              end if;
  
              if Is_Generic_Instance (Uname)
!               and then Ekind (Uname) in Subprogram_Kind
              then
                 --  Set flag as well on the visible entity that denotes the
                 --  instance, which renames the current one.
--- 5274,5280 ----
              end if;
  
              if Is_Generic_Instance (Uname)
!               and then Is_Subprogram (Uname)
              then
                 --  Set flag as well on the visible entity that denotes the
                 --  instance, which renames the current one.
*************** package body Sem_Ch10 is
*** 5603,5611 ****
     --  demand, at the point of instantiation (see ch12).
  
     procedure Load_Needed_Body
!      (N          : Node_Id;
!       OK         : out Boolean;
!       Do_Analyze : Boolean := True)
     is
        Body_Name : Unit_Name_Type;
        Unum      : Unit_Number_Type;
--- 5595,5602 ----
     --  demand, at the point of instantiation (see ch12).
  
     procedure Load_Needed_Body
!      (N  : Node_Id;
!       OK : out Boolean)
     is
        Body_Name : Unit_Name_Type;
        Unum      : Unit_Number_Type;
*************** package body Sem_Ch10 is
*** 5639,5647 ****
                 Write_Eol;
              end if;
  
!             if Do_Analyze then
!                Semantics (Cunit (Unum));
!             end if;
           end if;
  
           OK := True;
--- 5630,5637 ----
                 Write_Eol;
              end if;
  
!             --  We always perform analyses
!             Semantics (Cunit (Unum));
           end if;
  
           OK := True;
*************** package body Sem_Ch10 is
*** 5732,5740 ****
           --  The abstract view of a variable is a state, not another variable
  
           if Ekind (Ent) = E_Variable then
!             Set_Ekind (Shadow, E_Abstract_State);
           else
!             Set_Ekind (Shadow, Ekind (Ent));
           end if;
  
           Set_Is_Internal       (Shadow);
--- 5722,5730 ----
           --  The abstract view of a variable is a state, not another variable
  
           if Ekind (Ent) = E_Variable then
!             Mutate_Ekind (Shadow, E_Abstract_State);
           else
!             Mutate_Ekind (Shadow, Ekind (Ent));
           end if;
  
           Set_Is_Internal       (Shadow);
*************** package body Sem_Ch10 is
*** 5779,5785 ****
  
        procedure Decorate_Package (Ent : Entity_Id; Scop : Entity_Id) is
        begin
!          Set_Ekind (Ent, E_Package);
           Set_Etype (Ent, Standard_Void_Type);
           Set_Scope (Ent, Scop);
        end Decorate_Package;
--- 5769,5775 ----
  
        procedure Decorate_Package (Ent : Entity_Id; Scop : Entity_Id) is
        begin
!          Mutate_Ekind (Ent, E_Package);
           Set_Etype (Ent, Standard_Void_Type);
           Set_Scope (Ent, Scop);
        end Decorate_Package;
*************** package body Sem_Ch10 is
*** 5790,5796 ****
  
        procedure Decorate_State (Ent : Entity_Id; Scop : Entity_Id) is
        begin
!          Set_Ekind               (Ent, E_Abstract_State);
           Set_Etype               (Ent, Standard_Void_Type);
           Set_Scope               (Ent, Scop);
           Set_Encapsulating_State (Ent, Empty);
--- 5780,5786 ----
  
        procedure Decorate_State (Ent : Entity_Id; Scop : Entity_Id) is
        begin
!          Mutate_Ekind            (Ent, E_Abstract_State);
           Set_Etype               (Ent, Standard_Void_Type);
           Set_Scope               (Ent, Scop);
           Set_Encapsulating_State (Ent, Empty);
*************** package body Sem_Ch10 is
*** 5812,5824 ****
           --  An unanalyzed type or a shadow entity of a type is treated as an
           --  incomplete type, and carries the corresponding attributes.
  
!          Set_Ekind              (Ent, E_Incomplete_Type);
           Set_Etype              (Ent, Ent);
           Set_Full_View          (Ent, Empty);
           Set_Is_First_Subtype   (Ent);
           Set_Scope              (Ent, Scop);
           Set_Stored_Constraint  (Ent, No_Elist);
!          Init_Size_Align        (Ent);
  
           if From_Limited_With (Ent) then
              Set_Private_Dependents (Ent, New_Elmt_List);
--- 5802,5814 ----
           --  An unanalyzed type or a shadow entity of a type is treated as an
           --  incomplete type, and carries the corresponding attributes.
  
!          Mutate_Ekind           (Ent, E_Incomplete_Type);
           Set_Etype              (Ent, Ent);
           Set_Full_View          (Ent, Empty);
           Set_Is_First_Subtype   (Ent);
           Set_Scope              (Ent, Scop);
           Set_Stored_Constraint  (Ent, No_Elist);
!          Reinit_Size_Align      (Ent);
  
           if From_Limited_With (Ent) then
              Set_Private_Dependents (Ent, New_Elmt_List);
*************** package body Sem_Ch10 is
*** 5848,5854 ****
  
              Set_Parent (CW_Typ, Parent (Ent));
  
!             Set_Ekind                     (CW_Typ, E_Class_Wide_Type);
              Set_Class_Wide_Type           (CW_Typ, CW_Typ);
              Set_Etype                     (CW_Typ, Ent);
              Set_Equivalent_Type           (CW_Typ, Empty);
--- 5838,5844 ----
  
              Set_Parent (CW_Typ, Parent (Ent));
  
!             Mutate_Ekind                  (CW_Typ, E_Class_Wide_Type);
              Set_Class_Wide_Type           (CW_Typ, CW_Typ);
              Set_Etype                     (CW_Typ, Ent);
              Set_Equivalent_Type           (CW_Typ, Empty);
*************** package body Sem_Ch10 is
*** 5858,5864 ****
              Set_Is_Tagged_Type            (CW_Typ);
              Set_Materialize_Entity        (CW_Typ, Materialize);
              Set_Scope                     (CW_Typ, Scop);
!             Init_Size_Align               (CW_Typ);
           end if;
        end Decorate_Type;
  
--- 5848,5854 ----
              Set_Is_Tagged_Type            (CW_Typ);
              Set_Materialize_Entity        (CW_Typ, Materialize);
              Set_Scope                     (CW_Typ, Scop);
!             Reinit_Size_Align             (CW_Typ);
           end if;
        end Decorate_Type;
  
*************** package body Sem_Ch10 is
*** 5868,5874 ****
  
        procedure Decorate_Variable (Ent : Entity_Id; Scop : Entity_Id) is
        begin
!          Set_Ekind (Ent, E_Variable);
           Set_Etype (Ent, Standard_Void_Type);
           Set_Scope (Ent, Scop);
        end Decorate_Variable;
--- 5858,5864 ----
  
        procedure Decorate_Variable (Ent : Entity_Id; Scop : Entity_Id) is
        begin
!          Mutate_Ekind (Ent, E_Variable);
           Set_Etype (Ent, Standard_Void_Type);
           Set_Scope (Ent, Scop);
        end Decorate_Variable;
*************** package body Sem_Ch10 is
*** 6188,6196 ****
                ("subprogram not allowed in `LIMITED WITH` clause", N);
              return;
  
!          when N_Generic_Package_Declaration
!             | N_Generic_Subprogram_Declaration
!          =>
              Error_Msg_N ("generic not allowed in `LIMITED WITH` clause", N);
              return;
  
--- 6178,6184 ----
                ("subprogram not allowed in `LIMITED WITH` clause", N);
              return;
  
!          when N_Generic_Declaration =>
              Error_Msg_N ("generic not allowed in `LIMITED WITH` clause", N);
              return;
  
*************** package body Sem_Ch10 is
*** 6223,6229 ****
        --  must be minimally decorated. This ensures that the checks on unused
        --  with clauses also process limieted withs.
  
!       Set_Ekind (Pack, E_Package);
        Set_Etype (Pack, Standard_Void_Type);
  
        if Is_Entity_Name (Nam) then
--- 6211,6217 ----
        --  must be minimally decorated. This ensures that the checks on unused
        --  with clauses also process limieted withs.
  
!       Mutate_Ekind (Pack, E_Package);
        Set_Etype (Pack, Standard_Void_Type);
  
        if Is_Entity_Name (Nam) then
*************** package body Sem_Ch10 is
*** 6245,6251 ****
        --  incomplete view of all types and packages declared within.
  
        Shadow_Pack := Make_Temporary (Sloc (N), 'Z');
!       Set_Ekind        (Shadow_Pack, E_Package);
        Set_Is_Internal  (Shadow_Pack);
        Set_Limited_View (Pack, Shadow_Pack);
  
--- 6233,6239 ----
        --  incomplete view of all types and packages declared within.
  
        Shadow_Pack := Make_Temporary (Sloc (N), 'Z');
!       Mutate_Ekind     (Shadow_Pack, E_Package);
        Set_Is_Internal  (Shadow_Pack);
        Set_Limited_View (Pack, Shadow_Pack);
  
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch10.ads gcc-12.1.0/gcc/ada/sem_ch10.ads
*** gcc-11.3.0/gcc/ada/sem_ch10.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch10.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Ch10 is
*** 59,74 ****
     --  reported on Error_Node (if present); otherwise no error is reported.
  
     procedure Load_Needed_Body
!      (N          : Node_Id;
!       OK         : out Boolean;
!       Do_Analyze : Boolean := True);
     --  Load and analyze the body of a context unit that is generic, or that
     --  contains generic units or inlined units. The body becomes part of the
     --  semantic dependency set of the unit that needs it. The returned result
     --  in OK is True if the load is successful, and False if the requested file
!    --  cannot be found. If the flag Do_Analyze is false, the unit is loaded and
!    --  parsed only. This allows a selective analysis in some inlining cases
!    --  where a full analysis would lead so circularities in the back-end.
  
     procedure Remove_Context (N : Node_Id);
     --  Removes the entities from the context clause of the given compilation
--- 59,71 ----
     --  reported on Error_Node (if present); otherwise no error is reported.
  
     procedure Load_Needed_Body
!      (N  : Node_Id;
!       OK : out Boolean);
     --  Load and analyze the body of a context unit that is generic, or that
     --  contains generic units or inlined units. The body becomes part of the
     --  semantic dependency set of the unit that needs it. The returned result
     --  in OK is True if the load is successful, and False if the requested file
!    --  cannot be found.
  
     procedure Remove_Context (N : Node_Id);
     --  Removes the entities from the context clause of the given compilation
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch11.adb gcc-12.1.0/gcc/ada/sem_ch11.adb
*** gcc-11.3.0/gcc/ada/sem_ch11.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch11.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,52 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Lib;      use Lib;
! with Lib.Xref; use Lib.Xref;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch5;  use Sem_Ch5;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Ch13; use Sem_Ch13;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sem_Warn; use Sem_Warn;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
  
  package body Sem_Ch11 is
  
--- 23,56 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Lib;            use Lib;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch5;        use Sem_Ch5;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
  
  package body Sem_Ch11 is
  
*************** package body Sem_Ch11 is
*** 61,67 ****
     begin
        Generate_Definition         (Id);
        Enter_Name                  (Id);
!       Set_Ekind                   (Id, E_Exception);
        Set_Etype                   (Id, Standard_Exception_Type);
        Set_Is_Statically_Allocated (Id);
        Set_Is_Pure                 (Id, PF);
--- 65,71 ----
     begin
        Generate_Definition         (Id);
        Enter_Name                  (Id);
!       Mutate_Ekind                (Id, E_Exception);
        Set_Etype                   (Id, Standard_Exception_Type);
        Set_Is_Statically_Allocated (Id);
        Set_Is_Pure                 (Id, PF);
*************** package body Sem_Ch11 is
*** 229,235 ****
                 Set_Etype (H_Scope, Standard_Void_Type);
  
                 Enter_Name (Choice);
!                Set_Ekind (Choice, E_Variable);
  
                 if RTE_Available (RE_Exception_Occurrence) then
                    Set_Etype (Choice, RTE (RE_Exception_Occurrence));
--- 233,239 ----
                 Set_Etype (H_Scope, Standard_Void_Type);
  
                 Enter_Name (Choice);
!                Mutate_Ekind (Choice, E_Variable);
  
                 if RTE_Available (RE_Exception_Occurrence) then
                    Set_Etype (Choice, RTE (RE_Exception_Occurrence));
*************** package body Sem_Ch11 is
*** 431,437 ****
        --  postcondition, since in that case there are no source references, and
        --  we need to preserve deferred references from the enclosing scope.
  
!       if ((Is_Subprogram (Current_Scope) or else Is_Entry (Current_Scope))
             and then Chars (Current_Scope) /= Name_uPostconditions)
           or else Ekind (Current_Scope) in E_Block | E_Task_Type
        then
--- 435,441 ----
        --  postcondition, since in that case there are no source references, and
        --  we need to preserve deferred references from the enclosing scope.
  
!       if (Is_Subprogram_Or_Entry (Current_Scope)
             and then Chars (Current_Scope) /= Name_uPostconditions)
           or else Ekind (Current_Scope) in E_Block | E_Task_Type
        then
*************** package body Sem_Ch11 is
*** 456,465 ****
        Exception_Name : Entity_Id        := Empty;
  
     begin
-       if Comes_From_Source (N) then
-          Check_Compiler_Unit ("raise expression", N);
-       end if;
- 
        --  Check exception restrictions on the original source
  
        if Comes_From_Source (N) then
--- 460,465 ----
*************** package body Sem_Ch11 is
*** 658,663 ****
--- 658,675 ----
        Kill_Current_Values (Last_Assignment_Only => True);
     end Analyze_Raise_Statement;
  
+    ----------------------------------
+    -- Analyze_Raise_When_Statement --
+    ----------------------------------
+ 
+    procedure Analyze_Raise_When_Statement (N : Node_Id) is
+    begin
+       --  Verify the condition is a Boolean expression
+ 
+       Analyze_And_Resolve (Condition (N), Any_Boolean);
+       Check_Unset_Reference (Condition (N));
+    end Analyze_Raise_When_Statement;
+ 
     -----------------------------
     -- Analyze_Raise_xxx_Error --
     -----------------------------
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch11.ads gcc-12.1.0/gcc/ada/sem_ch11.ads
*** gcc-11.3.0/gcc/ada/sem_ch11.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch11.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Ch11 is
*** 29,34 ****
--- 29,35 ----
     procedure Analyze_Handled_Statements                 (N : Node_Id);
     procedure Analyze_Raise_Expression                   (N : Node_Id);
     procedure Analyze_Raise_Statement                    (N : Node_Id);
+    procedure Analyze_Raise_When_Statement               (N : Node_Id);
     procedure Analyze_Raise_xxx_Error                    (N : Node_Id);
  
     procedure Analyze_Exception_Handlers (L : List_Id);
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch12.adb gcc-12.1.0/gcc/ada/sem_ch12.adb
*** gcc-11.3.0/gcc/ada/sem_ch12.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch12.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,82 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;   use Aspects;
! with Atree;     use Atree;
! with Contracts; use Contracts;
! with Einfo;     use Einfo;
! with Elists;    use Elists;
! with Errout;    use Errout;
! with Expander;  use Expander;
! with Fname;     use Fname;
! with Fname.UF;  use Fname.UF;
! with Freeze;    use Freeze;
! with Ghost;     use Ghost;
! with Itypes;    use Itypes;
! with Lib;       use Lib;
! with Lib.Load;  use Lib.Load;
! with Lib.Xref;  use Lib.Xref;
! with Nlists;    use Nlists;
! with Namet;     use Namet;
! with Nmake;     use Nmake;
! with Opt;       use Opt;
! with Rident;    use Rident;
! with Restrict;  use Restrict;
! with Rtsfind;   use Rtsfind;
! with Sem;       use Sem;
! with Sem_Aux;   use Sem_Aux;
! with Sem_Cat;   use Sem_Cat;
! with Sem_Ch3;   use Sem_Ch3;
! with Sem_Ch6;   use Sem_Ch6;
! with Sem_Ch7;   use Sem_Ch7;
! with Sem_Ch8;   use Sem_Ch8;
! with Sem_Ch10;  use Sem_Ch10;
! with Sem_Ch13;  use Sem_Ch13;
! with Sem_Dim;   use Sem_Dim;
! with Sem_Disp;  use Sem_Disp;
! with Sem_Elab;  use Sem_Elab;
! with Sem_Elim;  use Sem_Elim;
! with Sem_Eval;  use Sem_Eval;
! with Sem_Prag;  use Sem_Prag;
! with Sem_Res;   use Sem_Res;
! with Sem_Type;  use Sem_Type;
! with Sem_Util;  use Sem_Util;
! with Sem_Warn;  use Sem_Warn;
! with Stand;     use Stand;
! with Sinfo;     use Sinfo;
! with Sinfo.CN;  use Sinfo.CN;
! with Sinput;    use Sinput;
! with Sinput.L;  use Sinput.L;
! with Snames;    use Snames;
! with Stringt;   use Stringt;
! with Uname;     use Uname;
  with Table;
! with Tbuild;    use Tbuild;
! with Uintp;     use Uintp;
! with Urealp;    use Urealp;
! with Warnsw;    use Warnsw;
  
  with GNAT.HTable;
  
--- 23,86 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Contracts;      use Contracts;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Expander;       use Expander;
! with Fname;          use Fname;
! with Fname.UF;       use Fname.UF;
! with Freeze;         use Freeze;
! with Ghost;          use Ghost;
! with Itypes;         use Itypes;
! with Lib;            use Lib;
! with Lib.Load;       use Lib.Load;
! with Lib.Xref;       use Lib.Xref;
! with Nlists;         use Nlists;
! with Namet;          use Namet;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Rident;         use Rident;
! with Restrict;       use Restrict;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch10;       use Sem_Ch10;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Dim;        use Sem_Dim;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Elim;       use Sem_Elim;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Res;        use Sem_Res;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinfo.CN;       use Sinfo.CN;
! with Sinput;         use Sinput;
! with Sinput.L;       use Sinput.L;
! with Snames;         use Snames;
! with Stringt;        use Stringt;
! with Uname;          use Uname;
  with Table;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Urealp;         use Urealp;
! with Warnsw;         use Warnsw;
  
  with GNAT.HTable;
  
*************** package body Sem_Ch12 is
*** 498,504 ****
  
     function Build_Subprogram_Decl_Wrapper
       (Formal_Subp : Entity_Id) return Node_Id;
!    --  Ada 2020 allows formal subprograms to carry pre/postconditions.
     --  At the point of instantiation these contracts apply to uses of
     --  the actual subprogram. This is implemented by creating wrapper
     --  subprograms instead of the renamings previously used to link
--- 502,508 ----
  
     function Build_Subprogram_Decl_Wrapper
       (Formal_Subp : Entity_Id) return Node_Id;
!    --  Ada 2022 allows formal subprograms to carry pre/postconditions.
     --  At the point of instantiation these contracts apply to uses of
     --  the actual subprogram. This is implemented by creating wrapper
     --  subprograms instead of the renamings previously used to link
*************** package body Sem_Ch12 is
*** 609,622 ****
     --  packages, and the prefix of the formal type may be needed to resolve
     --  the ambiguity in the instance ???
  
!    procedure Freeze_Subprogram_Body
!      (Inst_Node : Node_Id;
        Gen_Body  : Node_Id;
        Pack_Id   : Entity_Id);
     --  The generic body may appear textually after the instance, including
     --  in the proper body of a stub, or within a different package instance.
     --  Given that the instance can only be elaborated after the generic, we
!    --  place freeze_nodes for the instance and/or for packages that may enclose
     --  the instance and the generic, so that the back-end can establish the
     --  proper order of elaboration.
  
--- 613,644 ----
     --  packages, and the prefix of the formal type may be needed to resolve
     --  the ambiguity in the instance ???
  
!    procedure Freeze_Package_Instance
!      (N        : Node_Id;
!       Gen_Body : Node_Id;
!       Gen_Decl : Node_Id;
!       Act_Id   : Entity_Id);
!    --  If the instantiation happens textually before the body of the generic,
!    --  the instantiation of the body must be analyzed after the generic body,
!    --  and not at the point of instantiation. Such early instantiations can
!    --  happen if the generic and the instance appear in a package declaration
!    --  because the generic body can only appear in the corresponding package
!    --  body. Early instantiations can also appear if generic, instance and
!    --  body are all in the declarative part of a subprogram or entry. Entities
!    --  of packages that are early instantiations are delayed, and their freeze
!    --  node appears after the generic body. This rather complex machinery is
!    --  needed when nested instantiations are present, because the source does
!    --  not carry any indication of where the corresponding instance bodies must
!    --  be installed and frozen.
! 
!    procedure Freeze_Subprogram_Instance
!      (N         : Node_Id;
        Gen_Body  : Node_Id;
        Pack_Id   : Entity_Id);
     --  The generic body may appear textually after the instance, including
     --  in the proper body of a stub, or within a different package instance.
     --  Given that the instance can only be elaborated after the generic, we
!    --  place freeze nodes for the instance and/or for packages that may enclose
     --  the instance and the generic, so that the back-end can establish the
     --  proper order of elaboration.
  
*************** package body Sem_Ch12 is
*** 710,734 ****
     --  associated freeze node. Insert the freeze node before the first source
     --  body which follows immediately after N. If no such body is found, the
     --  freeze node is inserted at the end of the declarative region which
!    --  contains N.
! 
!    procedure Install_Body
!      (Act_Body : Node_Id;
!       N        : Node_Id;
!       Gen_Body : Node_Id;
!       Gen_Decl : Node_Id);
!    --  If the instantiation happens textually before the body of the generic,
!    --  the instantiation of the body must be analyzed after the generic body,
!    --  and not at the point of instantiation. Such early instantiations can
!    --  happen if the generic and the instance appear in a package declaration
!    --  because the generic body can only appear in the corresponding package
!    --  body. Early instantiations can also appear if generic, instance and
!    --  body are all in the declarative part of a subprogram or entry. Entities
!    --  of packages that are early instantiations are delayed, and their freeze
!    --  node appears after the generic body. This rather complex machinery is
!    --  needed when nested instantiations are present, because the source does
!    --  not carry any indication of where the corresponding instance bodies must
!    --  be installed and frozen.
  
     procedure Install_Formal_Packages (Par : Entity_Id);
     --  Install the visible part of any formal of the parent that is a formal
--- 732,741 ----
     --  associated freeze node. Insert the freeze node before the first source
     --  body which follows immediately after N. If no such body is found, the
     --  freeze node is inserted at the end of the declarative region which
!    --  contains N, unless the instantiation is done in a package spec that is
!    --  not at library level, in which case it is inserted at the outer level.
!    --  This can also be invoked to insert the freeze node of a package that
!    --  encloses an instantiation, in which case N may denote an arbitrary node.
  
     procedure Install_Formal_Packages (Par : Entity_Id);
     --  Install the visible part of any formal of the parent that is a formal
*************** package body Sem_Ch12 is
*** 884,889 ****
--- 891,907 ----
     --  Verify that an attribute that appears as the default for a formal
     --  subprogram is a function or procedure with the correct profile.
  
+    procedure Validate_Formal_Type_Default (Decl : Node_Id);
+    --  Ada_2022 AI12-205: if a default subtype_mark is present, verify
+    --  that it is the name of a type in the same class as the formal.
+    --  The treatment parallels what is done in Instantiate_Type but differs
+    --  in a few ways so that this machinery cannot be reused as is: on one
+    --  hand there are no visibility issues for a default, because it is
+    --  analyzed in the same context as the formal type definition; on the
+    --  other hand the check needs to take into acount the use of a previous
+    --  formal type in the current formal type definition (see details in
+    --  AI12-0205).
+ 
     -------------------------------------------
     -- Data Structures for Generic Renamings --
     -------------------------------------------
*************** package body Sem_Ch12 is
*** 1100,1106 ****
        --  package. As usual an other association must be last in the list.
  
        procedure Build_Subprogram_Wrappers;
!       --  Ada 2020: AI12-0272 introduces pre/postconditions for formal
        --  subprograms. The implementation of making the formal into a renaming
        --  of the actual does not work, given that subprogram renaming cannot
        --  carry aspect specifications. Instead we must create subprogram
--- 1118,1124 ----
        --  package. As usual an other association must be last in the list.
  
        procedure Build_Subprogram_Wrappers;
!       --  Ada 2022: AI12-0272 introduces pre/postconditions for formal
        --  subprograms. The implementation of making the formal into a renaming
        --  of the actual does not work, given that subprogram renaming cannot
        --  carry aspect specifications. Instead we must create subprogram
*************** package body Sem_Ch12 is
*** 1758,1763 ****
--- 1776,1789 ----
                       if Partial_Parameterization then
                          Process_Default (Formal);
  
+                      elsif Present (Default_Subtype_Mark (Formal)) then
+                         Match := New_Copy (Default_Subtype_Mark (Formal));
+                         Append_List
+                          (Instantiate_Type
+                           (Formal, Match, Analyzed_Formal, Assoc_List),
+                             Assoc_List);
+                         Append_Elmt (Entity (Match), Actuals_To_Freeze);
+ 
                       else
                          Error_Msg_Sloc := Sloc (Gen_Unit);
                          Error_Msg_NE
*************** package body Sem_Ch12 is
*** 2222,2230 ****
        --  explicit box associations for the formals that are covered by an
        --  Others_Choice.
  
!       if not Is_Empty_List (Default_Formals) then
!          Append_List (Default_Formals, Formals);
!       end if;
  
        return Assoc_List;
     end Analyze_Associations;
--- 2248,2254 ----
        --  explicit box associations for the formals that are covered by an
        --  Others_Choice.
  
!       Append_List (Default_Formals, Formals);
  
        return Assoc_List;
     end Analyze_Associations;
*************** package body Sem_Ch12 is
*** 2347,2353 ****
        Set_Is_Generic_Type (Base);
        Set_Parent          (Base, Parent (Def));
  
!       Set_Ekind          (T, E_Decimal_Fixed_Point_Subtype);
        Set_Etype          (T, Base);
        Set_Size_Info      (T, Int_Base);
        Set_RM_Size        (T, RM_Size (Int_Base));
--- 2371,2377 ----
        Set_Is_Generic_Type (Base);
        Set_Parent          (Base, Parent (Def));
  
!       Mutate_Ekind       (T, E_Decimal_Fixed_Point_Subtype);
        Set_Etype          (T, Base);
        Set_Size_Info      (T, Int_Base);
        Set_RM_Size        (T, RM_Size (Int_Base));
*************** package body Sem_Ch12 is
*** 2370,2376 ****
        T   : Entity_Id;
        Def : Node_Id)
     is
!       Loc   : constant Source_Ptr := Sloc (Def);
  
     begin
        --  Rewrite as a type declaration of a derived type. This ensures that
--- 2394,2400 ----
        T   : Entity_Id;
        Def : Node_Id)
     is
!       Loc : constant Source_Ptr := Sloc (Def);
  
     begin
        --  Rewrite as a type declaration of a derived type. This ensures that
*************** package body Sem_Ch12 is
*** 2469,2478 ****
  
     begin
        Enter_Name          (T);
!       Set_Ekind           (T, E_Enumeration_Subtype);
        Set_Etype           (T, Base);
        Init_Size           (T, 8);
!       Init_Alignment      (T);
        Set_Is_Generic_Type (T);
        Set_Is_Constrained  (T);
  
--- 2493,2502 ----
  
     begin
        Enter_Name          (T);
!       Mutate_Ekind        (T, E_Enumeration_Subtype);
        Set_Etype           (T, Base);
        Init_Size           (T, 8);
!       Reinit_Alignment    (T);
        Set_Is_Generic_Type (T);
        Set_Is_Constrained  (T);
  
*************** package body Sem_Ch12 is
*** 2498,2507 ****
            Low_Bound  => Lo,
            High_Bound => Hi));
  
!       Set_Ekind           (Base, E_Enumeration_Type);
        Set_Etype           (Base, Base);
        Init_Size           (Base, 8);
!       Init_Alignment      (Base);
        Set_Is_Generic_Type (Base);
        Set_Scalar_Range    (Base, Scalar_Range (T));
        Set_Parent          (Base, Parent (Def));
--- 2522,2531 ----
            Low_Bound  => Lo,
            High_Bound => Hi));
  
!       Mutate_Ekind        (Base, E_Enumeration_Type);
        Set_Etype           (Base, Base);
        Init_Size           (Base, 8);
!       Reinit_Alignment    (Base);
        Set_Is_Generic_Type (Base);
        Set_Scalar_Range    (Base, Scalar_Range (T));
        Set_Parent          (Base, Parent (Def));
*************** package body Sem_Ch12 is
*** 2524,2530 ****
        --  the generic itself.
  
        Enter_Name (T);
!       Set_Ekind          (T, E_Floating_Point_Subtype);
        Set_Etype          (T, Base);
        Set_Size_Info      (T,              (Standard_Float));
        Set_RM_Size        (T, RM_Size      (Standard_Float));
--- 2548,2554 ----
        --  the generic itself.
  
        Enter_Name (T);
!       Mutate_Ekind       (T, E_Floating_Point_Subtype);
        Set_Etype          (T, Base);
        Set_Size_Info      (T,              (Standard_Float));
        Set_RM_Size        (T, RM_Size      (Standard_Float));
*************** package body Sem_Ch12 is
*** 2576,2583 ****
        --  signed integer types, and have the same attributes.
  
        Analyze_Formal_Signed_Integer_Type (T, Def);
!       Set_Ekind (T, E_Modular_Integer_Subtype);
!       Set_Ekind (Etype (T), E_Modular_Integer_Type);
  
     end Analyze_Formal_Modular_Type;
  
--- 2600,2607 ----
        --  signed integer types, and have the same attributes.
  
        Analyze_Formal_Signed_Integer_Type (T, Def);
!       Mutate_Ekind (T, E_Modular_Integer_Subtype);
!       Mutate_Ekind (Etype (T), E_Modular_Integer_Type);
  
     end Analyze_Formal_Modular_Type;
  
*************** package body Sem_Ch12 is
*** 2674,2680 ****
              end if;
           end if;
  
!          Set_Ekind (Id, K);
           Set_Etype (Id, T);
  
        --  Case of generic IN OUT parameter
--- 2698,2704 ----
              end if;
           end if;
  
!          Mutate_Ekind (Id, K);
           Set_Etype (Id, T);
  
        --  Case of generic IN OUT parameter
*************** package body Sem_Ch12 is
*** 2684,2690 ****
           --  subtype, as is done for subprogram formals. In this fashion, all
           --  its uses can refer to specific bounds.
  
!          Set_Ekind (Id, K);
           Set_Etype (Id, T);
  
           if (Is_Array_Type (T) and then not Is_Constrained (T))
--- 2708,2714 ----
           --  subtype, as is done for subprogram formals. In this fashion, all
           --  its uses can refer to specific bounds.
  
!          Mutate_Ekind (Id, K);
           Set_Etype (Id, T);
  
           if (Is_Array_Type (T) and then not Is_Constrained (T))
*************** package body Sem_Ch12 is
*** 2737,2743 ****
        --  will never be used, since all properties of the type are non-static.
  
        Enter_Name (T);
!       Set_Ekind            (T, E_Ordinary_Fixed_Point_Subtype);
        Set_Etype            (T, Base);
        Set_Size_Info        (T, Standard_Integer);
        Set_RM_Size          (T, RM_Size (Standard_Integer));
--- 2761,2767 ----
        --  will never be used, since all properties of the type are non-static.
  
        Enter_Name (T);
!       Mutate_Ekind         (T, E_Ordinary_Fixed_Point_Subtype);
        Set_Etype            (T, Base);
        Set_Size_Info        (T, Standard_Integer);
        Set_RM_Size          (T, RM_Size (Standard_Integer));
*************** package body Sem_Ch12 is
*** 2912,2918 ****
  
        --  Check for a formal package that is a package renaming
  
!       if Present (Renamed_Object (Gen_Unit)) then
  
           --  Indicate that unit is used, before replacing it with renamed
           --  entity for use below.
--- 2936,2942 ----
  
        --  Check for a formal package that is a package renaming
  
!       if Present (Renamed_Entity (Gen_Unit)) then
  
           --  Indicate that unit is used, before replacing it with renamed
           --  entity for use below.
*************** package body Sem_Ch12 is
*** 2922,2928 ****
              Generate_Reference  (Gen_Unit, N);
           end if;
  
!          Gen_Unit := Renamed_Object (Gen_Unit);
        end if;
  
        if Ekind (Gen_Unit) /= E_Generic_Package then
--- 2946,2952 ----
              Generate_Reference  (Gen_Unit, N);
           end if;
  
!          Gen_Unit := Renamed_Entity (Gen_Unit);
        end if;
  
        if Ekind (Gen_Unit) /= E_Generic_Package then
*************** package body Sem_Ch12 is
*** 3013,3020 ****
        exception
           when Instantiation_Error =>
              Enter_Name (Formal);
!             Set_Ekind  (Formal, E_Variable);
!             Set_Etype  (Formal, Any_Type);
              Restore_Hidden_Primitives (Vis_Prims_List);
  
              if Parent_Installed then
--- 3037,3044 ----
        exception
           when Instantiation_Error =>
              Enter_Name (Formal);
!             Mutate_Ekind (Formal, E_Variable);
!             Set_Etype (Formal, Any_Type);
              Restore_Hidden_Primitives (Vis_Prims_List);
  
              if Parent_Installed then
*************** package body Sem_Ch12 is
*** 3031,3038 ****
        Set_Is_Generic_Instance (Formal);
  
        Enter_Name (Formal);
!       Set_Ekind  (Formal, E_Package);
!       Set_Etype  (Formal, Standard_Void_Type);
        Set_Inner_Instances (Formal, New_Elmt_List);
  
        --  It is unclear that any aspects can apply to a formal package
--- 3055,3062 ----
        Set_Is_Generic_Instance (Formal);
  
        Enter_Name (Formal);
!       Mutate_Ekind (Formal, E_Package);
!       Set_Etype (Formal, Standard_Void_Type);
        Set_Inner_Instances (Formal, New_Elmt_List);
  
        --  It is unclear that any aspects can apply to a formal package
*************** package body Sem_Ch12 is
*** 3090,3100 ****
  
           Renaming_In_Par :=
             Make_Defining_Identifier (Loc, Chars (Gen_Unit));
!          Set_Ekind (Renaming_In_Par, E_Package);
           Set_Etype (Renaming_In_Par, Standard_Void_Type);
           Set_Scope (Renaming_In_Par, Parent_Instance);
           Set_Parent (Renaming_In_Par, Parent (Formal));
!          Set_Renamed_Object (Renaming_In_Par, Formal);
           Append_Entity (Renaming_In_Par, Parent_Instance);
        end if;
  
--- 3114,3124 ----
  
           Renaming_In_Par :=
             Make_Defining_Identifier (Loc, Chars (Gen_Unit));
!          Mutate_Ekind (Renaming_In_Par, E_Package);
           Set_Etype (Renaming_In_Par, Standard_Void_Type);
           Set_Scope (Renaming_In_Par, Parent_Instance);
           Set_Parent (Renaming_In_Par, Parent (Formal));
!          Set_Renamed_Entity (Renaming_In_Par, Formal);
           Append_Entity (Renaming_In_Par, Parent_Instance);
        end if;
  
*************** package body Sem_Ch12 is
*** 3159,3172 ****
  
        --  Add semantic information to the original defining identifier.
  
!       Set_Ekind (Pack_Id, E_Package);
        Set_Etype (Pack_Id, Standard_Void_Type);
        Set_Scope (Pack_Id, Scope (Formal));
        Set_Has_Completion (Pack_Id, True);
  
     <<Leave>>
        if Has_Aspects (N) then
!          --  Unclear that any other aspects may appear here, snalyze them
           --  for completion, given that the grammar allows their appearance.
  
           Analyze_Aspect_Specifications (N, Pack_Id);
--- 3183,3196 ----
  
        --  Add semantic information to the original defining identifier.
  
!       Mutate_Ekind (Pack_Id, E_Package);
        Set_Etype (Pack_Id, Standard_Void_Type);
        Set_Scope (Pack_Id, Scope (Formal));
        Set_Has_Completion (Pack_Id, True);
  
     <<Leave>>
        if Has_Aspects (N) then
!          --  Unclear that any other aspects may appear here, analyze them
           --  for completion, given that the grammar allows their appearance.
  
           Analyze_Aspect_Specifications (N, Pack_Id);
*************** package body Sem_Ch12 is
*** 3203,3209 ****
     is
     begin
        Enter_Name (T);
!       Set_Ekind (T, E_Incomplete_Type);
        Set_Etype (T, T);
        Set_Private_Dependents (T, New_Elmt_List);
  
--- 3227,3233 ----
     is
     begin
        Enter_Name (T);
!       Mutate_Ekind (T, E_Incomplete_Type);
        Set_Etype (T, T);
        Set_Private_Dependents (T, New_Elmt_List);
  
*************** package body Sem_Ch12 is
*** 3231,3237 ****
     begin
        Enter_Name (T);
  
!       Set_Ekind          (T, E_Signed_Integer_Subtype);
        Set_Etype          (T, Base);
        Set_Size_Info      (T, Standard_Integer);
        Set_RM_Size        (T, RM_Size (Standard_Integer));
--- 3255,3261 ----
     begin
        Enter_Name (T);
  
!       Mutate_Ekind       (T, E_Signed_Integer_Subtype);
        Set_Etype          (T, Base);
        Set_Size_Info      (T, Standard_Integer);
        Set_RM_Size        (T, RM_Size (Standard_Integer));
*************** package body Sem_Ch12 is
*** 3253,3258 ****
--- 3277,3283 ----
     procedure Analyze_Formal_Subprogram_Declaration (N : Node_Id) is
        Spec : constant Node_Id   := Specification (N);
        Def  : constant Node_Id   := Default_Name (N);
+       Expr : constant Node_Id   := Expression (N);
        Nam  : constant Entity_Id := Defining_Unit_Name (Spec);
        Subp : Entity_Id;
  
*************** package body Sem_Ch12 is
*** 3285,3290 ****
--- 3310,3327 ----
                ("a formal abstract subprogram cannot default to null", Spec);
           end if;
  
+          --  A formal abstract function cannot have an expression default
+          --  (expression defaults are allowed for nonabstract formal functions
+          --  when extensions are enabled).
+ 
+          if Nkind (Spec) = N_Function_Specification
+            and then Present (Expr)
+          then
+             Error_Msg_N
+               ("a formal abstract subprogram cannot default to an expression",
+                Spec);
+          end if;
+ 
           declare
              Ctrl_Type : constant Entity_Id := Find_Dispatching_Type (Nam);
           begin
*************** package body Sem_Ch12 is
*** 3311,3317 ****
        if Box_Present (N) then
           null;
  
!       --  Else default is bound at the point of generic declaration
  
        elsif Present (Def) then
           if Nkind (Def) = N_Operator_Symbol then
--- 3348,3354 ----
        if Box_Present (N) then
           null;
  
!       --  Default name is bound at the point of generic declaration
  
        elsif Present (Def) then
           if Nkind (Def) = N_Operator_Symbol then
*************** package body Sem_Ch12 is
*** 3436,3441 ****
--- 3473,3488 ----
                 Error_Msg_N ("no visible subprogram matches specification", N);
              end if;
           end if;
+ 
+       --  When extensions are enabled, an expression can be given as default
+       --  for a formal function. The expression must be of the function result
+       --  type and can reference formal parameters of the function.
+ 
+       elsif Present (Expr) then
+          Push_Scope (Nam);
+          Install_Formals (Nam);
+          Preanalyze_Spec_Expression (Expr, Etype (Nam));
+          End_Scope;
        end if;
  
     <<Leave>>
*************** package body Sem_Ch12 is
*** 3524,3529 ****
--- 3571,3580 ----
        Set_Is_Generic_Type (T);
        Set_Is_First_Subtype (T);
  
+       if Present (Default_Subtype_Mark (Original_Node (N))) then
+          Validate_Formal_Type_Default (N);
+       end if;
+ 
        if Has_Aspects (N) then
           Analyze_Aspect_Specifications (N, T);
        end if;
*************** package body Sem_Ch12 is
*** 3585,3591 ****
  
        Generate_Reference_To_Generic_Formals (Current_Scope);
  
!       --  For Ada 2020, some formal parameters can carry aspects, which must
        --  be name-resolved at the end of the list of formal parameters (which
        --  has the semantics of a declaration list).
  
--- 3636,3642 ----
  
        Generate_Reference_To_Generic_Formals (Current_Scope);
  
!       --  For Ada 2022, some formal parameters can carry aspects, which must
        --  be name-resolved at the end of the list of formal parameters (which
        --  has the semantics of a declaration list).
  
*************** package body Sem_Ch12 is
*** 3689,3696 ****
        Start_Generic;
  
        Enter_Name (Id);
!       Set_Ekind  (Id, E_Generic_Package);
!       Set_Etype  (Id, Standard_Void_Type);
  
        --  Set SPARK_Mode from context
  
--- 3740,3747 ----
        Start_Generic;
  
        Enter_Name (Id);
!       Mutate_Ekind (Id, E_Generic_Package);
!       Set_Etype (Id, Standard_Void_Type);
  
        --  Set SPARK_Mode from context
  
*************** package body Sem_Ch12 is
*** 3866,3874 ****
        Analyze_Generic_Formal_Part (N);
  
        if Nkind (Spec) = N_Function_Specification then
!          Set_Ekind (Id, E_Generic_Function);
        else
!          Set_Ekind (Id, E_Generic_Procedure);
        end if;
  
        --  Set SPARK_Mode from context
--- 3917,3925 ----
        Analyze_Generic_Formal_Part (N);
  
        if Nkind (Spec) = N_Function_Specification then
!          Mutate_Ekind (Id, E_Generic_Function);
        else
!          Mutate_Ekind (Id, E_Generic_Procedure);
        end if;
  
        --  Set SPARK_Mode from context
*************** package body Sem_Ch12 is
*** 3899,3910 ****
              --  Check restriction imposed by AI05-073: a generic function
              --  cannot return an abstract type or an access to such.
  
!             --  This is a binding interpretation should it apply to earlier
!             --  versions of Ada as well as Ada 2012???
! 
!             if Is_Abstract_Type (Designated_Type (Result_Type))
!               and then Ada_Version >= Ada_2012
!             then
                 Error_Msg_N
                   ("generic function cannot have an access result "
                    & "that designates an abstract type", Spec);
--- 3950,3956 ----
              --  Check restriction imposed by AI05-073: a generic function
              --  cannot return an abstract type or an access to such.
  
!             if Is_Abstract_Type (Designated_Type (Result_Type)) then
                 Error_Msg_N
                   ("generic function cannot have an access result "
                    & "that designates an abstract type", Spec);
*************** package body Sem_Ch12 is
*** 4185,4191 ****
        end if;
  
        Generate_Definition (Act_Decl_Id);
!       Set_Ekind (Act_Decl_Id, E_Package);
  
        --  Initialize list of incomplete actuals before analysis
  
--- 4231,4237 ----
        end if;
  
        Generate_Definition (Act_Decl_Id);
!       Mutate_Ekind (Act_Decl_Id, E_Package);
  
        --  Initialize list of incomplete actuals before analysis
  
*************** package body Sem_Ch12 is
*** 4265,4273 ****
           Set_Is_Instantiated (Gen_Unit);
           Generate_Reference  (Gen_Unit, N);
  
!          if Present (Renamed_Object (Gen_Unit)) then
!             Set_Is_Instantiated (Renamed_Object (Gen_Unit));
!             Generate_Reference  (Renamed_Object (Gen_Unit), N);
           end if;
        end if;
  
--- 4311,4319 ----
           Set_Is_Instantiated (Gen_Unit);
           Generate_Reference  (Gen_Unit, N);
  
!          if Present (Renamed_Entity (Gen_Unit)) then
!             Set_Is_Instantiated (Renamed_Entity (Gen_Unit));
!             Generate_Reference  (Renamed_Entity (Gen_Unit), N);
           end if;
        end if;
  
*************** package body Sem_Ch12 is
*** 4283,4299 ****
          and then Chars (Act_Decl_Id) = Chars (Prefix (Gen_Id))
        then
           Error_Msg_N
!            ("& is hidden within declaration of instance ", Prefix (Gen_Id));
        end if;
  
        Set_Entity (Gen_Id, Gen_Unit);
  
        --  If generic is a renaming, get original generic unit
  
!       if Present (Renamed_Object (Gen_Unit))
!         and then Ekind (Renamed_Object (Gen_Unit)) = E_Generic_Package
        then
!          Gen_Unit := Renamed_Object (Gen_Unit);
        end if;
  
        --  Verify that there are no circular instantiations
--- 4329,4345 ----
          and then Chars (Act_Decl_Id) = Chars (Prefix (Gen_Id))
        then
           Error_Msg_N
!            ("& is hidden within declaration of instance", Prefix (Gen_Id));
        end if;
  
        Set_Entity (Gen_Id, Gen_Unit);
  
        --  If generic is a renaming, get original generic unit
  
!       if Present (Renamed_Entity (Gen_Unit))
!         and then Ekind (Renamed_Entity (Gen_Unit)) = E_Generic_Package
        then
!          Gen_Unit := Renamed_Entity (Gen_Unit);
        end if;
  
        --  Verify that there are no circular instantiations
*************** package body Sem_Ch12 is
*** 4312,4318 ****
           goto Leave;
  
        else
!          Set_Ekind (Inst_Id, E_Package);
           Set_Scope (Inst_Id, Current_Scope);
  
           --  If the context of the instance is subject to SPARK_Mode "off" or
--- 4358,4364 ----
           goto Leave;
  
        else
!          Mutate_Ekind (Inst_Id, E_Package);
           Set_Scope (Inst_Id, Current_Scope);
  
           --  If the context of the instance is subject to SPARK_Mode "off" or
*************** package body Sem_Ch12 is
*** 4535,4544 ****
                 --  If the current scope is itself an instance within a child
                 --  unit, there will be duplications in the scope stack, and the
                 --  unstacking mechanism in Inline_Instance_Body will fail.
!                --  This loses some rare cases of optimization, and might be
!                --  improved some day, if we can find a proper abstraction for
!                --  "the complete compilation context" that can be saved and
!                --  restored. ???
  
                 if Is_Generic_Instance (Current_Scope) then
                    declare
--- 4581,4587 ----
                 --  If the current scope is itself an instance within a child
                 --  unit, there will be duplications in the scope stack, and the
                 --  unstacking mechanism in Inline_Instance_Body will fail.
!                --  This loses some rare cases of optimization.
  
                 if Is_Generic_Instance (Current_Scope) then
                    declare
*************** package body Sem_Ch12 is
*** 4983,4999 ****
  
        if Gen_Comp /= Cunit_Entity (Current_Sem_Unit) then
  
!          --  Add some comments for the following two loops ???
  
           S := Current_Scope;
           while Present (S) and then S /= Standard_Standard loop
              loop
                 Num_Scopes := Num_Scopes + 1;
  
                 Use_Clauses (Num_Scopes) :=
                   (Scope_Stack.Table
!                     (Scope_Stack.Last - Num_Scopes + 1).
!                        First_Use_Clause);
                 End_Use_Clauses (Use_Clauses (Num_Scopes));
  
                 exit when Scope_Stack.Last - Num_Scopes + 1 = Scope_Stack.First
--- 5026,5045 ----
  
        if Gen_Comp /= Cunit_Entity (Current_Sem_Unit) then
  
!          --  Loop through enclosing scopes until we reach a generic instance,
!          --  package body, or subprogram.
  
           S := Current_Scope;
           while Present (S) and then S /= Standard_Standard loop
+ 
+             --  Save use clauses from enclosing scopes into Use_Clauses
+ 
              loop
                 Num_Scopes := Num_Scopes + 1;
  
                 Use_Clauses (Num_Scopes) :=
                   (Scope_Stack.Table
!                     (Scope_Stack.Last - Num_Scopes + 1).First_Use_Clause);
                 End_Use_Clauses (Use_Clauses (Num_Scopes));
  
                 exit when Scope_Stack.Last - Num_Scopes + 1 = Scope_Stack.First
*************** package body Sem_Ch12 is
*** 5276,5282 ****
  
           Scop := Scope (E);
           while Scop /= Standard_Standard loop
!             if Ekind (Scop) in Subprogram_Kind and then Is_Inlined (Scop) then
                 return True;
              end if;
  
--- 5322,5328 ----
  
           Scop := Scope (E);
           while Scop /= Standard_Standard loop
!             if Is_Subprogram (Scop) and then Is_Inlined (Scop) then
                 return True;
              end if;
  
*************** package body Sem_Ch12 is
*** 5550,5556 ****
           --  If there is a formal subprogram with the same name as the unit
           --  itself, do not add this renaming declaration, to prevent
           --  ambiguities when there is a call with that name in the body.
-          --  This is a partial and ugly fix for one ACATS test. ???
  
           Renaming_Decl := First (Renaming_List);
           while Present (Renaming_Decl) loop
--- 5596,5601 ----
*************** package body Sem_Ch12 is
*** 5659,5665 ****
           Error_Msg_NE ("instantiation of & within itself", N, Gen_Unit);
  
        else
!          Set_Ekind (Inst_Id, K);
           Set_Scope (Inst_Id, Current_Scope);
  
           Set_Entity (Gen_Id, Gen_Unit);
--- 5704,5710 ----
           Error_Msg_NE ("instantiation of & within itself", N, Gen_Unit);
  
        else
!          Mutate_Ekind (Inst_Id, K);
           Set_Scope (Inst_Id, Current_Scope);
  
           Set_Entity (Gen_Id, Gen_Unit);
*************** package body Sem_Ch12 is
*** 5671,5680 ****
  
           --  If renaming, get original unit
  
!          if Present (Renamed_Object (Gen_Unit))
!            and then Is_Generic_Subprogram (Renamed_Object (Gen_Unit))
           then
!             Gen_Unit := Renamed_Object (Gen_Unit);
              Set_Is_Instantiated (Gen_Unit);
              Generate_Reference  (Gen_Unit, N);
           end if;
--- 5716,5725 ----
  
           --  If renaming, get original unit
  
!          if Present (Renamed_Entity (Gen_Unit))
!            and then Is_Generic_Subprogram (Renamed_Entity (Gen_Unit))
           then
!             Gen_Unit := Renamed_Entity (Gen_Unit);
              Set_Is_Instantiated (Gen_Unit);
              Generate_Reference  (Gen_Unit, N);
           end if;
*************** package body Sem_Ch12 is
*** 5775,5780 ****
--- 5820,5834 ----
              Set_SPARK_Mode (Gen_Unit);
           end if;
  
+          --  Need to mark Anon_Id intrinsic before calling
+          --  Analyze_Instance_And_Renamings because this flag may be propagated
+          --  to other nodes.
+ 
+          if Is_Intrinsic_Subprogram (Gen_Unit) then
+             Set_Is_Intrinsic_Subprogram (Anon_Id);
+             Set_Interface_Name (Anon_Id, Interface_Name (Gen_Unit));
+          end if;
+ 
           Analyze_Instance_And_Renamings;
  
           --  Restore SPARK_Mode from the context after analysis of the package
*************** package body Sem_Ch12 is
*** 5789,5803 ****
           end if;
  
           --  If the generic is marked Import (Intrinsic), then so is the
!          --  instance. This indicates that there is no body to instantiate. If
!          --  generic is marked inline, so it the instance, and the anonymous
!          --  subprogram it renames. If inlined, or else if inlining is enabled
!          --  for the compilation, we generate the instance body even if it is
!          --  not within the main unit.
  
           if Is_Intrinsic_Subprogram (Gen_Unit) then
-             Set_Is_Intrinsic_Subprogram (Anon_Id);
              Set_Is_Intrinsic_Subprogram (Act_Decl_Id);
  
              if Chars (Gen_Unit) = Name_Unchecked_Conversion then
                 Validate_Unchecked_Conversion (N, Act_Decl_Id);
--- 5843,5855 ----
           end if;
  
           --  If the generic is marked Import (Intrinsic), then so is the
!          --  instance; this indicates that there is no body to instantiate.
!          --  We also copy the interface name in case this is handled by the
!          --  back-end and deal with an instance of unchecked conversion.
  
           if Is_Intrinsic_Subprogram (Gen_Unit) then
              Set_Is_Intrinsic_Subprogram (Act_Decl_Id);
+             Set_Interface_Name (Act_Decl_Id, Interface_Name (Gen_Unit));
  
              if Chars (Gen_Unit) = Name_Unchecked_Conversion then
                 Validate_Unchecked_Conversion (N, Act_Decl_Id);
*************** package body Sem_Ch12 is
*** 6026,6236 ****
        end if;
     end Get_Associated_Node;
  
-    ----------------------------
-    -- Build_Function_Wrapper --
-    ----------------------------
- 
-    function Build_Function_Wrapper
-      (Formal_Subp : Entity_Id;
-       Actual_Subp : Entity_Id) return Node_Id
-    is
-       Loc       : constant Source_Ptr := Sloc (Current_Scope);
-       Ret_Type  : constant Entity_Id  := Get_Instance_Of (Etype (Formal_Subp));
-       Actuals   : List_Id;
-       Decl      : Node_Id;
-       Func_Name : Node_Id;
-       Func      : Entity_Id;
-       Parm_Type : Node_Id;
-       Profile   : List_Id := New_List;
-       Spec      : Node_Id;
-       Act_F     : Entity_Id;
-       Form_F    : Entity_Id;
-       New_F     : Entity_Id;
- 
-    begin
-       Func_Name := New_Occurrence_Of (Actual_Subp, Loc);
- 
-       Func := Make_Defining_Identifier (Loc, Chars (Formal_Subp));
-       Set_Ekind (Func, E_Function);
-       Set_Is_Generic_Actual_Subprogram (Func);
- 
-       Actuals := New_List;
-       Profile := New_List;
- 
-       Act_F  := First_Formal (Actual_Subp);
-       Form_F := First_Formal (Formal_Subp);
-       while Present (Form_F) loop
- 
-          --  Create new formal for profile of wrapper, and add a reference
-          --  to it in the list of actuals for the enclosing call. The name
-          --  must be that of the formal in the formal subprogram, because
-          --  calls to it in the generic body may use named associations.
- 
-          New_F := Make_Defining_Identifier (Loc, Chars (Form_F));
- 
-          Parm_Type :=
-            New_Occurrence_Of (Get_Instance_Of (Etype (Form_F)), Loc);
- 
-          Append_To (Profile,
-            Make_Parameter_Specification (Loc,
-              Defining_Identifier => New_F,
-              Parameter_Type      => Parm_Type));
- 
-          Append_To (Actuals, New_Occurrence_Of (New_F, Loc));
-          Next_Formal (Form_F);
- 
-          if Present (Act_F) then
-             Next_Formal (Act_F);
-          end if;
-       end loop;
- 
-       Spec :=
-         Make_Function_Specification (Loc,
-           Defining_Unit_Name       => Func,
-           Parameter_Specifications => Profile,
-           Result_Definition        => New_Occurrence_Of (Ret_Type, Loc));
- 
-       Decl :=
-         Make_Expression_Function (Loc,
-           Specification => Spec,
-           Expression    =>
-             Make_Function_Call (Loc,
-               Name                   => Func_Name,
-               Parameter_Associations => Actuals));
- 
-       return Decl;
-    end Build_Function_Wrapper;
- 
-    ----------------------------
-    -- Build_Operator_Wrapper --
-    ----------------------------
- 
-    function Build_Operator_Wrapper
-      (Formal_Subp : Entity_Id;
-       Actual_Subp : Entity_Id) return Node_Id
-    is
-       Loc       : constant Source_Ptr := Sloc (Current_Scope);
-       Ret_Type  : constant Entity_Id  :=
-                     Get_Instance_Of (Etype (Formal_Subp));
-       Op_Type   : constant Entity_Id  :=
-                     Get_Instance_Of (Etype (First_Formal (Formal_Subp)));
-       Is_Binary : constant Boolean    :=
-                     Present (Next_Formal (First_Formal (Formal_Subp)));
- 
-       Decl    : Node_Id;
-       Expr    : Node_Id := Empty;
-       F1, F2  : Entity_Id;
-       Func    : Entity_Id;
-       Op_Name : Name_Id;
-       Spec    : Node_Id;
-       L, R    : Node_Id;
- 
-    begin
-       Op_Name := Chars (Actual_Subp);
- 
-       --  Create entities for wrapper function and its formals
- 
-       F1 := Make_Temporary (Loc, 'A');
-       F2 := Make_Temporary (Loc, 'B');
-       L  := New_Occurrence_Of (F1, Loc);
-       R  := New_Occurrence_Of (F2, Loc);
- 
-       Func := Make_Defining_Identifier (Loc, Chars (Formal_Subp));
-       Set_Ekind (Func, E_Function);
-       Set_Is_Generic_Actual_Subprogram (Func);
- 
-       Spec :=
-         Make_Function_Specification (Loc,
-           Defining_Unit_Name       => Func,
-           Parameter_Specifications => New_List (
-             Make_Parameter_Specification (Loc,
-                Defining_Identifier => F1,
-                Parameter_Type      => New_Occurrence_Of (Op_Type, Loc))),
-           Result_Definition        => New_Occurrence_Of (Ret_Type, Loc));
- 
-       if Is_Binary then
-          Append_To (Parameter_Specifications (Spec),
-             Make_Parameter_Specification (Loc,
-               Defining_Identifier => F2,
-               Parameter_Type      => New_Occurrence_Of (Op_Type, Loc)));
-       end if;
- 
-       --  Build expression as a function call, or as an operator node
-       --  that corresponds to the name of the actual, starting with
-       --  binary operators.
- 
-       if Op_Name not in Any_Operator_Name then
-          Expr :=
-            Make_Function_Call (Loc,
-              Name                   =>
-                New_Occurrence_Of (Actual_Subp, Loc),
-              Parameter_Associations => New_List (L));
- 
-          if Is_Binary then
-             Append_To (Parameter_Associations (Expr), R);
-          end if;
- 
-       --  Binary operators
- 
-       elsif Is_Binary then
-          if Op_Name = Name_Op_And then
-             Expr := Make_Op_And      (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Or then
-             Expr := Make_Op_Or       (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Xor then
-             Expr := Make_Op_Xor      (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Eq then
-             Expr := Make_Op_Eq       (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Ne then
-             Expr := Make_Op_Ne       (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Le then
-             Expr := Make_Op_Le       (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Gt then
-             Expr := Make_Op_Gt       (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Ge then
-             Expr := Make_Op_Ge       (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Lt then
-             Expr := Make_Op_Lt       (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Add then
-             Expr := Make_Op_Add      (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Subtract then
-             Expr := Make_Op_Subtract (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Concat then
-             Expr := Make_Op_Concat   (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Multiply then
-             Expr := Make_Op_Multiply (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Divide then
-             Expr := Make_Op_Divide   (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Mod then
-             Expr := Make_Op_Mod      (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Rem then
-             Expr := Make_Op_Rem      (Loc, Left_Opnd => L, Right_Opnd => R);
-          elsif Op_Name = Name_Op_Expon then
-             Expr := Make_Op_Expon    (Loc, Left_Opnd => L, Right_Opnd => R);
-          end if;
- 
-       --  Unary operators
- 
-       else
-          if Op_Name = Name_Op_Add then
-             Expr := Make_Op_Plus  (Loc, Right_Opnd => L);
-          elsif Op_Name = Name_Op_Subtract then
-             Expr := Make_Op_Minus (Loc, Right_Opnd => L);
-          elsif Op_Name = Name_Op_Abs then
-             Expr := Make_Op_Abs   (Loc, Right_Opnd => L);
-          elsif Op_Name = Name_Op_Not then
-             Expr := Make_Op_Not   (Loc, Right_Opnd => L);
-          end if;
-       end if;
- 
-       Decl :=
-         Make_Expression_Function (Loc,
-           Specification => Spec,
-           Expression    => Expr);
- 
-       return Decl;
-    end Build_Operator_Wrapper;
- 
     -----------------------------------
     -- Build_Subprogram_Decl_Wrapper --
     -----------------------------------
--- 6078,6083 ----
*************** package body Sem_Ch12 is
*** 6251,6257 ****
     begin
  
        Subp := Make_Defining_Identifier (Loc, Chars (Formal_Subp));
!       Set_Ekind (Subp, Ekind (Formal_Subp));
        Set_Is_Generic_Actual_Subprogram (Subp);
  
        Profile := Parameter_Specifications (
--- 6098,6104 ----
     begin
  
        Subp := Make_Defining_Identifier (Loc, Chars (Formal_Subp));
!       Mutate_Ekind (Subp, Ekind (Formal_Subp));
        Set_Is_Generic_Actual_Subprogram (Subp);
  
        Profile := Parameter_Specifications (
*************** package body Sem_Ch12 is
*** 6828,6836 ****
           elsif Ekind (E1) = E_Package then
              Check_Mismatch
                (Ekind (E1) /= Ekind (E2)
!                 or else (Present (Renamed_Object (E2))
!                           and then Renamed_Object (E1) /=
!                                      Renamed_Object (E2)));
  
           elsif Is_Overloadable (E1) then
              --  Verify that the actual subprograms match. Note that actuals
--- 6675,6683 ----
           elsif Ekind (E1) = E_Package then
              Check_Mismatch
                (Ekind (E1) /= Ekind (E2)
!                 or else (Present (Renamed_Entity (E2))
!                           and then Renamed_Entity (E1) /=
!                                      Renamed_Entity (E2)));
  
           elsif Is_Overloadable (E1) then
              --  Verify that the actual subprograms match. Note that actuals
*************** package body Sem_Ch12 is
*** 6901,6907 ****
        E := First_Entity (P_Id);
        while Present (E) loop
           if Ekind (E) = E_Package then
!             if Renamed_Object (E) = P_Id then
                 exit;
  
              elsif Nkind (Parent (E)) /= N_Package_Renaming_Declaration then
--- 6748,6754 ----
        E := First_Entity (P_Id);
        while Present (E) loop
           if Ekind (E) = E_Package then
!             if Renamed_Entity (E) = P_Id then
                 exit;
  
              elsif Nkind (Parent (E)) /= N_Package_Renaming_Declaration then
*************** package body Sem_Ch12 is
*** 7084,7091 ****
                 Astype := First_Subtype (E);
              end if;
  
!             Set_Size_Info      (E,                (Astype));
!             Set_RM_Size        (E, RM_Size        (Astype));
              Set_First_Rep_Item (E, First_Rep_Item (Astype));
  
              if Is_Discrete_Or_Fixed_Point_Type (E) then
--- 6931,6938 ----
                 Astype := First_Subtype (E);
              end if;
  
!             Set_Size_Info      (E, (Astype));
!             Copy_RM_Size       (To => E, From => Astype);
              Set_First_Rep_Item (E, First_Rep_Item (Astype));
  
              if Is_Discrete_Or_Fixed_Point_Type (E) then
*************** package body Sem_Ch12 is
*** 7100,7106 ****
              --  formal part are also visible. Otherwise, ignore the entity
              --  created to validate the actuals.
  
!             if Renamed_Object (E) = Instance then
                 exit;
  
              elsif Nkind (Parent (E)) /= N_Package_Renaming_Declaration then
--- 6947,6953 ----
              --  formal part are also visible. Otherwise, ignore the entity
              --  created to validate the actuals.
  
!             if Renamed_Entity (E) = Instance then
                 exit;
  
              elsif Nkind (Parent (E)) /= N_Package_Renaming_Declaration then
*************** package body Sem_Ch12 is
*** 7116,7125 ****
                and then not Is_Generic_Formal (E)
              then
                 if Box_Present (Parent (Associated_Formal_Package (E))) then
!                   Check_Generic_Actuals (Renamed_Object (E), True);
  
                 else
!                   Check_Generic_Actuals (Renamed_Object (E), False);
                 end if;
  
                 Set_Is_Hidden (E, False);
--- 6963,6972 ----
                and then not Is_Generic_Formal (E)
              then
                 if Box_Present (Parent (Associated_Formal_Package (E))) then
!                   Check_Generic_Actuals (Renamed_Entity (E), True);
  
                 else
!                   Check_Generic_Actuals (Renamed_Entity (E), False);
                 end if;
  
                 Set_Is_Hidden (E, False);
*************** package body Sem_Ch12 is
*** 7352,7360 ****
           Inst_Par := Entity (Prefix (Gen_Id));
  
           if Ekind (Inst_Par) = E_Package
!            and then Present (Renamed_Object (Inst_Par))
           then
!             Inst_Par := Renamed_Object (Inst_Par);
           end if;
  
           if Ekind (Inst_Par) = E_Package then
--- 7199,7207 ----
           Inst_Par := Entity (Prefix (Gen_Id));
  
           if Ekind (Inst_Par) = E_Package
!            and then Present (Renamed_Entity (Inst_Par))
           then
!             Inst_Par := Renamed_Entity (Inst_Par);
           end if;
  
           if Ekind (Inst_Par) = E_Package then
*************** package body Sem_Ch12 is
*** 7556,7562 ****
  
                 E := First_Entity (Entity (Prefix (Gen_Id)));
                 while Present (E) loop
!                   if Present (Renamed_Entity (E))
                      and then
                        Renamed_Entity (E) = Renamed_Entity (Entity (Gen_Id))
                    then
--- 7403,7410 ----
  
                 E := First_Entity (Entity (Prefix (Gen_Id)));
                 while Present (E) loop
!                   if not Is_Object (E)
!                     and then Present (Renamed_Entity (E))
                      and then
                        Renamed_Entity (E) = Renamed_Entity (Entity (Gen_Id))
                    then
*************** package body Sem_Ch12 is
*** 7593,7600 ****
  
              if Is_Generic_Unit (E)
                and then Nkind (Parent (E)) in N_Generic_Renaming_Declaration
!               and then Is_Child_Unit (Renamed_Object (E))
!               and then Is_Generic_Unit (Scope (Renamed_Object (E)))
                and then Nkind (Name (Parent (E))) = N_Expanded_Name
              then
                 Rewrite (Gen_Id, New_Copy_Tree (Name (Parent (E))));
--- 7441,7448 ----
  
              if Is_Generic_Unit (E)
                and then Nkind (Parent (E)) in N_Generic_Renaming_Declaration
!               and then Is_Child_Unit (Renamed_Entity (E))
!               and then Is_Generic_Unit (Scope (Renamed_Entity (E)))
                and then Nkind (Name (Parent (E))) = N_Expanded_Name
              then
                 Rewrite (Gen_Id, New_Copy_Tree (Name (Parent (E))));
*************** package body Sem_Ch12 is
*** 7872,7887 ****
        ----------------------
  
        procedure Copy_Descendants is
!          use Atree.Unchecked_Access;
!          --  This code section is part of the implementation of an untyped
!          --  tree traversal, so it needs direct access to node fields.
! 
        begin
!          Set_Field1 (New_N, Copy_Generic_Descendant (Field1 (N)));
!          Set_Field2 (New_N, Copy_Generic_Descendant (Field2 (N)));
!          Set_Field3 (New_N, Copy_Generic_Descendant (Field3 (N)));
!          Set_Field4 (New_N, Copy_Generic_Descendant (Field4 (N)));
!          Set_Field5 (New_N, Copy_Generic_Descendant (Field5 (N)));
        end Copy_Descendants;
  
        -----------------------------
--- 7720,7729 ----
        ----------------------
  
        procedure Copy_Descendants is
!          procedure Walk is new
!            Walk_Sinfo_Fields_Pairwise (Copy_Generic_Descendant);
        begin
!          Walk (New_N, N);
        end Copy_Descendants;
  
        -----------------------------
*************** package body Sem_Ch12 is
*** 8068,8074 ****
                  (Scope (Ent) = Current_Instantiated_Parent.Gen_Id
                    and then not Is_Child_Unit (Ent))
                or else
!                 (Scope_Depth (Scope (Ent)) >
                               Scope_Depth (Current_Instantiated_Parent.Gen_Id)
                    and then
                      Get_Source_Unit (Ent) =
--- 7910,7918 ----
                  (Scope (Ent) = Current_Instantiated_Parent.Gen_Id
                    and then not Is_Child_Unit (Ent))
                or else
!                 (Scope_Depth_Set (Scope (Ent))
!                   and then
!                  Scope_Depth (Scope (Ent)) >
                               Scope_Depth (Current_Instantiated_Parent.Gen_Id)
                    and then
                      Get_Source_Unit (Ent) =
*************** package body Sem_Ch12 is
*** 8482,8498 ****
           --  Do not copy the associated node, which points to the generic copy
           --  of the aggregate.
  
!          declare
!             use Atree.Unchecked_Access;
!             --  This code section is part of the implementation of an untyped
!             --  tree traversal, so it needs direct access to node fields.
  
!          begin
!             Set_Field1 (New_N, Copy_Generic_Descendant (Field1 (N)));
!             Set_Field2 (New_N, Copy_Generic_Descendant (Field2 (N)));
!             Set_Field3 (New_N, Copy_Generic_Descendant (Field3 (N)));
!             Set_Field5 (New_N, Copy_Generic_Descendant (Field5 (N)));
!          end;
  
        --  Allocators do not have an identifier denoting the access type, so we
        --  must locate it through the expression to check whether the views are
--- 8326,8356 ----
           --  Do not copy the associated node, which points to the generic copy
           --  of the aggregate.
  
!          if Nkind (N) = N_Aggregate then
!             Set_Aggregate_Bounds
!               (New_N,
!                Node_Id (Copy_Generic_Descendant
!                           (Union_Id (Aggregate_Bounds (N)))));
  
!          elsif Nkind (N) = N_Extension_Aggregate then
!             Set_Ancestor_Part
!               (New_N,
!                Node_Id (Copy_Generic_Descendant
!                           (Union_Id (Ancestor_Part (N)))));
! 
!          else
!             pragma Assert (False);
!          end if;
! 
!          Set_Expressions
!            (New_N,
!             List_Id (Copy_Generic_Descendant (Union_Id (Expressions (N)))));
!          Set_Component_Associations
!            (New_N,
!             List_Id (Copy_Generic_Descendant
!                        (Union_Id (Component_Associations (N)))));
!          Set_Etype
!            (New_N, Node_Id (Copy_Generic_Descendant (Union_Id (Etype (N)))));
  
        --  Allocators do not have an identifier denoting the access type, so we
        --  must locate it through the expression to check whether the views are
*************** package body Sem_Ch12 is
*** 8653,8662 ****
              if Ekind (E1) = E_Package
                and then Nkind (Parent (E1)) = N_Package_Renaming_Declaration
              then
!                if Renamed_Object (E1) = Pack then
                    return True;
  
!                elsif E1 = P or else Renamed_Object (E1) = P then
                    return False;
  
                 elsif Is_Actual_Of_Previous_Formal (E1) then
--- 8511,8520 ----
              if Ekind (E1) = E_Package
                and then Nkind (Parent (E1)) = N_Package_Renaming_Declaration
              then
!                if Renamed_Entity (E1) = Pack then
                    return True;
  
!                elsif E1 = P or else Renamed_Entity (E1) = P then
                    return False;
  
                 elsif Is_Actual_Of_Previous_Formal (E1) then
*************** package body Sem_Ch12 is
*** 8706,8715 ****
              then
                 null;
  
!             elsif Renamed_Object (E) = Par then
                 return False;
  
!             elsif Renamed_Object (E) = Pack then
                 return True;
  
              elsif Is_Actual_Of_Previous_Formal (E) then
--- 8564,8573 ----
              then
                 null;
  
!             elsif Renamed_Entity (E) = Par then
                 return False;
  
!             elsif Renamed_Entity (E) = Pack then
                 return True;
  
              elsif Is_Actual_Of_Previous_Formal (E) then
*************** package body Sem_Ch12 is
*** 8976,8997 ****
        end if;
     end Find_Actual_Type;
  
!    ----------------------------
!    -- Freeze_Subprogram_Body --
!    ----------------------------
  
!    procedure Freeze_Subprogram_Body
!      (Inst_Node : Node_Id;
        Gen_Body  : Node_Id;
        Pack_Id   : Entity_Id)
    is
-       Gen_Unit : constant Entity_Id := Get_Generic_Entity (Inst_Node);
-       Par      : constant Entity_Id := Scope (Gen_Unit);
-       Enc_G    : Entity_Id;
-       Enc_G_F  : Node_Id;
-       Enc_I    : Node_Id;
-       F_Node   : Node_Id;
- 
        function Enclosing_Package_Body (N : Node_Id) return Node_Id;
        --  Find innermost package body that encloses the given node, and which
        --  is not a compilation unit. Freeze nodes for the instance, or for its
--- 8834,9096 ----
        end if;
     end Find_Actual_Type;
  
!    -----------------------------
!    -- Freeze_Package_Instance --
!    -----------------------------
  
!    procedure Freeze_Package_Instance
!      (N        : Node_Id;
!       Gen_Body : Node_Id;
!       Gen_Decl : Node_Id;
!       Act_Id   : Entity_Id)
!    is
!       function In_Same_Scope (Gen_Id, Act_Id : Node_Id) return Boolean;
!       --  Check if the generic definition and the instantiation come from
!       --  a common scope, in which case the instance must be frozen after
!       --  the generic body.
! 
!       function True_Sloc (N, Act_Unit : Node_Id) return Source_Ptr;
!       --  If the instance is nested inside a generic unit, the Sloc of the
!       --  instance indicates the place of the original definition, not the
!       --  point of the current enclosing instance. Pending a better usage of
!       --  Slocs to indicate instantiation places, we determine the place of
!       --  origin of a node by finding the maximum sloc of any ancestor node.
! 
!       --  Why is this not equivalent to Top_Level_Location ???
! 
!       -------------------
!       -- In_Same_Scope --
!       -------------------
! 
!       function In_Same_Scope (Gen_Id, Act_Id : Node_Id) return Boolean is
!          Act_Scop : Entity_Id := Scope (Act_Id);
!          Gen_Scop : Entity_Id := Scope (Gen_Id);
! 
!       begin
!          while Act_Scop /= Standard_Standard
!            and then Gen_Scop /= Standard_Standard
!          loop
!             if Act_Scop = Gen_Scop then
!                return True;
!             end if;
! 
!             Act_Scop := Scope (Act_Scop);
!             Gen_Scop := Scope (Gen_Scop);
!          end loop;
! 
!          return False;
!       end In_Same_Scope;
! 
!       ---------------
!       -- True_Sloc --
!       ---------------
! 
!       function True_Sloc (N, Act_Unit : Node_Id) return Source_Ptr is
!          N1  : Node_Id;
!          Res : Source_Ptr;
! 
!       begin
!          Res := Sloc (N);
!          N1  := N;
!          while Present (N1) and then N1 /= Act_Unit loop
!             if Sloc (N1) > Res then
!                Res := Sloc (N1);
!             end if;
! 
!             N1 := Parent (N1);
!          end loop;
! 
!          return Res;
!       end True_Sloc;
! 
!       --  Local variables
! 
!       Gen_Id    : constant Entity_Id := Get_Generic_Entity (N);
!       Par_Id    : constant Entity_Id := Scope (Gen_Id);
!       Act_Unit  : constant Node_Id   := Unit (Cunit (Get_Source_Unit (N)));
!       Gen_Unit  : constant Node_Id   :=
!                     Unit (Cunit (Get_Source_Unit (Gen_Decl)));
! 
!       Body_Unit  : Node_Id;
!       F_Node     : Node_Id;
!       Must_Delay : Boolean;
!       Orig_Body  : Node_Id;
! 
!    --  Start of processing for Freeze_Package_Instance
! 
!    begin
!       --  If the body is a subunit, the freeze point is the corresponding stub
!       --  in the current compilation, not the subunit itself.
! 
!       if Nkind (Parent (Gen_Body)) = N_Subunit then
!          Orig_Body := Corresponding_Stub (Parent (Gen_Body));
!       else
!          Orig_Body := Gen_Body;
!       end if;
! 
!       Body_Unit := Unit (Cunit (Get_Source_Unit (Orig_Body)));
! 
!       --  If the instantiation and the generic definition appear in the same
!       --  package declaration, this is an early instantiation. If they appear
!       --  in the same declarative part, it is an early instantiation only if
!       --  the generic body appears textually later, and the generic body is
!       --  also in the main unit.
! 
!       --  If instance is nested within a subprogram, and the generic body
!       --  is not, the instance is delayed because the enclosing body is. If
!       --  instance and body are within the same scope, or the same subprogram
!       --  body, indicate explicitly that the instance is delayed.
! 
!       Must_Delay :=
!         (Gen_Unit = Act_Unit
!           and then (Nkind (Gen_Unit) in N_Generic_Package_Declaration
!                                       | N_Package_Declaration
!                      or else (Gen_Unit = Body_Unit
!                                and then
!                               True_Sloc (N, Act_Unit) < Sloc (Orig_Body)))
!           and then Is_In_Main_Unit (Original_Node (Gen_Unit))
!           and then In_Same_Scope (Gen_Id, Act_Id));
! 
!       --  If this is an early instantiation, the freeze node is placed after
!       --  the generic body. Otherwise, if the generic appears in an instance,
!       --  we cannot freeze the current instance until the outer one is frozen.
!       --  This is only relevant if the current instance is nested within some
!       --  inner scope not itself within the outer instance. If this scope is
!       --  a package body in the same declarative part as the outer instance,
!       --  then that body needs to be frozen after the outer instance. Finally,
!       --  if no delay is needed, we place the freeze node at the end of the
!       --  current declarative part.
! 
!       if No (Freeze_Node (Act_Id))
!         or else not Is_List_Member (Freeze_Node (Act_Id))
!       then
!          Ensure_Freeze_Node (Act_Id);
!          F_Node := Freeze_Node (Act_Id);
! 
!          if Must_Delay then
!             Insert_After (Orig_Body, F_Node);
! 
!          elsif Is_Generic_Instance (Par_Id)
!            and then Present (Freeze_Node (Par_Id))
!            and then Scope (Act_Id) /= Par_Id
!          then
!             --  Freeze instance of inner generic after instance of enclosing
!             --  generic.
! 
!             if In_Same_Declarative_Part (Parent (Freeze_Node (Par_Id)), N) then
! 
!                --  Handle the following case:
! 
!                --    package Parent_Inst is new ...
!                --    freeze Parent_Inst []
! 
!                --    procedure P ...  --  this body freezes Parent_Inst
! 
!                --    package Inst is new ...
! 
!                --  In this particular scenario, the freeze node for Inst must
!                --  be inserted in the same manner as that of Parent_Inst,
!                --  before the next source body or at the end of the declarative
!                --  list (body not available). If body P did not exist and
!                --  Parent_Inst was frozen after Inst, either by a body
!                --  following Inst or at the end of the declarative region,
!                --  the freeze node for Inst must be inserted after that of
!                --  Parent_Inst. This relation is established by comparing
!                --  the Slocs of Parent_Inst freeze node and Inst.
!                --  We examine the parents of the enclosing lists to handle
!                --  the case where the parent instance is in the visible part
!                --  of a package declaration, and the inner instance is in
!                --  the corresponding private part.
! 
!                if Parent (List_Containing (Freeze_Node (Par_Id)))
!                     = Parent (List_Containing (N))
!                  and then Sloc (Freeze_Node (Par_Id)) <= Sloc (N)
!                then
!                   Insert_Freeze_Node_For_Instance (N, F_Node);
!                else
!                   Insert_After (Freeze_Node (Par_Id), F_Node);
!                end if;
! 
!             --  Freeze package enclosing instance of inner generic after
!             --  instance of enclosing generic.
! 
!             elsif Nkind (Parent (N)) in N_Package_Body | N_Subprogram_Body
!               and then In_Same_Declarative_Part
!                          (Parent (Freeze_Node (Par_Id)), Parent (N))
!             then
!                declare
!                   Enclosing :  Entity_Id;
! 
!                begin
!                   Enclosing := Corresponding_Spec (Parent (N));
! 
!                   if No (Enclosing) then
!                      Enclosing := Defining_Entity (Parent (N));
!                   end if;
! 
!                   Insert_Freeze_Node_For_Instance (N, F_Node);
!                   Ensure_Freeze_Node (Enclosing);
! 
!                   if not Is_List_Member (Freeze_Node (Enclosing)) then
! 
!                      --  The enclosing context is a subunit, insert the freeze
!                      --  node after the stub.
! 
!                      if Nkind (Parent (Parent (N))) = N_Subunit then
!                         Insert_Freeze_Node_For_Instance
!                           (Corresponding_Stub (Parent (Parent (N))),
!                            Freeze_Node (Enclosing));
! 
!                      --  The enclosing context is a package with a stub body
!                      --  which has already been replaced by the real body.
!                      --  Insert the freeze node after the actual body.
! 
!                      elsif Ekind (Enclosing) = E_Package
!                        and then Present (Body_Entity (Enclosing))
!                        and then Was_Originally_Stub
!                                   (Parent (Body_Entity (Enclosing)))
!                      then
!                         Insert_Freeze_Node_For_Instance
!                           (Parent (Body_Entity (Enclosing)),
!                            Freeze_Node (Enclosing));
! 
!                      --  The parent instance has been frozen before the body of
!                      --  the enclosing package, insert the freeze node after
!                      --  the body.
! 
!                      elsif In_Same_List (Freeze_Node (Par_Id), Parent (N))
!                        and then
!                          Sloc (Freeze_Node (Par_Id)) <= Sloc (Parent (N))
!                      then
!                         Insert_Freeze_Node_For_Instance
!                           (Parent (N), Freeze_Node (Enclosing));
! 
!                      else
!                         Insert_After
!                           (Freeze_Node (Par_Id), Freeze_Node (Enclosing));
!                      end if;
!                   end if;
!                end;
! 
!             else
!                Insert_Freeze_Node_For_Instance (N, F_Node);
!             end if;
! 
!          else
!             Insert_Freeze_Node_For_Instance (N, F_Node);
!          end if;
!       end if;
!    end Freeze_Package_Instance;
! 
!    --------------------------------
!    -- Freeze_Subprogram_Instance --
!    --------------------------------
! 
!    procedure Freeze_Subprogram_Instance
!      (N         : Node_Id;
        Gen_Body  : Node_Id;
        Pack_Id   : Entity_Id)
    is
        function Enclosing_Package_Body (N : Node_Id) return Node_Id;
        --  Find innermost package body that encloses the given node, and which
        --  is not a compilation unit. Freeze nodes for the instance, or for its
*************** package body Sem_Ch12 is
*** 9047,9053 ****
           return Freeze_Node (Id);
        end Package_Freeze_Node;
  
!    --  Start of processing for Freeze_Subprogram_Body
  
     begin
        --  If the instance and the generic body appear within the same unit, and
--- 9146,9161 ----
           return Freeze_Node (Id);
        end Package_Freeze_Node;
  
!       --  Local variables
! 
!       Enc_G  : constant Node_Id   := Enclosing_Package_Body (Gen_Body);
!       Enc_N  : constant Node_Id   := Enclosing_Package_Body (N);
!       Par_Id : constant Entity_Id := Scope (Get_Generic_Entity (N));
! 
!       Enc_G_F  : Node_Id;
!       F_Node   : Node_Id;
! 
!    --  Start of processing for Freeze_Subprogram_Instance
  
     begin
        --  If the instance and the generic body appear within the same unit, and
*************** package body Sem_Ch12 is
*** 9058,9083 ****
        --  packages. Otherwise, the freeze node is placed at the end of the
        --  current declarative part.
  
-       Enc_G  := Enclosing_Package_Body (Gen_Body);
-       Enc_I  := Enclosing_Package_Body (Inst_Node);
        Ensure_Freeze_Node (Pack_Id);
        F_Node := Freeze_Node (Pack_Id);
  
!       if Is_Generic_Instance (Par)
!         and then Present (Freeze_Node (Par))
!         and then In_Same_Declarative_Part
!                    (Parent (Freeze_Node (Par)), Inst_Node)
        then
           --  The parent was a premature instantiation. Insert freeze node at
           --  the end the current declarative part.
  
!          if Is_Known_Guaranteed_ABE (Get_Unit_Instantiation_Node (Par)) then
!             Insert_Freeze_Node_For_Instance (Inst_Node, F_Node);
  
           --  Handle the following case:
           --
           --    package Parent_Inst is new ...
!          --    Parent_Inst []
           --
           --    procedure P ...  --  this body freezes Parent_Inst
           --
--- 9166,9188 ----
        --  packages. Otherwise, the freeze node is placed at the end of the
        --  current declarative part.
  
        Ensure_Freeze_Node (Pack_Id);
        F_Node := Freeze_Node (Pack_Id);
  
!       if Is_Generic_Instance (Par_Id)
!         and then Present (Freeze_Node (Par_Id))
!         and then In_Same_Declarative_Part (Parent (Freeze_Node (Par_Id)), N)
        then
           --  The parent was a premature instantiation. Insert freeze node at
           --  the end the current declarative part.
  
!          if Is_Known_Guaranteed_ABE (Get_Unit_Instantiation_Node (Par_Id)) then
!             Insert_Freeze_Node_For_Instance (N, F_Node);
  
           --  Handle the following case:
           --
           --    package Parent_Inst is new ...
!          --    freeze Parent_Inst []
           --
           --    procedure P ...  --  this body freezes Parent_Inst
           --
*************** package body Sem_Ch12 is
*** 9092,9104 ****
           --  after that of Parent_Inst. This relation is established by
           --  comparing the Slocs of Parent_Inst freeze node and Inst.
  
!          elsif In_Same_List (Get_Unit_Instantiation_Node (Par), Inst_Node)
!            and then Sloc (Freeze_Node (Par)) <= Sloc (Inst_Node)
           then
!             Insert_Freeze_Node_For_Instance (Inst_Node, F_Node);
  
           else
!             Insert_After (Freeze_Node (Par), F_Node);
           end if;
  
        --  The body enclosing the instance should be frozen after the body that
--- 9197,9209 ----
           --  after that of Parent_Inst. This relation is established by
           --  comparing the Slocs of Parent_Inst freeze node and Inst.
  
!          elsif In_Same_List (Freeze_Node (Par_Id), N)
!            and then Sloc (Freeze_Node (Par_Id)) <= Sloc (N)
           then
!             Insert_Freeze_Node_For_Instance (N, F_Node);
  
           else
!             Insert_After (Freeze_Node (Par_Id), F_Node);
           end if;
  
        --  The body enclosing the instance should be frozen after the body that
*************** package body Sem_Ch12 is
*** 9108,9133 ****
        --  already, freeze the instance at the end of the current declarative
        --  part.
  
!       elsif Is_Generic_Instance (Par)
!         and then Present (Freeze_Node (Par))
!         and then Present (Enc_I)
        then
!          if In_Same_Declarative_Part (Parent (Freeze_Node (Par)), Enc_I) then
              --  The enclosing package may contain several instances. Rather
              --  than computing the earliest point at which to insert its freeze
              --  node, we place it at the end of the declarative part of the
              --  parent of the generic.
  
              Insert_Freeze_Node_For_Instance
!               (Freeze_Node (Par), Package_Freeze_Node (Enc_I));
           end if;
  
!          Insert_Freeze_Node_For_Instance (Inst_Node, F_Node);
  
        elsif Present (Enc_G)
!         and then Present (Enc_I)
!         and then Enc_G /= Enc_I
!         and then Earlier (Inst_Node, Gen_Body)
        then
           --  Freeze package that encloses instance, and place node after the
           --  package that encloses generic. If enclosing package is already
--- 9213,9239 ----
        --  already, freeze the instance at the end of the current declarative
        --  part.
  
!       elsif Is_Generic_Instance (Par_Id)
!         and then Present (Freeze_Node (Par_Id))
!         and then Present (Enc_N)
        then
!          if In_Same_Declarative_Part (Parent (Freeze_Node (Par_Id)), Enc_N)
!          then
              --  The enclosing package may contain several instances. Rather
              --  than computing the earliest point at which to insert its freeze
              --  node, we place it at the end of the declarative part of the
              --  parent of the generic.
  
              Insert_Freeze_Node_For_Instance
!               (Freeze_Node (Par_Id), Package_Freeze_Node (Enc_N));
           end if;
  
!          Insert_Freeze_Node_For_Instance (N, F_Node);
  
        elsif Present (Enc_G)
!         and then Present (Enc_N)
!         and then Enc_G /= Enc_N
!         and then Earlier (N, Gen_Body)
        then
           --  Freeze package that encloses instance, and place node after the
           --  package that encloses generic. If enclosing package is already
*************** package body Sem_Ch12 is
*** 9142,9156 ****
              Enclosing_Body : Node_Id;
  
           begin
!             if Nkind (Enc_I) = N_Package_Body_Stub then
!                Enclosing_Body := Proper_Body (Unit (Library_Unit (Enc_I)));
              else
!                Enclosing_Body := Enc_I;
              end if;
  
              if Parent (List_Containing (Enc_G)) /= Enclosing_Body then
                 Insert_Freeze_Node_For_Instance
!                  (Enc_G, Package_Freeze_Node (Enc_I));
              end if;
           end;
  
--- 9248,9262 ----
              Enclosing_Body : Node_Id;
  
           begin
!             if Nkind (Enc_N) = N_Package_Body_Stub then
!                Enclosing_Body := Proper_Body (Unit (Library_Unit (Enc_N)));
              else
!                Enclosing_Body := Enc_N;
              end if;
  
              if Parent (List_Containing (Enc_G)) /= Enclosing_Body then
                 Insert_Freeze_Node_For_Instance
!                  (Enc_G, Package_Freeze_Node (Enc_N));
              end if;
           end;
  
*************** package body Sem_Ch12 is
*** 9162,9176 ****
              Insert_After (Enc_G, Enc_G_F);
           end if;
  
!          Insert_Freeze_Node_For_Instance (Inst_Node, F_Node);
  
        else
           --  If none of the above, insert freeze node at the end of the current
           --  declarative part.
  
!          Insert_Freeze_Node_For_Instance (Inst_Node, F_Node);
        end if;
!    end Freeze_Subprogram_Body;
  
     ----------------
     -- Get_Gen_Id --
--- 9268,9282 ----
              Insert_After (Enc_G, Enc_G_F);
           end if;
  
!          Insert_Freeze_Node_For_Instance (N, F_Node);
  
        else
           --  If none of the above, insert freeze node at the end of the current
           --  declarative part.
  
!          Insert_Freeze_Node_For_Instance (N, F_Node);
        end if;
!    end Freeze_Subprogram_Instance;
  
     ----------------
     -- Get_Gen_Id --
*************** package body Sem_Ch12 is
*** 9532,9542 ****
       (N      : Node_Id;
        F_Node : Node_Id)
     is
-       Decl  : Node_Id;
-       Decls : List_Id;
-       Inst  : Entity_Id;
-       Par_N : Node_Id;
- 
        function Enclosing_Body (N : Node_Id) return Node_Id;
        --  Find enclosing package or subprogram body, if any. Freeze node may
        --  be placed at end of current declarative list if previous instance
--- 9638,9643 ----
*************** package body Sem_Ch12 is
*** 9595,10019 ****
           return Empty;
        end Previous_Instance;
  
!    --  Start of processing for Insert_Freeze_Node_For_Instance
! 
!    begin
!       if not Is_List_Member (F_Node) then
!          Decl  := N;
!          Decls := List_Containing (N);
!          Inst  := Entity (F_Node);
!          Par_N := Parent (Decls);
! 
!          --  When processing a subprogram instantiation, utilize the actual
!          --  subprogram instantiation rather than its package wrapper as it
!          --  carries all the context information.
! 
!          if Is_Wrapper_Package (Inst) then
!             Inst := Related_Instance (Inst);
!          end if;
! 
!          --  If this is a package instance, check whether the generic is
!          --  declared in a previous instance and the current instance is
!          --  not within the previous one.
! 
!          if Present (Generic_Parent (Parent (Inst)))
!            and then Is_In_Main_Unit (N)
!          then
!             declare
!                Enclosing_N : constant Node_Id := Enclosing_Body (N);
!                Par_I       : constant Entity_Id :=
!                                Previous_Instance
!                                  (Generic_Parent (Parent (Inst)));
!                Scop        : Entity_Id;
! 
!             begin
!                if Present (Par_I)
!                  and then Earlier (N, Freeze_Node (Par_I))
!                then
!                   Scop := Scope (Inst);
! 
!                   --  If the current instance is within the one that contains
!                   --  the generic, the freeze node for the current one must
!                   --  appear in the current declarative part. Ditto, if the
!                   --  current instance is within another package instance or
!                   --  within a body that does not enclose the current instance.
!                   --  In these three cases the freeze node of the previous
!                   --  instance is not relevant.
! 
!                   while Present (Scop) and then Scop /= Standard_Standard loop
!                      exit when Scop = Par_I
!                        or else
!                          (Is_Generic_Instance (Scop)
!                            and then Scope_Depth (Scop) > Scope_Depth (Par_I));
!                      Scop := Scope (Scop);
!                   end loop;
! 
!                   --  Previous instance encloses current instance
! 
!                   if Scop = Par_I then
!                      null;
! 
!                   --  If the next node is a source body we must freeze in
!                   --  the current scope as well.
! 
!                   elsif Present (Next (N))
!                     and then Nkind (Next (N)) in N_Subprogram_Body
!                                                | N_Package_Body
!                     and then Comes_From_Source (Next (N))
!                   then
!                      null;
! 
!                   --  Current instance is within an unrelated instance
! 
!                   elsif Is_Generic_Instance (Scop) then
!                      null;
! 
!                   --  Current instance is within an unrelated body
! 
!                   elsif Present (Enclosing_N)
!                     and then Enclosing_N /= Enclosing_Body (Par_I)
!                   then
!                      null;
! 
!                   else
!                      Insert_After (Freeze_Node (Par_I), F_Node);
!                      return;
!                   end if;
!                end if;
!             end;
!          end if;
! 
!          --  When the instantiation occurs in a package declaration, append the
!          --  freeze node to the private declarations (if any).
! 
!          if Nkind (Par_N) = N_Package_Specification
!            and then Decls = Visible_Declarations (Par_N)
!            and then Present (Private_Declarations (Par_N))
!            and then not Is_Empty_List (Private_Declarations (Par_N))
!          then
!             Decls := Private_Declarations (Par_N);
!             Decl  := First (Decls);
!          end if;
! 
!          --  Determine the proper freeze point of a package instantiation. We
!          --  adhere to the general rule of a package or subprogram body causing
!          --  freezing of anything before it in the same declarative region. In
!          --  this case, the proper freeze point of a package instantiation is
!          --  before the first source body which follows, or before a stub. This
!          --  ensures that entities coming from the instance are already frozen
!          --  and usable in source bodies.
  
!          if Nkind (Par_N) /= N_Package_Declaration
!            and then Ekind (Inst) = E_Package
!            and then Is_Generic_Instance (Inst)
!            and then
!              not In_Same_Source_Unit (Generic_Parent (Parent (Inst)), Inst)
!          then
!             while Present (Decl) loop
!                if (Nkind (Decl) in N_Unit_Body
!                      or else
!                    Nkind (Decl) in N_Body_Stub)
!                  and then Comes_From_Source (Decl)
!                then
!                   Insert_Before (Decl, F_Node);
!                   return;
!                end if;
  
!                Next (Decl);
!             end loop;
!          end if;
  
!          --  In a package declaration, or if no previous body, insert at end
!          --  of list.
  
!          Set_Sloc (F_Node, Sloc (Last (Decls)));
!          Insert_After (Last (Decls), F_Node);
        end if;
-    end Insert_Freeze_Node_For_Instance;
  
!    ------------------
!    -- Install_Body --
!    ------------------
! 
!    procedure Install_Body
!      (Act_Body : Node_Id;
!       N        : Node_Id;
!       Gen_Body : Node_Id;
!       Gen_Decl : Node_Id)
!    is
!       function In_Same_Scope (Gen_Id, Act_Id : Node_Id) return Boolean;
!       --  Check if the generic definition and the instantiation come from
!       --  a common scope, in which case the instance must be frozen after
!       --  the generic body.
  
!       function True_Sloc (N, Act_Unit : Node_Id) return Source_Ptr;
!       --  If the instance is nested inside a generic unit, the Sloc of the
!       --  instance indicates the place of the original definition, not the
!       --  point of the current enclosing instance. Pending a better usage of
!       --  Slocs to indicate instantiation places, we determine the place of
!       --  origin of a node by finding the maximum sloc of any ancestor node.
!       --  Why is this not equivalent to Top_Level_Location ???
  
!       -------------------
!       -- In_Same_Scope --
!       -------------------
  
!       function In_Same_Scope (Gen_Id, Act_Id : Node_Id) return Boolean is
!          Act_Scop : Entity_Id := Scope (Act_Id);
!          Gen_Scop : Entity_Id := Scope (Gen_Id);
  
!       begin
!          while Act_Scop /= Standard_Standard
!            and then Gen_Scop /= Standard_Standard
!          loop
!             if Act_Scop = Gen_Scop then
!                return True;
!             end if;
  
!             Act_Scop := Scope (Act_Scop);
!             Gen_Scop := Scope (Gen_Scop);
!          end loop;
  
!          return False;
!       end In_Same_Scope;
  
!       ---------------
!       -- True_Sloc --
!       ---------------
  
!       function True_Sloc (N, Act_Unit : Node_Id) return Source_Ptr is
!          N1  : Node_Id;
!          Res : Source_Ptr;
  
!       begin
!          Res := Sloc (N);
!          N1  := N;
!          while Present (N1) and then N1 /= Act_Unit loop
!             if Sloc (N1) > Res then
!                Res := Sloc (N1);
!             end if;
  
!             N1 := Parent (N1);
!          end loop;
  
!          return Res;
!       end True_Sloc;
  
!       Act_Id    : constant Entity_Id := Corresponding_Spec (Act_Body);
!       Act_Unit  : constant Node_Id   := Unit (Cunit (Get_Source_Unit (N)));
!       Gen_Id    : constant Entity_Id := Corresponding_Spec (Gen_Body);
!       Par       : constant Entity_Id := Scope (Gen_Id);
!       Gen_Unit  : constant Node_Id   :=
!                     Unit (Cunit (Get_Source_Unit (Gen_Decl)));
  
!       Body_Unit  : Node_Id;
!       F_Node     : Node_Id;
!       Must_Delay : Boolean;
!       Orig_Body  : Node_Id := Gen_Body;
  
!    --  Start of processing for Install_Body
  
!    begin
!       --  Handle first the case of an instance with incomplete actual types.
!       --  The instance body cannot be placed after the declaration because
!       --  full views have not been seen yet. Any use of the non-limited views
!       --  in the instance body requires the presence of a regular with_clause
!       --  in the enclosing unit, and will fail if this with_clause is missing.
!       --  We place the instance body at the beginning of the enclosing body,
!       --  which is the unit being compiled. The freeze node for the instance
!       --  is then placed after the instance body.
  
!       if not Is_Empty_Elmt_List (Incomplete_Actuals (Act_Id))
!         and then Expander_Active
!         and then Ekind (Scope (Act_Id)) = E_Package
!       then
!          declare
!             Scop    : constant Entity_Id := Scope (Act_Id);
!             Body_Id : constant Node_Id :=
!                          Corresponding_Body (Unit_Declaration_Node (Scop));
  
!          begin
!             Ensure_Freeze_Node (Act_Id);
!             F_Node := Freeze_Node (Act_Id);
!             if Present (Body_Id) then
!                Set_Is_Frozen (Act_Id, False);
!                Prepend (Act_Body, Declarations (Parent (Body_Id)));
!                if Is_List_Member (F_Node) then
!                   Remove (F_Node);
                 end if;
- 
-                Insert_After (Act_Body, F_Node);
              end if;
           end;
-          return;
        end if;
  
!       --  If the body is a subunit, the freeze point is the corresponding stub
!       --  in the current compilation, not the subunit itself.
! 
!       if Nkind (Parent (Gen_Body)) = N_Subunit then
!          Orig_Body := Corresponding_Stub (Parent (Gen_Body));
!       else
!          Orig_Body := Gen_Body;
!       end if;
! 
!       Body_Unit := Unit (Cunit (Get_Source_Unit (Orig_Body)));
! 
!       --  If the instantiation and the generic definition appear in the same
!       --  package declaration, this is an early instantiation. If they appear
!       --  in the same declarative part, it is an early instantiation only if
!       --  the generic body appears textually later, and the generic body is
!       --  also in the main unit.
! 
!       --  If instance is nested within a subprogram, and the generic body
!       --  is not, the instance is delayed because the enclosing body is. If
!       --  instance and body are within the same scope, or the same subprogram
!       --  body, indicate explicitly that the instance is delayed.
! 
!       Must_Delay :=
!         (Gen_Unit = Act_Unit
!           and then (Nkind (Gen_Unit) in N_Generic_Package_Declaration
!                                       | N_Package_Declaration
!                      or else (Gen_Unit = Body_Unit
!                                and then True_Sloc (N, Act_Unit) <
!                                           Sloc (Orig_Body)))
!           and then Is_In_Main_Unit (Original_Node (Gen_Unit))
!           and then In_Same_Scope (Gen_Id, Act_Id));
! 
!       --  If this is an early instantiation, the freeze node is placed after
!       --  the generic body. Otherwise, if the generic appears in an instance,
!       --  we cannot freeze the current instance until the outer one is frozen.
!       --  This is only relevant if the current instance is nested within some
!       --  inner scope not itself within the outer instance. If this scope is
!       --  a package body in the same declarative part as the outer instance,
!       --  then that body needs to be frozen after the outer instance. Finally,
!       --  if no delay is needed, we place the freeze node at the end of the
!       --  current declarative part.
! 
!       if Expander_Active
!         and then (No (Freeze_Node (Act_Id))
!                    or else not Is_List_Member (Freeze_Node (Act_Id)))
!       then
!          Ensure_Freeze_Node (Act_Id);
!          F_Node := Freeze_Node (Act_Id);
! 
!          if Must_Delay then
!             Insert_After (Orig_Body, F_Node);
! 
!          elsif Is_Generic_Instance (Par)
!            and then Present (Freeze_Node (Par))
!            and then Scope (Act_Id) /= Par
!          then
!             --  Freeze instance of inner generic after instance of enclosing
!             --  generic.
! 
!             if In_Same_Declarative_Part (Parent (Freeze_Node (Par)), N) then
! 
!                --  Handle the following case:
! 
!                --    package Parent_Inst is new ...
!                --    Parent_Inst []
! 
!                --    procedure P ...  --  this body freezes Parent_Inst
! 
!                --    package Inst is new ...
! 
!                --  In this particular scenario, the freeze node for Inst must
!                --  be inserted in the same manner as that of Parent_Inst,
!                --  before the next source body or at the end of the declarative
!                --  list (body not available). If body P did not exist and
!                --  Parent_Inst was frozen after Inst, either by a body
!                --  following Inst or at the end of the declarative region,
!                --  the freeze node for Inst must be inserted after that of
!                --  Parent_Inst. This relation is established by comparing
!                --  the Slocs of Parent_Inst freeze node and Inst.
!                --  We examine the parents of the enclosing lists to handle
!                --  the case where the parent instance is in the visible part
!                --  of a package declaration, and the inner instance is in
!                --  the corresponding private part.
  
!                if Parent (List_Containing (Get_Unit_Instantiation_Node (Par)))
!                     = Parent (List_Containing (N))
!                  and then Sloc (Freeze_Node (Par)) <= Sloc (N)
!                then
!                   Insert_Freeze_Node_For_Instance (N, F_Node);
!                else
!                   Insert_After (Freeze_Node (Par), F_Node);
!                end if;
  
!             --  Freeze package enclosing instance of inner generic after
!             --  instance of enclosing generic.
  
!             elsif Nkind (Parent (N)) in N_Package_Body | N_Subprogram_Body
!               and then In_Same_Declarative_Part
!                          (Parent (Freeze_Node (Par)), Parent (N))
              then
!                declare
!                   Enclosing :  Entity_Id;
  
!                begin
!                   Enclosing := Corresponding_Spec (Parent (N));
  
!                   if No (Enclosing) then
!                      Enclosing := Defining_Entity (Parent (N));
                    end if;
  
!                   Insert_Freeze_Node_For_Instance (N, F_Node);
!                   Ensure_Freeze_Node (Enclosing);
! 
!                   if not Is_List_Member (Freeze_Node (Enclosing)) then
! 
!                      --  The enclosing context is a subunit, insert the freeze
!                      --  node after the stub.
! 
!                      if Nkind (Parent (Parent (N))) = N_Subunit then
!                         Insert_Freeze_Node_For_Instance
!                           (Corresponding_Stub (Parent (Parent (N))),
!                            Freeze_Node (Enclosing));
  
!                      --  The enclosing context is a package with a stub body
!                      --  which has already been replaced by the real body.
!                      --  Insert the freeze node after the actual body.
  
!                      elsif Ekind (Enclosing) = E_Package
!                        and then Present (Body_Entity (Enclosing))
!                        and then Was_Originally_Stub
!                                   (Parent (Body_Entity (Enclosing)))
!                      then
!                         Insert_Freeze_Node_For_Instance
!                           (Parent (Body_Entity (Enclosing)),
!                            Freeze_Node (Enclosing));
  
!                      --  The parent instance has been frozen before the body of
!                      --  the enclosing package, insert the freeze node after
!                      --  the body.
  
!                      elsif In_Same_List (Freeze_Node (Par), Parent (N))
!                        and then Sloc (Freeze_Node (Par)) < Sloc (Parent (N))
!                      then
!                         Insert_Freeze_Node_For_Instance
!                           (Parent (N), Freeze_Node (Enclosing));
  
!                      else
!                         Insert_After
!                           (Freeze_Node (Par), Freeze_Node (Enclosing));
!                      end if;
!                   end if;
!                end;
  
              else
!                Insert_Freeze_Node_For_Instance (N, F_Node);
              end if;
! 
!          else
!             Insert_Freeze_Node_For_Instance (N, F_Node);
!          end if;
        end if;
  
!       Set_Is_Frozen (Act_Id);
!       Insert_Before (N, Act_Body);
!       Mark_Rewrite_Insertion (Act_Body);
!    end Install_Body;
  
     -----------------------------
     -- Install_Formal_Packages --
--- 9696,9887 ----
           return Empty;
        end Previous_Instance;
  
!       --  Local variables
  
!       Decl     : Node_Id;
!       Decls    : List_Id;
!       Inst     : Entity_Id;
!       Origin   : Entity_Id;
!       Par_Inst : Node_Id;
!       Par_N    : Node_Id;
  
!    --  Start of processing for Insert_Freeze_Node_For_Instance
  
!    begin
!       --  Nothing to do if the freeze node has already been inserted
  
!       if Is_List_Member (F_Node) then
!          return;
        end if;
  
!       Inst := Entity (F_Node);
  
!       --  When processing a subprogram instantiation, utilize the actual
!       --  subprogram instantiation rather than its package wrapper as it
!       --  carries all the context information.
  
!       if Is_Wrapper_Package (Inst) then
!          Inst := Related_Instance (Inst);
!       end if;
  
!       Par_Inst := Parent (Inst);
  
!       --  If this is a package instance, check whether the generic is declared
!       --  in a previous instance and the current instance is not within the
!       --  previous one.
  
!       if Present (Generic_Parent (Par_Inst)) and then Is_In_Main_Unit (N) then
!          declare
!             Enclosing_N : constant Node_Id   := Enclosing_Body (N);
!             Par_I       : constant Entity_Id :=
!                             Previous_Instance (Generic_Parent (Par_Inst));
!             Scop        : Entity_Id;
  
!          begin
!             if Present (Par_I) and then Earlier (N, Freeze_Node (Par_I)) then
!                Scop := Scope (Inst);
  
!                --  If the current instance is within the one that contains
!                --  the generic, the freeze node for the current one must
!                --  appear in the current declarative part. Ditto, if the
!                --  current instance is within another package instance or
!                --  within a body that does not enclose the current instance.
!                --  In these three cases the freeze node of the previous
!                --  instance is not relevant.
  
!                while Present (Scop) and then Scop /= Standard_Standard loop
!                   exit when Scop = Par_I
!                     or else
!                       (Is_Generic_Instance (Scop)
!                         and then Scope_Depth (Scop) > Scope_Depth (Par_I));
!                   Scop := Scope (Scop);
!                end loop;
  
!                --  Previous instance encloses current instance
  
!                if Scop = Par_I then
!                   null;
  
!                --  If the next node is a source body we must freeze in the
!                --  current scope as well.
  
!                elsif Present (Next (N))
!                  and then Nkind (Next (N)) in N_Subprogram_Body
!                                             | N_Package_Body
!                  and then Comes_From_Source (Next (N))
!                then
!                   null;
  
!                --  Current instance is within an unrelated instance
  
!                elsif Is_Generic_Instance (Scop) then
!                   null;
  
!                --  Current instance is within an unrelated body
  
!                elsif Present (Enclosing_N)
!                  and then Enclosing_N /= Enclosing_Body (Par_I)
!                then
!                   null;
  
!                else
!                   Insert_After (Freeze_Node (Par_I), F_Node);
!                   return;
                 end if;
              end if;
           end;
        end if;
  
!       Decl   := N;
!       Decls  := List_Containing (N);
!       Par_N  := Parent (Decls);
!       Origin := Empty;
  
!       --  Determine the proper freeze point of an instantiation
  
!       if Is_Generic_Instance (Inst) then
!          loop
!             --  When the instantiation occurs in a package spec, append the
!             --  freeze node to the private declarations (if any).
  
!             if Nkind (Par_N) = N_Package_Specification
!               and then Decls = Visible_Declarations (Par_N)
!               and then not Is_Empty_List (Private_Declarations (Par_N))
              then
!                Decls := Private_Declarations (Par_N);
!                Decl  := First (Decls);
!             end if;
  
!             --  We adhere to the general rule of a package or subprogram body
!             --  causing freezing of anything before it in the same declarative
!             --  region. In this respect, the proper freeze point of a package
!             --  instantiation is before the first source body which follows, or
!             --  before a stub. This ensures that entities from the instance are
!             --  already frozen and therefore usable in source bodies.
  
!             if Nkind (Par_N) /= N_Package_Declaration
!               and then
!                 not In_Same_Source_Unit (Generic_Parent (Par_Inst), Inst)
!             then
!                while Present (Decl) loop
!                   if ((Nkind (Decl) in N_Unit_Body
!                         or else
!                        Nkind (Decl) in N_Body_Stub)
!                       and then Comes_From_Source (Decl))
!                     or else (Present (Origin)
!                               and then Nkind (Decl) in N_Generic_Instantiation
!                               and then Instance_Spec (Decl) /= Origin)
!                   then
!                      Set_Sloc (F_Node, Sloc (Decl));
!                      Insert_Before (Decl, F_Node);
!                      return;
                    end if;
  
!                   Next (Decl);
!                end loop;
!             end if;
  
!             --  When the instantiation occurs in a package spec and there is
!             --  no source body which follows, and the package has a body but
!             --  is delayed, then insert immediately before its freeze node.
  
!             if Nkind (Par_N) = N_Package_Specification
!               and then Present (Corresponding_Body (Parent (Par_N)))
!               and then Present (Freeze_Node (Defining_Entity (Par_N)))
!             then
!                Set_Sloc (F_Node, Sloc (Freeze_Node (Defining_Entity (Par_N))));
!                Insert_Before (Freeze_Node (Defining_Entity (Par_N)), F_Node);
!                return;
  
!             --  When the instantiation occurs in a package spec and there is
!             --  no source body which follows, not even of the package itself,
!             --  then insert into the declaration list of the outer level, but
!             --  do not jump over following instantiations in this list because
!             --  they may have a body that has not materialized yet, see above.
  
!             elsif Nkind (Par_N) = N_Package_Specification
!               and then No (Corresponding_Body (Parent (Par_N)))
!               and then Is_List_Member (Parent (Par_N))
!             then
!                Decl   := Parent (Par_N);
!                Decls  := List_Containing (Decl);
!                Par_N  := Parent (Decls);
!                Origin := Decl;
  
!             --  In a package declaration, or if no source body which follows
!             --  and at library level, then insert at end of list.
  
              else
!                exit;
              end if;
!          end loop;
        end if;
  
!       --  Insert and adjust the Sloc of the freeze node
! 
!       Set_Sloc (F_Node, Sloc (Last (Decls)));
!       Insert_After (Last (Decls), F_Node);
!    end Insert_Freeze_Node_For_Instance;
  
     -----------------------------
     -- Install_Formal_Packages --
*************** package body Sem_Ch12 is
*** 10041,10047 ****
           then
              --  If this is the renaming for the parent instance, done
  
!             if Renamed_Object (E) = Par then
                 exit;
  
              --  The visibility of a formal of an enclosing generic is already
--- 9909,9915 ----
           then
              --  If this is the renaming for the parent instance, done
  
!             if Renamed_Entity (E) = Par then
                 exit;
  
              --  The visibility of a formal of an enclosing generic is already
*************** package body Sem_Ch12 is
*** 10051,10057 ****
                 null;
  
              elsif Present (Associated_Formal_Package (E)) then
!                Check_Generic_Actuals (Renamed_Object (E), True);
                 Set_Is_Hidden (E, False);
  
                 --  Find formal package in generic unit that corresponds to
--- 9919,9925 ----
                 null;
  
              elsif Present (Associated_Formal_Package (E)) then
!                Check_Generic_Actuals (Renamed_Entity (E), True);
                 Set_Is_Hidden (E, False);
  
                 --  Find formal package in generic unit that corresponds to
*************** package body Sem_Ch12 is
*** 10480,10486 ****
           Formal_Ent  : Entity_Id;
           Actual_Ent  : Entity_Id)
        is
!          Act_Pkg   : Entity_Id;
  
        begin
           Set_Instance_Of (Formal_Ent, Actual_Ent);
--- 10348,10354 ----
           Formal_Ent  : Entity_Id;
           Actual_Ent  : Entity_Id)
        is
!          Act_Pkg : Entity_Id;
  
        begin
           Set_Instance_Of (Formal_Ent, Actual_Ent);
*************** package body Sem_Ch12 is
*** 10661,10668 ****
           --  The actual may be a renamed package, or an outer generic formal
           --  package whose instantiation is converted into a renaming.
  
!          if Present (Renamed_Object (Actual_Pack)) then
!             Actual_Pack := Renamed_Object (Actual_Pack);
           end if;
  
           if Nkind (Analyzed_Formal) = N_Formal_Package_Declaration then
--- 10529,10536 ----
           --  The actual may be a renamed package, or an outer generic formal
           --  package whose instantiation is converted into a renaming.
  
!          if Present (Renamed_Entity (Actual_Pack)) then
!             Actual_Pack := Renamed_Entity (Actual_Pack);
           end if;
  
           if Nkind (Analyzed_Formal) = N_Formal_Package_Declaration then
*************** package body Sem_Ch12 is
*** 10872,10878 ****
  
              begin
                 Set_Is_Internal (I_Pack);
!                Set_Ekind (I_Pack, E_Package);
                 Set_Hidden_In_Formal_Instance (I_Pack, Hidden_Formals);
  
                 Append_To (Decls,
--- 10740,10746 ----
  
              begin
                 Set_Is_Internal (I_Pack);
!                Mutate_Ekind (I_Pack, E_Package);
                 Set_Hidden_In_Formal_Instance (I_Pack, Hidden_Formals);
  
                 Append_To (Decls,
*************** package body Sem_Ch12 is
*** 10998,11015 ****
        --  constructed wrapper contains a call to the entity in the renaming.
        --  This is an expansion activity, as is the wrapper creation.
  
!       if Ada_Version >= Ada_2020
          and then Has_Contracts (Analyzed_Formal)
          and then not Is_Entity_Name (Actual)
          and then Expander_Active
        then
           New_Subp := Make_Temporary (Sloc (Actual), 'S');
-          Set_Defining_Unit_Name (New_Spec, New_Subp);
        else
           New_Subp := Make_Defining_Identifier (Loc, Chars (Formal_Sub));
        end if;
  
!       Set_Ekind (New_Subp, Ekind (Analyzed_S));
        Set_Is_Generic_Actual_Subprogram (New_Subp);
        Set_Defining_Unit_Name (New_Spec, New_Subp);
  
--- 10866,10882 ----
        --  constructed wrapper contains a call to the entity in the renaming.
        --  This is an expansion activity, as is the wrapper creation.
  
!       if Ada_Version >= Ada_2022
          and then Has_Contracts (Analyzed_Formal)
          and then not Is_Entity_Name (Actual)
          and then Expander_Active
        then
           New_Subp := Make_Temporary (Sloc (Actual), 'S');
        else
           New_Subp := Make_Defining_Identifier (Loc, Chars (Formal_Sub));
        end if;
  
!       Mutate_Ekind (New_Subp, Ekind (Analyzed_S));
        Set_Is_Generic_Actual_Subprogram (New_Subp);
        Set_Defining_Unit_Name (New_Spec, New_Subp);
  
*************** package body Sem_Ch12 is
*** 11097,11103 ****
                 Make_Handled_Sequence_Of_Statements (Loc,
                   Statements => New_List (Make_Null_Statement (Loc))));
  
!          --  RM 12.6 (16 2/2): The procedure has convention Intrinsic
  
           Set_Convention (Defining_Unit_Name (New_Spec), Convention_Intrinsic);
  
--- 10964,10970 ----
                 Make_Handled_Sequence_Of_Statements (Loc,
                   Statements => New_List (Make_Null_Statement (Loc))));
  
!          --  RM 12.6 (16.2/2): The procedure has convention Intrinsic
  
           Set_Convention (Defining_Unit_Name (New_Spec), Convention_Intrinsic);
  
*************** package body Sem_Ch12 is
*** 11106,11111 ****
--- 10973,11012 ----
           Set_Is_Inlined (Defining_Unit_Name (New_Spec));
           return Decl_Node;
  
+       --  Handle case of a formal function with an expression default (allowed
+       --  when extensions are enabled).
+ 
+       elsif Nkind (Specification (Formal)) = N_Function_Specification
+         and then Present (Expression (Formal))
+       then
+          --  Generate body for function, for use in the instance
+ 
+          declare
+             Expr : constant Node_Id := New_Copy (Expression (Formal));
+             Stmt : constant Node_Id := Make_Simple_Return_Statement (Loc);
+          begin
+             Set_Sloc (Expr, Loc);
+             Set_Expression (Stmt, Expr);
+ 
+             Decl_Node :=
+               Make_Subprogram_Body (Loc,
+                 Specification              => New_Spec,
+                 Declarations               => New_List,
+                 Handled_Statement_Sequence =>
+                   Make_Handled_Sequence_Of_Statements (Loc,
+                     Statements => New_List (Stmt)));
+          end;
+ 
+          --  RM 12.6 (16.2/2): Like a null procedure default, the function
+          --  has convention Intrinsic.
+ 
+          Set_Convention (Defining_Unit_Name (New_Spec), Convention_Intrinsic);
+ 
+          --  Inline calls to it when optimization is enabled
+ 
+          Set_Is_Inlined (Defining_Unit_Name (New_Spec));
+          return Decl_Node;
+ 
        else
           Error_Msg_Sloc := Sloc (Scope (Analyzed_S));
           Error_Msg_NE
*************** package body Sem_Ch12 is
*** 11228,11234 ****
        A_Gen_Obj   : constant Entity_Id  :=
                        Defining_Identifier (Analyzed_Formal);
        Acc_Def     : Node_Id             := Empty;
!       Act_Assoc   : constant Node_Id    := Parent (Actual);
        Actual_Decl : Node_Id             := Empty;
        Decl_Node   : Node_Id;
        Def         : Node_Id;
--- 11129,11136 ----
        A_Gen_Obj   : constant Entity_Id  :=
                        Defining_Identifier (Analyzed_Formal);
        Acc_Def     : Node_Id             := Empty;
!       Act_Assoc   : constant Node_Id    :=
!         (if No (Actual) then Empty else Parent (Actual));
        Actual_Decl : Node_Id             := Empty;
        Decl_Node   : Node_Id;
        Def         : Node_Id;
*************** package body Sem_Ch12 is
*** 11259,11265 ****
           Error_Msg_N ("duplicate instantiation of generic parameter", Actual);
        end if;
  
!       Set_Parent (List, Parent (Actual));
  
        --  OUT present
  
--- 11161,11167 ----
           Error_Msg_N ("duplicate instantiation of generic parameter", Actual);
        end if;
  
!       Set_Parent (List, Act_Assoc);
  
        --  OUT present
  
*************** package body Sem_Ch12 is
*** 11403,11416 ****
                 Actual, Gen_Obj);
              Error_Msg_N ("\with atomic object actual (RM C.6(12))", Actual);
  
!          elsif Is_Volatile_Object (Actual) and then not Is_Volatile (Orig_Ftyp)
           then
              Error_Msg_NE
                ("cannot instantiate nonvolatile formal & of mode in out",
                 Actual, Gen_Obj);
              Error_Msg_N ("\with volatile object actual (RM C.6(12))", Actual);
  
!          elsif Is_Volatile_Full_Access_Object (Actual)
             and then not Is_Volatile_Full_Access (Orig_Ftyp)
           then
              Error_Msg_NE
--- 11305,11319 ----
                 Actual, Gen_Obj);
              Error_Msg_N ("\with atomic object actual (RM C.6(12))", Actual);
  
!          elsif Is_Volatile_Object_Ref (Actual)
!            and then not Is_Volatile (Orig_Ftyp)
           then
              Error_Msg_NE
                ("cannot instantiate nonvolatile formal & of mode in out",
                 Actual, Gen_Obj);
              Error_Msg_N ("\with volatile object actual (RM C.6(12))", Actual);
  
!          elsif Is_Volatile_Full_Access_Object_Ref (Actual)
             and then not Is_Volatile_Full_Access (Orig_Ftyp)
           then
              Error_Msg_NE
*************** package body Sem_Ch12 is
*** 11421,11429 ****
           end if;
  
           --  Check for instantiation on nonatomic subcomponent of a full access
!          --  object in Ada 2020 (RM C.6 (12)).
  
!          if Ada_Version >= Ada_2020
              and then Is_Subcomponent_Of_Full_Access_Object (Actual)
              and then not Is_Atomic_Object (Actual)
           then
--- 11324,11332 ----
           end if;
  
           --  Check for instantiation on nonatomic subcomponent of a full access
!          --  object in Ada 2022 (RM C.6 (12)).
  
!          if Ada_Version >= Ada_2022
              and then Is_Subcomponent_Of_Full_Access_Object (Actual)
              and then not Is_Atomic_Object (Actual)
           then
*************** package body Sem_Ch12 is
*** 11623,11629 ****
           end if;
        end if;
  
!       if Nkind (Actual) in N_Has_Entity then
           Actual_Decl := Parent (Entity (Actual));
        end if;
  
--- 11526,11534 ----
           end if;
        end if;
  
!       if Nkind (Actual) in N_Has_Entity
!         and then Present (Entity (Actual))
!       then
           Actual_Decl := Parent (Entity (Actual));
        end if;
  
*************** package body Sem_Ch12 is
*** 11756,11762 ****
  
                 while Present (Actual) loop
                    exit when Ekind (Actual) = E_Package
!                     and then Present (Renamed_Object (Actual));
  
                    if Chars (Actual) = Chars (Formal)
                      and then not Is_Scalar_Type (Actual)
--- 11661,11667 ----
  
                 while Present (Actual) loop
                    exit when Ekind (Actual) = E_Package
!                     and then Present (Renamed_Entity (Actual));
  
                    if Chars (Actual) = Chars (Formal)
                      and then not Is_Scalar_Type (Actual)
*************** package body Sem_Ch12 is
*** 12164,12170 ****
                 --  for the elaboration subprogram).
  
                 if Nkind (Defining_Unit_Name (Act_Spec)) =
!                                               N_Defining_Program_Unit_Name
                 then
                    Set_Scope (Defining_Entity (Inst_Node), Scope (Act_Decl_Id));
                 end if;
--- 12069,12075 ----
                 --  for the elaboration subprogram).
  
                 if Nkind (Defining_Unit_Name (Act_Spec)) =
!                                                    N_Defining_Program_Unit_Name
                 then
                    Set_Scope (Defining_Entity (Inst_Node), Scope (Act_Decl_Id));
                 end if;
*************** package body Sem_Ch12 is
*** 12173,12183 ****
           --  Case where instantiation is not a library unit
  
           else
!             --  If this is an early instantiation, i.e. appears textually
!             --  before the corresponding body and must be elaborated first,
!             --  indicate that the body instance is to be delayed.
  
!             Install_Body (Act_Body, Inst_Node, Gen_Body, Gen_Decl);
  
              --  If the instantiation appears within a generic child package
              --  enable visibility of current instance of enclosing generic
--- 12078,12130 ----
           --  Case where instantiation is not a library unit
  
           else
!             --  Handle the case of an instance with incomplete actual types.
!             --  The instance body cannot be placed just after the declaration
!             --  because full views have not been seen yet. Any use of the non-
!             --  limited views in the instance body requires the presence of a
!             --  regular with_clause in the enclosing unit. Therefore we place
!             --  the instance body at the beginning of the enclosing body, and
!             --  the freeze node for the instance is then placed after the body.
  
!             if not Is_Empty_Elmt_List (Incomplete_Actuals (Act_Decl_Id))
!               and then Ekind (Scope (Act_Decl_Id)) = E_Package
!             then
!                declare
!                   Scop    : constant Entity_Id := Scope (Act_Decl_Id);
!                   Body_Id : constant Node_Id :=
!                     Corresponding_Body (Unit_Declaration_Node (Scop));
! 
!                   F_Node  : Node_Id;
! 
!                begin
!                   pragma Assert (Present (Body_Id));
! 
!                   Prepend (Act_Body, Declarations (Parent (Body_Id)));
! 
!                   if Expander_Active then
!                      Ensure_Freeze_Node (Act_Decl_Id);
!                      F_Node := Freeze_Node (Act_Decl_Id);
!                      Set_Is_Frozen (Act_Decl_Id, False);
!                      if Is_List_Member (F_Node) then
!                         Remove (F_Node);
!                      end if;
! 
!                      Insert_After (Act_Body, F_Node);
!                   end if;
!                end;
! 
!             else
!                Insert_Before (Inst_Node, Act_Body);
!                Mark_Rewrite_Insertion (Act_Body);
! 
!                --  Insert the freeze node for the instance if need be
! 
!                if Expander_Active then
!                   Freeze_Package_Instance
!                     (Inst_Node, Gen_Body, Gen_Decl, Act_Decl_Id);
!                   Set_Is_Frozen (Act_Decl_Id);
!                end if;
!             end if;
  
              --  If the instantiation appears within a generic child package
              --  enable visibility of current instance of enclosing generic
*************** package body Sem_Ch12 is
*** 12538,12548 ****
           else
              Insert_Before (Inst_Node, Pack_Body);
              Mark_Rewrite_Insertion (Pack_Body);
!             Analyze (Pack_Body);
  
              if Expander_Active then
!                Freeze_Subprogram_Body (Inst_Node, Gen_Body, Pack_Id);
              end if;
           end if;
  
           Inherit_Context (Gen_Body, Inst_Node);
--- 12485,12498 ----
           else
              Insert_Before (Inst_Node, Pack_Body);
              Mark_Rewrite_Insertion (Pack_Body);
! 
!             --  Insert the freeze node for the instance if need be
  
              if Expander_Active then
!                Freeze_Subprogram_Instance (Inst_Node, Gen_Body, Pack_Id);
              end if;
+ 
+             Analyze (Pack_Body);
           end if;
  
           Inherit_Context (Gen_Body, Inst_Node);
*************** package body Sem_Ch12 is
*** 12563,12571 ****
        --  errors, this may be an instance whose scope is a premature instance.
        --  In that case we must insure that the (legal) program does raise
        --  program error if executed. We generate a subprogram body for this
!       --  purpose. See DEC ac30vso.
! 
!       --  Should not reference proprietary DEC tests in comments ???
  
        elsif Serious_Errors_Detected = 0
          and then Nkind (Parent (Inst_Node)) /= N_Compilation_Unit
--- 12513,12519 ----
        --  errors, this may be an instance whose scope is a premature instance.
        --  In that case we must insure that the (legal) program does raise
        --  program error if executed. We generate a subprogram body for this
!       --  purpose.
  
        elsif Serious_Errors_Detected = 0
          and then Nkind (Parent (Inst_Node)) /= N_Compilation_Unit
*************** package body Sem_Ch12 is
*** 12667,12673 ****
        Subt       : Entity_Id;
  
        procedure Check_Shared_Variable_Control_Aspects;
!       --  Ada 2020: Verify that shared variable control aspects (RM C.6)
        --  that may be specified for a formal type are obeyed by the actual.
  
        procedure Diagnose_Predicated_Actual;
--- 12615,12621 ----
        Subt       : Entity_Id;
  
        procedure Check_Shared_Variable_Control_Aspects;
!       --  Ada 2022: Verify that shared variable control aspects (RM C.6)
        --  that may be specified for a formal type are obeyed by the actual.
  
        procedure Diagnose_Predicated_Actual;
*************** package body Sem_Ch12 is
*** 12677,12682 ****
--- 12625,12635 ----
        --  declaration, it carries the flag No_Predicate_On_Actual. it is part
        --  of the generic contract that the actual cannot have predicates.
  
+       function Subtypes_Match (Gen_T, Act_T : Entity_Id) return Boolean;
+       --  Check that base types are the same and that the subtypes match
+       --  statically. Used in several of the validation subprograms for
+       --  actuals in instantiations.
+ 
        procedure Validate_Array_Type_Instance;
        procedure Validate_Access_Subprogram_Instance;
        procedure Validate_Access_Type_Instance;
*************** package body Sem_Ch12 is
*** 12690,12704 ****
        --  Validate_Discriminated_Formal_Type is shared by formal private
        --  types and Ada 2012 formal incomplete types.
  
-       function Subtypes_Match (Gen_T, Act_T : Entity_Id) return Boolean;
-       --  Check that base types are the same and that the subtypes match
-       --  statically. Used in several of the above.
- 
        --------------------------------------------
        --  Check_Shared_Variable_Control_Aspects --
        --------------------------------------------
  
!       --  Ada 2020: Verify that shared variable control aspects (RM C.6)
        --  that may be specified for the formal are obeyed by the actual.
        --  If the formal is a derived type the aspect specifications must match.
        --  NOTE: AI12-0282 implies that matching of aspects is required between
--- 12643,12653 ----
        --  Validate_Discriminated_Formal_Type is shared by formal private
        --  types and Ada 2012 formal incomplete types.
  
        --------------------------------------------
        --  Check_Shared_Variable_Control_Aspects --
        --------------------------------------------
  
!       --  Ada 2022: Verify that shared variable control aspects (RM C.6)
        --  that may be specified for the formal are obeyed by the actual.
        --  If the formal is a derived type the aspect specifications must match.
        --  NOTE: AI12-0282 implies that matching of aspects is required between
*************** package body Sem_Ch12 is
*** 12709,12715 ****
  
        procedure Check_Shared_Variable_Control_Aspects is
        begin
!          if Ada_Version >= Ada_2020 then
              if Is_Atomic (A_Gen_T) and then not Is_Atomic (Act_T) then
                 Error_Msg_NE
                    ("actual for& must have Atomic aspect", Actual, A_Gen_T);
--- 12658,12664 ----
  
        procedure Check_Shared_Variable_Control_Aspects is
        begin
!          if Ada_Version >= Ada_2022 then
              if Is_Atomic (A_Gen_T) and then not Is_Atomic (Act_T) then
                 Error_Msg_NE
                    ("actual for& must have Atomic aspect", Actual, A_Gen_T);
*************** package body Sem_Ch12 is
*** 12792,12798 ****
              Check_Volatility_Compatibility
                (Act_T, A_Gen_T,
                 "actual type", "its corresponding formal type",
!                Srcpos_Bearer => Act_T);
           end if;
        end Check_Shared_Variable_Control_Aspects;
  
--- 12741,12747 ----
              Check_Volatility_Compatibility
                (Act_T, A_Gen_T,
                 "actual type", "its corresponding formal type",
!                Srcpos_Bearer => Actual);
           end if;
        end Check_Shared_Variable_Control_Aspects;
  
*************** package body Sem_Ch12 is
*** 12827,12833 ****
           T : constant Entity_Id := Get_Instance_Of (Gen_T);
  
        begin
!          --  Some detailed comments would be useful here ???
  
           return ((Base_Type (T) = Act_T
                     or else Base_Type (T) = Base_Type (Act_T))
--- 12776,12784 ----
           T : constant Entity_Id := Get_Instance_Of (Gen_T);
  
        begin
!          --  Check that the base types, root types (when dealing with class
!          --  wide types), or designated types (when dealing with anonymous
!          --  access types) of Gen_T and Act_T are statically matching subtypes.
  
           return ((Base_Type (T) = Act_T
                     or else Base_Type (T) = Base_Type (Act_T))
*************** package body Sem_Ch12 is
*** 12839,12847 ****
                                  (Get_Instance_Of (Root_Type (Gen_T)),
                                   Root_Type (Act_T)))
  
!            or else
!              (Ekind (Gen_T) in E_Anonymous_Access_Subprogram_Type
!                              | E_Anonymous_Access_Type
                 and then Ekind (Act_T) = Ekind (Gen_T)
                 and then Subtypes_Statically_Match
                            (Designated_Type (Gen_T), Designated_Type (Act_T)));
--- 12790,12796 ----
                                  (Get_Instance_Of (Root_Type (Gen_T)),
                                   Root_Type (Act_T)))
  
!            or else (Is_Anonymous_Access_Type (Gen_T)
                 and then Ekind (Act_T) = Ekind (Gen_T)
                 and then Subtypes_Statically_Match
                            (Designated_Type (Gen_T), Designated_Type (Act_T)));
*************** package body Sem_Ch12 is
*** 13008,13014 ****
  
              while Present (Index) loop
                 Num := Num + 1;
!                Next_Index (Index);
              end loop;
  
              return Num;
--- 12957,12963 ----
  
              while Present (Index) loop
                 Num := Num + 1;
!                Next (Index);
              end loop;
  
              return Num;
*************** package body Sem_Ch12 is
*** 13399,13405 ****
           --  Perform atomic/volatile checks (RM C.6(12)). Note that AI05-0218-1
           --  removes the second instance of the phrase "or allow pass by copy".
  
!          --  For Ada 2020, the aspect may be specified explicitly for the
           --  formal regardless of whether an ancestor obeys it.
  
           if Is_Atomic (Act_T)
--- 13348,13354 ----
           --  Perform atomic/volatile checks (RM C.6(12)). Note that AI05-0218-1
           --  removes the second instance of the phrase "or allow pass by copy".
  
!          --  For Ada 2022, the aspect may be specified explicitly for the
           --  formal regardless of whether an ancestor obeys it.
  
           if Is_Atomic (Act_T)
*************** package body Sem_Ch12 is
*** 13682,13689 ****
                                      exit;
                                   end if;
  
!                                  Next_Entity (Anc_Formal);
!                                  Next_Entity (Act_Formal);
                                end loop;
  
                                --  If we traversed through all of the formals
--- 13631,13638 ----
                                      exit;
                                   end if;
  
!                                  Next_Formal (Anc_Formal);
!                                  Next_Formal (Act_Formal);
                                end loop;
  
                                --  If we traversed through all of the formals
*************** package body Sem_Ch12 is
*** 13828,13836 ****
                 Actual_Discr := First_Discriminant (Act_T);
                 while Formal_Discr /= Empty loop
                    if Actual_Discr = Empty then
!                      Error_Msg_NE
                         ("discriminants on actual do not match formal",
!                         Actual, Gen_T);
                       Abandon_Instantiation (Actual);
                    end if;
  
--- 13777,13785 ----
                 Actual_Discr := First_Discriminant (Act_T);
                 while Formal_Discr /= Empty loop
                    if Actual_Discr = Empty then
!                      Error_Msg_N
                         ("discriminants on actual do not match formal",
!                         Actual);
                       Abandon_Instantiation (Actual);
                    end if;
  
*************** package body Sem_Ch12 is
*** 13851,13868 ****
                    elsif Base_Type (Formal_Subt) /=
                            Base_Type (Etype (Actual_Discr))
                    then
!                      Error_Msg_NE
                         ("types of actual discriminants must match formal",
!                         Actual, Gen_T);
                       Abandon_Instantiation (Actual);
  
                    elsif not Subtypes_Statically_Match
                                (Formal_Subt, Etype (Actual_Discr))
                      and then Ada_Version >= Ada_95
                    then
!                      Error_Msg_NE
                         ("subtypes of actual discriminants must match formal",
!                         Actual, Gen_T);
                       Abandon_Instantiation (Actual);
                    end if;
  
--- 13800,13817 ----
                    elsif Base_Type (Formal_Subt) /=
                            Base_Type (Etype (Actual_Discr))
                    then
!                      Error_Msg_N
                         ("types of actual discriminants must match formal",
!                         Actual);
                       Abandon_Instantiation (Actual);
  
                    elsif not Subtypes_Statically_Match
                                (Formal_Subt, Etype (Actual_Discr))
                      and then Ada_Version >= Ada_95
                    then
!                      Error_Msg_N
                         ("subtypes of actual discriminants must match formal",
!                         Actual);
                       Abandon_Instantiation (Actual);
                    end if;
  
*************** package body Sem_Ch12 is
*** 14016,14024 ****
                       and then Ekind (Root_Type (Act_T)) = E_Incomplete_Type)
           then
              --  If the formal is an incomplete type, the actual can be
!             --  incomplete as well.
  
!             if Ekind (A_Gen_T) = E_Incomplete_Type then
                 null;
  
              elsif Is_Class_Wide_Type (Act_T)
--- 13965,13976 ----
                       and then Ekind (Root_Type (Act_T)) = E_Incomplete_Type)
           then
              --  If the formal is an incomplete type, the actual can be
!             --  incomplete as well, but if an actual incomplete type has
!             --  a full view, then we'll retrieve that.
  
!             if Ekind (A_Gen_T) = E_Incomplete_Type
!               and then not Present (Full_View (Act_T))
!             then
                 null;
  
              elsif Is_Class_Wide_Type (Act_T)
*************** package body Sem_Ch12 is
*** 14026,14031 ****
--- 13978,13984 ----
              then
                 Error_Msg_N ("premature use of incomplete type", Actual);
                 Abandon_Instantiation (Actual);
+ 
              else
                 Act_T := Full_View (Act_T);
                 Set_Entity (Actual, Act_T);
*************** package body Sem_Ch12 is
*** 14200,14206 ****
        --  the local subtype must be treated as such.
  
        if From_Limited_With (Act_T) then
!          Set_Ekind (Subt, E_Incomplete_Subtype);
           Set_From_Limited_With (Subt);
        end if;
  
--- 14153,14159 ----
        --  the local subtype must be treated as such.
  
        if From_Limited_With (Act_T) then
!          Mutate_Ekind (Subt, E_Incomplete_Subtype);
           Set_From_Limited_With (Subt);
        end if;
  
*************** package body Sem_Ch12 is
*** 14259,14267 ****
              Append_To (Decl_Nodes, Corr_Decl);
  
              if Ekind (Act_T) = E_Task_Type then
!                Set_Ekind (Subt, E_Task_Subtype);
              else
!                Set_Ekind (Subt, E_Protected_Subtype);
              end if;
  
              Set_Corresponding_Record_Type (Subt, Corr_Rec);
--- 14212,14220 ----
              Append_To (Decl_Nodes, Corr_Decl);
  
              if Ekind (Act_T) = E_Task_Type then
!                Mutate_Ekind (Subt, E_Task_Subtype);
              else
!                Mutate_Ekind (Subt, E_Protected_Subtype);
              end if;
  
              Set_Corresponding_Record_Type (Subt, Corr_Rec);
*************** package body Sem_Ch12 is
*** 14746,14752 ****
                    Set_Instance_Of (Base_Type (E1), Base_Type (E2));
                 end if;
  
!                if Ekind (E1) = E_Package and then No (Renamed_Object (E1)) then
                    Map_Formal_Package_Entities (E1, E2);
                 end if;
              end if;
--- 14699,14705 ----
                    Set_Instance_Of (Base_Type (E1), Base_Type (E2));
                 end if;
  
!                if Ekind (E1) = E_Package and then No (Renamed_Entity (E1)) then
                    Map_Formal_Package_Entities (E1, E2);
                 end if;
              end if;
*************** package body Sem_Ch12 is
*** 15212,15225 ****
              --  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) then
                 declare
                    Par : constant Entity_Id :=
                            Generic_Parent (Package_Specification (S));
                 begin
                    if Present (Par)
                      and then P = Scope (Par)
-                     and then (In_Package_Body (S) or else In_Private_Part (S))
                    then
                       Set_In_Private_Part (P);
                       Install_Private_Declarations (P);
--- 15165,15179 ----
              --  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);
*************** package body Sem_Ch12 is
*** 15301,15311 ****
        ---------------------------
  
        procedure Restore_Nested_Formal (Formal : Entity_Id) is
           Ent : Entity_Id;
- 
        begin
!          if Present (Renamed_Object (Formal))
!            and then Denotes_Formal_Package (Renamed_Object (Formal), True)
           then
              return;
  
--- 15255,15265 ----
        ---------------------------
  
        procedure Restore_Nested_Formal (Formal : Entity_Id) is
+          pragma Assert (Ekind (Formal) = E_Package);
           Ent : Entity_Id;
        begin
!          if Present (Renamed_Entity (Formal))
!            and then Denotes_Formal_Package (Renamed_Entity (Formal), True)
           then
              return;
  
*************** package body Sem_Ch12 is
*** 15444,15463 ****
              --  visible on exit from the instance, and therefore nothing needs
              --  to be done either, except to keep it accessible.
  
!             if Is_Package and then Renamed_Object (E) = Pack_Id then
                 exit;
  
              elsif Nkind (Parent (E)) /= N_Package_Renaming_Declaration then
                 null;
  
              elsif
!               Denotes_Formal_Package (Renamed_Object (E), True, Pack_Id)
              then
                 Set_Is_Hidden (E, False);
  
              else
                 declare
!                   Act_P : constant Entity_Id := Renamed_Object (E);
                    Id    : Entity_Id;
  
                 begin
--- 15398,15417 ----
              --  visible on exit from the instance, and therefore nothing needs
              --  to be done either, except to keep it accessible.
  
!             if Is_Package and then Renamed_Entity (E) = Pack_Id then
                 exit;
  
              elsif Nkind (Parent (E)) /= N_Package_Renaming_Declaration then
                 null;
  
              elsif
!               Denotes_Formal_Package (Renamed_Entity (E), True, Pack_Id)
              then
                 Set_Is_Hidden (E, False);
  
              else
                 declare
!                   Act_P : constant Entity_Id := Renamed_Entity (E);
                    Id    : Entity_Id;
  
                 begin
*************** package body Sem_Ch12 is
*** 15466,15472 ****
                      and then Id /= First_Private_Entity (Act_P)
                    loop
                       exit when Ekind (Id) = E_Package
!                                  and then Renamed_Object (Id) = Act_P;
  
                       Set_Is_Hidden (Id, True);
                       Set_Is_Potentially_Use_Visible (Id, In_Use (Act_P));
--- 15420,15426 ----
                      and then Id /= First_Private_Entity (Act_P)
                    loop
                       exit when Ekind (Id) = E_Package
!                                  and then Renamed_Entity (Id) = Act_P;
  
                       Set_Is_Hidden (Id, True);
                       Set_Is_Potentially_Use_Visible (Id, In_Use (Act_P));
*************** package body Sem_Ch12 is
*** 15608,15614 ****
           elsif E = Standard_Standard then
              return True;
  
!          elsif Is_Child_Unit (E)
             and then (Is_Instance_Node (Parent (N2))
                        or else (Nkind (Parent (N2)) = N_Expanded_Name
                                  and then N2 = Selector_Name (Parent (N2))
--- 15562,15574 ----
           elsif E = Standard_Standard then
              return True;
  
!          --  E should be an entity, but it is not always
! 
!          elsif Nkind (E) not in N_Entity then
!             return False;
! 
!          elsif Nkind (E) /= N_Expanded_Name
!            and then Is_Child_Unit (E)
             and then (Is_Instance_Node (Parent (N2))
                        or else (Nkind (Parent (N2)) = N_Expanded_Name
                                  and then N2 = Selector_Name (Parent (N2))
*************** package body Sem_Ch12 is
*** 15618,15624 ****
              return True;
  
           else
!             Se := Scope (E);
              while Se /= Gen_Scope loop
                 if Se = Standard_Standard then
                    return True;
--- 15578,15596 ----
              return True;
  
           else
!             --  E may be an expanded name - typically an operator - in which
!             --  case we must find its enclosing scope since expanded names
!             --  don't have corresponding scopes.
! 
!             if Nkind (E) = N_Expanded_Name then
!                Se := Find_Enclosing_Scope (E);
! 
!             --  Otherwise, E is an entity and will have Scope set
! 
!             else
!                Se := Scope (E);
!             end if;
! 
              while Se /= Gen_Scope loop
                 if Se = Standard_Standard then
                    return True;
*************** package body Sem_Ch12 is
*** 16169,16184 ****
              pragma Assert (D /= Union_Id (No_List));
              --  Because No_List = Empty, which is in Node_Range above
  
!             if Is_Empty_List (List_Id (D)) then
!                null;
! 
!             else
!                N1 := First (List_Id (D));
!                while Present (N1) loop
!                   Save_References (N1);
!                   Next (N1);
!                end loop;
!             end if;
  
           --  Element list or other non-node field, nothing to do
  
--- 16141,16151 ----
              pragma Assert (D /= Union_Id (No_List));
              --  Because No_List = Empty, which is in Node_Range above
  
!             N1 := First (List_Id (D));
!             while Present (N1) loop
!                Save_References (N1);
!                Next (N1);
!             end loop;
  
           --  Element list or other non-node field, nothing to do
  
*************** package body Sem_Ch12 is
*** 16280,16289 ****
              Qual  : Node_Id   := Empty;
              Typ   : Entity_Id := Empty;
  
-             use Atree.Unchecked_Access;
-             --  This code section is part of implementing an untyped tree
-             --  traversal, so it needs direct access to node fields.
- 
           begin
              N2 := Get_Associated_Node (N);
  
--- 16247,16252 ----
*************** package body Sem_Ch12 is
*** 16295,16301 ****
                 --  global in the current generic it must be preserved for its
                 --  instantiation.
  
!                if Nkind (Parent (Typ)) = N_Subtype_Declaration
                   and then Present (Generic_Parent_Type (Parent (Typ)))
                 then
                    Typ := Base_Type (Typ);
--- 16258,16264 ----
                 --  global in the current generic it must be preserved for its
                 --  instantiation.
  
!                if Parent_Kind (Typ) = N_Subtype_Declaration
                   and then Present (Generic_Parent_Type (Parent (Typ)))
                 then
                    Typ := Base_Type (Typ);
*************** package body Sem_Ch12 is
*** 16346,16355 ****
                 end if;
              end if;
  
!             Save_Global_Descendant (Field1 (N));
!             Save_Global_Descendant (Field2 (N));
!             Save_Global_Descendant (Field3 (N));
!             Save_Global_Descendant (Field5 (N));
  
              if Present (Qual) then
                 Rewrite (N, Qual);
--- 16309,16327 ----
                 end if;
              end if;
  
!             if Nkind (N) = N_Aggregate then
!                Save_Global_Descendant (Union_Id (Aggregate_Bounds (N)));
! 
!             elsif Nkind (N) = N_Extension_Aggregate then
!                Save_Global_Descendant (Union_Id (Ancestor_Part (N)));
! 
!             else
!                pragma Assert (False);
!             end if;
! 
!             Save_Global_Descendant (Union_Id (Expressions (N)));
!             Save_Global_Descendant (Union_Id (Component_Associations (N)));
!             Save_Global_Descendant (Union_Id (Etype (N)));
  
              if Present (Qual) then
                 Rewrite (N, Qual);
*************** package body Sem_Ch12 is
*** 16377,16392 ****
           ------------------------------------
  
           procedure Save_References_In_Descendants (N : Node_Id) is
!             use Atree.Unchecked_Access;
!             --  This code section is part of implementing an untyped tree
!             --  traversal, so it needs direct access to node fields.
! 
           begin
!             Save_Global_Descendant (Field1 (N));
!             Save_Global_Descendant (Field2 (N));
!             Save_Global_Descendant (Field3 (N));
!             Save_Global_Descendant (Field4 (N));
!             Save_Global_Descendant (Field5 (N));
           end Save_References_In_Descendants;
  
           -----------------------------------
--- 16349,16357 ----
           ------------------------------------
  
           procedure Save_References_In_Descendants (N : Node_Id) is
!             procedure Walk is new Walk_Sinfo_Fields (Save_Global_Descendant);
           begin
!             Walk (N);
           end Save_References_In_Descendants;
  
           -----------------------------------
*************** package body Sem_Ch12 is
*** 16591,16600 ****
              Context : Node_Id;
              Do_Save : Boolean := True;
  
-             use Atree.Unchecked_Access;
-             --  This code section is part of implementing an untyped tree
-             --  traversal, so it needs direct access to node fields.
- 
           begin
              --  Do not save global references in pragmas generated from aspects
              --  because the pragmas will be regenerated at instantiation time.
--- 16556,16561 ----
*************** package body Sem_Ch12 is
*** 16626,16639 ****
  
              --  For all other cases, save all global references within the
              --  descendants, but skip the following semantic fields:
! 
!             --    Field1 - Next_Pragma
!             --    Field3 - Corresponding_Aspect
!             --    Field5 - Next_Rep_Item
  
              if Do_Save then
!                Save_Global_Descendant (Field2 (Prag));
!                Save_Global_Descendant (Field4 (Prag));
              end if;
           end Save_References_In_Pragma;
  
--- 16587,16598 ----
  
              --  For all other cases, save all global references within the
              --  descendants, but skip the following semantic fields:
!             --  Next_Pragma, Corresponding_Aspect, Next_Rep_Item.
  
              if Do_Save then
!                Save_Global_Descendant
!                  (Union_Id (Pragma_Argument_Associations (N)));
!                Save_Global_Descendant (Union_Id (Pragma_Identifier (N)));
              end if;
           end Save_References_In_Pragma;
  
*************** package body Sem_Ch12 is
*** 16975,16978 ****
--- 16934,17357 ----
        end if;
     end Valid_Default_Attribute;
  
+    ----------------------------------
+    -- Validate_Formal_Type_Default --
+    ----------------------------------
+ 
+    procedure Validate_Formal_Type_Default (Decl : Node_Id) is
+       Default : constant Node_Id :=
+         Default_Subtype_Mark (Original_Node (Decl));
+       Formal  : constant Entity_Id := Defining_Identifier (Decl);
+ 
+       Def_Sub  : Entity_Id;     --  Default subtype mark
+       Type_Def : Node_Id;
+ 
+       procedure Check_Discriminated_Formal;
+       --  Check that discriminants of default for private or incomplete
+       --  type match those of formal type.
+ 
+       function Reference_Formal (N : Node_Id) return Traverse_Result;
+       --  Check whether formal type definition mentions a previous formal
+       --  type of the same generic.
+ 
+       ----------------------
+       -- Reference_Formal --
+       ----------------------
+ 
+       function Reference_Formal (N : Node_Id) return Traverse_Result is
+       begin
+          if Is_Entity_Name (N)
+            and then Scope (Entity (N)) = Current_Scope
+          then
+             return Abandon;
+          else
+             return OK;
+          end if;
+       end Reference_Formal;
+ 
+       function Depends_On_Other_Formals is
+            new Traverse_Func (Reference_Formal);
+ 
+       function Default_Subtype_Matches
+         (Gen_T, Def_T : Entity_Id) return Boolean;
+ 
+       procedure Validate_Array_Type_Default;
+       --  Verify that dimension, indices, and component types of default
+       --  are compatible with formal array type definition.
+ 
+       procedure Validate_Derived_Type_Default;
+       --  Verify that ancestor and progenitor types match.
+ 
+       ---------------------------------
+       -- Check_Discriminated_Formal --
+       ---------------------------------
+ 
+       procedure Check_Discriminated_Formal is
+          Formal_Discr : Entity_Id;
+          Actual_Discr : Entity_Id;
+          Formal_Subt  : Entity_Id;
+ 
+       begin
+          if Has_Discriminants (Formal) then
+             if not Has_Discriminants (Def_Sub) then
+                Error_Msg_NE
+                  ("default for & must have discriminants", Default, Formal);
+ 
+             elsif Is_Constrained (Def_Sub) then
+                Error_Msg_NE
+                  ("default for & must be unconstrained", Default, Formal);
+ 
+             else
+                Formal_Discr := First_Discriminant (Formal);
+                Actual_Discr := First_Discriminant (Def_Sub);
+                while Formal_Discr /= Empty loop
+                   if Actual_Discr = Empty then
+                      Error_Msg_N
+                        ("discriminants on Formal do not match formal",
+                         Default);
+                   end if;
+ 
+                   Formal_Subt := Etype (Formal_Discr);
+ 
+                   --  Access discriminants match if designated types do
+ 
+                   if Ekind (Base_Type (Formal_Subt)) = E_Anonymous_Access_Type
+                     and then (Ekind (Base_Type (Etype (Actual_Discr)))) =
+                                 E_Anonymous_Access_Type
+                     and then
+                         Designated_Type (Base_Type (Formal_Subt)) =
+                            Designated_Type (Base_Type (Etype (Actual_Discr)))
+                   then
+                      null;
+ 
+                   elsif Base_Type (Formal_Subt) /=
+                           Base_Type (Etype (Actual_Discr))
+                   then
+                      Error_Msg_N
+                        ("types of discriminants of default must match formal",
+                         Default);
+ 
+                   elsif not Subtypes_Statically_Match
+                               (Formal_Subt, Etype (Actual_Discr))
+                     and then Ada_Version >= Ada_95
+                   then
+                      Error_Msg_N
+                        ("subtypes of discriminants of default "
+                          & "must match formal",
+                         Default);
+                   end if;
+ 
+                   Next_Discriminant (Formal_Discr);
+                   Next_Discriminant (Actual_Discr);
+                end loop;
+ 
+                if Actual_Discr /= Empty then
+                   Error_Msg_NE
+                     ("discriminants on default do not match formal",
+                      Default, Formal);
+                end if;
+             end if;
+          end if;
+       end Check_Discriminated_Formal;
+ 
+       ---------------------------
+       -- Default_Subtype_Matches --
+       ---------------------------
+ 
+       function Default_Subtype_Matches
+         (Gen_T, Def_T : Entity_Id) return Boolean
+       is
+       begin
+          --  Check that the base types, root types (when dealing with class
+          --  wide types), or designated types (when dealing with anonymous
+          --  access types) of Gen_T and Def_T are statically matching subtypes.
+ 
+          return (Base_Type (Gen_T) = Base_Type (Def_T)
+                   and then Subtypes_Statically_Match (Gen_T, Def_T))
+ 
+            or else (Is_Class_Wide_Type (Gen_T)
+                      and then Is_Class_Wide_Type (Def_T)
+                      and then Default_Subtype_Matches
+                                 (Root_Type (Gen_T), Root_Type (Def_T)))
+ 
+            or else (Is_Anonymous_Access_Type (Gen_T)
+                and then Ekind (Def_T) = Ekind (Gen_T)
+                and then Subtypes_Statically_Match
+                           (Designated_Type (Gen_T), Designated_Type (Def_T)));
+ 
+       end Default_Subtype_Matches;
+ 
+       ----------------------------------
+       --  Validate_Array_Type_Default --
+       ----------------------------------
+ 
+       procedure Validate_Array_Type_Default is
+          I1, I2 : Node_Id;
+          T2     : Entity_Id;
+       begin
+          if not Is_Array_Type (Def_Sub) then
+             Error_Msg_NE ("default for& must be an array type ",
+               Default, Formal);
+             return;
+ 
+          elsif Number_Dimensions (Def_Sub) /= Number_Dimensions (Formal)
+            or else Is_Constrained (Def_Sub) /=
+                    Is_Constrained (Formal)
+          then
+             Error_Msg_NE ("default array type does not match&",
+               Default, Formal);
+             return;
+          end if;
+ 
+          I1 := First_Index (Formal);
+          I2 := First_Index (Def_Sub);
+          for J in 1 .. Number_Dimensions (Formal) loop
+ 
+             --  If the indexes of the actual were given by a subtype_mark,
+             --  the index was transformed into a range attribute. Retrieve
+             --  the original type mark for checking.
+ 
+             if Is_Entity_Name (Original_Node (I2)) then
+                T2 := Entity (Original_Node (I2));
+             else
+                T2 := Etype (I2);
+             end if;
+ 
+             if not Subtypes_Statically_Match (Etype (I1), T2) then
+                Error_Msg_NE
+                  ("index types of default do not match those of formal &",
+                   Default, Formal);
+             end if;
+ 
+             Next_Index (I1);
+             Next_Index (I2);
+          end loop;
+ 
+          if not Default_Subtype_Matches
+            (Component_Type (Formal), Component_Type (Def_Sub))
+          then
+             Error_Msg_NE
+               ("component subtype of default does not match that of formal &",
+                Default, Formal);
+          end if;
+ 
+          if Has_Aliased_Components (Formal)
+            and then not Has_Aliased_Components (Default)
+          then
+             Error_Msg_NE
+               ("default must have aliased components to match formal type &",
+                Default, Formal);
+          end if;
+       end Validate_Array_Type_Default;
+ 
+       -----------------------------------
+       -- Validate_Derived_Type_Default --
+       -----------------------------------
+ 
+       procedure Validate_Derived_Type_Default is
+       begin
+          if not Is_Ancestor (Etype (Formal), Def_Sub) then
+             Error_Msg_NE ("default must be a descendent of&",
+               Default, Etype (Formal));
+          end if;
+ 
+          if Has_Interfaces (Formal) then
+             if not Has_Interfaces (Def_Sub) then
+                Error_Msg_NE
+                  ("default must implement all interfaces of formal&",
+                    Default, Formal);
+ 
+             else
+                declare
+                   Act_Iface_List : Elist_Id;
+                   Iface          : Node_Id;
+                   Iface_Ent      : Entity_Id;
+ 
+                begin
+                   Iface := First (Abstract_Interface_List (Formal));
+                   Collect_Interfaces (Def_Sub, Act_Iface_List);
+ 
+                   while Present (Iface) loop
+                      Iface_Ent := Entity (Iface);
+ 
+                      if Is_Ancestor (Iface_Ent, Def_Sub)
+                       or else Is_Progenitor (Iface_Ent, Def_Sub)
+                      then
+                         null;
+ 
+                      else
+                         Error_Msg_NE
+                           ("Default must implement interface&",
+                            Default, Etype (Iface));
+                      end if;
+ 
+                      Next (Iface);
+                   end loop;
+                end;
+             end if;
+          end if;
+       end Validate_Derived_Type_Default;
+ 
+       --  Start of processing for Validate_Formal_Type_Default
+ 
+    begin
+       Analyze (Default);
+       if not Is_Entity_Name (Default)
+         or else not Is_Type (Entity (Default))
+       then
+          Error_Msg_N
+            ("Expect type name for default of formal type", Default);
+          return;
+       else
+          Def_Sub := Entity (Default);
+       end if;
+ 
+       --  Formal derived_type declarations are transformed into full
+       --  type declarations or Private_Type_Extensions for ease of processing.
+ 
+       if Nkind (Decl) = N_Full_Type_Declaration then
+          Type_Def := Type_Definition (Decl);
+ 
+       elsif Nkind (Decl) = N_Private_Extension_Declaration then
+          Type_Def := Subtype_Indication (Decl);
+ 
+       else
+          Type_Def := Formal_Type_Definition (Decl);
+       end if;
+ 
+       if Depends_On_Other_Formals (Type_Def) = Abandon
+            and then Scope (Def_Sub) /= Current_Scope
+       then
+          Error_Msg_N ("default of formal type that depends on "
+            & "other formals must be a previous formal type", Default);
+          return;
+ 
+       elsif Def_Sub = Formal then
+          Error_Msg_N
+            ("default for formal type cannot be formal itsef", Default);
+          return;
+       end if;
+ 
+       case Nkind (Type_Def) is
+ 
+          when N_Formal_Private_Type_Definition =>
+             if (Is_Abstract_Type (Formal)
+               and then not Is_Abstract_Type (Def_Sub))
+             or else (Is_Limited_Type (Formal)
+               and then not Is_Limited_Type (Def_Sub))
+             then
+                Error_Msg_NE
+                  ("default for private type$ does not match",
+                      Default, Formal);
+             end if;
+ 
+             Check_Discriminated_Formal;
+ 
+          when N_Formal_Derived_Type_Definition =>
+             Check_Discriminated_Formal;
+             Validate_Derived_Type_Default;
+ 
+          when N_Formal_Incomplete_Type_Definition =>
+             if Is_Tagged_Type (Formal)
+               and then not Is_Tagged_Type (Def_Sub)
+             then
+                Error_Msg_NE
+                  ("default for & must be a tagged type", Default, Formal);
+             end if;
+ 
+             Check_Discriminated_Formal;
+ 
+          when N_Formal_Discrete_Type_Definition =>
+             if not Is_Discrete_Type (Def_Sub) then
+                Error_Msg_NE ("default for& must be a discrete type",
+                  Default, Formal);
+             end if;
+ 
+          when N_Formal_Signed_Integer_Type_Definition =>
+             if not Is_Integer_Type (Def_Sub) then
+                Error_Msg_NE ("default for& must be a discrete type",
+                  Default, Formal);
+             end if;
+ 
+          when N_Formal_Modular_Type_Definition =>
+             if not Is_Modular_Integer_Type (Def_Sub) then
+                Error_Msg_NE ("default for& must be a modular_integer Type",
+                  Default, Formal);
+             end if;
+ 
+          when N_Formal_Floating_Point_Definition =>
+             if not Is_Floating_Point_Type (Def_Sub) then
+                Error_Msg_NE ("default for& must be a floating_point type",
+                  Default, Formal);
+             end if;
+ 
+          when N_Formal_Ordinary_Fixed_Point_Definition =>
+             if not Is_Ordinary_Fixed_Point_Type (Def_Sub) then
+                Error_Msg_NE ("default for& must be "
+                  & "an ordinary_fixed_point type ",
+                  Default, Formal);
+             end if;
+ 
+          when N_Formal_Decimal_Fixed_Point_Definition =>
+             if not Is_Decimal_Fixed_Point_Type (Def_Sub) then
+                Error_Msg_NE ("default for& must be "
+                  & "an Decimal_fixed_point type ",
+                  Default, Formal);
+             end if;
+ 
+          when N_Array_Type_Definition =>
+             Validate_Array_Type_Default;
+ 
+          when N_Access_Function_Definition |
+            N_Access_Procedure_Definition =>
+             if Ekind (Def_Sub) /= E_Access_Subprogram_Type then
+                Error_Msg_NE ("default for& must be an Access_To_Subprogram",
+                  Default, Formal);
+             end if;
+             Check_Subtype_Conformant
+               (Designated_Type (Formal), Designated_Type (Def_Sub));
+ 
+          when N_Access_To_Object_Definition =>
+             if not Is_Access_Object_Type (Def_Sub) then
+                Error_Msg_NE ("default for& must be an Access_To_Object",
+                 Default, Formal);
+ 
+             elsif not Default_Subtype_Matches
+               (Designated_Type (Formal), Designated_Type (Def_Sub))
+             then
+                Error_Msg_NE ("designated type of defaul does not match "
+                  & "designated type of formal type",
+                  Default, Formal);
+             end if;
+ 
+          when N_Record_Definition =>   -- Formal interface type
+             if not Is_Interface (Def_Sub) then
+                Error_Msg_NE
+                  ("default for formal interface type must be an interface",
+                   Default, Formal);
+ 
+             elsif Is_Limited_Type (Def_Sub) /= Is_Limited_Type (Formal)
+               or else Is_Task_Interface (Formal) /= Is_Task_Interface (Def_Sub)
+               or else Is_Protected_Interface (Formal) /=
+                       Is_Protected_Interface (Def_Sub)
+               or else Is_Synchronized_Interface (Formal) /=
+                       Is_Synchronized_Interface (Def_Sub)
+             then
+                Error_Msg_NE
+                  ("default for interface& does not match", Def_Sub, Formal);
+             end if;
+ 
+          when N_Derived_Type_Definition =>
+             Validate_Derived_Type_Default;
+ 
+          when N_Identifier =>   --  case of a private extension
+             Validate_Derived_Type_Default;
+ 
+          when N_Error =>
+             null;
+ 
+          when others =>
+             raise Program_Error;
+       end case;
+    end Validate_Formal_Type_Default;
  end Sem_Ch12;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch12.ads gcc-12.1.0/gcc/ada/sem_ch12.ads
*** gcc-11.3.0/gcc/ada/sem_ch12.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch12.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Ch12 is
*** 37,59 ****
     procedure Analyze_Formal_Subprogram_Declaration      (N : Node_Id);
     procedure Analyze_Formal_Package_Declaration         (N : Node_Id);
  
-    function Build_Function_Wrapper
-      (Formal_Subp : Entity_Id;
-       Actual_Subp : Entity_Id) return Node_Id;
-    --  In GNATprove mode, create a wrapper function for actuals that are
-    --  functions with any number of formal parameters, in order to propagate
-    --  their contract to the renaming declarations generated for them. This
-    --  is called after the renaming declaration created for the formal in the
-    --  instance has been analyzed, and the actual is known.
- 
-    function Build_Operator_Wrapper
-      (Formal_Subp : Entity_Id;
-       Actual_Subp : Entity_Id) return Node_Id;
-    --  In GNATprove mode, create a wrapper function for actuals that are
-    --  operators, in order to propagate their contract to the renaming
-    --  declarations generated for them. The types are (the instances of)
-    --  the types of the formal subprogram.
- 
     procedure Start_Generic;
     --  Must be invoked before starting to process a generic spec or body
  
--- 37,42 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch13.adb gcc-12.1.0/gcc/ada/sem_ch13.adb
*** gcc-11.3.0/gcc/ada/sem_ch13.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch13.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,75 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Exp_Disp; use Exp_Disp;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Ghost;    use Ghost;
! with Lib;      use Lib;
! with Lib.Xref; use Lib.Xref;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Par_SCO;  use Par_SCO;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Case; use Sem_Case;
! with Sem_Cat;  use Sem_Cat;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch7;  use Sem_Ch7;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Dim;  use Sem_Dim;
! with Sem_Eval; use Sem_Eval;
! with Sem_Prag; use Sem_Prag;
! with Sem_Res;  use Sem_Res;
! with Sem_Type; use Sem_Type;
! with Sem_Util; use Sem_Util;
! with Sem_Warn; use Sem_Warn;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stand;    use Stand;
  with Table;
! with Targparm; use Targparm;
! with Ttypes;   use Ttypes;
! with Tbuild;   use Tbuild;
! with Urealp;   use Urealp;
! with Warnsw;   use Warnsw;
  
  with GNAT.Heap_Sort_G;
  
--- 23,80 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Contracts;      use Contracts;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Disp;       use Exp_Disp;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Ghost;          use Ghost;
! with Lib;            use Lib;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Par_SCO;        use Par_SCO;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Case;       use Sem_Case;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Dim;        use Sem_Dim;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Res;        use Sem_Res;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stand;          use Stand;
  with Table;
! with Targparm;       use Targparm;
! with Ttypes;         use Ttypes;
! with Tbuild;         use Tbuild;
! with Urealp;         use Urealp;
! with Warnsw;         use Warnsw;
  
  with GNAT.Heap_Sort_G;
  
*************** package body Sem_Ch13 is
*** 243,249 ****
     --  are in keeping with the components of Address_Clause_Check_Record below.
  
     procedure Validate_Aspect_Aggregate (N : Node_Id);
!    --  Check legality of operations given in the Ada 202x Aggregate aspect for
     --  containers.
  
     procedure Resolve_Aspect_Aggregate
--- 248,254 ----
     --  are in keeping with the components of Address_Clause_Check_Record below.
  
     procedure Validate_Aspect_Aggregate (N : Node_Id);
!    --  Check legality of operations given in the Ada 2022 Aggregate aspect for
     --  containers.
  
     procedure Resolve_Aspect_Aggregate
*************** package body Sem_Ch13 is
*** 254,262 ****
  
     procedure Validate_Aspect_Stable_Properties
       (E : Entity_Id; N : Node_Id; Class_Present : Boolean);
!    --  Check legality of functions given in the Ada 202x Stable_Properties
     --  (or Stable_Properties'Class) aspect.
  
     procedure Resolve_Aspect_Stable_Properties
      (Typ_Or_Subp   : Entity_Id;
       Expr          : Node_Id;
--- 259,280 ----
  
     procedure Validate_Aspect_Stable_Properties
       (E : Entity_Id; N : Node_Id; Class_Present : Boolean);
!    --  Check legality of functions given in the Ada 2022 Stable_Properties
     --  (or Stable_Properties'Class) aspect.
  
+    procedure Validate_Storage_Model_Type_Aspect
+      (Typ : Entity_Id; ASN : Node_Id);
+    --  Check legality and completeness of the aggregate associations given in
+    --  the Storage_Model_Type aspect associated with Typ.
+ 
+    procedure Resolve_Storage_Model_Type_Argument
+      (N         : Node_Id;
+       Typ       : Entity_Id;
+       Addr_Type : in out Entity_Id;
+       Nam       : Name_Id);
+    --  Resolve argument N to be of the proper kind (when a type or constant)
+    --  or to have the proper profile (when a subprogram).
+ 
     procedure Resolve_Aspect_Stable_Properties
      (Typ_Or_Subp   : Entity_Id;
       Expr          : Node_Id;
*************** package body Sem_Ch13 is
*** 465,480 ****
                       if Warn_On_Reverse_Bit_Order then
                          Error_Msg_N
                            ("info: multi-byte field specified with "
!                            & "non-standard Bit_Order?V?", CC);
  
                          if Bytes_Big_Endian then
                             Error_Msg_N
                               ("\bytes are not reversed "
!                               & "(component is big-endian)?V?", CC);
                          else
                             Error_Msg_N
                               ("\bytes are not reversed "
!                               & "(component is little-endian)?V?", CC);
                          end if;
                       end if;
  
--- 483,498 ----
                       if Warn_On_Reverse_Bit_Order then
                          Error_Msg_N
                            ("info: multi-byte field specified with "
!                            & "non-standard Bit_Order?.v?", CC);
  
                          if Bytes_Big_Endian then
                             Error_Msg_N
                               ("\bytes are not reversed "
!                               & "(component is big-endian)?.v?", CC);
                          else
                             Error_Msg_N
                               ("\bytes are not reversed "
!                               & "(component is little-endian)?.v?", CC);
                          end if;
                       end if;
  
*************** package body Sem_Ch13 is
*** 575,581 ****
           Comp   := First_Component_Or_Discriminant (R);
           while Present (Comp) loop
              declare
!                CC   : constant Node_Id := Component_Clause (Comp);
  
              begin
                 --  Collect only component clauses whose last bit is less than
--- 593,599 ----
           Comp   := First_Component_Or_Discriminant (R);
           while Present (Comp) loop
              declare
!                CC : constant Node_Id := Component_Clause (Comp);
  
              begin
                 --  Collect only component clauses whose last bit is less than
*************** package body Sem_Ch13 is
*** 689,705 ****
                       Error_Msg_Uint_1 := MSS;
                       Error_Msg_N
                         ("info: reverse bit order in machine scalar of "
!                         & "length^?V?", First_Bit (CC));
                       Error_Msg_Uint_1 := NFB;
                       Error_Msg_Uint_2 := NLB;
  
                       if Bytes_Big_Endian then
                          Error_Msg_NE
!                           ("\big-endian range for component & is ^ .. ^?V?",
                             First_Bit (CC), Comp);
                       else
                          Error_Msg_NE
!                           ("\little-endian range for component & is ^ .. ^?V?",
                             First_Bit (CC), Comp);
                       end if;
                    end if;
--- 707,724 ----
                       Error_Msg_Uint_1 := MSS;
                       Error_Msg_N
                         ("info: reverse bit order in machine scalar of "
!                         & "length^?.v?", First_Bit (CC));
                       Error_Msg_Uint_1 := NFB;
                       Error_Msg_Uint_2 := NLB;
  
                       if Bytes_Big_Endian then
                          Error_Msg_NE
!                           ("\big-endian range for component & is ^ .. ^?.v?",
                             First_Bit (CC), Comp);
                       else
                          Error_Msg_NE
!                           ("\little-endian range for component " &
!                            "& is ^ .. ^?.v?",
                             First_Bit (CC), Comp);
                       end if;
                    end if;
*************** package body Sem_Ch13 is
*** 764,779 ****
                    then
                       Error_Msg_N
                         ("info: multi-byte field specified with non-standard "
!                         & "Bit_Order?V?", CLC);
  
                       if Bytes_Big_Endian then
                          Error_Msg_N
                            ("\bytes are not reversed "
!                            & "(component is big-endian)?V?", CLC);
                       else
                          Error_Msg_N
                            ("\bytes are not reversed "
!                            & "(component is little-endian)?V?", CLC);
                       end if;
  
                    --  Do not allow non-contiguous field
--- 783,798 ----
                    then
                       Error_Msg_N
                         ("info: multi-byte field specified with non-standard "
!                         & "Bit_Order?.v?", CLC);
  
                       if Bytes_Big_Endian then
                          Error_Msg_N
                            ("\bytes are not reversed "
!                            & "(component is big-endian)?.v?", CLC);
                       else
                          Error_Msg_N
                            ("\bytes are not reversed "
!                            & "(component is little-endian)?.v?", CLC);
                       end if;
  
                    --  Do not allow non-contiguous field
*************** package body Sem_Ch13 is
*** 797,809 ****
                    then
                       Error_Msg_N
                         ("info: Bit_Order clause does not affect byte "
!                         & "ordering?V?", Pos);
                       Error_Msg_Uint_1 :=
                         Intval (Pos) + Intval (FB) /
                         System_Storage_Unit;
                       Error_Msg_N
                         ("info: position normalized to ^ before bit order "
!                         & "interpreted?V?", Pos);
                    end if;
  
                    --  Here is where we fix up the Component_Bit_Offset value
--- 816,828 ----
                    then
                       Error_Msg_N
                         ("info: Bit_Order clause does not affect byte "
!                         & "ordering?.v?", Pos);
                       Error_Msg_Uint_1 :=
                         Intval (Pos) + Intval (FB) /
                         System_Storage_Unit;
                       Error_Msg_N
                         ("info: position normalized to ^ before bit order "
!                         & "interpreted?.v?", Pos);
                    end if;
  
                    --  Here is where we fix up the Component_Bit_Offset value
*************** package body Sem_Ch13 is
*** 856,864 ****
  
        if Known_Alignment (Typ)
          and then not Has_Alignment_Clause (Typ)
          and then Size mod (Alignment (Typ) * SSU) /= 0
        then
!          Init_Alignment (Typ);
        end if;
     end Alignment_Check_For_Size_Change;
  
--- 875,884 ----
  
        if Known_Alignment (Typ)
          and then not Has_Alignment_Clause (Typ)
+         and then Present (Size)
          and then Size mod (Alignment (Typ) * SSU) /= 0
        then
!          Reinit_Alignment (Typ);
        end if;
     end Alignment_Check_For_Size_Change;
  
*************** package body Sem_Ch13 is
*** 1029,1035 ****
           end if;
  
           --  For representation aspects, check for case of untagged derived
!          --  type whose parent either has primitive operations (pre Ada 202x),
           --  or is a by-reference type (RM 13.1(10)).
           --  Strictly speaking the check also applies to Ada 2012 but it is
           --  really too constraining for existing code already, so relax it.
--- 1049,1055 ----
           end if;
  
           --  For representation aspects, check for case of untagged derived
!          --  type whose parent either has primitive operations (pre Ada 2022),
           --  or is a by-reference type (RM 13.1(10)).
           --  Strictly speaking the check also applies to Ada 2012 but it is
           --  really too constraining for existing code already, so relax it.
*************** package body Sem_Ch13 is
*** 1045,1052 ****
                and then Has_Primitive_Operations (Parent_Type)
              then
                 Error_Msg_N
!                  ("|representation aspect not permitted before Ada 202x: " &
!                   "use -gnat2020!", N);
                 Error_Msg_NE
                   ("\parent type & has primitive operations!", N, Parent_Type);
  
--- 1065,1072 ----
                and then Has_Primitive_Operations (Parent_Type)
              then
                 Error_Msg_N
!                  ("|representation aspect not permitted before Ada 2022: " &
!                   "use -gnat2022!", N);
                 Error_Msg_NE
                   ("\parent type & has primitive operations!", N, Parent_Type);
  
*************** package body Sem_Ch13 is
*** 1451,1459 ****
--- 1471,1487 ----
                       --  Aspect Full_Access_Only must be analyzed last so that
                       --  aspects Volatile and Atomic, if any, are analyzed.
  
+                      --  Skip creation of pragma Preelaborable_Initialization
+                      --  in the case where the aspect has an expression,
+                      --  because the pragma is only needed for setting flag
+                      --  Known_To_Have_Preelab_Init, which is set by other
+                      --  means following resolution of the aspect expression.
+ 
                       if A_Id not in Aspect_Export
                                    | Aspect_Full_Access_Only
                                    | Aspect_Import
+                        and then (A_Id /= Aspect_Preelaborable_Initialization
+                                   or else not Present (Expression (ASN)))
                       then
                          Make_Pragma_From_Boolean_Aspect (ASN);
                       end if;
*************** package body Sem_Ch13 is
*** 1503,1508 ****
--- 1531,1562 ----
                    when Aspect_Iterable =>
                       Validate_Iterable_Aspect (E, ASN);
  
+                   when Aspect_Designated_Storage_Model =>
+                      Analyze_And_Resolve (Expression (ASN));
+ 
+                      if not Is_Entity_Name (Expression (ASN))
+                        or else not Is_Object (Entity (Expression (ASN)))
+                        or else
+                          not Present (Find_Aspect (Etype (Expression (ASN)),
+                                                    Aspect_Storage_Model_Type))
+                      then
+                         Error_Msg_N
+                           ("must specify name of stand-alone object of type "
+                             & "with aspect Storage_Model_Type",
+                            Expression (ASN));
+ 
+                      --  Set access type's Associated_Storage_Pool to denote
+                      --  the Storage_Model_Type object given for the aspect
+                      --  (even though that isn't actually an Ada storage pool).
+ 
+                      else
+                         Set_Associated_Storage_Pool
+                           (E, Entity (Expression (ASN)));
+                      end if;
+ 
+                   when Aspect_Storage_Model_Type =>
+                      Validate_Storage_Model_Type_Aspect (E, ASN);
+ 
                    when Aspect_Aggregate =>
                       null;
  
*************** package body Sem_Ch13 is
*** 1816,1821 ****
--- 1870,1882 ----
        Aspect := First (L);
        Aspect_Loop : while Present (Aspect) loop
           Analyze_One_Aspect : declare
+ 
+             Aspect_Exit : exception;
+             --  This exception is used to exit aspect processing completely. It
+             --  is used when an error is detected, and no further processing is
+             --  required. It is also used if an earlier error has left the tree
+             --  in a state where the aspect should not be processed.
+ 
              Expr : constant Node_Id    := Expression (Aspect);
              Id   : constant Node_Id    := Identifier (Aspect);
              Loc  : constant Source_Ptr := Sloc (Aspect);
*************** package body Sem_Ch13 is
*** 1852,1858 ****
              --  Perform analysis of aspect Yield
  
              procedure Analyze_Aspect_Static;
!             --  Ada 202x (AI12-0075): Perform analysis of aspect Static
  
              function Make_Aitem_Pragma
                (Pragma_Argument_Associations : List_Id;
--- 1913,1935 ----
              --  Perform analysis of aspect Yield
  
              procedure Analyze_Aspect_Static;
!             --  Ada 2022 (AI12-0075): Perform analysis of aspect Static
! 
!             procedure Check_Expr_Is_OK_Static_Expression
!               (Expr : Node_Id;
!                Typ  : Entity_Id := Empty);
!             --  Check the specified expression Expr to make sure that it is a
!             --  static expression of the given type (i.e. it will be analyzed
!             --  and resolved using this type, which can be any valid argument
!             --  to Resolve, e.g. Any_Integer is OK). If not, give an error
!             --  and raise Aspect_Exit. If Typ is left Empty, then any static
!             --  expression is allowed. Includes checking that the expression
!             --  does not raise Constraint_Error.
! 
!             function Directly_Specified
!               (Id : Entity_Id; A : Aspect_Id) return Boolean;
!             --  Returns True if the given aspect is directly (as opposed to
!             --  via any form of inheritance) specified for the given entity.
  
              function Make_Aitem_Pragma
                (Pragma_Argument_Associations : List_Id;
*************** package body Sem_Ch13 is
*** 2499,2509 ****
                 Is_Imported_Intrinsic : Boolean;
  
              begin
!                if Ada_Version < Ada_2020 then
!                   Error_Msg_N
!                     ("aspect % is an Ada 202x feature", Aspect);
!                   Error_Msg_N ("\compile with -gnat2020", Aspect);
! 
                    return;
                 end if;
  
--- 2576,2583 ----
                 Is_Imported_Intrinsic : Boolean;
  
              begin
!                if Ada_Version < Ada_2022 then
!                   Error_Msg_Ada_2022_Feature ("aspect %", Sloc (Aspect));
                    return;
                 end if;
  
*************** package body Sem_Ch13 is
*** 2539,2552 ****
  
                    return;
  
!                --  Ada 202x (AI12-0075): Check that the function satisfies
                 --  several requirements of static functions as specified in
                 --  RM 6.8(5.1-5.8). Note that some of the requirements given
                 --  there are checked elsewhere.
  
                 else
                    --  The expression of the expression function must be a
!                   --  potentially static expression (RM 202x 6.8(3.2-3.4)).
                    --  That's checked in Sem_Ch6.Analyze_Expression_Function.
  
                    --  The function must not contain any calls to itself, which
--- 2613,2626 ----
  
                    return;
  
!                --  Ada 2022 (AI12-0075): Check that the function satisfies
                 --  several requirements of static functions as specified in
                 --  RM 6.8(5.1-5.8). Note that some of the requirements given
                 --  there are checked elsewhere.
  
                 else
                    --  The expression of the expression function must be a
!                   --  potentially static expression (RM 2022 6.8(3.2-3.4)).
                    --  That's checked in Sem_Ch6.Analyze_Expression_Function.
  
                    --  The function must not contain any calls to itself, which
*************** package body Sem_Ch13 is
*** 2594,2601 ****
  
                    for Asp in Pre_Post_Aspects loop
                       if Has_Aspect (E, Asp) then
                          Error_Msg_N
!                           ("this aspect is not allowed for a static "
                             & "expression function",
                             Find_Aspect (E, Asp));
  
--- 2668,2676 ----
  
                    for Asp in Pre_Post_Aspects loop
                       if Has_Aspect (E, Asp) then
+                         Error_Msg_Name_1 := Aspect_Names (Asp);
                          Error_Msg_N
!                           ("aspect % is not allowed for a static "
                             & "expression function",
                             Find_Aspect (E, Asp));
  
*************** package body Sem_Ch13 is
*** 2603,2633 ****
                       end if;
                    end loop;
  
!                   --  ??? TBD: Must check that "for result type R, if the
                    --  function is a boundary entity for type R (see 7.3.2),
                    --  no type invariant applies to type R; if R has a
                    --  component type C, a similar rule applies to C."
                 end if;
  
!                --  Preanalyze the expression (if any) when the aspect resides
!                --  in a generic unit. (Is this generic-related code necessary
!                --  for this aspect? It's modeled on what's done for aspect
!                --  Disable_Controlled. ???)
  
!                if Inside_A_Generic then
!                   if Present (Expr) then
!                      Preanalyze_And_Resolve (Expr, Any_Boolean);
!                   end if;
  
!                --  Otherwise the aspect resides in a nongeneric context
  
!                else
!                   --  When the expression statically evaluates to True, the
!                   --  expression function is treated as a static function.
!                   --  Otherwise the aspect appears without an expression and
!                   --  defaults to True.
  
!                   if Present (Expr) then
                       Analyze_And_Resolve (Expr, Any_Boolean);
  
                       --  Error if the boolean expression is not static
--- 2678,2706 ----
                       end if;
                    end loop;
  
!                   --  ??? Must check that "for result type R, if the
                    --  function is a boundary entity for type R (see 7.3.2),
                    --  no type invariant applies to type R; if R has a
                    --  component type C, a similar rule applies to C."
                 end if;
  
!                --  When the expression is present, it must be static. If it
!                --  evaluates to True, the expression function is treated as
!                --  a static function. Otherwise the aspect appears without
!                --  an expression and defaults to True.
  
!                if Present (Expr) then
!                   --  Preanalyze the expression when the aspect resides in a
!                   --  generic unit. (Is this generic-related code necessary
!                   --  for this aspect? It's modeled on what's done for aspect
!                   --  Disable_Controlled. ???)
  
!                   if Inside_A_Generic then
!                      Preanalyze_And_Resolve (Expr, Any_Boolean);
  
!                   --  Otherwise the aspect resides in a nongeneric context
  
!                   else
                       Analyze_And_Resolve (Expr, Any_Boolean);
  
                       --  Error if the boolean expression is not static
*************** package body Sem_Ch13 is
*** 2715,2720 ****
--- 2788,2841 ----
                 end if;
              end Analyze_Aspect_Yield;
  
+             ----------------------------------------
+             -- Check_Expr_Is_OK_Static_Expression --
+             ----------------------------------------
+ 
+             procedure Check_Expr_Is_OK_Static_Expression
+               (Expr : Node_Id;
+                Typ  : Entity_Id := Empty)
+             is
+             begin
+                if Present (Typ) then
+                   Analyze_And_Resolve (Expr, Typ);
+                else
+                   Analyze_And_Resolve (Expr);
+                end if;
+ 
+                --  An expression cannot be considered static if its resolution
+                --  failed or if it's erroneous. Stop the analysis of the
+                --  related aspect.
+ 
+                if Etype (Expr) = Any_Type or else Error_Posted (Expr) then
+                   raise Aspect_Exit;
+ 
+                elsif Is_OK_Static_Expression (Expr) then
+                   return;
+ 
+                --  Finally, we have a real error
+ 
+                else
+                   Error_Msg_Name_1 := Nam;
+                   Flag_Non_Static_Expr
+                     ("entity for aspect% must be a static expression",
+                      Expr);
+                   raise Aspect_Exit;
+                end if;
+             end Check_Expr_Is_OK_Static_Expression;
+ 
+             ------------------------
+             -- Directly_Specified --
+             ------------------------
+ 
+             function Directly_Specified
+               (Id : Entity_Id; A : Aspect_Id) return Boolean
+             is
+                Aspect_Spec : constant Node_Id := Find_Aspect (Id, A);
+             begin
+                return Present (Aspect_Spec) and then Entity (Aspect_Spec) = Id;
+             end Directly_Specified;
+ 
              -----------------------
              -- Make_Aitem_Pragma --
              -----------------------
*************** package body Sem_Ch13 is
*** 2861,2866 ****
--- 2982,2988 ----
                              | Aspect_Async_Writers
                              | Aspect_Effective_Reads
                              | Aspect_Effective_Writes
+                             | Aspect_Preelaborable_Initialization
              then
                 Error_Msg_Name_1 := Nam;
  
*************** package body Sem_Ch13 is
*** 2878,2885 ****
                 --  versions of the language. Allowed for them only for
                 --  shared variable control aspects.
  
!                if Nkind (N) = N_Formal_Type_Declaration then
!                   if Ada_Version < Ada_2020 then
                       Error_Msg_N
                         ("aspect % not allowed for formal type declaration",
                          Aspect);
--- 3000,3010 ----
                 --  versions of the language. Allowed for them only for
                 --  shared variable control aspects.
  
!                --  Original node is used in case expansion rewrote the node -
!                --  as is the case with generic derived types.
! 
!                if Nkind (Original_Node (N)) = N_Formal_Type_Declaration then
!                   if Ada_Version < Ada_2022 then
                       Error_Msg_N
                         ("aspect % not allowed for formal type declaration",
                          Aspect);
*************** package body Sem_Ch13 is
*** 2894,2899 ****
--- 3019,3025 ----
                                    | Aspect_Async_Writers
                                    | Aspect_Effective_Reads
                                    | Aspect_Effective_Writes
+                                   | Aspect_Preelaborable_Initialization
                    then
                       Error_Msg_N
                         ("aspect % not allowed for formal type declaration",
*************** package body Sem_Ch13 is
*** 2905,2911 ****
              --  Copy expression for later processing by the procedures
              --  Check_Aspect_At_[Freeze_Point | End_Of_Declarations]
  
!             Set_Entity (Id, New_Copy_Tree (Expr));
  
              --  Set Delay_Required as appropriate to aspect
  
--- 3031,3045 ----
              --  Copy expression for later processing by the procedures
              --  Check_Aspect_At_[Freeze_Point | End_Of_Declarations]
  
!             --  The expression may be a subprogram name, and can
!             --  be an operator name that appears as a string, but
!             --  requires its own analysis procedure (see sem_ch6).
! 
!             if Nkind (Expr) = N_Operator_Symbol then
!                Set_Entity (Id, Expr);
!             else
!                Set_Entity (Id, New_Copy_Tree (Expr));
!             end if;
  
              --  Set Delay_Required as appropriate to aspect
  
*************** package body Sem_Ch13 is
*** 2971,2980 ****
  
              if Delay_Required
  
!                and then A_Id = Aspect_Stable_Properties
                 --  ??? It seems like we should do this for all aspects, not
!                --  just Stable_Properties, but that causes as-yet-undiagnosed
!                --  regressions.
  
              then
                 Set_Has_Delayed_Aspects (E);
--- 3105,3115 ----
  
              if Delay_Required
  
!                and then (A_Id = Aspect_Stable_Properties
!                           or else A_Id = Aspect_Designated_Storage_Model
!                           or else A_Id = Aspect_Storage_Model_Type)
                 --  ??? It seems like we should do this for all aspects, not
!                --  just these, but that causes as-yet-undiagnosed regressions.
  
              then
                 Set_Has_Delayed_Aspects (E);
*************** package body Sem_Ch13 is
*** 3275,3280 ****
--- 3410,3424 ----
                         ("Predicate_Failure requires previous predicate" &
                          " specification", Aspect);
                       goto Continue;
+ 
+                   elsif not (Directly_Specified (E, Aspect_Dynamic_Predicate)
+                     or else Directly_Specified (E, Aspect_Static_Predicate)
+                     or else Directly_Specified (E, Aspect_Predicate))
+                   then
+                      Error_Msg_N
+                        ("Predicate_Failure requires accompanying" &
+                         " noninherited predicate specification", Aspect);
+                      goto Continue;
                    end if;
  
                    --  Construct the pragma
*************** package body Sem_Ch13 is
*** 3325,3330 ****
--- 3469,3481 ----
                    | Aspect_Interrupt_Priority
                    | Aspect_Priority
                 =>
+                   --  Verify the expression is static when Static_Priorities is
+                   --  enabled.
+ 
+                   if not Is_OK_Static_Expression (Expr) then
+                      Check_Restriction (Static_Priorities, Expr);
+                   end if;
+ 
                    if Nkind (N) in N_Subprogram_Body | N_Subprogram_Declaration
                    then
                       --  Analyze the aspect expression
*************** package body Sem_Ch13 is
*** 3519,3525 ****
  
                 begin
                    --  When aspect Abstract_State appears on a generic package,
!                   --  it is propageted to the package instance. The context in
                    --  this case is the instance spec.
  
                    if Nkind (Context) = N_Package_Instantiation then
--- 3670,3676 ----
  
                 begin
                    --  When aspect Abstract_State appears on a generic package,
!                   --  it is propagated to the package instance. The context in
                    --  this case is the instance spec.
  
                    if Nkind (Context) = N_Package_Instantiation then
*************** package body Sem_Ch13 is
*** 3752,3758 ****
  
                 begin
                    --  When aspect Initial_Condition appears on a generic
!                   --  package, it is propageted to the package instance. The
                    --  context in this case is the instance spec.
  
                    if Nkind (Context) = N_Package_Instantiation then
--- 3903,3909 ----
  
                 begin
                    --  When aspect Initial_Condition appears on a generic
!                   --  package, it is propagated to the package instance. The
                    --  context in this case is the instance spec.
  
                    if Nkind (Context) = N_Package_Instantiation then
*************** package body Sem_Ch13 is
*** 3800,3806 ****
  
                 begin
                    --  When aspect Initializes appears on a generic package,
!                   --  it is propageted to the package instance. The context
                    --  in this case is the instance spec.
  
                    if Nkind (Context) = N_Package_Instantiation then
--- 3951,3957 ----
  
                 begin
                    --  When aspect Initializes appears on a generic package,
!                   --  it is propagated to the package instance. The context
                    --  in this case is the instance spec.
  
                    if Nkind (Context) = N_Package_Instantiation then
*************** package body Sem_Ch13 is
*** 3887,3892 ****
--- 4038,4069 ----
                    Insert_Pragma (Aitem);
                    goto Continue;
  
+                --  No_Controlled_Parts, No_Task_Parts
+ 
+                when Aspect_No_Controlled_Parts | Aspect_No_Task_Parts =>
+ 
+                   --  Check appropriate type argument
+ 
+                   if not Is_Type (E) then
+                      Error_Msg_N
+                        ("aspect % can only be applied to types", E);
+                   end if;
+ 
+                   --  Disallow subtypes
+ 
+                   if Nkind (Declaration_Node (E)) = N_Subtype_Declaration then
+                      Error_Msg_N
+                        ("aspect % cannot be applied to subtypes", E);
+                   end if;
+ 
+                   --  Resolve the expression to a boolean
+ 
+                   if Present (Expr) then
+                      Check_Expr_Is_OK_Static_Expression (Expr, Any_Boolean);
+                   end if;
+ 
+                   goto Continue;
+ 
                 --  Obsolescent
  
                 when Aspect_Obsolescent => declare
*************** package body Sem_Ch13 is
*** 4109,4115 ****
  
                 --  Case 2e: Annotate aspect
  
!                when Aspect_Annotate =>
                    declare
                       Args  : List_Id;
                       Pargs : List_Id;
--- 4286,4292 ----
  
                 --  Case 2e: Annotate aspect
  
!                when Aspect_Annotate | Aspect_GNAT_Annotate =>
                    declare
                       Args  : List_Id;
                       Pargs : List_Id;
*************** package body Sem_Ch13 is
*** 4147,4154 ****
                          --  Must not be parenthesized
  
                          if Paren_Count (Expr) /= 0 then
!                            Error_Msg -- CODEFIX
!                              ("redundant parentheses", First_Sloc (Expr));
                          end if;
  
                          --  List of arguments is list of aggregate expressions
--- 4324,4331 ----
                          --  Must not be parenthesized
  
                          if Paren_Count (Expr) /= 0 then
!                            Error_Msg_F -- CODEFIX
!                              ("redundant parentheses", Expr);
                          end if;
  
                          --  List of arguments is list of aggregate expressions
*************** package body Sem_Ch13 is
*** 4232,4237 ****
--- 4409,4452 ----
                    Record_Rep_Item (E, Aspect);
                    goto Continue;
  
+                when Aspect_Designated_Storage_Model =>
+                   if not Extensions_Allowed then
+                      Error_Msg_N
+                        ("aspect only allowed if extensions enabled",
+                         Aspect);
+                      Error_Msg_N
+                        ("\unit must be compiled with -gnatX switch", Aspect);
+ 
+                   elsif not Is_Type (E)
+                     or else Ekind (E) /= E_Access_Type
+                   then
+                      Error_Msg_N
+                        ("can only be specified for pool-specific access type",
+                         Aspect);
+                   end if;
+ 
+                   Record_Rep_Item (E, Aspect);
+                   goto Continue;
+ 
+                when Aspect_Storage_Model_Type =>
+                   if not Extensions_Allowed then
+                      Error_Msg_N
+                        ("aspect only allowed if extensions enabled",
+                         Aspect);
+                      Error_Msg_N
+                        ("\unit must be compiled with -gnatX switch", Aspect);
+ 
+                   elsif not Is_Type (E)
+                     or else not Is_Immutably_Limited_Type (E)
+                   then
+                      Error_Msg_N
+                        ("can only be specified for immutably limited type",
+                         Aspect);
+                   end if;
+ 
+                   Record_Rep_Item (E, Aspect);
+                   goto Continue;
+ 
                 when Aspect_Integer_Literal
                    | Aspect_Real_Literal
                    | Aspect_String_Literal
*************** package body Sem_Ch13 is
*** 4243,4249 ****
                       goto Continue;
                    end if;
  
!                   if Ada_Version < Ada_2020 then
                       Check_Restriction
                         (No_Implementation_Aspect_Specifications, N);
                    end if;
--- 4458,4464 ----
                       goto Continue;
                    end if;
  
!                   if Ada_Version < Ada_2022 then
                       Check_Restriction
                         (No_Implementation_Aspect_Specifications, N);
                    end if;
*************** package body Sem_Ch13 is
*** 4319,4324 ****
--- 4534,4571 ----
                       goto Continue;
                    end if;
  
+                   --  Remember class-wide conditions; they will be merged
+                   --  with inherited conditions.
+ 
+                   if Class_Present (Aspect)
+                     and then A_Id in Aspect_Pre | Aspect_Post
+                     and then Is_Subprogram (E)
+                     and then not Is_Ignored_Ghost_Entity (E)
+                   then
+                      if A_Id = Aspect_Pre then
+                         if Is_Ignored (Aspect) then
+                            Set_Ignored_Class_Preconditions (E,
+                              New_Copy_Tree (Expr));
+                         else
+                            Set_Class_Preconditions (E, New_Copy_Tree (Expr));
+                         end if;
+ 
+                      --  Postconditions may split into separate aspects, and we
+                      --  remember the expression before such split (i.e. when
+                      --  the first postcondition is processed).
+ 
+                      elsif No (Class_Postconditions (E))
+                        and then No (Ignored_Class_Postconditions (E))
+                      then
+                         if Is_Ignored (Aspect) then
+                            Set_Ignored_Class_Postconditions (E,
+                              New_Copy_Tree (Expr));
+                         else
+                            Set_Class_Postconditions (E, New_Copy_Tree (Expr));
+                         end if;
+                      end if;
+                   end if;
+ 
                    --  If the expressions is of the form A and then B, then
                    --  we generate separate Pre/Post aspects for the separate
                    --  clauses. Since we allow multiple pragmas, there is no
*************** package body Sem_Ch13 is
*** 4442,4449 ****
                    --  parentheses).
  
                    if Paren_Count (Expr) /= 0 then
!                      Error_Msg -- CODEFIX
!                        ("redundant parentheses", First_Sloc (Expr));
                       goto Continue;
                    end if;
  
--- 4689,4696 ----
                    --  parentheses).
  
                    if Paren_Count (Expr) /= 0 then
!                      Error_Msg_F -- CODEFIX
!                        ("redundant parentheses", Expr);
                       goto Continue;
                    end if;
  
*************** package body Sem_Ch13 is
*** 4560,4566 ****
                       Analyze_Aspect_Disable_Controlled;
                       goto Continue;
  
!                   --  Ada 202x (AI12-0129): Exclusive_Functions
  
                    elsif A_Id = Aspect_Exclusive_Functions then
                       if Ekind (E) /= E_Protected_Type then
--- 4807,4813 ----
                       Analyze_Aspect_Disable_Controlled;
                       goto Continue;
  
!                   --  Ada 2022 (AI12-0129): Exclusive_Functions
  
                    elsif A_Id = Aspect_Exclusive_Functions then
                       if Ekind (E) /= E_Protected_Type then
*************** package body Sem_Ch13 is
*** 4573,4594 ****
  
                       goto Continue;
  
!                   --  Ada 202x (AI12-0363): Full_Access_Only
  
                    elsif A_Id = Aspect_Full_Access_Only then
!                      if Ada_Version < Ada_2020 then
!                         Error_Msg_N
!                           ("aspect % is an Ada 202x feature", Aspect);
!                         Error_Msg_N ("\compile with -gnat2020", Aspect);
!                      end if;
  
!                   --  Ada 202x (AI12-0075): static expression functions
  
                    elsif A_Id = Aspect_Static then
                       Analyze_Aspect_Static;
                       goto Continue;
  
!                   --  Ada 2020 (AI12-0279)
  
                    elsif A_Id = Aspect_Yield then
                       Analyze_Aspect_Yield;
--- 4820,4837 ----
  
                       goto Continue;
  
!                   --  Ada 2022 (AI12-0363): Full_Access_Only
  
                    elsif A_Id = Aspect_Full_Access_Only then
!                      Error_Msg_Ada_2022_Feature ("aspect %", Sloc (Aspect));
  
!                   --  Ada 2022 (AI12-0075): static expression functions
  
                    elsif A_Id = Aspect_Static then
                       Analyze_Aspect_Static;
                       goto Continue;
  
!                   --  Ada 2022 (AI12-0279)
  
                    elsif A_Id = Aspect_Yield then
                       Analyze_Aspect_Yield;
*************** package body Sem_Ch13 is
*** 4860,4873 ****
                       Error_Msg_Name_1 := Aspect_Names (A_Id);
                       Error_Msg_Sloc := Sloc (Inherited_Aspect);
  
!                      Error_Msg
                         ("overriding aspect specification for "
                            & "nonoverridable aspect % does not confirm "
                            & "aspect specification inherited from #",
!                         Sloc (Aspect));
                    end if;
                 end;
              end if;
           end Analyze_One_Aspect;
  
           Next (Aspect);
--- 5103,5118 ----
                       Error_Msg_Name_1 := Aspect_Names (A_Id);
                       Error_Msg_Sloc := Sloc (Inherited_Aspect);
  
!                      Error_Msg_N
                         ("overriding aspect specification for "
                            & "nonoverridable aspect % does not confirm "
                            & "aspect specification inherited from #",
!                         Aspect);
                    end if;
                 end;
              end if;
+          exception
+             when Aspect_Exit => null;
           end Analyze_One_Aspect;
  
           Next (Aspect);
*************** package body Sem_Ch13 is
*** 5093,5099 ****
        --  This routine checks if the aspect for U_Ent being given by attribute
        --  definition clause N is for an aspect that has already been specified,
        --  and if so gives an error message. If there is a duplicate, True is
!       --  returned, otherwise if there is no error, False is returned.
  
        procedure Check_Indexing_Functions;
        --  Check that the function in Constant_Indexing or Variable_Indexing
--- 5338,5346 ----
        --  This routine checks if the aspect for U_Ent being given by attribute
        --  definition clause N is for an aspect that has already been specified,
        --  and if so gives an error message. If there is a duplicate, True is
!       --  returned, otherwise there is no error, and False is returned. Size
!       --  and Value_Size are considered to conflict, but for compatibility,
!       --  this is merely a warning.
  
        procedure Check_Indexing_Functions;
        --  Check that the function in Constant_Indexing or Variable_Indexing
*************** package body Sem_Ch13 is
*** 5142,5183 ****
  
              F := First_Formal (Subp);
  
!             if No (F) or else Etype (F) /= Class_Wide_Type (RTE (RE_Sink)) then
                 return False;
              end if;
  
!             Next_Formal (F);
  
-             if Parameter_Mode (F) /= E_In_Parameter then
                 return False;
              end if;
  
              Typ := Etype (F);
  
              --  Verify that the prefix of the attribute and the local name for
              --  the type of the formal match.
  
!             if Typ /= Ent then
!                return False;
!             end if;
  
-             if Present (Next_Formal (F)) then
                 return False;
  
!             elsif not Is_Scalar_Type (Typ)
!               and then not Is_First_Subtype (Typ)
!             then
!                if Report and not Is_First_Subtype (Typ) then
                    Error_Msg_N
!                     ("subtype of formal in Put_Image operation must be a "
!                      & "first subtype", Parameter_Type (Parent (F)));
                 end if;
  
                 return False;
  
!             else
!                return True;
              end if;
           end Has_Good_Profile;
  
        --  Start of processing for Analyze_Put_Image_TSS_Definition
--- 5389,5452 ----
  
              F := First_Formal (Subp);
  
!             if No (F) then
                 return False;
              end if;
  
!             if Base_Type (Etype (F))
!               /= Class_Wide_Type (RTE (RE_Root_Buffer_Type))
!             then
!                if Report then
!                   Error_Msg_N
!                     ("wrong type for Put_Image procedure''s first parameter",
!                      Parameter_Type (Parent (F)));
!                end if;
! 
!                return False;
!             end if;
! 
!             if Parameter_Mode (F) /= E_In_Out_Parameter then
!                if Report then
!                   Error_Msg_N
!                     ("wrong mode for Put_Image procedure''s first parameter",
!                      Parent (F));
!                end if;
  
                 return False;
              end if;
  
+             Next_Formal (F);
+ 
              Typ := Etype (F);
  
              --  Verify that the prefix of the attribute and the local name for
              --  the type of the formal match.
  
!             if Base_Type (Typ) /= Base_Type (Ent) then
!                if Report then
!                   Error_Msg_N
!                     ("wrong type for Put_Image procedure''s second parameter",
!                      Parameter_Type (Parent (F)));
!                end if;
  
                 return False;
+             end if;
  
!             if Parameter_Mode (F) /= E_In_Parameter then
!                if Report then
                    Error_Msg_N
!                     ("wrong mode for Put_Image procedure''s second parameter",
!                      Parent (F));
                 end if;
  
                 return False;
+             end if;
  
!             if Present (Next_Formal (F)) then
!                return False;
              end if;
+ 
+             return True;
           end Has_Good_Profile;
  
        --  Start of processing for Analyze_Put_Image_TSS_Definition
*************** package body Sem_Ch13 is
*** 5296,5302 ****
  
              if No (F)
                or else Ekind (Etype (F)) /= E_Anonymous_Access_Type
!               or else Designated_Type (Etype (F)) /=
                          Class_Wide_Type (RTE (RE_Root_Stream_Type))
              then
                 return False;
--- 5565,5571 ----
  
              if No (F)
                or else Ekind (Etype (F)) /= E_Anonymous_Access_Type
!               or else Base_Type (Designated_Type (Etype (F))) /=
                          Class_Wide_Type (RTE (RE_Root_Stream_Type))
              then
                 return False;
*************** package body Sem_Ch13 is
*** 5897,5903 ****
        ----------------------
  
        function Duplicate_Clause return Boolean is
!          A : Node_Id;
  
        begin
           --  Nothing to do if this attribute definition clause comes from
--- 6166,6212 ----
        ----------------------
  
        function Duplicate_Clause return Boolean is
! 
!          function Check_One_Attr (Attr_1, Attr_2 : Name_Id) return Boolean;
!          --  Check for one attribute; Attr_1 is the attribute_designator we are
!          --  looking for. Attr_2 is the attribute_designator of the current
!          --  node. Normally, this is called just once by Duplicate_Clause, with
!          --  Attr_1 = Attr_2. However, it needs to be called twice for Size and
!          --  Value_Size, because these mean the same thing. For compatibility,
!          --  we allow specifying both Size and Value_Size, but only if the two
!          --  sizes are equal.
! 
!          --------------------
!          -- Check_One_Attr --
!          --------------------
! 
!          function Check_One_Attr (Attr_1, Attr_2 : Name_Id) return Boolean is
!             A : constant Node_Id :=
!               Get_Rep_Item (U_Ent, Attr_1, Check_Parents => False);
!          begin
!             if Present (A) then
!                if Attr_1 = Attr_2 then
!                   Error_Msg_Name_1 := Attr_1;
!                   Error_Msg_Sloc := Sloc (A);
!                   Error_Msg_NE ("aspect% for & previously given#", N, U_Ent);
! 
!                else
!                   pragma Assert (Attr_1 in Name_Size | Name_Value_Size);
!                   pragma Assert (Attr_2 in Name_Size | Name_Value_Size);
! 
!                   Error_Msg_Name_1 := Attr_2;
!                   Error_Msg_Name_2 := Attr_1;
!                   Error_Msg_Sloc := Sloc (A);
!                   Error_Msg_NE ("?% for & conflicts with % #", N, U_Ent);
!                end if;
! 
!                return True;
!             end if;
! 
!             return False;
!          end Check_One_Attr;
! 
!       --  Start of processing for Duplicate_Clause
  
        begin
           --  Nothing to do if this attribute definition clause comes from
*************** package body Sem_Ch13 is
*** 5909,5929 ****
              return False;
           end if;
  
!          --  Otherwise current clause may duplicate previous clause, or a
!          --  previously given pragma or aspect specification for the same
!          --  aspect.
! 
!          A := Get_Rep_Item (U_Ent, Chars (N), Check_Parents => False);
! 
!          if Present (A) then
!             Error_Msg_Name_1 := Chars (N);
!             Error_Msg_Sloc := Sloc (A);
  
!             Error_Msg_NE ("aspect% for & previously given#", N, U_Ent);
              return True;
           end if;
  
!          return False;
        end Duplicate_Clause;
  
     --  Start of processing for Analyze_Attribute_Definition_Clause
--- 6218,6237 ----
              return False;
           end if;
  
!          --  Special cases for Size and Value_Size
  
!          if (Chars (N) = Name_Size
!                and then Check_One_Attr (Name_Value_Size, Name_Size))
!            or else
!             (Chars (N) = Name_Value_Size
!                and then Check_One_Attr (Name_Size, Name_Value_Size))
!          then
              return True;
           end if;
  
!          --  Normal case (including Size and Value_Size)
! 
!          return Check_One_Attr (Chars (N), Chars (N));
        end Duplicate_Clause;
  
     --  Start of processing for Analyze_Attribute_Definition_Clause
*************** package body Sem_Ch13 is
*** 5941,5947 ****
  
        Check_Restriction_No_Use_Of_Attribute (N);
  
!       if Get_Aspect_Id (Chars (N)) /= No_Aspect then
           --  6.1/3 No_Specification_of_Aspect: Identifies an aspect for which
           --    no aspect_specification, attribute_definition_clause, or pragma
           --    is given.
--- 6249,6255 ----
  
        Check_Restriction_No_Use_Of_Attribute (N);
  
!       if Is_Aspect_Id (Chars (N)) then
           --  6.1/3 No_Specification_of_Aspect: Identifies an aspect for which
           --    no aspect_specification, attribute_definition_clause, or pragma
           --    is given.
*************** package body Sem_Ch13 is
*** 6470,6476 ****
              elsif Duplicate_Clause then
                 null;
  
!             elsif Align /= No_Uint then
                 Set_Has_Alignment_Clause (U_Ent);
  
                 --  Tagged type case, check for attempt to set alignment to a
--- 6778,6784 ----
              elsif Duplicate_Clause then
                 null;
  
!             elsif Present (Align) then
                 Set_Has_Alignment_Clause (U_Ent);
  
                 --  Tagged type case, check for attempt to set alignment to a
*************** package body Sem_Ch13 is
*** 6560,6566 ****
              elsif Rep_Item_Too_Early (Btype, N) then
                 null;
  
!             elsif Csize /= No_Uint then
                 Check_Size (Expr, Ctyp, Csize, Biased);
  
                 --  For the biased case, build a declaration for a subtype that
--- 6868,6874 ----
              elsif Rep_Item_Too_Early (Btype, N) then
                 null;
  
!             elsif Present (Csize) then
                 Check_Size (Expr, Ctyp, Csize, Biased);
  
                 --  For the biased case, build a declaration for a subtype that
*************** package body Sem_Ch13 is
*** 6585,6593 ****
                    Analyze (Decl, Suppress => All_Checks);
  
                    Set_Has_Delayed_Freeze        (New_Ctyp, False);
!                   Init_Esize                    (New_Ctyp);
                    Set_RM_Size                   (New_Ctyp, Csize);
!                   Init_Alignment                (New_Ctyp);
                    Set_Is_Itype                  (New_Ctyp, True);
                    Set_Associated_Node_For_Itype (New_Ctyp, U_Ent);
  
--- 6893,6901 ----
                    Analyze (Decl, Suppress => All_Checks);
  
                    Set_Has_Delayed_Freeze        (New_Ctyp, False);
!                   Reinit_Esize                  (New_Ctyp);
                    Set_RM_Size                   (New_Ctyp, Csize);
!                   Reinit_Alignment              (New_Ctyp);
                    Set_Is_Itype                  (New_Ctyp, True);
                    Set_Associated_Node_For_Itype (New_Ctyp, U_Ent);
  
*************** package body Sem_Ch13 is
*** 6604,6610 ****
                   and then RM_Size (Ctyp) /= Csize
                 then
                    Error_Msg_NE
!                     ("component size overrides size clause for&?S?", N, Ctyp);
                 end if;
  
                 Set_Has_Component_Size_Clause (Btype, True);
--- 6912,6918 ----
                   and then RM_Size (Ctyp) /= Csize
                 then
                    Error_Msg_NE
!                     ("component size overrides size clause for&?.s?", N, Ctyp);
                 end if;
  
                 Set_Has_Component_Size_Clause (Btype, True);
*************** package body Sem_Ch13 is
*** 6900,6906 ****
              elsif Duplicate_Clause then
                 null;
  
!             elsif Radix /= No_Uint then
                 Set_Has_Machine_Radix_Clause (U_Ent);
                 Set_Has_Non_Standard_Rep (Base_Type (U_Ent));
  
--- 7208,7214 ----
              elsif Duplicate_Clause then
                 null;
  
!             elsif Present (Radix) then
                 Set_Has_Machine_Radix_Clause (U_Ent);
                 Set_Has_Non_Standard_Rep (Base_Type (U_Ent));
  
*************** package body Sem_Ch13 is
*** 6938,6944 ****
              else
                 Check_Size (Expr, U_Ent, Size, Biased);
  
!                if Size <= 0 then
                    Error_Msg_N ("Object_Size must be positive", Expr);
  
                 elsif Is_Scalar_Type (U_Ent) then
--- 7246,7252 ----
              else
                 Check_Size (Expr, U_Ent, Size, Biased);
  
!                if No (Size) or else Size <= 0 then
                    Error_Msg_N ("Object_Size must be positive", Expr);
  
                 elsif Is_Scalar_Type (U_Ent) then
*************** package body Sem_Ch13 is
*** 7070,7178 ****
                 Set_SSO_Set_High_By_Default (Base_Type (U_Ent), False);
              end if;
  
!          ----------
!          -- Size --
!          ----------
  
!          --  Size attribute definition clause
  
!          when Attribute_Size => Size : declare
              Size   : constant Uint := Static_Integer (Expr);
!             Etyp   : Entity_Id;
!             Biased : Boolean;
  
           begin
              FOnly := True;
  
!             if Duplicate_Clause then
!                null;
  
!             elsif not Is_Type (U_Ent)
!               and then Ekind (U_Ent) /= E_Variable
!               and then Ekind (U_Ent) /= E_Constant
!             then
!                Error_Msg_N ("size cannot be given for &", Nam);
  
              elsif Is_Array_Type (U_Ent)
                and then not Is_Constrained (U_Ent)
              then
                 Error_Msg_N
!                  ("size cannot be given for unconstrained array", Nam);
  
!             elsif Size /= No_Uint then
!                if Is_Type (U_Ent) then
!                   Etyp := U_Ent;
!                else
!                   Etyp := Etype (U_Ent);
!                end if;
  
!                --  Check size, note that Gigi is in charge of checking that the
!                --  size of an array or record type is OK. Also we do not check
!                --  the size in the ordinary fixed-point case, since it is too
!                --  early to do so (there may be subsequent small clause that
!                --  affects the size). We can check the size if a small clause
!                --  has already been given.
  
!                if not Is_Ordinary_Fixed_Point_Type (U_Ent)
!                  or else Has_Small_Clause (U_Ent)
!                then
!                   Check_Size (Expr, Etyp, Size, Biased);
!                   Set_Biased (U_Ent, N, "size clause", Biased);
!                end if;
  
!                --  For types set RM_Size and Esize if possible
  
!                if Is_Type (U_Ent) then
!                   Set_RM_Size (U_Ent, Size);
  
!                   --  For elementary types, increase Object_Size to power of 2,
!                   --  but not less than a storage unit in any case (normally
!                   --  this means it will be byte addressable).
  
!                   --  For all other types, nothing else to do, we leave Esize
!                   --  (object size) unset, the back end will set it from the
!                   --  size and alignment in an appropriate manner.
  
!                   --  In both cases, we check whether the alignment must be
!                   --  reset in the wake of the size change.
  
!                   if Is_Elementary_Type (U_Ent) then
!                      if Size <= System_Storage_Unit then
!                         Init_Esize (U_Ent, System_Storage_Unit);
!                      elsif Size <= 16 then
!                         Init_Esize (U_Ent, 16);
!                      elsif Size <= 32 then
!                         Init_Esize (U_Ent, 32);
!                      else
!                         Set_Esize  (U_Ent, (Size + 63) / 64 * 64);
                       end if;
  
!                      Alignment_Check_For_Size_Change (U_Ent, Esize (U_Ent));
!                   else
!                      Alignment_Check_For_Size_Change (U_Ent, Size);
!                   end if;
  
!                --  For objects, set Esize only
  
!                else
!                   if Is_Elementary_Type (Etyp)
!                     and then Size /= System_Storage_Unit
!                     and then Size /= 16
!                     and then Size /= 32
!                     and then Size /= 64
!                     and then Size /= System_Max_Integer_Size
!                   then
!                      Error_Msg_Uint_1 := UI_From_Int (System_Storage_Unit);
!                      Error_Msg_Uint_2 := UI_From_Int (System_Max_Integer_Size);
!                      Error_Msg_N
!                        ("size for primitive object must be a power of 2 in "
!                         & "the range ^-^", N);
                    end if;
  
!                   Set_Esize (U_Ent, Size);
!                end if;
! 
!                Set_Has_Size_Clause (U_Ent);
              end if;
           end Size;
  
--- 7378,7514 ----
                 Set_SSO_Set_High_By_Default (Base_Type (U_Ent), False);
              end if;
  
!          ------------------------
!          -- Size or Value_Size --
!          ------------------------
  
!          --  Size or Value_Size attribute definition clause. These are treated
!          --  the same, except that Size is allowed on objects, and Value_Size
!          --  is allowed on nonfirst subtypes. First subtypes allow both Size
!          --  and Value_Size; the treatment is the same for both.
  
!          when Attribute_Size | Attribute_Value_Size => Size : declare
              Size   : constant Uint := Static_Integer (Expr);
! 
!             Attr_Name : constant String :=
!               (if Id = Attribute_Size then "size"
!                elsif Id = Attribute_Value_Size then "value size"
!                else ""); -- can't happen
!             --  Name of the attribute for printing in messages
! 
!             OK_Prefix : constant Boolean :=
!               (if Id = Attribute_Size then
!                 Ekind (U_Ent) in Type_Kind | Constant_Or_Variable_Kind
!                elsif Id = Attribute_Value_Size then
!                 Ekind (U_Ent) in Type_Kind
!                else False); -- can't happen
!             --  For X'Size, X can be a type or object; for X'Value_Size,
!             --  X can be a type. Note that we already checked that 'Size
!             --  can be specified only for a first subtype.
  
           begin
              FOnly := True;
  
!             if not OK_Prefix then
!                Error_Msg_N (Attr_Name & " cannot be given for &", Nam);
  
!             elsif Duplicate_Clause then
!                null;
  
              elsif Is_Array_Type (U_Ent)
                and then not Is_Constrained (U_Ent)
              then
                 Error_Msg_N
!                  (Attr_Name & " cannot be given for unconstrained array", Nam);
  
!             elsif Present (Size) then
!                declare
!                   Etyp : constant Entity_Id :=
!                     (if Is_Type (U_Ent) then U_Ent else Etype (U_Ent));
  
!                begin
!                   --  Check size, note that Gigi is in charge of checking that
!                   --  the size of an array or record type is OK. Also we do not
!                   --  check the size in the ordinary fixed-point case, since
!                   --  it is too early to do so (there may be subsequent small
!                   --  clause that affects the size). We can check the size if
!                   --  a small clause has already been given.
  
!                   if not Is_Ordinary_Fixed_Point_Type (U_Ent)
!                     or else Has_Small_Clause (U_Ent)
!                   then
!                      declare
!                         Biased : Boolean;
!                      begin
!                         Check_Size (Expr, Etyp, Size, Biased);
!                         Set_Biased (U_Ent, N, Attr_Name & " clause", Biased);
!                      end;
!                   end if;
  
!                   --  For types, set RM_Size and Esize if appropriate
  
!                   if Is_Type (U_Ent) then
!                      Set_RM_Size (U_Ent, Size);
  
!                      --  If we are specifying the Size or Value_Size of a
!                      --  first subtype, then for elementary types, increase
!                      --  Object_Size to power of 2, but not less than a storage
!                      --  unit in any case (normally this means it will be byte
!                      --  addressable).
  
!                      --  For all other types, nothing else to do, we leave
!                      --  Esize (object size) unset; the back end will set it
!                      --  from the size and alignment in an appropriate manner.
  
!                      --  In both cases, we check whether the alignment must be
!                      --  reset in the wake of the size change.
  
!                      --  For nonfirst subtypes ('Value_Size only), we do
!                      --  nothing here.
! 
!                      if Is_First_Subtype (U_Ent) then
!                         if Is_Elementary_Type (U_Ent) then
!                            if Size <= System_Storage_Unit then
!                               Set_Esize
!                                 (U_Ent, UI_From_Int (System_Storage_Unit));
!                            elsif Size <= 16 then
!                               Set_Esize (U_Ent, Uint_16);
!                            elsif Size <= 32 then
!                               Set_Esize (U_Ent, Uint_32);
!                            else
!                               Set_Esize (U_Ent, (Size + 63) / 64 * 64);
!                            end if;
! 
!                            Alignment_Check_For_Size_Change
!                              (U_Ent, Esize (U_Ent));
!                         else
!                            Alignment_Check_For_Size_Change (U_Ent, Size);
!                         end if;
                       end if;
  
!                   --  For Object'Size, set Esize only
  
!                   else
!                      if Is_Elementary_Type (Etyp)
!                        and then Size /= System_Storage_Unit
!                        and then Size /= 16
!                        and then Size /= 32
!                        and then Size /= 64
!                        and then Size /= System_Max_Integer_Size
!                      then
!                         Error_Msg_Uint_1 := UI_From_Int (System_Storage_Unit);
!                         Error_Msg_Uint_2 :=
!                           UI_From_Int (System_Max_Integer_Size);
!                         Error_Msg_N
!                           ("size for primitive object must be a power of 2 in "
!                            & "the range ^-^", N);
!                      end if;
  
!                      Set_Esize (U_Ent, Size);
                    end if;
  
!                   Set_Has_Size_Clause (U_Ent);
!                end;
              end if;
           end Size;
  
*************** package body Sem_Ch13 is
*** 7438,7446 ****
              --    type Q is access Float;
              --    for Q'Storage_Size use T'Storage_Size; -- incorrect
  
!             if RTE_Available (RE_Stack_Bounded_Pool)
!               and then Base_Type (T) = RTE (RE_Stack_Bounded_Pool)
!             then
                 Error_Msg_N ("non-shareable internal Pool", Expr);
                 return;
              end if;
--- 7774,7780 ----
              --    type Q is access Float;
              --    for Q'Storage_Size use T'Storage_Size; -- incorrect
  
!             if Is_RTE (Base_Type (T), RE_Stack_Bounded_Pool) then
                 Error_Msg_N ("non-shareable internal Pool", Expr);
                 return;
              end if;
*************** package body Sem_Ch13 is
*** 7612,7628 ****
                 null;
  
              elsif Is_Elementary_Type (U_Ent) then
!                if Size /= System_Storage_Unit
!                  and then Size /= System_Storage_Unit * 2
!                  and then Size /= System_Storage_Unit * 3
!                  and then Size /= System_Storage_Unit * 4
!                  and then Size /= System_Storage_Unit * 8
                 then
                    Error_Msg_N
                      ("stream size for elementary type must be 8, 16, 24, " &
                       "32 or 64", N);
  
!                elsif RM_Size (U_Ent) > Size then
                    Error_Msg_Uint_1 := RM_Size (U_Ent);
                    Error_Msg_N
                      ("stream size for elementary type must be 8, 16, 24, " &
--- 7946,7967 ----
                 null;
  
              elsif Is_Elementary_Type (U_Ent) then
!                --  Size will be empty if we already detected an error
!                --  (e.g. Expr is of the wrong type); we might as well
!                --  give the useful hint below even in that case.
! 
!                if No (Size) or else
!                  (Size /= System_Storage_Unit
!                   and then Size /= System_Storage_Unit * 2
!                   and then Size /= System_Storage_Unit * 3
!                   and then Size /= System_Storage_Unit * 4
!                   and then Size /= System_Storage_Unit * 8)
                 then
                    Error_Msg_N
                      ("stream size for elementary type must be 8, 16, 24, " &
                       "32 or 64", N);
  
!                elsif Known_RM_Size (U_Ent) and then RM_Size (U_Ent) > Size then
                    Error_Msg_Uint_1 := RM_Size (U_Ent);
                    Error_Msg_N
                      ("stream size for elementary type must be 8, 16, 24, " &
*************** package body Sem_Ch13 is
*** 7636,7674 ****
              end if;
           end Stream_Size;
  
-          ----------------
-          -- Value_Size --
-          ----------------
- 
-          --  Value_Size attribute definition clause
- 
-          when Attribute_Value_Size => Value_Size : declare
-             Size   : constant Uint := Static_Integer (Expr);
-             Biased : Boolean;
- 
-          begin
-             if not Is_Type (U_Ent) then
-                Error_Msg_N ("Value_Size cannot be given for &", Nam);
- 
-             elsif Duplicate_Clause then
-                null;
- 
-             elsif Is_Array_Type (U_Ent)
-               and then not Is_Constrained (U_Ent)
-             then
-                Error_Msg_N
-                  ("Value_Size cannot be given for unconstrained array", Nam);
- 
-             else
-                if Is_Elementary_Type (U_Ent) then
-                   Check_Size (Expr, U_Ent, Size, Biased);
-                   Set_Biased (U_Ent, N, "value size clause", Biased);
-                end if;
- 
-                Set_RM_Size (U_Ent, Size);
-             end if;
-          end Value_Size;
- 
           -----------------------
           -- Variable_Indexing --
           -----------------------
--- 7975,7980 ----
*************** package body Sem_Ch13 is
*** 7730,7736 ****
  
        if Etype (Expression (N)) = Any_Type then
           return;
!       elsif Etype (Expression (N)) /= RTE (RE_Asm_Insn) then
           Error_Msg_N ("incorrect type for code statement", N);
           return;
        end if;
--- 8036,8042 ----
  
        if Etype (Expression (N)) = Any_Type then
           return;
!       elsif not Is_RTE (Etype (Expression (N)), RE_Asm_Insn) then
           Error_Msg_N ("incorrect type for code statement", N);
           return;
        end if;
*************** package body Sem_Ch13 is
*** 7909,7917 ****
        --  Check that the expression is a proper aggregate (no parentheses)
  
        elsif Paren_Count (Aggr) /= 0 then
!          Error_Msg
!            ("extra parentheses surrounding aggregate not allowed",
!             First_Sloc (Aggr));
           return;
  
        --  All tests passed, so set rep clause in place
--- 8215,8231 ----
        --  Check that the expression is a proper aggregate (no parentheses)
  
        elsif Paren_Count (Aggr) /= 0 then
!          Error_Msg_F
!            ("extra parentheses surrounding aggregate not allowed", Aggr);
!          return;
! 
!       --  Reject the mixing of named and positional entries in the aggregate
! 
!       elsif Present (Expressions (Aggr))
!         and then Present (Component_Associations (Aggr))
!       then
!          Error_Msg_N ("cannot mix positional and named entries in "
!                        & "enumeration rep clause", N);
           return;
  
        --  All tests passed, so set rep clause in place
*************** package body Sem_Ch13 is
*** 7928,7934 ****
  
        Elit := First_Literal (Enumtype);
  
!       --  First the positional entries if any
  
        if Present (Expressions (Aggr)) then
           Expr := First (Expressions (Aggr));
--- 8242,8248 ----
  
        Elit := First_Literal (Enumtype);
  
!       --  Process positional entries
  
        if Present (Expressions (Aggr)) then
           Expr := First (Expressions (Aggr));
*************** package body Sem_Ch13 is
*** 7944,7967 ****
              --  the list. The final checks for completeness and ordering are
              --  skipped in this case.
  
!             if Val = No_Uint then
                 Err := True;
  
              elsif Val < Lo or else Hi < Val then
                 Error_Msg_N ("value outside permitted range", Expr);
                 Err := True;
              end if;
  
-             Set_Enumeration_Rep (Elit, Val);
-             Set_Enumeration_Rep_Expr (Elit, Expr);
              Next (Expr);
              Next (Elit);
           end loop;
-       end if;
  
!       --  Now process the named entries if present
  
!       if Present (Component_Associations (Aggr)) then
           Assoc := First (Component_Associations (Aggr));
           while Present (Assoc) loop
              Choice := First (Choices (Assoc));
--- 8258,8282 ----
              --  the list. The final checks for completeness and ordering are
              --  skipped in this case.
  
!             if No (Val) then
                 Err := True;
  
              elsif Val < Lo or else Hi < Val then
                 Error_Msg_N ("value outside permitted range", Expr);
                 Err := True;
+ 
+             else
+                Set_Enumeration_Rep (Elit, Val);
+                Set_Enumeration_Rep_Expr (Elit, Expr);
              end if;
  
              Next (Expr);
              Next (Elit);
           end loop;
  
!       --  Process named entries
  
!       elsif Present (Component_Associations (Aggr)) then
           Assoc := First (Component_Associations (Aggr));
           while Present (Assoc) loop
              Choice := First (Choices (Assoc));
*************** package body Sem_Ch13 is
*** 8022,8036 ****
                          Expr := Expression (Assoc);
                          Val := Static_Integer (Expr);
  
!                         if Val = No_Uint then
                             Err := True;
  
                          elsif Val < Lo or else Hi < Val then
                             Error_Msg_N ("value outside permitted range", Expr);
                             Err := True;
-                         end if;
  
!                         Set_Enumeration_Rep (Elit, Val);
                       end if;
                    end if;
                 end if;
--- 8337,8352 ----
                          Expr := Expression (Assoc);
                          Val := Static_Integer (Expr);
  
!                         if No (Val) then
                             Err := True;
  
                          elsif Val < Lo or else Hi < Val then
                             Error_Msg_N ("value outside permitted range", Expr);
                             Err := True;
  
!                         else
!                            Set_Enumeration_Rep (Elit, Val);
!                         end if;
                       end if;
                    end if;
                 end if;
*************** package body Sem_Ch13 is
*** 8056,8067 ****
              else
                 Val := Enumeration_Rep (Elit);
  
!                if Min = No_Uint then
                    Min := Val;
                 end if;
  
!                if Val /= No_Uint then
!                   if Max /= No_Uint and then Val <= Max then
                       Error_Msg_NE
                         ("enumeration value for& not ordered!",
                          Enumeration_Rep_Expr (Elit), Elit);
--- 8372,8383 ----
              else
                 Val := Enumeration_Rep (Elit);
  
!                if No (Min) then
                    Min := Val;
                 end if;
  
!                if Present (Val) then
!                   if Present (Max) and then Val <= Max then
                       Error_Msg_NE
                         ("enumeration value for& not ordered!",
                          Enumeration_Rep_Expr (Elit), Elit);
*************** package body Sem_Ch13 is
*** 8124,8132 ****
                 Set_Enum_Esize (Enumtype);
              end if;
  
!             Set_RM_Size   (Base_Type (Enumtype), RM_Size   (Enumtype));
!             Set_Esize     (Base_Type (Enumtype), Esize     (Enumtype));
!             Set_Alignment (Base_Type (Enumtype), Alignment (Enumtype));
           end;
        end if;
  
--- 8440,8449 ----
                 Set_Enum_Esize (Enumtype);
              end if;
  
!             Set_RM_Size (Base_Type (Enumtype), RM_Size   (Enumtype));
!             Set_Esize   (Base_Type (Enumtype), Esize     (Enumtype));
! 
!             Copy_Alignment (To => Base_Type (Enumtype), From => Enumtype);
           end;
        end if;
  
*************** package body Sem_Ch13 is
*** 8345,8353 ****
              Fbit  := Static_Integer (First_Bit (CC));
              Lbit  := Static_Integer (Last_Bit  (CC));
  
!             if Posit /= No_Uint
!               and then Fbit /= No_Uint
!               and then Lbit /= No_Uint
              then
                 if Posit < 0 then
                    Error_Msg_N ("position cannot be negative", Position (CC));
--- 8662,8670 ----
              Fbit  := Static_Integer (First_Bit (CC));
              Lbit  := Static_Integer (Last_Bit  (CC));
  
!             if Present (Posit)
!               and then Present (Fbit)
!               and then Present (Lbit)
              then
                 if Posit < 0 then
                    Error_Msg_N ("position cannot be negative", Position (CC));
*************** package body Sem_Ch13 is
*** 8466,8472 ****
  
                       Generate_Reference
                         (Comp, Component_Name (CC), Set_Ref => False);
!                      Set_Entity (Component_Name (CC), Comp);
  
                       --  Update Fbit and Lbit to the actual bit number
  
--- 8783,8789 ----
  
                       Generate_Reference
                         (Comp, Component_Name (CC), Set_Ref => False);
!                      Set_Entity_With_Checks (Component_Name (CC), Comp);
  
                       --  Update Fbit and Lbit to the actual bit number
  
*************** package body Sem_Ch13 is
*** 8488,8502 ****
                          Set_Normalized_First_Bit (Comp, Fbit mod SSU);
                          Set_Normalized_Position  (Comp, Fbit / SSU);
  
-                         Set_Normalized_Position_Max
-                           (Comp, Normalized_Position (Comp));
- 
                          if Warn_On_Overridden_Size
                            and then Has_Size_Clause (Etype (Comp))
                            and then RM_Size (Etype (Comp)) /= Esize (Comp)
                          then
                             Error_Msg_NE
!                              ("?S?component size overrides size clause for&",
                                Component_Name (CC), Etype (Comp));
                          end if;
  
--- 8805,8816 ----
                          Set_Normalized_First_Bit (Comp, Fbit mod SSU);
                          Set_Normalized_Position  (Comp, Fbit / SSU);
  
                          if Warn_On_Overridden_Size
                            and then Has_Size_Clause (Etype (Comp))
                            and then RM_Size (Etype (Comp)) /= Esize (Comp)
                          then
                             Error_Msg_NE
!                              ("?.s?component size overrides size clause for&",
                                Component_Name (CC), Etype (Comp));
                          end if;
  
*************** package body Sem_Ch13 is
*** 8522,8530 ****
                             Set_Normalized_First_Bit (Ocomp, Fbit mod SSU);
                             Set_Normalized_Position  (Ocomp, Fbit / SSU);
  
-                            Set_Normalized_Position_Max
-                              (Ocomp, Normalized_Position (Ocomp));
- 
                             --  Note: we don't use Set_Biased here, because we
                             --  already gave a warning above if needed, and we
                             --  would get a duplicate for the same name here.
--- 8836,8841 ----
*************** package body Sem_Ch13 is
*** 8608,8614 ****
                    then
                       Error_Msg_Sloc := Sloc (Comp);
                       Error_Msg_NE
!                        ("?C?no component clause given for & declared #",
                          N, Comp);
                    end if;
  
--- 8919,8925 ----
                    then
                       Error_Msg_Sloc := Sloc (Comp);
                       Error_Msg_NE
!                        ("?.c?no component clause given for & declared #",
                          N, Comp);
                    end if;
  
*************** package body Sem_Ch13 is
*** 8630,8638 ****
     is
        Loc : constant Source_Ptr := Sloc (Expr);
  
-       Non_Static : exception;
-       --  Raised if something non-static is found
- 
        Btyp : constant Entity_Id := Base_Type (Typ);
  
        BLo : constant Uint := Expr_Value (Type_Low_Bound  (Btyp));
--- 8941,8946 ----
*************** package body Sem_Ch13 is
*** 8685,8691 ****
  
        function Build_Val (V : Uint) return Node_Id;
        --  Return an analyzed N_Identifier node referencing this value, suitable
!       --  for use as an entry in the Static_Discrte_Predicate list. This node
        --  is typed with the base type.
  
        function Build_Range (Lo : Uint; Hi : Uint) return Node_Id;
--- 8993,8999 ----
  
        function Build_Val (V : Uint) return Node_Id;
        --  Return an analyzed N_Identifier node referencing this value, suitable
!       --  for use as an entry in the Static_Discrete_Predicate list. This node
        --  is typed with the base type.
  
        function Build_Range (Lo : Uint; Hi : Uint) return Node_Id;
*************** package body Sem_Ch13 is
*** 8693,8701 ****
        --  use as an entry in the Static_Discrete_Predicate list. This node is
        --  typed with the base type.
  
!       function Get_RList (Exp : Node_Id) return RList;
        --  This is a recursive routine that converts the given expression into a
        --  list of ranges, suitable for use in building the static predicate.
  
        function Is_False (R : RList) return Boolean;
        pragma Inline (Is_False);
--- 9001,9013 ----
        --  use as an entry in the Static_Discrete_Predicate list. This node is
        --  typed with the base type.
  
!       function Get_RList
!         (Exp    : Node_Id;
!          Static : access Boolean) return RList;
        --  This is a recursive routine that converts the given expression into a
        --  list of ranges, suitable for use in building the static predicate.
+       --  Static.all will be set to False if the expression is found to be non
+       --  static. Note that Static.all should be set to True by the caller.
  
        function Is_False (R : RList) return Boolean;
        pragma Inline (Is_False);
*************** package body Sem_Ch13 is
*** 8723,8740 ****
        --  a static expression or static range, gets either the expression value
        --  or the high bound of the range.
  
!       function Membership_Entry (N : Node_Id) return RList;
        --  Given a single membership entry (range, value, or subtype), returns
!       --  the corresponding range list. Raises Static_Error if not static.
  
!       function Membership_Entries (N : Node_Id) return RList;
        --  Given an element on an alternatives list of a membership operation,
        --  returns the range list corresponding to this entry and all following
        --  entries (i.e. returns the "or" of this list of values).
  
!       function Stat_Pred (Typ : Entity_Id) return RList;
!       --  Given a type, if it has a static predicate, then return the predicate
!       --  as a range list, otherwise raise Non_Static.
  
        -----------
        -- "and" --
--- 9035,9057 ----
        --  a static expression or static range, gets either the expression value
        --  or the high bound of the range.
  
!       function Membership_Entry
!         (N : Node_Id; Static : access Boolean) return RList;
        --  Given a single membership entry (range, value, or subtype), returns
!       --  the corresponding range list. Set Static.all to False if not static.
  
!       function Membership_Entries
!         (N : Node_Id; Static : access Boolean) return RList;
        --  Given an element on an alternatives list of a membership operation,
        --  returns the range list corresponding to this entry and all following
        --  entries (i.e. returns the "or" of this list of values).
+       --  Set Static.all to False if not static.
  
!       function Stat_Pred
!         (Typ    : Entity_Id;
!          Static : access Boolean) return RList;
!       --  Given a type, if it has a static predicate, then set Result to the
!       --  predicate as a range list, otherwise set Static.all to False.
  
        -----------
        -- "and" --
*************** package body Sem_Ch13 is
*** 8986,8992 ****
        -- Get_RList --
        ---------------
  
!       function Get_RList (Exp : Node_Id) return RList is
           Op  : Node_Kind;
           Val : Uint;
  
--- 9303,9312 ----
        -- Get_RList --
        ---------------
  
!       function Get_RList
!         (Exp    : Node_Id;
!          Static : access Boolean) return RList
!       is
           Op  : Node_Kind;
           Val : Uint;
  
*************** package body Sem_Ch13 is
*** 9012,9034 ****
              when N_And_Then
                 | N_Op_And
              =>
!                return Get_RList (Left_Opnd (Exp))
                          and
!                       Get_RList (Right_Opnd (Exp));
  
              --  Or
  
              when N_Op_Or
                 | N_Or_Else
              =>
!                return Get_RList (Left_Opnd (Exp))
                          or
!                       Get_RList (Right_Opnd (Exp));
  
              --  Not
  
              when N_Op_Not =>
!                return not Get_RList (Right_Opnd (Exp));
  
                 --  Comparisons of type with static value
  
--- 9332,9354 ----
              when N_And_Then
                 | N_Op_And
              =>
!                return Get_RList (Left_Opnd (Exp), Static)
                          and
!                       Get_RList (Right_Opnd (Exp), Static);
  
              --  Or
  
              when N_Op_Or
                 | N_Or_Else
              =>
!                return Get_RList (Left_Opnd (Exp), Static)
                          or
!                       Get_RList (Right_Opnd (Exp), Static);
  
              --  Not
  
              when N_Op_Not =>
!                return not Get_RList (Right_Opnd (Exp), Static);
  
                 --  Comparisons of type with static value
  
*************** package body Sem_Ch13 is
*** 9061,9067 ****
                 --  Other cases are non-static
  
                 else
!                   raise Non_Static;
                 end if;
  
                 --  Construct range according to comparison operation
--- 9381,9388 ----
                 --  Other cases are non-static
  
                 else
!                   Static.all := False;
!                   return False_Range;
                 end if;
  
                 --  Construct range according to comparison operation
*************** package body Sem_Ch13 is
*** 9093,9118 ****
  
              when N_In =>
                 if not Is_Type_Ref (Left_Opnd (Exp)) then
!                   raise Non_Static;
                 end if;
  
                 if Present (Right_Opnd (Exp)) then
!                   return Membership_Entry (Right_Opnd (Exp));
                 else
!                   return Membership_Entries (First (Alternatives (Exp)));
                 end if;
  
              --  Negative membership (NOT IN)
  
              when N_Not_In =>
                 if not Is_Type_Ref (Left_Opnd (Exp)) then
!                   raise Non_Static;
                 end if;
  
                 if Present (Right_Opnd (Exp)) then
!                   return not Membership_Entry (Right_Opnd (Exp));
                 else
!                   return not Membership_Entries (First (Alternatives (Exp)));
                 end if;
  
              --  Function call, may be call to static predicate
--- 9414,9443 ----
  
              when N_In =>
                 if not Is_Type_Ref (Left_Opnd (Exp)) then
!                   Static.all := False;
!                   return False_Range;
                 end if;
  
                 if Present (Right_Opnd (Exp)) then
!                   return Membership_Entry (Right_Opnd (Exp), Static);
                 else
!                   return Membership_Entries
!                            (First (Alternatives (Exp)), Static);
                 end if;
  
              --  Negative membership (NOT IN)
  
              when N_Not_In =>
                 if not Is_Type_Ref (Left_Opnd (Exp)) then
!                   Static.all := False;
!                   return False_Range;
                 end if;
  
                 if Present (Right_Opnd (Exp)) then
!                   return not Membership_Entry (Right_Opnd (Exp), Static);
                 else
!                   return not Membership_Entries
!                                (First (Alternatives (Exp)), Static);
                 end if;
  
              --  Function call, may be call to static predicate
*************** package body Sem_Ch13 is
*** 9126,9144 ****
                            or else
                          Is_Predicate_Function_M (Ent)
                       then
!                         return Stat_Pred (Etype (First_Formal (Ent)));
                       end if;
                    end;
                 end if;
  
                 --  Other function call cases are non-static
  
!                raise Non_Static;
  
              --  Qualified expression, dig out the expression
  
              when N_Qualified_Expression =>
!                return Get_RList (Expression (Exp));
  
              when N_Case_Expression =>
                 declare
--- 9451,9470 ----
                            or else
                          Is_Predicate_Function_M (Ent)
                       then
!                         return Stat_Pred (Etype (First_Formal (Ent)), Static);
                       end if;
                    end;
                 end if;
  
                 --  Other function call cases are non-static
  
!                Static.all := False;
!                return False_Range;
  
              --  Qualified expression, dig out the expression
  
              when N_Qualified_Expression =>
!                return Get_RList (Expression (Exp), Static);
  
              when N_Case_Expression =>
                 declare
*************** package body Sem_Ch13 is
*** 9163,9169 ****
                       Dep := Expression (Alt);
  
                       if not Is_OK_Static_Expression (Dep) then
!                         raise Non_Static;
  
                       elsif Is_True (Expr_Value (Dep)) then
                          Append_List_To (Choices,
--- 9489,9496 ----
                       Dep := Expression (Alt);
  
                       if not Is_OK_Static_Expression (Dep) then
!                         Static.all := False;
!                         return False_Range;
  
                       elsif Is_True (Expr_Value (Dep)) then
                          Append_List_To (Choices,
*************** package body Sem_Ch13 is
*** 9173,9202 ****
                       Next (Alt);
                    end loop;
  
!                   return Membership_Entries (First (Choices));
                 end;
  
              --  Expression with actions: if no actions, dig out expression
  
              when N_Expression_With_Actions =>
                 if Is_Empty_List (Actions (Exp)) then
!                   return Get_RList (Expression (Exp));
                 else
!                   raise Non_Static;
                 end if;
  
              --  Xor operator
  
              when N_Op_Xor =>
!                return (Get_RList (Left_Opnd (Exp))
!                         and not Get_RList (Right_Opnd (Exp)))
!                  or   (Get_RList (Right_Opnd (Exp))
!                         and not Get_RList (Left_Opnd (Exp)));
  
              --  Any other node type is non-static
  
              when others =>
!                raise Non_Static;
           end case;
        end Get_RList;
  
--- 9500,9531 ----
                       Next (Alt);
                    end loop;
  
!                   return Membership_Entries (First (Choices), Static);
                 end;
  
              --  Expression with actions: if no actions, dig out expression
  
              when N_Expression_With_Actions =>
                 if Is_Empty_List (Actions (Exp)) then
!                   return Get_RList (Expression (Exp), Static);
                 else
!                   Static.all := False;
!                   return False_Range;
                 end if;
  
              --  Xor operator
  
              when N_Op_Xor =>
!                return (Get_RList (Left_Opnd (Exp), Static)
!                         and not Get_RList (Right_Opnd (Exp), Static))
!                  or   (Get_RList (Right_Opnd (Exp), Static)
!                         and not Get_RList (Left_Opnd (Exp), Static));
  
              --  Any other node type is non-static
  
              when others =>
!                Static.all := False;
!                return False_Range;
           end case;
        end Get_RList;
  
*************** package body Sem_Ch13 is
*** 9263,9274 ****
        -- Membership_Entries --
        ------------------------
  
!       function Membership_Entries (N : Node_Id) return RList is
        begin
           if No (Next (N)) then
!             return Membership_Entry (N);
           else
!             return Membership_Entry (N) or Membership_Entries (Next (N));
           end if;
        end Membership_Entries;
  
--- 9592,9605 ----
        -- Membership_Entries --
        ------------------------
  
!       function Membership_Entries
!         (N : Node_Id; Static : access Boolean) return RList is
        begin
           if No (Next (N)) then
!             return Membership_Entry (N, Static);
           else
!             return Membership_Entry (N, Static)
!               or Membership_Entries (Next (N), Static);
           end if;
        end Membership_Entries;
  
*************** package body Sem_Ch13 is
*** 9276,9282 ****
        -- Membership_Entry --
        ----------------------
  
!       function Membership_Entry (N : Node_Id) return RList is
           Val : Uint;
           SLo : Uint;
           SHi : Uint;
--- 9607,9615 ----
        -- Membership_Entry --
        ----------------------
  
!       function Membership_Entry
!         (N : Node_Id; Static : access Boolean) return RList
!       is
           Val : Uint;
           SLo : Uint;
           SHi : Uint;
*************** package body Sem_Ch13 is
*** 9289,9295 ****
                   or else
                 not Is_OK_Static_Expression (High_Bound (N))
              then
!                raise Non_Static;
              else
                 SLo := Expr_Value (Low_Bound  (N));
                 SHi := Expr_Value (High_Bound (N));
--- 9622,9629 ----
                   or else
                 not Is_OK_Static_Expression (High_Bound (N))
              then
!                Static.all := False;
!                return False_Range;
              else
                 SLo := Expr_Value (Low_Bound  (N));
                 SHi := Expr_Value (High_Bound (N));
*************** package body Sem_Ch13 is
*** 9332,9338 ****
                 --  If type has predicates, process them
  
                 if Has_Predicates (Entity (N)) then
!                   return Stat_Pred (Entity (N));
  
                 --  For static subtype without predicates, get range
  
--- 9666,9672 ----
                 --  If type has predicates, process them
  
                 if Has_Predicates (Entity (N)) then
!                   return Stat_Pred (Entity (N), Static);
  
                 --  For static subtype without predicates, get range
  
*************** package body Sem_Ch13 is
*** 9344,9357 ****
                 --  Any other type makes us non-static
  
                 else
!                   raise Non_Static;
                 end if;
  
              --  Any other kind of identifier in predicate (e.g. a non-static
              --  expression value) means this is not a static predicate.
  
              else
!                raise Non_Static;
              end if;
           end if;
        end Membership_Entry;
--- 9678,9693 ----
                 --  Any other type makes us non-static
  
                 else
!                   Static.all := False;
!                   return False_Range;
                 end if;
  
              --  Any other kind of identifier in predicate (e.g. a non-static
              --  expression value) means this is not a static predicate.
  
              else
!                Static.all := False;
!                return False_Range;
              end if;
           end if;
        end Membership_Entry;
*************** package body Sem_Ch13 is
*** 9360,9371 ****
        -- Stat_Pred --
        ---------------
  
!       function Stat_Pred (Typ : Entity_Id) return RList is
        begin
           --  Not static if type does not have static predicates
  
           if not Has_Static_Predicate (Typ) then
!             raise Non_Static;
           end if;
  
           --  Otherwise we convert the predicate list to a range list
--- 9696,9710 ----
        -- Stat_Pred --
        ---------------
  
!       function Stat_Pred
!         (Typ    : Entity_Id;
!          Static : access Boolean) return RList is
        begin
           --  Not static if type does not have static predicates
  
           if not Has_Static_Predicate (Typ) then
!             Static.all := False;
!             return False_Range;
           end if;
  
           --  Otherwise we convert the predicate list to a range list
*************** package body Sem_Ch13 is
*** 9406,9417 ****
        --  Analyze the expression to see if it is a static predicate
  
        declare
!          Ranges : constant RList := Get_RList (Expr);
           --  Range list from expression if it is static
  
           Plist : List_Id;
  
        begin
           --  Convert range list into a form for the static predicate. In the
           --  Ranges array, we just have raw ranges, these must be converted
           --  to properly typed and analyzed static expressions or range nodes.
--- 9745,9763 ----
        --  Analyze the expression to see if it is a static predicate
  
        declare
!          Static : aliased Boolean := True;
!          Ranges : constant RList := Get_RList (Expr, Static'Access);
           --  Range list from expression if it is static
  
           Plist : List_Id;
  
        begin
+          --  If non-static, return doing nothing
+ 
+          if not Static then
+             return;
+          end if;
+ 
           --  Convert range list into a form for the static predicate. In the
           --  Ranges array, we just have raw ranges, these must be converted
           --  to properly typed and analyzed static expressions or range nodes.
*************** package body Sem_Ch13 is
*** 9516,9527 ****
              end if;
           end;
        end;
- 
-       --  If non-static, return doing nothing
- 
-    exception
-       when Non_Static =>
-          return;
     end Build_Discrete_Static_Predicate;
  
     --------------------------------
--- 9862,9867 ----
*************** package body Sem_Ch13 is
*** 9786,9792 ****
              then
                 Error_Msg_Sloc := Sloc (Predicate_Function (T));
                 Error_Msg_Node_2 := T;
!                Error_Msg_N ("info: & inherits predicate from & #?L?", Typ);
              end if;
           end if;
        end Add_Call;
--- 10126,10132 ----
              then
                 Error_Msg_Sloc := Sloc (Predicate_Function (T));
                 Error_Msg_Node_2 := T;
!                Error_Msg_N ("info: & inherits predicate from & #?.l?", Typ);
              end if;
           end if;
        end Add_Call;
*************** package body Sem_Ch13 is
*** 9913,9919 ****
           --  If the type is private, check whether full view has inherited
           --  predicates.
  
!          if Is_Private_Type (Typ) and then No (Ritem) then
              Ritem := First_Rep_Item (Full_View (Typ));
           end if;
  
--- 10253,10262 ----
           --  If the type is private, check whether full view has inherited
           --  predicates.
  
!          if Is_Private_Type (Typ)
!            and then No (Ritem)
!            and then Present (Full_View (Typ))
!          then
              Ritem := First_Rep_Item (Full_View (Typ));
           end if;
  
*************** package body Sem_Ch13 is
*** 9985,10003 ****
     --  Start of processing for Build_Predicate_Functions
  
     begin
!       --  Return if already built or if type does not have predicates
  
        SId := Predicate_Function (Typ);
        if not Has_Predicates (Typ)
          or else (Present (SId) and then Has_Completion (SId))
        then
           return;
  
!         --  Do not generate predicate bodies within a generic unit. The
!         --  expressions have been analyzed already, and the bodies play
!         --  no role if not within an executable unit. However, if a statc
!         --  predicate is present it must be processed for legality checks
!         --  such as case coverage in an expression.
  
        elsif Inside_A_Generic
          and then not Has_Static_Predicate_Aspect (Typ)
--- 10328,10361 ----
     --  Start of processing for Build_Predicate_Functions
  
     begin
!       --  Return if already built, if type does not have predicates,
!       --  or if type is a constructed subtype that will inherit a
!       --  predicate function from its ancestor. In a generic context
!       --  the predicated parent may not have a predicate function yet
!       --  but we don't want to build a new one for the subtype. This can
!       --  happen in an instance body which is nested within a generic
!       --  unit, in which case Within_A_Generic may be false, SId is
!       --  Empty, but uses of Typ will receive a predicate check in a
!       --  context where expansion and tests are enabled.
  
        SId := Predicate_Function (Typ);
        if not Has_Predicates (Typ)
          or else (Present (SId) and then Has_Completion (SId))
+         or else
+           (Is_Itype (Typ)
+            and then not Comes_From_Source (Typ)
+            and then Ekind (Typ) in E_Array_Subtype
+                                  | E_Record_Subtype
+                                  | E_Record_Subtype_With_Private
+            and then Present (Predicated_Parent (Typ)))
        then
           return;
  
!       --  Do not generate predicate bodies within a generic unit. The
!       --  expressions have been analyzed already, and the bodies play no role
!       --  if not within an executable unit. However, if a static predicate is
!       --  present it must be processed for legality checks such as case
!       --  coverage in an expression.
  
        elsif Inside_A_Generic
          and then not Has_Static_Predicate_Aspect (Typ)
*************** package body Sem_Ch13 is
*** 10126,10132 ****
              FBody : Node_Id;
  
           begin
!             Set_Ekind (SIdB, E_Function);
              Set_Is_Predicate_Function (SIdB);
  
              --  Build function body
--- 10484,10490 ----
              FBody : Node_Id;
  
           begin
!             Mutate_Ekind (SIdB, E_Function);
              Set_Is_Predicate_Function (SIdB);
  
              --  Build function body
*************** package body Sem_Ch13 is
*** 10260,10266 ****
  
                 --  Build function declaration
  
!                Set_Ekind (SId, E_Function);
                 Set_Is_Predicate_Function_M (SId);
                 Set_Predicate_Function_M (Typ, SId);
  
--- 10618,10624 ----
  
                 --  Build function declaration
  
!                Mutate_Ekind (SId, E_Function);
                 Set_Is_Predicate_Function_M (SId);
                 Set_Predicate_Function_M (Typ, SId);
  
*************** package body Sem_Ch13 is
*** 10308,10315 ****
                 --  what happens if a return appears within a return.
  
                 BTemp :=
!                  Make_Defining_Identifier (Loc,
!                    Chars => New_Internal_Name ('B'));
  
                 FBody :=
                   Make_Subprogram_Body (Loc,
--- 10666,10672 ----
                 --  what happens if a return appears within a return.
  
                 BTemp :=
!                  Make_Temporary (Loc, 'B');
  
                 FBody :=
                   Make_Subprogram_Body (Loc,
*************** package body Sem_Ch13 is
*** 10475,10481 ****
          Make_Defining_Identifier (Loc,
            Chars => New_External_Name (Chars (Typ), "Predicate"));
  
!       Set_Ekind (Func_Id, E_Function);
        Set_Etype (Func_Id, Standard_Boolean);
        Set_Is_Internal (Func_Id);
        Set_Is_Predicate_Function (Func_Id);
--- 10832,10838 ----
          Make_Defining_Identifier (Loc,
            Chars => New_External_Name (Chars (Typ), "Predicate"));
  
!       Mutate_Ekind (Func_Id, E_Function);
        Set_Etype (Func_Id, Standard_Boolean);
        Set_Is_Internal (Func_Id);
        Set_Is_Predicate_Function (Func_Id);
*************** package body Sem_Ch13 is
*** 10545,10551 ****
        --  in particular, it has no type.
  
        Err : Boolean;
!       --  Set False if error
  
        --  On entry to this procedure, Entity (Ident) contains a copy of the
        --  original expression from the aspect, saved for this purpose, and
--- 10902,10908 ----
        --  in particular, it has no type.
  
        Err : Boolean;
!       --  Set True if error
  
        --  On entry to this procedure, Entity (Ident) contains a copy of the
        --  original expression from the aspect, saved for this purpose, and
*************** package body Sem_Ch13 is
*** 10661,10667 ****
           --  also make its potential components accessible.
  
           if not Analyzed (Freeze_Expr) and then Inside_A_Generic then
!             if A_Id in Aspect_Dynamic_Predicate | Aspect_Predicate then
                 Push_Type (Ent);
                 Preanalyze_Spec_Expression (Freeze_Expr, Standard_Boolean);
                 Pop_Type (Ent);
--- 11018,11026 ----
           --  also make its potential components accessible.
  
           if not Analyzed (Freeze_Expr) and then Inside_A_Generic then
!             if A_Id in Aspect_Dynamic_Predicate | Aspect_Predicate |
!                        Aspect_Static_Predicate
!             then
                 Push_Type (Ent);
                 Preanalyze_Spec_Expression (Freeze_Expr, Standard_Boolean);
                 Pop_Type (Ent);
*************** package body Sem_Ch13 is
*** 10679,10685 ****
           --  Indicate that the expression comes from an aspect specification,
           --  which is used in subsequent analysis even if expansion is off.
  
!          Set_Parent (End_Decl_Expr, ASN);
  
           --  In a generic context the original aspect expressions have not
           --  been preanalyzed, so do it now. There are no conformance checks
--- 11038,11046 ----
           --  Indicate that the expression comes from an aspect specification,
           --  which is used in subsequent analysis even if expansion is off.
  
!          if Present (End_Decl_Expr) then
!             Set_Parent (End_Decl_Expr, ASN);
!          end if;
  
           --  In a generic context the original aspect expressions have not
           --  been preanalyzed, so do it now. There are no conformance checks
*************** package body Sem_Ch13 is
*** 10690,10695 ****
--- 11051,11057 ----
              if A_Id in Aspect_Dynamic_Predicate
                       | Aspect_Predicate
                       | Aspect_Priority
+                      | Aspect_Static_Predicate
              then
                 Push_Type (Ent);
                 Check_Aspect_At_Freeze_Point (ASN);
*************** package body Sem_Ch13 is
*** 10717,10722 ****
--- 11079,11085 ----
                       | Aspect_Dynamic_Predicate
                       | Aspect_Predicate
                       | Aspect_Priority
+                      | Aspect_Static_Predicate
           then
              Push_Type (Ent);
              Preanalyze_Spec_Expression (End_Decl_Expr, T);
*************** package body Sem_Ch13 is
*** 10973,10978 ****
--- 11336,11369 ----
  
           --  Here is the list of aspects that don't require delay analysis
  
+          when Aspect_Designated_Storage_Model =>
+             return;
+ 
+          when Aspect_Storage_Model_Type =>
+             T := Entity (ASN);
+ 
+             declare
+                Assoc     : Node_Id;
+                Expr      : Node_Id;
+                Addr_Type : Entity_Id := Empty;
+ 
+             begin
+                Assoc := First (Component_Associations (Expression (ASN)));
+                while Present (Assoc) loop
+                   Expr := Expression (Assoc);
+                   Analyze (Expr);
+ 
+                   if not Error_Posted (Expr) then
+                      Resolve_Storage_Model_Type_Argument
+                        (Expr, T, Addr_Type, Chars (First (Choices (Assoc))));
+                   end if;
+ 
+                   Next (Assoc);
+                end loop;
+             end;
+ 
+             return;
+ 
           when Aspect_Abstract_State
              | Aspect_Annotate
              | Aspect_Async_Readers
*************** package body Sem_Ch13 is
*** 10988,10993 ****
--- 11379,11385 ----
              | Aspect_Extensions_Visible
              | Aspect_Ghost
              | Aspect_Global
+             | Aspect_GNAT_Annotate
              | Aspect_Implicit_Dereference
              | Aspect_Initial_Condition
              | Aspect_Initializes
*************** package body Sem_Ch13 is
*** 10995,11000 ****
--- 11387,11394 ----
              | Aspect_Max_Entry_Queue_Length
              | Aspect_Max_Queue_Length
              | Aspect_No_Caching
+             | Aspect_No_Controlled_Parts
+             | Aspect_No_Task_Parts
              | Aspect_Obsolescent
              | Aspect_Part_Of
              | Aspect_Post
*************** package body Sem_Ch13 is
*** 11516,11522 ****
           Clause : Node_Id := First (Component_Clauses (N));
           Prev_Bit_Offset : Uint := Uint_0;
           OOO : constant String :=
!            "?component clause out of order with respect to declaration";
  
        begin
           --  Step Comp through components and Clause through component clauses,
--- 11910,11916 ----
           Clause : Node_Id := First (Component_Clauses (N));
           Prev_Bit_Offset : Uint := Uint_0;
           OOO : constant String :=
!            "?_r?component clause out of order with respect to declaration";
  
        begin
           --  Step Comp through components and Clause through component clauses,
*************** package body Sem_Ch13 is
*** 11542,11548 ****
                   and then not Reverse_Storage_Order (Rectype)
                   and then Component_Bit_Offset (Comp) < Prev_Bit_Offset
                 then
!                   Error_Msg_N ("?memory layout out of order", Clause);
                    exit;
                 end if;
  
--- 11936,11942 ----
                   and then not Reverse_Storage_Order (Rectype)
                   and then Component_Bit_Offset (Comp) < Prev_Bit_Offset
                 then
!                   Error_Msg_N ("?_r?memory layout out of order", Clause);
                    exit;
                 end if;
  
*************** package body Sem_Ch13 is
*** 11697,11705 ****
                 --------
  
                 function Lt (Op1, Op2 : Natural) return Boolean is
                 begin
!                   return Component_Bit_Offset (Comps (Op1))
!                        < Component_Bit_Offset (Comps (Op2));
                 end Lt;
  
                 ----------
--- 12091,12113 ----
                 --------
  
                 function Lt (Op1, Op2 : Natural) return Boolean is
+                   K1 : constant Boolean :=
+                     Known_Component_Bit_Offset (Comps (Op1));
+                   K2 : constant Boolean :=
+                     Known_Component_Bit_Offset (Comps (Op2));
+                   --  Record representation clauses can be incomplete, so the
+                   --  Component_Bit_Offsets can be unknown.
                 begin
!                   if K1 then
!                      if K2 then
!                         return Component_Bit_Offset (Comps (Op1))
!                              < Component_Bit_Offset (Comps (Op2));
!                      else
!                         return True;
!                      end if;
!                   else
!                      return K2;
!                   end if;
                 end Lt;
  
                 ----------
*************** package body Sem_Ch13 is
*** 11763,11774 ****
                    begin
                       --  Skip components with unknown offsets
  
!                      if CBO /= No_Uint and then CBO >= 0 then
                          Error_Msg_Uint_1 := CBO - Nbit;
  
                          if Warn and then Error_Msg_Uint_1 > 0 then
                             Error_Msg_NE
!                              ("?H?^-bit gap before component&",
                                Component_Name (Component_Clause (CEnt)),
                                CEnt);
                          end if;
--- 12171,12182 ----
                    begin
                       --  Skip components with unknown offsets
  
!                      if Present (CBO) and then CBO >= 0 then
                          Error_Msg_Uint_1 := CBO - Nbit;
  
                          if Warn and then Error_Msg_Uint_1 > 0 then
                             Error_Msg_NE
!                              ("?.h?^-bit gap before component&",
                                Component_Name (Component_Clause (CEnt)),
                                CEnt);
                          end if;
*************** package body Sem_Ch13 is
*** 11803,11808 ****
--- 12211,12218 ----
              end;
           end Check_Component_List;
  
+          --  Local variables
+ 
           Sbit : Uint;
           --  Starting bit for call to Check_Component_List. Zero for an
           --  untagged type. The size of the Tag for a nonderived tagged
*************** package body Sem_Ch13 is
*** 11873,11898 ****
              --  Find maximum bit of any component of the parent type
  
              Parent_Last_Bit := UI_From_Int (System_Address_Size - 1);
!             Pcomp := First_Entity (Tagged_Parent);
              while Present (Pcomp) loop
!                if Ekind (Pcomp) in E_Discriminant | E_Component then
!                   if Component_Bit_Offset (Pcomp) /= No_Uint
!                     and then Known_Static_Esize (Pcomp)
!                   then
!                      Parent_Last_Bit :=
!                        UI_Max
!                          (Parent_Last_Bit,
!                           Component_Bit_Offset (Pcomp) + Esize (Pcomp) - 1);
!                   end if;
!                else
! 
!                   --  Skip anonymous types generated for constrained array
!                   --  or record components.
! 
!                   null;
                 end if;
  
!                Next_Entity (Pcomp);
              end loop;
           end if;
        end;
--- 12283,12300 ----
              --  Find maximum bit of any component of the parent type
  
              Parent_Last_Bit := UI_From_Int (System_Address_Size - 1);
!             Pcomp := First_Component_Or_Discriminant (Tagged_Parent);
              while Present (Pcomp) loop
!                if Present (Component_Bit_Offset (Pcomp))
!                  and then Known_Static_Esize (Pcomp)
!                then
!                   Parent_Last_Bit :=
!                     UI_Max
!                       (Parent_Last_Bit,
!                        Component_Bit_Offset (Pcomp) + Esize (Pcomp) - 1);
                 end if;
  
!                Next_Component_Or_Discriminant (Pcomp);
              end loop;
           end if;
        end;
*************** package body Sem_Ch13 is
*** 11917,11924 ****
           Set_Component_Bit_Offset    (Fent, Uint_0);
           Set_Normalized_Position     (Fent, Uint_0);
           Set_Normalized_First_Bit    (Fent, Uint_0);
!          Set_Normalized_Position_Max (Fent, Uint_0);
!          Init_Esize                  (Fent, System_Address_Size);
  
           Set_Component_Clause (Fent,
             Make_Component_Clause (Loc,
--- 12319,12325 ----
           Set_Component_Bit_Offset    (Fent, Uint_0);
           Set_Normalized_Position     (Fent, Uint_0);
           Set_Normalized_First_Bit    (Fent, Uint_0);
!          Set_Esize                   (Fent, UI_From_Int (System_Address_Size));
  
           Set_Component_Clause (Fent,
             Make_Component_Clause (Loc,
*************** package body Sem_Ch13 is
*** 12135,12142 ****
                    end if;
  
                    --  Outer level of record definition, check discriminants
!                   --  but be careful not to flag a non-girder discriminant
!                   --  and the girder discriminant it renames as overlapping.
  
                    if Nkind (Clist) in N_Full_Type_Declaration
                                      | N_Private_Type_Declaration
--- 12536,12543 ----
                    end if;
  
                    --  Outer level of record definition, check discriminants
!                   --  but be careful not to flag a non-stored discriminant
!                   --  and the stored discriminant it renames as overlapping.
  
                    if Nkind (Clist) in N_Full_Type_Declaration
                                      | N_Private_Type_Declaration
*************** package body Sem_Ch13 is
*** 12208,12216 ****
        end if;
  
        --  Skip the following warnings if overlap was detected; programmer
!       --  should fix the errors first.
  
!       if not Overlap_Detected then
           --  Check for record holes (gaps)
  
           if Warn_On_Record_Holes then
--- 12609,12619 ----
        end if;
  
        --  Skip the following warnings if overlap was detected; programmer
!       --  should fix the errors first. Also skip the warnings for types in
!       --  generics, because their representation information is not fully
!       --  computed.
  
!       if not Overlap_Detected and then not In_Generic_Scope (Rectype) then
           --  Check for record holes (gaps)
  
           if Warn_On_Record_Holes then
*************** package body Sem_Ch13 is
*** 12242,12248 ****
        --  length (it may for example be appropriate to round up the size
        --  to some convenient boundary, based on alignment considerations, etc).
  
!       if Unknown_RM_Size (Rectype)
          and then Hbit + 1 <= 32
          and then not Strict_Alignment (Rectype)
        then
--- 12645,12651 ----
        --  length (it may for example be appropriate to round up the size
        --  to some convenient boundary, based on alignment considerations, etc).
  
!       if not Known_RM_Size (Rectype)
          and then Hbit + 1 <= 32
          and then not Strict_Alignment (Rectype)
        then
*************** package body Sem_Ch13 is
*** 12301,12307 ****
        --  Reject patently improper size values
  
        if Is_Elementary_Type (T)
!         and then Siz > UI_From_Int (Int'Last)
        then
           Error_Msg_N ("Size value too large for elementary type", N);
  
--- 12704,12710 ----
        --  Reject patently improper size values
  
        if Is_Elementary_Type (T)
!         and then Siz > Int'Last
        then
           Error_Msg_N ("Size value too large for elementary type", N);
  
*************** package body Sem_Ch13 is
*** 12368,12375 ****
  
              else
                 Size_Too_Small_Error (Asiz);
-                Set_Esize   (T, Asiz);
-                Set_RM_Size (T, Asiz);
              end if;
           end;
  
--- 12771,12776 ----
*************** package body Sem_Ch13 is
*** 12407,12414 ****
  
              if Siz < M then
                 Size_Too_Small_Error (M);
-                Set_Esize   (T, M);
-                Set_RM_Size (T, M);
              else
                 Biased := True;
              end if;
--- 12808,12813 ----
*************** package body Sem_Ch13 is
*** 12756,12761 ****
--- 13155,13161 ----
                    if Get_Aspect_Id (Ritem) in Aspect_CPU
                                              | Aspect_Dynamic_Predicate
                                              | Aspect_Predicate
+                                             | Aspect_Static_Predicate
                                              | Aspect_Priority
                    then
                      --  Retrieve the visibility to components and discriminants
*************** package body Sem_Ch13 is
*** 12763,12773 ****
--- 13163,13223 ----
  
                       Push_Type (E);
                       Check_Aspect_At_Freeze_Point (Ritem);
+ 
+                      --  In the case of predicate aspects, there will be
+                      --  a corresponding Predicate pragma associated with
+                      --  the aspect, and the expression of the pragma also
+                      --  needs to be analyzed at this point, to ensure that
+                      --  Save_Global_References will capture global refs in
+                      --  expressions that occur in generic bodies, for proper
+                      --  later resolution of the pragma in instantiations.
+ 
+                      if Is_Type (E)
+                        and then Inside_A_Generic
+                        and then Has_Predicates (E)
+                        and then Present (Aspect_Rep_Item (Ritem))
+                      then
+                         declare
+                            Pragma_Args : constant List_Id :=
+                              Pragma_Argument_Associations
+                                (Aspect_Rep_Item (Ritem));
+                            Pragma_Expr : constant Node_Id :=
+                              Expression (Next (First (Pragma_Args)));
+                         begin
+                            if Present (Pragma_Expr) then
+                               Analyze_And_Resolve
+                                 (Pragma_Expr, Standard_Boolean);
+                            end if;
+                         end;
+                      end if;
+ 
                       Pop_Type (E);
  
                    else
                       Check_Aspect_At_Freeze_Point (Ritem);
                    end if;
+ 
+                --  A pragma Predicate should be checked like one of the
+                --  corresponding aspects, wrt possible misuse of ghost
+                --  entities.
+ 
+                elsif Nkind (Ritem) = N_Pragma
+                  and then No (Corresponding_Aspect (Ritem))
+                  and then
+                    Get_Pragma_Id (Pragma_Name (Ritem)) = Pragma_Predicate
+                then
+                   --  Retrieve the visibility to components and discriminants
+                   --  in order to properly analyze the pragma.
+ 
+                   declare
+                      Arg : constant Node_Id :=
+                         Next (First (Pragma_Argument_Associations (Ritem)));
+                   begin
+                      Push_Type (E);
+                      Preanalyze_Spec_Expression
+                        (Expression (Arg), Standard_Boolean);
+                      Pop_Type (E);
+                   end;
                 end if;
  
                 Next_Rep_Item (Ritem);
*************** package body Sem_Ch13 is
*** 12940,12945 ****
--- 13390,13402 ----
              end if;
           end Check_Variant_Part;
        end if;
+ 
+       if not In_Generic_Scope (E)
+         and then Ekind (E) = E_Record_Type
+         and then Is_Tagged_Type (E)
+       then
+          Process_Class_Conditions_At_Freeze_Point (E);
+       end if;
     end Freeze_Entity_Checks;
  
     -------------------------
*************** package body Sem_Ch13 is
*** 12950,12956 ****
        Align : constant Uint := Static_Integer (Expr);
  
     begin
!       if Align = No_Uint then
           return No_Uint;
  
        elsif Align < 0 then
--- 13407,13413 ----
        Align : constant Uint := Static_Integer (Expr);
  
     begin
!       if No (Align) then
           return No_Uint;
  
        elsif Align < 0 then
*************** package body Sem_Ch13 is
*** 13217,13223 ****
        function Is_Pragma_Or_Corr_Pragma_Present_In_Rep_Item
          (Rep_Item : Node_Id) return Boolean;
        --  This routine checks if Rep_Item is either a pragma or an aspect
!       --  specification node whose correponding pragma (if any) is present in
        --  the Rep Item chain of the entity it has been specified to.
  
        --------------------------------------------------
--- 13674,13680 ----
        function Is_Pragma_Or_Corr_Pragma_Present_In_Rep_Item
          (Rep_Item : Node_Id) return Boolean;
        --  This routine checks if Rep_Item is either a pragma or an aspect
!       --  specification node whose corresponding pragma (if any) is present in
        --  the Rep Item chain of the entity it has been specified to.
  
        --------------------------------------------------
*************** package body Sem_Ch13 is
*** 13290,13295 ****
--- 13747,13762 ----
           Set_Is_Ada_2012_Only (Typ);
        end if;
  
+       --  Ada_2022
+ 
+       if not Has_Rep_Item (Typ, Name_Ada_2022, False)
+         and then Has_Rep_Item (Typ, Name_Ada_2022)
+         and then Is_Pragma_Or_Corr_Pragma_Present_In_Rep_Item
+                    (Get_Rep_Item (Typ, Name_Ada_2022))
+       then
+          Set_Is_Ada_2022_Only (Typ);
+       end if;
+ 
        --  Atomic/Shared
  
        if not Has_Rep_Item (Typ, Name_Atomic, Name_Shared, False)
*************** package body Sem_Ch13 is
*** 13472,13478 ****
        Address_Clause_Checks.Init;
        Unchecked_Conversions.Init;
  
!       --  ??? Might be needed in the future for some non GCC back-ends
        --  if AAMP_On_Target then
        --     Independence_Checks.Init;
        --  end if;
--- 13939,13946 ----
        Address_Clause_Checks.Init;
        Unchecked_Conversions.Init;
  
!       --  The following might be needed in the future for some non-GCC back
!       --  ends:
        --  if AAMP_On_Target then
        --     Independence_Checks.Init;
        --  end if;
*************** package body Sem_Ch13 is
*** 13516,13521 ****
--- 13984,13990 ----
                                        | Attribute_Iterable
                                        | Attribute_Iterator_Element
                                        | Attribute_Output
+                                       | Attribute_Put_Image
                                        | Attribute_Read
                                        | Attribute_Variable_Indexing
                                        | Attribute_Write;
*************** package body Sem_Ch13 is
*** 13795,13801 ****
  
     function Minimum_Size
       (T      : Entity_Id;
!       Biased : Boolean := False) return Nat
     is
        Lo     : Uint    := No_Uint;
        Hi     : Uint    := No_Uint;
--- 14264,14270 ----
  
     function Minimum_Size
       (T      : Entity_Id;
!       Biased : Boolean := False) return Int
     is
        Lo     : Uint    := No_Uint;
        Hi     : Uint    := No_Uint;
*************** package body Sem_Ch13 is
*** 13809,13825 ****
        R_Typ  : constant Entity_Id := Root_Type (T);
  
     begin
!       --  If bad type, return 0
  
        if T = Any_Type then
!          return 0;
  
!       --  For generic types, just return zero. There cannot be any legitimate
!       --  need to know such a size, but this routine may be called with a
!       --  generic type as part of normal processing.
  
        elsif Is_Generic_Type (R_Typ) or else R_Typ = Any_Type then
!          return 0;
  
           --  Access types (cannot have size smaller than System.Address)
  
--- 14278,14294 ----
        R_Typ  : constant Entity_Id := Root_Type (T);
  
     begin
!       --  Bad type
  
        if T = Any_Type then
!          return Unknown_Minimum_Size;
  
!       --  For generic types, just return unknown. There cannot be any
!       --  legitimate need to know such a size, but this routine may be
!       --  called with a generic type as part of normal processing.
  
        elsif Is_Generic_Type (R_Typ) or else R_Typ = Any_Type then
!          return Unknown_Minimum_Size;
  
           --  Access types (cannot have size smaller than System.Address)
  
*************** package body Sem_Ch13 is
*** 13842,13848 ****
           Ancest := T;
           loop
              if Ancest = Any_Type or else Etype (Ancest) = Any_Type then
!                return 0;
              end if;
  
              if not LoSet then
--- 14311,14317 ----
           Ancest := T;
           loop
              if Ancest = Any_Type or else Etype (Ancest) = Any_Type then
!                return Unknown_Minimum_Size;
              end if;
  
              if not LoSet then
*************** package body Sem_Ch13 is
*** 13867,13873 ****
                 Ancest := Base_Type (T);
  
                 if Is_Generic_Type (Ancest) then
!                   return 0;
                 end if;
              end if;
           end loop;
--- 14336,14342 ----
                 Ancest := Base_Type (T);
  
                 if Is_Generic_Type (Ancest) then
!                   return Unknown_Minimum_Size;
                 end if;
              end if;
           end loop;
*************** package body Sem_Ch13 is
*** 13888,13894 ****
           Ancest := T;
           loop
              if Ancest = Any_Type or else Etype (Ancest) = Any_Type then
!                return 0;
              end if;
  
              --  Note: In the following two tests for LoSet and HiSet, it may
--- 14357,14363 ----
           Ancest := T;
           loop
              if Ancest = Any_Type or else Etype (Ancest) = Any_Type then
!                return Unknown_Minimum_Size;
              end if;
  
              --  Note: In the following two tests for LoSet and HiSet, it may
*************** package body Sem_Ch13 is
*** 13928,13934 ****
                 Ancest := Base_Type (T);
  
                 if Is_Generic_Type (Ancest) then
!                   return 0;
                 end if;
              end if;
           end loop;
--- 14397,14403 ----
                 Ancest := Base_Type (T);
  
                 if Is_Generic_Type (Ancest) then
!                   return Unknown_Minimum_Size;
                 end if;
              end if;
           end loop;
*************** package body Sem_Ch13 is
*** 13958,13964 ****
        --  type case, since that's the odd case that came up. Probably we should
        --  also do this in the fixed-point case, but doing so causes peculiar
        --  gigi failures, and it is not worth worrying about this incredibly
!       --  marginal case (explicit null-range fixed-point type declarations)???
  
        if Lo > Hi and then Is_Discrete_Type (T) then
           S := 0;
--- 14427,14433 ----
        --  type case, since that's the odd case that came up. Probably we should
        --  also do this in the fixed-point case, but doing so causes peculiar
        --  gigi failures, and it is not worth worrying about this incredibly
!       --  marginal case (explicit null-range fixed-point type declarations).
  
        if Lo > Hi and then Is_Discrete_Type (T) then
           S := 0;
*************** package body Sem_Ch13 is
*** 14051,14057 ****
        begin
           Subp_Id := Make_Defining_Identifier (Loc, Sname);
  
!          --  S : Sink'Class
  
           Formals := New_List (
                        Make_Parameter_Specification (Loc,
--- 14520,14526 ----
        begin
           Subp_Id := Make_Defining_Identifier (Loc, Sname);
  
!          --  S : Root_Buffer_Type'Class
  
           Formals := New_List (
                        Make_Parameter_Specification (Loc,
*************** package body Sem_Ch13 is
*** 14404,14410 ****
          and then (Nkind (N) /= N_Pragma
                     or else Get_Pragma_Id (N) /= Pragma_Convention)
        then
!          if Ada_Version < Ada_2020 then
              Error_Msg_N
                ("representation item not allowed for generic type", N);
              return True;
--- 14873,14879 ----
          and then (Nkind (N) /= N_Pragma
                     or else Get_Pragma_Id (N) /= Pragma_Convention)
        then
!          if Ada_Version < Ada_2022 then
              Error_Msg_N
                ("representation item not allowed for generic type", N);
              return True;
*************** package body Sem_Ch13 is
*** 14526,14532 ****
           return True;
  
        --  Check for case of untagged derived type whose parent either has
!       --  primitive operations (pre Ada 202x), or is a by-reference type (RM
        --  13.1(10)). In this case we do not output a Too_Late message, since
        --  there is no earlier point where the rep item could be placed to make
        --  it legal.
--- 14995,15001 ----
           return True;
  
        --  Check for case of untagged derived type whose parent either has
!       --  primitive operations (pre Ada 2022), or is a by-reference type (RM
        --  13.1(10)). In this case we do not output a Too_Late message, since
        --  there is no earlier point where the rep item could be placed to make
        --  it legal.
*************** package body Sem_Ch13 is
*** 14546,14552 ****
             and then Has_Primitive_Operations (Parent_Type)
           then
              Error_Msg_N
!               ("|representation item not permitted before Ada 202x!", N);
              Error_Msg_NE
                ("\parent type & has primitive operations!", N, Parent_Type);
              return True;
--- 15015,15021 ----
             and then Has_Primitive_Operations (Parent_Type)
           then
              Error_Msg_N
!               ("|representation item not permitted before Ada 2022!", N);
              Error_Msg_NE
                ("\parent type & has primitive operations!", N, Parent_Type);
              return True;
*************** package body Sem_Ch13 is
*** 14907,14915 ****
                        or else N /= Selector_Name (Parent (N)))
           then
              Find_Direct_Name (N);
-             Set_Entity (N, Empty);
  
!          --  The name is component association needs no resolution.
  
           elsif Nkind (N) = N_Component_Association then
              Dummy := Resolve_Name (Expression (N));
--- 15376,15390 ----
                        or else N /= Selector_Name (Parent (N)))
           then
              Find_Direct_Name (N);
  
!             --  Reset the Entity if N is overloaded since the entity may not
!             --  be the correct one.
! 
!             if Is_Overloaded (N) then
!                Set_Entity (N, Empty);
!             end if;
! 
!          --  The name in a component association needs no resolution
  
           elsif Nkind (N) = N_Component_Association then
              Dummy := Resolve_Name (Expression (N));
*************** package body Sem_Ch13 is
*** 14931,14940 ****
     --  Start of processing for Resolve_Aspect_Expressions
  
     begin
-       if No (ASN) then
-          return;
-       end if;
- 
        while Present (ASN) loop
           if Nkind (ASN) = N_Aspect_Specification and then Entity (ASN) = E then
              declare
--- 15406,15411 ----
*************** package body Sem_Ch13 is
*** 14953,14986 ****
  
                    --  For now we only deal with aspects that do not generate
                    --  subprograms, or that may mention current instances of
!                   --  types. These will require special handling (???TBD).
  
                    when Aspect_Invariant
-                      | Aspect_Predicate
                       | Aspect_Predicate_Failure
                    =>
                       null;
  
                    when Aspect_Dynamic_Predicate
                       | Aspect_Static_Predicate
                    =>
!                      --  Build predicate function specification and preanalyze
!                      --  expression after type replacement. The function
!                      --  declaration must be analyzed in the scope of the type,
!                      --  but the expression can reference components and
!                      --  discriminants of the type.
  
                       if No (Predicate_Function (E)) then
!                         declare
!                            FDecl : constant Node_Id :=
!                                      Build_Predicate_Function_Declaration (E);
!                            pragma Unreferenced (FDecl);
! 
!                         begin
!                            Push_Type (E);
!                            Resolve_Aspect_Expression (Expr);
!                            Pop_Type (E);
!                         end;
                       end if;
  
                    when Pre_Post_Aspects =>
--- 15424,15452 ----
  
                    --  For now we only deal with aspects that do not generate
                    --  subprograms, or that may mention current instances of
!                   --  types. These will require special handling???.
  
                    when Aspect_Invariant
                       | Aspect_Predicate_Failure
                    =>
                       null;
  
                    when Aspect_Dynamic_Predicate
                       | Aspect_Static_Predicate
+                      | Aspect_Predicate
                    =>
!                      --  Preanalyze expression after type replacement to catch
!                      --  name resolution errors if the predicate function has
!                      --  not been built yet.
!                      --  Note that we cannot use Preanalyze_Spec_Expression
!                      --  because of the special handling required for
!                      --  quantifiers, see comments on Resolve_Aspect_Expression
!                      --  above.
  
                       if No (Predicate_Function (E)) then
!                         Push_Type (E);
!                         Resolve_Aspect_Expression (Expr);
!                         Pop_Type (E);
                       end if;
  
                    when Pre_Post_Aspects =>
*************** package body Sem_Ch13 is
*** 14994,15000 ****
                          begin
                             Assoc := First (Component_Associations (Expr));
                             while Present (Assoc) loop
!                               Find_Direct_Name (Expression (Assoc));
                                Next (Assoc);
                             end loop;
                          end;
--- 15460,15470 ----
                          begin
                             Assoc := First (Component_Associations (Expr));
                             while Present (Assoc) loop
!                               if Nkind (Expression (Assoc)) in N_Has_Entity
!                               then
!                                  Find_Direct_Name (Expression (Assoc));
!                               end if;
! 
                                Next (Assoc);
                             end loop;
                          end;
*************** package body Sem_Ch13 is
*** 15079,15085 ****
              Add_Unnamed_Subp := Subp;
  
           elsif Op_Name = Name_New_Indexed then
!             New_Indexed_Subp :=  Subp;
  
           elsif Op_Name = Name_Assign_Indexed then
              Assign_Indexed_Subp := Subp;
--- 15549,15555 ----
              Add_Unnamed_Subp := Subp;
  
           elsif Op_Name = Name_New_Indexed then
!             New_Indexed_Subp := Subp;
  
           elsif Op_Name = Name_Assign_Indexed then
              Assign_Indexed_Subp := Subp;
*************** package body Sem_Ch13 is
*** 15167,15173 ****
        Assign_Indexed_Subp : Node_Id := Empty;
  
     begin
!       Error_Msg_Ada_2020_Feature ("aspect Aggregate", Sloc (N));
  
        if Nkind (N) /= N_Aggregate
          or else Present (Expressions (N))
--- 15637,15643 ----
        Assign_Indexed_Subp : Node_Id := Empty;
  
     begin
!       Error_Msg_Ada_2022_Feature ("aspect Aggregate", Sloc (N));
  
        if Nkind (N) /= N_Aggregate
          or else Present (Expressions (N))
*************** package body Sem_Ch13 is
*** 15286,15292 ****
     --  Start of processing for Validate_Aspect_Stable_Properties
  
     begin
!       Error_Msg_Ada_2020_Feature ("aspect Stable_Properties", Sloc (N));
  
        if (not Is_Aspect_Of_Type) and then (not Is_Subprogram (E)) then
           Error_Msg_N ("Stable_Properties aspect can only be specified for "
--- 15756,15762 ----
     --  Start of processing for Validate_Aspect_Stable_Properties
  
     begin
!       Error_Msg_Ada_2022_Feature ("aspect Stable_Properties", Sloc (N));
  
        if (not Is_Aspect_Of_Type) and then (not Is_Subprogram (E)) then
           Error_Msg_N ("Stable_Properties aspect can only be specified for "
*************** package body Sem_Ch13 is
*** 15496,15513 ****
     ------------------------------
  
     procedure Resolve_Aspect_Aggregate
!     (Typ :  Entity_Id;
       Expr : Node_Id)
     is
        --  Predicates that establish the legality of each possible operation in
        --  an Aggregate aspect.
  
-       function Valid_Empty             (E : Entity_Id) return Boolean;
-       function Valid_Add_Named         (E : Entity_Id) return Boolean;
-       function Valid_Add_Unnamed       (E : Entity_Id) return Boolean;
-       function Valid_New_Indexed       (E : Entity_Id) return Boolean;
-       function Valid_Assign_Indexed    (E : Entity_Id) return Boolean;
- 
        generic
          with function Pred (Id : Node_Id) return Boolean;
        procedure Resolve_Operation (Subp_Id : Node_Id);
--- 15966,15982 ----
     ------------------------------
  
     procedure Resolve_Aspect_Aggregate
!     (Typ  : Entity_Id;
       Expr : Node_Id)
     is
+       function Valid_Empty          (E : Entity_Id) return Boolean;
+       function Valid_Add_Named      (E : Entity_Id) return Boolean;
+       function Valid_Add_Unnamed    (E : Entity_Id) return Boolean;
+       function Valid_New_Indexed    (E : Entity_Id) return Boolean;
+       function Valid_Assign_Indexed (E : Entity_Id) return Boolean;
        --  Predicates that establish the legality of each possible operation in
        --  an Aggregate aspect.
  
        generic
          with function Pred (Id : Node_Id) return Boolean;
        procedure Resolve_Operation (Subp_Id : Node_Id);
*************** package body Sem_Ch13 is
*** 15530,15541 ****
        end Valid_Assign_Indexed;
  
        -----------------
!       -- Valid_Emoty --
        -----------------
  
        function Valid_Empty (E :  Entity_Id) return Boolean is
        begin
!          if Etype (E) /= Typ or else Scope (E) /= Scope (Typ)  then
              return False;
  
           elsif Ekind (E) = E_Constant then
--- 15999,16010 ----
        end Valid_Assign_Indexed;
  
        -----------------
!       -- Valid_Empty --
        -----------------
  
        function Valid_Empty (E :  Entity_Id) return Boolean is
        begin
!          if Etype (E) /= Typ or else Scope (E) /= Scope (Typ) then
              return False;
  
           elsif Ekind (E) = E_Constant then
*************** package body Sem_Ch13 is
*** 15555,15561 ****
        -- Valid_Add_Named --
        ---------------------
  
!       function Valid_Add_Named  (E : Entity_Id) return Boolean is
           F2, F3 : Entity_Id;
        begin
           if Ekind (E) = E_Procedure
--- 16024,16030 ----
        -- Valid_Add_Named --
        ---------------------
  
!       function Valid_Add_Named (E : Entity_Id) return Boolean is
           F2, F3 : Entity_Id;
        begin
           if Ekind (E) = E_Procedure
*************** package body Sem_Ch13 is
*** 15654,15659 ****
--- 16123,16131 ----
        procedure Resolve_Assign_Indexed
                                  is new Resolve_Operation
                                                        (Valid_Assign_Indexed);
+ 
+    --  Start of processing for Resolve_Aspect_Aggregate
+ 
     begin
        Assoc := First (Component_Associations (Expr));
  
*************** package body Sem_Ch13 is
*** 15907,15912 ****
--- 16379,16712 ----
        Set_Analyzed (Expr);
     end Resolve_Aspect_Stable_Properties;
  
+    -----------------------------------------
+    -- Resolve_Storage_Model_Type_Argument --
+    -----------------------------------------
+ 
+    procedure Resolve_Storage_Model_Type_Argument
+      (N         : Node_Id;
+       Typ       : Entity_Id;
+       Addr_Type : in out Entity_Id;
+       Nam       : Name_Id)
+    is
+ 
+       type Formal_Profile is record
+          Subt : Entity_Id;
+          Mode : Formal_Kind;
+       end record;
+ 
+       type Formal_Profiles is array (Positive range <>) of Formal_Profile;
+ 
+       function Aspect_Argument_Profile_Matches
+         (Subp            : Entity_Id;
+          Profiles        : Formal_Profiles;
+          Result_Subt     : Entity_Id;
+          Err_On_Mismatch : Boolean) return Boolean;
+       --  Checks that the formal parameters of subprogram Subp conform to the
+       --  subtypes and modes specified by Profiles, as well as to the result
+       --  subtype Result_Subt when that is nonempty.
+ 
+       function Aspect_Argument_Profile_Matches
+         (Subp            : Entity_Id;
+          Profiles        : Formal_Profiles;
+          Result_Subt     : Entity_Id;
+          Err_On_Mismatch : Boolean) return Boolean
+       is
+ 
+          procedure Report_Argument_Error
+            (Msg    : String;
+             Formal : Entity_Id := Empty;
+             Subt   : Entity_Id := Empty);
+          --  If Err_On_Mismatch is True, reports an argument error given by Msg
+          --  associated with Formal and/or Subt.
+ 
+          procedure Report_Argument_Error
+            (Msg    : String;
+             Formal : Entity_Id := Empty;
+             Subt   : Entity_Id := Empty)
+          is
+          begin
+             if Err_On_Mismatch then
+                if Present (Formal) then
+                   if Present (Subt) then
+                      Error_Msg_Node_2 := Subt;
+                   end if;
+                   Error_Msg_NE (Msg, N, Formal);
+ 
+                elsif Present (Subt) then
+                   Error_Msg_NE (Msg, N, Subt);
+ 
+                else
+                   Error_Msg_N (Msg, N);
+                end if;
+             end if;
+          end Report_Argument_Error;
+ 
+          --  Local variables
+ 
+          Formal    : Entity_Id := First_Formal (Subp);
+          Is_Error  : Boolean   := False;
+ 
+       --  Start of processing for Aspect_Argument_Profile_Matches
+ 
+       begin
+          for FP of Profiles loop
+             if not Present (Formal) then
+                Is_Error := True;
+                Report_Argument_Error ("missing formal of }", Subt => FP.Subt);
+                exit;
+ 
+             elsif not Subtypes_Statically_Match
+                         (Etype (Formal), FP.Subt)
+             then
+                Is_Error := True;
+                Report_Argument_Error
+                  ("formal& must be of subtype&",
+                   Formal => Formal, Subt => FP.Subt);
+                exit;
+ 
+             elsif Ekind (Formal) /= FP.Mode then
+                Is_Error := True;
+                Report_Argument_Error
+                  ("formal& has wrong mode", Formal => Formal);
+                exit;
+             end if;
+ 
+             Formal := Next_Formal (Formal);
+          end loop;
+ 
+          if not Is_Error
+            and then Present (Formal)
+          then
+             Is_Error := True;
+             Report_Argument_Error
+               ("too many formals for subprogram in aspect");
+          end if;
+ 
+          if not Is_Error
+            and then Present (Result_Subt)
+            and then not Subtypes_Statically_Match (Etype (Subp), Result_Subt)
+          then
+             Is_Error := True;
+             Report_Argument_Error
+               ("subprogram must have result}", Subt => Result_Subt);
+          end if;
+ 
+          return not Is_Error;
+       end Aspect_Argument_Profile_Matches;
+ 
+       --  Local variables
+ 
+       Ent : Entity_Id;
+ 
+       Storage_Count_Type  : constant Entity_Id := RTE (RE_Storage_Count);
+       System_Address_Type : constant Entity_Id := RTE (RE_Address);
+ 
+    --  Start of processing for Resolve_Storage_Model_Type_Argument
+ 
+    begin
+       if Nam = Name_Address_Type then
+          if not Is_Entity_Name (N)
+            or else not Is_Type (Entity (N))
+            or else (Root_Type (Entity (N)) /= System_Address_Type
+                      and then not Is_Integer_Type (Entity (N)))
+          then
+             Error_Msg_N ("named entity must be a descendant of System.Address "
+                          & "or an integer type", N);
+          end if;
+ 
+          Addr_Type := Entity (N);
+ 
+          return;
+ 
+       elsif not Present (Addr_Type) then
+          Error_Msg_N ("argument association for Address_Type missing; "
+                          & "must be specified as first aspect argument", N);
+          return;
+ 
+       elsif Nam = Name_Null_Address then
+          if not Is_Entity_Name (N)
+            or else not Is_Constant_Object (Entity (N))
+            or else
+              not Subtypes_Statically_Match (Etype (Entity (N)), Addr_Type)
+          then
+             Error_Msg_NE
+               ("named entity must be constant of subtype}", N, Addr_Type);
+          end if;
+ 
+          return;
+ 
+       elsif not Is_Overloaded (N) then
+          if not Is_Entity_Name (N)
+            or else Ekind (Entity (N)) not in E_Function | E_Procedure
+            or else Scope (Entity (N)) /= Scope (Typ)
+          then
+             Error_Msg_N ("argument must be local subprogram name", N);
+             return;
+          end if;
+ 
+          Ent := Entity (N);
+ 
+          if Nam = Name_Allocate then
+             if not Aspect_Argument_Profile_Matches
+                      (Ent,
+                       Profiles        =>
+                         ((Typ,                E_In_Out_Parameter),
+                          (Addr_Type,          E_Out_Parameter),
+                          (Storage_Count_Type, E_In_Parameter),
+                          (Storage_Count_Type, E_In_Parameter)),
+                       Result_Subt     => Empty,
+                       Err_On_Mismatch => True)
+             then
+                Error_Msg_N ("no match for Allocate operation", N);
+             end if;
+ 
+          elsif Nam = Name_Deallocate then
+             if not Aspect_Argument_Profile_Matches
+                      (Ent,
+                       Profiles        =>
+                         ((Typ,                E_In_Out_Parameter),
+                          (Addr_Type,          E_In_Parameter),
+                          (Storage_Count_Type, E_In_Parameter),
+                          (Storage_Count_Type, E_In_Parameter)),
+                       Result_Subt     => Empty,
+                       Err_On_Mismatch => True)
+             then
+                Error_Msg_N ("no match for Deallocate operation", N);
+             end if;
+ 
+          elsif Nam = Name_Copy_From then
+             if not Aspect_Argument_Profile_Matches
+                      (Ent,
+                       Profiles        =>
+                         ((Typ,                 E_In_Out_Parameter),
+                          (System_Address_Type, E_In_Parameter),
+                          (Addr_Type,           E_In_Parameter),
+                          (Storage_Count_Type,  E_In_Parameter)),
+                       Result_Subt     => Empty,
+                       Err_On_Mismatch => True)
+             then
+                Error_Msg_N ("no match for Copy_From operation", N);
+             end if;
+ 
+          elsif Nam = Name_Copy_To then
+             if not Aspect_Argument_Profile_Matches
+                      (Ent,
+                       Profiles        =>
+                         ((Typ,                 E_In_Out_Parameter),
+                          (Addr_Type,           E_In_Parameter),
+                          (System_Address_Type, E_In_Parameter),
+                          (Storage_Count_Type,  E_In_Parameter)),
+                       Result_Subt     => Empty,
+                       Err_On_Mismatch => True)
+             then
+                Error_Msg_N ("no match for Copy_To operation", N);
+             end if;
+ 
+          elsif Nam = Name_Storage_Size then
+             if not Aspect_Argument_Profile_Matches
+                      (Ent,
+                       Profiles        => (1 => (Typ, E_In_Parameter)),
+                       Result_Subt     => Storage_Count_Type,
+                       Err_On_Mismatch => True)
+             then
+                Error_Msg_N ("no match for Storage_Size operation", N);
+             end if;
+ 
+          else
+             null; -- Error will be caught in Validate_Storage_Model_Type_Aspect
+          end if;
+ 
+       else
+          --  Overloaded case: find subprogram with proper signature
+ 
+          declare
+             I  : Interp_Index;
+             It : Interp;
+             Found_Match : Boolean := False;
+ 
+          begin
+             Get_First_Interp (N, I, It);
+             while Present (It.Typ) loop
+                if Ekind (It.Nam) in E_Function | E_Procedure
+                   and then Scope (It.Nam) = Scope (Typ)
+                then
+                   if Nam = Name_Allocate then
+                      Found_Match :=
+                        Aspect_Argument_Profile_Matches
+                          (It.Nam,
+                           Profiles        =>
+                             ((Typ,                E_In_Out_Parameter),
+                              (Addr_Type,          E_Out_Parameter),
+                              (Storage_Count_Type, E_In_Parameter),
+                              (Storage_Count_Type, E_In_Parameter)),
+                           Result_Subt     => Empty,
+                           Err_On_Mismatch => False);
+ 
+                   elsif Nam = Name_Deallocate then
+                      Found_Match :=
+                        Aspect_Argument_Profile_Matches
+                          (It.Nam,
+                           Profiles        =>
+                             ((Typ,                E_In_Out_Parameter),
+                              (Addr_Type,          E_In_Parameter),
+                              (Storage_Count_Type, E_In_Parameter),
+                              (Storage_Count_Type, E_In_Parameter)),
+                           Result_Subt     => Empty,
+                           Err_On_Mismatch => False);
+ 
+                   elsif Nam = Name_Copy_From then
+                      Found_Match :=
+                        Aspect_Argument_Profile_Matches
+                          (It.Nam,
+                           Profiles        =>
+                             ((Typ,                 E_In_Out_Parameter),
+                              (System_Address_Type, E_In_Parameter),
+                              (Addr_Type,           E_In_Parameter),
+                              (Storage_Count_Type,  E_In_Parameter),
+                              (Storage_Count_Type,  E_In_Parameter)),
+                           Result_Subt     => Empty,
+                           Err_On_Mismatch => False);
+ 
+                   elsif Nam = Name_Copy_To then
+                      Found_Match :=
+                        Aspect_Argument_Profile_Matches
+                          (It.Nam,
+                           Profiles        =>
+                             ((Typ,                 E_In_Out_Parameter),
+                              (Addr_Type,           E_In_Parameter),
+                              (Storage_Count_Type,  E_In_Parameter),
+                              (System_Address_Type, E_In_Parameter),
+                              (Storage_Count_Type,  E_In_Parameter)),
+                           Result_Subt     => Empty,
+                           Err_On_Mismatch => False);
+ 
+                   elsif Nam = Name_Storage_Size then
+                      Found_Match :=
+                        Aspect_Argument_Profile_Matches
+                          (It.Nam,
+                           Profiles        => (1 => (Typ, E_In_Parameter)),
+                           Result_Subt     => Storage_Count_Type,
+                           Err_On_Mismatch => False);
+                   end if;
+ 
+                   if Found_Match then
+                      Set_Entity (N, It.Nam);
+                      exit;
+                   end if;
+                end if;
+ 
+                Get_Next_Interp (I, It);
+             end loop;
+ 
+             if not Found_Match then
+                Error_Msg_N
+                  ("no match found for Storage_Model_Type operation", N);
+             end if;
+          end;
+       end if;
+    end Resolve_Storage_Model_Type_Argument;
+ 
     ----------------
     -- Set_Biased --
     ----------------
*************** package body Sem_Ch13 is
*** 15923,15929 ****
  
           if Warn_On_Biased_Representation then
              Error_Msg_NE
!               ("?B?" & Msg & " forces biased representation for&", N, E);
           end if;
        end if;
     end Set_Biased;
--- 16723,16729 ----
  
           if Warn_On_Biased_Representation then
              Error_Msg_NE
!               ("?.b?" & Msg & " forces biased representation for&", N, E);
           end if;
        end if;
     end Set_Biased;
*************** package body Sem_Ch13 is
*** 15935,15944 ****
     procedure Set_Enum_Esize (T : Entity_Id) is
        Lo : Uint;
        Hi : Uint;
!       Sz : Nat;
  
     begin
!       Init_Alignment (T);
  
        --  Find the minimum standard size (8,16,32,64,128) that fits
  
--- 16735,16744 ----
     procedure Set_Enum_Esize (T : Entity_Id) is
        Lo : Uint;
        Hi : Uint;
!       Sz : Unat;
  
     begin
!       Reinit_Alignment (T);
  
        --  Find the minimum standard size (8,16,32,64,128) that fits
  
*************** package body Sem_Ch13 is
*** 15946,15982 ****
        Hi := Enumeration_Rep (Entity (Type_High_Bound (T)));
  
        if Lo < 0 then
!          if Lo >= -Uint_2**07 and then Hi < Uint_2**07 then
!             Sz := Standard_Character_Size;  -- May be > 8 on some targets
  
           elsif Lo >= -Uint_2**15 and then Hi < Uint_2**15 then
!             Sz := 16;
  
           elsif Lo >= -Uint_2**31 and then Hi < Uint_2**31 then
!             Sz := 32;
  
           elsif Lo >= -Uint_2**63 and then Hi < Uint_2**63 then
!             Sz := 64;
  
           else pragma Assert (Lo >= -Uint_2**127 and then Hi < Uint_2**127);
!             Sz := 128;
           end if;
  
        else
!          if Hi < Uint_2**08 then
!             Sz := Standard_Character_Size;  -- May be > 8 on some targets
  
           elsif Hi < Uint_2**16 then
!             Sz := 16;
  
           elsif Hi < Uint_2**32 then
!             Sz := 32;
  
           elsif Hi < Uint_2**64 then
!             Sz := 64;
  
           else pragma Assert (Hi < Uint_2**128);
!             Sz := 128;
           end if;
        end if;
  
--- 16746,16783 ----
        Hi := Enumeration_Rep (Entity (Type_High_Bound (T)));
  
        if Lo < 0 then
!          if Lo >= -Uint_2**7 and then Hi < Uint_2**7 then
!             Sz := UI_From_Int (Standard_Character_Size);
!             --  Might be > 8 on some targets
  
           elsif Lo >= -Uint_2**15 and then Hi < Uint_2**15 then
!             Sz := Uint_16;
  
           elsif Lo >= -Uint_2**31 and then Hi < Uint_2**31 then
!             Sz := Uint_32;
  
           elsif Lo >= -Uint_2**63 and then Hi < Uint_2**63 then
!             Sz := Uint_64;
  
           else pragma Assert (Lo >= -Uint_2**127 and then Hi < Uint_2**127);
!             Sz := Uint_128;
           end if;
  
        else
!          if Hi < Uint_2**8 then
!             Sz := UI_From_Int (Standard_Character_Size);
  
           elsif Hi < Uint_2**16 then
!             Sz := Uint_16;
  
           elsif Hi < Uint_2**32 then
!             Sz := Uint_32;
  
           elsif Hi < Uint_2**64 then
!             Sz := Uint_64;
  
           else pragma Assert (Hi < Uint_2**128);
!             Sz := Uint_128;
           end if;
        end if;
  
*************** package body Sem_Ch13 is
*** 15992,16000 ****
  
          and then not Target_Short_Enums
        then
!          Init_Esize (T, Standard_Integer_Size);
        else
!          Init_Esize (T, Sz);
        end if;
     end Set_Enum_Esize;
  
--- 16793,16801 ----
  
          and then not Target_Short_Enums
        then
!          Set_Esize (T, UI_From_Int (Standard_Integer_Size));
        else
!          Set_Esize (T, Sz);
        end if;
     end Set_Enum_Esize;
  
*************** package body Sem_Ch13 is
*** 16077,16083 ****
  
              elsif Nkind (N) = N_Selected_Component then
                 Off := Component_Bit_Offset (Entity (Selector_Name (N)));
!                if Off /= No_Uint and then Off >= Uint_0 then
                    Val := Val + Off;
                    N   := Prefix (N);
                 else
--- 16878,16884 ----
  
              elsif Nkind (N) = N_Selected_Component then
                 Off := Component_Bit_Offset (Entity (Selector_Name (N)));
!                if Present (Off) and then Off >= Uint_0 then
                    Val := Val + Off;
                    N   := Prefix (N);
                 else
*************** package body Sem_Ch13 is
*** 16086,16092 ****
  
              elsif Nkind (N) = N_Indexed_Component then
                 Off := Indexed_Component_Bit_Offset (N);
!                if Off /= No_Uint then
                    Val := Val + Off;
                    N   := Prefix (N);
                 else
--- 16887,16893 ----
  
              elsif Nkind (N) = N_Indexed_Component then
                 Off := Indexed_Component_Bit_Offset (N);
!                if Present (Off) then
                    Val := Val + Off;
                    N   := Prefix (N);
                 else
*************** package body Sem_Ch13 is
*** 16118,16126 ****
              X_Offs : Uint;
  
           begin
!             --  Skip processing of this entry if warning already posted
  
!             if not Address_Warning_Posted (ACCR.N) then
                 Expr := Original_Node (Expression (ACCR.N));
  
                 --  Get alignments, sizes and offset, if any
--- 16919,16931 ----
              X_Offs : Uint;
  
           begin
!             --  Skip processing of this entry if warning already posted, or if
!             --  alignments are not set.
  
!             if not Address_Warning_Posted (ACCR.N)
!               and then Known_Alignment (ACCR.X)
!               and then Known_Alignment (ACCR.Y)
!             then
                 Expr := Original_Node (Expression (ACCR.N));
  
                 --  Get alignments, sizes and offset, if any
*************** package body Sem_Ch13 is
*** 16130,16136 ****
  
                 if Present (ACCR.Y) then
                    Y_Alignment := Alignment (ACCR.Y);
!                   Y_Size      := Esize (ACCR.Y);
                 end if;
  
                 if ACCR.Off
--- 16935,16942 ----
  
                 if Present (ACCR.Y) then
                    Y_Alignment := Alignment (ACCR.Y);
!                   Y_Size :=
!                     (if Known_Esize (ACCR.Y) then Esize (ACCR.Y) else Uint_0);
                 end if;
  
                 if ACCR.Off
*************** package body Sem_Ch13 is
*** 16318,16330 ****
  
     procedure Validate_Literal_Aspect (Typ : Entity_Id; ASN : Node_Id) is
        A_Id        : constant Aspect_Id := Get_Aspect_Id (ASN);
!       pragma Assert ((A_Id = Aspect_Integer_Literal) or
!                      (A_Id = Aspect_Real_Literal) or
!                      (A_Id = Aspect_String_Literal));
        Func_Name   : constant Node_Id := Expression (ASN);
        Overloaded  : Boolean := Is_Overloaded (Func_Name);
  
!       I            : Interp_Index;
        It           : Interp;
        Param_Type   : Entity_Id;
        Match_Found  : Boolean := False;
--- 17124,17135 ----
  
     procedure Validate_Literal_Aspect (Typ : Entity_Id; ASN : Node_Id) is
        A_Id        : constant Aspect_Id := Get_Aspect_Id (ASN);
!       pragma Assert (A_Id in Aspect_Integer_Literal |
!                              Aspect_Real_Literal | Aspect_String_Literal);
        Func_Name   : constant Node_Id := Expression (ASN);
        Overloaded  : Boolean := Is_Overloaded (Func_Name);
  
!       I            : Interp_Index := 0;
        It           : Interp;
        Param_Type   : Entity_Id;
        Match_Found  : Boolean := False;
*************** package body Sem_Ch13 is
*** 16378,16384 ****
        end if;
  
        if not Overloaded and then not Present (Entity (Func_Name)) then
!          Analyze (Func_Name);
           Overloaded := Is_Overloaded (Func_Name);
        end if;
  
--- 17183,17197 ----
        end if;
  
        if not Overloaded and then not Present (Entity (Func_Name)) then
!          --  The aspect is specified by a subprogram name, which
!          --  may be an operator name given originally by a string.
! 
!          if Is_Operator_Name (Chars (Func_Name)) then
!             Analyze_Operator_Symbol (Func_Name);
!          else
!             Analyze (Func_Name);
!          end if;
! 
           Overloaded := Is_Overloaded (Func_Name);
        end if;
  
*************** package body Sem_Ch13 is
*** 16475,16480 ****
--- 17288,17403 ----
        end if;
     end Validate_Literal_Aspect;
  
+    ----------------------------------------
+    -- Validate_Storage_Model_Type_Aspect --
+    ----------------------------------------
+ 
+    procedure Validate_Storage_Model_Type_Aspect
+      (Typ : Entity_Id; ASN : Node_Id)
+    is
+       Assoc  : Node_Id;
+       Choice : Entity_Id;
+       Expr   : Node_Id;
+ 
+       Address_Type_Id : Entity_Id := Empty;
+       Null_Address_Id : Entity_Id := Empty;
+       Allocate_Id     : Entity_Id := Empty;
+       Deallocate_Id   : Entity_Id := Empty;
+       Copy_From_Id    : Entity_Id := Empty;
+       Copy_To_Id      : Entity_Id := Empty;
+       Storage_Size_Id : Entity_Id := Empty;
+ 
+    begin
+       --  Each expression must resolve to an entity of the right kind or proper
+       --  profile.
+ 
+       Assoc := First (Component_Associations (Expression (ASN)));
+       while Present (Assoc) loop
+          Expr := Expression (Assoc);
+          Analyze (Expr);
+ 
+          Choice := First (Choices (Assoc));
+ 
+          if Nkind (Choice) /= N_Identifier or else Present (Next (Choice)) then
+             Error_Msg_N ("illegal name in association", Choice);
+ 
+          elsif Chars (Choice) = Name_Address_Type then
+             if Assoc /= First (Component_Associations (Expression (ASN))) then
+                Error_Msg_N ("Address_Type must be first association", Choice);
+             end if;
+ 
+             Resolve_Storage_Model_Type_Argument
+               (Expr, Typ, Address_Type_Id, Name_Address_Type);
+             Address_Type_Id := Entity (Expr);
+ 
+          --  Shouldn't we check for duplicates of the same subaspect name,
+          --  and issue an error in such cases???
+ 
+          elsif not Present (Address_Type_Id) then
+             Error_Msg_N
+               ("Address_Type missing, must be first association", Choice);
+ 
+          elsif Chars (Choice) = Name_Null_Address then
+             Resolve_Storage_Model_Type_Argument
+               (Expr, Typ, Address_Type_Id, Name_Null_Address);
+             Null_Address_Id := Entity (Expr);
+ 
+          elsif Chars (Choice) = Name_Allocate then
+             Resolve_Storage_Model_Type_Argument
+               (Expr, Typ, Address_Type_Id, Name_Allocate);
+             Allocate_Id := Entity (Expr);
+ 
+          elsif Chars (Choice) = Name_Deallocate then
+             Resolve_Storage_Model_Type_Argument
+               (Expr, Typ, Address_Type_Id, Name_Deallocate);
+             Deallocate_Id := Entity (Expr);
+ 
+          elsif Chars (Choice) = Name_Copy_From then
+             Resolve_Storage_Model_Type_Argument
+               (Expr, Typ, Address_Type_Id, Name_Copy_From);
+             Copy_From_Id := Entity (Expr);
+ 
+          elsif Chars (Choice) = Name_Copy_To then
+             Resolve_Storage_Model_Type_Argument
+               (Expr, Typ, Address_Type_Id, Name_Copy_To);
+             Copy_To_Id := Entity (Expr);
+ 
+          elsif Chars (Choice) = Name_Storage_Size then
+             Resolve_Storage_Model_Type_Argument
+               (Expr, Typ, Address_Type_Id, Name_Storage_Size);
+             Storage_Size_Id := Entity (Expr);
+ 
+          else
+             Error_Msg_N
+               ("invalid name for Storage_Model_Type argument", Choice);
+          end if;
+ 
+          Next (Assoc);
+       end loop;
+ 
+       if No (Address_Type_Id) then
+          Error_Msg_N ("match for Address_Type not found", ASN);
+ 
+       elsif No (Null_Address_Id) then
+          Error_Msg_N ("match for Null_Address primitive not found", ASN);
+ 
+       elsif No (Allocate_Id) then
+          Error_Msg_N ("match for Allocate primitive not found", ASN);
+ 
+       elsif No (Deallocate_Id) then
+          Error_Msg_N ("match for Deallocate primitive not found", ASN);
+ 
+       elsif No (Copy_From_Id) then
+          Error_Msg_N ("match for Copy_From primitive not found", ASN);
+ 
+       elsif No (Copy_To_Id) then
+          Error_Msg_N ("match for Copy_To primitive not found", ASN);
+ 
+       elsif No (Storage_Size_Id) then
+          Error_Msg_N ("match for Storage_Size primitive not found", ASN);
+       end if;
+    end Validate_Storage_Model_Type_Aspect;
+ 
     -----------------------------------
     -- Validate_Unchecked_Conversion --
     -----------------------------------
*************** package body Sem_Ch13 is
*** 16485,16509 ****
     is
        Source : Entity_Id;
        Target : Entity_Id;
        Vnode  : Node_Id;
  
     begin
        --  Obtain source and target types. Note that we call Ancestor_Subtype
        --  here because the processing for generic instantiation always makes
        --  subtypes, and we want the original frozen actual types.
  
-       --  If we are dealing with private types, then do the check on their
-       --  fully declared counterparts if the full declarations have been
-       --  encountered (they don't have to be visible, but they must exist).
- 
        Source := Ancestor_Subtype (Etype (First_Formal (Act_Unit)));
- 
-       if Is_Private_Type (Source)
-         and then Present (Underlying_Type (Source))
-       then
-          Source := Underlying_Type (Source);
-       end if;
- 
        Target := Ancestor_Subtype (Etype (Act_Unit));
  
        --  If either type is generic, the instantiation happens within a generic
--- 17408,17445 ----
     is
        Source : Entity_Id;
        Target : Entity_Id;
+ 
+       procedure Warn_Nonportable (RE : RE_Id);
+       --  Warn if either source or target of the conversion is a predefined
+       --  private type, whose representation might differ between releases and
+       --  targets of the compiler.
+ 
+       ----------------------
+       -- Warn_Nonportable --
+       ----------------------
+ 
+       procedure Warn_Nonportable (RE : RE_Id) is
+       begin
+          if Is_RTE (Source, RE) or else Is_RTE (Target, RE) then
+             pragma Assert (Is_Private_Type (RTE (RE)));
+             Error_Msg_NE
+               ("?z?representation of & values may change between "
+                & "'G'N'A'T versions", N, RTE (RE));
+          end if;
+       end Warn_Nonportable;
+ 
+       --  Local variables
+ 
        Vnode  : Node_Id;
  
+    --  Start of processing for Validate_Unchecked_Conversion
+ 
     begin
        --  Obtain source and target types. Note that we call Ancestor_Subtype
        --  here because the processing for generic instantiation always makes
        --  subtypes, and we want the original frozen actual types.
  
        Source := Ancestor_Subtype (Etype (First_Formal (Act_Unit)));
        Target := Ancestor_Subtype (Etype (Act_Unit));
  
        --  If either type is generic, the instantiation happens within a generic
*************** package body Sem_Ch13 is
*** 16514,16519 ****
--- 17450,17477 ----
           return;
        end if;
  
+       --  Warn if one of the operands is a private type declared in
+       --  Ada.Calendar or Ada.Real_Time. Do not emit a warning when compiling
+       --  GNAT-related sources.
+ 
+       if Warn_On_Unchecked_Conversion
+         and then not In_Predefined_Unit (N)
+       then
+          Warn_Nonportable (RO_CA_Time);
+          Warn_Nonportable (RO_RT_Time);
+          Warn_Nonportable (RE_Time_Span);
+       end if;
+ 
+       --  If we are dealing with private types, then do the check on their
+       --  fully declared counterparts if the full declarations have been
+       --  encountered (they don't have to be visible, but they must exist).
+ 
+       if Is_Private_Type (Source)
+         and then Present (Underlying_Type (Source))
+       then
+          Source := Underlying_Type (Source);
+       end if;
+ 
        if Is_Private_Type (Target)
          and then Present (Underlying_Type (Target))
        then
*************** package body Sem_Ch13 is
*** 16550,16581 ****
           end if;
        end if;
  
-       --  Warn if one of the operands is Ada.Calendar.Time. Do not emit a
-       --  warning when compiling GNAT-related sources.
- 
-       if Warn_On_Unchecked_Conversion
-         and then not In_Predefined_Unit (N)
-         and then RTU_Loaded (Ada_Calendar)
-         and then (Chars (Source) = Name_Time
-                     or else
-                   Chars (Target) = Name_Time)
-       then
-          --  If Ada.Calendar is loaded and the name of one of the operands is
-          --  Time, there is a good chance that this is Ada.Calendar.Time.
- 
-          declare
-             Calendar_Time : constant Entity_Id := Full_View (RTE (RO_CA_Time));
-          begin
-             pragma Assert (Present (Calendar_Time));
- 
-             if Source = Calendar_Time or else Target = Calendar_Time then
-                Error_Msg_N
-                  ("?z?representation of 'Time values may change between "
-                   & "'G'N'A'T versions", N);
-             end if;
-          end;
-       end if;
- 
        --  Make entry in unchecked conversion table for later processing by
        --  Validate_Unchecked_Conversions, which will check sizes and alignments
        --  (using values set by the back end where possible). This is only done
--- 17508,17513 ----
*************** package body Sem_Ch13 is
*** 16606,16617 ****
        --  in the same unit as the unchecked conversion, then set the flag
        --  No_Strict_Aliasing (no strict aliasing is implicit here)
  
!       if Is_Access_Type (Target) and then
!         In_Same_Source_Unit (Target, N)
        then
           Set_No_Strict_Aliasing (Implementation_Base_Type (Target));
        end if;
  
        --  Generate N_Validate_Unchecked_Conversion node for back end in case
        --  the back end needs to perform special validation checks.
  
--- 17538,17565 ----
        --  in the same unit as the unchecked conversion, then set the flag
        --  No_Strict_Aliasing (no strict aliasing is implicit here)
  
!       if Is_Access_Type (Target)
!         and then In_Same_Source_Unit (Target, N)
        then
           Set_No_Strict_Aliasing (Implementation_Base_Type (Target));
        end if;
  
+       --  If the unchecked conversion is between Address and an access
+       --  subprogram type, show that we shouldn't use an internal
+       --  representation for the access subprogram type.
+ 
+       if Is_Access_Subprogram_Type (Target)
+         and then Is_Descendant_Of_Address (Source)
+         and then In_Same_Source_Unit (Target, N)
+       then
+          Set_Can_Use_Internal_Rep (Target, False);
+       elsif Is_Access_Subprogram_Type (Source)
+         and then Is_Descendant_Of_Address (Target)
+         and then In_Same_Source_Unit (Source, N)
+       then
+          Set_Can_Use_Internal_Rep (Source, False);
+       end if;
+ 
        --  Generate N_Validate_Unchecked_Conversion node for back end in case
        --  the back end needs to perform special validation checks.
  
*************** package body Sem_Ch13 is
*** 16710,16716 ****
                 Source_Siz := RM_Size (Source);
                 Target_Siz := RM_Size (Target);
  
!                if Source_Siz /= Target_Siz then
                    Error_Msg
                      ("?z?types for unchecked conversion have different sizes!",
                       Eloc, Act_Unit);
--- 17658,17666 ----
                 Source_Siz := RM_Size (Source);
                 Target_Siz := RM_Size (Target);
  
!                if Present (Source_Siz) and then Present (Target_Siz)
!                  and then Source_Siz /= Target_Siz
!                then
                    Error_Msg
                      ("?z?types for unchecked conversion have different sizes!",
                       Eloc, Act_Unit);
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch13.ads gcc-12.1.0/gcc/ada/sem_ch13.ads
*** gcc-11.3.0/gcc/ada/sem_ch13.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch13.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Ch13 is
*** 81,89 ****
     --  the setting of the RM_Size field is not affected. This routine also
     --  initializes the alignment field to zero.
  
     function Minimum_Size
       (T      : Entity_Id;
!       Biased : Boolean := False) return Nat;
     --  Given an elementary type, determines the minimum number of bits required
     --  to represent all values of the type. This function may not be called
     --  with any other types. If the flag Biased is set True, then the minimum
--- 81,91 ----
     --  the setting of the RM_Size field is not affected. This routine also
     --  initializes the alignment field to zero.
  
+    Unknown_Minimum_Size : constant Nonzero_Int := -1;
+ 
     function Minimum_Size
       (T      : Entity_Id;
!       Biased : Boolean := False) return Int;
     --  Given an elementary type, determines the minimum number of bits required
     --  to represent all values of the type. This function may not be called
     --  with any other types. If the flag Biased is set True, then the minimum
*************** package Sem_Ch13 is
*** 96,102 ****
     --  the type is already biased, then Minimum_Size returns the biased size,
     --  regardless of the setting of Biased. Also, fixed-point types are never
     --  biased in the current implementation. If the size is not known at
!    --  compile time, this function returns 0.
  
     procedure Check_Constant_Address_Clause (Expr : Node_Id; U_Ent : Entity_Id);
     --  Expr is an expression for an address clause. This procedure checks
--- 98,104 ----
     --  the type is already biased, then Minimum_Size returns the biased size,
     --  regardless of the setting of Biased. Also, fixed-point types are never
     --  biased in the current implementation. If the size is not known at
!    --  compile time, this function returns Unknown_Minimum_Size.
  
     procedure Check_Constant_Address_Clause (Expr : Node_Id; U_Ent : Entity_Id);
     --  Expr is an expression for an address clause. This procedure checks
*************** package Sem_Ch13 is
*** 115,132 ****
        Siz    : Uint;
        Biased : out Boolean);
     --  Called when size Siz is specified for subtype T. This subprogram checks
!    --  that the size is appropriate, posting errors on node N as required.
!    --  This check is effective for elementary types and bit-packed arrays.
!    --  For other non-elementary types, a check is only made if an explicit
!    --  size has been given for the type (and the specified size must match).
!    --  The parameter Biased is set False if the size specified did not require
!    --  the use of biased representation, and True if biased representation
!    --  was required to meet the size requirement. Note that Biased is only
!    --  set if the type is not currently biased, but biasing it is the only
!    --  way to meet the requirement. If the type is currently biased, then
!    --  this biased size is used in the initial check, and Biased is False.
!    --  If the size is too small, and an error message is given, then both
!    --  Esize and RM_Size are reset to the allowed minimum value in T.
  
     function Has_Compatible_Representation
       (Target_Type, Operand_Type : Entity_Id) return Boolean;
--- 117,133 ----
        Siz    : Uint;
        Biased : out Boolean);
     --  Called when size Siz is specified for subtype T. This subprogram checks
!    --  that the size is appropriate, posting errors on node N as required. This
!    --  check is effective for elementary types and bit-packed arrays. For
!    --  composite types, a check is only made if an explicit size has been given
!    --  for the type (and the specified size must match).  The parameter Biased
!    --  is set False if the size specified did not require the use of biased
!    --  representation, and True if biased representation was required to meet
!    --  the size requirement. Note that Biased is only set if the type is not
!    --  currently biased, but biasing it is the only way to meet the
!    --  requirement. If the type is currently biased, then this biased size is
!    --  used in the initial check, and Biased is False. For a Component_Size
!    --  clause, T is the component type.
  
     function Has_Compatible_Representation
       (Target_Type, Operand_Type : Entity_Id) return Boolean;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch2.adb gcc-12.1.0/gcc/ada/sem_ch2.adb
*** gcc-11.3.0/gcc/ada/sem_ch2.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch2.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,39 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Namet;    use Namet;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Dim;  use Sem_Dim;
! with Sinfo;    use Sinfo;
! with Stand;    use Stand;
! with Uintp;    use Uintp;
  
  package body Sem_Ch2 is
  
--- 23,41 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Utils;    use Einfo.Utils;
! with Namet;          use Namet;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Dim;        use Sem_Dim;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Stand;          use Stand;
! with Uintp;          use Uintp;
  
  package body Sem_Ch2 is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch2.ads gcc-12.1.0/gcc/ada/sem_ch2.ads
*** gcc-11.3.0/gcc/ada/sem_ch2.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch2.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch3.adb gcc-12.1.0/gcc/ada/sem_ch3.adb
*** gcc-11.3.0/gcc/ada/sem_ch3.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch3.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,85 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;   use Aspects;
! with Atree;     use Atree;
! with Checks;    use Checks;
! with Contracts; use Contracts;
! with Debug;     use Debug;
! with Elists;    use Elists;
! with Einfo;     use Einfo;
! with Errout;    use Errout;
! with Eval_Fat;  use Eval_Fat;
! with Exp_Ch3;   use Exp_Ch3;
! with Exp_Ch9;   use Exp_Ch9;
! with Exp_Disp;  use Exp_Disp;
! with Exp_Dist;  use Exp_Dist;
! with Exp_Tss;   use Exp_Tss;
! with Exp_Util;  use Exp_Util;
! with Freeze;    use Freeze;
! with Ghost;     use Ghost;
! with Itypes;    use Itypes;
! with Layout;    use Layout;
! with Lib;       use Lib;
! with Lib.Xref;  use Lib.Xref;
! with Namet;     use Namet;
! with Nlists;    use Nlists;
! with Nmake;     use Nmake;
! with Opt;       use Opt;
! with Restrict;  use Restrict;
! with Rident;    use Rident;
! with Rtsfind;   use Rtsfind;
! with Sem;       use Sem;
! with Sem_Aux;   use Sem_Aux;
! with Sem_Case;  use Sem_Case;
! with Sem_Cat;   use Sem_Cat;
! with Sem_Ch6;   use Sem_Ch6;
! with Sem_Ch7;   use Sem_Ch7;
! with Sem_Ch8;   use Sem_Ch8;
! with Sem_Ch13;  use Sem_Ch13;
! with Sem_Dim;   use Sem_Dim;
! with Sem_Disp;  use Sem_Disp;
! with Sem_Dist;  use Sem_Dist;
! with Sem_Elab;  use Sem_Elab;
! with Sem_Elim;  use Sem_Elim;
! with Sem_Eval;  use Sem_Eval;
! with Sem_Mech;  use Sem_Mech;
! with Sem_Res;   use Sem_Res;
! with Sem_Smem;  use Sem_Smem;
! with Sem_Type;  use Sem_Type;
! with Sem_Util;  use Sem_Util;
! with Sem_Warn;  use Sem_Warn;
! with Stand;     use Stand;
! with Sinfo;     use Sinfo;
! with Sinput;    use Sinput;
! with Snames;    use Snames;
! with Targparm;  use Targparm;
! with Tbuild;    use Tbuild;
! with Ttypes;    use Ttypes;
! with Uintp;     use Uintp;
! with Urealp;    use Urealp;
  
  package body Sem_Ch3 is
  
--- 23,90 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Contracts;      use Contracts;
! with Debug;          use Debug;
! with Elists;         use Elists;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Eval_Fat;       use Eval_Fat;
! with Exp_Ch3;        use Exp_Ch3;
! with Exp_Ch9;        use Exp_Ch9;
! with Exp_Disp;       use Exp_Disp;
! with Exp_Dist;       use Exp_Dist;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Ghost;          use Ghost;
! with Itypes;         use Itypes;
! with Layout;         use Layout;
! with Lib;            use Lib;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Case;       use Sem_Case;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Dim;        use Sem_Dim;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Elim;       use Sem_Elim;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Mech;       use Sem_Mech;
! with Sem_Res;        use Sem_Res;
! with Sem_Smem;       use Sem_Smem;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Strub;          use Strub;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
! with Urealp;         use Urealp;
  
  package body Sem_Ch3 is
  
*************** package body Sem_Ch3 is
*** 245,255 ****
     --  belongs must be a concurrent type or a descendant of a type with
     --  the reserved word 'limited' in its declaration.
  
!    procedure Check_Anonymous_Access_Components
!       (Typ_Decl  : Node_Id;
!        Typ       : Entity_Id;
!        Prev      : Entity_Id;
!        Comp_List : Node_Id);
     --  Ada 2005 AI-382: an access component in a record definition can refer to
     --  the enclosing record, in which case it denotes the type itself, and not
     --  the current instance of the type. We create an anonymous access type for
--- 250,261 ----
     --  belongs must be a concurrent type or a descendant of a type with
     --  the reserved word 'limited' in its declaration.
  
!    procedure Check_Anonymous_Access_Component
!      (Typ_Decl   : Node_Id;
!       Typ        : Entity_Id;
!       Prev       : Entity_Id;
!       Comp_Def   : Node_Id;
!       Access_Def : Node_Id);
     --  Ada 2005 AI-382: an access component in a record definition can refer to
     --  the enclosing record, in which case it denotes the type itself, and not
     --  the current instance of the type. We create an anonymous access type for
*************** package body Sem_Ch3 is
*** 259,264 ****
--- 265,277 ----
     --  circularity issues in Gigi. We create an incomplete type for the record
     --  declaration, which is the designated type of the anonymous access.
  
+    procedure Check_Anonymous_Access_Components
+      (Typ_Decl  : Node_Id;
+       Typ       : Entity_Id;
+       Prev      : Entity_Id;
+       Comp_List : Node_Id);
+    --  Call Check_Anonymous_Access_Component on Comp_List
+ 
     procedure Check_Constraining_Discriminant (New_Disc, Old_Disc : Entity_Id);
     --  Check that, if a new discriminant is used in a constraint defining the
     --  parent subtype of a derivation, its subtype is statically compatible
*************** package body Sem_Ch3 is
*** 684,691 ****
     --  copy will leave the references to the ancestor discriminants unchanged
     --  in the declaration tree and they need to be fixed up. If the derived
     --  type has a known discriminant part, then the remapping done during the
!    --  copy will only create references to the girder discriminants and they
!    --  need to be replaced with references to the non-girder discriminants.
  
     procedure Set_Fixed_Range
       (E   : Entity_Id;
--- 697,704 ----
     --  copy will leave the references to the ancestor discriminants unchanged
     --  in the declaration tree and they need to be fixed up. If the derived
     --  type has a known discriminant part, then the remapping done during the
!    --  copy will only create references to the stored discriminants and they
!    --  need to be replaced with references to the non-stored discriminants.
  
     procedure Set_Fixed_Range
       (E   : Entity_Id;
*************** package body Sem_Ch3 is
*** 710,715 ****
--- 723,738 ----
     --  sets the flags SSO_Set_Low_By_Default/SSO_Set_High_By_Default according
     --  to the setting of Opt.Default_SSO.
  
+    function Should_Build_Subtype (T : Entity_Id) return Boolean;
+    --  When analyzing components or object declarations, it is possible, in
+    --  some cases, to build subtypes for discriminated types. This is
+    --  worthwhile to avoid the backend allocating the maximum possible size for
+    --  objects of the type.
+    --  In particular, when T is limited, the discriminants and therefore the
+    --  size of an object of type T cannot change. Furthermore, if T is definite
+    --  with statically initialized defaulted discriminants, we are able and
+    --  want to build a constrained subtype of the right size.
+ 
     procedure Signed_Integer_Type_Declaration (T : Entity_Id; Def : Node_Id);
     --  Create a new signed integer entity, and apply the constraint to obtain
     --  the required first named subtype of this type.
*************** package body Sem_Ch3 is
*** 840,861 ****
        --  the corresponding semantic routine
  
        if Present (Access_To_Subprogram_Definition (N)) then
- 
-          --  Compiler runtime units are compiled in Ada 2005 mode when building
-          --  the runtime library but must also be compilable in Ada 95 mode
-          --  (when bootstrapping the compiler).
- 
-          Check_Compiler_Unit ("anonymous access to subprogram", N);
- 
           Access_Subprogram_Declaration
             (T_Name => Anon_Type,
              T_Def  => Access_To_Subprogram_Definition (N));
  
           if Ekind (Anon_Type) = E_Access_Protected_Subprogram_Type then
!             Set_Ekind
                (Anon_Type, E_Anonymous_Access_Protected_Subprogram_Type);
           else
!             Set_Ekind (Anon_Type, E_Anonymous_Access_Subprogram_Type);
           end if;
  
           Set_Can_Use_Internal_Rep
--- 863,877 ----
        --  the corresponding semantic routine
  
        if Present (Access_To_Subprogram_Definition (N)) then
           Access_Subprogram_Declaration
             (T_Name => Anon_Type,
              T_Def  => Access_To_Subprogram_Definition (N));
  
           if Ekind (Anon_Type) = E_Access_Protected_Subprogram_Type then
!             Mutate_Ekind
                (Anon_Type, E_Anonymous_Access_Protected_Subprogram_Type);
           else
!             Mutate_Ekind (Anon_Type, E_Anonymous_Access_Subprogram_Type);
           end if;
  
           Set_Can_Use_Internal_Rep
*************** package body Sem_Ch3 is
*** 1285,1300 ****
        Check_Delayed_Subprogram (Desig_Type);
  
        if Protected_Present (T_Def) then
!          Set_Ekind (T_Name, E_Access_Protected_Subprogram_Type);
           Set_Convention (Desig_Type, Convention_Protected);
        else
!          Set_Ekind (T_Name, E_Access_Subprogram_Type);
        end if;
  
        Set_Can_Use_Internal_Rep     (T_Name,
                                        not Always_Compatible_Rep_On_Target);
        Set_Etype                    (T_Name, T_Name);
!       Init_Size_Align              (T_Name);
        Set_Directly_Designated_Type (T_Name, Desig_Type);
  
        --  If the access_to_subprogram is not declared at the library level,
--- 1301,1316 ----
        Check_Delayed_Subprogram (Desig_Type);
  
        if Protected_Present (T_Def) then
!          Mutate_Ekind (T_Name, E_Access_Protected_Subprogram_Type);
           Set_Convention (Desig_Type, Convention_Protected);
        else
!          Mutate_Ekind (T_Name, E_Access_Subprogram_Type);
        end if;
  
        Set_Can_Use_Internal_Rep     (T_Name,
                                        not Always_Compatible_Rep_On_Target);
        Set_Etype                    (T_Name, T_Name);
!       Reinit_Size_Align            (T_Name);
        Set_Directly_Designated_Type (T_Name, Desig_Type);
  
        --  If the access_to_subprogram is not declared at the library level,
*************** package body Sem_Ch3 is
*** 1312,1317 ****
--- 1328,1335 ----
        Set_Can_Never_Be_Null (T_Name, Null_Exclusion_Present (T_Def));
  
        Check_Restriction (No_Access_Subprograms, T_Def);
+ 
+       Create_Extra_Formals (Desig_Type);
     end Access_Subprogram_Declaration;
  
     ----------------------------
*************** package body Sem_Ch3 is
*** 1319,1340 ****
     ----------------------------
  
     procedure Access_Type_Declaration (T : Entity_Id; Def : Node_Id) is
        P : constant Node_Id := Parent (Def);
        S : constant Node_Id := Subtype_Indication (Def);
  
        Full_Desig : Entity_Id;
  
     begin
        --  Check for permissible use of incomplete type
  
        if Nkind (S) /= N_Subtype_Indication then
           Analyze (S);
  
           if Nkind (S) in N_Has_Entity
             and then Present (Entity (S))
             and then Ekind (Root_Type (Entity (S))) = E_Incomplete_Type
           then
!             Set_Directly_Designated_Type (T, Entity (S));
  
              --  If the designated type is a limited view, we cannot tell if
              --  the full view contains tasks, and there is no way to handle
--- 1337,1384 ----
     ----------------------------
  
     procedure Access_Type_Declaration (T : Entity_Id; Def : Node_Id) is
+ 
+       procedure Setup_Access_Type (Desig_Typ : Entity_Id);
+       --  After type declaration is analysed with T being an incomplete type,
+       --  this routine will mutate the kind of T to the appropriate access type
+       --  and set its directly designated type to Desig_Typ.
+ 
+       -----------------------
+       -- Setup_Access_Type --
+       -----------------------
+ 
+       procedure Setup_Access_Type (Desig_Typ : Entity_Id) is
+       begin
+          if All_Present (Def) or else Constant_Present (Def) then
+             Mutate_Ekind (T, E_General_Access_Type);
+          else
+             Mutate_Ekind (T, E_Access_Type);
+          end if;
+ 
+          Set_Directly_Designated_Type (T, Desig_Typ);
+       end Setup_Access_Type;
+ 
+       --  Local variables
+ 
        P : constant Node_Id := Parent (Def);
        S : constant Node_Id := Subtype_Indication (Def);
  
        Full_Desig : Entity_Id;
  
+    --  Start of processing for Access_Type_Declaration
+ 
     begin
        --  Check for permissible use of incomplete type
  
        if Nkind (S) /= N_Subtype_Indication then
+ 
           Analyze (S);
  
           if Nkind (S) in N_Has_Entity
             and then Present (Entity (S))
             and then Ekind (Root_Type (Entity (S))) = E_Incomplete_Type
           then
!             Setup_Access_Type (Desig_Typ => Entity (S));
  
              --  If the designated type is a limited view, we cannot tell if
              --  the full view contains tasks, and there is no way to handle
*************** package body Sem_Ch3 is
*** 1345,1357 ****
              if From_Limited_With (Entity (S))
                and then not Is_Class_Wide_Type (Entity (S))
              then
-                Set_Ekind (T, E_Access_Type);
                 Build_Master_Entity (T);
                 Build_Master_Renaming (T);
              end if;
  
           else
!             Set_Directly_Designated_Type (T, Process_Subtype (S, P, T, 'P'));
           end if;
  
           --  If the access definition is of the form: ACCESS NOT NULL ..
--- 1389,1400 ----
              if From_Limited_With (Entity (S))
                and then not Is_Class_Wide_Type (Entity (S))
              then
                 Build_Master_Entity (T);
                 Build_Master_Renaming (T);
              end if;
  
           else
!             Setup_Access_Type (Desig_Typ => Process_Subtype (S, P, T, 'P'));
           end if;
  
           --  If the access definition is of the form: ACCESS NOT NULL ..
*************** package body Sem_Ch3 is
*** 1383,1444 ****
           end if;
  
        else
!          Set_Directly_Designated_Type (T,
!            Process_Subtype (S, P, T, 'P'));
!       end if;
! 
!       if All_Present (Def) or Constant_Present (Def) then
!          Set_Ekind (T, E_General_Access_Type);
!       else
!          Set_Ekind (T, E_Access_Type);
        end if;
  
!       Full_Desig := Designated_Type (T);
  
!       if Base_Type (Full_Desig) = T then
!          Error_Msg_N ("access type cannot designate itself", S);
  
!       --  In Ada 2005, the type may have a limited view through some unit in
!       --  its own context, allowing the following circularity that cannot be
!       --  detected earlier.
  
!       elsif Is_Class_Wide_Type (Full_Desig) and then Etype (Full_Desig) = T
!       then
!          Error_Msg_N
!            ("access type cannot designate its own class-wide type", S);
  
!          --  Clean up indication of tagged status to prevent cascaded errors
  
!          Set_Is_Tagged_Type (T, False);
!       end if;
  
!       Set_Etype (T, T);
  
!       --  For SPARK, check that the designated type is compatible with
!       --  respect to volatility with the access type.
  
!       if SPARK_Mode /= Off
!          and then Comes_From_Source (T)
!       then
!          --  ??? UNIMPLEMENTED
!          --  In the case where the designated type is incomplete at this point,
!          --  performing this check here is harmless but the check will need to
!          --  be repeated when the designated type is complete.
  
!          --  The preceding call to Comes_From_Source is needed because the
!          --  FE sometimes introduces implicitly declared access types. See,
!          --  for example, the expansion of nested_po.ads in OA28-015.
  
!          Check_Volatility_Compatibility
!            (Full_Desig, T, "designated type", "access type",
!             Srcpos_Bearer => T);
        end if;
  
        --  If the type has appeared already in a with_type clause, it is frozen
        --  and the pointer size is already set. Else, initialize.
  
        if not From_Limited_With (T) then
!          Init_Size_Align (T);
        end if;
  
        --  Note that Has_Task is always false, since the access type itself
--- 1426,1482 ----
           end if;
  
        else
!          Setup_Access_Type (Desig_Typ => Process_Subtype (S, P, T, 'P'));
        end if;
  
!       if not Error_Posted (T) then
!          Full_Desig := Designated_Type (T);
  
!          if Base_Type (Full_Desig) = T then
!             Error_Msg_N ("access type cannot designate itself", S);
  
!          --  In Ada 2005, the type may have a limited view through some unit in
!          --  its own context, allowing the following circularity that cannot be
!          --  detected earlier.
  
!          elsif Is_Class_Wide_Type (Full_Desig) and then Etype (Full_Desig) = T
!          then
!             Error_Msg_N
!               ("access type cannot designate its own class-wide type", S);
  
!             --  Clean up indication of tagged status to prevent cascaded errors
  
!             Set_Is_Tagged_Type (T, False);
!          end if;
  
!          Set_Etype (T, T);
  
!          --  For SPARK, check that the designated type is compatible with
!          --  respect to volatility with the access type.
  
!          if SPARK_Mode /= Off
!             and then Comes_From_Source (T)
!          then
!             --  ??? UNIMPLEMENTED
!             --  In the case where the designated type is incomplete at this
!             --  point, performing this check here is harmless but the check
!             --  will need to be repeated when the designated type is complete.
  
!             --  The preceding call to Comes_From_Source is needed because the
!             --  FE sometimes introduces implicitly declared access types. See,
!             --  for example, the expansion of nested_po.ads in OA28-015.
  
!             Check_Volatility_Compatibility
!               (Full_Desig, T, "designated type", "access type",
!                Srcpos_Bearer => T);
!          end if;
        end if;
  
        --  If the type has appeared already in a with_type clause, it is frozen
        --  and the pointer size is already set. Else, initialize.
  
        if not From_Limited_With (T) then
!          Reinit_Size_Align (T);
        end if;
  
        --  Note that Has_Task is always false, since the access type itself
*************** package body Sem_Ch3 is
*** 1519,1530 ****
           Analyze_Component_Declaration (Decl);
  
           Set_Analyzed (Decl);
!          Set_Ekind               (Tag, E_Component);
           Set_Is_Tag              (Tag);
           Set_Is_Aliased          (Tag);
           Set_Is_Independent      (Tag);
           Set_Related_Type        (Tag, Iface);
!          Init_Component_Location (Tag);
  
           pragma Assert (Is_Frozen (Iface));
  
--- 1557,1568 ----
           Analyze_Component_Declaration (Decl);
  
           Set_Analyzed (Decl);
!          Mutate_Ekind            (Tag, E_Component);
           Set_Is_Tag              (Tag);
           Set_Is_Aliased          (Tag);
           Set_Is_Independent      (Tag);
           Set_Related_Type        (Tag, Iface);
!          Reinit_Component_Location (Tag);
  
           pragma Assert (Is_Frozen (Iface));
  
*************** package body Sem_Ch3 is
*** 1560,1570 ****
              Analyze_Component_Declaration (Decl);
  
              Set_Analyzed (Decl);
!             Set_Ekind               (Offset, E_Component);
              Set_Is_Aliased          (Offset);
              Set_Is_Independent      (Offset);
              Set_Related_Type        (Offset, Iface);
!             Init_Component_Location (Offset);
              Insert_After (Last_Tag, Decl);
              Last_Tag := Decl;
           end if;
--- 1598,1608 ----
              Analyze_Component_Declaration (Decl);
  
              Set_Analyzed (Decl);
!             Mutate_Ekind            (Offset, E_Component);
              Set_Is_Aliased          (Offset);
              Set_Is_Independent      (Offset);
              Set_Related_Type        (Offset, Iface);
!             Reinit_Component_Location (Offset);
              Insert_After (Last_Tag, Decl);
              Last_Tag := Decl;
           end if;
*************** package body Sem_Ch3 is
*** 1580,1588 ****
  
     begin
        if not RTE_Available (RE_Interface_Tag) then
!          Error_Msg
!            ("(Ada 2005) interface types not supported by this run-time!",
!             Sloc (N));
           return;
        end if;
  
--- 1618,1625 ----
  
     begin
        if not RTE_Available (RE_Interface_Tag) then
!          Error_Msg_N
!            ("(Ada 2005) interface types not supported by this run-time!", N);
           return;
        end if;
  
*************** package body Sem_Ch3 is
*** 1775,1781 ****
                       elsif not Comes_From_Source (Prim) then
                          Error_Msg_NE
                            ("&inherits non-conforming preconditions and must "
!                            & "be overridden (RM 6.1.1 (10-16)",
                             Parent (Tagged_Type), Prim);
                       end if;
                    end if;
--- 1812,1818 ----
                       elsif not Comes_From_Source (Prim) then
                          Error_Msg_NE
                            ("&inherits non-conforming preconditions and must "
!                            & "be overridden (RM 6.1.1 (10-16))",
                             Parent (Tagged_Type), Prim);
                       end if;
                    end if;
*************** package body Sem_Ch3 is
*** 2057,2077 ****
           end if;
        end if;
  
-       --  Avoid reporting spurious errors if the component is initialized with
-       --  a raise expression (which is legal in any expression context)
- 
-       if Present (E)
-         and then
-           (Nkind (E) = N_Raise_Expression
-              or else (Nkind (E) = N_Qualified_Expression
-                         and then Nkind (Expression (E)) = N_Raise_Expression))
-       then
-          null;
- 
        --  The parent type may be a private view with unknown discriminants,
        --  and thus unconstrained. Regular components must be constrained.
  
!       elsif not Is_Definite_Subtype (T)
          and then Chars (Id) /= Name_uParent
        then
           if Is_Class_Wide_Type (T) then
--- 2094,2103 ----
           end if;
        end if;
  
        --  The parent type may be a private view with unknown discriminants,
        --  and thus unconstrained. Regular components must be constrained.
  
!       if not Is_Definite_Subtype (T)
          and then Chars (Id) /= Name_uParent
        then
           if Is_Class_Wide_Type (T) then
*************** package body Sem_Ch3 is
*** 2187,2203 ****
           end if;
        end if;
  
!       --  If the component is an unconstrained task or protected type with
!       --  discriminants, the component and the enclosing record are limited
!       --  and the component is constrained by its default values. Compute
!       --  its actual subtype, else it may be allocated the maximum size by
!       --  the backend, and possibly overflow.
  
!       if Is_Concurrent_Type (T)
!         and then not Is_Constrained (T)
!         and then Has_Discriminants (T)
!         and then not Has_Discriminants (Current_Scope)
!       then
           declare
              Act_T : constant Entity_Id := Build_Default_Subtype (T, N);
  
--- 2213,2221 ----
           end if;
        end if;
  
!       --  When possible, build the default subtype
  
!       if Should_Build_Subtype (T) then
           declare
              Act_T : constant Entity_Id := Build_Default_Subtype (T, N);
  
*************** package body Sem_Ch3 is
*** 2633,2638 ****
--- 2651,2698 ----
           E := First_Entity (Current_Scope);
           while Present (E) loop
              Resolve_Aspect_Expressions (E);
+ 
+             --  Now that the aspect expressions have been resolved, if this is
+             --  at the end of the visible declarations, we can set the flag
+             --  Known_To_Have_Preelab_Init properly on types declared in the
+             --  visible part, which is needed for checking whether full types
+             --  in the private part satisfy the Preelaborable_Initialization
+             --  aspect of the partial view. We can't wait for the creation of
+             --  the pragma by Analyze_Aspects_At_Freeze_Point, because the
+             --  freeze point may occur after the end of the package declaration
+             --  (in the case of nested packages).
+ 
+             if Is_Type (E)
+               and then L = Visible_Declarations (Parent (L))
+               and then Has_Aspect (E, Aspect_Preelaborable_Initialization)
+             then
+                declare
+                   ASN  : constant Node_Id :=
+                     Find_Aspect (E, Aspect_Preelaborable_Initialization);
+                   Expr : constant Node_Id := Expression (ASN);
+                begin
+                   --  Set Known_To_Have_Preelab_Init to True if aspect has no
+                   --  expression, or if the expression is True (or was folded
+                   --  to True), or if the expression is a conjunction of one or
+                   --  more Preelaborable_Initialization attributes applied to
+                   --  formal types and wasn't folded to False. (Note that
+                   --  Is_Conjunction_Of_Formal_Preelab_Init_Attributes goes to
+                   --  Original_Node if needed, hence test for Standard_False.)
+ 
+                   if not Present (Expr)
+                     or else (Is_Entity_Name (Expr)
+                               and then Entity (Expr) = Standard_True)
+                     or else
+                       (Is_Conjunction_Of_Formal_Preelab_Init_Attributes (Expr)
+                         and then
+                           not (Is_Entity_Name (Expr)
+                                 and then Entity (Expr) = Standard_False))
+                   then
+                      Set_Known_To_Have_Preelab_Init (E);
+                   end if;
+                end;
+             end if;
+ 
              Next_Entity (E);
           end loop;
        end Resolve_Aspects;
*************** package body Sem_Ch3 is
*** 2743,2749 ****
                 Resolve_Aspects;
  
              elsif L /= Visible_Declarations (Parent (L))
-               or else No (Private_Declarations (Parent (L)))
                or else Is_Empty_List (Private_Declarations (Parent (L)))
              then
                 Adjust_Decl;
--- 2803,2808 ----
*************** package body Sem_Ch3 is
*** 2812,2818 ****
              --  to the first encountered body.
  
              --  ??? A cleaner approach may be possible and/or this solution
!             --  could be extended to general-purpose late primitives, TBD.
  
              if Present (Ctrl_Typ) then
  
--- 2871,2877 ----
              --  to the first encountered body.
  
              --  ??? A cleaner approach may be possible and/or this solution
!             --  could be extended to general-purpose late primitives.
  
              if Present (Ctrl_Typ) then
  
*************** package body Sem_Ch3 is
*** 3040,3046 ****
              end if;
           end if;
  
!          --  TBD : other nonoverridable aspects.
        end Check_Nonoverridable_Aspects;
  
        ------------------------------------
--- 3099,3105 ----
              end if;
           end if;
  
!          --  What about other nonoverridable aspects???
        end Check_Nonoverridable_Aspects;
  
        ------------------------------------
*************** package body Sem_Ch3 is
*** 3057,3062 ****
--- 3116,3122 ----
             and then Ekind (Prev) = E_Incomplete_Type
             and then Is_Tagged_Type (Prev)
             and then Is_Tagged_Type (T)
+            and then Present (Primitive_Operations (Prev))
           then
              Elmt := First_Elmt (Primitive_Operations (Prev));
              while Present (Elmt) loop
*************** package body Sem_Ch3 is
*** 3169,3175 ****
                 --  so that pre/postconditions can be handled directly on the
                 --  generated wrapper.
  
!                if Ada_Version >= Ada_2020
                   and then Present (Aspect_Specifications (N))
                 then
                    Build_Access_Subprogram_Wrapper (N);
--- 3229,3235 ----
                 --  so that pre/postconditions can be handled directly on the
                 --  generated wrapper.
  
!                if Ada_Version >= Ada_2022
                   and then Present (Aspect_Specifications (N))
                 then
                    Build_Access_Subprogram_Wrapper (N);
*************** package body Sem_Ch3 is
*** 3246,3251 ****
--- 3306,3353 ----
           return;
        end if;
  
+       --  Set the primitives list of the full type and its base type when
+       --  needed. T may be E_Void in cases of earlier errors, and in that
+       --  case we bypass this.
+ 
+       if Ekind (T) /= E_Void then
+          if not Present (Direct_Primitive_Operations (T)) then
+             if Etype (T) = T then
+                Set_Direct_Primitive_Operations (T, New_Elmt_List);
+ 
+             --  If Etype of T is the base type (as opposed to a parent type)
+             --  and already has an associated list of primitive operations,
+             --  then set T's primitive list to the base type's list. Otherwise,
+             --  create a new empty primitives list and share the list between
+             --  T and its base type. The lists need to be shared in common.
+ 
+             elsif Etype (T) = Base_Type (T) then
+ 
+                if not Present (Direct_Primitive_Operations (Base_Type (T)))
+                then
+                   Set_Direct_Primitive_Operations
+                     (Base_Type (T), New_Elmt_List);
+                end if;
+ 
+                Set_Direct_Primitive_Operations
+                  (T, Direct_Primitive_Operations (Base_Type (T)));
+ 
+             --  Case where the Etype is a parent type, so we need a new
+             --  primitives list for T.
+ 
+             else
+                Set_Direct_Primitive_Operations (T, New_Elmt_List);
+             end if;
+ 
+          --  If T already has a Direct_Primitive_Operations list but its
+          --  base type doesn't then set the base type's list to T's list.
+ 
+          elsif not Present (Direct_Primitive_Operations (Base_Type (T))) then
+             Set_Direct_Primitive_Operations
+               (Base_Type (T), Direct_Primitive_Operations (T));
+          end if;
+       end if;
+ 
        --  Some common processing for all types
  
        Set_Depends_On_Private (T, Has_Private_Component (T));
*************** package body Sem_Ch3 is
*** 3398,3407 ****
  
        T := Find_Type_Name (N);
  
!       Set_Ekind            (T, E_Incomplete_Type);
        Set_Etype            (T, T);
        Set_Is_First_Subtype (T);
!       Init_Size_Align      (T);
  
        --  Set the SPARK mode from the current context
  
--- 3500,3509 ----
  
        T := Find_Type_Name (N);
  
!       Mutate_Ekind         (T, E_Incomplete_Type);
        Set_Etype            (T, T);
        Set_Is_First_Subtype (T);
!       Reinit_Size_Align    (T);
  
        --  Set the SPARK mode from the current context
  
*************** package body Sem_Ch3 is
*** 3415,3423 ****
           Set_Is_Tagged_Type (T, True);
           Set_No_Tagged_Streams_Pragma (T, No_Tagged_Streams);
           Make_Class_Wide_Type (T);
-          Set_Direct_Primitive_Operations (T, New_Elmt_List);
        end if;
  
        Set_Stored_Constraint (T, No_Elist);
  
        if Present (Discriminant_Specifications (N)) then
--- 3517,3532 ----
           Set_Is_Tagged_Type (T, True);
           Set_No_Tagged_Streams_Pragma (T, No_Tagged_Streams);
           Make_Class_Wide_Type (T);
        end if;
  
+       --  Initialize the list of primitive operations to an empty list,
+       --  to cover tagged types as well as untagged types. For untagged
+       --  types this is used either to analyze the call as legal when
+       --  Extensions_Allowed is True, or to issue a better error message
+       --  otherwise.
+ 
+       Set_Direct_Primitive_Operations (T, New_Elmt_List);
+ 
        Set_Stored_Constraint (T, No_Elist);
  
        if Present (Discriminant_Specifications (N)) then
*************** package body Sem_Ch3 is
*** 3478,3486 ****
  
        --  Check runtime support for synchronized interfaces
  
!       if (Is_Task_Interface (T)
!            or else Is_Protected_Interface (T)
!            or else Is_Synchronized_Interface (T))
          and then not RTE_Available (RE_Select_Specific_Data)
        then
           Error_Msg_CRT ("synchronized interfaces", T);
--- 3587,3593 ----
  
        --  Check runtime support for synchronized interfaces
  
!       if Is_Concurrent_Interface (T)
          and then not RTE_Available (RE_Select_Specific_Data)
        then
           Error_Msg_CRT ("synchronized interfaces", T);
*************** package body Sem_Ch3 is
*** 3522,3528 ****
           Set_Etype                (E, Universal_Integer);
  
           Set_Etype     (Id, Universal_Integer);
!          Set_Ekind     (Id, E_Named_Integer);
           Set_Is_Frozen (Id, True);
  
           Set_Debug_Info_Needed (Id);
--- 3629,3635 ----
           Set_Etype                (E, Universal_Integer);
  
           Set_Etype     (Id, Universal_Integer);
!          Mutate_Ekind  (Id, E_Named_Integer);
           Set_Is_Frozen (Id, True);
  
           Set_Debug_Info_Needed (Id);
*************** package body Sem_Ch3 is
*** 3567,3576 ****
                 if T = Any_Type then
                    T := It.Typ;
  
!                elsif It.Typ = Universal_Real
!                        or else
!                      It.Typ = Universal_Integer
!                then
                    --  Choose universal interpretation over any other
  
                    T := It.Typ;
--- 3674,3680 ----
                 if T = Any_Type then
                    T := It.Typ;
  
!                elsif Is_Universal_Numeric_Type (It.Typ) then
                    --  Choose universal interpretation over any other
  
                    T := It.Typ;
*************** package body Sem_Ch3 is
*** 3585,3591 ****
        if Is_Integer_Type (T) then
           Resolve (E, T);
           Set_Etype (Id, Universal_Integer);
!          Set_Ekind (Id, E_Named_Integer);
  
        elsif Is_Real_Type (T) then
  
--- 3689,3695 ----
        if Is_Integer_Type (T) then
           Resolve (E, T);
           Set_Etype (Id, Universal_Integer);
!          Mutate_Ekind (Id, E_Named_Integer);
  
        elsif Is_Real_Type (T) then
  
*************** package body Sem_Ch3 is
*** 3617,3630 ****
  
           Resolve (E, T);
           Set_Etype (Id, Universal_Real);
!          Set_Ekind (Id, E_Named_Real);
  
        else
           Wrong_Type (E, Any_Numeric);
           Resolve (E, T);
  
           Set_Etype               (Id, T);
!          Set_Ekind               (Id, E_Constant);
           Set_Never_Set_In_Source (Id, True);
           Set_Is_True_Constant    (Id, True);
           return;
--- 3721,3734 ----
  
           Resolve (E, T);
           Set_Etype (Id, Universal_Real);
!          Mutate_Ekind (Id, E_Named_Real);
  
        else
           Wrong_Type (E, Any_Numeric);
           Resolve (E, T);
  
           Set_Etype               (Id, T);
!          Mutate_Ekind            (Id, E_Constant);
           Set_Never_Set_In_Source (Id, True);
           Set_Is_True_Constant    (Id, True);
           return;
*************** package body Sem_Ch3 is
*** 3727,3732 ****
--- 3831,3839 ----
                 then
                    null;
  
+                elsif Is_Record_Type (Etype (Comp)) then
+                   Check_Dynamic_Object (Etype (Comp));
+ 
                 elsif not Discriminated_Size (Comp)
                   and then Comes_From_Source (Comp)
                 then
*************** package body Sem_Ch3 is
*** 3734,3741 ****
                      ("component& of non-static size will violate restriction "
                       & "No_Implicit_Heap_Allocation?", N, Comp);
  
-                elsif Is_Record_Type (Etype (Comp)) then
-                   Check_Dynamic_Object (Etype (Comp));
                 end if;
  
                 Next_Component (Comp);
--- 3841,3846 ----
*************** package body Sem_Ch3 is
*** 4025,4031 ****
  
              T := Find_Type_Of_Object (Object_Definition (N), N);
              Set_Etype (Id, T);
!             Set_Ekind (Id, E_Variable);
              goto Leave;
           end if;
  
--- 4130,4136 ----
  
              T := Find_Type_Of_Object (Object_Definition (N), N);
              Set_Etype (Id, T);
!             Mutate_Ekind (Id, E_Variable);
              goto Leave;
           end if;
  
*************** package body Sem_Ch3 is
*** 4051,4057 ****
  
           if Error_Posted (Id) then
              Set_Etype (Id, T);
!             Set_Ekind (Id, E_Variable);
              goto Leave;
           end if;
        end if;
--- 4156,4162 ----
  
           if Error_Posted (Id) then
              Set_Etype (Id, T);
!             Mutate_Ekind (Id, E_Variable);
              goto Leave;
           end if;
        end if;
*************** package body Sem_Ch3 is
*** 4164,4190 ****
           Set_Related_Array_Object (Base_Type (T), Id);
        end if;
  
!       --  Special checks for protected objects not at library level
  
        if Has_Protected (T) and then not Is_Library_Level_Entity (Id) then
           Check_Restriction (No_Local_Protected_Objects, Id);
- 
-          --  Protected objects with interrupt handlers must be at library level
- 
-          --  Ada 2005: This test is not needed (and the corresponding clause
-          --  in the RM is removed) because accessibility checks are sufficient
-          --  to make handlers not at the library level illegal.
- 
-          --  AI05-0303: The AI is in fact a binding interpretation, and thus
-          --  applies to the '95 version of the language as well.
- 
-          if Is_Protected_Type (T)
-            and then Has_Interrupt_Handler (T)
-            and then Ada_Version < Ada_95
-          then
-             Error_Msg_N
-               ("interrupt object can only be declared at library level", Id);
-          end if;
        end if;
  
        --  Check for violation of No_Local_Timing_Events
--- 4269,4278 ----
           Set_Related_Array_Object (Base_Type (T), Id);
        end if;
  
!       --  Check for protected objects not at library level
  
        if Has_Protected (T) and then not Is_Library_Level_Entity (Id) then
           Check_Restriction (No_Local_Protected_Objects, Id);
        end if;
  
        --  Check for violation of No_Local_Timing_Events
*************** package body Sem_Ch3 is
*** 4322,4330 ****
  
           --  If E is null and has been replaced by an N_Raise_Constraint_Error
           --  node (which was marked already-analyzed), we need to set the type
!          --  to something other than Any_Access in order to keep gigi happy.
  
!          if Etype (E) = Any_Access then
              Set_Etype (E, T);
           end if;
  
--- 4410,4418 ----
  
           --  If E is null and has been replaced by an N_Raise_Constraint_Error
           --  node (which was marked already-analyzed), we need to set the type
!          --  to something else than Universal_Access to keep gigi happy.
  
!          if Etype (E) = Universal_Access then
              Set_Etype (E, T);
           end if;
  
*************** package body Sem_Ch3 is
*** 4370,4376 ****
             and then In_Subrange_Of (Etype (Entity (E)), T)
           then
              Set_Is_Known_Valid (Id);
!             Set_Ekind (Id, E_Constant);
              Set_Actual_Subtype (Id, Etype (Entity (E)));
           end if;
  
--- 4458,4464 ----
             and then In_Subrange_Of (Etype (Entity (E)), T)
           then
              Set_Is_Known_Valid (Id);
!             Mutate_Ekind (Id, E_Constant);
              Set_Actual_Subtype (Id, Etype (Entity (E)));
           end if;
  
*************** package body Sem_Ch3 is
*** 4436,4442 ****
        --  default initial value (including via a Default_Value or
        --  Default_Component_Value aspect, see AI12-0301) and then this is not
        --  an internal declaration whose initialization comes later (as for an
!       --  aggregate expansion).
        --  If expression is an aggregate it may be expanded into assignments
        --  and the declaration itself is marked with No_Initialization, but
        --  the predicate still applies.
--- 4524,4530 ----
        --  default initial value (including via a Default_Value or
        --  Default_Component_Value aspect, see AI12-0301) and then this is not
        --  an internal declaration whose initialization comes later (as for an
!       --  aggregate expansion) or a deferred constant.
        --  If expression is an aggregate it may be expanded into assignments
        --  and the declaration itself is marked with No_Initialization, but
        --  the predicate still applies.
*************** package body Sem_Ch3 is
*** 4450,4455 ****
--- 4538,4544 ----
            (Present (E)
              or else
                Is_Partially_Initialized_Type (T, Include_Implicit => False))
+         and then not (Constant_Present (N) and then No (E))
        then
           --  If the type has a static predicate and the expression is known at
           --  compile time, see if the expression satisfies the predicate.
*************** package body Sem_Ch3 is
*** 4515,4521 ****
  
              elsif Is_Class_Wide_Type (T) then
                 Error_Msg_N
!                  ("initialization required in class-wide declaration ", N);
  
              else
                 Error_Msg_N
--- 4604,4610 ----
  
              elsif Is_Class_Wide_Type (T) then
                 Error_Msg_N
!                  ("initialization required in class-wide declaration", N);
  
              else
                 Error_Msg_N
*************** package body Sem_Ch3 is
*** 4586,4594 ****
  
              elsif Is_Unchecked_Union (T) then
                 if Constant_Present (N) or else Nkind (E) = N_Function_Call then
!                   Set_Ekind (Id, E_Constant);
                 else
!                   Set_Ekind (Id, E_Variable);
                 end if;
  
                 --  If the expression is an aggregate it contains the required
--- 4675,4683 ----
  
              elsif Is_Unchecked_Union (T) then
                 if Constant_Present (N) or else Nkind (E) = N_Function_Call then
!                   Mutate_Ekind (Id, E_Constant);
                 else
!                   Mutate_Ekind (Id, E_Variable);
                 end if;
  
                 --  If the expression is an aggregate it contains the required
*************** package body Sem_Ch3 is
*** 4625,4630 ****
--- 4714,4726 ----
                    Related_Id := Empty;
                 end if;
  
+                --  If the object has an unconstrained array subtype with fixed
+                --  lower bound, then sliding to that bound may be needed.
+ 
+                if Is_Fixed_Lower_Bound_Array_Subtype (T) then
+                   Expand_Sliding_Conversion (E, T);
+                end if;
+ 
                 Expand_Subtype_From_Expr
                   (N             => N,
                    Unc_Type      => T,
*************** package body Sem_Ch3 is
*** 4706,4719 ****
              Apply_Length_Check (E, T);
           end if;
  
!       --  If the type is limited unconstrained with defaulted discriminants and
!       --  there is no expression, then the object is constrained by the
!       --  defaults, so it is worthwhile building the corresponding subtype.
  
!       elsif (Is_Limited_Record (T) or else Is_Concurrent_Type (T))
!         and then not Is_Constrained (T)
!         and then Has_Discriminants (T)
!       then
           if No (E) then
              Act_T := Build_Default_Subtype (T, N);
           else
--- 4802,4810 ----
              Apply_Length_Check (E, T);
           end if;
  
!       --  When possible, build the default subtype
  
!       elsif Should_Build_Subtype (T) then
           if No (E) then
              Act_T := Build_Default_Subtype (T, N);
           else
*************** package body Sem_Ch3 is
*** 4764,4775 ****
  
        --  Now establish the proper kind and type of the object
  
        if Constant_Present (N) then
!          Set_Ekind            (Id, E_Constant);
           Set_Is_True_Constant (Id);
  
        else
!          Set_Ekind (Id, E_Variable);
  
           --  A variable is set as shared passive if it appears in a shared
           --  passive package, and is at the outer level. This is not done for
--- 4855,4870 ----
  
        --  Now establish the proper kind and type of the object
  
+       if Ekind (Id) = E_Void then
+          Reinit_Field_To_Zero (Id, F_Next_Inlined_Subprogram);
+       end if;
+ 
        if Constant_Present (N) then
!          Mutate_Ekind         (Id, E_Constant);
           Set_Is_True_Constant (Id);
  
        else
!          Mutate_Ekind (Id, E_Variable);
  
           --  A variable is set as shared passive if it appears in a shared
           --  passive package, and is at the outer level. This is not done for
*************** package body Sem_Ch3 is
*** 4811,4818 ****
  
        --  Initialize alignment and size and capture alignment setting
  
!       Init_Alignment               (Id);
!       Init_Esize                   (Id);
        Set_Optimize_Alignment_Flags (Id);
  
        --  Deal with aliased case
--- 4906,4913 ----
  
        --  Initialize alignment and size and capture alignment setting
  
!       Reinit_Alignment             (Id);
!       Reinit_Esize                 (Id);
        Set_Optimize_Alignment_Flags (Id);
  
        --  Deal with aliased case
*************** package body Sem_Ch3 is
*** 5097,5109 ****
        Parent_Base := Base_Type (Parent_Type);
  
        if Parent_Type = Any_Type or else Etype (Parent_Type) = Any_Type then
!          Set_Ekind (T, Ekind (Parent_Type));
           Set_Etype (T, Any_Type);
           goto Leave;
  
        elsif not Is_Tagged_Type (Parent_Type) then
           Error_Msg_N
!            ("parent of type extension must be a tagged type ", Indic);
           goto Leave;
  
        elsif Ekind (Parent_Type) in E_Void | E_Incomplete_Type then
--- 5192,5204 ----
        Parent_Base := Base_Type (Parent_Type);
  
        if Parent_Type = Any_Type or else Etype (Parent_Type) = Any_Type then
!          Mutate_Ekind (T, Ekind (Parent_Type));
           Set_Etype (T, Any_Type);
           goto Leave;
  
        elsif not Is_Tagged_Type (Parent_Type) then
           Error_Msg_N
!            ("parent of type extension must be a tagged type", Indic);
           goto Leave;
  
        elsif Ekind (Parent_Type) in E_Void | E_Incomplete_Type then
*************** package body Sem_Ch3 is
*** 5116,5127 ****
              & "tagged type (RM 3.9.1 (3/1))", N);
  
           Set_Etype              (T, Any_Type);
!          Set_Ekind              (T, E_Limited_Private_Type);
           Set_Private_Dependents (T, New_Elmt_List);
           Set_Error_Posted       (T);
           goto Leave;
        end if;
  
        --  Perhaps the parent type should be changed to the class-wide type's
        --  specific type in this case to prevent cascading errors ???
  
--- 5211,5224 ----
              & "tagged type (RM 3.9.1 (3/1))", N);
  
           Set_Etype              (T, Any_Type);
!          Mutate_Ekind           (T, E_Limited_Private_Type);
           Set_Private_Dependents (T, New_Elmt_List);
           Set_Error_Posted       (T);
           goto Leave;
        end if;
  
+       Check_Wide_Character_Restriction (Parent_Type, Indic);
+ 
        --  Perhaps the parent type should be changed to the class-wide type's
        --  specific type in this case to prevent cascading errors ???
  
*************** package body Sem_Ch3 is
*** 5142,5149 ****
  
        Set_Is_Pure          (T, Is_Pure (Current_Scope));
        Set_Scope            (T, Current_Scope);
!       Set_Ekind            (T, E_Record_Type_With_Private);
!       Init_Size_Align      (T);
        Set_Default_SSO      (T);
        Set_No_Reordering    (T, No_Component_Reordering);
  
--- 5239,5246 ----
  
        Set_Is_Pure          (T, Is_Pure (Current_Scope));
        Set_Scope            (T, Current_Scope);
!       Mutate_Ekind         (T, E_Record_Type_With_Private);
!       Reinit_Size_Align    (T);
        Set_Default_SSO      (T);
        Set_No_Reordering    (T, No_Component_Reordering);
  
*************** package body Sem_Ch3 is
*** 5308,5314 ****
     begin
        Generate_Definition (Id);
        Set_Is_Pure (Id, Is_Pure (Current_Scope));
!       Init_Size_Align (Id);
  
        --  The following guard condition on Enter_Name is to handle cases where
        --  the defining identifier has already been entered into the scope but
--- 5405,5411 ----
     begin
        Generate_Definition (Id);
        Set_Is_Pure (Id, Is_Pure (Current_Scope));
!       Reinit_Size_Align (Id);
  
        --  The following guard condition on Enter_Name is to handle cases where
        --  the defining identifier has already been entered into the scope but
*************** package body Sem_Ch3 is
*** 5387,5393 ****
           --  (no aspects to examine on the generated declaration).
  
           if not Comes_From_Source (N) then
!             Set_Ekind (Id, Ekind (T));
  
              if Present (Predicate_Function (Id)) then
                 null;
--- 5484,5490 ----
           --  (no aspects to examine on the generated declaration).
  
           if not Comes_From_Source (N) then
!             Mutate_Ekind (Id, Ekind (T));
  
              if Present (Predicate_Function (Id)) then
                 null;
*************** package body Sem_Ch3 is
*** 5413,5423 ****
  
           case Ekind (T) is
              when Array_Kind =>
!                Set_Ekind                     (Id, E_Array_Subtype);
                 Copy_Array_Subtype_Attributes (Id, T);
  
              when Decimal_Fixed_Point_Kind =>
!                Set_Ekind                (Id, E_Decimal_Fixed_Point_Subtype);
                 Set_Digits_Value         (Id, Digits_Value       (T));
                 Set_Delta_Value          (Id, Delta_Value        (T));
                 Set_Scale_Value          (Id, Scale_Value        (T));
--- 5510,5521 ----
  
           case Ekind (T) is
              when Array_Kind =>
!                Mutate_Ekind                  (Id, E_Array_Subtype);
                 Copy_Array_Subtype_Attributes (Id, T);
+                Set_Packed_Array_Impl_Type    (Id, Packed_Array_Impl_Type (T));
  
              when Decimal_Fixed_Point_Kind =>
!                Mutate_Ekind             (Id, E_Decimal_Fixed_Point_Subtype);
                 Set_Digits_Value         (Id, Digits_Value       (T));
                 Set_Delta_Value          (Id, Delta_Value        (T));
                 Set_Scale_Value          (Id, Scale_Value        (T));
*************** package body Sem_Ch3 is
*** 5426,5453 ****
                 Set_Machine_Radix_10     (Id, Machine_Radix_10   (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
!                Set_RM_Size              (Id, RM_Size            (T));
  
              when Enumeration_Kind =>
!                Set_Ekind                (Id, E_Enumeration_Subtype);
                 Set_First_Literal        (Id, First_Literal (Base_Type (T)));
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Is_Character_Type    (Id, Is_Character_Type  (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
!                Set_RM_Size              (Id, RM_Size            (T));
  
              when Ordinary_Fixed_Point_Kind =>
!                Set_Ekind                (Id, E_Ordinary_Fixed_Point_Subtype);
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Small_Value          (Id, Small_Value        (T));
                 Set_Delta_Value          (Id, Delta_Value        (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
!                Set_RM_Size              (Id, RM_Size            (T));
  
              when Float_Kind =>
!                Set_Ekind                (Id, E_Floating_Point_Subtype);
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Digits_Value         (Id, Digits_Value       (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
--- 5524,5551 ----
                 Set_Machine_Radix_10     (Id, Machine_Radix_10   (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
!                Copy_RM_Size             (To => Id, From => T);
  
              when Enumeration_Kind =>
!                Mutate_Ekind             (Id, E_Enumeration_Subtype);
                 Set_First_Literal        (Id, First_Literal (Base_Type (T)));
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Is_Character_Type    (Id, Is_Character_Type  (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
!                Copy_RM_Size             (To => Id, From => T);
  
              when Ordinary_Fixed_Point_Kind =>
!                Mutate_Ekind          (Id, E_Ordinary_Fixed_Point_Subtype);
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Small_Value          (Id, Small_Value        (T));
                 Set_Delta_Value          (Id, Delta_Value        (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
!                Copy_RM_Size             (To => Id, From => T);
  
              when Float_Kind =>
!                Mutate_Ekind             (Id, E_Floating_Point_Subtype);
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Digits_Value         (Id, Digits_Value       (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
*************** package body Sem_Ch3 is
*** 5456,5476 ****
                 --  inherited subsequently when Analyze_Dimensions is called.
  
              when Signed_Integer_Kind =>
!                Set_Ekind                (Id, E_Signed_Integer_Subtype);
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
!                Set_RM_Size              (Id, RM_Size            (T));
  
              when Modular_Integer_Kind =>
!                Set_Ekind                (Id, E_Modular_Integer_Subtype);
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
!                Set_RM_Size              (Id, RM_Size            (T));
  
              when Class_Wide_Kind =>
!                Set_Ekind                (Id, E_Class_Wide_Subtype);
                 Set_Class_Wide_Type      (Id, Class_Wide_Type    (T));
                 Set_Cloned_Subtype       (Id, T);
                 Set_Is_Tagged_Type       (Id, True);
--- 5554,5574 ----
                 --  inherited subsequently when Analyze_Dimensions is called.
  
              when Signed_Integer_Kind =>
!                Mutate_Ekind             (Id, E_Signed_Integer_Subtype);
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
!                Copy_RM_Size             (To => Id, From => T);
  
              when Modular_Integer_Kind =>
!                Mutate_Ekind             (Id, E_Modular_Integer_Subtype);
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
                 Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
!                Copy_RM_Size             (To => Id, From => T);
  
              when Class_Wide_Kind =>
!                Mutate_Ekind             (Id, E_Class_Wide_Subtype);
                 Set_Class_Wide_Type      (Id, Class_Wide_Type    (T));
                 Set_Cloned_Subtype       (Id, T);
                 Set_Is_Tagged_Type       (Id, True);
*************** package body Sem_Ch3 is
*** 5487,5500 ****
              when E_Record_Subtype
                 | E_Record_Type
              =>
!                Set_Ekind                (Id, E_Record_Subtype);
  
                 --  Subtype declarations introduced for formal type parameters
                 --  in generic instantiations should inherit the Size value of
                 --  the type they rename.
  
                 if Present (Generic_Parent_Type (N)) then
!                   Set_RM_Size           (Id, RM_Size (T));
                 end if;
  
                 if Ekind (T) = E_Record_Subtype
--- 5585,5598 ----
              when E_Record_Subtype
                 | E_Record_Type
              =>
!                Mutate_Ekind             (Id, E_Record_Subtype);
  
                 --  Subtype declarations introduced for formal type parameters
                 --  in generic instantiations should inherit the Size value of
                 --  the type they rename.
  
                 if Present (Generic_Parent_Type (N)) then
!                   Copy_RM_Size (To => Id, From => T);
                 end if;
  
                 if Ekind (T) = E_Record_Subtype
*************** package body Sem_Ch3 is
*** 5540,5546 ****
                 end if;
  
              when Private_Kind =>
!                Set_Ekind              (Id, Subtype_Kind (Ekind        (T)));
                 Set_Has_Discriminants  (Id, Has_Discriminants          (T));
                 Set_Is_Constrained     (Id, Is_Constrained             (T));
                 Set_First_Entity       (Id, First_Entity               (T));
--- 5638,5644 ----
                 end if;
  
              when Private_Kind =>
!                Mutate_Ekind           (Id, Subtype_Kind (Ekind        (T)));
                 Set_Has_Discriminants  (Id, Has_Discriminants          (T));
                 Set_Is_Constrained     (Id, Is_Constrained             (T));
                 Set_First_Entity       (Id, First_Entity               (T));
*************** package body Sem_Ch3 is
*** 5605,5611 ****
                 end if;
  
              when Access_Kind =>
!                Set_Ekind             (Id, E_Access_Subtype);
                 Set_Is_Constrained    (Id, Is_Constrained        (T));
                 Set_Is_Access_Constant
                                       (Id, Is_Access_Constant    (T));
--- 5703,5709 ----
                 end if;
  
              when Access_Kind =>
!                Mutate_Ekind          (Id, E_Access_Subtype);
                 Set_Is_Constrained    (Id, Is_Constrained        (T));
                 Set_Is_Access_Constant
                                       (Id, Is_Access_Constant    (T));
*************** package body Sem_Ch3 is
*** 5628,5634 ****
                 end if;
  
              when Concurrent_Kind =>
!                Set_Ekind                (Id, Subtype_Kind (Ekind   (T)));
                 Set_Corresponding_Record_Type (Id,
                                           Corresponding_Record_Type (T));
                 Set_First_Entity         (Id, First_Entity          (T));
--- 5726,5732 ----
                 end if;
  
              when Concurrent_Kind =>
!                Mutate_Ekind             (Id, Subtype_Kind (Ekind   (T)));
                 Set_Corresponding_Record_Type (Id,
                                           Corresponding_Record_Type (T));
                 Set_First_Entity         (Id, First_Entity          (T));
*************** package body Sem_Ch3 is
*** 5656,5668 ****
                    --  propagate indication. Note that we also have to include
                    --  subtypes for Ada 2012 extended use of incomplete types.
  
!                   Set_Ekind              (Id, E_Incomplete_Subtype);
                    Set_Is_Tagged_Type     (Id, Is_Tagged_Type (T));
                    Set_Private_Dependents (Id, New_Elmt_List);
  
                    if Is_Tagged_Type (Id) then
                       Set_No_Tagged_Streams_Pragma
                         (Id, No_Tagged_Streams_Pragma (T));
                       Set_Direct_Primitive_Operations (Id, New_Elmt_List);
                    end if;
  
--- 5754,5775 ----
                    --  propagate indication. Note that we also have to include
                    --  subtypes for Ada 2012 extended use of incomplete types.
  
!                   Mutate_Ekind           (Id, E_Incomplete_Subtype);
                    Set_Is_Tagged_Type     (Id, Is_Tagged_Type (T));
                    Set_Private_Dependents (Id, New_Elmt_List);
  
                    if Is_Tagged_Type (Id) then
                       Set_No_Tagged_Streams_Pragma
                         (Id, No_Tagged_Streams_Pragma (T));
+                   end if;
+ 
+                   --  For tagged types, or when prefixed-call syntax is allowed
+                   --  for untagged types, initialize the list of primitive
+                   --  operations to an empty list.
+ 
+                   if Is_Tagged_Type (Id)
+                     or else Extensions_Allowed
+                   then
                       Set_Direct_Primitive_Operations (Id, New_Elmt_List);
                    end if;
  
*************** package body Sem_Ch3 is
*** 5704,5709 ****
--- 5811,5823 ----
           goto Leave;
        end if;
  
+       --  When prefixed calls are enabled for untagged types, the subtype
+       --  shares the primitive operations of its base type. Do this even
+       --  when Extensions_Allowed is False to issue better error messages.
+ 
+       Set_Direct_Primitive_Operations
+         (Id, Direct_Primitive_Operations (Base_Type (T)));
+ 
        --  Some common processing on all types
  
        Set_Size_Info      (Id, T);
*************** package body Sem_Ch3 is
*** 5731,5737 ****
            ((In_Instance and then not Comes_From_Source (N))
               or else No (Aspect_Specifications (N)))
        then
!          Set_Subprograms_For_Type (Id, Subprograms_For_Type (T));
  
           --  If the current declaration created both a private and a full view,
           --  then propagate Predicate_Function to the latter as well.
--- 5845,5860 ----
            ((In_Instance and then not Comes_From_Source (N))
               or else No (Aspect_Specifications (N)))
        then
!          --  Inherit Subprograms_For_Type from the full view, if present
! 
!          if Present (Full_View (T))
!            and then Subprograms_For_Type (Full_View (T)) /= No_Elist
!          then
!             Set_Subprograms_For_Type
!               (Id, Subprograms_For_Type (Full_View (T)));
!          else
!             Set_Subprograms_For_Type (Id, Subprograms_For_Type (T));
!          end if;
  
           --  If the current declaration created both a private and a full view,
           --  then propagate Predicate_Function to the latter as well.
*************** package body Sem_Ch3 is
*** 5927,5939 ****
     begin
        Analyze (T);
  
!       if R /= Error then
           Analyze (R);
           Set_Etype (N, Etype (R));
           Resolve (R, Entity (T));
-       else
-          Set_Error_Posted (R);
-          Set_Error_Posted (T);
        end if;
     end Analyze_Subtype_Indication;
  
--- 6050,6062 ----
     begin
        Analyze (T);
  
!       if R = Error then
!          Set_Error_Posted (R);
!          Set_Error_Posted (T);
!       else
           Analyze (R);
           Set_Etype (N, Etype (R));
           Resolve (R, Entity (T));
        end if;
     end Analyze_Subtype_Indication;
  
*************** package body Sem_Ch3 is
*** 6023,6028 ****
--- 6146,6152 ----
        Nb_Index      : Pos;
        Priv          : Entity_Id;
        Related_Id    : Entity_Id;
+       Has_FLB_Index : Boolean := False;
  
     begin
        if Nkind (Def) = N_Constrained_Array_Definition then
*************** package body Sem_Ch3 is
*** 6112,6117 ****
--- 6236,6274 ----
  
           Make_Index (Index, P, Related_Id, Nb_Index);
  
+          --  In the case where we have an unconstrained array with an index
+          --  given by a subtype_indication, this is necessarily a "fixed lower
+          --  bound" index. We change the upper bound of that index to the upper
+          --  bound of the index's subtype (denoted by the subtype_mark), since
+          --  that upper bound was originally set by the parser to be the same
+          --  as the lower bound. In truth, that upper bound corresponds to
+          --  a box ("<>"), and could be set to Empty, but it's convenient to
+          --  set it to the upper bound to avoid needing to add special tests
+          --  in various places for an Empty upper bound, and in any case that
+          --  accurately characterizes the index's range of values.
+ 
+          if Nkind (Def) = N_Unconstrained_Array_Definition
+            and then Nkind (Index) = N_Subtype_Indication
+          then
+             declare
+                Index_Subtype_High_Bound : constant Entity_Id :=
+                  Type_High_Bound (Entity (Subtype_Mark (Index)));
+             begin
+                Set_High_Bound (Range_Expression (Constraint (Index)),
+                                Index_Subtype_High_Bound);
+ 
+                --  Record that the array type has one or more indexes with
+                --  a fixed lower bound.
+ 
+                Has_FLB_Index := True;
+ 
+                --  Mark the index as belonging to an array type with a fixed
+                --  lower bound.
+ 
+                Set_Is_Fixed_Lower_Bound_Index_Subtype (Etype (Index));
+             end;
+          end if;
+ 
           --  Check error of subtype with predicate for index type
  
           Bad_Predicated_Subtype_Use
*************** package body Sem_Ch3 is
*** 6120,6126 ****
  
           --  Move to next index
  
!          Next_Index (Index);
           Nb_Index := Nb_Index + 1;
        end loop;
  
--- 6277,6283 ----
  
           --  Move to next index
  
!          Next (Index);
           Nb_Index := Nb_Index + 1;
        end loop;
  
*************** package body Sem_Ch3 is
*** 6146,6152 ****
           --  the master_id associated with an anonymous access to task type
           --  component (see Expand_N_Full_Type_Declaration.Build_Master)
  
!          Set_Parent (Element_Type, Parent (T));
  
           --  Ada 2005 (AI-230): In case of components that are anonymous access
           --  types the level of accessibility depends on the enclosing type
--- 6303,6309 ----
           --  the master_id associated with an anonymous access to task type
           --  component (see Expand_N_Full_Type_Declaration.Build_Master)
  
!          Copy_Parent (To => Element_Type, From => T);
  
           --  Ada 2005 (AI-230): In case of components that are anonymous access
           --  types the level of accessibility depends on the enclosing type
*************** package body Sem_Ch3 is
*** 6181,6186 ****
--- 6338,6349 ----
  
        if Nkind (Def) = N_Constrained_Array_Definition then
  
+          if Ekind (T) in Incomplete_Or_Private_Kind then
+             Reinit_Field_To_Zero (T, F_Stored_Constraint);
+          else
+             pragma Assert (Ekind (T) = E_Void);
+          end if;
+ 
           --  Establish Implicit_Base as unconstrained base type
  
           Implicit_Base := Create_Itype (E_Array_Type, P, Related_Id, 'B');
*************** package body Sem_Ch3 is
*** 6192,6199 ****
  
           --  The constrained array type is a subtype of the unconstrained one
  
!          Set_Ekind              (T, E_Array_Subtype);
!          Init_Size_Align        (T);
           Set_Etype              (T, Implicit_Base);
           Set_Scope              (T, Current_Scope);
           Set_Is_Constrained     (T);
--- 6355,6362 ----
  
           --  The constrained array type is a subtype of the unconstrained one
  
!          Mutate_Ekind           (T, E_Array_Subtype);
!          Reinit_Size_Align      (T);
           Set_Etype              (T, Implicit_Base);
           Set_Scope              (T, Current_Scope);
           Set_Is_Constrained     (T);
*************** package body Sem_Ch3 is
*** 6203,6209 ****
  
           --  Complete setup of implicit base type
  
!          Set_Component_Size (Implicit_Base, Uint_0);
           Set_Component_Type (Implicit_Base, Element_Type);
           Set_Finalize_Storage_Only
                              (Implicit_Base,
--- 6366,6372 ----
  
           --  Complete setup of implicit base type
  
!          pragma Assert (not Known_Component_Size (Implicit_Base));
           Set_Component_Type (Implicit_Base, Element_Type);
           Set_Finalize_Storage_Only
                              (Implicit_Base,
*************** package body Sem_Ch3 is
*** 6222,6233 ****
  
        else pragma Assert (Nkind (Def) = N_Unconstrained_Array_Definition);
  
!          Set_Ekind                    (T, E_Array_Type);
!          Init_Size_Align              (T);
           Set_Etype                    (T, T);
           Set_Scope                    (T, Current_Scope);
!          Set_Component_Size           (T, Uint_0);
           Set_Is_Constrained           (T, False);
           Set_First_Index              (T, First (Subtype_Marks (Def)));
           Set_Has_Delayed_Freeze       (T, True);
           Propagate_Concurrent_Flags   (T, Element_Type);
--- 6385,6404 ----
  
        else pragma Assert (Nkind (Def) = N_Unconstrained_Array_Definition);
  
!          if Ekind (T) in Incomplete_Or_Private_Kind then
!             Reinit_Field_To_Zero (T, F_Stored_Constraint);
!          else
!             pragma Assert (Ekind (T) = E_Void);
!          end if;
! 
!          Mutate_Ekind                 (T, E_Array_Type);
!          Reinit_Size_Align            (T);
           Set_Etype                    (T, T);
           Set_Scope                    (T, Current_Scope);
!          pragma Assert (not Known_Component_Size (T));
           Set_Is_Constrained           (T, False);
+          Set_Is_Fixed_Lower_Bound_Array_Subtype
+                                       (T, Has_FLB_Index);
           Set_First_Index              (T, First (Subtype_Marks (Def)));
           Set_Has_Delayed_Freeze       (T, True);
           Propagate_Concurrent_Flags   (T, Element_Type);
*************** package body Sem_Ch3 is
*** 6495,6501 ****
           Scope_Stack.Append (Curr_Scope);
        end if;
  
!       Set_Ekind (Anon, E_Anonymous_Access_Protected_Subprogram_Type);
        Set_Can_Use_Internal_Rep (Anon, not Always_Compatible_Rep_On_Target);
        return Anon;
     end Replace_Anonymous_Access_To_Protected_Subprogram;
--- 6666,6672 ----
           Scope_Stack.Append (Curr_Scope);
        end if;
  
!       Mutate_Ekind (Anon, E_Anonymous_Access_Protected_Subprogram_Type);
        Set_Can_Use_Internal_Rep (Anon, not Always_Compatible_Rep_On_Target);
        return Anon;
     end Replace_Anonymous_Access_To_Protected_Subprogram;
*************** package body Sem_Ch3 is
*** 6611,6617 ****
        Append (
           Make_Parameter_Specification (Loc,
             Defining_Identifier => Make_Temporary (Loc, 'P'),
!            Parameter_Type  =>  New_Occurrence_Of (Id, Loc)),
           Profile);
  
        if Nkind (Type_Def) = N_Access_Procedure_Definition then
--- 6782,6788 ----
        Append (
           Make_Parameter_Specification (Loc,
             Defining_Identifier => Make_Temporary (Loc, 'P'),
!            Parameter_Type      => New_Occurrence_Of (Id, Loc)),
           Profile);
  
        if Nkind (Type_Def) = N_Access_Procedure_Definition then
*************** package body Sem_Ch3 is
*** 6619,6624 ****
--- 6790,6796 ----
             Make_Procedure_Specification (Loc,
               Defining_Unit_Name       => Subp,
               Parameter_Specifications => Profile);
+          Mutate_Ekind (Subp, E_Procedure);
        else
           Spec :=
             Make_Function_Specification (Loc,
*************** package body Sem_Ch3 is
*** 6627,6639 ****
               Result_Definition        =>
                 New_Copy_Tree
                   (Result_Definition (Type_Definition (Decl))));
        end if;
  
        New_Decl :=
          Make_Subprogram_Declaration (Loc, Specification => Spec);
        Set_Aspect_Specifications (New_Decl, Contracts);
  
-       Insert_After (Decl, New_Decl);
        Set_Access_Subprogram_Wrapper (Designated_Type (Id), Subp);
        Build_Access_Subprogram_Wrapper_Body (Decl, New_Decl);
     end Build_Access_Subprogram_Wrapper;
--- 6799,6829 ----
               Result_Definition        =>
                 New_Copy_Tree
                   (Result_Definition (Type_Definition (Decl))));
+          Mutate_Ekind (Subp, E_Function);
        end if;
  
        New_Decl :=
          Make_Subprogram_Declaration (Loc, Specification => Spec);
        Set_Aspect_Specifications (New_Decl, Contracts);
+       Set_Is_Wrapper (Subp);
+ 
+       --  The wrapper is declared in the freezing actions to facilitate its
+       --  identification and thus avoid handling it as a primitive operation
+       --  of a tagged type (see Is_Access_To_Subprogram_Wrapper); otherwise it
+       --  may be handled as a dispatching operation and erroneously registered
+       --  in a dispatch table.
+ 
+       if not GNATprove_Mode then
+          Append_Freeze_Action (Id, New_Decl);
+ 
+       --  Under GNATprove mode there is no such problem but we do not declare
+       --  it in the freezing actions since they are not analyzed under this
+       --  mode.
+ 
+       else
+          Insert_After (Decl, New_Decl);
+       end if;
  
        Set_Access_Subprogram_Wrapper (Designated_Type (Id), Subp);
        Build_Access_Subprogram_Wrapper_Body (Decl, New_Decl);
     end Build_Access_Subprogram_Wrapper;
*************** package body Sem_Ch3 is
*** 6668,6674 ****
        if Nkind (S) /= N_Subtype_Indication
          and then Subt /= Base_Type (Subt)
        then
!          Set_Ekind (Derived_Type, E_Access_Subtype);
        end if;
  
        if Ekind (Derived_Type) = E_Access_Subtype then
--- 6858,6864 ----
        if Nkind (S) /= N_Subtype_Indication
          and then Subt /= Base_Type (Subt)
        then
!          Mutate_Ekind (Derived_Type, E_Access_Subtype);
        end if;
  
        if Ekind (Derived_Type) = E_Access_Subtype then
*************** package body Sem_Ch3 is
*** 6708,6720 ****
  
        Set_Is_Constrained     (Derived_Type, Is_Constrained (Subt));
        Set_Is_Access_Constant (Derived_Type, Is_Access_Constant (Parent_Type));
!       Set_Size_Info          (Derived_Type,                     Parent_Type);
!       Set_RM_Size            (Derived_Type, RM_Size            (Parent_Type));
        Set_Depends_On_Private (Derived_Type,
                                Has_Private_Component (Derived_Type));
        Conditional_Delay      (Derived_Type, Subt);
  
!       if Is_Access_Subprogram_Type (Derived_Type) then
           Set_Can_Use_Internal_Rep
             (Derived_Type, Can_Use_Internal_Rep (Parent_Type));
        end if;
--- 6898,6912 ----
  
        Set_Is_Constrained     (Derived_Type, Is_Constrained (Subt));
        Set_Is_Access_Constant (Derived_Type, Is_Access_Constant (Parent_Type));
!       Set_Size_Info          (Derived_Type, Parent_Type);
!       Copy_RM_Size           (To => Derived_Type, From => Parent_Type);
        Set_Depends_On_Private (Derived_Type,
                                Has_Private_Component (Derived_Type));
        Conditional_Delay      (Derived_Type, Subt);
  
!       if Is_Access_Subprogram_Type (Derived_Type)
!         and then Is_Base_Type (Derived_Type)
!       then
           Set_Can_Use_Internal_Rep
             (Derived_Type, Can_Use_Internal_Rep (Parent_Type));
        end if;
*************** package body Sem_Ch3 is
*** 6783,6789 ****
           Implicit_Base :=
             Create_Itype (Ekind (Parent_Base), N, Derived_Type, 'B');
  
!          Set_Ekind (Implicit_Base, Ekind (Parent_Base));
           Set_Etype (Implicit_Base, Parent_Base);
  
           Copy_Array_Subtype_Attributes   (Implicit_Base, Parent_Base);
--- 6975,6981 ----
           Implicit_Base :=
             Create_Itype (Ekind (Parent_Base), N, Derived_Type, 'B');
  
!          Mutate_Ekind (Implicit_Base, Ekind (Parent_Base));
           Set_Etype (Implicit_Base, Parent_Base);
  
           Copy_Array_Subtype_Attributes   (Implicit_Base, Parent_Base);
*************** package body Sem_Ch3 is
*** 6797,6803 ****
     begin
        if not Is_Constrained (Parent_Type) then
           if Nkind (Indic) /= N_Subtype_Indication then
!             Set_Ekind (Derived_Type, E_Array_Type);
  
              Copy_Array_Subtype_Attributes   (Derived_Type, Parent_Type);
              Copy_Array_Base_Type_Attributes (Derived_Type, Parent_Type);
--- 6989,6995 ----
     begin
        if not Is_Constrained (Parent_Type) then
           if Nkind (Indic) /= N_Subtype_Indication then
!             Mutate_Ekind (Derived_Type, E_Array_Type);
  
              Copy_Array_Subtype_Attributes   (Derived_Type, Parent_Type);
              Copy_Array_Base_Type_Attributes (Derived_Type, Parent_Type);
*************** package body Sem_Ch3 is
*** 6824,6830 ****
           if Nkind (Indic) /= N_Subtype_Indication then
              Make_Implicit_Base;
  
!             Set_Ekind                     (Derived_Type, Ekind (Parent_Type));
              Set_Etype                     (Derived_Type, Implicit_Base);
              Copy_Array_Subtype_Attributes (Derived_Type, Parent_Type);
  
--- 7016,7022 ----
           if Nkind (Indic) /= N_Subtype_Indication then
              Make_Implicit_Base;
  
!             Mutate_Ekind               (Derived_Type, Ekind (Parent_Type));
              Set_Etype                     (Derived_Type, Implicit_Base);
              Copy_Array_Subtype_Attributes (Derived_Type, Parent_Type);
  
*************** package body Sem_Ch3 is
*** 6869,6875 ****
        Indic : constant Node_Id    := Subtype_Indication (Def);
  
        Corr_Record      : constant Entity_Id := Make_Temporary (Loc, 'C');
!       Corr_Decl        : Node_Id;
        Corr_Decl_Needed : Boolean;
        --  If the derived type has fewer discriminants than its parent, the
        --  corresponding record is also a derived type, in order to account for
--- 7061,7067 ----
        Indic : constant Node_Id    := Subtype_Indication (Def);
  
        Corr_Record      : constant Entity_Id := Make_Temporary (Loc, 'C');
!       Corr_Decl        : Node_Id := Empty;
        Corr_Decl_Needed : Boolean;
        --  If the derived type has fewer discriminants than its parent, the
        --  corresponding record is also a derived type, in order to account for
*************** package body Sem_Ch3 is
*** 7284,7290 ****
                 New_Lit := Make_Defining_Identifier (Loc, Chars (Literal));
              end if;
  
!             Set_Ekind                (New_Lit, E_Enumeration_Literal);
              Set_Enumeration_Pos      (New_Lit, Enumeration_Pos (Literal));
              Set_Enumeration_Rep      (New_Lit, Enumeration_Rep (Literal));
              Set_Enumeration_Rep_Expr (New_Lit, Empty);
--- 7476,7482 ----
                 New_Lit := Make_Defining_Identifier (Loc, Chars (Literal));
              end if;
  
!             Mutate_Ekind             (New_Lit, E_Enumeration_Literal);
              Set_Enumeration_Pos      (New_Lit, Enumeration_Pos (Literal));
              Set_Enumeration_Rep      (New_Lit, Enumeration_Rep (Literal));
              Set_Enumeration_Rep_Expr (New_Lit, Empty);
*************** package body Sem_Ch3 is
*** 7304,7310 ****
           --  may be hidden by a previous explicit function definition (cf.
           --  c83031a).
  
!          Set_Ekind (Derived_Type, E_Enumeration_Subtype);
           Set_Etype (Derived_Type, Implicit_Base);
  
           Type_Decl :=
--- 7496,7502 ----
           --  may be hidden by a previous explicit function definition (cf.
           --  c83031a).
  
!          Mutate_Ekind (Derived_Type, E_Enumeration_Subtype);
           Set_Etype (Derived_Type, Implicit_Base);
  
           Type_Decl :=
*************** package body Sem_Ch3 is
*** 7476,7482 ****
          Create_Itype (Ekind (Parent_Base), N, Derived_Type, 'B');
  
        Set_Etype          (Implicit_Base, Parent_Base);
!       Set_Ekind          (Implicit_Base, Ekind          (Parent_Base));
        Set_Size_Info      (Implicit_Base,                 Parent_Base);
        Set_First_Rep_Item (Implicit_Base, First_Rep_Item (Parent_Base));
        Set_Parent         (Implicit_Base, Parent (Derived_Type));
--- 7668,7674 ----
          Create_Itype (Ekind (Parent_Base), N, Derived_Type, 'B');
  
        Set_Etype          (Implicit_Base, Parent_Base);
!       Mutate_Ekind       (Implicit_Base, Ekind          (Parent_Base));
        Set_Size_Info      (Implicit_Base,                 Parent_Base);
        Set_First_Rep_Item (Implicit_Base, First_Rep_Item (Parent_Base));
        Set_Parent         (Implicit_Base, Parent (Derived_Type));
*************** package body Sem_Ch3 is
*** 7516,7522 ****
        --  parent type (otherwise Process_Subtype has set the bounds)
  
        if No_Constraint then
!          Set_Ekind (Derived_Type, Subtype_Kind (Ekind (Parent_Type)));
        end if;
  
        --  If we did not have a range constraint, then set the range from the
--- 7708,7714 ----
        --  parent type (otherwise Process_Subtype has set the bounds)
  
        if No_Constraint then
!          Mutate_Ekind (Derived_Type, Subtype_Kind (Ekind (Parent_Type)));
        end if;
  
        --  If we did not have a range constraint, then set the range from the
*************** package body Sem_Ch3 is
*** 7945,7951 ****
                 --  prevent spurious errors associated with missing overriding
                 --  of abstract primitives (overridden only for Derived_Type).
  
!                Set_Ekind (Full_Der, E_Record_Type);
                 Set_Is_Underlying_Record_View (Full_Der);
                 Set_Default_SSO (Full_Der);
                 Set_No_Reordering (Full_Der, No_Component_Reordering);
--- 8137,8143 ----
                 --  prevent spurious errors associated with missing overriding
                 --  of abstract primitives (overridden only for Derived_Type).
  
!                Mutate_Ekind (Full_Der, E_Record_Type);
                 Set_Is_Underlying_Record_View (Full_Der);
                 Set_Default_SSO (Full_Der);
                 Set_No_Reordering (Full_Der, No_Component_Reordering);
*************** package body Sem_Ch3 is
*** 8101,8106 ****
--- 8293,8306 ----
           Set_Etype (Base_Type (Derived_Type), Base_Type (Parent_Type));
  
           if Derive_Subps then
+             --  Initialize the list of primitive operations to an empty list,
+             --  to cover tagged types as well as untagged types. For untagged
+             --  types this is used either to analyze the call as legal when
+             --  Extensions_Allowed is True, or to issue a better error message
+             --  otherwise.
+ 
+             Set_Direct_Primitive_Operations (Derived_Type, New_Elmt_List);
+ 
              Derive_Subprograms (Parent_Type, Derived_Type);
           end if;
  
*************** package body Sem_Ch3 is
*** 8326,8336 ****
     --  discriminants in R and T1 through T4:
  
     --   Type      Discrim     Stored Discrim  Comment
!    --    R      (D1, D2, D3)   (D1, D2, D3)   Girder discrims implicit in R
!    --    T1     (D1, D2, D3)   (D1, D2, D3)   Girder discrims implicit in T1
!    --    T2     (X1, X2)       (D1, D2, D3)   Girder discrims EXPLICIT in T2
!    --    T3     (X1, X2)       (D1, D2, D3)   Girder discrims EXPLICIT in T3
!    --    T4     (Y)            (D1, D2, D3)   Girder discrims EXPLICIT in T4
  
     --  Field Corresponding_Discriminant (abbreviated CD below) allows us to
     --  find the corresponding discriminant in the parent type, while
--- 8526,8536 ----
     --  discriminants in R and T1 through T4:
  
     --   Type      Discrim     Stored Discrim  Comment
!    --    R      (D1, D2, D3)   (D1, D2, D3)   Stored discrims implicit in R
!    --    T1     (D1, D2, D3)   (D1, D2, D3)   Stored discrims implicit in T1
!    --    T2     (X1, X2)       (D1, D2, D3)   Stored discrims EXPLICIT in T2
!    --    T3     (X1, X2)       (D1, D2, D3)   Stored discrims EXPLICIT in T3
!    --    T4     (Y)            (D1, D2, D3)   Stored discrims EXPLICIT in T4
  
     --  Field Corresponding_Discriminant (abbreviated CD below) allows us to
     --  find the corresponding discriminant in the parent type, while
*************** package body Sem_Ch3 is
*** 8838,8851 ****
  
        if Is_Tagged then
           Set_Is_Tagged_Type (Derived_Type);
!          Init_Size_Align    (Derived_Type);
        end if;
  
        --  STEP 0a: figure out what kind of derived type declaration we have
  
        if Private_Extension then
           Type_Def := N;
!          Set_Ekind (Derived_Type, E_Record_Type_With_Private);
           Set_Default_SSO (Derived_Type);
           Set_No_Reordering (Derived_Type, No_Component_Reordering);
  
--- 9038,9051 ----
  
        if Is_Tagged then
           Set_Is_Tagged_Type (Derived_Type);
!          Reinit_Size_Align  (Derived_Type);
        end if;
  
        --  STEP 0a: figure out what kind of derived type declaration we have
  
        if Private_Extension then
           Type_Def := N;
!          Mutate_Ekind (Derived_Type, E_Record_Type_With_Private);
           Set_Default_SSO (Derived_Type);
           Set_No_Reordering (Derived_Type, No_Component_Reordering);
  
*************** package body Sem_Ch3 is
*** 8860,8866 ****
           --  For untagged types we preserve the Ekind of the Parent_Base.
  
           if Present (Record_Extension_Part (Type_Def)) then
!             Set_Ekind (Derived_Type, E_Record_Type);
              Set_Default_SSO (Derived_Type);
              Set_No_Reordering (Derived_Type, No_Component_Reordering);
  
--- 9060,9066 ----
           --  For untagged types we preserve the Ekind of the Parent_Base.
  
           if Present (Record_Extension_Part (Type_Def)) then
!             Mutate_Ekind (Derived_Type, E_Record_Type);
              Set_Default_SSO (Derived_Type);
              Set_No_Reordering (Derived_Type, No_Component_Reordering);
  
*************** package body Sem_Ch3 is
*** 8874,8880 ****
              end if;
  
           else
!             Set_Ekind (Derived_Type, Ekind (Parent_Base));
           end if;
        end if;
  
--- 9074,9080 ----
              end if;
  
           else
!             Mutate_Ekind (Derived_Type, Ekind (Parent_Base));
           end if;
        end if;
  
*************** package body Sem_Ch3 is
*** 9153,9165 ****
           declare
              Iface : Node_Id;
           begin
!             if Is_Non_Empty_List (Interface_List (Type_Def)) then
!                Iface := First (Interface_List (Type_Def));
!                while Present (Iface) loop
!                   Freeze_Before (N, Etype (Iface));
!                   Next (Iface);
!                end loop;
!             end if;
           end;
        end if;
  
--- 9353,9363 ----
           declare
              Iface : Node_Id;
           begin
!             Iface := First (Interface_List (Type_Def));
!             while Present (Iface) loop
!                Freeze_Before (N, Etype (Iface));
!                Next (Iface);
!             end loop;
           end;
        end if;
  
*************** package body Sem_Ch3 is
*** 9212,9220 ****
                    and then Is_Limited_Record (Full_View (Parent_Type)))
        then
           if not Is_Interface (Parent_Type)
!            or else Is_Synchronized_Interface (Parent_Type)
!            or else Is_Protected_Interface (Parent_Type)
!            or else Is_Task_Interface (Parent_Type)
           then
              Set_Is_Limited_Record (Derived_Type);
           end if;
--- 9410,9416 ----
                    and then Is_Limited_Record (Full_View (Parent_Type)))
        then
           if not Is_Interface (Parent_Type)
!            or else Is_Concurrent_Interface (Parent_Type)
           then
              Set_Is_Limited_Record (Derived_Type);
           end if;
*************** package body Sem_Ch3 is
*** 9453,9463 ****
           end;
        end if;
  
        --  Set fields for tagged types
  
        if Is_Tagged then
-          Set_Direct_Primitive_Operations (Derived_Type, New_Elmt_List);
- 
           --  All tagged types defined in Ada.Finalization are controlled
  
           if Chars (Scope (Derived_Type)) = Name_Finalization
--- 9649,9665 ----
           end;
        end if;
  
+       --  Initialize the list of primitive operations to an empty list,
+       --  to cover tagged types as well as untagged types. For untagged
+       --  types this is used either to analyze the call as legal when
+       --  Extensions_Allowed is True, or to issue a better error message
+       --  otherwise.
+ 
+       Set_Direct_Primitive_Operations (Derived_Type, New_Elmt_List);
+ 
        --  Set fields for tagged types
  
        if Is_Tagged then
           --  All tagged types defined in Ada.Finalization are controlled
  
           if Chars (Scope (Derived_Type)) = Name_Finalization
*************** package body Sem_Ch3 is
*** 9731,9743 ****
     begin
        --  Set common attributes
  
        Set_Scope                  (Derived_Type, Current_Scope);
        Set_Etype                  (Derived_Type,        Parent_Base);
!       Set_Ekind                  (Derived_Type, Ekind (Parent_Base));
        Propagate_Concurrent_Flags (Derived_Type,        Parent_Base);
  
!       Set_Size_Info (Derived_Type,          Parent_Type);
!       Set_RM_Size   (Derived_Type, RM_Size (Parent_Type));
  
        Set_Is_Controlled_Active
          (Derived_Type, Is_Controlled_Active (Parent_Type));
--- 9933,9951 ----
     begin
        --  Set common attributes
  
+       if Ekind (Derived_Type) in Incomplete_Or_Private_Kind
+         and then Ekind (Parent_Base) in Modular_Integer_Kind | Array_Kind
+       then
+          Reinit_Field_To_Zero (Derived_Type, F_Stored_Constraint);
+       end if;
+ 
        Set_Scope                  (Derived_Type, Current_Scope);
        Set_Etype                  (Derived_Type,        Parent_Base);
!       Mutate_Ekind               (Derived_Type, Ekind (Parent_Base));
        Propagate_Concurrent_Flags (Derived_Type,        Parent_Base);
  
!       Set_Size_Info (Derived_Type, Parent_Type);
!       Copy_RM_Size (To => Derived_Type, From => Parent_Type);
  
        Set_Is_Controlled_Active
          (Derived_Type, Is_Controlled_Active (Parent_Type));
*************** package body Sem_Ch3 is
*** 9925,9930 ****
--- 10133,10160 ----
           return;
        end if;
  
+       --  If not already set, initialize the derived type's list of primitive
+       --  operations to an empty element list.
+ 
+       if not Present (Direct_Primitive_Operations (Derived_Type)) then
+          Set_Direct_Primitive_Operations (Derived_Type, New_Elmt_List);
+ 
+          --  If Etype of the derived type is the base type (as opposed to
+          --  a parent type) and doesn't have an associated list of primitive
+          --  operations, then set the base type's primitive list to the
+          --  derived type's list. The lists need to be shared in common
+          --  between the two.
+ 
+          if Etype (Derived_Type) = Base_Type (Derived_Type)
+            and then
+              not Present (Direct_Primitive_Operations (Etype (Derived_Type)))
+          then
+             Set_Direct_Primitive_Operations
+               (Etype (Derived_Type),
+                Direct_Primitive_Operations (Derived_Type));
+          end if;
+       end if;
+ 
        --  Set delayed freeze and then derive subprograms, we need to do this
        --  in this order so that derived subprograms inherit the derived freeze
        --  if necessary.
*************** package body Sem_Ch3 is
*** 9952,9958 ****
  
        D_Minal := Make_Defining_Identifier (Sloc (Discrim), Chars (Discrim));
  
!       Set_Ekind     (D_Minal, E_In_Parameter);
        Set_Mechanism (D_Minal, Default_Mechanism);
        Set_Etype     (D_Minal, Etype (Discrim));
        Set_Scope     (D_Minal, Current_Scope);
--- 10182,10188 ----
  
        D_Minal := Make_Defining_Identifier (Sloc (Discrim), Chars (Discrim));
  
!       Mutate_Ekind  (D_Minal, E_In_Parameter);
        Set_Mechanism (D_Minal, Default_Mechanism);
        Set_Etype     (D_Minal, Etype (Discrim));
        Set_Scope     (D_Minal, Current_Scope);
*************** package body Sem_Ch3 is
*** 9971,9977 ****
        then
           CR_Disc := Make_Defining_Identifier (Sloc (Discrim), Chars (Discrim));
  
!          Set_Ekind            (CR_Disc, E_In_Parameter);
           Set_Mechanism        (CR_Disc, Default_Mechanism);
           Set_Etype            (CR_Disc, Etype (Discrim));
           Set_Scope            (CR_Disc, Current_Scope);
--- 10201,10207 ----
        then
           CR_Disc := Make_Defining_Identifier (Sloc (Discrim), Chars (Discrim));
  
!          Mutate_Ekind         (CR_Disc, E_In_Parameter);
           Set_Mechanism        (CR_Disc, Default_Mechanism);
           Set_Etype            (CR_Disc, Etype (Discrim));
           Set_Scope            (CR_Disc, Current_Scope);
*************** package body Sem_Ch3 is
*** 10252,10257 ****
--- 10482,10488 ----
                (Discr_Expr (J), Check_Concurrent => True)
           then
              Discrim_Present := True;
+             exit;
           end if;
        end loop;
  
*************** package body Sem_Ch3 is
*** 10296,10302 ****
                 if Discrim_Present then
                    null;
  
!                elsif Nkind (Parent (Parent (Def))) = N_Component_Declaration
                   and then Has_Per_Object_Constraint
                              (Defining_Identifier (Parent (Parent (Def))))
                 then
--- 10527,10533 ----
                 if Discrim_Present then
                    null;
  
!                elsif Parent_Kind (Parent (Def)) = N_Component_Declaration
                   and then Has_Per_Object_Constraint
                              (Defining_Identifier (Parent (Parent (Def))))
                 then
*************** package body Sem_Ch3 is
*** 10309,10315 ****
                    Apply_Range_Check (Discr_Expr (J), Etype (Discr));
                 end if;
  
!                Force_Evaluation (Discr_Expr (J));
              end if;
  
              --  Check that the designated type of an access discriminant's
--- 10540,10582 ----
                    Apply_Range_Check (Discr_Expr (J), Etype (Discr));
                 end if;
  
!                --  If the value of the discriminant may be visible in
!                --  another unit or child unit, create an external name
!                --  for it. We use the name of the object or component
!                --  that carries the discriminated subtype. The code
!                --  below may generate external symbols for the discriminant
!                --  expression when not strictly needed, which is harmless.
! 
!                if Expander_Active
!                  and then Comes_From_Source (Def)
!                  and then not Is_Subprogram (Current_Scope)
!                then
!                   declare
!                      Id : Entity_Id := Empty;
!                   begin
!                      if Nkind (Parent (Def)) = N_Object_Declaration then
!                         Id := Defining_Identifier (Parent (Def));
! 
!                      elsif Nkind (Parent (Def)) = N_Component_Definition
!                        and then
!                          Nkind (Parent (Parent (Def)))
!                             = N_Component_Declaration
!                      then
!                         Id := Defining_Identifier (Parent (Parent (Def)));
!                      end if;
! 
!                      if Present (Id) then
!                         Force_Evaluation (
!                           Discr_Expr (J),
!                           Related_Id => Id,
!                           Discr_Number => J);
!                      else
!                         Force_Evaluation (Discr_Expr (J));
!                      end if;
!                   end;
!                else
!                   Force_Evaluation (Discr_Expr (J));
!                end if;
              end if;
  
              --  Check that the designated type of an access discriminant's
*************** package body Sem_Ch3 is
*** 10362,10368 ****
  
     begin
        if Ekind (T) = E_Record_Type then
!          Set_Ekind (Def_Id, E_Record_Subtype);
  
           --  Inherit preelaboration flag from base, for types for which it
           --  may have been set: records, private types, protected types.
--- 10629,10635 ----
  
     begin
        if Ekind (T) = E_Record_Type then
!          Mutate_Ekind (Def_Id, E_Record_Subtype);
  
           --  Inherit preelaboration flag from base, for types for which it
           --  may have been set: records, private types, protected types.
*************** package body Sem_Ch3 is
*** 10371,10385 ****
             (Def_Id, Known_To_Have_Preelab_Init (T));
  
        elsif Ekind (T) = E_Task_Type then
!          Set_Ekind (Def_Id, E_Task_Subtype);
  
        elsif Ekind (T) = E_Protected_Type then
!          Set_Ekind (Def_Id, E_Protected_Subtype);
           Set_Known_To_Have_Preelab_Init
             (Def_Id, Known_To_Have_Preelab_Init (T));
  
        elsif Is_Private_Type (T) then
!          Set_Ekind (Def_Id, Subtype_Kind (Ekind (T)));
           Set_Known_To_Have_Preelab_Init
             (Def_Id, Known_To_Have_Preelab_Init (T));
  
--- 10638,10652 ----
             (Def_Id, Known_To_Have_Preelab_Init (T));
  
        elsif Ekind (T) = E_Task_Type then
!          Mutate_Ekind (Def_Id, E_Task_Subtype);
  
        elsif Ekind (T) = E_Protected_Type then
!          Mutate_Ekind (Def_Id, E_Protected_Subtype);
           Set_Known_To_Have_Preelab_Init
             (Def_Id, Known_To_Have_Preelab_Init (T));
  
        elsif Is_Private_Type (T) then
!          Mutate_Ekind (Def_Id, Subtype_Kind (Ekind (T)));
           Set_Known_To_Have_Preelab_Init
             (Def_Id, Known_To_Have_Preelab_Init (T));
  
*************** package body Sem_Ch3 is
*** 10388,10394 ****
           Set_Private_Dependents (Def_Id, New_Elmt_List);
  
        elsif Is_Class_Wide_Type (T) then
!          Set_Ekind (Def_Id, E_Class_Wide_Subtype);
  
        else
           --  Incomplete type. Attach subtype to list of dependents, to be
--- 10655,10661 ----
           Set_Private_Dependents (Def_Id, New_Elmt_List);
  
        elsif Is_Class_Wide_Type (T) then
!          Mutate_Ekind (Def_Id, E_Class_Wide_Subtype);
  
        else
           --  Incomplete type. Attach subtype to list of dependents, to be
*************** package body Sem_Ch3 is
*** 10401,10409 ****
           --  initialization procedure.
  
           if Ekind (T) = E_Incomplete_Type then
!             Set_Ekind (Def_Id, E_Incomplete_Subtype);
           else
!             Set_Ekind (Def_Id, Ekind (T));
           end if;
  
           if For_Access and then Within_Init_Proc then
--- 10668,10676 ----
           --  initialization procedure.
  
           if Ekind (T) = E_Incomplete_Type then
!             Mutate_Ekind (Def_Id, E_Incomplete_Subtype);
           else
!             Mutate_Ekind (Def_Id, Ekind (T));
           end if;
  
           if For_Access and then Within_Init_Proc then
*************** package body Sem_Ch3 is
*** 10414,10420 ****
        end if;
  
        Set_Etype             (Def_Id, T);
!       Init_Size_Align       (Def_Id);
        Set_Has_Discriminants (Def_Id, Has_Discrs);
        Set_Is_Constrained    (Def_Id, Constrained);
  
--- 10681,10687 ----
        end if;
  
        Set_Etype             (Def_Id, T);
!       Reinit_Size_Align     (Def_Id);
        Set_Has_Discriminants (Def_Id, Has_Discrs);
        Set_Is_Constrained    (Def_Id, Constrained);
  
*************** package body Sem_Ch3 is
*** 10902,10907 ****
--- 11169,11183 ----
                    then
                       null;
  
+                   --  Skip reporting the error on Ada 2022 only subprograms
+                   --  that require overriding if we are not in Ada 2022 mode.
+ 
+                   elsif Ada_Version < Ada_2022
+                     and then Requires_Overriding (Subp)
+                     and then Is_Ada_2022_Only (Ultimate_Alias (Subp))
+                   then
+                      null;
+ 
                    else
                       Error_Msg_NE
                         ("type must be declared abstract or & overridden",
*************** package body Sem_Ch3 is
*** 11070,11087 ****
              end if;
           end if;
  
!          --  Ada 2005 (AI95-0414) and Ada 2020 (AI12-0269): Diagnose failure to
           --  match No_Return in parent, but do it unconditionally in Ada 95 too
           --  for procedures, since this is our pragma.
  
           if Present (Overridden_Operation (Subp))
             and then No_Return (Overridden_Operation (Subp))
-            and then not No_Return (Subp)
           then
!             Error_Msg_N ("overriding subprogram & must be No_Return", Subp);
!             Error_Msg_N
!               ("\since overridden subprogram is No_Return (RM 6.5.1(6/2))",
!                Subp);
           end if;
  
           --  If the operation is a wrapper for a synchronized primitive, it
--- 11346,11380 ----
              end if;
           end if;
  
!          --  Ada 2005 (AI95-0414) and Ada 2022 (AI12-0269): Diagnose failure to
           --  match No_Return in parent, but do it unconditionally in Ada 95 too
           --  for procedures, since this is our pragma.
  
           if Present (Overridden_Operation (Subp))
             and then No_Return (Overridden_Operation (Subp))
           then
! 
!             --  If the subprogram is a renaming, check that the renamed
!             --  subprogram is No_Return.
! 
!             if Present (Renamed_Or_Alias (Subp)) then
!                if not No_Return (Renamed_Or_Alias (Subp)) then
!                   Error_Msg_NE ("subprogram & must be No_Return",
!                     Subp,
!                     Renamed_Or_Alias (Subp));
!                   Error_Msg_N ("\since renaming & overrides No_Return "
!                     & "subprogram (RM 6.5.1(6/2))",
!                     Subp);
!                end if;
! 
!             --  Make sure that the subprogram itself is No_Return.
! 
!             elsif not No_Return (Subp) then
!                Error_Msg_N ("overriding subprogram & must be No_Return", Subp);
!                Error_Msg_N
!                  ("\since overridden subprogram is No_Return (RM 6.5.1(6/2))",
!                   Subp);
!             end if;
           end if;
  
           --  If the operation is a wrapper for a synchronized primitive, it
*************** package body Sem_Ch3 is
*** 11180,11200 ****
        end if;
     end Check_Aliased_Component_Types;
  
!    ---------------------------------------
!    -- Check_Anonymous_Access_Components --
!    ---------------------------------------
  
!    procedure Check_Anonymous_Access_Components
!       (Typ_Decl  : Node_Id;
!        Typ       : Entity_Id;
!        Prev      : Entity_Id;
!        Comp_List : Node_Id)
     is
!       Loc         : constant Source_Ptr := Sloc (Typ_Decl);
        Anon_Access : Entity_Id;
        Acc_Def     : Node_Id;
-       Comp        : Node_Id;
-       Comp_Def    : Node_Id;
        Decl        : Node_Id;
        Type_Def    : Node_Id;
  
--- 11473,11492 ----
        end if;
     end Check_Aliased_Component_Types;
  
!    --------------------------------------
!    -- Check_Anonymous_Access_Component --
!    --------------------------------------
  
!    procedure Check_Anonymous_Access_Component
!      (Typ_Decl   : Node_Id;
!       Typ        : Entity_Id;
!       Prev       : Entity_Id;
!       Comp_Def   : Node_Id;
!       Access_Def : Node_Id)
     is
!       Loc         : constant Source_Ptr := Sloc (Comp_Def);
        Anon_Access : Entity_Id;
        Acc_Def     : Node_Id;
        Decl        : Node_Id;
        Type_Def    : Node_Id;
  
*************** package body Sem_Ch3 is
*** 11228,11240 ****
           --  Is_Tagged indicates whether the type is tagged. It is tagged if
           --  it's "is new ... with record" or else "is tagged record ...".
  
           Is_Tagged : constant Boolean :=
!              (Nkind (Type_Definition (Typ_Decl)) = N_Derived_Type_Definition
!                and then
!                  Present (Record_Extension_Part (Type_Definition (Typ_Decl))))
!            or else
!              (Nkind (Type_Definition (Typ_Decl)) = N_Record_Definition
!                and then Tagged_Present (Type_Definition (Typ_Decl)));
  
        begin
           --  If there is a previous partial view, no need to create a new one
--- 11520,11537 ----
           --  Is_Tagged indicates whether the type is tagged. It is tagged if
           --  it's "is new ... with record" or else "is tagged record ...".
  
+          Typ_Def   : constant Node_Id :=
+            (if Nkind (Typ_Decl) = N_Full_Type_Declaration
+             then Type_Definition (Typ_Decl) else Empty);
           Is_Tagged : constant Boolean :=
!            Present (Typ_Def)
!              and then
!                ((Nkind (Typ_Def) = N_Derived_Type_Definition
!                   and then
!                     Present (Record_Extension_Part (Typ_Def)))
!                 or else
!                   (Nkind (Typ_Def) = N_Record_Definition
!                     and then Tagged_Present (Typ_Def)));
  
        begin
           --  If there is a previous partial view, no need to create a new one
*************** package body Sem_Ch3 is
*** 11452,11539 ****
           return False;
        end Mentions_T;
  
!    --  Start of processing for Check_Anonymous_Access_Components
  
     begin
!       if No (Comp_List) then
!          return;
!       end if;
! 
!       Comp := First (Component_Items (Comp_List));
!       while Present (Comp) loop
!          if Nkind (Comp) = N_Component_Declaration
!            and then Present
!              (Access_Definition (Component_Definition (Comp)))
!            and then
!              Mentions_T (Access_Definition (Component_Definition (Comp)))
!          then
!             Comp_Def := Component_Definition (Comp);
!             Acc_Def :=
!               Access_To_Subprogram_Definition (Access_Definition (Comp_Def));
! 
!             Build_Incomplete_Type_Declaration;
!             Anon_Access := Make_Temporary (Loc, 'S');
  
!             --  Create a declaration for the anonymous access type: either
!             --  an access_to_object or an access_to_subprogram.
  
!             if Present (Acc_Def) then
!                if Nkind (Acc_Def) = N_Access_Function_Definition then
!                   Type_Def :=
!                     Make_Access_Function_Definition (Loc,
!                       Parameter_Specifications =>
!                         Parameter_Specifications (Acc_Def),
!                       Result_Definition        => Result_Definition (Acc_Def));
!                else
!                   Type_Def :=
!                     Make_Access_Procedure_Definition (Loc,
!                       Parameter_Specifications =>
!                         Parameter_Specifications (Acc_Def));
!                end if;
  
              else
                 Type_Def :=
!                  Make_Access_To_Object_Definition (Loc,
!                    Subtype_Indication =>
!                       Relocate_Node
!                         (Subtype_Mark (Access_Definition (Comp_Def))));
! 
!                Set_Constant_Present
!                  (Type_Def, Constant_Present (Access_Definition (Comp_Def)));
!                Set_All_Present
!                  (Type_Def, All_Present (Access_Definition (Comp_Def)));
              end if;
  
!             Set_Null_Exclusion_Present
!               (Type_Def,
!                Null_Exclusion_Present (Access_Definition (Comp_Def)));
  
!             Decl :=
!               Make_Full_Type_Declaration (Loc,
!                 Defining_Identifier => Anon_Access,
!                 Type_Definition     => Type_Def);
  
!             Insert_Before (Typ_Decl, Decl);
!             Analyze (Decl);
  
!             --  If an access to subprogram, create the extra formals
  
!             if Present (Acc_Def) then
!                Create_Extra_Formals (Designated_Type (Anon_Access));
!             end if;
  
              Rewrite (Comp_Def,
                Make_Component_Definition (Loc,
!                 Subtype_Indication =>
!                New_Occurrence_Of (Anon_Access, Loc)));
  
!             if Ekind (Designated_Type (Anon_Access)) = E_Subprogram_Type then
!                Set_Ekind (Anon_Access, E_Anonymous_Access_Subprogram_Type);
!             else
!                Set_Ekind (Anon_Access, E_Anonymous_Access_Type);
!             end if;
  
!             Set_Is_Local_Anonymous_Access (Anon_Access);
           end if;
  
           Next (Comp);
--- 11749,11852 ----
           return False;
        end Mentions_T;
  
!    --  Start of processing for Check_Anonymous_Access_Component
  
     begin
!       if Present (Access_Def) and then Mentions_T (Access_Def) then
!          Acc_Def := Access_To_Subprogram_Definition (Access_Def);
  
!          Build_Incomplete_Type_Declaration;
!          Anon_Access := Make_Temporary (Loc, 'S');
  
!          --  Create a declaration for the anonymous access type: either
!          --  an access_to_object or an access_to_subprogram.
  
+          if Present (Acc_Def) then
+             if Nkind (Acc_Def) = N_Access_Function_Definition then
+                Type_Def :=
+                  Make_Access_Function_Definition (Loc,
+                    Parameter_Specifications =>
+                      Parameter_Specifications (Acc_Def),
+                    Result_Definition        => Result_Definition (Acc_Def));
              else
                 Type_Def :=
!                  Make_Access_Procedure_Definition (Loc,
!                    Parameter_Specifications =>
!                      Parameter_Specifications (Acc_Def));
              end if;
  
!          else
!             Type_Def :=
!               Make_Access_To_Object_Definition (Loc,
!                 Subtype_Indication =>
!                    Relocate_Node (Subtype_Mark (Access_Def)));
  
!             Set_Constant_Present (Type_Def, Constant_Present (Access_Def));
!             Set_All_Present (Type_Def, All_Present (Access_Def));
!          end if;
  
!          Set_Null_Exclusion_Present
!            (Type_Def, Null_Exclusion_Present (Access_Def));
  
!          Decl :=
!            Make_Full_Type_Declaration (Loc,
!              Defining_Identifier => Anon_Access,
!              Type_Definition     => Type_Def);
  
!          Insert_Before (Typ_Decl, Decl);
!          Analyze (Decl);
  
+          --  If an access to subprogram, create the extra formals
+ 
+          if Present (Acc_Def) then
+             Create_Extra_Formals (Designated_Type (Anon_Access));
+          end if;
+ 
+          if Nkind (Comp_Def) = N_Component_Definition then
              Rewrite (Comp_Def,
                Make_Component_Definition (Loc,
!                 Subtype_Indication => New_Occurrence_Of (Anon_Access, Loc)));
!          else
!             pragma Assert (Nkind (Comp_Def) = N_Discriminant_Specification);
!             Rewrite (Comp_Def,
!               Make_Discriminant_Specification (Loc,
!                 Defining_Identifier => Defining_Identifier (Comp_Def),
!                 Discriminant_Type   => New_Occurrence_Of (Anon_Access, Loc)));
!          end if;
  
!          if Ekind (Designated_Type (Anon_Access)) = E_Subprogram_Type then
!             Mutate_Ekind (Anon_Access, E_Anonymous_Access_Subprogram_Type);
!          else
!             Mutate_Ekind (Anon_Access, E_Anonymous_Access_Type);
!          end if;
  
!          Set_Is_Local_Anonymous_Access (Anon_Access);
!       end if;
!    end Check_Anonymous_Access_Component;
! 
!    ---------------------------------------
!    -- Check_Anonymous_Access_Components --
!    ---------------------------------------
! 
!    procedure Check_Anonymous_Access_Components
!      (Typ_Decl  : Node_Id;
!       Typ       : Entity_Id;
!       Prev      : Entity_Id;
!       Comp_List : Node_Id)
!    is
!       Comp : Node_Id;
!    begin
!       if No (Comp_List) then
!          return;
!       end if;
! 
!       Comp := First (Component_Items (Comp_List));
!       while Present (Comp) loop
!          if Nkind (Comp) = N_Component_Declaration then
!             Check_Anonymous_Access_Component
!               (Typ_Decl, Typ, Prev,
!                Component_Definition (Comp),
!                Access_Definition (Component_Definition (Comp)));
           end if;
  
           Next (Comp);
*************** package body Sem_Ch3 is
*** 12492,12505 ****
        Set_Homonym                   (Full, Save_Homonym);
        Set_Associated_Node_For_Itype (Full, Related_Nod);
  
        --  Set common attributes for all subtypes: kind, convention, etc.
  
!       Set_Ekind            (Full, Subtype_Kind (Ekind (Full_Base)));
        Set_Convention       (Full, Convention (Full_Base));
        Set_Is_First_Subtype (Full, False);
        Set_Scope            (Full, Scope (Priv));
        Set_Size_Info        (Full, Full_Base);
!       Set_RM_Size          (Full, RM_Size (Full_Base));
        Set_Is_Itype         (Full);
  
        --  A subtype of a private-type-without-discriminants, whose full-view
--- 12805,12822 ----
        Set_Homonym                   (Full, Save_Homonym);
        Set_Associated_Node_For_Itype (Full, Related_Nod);
  
+       if Ekind (Full) in Incomplete_Or_Private_Kind then
+          Reinit_Field_To_Zero (Full, F_Private_Dependents);
+       end if;
+ 
        --  Set common attributes for all subtypes: kind, convention, etc.
  
!       Mutate_Ekind         (Full, Subtype_Kind (Ekind (Full_Base)));
        Set_Convention       (Full, Convention (Full_Base));
        Set_Is_First_Subtype (Full, False);
        Set_Scope            (Full, Scope (Priv));
        Set_Size_Info        (Full, Full_Base);
!       Copy_RM_Size         (To => Full, From => Full_Base);
        Set_Is_Itype         (Full);
  
        --  A subtype of a private-type-without-discriminants, whose full-view
*************** package body Sem_Ch3 is
*** 13050,13056 ****
              Desig_Subtype :=
                Create_Itype
                  (E_Void, Related_Nod, Scope_Id => Scope (Desig_Type));
!             Set_Ekind (Desig_Subtype, E_Record_Subtype);
              Def_Id := Entity (Subtype_Mark (S));
  
              --  We indicate that the component has a per-object constraint
--- 13367,13373 ----
              Desig_Subtype :=
                Create_Itype
                  (E_Void, Related_Nod, Scope_Id => Scope (Desig_Type));
!             Mutate_Ekind (Desig_Subtype, E_Record_Subtype);
              Def_Id := Entity (Subtype_Mark (S));
  
              --  We indicate that the component has a per-object constraint
*************** package body Sem_Ch3 is
*** 13147,13153 ****
        if No (Def_Id) then
           Def_Id := Create_Itype (E_Access_Subtype, Related_Nod);
        else
!          Set_Ekind (Def_Id, E_Access_Subtype);
        end if;
  
        if Constraint_OK then
--- 13464,13470 ----
        if No (Def_Id) then
           Def_Id := Create_Itype (E_Access_Subtype, Related_Nod);
        else
!          Mutate_Ekind (Def_Id, E_Access_Subtype);
        end if;
  
        if Constraint_OK then
*************** package body Sem_Ch3 is
*** 13225,13230 ****
--- 13542,13548 ----
        Index                 : Node_Id;
        S, T                  : Entity_Id;
        Constraint_OK         : Boolean := True;
+       Is_FLB_Array_Subtype  : Boolean := False;
  
     begin
        T := Entity (Subtype_Mark (SI));
*************** package body Sem_Ch3 is
*** 13268,13273 ****
--- 13586,13633 ----
  
              for J in 1 .. Number_Of_Constraints loop
                 Constrain_Index (Index, S, Related_Nod, Related_Id, Suffix, J);
+ 
+                --  If the subtype of the index has been set to indicate that
+                --  it has a fixed lower bound, then record that the subtype's
+                --  entity will need to be marked as being a fixed-lower-bound
+                --  array subtype.
+ 
+                if S = First (Constraints (C)) then
+                   Is_FLB_Array_Subtype :=
+                     Is_Fixed_Lower_Bound_Index_Subtype (Etype (S));
+ 
+                   --  If the parent subtype (or should this be Etype of that?)
+                   --  is an FLB array subtype, we flag an error, because we
+                   --  don't currently allow subtypes of such subtypes to
+                   --  specify a fixed lower bound for any of their indexes,
+                   --  even if the index of the parent subtype is a "range <>"
+                   --  index.
+ 
+                   if Is_FLB_Array_Subtype
+                     and then Is_Fixed_Lower_Bound_Array_Subtype (T)
+                   then
+                      Error_Msg_NE
+                        ("index with fixed lower bound not allowed for subtype "
+                           & "of fixed-lower-bound }", S, T);
+ 
+                      Is_FLB_Array_Subtype := False;
+                   end if;
+ 
+                elsif Is_FLB_Array_Subtype
+                  and then not Is_Fixed_Lower_Bound_Index_Subtype (Etype (S))
+                then
+                   Error_Msg_NE
+                     ("constrained index not allowed for fixed-lower-bound "
+                        & "subtype of}", S, T);
+ 
+                elsif not Is_FLB_Array_Subtype
+                  and then Is_Fixed_Lower_Bound_Index_Subtype (Etype (S))
+                then
+                   Error_Msg_NE
+                     ("index with fixed lower bound not allowed for "
+                        & "constrained subtype of}", S, T);
+                end if;
+ 
                 Next (Index);
                 Next (S);
              end loop;
*************** package body Sem_Ch3 is
*** 13281,13287 ****
           Set_Parent (Def_Id, Related_Nod);
  
        else
!          Set_Ekind (Def_Id, E_Array_Subtype);
        end if;
  
        Set_Size_Info      (Def_Id,                (T));
--- 13641,13647 ----
           Set_Parent (Def_Id, Related_Nod);
  
        else
!          Mutate_Ekind (Def_Id, E_Array_Subtype);
        end if;
  
        Set_Size_Info      (Def_Id,                (T));
*************** package body Sem_Ch3 is
*** 13294,13300 ****
           Set_First_Index (Def_Id, First_Index (T));
        end if;
  
!       Set_Is_Constrained     (Def_Id, True);
        Set_Is_Aliased         (Def_Id, Is_Aliased (T));
        Set_Is_Independent     (Def_Id, Is_Independent (T));
        Set_Depends_On_Private (Def_Id, Has_Private_Component (Def_Id));
--- 13654,13662 ----
           Set_First_Index (Def_Id, First_Index (T));
        end if;
  
!       Set_Is_Constrained     (Def_Id, not Is_FLB_Array_Subtype);
!       Set_Is_Fixed_Lower_Bound_Array_Subtype
!                              (Def_Id, Is_FLB_Array_Subtype);
        Set_Is_Aliased         (Def_Id, Is_Aliased (T));
        Set_Is_Independent     (Def_Id, Is_Independent (T));
        Set_Depends_On_Private (Def_Id, Has_Private_Component (Def_Id));
*************** package body Sem_Ch3 is
*** 13844,13850 ****
        Bound_Val   : Ureal;
  
     begin
!       Set_Ekind (Def_Id, E_Decimal_Fixed_Point_Subtype);
  
        if Nkind (C) = N_Range_Constraint then
           Range_Expr := Range_Expression (C);
--- 14206,14212 ----
        Bound_Val   : Ureal;
  
     begin
!       Mutate_Ekind (Def_Id, E_Decimal_Fixed_Point_Subtype);
  
        if Nkind (C) = N_Range_Constraint then
           Range_Expr := Range_Expression (C);
*************** package body Sem_Ch3 is
*** 13928,13934 ****
        begin
           --  Set a reasonable Ekind for the entity, including incomplete types.
  
!          Set_Ekind (Def_Id, Subtype_Kind (Ekind (T)));
  
           --  Set Etype to the known type, to reduce chances of cascaded errors
  
--- 14290,14296 ----
        begin
           --  Set a reasonable Ekind for the entity, including incomplete types.
  
!          Mutate_Ekind (Def_Id, Subtype_Kind (Ekind (T)));
  
           --  Set Etype to the known type, to reduce chances of cascaded errors
  
*************** package body Sem_Ch3 is
*** 13969,13977 ****
            (Has_Unknown_Discriminants (T)
              or else
                (not Has_Discriminants (T)
!                 and then Has_Discriminants (Full_View (T))
!                 and then Present (Discriminant_Default_Value
!                            (First_Discriminant (Full_View (T))))))
        then
           T := Full_View (T);
           E := Full_View (E);
--- 14331,14337 ----
            (Has_Unknown_Discriminants (T)
              or else
                (not Has_Discriminants (T)
!                 and then Has_Defaulted_Discriminants (Full_View (T))))
        then
           T := Full_View (T);
           E := Full_View (E);
*************** package body Sem_Ch3 is
*** 14056,14062 ****
        C : constant Node_Id   := Constraint (S);
  
     begin
!       Set_Ekind (Def_Id, E_Enumeration_Subtype);
  
        Set_First_Literal     (Def_Id, First_Literal (Base_Type (T)));
  
--- 14416,14422 ----
        C : constant Node_Id   := Constraint (S);
  
     begin
!       Mutate_Ekind (Def_Id, E_Enumeration_Subtype);
  
        Set_First_Literal     (Def_Id, First_Literal (Base_Type (T)));
  
*************** package body Sem_Ch3 is
*** 14081,14087 ****
        Rais : Node_Id;
  
     begin
!       Set_Ekind (Def_Id, E_Floating_Point_Subtype);
  
        Set_Etype          (Def_Id, Base_Type      (T));
        Set_Size_Info      (Def_Id,                (T));
--- 14441,14447 ----
        Rais : Node_Id;
  
     begin
!       Mutate_Ekind (Def_Id, E_Floating_Point_Subtype);
  
        Set_Etype          (Def_Id, Base_Type      (T));
        Set_Size_Info      (Def_Id,                (T));
*************** package body Sem_Ch3 is
*** 14158,14163 ****
--- 14518,14524 ----
        Def_Id : Entity_Id;
        R      : Node_Id := Empty;
        T      : constant Entity_Id := Etype (Index);
+       Is_FLB_Index : Boolean := False;
  
     begin
        Def_Id :=
*************** package body Sem_Ch3 is
*** 14171,14178 ****
        then
           --  A Range attribute will be transformed into N_Range by Resolve
  
!          Analyze (S);
!          Set_Etype (S, T);
           R := S;
  
           Process_Range_Expr_In_Decl (R, T);
--- 14532,14551 ----
        then
           --  A Range attribute will be transformed into N_Range by Resolve
  
!          --  If a range has an Empty upper bound, then remember that for later
!          --  setting of the index subtype's Is_Fixed_Lower_Bound_Index_Subtype
!          --  flag, and also set the upper bound of the range to the index
!          --  subtype's upper bound rather than leaving it Empty. In truth,
!          --  that upper bound corresponds to a box ("<>"), but it's convenient
!          --  to set it to the upper bound to avoid needing to add special tests
!          --  in various places for an Empty upper bound, and in any case it
!          --  accurately characterizes the index's range of values.
! 
!          if Nkind (S) = N_Range and then not Present (High_Bound (S)) then
!             Is_FLB_Index := True;
!             Set_High_Bound (S, Type_High_Bound (T));
!          end if;
! 
           R := S;
  
           Process_Range_Expr_In_Decl (R, T);
*************** package body Sem_Ch3 is
*** 14258,14279 ****
        --  Complete construction of the Itype
  
        if Is_Modular_Integer_Type (T) then
!          Set_Ekind (Def_Id, E_Modular_Integer_Subtype);
  
        elsif Is_Integer_Type (T) then
!          Set_Ekind (Def_Id, E_Signed_Integer_Subtype);
  
        else
!          Set_Ekind (Def_Id, E_Enumeration_Subtype);
           Set_Is_Character_Type (Def_Id, Is_Character_Type (T));
           Set_First_Literal     (Def_Id, First_Literal (T));
        end if;
  
        Set_Size_Info      (Def_Id,                (T));
!       Set_RM_Size        (Def_Id, RM_Size        (T));
        Set_First_Rep_Item (Def_Id, First_Rep_Item (T));
  
!       Set_Scalar_Range   (Def_Id, R);
  
        Set_Etype (S, Def_Id);
        Set_Discrete_RM_Size (Def_Id);
--- 14631,14667 ----
        --  Complete construction of the Itype
  
        if Is_Modular_Integer_Type (T) then
!          Mutate_Ekind (Def_Id, E_Modular_Integer_Subtype);
  
        elsif Is_Integer_Type (T) then
!          Mutate_Ekind (Def_Id, E_Signed_Integer_Subtype);
  
        else
!          Mutate_Ekind (Def_Id, E_Enumeration_Subtype);
           Set_Is_Character_Type (Def_Id, Is_Character_Type (T));
           Set_First_Literal     (Def_Id, First_Literal (T));
        end if;
  
        Set_Size_Info      (Def_Id,                (T));
!       Copy_RM_Size       (To => Def_Id, From => T);
        Set_First_Rep_Item (Def_Id, First_Rep_Item (T));
  
!       --  If this is a range for a fixed-lower-bound subtype, then set the
!       --  index itype's low bound to the FLB and the index itype's upper bound
!       --  to the high bound of the parent array type's index subtype. Also,
!       --  mark the itype as an FLB index subtype.
! 
!       if Nkind (S) = N_Range and then Is_FLB_Index then
!          Set_Scalar_Range
!            (Def_Id,
!             Make_Range (Sloc (S),
!               Low_Bound  => Low_Bound (S),
!               High_Bound => Type_High_Bound (T)));
!          Set_Is_Fixed_Lower_Bound_Index_Subtype (Def_Id);
! 
!       else
!          Set_Scalar_Range (Def_Id, R);
!       end if;
  
        Set_Etype (S, Def_Id);
        Set_Discrete_RM_Size (Def_Id);
*************** package body Sem_Ch3 is
*** 14291,14299 ****
        Set_Scalar_Range_For_Subtype (Def_Id, Range_Expression (C), T);
  
        if Is_Modular_Integer_Type (T) then
!          Set_Ekind (Def_Id, E_Modular_Integer_Subtype);
        else
!          Set_Ekind (Def_Id, E_Signed_Integer_Subtype);
        end if;
  
        Set_Etype            (Def_Id, Base_Type      (T));
--- 14679,14687 ----
        Set_Scalar_Range_For_Subtype (Def_Id, Range_Expression (C), T);
  
        if Is_Modular_Integer_Type (T) then
!          Mutate_Ekind (Def_Id, E_Modular_Integer_Subtype);
        else
!          Mutate_Ekind (Def_Id, E_Signed_Integer_Subtype);
        end if;
  
        Set_Etype            (Def_Id, Base_Type      (T));
*************** package body Sem_Ch3 is
*** 14313,14319 ****
        Rais : Node_Id;
  
     begin
!       Set_Ekind          (Def_Id, E_Ordinary_Fixed_Point_Subtype);
        Set_Etype          (Def_Id, Base_Type      (T));
        Set_Size_Info      (Def_Id,                (T));
        Set_First_Rep_Item (Def_Id, First_Rep_Item (T));
--- 14701,14707 ----
        Rais : Node_Id;
  
     begin
!       Mutate_Ekind       (Def_Id, E_Ordinary_Fixed_Point_Subtype);
        Set_Etype          (Def_Id, Base_Type      (T));
        Set_Size_Info      (Def_Id,                (T));
        Set_First_Rep_Item (Def_Id, First_Rep_Item (T));
*************** package body Sem_Ch3 is
*** 14490,14496 ****
        --  appropriate choice, since it allowed the attributes to be set
        --  in the first place. This Ekind value will be modified later.
  
!       Set_Ekind (Full, Ekind (Priv));
  
        --  Also set Etype temporarily to Any_Type, again, in the absence
        --  of errors, it will be properly reset, and if there are errors,
--- 14878,14884 ----
        --  appropriate choice, since it allowed the attributes to be set
        --  in the first place. This Ekind value will be modified later.
  
!       Mutate_Ekind (Full, Ekind (Priv));
  
        --  Also set Etype temporarily to Any_Type, again, in the absence
        --  of errors, it will be properly reset, and if there are errors,
*************** package body Sem_Ch3 is
*** 14585,14590 ****
--- 14973,14981 ----
     -- Copy_Array_Subtype_Attributes --
     -----------------------------------
  
+    --  Note that we used to copy Packed_Array_Impl_Type too here, but we now
+    --  let it be recreated during freezing for the sake of better debug info.
+ 
     procedure Copy_Array_Subtype_Attributes (T1, T2 : Entity_Id) is
     begin
        Set_Size_Info (T1, T2);
*************** package body Sem_Ch3 is
*** 14602,14608 ****
        Set_Convention              (T1, Convention              (T2));
        Set_Is_Limited_Composite    (T1, Is_Limited_Composite    (T2));
        Set_Is_Private_Composite    (T1, Is_Private_Composite    (T2));
-       Set_Packed_Array_Impl_Type  (T1, Packed_Array_Impl_Type  (T2));
     end Copy_Array_Subtype_Attributes;
  
     -----------------------------------
--- 14993,14998 ----
*************** package body Sem_Ch3 is
*** 14793,14799 ****
  
        Add_Discriminants : declare
           Num_Disc : Nat;
!          Num_Gird : Nat;
  
        begin
           Num_Disc := 0;
--- 15183,15189 ----
  
        Add_Discriminants : declare
           Num_Disc : Nat;
!          Num_Stor : Nat;
  
        begin
           Num_Disc := 0;
*************** package body Sem_Ch3 is
*** 14814,14820 ****
           --  the GCC 4.x back-end decides to break apart assignments between
           --  objects using the parent view into member-wise assignments.
  
!          Num_Gird := 0;
  
           if Is_Derived_Type (Typ)
             and then not Is_Tagged_Type (Typ)
--- 15204,15210 ----
           --  the GCC 4.x back-end decides to break apart assignments between
           --  objects using the parent view into member-wise assignments.
  
!          Num_Stor := 0;
  
           if Is_Derived_Type (Typ)
             and then not Is_Tagged_Type (Typ)
*************** package body Sem_Ch3 is
*** 14822,14833 ****
              Old_C := First_Stored_Discriminant (Typ);
  
              while Present (Old_C) loop
!                Num_Gird := Num_Gird + 1;
                 Next_Stored_Discriminant (Old_C);
              end loop;
           end if;
  
!          if Num_Gird > Num_Disc then
  
              --  Find out multiple uses of new discriminants, and add hidden
              --  components for the extra renamed discriminants. We recognize
--- 15212,15223 ----
              Old_C := First_Stored_Discriminant (Typ);
  
              while Present (Old_C) loop
!                Num_Stor := Num_Stor + 1;
                 Next_Stored_Discriminant (Old_C);
              end loop;
           end if;
  
!          if Num_Stor > Num_Disc then
  
              --  Find out multiple uses of new discriminants, and add hidden
              --  components for the extra renamed discriminants. We recognize
*************** package body Sem_Ch3 is
*** 15059,15070 ****
  
        Set_Fixed_Range (Implicit_Base, Loc, -Bound_Val, Bound_Val);
  
!       --  Note: We leave size as zero for now, size will be set at freeze
        --  time. We have to do this for ordinary fixed-point, because the size
        --  depends on the specified small, and we might as well do the same for
        --  decimal fixed-point.
  
!       pragma Assert (Esize (Implicit_Base) = Uint_0);
  
        --  If there are bounds given in the declaration use them as the
        --  bounds of the first named subtype.
--- 15449,15460 ----
  
        Set_Fixed_Range (Implicit_Base, Loc, -Bound_Val, Bound_Val);
  
!       --  Note: We leave Esize unset for now, size will be set at freeze
        --  time. We have to do this for ordinary fixed-point, because the size
        --  depends on the specified small, and we might as well do the same for
        --  decimal fixed-point.
  
!       pragma Assert (not Known_Esize (Implicit_Base));
  
        --  If there are bounds given in the declaration use them as the
        --  bounds of the first named subtype.
*************** package body Sem_Ch3 is
*** 15112,15118 ****
        --  chain ensures that SPARK-related pragmas are not clobbered when the
        --  decimal fixed point type acts as a full view of a private type.
  
!       Set_Ekind              (T, E_Decimal_Fixed_Point_Subtype);
        Set_Etype              (T, Implicit_Base);
        Set_Size_Info          (T, Implicit_Base);
        Inherit_Rep_Item_Chain (T, Implicit_Base);
--- 15502,15508 ----
        --  chain ensures that SPARK-related pragmas are not clobbered when the
        --  decimal fixed point type acts as a full view of a private type.
  
!       Mutate_Ekind           (T, E_Decimal_Fixed_Point_Subtype);
        Set_Etype              (T, Implicit_Base);
        Set_Size_Info          (T, Implicit_Base);
        Inherit_Rep_Item_Chain (T, Implicit_Base);
*************** package body Sem_Ch3 is
*** 15415,15421 ****
  
                    --  Set remaining characterstics of anonymous access type
  
!                   Init_Alignment (Acc_Type);
                    Set_Directly_Designated_Type (Acc_Type, Derived_Type);
  
                    Set_Etype (New_Id, Acc_Type);
--- 15805,15811 ----
  
                    --  Set remaining characterstics of anonymous access type
  
!                   Reinit_Alignment (Acc_Type);
                    Set_Directly_Designated_Type (Acc_Type, Derived_Type);
  
                    Set_Etype (New_Id, Acc_Type);
*************** package body Sem_Ch3 is
*** 15504,15510 ****
  
     begin
        New_Subp := New_Entity (Nkind (Parent_Subp), Sloc (Derived_Type));
!       Set_Ekind (New_Subp, Ekind (Parent_Subp));
  
        --  Check whether the inherited subprogram is a private operation that
        --  should be inherited but not yet made visible. Such subprograms can
--- 15894,15900 ----
  
     begin
        New_Subp := New_Entity (Nkind (Parent_Subp), Sloc (Derived_Type));
!       Mutate_Ekind (New_Subp, Ekind (Parent_Subp));
  
        --  Check whether the inherited subprogram is a private operation that
        --  should be inherited but not yet made visible. Such subprograms can
*************** package body Sem_Ch3 is
*** 15686,15691 ****
--- 16076,16083 ----
           Set_Alias (New_Subp, Actual_Subp);
        end if;
  
+       Copy_Strub_Mode (New_Subp, Alias (New_Subp));
+ 
        --  Derived subprograms of a tagged type must inherit the convention
        --  of the parent subprogram (a requirement of AI-117). Derived
        --  subprograms of untagged types simply get convention Ada by default.
*************** package body Sem_Ch3 is
*** 15750,15755 ****
--- 16142,16155 ----
  
        Set_No_Return (New_Subp, No_Return (Parent_Subp));
  
+       --  If the parent subprogram is marked as Ghost, then so is the derived
+       --  subprogram. The ghost policy for the derived subprogram is set from
+       --  the effective ghost policy at the point of derived type declaration.
+ 
+       if Is_Ghost_Entity (Parent_Subp) then
+          Set_Is_Ghost_Entity (New_Subp);
+       end if;
+ 
        --  A derived function with a controlling result is abstract. If the
        --  Derived_Type is a nonabstract formal generic derived type, then
        --  inherited operations are not abstract: the required check is done at
*************** package body Sem_Ch3 is
*** 15766,15772 ****
        --  that functions with controlling access results of record extensions
        --  with a null extension part require overriding (AI95-00391/06).
  
!       --  Ada 202x (AI12-0042): Similarly, set those properties for
        --  implementing the rule of RM 7.3.2(6.1/4).
  
        --  A subprogram subject to pragma Extensions_Visible with value False
--- 16166,16172 ----
        --  that functions with controlling access results of record extensions
        --  with a null extension part require overriding (AI95-00391/06).
  
!       --  Ada 2022 (AI12-0042): Similarly, set those properties for
        --  implementing the rule of RM 7.3.2(6.1/4).
  
        --  A subprogram subject to pragma Extensions_Visible with value False
*************** package body Sem_Ch3 is
*** 15923,15929 ****
           Set_Mechanism (New_Subp, Mechanism (Parent_Subp));
        end if;
  
!       --  Ada 2020 (AI12-0279): If a Yield aspect is specified True for a
        --  primitive subprogram S of a type T, then the aspect is inherited
        --  by the corresponding primitive subprogram of each descendant of T.
  
--- 16323,16329 ----
           Set_Mechanism (New_Subp, Mechanism (Parent_Subp));
        end if;
  
!       --  Ada 2022 (AI12-0279): If a Yield aspect is specified True for a
        --  primitive subprogram S of a type T, then the aspect is inherited
        --  by the corresponding primitive subprogram of each descendant of T.
  
*************** package body Sem_Ch3 is
*** 15933,15938 ****
--- 16333,16340 ----
        then
           Set_Has_Yield_Aspect (New_Subp, Has_Yield_Aspect (Alias (New_Subp)));
        end if;
+ 
+       Set_Is_Ada_2022_Only (New_Subp, Is_Ada_2022_Only (Parent_Subp));
     end Derive_Subprogram;
  
     ------------------------
*************** package body Sem_Ch3 is
*** 15965,15976 ****
        ------------------------
  
        function Check_Derived_Type return Boolean is
!          E        : Entity_Id;
!          Elmt     : Elmt_Id;
!          List     : Elist_Id;
!          New_Subp : Entity_Id;
!          Op_Elmt  : Elmt_Id;
!          Subp     : Entity_Id;
  
        begin
           --  Traverse list of entities in the current scope searching for
--- 16367,16378 ----
        ------------------------
  
        function Check_Derived_Type return Boolean is
!          E            : Entity_Id;
!          Derived_Elmt : Elmt_Id;
!          Derived_Op   : Entity_Id;
!          Derived_Ops  : Elist_Id;
!          Parent_Elmt  : Elmt_Id;
!          Parent_Op    : Entity_Id;
  
        begin
           --  Traverse list of entities in the current scope searching for
*************** package body Sem_Ch3 is
*** 15985,15991 ****
                 --  Disable this test if Derived_Type completes an incomplete
                 --  type because in such case more primitives can be added
                 --  later to the list of primitives of Derived_Type by routine
!                --  Process_Incomplete_Dependents
  
                 return True;
              end if;
--- 16387,16393 ----
                 --  Disable this test if Derived_Type completes an incomplete
                 --  type because in such case more primitives can be added
                 --  later to the list of primitives of Derived_Type by routine
!                --  Process_Incomplete_Dependents.
  
                 return True;
              end if;
*************** package body Sem_Ch3 is
*** 15993,16005 ****
              Next_Entity (E);
           end loop;
  
!          List := Collect_Primitive_Operations (Derived_Type);
!          Elmt := First_Elmt (List);
  
!          Op_Elmt := First_Elmt (Op_List);
!          while Present (Op_Elmt) loop
!             Subp     := Node (Op_Elmt);
!             New_Subp := Node (Elmt);
  
              --  At this early stage Derived_Type has no entities with attribute
              --  Interface_Alias. In addition, such primitives are always
--- 16395,16407 ----
              Next_Entity (E);
           end loop;
  
!          Derived_Ops := Collect_Primitive_Operations (Derived_Type);
  
!          Derived_Elmt := First_Elmt (Derived_Ops);
!          Parent_Elmt  := First_Elmt (Op_List);
!          while Present (Parent_Elmt) loop
!             Parent_Op  := Node (Parent_Elmt);
!             Derived_Op := Node (Derived_Elmt);
  
              --  At this early stage Derived_Type has no entities with attribute
              --  Interface_Alias. In addition, such primitives are always
*************** package body Sem_Ch3 is
*** 16007,16037 ****
              --  Therefore, if found we can safely stop processing pending
              --  entities.
  
!             exit when Present (Interface_Alias (Subp));
  
              --  Handle hidden entities
  
!             if not Is_Predefined_Dispatching_Operation (Subp)
!               and then Is_Hidden (Subp)
              then
!                if Present (New_Subp)
!                  and then Primitive_Names_Match (Subp, New_Subp)
                 then
!                   Next_Elmt (Elmt);
                 end if;
  
              else
!                if not Present (New_Subp)
!                  or else Ekind (Subp) /= Ekind (New_Subp)
!                  or else not Primitive_Names_Match (Subp, New_Subp)
                 then
                    return False;
                 end if;
  
!                Next_Elmt (Elmt);
              end if;
  
!             Next_Elmt (Op_Elmt);
           end loop;
  
           return True;
--- 16409,16439 ----
              --  Therefore, if found we can safely stop processing pending
              --  entities.
  
!             exit when Present (Interface_Alias (Parent_Op));
  
              --  Handle hidden entities
  
!             if not Is_Predefined_Dispatching_Operation (Parent_Op)
!               and then Is_Hidden (Parent_Op)
              then
!                if Present (Derived_Op)
!                  and then Primitive_Names_Match (Parent_Op, Derived_Op)
                 then
!                   Next_Elmt (Derived_Elmt);
                 end if;
  
              else
!                if No (Derived_Op)
!                  or else Ekind (Parent_Op) /= Ekind (Derived_Op)
!                  or else not Primitive_Names_Match (Parent_Op, Derived_Op)
                 then
                    return False;
                 end if;
  
!                Next_Elmt (Derived_Elmt);
              end if;
  
!             Next_Elmt (Parent_Elmt);
           end loop;
  
           return True;
*************** package body Sem_Ch3 is
*** 16566,16576 ****
  
        Conditional_Delay (Derived_Type, Parent_Type);
  
!       Set_Ekind (Derived_Type, E_Enumeration_Subtype);
        Set_Etype (Derived_Type, Implicit_Base);
        Set_Size_Info         (Derived_Type, Parent_Type);
  
!       if Unknown_RM_Size (Derived_Type) then
           Set_RM_Size (Derived_Type, RM_Size (Parent_Type));
        end if;
  
--- 16968,16978 ----
  
        Conditional_Delay (Derived_Type, Parent_Type);
  
!       Mutate_Ekind (Derived_Type, E_Enumeration_Subtype);
        Set_Etype (Derived_Type, Implicit_Base);
        Set_Size_Info         (Derived_Type, Parent_Type);
  
!       if not Known_RM_Size (Derived_Type) then
           Set_RM_Size (Derived_Type, RM_Size (Parent_Type));
        end if;
  
*************** package body Sem_Ch3 is
*** 16815,16829 ****
              Error_Msg_N ("type cannot be used in its own definition", Indic);
           end if;
  
!          Set_Ekind        (T, Ekind (Parent_Type));
           Set_Etype        (T, Any_Type);
           Set_Scalar_Range (T, Scalar_Range (Any_Type));
  
!          if Is_Tagged_Type (T)
!            and then Is_Record_Type (T)
!          then
!             Set_Direct_Primitive_Operations (T, New_Elmt_List);
!          end if;
  
           return;
        end if;
--- 17217,17233 ----
              Error_Msg_N ("type cannot be used in its own definition", Indic);
           end if;
  
!          Mutate_Ekind     (T, Ekind (Parent_Type));
           Set_Etype        (T, Any_Type);
           Set_Scalar_Range (T, Scalar_Range (Any_Type));
  
!          --  Initialize the list of primitive operations to an empty list,
!          --  to cover tagged types as well as untagged types. For untagged
!          --  types this is used either to analyze the call as legal when
!          --  Extensions_Allowed is True, or to issue a better error message
!          --  otherwise.
! 
!          Set_Direct_Primitive_Operations (T, New_Elmt_List);
  
           return;
        end if;
*************** package body Sem_Ch3 is
*** 16862,16871 ****
          and then Is_Interface (Parent_Type)
        then
           declare
-             Iface               : Node_Id;
              Partial_View        : Entity_Id;
              Partial_View_Parent : Entity_Id;
!             New_Iface           : Node_Id;
  
           begin
              --  Look for the associated private type declaration
--- 17266,17311 ----
          and then Is_Interface (Parent_Type)
        then
           declare
              Partial_View        : Entity_Id;
              Partial_View_Parent : Entity_Id;
! 
!             function Reorder_Interfaces return Boolean;
!             --  Look for an interface in the full view's interface list that
!             --  matches the parent type of the partial view, and when found,
!             --  rewrite the full view's parent with the partial view's parent,
!             --  append the full view's original parent to the interface list,
!             --  recursively call Derived_Type_Definition on the full type, and
!             --  return True. If a match is not found, return False.
! 
!             ------------------------
!             -- Reorder_Interfaces --
!             ------------------------
! 
!             function Reorder_Interfaces return Boolean is
!                Iface     : Node_Id;
!                New_Iface : Node_Id;
! 
!             begin
!                Iface := First (Interface_List (Def));
!                while Present (Iface) loop
!                   if Etype (Iface) = Etype (Partial_View) then
!                      Rewrite (Subtype_Indication (Def),
!                        New_Copy (Subtype_Indication (Parent (Partial_View))));
! 
!                      New_Iface :=
!                        Make_Identifier (Sloc (N), Chars (Parent_Type));
!                      Rewrite (Iface, New_Iface);
! 
!                      --  Analyze the transformed code
! 
!                      Derived_Type_Declaration (T, N, Is_Completion);
!                      return True;
!                   end if;
! 
!                   Next (Iface);
!                end loop;
!                return False;
!             end Reorder_Interfaces;
  
           begin
              --  Look for the associated private type declaration
*************** package body Sem_Ch3 is
*** 16886,16915 ****
                 then
                    null;
  
!                --  Traverse the list of interfaces of the full-view to look
!                --  for the parent of the partial-view and perform the tree
!                --  transformation.
  
                 else
-                   Iface := First (Interface_List (Def));
-                   while Present (Iface) loop
-                      if Etype (Iface) = Etype (Partial_View) then
-                         Rewrite (Subtype_Indication (Def),
-                           New_Copy (Subtype_Indication
-                                      (Parent (Partial_View))));
- 
-                         New_Iface :=
-                           Make_Identifier (Sloc (N), Chars (Parent_Type));
-                         Append (New_Iface, Interface_List (Def));
  
!                         --  Analyze the transformed code
  
!                         Derived_Type_Declaration (T, N, Is_Completion);
!                         return;
!                      end if;
  
!                      Next (Iface);
!                   end loop;
                 end if;
              end if;
           end;
--- 17326,17351 ----
                 then
                    null;
  
!                --  Traverse the list of interfaces of the full view to look
!                --  for the parent of the partial view and reorder the
!                --  interfaces to match the order in the partial view,
!                --  if needed.
  
                 else
  
!                   if Reorder_Interfaces then
!                      --  Having the interfaces listed in any order is legal.
!                      --  However, the compiler does not properly handle
!                      --  different orders between partial and full views in
!                      --  generic units. We give a warning about the order
!                      --  mismatch, so the user can work around this problem.
  
!                      Error_Msg_N ("??full declaration does not respect " &
!                                   "partial declaration order", T);
!                      Error_Msg_N ("\??consider reordering", T);
  
!                      return;
!                   end if;
                 end if;
              end if;
           end;
*************** package body Sem_Ch3 is
*** 17081,17086 ****
--- 17517,17524 ----
           Error_Msg_N ("null exclusion can only apply to an access type", N);
        end if;
  
+       Check_Wide_Character_Restriction (Parent_Type, Indic);
+ 
        --  Avoid deriving parent primitives of underlying record views
  
        Build_Derived_Type (N, Parent_Type, T, Is_Completion,
*************** package body Sem_Ch3 is
*** 17156,17162 ****
        R_Node := New_Node (N_Range, Sloc (Def));
        Set_Low_Bound  (R_Node, B_Node);
  
!       Set_Ekind (T, E_Enumeration_Type);
        Set_First_Literal (T, L);
        Set_Etype (T, T);
        Set_Is_Constrained (T);
--- 17594,17600 ----
        R_Node := New_Node (N_Range, Sloc (Def));
        Set_Low_Bound  (R_Node, B_Node);
  
!       Mutate_Ekind (T, E_Enumeration_Type);
        Set_First_Literal (T, L);
        Set_Etype (T, T);
        Set_Is_Constrained (T);
*************** package body Sem_Ch3 is
*** 17170,17176 ****
  
        while Present (L) loop
           if Ekind (L) /= E_Enumeration_Literal then
!             Set_Ekind (L, E_Enumeration_Literal);
              Set_Enumeration_Pos (L, Ev);
              Set_Enumeration_Rep (L, Ev);
              Set_Is_Known_Valid  (L, True);
--- 17608,17614 ----
  
        while Present (L) loop
           if Ekind (L) /= E_Enumeration_Literal then
!             Mutate_Ekind (L, E_Enumeration_Literal);
              Set_Enumeration_Pos (L, Ev);
              Set_Enumeration_Rep (L, Ev);
              Set_Is_Known_Valid  (L, True);
*************** package body Sem_Ch3 is
*** 17212,17218 ****
        Set_High_Bound (R_Node, B_Node);
  
        --  Initialize various fields of the type. Some of this information
!       --  may be overwritten later through rep.clauses.
  
        Set_Scalar_Range    (T, R_Node);
        Set_RM_Size         (T, UI_From_Int (Minimum_Size (T)));
--- 17650,17656 ----
        Set_High_Bound (R_Node, B_Node);
  
        --  Initialize various fields of the type. Some of this information
!       --  may be overwritten later through rep. clauses.
  
        Set_Scalar_Range    (T, R_Node);
        Set_RM_Size         (T, UI_From_Int (Minimum_Size (T)));
*************** package body Sem_Ch3 is
*** 17443,17452 ****
                and then Nkind (N) = N_Private_Type_Declaration
              then
                 Error_Msg_NE
!                  ("declaration of private } must be a tagged type ", Id, Prev);
              else
                 Error_Msg_NE
!                  ("full declaration of } must be a tagged type ", Id, Prev);
              end if;
  
           else
--- 17881,17890 ----
                and then Nkind (N) = N_Private_Type_Declaration
              then
                 Error_Msg_NE
!                  ("declaration of private } must be a tagged type", Id, Prev);
              else
                 Error_Msg_NE
!                  ("full declaration of } must be a tagged type", Id, Prev);
              end if;
  
           else
*************** package body Sem_Ch3 is
*** 17454,17463 ****
                and then Nkind (N) = N_Private_Type_Declaration
              then
                 Error_Msg_NE
!                  ("declaration of private } must be a tagged type ", Prev, Id);
              else
                 Error_Msg_NE
!                  ("full declaration of } must be a tagged type ", Prev, Id);
              end if;
           end if;
        end Tag_Mismatch;
--- 17892,17901 ----
                and then Nkind (N) = N_Private_Type_Declaration
              then
                 Error_Msg_NE
!                  ("declaration of private } must be a tagged type", Prev, Id);
              else
                 Error_Msg_NE
!                  ("full declaration of } must be a tagged type", Prev, Id);
              end if;
           end if;
        end Tag_Mismatch;
*************** package body Sem_Ch3 is
*** 17547,17553 ****
              if Is_Tagged_Type (Prev)
                and then Present (Class_Wide_Type (Prev))
              then
!                Set_Ekind (Id, Ekind (Prev));         --  will be reset later
                 Set_Class_Wide_Type (Id, Class_Wide_Type (Prev));
  
                 --  Type of the class-wide type is the current Id. Previously
--- 17985,17991 ----
              if Is_Tagged_Type (Prev)
                and then Present (Class_Wide_Type (Prev))
              then
!                Mutate_Ekind (Id, Ekind (Prev));         --  will be reset later
                 Set_Class_Wide_Type (Id, Class_Wide_Type (Prev));
  
                 --  Type of the class-wide type is the current Id. Previously
*************** package body Sem_Ch3 is
*** 17825,17830 ****
--- 18263,18306 ----
  
           T := Make_Defining_Identifier (Sloc (P), Nam);
  
+          --  If In_Spec_Expression, for example within a pre/postcondition,
+          --  provide enough information for use of the subtype without
+          --  depending on full analysis and freezing, which will happen when
+          --  building the correspondiing subprogram.
+ 
+          if In_Spec_Expression then
+             Analyze (Subtype_Mark (Obj_Def));
+ 
+             declare
+                Base_T : constant Entity_Id := Entity (Subtype_Mark (Obj_Def));
+                Decl   : constant Node_Id :=
+                  Make_Subtype_Declaration (Sloc (P),
+                    Defining_Identifier => T,
+                    Subtype_Indication  => Relocate_Node (Obj_Def));
+             begin
+                Set_Etype  (T, Base_T);
+                Mutate_Ekind  (T, Subtype_Kind (Ekind (Base_T)));
+                Set_Parent (T, Obj_Def);
+ 
+                if Ekind (T) = E_Array_Subtype then
+                   Set_First_Index (T, First_Index (Base_T));
+                   Set_Is_Constrained (T);
+ 
+                elsif Ekind (T) = E_Record_Subtype then
+                   Set_First_Entity (T, First_Entity (Base_T));
+                   Set_Has_Discriminants (T, Has_Discriminants (Base_T));
+                   Set_Is_Constrained (T);
+                end if;
+ 
+                Insert_Before (Related_Nod, Decl);
+             end;
+ 
+             return T;
+          end if;
+ 
+          --  When generating code, insert subtype declaration ahead of
+          --  declaration that generated it.
+ 
           Insert_Action (Obj_Def,
             Make_Subtype_Declaration (Sloc (P),
               Defining_Identifier => T,
*************** package body Sem_Ch3 is
*** 17856,17864 ****
           T := Access_Definition (Related_Nod, Obj_Def);
  
           Set_Is_Local_Anonymous_Access
!            (T,
!             V => (Ada_Version < Ada_2012)
!                    or else (Nkind (P) /= N_Object_Declaration)
                     or else Is_Library_Level_Entity (Defining_Identifier (P)));
  
        --  Otherwise, the object definition is just a subtype_mark
--- 18332,18339 ----
           T := Access_Definition (Related_Nod, Obj_Def);
  
           Set_Is_Local_Anonymous_Access
!            (T, Ada_Version < Ada_2012
!                    or else Nkind (P) /= N_Object_Declaration
                     or else Is_Library_Level_Entity (Defining_Identifier (P)));
  
        --  Otherwise, the object definition is just a subtype_mark
*************** package body Sem_Ch3 is
*** 17903,17912 ****
           Typ := Entity (S);
        end if;
  
-       --  Check No_Wide_Characters restriction
- 
-       Check_Wide_Character_Restriction (Typ, S);
- 
        return Typ;
     end Find_Type_Of_Subtype_Indic;
  
--- 18378,18383 ----
*************** package body Sem_Ch3 is
*** 18106,18117 ****
        Set_Digits_Value       (Implicit_Base, Digits_Value   (Base_Typ));
        Set_Float_Rep          (Implicit_Base, Float_Rep      (Base_Typ));
  
!       Set_Ekind              (T, E_Floating_Point_Subtype);
        Set_Etype              (T,          Implicit_Base);
        Set_Size_Info          (T,          Implicit_Base);
        Set_RM_Size            (T, RM_Size (Implicit_Base));
        Inherit_Rep_Item_Chain (T,          Implicit_Base);
!       Set_Digits_Value       (T, Digs_Val);
     end Floating_Point_Type_Declaration;
  
     ----------------------------
--- 18577,18593 ----
        Set_Digits_Value       (Implicit_Base, Digits_Value   (Base_Typ));
        Set_Float_Rep          (Implicit_Base, Float_Rep      (Base_Typ));
  
!       Mutate_Ekind           (T, E_Floating_Point_Subtype);
        Set_Etype              (T,          Implicit_Base);
        Set_Size_Info          (T,          Implicit_Base);
        Set_RM_Size            (T, RM_Size (Implicit_Base));
        Inherit_Rep_Item_Chain (T,          Implicit_Base);
! 
!       if Digs_Val >= Uint_1 then
!          Set_Digits_Value (T, Digs_Val);
!       else
!          pragma Assert (Serious_Errors_Detected > 0); null;
!       end if;
     end Floating_Point_Type_Declaration;
  
     ----------------------------
*************** package body Sem_Ch3 is
*** 18593,18599 ****
           if Is_Tagged and then Ekind (New_C) = E_Component
             and then Nkind (N) /= N_Private_Extension_Declaration
           then
!             Set_Ekind (New_C, E_Void);
           end if;
  
           if Plain_Discrim then
--- 19069,19075 ----
           if Is_Tagged and then Ekind (New_C) = E_Component
             and then Nkind (N) /= N_Private_Extension_Declaration
           then
!             Mutate_Ekind (New_C, E_Void);
           end if;
  
           if Plain_Discrim then
*************** package body Sem_Ch3 is
*** 18792,18847 ****
        return False;
     end Is_EVF_Procedure;
  
-    -----------------------
-    -- Is_Null_Extension --
-    -----------------------
- 
-    function Is_Null_Extension (T : Entity_Id) return Boolean is
-       Type_Decl : constant Node_Id := Parent (Base_Type (T));
-       Comp_List : Node_Id;
-       Comp      : Node_Id;
- 
-    begin
-       if Nkind (Type_Decl) /= N_Full_Type_Declaration
-         or else not Is_Tagged_Type (T)
-         or else Nkind (Type_Definition (Type_Decl)) /=
-                                               N_Derived_Type_Definition
-         or else No (Record_Extension_Part (Type_Definition (Type_Decl)))
-       then
-          return False;
-       end if;
- 
-       Comp_List :=
-         Component_List (Record_Extension_Part (Type_Definition (Type_Decl)));
- 
-       if Present (Discriminant_Specifications (Type_Decl)) then
-          return False;
- 
-       elsif Present (Comp_List)
-         and then Is_Non_Empty_List (Component_Items (Comp_List))
-       then
-          Comp := First (Component_Items (Comp_List));
- 
-          --  Only user-defined components are relevant. The component list
-          --  may also contain a parent component and internal components
-          --  corresponding to secondary tags, but these do not determine
-          --  whether this is a null extension.
- 
-          while Present (Comp) loop
-             if Comes_From_Source (Comp) then
-                return False;
-             end if;
- 
-             Next (Comp);
-          end loop;
- 
-          return True;
- 
-       else
-          return True;
-       end if;
-    end Is_Null_Extension;
- 
     --------------------------
     -- Is_Private_Primitive --
     --------------------------
--- 19268,19273 ----
*************** package body Sem_Ch3 is
*** 18927,18947 ****
        -------------------
  
        function Is_Local_Type (Typ : Entity_Id) return Boolean is
-          Scop : Entity_Id;
- 
        begin
!          Scop := Scope (Typ);
!          while Present (Scop)
!            and then Scop /= Standard_Standard
!          loop
!             if Scop = Scope (Current_Scope) then
!                return True;
!             end if;
! 
!             Scop := Scope (Scop);
!          end loop;
! 
!          return False;
        end Is_Local_Type;
  
     --  Start of processing for Is_Visible_Component
--- 19353,19360 ----
        -------------------
  
        function Is_Local_Type (Typ : Entity_Id) return Boolean is
        begin
!          return Scope_Within (Inner => Typ, Outer => Scope (Current_Scope));
        end Is_Local_Type;
  
     --  Start of processing for Is_Visible_Component
*************** package body Sem_Ch3 is
*** 19148,19154 ****
        --  abstract, its Etype points back to the specific root type, and it
        --  cannot have any invariants.
  
!       Set_Ekind                       (CW_Type, E_Class_Wide_Type);
        Set_Is_Tagged_Type              (CW_Type, True);
        Set_Direct_Primitive_Operations (CW_Type, New_Elmt_List);
        Set_Is_Abstract_Type            (CW_Type, False);
--- 19561,19584 ----
        --  abstract, its Etype points back to the specific root type, and it
        --  cannot have any invariants.
  
!       if Ekind (CW_Type) in Incomplete_Or_Private_Kind then
!          Reinit_Field_To_Zero (CW_Type, F_Private_Dependents);
! 
!       elsif Ekind (CW_Type) in Concurrent_Kind then
!          Reinit_Field_To_Zero (CW_Type, F_First_Private_Entity);
!          Reinit_Field_To_Zero (CW_Type, F_Scope_Depth_Value);
! 
!          if Ekind (CW_Type) in Task_Kind then
!             Reinit_Field_To_Zero (CW_Type, F_Is_Elaboration_Checks_OK_Id);
!             Reinit_Field_To_Zero (CW_Type, F_Is_Elaboration_Warnings_OK_Id);
!          end if;
! 
!          if Ekind (CW_Type) in E_Task_Type | E_Protected_Type then
!             Reinit_Field_To_Zero (CW_Type, F_SPARK_Aux_Pragma_Inherited);
!          end if;
!       end if;
! 
!       Mutate_Ekind                    (CW_Type, E_Class_Wide_Type);
        Set_Is_Tagged_Type              (CW_Type, True);
        Set_Direct_Primitive_Operations (CW_Type, New_Elmt_List);
        Set_Is_Abstract_Type            (CW_Type, False);
*************** package body Sem_Ch3 is
*** 19281,19288 ****
              return;
           end if;
  
!          --  If the range bounds are "T'Low .. T'High" where T is a name of
!          --  a discrete type, then use T as the type of the index.
  
           if Nkind (Low_Bound (N)) = N_Attribute_Reference
             and then Attribute_Name (Low_Bound (N)) = Name_First
--- 19711,19718 ----
              return;
           end if;
  
!          --  If the range bounds are "T'First .. T'Last" where T is a name of a
!          --  discrete type, then use T as the type of the index.
  
           if Nkind (Low_Bound (N)) = N_Attribute_Reference
             and then Attribute_Name (Low_Bound (N)) = Name_First
*************** package body Sem_Ch3 is
*** 19354,19360 ****
  
        else
           if not Is_Entity_Name (N) or else not Is_Type (Entity (N)) then
!             Error_Msg_N ("invalid subtype mark in discrete range ", N);
              Set_Etype (N, Any_Integer);
              return;
  
--- 19784,19790 ----
  
        else
           if not Is_Entity_Name (N) or else not Is_Type (Entity (N)) then
!             Error_Msg_N ("invalid subtype mark in discrete range", N);
              Set_Etype (N, Any_Integer);
              return;
  
*************** package body Sem_Ch3 is
*** 19426,19438 ****
           Set_Etype (Def_Id, Base_Type (T));
  
           if Is_Signed_Integer_Type (T) then
!             Set_Ekind (Def_Id, E_Signed_Integer_Subtype);
  
           elsif Is_Modular_Integer_Type (T) then
!             Set_Ekind (Def_Id, E_Modular_Integer_Subtype);
  
           else
!             Set_Ekind             (Def_Id, E_Enumeration_Subtype);
              Set_Is_Character_Type (Def_Id, Is_Character_Type (T));
              Set_First_Literal     (Def_Id, First_Literal (T));
           end if;
--- 19856,19868 ----
           Set_Etype (Def_Id, Base_Type (T));
  
           if Is_Signed_Integer_Type (T) then
!             Mutate_Ekind (Def_Id, E_Signed_Integer_Subtype);
  
           elsif Is_Modular_Integer_Type (T) then
!             Mutate_Ekind (Def_Id, E_Modular_Integer_Subtype);
  
           else
!             Mutate_Ekind          (Def_Id, E_Enumeration_Subtype);
              Set_Is_Character_Type (Def_Id, Is_Character_Type (T));
              Set_First_Literal     (Def_Id, First_Literal (T));
           end if;
*************** package body Sem_Ch3 is
*** 19462,19467 ****
--- 19892,19899 ----
                 Set_Is_Non_Static_Subtype (Def_Id);
              end if;
           end if;
+ 
+          Set_Parent (Def_Id, N);
        end if;
  
        --  Final step is to label the index with this constructed type
*************** package body Sem_Ch3 is
*** 19498,19507 ****
                 Siz := Siz * 2;
              end loop;
  
!             Init_Esize (T, Siz);
  
           else
!             Init_Esize (T, System_Max_Binary_Modulus_Power);
           end if;
  
           if not Non_Binary_Modulus (T) and then Esize (T) = RM_Size (T) then
--- 19930,19939 ----
                 Siz := Siz * 2;
              end loop;
  
!             Set_Esize (T, UI_From_Int (Siz));
  
           else
!             Set_Esize (T, UI_From_Int (System_Max_Binary_Modulus_Power));
           end if;
  
           if not Non_Binary_Modulus (T) and then Esize (T) = RM_Size (T) then
*************** package body Sem_Ch3 is
*** 19513,19519 ****
  
     begin
        --  If the mod expression is (exactly) 2 * literal, where literal is
!       --  128 or less,then almost certainly the * was meant to be **. Warn.
  
        if Warn_On_Suspicious_Modulus_Value
          and then Nkind (Mod_Expr) = N_Op_Multiply
--- 19945,19951 ----
  
     begin
        --  If the mod expression is (exactly) 2 * literal, where literal is
!       --  128 or less, then almost certainly the * was meant to be **. Warn.
  
        if Warn_On_Suspicious_Modulus_Value
          and then Nkind (Mod_Expr) = N_Op_Multiply
*************** package body Sem_Ch3 is
*** 19523,19537 ****
          and then Intval (Right_Opnd (Mod_Expr)) <= Uint_128
        then
           Error_Msg_N
!            ("suspicious MOD value, was '*'* intended'??M?", Mod_Expr);
        end if;
  
        --  Proceed with analysis of mod expression
  
        Analyze_And_Resolve (Mod_Expr, Any_Integer);
        Set_Etype (T, T);
!       Set_Ekind (T, E_Modular_Integer_Type);
!       Init_Alignment (T);
        Set_Is_Constrained (T);
  
        if not Is_OK_Static_Expression (Mod_Expr) then
--- 19955,19974 ----
          and then Intval (Right_Opnd (Mod_Expr)) <= Uint_128
        then
           Error_Msg_N
!            ("suspicious MOD value, was '*'* intended'??.m?", Mod_Expr);
        end if;
  
        --  Proceed with analysis of mod expression
  
        Analyze_And_Resolve (Mod_Expr, Any_Integer);
+ 
+       if Ekind (T) in Incomplete_Or_Private_Kind then
+          Reinit_Field_To_Zero (T, F_Stored_Constraint);
+       end if;
+ 
        Set_Etype (T, T);
!       Mutate_Ekind (T, E_Modular_Integer_Type);
!       Reinit_Alignment (T);
        Set_Is_Constrained (T);
  
        if not Is_OK_Static_Expression (Mod_Expr) then
*************** package body Sem_Ch3 is
*** 19610,19616 ****
        Error_Msg_F ("modulus exceeds limit (2 '*'*^)", Mod_Expr);
  
        Set_Modular_Size (System_Max_Binary_Modulus_Power);
!       Init_Alignment (T);
  
     end Modular_Type_Declaration;
  
--- 20047,20053 ----
        Error_Msg_F ("modulus exceeds limit (2 '*'*^)", Mod_Expr);
  
        Set_Modular_Size (System_Max_Binary_Modulus_Power);
!       Reinit_Alignment (T);
  
     end Modular_Type_Declaration;
  
*************** package body Sem_Ch3 is
*** 19644,19650 ****
     begin
        Op := Make_Defining_Operator_Symbol (Loc, Name_Op_Concat);
  
!       Set_Ekind                   (Op, E_Operator);
        Set_Scope                   (Op, Current_Scope);
        Set_Etype                   (Op, Typ);
        Set_Homonym                 (Op, Get_Name_Entity_Id (Name_Op_Concat));
--- 20081,20087 ----
     begin
        Op := Make_Defining_Operator_Symbol (Loc, Name_Op_Concat);
  
!       Mutate_Ekind                (Op, E_Operator);
        Set_Scope                   (Op, Current_Scope);
        Set_Etype                   (Op, Typ);
        Set_Homonym                 (Op, Get_Name_Entity_Id (Name_Op_Concat));
*************** package body Sem_Ch3 is
*** 19930,19938 ****
        --  chain ensures that SPARK-related pragmas are not clobbered when the
        --  ordinary fixed point type acts as a full view of a private type.
  
!       Set_Ekind              (T, E_Ordinary_Fixed_Point_Subtype);
        Set_Etype              (T, Implicit_Base);
!       Init_Size_Align        (T);
        Inherit_Rep_Item_Chain (T, Implicit_Base);
        Set_Small_Value        (T, Small_Val);
        Set_Delta_Value        (T, Delta_Val);
--- 20367,20375 ----
        --  chain ensures that SPARK-related pragmas are not clobbered when the
        --  ordinary fixed point type acts as a full view of a private type.
  
!       Mutate_Ekind           (T, E_Ordinary_Fixed_Point_Subtype);
        Set_Etype              (T, Implicit_Base);
!       Reinit_Size_Align      (T);
        Inherit_Rep_Item_Chain (T, Implicit_Base);
        Set_Small_Value        (T, Small_Val);
        Set_Delta_Value        (T, Delta_Val);
*************** package body Sem_Ch3 is
*** 20064,20082 ****
           end if;
  
           if Nkind (Discriminant_Type (Discr)) = N_Access_Definition then
!             Discr_Type := Access_Definition (Discr, Discriminant_Type (Discr));
  
!             --  Ada 2005 (AI-254)
  
!             if Present (Access_To_Subprogram_Definition
!                          (Discriminant_Type (Discr)))
!               and then Protected_Present (Access_To_Subprogram_Definition
!                                            (Discriminant_Type (Discr)))
!             then
                 Discr_Type :=
!                  Replace_Anonymous_Access_To_Protected_Subprogram (Discr);
!             end if;
  
           else
              Find_Type (Discriminant_Type (Discr));
              Discr_Type := Etype (Discriminant_Type (Discr));
--- 20501,20534 ----
           end if;
  
           if Nkind (Discriminant_Type (Discr)) = N_Access_Definition then
!             Check_Anonymous_Access_Component
!               (Typ_Decl   => N,
!                Typ        => Defining_Identifier (N),
!                Prev       => Prev,
!                Comp_Def   => Discr,
!                Access_Def => Discriminant_Type (Discr));
  
!             --  if Check_Anonymous_Access_Component replaced Discr then
!             --  its Original_Node points to the old Discr and the access type
!             --  for Discr_Type has already been created.
  
!             if Original_Node (Discr) /= Discr then
!                Discr_Type := Etype (Discriminant_Type (Discr));
!             else
                 Discr_Type :=
!                  Access_Definition (Discr, Discriminant_Type (Discr));
! 
!                --  Ada 2005 (AI-254)
  
+                if Present (Access_To_Subprogram_Definition
+                             (Discriminant_Type (Discr)))
+                  and then Protected_Present (Access_To_Subprogram_Definition
+                                               (Discriminant_Type (Discr)))
+                then
+                   Discr_Type :=
+                     Replace_Anonymous_Access_To_Protected_Subprogram (Discr);
+                end if;
+             end if;
           else
              Find_Type (Discriminant_Type (Discr));
              Discr_Type := Etype (Discriminant_Type (Discr));
*************** package body Sem_Ch3 is
*** 20313,20321 ****
        Discr_Number := Uint_1;
        while Present (Discr) loop
           Id := Defining_Identifier (Discr);
!          Set_Ekind (Id, E_Discriminant);
!          Init_Component_Location (Id);
!          Init_Esize (Id);
           Set_Discriminant_Number (Id, Discr_Number);
  
           --  Make sure this is always set, even in illegal programs
--- 20765,20778 ----
        Discr_Number := Uint_1;
        while Present (Discr) loop
           Id := Defining_Identifier (Discr);
! 
!          if Ekind (Id) = E_In_Parameter then
!             Reinit_Field_To_Zero (Id, F_Discriminal_Link);
!          end if;
! 
!          Mutate_Ekind (Id, E_Discriminant);
!          Reinit_Component_Location (Id);
!          Reinit_Esize (Id);
           Set_Discriminant_Number (Id, Discr_Number);
  
           --  Make sure this is always set, even in illegal programs
*************** package body Sem_Ch3 is
*** 20673,20679 ****
                    & "has no discriminants", Full_T);
              end if;
  
!             --  ??????? Do we implement the following properly ?????
              --  If the ancestor subtype of a private extension has constrained
              --  discriminants, then the parent subtype of the full view shall
              --  impose a statically matching constraint on those discriminants
--- 21130,21136 ----
                    & "has no discriminants", Full_T);
              end if;
  
!             --  Do we implement the following properly???
              --  If the ancestor subtype of a private extension has constrained
              --  discriminants, then the parent subtype of the full view shall
              --  impose a statically matching constraint on those discriminants
*************** package body Sem_Ch3 is
*** 20750,20760 ****
  
        if not Has_Unknown_Discriminants (Priv_T)
          and then not Has_Discriminants (Priv_T)
!         and then Has_Discriminants (Full_T)
!         and then
!           Present (Discriminant_Default_Value (First_Discriminant (Full_T)))
        then
!          Set_Has_Constrained_Partial_View (Full_T);
           Set_Has_Constrained_Partial_View (Priv_T);
        end if;
  
--- 21207,21215 ----
  
        if not Has_Unknown_Discriminants (Priv_T)
          and then not Has_Discriminants (Priv_T)
!         and then Has_Defaulted_Discriminants (Full_T)
        then
!          Set_Has_Constrained_Partial_View (Base_Type (Full_T));
           Set_Has_Constrained_Partial_View (Priv_T);
        end if;
  
*************** package body Sem_Ch3 is
*** 20816,20863 ****
           end loop;
        end;
  
!       --  If the private view was tagged, copy the new primitive operations
!       --  from the private view to the full view.
  
!       if Is_Tagged_Type (Full_T) then
!          declare
!             Disp_Typ  : Entity_Id;
!             Full_List : Elist_Id;
!             Prim      : Entity_Id;
!             Prim_Elmt : Elmt_Id;
!             Priv_List : Elist_Id;
  
!             function Contains
!               (E : Entity_Id;
!                L : Elist_Id) return Boolean;
!             --  Determine whether list L contains element E
  
!             --------------
!             -- Contains --
!             --------------
  
!             function Contains
!               (E : Entity_Id;
!                L : Elist_Id) return Boolean
!             is
!                List_Elmt : Elmt_Id;
  
!             begin
!                List_Elmt := First_Elmt (L);
!                while Present (List_Elmt) loop
!                   if Node (List_Elmt) = E then
!                      return True;
!                   end if;
  
!                   Next_Elmt (List_Elmt);
!                end loop;
  
!                return False;
!             end Contains;
  
!          --  Start of processing
  
!          begin
              if Is_Tagged_Type (Priv_T) then
                 Priv_List := Primitive_Operations (Priv_T);
                 Prim_Elmt := First_Elmt (Priv_List);
--- 21271,21318 ----
           end loop;
        end;
  
!       declare
!          Disp_Typ  : Entity_Id;
!          Full_List : Elist_Id;
!          Prim      : Entity_Id;
!          Prim_Elmt : Elmt_Id;
!          Priv_List : Elist_Id;
  
!          function Contains
!            (E : Entity_Id;
!             L : Elist_Id) return Boolean;
!          --  Determine whether list L contains element E
  
!          --------------
!          -- Contains --
!          --------------
  
!          function Contains
!            (E : Entity_Id;
!             L : Elist_Id) return Boolean
!          is
!             List_Elmt : Elmt_Id;
  
!          begin
!             List_Elmt := First_Elmt (L);
!             while Present (List_Elmt) loop
!                if Node (List_Elmt) = E then
!                   return True;
!                end if;
  
!                Next_Elmt (List_Elmt);
!             end loop;
  
!             return False;
!          end Contains;
  
!       --  Start of processing
  
!       begin
!          --  If the private view was tagged, copy the new primitive operations
!          --  from the private view to the full view.
  
!          if Is_Tagged_Type (Full_T) then
              if Is_Tagged_Type (Priv_T) then
                 Priv_List := Primitive_Operations (Priv_T);
                 Prim_Elmt := First_Elmt (Priv_List);
*************** package body Sem_Ch3 is
*** 20911,20917 ****
                       goto Leave;
                    end;
  
!                --  For non-concurrent types, transfer explicit primitives, but
                 --  omit those inherited from the parent of the private view
                 --  since they will be re-inherited later on.
  
--- 21366,21372 ----
                       goto Leave;
                    end;
  
!                --  For nonconcurrent types, transfer explicit primitives, but
                 --  omit those inherited from the parent of the private view
                 --  since they will be re-inherited later on.
  
*************** package body Sem_Ch3 is
*** 20991,20998 ****
  
                 Propagate_Concurrent_Flags (Class_Wide_Type (Priv_T), Full_T);
              end if;
!          end;
!       end if;
  
        --  Ada 2005 AI 161: Check preelaborable initialization consistency
  
--- 21446,21468 ----
  
                 Propagate_Concurrent_Flags (Class_Wide_Type (Priv_T), Full_T);
              end if;
! 
!          --  For untagged types, copy the primitives across from the private
!          --  view to the full view, for support of prefixed calls when
!          --  extensions are enabled, and better error messages otherwise.
! 
!          else
!             Priv_List := Primitive_Operations (Priv_T);
!             Prim_Elmt := First_Elmt (Priv_List);
! 
!             Full_List := Primitive_Operations (Full_T);
!             while Present (Prim_Elmt) loop
!                Prim := Node (Prim_Elmt);
!                Append_Elmt (Prim, Full_List);
!                Next_Elmt (Prim_Elmt);
!             end loop;
!          end if;
!       end;
  
        --  Ada 2005 AI 161: Check preelaborable initialization consistency
  
*************** package body Sem_Ch3 is
*** 21199,21206 ****
           then
              Set_Subtype_Indication
                (Parent (Priv_Dep), New_Occurrence_Of (Full_T, Sloc (Priv_Dep)));
              Set_Etype (Priv_Dep, Full_T);
-             Set_Ekind (Priv_Dep, Subtype_Kind (Ekind (Full_T)));
              Set_Analyzed (Parent (Priv_Dep), False);
  
              --  Reanalyze the declaration, suppressing the call to Enter_Name
--- 21669,21679 ----
           then
              Set_Subtype_Indication
                (Parent (Priv_Dep), New_Occurrence_Of (Full_T, Sloc (Priv_Dep)));
+             Reinit_Field_To_Zero
+               (Priv_Dep, F_Private_Dependents,
+                Old_Ekind => E_Incomplete_Subtype);
+             Mutate_Ekind (Priv_Dep, Subtype_Kind (Ekind (Full_T)));
              Set_Etype (Priv_Dep, Full_T);
              Set_Analyzed (Parent (Priv_Dep), False);
  
              --  Reanalyze the declaration, suppressing the call to Enter_Name
*************** package body Sem_Ch3 is
*** 21238,21248 ****
     --------------------------------
  
     procedure Process_Range_Expr_In_Decl
!      (R            : Node_Id;
!       T            : Entity_Id;
!       Subtyp       : Entity_Id := Empty;
!       Check_List   : List_Id   := No_List;
!       R_Check_Off  : Boolean   := False)
     is
        Lo, Hi      : Node_Id;
        R_Checks    : Check_Result;
--- 21711,21720 ----
     --------------------------------
  
     procedure Process_Range_Expr_In_Decl
!      (R          : Node_Id;
!       T          : Entity_Id;
!       Subtyp     : Entity_Id := Empty;
!       Check_List : List_Id   := No_List)
     is
        Lo, Hi      : Node_Id;
        R_Checks    : Check_Result;
*************** package body Sem_Ch3 is
*** 21345,21493 ****
           --  represent the null range the Constraint_Error exception should
           --  not be raised.
  
!          --  ??? The following code should be cleaned up as follows
! 
!          --  1. The Is_Null_Range (Lo, Hi) test should disappear since it
!          --     is done in the call to Range_Check (R, T); below
! 
!          --  2. The use of R_Check_Off should be investigated and possibly
!          --     removed, this would clean up things a bit.
! 
!          if Is_Null_Range (Lo, Hi) then
!             null;
! 
!          else
!             --  Capture values of bounds and generate temporaries for them
!             --  if needed, before applying checks, since checks may cause
!             --  duplication of the expression without forcing evaluation.
! 
!             --  The forced evaluation removes side effects from expressions,
!             --  which should occur also in GNATprove mode. Otherwise, we end up
!             --  with unexpected insertions of actions at places where this is
!             --  not supposed to occur, e.g. on default parameters of a call.
! 
!             if Expander_Active or GNATprove_Mode then
! 
!                --  Call Force_Evaluation to create declarations as needed to
!                --  deal with side effects, and also create typ_FIRST/LAST
!                --  entities for bounds if we have a subtype name.
  
!                --  Note: we do this transformation even if expansion is not
!                --  active if we are in GNATprove_Mode since the transformation
!                --  is in general required to ensure that the resulting tree has
!                --  proper Ada semantics.
  
!                Force_Evaluation
!                  (Lo, Related_Id => Subtyp, Is_Low_Bound  => True);
!                Force_Evaluation
!                  (Hi, Related_Id => Subtyp, Is_High_Bound => True);
!             end if;
  
!             --  We use a flag here instead of suppressing checks on the type
!             --  because the type we check against isn't necessarily the place
!             --  where we put the check.
  
!             if not R_Check_Off then
!                R_Checks := Get_Range_Checks (R, T);
  
!                --  Look up tree to find an appropriate insertion point. We
!                --  can't just use insert_actions because later processing
!                --  depends on the insertion node. Prior to Ada 2012 the
!                --  insertion point could only be a declaration or a loop, but
!                --  quantified expressions can appear within any context in an
!                --  expression, and the insertion point can be any statement,
!                --  pragma, or declaration.
  
!                Insert_Node := Parent (R);
!                while Present (Insert_Node) loop
!                   exit when
!                     Nkind (Insert_Node) in N_Declaration
!                     and then
!                       Nkind (Insert_Node) not in N_Component_Declaration
!                                                | N_Loop_Parameter_Specification
!                                                | N_Function_Specification
!                                                | N_Procedure_Specification;
  
!                   exit when Nkind (Insert_Node) in
!                               N_Later_Decl_Item                     |
!                               N_Statement_Other_Than_Procedure_Call |
!                               N_Procedure_Call_Statement            |
!                               N_Pragma;
  
!                   Insert_Node := Parent (Insert_Node);
!                end loop;
  
!                --  Why would Type_Decl not be present???  Without this test,
!                --  short regression tests fail.
  
!                if Present (Insert_Node) then
  
!                   --  Case of loop statement. Verify that the range is part
!                   --  of the subtype indication of the iteration scheme.
  
!                   if Nkind (Insert_Node) = N_Loop_Statement then
!                      declare
!                         Indic : Node_Id;
  
!                      begin
!                         Indic := Parent (R);
!                         while Present (Indic)
!                           and then Nkind (Indic) /= N_Subtype_Indication
!                         loop
!                            Indic := Parent (Indic);
!                         end loop;
  
!                         if Present (Indic) then
!                            Def_Id := Etype (Subtype_Mark (Indic));
  
!                            Insert_Range_Checks
!                              (R_Checks,
!                               Insert_Node,
!                               Def_Id,
!                               Sloc (Insert_Node),
!                               Do_Before => True);
!                         end if;
!                      end;
  
!                   --  Case of declarations. If the declaration is for a type
!                   --  and involves discriminants, the checks are premature at
!                   --  the declaration point and need to wait for the expansion
!                   --  of the initialization procedure, which will pass in the
!                   --  list to put them on; otherwise, the checks are done at
!                   --  the declaration point and there is no need to do them
!                   --  again in the initialization procedure.
  
!                   elsif Nkind (Insert_Node) in N_Declaration then
!                      Def_Id := Defining_Identifier (Insert_Node);
  
!                      if (Ekind (Def_Id) = E_Record_Type
!                           and then Depends_On_Discriminant (R))
!                        or else
!                         (Ekind (Def_Id) = E_Protected_Type
!                           and then Has_Discriminants (Def_Id))
!                      then
!                         if Present (Check_List) then
!                            Append_Range_Checks
!                              (R_Checks,
!                                Check_List, Def_Id, Sloc (Insert_Node));
!                         end if;
  
!                      else
!                         if No (Check_List) then
!                            Insert_Range_Checks
!                              (R_Checks,
!                                Insert_Node, Def_Id, Sloc (Insert_Node));
!                         end if;
!                      end if;
  
!                   --  Case of statements. Drop the checks, as the range appears
!                   --  in the context of a quantified expression. Insertion will
!                   --  take place when expression is expanded.
  
!                   else
!                      null;
                    end if;
                 end if;
              end if;
           end if;
  
--- 21817,21946 ----
           --  represent the null range the Constraint_Error exception should
           --  not be raised.
  
!          --  Capture values of bounds and generate temporaries for them
!          --  if needed, before applying checks, since checks may cause
!          --  duplication of the expression without forcing evaluation.
  
!          --  The forced evaluation removes side effects from expressions,
!          --  which should occur also in GNATprove mode. Otherwise, we end up
!          --  with unexpected insertions of actions at places where this is
!          --  not supposed to occur, e.g. on default parameters of a call.
  
!          if Expander_Active or GNATprove_Mode then
  
!             --  Call Force_Evaluation to create declarations as needed
!             --  to deal with side effects, and also create typ_FIRST/LAST
!             --  entities for bounds if we have a subtype name.
  
!             --  Note: we do this transformation even if expansion is not
!             --  active if we are in GNATprove_Mode since the transformation
!             --  is in general required to ensure that the resulting tree has
!             --  proper Ada semantics.
  
!             Force_Evaluation
!               (Lo, Related_Id => Subtyp, Is_Low_Bound  => True);
!             Force_Evaluation
!               (Hi, Related_Id => Subtyp, Is_High_Bound => True);
!          end if;
  
!          --  We use a flag here instead of suppressing checks on the type
!          --  because the type we check against isn't necessarily the place
!          --  where we put the check.
  
!          R_Checks := Get_Range_Checks (R, T);
  
!          --  Look up tree to find an appropriate insertion point. We can't
!          --  just use insert_actions because later processing depends on
!          --  the insertion node. Prior to Ada 2012 the insertion point could
!          --  only be a declaration or a loop, but quantified expressions can
!          --  appear within any context in an expression, and the insertion
!          --  point can be any statement, pragma, or declaration.
  
!          Insert_Node := Parent (R);
!          while Present (Insert_Node) loop
!             exit when
!               Nkind (Insert_Node) in N_Declaration
!               and then
!                 Nkind (Insert_Node) not in N_Component_Declaration
!                                          | N_Loop_Parameter_Specification
!                                          | N_Function_Specification
!                                          | N_Procedure_Specification;
  
!             exit when Nkind (Insert_Node) in
!                         N_Later_Decl_Item                     |
!                         N_Statement_Other_Than_Procedure_Call |
!                         N_Procedure_Call_Statement            |
!                         N_Pragma;
  
!             Insert_Node := Parent (Insert_Node);
!          end loop;
  
!          if Present (Insert_Node) then
  
!             --  Case of loop statement. Verify that the range is part of the
!             --  subtype indication of the iteration scheme.
  
!             if Nkind (Insert_Node) = N_Loop_Statement then
!                declare
!                   Indic : Node_Id;
  
!                begin
!                   Indic := Parent (R);
!                   while Present (Indic)
!                     and then Nkind (Indic) /= N_Subtype_Indication
!                   loop
!                      Indic := Parent (Indic);
!                   end loop;
  
!                   if Present (Indic) then
!                      Def_Id := Etype (Subtype_Mark (Indic));
  
!                      Insert_Range_Checks
!                        (R_Checks,
!                         Insert_Node,
!                         Def_Id,
!                         Sloc (Insert_Node),
!                         Do_Before => True);
!                   end if;
!                end;
  
!             --  Case of declarations. If the declaration is for a type and
!             --  involves discriminants, the checks are premature at the
!             --  declaration point and need to wait for the expansion of the
!             --  initialization procedure, which will pass in the list to put
!             --  them on; otherwise, the checks are done at the declaration
!             --  point and there is no need to do them again in the
!             --  initialization procedure.
  
!             elsif Nkind (Insert_Node) in N_Declaration then
!                Def_Id := Defining_Identifier (Insert_Node);
  
!                if (Ekind (Def_Id) = E_Record_Type
!                     and then Depends_On_Discriminant (R))
!                  or else
!                   (Ekind (Def_Id) = E_Protected_Type
!                     and then Has_Discriminants (Def_Id))
!                then
!                   if Present (Check_List) then
!                      Append_Range_Checks
!                        (R_Checks,
!                          Check_List, Def_Id, Sloc (Insert_Node));
!                   end if;
  
!                else
!                   if No (Check_List) then
!                      Insert_Range_Checks
!                        (R_Checks,
!                          Insert_Node, Def_Id, Sloc (Insert_Node));
                    end if;
                 end if;
+ 
+             --  Case of statements. Drop the checks, as the range appears in
+             --  the context of a quantified expression. Insertion will take
+             --  place when expression is expanded.
+ 
+             else
+                null;
              end if;
           end if;
  
*************** package body Sem_Ch3 is
*** 21774,21780 ****
              --  Set Ekind of orphan itype, to prevent cascaded errors
  
              if Present (Def_Id) then
!                Set_Ekind (Def_Id, Ekind (Any_Type));
              end if;
  
              --  Make recursive call, having got rid of the bogus constraint
--- 22227,22233 ----
              --  Set Ekind of orphan itype, to prevent cascaded errors
  
              if Present (Def_Id) then
!                Mutate_Ekind (Def_Id, Ekind (Any_Type));
              end if;
  
              --  Make recursive call, having got rid of the bogus constraint
*************** package body Sem_Ch3 is
*** 21965,21973 ****
        --  These flags must be initialized before calling Process_Discriminants
        --  because this routine makes use of them.
  
!       Set_Ekind             (T, E_Record_Type);
        Set_Etype             (T, T);
!       Init_Size_Align       (T);
        Set_Interfaces        (T, No_Elist);
        Set_Stored_Constraint (T, No_Elist);
        Set_Default_SSO       (T);
--- 22418,22426 ----
        --  These flags must be initialized before calling Process_Discriminants
        --  because this routine makes use of them.
  
!       Mutate_Ekind          (T, E_Record_Type);
        Set_Etype             (T, T);
!       Reinit_Size_Align     (T);
        Set_Interfaces        (T, No_Elist);
        Set_Stored_Constraint (T, No_Elist);
        Set_Default_SSO       (T);
*************** package body Sem_Ch3 is
*** 22069,22082 ****
              Tag_Comp := Make_Defining_Identifier (Sloc (Def), Name_uTag);
              Enter_Name (Tag_Comp);
  
!             Set_Ekind                     (Tag_Comp, E_Component);
              Set_Is_Tag                    (Tag_Comp);
              Set_Is_Aliased                (Tag_Comp);
              Set_Is_Independent            (Tag_Comp);
              Set_Etype                     (Tag_Comp, RTE (RE_Tag));
              Set_DT_Entry_Count            (Tag_Comp, No_Uint);
              Set_Original_Record_Component (Tag_Comp, Tag_Comp);
!             Init_Component_Location       (Tag_Comp);
  
              --  Ada 2005 (AI-251): Addition of the Tag corresponding to all the
              --  implemented interfaces.
--- 22522,22535 ----
              Tag_Comp := Make_Defining_Identifier (Sloc (Def), Name_uTag);
              Enter_Name (Tag_Comp);
  
!             Mutate_Ekind                  (Tag_Comp, E_Component);
              Set_Is_Tag                    (Tag_Comp);
              Set_Is_Aliased                (Tag_Comp);
              Set_Is_Independent            (Tag_Comp);
              Set_Etype                     (Tag_Comp, RTE (RE_Tag));
              Set_DT_Entry_Count            (Tag_Comp, No_Uint);
              Set_Original_Record_Component (Tag_Comp, Tag_Comp);
!             Reinit_Component_Location     (Tag_Comp);
  
              --  Ada 2005 (AI-251): Addition of the Tag corresponding to all the
              --  implemented interfaces.
*************** package body Sem_Ch3 is
*** 22142,22151 ****
  
        Final_Storage_Only := not Is_Controlled (T);
  
!       --  Ada 2005: Check whether an explicit Limited is present in a derived
        --  type declaration.
  
!       if Nkind (Parent (Def)) = N_Derived_Type_Definition
          and then Limited_Present (Parent (Def))
        then
           Set_Is_Limited_Record (T);
--- 22595,22604 ----
  
        Final_Storage_Only := not Is_Controlled (T);
  
!       --  Ada 2005: Check whether an explicit "limited" is present in a derived
        --  type declaration.
  
!       if Parent_Kind (Def) = N_Derived_Type_Definition
          and then Limited_Present (Parent (Def))
        then
           Set_Is_Limited_Record (T);
*************** package body Sem_Ch3 is
*** 22179,22186 ****
           if Ekind (Component) = E_Void
             and then not Is_Itype (Component)
           then
!             Set_Ekind (Component, E_Component);
!             Init_Component_Location (Component);
           end if;
  
           Propagate_Concurrent_Flags (T, Etype (Component));
--- 22632,22639 ----
           if Ekind (Component) = E_Void
             and then not Is_Itype (Component)
           then
!             Mutate_Ekind (Component, E_Component);
!             Reinit_Component_Location (Component);
           end if;
  
           Propagate_Concurrent_Flags (T, Etype (Component));
*************** package body Sem_Ch3 is
*** 22400,22408 ****
        --  Reset the kind of the subtype during analysis of the range, to
        --  catch possible premature use in the bounds themselves.
  
!       Set_Ekind (Def_Id, E_Void);
        Process_Range_Expr_In_Decl (R, Subt, Subtyp => Def_Id);
!       Set_Ekind (Def_Id, Kind);
     end Set_Scalar_Range_For_Subtype;
  
     --------------------------------------------------------
--- 22853,22861 ----
        --  Reset the kind of the subtype during analysis of the range, to
        --  catch possible premature use in the bounds themselves.
  
!       Mutate_Ekind (Def_Id, E_Void);
        Process_Range_Expr_In_Decl (R, Subt, Subtyp => Def_Id);
!       Mutate_Ekind (Def_Id, Kind);
     end Set_Scalar_Range_For_Subtype;
  
     --------------------------------------------------------
*************** package body Sem_Ch3 is
*** 22425,22430 ****
--- 22878,22957 ----
        end if;
     end Set_Stored_Constraint_From_Discriminant_Constraint;
  
+    --------------------------
+    -- Should_Build_Subtype --
+    --------------------------
+ 
+    function Should_Build_Subtype (T : Entity_Id) return Boolean is
+ 
+       function Default_Discriminant_Values_Known_At_Compile_Time
+          (T : Entity_Id) return Boolean;
+          --  For an unconstrained type T, return False if the given type has a
+          --  discriminant with default value not known at compile time. Return
+          --  True otherwise.
+ 
+       ---------------------------------------------------------
+       -- Default_Discriminant_Values_Known_At_Compile_Time --
+       ---------------------------------------------------------
+ 
+       function Default_Discriminant_Values_Known_At_Compile_Time
+          (T : Entity_Id) return Boolean
+       is
+          Discr : Entity_Id;
+          DDV : Node_Id;
+ 
+       begin
+ 
+          --  If the type has no discriminant, we know them all at compile time
+ 
+          if not Has_Discriminants (T) then
+             return True;
+          end if;
+ 
+          --  The type has discriminants, check that none of them has a default
+          --  value not known at compile time.
+ 
+          Discr := First_Discriminant (T);
+ 
+          while Present (Discr) loop
+             DDV := Discriminant_Default_Value (Discr);
+ 
+             if Present (DDV) and then not Compile_Time_Known_Value (DDV) then
+                return False;
+             end if;
+ 
+             Next_Discriminant (Discr);
+          end loop;
+ 
+          return True;
+       end Default_Discriminant_Values_Known_At_Compile_Time;
+ 
+    --  Start of processing for Should_Build_Subtype
+ 
+    begin
+ 
+       if Is_Constrained (T) then
+ 
+          --  We won't build a new subtype if T is constrained
+ 
+          return False;
+       end if;
+ 
+       if not Default_Discriminant_Values_Known_At_Compile_Time (T) then
+ 
+          --  This is a special case of definite subtypes. To allocate a
+          --  specific size to the subtype, we need to know the value at compile
+          --  time. This might not be the case if the default value is the
+          --  result of a function. In that case, the object might be definite
+          --  and limited but the needed size might not be statically known or
+          --  too tricky to obtain. In that case, we will not build the subtype.
+ 
+          return False;
+       end if;
+ 
+       return Is_Definite_Subtype (T) and then Is_Limited_View (T);
+    end Should_Build_Subtype;
+ 
     -------------------------------------
     -- Signed_Integer_Type_Declaration --
     -------------------------------------
*************** package body Sem_Ch3 is
*** 22578,22584 ****
        Set_First_Rep_Item (Implicit_Base, First_Rep_Item (Base_Typ));
        Set_Scalar_Range   (Implicit_Base, Scalar_Range   (Base_Typ));
  
!       Set_Ekind              (T, E_Signed_Integer_Subtype);
        Set_Etype              (T, Implicit_Base);
        Set_Size_Info          (T, Implicit_Base);
        Inherit_Rep_Item_Chain (T, Implicit_Base);
--- 23105,23111 ----
        Set_First_Rep_Item (Implicit_Base, First_Rep_Item (Base_Typ));
        Set_Scalar_Range   (Implicit_Base, Scalar_Range   (Base_Typ));
  
!       Mutate_Ekind        (T, E_Signed_Integer_Subtype);
        Set_Etype              (T, Implicit_Base);
        Set_Size_Info          (T, Implicit_Base);
        Inherit_Rep_Item_Chain (T, Implicit_Base);
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch3.ads gcc-12.1.0/gcc/ada/sem_ch3.ads
*** gcc-11.3.0/gcc/ada/sem_ch3.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch3.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Ch3 is
*** 69,76 ****
     --  interface primitives with the tagged type primitives that cover them.
  
     procedure Analyze_Declarations (L : List_Id);
!    --  Called to analyze a list of declarations (in what context ???). Also
!    --  performs necessary freezing actions (more description needed ???)
  
     procedure Analyze_Interface_Declaration (T : Entity_Id; Def : Node_Id);
     --  Analyze an interface declaration or a formal interface declaration
--- 69,78 ----
     --  interface primitives with the tagged type primitives that cover them.
  
     procedure Analyze_Declarations (L : List_Id);
!    --  Called to analyze a list of declarations. Also performs necessary
!    --  freezing actions (such as freezing remaining unfrozen entities at
!    --  the end of declarative parts), resolves usage names in aspects, and
!    --  analyzes contracts that require delay until after freezing is done.
  
     procedure Analyze_Interface_Declaration (T : Entity_Id; Def : Node_Id);
     --  Analyze an interface declaration or a formal interface declaration
*************** package Sem_Ch3 is
*** 169,182 ****
       (Discriminant       : Entity_Id;
        Typ_For_Constraint : Entity_Id;
        Constraint         : Elist_Id) return Node_Id;
!    --  ??? MORE DOCUMENTATION
!    --  Given a discriminant somewhere in the Typ_For_Constraint tree and a
!    --  Constraint, return the value of that discriminant.
! 
!    function Is_Null_Extension (T : Entity_Id) return Boolean;
!    --  Returns True if the tagged type T has an N_Full_Type_Declaration that
!    --  is a null extension, meaning that it has an extension part without any
!    --  components and does not have a known discriminant part.
  
     function Is_Visible_Component
       (C : Entity_Id;
--- 171,180 ----
       (Discriminant       : Entity_Id;
        Typ_For_Constraint : Entity_Id;
        Constraint         : Elist_Id) return Node_Id;
!    --  Given a discriminant Discriminant occurring somewhere up the derivation
!    --  tree from Typ_For_Constraint and a Constraint, return the expression
!    --  corresponding to that discriminant in the constraint that specifies its
!    --  value.
  
     function Is_Visible_Component
       (C : Entity_Id;
*************** package Sem_Ch3 is
*** 259,269 ****
     --  Priv_T is the private view of the type whose full declaration is in N.
  
     procedure Process_Range_Expr_In_Decl
!      (R            : Node_Id;
!       T            : Entity_Id;
!       Subtyp       : Entity_Id := Empty;
!       Check_List   : List_Id   := No_List;
!       R_Check_Off  : Boolean   := False);
     --  Process a range expression that appears in a declaration context. The
     --  range is analyzed and resolved with the base type of the given type, and
     --  an appropriate check for expressions in non-static contexts made on the
--- 257,266 ----
     --  Priv_T is the private view of the type whose full declaration is in N.
  
     procedure Process_Range_Expr_In_Decl
!      (R          : Node_Id;
!       T          : Entity_Id;
!       Subtyp     : Entity_Id := Empty;
!       Check_List : List_Id   := No_List);
     --  Process a range expression that appears in a declaration context. The
     --  range is analyzed and resolved with the base type of the given type, and
     --  an appropriate check for expressions in non-static contexts made on the
*************** package Sem_Ch3 is
*** 273,280 ****
     --  pointer of R so that the types get properly frozen. Check_List is used
     --  when the subprogram is called from Build_Record_Init_Proc and is used to
     --  return a set of constraint checking statements generated by the Checks
!    --  package. R_Check_Off is set to True when the call to Range_Check is to
!    --  be skipped.
     --
     --  If Subtyp is given, then the range is for the named subtype Subtyp, and
     --  in this case the bounds are captured if necessary using this name.
--- 270,276 ----
     --  pointer of R so that the types get properly frozen. Check_List is used
     --  when the subprogram is called from Build_Record_Init_Proc and is used to
     --  return a set of constraint checking statements generated by the Checks
!    --  package.
     --
     --  If Subtyp is given, then the range is for the named subtype Subtyp, and
     --  in this case the bounds are captured if necessary using this name.
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch4.adb gcc-12.1.0/gcc/ada/sem_ch4.adb
*** gcc-11.3.0/gcc/ada/sem_ch4.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch4.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,66 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Exp_Util; use Exp_Util;
! with Itypes;   use Itypes;
! with Lib;      use Lib;
! with Lib.Xref; use Lib.Xref;
! with Namet;    use Namet;
! with Namet.Sp; use Namet.Sp;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Output;   use Output;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Case; use Sem_Case;
! with Sem_Cat;  use Sem_Cat;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Dim;  use Sem_Dim;
! with Sem_Disp; use Sem_Disp;
! with Sem_Dist; use Sem_Dist;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Type; use Sem_Type;
! with Sem_Util; use Sem_Util;
! with Sem_Warn; use Sem_Warn;
! with Stand;    use Stand;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
  
  package body Sem_Ch4 is
  
--- 23,70 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Util;       use Exp_Util;
! with Itypes;         use Itypes;
! with Lib;            use Lib;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Namet.Sp;       use Namet.Sp;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Output;         use Output;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Case;       use Sem_Case;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Dim;        use Sem_Dim;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
  
  package body Sem_Ch4 is
  
*************** package body Sem_Ch4 is
*** 235,242 ****
     --  operand types. If one of the operands has a universal interpretation,
     --  the legality check uses some compatible non-universal interpretation of
     --  the other operand. N can be an operator node, or a function call whose
!    --  name is an operator designator. Any_Access, which is the initial type of
!    --  the literal NULL, is a universal type for the purpose of this routine.
  
     function Find_Primitive_Operation (N : Node_Id) return Boolean;
     --  Find candidate interpretations for the name Obj.Proc when it appears in
--- 239,245 ----
     --  operand types. If one of the operands has a universal interpretation,
     --  the legality check uses some compatible non-universal interpretation of
     --  the other operand. N can be an operator node, or a function call whose
!    --  name is an operator designator.
  
     function Find_Primitive_Operation (N : Node_Id) return Boolean;
     --  Find candidate interpretations for the name Obj.Proc when it appears in
*************** package body Sem_Ch4 is
*** 277,282 ****
--- 280,298 ----
     --  type is not directly visible. The routine uses this type to emit a more
     --  informative message.
  
+    function Has_Possible_Literal_Aspects (N : Node_Id) return Boolean;
+    --  Ada_2022: if an operand is a literal it may be subject to an
+    --  implicit conversion to a type for which a user-defined literal
+    --  function exists. During the first pass of type resolution we do
+    --  not know the context imposed on the literal, so we assume that
+    --  the literal type is a valid candidate and rely on the second pass
+    --  of resolution to find the type with the proper aspect. We only
+    --  add this interpretation if no other one was found, which may be
+    --  too restrictive but seems sufficient to handle most proper uses
+    --  of the new aspect. It is unclear whether a full implementation of
+    --  these aspects can be achieved without larger modifications to the
+    --  two-pass resolution algorithm.
+ 
     procedure Remove_Abstract_Operations (N : Node_Id);
     --  Ada 2005: implementation of AI-310. An abstract non-dispatching
     --  operation is not a candidate interpretation.
*************** package body Sem_Ch4 is
*** 499,505 ****
              --  parameters. Note that this is now a static error even if the
              --  subprogram is not the main program (this is a change, in an
              --  earlier version only the main program was affected, and the
!             --  check had to be done in the binder.
  
              if Nkind (P) = N_Subprogram_Body
                and then Nkind (Parent (P)) = N_Compilation_Unit
--- 515,521 ----
              --  parameters. Note that this is now a static error even if the
              --  subprogram is not the main program (this is a change, in an
              --  earlier version only the main program was affected, and the
!             --  check had to be done in the binder).
  
              if Nkind (P) = N_Subprogram_Body
                and then Nkind (Parent (P)) = N_Compilation_Unit
*************** package body Sem_Ch4 is
*** 547,553 ****
           Find_Type (Subtype_Mark (E));
  
           --  Analyze the qualified expression, and apply the name resolution
!          --  rule given in  4.7(3).
  
           Analyze (E);
           Type_Id := Etype (E);
--- 563,569 ----
           Find_Type (Subtype_Mark (E));
  
           --  Analyze the qualified expression, and apply the name resolution
!          --  rule given in 4.7(3).
  
           Analyze (E);
           Type_Id := Etype (E);
*************** package body Sem_Ch4 is
*** 572,636 ****
        --  Case where allocator has a subtype indication
  
        else
!          declare
!             Def_Id   : Entity_Id;
!             Base_Typ : Entity_Id;
! 
!          begin
!             --  If the allocator includes a N_Subtype_Indication then a
!             --  constraint is present, otherwise the node is a subtype mark.
!             --  Introduce an explicit subtype declaration into the tree
!             --  defining some anonymous subtype and rewrite the allocator to
!             --  use this subtype rather than the subtype indication.
  
!             --  It is important to introduce the explicit subtype declaration
!             --  so that the bounds of the subtype indication are attached to
!             --  the tree in case the allocator is inside a generic unit.
  
!             --  Finally, if there is no subtype indication and the type is
!             --  a tagged unconstrained type with discriminants, the designated
!             --  object is constrained by their default values, and it is
!             --  simplest to introduce an explicit constraint now. In some cases
!             --  this is done during expansion, but freeze actions are certain
!             --  to be emitted in the proper order if constraint is explicit.
  
!             if Is_Entity_Name (E) and then Expander_Active then
!                Find_Type (E);
!                Type_Id := Entity (E);
  
!                if Is_Tagged_Type (Type_Id)
!                  and then Has_Discriminants (Type_Id)
!                  and then not Is_Constrained (Type_Id)
!                  and then
!                    Present
!                      (Discriminant_Default_Value
!                        (First_Discriminant (Type_Id)))
!                then
!                   declare
!                      Constr : constant List_Id    := New_List;
!                      Loc    : constant Source_Ptr := Sloc (E);
!                      Discr  : Entity_Id := First_Discriminant (Type_Id);
  
!                   begin
!                      if Present (Discriminant_Default_Value (Discr)) then
!                         while Present (Discr) loop
!                            Append (Discriminant_Default_Value (Discr), Constr);
!                            Next_Discriminant (Discr);
!                         end loop;
  
!                         Rewrite (E,
!                           Make_Subtype_Indication (Loc,
!                             Subtype_Mark => New_Occurrence_Of (Type_Id, Loc),
!                             Constraint   =>
!                               Make_Index_Or_Discriminant_Constraint (Loc,
!                                 Constraints => Constr)));
!                      end if;
!                   end;
!                end if;
              end if;
  
!             if Nkind (E) = N_Subtype_Indication then
  
                 --  A constraint is only allowed for a composite type in Ada
                 --  95. In Ada 83, a constraint is also allowed for an
                 --  access-to-composite type, but the constraint is ignored.
--- 588,645 ----
        --  Case where allocator has a subtype indication
  
        else
!          --  If the allocator includes a N_Subtype_Indication then a
!          --  constraint is present, otherwise the node is a subtype mark.
!          --  Introduce an explicit subtype declaration into the tree
!          --  defining some anonymous subtype and rewrite the allocator to
!          --  use this subtype rather than the subtype indication.
  
!          --  It is important to introduce the explicit subtype declaration
!          --  so that the bounds of the subtype indication are attached to
!          --  the tree in case the allocator is inside a generic unit.
  
!          --  Finally, if there is no subtype indication and the type is
!          --  a tagged unconstrained type with discriminants, the designated
!          --  object is constrained by their default values, and it is
!          --  simplest to introduce an explicit constraint now. In some cases
!          --  this is done during expansion, but freeze actions are certain
!          --  to be emitted in the proper order if constraint is explicit.
  
!          if Is_Entity_Name (E) and then Expander_Active then
!             Find_Type (E);
!             Type_Id := Entity (E);
  
!             if Is_Tagged_Type (Type_Id)
!               and then Has_Defaulted_Discriminants (Type_Id)
!               and then not Is_Constrained (Type_Id)
!             then
!                declare
!                   Constr : constant List_Id    := New_List;
!                   Loc    : constant Source_Ptr := Sloc (E);
!                   Discr  : Entity_Id := First_Discriminant (Type_Id);
  
!                begin
!                   while Present (Discr) loop
!                      Append (Discriminant_Default_Value (Discr), Constr);
!                      Next_Discriminant (Discr);
!                   end loop;
  
!                   Rewrite (E,
!                     Make_Subtype_Indication (Loc,
!                       Subtype_Mark => New_Occurrence_Of (Type_Id, Loc),
!                       Constraint   =>
!                         Make_Index_Or_Discriminant_Constraint (Loc,
!                           Constraints => Constr)));
!                end;
              end if;
+          end if;
  
!          if Nkind (E) = N_Subtype_Indication then
!             declare
!                Def_Id   : Entity_Id;
!                Base_Typ : Entity_Id;
  
+             begin
                 --  A constraint is only allowed for a composite type in Ada
                 --  95. In Ada 83, a constraint is also allowed for an
                 --  access-to-composite type, but the constraint is ignored.
*************** package body Sem_Ch4 is
*** 683,833 ****
                                 N_Index_Or_Discriminant_Constraint
                    then
                       Error_Msg_N -- CODEFIX
!                        ("if qualified expression was meant, "
!                         & "use apostrophe!", Constraint (E));
                    end if;
  
                    E := New_Occurrence_Of (Def_Id, Loc);
                    Rewrite (Expression (N), E);
                 end if;
!             end if;
  
!             Type_Id := Process_Subtype (E, N);
!             Acc_Type := Create_Itype (E_Allocator_Type, N);
!             Set_Etype (Acc_Type, Acc_Type);
!             Set_Directly_Designated_Type (Acc_Type, Type_Id);
!             Check_Fully_Declared (Type_Id, N);
  
!             --  Ada 2005 (AI-231): If the designated type is itself an access
!             --  type that excludes null, its default initialization will
!             --  be a null object, and we can insert an unconditional raise
!             --  before the allocator.
  
!             --  Ada 2012 (AI-104): A not null indication here is altogether
!             --  illegal.
  
!             if Can_Never_Be_Null (Type_Id) then
!                declare
!                   Not_Null_Check : constant Node_Id :=
!                                      Make_Raise_Constraint_Error (Sloc (E),
!                                        Reason => CE_Null_Not_Allowed);
  
!                begin
!                   if Expander_Active then
!                      Insert_Action (N, Not_Null_Check);
!                      Analyze (Not_Null_Check);
  
!                   elsif Warn_On_Ada_2012_Compatibility then
!                      Error_Msg_N
!                        ("null value not allowed here in Ada 2012?y?", E);
!                   end if;
!                end;
!             end if;
  
!             --  Check for missing initialization. Skip this check if we already
!             --  had errors on analyzing the allocator, since in that case these
!             --  are probably cascaded errors.
  
!             if not Is_Definite_Subtype (Type_Id)
!               and then Serious_Errors_Detected = Sav_Errs
              then
!                --  The build-in-place machinery may produce an allocator when
!                --  the designated type is indefinite but the underlying type is
!                --  not. In this case the unknown discriminants are meaningless
!                --  and should not trigger error messages. Check the parent node
!                --  because the allocator is marked as coming from source.
  
!                if Present (Underlying_Type (Type_Id))
!                  and then Is_Definite_Subtype (Underlying_Type (Type_Id))
!                  and then not Comes_From_Source (Parent (N))
!                then
!                   null;
  
!                --  An unusual case arises when the parent of a derived type is
!                --  a limited record extension  with unknown discriminants, and
!                --  its full view has no discriminants.
!                --
!                --  A more general fix might be to create the proper underlying
!                --  type for such a derived type, but it is a record type with
!                --  no private attributes, so this required extending the
!                --  meaning of this attribute. ???
  
!                elsif Ekind (Etype (Type_Id)) = E_Record_Type_With_Private
!                  and then Present (Underlying_Type (Etype (Type_Id)))
!                  and then
!                    not Has_Discriminants (Underlying_Type (Etype (Type_Id)))
!                  and then not Comes_From_Source (Parent (N))
                 then
!                   null;
  
!                elsif Is_Class_Wide_Type (Type_Id) then
!                   Error_Msg_N
!                     ("initialization required in class-wide allocation", N);
  
                 else
!                   if Ada_Version < Ada_2005
!                     and then Is_Limited_Type (Type_Id)
                    then
!                      Error_Msg_N ("unconstrained allocation not allowed", N);
  
                       if Is_Array_Type (Type_Id) then
                          Error_Msg_N
!                           ("\constraint with array bounds required", N);
  
                       elsif Has_Unknown_Discriminants (Type_Id) then
!                         null;
  
                       else pragma Assert (Has_Discriminants (Type_Id));
                          Error_Msg_N
!                           ("\constraint with discriminant values required", N);
!                      end if;
! 
!                   --  Limited Ada 2005 and general nonlimited case.
!                   --  This is an error, except in the case of an
!                   --  uninitialized allocator that is generated
!                   --  for a build-in-place function return of a
!                   --  discriminated but compile-time-known-size
!                   --  type.
! 
!                   else
!                      if Original_Node (N) /= N
!                        and then Nkind (Original_Node (N)) = N_Allocator
!                      then
!                         declare
!                            Qual : constant Node_Id :=
!                              Expression (Original_Node (N));
!                            pragma Assert
!                              (Nkind (Qual) = N_Qualified_Expression);
!                            Call : constant Node_Id := Expression (Qual);
!                            pragma Assert
!                              (Is_Expanded_Build_In_Place_Call (Call));
!                         begin
!                            null;
!                         end;
! 
!                      else
!                         Error_Msg_N
!                           ("uninitialized unconstrained allocation not "
!                            & "allowed", N);
! 
!                         if Is_Array_Type (Type_Id) then
!                            Error_Msg_N
!                              ("\qualified expression or constraint with "
!                               & "array bounds required", N);
! 
!                         elsif Has_Unknown_Discriminants (Type_Id) then
!                            Error_Msg_N ("\qualified expression required", N);
! 
!                         else pragma Assert (Has_Discriminants (Type_Id));
!                            Error_Msg_N
!                              ("\qualified expression or constraint with "
!                               & "discriminant values required", N);
!                         end if;
                       end if;
                    end if;
                 end if;
              end if;
!          end;
        end if;
  
        if Is_Abstract_Type (Type_Id) then
--- 692,842 ----
                                 N_Index_Or_Discriminant_Constraint
                    then
                       Error_Msg_N -- CODEFIX
!                        ("if qualified expression was meant, use apostrophe!",
!                         Constraint (E));
                    end if;
  
                    E := New_Occurrence_Of (Def_Id, Loc);
                    Rewrite (Expression (N), E);
                 end if;
!             end;
!          end if;
  
!          Type_Id := Process_Subtype (E, N);
!          Acc_Type := Create_Itype (E_Allocator_Type, N);
!          Set_Etype (Acc_Type, Acc_Type);
!          Set_Directly_Designated_Type (Acc_Type, Type_Id);
!          Check_Fully_Declared (Type_Id, N);
  
!          --  Ada 2005 (AI-231): If the designated type is itself an access
!          --  type that excludes null, its default initialization will
!          --  be a null object, and we can insert an unconditional raise
!          --  before the allocator.
  
!          --  Ada 2012 (AI-104): A not null indication here is altogether
!          --  illegal.
  
!          if Can_Never_Be_Null (Type_Id) then
!             declare
!                Not_Null_Check : constant Node_Id :=
!                                   Make_Raise_Constraint_Error (Sloc (E),
!                                     Reason => CE_Null_Not_Allowed);
  
!             begin
!                if Expander_Active then
!                   Insert_Action (N, Not_Null_Check);
!                   Analyze (Not_Null_Check);
  
!                elsif Warn_On_Ada_2012_Compatibility then
!                   Error_Msg_N
!                     ("null value not allowed here in Ada 2012?y?", E);
!                end if;
!             end;
!          end if;
  
!          --  Check for missing initialization. Skip this check if we already
!          --  had errors on analyzing the allocator, since in that case these
!          --  are probably cascaded errors.
  
!          if not Is_Definite_Subtype (Type_Id)
!            and then Serious_Errors_Detected = Sav_Errs
!          then
!             --  The build-in-place machinery may produce an allocator when
!             --  the designated type is indefinite but the underlying type is
!             --  not. In this case the unknown discriminants are meaningless
!             --  and should not trigger error messages. Check the parent node
!             --  because the allocator is marked as coming from source.
! 
!             if Present (Underlying_Type (Type_Id))
!               and then Is_Definite_Subtype (Underlying_Type (Type_Id))
!               and then not Comes_From_Source (Parent (N))
              then
!                null;
  
!             --  An unusual case arises when the parent of a derived type is
!             --  a limited record extension  with unknown discriminants, and
!             --  its full view has no discriminants.
!             --
!             --  A more general fix might be to create the proper underlying
!             --  type for such a derived type, but it is a record type with
!             --  no private attributes, so this required extending the
!             --  meaning of this attribute. ???
  
!             elsif Ekind (Etype (Type_Id)) = E_Record_Type_With_Private
!               and then Present (Underlying_Type (Etype (Type_Id)))
!               and then
!                 not Has_Discriminants (Underlying_Type (Etype (Type_Id)))
!               and then not Comes_From_Source (Parent (N))
!             then
!                null;
  
!             elsif Is_Class_Wide_Type (Type_Id) then
!                Error_Msg_N
!                  ("initialization required in class-wide allocation", N);
! 
!             else
!                if Ada_Version < Ada_2005
!                  and then Is_Limited_Type (Type_Id)
                 then
!                   Error_Msg_N ("unconstrained allocation not allowed", N);
  
!                   if Is_Array_Type (Type_Id) then
!                      Error_Msg_N
!                        ("\constraint with array bounds required", N);
! 
!                   elsif Has_Unknown_Discriminants (Type_Id) then
!                      null;
! 
!                   else pragma Assert (Has_Discriminants (Type_Id));
!                      Error_Msg_N
!                        ("\constraint with discriminant values required", N);
!                   end if;
! 
!                --  Limited Ada 2005 and general nonlimited case.
!                --  This is an error, except in the case of an
!                --  uninitialized allocator that is generated
!                --  for a build-in-place function return of a
!                --  discriminated but compile-time-known-size
!                --  type.
  
                 else
!                   if Original_Node (N) /= N
!                     and then Nkind (Original_Node (N)) = N_Allocator
                    then
!                      declare
!                         Qual : constant Node_Id :=
!                           Expression (Original_Node (N));
!                         pragma Assert
!                           (Nkind (Qual) = N_Qualified_Expression);
!                         Call : constant Node_Id := Expression (Qual);
!                         pragma Assert
!                           (Is_Expanded_Build_In_Place_Call (Call));
!                      begin
!                         null;
!                      end;
! 
!                   else
!                      Error_Msg_N
!                        ("uninitialized unconstrained allocation not "
!                         & "allowed", N);
  
                       if Is_Array_Type (Type_Id) then
                          Error_Msg_N
!                           ("\qualified expression or constraint with "
!                            & "array bounds required", N);
  
                       elsif Has_Unknown_Discriminants (Type_Id) then
!                         Error_Msg_N ("\qualified expression required", N);
  
                       else pragma Assert (Has_Discriminants (Type_Id));
                          Error_Msg_N
!                           ("\qualified expression or constraint with "
!                            & "discriminant values required", N);
                       end if;
                    end if;
                 end if;
              end if;
!          end if;
        end if;
  
        if Is_Abstract_Type (Type_Id) then
*************** package body Sem_Ch4 is
*** 1467,1474 ****
           else
              Remove_Abstract_Operations (N);
           end if;
- 
-          End_Interp_List;
        end if;
  
        --  Check the accessibility level for actuals for explicitly aliased
--- 1476,1481 ----
*************** package body Sem_Ch4 is
*** 1489,1495 ****
              while Present (Form) and then Present (Act) loop
                 --  Check whether the formal is aliased and if the accessibility
                 --  level of the actual is deeper than the accessibility level
!                --  of the enclosing subprogam to which the current return
                 --  statement applies.
  
                 --  Should we be checking Is_Entity_Name on Act? Won't this miss
--- 1496,1502 ----
              while Present (Form) and then Present (Act) loop
                 --  Check whether the formal is aliased and if the accessibility
                 --  level of the actual is deeper than the accessibility level
!                --  of the enclosing subprogram to which the current return
                 --  statement applies.
  
                 --  Should we be checking Is_Entity_Name on Act? Won't this miss
*************** package body Sem_Ch4 is
*** 1628,1637 ****
     --  Start of processing for Analyze_Case_Expression
  
     begin
-       if Comes_From_Source (N) then
-          Check_Compiler_Unit ("case expression", N);
-       end if;
- 
        Analyze_And_Resolve (Expr, Any_Discrete);
        Check_Unset_Reference (Expr);
        Exp_Type := Etype (Expr);
--- 1635,1640 ----
*************** package body Sem_Ch4 is
*** 2278,2286 ****
     procedure Analyze_Expression_With_Actions (N : Node_Id) is
  
        procedure Check_Action_OK (A : Node_Id);
!       --  Check that the action is something that is allows as a declare_item
!       --  of a declare_expression, except the checks are suppressed for
!       --  generated code.
  
        procedure Check_Action_OK (A : Node_Id) is
        begin
--- 2281,2292 ----
     procedure Analyze_Expression_With_Actions (N : Node_Id) is
  
        procedure Check_Action_OK (A : Node_Id);
!       --  Check that the action A is allowed as a declare_item of a declare
!       --  expression if N and A come from source.
! 
!       ---------------------
!       -- Check_Action_OK --
!       ---------------------
  
        procedure Check_Action_OK (A : Node_Id) is
        begin
*************** package body Sem_Ch4 is
*** 2324,2330 ****
           Error_Msg_N ("object renaming or constant declaration expected", A);
        end Check_Action_OK;
  
!       A : Node_Id;
        EWA_Scop : Entity_Id;
  
     --  Start of processing for Analyze_Expression_With_Actions
--- 2330,2336 ----
           Error_Msg_N ("object renaming or constant declaration expected", A);
        end Check_Action_OK;
  
!       A        : Node_Id;
        EWA_Scop : Entity_Id;
  
     --  Start of processing for Analyze_Expression_With_Actions
*************** package body Sem_Ch4 is
*** 2389,2398 ****
  
        Else_Expr := Next (Then_Expr);
  
-       if Comes_From_Source (N) then
-          Check_Compiler_Unit ("if expression", N);
-       end if;
- 
        --  Analyze and resolve the condition. We need to resolve this now so
        --  that it gets folded to True/False if possible, before we analyze
        --  the THEN/ELSE branches, because when analyzing these branches, we
--- 2395,2400 ----
*************** package body Sem_Ch4 is
*** 2535,2540 ****
--- 2537,2543 ----
                and then Is_Entity_Name (Actual)
                and then Is_Type (Entity (Actual))
                and then Is_Discrete_Type (Entity (Actual))
+               and then not Is_Current_Instance (Actual)
              then
                 Replace (N,
                   Make_Slice (Loc,
*************** package body Sem_Ch4 is
*** 2793,2800 ****
              Error_Msg_N ("no legal interpretation for indexed component", N);
              Set_Is_Overloaded (N, False);
           end if;
- 
-          End_Interp_List;
        end Process_Overloaded_Indexed_Component;
  
     --  Start of processing for Analyze_Indexed_Component_Form
--- 2796,2801 ----
*************** package body Sem_Ch4 is
*** 2959,3005 ****
        I_F   : Interp_Index;
        T_F   : Entity_Id;
  
        procedure Try_One_Interp (T1 : Entity_Id);
        --  Routine to try one proposed interpretation. Note that the context
        --  of the operation plays no role in resolving the arguments, so that
        --  if there is more than one interpretation of the operands that is
        --  compatible with a membership test, the operation is ambiguous.
  
-       --------------------
-       -- Try_One_Interp --
-       --------------------
- 
-       procedure Try_One_Interp (T1 : Entity_Id) is
-       begin
-          if Has_Compatible_Type (R, T1) then
-             if Found
-               and then Base_Type (T1) /= Base_Type (T_F)
-             then
-                It := Disambiguate (L, I_F, Index, Any_Type);
- 
-                if It = No_Interp then
-                   Ambiguous_Operands (N);
-                   Set_Etype (L, Any_Type);
-                   return;
- 
-                else
-                   T_F := It.Typ;
-                end if;
- 
-             else
-                Found := True;
-                T_F   := T1;
-                I_F   := Index;
-             end if;
- 
-             Set_Etype (L, T_F);
-          end if;
-       end Try_One_Interp;
- 
-       procedure Analyze_Set_Membership;
-       --  If a set of alternatives is present, analyze each and find the
-       --  common type to which they must all resolve.
- 
        ----------------------------
        -- Analyze_Set_Membership --
        ----------------------------
--- 2960,2979 ----
        I_F   : Interp_Index;
        T_F   : Entity_Id;
  
+       procedure Analyze_Set_Membership;
+       --  If a set of alternatives is present, analyze each and find the
+       --  common type to which they must all resolve.
+ 
+       procedure Find_Interpretation;
+       function Find_Interpretation return Boolean;
+       --  Routine and wrapper to find a matching interpretation
+ 
        procedure Try_One_Interp (T1 : Entity_Id);
        --  Routine to try one proposed interpretation. Note that the context
        --  of the operation plays no role in resolving the arguments, so that
        --  if there is more than one interpretation of the operands that is
        --  compatible with a membership test, the operation is ambiguous.
  
        ----------------------------
        -- Analyze_Set_Membership --
        ----------------------------
*************** package body Sem_Ch4 is
*** 3012,3021 ****
           Common_Type       : Entity_Id := Empty;
  
        begin
-          if Comes_From_Source (N) then
-             Check_Compiler_Unit ("set membership", N);
-          end if;
- 
           Analyze (L);
           Candidate_Interps := L;
  
--- 2986,2991 ----
*************** package body Sem_Ch4 is
*** 3098,3103 ****
--- 3068,3129 ----
           end if;
        end Analyze_Set_Membership;
  
+       -------------------------
+       -- Find_Interpretation --
+       -------------------------
+ 
+       procedure Find_Interpretation is
+       begin
+          if not Is_Overloaded (L) then
+             Try_One_Interp (Etype (L));
+ 
+          else
+             Get_First_Interp (L, Index, It);
+             while Present (It.Typ) loop
+                Try_One_Interp (It.Typ);
+                Get_Next_Interp (Index, It);
+             end loop;
+          end if;
+       end Find_Interpretation;
+ 
+       function Find_Interpretation return Boolean is
+       begin
+          Find_Interpretation;
+ 
+          return Found;
+       end Find_Interpretation;
+ 
+       --------------------
+       -- Try_One_Interp --
+       --------------------
+ 
+       procedure Try_One_Interp (T1 : Entity_Id) is
+       begin
+          if Has_Compatible_Type (R, T1, For_Comparison => True) then
+             if Found
+               and then Base_Type (T1) /= Base_Type (T_F)
+             then
+                It := Disambiguate (L, I_F, Index, Any_Type);
+ 
+                if It = No_Interp then
+                   Ambiguous_Operands (N);
+                   Set_Etype (L, Any_Type);
+                   return;
+ 
+                else
+                   T_F := It.Typ;
+                end if;
+ 
+             else
+                Found := True;
+                T_F   := T1;
+                I_F   := Index;
+             end if;
+ 
+             Set_Etype (L, T_F);
+          end if;
+       end Try_One_Interp;
+ 
        Op : Node_Id;
  
     --  Start of processing for Analyze_Membership_Op
*************** package body Sem_Ch4 is
*** 3118,3133 ****
        then
           Analyze (R);
  
!          if not Is_Overloaded (L) then
!             Try_One_Interp (Etype (L));
! 
!          else
!             Get_First_Interp (L, Index, It);
!             while Present (It.Typ) loop
!                Try_One_Interp (It.Typ);
!                Get_Next_Interp (Index, It);
!             end loop;
!          end if;
  
        --  If not a range, it can be a subtype mark, or else it is a degenerate
        --  membership test with a singleton value, i.e. a test for equality,
--- 3144,3150 ----
        then
           Analyze (R);
  
!          Find_Interpretation;
  
        --  If not a range, it can be a subtype mark, or else it is a degenerate
        --  membership test with a singleton value, i.e. a test for equality,
*************** package body Sem_Ch4 is
*** 3136,3154 ****
        else
           Analyze (R);
  
!          if Is_Entity_Name (R)
!            and then Is_Type (Entity (R))
!          then
              Find_Type (R);
              Check_Fully_Declared (Entity (R), R);
  
!          elsif Ada_Version >= Ada_2012
!            and then Has_Compatible_Type (R, Etype (L))
!          then
              if Nkind (N) = N_In then
!                Op := Make_Op_Eq (Loc, Left_Opnd  => L, Right_Opnd => R);
              else
!                Op := Make_Op_Ne (Loc, Left_Opnd  => L, Right_Opnd => R);
              end if;
  
              if Is_Record_Or_Limited_Type (Etype (L)) then
--- 3153,3167 ----
        else
           Analyze (R);
  
!          if Is_Entity_Name (R) and then Is_Type (Entity (R)) then
              Find_Type (R);
              Check_Fully_Declared (Entity (R), R);
  
!          elsif Ada_Version >= Ada_2012 and then Find_Interpretation then
              if Nkind (N) = N_In then
!                Op := Make_Op_Eq (Loc, Left_Opnd => L, Right_Opnd => R);
              else
!                Op := Make_Op_Ne (Loc, Left_Opnd => L, Right_Opnd => R);
              end if;
  
              if Is_Record_Or_Limited_Type (Etype (L)) then
*************** package body Sem_Ch4 is
*** 3207,3213 ****
          and then Intval (Right_Opnd (Parent (N))) <= Uint_128
        then
           Error_Msg_N
!            ("suspicious MOD value, was '*'* intended'??M?", Parent (N));
        end if;
  
        --  Remaining processing is same as for other arithmetic operators
--- 3220,3226 ----
          and then Intval (Right_Opnd (Parent (N))) <= Uint_128
        then
           Error_Msg_N
!            ("suspicious MOD value, was '*'* intended'??.m?", Parent (N));
        end if;
  
        --  Remaining processing is same as for other arithmetic operators
*************** package body Sem_Ch4 is
*** 3258,3264 ****
  
     procedure Analyze_Null (N : Node_Id) is
     begin
!       Set_Etype (N, Any_Access);
     end Analyze_Null;
  
     ----------------------
--- 3271,3277 ----
  
     procedure Analyze_Null (N : Node_Id) is
     begin
!       Set_Etype (N, Universal_Access);
     end Analyze_Null;
  
     ----------------------
*************** package body Sem_Ch4 is
*** 3713,3718 ****
--- 3726,3749 ----
                    Next_Actual (Actual);
                    Next_Formal (Formal);
  
+                --  A current instance used as an actual of a function,
+                --  whose body has not been seen, may include a formal
+                --  whose type is an incomplete view of an enclosing
+                --  type declaration containing the current call (e.g.
+                --  in the Expression for a component declaration).
+ 
+                --  In this case, update the signature of the subprogram
+                --  so the formal has the type of the full view.
+ 
+                elsif Inside_Init_Proc
+                  and then Nkind (Actual) = N_Identifier
+                  and then Ekind (Etype (Formal)) = E_Incomplete_Type
+                  and then Etype (Actual) = Full_View (Etype (Formal))
+                then
+                   Set_Etype (Formal, Etype (Actual));
+                   Next_Actual (Actual);
+                   Next_Formal (Formal);
+ 
                 --  Handle failed type check
  
                 else
*************** package body Sem_Ch4 is
*** 4277,4297 ****
           Loop_Id := Defining_Identifier (Loop_Parameter_Specification (N));
        end if;
  
!       if Warn_On_Suspicious_Contract
!         and then not Referenced (Loop_Id, Cond)
!         and then not Is_Internal_Name (Chars (Loop_Id))
!       then
!          --  Generating C, this check causes spurious warnings on inlined
!          --  postconditions; we can safely disable it because this check
!          --  was previously performed when analyzing the internally built
!          --  postconditions procedure.
  
!          if Modify_Tree_For_C and then In_Inlined_Body then
!             null;
!          else
!             Error_Msg_N ("?T?unused variable &", Loop_Id);
           end if;
!       end if;
  
        --  Diagnose a possible misuse of the SOME existential quantifier. When
        --  we have a quantified expression of the form:
--- 4308,4374 ----
           Loop_Id := Defining_Identifier (Loop_Parameter_Specification (N));
        end if;
  
!       declare
!          type Subexpr_Kind is (Full, Conjunct, Disjunct);
  
!          procedure Check_Subexpr (Expr : Node_Id; Kind : Subexpr_Kind);
!          --  Check that the quantified variable appears in every sub-expression
!          --  of the quantified expression. If Kind is Full, Expr is the full
!          --  expression. If Kind is Conjunct (resp. Disjunct), Expr is a
!          --  conjunct (resp. disjunct) of the full expression.
! 
!          -------------------
!          -- Check_Subexpr --
!          -------------------
! 
!          procedure Check_Subexpr (Expr : Node_Id; Kind : Subexpr_Kind) is
!          begin
!             if Nkind (Expr) in N_Op_And | N_And_Then
!               and then Kind /= Disjunct
!             then
!                Check_Subexpr (Left_Opnd (Expr), Conjunct);
!                Check_Subexpr (Right_Opnd (Expr), Conjunct);
! 
!             elsif Nkind (Expr) in N_Op_Or | N_Or_Else
!               and then Kind /= Conjunct
!             then
!                Check_Subexpr (Left_Opnd (Expr), Disjunct);
!                Check_Subexpr (Right_Opnd (Expr), Disjunct);
! 
!             elsif Kind /= Full
!               and then not Referenced (Loop_Id, Expr)
!             then
!                declare
!                   Sub : constant String :=
!                     (if Kind = Conjunct then "conjunct" else "disjunct");
!                begin
!                   Error_Msg_NE
!                     ("?.t?unused variable & in " & Sub, Expr, Loop_Id);
!                   Error_Msg_NE
!                     ("\consider extracting " & Sub & " from quantified "
!                      & "expression", Expr, Loop_Id);
!                end;
!             end if;
!          end Check_Subexpr;
! 
!       begin
!          if Warn_On_Suspicious_Contract
!            and then not Is_Internal_Name (Chars (Loop_Id))
! 
!            --  Generating C, this check causes spurious warnings on inlined
!            --  postconditions; we can safely disable it because this check
!            --  was previously performed when analyzing the internally built
!            --  postconditions procedure.
! 
!            and then not (Modify_Tree_For_C and In_Inlined_Body)
!          then
!             if not Referenced (Loop_Id, Cond) then
!                Error_Msg_N ("?.t?unused variable &", Loop_Id);
!             else
!                Check_Subexpr (Cond, Kind => Full);
!             end if;
           end if;
!       end;
  
        --  Diagnose a possible misuse of the SOME existential quantifier. When
        --  we have a quantified expression of the form:
*************** package body Sem_Ch4 is
*** 4307,4313 ****
          and then Nkind (Cond) = N_If_Expression
          and then No_Else_Or_Trivial_True (Cond)
        then
!          Error_Msg_N ("?T?suspicious expression", N);
           Error_Msg_N ("\\did you mean (for all X ='> (if P then Q))", N);
           Error_Msg_N ("\\or (for some X ='> P and then Q) instead'?", N);
        end if;
--- 4384,4390 ----
          and then Nkind (Cond) = N_If_Expression
          and then No_Else_Or_Trivial_True (Cond)
        then
!          Error_Msg_N ("?.t?suspicious expression", N);
           Error_Msg_N ("\\did you mean (for all X ='> (if P then Q))", N);
           Error_Msg_N ("\\or (for some X ='> P and then Q) instead'?", N);
        end if;
*************** package body Sem_Ch4 is
*** 4345,4352 ****
                or else
              Covers (T1 => T2, T2 => T1)
           then
!             if T1 = Universal_Integer
!               or else T1 = Universal_Real
                or else T1 = Any_Character
              then
                 Add_One_Interp (N, Base_Type (T2), Base_Type (T2));
--- 4422,4428 ----
                or else
              Covers (T1 => T2, T2 => T1)
           then
!             if Is_Universal_Numeric_Type (T1)
                or else T1 = Any_Character
              then
                 Add_One_Interp (N, Base_Type (T2), Base_Type (T2));
*************** package body Sem_Ch4 is
*** 4416,4422 ****
           --  If result is Any_Type, then we did not find a compatible pair
  
           if Etype (N) = Any_Type then
!             Error_Msg_N ("incompatible types in range ", N);
           end if;
        end if;
  
--- 4492,4498 ----
           --  If result is Any_Type, then we did not find a compatible pair
  
           if Etype (N) = Any_Type then
!             Error_Msg_N ("incompatible types in range", N);
           end if;
        end if;
  
*************** package body Sem_Ch4 is
*** 5006,5013 ****
           --  Ada 2005 (AI05-0030): In the case of dispatching requeue, the
           --  selected component should resolve to a name.
  
           if Ada_Version >= Ada_2005
!            and then Is_Tagged_Type (Prefix_Type)
             and then not Is_Concurrent_Type (Prefix_Type)
           then
              if Nkind (Parent (N)) = N_Generic_Association
--- 5082,5092 ----
           --  Ada 2005 (AI05-0030): In the case of dispatching requeue, the
           --  selected component should resolve to a name.
  
+          --  Extension feature: Also support calls with prefixed views for
+          --  untagged record types.
+ 
           if Ada_Version >= Ada_2005
!            and then (Is_Tagged_Type (Prefix_Type) or else Extensions_Allowed)
             and then not Is_Concurrent_Type (Prefix_Type)
           then
              if Nkind (Parent (N)) = N_Generic_Association
*************** package body Sem_Ch4 is
*** 5080,5085 ****
--- 5159,5173 ----
              Next_Entity (Comp);
           end loop;
  
+          --  Extension feature: Also support calls with prefixed views for
+          --  untagged private types.
+ 
+          if Extensions_Allowed then
+             if Try_Object_Operation (N) then
+                return;
+             end if;
+          end if;
+ 
        elsif Is_Concurrent_Type (Prefix_Type) then
  
           --  Find visible operation with given name. For a protected type,
*************** package body Sem_Ch4 is
*** 5299,5305 ****
                    Set_Parent (Par, Parent (Parent (N)));
  
                    if Try_Object_Operation
!                        (Sinfo.Name (Par), CW_Test_Only => True)
                    then
                       return;
                    end if;
--- 5387,5393 ----
                    Set_Parent (Par, Parent (Parent (N)));
  
                    if Try_Object_Operation
!                        (Sinfo.Nodes.Name (Par), CW_Test_Only => True)
                    then
                       return;
                    end if;
*************** package body Sem_Ch4 is
*** 5332,5337 ****
--- 5420,5433 ----
  
           Set_Is_Overloaded (N, Is_Overloaded (Sel));
  
+       --  Extension feature: Also support calls with prefixed views for
+       --  untagged types.
+ 
+       elsif Extensions_Allowed
+         and then Try_Object_Operation (N)
+       then
+          return;
+ 
        else
           --  Invalid prefix
  
*************** package body Sem_Ch4 is
*** 5455,5463 ****
                       Apply_Compile_Time_Constraint_Error
                         (N, "component not present in }??",
                          CE_Discriminant_Check_Failed,
!                         Ent => Prefix_Type);
! 
!                      Set_Raises_Constraint_Error (N);
                       return;
                    end if;
  
--- 5551,5559 ----
                       Apply_Compile_Time_Constraint_Error
                         (N, "component not present in }??",
                          CE_Discriminant_Check_Failed,
!                         Ent          => Prefix_Type,
!                         Emit_Message =>
!                           SPARK_Mode = On or not In_Instance_Not_Visible);
                       return;
                    end if;
  
*************** package body Sem_Ch4 is
*** 5818,5831 ****
        begin
           --  Verify that Op_Id is a visible binary function. Note that since
           --  we know Op_Id is overloaded, potentially use visible means use
!          --  visible for sure (RM 9.4(11)).
  
           if Ekind (Op_Id) = E_Function
             and then Present (F2)
             and then (Is_Immediately_Visible (Op_Id)
                        or else Is_Potentially_Use_Visible (Op_Id))
!            and then Has_Compatible_Type (Left_Opnd (N), Etype (F1))
!            and then Has_Compatible_Type (Right_Opnd (N), Etype (F2))
           then
              Add_One_Interp (N, Op_Id, Etype (Op_Id));
  
--- 5914,5929 ----
        begin
           --  Verify that Op_Id is a visible binary function. Note that since
           --  we know Op_Id is overloaded, potentially use visible means use
!          --  visible for sure (RM 9.4(11)). Be prepared for previous errors.
  
           if Ekind (Op_Id) = E_Function
             and then Present (F2)
             and then (Is_Immediately_Visible (Op_Id)
                        or else Is_Potentially_Use_Visible (Op_Id))
!            and then (Has_Compatible_Type (Left_Opnd (N), Etype (F1))
!                       or else Etype (F1) = Any_Type)
!            and then (Has_Compatible_Type (Right_Opnd (N), Etype (F2))
!                       or else Etype (F2) = Any_Type)
           then
              Add_One_Interp (N, Op_Id, Etype (Op_Id));
  
*************** package body Sem_Ch4 is
*** 5972,5978 ****
  
        function Specific_Type (T1, T2 : Entity_Id) return Entity_Id is
        begin
!          if T1 = Universal_Integer or else T1 = Universal_Real then
              return Base_Type (T2);
           else
              return Base_Type (T1);
--- 6070,6076 ----
  
        function Specific_Type (T1, T2 : Entity_Id) return Entity_Id is
        begin
!          if Is_Universal_Numeric_Type (T1) then
              return Base_Type (T2);
           else
              return Base_Type (T1);
*************** package body Sem_Ch4 is
*** 6512,6518 ****
              return;
           end if;
  
!          if Valid_Comparison_Arg (T1) and then Has_Compatible_Type (R, T1) then
              if Found and then Base_Type (T1) /= Base_Type (T_F) then
                 It := Disambiguate (L, I_F, Index, Any_Type);
  
--- 6610,6618 ----
              return;
           end if;
  
!          if Valid_Comparison_Arg (T1)
!            and then Has_Compatible_Type (R, T1, For_Comparison => True)
!          then
              if Found and then Base_Type (T1) /= Base_Type (T_F) then
                 It := Disambiguate (L, I_F, Index, Any_Type);
  
*************** package body Sem_Ch4 is
*** 6588,6601 ****
        It    : Interp;
  
     begin
!       if T1 = Universal_Integer or else T1 = Universal_Real
  
!         --  If the left operand of an equality operator is null, the visibility
!         --  of the operator must be determined from the interpretation of the
!         --  right operand. This processing must be done for Any_Access, which
!         --  is the internal representation of the type of the literal null.
  
!         or else T1 = Any_Access
        then
           if not Is_Overloaded (R) then
              Add_One_Interp (N, Op_Id, Standard_Boolean, Base_Type (Etype (R)));
--- 6688,6702 ----
        It    : Interp;
  
     begin
!       --  Defend against previous error
  
!       if Nkind (R) = N_Error then
!          return;
!       end if;
  
!       if T1 = Universal_Integer
!         or else T1 = Universal_Real
!         or else T1 = Universal_Access
        then
           if not Is_Overloaded (R) then
              Add_One_Interp (N, Op_Id, Standard_Boolean, Base_Type (Etype (R)));
*************** package body Sem_Ch4 is
*** 6610,6616 ****
                 Get_Next_Interp (Index, It);
              end loop;
           end if;
!       else
           Add_One_Interp (N, Op_Id, Standard_Boolean, Base_Type (T1));
        end if;
     end Find_Non_Universal_Interpretations;
--- 6711,6718 ----
                 Get_Next_Interp (Index, It);
              end loop;
           end if;
! 
!       elsif Has_Compatible_Type (R, T1) or else Covers (Etype (R), T1) then
           Add_One_Interp (N, Op_Id, Standard_Boolean, Base_Type (T1));
        end if;
     end Find_Non_Universal_Interpretations;
*************** package body Sem_Ch4 is
*** 6679,6685 ****
        --  operator.
        --  This is because the expected type for Obj'Access in a call to
        --  the Standard."=" operator whose formals are of type
!       --  Universal_Access is Universal_Integer, and Universal_Access
        --  doesn't have a designated type. For more detail see RM 6.4.1(3)
        --  and 3.10.2.
        --  This procedure assumes that the context is a universal_access.
--- 6781,6787 ----
        --  operator.
        --  This is because the expected type for Obj'Access in a call to
        --  the Standard."=" operator whose formals are of type
!       --  Universal_Access is Universal_Access, and Universal_Access
        --  doesn't have a designated type. For more detail see RM 6.4.1(3)
        --  and 3.10.2.
        --  This procedure assumes that the context is a universal_access.
*************** package body Sem_Ch4 is
*** 6901,6907 ****
        --------------------
  
        procedure Try_One_Interp (T1 : Entity_Id) is
!          Universal_Access : Boolean;
           Bas              : Entity_Id;
  
        begin
--- 7003,7009 ----
        --------------------
  
        procedure Try_One_Interp (T1 : Entity_Id) is
!          Anonymous_Access : Boolean;
           Bas              : Entity_Id;
  
        begin
*************** package body Sem_Ch4 is
*** 6922,6928 ****
           --  In Ada 2005, the equality operator for anonymous access types
           --  is declared in Standard, and preference rules apply to it.
  
!          Universal_Access := Is_Anonymous_Access_Type (T1)
             or else References_Anonymous_Access_Type (R, T1);
  
           if Present (Scop) then
--- 7024,7030 ----
           --  In Ada 2005, the equality operator for anonymous access types
           --  is declared in Standard, and preference rules apply to it.
  
!          Anonymous_Access := Is_Anonymous_Access_Type (T1)
             or else References_Anonymous_Access_Type (R, T1);
  
           if Present (Scop) then
*************** package body Sem_Ch4 is
*** 6937,6943 ****
                or else In_Instance
                or else T1 = Universal_Integer
                or else T1 = Universal_Real
!               or else T1 = Any_Access
                or else T1 = Any_String
                or else T1 = Any_Composite
                or else (Ekind (T1) = E_Access_Subprogram_Type
--- 7039,7045 ----
                or else In_Instance
                or else T1 = Universal_Integer
                or else T1 = Universal_Real
!               or else T1 = Universal_Access
                or else T1 = Any_String
                or else T1 = Any_Composite
                or else (Ekind (T1) = E_Access_Subprogram_Type
*************** package body Sem_Ch4 is
*** 6945,6951 ****
              then
                 null;
  
!             elsif Scop /= Standard_Standard or else not Universal_Access then
  
                 --  The scope does not contain an operator for the type
  
--- 7047,7053 ----
              then
                 null;
  
!             elsif Scop /= Standard_Standard or else not Anonymous_Access then
  
                 --  The scope does not contain an operator for the type
  
*************** package body Sem_Ch4 is
*** 6966,6972 ****
           then
              null;
  
!          elsif not Universal_Access then
              --  Save candidate type for subsequent error message, if any
  
              if not Is_Limited_Type (T1) then
--- 7068,7074 ----
           then
              null;
  
!          elsif not Anonymous_Access then
              --  Save candidate type for subsequent error message, if any
  
              if not Is_Limited_Type (T1) then
*************** package body Sem_Ch4 is
*** 6979,6985 ****
           --  Ada 2005 (AI-230): Keep restriction imposed by Ada 83 and 95:
           --  Do not allow anonymous access types in equality operators.
  
!          if Ada_Version < Ada_2005 and then Universal_Access then
              return;
           end if;
  
--- 7081,7087 ----
           --  Ada 2005 (AI-230): Keep restriction imposed by Ada 83 and 95:
           --  Do not allow anonymous access types in equality operators.
  
!          if Ada_Version < Ada_2005 and then Anonymous_Access then
              return;
           end if;
  
*************** package body Sem_Ch4 is
*** 7000,7006 ****
           --  Finally, also check for RM 4.5.2 (9.6/2).
  
           if T1 /= Standard_Void_Type
!            and then (Universal_Access or else Has_Compatible_Type (R, T1))
  
             and then
               ((not Is_Limited_Type (T1)
--- 7102,7110 ----
           --  Finally, also check for RM 4.5.2 (9.6/2).
  
           if T1 /= Standard_Void_Type
!            and then (Anonymous_Access
!                       or else
!                      Has_Compatible_Type (R, T1, For_Comparison => True))
  
             and then
               ((not Is_Limited_Type (T1)
*************** package body Sem_Ch4 is
*** 7016,7022 ****
                 or else not Is_Tagged_Type (T1)
                 or else Chars (Op_Id) = Name_Op_Eq)
  
!            and then (not Universal_Access
                        or else Check_Access_Object_Types (R, T1))
           then
              if Found
--- 7120,7126 ----
                 or else not Is_Tagged_Type (T1)
                 or else Chars (Op_Id) = Name_Op_Eq)
  
!            and then (not Anonymous_Access
                        or else Check_Access_Object_Types (R, T1))
           then
              if Found
*************** package body Sem_Ch4 is
*** 7031,7044 ****
  
                 else
                    T_F := It.Typ;
!                   Is_Universal_Access := Universal_Access;
                 end if;
  
              else
                 Found := True;
                 T_F   := T1;
                 I_F   := Index;
!                Is_Universal_Access := Universal_Access;
              end if;
  
              if not Analyzed (L) then
--- 7135,7148 ----
  
                 else
                    T_F := It.Typ;
!                   Is_Universal_Access := Anonymous_Access;
                 end if;
  
              else
                 Found := True;
                 T_F   := T1;
                 I_F   := Index;
!                Is_Universal_Access := Anonymous_Access;
              end if;
  
              if not Analyzed (L) then
*************** package body Sem_Ch4 is
*** 7061,7069 ****
        --  If left operand is aggregate, the right operand has to
        --  provide a usable type for it.
  
!       if Nkind (L) = N_Aggregate
!         and then Nkind (R) /= N_Aggregate
!       then
           Find_Equality_Types (L => R, R => L, Op_Id => Op_Id, N => N);
           return;
        end if;
--- 7165,7171 ----
        --  If left operand is aggregate, the right operand has to
        --  provide a usable type for it.
  
!       if Nkind (L) = N_Aggregate and then Nkind (R) /= N_Aggregate then
           Find_Equality_Types (L => R, R => L, Op_Id => Op_Id, N => N);
           return;
        end if;
*************** package body Sem_Ch4 is
*** 7454,7459 ****
--- 7556,7564 ----
              then
                 return;
  
+             elsif Has_Possible_Literal_Aspects (N) then
+                return;
+ 
              --  If we have a logical operator, one of whose operands is
              --  Boolean, then we know that the other operand cannot resolve to
              --  Boolean (since we got no interpretations), but in that case we
*************** package body Sem_Ch4 is
*** 7770,7775 ****
--- 7875,7943 ----
        end if;
     end Operator_Check;
  
+    ----------------------------------
+    -- Has_Possible_Literal_Aspects --
+    ----------------------------------
+ 
+    function Has_Possible_Literal_Aspects (N : Node_Id) return Boolean is
+       R : constant Node_Id := Right_Opnd (N);
+       L : Node_Id := Empty;
+ 
+       procedure Check_Literal_Opnd (Opnd : Node_Id);
+       --  If an operand is a literal to which an aspect may apply,
+       --  add the corresponding type to operator node.
+ 
+       ------------------------
+       -- Check_Literal_Opnd --
+       ------------------------
+ 
+       procedure Check_Literal_Opnd (Opnd : Node_Id) is
+       begin
+          if Nkind (Opnd) in N_Numeric_Or_String_Literal
+            or else (Is_Entity_Name (Opnd)
+              and then Present (Entity (Opnd))
+              and then Is_Named_Number (Entity (Opnd)))
+          then
+             Add_One_Interp (N, Etype (Opnd), Etype (Opnd));
+          end if;
+       end Check_Literal_Opnd;
+ 
+    --  Start of processing for Has_Possible_Literal_Aspects
+ 
+    begin
+       if Ada_Version < Ada_2022 then
+          return False;
+       end if;
+ 
+       if Nkind (N) in N_Binary_Op then
+          L := Left_Opnd (N);
+       else
+          L := Empty;
+       end if;
+       Check_Literal_Opnd (R);
+ 
+       --  Check left operand only if right one did not provide a
+       --  possible interpretation. Note that literal types are not
+       --  overloadable, in the sense that there is no overloadable
+       --  entity name whose several interpretations can be used to
+       --  indicate possible resulting types, so there is no way to
+       --  provide more than one interpretation to the operator node.
+       --  The choice of one operand over the other is arbitrary at
+       --  this point, and may lead to spurious resolution when both
+       --  operands are literals of different kinds, but the second
+       --  pass of resolution will examine anew both operands to
+       --  determine whether a user-defined literal may apply to
+       --  either or both.
+ 
+       if Present (L)
+         and then Etype (N) = Any_Type
+       then
+          Check_Literal_Opnd (L);
+       end if;
+ 
+       return Etype (N) /= Any_Type;
+    end Has_Possible_Literal_Aspects;
+ 
     --------------------------------
     -- Remove_Abstract_Operations --
     --------------------------------
*************** package body Sem_Ch4 is
*** 8013,8018 ****
--- 8181,8187 ----
                 while Present (It.Nam) loop
                    if Is_Numeric_Type (It.Typ)
                      and then Scope (It.Typ) = Standard_Standard
+                     and then Ekind (It.Nam) = E_Operator
                    then
                       Set_Abstract_Op (I, Abstract_Op);
                    end if;
*************** package body Sem_Ch4 is
*** 8093,8099 ****
                and then Is_Entity_Name (Name (Parent (Par)))
              then
                 declare
!                   Proc   : Entity_Id;
  
                 begin
                    --  We should look for an interpretation with the proper
--- 8262,8268 ----
                and then Is_Entity_Name (Name (Parent (Par)))
              then
                 declare
!                   Proc : Entity_Id;
  
                 begin
                    --  We should look for an interpretation with the proper
*************** package body Sem_Ch4 is
*** 8582,8591 ****
        --  with the generalized indexing node, which is a call, possibly with a
        --  dereference operation.
  
-       if Comes_From_Source (N) then
-          Check_Compiler_Unit ("generalized indexing", N);
-       end if;
- 
        --  Create argument list for function call that represents generalized
        --  indexing. Note that indices (i.e. actuals) may themselves be
        --  overloaded.
--- 8751,8756 ----
*************** package body Sem_Ch4 is
*** 8862,8868 ****
     --------------------------
  
     function Try_Object_Operation
!      (N : Node_Id; CW_Test_Only : Boolean := False) return Boolean
     is
        K              : constant Node_Kind  := Nkind (Parent (N));
        Is_Subprg_Call : constant Boolean    := K in N_Subprogram_Call;
--- 9027,9035 ----
     --------------------------
  
     function Try_Object_Operation
!      (N                : Node_Id;
!       CW_Test_Only     : Boolean := False;
!       Allow_Extensions : Boolean := False) return Boolean
     is
        K              : constant Node_Kind  := Nkind (Parent (N));
        Is_Subprg_Call : constant Boolean    := K in N_Subprogram_Call;
*************** package body Sem_Ch4 is
*** 9429,9459 ****
           begin
              Error := False;
  
!             if Is_Non_Empty_List (Intface_List) then
!                Intface := First (Intface_List);
!                while Present (Intface) loop
  
!                   --  Look for acceptable class-wide homonyms associated with
!                   --  the interface.
  
!                   Traverse_Homonyms (Etype (Intface), Error);
  
!                   if Error then
!                      return;
!                   end if;
  
!                   --  Continue the search by looking at each of the interface's
!                   --  associated interface ancestors.
  
!                   Traverse_Interfaces (Etype (Intface), Error);
  
!                   if Error then
!                      return;
!                   end if;
  
!                   Next (Intface);
!                end loop;
!             end if;
           end Traverse_Interfaces;
  
        --  Start of processing for Try_Class_Wide_Operation
--- 9596,9624 ----
           begin
              Error := False;
  
!             Intface := First (Intface_List);
!             while Present (Intface) loop
  
!                --  Look for acceptable class-wide homonyms associated with the
!                --  interface.
  
!                Traverse_Homonyms (Etype (Intface), Error);
  
!                if Error then
!                   return;
!                end if;
  
!                --  Continue the search by looking at each of the interface's
!                --  associated interface ancestors.
  
!                Traverse_Interfaces (Etype (Intface), Error);
  
!                if Error then
!                   return;
!                end if;
  
!                Next (Intface);
!             end loop;
           end Traverse_Interfaces;
  
        --  Start of processing for Try_Class_Wide_Operation
*************** package body Sem_Ch4 is
*** 9542,9548 ****
           --  type, this is not a prefixed call. Restore the previous type as
           --  the current one is not a legal candidate.
  
!          if not Is_Tagged_Type (Obj_Type)
             or else Is_Incomplete_Type (Obj_Type)
           then
              Obj_Type := Prev_Obj_Type;
--- 9707,9721 ----
           --  type, this is not a prefixed call. Restore the previous type as
           --  the current one is not a legal candidate.
  
!          --  Extension feature: Calls with prefixed views are also supported
!          --  for untagged types, so skip the early return when extensions are
!          --  enabled, unless the type doesn't have a primitive operations list
!          --  (such as in the case of predefined types).
! 
!          if (not Is_Tagged_Type (Obj_Type)
!               and then
!                 (not (Extensions_Allowed or Allow_Extensions)
!                   or else not Present (Primitive_Operations (Obj_Type))))
             or else Is_Incomplete_Type (Obj_Type)
           then
              Obj_Type := Prev_Obj_Type;
*************** package body Sem_Ch4 is
*** 9560,9565 ****
--- 9733,9768 ----
                    Try_Primitive_Operation
                     (Call_Node       => New_Call_Node,
                      Node_To_Replace => Node_To_Replace);
+ 
+                --  Extension feature: In the case where the prefix is of an
+                --  access type, and a primitive wasn't found for the designated
+                --  type, then if the access type has primitives we attempt a
+                --  prefixed call using one of its primitives. (It seems that
+                --  this isn't quite right to give preference to the designated
+                --  type in the case where both the access and designated types
+                --  have homographic prefixed-view operations that could result
+                --  in an ambiguity, but handling properly may be tricky. ???)
+ 
+                if (Extensions_Allowed or Allow_Extensions)
+                  and then not Prim_Result
+                  and then Is_Named_Access_Type (Prev_Obj_Type)
+                  and then Present (Direct_Primitive_Operations (Prev_Obj_Type))
+                then
+                   --  Temporarily reset Obj_Type to the original access type
+ 
+                   Obj_Type := Prev_Obj_Type;
+ 
+                   Prim_Result :=
+                      Try_Primitive_Operation
+                       (Call_Node       => New_Call_Node,
+                        Node_To_Replace => Node_To_Replace);
+ 
+                   --  Restore Obj_Type to the designated type (is this really
+                   --  necessary, or should it only be done when Prim_Result is
+                   --  still False?).
+ 
+                   Obj_Type := Designated_Type (Obj_Type);
+                end if;
              end if;
  
              --  Check if there is a class-wide subprogram covering the
*************** package body Sem_Ch4 is
*** 9899,9905 ****
              --  be the corresponding record of a synchronized type.
  
              return Obj_Type = Typ
!               or else Base_Type (Obj_Type) = Typ
                or else Corr_Type = Typ
  
                --  Object may be of a derived type whose parent has unknown
--- 10102,10108 ----
              --  be the corresponding record of a synchronized type.
  
              return Obj_Type = Typ
!               or else Base_Type (Obj_Type) = Base_Type (Typ)
                or else Corr_Type = Typ
  
                --  Object may be of a derived type whose parent has unknown
*************** package body Sem_Ch4 is
*** 10212,10217 ****
--- 10415,10430 ----
                 Report     => True,
                 Success    => Success,
                 Skip_First => True);
+ 
+             --  The error may hot have been reported yet for overloaded
+             --  prefixed calls, depending on the non-matching candidate,
+             --  in which case provide a concise error now.
+ 
+             if Serious_Errors_Detected = 0 then
+                Error_Msg_NE
+                  ("cannot resolve prefixed call to primitive operation of&",
+                    N, Entity (Obj));
+             end if;
           end if;
  
           --  No need for further errors
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch4.ads gcc-12.1.0/gcc/ada/sem_ch4.ads
*** gcc-11.3.0/gcc/ada/sem_ch4.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch4.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Ch4  is
*** 65,79 ****
     --  on the prefix and the indexes.
  
     function Try_Object_Operation
!      (N            : Node_Id;
!       CW_Test_Only : Boolean := False) return Boolean;
!    --  Ada 2005 (AI-252): Support the object.operation notation. If node N
!    --  is a call in this notation, it is transformed into a normal subprogram
!    --  call where the prefix is a parameter, and True is returned. If node
!    --  N is not of this form, it is unchanged, and False is returned. If
!    --  CW_Test_Only is true then N is an N_Selected_Component node which
!    --  is part of a call to an entry or procedure of a tagged concurrent
!    --  type and this routine is invoked to search for class-wide subprograms
!    --  conflicting with the target entity.
  
  end Sem_Ch4;
--- 65,82 ----
     --  on the prefix and the indexes.
  
     function Try_Object_Operation
!      (N                : Node_Id;
!       CW_Test_Only     : Boolean := False;
!       Allow_Extensions : Boolean := False) return Boolean;
!    --  Ada 2005 (AI-252): Support the object.operation notation. If node N is
!    --  a call in this notation, it is transformed into a normal subprogram call
!    --  where the prefix is a parameter, and True is returned. If node N is not
!    --  of this form, it is unchanged, and False is returned. If CW_Test_Only is
!    --  true then N is an N_Selected_Component node which is part of a call to
!    --  an entry or procedure of a tagged concurrent type and this routine is
!    --  invoked to search for class-wide subprograms conflicting with the target
!    --  entity. If Allow_Extensions is True, then a prefixed call of a primitive
!    --  of a non-tagged type is allowed as if Extensions_Allowed returned True.
!    --  This is used to issue better error messages.
  
  end Sem_Ch4;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch5.adb gcc-12.1.0/gcc/ada/sem_ch5.adb
*** gcc-11.3.0/gcc/ada/sem_ch5.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch5.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,66 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Expander; use Expander;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Ghost;    use Ghost;
! with Lib;      use Lib;
! with Lib.Xref; use Lib.Xref;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Case; use Sem_Case;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Dim;  use Sem_Dim;
! with Sem_Disp; use Sem_Disp;
! with Sem_Elab; use Sem_Elab;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Type; use Sem_Type;
! with Sem_Util; use Sem_Util;
! with Sem_Warn; use Sem_Warn;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Sinfo;    use Sinfo;
! with Targparm; use Targparm;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Uintp;    use Uintp;
  
  package body Sem_Ch5 is
  
--- 23,71 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Expander;       use Expander;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Ghost;          use Ghost;
! with Lib;            use Lib;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Case;       use Sem_Case;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Dim;        use Sem_Dim;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
  
  package body Sem_Ch5 is
  
*************** package body Sem_Ch5 is
*** 137,143 ****
        --  If the right-hand side of an assignment statement is a build-in-place
        --  call we cannot build in place, so we insert a temp initialized with
        --  the call, and transform the assignment statement to copy the temp.
!       --  Transform_BIP_Assignment does the tranformation, and
        --  Should_Transform_BIP_Assignment determines whether we should.
        --  The same goes for qualified expressions and conversions whose
        --  operand is such a call.
--- 142,148 ----
        --  If the right-hand side of an assignment statement is a build-in-place
        --  call we cannot build in place, so we insert a temp initialized with
        --  the call, and transform the assignment statement to copy the temp.
!       --  Transform_BIP_Assignment does the transformation, and
        --  Should_Transform_BIP_Assignment determines whether we should.
        --  The same goes for qualified expressions and conversions whose
        --  operand is such a call.
*************** package body Sem_Ch5 is
*** 475,486 ****
        Mark_And_Set_Ghost_Assignment (N);
  
        if Has_Target_Names (N) then
           Current_Assignment := N;
           Expander_Mode_Save_And_Set (False);
           Save_Full_Analysis := Full_Analysis;
           Full_Analysis      := False;
-       else
-          Current_Assignment := Empty;
        end if;
  
        Analyze (Lhs);
--- 480,490 ----
        Mark_And_Set_Ghost_Assignment (N);
  
        if Has_Target_Names (N) then
+          pragma Assert (No (Current_Assignment));
           Current_Assignment := N;
           Expander_Mode_Save_And_Set (False);
           Save_Full_Analysis := Full_Analysis;
           Full_Analysis      := False;
        end if;
  
        Analyze (Lhs);
*************** package body Sem_Ch5 is
*** 678,683 ****
--- 682,688 ----
                 Ent := Lhs;
                 while Nkind (Ent) in N_Has_Entity
                   and then Present (Entity (Ent))
+                  and then Is_Object (Entity (Ent))
                   and then Present (Renamed_Object (Entity (Ent)))
                 loop
                    Ent := Renamed_Object (Entity (Ent));
*************** package body Sem_Ch5 is
*** 975,981 ****
        end if;
  
        if Is_Scalar_Type (T1) then
!          Apply_Scalar_Range_Check (Rhs, Etype (Lhs));
  
        --  For array types, verify that lengths match. If the right hand side
        --  is a function call that has been inlined, the assignment has been
--- 980,1071 ----
        end if;
  
        if Is_Scalar_Type (T1) then
!          declare
! 
!             function Omit_Range_Check_For_Streaming return Boolean;
!             --  Return True if this assignment statement is the expansion of
!             --  a Some_Scalar_Type'Read procedure call such that all conditions
!             --  of 13.3.2(35)'s "no check is made" rule are met.
! 
!             ------------------------------------
!             -- Omit_Range_Check_For_Streaming --
!             ------------------------------------
! 
!             function Omit_Range_Check_For_Streaming return Boolean is
!             begin
!                --  Have we got an implicitly generated assignment to a
!                --  component of a composite object? If not, return False.
! 
!                if Comes_From_Source (N)
!                  or else Serious_Errors_Detected > 0
!                  or else Nkind (Lhs)
!                            not in N_Selected_Component | N_Indexed_Component
!                then
!                   return False;
!                end if;
! 
!                declare
!                   Pref : constant Node_Id := Prefix (Lhs);
!                begin
!                   --  Are we in the implicitly-defined Read subprogram
!                   --  for a composite type, reading the value of a scalar
!                   --  component from the stream? If not, return False.
! 
!                   if Nkind (Pref) /= N_Identifier
!                     or else not Is_TSS (Scope (Entity (Pref)), TSS_Stream_Read)
!                   then
!                      return False;
!                   end if;
! 
!                   --  Return False if Default_Value or Default_Component_Value
!                   --  aspect applies.
! 
!                   if Has_Default_Aspect (Etype (Lhs))
!                     or else Has_Default_Aspect (Etype (Pref))
!                   then
!                      return False;
! 
!                   --  Are we assigning to a record component (as opposed to
!                   --  an array component)?
! 
!                   elsif Nkind (Lhs) = N_Selected_Component then
! 
!                      --  Are we assigning to a nondiscriminant component
!                      --  that lacks a default initial value expression?
!                      --  If so, return True.
! 
!                      declare
!                         Comp_Id : constant Entity_Id :=
!                           Original_Record_Component
!                             (Entity (Selector_Name (Lhs)));
!                      begin
!                         if Ekind (Comp_Id) = E_Component
!                           and then Nkind (Parent (Comp_Id))
!                                      = N_Component_Declaration
!                           and then
!                             not Present (Expression (Parent (Comp_Id)))
!                         then
!                            return True;
!                         end if;
!                         return False;
!                      end;
! 
!                   --  We are assigning to a component of an array
!                   --  (and we tested for both Default_Value and
!                   --  Default_Component_Value above), so return True.
! 
!                   else
!                      pragma Assert (Nkind (Lhs) = N_Indexed_Component);
!                      return True;
!                   end if;
!                end;
!             end Omit_Range_Check_For_Streaming;
! 
!          begin
!             if not Omit_Range_Check_For_Streaming then
!                Apply_Scalar_Range_Check (Rhs, Etype (Lhs));
!             end if;
!          end;
  
        --  For array types, verify that lengths match. If the right hand side
        --  is a function call that has been inlined, the assignment has been
*************** package body Sem_Ch5 is
*** 1108,1113 ****
--- 1198,1209 ----
                 --  warnings when an assignment is rewritten as another
                 --  assignment, and gets tied up with itself.
  
+                --  We also omit the warning if the RHS includes target names,
+                --  that is to say the Ada 2022 "@" that denotes an instance of
+                --  the LHS, which indicates that the current value is being
+                --  used. Note that this implicit reference to the entity on
+                --  the RHS is not treated as a source reference.
+ 
                 --  There may have been a previous reference to a component of
                 --  the variable, which in general removes the Last_Assignment
                 --  field of the variable to indicate a relevant use of the
*************** package body Sem_Ch5 is
*** 1126,1131 ****
--- 1222,1228 ----
                   and then Comes_From_Source (N)
                   and then In_Extended_Main_Source_Unit (Ent)
                   and then not Has_Deferred_Reference (Ent)
+                  and then not Has_Target_Names (N)
                 then
                    Warn_On_Useless_Assignment (Ent, N);
                 end if;
*************** package body Sem_Ch5 is
*** 1205,1210 ****
--- 1302,1308 ----
           if Has_Target_Names (N) then
              Expander_Mode_Restore;
              Full_Analysis := Save_Full_Analysis;
+             Current_Assignment := Empty;
           end if;
  
           pragma Assert (not Should_Transform_BIP_Assignment (Typ => T1));
*************** package body Sem_Ch5 is
*** 1308,1314 ****
                 Set_Identifier (N, Empty);
  
              else
!                Set_Ekind (Ent, E_Block);
                 Generate_Reference (Ent, N, ' ');
                 Generate_Definition (Ent);
  
--- 1406,1416 ----
                 Set_Identifier (N, Empty);
  
              else
!                if Ekind (Ent) = E_Label then
!                   Reinit_Field_To_Zero (Ent, F_Enclosing_Scope);
!                end if;
! 
!                Mutate_Ekind (Ent, E_Block);
                 Generate_Reference (Ent, N, ' ');
                 Generate_Definition (Ent);
  
*************** package body Sem_Ch5 is
*** 1397,1402 ****
--- 1499,1507 ----
        --  the case statement, and as a result it is not a good idea to output
        --  warning messages about unreachable code.
  
+       Is_General_Case_Statement : Boolean := False;
+       --  Set True (later) if type of case expression is not discrete
+ 
        procedure Non_Static_Choice_Error (Choice : Node_Id);
        --  Error routine invoked by the generic instantiation below when the
        --  case statement has a non static choice.
*************** package body Sem_Ch5 is
*** 1438,1443 ****
--- 1543,1554 ----
           Ent     : Entity_Id;
  
        begin
+          if Is_General_Case_Statement then
+             return;
+             --  Processing deferred in this case; decls associated with
+             --  pattern match bindings don't exist yet.
+          end if;
+ 
           Unblocked_Exit_Count := Unblocked_Exit_Count + 1;
           Statements_Analyzed := True;
  
*************** package body Sem_Ch5 is
*** 1456,1462 ****
           if Is_Entity_Name (Exp) then
              Ent := Entity (Exp);
  
!             if Is_Assignable (Ent) then
                 if List_Length (Choices) = 1
                   and then Nkind (First (Choices)) in N_Subexpr
                   and then Compile_Time_Known_Value (First (Choices))
--- 1567,1573 ----
           if Is_Entity_Name (Exp) then
              Ent := Entity (Exp);
  
!             if Is_Object (Ent) then
                 if List_Length (Choices) = 1
                   and then Nkind (First (Choices)) in N_Subexpr
                   and then Compile_Time_Known_Value (First (Choices))
*************** package body Sem_Ch5 is
*** 1475,1481 ****
              end if;
           end if;
  
!          --  Case where expression is not an entity name of a variable
  
           Analyze_Statements (Statements (Alternative));
        end Process_Statements;
--- 1586,1592 ----
              end if;
           end if;
  
!          --  Case where expression is not an entity name of an object
  
           Analyze_Statements (Statements (Alternative));
        end Process_Statements;
*************** package body Sem_Ch5 is
*** 1509,1517 ****
          and then Present (Full_View (Etype (Exp)))
          and then Is_Discrete_Type (Full_View (Etype (Exp)))
        then
!          Resolve (Exp, Etype (Exp));
           Exp_Type := Full_View (Etype (Exp));
  
        else
           Analyze_And_Resolve (Exp, Any_Discrete);
           Exp_Type := Etype (Exp);
--- 1620,1656 ----
          and then Present (Full_View (Etype (Exp)))
          and then Is_Discrete_Type (Full_View (Etype (Exp)))
        then
!          Resolve (Exp);
           Exp_Type := Full_View (Etype (Exp));
  
+       --  For Ada, overloading might be ok because subsequently filtering
+       --  out non-discretes may resolve the ambiguity.
+       --  But GNAT extensions allow casing on non-discretes.
+ 
+       elsif Extensions_Allowed and then Is_Overloaded (Exp) then
+ 
+          --  It would be nice if we could generate all the right error
+          --  messages by calling "Resolve (Exp, Any_Type);" in the
+          --  same way that they are generated a few lines below by the
+          --  call "Analyze_And_Resolve (Exp, Any_Discrete);".
+          --  Unfortunately, Any_Type and Any_Discrete are not treated
+          --  consistently (specifically, by Sem_Type.Covers), so that
+          --  doesn't work.
+ 
+          Error_Msg_N
+            ("selecting expression of general case statement is ambiguous",
+             Exp);
+          return;
+ 
+       --  Check for a GNAT-extension "general" case statement (i.e., one where
+       --  the type of the selecting expression is not discrete).
+ 
+       elsif Extensions_Allowed
+          and then not Is_Discrete_Type (Etype (Exp))
+       then
+          Resolve (Exp, Etype (Exp));
+          Exp_Type := Etype (Exp);
+          Is_General_Case_Statement := True;
        else
           Analyze_And_Resolve (Exp, Any_Discrete);
           Exp_Type := Etype (Exp);
*************** package body Sem_Ch5 is
*** 1543,1548 ****
--- 1682,1694 ----
           Error_Msg_N
             ("(Ada 83) case expression cannot be of a generic type", Exp);
           return;
+ 
+       elsif not Extensions_Allowed
+         and then not Is_Discrete_Type (Exp_Type)
+       then
+          Error_Msg_N
+            ("expression in case statement must be of a discrete_Type", Exp);
+          return;
        end if;
  
        --  If the case expression is a formal object of mode in out, then treat
*************** package body Sem_Ch5 is
*** 1564,1569 ****
--- 1710,1730 ----
        Analyze_Choices (Alternatives (N), Exp_Type);
        Check_Choices (N, Alternatives (N), Exp_Type, Others_Present);
  
+       if Is_General_Case_Statement then
+          --  Work normally done in Process_Statements was deferred; do that
+          --  deferred work now that Check_Choices has had a chance to create
+          --  any needed pattern-match-binding declarations.
+          declare
+             Alt : Node_Id := First (Alternatives (N));
+          begin
+             while Present (Alt) loop
+                Unblocked_Exit_Count := Unblocked_Exit_Count + 1;
+                Analyze_Statements (Statements (Alt));
+                Next (Alt);
+             end loop;
+          end;
+       end if;
+ 
        if Exp_Type = Universal_Integer and then not Others_Present then
           Error_Msg_N ("case on universal integer requires OTHERS choice", Exp);
        end if;
*************** package body Sem_Ch5 is
*** 1758,1763 ****
--- 1919,1936 ----
        raise Program_Error;
     end Analyze_Goto_Statement;
  
+    ---------------------------------
+    -- Analyze_Goto_When_Statement --
+    ---------------------------------
+ 
+    procedure Analyze_Goto_When_Statement (N : Node_Id) is
+    begin
+       --  Verify the condition is a Boolean expression
+ 
+       Analyze_And_Resolve (Condition (N), Any_Boolean);
+       Check_Unset_Reference (Condition (N));
+    end Analyze_Goto_When_Statement;
+ 
     --------------------------
     -- Analyze_If_Statement --
     --------------------------
*************** package body Sem_Ch5 is
*** 1955,1961 ****
        Id : constant Node_Id := Defining_Identifier (N);
     begin
        Enter_Name          (Id);
!       Set_Ekind           (Id, E_Label);
        Set_Etype           (Id, Standard_Void_Type);
        Set_Enclosing_Scope (Id, Current_Scope);
     end Analyze_Implicit_Label_Declaration;
--- 2128,2134 ----
        Id : constant Node_Id := Defining_Identifier (N);
     begin
        Enter_Name          (Id);
!       Mutate_Ekind        (Id, E_Label);
        Set_Etype           (Id, Standard_Void_Type);
        Set_Enclosing_Scope (Id, Current_Scope);
     end Analyze_Implicit_Label_Declaration;
*************** package body Sem_Ch5 is
*** 2011,2019 ****
        --  indicator, verify that the container type has an Iterate aspect that
        --  implements the reversible iterator interface.
  
!       procedure Check_Subtype_Indication (Comp_Type : Entity_Id);
        --  If a subtype indication is present, verify that it is consistent
        --  with the component type of the array or container name.
  
        function Get_Cursor_Type (Typ : Entity_Id) return Entity_Id;
        --  For containers with Iterator and related aspects, the cursor is
--- 2184,2194 ----
        --  indicator, verify that the container type has an Iterate aspect that
        --  implements the reversible iterator interface.
  
!       procedure Check_Subtype_Definition (Comp_Type : Entity_Id);
        --  If a subtype indication is present, verify that it is consistent
        --  with the component type of the array or container name.
+       --  In Ada 2022, the subtype indication may be an access definition,
+       --  if the array or container has elements of an anonymous access type.
  
        function Get_Cursor_Type (Typ : Entity_Id) return Entity_Id;
        --  For containers with Iterator and related aspects, the cursor is
*************** package body Sem_Ch5 is
*** 2037,2067 ****
              then
                 null;
              else
!                Error_Msg_NE
!                  ("container type does not support reverse iteration", N, Typ);
              end if;
           end if;
        end Check_Reverse_Iteration;
  
        -------------------------------
!       --  Check_Subtype_Indication --
        -------------------------------
  
!       procedure Check_Subtype_Indication (Comp_Type : Entity_Id) is
        begin
!          if Present (Subt)
!            and then (not Covers (Base_Type ((Bas)), Comp_Type)
                        or else not Subtypes_Statically_Match (Bas, Comp_Type))
           then
              if Is_Array_Type (Typ) then
!                Error_Msg_N
!                  ("subtype indication does not match component type", Subt);
              else
!                Error_Msg_N
!                  ("subtype indication does not match element type", Subt);
              end if;
           end if;
!       end Check_Subtype_Indication;
  
        ---------------------
        -- Get_Cursor_Type --
--- 2212,2264 ----
              then
                 null;
              else
!                Error_Msg_N
!                  ("container type does not support reverse iteration", N);
              end if;
           end if;
        end Check_Reverse_Iteration;
  
        -------------------------------
!       --  Check_Subtype_Definition --
        -------------------------------
  
!       procedure Check_Subtype_Definition (Comp_Type : Entity_Id) is
        begin
!          if not Present (Subt) then
!             return;
!          end if;
! 
!          if Is_Anonymous_Access_Type (Entity (Subt)) then
!             if not Is_Anonymous_Access_Type (Comp_Type) then
!                Error_Msg_NE
!                  ("component type& is not an anonymous access",
!                   Subt, Comp_Type);
! 
!             elsif not Conforming_Types
!                 (Designated_Type (Entity (Subt)),
!                  Designated_Type (Comp_Type),
!                  Fully_Conformant)
!             then
!                Error_Msg_NE
!                  ("subtype indication does not match component type&",
!                   Subt, Comp_Type);
!             end if;
! 
!          elsif Present (Subt)
!            and then (not Covers (Base_Type (Bas), Comp_Type)
                        or else not Subtypes_Statically_Match (Bas, Comp_Type))
           then
              if Is_Array_Type (Typ) then
!                Error_Msg_NE
!                  ("subtype indication does not match component type&",
!                   Subt, Comp_Type);
              else
!                Error_Msg_NE
!                  ("subtype indication does not match element type&",
!                   Subt, Comp_Type);
              end if;
           end if;
!       end Check_Subtype_Definition;
  
        ---------------------
        -- Get_Cursor_Type --
*************** package body Sem_Ch5 is
*** 2123,2128 ****
--- 2320,2358 ----
                 Analyze (Decl);
                 Rewrite (Subt, New_Occurrence_Of (S, Sloc (Subt)));
              end;
+ 
+          --  Ada 2022: the subtype definition may be for an anonymous
+          --  access type.
+ 
+          elsif Nkind (Subt) = N_Access_Definition then
+             declare
+                S    : constant Entity_Id := Make_Temporary (Sloc (Subt), 'S');
+                Decl : Node_Id;
+             begin
+                if Present (Subtype_Mark (Subt)) then
+                   Decl :=
+                     Make_Full_Type_Declaration (Loc,
+                       Defining_Identifier => S,
+                       Type_Definition     =>
+                         Make_Access_To_Object_Definition (Loc,
+                           All_Present        => True,
+                           Subtype_Indication =>
+                             New_Copy_Tree (Subtype_Mark (Subt))));
+ 
+                else
+                   Decl :=
+                     Make_Full_Type_Declaration (Loc,
+                       Defining_Identifier => S,
+                       Type_Definition  =>
+                         New_Copy_Tree
+                           (Access_To_Subprogram_Definition (Subt)));
+                end if;
+ 
+                Insert_Before (Parent (Parent (N)), Decl);
+                Analyze (Decl);
+                Freeze_Before (First (Statements (Parent (Parent (N)))), S);
+                Rewrite (Subt, New_Occurrence_Of (S, Sloc (Subt)));
+             end;
           else
              Analyze (Subt);
           end if;
*************** package body Sem_Ch5 is
*** 2149,2155 ****
        --  Set the kind of the loop variable, which is not visible within the
        --  iterator name.
  
!       Set_Ekind (Def_Id, E_Variable);
  
        --  Provide a link between the iterator variable and the container, for
        --  subsequent use in cross-reference and modification information.
--- 2379,2385 ----
        --  Set the kind of the loop variable, which is not visible within the
        --  iterator name.
  
!       Mutate_Ekind (Def_Id, E_Variable);
  
        --  Provide a link between the iterator variable and the container, for
        --  subsequent use in cross-reference and modification information.
*************** package body Sem_Ch5 is
*** 2360,2366 ****
           --  Domain of iteration is not overloaded
  
           else
!             Resolve (Iter_Name, Etype (Iter_Name));
           end if;
  
           if not Of_Present (N) then
--- 2590,2596 ----
           --  Domain of iteration is not overloaded
  
           else
!             Resolve (Iter_Name);
           end if;
  
           if not Of_Present (N) then
*************** package body Sem_Ch5 is
*** 2400,2406 ****
                    & "component of a mutable object", N);
              end if;
  
!             Check_Subtype_Indication (Component_Type (Typ));
  
           --  Here we have a missing Range attribute
  
--- 2630,2636 ----
                    & "component of a mutable object", N);
              end if;
  
!             Check_Subtype_Definition (Component_Type (Typ));
  
           --  Here we have a missing Range attribute
  
*************** package body Sem_Ch5 is
*** 2418,2424 ****
  
              --  Prevent cascaded errors
  
!             Set_Ekind (Def_Id, E_Loop_Parameter);
              Set_Etype (Def_Id, Etype (First_Index (Typ)));
           end if;
  
--- 2648,2654 ----
  
              --  Prevent cascaded errors
  
!             Mutate_Ekind (Def_Id, E_Loop_Parameter);
              Set_Etype (Def_Id, Etype (First_Index (Typ)));
           end if;
  
*************** package body Sem_Ch5 is
*** 2430,2436 ****
        --  Iteration over a container
  
        else
!          Set_Ekind (Def_Id, E_Loop_Parameter);
           Error_Msg_Ada_2012_Feature ("container iterator", Sloc (N));
  
           --  OF present
--- 2660,2666 ----
        --  Iteration over a container
  
        else
!          Mutate_Ekind (Def_Id, E_Loop_Parameter);
           Error_Msg_Ada_2012_Feature ("container iterator", Sloc (N));
  
           --  OF present
*************** package body Sem_Ch5 is
*** 2450,2456 ****
                    end if;
                 end;
  
!                Check_Subtype_Indication (Etype (Def_Id));
  
              --  For a predefined container, the type of the loop variable is
              --  the Iterator_Element aspect of the container type.
--- 2680,2686 ----
                    end if;
                 end;
  
!                Check_Subtype_Definition (Etype (Def_Id));
  
              --  For a predefined container, the type of the loop variable is
              --  the Iterator_Element aspect of the container type.
*************** package body Sem_Ch5 is
*** 2477,2489 ****
                       Cursor_Type := Get_Cursor_Type (Typ);
                       pragma Assert (Present (Cursor_Type));
  
!                      Check_Subtype_Indication (Etype (Def_Id));
  
                       --  If the container has a variable indexing aspect, the
                       --  element is a variable and is modifiable in the loop.
  
                       if Has_Aspect (Typ, Aspect_Variable_Indexing) then
!                         Set_Ekind (Def_Id, E_Variable);
                       end if;
  
                       --  If the container is a constant, iterating over it
--- 2707,2719 ----
                       Cursor_Type := Get_Cursor_Type (Typ);
                       pragma Assert (Present (Cursor_Type));
  
!                      Check_Subtype_Definition (Etype (Def_Id));
  
                       --  If the container has a variable indexing aspect, the
                       --  element is a variable and is modifiable in the loop.
  
                       if Has_Aspect (Typ, Aspect_Variable_Indexing) then
!                         Mutate_Ekind (Def_Id, E_Variable);
                       end if;
  
                       --  If the container is a constant, iterating over it
*************** package body Sem_Ch5 is
*** 2654,2660 ****
  
     procedure Analyze_Label_Entity (E : Entity_Id) is
     begin
!       Set_Ekind           (E, E_Label);
        Set_Etype           (E, Standard_Void_Type);
        Set_Enclosing_Scope (E, Current_Scope);
        Set_Reachable       (E, True);
--- 2884,2890 ----
  
     procedure Analyze_Label_Entity (E : Entity_Id) is
     begin
!       Mutate_Ekind        (E, E_Label);
        Set_Etype           (E, Standard_Void_Type);
        Set_Enclosing_Scope (E, Current_Scope);
        Set_Reachable       (E, True);
*************** package body Sem_Ch5 is
*** 2676,2683 ****
        procedure Check_Predicate_Use (T : Entity_Id);
        --  Diagnose Attempt to iterate through non-static predicate. Note that
        --  a type with inherited predicates may have both static and dynamic
!       --  forms. In this case it is not sufficent to check the static predicate
!       --  function only, look for a dynamic predicate aspect as well.
  
        procedure Process_Bounds (R : Node_Id);
        --  If the iteration is given by a range, create temporaries and
--- 2906,2913 ----
        procedure Check_Predicate_Use (T : Entity_Id);
        --  Diagnose Attempt to iterate through non-static predicate. Note that
        --  a type with inherited predicates may have both static and dynamic
!       --  forms. In this case it is not sufficient to check the static
!       --  predicate function only, look for a dynamic predicate aspect as well.
  
        procedure Process_Bounds (R : Node_Id);
        --  If the iteration is given by a range, create temporaries and
*************** package body Sem_Ch5 is
*** 2806,2811 ****
--- 3036,3045 ----
              then
                 Analyze_And_Resolve (Original_Bound, Typ);
                 return Original_Bound;
+ 
+             elsif Inside_Class_Condition_Preanalysis then
+                Analyze_And_Resolve (Original_Bound, Typ);
+                return Original_Bound;
              end if;
  
              --  Normally, the best approach is simply to generate a constant
*************** package body Sem_Ch5 is
*** 3040,3046 ****
                 --  subsequent analysis of the condition in a quantified
                 --  expression.
  
!                Set_Ekind (Id, E_Loop_Parameter);
                 return;
              end;
  
--- 3274,3280 ----
                 --  subsequent analysis of the condition in a quantified
                 --  expression.
  
!                Mutate_Ekind (Id, E_Loop_Parameter);
                 return;
              end;
  
*************** package body Sem_Ch5 is
*** 3103,3109 ****
           Make_Index (DS, N);
        end if;
  
!       Set_Ekind (Id, E_Loop_Parameter);
  
        --  A quantified expression which appears in a pre- or post-condition may
        --  be analyzed multiple times. The analysis of the range creates several
--- 3337,3343 ----
           Make_Index (DS, N);
        end if;
  
!       Mutate_Ekind (Id, E_Loop_Parameter);
  
        --  A quantified expression which appears in a pre- or post-condition may
        --  be analyzed multiple times. The analysis of the range creates several
*************** package body Sem_Ch5 is
*** 3111,3121 ****
--- 3345,3361 ----
        --  or post-condition has been expanded. Update the type of the loop
        --  variable to reflect the proper itype at each stage of analysis.
  
+       --  Loop_Nod might not be present when we are preanalyzing a class-wide
+       --  pre/postcondition since preanalysis occurs in a place unrelated to
+       --  the actual code and the quantified expression may be the outermost
+       --  expression of the class-wide condition.
+ 
        if No (Etype (Id))
          or else Etype (Id) = Any_Type
          or else
            (Present (Etype (Id))
              and then Is_Itype (Etype (Id))
+             and then Present (Loop_Nod)
              and then Nkind (Parent (Loop_Nod)) = N_Expression_With_Actions
              and then Nkind (Original_Node (Parent (Loop_Nod))) =
                                                     N_Quantified_Expression)
*************** package body Sem_Ch5 is
*** 3298,3303 ****
--- 3538,3569 ----
                         ("\loop executes zero times or raises "
                          & "Constraint_Error??", Bad_Bound);
                    end if;
+ 
+                   if Compile_Time_Compare (LLo, LHi, Assume_Valid => False)
+                     = GT
+                   then
+                      Error_Msg_N ("??constrained range is null",
+                        Constraint (DS));
+ 
+                      --  Additional constraints on modular types can be
+                      --  confusing, add more information.
+ 
+                      if Ekind (Etype (DS)) = E_Modular_Integer_Subtype then
+                         Error_Msg_Uint_1 := Intval (LLo);
+                         Error_Msg_Uint_2 := Intval (LHi);
+                         Error_Msg_NE ("\iterator has modular type &, " &
+                           "so the loop has bounds ^ ..^",
+                           Constraint (DS),
+                           Subtype_Mark (DS));
+                      end if;
+ 
+                      Set_Is_Null_Loop (Loop_Nod);
+                      Null_Range := True;
+ 
+                      --  Suppress other warnings about the body of the loop, as
+                      --  it will never execute.
+                      Set_Suppress_Loop_Warnings (Loop_Nod);
+                   end if;
                 end;
              end if;
  
*************** package body Sem_Ch5 is
*** 3731,3737 ****
                and then Ekind (Homonym (Ent)) = E_Label
              then
                 Set_Entity (Id, Ent);
!                Set_Ekind (Ent, E_Loop);
              end if;
  
           else
--- 3997,4003 ----
                and then Ekind (Homonym (Ent)) = E_Label
              then
                 Set_Entity (Id, Ent);
!                Mutate_Ekind (Ent, E_Loop);
              end if;
  
           else
*************** package body Sem_Ch5 is
*** 3745,3751 ****
              --  parser for generic units.
  
              if Ekind (Ent) = E_Label then
!                Set_Ekind (Ent, E_Loop);
  
                 if Nkind (Parent (Ent)) = N_Implicit_Label_Declaration then
                    Set_Label_Construct (Parent (Ent), N);
--- 4011,4018 ----
              --  parser for generic units.
  
              if Ekind (Ent) = E_Label then
!                Reinit_Field_To_Zero (Ent, F_Enclosing_Scope);
!                Mutate_Ekind (Ent, E_Loop);
  
                 if Nkind (Parent (Ent)) = N_Implicit_Label_Declaration then
                    Set_Label_Construct (Parent (Ent), N);
*************** package body Sem_Ch5 is
*** 3909,3915 ****
                 if not Of_Present (I_Spec)
                   or else not Is_Variable (Name (I_Spec))
                 then
!                   Set_Ekind (Id, E_Loop_Parameter);
                 end if;
              end;
  
--- 4176,4182 ----
                 if not Of_Present (I_Spec)
                   or else not Is_Variable (Name (I_Spec))
                 then
!                   Mutate_Ekind (Id, E_Loop_Parameter);
                 end if;
              end;
  
*************** package body Sem_Ch5 is
*** 3984,3994 ****
     -------------------------
  
     procedure Analyze_Target_Name (N : Node_Id) is
     begin
        --  A target name has the type of the left-hand side of the enclosing
        --  assignment.
  
!       Set_Etype (N, Etype (Name (Current_Assignment)));
     end Analyze_Target_Name;
  
     ------------------------
--- 4251,4317 ----
     -------------------------
  
     procedure Analyze_Target_Name (N : Node_Id) is
+       procedure Report_Error;
+       --  Complain about illegal use of target_name and rewrite it into unknown
+       --  identifier.
+ 
+       ------------------
+       -- Report_Error --
+       ------------------
+ 
+       procedure Report_Error is
+       begin
+          Error_Msg_N
+            ("must appear in the right-hand side of an assignment statement",
+              N);
+          Rewrite (N, New_Occurrence_Of (Any_Id, Sloc (N)));
+       end Report_Error;
+ 
+    --  Start of processing for Analyze_Target_Name
+ 
     begin
        --  A target name has the type of the left-hand side of the enclosing
        --  assignment.
  
!       --  First, verify that the context is the right-hand side of an
!       --  assignment statement.
! 
!       if No (Current_Assignment) then
!          Report_Error;
!          return;
!       end if;
! 
!       declare
!          Current : Node_Id := N;
!          Context : Node_Id := Parent (N);
!       begin
!          while Present (Context) loop
! 
!             --  Check if target_name appears in the expression of the enclosing
!             --  assignment.
! 
!             if Nkind (Context) = N_Assignment_Statement then
!                if Current = Expression (Context) then
!                   pragma Assert (Context = Current_Assignment);
!                   Set_Etype (N, Etype (Name (Current_Assignment)));
!                else
!                   Report_Error;
!                end if;
!                return;
! 
!             --  Prevent the search from going too far
! 
!             elsif Is_Body_Or_Package_Declaration (Context) then
!                Report_Error;
!                return;
!             end if;
! 
!             Current := Context;
!             Context := Parent (Context);
!          end loop;
! 
!          Report_Error;
!       end;
     end Analyze_Target_Name;
  
     ------------------------
*************** package body Sem_Ch5 is
*** 4337,4344 ****
                          Error_Msg_N
                            ("ambiguous bounds in range of iteration", R_Copy);
                          Error_Msg_N ("\possible interpretations:", R_Copy);
!                         Error_Msg_NE ("\\} ", R_Copy, Found);
!                         Error_Msg_NE ("\\} ", R_Copy, It.Typ);
                          exit;
                       end if;
                    end if;
--- 4660,4667 ----
                          Error_Msg_N
                            ("ambiguous bounds in range of iteration", R_Copy);
                          Error_Msg_N ("\possible interpretations:", R_Copy);
!                         Error_Msg_NE ("\\}", R_Copy, Found);
!                         Error_Msg_NE ("\\}", R_Copy, It.Typ);
                          exit;
                       end if;
                    end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch5.ads gcc-12.1.0/gcc/ada/sem_ch5.ads
*** gcc-11.3.0/gcc/ada/sem_ch5.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch5.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Ch5 is
*** 33,38 ****
--- 33,39 ----
     procedure Analyze_Compound_Statement           (N : Node_Id);
     procedure Analyze_Exit_Statement               (N : Node_Id);
     procedure Analyze_Goto_Statement               (N : Node_Id);
+    procedure Analyze_Goto_When_Statement          (N : Node_Id);
     procedure Analyze_If_Statement                 (N : Node_Id);
     procedure Analyze_Implicit_Label_Declaration   (N : Node_Id);
     procedure Analyze_Iterator_Specification       (N : Node_Id);
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch6.adb gcc-12.1.0/gcc/ada/sem_ch6.adb
*** gcc-11.3.0/gcc/ada/sem_ch6.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch6.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,92 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;   use Aspects;
! with Atree;     use Atree;
! with Checks;    use Checks;
! with Contracts; use Contracts;
! with Debug;     use Debug;
! with Einfo;     use Einfo;
! with Elists;    use Elists;
! with Errout;    use Errout;
! with Expander;  use Expander;
! with Exp_Ch3;   use Exp_Ch3;
! with Exp_Ch6;   use Exp_Ch6;
! with Exp_Ch7;   use Exp_Ch7;
! with Exp_Ch9;   use Exp_Ch9;
! with Exp_Dbug;  use Exp_Dbug;
! with Exp_Tss;   use Exp_Tss;
! with Exp_Util;  use Exp_Util;
! with Freeze;    use Freeze;
! with Ghost;     use Ghost;
! with Inline;    use Inline;
! with Itypes;    use Itypes;
! with Lib.Xref;  use Lib.Xref;
! with Layout;    use Layout;
! with Namet;     use Namet;
! with Lib;       use Lib;
! with Nlists;    use Nlists;
! with Nmake;     use Nmake;
! with Opt;       use Opt;
! with Output;    use Output;
! with Restrict;  use Restrict;
! with Rtsfind;   use Rtsfind;
! with Sem;       use Sem;
! with Sem_Aux;   use Sem_Aux;
! with Sem_Cat;   use Sem_Cat;
! with Sem_Ch3;   use Sem_Ch3;
! with Sem_Ch4;   use Sem_Ch4;
! with Sem_Ch5;   use Sem_Ch5;
! with Sem_Ch8;   use Sem_Ch8;
! with Sem_Ch9;   use Sem_Ch9;
! with Sem_Ch10;  use Sem_Ch10;
! with Sem_Ch12;  use Sem_Ch12;
! with Sem_Ch13;  use Sem_Ch13;
! with Sem_Dim;   use Sem_Dim;
! with Sem_Disp;  use Sem_Disp;
! with Sem_Dist;  use Sem_Dist;
! with Sem_Elim;  use Sem_Elim;
! with Sem_Eval;  use Sem_Eval;
! with Sem_Mech;  use Sem_Mech;
! with Sem_Prag;  use Sem_Prag;
! with Sem_Res;   use Sem_Res;
! with Sem_Util;  use Sem_Util;
! with Sem_Type;  use Sem_Type;
! with Sem_Warn;  use Sem_Warn;
! with Sinput;    use Sinput;
! with Stand;     use Stand;
! with Sinfo;     use Sinfo;
! with Sinfo.CN;  use Sinfo.CN;
! with Snames;    use Snames;
! with Stringt;   use Stringt;
  with Style;
! with Stylesw;   use Stylesw;
! with Tbuild;    use Tbuild;
! with Uintp;     use Uintp;
! with Urealp;    use Urealp;
! with Validsw;   use Validsw;
  
  package body Sem_Ch6 is
  
--- 23,95 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Contracts;      use Contracts;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Expander;       use Expander;
! with Exp_Ch3;        use Exp_Ch3;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch9;        use Exp_Ch9;
! with Exp_Dbug;       use Exp_Dbug;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Ghost;          use Ghost;
! with Inline;         use Inline;
! with Itypes;         use Itypes;
! with Lib.Xref;       use Lib.Xref;
! with Layout;         use Layout;
! with Namet;          use Namet;
! with Lib;            use Lib;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Output;         use Output;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch4;        use Sem_Ch4;
! with Sem_Ch5;        use Sem_Ch5;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch9;        use Sem_Ch9;
! with Sem_Ch10;       use Sem_Ch10;
! with Sem_Ch12;       use Sem_Ch12;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Dim;        use Sem_Dim;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Elim;       use Sem_Elim;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Mech;       use Sem_Mech;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sem_Type;       use Sem_Type;
! with Sem_Warn;       use Sem_Warn;
! with Sinput;         use Sinput;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinfo.CN;       use Sinfo.CN;
! with Snames;         use Snames;
! with Stringt;        use Stringt;
  with Style;
! with Stylesw;        use Stylesw;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Urealp;         use Urealp;
! with Validsw;        use Validsw;
! with Warnsw;         use Warnsw;
  
  package body Sem_Ch6 is
  
*************** package body Sem_Ch6 is
*** 128,136 ****
     --  Does all the real work of Analyze_Subprogram_Body. This is split out so
     --  that we can use RETURN but not skip the debug output at the end.
  
-    function Can_Override_Operator (Subp : Entity_Id) return Boolean;
-    --  Returns true if Subp can override a predefined operator.
- 
     procedure Check_Conformance
       (New_Id                   : Entity_Id;
        Old_Id                   : Entity_Id;
--- 131,136 ----
*************** package body Sem_Ch6 is
*** 298,305 ****
        Asp      : Node_Id;
        New_Body : Node_Id;
        New_Spec : Node_Id;
!       Orig_N   : Node_Id;
        Ret      : Node_Id;
  
        Def_Id : Entity_Id := Empty;
        Prev   : Entity_Id;
--- 298,306 ----
        Asp      : Node_Id;
        New_Body : Node_Id;
        New_Spec : Node_Id;
!       Orig_N   : Node_Id := Empty;
        Ret      : Node_Id;
+       Typ      : Entity_Id := Empty;
  
        Def_Id : Entity_Id := Empty;
        Prev   : Entity_Id;
*************** package body Sem_Ch6 is
*** 333,338 ****
--- 334,341 ----
           Def_Id := Analyze_Subprogram_Specification (Spec);
           Prev   := Find_Corresponding_Spec (N);
  
+          Typ := Etype (Def_Id);
+ 
           --  The previous entity may be an expression function as well, in
           --  which case the redeclaration is illegal.
  
*************** package body Sem_Ch6 is
*** 382,396 ****
           Analyze (New_Body);
           Set_Is_Inlined (Prev);
  
-       --  If the expression function is a completion, the previous declaration
-       --  must come from source. We know already that it appears in the current
-       --  scope. The entity itself may be internally created if within a body
-       --  to be inlined.
- 
        elsif Present (Prev)
          and then Is_Overloadable (Prev)
          and then not Is_Formal_Subprogram (Prev)
-         and then Comes_From_Source (Parent (Prev))
        then
           Set_Has_Completion (Prev, False);
           Set_Is_Inlined (Prev);
--- 385,393 ----
*************** package body Sem_Ch6 is
*** 406,412 ****
           if not Inside_A_Generic then
              Freeze_Expr_Types
                (Def_Id => Def_Id,
!                Typ    => Etype (Def_Id),
                 Expr   => Expr,
                 N      => N);
           end if;
--- 403,409 ----
           if not Inside_A_Generic then
              Freeze_Expr_Types
                (Def_Id => Def_Id,
!                Typ    => Typ,
                 Expr   => Expr,
                 N      => N);
           end if;
*************** package body Sem_Ch6 is
*** 496,501 ****
--- 493,500 ----
           Def_Id := Defining_Entity (N);
           Set_Is_Inlined (Def_Id);
  
+          Typ := Etype (Def_Id);
+ 
           --  Establish the linkages between the spec and the body. These are
           --  used when the expression function acts as the prefix of attribute
           --  'Access in order to freeze the original expression which has been
*************** package body Sem_Ch6 is
*** 517,623 ****
              Set_Has_Completion (Def_Id, not Is_Ignored_Ghost_Entity (Def_Id));
              Push_Scope (Def_Id);
              Install_Formals (Def_Id);
!             Preanalyze_Spec_Expression (Expr, Etype (Def_Id));
              End_Scope;
           end if;
  
           --  To prevent premature freeze action, insert the new body at the end
           --  of the current declarations, or at the end of the package spec.
           --  However, resolve usage names now, to prevent spurious visibility
           --  on later entities. Note that the function can now be called in
!          --  the current declarative part, which will appear to be prior to
!          --  the presence of the body in the code. There are nevertheless no
!          --  order of elaboration issues because all name resolution has taken
!          --  place at the point of declaration.
! 
!          declare
!             Decls : List_Id            := List_Containing (N);
!             Expr  : constant Node_Id   := Expression (Ret);
!             Par   : constant Node_Id   := Parent (Decls);
!             Typ   : constant Entity_Id := Etype (Def_Id);
! 
!          begin
!             --  If this is a wrapper created for in an instance for a formal
!             --  subprogram, insert body after declaration, to be analyzed when
!             --  the enclosing instance is analyzed.
  
!             if GNATprove_Mode
!               and then Is_Generic_Actual_Subprogram (Def_Id)
!             then
!                Insert_After (N, New_Body);
  
!             else
                 if Nkind (Par) = N_Package_Specification
                   and then Decls = Visible_Declarations (Par)
-                  and then Present (Private_Declarations (Par))
                   and then not Is_Empty_List (Private_Declarations (Par))
                 then
                    Decls := Private_Declarations (Par);
                 end if;
  
                 Insert_After (Last (Decls), New_Body);
  
!                --  Preanalyze the expression if not already done above
! 
!                if not Inside_A_Generic then
!                   Push_Scope (Def_Id);
!                   Install_Formals (Def_Id);
!                   Preanalyze_Formal_Expression (Expr, Typ);
!                   Check_Limited_Return (Original_Node (N), Expr, Typ);
!                   End_Scope;
!                end if;
! 
!                --  In the case of an expression function marked with the
!                --  aspect Static, we need to check the requirement that the
!                --  function's expression is a potentially static expression.
!                --  This is done by making a full copy of the expression tree
!                --  and performing a special preanalysis on that tree with
!                --  the global flag Checking_Potentially_Static_Expression
!                --  enabled. If the resulting expression is static, then it's
!                --  OK, but if not, that means the expression violates the
!                --  requirements of the Ada 202x RM in 4.9(3.2/5-3.4/5) and
!                --  we flag an error.
! 
!                if Is_Static_Function (Def_Id) then
!                   if not Is_Static_Expression (Expr) then
!                      declare
!                         Exp_Copy : constant Node_Id := New_Copy_Tree (Expr);
!                      begin
!                         Set_Checking_Potentially_Static_Expression (True);
  
!                         Preanalyze_Formal_Expression (Exp_Copy, Typ);
  
!                         if not Is_Static_Expression (Exp_Copy) then
!                            Error_Msg_N
!                              ("static expression function requires "
!                                 & "potentially static expression", Expr);
!                         end if;
  
!                         Set_Checking_Potentially_Static_Expression (False);
!                      end;
                    end if;
  
!                   --  We also make an additional copy of the expression and
!                   --  replace the expression of the expression function with
!                   --  this copy, because the currently present expression is
!                   --  now associated with the body created for the static
!                   --  expression function, which will later be analyzed and
!                   --  possibly rewritten, and we need to have the separate
!                   --  unanalyzed copy available for use with later static
!                   --  calls.
  
!                   Set_Expression
!                     (Original_Node (Subprogram_Spec (Def_Id)),
!                      New_Copy_Tree (Expr));
  
!                   --  Mark static expression functions as inlined, to ensure
!                   --  that even calls with nonstatic actuals will be inlined.
  
!                   Set_Has_Pragma_Inline (Def_Id);
!                   Set_Is_Inlined (Def_Id);
!                end if;
!             end if;
!          end;
        end if;
  
        --  Check incorrect use of dynamically tagged expression. This doesn't
--- 516,614 ----
              Set_Has_Completion (Def_Id, not Is_Ignored_Ghost_Entity (Def_Id));
              Push_Scope (Def_Id);
              Install_Formals (Def_Id);
!             Preanalyze_Spec_Expression (Expr, Typ);
!             End_Scope;
!          else
!             Push_Scope (Def_Id);
!             Install_Formals (Def_Id);
!             Preanalyze_Formal_Expression (Expr, Typ);
!             Check_Limited_Return (Orig_N, Expr, Typ);
              End_Scope;
           end if;
  
+          --  If this is a wrapper created in an instance for a formal
+          --  subprogram, insert body after declaration, to be analyzed when the
+          --  enclosing instance is analyzed.
+ 
+          if GNATprove_Mode
+            and then Is_Generic_Actual_Subprogram (Def_Id)
+          then
+             Insert_After (N, New_Body);
+ 
           --  To prevent premature freeze action, insert the new body at the end
           --  of the current declarations, or at the end of the package spec.
           --  However, resolve usage names now, to prevent spurious visibility
           --  on later entities. Note that the function can now be called in
!          --  the current declarative part, which will appear to be prior to the
!          --  presence of the body in the code. There are nevertheless no order
!          --  of elaboration issues because all name resolution has taken place
!          --  at the point of declaration.
  
!          else
!             declare
!                Decls : List_Id          := List_Containing (N);
!                Par   : constant Node_Id := Parent (Decls);
  
!             begin
                 if Nkind (Par) = N_Package_Specification
                   and then Decls = Visible_Declarations (Par)
                   and then not Is_Empty_List (Private_Declarations (Par))
                 then
                    Decls := Private_Declarations (Par);
                 end if;
  
                 Insert_After (Last (Decls), New_Body);
+             end;
+          end if;
  
!          --  In the case of an expression function marked with the aspect
!          --  Static, we need to check the requirement that the function's
!          --  expression is a potentially static expression. This is done
!          --  by making a full copy of the expression tree and performing
!          --  a special preanalysis on that tree with the global flag
!          --  Checking_Potentially_Static_Expression enabled. If the
!          --  resulting expression is static, then it's OK, but if not, that
!          --  means the expression violates the requirements of the Ada 2022
!          --  RM in 4.9(3.2/5-3.4/5) and we flag an error.
  
!          if Is_Static_Function (Def_Id) then
!             if not Is_Static_Expression (Expr) then
!                declare
!                   Exp_Copy : constant Node_Id := New_Copy_Tree (Expr);
!                begin
!                   Set_Checking_Potentially_Static_Expression (True);
  
!                   Preanalyze_Formal_Expression (Exp_Copy, Typ);
  
!                   if not Is_Static_Expression (Exp_Copy) then
!                      Error_Msg_N
!                        ("static expression function requires "
!                           & "potentially static expression", Expr);
                    end if;
  
!                   Set_Checking_Potentially_Static_Expression (False);
!                end;
!             end if;
  
!             --  We also make an additional copy of the expression and
!             --  replace the expression of the expression function with
!             --  this copy, because the currently present expression is
!             --  now associated with the body created for the static
!             --  expression function, which will later be analyzed and
!             --  possibly rewritten, and we need to have the separate
!             --  unanalyzed copy available for use with later static
!             --  calls.
  
!             Set_Expression
!               (Original_Node (Subprogram_Spec (Def_Id)),
!                New_Copy_Tree (Expr));
  
!             --  Mark static expression functions as inlined, to ensure
!             --  that even calls with nonstatic actuals will be inlined.
! 
!             Set_Has_Pragma_Inline (Def_Id);
!             Set_Is_Inlined (Def_Id);
!          end if;
        end if;
  
        --  Check incorrect use of dynamically tagged expression. This doesn't
*************** package body Sem_Ch6 is
*** 626,638 ****
        --  nodes that don't come from source.
  
        if Present (Def_Id)
!         and then Nkind (Def_Id) in N_Has_Etype
!         and then Is_Tagged_Type (Etype (Def_Id))
        then
           Check_Dynamically_Tagged_Expression
             (Expr        => Expr,
!             Typ         => Etype (Def_Id),
!             Related_Nod => Original_Node (N));
        end if;
  
        --  We must enforce checks for unreferenced formals in our newly
--- 617,628 ----
        --  nodes that don't come from source.
  
        if Present (Def_Id)
!         and then Is_Tagged_Type (Typ)
        then
           Check_Dynamically_Tagged_Expression
             (Expr        => Expr,
!             Typ         => Typ,
!             Related_Nod => Orig_N);
        end if;
  
        --  We must enforce checks for unreferenced formals in our newly
*************** package body Sem_Ch6 is
*** 642,650 ****
        if Present (Parameter_Specifications (New_Spec)) then
           declare
              Form_New_Def  : Entity_Id;
!             Form_New_Spec : Entity_Id;
              Form_Old_Def  : Entity_Id;
!             Form_Old_Spec : Entity_Id;
  
           begin
              Form_New_Spec := First (Parameter_Specifications (New_Spec));
--- 632,640 ----
        if Present (Parameter_Specifications (New_Spec)) then
           declare
              Form_New_Def  : Entity_Id;
!             Form_New_Spec : Node_Id;
              Form_Old_Def  : Entity_Id;
!             Form_Old_Spec : Node_Id;
  
           begin
              Form_New_Spec := First (Parameter_Specifications (New_Spec));
*************** package body Sem_Ch6 is
*** 678,684 ****
  
     procedure Analyze_Extended_Return_Statement (N : Node_Id) is
     begin
-       Check_Compiler_Unit ("extended return statement", N);
        Analyze_Return_Statement (N);
     end Analyze_Extended_Return_Statement;
  
--- 668,673 ----
*************** package body Sem_Ch6 is
*** 740,746 ****
        --  Function result subtype
  
        procedure Check_No_Return_Expression (Return_Expr : Node_Id);
!       --  Ada 2020: Check that the return expression in a No_Return function
        --  meets the conditions specified by RM 6.5.1(5.1/5).
  
        procedure Check_Return_Construct_Accessibility (Return_Stmt : Node_Id);
--- 729,735 ----
        --  Function result subtype
  
        procedure Check_No_Return_Expression (Return_Expr : Node_Id);
!       --  Ada 2022: Check that the return expression in a No_Return function
        --  meets the conditions specified by RM 6.5.1(5.1/5).
  
        procedure Check_Return_Construct_Accessibility (Return_Stmt : Node_Id);
*************** package body Sem_Ch6 is
*** 816,821 ****
--- 805,811 ----
           Assoc_Expr    : Node_Id;
           Assoc_Present : Boolean := False;
  
+          Check_Cond        : Node_Id;
           Unseen_Disc_Count : Nat := 0;
           Seen_Discs        : Elist_Id;
           Disc              : Entity_Id;
*************** package body Sem_Ch6 is
*** 1189,1224 ****
                and then Present (Disc)
                and then Ekind (Etype (Disc)) = E_Anonymous_Access_Type
              then
!                --  Perform a static check first, if possible
  
!                if Static_Accessibility_Level
!                     (Expr              => Assoc_Expr,
!                      Level             => Zero_On_Dynamic_Level,
!                      In_Return_Context => True)
!                       > Scope_Depth (Scope (Scope_Id))
                 then
                    Error_Msg_N
                      ("access discriminant in return object would be a dangling"
                       & " reference", Return_Stmt);
- 
-                   exit;
-                end if;
- 
-                --  Otherwise, generate a dynamic check based on the extra
-                --  accessibility of the result.
- 
-                if Present (Extra_Accessibility_Of_Result (Scope_Id)) then
-                   Insert_Before_And_Analyze (Return_Stmt,
-                     Make_Raise_Program_Error (Loc,
-                       Condition =>
-                         Make_Op_Gt (Loc,
-                           Left_Opnd  => Accessibility_Level
-                                           (Expr              => Assoc_Expr,
-                                            Level             => Dynamic_Level,
-                                            In_Return_Context => True),
-                           Right_Opnd => Extra_Accessibility_Of_Result
-                                           (Scope_Id)),
-                       Reason    => PE_Accessibility_Check_Failed));
                 end if;
              end if;
  
--- 1179,1217 ----
                and then Present (Disc)
                and then Ekind (Etype (Disc)) = E_Anonymous_Access_Type
              then
!                --  Generate a dynamic check based on the extra accessibility of
!                --  the result or the scope.
  
!                Check_Cond :=
!                  Make_Op_Gt (Loc,
!                    Left_Opnd  => Accessibility_Level
!                                    (Expr              => Assoc_Expr,
!                                     Level             => Dynamic_Level,
!                                     In_Return_Context => True),
!                    Right_Opnd => (if Present
!                                        (Extra_Accessibility_Of_Result
!                                          (Scope_Id))
!                                   then
!                                      Extra_Accessibility_Of_Result (Scope_Id)
!                                   else
!                                      Make_Integer_Literal
!                                        (Loc, Scope_Depth (Scope (Scope_Id)))));
! 
!                Insert_Before_And_Analyze (Return_Stmt,
!                  Make_Raise_Program_Error (Loc,
!                    Condition => Check_Cond,
!                    Reason    => PE_Accessibility_Check_Failed));
! 
!                --  If constant folding has happened on the condition for the
!                --  generated error, then warn about it being unconditional when
!                --  we know an error will be raised.
! 
!                if Nkind (Check_Cond) = N_Identifier
!                  and then Entity (Check_Cond) = Standard_True
                 then
                    Error_Msg_N
                      ("access discriminant in return object would be a dangling"
                       & " reference", Return_Stmt);
                 end if;
              end if;
  
*************** package body Sem_Ch6 is
*** 1446,1458 ****
  
              Check_Return_Construct_Accessibility (N);
  
!             --  Ada 2020 (AI12-0269): Any return statement that applies to a
              --  nonreturning function shall be a simple_return_statement with
              --  an expression that is a raise_expression, or else a call on a
              --  nonreturning function, or else a parenthesized expression of
              --  one of these.
  
!             if Ada_Version >= Ada_2020
                and then No_Return (Scope_Id)
                and then Comes_From_Source (N)
              then
--- 1439,1451 ----
  
              Check_Return_Construct_Accessibility (N);
  
!             --  Ada 2022 (AI12-0269): Any return statement that applies to a
              --  nonreturning function shall be a simple_return_statement with
              --  an expression that is a raise_expression, or else a call on a
              --  nonreturning function, or else a parenthesized expression of
              --  one of these.
  
!             if Ada_Version >= Ada_2022
                and then No_Return (Scope_Id)
                and then Comes_From_Source (N)
              then
*************** package body Sem_Ch6 is
*** 1531,1544 ****
              --  Check RM 6.5 (5.9/3)
  
              if Has_Aliased then
!                if Ada_Version < Ada_2012 then
! 
!                   --  Shouldn't this test Warn_On_Ada_2012_Compatibility ???
!                   --  Can it really happen (extended return???)
! 
                    Error_Msg_N
                      ("ALIASED only allowed for limited return objects "
!                      & "in Ada 2012??", N);
  
                 elsif not Is_Limited_View (R_Type) then
                    Error_Msg_N
--- 1524,1535 ----
              --  Check RM 6.5 (5.9/3)
  
              if Has_Aliased then
!                if Ada_Version < Ada_2012
!                  and then Warn_On_Ada_2012_Compatibility
!                then
                    Error_Msg_N
                      ("ALIASED only allowed for limited return objects "
!                      & "in Ada 2012?y?", N);
  
                 elsif not Is_Limited_View (R_Type) then
                    Error_Msg_N
*************** package body Sem_Ch6 is
*** 1546,1555 ****
                 end if;
              end if;
  
!             --  Ada 2020 (AI12-0269): Any return statement that applies to a
              --  nonreturning function shall be a simple_return_statement.
  
!             if Ada_Version >= Ada_2020
                and then No_Return (Scope_Id)
                and then Comes_From_Source (N)
              then
--- 1537,1546 ----
                 end if;
              end if;
  
!             --  Ada 2022 (AI12-0269): Any return statement that applies to a
              --  nonreturning function shall be a simple_return_statement.
  
!             if Ada_Version >= Ada_2022
                and then No_Return (Scope_Id)
                and then Comes_From_Source (N)
              then
*************** package body Sem_Ch6 is
*** 1670,1678 ****
                 Related_Nod => N);
           end if;
  
!          --  ??? A real run-time accessibility check is needed in cases
!          --  involving dereferences of access parameters. For now we just
!          --  check the static cases.
  
           if (Ada_Version < Ada_2005 or else Debug_Flag_Dot_L)
             and then Is_Limited_View (Etype (Scope_Id))
--- 1661,1669 ----
                 Related_Nod => N);
           end if;
  
!          --  Perform static accessibility checks for cases involving
!          --  dereferences of access parameters. Runtime accessibility checks
!          --  get generated elsewhere.
  
           if (Ada_Version < Ada_2005 or else Debug_Flag_Dot_L)
             and then Is_Limited_View (Etype (Scope_Id))
*************** package body Sem_Ch6 is
*** 1693,1699 ****
  
                 Error_Msg_Warn := SPARK_Mode /= On;
                 Error_Msg_N ("cannot return a local value by reference<<", N);
!                Error_Msg_NE ("\& [<<", N, Standard_Program_Error);
              end if;
           end if;
  
--- 1684,1690 ----
  
                 Error_Msg_Warn := SPARK_Mode /= On;
                 Error_Msg_N ("cannot return a local value by reference<<", N);
!                Error_Msg_N ("\Program_Error [<<", N);
              end if;
           end if;
  
*************** package body Sem_Ch6 is
*** 1770,1782 ****
        if Kind = E_Generic_Procedure
          and then Nkind (Spec) /= N_Procedure_Specification
        then
!          Error_Msg_N ("invalid body for generic procedure ", Body_Id);
           return;
  
        elsif Kind = E_Generic_Function
          and then Nkind (Spec) /= N_Function_Specification
        then
!          Error_Msg_N ("invalid body for generic function ", Body_Id);
           return;
        end if;
  
--- 1761,1773 ----
        if Kind = E_Generic_Procedure
          and then Nkind (Spec) /= N_Procedure_Specification
        then
!          Error_Msg_N ("invalid body for generic procedure", Body_Id);
           return;
  
        elsif Kind = E_Generic_Function
          and then Nkind (Spec) /= N_Function_Specification
        then
!          Error_Msg_N ("invalid body for generic function", Body_Id);
           return;
        end if;
  
*************** package body Sem_Ch6 is
*** 1792,1798 ****
        end if;
  
        if Nkind (N) = N_Subprogram_Body_Stub then
!          Set_Ekind (Defining_Entity (Specification (N)), Kind);
        else
           Set_Corresponding_Spec (N, Gen_Id);
        end if;
--- 1783,1789 ----
        end if;
  
        if Nkind (N) = N_Subprogram_Body_Stub then
!          Mutate_Ekind (Defining_Entity (Specification (N)), Kind);
        else
           Set_Corresponding_Spec (N, Gen_Id);
        end if;
*************** package body Sem_Ch6 is
*** 1843,1850 ****
  
           --  Visible generic entity is callable within its own body
  
!          Set_Ekind          (Gen_Id,  Ekind (Body_Id));
!          Set_Ekind          (Body_Id, E_Subprogram_Body);
           Set_Convention     (Body_Id, Convention (Gen_Id));
           Set_Is_Obsolescent (Body_Id, Is_Obsolescent (Gen_Id));
           Set_Scope          (Body_Id, Scope (Gen_Id));
--- 1834,1846 ----
  
           --  Visible generic entity is callable within its own body
  
!          Mutate_Ekind       (Gen_Id,  Ekind (Body_Id));
!          Reinit_Field_To_Zero (Body_Id, F_Has_Out_Or_In_Out_Parameter,
!            Old_Ekind =>
!              (E_Function | E_Procedure |
!                 E_Generic_Function | E_Generic_Procedure => True,
!               others => False));
!          Mutate_Ekind       (Body_Id, E_Subprogram_Body);
           Set_Convention     (Body_Id, Convention (Gen_Id));
           Set_Is_Obsolescent (Body_Id, Is_Obsolescent (Gen_Id));
           Set_Scope          (Body_Id, Scope (Gen_Id));
*************** package body Sem_Ch6 is
*** 1855,1862 ****
  
              --  No body to analyze, so restore state of generic unit
  
!             Set_Ekind (Gen_Id, Kind);
!             Set_Ekind (Body_Id, Kind);
  
              if Present (First_Ent) then
                 Set_First_Entity (Gen_Id, First_Ent);
--- 1851,1858 ----
  
              --  No body to analyze, so restore state of generic unit
  
!             Mutate_Ekind (Gen_Id, Kind);
!             Mutate_Ekind (Body_Id, Kind);
  
              if Present (First_Ent) then
                 Set_First_Entity (Gen_Id, First_Ent);
*************** package body Sem_Ch6 is
*** 1920,1926 ****
  
        --  Outside of its body, unit is generic again
  
!       Set_Ekind (Gen_Id, Kind);
        Generate_Reference (Gen_Id, Body_Id, 'b', Set_Ref => False);
  
        if Style_Check then
--- 1916,1924 ----
  
        --  Outside of its body, unit is generic again
  
!       Reinit_Field_To_Zero (Gen_Id, F_Has_Nested_Subprogram,
!         Old_Ekind => (E_Function | E_Procedure => True, others => False));
!       Mutate_Ekind (Gen_Id, Kind);
        Generate_Reference (Gen_Id, Body_Id, 'b', Set_Ref => False);
  
        if Style_Check then
*************** package body Sem_Ch6 is
*** 2015,2021 ****
  
        if Present (Prev) and then Is_Generic_Subprogram (Prev) then
           Insert_Before (N, Null_Body);
!          Set_Ekind (Defining_Entity (N), Ekind (Prev));
  
           Rewrite (N, Make_Null_Statement (Loc));
           Analyze_Generic_Subprogram_Body (Null_Body, Prev);
--- 2013,2019 ----
  
        if Present (Prev) and then Is_Generic_Subprogram (Prev) then
           Insert_Before (N, Null_Body);
!          Mutate_Ekind (Defining_Entity (N), Ekind (Prev));
  
           Rewrite (N, Make_Null_Statement (Loc));
           Analyze_Generic_Subprogram_Body (Null_Body, Prev);
*************** package body Sem_Ch6 is
*** 2131,2138 ****
                    and then Attribute_Name (Par) /= Name_Value)
          or else (Nkind (Maybe_Aspect_Spec) = N_Aspect_Specification
                    and then Get_Aspect_Id (Maybe_Aspect_Spec)
!                             --  include other aspects here ???
!                             in Aspect_Stable_Properties | Aspect_Aggregate)
        then
           Find_Direct_Name (N);
  
--- 2129,2143 ----
                    and then Attribute_Name (Par) /= Name_Value)
          or else (Nkind (Maybe_Aspect_Spec) = N_Aspect_Specification
                    and then Get_Aspect_Id (Maybe_Aspect_Spec)
! 
!                             --  Include aspects that can be specified by a
!                             --  subprogram name, which can be an operator.
! 
!                             in  Aspect_Stable_Properties
!                               | Aspect_Integer_Literal
!                               | Aspect_Real_Literal
!                               | Aspect_String_Literal
!                               | Aspect_Aggregate)
        then
           Find_Direct_Name (N);
  
*************** package body Sem_Ch6 is
*** 2328,2334 ****
           if Present (Actuals) then
              Analyze_Call_And_Resolve;
           else
!             Error_Msg_N ("missing explicit dereference in call ", N);
           end if;
  
        --  If not an access to subprogram, then the prefix must resolve to the
--- 2333,2339 ----
           if Present (Actuals) then
              Analyze_Call_And_Resolve;
           else
!             Error_Msg_N ("missing explicit dereference in call", N);
           end if;
  
        --  If not an access to subprogram, then the prefix must resolve to the
*************** package body Sem_Ch6 is
*** 2605,2610 ****
--- 2610,2627 ----
        Analyze_Dimension (N);
     end Analyze_Return_Statement;
  
+    -----------------------------------
+    -- Analyze_Return_When_Statement --
+    -----------------------------------
+ 
+    procedure Analyze_Return_When_Statement (N : Node_Id) is
+    begin
+       --  Verify the condition is a Boolean expression
+ 
+       Analyze_And_Resolve (Condition (N), Any_Boolean);
+       Check_Unset_Reference (Condition (N));
+    end Analyze_Return_When_Statement;
+ 
     -------------------------------------
     -- Analyze_Simple_Return_Statement --
     -------------------------------------
*************** package body Sem_Ch6 is
*** 2696,2708 ****
                    end if;
  
                 else
-                   Ensure_Freeze_Node (Typ);
- 
                    declare
                       IR : constant Node_Id := Make_Itype_Reference (Sloc (N));
                    begin
                       Set_Itype (IR, Etype (Designator));
!                      Append_Freeze_Actions (Typ, New_List (IR));
                    end;
                 end if;
  
--- 2713,2723 ----
                    end if;
  
                 else
                    declare
                       IR : constant Node_Id := Make_Itype_Reference (Sloc (N));
                    begin
                       Set_Itype (IR, Etype (Designator));
!                      Append_Freeze_Action (Typ, IR);
                    end;
                 end if;
  
*************** package body Sem_Ch6 is
*** 3416,3430 ****
              Prag := Empty;
           end if;
  
!          if Present (Prag) then
              if Present (Spec_Id) then
!                if Is_List_Member (N)
!                  and then Is_List_Member (Unit_Declaration_Node (Spec_Id))
                   and then In_Same_List (N, Unit_Declaration_Node (Spec_Id))
                 then
                    Analyze (Prag);
                 end if;
- 
              else
                 --  Create a subprogram declaration, to make treatment uniform.
                 --  Make the sloc of the subprogram name that of the entity in
--- 3431,3443 ----
              Prag := Empty;
           end if;
  
!          if Present (Prag) and then Is_List_Member (N) then
              if Present (Spec_Id) then
!                if Is_List_Member (Unit_Declaration_Node (Spec_Id))
                   and then In_Same_List (N, Unit_Declaration_Node (Spec_Id))
                 then
                    Analyze (Prag);
                 end if;
              else
                 --  Create a subprogram declaration, to make treatment uniform.
                 --  Make the sloc of the subprogram name that of the entity in
*************** package body Sem_Ch6 is
*** 3443,3449 ****
                    --  Link the body and the generated spec
  
                    Set_Corresponding_Body (Decl, Body_Id);
!                   Set_Corresponding_Spec (N, Subp);
  
                    Set_Defining_Unit_Name (Specification (Decl), Subp);
  
--- 3456,3467 ----
                    --  Link the body and the generated spec
  
                    Set_Corresponding_Body (Decl, Body_Id);
! 
!                   if Nkind (N) = N_Subprogram_Body_Stub then
!                      Set_Corresponding_Spec_Of_Stub (N, Subp);
!                   else
!                      Set_Corresponding_Spec (N, Subp);
!                   end if;
  
                    Set_Defining_Unit_Name (Specification (Decl), Subp);
  
*************** package body Sem_Ch6 is
*** 3818,3824 ****
           Result : Elist_Id := No_Elist;
  
           function Mask_Type_Refs (Node : Node_Id) return Traverse_Result;
!          --  Mask all types referenced in the subtree rooted at Node
  
           --------------------
           -- Mask_Type_Refs --
--- 3836,3843 ----
           Result : Elist_Id := No_Elist;
  
           function Mask_Type_Refs (Node : Node_Id) return Traverse_Result;
!          --  Mask all types referenced in the subtree rooted at Node as
!          --  formally frozen.
  
           --------------------
           -- Mask_Type_Refs --
*************** package body Sem_Ch6 is
*** 3826,3832 ****
  
           function Mask_Type_Refs (Node : Node_Id) return Traverse_Result is
              procedure Mask_Type (Typ : Entity_Id);
!             --  ??? what does this do?
  
              ---------------
              -- Mask_Type --
--- 3845,3852 ----
  
           function Mask_Type_Refs (Node : Node_Id) return Traverse_Result is
              procedure Mask_Type (Typ : Entity_Id);
!             --  Mask a given type as formally frozen when outside the current
!             --  scope, or else freeze the type.
  
              ---------------
              -- Mask_Type --
*************** package body Sem_Ch6 is
*** 4061,4067 ****
                and then Operator_Matches_Spec (Spec_Id, Spec_Id)
              then
                 Error_Msg_NE
!                  ("subprogram& overrides predefined operator ",
                      Body_Spec, Spec_Id);
  
              --  Overriding indicators aren't allowed for protected subprogram
--- 4081,4087 ----
                and then Operator_Matches_Spec (Spec_Id, Spec_Id)
              then
                 Error_Msg_NE
!                  ("subprogram& overrides predefined operator",
                      Body_Spec, Spec_Id);
  
              --  Overriding indicators aren't allowed for protected subprogram
*************** package body Sem_Ch6 is
*** 4486,4514 ****
           end if;
        end if;
  
-       --  If the subprogram has a class-wide clone, build its body as a copy
-       --  of the original body, and rewrite body of original subprogram as a
-       --  wrapper that calls the clone. If N is a stub, this construction will
-       --  take place when the proper body is analyzed. No action needed if this
-       --  subprogram has been eliminated.
- 
-       if Present (Spec_Id)
-         and then Present (Class_Wide_Clone (Spec_Id))
-         and then (Comes_From_Source (N) or else Was_Expression_Function (N))
-         and then Nkind (N) /= N_Subprogram_Body_Stub
-         and then not (Expander_Active and then Is_Eliminated (Spec_Id))
-       then
-          Build_Class_Wide_Clone_Body (Spec_Id, N);
- 
-          --  This is the new body for the existing primitive operation
- 
-          Rewrite (N, Build_Class_Wide_Clone_Call
-            (Sloc (N), New_List, Spec_Id, Parent (Spec_Id)));
-          Set_Has_Completion (Spec_Id, False);
-          Analyze (N);
-          return;
-       end if;
- 
        --  Place subprogram on scope stack, and make formals visible. If there
        --  is a spec, the visible entity remains that of the spec.
  
--- 4506,4511 ----
*************** package body Sem_Ch6 is
*** 4568,4573 ****
--- 4565,4581 ----
              then
                 Conformant := True;
  
+             --  Finally, a body generated for an expression function copies
+             --  the profile of the function and no check is needed either.
+             --  If the body is the completion of a previous function
+             --  declared elsewhere, the conformance check is required.
+ 
+             elsif Nkind (N) = N_Subprogram_Body
+               and then Was_Expression_Function (N)
+               and then Sloc (Spec_Id) = Sloc (Body_Id)
+             then
+                Conformant := True;
+ 
              else
                 Check_Conformance
                   (Body_Id, Spec_Id,
*************** package body Sem_Ch6 is
*** 4601,4607 ****
              Reference_Body_Formals (Spec_Id, Body_Id);
           end if;
  
!          Set_Ekind (Body_Id, E_Subprogram_Body);
  
           if Nkind (N) = N_Subprogram_Body_Stub then
              Set_Corresponding_Spec_Of_Stub (N, Spec_Id);
--- 4609,4627 ----
              Reference_Body_Formals (Spec_Id, Body_Id);
           end if;
  
!          Reinit_Field_To_Zero (Body_Id, F_Has_Out_Or_In_Out_Parameter);
!          Reinit_Field_To_Zero (Body_Id, F_Needs_No_Actuals,
!            Old_Ekind => (E_Function | E_Procedure => True, others => False));
!          Reinit_Field_To_Zero (Body_Id, F_Is_Predicate_Function,
!            Old_Ekind => (E_Function | E_Procedure => True, others => False));
!          Reinit_Field_To_Zero (Body_Id, F_Protected_Subprogram,
!            Old_Ekind => (E_Function | E_Procedure => True, others => False));
! 
!          if Ekind (Body_Id) = E_Procedure then
!             Reinit_Field_To_Zero (Body_Id, F_Receiving_Entry);
!          end if;
! 
!          Mutate_Ekind (Body_Id, E_Subprogram_Body);
  
           if Nkind (N) = N_Subprogram_Body_Stub then
              Set_Corresponding_Spec_Of_Stub (N, Spec_Id);
*************** package body Sem_Ch6 is
*** 5020,5026 ****
        --  object representing the minimum of the accessibility level value that
        --  is passed in and the accessibility level of the callee's parameter
        --  and locals and use it in the case of a call to a nested subprogram.
!       --  This generated object is refered to as a "minimum accessiblity
        --  level."
  
        if Present (Spec_Id) or else Present (Body_Id) then
--- 5040,5046 ----
        --  object representing the minimum of the accessibility level value that
        --  is passed in and the accessibility level of the callee's parameter
        --  and locals and use it in the case of a call to a nested subprogram.
!       --  This generated object is referred to as a "minimum accessibility
        --  level."
  
        if Present (Spec_Id) or else Present (Body_Id) then
*************** package body Sem_Ch6 is
*** 5644,5660 ****
           end;
        end if;
  
-       --  What is the following code for, it used to be
- 
-       --  ???   Set_Suppress_Elaboration_Checks
-       --  ???     (Designator, Elaboration_Checks_Suppressed (Designator));
- 
-       --  The following seems equivalent, but a bit dubious
- 
-       if Elaboration_Checks_Suppressed (Designator) then
-          Set_Kill_Elaboration_Checks (Designator);
-       end if;
- 
        --  For a compilation unit, set body required. This flag will only be
        --  reset if a valid Import or Interface pragma is processed later on.
  
--- 5664,5669 ----
*************** package body Sem_Ch6 is
*** 5766,5775 ****
        end if;
  
        if Nkind (N) = N_Function_Specification then
!          Set_Ekind (Designator, E_Function);
           Set_Mechanism (Designator, Default_Mechanism);
        else
!          Set_Ekind (Designator, E_Procedure);
           Set_Etype (Designator, Standard_Void_Type);
        end if;
  
--- 5775,5784 ----
        end if;
  
        if Nkind (N) = N_Function_Specification then
!          Mutate_Ekind (Designator, E_Function);
           Set_Mechanism (Designator, Default_Mechanism);
        else
!          Mutate_Ekind (Designator, E_Procedure);
           Set_Etype (Designator, Standard_Void_Type);
        end if;
  
*************** package body Sem_Ch6 is
*** 5954,5959 ****
--- 5963,5979 ----
        --  True if the null exclusions of two formals of anonymous access type
        --  match.
  
+       function Subprogram_Subtypes_Have_Same_Declaration
+         (Subp         : Entity_Id;
+          Decl_Subtype : Entity_Id;
+          Body_Subtype : Entity_Id) return Boolean;
+       --  Checks whether corresponding subtypes named within a subprogram
+       --  declaration and body originate from the same declaration, and returns
+       --  True when they do. In the case of anonymous access-to-object types,
+       --  checks the designated types. Also returns True when GNAT_Mode is
+       --  enabled, or when the subprogram is marked Is_Internal or occurs
+       --  within a generic instantiation or internal unit (GNAT library unit).
+ 
        -----------------------
        -- Conformance_Error --
        -----------------------
*************** package body Sem_Ch6 is
*** 6086,6091 ****
--- 6106,6191 ----
           end if;
        end Null_Exclusions_Match;
  
+       function Subprogram_Subtypes_Have_Same_Declaration
+         (Subp         : Entity_Id;
+          Decl_Subtype : Entity_Id;
+          Body_Subtype : Entity_Id) return Boolean
+       is
+ 
+          function Nonlimited_View_Of_Subtype
+            (Subt : Entity_Id) return Entity_Id;
+          --  Returns the nonlimited view of a type or subtype that is an
+          --  incomplete or class-wide type that comes from a limited view of
+          --  a package (From_Limited_With is True for the entity), or the
+          --  full view when the subtype is an incomplete type. Otherwise
+          --  returns the entity passed in.
+ 
+          function Nonlimited_View_Of_Subtype
+            (Subt : Entity_Id) return Entity_Id
+          is
+             Subt_Temp : Entity_Id := Subt;
+          begin
+             if Ekind (Subt) in Incomplete_Kind | E_Class_Wide_Type
+               and then From_Limited_With (Subt)
+             then
+                Subt_Temp := Non_Limited_View (Subt);
+             end if;
+ 
+             --  If the subtype is incomplete, return full view if present
+             --  (and accounts for the case where a type from a limited view
+             --  is itself an incomplete type).
+ 
+             if Ekind (Subt_Temp) in Incomplete_Kind
+               and then Present (Full_View (Subt_Temp))
+             then
+                Subt_Temp := Full_View (Subt_Temp);
+             end if;
+ 
+             return Subt_Temp;
+          end Nonlimited_View_Of_Subtype;
+ 
+       --  Start of processing for Subprogram_Subtypes_Have_Same_Declaration
+ 
+       begin
+          if not In_Instance
+            and then not In_Internal_Unit (Subp)
+            and then not Is_Internal (Subp)
+            and then not GNAT_Mode
+            and then
+              Ekind (Etype (Decl_Subtype)) not in Access_Subprogram_Kind
+          then
+             if Ekind (Etype (Decl_Subtype)) = E_Anonymous_Access_Type then
+                if Nonlimited_View_Of_Subtype (Designated_Type (Decl_Subtype))
+                  /= Nonlimited_View_Of_Subtype (Designated_Type (Body_Subtype))
+                then
+                   return False;
+                end if;
+ 
+             elsif Nonlimited_View_Of_Subtype (Decl_Subtype)
+                /= Nonlimited_View_Of_Subtype (Body_Subtype)
+             then
+                --  Avoid returning False (and a false-positive warning) for
+                --  the case of "not null" itypes, which will appear to be
+                --  different subtypes even when the subtype_marks denote
+                --  the same subtype.
+ 
+                if Ekind (Decl_Subtype) = E_Access_Subtype
+                  and then Ekind (Body_Subtype) = E_Access_Subtype
+                  and then Is_Itype (Body_Subtype)
+                  and then Can_Never_Be_Null (Body_Subtype)
+                  and then Etype (Decl_Subtype) = Etype (Body_Subtype)
+                then
+                   return True;
+ 
+                else
+                   return False;
+                end if;
+             end if;
+          end if;
+ 
+          return True;
+       end Subprogram_Subtypes_Have_Same_Declaration;
+ 
        --  Local Variables
  
        Old_Type           : constant Entity_Id := Etype (Old_Id);
*************** package body Sem_Ch6 is
*** 6139,6144 ****
--- 6239,6256 ----
              end if;
  
              return;
+ 
+          --  If the result subtypes conform and pedantic checks are enabled,
+          --  check to see whether the subtypes originate from different
+          --  declarations, and issue a warning when they do.
+ 
+          elsif Ctype = Fully_Conformant
+            and then Warn_On_Pedantic_Checks
+            and then not Subprogram_Subtypes_Have_Same_Declaration
+                           (Old_Id, Old_Type, New_Type)
+          then
+             Error_Msg_N ("result subtypes conform but come from different "
+                           & "declarations?_p?", New_Id);
           end if;
  
           --  Ada 2005 (AI-231): In case of anonymous access types check the
*************** package body Sem_Ch6 is
*** 6255,6261 ****
  
              --  Null exclusion must match
  
!             if not Null_Exclusions_Match (Old_Formal, New_Formal) then
                 Conformance_Error
                   ("\null exclusion for& does not match", New_Formal);
  
--- 6367,6375 ----
  
              --  Null exclusion must match
  
!             if not Relaxed_RM_Semantics
!               and then not Null_Exclusions_Match (Old_Formal, New_Formal)
!             then
                 Conformance_Error
                   ("\null exclusion for& does not match", New_Formal);
  
*************** package body Sem_Ch6 is
*** 6333,6338 ****
--- 6447,6464 ----
              end if;
  
              return;
+ 
+          --  If the formals' subtypes conform and pedantic checks are enabled,
+          --  check to see whether the subtypes originate from different
+          --  declarations, and issue a warning when they do.
+ 
+          elsif Ctype = Fully_Conformant
+            and then Warn_On_Pedantic_Checks
+            and then not Subprogram_Subtypes_Have_Same_Declaration
+                           (Old_Id, Old_Formal_Base, New_Formal_Base)
+          then
+             Error_Msg_N ("formal subtypes conform but come from "
+                           & "different declarations?_p?", New_Formal);
           end if;
  
           --  For mode conformance, mode must match
*************** package body Sem_Ch6 is
*** 6727,6744 ****
        --  may not be known yet (for private types).
  
        if not Has_Delayed_Freeze (Designator) and then Expander_Active then
!          declare
!             Typ  : constant Entity_Id := Etype (Designator);
!             Utyp : constant Entity_Id := Underlying_Type (Typ);
! 
!          begin
!             if Is_Limited_View (Typ) then
!                Set_Returns_By_Ref (Designator);
! 
!             elsif Present (Utyp) and then CW_Or_Has_Controlled_Part (Utyp) then
!                Set_Returns_By_Ref (Designator);
!             end if;
!          end;
        end if;
     end Check_Delayed_Subprogram;
  
--- 6853,6859 ----
        --  may not be known yet (for private types).
  
        if not Has_Delayed_Freeze (Designator) and then Expander_Active then
!          Compute_Returns_By_Ref (Designator);
        end if;
     end Check_Delayed_Subprogram;
  
*************** package body Sem_Ch6 is
*** 6990,7005 ****
        --  A limited interface that is not immutably limited is OK
  
        if Is_Limited_Interface (R_Type)
!         and then
!           not (Is_Task_Interface (R_Type)
!                 or else Is_Protected_Interface (R_Type)
!                 or else Is_Synchronized_Interface (R_Type))
        then
           null;
  
        elsif Is_Limited_Type (R_Type)
          and then not Is_Interface (R_Type)
!         and then Comes_From_Source (N)
          and then not In_Instance_Body
          and then not OK_For_Limited_Init_In_05 (R_Type, Expr)
        then
--- 7105,7118 ----
        --  A limited interface that is not immutably limited is OK
  
        if Is_Limited_Interface (R_Type)
!         and then not Is_Concurrent_Interface (R_Type)
        then
           null;
  
        elsif Is_Limited_Type (R_Type)
          and then not Is_Interface (R_Type)
!         and then not (Nkind (N) = N_Simple_Return_Statement
!                       and then Comes_From_Extended_Return_Statement (N))
          and then not In_Instance_Body
          and then not OK_For_Limited_Init_In_05 (R_Type, Expr)
        then
*************** package body Sem_Ch6 is
*** 7261,7270 ****
--- 7374,7387 ----
                 then
                    Set_Overridden_Operation    (Subp, Alias (Overridden_Subp));
                    Inherit_Subprogram_Contract (Subp, Alias (Overridden_Subp));
+                   Set_Is_Ada_2022_Only        (Subp,
+                     Is_Ada_2022_Only (Alias (Overridden_Subp)));
  
                 else
                    Set_Overridden_Operation    (Subp, Overridden_Subp);
                    Inherit_Subprogram_Contract (Subp, Overridden_Subp);
+                   Set_Is_Ada_2022_Only        (Subp,
+                     Is_Ada_2022_Only (Overridden_Subp));
                 end if;
              end if;
           end if;
*************** package body Sem_Ch6 is
*** 7293,7299 ****
        --  predefined signature, because we know already that there is no
        --  explicit overridden operation.
  
!       elsif Nkind (Subp) = N_Defining_Operator_Symbol then
           if Must_Not_Override (Spec) then
  
              --  If this is not a primitive or a protected subprogram, then
--- 7410,7416 ----
        --  predefined signature, because we know already that there is no
        --  explicit overridden operation.
  
!       elsif Chars (Subp) in Any_Operator_Name then
           if Must_Not_Override (Spec) then
  
              --  If this is not a primitive or a protected subprogram, then
*************** package body Sem_Ch6 is
*** 7307,7313 ****
  
              elsif Can_Override_Operator (Subp) then
                 Error_Msg_NE
!                  ("subprogram& overrides predefined operator ", Spec, Subp);
              end if;
  
           elsif Must_Override (Spec) then
--- 7424,7430 ----
  
              elsif Can_Override_Operator (Subp) then
                 Error_Msg_NE
!                  ("subprogram& overrides predefined operator", Spec, Subp);
              end if;
  
           elsif Must_Override (Spec) then
*************** package body Sem_Ch6 is
*** 7737,7743 ****
                   ("RETURN statement missing following this statement<<!",
                    Last_Stm);
                 Error_Msg_N
!                  ("\Program_Error ]<<!", Last_Stm);
              end if;
  
              --  Note: we set Err even though we have not issued a warning
--- 7854,7860 ----
                   ("RETURN statement missing following this statement<<!",
                    Last_Stm);
                 Error_Msg_N
!                  ("\Program_Error [<<!", Last_Stm);
              end if;
  
              --  Note: we set Err even though we have not issued a warning
*************** package body Sem_Ch6 is
*** 8285,8291 ****
        Typ : Entity_Id;
  
     begin
!       if Nkind (Subp) /= N_Defining_Operator_Symbol then
           return False;
  
        else
--- 8402,8413 ----
        Typ : Entity_Id;
  
     begin
!       --  Return False if not an operator. We test the name rather than testing
!       --  that the Nkind is N_Defining_Operator_Symbol, because there are cases
!       --  where an operator entity can be an N_Defining_Identifier (such as for
!       --  function instantiations).
! 
!       if Chars (Subp) not in Any_Operator_Name then
           return False;
  
        else
*************** package body Sem_Ch6 is
*** 8775,8781 ****
              return Empty;
           end if;
  
!          Set_Ekind           (EF, E_In_Parameter);
           Set_Actual_Subtype  (EF, Typ);
           Set_Etype           (EF, Typ);
           Set_Scope           (EF, Scope);
--- 8897,8903 ----
              return Empty;
           end if;
  
!          Mutate_Ekind        (EF, E_In_Parameter);
           Set_Actual_Subtype  (EF, Typ);
           Set_Etype           (EF, Typ);
           Set_Scope           (EF, Scope);
*************** package body Sem_Ch6 is
*** 8874,8880 ****
              end if;
  
              if not Has_Discriminants (Formal_Type)
!               and then Ekind (Formal_Type) in Private_Kind
                and then Present (Underlying_Type (Formal_Type))
              then
                 Formal_Type := Underlying_Type (Formal_Type);
--- 8996,9002 ----
              end if;
  
              if not Has_Discriminants (Formal_Type)
!               and then Is_Private_Type (Formal_Type)
                and then Present (Underlying_Type (Formal_Type))
              then
                 Formal_Type := Underlying_Type (Formal_Type);
*************** package body Sem_Ch6 is
*** 9021,9027 ****
              if Needs_BIP_Task_Actuals (E) then
                 Discard :=
                   Add_Extra_Formal
!                    (E, RTE (RE_Master_Id),
                      E, BIP_Formal_Suffix (BIP_Task_Master));
  
                 Set_Has_Master_Entity (E);
--- 9143,9149 ----
              if Needs_BIP_Task_Actuals (E) then
                 Discard :=
                   Add_Extra_Formal
!                    (E, Standard_Integer,
                      E, BIP_Formal_Suffix (BIP_Task_Master));
  
                 Set_Has_Master_Entity (E);
*************** package body Sem_Ch6 is
*** 9452,9464 ****
           end if;
  
        --  Here if type is not frozen yet. It is illegal to have a primitive
!       --  equality declared in the private part if the type is visible.
  
        elsif not In_Same_List (Parent (Typ), Decl)
          and then not Is_Limited_Type (Typ)
        then
-          --  Shouldn't we give an RM reference here???
- 
           if Ada_Version >= Ada_2012 then
              Error_Msg_N
                ("equality operator appears too late<<", Eq_Op);
--- 9574,9585 ----
           end if;
  
        --  Here if type is not frozen yet. It is illegal to have a primitive
!       --  equality declared in the private part if the type is visible
!       --  (RM 4.5.2(9.8)).
  
        elsif not In_Same_List (Parent (Typ), Decl)
          and then not Is_Limited_Type (Typ)
        then
           if Ada_Version >= Ada_2012 then
              Error_Msg_N
                ("equality operator appears too late<<", Eq_Op);
*************** package body Sem_Ch6 is
*** 9789,9795 ****
        --  conform when they do not, e.g. by converting 1+2 into 3.
  
        function FCE (Given_E1 : Node_Id; Given_E2 : Node_Id) return Boolean;
!       --  ???
  
        function FCL (L1 : List_Id; L2 : List_Id) return Boolean;
        --  Compare elements of two lists for conformance. Elements have to be
--- 9910,9917 ----
        --  conform when they do not, e.g. by converting 1+2 into 3.
  
        function FCE (Given_E1 : Node_Id; Given_E2 : Node_Id) return Boolean;
!       --  Convenience function to abbreviate recursive calls to
!       --  Fully_Conformant_Expressions without having to pass Report.
  
        function FCL (L1 : List_Id; L2 : List_Id) return Boolean;
        --  Compare elements of two lists for conformance. Elements have to be
*************** package body Sem_Ch6 is
*** 10391,10396 ****
--- 10513,10519 ----
     begin
        Set_Is_Immediately_Visible (E);
        Set_Current_Entity (E);
+       pragma Assert (Prev /= E);
        Set_Homonym (E, Prev);
     end Install_Entity;
  
*************** package body Sem_Ch6 is
*** 10713,10720 ****
                             exit;
                          end if;
  
!                         Next_Entity (P_Formal);
!                         Next_Entity (N_Formal);
                       end loop;
  
                       --  Found a matching primitive operation belonging to the
--- 10836,10843 ----
                             exit;
                          end if;
  
!                         Next_Formal (P_Formal);
!                         Next_Formal (N_Formal);
                       end loop;
  
                       --  Found a matching primitive operation belonging to the
*************** package body Sem_Ch6 is
*** 10750,10756 ****
                    Error_Msg_Node_2 := F_Typ;
                    Error_Msg_NE
                      ("private operation& in generic unit does not override "
!                      & "any primitive operation of& (RM 12.3 (18))??",
                       New_E, New_E);
                 end if;
  
--- 10873,10879 ----
                    Error_Msg_Node_2 := F_Typ;
                    Error_Msg_NE
                      ("private operation& in generic unit does not override "
!                      & "any primitive operation of& (RM 12.3(18))??",
                       New_E, New_E);
                 end if;
  
*************** package body Sem_Ch6 is
*** 10791,10801 ****
                          if Pragma_Name (Prag) = Name_Precondition then
                             Error_Msg_N
                               ("info: & inherits `Pre''Class` aspect from "
!                               & "#?L?", E);
                          else
                             Error_Msg_N
                               ("info: & inherits `Post''Class` aspect from "
!                               & "#?L?", E);
                          end if;
                       end if;
  
--- 10914,10924 ----
                          if Pragma_Name (Prag) = Name_Precondition then
                             Error_Msg_N
                               ("info: & inherits `Pre''Class` aspect from "
!                               & "#?.l?", E);
                          else
                             Error_Msg_N
                               ("info: & inherits `Post''Class` aspect from "
!                               & "#?.l?", E);
                          end if;
                       end if;
  
*************** package body Sem_Ch6 is
*** 10991,10999 ****
          (Is_Primitive  : out Boolean;
           Is_Overriding : Boolean := False)
        is
!          Formal : Entity_Id;
!          F_Typ  : Entity_Id;
!          B_Typ  : Entity_Id;
  
           function Visible_Part_Type (T : Entity_Id) return Boolean;
           --  Returns true if T is declared in the visible part of the current
--- 11114,11124 ----
          (Is_Primitive  : out Boolean;
           Is_Overriding : Boolean := False)
        is
!          procedure Add_Or_Replace_Untagged_Primitive (Typ : Entity_Id);
!          --  Either add the new subprogram to the list of primitives for
!          --  untagged type Typ, or if it overrides a primitive of Typ, then
!          --  replace the overridden primitive in Typ's primitives list with
!          --  the new subprogram.
  
           function Visible_Part_Type (T : Entity_Id) return Boolean;
           --  Returns true if T is declared in the visible part of the current
*************** package body Sem_Ch6 is
*** 11008,11013 ****
--- 11133,11195 ----
           --  in a private part, then it must override a function declared in
           --  the visible part.
  
+          ---------------------------------------
+          -- Add_Or_Replace_Untagged_Primitive --
+          ---------------------------------------
+ 
+          procedure Add_Or_Replace_Untagged_Primitive (Typ : Entity_Id) is
+             Replaced_Overridden_Subp : Boolean := False;
+ 
+          begin
+             pragma Assert (not Is_Tagged_Type (Typ));
+ 
+             --  Anonymous access types don't have a primitives list. Normally
+             --  such types wouldn't make it here, but the case of anonymous
+             --  access-to-subprogram types can.
+ 
+             if not Is_Anonymous_Access_Type (Typ) then
+ 
+                --  If S overrides a subprogram that's a primitive of
+                --  the formal's type, then replace the overridden
+                --  subprogram with the new subprogram in the type's
+                --  list of primitives.
+ 
+                if Is_Overriding then
+                   pragma Assert (Present (Overridden_Subp)
+                     and then Overridden_Subp = E);  -- Added for now
+ 
+                   declare
+                      Prim_Ops : constant Elist_Id :=
+                        Primitive_Operations (Typ);
+                      Elmt     : Elmt_Id;
+                   begin
+                      if Present (Prim_Ops) then
+                         Elmt := First_Elmt (Prim_Ops);
+ 
+                         while Present (Elmt)
+                           and then Node (Elmt) /= Overridden_Subp
+                         loop
+                            Next_Elmt (Elmt);
+                         end loop;
+ 
+                         if Present (Elmt) then
+                            Replace_Elmt (Elmt, S);
+                            Replaced_Overridden_Subp := True;
+                         end if;
+                      end if;
+                   end;
+                end if;
+ 
+                --  If the new subprogram did not override an operation
+                --  of the formal's type, then add it to the primitives
+                --  list of the type.
+ 
+                if not Replaced_Overridden_Subp then
+                   Append_Unique_Elmt (S, Primitive_Operations (Typ));
+                end if;
+             end if;
+          end Add_Or_Replace_Untagged_Primitive;
+ 
           ------------------------------
           -- Check_Private_Overriding --
           ------------------------------
*************** package body Sem_Ch6 is
*** 11163,11169 ****
              --  If the entity is a private type, then it must be declared in a
              --  visible part.
  
!             if Ekind (T) in Private_Kind then
                 return True;
  
              elsif Is_Type (T) and then Has_Private_Declaration (T) then
--- 11345,11351 ----
              --  If the entity is a private type, then it must be declared in a
              --  visible part.
  
!             if Is_Private_Type (T) then
                 return True;
  
              elsif Is_Type (T) and then Has_Private_Declaration (T) then
*************** package body Sem_Ch6 is
*** 11180,11192 ****
              end if;
           end Visible_Part_Type;
  
        --  Start of processing for Check_For_Primitive_Subprogram
  
        begin
           Is_Primitive := False;
  
           if not Comes_From_Source (S) then
!             null;
  
           --  If subprogram is at library level, it is not primitive operation
  
--- 11362,11390 ----
              end if;
           end Visible_Part_Type;
  
+          --  Local variables
+ 
+          Formal : Entity_Id;
+          F_Typ  : Entity_Id;
+          B_Typ  : Entity_Id;
+ 
        --  Start of processing for Check_For_Primitive_Subprogram
  
        begin
           Is_Primitive := False;
  
           if not Comes_From_Source (S) then
! 
!             --  Add an inherited primitive for an untagged derived type to
!             --  Derived_Type's list of primitives. Tagged primitives are
!             --  dealt with in Check_Dispatching_Operation. Do this even when
!             --  Extensions_Allowed is False to issue better error messages.
! 
!             if Present (Derived_Type)
!               and then not Is_Tagged_Type (Derived_Type)
!             then
!                Append_Unique_Elmt (S, Primitive_Operations (Derived_Type));
!             end if;
  
           --  If subprogram is at library level, it is not primitive operation
  
*************** package body Sem_Ch6 is
*** 11215,11222 ****
                    Is_Primitive := True;
                    Set_Has_Primitive_Operations (B_Typ);
                    Set_Is_Primitive (S);
-                   Check_Private_Overriding (B_Typ);
  
                    --  The Ghost policy in effect at the point of declaration
                    --  or a tagged type and a primitive operation must match
                    --  (SPARK RM 6.9(16)).
--- 11413,11430 ----
                    Is_Primitive := True;
                    Set_Has_Primitive_Operations (B_Typ);
                    Set_Is_Primitive (S);
  
+                   --  Add a primitive for an untagged type to B_Typ's
+                   --  list of primitives. Tagged primitives are dealt with
+                   --  in Check_Dispatching_Operation. Do this even when
+                   --  Extensions_Allowed is False to issue better error
+                   --  messages.
+ 
+                   if not Is_Tagged_Type (B_Typ) then
+                      Add_Or_Replace_Untagged_Primitive (B_Typ);
+                   end if;
+ 
+                   Check_Private_Overriding (B_Typ);
                    --  The Ghost policy in effect at the point of declaration
                    --  or a tagged type and a primitive operation must match
                    --  (SPARK RM 6.9(16)).
*************** package body Sem_Ch6 is
*** 11248,11253 ****
--- 11456,11472 ----
                    Is_Primitive := True;
                    Set_Is_Primitive (S);
                    Set_Has_Primitive_Operations (B_Typ);
+ 
+                   --  Add a primitive for an untagged type to B_Typ's list
+                   --  of primitives. Tagged primitives are dealt with in
+                   --  Check_Dispatching_Operation. Do this even when
+                   --  Extensions_Allowed is False to issue better error
+                   --  messages.
+ 
+                   if not Is_Tagged_Type (B_Typ) then
+                      Add_Or_Replace_Untagged_Primitive (B_Typ);
+                   end if;
+ 
                    Check_Private_Overriding (B_Typ);
  
                    --  The Ghost policy in effect at the point of declaration
*************** package body Sem_Ch6 is
*** 11418,11424 ****
              E : Entity_Id;
  
           begin
!             --  Search for entities in the enclosing scope of this synchonized
              --  type.
  
              pragma Assert (Is_Concurrent_Type (Conc_Typ));
--- 11637,11643 ----
              E : Entity_Id;
  
           begin
!             --  Search for entities in the enclosing scope of this synchronized
              --  type.
  
              pragma Assert (Is_Concurrent_Type (Conc_Typ));
*************** package body Sem_Ch6 is
*** 11681,11687 ****
           if Inside_Freezing_Actions = 0
             and then Is_Package_Or_Generic_Package (Current_Scope)
             and then In_Private_Part (Current_Scope)
!            and then Nkind (Parent (E)) = N_Private_Extension_Declaration
             and then Nkind (Parent (S)) = N_Full_Type_Declaration
             and then Full_View (Defining_Identifier (Parent (E)))
                        = Defining_Identifier (Parent (S))
--- 11900,11906 ----
           if Inside_Freezing_Actions = 0
             and then Is_Package_Or_Generic_Package (Current_Scope)
             and then In_Private_Part (Current_Scope)
!            and then Parent_Kind (E) = N_Private_Extension_Declaration
             and then Nkind (Parent (S)) = N_Full_Type_Declaration
             and then Full_View (Defining_Identifier (Parent (E)))
                        = Defining_Identifier (Parent (S))
*************** package body Sem_Ch6 is
*** 11758,11768 ****
           --  renaming declaration becomes hidden.
  
           if Ekind (E) = E_Package
!            and then Present (Renamed_Object (E))
!            and then Renamed_Object (E) = Current_Scope
!            and then Nkind (Parent (Renamed_Object (E))) =
                                                       N_Package_Specification
!            and then Present (Generic_Parent (Parent (Renamed_Object (E))))
           then
              Set_Is_Hidden (E);
              Set_Is_Immediately_Visible (E, False);
--- 11977,11987 ----
           --  renaming declaration becomes hidden.
  
           if Ekind (E) = E_Package
!            and then Present (Renamed_Entity (E))
!            and then Renamed_Entity (E) = Current_Scope
!            and then Nkind (Parent (Renamed_Entity (E))) =
                                                       N_Package_Specification
!            and then Present (Generic_Parent (Parent (Renamed_Entity (E))))
           then
              Set_Is_Hidden (E);
              Set_Is_Immediately_Visible (E, False);
*************** package body Sem_Ch6 is
*** 11878,11887 ****
--- 12097,12109 ----
                    if Present (Alias (S)) then
                       Set_Overridden_Operation    (E, Alias (S));
                       Inherit_Subprogram_Contract (E, Alias (S));
+                      Set_Is_Ada_2022_Only        (E,
+                        Is_Ada_2022_Only (Alias (S)));
  
                    else
                       Set_Overridden_Operation    (E, S);
                       Inherit_Subprogram_Contract (E, S);
+                      Set_Is_Ada_2022_Only        (E, Is_Ada_2022_Only (S));
                    end if;
  
                    --  When a dispatching operation overrides an inherited
*************** package body Sem_Ch6 is
*** 12048,12053 ****
--- 12270,12277 ----
                    then
                       Set_Overridden_Operation    (S, Alias (E));
                       Inherit_Subprogram_Contract (S, Alias (E));
+                      Set_Is_Ada_2022_Only        (S,
+                        Is_Ada_2022_Only (Alias (E)));
  
                    --  Normal case of setting entity as overridden
  
*************** package body Sem_Ch6 is
*** 12059,12066 ****
                    --  must check whether the target is an init_proc.
  
                    elsif not Is_Init_Proc (S) then
!                      Set_Overridden_Operation    (S, E);
!                      Inherit_Subprogram_Contract (S, E);
                    end if;
  
                    Check_Overriding_Indicator (S, E, Is_Primitive => True);
--- 12283,12304 ----
                    --  must check whether the target is an init_proc.
  
                    elsif not Is_Init_Proc (S) then
! 
!                      --  LSP wrappers must override the ultimate alias of their
!                      --  wrapped dispatching primitive E; required to traverse
!                      --  the chain of ancestor primitives (c.f. Map_Primitives)
!                      --  They don't inherit contracts.
! 
!                      if Is_Wrapper (S)
!                        and then Present (LSP_Subprogram (S))
!                      then
!                         Set_Overridden_Operation    (S, Ultimate_Alias (E));
!                      else
!                         Set_Overridden_Operation    (S, E);
!                         Inherit_Subprogram_Contract (S, E);
!                      end if;
! 
!                      Set_Is_Ada_2022_Only (S, Is_Ada_2022_Only (E));
                    end if;
  
                    Check_Overriding_Indicator (S, E, Is_Primitive => True);
*************** package body Sem_Ch6 is
*** 12087,12094 ****
                            Is_Predefined_Dispatching_Operation (Alias (E)))
                    then
                       if Present (Alias (E)) then
!                         Set_Overridden_Operation    (S, Alias (E));
!                         Inherit_Subprogram_Contract (S, Alias (E));
                       end if;
                    end if;
  
--- 12325,12346 ----
                            Is_Predefined_Dispatching_Operation (Alias (E)))
                    then
                       if Present (Alias (E)) then
! 
!                         --  LSP wrappers must override the ultimate alias of
!                         --  their wrapped dispatching primitive E; required to
!                         --  traverse the chain of ancestor primitives (see
!                         --  Map_Primitives). They don't inherit contracts.
! 
!                         if Is_Wrapper (S)
!                           and then Present (LSP_Subprogram (S))
!                         then
!                            Set_Overridden_Operation    (S, Ultimate_Alias (E));
!                         else
!                            Set_Overridden_Operation    (S, Alias (E));
!                            Inherit_Subprogram_Contract (S, Alias (E));
!                         end if;
! 
!                         Set_Is_Ada_2022_Only (S, Is_Ada_2022_Only (Alias (E)));
                       end if;
                    end if;
  
*************** package body Sem_Ch6 is
*** 12963,12992 ****
                 end if;
  
                 if In_Present (Spec) then
!                   Set_Ekind (Formal_Id, E_In_Out_Parameter);
                 else
!                   Set_Ekind (Formal_Id, E_Out_Parameter);
                 end if;
  
              --  But not in earlier versions of Ada
  
              else
                 Error_Msg_N ("functions can only have IN parameters", Spec);
!                Set_Ekind (Formal_Id, E_In_Parameter);
              end if;
  
           elsif In_Present (Spec) then
!             Set_Ekind (Formal_Id, E_In_Out_Parameter);
  
           else
!             Set_Ekind               (Formal_Id, E_Out_Parameter);
              Set_Never_Set_In_Source (Formal_Id, True);
              Set_Is_True_Constant    (Formal_Id, False);
              Set_Current_Value       (Formal_Id, Empty);
           end if;
  
        else
!          Set_Ekind (Formal_Id, E_In_Parameter);
        end if;
  
        --  Set Is_Known_Non_Null for access parameters since the language
--- 13215,13244 ----
                 end if;
  
                 if In_Present (Spec) then
!                   Mutate_Ekind (Formal_Id, E_In_Out_Parameter);
                 else
!                   Mutate_Ekind (Formal_Id, E_Out_Parameter);
                 end if;
  
              --  But not in earlier versions of Ada
  
              else
                 Error_Msg_N ("functions can only have IN parameters", Spec);
!                Mutate_Ekind (Formal_Id, E_In_Parameter);
              end if;
  
           elsif In_Present (Spec) then
!             Mutate_Ekind (Formal_Id, E_In_Out_Parameter);
  
           else
!             Mutate_Ekind            (Formal_Id, E_Out_Parameter);
              Set_Never_Set_In_Source (Formal_Id, True);
              Set_Is_True_Constant    (Formal_Id, False);
              Set_Current_Value       (Formal_Id, Empty);
           end if;
  
        else
!          Mutate_Ekind (Formal_Id, E_In_Parameter);
        end if;
  
        --  Set Is_Known_Non_Null for access parameters since the language
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch6.ads gcc-12.1.0/gcc/ada/sem_ch6.ads
*** gcc-11.3.0/gcc/ada/sem_ch6.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch6.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Ch6 is
*** 41,46 ****
--- 41,47 ----
     procedure Analyze_Operator_Symbol                 (N : Node_Id);
     procedure Analyze_Parameter_Association           (N : Node_Id);
     procedure Analyze_Procedure_Call                  (N : Node_Id);
+    procedure Analyze_Return_When_Statement           (N : Node_Id);
     procedure Analyze_Simple_Return_Statement         (N : Node_Id);
     procedure Analyze_Subprogram_Declaration          (N : Node_Id);
     procedure Analyze_Subprogram_Body                 (N : Node_Id);
*************** package Sem_Ch6 is
*** 50,55 ****
--- 51,59 ----
     --  and body declarations. Returns the defining entity for the
     --  specification N.
  
+    function Can_Override_Operator (Subp : Entity_Id) return Boolean;
+    --  Returns true if Subp can override a predefined operator
+ 
     procedure Check_Conventions (Typ : Entity_Id);
     --  Ada 2005 (AI-430): Check that the conventions of all inherited and
     --  overridden dispatching operations of type Typ are consistent with their
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch7.adb gcc-12.1.0/gcc/ada/sem_ch7.adb
*** gcc-11.3.0/gcc/ada/sem_ch7.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch7.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 28,74 ****
  --  handling of private and full declarations, and the construction of dispatch
  --  tables for tagged types.
  
! with Aspects;   use Aspects;
! with Atree;     use Atree;
! with Contracts; use Contracts;
! with Debug;     use Debug;
! with Einfo;     use Einfo;
! with Elists;    use Elists;
! with Errout;    use Errout;
! with Exp_Disp;  use Exp_Disp;
! with Exp_Dist;  use Exp_Dist;
! with Exp_Dbug;  use Exp_Dbug;
! with Freeze;    use Freeze;
! with Ghost;     use Ghost;
! with GNAT_CUDA; use GNAT_CUDA;
! with Lib;       use Lib;
! with Lib.Xref;  use Lib.Xref;
! with Namet;     use Namet;
! with Nmake;     use Nmake;
! with Nlists;    use Nlists;
! with Opt;       use Opt;
! with Output;    use Output;
! with Rtsfind;   use Rtsfind;
! with Sem;       use Sem;
! with Sem_Aux;   use Sem_Aux;
! with Sem_Cat;   use Sem_Cat;
! with Sem_Ch3;   use Sem_Ch3;
! with Sem_Ch6;   use Sem_Ch6;
! with Sem_Ch8;   use Sem_Ch8;
! with Sem_Ch10;  use Sem_Ch10;
! with Sem_Ch12;  use Sem_Ch12;
! with Sem_Ch13;  use Sem_Ch13;
! with Sem_Disp;  use Sem_Disp;
! with Sem_Eval;  use Sem_Eval;
! with Sem_Prag;  use Sem_Prag;
! with Sem_Util;  use Sem_Util;
! with Sem_Warn;  use Sem_Warn;
! with Snames;    use Snames;
! with Stand;     use Stand;
! with Sinfo;     use Sinfo;
! with Sinput;    use Sinput;
  with Style;
! with Uintp;     use Uintp;
  
  with GNAT.HTable;
  
--- 28,77 ----
  --  handling of private and full declarations, and the construction of dispatch
  --  tables for tagged types.
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Contracts;      use Contracts;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Disp;       use Exp_Disp;
! with Exp_Dist;       use Exp_Dist;
! with Exp_Dbug;       use Exp_Dbug;
! with Freeze;         use Freeze;
! with Ghost;          use Ghost;
! with Lib;            use Lib;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Nmake;          use Nmake;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Output;         use Output;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch10;       use Sem_Ch10;
! with Sem_Ch12;       use Sem_Ch12;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
  with Style;
! with Uintp;          use Uintp;
  
  with GNAT.HTable;
  
*************** package body Sem_Ch7 is
*** 756,761 ****
--- 759,766 ----
                   ("optional package body (not allowed in Ada 95)??", N);
              else
                 Error_Msg_N ("spec of this package does not allow a body", N);
+                Error_Msg_N ("\either remove the body or add pragma "
+                             & "Elaborate_Body in the spec", N);
              end if;
           end if;
        end if;
*************** package body Sem_Ch7 is
*** 840,846 ****
           --  unannotated body will be used in all instantiations.
  
           Body_Id := Defining_Entity (N);
!          Set_Ekind (Body_Id, E_Package_Body);
           Set_Scope (Body_Id, Scope (Spec_Id));
           Set_Is_Obsolescent (Body_Id, Is_Obsolescent (Spec_Id));
           Set_Body_Entity (Spec_Id, Body_Id);
--- 845,851 ----
           --  unannotated body will be used in all instantiations.
  
           Body_Id := Defining_Entity (N);
!          Mutate_Ekind (Body_Id, E_Package_Body);
           Set_Scope (Body_Id, Scope (Spec_Id));
           Set_Is_Obsolescent (Body_Id, Is_Obsolescent (Spec_Id));
           Set_Body_Entity (Spec_Id, Body_Id);
*************** package body Sem_Ch7 is
*** 872,878 ****
        --  current node otherwise. Note that N was rewritten above, so we must
        --  be sure to get the latest Body_Id value.
  
!       Set_Ekind (Body_Id, E_Package_Body);
        Set_Body_Entity (Spec_Id, Body_Id);
        Set_Spec_Entity (Body_Id, Spec_Id);
  
--- 877,883 ----
        --  current node otherwise. Note that N was rewritten above, so we must
        --  be sure to get the latest Body_Id value.
  
!       Mutate_Ekind (Body_Id, E_Package_Body);
        Set_Body_Entity (Spec_Id, Body_Id);
        Set_Spec_Entity (Body_Id, Spec_Id);
  
*************** package body Sem_Ch7 is
*** 1000,1012 ****
           Analyze_List (Declarations (N));
        end if;
  
-       --  If procedures marked with CUDA_Global have been defined within N, we
-       --  need to register them with the CUDA runtime at program startup. This
-       --  requires multiple declarations and function calls which need to be
-       --  appended to N's declarations.
- 
-       Build_And_Insert_CUDA_Initialization (N);
- 
        HSS := Handled_Statement_Sequence (N);
  
        if Present (HSS) then
--- 1005,1010 ----
*************** package body Sem_Ch7 is
*** 1165,1171 ****
  
        Generate_Definition (Id);
        Enter_Name (Id);
!       Set_Ekind  (Id, E_Package);
        Set_Etype  (Id, Standard_Void_Type);
  
        --  Set SPARK_Mode from context
--- 1163,1169 ----
  
        Generate_Definition (Id);
        Enter_Name (Id);
!       Mutate_Ekind  (Id, E_Package);
        Set_Etype  (Id, Standard_Void_Type);
  
        --  Set SPARK_Mode from context
*************** package body Sem_Ch7 is
*** 1772,1785 ****
           end if;
  
           --  Check preelaborable initialization for full type completing a
!          --  private type for which pragma Preelaborable_Initialization given.
  
!          if Is_Type (E)
!            and then Must_Have_Preelab_Init (E)
!            and then not Has_Preelaborable_Initialization (E)
!          then
!             Error_Msg_N
!               ("full view of & does not have preelaborable initialization", E);
           end if;
  
           Next_Entity (E);
--- 1770,1803 ----
           end if;
  
           --  Check preelaborable initialization for full type completing a
!          --  private type when aspect Preelaborable_Initialization is True
!          --  or is specified by Preelaborable_Initialization attributes
!          --  (in the case of a private type in a generic unit). We pass
!          --  the expression of the aspect (when present) to the parameter
!          --  Preelab_Init_Expr to take into account the rule that presumes
!          --  that subcomponents of generic formal types mentioned in the
!          --  type's P_I aspect have preelaborable initialization (see
!          --  AI12-0409 and RM 10.2.1(11.8/5)).
  
!          if Is_Type (E) and then Must_Have_Preelab_Init (E) then
!             declare
!                PI_Aspect : constant Node_Id :=
!                              Find_Aspect
!                                (E, Aspect_Preelaborable_Initialization);
!                PI_Expr   : Node_Id := Empty;
!             begin
!                if Present (PI_Aspect) then
!                   PI_Expr := Expression (PI_Aspect);
!                end if;
! 
!                if not Has_Preelaborable_Initialization
!                         (E, Preelab_Init_Expr => PI_Expr)
!                then
!                   Error_Msg_N
!                     ("full view of & does not have "
!                      & "preelaborable initialization", E);
!                end if;
!             end;
           end if;
  
           Next_Entity (E);
*************** package body Sem_Ch7 is
*** 1895,1901 ****
     begin
        Generate_Definition (Id);
        Set_Is_Pure         (Id, PF);
!       Init_Size_Align     (Id);
  
        if not Is_Package_Or_Generic_Package (Current_Scope)
          or else In_Private_Part (Current_Scope)
--- 1913,1919 ----
     begin
        Generate_Definition (Id);
        Set_Is_Pure         (Id, PF);
!       Reinit_Size_Align   (Id);
  
        if not Is_Package_Or_Generic_Package (Current_Scope)
          or else In_Private_Part (Current_Scope)
*************** package body Sem_Ch7 is
*** 2065,2070 ****
--- 2083,2090 ----
                             Replace_Elmt (Op_Elmt, New_Op);
                             Remove_Elmt  (Op_List, Op_Elmt_2);
                             Set_Overridden_Operation (New_Op, Parent_Subp);
+                            Set_Is_Ada_2022_Only     (New_Op,
+                              Is_Ada_2022_Only (Parent_Subp));
  
                             --  We don't need to inherit its dispatching slot.
                             --  Set_All_DT_Position has previously ensured that
*************** package body Sem_Ch7 is
*** 2562,2576 ****
        end if;
  
        if Limited_Present (Def) then
!          Set_Ekind (Id, E_Limited_Private_Type);
        else
!          Set_Ekind (Id, E_Private_Type);
        end if;
  
        Set_Etype              (Id, Id);
        Set_Has_Delayed_Freeze (Id);
        Set_Is_First_Subtype   (Id);
!       Init_Size_Align        (Id);
  
        Set_Is_Constrained (Id,
          No (Discriminant_Specifications (N))
--- 2582,2596 ----
        end if;
  
        if Limited_Present (Def) then
!          Mutate_Ekind (Id, E_Limited_Private_Type);
        else
!          Mutate_Ekind (Id, E_Private_Type);
        end if;
  
        Set_Etype              (Id, Id);
        Set_Has_Delayed_Freeze (Id);
        Set_Is_First_Subtype   (Id);
!       Reinit_Size_Align      (Id);
  
        Set_Is_Constrained (Id,
          No (Discriminant_Specifications (N))
*************** package body Sem_Ch7 is
*** 2596,2602 ****
        Set_Private_Dependents (Id, New_Elmt_List);
  
        if Tagged_Present (Def) then
!          Set_Ekind                       (Id, E_Record_Type_With_Private);
           Set_Direct_Primitive_Operations (Id, New_Elmt_List);
           Set_Is_Abstract_Type            (Id, Abstract_Present (Def));
           Set_Is_Limited_Record           (Id, Limited_Present (Def));
--- 2616,2622 ----
        Set_Private_Dependents (Id, New_Elmt_List);
  
        if Tagged_Present (Def) then
!          Mutate_Ekind                    (Id, E_Record_Type_With_Private);
           Set_Direct_Primitive_Operations (Id, New_Elmt_List);
           Set_Is_Abstract_Type            (Id, Abstract_Present (Def));
           Set_Is_Limited_Record           (Id, Limited_Present (Def));
*************** package body Sem_Ch7 is
*** 2614,2619 ****
--- 2634,2648 ----
  
        elsif Abstract_Present (Def) then
           Error_Msg_N ("only a tagged type can be abstract", N);
+ 
+       --  We initialize the primitive operations list of an untagged private
+       --  type to an empty element list. Do this even when Extensions_Allowed
+       --  is False to issue better error messages. (Note: This could be done
+       --  for all private types and shared with the tagged case above, but
+       --  for now we do it separately.)
+ 
+       else
+          Set_Direct_Primitive_Operations (Id, New_Elmt_List);
        end if;
     end New_Private_Type;
  
*************** package body Sem_Ch7 is
*** 2721,2733 ****
  
        begin
           Set_Size_Info               (Priv,                             Full);
!          Set_RM_Size                 (Priv, RM_Size                    (Full));
           Set_Size_Known_At_Compile_Time
                                       (Priv, Size_Known_At_Compile_Time (Full));
           Set_Is_Volatile             (Priv, Is_Volatile                (Full));
           Set_Treat_As_Volatile       (Priv, Treat_As_Volatile          (Full));
           Set_Is_Ada_2005_Only        (Priv, Is_Ada_2005_Only           (Full));
           Set_Is_Ada_2012_Only        (Priv, Is_Ada_2012_Only           (Full));
           Set_Has_Pragma_Unmodified   (Priv, Has_Pragma_Unmodified      (Full));
           Set_Has_Pragma_Unreferenced (Priv, Has_Pragma_Unreferenced    (Full));
           Set_Has_Pragma_Unreferenced_Objects
--- 2750,2764 ----
  
        begin
           Set_Size_Info               (Priv,                             Full);
!          Copy_RM_Size                (To => Priv, From => Full);
           Set_Size_Known_At_Compile_Time
                                       (Priv, Size_Known_At_Compile_Time (Full));
           Set_Is_Volatile             (Priv, Is_Volatile                (Full));
           Set_Treat_As_Volatile       (Priv, Treat_As_Volatile          (Full));
+          Set_Is_Atomic               (Priv, Is_Atomic                  (Full));
           Set_Is_Ada_2005_Only        (Priv, Is_Ada_2005_Only           (Full));
           Set_Is_Ada_2012_Only        (Priv, Is_Ada_2012_Only           (Full));
+          Set_Is_Ada_2022_Only        (Priv, Is_Ada_2022_Only           (Full));
           Set_Has_Pragma_Unmodified   (Priv, Has_Pragma_Unmodified      (Full));
           Set_Has_Pragma_Unreferenced (Priv, Has_Pragma_Unreferenced    (Full));
           Set_Has_Pragma_Unreferenced_Objects
*************** package body Sem_Ch7 is
*** 2737,2743 ****
           if Is_Unchecked_Union (Full) then
              Set_Is_Unchecked_Union (Base_Type (Priv));
           end if;
-          --  Why is atomic not copied here ???
  
           if Referenced (Full) then
              Set_Referenced (Priv);
--- 2768,2773 ----
*************** package body Sem_Ch7 is
*** 2932,2937 ****
--- 2962,2972 ----
                    Set_Is_Potentially_Use_Visible (Id);
                 end if;
  
+             --  Avoid crash caused by previous errors
+ 
+             elsif No (Etype (Id)) and then Serious_Errors_Detected /= 0 then
+                null;
+ 
              --  We need to avoid incorrectly marking enumeration literals as
              --  non-visible when a visible use-all-type clause is in effect.
  
*************** package body Sem_Ch7 is
*** 3330,3341 ****
        --  Body required if library package with pragma Elaborate_Body
  
        elsif Has_Pragma_Elaborate_Body (Pack_Id) then
!          Error_Msg_N ("info: & requires body (Elaborate_Body)?Y?", Pack_Id);
  
        --  Body required if subprogram
  
        elsif Is_Subprogram_Or_Generic_Subprogram (Pack_Id) then
!          Error_Msg_N ("info: & requires body (subprogram case)?Y?", Pack_Id);
  
        --  Body required if generic parent has Elaborate_Body
  
--- 3365,3376 ----
        --  Body required if library package with pragma Elaborate_Body
  
        elsif Has_Pragma_Elaborate_Body (Pack_Id) then
!          Error_Msg_N ("info: & requires body (Elaborate_Body)?.y?", Pack_Id);
  
        --  Body required if subprogram
  
        elsif Is_Subprogram_Or_Generic_Subprogram (Pack_Id) then
!          Error_Msg_N ("info: & requires body (subprogram case)?.y?", Pack_Id);
  
        --  Body required if generic parent has Elaborate_Body
  
*************** package body Sem_Ch7 is
*** 3348,3354 ****
           begin
              if Has_Pragma_Elaborate_Body (G_P) then
                 Error_Msg_N
!                  ("info: & requires body (generic parent Elaborate_Body)?Y?",
                    Pack_Id);
              end if;
           end;
--- 3383,3389 ----
           begin
              if Has_Pragma_Elaborate_Body (G_P) then
                 Error_Msg_N
!                  ("info: & requires body (generic parent Elaborate_Body)?.y?",
                    Pack_Id);
              end if;
           end;
*************** package body Sem_Ch7 is
*** 3366,3372 ****
                         (Node (First_Elmt (Abstract_States (Pack_Id))))
        then
           Error_Msg_N
!            ("info: & requires body (non-null abstract state aspect)?Y?",
              Pack_Id);
        end if;
  
--- 3401,3407 ----
                         (Node (First_Elmt (Abstract_States (Pack_Id))))
        then
           Error_Msg_N
!            ("info: & requires body (non-null abstract state aspect)?.y?",
              Pack_Id);
        end if;
  
*************** package body Sem_Ch7 is
*** 3377,3383 ****
           if Requires_Completion_In_Body (E, Pack_Id) then
              Error_Msg_Node_2 := E;
              Error_Msg_NE
!               ("info: & requires body (& requires completion)?Y?", E, Pack_Id);
           end if;
  
           Next_Entity (E);
--- 3412,3419 ----
           if Requires_Completion_In_Body (E, Pack_Id) then
              Error_Msg_Node_2 := E;
              Error_Msg_NE
!               ("info: & requires body (& requires completion)?.y?", E,
!                Pack_Id);
           end if;
  
           Next_Entity (E);
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch7.ads gcc-12.1.0/gcc/ada/sem_ch7.ads
*** gcc-11.3.0/gcc/ada/sem_ch7.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch7.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch8.adb gcc-12.1.0/gcc/ada/sem_ch8.adb
*** gcc-11.3.0/gcc/ada/sem_ch8.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch8.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,77 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Exp_Disp; use Exp_Disp;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Ghost;    use Ghost;
! with Impunit;  use Impunit;
! with Lib;      use Lib;
! with Lib.Load; use Lib.Load;
! with Lib.Xref; use Lib.Xref;
! with Namet;    use Namet;
! with Namet.Sp; use Namet.Sp;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Output;   use Output;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Cat;  use Sem_Cat;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch4;  use Sem_Ch4;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch10; use Sem_Ch10;
! with Sem_Ch12; use Sem_Ch12;
! with Sem_Ch13; use Sem_Ch13;
! with Sem_Dim;  use Sem_Dim;
! with Sem_Disp; use Sem_Disp;
! with Sem_Dist; use Sem_Dist;
! with Sem_Elab; use Sem_Elab;
! with Sem_Eval; use Sem_Eval;
! with Sem_Prag; use Sem_Prag;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sem_Type; use Sem_Type;
! with Stand;    use Stand;
! with Sinfo;    use Sinfo;
! with Sinfo.CN; use Sinfo.CN;
! with Snames;   use Snames;
  with Style;
  with Table;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
  
  package body Sem_Ch8 is
  
--- 23,81 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Disp;       use Exp_Disp;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Ghost;          use Ghost;
! with Impunit;        use Impunit;
! with Lib;            use Lib;
! with Lib.Load;       use Lib.Load;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Namet.Sp;       use Namet.Sp;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Output;         use Output;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch4;        use Sem_Ch4;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch10;       use Sem_Ch10;
! with Sem_Ch12;       use Sem_Ch12;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Dim;        use Sem_Dim;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sem_Type;       use Sem_Type;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinfo.CN;       use Sinfo.CN;
! with Snames;         use Snames;
  with Style;
  with Table;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
  
  package body Sem_Ch8 is
  
*************** package body Sem_Ch8 is
*** 422,433 ****
     --  body at the point of freezing will not work. Subp is the subprogram
     --  for which N provides the Renaming_As_Body.
  
!    procedure Check_In_Previous_With_Clause
!      (N   : Node_Id;
!       Nam : Node_Id);
     --  N is a use_package clause and Nam the package name, or N is a use_type
     --  clause and Nam is the prefix of the type name. In either case, verify
!    --  that the package is visible at that point in the context: either  it
     --  appears in a previous with_clause, or because it is a fully qualified
     --  name and the root ancestor appears in a previous with_clause.
  
--- 426,435 ----
     --  body at the point of freezing will not work. Subp is the subprogram
     --  for which N provides the Renaming_As_Body.
  
!    procedure Check_In_Previous_With_Clause (N, Nam : Node_Id);
     --  N is a use_package clause and Nam the package name, or N is a use_type
     --  clause and Nam is the prefix of the type name. In either case, verify
!    --  that the package is visible at that point in the context: either it
     --  appears in a previous with_clause, or because it is a fully qualified
     --  name and the root ancestor appears in a previous with_clause.
  
*************** package body Sem_Ch8 is
*** 477,487 ****
     --  legality of selector given the scope denoted by prefix, and change node
     --  N into a expanded name with a properly set Entity field.
  
!    function Find_Most_Prev (Use_Clause : Node_Id) return Node_Id;
     --  Find the most previous use clause (that is, the first one to appear in
     --  the source) by traversing the previous clause chain that exists in both
     --  N_Use_Package_Clause nodes and N_Use_Type_Clause nodes.
-    --  ??? a better subprogram name is in order
  
     function Find_Renamed_Entity
       (N         : Node_Id;
--- 479,488 ----
     --  legality of selector given the scope denoted by prefix, and change node
     --  N into a expanded name with a properly set Entity field.
  
!    function Find_First_Use (Use_Clause : Node_Id) return Node_Id;
     --  Find the most previous use clause (that is, the first one to appear in
     --  the source) by traversing the previous clause chain that exists in both
     --  N_Use_Package_Clause nodes and N_Use_Type_Clause nodes.
  
     function Find_Renamed_Entity
       (N         : Node_Id;
*************** package body Sem_Ch8 is
*** 525,531 ****
        Clause2 : Entity_Id) return Entity_Id;
     --  Determine which use clause parameter is the most descendant in terms of
     --  scope.
-    --  ??? a better subprogram name is in order
  
     procedure Premature_Usage (N : Node_Id);
     --  Diagnose usage of an entity before it is visible
--- 526,531 ----
*************** package body Sem_Ch8 is
*** 568,574 ****
        Enter_Name (Id);
        Analyze (Nam);
  
!       Set_Ekind   (Id, E_Exception);
        Set_Etype   (Id, Standard_Exception_Type);
        Set_Is_Pure (Id, Is_Pure (Current_Scope));
  
--- 568,574 ----
        Enter_Name (Id);
        Analyze (Nam);
  
!       Mutate_Ekind   (Id, E_Exception);
        Set_Etype   (Id, Standard_Exception_Type);
        Set_Is_Pure (Id, Is_Pure (Current_Scope));
  
*************** package body Sem_Ch8 is
*** 576,585 ****
          and then Present (Entity (Nam))
          and then Ekind (Entity (Nam)) = E_Exception
        then
!          if Present (Renamed_Object (Entity (Nam))) then
!             Set_Renamed_Object (Id, Renamed_Object (Entity (Nam)));
           else
!             Set_Renamed_Object (Id, Entity (Nam));
           end if;
  
           --  The exception renaming declaration may become Ghost if it renames
--- 576,585 ----
          and then Present (Entity (Nam))
          and then Ekind (Entity (Nam)) = E_Exception
        then
!          if Present (Renamed_Entity (Entity (Nam))) then
!             Set_Renamed_Entity (Id, Renamed_Entity (Entity (Nam)));
           else
!             Set_Renamed_Entity (Id, Entity (Nam));
           end if;
  
           --  The exception renaming declaration may become Ghost if it renames
*************** package body Sem_Ch8 is
*** 697,703 ****
        end if;
  
        Enter_Name (New_P);
!       Set_Ekind (New_P, K);
  
        if Etype (Old_P) = Any_Type then
           null;
--- 697,703 ----
        end if;
  
        Enter_Name (New_P);
!       Mutate_Ekind (New_P, K);
  
        if Etype (Old_P) = Any_Type then
           null;
*************** package body Sem_Ch8 is
*** 706,715 ****
           Error_Msg_N ("invalid generic unit name", Name (N));
  
        else
!          if Present (Renamed_Object (Old_P)) then
!             Set_Renamed_Object (New_P, Renamed_Object (Old_P));
           else
!             Set_Renamed_Object (New_P, Old_P);
           end if;
  
           --  The generic renaming declaration may become Ghost if it renames a
--- 706,715 ----
           Error_Msg_N ("invalid generic unit name", Name (N));
  
        else
!          if Present (Renamed_Entity (Old_P)) then
!             Set_Renamed_Entity (New_P, Renamed_Entity (Old_P));
           else
!             Set_Renamed_Entity (New_P, Old_P);
           end if;
  
           --  The generic renaming declaration may become Ghost if it renames a
*************** package body Sem_Ch8 is
*** 759,764 ****
--- 759,765 ----
        Dec           : Node_Id;
        T             : Entity_Id;
        T2            : Entity_Id;
+       Q             : Node_Id;
  
        procedure Check_Constrained_Object;
        --  If the nominal type is unconstrained but the renamed object is
*************** package body Sem_Ch8 is
*** 979,985 ****
                    Error_Msg_N
                      ("object name or value expected in renaming", Nam);
  
!                   Set_Ekind (Id, E_Variable);
                    Set_Etype (Id, Any_Type);
  
                    return;
--- 980,986 ----
                    Error_Msg_N
                      ("object name or value expected in renaming", Nam);
  
!                   Mutate_Ekind (Id, E_Variable);
                    Set_Etype (Id, Any_Type);
  
                    return;
*************** package body Sem_Ch8 is
*** 1027,1033 ****
                       Error_Msg_N
                         ("object name or value expected in renaming", Nam);
  
!                      Set_Ekind (Id, E_Variable);
                       Set_Etype (Id, Any_Type);
  
                       return;
--- 1028,1034 ----
                       Error_Msg_N
                         ("object name or value expected in renaming", Nam);
  
!                      Mutate_Ekind (Id, E_Variable);
                       Set_Etype (Id, Any_Type);
  
                       return;
*************** package body Sem_Ch8 is
*** 1074,1090 ****
           --  Check against AI12-0401 here before Resolve may rewrite Nam and
           --  potentially generate spurious warnings.
  
           if Nkind (Nam) = N_Qualified_Expression
!            and then Is_Variable (Expression (Nam))
!            and then not
!              (Subtypes_Statically_Match (T, Etype (Expression (Nam)))
!                 or else
!               Subtypes_Statically_Match (Base_Type (T), Etype (Nam)))
           then
!             Error_Msg_N
!               ("subtype of renamed qualified expression does not " &
!                "statically match", N);
!             return;
           end if;
  
           Resolve (Nam, T);
--- 1075,1129 ----
           --  Check against AI12-0401 here before Resolve may rewrite Nam and
           --  potentially generate spurious warnings.
  
+          --   In the case where the object_name is a qualified_expression with
+          --   a nominal subtype T and whose expression is a name that denotes
+          --   an object Q:
+          --    * if T is an elementary subtype, then:
+          --      * Q shall be a constant other than a dereference of an access
+          --        type; or
+          --      * the nominal subtype of Q shall be statically compatible with
+          --        T; or
+          --      * T shall statically match the base subtype of its type if
+          --        scalar, or the first subtype of its type if an access type.
+          --    * if T is a composite subtype, then Q shall be known to be
+          --      constrained or T shall statically match the first subtype of
+          --      its type.
+ 
           if Nkind (Nam) = N_Qualified_Expression
!            and then Is_Object_Reference (Expression (Nam))
           then
!             Q := Expression (Nam);
! 
!             if (Is_Elementary_Type (T)
!                   and then
!                 not ((not Is_Variable (Q)
!                        and then Nkind (Q) /= N_Explicit_Dereference)
!                       or else Subtypes_Statically_Compatible (Etype (Q), T)
!                       or else (Is_Scalar_Type (T)
!                                 and then Subtypes_Statically_Match
!                                            (T, Base_Type (T)))
!                       or else (Is_Access_Type (T)
!                                 and then Subtypes_Statically_Match
!                                            (T, First_Subtype (T)))))
!               or else (Is_Composite_Type (T)
!                          and then
! 
!                        --  If Q is an aggregate, Is_Constrained may not be set
!                        --  yet and its type may not be resolved yet.
!                        --  This doesn't quite correspond to the complex notion
!                        --  of "known to be constrained" but this is good enough
!                        --  for a rule which is in any case too complex.
! 
!                        not (Is_Constrained (Etype (Q))
!                              or else Nkind (Q) = N_Aggregate
!                              or else Subtypes_Statically_Match
!                                        (T, First_Subtype (T))))
!             then
!                Error_Msg_N
!                  ("subtype of renamed qualified expression does not " &
!                   "statically match", N);
!                return;
!             end if;
           end if;
  
           Resolve (Nam, T);
*************** package body Sem_Ch8 is
*** 1102,1108 ****
             and then Comes_From_Source (N)
           then
              Set_Etype (Id, T);
!             Set_Ekind (Id, E_Constant);
              Rewrite (N,
                Make_Object_Declaration (Loc,
                  Defining_Identifier => Id,
--- 1141,1147 ----
             and then Comes_From_Source (N)
           then
              Set_Etype (Id, T);
!             Mutate_Ekind (Id, E_Constant);
              Rewrite (N,
                Make_Object_Declaration (Loc,
                  Defining_Identifier => Id,
*************** package body Sem_Ch8 is
*** 1125,1131 ****
             and then Is_Anonymous_Access_Type (Etype (Expression (Nam)))
             and then not Is_Anonymous_Access_Type (T)
           then
!             Wrong_Type (Expression (Nam), T); -- Should we give better error???
           end if;
  
           --  Check that a class-wide object is not being renamed as an object
--- 1164,1172 ----
             and then Is_Anonymous_Access_Type (Etype (Expression (Nam)))
             and then not Is_Anonymous_Access_Type (T)
           then
!             Error_Msg_NE
!               ("cannot rename anonymous access object "
!                 & "as a named access type", Expression (Nam), T);
           end if;
  
           --  Check that a class-wide object is not being renamed as an object
*************** package body Sem_Ch8 is
*** 1286,1298 ****
                   and then Comes_From_Source (Nam)
                 then
                    Error_Msg_N
!                     ("renaming function result object is suspicious?R?", Nam);
                    Error_Msg_NE
!                     ("\function & will be called only once?R?", Nam,
                       Entity (Name (Nam)));
                    Error_Msg_N -- CODEFIX
                      ("\suggest using an initialized constant object "
!                      & "instead?R?", Nam);
                 end if;
           end case;
        end if;
--- 1327,1339 ----
                   and then Comes_From_Source (Nam)
                 then
                    Error_Msg_N
!                     ("renaming function result object is suspicious?.r?", Nam);
                    Error_Msg_NE
!                     ("\function & will be called only once?.r?", Nam,
                       Entity (Name (Nam)));
                    Error_Msg_N -- CODEFIX
                      ("\suggest using an initialized constant object "
!                      & "instead?.r?", Nam);
                 end if;
           end case;
        end if;
*************** package body Sem_Ch8 is
*** 1415,1428 ****
        --  want to change it to a variable.
  
        if Ekind (Id) /= E_Constant then
!          Set_Ekind (Id, E_Variable);
        end if;
  
!       --  Initialize the object size and alignment. Note that we used to call
!       --  Init_Size_Align here, but that's wrong for objects which have only
!       --  an Esize, not an RM_Size field.
! 
!       Init_Object_Size_Align (Id);
  
        --  If N comes from source then check that the original node is an
        --  object reference since there may have been several rewritting and
--- 1456,1465 ----
        --  want to change it to a variable.
  
        if Ekind (Id) /= E_Constant then
!          Mutate_Ekind (Id, E_Variable);
        end if;
  
!       Reinit_Object_Size_Align (Id);
  
        --  If N comes from source then check that the original node is an
        --  object reference since there may have been several rewritting and
*************** package body Sem_Ch8 is
*** 1491,1503 ****
        --  Ignore (accept) N_Raise_xxx_Error nodes in this context.
  
        elsif No_Raise_xxx_Error (Nam) = OK then
!          Error_Msg_Ada_2020_Feature ("value in renaming", Sloc (Nam));
        end if;
  
        Set_Etype (Id, T2);
  
        if not Is_Variable (Nam) then
!          Set_Ekind               (Id, E_Constant);
           Set_Never_Set_In_Source (Id, True);
           Set_Is_True_Constant    (Id, True);
        end if;
--- 1528,1540 ----
        --  Ignore (accept) N_Raise_xxx_Error nodes in this context.
  
        elsif No_Raise_xxx_Error (Nam) = OK then
!          Error_Msg_Ada_2022_Feature ("value in renaming", Sloc (Nam));
        end if;
  
        Set_Etype (Id, T2);
  
        if not Is_Variable (Nam) then
!          Mutate_Ekind            (Id, E_Constant);
           Set_Never_Set_In_Source (Id, True);
           Set_Is_True_Constant    (Id, True);
        end if;
*************** package body Sem_Ch8 is
*** 1506,1515 ****
        --  renamed object is atomic, independent, volatile or VFA. These flags
        --  are set on the renamed object in the RM legality sense.
  
!       Set_Is_Atomic               (Id, Is_Atomic_Object (Nam));
!       Set_Is_Independent          (Id, Is_Independent_Object (Nam));
!       Set_Is_Volatile             (Id, Is_Volatile_Object (Nam));
!       Set_Is_Volatile_Full_Access (Id, Is_Volatile_Full_Access_Object (Nam));
  
        --  Treat as volatile if we just set the Volatile flag
  
--- 1543,1553 ----
        --  renamed object is atomic, independent, volatile or VFA. These flags
        --  are set on the renamed object in the RM legality sense.
  
!       Set_Is_Atomic (Id, Is_Atomic_Object (Nam));
!       Set_Is_Independent (Id, Is_Independent_Object (Nam));
!       Set_Is_Volatile (Id, Is_Volatile_Object_Ref (Nam));
!       Set_Is_Volatile_Full_Access
!         (Id, Is_Volatile_Full_Access_Object_Ref (Nam));
  
        --  Treat as volatile if we just set the Volatile flag
  
*************** package body Sem_Ch8 is
*** 1556,1564 ****
           return;
        end if;
  
!       --  Check for Text_IO special unit (we may be renaming a Text_IO child)
  
!       Check_Text_IO_Special_Unit (Name (N));
  
        if Current_Scope /= Standard_Standard then
           Set_Is_Pure (New_P, Is_Pure (Current_Scope));
--- 1594,1611 ----
           return;
        end if;
  
!       --  Check for Text_IO special units (we may be renaming a Text_IO child),
!       --  but make sure not to catch renamings generated for package instances
!       --  that have nothing to do with them but are nevertheless homonyms.
  
!       if Is_Entity_Name (Name (N))
!         and then Present (Entity (Name (N)))
!         and then Is_Generic_Instance (Entity (Name (N)))
!       then
!          null;
!       else
!          Check_Text_IO_Special_Unit (Name (N));
!       end if;
  
        if Current_Scope /= Standard_Standard then
           Set_Is_Pure (New_P, Is_Pure (Current_Scope));
*************** package body Sem_Ch8 is
*** 1592,1598 ****
  
           --  Set basic attributes to minimize cascaded errors
  
!          Set_Ekind (New_P, E_Package);
           Set_Etype (New_P, Standard_Void_Type);
  
        elsif Present (Renamed_Entity (Old_P))
--- 1639,1645 ----
  
           --  Set basic attributes to minimize cascaded errors
  
!          Mutate_Ekind (New_P, E_Package);
           Set_Etype (New_P, Standard_Void_Type);
  
        elsif Present (Renamed_Entity (Old_P))
*************** package body Sem_Ch8 is
*** 1607,1613 ****
  
           --  Set basic attributes to minimize cascaded errors
  
!          Set_Ekind (New_P, E_Package);
           Set_Etype (New_P, Standard_Void_Type);
  
        --  Here for OK package renaming
--- 1654,1660 ----
  
           --  Set basic attributes to minimize cascaded errors
  
!          Mutate_Ekind (New_P, E_Package);
           Set_Etype (New_P, Standard_Void_Type);
  
        --  Here for OK package renaming
*************** package body Sem_Ch8 is
*** 1617,1629 ****
           --  entity. The simplest implementation is to have both packages share
           --  the entity list.
  
!          Set_Ekind (New_P, E_Package);
           Set_Etype (New_P, Standard_Void_Type);
  
!          if Present (Renamed_Object (Old_P)) then
!             Set_Renamed_Object (New_P, Renamed_Object (Old_P));
           else
!             Set_Renamed_Object (New_P, Old_P);
           end if;
  
           --  The package renaming declaration may become Ghost if it renames a
--- 1664,1676 ----
           --  entity. The simplest implementation is to have both packages share
           --  the entity list.
  
!          Mutate_Ekind (New_P, E_Package);
           Set_Etype (New_P, Standard_Void_Type);
  
!          if Present (Renamed_Entity (Old_P)) then
!             Set_Renamed_Entity (New_P, Renamed_Entity (Old_P));
           else
!             Set_Renamed_Entity (New_P, Old_P);
           end if;
  
           --  The package renaming declaration may become Ghost if it renames a
*************** package body Sem_Ch8 is
*** 1823,1829 ****
        Old_S := Find_Renamed_Entity (N, Selector_Name (Nam), New_S);
  
        if Old_S = Any_Id then
!          Error_Msg_N (" no subprogram or entry matches specification",  N);
        else
           if Is_Body then
              Check_Subtype_Conformant (New_S, Old_S, N);
--- 1870,1876 ----
        Old_S := Find_Renamed_Entity (N, Selector_Name (Nam), New_S);
  
        if Old_S = Any_Id then
!          Error_Msg_N ("no subprogram or entry matches specification",  N);
        else
           if Is_Body then
              Check_Subtype_Conformant (New_S, Old_S, N);
*************** package body Sem_Ch8 is
*** 2071,2112 ****
        Old_S       : Entity_Id := Empty;
        Rename_Spec : Entity_Id;
  
-       procedure Build_Class_Wide_Wrapper
-         (Ren_Id  : out Entity_Id;
-          Wrap_Id : out Entity_Id);
-       --  Ada 2012 (AI05-0071): A generic/instance scenario involving a formal
-       --  type with unknown discriminants and a generic primitive operation of
-       --  the said type with a box require special processing when the actual
-       --  is a class-wide type:
-       --
-       --    generic
-       --       type Formal_Typ (<>) is private;
-       --       with procedure Prim_Op (Param : Formal_Typ) is <>;
-       --    package Gen is ...
-       --
-       --    package Inst is new Gen (Actual_Typ'Class);
-       --
-       --  In this case the general renaming mechanism used in the prologue of
-       --  an instance no longer applies:
-       --
-       --    procedure Prim_Op (Param : Formal_Typ) renames Prim_Op;
-       --
-       --  The above is replaced the following wrapper/renaming combination:
-       --
-       --    procedure Wrapper (Param : Formal_Typ) is  --  wrapper
-       --    begin
-       --       Prim_Op (Param);                        --  primitive
-       --    end Wrapper;
-       --
-       --    procedure Prim_Op (Param : Formal_Typ) renames Wrapper;
-       --
-       --  This transformation applies only if there is no explicit visible
-       --  class-wide operation at the point of the instantiation. Ren_Id is
-       --  the entity of the renaming declaration. When the transformation
-       --  applies, Wrap_Id is the entity of the generated class-wide wrapper
-       --  (or Any_Id). Otherwise, Wrap_Id is the entity of the class-wide
-       --  operation.
- 
        procedure Check_Null_Exclusion
          (Ren : Entity_Id;
           Sub : Entity_Id);
--- 2118,2123 ----
*************** package body Sem_Ch8 is
*** 2132,2140 ****
        --  incomplete untagged formal (RM 13.14(10.2/3)).
  
        function Has_Class_Wide_Actual return Boolean;
!       --  Ada 2012 (AI05-071, AI05-0131): True if N is the renaming for a
!       --  defaulted formal subprogram where the actual for the controlling
!       --  formal type is class-wide.
  
        function Original_Subprogram (Subp : Entity_Id) return Entity_Id;
        --  Find renamed entity when the declaration is a renaming_as_body and
--- 2143,2163 ----
        --  incomplete untagged formal (RM 13.14(10.2/3)).
  
        function Has_Class_Wide_Actual return Boolean;
!       --  Ada 2012 (AI05-071, AI05-0131) and Ada 2022 (AI12-0165): True if N is
!       --  the renaming for a defaulted formal subprogram where the actual for
!       --  the controlling formal type is class-wide.
! 
!       procedure Handle_Instance_With_Class_Wide_Type
!         (Inst_Node    : Node_Id;
!          Ren_Id       : Entity_Id;
!          Wrapped_Prim : out Entity_Id;
!          Wrap_Id      : out Entity_Id);
!       --  Ada 2012 (AI05-0071), Ada 2022 (AI12-0165): when the actual type
!       --  of an instantiation is a class-wide type T'Class we may need to
!       --  wrap a primitive operation of T; this routine looks for a suitable
!       --  primitive to be wrapped and (if the wrapper is required) returns the
!       --  Id of the wrapped primitive and the Id of the built wrapper. Ren_Id
!       --  is the defining entity for the renamed subprogram specification.
  
        function Original_Subprogram (Subp : Entity_Id) return Entity_Id;
        --  Find renamed entity when the declaration is a renaming_as_body and
*************** package body Sem_Ch8 is
*** 2143,2681 ****
        --  before the subprogram it completes is frozen, and renaming indirectly
        --  renames the subprogram itself.(Defect Report 8652/0027).
  
-       ------------------------------
-       -- Build_Class_Wide_Wrapper --
-       ------------------------------
- 
-       procedure Build_Class_Wide_Wrapper
-         (Ren_Id  : out Entity_Id;
-          Wrap_Id : out Entity_Id)
-       is
-          Loc : constant Source_Ptr := Sloc (N);
- 
-          function Build_Call
-            (Subp_Id : Entity_Id;
-             Params  : List_Id) return Node_Id;
-          --  Create a dispatching call to invoke routine Subp_Id with actuals
-          --  built from the parameter specifications of list Params.
- 
-          function Build_Expr_Fun_Call
-            (Subp_Id : Entity_Id;
-             Params  : List_Id) return Node_Id;
-          --  Create a dispatching call to invoke function Subp_Id with actuals
-          --  built from the parameter specifications of list Params. Return
-          --  directly the call, so that it can be used inside an expression
-          --  function. This is a specificity of the GNATprove mode.
- 
-          function Build_Spec (Subp_Id : Entity_Id) return Node_Id;
-          --  Create a subprogram specification based on the subprogram profile
-          --  of Subp_Id.
- 
-          function Find_Primitive (Typ : Entity_Id) return Entity_Id;
-          --  Find a primitive subprogram of type Typ which matches the profile
-          --  of the renaming declaration.
- 
-          procedure Interpretation_Error (Subp_Id : Entity_Id);
-          --  Emit a continuation error message suggesting subprogram Subp_Id as
-          --  a possible interpretation.
- 
-          function Is_Intrinsic_Equality (Subp_Id : Entity_Id) return Boolean;
-          --  Determine whether subprogram Subp_Id denotes the intrinsic "="
-          --  operator.
- 
-          function Is_Suitable_Candidate (Subp_Id : Entity_Id) return Boolean;
-          --  Determine whether subprogram Subp_Id is a suitable candidate for
-          --  the role of a wrapped subprogram.
- 
-          ----------------
-          -- Build_Call --
-          ----------------
- 
-          function Build_Call
-            (Subp_Id : Entity_Id;
-             Params  : List_Id) return Node_Id
-          is
-             Actuals  : constant List_Id := New_List;
-             Call_Ref : constant Node_Id := New_Occurrence_Of (Subp_Id, Loc);
-             Formal   : Node_Id;
- 
-          begin
-             --  Build the actual parameters of the call
- 
-             Formal := First (Params);
-             while Present (Formal) loop
-                Append_To (Actuals,
-                  Make_Identifier (Loc, Chars (Defining_Identifier (Formal))));
-                Next (Formal);
-             end loop;
- 
-             --  Generate:
-             --    return Subp_Id (Actuals);
- 
-             if Ekind (Subp_Id) in E_Function | E_Operator then
-                return
-                  Make_Simple_Return_Statement (Loc,
-                    Expression =>
-                      Make_Function_Call (Loc,
-                        Name                   => Call_Ref,
-                        Parameter_Associations => Actuals));
- 
-             --  Generate:
-             --    Subp_Id (Actuals);
- 
-             else
-                return
-                  Make_Procedure_Call_Statement (Loc,
-                    Name                   => Call_Ref,
-                    Parameter_Associations => Actuals);
-             end if;
-          end Build_Call;
- 
-          -------------------------
-          -- Build_Expr_Fun_Call --
-          -------------------------
- 
-          function Build_Expr_Fun_Call
-            (Subp_Id : Entity_Id;
-             Params  : List_Id) return Node_Id
-          is
-             Actuals  : constant List_Id := New_List;
-             Call_Ref : constant Node_Id := New_Occurrence_Of (Subp_Id, Loc);
-             Formal   : Node_Id;
- 
-          begin
-             pragma Assert (Ekind (Subp_Id) in E_Function | E_Operator);
- 
-             --  Build the actual parameters of the call
- 
-             Formal := First (Params);
-             while Present (Formal) loop
-                Append_To (Actuals,
-                  Make_Identifier (Loc, Chars (Defining_Identifier (Formal))));
-                Next (Formal);
-             end loop;
- 
-             --  Generate:
-             --    Subp_Id (Actuals);
- 
-             return
-               Make_Function_Call (Loc,
-                 Name                   => Call_Ref,
-                 Parameter_Associations => Actuals);
-          end Build_Expr_Fun_Call;
- 
-          ----------------
-          -- Build_Spec --
-          ----------------
- 
-          function Build_Spec (Subp_Id : Entity_Id) return Node_Id is
-             Params  : constant List_Id   := Copy_Parameter_List (Subp_Id);
-             Spec_Id : constant Entity_Id :=
-                         Make_Defining_Identifier (Loc,
-                           Chars => New_External_Name (Chars (Subp_Id), 'R'));
- 
-          begin
-             if Ekind (Formal_Spec) = E_Procedure then
-                return
-                  Make_Procedure_Specification (Loc,
-                    Defining_Unit_Name       => Spec_Id,
-                    Parameter_Specifications => Params);
-             else
-                return
-                  Make_Function_Specification (Loc,
-                    Defining_Unit_Name       => Spec_Id,
-                    Parameter_Specifications => Params,
-                    Result_Definition =>
-                      New_Copy_Tree (Result_Definition (Spec)));
-             end if;
-          end Build_Spec;
- 
-          --------------------
-          -- Find_Primitive --
-          --------------------
- 
-          function Find_Primitive (Typ : Entity_Id) return Entity_Id is
-             procedure Replace_Parameter_Types (Spec : Node_Id);
-             --  Given a specification Spec, replace all class-wide parameter
-             --  types with reference to type Typ.
- 
-             -----------------------------
-             -- Replace_Parameter_Types --
-             -----------------------------
- 
-             procedure Replace_Parameter_Types (Spec : Node_Id) is
-                Formal     : Node_Id;
-                Formal_Id  : Entity_Id;
-                Formal_Typ : Node_Id;
- 
-             begin
-                Formal := First (Parameter_Specifications (Spec));
-                while Present (Formal) loop
-                   Formal_Id  := Defining_Identifier (Formal);
-                   Formal_Typ := Parameter_Type (Formal);
- 
-                   --  Create a new entity for each class-wide formal to prevent
-                   --  aliasing with the original renaming. Replace the type of
-                   --  such a parameter with the candidate type.
- 
-                   if Nkind (Formal_Typ) = N_Identifier
-                     and then Is_Class_Wide_Type (Etype (Formal_Typ))
-                   then
-                      Set_Defining_Identifier (Formal,
-                        Make_Defining_Identifier (Loc, Chars (Formal_Id)));
- 
-                      Set_Parameter_Type (Formal, New_Occurrence_Of (Typ, Loc));
-                   end if;
- 
-                   Next (Formal);
-                end loop;
-             end Replace_Parameter_Types;
- 
-             --  Local variables
- 
-             Alt_Ren  : constant Node_Id := New_Copy_Tree (N);
-             Alt_Nam  : constant Node_Id := Name (Alt_Ren);
-             Alt_Spec : constant Node_Id := Specification (Alt_Ren);
-             Subp_Id  : Entity_Id;
- 
-          --  Start of processing for Find_Primitive
- 
-          begin
-             --  Each attempt to find a suitable primitive of a particular type
-             --  operates on its own copy of the original renaming. As a result
-             --  the original renaming is kept decoration and side-effect free.
- 
-             --  Inherit the overloaded status of the renamed subprogram name
- 
-             if Is_Overloaded (Nam) then
-                Set_Is_Overloaded (Alt_Nam);
-                Save_Interps (Nam, Alt_Nam);
-             end if;
- 
-             --  The copied renaming is hidden from visibility to prevent the
-             --  pollution of the enclosing context.
- 
-             Set_Defining_Unit_Name (Alt_Spec, Make_Temporary (Loc, 'R'));
- 
-             --  The types of all class-wide parameters must be changed to the
-             --  candidate type.
- 
-             Replace_Parameter_Types (Alt_Spec);
- 
-             --  Try to find a suitable primitive which matches the altered
-             --  profile of the renaming specification.
- 
-             Subp_Id :=
-               Find_Renamed_Entity
-                 (N         => Alt_Ren,
-                  Nam       => Name (Alt_Ren),
-                  New_S     => Analyze_Subprogram_Specification (Alt_Spec),
-                  Is_Actual => Is_Actual);
- 
-             --  Do not return Any_Id if the resolion of the altered profile
-             --  failed as this complicates further checks on the caller side,
-             --  return Empty instead.
- 
-             if Subp_Id = Any_Id then
-                return Empty;
-             else
-                return Subp_Id;
-             end if;
-          end Find_Primitive;
- 
-          --------------------------
-          -- Interpretation_Error --
-          --------------------------
- 
-          procedure Interpretation_Error (Subp_Id : Entity_Id) is
-          begin
-             Error_Msg_Sloc := Sloc (Subp_Id);
- 
-             if Is_Internal (Subp_Id) then
-                Error_Msg_NE
-                  ("\\possible interpretation: predefined & #",
-                   Spec, Formal_Spec);
-             else
-                Error_Msg_NE
-                  ("\\possible interpretation: & defined #", Spec, Formal_Spec);
-             end if;
-          end Interpretation_Error;
- 
-          ---------------------------
-          -- Is_Intrinsic_Equality --
-          ---------------------------
- 
-          function Is_Intrinsic_Equality (Subp_Id : Entity_Id) return Boolean is
-          begin
-             return
-               Ekind (Subp_Id) = E_Operator
-                 and then Chars (Subp_Id) = Name_Op_Eq
-                 and then Is_Intrinsic_Subprogram (Subp_Id);
-          end Is_Intrinsic_Equality;
- 
-          ---------------------------
-          -- Is_Suitable_Candidate --
-          ---------------------------
- 
-          function Is_Suitable_Candidate (Subp_Id : Entity_Id) return Boolean is
-          begin
-             if No (Subp_Id) then
-                return False;
- 
-             --  An intrinsic subprogram is never a good candidate. This is an
-             --  indication of a missing primitive, either defined directly or
-             --  inherited from a parent tagged type.
- 
-             elsif Is_Intrinsic_Subprogram (Subp_Id) then
-                return False;
- 
-             else
-                return True;
-             end if;
-          end Is_Suitable_Candidate;
- 
-          --  Local variables
- 
-          Actual_Typ : Entity_Id := Empty;
-          --  The actual class-wide type for Formal_Typ
- 
-          CW_Prim_OK : Boolean;
-          CW_Prim_Op : Entity_Id;
-          --  The class-wide subprogram (if available) which corresponds to the
-          --  renamed generic formal subprogram.
- 
-          Formal_Typ : Entity_Id := Empty;
-          --  The generic formal type with unknown discriminants
- 
-          Root_Prim_OK : Boolean;
-          Root_Prim_Op : Entity_Id;
-          --  The root type primitive (if available) which corresponds to the
-          --  renamed generic formal subprogram.
- 
-          Root_Typ : Entity_Id := Empty;
-          --  The root type of Actual_Typ
- 
-          Body_Decl : Node_Id;
-          Formal    : Node_Id;
-          Prim_Op   : Entity_Id;
-          Spec_Decl : Node_Id;
-          New_Spec  : Node_Id;
- 
-       --  Start of processing for Build_Class_Wide_Wrapper
- 
-       begin
-          --  Analyze the specification of the renaming in case the generation
-          --  of the class-wide wrapper fails.
- 
-          Ren_Id  := Analyze_Subprogram_Specification (Spec);
-          Wrap_Id := Any_Id;
- 
-          --  Do not attempt to build a wrapper if the renaming is in error
- 
-          if Error_Posted (Nam) then
-             return;
-          end if;
- 
-          --  Analyze the renamed name, but do not resolve it. The resolution is
-          --  completed once a suitable subprogram is found.
- 
-          Analyze (Nam);
- 
-          --  When the renamed name denotes the intrinsic operator equals, the
-          --  name must be treated as overloaded. This allows for a potential
-          --  match against the root type's predefined equality function.
- 
-          if Is_Intrinsic_Equality (Entity (Nam)) then
-             Set_Is_Overloaded (Nam);
-             Collect_Interps   (Nam);
-          end if;
- 
-          --  Step 1: Find the generic formal type with unknown discriminants
-          --  and its corresponding class-wide actual type from the renamed
-          --  generic formal subprogram.
- 
-          Formal := First_Formal (Formal_Spec);
-          while Present (Formal) loop
-             if Has_Unknown_Discriminants (Etype (Formal))
-               and then not Is_Class_Wide_Type (Etype (Formal))
-               and then Is_Class_Wide_Type (Get_Instance_Of (Etype (Formal)))
-             then
-                Formal_Typ := Etype (Formal);
-                Actual_Typ := Get_Instance_Of (Formal_Typ);
-                Root_Typ   := Etype (Actual_Typ);
-                exit;
-             end if;
- 
-             Next_Formal (Formal);
-          end loop;
- 
-          --  The specification of the generic formal subprogram should always
-          --  contain a formal type with unknown discriminants whose actual is
-          --  a class-wide type, otherwise this indicates a failure in routine
-          --  Has_Class_Wide_Actual.
- 
-          pragma Assert (Present (Formal_Typ));
- 
-          --  Step 2: Find the proper class-wide subprogram or primitive which
-          --  corresponds to the renamed generic formal subprogram.
- 
-          CW_Prim_Op   := Find_Primitive (Actual_Typ);
-          CW_Prim_OK   := Is_Suitable_Candidate (CW_Prim_Op);
-          Root_Prim_Op := Find_Primitive (Root_Typ);
-          Root_Prim_OK := Is_Suitable_Candidate (Root_Prim_Op);
- 
-          --  The class-wide actual type has two subprograms which correspond to
-          --  the renamed generic formal subprogram:
- 
-          --    with procedure Prim_Op (Param : Formal_Typ);
- 
-          --    procedure Prim_Op (Param : Actual_Typ);  --  may be inherited
-          --    procedure Prim_Op (Param : Actual_Typ'Class);
- 
-          --  Even though the declaration of the two subprograms is legal, a
-          --  call to either one is ambiguous and therefore illegal.
- 
-          if CW_Prim_OK and Root_Prim_OK then
- 
-             --  A user-defined primitive has precedence over a predefined one
- 
-             if Is_Internal (CW_Prim_Op)
-               and then not Is_Internal (Root_Prim_Op)
-             then
-                Prim_Op := Root_Prim_Op;
- 
-             elsif Is_Internal (Root_Prim_Op)
-               and then not Is_Internal (CW_Prim_Op)
-             then
-                Prim_Op := CW_Prim_Op;
- 
-             elsif CW_Prim_Op = Root_Prim_Op then
-                Prim_Op := Root_Prim_Op;
- 
-             --  Otherwise both candidate subprograms are user-defined and
-             --  ambiguous.
- 
-             else
-                Error_Msg_NE
-                  ("ambiguous actual for generic subprogram &",
-                   Spec, Formal_Spec);
-                Interpretation_Error (Root_Prim_Op);
-                Interpretation_Error (CW_Prim_Op);
-                return;
-             end if;
- 
-          elsif CW_Prim_OK and not Root_Prim_OK then
-             Prim_Op := CW_Prim_Op;
- 
-          elsif not CW_Prim_OK and Root_Prim_OK then
-             Prim_Op := Root_Prim_Op;
- 
-          --  An intrinsic equality may act as a suitable candidate in the case
-          --  of a null type extension where the parent's equality is hidden. A
-          --  call to an intrinsic equality is expanded as dispatching.
- 
-          elsif Present (Root_Prim_Op)
-            and then Is_Intrinsic_Equality (Root_Prim_Op)
-          then
-             Prim_Op := Root_Prim_Op;
- 
-          --  Otherwise there are no candidate subprograms. Let the caller
-          --  diagnose the error.
- 
-          else
-             return;
-          end if;
- 
-          --  At this point resolution has taken place and the name is no longer
-          --  overloaded. Mark the primitive as referenced.
- 
-          Set_Is_Overloaded (Name (N), False);
-          Set_Referenced    (Prim_Op);
- 
-          --  Do not generate a wrapper when the only candidate is a class-wide
-          --  subprogram. Instead modify the renaming to directly map the actual
-          --  to the generic formal.
- 
-          if CW_Prim_OK and then Prim_Op = CW_Prim_Op then
-             Wrap_Id := Prim_Op;
-             Rewrite (Nam, New_Occurrence_Of (Prim_Op, Loc));
-             return;
-          end if;
- 
-          --  Step 3: Create the declaration and the body of the wrapper, insert
-          --  all the pieces into the tree.
- 
-          --  In GNATprove mode, create a function wrapper in the form of an
-          --  expression function, so that an implicit postcondition relating
-          --  the result of calling the wrapper function and the result of the
-          --  dispatching call to the wrapped function is known during proof.
- 
-          if GNATprove_Mode
-            and then Ekind (Ren_Id) in E_Function | E_Operator
-          then
-             New_Spec := Build_Spec (Ren_Id);
-             Body_Decl :=
-               Make_Expression_Function (Loc,
-                 Specification => New_Spec,
-                 Expression    =>
-                   Build_Expr_Fun_Call
-                     (Subp_Id => Prim_Op,
-                      Params  => Parameter_Specifications (New_Spec)));
- 
-             Wrap_Id := Defining_Entity (Body_Decl);
- 
-          --  Otherwise, create separate spec and body for the subprogram
- 
-          else
-             Spec_Decl :=
-               Make_Subprogram_Declaration (Loc,
-                 Specification => Build_Spec (Ren_Id));
-             Insert_Before_And_Analyze (N, Spec_Decl);
- 
-             Wrap_Id := Defining_Entity (Spec_Decl);
- 
-             Body_Decl :=
-               Make_Subprogram_Body (Loc,
-                 Specification              => Build_Spec (Ren_Id),
-                 Declarations               => New_List,
-                 Handled_Statement_Sequence =>
-                   Make_Handled_Sequence_Of_Statements (Loc,
-                     Statements => New_List (
-                       Build_Call
-                         (Subp_Id => Prim_Op,
-                          Params  =>
-                            Parameter_Specifications
-                              (Specification (Spec_Decl))))));
- 
-             Set_Corresponding_Body (Spec_Decl, Defining_Entity (Body_Decl));
-          end if;
- 
-          --  If the operator carries an Eliminated pragma, indicate that the
-          --  wrapper is also to be eliminated, to prevent spurious error when
-          --  using gnatelim on programs that include box-initialization of
-          --  equality operators.
- 
-          Set_Is_Eliminated (Wrap_Id, Is_Eliminated (Prim_Op));
- 
-          --  In GNATprove mode, insert the body in the tree for analysis
- 
-          if GNATprove_Mode then
-             Insert_Before_And_Analyze (N, Body_Decl);
-          end if;
- 
-          --  The generated body does not freeze and must be analyzed when the
-          --  class-wide wrapper is frozen. The body is only needed if expansion
-          --  is enabled.
- 
-          if Expander_Active then
-             Append_Freeze_Action (Wrap_Id, Body_Decl);
-          end if;
- 
-          --  Step 4: The subprogram renaming aliases the wrapper
- 
-          Rewrite (Nam, New_Occurrence_Of (Wrap_Id, Loc));
-       end Build_Class_Wide_Wrapper;
- 
        --------------------------
        -- Check_Null_Exclusion --
        --------------------------
--- 2166,2171 ----
*************** package body Sem_Ch8 is
*** 2870,2875 ****
--- 2360,3062 ----
           return False;
        end Has_Class_Wide_Actual;
  
+       ------------------------------------------
+       -- Handle_Instance_With_Class_Wide_Type --
+       ------------------------------------------
+ 
+       procedure Handle_Instance_With_Class_Wide_Type
+         (Inst_Node    : Node_Id;
+          Ren_Id       : Entity_Id;
+          Wrapped_Prim : out Entity_Id;
+          Wrap_Id      : out Entity_Id)
+       is
+          procedure Build_Class_Wide_Wrapper
+            (Ren_Id  : Entity_Id;
+             Prim_Op : Entity_Id;
+             Wrap_Id : out Entity_Id);
+          --  Build a wrapper for the renaming Ren_Id of subprogram Prim_Op.
+ 
+          procedure Find_Suitable_Candidate
+            (Prim_Op    : out Entity_Id;
+             Is_CW_Prim : out Boolean);
+          --  Look for a suitable primitive to be wrapped (Prim_Op); Is_CW_Prim
+          --  indicates that the found candidate is a class-wide primitive (to
+          --  help the caller decide if the wrapper is required).
+ 
+          ------------------------------
+          -- Build_Class_Wide_Wrapper --
+          ------------------------------
+ 
+          procedure Build_Class_Wide_Wrapper
+            (Ren_Id  : Entity_Id;
+             Prim_Op : Entity_Id;
+             Wrap_Id : out Entity_Id)
+          is
+             Loc : constant Source_Ptr := Sloc (N);
+ 
+             function Build_Call
+               (Subp_Id : Entity_Id;
+                Params  : List_Id) return Node_Id;
+             --  Create a dispatching call to invoke routine Subp_Id with
+             --  actuals built from the parameter specifications of list Params.
+ 
+             function Build_Expr_Fun_Call
+               (Subp_Id : Entity_Id;
+                Params  : List_Id) return Node_Id;
+             --  Create a dispatching call to invoke function Subp_Id with
+             --  actuals built from the parameter specifications of list Params.
+             --  Directly return the call, so that it can be used inside an
+             --  expression function. This is a requirement of GNATprove mode.
+ 
+             function Build_Spec (Subp_Id : Entity_Id) return Node_Id;
+             --  Create a subprogram specification based on the subprogram
+             --  profile of Subp_Id.
+ 
+             ----------------
+             -- Build_Call --
+             ----------------
+ 
+             function Build_Call
+               (Subp_Id : Entity_Id;
+                Params  : List_Id) return Node_Id
+             is
+                Actuals  : constant List_Id := New_List;
+                Call_Ref : constant Node_Id := New_Occurrence_Of (Subp_Id, Loc);
+                Formal   : Node_Id;
+ 
+             begin
+                --  Build the actual parameters of the call
+ 
+                Formal := First (Params);
+                while Present (Formal) loop
+                   Append_To (Actuals,
+                     Make_Identifier (Loc,
+                       Chars (Defining_Identifier (Formal))));
+                   Next (Formal);
+                end loop;
+ 
+                --  Generate:
+                --    return Subp_Id (Actuals);
+ 
+                if Ekind (Subp_Id) in E_Function | E_Operator then
+                   return
+                     Make_Simple_Return_Statement (Loc,
+                       Expression =>
+                         Make_Function_Call (Loc,
+                           Name                   => Call_Ref,
+                           Parameter_Associations => Actuals));
+ 
+                --  Generate:
+                --    Subp_Id (Actuals);
+ 
+                else
+                   return
+                     Make_Procedure_Call_Statement (Loc,
+                       Name                   => Call_Ref,
+                       Parameter_Associations => Actuals);
+                end if;
+             end Build_Call;
+ 
+             -------------------------
+             -- Build_Expr_Fun_Call --
+             -------------------------
+ 
+             function Build_Expr_Fun_Call
+               (Subp_Id : Entity_Id;
+                Params  : List_Id) return Node_Id
+             is
+                Actuals  : constant List_Id := New_List;
+                Call_Ref : constant Node_Id := New_Occurrence_Of (Subp_Id, Loc);
+                Formal   : Node_Id;
+ 
+             begin
+                pragma Assert (Ekind (Subp_Id) in E_Function | E_Operator);
+ 
+                --  Build the actual parameters of the call
+ 
+                Formal := First (Params);
+                while Present (Formal) loop
+                   Append_To (Actuals,
+                     Make_Identifier (Loc,
+                       Chars (Defining_Identifier (Formal))));
+                   Next (Formal);
+                end loop;
+ 
+                --  Generate:
+                --    Subp_Id (Actuals);
+ 
+                return
+                  Make_Function_Call (Loc,
+                    Name                   => Call_Ref,
+                    Parameter_Associations => Actuals);
+             end Build_Expr_Fun_Call;
+ 
+             ----------------
+             -- Build_Spec --
+             ----------------
+ 
+             function Build_Spec (Subp_Id : Entity_Id) return Node_Id is
+                Params  : constant List_Id   := Copy_Parameter_List (Subp_Id);
+                Spec_Id : constant Entity_Id :=
+                            Make_Defining_Identifier (Loc,
+                              New_External_Name (Chars (Subp_Id), 'R'));
+ 
+             begin
+                if Ekind (Formal_Spec) = E_Procedure then
+                   return
+                     Make_Procedure_Specification (Loc,
+                       Defining_Unit_Name       => Spec_Id,
+                       Parameter_Specifications => Params);
+                else
+                   return
+                     Make_Function_Specification (Loc,
+                       Defining_Unit_Name       => Spec_Id,
+                       Parameter_Specifications => Params,
+                       Result_Definition =>
+                         New_Copy_Tree (Result_Definition (Spec)));
+                end if;
+             end Build_Spec;
+ 
+             --  Local variables
+ 
+             Body_Decl : Node_Id;
+             Spec_Decl : Node_Id;
+             New_Spec  : Node_Id;
+ 
+          --  Start of processing for Build_Class_Wide_Wrapper
+ 
+          begin
+             pragma Assert (not Error_Posted (Nam));
+ 
+             --  Step 1: Create the declaration and the body of the wrapper,
+             --  insert all the pieces into the tree.
+ 
+             --  In GNATprove mode, create a function wrapper in the form of an
+             --  expression function, so that an implicit postcondition relating
+             --  the result of calling the wrapper function and the result of
+             --  the dispatching call to the wrapped function is known during
+             --  proof.
+ 
+             if GNATprove_Mode
+               and then Ekind (Ren_Id) in E_Function | E_Operator
+             then
+                New_Spec := Build_Spec (Ren_Id);
+                Body_Decl :=
+                  Make_Expression_Function (Loc,
+                    Specification => New_Spec,
+                    Expression    =>
+                      Build_Expr_Fun_Call
+                        (Subp_Id => Prim_Op,
+                         Params  => Parameter_Specifications (New_Spec)));
+ 
+                Wrap_Id := Defining_Entity (Body_Decl);
+ 
+             --  Otherwise, create separate spec and body for the subprogram
+ 
+             else
+                Spec_Decl :=
+                  Make_Subprogram_Declaration (Loc,
+                    Specification => Build_Spec (Ren_Id));
+                Insert_Before_And_Analyze (N, Spec_Decl);
+ 
+                Wrap_Id := Defining_Entity (Spec_Decl);
+ 
+                Body_Decl :=
+                  Make_Subprogram_Body (Loc,
+                    Specification              => Build_Spec (Ren_Id),
+                    Declarations               => New_List,
+                    Handled_Statement_Sequence =>
+                      Make_Handled_Sequence_Of_Statements (Loc,
+                        Statements => New_List (
+                          Build_Call
+                            (Subp_Id => Prim_Op,
+                             Params  =>
+                               Parameter_Specifications
+                                 (Specification (Spec_Decl))))));
+ 
+                Set_Corresponding_Body (Spec_Decl, Defining_Entity (Body_Decl));
+             end if;
+ 
+             Set_Is_Class_Wide_Wrapper (Wrap_Id);
+ 
+             --  If the operator carries an Eliminated pragma, indicate that
+             --  the wrapper is also to be eliminated, to prevent spurious
+             --  errors when using gnatelim on programs that include box-
+             --  defaulted initialization of equality operators.
+ 
+             Set_Is_Eliminated (Wrap_Id, Is_Eliminated (Prim_Op));
+ 
+             --  In GNATprove mode, insert the body in the tree for analysis
+ 
+             if GNATprove_Mode then
+                Insert_Before_And_Analyze (N, Body_Decl);
+             end if;
+ 
+             --  The generated body does not freeze and must be analyzed when
+             --  the class-wide wrapper is frozen. The body is only needed if
+             --  expansion is enabled.
+ 
+             if Expander_Active then
+                Append_Freeze_Action (Wrap_Id, Body_Decl);
+             end if;
+ 
+             --  Step 2: The subprogram renaming aliases the wrapper
+ 
+             Rewrite (Name (N), New_Occurrence_Of (Wrap_Id, Loc));
+          end Build_Class_Wide_Wrapper;
+ 
+          -----------------------------
+          -- Find_Suitable_Candidate --
+          -----------------------------
+ 
+          procedure Find_Suitable_Candidate
+            (Prim_Op    : out Entity_Id;
+             Is_CW_Prim : out Boolean)
+          is
+             Loc : constant Source_Ptr := Sloc (N);
+ 
+             function Find_Primitive (Typ : Entity_Id) return Entity_Id;
+             --  Find a primitive subprogram of type Typ which matches the
+             --  profile of the renaming declaration.
+ 
+             procedure Interpretation_Error (Subp_Id : Entity_Id);
+             --  Emit a continuation error message suggesting subprogram Subp_Id
+             --  as a possible interpretation.
+ 
+             function Is_Intrinsic_Equality
+               (Subp_Id : Entity_Id) return Boolean;
+             --  Determine whether subprogram Subp_Id denotes the intrinsic "="
+             --  operator.
+ 
+             function Is_Suitable_Candidate
+               (Subp_Id : Entity_Id) return Boolean;
+             --  Determine whether subprogram Subp_Id is a suitable candidate
+             --  for the role of a wrapped subprogram.
+ 
+             --------------------
+             -- Find_Primitive --
+             --------------------
+ 
+             function Find_Primitive (Typ : Entity_Id) return Entity_Id is
+                procedure Replace_Parameter_Types (Spec : Node_Id);
+                --  Given a specification Spec, replace all class-wide parameter
+                --  types with reference to type Typ.
+ 
+                -----------------------------
+                -- Replace_Parameter_Types --
+                -----------------------------
+ 
+                procedure Replace_Parameter_Types (Spec : Node_Id) is
+                   Formal     : Node_Id;
+                   Formal_Id  : Entity_Id;
+                   Formal_Typ : Node_Id;
+ 
+                begin
+                   Formal := First (Parameter_Specifications (Spec));
+                   while Present (Formal) loop
+                      Formal_Id  := Defining_Identifier (Formal);
+                      Formal_Typ := Parameter_Type (Formal);
+ 
+                      --  Create a new entity for each class-wide formal to
+                      --  prevent aliasing with the original renaming. Replace
+                      --  the type of such a parameter with the candidate type.
+ 
+                      if Nkind (Formal_Typ) = N_Identifier
+                        and then Is_Class_Wide_Type (Etype (Formal_Typ))
+                      then
+                         Set_Defining_Identifier (Formal,
+                           Make_Defining_Identifier (Loc, Chars (Formal_Id)));
+ 
+                         Set_Parameter_Type (Formal,
+                           New_Occurrence_Of (Typ, Loc));
+                      end if;
+ 
+                      Next (Formal);
+                   end loop;
+                end Replace_Parameter_Types;
+ 
+                --  Local variables
+ 
+                Alt_Ren  : constant Node_Id := New_Copy_Tree (N);
+                Alt_Nam  : constant Node_Id := Name (Alt_Ren);
+                Alt_Spec : constant Node_Id := Specification (Alt_Ren);
+                Subp_Id  : Entity_Id;
+ 
+             --  Start of processing for Find_Primitive
+ 
+             begin
+                --  Each attempt to find a suitable primitive of a particular
+                --  type operates on its own copy of the original renaming.
+                --  As a result the original renaming is kept decoration and
+                --  side-effect free.
+ 
+                --  Inherit the overloaded status of the renamed subprogram name
+ 
+                if Is_Overloaded (Nam) then
+                   Set_Is_Overloaded (Alt_Nam);
+                   Save_Interps (Nam, Alt_Nam);
+                end if;
+ 
+                --  The copied renaming is hidden from visibility to prevent the
+                --  pollution of the enclosing context.
+ 
+                Set_Defining_Unit_Name (Alt_Spec, Make_Temporary (Loc, 'R'));
+ 
+                --  The types of all class-wide parameters must be changed to
+                --  the candidate type.
+ 
+                Replace_Parameter_Types (Alt_Spec);
+ 
+                --  Try to find a suitable primitive that matches the altered
+                --  profile of the renaming specification.
+ 
+                Subp_Id :=
+                  Find_Renamed_Entity
+                    (N         => Alt_Ren,
+                     Nam       => Name (Alt_Ren),
+                     New_S     => Analyze_Subprogram_Specification (Alt_Spec),
+                     Is_Actual => Is_Actual);
+ 
+                --  Do not return Any_Id if the resolution of the altered
+                --  profile failed as this complicates further checks on
+                --  the caller side; return Empty instead.
+ 
+                if Subp_Id = Any_Id then
+                   return Empty;
+                else
+                   return Subp_Id;
+                end if;
+             end Find_Primitive;
+ 
+             --------------------------
+             -- Interpretation_Error --
+             --------------------------
+ 
+             procedure Interpretation_Error (Subp_Id : Entity_Id) is
+             begin
+                Error_Msg_Sloc := Sloc (Subp_Id);
+ 
+                if Is_Internal (Subp_Id) then
+                   Error_Msg_NE
+                     ("\\possible interpretation: predefined & #",
+                      Spec, Formal_Spec);
+                else
+                   Error_Msg_NE
+                     ("\\possible interpretation: & defined #",
+                      Spec, Formal_Spec);
+                end if;
+             end Interpretation_Error;
+ 
+             ---------------------------
+             -- Is_Intrinsic_Equality --
+             ---------------------------
+ 
+             function Is_Intrinsic_Equality (Subp_Id : Entity_Id) return Boolean
+             is
+             begin
+                return
+                  Ekind (Subp_Id) = E_Operator
+                    and then Chars (Subp_Id) = Name_Op_Eq
+                    and then Is_Intrinsic_Subprogram (Subp_Id);
+             end Is_Intrinsic_Equality;
+ 
+             ---------------------------
+             -- Is_Suitable_Candidate --
+             ---------------------------
+ 
+             function Is_Suitable_Candidate (Subp_Id : Entity_Id) return Boolean
+             is
+             begin
+                if No (Subp_Id) then
+                   return False;
+ 
+                --  An intrinsic subprogram is never a good candidate. This
+                --  is an indication of a missing primitive, either defined
+                --  directly or inherited from a parent tagged type.
+ 
+                elsif Is_Intrinsic_Subprogram (Subp_Id) then
+                   return False;
+ 
+                else
+                   return True;
+                end if;
+             end Is_Suitable_Candidate;
+ 
+             --  Local variables
+ 
+             Actual_Typ : Entity_Id := Empty;
+             --  The actual class-wide type for Formal_Typ
+ 
+             CW_Prim_OK : Boolean;
+             CW_Prim_Op : Entity_Id;
+             --  The class-wide subprogram (if available) that corresponds to
+             --  the renamed generic formal subprogram.
+ 
+             Formal_Typ : Entity_Id := Empty;
+             --  The generic formal type with unknown discriminants
+ 
+             Root_Prim_OK : Boolean;
+             Root_Prim_Op : Entity_Id;
+             --  The root type primitive (if available) that corresponds to the
+             --  renamed generic formal subprogram.
+ 
+             Root_Typ : Entity_Id := Empty;
+             --  The root type of Actual_Typ
+ 
+             Formal   : Node_Id;
+ 
+          --  Start of processing for Find_Suitable_Candidate
+ 
+          begin
+             pragma Assert (not Error_Posted (Nam));
+ 
+             Prim_Op    := Empty;
+             Is_CW_Prim := False;
+ 
+             --  Analyze the renamed name, but do not resolve it. The resolution
+             --  is completed once a suitable subprogram is found.
+ 
+             Analyze (Nam);
+ 
+             --  When the renamed name denotes the intrinsic operator equals,
+             --  the name must be treated as overloaded. This allows for a
+             --  potential match against the root type's predefined equality
+             --  function.
+ 
+             if Is_Intrinsic_Equality (Entity (Nam)) then
+                Set_Is_Overloaded (Nam);
+                Collect_Interps   (Nam);
+             end if;
+ 
+             --  Step 1: Find the generic formal type and its corresponding
+             --  class-wide actual type from the renamed generic formal
+             --  subprogram.
+ 
+             Formal := First_Formal (Formal_Spec);
+             while Present (Formal) loop
+                if Has_Unknown_Discriminants (Etype (Formal))
+                  and then not Is_Class_Wide_Type (Etype (Formal))
+                  and then Is_Class_Wide_Type (Get_Instance_Of (Etype (Formal)))
+                then
+                   Formal_Typ := Etype (Formal);
+                   Actual_Typ := Base_Type (Get_Instance_Of (Formal_Typ));
+                   Root_Typ   := Root_Type (Actual_Typ);
+                   exit;
+                end if;
+ 
+                Next_Formal (Formal);
+             end loop;
+ 
+             --  The specification of the generic formal subprogram should
+             --  always contain a formal type with unknown discriminants whose
+             --  actual is a class-wide type; otherwise this indicates a failure
+             --  in function Has_Class_Wide_Actual.
+ 
+             pragma Assert (Present (Formal_Typ));
+ 
+             --  Step 2: Find the proper class-wide subprogram or primitive
+             --  that corresponds to the renamed generic formal subprogram.
+ 
+             CW_Prim_Op   := Find_Primitive (Actual_Typ);
+             CW_Prim_OK   := Is_Suitable_Candidate (CW_Prim_Op);
+             Root_Prim_Op := Find_Primitive (Root_Typ);
+             Root_Prim_OK := Is_Suitable_Candidate (Root_Prim_Op);
+ 
+             --  The class-wide actual type has two subprograms that correspond
+             --  to the renamed generic formal subprogram:
+ 
+             --    with procedure Prim_Op (Param : Formal_Typ);
+ 
+             --    procedure Prim_Op (Param : Actual_Typ);  --  may be inherited
+             --    procedure Prim_Op (Param : Actual_Typ'Class);
+ 
+             --  Even though the declaration of the two subprograms is legal, a
+             --  call to either one is ambiguous and therefore illegal.
+ 
+             if CW_Prim_OK and Root_Prim_OK then
+ 
+                --  A user-defined primitive has precedence over a predefined
+                --  one.
+ 
+                if Is_Internal (CW_Prim_Op)
+                  and then not Is_Internal (Root_Prim_Op)
+                then
+                   Prim_Op := Root_Prim_Op;
+ 
+                elsif Is_Internal (Root_Prim_Op)
+                  and then not Is_Internal (CW_Prim_Op)
+                then
+                   Prim_Op := CW_Prim_Op;
+                   Is_CW_Prim := True;
+ 
+                elsif CW_Prim_Op = Root_Prim_Op then
+                   Prim_Op := Root_Prim_Op;
+ 
+                --  The two subprograms are legal but the class-wide subprogram
+                --  is a class-wide wrapper built for a previous instantiation;
+                --  the wrapper has precedence.
+ 
+                elsif Present (Alias (CW_Prim_Op))
+                  and then Is_Class_Wide_Wrapper (Ultimate_Alias (CW_Prim_Op))
+                then
+                   Prim_Op := CW_Prim_Op;
+                   Is_CW_Prim := True;
+ 
+                --  Otherwise both candidate subprograms are user-defined and
+                --  ambiguous.
+ 
+                else
+                   Error_Msg_NE
+                     ("ambiguous actual for generic subprogram &",
+                      Spec, Formal_Spec);
+                   Interpretation_Error (Root_Prim_Op);
+                   Interpretation_Error (CW_Prim_Op);
+                   return;
+                end if;
+ 
+             elsif CW_Prim_OK and not Root_Prim_OK then
+                Prim_Op := CW_Prim_Op;
+                Is_CW_Prim := True;
+ 
+             elsif not CW_Prim_OK and Root_Prim_OK then
+                Prim_Op := Root_Prim_Op;
+ 
+             --  An intrinsic equality may act as a suitable candidate in the
+             --  case of a null type extension where the parent's equality
+             --  is hidden. A call to an intrinsic equality is expanded as
+             --  dispatching.
+ 
+             elsif Present (Root_Prim_Op)
+               and then Is_Intrinsic_Equality (Root_Prim_Op)
+             then
+                Prim_Op := Root_Prim_Op;
+ 
+             --  Otherwise there are no candidate subprograms. Let the caller
+             --  diagnose the error.
+ 
+             else
+                return;
+             end if;
+ 
+             --  At this point resolution has taken place and the name is no
+             --  longer overloaded. Mark the primitive as referenced.
+ 
+             Set_Is_Overloaded (Name (N), False);
+             Set_Referenced    (Prim_Op);
+          end Find_Suitable_Candidate;
+ 
+          --  Local variables
+ 
+          Is_CW_Prim : Boolean;
+ 
+       --  Start of processing for Handle_Instance_With_Class_Wide_Type
+ 
+       begin
+          Wrapped_Prim := Empty;
+          Wrap_Id := Empty;
+ 
+          --  Ada 2012 (AI05-0071): A generic/instance scenario involving a
+          --  formal type with unknown discriminants and a generic primitive
+          --  operation of the said type with a box require special processing
+          --  when the actual is a class-wide type:
+          --
+          --    generic
+          --       type Formal_Typ (<>) is private;
+          --       with procedure Prim_Op (Param : Formal_Typ) is <>;
+          --    package Gen is ...
+          --
+          --    package Inst is new Gen (Actual_Typ'Class);
+          --
+          --  In this case the general renaming mechanism used in the prologue
+          --  of an instance no longer applies:
+          --
+          --    procedure Prim_Op (Param : Formal_Typ) renames Prim_Op;
+          --
+          --  The above is replaced the following wrapper/renaming combination:
+          --
+          --    procedure Wrapper (Param : Formal_Typ) is  --  wrapper
+          --    begin
+          --       Prim_Op (Param);                        --  primitive
+          --    end Wrapper;
+          --
+          --    procedure Prim_Op (Param : Formal_Typ) renames Wrapper;
+          --
+          --  This transformation applies only if there is no explicit visible
+          --  class-wide operation at the point of the instantiation. Ren_Id is
+          --  the entity of the renaming declaration. When the transformation
+          --  applies, Wrapped_Prim is the entity of the wrapped primitive.
+ 
+          if Box_Present (Inst_Node) then
+             Find_Suitable_Candidate
+               (Prim_Op    => Wrapped_Prim,
+                Is_CW_Prim => Is_CW_Prim);
+ 
+             if Present (Wrapped_Prim) then
+                if not Is_CW_Prim then
+                   Build_Class_Wide_Wrapper (Ren_Id, Wrapped_Prim, Wrap_Id);
+ 
+                --  Small optimization: When the candidate is a class-wide
+                --  subprogram we don't build the wrapper; we modify the
+                --  renaming declaration to directly map the actual to the
+                --  generic formal and discard the candidate.
+ 
+                else
+                   Rewrite (Nam, New_Occurrence_Of (Wrapped_Prim, Sloc (N)));
+                   Wrapped_Prim := Empty;
+                end if;
+             end if;
+ 
+          --  Ada 2022 (AI12-0165, RM 12.6(8.5/3)): The actual subprogram for a
+          --  formal_abstract_subprogram_declaration shall be:
+          --   a) a dispatching operation of the controlling type; or
+          --   b) if the controlling type is a formal type, and the actual
+          --      type corresponding to that formal type is a specific type T,
+          --      a dispatching operation of type T; or
+          --   c) if the controlling type is a formal type, and the actual
+          --      type is a class-wide type T'Class, an implicitly declared
+          --      subprogram corresponding to a primitive operation of type T.
+ 
+          elsif Nkind (Inst_Node) = N_Formal_Abstract_Subprogram_Declaration
+            and then Is_Entity_Name (Nam)
+          then
+             Find_Suitable_Candidate
+               (Prim_Op    => Wrapped_Prim,
+                Is_CW_Prim => Is_CW_Prim);
+ 
+             if Present (Wrapped_Prim) then
+ 
+                --  Cases (a) and (b); see previous description.
+ 
+                if not Is_CW_Prim then
+                   Build_Class_Wide_Wrapper (Ren_Id, Wrapped_Prim, Wrap_Id);
+ 
+                --  Case (c); see previous description.
+ 
+                --  Implicit operations of T'Class for subtype declarations
+                --  are built by Derive_Subprogram, and their Alias attribute
+                --  references the primitive operation of T.
+ 
+                elsif not Comes_From_Source (Wrapped_Prim)
+                  and then Nkind (Parent (Wrapped_Prim)) = N_Subtype_Declaration
+                  and then Present (Alias (Wrapped_Prim))
+                then
+                   --  We don't need to build the wrapper; we modify the
+                   --  renaming declaration to directly map the actual to
+                   --  the generic formal and discard the candidate.
+ 
+                   Rewrite (Nam,
+                     New_Occurrence_Of (Alias (Wrapped_Prim), Sloc (N)));
+                   Wrapped_Prim := Empty;
+ 
+                --  Legality rules do not apply; discard the candidate.
+ 
+                else
+                   Wrapped_Prim := Empty;
+                end if;
+             end if;
+          end if;
+       end Handle_Instance_With_Class_Wide_Type;
+ 
        -------------------------
        -- Original_Subprogram --
        -------------------------
*************** package body Sem_Ch8 is
*** 2916,2927 ****
        --  Local variables
  
        CW_Actual : constant Boolean := Has_Class_Wide_Actual;
!       --  Ada 2012 (AI05-071, AI05-0131): True if the renaming is for a
!       --  defaulted formal subprogram when the actual for a related formal
!       --  type is class-wide.
  
!       Inst_Node : Node_Id := Empty;
!       New_S     : Entity_Id;
  
     --  Start of processing for Analyze_Subprogram_Renaming
  
--- 3103,3115 ----
        --  Local variables
  
        CW_Actual : constant Boolean := Has_Class_Wide_Actual;
!       --  Ada 2012 (AI05-071, AI05-0131) and Ada 2022 (AI12-0165): True if the
!       --  renaming is for a defaulted formal subprogram when the actual for a
!       --  related formal type is class-wide.
  
!       Inst_Node    : Node_Id   := Empty;
!       New_S        : Entity_Id := Empty;
!       Wrapped_Prim : Entity_Id := Empty;
  
     --  Start of processing for Analyze_Subprogram_Renaming
  
*************** package body Sem_Ch8 is
*** 3052,3062 ****
        if Is_Actual then
           Inst_Node := Unit_Declaration_Node (Formal_Spec);
  
!          --  Check whether the renaming is for a defaulted actual subprogram
!          --  with a class-wide actual.
  
!          if CW_Actual and then Box_Present (Inst_Node) then
!             Build_Class_Wide_Wrapper (New_S, Old_S);
  
           elsif Is_Entity_Name (Nam)
             and then Present (Entity (Nam))
--- 3240,3303 ----
        if Is_Actual then
           Inst_Node := Unit_Declaration_Node (Formal_Spec);
  
!          --  Ada 2012 (AI05-0071) and Ada 2022 (AI12-0165): when the actual
!          --  type is a class-wide type T'Class we may need to wrap a primitive
!          --  operation of T. Search for the wrapped primitive and (if required)
!          --  build a wrapper whose body consists of a dispatching call to the
!          --  wrapped primitive of T, with its formal parameters as the actual
!          --  parameters.
  
!          if CW_Actual and then
! 
!          --  Ada 2012 (AI05-0071): Check whether the renaming is for a
!          --  defaulted actual subprogram with a class-wide actual.
! 
!             (Box_Present (Inst_Node)
! 
!                 or else
! 
!          --  Ada 2022 (AI12-0165): Check whether the renaming is for a formal
!          --  abstract subprogram declaration with a class-wide actual.
! 
!              (Nkind (Inst_Node) = N_Formal_Abstract_Subprogram_Declaration
!                and then Is_Entity_Name (Nam)))
!          then
!             New_S := Analyze_Subprogram_Specification (Spec);
! 
!             --  Do not attempt to build the wrapper if the renaming is in error
! 
!             if not Error_Posted (Nam) then
!                Handle_Instance_With_Class_Wide_Type
!                  (Inst_Node    => Inst_Node,
!                   Ren_Id       => New_S,
!                   Wrapped_Prim => Wrapped_Prim,
!                   Wrap_Id      => Old_S);
! 
!                --  If several candidates were found, then we reported the
!                --  ambiguity; stop processing the renaming declaration to
!                --  avoid reporting further (spurious) errors.
! 
!                if Error_Posted (Spec) then
!                   return;
!                end if;
! 
!             end if;
!          end if;
! 
!          if Present (Wrapped_Prim) then
! 
!             --  When the wrapper is built, the subprogram renaming aliases
!             --  the wrapper.
! 
!             Analyze (Nam);
! 
!             pragma Assert (Old_S = Entity (Nam)
!               and then Is_Class_Wide_Wrapper (Old_S));
! 
!             --  The subprogram renaming declaration may become Ghost if it
!             --  renames a wrapper of a Ghost entity.
! 
!             Mark_Ghost_Renaming (N, Wrapped_Prim);
  
           elsif Is_Entity_Name (Nam)
             and then Present (Entity (Nam))
*************** package body Sem_Ch8 is
*** 3238,3244 ****
           --  constructed later at the freeze point, so indicate that the
           --  completion has not been seen yet.
  
!          Set_Ekind (New_S, E_Subprogram_Body);
           New_S := Rename_Spec;
           Set_Has_Completion (Rename_Spec, False);
  
--- 3479,3488 ----
           --  constructed later at the freeze point, so indicate that the
           --  completion has not been seen yet.
  
!          Reinit_Field_To_Zero (New_S, F_Has_Out_Or_In_Out_Parameter);
!          Reinit_Field_To_Zero (New_S, F_Needs_No_Actuals,
!            Old_Ekind => (E_Function | E_Procedure => True, others => False));
!          Mutate_Ekind (New_S, E_Subprogram_Body);
           New_S := Rename_Spec;
           Set_Has_Completion (Rename_Spec, False);
  
*************** package body Sem_Ch8 is
*** 3256,3262 ****
                 Style.Missing_Overriding (N, Rename_Spec);
              end if;
  
!          elsif Must_Override (Specification (N)) then
              Error_Msg_NE ("subprogram& is not overriding", N, Rename_Spec);
           end if;
  
--- 3500,3508 ----
                 Style.Missing_Overriding (N, Rename_Spec);
              end if;
  
!          elsif Must_Override (Specification (N))
!            and then not Can_Override_Operator (Rename_Spec)
!          then
              Error_Msg_NE ("subprogram& is not overriding", N, Rename_Spec);
           end if;
  
*************** package body Sem_Ch8 is
*** 3538,3544 ****
                 end if;
  
                 if Original_Subprogram (Old_S) = Rename_Spec then
!                   Error_Msg_N ("unfrozen subprogram cannot rename itself ", N);
                 else
                    Check_Formal_Subprogram_Conformance (New_S, Old_S, Spec);
                 end if;
--- 3784,3790 ----
                 end if;
  
                 if Original_Subprogram (Old_S) = Rename_Spec then
!                   Error_Msg_N ("unfrozen subprogram cannot rename itself", N);
                 else
                    Check_Formal_Subprogram_Conformance (New_S, Old_S, Spec);
                 end if;
*************** package body Sem_Ch8 is
*** 3631,3637 ****
              --  indicate that the renaming is an abstract dispatching operation
              --  with a controlling type.
  
!             if Is_Actual and then Is_Abstract_Subprogram (Formal_Spec) then
  
                 --  Mark the renaming as abstract here, so Find_Dispatching_Type
                 --  see it as corresponding to a generic association for a
--- 3877,3891 ----
              --  indicate that the renaming is an abstract dispatching operation
              --  with a controlling type.
  
!             --  Skip this decoration when the renaming corresponds to an
!             --  association with class-wide wrapper (see above) because such
!             --  wrapper is neither abstract nor a dispatching operation (its
!             --  body has the dispatching call to the wrapped primitive).
! 
!             if Is_Actual
!               and then Is_Abstract_Subprogram (Formal_Spec)
!               and then No (Wrapped_Prim)
!             then
  
                 --  Mark the renaming as abstract here, so Find_Dispatching_Type
                 --  see it as corresponding to a generic association for a
*************** package body Sem_Ch8 is
*** 3745,3759 ****
              Set_Has_Delayed_Freeze (New_S, False);
              Freeze_Before (N, New_S);
  
-             --  An abstract subprogram is only allowed as an actual in the case
-             --  where the formal subprogram is also abstract.
- 
              if (Ekind (Old_S) = E_Procedure or else Ekind (Old_S) = E_Function)
-               and then Is_Abstract_Subprogram (Old_S)
                and then not Is_Abstract_Subprogram (Formal_Spec)
              then
!                Error_Msg_N
!                  ("abstract subprogram not allowed as generic actual", Nam);
              end if;
           end if;
  
--- 3999,4029 ----
              Set_Has_Delayed_Freeze (New_S, False);
              Freeze_Before (N, New_S);
  
              if (Ekind (Old_S) = E_Procedure or else Ekind (Old_S) = E_Function)
                and then not Is_Abstract_Subprogram (Formal_Spec)
              then
!                --  An abstract subprogram is only allowed as an actual in the
!                --  case where the formal subprogram is also abstract.
! 
!                if Is_Abstract_Subprogram (Old_S) then
!                   Error_Msg_N
!                     ("abstract subprogram not allowed as generic actual", Nam);
!                end if;
! 
!                --  AI12-0412: A primitive of an abstract type with Pre'Class
!                --  or Post'Class aspects specified with nonstatic expressions
!                --  is not allowed as actual for a nonabstract formal subprogram
!                --  (see RM 6.1.1(18.2/5).
! 
!                if Is_Dispatching_Operation (Old_S)
!                  and then
!                    Is_Prim_Of_Abst_Type_With_Nonstatic_CW_Pre_Post (Old_S)
!                then
!                   Error_Msg_N
!                     ("primitive of abstract type with nonstatic class-wide "
!                       & "pre/postconditions not allowed as actual",
!                      Nam);
!                end if;
              end if;
           end if;
  
*************** package body Sem_Ch8 is
*** 4404,4410 ****
  
        if not Configurable_Run_Time_Mode
          and then not Present (Corresponding_Formal_Spec (N))
!         and then Etype (Nam) /= RTE (RE_AST_Handler)
        then
           declare
              P : constant Node_Id := Prefix (Nam);
--- 4674,4680 ----
  
        if not Configurable_Run_Time_Mode
          and then not Present (Corresponding_Formal_Spec (N))
!         and then not Is_RTE (Etype (Nam), RE_AST_Handler)
        then
           declare
              P : constant Node_Id := Prefix (Nam);
*************** package body Sem_Ch8 is
*** 4428,4434 ****
              if Is_Tagged_Type (Etype (P))
                and then In_Open_Scopes (Scope (Etype (P)))
              then
-                Ensure_Freeze_Node (Etype (P));
                 Append_Freeze_Action (Etype (P), Body_Node);
              else
                 Rewrite (N, Body_Node);
--- 4698,4703 ----
*************** package body Sem_Ch8 is
*** 4609,4618 ****
     -- Check_In_Previous_With_Clause --
     -----------------------------------
  
!    procedure Check_In_Previous_With_Clause
!      (N   : Node_Id;
!       Nam : Entity_Id)
!    is
        Pack : constant Entity_Id := Entity (Original_Node (Nam));
        Item : Node_Id;
        Par  : Node_Id;
--- 4878,4884 ----
     -- Check_In_Previous_With_Clause --
     -----------------------------------
  
!    procedure Check_In_Previous_With_Clause (N, Nam : Node_Id) is
        Pack : constant Entity_Id := Entity (Original_Node (Nam));
        Item : Node_Id;
        Par  : Node_Id;
*************** package body Sem_Ch8 is
*** 4819,4825 ****
  
              Pop_Scope;
  
!             while not (Is_List_Member (Decl))
                or else Nkind (Parent (Decl)) in N_Protected_Definition
                                               | N_Task_Definition
              loop
--- 5085,5091 ----
  
              Pop_Scope;
  
!             while not Is_List_Member (Decl)
                or else Nkind (Parent (Decl)) in N_Protected_Definition
                                               | N_Task_Definition
              loop
*************** package body Sem_Ch8 is
*** 4941,4949 ****
                 Next_Entity (Id);
              end loop;
  
!             if Present (Renamed_Object (Pack)) then
!                Set_In_Use (Renamed_Object (Pack), False);
!                Set_Current_Use_Clause (Renamed_Object (Pack), Empty);
              end if;
  
              if Chars (Pack) = Name_System
--- 5207,5215 ----
                 Next_Entity (Id);
              end loop;
  
!             if Present (Renamed_Entity (Pack)) then
!                Set_In_Use (Renamed_Entity (Pack), False);
!                Set_Current_Use_Clause (Renamed_Entity (Pack), Empty);
              end if;
  
              if Chars (Pack) = Name_System
*************** package body Sem_Ch8 is
*** 5157,5164 ****
           ------------------------
  
           function Declared_In_Actual (Pack : Entity_Id) return Boolean is
              Act : Entity_Id;
- 
           begin
              if No (Associated_Formal_Package (Pack)) then
                 return False;
--- 5423,5430 ----
           ------------------------
  
           function Declared_In_Actual (Pack : Entity_Id) return Boolean is
+             pragma Assert (Ekind (Pack) = E_Package);
              Act : Entity_Id;
           begin
              if No (Associated_Formal_Package (Pack)) then
                 return False;
*************** package body Sem_Ch8 is
*** 5166,5178 ****
              else
                 Act := First_Entity (Pack);
                 while Present (Act) loop
!                   if Renamed_Object (Pack) = Scop then
                       return True;
  
                    --  Check for end of list of actuals
  
                    elsif Ekind (Act) = E_Package
!                     and then Renamed_Object (Act) = Pack
                    then
                       return False;
  
--- 5432,5444 ----
              else
                 Act := First_Entity (Pack);
                 while Present (Act) loop
!                   if Renamed_Entity (Pack) = Scop then
                       return True;
  
                    --  Check for end of list of actuals
  
                    elsif Ekind (Act) = E_Package
!                     and then Renamed_Entity (Act) = Pack
                    then
                       return False;
  
*************** package body Sem_Ch8 is
*** 5271,5286 ****
  
           elsif not Comes_From_Source (E) then
              return False;
- 
-          --  In gnat internal mode, we consider all entities known. The
-          --  historical reason behind this discrepancy is not known??? But the
-          --  only effect is to modify the error message given, so it is not
-          --  critical. Since it only affects the exact wording of error
-          --  messages in illegal programs, we do not mention this as an
-          --  effect of -gnatg, since it is not a language modification.
- 
-          elsif GNAT_Mode then
-             return True;
           end if;
  
           --  Here we have an entity that is not from package Standard, and
--- 5537,5542 ----
*************** package body Sem_Ch8 is
*** 5433,5440 ****
                       null;
  
                    else
!                      Error_Msg_N -- CODEFIX
!                        ("non-visible declaration#!", N);
  
                       if Ekind (Scope (Ent)) /= E_Generic_Package then
                          Found := True;
--- 5689,5715 ----
                       null;
  
                    else
!                      --  When the entity comes from a generic instance the
!                      --  normal error message machinery will give the line
!                      --  number of the generic package and the location of
!                      --  the generic instance, but not the name of the
!                      --  the instance.
! 
!                      --  So, in order to give more descriptive error messages
!                      --  in this case, we include the name of the generic
!                      --  package.
! 
!                      if Is_Generic_Instance (Scope (Ent)) then
!                         Error_Msg_Name_1 := Chars (Scope (Ent));
!                         Error_Msg_N -- CODEFIX
!                           ("non-visible declaration from %#!", N);
! 
!                      --  Otherwise print the message normally
! 
!                      else
!                         Error_Msg_N -- CODEFIX
!                           ("non-visible declaration#!", N);
!                      end if;
  
                       if Ekind (Scope (Ent)) /= E_Generic_Package then
                          Found := True;
*************** package body Sem_Ch8 is
*** 5999,6007 ****
  
                 if Scope (E) = Scope (E2)
                   and then Ekind (E) = E_Package
!                  and then Present (Renamed_Object (E))
!                  and then Is_Generic_Instance (Renamed_Object (E))
!                  and then In_Open_Scopes (Renamed_Object (E))
                   and then Comes_From_Source (N)
                 then
                    Set_Is_Immediately_Visible (E, False);
--- 6274,6282 ----
  
                 if Scope (E) = Scope (E2)
                   and then Ekind (E) = E_Package
!                  and then Present (Renamed_Entity (E))
!                  and then Is_Generic_Instance (Renamed_Entity (E))
!                  and then In_Open_Scopes (Renamed_Entity (E))
                   and then Comes_From_Source (N)
                 then
                    Set_Is_Immediately_Visible (E, False);
*************** package body Sem_Ch8 is
*** 6176,6192 ****
                    --  Else see if we have a left hand side
  
                    else
!                      case Is_LHS (N) is
!                         when Yes =>
                             Generate_Reference (E, N, 'm');
  
!                         when No =>
                             Generate_Reference (E, N, 'r');
  
-                         --  If we don't know now, generate reference later
- 
-                         when Unknown =>
-                            Defer_Reference ((E, N));
                       end case;
                    end if;
                 end if;
--- 6451,6463 ----
                    --  Else see if we have a left hand side
  
                    else
!                      case Known_To_Be_Assigned (N, Only_LHS => True) is
!                         when True =>
                             Generate_Reference (E, N, 'm');
  
!                         when False =>
                             Generate_Reference (E, N, 'r');
  
                       end case;
                    end if;
                 end if;
*************** package body Sem_Ch8 is
*** 6237,6243 ****
  
        if Needs_Variable_Reference_Marker (N => N, Calls_OK => False) then
           declare
!             Is_Assignment_LHS : constant Boolean := Is_LHS (N) = Yes;
  
           begin
              Build_Variable_Reference_Marker
--- 6508,6514 ----
  
        if Needs_Variable_Reference_Marker (N => N, Calls_OK => False) then
           declare
!             Is_Assignment_LHS : constant Boolean := Known_To_Be_Assigned (N);
  
           begin
              Build_Variable_Reference_Marker
*************** package body Sem_Ch8 is
*** 6332,6340 ****
        --  original package.
  
        if Ekind (P_Name) = E_Package
!         and then Present (Renamed_Object (P_Name))
        then
!          P_Name := Renamed_Object (P_Name);
  
           if From_Limited_With (P_Name)
             and then not Unit_Is_Visible (Cunit (Get_Source_Unit (P_Name)))
--- 6603,6611 ----
        --  original package.
  
        if Ekind (P_Name) = E_Package
!         and then Present (Renamed_Entity (P_Name))
        then
!          P_Name := Renamed_Entity (P_Name);
  
           if From_Limited_With (P_Name)
             and then not Unit_Is_Visible (Cunit (Get_Source_Unit (P_Name)))
*************** package body Sem_Ch8 is
*** 6790,6796 ****
           end if;
        end if;
  
!       Change_Selected_Component_To_Expanded_Name (N);
  
        --  Preserve relevant elaboration-related attributes of the context which
        --  are no longer available or very expensive to recompute once analysis,
--- 7061,7077 ----
           end if;
        end if;
  
!       case Nkind (N) is
!          when N_Selected_Component =>
!             Reinit_Field_To_Zero (N, F_Is_Prefixed_Call);
!             Change_Selected_Component_To_Expanded_Name (N);
! 
!          when N_Expanded_Name =>
!             null;
! 
!          when others =>
!             pragma Assert (False);
!       end case;
  
        --  Preserve relevant elaboration-related attributes of the context which
        --  are no longer available or very expensive to recompute once analysis,
*************** package body Sem_Ch8 is
*** 6820,6834 ****
        else
           Set_Entity_Or_Discriminal (N, Id);
  
!          case Is_LHS (N) is
!             when Yes =>
                 Generate_Reference (Id, N, 'm');
  
!             when No =>
                 Generate_Reference (Id, N, 'r');
  
-             when Unknown =>
-                Defer_Reference ((Id, N));
           end case;
        end if;
  
--- 7101,7113 ----
        else
           Set_Entity_Or_Discriminal (N, Id);
  
!          case Known_To_Be_Assigned (N, Only_LHS => True) is
!             when True =>
                 Generate_Reference (Id, N, 'm');
  
!             when False =>
                 Generate_Reference (Id, N, 'r');
  
           end case;
        end if;
  
*************** package body Sem_Ch8 is
*** 6924,6930 ****
              Calls_OK => False)
        then
           declare
!             Is_Assignment_LHS : constant Boolean := Is_LHS (N) = Yes;
  
           begin
              Build_Variable_Reference_Marker
--- 7203,7209 ----
              Calls_OK => False)
        then
           declare
!             Is_Assignment_LHS : constant Boolean := Known_To_Be_Assigned (N);
  
           begin
              Build_Variable_Reference_Marker
*************** package body Sem_Ch8 is
*** 6936,6945 ****
     end Find_Expanded_Name;
  
     --------------------
!    -- Find_Most_Prev --
     --------------------
  
!    function Find_Most_Prev (Use_Clause : Node_Id) return Node_Id is
        Curr : Node_Id;
  
     begin
--- 7215,7224 ----
     end Find_Expanded_Name;
  
     --------------------
!    -- Find_First_Use --
     --------------------
  
!    function Find_First_Use (Use_Clause : Node_Id) return Node_Id is
        Curr : Node_Id;
  
     begin
*************** package body Sem_Ch8 is
*** 6951,6957 ****
        end loop;
  
        return Curr;
!    end Find_Most_Prev;
  
     -------------------------
     -- Find_Renamed_Entity --
--- 7230,7236 ----
        end loop;
  
        return Curr;
!    end Find_First_Use;
  
     -------------------------
     -- Find_Renamed_Entity --
*************** package body Sem_Ch8 is
*** 7129,7137 ****
                 Scop := Entity (Prefix (Nam));
  
                 if Ekind (Scop) = E_Package
!                  and then Present (Renamed_Object (Scop))
                 then
!                   Scop := Renamed_Object (Scop);
                 end if;
  
                 --  Operator is visible if prefix of expanded name denotes
--- 7408,7416 ----
                 Scop := Entity (Prefix (Nam));
  
                 if Ekind (Scop) = E_Package
!                  and then Present (Renamed_Entity (Scop))
                 then
!                   Scop := Renamed_Entity (Scop);
                 end if;
  
                 --  Operator is visible if prefix of expanded name denotes
*************** package body Sem_Ch8 is
*** 7212,7219 ****
                          if Within (It.Nam, Inst) then
                             if Within (Old_S, Inst) then
                                declare
!                                  It_D  : constant Uint := Scope_Depth (It.Nam);
!                                  Old_D : constant Uint := Scope_Depth (Old_S);
                                   N_Ent : Entity_Id;
                                begin
                                   --  Choose the innermost subprogram, which
--- 7491,7500 ----
                          if Within (It.Nam, Inst) then
                             if Within (Old_S, Inst) then
                                declare
!                                  It_D  : constant Uint :=
!                                    Scope_Depth_Default_0 (It.Nam);
!                                  Old_D : constant Uint :=
!                                    Scope_Depth_Default_0 (Old_S);
                                   N_Ent : Entity_Id;
                                begin
                                   --  Choose the innermost subprogram, which
*************** package body Sem_Ch8 is
*** 7469,7483 ****
                    --  dispatch table wrappers. Required to avoid generating
                    --  elaboration code with HI runtimes.
  
!                   elsif RTU_Loaded (Ada_Tags)
!                     and then
!                       ((RTE_Available (RE_Dispatch_Table_Wrapper)
!                          and then Scope (Selector) =
!                                      RTE (RE_Dispatch_Table_Wrapper))
!                         or else
!                           (RTE_Available (RE_No_Dispatch_Table_Wrapper)
!                             and then Scope (Selector) =
!                                      RTE (RE_No_Dispatch_Table_Wrapper)))
                    then
                       C_Etype := Empty;
                    else
--- 7750,7758 ----
                    --  dispatch table wrappers. Required to avoid generating
                    --  elaboration code with HI runtimes.
  
!                   elsif Is_RTE (Scope (Selector), RE_Dispatch_Table_Wrapper)
!                     or else
!                       Is_RTE (Scope (Selector), RE_No_Dispatch_Table_Wrapper)
                    then
                       C_Etype := Empty;
                    else
*************** package body Sem_Ch8 is
*** 7549,7558 ****
              P_Type := Implicitly_Designated_Type (P_Type);
           end if;
  
!          --  First check for components of a record object (not the
!          --  result of a call, which is handled below).
  
!          if Has_Components (P_Type)
             and then not Is_Overloadable (P_Name)
             and then not Is_Type (P_Name)
           then
--- 7824,7839 ----
              P_Type := Implicitly_Designated_Type (P_Type);
           end if;
  
!          --  First check for components of a record object (not the result of
!          --  a call, which is handled below). This also covers the case where
!          --  the extension feature that supports the prefixed form of calls
!          --  for primitives of untagged types is enabled (excluding concurrent
!          --  cases, which are handled further below).
  
!          if Is_Type (P_Type)
!            and then (Has_Components (P_Type)
!                       or else (Extensions_Allowed
!                                 and then not Is_Concurrent_Type (P_Type)))
             and then not Is_Overloadable (P_Name)
             and then not Is_Type (P_Name)
           then
*************** package body Sem_Ch8 is
*** 7783,7788 ****
--- 8064,8073 ----
              elsif Ekind (P_Name) = E_Void then
                 Premature_Usage (P);
  
+             elsif Ekind (P_Name) = E_Generic_Package then
+                Error_Msg_N ("prefix must not be a generic package", N);
+                Error_Msg_N ("\use package instantiation as prefix instead", N);
+ 
              elsif Nkind (P) /= N_Attribute_Reference then
  
                 --  This may have been meant as a prefixed call to a primitive
*************** package body Sem_Ch8 is
*** 7800,7806 ****
                    then
                       Error_Msg_N
                         ("prefixed call is only allowed for objects of a "
!                         & "tagged type", N);
                    end if;
                 end;
  
--- 8085,8100 ----
                    then
                       Error_Msg_N
                         ("prefixed call is only allowed for objects of a "
!                         & "tagged type unless -gnatX is used", N);
! 
!                      if not Extensions_Allowed
!                        and then
!                          Try_Object_Operation (N, Allow_Extensions => True)
!                      then
!                         Error_Msg_N
!                           ("\using -gnatX would make the prefixed call legal",
!                            N);
!                      end if;
                    end if;
                 end;
  
*************** package body Sem_Ch8 is
*** 7893,7908 ****
                          Set_Entity (N, Any_Type);
                          return;
  
!                      --  ??? This test is temporarily disabled (always
!                      --  False) because it causes an unwanted warning on
!                      --  GNAT sources (built with -gnatg, which includes
!                      --  Warn_On_Obsolescent_ Feature). Once this issue
!                      --  is cleared in the sources, it can be enabled.
  
!                      elsif Warn_On_Obsolescent_Feature and then False then
!                         Error_Msg_N
!                           ("applying ''Class to an untagged incomplete type"
!                            & " is an obsolescent feature (RM J.11)?r?", N);
                       end if;
                    end if;
  
--- 8187,8204 ----
                          Set_Entity (N, Any_Type);
                          return;
  
!                      else
!                         if Restriction_Check_Required (No_Obsolescent_Features)
!                         then
!                            Check_Restriction
!                              (No_Obsolescent_Features, Prefix (N));
!                         end if;
  
!                         if Warn_On_Obsolescent_Feature then
!                            Error_Msg_N
!                              ("applying ''Class to an untagged incomplete type"
!                               & " is an obsolescent feature (RM J.11)?r?", N);
!                         end if;
                       end if;
                    end if;
  
*************** package body Sem_Ch8 is
*** 8087,8111 ****
                 if Ekind (Base_Type (T_Name)) = E_Task_Type then
  
                    --  In Ada 2005, a task name can be used in an access
!                   --  definition within its own body. It cannot be used
!                   --  in the discriminant part of the task declaration,
!                   --  nor anywhere else in the declaration because entries
!                   --  cannot have access parameters.
  
                    if Ada_Version >= Ada_2005
                      and then Nkind (Parent (N)) = N_Access_Definition
                    then
                       Set_Entity (N, T_Name);
                       Set_Etype  (N, T_Name);
! 
!                      if Has_Completion (T_Name) then
!                         return;
! 
!                      else
!                         Error_Msg_N
!                           ("task type cannot be used as type mark " &
!                            "within its own declaration", N);
!                      end if;
  
                    else
                       Error_Msg_N
--- 8383,8396 ----
                 if Ekind (Base_Type (T_Name)) = E_Task_Type then
  
                    --  In Ada 2005, a task name can be used in an access
!                   --  definition within its own body.
  
                    if Ada_Version >= Ada_2005
                      and then Nkind (Parent (N)) = N_Access_Definition
                    then
                       Set_Entity (N, T_Name);
                       Set_Etype  (N, T_Name);
!                      return;
  
                    else
                       Error_Msg_N
*************** package body Sem_Ch8 is
*** 8959,8969 ****
     procedure Push_Scope (S : Entity_Id) is
        E : constant Entity_Id := Scope (S);
  
     begin
        if Ekind (S) = E_Void then
           null;
  
!       --  Set scope depth if not a non-concurrent type, and we have not yet set
        --  the scope depth. This means that we have the first occurrence of the
        --  scope, and this is where the depth is set.
  
--- 9244,9276 ----
     procedure Push_Scope (S : Entity_Id) is
        E : constant Entity_Id := Scope (S);
  
+       function Component_Alignment_Default return Component_Alignment_Kind;
+       --  Return Component_Alignment_Kind for the newly-pushed scope.
+ 
+       function Component_Alignment_Default return Component_Alignment_Kind is
+       begin
+          --  Each new scope pushed onto the scope stack inherits the component
+          --  alignment of the previous scope. This emulates the "visibility"
+          --  semantics of pragma Component_Alignment.
+ 
+          if Scope_Stack.Last > Scope_Stack.First then
+             return Scope_Stack.Table
+               (Scope_Stack.Last - 1).Component_Alignment_Default;
+ 
+          --  Otherwise, this is the first scope being pushed on the scope
+          --  stack. Inherit the component alignment from the configuration
+          --  form of pragma Component_Alignment (if any).
+ 
+          else
+             return Configuration_Component_Alignment;
+          end if;
+       end Component_Alignment_Default;
+ 
     begin
        if Ekind (S) = E_Void then
           null;
  
!       --  Set scope depth if not a nonconcurrent type, and we have not yet set
        --  the scope depth. This means that we have the first occurrence of the
        --  scope, and this is where the depth is set.
  
*************** package body Sem_Ch8 is
*** 8977,9035 ****
              Set_Scope_Depth_Value (S, Uint_1);
  
           elsif not Is_Record_Type (Current_Scope) then
!             if Ekind (S) = E_Loop then
!                Set_Scope_Depth_Value (S, Scope_Depth (Current_Scope));
!             else
!                Set_Scope_Depth_Value (S, Scope_Depth (Current_Scope) + 1);
              end if;
           end if;
        end if;
  
        Scope_Stack.Increment_Last;
  
!       declare
!          SST : Scope_Stack_Entry renames Scope_Stack.Table (Scope_Stack.Last);
! 
!       begin
!          SST.Entity                        := S;
!          SST.Save_Scope_Suppress           := Scope_Suppress;
!          SST.Save_Local_Suppress_Stack_Top := Local_Suppress_Stack_Top;
!          SST.Save_Check_Policy_List        := Check_Policy_List;
!          SST.Save_Default_Storage_Pool     := Default_Pool;
!          SST.Save_No_Tagged_Streams        := No_Tagged_Streams;
!          SST.Save_SPARK_Mode               := SPARK_Mode;
!          SST.Save_SPARK_Mode_Pragma        := SPARK_Mode_Pragma;
!          SST.Save_Default_SSO              := Default_SSO;
!          SST.Save_Uneval_Old               := Uneval_Old;
! 
!          --  Each new scope pushed onto the scope stack inherits the component
!          --  alignment of the previous scope. This emulates the "visibility"
!          --  semantics of pragma Component_Alignment.
! 
!          if Scope_Stack.Last > Scope_Stack.First then
!             SST.Component_Alignment_Default :=
!               Scope_Stack.Table
!                 (Scope_Stack.Last - 1).Component_Alignment_Default;
! 
!          --  Otherwise, this is the first scope being pushed on the scope
!          --  stack. Inherit the component alignment from the configuration
!          --  form of pragma Component_Alignment (if any).
! 
!          else
!             SST.Component_Alignment_Default :=
!               Configuration_Component_Alignment;
!          end if;
! 
!          SST.Last_Subprogram_Name           := null;
!          SST.Is_Transient                   := False;
!          SST.Node_To_Be_Wrapped             := Empty;
!          SST.Pending_Freeze_Actions         := No_List;
!          SST.Actions_To_Be_Wrapped          := (others => No_List);
!          SST.First_Use_Clause               := Empty;
!          SST.Is_Active_Stack_Base           := False;
!          SST.Previous_Visibility            := False;
!          SST.Locked_Shared_Objects          := No_Elist;
!       end;
  
        if Debug_Flag_W then
           Write_Str ("--> new scope: ");
--- 9284,9322 ----
              Set_Scope_Depth_Value (S, Uint_1);
  
           elsif not Is_Record_Type (Current_Scope) then
!             if Scope_Depth_Set (Current_Scope) then
!                if Ekind (S) = E_Loop then
!                   Set_Scope_Depth_Value (S, Scope_Depth (Current_Scope));
!                else
!                   Set_Scope_Depth_Value (S, Scope_Depth (Current_Scope) + 1);
!                end if;
              end if;
           end if;
        end if;
  
        Scope_Stack.Increment_Last;
  
!       Scope_Stack.Table (Scope_Stack.Last) :=
!         (Entity                        => S,
!          Save_Scope_Suppress           => Scope_Suppress,
!          Save_Local_Suppress_Stack_Top => Local_Suppress_Stack_Top,
!          Save_Check_Policy_List        => Check_Policy_List,
!          Save_Default_Storage_Pool     => Default_Pool,
!          Save_No_Tagged_Streams        => No_Tagged_Streams,
!          Save_SPARK_Mode               => SPARK_Mode,
!          Save_SPARK_Mode_Pragma        => SPARK_Mode_Pragma,
!          Save_Default_SSO              => Default_SSO,
!          Save_Uneval_Old               => Uneval_Old,
!          Component_Alignment_Default   => Component_Alignment_Default,
!          Last_Subprogram_Name          => null,
!          Is_Transient                  => False,
!          Node_To_Be_Wrapped            => Empty,
!          Pending_Freeze_Actions        => No_List,
!          Actions_To_Be_Wrapped         => (others => No_List),
!          First_Use_Clause              => Empty,
!          Is_Active_Stack_Base          => False,
!          Previous_Visibility           => False,
!          Locked_Shared_Objects         => No_Elist);
  
        if Debug_Flag_W then
           Write_Str ("--> new scope: ");
*************** package body Sem_Ch8 is
*** 9766,9781 ****
           if Present (Redundant) and then Parent (Redundant) /= Prev_Use then
  
              --  Make sure we are looking at most-descendant use_package_clause
!             --  by traversing the chain with Find_Most_Prev and then verifying
              --  there is no scope manipulation via Most_Descendant_Use_Clause.
  
              if Nkind (Prev_Use) = N_Use_Package_Clause
                and then
                  (Nkind (Parent (Prev_Use)) /= N_Compilation_Unit
                    or else Most_Descendant_Use_Clause
!                             (Prev_Use, Find_Most_Prev (Prev_Use)) /= Prev_Use)
              then
!                Prev_Use := Find_Most_Prev (Prev_Use);
              end if;
  
              Error_Msg_Sloc := Sloc (Prev_Use);
--- 10053,10068 ----
           if Present (Redundant) and then Parent (Redundant) /= Prev_Use then
  
              --  Make sure we are looking at most-descendant use_package_clause
!             --  by traversing the chain with Find_First_Use and then verifying
              --  there is no scope manipulation via Most_Descendant_Use_Clause.
  
              if Nkind (Prev_Use) = N_Use_Package_Clause
                and then
                  (Nkind (Parent (Prev_Use)) /= N_Compilation_Unit
                    or else Most_Descendant_Use_Clause
!                             (Prev_Use, Find_First_Use (Prev_Use)) /= Prev_Use)
              then
!                Prev_Use := Find_First_Use (Prev_Use);
              end if;
  
              Error_Msg_Sloc := Sloc (Prev_Use);
*************** package body Sem_Ch8 is
*** 9820,9827 ****
           --  When a renaming exists we must check it for redundancy. The
           --  original package would have already been seen at this point.
  
!          if Present (Renamed_Object (Entity (Pack_Name))) then
!             P := Renamed_Object (Entity (Pack_Name));
           else
              P := Entity (Pack_Name);
           end if;
--- 10107,10114 ----
           --  When a renaming exists we must check it for redundancy. The
           --  original package would have already been seen at this point.
  
!          if Present (Renamed_Entity (Entity (Pack_Name))) then
!             P := Renamed_Entity (Entity (Pack_Name));
           else
              P := Entity (Pack_Name);
           end if;
*************** package body Sem_Ch8 is
*** 9855,9861 ****
              return;
           end if;
  
!          --  Set P back to the non-renamed package so that visiblilty of the
           --  entities within the package can be properly set below.
  
           P := Entity (Pack_Name);
--- 10142,10148 ----
              return;
           end if;
  
!          --  Set P back to the non-renamed package so that visibility of the
           --  entities within the package can be properly set below.
  
           P := Entity (Pack_Name);
*************** package body Sem_Ch8 is
*** 9887,9896 ****
        --  also in use (the flags on both entities must remain consistent, and a
        --  subsequent use of either of them should be recognized as redundant).
  
!       if Present (Renamed_Object (P)) then
!          Set_In_Use (Renamed_Object (P));
!          Set_Current_Use_Clause (Renamed_Object (P), N);
!          Real_P := Renamed_Object (P);
        else
           Real_P := P;
        end if;
--- 10174,10183 ----
        --  also in use (the flags on both entities must remain consistent, and a
        --  subsequent use of either of them should be recognized as redundant).
  
!       if Present (Renamed_Entity (P)) then
!          Set_In_Use (Renamed_Entity (P));
!          Set_Current_Use_Clause (Renamed_Entity (P), N);
!          Real_P := Renamed_Entity (P);
        else
           Real_P := P;
        end if;
*************** package body Sem_Ch8 is
*** 10329,10335 ****
              if Present (Current_Use_Clause (T)) then
                 Use_Clause_Known : declare
                    Clause1 : constant Node_Id :=
!                               Find_Most_Prev (Current_Use_Clause (T));
                    Clause2 : constant Node_Id := Parent (Id);
                    Ent1    : Entity_Id;
                    Ent2    : Entity_Id;
--- 10616,10622 ----
              if Present (Current_Use_Clause (T)) then
                 Use_Clause_Known : declare
                    Clause1 : constant Node_Id :=
!                               Find_First_Use (Current_Use_Clause (T));
                    Clause2 : constant Node_Id := Parent (Id);
                    Ent1    : Entity_Id;
                    Ent2    : Entity_Id;
*************** package body Sem_Ch8 is
*** 10469,10478 ****
              --  a spurious warning - so verify there is a previous use clause.
  
              if Current_Use_Clause (Scope (T)) /=
!                  Find_Most_Prev (Current_Use_Clause (Scope (T)))
              then
                 Error_Msg_Sloc :=
!                  Sloc (Find_Most_Prev (Current_Use_Clause (Scope (T))));
                 Error_Msg_NE -- CODEFIX
                   ("& is already use-visible through package use clause #??",
                    Id, T);
--- 10756,10765 ----
              --  a spurious warning - so verify there is a previous use clause.
  
              if Current_Use_Clause (Scope (T)) /=
!                  Find_First_Use (Current_Use_Clause (Scope (T)))
              then
                 Error_Msg_Sloc :=
!                  Sloc (Find_First_Use (Current_Use_Clause (Scope (T))));
                 Error_Msg_NE -- CODEFIX
                   ("& is already use-visible through package use clause #??",
                    Id, T);
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch8.ads gcc-12.1.0/gcc/ada/sem_ch8.ads
*** gcc-11.3.0/gcc/ada/sem_ch8.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch8.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch9.adb gcc-12.1.0/gcc/ada/sem_ch9.adb
*** gcc-11.3.0/gcc/ada/sem_ch9.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch9.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,68 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;   use Aspects;
! with Atree;     use Atree;
! with Checks;    use Checks;
! with Contracts; use Contracts;
! with Debug;     use Debug;
! with Einfo;     use Einfo;
! with Errout;    use Errout;
! with Exp_Ch9;   use Exp_Ch9;
! with Elists;    use Elists;
! with Freeze;    use Freeze;
! with Layout;    use Layout;
! with Lib;       use Lib;
! with Lib.Xref;  use Lib.Xref;
! with Namet;     use Namet;
! with Nlists;    use Nlists;
! with Nmake;     use Nmake;
! with Opt;       use Opt;
! with Restrict;  use Restrict;
! with Rident;    use Rident;
! with Rtsfind;   use Rtsfind;
! with Sem;       use Sem;
! with Sem_Aux;   use Sem_Aux;
! with Sem_Ch3;   use Sem_Ch3;
! with Sem_Ch5;   use Sem_Ch5;
! with Sem_Ch6;   use Sem_Ch6;
! with Sem_Ch8;   use Sem_Ch8;
! with Sem_Ch13;  use Sem_Ch13;
! with Sem_Elab;  use Sem_Elab;
! with Sem_Eval;  use Sem_Eval;
! with Sem_Prag;  use Sem_Prag;
! with Sem_Res;   use Sem_Res;
! with Sem_Type;  use Sem_Type;
! with Sem_Util;  use Sem_Util;
! with Sem_Warn;  use Sem_Warn;
! with Snames;    use Snames;
! with Stand;     use Stand;
! with Sinfo;     use Sinfo;
  with Style;
! with Tbuild;    use Tbuild;
! with Uintp;     use Uintp;
  
  package body Sem_Ch9 is
  
--- 23,72 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Contracts;      use Contracts;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Exp_Ch9;        use Exp_Ch9;
! with Elists;         use Elists;
! with Freeze;         use Freeze;
! with Layout;         use Layout;
! with Lib;            use Lib;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch5;        use Sem_Ch5;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Res;        use Sem_Res;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
  with Style;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
  
  package body Sem_Ch9 is
  
*************** package body Sem_Ch9 is
*** 1228,1236 ****
        Analyze (Formals);
  
        if Present (Entry_Index_Specification (Formals)) then
!          Set_Ekind (Id, E_Entry_Family);
        else
!          Set_Ekind (Id, E_Entry);
        end if;
  
        Set_Etype          (Id, Standard_Void_Type);
--- 1232,1240 ----
        Analyze (Formals);
  
        if Present (Entry_Index_Specification (Formals)) then
!          Mutate_Ekind (Id, E_Entry_Family);
        else
!          Mutate_Ekind (Id, E_Entry);
        end if;
  
        Set_Etype          (Id, Standard_Void_Type);
*************** package body Sem_Ch9 is
*** 1522,1528 ****
  
        if Nkind (Call) = N_Explicit_Dereference then
           Error_Msg_N
!            ("entry call or dispatching primitive of interface required ", N);
        end if;
  
        if Is_Non_Empty_List (Statements (N)) then
--- 1526,1532 ----
  
        if Nkind (Call) = N_Explicit_Dereference then
           Error_Msg_N
!            ("entry call or dispatching primitive of interface required", N);
        end if;
  
        if Is_Non_Empty_List (Statements (N)) then
*************** package body Sem_Ch9 is
*** 1547,1559 ****
        --  Case of no discrete subtype definition
  
        if No (D_Sdef) then
!          Set_Ekind (Def_Id, E_Entry);
  
        --  Processing for discrete subtype definition present
  
        else
           Enter_Name (Def_Id);
!          Set_Ekind (Def_Id, E_Entry_Family);
           Analyze (D_Sdef);
           Make_Index (D_Sdef, N, Def_Id);
  
--- 1551,1563 ----
        --  Case of no discrete subtype definition
  
        if No (D_Sdef) then
!          Mutate_Ekind (Def_Id, E_Entry);
  
        --  Processing for discrete subtype definition present
  
        else
           Enter_Name (Def_Id);
!          Mutate_Ekind (Def_Id, E_Entry_Family);
           Analyze (D_Sdef);
           Make_Index (D_Sdef, N, Def_Id);
  
*************** package body Sem_Ch9 is
*** 1718,1728 ****
           Make_Index (Def, N);
        end if;
  
!       Set_Ekind (Loop_Id, E_Loop);
        Set_Scope (Loop_Id, Current_Scope);
        Push_Scope (Loop_Id);
        Enter_Name (Iden);
!       Set_Ekind (Iden, E_Entry_Index_Parameter);
        Set_Etype (Iden, Etype (Def));
     end Analyze_Entry_Index_Specification;
  
--- 1722,1732 ----
           Make_Index (Def, N);
        end if;
  
!       Mutate_Ekind (Loop_Id, E_Loop);
        Set_Scope (Loop_Id, Current_Scope);
        Push_Scope (Loop_Id);
        Enter_Name (Iden);
!       Mutate_Ekind (Iden, E_Entry_Index_Parameter);
        Set_Etype (Iden, Etype (Def));
     end Analyze_Entry_Index_Specification;
  
*************** package body Sem_Ch9 is
*** 1804,1810 ****
        Freeze_Previous_Contracts (N);
  
        Tasking_Used := True;
!       Set_Ekind (Body_Id, E_Protected_Body);
        Set_Etype (Body_Id, Standard_Void_Type);
        Spec_Id := Find_Concurrent_Spec (Body_Id);
  
--- 1808,1814 ----
        Freeze_Previous_Contracts (N);
  
        Tasking_Used := True;
!       Mutate_Ekind (Body_Id, E_Protected_Body);
        Set_Etype (Body_Id, Standard_Void_Type);
        Spec_Id := Find_Concurrent_Spec (Body_Id);
  
*************** package body Sem_Ch9 is
*** 1951,1959 ****
        Tasking_Used := True;
        Analyze_Declarations (Visible_Declarations (N));
  
!       if Present (Private_Declarations (N))
!         and then not Is_Empty_List (Private_Declarations (N))
!       then
           Last_Id := Last_Entity (Prot_Typ);
           Analyze_Declarations (Private_Declarations (N));
  
--- 1955,1961 ----
        Tasking_Used := True;
        Analyze_Declarations (Visible_Declarations (N));
  
!       if not Is_Empty_List (Private_Declarations (N)) then
           Last_Id := Last_Entity (Prot_Typ);
           Analyze_Declarations (Private_Declarations (N));
  
*************** package body Sem_Ch9 is
*** 2020,2032 ****
           Set_Completion_Referenced (T);
        end if;
  
!       Set_Ekind              (T, E_Protected_Type);
        Set_Is_First_Subtype   (T);
!       Init_Size_Align        (T);
        Set_Etype              (T, T);
        Set_Has_Delayed_Freeze (T);
        Set_Stored_Constraint  (T, No_Elist);
  
        --  Mark this type as a protected type for the sake of restrictions,
        --  unless the protected type is declared in a private part of a package
        --  of the runtime. With this exception, the Suspension_Object from
--- 2022,2040 ----
           Set_Completion_Referenced (T);
        end if;
  
!       Mutate_Ekind           (T, E_Protected_Type);
        Set_Is_First_Subtype   (T);
!       Reinit_Size_Align      (T);
        Set_Etype              (T, T);
        Set_Has_Delayed_Freeze (T);
        Set_Stored_Constraint  (T, No_Elist);
  
+       --  Initialize type's primitive operations list, for possible use when
+       --  the extension of prefixed call notation for untagged types is enabled
+       --  (such as by use of -gnatX).
+ 
+       Set_Direct_Primitive_Operations (T, New_Elmt_List);
+ 
        --  Mark this type as a protected type for the sake of restrictions,
        --  unless the protected type is declared in a private part of a package
        --  of the runtime. With this exception, the Suspension_Object from
*************** package body Sem_Ch9 is
*** 2134,2141 ****
        E := First_Entity (Current_Scope);
        while Present (E) loop
           if Ekind (E) = E_Void then
!             Set_Ekind (E, E_Component);
!             Init_Component_Location (E);
           end if;
  
           Next_Entity (E);
--- 2142,2149 ----
        E := First_Entity (Current_Scope);
        while Present (E) loop
           if Ekind (E) = E_Void then
!             Mutate_Ekind (E, E_Component);
!             Reinit_Component_Location (E);
           end if;
  
           Next_Entity (E);
*************** package body Sem_Ch9 is
*** 2619,2625 ****
                     (Nkind (Delay_Statement (Alt)) = N_Delay_Relative_Statement)
                 then
                    Error_Msg_N
!                     ("delay_until and delay_relative alternatives ", Alt);
                    Error_Msg_N
                      ("\cannot appear in the same selective_wait", Alt);
                 end if;
--- 2627,2633 ----
                     (Nkind (Delay_Statement (Alt)) = N_Delay_Relative_Statement)
                 then
                    Error_Msg_N
!                     ("delay_until and delay_relative alternatives", Alt);
                    Error_Msg_N
                      ("\cannot appear in the same selective_wait", Alt);
                 end if;
*************** package body Sem_Ch9 is
*** 2771,2782 ****
        --  its own body.
  
        Enter_Name (Typ);
!       Set_Ekind            (Typ, E_Protected_Type);
        Set_Etype            (Typ, Typ);
        Set_Anonymous_Object (Typ, Obj_Id);
  
        Enter_Name (Obj_Id);
!       Set_Ekind                  (Obj_Id, E_Variable);
        Set_Etype                  (Obj_Id, Typ);
        Set_SPARK_Pragma           (Obj_Id, SPARK_Mode_Pragma);
        Set_SPARK_Pragma_Inherited (Obj_Id);
--- 2779,2790 ----
        --  its own body.
  
        Enter_Name (Typ);
!       Mutate_Ekind         (Typ, E_Protected_Type);
        Set_Etype            (Typ, Typ);
        Set_Anonymous_Object (Typ, Obj_Id);
  
        Enter_Name (Obj_Id);
!       Mutate_Ekind               (Obj_Id, E_Variable);
        Set_Etype                  (Obj_Id, Typ);
        Set_SPARK_Pragma           (Obj_Id, SPARK_Mode_Pragma);
        Set_SPARK_Pragma_Inherited (Obj_Id);
*************** package body Sem_Ch9 is
*** 2857,2868 ****
        --  in its own body.
  
        Enter_Name (Typ);
!       Set_Ekind            (Typ, E_Task_Type);
        Set_Etype            (Typ, Typ);
        Set_Anonymous_Object (Typ, Obj_Id);
  
        Enter_Name (Obj_Id);
!       Set_Ekind                  (Obj_Id, E_Variable);
        Set_Etype                  (Obj_Id, Typ);
        Set_SPARK_Pragma           (Obj_Id, SPARK_Mode_Pragma);
        Set_SPARK_Pragma_Inherited (Obj_Id);
--- 2865,2876 ----
        --  in its own body.
  
        Enter_Name (Typ);
!       Mutate_Ekind         (Typ, E_Task_Type);
        Set_Etype            (Typ, Typ);
        Set_Anonymous_Object (Typ, Obj_Id);
  
        Enter_Name (Obj_Id);
!       Mutate_Ekind               (Obj_Id, E_Variable);
        Set_Etype                  (Obj_Id, Typ);
        Set_SPARK_Pragma           (Obj_Id, SPARK_Mode_Pragma);
        Set_SPARK_Pragma_Inherited (Obj_Id);
*************** package body Sem_Ch9 is
*** 2918,2924 ****
  
        Tasking_Used := True;
        Set_Scope (Body_Id, Current_Scope);
!       Set_Ekind (Body_Id, E_Task_Body);
        Set_Etype (Body_Id, Standard_Void_Type);
        Spec_Id := Find_Concurrent_Spec (Body_Id);
  
--- 2926,2932 ----
  
        Tasking_Used := True;
        Set_Scope (Body_Id, Current_Scope);
!       Mutate_Ekind (Body_Id, E_Task_Body);
        Set_Etype (Body_Id, Standard_Void_Type);
        Spec_Id := Find_Concurrent_Spec (Body_Id);
  
*************** package body Sem_Ch9 is
*** 3135,3153 ****
              Set_Completion_Referenced (T);
  
           else
!             Set_Ekind (T, E_Task_Type);
              Set_Corresponding_Record_Type (T, Empty);
           end if;
        end if;
  
!       Set_Ekind              (T, E_Task_Type);
        Set_Is_First_Subtype   (T, True);
        Set_Has_Task           (T, True);
!       Init_Size_Align        (T);
        Set_Etype              (T, T);
        Set_Has_Delayed_Freeze (T, True);
        Set_Stored_Constraint  (T, No_Elist);
  
        --  Set the SPARK_Mode from the current context (may be overwritten later
        --  with an explicit pragma).
  
--- 3143,3167 ----
              Set_Completion_Referenced (T);
  
           else
!             Mutate_Ekind (T, E_Task_Type);
              Set_Corresponding_Record_Type (T, Empty);
           end if;
        end if;
  
!       Mutate_Ekind           (T, E_Task_Type);
        Set_Is_First_Subtype   (T, True);
        Set_Has_Task           (T, True);
!       Reinit_Size_Align      (T);
        Set_Etype              (T, T);
        Set_Has_Delayed_Freeze (T, True);
        Set_Stored_Constraint  (T, No_Elist);
  
+       --  Initialize type's primitive operations list, for possible use when
+       --  the extension of prefixed call notation for untagged types is enabled
+       --  (such as by use of -gnatX).
+ 
+       Set_Direct_Primitive_Operations (T, New_Elmt_List);
+ 
        --  Set the SPARK_Mode from the current context (may be overwritten later
        --  with an explicit pragma).
  
*************** package body Sem_Ch9 is
*** 3677,3683 ****
  
           elsif Nkind (Trigger) = N_Explicit_Dereference then
              Error_Msg_N
!               ("entry call or dispatching primitive of interface required ",
                  Trigger);
           end if;
        end if;
--- 3691,3697 ----
  
           elsif Nkind (Trigger) = N_Explicit_Dereference then
              Error_Msg_N
!               ("entry call or dispatching primitive of interface required",
                  Trigger);
           end if;
        end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_ch9.ads gcc-12.1.0/gcc/ada/sem_ch9.ads
*** gcc-11.3.0/gcc/ada/sem_ch9.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_ch9.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_dim.adb gcc-12.1.0/gcc/ada/sem_dim.adb
*** gcc-11.3.0/gcc/ada/sem_dim.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_dim.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
***************
*** 23,52 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Exp_Util; use Exp_Util;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
  with Table;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Urealp;   use Urealp;
  
  with GNAT.HTable;
  
--- 23,56 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Exp_Util;       use Exp_Util;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
  with Table;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Urealp;         use Urealp;
  
  with GNAT.HTable;
  
*************** package body Sem_Dim is
*** 314,320 ****
        (N                  : Node_Id;
         Description_Needed : Boolean := False) return String;
     --  Given a node N, return the dimension symbols of N, preceded by "has
!    --  dimension" if Description_Needed. if N is dimensionless, return "'[']",
     --  or "is dimensionless" if Description_Needed.
  
     function Dimension_System_Root (T : Entity_Id) return Entity_Id;
--- 318,324 ----
        (N                  : Node_Id;
         Description_Needed : Boolean := False) return String;
     --  Given a node N, return the dimension symbols of N, preceded by "has
!    --  dimension" if Description_Needed. If N is dimensionless, return "'[']",
     --  or "is dimensionless" if Description_Needed.
  
     function Dimension_System_Root (T : Entity_Id) return Entity_Id;
*************** package body Sem_Dim is
*** 2755,2761 ****
  
        --  Insert a blank between the literal and the symbol
  
!       Add_Str_To_Name_Buffer (" ");
        Append (Global_Name_Buffer, Symbol_Of (Typ));
  
        Error_Msg_Name_1 := Name_Find;
--- 2759,2765 ----
  
        --  Insert a blank between the literal and the symbol
  
!       Add_Char_To_Name_Buffer (' ');
        Append (Global_Name_Buffer, Symbol_Of (Typ));
  
        Error_Msg_Name_1 := Name_Find;
*************** package body Sem_Dim is
*** 3028,3039 ****
     --                  symbol is not empty, then the symbol appears as a
     --                  suffix. Otherwise, a new string is created and appears
     --                  as a suffix of Item. This string results in the
!    --                  successive concatanations between each unit symbol
     --                  raised by its corresponding dimension power from the
     --                  dimensions of Item.
  
     --   * Put_Dim_Of : The output is a new string resulting in the successive
!    --                  concatanations between each dimension symbol raised by
     --                  its corresponding dimension power from the dimensions of
     --                  Item.
  
--- 3032,3043 ----
     --                  symbol is not empty, then the symbol appears as a
     --                  suffix. Otherwise, a new string is created and appears
     --                  as a suffix of Item. This string results in the
!    --                  successive concatenations between each unit symbol
     --                  raised by its corresponding dimension power from the
     --                  dimensions of Item.
  
     --   * Put_Dim_Of : The output is a new string resulting in the successive
!    --                  concatenations between each dimension symbol raised by
     --                  its corresponding dimension power from the dimensions of
     --                  Item.
  
*************** package body Sem_Dim is
*** 3318,3330 ****
              if Chars (Name_Call) = Name_Image then
                 Rewrite (N,
                   Make_Function_Call (Loc,
!                    Name =>                   New_Copy (Name_Call),
                     Parameter_Associations => New_Actuals));
                 Analyze_And_Resolve (N);
              else
                 Rewrite (N,
                   Make_Procedure_Call_Statement (Loc,
!                    Name =>                   New_Copy (Name_Call),
                     Parameter_Associations => New_Actuals));
                 Analyze (N);
              end if;
--- 3322,3334 ----
              if Chars (Name_Call) = Name_Image then
                 Rewrite (N,
                   Make_Function_Call (Loc,
!                    Name                   => New_Copy (Name_Call),
                     Parameter_Associations => New_Actuals));
                 Analyze_And_Resolve (N);
              else
                 Rewrite (N,
                   Make_Procedure_Call_Statement (Loc,
!                    Name                   => New_Copy (Name_Call),
                     Parameter_Associations => New_Actuals));
                 Analyze (N);
              end if;
*************** package body Sem_Dim is
*** 3661,3667 ****
        declare
           G : constant Int := GCD (X.Numerator, X.Denominator);
        begin
!          return Rational'(Numerator =>   Whole (Int (X.Numerator)   / G),
                            Denominator => Whole (Int (X.Denominator) / G));
        end;
     end Reduce;
--- 3665,3671 ----
        declare
           G : constant Int := GCD (X.Numerator, X.Denominator);
        begin
!          return Rational'(Numerator   => Whole (Int (X.Numerator)   / G),
                            Denominator => Whole (Int (X.Denominator) / G));
        end;
     end Reduce;
*************** package body Sem_Dim is
*** 3761,3776 ****
     ---------------
  
     function System_Of (E : Entity_Id) return System_Type is
-       Type_Decl : constant Node_Id := Parent (E);
- 
     begin
!       --  Look for Type_Decl in System_Table
  
!       for Dim_Sys in 1 .. System_Table.Last loop
!          if Type_Decl = System_Table.Table (Dim_Sys).Type_Decl then
!             return System_Table.Table (Dim_Sys);
!          end if;
!       end loop;
  
        return Null_System;
     end System_Of;
--- 3765,3784 ----
     ---------------
  
     function System_Of (E : Entity_Id) return System_Type is
     begin
!       if Present (E) then
!          declare
!             Type_Decl : constant Node_Id := Parent (E);
!          begin
!             --  Look for Type_Decl in System_Table
  
!             for Dim_Sys in 1 .. System_Table.Last loop
!                if Type_Decl = System_Table.Table (Dim_Sys).Type_Decl then
!                   return System_Table.Table (Dim_Sys);
!                end if;
!             end loop;
!          end;
!       end if;
  
        return Null_System;
     end System_Of;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_dim.ads gcc-12.1.0/gcc/ada/sem_dim.ads
*** gcc-11.3.0/gcc/ada/sem_dim.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_dim.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_disp.adb gcc-12.1.0/gcc/ada/sem_disp.adb
*** gcc-11.3.0/gcc/ada/sem_disp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_disp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,59 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Elists;   use Elists;
! with Einfo;    use Einfo;
! with Exp_Disp; use Exp_Disp;
! with Exp_Util; use Exp_Util;
! with Exp_Ch7;  use Exp_Ch7;
! with Exp_Tss;  use Exp_Tss;
! with Errout;   use Errout;
! with Lib.Xref; use Lib.Xref;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Output;   use Output;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Eval; use Sem_Eval;
! with Sem_Type; use Sem_Type;
! with Sem_Util; use Sem_Util;
! with Snames;   use Snames;
! with Sinfo;    use Sinfo;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Warnsw;   use Warnsw;
  
  package body Sem_Disp is
  
--- 23,64 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Elists;         use Elists;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Exp_Disp;       use Exp_Disp;
! with Exp_Util;       use Exp_Util;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Tss;        use Exp_Tss;
! with Errout;         use Errout;
! with Freeze;         use Freeze;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Output;         use Output;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Snames;         use Snames;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Warnsw;         use Warnsw;
  
  package body Sem_Disp is
  
*************** package body Sem_Disp is
*** 194,199 ****
--- 199,289 ----
        return Empty;
     end Covered_Interface_Op;
  
+    ----------------------------------
+    -- Covered_Interface_Primitives --
+    ----------------------------------
+ 
+    function Covered_Interface_Primitives (Prim : Entity_Id) return Elist_Id is
+       Tagged_Type : constant Entity_Id := Find_Dispatching_Type (Prim);
+       Elmt        : Elmt_Id;
+       E           : Entity_Id;
+       Result      : Elist_Id := No_Elist;
+ 
+    begin
+       pragma Assert (Is_Dispatching_Operation (Prim));
+ 
+       --  Although this is a dispatching primitive we must check if its
+       --  dispatching type is available because it may be the primitive
+       --  of a private type not defined as tagged in its partial view.
+ 
+       if Present (Tagged_Type) and then Has_Interfaces (Tagged_Type) then
+ 
+          --  If the tagged type is frozen then the internal entities associated
+          --  with interfaces are available in the list of primitives of the
+          --  tagged type and can be used to speed up this search.
+ 
+          if Is_Frozen (Tagged_Type) then
+             Elmt := First_Elmt (Primitive_Operations (Tagged_Type));
+             while Present (Elmt) loop
+                E := Node (Elmt);
+ 
+                if Present (Interface_Alias (E))
+                  and then Alias (E) = Prim
+                then
+                   if No (Result) then
+                      Result := New_Elmt_List;
+                   end if;
+ 
+                   Append_Elmt (Interface_Alias (E), Result);
+                end if;
+ 
+                Next_Elmt (Elmt);
+             end loop;
+ 
+          --  Otherwise we must collect all the interface primitives and check
+          --  whether the Prim overrides (implements) some interface primitive.
+ 
+          else
+             declare
+                Ifaces_List : Elist_Id;
+                Iface_Elmt  : Elmt_Id;
+                Iface       : Entity_Id;
+                Iface_Prim  : Entity_Id;
+ 
+             begin
+                Collect_Interfaces (Tagged_Type, Ifaces_List);
+ 
+                Iface_Elmt := First_Elmt (Ifaces_List);
+                while Present (Iface_Elmt) loop
+                   Iface := Node (Iface_Elmt);
+ 
+                   Elmt := First_Elmt (Primitive_Operations (Iface));
+                   while Present (Elmt) loop
+                      Iface_Prim := Node (Elmt);
+ 
+                      if Chars (Iface_Prim) = Chars (Prim)
+                        and then Is_Interface_Conformant
+                                   (Tagged_Type, Iface_Prim, Prim)
+                      then
+                         if No (Result) then
+                            Result := New_Elmt_List;
+                         end if;
+ 
+                         Append_Elmt (Iface_Prim, Result);
+                      end if;
+ 
+                      Next_Elmt (Elmt);
+                   end loop;
+ 
+                   Next_Elmt (Iface_Elmt);
+                end loop;
+             end;
+          end if;
+       end if;
+ 
+       return Result;
+    end Covered_Interface_Primitives;
+ 
     -------------------------------
     -- Check_Controlling_Formals --
     -------------------------------
*************** package body Sem_Disp is
*** 388,393 ****
--- 478,506 ----
        if No (Tagged_Type) or else Is_Class_Wide_Type (Tagged_Type) then
           return Empty;
  
+       --  In the special case of a protected subprogram of a tagged protected
+       --  type that has a formal of a tagged type (or access formal whose type
+       --  designates a tagged type), such a formal is not controlling unless
+       --  it's of the protected type's corresponding record type. The latter
+       --  can occur for the special wrapper subprograms created for protected
+       --  subprograms. Such subprograms may occur in the same scope where some
+       --  formal's tagged type is declared, and we don't want formals of that
+       --  tagged type being marked as controlling, for one thing because they
+       --  aren't controlling from the language point of view, but also because
+       --  this can cause errors for access formals when conformance is checked
+       --  between the spec and body of the protected subprogram (null-exclusion
+       --  status of the formals may be set differently, which is the case that
+       --  led to adding this check).
+ 
+       elsif Is_Subprogram (Subp)
+         and then Present (Protected_Subprogram (Subp))
+         and then Ekind (Scope (Protected_Subprogram (Subp))) = E_Protected_Type
+         and then
+           Base_Type (Tagged_Type)
+             /= Corresponding_Record_Type (Scope (Protected_Subprogram (Subp)))
+       then
+          return Empty;
+ 
        --  The dispatching type and the primitive operation must be defined in
        --  the same scope, except in the case of internal operations and formal
        --  abstract subprograms.
*************** package body Sem_Disp is
*** 517,522 ****
--- 630,641 ----
           procedure Abstract_Context_Error;
           --  Error for abstract call dispatching on result is not dispatching
  
+          function Has_Controlling_Current_Instance_Actual_In_DIC
+            (Call : Node_Id) return Boolean;
+          --  Return True if the subprogram call Call has a controlling actual
+          --  given directly by a current instance referenced within a DIC
+          --  aspect.
+ 
           ----------------------------
           -- Abstract_Context_Error --
           ----------------------------
*************** package body Sem_Disp is
*** 536,541 ****
--- 655,698 ----
              end if;
           end Abstract_Context_Error;
  
+          ----------------------------------------
+          -- Has_Current_Instance_Actual_In_DIC --
+          ----------------------------------------
+ 
+          function Has_Controlling_Current_Instance_Actual_In_DIC
+            (Call : Node_Id) return Boolean
+          is
+             A : Node_Id;
+             F : Entity_Id;
+          begin
+             F := First_Formal (Subp_Entity);
+             A := First_Actual (Call);
+ 
+             while Present (F) loop
+ 
+                --  Return True if the actual denotes a current instance (which
+                --  will be represented by an in-mode formal of the enclosing
+                --  DIC_Procedure) passed to a controlling formal. We don't have
+                --  to worry about controlling access formals here, because its
+                --  illegal to apply Access (etc.) attributes to a current
+                --  instance within an aspect (by AI12-0068).
+ 
+                if Is_Controlling_Formal (F)
+                  and then Nkind (A) = N_Identifier
+                  and then Ekind (Entity (A)) = E_In_Parameter
+                  and then Is_Subprogram (Scope (Entity (A)))
+                  and then Is_DIC_Procedure (Scope (Entity (A)))
+                then
+                   return True;
+                end if;
+ 
+                Next_Formal (F);
+                Next_Actual (A);
+             end loop;
+ 
+             return False;
+          end Has_Controlling_Current_Instance_Actual_In_DIC;
+ 
           --  Local variables
  
           Scop : constant Entity_Id := Current_Scope_No_Loops;
*************** package body Sem_Disp is
*** 545,550 ****
--- 702,715 ----
        --  Start of processing for Check_Dispatching_Context
  
        begin
+          --  Skip checking context of dispatching calls during preanalysis of
+          --  class-wide conditions since at that stage the expression is not
+          --  installed yet on its definite context.
+ 
+          if Inside_Class_Condition_Preanalysis then
+             return;
+          end if;
+ 
           --  If the called subprogram is a private overriding, replace it
           --  with its alias, which has the correct body. Verify that the
           --  two subprograms have the same controlling type (this is not the
*************** package body Sem_Disp is
*** 565,593 ****
                 Set_Entity (Name (N), Alias (Subp));
                 return;
  
!             --  An obscure special case: a null procedure may have a class-
!             --  wide pre/postcondition that includes a call to an abstract
!             --  subp. Calls within the expression may not have been rewritten
!             --  as dispatching calls yet, because the null body appears in
!             --  the current declarative part. The expression will be properly
!             --  rewritten/reanalyzed when the postcondition procedure is built.
  
!             --  Similarly, if this is a pre/postcondition for an abstract
!             --  subprogram, it may call another abstract function which is
!             --  a primitive of an abstract type. The call is non-dispatching
!             --  but will be legal in overridings of the operation. However,
!             --  if the call is tag-indeterminate we want to continue with
!             --  with the error checking below, as this case is illegal even
!             --  for abstract subprograms (see AI12-0170).
  
!             elsif (Is_Subprogram (Scop)
!                     or else Chars (Scop) = Name_Postcondition)
                and then
!                 ((Is_Abstract_Subprogram (Scop)
!                    and then not Is_Tag_Indeterminate (N))
!                   or else
!                     (Nkind (Parent (Scop)) = N_Procedure_Specification
!                       and then Null_Present (Parent (Scop))))
              then
                 null;
  
--- 730,775 ----
                 Set_Entity (Name (N), Alias (Subp));
                 return;
  
!             --  If this is a pre/postcondition for an abstract subprogram,
!             --  it may call another abstract function that is a primitive
!             --  of an abstract type. The call is nondispatching but will be
!             --  legal in overridings of the operation. However, if the call
!             --  is tag-indeterminate we want to continue with with the error
!             --  checking below, as this case is illegal even for abstract
!             --  subprograms (see AI12-0170).
  
!             --  Similarly, as per AI12-0412, a nonabstract subprogram may
!             --  have a class-wide pre/postcondition that includes a call to
!             --  an abstract primitive of the subprogram's controlling type.
!             --  Certain operations (nondispatching calls, 'Access, use as
!             --  a generic actual) applied to such a nonabstract subprogram
!             --  are illegal in the case where the type is abstract (see
!             --  RM 6.1.1(18.2/5)).
  
!             elsif Is_Subprogram (Scop)
!               and then not Is_Tag_Indeterminate (N)
!               and then In_Pre_Post_Condition (Call, Class_Wide_Only => True)
! 
!               --  The tagged type associated with the called subprogram must be
!               --  the same as that of the subprogram with a class-wide aspect.
! 
!               and then Is_Dispatching_Operation (Scop)
                and then
!                 Find_Dispatching_Type (Subp) = Find_Dispatching_Type (Scop)
!             then
!                null;
! 
!             --  Similarly to the dispensation for postconditions, a call to
!             --  an abstract function within a Default_Initial_Condition aspect
!             --  can be legal when passed a current instance of the type. Such
!             --  a call will be effectively mapped to a call to a primitive of
!             --  a descendant type (see AI12-0397, as well as AI12-0170), so
!             --  doesn't need to be dispatching. We test for being within a DIC
!             --  procedure, since that's where the call will be analyzed.
! 
!             elsif Is_Subprogram (Scop)
!               and then Is_DIC_Procedure (Scop)
!               and then Has_Controlling_Current_Instance_Actual_In_DIC (Call)
              then
                 null;
  
*************** package body Sem_Disp is
*** 602,608 ****
                 --  provides a tag to make the call dispatching. This requires
                 --  the call to be the actual in an enclosing call, and that
                 --  actual must be controlling. If the call is an operand of
!                --  equality, the other operand must not ve abstract.
  
                 if not Is_Tagged_Type (Typ)
                   and then not
--- 784,790 ----
                 --  provides a tag to make the call dispatching. This requires
                 --  the call to be the actual in an enclosing call, and that
                 --  actual must be controlling. If the call is an operand of
!                --  equality, the other operand must not be abstract.
  
                 if not Is_Tagged_Type (Typ)
                   and then not
*************** package body Sem_Disp is
*** 909,915 ****
              end loop;
  
              Check_Dispatching_Context (N);
-             return;
  
           elsif Nkind (Parent (N)) in N_Subexpr then
              Check_Dispatching_Context (N);
--- 1091,1096 ----
*************** package body Sem_Disp is
*** 924,929 ****
--- 1105,1134 ----
              return;
           end if;
  
+          --  If this is a nondispatching call to a nonabstract subprogram
+          --  and the subprogram has any Pre'Class or Post'Class aspects with
+          --  nonstatic values, then report an error. This is specified by
+          --  RM 6.1.1(18.2/5) (by AI12-0412).
+ 
+          --  Skip reporting this error on helpers and indirect-call wrappers
+          --  built to support class-wide preconditions.
+ 
+          if No (Control)
+            and then not Is_Abstract_Subprogram (Subp_Entity)
+            and then
+              Is_Prim_Of_Abst_Type_With_Nonstatic_CW_Pre_Post (Subp_Entity)
+            and then not
+              (Is_Subprogram (Current_Scope)
+                 and then
+               Present (Class_Preconditions_Subprogram (Current_Scope)))
+          then
+             Error_Msg_N
+               ("nondispatching call to nonabstract subprogram of "
+                 & "abstract type with nonstatic class-wide "
+                 & "pre/postconditions",
+                N);
+          end if;
+ 
        else
           --  If dispatching on result, the enclosing call, if any, will
           --  determine the controlling argument. Otherwise this is the
*************** package body Sem_Disp is
*** 938,943 ****
--- 1143,1151 ----
     ---------------------------------
  
     procedure Check_Dispatching_Operation (Subp, Old_Subp : Entity_Id) is
+       function Is_Access_To_Subprogram_Wrapper (E : Entity_Id) return Boolean;
+       --  Return True if E is an access to subprogram wrapper
+ 
        procedure Warn_On_Late_Primitive_After_Private_Extension
          (Typ  : Entity_Id;
           Prim : Entity_Id);
*************** package body Sem_Disp is
*** 945,950 ****
--- 1153,1174 ----
        --  if it is a public primitive defined after some private extension of
        --  the tagged type.
  
+       -------------------------------------
+       -- Is_Access_To_Subprogram_Wrapper --
+       -------------------------------------
+ 
+       function Is_Access_To_Subprogram_Wrapper (E : Entity_Id) return Boolean
+       is
+          Decl_N : constant Node_Id := Unit_Declaration_Node (E);
+          Par_N  : constant Node_Id := Parent (List_Containing (Decl_N));
+ 
+       begin
+          --  Access to subprogram wrappers are declared in the freezing actions
+ 
+          return Nkind (Par_N) = N_Freeze_Entity
+            and then Ekind (Entity (Par_N)) = E_Access_Subprogram_Type;
+       end Is_Access_To_Subprogram_Wrapper;
+ 
        ----------------------------------------------------
        -- Warn_On_Late_Primitive_After_Private_Extension --
        ----------------------------------------------------
*************** package body Sem_Disp is
*** 1015,1020 ****
--- 1239,1251 ----
          or else Is_Partial_Invariant_Procedure (Subp)
        then
           return;
+ 
+       --  Wrappers of access to subprograms are not primitive subprograms.
+ 
+       elsif Is_Wrapper (Subp)
+         and then Is_Access_To_Subprogram_Wrapper (Subp)
+       then
+          return;
        end if;
  
        Set_Is_Dispatching_Operation (Subp, False);
*************** package body Sem_Disp is
*** 1147,1153 ****
           --     primitives.
  
           --  3. Subprograms associated with stream attributes (built by
!          --     New_Stream_Subprogram)
  
           --  4. Wrappers built for inherited operations with inherited class-
           --     wide conditions, where the conditions include calls to other
--- 1378,1384 ----
           --     primitives.
  
           --  3. Subprograms associated with stream attributes (built by
!          --     New_Stream_Subprogram) or with the Put_Image attribute.
  
           --  4. Wrappers built for inherited operations with inherited class-
           --     wide conditions, where the conditions include calls to other
*************** package body Sem_Disp is
*** 1176,1183 ****
  
                or else Get_TSS_Name (Subp) = TSS_Stream_Read
                or else Get_TSS_Name (Subp) = TSS_Stream_Write
  
!               or else Present (Contract (Overridden_Operation (Subp)))
  
                or else GNATprove_Mode);
  
--- 1407,1417 ----
  
                or else Get_TSS_Name (Subp) = TSS_Stream_Read
                or else Get_TSS_Name (Subp) = TSS_Stream_Write
+               or else Get_TSS_Name (Subp) = TSS_Put_Image
  
!               or else
!                (Is_Wrapper (Subp)
!                  and then Present (LSP_Subprogram (Subp)))
  
                or else GNATprove_Mode);
  
*************** package body Sem_Disp is
*** 1324,1330 ****
--- 1558,1596 ----
                             Generate_Reference (Tagged_Type, Subp, 'P', False);
                             Override_Dispatching_Operation
                               (Tagged_Type, Old_Subp, Subp);
+                            Set_Is_Dispatching_Operation (Subp);
+ 
+                            --  Inherit decoration of controlling formals and
+                            --  controlling result.
+ 
+                            if Ekind (Old_Subp) = E_Function
+                              and then Has_Controlling_Result (Old_Subp)
+                            then
+                               Set_Has_Controlling_Result (Subp);
+                            end if;
+ 
+                            if Present (First_Formal (Old_Subp)) then
+                               declare
+                                  Old_Formal : Entity_Id;
+                                  Formal     : Entity_Id;
+ 
+                               begin
+                                  Formal     := First_Formal (Subp);
+                                  Old_Formal := First_Formal (Old_Subp);
+ 
+                                  while Present (Old_Formal) loop
+                                     Set_Is_Controlling_Formal (Formal,
+                                       Is_Controlling_Formal (Old_Formal));
+ 
+                                     Next_Formal (Formal);
+                                     Next_Formal (Old_Formal);
+                                  end loop;
+                               end;
+                            end if;
                          end if;
+ 
+                         Check_Inherited_Conditions (Tagged_Type,
+                           Late_Overriding => True);
                       end if;
                    end if;
                 end;
*************** package body Sem_Disp is
*** 2137,2142 ****
--- 2403,2410 ----
                       while Present (Elmt) loop
                          if Node (Elmt) = Orig_Prim then
                             Set_Overridden_Operation (S, Prim);
+                            Set_Is_Ada_2022_Only     (S,
+                              Is_Ada_2022_Only (Prim));
                             Set_Alias (Prim, Orig_Prim);
                             return Prim;
                          end if;
*************** package body Sem_Disp is
*** 2335,2346 ****
--- 2603,2629 ----
  
                    if No (Tag_Typ) then
                       return Result (1 .. 0);
+ 
+                   --  Prevent cascaded errors
+ 
+                   elsif Is_Concurrent_Type (Tag_Typ)
+                      and then No (Corresponding_Record_Type (Tag_Typ))
+                      and then Serious_Errors_Detected > 0
+                   then
+                      return Result (1 .. 0);
                    end if;
  
                    if Is_Concurrent_Type (Tag_Typ) then
                       Tag_Typ := Corresponding_Record_Type (Tag_Typ);
                    end if;
  
+                   if Present (Tag_Typ)
+                     and then Is_Private_Type (Tag_Typ)
+                     and then Present (Full_View (Tag_Typ))
+                   then
+                      Tag_Typ := Full_View (Tag_Typ);
+                   end if;
+ 
                    --  Search primitive operations of dispatching type
  
                    if Present (Tag_Typ)
*************** package body Sem_Disp is
*** 2582,2589 ****
     procedure Override_Dispatching_Operation
       (Tagged_Type : Entity_Id;
        Prev_Op     : Entity_Id;
!       New_Op      : Entity_Id;
!       Is_Wrapper  : Boolean := False)
     is
        Elmt : Elmt_Id;
        Prim : Node_Id;
--- 2865,2871 ----
     procedure Override_Dispatching_Operation
       (Tagged_Type : Entity_Id;
        Prev_Op     : Entity_Id;
!       New_Op      : Entity_Id)
     is
        Elmt : Elmt_Id;
        Prim : Node_Id;
*************** package body Sem_Disp is
*** 2660,2666 ****
                 --  wrappers of controlling functions since (at this stage)
                 --  they are not yet decorated.
  
!                if not Is_Wrapper then
                    Check_Subtype_Conformant (New_Op, Prim);
  
                    Set_Is_Abstract_Subprogram (Prim,
--- 2942,2948 ----
                 --  wrappers of controlling functions since (at this stage)
                 --  they are not yet decorated.
  
!                if not Is_Wrapper (New_Op) then
                    Check_Subtype_Conformant (New_Op, Prim);
  
                    Set_Is_Abstract_Subprogram (Prim,
*************** package body Sem_Disp is
*** 2699,2704 ****
--- 2981,2987 ----
           Set_Alias (Prev_Op, New_Op);
           Set_DTC_Entity (Prev_Op, Empty);
           Set_Has_Controlling_Result (New_Op, Has_Controlling_Result (Prev_Op));
+          Set_Is_Ada_2022_Only (New_Op, Is_Ada_2022_Only (Prev_Op));
        end if;
     end Override_Dispatching_Operation;
  
*************** package body Sem_Disp is
*** 2770,2775 ****
--- 3053,3063 ----
           Next_Actual (Arg);
        end loop;
  
+       --  Add class-wide precondition check if the target of this dispatching
+       --  call has or inherits class-wide preconditions.
+ 
+       Install_Class_Preconditions_Check (Call_Node);
+ 
        --  Expansion of dispatching calls is suppressed on VM targets, because
        --  the VM back-ends directly handle the generation of dispatching calls
        --  and would have to undo any expansion to an indirect call.
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_disp.ads gcc-12.1.0/gcc/ada/sem_disp.ads
*** gcc-11.3.0/gcc/ada/sem_disp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_disp.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Disp is
*** 57,67 ****
     procedure Check_Operation_From_Incomplete_Type
       (Subp : Entity_Id;
        Typ  : Entity_Id);
!    --  If a primitive operation was defined for the incomplete view of the
!    --  type, and the full type declaration is a derived type definition,
!    --  the operation may override an inherited one.
!    --  Need more description here, what are the parameters, and what does
!    --  this call actually do???
  
     procedure Check_Operation_From_Private_View (Subp, Old_Subp : Entity_Id);
     --  No action performed if Subp is not an alias of a dispatching operation.
--- 57,71 ----
     procedure Check_Operation_From_Incomplete_Type
       (Subp : Entity_Id;
        Typ  : Entity_Id);
!    --  If a primitive subprogram Subp was defined for the incomplete view of
!    --  Typ, and the full type declaration is a derived type, then Subp may
!    --  override a subprogram inherited from the parent type. In that case,
!    --  the inherited subprogram will have been hidden by the current one at
!    --  the point of the type derivation, so it does not appear in the list
!    --  of primitive operations of the type, and this procedure inserts the
!    --  overriding subprogram in the the full type's list of primitives by
!    --  iterating over the list for the parent type. If instead Subp is a new
!    --  primitive, then it's simply appended to the primitive list.
  
     procedure Check_Operation_From_Private_View (Subp, Old_Subp : Entity_Id);
     --  No action performed if Subp is not an alias of a dispatching operation.
*************** package Sem_Disp is
*** 70,75 ****
--- 74,83 ----
     --  The Alias of Old_Subp is adjusted to point to the inherited procedure
     --  of the full view because it is always this one which has to be called.
  
+    function Covered_Interface_Primitives (Prim : Entity_Id) return Elist_Id;
+    --  Returns all the interface primitives covered by Prim, when its
+    --  controlling type has progenitors.
+ 
     function Covered_Interface_Op (Prim : Entity_Id) return Entity_Id;
     --  Returns the interface primitive that Prim covers, when its controlling
     --  type has progenitors.
*************** package Sem_Disp is
*** 163,182 ****
     procedure Override_Dispatching_Operation
       (Tagged_Type : Entity_Id;
        Prev_Op     : Entity_Id;
!       New_Op      : Entity_Id;
!       Is_Wrapper  : Boolean := False);
     --  Replace an implicit dispatching operation of the type Tagged_Type
     --  with an explicit one. Prev_Op is an inherited primitive operation which
!    --  is overridden by the explicit declaration of New_Op. Is_Wrapper is
!    --  True when New_Op is an internally generated wrapper of a controlling
!    --  function. The caller checks that Tagged_Type is indeed a tagged type.
  
     procedure Propagate_Tag (Control : Node_Id; Actual : Node_Id);
!    --  If a function call is tag-indeterminate, its controlling argument is
!    --  found in the context: either an enclosing call, or the left-hand side
!    --  of the enclosing assignment statement. The tag must be propagated
!    --  recursively to the tag-indeterminate actuals of the call.
!    --  Need clear description of the parameters Control and Actual, especially
!    --  since the comments above refer to actuals in the plural ???
  
  end Sem_Disp;
--- 171,186 ----
     procedure Override_Dispatching_Operation
       (Tagged_Type : Entity_Id;
        Prev_Op     : Entity_Id;
!       New_Op      : Entity_Id);
     --  Replace an implicit dispatching operation of the type Tagged_Type
     --  with an explicit one. Prev_Op is an inherited primitive operation which
!    --  is overridden by the explicit declaration of New_Op.
  
     procedure Propagate_Tag (Control : Node_Id; Actual : Node_Id);
!    --  If a function call given by Actual is tag-indeterminate, its controlling
!    --  argument is found in the context, given by Control: either from an
!    --  operand of an enclosing call, or the left-hand side of the enclosing
!    --  assignment statement. The tag of Control will be propagated recursively
!    --  to Actual and to its tag-indeterminate operands, if any.
  
  end Sem_Disp;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_dist.adb gcc-12.1.0/gcc/ada/sem_dist.adb
*** gcc-11.3.0/gcc/ada/sem_dist.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_dist.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,50 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Exp_Dist; use Exp_Dist;
! with Exp_Tss;  use Exp_Tss;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Namet;    use Namet;
! with Opt;      use Opt;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Disp; use Sem_Disp;
! with Sem_Eval; use Sem_Eval;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
  
  package body Sem_Dist is
  
--- 23,54 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Exp_Dist;       use Exp_Dist;
! with Exp_Tss;        use Exp_Tss;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Namet;          use Namet;
! with Opt;            use Opt;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
  
  package body Sem_Dist is
  
*************** package body Sem_Dist is
*** 656,662 ****
        --  Corresponding_Remote_Type attribute, whose presence indicates that
        --  this is the record type used to implement a RAS.
  
!       Set_Ekind (Fat_Type, E_Record_Type);
        Set_Corresponding_Remote_Type (Fat_Type, User_Type);
  
        Insert_After_And_Analyze (Subpkg_Body, Fat_Type_Decl);
--- 660,666 ----
        --  Corresponding_Remote_Type attribute, whose presence indicates that
        --  this is the record type used to implement a RAS.
  
!       Mutate_Ekind (Fat_Type, E_Record_Type);
        Set_Corresponding_Remote_Type (Fat_Type, User_Type);
  
        Insert_After_And_Analyze (Subpkg_Body, Fat_Type_Decl);
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_dist.ads gcc-12.1.0/gcc/ada/sem_dist.ads
*** gcc-11.3.0/gcc/ada/sem_dist.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_dist.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_elab.adb gcc-12.1.0/gcc/ada/sem_elab.adb
*** gcc-11.3.0/gcc/ada/sem_elab.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_elab.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
***************
*** 23,65 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with ALI;      use ALI;
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Exp_Ch11; use Exp_Ch11;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Expander; use Expander;
! with Lib;      use Lib;
! with Lib.Load; use Lib.Load;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Output;   use Output;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Cat;  use Sem_Cat;
! with Sem_Ch7;  use Sem_Ch7;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Disp; use Sem_Disp;
! with Sem_Prag; use Sem_Prag;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stand;    use Stand;
  with Table;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Uname;    use Uname;
  
  with GNAT;                 use GNAT;
  with GNAT.Dynamic_HTables; use GNAT.Dynamic_HTables;
--- 23,69 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with ALI;            use ALI;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Ch11;       use Exp_Ch11;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Expander;       use Expander;
! with Lib;            use Lib;
! with Lib.Load;       use Lib.Load;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Output;         use Output;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch7;        use Sem_Ch7;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stand;          use Stand;
  with Table;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Uname;          use Uname;
  
  with GNAT;                 use GNAT;
  with GNAT.Dynamic_HTables; use GNAT.Dynamic_HTables;
*************** package body Sem_Elab is
*** 1304,1318 ****
        --  is set, then string " in SPARK" is added to the end of the message.
  
        procedure Info_Variable_Reference
!         (Ref      : Node_Id;
!          Var_Id   : Entity_Id;
!          Info_Msg : Boolean;
!          In_SPARK : Boolean);
        pragma Inline (Info_Variable_Reference);
        --  Output information concerning reference Ref which mentions variable
!       --  Var_Id. If flag Info_Msg is set, the routine emits an information
!       --  message, otherwise it emits an error. If flag In_SPARK is set, then
!       --  string " in SPARK" is added to the end of the message.
  
     end Diagnostics;
     use Diagnostics;
--- 1308,1318 ----
        --  is set, then string " in SPARK" is added to the end of the message.
  
        procedure Info_Variable_Reference
!         (Ref    : Node_Id;
!          Var_Id : Entity_Id);
        pragma Inline (Info_Variable_Reference);
        --  Output information concerning reference Ref which mentions variable
!       --  Var_Id. The routine emits an error suffixed with " in SPARK".
  
     end Diagnostics;
     use Diagnostics;
*************** package body Sem_Elab is
*** 1752,1764 ****
  
        function Is_Ada_Semantic_Target (Id : Entity_Id) return Boolean;
        pragma Inline (Is_Ada_Semantic_Target);
!       --  Determine whether arbitrary entity Id denodes a source or internally
        --  generated subprogram which emulates Ada semantics.
  
        function Is_Assertion_Pragma_Target (Id : Entity_Id) return Boolean;
        pragma Inline (Is_Assertion_Pragma_Target);
        --  Determine whether arbitrary entity Id denotes a procedure which
!       --  varifies the run-time semantics of an assertion pragma.
  
        function Is_Bodiless_Subprogram (Subp_Id : Entity_Id) return Boolean;
        pragma Inline (Is_Bodiless_Subprogram);
--- 1752,1764 ----
  
        function Is_Ada_Semantic_Target (Id : Entity_Id) return Boolean;
        pragma Inline (Is_Ada_Semantic_Target);
!       --  Determine whether arbitrary entity Id denotes a source or internally
        --  generated subprogram which emulates Ada semantics.
  
        function Is_Assertion_Pragma_Target (Id : Entity_Id) return Boolean;
        pragma Inline (Is_Assertion_Pragma_Target);
        --  Determine whether arbitrary entity Id denotes a procedure which
!       --  verifies the run-time semantics of an assertion pragma.
  
        function Is_Bodiless_Subprogram (Subp_Id : Entity_Id) return Boolean;
        pragma Inline (Is_Bodiless_Subprogram);
*************** package body Sem_Elab is
*** 2066,2072 ****
     --  Change the status of the elaboration phase of the compiler to Status
  
     procedure Spec_And_Body_From_Entity
!      (Id        : Node_Id;
        Spec_Decl : out Node_Id;
        Body_Decl : out Node_Id);
     pragma Inline (Spec_And_Body_From_Entity);
--- 2066,2072 ----
     --  Change the status of the elaboration phase of the compiler to Status
  
     procedure Spec_And_Body_From_Entity
!      (Id        : Entity_Id;
        Spec_Decl : out Node_Id;
        Body_Decl : out Node_Id);
     pragma Inline (Spec_And_Body_From_Entity);
*************** package body Sem_Elab is
*** 3032,3042 ****
        pragma Inline (Nested_Scenarios);
        --  Obtain the list of scenarios associated with subprogram body N
  
!       procedure Set_Is_Traversed_Body
!         (N   : Node_Id;
!          Val : Boolean := True);
        pragma Inline (Set_Is_Traversed_Body);
!       --  Mark subprogram body N as traversed depending on value Val
  
        procedure Set_Nested_Scenarios
          (N         : Node_Id;
--- 3032,3040 ----
        pragma Inline (Nested_Scenarios);
        --  Obtain the list of scenarios associated with subprogram body N
  
!       procedure Set_Is_Traversed_Body (N : Node_Id);
        pragma Inline (Set_Is_Traversed_Body);
!       --  Mark subprogram body N as traversed
  
        procedure Set_Nested_Scenarios
          (N         : Node_Id;
*************** package body Sem_Elab is
*** 3101,3118 ****
        -- Set_Is_Traversed_Body --
        ---------------------------
  
!       procedure Set_Is_Traversed_Body
!         (N   : Node_Id;
!          Val : Boolean := True)
!       is
           pragma Assert (Present (N));
  
        begin
!          if Val then
!             NE_Set.Insert (Traversed_Bodies_Set, N);
!          else
!             NE_Set.Delete (Traversed_Bodies_Set, N);
!          end if;
        end Set_Is_Traversed_Body;
  
        --------------------------
--- 3099,3109 ----
        -- Set_Is_Traversed_Body --
        ---------------------------
  
!       procedure Set_Is_Traversed_Body (N : Node_Id) is
           pragma Assert (Present (N));
  
        begin
!          NE_Set.Insert (Traversed_Bodies_Set, N);
        end Set_Is_Traversed_Body;
  
        --------------------------
*************** package body Sem_Elab is
*** 3758,3767 ****
        Set_Is_SPARK_Mode_On_Node (Marker, Is_SPARK_Mode_On_Node (N));
        Set_Target                (Marker, Subp_Id);
  
!       --  Ada 2020 (AI12-0175): Calls to certain functions that are essentially
        --  unchecked conversions are preelaborable.
  
!       if Ada_Version >= Ada_2020 then
           Set_Is_Preelaborable_Call (Marker, Is_Preelaborable_Construct (N));
        else
           Set_Is_Preelaborable_Call (Marker, False);
--- 3749,3758 ----
        Set_Is_SPARK_Mode_On_Node (Marker, Is_SPARK_Mode_On_Node (N));
        Set_Target                (Marker, Subp_Id);
  
!       --  Ada 2022 (AI12-0175): Calls to certain functions that are essentially
        --  unchecked conversions are preelaborable.
  
!       if Ada_Version >= Ada_2022 then
           Set_Is_Preelaborable_Call (Marker, Is_Preelaborable_Construct (N));
        else
           Set_Is_Preelaborable_Call (Marker, False);
*************** package body Sem_Elab is
*** 3824,3837 ****
        -----------------------
  
        function Ultimate_Variable (Var_Id : Entity_Id) return Entity_Id is
           Ren_Id : Entity_Id;
- 
        begin
           Ren_Id := Var_Id;
!          while Present (Renamed_Entity (Ren_Id))
!            and then Nkind (Renamed_Entity (Ren_Id)) in N_Entity
           loop
!             Ren_Id := Renamed_Entity (Ren_Id);
           end loop;
  
           return Ren_Id;
--- 3815,3828 ----
        -----------------------
  
        function Ultimate_Variable (Var_Id : Entity_Id) return Entity_Id is
+          pragma Assert (Ekind (Var_Id) = E_Variable);
           Ren_Id : Entity_Id;
        begin
           Ren_Id := Var_Id;
!          while Present (Renamed_Object (Ren_Id))
!            and then Nkind (Renamed_Object (Ren_Id)) in N_Entity
           loop
!             Ren_Id := Renamed_Object (Ren_Id);
           end loop;
  
           return Ren_Id;
*************** package body Sem_Elab is
*** 4958,4964 ****
           --  which started the recursive search. If this is not the case, then
           --  there is a potential ABE if the access value is used to call the
           --  subprogram. Emit a warning only when switch -gnatw.f (warnings on
!          --  suspucious 'Access) is in effect.
  
           elsif Warn_On_Elab_Access
             and then Present (Body_Decl)
--- 4949,4955 ----
           --  which started the recursive search. If this is not the case, then
           --  there is a potential ABE if the access value is used to call the
           --  subprogram. Emit a warning only when switch -gnatw.f (warnings on
!          --  suspicious 'Access) is in effect.
  
           elsif Warn_On_Elab_Access
             and then Present (Body_Decl)
*************** package body Sem_Elab is
*** 6693,6702 ****
        -----------------------------
  
        procedure Info_Variable_Reference
!         (Ref      : Node_Id;
!          Var_Id   : Entity_Id;
!          Info_Msg : Boolean;
!          In_SPARK : Boolean)
        is
        begin
           if Is_Read (Ref) then
--- 6684,6691 ----
        -----------------------------
  
        procedure Info_Variable_Reference
!         (Ref    : Node_Id;
!          Var_Id : Entity_Id)
        is
        begin
           if Is_Read (Ref) then
*************** package body Sem_Elab is
*** 6704,6711 ****
                (Msg      => "read of variable & during elaboration",
                 N        => Ref,
                 Id       => Var_Id,
!                Info_Msg => Info_Msg,
!                In_SPARK => In_SPARK);
           end if;
        end Info_Variable_Reference;
     end Diagnostics;
--- 6693,6700 ----
                (Msg      => "read of variable & during elaboration",
                 N        => Ref,
                 Id       => Var_Id,
!                Info_Msg => False,
!                In_SPARK => True);
           end if;
        end Info_Variable_Reference;
     end Diagnostics;
*************** package body Sem_Elab is
*** 6976,6981 ****
--- 6965,6975 ----
           --  Determine whether arbitrary node N denotes a suitable construct
           --  for inclusion into the early call region.
  
+          function Previous_Suitable_Construct (N : Node_Id) return Node_Id;
+          pragma Inline (Previous_Suitable_Construct);
+          --  Return the previous node suitable for inclusion into the early
+          --  call region.
+ 
           procedure Transition_Body_Declarations
             (Bod  : Node_Id;
              Curr : out Node_Id);
*************** package body Sem_Elab is
*** 7220,7226 ****
           begin
              --  The early call region starts at N
  
!             Curr  := Prev (N);
              Start := N;
  
              --  Inspect each node in reverse declarative order while going in
--- 7214,7220 ----
           begin
              --  The early call region starts at N
  
!             Curr  := Previous_Suitable_Construct (N);
              Start := N;
  
              --  Inspect each node in reverse declarative order while going in
*************** package body Sem_Elab is
*** 7297,7303 ****
              --  Otherwise the input node is still within some list
  
              else
!                Curr := Prev (Start);
              end if;
           end Include;
  
--- 7291,7297 ----
              --  Otherwise the input node is still within some list
  
              else
!                Curr := Previous_Suitable_Construct (Start);
              end if;
           end Include;
  
*************** package body Sem_Elab is
*** 7389,7394 ****
--- 7383,7405 ----
              end case;
           end Is_Suitable_Construct;
  
+          ---------------------------------
+          -- Previous_Suitable_Construct --
+          ---------------------------------
+ 
+          function Previous_Suitable_Construct (N : Node_Id) return Node_Id is
+             P : Node_Id;
+ 
+          begin
+             P := Prev (N);
+ 
+             while Present (P) and then not Is_Suitable_Construct (P) loop
+                Prev (P);
+             end loop;
+ 
+             return P;
+          end Previous_Suitable_Construct;
+ 
           ----------------------------------
           -- Transition_Body_Declarations --
           ----------------------------------
*************** package body Sem_Elab is
*** 8634,8643 ****
  
              elsif Is_Suitable_Variable_Reference (N) then
                 Info_Variable_Reference
!                  (Ref      => N,
!                   Var_Id   => Targ_Id,
!                   Info_Msg => False,
!                   In_SPARK => True);
  
              --  No other scenario may impose a requirement on the context of
              --  the main unit.
--- 8645,8652 ----
  
              elsif Is_Suitable_Variable_Reference (N) then
                 Info_Variable_Reference
!                  (Ref    => N,
!                   Var_Id => Targ_Id);
  
              --  No other scenario may impose a requirement on the context of
              --  the main unit.
*************** package body Sem_Elab is
*** 8873,8882 ****
  
        Error_Msg_Warn := GNAT_Mode;
  
!       --  Ada 2020 (AI12-0175): Calls to certain functions that are essentially
        --  unchecked conversions are preelaborable.
  
!       if Ada_Version >= Ada_2020 then
           Error_Msg_N
             ("<<non-preelaborable call not allowed in preelaborated unit", N);
        else
--- 8882,8891 ----
  
        Error_Msg_Warn := GNAT_Mode;
  
!       --  Ada 2022 (AI12-0175): Calls to certain functions that are essentially
        --  unchecked conversions are preelaborable.
  
!       if Ada_Version >= Ada_2022 then
           Error_Msg_N
             ("<<non-preelaborable call not allowed in preelaborated unit", N);
        else
*************** package body Sem_Elab is
*** 9024,9030 ****
              if not Comes_From_Source (Curr) then
                 null;
  
!             --  If the traversal came from the handled sequence of statments,
              --  then the node appears at the level of the enclosing construct.
              --  This is a more reliable test because transients scopes within
              --  the declarative region of the encapsulator are hard to detect.
--- 9033,9039 ----
              if not Comes_From_Source (Curr) then
                 null;
  
!             --  If the traversal came from the handled sequence of statements,
              --  then the node appears at the level of the enclosing construct.
              --  This is a more reliable test because transients scopes within
              --  the declarative region of the encapsulator are hard to detect.
*************** package body Sem_Elab is
*** 9046,9052 ****
           elsif Nkind (Curr) in
                   N_Entry_Body | N_Subprogram_Body | N_Task_Body
           then
!             --  If the traversal came from the handled sequence of statments,
              --  then the node cannot possibly appear at any level. This is
              --  a more reliable test because transients scopes within the
              --  declarative region of the encapsulator are hard to detect.
--- 9055,9061 ----
           elsif Nkind (Curr) in
                   N_Entry_Body | N_Subprogram_Body | N_Task_Body
           then
!             --  If the traversal came from the handled sequence of statements,
              --  then the node cannot possibly appear at any level. This is
              --  a more reliable test because transients scopes within the
              --  declarative region of the encapsulator are hard to detect.
*************** package body Sem_Elab is
*** 11801,11819 ****
        --  by creating an entry for it in the ALI file of the main unit. Formal
        --  In_State denotes the current state of the Processing phase.
  
!       procedure Set_Is_Saved_Construct
!         (Constr : Entity_Id;
!          Val    : Boolean := True);
        pragma Inline (Set_Is_Saved_Construct);
        --  Mark invocation construct Constr as declared in the ALI file of the
!       --  main unit depending on value Val.
  
!       procedure Set_Is_Saved_Relation
!         (Rel : Invoker_Target_Relation;
!          Val : Boolean := True);
        pragma Inline (Set_Is_Saved_Relation);
        --  Mark simple invocation relation Rel as recorded in the ALI file of
!       --  the main unit depending on value Val.
  
        function Target_Of
          (Pos      : Active_Scenario_Pos;
--- 11810,11824 ----
        --  by creating an entry for it in the ALI file of the main unit. Formal
        --  In_State denotes the current state of the Processing phase.
  
!       procedure Set_Is_Saved_Construct (Constr : Entity_Id);
        pragma Inline (Set_Is_Saved_Construct);
        --  Mark invocation construct Constr as declared in the ALI file of the
!       --  main unit.
  
!       procedure Set_Is_Saved_Relation (Rel : Invoker_Target_Relation);
        pragma Inline (Set_Is_Saved_Relation);
        --  Mark simple invocation relation Rel as recorded in the ALI file of
!       --  the main unit.
  
        function Target_Of
          (Pos      : Active_Scenario_Pos;
*************** package body Sem_Elab is
*** 11883,11889 ****
           --  Partially decorate the elaboration procedure because it will not
           --  be insertred into the tree and analyzed.
  
!          Set_Ekind (Proc_Id, E_Procedure);
           Set_Etype (Proc_Id, Standard_Void_Type);
           Set_Scope (Proc_Id, Unique_Entity (Main_Unit_Entity));
  
--- 11888,11894 ----
           --  Partially decorate the elaboration procedure because it will not
           --  be insertred into the tree and analyzed.
  
!          Mutate_Ekind (Proc_Id, E_Procedure);
           Set_Etype (Proc_Id, Standard_Void_Type);
           Set_Scope (Proc_Id, Unique_Entity (Main_Unit_Entity));
  
*************** package body Sem_Elab is
*** 12008,12014 ****
           --  it will not be inserted into the tree and analyzed.
  
           Task_Obj := Make_Temporary (Loc, 'T');
!          Set_Ekind (Task_Obj, E_Variable);
           Set_Etype (Task_Obj, Task_Typ);
  
           --  Associate the dummy task object with the activation call
--- 12013,12019 ----
           --  it will not be inserted into the tree and analyzed.
  
           Task_Obj := Make_Temporary (Loc, 'T');
!          Mutate_Ekind (Task_Obj, E_Variable);
           Set_Etype (Task_Obj, Task_Typ);
  
           --  Associate the dummy task object with the activation call
*************** package body Sem_Elab is
*** 13303,13336 ****
        -- Set_Is_Saved_Construct --
        ----------------------------
  
!       procedure Set_Is_Saved_Construct
!         (Constr : Entity_Id;
!          Val    : Boolean := True)
!       is
           pragma Assert (Present (Constr));
  
        begin
!          if Val then
!             NE_Set.Insert (Saved_Constructs_Set, Constr);
!          else
!             NE_Set.Delete (Saved_Constructs_Set, Constr);
!          end if;
        end Set_Is_Saved_Construct;
  
        ---------------------------
        -- Set_Is_Saved_Relation --
        ---------------------------
  
!       procedure Set_Is_Saved_Relation
!         (Rel : Invoker_Target_Relation;
!          Val : Boolean := True)
!       is
        begin
!          if Val then
!             IR_Set.Insert (Saved_Relations_Set, Rel);
!          else
!             IR_Set.Delete (Saved_Relations_Set, Rel);
!          end if;
        end Set_Is_Saved_Relation;
  
        ------------------
--- 13308,13327 ----
        -- Set_Is_Saved_Construct --
        ----------------------------
  
!       procedure Set_Is_Saved_Construct (Constr : Entity_Id) is
           pragma Assert (Present (Constr));
  
        begin
!          NE_Set.Insert (Saved_Constructs_Set, Constr);
        end Set_Is_Saved_Construct;
  
        ---------------------------
        -- Set_Is_Saved_Relation --
        ---------------------------
  
!       procedure Set_Is_Saved_Relation (Rel : Invoker_Target_Relation) is
        begin
!          IR_Set.Insert (Saved_Relations_Set, Rel);
        end Set_Is_Saved_Relation;
  
        ------------------
*************** package body Sem_Elab is
*** 13617,13622 ****
--- 13608,13620 ----
        then
           return True;
  
+       --  A call to an expression function that is not a completion cannot
+       --  cause an ABE because it has no prior declaration; this remains
+       --  true even if the FE transforms the callee into something else.
+ 
+       elsif Nkind (Original_Node (Spec_Decl)) = N_Expression_Function then
+          return True;
+ 
        --  Subprogram bodies which wrap attribute references used as actuals
        --  in instantiations are always ABE-safe. These bodies are artifacts
        --  of expansion.
*************** package body Sem_Elab is
*** 15121,15127 ****
           Inst_Rep : Scenario_Rep_Id;
           In_State : Processing_In_State);
        pragma Inline (Process_SPARK_Instantiation);
!       --  Verify that instanciation Inst does not precede the generic body it
        --  instantiates (SPARK RM 7.7(6)). Inst_Rep is the representation of the
        --  instantiation. In_State is the current state of the Processing phase.
  
--- 15119,15125 ----
           Inst_Rep : Scenario_Rep_Id;
           In_State : Processing_In_State);
        pragma Inline (Process_SPARK_Instantiation);
!       --  Verify that instantiation Inst does not precede the generic body it
        --  instantiates (SPARK RM 7.7(6)). Inst_Rep is the representation of the
        --  instantiation. In_State is the current state of the Processing phase.
  
*************** package body Sem_Elab is
*** 15384,15390 ****
  
                 elsif Present (Vis_Decls)
                   and then List_Containing (FNode) = Vis_Decls
!                  and then (No (Prv_Decls) or else Is_Empty_List (Prv_Decls))
                 then
                    null;
  
--- 15382,15388 ----
  
                 elsif Present (Vis_Decls)
                   and then List_Containing (FNode) = Vis_Decls
!                  and then Is_Empty_List (Prv_Decls)
                 then
                    null;
  
*************** package body Sem_Elab is
*** 15831,15837 ****
     -------------------------------
  
     procedure Spec_And_Body_From_Entity
!      (Id        : Node_Id;
        Spec_Decl : out Node_Id;
        Body_Decl : out Node_Id)
     is
--- 15829,15835 ----
     -------------------------------
  
     procedure Spec_And_Body_From_Entity
!      (Id        : Entity_Id;
        Spec_Decl : out Node_Id;
        Body_Decl : out Node_Id)
     is
*************** package body Sem_Elab is
*** 17554,17567 ****
              --  Complain if ref that comes from source in preelaborated unit
              --  and we are not inside a subprogram (i.e. we are in elab code).
  
!             --  Ada 2020 (AI12-0175): Calls to certain functions that are
              --  essentially unchecked conversions are preelaborable.
  
              if Comes_From_Source (N)
                and then In_Preelaborated_Unit
                and then not In_Inlined_Body
                and then Nkind (N) /= N_Attribute_Reference
!               and then not (Ada_Version >= Ada_2020
                               and then Is_Preelaborable_Construct (N))
              then
                 Error_Preelaborated_Call (N);
--- 17552,17565 ----
              --  Complain if ref that comes from source in preelaborated unit
              --  and we are not inside a subprogram (i.e. we are in elab code).
  
!             --  Ada 2022 (AI12-0175): Calls to certain functions that are
              --  essentially unchecked conversions are preelaborable.
  
              if Comes_From_Source (N)
                and then In_Preelaborated_Unit
                and then not In_Inlined_Body
                and then Nkind (N) /= N_Attribute_Reference
!               and then not (Ada_Version >= Ada_2022
                               and then Is_Preelaborable_Construct (N))
              then
                 Error_Preelaborated_Call (N);
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_elab.ads gcc-12.1.0/gcc/ada/sem_elab.ads
*** gcc-11.3.0/gcc/ada/sem_elab.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_elab.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_elim.adb gcc-12.1.0/gcc/ada/sem_elim.adb
*** gcc-11.3.0/gcc/ada/sem_elim.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_elim.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
***************
*** 23,47 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Prag; use Sem_Prag;
! with Sem_Util; use Sem_Util;
! with Sinput;   use Sinput;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
  with Table;
  
! with GNAT.HTable; use GNAT.HTable;
  
  package body Sem_Elim is
  
--- 23,50 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Util;       use Sem_Util;
! with Sinput;         use Sinput;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
  with Table;
  
! with GNAT.HTable;    use GNAT.HTable;
  
  package body Sem_Elim is
  
*************** package body Sem_Elim is
*** 244,250 ****
  
        --  Elimination of objects and types is not implemented yet
  
!       elsif Ekind (E) not in Subprogram_Kind then
           return;
        end if;
  
--- 247,253 ----
  
        --  Elimination of objects and types is not implemented yet
  
!       elsif not Is_Subprogram (E) then
           return;
        end if;
  
*************** package body Sem_Elim is
*** 783,789 ****
          and then Is_Concurrent_Record_Type (Etype (First_Entity (E)))
        then
           Error_Msg_NE
!            ("cannot reference eliminated protected subprogram", N, E);
  
        --  Otherwise should not fall through, entry should be in table
  
--- 786,792 ----
          and then Is_Concurrent_Record_Type (Etype (First_Entity (E)))
        then
           Error_Msg_NE
!            ("cannot reference eliminated protected subprogram&", N, E);
  
        --  Otherwise should not fall through, entry should be in table
  
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_elim.ads gcc-12.1.0/gcc/ada/sem_elim.ads
*** gcc-11.3.0/gcc/ada/sem_elim.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_elim.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1997-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_eval.adb gcc-12.1.0/gcc/ada/sem_eval.adb
*** gcc-11.3.0/gcc/ada/sem_eval.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_eval.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,61 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Eval_Fat; use Eval_Fat;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nmake;    use Nmake;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Par_SCO;  use Par_SCO;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Cat;  use Sem_Cat;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Elab; use Sem_Elab;
! with Sem_Res;  use Sem_Res;
! with Sem_Util; use Sem_Util;
! with Sem_Type; use Sem_Type;
! with Sem_Warn; use Sem_Warn;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
  
  package body Sem_Eval is
  
--- 23,65 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Eval_Fat;       use Eval_Fat;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nmake;          use Nmake;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Par_SCO;        use Par_SCO;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Res;        use Sem_Res;
! with Sem_Util;       use Sem_Util;
! with Sem_Type;       use Sem_Type;
! with Sem_Warn;       use Sem_Warn;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
  
  package body Sem_Eval is
  
*************** package body Sem_Eval is
*** 114,120 ****
     subtype CV_Range is Nat range 0 .. CV_Cache_Size;
  
     type CV_Entry is record
!       N : Node_Id;
        V : Uint;
     end record;
  
--- 118,125 ----
     subtype CV_Range is Nat range 0 .. CV_Cache_Size;
  
     type CV_Entry is record
!       N : Node_Id'Base;
!       --  We use 'Base here, in case we want to add a predicate to Node_Id
        V : Uint;
     end record;
  
*************** package body Sem_Eval is
*** 136,147 ****
     Checking_For_Potentially_Static_Expression : Boolean := False;
     --  Global flag that is set True during Analyze_Static_Expression_Function
     --  in order to verify that the result expression of a static expression
!    --  function is a potentially static function (see RM202x 6.8(5.3)).
  
     -----------------------
     -- Local Subprograms --
     -----------------------
  
     function Choice_Matches
       (Expr   : Node_Id;
        Choice : Node_Id) return Match_Result;
--- 141,162 ----
     Checking_For_Potentially_Static_Expression : Boolean := False;
     --  Global flag that is set True during Analyze_Static_Expression_Function
     --  in order to verify that the result expression of a static expression
!    --  function is a potentially static function (see RM2022 6.8(5.3)).
  
     -----------------------
     -- Local Subprograms --
     -----------------------
  
+    procedure Check_Non_Static_Context_For_Overflow
+      (N      : Node_Id;
+       Stat   : Boolean;
+       Result : Uint);
+    --  For a signed integer type, check non-static overflow in Result when
+    --  Stat is False. This applies also inside inlined code, where the static
+    --  property may be an effect of the inlining, which should not be allowed
+    --  to remove run-time checks (whether during compilation, or even more
+    --  crucially in the special inlining-for-proof in GNATprove mode).
+ 
     function Choice_Matches
       (Expr   : Node_Id;
        Choice : Node_Id) return Match_Result;
*************** package body Sem_Eval is
*** 508,515 ****
                and then Nkind (Parent (N)) in N_Subexpr
              then
                 Rewrite (N, New_Copy (N));
!                Set_Realval
!                  (N, Machine (Base_Type (T), Realval (N), Round_Even, N));
              end if;
           end if;
  
--- 523,530 ----
                and then Nkind (Parent (N)) in N_Subexpr
              then
                 Rewrite (N, New_Copy (N));
!                Set_Realval (N, Machine_Number (Base_Type (T), Realval (N), N));
!                Set_Is_Machine_Number (N);
              end if;
           end if;
  
*************** package body Sem_Eval is
*** 560,577 ****
                (N, Corresponding_Integer_Value (N) * Small_Value (T));
  
           elsif not UR_Is_Zero (Realval (N)) then
! 
!             --  Note: even though RM 4.9(38) specifies biased rounding, this
!             --  has been modified by AI-100 in order to prevent confusing
!             --  differences in rounding between static and non-static
!             --  expressions. AI-100 specifies that the effect of such rounding
!             --  is implementation dependent, and in GNAT we round to nearest
!             --  even to match the run-time behavior. Note that this applies
!             --  to floating point literals, not fixed points ones, even though
!             --  their compiler representation is also as a universal real.
! 
!             Set_Realval
!               (N, Machine (Base_Type (T), Realval (N), Round_Even, N));
              Set_Is_Machine_Number (N);
           end if;
  
--- 575,581 ----
                (N, Corresponding_Integer_Value (N) * Small_Value (T));
  
           elsif not UR_Is_Zero (Realval (N)) then
!             Set_Realval (N, Machine_Number (Base_Type (T), Realval (N), N));
              Set_Is_Machine_Number (N);
           end if;
  
*************** package body Sem_Eval is
*** 649,654 ****
--- 653,686 ----
        end if;
     end Check_Non_Static_Context;
  
+    -------------------------------------------
+    -- Check_Non_Static_Context_For_Overflow --
+    -------------------------------------------
+ 
+    procedure Check_Non_Static_Context_For_Overflow
+      (N      : Node_Id;
+       Stat   : Boolean;
+       Result : Uint)
+    is
+    begin
+       if (not Stat or else In_Inlined_Body)
+         and then Is_Signed_Integer_Type (Etype (N))
+       then
+          declare
+             BT : constant Entity_Id := Base_Type (Etype (N));
+             Lo : constant Uint := Expr_Value (Type_Low_Bound (BT));
+             Hi : constant Uint := Expr_Value (Type_High_Bound (BT));
+          begin
+             if Result < Lo or else Result > Hi then
+                Apply_Compile_Time_Constraint_Error
+                  (N, "value not in range of }??",
+                   CE_Overflow_Check_Failed,
+                   Ent => BT);
+             end if;
+          end;
+       end if;
+    end Check_Non_Static_Context_For_Overflow;
+ 
     ---------------------------------
     -- Check_String_Literal_Length --
     ---------------------------------
*************** package body Sem_Eval is
*** 1884,1973 ****
           return False;
     end Compile_Time_Known_Value;
  
-    --------------------------------------
-    -- Compile_Time_Known_Value_Or_Aggr --
-    --------------------------------------
- 
-    function Compile_Time_Known_Value_Or_Aggr (Op : Node_Id) return Boolean is
-    begin
-       --  If we have an entity name, then see if it is the name of a constant
-       --  and if so, test the corresponding constant value, or the name of
-       --  an enumeration literal, which is always a constant.
- 
-       if Is_Entity_Name (Op) then
-          declare
-             E : constant Entity_Id := Entity (Op);
-             V : Node_Id;
- 
-          begin
-             if Ekind (E) = E_Enumeration_Literal then
-                return True;
- 
-             elsif Ekind (E) /= E_Constant then
-                return False;
- 
-             else
-                V := Constant_Value (E);
-                return Present (V)
-                  and then Compile_Time_Known_Value_Or_Aggr (V);
-             end if;
-          end;
- 
-       --  We have a value, see if it is compile-time-known
- 
-       else
-          if Compile_Time_Known_Value (Op) then
-             return True;
- 
-          elsif Nkind (Op) = N_Aggregate then
- 
-             if Present (Expressions (Op)) then
-                declare
-                   Expr : Node_Id;
-                begin
-                   Expr := First (Expressions (Op));
-                   while Present (Expr) loop
-                      if not Compile_Time_Known_Value_Or_Aggr (Expr) then
-                         return False;
-                      else
-                         Next (Expr);
-                      end if;
-                   end loop;
-                end;
-             end if;
- 
-             if Present (Component_Associations (Op)) then
-                declare
-                   Cass : Node_Id;
- 
-                begin
-                   Cass := First (Component_Associations (Op));
-                   while Present (Cass) loop
-                      if not
-                        Compile_Time_Known_Value_Or_Aggr (Expression (Cass))
-                      then
-                         return False;
-                      end if;
- 
-                      Next (Cass);
-                   end loop;
-                end;
-             end if;
- 
-             return True;
- 
-          elsif Nkind (Op) = N_Qualified_Expression then
-             return Compile_Time_Known_Value_Or_Aggr (Expression (Op));
- 
-          --  All other types of values are not known at compile time
- 
-          else
-             return False;
-          end if;
- 
-       end if;
-    end Compile_Time_Known_Value_Or_Aggr;
- 
     ---------------------------------------
     -- CRT_Safe_Compile_Time_Known_Value --
     ---------------------------------------
--- 1916,1921 ----
*************** package body Sem_Eval is
*** 2085,2092 ****
  
                       Apply_Compile_Time_Constraint_Error
                         (N, "division by zero", CE_Divide_By_Zero,
                          Warn => not Stat or SPARK_Mode = On);
-                      Set_Raises_Constraint_Error (N);
                       return;
  
                    --  Otherwise we can do the division
--- 2033,2040 ----
  
                       Apply_Compile_Time_Constraint_Error
                         (N, "division by zero", CE_Divide_By_Zero,
+                         Loc  => Sloc (Right),
                          Warn => not Stat or SPARK_Mode = On);
                       return;
  
                    --  Otherwise we can do the division
*************** package body Sem_Eval is
*** 2108,2113 ****
--- 2056,2062 ----
  
                       Apply_Compile_Time_Constraint_Error
                         (N, "mod with zero divisor", CE_Divide_By_Zero,
+                         Loc  => Sloc (Right),
                          Warn => not Stat or SPARK_Mode = On);
                       return;
  
*************** package body Sem_Eval is
*** 2128,2133 ****
--- 2077,2083 ----
  
                       Apply_Compile_Time_Constraint_Error
                         (N, "rem with zero divisor", CE_Divide_By_Zero,
+                         Loc  => Sloc (Right),
                          Warn => not Stat or SPARK_Mode = On);
                       return;
  
*************** package body Sem_Eval is
*** 2143,2167 ****
  
              if Is_Modular_Integer_Type (Ltype) then
                 Result := Result mod Modulus (Ltype);
- 
-                --  For a signed integer type, check non-static overflow
- 
-             elsif (not Stat) and then Is_Signed_Integer_Type (Ltype) then
-                declare
-                   BT : constant Entity_Id := Base_Type (Ltype);
-                   Lo : constant Uint := Expr_Value (Type_Low_Bound (BT));
-                   Hi : constant Uint := Expr_Value (Type_High_Bound (BT));
-                begin
-                   if Result < Lo or else Result > Hi then
-                      Apply_Compile_Time_Constraint_Error
-                        (N, "value not in range of }??",
-                         CE_Overflow_Check_Failed,
-                         Ent => BT);
-                      return;
-                   end if;
-                end;
              end if;
  
              --  If we get here we can fold the result
  
              Fold_Uint (N, Result, Stat);
--- 2093,2102 ----
  
              if Is_Modular_Integer_Type (Ltype) then
                 Result := Result mod Modulus (Ltype);
              end if;
  
+             Check_Non_Static_Context_For_Overflow (N, Stat, Result);
+ 
              --  If we get here we can fold the result
  
              Fold_Uint (N, Result, Stat);
*************** package body Sem_Eval is
*** 2202,2208 ****
              else pragma Assert (Nkind (N) = N_Op_Divide);
                 if UR_Is_Zero (Right_Real) then
                    Apply_Compile_Time_Constraint_Error
!                     (N, "division by zero", CE_Divide_By_Zero);
                    return;
                 end if;
  
--- 2137,2144 ----
              else pragma Assert (Nkind (N) = N_Op_Divide);
                 if UR_Is_Zero (Right_Real) then
                    Apply_Compile_Time_Constraint_Error
!                     (N, "division by zero", CE_Divide_By_Zero,
!                      Loc => Sloc (Right));
                    return;
                 end if;
  
*************** package body Sem_Eval is
*** 2277,2283 ****
        then
           Eval_Intrinsic_Call (N, Entity (Name (N)));
  
!       --  Ada 202x (AI12-0075): If checking for potentially static expressions
        --  is enabled and we have a call to a static function, substitute a
        --  static value for the call, to allow folding the expression. This
        --  supports checking the requirement of RM 6.8(5.3/5) in
--- 2213,2219 ----
        then
           Eval_Intrinsic_Call (N, Entity (Name (N)));
  
!       --  Ada 2022 (AI12-0075): If checking for potentially static expressions
        --  is enabled and we have a call to a static function, substitute a
        --  static value for the call, to allow folding the expression. This
        --  supports checking the requirement of RM 6.8(5.3/5) in
*************** package body Sem_Eval is
*** 2568,2574 ****
              return;
           end if;
  
!       --  Ada 202x (AI12-0075): If checking for potentially static expressions
        --  is enabled and we have a reference to a formal parameter of mode in,
        --  substitute a static value for the reference, to allow folding the
        --  expression. This supports checking the requirement of RM 6.8(5.3/5)
--- 2504,2510 ----
              return;
           end if;
  
!       --  Ada 2022 (AI12-0075): If checking for potentially static expressions
        --  is enabled and we have a reference to a formal parameter of mode in,
        --  substitute a static value for the reference, to allow folding the
        --  expression. This supports checking the requirement of RM 6.8(5.3/5)
*************** package body Sem_Eval is
*** 2818,2824 ****
     --  the expander that do not correspond to static expressions.
  
     procedure Eval_Integer_Literal (N : Node_Id) is
!       function In_Any_Integer_Context (Context : Node_Id) return Boolean;
        --  If the literal is resolved with a specific type in a context where
        --  the expected type is Any_Integer, there are no range checks on the
        --  literal. By the time the literal is evaluated, it carries the type
--- 2754,2760 ----
     --  the expander that do not correspond to static expressions.
  
     procedure Eval_Integer_Literal (N : Node_Id) is
!       function In_Any_Integer_Context (K : Node_Kind) return Boolean;
        --  If the literal is resolved with a specific type in a context where
        --  the expected type is Any_Integer, there are no range checks on the
        --  literal. By the time the literal is evaluated, it carries the type
*************** package body Sem_Eval is
*** 2829,2851 ****
        -- In_Any_Integer_Context --
        ----------------------------
  
!       function In_Any_Integer_Context (Context : Node_Id) return Boolean is
        begin
           --  Any_Integer also appears in digits specifications for real types,
           --  but those have bounds smaller that those of any integer base type,
           --  so we can safely ignore these cases.
  
!          return
!            Nkind (Context) in N_Attribute_Definition_Clause
!                             | N_Attribute_Reference
!                             | N_Modular_Type_Definition
!                             | N_Number_Declaration
!                             | N_Signed_Integer_Type_Definition;
        end In_Any_Integer_Context;
  
        --  Local variables
  
!       Par : constant Node_Id   := Parent (N);
        Typ : constant Entity_Id := Etype (N);
  
     --  Start of processing for Eval_Integer_Literal
--- 2765,2785 ----
        -- In_Any_Integer_Context --
        ----------------------------
  
!       function In_Any_Integer_Context (K : Node_Kind) return Boolean is
        begin
           --  Any_Integer also appears in digits specifications for real types,
           --  but those have bounds smaller that those of any integer base type,
           --  so we can safely ignore these cases.
  
!          return K in N_Attribute_Definition_Clause
!                    | N_Modular_Type_Definition
!                    | N_Number_Declaration
!                    | N_Signed_Integer_Type_Definition;
        end In_Any_Integer_Context;
  
        --  Local variables
  
!       PK  : constant Node_Kind := Nkind (Parent (N));
        Typ : constant Entity_Id := Etype (N);
  
     --  Start of processing for Eval_Integer_Literal
*************** package body Sem_Eval is
*** 2863,2874 ****
        --  Check_Non_Static_Context on an expanded literal may lead to spurious
        --  and misleading warnings.
  
!       if (Nkind (Par) in N_Case_Expression_Alternative | N_If_Expression
!            or else Nkind (Par) not in N_Subexpr)
!         and then (Nkind (Par) not in N_Case_Expression_Alternative
!                                    | N_If_Expression
!                    or else Comes_From_Source (N))
!         and then not In_Any_Integer_Context (Par)
        then
           Check_Non_Static_Context (N);
        end if;
--- 2797,2807 ----
        --  Check_Non_Static_Context on an expanded literal may lead to spurious
        --  and misleading warnings.
  
!       if (PK not in N_Subexpr
!            or else (PK in N_Case_Expression_Alternative | N_If_Expression
!                      and then
!                     Comes_From_Source (N)))
!         and then not In_Any_Integer_Context (PK)
        then
           Check_Non_Static_Context (N);
        end if;
*************** package body Sem_Eval is
*** 2969,2978 ****
     --  static if both operands are potentially static (RM 4.9(7), 4.9(20)).
  
     procedure Eval_Logical_Op (N : Node_Id) is
!       Left  : constant Node_Id := Left_Opnd (N);
!       Right : constant Node_Id := Right_Opnd (N);
!       Stat  : Boolean;
!       Fold  : Boolean;
  
     begin
        --  If not foldable we are done
--- 2902,2913 ----
     --  static if both operands are potentially static (RM 4.9(7), 4.9(20)).
  
     procedure Eval_Logical_Op (N : Node_Id) is
!       Left      : constant Node_Id := Left_Opnd (N);
!       Right     : constant Node_Id := Right_Opnd (N);
!       Left_Int  : Uint := No_Uint;
!       Right_Int : Uint := No_Uint;
!       Stat      : Boolean;
!       Fold      : Boolean;
  
     begin
        --  If not foldable we are done
*************** package body Sem_Eval is
*** 2985,3048 ****
  
        --  Compile time evaluation of logical operation
  
!       declare
!          Left_Int  : constant Uint := Expr_Value (Left);
!          Right_Int : constant Uint := Expr_Value (Right);
  
!       begin
!          if Is_Modular_Integer_Type (Etype (N)) then
!             declare
!                Left_Bits  : Bits (0 .. UI_To_Int (Esize (Etype (N))) - 1);
!                Right_Bits : Bits (0 .. UI_To_Int (Esize (Etype (N))) - 1);
  
!             begin
!                To_Bits (Left_Int, Left_Bits);
!                To_Bits (Right_Int, Right_Bits);
  
!                --  Note: should really be able to use array ops instead of
!                --  these loops, but they break the build with a cryptic error
!                --  during the bind of gnat1 likely due to a wrong computation
!                --  of a date or checksum.
  
!                if Nkind (N) = N_Op_And then
!                   for J in Left_Bits'Range loop
!                      Left_Bits (J) := Left_Bits (J) and Right_Bits (J);
!                   end loop;
  
!                elsif Nkind (N) = N_Op_Or then
!                   for J in Left_Bits'Range loop
!                      Left_Bits (J) := Left_Bits (J) or Right_Bits (J);
!                   end loop;
  
!                else
!                   pragma Assert (Nkind (N) = N_Op_Xor);
  
!                   for J in Left_Bits'Range loop
!                      Left_Bits (J) := Left_Bits (J) xor Right_Bits (J);
!                   end loop;
!                end if;
  
!                Fold_Uint (N, From_Bits (Left_Bits, Etype (N)), Stat);
!             end;
  
!          else
!             pragma Assert (Is_Boolean_Type (Etype (N)));
  
!             if Nkind (N) = N_Op_And then
                 Fold_Uint (N,
                   Test (Is_True (Left_Int) and then Is_True (Right_Int)), Stat);
  
!             elsif Nkind (N) = N_Op_Or then
!                Fold_Uint (N,
!                  Test (Is_True (Left_Int) or else Is_True (Right_Int)), Stat);
  
              else
-                pragma Assert (Nkind (N) = N_Op_Xor);
                 Fold_Uint (N,
!                  Test (Is_True (Left_Int) xor Is_True (Right_Int)), Stat);
              end if;
           end if;
!       end;
     end Eval_Logical_Op;
  
     ------------------------
--- 2920,3007 ----
  
        --  Compile time evaluation of logical operation
  
!       if Is_Modular_Integer_Type (Etype (N)) then
!          Left_Int  := Expr_Value (Left);
!          Right_Int := Expr_Value (Right);
  
!          declare
!             Left_Bits  : Bits (0 .. UI_To_Int (Esize (Etype (N))) - 1);
!             Right_Bits : Bits (0 .. UI_To_Int (Esize (Etype (N))) - 1);
  
!          begin
!             To_Bits (Left_Int, Left_Bits);
!             To_Bits (Right_Int, Right_Bits);
  
!             --  Note: should really be able to use array ops instead of
!             --  these loops, but they break the build with a cryptic error
!             --  during the bind of gnat1 likely due to a wrong computation
!             --  of a date or checksum.
  
!             if Nkind (N) = N_Op_And then
!                for J in Left_Bits'Range loop
!                   Left_Bits (J) := Left_Bits (J) and Right_Bits (J);
!                end loop;
  
!             elsif Nkind (N) = N_Op_Or then
!                for J in Left_Bits'Range loop
!                   Left_Bits (J) := Left_Bits (J) or Right_Bits (J);
!                end loop;
  
!             else
!                pragma Assert (Nkind (N) = N_Op_Xor);
  
!                for J in Left_Bits'Range loop
!                   Left_Bits (J) := Left_Bits (J) xor Right_Bits (J);
!                end loop;
!             end if;
  
!             Fold_Uint (N, From_Bits (Left_Bits, Etype (N)), Stat);
!          end;
  
!       else
!          pragma Assert (Is_Boolean_Type (Etype (N)));
  
!          if Compile_Time_Known_Value (Left)
!            and then Compile_Time_Known_Value (Right)
!          then
!             Right_Int := Expr_Value (Right);
!             Left_Int  := Expr_Value (Left);
!          end if;
! 
!          if Nkind (N) = N_Op_And then
! 
!             --  If Left or Right are not compile time known values it means
!             --  that the result is always False as per
!             --  Test_Expression_Is_Foldable.
!             --  Note that in this case, both Right_Int and Left_Int are set
!             --  to No_Uint, so need to test for both.
! 
!             if No (Right_Int) then
!                Fold_Uint (N, Uint_0, Stat);
!             else
                 Fold_Uint (N,
                   Test (Is_True (Left_Int) and then Is_True (Right_Int)), Stat);
+             end if;
+          elsif Nkind (N) = N_Op_Or then
  
!             --  If Left or Right are not compile time known values it means
!             --  that the result is always True. as per
!             --  Test_Expression_Is_Foldable.
!             --  Note that in this case, both Right_Int and Left_Int are set
!             --  to No_Uint, so need to test for both.
  
+             if No (Right_Int) then
+                Fold_Uint (N, Uint_1, Stat);
              else
                 Fold_Uint (N,
!                  Test (Is_True (Left_Int) or else Is_True (Right_Int)), Stat);
              end if;
+          else
+             pragma Assert (Nkind (N) = N_Op_Xor);
+             Fold_Uint (N,
+               Test (Is_True (Left_Int) xor Is_True (Right_Int)), Stat);
           end if;
!       end if;
     end Eval_Logical_Op;
  
     ------------------------
*************** package body Sem_Eval is
*** 3202,3207 ****
--- 3161,3168 ----
                       Result := Result mod Modulus (Etype (N));
                    end if;
  
+                   Check_Non_Static_Context_For_Overflow (N, Stat, Result);
+ 
                    Fold_Uint (N, Result, Stat);
                 end if;
              end;
*************** package body Sem_Eval is
*** 3408,3414 ****
     --  Relational operations are static functions, so the result is static if
     --  both operands are static (RM 4.9(7), 4.9(20)), except that up to Ada
     --  2012, for strings the result is never static, even if the operands are.
!    --  The string case was relaxed in Ada 2020, see AI12-0201.
  
     --  However, for internally generated nodes, we allow string equality and
     --  inequality to be static. This is because we rewrite A in "ABC" as an
--- 3369,3375 ----
     --  Relational operations are static functions, so the result is static if
     --  both operands are static (RM 4.9(7), 4.9(20)), except that up to Ada
     --  2012, for strings the result is never static, even if the operands are.
!    --  The string case was relaxed in Ada 2022, see AI12-0201.
  
     --  However, for internally generated nodes, we allow string equality and
     --  inequality to be static. This is because we rewrite A in "ABC" as an
*************** package body Sem_Eval is
*** 3749,3760 ****
             and then Right_Len /= Uint_Minus_1
             and then Left_Len /= Right_Len
           then
!             --  AI12-0201: comparison of string is static in Ada 202x
  
              Fold_Uint
                (N,
                 Test (Nkind (N) = N_Op_Ne),
!                Static => Ada_Version >= Ada_2020
                             and then Is_String_Type (Left_Typ));
              Warn_On_Known_Condition (N);
              return;
--- 3710,3721 ----
             and then Right_Len /= Uint_Minus_1
             and then Left_Len /= Right_Len
           then
!             --  AI12-0201: comparison of string is static in Ada 2022
  
              Fold_Uint
                (N,
                 Test (Nkind (N) = N_Op_Ne),
!                Static => Ada_Version >= Ada_2022
                             and then Is_String_Type (Left_Typ));
              Warn_On_Known_Condition (N);
              return;
*************** package body Sem_Eval is
*** 3774,3789 ****
          (N, Left, Right, Is_Static_Expression, Fold);
  
        --  Comparisons of scalars can give static results.
!       --  In addition starting with Ada 202x (AI12-0201), comparison of strings
        --  can also give static results, and as noted above, we also allow for
        --  earlier Ada versions internally generated equality and inequality for
        --  strings.
!       --  ??? The Comes_From_Source test below isn't correct and will accept
!       --  some cases that are illegal in Ada 2012. and before. Now that Ada
!       --  202x has relaxed the rules, this doesn't really matter.
  
        if Is_String_Type (Left_Typ) then
!          if Ada_Version < Ada_2020
             and then (Comes_From_Source (N)
                        or else Nkind (N) not in N_Op_Eq | N_Op_Ne)
           then
--- 3735,3750 ----
          (N, Left, Right, Is_Static_Expression, Fold);
  
        --  Comparisons of scalars can give static results.
!       --  In addition starting with Ada 2022 (AI12-0201), comparison of strings
        --  can also give static results, and as noted above, we also allow for
        --  earlier Ada versions internally generated equality and inequality for
        --  strings.
!       --  The Comes_From_Source test below isn't correct and will accept
!       --  some cases that are illegal in Ada 2012 and before. Now that Ada
!       --  2022 has relaxed the rules, this doesn't really matter.
  
        if Is_String_Type (Left_Typ) then
!          if Ada_Version < Ada_2022
             and then (Comes_From_Source (N)
                        or else Nkind (N) not in N_Op_Eq | N_Op_Ne)
           then
*************** package body Sem_Eval is
*** 3830,3845 ****
     -----------------------------
  
     procedure Eval_Selected_Component (N : Node_Id) is
     begin
        --  If an attribute reference or a LHS, nothing to do.
        --  Also do not fold if N is an [in] out subprogram parameter.
        --  Fold will perform the other relevant tests.
  
        if Nkind (Parent (N)) /= N_Attribute_Reference
!         and then Is_LHS (N) = No
          and then not Is_Actual_Out_Or_In_Out_Parameter (N)
        then
!          Fold (N);
        end if;
     end Eval_Selected_Component;
  
--- 3791,3838 ----
     -----------------------------
  
     procedure Eval_Selected_Component (N : Node_Id) is
+       Node : Node_Id;
+       Comp : Node_Id;
+       C    : Node_Id;
+       Nam  : Name_Id;
+ 
     begin
        --  If an attribute reference or a LHS, nothing to do.
        --  Also do not fold if N is an [in] out subprogram parameter.
        --  Fold will perform the other relevant tests.
  
        if Nkind (Parent (N)) /= N_Attribute_Reference
!         and then not Known_To_Be_Assigned (N)
          and then not Is_Actual_Out_Or_In_Out_Parameter (N)
        then
!          --  Simplify a selected_component on an aggregate by extracting
!          --  the field directly.
! 
!          Node := Unqualify (Prefix (N));
! 
!          if Nkind (Node) = N_Aggregate
!            and then Compile_Time_Known_Aggregate (Node)
!          then
!             Comp := First (Component_Associations (Node));
!             Nam  := Chars (Selector_Name (N));
! 
!             while Present (Comp) loop
!                C := First (Choices (Comp));
! 
!                while Present (C) loop
!                   if Chars (C) = Nam then
!                      Rewrite (N, Relocate_Node (Expression (Comp)));
!                      return;
!                   end if;
! 
!                   Next (C);
!                end loop;
! 
!                Next (Comp);
!             end loop;
!          else
!             Fold (N);
!          end if;
        end if;
     end Eval_Selected_Component;
  
*************** package body Sem_Eval is
*** 4047,4053 ****
        end if;
  
        --  If original node was a type conversion, then result if non-static
!       --  up to Ada 2012. AI12-0201 changes that with Ada 202x.
  
        if Nkind (Original_Node (N)) = N_Type_Conversion
          and then Ada_Version <= Ada_2012
--- 4040,4046 ----
        end if;
  
        --  If original node was a type conversion, then result if non-static
!       --  up to Ada 2012. AI12-0201 changes that with Ada 2022.
  
        if Nkind (Original_Node (N)) = N_Type_Conversion
          and then Ada_Version <= Ada_2012
*************** package body Sem_Eval is
*** 4079,4085 ****
  
           Len := String_Length (Strval (N));
  
!          if UI_From_Int (Len) > String_Type_Len (Bas) then
  
              --  Issue message. Note that this message is a warning if the
              --  string literal is not marked as static (happens in some cases
--- 4072,4078 ----
  
           Len := String_Length (Strval (N));
  
!          if Len > String_Type_Len (Bas) then
  
              --  Issue message. Note that this message is a warning if the
              --  string literal is not marked as static (happens in some cases
*************** package body Sem_Eval is
*** 4209,4221 ****
        --  Conversion_OK is set, in which case it counts as integer.
  
        --  Fold conversion, case of string type. The result is static starting
!       --  with Ada 202x (AI12-0201).
  
        if Is_String_Type (Target_Type) then
           Fold_Str
             (N,
              Strval (Get_String_Val (Operand)),
!             Static => Ada_Version >= Ada_2020);
           return;
  
        --  Fold conversion, case of integer target type
--- 4202,4214 ----
        --  Conversion_OK is set, in which case it counts as integer.
  
        --  Fold conversion, case of string type. The result is static starting
!       --  with Ada 2022 (AI12-0201).
  
        if Is_String_Type (Target_Type) then
           Fold_Str
             (N,
              Strval (Get_String_Val (Operand)),
!             Static => Ada_Version >= Ada_2022);
           return;
  
        --  Fold conversion, case of integer target type
*************** package body Sem_Eval is
*** 4279,4285 ****
           Fold_Uint (N, Expr_Value (Operand), Stat);
        end if;
  
!       if Is_Out_Of_Range (N, Etype (N), Assume_Valid => True) then
           Out_Of_Range (N);
        end if;
     end Eval_Type_Conversion;
--- 4272,4296 ----
           Fold_Uint (N, Expr_Value (Operand), Stat);
        end if;
  
!       --  If the target is a static floating-point subtype, then its bounds
!       --  are machine numbers so we must consider the machine-rounded value.
! 
!       if Is_Floating_Point_Type (Target_Type)
!         and then Nkind (N) = N_Real_Literal
!         and then not Is_Machine_Number (N)
!       then
!          declare
!             Lo   : constant Node_Id := Type_Low_Bound (Target_Type);
!             Hi   : constant Node_Id := Type_High_Bound (Target_Type);
!             Valr : constant Ureal   :=
!                      Machine_Number (Target_Type, Expr_Value_R (N), N);
!          begin
!             if Valr < Expr_Value_R (Lo) or else Valr > Expr_Value_R (Hi) then
!                Out_Of_Range (N);
!             end if;
!          end;
! 
!       elsif Is_Out_Of_Range (N, Etype (N), Assume_Valid => True) then
           Out_Of_Range (N);
        end if;
     end Eval_Type_Conversion;
*************** package body Sem_Eval is
*** 4306,4315 ****
           return;
        end if;
  
!       if Etype (Right) = Universal_Integer
!            or else
!          Etype (Right) = Universal_Real
!       then
           Otype := Find_Universal_Operator_Type (N);
        end if;
  
--- 4317,4323 ----
           return;
        end if;
  
!       if Is_Universal_Numeric_Type (Etype (Right)) then
           Otype := Find_Universal_Operator_Type (N);
        end if;
  
*************** package body Sem_Eval is
*** 4343,4348 ****
--- 4351,4358 ----
                 Result := abs Rint;
              end if;
  
+             Check_Non_Static_Context_For_Overflow (N, Stat, Result);
+ 
              Fold_Uint (N, Result, Stat);
           end;
  
*************** package body Sem_Eval is
*** 4633,4639 ****
     ------------------
  
     function Expr_Value_E (N : Node_Id) return Entity_Id is
!       Ent  : constant Entity_Id := Entity (N);
     begin
        if Ekind (Ent) = E_Enumeration_Literal then
           return Ent;
--- 4643,4649 ----
     ------------------
  
     function Expr_Value_E (N : Node_Id) return Entity_Id is
!       Ent : constant Entity_Id := Entity (N);
     begin
        if Ekind (Ent) = E_Enumeration_Literal then
           return Ent;
*************** package body Sem_Eval is
*** 4928,4934 ****
           end if;
        end Check_Elab_Call;
  
!       Modulus : Uint;
  
     begin
        if Compile_Time_Known_Value (Left)
--- 4938,4944 ----
           end if;
        end Check_Elab_Call;
  
!       Modulus, Val : Uint;
  
     begin
        if Compile_Time_Known_Value (Left)
*************** package body Sem_Eval is
*** 4939,4961 ****
           if Op = N_Op_Shift_Left then
              Check_Elab_Call;
  
!             declare
!                Modulus : Uint;
!             begin
!                if Is_Modular_Integer_Type (Typ) then
!                   Modulus := Einfo.Modulus (Typ);
!                else
!                   Modulus := Uint_2 ** RM_Size (Typ);
!                end if;
  
!                --  Fold Shift_Left (X, Y) by computing (X * 2**Y) rem modulus
  
!                Fold_Uint
!                  (N,
!                   (Expr_Value (Left) * (Uint_2 ** Expr_Value (Right)))
!                     rem Modulus,
!                   Static => Static);
!             end;
  
           elsif Op = N_Op_Shift_Right then
              Check_Elab_Call;
--- 4949,4973 ----
           if Op = N_Op_Shift_Left then
              Check_Elab_Call;
  
!             if Is_Modular_Integer_Type (Typ) then
!                Modulus := Einfo.Entities.Modulus (Typ);
!             else
!                Modulus := Uint_2 ** RM_Size (Typ);
!             end if;
  
!             --  Fold Shift_Left (X, Y) by computing
!             --  (X * 2**Y) rem modulus [- Modulus]
  
!             Val := (Expr_Value (Left) * (Uint_2 ** Expr_Value (Right)))
!                      rem Modulus;
! 
!             if Is_Modular_Integer_Type (Typ)
!               or else Val < Modulus / Uint_2
!             then
!                Fold_Uint (N, Val, Static => Static);
!             else
!                Fold_Uint (N, Val - Modulus, Static => Static);
!             end if;
  
           elsif Op = N_Op_Shift_Right then
              Check_Elab_Call;
*************** package body Sem_Eval is
*** 4966,4972 ****
                 Fold_Uint (N, Expr_Value (Left), Static => Static);
              else
                 if Is_Modular_Integer_Type (Typ) then
!                   Modulus := Einfo.Modulus (Typ);
                 else
                    Modulus := Uint_2 ** RM_Size (Typ);
                 end if;
--- 4978,4984 ----
                 Fold_Uint (N, Expr_Value (Left), Static => Static);
              else
                 if Is_Modular_Integer_Type (Typ) then
!                   Modulus := Einfo.Entities.Modulus (Typ);
                 else
                    Modulus := Uint_2 ** RM_Size (Typ);
                 end if;
*************** package body Sem_Eval is
*** 4976,4996 ****
                 --  result is always positive, even if the original operand was
                 --  negative.
  
!                Fold_Uint
!                  (N,
!                   (Expr_Value (Left) +
!                      (if Expr_Value (Left) >= Uint_0 then Uint_0 else Modulus))
!                   / (Uint_2 ** Expr_Value (Right)),
!                   Static => Static);
              end if;
           elsif Op = N_Op_Shift_Right_Arithmetic then
              Check_Elab_Call;
  
              declare
!                Two_Y   : constant Uint := Uint_2 ** Expr_Value (Right);
              begin
                 if Is_Modular_Integer_Type (Typ) then
!                   Modulus := Einfo.Modulus (Typ);
                 else
                    Modulus := Uint_2 ** RM_Size (Typ);
                 end if;
--- 4988,5016 ----
                 --  result is always positive, even if the original operand was
                 --  negative.
  
!                declare
!                   M : Unat;
!                begin
!                   if Expr_Value (Left) >= Uint_0 then
!                      M := Uint_0;
!                   else
!                      M := Modulus;
!                   end if;
! 
!                   Fold_Uint
!                     (N,
!                      (Expr_Value (Left) + M) / (Uint_2 ** Expr_Value (Right)),
!                      Static => Static);
!                end;
              end if;
           elsif Op = N_Op_Shift_Right_Arithmetic then
              Check_Elab_Call;
  
              declare
!                Two_Y : constant Uint := Uint_2 ** Expr_Value (Right);
              begin
                 if Is_Modular_Integer_Type (Typ) then
!                   Modulus := Einfo.Entities.Modulus (Typ);
                 else
                    Modulus := Uint_2 ** RM_Size (Typ);
                 end if;
*************** package body Sem_Eval is
*** 5494,5516 ****
           return False;
        end if;
  
!       Anc_Subt := Ancestor_Subtype (Typ);
! 
!       if Anc_Subt = Empty then
!          Anc_Subt := Base_T;
!       end if;
! 
!       if Is_Generic_Type (Root_Type (Base_T))
!         or else Is_Generic_Actual_Type (Base_T)
!       then
!          return False;
  
!       elsif Has_Dynamic_Predicate_Aspect (Typ) then
           return False;
  
        --  String types
  
!       elsif Is_String_Type (Typ) then
           return
             Ekind (Typ) = E_String_Literal_Subtype
               or else
--- 5514,5529 ----
           return False;
        end if;
  
!       --  Then, check if the subtype is strictly static. This takes care of
!       --  checking for generics and predicates.
  
!       if not Is_Static_Subtype (Typ) then
           return False;
+       end if;
  
        --  String types
  
!       if Is_String_Type (Typ) then
           return
             Ekind (Typ) = E_String_Literal_Subtype
               or else
*************** package body Sem_Eval is
*** 5524,5529 ****
--- 5537,5548 ----
              return True;
  
           else
+             Anc_Subt := Ancestor_Subtype (Typ);
+ 
+             if No (Anc_Subt) then
+                Anc_Subt := Base_T;
+             end if;
+ 
              --  Scalar_Range (Typ) might be an N_Subtype_Indication, so use
              --  Get_Type_{Low,High}_Bound.
  
*************** package body Sem_Eval is
*** 5655,5660 ****
--- 5674,5681 ----
        elsif Has_Dynamic_Predicate_Aspect (Typ)
          or else (Is_Derived_Type (Typ)
                    and then Has_Aspect (Typ, Aspect_Dynamic_Predicate))
+         or else (Has_Aspect (Typ, Aspect_Predicate)
+                   and then not Has_Static_Predicate (Typ))
        then
           return False;
  
*************** package body Sem_Eval is
*** 5952,5957 ****
--- 5973,5999 ----
     end Is_Statically_Unevaluated;
  
     --------------------
+    -- Machine_Number --
+    --------------------
+ 
+    --  Historical note: RM 4.9(38) originally specified biased rounding but
+    --  this has been modified by AI-268 to prevent confusing differences in
+    --  rounding between static and nonstatic expressions. This AI specifies
+    --  that the effect of such rounding is implementation-dependent instead,
+    --  and in GNAT we round to nearest even to match the run-time behavior.
+    --  Note that this applies to floating-point literals, not fixed-point
+    --  ones, even though their representation is also a universal real.
+ 
+    function Machine_Number
+      (Typ : Entity_Id;
+       Val : Ureal;
+       N   : Node_Id) return Ureal
+    is
+    begin
+       return Machine (Typ, Val, Round_Even, N);
+    end Machine_Number;
+ 
+    --------------------
     -- Not_Null_Range --
     --------------------
  
*************** package body Sem_Eval is
*** 6045,6051 ****
           --  No message if we are dealing with System.Priority values in
           --  CodePeer mode where the target runtime may have more priorities.
  
!          elsif not CodePeer_Mode or else Etype (N) /= RTE (RE_Priority) then
              --  Determine if the out-of-range violation constitutes a warning
              --  or an error based on context, according to RM 4.9 (34/3).
  
--- 6087,6095 ----
           --  No message if we are dealing with System.Priority values in
           --  CodePeer mode where the target runtime may have more priorities.
  
!          elsif not CodePeer_Mode
!            or else not Is_RTE (Etype (N), RE_Priority)
!          then
              --  Determine if the out-of-range violation constitutes a warning
              --  or an error based on context, according to RM 4.9 (34/3).
  
*************** package body Sem_Eval is
*** 6135,6141 ****
              end;
  
           else
!             --  TBD: Implement Interval_Lists for real types
  
              return False;
           end if;
--- 6179,6185 ----
              end;
  
           else
!             --  ??? Need to implement Interval_Lists for real types
  
              return False;
           end if;
*************** package body Sem_Eval is
*** 6393,6403 ****
  
     procedure Set_Checking_Potentially_Static_Expression (Value : Boolean) is
     begin
!       --  Verify that we're not currently checking for a potentially static
!       --  expression unless we're disabling such checking.
  
!       pragma Assert
!         (not Checking_For_Potentially_Static_Expression or else not Value);
  
        Checking_For_Potentially_Static_Expression := Value;
     end Set_Checking_Potentially_Static_Expression;
--- 6437,6446 ----
  
     procedure Set_Checking_Potentially_Static_Expression (Value : Boolean) is
     begin
!       --  Verify that we only start/stop checking for a potentially static
!       --  expression and do not start or stop it twice in a row.
  
!       pragma Assert (Checking_For_Potentially_Static_Expression /= Value);
  
        Checking_For_Potentially_Static_Expression := Value;
     end Set_Checking_Potentially_Static_Expression;
*************** package body Sem_Eval is
*** 6535,6541 ****
     --  match if they are set (unless checking an actual for a formal derived
     --  type). The use of 'Object_Size can cause this to be false even if the
     --  types would otherwise match in the Ada 95 RM sense, but this deviation
!    --  is adopted by AI12-059 which introduces Object_Size in Ada 2020.
  
     function Subtypes_Statically_Match
       (T1                      : Entity_Id;
--- 6578,6584 ----
     --  match if they are set (unless checking an actual for a formal derived
     --  type). The use of 'Object_Size can cause this to be false even if the
     --  types would otherwise match in the Ada 95 RM sense, but this deviation
!    --  is adopted by AI12-059 which introduces Object_Size in Ada 2022.
  
     function Subtypes_Statically_Match
       (T1                      : Entity_Id;
*************** package body Sem_Eval is
*** 7131,7136 ****
--- 7174,7211 ----
                        and then Compile_Time_Known_Value (Op2);
           end if;
  
+          if not Fold
+            and then not Is_Modular_Integer_Type (Etype (N))
+          then
+             case Nkind (N) is
+                when N_Op_And =>
+ 
+                   --  (False and XXX) = (XXX and False) = False
+ 
+                   Fold :=
+                     (Compile_Time_Known_Value (Op1)
+                        and then Is_False (Expr_Value (Op1))
+                        and then Side_Effect_Free (Op2))
+                       or else (Compile_Time_Known_Value (Op2)
+                                 and then Is_False (Expr_Value (Op2))
+                                 and then Side_Effect_Free (Op1));
+ 
+                when N_Op_Or =>
+ 
+                   --  (True and XXX) = (XXX and True) = True
+ 
+                   Fold :=
+                     (Compile_Time_Known_Value (Op1)
+                        and then Is_True (Expr_Value (Op1))
+                        and then Side_Effect_Free (Op2))
+                       or else (Compile_Time_Known_Value (Op2)
+                                 and then Is_True (Expr_Value (Op2))
+                                 and then Side_Effect_Free (Op1));
+ 
+                when others => null;
+             end case;
+          end if;
+ 
           return;
  
        --  Else result is static and foldable. Both operands are static, and
*************** package body Sem_Eval is
*** 7182,7188 ****
  
        --  Universal types have no range limits, so always in range
  
!       elsif Typ = Universal_Integer or else Typ = Universal_Real then
           return In_Range;
  
        --  Never known if not scalar type. Don't know if this can actually
--- 7257,7263 ----
  
        --  Universal types have no range limits, so always in range
  
!       elsif Is_Universal_Numeric_Type (Typ) then
           return In_Range;
  
        --  Never known if not scalar type. Don't know if this can actually
*************** package body Sem_Eval is
*** 7205,7223 ****
  
        elsif Compile_Time_Known_Value (N) then
           declare
!             Lo       : Node_Id;
!             Hi       : Node_Id;
! 
!             LB_Known : Boolean;
!             HB_Known : Boolean;
  
           begin
-             Lo := Type_Low_Bound  (Typ);
-             Hi := Type_High_Bound (Typ);
- 
-             LB_Known := Compile_Time_Known_Value (Lo);
-             HB_Known := Compile_Time_Known_Value (Hi);
- 
              --  Fixed point types should be considered as such only if flag
              --  Fixed_Int is set to False.
  
--- 7280,7291 ----
  
        elsif Compile_Time_Known_Value (N) then
           declare
!             Lo       : constant Node_Id := Type_Low_Bound (Typ);
!             Hi       : constant Node_Id := Type_High_Bound (Typ);
!             LB_Known : constant Boolean := Compile_Time_Known_Value (Lo);
!             HB_Known : constant Boolean := Compile_Time_Known_Value (Hi);
  
           begin
              --  Fixed point types should be considered as such only if flag
              --  Fixed_Int is set to False.
  
*************** package body Sem_Eval is
*** 7331,7343 ****
        procedure Why_Not_Static_List (L : List_Id) is
           N : Node_Id;
        begin
!          if Is_Non_Empty_List (L) then
!             N := First (L);
!             while Present (N) loop
!                Why_Not_Static (N);
!                Next (N);
!             end loop;
!          end if;
        end Why_Not_Static_List;
  
     --  Start of processing for Why_Not_Static
--- 7399,7409 ----
        procedure Why_Not_Static_List (L : List_Id) is
           N : Node_Id;
        begin
!          N := First (L);
!          while Present (N) loop
!             Why_Not_Static (N);
!             Next (N);
!          end loop;
        end Why_Not_Static_List;
  
     --  Start of processing for Why_Not_Static
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_eval.ads gcc-12.1.0/gcc/ada/sem_eval.ads
*** gcc-11.3.0/gcc/ada/sem_eval.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_eval.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Eval is
*** 113,119 ****
     --  The expression 'C' is not static in the technical RM sense, but for many
     --  simple record types, the size is in fact known at compile time. When we
     --  are trying to perform compile time constant folding (for instance for
!    --  expressions like C + 1, Is_Static_Expression or Is_OK_Static_Expression
     --  are not the right functions to test if folding is possible. Instead, we
     --  use Compile_Time_Known_Value. All static expressions that do not raise
     --  constraint error (i.e. those for which Is_OK_Static_Expression is true)
--- 113,119 ----
     --  The expression 'C' is not static in the technical RM sense, but for many
     --  simple record types, the size is in fact known at compile time. When we
     --  are trying to perform compile time constant folding (for instance for
!    --  expressions like C + 1), Is_Static_Expression or Is_OK_Static_Expression
     --  are not the right functions to test if folding is possible. Instead, we
     --  use Compile_Time_Known_Value. All static expressions that do not raise
     --  constraint error (i.e. those for which Is_OK_Static_Expression is true)
*************** package Sem_Eval is
*** 149,158 ****
     --
     --  Note: most cases of non-static context checks are handled within
     --  Sem_Eval itself, including all cases of expressions at the outer level
!    --  (i.e. those that are not a subexpression). Currently the only outside
!    --  customer for this procedure is Sem_Attr (because Eval_Attribute is
!    --  there). There is also one special case arising from ranges (see body of
!    --  Resolve_Range).
     --
     --  Note: this procedure is also called by GNATprove on real literals
     --  that are not sub-expressions of static expressions, to convert them to
--- 149,157 ----
     --
     --  Note: most cases of non-static context checks are handled within
     --  Sem_Eval itself, including all cases of expressions at the outer level
!    --  (i.e. those that are not a subexpression). The outside customers for
!    --  this procedure are Sem_Aggr, Sem_Attr (because Eval_Attribute is there)
!    --  and Sem_Res (for a special case arising from ranges, see Resolve_Range).
     --
     --  Note: this procedure is also called by GNATprove on real literals
     --  that are not sub-expressions of static expressions, to convert them to
*************** package Sem_Eval is
*** 237,251 ****
  
     --  WARNING: There is a matching C declaration of this subprogram in fe.h
  
-    function Compile_Time_Known_Value_Or_Aggr (Op : Node_Id) return Boolean;
-    --  Similar to Compile_Time_Known_Value, but also returns True if the value
-    --  is a compile-time-known aggregate, i.e. an aggregate all of whose
-    --  constituent expressions are either compile-time-known values (based on
-    --  calling Compile_Time_Known_Value) or compile-time-known aggregates.
-    --  Note that the aggregate could still involve run-time checks that might
-    --  fail (such as for subtype checks in component associations), but the
-    --  evaluation of the expressions themselves will not raise an exception.
- 
     function CRT_Safe_Compile_Time_Known_Value (Op : Node_Id) return Boolean;
     --  In the case of configurable run-times, there may be an issue calling
     --  Compile_Time_Known_Value with non-static expressions where the legality
--- 236,241 ----
*************** package Sem_Eval is
*** 487,492 ****
--- 477,489 ----
     --  it cannot be determined at compile time. Flag Fixed_Int is used as in
     --  routine Is_In_Range above.
  
+    function Machine_Number
+      (Typ : Entity_Id;
+       Val : Ureal;
+       N   : Node_Id) return Ureal;
+    --  Return the machine number of Typ corresponding to the specified Val as
+    --  per RM 4.9(38/2). N is a node only used to post warnings.
+ 
     function Not_Null_Range (Lo : Node_Id; Hi : Node_Id) return Boolean;
     --  Returns True if it can guarantee that Lo .. Hi is not a null range. If
     --  it cannot (because the value of Lo or Hi is not known at compile time)
*************** package Sem_Eval is
*** 556,563 ****
     --  messages must always point to the same location as the parent message.
  
     procedure Initialize;
!    --  Initializes the internal data structures. Must be called before each
!    --  separate main program unit (e.g. in a GNSA/ASIS context).
  
  private
     --  The Eval routines are all marked inline, since they are called once
--- 553,559 ----
     --  messages must always point to the same location as the parent message.
  
     procedure Initialize;
!    --  Initializes the internal data structures
  
  private
     --  The Eval routines are all marked inline, since they are called once
*************** private
*** 576,580 ****
--- 572,577 ----
     pragma Inline (Eval_Unchecked_Conversion);
  
     pragma Inline (Is_OK_Static_Expression);
+    pragma Inline (Machine_Number);
  
  end Sem_Eval;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_intr.adb gcc-12.1.0/gcc/ada/sem_intr.adb
*** gcc-11.3.0/gcc/ada/sem_intr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_intr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 25,45 ****
  
  --  Processing for intrinsic subprogram declarations
  
! with Atree;    use Atree;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Opt;      use Opt;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Eval; use Sem_Eval;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Ttypes;   use Ttypes;
! with Uintp;    use Uintp;
  
  package body Sem_Intr is
  
--- 25,49 ----
  
  --  Processing for intrinsic subprogram declarations
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Opt;            use Opt;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Ttypes;         use Ttypes;
! with Uintp;          use Uintp;
  
  package body Sem_Intr is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_intr.ads gcc-12.1.0/gcc/ada/sem_intr.ads
*** gcc-11.3.0/gcc/ada/sem_intr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_intr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_mech.adb gcc-12.1.0/gcc/ada/sem_mech.adb
*** gcc-11.3.0/gcc/ada/sem_mech.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_mech.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
***************
*** 23,36 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;   use Atree;
! with Einfo;   use Einfo;
! with Errout;  use Errout;
! with Namet;   use Namet;
! with Sem;     use Sem;
! with Sem_Aux; use Sem_Aux;
! with Sinfo;   use Sinfo;
! with Snames;  use Snames;
  
  package body Sem_Mech is
  
--- 23,39 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Namet;          use Namet;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Snames;         use Snames;
  
  package body Sem_Mech is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_mech.ads gcc-12.1.0/gcc/ada/sem_mech.ads
*** gcc-11.3.0/gcc/ada/sem_mech.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_mech.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1996-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_prag.adb gcc-12.1.0/gcc/ada/sem_prag.adb
*** gcc-11.3.0/gcc/ada/sem_prag.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_prag.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 29,95 ****
  --  to complete the syntax checks. Certain pragmas are handled partially or
  --  completely by the parser (see Par.Prag for further details).
  
! with Aspects;   use Aspects;
! with Atree;     use Atree;
! with Casing;    use Casing;
! with Checks;    use Checks;
! with Contracts; use Contracts;
! with Csets;     use Csets;
! with Debug;     use Debug;
! with Einfo;     use Einfo;
! with Elists;    use Elists;
! with Errout;    use Errout;
! with Exp_Dist;  use Exp_Dist;
! with Exp_Util;  use Exp_Util;
! with Expander;  use Expander;
! with Freeze;    use Freeze;
! with Ghost;     use Ghost;
! with GNAT_CUDA; use GNAT_CUDA;
! with Gnatvsn;   use Gnatvsn;
! with Lib;       use Lib;
! with Lib.Writ;  use Lib.Writ;
! with Lib.Xref;  use Lib.Xref;
! with Namet.Sp;  use Namet.Sp;
! with Nlists;    use Nlists;
! with Nmake;     use Nmake;
! with Output;    use Output;
! with Par_SCO;   use Par_SCO;
! with Restrict;  use Restrict;
! with Rident;    use Rident;
! with Rtsfind;   use Rtsfind;
! with Sem;       use Sem;
! with Sem_Aux;   use Sem_Aux;
! with Sem_Ch3;   use Sem_Ch3;
! 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_Disp;  use Sem_Disp;
! with Sem_Dist;  use Sem_Dist;
! with Sem_Elab;  use Sem_Elab;
! with Sem_Elim;  use Sem_Elim;
! with Sem_Eval;  use Sem_Eval;
! with Sem_Intr;  use Sem_Intr;
! with Sem_Mech;  use Sem_Mech;
! with Sem_Res;   use Sem_Res;
! with Sem_Type;  use Sem_Type;
! with Sem_Util;  use Sem_Util;
! with Sem_Warn;  use Sem_Warn;
! with Stand;     use Stand;
! with Sinfo;     use Sinfo;
! with Sinfo.CN;  use Sinfo.CN;
! with Sinput;    use Sinput;
! with Stringt;   use Stringt;
! with Stylesw;   use Stylesw;
  with Table;
! with Targparm;  use Targparm;
! with Tbuild;    use Tbuild;
  with Ttypes;
! with Uintp;     use Uintp;
! with Uname;     use Uname;
! with Urealp;    use Urealp;
! with Validsw;   use Validsw;
! with Warnsw;    use Warnsw;
  
  with System.Case_Util;
  
--- 29,100 ----
  --  to complete the syntax checks. Certain pragmas are handled partially or
  --  completely by the parser (see Par.Prag for further details).
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Checks;         use Checks;
! with Contracts;      use Contracts;
! with Csets;          use Csets;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Exp_Dist;       use Exp_Dist;
! with Exp_Util;       use Exp_Util;
! with Expander;       use Expander;
! with Freeze;         use Freeze;
! with Ghost;          use Ghost;
! with GNAT_CUDA;      use GNAT_CUDA;
! with Gnatvsn;        use Gnatvsn;
! with Lib;            use Lib;
! with Lib.Writ;       use Lib.Writ;
! with Lib.Xref;       use Lib.Xref;
! with Namet.Sp;       use Namet.Sp;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Output;         use Output;
! with Par_SCO;        use Par_SCO;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch3;        use Sem_Ch3;
! 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_Disp;       use Sem_Disp;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Elim;       use Sem_Elim;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Intr;       use Sem_Intr;
! with Sem_Mech;       use Sem_Mech;
! with Sem_Res;        use Sem_Res;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinfo.CN;       use Sinfo.CN;
! with Sinput;         use Sinput;
! with Stringt;        use Stringt;
! with Strub;          use Strub;
! with Stylesw;        use Stylesw;
  with Table;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
  with Ttypes;
! with Uintp;          use Uintp;
! with Uname;          use Uname;
! with Urealp;         use Urealp;
! with Validsw;        use Validsw;
! with Warnsw;         use Warnsw;
  
  with System.Case_Util;
  
*************** package body Sem_Prag is
*** 243,248 ****
--- 248,254 ----
     --    Constant_After_Elaboration
     --    Effective_Reads
     --    Effective_Writers
+    --    No_Caching
     --    Part_Of
     --  Find the first source declaration or statement found while traversing
     --  the previous node chain starting from pragma Prag. If flag Do_Checks is
*************** package body Sem_Prag is
*** 392,405 ****
              CC := Get_String_Char (Strval (N), J);
  
              if Opt.External_Name_Exp_Casing = Uppercase
!               and then CC >= Get_Char_Code ('a')
!               and then CC <= Get_Char_Code ('z')
              then
                 Store_String_Char (CC - 32);
  
              elsif Opt.External_Name_Exp_Casing = Lowercase
!               and then CC >= Get_Char_Code ('A')
!               and then CC <= Get_Char_Code ('Z')
              then
                 Store_String_Char (CC + 32);
  
--- 398,409 ----
              CC := Get_String_Char (Strval (N), J);
  
              if Opt.External_Name_Exp_Casing = Uppercase
!               and then CC in Get_Char_Code ('a') .. Get_Char_Code ('z')
              then
                 Store_String_Char (CC - 32);
  
              elsif Opt.External_Name_Exp_Casing = Lowercase
!               and then CC in Get_Char_Code ('A') .. Get_Char_Code ('Z')
              then
                 Store_String_Char (CC + 32);
  
*************** package body Sem_Prag is
*** 566,573 ****
           --  Check that the expression is a proper aggregate (no parentheses)
  
           if Paren_Count (CCases) /= 0 then
!             Error_Msg -- CODEFIX
!               ("redundant parentheses", First_Sloc (CCases));
           end if;
  
           --  Ensure that the formal parameters are visible when analyzing all
--- 570,577 ----
           --  Check that the expression is a proper aggregate (no parentheses)
  
           if Paren_Count (CCases) /= 0 then
!             Error_Msg_F -- CODEFIX
!               ("redundant parentheses", CCases);
           end if;
  
           --  Ensure that the formal parameters are visible when analyzing all
*************** package body Sem_Prag is
*** 717,725 ****
           elsif Ekind (Item_Id) = E_Constant then
              Add_Str_To_Name_Buffer ("constant");
  
!          elsif Ekind (Item_Id) in
!                  E_Generic_In_Out_Parameter | E_Generic_In_Parameter
!          then
              Add_Str_To_Name_Buffer ("generic parameter");
  
           elsif Is_Formal (Item_Id) then
--- 721,727 ----
           elsif Ekind (Item_Id) = E_Constant then
              Add_Str_To_Name_Buffer ("constant");
  
!          elsif Is_Formal_Object (Item_Id) then
              Add_Str_To_Name_Buffer ("generic parameter");
  
           elsif Is_Formal (Item_Id) then
*************** package body Sem_Prag is
*** 1136,1141 ****
--- 1138,1154 ----
                               (State_Id => Item_Id,
                                Ref      => Item);
                          end if;
+ 
+                      elsif Ekind (Item_Id) in E_Constant | E_Variable
+                        and then Present (Ultimate_Overlaid_Entity (Item_Id))
+                      then
+                         SPARK_Msg_NE
+                           ("overlaying object & cannot appear in Depends",
+                            Item, Item_Id);
+                         SPARK_Msg_NE
+                           ("\use the overlaid object & instead",
+                            Item, Ultimate_Overlaid_Entity (Item_Id));
+                         return;
                       end if;
  
                       --  When the item renames an entire object, replace the
*************** package body Sem_Prag is
*** 1282,1298 ****
             (Item_Is_Input  : out Boolean;
              Item_Is_Output : out Boolean)
           is
!             --  A constant or IN parameter of access-to-variable type should be
              --  handled like a variable, as the underlying memory pointed-to
              --  can be modified. Use Adjusted_Kind to do this adjustment.
  
              Adjusted_Kind : Entity_Kind := Ekind (Item_Id);
  
           begin
!             if Ekind (Item_Id) in E_Constant
!                                 | E_Generic_In_Parameter
!                                 | E_In_Parameter
                and then Is_Access_Variable (Etype (Item_Id))
              then
                 Adjusted_Kind := E_Variable;
              end if;
--- 1295,1316 ----
             (Item_Is_Input  : out Boolean;
              Item_Is_Output : out Boolean)
           is
!             --  A constant or an IN parameter of a procedure or a protected
!             --  entry, if it is of an access-to-variable type, should be
              --  handled like a variable, as the underlying memory pointed-to
              --  can be modified. Use Adjusted_Kind to do this adjustment.
  
              Adjusted_Kind : Entity_Kind := Ekind (Item_Id);
  
           begin
!             if (Ekind (Item_Id) in E_Constant | E_Generic_In_Parameter
!                   or else
!                   (Ekind (Item_Id) = E_In_Parameter
!                      and then Ekind (Scope (Item_Id))
!                                 not in E_Function | E_Generic_Function))
                and then Is_Access_Variable (Etype (Item_Id))
+               and then Ekind (Spec_Id) not in E_Function
+                                             | E_Generic_Function
              then
                 Adjusted_Kind := E_Variable;
              end if;
*************** package body Sem_Prag is
*** 1476,1483 ****
             (Item_Is_Input  : Boolean;
              Item_Is_Output : Boolean)
           is
-             Error_Msg : Name_Id;
- 
           begin
              Name_Len := 0;
  
--- 1494,1499 ----
*************** package body Sem_Prag is
*** 1490,1497 ****
                 Add_Str_To_Name_Buffer
                   (" & cannot appear in dependence relation");
  
!                Error_Msg := Name_Find;
!                SPARK_Msg_NE (Get_Name_String (Error_Msg), Item, Item_Id);
  
                 Error_Msg_Name_1 := Chars (Spec_Id);
                 SPARK_Msg_NE
--- 1506,1512 ----
                 Add_Str_To_Name_Buffer
                   (" & cannot appear in dependence relation");
  
!                SPARK_Msg_NE (To_String (Global_Name_Buffer), Item, Item_Id);
  
                 Error_Msg_Name_1 := Chars (Spec_Id);
                 SPARK_Msg_NE
*************** package body Sem_Prag is
*** 1520,1527 ****
                 end if;
  
                 Add_Str_To_Name_Buffer (" in dependence relation");
!                Error_Msg := Name_Find;
!                SPARK_Msg_NE (Get_Name_String (Error_Msg), Item, Item_Id);
              end if;
           end Role_Error;
  
--- 1535,1542 ----
                 end if;
  
                 Add_Str_To_Name_Buffer (" in dependence relation");
! 
!                SPARK_Msg_NE (To_String (Global_Name_Buffer), Item, Item_Id);
              end if;
           end Role_Error;
  
*************** package body Sem_Prag is
*** 1573,1580 ****
           -----------------
  
           procedure Usage_Error (Item_Id : Entity_Id) is
-             Error_Msg : Name_Id;
- 
           begin
              --  Input case
  
--- 1588,1593 ----
*************** package body Sem_Prag is
*** 1592,1599 ****
                    Add_Str_To_Name_Buffer
                      (" & is missing from input dependence list");
  
!                   Error_Msg := Name_Find;
!                   SPARK_Msg_NE (Get_Name_String (Error_Msg), N, Item_Id);
                    SPARK_Msg_NE
                      ("\add `null ='> &` dependency to ignore this input",
                       N, Item_Id);
--- 1605,1611 ----
                    Add_Str_To_Name_Buffer
                      (" & is missing from input dependence list");
  
!                   SPARK_Msg_NE (To_String (Global_Name_Buffer), N, Item_Id);
                    SPARK_Msg_NE
                      ("\add `null ='> &` dependency to ignore this input",
                       N, Item_Id);
*************** package body Sem_Prag is
*** 1608,1615 ****
                 Add_Str_To_Name_Buffer
                   (" & is missing from output dependence list");
  
!                Error_Msg := Name_Find;
!                SPARK_Msg_NE (Get_Name_String (Error_Msg), N, Item_Id);
              end if;
           end Usage_Error;
  
--- 1620,1626 ----
                 Add_Str_To_Name_Buffer
                   (" & is missing from output dependence list");
  
!                SPARK_Msg_NE (To_String (Global_Name_Buffer), N, Item_Id);
              end if;
           end Usage_Error;
  
*************** package body Sem_Prag is
*** 1672,1678 ****
                 --  States and global objects are not used properly only when
                 --  the subprogram is subject to pragma Global.
  
!                elsif Global_Seen then
                    Usage_Error (Item_Id);
                 end if;
              end if;
--- 1683,1697 ----
                 --  States and global objects are not used properly only when
                 --  the subprogram is subject to pragma Global.
  
!                elsif Global_Seen
!                  and then Ekind (Item_Id) in E_Abstract_State
!                                            | E_Constant
!                                            | E_Loop_Parameter
!                                            | E_Protected_Type
!                                            | E_Task_Type
!                                            | E_Variable
!                                            | Formal_Kind
!                then
                    Usage_Error (Item_Id);
                 end if;
              end if;
*************** package body Sem_Prag is
*** 2386,2391 ****
--- 2405,2421 ----
                 elsif Is_Formal_Object (Item_Id) then
                    null;
  
+                elsif Ekind (Item_Id) in E_Constant | E_Variable
+                  and then Present (Ultimate_Overlaid_Entity (Item_Id))
+                then
+                   SPARK_Msg_NE
+                     ("overlaying object & cannot appear in Global",
+                      Item, Item_Id);
+                   SPARK_Msg_NE
+                     ("\use the overlaid object & instead",
+                      Item, Ultimate_Overlaid_Entity (Item_Id));
+                   return;
+ 
                 --  The only legal references are those to abstract states,
                 --  objects and various kinds of constants (SPARK RM 6.1.4(4)).
  
*************** package body Sem_Prag is
*** 2432,2441 ****
                       SPARK_Msg_N ("\use its constituents instead", Item);
                       return;
  
!                   --  An external state cannot appear as a global item of a
!                   --  nonvolatile function (SPARK RM 7.1.3(8)).
  
                    elsif Is_External_State (Item_Id)
                      and then Ekind (Spec_Id) in E_Function | E_Generic_Function
                      and then not Is_Volatile_Function (Spec_Id)
                    then
--- 2462,2474 ----
                       SPARK_Msg_N ("\use its constituents instead", Item);
                       return;
  
!                   --  An external state which has Async_Writers or
!                   --  Effective_Reads enabled cannot appear as a global item
!                   --  of a nonvolatile function (SPARK RM 7.1.3(8)).
  
                    elsif Is_External_State (Item_Id)
+                     and then (Async_Writers_Enabled (Item_Id)
+                                or else Effective_Reads_Enabled (Item_Id))
                      and then Ekind (Spec_Id) in E_Function | E_Generic_Function
                      and then not Is_Volatile_Function (Spec_Id)
                    then
*************** package body Sem_Prag is
*** 2456,2472 ****
  
                 --  Constant related checks
  
!                elsif Ekind (Item_Id) = E_Constant
!                  and then not Is_Access_Type (Etype (Item_Id))
!                then
  
!                   --  Unless it is of an access type, a constant is a read-only
!                   --  item, therefore it cannot act as an output.
  
                    if Global_Mode in Name_In_Out | Name_Output then
!                      SPARK_Msg_NE
!                        ("constant & cannot act as output", Item, Item_Id);
!                      return;
                    end if;
  
                 --  Loop parameter related checks
--- 2489,2519 ----
  
                 --  Constant related checks
  
!                elsif Ekind (Item_Id) = E_Constant then
  
!                   --  Constant is a read-only item, therefore it cannot act as
!                   --  an output.
  
                    if Global_Mode in Name_In_Out | Name_Output then
! 
!                      --  Constant of an access-to-variable type is a read-write
!                      --  item in procedures, generic procedures, protected
!                      --  entries and tasks.
! 
!                      if Is_Access_Variable (Etype (Item_Id))
!                        and then (Ekind (Spec_Id) in E_Entry
!                                                   | E_Entry_Family
!                                                   | E_Procedure
!                                                   | E_Generic_Procedure
!                                                   | E_Task_Type
!                                  or else Is_Single_Task_Object (Spec_Id))
!                      then
!                         null;
!                      else
!                         SPARK_Msg_NE
!                           ("constant & cannot act as output", Item, Item_Id);
!                         return;
!                      end if;
                    end if;
  
                 --  Loop parameter related checks
*************** package body Sem_Prag is
*** 2633,2645 ****
                    Context := Anonymous_Object (Context);
                 end if;
  
!                if (Is_Subprogram (Context)
!                      or else Ekind (Context) = E_Task_Type
!                      or else Is_Single_Task_Object (Context))
!                  and then
!                   (Present (Get_Pragma (Context, Pragma_Global))
!                      or else
!                    Present (Get_Pragma (Context, Pragma_Refined_Global)))
                 then
                    Collect_Subprogram_Inputs_Outputs
                      (Subp_Id      => Context,
--- 2680,2688 ----
                    Context := Anonymous_Object (Context);
                 end if;
  
!                if Is_Subprogram_Or_Entry (Context)
!                  or else Ekind (Context) = E_Task_Type
!                  or else Is_Single_Task_Object (Context)
                 then
                    Collect_Subprogram_Inputs_Outputs
                      (Subp_Id      => Context,
*************** package body Sem_Prag is
*** 2648,2655 ****
                       Global_Seen  => Dummy);
  
                    --  The item is classified as In_Out or Output but appears as
!                   --  an Input in an enclosing subprogram or task unit (SPARK
!                   --  RM 6.1.4(12)).
  
                    if Appears_In (Inputs, Item_Id)
                      and then not Appears_In (Outputs, Item_Id)
--- 2691,2698 ----
                       Global_Seen  => Dummy);
  
                    --  The item is classified as In_Out or Output but appears as
!                   --  an Input or a formal parameter of mode IN in an enclosing
!                   --  subprogram or task unit (SPARK RM 6.1.4(13)).
  
                    if Appears_In (Inputs, Item_Id)
                      and then not Appears_In (Outputs, Item_Id)
*************** package body Sem_Prag is
*** 2658,2664 ****
                         ("global item & cannot have mode In_Out or Output",
                          Item, Item_Id);
  
!                      if Is_Subprogram (Context) then
                          SPARK_Msg_NE
                            (Fix_Msg (Subp_Id, "\item already appears as input "
                             & "of subprogram &"), Item, Context);
--- 2701,2707 ----
                         ("global item & cannot have mode In_Out or Output",
                          Item, Item_Id);
  
!                      if Is_Subprogram_Or_Entry (Context) then
                          SPARK_Msg_NE
                            (Fix_Msg (Subp_Id, "\item already appears as input "
                             & "of subprogram &"), Item, Context);
*************** package body Sem_Prag is
*** 2970,2975 ****
--- 3013,3028 ----
                 if Item_Id = Any_Id then
                    null;
  
+                elsif Ekind (Item_Id) in E_Constant | E_Variable
+                  and then Present (Ultimate_Overlaid_Entity (Item_Id))
+                then
+                   SPARK_Msg_NE
+                     ("overlaying object & cannot appear in Initializes",
+                      Item, Item_Id);
+                   SPARK_Msg_NE
+                     ("\use the overlaid object & instead",
+                      Item, Ultimate_Overlaid_Entity (Item_Id));
+ 
                 --  The state or variable must be declared in the visible
                 --  declarations of the package (SPARK RM 7.1.5(7)).
  
*************** package body Sem_Prag is
*** 3094,3102 ****
                          --  it is allowed for an initialization item to depend
                          --  on an input item.
  
!                         if Ekind (Input_Id) in E_Generic_In_Out_Parameter
!                                              | E_Generic_In_Parameter
!                         then
                             null;
  
                          elsif Ekind (Input_Id) in E_Constant | E_Variable
--- 3147,3153 ----
                          --  it is allowed for an initialization item to depend
                          --  on an input item.
  
!                         if Is_Formal_Object (Input_Id) then
                             null;
  
                          elsif Ekind (Input_Id) in E_Constant | E_Variable
*************** package body Sem_Prag is
*** 3114,3119 ****
--- 3165,3182 ----
                          end if;
                       end if;
  
+                      if Ekind (Input_Id) in E_Constant | E_Variable
+                        and then Present (Ultimate_Overlaid_Entity (Input_Id))
+                      then
+                         SPARK_Msg_NE
+                           ("overlaying object & cannot appear in Initializes",
+                            Input, Input_Id);
+                         SPARK_Msg_NE
+                           ("\use the overlaid object & instead",
+                            Input, Ultimate_Overlaid_Entity (Input_Id));
+                         return;
+                      end if;
+ 
                       --  Detect a duplicate use of the same input item
                       --  (SPARK RM 7.1.5(5)).
  
*************** package body Sem_Prag is
*** 3388,3396 ****
  
                 Parent_Unit := Pack_Id;
                 while Present (Parent_Unit) loop
!                   exit when
!                     Private_Present
!                       (Parent (Unit_Declaration_Node (Parent_Unit)));
                    Parent_Unit := Scope (Parent_Unit);
                 end loop;
  
--- 3451,3457 ----
  
                 Parent_Unit := Pack_Id;
                 while Present (Parent_Unit) loop
!                   exit when Is_Private_Library_Unit (Parent_Unit);
                    Parent_Unit := Scope (Parent_Unit);
                 end loop;
  
*************** package body Sem_Prag is
*** 3438,3454 ****
           --  encapsulating state must be declared in the same package.
  
           elsif Placement = Private_State_Space then
-             if Scope (Encap_Id) /= Pack_Id then
-                SPARK_Msg_NE
-                  ("indicator Part_Of must denote an abstract state of "
-                   & "package & (SPARK RM 7.2.6(2))", Indic, Pack_Id);
  
!                Error_Msg_Name_1 := Chars (Pack_Id);
!                SPARK_Msg_NE
!                  ("\& is declared in the private part of package %",
!                   Indic, Item_Id);
!                return;
!             end if;
  
           --  Items declared in the body state space of a package do not need
           --  Part_Of indicators as the refinement has already been seen.
--- 3499,3578 ----
           --  encapsulating state must be declared in the same package.
  
           elsif Placement = Private_State_Space then
  
!             --  In the case of the abstract state of a nongeneric private
!             --  child package, it may be encapsulated in the state of a
!             --  public descendant of its parent package.
! 
!             declare
!                function Is_Public_Descendant
!                  (Child, Ancestor : Entity_Id)
!                   return Boolean;
!                --  Return True if Child is a public descendant of Pack
! 
!                --------------------------
!                -- Is_Public_Descendant --
!                --------------------------
! 
!                function Is_Public_Descendant
!                  (Child, Ancestor : Entity_Id)
!                   return Boolean
!                is
!                   P : Entity_Id := Child;
!                begin
!                   while Is_Child_Unit (P)
!                     and then not Is_Private_Library_Unit (P)
!                   loop
!                      if Scope (P) = Ancestor then
!                         return True;
!                      end if;
! 
!                      P := Scope (P);
!                   end loop;
! 
!                   return False;
!                end Is_Public_Descendant;
! 
!                --  Local variables
! 
!                Immediate_Pack_Id : constant Entity_Id := Scope (Item_Id);
! 
!                Is_State_Of_Private_Child : constant Boolean :=
!                  Is_Child_Unit (Immediate_Pack_Id)
!                    and then not Is_Generic_Unit (Immediate_Pack_Id)
!                    and then Is_Private_Descendant (Immediate_Pack_Id);
! 
!                Is_OK_Through_Sibling : Boolean := False;
! 
!             begin
!                if Ekind (Item_Id) = E_Abstract_State
!                  and then Is_State_Of_Private_Child
!                  and then Is_Public_Descendant (Scope (Encap_Id), Pack_Id)
!                then
!                   Is_OK_Through_Sibling := True;
!                end if;
! 
!                if Scope (Encap_Id) /= Pack_Id
!                  and then not Is_OK_Through_Sibling
!                then
!                   if Is_State_Of_Private_Child then
!                      SPARK_Msg_NE
!                        ("indicator Part_Of must denote abstract state of & "
!                         & "or of its public descendant "
!                         & "(SPARK RM 7.2.6(3))", Indic, Pack_Id);
!                   else
!                      SPARK_Msg_NE
!                        ("indicator Part_Of must denote an abstract state of "
!                         & "package & (SPARK RM 7.2.6(2))", Indic, Pack_Id);
!                   end if;
! 
!                   Error_Msg_Name_1 := Chars (Pack_Id);
!                   SPARK_Msg_NE
!                     ("\& is declared in the private part of package %",
!                      Indic, Item_Id);
!                   return;
!                end if;
!             end;
  
           --  Items declared in the body state space of a package do not need
           --  Part_Of indicators as the refinement has already been seen.
*************** package body Sem_Prag is
*** 4074,4082 ****
  
        procedure Check_Static_Constraint (Constr : Node_Id);
        --  Constr is a constraint from an N_Subtype_Indication node from a
!       --  component constraint in an Unchecked_Union type. This routine checks
!       --  that the constraint is static as required by the restrictions for
!       --  Unchecked_Union.
  
        procedure Check_Valid_Configuration_Pragma;
        --  Legality checks for placement of a configuration pragma
--- 4198,4206 ----
  
        procedure Check_Static_Constraint (Constr : Node_Id);
        --  Constr is a constraint from an N_Subtype_Indication node from a
!       --  component constraint in an Unchecked_Union type, a range, or a
!       --  discriminant association. This routine checks that the constraint
!       --  is static as required by the restrictions for Unchecked_Union.
  
        procedure Check_Valid_Configuration_Pragma;
        --  Legality checks for placement of a configuration pragma
*************** package body Sem_Prag is
*** 4811,4820 ****
           then
              null;
  
!          --  For Ada 2020, pre/postconditions can appear on formal subprograms
  
           elsif Nkind (Subp_Decl) = N_Formal_Concrete_Subprogram_Declaration
!             and then Ada_Version >= Ada_2020
           then
              null;
  
--- 4935,4944 ----
           then
              null;
  
!          --  For Ada 2022, pre/postconditions can appear on formal subprograms
  
           elsif Nkind (Subp_Decl) = N_Formal_Concrete_Subprogram_Declaration
!             and then Ada_Version >= Ada_2022
           then
              null;
  
*************** package body Sem_Prag is
*** 6451,6461 ****
        -- Check_Static_Constraint --
        -----------------------------
  
-       --  Note: for convenience in writing this procedure, in addition to
-       --  the officially (i.e. by spec) allowed argument which is always a
-       --  constraint, it also allows ranges and discriminant associations.
-       --  Above is not clear ???
- 
        procedure Check_Static_Constraint (Constr : Node_Id) is
  
           procedure Require_Static (E : Node_Id);
--- 6575,6580 ----
*************** package body Sem_Prag is
*** 6552,6558 ****
  
              elsif Nkind (Parent_Node) = N_Compilation_Unit_Aux then
                 if Plist /= Pragmas_After (Parent_Node) then
!                   Pragma_Misplaced;
  
                 elsif Arg_Count = 0 then
                    Error_Pragma
--- 6671,6679 ----
  
              elsif Nkind (Parent_Node) = N_Compilation_Unit_Aux then
                 if Plist /= Pragmas_After (Parent_Node) then
!                   Error_Pragma
!                     ("pragma% misplaced, must be inside or after the "
!                      & "compilation unit");
  
                 elsif Arg_Count = 0 then
                    Error_Pragma
*************** package body Sem_Prag is
*** 6619,6646 ****
                    Unit_Node := Unit_Declaration_Node (Current_Scope);
                    Unit_Kind := Nkind (Unit_Node);
  
!                   if Nkind (Parent (Unit_Node)) /= N_Compilation_Unit then
!                      Pragma_Misplaced;
  
                    elsif Unit_Kind = N_Subprogram_Body
                      and then not Acts_As_Spec (Unit_Node)
                    then
!                      Pragma_Misplaced;
  
                    elsif Nkind (Parent_Node) = N_Package_Body then
!                      Pragma_Misplaced;
  
                    elsif Nkind (Parent_Node) = N_Package_Specification
                      and then Plist = Private_Declarations (Parent_Node)
                    then
!                      Pragma_Misplaced;
  
!                   elsif (Nkind (Parent_Node) = N_Generic_Package_Declaration
!                           or else Nkind (Parent_Node) =
!                                              N_Generic_Subprogram_Declaration)
                      and then Plist = Generic_Formal_Declarations (Parent_Node)
                    then
!                      Pragma_Misplaced;
  
                    elsif Arg_Count > 0 then
                       Analyze (Get_Pragma_Arg (Arg1));
--- 6740,6775 ----
                    Unit_Node := Unit_Declaration_Node (Current_Scope);
                    Unit_Kind := Nkind (Unit_Node);
  
!                   if Unit_Node = Standard_Package_Node then
!                      Error_Pragma
!                        ("pragma% misplaced, must be inside or after the "
!                         & "compilation unit");
! 
!                   elsif Nkind (Parent (Unit_Node)) /= N_Compilation_Unit then
!                      Error_Pragma
!                        ("pragma% misplaced, must be on library unit");
  
                    elsif Unit_Kind = N_Subprogram_Body
                      and then not Acts_As_Spec (Unit_Node)
                    then
!                      Error_Pragma
!                        ("pragma% misplaced, must be on the subprogram spec");
  
                    elsif Nkind (Parent_Node) = N_Package_Body then
!                      Error_Pragma
!                        ("pragma% misplaced, must be on the package spec");
  
                    elsif Nkind (Parent_Node) = N_Package_Specification
                      and then Plist = Private_Declarations (Parent_Node)
                    then
!                      Error_Pragma
!                        ("pragma% misplaced, must be in the public part");
  
!                   elsif Nkind (Parent_Node) in N_Generic_Declaration
                      and then Plist = Generic_Formal_Declarations (Parent_Node)
                    then
!                      Error_Pragma
!                        ("pragma% misplaced, must not be in formal part");
  
                    elsif Arg_Count > 0 then
                       Analyze (Get_Pragma_Arg (Arg1));
*************** package body Sem_Prag is
*** 6892,6898 ****
           Proc : Entity_Id := Empty;
  
        begin
!          --  The body of this procedure needs some comments ???
  
           if not Is_Entity_Name (Name) then
              Error_Pragma_Arg
--- 7021,7027 ----
           Proc : Entity_Id := Empty;
  
        begin
!          --  Perform sanity checks on Name
  
           if not Is_Entity_Name (Name) then
              Error_Pragma_Arg
*************** package body Sem_Prag is
*** 6908,6913 ****
--- 7037,7045 ----
                   ("argument of pragma% must be parameterless procedure", Arg);
              end if;
  
+          --  Otherwise, search through interpretations looking for one which
+          --  has no parameters.
+ 
           else
              declare
                 Found : Boolean := False;
*************** package body Sem_Prag is
*** 6922,6934 ****
                    if Ekind (Proc) = E_Procedure
                      and then No (First_Formal (Proc))
                    then
                       if not Found then
                          Found := True;
                          Set_Entity (Name, Proc);
                          Set_Is_Overloaded (Name, False);
                       else
                          Error_Pragma_Arg
!                           ("ambiguous handler name for pragma% ", Arg);
                       end if;
                    end if;
  
--- 7054,7073 ----
                    if Ekind (Proc) = E_Procedure
                      and then No (First_Formal (Proc))
                    then
+                      --  We found an interpretation, note it and continue
+                      --  looking looking to verify it is unique.
+ 
                       if not Found then
                          Found := True;
                          Set_Entity (Name, Proc);
                          Set_Is_Overloaded (Name, False);
+ 
+                      --  Two procedures with the same name, log an error
+                      --  since the name is ambiguous.
+ 
                       else
                          Error_Pragma_Arg
!                           ("ambiguous handler name for pragma%", Arg);
                       end if;
                    end if;
  
*************** package body Sem_Prag is
*** 6936,6944 ****
--- 7075,7087 ----
                 end loop;
  
                 if not Found then
+                   --  Issue an error if we haven't found a suitable match for
+                   --  Name.
+ 
                    Error_Pragma_Arg
                      ("argument of pragma% must be parameterless procedure",
                       Arg);
+ 
                 else
                    Proc := Entity (Name);
                 end if;
*************** package body Sem_Prag is
*** 6970,6976 ****
  
           if From_Aspect_Specification (N) then
  
!             --  Change appearence of "pragma" in message to "aspect"
  
              J := Res'First;
              while J <= Res_Last - 5 loop
--- 7113,7119 ----
  
           if From_Aspect_Specification (N) then
  
!             --  Change appearance of "pragma" in message to "aspect"
  
              J := Res'First;
              while J <= Res_Last - 5 loop
*************** package body Sem_Prag is
*** 7257,7263 ****
        procedure Process_Atomic_Independent_Shared_Volatile is
           procedure Check_Full_Access_Only (Ent : Entity_Id);
           --  Apply legality checks to type or object Ent subject to the
!          --  Full_Access_Only aspect in Ada 2020 (RM C.6(8.2)).
  
           procedure Mark_Component_Or_Object (Ent : Entity_Id);
           --  Appropriately set flags on the given entity, either an array or
--- 7400,7406 ----
        procedure Process_Atomic_Independent_Shared_Volatile is
           procedure Check_Full_Access_Only (Ent : Entity_Id);
           --  Apply legality checks to type or object Ent subject to the
!          --  Full_Access_Only aspect in Ada 2022 (RM C.6(8.2)).
  
           procedure Mark_Component_Or_Object (Ent : Entity_Id);
           --  Appropriately set flags on the given entity, either an array or
*************** package body Sem_Prag is
*** 7429,7435 ****
              --  Attribute belongs on the base type. If the view of the type is
              --  currently private, it also belongs on the underlying type.
  
!             --  In Ada 2020, the pragma can apply to a formal type, for which
              --  there may be no underlying type.
  
              if Prag_Id = Pragma_Atomic
--- 7572,7578 ----
              --  Attribute belongs on the base type. If the view of the type is
              --  currently private, it also belongs on the underlying type.
  
!             --  In Ada 2022, the pragma can apply to a formal type, for which
              --  there may be no underlying type.
  
              if Prag_Id = Pragma_Atomic
*************** package body Sem_Prag is
*** 7505,7511 ****
              end if;
  
              if not Has_Alignment_Clause (Ent) then
!                Set_Alignment (Ent, Uint_0);
              end if;
           end Set_Atomic_VFA;
  
--- 7648,7654 ----
              end if;
  
              if not Has_Alignment_Clause (Ent) then
!                Reinit_Alignment (Ent);
              end if;
           end Set_Atomic_VFA;
  
*************** package body Sem_Prag is
*** 7540,7553 ****
  
           Check_Duplicate_Pragma (E);
  
!          --  Check the constraints of Full_Access_Only in Ada 2020. Note that
           --  they do not apply to GNAT's Volatile_Full_Access because 1) this
           --  aspect subsumes the Volatile aspect and 2) nesting is supported
           --  for this aspect and the outermost enclosing VFA object prevails.
  
           --  Note also that we used to forbid specifying both Atomic and VFA on
           --  the same type or object, but the restriction has been lifted in
!          --  light of the semantics of Full_Access_Only and Atomic in Ada 2020.
  
           if Prag_Id = Pragma_Volatile_Full_Access
             and then From_Aspect_Specification (N)
--- 7683,7696 ----
  
           Check_Duplicate_Pragma (E);
  
!          --  Check the constraints of Full_Access_Only in Ada 2022. Note that
           --  they do not apply to GNAT's Volatile_Full_Access because 1) this
           --  aspect subsumes the Volatile aspect and 2) nesting is supported
           --  for this aspect and the outermost enclosing VFA object prevails.
  
           --  Note also that we used to forbid specifying both Atomic and VFA on
           --  the same type or object, but the restriction has been lifted in
!          --  light of the semantics of Full_Access_Only and Atomic in Ada 2022.
  
           if Prag_Id = Pragma_Volatile_Full_Access
             and then From_Aspect_Specification (N)
*************** package body Sem_Prag is
*** 7682,7692 ****
  
           if Compile_Time_Known_Value (Arg1x) then
              Validate_Compile_Time_Warning_Or_Error (N, Sloc (Arg1));
           else
              while Present (P) and then Nkind (P) not in N_Generic_Declaration
              loop
!                if Nkind (P) in N_Package_Body | N_Subprogram_Body then
!                   P := Corresponding_Spec (P);
                 else
                    P := Parent (P);
                 end if;
--- 7825,7839 ----
  
           if Compile_Time_Known_Value (Arg1x) then
              Validate_Compile_Time_Warning_Or_Error (N, Sloc (Arg1));
+ 
           else
              while Present (P) and then Nkind (P) not in N_Generic_Declaration
              loop
!                if (Nkind (P) = N_Subprogram_Body and then not Acts_As_Spec (P))
!                  or else Nkind (P) = N_Package_Body
!                then
!                   P := Parent (Corresponding_Spec (P));
! 
                 else
                    P := Parent (P);
                 end if;
*************** package body Sem_Prag is
*** 9126,9132 ****
  
              Def_Id := Entity (Def_Id);
              Kill_Size_Check_Code (Def_Id);
!             Note_Possible_Modification (Get_Pragma_Arg (Arg1), Sure => False);
  
           else
              Process_Convention (C, Def_Id);
--- 9273,9282 ----
  
              Def_Id := Entity (Def_Id);
              Kill_Size_Check_Code (Def_Id);
!             if Ekind (Def_Id) /= E_Constant then
!                Note_Possible_Modification
!                  (Get_Pragma_Arg (Arg1), Sure => False);
!             end if;
  
           else
              Process_Convention (C, Def_Id);
*************** package body Sem_Prag is
*** 9136,9142 ****
  
              Mark_Ghost_Pragma (N, Def_Id);
              Kill_Size_Check_Code (Def_Id);
!             Note_Possible_Modification (Get_Pragma_Arg (Arg2), Sure => False);
           end if;
  
           --  Various error checks
--- 9286,9295 ----
  
              Mark_Ghost_Pragma (N, Def_Id);
              Kill_Size_Check_Code (Def_Id);
!             if Ekind (Def_Id) /= E_Constant then
!                Note_Possible_Modification
!                  (Get_Pragma_Arg (Arg2), Sure => False);
!             end if;
           end if;
  
           --  Various error checks
*************** package body Sem_Prag is
*** 9241,9247 ****
                 --  just the same scope). If the pragma comes from an aspect
                 --  specification we know that it is part of the declaration.
  
!                elsif Parent (Unit_Declaration_Node (Def_Id)) /= Parent (N)
                   and then Nkind (Parent (N)) /= N_Compilation_Unit_Aux
                   and then not From_Aspect_Specification (N)
                 then
--- 9394,9402 ----
                 --  just the same scope). If the pragma comes from an aspect
                 --  specification we know that it is part of the declaration.
  
!                elsif (No (Unit_Declaration_Node (Def_Id))
!                         or else Parent (Unit_Declaration_Node (Def_Id)) /=
!                                 Parent (N))
                   and then Nkind (Parent (N)) /= N_Compilation_Unit_Aux
                   and then not From_Aspect_Specification (N)
                 then
*************** package body Sem_Prag is
*** 9467,9473 ****
  
              Process_Import_Predefined_Type;
  
!          else
              if From_Aspect_Specification (N) then
                 Error_Pragma_Arg
                    ("entity for aspect% must be object, subprogram "
--- 9622,9632 ----
  
              Process_Import_Predefined_Type;
  
!          --  Emit an error unless Relaxed_RM_Semantics since some legacy Ada
!          --  compilers may accept more cases, e.g. JGNAT allowed importing
!          --  a Java package.
! 
!          elsif not Relaxed_RM_Semantics then
              if From_Aspect_Specification (N) then
                 Error_Pragma_Arg
                    ("entity for aspect% must be object, subprogram "
*************** package body Sem_Prag is
*** 9832,9838 ****
              --  inlineable either.
  
              elsif Is_Generic_Instance (Subp)
!               or else Nkind (Parent (Parent (Subp))) = N_Subprogram_Declaration
              then
                 null;
  
--- 9991,9997 ----
              --  inlineable either.
  
              elsif Is_Generic_Instance (Subp)
!               or else Parent_Kind (Parent (Subp)) = N_Subprogram_Declaration
              then
                 null;
  
*************** package body Sem_Prag is
*** 9878,9884 ****
                 if In_Same_Source_Unit (Subp, Inner_Subp) then
                    Set_Inline_Flags (Inner_Subp);
  
!                   Decl := Parent (Parent (Inner_Subp));
  
                    if Nkind (Decl) = N_Subprogram_Declaration
                      and then Present (Corresponding_Body (Decl))
--- 10037,10047 ----
                 if In_Same_Source_Unit (Subp, Inner_Subp) then
                    Set_Inline_Flags (Inner_Subp);
  
!                   if Present (Parent (Inner_Subp)) then
!                      Decl := Parent (Parent (Inner_Subp));
!                   else
!                      Decl := Empty;
!                   end if;
  
                    if Nkind (Decl) = N_Subprogram_Declaration
                      and then Present (Corresponding_Body (Decl))
*************** package body Sem_Prag is
*** 10356,10361 ****
--- 10519,10567 ----
           Expr  : Node_Id;
           Val   : Uint;
  
+          procedure Process_No_Specification_of_Aspect;
+          --  Process the No_Specification_of_Aspect restriction
+ 
+          procedure Process_No_Use_Of_Attribute;
+          --  Process the No_Use_Of_Attribute restriction
+ 
+          ----------------------------------------
+          -- Process_No_Specification_of_Aspect --
+          ----------------------------------------
+ 
+          procedure Process_No_Specification_of_Aspect is
+             Name : constant Name_Id := Chars (Expr);
+          begin
+             if Nkind (Expr) = N_Identifier
+                and then Is_Aspect_Id (Name)
+             then
+                Set_Restriction_No_Specification_Of_Aspect (Expr, Warn);
+             else
+                Bad_Aspect (Expr, Name, Warn => True);
+ 
+                raise Pragma_Exit;
+             end if;
+          end Process_No_Specification_of_Aspect;
+ 
+          ---------------------------------
+          -- Process_No_Use_Of_Attribute --
+          ---------------------------------
+ 
+          procedure Process_No_Use_Of_Attribute is
+             Name : constant Name_Id := Chars (Expr);
+          begin
+             if Nkind (Expr) = N_Identifier
+                and then Is_Attribute_Name (Name)
+             then
+                Set_Restriction_No_Use_Of_Attribute (Expr, Warn);
+             else
+                Bad_Attribute (Expr, Name, Warn => True);
+             end if;
+ 
+          end Process_No_Use_Of_Attribute;
+ 
+       --  Start of processing for Process_Restrictions_Or_Restriction_Warnings
+ 
        begin
           --  Ignore all Restrictions pragmas in CodePeer mode
  
*************** package body Sem_Prag is
*** 10461,10466 ****
--- 10667,10707 ----
                       Add_To_Config_Boolean_Restrictions (No_Elaboration_Code);
                    end if;
  
+                --  Special processing for No_Dynamic_Accessibility_Checks to
+                --  disallow exclusive specification in a body or subunit.
+ 
+                elsif R_Id = No_Dynamic_Accessibility_Checks
+                  --  Check if the restriction is within configuration pragma
+                  --  in a similar way to No_Elaboration_Code.
+ 
+                  and then not (Current_Sem_Unit = Main_Unit
+                                 or else In_Extended_Main_Source_Unit (N))
+ 
+                  and then Nkind (Unit (Parent (N))) = N_Compilation_Unit
+ 
+                  and then (Nkind (Unit (Parent (N))) = N_Package_Body
+                             or else Nkind (Unit (Parent (N))) = N_Subunit)
+ 
+                  and then not Restriction_Active
+                                 (No_Dynamic_Accessibility_Checks)
+                then
+                   Error_Msg_N
+                     ("invalid specification of " &
+                      """No_Dynamic_Accessibility_Checks""", N);
+ 
+                   if Nkind (Unit (Parent (N))) = N_Package_Body then
+                      Error_Msg_N
+                        ("\restriction cannot be specified in a package " &
+                          "body", N);
+ 
+                   elsif Nkind (Unit (Parent (N))) = N_Subunit then
+                      Error_Msg_N
+                        ("\restriction cannot be specified in a subunit", N);
+                   end if;
+ 
+                   Error_Msg_N
+                     ("\unless also specified in spec", N);
+ 
                 --  Special processing for No_Tasking restriction (not just a
                 --  warning) when it appears as a configuration pragma.
  
*************** package body Sem_Prag is
*** 10545,10578 ****
              --  Case of No_Specification_Of_Aspect => aspect-identifier
  
              elsif Id = Name_No_Specification_Of_Aspect then
!                declare
!                   A_Id : Aspect_Id;
! 
!                begin
!                   if Nkind (Expr) /= N_Identifier then
!                      A_Id := No_Aspect;
!                   else
!                      A_Id := Get_Aspect_Id (Chars (Expr));
!                   end if;
! 
!                   if A_Id = No_Aspect then
!                      Error_Pragma_Arg ("invalid restriction name", Arg);
!                   else
!                      Set_Restriction_No_Specification_Of_Aspect (Expr, Warn);
!                   end if;
!                end;
  
              --  Case of No_Use_Of_Attribute => attribute-identifier
  
              elsif Id = Name_No_Use_Of_Attribute then
!                if Nkind (Expr) /= N_Identifier
!                  or else not Is_Attribute_Name (Chars (Expr))
!                then
!                   Error_Msg_N ("unknown attribute name??", Expr);
! 
!                else
!                   Set_Restriction_No_Use_Of_Attribute (Expr, Warn);
!                end if;
  
              --  Case of No_Use_Of_Entity => fully-qualified-name
  
--- 10786,10797 ----
              --  Case of No_Specification_Of_Aspect => aspect-identifier
  
              elsif Id = Name_No_Specification_Of_Aspect then
!                Process_No_Specification_of_Aspect;
  
              --  Case of No_Use_Of_Attribute => attribute-identifier
  
              elsif Id = Name_No_Use_Of_Attribute then
!                Process_No_Use_Of_Attribute;
  
              --  Case of No_Use_Of_Entity => fully-qualified-name
  
*************** package body Sem_Prag is
*** 10868,10875 ****
        procedure Record_Independence_Check (N : Node_Id; E : Entity_Id) is
           pragma Unreferenced (N, E);
        begin
!          --  For GCC back ends the validation is done a priori
!          --  ??? This code is dead, might be useful in the future
  
           --  if not AAMP_On_Target then
           --     return;
--- 11087,11094 ----
        procedure Record_Independence_Check (N : Node_Id; E : Entity_Id) is
           pragma Unreferenced (N, E);
        begin
!          --  For GCC back ends the validation is done a priori. This code is
!          --  dead, but might be useful in the future.
  
           --  if not AAMP_On_Target then
           --     return;
*************** package body Sem_Prag is
*** 10941,10950 ****
              end if;
           end if;
  
-          if Warn_On_Export_Import and then Is_Type (E) then
-             Error_Msg_NE ("exporting a type has no effect?x?", Arg, E);
-          end if;
- 
           if Warn_On_Export_Import and Inside_A_Generic then
              Error_Msg_NE
                ("all instances of& will have the same external name?x?",
--- 11160,11165 ----
*************** package body Sem_Prag is
*** 11337,11343 ****
                 Warn    => Treat_Restrictions_As_Warnings,
                 Profile => Ravenscar);
  
!             --  Set the following restriction which was added to Ada 2020,
              --  but as a binding interpretation:
              --     No_Dependence => Ada.Synchronous_Barriers
              --  for Ravenscar (and therefore for Ravenscar variants) but not
--- 11552,11558 ----
                 Warn    => Treat_Restrictions_As_Warnings,
                 Profile => Ravenscar);
  
!             --  Set the following restriction which was added to Ada 2022,
              --  but as a binding interpretation:
              --     No_Dependence => Ada.Synchronous_Barriers
              --  for Ravenscar (and therefore for Ravenscar variants) but not
*************** package body Sem_Prag is
*** 11369,11375 ****
  
        Check_Restriction_No_Use_Of_Pragma (N);
  
!       if Get_Aspect_Id (Chars (Pragma_Identifier (N))) /= No_Aspect then
           --  6.1/3 No_Specification_of_Aspect: Identifies an aspect for which
           --    no aspect_specification, attribute_definition_clause, or pragma
           --    is given.
--- 11584,11590 ----
  
        Check_Restriction_No_Use_Of_Pragma (N);
  
!       if Is_Aspect_Id (Chars (Pragma_Identifier (N))) then
           --  6.1/3 No_Specification_of_Aspect: Identifies an aspect for which
           --    no aspect_specification, attribute_definition_clause, or pragma
           --    is given.
*************** package body Sem_Prag is
*** 11981,11987 ****
  
                    Set_Comes_From_Source   (State_Id, not Is_Null);
                    Set_Parent              (State_Id, State);
!                   Set_Ekind               (State_Id, E_Abstract_State);
                    Set_Etype               (State_Id, Standard_Void_Type);
                    Set_Encapsulating_State (State_Id, Empty);
  
--- 12196,12202 ----
  
                    Set_Comes_From_Source   (State_Id, not Is_Null);
                    Set_Parent              (State_Id, State);
!                   Mutate_Ekind            (State_Id, E_Abstract_State);
                    Set_Etype               (State_Id, Standard_Void_Type);
                    Set_Encapsulating_State (State_Id, Empty);
  
*************** package body Sem_Prag is
*** 12532,12557 ****
           end;
  
           --------------
!          -- Ada_2020 --
           --------------
  
!          --  pragma Ada_2020;
  
           --  Note: this pragma also has some specific processing in Par.Prag
!          --  because we want to set the Ada 2020 version mode during parsing.
  
!          when Pragma_Ada_2020 =>
              GNAT_Pragma;
  
!             Check_Arg_Count (0);
  
!             Check_Valid_Configuration_Pragma;
  
!             --  Now set appropriate Ada mode
  
!             Ada_Version          := Ada_2020;
!             Ada_Version_Explicit := Ada_2020;
!             Ada_Version_Pragma   := N;
  
           -------------------------------------
           -- Aggregate_Individually_Assign --
--- 12747,12811 ----
           end;
  
           --------------
!          -- Ada_2022 --
           --------------
  
!          --  pragma Ada_2022;
!          --  pragma Ada_2022 (LOCAL_NAME):
  
           --  Note: this pragma also has some specific processing in Par.Prag
!          --  because we want to set the Ada 2022 version mode during parsing.
  
!          --  The one argument form is used for managing the transition from Ada
!          --  2012 to Ada 2022 in the run-time library. If an entity is marked
!          --  as Ada_2022 only, then referencing the entity in any pre-Ada_2022
!          --  mode will generate a warning;for calls to Ada_2022 only primitives
!          --  that require overriding an error will be reported. In addition, in
!          --  any pre-Ada_2022 mode, a preference rule is established which does
!          --  not choose such an entity unless it is unambiguously specified.
!          --  This avoids extra subprograms marked this way from generating
!          --  ambiguities in otherwise legal pre-Ada 2022 programs. The one
!          --  argument form is intended for exclusive use in the GNAT run-time
!          --  library.
! 
!          when Pragma_Ada_2022 =>
!          declare
!             E_Id : Node_Id;
! 
!          begin
              GNAT_Pragma;
  
!             if Arg_Count = 1 then
!                Check_Arg_Is_Local_Name (Arg1);
!                E_Id := Get_Pragma_Arg (Arg1);
  
!                if Etype (E_Id) = Any_Type then
!                   return;
!                end if;
  
!                Set_Is_Ada_2022_Only (Entity (E_Id));
!                Record_Rep_Item (Entity (E_Id), N);
  
!             else
!                Check_Arg_Count (0);
! 
!                --  For Ada_2022 we unconditionally enforce the documented
!                --  configuration pragma placement, since we do not want to
!                --  tolerate mixed modes in a unit involving Ada 2022. That
!                --  would cause real difficulties for those cases where there
!                --  are incompatibilities between Ada 2012 and Ada 2022. We
!                --  could allow mixing of Ada 2012 and Ada 2022 but it's not
!                --  worth it.
! 
!                Check_Valid_Configuration_Pragma;
! 
!                --  Now set appropriate Ada mode
! 
!                Ada_Version          := Ada_2022;
!                Ada_Version_Explicit := Ada_2022;
!                Ada_Version_Pragma   := N;
!             end if;
!          end;
  
           -------------------------------------
           -- Aggregate_Individually_Assign --
*************** package body Sem_Prag is
*** 12638,12644 ****
           --  external tool and a tool-specific function. These arguments are
           --  not analyzed.
  
!          when Pragma_Annotate => Annotate : declare
              Arg     : Node_Id;
              Expr    : Node_Id;
              Nam_Arg : Node_Id;
--- 12892,12898 ----
           --  external tool and a tool-specific function. These arguments are
           --  not analyzed.
  
!          when Pragma_Annotate | Pragma_GNAT_Annotate => Annotate : declare
              Arg     : Node_Id;
              Expr    : Node_Id;
              Nam_Arg : Node_Id;
*************** package body Sem_Prag is
*** 12718,12727 ****
                 then
                    Mark_Ghost_Pragma (N, Entity (Get_Pragma_Arg (Nam_Arg)));
                 end if;
- 
-                --  Not allowed in compiler units (bootstrap issues)
- 
-                Check_Compiler_Unit ("Entity for pragma Annotate", N);
              end if;
  
              --  Continue the processing with last argument removed for now
--- 12972,12977 ----
*************** package body Sem_Prag is
*** 13268,13278 ****
              Obj_Or_Type_Id := Defining_Entity (Obj_Or_Type_Decl);
  
              --  Perform minimal verification to ensure that the argument is at
!             --  least a variable or a type. Subsequent finer grained checks
!             --  will be done at the end of the declarative region that
!             --  contains the pragma.
  
!             if Ekind (Obj_Or_Type_Id) = E_Variable
                or else Is_Type (Obj_Or_Type_Id)
              then
  
--- 13518,13528 ----
              Obj_Or_Type_Id := Defining_Entity (Obj_Or_Type_Decl);
  
              --  Perform minimal verification to ensure that the argument is at
!             --  least an object or a type. Subsequent finer grained checks will
!             --  be done at the end of the declarative region that contains the
!             --  pragma.
  
!             if Ekind (Obj_Or_Type_Id) in E_Constant | E_Variable
                or else Is_Type (Obj_Or_Type_Id)
              then
  
*************** package body Sem_Prag is
*** 13441,13447 ****
                      Arg1);
                 end if;
  
!             --  Only other possibility is Access-to-class-wide type
  
              elsif Is_Access_Type (Nm)
                and then Is_Class_Wide_Type (Designated_Type (Nm))
--- 13691,13697 ----
                      Arg1);
                 end if;
  
!             --  Only other possibility is access-to-class-wide type
  
              elsif Is_Access_Type (Nm)
                and then Is_Class_Wide_Type (Designated_Type (Nm))
*************** package body Sem_Prag is
*** 13517,13523 ****
                     and then Nkind (Object_Definition (D)) =
                                         N_Constrained_Array_Definition)
                or else
!                  (Ada_Version >= Ada_2020
                     and then Nkind (D) = N_Formal_Type_Declaration)
              then
                 --  The flag is set on the base type, or on the object
--- 13767,13773 ----
                     and then Nkind (Object_Definition (D)) =
                                         N_Constrained_Array_Definition)
                or else
!                  (Ada_Version >= Ada_2022
                     and then Nkind (D) = N_Formal_Type_Declaration)
              then
                 --  The flag is set on the base type, or on the object
*************** package body Sem_Prag is
*** 14070,14121 ****
  
           when Pragma_Compile_Time_Error | Pragma_Compile_Time_Warning =>
              GNAT_Pragma;
-             Process_Compile_Time_Warning_Or_Error;
- 
-          ---------------------------
-          -- Compiler_Unit_Warning --
-          ---------------------------
- 
-          --  pragma Compiler_Unit_Warning;
- 
-          --  Historical note
- 
-          --  Originally, we had only pragma Compiler_Unit, and it resulted in
-          --  errors not warnings. This means that we had introduced a big extra
-          --  inertia to compiler changes, since even if we implemented a new
-          --  feature, and even if all versions to be used for bootstrapping
-          --  implemented this new feature, we could not use it, since old
-          --  compilers would give errors for using this feature in units
-          --  having Compiler_Unit pragmas.
- 
-          --  By changing Compiler_Unit to Compiler_Unit_Warning, we solve the
-          --  problem. We no longer have any units mentioning Compiler_Unit,
-          --  so old compilers see Compiler_Unit_Warning which is unrecognized,
-          --  and thus generates a warning which can be ignored. So that deals
-          --  with the problem of old compilers not implementing the newer form
-          --  of the pragma.
- 
-          --  Newer compilers recognize the new pragma, but generate warning
-          --  messages instead of errors, which again can be ignored in the
-          --  case of an old compiler which implements a wanted new feature
-          --  but at the time felt like warning about it for older compilers.
- 
-          --  We retain Compiler_Unit so that new compilers can be used to build
-          --  older run-times that use this pragma. That's an unusual case, but
-          --  it's easy enough to handle, so why not?
- 
-          when Pragma_Compiler_Unit
-             | Pragma_Compiler_Unit_Warning
-          =>
-             GNAT_Pragma;
-             Check_Arg_Count (0);
  
!             --  Only recognized in main unit
  
!             if Current_Sem_Unit = Main_Unit then
!                Compiler_Unit := True;
              end if;
  
           -----------------------------
           -- Complete_Representation --
           -----------------------------
--- 14320,14337 ----
  
           when Pragma_Compile_Time_Error | Pragma_Compile_Time_Warning =>
              GNAT_Pragma;
  
!             --  These pragmas rely on the context. In adc files they raise
!             --  Constraint_Error. Ban them from use as configuration pragmas
!             --  even in cases where such a use could work.
  
!             if Is_Configuration_Pragma then
!                Error_Pragma
!                   ("pragma% is not allowed as a configuration pragma");
              end if;
  
+             Process_Compile_Time_Warning_Or_Error;
+ 
           -----------------------------
           -- Complete_Representation --
           -----------------------------
*************** package body Sem_Prag is
*** 14606,14612 ****
           --    [, [Link_Name     =>] static_string_EXPRESSION ]);
  
           when Pragma_CPP_Constructor => CPP_Constructor : declare
-             Elmt    : Elmt_Id;
              Id      : Entity_Id;
              Def_Id  : Entity_Id;
              Tag_Typ : Entity_Id;
--- 14822,14827 ----
*************** package body Sem_Prag is
*** 14673,14684 ****
                 then
                    Tag_Typ := Etype (Def_Id);
  
!                   Elmt := First_Elmt (Primitive_Operations (Tag_Typ));
!                   while Present (Elmt) and then Node (Elmt) /= Def_Id loop
!                      Next_Elmt (Elmt);
!                   end loop;
! 
!                   Remove_Elmt (Primitive_Operations (Tag_Typ), Elmt);
                    Set_Is_Dispatching_Operation (Def_Id, False);
                 end if;
  
--- 14888,14894 ----
                 then
                    Tag_Typ := Etype (Def_Id);
  
!                   Remove (Primitive_Operations (Tag_Typ), Def_Id);
                    Set_Is_Dispatching_Operation (Def_Id, False);
                 end if;
  
*************** package body Sem_Prag is
*** 14709,14717 ****
                    & "effect?j?", N);
              end if;
  
!          --------------------
           -- CUDA_Execute --
!          --------------------
  
           --    pragma CUDA_Execute (PROCEDURE_CALL_STATEMENT,
           --                         EXPRESSION,
--- 14919,14959 ----
                    & "effect?j?", N);
              end if;
  
!          -----------------
!          -- CUDA_Device --
!          -----------------
! 
!          when Pragma_CUDA_Device => CUDA_Device : declare
!             Arg_Node      : Node_Id;
!             Device_Entity : Entity_Id;
!          begin
!             GNAT_Pragma;
!             Check_Arg_Count (1);
!             Check_Arg_Is_Library_Level_Local_Name (Arg1);
! 
!             Arg_Node := Get_Pragma_Arg (Arg1);
!             Device_Entity := Entity (Arg_Node);
! 
!             if Ekind (Device_Entity) in E_Variable
!                                       | E_Constant
!                                       | E_Procedure
!                                       | E_Function
!             then
!                Add_CUDA_Device_Entity
!                  (Package_Specification_Of_Scope (Scope (Device_Entity)),
!                   Device_Entity);
! 
!             else
!                Error_Msg_NE ("& must be constant, variable or subprogram",
!                  N,
!                  Device_Entity);
!             end if;
! 
!          end CUDA_Device;
! 
!          ------------------
           -- CUDA_Execute --
!          ------------------
  
           --    pragma CUDA_Execute (PROCEDURE_CALL_STATEMENT,
           --                         EXPRESSION,
*************** package body Sem_Prag is
*** 14739,14744 ****
--- 14981,14988 ----
                 end if;
  
                 if Nkind (N) = N_Aggregate
+                  and then not Null_Record_Present (N)
+                  and then No (Component_Associations (N))
                   and then List_Length (Expressions (N)) = 3
                 then
                    Expr := First (Expressions (N));
*************** package body Sem_Prag is
*** 14760,14766 ****
              Shared_Memory    : Node_Id;
              Stream           : Node_Id;
  
!             --  Start of processing for CUDA_Execute
  
           begin
              GNAT_Pragma;
--- 15004,15010 ----
              Shared_Memory    : Node_Id;
              Stream           : Node_Id;
  
!          --  Start of processing for CUDA_Execute
  
           begin
              GNAT_Pragma;
*************** package body Sem_Prag is
*** 14769,14775 ****
  
              Analyze_And_Resolve (Kernel_Call);
              if Nkind (Kernel_Call) /= N_Function_Call
!                or else Etype (Kernel_Call) /= Standard_Void_Type
              then
                 --  In `pragma CUDA_Execute (Kernel_Call (...), ...)`,
                 --  GNAT sees Kernel_Call as an N_Function_Call since
--- 15013,15019 ----
  
              Analyze_And_Resolve (Kernel_Call);
              if Nkind (Kernel_Call) /= N_Function_Call
!               or else Etype (Kernel_Call) /= Standard_Void_Type
              then
                 --  In `pragma CUDA_Execute (Kernel_Call (...), ...)`,
                 --  GNAT sees Kernel_Call as an N_Function_Call since
*************** package body Sem_Prag is
*** 14810,14816 ****
           -- CUDA_Global --
           -----------------
  
!          --  pragma CUDA_Global (IDENTIFIER);
  
           when Pragma_CUDA_Global => CUDA_Global : declare
              Arg_Node    : Node_Id;
--- 15054,15060 ----
           -- CUDA_Global --
           -----------------
  
!          --  pragma CUDA_Global ([Entity =>] IDENTIFIER);
  
           when Pragma_CUDA_Global => CUDA_Global : declare
              Arg_Node    : Node_Id;
*************** package body Sem_Prag is
*** 14818,14825 ****
              Pack_Id     : Entity_Id;
           begin
              GNAT_Pragma;
!             Check_At_Least_N_Arguments (1);
!             Check_At_Most_N_Arguments (1);
              Check_Optional_Identifier (Arg1, Name_Entity);
              Check_Arg_Is_Local_Name (Arg1);
  
--- 15062,15068 ----
              Pack_Id     : Entity_Id;
           begin
              GNAT_Pragma;
!             Check_Arg_Count (1);
              Check_Optional_Identifier (Arg1, Name_Entity);
              Check_Arg_Is_Local_Name (Arg1);
  
*************** package body Sem_Prag is
*** 15056,15064 ****
              else
                 --  All other cases: diagnose error
  
!                Error_Msg
!                  ("argument of pragma ""Debug"" is not procedure call",
!                   Sloc (Call));
                 return;
              end if;
  
--- 15299,15306 ----
              else
                 --  All other cases: diagnose error
  
!                Error_Msg_N
!                  ("argument of pragma ""Debug"" is not procedure call", Call);
                 return;
              end if;
  
*************** package body Sem_Prag is
*** 16119,16125 ****
                 begin
                    Set_Is_Exported    (Id2, Is_Exported          (Def_Id));
                    Set_First_Rep_Item (Id2, First_Rep_Item       (Def_Id));
!                   Set_Interface_Name (Id2, Einfo.Interface_Name (Def_Id));
                 end;
              end if;
           end Export;
--- 16361,16368 ----
                 begin
                    Set_Is_Exported    (Id2, Is_Exported          (Def_Id));
                    Set_First_Rep_Item (Id2, First_Rep_Item       (Def_Id));
!                   Set_Interface_Name
!                     (Id2, Einfo.Entities.Interface_Name (Def_Id));
                 end;
              end if;
           end Export;
*************** package body Sem_Prag is
*** 16296,16320 ****
                Arg_Mechanism       => Mechanism);
           end Export_Procedure;
  
-          ------------------
-          -- Export_Value --
-          ------------------
- 
-          --  pragma Export_Value (
-          --     [Value     =>] static_integer_EXPRESSION,
-          --     [Link_Name =>] static_string_EXPRESSION);
- 
-          when Pragma_Export_Value =>
-             GNAT_Pragma;
-             Check_Arg_Order ((Name_Value, Name_Link_Name));
-             Check_Arg_Count (2);
- 
-             Check_Optional_Identifier (Arg1, Name_Value);
-             Check_Arg_Is_OK_Static_Expression (Arg1, Any_Integer);
- 
-             Check_Optional_Identifier (Arg2, Name_Link_Name);
-             Check_Arg_Is_OK_Static_Expression (Arg2, Standard_String);
- 
           -----------------------------
           -- Export_Valued_Procedure --
           -----------------------------
--- 16539,16544 ----
*************** package body Sem_Prag is
*** 16424,16434 ****
              Check_Arg_Is_One_Of (Arg1, Name_On, Name_Off);
  
              if Chars (Get_Pragma_Arg (Arg1)) = Name_On then
!                Extensions_Allowed := True;
!                Ada_Version := Ada_Version_Type'Last;
! 
              else
-                Extensions_Allowed := False;
                 Ada_Version := Ada_Version_Explicit;
                 Ada_Version_Pragma := Empty;
              end if;
--- 16648,16655 ----
              Check_Arg_Is_One_Of (Arg1, Name_On, Name_Off);
  
              if Chars (Get_Pragma_Arg (Arg1)) = Name_On then
!                Ada_Version := Ada_With_Extensions;
              else
                 Ada_Version := Ada_Version_Explicit;
                 Ada_Version_Pragma := Empty;
              end if;
*************** package body Sem_Prag is
*** 19274,19280 ****
              Check_Arg_Is_OK_Static_Expression (Arg2, Standard_String);
              Def_Id := Entity (Get_Pragma_Arg (Arg1));
  
!             if Is_Access_Type (Def_Id) then
                 Def_Id := Designated_Type (Def_Id);
              end if;
  
--- 19495,19523 ----
              Check_Arg_Is_OK_Static_Expression (Arg2, Standard_String);
              Def_Id := Entity (Get_Pragma_Arg (Arg1));
  
!             --  Apply the pragma to the designated type, rather than to the
!             --  access type, unless it's a strub annotation.  We wish to enable
!             --  objects of access type, as well as access types themselves, to
!             --  be annotated, so that reading the access objects (as oposed to
!             --  the designated data) automatically enables stack
!             --  scrubbing. That said, as in the attribute handler that
!             --  processes the pragma turned into a compiler attribute, a strub
!             --  annotation that must be associated with a subprogram type (for
!             --  holding an explicit strub mode), when applied to an
!             --  access-to-subprogram, gets promoted to the subprogram type. We
!             --  might be tempted to leave it alone here, since the C attribute
!             --  handler will adjust it, but then GNAT would convert the
!             --  annotated subprogram types to naked ones before using them,
!             --  cancelling out their intended effects.
! 
!             if Is_Access_Type (Def_Id)
!               and then (not Strub_Pragma_P (N)
!                           or else
!                           (Present (Arg3)
!                              and then
!                              Ekind (Designated_Type
!                                       (Def_Id)) = E_Subprogram_Type))
!             then
                 Def_Id := Designated_Type (Def_Id);
              end if;
  
*************** package body Sem_Prag is
*** 19292,19298 ****
              if Rep_Item_Too_Late (Def_Id, N) then
                 return;
              else
!                Set_Has_Gigi_Rep_Item (Entity (Get_Pragma_Arg (Arg1)));
              end if;
           end Machine_Attribute;
  
--- 19535,19541 ----
              if Rep_Item_Too_Late (Def_Id, N) then
                 return;
              else
!                Set_Has_Gigi_Rep_Item (Def_Id);
              end if;
           end Machine_Attribute;
  
*************** package body Sem_Prag is
*** 19816,19822 ****
                    raise Pragma_Exit;
                 end if;
  
!                --  Loop to find matching procedures or functions (Ada 2020)
  
                 E := Entity (Id);
  
--- 20059,20065 ----
                    raise Pragma_Exit;
                 end if;
  
!                --  Loop to find matching procedures or functions (Ada 2022)
  
                 E := Entity (Id);
  
*************** package body Sem_Prag is
*** 19824,19833 ****
                 while Present (E)
                   and then Scope (E) = Current_Scope
                 loop
!                   --  Ada 2020 (AI12-0269): A function can be No_Return
  
                    if Ekind (E) in E_Generic_Procedure | E_Procedure
!                     or else (Ada_Version >= Ada_2020
                                and then
                               Ekind (E) in E_Generic_Function | E_Function)
                    then
--- 20067,20076 ----
                 while Present (E)
                   and then Scope (E) = Current_Scope
                 loop
!                   --  Ada 2022 (AI12-0269): A function can be No_Return
  
                    if Ekind (E) in E_Generic_Procedure | E_Procedure
!                     or else (Ada_Version >= Ada_2022
                                and then
                               Ekind (E) in E_Generic_Function | E_Function)
                    then
*************** package body Sem_Prag is
*** 19919,19925 ****
                    then
                       Set_No_Return (Entity (Id));
  
!                   elsif Ada_Version >= Ada_2020 then
                       Error_Pragma_Arg
                         ("no subprogram& found for pragma%", Arg);
  
--- 20162,20168 ----
                    then
                       Set_No_Return (Entity (Id));
  
!                   elsif Ada_Version >= Ada_2022 then
                       Error_Pragma_Arg
                         ("no subprogram& found for pragma%", Arg);
  
*************** package body Sem_Prag is
*** 20432,20438 ****
                 elsif Chars (Argx) = Name_Eliminated then
                    if Ttypes.Standard_Long_Long_Integer_Size /= 64 then
                       Error_Pragma_Arg
!                        ("Eliminated not implemented on this target", Argx);
                    else
                       return Eliminated;
                    end if;
--- 20675,20682 ----
                 elsif Chars (Argx) = Name_Eliminated then
                    if Ttypes.Standard_Long_Long_Integer_Size /= 64 then
                       Error_Pragma_Arg
!                        ("Eliminated requires Long_Long_Integer'Size = 64",
!                         Argx);
                    else
                       return Eliminated;
                    end if;
*************** package body Sem_Prag is
*** 24983,24998 ****
              Record_Rep_Item (E, N);
           end Universal_Alias;
  
-          --------------------
-          -- Universal_Data --
-          --------------------
- 
-          --  pragma Universal_Data [(library_unit_NAME)];
- 
-          when Pragma_Universal_Data =>
-             GNAT_Pragma;
-             Error_Pragma ("??pragma% ignored (applies only to AAMP)");
- 
           ----------------
           -- Unmodified --
           ----------------
--- 25227,25232 ----
*************** package body Sem_Prag is
*** 25410,25419 ****
                    Reason := End_String;
                    Arg_Count := Arg_Count - 1;
  
-                   --  Not allowed in compiler units (bootstrap issues)
- 
-                   Check_Compiler_Unit ("Reason for pragma Warnings", N);
- 
                 --  No REASON string, set null string as reason
  
                 else
--- 25644,25649 ----
*************** package body Sem_Prag is
*** 25696,25704 ****
                                Set_Specific_Warning_On (Loc, Message, Err);
  
                                if Err then
!                                  Error_Msg
                                     ("??pragma Warnings On with no matching "
!                                     & "Warnings Off", Loc);
                                end if;
                             end if;
                          end;
--- 25926,25934 ----
                                Set_Specific_Warning_On (Loc, Message, Err);
  
                                if Err then
!                                  Error_Msg_N
                                     ("??pragma Warnings On with no matching "
!                                     & "Warnings Off", N);
                                end if;
                             end if;
                          end;
*************** package body Sem_Prag is
*** 25845,25867 ****
                         ("operation in class-wide condition must be primitive "
                          & "of &", Nod, Disp_Typ);
                    end if;
- 
-                --  Otherwise we have a call to an overridden primitive, and we
-                --  will create a common class-wide clone for the body of
-                --  original operation and its eventual inherited versions. If
-                --  the original operation dispatches on result it is never
-                --  inherited and there is no need for a clone. There is not
-                --  need for a clone either in GNATprove mode, as cases that
-                --  would require it are rejected (when an inherited primitive
-                --  calls an overridden operation in a class-wide contract), and
-                --  the clone would make proof impossible in some cases.
- 
-                elsif not Is_Abstract_Subprogram (Spec_Id)
-                  and then No (Class_Wide_Clone (Spec_Id))
-                  and then not Has_Controlling_Result (Spec_Id)
-                  and then not GNATprove_Mode
-                then
-                   Build_Class_Wide_Clone_Decl (Spec_Id);
                 end if;
              end;
  
--- 26075,26080 ----
*************** package body Sem_Prag is
*** 25982,25996 ****
           End_Scope;
        end if;
  
-       --  If analysis of the condition indicates that a class-wide clone
-       --  has been created, build and analyze its declaration.
- 
-       if Is_Subprogram (Spec_Id)
-         and then Present (Class_Wide_Clone (Spec_Id))
-       then
-          Analyze (Unit_Declaration_Node (Class_Wide_Clone (Spec_Id)));
-       end if;
- 
        --  Currently it is not possible to inline pre/postconditions on a
        --  subprogram subject to pragma Inline_Always.
  
--- 26195,26200 ----
*************** package body Sem_Prag is
*** 26381,26387 ****
  
              --  The current refinement clause is legally constructed following
              --  the rules in SPARK RM 7.2.5, therefore it can be removed from
!             --  the pool of candidates. The seach continues because a single
              --  dependence clause may have multiple matching refinements.
  
              if Inputs_Match and Outputs_Match then
--- 26585,26591 ----
  
              --  The current refinement clause is legally constructed following
              --  the rules in SPARK RM 7.2.5, therefore it can be removed from
!             --  the pool of candidates. The search continues because a single
              --  dependence clause may have multiple matching refinements.
  
              if Inputs_Match and Outputs_Match then
*************** package body Sem_Prag is
*** 28580,28592 ****
                          Placement => Placement,
                          Pack_Id   => Pack_Id);
  
!                      --  The constituent is part of the visible state of a
!                      --  private child package, but lacks a Part_Of indicator.
  
!                      if Placement = Visible_State_Space
!                        and then Is_Child_Unit (Pack_Id)
!                        and then not Is_Generic_Unit (Pack_Id)
!                        and then Is_Private_Descendant (Pack_Id)
                       then
                          Error_Msg_Name_1 := Chars (State_Id);
                          SPARK_Msg_NE
--- 28784,28800 ----
                          Placement => Placement,
                          Pack_Id   => Pack_Id);
  
!                      --  The constituent is either part of the hidden state of
!                      --  the package or part of the visible state of a private
!                      --  child package, but lacks a Part_Of indicator.
  
!                      if (Placement = Private_State_Space
!                           and then Pack_Id = Spec_Id)
!                        or else
!                          (Placement = Visible_State_Space
!                            and then Is_Child_Unit (Pack_Id)
!                            and then not Is_Generic_Unit (Pack_Id)
!                            and then Is_Private_Descendant (Pack_Id))
                       then
                          Error_Msg_Name_1 := Chars (State_Id);
                          SPARK_Msg_NE
*************** package body Sem_Prag is
*** 29270,29277 ****
           --  Check that the expression is a proper aggregate (no parentheses)
  
           if Paren_Count (Variants) /= 0 then
!             Error_Msg -- CODEFIX
!               ("redundant parentheses", First_Sloc (Variants));
           end if;
  
           --  Ensure that the formal parameters are visible when analyzing all
--- 29478,29485 ----
           --  Check that the expression is a proper aggregate (no parentheses)
  
           if Paren_Count (Variants) /= 0 then
!             Error_Msg_F -- CODEFIX
!               ("redundant parentheses", Variants);
           end if;
  
           --  Ensure that the formal parameters are visible when analyzing all
*************** package body Sem_Prag is
*** 29477,29485 ****
        Msg_Arg    : Node_Id;
        Nam        : Name_Id;
  
-       Needs_Wrapper : Boolean;
-       pragma Unreferenced (Needs_Wrapper);
- 
     --  Start of processing for Build_Pragma_Check_Equivalent
  
     begin
--- 29685,29690 ----
*************** package body Sem_Prag is
*** 29506,29516 ****
           --  Build the inherited class-wide condition
  
           Build_Class_Wide_Expression
!            (Prag          => Check_Prag,
!             Subp          => Subp_Id,
!             Par_Subp      => Inher_Id,
!             Adjust_Sloc   => True,
!             Needs_Wrapper => Needs_Wrapper);
  
        --  If not an inherited condition simply copy the original pragma
  
--- 29711,29720 ----
           --  Build the inherited class-wide condition
  
           Build_Class_Wide_Expression
!            (Pragma_Or_Expr => Check_Prag,
!             Subp           => Subp_Id,
!             Par_Subp       => Inher_Id,
!             Adjust_Sloc    => True);
  
        --  If not an inherited condition simply copy the original pragma
  
*************** package body Sem_Prag is
*** 30309,30327 ****
  
           --  Process all formal parameters
  
!          Formal := First_Entity (Spec_Id);
           while Present (Formal) loop
              if Ekind (Formal) in E_In_Out_Parameter | E_In_Parameter then
- 
-                --  IN parameters can act as output when the related type is
-                --  access-to-variable.
- 
-                if Ekind (Formal) = E_In_Parameter
-                  and then Is_Access_Variable (Etype (Formal))
-                then
-                   Append_New_Elmt (Formal, Subp_Outputs);
-                end if;
- 
                 Append_New_Elmt (Formal, Subp_Inputs);
              end if;
  
--- 30513,30521 ----
  
           --  Process all formal parameters
  
!          Formal := First_Formal (Spec_Id);
           while Present (Formal) loop
              if Ekind (Formal) in E_In_Out_Parameter | E_In_Parameter then
                 Append_New_Elmt (Formal, Subp_Inputs);
              end if;
  
*************** package body Sem_Prag is
*** 30339,30345 ****
                 end if;
              end if;
  
!             Next_Entity (Formal);
           end loop;
  
        --  Otherwise the input denotes a task type, a task body, or the
--- 30533,30550 ----
                 end if;
              end if;
  
!             --  IN parameters of procedures and protected entries can act as
!             --  outputs when the related type is access-to-variable.
! 
!             if Ekind (Formal) = E_In_Parameter
!               and then Ekind (Spec_Id) not in E_Function
!                                             | E_Generic_Function
!               and then Is_Access_Variable (Etype (Formal))
!             then
!                Append_New_Elmt (Formal, Subp_Outputs);
!             end if;
! 
!             Next_Formal (Formal);
           end loop;
  
        --  Otherwise the input denotes a task type, a task body, or the
*************** package body Sem_Prag is
*** 30539,30544 ****
--- 30744,30759 ----
        Stmt : Node_Id;
  
     begin
+       --  If the pragma comes from an aspect on a compilation unit that is a
+       --  package instance, then return the original package instantiation
+       --  node.
+ 
+       if Nkind (Parent (Prag)) = N_Compilation_Unit_Aux then
+          return
+            Get_Unit_Instantiation_Node
+              (Defining_Entity (Unit (Enclosing_Comp_Unit_Node (Prag))));
+       end if;
+ 
        Stmt := Prev (Prag);
        while Present (Stmt) loop
  
*************** package body Sem_Prag is
*** 30688,30695 ****
                    return Stmt;
  
                 --  The subprogram declaration is an internally generated spec
!                --  for a stand-alone subrogram body declared inside a protected
!                --  body.
  
                 elsif Present (Corresponding_Body (Stmt))
                   and then Comes_From_Source (Corresponding_Body (Stmt))
--- 30903,30910 ----
                    return Stmt;
  
                 --  The subprogram declaration is an internally generated spec
!                --  for a stand-alone subprogram body declared inside a
!                --  protected body.
  
                 elsif Present (Corresponding_Body (Stmt))
                   and then Comes_From_Source (Corresponding_Body (Stmt))
*************** package body Sem_Prag is
*** 30703,30719 ****
                 elsif Present (Generic_Parent (Specification (Stmt))) then
                    return Stmt;
  
!                --  Ada 2020: contract on formal subprogram or on generated
                 --  Access_Subprogram_Wrapper, which appears after the related
                 --  Access_Subprogram declaration.
  
                 elsif Is_Generic_Actual_Subprogram (Defining_Entity (Stmt))
!                  and then Ada_Version >= Ada_2020
                 then
                    return Stmt;
  
                 elsif Is_Access_Subprogram_Wrapper (Defining_Entity (Stmt))
!                  and then Ada_Version >= Ada_2020
                 then
                    return Stmt;
                 end if;
--- 30918,30934 ----
                 elsif Present (Generic_Parent (Specification (Stmt))) then
                    return Stmt;
  
!                --  Ada 2022: contract on formal subprogram or on generated
                 --  Access_Subprogram_Wrapper, which appears after the related
                 --  Access_Subprogram declaration.
  
                 elsif Is_Generic_Actual_Subprogram (Defining_Entity (Stmt))
!                  and then Ada_Version >= Ada_2022
                 then
                    return Stmt;
  
                 elsif Is_Access_Subprogram_Wrapper (Defining_Entity (Stmt))
!                  and then Ada_Version >= Ada_2022
                 then
                    return Stmt;
                 end if;
*************** package body Sem_Prag is
*** 30742,30755 ****
        elsif Nkind (Context) = N_Entry_Body then
           return Context;
  
!       --  The pragma appears inside the statements of a subprogram body. This
!       --  placement is the result of subprogram contract expansion.
  
        elsif Is_Statement (Context)
          and then Present (Enclosing_HSS (Context))
        then
           return Parent (Enclosing_HSS (Context));
  
        --  The pragma appears inside the declarative part of a package body
  
        elsif Nkind (Context) = N_Package_Body then
--- 30957,30975 ----
        elsif Nkind (Context) = N_Entry_Body then
           return Context;
  
!       --  The pragma appears inside the statements of a subprogram body at
!       --  some nested level.
  
        elsif Is_Statement (Context)
          and then Present (Enclosing_HSS (Context))
        then
           return Parent (Enclosing_HSS (Context));
  
+       --  The pragma appears directly in the statements of a subprogram body
+ 
+       elsif Nkind (Context) = N_Handled_Sequence_Of_Statements then
+          return Parent (Context);
+ 
        --  The pragma appears inside the declarative part of a package body
  
        elsif Nkind (Context) = N_Package_Body then
*************** package body Sem_Prag is
*** 30911,30917 ****
        --  Follow subprogram renaming chain
  
        if Is_Subprogram (Def_Id)
!         and then Nkind (Parent (Declaration_Node (Def_Id))) =
                     N_Subprogram_Renaming_Declaration
          and then Present (Alias (Def_Id))
        then
--- 31131,31137 ----
        --  Follow subprogram renaming chain
  
        if Is_Subprogram (Def_Id)
!         and then Parent_Kind (Declaration_Node (Def_Id)) =
                     N_Subprogram_Renaming_Declaration
          and then Present (Alias (Def_Id))
        then
*************** package body Sem_Prag is
*** 31167,31173 ****
     --  whether appearance of some name in a given pragma is to be considered
     --  as a reference for the purposes of warnings about unreferenced objects.
  
!    --  -1  indicates that appearence in any argument is significant
     --  0   indicates that appearance in any argument is not significant
     --  +n  indicates that appearance as argument n is significant, but all
     --      other arguments are not significant
--- 31387,31393 ----
     --  whether appearance of some name in a given pragma is to be considered
     --  as a reference for the purposes of warnings about unreferenced objects.
  
!    --  -1  indicates that appearance in any argument is significant
     --  0   indicates that appearance in any argument is not significant
     --  +n  indicates that appearance as argument n is significant, but all
     --      other arguments are not significant
*************** package body Sem_Prag is
*** 31182,31188 ****
        Pragma_Ada_2005                       => -1,
        Pragma_Ada_12                         => -1,
        Pragma_Ada_2012                       => -1,
!       Pragma_Ada_2020                       => -1,
        Pragma_Aggregate_Individually_Assign  => 0,
        Pragma_All_Calls_Remote               => -1,
        Pragma_Allow_Integer_Address          => -1,
--- 31402,31408 ----
        Pragma_Ada_2005                       => -1,
        Pragma_Ada_12                         => -1,
        Pragma_Ada_2012                       => -1,
!       Pragma_Ada_2022                       => -1,
        Pragma_Aggregate_Individually_Assign  => 0,
        Pragma_All_Calls_Remote               => -1,
        Pragma_Allow_Integer_Address          => -1,
*************** package body Sem_Prag is
*** 31211,31222 ****
        Pragma_C_Pass_By_Copy                 =>  0,
        Pragma_Comment                        => -1,
        Pragma_Common_Object                  =>  0,
        Pragma_CUDA_Execute                   => -1,
        Pragma_CUDA_Global                    => -1,
        Pragma_Compile_Time_Error             => -1,
        Pragma_Compile_Time_Warning           => -1,
-       Pragma_Compiler_Unit                  => -1,
-       Pragma_Compiler_Unit_Warning          => -1,
        Pragma_Complete_Representation        =>  0,
        Pragma_Complex_Representation         =>  0,
        Pragma_Component_Alignment            =>  0,
--- 31431,31441 ----
        Pragma_C_Pass_By_Copy                 =>  0,
        Pragma_Comment                        => -1,
        Pragma_Common_Object                  =>  0,
+       Pragma_CUDA_Device                    => -1,
        Pragma_CUDA_Execute                   => -1,
        Pragma_CUDA_Global                    => -1,
        Pragma_Compile_Time_Error             => -1,
        Pragma_Compile_Time_Warning           => -1,
        Pragma_Complete_Representation        =>  0,
        Pragma_Complex_Representation         =>  0,
        Pragma_Component_Alignment            =>  0,
*************** package body Sem_Prag is
*** 31248,31254 ****
        Pragma_Export_Function                => -1,
        Pragma_Export_Object                  => -1,
        Pragma_Export_Procedure               => -1,
-       Pragma_Export_Value                   => -1,
        Pragma_Export_Valued_Procedure        => -1,
        Pragma_Extend_System                  => -1,
        Pragma_Extensions_Allowed             =>  0,
--- 31467,31472 ----
*************** package body Sem_Prag is
*** 31260,31265 ****
--- 31478,31484 ----
        Pragma_Finalize_Storage_Only          =>  0,
        Pragma_Ghost                          =>  0,
        Pragma_Global                         => -1,
+       Pragma_GNAT_Annotate                  => 93,
        Pragma_Ident                          => -1,
        Pragma_Ignore_Pragma                  =>  0,
        Pragma_Implementation_Defined         => -1,
*************** package body Sem_Prag is
*** 31403,31409 ****
        Pragma_Unevaluated_Use_Of_Old         =>  0,
        Pragma_Unimplemented_Unit             =>  0,
        Pragma_Universal_Aliasing             =>  0,
-       Pragma_Universal_Data                 =>  0,
        Pragma_Unmodified                     =>  0,
        Pragma_Unreferenced                   =>  0,
        Pragma_Unreferenced_Objects           =>  0,
--- 31622,31627 ----
*************** package body Sem_Prag is
*** 31835,31841 ****
           Error_Msg_N ("condition is not known at compile time", Arg1x);
  
        elsif Warn_On_Unknown_Compile_Time_Warning then
!          Error_Msg_N ("??condition is not known at compile time", Arg1x);
        end if;
     end Validate_Compile_Time_Warning_Or_Error;
  
--- 32053,32059 ----
           Error_Msg_N ("condition is not known at compile time", Arg1x);
  
        elsif Warn_On_Unknown_Compile_Time_Warning then
!          Error_Msg_N ("?_c?condition is not known at compile time", Arg1x);
        end if;
     end Validate_Compile_Time_Warning_Or_Error;
  
*************** package body Sem_Prag is
*** 32459,32465 ****
     --------------------------------------------
  
     procedure Defer_Compile_Time_Warning_Error_To_BE (N : Node_Id) is
!       Arg1  : constant Node_Id := First (Pragma_Argument_Associations (N));
     begin
        Compile_Time_Warnings_Errors.Append
          (New_Val => CTWE_Entry'(Eloc  => Sloc (Arg1),
--- 32677,32683 ----
     --------------------------------------------
  
     procedure Defer_Compile_Time_Warning_Error_To_BE (N : Node_Id) is
!       Arg1 : constant Node_Id := First (Pragma_Argument_Associations (N));
     begin
        Compile_Time_Warnings_Errors.Append
          (New_Val => CTWE_Entry'(Eloc  => Sloc (Arg1),
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_prag.ads gcc-12.1.0/gcc/ada/sem_prag.ads
*** gcc-11.3.0/gcc/ada/sem_prag.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_prag.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Prag is
*** 49,54 ****
--- 49,55 ----
        Pragma_Contract_Cases               => True,
        Pragma_Convention                   => True,
        Pragma_CPU                          => True,
+       Pragma_CUDA_Device                  => True,
        Pragma_CUDA_Global                  => True,
        Pragma_Default_Initial_Condition    => True,
        Pragma_Default_Storage_Pool         => True,
*************** package Sem_Prag is
*** 63,68 ****
--- 64,70 ----
        Pragma_Favor_Top_Level              => True,
        Pragma_Ghost                        => True,
        Pragma_Global                       => True,
+       Pragma_GNAT_Annotate                => True,
        Pragma_Import                       => True,
        Pragma_Independent                  => True,
        Pragma_Independent_Components       => True,
*************** package Sem_Prag is
*** 115,121 ****
        Pragma_Type_Invariant               => True,
        Pragma_Unchecked_Union              => True,
        Pragma_Universal_Aliasing           => True,
-       Pragma_Universal_Data               => True,
        Pragma_Unmodified                   => True,
        Pragma_Unreferenced                 => True,
        Pragma_Unreferenced_Objects         => True,
--- 117,122 ----
*************** package Sem_Prag is
*** 360,368 ****
        Subp_Outputs : in out Elist_Id;
        Global_Seen  : out Boolean);
     --  Subsidiary to the analysis of pragmas Depends, Global, Refined_Depends
!    --  and Refined_Global. The routine is also used by GNATprove. Collect all
!    --  inputs and outputs of subprogram Subp_Id in lists Subp_Inputs (inputs)
!    --  and Subp_Outputs (outputs). The inputs and outputs are gathered from:
     --    1) The formal parameters of the subprogram
     --    2) The generic formal parameters of the generic subprogram
     --    3) The current instance of a concurrent type
--- 361,369 ----
        Subp_Outputs : in out Elist_Id;
        Global_Seen  : out Boolean);
     --  Subsidiary to the analysis of pragmas Depends, Global, Refined_Depends
!    --  and Refined_Global. Collect all inputs and outputs of subprogram Subp_Id
!    --  in lists Subp_Inputs (inputs) and Subp_Outputs (outputs). The inputs and
!    --  outputs are gathered from:
     --    1) The formal parameters of the subprogram
     --    2) The generic formal parameters of the generic subprogram
     --    3) The current instance of a concurrent type
*************** package Sem_Prag is
*** 429,435 ****
  
     function Get_Argument
       (Prag       : Node_Id;
!       Context_Id : Node_Id := Empty) return Node_Id;
     --  Obtain the argument of pragma Prag depending on context and the nature
     --  of the pragma. The argument is extracted in the following manner:
     --
--- 430,436 ----
  
     function Get_Argument
       (Prag       : Node_Id;
!       Context_Id : Entity_Id := Empty) return Node_Id;
     --  Obtain the argument of pragma Prag depending on context and the nature
     --  of the pragma. The argument is extracted in the following manner:
     --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_res.adb gcc-12.1.0/gcc/ada/sem_res.adb
*** gcc-11.3.0/gcc/ada/sem_res.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_res.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,87 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Debug_A;  use Debug_A;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Expander; use Expander;
! with Exp_Ch6;  use Exp_Ch6;
! with Exp_Ch7;  use Exp_Ch7;
! with Exp_Disp; use Exp_Disp;
! with Exp_Tss;  use Exp_Tss;
! with Exp_Util; use Exp_Util;
! with Freeze;   use Freeze;
! with Ghost;    use Ghost;
! with Inline;   use Inline;
! with Itypes;   use Itypes;
! with Lib;      use Lib;
! with Lib.Xref; use Lib.Xref;
! with Namet;    use Namet;
! with Nmake;    use Nmake;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Output;   use Output;
! with Par_SCO;  use Par_SCO;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aggr; use Sem_Aggr;
! with Sem_Attr; use Sem_Attr;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Cat;  use Sem_Cat;
! with Sem_Ch3;  use Sem_Ch3;
! with Sem_Ch4;  use Sem_Ch4;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Ch13; use Sem_Ch13;
! with Sem_Dim;  use Sem_Dim;
! with Sem_Disp; use Sem_Disp;
! with Sem_Dist; use Sem_Dist;
! with Sem_Elab; use Sem_Elab;
! with Sem_Elim; use Sem_Elim;
! with Sem_Eval; use Sem_Eval;
! with Sem_Intr; use Sem_Intr;
! with Sem_Mech; use Sem_Mech;
! with Sem_Type; use Sem_Type;
! with Sem_Util; use Sem_Util;
! with Sem_Warn; use Sem_Warn;
! with Sinfo;    use Sinfo;
! with Sinfo.CN; use Sinfo.CN;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Style;    use Style;
! with Targparm; use Targparm;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
! with Urealp;   use Urealp;
  
  package body Sem_Res is
  
--- 23,93 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Debug_A;        use Debug_A;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Expander;       use Expander;
! with Exp_Ch6;        use Exp_Ch6;
! with Exp_Ch7;        use Exp_Ch7;
! with Exp_Disp;       use Exp_Disp;
! with Exp_Tss;        use Exp_Tss;
! with Exp_Util;       use Exp_Util;
! with Freeze;         use Freeze;
! with Ghost;          use Ghost;
! with Inline;         use Inline;
! with Itypes;         use Itypes;
! with Lib;            use Lib;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Nmake;          use Nmake;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Output;         use Output;
! with Par_SCO;        use Par_SCO;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aggr;       use Sem_Aggr;
! with Sem_Attr;       use Sem_Attr;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Case;       use Sem_Case;
! with Sem_Cat;        use Sem_Cat;
! with Sem_Ch3;        use Sem_Ch3;
! with Sem_Ch4;        use Sem_Ch4;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch13;       use Sem_Ch13;
! with Sem_Dim;        use Sem_Dim;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Elim;       use Sem_Elim;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Intr;       use Sem_Intr;
! with Sem_Mech;       use Sem_Mech;
! with Sem_Type;       use Sem_Type;
! with Sem_Util;       use Sem_Util;
! with Sem_Warn;       use Sem_Warn;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinfo.CN;       use Sinfo.CN;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Strub;          use Strub;
! with Style;          use Style;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
! with Urealp;         use Urealp;
  
  package body Sem_Res is
  
*************** package body Sem_Res is
*** 98,103 ****
--- 104,117 ----
  
     --  Note that Resolve_Attribute is separated off in Sem_Attr
  
+    function Has_Applicable_User_Defined_Literal
+      (N   : Node_Id;
+       Typ : Entity_Id) return Boolean;
+    --  If N is a literal or a named number, check whether Typ
+    --  has a user-defined literal aspect that can apply to N.
+    --  If present, replace N with a call to the corresponding
+    --  function and return True.
+ 
     procedure Check_Discriminant_Use (N : Node_Id);
     --  Enforce the restrictions on the use of discriminants when constraining
     --  a component of a discriminated type (record or concurrent type).
*************** package body Sem_Res is
*** 281,286 ****
--- 295,309 ----
     --  is only one requires a search over all visible entities, and happens
     --  only in very pathological cases (see 6115-006).
  
+    function Try_User_Defined_Literal
+      (N   : Node_Id;
+       Typ : Entity_Id) return Boolean;
+    --  If an operator node has a literal operand, check whether the type
+    --  of the context, or the type of the other operand has a user-defined
+    --  literal aspect that can be applied to the literal to resolve the node.
+    --  If such aspect exists, replace literal with a call to the
+    --  corresponding function and return True, return false otherwise.
+ 
     -------------------------
     -- Ambiguous_Character --
     -------------------------
*************** package body Sem_Res is
*** 404,409 ****
--- 427,591 ----
        end if;
     end Analyze_And_Resolve;
  
+    -------------------------------------
+    -- Has_Applicable_User_Defined_Literal --
+    -------------------------------------
+ 
+    function Has_Applicable_User_Defined_Literal
+      (N   : Node_Id;
+       Typ : Entity_Id) return Boolean
+    is
+       Loc  : constant Source_Ptr := Sloc (N);
+       Literal_Aspect_Map :
+         constant array (N_Numeric_Or_String_Literal) of Aspect_Id :=
+           (N_Integer_Literal => Aspect_Integer_Literal,
+            N_Real_Literal    => Aspect_Real_Literal,
+            N_String_Literal  => Aspect_String_Literal);
+ 
+       Named_Number_Aspect_Map : constant array (Named_Kind) of Aspect_Id :=
+         (E_Named_Integer => Aspect_Integer_Literal,
+          E_Named_Real    => Aspect_Real_Literal);
+ 
+       Lit_Aspect : Aspect_Id;
+ 
+       Callee : Entity_Id;
+       Name   : Node_Id;
+       Param1 : Node_Id;
+       Param2 : Node_Id;
+       Params : List_Id;
+       Call   : Node_Id;
+       Expr   : Node_Id;
+ 
+    begin
+       if (Nkind (N) in N_Numeric_Or_String_Literal
+            and then Present
+             (Find_Aspect (Typ, Literal_Aspect_Map (Nkind (N)))))
+         or else
+           (Nkind (N) = N_Identifier
+             and then Is_Named_Number (Entity (N))
+             and then
+               Present
+                 (Find_Aspect
+                   (Typ, Named_Number_Aspect_Map (Ekind (Entity (N))))))
+       then
+          Lit_Aspect :=
+            (if Nkind (N) = N_Identifier
+             then Named_Number_Aspect_Map (Ekind (Entity (N)))
+             else Literal_Aspect_Map (Nkind (N)));
+          Callee :=
+            Entity (Expression (Find_Aspect (Typ, Lit_Aspect)));
+          Name := Make_Identifier (Loc, Chars (Callee));
+ 
+          if Is_Derived_Type (Typ)
+            and then Is_Tagged_Type (Typ)
+            and then Base_Type (Etype (Callee)) /= Base_Type (Typ)
+          then
+             Callee :=
+               Corresponding_Primitive_Op
+                 (Ancestor_Op     => Callee,
+                  Descendant_Type => Base_Type (Typ));
+          end if;
+ 
+          --  Handle an identifier that denotes a named number.
+ 
+          if Nkind (N) = N_Identifier then
+             Expr := Expression (Declaration_Node (Entity (N)));
+ 
+             if Ekind (Entity (N)) = E_Named_Integer then
+                UI_Image (Expr_Value (Expr), Decimal);
+                Start_String;
+                Store_String_Chars
+                  (UI_Image_Buffer (1 .. UI_Image_Length));
+                Param1 := Make_String_Literal (Loc, End_String);
+                Params := New_List (Param1);
+ 
+             else
+                UI_Image (Norm_Num (Expr_Value_R (Expr)), Decimal);
+                Start_String;
+ 
+                if UR_Is_Negative (Expr_Value_R (Expr)) then
+                   Store_String_Chars ("-");
+                end if;
+ 
+                Store_String_Chars
+                  (UI_Image_Buffer (1 .. UI_Image_Length));
+                Param1 := Make_String_Literal (Loc, End_String);
+ 
+                --  Note: Set_Etype is called below on Param1
+ 
+                UI_Image (Norm_Den (Expr_Value_R (Expr)), Decimal);
+                Start_String;
+                Store_String_Chars
+                  (UI_Image_Buffer (1 .. UI_Image_Length));
+                Param2 := Make_String_Literal (Loc, End_String);
+                Set_Etype (Param2, Standard_String);
+ 
+                Params := New_List (Param1, Param2);
+ 
+                if Present (Related_Expression (Callee)) then
+                   Callee := Related_Expression (Callee);
+                else
+                   Error_Msg_NE
+                     ("cannot resolve & for a named real", N, Callee);
+                   return False;
+                end if;
+             end if;
+ 
+          elsif Nkind (N) = N_String_Literal then
+             Param1 := Make_String_Literal (Loc, Strval (N));
+             Params := New_List (Param1);
+ 
+          else
+             Param1 :=
+               Make_String_Literal
+                 (Loc, String_From_Numeric_Literal (N));
+             Params := New_List (Param1);
+          end if;
+ 
+          Call :=
+            Make_Function_Call
+              (Sloc                   => Loc,
+               Name                   => Name,
+               Parameter_Associations => Params);
+ 
+          Set_Entity (Name, Callee);
+          Set_Is_Overloaded (Name, False);
+ 
+          if Lit_Aspect = Aspect_String_Literal then
+             Set_Etype (Param1, Standard_Wide_Wide_String);
+          else
+             Set_Etype (Param1, Standard_String);
+          end if;
+ 
+          Set_Etype (Call, Etype (Callee));
+ 
+          if Base_Type (Etype (Call)) /= Base_Type (Typ) then
+             --  Conversion may be needed in case of an inherited
+             --  aspect of a derived type. For a null extension, we
+             --  use a null extension aggregate instead because the
+             --  downward type conversion would be illegal.
+ 
+             if Is_Null_Extension_Of
+                  (Descendant => Typ,
+                   Ancestor   => Etype (Call))
+             then
+                Call := Make_Extension_Aggregate (Loc,
+                          Ancestor_Part       => Call,
+                          Null_Record_Present => True);
+             else
+                Call := Convert_To (Typ, Call);
+             end if;
+          end if;
+ 
+          Rewrite (N, Call);
+ 
+          Analyze_And_Resolve (N, Typ);
+          return True;
+       else
+          return False;
+       end if;
+    end Has_Applicable_User_Defined_Literal;
+ 
     ----------------------------
     -- Check_Discriminant_Use --
     ----------------------------
*************** package body Sem_Res is
*** 649,657 ****
        end if;
     end Check_For_Visible_Operator;
  
!    ----------------------------------
!    --  Check_Fully_Declared_Prefix --
!    ----------------------------------
  
     procedure Check_Fully_Declared_Prefix
       (Typ  : Entity_Id;
--- 831,839 ----
        end if;
     end Check_For_Visible_Operator;
  
!    ---------------------------------
!    -- Check_Fully_Declared_Prefix --
!    ---------------------------------
  
     procedure Check_Fully_Declared_Prefix
       (Typ  : Entity_Id;
*************** package body Sem_Res is
*** 1285,1292 ****
           Check_Parameterless_Call (Explicit_Actual_Parameter (N));
  
        elsif Nkind (N) = N_Operator_Symbol then
!          Change_Operator_Symbol_To_String_Literal (N);
           Set_Is_Overloaded (N, False);
           Set_Etype (N, Any_String);
        end if;
     end Check_Parameterless_Call;
--- 1467,1476 ----
           Check_Parameterless_Call (Explicit_Actual_Parameter (N));
  
        elsif Nkind (N) = N_Operator_Symbol then
!          Set_Etype (N, Empty);
!          Set_Entity (N, Empty);
           Set_Is_Overloaded (N, False);
+          Change_Operator_Symbol_To_String_Literal (N);
           Set_Etype (N, Any_String);
        end if;
     end Check_Parameterless_Call;
*************** package body Sem_Res is
*** 1590,1601 ****
                    elsif Opnd_Type = Universal_Real then
                       Orig_Type := Type_In_P (Is_Real_Type'Access);
  
                    elsif Opnd_Type = Any_String then
                       Orig_Type := Type_In_P (Is_String_Type'Access);
  
-                   elsif Opnd_Type = Any_Access then
-                      Orig_Type := Type_In_P (Is_Definite_Access_Type'Access);
- 
                    elsif Opnd_Type = Any_Composite then
                       Orig_Type := Type_In_P (Is_Composite_Type'Access);
  
--- 1774,1785 ----
                    elsif Opnd_Type = Universal_Real then
                       Orig_Type := Type_In_P (Is_Real_Type'Access);
  
+                   elsif Opnd_Type = Universal_Access then
+                      Orig_Type := Type_In_P (Is_Definite_Access_Type'Access);
+ 
                    elsif Opnd_Type = Any_String then
                       Orig_Type := Type_In_P (Is_String_Type'Access);
  
                    elsif Opnd_Type = Any_Composite then
                       Orig_Type := Type_In_P (Is_Composite_Type'Access);
  
*************** package body Sem_Res is
*** 1879,1887 ****
  
        Expander_Mode_Restore;
        Full_Analysis := Save_Full_Analysis;
-       Set_Must_Not_Freeze (N, Save_Must_Not_Freeze);
  
        if not With_Freezing then
           Inside_Preanalysis_Without_Freezing :=
             Inside_Preanalysis_Without_Freezing - 1;
        end if;
--- 2063,2071 ----
  
        Expander_Mode_Restore;
        Full_Analysis := Save_Full_Analysis;
  
        if not With_Freezing then
+          Set_Must_Not_Freeze (N, Save_Must_Not_Freeze);
           Inside_Preanalysis_Without_Freezing :=
             Inside_Preanalysis_Without_Freezing - 1;
        end if;
*************** package body Sem_Res is
*** 2114,2120 ****
              end loop;
           end if;
  
!          --  Additional message and hint if the ambiguity involves an Ada2020
           --  container aggregate.
  
           Check_Ambiguous_Aggregate (N);
--- 2298,2304 ----
              end loop;
           end if;
  
!          --  Additional message and hint if the ambiguity involves an Ada 2022
           --  container aggregate.
  
           Check_Ambiguous_Aggregate (N);
*************** package body Sem_Res is
*** 2149,2164 ****
           return;
        end Resolution_Failed;
  
-       Literal_Aspect_Map :
-         constant array (N_Numeric_Or_String_Literal) of Aspect_Id :=
-           (N_Integer_Literal => Aspect_Integer_Literal,
-            N_Real_Literal    => Aspect_Real_Literal,
-            N_String_Literal  => Aspect_String_Literal);
- 
-       Named_Number_Aspect_Map : constant array (Named_Kind) of Aspect_Id :=
-         (E_Named_Integer => Aspect_Integer_Literal,
-          E_Named_Real    => Aspect_Real_Literal);
- 
     --  Start of processing for Resolve
  
     begin
--- 2333,2338 ----
*************** package body Sem_Res is
*** 2233,2239 ****
                    then
                       Is_Remote := False;
                       Error_Msg_N
!                        ("prefix must statically denote a remote subprogram ",
                          N);
                    end if;
  
--- 2407,2413 ----
                    then
                       Is_Remote := False;
                       Error_Msg_N
!                        ("prefix must statically denote a remote subprogram",
                          N);
                    end if;
  
*************** package body Sem_Res is
*** 2344,2351 ****
  
                 if Ada_Version >= Ada_2005
                   and then It.Typ = Typ
!                  and then Typ /= Universal_Integer
!                  and then Typ /= Universal_Real
                   and then Present (It.Abstract_Op)
                 then
                    if Debug_Flag_V then
--- 2518,2524 ----
  
                 if Ada_Version >= Ada_2005
                   and then It.Typ = Typ
!                  and then not Is_Universal_Numeric_Type (Typ)
                   and then Present (It.Abstract_Op)
                 then
                    if Debug_Flag_V then
*************** package body Sem_Res is
*** 2781,2787 ****
              elsif Nkind (N) = N_Aggregate
                and then Etype (N) = Any_Composite
              then
!                if Ada_Version >= Ada_2020
                   and then Has_Aspect (Typ, Aspect_Aggregate)
                 then
                    Resolve_Container_Aggregate (N, Typ);
--- 2954,2960 ----
              elsif Nkind (N) = N_Aggregate
                and then Etype (N) = Any_Composite
              then
!                if Ada_Version >= Ada_2022
                   and then Has_Aspect (Typ, Aspect_Aggregate)
                 then
                    Resolve_Container_Aggregate (N, Typ);
*************** package body Sem_Res is
*** 2878,2998 ****
                 end;
              end if;
  
!             --  Rewrite Literal as a call if the corresponding literal aspect
!             --  is set.
  
!             if (Nkind (N) in N_Numeric_Or_String_Literal
!                  and then
!                    Present
!                      (Find_Aspect (Typ, Literal_Aspect_Map (Nkind (N)))))
!               or else
!                 (Nkind (N) = N_Identifier
!                   and then Is_Named_Number (Entity (N))
!                   and then
!                     Present
!                       (Find_Aspect
!                         (Typ, Named_Number_Aspect_Map (Ekind (Entity (N))))))
              then
-                declare
-                   Lit_Aspect : constant Aspect_Id :=
-                     (if Nkind (N) = N_Identifier
-                      then Named_Number_Aspect_Map (Ekind (Entity (N)))
-                      else Literal_Aspect_Map (Nkind (N)));
- 
-                   Loc  : constant Source_Ptr := Sloc (N);
- 
-                   Callee : Entity_Id :=
-                     Entity (Expression (Find_Aspect (Typ, Lit_Aspect)));
- 
-                   Name : constant Node_Id :=
-                     Make_Identifier (Loc, Chars (Callee));
- 
-                   Param1 : Node_Id;
-                   Param2 : Node_Id;
-                   Params : List_Id;
-                   Call   : Node_Id;
-                   Expr   : Node_Id;
- 
-                begin
-                   if Nkind (N) = N_Identifier then
-                      Expr := Expression (Declaration_Node (Entity (N)));
- 
-                      if Ekind (Entity (N)) = E_Named_Integer then
-                         UI_Image (Expr_Value (Expr), Decimal);
-                         Start_String;
-                         Store_String_Chars
-                           (UI_Image_Buffer (1 .. UI_Image_Length));
-                         Param1 := Make_String_Literal (Loc, End_String);
-                         Params := New_List (Param1);
- 
-                      else
-                         UI_Image (Norm_Num (Expr_Value_R (Expr)), Decimal);
-                         Start_String;
-                         Store_String_Chars
-                           (UI_Image_Buffer (1 .. UI_Image_Length));
-                         Param1 := Make_String_Literal (Loc, End_String);
- 
-                         --  Note: Set_Etype is called below on Param1
- 
-                         UI_Image (Norm_Den (Expr_Value_R (Expr)), Decimal);
-                         Start_String;
-                         Store_String_Chars
-                           (UI_Image_Buffer (1 .. UI_Image_Length));
-                         Param2 := Make_String_Literal (Loc, End_String);
-                         Set_Etype (Param2, Standard_String);
- 
-                         Params := New_List (Param1, Param2);
- 
-                         if Present (Related_Expression (Callee)) then
-                            Callee := Related_Expression (Callee);
-                         else
-                            Error_Msg_NE
-                              ("cannot resolve & for a named real", N, Callee);
-                            return;
-                         end if;
-                      end if;
- 
-                   elsif Nkind (N) = N_String_Literal then
-                      Param1 := Make_String_Literal (Loc, Strval (N));
-                      Params := New_List (Param1);
-                   else
-                      Param1 :=
-                        Make_String_Literal
-                          (Loc, String_From_Numeric_Literal (N));
-                      Params := New_List (Param1);
-                   end if;
- 
-                   Call :=
-                     Make_Function_Call
-                       (Sloc                   => Loc,
-                        Name                   => Name,
-                        Parameter_Associations => Params);
- 
-                   Set_Entity (Name, Callee);
-                   Set_Is_Overloaded (Name, False);
- 
-                   if Lit_Aspect = Aspect_String_Literal then
-                      Set_Etype (Param1, Standard_Wide_Wide_String);
-                   else
-                      Set_Etype (Param1, Standard_String);
-                   end if;
- 
-                   Set_Etype (Call, Etype (Callee));
- 
-                   --  Conversion needed in case of an inherited aspect
-                   --  of a derived type.
-                   --
-                   --  ??? Need to do something different here for downward
-                   --  tagged conversion case (which is only possible in the
-                   --  case of a null extension); the current call to
-                   --  Convert_To results in an error message about an illegal
-                   --  downward conversion.
- 
-                   Call := Convert_To (Typ, Call);
- 
-                   Rewrite (N, Call);
-                end;
- 
                 Analyze_And_Resolve (N, Typ);
                 return;
              end if;
--- 3051,3064 ----
                 end;
              end if;
  
!             --  If node is a literal and context type has a user-defined
!             --  literal aspect, rewrite node as a call to the corresponding
!             --  function, which plays the role of an implicit conversion.
  
!             if Nkind (N) in
!                 N_Numeric_Or_String_Literal | N_Identifier
!               and then Has_Applicable_User_Defined_Literal (N, Typ)
              then
                 Analyze_And_Resolve (N, Typ);
                 return;
              end if;
*************** package body Sem_Res is
*** 3070,3075 ****
--- 3136,3167 ----
                       Error_Msg_N ("\use -gnatf for details", N);
                    end if;
  
+                --  Recognize the case of a quantified expression being mistaken
+                --  for an iterated component association because the user
+                --  forgot the "all" or "some" keyword after "for". Because the
+                --  error message starts with "missing ALL", we automatically
+                --  benefit from the associated CODEFIX, which requires that
+                --  the message is located on the identifier following "for"
+                --  in order for the CODEFIX to insert "all" in the right place.
+ 
+                elsif Nkind (N) = N_Aggregate
+                  and then List_Length (Component_Associations (N)) = 1
+                  and then Nkind (First (Component_Associations (N)))
+                    = N_Iterated_Component_Association
+                  and then Is_Boolean_Type (Typ)
+                then
+                   Error_Msg_N -- CODEFIX
+                     ("missing ALL or SOME in quantified expression",
+                      Defining_Identifier (First (Component_Associations (N))));
+ 
+                --  For an operator with no interpretation, check whether
+                --  one of its operands may be a user-defined literal.
+ 
+                elsif Nkind (N) in N_Op
+                  and then Try_User_Defined_Literal (N, Typ)
+                then
+                   return;
+ 
                 else
                    Wrong_Type (N, Typ);
                 end if;
*************** package body Sem_Res is
*** 3088,3093 ****
--- 3180,3206 ----
        --  Only one interpretation
  
        else
+          --  Prevent implicit conversions between access-to-subprogram types
+          --  with different strub modes. Explicit conversions are acceptable in
+          --  some circumstances. We don't have to be concerned about data or
+          --  access-to-data types. Conversions between data types can safely
+          --  drop or add strub attributes from types, because strub effects are
+          --  associated with the locations rather than values. E.g., converting
+          --  a hypothetical Strub_Integer variable to Integer would load the
+          --  value from the variable, enabling stack scrabbing for the
+          --  enclosing subprogram, and then convert the value to Integer. As
+          --  for conversions between access-to-data types, that's no different
+          --  from any other case of type punning.
+ 
+          if Is_Access_Type (Typ)
+            and then Ekind (Designated_Type (Typ)) = E_Subprogram_Type
+            and then Is_Access_Type (Expr_Type)
+            and then Ekind (Designated_Type (Expr_Type)) = E_Subprogram_Type
+          then
+             Check_Same_Strub_Mode
+               (Designated_Type (Typ), Designated_Type (Expr_Type));
+          end if;
+ 
           --  In Ada 2005, if we have something like "X : T := 2 + 2;", where
           --  the "+" on T is abstract, and the operands are of universal type,
           --  the above code will have (incorrectly) resolved the "+" to the
*************** package body Sem_Res is
*** 3326,3332 ****
           end case;
  
           --  Mark relevant use-type and use-package clauses as effective using
!          --  the original node because constant folding may have occured and
           --  removed references that need to be examined.
  
           if Nkind (Original_Node (N)) in N_Op then
--- 3439,3445 ----
           end case;
  
           --  Mark relevant use-type and use-package clauses as effective using
!          --  the original node because constant folding may have occurred and
           --  removed references that need to be examined.
  
           if Nkind (Original_Node (N)) in N_Op then
*************** package body Sem_Res is
*** 3385,3396 ****
           --  Here we are resolving the corresponding expanded body, so we do
           --  need to perform normal freezing.
  
!          --  As elsewhere we do not emit freeze node within a generic. We make
!          --  an exception for entities that are expressions, only to detect
!          --  misuses of deferred constants and preserve the output of various
!          --  tests.
  
!          if not Inside_A_Generic or else Is_Entity_Name (N) then
              Freeze_Expression (N);
           end if;
  
--- 3498,3506 ----
           --  Here we are resolving the corresponding expanded body, so we do
           --  need to perform normal freezing.
  
!          --  As elsewhere we do not emit freeze node within a generic.
  
!          if not Inside_A_Generic then
              Freeze_Expression (N);
           end if;
  
*************** package body Sem_Res is
*** 3446,3452 ****
     procedure Resolve_Actuals (N : Node_Id; Nam : Entity_Id) is
        Loc    : constant Source_Ptr := Sloc (N);
        A      : Node_Id;
-       A_Id   : Entity_Id;
        A_Typ  : Entity_Id := Empty; -- init to avoid warning
        F      : Entity_Id;
        F_Typ  : Entity_Id;
--- 3556,3561 ----
*************** package body Sem_Res is
*** 3670,3676 ****
  
                 if Wrong_Order then
                    Error_Msg_N
!                     ("?P?actuals for this call may be in wrong order", N);
                 end if;
              end;
           end;
--- 3779,3785 ----
  
                 if Wrong_Order then
                    Error_Msg_N
!                     ("?.p?actuals for this call may be in wrong order", N);
                 end if;
              end;
           end;
*************** package body Sem_Res is
*** 3749,3774 ****
              Id : Entity_Id;
  
           begin
!             --  Do not consider nested function calls because they have already
!             --  been processed during their own resolution.
  
!             if Nkind (N) = N_Function_Call then
!                return Skip;
  
!             elsif Is_Entity_Name (N) and then Present (Entity (N)) then
!                Id := Entity (N);
  
-                if Is_Object (Id)
-                  and then Is_Effectively_Volatile_For_Reading (Id)
-                then
-                   Error_Msg_N
-                     ("volatile object cannot appear in this context (SPARK "
-                      & "RM 7.1.3(10))", N);
                    return Skip;
-                end if;
-             end if;
  
!             return OK;
           end Flag_Object;
  
           procedure Flag_Objects is new Traverse_Proc (Flag_Object);
--- 3858,3891 ----
              Id : Entity_Id;
  
           begin
!             case Nkind (N) is
!                --  Do not consider nested function calls because they have
!                --  already been processed during their own resolution.
  
!                when N_Function_Call =>
!                   return Skip;
  
!                when N_Identifier | N_Expanded_Name =>
!                   Id := Entity (N);
! 
!                   if Present (Id)
!                     and then Is_Object (Id)
!                     and then Is_Effectively_Volatile_For_Reading (Id)
!                     and then
!                       not Is_OK_Volatile_Context (Context       => Parent (N),
!                                                   Obj_Ref       => N,
!                                                   Check_Actuals => True)
!                   then
!                      Error_Msg_N
!                        ("volatile object cannot appear in this context"
!                         & " (SPARK RM 7.1.3(10))", N);
!                   end if;
  
                    return Skip;
  
!                when others =>
!                   return OK;
!             end case;
           end Flag_Object;
  
           procedure Flag_Objects is new Traverse_Proc (Flag_Object);
*************** package body Sem_Res is
*** 4747,4752 ****
--- 4864,4876 ----
                 --  Expand_Actuals routine in Exp_Ch6.
              end if;
  
+             --  If the formal is of an unconstrained array subtype with fixed
+             --  lower bound, then sliding to that bound may be needed.
+ 
+             if Is_Fixed_Lower_Bound_Array_Subtype (F_Typ) then
+                Expand_Sliding_Conversion (A, F_Typ);
+             end if;
+ 
              --  An actual associated with an access parameter is implicitly
              --  converted to the anonymous access type of the formal and must
              --  satisfy the legality checks for access conversions.
*************** package body Sem_Res is
*** 4774,4784 ****
  
              --  Check illegal cases of atomic/volatile/VFA actual (RM C.6(12))
  
!             if (Is_By_Reference_Type (Etype (F)) or else Is_Aliased (F))
                and then Comes_From_Source (N)
              then
                 if Is_Atomic_Object (A)
!                  and then not Is_Atomic (Etype (F))
                 then
                    Error_Msg_NE
                      ("cannot pass atomic object to nonatomic formal&",
--- 4898,4908 ----
  
              --  Check illegal cases of atomic/volatile/VFA actual (RM C.6(12))
  
!             if (Is_By_Reference_Type (F_Typ) or else Is_Aliased (F))
                and then Comes_From_Source (N)
              then
                 if Is_Atomic_Object (A)
!                  and then not Is_Atomic (F_Typ)
                 then
                    Error_Msg_NE
                      ("cannot pass atomic object to nonatomic formal&",
*************** package body Sem_Res is
*** 4786,4793 ****
                    Error_Msg_N
                      ("\which is passed by reference (RM C.6(12))", A);
  
!                elsif Is_Volatile_Object (A)
!                  and then not Is_Volatile (Etype (F))
                 then
                    Error_Msg_NE
                      ("cannot pass volatile object to nonvolatile formal&",
--- 4910,4917 ----
                    Error_Msg_N
                      ("\which is passed by reference (RM C.6(12))", A);
  
!                elsif Is_Volatile_Object_Ref (A)
!                  and then not Is_Volatile (F_Typ)
                 then
                    Error_Msg_NE
                      ("cannot pass volatile object to nonvolatile formal&",
*************** package body Sem_Res is
*** 4795,4802 ****
                    Error_Msg_N
                      ("\which is passed by reference (RM C.6(12))", A);
  
!                elsif Is_Volatile_Full_Access_Object (A)
!                  and then not Is_Volatile_Full_Access (Etype (F))
                 then
                    Error_Msg_NE
                      ("cannot pass full access object to nonfull access "
--- 4919,4926 ----
                    Error_Msg_N
                      ("\which is passed by reference (RM C.6(12))", A);
  
!                elsif Is_Volatile_Full_Access_Object_Ref (A)
!                  and then not Is_Volatile_Full_Access (F_Typ)
                 then
                    Error_Msg_NE
                      ("cannot pass full access object to nonfull access "
*************** package body Sem_Res is
*** 4806,4814 ****
                 end if;
  
                 --  Check for nonatomic subcomponent of a full access object
!                --  in Ada 2020 (RM C.6 (12)).
  
!                if Ada_Version >= Ada_2020
                   and then Is_Subcomponent_Of_Full_Access_Object (A)
                   and then not Is_Atomic_Object (A)
                 then
--- 4930,4938 ----
                 end if;
  
                 --  Check for nonatomic subcomponent of a full access object
!                --  in Ada 2022 (RM C.6 (12)).
  
!                if Ada_Version >= Ada_2022
                   and then Is_Subcomponent_Of_Full_Access_Object (A)
                   and then not Is_Atomic_Object (A)
                 then
*************** package body Sem_Res is
*** 4831,4839 ****
              if Is_Controlling_Formal (F) then
                 Set_Is_Controlling_Actual (A);
  
!                if Ekind (Etype (F)) = E_Anonymous_Access_Type then
                    declare
!                      Desig : constant Entity_Id := Designated_Type (Etype (F));
                    begin
                       if Ekind (Desig) = E_Incomplete_Type
                         and then No (Full_View (Desig))
--- 4955,4963 ----
              if Is_Controlling_Formal (F) then
                 Set_Is_Controlling_Actual (A);
  
!                if Ekind (F_Typ) = E_Anonymous_Access_Type then
                    declare
!                      Desig : constant Entity_Id := Designated_Type (F_Typ);
                    begin
                       if Ekind (Desig) = E_Incomplete_Type
                         and then No (Full_View (Desig))
*************** package body Sem_Res is
*** 4852,4861 ****
--- 4976,4990 ----
  
              --  Apply legality rule 3.9.2  (9/1)
  
+             --  Skip this check on helpers and indirect-call wrappers built to
+             --  support class-wide preconditions.
+ 
              if (Is_Class_Wide_Type (A_Typ) or else Is_Dynamically_Tagged (A))
                and then not Is_Class_Wide_Type (F_Typ)
                and then not Is_Controlling_Formal (F)
                and then not In_Instance
+               and then (not Is_Subprogram (Nam)
+                          or else No (Class_Preconditions_Subprogram (Nam)))
              then
                 Error_Msg_N ("class-wide argument not allowed here!", A);
  
*************** package body Sem_Res is
*** 4938,5002 ****
  
              if SPARK_Mode = On and then Comes_From_Source (A) then
  
!                --  An effectively volatile object for reading may act as an
!                --  actual when the corresponding formal is of a non-scalar
!                --  effectively volatile type for reading (SPARK RM 7.1.3(10)).
! 
!                if not Is_Scalar_Type (Etype (F))
!                  and then Is_Effectively_Volatile_For_Reading (Etype (F))
!                then
!                   null;
! 
!                --  An effectively volatile object for reading may act as an
!                --  actual in a call to an instance of Unchecked_Conversion.
!                --  (SPARK RM 7.1.3(10)).
! 
!                elsif Is_Unchecked_Conversion_Instance (Nam) then
!                   null;
! 
!                --  The actual denotes an object
! 
!                elsif Is_Effectively_Volatile_Object_For_Reading (A) then
!                   Error_Msg_N
!                     ("volatile object cannot act as actual in a call (SPARK "
!                      & "RM 7.1.3(10))", A);
! 
!                --  Otherwise the actual denotes an expression. Inspect the
!                --  expression and flag each effectively volatile object
!                --  for reading as illegal because it apprears within an
!                --  interfering context. Note that this is usually done in
!                --  Resolve_Entity_Name, but when the effectively volatile
!                --  object for reading appears as an actual in a call, the
!                --  call must be resolved first.
! 
!                else
!                   Flag_Effectively_Volatile_Objects (A);
!                end if;
! 
!                --  An effectively volatile variable cannot act as an actual
!                --  parameter in a procedure call when the variable has enabled
!                --  property Effective_Reads and the corresponding formal is of
!                --  mode IN (SPARK RM 7.1.3(10)).
! 
!                if Ekind (Nam) = E_Procedure
!                  and then Ekind (F) = E_In_Parameter
!                  and then Is_Entity_Name (A)
!                then
!                   A_Id := Entity (A);
! 
!                   if Ekind (A_Id) = E_Variable
!                     and then Is_Effectively_Volatile_For_Reading (Etype (A_Id))
!                     and then Effective_Reads_Enabled (A_Id)
!                   then
!                      Error_Msg_NE
!                        ("effectively volatile variable & cannot appear as "
!                         & "actual in procedure call", A, A_Id);
  
!                      Error_Msg_Name_1 := Name_Effective_Reads;
!                      Error_Msg_N ("\\variable has enabled property %", A);
!                      Error_Msg_N ("\\corresponding formal has mode IN", A);
!                   end if;
!                end if;
              end if;
  
              --  A formal parameter of a specific tagged type whose related
--- 5067,5080 ----
  
              if SPARK_Mode = On and then Comes_From_Source (A) then
  
!                --  Inspect the expression and flag each effectively volatile
!                --  object for reading as illegal because it appears within
!                --  an interfering context. Note that this is usually done
!                --  in Resolve_Entity_Name, but when the effectively volatile
!                --  object for reading appears as an actual in a call, the call
!                --  must be resolved first.
  
!                Flag_Effectively_Volatile_Objects (A);
              end if;
  
              --  A formal parameter of a specific tagged type whose related
*************** package body Sem_Res is
*** 5004,5012 ****
--- 5082,5094 ----
              --  "False" cannot act as an actual in a subprogram with value
              --  "True" (SPARK RM 6.1.7(3)).
  
+             --  No check needed for helpers and indirect-call wrappers built to
+             --  support class-wide preconditions.
+ 
              if Is_EVF_Expression (A)
                and then Extensions_Visible_Status (Nam) =
                         Extensions_Visible_True
+               and then No (Class_Preconditions_Subprogram (Current_Scope))
              then
                 Error_Msg_N
                   ("formal parameter cannot act as actual parameter when "
*************** package body Sem_Res is
*** 5036,5041 ****
--- 5118,5158 ----
                 end if;
              end if;
  
+             --  (AI12-0397): The target of a subprogram call that occurs within
+             --  the expression of an Default_Initial_Condition aspect and has
+             --  an actual that is the current instance of the type must be
+             --  either a primitive of the type or a class-wide subprogram,
+             --  because the type of the current instance in such an aspect is
+             --  considered to be a notional formal derived type whose only
+             --  operations correspond to the primitives of the enclosing type.
+             --  Nonprimitives can be called, but the current instance must be
+             --  converted rather than passed directly. Note that a current
+             --  instance of a type with DIC will occur as a reference to an
+             --  in-mode formal of an enclosing DIC procedure or partial DIC
+             --  procedure. (It seems that this check should perhaps also apply
+             --  to calls within Type_Invariant'Class, but not Type_Invariant,
+             --  aspects???)
+ 
+             if Nkind (A) = N_Identifier
+               and then Ekind (Entity (A)) = E_In_Parameter
+ 
+               and then Is_Subprogram (Scope (Entity (A)))
+               and then Is_DIC_Procedure (Scope (Entity (A)))
+ 
+               --  We check Comes_From_Source to exclude inherited primitives
+               --  from being flagged, because such subprograms turn out to not
+               --  always have the Is_Primitive flag set. ???
+ 
+               and then Comes_From_Source (Nam)
+ 
+               and then not Is_Primitive (Nam)
+               and then not Is_Class_Wide_Type (F_Typ)
+             then
+                Error_Msg_NE
+                  ("call to nonprimitive & with current instance not allowed " &
+                   "for aspect", A, Nam);
+             end if;
+ 
              Next_Actual (A);
  
           --  Case where actual is not present
*************** package body Sem_Res is
*** 5696,5709 ****
           if not Is_Overloaded (N) then
              T := Etype (N);
              return Base_Type (T) = Base_Type (Standard_Integer)
!               or else T = Universal_Integer
!               or else T = Universal_Real;
           else
              Get_First_Interp (N, Index, It);
              while Present (It.Typ) loop
                 if Base_Type (It.Typ) = Base_Type (Standard_Integer)
!                  or else It.Typ = Universal_Integer
!                  or else It.Typ = Universal_Real
                 then
                    return True;
                 end if;
--- 5813,5824 ----
           if not Is_Overloaded (N) then
              T := Etype (N);
              return Base_Type (T) = Base_Type (Standard_Integer)
!               or else Is_Universal_Numeric_Type (T);
           else
              Get_First_Interp (N, Index, It);
              while Present (It.Typ) loop
                 if Base_Type (It.Typ) = Base_Type (Standard_Integer)
!                  or else Is_Universal_Numeric_Type (It.Typ)
                 then
                    return True;
                 end if;
*************** package body Sem_Res is
*** 5738,5745 ****
  
           elsif Universal_Interpretation (N) = Universal_Real
             and then (T = Base_Type (Standard_Integer)
!                       or else T = Universal_Integer
!                       or else T = Universal_Real)
           then
              --  A universal real can appear in a fixed-type context. We resolve
              --  the literal with that context, even though this might raise an
--- 5853,5859 ----
  
           elsif Universal_Interpretation (N) = Universal_Real
             and then (T = Base_Type (Standard_Integer)
!                       or else Is_Universal_Numeric_Type (T))
           then
              --  A universal real can appear in a fixed-type context. We resolve
              --  the literal with that context, even though this might raise an
*************** package body Sem_Res is
*** 5872,5880 ****
  
        procedure Set_Operand_Type (N : Node_Id) is
        begin
!          if Etype (N) = Universal_Integer
!            or else Etype (N) = Universal_Real
!          then
              Set_Etype (N, T);
           end if;
        end Set_Operand_Type;
--- 5986,5992 ----
  
        procedure Set_Operand_Type (N : Node_Id) is
        begin
!          if Is_Universal_Numeric_Type (Etype (N)) then
              Set_Etype (N, T);
           end if;
        end Set_Operand_Type;
*************** package body Sem_Res is
*** 5899,5905 ****
        --  Set the type of the node to its universal interpretation because
        --  legality checks on an exponentiation operand need the context.
  
!       elsif (B_Typ = Universal_Integer or else B_Typ = Universal_Real)
          and then Present (Universal_Interpretation (L))
          and then Present (Universal_Interpretation (R))
        then
--- 6011,6017 ----
        --  Set the type of the node to its universal interpretation because
        --  legality checks on an exponentiation operand need the context.
  
!       elsif Is_Universal_Numeric_Type (B_Typ)
          and then Present (Universal_Interpretation (L))
          and then Present (Universal_Interpretation (R))
        then
*************** package body Sem_Res is
*** 6012,6020 ****
           end if;
  
        else
!          if (TL = Universal_Integer or else TL = Universal_Real)
                 and then
!             (TR = Universal_Integer or else TR = Universal_Real)
           then
              Check_For_Visible_Operator (N, B_Typ);
           end if;
--- 6124,6132 ----
           end if;
  
        else
!          if Is_Universal_Numeric_Type (TL)
                 and then
!             Is_Universal_Numeric_Type (TR)
           then
              Check_For_Visible_Operator (N, B_Typ);
           end if;
*************** package body Sem_Res is
*** 6124,6136 ****
                       raise Program_Error;
                 end case;
  
-                --  In GNATprove mode, we enable the division check so that
-                --  GNATprove will issue a message if it cannot be proved.
- 
-                if GNATprove_Mode then
-                   Activate_Division_Check (N);
-                end if;
- 
              --  Otherwise just set the flag to check at run time
  
              else
--- 6236,6241 ----
*************** package body Sem_Res is
*** 6645,6651 ****
              Scope_Loop : while Scop /= Standard_Standard loop
                 if Same_Or_Aliased_Subprograms (Nam, Scop) then
  
!                   --  Ada 202x (AI12-0075): Static functions are never allowed
                    --  to make a recursive call, as specified by 6.8(5.4/5).
  
                    if Is_Static_Function (Scop) then
--- 6750,6756 ----
              Scope_Loop : while Scop /= Standard_Standard loop
                 if Same_Or_Aliased_Subprograms (Nam, Scop) then
  
!                   --  Ada 2022 (AI12-0075): Static functions are never allowed
                    --  to make a recursive call, as specified by 6.8(5.4/5).
  
                    if Is_Static_Function (Scop) then
*************** package body Sem_Res is
*** 7076,7082 ****
  
        Warn_On_Overlapping_Actuals (Nam, N);
  
!       --  Ada 202x (AI12-0075): If the call is a static call to a static
        --  expression function, then we want to "inline" the call, replacing
        --  it with the folded static result. This is not done if the checking
        --  for a potentially static expression is enabled or if an error has
--- 7181,7187 ----
  
        Warn_On_Overlapping_Actuals (Nam, N);
  
!       --  Ada 2022 (AI12-0075): If the call is a static call to a static
        --  expression function, then we want to "inline" the call, replacing
        --  it with the folded static result. This is not done if the checking
        --  for a potentially static expression is enabled or if an error has
*************** package body Sem_Res is
*** 7450,7456 ****
        if Bad_Unordered_Enumeration_Reference (N, Etype (L)) then
           Error_Msg_Sloc := Sloc (Etype (L));
           Error_Msg_NE
!            ("comparison on unordered enumeration type& declared#?U?",
              N, Etype (L));
        end if;
  
--- 7555,7561 ----
        if Bad_Unordered_Enumeration_Reference (N, Etype (L)) then
           Error_Msg_Sloc := Sloc (Etype (L));
           Error_Msg_NE
!            ("comparison on unordered enumeration type& declared#?.u?",
              N, Etype (L));
        end if;
  
*************** package body Sem_Res is
*** 7467,7532 ****
       (N   : Node_Id;
        Typ : Entity_Id)
     is
!       Decl                 : Node_Id;
!       Need_Transient_Scope : Boolean := False;
!    begin
!       --  Install the scope created for local declarations, if
!       --  any. The syntax allows a Declare_Expression with no
!       --  declarations, in analogy with block statements.
!       --  Note that that scope has no explicit declaration, but
!       --  appears as the scope of all entities declared therein.
  
!       Decl := First (Actions (N));
!       while Present (Decl) loop
!          exit when Nkind (Decl)
!                      in N_Object_Declaration | N_Object_Renaming_Declaration;
!          Next (Decl);
!       end loop;
  
!       if Present (Decl) then
  
!          --  Need to establish a transient scope in case Expression (N)
!          --  requires actions to be wrapped.
  
!          declare
!             Node : Node_Id;
!          begin
!             Node := First (Actions (N));
!             while Present (Node) loop
!                if Nkind (Node) = N_Object_Declaration
!                  and then Requires_Transient_Scope
!                             (Etype (Defining_Identifier (Node)))
!                then
!                   Need_Transient_Scope := True;
!                   exit;
!                end if;
  
!                Next (Node);
!             end loop;
!          end;
  
!          if Need_Transient_Scope then
!             Establish_Transient_Scope (Decl, True);
!          else
!             Push_Scope (Scope (Defining_Identifier (Decl)));
           end if;
  
!          declare
!             E : Entity_Id := First_Entity (Current_Scope);
!          begin
!             while Present (E) loop
!                Set_Current_Entity (E);
!                Set_Is_Immediately_Visible (E);
!                Next_Entity (E);
!             end loop;
!          end;
  
!          Resolve (Expression (N), Typ);
!          End_Scope;
  
!       else
!          Resolve (Expression (N), Typ);
        end if;
     end Resolve_Declare_Expression;
  
     -----------------------------------------
--- 7572,7647 ----
       (N   : Node_Id;
        Typ : Entity_Id)
     is
!       Expr : constant Node_Id := Expression (N);
  
!       Decl  : Node_Id;
!       Local : Entity_Id := Empty;
  
!       function Replace_Local (N  : Node_Id) return Traverse_Result;
!       --  Use a tree traversal to replace each ocurrence of the name of
!       --  a local object declared in the construct, with the corresponding
!       --  entity. This replaces the usual way to perform name capture by
!       --  visibility, because it is not possible to place on the scope
!       --  stack the fake scope created for the analysis of the local
!       --  declarations; such a scope conflicts with the transient scopes
!       --  that may be generated if the expression includes function calls
!       --  requiring finalization.
  
!       -------------------
!       -- Replace_Local --
!       -------------------
  
!       function Replace_Local (N  : Node_Id) return Traverse_Result is
!       begin
!          --  The identifier may be the prefix of a selected component,
!          --  but not a selector name, because the local entities do not
!          --  have a scope that can be named: a selected component whose
!          --  selector is a homonym of a local entity must denote some
!          --  global entity.
  
!          if Nkind (N) = N_Identifier
!            and then Chars (N) = Chars (Local)
!            and then No (Entity (N))
!            and then
!              (Nkind (Parent (N)) /= N_Selected_Component
!                or else N = Prefix (Parent (N)))
!          then
!             Set_Entity (N, Local);
!             Set_Etype (N, Etype (Local));
!          end if;
  
!          return OK;
!       end Replace_Local;
! 
!       procedure Replace_Local_Ref is new Traverse_Proc (Replace_Local);
! 
!       --  Start of processing for  Resolve_Declare_Expression
! 
!    begin
! 
!       Decl := First (Actions (N));
! 
!       while Present (Decl) loop
!          if Nkind (Decl) in
!             N_Object_Declaration | N_Object_Renaming_Declaration
!               and then Comes_From_Source (Defining_Identifier (Decl))
!          then
!             Local := Defining_Identifier (Decl);
!             Replace_Local_Ref (Expr);
           end if;
  
!          Next (Decl);
!       end loop;
  
!       --  The end of the declarative list is a freeze point for the
!       --  local declarations.
  
!       if Present (Local) then
!          Decl := Parent (Local);
!          Freeze_All (First_Entity (Scope (Local)), Decl);
        end if;
+ 
+       Resolve (Expr, Typ);
     end Resolve_Declare_Expression;
  
     -----------------------------------------
*************** package body Sem_Res is
*** 7646,7653 ****
           Expr    : Node_Id) return Boolean
        is
        begin
!          if Nkind (Context) in
!               N_Assignment_Statement | N_Object_Declaration
             and then Expression (Context) = Expr
           then
              return True;
--- 7761,7767 ----
           Expr    : Node_Id) return Boolean
        is
        begin
!          if Nkind (Context) in N_Assignment_Statement | N_Object_Declaration
             and then Expression (Context) = Expr
           then
              return True;
*************** package body Sem_Res is
*** 7689,7694 ****
--- 7803,7813 ----
           while Present (N) loop
              if Nkind (N) = N_Attribute_Reference then
                 return True;
+ 
+             --  Prevent the search from going too far
+ 
+             elsif Is_Body_Or_Package_Declaration (N) then
+                return False;
              end if;
  
              N := Parent (N);
*************** package body Sem_Res is
*** 7734,7743 ****
  
        --  Case of (sub)type name appearing in a context where an expression
        --  is expected. This is legal if occurrence is a current instance.
!       --  See RM 8.6 (17/3).
  
        elsif Is_Type (E) then
!          if Is_Current_Instance (N) then
              null;
  
           --  Any other use is an error
--- 7853,7864 ----
  
        --  Case of (sub)type name appearing in a context where an expression
        --  is expected. This is legal if occurrence is a current instance.
!       --  See RM 8.6 (17/3). It is also legal if the expression is
!       --  part of a choice pattern for a case stmt/expr having a
!       --  non-discrete selecting expression.
  
        elsif Is_Type (E) then
!          if Is_Current_Instance (N) or else Is_Case_Choice_Pattern (N) then
              null;
  
           --  Any other use is an error
*************** package body Sem_Res is
*** 7831,7837 ****
  
              if Is_Object (E)
                and then Is_Effectively_Volatile_For_Reading (E)
!               and then not Is_OK_Volatile_Context (Par, N)
              then
                 SPARK_Msg_N
                   ("volatile object cannot appear in this context "
--- 7952,7959 ----
  
              if Is_Object (E)
                and then Is_Effectively_Volatile_For_Reading (E)
!               and then
!                 not Is_OK_Volatile_Context (Par, N, Check_Actuals => False)
              then
                 SPARK_Msg_N
                   ("volatile object cannot appear in this context "
*************** package body Sem_Res is
*** 8626,8632 ****
              Set_Etype (N, Any_Type);
              return;
  
!          elsif T = Any_Access
             or else Ekind (T) in E_Allocator_Type | E_Access_Attribute_Type
           then
              T := Find_Unique_Access_Type;
--- 8748,8754 ----
              Set_Etype (N, Any_Type);
              return;
  
!          elsif T = Universal_Access
             or else Ekind (T) in E_Allocator_Type | E_Access_Attribute_Type
           then
              T := Find_Unique_Access_Type;
*************** package body Sem_Res is
*** 8791,8808 ****
                 or else Is_Private_Type (T))
           then
              if Etype (L) /= T then
!                Rewrite (L,
!                  Make_Unchecked_Type_Conversion (Sloc (L),
!                    Subtype_Mark => New_Occurrence_Of (T, Sloc (L)),
!                    Expression   => Relocate_Node (L)));
                 Analyze_And_Resolve (L, T);
              end if;
  
              if (Etype (R)) /= T then
!                Rewrite (R,
!                   Make_Unchecked_Type_Conversion (Sloc (R),
!                     Subtype_Mark => New_Occurrence_Of (Etype (L), Sloc (R)),
!                     Expression   => Relocate_Node (R)));
                 Analyze_And_Resolve (R, T);
              end if;
           end if;
--- 8913,8924 ----
                 or else Is_Private_Type (T))
           then
              if Etype (L) /= T then
!                Rewrite (L, Unchecked_Convert_To (T, L));
                 Analyze_And_Resolve (L, T);
              end if;
  
              if (Etype (R)) /= T then
!                Rewrite (R, Unchecked_Convert_To (Etype (L), R));
                 Analyze_And_Resolve (R, T);
              end if;
           end if;
*************** package body Sem_Res is
*** 9065,9070 ****
--- 9181,9196 ----
        --  that the context in general allows sliding, while a qualified
        --  expression forces equality of bounds.
  
+       Result_Type  : Entity_Id := Typ;
+       --  So in most cases the type of the If_Expression and of its
+       --  dependent expressions is that of the context. However, if
+       --  the expression is the index of an Indexed_Component, we must
+       --  ensure that a proper index check is applied, rather than a
+       --  range check on the index type (which might be discriminant
+       --  dependent). In this case we resolve with the base type of the
+       --  index type, and the index check is generated in the resolution
+       --  of the indexed_component above.
+ 
        -----------------
        -- Apply_Check --
        -----------------
*************** package body Sem_Res is
*** 9088,9097 ****
           else
              Rewrite (Expr,
                Make_Qualified_Expression (Loc,
!                 Subtype_Mark => New_Occurrence_Of (Typ, Loc),
                  Expression   => Relocate_Node (Expr)));
  
!             Analyze_And_Resolve (Expr, Typ);
           end if;
        end Apply_Check;
  
--- 9214,9223 ----
           else
              Rewrite (Expr,
                Make_Qualified_Expression (Loc,
!                 Subtype_Mark => New_Occurrence_Of (Result_Type, Loc),
                  Expression   => Relocate_Node (Expr)));
  
!             Analyze_And_Resolve (Expr, Result_Type);
           end if;
        end Apply_Check;
  
*************** package body Sem_Res is
*** 9110,9115 ****
--- 9236,9248 ----
           return;
        end if;
  
+       if Present (Parent (N))
+         and then (Nkind (Parent (N)) = N_Indexed_Component
+                     or else Nkind (Parent (Parent (N))) = N_Indexed_Component)
+       then
+          Result_Type := Base_Type (Typ);
+       end if;
+ 
        Then_Expr := Next (Condition);
  
        if No (Then_Expr) then
*************** package body Sem_Res is
*** 9119,9125 ****
        Else_Expr := Next (Then_Expr);
  
        Resolve (Condition, Any_Boolean);
!       Resolve (Then_Expr, Typ);
        Apply_Check (Then_Expr);
  
        --  If ELSE expression present, just resolve using the determined type
--- 9252,9258 ----
        Else_Expr := Next (Then_Expr);
  
        Resolve (Condition, Any_Boolean);
!       Resolve (Then_Expr, Result_Type);
        Apply_Check (Then_Expr);
  
        --  If ELSE expression present, just resolve using the determined type
*************** package body Sem_Res is
*** 9133,9139 ****
              Resolve (Else_Expr, Any_Real);
  
           else
!             Resolve (Else_Expr, Typ);
           end if;
  
           Apply_Check (Else_Expr);
--- 9266,9272 ----
              Resolve (Else_Expr, Any_Real);
  
           else
!             Resolve (Else_Expr, Result_Type);
           end if;
  
           Apply_Check (Else_Expr);
*************** package body Sem_Res is
*** 9157,9163 ****
        elsif Root_Type (Typ) = Standard_Boolean then
           Else_Expr :=
             Convert_To (Typ, New_Occurrence_Of (Standard_True, Sloc (N)));
!          Analyze_And_Resolve (Else_Expr, Typ);
           Append_To (Expressions (N), Else_Expr);
  
        else
--- 9290,9296 ----
        elsif Root_Type (Typ) = Standard_Boolean then
           Else_Expr :=
             Convert_To (Typ, New_Occurrence_Of (Standard_True, Sloc (N)));
!          Analyze_And_Resolve (Else_Expr, Result_Type);
           Append_To (Expressions (N), Else_Expr);
  
        else
*************** package body Sem_Res is
*** 9165,9171 ****
           Append_To (Expressions (N), Error);
        end if;
  
!       Set_Etype (N, Typ);
  
        if not Error_Posted (N) then
           Eval_If_Expression (N);
--- 9298,9304 ----
           Append_To (Expressions (N), Error);
        end if;
  
!       Set_Etype (N, Result_Type);
  
        if not Error_Posted (N) then
           Eval_If_Expression (N);
*************** package body Sem_Res is
*** 9205,9211 ****
     -------------------------------
  
     procedure Resolve_Indexed_Component (N : Node_Id; Typ : Entity_Id) is
!       Name       : constant Node_Id := Prefix  (N);
        Expr       : Node_Id;
        Array_Type : Entity_Id := Empty; -- to prevent junk warning
        Index      : Node_Id;
--- 9338,9344 ----
     -------------------------------
  
     procedure Resolve_Indexed_Component (N : Node_Id; Typ : Entity_Id) is
!       Pref       : constant Node_Id := Prefix (N);
        Expr       : Node_Id;
        Array_Type : Entity_Id := Empty; -- to prevent junk warning
        Index      : Node_Id;
*************** package body Sem_Res is
*** 9216,9222 ****
           return;
        end if;
  
!       if Is_Overloaded (Name) then
  
           --  Use the context type to select the prefix that yields the correct
           --  component type.
--- 9349,9355 ----
           return;
        end if;
  
!       if Is_Overloaded (Pref) then
  
           --  Use the context type to select the prefix that yields the correct
           --  component type.
*************** package body Sem_Res is
*** 9225,9235 ****
              I     : Interp_Index;
              It    : Interp;
              I1    : Interp_Index := 0;
-             P     : constant Node_Id := Prefix (N);
              Found : Boolean := False;
  
           begin
!             Get_First_Interp (P, I, It);
              while Present (It.Typ) loop
                 if (Is_Array_Type (It.Typ)
                       and then Covers (Typ, Component_Type (It.Typ)))
--- 9358,9367 ----
              I     : Interp_Index;
              It    : Interp;
              I1    : Interp_Index := 0;
              Found : Boolean := False;
  
           begin
!             Get_First_Interp (Pref, I, It);
              while Present (It.Typ) loop
                 if (Is_Array_Type (It.Typ)
                       and then Covers (Typ, Component_Type (It.Typ)))
*************** package body Sem_Res is
*** 9241,9247 ****
                                   Component_Type (Designated_Type (It.Typ))))
                 then
                    if Found then
!                      It := Disambiguate (P, I1, I, Any_Type);
  
                       if It = No_Interp then
                          Error_Msg_N ("ambiguous prefix for indexing",  N);
--- 9373,9379 ----
                                   Component_Type (Designated_Type (It.Typ))))
                 then
                    if Found then
!                      It := Disambiguate (Pref, I1, I, Any_Type);
  
                       if It = No_Interp then
                          Error_Msg_N ("ambiguous prefix for indexing",  N);
*************** package body Sem_Res is
*** 9266,9276 ****
           end;
  
        else
!          Array_Type := Etype (Name);
        end if;
  
!       Resolve (Name, Array_Type);
!       Array_Type := Get_Actual_Subtype_If_Available (Name);
  
        --  If the prefix's type is an access type, get to the real array type.
        --  Note: we do not apply an access check because an explicit dereference
--- 9398,9408 ----
           end;
  
        else
!          Array_Type := Etype (Pref);
        end if;
  
!       Resolve (Pref, Array_Type);
!       Array_Type := Get_Actual_Subtype_If_Available (Pref);
  
        --  If the prefix's type is an access type, get to the real array type.
        --  Note: we do not apply an access check because an explicit dereference
*************** package body Sem_Res is
*** 9313,9352 ****
           end loop;
        end if;
  
!       Resolve_Implicit_Dereference (Prefix (N));
        Analyze_Dimension (N);
  
        --  Do not generate the warning on suspicious index if we are analyzing
        --  package Ada.Tags; otherwise we will report the warning with the
        --  Prims_Ptr field of the dispatch table.
  
!       if Scope (Etype (Prefix (N))) = Standard_Standard
          or else not
!           Is_RTU (Cunit_Entity (Get_Source_Unit (Etype (Prefix (N)))),
!                   Ada_Tags)
        then
!          Warn_On_Suspicious_Index (Name, First (Expressions (N)));
           Eval_Indexed_Component (N);
        end if;
  
        --  If the array type is atomic and the component is not, then this is
!       --  worth a warning before Ada 2020, since we have a situation where the
        --  access to the component may cause extra read/writes of the atomic
        --  object, or partial word accesses, both of which may be unexpected.
  
        if Nkind (N) = N_Indexed_Component
          and then Is_Atomic_Ref_With_Address (N)
          and then not (Has_Atomic_Components (Array_Type)
!                        or else (Is_Entity_Name (Prefix (N))
                                   and then Has_Atomic_Components
!                                             (Entity (Prefix (N)))))
          and then not Is_Atomic (Component_Type (Array_Type))
!         and then Ada_Version < Ada_2020
        then
           Error_Msg_N
!            ("??access to non-atomic component of atomic array", Prefix (N));
           Error_Msg_N
!            ("??\may cause unexpected accesses to atomic object", Prefix (N));
        end if;
     end Resolve_Indexed_Component;
  
--- 9445,9483 ----
           end loop;
        end if;
  
!       Resolve_Implicit_Dereference (Pref);
        Analyze_Dimension (N);
  
        --  Do not generate the warning on suspicious index if we are analyzing
        --  package Ada.Tags; otherwise we will report the warning with the
        --  Prims_Ptr field of the dispatch table.
  
!       if Scope (Etype (Pref)) = Standard_Standard
          or else not
!           Is_RTU (Cunit_Entity (Get_Source_Unit (Etype (Pref))), Ada_Tags)
        then
!          Warn_On_Suspicious_Index (Pref, First (Expressions (N)));
           Eval_Indexed_Component (N);
        end if;
  
        --  If the array type is atomic and the component is not, then this is
!       --  worth a warning before Ada 2022, since we have a situation where the
        --  access to the component may cause extra read/writes of the atomic
        --  object, or partial word accesses, both of which may be unexpected.
  
        if Nkind (N) = N_Indexed_Component
          and then Is_Atomic_Ref_With_Address (N)
          and then not (Has_Atomic_Components (Array_Type)
!                        or else (Is_Entity_Name (Pref)
                                   and then Has_Atomic_Components
!                                             (Entity (Pref))))
          and then not Is_Atomic (Component_Type (Array_Type))
!         and then Ada_Version < Ada_2022
        then
           Error_Msg_N
!            ("??access to non-atomic component of atomic array", Pref);
           Error_Msg_N
!            ("??\may cause unexpected accesses to atomic object", Pref);
        end if;
     end Resolve_Indexed_Component;
  
*************** package body Sem_Res is
*** 9643,9649 ****
        ----------------------------
  
        procedure Resolve_Set_Membership is
!          Alt  : Node_Id;
  
        begin
           --  If the left operand is overloaded, find type compatible with not
--- 9774,9780 ----
        ----------------------------
  
        procedure Resolve_Set_Membership is
!          Alt : Node_Id;
  
        begin
           --  If the left operand is overloaded, find type compatible with not
*************** package body Sem_Res is
*** 9756,9765 ****
           goto SM_Exit;
  
        elsif not Is_Overloaded (R)
!         and then
!           (Etype (R) = Universal_Integer
!              or else
!            Etype (R) = Universal_Real)
          and then Is_Overloaded (L)
        then
           T := Etype (R);
--- 9887,9893 ----
           goto SM_Exit;
  
        elsif not Is_Overloaded (R)
!         and then Is_Universal_Numeric_Type (Etype (R))
          and then Is_Overloaded (L)
        then
           T := Etype (R);
*************** package body Sem_Res is
*** 10057,10063 ****
                         ("\\interpretation as call yields&", Arg, Typ);
                       Error_Msg_NE
                         ("\\interpretation as indexing of call yields&",
!                          Arg, Component_Type (Typ));
  
                    else
                       Error_Msg_N ("ambiguous operand for concatenation!", Arg);
--- 10185,10191 ----
                         ("\\interpretation as call yields&", Arg, Typ);
                       Error_Msg_NE
                         ("\\interpretation as indexing of call yields&",
!                          Arg, Ctyp);
  
                    else
                       Error_Msg_N ("ambiguous operand for concatenation!", Arg);
*************** package body Sem_Res is
*** 10080,10089 ****
                 end;
              end if;
  
!             Resolve (Arg, Component_Type (Typ));
  
              if Nkind (Arg) = N_String_Literal then
!                Set_Etype (Arg, Component_Type (Typ));
              end if;
  
              if Arg = Left_Opnd (N) then
--- 10208,10237 ----
                 end;
              end if;
  
!             Resolve (Arg, Ctyp);
  
              if Nkind (Arg) = N_String_Literal then
!                Set_Etype (Arg, Ctyp);
! 
!             elsif Is_Scalar_Type (Etype (Arg))
!               and then Compile_Time_Known_Value (Arg)
!             then
!                --  Determine if the out-of-range violation constitutes a
!                --  warning or an error according to the expression base type,
!                --  according to Ada 2022 RM 4.9 (35/2).
! 
!                if Is_Out_Of_Range (Arg, Base_Type (Ctyp)) then
!                   Apply_Compile_Time_Constraint_Error
!                     (Arg, "value not in range of}", CE_Range_Check_Failed,
!                      Ent => Base_Type (Ctyp),
!                      Typ => Base_Type (Ctyp));
! 
!                elsif Is_Out_Of_Range (Arg, Ctyp) then
!                   Apply_Compile_Time_Constraint_Error
!                     (Arg, "value not in range of}??", CE_Range_Check_Failed,
!                      Ent => Ctyp,
!                      Typ => Ctyp);
!                end if;
              end if;
  
              if Arg = Left_Opnd (N) then
*************** package body Sem_Res is
*** 10201,10209 ****
           return;
        end if;
  
!       if Etype (Left_Opnd (N)) = Universal_Integer
!         or else Etype (Left_Opnd (N)) = Universal_Real
!       then
           Check_For_Visible_Operator (N, B_Typ);
        end if;
  
--- 10349,10355 ----
           return;
        end if;
  
!       if Is_Universal_Numeric_Type (Etype (Left_Opnd (N))) then
           Check_For_Visible_Operator (N, B_Typ);
        end if;
  
*************** package body Sem_Res is
*** 10448,10454 ****
        end if;
  
        --  AI12-0100: Once the qualified expression is resolved, check whether
!       --  operand statisfies a static predicate of the target subtype, if any.
        --  In the static expression case, a predicate check failure is an error.
  
        if Has_Predicates (Target_Typ) then
--- 10594,10600 ----
        end if;
  
        --  AI12-0100: Once the qualified expression is resolved, check whether
!       --  operand satisfies a static predicate of the target subtype, if any.
        --  In the static expression case, a predicate check failure is an error.
  
        if Has_Predicates (Target_Typ) then
*************** package body Sem_Res is
*** 10466,10473 ****
--- 10612,10668 ----
        if Typ = Raise_Type then
           Error_Msg_N ("cannot find unique type for raise expression", N);
           Set_Etype (N, Any_Type);
+ 
        else
           Set_Etype (N, Typ);
+ 
+          --  Apply check for required parentheses in the enclosing
+          --  context of raise_expressions (RM 11.3 (2)), including default
+          --  expressions in contexts that can include aspect specifications,
+          --  and ancestor parts of extension aggregates.
+ 
+          declare
+             Par : Node_Id := Parent (N);
+             Parentheses_Found : Boolean := Paren_Count (N) > 0;
+ 
+          begin
+             while Present (Par)
+               and then Nkind (Par) in N_Has_Etype
+             loop
+                if Paren_Count (Par) > 0 then
+                   Parentheses_Found := True;
+                end if;
+ 
+                if Nkind (Par) = N_Extension_Aggregate
+                  and then N = Ancestor_Part (Par)
+                then
+                   exit;
+                end if;
+ 
+                Par := Parent (Par);
+             end loop;
+ 
+             if not Parentheses_Found
+               and then Comes_From_Source (Par)
+               and then
+                 ((Nkind (Par) in N_Modular_Type_Definition
+                                | N_Floating_Point_Definition
+                                | N_Ordinary_Fixed_Point_Definition
+                                | N_Decimal_Fixed_Point_Definition
+                                | N_Extension_Aggregate
+                                | N_Discriminant_Specification
+                                | N_Parameter_Specification
+                                | N_Formal_Object_Declaration)
+ 
+                   or else (Nkind (Par) = N_Object_Declaration
+                     and then
+                       Nkind (Parent (Par)) /= N_Extended_Return_Statement))
+             then
+                Error_Msg_N
+                  ("raise_expression must be parenthesized in this context",
+                    N);
+             end if;
+          end;
        end if;
     end Resolve_Raise_Expression;
  
*************** package body Sem_Res is
*** 10501,10512 ****
                 PL : constant Node_Id := Prefix (Lorig);
                 PH : constant Node_Id := Prefix (Horig);
              begin
!                if Is_Entity_Name (PL)
                   and then Is_Entity_Name (PH)
!                  and then Entity (PL) = Entity (PH)
!                then
!                   return True;
!                end if;
              end;
           end if;
  
--- 10696,10704 ----
                 PL : constant Node_Id := Prefix (Lorig);
                 PH : constant Node_Id := Prefix (Horig);
              begin
!                return Is_Entity_Name (PL)
                   and then Is_Entity_Name (PH)
!                  and then Entity (PL) = Entity (PH);
              end;
           end if;
  
*************** package body Sem_Res is
*** 10542,10548 ****
        then
           Error_Msg_Sloc := Sloc (Typ);
           Error_Msg_NE
!            ("subrange of unordered enumeration type& declared#?U?", N, Typ);
        end if;
  
        Check_Unset_Reference (L);
--- 10734,10740 ----
        then
           Error_Msg_Sloc := Sloc (Typ);
           Error_Msg_NE
!            ("subrange of unordered enumeration type& declared#?.u?", N, Typ);
        end if;
  
        Check_Unset_Reference (L);
*************** package body Sem_Res is
*** 10575,10587 ****
  
        if Is_Discrete_Type (Typ) and then Expander_Active then
           if Is_OK_Static_Expression (L) then
!             Fold_Uint (L, Expr_Value (L), Is_OK_Static_Expression (L));
           end if;
  
           if Is_OK_Static_Expression (H) then
!             Fold_Uint (H, Expr_Value (H), Is_OK_Static_Expression (H));
           end if;
        end if;
     end Resolve_Range;
  
     --------------------------
--- 10767,10803 ----
  
        if Is_Discrete_Type (Typ) and then Expander_Active then
           if Is_OK_Static_Expression (L) then
!             Fold_Uint (L, Expr_Value (L), Static => True);
           end if;
  
           if Is_OK_Static_Expression (H) then
!             Fold_Uint (H, Expr_Value (H), Static => True);
           end if;
        end if;
+ 
+       --  If we have a compile-time-known null range, we warn, because that is
+       --  likely to be a mistake. (Dynamic null ranges make sense, but often
+       --  compile-time-known ones do not.) Warn only if this is in a subtype
+       --  declaration. We do this here, rather than while analyzing a subtype
+       --  declaration, in case we decide to expand the cases. We do not want to
+       --  warn in all cases, because some are idiomatic, such as an empty
+       --  aggregate (1 .. 0 => <>).
+ 
+       --  We don't warn in generics or their instances, because there might be
+       --  some instances where the range is null, and some where it is not,
+       --  which would lead to false alarms.
+ 
+       if not (Inside_A_Generic or In_Instance)
+         and then Comes_From_Source (N)
+         and then Compile_Time_Compare
+           (Low_Bound (N), High_Bound (N), Assume_Valid => True) = GT
+         and then Nkind (Parent (N)) = N_Range_Constraint
+         and then Nkind (Parent (Parent (N))) = N_Subtype_Indication
+         and then Nkind (Parent (Parent (Parent (N)))) = N_Subtype_Declaration
+         and then Is_OK_Static_Range (N)
+       then
+          Error_Msg_N ("null range??", N);
+       end if;
     end Resolve_Range;
  
     --------------------------
*************** package body Sem_Res is
*** 10593,10609 ****
  
     begin
        --  Special processing for fixed-point literals to make sure that the
!       --  value is an exact multiple of small where this is required. We skip
!       --  this for the universal real case, and also for generic types.
  
        if Is_Fixed_Point_Type (Typ)
          and then Typ /= Universal_Fixed
          and then Typ /= Any_Fixed
          and then not Is_Generic_Type (Typ)
        then
           declare
              Val   : constant Ureal := Realval (N);
!             Cintr : constant Ureal := Val / Small_Value (Typ);
              Cint  : constant Uint  := UR_Trunc (Cintr);
              Den   : constant Uint  := Norm_Den (Cintr);
              Stat  : Boolean;
--- 10809,10831 ----
  
     begin
        --  Special processing for fixed-point literals to make sure that the
!       --  value is an exact multiple of the small where this is required. We
!       --  skip this for the universal real case, and also for generic types.
  
        if Is_Fixed_Point_Type (Typ)
          and then Typ /= Universal_Fixed
          and then Typ /= Any_Fixed
          and then not Is_Generic_Type (Typ)
        then
+          --  We must freeze the base type to get the proper value of the small
+ 
+          if not Is_Frozen (Base_Type (Typ)) then
+             Freeze_Fixed_Point_Type (Base_Type (Typ));
+          end if;
+ 
           declare
              Val   : constant Ureal := Realval (N);
!             Cintr : constant Ureal := Val / Small_Value (Base_Type (Typ));
              Cint  : constant Uint  := UR_Trunc (Cintr);
              Den   : constant Uint  := Norm_Den (Cintr);
              Stat  : Boolean;
*************** package body Sem_Res is
*** 10848,10854 ****
        --  resolution was complete to do this, since otherwise we can't tell if
        --  we are an lvalue or not.
  
!       if May_Be_Lvalue (N) then
           Generate_Reference (Entity (S), S, 'm');
        else
           Generate_Reference (Entity (S), S, 'r');
--- 11070,11076 ----
        --  resolution was complete to do this, since otherwise we can't tell if
        --  we are an lvalue or not.
  
!       if Known_To_Be_Assigned (N) then
           Generate_Reference (Entity (S), S, 'm');
        else
           Generate_Reference (Entity (S), S, 'r');
*************** package body Sem_Res is
*** 10874,10880 ****
           if Is_Entity_Name (P)
             and then Has_Deferred_Reference (Entity (P))
           then
!             if May_Be_Lvalue (N) then
                 Generate_Reference (Entity (P), P, 'm');
              else
                 Generate_Reference (Entity (P), P, 'r');
--- 11096,11102 ----
           if Is_Entity_Name (P)
             and then Has_Deferred_Reference (Entity (P))
           then
!             if Known_To_Be_Assigned (N) then
                 Generate_Reference (Entity (P), P, 'm');
              else
                 Generate_Reference (Entity (P), P, 'r');
*************** package body Sem_Res is
*** 10919,10925 ****
        if Nkind (N) = N_Selected_Component then
  
           --  If the record type is atomic and the component is not, then this
!          --  is worth a warning before Ada 2020, since we have a situation
           --  where the access to the component may cause extra read/writes of
           --  the atomic object, or partial word accesses, both of which may be
           --  unexpected.
--- 11141,11147 ----
        if Nkind (N) = N_Selected_Component then
  
           --  If the record type is atomic and the component is not, then this
!          --  is worth a warning before Ada 2022, since we have a situation
           --  where the access to the component may cause extra read/writes of
           --  the atomic object, or partial word accesses, both of which may be
           --  unexpected.
*************** package body Sem_Res is
*** 10927,10933 ****
           if Is_Atomic_Ref_With_Address (N)
             and then not Is_Atomic (Entity (S))
             and then not Is_Atomic (Etype (Entity (S)))
!            and then Ada_Version < Ada_2020
           then
              Error_Msg_N
                ("??access to non-atomic component of atomic record",
--- 11149,11155 ----
           if Is_Atomic_Ref_With_Address (N)
             and then not Is_Atomic (Entity (S))
             and then not Is_Atomic (Etype (Entity (S)))
!            and then Ada_Version < Ada_2022
           then
              Error_Msg_N
                ("??access to non-atomic component of atomic record",
*************** package body Sem_Res is
*** 11058,11064 ****
                       --  of the First_Node call here.
  
                       Error_Msg_F
!                        ("?A?assertion would fail at run time!",
                          Expression
                            (First (Pragma_Argument_Associations (Orig))));
                    end if;
--- 11280,11286 ----
                       --  of the First_Node call here.
  
                       Error_Msg_F
!                        ("?.a?assertion would fail at run time!",
                          Expression
                            (First (Pragma_Argument_Associations (Orig))));
                    end if;
*************** package body Sem_Res is
*** 11089,11095 ****
                       --  comment above for an explanation of why we do this.
  
                       Error_Msg_F
!                        ("?A?check would fail at run time!",
                          Expression
                            (Last (Pragma_Argument_Associations (Orig))));
                    end if;
--- 11311,11317 ----
                       --  comment above for an explanation of why we do this.
  
                       Error_Msg_F
!                        ("?.a?check would fail at run time!",
                          Expression
                            (Last (Pragma_Argument_Associations (Orig))));
                    end if;
*************** package body Sem_Res is
*** 11113,11125 ****
  
     procedure Resolve_Slice (N : Node_Id; Typ : Entity_Id) is
        Drange     : constant Node_Id := Discrete_Range (N);
!       Name       : constant Node_Id := Prefix (N);
        Array_Type : Entity_Id        := Empty;
        Dexpr      : Node_Id          := Empty;
        Index_Type : Entity_Id;
  
     begin
!       if Is_Overloaded (Name) then
  
           --  Use the context type to select the prefix that yields the correct
           --  array type.
--- 11335,11347 ----
  
     procedure Resolve_Slice (N : Node_Id; Typ : Entity_Id) is
        Drange     : constant Node_Id := Discrete_Range (N);
!       Pref       : constant Node_Id := Prefix (N);
        Array_Type : Entity_Id        := Empty;
        Dexpr      : Node_Id          := Empty;
        Index_Type : Entity_Id;
  
     begin
!       if Is_Overloaded (Pref) then
  
           --  Use the context type to select the prefix that yields the correct
           --  array type.
*************** package body Sem_Res is
*** 11128,11138 ****
              I      : Interp_Index;
              I1     : Interp_Index := 0;
              It     : Interp;
-             P      : constant Node_Id := Prefix (N);
              Found  : Boolean := False;
  
           begin
!             Get_First_Interp (P, I,  It);
              while Present (It.Typ) loop
                 if (Is_Array_Type (It.Typ)
                      and then Covers (Typ,  It.Typ))
--- 11350,11359 ----
              I      : Interp_Index;
              I1     : Interp_Index := 0;
              It     : Interp;
              Found  : Boolean := False;
  
           begin
!             Get_First_Interp (Pref, I,  It);
              while Present (It.Typ) loop
                 if (Is_Array_Type (It.Typ)
                      and then Covers (Typ,  It.Typ))
*************** package body Sem_Res is
*** 11141,11147 ****
                             and then Covers (Typ, Designated_Type (It.Typ)))
                 then
                    if Found then
!                      It := Disambiguate (P, I1, I, Any_Type);
  
                       if It = No_Interp then
                          Error_Msg_N ("ambiguous prefix for slicing",  N);
--- 11362,11368 ----
                             and then Covers (Typ, Designated_Type (It.Typ)))
                 then
                    if Found then
!                      It := Disambiguate (Pref, I1, I, Any_Type);
  
                       if It = No_Interp then
                          Error_Msg_N ("ambiguous prefix for slicing",  N);
*************** package body Sem_Res is
*** 11164,11173 ****
           end;
  
        else
!          Array_Type := Etype (Name);
        end if;
  
!       Resolve (Name, Array_Type);
  
        --  If the prefix's type is an access type, get to the real array type.
        --  Note: we do not apply an access check because an explicit dereference
--- 11385,11394 ----
           end;
  
        else
!          Array_Type := Etype (Pref);
        end if;
  
!       Resolve (Pref, Array_Type);
  
        --  If the prefix's type is an access type, get to the real array type.
        --  Note: we do not apply an access check because an explicit dereference
*************** package body Sem_Res is
*** 11183,11194 ****
           --  subtype.
  
           if not Is_Constrained (Array_Type) then
!             Remove_Side_Effects (Prefix (N));
  
              declare
                 Obj : constant Node_Id :=
                         Make_Explicit_Dereference (Sloc (N),
!                          Prefix => New_Copy_Tree (Prefix (N)));
              begin
                 Set_Etype (Obj, Array_Type);
                 Set_Parent (Obj, Parent (N));
--- 11404,11415 ----
           --  subtype.
  
           if not Is_Constrained (Array_Type) then
!             Remove_Side_Effects (Pref);
  
              declare
                 Obj : constant Node_Id :=
                         Make_Explicit_Dereference (Sloc (N),
!                          Prefix => New_Copy_Tree (Pref));
              begin
                 Set_Etype (Obj, Array_Type);
                 Set_Parent (Obj, Parent (N));
*************** package body Sem_Res is
*** 11196,11220 ****
              end;
           end if;
  
!       elsif Is_Entity_Name (Name)
!         or else Nkind (Name) = N_Explicit_Dereference
!         or else (Nkind (Name) = N_Function_Call
!                   and then not Is_Constrained (Etype (Name)))
        then
!          Array_Type := Get_Actual_Subtype (Name);
  
        --  If the name is a selected component that depends on discriminants,
        --  build an actual subtype for it. This can happen only when the name
        --  itself is overloaded; otherwise the actual subtype is created when
        --  the selected component is analyzed.
  
!       elsif Nkind (Name) = N_Selected_Component
          and then Full_Analysis
          and then Depends_On_Discriminant (First_Index (Array_Type))
        then
           declare
              Act_Decl : constant Node_Id :=
!                          Build_Actual_Subtype_Of_Component (Array_Type, Name);
           begin
              Insert_Action (N, Act_Decl);
              Array_Type := Defining_Identifier (Act_Decl);
--- 11417,11451 ----
              end;
           end if;
  
!       --  In CodePeer mode the attribute Image is not expanded, so when it
!       --  acts as a prefix of a slice, we handle it like a call to function
!       --  returning an unconstrained string. Same for the Wide variants of
!       --  attribute Image.
! 
!       elsif Is_Entity_Name (Pref)
!         or else Nkind (Pref) = N_Explicit_Dereference
!         or else (Nkind (Pref) = N_Function_Call
!                   and then not Is_Constrained (Etype (Pref)))
!         or else (CodePeer_Mode
!                   and then Nkind (Pref) = N_Attribute_Reference
!                   and then Attribute_Name (Pref) in Name_Image
!                                                   | Name_Wide_Image
!                                                   | Name_Wide_Wide_Image)
        then
!          Array_Type := Get_Actual_Subtype (Pref);
  
        --  If the name is a selected component that depends on discriminants,
        --  build an actual subtype for it. This can happen only when the name
        --  itself is overloaded; otherwise the actual subtype is created when
        --  the selected component is analyzed.
  
!       elsif Nkind (Pref) = N_Selected_Component
          and then Full_Analysis
          and then Depends_On_Discriminant (First_Index (Array_Type))
        then
           declare
              Act_Decl : constant Node_Id :=
!                          Build_Actual_Subtype_Of_Component (Array_Type, Pref);
           begin
              Insert_Action (N, Act_Decl);
              Array_Type := Defining_Identifier (Act_Decl);
*************** package body Sem_Res is
*** 11227,11234 ****
        --  check applied below (the range check won't get done if the
        --  unconstrained subtype of the 'Image is used).
  
!       elsif Nkind (Name) = N_Slice then
!          Array_Type := Etype (Name);
        end if;
  
        --  Obtain the type of the array index
--- 11458,11465 ----
        --  check applied below (the range check won't get done if the
        --  unconstrained subtype of the 'Image is used).
  
!       elsif Nkind (Pref) = N_Slice then
!          Array_Type := Etype (Pref);
        end if;
  
        --  Obtain the type of the array index
*************** package body Sem_Res is
*** 11251,11277 ****
  
        if Tagged_Type_Expansion
          and then RTU_Loaded (Ada_Tags)
!         and then Nkind (Prefix (N)) = N_Selected_Component
!         and then Present (Entity (Selector_Name (Prefix (N))))
!         and then Entity (Selector_Name (Prefix (N))) =
                     RTE_Record_Component (RE_Prims_Ptr)
        then
           null;
  
!       --  The discrete_range is specified by a subtype indication. Create a
!       --  shallow copy and inherit the type, parent and source location from
!       --  the discrete_range. This ensures that the range check is inserted
!       --  relative to the slice and that the runtime exception points to the
!       --  proper construct.
  
        elsif Is_Entity_Name (Drange) then
!          Dexpr := New_Copy (Scalar_Range (Entity (Drange)));
  
!          Set_Etype  (Dexpr, Etype  (Drange));
!          Set_Parent (Dexpr, Parent (Drange));
!          Set_Sloc   (Dexpr, Sloc   (Drange));
  
!       --  The discrete_range is a regular range. Resolve the bounds and remove
        --  their side effects.
  
        else
--- 11482,11513 ----
  
        if Tagged_Type_Expansion
          and then RTU_Loaded (Ada_Tags)
!         and then Nkind (Pref) = N_Selected_Component
!         and then Present (Entity (Selector_Name (Pref)))
!         and then Entity (Selector_Name (Pref)) =
                     RTE_Record_Component (RE_Prims_Ptr)
        then
           null;
  
!       --  The discrete_range is specified by a subtype name. Create an
!       --  equivalent range attribute, apply checks to this attribute, but
!       --  insert them into the range expression of the slice itself.
  
        elsif Is_Entity_Name (Drange) then
!          Dexpr :=
!            Make_Attribute_Reference
!              (Sloc (Drange),
!               Prefix         =>
!                 New_Occurrence_Of (Entity (Drange), Sloc (Drange)),
!               Attribute_Name => Name_Range);
  
!          Analyze_And_Resolve (Dexpr, Etype  (Drange));
  
!       elsif Nkind (Drange) = N_Subtype_Indication then
!          Dexpr := Range_Expression (Constraint (Drange));
! 
!       --  The discrete_range is a regular range (or a range attribute, which
!       --  will be resolved into a regular range). Resolve the bounds and remove
        --  their side effects.
  
        else
*************** package body Sem_Res is
*** 11286,11292 ****
        end if;
  
        if Present (Dexpr) then
!          Apply_Range_Check (Dexpr, Index_Type);
        end if;
  
        Set_Slice_Subtype (N);
--- 11522,11528 ----
        end if;
  
        if Present (Dexpr) then
!          Apply_Range_Check (Dexpr, Index_Type, Insert_Node => Drange);
        end if;
  
        Set_Slice_Subtype (N);
*************** package body Sem_Res is
*** 11314,11324 ****
        --  Otherwise here is where we check suspicious indexes
  
        if Nkind (Drange) = N_Range then
!          Warn_On_Suspicious_Index (Name, Low_Bound  (Drange));
!          Warn_On_Suspicious_Index (Name, High_Bound (Drange));
        end if;
  
!       Resolve_Implicit_Dereference (Prefix (N));
        Analyze_Dimension (N);
        Eval_Slice (N);
     end Resolve_Slice;
--- 11550,11560 ----
        --  Otherwise here is where we check suspicious indexes
  
        if Nkind (Drange) = N_Range then
!          Warn_On_Suspicious_Index (Pref, Low_Bound  (Drange));
!          Warn_On_Suspicious_Index (Pref, High_Bound (Drange));
        end if;
  
!       Resolve_Implicit_Dereference (Pref);
        Analyze_Dimension (N);
        Eval_Slice (N);
     end Resolve_Slice;
*************** package body Sem_Res is
*** 11537,11543 ****
                   and then Compile_Time_Known_Value (Comp_Typ_Hi)
                 then
                    for J in 1 .. Strlen loop
!                      Char_Val := UI_From_Int (Int (Get_String_Char (Str, J)));
  
                       if Char_Val < Expr_Value (Comp_Typ_Lo)
                         or else Char_Val > Expr_Value (Comp_Typ_Hi)
--- 11773,11779 ----
                   and then Compile_Time_Known_Value (Comp_Typ_Hi)
                 then
                    for J in 1 .. Strlen loop
!                      Char_Val := UI_From_CC (Get_String_Char (Str, J));
  
                       if Char_Val < Expr_Value (Comp_Typ_Lo)
                         or else Char_Val > Expr_Value (Comp_Typ_Hi)
*************** package body Sem_Res is
*** 11545,11551 ****
                          Apply_Compile_Time_Constraint_Error
                            (N, "character out of range??",
                             CE_Range_Check_Failed,
!                            Loc => Source_Ptr (Int (Loc) + J));
                       end if;
                    end loop;
  
--- 11781,11787 ----
                          Apply_Compile_Time_Constraint_Error
                            (N, "character out of range??",
                             CE_Range_Check_Failed,
!                            Loc => Loc + Source_Ptr (J));
                       end if;
                    end loop;
  
*************** package body Sem_Res is
*** 11562,11568 ****
        --  heavy artillery for this situation, but it is hard work to avoid.
  
        declare
!          Lits : constant List_Id    := New_List;
           P    : Source_Ptr := Loc + 1;
           C    : Char_Code;
  
--- 11798,11804 ----
        --  heavy artillery for this situation, but it is hard work to avoid.
  
        declare
!          Lits : constant List_Id := New_List;
           P    : Source_Ptr := Loc + 1;
           C    : Char_Code;
  
*************** package body Sem_Res is
*** 11980,11986 ****
        end if;
  
        --  Ada 2012: Once the type conversion is resolved, check whether the
!       --  operand statisfies a static predicate of the target subtype, if any.
        --  In the static expression case, a predicate check failure is an error.
  
        if Has_Predicates (Target_Typ) then
--- 12216,12222 ----
        end if;
  
        --  Ada 2012: Once the type conversion is resolved, check whether the
!       --  operand satisfies a static predicate of the target subtype, if any.
        --  In the static expression case, a predicate check failure is an error.
  
        if Has_Predicates (Target_Typ) then
*************** package body Sem_Res is
*** 12045,12060 ****
  
        --  Deal with universal cases
  
!       if Etype (R) = Universal_Integer
!            or else
!          Etype (R) = Universal_Real
!       then
           Check_For_Visible_Operator (N, B_Typ);
        end if;
  
        Set_Etype (N, B_Typ);
        Resolve (R, B_Typ);
  
        --  Generate warning for expressions like abs (x mod 2)
  
        if Warn_On_Redundant_Constructs
--- 12281,12315 ----
  
        --  Deal with universal cases
  
!       if Is_Universal_Numeric_Type (Etype (R)) then
           Check_For_Visible_Operator (N, B_Typ);
        end if;
  
        Set_Etype (N, B_Typ);
        Resolve (R, B_Typ);
  
+       --  Generate warning for negative literal of a modular type, unless it is
+       --  enclosed directly in a type qualification or a type conversion, as it
+       --  is likely not what the user intended. We don't issue the warning for
+       --  the common use of -1 to denote OxFFFF_FFFF...
+ 
+       if Warn_On_Suspicious_Modulus_Value
+         and then Nkind (N) = N_Op_Minus
+         and then Nkind (R) = N_Integer_Literal
+         and then Is_Modular_Integer_Type (B_Typ)
+         and then Nkind (Parent (N)) not in N_Qualified_Expression
+                                          | N_Type_Conversion
+         and then Expr_Value (R) > Uint_1
+       then
+          Error_Msg_N
+            ("?.m?negative literal of modular type is in fact positive", N);
+          Error_Msg_Uint_1 := (-Expr_Value (R)) mod Modulus (B_Typ);
+          Error_Msg_Uint_2 := Expr_Value (R);
+          Error_Msg_N ("\do you really mean^ when writing -^ '?", N);
+          Error_Msg_N
+            ("\if you do, use qualification to avoid this warning", N);
+       end if;
+ 
        --  Generate warning for expressions like abs (x mod 2)
  
        if Warn_On_Redundant_Constructs
*************** package body Sem_Res is
*** 12496,12505 ****
        --  the point where actions for the slice are analyzed). Note that this
        --  is different from freezing the itype immediately, which might be
        --  premature (e.g. if the slice is within a transient scope). This needs
!       --  to be done only if expansion is enabled, or in GNATprove mode to
!       --  capture the associated run-time exceptions if any.
  
!       elsif Expander_Active or GNATprove_Mode then
           Ensure_Defined (Typ => Slice_Subtype, N => N);
        end if;
     end Set_Slice_Subtype;
--- 12751,12759 ----
        --  the point where actions for the slice are analyzed). Note that this
        --  is different from freezing the itype immediately, which might be
        --  premature (e.g. if the slice is within a transient scope). This needs
!       --  to be done only if expansion is enabled.
  
!       elsif Expander_Active then
           Ensure_Defined (Typ => Slice_Subtype, N => N);
        end if;
     end Set_Slice_Subtype;
*************** package body Sem_Res is
*** 12630,12639 ****
              Set_Etype          (Array_Subtype, Base_Type (Typ));
              Set_Is_Constrained (Array_Subtype, True);
  
!             Rewrite (N,
!               Make_Unchecked_Type_Conversion (Loc,
!                 Subtype_Mark => New_Occurrence_Of (Array_Subtype, Loc),
!                 Expression   => Relocate_Node (N)));
              Set_Etype (N, Array_Subtype);
           end;
        end if;
--- 12884,12890 ----
              Set_Etype          (Array_Subtype, Base_Type (Typ));
              Set_Is_Constrained (Array_Subtype, True);
  
!             Rewrite (N, Unchecked_Convert_To (Array_Subtype, N));
              Set_Etype (N, Array_Subtype);
           end;
        end if;
*************** package body Sem_Res is
*** 12713,12718 ****
--- 12964,13039 ----
        end if;
     end Simplify_Type_Conversion;
  
+    ------------------------------
+    -- Try_User_Defined_Literal --
+    ------------------------------
+ 
+    function Try_User_Defined_Literal
+      (N   : Node_Id;
+       Typ : Entity_Id) return Boolean
+    is
+    begin
+       if Nkind (N) in N_Op_Add | N_Op_Divide | N_Op_Mod | N_Op_Multiply
+         | N_Op_Rem | N_Op_Subtract
+       then
+ 
+          --  Both operands must have the same type as the context.
+          --  (ignoring for now fixed-point and exponentiation ops).
+ 
+          if Has_Applicable_User_Defined_Literal (Right_Opnd (N), Typ) then
+             Resolve (Left_Opnd (N), Typ);
+             Analyze_And_Resolve (N, Typ);
+             return True;
+          end if;
+ 
+          if
+            Has_Applicable_User_Defined_Literal (Left_Opnd (N), Typ)
+          then
+             Resolve (Right_Opnd (N), Typ);
+             Analyze_And_Resolve (N, Typ);
+             return True;
+ 
+          else
+             return False;
+          end if;
+ 
+       elsif Nkind (N) in N_Binary_Op then
+          --  For other operators the context does not impose a type on
+          --  the operands, but their types must match.
+ 
+          if (Nkind (Left_Opnd (N))
+            not in N_Integer_Literal | N_String_Literal | N_Real_Literal)
+          and then
+            Has_Applicable_User_Defined_Literal
+              (Right_Opnd (N), Etype (Left_Opnd (N)))
+          then
+             Analyze_And_Resolve (N, Typ);
+             return True;
+ 
+          elsif (Nkind (Right_Opnd (N))
+            not in N_Integer_Literal | N_String_Literal | N_Real_Literal)
+          and then
+            Has_Applicable_User_Defined_Literal
+              (Left_Opnd (N), Etype (Right_Opnd (N)))
+          then
+             Analyze_And_Resolve (N, Typ);
+             return True;
+          else
+             return False;
+          end if;
+ 
+       elsif Nkind (N) in N_Unary_Op
+         and then
+           Has_Applicable_User_Defined_Literal (Right_Opnd (N), Typ)
+       then
+          Analyze_And_Resolve (N, Typ);
+          return True;
+ 
+       else   --  Other operators
+          return False;
+       end if;
+    end Try_User_Defined_Literal;
+ 
     -----------------------------
     -- Unique_Fixed_Point_Type --
     -----------------------------
*************** package body Sem_Res is
*** 12851,12857 ****
        function In_Instance_Code return Boolean;
        --  Return True if expression is within an instance but is not in one of
        --  the actuals of the instantiation. Type conversions within an instance
!       --  are not rechecked because type visbility may lead to spurious errors,
        --  but conversions in an actual for a formal object must be checked.
  
        function Is_Discrim_Of_Bad_Access_Conversion_Argument
--- 13172,13178 ----
        function In_Instance_Code return Boolean;
        --  Return True if expression is within an instance but is not in one of
        --  the actuals of the instantiation. Type conversions within an instance
!       --  are not rechecked because type visibility may lead to spurious errors
        --  but conversions in an actual for a formal object must be checked.
  
        function Is_Discrim_Of_Bad_Access_Conversion_Argument
*************** package body Sem_Res is
*** 13570,13581 ****
              then
                 if Is_Itype (Opnd_Type) then
  
                    --  Implicit conversions aren't allowed for objects of an
                    --  anonymous access type, since such objects have nonstatic
                    --  levels in Ada 2012.
  
!                   if Nkind (Associated_Node_For_Itype (Opnd_Type)) =
!                        N_Object_Declaration
                    then
                       Conversion_Error_N
                         ("implicit conversion of stand-alone anonymous "
--- 13891,13914 ----
              then
                 if Is_Itype (Opnd_Type) then
  
+                   --  When applying restriction No_Dynamic_Accessibility_Check,
+                   --  implicit conversions are allowed when the operand type is
+                   --  not deeper than the target type.
+ 
+                   if No_Dynamic_Accessibility_Checks_Enabled (N) then
+                      if Type_Access_Level (Opnd_Type)
+                           > Deepest_Type_Access_Level (Target_Type)
+                      then
+                         Conversion_Error_N
+                           ("operand has deeper level than target", Operand);
+                      end if;
+ 
                    --  Implicit conversions aren't allowed for objects of an
                    --  anonymous access type, since such objects have nonstatic
                    --  levels in Ada 2012.
  
!                   elsif Nkind (Associated_Node_For_Itype (Opnd_Type))
!                           = N_Object_Declaration
                    then
                       Conversion_Error_N
                         ("implicit conversion of stand-alone anonymous "
*************** package body Sem_Res is
*** 13628,13639 ****
              --  the target type is anonymous access as well - see RM 3.10.2
              --  (10.3/3).
  
!             elsif Type_Access_Level (Opnd_Type) >
!                     Deepest_Type_Access_Level (Target_Type)
!               and then (Nkind (Associated_Node_For_Itype (Opnd_Type)) /=
!                          N_Function_Specification
!                         or else Ekind (Target_Type) in
!                                   Anonymous_Access_Kind)
  
                --  Check we are not in a return value ???
  
--- 13961,13976 ----
              --  the target type is anonymous access as well - see RM 3.10.2
              --  (10.3/3).
  
!             --  Note that when the restriction No_Dynamic_Accessibility_Checks
!             --  is in effect wei also want to proceed with the conversion check
!             --  described above.
! 
!             elsif Type_Access_Level (Opnd_Type, Assoc_Ent => Operand)
!                     > Deepest_Type_Access_Level (Target_Type)
!               and then (Nkind (Associated_Node_For_Itype (Opnd_Type))
!                           /= N_Function_Specification
!                         or else Ekind (Target_Type) in Anonymous_Access_Kind
!                         or else No_Dynamic_Accessibility_Checks_Enabled (N))
  
                --  Check we are not in a return value ???
  
*************** package body Sem_Res is
*** 13889,13895 ****
              end;
           end if;
  
!          return True;
  
        --  Remote access to subprogram types
  
--- 14226,14240 ----
              end;
           end if;
  
!          --  Check that the strub modes are compatible.
!          --  We wish to reject explicit conversions only for
!          --  incompatible modes.
! 
!          return Conversion_Check
!                   (Compatible_Strub_Modes
!                      (Designated_Type (Target_Type),
!                       Designated_Type (Opnd_Type)),
!                    "incompatible `strub` modes");
  
        --  Remote access to subprogram types
  
*************** package body Sem_Res is
*** 13915,13921 ****
                Designated_Type (Corresponding_Remote_Type (Opnd_Type)),
              Err_Loc =>
                N);
!          return True;
  
        --  If it was legal in the generic, it's legal in the instance
  
--- 14260,14275 ----
                Designated_Type (Corresponding_Remote_Type (Opnd_Type)),
              Err_Loc =>
                N);
! 
!          --  Check that the strub modes are compatible.
!          --  We wish to reject explicit conversions only for
!          --  incompatible modes.
! 
!          return Conversion_Check
!                   (Compatible_Strub_Modes
!                      (Designated_Type (Target_Type),
!                       Designated_Type (Opnd_Type)),
!                    "incompatible `strub` modes");
  
        --  If it was legal in the generic, it's legal in the instance
  
*************** package body Sem_Res is
*** 13952,13958 ****
        then
           Conversion_Error_N ("target type must be general access type!", N);
           Conversion_Error_NE -- CODEFIX
!             ("add ALL to }!", N, Target_Type);
           return False;
  
        --  Here we have a real conversion error
--- 14306,14312 ----
        then
           Conversion_Error_N ("target type must be general access type!", N);
           Conversion_Error_NE -- CODEFIX
!             ("\add ALL to }!", N, Target_Type);
           return False;
  
        --  Here we have a real conversion error
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_res.ads gcc-12.1.0/gcc/ada/sem_res.ads
*** gcc-11.3.0/gcc/ada/sem_res.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_res.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** with Types; use Types;
*** 31,37 ****
  
  package Sem_Res is
  
!    --  As described in Sem_Ch4, the type resolution proceeds in two phases.
     --  The first phase is a bottom up pass that is achieved during the
     --  recursive traversal performed by the Analyze procedures. This phase
     --  determines unambiguous types, and collects sets of possible types
--- 31,37 ----
  
  package Sem_Res is
  
!    --  As described in Sem_Type, the type resolution proceeds in two phases.
     --  The first phase is a bottom up pass that is achieved during the
     --  recursive traversal performed by the Analyze procedures. This phase
     --  determines unambiguous types, and collects sets of possible types
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_scil.adb gcc-12.1.0/gcc/ada/sem_scil.adb
*** gcc-11.3.0/gcc/ada/sem_scil.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_scil.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
***************
*** 23,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Einfo;   use Einfo;
! with Nlists;  use Nlists;
! with Rtsfind; use Rtsfind;
! with Sem_Aux; use Sem_Aux;
! with Sinfo;   use Sinfo;
! with Stand;   use Stand;
! with SCIL_LL; use SCIL_LL;
  
  package body Sem_SCIL is
  
--- 23,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Nlists;         use Nlists;
! with Rtsfind;        use Rtsfind;
! with Sem_Aux;        use Sem_Aux;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Stand;          use Stand;
! with SCIL_LL;        use SCIL_LL;
  
  package body Sem_SCIL is
  
*************** package body Sem_SCIL is
*** 71,83 ****
                 --  Interface types are unsupported
  
                 if Is_Interface (Ctrl_Typ)
!                  or else (RTE_Available (RE_Interface_Tag)
!                             and then Ctrl_Typ = RTE (RE_Interface_Tag))
                 then
                    null;
  
                 else
!                   pragma Assert (Ctrl_Typ = RTE (RE_Tag));
                    null;
                 end if;
  
--- 74,85 ----
                 --  Interface types are unsupported
  
                 if Is_Interface (Ctrl_Typ)
!                  or else Is_RTE (Ctrl_Typ, RE_Interface_Tag)
                 then
                    null;
  
                 else
!                   pragma Assert (Is_RTE (Ctrl_Typ, RE_Tag));
                    null;
                 end if;
  
*************** package body Sem_SCIL is
*** 94,101 ****
                 --  Interface types are unsupported.
  
                 if Is_Interface (Ctrl_Typ)
!                  or else (RTE_Available (RE_Interface_Tag)
!                            and then Ctrl_Typ = RTE (RE_Interface_Tag))
                   or else (Is_Access_Type (Ctrl_Typ)
                             and then
                               Is_Interface
--- 96,102 ----
                 --  Interface types are unsupported.
  
                 if Is_Interface (Ctrl_Typ)
!                  or else Is_RTE (Ctrl_Typ, RE_Interface_Tag)
                   or else (Is_Access_Type (Ctrl_Typ)
                             and then
                               Is_Interface
*************** package body Sem_SCIL is
*** 106,117 ****
  
                 else
                    pragma Assert
!                     (Ctrl_Typ = RTE (RE_Tag)
                         or else
                           (Is_Access_Type (Ctrl_Typ)
!                            and then Available_View
!                                       (Base_Type (Designated_Type (Ctrl_Typ)))
!                                         = RTE (RE_Tag)));
                    null;
                 end if;
  
--- 107,120 ----
  
                 else
                    pragma Assert
!                     (Is_RTE (Ctrl_Typ, RE_Tag)
                         or else
                           (Is_Access_Type (Ctrl_Typ)
!                             and then
!                           Is_RTE
!                             (Available_View
!                                (Base_Type (Designated_Type (Ctrl_Typ))),
!                              RE_Tag)));
                    null;
                 end if;
  
*************** package body Sem_SCIL is
*** 167,173 ****
                 --  tag of the tested object (i.e. Obj.Tag).
  
                 when N_Selected_Component =>
!                   pragma Assert (Etype (Ctrl_Tag) = RTE (RE_Tag));
                    null;
  
                 when others =>
--- 170,176 ----
                 --  tag of the tested object (i.e. Obj.Tag).
  
                 when N_Selected_Component =>
!                   pragma Assert (Is_RTE (Etype (Ctrl_Tag), RE_Tag));
                    null;
  
                 when others =>
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_scil.ads gcc-12.1.0/gcc/ada/sem_scil.ads
*** gcc-11.3.0/gcc/ada/sem_scil.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_scil.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2009-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_smem.adb gcc-12.1.0/gcc/ada/sem_smem.adb
*** gcc-11.3.0/gcc/ada/sem_smem.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_smem.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
***************
*** 23,35 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;   use Atree;
! with Einfo;   use Einfo;
! with Errout;  use Errout;
! with Namet;   use Namet;
! with Sem_Aux; use Sem_Aux;
! with Sinfo;   use Sinfo;
! with Snames;  use Snames;
  
  package body Sem_Smem is
  
--- 23,38 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Namet;          use Namet;
! with Sem_Aux;        use Sem_Aux;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Snames;         use Snames;
  
  package body Sem_Smem is
  
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_smem.ads gcc-12.1.0/gcc/ada/sem_smem.ads
*** gcc-11.3.0/gcc/ada/sem_smem.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_smem.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_type.adb gcc-12.1.0/gcc/ada/sem_type.adb
*** gcc-11.3.0/gcc/ada/sem_type.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_type.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,54 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
  with Alloc;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Nlists;   use Nlists;
! with Errout;   use Errout;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Opt;      use Opt;
! with Output;   use Output;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Ch6;  use Sem_Ch6;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Ch12; use Sem_Ch12;
! with Sem_Disp; use Sem_Disp;
! with Sem_Dist; use Sem_Dist;
! with Sem_Util; use Sem_Util;
! with Stand;    use Stand;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
  with Table;
! with Treepr;   use Treepr;
! with Uintp;    use Uintp;
  
  package body Sem_Type is
  
--- 23,60 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
  with Alloc;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Nlists;         use Nlists;
! with Errout;         use Errout;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Opt;            use Opt;
! with Output;         use Output;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Ch6;        use Sem_Ch6;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Ch12;       use Sem_Ch12;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Dist;       use Sem_Dist;
! with Sem_Util;       use Sem_Util;
! with Stand;          use Stand;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Snames;         use Snames;
  with Table;
! with Treepr;         use Treepr;
! with Uintp;          use Uintp;
! 
! with GNAT.HTable;    use GNAT.HTable;
  
  package body Sem_Type is
  
*************** package body Sem_Type is
*** 60,80 ****
     --  their interpretations. An overloaded node has an entry in Interp_Map,
     --  which in turn contains a pointer into the All_Interp array. The
     --  interpretations of a given node are contiguous in All_Interp. Each set
!    --  of interpretations is terminated with the marker No_Interp. In order to
!    --  speed up the retrieval of the interpretations of an overloaded node, the
!    --  Interp_Map table is accessed by means of a simple hashing scheme, and
!    --  the entries in Interp_Map are chained. The heads of clash lists are
!    --  stored in array Headers.
  
!    --              Headers        Interp_Map          All_Interp
  
!    --                 _            +-----+             +--------+
!    --                |_|           |_____|         --->|interp1 |
!    --                |_|---------->|node |         |   |interp2 |
!    --                |_|           |index|---------|   |nointerp|
!    --                |_|           |next |             |        |
!    --                              |-----|             |        |
!    --                              +-----+             +--------+
  
     --  This scheme does not currently reclaim interpretations. In principle,
     --  after a unit is compiled, all overloadings have been resolved, and the
--- 66,82 ----
     --  their interpretations. An overloaded node has an entry in Interp_Map,
     --  which in turn contains a pointer into the All_Interp array. The
     --  interpretations of a given node are contiguous in All_Interp. Each set
!    --  of interpretations is terminated with the marker No_Interp.
  
!    --     Interp_Map           All_Interp
  
!    --      +-----+             +--------+
!    --      |     |         --->|interp1 |
!    --      |_____|         |   |interp2 |
!    --      |index|---------|   |nointerp|
!    --      |-----|             |        |
!    --      |     |             |        |
!    --      +-----+             +--------+
  
     --  This scheme does not currently reclaim interpretations. In principle,
     --  after a unit is compiled, all overloadings have been resolved, and the
*************** package body Sem_Type is
*** 89,116 ****
       Table_Increment      => Alloc.All_Interp_Increment,
       Table_Name           => "All_Interp");
  
!    type Interp_Ref is record
!       Node  : Node_Id;
!       Index : Interp_Index;
!       Next  : Int;
!    end record;
! 
!    Header_Size : constant Int := 2 ** 12;
!    No_Entry    : constant Int := -1;
!    Headers     : array (0 .. Header_Size) of Int := (others => No_Entry);
  
!    package Interp_Map is new Table.Table (
!      Table_Component_Type => Interp_Ref,
!      Table_Index_Type     => Int,
!      Table_Low_Bound      => 0,
!      Table_Initial        => Alloc.Interp_Map_Initial,
!      Table_Increment      => Alloc.Interp_Map_Increment,
!      Table_Name           => "Interp_Map");
  
!    function Hash (N : Node_Id) return Int;
     --  A trivial hashing function for nodes, used to insert an overloaded
     --  node into the Interp_Map table.
  
     -------------------------------------
     -- Handling of Overload Resolution --
     -------------------------------------
--- 91,116 ----
       Table_Increment      => Alloc.All_Interp_Increment,
       Table_Name           => "All_Interp");
  
!    Header_Max : constant := 3079;
!    --  The number of hash buckets; an arbitrary prime number
  
!    subtype Header_Num is Integer range 0 .. Header_Max - 1;
  
!    function Hash (N : Node_Id) return Header_Num;
     --  A trivial hashing function for nodes, used to insert an overloaded
     --  node into the Interp_Map table.
  
+    package Interp_Map is new Simple_HTable
+      (Header_Num => Header_Num,
+       Element    => Interp_Index,
+       No_Element => -1,
+       Key        => Node_Id,
+       Hash       => Hash,
+       Equal      => "=");
+ 
+    Last_Overloaded : Node_Id := Empty;
+    --  Overloaded node after initializing a new collection of intepretation
+ 
     -------------------------------------
     -- Handling of Overload Resolution --
     -------------------------------------
*************** package body Sem_Type is
*** 235,241 ****
           if Ada_Version >= Ada_2005 then
              if Nkind (N) in N_Binary_Op then
                 Abstr_Op := Binary_Op_Interp_Has_Abstract_Op (N, Name);
!             elsif Nkind (N) = N_Function_Call then
                 Abstr_Op := Function_Interp_Has_Abstract_Op (N, Name);
              end if;
           end if;
--- 235,243 ----
           if Ada_Version >= Ada_2005 then
              if Nkind (N) in N_Binary_Op then
                 Abstr_Op := Binary_Op_Interp_Has_Abstract_Op (N, Name);
!             elsif Nkind (N) = N_Function_Call
!               and then Ekind (Name) = E_Function
!             then
                 Abstr_Op := Function_Interp_Has_Abstract_Op (N, Name);
              end if;
           end if;
*************** package body Sem_Type is
*** 243,248 ****
--- 245,257 ----
           Get_First_Interp (N, I, It);
           while Present (It.Nam) loop
  
+             --  Avoid making duplicate entries in overloads
+ 
+             if Name = It.Nam
+               and then Base_Type (It.Typ) = Base_Type (T)
+             then
+                return;
+ 
              --  A user-defined subprogram hides another declared at an outer
              --  level, or one that is use-visible. So return if previous
              --  definition hides new one (which is either in an outer
*************** package body Sem_Type is
*** 252,258 ****
              --  If this is a universal operation, retain the operator in case
              --  preference rule applies.
  
!             if (((Ekind (Name) = E_Function or else Ekind (Name) = E_Procedure)
                     and then Ekind (Name) = Ekind (It.Nam))
                   or else (Ekind (Name) = E_Operator
                             and then Ekind (It.Nam) = E_Function))
--- 261,267 ----
              --  If this is a universal operation, retain the operator in case
              --  preference rule applies.
  
!             elsif ((Ekind (Name) in E_Function | E_Procedure
                     and then Ekind (Name) = Ekind (It.Nam))
                   or else (Ekind (Name) = E_Operator
                             and then Ekind (It.Nam) = E_Function))
*************** package body Sem_Type is
*** 296,308 ****
                    return;
                 end if;
  
-             --  Avoid making duplicate entries in overloads
- 
-             elsif Name = It.Nam
-               and then Base_Type (It.Typ) = Base_Type (T)
-             then
-                return;
- 
              --  Otherwise keep going
  
              else
--- 305,310 ----
*************** package body Sem_Type is
*** 444,449 ****
--- 446,457 ----
                     Find_Dispatching_Type (E))
           then
              Add_One_Interp (N, Interface_Alias (E), T);
+ 
+          --  Otherwise this is the first interpretation, N has type Any_Type
+          --  and we must place the new type on the node.
+ 
+          else
+             Set_Etype (N, T);
           end if;
  
           return;
*************** package body Sem_Type is
*** 479,487 ****
        --  node or the interpretation that is present is for a different
        --  node. In both cases add a new interpretation to the table.
  
!       elsif Interp_Map.Last < 0
          or else
!           (Interp_Map.Table (Interp_Map.Last).Node /= N
              and then not Is_Overloaded (N))
        then
           New_Interps (N);
--- 487,495 ----
        --  node or the interpretation that is present is for a different
        --  node. In both cases add a new interpretation to the table.
  
!       elsif No (Last_Overloaded)
          or else
!           (Last_Overloaded /= N
              and then not Is_Overloaded (N))
        then
           New_Interps (N);
*************** package body Sem_Type is
*** 764,770 ****
        function Real_Actual (T : Entity_Id) return Entity_Id;
        --  If an actual in an inner instance is the formal of an enclosing
        --  generic, the actual in the enclosing instance is the one that can
!       --  create an accidental ambiguity, and the check on compatibily of
        --  generic actual types must use this enclosing actual.
  
        ----------------------
--- 772,778 ----
        function Real_Actual (T : Entity_Id) return Entity_Id;
        --  If an actual in an inner instance is the formal of an enclosing
        --  generic, the actual in the enclosing instance is the one that can
!       --  create an accidental ambiguity, and the check on compatibility of
        --  generic actual types must use this enclosing actual.
  
        ----------------------
*************** package body Sem_Type is
*** 907,916 ****
        elsif     (T2 = Universal_Integer and then Is_Integer_Type (T1))
          or else (T2 = Universal_Real    and then Is_Real_Type (T1))
          or else (T2 = Universal_Fixed   and then Is_Fixed_Point_Type (T1))
          or else (T2 = Any_Fixed         and then Is_Fixed_Point_Type (T1))
          or else (T2 = Any_Character     and then Is_Character_Type (T1))
          or else (T2 = Any_String        and then Is_String_Type (T1))
-         or else (T2 = Any_Access        and then Is_Access_Type (T1))
        then
           return True;
  
--- 915,924 ----
        elsif     (T2 = Universal_Integer and then Is_Integer_Type (T1))
          or else (T2 = Universal_Real    and then Is_Real_Type (T1))
          or else (T2 = Universal_Fixed   and then Is_Fixed_Point_Type (T1))
+         or else (T2 = Universal_Access  and then Is_Access_Type (T1))
          or else (T2 = Any_Fixed         and then Is_Fixed_Point_Type (T1))
          or else (T2 = Any_Character     and then Is_Character_Type (T1))
          or else (T2 = Any_String        and then Is_String_Type (T1))
        then
           return True;
  
*************** package body Sem_Type is
*** 1020,1029 ****
        elsif T2 = Any_Composite and then Is_Aggregate_Type (T1) then
           return True;
  
!       --  In Ada_2020, an aggregate is compatible with the type that
!       --  as the ccorrespoding aspect.
  
!       elsif Ada_Version >= Ada_2020
          and then T2 = Any_Composite
          and then Present (Find_Aspect (T1, Aspect_Aggregate))
        then
--- 1028,1037 ----
        elsif T2 = Any_Composite and then Is_Aggregate_Type (T1) then
           return True;
  
!       --  In Ada_2022, an aggregate is compatible with the type that
!       --  as the corresponding aspect.
  
!       elsif Ada_Version >= Ada_2022
          and then T2 = Any_Composite
          and then Present (Find_Aspect (T1, Aspect_Aggregate))
        then
*************** package body Sem_Type is
*** 1207,1213 ****
                         and then Is_Access_Type (T2)
                         and then Designated_Type (T1) = Designated_Type (T2))
                     or else
!                      (T1 = Any_Access
                         and then Is_Access_Type (Underlying_Type (T2)))
                     or else
                       (T2 = Any_Composite
--- 1215,1221 ----
                         and then Is_Access_Type (T2)
                         and then Designated_Type (T1) = Designated_Type (T2))
                     or else
!                      (T1 = Universal_Access
                         and then Is_Access_Type (Underlying_Type (T2)))
                     or else
                       (T2 = Any_Composite
*************** package body Sem_Type is
*** 1403,1409 ****
             and then Nkind (Unit_Declaration_Node (S)) =
                                           N_Subprogram_Renaming_Declaration
  
!            --  Why the Comes_From_Source test here???
  
             and then not Comes_From_Source (Unit_Declaration_Node (S))
  
--- 1411,1419 ----
             and then Nkind (Unit_Declaration_Node (S)) =
                                           N_Subprogram_Renaming_Declaration
  
!            --  Determine if the renaming came from source or was generated as a
!            --  a result of generic expansion since the actual is represented by
!            --  a constructed subprogram renaming.
  
             and then not Comes_From_Source (Unit_Declaration_Node (S))
  
*************** package body Sem_Type is
*** 1460,1466 ****
              then
                 return True;
  
!             --  ??? There are possibly other cases to consider
  
              else
                 return False;
--- 1470,1477 ----
              then
                 return True;
  
!             --  Formal_Typ is a private view, or Opnd_Typ and Formal_Typ are
!             --  compatible only on a base-type basis.
  
              else
                 return False;
*************** package body Sem_Type is
*** 1810,1835 ****
        It2  := It;
        Nam2 := It.Nam;
  
!       --  Check whether one of the entities is an Ada 2005/2012 and we are
!       --  operating in an earlier mode, in which case we discard the Ada
!       --  2005/2012 entity, so that we get proper Ada 95 overload resolution.
  
        if Ada_Version < Ada_2005 then
!          if Is_Ada_2005_Only (Nam1) or else Is_Ada_2012_Only (Nam1) then
              return It2;
!          elsif Is_Ada_2005_Only (Nam2) or else Is_Ada_2012_Only (Nam1) then
              return It1;
           end if;
-       end if;
  
!       --  Check whether one of the entities is an Ada 2012 entity and we are
!       --  operating in Ada 2005 mode, in which case we discard the Ada 2012
!       --  entity, so that we get proper Ada 2005 overload resolution.
  
!       if Ada_Version = Ada_2005 then
!          if Is_Ada_2012_Only (Nam1) then
              return It2;
!          elsif Is_Ada_2012_Only (Nam2) then
              return It1;
           end if;
        end if;
--- 1821,1862 ----
        It2  := It;
        Nam2 := It.Nam;
  
!       --  Check whether one of the entities is an Ada 2005/2012/2022 and we
!       --  are operating in an earlier mode, in which case we discard the Ada
!       --  2005/2012/2022 entity, so that we get proper Ada 95 overload
!       --  resolution.
  
        if Ada_Version < Ada_2005 then
!          if Is_Ada_2005_Only (Nam1)
!            or else Is_Ada_2012_Only (Nam1)
!            or else Is_Ada_2022_Only (Nam1)
!          then
              return It2;
! 
!          elsif Is_Ada_2005_Only (Nam2)
!            or else Is_Ada_2012_Only (Nam2)
!            or else Is_Ada_2022_Only (Nam2)
!          then
              return It1;
           end if;
  
!       --  Check whether one of the entities is an Ada 2012/2022 entity and we
!       --  are operating in Ada 2005 mode, in which case we discard the Ada 2012
!       --  Ada 2022 entity, so that we get proper Ada 2005 overload resolution.
  
!       elsif Ada_Version = Ada_2005 then
!          if Is_Ada_2012_Only (Nam1) or else Is_Ada_2022_Only (Nam1) then
              return It2;
!          elsif Is_Ada_2012_Only (Nam2) or else Is_Ada_2022_Only (Nam2) then
!             return It1;
!          end if;
! 
!       --  Ditto for Ada 2012 vs Ada 2022.
! 
!       elsif Ada_Version = Ada_2012 then
!          if Is_Ada_2022_Only (Nam1) then
!             return It2;
!          elsif Is_Ada_2022_Only (Nam2) then
              return It1;
           end if;
        end if;
*************** package body Sem_Type is
*** 1857,1864 ****
              begin
                 Get_First_Interp (N, I, It);
                 while Present (It.Typ) loop
!                   if (It.Typ = Universal_Integer
!                        or else It.Typ = Universal_Real)
                      and then (Typ = Any_Type or else Covers (Typ, It.Typ))
                    then
                       return It;
--- 1884,1890 ----
              begin
                 Get_First_Interp (N, I, It);
                 while Present (It.Typ) loop
!                   if Is_Universal_Numeric_Type (It.Typ)
                      and then (Typ = Any_Type or else Covers (Typ, It.Typ))
                    then
                       return It;
*************** package body Sem_Type is
*** 2232,2247 ****
        end if;
     end Disambiguate;
  
-    ---------------------
-    -- End_Interp_List --
-    ---------------------
- 
-    procedure End_Interp_List is
-    begin
-       All_Interp.Table (All_Interp.Last) := No_Interp;
-       All_Interp.Increment_Last;
-    end End_Interp_List;
- 
     -------------------------
     -- Entity_Matches_Spec --
     -------------------------
--- 2258,2263 ----
*************** package body Sem_Type is
*** 2288,2294 ****
                 --  apply preference rule.
  
                 if TR /= Any_Type then
!                   if (T = Universal_Integer or else T = Universal_Real)
                      and then It.Typ = T
                    then
                       TR := It.Typ;
--- 2304,2310 ----
                 --  apply preference rule.
  
                 if TR /= Any_Type then
!                   if Is_Universal_Numeric_Type (T)
                      and then It.Typ = T
                    then
                       TR := It.Typ;
*************** package body Sem_Type is
*** 2343,2361 ****
        Form_Parm : Node_Id;
  
     begin
!       --  Why is check on E needed below ???
!       --  In any case this para needs comments ???
  
-       if Is_Overloaded (N) and then Is_Overloadable (E) then
           Act_Parm  := First_Actual (N);
           Form_Parm := First_Formal (E);
           while Present (Act_Parm) and then Present (Form_Parm) loop
              Act := Act_Parm;
  
              if Nkind (Act) = N_Parameter_Association then
                 Act := Explicit_Actual_Parameter (Act);
              end if;
  
              Abstr_Op := Has_Abstract_Op (Act, Etype (Form_Parm));
  
              if Present (Abstr_Op) then
--- 2359,2382 ----
        Form_Parm : Node_Id;
  
     begin
!       if Is_Overloaded (N) then
!          --  Move through the formals and actuals of the call to
!          --  determine if an abstract interpretation exists.
  
           Act_Parm  := First_Actual (N);
           Form_Parm := First_Formal (E);
           while Present (Act_Parm) and then Present (Form_Parm) loop
              Act := Act_Parm;
  
+             --  Extract the actual from a parameter association
+ 
              if Nkind (Act) = N_Parameter_Association then
                 Act := Explicit_Actual_Parameter (Act);
              end if;
  
+             --  Use the actual and the type of its correponding formal to test
+             --  for an abstract interpretation and return it when found.
+ 
              Abstr_Op := Has_Abstract_Op (Act, Etype (Form_Parm));
  
              if Present (Abstr_Op) then
*************** package body Sem_Type is
*** 2367,2372 ****
--- 2388,2395 ----
           end loop;
        end if;
  
+       --  Otherwise, return empty
+ 
        return Empty;
     end Function_Interp_Has_Abstract_Op;
  
*************** package body Sem_Type is
*** 2380,2386 ****
        It : out Interp)
     is
        Int_Ind : Interp_Index;
-       Map_Ptr : Int;
        O_N     : Node_Id;
  
     begin
--- 2403,2408 ----
*************** package body Sem_Type is
*** 2398,2418 ****
           O_N := N;
        end if;
  
!       Map_Ptr := Headers (Hash (O_N));
!       while Map_Ptr /= No_Entry loop
!          if Interp_Map.Table (Map_Ptr).Node = O_N then
!             Int_Ind := Interp_Map.Table (Map_Ptr).Index;
!             It := All_Interp.Table (Int_Ind);
!             I := Int_Ind;
!             return;
!          else
!             Map_Ptr := Interp_Map.Table (Map_Ptr).Next;
!          end if;
!       end loop;
  
        --  Procedure should never be called if the node has no interpretations
  
!       raise Program_Error;
     end Get_First_Interp;
  
     ---------------------
--- 2420,2435 ----
           O_N := N;
        end if;
  
!       Int_Ind := Interp_Map.Get (O_N);
  
        --  Procedure should never be called if the node has no interpretations
  
!       if Int_Ind < 0 then
!          raise Program_Error;
!       end if;
! 
!       I  := Int_Ind;
!       It := All_Interp.Table (Int_Ind);
     end Get_First_Interp;
  
     ---------------------
*************** package body Sem_Type is
*** 2430,2437 ****
     -------------------------
  
     function Has_Compatible_Type
!      (N   : Node_Id;
!       Typ : Entity_Id) return Boolean
     is
        I  : Interp_Index;
        It : Interp;
--- 2447,2455 ----
     -------------------------
  
     function Has_Compatible_Type
!      (N              : Node_Id;
!       Typ            : Entity_Id;
!       For_Comparison : Boolean := False) return Boolean
     is
        I  : Interp_Index;
        It : Interp;
*************** package body Sem_Type is
*** 2441,2451 ****
           return False;
        end if;
  
!       if Nkind (N) = N_Subtype_Indication
!         or else not Is_Overloaded (N)
!       then
!          return
!            Covers (Typ, Etype (N))
  
              --  Ada 2005 (AI-345): The context may be a synchronized interface.
              --  If the type is already frozen use the corresponding_record
--- 2459,2466 ----
           return False;
        end if;
  
!       if Nkind (N) = N_Subtype_Indication or else not Is_Overloaded (N) then
!          if Covers (Typ, Etype (N))
  
              --  Ada 2005 (AI-345): The context may be a synchronized interface.
              --  If the type is already frozen use the corresponding_record
*************** package body Sem_Type is
*** 2464,2474 ****
                 and then Covers (Corresponding_Record_Type (Typ), Etype (N)))
  
             or else
-              (not Is_Tagged_Type (Typ)
-                and then Ekind (Typ) /= E_Anonymous_Access_Type
-                and then Covers (Etype (N), Typ))
- 
-            or else
               (Nkind (N) = N_Integer_Literal
                 and then Present (Find_Aspect (Typ, Aspect_Integer_Literal)))
  
--- 2479,2484 ----
*************** package body Sem_Type is
*** 2478,2484 ****
  
             or else
               (Nkind (N) = N_String_Literal
!                and then Present (Find_Aspect (Typ, Aspect_String_Literal)));
  
        --  Overloaded case
  
--- 2488,2503 ----
  
             or else
               (Nkind (N) = N_String_Literal
!                and then Present (Find_Aspect (Typ, Aspect_String_Literal)))
! 
!            or else
!              (For_Comparison
!                and then not Is_Tagged_Type (Typ)
!                and then Ekind (Typ) /= E_Anonymous_Access_Type
!                and then Covers (Etype (N), Typ))
!          then
!             return True;
!          end if;
  
        --  Overloaded case
  
*************** package body Sem_Type is
*** 2493,2516 ****
                 --  Ada 2005 (AI-345)
  
                or else
!                 (Is_Concurrent_Type (It.Typ)
                    and then Present (Corresponding_Record_Type
                                                               (Etype (It.Typ)))
                    and then Covers (Typ, Corresponding_Record_Type
                                                               (Etype (It.Typ))))
  
!               or else (not Is_Tagged_Type (Typ)
!                          and then Ekind (Typ) /= E_Anonymous_Access_Type
!                          and then Covers (It.Typ, Typ))
              then
                 return True;
              end if;
  
              Get_Next_Interp (I, It);
           end loop;
- 
-          return False;
        end if;
     end Has_Compatible_Type;
  
     ---------------------
--- 2512,2538 ----
                 --  Ada 2005 (AI-345)
  
                or else
!                 (Is_Record_Type (Typ)
!                   and then Is_Concurrent_Type (It.Typ)
                    and then Present (Corresponding_Record_Type
                                                               (Etype (It.Typ)))
                    and then Covers (Typ, Corresponding_Record_Type
                                                               (Etype (It.Typ))))
  
!              or else
!                (For_Comparison
!                  and then not Is_Tagged_Type (Typ)
!                  and then Ekind (Typ) /= E_Anonymous_Access_Type
!                  and then Covers (It.Typ, Typ))
              then
                 return True;
              end if;
  
              Get_Next_Interp (I, It);
           end loop;
        end if;
+ 
+       return False;
     end Has_Compatible_Type;
  
     ---------------------
*************** package body Sem_Type is
*** 2545,2556 ****
     -- Hash --
     ----------
  
!    function Hash (N : Node_Id) return Int is
     begin
!       --  Nodes have a size that is power of two, so to select significant
!       --  bits only we remove the low-order bits.
! 
!       return ((Int (N) / 2 ** 5) mod Header_Size);
     end Hash;
  
     --------------
--- 2567,2575 ----
     -- Hash --
     ----------
  
!    function Hash (N : Node_Id) return Header_Num is
     begin
!       return Header_Num (N mod Header_Max);
     end Hash;
  
     --------------
*************** package body Sem_Type is
*** 2575,2582 ****
     procedure Init_Interp_Tables is
     begin
        All_Interp.Init;
!       Interp_Map.Init;
!       Headers := (others => No_Entry);
     end Init_Interp_Tables;
  
     -----------------------------------
--- 2594,2600 ----
     procedure Init_Interp_Tables is
     begin
        All_Interp.Init;
!       Interp_Map.Reset;
     end Init_Interp_Tables;
  
     -----------------------------------
*************** package body Sem_Type is
*** 3094,3140 ****
     -----------------
  
     procedure New_Interps (N : Node_Id) is
-       Map_Ptr : Int;
- 
     begin
        All_Interp.Append (No_Interp);
  
!       Map_Ptr := Headers (Hash (N));
! 
!       if Map_Ptr = No_Entry then
! 
!          --  Place new node at end of table
! 
!          Interp_Map.Increment_Last;
!          Headers (Hash (N)) := Interp_Map.Last;
! 
!       else
!          --   Place node at end of chain, or locate its previous entry
! 
!          loop
!             if Interp_Map.Table (Map_Ptr).Node = N then
! 
!                --  Node is already in the table, and is being rewritten.
!                --  Start a new interp section, retain hash link.
! 
!                Interp_Map.Table (Map_Ptr).Node  := N;
!                Interp_Map.Table (Map_Ptr).Index := All_Interp.Last;
!                Set_Is_Overloaded (N, True);
!                return;
! 
!             else
!                exit when Interp_Map.Table (Map_Ptr).Next = No_Entry;
!                Map_Ptr := Interp_Map.Table (Map_Ptr).Next;
!             end if;
!          end loop;
! 
!          --  Chain the new node
! 
!          Interp_Map.Increment_Last;
!          Interp_Map.Table (Map_Ptr).Next := Interp_Map.Last;
!       end if;
! 
!       Interp_Map.Table (Interp_Map.Last) := (N, All_Interp.Last, No_Entry);
        Set_Is_Overloaded (N, True);
     end New_Interps;
  
--- 3112,3123 ----
     -----------------
  
     procedure New_Interps (N : Node_Id) is
     begin
        All_Interp.Append (No_Interp);
  
!       --  Add or rewrite the existing node
!       Last_Overloaded := N;
!       Interp_Map.Set (N, All_Interp.Last);
        Set_Is_Overloaded (N, True);
     end New_Interps;
  
*************** package body Sem_Type is
*** 3319,3326 ****
     ------------------
  
     procedure Save_Interps (Old_N : Node_Id; New_N : Node_Id) is
!       Map_Ptr : Int;
!       O_N     : Node_Id := Old_N;
  
     begin
        if Is_Overloaded (Old_N) then
--- 3302,3309 ----
     ------------------
  
     procedure Save_Interps (Old_N : Node_Id; New_N : Node_Id) is
!       Old_Ind : Interp_Index;
!       O_N     : Node_Id;
  
     begin
        if Is_Overloaded (Old_N) then
*************** package body Sem_Type is
*** 3330,3347 ****
             and then Is_Overloaded (Selector_Name (Old_N))
           then
              O_N := Selector_Name (Old_N);
           end if;
  
!          Map_Ptr := Headers (Hash (O_N));
! 
!          while Interp_Map.Table (Map_Ptr).Node /= O_N loop
!             Map_Ptr := Interp_Map.Table (Map_Ptr).Next;
!             pragma Assert (Map_Ptr /= No_Entry);
!          end loop;
  
           New_Interps (New_N);
!          Interp_Map.Table (Interp_Map.Last).Index :=
!            Interp_Map.Table (Map_Ptr).Index;
        end if;
     end Save_Interps;
  
--- 3313,3327 ----
             and then Is_Overloaded (Selector_Name (Old_N))
           then
              O_N := Selector_Name (Old_N);
+          else
+             O_N := Old_N;
           end if;
  
!          Old_Ind := Interp_Map.Get (O_N);
!          pragma Assert (Old_Ind >= 0);
  
           New_Interps (New_N);
!          Interp_Map.Set (New_N, Old_Ind);
        end if;
     end Save_Interps;
  
*************** package body Sem_Type is
*** 3408,3419 ****
        elsif T1 = Any_Character and then Is_Character_Type (T2) then
           return B2;
  
!       elsif T1 = Any_Access
          and then (Is_Access_Type (T2) or else Is_Remote_Access (T2))
        then
           return T2;
  
!       elsif T2 = Any_Access
          and then (Is_Access_Type (T1) or else Is_Remote_Access (T1))
        then
           return T1;
--- 3388,3399 ----
        elsif T1 = Any_Character and then Is_Character_Type (T2) then
           return B2;
  
!       elsif T1 = Universal_Access
          and then (Is_Access_Type (T2) or else Is_Remote_Access (T2))
        then
           return T2;
  
!       elsif T2 = Universal_Access
          and then (Is_Access_Type (T1) or else Is_Remote_Access (T1))
        then
           return T1;
*************** package body Sem_Type is
*** 3421,3427 ****
        --  In an instance, the specific type may have a private view. Use full
        --  view to check legality.
  
!       elsif T2 = Any_Access
          and then Is_Private_Type (T1)
          and then Present (Full_View (T1))
          and then Is_Access_Type (Full_View (T1))
--- 3401,3407 ----
        --  In an instance, the specific type may have a private view. Use full
        --  view to check legality.
  
!       elsif T2 = Universal_Access
          and then Is_Private_Type (T1)
          and then Present (Full_View (T1))
          and then Is_Access_Type (Full_View (T1))
*************** package body Sem_Type is
*** 3458,3464 ****
        --  Ada 2005 (AI-251): T1 is a concrete type that implements the
        --  class-wide interface T2
  
!       elsif Is_Class_Wide_Type (T2)
          and then Is_Interface (Etype (T2))
          and then Interface_Present_In_Ancestor (Typ   => T1,
                                                  Iface => Etype (T2))
--- 3438,3445 ----
        --  Ada 2005 (AI-251): T1 is a concrete type that implements the
        --  class-wide interface T2
  
!       elsif Is_Tagged_Type (T1)
!         and then Is_Class_Wide_Type (T2)
          and then Is_Interface (Etype (T2))
          and then Interface_Present_In_Ancestor (Typ   => T1,
                                                  Iface => Etype (T2))
*************** package body Sem_Type is
*** 3646,3666 ****
        Print_Tree_Node (It.Abstract_Op);
     end Write_Interp;
  
-    ----------------------
-    -- Write_Interp_Ref --
-    ----------------------
- 
-    procedure Write_Interp_Ref (Map_Ptr : Int) is
-    begin
-       Write_Str (" Node:  ");
-       Write_Int (Int (Interp_Map.Table (Map_Ptr).Node));
-       Write_Str (" Index: ");
-       Write_Int (Int (Interp_Map.Table (Map_Ptr).Index));
-       Write_Str (" Next:  ");
-       Write_Int (Interp_Map.Table (Map_Ptr).Next);
-       Write_Eol;
-    end Write_Interp_Ref;
- 
     ---------------------
     -- Write_Overloads --
     ---------------------
--- 3627,3632 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_type.ads gcc-12.1.0/gcc/ada/sem_type.ads
*** gcc-11.3.0/gcc/ada/sem_type.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_type.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sem_Type is
*** 85,91 ****
     --  with the appropriate use clause. The global variable Candidate_Type is
     --  set in Add_One_Interp whenever an interpretation might be legal for an
     --  operator if the type were directly visible. This variable is used in
!    --  sem_ch4 when no legal interpretation is found.
  
     Candidate_Type : Entity_Id;
  
--- 85,91 ----
     --  with the appropriate use clause. The global variable Candidate_Type is
     --  set in Add_One_Interp whenever an interpretation might be legal for an
     --  operator if the type were directly visible. This variable is used in
!    --  Sem_Ch4 when no legal interpretation is found.
  
     Candidate_Type : Entity_Id;
  
*************** package Sem_Type is
*** 94,100 ****
     -----------------
  
     procedure Init_Interp_Tables;
!    --  Invoked by gnatf when processing multiple files
  
     procedure Collect_Interps (N : Node_Id);
     --  Invoked when the name N has more than one visible interpretation. This
--- 94,100 ----
     -----------------
  
     procedure Init_Interp_Tables;
!    --  Initialize data structures for overload resolution
  
     procedure Collect_Interps (N : Node_Id);
     --  Invoked when the name N has more than one visible interpretation. This
*************** package Sem_Type is
*** 130,138 ****
     --  always Boolean, and we use Opnd_Type, which is a candidate type for one
     --  of the operands of N, to check visibility.
  
-    procedure End_Interp_List;
-    --  End the list of interpretations of current node
- 
     procedure Get_First_Interp
       (N  : Node_Id;
        I  : out Interp_Index;
--- 130,135 ----
*************** package Sem_Type is
*** 189,199 ****
     --  right operand, which has one interpretation compatible with that of L.
     --  Return the type intersection of the two.
  
!    function Has_Compatible_Type (N : Node_Id; Typ : Entity_Id) return Boolean;
     --  Verify that some interpretation of the node N has a type compatible with
     --  Typ. If N is not overloaded, then its unique type must be compatible
     --  with Typ. Otherwise iterate through the interpretations of N looking for
!    --  a compatible one.
  
     function Hides_Op (F : Entity_Id; Op : Entity_Id) return Boolean;
     --  A user-defined function hides a predefined operator if it matches the
--- 186,202 ----
     --  right operand, which has one interpretation compatible with that of L.
     --  Return the type intersection of the two.
  
!    function Has_Compatible_Type
!      (N              : Node_Id;
!       Typ            : Entity_Id;
!       For_Comparison : Boolean := False) return Boolean;
     --  Verify that some interpretation of the node N has a type compatible with
     --  Typ. If N is not overloaded, then its unique type must be compatible
     --  with Typ. Otherwise iterate through the interpretations of N looking for
!    --  a compatible one. If For_Comparison is true, the function is invoked for
!    --  a comparison (or equality) operator and also needs to verify the reverse
!    --  compatibility, because the implementation of type resolution for these
!    --  operators is not fully symmetrical.
  
     function Hides_Op (F : Entity_Id; Op : Entity_Id) return Boolean;
     --  A user-defined function hides a predefined operator if it matches the
*************** package Sem_Type is
*** 246,253 ****
     --  in the signature of an inherited operation must carry the derived type.
  
     function Is_Subtype_Of (T1 : Entity_Id; T2 : Entity_Id) return Boolean;
!    --  Checks whether T1 is any subtype of T2 directly or indirectly. Applies
!    --  only to scalar subtypes???
  
     function Operator_Matches_Spec (Op, New_S : Entity_Id) return Boolean;
     --  Used to resolve subprograms renaming operators, and calls to user
--- 249,255 ----
     --  in the signature of an inherited operation must carry the derived type.
  
     function Is_Subtype_Of (T1 : Entity_Id; T2 : Entity_Id) return Boolean;
!    --  Checks whether T1 is any subtype of T2 directly or indirectly
  
     function Operator_Matches_Spec (Op, New_S : Entity_Id) return Boolean;
     --  Used to resolve subprograms renaming operators, and calls to user
*************** package Sem_Type is
*** 268,277 ****
     procedure Write_Interp (It : Interp);
     --  Debugging procedure to display an Interp
  
-    procedure Write_Interp_Ref (Map_Ptr : Int);
-    --  Debugging procedure to display entry in Interp_Map. Would not be needed
-    --  if it were possible to debug instantiations of Table.
- 
     procedure Write_Overloads (N : Node_Id);
     --  Debugging procedure to output info on possibly overloaded entities for
     --  specified node.
--- 270,275 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_util.adb gcc-12.1.0/gcc/ada/sem_util.adb
*** gcc-11.3.0/gcc/ada/sem_util.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_util.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,75 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Casing;   use Casing;
! with Checks;   use Checks;
! with Debug;    use Debug;
! with Elists;   use Elists;
! with Errout;   use Errout;
! with Erroutc;  use Erroutc;
! with Exp_Ch3;  use Exp_Ch3;
! with Exp_Ch11; use Exp_Ch11;
! with Exp_Util; use Exp_Util;
! with Fname;    use Fname;
! with Freeze;   use Freeze;
! with Itypes;   use Itypes;
! with Lib;      use Lib;
! with Lib.Xref; use Lib.Xref;
! with Namet.Sp; use Namet.Sp;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Output;   use Output;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Aux;  use Sem_Aux;
! 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_Ch13; use Sem_Ch13;
! with Sem_Disp; use Sem_Disp;
! with Sem_Elab; use Sem_Elab;
! with Sem_Eval; use Sem_Eval;
! with Sem_Prag; use Sem_Prag;
! with Sem_Res;  use Sem_Res;
! with Sem_Warn; use Sem_Warn;
! with Sem_Type; use Sem_Type;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Stand;    use Stand;
  with Style;
! with Stringt;  use Stringt;
! with Targparm; use Targparm;
! with Tbuild;   use Tbuild;
! with Ttypes;   use Ttypes;
! with Uname;    use Uname;
  
  with GNAT.Heap_Sort_G;
! with GNAT.HTable; use GNAT.HTable;
  
  package body Sem_Util is
  
--- 23,78 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Casing;         use Casing;
! with Checks;         use Checks;
! with Debug;          use Debug;
! with Einfo.Utils;    use Einfo.Utils;
! with Elists;         use Elists;
! with Errout;         use Errout;
! with Erroutc;        use Erroutc;
! with Exp_Ch3;        use Exp_Ch3;
! with Exp_Ch11;       use Exp_Ch11;
! with Exp_Util;       use Exp_Util;
! with Fname;          use Fname;
! with Freeze;         use Freeze;
! with Itypes;         use Itypes;
! with Lib;            use Lib;
! with Lib.Xref;       use Lib.Xref;
! with Namet.Sp;       use Namet.Sp;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Output;         use Output;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Aux;        use Sem_Aux;
! 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_Ch13;       use Sem_Ch13;
! with Sem_Disp;       use Sem_Disp;
! with Sem_Elab;       use Sem_Elab;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Res;        use Sem_Res;
! with Sem_Warn;       use Sem_Warn;
! with Sem_Type;       use Sem_Type;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Stand;          use Stand;
  with Style;
! with Stringt;        use Stringt;
! with Targparm;       use Targparm;
! with Tbuild;         use Tbuild;
! with Ttypes;         use Ttypes;
! with Uname;          use Uname;
  
  with GNAT.Heap_Sort_G;
! with GNAT.HTable;    use GNAT.HTable;
  
  package body Sem_Util is
  
*************** package body Sem_Util is
*** 146,152 ****
     --  have a default.
  
     function Is_Preelaborable_Function (Id : Entity_Id) return Boolean;
!    --  Ada 2020: Determine whether the specified function is suitable as the
     --  name of a call in a preelaborable construct (RM 10.2.1(7/5)).
  
     type Null_Status_Kind is
--- 149,155 ----
     --  have a default.
  
     function Is_Preelaborable_Function (Id : Entity_Id) return Boolean;
!    --  Ada 2022: Determine whether the specified function is suitable as the
     --  name of a call in a preelaborable construct (RM 10.2.1(7/5)).
  
     type Null_Status_Kind is
*************** package body Sem_Util is
*** 174,182 ****
     --  "subp:file:line:col", corresponding to the source location of the
     --  body of the subprogram.
  
!    ------------------------------
!    --  Abstract_Interface_List --
!    ------------------------------
  
     function Abstract_Interface_List (Typ : Entity_Id) return List_Id is
        Nod : Node_Id;
--- 177,185 ----
     --  "subp:file:line:col", corresponding to the source location of the
     --  body of the subprogram.
  
!    -----------------------------
!    -- Abstract_Interface_List --
!    -----------------------------
  
     function Abstract_Interface_List (Typ : Entity_Id) return List_Id is
        Nod : Node_Id;
*************** package body Sem_Util is
*** 257,263 ****
     function Accessibility_Level
       (Expr              : Node_Id;
        Level             : Accessibility_Level_Kind;
!       In_Return_Context : Boolean := False) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Expr);
  
--- 260,267 ----
     function Accessibility_Level
       (Expr              : Node_Id;
        Level             : Accessibility_Level_Kind;
!       In_Return_Context : Boolean := False;
!       Allow_Alt_Model   : Boolean := True) return Node_Id
     is
        Loc : constant Source_Ptr := Sloc (Expr);
  
*************** package body Sem_Util is
*** 269,293 ****
        --  Construct an integer literal representing an accessibility level
        --  with its type set to Natural.
  
!       function Innermost_Master_Scope_Depth
!         (N : Node_Id) return Uint;
        --  Returns the scope depth of the given node's innermost
        --  enclosing dynamic scope (effectively the accessibility
        --  level of the innermost enclosing master).
  
!       function Function_Call_Or_Allocator_Level
!         (N : Node_Id) return Node_Id;
        --  Centralized processing of subprogram calls which may appear in
        --  prefix notation.
  
        ----------------------------------
        -- Innermost_Master_Scope_Depth --
        ----------------------------------
  
!       function Innermost_Master_Scope_Depth
!         (N : Node_Id) return Uint
!       is
           Encl_Scop           : Entity_Id;
           Node_Par            : Node_Id := Parent (N);
           Master_Lvl_Modifier : Int     := 0;
  
--- 273,299 ----
        --  Construct an integer literal representing an accessibility level
        --  with its type set to Natural.
  
!       function Innermost_Master_Scope_Depth (N : Node_Id) return Uint;
        --  Returns the scope depth of the given node's innermost
        --  enclosing dynamic scope (effectively the accessibility
        --  level of the innermost enclosing master).
  
!       function Function_Call_Or_Allocator_Level (N : Node_Id) return Node_Id;
        --  Centralized processing of subprogram calls which may appear in
        --  prefix notation.
  
+       function Typ_Access_Level (Typ : Entity_Id) return Uint
+         is (Type_Access_Level (Typ, Allow_Alt_Model));
+       --  Renaming of Type_Access_Level with Allow_Alt_Model specified to avoid
+       --  passing the parameter specifically in every call.
+ 
        ----------------------------------
        -- Innermost_Master_Scope_Depth --
        ----------------------------------
  
!       function Innermost_Master_Scope_Depth (N : Node_Id) return Uint is
           Encl_Scop           : Entity_Id;
+          Ent                 : Entity_Id;
           Node_Par            : Node_Id := Parent (N);
           Master_Lvl_Modifier : Int     := 0;
  
*************** package body Sem_Util is
*** 301,317 ****
           --  among other things. These cases are detected properly ???
  
           while Present (Node_Par) loop
  
!             if Present (Defining_Entity
!                          (Node_Par, Empty_On_Errors => True))
!             then
!                Encl_Scop := Nearest_Dynamic_Scope
!                               (Defining_Entity (Node_Par));
  
                 --  Ignore transient scopes made during expansion
  
                 if Comes_From_Source (Node_Par) then
!                   return Scope_Depth (Encl_Scop) + Master_Lvl_Modifier;
                 end if;
  
              --  For a return statement within a function, return
--- 307,322 ----
           --  among other things. These cases are detected properly ???
  
           while Present (Node_Par) loop
+             Ent := Defining_Entity_Or_Empty (Node_Par);
  
!             if Present (Ent) then
!                Encl_Scop := Nearest_Dynamic_Scope (Ent);
  
                 --  Ignore transient scopes made during expansion
  
                 if Comes_From_Source (Node_Par) then
!                   return
!                     Scope_Depth_Default_0 (Encl_Scop) + Master_Lvl_Modifier;
                 end if;
  
              --  For a return statement within a function, return
*************** package body Sem_Util is
*** 377,383 ****
                          (Subprogram_Access_Level (Entity (Name (N))));
              else
                 return Make_Level_Literal
!                         (Type_Access_Level (Etype (Prefix (Name (N)))));
              end if;
  
           --  We ignore coextensions as they cannot be implemented under the
--- 382,388 ----
                          (Subprogram_Access_Level (Entity (Name (N))));
              else
                 return Make_Level_Literal
!                         (Typ_Access_Level (Etype (Prefix (Name (N)))));
              end if;
  
           --  We ignore coextensions as they cannot be implemented under the
*************** package body Sem_Util is
*** 387,412 ****
             and then (Is_Static_Coextension (N)
                        or else Is_Dynamic_Coextension (N))
           then
!             return Make_Level_Literal
!                      (Scope_Depth (Standard_Standard));
           end if;
  
           --  Named access types have a designated level
  
           if Is_Named_Access_Type (Etype (N)) then
!             return Make_Level_Literal (Type_Access_Level (Etype (N)));
  
           --  Otherwise, the level is dictated by RM 3.10.2 (10.7/3)
  
           else
              if Nkind (N) = N_Function_Call then
                 --  Dynamic checks are generated when we are within a return
                 --  value or we are in a function call within an anonymous
                 --  access discriminant constraint of a return object (signified
                 --  by In_Return_Context) on the side of the callee.
  
!                --  So, in this case, return library accessibility level to null
!                --  out the check on the side of the caller.
  
                 if In_Return_Value (N)
                   or else In_Return_Context
--- 392,440 ----
             and then (Is_Static_Coextension (N)
                        or else Is_Dynamic_Coextension (N))
           then
!             return Make_Level_Literal (Scope_Depth (Standard_Standard));
           end if;
  
           --  Named access types have a designated level
  
           if Is_Named_Access_Type (Etype (N)) then
!             return Make_Level_Literal (Typ_Access_Level (Etype (N)));
  
           --  Otherwise, the level is dictated by RM 3.10.2 (10.7/3)
  
           else
+             --  Check No_Dynamic_Accessibility_Checks restriction override for
+             --  alternative accessibility model.
+ 
+             if Allow_Alt_Model
+               and then No_Dynamic_Accessibility_Checks_Enabled (N)
+               and then Is_Anonymous_Access_Type (Etype (N))
+             then
+                --  In the alternative model the level is that of the
+                --  designated type.
+ 
+                if Debug_Flag_Underscore_B then
+                   return Make_Level_Literal (Typ_Access_Level (Etype (N)));
+ 
+                --  For function calls the level is that of the innermost
+                --  master, otherwise (for allocators etc.) we get the level
+                --  of the corresponding anonymous access type, which is
+                --  calculated through the normal path of execution.
+ 
+                elsif Nkind (N) = N_Function_Call then
+                   return Make_Level_Literal
+                            (Innermost_Master_Scope_Depth (Expr));
+                end if;
+             end if;
+ 
              if Nkind (N) = N_Function_Call then
                 --  Dynamic checks are generated when we are within a return
                 --  value or we are in a function call within an anonymous
                 --  access discriminant constraint of a return object (signified
                 --  by In_Return_Context) on the side of the callee.
  
!                --  So, in this case, return accessibility level of the
!                --  enclosing subprogram.
  
                 if In_Return_Value (N)
                   or else In_Return_Context
*************** package body Sem_Util is
*** 416,421 ****
--- 444,460 ----
                 end if;
              end if;
  
+             --  When the call is being dereferenced the level is that of the
+             --  enclosing master of the dereferenced call.
+ 
+             if Nkind (Parent (N)) in N_Explicit_Dereference
+                                    | N_Indexed_Component
+                                    | N_Selected_Component
+             then
+                return Make_Level_Literal
+                         (Innermost_Master_Scope_Depth (Expr));
+             end if;
+ 
              --  Find any relevant enclosing parent nodes that designate an
              --  object being initialized.
  
*************** package body Sem_Util is
*** 436,442 ****
                   and then Is_Named_Access_Type (Etype (Par))
                 then
                    return Make_Level_Literal
!                            (Type_Access_Level (Etype (Par)));
                 end if;
  
                 --  Jump out when we hit an object declaration or the right-hand
--- 475,481 ----
                   and then Is_Named_Access_Type (Etype (Par))
                 then
                    return Make_Level_Literal
!                            (Typ_Access_Level (Etype (Par)));
                 end if;
  
                 --  Jump out when we hit an object declaration or the right-hand
*************** package body Sem_Util is
*** 464,470 ****
                               (Scope (Defining_Identifier (Par))));
  
                 when N_Assignment_Statement =>
!                   --  Return the accessiblity level of the left-hand part
  
                    return Accessibility_Level
                             (Expr              => Name (Par),
--- 503,509 ----
                               (Scope (Defining_Identifier (Par))));
  
                 when N_Assignment_Statement =>
!                   --  Return the accessibility level of the left-hand part
  
                    return Accessibility_Level
                             (Expr              => Name (Par),
*************** package body Sem_Util is
*** 553,559 ****
  
                 if Is_Named_Access_Type (Etype (Pre)) then
                    return Make_Level_Literal
!                            (Type_Access_Level (Etype (Pre)));
  
                 --  Anonymous access types
  
--- 592,598 ----
  
                 if Is_Named_Access_Type (Etype (Pre)) then
                    return Make_Level_Literal
!                            (Typ_Access_Level (Etype (Pre)));
  
                 --  Anonymous access types
  
*************** package body Sem_Util is
*** 589,597 ****
              --  caller.
  
              if Is_Explicitly_Aliased (E)
!               and then Level /= Dynamic_Level
!               and then (In_Return_Value (Expr)
!                          or else In_Return_Context)
              then
                 return Make_Level_Literal (Scope_Depth (Standard_Standard));
  
--- 628,636 ----
              --  caller.
  
              if Is_Explicitly_Aliased (E)
!               and then (In_Return_Context
!                          or else (Level /= Dynamic_Level
!                                    and then In_Return_Value (Expr)))
              then
                 return Make_Level_Literal (Scope_Depth (Standard_Standard));
  
*************** package body Sem_Util is
*** 618,629 ****
                             (Scope_Depth (Standard_Standard));
                 end if;
  
!                return
!                  New_Occurrence_Of (Get_Dynamic_Accessibility (E), Loc);
  
!             --  Initialization procedures have a special extra accessitility
              --  parameter associated with the level at which the object
!             --  begin initialized exists
  
              elsif Ekind (E) = E_Record_Type
                and then Is_Limited_Record (E)
--- 657,694 ----
                             (Scope_Depth (Standard_Standard));
                 end if;
  
!                --  No_Dynamic_Accessibility_Checks restriction override for
!                --  alternative accessibility model.
  
!                if Allow_Alt_Model
!                  and then No_Dynamic_Accessibility_Checks_Enabled (E)
!                then
!                   --  In the alternative model the level is that of the
!                   --  designated type entity's context.
! 
!                   if Debug_Flag_Underscore_B then
!                      return Make_Level_Literal (Typ_Access_Level (Etype (E)));
! 
!                   --  Otherwise the level depends on the entity's context
! 
!                   elsif Is_Formal (E) then
!                      return Make_Level_Literal
!                               (Subprogram_Access_Level
!                                 (Enclosing_Subprogram (E)));
!                   else
!                      return Make_Level_Literal
!                               (Scope_Depth (Enclosing_Dynamic_Scope (E)));
!                   end if;
!                end if;
! 
!                --  Return the dynamic level in the normal case
! 
!                return New_Occurrence_Of
!                         (Get_Dynamic_Accessibility (E), Loc);
! 
!             --  Initialization procedures have a special extra accessibility
              --  parameter associated with the level at which the object
!             --  being initialized exists
  
              elsif Ekind (E) = E_Record_Type
                and then Is_Limited_Record (E)
*************** package body Sem_Util is
*** 637,670 ****
              --  according to RM 3.10.2 (21).
  
              elsif Is_Type (E) then
!                return Make_Level_Literal
!                         (Type_Access_Level (E) + 1);
  
!             --  Move up the renamed entity if it came from source since
!             --  expansion may have created a dummy renaming under certain
!             --  circumstances.
  
!             elsif Present (Renamed_Object (E))
!               and then Comes_From_Source (Renamed_Object (E))
              then
!                return Accessibility_Level (Renamed_Object (E));
  
              --  Named access types get their level from their associated type
  
              elsif Is_Named_Access_Type (Etype (E)) then
                 return Make_Level_Literal
!                         (Type_Access_Level (Etype (E)));
  
!             --  When E is a component of the current instance of a
!             --  protected type, we assume the level to be deeper than that of
!             --  the type itself.
  
!             elsif not Is_Overloadable (E)
!               and then Ekind (Scope (E)) = E_Protected_Type
!               and then Comes_From_Source (Scope (E))
              then
!                return Make_Level_Literal
!                         (Scope_Depth (Enclosing_Dynamic_Scope (E)) + 1);
  
              --  Normal object - get the level of the enclosing scope
  
--- 702,755 ----
              --  according to RM 3.10.2 (21).
  
              elsif Is_Type (E) then
!                --  When restriction No_Dynamic_Accessibility_Checks is active
!                --  along with -gnatd_b.
  
!                if Allow_Alt_Model
!                  and then No_Dynamic_Accessibility_Checks_Enabled (E)
!                  and then Debug_Flag_Underscore_B
!                then
!                   return Make_Level_Literal (Typ_Access_Level (E));
!                end if;
  
!                --  Normal path
! 
!                return Make_Level_Literal (Typ_Access_Level (E) + 1);
! 
!             --  Move up the renamed entity or object if it came from source
!             --  since expansion may have created a dummy renaming under
!             --  certain circumstances.
! 
!             --  Note: We check if the original node of the renaming comes
!             --  from source because the node may have been rewritten.
! 
!             elsif Present (Renamed_Entity_Or_Object (E))
!               and then Comes_From_Source
!                 (Original_Node (Renamed_Entity_Or_Object (E)))
              then
!                return Accessibility_Level (Renamed_Entity_Or_Object (E));
  
              --  Named access types get their level from their associated type
  
              elsif Is_Named_Access_Type (Etype (E)) then
                 return Make_Level_Literal
!                         (Typ_Access_Level (Etype (E)));
  
!             --  Check if E is an expansion-generated renaming of an iterator
!             --  by examining Related_Expression. If so, determine the
!             --  accessibility level based on the original expression.
  
!             elsif Ekind (E) in E_Constant | E_Variable
!               and then Present (Related_Expression (E))
              then
!                return Accessibility_Level (Related_Expression (E));
! 
!             elsif Level = Dynamic_Level
!                and then Ekind (E) in E_In_Parameter | E_In_Out_Parameter
!                and then Present (Init_Proc_Level_Formal (Scope (E)))
!             then
!                return New_Occurrence_Of
!                         (Init_Proc_Level_Formal (Scope (E)), Loc);
  
              --  Normal object - get the level of the enclosing scope
  
*************** package body Sem_Util is
*** 695,701 ****
  
              elsif Is_Named_Access_Type (Etype (Pre)) then
                 return Make_Level_Literal
!                         (Type_Access_Level (Etype (Pre)));
  
              --  The current expression is a named access type, so there is no
              --  reason to look at the prefix. Instead obtain the level of E's
--- 780,786 ----
  
              elsif Is_Named_Access_Type (Etype (Pre)) then
                 return Make_Level_Literal
!                         (Typ_Access_Level (Etype (Pre)));
  
              --  The current expression is a named access type, so there is no
              --  reason to look at the prefix. Instead obtain the level of E's
*************** package body Sem_Util is
*** 703,723 ****
  
              elsif Is_Named_Access_Type (Etype (E)) then
                 return Make_Level_Literal
!                         (Type_Access_Level (Etype (E)));
  
!             --  A non-discriminant selected component where the component
              --  is an anonymous access type means that its associated
              --  level is that of the containing type - see RM 3.10.2 (16).
  
              elsif Nkind (E) = N_Selected_Component
                and then Ekind (Etype (E))   =  E_Anonymous_Access_Type
                and then Ekind (Etype (Pre)) /= E_Anonymous_Access_Type
!               and then not (Nkind (Selector_Name (E)) in N_Has_Entity
!                              and then Ekind (Entity (Selector_Name (E)))
!                                         = E_Discriminant)
              then
                 return Make_Level_Literal
!                         (Type_Access_Level (Etype (Prefix (E))));
  
              --  Similar to the previous case - arrays featuring components of
              --  anonymous access components get their corresponding level from
--- 788,831 ----
  
              elsif Is_Named_Access_Type (Etype (E)) then
                 return Make_Level_Literal
!                         (Typ_Access_Level (Etype (E)));
  
!             --  A nondiscriminant selected component where the component
              --  is an anonymous access type means that its associated
              --  level is that of the containing type - see RM 3.10.2 (16).
  
+             --  Note that when restriction No_Dynamic_Accessibility_Checks is
+             --  in effect we treat discriminant components as regular
+             --  components.
+ 
              elsif Nkind (E) = N_Selected_Component
                and then Ekind (Etype (E))   =  E_Anonymous_Access_Type
                and then Ekind (Etype (Pre)) /= E_Anonymous_Access_Type
!               and then (not (Nkind (Selector_Name (E)) in N_Has_Entity
!                               and then Ekind (Entity (Selector_Name (E)))
!                                          = E_Discriminant)
! 
!                         --  The alternative accessibility models both treat
!                         --  discriminants as regular components.
! 
!                         or else (No_Dynamic_Accessibility_Checks_Enabled (E)
!                                   and then Allow_Alt_Model))
              then
+                --  When restriction No_Dynamic_Accessibility_Checks is active
+                --  and -gnatd_b set, the level is that of the designated type.
+ 
+                if Allow_Alt_Model
+                  and then No_Dynamic_Accessibility_Checks_Enabled (E)
+                  and then Debug_Flag_Underscore_B
+                then
+                   return Make_Level_Literal
+                            (Typ_Access_Level (Etype (E)));
+                end if;
+ 
+                --  Otherwise proceed normally
+ 
                 return Make_Level_Literal
!                         (Typ_Access_Level (Etype (Prefix (E))));
  
              --  Similar to the previous case - arrays featuring components of
              --  anonymous access components get their corresponding level from
*************** package body Sem_Util is
*** 729,736 ****
                and then Ekind (Component_Type (Base_Type (Etype (Pre))))
                           = E_Anonymous_Access_Type
              then
                 return Make_Level_Literal
!                         (Type_Access_Level (Etype (Prefix (E))));
  
              --  The accessibility calculation routine that handles function
              --  calls (Function_Call_Level) assumes, in the case the
--- 837,857 ----
                and then Ekind (Component_Type (Base_Type (Etype (Pre))))
                           = E_Anonymous_Access_Type
              then
+                --  When restriction No_Dynamic_Accessibility_Checks is active
+                --  and -gnatd_b set, the level is that of the designated type.
+ 
+                if Allow_Alt_Model
+                  and then No_Dynamic_Accessibility_Checks_Enabled (E)
+                  and then Debug_Flag_Underscore_B
+                then
+                   return Make_Level_Literal
+                            (Typ_Access_Level (Etype (E)));
+                end if;
+ 
+                --  Otherwise proceed normally
+ 
                 return Make_Level_Literal
!                         (Typ_Access_Level (Etype (Prefix (E))));
  
              --  The accessibility calculation routine that handles function
              --  calls (Function_Call_Level) assumes, in the case the
*************** package body Sem_Util is
*** 778,784 ****
           when N_Qualified_Expression =>
              if Is_Named_Access_Type (Etype (E)) then
                 return Make_Level_Literal
!                         (Type_Access_Level (Etype (E)));
              else
                 return Accessibility_Level (Expression (E));
              end if;
--- 899,905 ----
           when N_Qualified_Expression =>
              if Is_Named_Access_Type (Etype (E)) then
                 return Make_Level_Literal
!                         (Typ_Access_Level (Etype (E)));
              else
                 return Accessibility_Level (Expression (E));
              end if;
*************** package body Sem_Util is
*** 797,803 ****
              --  its type.
  
              if Is_Named_Access_Type (Etype (Pre)) then
!                return Make_Level_Literal (Type_Access_Level (Etype (Pre)));
  
              --  Otherwise, recurse deeper
  
--- 918,924 ----
              --  its type.
  
              if Is_Named_Access_Type (Etype (Pre)) then
!                return Make_Level_Literal (Typ_Access_Level (Etype (Pre)));
  
              --  Otherwise, recurse deeper
  
*************** package body Sem_Util is
*** 824,830 ****
  
              elsif Is_Named_Access_Type (Etype (E)) then
                 return Make_Level_Literal
!                         (Type_Access_Level (Etype (E)));
  
              --  In section RM 3.10.2 (10/4) the accessibility rules for
              --  aggregates and value conversions are outlined. Are these
--- 945,951 ----
  
              elsif Is_Named_Access_Type (Etype (E)) then
                 return Make_Level_Literal
!                         (Typ_Access_Level (Etype (E)));
  
              --  In section RM 3.10.2 (10/4) the accessibility rules for
              --  aggregates and value conversions are outlined. Are these
*************** package body Sem_Util is
*** 840,846 ****
           --  expression's entity.
  
           when others =>
!             return Make_Level_Literal (Type_Access_Level (Etype (E)));
        end case;
     end Accessibility_Level;
  
--- 961,967 ----
           --  expression's entity.
  
           when others =>
!             return Make_Level_Literal (Typ_Access_Level (Etype (E)));
        end case;
     end Accessibility_Level;
  
*************** package body Sem_Util is
*** 1000,1010 ****
             and then Is_Entity_Name (Name (Expr))
             and then Is_RTE (Entity (Name (Expr)), RE_To_Address)
           then
!             Expr := First (Parameter_Associations (Expr));
! 
!             if Nkind (Expr) = N_Parameter_Association then
!                Expr := Explicit_Actual_Parameter (Expr);
!             end if;
  
           --  We finally have the real expression
  
--- 1121,1127 ----
             and then Is_Entity_Name (Name (Expr))
             and then Is_RTE (Entity (Name (Expr)), RE_To_Address)
           then
!             Expr := First_Actual (Expr);
  
           --  We finally have the real expression
  
*************** package body Sem_Util is
*** 1022,1027 ****
--- 1139,1148 ----
  
     function Addressable (V : Uint) return Boolean is
     begin
+       if No (V) then
+          return False;
+       end if;
+ 
        return V = Uint_8  or else
               V = Uint_16 or else
               V = Uint_32 or else
*************** package body Sem_Util is
*** 1406,1419 ****
     -----------------------------------------
  
     procedure Apply_Compile_Time_Constraint_Error
!      (N      : Node_Id;
!       Msg    : String;
!       Reason : RT_Exception_Code;
!       Ent    : Entity_Id  := Empty;
!       Typ    : Entity_Id  := Empty;
!       Loc    : Source_Ptr := No_Location;
!       Rep    : Boolean    := True;
!       Warn   : Boolean    := False)
     is
        Stat   : constant Boolean := Is_Static_Expression (N);
        R_Stat : constant Node_Id :=
--- 1527,1540 ----
     -----------------------------------------
  
     procedure Apply_Compile_Time_Constraint_Error
!      (N            : Node_Id;
!       Msg          : String;
!       Reason       : RT_Exception_Code;
!       Ent          : Entity_Id  := Empty;
!       Typ          : Entity_Id  := Empty;
!       Loc          : Source_Ptr := No_Location;
!       Warn         : Boolean    := False;
!       Emit_Message : Boolean    := True)
     is
        Stat   : constant Boolean := Is_Static_Expression (N);
        R_Stat : constant Node_Id :=
*************** package body Sem_Util is
*** 1427,1443 ****
           Rtyp := Typ;
        end if;
  
!       Discard_Node
!         (Compile_Time_Constraint_Error (N, Msg, Ent, Loc, Warn => Warn));
! 
!       --  In GNATprove mode, do not replace the node with an exception raised.
!       --  In such a case, either the call to Compile_Time_Constraint_Error
!       --  issues an error which stops analysis, or it issues a warning in
!       --  a few cases where a suitable check flag is set for GNATprove to
!       --  generate a check message.
! 
!       if not Rep or GNATprove_Mode then
!          return;
        end if;
  
        --  Now we replace the node by an N_Raise_Constraint_Error node
--- 1548,1556 ----
           Rtyp := Typ;
        end if;
  
!       if Emit_Message then
!          Discard_Node
!            (Compile_Time_Constraint_Error (N, Msg, Ent, Loc, Warn => Warn));
        end if;
  
        --  Now we replace the node by an N_Raise_Constraint_Error node
*************** package body Sem_Util is
*** 1493,1498 ****
--- 1606,1632 ----
          and then Scope_Depth (ST) >= Scope_Depth (SCT);
     end Available_Full_View_Of_Component;
  
+    ----------------
+    -- Bad_Aspect --
+    ----------------
+ 
+    procedure Bad_Aspect
+      (N    : Node_Id;
+       Nam  : Name_Id;
+       Warn : Boolean := False)
+    is
+    begin
+       Error_Msg_Warn := Warn;
+       Error_Msg_N ("<<& is not a valid aspect identifier", N);
+ 
+       --  Check bad spelling
+       Error_Msg_Name_1 := Aspect_Spell_Check (Nam);
+       if Error_Msg_Name_1 /= No_Name then
+          Error_Msg_N -- CODEFIX
+             ("\<<possible misspelling of %", N);
+       end if;
+    end Bad_Aspect;
+ 
     -------------------
     -- Bad_Attribute --
     -------------------
*************** package body Sem_Util is
*** 1504,1523 ****
     is
     begin
        Error_Msg_Warn := Warn;
!       Error_Msg_N ("unrecognized attribute&<<", N);
  
        --  Check for possible misspelling
  
!       Error_Msg_Name_1 := First_Attribute_Name;
!       while Error_Msg_Name_1 <= Last_Attribute_Name loop
!          if Is_Bad_Spelling_Of (Nam, Error_Msg_Name_1) then
!             Error_Msg_N -- CODEFIX
!               ("\possible misspelling of %<<", N);
!             exit;
!          end if;
! 
!          Error_Msg_Name_1 := Error_Msg_Name_1 + 1;
!       end loop;
     end Bad_Attribute;
  
     --------------------------------
--- 1638,1652 ----
     is
     begin
        Error_Msg_Warn := Warn;
!       Error_Msg_N ("<<unrecognized attribute&", N);
  
        --  Check for possible misspelling
  
!       Error_Msg_Name_1 := Attribute_Spell_Check (Nam);
!       if Error_Msg_Name_1 /= No_Name then
!          Error_Msg_N -- CODEFIX
!             ("\<<possible misspelling of %", N);
!       end if;
     end Bad_Attribute;
  
     --------------------------------
*************** package body Sem_Util is
*** 1530,1536 ****
        Typ            : Entity_Id;
        Suggest_Static : Boolean := False)
     is
!       Gen            : Entity_Id;
  
     begin
        --  Avoid cascaded errors
--- 1659,1665 ----
        Typ            : Entity_Id;
        Suggest_Static : Boolean := False)
     is
!       Gen : Entity_Id;
  
     begin
        --  Avoid cascaded errors
*************** package body Sem_Util is
*** 1676,1681 ****
--- 1805,1811 ----
        Subt        : Entity_Id;
        Disc_Type   : Entity_Id;
        Obj         : Node_Id;
+       Index       : Node_Id;
  
     begin
        Loc := Sloc (N);
*************** package body Sem_Util is
*** 1706,1711 ****
--- 1836,1843 ----
  
        if Is_Array_Type (T) then
           Constraints := New_List;
+          Index := First_Index (T);
+ 
           for J in 1 .. Number_Dimensions (T) loop
  
              --  Build an array subtype declaration with the nominal subtype and
*************** package body Sem_Util is
*** 1713,1725 ****
              --  local declarations for the subprogram, for analysis before any
              --  reference to the formal in the body.
  
!             Lo :=
!               Make_Attribute_Reference (Loc,
!                 Prefix         =>
!                   Duplicate_Subexpr_No_Checks (Obj, Name_Req => True),
!                 Attribute_Name => Name_First,
!                 Expressions    => New_List (
!                   Make_Integer_Literal (Loc, J)));
  
              Hi :=
                Make_Attribute_Reference (Loc,
--- 1845,1868 ----
              --  local declarations for the subprogram, for analysis before any
              --  reference to the formal in the body.
  
!             --  If this is for an index with a fixed lower bound, then use
!             --  the fixed lower bound as the lower bound of the actual
!             --  subtype's corresponding index.
! 
!             if not Is_Constrained (T)
!               and then Is_Fixed_Lower_Bound_Index_Subtype (Etype (Index))
!             then
!                Lo := New_Copy_Tree (Type_Low_Bound (Etype (Index)));
! 
!             else
!                Lo :=
!                  Make_Attribute_Reference (Loc,
!                    Prefix         =>
!                      Duplicate_Subexpr_No_Checks (Obj, Name_Req => True),
!                    Attribute_Name => Name_First,
!                    Expressions    => New_List (
!                      Make_Integer_Literal (Loc, J)));
!             end if;
  
              Hi :=
                Make_Attribute_Reference (Loc,
*************** package body Sem_Util is
*** 1730,1735 ****
--- 1873,1880 ----
                    Make_Integer_Literal (Loc, J)));
  
              Append (Make_Range (Loc, Lo, Hi), Constraints);
+ 
+             Next_Index (Index);
           end loop;
  
        --  If the type has unknown discriminants there is no constrained
*************** package body Sem_Util is
*** 1825,1830 ****
--- 1970,1981 ----
        --  Similar to previous one, for discriminated components constrained
        --  by the discriminant of the enclosing object.
  
+       function Build_Discriminant_Reference
+         (Discrim_Name : Node_Id; Obj : Node_Id := P) return Node_Id;
+       --  Build a reference to the discriminant denoted by Discrim_Name.
+       --  The prefix of the result is usually Obj, but it could be
+       --  a prefix of Obj in some corner cases.
+ 
        function Copy_And_Maybe_Dereference (N : Node_Id) return Node_Id;
        --  Copy the subtree rooted at N and insert an explicit dereference if it
        --  is of an access type.
*************** package body Sem_Util is
*** 1848,1858 ****
              Old_Hi := Type_High_Bound (Etype (Indx));
  
              if Denotes_Discriminant (Old_Lo) then
!                Lo :=
!                  Make_Selected_Component (Loc,
!                    Prefix => Copy_And_Maybe_Dereference (P),
!                    Selector_Name => New_Occurrence_Of (Entity (Old_Lo), Loc));
! 
              else
                 Lo := New_Copy_Tree (Old_Lo);
  
--- 1999,2005 ----
              Old_Hi := Type_High_Bound (Etype (Indx));
  
              if Denotes_Discriminant (Old_Lo) then
!                Lo := Build_Discriminant_Reference (Old_Lo);
              else
                 Lo := New_Copy_Tree (Old_Lo);
  
*************** package body Sem_Util is
*** 1866,1876 ****
              end if;
  
              if Denotes_Discriminant (Old_Hi) then
!                Hi :=
!                  Make_Selected_Component (Loc,
!                    Prefix => Copy_And_Maybe_Dereference (P),
!                    Selector_Name => New_Occurrence_Of (Entity (Old_Hi), Loc));
! 
              else
                 Hi := New_Copy_Tree (Old_Hi);
                 Set_Analyzed (Hi, False);
--- 2013,2019 ----
              end if;
  
              if Denotes_Discriminant (Old_Hi) then
!                Hi := Build_Discriminant_Reference (Old_Hi);
              else
                 Hi := New_Copy_Tree (Old_Hi);
                 Set_Analyzed (Hi, False);
*************** package body Sem_Util is
*** 1896,1905 ****
           D := First_Elmt (Discriminant_Constraint (Desig_Typ));
           while Present (D) loop
              if Denotes_Discriminant (Node (D)) then
!                D_Val := Make_Selected_Component (Loc,
!                  Prefix => Copy_And_Maybe_Dereference (P),
!                 Selector_Name => New_Occurrence_Of (Entity (Node (D)), Loc));
! 
              else
                 D_Val := New_Copy_Tree (Node (D));
              end if;
--- 2039,2045 ----
           D := First_Elmt (Discriminant_Constraint (Desig_Typ));
           while Present (D) loop
              if Denotes_Discriminant (Node (D)) then
!                D_Val := Build_Discriminant_Reference (Node (D));
              else
                 D_Val := New_Copy_Tree (Node (D));
              end if;
*************** package body Sem_Util is
*** 1911,1916 ****
--- 2051,2140 ----
           return Constraints;
        end Build_Actual_Record_Constraint;
  
+       ----------------------------------
+       -- Build_Discriminant_Reference --
+       ----------------------------------
+ 
+       function Build_Discriminant_Reference
+         (Discrim_Name : Node_Id; Obj : Node_Id := P) return Node_Id
+       is
+          Discrim : constant Entity_Id := Entity (Discrim_Name);
+ 
+          function Obj_Is_Good_Prefix return Boolean;
+          --  Returns True if Obj.Discrim makes sense; that is, if
+          --  Obj has Discrim as one of its discriminants (or is an
+          --  access value that designates such an object).
+ 
+          ------------------------
+          -- Obj_Is_Good_Prefix --
+          ------------------------
+ 
+          function Obj_Is_Good_Prefix return Boolean is
+             Obj_Type           : Entity_Id :=
+               Implementation_Base_Type (Etype (Obj));
+ 
+             Discriminated_Type : constant Entity_Id :=
+               Implementation_Base_Type
+                 (Scope (Original_Record_Component (Discrim)));
+          begin
+             --  The order of the following two tests matters in the
+             --  access-to-class-wide case.
+ 
+             if Is_Access_Type (Obj_Type) then
+                Obj_Type := Implementation_Base_Type
+                              (Designated_Type (Obj_Type));
+             end if;
+ 
+             if Is_Class_Wide_Type (Obj_Type) then
+                Obj_Type := Implementation_Base_Type
+                              (Find_Specific_Type (Obj_Type));
+             end if;
+ 
+             --  If a type T1 defines a discriminant D1, then Obj.D1 is ok (for
+             --  our purposes here) if T1 is an ancestor of the type of Obj.
+             --  So that's what we would like to test for here.
+             --  The bad news: Is_Ancestor is only defined in the tagged case.
+             --  The good news: in the untagged case, Implementation_Base_Type
+             --  looks through derived types so we can use a simpler test.
+ 
+             if Is_Tagged_Type (Discriminated_Type) then
+                return Is_Ancestor (Discriminated_Type, Obj_Type);
+             else
+                return Discriminated_Type = Obj_Type;
+             end if;
+          end Obj_Is_Good_Prefix;
+ 
+       --  Start of processing for Build_Discriminant_Reference
+ 
+       begin
+          if not Obj_Is_Good_Prefix then
+             --  If the given discriminant is not a component of the given
+             --  object, then try the enclosing object.
+ 
+             if Nkind (Obj) = N_Selected_Component then
+                return Build_Discriminant_Reference
+                         (Discrim_Name => Discrim_Name,
+                          Obj          => Prefix (Obj));
+             elsif Nkind (Obj) in N_Has_Entity
+               and then Nkind (Parent (Entity (Obj))) =
+                        N_Object_Renaming_Declaration
+             then
+                --  Look through a renaming (a corner case of a corner case).
+                return Build_Discriminant_Reference
+                         (Discrim_Name => Discrim_Name,
+                          Obj          => Name (Parent (Entity (Obj))));
+             else
+                --  We are in some unexpected case here, so revert to the
+                --  old behavior (by falling through to it).
+                null;
+             end if;
+          end if;
+ 
+          return Make_Selected_Component (Loc,
+                   Prefix => Copy_And_Maybe_Dereference (Obj),
+                   Selector_Name => New_Occurrence_Of (Discrim, Loc));
+       end Build_Discriminant_Reference;
+ 
        ------------------------------------
        -- Build_Access_Record_Constraint --
        ------------------------------------
*************** package body Sem_Util is
*** 2008,2014 ****
           --  the original constraint from its component declaration.
  
           Sel := Entity (Selector_Name (N));
!          if Nkind (Parent (Sel)) /= N_Component_Declaration then
              return Empty;
           end if;
        end if;
--- 2232,2238 ----
           --  the original constraint from its component declaration.
  
           Sel := Entity (Selector_Name (N));
!          if Parent_Kind (Sel) /= N_Component_Declaration then
              return Empty;
           end if;
        end if;
*************** package body Sem_Util is
*** 2101,2280 ****
        return Empty;
     end Build_Actual_Subtype_Of_Component;
  
-    ---------------------------------
-    -- Build_Class_Wide_Clone_Body --
-    ---------------------------------
- 
-    procedure Build_Class_Wide_Clone_Body
-      (Spec_Id : Entity_Id;
-       Bod     : Node_Id)
-    is
-       Loc        : constant Source_Ptr := Sloc (Bod);
-       Clone_Id   : constant Entity_Id  := Class_Wide_Clone (Spec_Id);
-       Clone_Body : Node_Id;
-       Assoc_List : constant Elist_Id := New_Elmt_List;
- 
-    begin
-       --  The declaration of the class-wide clone was created when the
-       --  corresponding class-wide condition was analyzed.
- 
-       --  The body of the original condition may contain references to
-       --  the formals of Spec_Id. In the body of the class-wide clone,
-       --  these must be replaced with the corresponding formals of
-       --  the clone.
- 
-       declare
-          Spec_Formal_Id  : Entity_Id := First_Formal (Spec_Id);
-          Clone_Formal_Id : Entity_Id := First_Formal (Clone_Id);
-       begin
-          while Present (Spec_Formal_Id) loop
-             Append_Elmt (Spec_Formal_Id,  Assoc_List);
-             Append_Elmt (Clone_Formal_Id, Assoc_List);
- 
-             Next_Formal (Spec_Formal_Id);
-             Next_Formal (Clone_Formal_Id);
-          end loop;
-       end;
- 
-       Clone_Body :=
-         Make_Subprogram_Body (Loc,
-           Specification              =>
-             Copy_Subprogram_Spec (Parent (Clone_Id)),
-           Declarations               => Declarations (Bod),
-           Handled_Statement_Sequence =>
-             New_Copy_Tree (Handled_Statement_Sequence (Bod),
-               Map => Assoc_List));
- 
-       --  The new operation is internal and overriding indicators do not apply
-       --  (the original primitive may have carried one).
- 
-       Set_Must_Override (Specification (Clone_Body), False);
- 
-       --  If the subprogram body is the proper body of a stub, insert the
-       --  subprogram after the stub, i.e. the same declarative region as
-       --  the original sugprogram.
- 
-       if Nkind (Parent (Bod)) = N_Subunit then
-          Insert_After (Corresponding_Stub (Parent (Bod)), Clone_Body);
- 
-       else
-          Insert_Before (Bod, Clone_Body);
-       end if;
- 
-       Analyze (Clone_Body);
-    end Build_Class_Wide_Clone_Body;
- 
-    ---------------------------------
-    -- Build_Class_Wide_Clone_Call --
-    ---------------------------------
- 
-    function Build_Class_Wide_Clone_Call
-      (Loc     : Source_Ptr;
-       Decls   : List_Id;
-       Spec_Id : Entity_Id;
-       Spec    : Node_Id) return Node_Id
-    is
-       Clone_Id : constant Entity_Id := Class_Wide_Clone (Spec_Id);
-       Par_Type : constant Entity_Id := Find_Dispatching_Type (Spec_Id);
- 
-       Actuals    : List_Id;
-       Call       : Node_Id;
-       Formal     : Entity_Id;
-       New_Body   : Node_Id;
-       New_F_Spec : Entity_Id;
-       New_Formal : Entity_Id;
- 
-    begin
-       Actuals    := Empty_List;
-       Formal     := First_Formal (Spec_Id);
-       New_F_Spec := First (Parameter_Specifications (Spec));
- 
-       --  Build parameter association for call to class-wide clone.
- 
-       while Present (Formal) loop
-          New_Formal := Defining_Identifier (New_F_Spec);
- 
-          --  If controlling argument and operation is inherited, add conversion
-          --  to parent type for the call.
- 
-          if Etype (Formal) = Par_Type
-            and then not Is_Empty_List (Decls)
-          then
-             Append_To (Actuals,
-               Make_Type_Conversion (Loc,
-                 New_Occurrence_Of (Par_Type, Loc),
-                 New_Occurrence_Of (New_Formal, Loc)));
- 
-          else
-             Append_To (Actuals, New_Occurrence_Of (New_Formal, Loc));
-          end if;
- 
-          Next_Formal (Formal);
-          Next (New_F_Spec);
-       end loop;
- 
-       if Ekind (Spec_Id) = E_Procedure then
-          Call :=
-            Make_Procedure_Call_Statement (Loc,
-              Name                   => New_Occurrence_Of (Clone_Id, Loc),
-              Parameter_Associations => Actuals);
-       else
-          Call :=
-            Make_Simple_Return_Statement (Loc,
-             Expression =>
-               Make_Function_Call (Loc,
-                 Name                   => New_Occurrence_Of (Clone_Id, Loc),
-                 Parameter_Associations => Actuals));
-       end if;
- 
-       New_Body :=
-         Make_Subprogram_Body (Loc,
-           Specification              =>
-             Copy_Subprogram_Spec (Spec),
-           Declarations               => Decls,
-           Handled_Statement_Sequence =>
-             Make_Handled_Sequence_Of_Statements (Loc,
-               Statements => New_List (Call),
-               End_Label  => Make_Identifier (Loc, Chars (Spec_Id))));
- 
-       return New_Body;
-    end Build_Class_Wide_Clone_Call;
- 
-    ---------------------------------
-    -- Build_Class_Wide_Clone_Decl --
-    ---------------------------------
- 
-    procedure Build_Class_Wide_Clone_Decl (Spec_Id : Entity_Id) is
-       Loc      : constant Source_Ptr := Sloc (Spec_Id);
-       Clone_Id : constant Entity_Id  :=
-                    Make_Defining_Identifier (Loc,
-                      New_External_Name (Chars (Spec_Id), Suffix => "CL"));
- 
-       Decl : Node_Id;
-       Spec : Node_Id;
- 
-    begin
-       Spec := Copy_Subprogram_Spec (Parent (Spec_Id));
-       Set_Must_Override      (Spec, False);
-       Set_Must_Not_Override  (Spec, False);
-       Set_Defining_Unit_Name (Spec, Clone_Id);
- 
-       Decl := Make_Subprogram_Declaration (Loc, Spec);
-       Append (Decl, List_Containing (Unit_Declaration_Node (Spec_Id)));
- 
-       --  Link clone to original subprogram, for use when building body and
-       --  wrapper call to inherited operation.
- 
-       Set_Class_Wide_Clone (Spec_Id, Clone_Id);
- 
-       --  Inherit debug info flag from Spec_Id to Clone_Id to allow debugging
-       --  of the class-wide clone subprogram.
- 
-       if Needs_Debug_Info (Spec_Id) then
-          Set_Debug_Info_Needed (Clone_Id);
-       end if;
-    end Build_Class_Wide_Clone_Decl;
- 
     -----------------------------
     -- Build_Component_Subtype --
     -----------------------------
--- 2325,2330 ----
*************** package body Sem_Util is
*** 2900,2905 ****
--- 2950,2981 ----
     -----------------------------------
  
     function Cannot_Raise_Constraint_Error (Expr : Node_Id) return Boolean is
+ 
+       function List_Cannot_Raise_CE (L : List_Id) return Boolean;
+       --  Returns True if none of the list members cannot possibly raise
+       --  Constraint_Error.
+ 
+       --------------------------
+       -- List_Cannot_Raise_CE --
+       --------------------------
+ 
+       function List_Cannot_Raise_CE (L : List_Id) return Boolean is
+          N : Node_Id;
+       begin
+          N := First (L);
+          while Present (N) loop
+             if Cannot_Raise_Constraint_Error (N) then
+                Next (N);
+             else
+                return False;
+             end if;
+          end loop;
+ 
+          return True;
+       end List_Cannot_Raise_CE;
+ 
+    --  Start of processing for Cannot_Raise_Constraint_Error
+ 
     begin
        if Compile_Time_Known_Value (Expr) then
           return True;
*************** package body Sem_Util is
*** 2918,2925 ****
              when N_Expanded_Name =>
                 return True;
  
              when N_Selected_Component =>
!                return not Do_Discriminant_Check (Expr);
  
              when N_Attribute_Reference =>
                 if Do_Overflow_Check (Expr) then
--- 2994,3007 ----
              when N_Expanded_Name =>
                 return True;
  
+             when N_Indexed_Component =>
+                return not Do_Range_Check (Expr)
+                  and then Cannot_Raise_Constraint_Error (Prefix (Expr))
+                  and then List_Cannot_Raise_CE (Expressions (Expr));
+ 
              when N_Selected_Component =>
!                return not Do_Discriminant_Check (Expr)
!                  and then Cannot_Raise_Constraint_Error (Prefix (Expr));
  
              when N_Attribute_Reference =>
                 if Do_Overflow_Check (Expr) then
*************** package body Sem_Util is
*** 2929,2955 ****
                    return True;
  
                 else
!                   declare
!                      N : Node_Id;
! 
!                   begin
!                      N := First (Expressions (Expr));
!                      while Present (N) loop
!                         if Cannot_Raise_Constraint_Error (N) then
!                            Next (N);
!                         else
!                            return False;
!                         end if;
!                      end loop;
! 
!                      return True;
!                   end;
                 end if;
  
              when N_Type_Conversion =>
                 if Do_Overflow_Check (Expr)
                   or else Do_Length_Check (Expr)
-                  or else Do_Tag_Check (Expr)
                 then
                    return False;
                 else
--- 3011,3022 ----
                    return True;
  
                 else
!                   return List_Cannot_Raise_CE (Expressions (Expr));
                 end if;
  
              when N_Type_Conversion =>
                 if Do_Overflow_Check (Expr)
                   or else Do_Length_Check (Expr)
                 then
                    return False;
                 else
*************** package body Sem_Util is
*** 4376,4381 ****
--- 4443,4486 ----
        end if;
     end Check_Nonvolatile_Function_Profile;
  
+    -------------------
+    -- Check_Parents --
+    -------------------
+ 
+    function Check_Parents (N : Node_Id; List : Elist_Id) return Boolean is
+ 
+       function Check_Node
+         (Parent_Node : Node_Id;
+          N           : Node_Id) return Traverse_Result;
+       --  Process a single node.
+ 
+       ----------------
+       -- Check_Node --
+       ----------------
+ 
+       function Check_Node
+         (Parent_Node : Node_Id;
+          N           : Node_Id) return Traverse_Result is
+       begin
+          if Nkind (N) = N_Identifier
+            and then Parent (N) /= Parent_Node
+            and then Present (Entity (N))
+            and then Contains (List, Entity (N))
+          then
+             return Abandon;
+          end if;
+ 
+          return OK;
+       end Check_Node;
+ 
+       function Traverse is new Traverse_Func_With_Parent (Check_Node);
+ 
+    --  Start of processing for Check_Parents
+ 
+    begin
+       return Traverse (N) = OK;
+    end Check_Parents;
+ 
     -----------------------------
     -- Check_Part_Of_Reference --
     -----------------------------
*************** package body Sem_Util is
*** 4683,4692 ****
        --  and post-state. Prag is a [refined] postcondition or a contract-cases
        --  pragma. Result_Seen is set when the pragma mentions attribute 'Result
  
-       function Has_In_Out_Parameter (Subp_Id : Entity_Id) return Boolean;
-       --  Determine whether subprogram Subp_Id contains at least one IN OUT
-       --  formal parameter.
- 
        -------------------------------------------
        -- Check_Result_And_Post_State_In_Pragma --
        -------------------------------------------
--- 4788,4793 ----
*************** package body Sem_Util is
*** 4888,4908 ****
                and then not Mentions_Post_State (Expr)
                and then not (Is_Ghost_Entity (Subp_Id)
                               and then Has_No_Output (Subp_Id))
              then
                 if Pragma_Name (Prag) = Name_Contract_Cases then
                    Error_Msg_NE (Adjust_Message
                      ("contract case does not check the outcome of calling "
!                      & "&?T?"), Expr, Subp_Id);
  
                 elsif Pragma_Name (Prag) = Name_Refined_Post then
                    Error_Msg_NE (Adjust_Message
                      ("refined postcondition does not check the outcome of "
!                      & "calling &?T?"), Err_Node, Subp_Id);
  
                 else
                    Error_Msg_NE (Adjust_Message
                      ("postcondition does not check the outcome of calling "
!                      & "&?T?"), Err_Node, Subp_Id);
                 end if;
              end if;
           end Check_Conjunct;
--- 4989,5010 ----
                and then not Mentions_Post_State (Expr)
                and then not (Is_Ghost_Entity (Subp_Id)
                               and then Has_No_Output (Subp_Id))
+               and then not Is_Wrapper (Subp_Id)
              then
                 if Pragma_Name (Prag) = Name_Contract_Cases then
                    Error_Msg_NE (Adjust_Message
                      ("contract case does not check the outcome of calling "
!                      & "&?.t?"), Expr, Subp_Id);
  
                 elsif Pragma_Name (Prag) = Name_Refined_Post then
                    Error_Msg_NE (Adjust_Message
                      ("refined postcondition does not check the outcome of "
!                      & "calling &?.t?"), Err_Node, Subp_Id);
  
                 else
                    Error_Msg_NE (Adjust_Message
                      ("postcondition does not check the outcome of calling "
!                      & "&?.t?"), Err_Node, Subp_Id);
                 end if;
              end if;
           end Check_Conjunct;
*************** package body Sem_Util is
*** 5075,5102 ****
           end if;
        end Check_Result_And_Post_State_In_Pragma;
  
-       --------------------------
-       -- Has_In_Out_Parameter --
-       --------------------------
- 
-       function Has_In_Out_Parameter (Subp_Id : Entity_Id) return Boolean is
-          Formal : Entity_Id;
- 
-       begin
-          --  Traverse the formals looking for an IN OUT parameter
- 
-          Formal := First_Formal (Subp_Id);
-          while Present (Formal) loop
-             if Ekind (Formal) = E_In_Out_Parameter then
-                return True;
-             end if;
- 
-             Next_Formal (Formal);
-          end loop;
- 
-          return False;
-       end Has_In_Out_Parameter;
- 
        --  Local variables
  
        Items        : constant Node_Id := Contract (Subp_Id);
--- 5177,5182 ----
*************** package body Sem_Util is
*** 5176,5185 ****
           null;
  
        --  Regardless of whether the function has postconditions or contract
!       --  cases, or whether they mention attribute 'Result, an IN OUT formal
        --  parameter is always treated as a result.
  
!       elsif Has_In_Out_Parameter (Spec_Id) then
           null;
  
        --  The function has both a postcondition and contract cases and they do
--- 5256,5265 ----
           null;
  
        --  Regardless of whether the function has postconditions or contract
!       --  cases, or whether they mention attribute 'Result, an [IN] OUT formal
        --  parameter is always treated as a result.
  
!       elsif Has_Out_Or_In_Out_Parameter (Spec_Id) then
           null;
  
        --  The function has both a postcondition and contract cases and they do
*************** package body Sem_Util is
*** 5192,5211 ****
        then
           Error_Msg_N
             ("neither postcondition nor contract cases mention function "
!             & "result?T?", Post_Prag);
  
        --  The function has contract cases only and they do not mention
        --  attribute 'Result.
  
        elsif Present (Case_Prag) and then not Seen_In_Case then
!          Error_Msg_N ("contract cases do not mention result?T?", Case_Prag);
  
        --  The function has postconditions only and they do not mention
        --  attribute 'Result.
  
        elsif Present (Post_Prag) and then not Seen_In_Post then
           Error_Msg_N
!            ("postcondition does not mention function result?T?", Post_Prag);
        end if;
     end Check_Result_And_Post_State;
  
--- 5272,5291 ----
        then
           Error_Msg_N
             ("neither postcondition nor contract cases mention function "
!             & "result?.t?", Post_Prag);
  
        --  The function has contract cases only and they do not mention
        --  attribute 'Result.
  
        elsif Present (Case_Prag) and then not Seen_In_Case then
!          Error_Msg_N ("contract cases do not mention result?.t?", Case_Prag);
  
        --  The function has postconditions only and they do not mention
        --  attribute 'Result.
  
        elsif Present (Post_Prag) and then not Seen_In_Post then
           Error_Msg_N
!            ("postcondition does not mention function result?.t?", Post_Prag);
        end if;
     end Check_Result_And_Post_State;
  
*************** package body Sem_Util is
*** 5283,5288 ****
--- 5363,5370 ----
                      and then not Has_Non_Null_Refinement (State_Id)
                    then
                       Error_Msg_N ("state & requires refinement", State_Id);
+                      Error_Msg_N ("\package body should have Refined_State "
+                                   & "for state & with constituents", State_Id);
                    end if;
  
                    Next_Elmt (State_Elmt);
*************** package body Sem_Util is
*** 5596,5601 ****
--- 5678,5690 ----
                 if Ekind (State_Id) = E_Constant then
                    null;
  
+                --  Overlays do not contribute to package state
+ 
+                elsif Ekind (State_Id) = E_Variable
+                  and then Present (Ultimate_Overlaid_Entity (State_Id))
+                then
+                   null;
+ 
                 --  Generate an error message of the form:
  
                 --    body of package ... has unused hidden states
*************** package body Sem_Util is
*** 5768,5773 ****
--- 5857,5886 ----
        end if;
     end Choice_List;
  
+    ---------------------
+    -- Class_Condition --
+    ---------------------
+ 
+    function Class_Condition
+      (Kind : Condition_Kind;
+       Subp : Entity_Id) return Node_Id is
+ 
+    begin
+       case Kind is
+          when Class_Postcondition =>
+             return Class_Postconditions (Subp);
+ 
+          when Class_Precondition =>
+             return Class_Preconditions (Subp);
+ 
+          when Ignored_Class_Postcondition =>
+             return Ignored_Class_Postconditions (Subp);
+ 
+          when Ignored_Class_Precondition =>
+             return Ignored_Class_Preconditions (Subp);
+       end case;
+    end Class_Condition;
+ 
     -------------------------
     -- Collect_Body_States --
     -------------------------
*************** package body Sem_Util is
*** 5971,6001 ****
  
           --  Traverse the graph of ancestor interfaces
  
!          if Is_Non_Empty_List (Abstract_Interface_List (Full_T)) then
!             Id := First (Abstract_Interface_List (Full_T));
!             while Present (Id) loop
!                Iface := Etype (Id);
  
!                --  Protect against wrong uses. For example:
!                --    type I is interface;
!                --    type O is tagged null record;
!                --    type Wrong is new I and O with null record; -- ERROR
  
!                if Is_Interface (Iface) then
!                   if Exclude_Parents
!                     and then Etype (T) /= T
!                     and then Interface_Present_In_Ancestor (Etype (T), Iface)
!                   then
!                      null;
!                   else
!                      Collect (Iface);
!                      Append_Unique_Elmt (Iface, Ifaces_List);
!                   end if;
                 end if;
  
!                Next (Id);
!             end loop;
!          end if;
        end Collect;
  
     --  Start of processing for Collect_Interfaces
--- 6084,6112 ----
  
           --  Traverse the graph of ancestor interfaces
  
!          Id := First (Abstract_Interface_List (Full_T));
!          while Present (Id) loop
!             Iface := Etype (Id);
  
!             --  Protect against wrong uses. For example:
!             --    type I is interface;
!             --    type O is tagged null record;
!             --    type Wrong is new I and O with null record; -- ERROR
  
!             if Is_Interface (Iface) then
!                if Exclude_Parents
!                  and then Etype (T) /= T
!                  and then Interface_Present_In_Ancestor (Etype (T), Iface)
!                then
!                   null;
!                else
!                   Collect (Iface);
!                   Append_Unique_Elmt (Iface, Ifaces_List);
                 end if;
+             end if;
  
!             Next (Id);
!          end loop;
        end Collect;
  
     --  Start of processing for Collect_Interfaces
*************** package body Sem_Util is
*** 6355,6362 ****
           Is_Type_In_Pkg :=
             Is_Package_Or_Generic_Package (B_Scope)
               and then
!                Nkind (Parent (Declaration_Node (First_Subtype (T)))) /=
!                                                            N_Package_Body;
  
           while Present (Id) loop
  
--- 6466,6473 ----
           Is_Type_In_Pkg :=
             Is_Package_Or_Generic_Package (B_Scope)
               and then
!            Parent_Kind (Declaration_Node (First_Subtype (T))) /=
!              N_Package_Body;
  
           while Present (Id) loop
  
*************** package body Sem_Util is
*** 6374,6381 ****
                and then (Is_Type_In_Pkg
                           or else Is_Derived_Type (B_Type)
                           or else Is_Primitive (Id))
!               and then Nkind (Parent (Parent (Id)))
!                          not in N_Formal_Subprogram_Declaration
              then
                 Is_Prim := False;
  
--- 6485,6492 ----
                and then (Is_Type_In_Pkg
                           or else Is_Derived_Type (B_Type)
                           or else Is_Primitive (Id))
!               and then Parent_Kind (Parent (Id))
!                                     not in N_Formal_Subprogram_Declaration
              then
                 Is_Prim := False;
  
*************** package body Sem_Util is
*** 6446,6452 ****
              --  appear in the target-specific extension to System.
  
              if No (Id)
!               and then B_Scope = RTU_Entity (System)
                and then Present_System_Aux
              then
                 B_Scope := System_Aux_Id;
--- 6557,6563 ----
              --  appear in the target-specific extension to System.
  
              if No (Id)
!               and then Is_RTU (B_Scope, System)
                and then Present_System_Aux
              then
                 B_Scope := System_Aux_Id;
*************** package body Sem_Util is
*** 6484,6490 ****
                       Remove (Op_List, Node (Second));
  
                    else
-                      pragma Assert (False);
                       raise Program_Error;
                    end if;
                 end if;
--- 6595,6600 ----
*************** package body Sem_Util is
*** 6530,6536 ****
        Error_Msg_Warn := Warn or SPARK_Mode /= On;
  
        --  A static constraint error in an instance body is not a fatal error.
!       --  we choose to inhibit the message altogether, because there is no
        --  obvious node (for now) on which to post it. On the other hand the
        --  offending node must be replaced with a constraint_error in any case.
  
--- 6640,6646 ----
        Error_Msg_Warn := Warn or SPARK_Mode /= On;
  
        --  A static constraint error in an instance body is not a fatal error.
!       --  We choose to inhibit the message altogether, because there is no
        --  obvious node (for now) on which to post it. On the other hand the
        --  offending node must be replaced with a constraint_error in any case.
  
*************** package body Sem_Util is
*** 6618,6628 ****
  
                 if Inside_Init_Proc then
                    declare
                       Conc_Typ : constant Entity_Id :=
!                                   Corresponding_Concurrent_Type
!                                     (Entity (Parameter_Type (First
!                                       (Parameter_Specifications
!                                         (Parent (Current_Scope))))));
  
                    begin
                       --  Don't complain if the corresponding concurrent type
--- 6728,6741 ----
  
                 if Inside_Init_Proc then
                    declare
+                      Init_Proc_Type : constant Entity_Id :=
+                        Etype (First_Formal (Current_Scope_No_Loops));
+ 
                       Conc_Typ : constant Entity_Id :=
!                        (if Present (Init_Proc_Type)
!                           and then Init_Proc_Type in E_Record_Type_Id
!                         then Corresponding_Concurrent_Type (Init_Proc_Type)
!                         else Empty);
  
                    begin
                       --  Don't complain if the corresponding concurrent type
*************** package body Sem_Util is
*** 6632,6655 ****
                       if Present (Conc_Typ)
                         and then not Comes_From_Source (Conc_Typ)
                       then
!                         Error_Msg_NEL
!                           ("\& [<<", N, Standard_Constraint_Error, Eloc);
  
                       else
                          if GNATprove_Mode then
!                            Error_Msg_NEL
!                              ("\& would have been raised for objects of this "
!                               & "type", N, Standard_Constraint_Error, Eloc);
                          else
!                            Error_Msg_NEL
!                              ("\& will be raised for objects of this type??",
!                               N, Standard_Constraint_Error, Eloc);
                          end if;
                       end if;
                    end;
  
                 else
!                   Error_Msg_NEL ("\& [<<", N, Standard_Constraint_Error, Eloc);
                 end if;
  
              else
--- 6745,6767 ----
                       if Present (Conc_Typ)
                         and then not Comes_From_Source (Conc_Typ)
                       then
!                         Error_Msg ("\& [<<", Eloc, N);
  
                       else
                          if GNATprove_Mode then
!                            Error_Msg
!                              ("\Constraint_Error would have been raised"
!                               & " for objects of this type", Eloc, N);
                          else
!                            Error_Msg
!                              ("\Constraint_Error will be raised"
!                               & " for objects of this type??", Eloc, N);
                          end if;
                       end if;
                    end;
  
                 else
!                   Error_Msg ("\Constraint_Error [<<", Eloc, N);
                 end if;
  
              else
*************** package body Sem_Util is
*** 6662,6667 ****
--- 6774,6889 ----
        return N;
     end Compile_Time_Constraint_Error;
  
+    ----------------------------
+    -- Compute_Returns_By_Ref --
+    ----------------------------
+ 
+    procedure Compute_Returns_By_Ref (Func : Entity_Id) is
+       Typ  : constant Entity_Id := Etype (Func);
+       Utyp : constant Entity_Id := Underlying_Type (Typ);
+ 
+    begin
+       if Is_Limited_View (Typ) then
+          Set_Returns_By_Ref (Func);
+ 
+       elsif Present (Utyp) and then CW_Or_Has_Controlled_Part (Utyp) then
+          Set_Returns_By_Ref (Func);
+       end if;
+    end Compute_Returns_By_Ref;
+ 
+    --------------------------------
+    -- Collect_Types_In_Hierarchy --
+    --------------------------------
+ 
+    function Collect_Types_In_Hierarchy
+      (Typ                : Entity_Id;
+       Examine_Components : Boolean := False) return Elist_Id
+    is
+       Results : Elist_Id;
+ 
+       procedure Process_Type (Typ : Entity_Id);
+       --  Collect type Typ if it satisfies function Predicate. Do so for its
+       --  parent type, base type, progenitor types, and any component types.
+ 
+       ------------------
+       -- Process_Type --
+       ------------------
+ 
+       procedure Process_Type (Typ : Entity_Id) is
+          Comp       : Entity_Id;
+          Iface_Elmt : Elmt_Id;
+ 
+       begin
+          if not Is_Type (Typ) or else Error_Posted (Typ) then
+             return;
+          end if;
+ 
+          --  Collect the current type if it satisfies the predicate
+ 
+          if Predicate (Typ) then
+             Append_Elmt (Typ, Results);
+          end if;
+ 
+          --  Process component types
+ 
+          if Examine_Components then
+ 
+             --  Examine components and discriminants
+ 
+             if Is_Concurrent_Type (Typ)
+               or else Is_Incomplete_Or_Private_Type (Typ)
+               or else Is_Record_Type (Typ)
+               or else Has_Discriminants (Typ)
+             then
+                Comp := First_Component_Or_Discriminant (Typ);
+ 
+                while Present (Comp) loop
+                   Process_Type (Etype (Comp));
+ 
+                   Next_Component_Or_Discriminant (Comp);
+                end loop;
+ 
+             --  Examine array components
+ 
+             elsif Ekind (Typ) = E_Array_Type then
+                Process_Type (Component_Type (Typ));
+             end if;
+          end if;
+ 
+          --  Examine parent type
+ 
+          if Etype (Typ) /= Typ then
+             Process_Type (Etype (Typ));
+          end if;
+ 
+          --  Examine base type
+ 
+          if Base_Type (Typ) /= Typ then
+             Process_Type (Base_Type (Typ));
+          end if;
+ 
+          --  Examine interfaces
+ 
+          if Is_Record_Type (Typ)
+            and then Present (Interfaces (Typ))
+          then
+             Iface_Elmt := First_Elmt (Interfaces (Typ));
+             while Present (Iface_Elmt) loop
+                Process_Type (Node (Iface_Elmt));
+ 
+                Next_Elmt (Iface_Elmt);
+             end loop;
+          end if;
+       end Process_Type;
+ 
+    --  Start of processing for Collect_Types_In_Hierarchy
+ 
+    begin
+       Results := New_Elmt_List;
+       Process_Type (Typ);
+       return Results;
+    end Collect_Types_In_Hierarchy;
+ 
     -----------------------
     -- Conditional_Delay --
     -----------------------
*************** package body Sem_Util is
*** 6714,6727 ****
     function Copy_Parameter_List (Subp_Id : Entity_Id) return List_Id is
        Loc    : constant Source_Ptr := Sloc (Subp_Id);
        Plist  : List_Id;
!       Formal : Entity_Id;
  
     begin
!       if No (First_Formal (Subp_Id)) then
!          return No_List;
!       else
!          Plist  := New_List;
!          Formal := First_Formal (Subp_Id);
           while Present (Formal) loop
              Append_To (Plist,
                Make_Parameter_Specification (Loc,
--- 6936,6946 ----
     function Copy_Parameter_List (Subp_Id : Entity_Id) return List_Id is
        Loc    : constant Source_Ptr := Sloc (Subp_Id);
        Plist  : List_Id;
!       Formal : Entity_Id := First_Formal (Subp_Id);
  
     begin
!       if Present (Formal) then
!          Plist := New_List;
           while Present (Formal) loop
              Append_To (Plist,
                Make_Parameter_Specification (Loc,
*************** package body Sem_Util is
*** 6736,6741 ****
--- 6955,6962 ----
  
              Next_Formal (Formal);
           end loop;
+       else
+          Plist := No_List;
        end if;
  
        return Plist;
*************** package body Sem_Util is
*** 6764,6770 ****
     -- Copy_Subprogram_Spec --
     --------------------------
  
!    function Copy_Subprogram_Spec (Spec : Node_Id) return Node_Id is
        Def_Id      : Node_Id;
        Formal_Spec : Node_Id;
        Result      : Node_Id;
--- 6985,6994 ----
     -- Copy_Subprogram_Spec --
     --------------------------
  
!    function Copy_Subprogram_Spec
!      (Spec     : Node_Id;
!       New_Sloc : Source_Ptr := No_Location) return Node_Id
!    is
        Def_Id      : Node_Id;
        Formal_Spec : Node_Id;
        Result      : Node_Id;
*************** package body Sem_Util is
*** 6773,6779 ****
        --  The structure of the original tree must be replicated without any
        --  alterations. Use New_Copy_Tree for this purpose.
  
!       Result := New_Copy_Tree (Spec);
  
        --  However, the spec of a null procedure carries the corresponding null
        --  statement of the body (created by the parser), and this cannot be
--- 6997,7003 ----
        --  The structure of the original tree must be replicated without any
        --  alterations. Use New_Copy_Tree for this purpose.
  
!       Result := New_Copy_Tree (Spec, New_Sloc => New_Sloc);
  
        --  However, the spec of a null procedure carries the corresponding null
        --  statement of the body (created by the parser), and this cannot be
*************** package body Sem_Util is
*** 6854,6859 ****
--- 7078,7156 ----
        end if;
     end Corresponding_Generic_Type;
  
+    --------------------------------
+    -- Corresponding_Primitive_Op --
+    --------------------------------
+ 
+    function Corresponding_Primitive_Op
+      (Ancestor_Op     : Entity_Id;
+       Descendant_Type : Entity_Id) return Entity_Id
+    is
+       Typ  : constant Entity_Id := Find_Dispatching_Type (Ancestor_Op);
+       Elmt : Elmt_Id;
+       Subp : Entity_Id;
+       Prim : Entity_Id;
+    begin
+       pragma Assert (Is_Dispatching_Operation (Ancestor_Op));
+       pragma Assert (Is_Ancestor (Typ, Descendant_Type)
+                       or else Is_Progenitor (Typ, Descendant_Type));
+ 
+       Elmt := First_Elmt (Primitive_Operations (Descendant_Type));
+ 
+       while Present (Elmt) loop
+          Subp := Node (Elmt);
+ 
+          --  For regular primitives we only need to traverse the chain of
+          --  ancestors when the name matches the name of Ancestor_Op, but
+          --  for predefined dispatching operations we cannot rely on the
+          --  name of the primitive to identify a candidate since their name
+          --  is internally built adding a suffix to the name of the tagged
+          --  type.
+ 
+          if Chars (Subp) = Chars (Ancestor_Op)
+            or else Is_Predefined_Dispatching_Operation (Subp)
+          then
+             --  Handle case where Ancestor_Op is a primitive of a progenitor.
+             --  We rely on internal entities that map interface primitives:
+             --  their attribute Interface_Alias references the interface
+             --  primitive, and their Alias attribute references the primitive
+             --  of Descendant_Type implementing that interface primitive.
+ 
+             if Present (Interface_Alias (Subp)) then
+                if Interface_Alias (Subp) = Ancestor_Op then
+                   return Alias (Subp);
+                end if;
+ 
+             --  Traverse the chain of ancestors searching for Ancestor_Op.
+             --  Overridden primitives have attribute Overridden_Operation;
+             --  inherited primitives have attribute Alias.
+ 
+             else
+                Prim := Subp;
+ 
+                while Present (Overridden_Operation (Prim))
+                  or else Present (Alias (Prim))
+                loop
+                   if Present (Overridden_Operation (Prim)) then
+                      Prim := Overridden_Operation (Prim);
+                   else
+                      Prim := Alias (Prim);
+                   end if;
+ 
+                   if Prim = Ancestor_Op then
+                      return Subp;
+                   end if;
+                end loop;
+             end if;
+          end if;
+ 
+          Next_Elmt (Elmt);
+       end loop;
+ 
+       pragma Assert (False);
+       return Empty;
+    end Corresponding_Primitive_Op;
+ 
     --------------------
     -- Current_Entity --
     --------------------
*************** package body Sem_Util is
*** 6873,6891 ****
     -----------------------------
  
     function Current_Entity_In_Scope (N : Name_Id) return Entity_Id is
-       E  : Entity_Id;
        CS : constant Entity_Id := Current_Scope;
  
!       Transient_Case : constant Boolean := Scope_Is_Transient;
  
     begin
        E := Get_Name_Entity_Id (N);
!       while Present (E)
!         and then Scope (E) /= CS
!         and then (not Transient_Case or else Scope (E) /= Scope (CS))
!       loop
!          E := Homonym (E);
!       end loop;
  
        return E;
     end Current_Entity_In_Scope;
--- 7170,7199 ----
     -----------------------------
  
     function Current_Entity_In_Scope (N : Name_Id) return Entity_Id is
        CS : constant Entity_Id := Current_Scope;
  
!       E  : Entity_Id;
  
     begin
        E := Get_Name_Entity_Id (N);
! 
!       if No (E) then
!          null;
! 
!       elsif Scope_Is_Transient then
!          while Present (E) loop
!             exit when Scope (E) = CS or else Scope (E) = Scope (CS);
! 
!             E := Homonym (E);
!          end loop;
! 
!       else
!          while Present (E) loop
!             exit when Scope (E) = CS;
! 
!             E := Homonym (E);
!          end loop;
!       end if;
  
        return E;
     end Current_Entity_In_Scope;
*************** package body Sem_Util is
*** 6959,6973 ****
     end Current_Subprogram;
  
     -------------------------------
     -- Deepest_Type_Access_Level --
     -------------------------------
  
!    function Deepest_Type_Access_Level (Typ : Entity_Id) return Uint is
     begin
        if Ekind (Typ) = E_Anonymous_Access_Type
          and then not Is_Local_Anonymous_Access (Typ)
          and then Nkind (Associated_Node_For_Itype (Typ)) = N_Object_Declaration
        then
           --  Typ is the type of an Ada 2012 stand-alone object of an anonymous
           --  access type.
  
--- 7267,7302 ----
     end Current_Subprogram;
  
     -------------------------------
+    -- CW_Or_Has_Controlled_Part --
+    -------------------------------
+ 
+    function CW_Or_Has_Controlled_Part (T : Entity_Id) return Boolean is
+    begin
+       return Is_Class_Wide_Type (T) or else Needs_Finalization (T);
+    end CW_Or_Has_Controlled_Part;
+ 
+    -------------------------------
     -- Deepest_Type_Access_Level --
     -------------------------------
  
!    function Deepest_Type_Access_Level
!      (Typ             : Entity_Id;
!       Allow_Alt_Model : Boolean := True) return Uint
!    is
     begin
        if Ekind (Typ) = E_Anonymous_Access_Type
          and then not Is_Local_Anonymous_Access (Typ)
          and then Nkind (Associated_Node_For_Itype (Typ)) = N_Object_Declaration
        then
+          --  No_Dynamic_Accessibility_Checks override for alternative
+          --  accessibility model.
+ 
+          if Allow_Alt_Model
+            and then No_Dynamic_Accessibility_Checks_Enabled (Typ)
+          then
+             return Type_Access_Level (Typ, Allow_Alt_Model);
+          end if;
+ 
           --  Typ is the type of an Ada 2012 stand-alone object of an anonymous
           --  access type.
  
*************** package body Sem_Util is
*** 6983,6989 ****
           return UI_From_Int (Int'Last);
  
        else
!          return Type_Access_Level (Typ);
        end if;
     end Deepest_Type_Access_Level;
  
--- 7312,7318 ----
           return UI_From_Int (Int'Last);
  
        else
!          return Type_Access_Level (Typ, Allow_Alt_Model);
        end if;
     end Deepest_Type_Access_Level;
  
*************** package body Sem_Util is
*** 6991,7000 ****
     -- Defining_Entity --
     ---------------------
  
!    function Defining_Entity
!      (N               : Node_Id;
!       Empty_On_Errors : Boolean := False) return Entity_Id
!    is
     begin
        case Nkind (N) is
           when N_Abstract_Subprogram_Declaration
--- 7320,7342 ----
     -- Defining_Entity --
     ---------------------
  
!    function Defining_Entity (N : Node_Id) return Entity_Id is
!       Ent : constant Entity_Id := Defining_Entity_Or_Empty (N);
! 
!    begin
!       if Present (Ent) then
!          return Ent;
! 
!       else
!          raise Program_Error;
!       end if;
!    end Defining_Entity;
! 
!    ------------------------------
!    -- Defining_Entity_Or_Empty --
!    ------------------------------
! 
!    function Defining_Entity_Or_Empty (N : Node_Id) return Entity_Id is
     begin
        case Nkind (N) is
           when N_Abstract_Subprogram_Declaration
*************** package body Sem_Util is
*** 7093,7105 ****
              return Entity (Identifier (N));
  
           when others =>
!             if Empty_On_Errors then
!                return Empty;
!             end if;
! 
!             raise Program_Error;
        end case;
!    end Defining_Entity;
  
     --------------------------
     -- Denotes_Discriminant --
--- 7435,7443 ----
              return Entity (Identifier (N));
  
           when others =>
!             return Empty;
        end case;
!    end Defining_Entity_Or_Empty;
  
     --------------------------
     -- Denotes_Discriminant --
*************** package body Sem_Util is
*** 7139,7146 ****
     -------------------------
  
     function Denotes_Same_Object (A1, A2 : Node_Id) return Boolean is
!       function Is_Renaming (N : Node_Id) return Boolean;
!       --  Return true if N names a renaming entity
  
        function Is_Valid_Renaming (N : Node_Id) return Boolean;
        --  For renamings, return False if the prefix of any dereference within
--- 7477,7484 ----
     -------------------------
  
     function Denotes_Same_Object (A1, A2 : Node_Id) return Boolean is
!       function Is_Object_Renaming (N : Node_Id) return Boolean;
!       --  Return true if N names an object renaming entity
  
        function Is_Valid_Renaming (N : Node_Id) return Boolean;
        --  For renamings, return False if the prefix of any dereference within
*************** package body Sem_Util is
*** 7148,7332 ****
        --  renamed object_name contains references to variables or calls on
        --  nonstatic functions; otherwise return True (RM 6.4.1(6.10/3))
  
!       -----------------
!       -- Is_Renaming --
!       -----------------
  
!       function Is_Renaming (N : Node_Id) return Boolean is
        begin
!          if not Is_Entity_Name (N) then
!             return False;
!          end if;
! 
!          case Ekind (Entity (N)) is
!             when E_Variable | E_Constant =>
!                return Present (Renamed_Object (Entity (N)));
! 
!             when E_Exception
!                | E_Function
!                | E_Generic_Function
!                | E_Generic_Package
!                | E_Generic_Procedure
!                | E_Operator
!                | E_Package
!                | E_Procedure
!             =>
!                return Present (Renamed_Entity (Entity (N)));
! 
!             when others =>
!                return False;
!          end case;
!       end Is_Renaming;
  
        -----------------------
        -- Is_Valid_Renaming --
        -----------------------
  
        function Is_Valid_Renaming (N : Node_Id) return Boolean is
!          function Check_Renaming (N : Node_Id) return Boolean;
!          --  Recursive function used to traverse all the prefixes of N
! 
!          --------------------
!          -- Check_Renaming --
!          --------------------
  
!          function Check_Renaming (N : Node_Id) return Boolean is
!          begin
!             if Is_Renaming (N)
!               and then not Check_Renaming (Renamed_Entity (Entity (N)))
!             then
!                return False;
!             end if;
  
!             if Nkind (N) = N_Indexed_Component then
!                declare
!                   Indx : Node_Id;
  
!                begin
!                   Indx := First (Expressions (N));
!                   while Present (Indx) loop
!                      if not Is_OK_Static_Expression (Indx) then
!                         return False;
!                      end if;
  
!                      Next_Index (Indx);
!                   end loop;
!                end;
!             end if;
  
!             if Has_Prefix (N) then
!                declare
!                   P : constant Node_Id := Prefix (N);
  
!                begin
!                   if Nkind (N) = N_Explicit_Dereference
!                     and then Is_Variable (P)
!                   then
                       return False;
  
!                   elsif Is_Entity_Name (P)
!                     and then Ekind (Entity (P)) = E_Function
!                   then
!                      return False;
  
!                   elsif Nkind (P) = N_Function_Call then
                       return False;
                    end if;
  
!                   --  Recursion to continue traversing the prefix of the
!                   --  renaming expression
  
!                   return Check_Renaming (P);
!                end;
!             end if;
  
!             return True;
!          end Check_Renaming;
  
!       --  Start of processing for Is_Valid_Renaming
  
!       begin
!          return Check_Renaming (N);
!       end Is_Valid_Renaming;
  
!       --  Local variables
  
!       Obj1 : Node_Id := A1;
!       Obj2 : Node_Id := A2;
  
     --  Start of processing for Denotes_Same_Object
  
     begin
!       --  Both names statically denote the same stand-alone object or parameter
!       --  (RM 6.4.1(6.5/3))
  
!       if Is_Entity_Name (Obj1)
!         and then Is_Entity_Name (Obj2)
!         and then Entity (Obj1) = Entity (Obj2)
        then
           return True;
-       end if;
- 
-       --  For renamings, the prefix of any dereference within the renamed
-       --  object_name is not a variable, and any expression within the
-       --  renamed object_name contains no references to variables nor
-       --  calls on nonstatic functions (RM 6.4.1(6.10/3)).
- 
-       if Is_Renaming (Obj1) then
-          if Is_Valid_Renaming (Obj1) then
-             Obj1 := Renamed_Entity (Entity (Obj1));
-          else
-             return False;
-          end if;
-       end if;
- 
-       if Is_Renaming (Obj2) then
-          if Is_Valid_Renaming (Obj2) then
-             Obj2 := Renamed_Entity (Entity (Obj2));
-          else
-             return False;
-          end if;
-       end if;
- 
-       --  No match if not same node kind (such cases are handled by
-       --  Denotes_Same_Prefix)
- 
-       if Nkind (Obj1) /= Nkind (Obj2) then
-          return False;
- 
-       --  After handling valid renamings, one of the two names statically
-       --  denoted a renaming declaration whose renamed object_name is known
-       --  to denote the same object as the other (RM 6.4.1(6.10/3))
- 
-       elsif Is_Entity_Name (Obj1) then
-          if Is_Entity_Name (Obj2) then
-             return Entity (Obj1) = Entity (Obj2);
-          else
-             return False;
-          end if;
  
        --  Both names are selected_components, their prefixes are known to
        --  denote the same object, and their selector_names denote the same
!       --  component (RM 6.4.1(6.6/3)).
  
!       elsif Nkind (Obj1) = N_Selected_Component then
!          return Denotes_Same_Object (Prefix (Obj1), Prefix (Obj2))
             and then
!              Entity (Selector_Name (Obj1)) = Entity (Selector_Name (Obj2));
  
        --  Both names are dereferences and the dereferenced names are known to
!       --  denote the same object (RM 6.4.1(6.7/3))
  
!       elsif Nkind (Obj1) = N_Explicit_Dereference then
!          return Denotes_Same_Object (Prefix (Obj1), Prefix (Obj2));
  
        --  Both names are indexed_components, their prefixes are known to denote
        --  the same object, and each of the pairs of corresponding index values
        --  are either both static expressions with the same static value or both
!       --  names that are known to denote the same object (RM 6.4.1(6.8/3))
  
!       elsif Nkind (Obj1) = N_Indexed_Component then
!          if not Denotes_Same_Object (Prefix (Obj1), Prefix (Obj2)) then
              return False;
           else
              declare
--- 7486,7629 ----
        --  renamed object_name contains references to variables or calls on
        --  nonstatic functions; otherwise return True (RM 6.4.1(6.10/3))
  
!       ------------------------
!       -- Is_Object_Renaming --
!       ------------------------
  
!       function Is_Object_Renaming (N : Node_Id) return Boolean is
        begin
!          return Is_Entity_Name (N)
!            and then Ekind (Entity (N)) in E_Variable | E_Constant
!            and then Present (Renamed_Object (Entity (N)));
!       end Is_Object_Renaming;
  
        -----------------------
        -- Is_Valid_Renaming --
        -----------------------
  
        function Is_Valid_Renaming (N : Node_Id) return Boolean is
!       begin
!          if Is_Object_Renaming (N)
!            and then not Is_Valid_Renaming (Renamed_Object (Entity (N)))
!          then
!             return False;
!          end if;
  
!          --  Check if any expression within the renamed object_name contains no
!          --  references to variables nor calls on nonstatic functions.
  
!          if Nkind (N) = N_Indexed_Component then
!             declare
!                Indx : Node_Id;
  
!             begin
!                Indx := First (Expressions (N));
!                while Present (Indx) loop
!                   if not Is_OK_Static_Expression (Indx) then
!                      return False;
!                   end if;
  
!                   Next (Indx);
!                end loop;
!             end;
  
!          elsif Nkind (N) = N_Slice then
!             declare
!                Rng : constant Node_Id := Discrete_Range (N);
!             begin
!                --  Bounds specified as a range
  
!                if Nkind (Rng) = N_Range then
!                   if not Is_OK_Static_Range (Rng) then
                       return False;
+                   end if;
  
!                --  Bounds specified as a constrained subtype indication
  
!                elsif Nkind (Rng) = N_Subtype_Indication then
!                   if not Is_OK_Static_Range
!                        (Range_Expression (Constraint (Rng)))
!                   then
                       return False;
                    end if;
  
!                --  Bounds specified as a subtype name
  
!                elsif not Is_OK_Static_Expression (Rng) then
!                   return False;
!                end if;
!             end;
!          end if;
  
!          if Has_Prefix (N) then
!             declare
!                P : constant Node_Id := Prefix (N);
  
!             begin
!                if Nkind (N) = N_Explicit_Dereference
!                  and then Is_Variable (P)
!                then
!                   return False;
  
!                elsif Is_Entity_Name (P)
!                  and then Ekind (Entity (P)) = E_Function
!                then
!                   return False;
  
!                elsif Nkind (P) = N_Function_Call then
!                   return False;
!                end if;
  
!                --  Recursion to continue traversing the prefix of the
!                --  renaming expression
! 
!                return Is_Valid_Renaming (P);
!             end;
!          end if;
! 
!          return True;
!       end Is_Valid_Renaming;
  
     --  Start of processing for Denotes_Same_Object
  
     begin
!       --  Both names statically denote the same stand-alone object or
!       --  parameter (RM 6.4.1(6.6/3)).
  
!       if Is_Entity_Name (A1)
!         and then Is_Entity_Name (A2)
!         and then Entity (A1) = Entity (A2)
        then
           return True;
  
        --  Both names are selected_components, their prefixes are known to
        --  denote the same object, and their selector_names denote the same
!       --  component (RM 6.4.1(6.7/3)).
  
!       elsif Nkind (A1) = N_Selected_Component
!         and then Nkind (A2) = N_Selected_Component
!       then
!          return Denotes_Same_Object (Prefix (A1), Prefix (A2))
             and then
!              Entity (Selector_Name (A1)) = Entity (Selector_Name (A2));
  
        --  Both names are dereferences and the dereferenced names are known to
!       --  denote the same object (RM 6.4.1(6.8/3)).
  
!       elsif Nkind (A1) = N_Explicit_Dereference
!         and then Nkind (A2) = N_Explicit_Dereference
!       then
!          return Denotes_Same_Object (Prefix (A1), Prefix (A2));
  
        --  Both names are indexed_components, their prefixes are known to denote
        --  the same object, and each of the pairs of corresponding index values
        --  are either both static expressions with the same static value or both
!       --  names that are known to denote the same object (RM 6.4.1(6.9/3)).
  
!       elsif Nkind (A1) = N_Indexed_Component
!         and then Nkind (A2) = N_Indexed_Component
!       then
!          if not Denotes_Same_Object (Prefix (A1), Prefix (A2)) then
              return False;
           else
              declare
*************** package body Sem_Util is
*** 7334,7341 ****
                 Indx2 : Node_Id;
  
              begin
!                Indx1 := First (Expressions (Obj1));
!                Indx2 := First (Expressions (Obj2));
                 while Present (Indx1) loop
  
                    --  Indexes must denote the same static value or same object
--- 7631,7638 ----
                 Indx2 : Node_Id;
  
              begin
!                Indx1 := First (Expressions (A1));
!                Indx2 := First (Expressions (A2));
                 while Present (Indx1) loop
  
                    --  Indexes must denote the same static value or same object
*************** package body Sem_Util is
*** 7362,7394 ****
  
        --  Both names are slices, their prefixes are known to denote the same
        --  object, and the two slices have statically matching index constraints
!       --  (RM 6.4.1(6.9/3))
  
!       elsif Nkind (Obj1) = N_Slice
!         and then Denotes_Same_Object (Prefix (Obj1), Prefix (Obj2))
        then
!          declare
!             Lo1, Lo2, Hi1, Hi2 : Node_Id;
  
!          begin
!             Get_Index_Bounds (Etype (Obj1), Lo1, Hi1);
!             Get_Index_Bounds (Etype (Obj2), Lo2, Hi2);
  
!             --  Check whether bounds are statically identical. There is no
!             --  attempt to detect partial overlap of slices.
  
!             return Denotes_Same_Object (Lo1, Lo2)
!                      and then
!                    Denotes_Same_Object (Hi1, Hi2);
!          end;
  
!       --  In the recursion, literals appear as indexes
  
!       elsif Nkind (Obj1) = N_Integer_Literal
!               and then
!             Nkind (Obj2) = N_Integer_Literal
        then
!          return Intval (Obj1) = Intval (Obj2);
  
        else
           return False;
--- 7659,7707 ----
  
        --  Both names are slices, their prefixes are known to denote the same
        --  object, and the two slices have statically matching index constraints
!       --  (RM 6.4.1(6.10/3)).
  
!       elsif Nkind (A1) = N_Slice
!         and then Nkind (A2) = N_Slice
        then
!          if not Denotes_Same_Object (Prefix (A1), Prefix (A2)) then
!             return False;
!          else
!             declare
!                Lo1, Lo2, Hi1, Hi2 : Node_Id;
  
!             begin
!                Get_Index_Bounds (Discrete_Range (A1), Lo1, Hi1);
!                Get_Index_Bounds (Discrete_Range (A2), Lo2, Hi2);
  
!                --  Check whether bounds are statically identical. There is no
!                --  attempt to detect partial overlap of slices.
  
!                return Is_OK_Static_Expression (Lo1)
!                  and then Is_OK_Static_Expression (Lo2)
!                  and then Is_OK_Static_Expression (Hi1)
!                  and then Is_OK_Static_Expression (Hi2)
!                  and then Expr_Value (Lo1) = Expr_Value (Lo2)
!                  and then Expr_Value (Hi1) = Expr_Value (Hi2);
!             end;
!          end if;
  
!       --  One of the two names statically denotes a renaming declaration whose
!       --  renamed object_name is known to denote the same object as the other;
!       --  the prefix of any dereference within the renamed object_name is not a
!       --  variable, and any expression within the renamed object_name contains
!       --  no references to variables nor calls on nonstatic functions (RM
!       --  6.4.1(6.11/3)).
  
!       elsif Is_Object_Renaming (A1)
!         and then Is_Valid_Renaming (A1)
        then
!          return Denotes_Same_Object (Renamed_Object (Entity (A1)), A2);
! 
!       elsif Is_Object_Renaming (A2)
!         and then Is_Valid_Renaming (A2)
!       then
!          return Denotes_Same_Object (A1, Renamed_Object (Entity (A2)));
  
        else
           return False;
*************** package body Sem_Util is
*** 7506,7567 ****
  
     function Derivation_Too_Early_To_Inherit
       (Typ : Entity_Id; Streaming_Op : TSS_Name_Type) return Boolean is
        Btyp        : constant Entity_Id := Implementation_Base_Type (Typ);
        Parent_Type : Entity_Id;
     begin
        if Is_Derived_Type (Btyp) then
           Parent_Type := Implementation_Base_Type (Etype (Btyp));
           pragma Assert (Parent_Type /= Btyp);
           if Has_Stream_Attribute_Definition
!               (Parent_Type, Streaming_Op)
             and then In_Same_Extended_Unit (Btyp, Parent_Type)
             and then Instantiation (Get_Source_File_Index (Sloc (Btyp))) =
                      Instantiation (Get_Source_File_Index (Sloc (Parent_Type)))
           then
!             declare
!                --  ??? Avoid code duplication here with
!                --  Sem_Cat.Has_Stream_Attribute_Definition by introducing a
!                --  new function to be called from both places?
! 
!                Rep_Item : Node_Id := First_Rep_Item (Parent_Type);
!                Real_Rep : Node_Id;
!                Found    : Boolean := False;
!             begin
!                while Present (Rep_Item) loop
!                   Real_Rep := Rep_Item;
! 
!                   if Nkind (Rep_Item) = N_Aspect_Specification then
!                      Real_Rep := Aspect_Rep_Item (Rep_Item);
!                   end if;
! 
!                   if Nkind (Real_Rep) = N_Attribute_Definition_Clause then
!                      case Chars (Real_Rep) is
!                         when Name_Read =>
!                            Found := Streaming_Op = TSS_Stream_Read;
! 
!                         when Name_Write =>
!                            Found := Streaming_Op = TSS_Stream_Write;
! 
!                         when Name_Input =>
!                            Found := Streaming_Op = TSS_Stream_Input;
! 
!                         when Name_Output =>
!                            Found := Streaming_Op = TSS_Stream_Output;
! 
!                         when others =>
!                            null;
!                      end case;
!                   end if;
! 
!                   if Found then
!                      return Earlier_In_Extended_Unit (Btyp, Real_Rep);
!                   end if;
! 
!                   Next_Rep_Item (Rep_Item);
!                end loop;
!             end;
           end if;
        end if;
        return False;
     end Derivation_Too_Early_To_Inherit;
  
--- 7819,7848 ----
  
     function Derivation_Too_Early_To_Inherit
       (Typ : Entity_Id; Streaming_Op : TSS_Name_Type) return Boolean is
+ 
        Btyp        : constant Entity_Id := Implementation_Base_Type (Typ);
        Parent_Type : Entity_Id;
+ 
+       Real_Rep : Node_Id;
+ 
+    --  Start of processing for Derivation_Too_Early_To_Inherit
+ 
     begin
        if Is_Derived_Type (Btyp) then
           Parent_Type := Implementation_Base_Type (Etype (Btyp));
           pragma Assert (Parent_Type /= Btyp);
+ 
           if Has_Stream_Attribute_Definition
!               (Parent_Type, Streaming_Op, Real_Rep => Real_Rep)
! 
             and then In_Same_Extended_Unit (Btyp, Parent_Type)
             and then Instantiation (Get_Source_File_Index (Sloc (Btyp))) =
                      Instantiation (Get_Source_File_Index (Sloc (Parent_Type)))
           then
!             return Earlier_In_Extended_Unit (Btyp, Real_Rep);
           end if;
        end if;
+ 
        return False;
     end Derivation_Too_Early_To_Inherit;
  
*************** package body Sem_Util is
*** 7793,7803 ****
           Current_Node := Parent (Current_Node);
        end loop;
  
!       if Nkind (Current_Node) /= N_Compilation_Unit then
!          return Empty;
!       else
!          return Current_Node;
!       end if;
     end Enclosing_Comp_Unit_Node;
  
     --------------------------
--- 8074,8080 ----
           Current_Node := Parent (Current_Node);
        end loop;
  
!       return Current_Node;
     end Enclosing_Comp_Unit_Node;
  
     --------------------------
*************** package body Sem_Util is
*** 7861,7868 ****
  
              if Present (Spec_Id)
                and then Nkind (Unit_Declaration_Node (Spec_Id)) in
!                          N_Generic_Package_Declaration |
!                          N_Generic_Subprogram_Declaration
              then
                 return Par;
              end if;
--- 8138,8144 ----
  
              if Present (Spec_Id)
                and then Nkind (Unit_Declaration_Node (Spec_Id)) in
!                          N_Generic_Declaration
              then
                 return Par;
              end if;
*************** package body Sem_Util is
*** 7886,7894 ****
     begin
        Par := Parent (N);
        while Present (Par) loop
!          if Nkind (Par) in N_Generic_Package_Declaration
!                          | N_Generic_Subprogram_Declaration
!          then
              return Par;
  
           elsif Nkind (Par) in N_Package_Body | N_Subprogram_Body then
--- 8162,8168 ----
     begin
        Par := Parent (N);
        while Present (Par) loop
!          if Nkind (Par) in N_Generic_Declaration then
              return Par;
  
           elsif Nkind (Par) in N_Package_Body | N_Subprogram_Body then
*************** package body Sem_Util is
*** 7897,7905 ****
              if Present (Spec_Id) then
                 Spec_Decl := Unit_Declaration_Node (Spec_Id);
  
!                if Nkind (Spec_Decl) in N_Generic_Package_Declaration
!                                      | N_Generic_Subprogram_Declaration
!                then
                    return Spec_Decl;
                 end if;
              end if;
--- 8171,8177 ----
              if Present (Spec_Id) then
                 Spec_Decl := Unit_Declaration_Node (Spec_Id);
  
!                if Nkind (Spec_Decl) in N_Generic_Declaration then
                    return Spec_Decl;
                 end if;
              end if;
*************** package body Sem_Util is
*** 8127,8133 ****
  
        --  Local variables
  
!       Owner : Node_Id;
  
     --  Start of processing for End_Keyword_Location
  
--- 8399,8405 ----
  
        --  Local variables
  
!       Owner : Node_Id := Empty;
  
     --  Start of processing for End_Keyword_Location
  
*************** package body Sem_Util is
*** 8462,8468 ****
        --  will be detected. Any_Type insures that no cascaded errors will occur
  
        else
!          Set_Ekind (Def_Id, E_Void);
           Set_Etype (Def_Id, Any_Type);
        end if;
  
--- 8734,8740 ----
        --  will be detected. Any_Type insures that no cascaded errors will occur
  
        else
!          Mutate_Ekind (Def_Id, E_Void);
           Set_Etype (Def_Id, Any_Type);
        end if;
  
*************** package body Sem_Util is
*** 8502,8507 ****
--- 8774,8783 ----
          and then Comes_From_Source (C)
          and then Comes_From_Source (Def_Id)
  
+         --  Don't warn within a generic instantiation
+ 
+         and then not In_Instance
+ 
          --  Don't warn unless entity in question is in extended main source
  
          and then In_Extended_Main_Source_Unit (Def_Id)
*************** package body Sem_Util is
*** 8741,8747 ****
     function Expression_Of_Expression_Function
       (Subp : Entity_Id) return Node_Id
     is
!       Expr_Func : Node_Id;
  
     begin
        pragma Assert (Is_Expression_Function_Or_Completion (Subp));
--- 9017,9023 ----
     function Expression_Of_Expression_Function
       (Subp : Entity_Id) return Node_Id
     is
!       Expr_Func : Node_Id := Empty;
  
     begin
        pragma Assert (Is_Expression_Function_Or_Completion (Subp));
*************** package body Sem_Util is
*** 8920,8925 ****
--- 9196,9207 ----
        then
           Call_Nam := Name (Call);
  
+          --  A call to an entry family may appear as an indexed component
+ 
+          if Nkind (Call_Nam) = N_Indexed_Component then
+             Call_Nam := Prefix (Call_Nam);
+          end if;
+ 
           --  A call to a protected or task entry appears as a selected
           --  component rather than an expanded name.
  
*************** package body Sem_Util is
*** 8929,8935 ****
  
           if Is_Entity_Name (Call_Nam)
             and then Present (Entity (Call_Nam))
!            and then Is_Overloadable (Entity (Call_Nam))
             and then not Is_Overloaded (Call_Nam)
           then
              --  If node is name in call it is not an actual
--- 9211,9221 ----
  
           if Is_Entity_Name (Call_Nam)
             and then Present (Entity (Call_Nam))
!            and then (Is_Generic_Subprogram (Entity (Call_Nam))
!                       or else Is_Overloadable (Entity (Call_Nam))
!                       or else Ekind (Entity (Call_Nam)) in E_Entry_Family
!                                                          | E_Subprogram_Body
!                                                          | E_Subprogram_Type)
             and then not Is_Overloaded (Call_Nam)
           then
              --  If node is name in call it is not an actual
*************** package body Sem_Util is
*** 9280,9285 ****
--- 9566,9575 ----
        Ent : out Entity_Id;
        Off : out Boolean)
     is
+       pragma Assert
+         (Nkind (N) = N_Attribute_Definition_Clause
+          and then Chars (N) = Name_Address);
+ 
        Expr : Node_Id;
  
     begin
*************** package body Sem_Util is
*** 9299,9359 ****
        Ent := Empty;
        Off := False;
  
!       if Nkind (N) = N_Attribute_Definition_Clause
!         and then Chars (N) = Name_Address
!       then
!          Expr := Expression (N);
  
!          --  This loop checks the form of the expression for Y'Address,
!          --  using recursion to deal with intermediate constants.
  
!          loop
!             --  Check for Y'Address
  
!             if Nkind (Expr) = N_Attribute_Reference
!               and then Attribute_Name (Expr) = Name_Address
!             then
!                Expr := Prefix (Expr);
!                exit;
  
!             --  Check for Const where Const is a constant entity
  
!             elsif Is_Entity_Name (Expr)
!               and then Ekind (Entity (Expr)) = E_Constant
!             then
!                Expr := Constant_Value (Entity (Expr));
  
!             --  Anything else does not need checking
  
!             else
!                return;
!             end if;
!          end loop;
  
!          --  This loop checks the form of the prefix for an entity, using
!          --  recursion to deal with intermediate components.
  
!          loop
!             --  Check for Y where Y is an entity
  
!             if Is_Entity_Name (Expr) then
!                Ent := Entity (Expr);
!                return;
  
!             --  Check for components
  
!             elsif Nkind (Expr) in N_Selected_Component | N_Indexed_Component
!             then
!                Expr := Prefix (Expr);
!                Off := True;
  
!             --  Anything else does not need checking
  
!             else
!                return;
!             end if;
!          end loop;
!       end if;
     end Find_Overlaid_Entity;
  
     -------------------------
--- 9589,9656 ----
        Ent := Empty;
        Off := False;
  
!       Expr := Expression (N);
  
!       --  This loop checks the form of the expression for Y'Address, using
!       --  recursion to deal with intermediate constants.
  
!       loop
!          --  Check for Y'Address
  
!          if Nkind (Expr) = N_Attribute_Reference
!            and then Attribute_Name (Expr) = Name_Address
!          then
!             Expr := Prefix (Expr);
!             exit;
  
!          --  Check for Const where Const is a constant entity
  
!          elsif Is_Entity_Name (Expr)
!            and then Ekind (Entity (Expr)) = E_Constant
!          then
!             Expr := Constant_Value (Entity (Expr));
  
!          --  Anything else does not need checking
  
!          else
!             return;
!          end if;
!       end loop;
  
!       --  This loop checks the form of the prefix for an entity, using
!       --  recursion to deal with intermediate components.
  
!       loop
!          --  Check for Y where Y is an entity
  
!          if Is_Entity_Name (Expr) then
!             Ent := Entity (Expr);
  
!             --  If expansion is disabled, then we might see an entity of a
!             --  protected component or of a discriminant of a concurrent unit.
!             --  Ignore such entities, because further warnings for overlays
!             --  expect this routine to only collect entities of entire objects.
  
!             if Ekind (Ent) in E_Component | E_Discriminant then
!                pragma Assert
!                  (not Expander_Active
!                   and then Is_Concurrent_Type (Scope (Ent)));
!                Ent := Empty;
!             end if;
!             return;
  
!          --  Check for components
  
!          elsif Nkind (Expr) in N_Selected_Component | N_Indexed_Component then
!             Expr := Prefix (Expr);
!             Off  := True;
! 
!          --  Anything else does not need checking
! 
!          else
!             return;
!          end if;
!       end loop;
     end Find_Overlaid_Entity;
  
     -------------------------
*************** package body Sem_Util is
*** 9386,9420 ****
        Placement : out State_Space_Kind;
        Pack_Id   : out Entity_Id)
     is
        Context : Entity_Id;
  
     begin
        --  Assume that the item does not appear in the state space of a package
  
        Placement := Not_In_Package;
-       Pack_Id   := Empty;
  
        --  Climb the scope stack and examine the enclosing context
  
!       Context := Scope (Item_Id);
!       while Present (Context) and then Context /= Standard_Standard loop
!          if Is_Package_Or_Generic_Package (Context) then
!             Pack_Id := Context;
  
!             --  A package body is a cut off point for the traversal as the item
!             --  cannot be visible to the outside from this point on. Note that
!             --  this test must be done first as a body is also classified as a
!             --  private part.
  
!             if In_Package_Body (Context) then
                 Placement := Body_State_Space;
                 return;
  
              --  The private part of a package is a cut off point for the
!             --  traversal as the item cannot be visible to the outside from
!             --  this point on.
  
!             elsif In_Private_Part (Context) then
                 Placement := Private_State_Space;
                 return;
  
--- 9683,9770 ----
        Placement : out State_Space_Kind;
        Pack_Id   : out Entity_Id)
     is
+       function Inside_Package_Body (Id : Entity_Id) return Boolean;
+       function Inside_Private_Part (Id : Entity_Id) return Boolean;
+       --  Return True if Id is declared directly within the package body
+       --  and the package private parts, respectively. We cannot use
+       --  In_Private_Part/In_Body_Part flags, as these are only set during the
+       --  analysis of the package itself, while Find_Placement_In_State_Space
+       --  can be called on an entity of another package.
+ 
+       ------------------------
+       -- Inside_Package_Body --
+       ------------------------
+ 
+       function Inside_Package_Body (Id : Entity_Id) return Boolean is
+          Spec_Id   : constant Entity_Id := Scope (Id);
+          Body_Decl : constant Opt_N_Package_Body_Id := Package_Body (Spec_Id);
+          Decl      : constant Node_Id := Enclosing_Declaration (Id);
+       begin
+          if Present (Body_Decl)
+            and then Is_List_Member (Decl)
+            and then List_Containing (Decl) = Declarations (Body_Decl)
+          then
+             return True;
+          else
+             return False;
+          end if;
+       end Inside_Package_Body;
+ 
+       -------------------------
+       -- Inside_Private_Part --
+       -------------------------
+ 
+       function Inside_Private_Part (Id : Entity_Id) return Boolean is
+          Spec_Id       : constant Entity_Id := Scope (Id);
+          Private_Decls : constant List_Id :=
+            Private_Declarations (Package_Specification (Spec_Id));
+          Decl          : constant Node_Id := Enclosing_Declaration (Id);
+       begin
+          if Is_List_Member (Decl)
+            and then List_Containing (Decl) = Private_Decls
+          then
+             return True;
+ 
+          elsif Ekind (Id) = E_Package
+            and then Is_Private_Library_Unit (Id)
+          then
+             return True;
+ 
+          else
+             return False;
+          end if;
+       end Inside_Private_Part;
+ 
+       --  Local variables
+ 
        Context : Entity_Id;
  
+    --  Start of processing for Find_Placement_In_State_Space
+ 
     begin
        --  Assume that the item does not appear in the state space of a package
  
        Placement := Not_In_Package;
  
        --  Climb the scope stack and examine the enclosing context
  
!       Context := Item_Id;
!       Pack_Id := Scope (Context);
!       while Present (Pack_Id) and then Pack_Id /= Standard_Standard loop
!          if Is_Package_Or_Generic_Package (Pack_Id) then
  
!             --  A package body is a cut off point for the traversal as the
!             --  item cannot be visible to the outside from this point on.
  
!             if Inside_Package_Body (Context) then
                 Placement := Body_State_Space;
                 return;
  
              --  The private part of a package is a cut off point for the
!             --  traversal as the item cannot be visible to the outside
!             --  from this point on.
  
!             elsif Inside_Private_Part (Context) then
                 Placement := Private_State_Space;
                 return;
  
*************** package body Sem_Util is
*** 9426,9434 ****
                 Placement := Visible_State_Space;
  
                 --  The visible state space of a child unit acts as the proper
!                --  placement of an item.
  
!                if Is_Child_Unit (Context) then
                    return;
                 end if;
              end if;
--- 9776,9786 ----
                 Placement := Visible_State_Space;
  
                 --  The visible state space of a child unit acts as the proper
!                --  placement of an item, unless this is a private child unit.
  
!                if Is_Child_Unit (Pack_Id)
!                  and then not Is_Private_Library_Unit (Pack_Id)
!                then
                    return;
                 end if;
              end if;
*************** package body Sem_Util is
*** 9438,9447 ****
--- 9790,9801 ----
  
           else
              Placement := Not_In_Package;
+             Pack_Id := Empty;
              return;
           end if;
  
           Context := Scope (Context);
+          Pack_Id := Scope (Context);
        end loop;
     end Find_Placement_In_State_Space;
  
*************** package body Sem_Util is
*** 9899,9904 ****
--- 10253,10270 ----
        Discrim_Value         : Node_Id;
        Discrim_Value_Subtype : Node_Id;
        Discrim_Value_Status  : Discriminant_Value_Status := Bad;
+ 
+       function OK_Scope_For_Discrim_Value_Error_Messages return Boolean is
+         (Scope (Original_Record_Component
+                         (Entity (First (Choices (Assoc))))) = Typ);
+       --  Used to avoid generating error messages having a source position
+       --  which refers to somewhere (e.g., a discriminant value in a derived
+       --  tagged type declaration) unrelated to the offending construct. This
+       --  is required for correctness - clients of Gather_Components such as
+       --  Sem_Ch3.Create_Constrained_Components depend on this function
+       --  returning True while processing semantically correct examples;
+       --  generating an error message in this case would be wrong.
+ 
     begin
        Report_Errors := False;
  
*************** package body Sem_Util is
*** 10043,10049 ****
        then
           Discrim_Value_Status := Static_Expr;
        else
!          if Ada_Version >= Ada_2020 then
              if Original_Node (Discrim_Value) /= Discrim_Value
                 and then Nkind (Discrim_Value) = N_Type_Conversion
                 and then Etype (Original_Node (Discrim_Value))
--- 10409,10415 ----
        then
           Discrim_Value_Status := Static_Expr;
        else
!          if Ada_Version >= Ada_2022 then
              if Original_Node (Discrim_Value) /= Discrim_Value
                 and then Nkind (Discrim_Value) = N_Type_Conversion
                 and then Etype (Original_Node (Discrim_Value))
*************** package body Sem_Util is
*** 10082,10096 ****
              --  components are being gathered for an aggregate, in which case
              --  the caller must check Report_Errors.
              --
!             --  In Ada 2020 the above rules are relaxed. A nonstatic governing
              --  discriminant is OK as long as it has a static subtype and
              --  every value of that subtype (and there must be at least one)
              --  selects the same variant.
  
!             if Scope (Original_Record_Component
!                         ((Entity (First (Choices (Assoc)))))) = Typ
!             then
!                if Ada_Version >= Ada_2020 then
                    Error_Msg_FE
                      ("value for discriminant & must be static or " &
                       "discriminant's nominal subtype must be static " &
--- 10448,10460 ----
              --  components are being gathered for an aggregate, in which case
              --  the caller must check Report_Errors.
              --
!             --  In Ada 2022 the above rules are relaxed. A nonstatic governing
              --  discriminant is OK as long as it has a static subtype and
              --  every value of that subtype (and there must be at least one)
              --  selects the same variant.
  
!             if OK_Scope_For_Discrim_Value_Error_Messages then
!                if Ada_Version >= Ada_2022 then
                    Error_Msg_FE
                      ("value for discriminant & must be static or " &
                       "discriminant's nominal subtype must be static " &
*************** package body Sem_Util is
*** 10208,10217 ****
                          (Subset => Discrim_Value_Subtype_Intervals,
                           Of_Set => Variant_Intervals)
                 then
!                   Error_Msg_NE
!                     ("no single variant is associated with all values of " &
!                      "the subtype of discriminant value &",
!                      Discrim_Value, Discrim);
                    Report_Errors := True;
                    return;
                 end if;
--- 10572,10583 ----
                          (Subset => Discrim_Value_Subtype_Intervals,
                           Of_Set => Variant_Intervals)
                 then
!                   if OK_Scope_For_Discrim_Value_Error_Messages then
!                      Error_Msg_NE
!                        ("no single variant is associated with all values of " &
!                         "the subtype of discriminant value &",
!                         Discrim_Value, Discrim);
!                   end if;
                    Report_Errors := True;
                    return;
                 end if;
*************** package body Sem_Util is
*** 10363,10369 ****
     -------------------------------------
  
     function Get_Actual_Subtype_If_Available (N : Node_Id) return Entity_Id is
!       Typ  : constant Entity_Id := Etype (N);
  
     begin
        --  If what we have is an identifier that references a subprogram
--- 10729,10735 ----
     -------------------------------------
  
     function Get_Actual_Subtype_If_Available (N : Node_Id) return Entity_Id is
!       Typ : constant Entity_Id := Etype (N);
  
     begin
        --  If what we have is an identifier that references a subprogram
*************** package body Sem_Util is
*** 10607,10613 ****
     ----------------------
  
     function Get_Fullest_View
!      (E : Entity_Id; Include_PAT : Boolean := True) return Entity_Id is
     begin
        --  Prevent cascaded errors
  
--- 10973,10984 ----
     ----------------------
  
     function Get_Fullest_View
!      (E           : Entity_Id;
!       Include_PAT : Boolean := True;
!       Recurse     : Boolean := True) return Entity_Id
!    is
!       New_E : Entity_Id := Empty;
! 
     begin
        --  Prevent cascaded errors
  
*************** package body Sem_Util is
*** 10615,10684 ****
           return E;
        end if;
  
!       --  Strictly speaking, the recursion below isn't necessary, but
!       --  it's both simplest and safest.
  
        case Ekind (E) is
           when Incomplete_Kind =>
              if From_Limited_With (E) then
!                return Get_Fullest_View (Non_Limited_View (E), Include_PAT);
              elsif Present (Full_View (E)) then
!                return Get_Fullest_View (Full_View (E), Include_PAT);
              elsif Ekind (E) = E_Incomplete_Subtype then
!                return Get_Fullest_View (Etype (E));
              end if;
  
           when Private_Kind =>
              if Present (Underlying_Full_View (E)) then
!                return
!                  Get_Fullest_View (Underlying_Full_View (E), Include_PAT);
              elsif Present (Full_View (E)) then
!                return Get_Fullest_View (Full_View (E), Include_PAT);
              elsif Etype (E) /= E then
!                return Get_Fullest_View (Etype (E), Include_PAT);
              end if;
  
           when Array_Kind =>
              if Include_PAT and then Present (Packed_Array_Impl_Type (E)) then
!                return Get_Fullest_View (Packed_Array_Impl_Type (E));
              end if;
  
           when E_Record_Subtype =>
              if Present (Cloned_Subtype (E)) then
!                return Get_Fullest_View (Cloned_Subtype (E), Include_PAT);
              end if;
  
           when E_Class_Wide_Type =>
!             return Get_Fullest_View (Root_Type (E), Include_PAT);
  
!          when  E_Class_Wide_Subtype =>
              if Present (Equivalent_Type (E)) then
!                return Get_Fullest_View (Equivalent_Type (E), Include_PAT);
              elsif Present (Cloned_Subtype (E)) then
!                return Get_Fullest_View (Cloned_Subtype (E), Include_PAT);
              end if;
  
!          when E_Protected_Type | E_Protected_Subtype
!             | E_Task_Type |  E_Task_Subtype =>
              if Present (Corresponding_Record_Type (E)) then
!                return Get_Fullest_View (Corresponding_Record_Type (E),
!                                         Include_PAT);
              end if;
  
           when E_Access_Protected_Subprogram_Type
!             | E_Anonymous_Access_Protected_Subprogram_Type =>
              if Present (Equivalent_Type (E)) then
!                return Get_Fullest_View (Equivalent_Type (E), Include_PAT);
              end if;
  
           when E_Access_Subtype =>
!             return Get_Fullest_View (Base_Type (E), Include_PAT);
  
           when others =>
              null;
        end case;
  
!       return E;
     end Get_Fullest_View;
  
     ------------------------
--- 10986,11061 ----
           return E;
        end if;
  
!       --  Look at each kind of entity to see where we may need to go deeper.
  
        case Ekind (E) is
           when Incomplete_Kind =>
              if From_Limited_With (E) then
!                New_E := Non_Limited_View (E);
              elsif Present (Full_View (E)) then
!                New_E := Full_View (E);
              elsif Ekind (E) = E_Incomplete_Subtype then
!                New_E := Etype (E);
              end if;
  
           when Private_Kind =>
              if Present (Underlying_Full_View (E)) then
!                New_E := Underlying_Full_View (E);
              elsif Present (Full_View (E)) then
!                New_E := Full_View (E);
              elsif Etype (E) /= E then
!                New_E := Etype (E);
              end if;
  
           when Array_Kind =>
              if Include_PAT and then Present (Packed_Array_Impl_Type (E)) then
!                New_E := Packed_Array_Impl_Type (E);
              end if;
  
           when E_Record_Subtype =>
              if Present (Cloned_Subtype (E)) then
!                New_E := Cloned_Subtype (E);
              end if;
  
           when E_Class_Wide_Type =>
!             New_E := Root_Type (E);
  
!          when E_Class_Wide_Subtype =>
              if Present (Equivalent_Type (E)) then
!                New_E := Equivalent_Type (E);
              elsif Present (Cloned_Subtype (E)) then
!                New_E := Cloned_Subtype (E);
              end if;
  
!          when E_Protected_Subtype
!             | E_Protected_Type
!             | E_Task_Subtype
!             | E_Task_Type
!          =>
              if Present (Corresponding_Record_Type (E)) then
!                New_E := Corresponding_Record_Type (E);
              end if;
  
           when E_Access_Protected_Subprogram_Type
!             | E_Anonymous_Access_Protected_Subprogram_Type
!          =>
              if Present (Equivalent_Type (E)) then
!                New_E := Equivalent_Type (E);
              end if;
  
           when E_Access_Subtype =>
!             New_E := Base_Type (E);
  
           when others =>
              null;
        end case;
  
!       --  If we found a fuller view, either return it or recurse. Otherwise,
!       --  return our input.
! 
!       return (if    No (New_E) then E
!               elsif Recurse then Get_Fullest_View (New_E, Include_PAT, Recurse)
!               else  New_E);
     end Get_Fullest_View;
  
     ------------------------
*************** package body Sem_Util is
*** 10688,10695 ****
     function Get_Generic_Entity (N : Node_Id) return Entity_Id is
        Ent : constant Entity_Id := Entity (Name (N));
     begin
!       if Present (Renamed_Object (Ent)) then
!          return Renamed_Object (Ent);
        else
           return Ent;
        end if;
--- 11065,11072 ----
     function Get_Generic_Entity (N : Node_Id) return Entity_Id is
        Ent : constant Entity_Id := Entity (Name (N));
     begin
!       if Present (Renamed_Entity (Ent)) then
!          return Renamed_Entity (Ent);
        else
           return Ent;
        end if;
*************** package body Sem_Util is
*** 10822,10827 ****
--- 11199,11221 ----
        end if;
     end Get_Index_Bounds;
  
+    function Get_Index_Bounds
+      (N             : Node_Id;
+       Use_Full_View : Boolean := False) return Range_Nodes is
+       Result : Range_Nodes;
+    begin
+       Get_Index_Bounds (N, Result.First, Result.Last, Use_Full_View);
+       return Result;
+    end Get_Index_Bounds;
+ 
+    function Get_Index_Bounds
+      (N             : Node_Id;
+       Use_Full_View : Boolean := False) return Range_Values is
+       Nodes : constant Range_Nodes := Get_Index_Bounds (N, Use_Full_View);
+    begin
+       return (Expr_Value (Nodes.First), Expr_Value (Nodes.Last));
+    end Get_Index_Bounds;
+ 
     -----------------------------
     -- Get_Interfacing_Aspects --
     -----------------------------
*************** package body Sem_Util is
*** 11189,11198 ****
     ------------------------
  
     function Get_Renamed_Entity (E : Entity_Id) return Entity_Id is
!       R : Entity_Id;
! 
     begin
-       R := E;
        while Present (Renamed_Entity (R)) loop
           R := Renamed_Entity (R);
        end loop;
--- 11583,11590 ----
     ------------------------
  
     function Get_Renamed_Entity (E : Entity_Id) return Entity_Id is
!       R : Entity_Id := E;
     begin
        while Present (Renamed_Entity (R)) loop
           R := Renamed_Entity (R);
        end loop;
*************** package body Sem_Util is
*** 11401,11412 ****
     -- Has_Access_Values --
     -----------------------
  
!    function Has_Access_Values (T : Entity_Id) return Boolean is
        Typ : constant Entity_Id := Underlying_Type (T);
  
     begin
        --  Case of a private type which is not completed yet. This can only
!       --  happen in the case of a generic format type appearing directly, or
        --  as a component of the type to which this function is being applied
        --  at the top level. Return False in this case, since we certainly do
        --  not know that the type contains access types.
--- 11793,11805 ----
     -- Has_Access_Values --
     -----------------------
  
!    function Has_Access_Values (T : Entity_Id) return Boolean
!    is
        Typ : constant Entity_Id := Underlying_Type (T);
  
     begin
        --  Case of a private type which is not completed yet. This can only
!       --  happen in the case of a generic formal type appearing directly, or
        --  as a component of the type to which this function is being applied
        --  at the top level. Return False in this case, since we certainly do
        --  not know that the type contains access types.
*************** package body Sem_Util is
*** 11516,11522 ****
           --  Set to a factor of the offset from the base object when Expr is a
           --  selected or indexed component, based on Component_Bit_Offset and
           --  Component_Size respectively. A negative value is used to represent
!          --  a value which is not known at compile time.
  
           procedure Check_Prefix;
           --  Checks the prefix recursively in the case where the expression
--- 11909,11915 ----
           --  Set to a factor of the offset from the base object when Expr is a
           --  selected or indexed component, based on Component_Bit_Offset and
           --  Component_Size respectively. A negative value is used to represent
!          --  a value that is not known at compile time.
  
           procedure Check_Prefix;
           --  Checks the prefix recursively in the case where the expression
*************** package body Sem_Util is
*** 11548,11554 ****
              if Default = Known_Compatible
                or else
                  (Etype (Obj) = Etype (Expr)
!                   and then (Unknown_Alignment (Obj)
                               or else
                                 Alignment (Obj) = Alignment (Etype (Obj))))
              then
--- 11941,11947 ----
              if Default = Known_Compatible
                or else
                  (Etype (Obj) = Etype (Expr)
!                   and then (not Known_Alignment (Obj)
                               or else
                                 Alignment (Obj) = Alignment (Etype (Obj))))
              then
*************** package body Sem_Util is
*** 11615,11621 ****
  
                 Check_Prefix;
                 Offs := Indexed_Component_Bit_Offset (Expr);
!                if Offs = No_Uint then
                    Offs := Component_Size (Typ);
                 end if;
              end;
--- 12008,12014 ----
  
                 Check_Prefix;
                 Offs := Indexed_Component_Bit_Offset (Expr);
!                if No (Offs) then
                    Offs := Component_Size (Typ);
                 end if;
              end;
*************** package body Sem_Util is
*** 11624,11630 ****
           --  If we have a null offset, the result is entirely determined by
           --  the base object and has already been computed recursively.
  
!          if Offs = Uint_0 then
              null;
  
           --  Case where we know the alignment of the object
--- 12017,12023 ----
           --  If we have a null offset, the result is entirely determined by
           --  the base object and has already been computed recursively.
  
!          if Present (Offs) and then Offs = Uint_0 then
              null;
  
           --  Case where we know the alignment of the object
*************** package body Sem_Util is
*** 11646,11672 ****
                 else
                    --  If we have an offset, see if it is compatible
  
!                   if Offs /= No_Uint and Offs > Uint_0 then
                       if Offs mod (System_Storage_Unit * ObjA) /= 0 then
                          Set_Result (Known_Incompatible);
                       end if;
  
!                      --  See if Expr is an object with known alignment
  
                    elsif Is_Entity_Name (Expr)
                      and then Known_Alignment (Entity (Expr))
                    then
                       ExpA := Alignment (Entity (Expr));
  
!                      --  Otherwise, we can use the alignment of the type of
!                      --  Expr given that we already checked for
!                      --  discombobulating rep clauses for the cases of indexed
!                      --  and selected components above.
  
                    elsif Known_Alignment (Etype (Expr)) then
                       ExpA := Alignment (Etype (Expr));
  
!                      --  Otherwise the alignment is unknown
  
                    else
                       Set_Result (Default);
--- 12039,12066 ----
                 else
                    --  If we have an offset, see if it is compatible
  
!                   if Present (Offs) and then Offs > Uint_0 then
                       if Offs mod (System_Storage_Unit * ObjA) /= 0 then
                          Set_Result (Known_Incompatible);
                       end if;
  
!                   --  See if Expr is an object with known alignment
  
                    elsif Is_Entity_Name (Expr)
                      and then Known_Alignment (Entity (Expr))
                    then
+                      Offs := Uint_0;
                       ExpA := Alignment (Entity (Expr));
  
!                   --  Otherwise, we can use the alignment of the type of Expr
!                   --  given that we already checked for discombobulating rep
!                   --  clauses for the cases of indexed and selected components
!                   --  above.
  
                    elsif Known_Alignment (Etype (Expr)) then
                       ExpA := Alignment (Etype (Expr));
  
!                   --  Otherwise the alignment is unknown
  
                    else
                       Set_Result (Default);
*************** package body Sem_Util is
*** 11674,11709 ****
  
                    --  If we got an alignment, see if it is acceptable
  
!                   if ExpA /= No_Uint and then ExpA < ObjA then
                       Set_Result (Known_Incompatible);
                    end if;
  
!                   --  If Expr is not a piece of a larger object, see if size
!                   --  is given. If so, check that it is not too small for the
!                   --  required alignment.
  
!                   if Offs /= No_Uint then
                       null;
  
!                      --  See if Expr is an object with known size
  
                    elsif Is_Entity_Name (Expr)
                      and then Known_Static_Esize (Entity (Expr))
                    then
                       SizA := Esize (Entity (Expr));
  
!                      --  Otherwise, we check the object size of the Expr type
  
                    elsif Known_Static_Esize (Etype (Expr)) then
                       SizA := Esize (Etype (Expr));
                    end if;
  
                    --  If we got a size, see if it is a multiple of the Obj
!                   --  alignment, if not, then the alignment cannot be
                    --  acceptable, since the size is always a multiple of the
                    --  alignment.
  
!                   if SizA /= No_Uint then
                       if SizA mod (ObjA * Ttypes.System_Storage_Unit) /= 0 then
                          Set_Result (Known_Incompatible);
                       end if;
--- 12068,12103 ----
  
                    --  If we got an alignment, see if it is acceptable
  
!                   if Present (ExpA) and then ExpA < ObjA then
                       Set_Result (Known_Incompatible);
                    end if;
  
!                   --  If Expr is a component or an entire object with a known
!                   --  alignment, then we are fine. Otherwise, if its size is
!                   --  known, it must be big enough for the required alignment.
  
!                   if Present (Offs) then
                       null;
  
!                   --  See if Expr is an object with known size
  
                    elsif Is_Entity_Name (Expr)
                      and then Known_Static_Esize (Entity (Expr))
                    then
                       SizA := Esize (Entity (Expr));
  
!                   --  Otherwise, we check the object size of the Expr type
  
                    elsif Known_Static_Esize (Etype (Expr)) then
                       SizA := Esize (Etype (Expr));
                    end if;
  
                    --  If we got a size, see if it is a multiple of the Obj
!                   --  alignment; if not, then the alignment cannot be
                    --  acceptable, since the size is always a multiple of the
                    --  alignment.
  
!                   if Present (SizA) then
                       if SizA mod (ObjA * Ttypes.System_Storage_Unit) /= 0 then
                          Set_Result (Known_Incompatible);
                       end if;
*************** package body Sem_Util is
*** 11714,11720 ****
           --  If we do not know required alignment, any non-zero offset is a
           --  potential problem (but certainly may be OK, so result is unknown).
  
!          elsif Offs /= No_Uint then
              Set_Result (Unknown);
  
           --  If we can't find the result by direct comparison of alignment
--- 12108,12114 ----
           --  If we do not know required alignment, any non-zero offset is a
           --  potential problem (but certainly may be OK, so result is unknown).
  
!          elsif Present (Offs) then
              Set_Result (Unknown);
  
           --  If we can't find the result by direct comparison of alignment
*************** package body Sem_Util is
*** 11737,11761 ****
                 --  where we do not know the alignment of Obj.
  
                 if Known_Alignment (Entity (Expr))
!                  and then UI_To_Int (Alignment (Entity (Expr))) <
!                                                     Ttypes.Maximum_Alignment
                 then
                    Set_Result (Unknown);
  
!                   --  Now check size of Expr object. Any size that is not an
!                   --  even multiple of Maximum_Alignment is also worrisome
!                   --  since it may cause the alignment of the object to be less
!                   --  than the alignment of the type.
  
                 elsif Known_Static_Esize (Entity (Expr))
                   and then
!                    (UI_To_Int (Esize (Entity (Expr))) mod
!                      (Ttypes.Maximum_Alignment * Ttypes.System_Storage_Unit))
                                                                          /= 0
                 then
                    Set_Result (Unknown);
  
!                   --  Otherwise same type is decisive
  
                 else
                    Set_Result (Known_Compatible);
--- 12131,12154 ----
                 --  where we do not know the alignment of Obj.
  
                 if Known_Alignment (Entity (Expr))
!                  and then Alignment (Entity (Expr)) < Ttypes.Maximum_Alignment
                 then
                    Set_Result (Unknown);
  
!                --  Now check size of Expr object. Any size that is not an even
!                --  multiple of Maximum_Alignment is also worrisome since it
!                --  may cause the alignment of the object to be less than the
!                --  alignment of the type.
  
                 elsif Known_Static_Esize (Entity (Expr))
                   and then
!                    Esize (Entity (Expr)) mod
!                      (Ttypes.Maximum_Alignment * Ttypes.System_Storage_Unit)
                                                                          /= 0
                 then
                    Set_Result (Unknown);
  
!                --  Otherwise same type is decisive
  
                 else
                    Set_Result (Known_Compatible);
*************** package body Sem_Util is
*** 11793,11799 ****
        --  do it when there is an address clause since we can do more if the
        --  alignment is known.
  
!       if Unknown_Alignment (Obj) then
           Set_Alignment (Obj, Alignment (Etype (Obj)));
        end if;
  
--- 12186,12192 ----
        --  do it when there is an address clause since we can do more if the
        --  alignment is known.
  
!       if not Known_Alignment (Obj) and then Known_Alignment (Etype (Obj)) then
           Set_Alignment (Obj, Alignment (Etype (Obj)));
        end if;
  
*************** package body Sem_Util is
*** 11827,11833 ****
     function Has_Defaulted_Discriminants (Typ : Entity_Id) return Boolean is
     begin
        return Has_Discriminants (Typ)
-        and then Present (First_Discriminant (Typ))
         and then Present (Discriminant_Default_Value
                             (First_Discriminant (Typ)));
     end Has_Defaulted_Discriminants;
--- 12220,12225 ----
*************** package body Sem_Util is
*** 12444,12449 ****
--- 12836,12919 ----
        return False;
     end Has_Fully_Default_Initializing_DIC_Pragma;
  
+    ---------------------------------
+    -- Has_Inferable_Discriminants --
+    ---------------------------------
+ 
+    function Has_Inferable_Discriminants (N : Node_Id) return Boolean is
+ 
+       function Prefix_Is_Formal_Parameter (N : Node_Id) return Boolean;
+       --  Determines whether the left-most prefix of a selected component is a
+       --  formal parameter in a subprogram. Assumes N is a selected component.
+ 
+       --------------------------------
+       -- Prefix_Is_Formal_Parameter --
+       --------------------------------
+ 
+       function Prefix_Is_Formal_Parameter (N : Node_Id) return Boolean is
+          Sel_Comp : Node_Id;
+ 
+       begin
+          --  Move to the left-most prefix by climbing up the tree
+ 
+          Sel_Comp := N;
+          while Present (Parent (Sel_Comp))
+            and then Nkind (Parent (Sel_Comp)) = N_Selected_Component
+          loop
+             Sel_Comp := Parent (Sel_Comp);
+          end loop;
+ 
+          return Is_Formal (Entity (Prefix (Sel_Comp)));
+       end Prefix_Is_Formal_Parameter;
+ 
+    --  Start of processing for Has_Inferable_Discriminants
+ 
+    begin
+       --  For selected components, the subtype of the selector must be a
+       --  constrained Unchecked_Union. If the component is subject to a
+       --  per-object constraint, then the enclosing object must have inferable
+       --  discriminants.
+ 
+       if Nkind (N) = N_Selected_Component then
+          if Has_Per_Object_Constraint (Entity (Selector_Name (N))) then
+ 
+             --  A small hack. If we have a per-object constrained selected
+             --  component of a formal parameter, return True since we do not
+             --  know the actual parameter association yet.
+ 
+             if Prefix_Is_Formal_Parameter (N) then
+                return True;
+ 
+             --  Otherwise, check the enclosing object and the selector
+ 
+             else
+                return Has_Inferable_Discriminants (Prefix (N))
+                  and then Has_Inferable_Discriminants (Selector_Name (N));
+             end if;
+ 
+          --  The call to Has_Inferable_Discriminants will determine whether
+          --  the selector has a constrained Unchecked_Union nominal type.
+ 
+          else
+             return Has_Inferable_Discriminants (Selector_Name (N));
+          end if;
+ 
+       --  A qualified expression has inferable discriminants if its subtype
+       --  mark is a constrained Unchecked_Union subtype.
+ 
+       elsif Nkind (N) = N_Qualified_Expression then
+          return Is_Unchecked_Union (Etype (Subtype_Mark (N)))
+            and then Is_Constrained (Etype (Subtype_Mark (N)));
+ 
+       --  For all other names, it is sufficient to have a constrained
+       --  Unchecked_Union nominal subtype.
+ 
+       else
+          return Is_Unchecked_Union (Base_Type (Etype (N)))
+            and then Is_Constrained (Etype (N));
+       end if;
+    end Has_Inferable_Discriminants;
+ 
     --------------------
     -- Has_Infinities --
     --------------------
*************** package body Sem_Util is
*** 12606,12623 ****
        Node : Node_Id;
  
     begin
!       if Is_Non_Empty_List (L) then
!          Node := First (L);
  
!          loop
!             if Nkind (Node) not in N_Null_Statement | N_Call_Marker then
!                return True;
!             end if;
  
!             Next (Node);
!             exit when Node = Empty;
!          end loop;
!       end if;
  
        return False;
     end Has_Non_Null_Statements;
--- 13076,13090 ----
        Node : Node_Id;
  
     begin
!       Node := First (L);
  
!       while Present (Node) loop
!          if Nkind (Node) not in N_Null_Statement | N_Call_Marker then
!             return True;
!          end if;
  
!          Next (Node);
!       end loop;
  
        return False;
     end Has_Non_Null_Statements;
*************** package body Sem_Util is
*** 12676,12703 ****
        Node : Node_Id;
  
     begin
!       if Is_Non_Empty_List (L) then
!          Node := First (L);
  
!          loop
!             case Nkind (Node) is
!                when N_Null_Statement | N_Call_Marker | N_Raise_xxx_Error =>
!                   null;
!                when N_Object_Declaration =>
!                   if Present (Expression (Node))
!                     and then not Side_Effect_Free (Expression (Node))
!                   then
!                      return False;
!                   end if;
  
!                when others =>
                    return False;
!             end case;
  
!             Next (Node);
!             exit when Node = Empty;
!          end loop;
!       end if;
  
        return True;
     end Side_Effect_Free_Statements;
--- 13143,13168 ----
        Node : Node_Id;
  
     begin
!       Node := First (L);
  
!       while Present (Node) loop
!          case Nkind (Node) is
!             when N_Null_Statement | N_Call_Marker | N_Raise_xxx_Error =>
!                null;
  
!             when N_Object_Declaration =>
!                if Present (Expression (Node))
!                  and then not Side_Effect_Free (Expression (Node))
!                then
                    return False;
!                end if;
  
!             when others =>
!                return False;
!          end case;
! 
!          Next (Node);
!       end loop;
  
        return True;
     end Side_Effect_Free_Statements;
*************** package body Sem_Util is
*** 12944,12949 ****
--- 13409,13452 ----
            and then Nkind (Node (First_Elmt (Constits))) = N_Null;
     end Has_Null_Refinement;
  
+    ------------------------------------------
+    -- Has_Nonstatic_Class_Wide_Pre_Or_Post --
+    ------------------------------------------
+ 
+    function Is_Prim_Of_Abst_Type_With_Nonstatic_CW_Pre_Post
+      (Subp : Entity_Id) return Boolean
+    is
+       Disp_Type  : constant Entity_Id := Find_Dispatching_Type (Subp);
+       Prag       : Node_Id;
+       Pragma_Arg : Node_Id;
+ 
+    begin
+       if Present (Disp_Type)
+         and then Is_Abstract_Type (Disp_Type)
+         and then Present (Contract (Subp))
+       then
+          Prag := Pre_Post_Conditions (Contract (Subp));
+ 
+          while Present (Prag) loop
+             if Pragma_Name (Prag) in Name_Precondition | Name_Postcondition
+               and then Class_Present (Prag)
+             then
+                Pragma_Arg :=
+                  Nlists.First
+                    (Pragma_Argument_Associations (Prag));
+ 
+                if not Is_Static_Expression (Expression (Pragma_Arg)) then
+                   return True;
+                end if;
+             end if;
+ 
+             Prag := Next_Pragma (Prag);
+          end loop;
+       end if;
+ 
+       return False;
+    end Is_Prim_Of_Abst_Type_With_Nonstatic_CW_Pre_Post;
+ 
     -------------------------------
     -- Has_Overriding_Initialize --
     -------------------------------
*************** package body Sem_Util is
*** 12998,13010 ****
     -- Has_Preelaborable_Initialization --
     --------------------------------------
  
!    function Has_Preelaborable_Initialization (E : Entity_Id) return Boolean is
        Has_PE : Boolean;
  
        procedure Check_Components (E : Entity_Id);
        --  Check component/discriminant chain, sets Has_PE False if a component
        --  or discriminant does not meet the preelaborable initialization rules.
  
        ----------------------
        -- Check_Components --
        ----------------------
--- 13501,13522 ----
     -- Has_Preelaborable_Initialization --
     --------------------------------------
  
!    function Has_Preelaborable_Initialization
!      (E                 : Entity_Id;
!       Preelab_Init_Expr : Node_Id := Empty) return Boolean
!    is
        Has_PE : Boolean;
  
        procedure Check_Components (E : Entity_Id);
        --  Check component/discriminant chain, sets Has_PE False if a component
        --  or discriminant does not meet the preelaborable initialization rules.
  
+       function Type_Named_In_Preelab_Init_Expression
+         (Typ  : Entity_Id;
+          Expr : Node_Id) return Boolean;
+       --  Returns True iff Typ'Preelaborable_Initialization occurs in Expr
+       --  (where Expr may be a conjunction of one or more P_I attributes).
+ 
        ----------------------
        -- Check_Components --
        ----------------------
*************** package body Sem_Util is
*** 13052,13058 ****
              --  component type has PI.
  
              if No (Exp) then
!                if not Has_Preelaborable_Initialization (Etype (Ent)) then
                    Has_PE := False;
                    exit;
                 end if;
--- 13564,13572 ----
              --  component type has PI.
  
              if No (Exp) then
!                if not Has_Preelaborable_Initialization
!                         (Etype (Ent), Preelab_Init_Expr)
!                then
                    Has_PE := False;
                    exit;
                 end if;
*************** package body Sem_Util is
*** 13069,13074 ****
--- 13583,13626 ----
           end loop;
        end Check_Components;
  
+       --------------------------------------
+       -- Type_Named_In_Preelab_Expression --
+       --------------------------------------
+ 
+       function Type_Named_In_Preelab_Init_Expression
+         (Typ  : Entity_Id;
+          Expr : Node_Id) return Boolean
+       is
+       begin
+          --  Return True if Expr is a Preelaborable_Initialization attribute
+          --  and the prefix is a subtype that has the same type as Typ.
+ 
+          if Nkind (Expr) = N_Attribute_Reference
+            and then Attribute_Name (Expr) = Name_Preelaborable_Initialization
+            and then Is_Entity_Name (Prefix (Expr))
+            and then Base_Type (Entity (Prefix (Expr))) = Base_Type (Typ)
+          then
+             return True;
+ 
+          --  In the case where Expr is a conjunction, test whether either
+          --  operand is a Preelaborable_Initialization attribute whose prefix
+          --  has the same type as Typ, and return True if so.
+ 
+          elsif Nkind (Expr) = N_Op_And
+            and then
+             (Type_Named_In_Preelab_Init_Expression (Typ, Left_Opnd (Expr))
+               or else
+              Type_Named_In_Preelab_Init_Expression (Typ, Right_Opnd (Expr)))
+          then
+             return True;
+ 
+          --  Typ not named in a Preelaborable_Initialization attribute of Expr
+ 
+          else
+             return False;
+          end if;
+       end Type_Named_In_Preelab_Init_Expression;
+ 
     --  Start of processing for Has_Preelaborable_Initialization
  
     begin
*************** package body Sem_Util is
*** 13098,13104 ****
        --  Array types have PI if the component type has PI
  
        elsif Is_Array_Type (E) then
!          Has_PE := Has_Preelaborable_Initialization (Component_Type (E));
  
        --  A derived type has preelaborable initialization if its parent type
        --  has preelaborable initialization and (in the case of a derived record
--- 13650,13657 ----
        --  Array types have PI if the component type has PI
  
        elsif Is_Array_Type (E) then
!          Has_PE := Has_Preelaborable_Initialization
!                      (Component_Type (E), Preelab_Init_Expr);
  
        --  A derived type has preelaborable initialization if its parent type
        --  has preelaborable initialization and (in the case of a derived record
*************** package body Sem_Util is
*** 13109,13114 ****
--- 13662,13679 ----
  
        elsif Is_Derived_Type (E) then
  
+          --  When the rule of RM 10.2.1(11.8/5) applies, we presume a component
+          --  of a generic formal derived type has preelaborable initialization.
+          --  (See comment on spec of Has_Preelaborable_Initialization.)
+ 
+          if Is_Generic_Type (E)
+            and then Present (Preelab_Init_Expr)
+            and then
+              Type_Named_In_Preelab_Init_Expression (E, Preelab_Init_Expr)
+          then
+             return True;
+          end if;
+ 
           --  If the derived type is a private extension then it doesn't have
           --  preelaborable initialization.
  
*************** package body Sem_Util is
*** 13118,13124 ****
  
           --  First check whether ancestor type has preelaborable initialization
  
!          Has_PE := Has_Preelaborable_Initialization (Etype (Base_Type (E)));
  
           --  If OK, check extension components (if any)
  
--- 13683,13690 ----
  
           --  First check whether ancestor type has preelaborable initialization
  
!          Has_PE := Has_Preelaborable_Initialization
!                      (Etype (Base_Type (E)), Preelab_Init_Expr);
  
           --  If OK, check extension components (if any)
  
*************** package body Sem_Util is
*** 13144,13150 ****
        --  have preelaborable initialization.
  
        elsif Is_Private_Type (E) then
!          return False;
  
        --  Record type has PI if it is non private and all components have PI
  
--- 13710,13729 ----
        --  have preelaborable initialization.
  
        elsif Is_Private_Type (E) then
! 
!          --  When the rule of RM 10.2.1(11.8/5) applies, we presume a component
!          --  of a generic formal private type has preelaborable initialization.
!          --  (See comment on spec of Has_Preelaborable_Initialization.)
! 
!          if Is_Generic_Type (E)
!            and then Present (Preelab_Init_Expr)
!            and then
!              Type_Named_In_Preelab_Init_Expression (E, Preelab_Init_Expr)
!          then
!             return True;
!          else
!             return False;
!          end if;
  
        --  Record type has PI if it is non private and all components have PI
  
*************** package body Sem_Util is
*** 13706,13712 ****
        elsif Is_Record_Type (Typ) then
           Comp := First_Component (Typ);
           while Present (Comp) loop
!             if Is_Volatile_Object (Comp) then
                 return True;
              end if;
  
--- 14285,14291 ----
        elsif Is_Record_Type (Typ) then
           Comp := First_Component (Typ);
           while Present (Comp) loop
!             if Is_Volatile_Object_Ref (Comp) then
                 return True;
              end if;
  
*************** package body Sem_Util is
*** 14080,14086 ****
     -- In_Pre_Post_Condition --
     ---------------------------
  
!    function In_Pre_Post_Condition (N : Node_Id) return Boolean is
        Par     : Node_Id;
        Prag    : Node_Id := Empty;
        Prag_Id : Pragma_Id;
--- 14659,14667 ----
     -- In_Pre_Post_Condition --
     ---------------------------
  
!    function In_Pre_Post_Condition
!      (N : Node_Id; Class_Wide_Only : Boolean := False) return Boolean
!    is
        Par     : Node_Id;
        Prag    : Node_Id := Empty;
        Prag_Id : Pragma_Id;
*************** package body Sem_Util is
*** 14106,14118 ****
        if Present (Prag) then
           Prag_Id := Get_Pragma_Id (Prag);
  
!          return
!            Prag_Id = Pragma_Post
!              or else Prag_Id = Pragma_Post_Class
!              or else Prag_Id = Pragma_Postcondition
!              or else Prag_Id = Pragma_Pre
!              or else Prag_Id = Pragma_Pre_Class
!              or else Prag_Id = Pragma_Precondition;
  
        --  Otherwise the node is not enclosed by a pre/postcondition pragma
  
--- 14687,14710 ----
        if Present (Prag) then
           Prag_Id := Get_Pragma_Id (Prag);
  
!          if Class_Wide_Only then
!             return
!               Prag_Id = Pragma_Post_Class
!                 or else Prag_Id = Pragma_Pre_Class
!                 or else (Class_Present (Prag)
!                           and then (Prag_Id = Pragma_Post
!                                      or else Prag_Id = Pragma_Postcondition
!                                      or else Prag_Id = Pragma_Pre
!                                      or else Prag_Id = Pragma_Precondition));
!          else
!             return
!               Prag_Id = Pragma_Post
!                 or else Prag_Id = Pragma_Post_Class
!                 or else Prag_Id = Pragma_Postcondition
!                 or else Prag_Id = Pragma_Pre
!                 or else Prag_Id = Pragma_Pre_Class
!                 or else Prag_Id = Pragma_Precondition;
!          end if;
  
        --  Otherwise the node is not enclosed by a pre/postcondition pragma
  
*************** package body Sem_Util is
*** 14337,14342 ****
--- 14929,14945 ----
              when N_Function_Call =>
                 if not In_Function_Call then
                    In_Function_Call := True;
+ 
+                   --  When the function return type has implicit dereference
+                   --  specified we know it cannot directly contribute to the
+                   --  return value.
+ 
+                   if Present (Etype (Par))
+                     and then Has_Implicit_Dereference
+                                (Get_Full_View (Etype (Par)))
+                   then
+                      return False;
+                   end if;
                 else
                    return False;
                 end if;
*************** package body Sem_Util is
*** 14424,14429 ****
--- 15027,15034 ----
     --------------------------------
  
     function Incomplete_Or_Partial_View (Id : Entity_Id) return Entity_Id is
+       S : constant Entity_Id := Scope (Id);
+ 
        function Inspect_Decls
          (Decls : List_Id;
           Taft  : Boolean := False) return Entity_Id;
*************** package body Sem_Util is
*** 14492,14498 ****
     begin
        --  Deferred constant or incomplete type case
  
!       Prev := Current_Entity_In_Scope (Id);
  
        if Present (Prev)
          and then (Is_Incomplete_Type (Prev) or else Ekind (Prev) = E_Constant)
--- 15097,15109 ----
     begin
        --  Deferred constant or incomplete type case
  
!       Prev := Current_Entity (Id);
! 
!       while Present (Prev) loop
!          exit when Scope (Prev) = S;
! 
!          Prev := Homonym (Prev);
!       end loop;
  
        if Present (Prev)
          and then (Is_Incomplete_Type (Prev) or else Ekind (Prev) = E_Constant)
*************** package body Sem_Util is
*** 14504,14521 ****
  
        --  Private or Taft amendment type case
  
!       declare
!          Pkg      : constant Entity_Id := Scope (Id);
!          Pkg_Decl : Node_Id := Pkg;
! 
!       begin
!          if Present (Pkg)
!            and then Is_Package_Or_Generic_Package (Pkg)
!          then
!             while Nkind (Pkg_Decl) /= N_Package_Specification loop
!                Pkg_Decl := Parent (Pkg_Decl);
!             end loop;
  
              --  It is knows that Typ has a private view, look for it in the
              --  visible declarations of the enclosing scope. A special case
              --  of this is when the two views have been exchanged - the full
--- 15115,15125 ----
  
        --  Private or Taft amendment type case
  
!       if Present (S) and then Is_Package_Or_Generic_Package (S) then
!          declare
!             Pkg_Decl : constant Node_Id := Package_Specification (S);
  
+          begin
              --  It is knows that Typ has a private view, look for it in the
              --  visible declarations of the enclosing scope. A special case
              --  of this is when the two views have been exchanged - the full
*************** package body Sem_Util is
*** 14536,14546 ****
              --  Taft amendment type. The incomplete view should be located in
              --  the private declarations of the enclosing scope.
  
!             elsif In_Package_Body (Pkg) then
                 return Inspect_Decls (Private_Declarations (Pkg_Decl), True);
              end if;
!          end if;
!       end;
  
        --  The type has no incomplete or private view
  
--- 15140,15150 ----
              --  Taft amendment type. The incomplete view should be located in
              --  the private declarations of the enclosing scope.
  
!             elsif In_Package_Body (S) then
                 return Inspect_Decls (Private_Declarations (Pkg_Decl), True);
              end if;
!          end;
!       end if;
  
        --  The type has no incomplete or private view
  
*************** package body Sem_Util is
*** 14595,14601 ****
     begin
        --  Return early if the component size is not known or variable
  
!       if Off = No_Uint or else Off < Uint_0 then
           return No_Uint;
        end if;
  
--- 15199,15205 ----
     begin
        --  Return early if the component size is not known or variable
  
!       if No (Off) or else Off < Uint_0 then
           return No_Uint;
        end if;
  
*************** package body Sem_Util is
*** 14616,14621 ****
--- 15220,15231 ----
           return No_Uint;
        end if;
  
+       --  Do not attempt to compute offsets within multi-dimensional arrays
+ 
+       if Present (Next_Index (Ind)) then
+          return No_Uint;
+       end if;
+ 
        if Nkind (Ind) = N_Subtype_Indication then
           Ind := Constraint (Ind);
  
*************** package body Sem_Util is
*** 14632,14638 ****
  
        --  Return the scaled offset
  
!       return Off * (Expr_Value (Exp) - Expr_Value (Low_Bound ((Ind))));
     end Indexed_Component_Bit_Offset;
  
     -----------------------------
--- 15242,15248 ----
  
        --  Return the scaled offset
  
!       return Off * (Expr_Value (Exp) - Expr_Value (Low_Bound (Ind)));
     end Indexed_Component_Bit_Offset;
  
     -----------------------------
*************** package body Sem_Util is
*** 14867,14874 ****
              Get_Next_Interp (I, It);
           end loop;
  
-          End_Interp_List;
- 
        else
           --  Prefix is unambiguous: mark the original prefix (which might
           --  Come_From_Source) as a reference, since the new (relocated) one
--- 15477,15482 ----
*************** package body Sem_Util is
*** 15114,15120 ****
           --  Pragma Invalid_Scalars did not specify an invalid value for this
           --  type. Fall back to the value provided by the binder.
  
!          if Value = No_Uint then
              return Invalid_Binder_Value;
           else
              return Make_Integer_Literal (Loc, Intval => Value);
--- 15722,15728 ----
           --  Pragma Invalid_Scalars did not specify an invalid value for this
           --  type. Fall back to the value provided by the binder.
  
!          if No (Value) then
              return Invalid_Binder_Value;
           else
              return Make_Integer_Literal (Loc, Intval => Value);
*************** package body Sem_Util is
*** 15198,15205 ****
  
     function Is_Access_Variable (E : Entity_Id) return Boolean is
     begin
!       return Is_Access_Object_Type (E)
!         and then not Is_Access_Constant (E);
     end Is_Access_Variable;
  
     -----------------------------
--- 15806,15814 ----
  
     function Is_Access_Variable (E : Entity_Id) return Boolean is
     begin
!       return Is_Access_Type (E)
!         and then not Is_Access_Constant (E)
!         and then Ekind (Directly_Designated_Type (E)) /= E_Subprogram_Type;
     end Is_Access_Variable;
  
     -----------------------------
*************** package body Sem_Util is
*** 15251,15257 ****
           when N_Parameter_Association =>
              return N = Explicit_Actual_Parameter (Parent (N));
  
!          when N_Subprogram_Call =>
              return Is_List_Member (N)
                and then
                  List_Containing (N) = Parameter_Associations (Parent (N));
--- 15860,15868 ----
           when N_Parameter_Association =>
              return N = Explicit_Actual_Parameter (Parent (N));
  
!          when N_Entry_Call_Statement
!             | N_Subprogram_Call
!          =>
              return Is_List_Member (N)
                and then
                  List_Containing (N) = Parameter_Associations (Parent (N));
*************** package body Sem_Util is
*** 15312,15317 ****
--- 15923,15937 ----
             --  statement is aliased if its type is immutably limited.
  
             or else (Is_Return_Object (E)
+                      and then Is_Limited_View (Etype (E)))
+ 
+            --  The current instance of a limited type is aliased, so
+            --  we want to allow uses of T'Access in the init proc for
+            --  a limited type T. However, we don't want to mark the formal
+            --  parameter as being aliased since that could impact callers.
+ 
+            or else (Is_Formal (E)
+                      and then Chars (E) = Name_uInit
                       and then Is_Limited_View (Etype (E)));
  
        elsif Nkind (Obj) = N_Selected_Component then
*************** package body Sem_Util is
*** 15328,15334 ****
           return Is_Tagged_Type (Etype (Obj))
             and then Is_Aliased_View (Expression (Obj));
  
!       --  Ada 202x AI12-0228
  
        elsif Nkind (Obj) = N_Qualified_Expression
          and then Ada_Version >= Ada_2012
--- 15948,15954 ----
           return Is_Tagged_Type (Etype (Obj))
             and then Is_Aliased_View (Expression (Obj));
  
!       --  Ada 2022 AI12-0228
  
        elsif Nkind (Obj) = N_Qualified_Expression
          and then Ada_Version >= Ada_2012
*************** package body Sem_Util is
*** 15666,15672 ****
           end if;
  
        --  The packages may come from the same package chain or from entirely
!       --  different hierarcies. To determine this, climb the scope stack until
        --  a common root is found.
  
        --        (root)      (root 1)  (root 2)
--- 16286,16292 ----
           end if;
  
        --  The packages may come from the same package chain or from entirely
!       --  different hierarchies. To determine this, climb the scope stack until
        --  a common root is found.
  
        --        (root)      (root 1)  (root 2)
*************** package body Sem_Util is
*** 15698,15715 ****
                             Aspect_Spec_1, Aspect_Spec_2 : Node_Id)
                            return Boolean is
        function Names_Match (Nm1, Nm2 : Node_Id) return Boolean;
        function Names_Match (Nm1, Nm2 : Node_Id) return Boolean is
        begin
           if Nkind (Nm1) /= Nkind (Nm2) then
              return False;
           end if;
           case Nkind (Nm1) is
              when N_Identifier =>
                 return Name_Equals (Chars (Nm1), Chars (Nm2));
              when N_Expanded_Name =>
!                return Names_Match (Prefix (Nm1), Prefix (Nm2))
!                  and then Names_Match (Selector_Name (Nm1),
!                                        Selector_Name (Nm2));
              when N_Empty =>
                 return True; -- needed for Aggregate aspect checking
  
--- 16318,16349 ----
                             Aspect_Spec_1, Aspect_Spec_2 : Node_Id)
                            return Boolean is
        function Names_Match (Nm1, Nm2 : Node_Id) return Boolean;
+ 
+       -----------------
+       -- Names_Match --
+       -----------------
+ 
        function Names_Match (Nm1, Nm2 : Node_Id) return Boolean is
        begin
           if Nkind (Nm1) /= Nkind (Nm2) then
              return False;
+             --  This may be too restrictive given that visibility
+             --  may allow an identifier in one case and an expanded
+             --  name in the other.
           end if;
           case Nkind (Nm1) is
              when N_Identifier =>
                 return Name_Equals (Chars (Nm1), Chars (Nm2));
+ 
              when N_Expanded_Name =>
!                --  An inherited operation has the same name as its
!                --  ancestor, but they may have different scopes.
!                --  This may be too permissive for Iterator_Element, which
!                --  is intended to be identical in parent and derived type.
! 
!                return Names_Match (Selector_Name (Nm1),
!                                    Selector_Name (Nm2));
! 
              when N_Empty =>
                 return True; -- needed for Aggregate aspect checking
  
*************** package body Sem_Util is
*** 15737,15744 ****
           when Aspect_Default_Iterator
              | Aspect_Iterator_Element
              | Aspect_Constant_Indexing
!             | Aspect_Variable_Indexing
!             | Aspect_Implicit_Dereference =>
              declare
                 Item_1 : constant Node_Id := Aspect_Rep_Item (Aspect_Spec_1);
                 Item_2 : constant Node_Id := Aspect_Rep_Item (Aspect_Spec_2);
--- 16371,16377 ----
           when Aspect_Default_Iterator
              | Aspect_Iterator_Element
              | Aspect_Constant_Indexing
!             | Aspect_Variable_Indexing =>
              declare
                 Item_1 : constant Node_Id := Aspect_Rep_Item (Aspect_Spec_1);
                 Item_2 : constant Node_Id := Aspect_Rep_Item (Aspect_Spec_2);
*************** package body Sem_Util is
*** 15754,15759 ****
--- 16387,16399 ----
                                     Expression (Item_2));
              end;
  
+          --  A confirming aspect for Implicit_Derenfence on a derived type
+          --  has already been checked in Analyze_Aspect_Implicit_Dereference,
+          --  including the presence of renamed discriminants.
+ 
+          when Aspect_Implicit_Dereference =>
+             return True;
+ 
           --  one of a kind
           when Aspect_Aggregate =>
              declare
*************** package body Sem_Util is
*** 15790,15801 ****
                   Names_Match (Assign_Indexed_1, Assign_Indexed_2);
              end;
  
           --  scalar-valued aspects; compare (static) values.
!          when Aspect_Max_Entry_Queue_Length --  | Aspect_No_Controlled_Parts
!               =>
!             --  This should be unreachable. No_Controlled_Parts is
!             --  not yet supported at all in GNAT and Max_Entry_Queue_Length
!             --  is supported only for protected entries, not for types.
              pragma Assert (Serious_Errors_Detected /= 0);
              return True;
  
--- 16430,16443 ----
                   Names_Match (Assign_Indexed_1, Assign_Indexed_2);
              end;
  
+          --  Checking for this aspect is performed elsewhere during freezing
+          when Aspect_No_Controlled_Parts =>
+             return True;
+ 
           --  scalar-valued aspects; compare (static) values.
!          when Aspect_Max_Entry_Queue_Length =>
!             --  This should be unreachable. Max_Entry_Queue_Length is
!             --  supported only for protected entries, not for types.
              pragma Assert (Serious_Errors_Detected /= 0);
              return True;
  
*************** package body Sem_Util is
*** 15810,15822 ****
  
     function Is_Concurrent_Interface (T : Entity_Id) return Boolean is
     begin
!       return Is_Interface (T)
!         and then
!           (Is_Protected_Interface (T)
!             or else Is_Synchronized_Interface (T)
!             or else Is_Task_Interface (T));
     end Is_Concurrent_Interface;
  
     -----------------------
     -- Is_Constant_Bound --
     -----------------------
--- 16452,16505 ----
  
     function Is_Concurrent_Interface (T : Entity_Id) return Boolean is
     begin
!       return Is_Protected_Interface (T)
!         or else Is_Synchronized_Interface (T)
!         or else Is_Task_Interface (T);
     end Is_Concurrent_Interface;
  
+    ------------------------------------------------------
+    -- Is_Conjunction_Of_Formal_Preelab_Init_Attributes --
+    ------------------------------------------------------
+ 
+    function Is_Conjunction_Of_Formal_Preelab_Init_Attributes
+      (Expr : Node_Id) return Boolean
+    is
+ 
+       function Is_Formal_Preelab_Init_Attribute
+         (N : Node_Id) return Boolean;
+       --  Returns True if N is a Preelaborable_Initialization attribute
+       --  applied to a generic formal type, or N's Original_Node is such
+       --  an attribute.
+ 
+       --------------------------------------
+       -- Is_Formal_Preelab_Init_Attribute --
+       --------------------------------------
+ 
+       function Is_Formal_Preelab_Init_Attribute
+         (N : Node_Id) return Boolean
+       is
+          Orig_N : constant Node_Id := Original_Node (N);
+ 
+       begin
+          return Nkind (Orig_N) = N_Attribute_Reference
+            and then Attribute_Name (Orig_N) = Name_Preelaborable_Initialization
+            and then Is_Entity_Name (Prefix (Orig_N))
+            and then Is_Generic_Type (Entity (Prefix (Orig_N)));
+       end Is_Formal_Preelab_Init_Attribute;
+ 
+    --  Start of Is_Conjunction_Of_Formal_Preelab_Init_Attributes
+ 
+    begin
+       return Is_Formal_Preelab_Init_Attribute (Expr)
+         or else (Nkind (Expr) = N_Op_And
+                   and then
+                     Is_Conjunction_Of_Formal_Preelab_Init_Attributes
+                       (Left_Opnd (Expr))
+                   and then
+                     Is_Conjunction_Of_Formal_Preelab_Init_Attributes
+                       (Right_Opnd (Expr)));
+    end Is_Conjunction_Of_Formal_Preelab_Init_Attributes;
+ 
     -----------------------
     -- Is_Constant_Bound --
     -----------------------
*************** package body Sem_Util is
*** 16123,16129 ****
                            | N_Private_Type_Declaration
                            | N_Subtype_Declaration
                and then Comes_From_Source (P)
!               and then Defining_Entity (P) = Typ
              then
                 return True;
  
--- 16806,16823 ----
                            | N_Private_Type_Declaration
                            | N_Subtype_Declaration
                and then Comes_From_Source (P)
! 
!               --  If the type has a previous incomplete declaration, the
!               --  reference in the type definition may have the incomplete
!               --  view. So, here we detect if this incomplete view is a current
!               --  instance by checking if its full view is the entity of the
!               --  full declaration begin analyzed.
! 
!               and then
!                 (Defining_Entity (P) = Typ
!                   or else
!                    (Ekind (Typ) = E_Incomplete_Type
!                      and then Full_View (Typ) = Defining_Entity (P)))
              then
                 return True;
  
*************** package body Sem_Util is
*** 16131,16137 ****
              --  Predicate_Failure aspect, for which we do not construct a
              --  wrapper procedure. The subtype will be replaced by the
              --  expression being tested when the corresponding predicate
!             --  check is expanded.
  
              elsif Nkind (P) = N_Aspect_Specification
                and then Nkind (Parent (P)) = N_Subtype_Declaration
--- 16825,16832 ----
              --  Predicate_Failure aspect, for which we do not construct a
              --  wrapper procedure. The subtype will be replaced by the
              --  expression being tested when the corresponding predicate
!             --  check is expanded. It may also appear in the pragma Predicate
!             --  expression during legality checking.
  
              elsif Nkind (P) = N_Aspect_Specification
                and then Nkind (Parent (P)) = N_Subtype_Declaration
*************** package body Sem_Util is
*** 16139,16145 ****
                 return True;
  
              elsif Nkind (P) = N_Pragma
!               and then Get_Pragma_Id (P) = Pragma_Predicate_Failure
              then
                 return True;
              end if;
--- 16834,16841 ----
                 return True;
  
              elsif Nkind (P) = N_Pragma
!               and then Get_Pragma_Id (P) in Pragma_Predicate
!                                           | Pragma_Predicate_Failure
              then
                 return True;
              end if;
*************** package body Sem_Util is
*** 16409,16414 ****
--- 17105,17119 ----
              end if;
  
              if Is_Entity_Name (P) then
+                --  The Etype may not be set on P (which is wrong) in certain
+                --  corner cases involving the deprecated front-end inlining of
+                --  subprograms (via -gnatN), so use the Etype set on the
+                --  the entity for these instances since we know it is present.
+ 
+                if No (Prefix_Type) then
+                   Prefix_Type := Etype (Entity (P));
+                end if;
+ 
                 if Ekind (Entity (P)) = E_Generic_In_Out_Parameter then
                    Prefix_Type := Base_Type (Prefix_Type);
                 end if;
*************** package body Sem_Util is
*** 16639,16645 ****
  
           --  The current type is a match
  
!          if Is_Suspension_Object (Cur_Typ) then
              return True;
  
           --  Stop the traversal once the root of the derivation chain has been
--- 17344,17350 ----
  
           --  The current type is a match
  
!          if Is_RTE (Cur_Typ, RE_Suspension_Object) then
              return True;
  
           --  Stop the traversal once the root of the derivation chain has been
*************** package body Sem_Util is
*** 16894,16901 ****
          Nkind (E) = N_Function_Call
            and then not Configurable_Run_Time_Mode
            and then Nkind (Original_Node (E)) = N_Attribute_Reference
!           and then (Entity (Name (E)) = RTE (RE_Get_Ceiling)
!                      or else Entity (Name (E)) = RTE (RO_PE_Get_Ceiling));
     end Is_Expanded_Priority_Attribute;
  
     ----------------------------
--- 17599,17606 ----
          Nkind (E) = N_Function_Call
            and then not Configurable_Run_Time_Mode
            and then Nkind (Original_Node (E)) = N_Attribute_Reference
!           and then (Is_RTE (Entity (Name (E)), RE_Get_Ceiling)
!                      or else Is_RTE (Entity (Name (E)), RO_PE_Get_Ceiling));
     end Is_Expanded_Priority_Attribute;
  
     ----------------------------
*************** package body Sem_Util is
*** 16944,16949 ****
--- 17649,17668 ----
        end if;
     end Is_Expression_Function_Or_Completion;
  
+    -----------------------------------------------
+    -- Is_Extended_Precision_Floating_Point_Type --
+    -----------------------------------------------
+ 
+    function Is_Extended_Precision_Floating_Point_Type
+      (E : Entity_Id) return Boolean is
+    begin
+       return Is_Floating_Point_Type (E)
+         and then Machine_Radix_Value (E) = Uint_2
+         and then Machine_Mantissa_Value (E) = Uint_64
+         and then Machine_Emax_Value (E) = Uint_2 ** Uint_14
+         and then Machine_Emin_Value (E) = Uint_3 - (Uint_2 ** Uint_14);
+    end Is_Extended_Precision_Floating_Point_Type;
+ 
     -----------------------
     -- Is_EVF_Expression --
     -----------------------
*************** package body Sem_Util is
*** 17023,17031 ****
     -- Is_False --
     --------------
  
!    function Is_False (U : Uint) return Boolean is
     begin
!       return (U = 0);
     end Is_False;
  
     ---------------------------
--- 17742,17750 ----
     -- Is_False --
     --------------
  
!    function Is_False (U : Opt_Ubool) return Boolean is
     begin
!       return not Is_True (U);
     end Is_False;
  
     ---------------------------
*************** package body Sem_Util is
*** 17050,17056 ****
  
     function Is_Full_Access_Object (N : Node_Id) return Boolean is
     begin
!       return Is_Atomic_Object (N) or else Is_Volatile_Full_Access_Object (N);
     end Is_Full_Access_Object;
  
     -------------------------------
--- 17769,17776 ----
  
     function Is_Full_Access_Object (N : Node_Id) return Boolean is
     begin
!       return Is_Atomic_Object (N)
!         or else Is_Volatile_Full_Access_Object_Ref (N);
     end Is_Full_Access_Object;
  
     -------------------------------
*************** package body Sem_Util is
*** 17139,17147 ****
        --  Record types
  
        elsif Is_Record_Type (Typ) then
!          if Has_Discriminants (Typ)
!            and then
!              Present (Discriminant_Default_Value (First_Discriminant (Typ)))
             and then Is_Fully_Initialized_Variant (Typ)
           then
              return True;
--- 17859,17865 ----
        --  Record types
  
        elsif Is_Record_Type (Typ) then
!          if Has_Defaulted_Discriminants (Typ)
             and then Is_Fully_Initialized_Variant (Typ)
           then
              return True;
*************** package body Sem_Util is
*** 17193,17207 ****
           --  Otherwise see if all record components are initialized
  
           declare
!             Ent : Entity_Id;
  
           begin
!             Ent := First_Entity (Typ);
!             while Present (Ent) loop
!                if Ekind (Ent) = E_Component
!                  and then (No (Parent (Ent))
!                             or else No (Expression (Parent (Ent))))
!                  and then not Is_Fully_Initialized_Type (Etype (Ent))
  
                    --  Special VM case for tag components, which need to be
                    --  defined in this case, but are never initialized as VMs
--- 17911,17924 ----
           --  Otherwise see if all record components are initialized
  
           declare
!             Comp : Entity_Id;
  
           begin
!             Comp := First_Component (Typ);
!             while Present (Comp) loop
!                if (No (Parent (Comp))
!                     or else No (Expression (Parent (Comp))))
!                  and then not Is_Fully_Initialized_Type (Etype (Comp))
  
                    --  Special VM case for tag components, which need to be
                    --  defined in this case, but are never initialized as VMs
*************** package body Sem_Util is
*** 17209,17220 ****
                    --  uninitialized case. Note that this applies both to the
                    --  uTag entry and the main vtable pointer (CPP_Class case).
  
!                  and then (Tagged_Type_Expansion or else not Is_Tag (Ent))
                 then
                    return False;
                 end if;
  
!                Next_Entity (Ent);
              end loop;
           end;
  
--- 17926,17937 ----
                    --  uninitialized case. Note that this applies both to the
                    --  uTag entry and the main vtable pointer (CPP_Class case).
  
!                  and then (Tagged_Type_Expansion or else not Is_Tag (Comp))
                 then
                    return False;
                 end if;
  
!                Next_Component (Comp);
              end loop;
           end;
  
*************** package body Sem_Util is
*** 17370,17378 ****
        --  a generic body modifies the Ekind of its spec to allow for recursive
        --  calls.
  
!       return
!         Nkind (Spec_Decl) in N_Generic_Package_Declaration
!                            | N_Generic_Subprogram_Declaration;
     end Is_Generic_Declaration_Or_Body;
  
     ---------------------------
--- 18087,18093 ----
        --  a generic body modifies the Ekind of its spec to allow for recursive
        --  calls.
  
!       return Nkind (Spec_Decl) in N_Generic_Declaration;
     end Is_Generic_Declaration_Or_Body;
  
     ---------------------------
*************** package body Sem_Util is
*** 17585,17644 ****
        return Is_Array_Type (Container_Typ);
     end Is_Iterator_Over_Array;
  
!    ------------
!    -- Is_LHS --
!    ------------
  
!    --  We seem to have a lot of overlapping functions that do similar things
!    --  (testing for left hand sides or lvalues???).
  
!    function Is_LHS (N : Node_Id) return Is_LHS_Result is
!       P : constant Node_Id := Parent (N);
  
     begin
!       --  Return True if we are the left hand side of an assignment statement
  
!       if Nkind (P) = N_Assignment_Statement then
!          if Name (P) = N then
!             return Yes;
!          else
!             return No;
!          end if;
  
!       --  Case of prefix of indexed or selected component or slice
  
!       elsif Nkind (P) in N_Indexed_Component | N_Selected_Component | N_Slice
!         and then N = Prefix (P)
!       then
!          --  Here we have the case where the parent P is N.Q or N(Q .. R).
!          --  If P is an LHS, then N is also effectively an LHS, but there
!          --  is an important exception. If N is of an access type, then
!          --  what we really have is N.all.Q (or N.all(Q .. R)). In either
!          --  case this makes N.all a left hand side but not N itself.
  
!          --  If we don't know the type yet, this is the case where we return
!          --  Unknown, since the answer depends on the type which is unknown.
  
!          if No (Etype (N)) then
!             return Unknown;
  
!          --  We have an Etype set, so we can check it
  
!          elsif Is_Access_Type (Etype (N)) then
!             return No;
  
!          --  OK, not access type case, so just test whole expression
  
!          else
!             return Is_LHS (P);
!          end if;
  
!       --  All other cases are not left hand sides
  
!       else
!          return No;
!       end if;
!    end Is_LHS;
  
     -----------------------------
     -- Is_Library_Level_Entity --
--- 18300,18423 ----
        return Is_Array_Type (Container_Typ);
     end Is_Iterator_Over_Array;
  
!    --------------------------
!    -- Known_To_Be_Assigned --
!    --------------------------
  
!    function Known_To_Be_Assigned
!      (N        : Node_Id;
!       Only_LHS : Boolean := False) return Boolean
!    is
!       function Known_Assn (N : Node_Id) return Boolean is
!         (Known_To_Be_Assigned (N, Only_LHS));
!       --  Local function to simplify the passing of parameters for recursive
!       --  calls.
  
!       P    : constant Node_Id := Parent (N);
!       Form : Entity_Id := Empty;
!       Call : Node_Id   := Empty;
! 
!    --  Start of processing for Known_To_Be_Assigned
  
     begin
!       --  Check for out parameters
  
!       Find_Actual (N, Form, Call);
  
!       if Present (Form) then
!          return Ekind (Form) /= E_In_Parameter and then not Only_LHS;
!       end if;
  
!       --  Otherwise look at the parent
  
!       case Nkind (P) is
  
!          --  Test left side of assignment
  
!          when N_Assignment_Statement =>
!             return N = Name (P);
  
!          --  Test prefix of component or attribute. Note that the prefix of an
!          --  explicit or implicit dereference cannot be an l-value. In the case
!          --  of a 'Read attribute, the reference can be an actual in the
!          --  argument list of the attribute.
  
!          when N_Attribute_Reference =>
!             return
!               not Only_LHS and then
!                 ((N = Prefix (P)
!                    and then Name_Implies_Lvalue_Prefix (Attribute_Name (P)))
!                  or else
!                    Attribute_Name (P) = Name_Read);
  
!          --  For an expanded name, the name is an lvalue if the expanded name
!          --  is an lvalue, but the prefix is never an lvalue, since it is just
!          --  the scope where the name is found.
  
!          when N_Expanded_Name =>
!             if N = Prefix (P) then
!                return Known_Assn (P);
!             else
!                return False;
!             end if;
  
!          --  For a selected component A.B, A is certainly an lvalue if A.B is.
!          --  B is a little interesting, if we have A.B := 3, there is some
!          --  discussion as to whether B is an lvalue or not, we choose to say
!          --  it is. Note however that A is not an lvalue if it is of an access
!          --  type since this is an implicit dereference.
! 
!          when N_Selected_Component =>
!             if N = Prefix (P)
!               and then Present (Etype (N))
!               and then Is_Access_Type (Etype (N))
!             then
!                return False;
!             else
!                return Known_Assn (P);
!             end if;
! 
!          --  For an indexed component or slice, the index or slice bounds is
!          --  never an lvalue. The prefix is an lvalue if the indexed component
!          --  or slice is an lvalue, except if it is an access type, where we
!          --  have an implicit dereference.
! 
!          when N_Indexed_Component | N_Slice =>
!             if N /= Prefix (P)
!               or else (Present (Etype (N)) and then Is_Access_Type (Etype (N)))
!             then
!                return False;
!             else
!                return Known_Assn (P);
!             end if;
! 
!          --  Prefix of a reference is an lvalue if the reference is an lvalue
! 
!          when N_Reference =>
!             return Known_Assn (P);
! 
!          --  Prefix of explicit dereference is never an lvalue
! 
!          when N_Explicit_Dereference =>
!             return False;
! 
!          --  Test for appearing in a conversion that itself appears in an
!          --  lvalue context, since this should be an lvalue.
! 
!          when N_Type_Conversion =>
!             return Known_Assn (P);
! 
!          --  Test for appearance in object renaming declaration
! 
!          when N_Object_Renaming_Declaration =>
!             return not Only_LHS;
! 
!          --  All other references are definitely not lvalues
! 
!          when others =>
!             return False;
!       end case;
!    end Known_To_Be_Assigned;
  
     -----------------------------
     -- Is_Library_Level_Entity --
*************** package body Sem_Util is
*** 17653,17658 ****
--- 18432,18450 ----
  
        if Is_Formal (E) then
           return False;
+ 
+       --  If we somehow got an empty value for Scope, the tree must be
+       --  malformed. Rather than blow up we return True in this case.
+ 
+       elsif No (Scope (E)) then
+          return True;
+ 
+       --  Handle loops since Enclosing_Dynamic_Scope skips them; required to
+       --  properly handle entities local to quantified expressions in library
+       --  level specifications.
+ 
+       elsif Ekind (Scope (E)) = E_Loop then
+          return False;
        end if;
  
        --  Normal test is simply that the enclosing dynamic scope is Standard
*************** package body Sem_Util is
*** 17685,17691 ****
              Ent : constant Entity_Id := Entity (Expr);
              Sub : constant Entity_Id := Enclosing_Subprogram (Ent);
           begin
!             if Ekind (Ent) not in E_Variable | E_In_Out_Parameter then
                 return False;
              else
                 return Present (Sub) and then Sub = Current_Subprogram;
--- 18477,18485 ----
              Ent : constant Entity_Id := Entity (Expr);
              Sub : constant Entity_Id := Enclosing_Subprogram (Ent);
           begin
!             if Ekind (Ent)
!               not in E_Variable | E_In_Out_Parameter | E_Out_Parameter
!             then
                 return False;
              else
                 return Present (Sub) and then Sub = Current_Subprogram;
*************** package body Sem_Util is
*** 17803,17808 ****
--- 18597,18713 ----
        end case;
     end Is_Name_Reference;
  
+    --------------------------
+    -- Is_Newly_Constructed --
+    --------------------------
+ 
+    function Is_Newly_Constructed
+      (Exp : Node_Id; Context_Requires_NC : Boolean) return Boolean
+    is
+       Original_Exp : constant Node_Id := Original_Node (Exp);
+ 
+       function Is_NC (Exp : Node_Id) return Boolean is
+         (Is_Newly_Constructed (Exp, Context_Requires_NC));
+ 
+       --  If the context requires that the expression shall be newly
+       --  constructed, then "True" is a good result in the sense that the
+       --  expression satisfies the requirements of the context (and "False"
+       --  is analogously a bad result). If the context requires that the
+       --  expression shall *not* be newly constructed, then things are
+       --  reversed: "False" is the good value and "True" is the bad value.
+ 
+       Good_Result : constant Boolean := Context_Requires_NC;
+       Bad_Result  : constant Boolean := not Good_Result;
+    begin
+       case Nkind (Original_Exp) is
+          when N_Aggregate
+             | N_Extension_Aggregate
+             | N_Function_Call
+             | N_Op
+          =>
+             return True;
+ 
+          when N_Identifier =>
+             return Present (Entity (Original_Exp))
+               and then Ekind (Entity (Original_Exp)) = E_Function;
+ 
+          when N_Qualified_Expression =>
+             return Is_NC (Expression (Original_Exp));
+ 
+          when N_Type_Conversion
+             | N_Unchecked_Type_Conversion
+          =>
+             if Is_View_Conversion (Original_Exp) then
+                return Is_NC (Expression (Original_Exp));
+             elsif not Comes_From_Source (Exp) then
+                if Exp /= Original_Exp then
+                   return Is_NC (Original_Exp);
+                else
+                   return Is_NC (Expression (Original_Exp));
+                end if;
+             else
+                return False;
+             end if;
+ 
+          when N_Explicit_Dereference
+             | N_Indexed_Component
+             | N_Selected_Component
+          =>
+             return Nkind (Exp) = N_Function_Call;
+ 
+          --  A use of 'Input is a function call, hence allowed. Normally the
+          --  attribute will be changed to a call, but the attribute by itself
+          --  can occur with -gnatc.
+ 
+          when N_Attribute_Reference =>
+             return Attribute_Name (Original_Exp) = Name_Input;
+ 
+          --  "return raise ..." is OK
+ 
+          when N_Raise_Expression =>
+             return Good_Result;
+ 
+          --  For a case expression, all dependent expressions must be legal
+ 
+          when N_Case_Expression =>
+             declare
+                Alt : Node_Id;
+ 
+             begin
+                Alt := First (Alternatives (Original_Exp));
+                while Present (Alt) loop
+                   if Is_NC (Expression (Alt)) = Bad_Result then
+                      return Bad_Result;
+                   end if;
+ 
+                   Next (Alt);
+                end loop;
+ 
+                return Good_Result;
+             end;
+ 
+          --  For an if expression, all dependent expressions must be legal
+ 
+          when N_If_Expression =>
+             declare
+                Then_Expr : constant Node_Id :=
+                              Next (First (Expressions (Original_Exp)));
+                Else_Expr : constant Node_Id := Next (Then_Expr);
+             begin
+                if (Is_NC (Then_Expr) = Bad_Result)
+                  or else (Is_NC (Else_Expr) = Bad_Result)
+                then
+                   return Bad_Result;
+                else
+                   return Good_Result;
+                end if;
+             end;
+ 
+          when others =>
+             return False;
+       end case;
+    end Is_Newly_Constructed;
+ 
     ------------------------------------
     -- Is_Non_Preelaborable_Construct --
     ------------------------------------
*************** package body Sem_Util is
*** 18174,18183 ****
  
              when N_Function_Call =>
  
!                --  Ada 2020 (AI12-0175): Calls to certain functions that are
                 --  essentially unchecked conversions are preelaborable.
  
!                if Ada_Version >= Ada_2020
                   and then Nkind (Expr) = N_Function_Call
                   and then Is_Entity_Name (Name (Expr))
                   and then Is_Preelaborable_Function (Entity (Name (Expr)))
--- 19079,19088 ----
  
              when N_Function_Call =>
  
!                --  Ada 2022 (AI12-0175): Calls to certain functions that are
                 --  essentially unchecked conversions are preelaborable.
  
!                if Ada_Version >= Ada_2022
                   and then Nkind (Expr) = N_Function_Call
                   and then Is_Entity_Name (Name (Expr))
                   and then Is_Preelaborable_Function (Entity (Name (Expr)))
*************** package body Sem_Util is
*** 18292,18309 ****
        return False;
     end Is_Nontrivial_DIC_Procedure;
  
     -------------------------
     -- Is_Null_Record_Type --
     -------------------------
  
!    function Is_Null_Record_Type (T : Entity_Id) return Boolean is
!       Decl : constant Node_Id := Parent (T);
     begin
!       return Nkind (Decl) = N_Full_Type_Declaration
!         and then Nkind (Type_Definition (Decl)) = N_Record_Definition
!         and then
!           (No (Component_List (Type_Definition (Decl)))
!             or else Null_Present (Component_List (Type_Definition (Decl))));
     end Is_Null_Record_Type;
  
     ---------------------
--- 19197,19339 ----
        return False;
     end Is_Nontrivial_DIC_Procedure;
  
+    -----------------------
+    -- Is_Null_Extension --
+    -----------------------
+ 
+    function Is_Null_Extension
+      (T : Entity_Id; Ignore_Privacy : Boolean := False) return Boolean
+    is
+       Type_Decl : Node_Id;
+       Type_Def  : Node_Id;
+    begin
+       if Ignore_Privacy then
+          Type_Decl := Parent (Underlying_Type (Base_Type (T)));
+       else
+          Type_Decl := Parent (Base_Type (T));
+          if Nkind (Type_Decl) /= N_Full_Type_Declaration then
+             return False;
+          end if;
+       end if;
+       pragma Assert (Nkind (Type_Decl) = N_Full_Type_Declaration);
+       Type_Def := Type_Definition (Type_Decl);
+       if Present (Discriminant_Specifications (Type_Decl))
+         or else Nkind (Type_Def) /= N_Derived_Type_Definition
+         or else not Is_Tagged_Type (T)
+         or else No (Record_Extension_Part (Type_Def))
+       then
+          return False;
+       end if;
+ 
+       return Is_Null_Record_Definition (Record_Extension_Part (Type_Def));
+    end Is_Null_Extension;
+ 
+    --------------------------
+    -- Is_Null_Extension_Of --
+    --------------------------
+ 
+    function Is_Null_Extension_Of
+      (Descendant, Ancestor : Entity_Id) return Boolean
+    is
+       Ancestor_Type : constant Entity_Id
+         := Underlying_Type (Base_Type (Ancestor));
+       Descendant_Type : Entity_Id := Underlying_Type (Base_Type (Descendant));
+    begin
+       pragma Assert (Descendant_Type /= Ancestor_Type);
+       while Descendant_Type /= Ancestor_Type loop
+          if not Is_Null_Extension
+                   (Descendant_Type, Ignore_Privacy => True)
+          then
+             return False;
+          end if;
+          Descendant_Type := Etype (Subtype_Indication
+                               (Type_Definition (Parent (Descendant_Type))));
+          Descendant_Type := Underlying_Type (Base_Type (Descendant_Type));
+       end loop;
+       return True;
+    end Is_Null_Extension_Of;
+ 
+    -------------------------------
+    -- Is_Null_Record_Definition --
+    -------------------------------
+ 
+    function Is_Null_Record_Definition (Record_Def : Node_Id) return Boolean is
+       Item : Node_Id;
+    begin
+       --  Testing Null_Present is just an optimization, not required.
+ 
+       if Null_Present (Record_Def) then
+          return True;
+       elsif Present (Variant_Part (Component_List (Record_Def))) then
+          return False;
+       elsif not Present (Component_List (Record_Def)) then
+          return True;
+       end if;
+ 
+       Item := First (Component_Items (Component_List (Record_Def)));
+ 
+       while Present (Item) loop
+          if Nkind (Item) = N_Component_Declaration
+            and then Is_Internal_Name (Chars (Defining_Identifier (Item)))
+          then
+             null;
+          elsif Nkind (Item) = N_Pragma then
+             null;
+          else
+             return False;
+          end if;
+          Item := Next (Item);
+       end loop;
+ 
+       return True;
+    end Is_Null_Record_Definition;
+ 
     -------------------------
     -- Is_Null_Record_Type --
     -------------------------
  
!    function Is_Null_Record_Type
!      (T : Entity_Id; Ignore_Privacy : Boolean := False) return Boolean
!    is
!       Decl     : Node_Id;
!       Type_Def : Node_Id;
     begin
!       if not Is_Record_Type (T) then
!          return False;
!       end if;
! 
!       if Ignore_Privacy then
!          Decl := Parent (Underlying_Type (Base_Type (T)));
!       else
!          Decl := Parent (Base_Type (T));
!          if Nkind (Decl) /= N_Full_Type_Declaration then
!             return False;
!          end if;
!       end if;
!       pragma Assert (Nkind (Decl) = N_Full_Type_Declaration);
!       Type_Def := Type_Definition (Decl);
! 
!       if Has_Discriminants (Defining_Identifier (Decl)) then
!          return False;
!       end if;
! 
!       case Nkind (Type_Def) is
!          when N_Record_Definition =>
!             return Is_Null_Record_Definition (Type_Def);
!          when N_Derived_Type_Definition =>
!             if not Is_Null_Record_Type
!                      (Etype (Subtype_Indication (Type_Def)),
!                       Ignore_Privacy => Ignore_Privacy)
!             then
!                return False;
!             elsif not Is_Tagged_Type (T) then
!                return True;
!             else
!                return Is_Null_Extension (T, Ignore_Privacy => Ignore_Privacy);
!             end if;
!          when others =>
!             return False;
!       end case;
     end Is_Null_Record_Type;
  
     ---------------------
*************** package body Sem_Util is
*** 18317,18323 ****
        --  This is because the parser always checks that prefixes of attributes
        --  are named.
  
!       return not (Is_Entity_Name (Prefix) and then Is_Type (Entity (Prefix)));
     end Is_Object_Image;
  
     -------------------------
--- 19347,19355 ----
        --  This is because the parser always checks that prefixes of attributes
        --  are named.
  
!       return not (Is_Entity_Name (Prefix)
!                   and then Is_Type (Entity (Prefix))
!                   and then not Is_Current_Instance (Prefix));
     end Is_Object_Image;
  
     -------------------------
*************** package body Sem_Util is
*** 18409,18415 ****
                      and then Is_Object_Reference (Expression (N));
  
                 else
!                   --  AI12-0226: In Ada 202x a value conversion of an object is
                    --  an object.
  
                    return Is_Object_Reference (Expression (N));
--- 19441,19447 ----
                      and then Is_Object_Reference (Expression (N));
  
                 else
!                   --  AI12-0226: In Ada 2022 a value conversion of an object is
                    --  an object.
  
                    return Is_Object_Reference (Expression (N));
*************** package body Sem_Util is
*** 18557,18564 ****
     ----------------------------
  
     function Is_OK_Volatile_Context
!      (Context : Node_Id;
!       Obj_Ref : Node_Id) return Boolean
     is
        function Is_Protected_Operation_Call (Nod : Node_Id) return Boolean;
        --  Determine whether an arbitrary node denotes a call to a protected
--- 19589,19597 ----
     ----------------------------
  
     function Is_OK_Volatile_Context
!      (Context       : Node_Id;
!       Obj_Ref       : Node_Id;
!       Check_Actuals : Boolean) return Boolean
     is
        function Is_Protected_Operation_Call (Nod : Node_Id) return Boolean;
        --  Determine whether an arbitrary node denotes a call to a protected
*************** package body Sem_Util is
*** 18633,18653 ****
        ------------------------------
  
        function Within_Volatile_Function (Id : Entity_Id) return Boolean is
!          Func_Id : Entity_Id;
! 
!       begin
!          --  Traverse the scope stack looking for a [generic] function
  
!          Func_Id := Id;
!          while Present (Func_Id) and then Func_Id /= Standard_Standard loop
!             if Ekind (Func_Id) in E_Function | E_Generic_Function then
!                return Is_Volatile_Function (Func_Id);
!             end if;
  
!             Func_Id := Scope (Func_Id);
!          end loop;
  
!          return False;
        end Within_Volatile_Function;
  
        --  Local variables
--- 19666,19679 ----
        ------------------------------
  
        function Within_Volatile_Function (Id : Entity_Id) return Boolean is
!          pragma Assert (Ekind (Id) = E_Return_Statement);
  
!          Func_Id : constant Entity_Id := Return_Applies_To (Id);
  
!       begin
!          pragma Assert (Ekind (Func_Id) in E_Function | E_Generic_Function);
  
!          return Is_Volatile_Function (Func_Id);
        end Within_Volatile_Function;
  
        --  Local variables
*************** package body Sem_Util is
*** 18657,18665 ****
     --  Start of processing for Is_OK_Volatile_Context
  
     begin
        --  The volatile object appears on either side of an assignment
  
!       if Nkind (Context) = N_Assignment_Statement then
           return True;
  
        --  The volatile object is part of the initialization expression of
--- 19683,19708 ----
     --  Start of processing for Is_OK_Volatile_Context
  
     begin
+       --  Ignore context restriction when doing preanalysis, e.g. on a copy of
+       --  an expression function, because this copy is not fully decorated and
+       --  it is not possible to reliably decide the legality of the context.
+       --  Any violations will be reported anyway when doing the full analysis.
+ 
+       if not Full_Analysis then
+          return True;
+       end if;
+ 
+       --  For actual parameters within explicit parameter associations switch
+       --  the context to the corresponding subprogram call.
+ 
+       if Nkind (Context) = N_Parameter_Association then
+          return Is_OK_Volatile_Context (Context       => Parent (Context),
+                                         Obj_Ref       => Obj_Ref,
+                                         Check_Actuals => Check_Actuals);
+ 
        --  The volatile object appears on either side of an assignment
  
!       elsif Nkind (Context) = N_Assignment_Statement then
           return True;
  
        --  The volatile object is part of the initialization expression of
*************** package body Sem_Util is
*** 18677,18683 ****
           --  function is volatile.
  
           if Is_Return_Object (Obj_Id) then
!             return Within_Volatile_Function (Obj_Id);
  
           --  Otherwise this is a normal object initialization
  
--- 19720,19726 ----
           --  function is volatile.
  
           if Is_Return_Object (Obj_Id) then
!             return Within_Volatile_Function (Scope (Obj_Id));
  
           --  Otherwise this is a normal object initialization
  
*************** package body Sem_Util is
*** 18728,18735 ****
                N_Slice
          and then Prefix (Context) = Obj_Ref
          and then Is_OK_Volatile_Context
!                    (Context => Parent (Context),
!                     Obj_Ref => Context)
        then
           return True;
  
--- 19771,19779 ----
                N_Slice
          and then Prefix (Context) = Obj_Ref
          and then Is_OK_Volatile_Context
!                    (Context       => Parent (Context),
!                     Obj_Ref       => Context,
!                     Check_Actuals => Check_Actuals)
        then
           return True;
  
*************** package body Sem_Util is
*** 18761,18768 ****
                               | N_Unchecked_Type_Conversion
          and then Expression (Context) = Obj_Ref
          and then Is_OK_Volatile_Context
!                    (Context => Parent (Context),
!                     Obj_Ref => Context)
        then
           return True;
  
--- 19805,19813 ----
                               | N_Unchecked_Type_Conversion
          and then Expression (Context) = Obj_Ref
          and then Is_OK_Volatile_Context
!                    (Context       => Parent (Context),
!                     Obj_Ref       => Context,
!                     Check_Actuals => Check_Actuals)
        then
           return True;
  
*************** package body Sem_Util is
*** 18777,18793 ****
        elsif Within_Check (Context) then
           return True;
  
!       --  Assume that references to effectively volatile objects that appear
!       --  as actual parameters in a subprogram call are always legal. A full
!       --  legality check is done when the actuals are resolved (see routine
!       --  Resolve_Actuals).
  
!       elsif Within_Subprogram_Call (Context) then
!          return True;
  
!       --  Otherwise the context is not suitable for an effectively volatile
!       --  object.
  
        else
           return False;
        end if;
--- 19822,19864 ----
        elsif Within_Check (Context) then
           return True;
  
!       --  References to effectively volatile objects that appear as actual
!       --  parameters in subprogram calls can be examined only after call itself
!       --  has been resolved. Before that, assume such references to be legal.
  
!       elsif Nkind (Context) in N_Subprogram_Call | N_Entry_Call_Statement then
!          if Check_Actuals then
!             declare
!                Call   : Node_Id;
!                Formal : Entity_Id;
!                Subp   : constant Entity_Id := Get_Called_Entity (Context);
!             begin
!                Find_Actual (Obj_Ref, Formal, Call);
!                pragma Assert (Call = Context);
  
!                --  An effectively volatile object may act as an actual when the
!                --  corresponding formal is of a non-scalar effectively volatile
!                --  type (SPARK RM 7.1.3(10)).
  
+                if not Is_Scalar_Type (Etype (Formal))
+                  and then Is_Effectively_Volatile_For_Reading (Etype (Formal))
+                then
+                   return True;
+ 
+                --  An effectively volatile object may act as an actual in a
+                --  call to an instance of Unchecked_Conversion. (SPARK RM
+                --  7.1.3(10)).
+ 
+                elsif Is_Unchecked_Conversion_Instance (Subp) then
+                   return True;
+ 
+                else
+                   return False;
+                end if;
+             end;
+          else
+             return True;
+          end if;
        else
           return False;
        end if;
*************** package body Sem_Util is
*** 18860,18866 ****
           elsif Is_Tagged_Type (Typ) then
              return True;
  
!          --  Case of non-discriminated record
  
           else
              declare
--- 19931,19937 ----
           elsif Is_Tagged_Type (Typ) then
              return True;
  
!          --  Case of nondiscriminated record
  
           else
              declare
*************** package body Sem_Util is
*** 19103,19110 ****
             and then Aggregate_Type /= Any_Composite
           then
              if Is_Array_Type (Aggregate_Type) then
!                if Ada_Version >= Ada_2020 then
!                   --  For Ada_2020, this predicate returns True for
                    --  any "repeatedly evaluated" expression.
                    return True;
                 end if;
--- 20174,20181 ----
             and then Aggregate_Type /= Any_Composite
           then
              if Is_Array_Type (Aggregate_Type) then
!                if Ada_Version >= Ada_2022 then
!                   --  For Ada 2022, this predicate returns True for
                    --  any "repeatedly evaluated" expression.
                    return True;
                 end if;
*************** package body Sem_Util is
*** 19517,19526 ****
        elsif Nkind (N) = N_Null then
           return True;
  
!       --  Ada 2020 (AI12-0175): Calls to certain functions that are essentially
        --  unchecked conversions are preelaborable.
  
!       elsif Ada_Version >= Ada_2020
          and then Nkind (N) = N_Function_Call
          and then Is_Entity_Name (Name (N))
          and then Is_Preelaborable_Function (Entity (Name (N)))
--- 20588,20597 ----
        elsif Nkind (N) = N_Null then
           return True;
  
!       --  Ada 2022 (AI12-0175): Calls to certain functions that are essentially
        --  unchecked conversions are preelaborable.
  
!       elsif Ada_Version >= Ada_2022
          and then Nkind (N) = N_Function_Call
          and then Is_Entity_Name (Name (N))
          and then Is_Preelaborable_Function (Entity (Name (N)))
*************** package body Sem_Util is
*** 19592,19597 ****
--- 20663,20679 ----
        return False;
     end Is_Preelaborable_Function;
  
+    -----------------------------
+    -- Is_Private_Library_Unit --
+    -----------------------------
+ 
+    function Is_Private_Library_Unit (Unit : Entity_Id) return Boolean is
+       Comp_Unit : constant Node_Id := Parent (Unit_Declaration_Node (Unit));
+    begin
+       return Nkind (Comp_Unit) = N_Compilation_Unit
+         and then Private_Present (Comp_Unit);
+    end Is_Private_Library_Unit;
+ 
     ---------------------------------
     -- Is_Protected_Self_Reference --
     ---------------------------------
*************** package body Sem_Util is
*** 19749,19755 ****
  
     function Is_Renamed_Entry (Proc_Nam : Entity_Id) return Boolean is
        Orig_Node : Node_Id := Empty;
!       Subp_Decl : Node_Id := Parent (Parent (Proc_Nam));
  
        function Is_Entry (Nam : Node_Id) return Boolean;
        --  Determine whether Nam is an entry. Traverse selectors if there are
--- 20831,20838 ----
  
     function Is_Renamed_Entry (Proc_Nam : Entity_Id) return Boolean is
        Orig_Node : Node_Id := Empty;
!       Subp_Decl : Node_Id :=
!         (if No (Parent (Proc_Nam)) then Empty else Parent (Parent (Proc_Nam)));
  
        function Is_Entry (Nam : Node_Id) return Boolean;
        --  Determine whether Nam is an entry. Traverse selectors if there are
*************** package body Sem_Util is
*** 20022,20032 ****
  
     function Is_Static_Function (Subp : Entity_Id) return Boolean is
     begin
!       --  Always return False for pre Ada 2020 to e.g. ignore the Static
!       --  aspect in package Interfaces for Ada_Version < 2020 and also
        --  for efficiency.
  
!       return Ada_Version >= Ada_2020
          and then Has_Aspect (Subp, Aspect_Static)
          and then
            (No (Find_Value_Of_Aspect (Subp, Aspect_Static))
--- 21105,21115 ----
  
     function Is_Static_Function (Subp : Entity_Id) return Boolean is
     begin
!       --  Always return False for pre Ada 2022 to e.g. ignore the Static
!       --  aspect in package Interfaces for Ada_Version < 2022 and also
        --  for efficiency.
  
!       return Ada_Version >= Ada_2022
          and then Has_Aspect (Subp, Aspect_Static)
          and then
            (No (Find_Value_Of_Aspect (Subp, Aspect_Static))
*************** package body Sem_Util is
*** 20212,20239 ****
        return True;
     end Is_Suitable_Primitive;
  
-    --------------------------
-    -- Is_Suspension_Object --
-    --------------------------
- 
-    function Is_Suspension_Object (Id : Entity_Id) return Boolean is
-    begin
-       --  This approach does an exact name match rather than to rely on
-       --  RTSfind. Routine Is_Effectively_Volatile is used by clients of the
-       --  front end at point where all auxiliary tables are locked and any
-       --  modifications to them are treated as violations. Do not tamper with
-       --  the tables, instead examine the Chars fields of all the scopes of Id.
- 
-       return
-         Chars (Id) = Name_Suspension_Object
-           and then Present (Scope (Id))
-           and then Chars (Scope (Id)) = Name_Synchronous_Task_Control
-           and then Present (Scope (Scope (Id)))
-           and then Chars (Scope (Scope (Id))) = Name_Ada
-           and then Present (Scope (Scope (Scope (Id))))
-           and then Scope (Scope (Scope (Id))) = Standard_Standard;
-    end Is_Suspension_Object;
- 
     ----------------------------
     -- Is_Synchronized_Object --
     ----------------------------
--- 21295,21300 ----
*************** package body Sem_Util is
*** 20353,20361 ****
     -- Is_True --
     -------------
  
!    function Is_True (U : Uint) return Boolean is
     begin
!       return U /= 0;
     end Is_True;
  
     --------------------------------------
--- 21414,21422 ----
     -- Is_True --
     -------------
  
!    function Is_True (U : Opt_Ubool) return Boolean is
     begin
!       return No (U) or else U = Uint_1;
     end Is_True;
  
     --------------------------------------
*************** package body Sem_Util is
*** 20505,20510 ****
--- 21566,21574 ----
     -- Is_Variable --
     -----------------
  
+    --  Should Is_Variable be refactored to better handle dereferences and
+    --  technical debt ???
+ 
     function Is_Variable
       (N                 : Node_Id;
        Use_Original_Node : Boolean := True) return Boolean
*************** package body Sem_Util is
*** 20673,20678 ****
--- 21737,21746 ----
                          and then Nkind (Parent (E)) /= N_Exception_Handler)
                or else (K = E_Component
                          and then not In_Protected_Function (E))
+               or else (Present (Etype (E))
+                         and then Is_Access_Object_Type (Etype (E))
+                         and then Is_Access_Variable (Etype (E))
+                         and then Is_Dereferenced (N))
                or else K = E_Out_Parameter
                or else K = E_In_Out_Parameter
                or else K = E_Generic_In_Out_Parameter
*************** package body Sem_Util is
*** 20782,20792 ****
          and then Scope (Scope (Scope (Root))) = Standard_Standard;
     end Is_Visibly_Controlled;
  
!    --------------------------------------
!    --  Is_Volatile_Full_Access_Object  --
!    --------------------------------------
  
!    function Is_Volatile_Full_Access_Object (N : Node_Id) return Boolean is
        function Is_VFA_Object_Entity (Id : Entity_Id) return Boolean;
        --  Determine whether arbitrary entity Id denotes an object that is
        --  Volatile_Full_Access.
--- 21850,21860 ----
          and then Scope (Scope (Scope (Root))) = Standard_Standard;
     end Is_Visibly_Controlled;
  
!    ----------------------------------------
!    -- Is_Volatile_Full_Access_Object_Ref --
!    ----------------------------------------
  
!    function Is_Volatile_Full_Access_Object_Ref (N : Node_Id) return Boolean is
        function Is_VFA_Object_Entity (Id : Entity_Id) return Boolean;
        --  Determine whether arbitrary entity Id denotes an object that is
        --  Volatile_Full_Access.
*************** package body Sem_Util is
*** 20804,20810 ****
                         Is_Volatile_Full_Access (Etype (Id)));
        end Is_VFA_Object_Entity;
  
!    --  Start of processing for Is_Volatile_Full_Access_Object
  
     begin
        if Is_Entity_Name (N) then
--- 21872,21878 ----
                         Is_Volatile_Full_Access (Etype (Id)));
        end Is_VFA_Object_Entity;
  
!    --  Start of processing for Is_Volatile_Full_Access_Object_Ref
  
     begin
        if Is_Entity_Name (N) then
*************** package body Sem_Util is
*** 20819,20825 ****
        else
           return False;
        end if;
!    end Is_Volatile_Full_Access_Object;
  
     --------------------------
     -- Is_Volatile_Function --
--- 21887,21893 ----
        else
           return False;
        end if;
!    end Is_Volatile_Full_Access_Object_Ref;
  
     --------------------------
     -- Is_Volatile_Function --
*************** package body Sem_Util is
*** 20829,20837 ****
     begin
        pragma Assert (Ekind (Func_Id) in E_Function | E_Generic_Function);
  
!       --  A function declared within a protected type is volatile
  
!       if Is_Protected_Type (Scope (Func_Id)) then
           return True;
  
        --  An instance of Ada.Unchecked_Conversion is a volatile function if
--- 21897,21907 ----
     begin
        pragma Assert (Ekind (Func_Id) in E_Function | E_Generic_Function);
  
!       --  A protected function is volatile
  
!       if Nkind (Parent (Unit_Declaration_Node (Func_Id))) =
!            N_Protected_Definition
!       then
           return True;
  
        --  An instance of Ada.Unchecked_Conversion is a volatile function if
*************** package body Sem_Util is
*** 20851,20861 ****
        end if;
     end Is_Volatile_Function;
  
!    ------------------------
!    -- Is_Volatile_Object --
!    ------------------------
  
!    function Is_Volatile_Object (N : Node_Id) return Boolean is
        function Is_Volatile_Object_Entity (Id : Entity_Id) return Boolean;
        --  Determine whether arbitrary entity Id denotes an object that is
        --  Volatile.
--- 21921,21931 ----
        end if;
     end Is_Volatile_Function;
  
!    ----------------------------
!    -- Is_Volatile_Object_Ref --
!    ----------------------------
  
!    function Is_Volatile_Object_Ref (N : Node_Id) return Boolean is
        function Is_Volatile_Object_Entity (Id : Entity_Id) return Boolean;
        --  Determine whether arbitrary entity Id denotes an object that is
        --  Volatile.
*************** package body Sem_Util is
*** 20881,20887 ****
        ------------------------------------
  
        function Prefix_Has_Volatile_Components (P : Node_Id) return Boolean is
!          Typ  : constant Entity_Id := Etype (P);
  
        begin
           if Is_Access_Type (Typ) then
--- 21951,21957 ----
        ------------------------------------
  
        function Prefix_Has_Volatile_Components (P : Node_Id) return Boolean is
!          Typ : constant Entity_Id := Etype (P);
  
        begin
           if Is_Access_Type (Typ) then
*************** package body Sem_Util is
*** 20901,20907 ****
           then
              return True;
  
!          elsif Is_Volatile_Object (P) then
              return True;
  
           else
--- 21971,21977 ----
           then
              return True;
  
!          elsif Is_Volatile_Object_Ref (P) then
              return True;
  
           else
*************** package body Sem_Util is
*** 20909,20915 ****
           end if;
        end Prefix_Has_Volatile_Components;
  
!    --  Start of processing for Is_Volatile_Object
  
     begin
        if Is_Entity_Name (N) then
--- 21979,21985 ----
           end if;
        end Prefix_Has_Volatile_Components;
  
!    --  Start of processing for Is_Volatile_Object_Ref
  
     begin
        if Is_Entity_Name (N) then
*************** package body Sem_Util is
*** 20928,20934 ****
        else
           return False;
        end if;
!    end Is_Volatile_Object;
  
     -----------------------------
     -- Iterate_Call_Parameters --
--- 21998,22004 ----
        else
           return False;
        end if;
!    end Is_Volatile_Object_Ref;
  
     -----------------------------
     -- Iterate_Call_Parameters --
*************** package body Sem_Util is
*** 21161,21166 ****
--- 22231,22243 ----
  
           Get_Current_Value_Condition (N, Op, Val);
  
+          --  If Get_Current_Value_Condition were to return Val = N, then the
+          --  recursion below could be infinite.
+ 
+          if Val = N then
+             raise Program_Error;
+          end if;
+ 
           if Known_Null (Val) then
              if Op = N_Op_Eq then
                 return True;
*************** package body Sem_Util is
*** 21184,21304 ****
        return False;
     end Known_Null;
  
-    --------------------------
-    -- Known_To_Be_Assigned --
-    --------------------------
- 
-    function Known_To_Be_Assigned (N : Node_Id) return Boolean is
-       P : constant Node_Id := Parent (N);
- 
-    begin
-       case Nkind (P) is
- 
-          --  Test left side of assignment
- 
-          when N_Assignment_Statement =>
-             return N = Name (P);
- 
-          --  Function call arguments are never lvalues
- 
-          when N_Function_Call =>
-             return False;
- 
-          --  Positional parameter for procedure or accept call
- 
-          when N_Accept_Statement
-             | N_Procedure_Call_Statement
-          =>
-             declare
-                Proc : Entity_Id;
-                Form : Entity_Id;
-                Act  : Node_Id;
- 
-             begin
-                Proc := Get_Subprogram_Entity (P);
- 
-                if No (Proc) then
-                   return False;
-                end if;
- 
-                --  If we are not a list member, something is strange, so
-                --  be conservative and return False.
- 
-                if not Is_List_Member (N) then
-                   return False;
-                end if;
- 
-                --  We are going to find the right formal by stepping forward
-                --  through the formals, as we step backwards in the actuals.
- 
-                Form := First_Formal (Proc);
-                Act  := N;
-                loop
-                   --  If no formal, something is weird, so be conservative
-                   --  and return False.
- 
-                   if No (Form) then
-                      return False;
-                   end if;
- 
-                   Prev (Act);
-                   exit when No (Act);
-                   Next_Formal (Form);
-                end loop;
- 
-                return Ekind (Form) /= E_In_Parameter;
-             end;
- 
-          --  Named parameter for procedure or accept call
- 
-          when N_Parameter_Association =>
-             declare
-                Proc : Entity_Id;
-                Form : Entity_Id;
- 
-             begin
-                Proc := Get_Subprogram_Entity (Parent (P));
- 
-                if No (Proc) then
-                   return False;
-                end if;
- 
-                --  Loop through formals to find the one that matches
- 
-                Form := First_Formal (Proc);
-                loop
-                   --  If no matching formal, that's peculiar, some kind of
-                   --  previous error, so return False to be conservative.
-                   --  Actually this also happens in legal code in the case
-                   --  where P is a parameter association for an Extra_Formal???
- 
-                   if No (Form) then
-                      return False;
-                   end if;
- 
-                   --  Else test for match
- 
-                   if Chars (Form) = Chars (Selector_Name (P)) then
-                      return Ekind (Form) /= E_In_Parameter;
-                   end if;
- 
-                   Next_Formal (Form);
-                end loop;
-             end;
- 
-          --  Test for appearing in a conversion that itself appears
-          --  in an lvalue context, since this should be an lvalue.
- 
-          when N_Type_Conversion =>
-             return Known_To_Be_Assigned (P);
- 
-          --  All other references are definitely not known to be modifications
- 
-          when others =>
-             return False;
-       end case;
-    end Known_To_Be_Assigned;
- 
     ---------------------------
     -- Last_Source_Statement --
     ---------------------------
--- 22261,22266 ----
*************** package body Sem_Util is
*** 21784,21978 ****
        return True;
     end Matching_Static_Array_Bounds;
  
-    -------------------
-    -- May_Be_Lvalue --
-    -------------------
- 
-    function May_Be_Lvalue (N : Node_Id) return Boolean is
-       P : constant Node_Id := Parent (N);
- 
-    begin
-       case Nkind (P) is
- 
-          --  Test left side of assignment
- 
-          when N_Assignment_Statement =>
-             return N = Name (P);
- 
-          --  Test prefix of component or attribute. Note that the prefix of an
-          --  explicit or implicit dereference cannot be an l-value. In the case
-          --  of a 'Read attribute, the reference can be an actual in the
-          --  argument list of the attribute.
- 
-          when N_Attribute_Reference =>
-             return (N = Prefix (P)
-                      and then Name_Implies_Lvalue_Prefix (Attribute_Name (P)))
-                  or else
-                    Attribute_Name (P) = Name_Read;
- 
-          --  For an expanded name, the name is an lvalue if the expanded name
-          --  is an lvalue, but the prefix is never an lvalue, since it is just
-          --  the scope where the name is found.
- 
-          when N_Expanded_Name =>
-             if N = Prefix (P) then
-                return May_Be_Lvalue (P);
-             else
-                return False;
-             end if;
- 
-          --  For a selected component A.B, A is certainly an lvalue if A.B is.
-          --  B is a little interesting, if we have A.B := 3, there is some
-          --  discussion as to whether B is an lvalue or not, we choose to say
-          --  it is. Note however that A is not an lvalue if it is of an access
-          --  type since this is an implicit dereference.
- 
-          when N_Selected_Component =>
-             if N = Prefix (P)
-               and then Present (Etype (N))
-               and then Is_Access_Type (Etype (N))
-             then
-                return False;
-             else
-                return May_Be_Lvalue (P);
-             end if;
- 
-          --  For an indexed component or slice, the index or slice bounds is
-          --  never an lvalue. The prefix is an lvalue if the indexed component
-          --  or slice is an lvalue, except if it is an access type, where we
-          --  have an implicit dereference.
- 
-          when N_Indexed_Component
-             | N_Slice
-          =>
-             if N /= Prefix (P)
-               or else (Present (Etype (N)) and then Is_Access_Type (Etype (N)))
-             then
-                return False;
-             else
-                return May_Be_Lvalue (P);
-             end if;
- 
-          --  Prefix of a reference is an lvalue if the reference is an lvalue
- 
-          when N_Reference =>
-             return May_Be_Lvalue (P);
- 
-          --  Prefix of explicit dereference is never an lvalue
- 
-          when N_Explicit_Dereference =>
-             return False;
- 
-          --  Positional parameter for subprogram, entry, or accept call.
-          --  In older versions of Ada function call arguments are never
-          --  lvalues. In Ada 2012 functions can have in-out parameters.
- 
-          when N_Accept_Statement
-             | N_Entry_Call_Statement
-             | N_Subprogram_Call
-          =>
-             if Nkind (P) = N_Function_Call and then Ada_Version < Ada_2012 then
-                return False;
-             end if;
- 
-             --  The following mechanism is clumsy and fragile. A single flag
-             --  set in Resolve_Actuals would be preferable ???
- 
-             declare
-                Proc : Entity_Id;
-                Form : Entity_Id;
-                Act  : Node_Id;
- 
-             begin
-                Proc := Get_Subprogram_Entity (P);
- 
-                if No (Proc) then
-                   return True;
-                end if;
- 
-                --  If we are not a list member, something is strange, so be
-                --  conservative and return True.
- 
-                if not Is_List_Member (N) then
-                   return True;
-                end if;
- 
-                --  We are going to find the right formal by stepping forward
-                --  through the formals, as we step backwards in the actuals.
- 
-                Form := First_Formal (Proc);
-                Act  := N;
-                loop
-                   --  If no formal, something is weird, so be conservative and
-                   --  return True.
- 
-                   if No (Form) then
-                      return True;
-                   end if;
- 
-                   Prev (Act);
-                   exit when No (Act);
-                   Next_Formal (Form);
-                end loop;
- 
-                return Ekind (Form) /= E_In_Parameter;
-             end;
- 
-          --  Named parameter for procedure or accept call
- 
-          when N_Parameter_Association =>
-             declare
-                Proc : Entity_Id;
-                Form : Entity_Id;
- 
-             begin
-                Proc := Get_Subprogram_Entity (Parent (P));
- 
-                if No (Proc) then
-                   return True;
-                end if;
- 
-                --  Loop through formals to find the one that matches
- 
-                Form := First_Formal (Proc);
-                loop
-                   --  If no matching formal, that's peculiar, some kind of
-                   --  previous error, so return True to be conservative.
-                   --  Actually happens with legal code for an unresolved call
-                   --  where we may get the wrong homonym???
- 
-                   if No (Form) then
-                      return True;
-                   end if;
- 
-                   --  Else test for match
- 
-                   if Chars (Form) = Chars (Selector_Name (P)) then
-                      return Ekind (Form) /= E_In_Parameter;
-                   end if;
- 
-                   Next_Formal (Form);
-                end loop;
-             end;
- 
-          --  Test for appearing in a conversion that itself appears in an
-          --  lvalue context, since this should be an lvalue.
- 
-          when N_Type_Conversion =>
-             return May_Be_Lvalue (P);
- 
-          --  Test for appearance in object renaming declaration
- 
-          when N_Object_Renaming_Declaration =>
-             return True;
- 
-          --  All other references are definitely not lvalues
- 
-          when others =>
-             return False;
-       end case;
-    end May_Be_Lvalue;
- 
     -----------------
     -- Might_Raise --
     -----------------
--- 22746,22751 ----
*************** package body Sem_Util is
*** 22028,22033 ****
--- 22801,22861 ----
        return Result;
     end Might_Raise;
  
+    ----------------------------------------
+    -- Nearest_Class_Condition_Subprogram --
+    ----------------------------------------
+ 
+    function Nearest_Class_Condition_Subprogram
+      (Kind    : Condition_Kind;
+       Spec_Id : Entity_Id) return Entity_Id
+    is
+       Subp_Id : constant Entity_Id := Ultimate_Alias (Spec_Id);
+ 
+    begin
+       --  Prevent cascaded errors
+ 
+       if not Is_Dispatching_Operation (Subp_Id) then
+          return Empty;
+ 
+       --  No need to search if this subprogram has class-wide postconditions
+ 
+       elsif Present (Class_Condition (Kind, Subp_Id)) then
+          return Subp_Id;
+       end if;
+ 
+       --  Process the contracts of inherited subprograms, looking for
+       --  class-wide pre/postconditions.
+ 
+       declare
+          Subps   : constant Subprogram_List := Inherited_Subprograms (Subp_Id);
+          Subp_Id : Entity_Id;
+ 
+       begin
+          for Index in Subps'Range loop
+             Subp_Id := Subps (Index);
+ 
+             if Present (Alias (Subp_Id)) then
+                Subp_Id := Ultimate_Alias (Subp_Id);
+             end if;
+ 
+             --  Wrappers of class-wide pre/postconditions reference the
+             --  parent primitive that has the inherited contract.
+ 
+             if Is_Wrapper (Subp_Id)
+               and then Present (LSP_Subprogram (Subp_Id))
+             then
+                Subp_Id := LSP_Subprogram (Subp_Id);
+             end if;
+ 
+             if Present (Class_Condition (Kind, Subp_Id)) then
+                return Subp_Id;
+             end if;
+          end loop;
+       end;
+ 
+       return Empty;
+    end Nearest_Class_Condition_Subprogram;
+ 
     --------------------------------
     -- Nearest_Enclosing_Instance --
     --------------------------------
*************** package body Sem_Util is
*** 22354,22360 ****
        --  types.
  
        elsif Is_Access_Type (Typ)
!         or else (Consider_IS_NS and then (Is_Scalar_Type (Typ)))
        then
           return True;
  
--- 23182,23188 ----
        --  types.
  
        elsif Is_Access_Type (Typ)
!         or else (Consider_IS_NS and then Is_Scalar_Type (Typ))
        then
           return True;
  
*************** package body Sem_Util is
*** 22607,22614 ****
              Elmt := First_Elmt (Decls);
              while Present (Elmt) loop
                 Decl  := Node (Elmt);
!                New_E := Make_Defining_Identifier (Sloc (Decl),
!                           New_Internal_Name ('P'));
  
                 if Nkind (Decl) = N_Expression_Function then
                    Decl := Specification (Decl);
--- 23435,23441 ----
              Elmt := First_Elmt (Decls);
              while Present (Elmt) loop
                 Decl  := Node (Elmt);
!                New_E := Make_Temporary (Sloc (Decl), 'P');
  
                 if Nkind (Decl) = N_Expression_Function then
                    Decl := Specification (Decl);
*************** package body Sem_Util is
*** 22727,22735 ****
        --  This routine performs low-level tree manipulations and needs access
        --  to the internals of the tree.
  
-       use Atree.Unchecked_Access;
-       use Atree_Private_Part;
- 
        EWA_Level : Nat := 0;
        --  This counter keeps track of how many N_Expression_With_Actions nodes
        --  are encountered during a depth-first traversal of the subtree. These
--- 23554,23559 ----
*************** package body Sem_Util is
*** 23271,23276 ****
--- 24095,24119 ----
        function Copy_Node_With_Replacement (N : Node_Id) return Node_Id is
           Result : Node_Id;
  
+          function Transform (U : Union_Id) return Union_Id;
+          --  Copies one field, replacing N with Result
+ 
+          ---------------
+          -- Transform --
+          ---------------
+ 
+          function Transform (U : Union_Id) return Union_Id is
+          begin
+             return Copy_Field_With_Replacement
+                      (Field   => U,
+                       Old_Par => N,
+                       New_Par => Result);
+          end Transform;
+ 
+          procedure Walk is new Walk_Sinfo_Fields_Pairwise (Transform);
+ 
+       --  Start of processing for Copy_Node_With_Replacement
+ 
        begin
           --  Assume that the node must be returned unchanged
  
*************** package body Sem_Util is
*** 23281,23315 ****
  
              Result := New_Copy (N);
  
!             Set_Field1 (Result,
!               Copy_Field_With_Replacement
!                 (Field   => Field1 (Result),
!                  Old_Par => N,
!                  New_Par => Result));
! 
!             Set_Field2 (Result,
!               Copy_Field_With_Replacement
!                 (Field   => Field2 (Result),
!                  Old_Par => N,
!                  New_Par => Result));
! 
!             Set_Field3 (Result,
!               Copy_Field_With_Replacement
!                 (Field   => Field3 (Result),
!                  Old_Par => N,
!                  New_Par => Result));
! 
!             Set_Field4 (Result,
!               Copy_Field_With_Replacement
!                 (Field   => Field4 (Result),
!                  Old_Par => N,
!                  New_Par => Result));
! 
!             Set_Field5 (Result,
!               Copy_Field_With_Replacement
!                 (Field   => Field5 (Result),
!                  Old_Par => N,
!                  New_Par => Result));
  
              --  Update the Comes_From_Source and Sloc attributes of the node
              --  in case the caller has supplied new values.
--- 24124,24130 ----
  
              Result := New_Copy (N);
  
!             Walk (Result, Result);
  
              --  Update the Comes_From_Source and Sloc attributes of the node
              --  in case the caller has supplied new values.
*************** package body Sem_Util is
*** 23342,23348 ****
              --  declaration.
  
              elsif Nkind (N) = N_Object_Renaming_Declaration then
!                Set_Renamed_Object (Defining_Entity (Result), Name (Result));
  
              --  Update the First_Real_Statement attribute of a replicated
              --  handled sequence of statements.
--- 24157,24164 ----
              --  declaration.
  
              elsif Nkind (N) = N_Object_Renaming_Declaration then
!                Set_Renamed_Object_Of_Possibly_Void
!                  (Defining_Entity (Result), Name (Result));
  
              --  Update the First_Real_Statement attribute of a replicated
              --  handled sequence of statements.
*************** package body Sem_Util is
*** 23449,23455 ****
           --  A new source location defaults the Comes_From_Source attribute
  
           if New_Sloc /= No_Location then
!             Set_Comes_From_Source (N, Default_Node.Comes_From_Source);
              Set_Sloc              (N, New_Sloc);
           end if;
        end Update_CFS_Sloc;
--- 24265,24271 ----
           --  A new source location defaults the Comes_From_Source attribute
  
           if New_Sloc /= No_Location then
!             Set_Comes_From_Source (N, Get_Comes_From_Source_Default);
              Set_Sloc              (N, New_Sloc);
           end if;
        end Update_CFS_Sloc;
*************** package body Sem_Util is
*** 24034,24040 ****
        -- Visit_Node --
        ----------------
  
!       procedure Visit_Node (N : Node_Or_Entity_Id) is
        begin
           pragma Assert (Nkind (N) not in N_Entity);
  
--- 24850,24856 ----
        -- Visit_Node --
        ----------------
  
!       procedure Visit_Node (N : Node_Id) is
        begin
           pragma Assert (Nkind (N) not in N_Entity);
  
*************** package body Sem_Util is
*** 24056,24080 ****
              EWA_Inner_Scope_Level := EWA_Inner_Scope_Level + 1;
           end if;
  
!          Visit_Field
!           (Field   => Field1 (N),
!            Par_Nod => N);
  
!          Visit_Field
!           (Field   => Field2 (N),
!            Par_Nod => N);
  
!          Visit_Field
!           (Field   => Field3 (N),
!            Par_Nod => N);
  
!          Visit_Field
!           (Field   => Field4 (N),
!            Par_Nod => N);
  
!          Visit_Field
!           (Field   => Field5 (N),
!            Par_Nod => N);
  
           if EWA_Level > 0
             and then Nkind (N) in N_Block_Statement
--- 24872,24908 ----
              EWA_Inner_Scope_Level := EWA_Inner_Scope_Level + 1;
           end if;
  
!          --  If the node is a block, we need to process all declarations
!          --  in the block and make new entities for each.
  
!          if Nkind (N) = N_Block_Statement and then Present (Declarations (N))
!          then
!             declare
!                Decl : Node_Id := First (Declarations (N));
  
!             begin
!                while Present (Decl) loop
!                   if Nkind (Decl) = N_Object_Declaration then
!                      Add_New_Entity (Defining_Identifier (Decl),
!                                      New_Copy (Defining_Identifier (Decl)));
!                   end if;
  
!                   Next (Decl);
!                end loop;
!             end;
!          end if;
  
!          declare
!             procedure Action (U : Union_Id);
!             procedure Action (U : Union_Id) is
!             begin
!                Visit_Field (Field => U, Par_Nod => N);
!             end Action;
! 
!             procedure Walk is new Walk_Sinfo_Fields (Action);
!          begin
!             Walk (N);
!          end;
  
           if EWA_Level > 0
             and then Nkind (N) in N_Block_Statement
*************** package body Sem_Util is
*** 24189,24195 ****
        --    * Semantic fields of nodes such as First_Real_Statement must be
        --      updated to reference the proper replicated nodes.
  
!       --  Finally, quantified expressions contain an implicit delaration for
        --  the bound variable. Given that quantified expressions appearing
        --  in contracts are copied to create pragmas and eventually checking
        --  procedures, a new bound variable must be created for each copy, to
--- 25017,25023 ----
        --    * Semantic fields of nodes such as First_Real_Statement must be
        --      updated to reference the proper replicated nodes.
  
!       --  Finally, quantified expressions contain an implicit declaration for
        --  the bound variable. Given that quantified expressions appearing
        --  in contracts are copied to create pragmas and eventually checking
        --  procedures, a new bound variable must be created for each copy, to
*************** package body Sem_Util is
*** 24284,24296 ****
                  (Chars (Related_Id), Suffix, Suffix_Index, Prefix));
  
     begin
!       Set_Ekind          (N, Kind);
!       Set_Is_Internal    (N, True);
!       Append_Entity      (N, Scope_Id);
!       Set_Public_Status  (N);
  
        if Kind in Type_Kind then
!          Init_Size_Align (N);
        end if;
  
        return N;
--- 25112,25124 ----
                  (Chars (Related_Id), Suffix, Suffix_Index, Prefix));
  
     begin
!       Mutate_Ekind      (N, Kind);
!       Set_Is_Internal   (N, True);
!       Append_Entity     (N, Scope_Id);
!       Set_Public_Status (N);
  
        if Kind in Type_Kind then
!          Reinit_Size_Align (N);
        end if;
  
        return N;
*************** package body Sem_Util is
*** 24309,24320 ****
        N : constant Entity_Id := Make_Temporary (Sloc_Value, Id_Char);
  
     begin
!       Set_Ekind       (N, Kind);
        Set_Is_Internal (N, True);
        Append_Entity   (N, Scope_Id);
  
        if Kind in Type_Kind then
!          Init_Size_Align (N);
        end if;
  
        return N;
--- 25137,25148 ----
        N : constant Entity_Id := Make_Temporary (Sloc_Value, Id_Char);
  
     begin
!       Mutate_Ekind    (N, Kind);
        Set_Is_Internal (N, True);
        Append_Entity   (N, Scope_Id);
  
        if Kind in Type_Kind then
!          Reinit_Size_Align (N);
        end if;
  
        return N;
*************** package body Sem_Util is
*** 24941,24947 ****
                          Domain : constant Node_Id := Name (Parent (Ent));
  
                       begin
!                         --  TBD : in the full version of the construct, the
                          --  domain of iteration can be given by an expression.
  
                          if Is_Entity_Name (Domain) then
--- 25769,25775 ----
                          Domain : constant Node_Id := Name (Parent (Ent));
  
                       begin
!                         --  ??? In the full version of the construct, the
                          --  domain of iteration can be given by an expression.
  
                          if Is_Entity_Name (Domain) then
*************** package body Sem_Util is
*** 25366,25371 ****
--- 26194,26226 ----
        end if;
     end Original_Corresponding_Operation;
  
+    -----------------------------------
+    -- Original_View_In_Visible_Part --
+    -----------------------------------
+ 
+    function Original_View_In_Visible_Part
+      (Typ : Entity_Id) return Boolean
+    is
+       Scop : constant Entity_Id := Scope (Typ);
+ 
+    begin
+       --  The scope must be a package
+ 
+       if not Is_Package_Or_Generic_Package (Scop) then
+          return False;
+       end if;
+ 
+       --  A type with a private declaration has a private view declared in
+       --  the visible part.
+ 
+       if Has_Private_Declaration (Typ) then
+          return True;
+       end if;
+ 
+       return List_Containing (Parent (Typ)) =
+         Visible_Declarations (Package_Specification (Scop));
+    end Original_View_In_Visible_Part;
+ 
     -------------------
     -- Output_Entity --
     -------------------
*************** package body Sem_Util is
*** 26008,26021 ****
           Partial_DIC_Proc := Partial_DIC_Procedure (From_Typ);
  
           --  The setting of the attributes is intentionally conservative. This
!          --  prevents accidental clobbering of enabled attributes.
  
           if Has_Inherited_DIC (From_Typ) then
!             Set_Has_Inherited_DIC (Typ);
           end if;
  
           if Has_Own_DIC (From_Typ) then
!             Set_Has_Own_DIC (Typ);
           end if;
  
           if Present (DIC_Proc) and then No (DIC_Procedure (Typ)) then
--- 26863,26878 ----
           Partial_DIC_Proc := Partial_DIC_Procedure (From_Typ);
  
           --  The setting of the attributes is intentionally conservative. This
!          --  prevents accidental clobbering of enabled attributes. We need to
!          --  call Base_Type twice, because it is sometimes not set to an actual
!          --  base type.
  
           if Has_Inherited_DIC (From_Typ) then
!             Set_Has_Inherited_DIC (Base_Type (Base_Type (Typ)));
           end if;
  
           if Has_Own_DIC (From_Typ) then
!             Set_Has_Own_DIC (Base_Type (Base_Type (Typ)));
           end if;
  
           if Present (DIC_Proc) and then No (DIC_Procedure (Typ)) then
*************** package body Sem_Util is
*** 26056,26062 ****
           Part_IP := Partial_Invariant_Procedure (From_Typ);
  
           --  The setting of the attributes is intentionally conservative. This
!          --  prevents accidental clobbering of enabled attributes.
  
           if Has_Inheritable_Invariants (From_Typ) then
              Set_Has_Inheritable_Invariants (Typ);
--- 26913,26921 ----
           Part_IP := Partial_Invariant_Procedure (From_Typ);
  
           --  The setting of the attributes is intentionally conservative. This
!          --  prevents accidental clobbering of enabled attributes. We need to
!          --  call Base_Type twice, because it is sometimes not set to an actual
!          --  base type.
  
           if Has_Inheritable_Invariants (From_Typ) then
              Set_Has_Inheritable_Invariants (Typ);
*************** package body Sem_Util is
*** 26067,26073 ****
           end if;
  
           if Has_Own_Invariants (From_Typ) then
!             Set_Has_Own_Invariants (Base_Type (Typ));
           end if;
  
           if Present (Full_IP) and then No (Invariant_Procedure (Typ)) then
--- 26926,26932 ----
           end if;
  
           if Has_Own_Invariants (From_Typ) then
!             Set_Has_Own_Invariants (Base_Type (Base_Type (Typ)));
           end if;
  
           if Present (Full_IP) and then No (Invariant_Procedure (Typ)) then
*************** package body Sem_Util is
*** 26371,26376 ****
--- 27230,27237 ----
     --  generated before the next instruction.
  
     function Requires_Transient_Scope (Id : Entity_Id) return Boolean is
+       pragma Assert (if Present (Id) then Ekind (Id) in E_Void | Type_Kind);
+ 
        function Caller_Known_Size_Record (Typ : Entity_Id) return Boolean;
        --  This is called for untagged records and protected types, with
        --  nondefaulted discriminants. Returns True if the size of function
*************** package body Sem_Util is
*** 26451,26458 ****
           --  Do not set Has_Controlled_Component on a class-wide equivalent
           --  type. See Make_CW_Equivalent_Type.
  
!          if Present (Typ)
!            and then not Is_Frozen (Typ)
             and then (Is_Record_Type (Typ)
                         or else Is_Concurrent_Type (Typ)
                         or else Is_Incomplete_Or_Private_Type (Typ))
--- 27312,27319 ----
           --  Do not set Has_Controlled_Component on a class-wide equivalent
           --  type. See Make_CW_Equivalent_Type.
  
!          if not Is_Frozen (Typ)
!            and then Is_Base_Type (Typ)
             and then (Is_Record_Type (Typ)
                         or else Is_Concurrent_Type (Typ)
                         or else Is_Incomplete_Or_Private_Type (Typ))
*************** package body Sem_Util is
*** 26568,26586 ****
     --  Start of processing for Requires_Transient_Scope
  
     begin
-       Ensure_Minimum_Decoration (Id);
- 
        --  This is a private type which is not completed yet. This can only
        --  happen in a default expression (of a formal parameter or of a
        --  record component). Do not expand transient scope in this case.
  
        if No (Typ) then
           return False;
  
        --  Do not expand transient scope for non-existent procedure return or
        --  string literal types.
  
!       elsif Typ = Standard_Void_Type
          or else Ekind (Typ) = E_String_Literal_Subtype
        then
           return False;
--- 27429,27448 ----
     --  Start of processing for Requires_Transient_Scope
  
     begin
        --  This is a private type which is not completed yet. This can only
        --  happen in a default expression (of a formal parameter or of a
        --  record component). Do not expand transient scope in this case.
  
        if No (Typ) then
           return False;
+       end if;
+ 
+       Ensure_Minimum_Decoration (Id);
  
        --  Do not expand transient scope for non-existent procedure return or
        --  string literal types.
  
!       if Typ = Standard_Void_Type
          or else Ekind (Typ) = E_String_Literal_Subtype
        then
           return False;
*************** package body Sem_Util is
*** 26721,26727 ****
     is
     begin
        --  The only entities for which we track constant values are variables
!       --  which are not renamings, constants and formal parameters, so check
        --  if we have this case.
  
        --  Note: it may seem odd to track constant values for constants, but in
--- 27583,27589 ----
     is
     begin
        --  The only entities for which we track constant values are variables
!       --  that are not renamings, constants and formal parameters, so check
        --  if we have this case.
  
        --  Note: it may seem odd to track constant values for constants, but in
*************** package body Sem_Util is
*** 26792,26798 ****
        --  or an exception handler). We skip this if Cond is True, since the
        --  capturing of values from conditional tests handles this ok.
  
!       if Cond then
           return True;
        end if;
  
--- 27654,27660 ----
        --  or an exception handler). We skip this if Cond is True, since the
        --  capturing of values from conditional tests handles this ok.
  
!       if Cond or else No (N) then
           return True;
        end if;
  
*************** package body Sem_Util is
*** 27163,27228 ****
        return False;
     end Scope_Within_Or_Same;
  
-    --------------------
-    -- Set_Convention --
-    --------------------
- 
-    procedure Set_Convention (E : Entity_Id; Val : Snames.Convention_Id) is
-    begin
-       Basic_Set_Convention (E, Val);
- 
-       if Is_Type (E)
-         and then Is_Access_Subprogram_Type (Base_Type (E))
-         and then Has_Foreign_Convention (E)
-       then
-          Set_Can_Use_Internal_Rep (E, False);
-       end if;
- 
-       --  If E is an object, including a component, and the type of E is an
-       --  anonymous access type with no convention set, then also set the
-       --  convention of the anonymous access type. We do not do this for
-       --  anonymous protected types, since protected types always have the
-       --  default convention.
- 
-       if Present (Etype (E))
-         and then (Is_Object (E)
- 
-                    --  Allow E_Void (happens for pragma Convention appearing
-                    --  in the middle of a record applying to a component)
- 
-                    or else Ekind (E) = E_Void)
-       then
-          declare
-             Typ : constant Entity_Id := Etype (E);
- 
-          begin
-             if Ekind (Typ) in E_Anonymous_Access_Type
-                             | E_Anonymous_Access_Subprogram_Type
-               and then not Has_Convention_Pragma (Typ)
-             then
-                Basic_Set_Convention (Typ, Val);
-                Set_Has_Convention_Pragma (Typ);
- 
-                --  And for the access subprogram type, deal similarly with the
-                --  designated E_Subprogram_Type, which is always internal.
- 
-                if Ekind (Typ) = E_Anonymous_Access_Subprogram_Type then
-                   declare
-                      Dtype : constant Entity_Id := Designated_Type (Typ);
-                   begin
-                      if Ekind (Dtype) = E_Subprogram_Type
-                        and then not Has_Convention_Pragma (Dtype)
-                      then
-                         Basic_Set_Convention (Dtype, Val);
-                         Set_Has_Convention_Pragma (Dtype);
-                      end if;
-                   end;
-                end if;
-             end if;
-          end;
-       end if;
-    end Set_Convention;
- 
     ------------------------
     -- Set_Current_Entity --
     ------------------------
--- 28025,28030 ----
*************** package body Sem_Util is
*** 27601,27607 ****
     begin
        --  Detect an attempt to set a different value for the same scalar type
  
!       pragma Assert (Slot = No_Uint);
        Slot := Value;
     end Set_Invalid_Scalar_Value;
  
--- 28403,28409 ----
     begin
        --  Detect an attempt to set a different value for the same scalar type
  
!       pragma Assert (No (Slot));
        Slot := Value;
     end Set_Invalid_Scalar_Value;
  
*************** package body Sem_Util is
*** 27779,27785 ****
        --  We copy Esize, but not RM_Size, since in general RM_Size is
        --  subtype specific and does not get inherited by all subtypes.
  
!       Set_Esize                     (T1, Esize                     (T2));
        Set_Has_Biased_Representation (T1, Has_Biased_Representation (T2));
  
        if Is_Discrete_Or_Fixed_Point_Type (T1)
--- 28581,28587 ----
        --  We copy Esize, but not RM_Size, since in general RM_Size is
        --  subtype specific and does not get inherited by all subtypes.
  
!       Copy_Esize (To => T1, From => T2);
        Set_Has_Biased_Representation (T1, Has_Biased_Representation (T2));
  
        if Is_Discrete_Or_Fixed_Point_Type (T1)
*************** package body Sem_Util is
*** 27789,27795 ****
           Set_Is_Unsigned_Type       (T1, Is_Unsigned_Type          (T2));
        end if;
  
!       Set_Alignment                 (T1, Alignment                 (T2));
     end Set_Size_Info;
  
     ------------------------------
--- 28591,28597 ----
           Set_Is_Unsigned_Type       (T1, Is_Unsigned_Type          (T2));
        end if;
  
!       Copy_Alignment (To => T1, From => T2);
     end Set_Size_Info;
  
     ------------------------------
*************** package body Sem_Util is
*** 27828,27834 ****
     -- Static_Boolean --
     --------------------
  
!    function Static_Boolean (N : Node_Id) return Uint is
     begin
        Analyze_And_Resolve (N, Standard_Boolean);
  
--- 28630,28636 ----
     -- Static_Boolean --
     --------------------
  
!    function Static_Boolean (N : Node_Id) return Opt_Ubool is
     begin
        Analyze_And_Resolve (N, Standard_Boolean);
  
*************** package body Sem_Util is
*** 28040,28046 ****
                    Source_Text (Get_Source_File_Index (Loc));
        Src_Ptr : Source_Ptr := Loc;
  
!       C : Character  := Sbuffer (Src_Ptr);
        --  Current source program character
  
        function Belongs_To_Numeric_Literal (C : Character) return Boolean;
--- 28842,28848 ----
                    Source_Text (Get_Source_File_Index (Loc));
        Src_Ptr : Source_Ptr := Loc;
  
!       C : Character := Sbuffer (Src_Ptr);
        --  Current source program character
  
        function Belongs_To_Numeric_Literal (C : Character) return Boolean;
*************** package body Sem_Util is
*** 28053,28061 ****
        function Belongs_To_Numeric_Literal (C : Character) return Boolean is
        begin
           case C is
!             when '0' .. '9'
!                | '_' | '.' | 'e' | '#' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F'
!             =>
                 return True;
  
              --  Make sure '+' or '-' is part of an exponent
--- 28855,28861 ----
        function Belongs_To_Numeric_Literal (C : Character) return Boolean is
        begin
           case C is
!             when '0' .. '9' | '_' | '.' | 'e' | '#' | 'A' .. 'F' =>
                 return True;
  
              --  Make sure '+' or '-' is part of an exponent
*************** package body Sem_Util is
*** 28064,28070 ****
                 declare
                    Prev_C : constant Character := Sbuffer (Src_Ptr - 1);
                 begin
!                   return Prev_C = 'e' or else Prev_C = 'E';
                 end;
  
              --  Other characters cannot belong to a numeric literal
--- 28864,28870 ----
                 declare
                    Prev_C : constant Character := Sbuffer (Src_Ptr - 1);
                 begin
!                   return Prev_C in 'e' | 'E';
                 end;
  
              --  Other characters cannot belong to a numeric literal
*************** package body Sem_Util is
*** 28587,28598 ****
     -- Type_Access_Level --
     -----------------------
  
!    function Type_Access_Level (Typ : Entity_Id) return Uint is
!       Btyp : Entity_Id;
  
     begin
-       Btyp := Base_Type (Typ);
- 
        --  Ada 2005 (AI-230): For most cases of anonymous access types, we
        --  simply use the level where the type is declared. This is true for
        --  stand-alone object declarations, and for anonymous access types
--- 29387,29401 ----
     -- Type_Access_Level --
     -----------------------
  
!    function Type_Access_Level
!      (Typ             : Entity_Id;
!       Allow_Alt_Model : Boolean   := True;
!       Assoc_Ent       : Entity_Id := Empty) return Uint
!    is
!       Btyp    : Entity_Id := Base_Type (Typ);
!       Def_Ent : Entity_Id;
  
     begin
        --  Ada 2005 (AI-230): For most cases of anonymous access types, we
        --  simply use the level where the type is declared. This is true for
        --  stand-alone object declarations, and for anonymous access types
*************** package body Sem_Util is
*** 28603,28615 ****
  
        if Is_Access_Type (Btyp) then
           if Ekind (Btyp) = E_Anonymous_Access_Type then
  
              --  If the type is a nonlocal anonymous access type (such as for
              --  an access parameter) we treat it as being declared at the
              --  library level to ensure that names such as X.all'access don't
              --  fail static accessibility checks.
  
!             if not Is_Local_Anonymous_Access (Typ) then
                 return Scope_Depth (Standard_Standard);
  
              --  If this is a return object, the accessibility level is that of
--- 29406,29479 ----
  
        if Is_Access_Type (Btyp) then
           if Ekind (Btyp) = E_Anonymous_Access_Type then
+             --  No_Dynamic_Accessibility_Checks restriction override for
+             --  alternative accessibility model.
+ 
+             if Allow_Alt_Model
+               and then No_Dynamic_Accessibility_Checks_Enabled (Btyp)
+             then
+                --  In the -gnatd_b model, the level of an anonymous access
+                --  type is always that of the designated type.
+ 
+                if Debug_Flag_Underscore_B then
+                   return Type_Access_Level
+                            (Designated_Type (Btyp), Allow_Alt_Model);
+                end if;
+ 
+                --  When an anonymous access type's Assoc_Ent is specified,
+                --  calculate the result based on the general accessibility
+                --  level routine.
+ 
+                --  We would like to use Associated_Node_For_Itype here instead,
+                --  but in some cases it is not fine grained enough ???
+ 
+                if Present (Assoc_Ent) then
+                   return Static_Accessibility_Level
+                            (Assoc_Ent, Object_Decl_Level);
+                end if;
+ 
+                --  Otherwise take the context of the anonymous access type into
+                --  account.
+ 
+                --  Obtain the defining entity for the internally generated
+                --  anonymous access type.
+ 
+                Def_Ent := Defining_Entity_Or_Empty
+                             (Associated_Node_For_Itype (Typ));
+ 
+                if Present (Def_Ent) then
+                   --  When the defining entity is a subprogram then we know the
+                   --  anonymous access type Typ has been generated to either
+                   --  describe an anonymous access type formal or an anonymous
+                   --  access result type.
+ 
+                   --  Since we are only interested in the formal case, avoid
+                   --  the anonymous access result type.
+ 
+                   if Is_Subprogram (Def_Ent)
+                     and then not (Ekind (Def_Ent) = E_Function
+                                    and then Etype (Def_Ent) = Typ)
+                   then
+                      --  When the type comes from an anonymous access
+                      --  parameter, the level is that of the subprogram
+                      --  declaration.
+ 
+                      return Scope_Depth (Def_Ent);
+ 
+                   --  When the type is an access discriminant, the level is
+                   --  that of the type.
+ 
+                   elsif Ekind (Def_Ent) = E_Discriminant then
+                      return Scope_Depth (Scope (Def_Ent));
+                   end if;
+                end if;
  
              --  If the type is a nonlocal anonymous access type (such as for
              --  an access parameter) we treat it as being declared at the
              --  library level to ensure that names such as X.all'access don't
              --  fail static accessibility checks.
  
!             elsif not Is_Local_Anonymous_Access (Typ) then
                 return Scope_Depth (Standard_Standard);
  
              --  If this is a return object, the accessibility level is that of
*************** package body Sem_Util is
*** 28643,28649 ****
                    --  Treat the return object's type as having the level of the
                    --  function's result subtype (as per RM05-6.5(5.3/2)).
  
!                   return Type_Access_Level (Etype (Scop));
                 end;
              end if;
           end if;
--- 29507,29513 ----
                    --  Treat the return object's type as having the level of the
                    --  function's result subtype (as per RM05-6.5(5.3/2)).
  
!                   return Type_Access_Level (Etype (Scop), Allow_Alt_Model);
                 end;
              end if;
           end if;
*************** package body Sem_Util is
*** 28754,28759 ****
--- 29618,29656 ----
        end if;
     end Type_Without_Stream_Operation;
  
+    ------------------------------
+    -- Ultimate_Overlaid_Entity --
+    ------------------------------
+ 
+    function Ultimate_Overlaid_Entity (E : Entity_Id) return Entity_Id is
+       Address : Node_Id;
+       Alias   : Entity_Id := E;
+       Offset  : Boolean;
+ 
+    begin
+       --  Currently this routine is only called for stand-alone objects that
+       --  have been analysed, since the analysis of the Address aspect is often
+       --  delayed.
+ 
+       pragma Assert (Ekind (E) in E_Constant | E_Variable);
+ 
+       loop
+          Address := Address_Clause (Alias);
+          if Present (Address) then
+             Find_Overlaid_Entity (Address, Alias, Offset);
+             if Present (Alias) then
+                null;
+             else
+                return Empty;
+             end if;
+          elsif Alias = E then
+             return Empty;
+          else
+             return Alias;
+          end if;
+       end loop;
+    end Ultimate_Overlaid_Entity;
+ 
     ---------------------
     -- Ultimate_Prefix --
     ---------------------
*************** package body Sem_Util is
*** 29186,29194 ****
        if Nkind (Opnd) = N_Defining_Identifier
          or else not Is_Overloaded (Opnd)
        then
!          if Etype (Opnd) = Universal_Integer
!            or else Etype (Opnd) = Universal_Real
!          then
              return Etype (Opnd);
           else
              return Empty;
--- 30083,30089 ----
        if Nkind (Opnd) = N_Defining_Identifier
          or else not Is_Overloaded (Opnd)
        then
!          if Is_Universal_Numeric_Type (Etype (Opnd)) then
              return Etype (Opnd);
           else
              return Empty;
*************** package body Sem_Util is
*** 29197,29205 ****
        else
           Get_First_Interp (Opnd, Index, It);
           while Present (It.Typ) loop
!             if It.Typ = Universal_Integer
!               or else It.Typ = Universal_Real
!             then
                 return It.Typ;
              end if;
  
--- 30092,30098 ----
        else
           Get_First_Interp (Opnd, Index, It);
           while Present (It.Typ) loop
!             if Is_Universal_Numeric_Type (It.Typ) then
                 return It.Typ;
              end if;
  
*************** package body Sem_Util is
*** 29255,29296 ****
     --------------------
  
     function Validated_View (Typ : Entity_Id) return Entity_Id is
-       Continue : Boolean;
-       Val_Typ  : Entity_Id;
- 
     begin
!       Continue := True;
!       Val_Typ  := Base_Type (Typ);
  
        --  Obtain the full view of the input type by stripping away concurrency,
        --  derivations, and privacy.
  
!       while Continue loop
!          Continue := False;
! 
!          if Is_Concurrent_Type (Val_Typ) then
!             if Present (Corresponding_Record_Type (Val_Typ)) then
!                Continue := True;
!                Val_Typ  := Corresponding_Record_Type (Val_Typ);
!             end if;
  
!          elsif Is_Derived_Type (Val_Typ) then
!             Continue := True;
!             Val_Typ  := Etype (Val_Typ);
  
!          elsif Is_Private_Type (Val_Typ) then
!             if Present (Underlying_Full_View (Val_Typ)) then
!                Continue := True;
!                Val_Typ  := Underlying_Full_View (Val_Typ);
  
!             elsif Present (Full_View (Val_Typ)) then
!                Continue := True;
!                Val_Typ  := Full_View (Val_Typ);
!             end if;
           end if;
-       end loop;
  
!       return Val_Typ;
     end Validated_View;
  
     -----------------------
--- 30148,30202 ----
     --------------------
  
     function Validated_View (Typ : Entity_Id) return Entity_Id is
     begin
!       --  Scalar types can be always validated. In fast, switiching to the base
!       --  type would drop the range constraints and force validation to use a
!       --  larger type than necessary.
! 
!       if Is_Scalar_Type (Typ) then
!          return Typ;
! 
!       --  Array types can be validated even when they are derived, because
!       --  validation only requires their bounds and component types to be
!       --  accessible. In fact, switching to the parent type would pollute
!       --  expansion of attribute Valid_Scalars with unnecessary conversion
!       --  that might not be eliminated by the frontend.
! 
!       elsif Is_Array_Type (Typ) then
!          return Typ;
! 
!       --  For other types, in particular for record subtypes, we switch to the
!       --  base type.
! 
!       elsif not Is_Base_Type (Typ) then
!          return Validated_View (Base_Type (Typ));
  
        --  Obtain the full view of the input type by stripping away concurrency,
        --  derivations, and privacy.
  
!       elsif Is_Concurrent_Type (Typ) then
!          if Present (Corresponding_Record_Type (Typ)) then
!             return Corresponding_Record_Type (Typ);
!          else
!             return Typ;
!          end if;
  
!       elsif Is_Derived_Type (Typ) then
!          return Validated_View (Etype (Typ));
  
!       elsif Is_Private_Type (Typ) then
!          if Present (Underlying_Full_View (Typ)) then
!             return Validated_View (Underlying_Full_View (Typ));
  
!          elsif Present (Full_View (Typ)) then
!             return Validated_View (Full_View (Typ));
!          else
!             return Typ;
           end if;
  
!       else
!          return Typ;
!       end if;
     end Validated_View;
  
     -----------------------
*************** package body Sem_Util is
*** 29381,29416 ****
        return Scope_Within_Or_Same (Scope (E), S);
     end Within_Scope;
  
-    ----------------------------
-    -- Within_Subprogram_Call --
-    ----------------------------
- 
-    function Within_Subprogram_Call (N : Node_Id) return Boolean is
-       Par : Node_Id;
- 
-    begin
-       --  Climb the parent chain looking for a function or procedure call
- 
-       Par := N;
-       while Present (Par) loop
-          if Nkind (Par) in N_Entry_Call_Statement
-                          | N_Function_Call
-                          | N_Procedure_Call_Statement
-          then
-             return True;
- 
-          --  Prevent the search from going too far
- 
-          elsif Is_Body_Or_Package_Declaration (Par) then
-             exit;
-          end if;
- 
-          Par := Parent (Par);
-       end loop;
- 
-       return False;
-    end Within_Subprogram_Call;
- 
     ----------------
     -- Wrong_Type --
     ----------------
--- 30287,30292 ----
*************** package body Sem_Util is
*** 29939,29945 ****
  
        procedure Normalize_Interval_List
           (List : in out Discrete_Interval_List; Last : out Nat);
!       --  Perform sorting and merging as required by Check_Consistency.
  
        -------------------------
        -- Aggregate_Intervals --
--- 30815,30821 ----
  
        procedure Normalize_Interval_List
           (List : in out Discrete_Interval_List; Last : out Nat);
!       --  Perform sorting and merging as required by Check_Consistency
  
        -------------------------
        -- Aggregate_Intervals --
*************** package body Sem_Util is
*** 29954,29959 ****
--- 30830,30839 ----
           --  Count the number of intervals given in the aggregate N; the others
           --  choice (if present) is not taken into account.
  
+          ------------------------------
+          -- Unmerged_Intervals_Count --
+          ------------------------------
+ 
           function Unmerged_Intervals_Count return Nat is
              Count  : Nat := 0;
              Choice : Node_Id;
*************** package body Sem_Util is
*** 30054,30060 ****
          (Discrete_Choices : List_Id) return Discrete_Interval_List
        is
           function Unmerged_Choice_Count return Nat;
!          --  The number of intervals before adjacent intervals are merged.
  
           ---------------------------
           -- Unmerged_Choice_Count --
--- 30934,30940 ----
          (Discrete_Choices : List_Id) return Discrete_Interval_List
        is
           function Unmerged_Choice_Count return Nat;
!          --  The number of intervals before adjacent intervals are merged
  
           ---------------------------
           -- Unmerged_Choice_Count --
*************** package body Sem_Util is
*** 30732,30739 ****
                 --  type case correctly, so we avoid that problem by
                 --  returning True here.
                 return True;
!             elsif Ada_Version < Ada_2020 then
                 return False;
              elsif not Is_Conditionally_Evaluated (Expr) then
                 return False;
              else
--- 31612,31627 ----
                 --  type case correctly, so we avoid that problem by
                 --  returning True here.
                 return True;
! 
!             elsif Ada_Version < Ada_2022 then
                 return False;
+ 
+             elsif Inside_Class_Condition_Preanalysis then
+                --  No need to evaluate it during preanalysis of a class-wide
+                --  pre/postcondition since the expression is not installed yet
+                --  on its definite context.
+                return False;
+ 
              elsif not Is_Conditionally_Evaluated (Expr) then
                 return False;
              else
*************** package body Sem_Util is
*** 30790,30796 ****
                    --    quantified_expression.
  
                    if Nkind (Par) = N_Quantified_Expression
!                      and then Trailer = Condition (Par)
                    then
                       return True;
                    end if;
--- 31678,31689 ----
                    --    quantified_expression.
  
                    if Nkind (Par) = N_Quantified_Expression
!                     and then Trailer = Condition (Par)
!                   then
!                      return True;
!                   elsif Nkind (Par) = N_Expression_With_Actions
!                     and then
!                       Nkind (Original_Node (Par)) = N_Quantified_Expression
                    then
                       return True;
                    end if;
*************** package body Sem_Util is
*** 31143,31151 ****
                        (Loc, Access_Type_Id,
                         Type_Definition => Access_Type_Def);
              begin
!                Set_Ekind (Temp_Id, E_Variable);
                 Set_Etype (Temp_Id, Access_Type_Id);
!                Set_Ekind (Access_Type_Id, E_Access_Type);
  
                 if Append_Decls_In_Reverse_Order then
                    Append_Item (Temp_Decl, Is_Eval_Stmt => False);
--- 32036,32044 ----
                        (Loc, Access_Type_Id,
                         Type_Definition => Access_Type_Def);
              begin
!                Mutate_Ekind (Temp_Id, E_Variable);
                 Set_Etype (Temp_Id, Access_Type_Id);
!                Mutate_Ekind (Access_Type_Id, E_Access_Type);
  
                 if Append_Decls_In_Reverse_Order then
                    Append_Item (Temp_Decl, Is_Eval_Stmt => False);
*************** package body Sem_Util is
*** 31316,31326 ****
--- 32209,32380 ----
                    end if;
                 end;
              end if;
+ 
              return False;
           end Is_Access_Type_For_Indirect_Temp;
  
        end Indirect_Temps;
     end Old_Attr_Util;
+ 
+    package body Storage_Model_Support is
+ 
+       -----------------------------------
+       -- Get_Storage_Model_Type_Entity --
+       -----------------------------------
+ 
+       function Get_Storage_Model_Type_Entity
+         (Typ : Entity_Id;
+          Nam : Name_Id) return Entity_Id
+       is
+          pragma Assert
+            (Is_Type (Typ)
+             and then
+               Nam in Name_Address_Type
+                    | Name_Null_Address
+                    | Name_Allocate
+                    | Name_Deallocate
+                    | Name_Copy_From
+                    | Name_Copy_To
+                    | Name_Storage_Size);
+ 
+          SMT_Aspect_Value : constant Node_Id :=
+            Find_Value_Of_Aspect (Typ, Aspect_Storage_Model_Type);
+          Assoc            : Node_Id;
+ 
+       begin
+          if No (SMT_Aspect_Value) then
+             return Empty;
+ 
+          else
+             Assoc := First (Component_Associations (SMT_Aspect_Value));
+             while Present (Assoc) loop
+                if Chars (First (Choices (Assoc))) = Nam then
+                   return Entity (Expression (Assoc));
+                end if;
+ 
+                Next (Assoc);
+             end loop;
+ 
+             return Empty;
+          end if;
+       end Get_Storage_Model_Type_Entity;
+ 
+       -----------------------------------------
+       -- Has_Designated_Storage_Model_Aspect --
+       -----------------------------------------
+ 
+       function Has_Designated_Storage_Model_Aspect
+         (Typ : Entity_Id) return Boolean
+       is
+       begin
+          return Present (Find_Aspect (Typ, Aspect_Designated_Storage_Model));
+       end Has_Designated_Storage_Model_Aspect;
+ 
+       -----------------------------------
+       -- Has_Storage_Model_Type_Aspect --
+       -----------------------------------
+ 
+       function Has_Storage_Model_Type_Aspect (Typ : Entity_Id) return Boolean
+       is
+       begin
+          return Present (Find_Aspect (Typ, Aspect_Storage_Model_Type));
+       end Has_Storage_Model_Type_Aspect;
+ 
+       --------------------------
+       -- Storage_Model_Object --
+       --------------------------
+ 
+       function Storage_Model_Object (Typ : Entity_Id) return Entity_Id is
+       begin
+          if Has_Designated_Storage_Model_Aspect (Typ) then
+             return
+               Entity
+                 (Find_Value_Of_Aspect (Typ, Aspect_Designated_Storage_Model));
+          else
+             return Empty;
+          end if;
+       end Storage_Model_Object;
+ 
+       ------------------------
+       -- Storage_Model_Type --
+       ------------------------
+ 
+       function Storage_Model_Type (Obj : Entity_Id) return Entity_Id is
+       begin
+          if Present
+               (Find_Value_Of_Aspect (Etype (Obj), Aspect_Storage_Model_Type))
+          then
+             return Etype (Obj);
+          else
+             return Empty;
+          end if;
+       end Storage_Model_Type;
+ 
+       --------------------------------
+       -- Storage_Model_Address_Type --
+       --------------------------------
+ 
+       function Storage_Model_Address_Type (Typ : Entity_Id) return Entity_Id is
+       begin
+          return Get_Storage_Model_Type_Entity (Typ, Name_Address_Type);
+       end Storage_Model_Address_Type;
+ 
+       --------------------------------
+       -- Storage_Model_Null_Address --
+       --------------------------------
+ 
+       function Storage_Model_Null_Address (Typ : Entity_Id) return Entity_Id is
+       begin
+          return Get_Storage_Model_Type_Entity (Typ, Name_Null_Address);
+       end Storage_Model_Null_Address;
+ 
+       ----------------------------
+       -- Storage_Model_Allocate --
+       ----------------------------
+ 
+       function Storage_Model_Allocate (Typ : Entity_Id) return Entity_Id is
+       begin
+          return Get_Storage_Model_Type_Entity (Typ, Name_Allocate);
+       end Storage_Model_Allocate;
+ 
+       ------------------------------
+       -- Storage_Model_Deallocate --
+       ------------------------------
+ 
+       function Storage_Model_Deallocate (Typ : Entity_Id) return Entity_Id is
+       begin
+          return Get_Storage_Model_Type_Entity (Typ, Name_Deallocate);
+       end Storage_Model_Deallocate;
+ 
+       -----------------------------
+       -- Storage_Model_Copy_From --
+       -----------------------------
+ 
+       function Storage_Model_Copy_From (Typ : Entity_Id) return Entity_Id is
+       begin
+          return Get_Storage_Model_Type_Entity (Typ, Name_Copy_From);
+       end Storage_Model_Copy_From;
+ 
+       ---------------------------
+       -- Storage_Model_Copy_To --
+       ---------------------------
+ 
+       function Storage_Model_Copy_To (Typ : Entity_Id) return Entity_Id is
+       begin
+          return Get_Storage_Model_Type_Entity (Typ, Name_Copy_To);
+       end Storage_Model_Copy_To;
+ 
+       --------------------------------
+       -- Storage_Model_Storage_Size --
+       --------------------------------
+ 
+       function Storage_Model_Storage_Size (Typ : Entity_Id) return Entity_Id is
+       begin
+          return Get_Storage_Model_Type_Entity (Typ, Name_Storage_Size);
+       end Storage_Model_Storage_Size;
+ 
+    end Storage_Model_Support;
+ 
  begin
     Erroutc.Subprogram_Name_Ptr := Subprogram_Name'Access;
  end Sem_Util;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_util.ads gcc-12.1.0/gcc/ada/sem_util.ads
*** gcc-11.3.0/gcc/ada/sem_util.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_util.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 25,40 ****
  
  --  Package containing utility procedures used throughout the semantics
  
! with Aspects; use Aspects;
! with Atree;   use Atree;
! with Einfo;   use Einfo;
! with Exp_Tss; use Exp_Tss;
! with Namet;   use Namet;
! with Opt;     use Opt;
! with Snames;  use Snames;
! with Types;   use Types;
! with Uintp;   use Uintp;
! with Urealp;  use Urealp;
  
  package Sem_Util is
  
--- 25,41 ----
  
  --  Package containing utility procedures used throughout the semantics
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Exp_Tss;        use Exp_Tss;
! with Namet;          use Namet;
! with Opt;            use Opt;
! with Snames;         use Snames;
! with Types;          use Types;
! with Uintp;          use Uintp;
! with Urealp;         use Urealp;
  
  package Sem_Util is
  
*************** package Sem_Util is
*** 64,78 ****
     function Accessibility_Level
       (Expr              : Node_Id;
        Level             : Accessibility_Level_Kind;
!       In_Return_Context : Boolean := False) return Node_Id;
     --  Centralized accessibility level calculation routine for finding the
     --  accessibility level of a given expression Expr.
  
!    --  In_Return_Context forcing the Accessibility_Level calculations to be
     --  carried out "as if" Expr existed in a return value. This is useful for
     --  calculating the accessibility levels for discriminant associations
     --  and return aggregates.
  
     function Acquire_Warning_Match_String (Str_Lit : Node_Id) return String;
     --  Used by pragma Warnings (Off, string), and Warn_As_Error (string) to get
     --  the given string argument, adding leading and trailing asterisks if they
--- 65,83 ----
     function Accessibility_Level
       (Expr              : Node_Id;
        Level             : Accessibility_Level_Kind;
!       In_Return_Context : Boolean := False;
!       Allow_Alt_Model   : Boolean := True) return Node_Id;
     --  Centralized accessibility level calculation routine for finding the
     --  accessibility level of a given expression Expr.
  
!    --  In_Return_Context forces the Accessibility_Level calculations to be
     --  carried out "as if" Expr existed in a return value. This is useful for
     --  calculating the accessibility levels for discriminant associations
     --  and return aggregates.
  
+    --  The Allow_Alt_Model parameter allows the alternative level calculation
+    --  under the restriction No_Dynamic_Accessibility_Checks to be performed.
+ 
     function Acquire_Warning_Match_String (Str_Lit : Node_Id) return String;
     --  Used by pragma Warnings (Off, string), and Warn_As_Error (string) to get
     --  the given string argument, adding leading and trailing asterisks if they
*************** package Sem_Util is
*** 156,169 ****
     --  part of the current package.
  
     procedure Apply_Compile_Time_Constraint_Error
!      (N      : Node_Id;
!       Msg    : String;
!       Reason : RT_Exception_Code;
!       Ent    : Entity_Id  := Empty;
!       Typ    : Entity_Id  := Empty;
!       Loc    : Source_Ptr := No_Location;
!       Rep    : Boolean    := True;
!       Warn   : Boolean    := False);
     --  N is a subexpression that will raise Constraint_Error when evaluated
     --  at run time. Msg is a message that explains the reason for raising the
     --  exception. The last character is ? if the message is always a warning,
--- 161,174 ----
     --  part of the current package.
  
     procedure Apply_Compile_Time_Constraint_Error
!      (N            : Node_Id;
!       Msg          : String;
!       Reason       : RT_Exception_Code;
!       Ent          : Entity_Id  := Empty;
!       Typ          : Entity_Id  := Empty;
!       Loc          : Source_Ptr := No_Location;
!       Warn         : Boolean    := False;
!       Emit_Message : Boolean    := True);
     --  N is a subexpression that will raise Constraint_Error when evaluated
     --  at run time. Msg is a message that explains the reason for raising the
     --  exception. The last character is ? if the message is always a warning,
*************** package Sem_Util is
*** 171,191 ****
     --  (because of violation of static expression rules) in Ada 95 (but not
     --  in Ada 83). Typically this routine posts all messages at the Sloc of
     --  node N. However, if Loc /= No_Location, Loc is the Sloc used to output
!    --  the message. After posting the appropriate message, and if the flag
!    --  Rep is set, this routine replaces the expression with an appropriate
!    --  N_Raise_Constraint_Error node using the given Reason code. This node
!    --  is then marked as being static if the original node is static, but
!    --  sets the flag Raises_Constraint_Error, preventing further evaluation.
!    --  The error message may contain a } or & insertion character. This
!    --  normally references Etype (N), unless the Ent argument is given
!    --  explicitly, in which case it is used instead. The type of the raise
!    --  node that is built is normally Etype (N), but if the Typ parameter
!    --  is present, this is used instead. Warn is normally False. If it is
!    --  True then the message is treated as a warning even though it does
!    --  not end with a ? (this is used when the caller wants to parameterize
!    --  whether an error or warning is given), or when the message should be
!    --  treated as a warning even when SPARK_Mode is On (which otherwise would
!    --  force an error).
  
     function Async_Readers_Enabled (Id : Entity_Id) return Boolean;
     --  Id should be the entity of a state abstraction, an object, or a type.
--- 176,196 ----
     --  (because of violation of static expression rules) in Ada 95 (but not
     --  in Ada 83). Typically this routine posts all messages at the Sloc of
     --  node N. However, if Loc /= No_Location, Loc is the Sloc used to output
!    --  the message. After posting the appropriate message, this routine
!    --  replaces the expression with an appropriate N_Raise_Constraint_Error
!    --  node using the given Reason code. This node is then marked as being
!    --  static if the original node is static, but sets the flag
!    --  Raises_Constraint_Error, preventing further evaluation. The error
!    --  message may contain a } or & insertion character. This normally
!    --  references Etype (N), unless the Ent argument is given explicitly, in
!    --  which case it is used instead. The type of the raise node that is built
!    --  is normally Etype (N), but if the Typ parameter is present, this is used
!    --  instead. Warn is normally False. If it is True then the message is
!    --  treated as a warning even though it does not end with a ? (this is used
!    --  when the caller wants to parameterize whether an error or warning is
!    --  given), or when the message should be treated as a warning even when
!    --  SPARK_Mode is On (which otherwise would force an error).
!    --  If Emit_Message is False, then do not emit any message.
  
     function Async_Readers_Enabled (Id : Entity_Id) return Boolean;
     --  Id should be the entity of a state abstraction, an object, or a type.
*************** package Sem_Util is
*** 204,209 ****
--- 209,222 ----
     --  are open, and the scope of the array is not outside the scope of the
     --  component.
  
+    procedure Bad_Aspect
+      (N    : Node_Id;
+       Nam  : Name_Id;
+       Warn : Boolean := False);
+    --  Called when node N is expected to contain a valid aspect name, and
+    --  Nam is found instead. If Warn is set True this is a warning, else this
+    --  is an error.
+ 
     procedure Bad_Attribute
       (N    : Node_Id;
        Nam  : Name_Id;
*************** package Sem_Util is
*** 278,307 ****
     --  take care of constructing declaration and body of the clone, and
     --  building the calls to it within the appropriate wrappers.
  
-    procedure Build_Class_Wide_Clone_Body
-      (Spec_Id  : Entity_Id;
-       Bod      : Node_Id);
-    --  Build body of subprogram that has a class-wide condition that contains
-    --  calls to other primitives. Spec_Id is the Id of the subprogram, and B
-    --  is its source body, which becomes the body of the clone.
- 
-    function Build_Class_Wide_Clone_Call
-     (Loc      : Source_Ptr;
-      Decls    : List_Id;
-      Spec_Id  : Entity_Id;
-      Spec     : Node_Id) return Node_Id;
-    --  Build a call to the common class-wide clone of a subprogram with
-    --  class-wide conditions. The body of the subprogram becomes a wrapper
-    --  for a call to the clone. The inherited operation becomes a similar
-    --  wrapper to which modified conditions apply, and the call to the
-    --  clone includes the proper conversion in a call the parent operation.
- 
-    procedure Build_Class_Wide_Clone_Decl (Spec_Id : Entity_Id);
-    --  For a subprogram that has a class-wide condition that contains calls
-    --  to other primitives, build an internal subprogram that is invoked
-    --  through a type-specific wrapper for all inherited subprograms that
-    --  may have a modified condition.
- 
     procedure Build_Constrained_Itype
       (N              : Node_Id;
        Typ            : Entity_Id;
--- 291,296 ----
*************** package Sem_Util is
*** 351,357 ****
     --  carries the name of the reference discriminant.
  
     function Build_Overriding_Spec
!      (Op  : Node_Id;
        Typ : Entity_Id) return Node_Id;
     --  Build a subprogram specification for the wrapper of an inherited
     --  operation with a modified pre- or postcondition (See AI12-0113).
--- 340,346 ----
     --  carries the name of the reference discriminant.
  
     function Build_Overriding_Spec
!      (Op  : Entity_Id;
        Typ : Entity_Id) return Node_Id;
     --  Build a subprogram specification for the wrapper of an inherited
     --  operation with a modified pre- or postcondition (See AI12-0113).
*************** package Sem_Util is
*** 381,389 ****
     --  means that for sure CE cannot be raised.
  
     procedure Check_Ambiguous_Aggregate (Call : Node_Id);
!    --  Additional information on an ambiguous call in Ada_2020 when a
     --  subprogram call has an actual that is an aggregate, and the
!    --  presence of container aggregates (or types with the correwponding
     --  aspect)  provides an additional interpretation. Message indicates
     --  that an aggregate actual should carry a type qualification.
  
--- 370,378 ----
     --  means that for sure CE cannot be raised.
  
     procedure Check_Ambiguous_Aggregate (Call : Node_Id);
!    --  Additional information on an ambiguous call in Ada_2022 when a
     --  subprogram call has an actual that is an aggregate, and the
!    --  presence of container aggregates (or types with the corresponding
     --  aspect)  provides an additional interpretation. Message indicates
     --  that an aggregate actual should carry a type qualification.
  
*************** package Sem_Util is
*** 459,464 ****
--- 448,457 ----
     --  Verify that the profile of nonvolatile function Func_Id does not contain
     --  effectively volatile parameters or return type for reading.
  
+    function Check_Parents (N : Node_Id; List : Elist_Id) return Boolean;
+    --  Return True if all the occurrences of subtree N referencing entities in
+    --  the given List have the right value in their Parent field.
+ 
     procedure Check_Part_Of_Reference (Var_Id : Entity_Id; Ref : Node_Id);
     --  Verify the legality of reference Ref to variable Var_Id when the
     --  variable is a constituent of a single protected/task type.
*************** package Sem_Util is
*** 522,527 ****
--- 515,532 ----
     --  reasons these nodes have a different structure even though they play
     --  similar roles in array aggregates.
  
+    type Condition_Kind is
+      (Ignored_Class_Precondition,
+       Ignored_Class_Postcondition,
+       Class_Precondition,
+       Class_Postcondition);
+    --  Kind of class-wide conditions
+ 
+    function Class_Condition
+      (Kind : Condition_Kind;
+       Subp : Entity_Id) return Node_Id;
+    --  Class-wide Kind condition of Subp
+ 
     function Collect_Body_States (Body_Id : Entity_Id) return Elist_Id;
     --  Gather the entities of all abstract states and objects declared in the
     --  body state space of package body Body_Id.
*************** package Sem_Util is
*** 583,588 ****
--- 588,608 ----
     --  emitted immediately after the main message (and before output of any
     --  message indicating that Constraint_Error will be raised).
  
+    procedure Compute_Returns_By_Ref (Func : Entity_Id);
+    --  Set the Returns_By_Ref flag on Func if appropriate
+ 
+    generic
+       with function Predicate (Typ : Entity_Id) return Boolean;
+    function Collect_Types_In_Hierarchy
+      (Typ                : Entity_Id;
+       Examine_Components : Boolean := False) return Elist_Id;
+    --  Inspect the ancestor and progenitor types of Typ and Typ itself -
+    --  collecting those for which function Predicate is True. The resulting
+    --  list is ordered in a type-to-ultimate-ancestor fashion.
+ 
+    --  When Examine_Components is True, components types in the hierarchy also
+    --  get collected.
+ 
     procedure Conditional_Delay (New_Ent, Old_Ent : Entity_Id);
     --  Sets the Has_Delayed_Freeze flag of New_Ent if the Delayed_Freeze flag
     --  of Old_Ent is set and Old_Ent has not yet been Frozen (i.e. Is_Frozen is
*************** package Sem_Util is
*** 607,616 ****
     --  aspect specifications. If From has no aspects, the routine has no
     --  effect.
  
!    function Copy_Subprogram_Spec (Spec : Node_Id) return Node_Id;
     --  Replicate a function or a procedure specification denoted by Spec. The
     --  resulting tree is an exact duplicate of the original tree. New entities
!    --  are created for the unit name and the formal parameters.
  
     function Corresponding_Generic_Type (T : Entity_Id) return Entity_Id;
     --  If a type is a generic actual type, return the corresponding formal in
--- 627,639 ----
     --  aspect specifications. If From has no aspects, the routine has no
     --  effect.
  
!    function Copy_Subprogram_Spec
!      (Spec     : Node_Id;
!       New_Sloc : Source_Ptr := No_Location) return Node_Id;
     --  Replicate a function or a procedure specification denoted by Spec. The
     --  resulting tree is an exact duplicate of the original tree. New entities
!    --  are created for the unit name and the formal parameters. For definition
!    --  of New_Sloc, see the comment for New_Copy_Tree.
  
     function Corresponding_Generic_Type (T : Entity_Id) return Entity_Id;
     --  If a type is a generic actual type, return the corresponding formal in
*************** package Sem_Util is
*** 618,623 ****
--- 641,653 ----
     --  attribute, except in the case of formal private and derived types.
     --  Possible optimization???
  
+    function Corresponding_Primitive_Op
+        (Ancestor_Op     : Entity_Id;
+         Descendant_Type : Entity_Id) return Entity_Id;
+    --  Given a primitive subprogram of a tagged type and a (distinct)
+    --  descendant type of that type, find the corresponding primitive
+    --  subprogram of the descendant type.
+ 
     function Current_Entity (N : Node_Id) return Entity_Id;
     pragma Inline (Current_Entity);
     --  Find the currently visible definition for a given identifier, that is to
*************** package Sem_Util is
*** 642,648 ****
     --  Current_Scope is returned. The returned value is Empty if this is called
     --  from a library package which is not within any subprogram.
  
!    function Deepest_Type_Access_Level (Typ : Entity_Id) return Uint;
     --  Same as Type_Access_Level, except that if the type is the type of an Ada
     --  2012 stand-alone object of an anonymous access type, then return the
     --  static accessibility level of the object. In that case, the dynamic
--- 672,687 ----
     --  Current_Scope is returned. The returned value is Empty if this is called
     --  from a library package which is not within any subprogram.
  
!    function CW_Or_Has_Controlled_Part (T : Entity_Id) return Boolean;
!    --  True if T is a class-wide type, or if it has controlled parts ("part"
!    --  means T or any of its subcomponents). Same as Needs_Finalization, except
!    --  when pragma Restrictions (No_Finalization) applies, in which case we
!    --  know that class-wide objects do not contain controlled parts.
! 
!    function Deepest_Type_Access_Level
!      (Typ             : Entity_Id;
!       Allow_Alt_Model : Boolean := True) return Uint;
! 
     --  Same as Type_Access_Level, except that if the type is the type of an Ada
     --  2012 stand-alone object of an anonymous access type, then return the
     --  static accessibility level of the object. In that case, the dynamic
*************** package Sem_Util is
*** 652,660 ****
     --  in the case of a descendant of a generic formal type (returns Int'Last
     --  instead of 0).
  
!    function Defining_Entity
!      (N               : Node_Id;
!       Empty_On_Errors : Boolean := False) return Entity_Id;
     --  Given a declaration N, returns the associated defining entity. If the
     --  declaration has a specification, the entity is obtained from the
     --  specification. If the declaration has a defining unit name, then the
--- 691,700 ----
     --  in the case of a descendant of a generic formal type (returns Int'Last
     --  instead of 0).
  
!    --  The Allow_Alt_Model parameter allows the alternative level calculation
!    --  under the restriction No_Dynamic_Accessibility_Checks to be performed.
! 
!    function Defining_Entity (N : Node_Id) return Entity_Id;
     --  Given a declaration N, returns the associated defining entity. If the
     --  declaration has a specification, the entity is obtained from the
     --  specification. If the declaration has a defining unit name, then the
*************** package Sem_Util is
*** 665,683 ****
     --  local entities declared during loop expansion. These entities need
     --  debugging information, generated through Qualify_Entity_Names, and
     --  the loop declaration must be placed in the table Name_Qualify_Units.
-    --
-    --  Set flag Empty_On_Errors to change the behavior of this routine as
-    --  follows:
-    --
-    --    * True  - A declaration that lacks a defining entity returns Empty.
-    --      A node that does not allow for a defining entity returns Empty.
-    --
-    --    * False - A declaration that lacks a defining entity is given a new
-    --      internally generated entity which is subsequently returned. A node
-    --      that does not allow for a defining entity raises Program_Error
  
     --  WARNING: There is a matching C declaration of this subprogram in fe.h
  
     function Denotes_Discriminant
       (N                : Node_Id;
        Check_Concurrent : Boolean := False) return Boolean;
--- 705,717 ----
     --  local entities declared during loop expansion. These entities need
     --  debugging information, generated through Qualify_Entity_Names, and
     --  the loop declaration must be placed in the table Name_Qualify_Units.
  
     --  WARNING: There is a matching C declaration of this subprogram in fe.h
  
+    function Defining_Entity_Or_Empty (N : Node_Id) return Entity_Id;
+    --  This is equivalent to Defining_Entity but it returns Empty for nodes
+    --  without an entity instead of raising Program_Error.
+ 
     function Denotes_Discriminant
       (N                : Node_Id;
        Check_Concurrent : Boolean := False) return Boolean;
*************** package Sem_Util is
*** 897,908 ****
       (N   : Node_Id;
        Ent : out Entity_Id;
        Off : out Boolean);
!    --  The node N should be an address representation clause. Determines if
!    --  the target expression is the address of an entity with an optional
!    --  offset. If so, set Ent to the entity and, if there is an offset, set
!    --  Off to True, otherwise to False. If N is not an address representation
!    --  clause, or if it is not possible to determine that the address is of
!    --  this form, then set Ent to Empty.
  
     function Find_Parameter_Type (Param : Node_Id) return Entity_Id;
     --  Return the type of formal parameter Param as determined by its
--- 931,941 ----
       (N   : Node_Id;
        Ent : out Entity_Id;
        Off : out Boolean);
!    --  The node N should be an address representation clause. Determines if the
!    --  target expression is the address of an entity with an optional offset.
!    --  If so, set Ent to the entity and, if there is an offset, set Off to
!    --  True, otherwise to False. If it is not possible to determine that the
!    --  address is of this form, then set Ent to Empty.
  
     function Find_Parameter_Type (Param : Node_Id) return Entity_Id;
     --  Return the type of formal parameter Param as determined by its
*************** package Sem_Util is
*** 1076,1082 ****
     --     to its tail.
     --
     --    Report_Errors is set to True if the values of the discriminants are
!    --     non-static.
     --
     --    Allow_Compile_Time if set to True, allows compile time known values in
     --     Governed_By expressions in addition to static expressions.
--- 1109,1116 ----
     --     to its tail.
     --
     --    Report_Errors is set to True if the values of the discriminants are
!    --     insufficiently static (see body for details of what that means).
! 
     --
     --    Allow_Compile_Time if set to True, allows compile time known values in
     --     Governed_By expressions in addition to static expressions.
*************** package Sem_Util is
*** 1164,1169 ****
--- 1198,1223 ----
     --  the index type turns out to be a partial view; this case should not
     --  arise during normal compilation of semantically correct programs.
  
+    type Range_Nodes is record
+       First, Last : Node_Id; -- First and Last nodes of a discrete_range
+    end record;
+ 
+    type Range_Values is record
+       First, Last : Uint; -- First and Last values of a discrete_range
+    end record;
+ 
+    function Get_Index_Bounds
+      (N             : Node_Id;
+       Use_Full_View : Boolean := False) return Range_Nodes;
+    --  Same as the above procedure, but returns the result as a record.
+    --  ???This should probably replace the procedure.
+ 
+    function Get_Index_Bounds
+      (N             : Node_Id;
+       Use_Full_View : Boolean := False) return Range_Values;
+    --  Same as the above function, but returns the values, which must be known
+    --  at compile time.
+ 
     procedure Get_Interfacing_Aspects
       (Iface_Asp : Node_Id;
        Conv_Asp  : out Node_Id;
*************** package Sem_Util is
*** 1304,1322 ****
     --    CRec_Typ  - the corresponding record type of the full views
  
     function Get_Fullest_View
!      (E : Entity_Id; Include_PAT : Boolean := True) return Entity_Id;
!    --  Get the fullest possible view of E, looking through private,
!    --  limited, packed array and other implementation types.  If Include_PAT
!    --  is False, don't look inside packed array types.
  
     function Has_Access_Values (T : Entity_Id) return Boolean;
!    --  Returns true if type or subtype T is an access type, or has a component
!    --  (at any recursive level) that is an access type. This is a conservative
!    --  predicate, if it is not known whether or not T contains access values
!    --  (happens for generic formals in some cases), then False is returned.
!    --  Note that tagged types return False. Even though the tag is implemented
!    --  as an access type internally, this function tests only for access types
!    --  known to the programmer. See also Has_Tagged_Component.
  
     function Has_Anonymous_Access_Discriminant (Typ : Entity_Id) return Boolean;
     --  Returns True if Typ has one or more anonymous access discriminants
--- 1358,1379 ----
     --    CRec_Typ  - the corresponding record type of the full views
  
     function Get_Fullest_View
!      (E           : Entity_Id;
!       Include_PAT : Boolean := True;
!       Recurse     : Boolean := True) return Entity_Id;
!    --  Get the fullest possible view of E, looking through private, limited,
!    --  packed array and other implementation types. If Include_PAT is False,
!    --  don't look inside packed array types. If Recurse is False, just
!    --  go down one level (so it's no longer the "fullest" view).
  
     function Has_Access_Values (T : Entity_Id) return Boolean;
!    --  Returns true if the underlying type of T is an access type, or has a
!    --  component (at any recursive level) that is an access type. This is a
!    --  conservative predicate, if it is not known whether or not T contains
!    --  access values (happens for generic formals in some cases), then False is
!    --  returned.  Note that tagged types return False. Even though the tag is
!    --  implemented as an access type internally, this function tests only for
!    --  access types known to the programmer. See also Has_Tagged_Component.
  
     function Has_Anonymous_Access_Discriminant (Typ : Entity_Id) return Boolean;
     --  Returns True if Typ has one or more anonymous access discriminants
*************** package Sem_Util is
*** 1390,1395 ****
--- 1447,1463 ----
     --  Determine whether type Typ has a suitable Default_Initial_Condition
     --  pragma which provides the full default initialization of the type.
  
+    function Has_Inferable_Discriminants (N : Node_Id) return Boolean;
+    --  Ada 2005 (AI-216): A view of an Unchecked_Union object has inferable
+    --  discriminants if it has a constrained nominal type, unless the object
+    --  is a component of an enclosing Unchecked_Union object that is subject
+    --  to a per-object constraint and the enclosing object lacks inferable
+    --  discriminants.
+    --
+    --  An expression of an Unchecked_Union type has inferable discriminants
+    --  if it is either a name of an object with inferable discriminants or a
+    --  qualified expression whose subtype mark denotes a constrained subtype.
+ 
     function Has_Infinities (E : Entity_Id) return Boolean;
     --  Determines if the range of the floating-point type E includes
     --  infinities. Returns False if E is not a floating-point type.
*************** package Sem_Util is
*** 1463,1477 ****
     --  integer for use in compile-time checking. Note: Level is restricted to
     --  be non-dynamic.
  
     function Has_Overriding_Initialize (T : Entity_Id) return Boolean;
     --  Predicate to determine whether a controlled type has a user-defined
     --  Initialize primitive (and, in Ada 2012, whether that primitive is
     --  non-null), which causes the type to not have preelaborable
     --  initialization.
  
!    function Has_Preelaborable_Initialization (E : Entity_Id) return Boolean;
     --  Return True iff type E has preelaborable initialization as defined in
     --  Ada 2005 (see AI-161 for details of the definition of this attribute).
  
     function Has_Prefix (N : Node_Id) return Boolean;
     --  Return True if N has attribute Prefix
--- 1531,1577 ----
     --  integer for use in compile-time checking. Note: Level is restricted to
     --  be non-dynamic.
  
+    function Is_Newly_Constructed
+      (Exp : Node_Id; Context_Requires_NC : Boolean) return Boolean;
+    --  Indicates whether a given expression is "newly constructed" (RM 4.4).
+    --  Context_Requires_NC determines the result returned for cases like a
+    --  raise expression or a conditional expression where some-but-not-all
+    --  operative constituents are newly constructed. Thus, this is a
+    --  somewhat unusual predicate in that the result required in order to
+    --  satisfy whatever legality rule is being checked can influence the
+    --  result of the predicate. Context_Requires_NC might be True for
+    --  something like the "newly constructed" rule for a limited expression
+    --  of a return statement, and False for something like the
+    --  "newly constructed" rule pertaining to a limited object renaming in a
+    --  declare expression. Eventually, the code to implement every
+    --  RM legality rule requiring/prohibiting a "newly constructed" expression
+    --  should be implemented by calling this function; that's not done yet.
+    --  The function name doesn't quite match the RM definition of the term if
+    --  Context_Requires_NC = False; in that case, "Might_Be_Newly_Constructed"
+    --  might be a more accurate name.
+ 
+    function Is_Prim_Of_Abst_Type_With_Nonstatic_CW_Pre_Post
+      (Subp : Entity_Id) return Boolean;
+    --  Return True if Subp is a primitive of an abstract type, where the
+    --  primitive has a class-wide pre- or postcondition whose expression
+    --  is nonstatic.
+ 
     function Has_Overriding_Initialize (T : Entity_Id) return Boolean;
     --  Predicate to determine whether a controlled type has a user-defined
     --  Initialize primitive (and, in Ada 2012, whether that primitive is
     --  non-null), which causes the type to not have preelaborable
     --  initialization.
  
!    function Has_Preelaborable_Initialization
!      (E                 : Entity_Id;
!       Preelab_Init_Expr : Node_Id := Empty) return Boolean;
     --  Return True iff type E has preelaborable initialization as defined in
     --  Ada 2005 (see AI-161 for details of the definition of this attribute).
+    --  If Preelab_Init_Expr is present, indicates that the function should
+    --  presume that for any subcomponent of E that is of a formal private or
+    --  derived type that is referenced by a Preelaborable_Initialization
+    --  attribute within the expression Preelab_Init_Expr, the formal type has
+    --  preelaborable initialization (RM 10.2.1(11.8/5) and AI12-0409).
  
     function Has_Prefix (N : Node_Id) return Boolean;
     --  Return True if N has attribute Prefix
*************** package Sem_Util is
*** 1581,1589 ****
     function In_Pragma_Expression (N : Node_Id; Nam : Name_Id) return Boolean;
     --  Returns true if the expression N occurs within a pragma with name Nam
  
!    function In_Pre_Post_Condition (N : Node_Id) return Boolean;
     --  Returns True if node N appears within a pre/postcondition pragma. Note
!    --  the pragma Check equivalents are NOT considered.
  
     function In_Quantified_Expression (N : Node_Id) return Boolean;
     --  Returns true if the expression N occurs within a quantified expression
--- 1681,1691 ----
     function In_Pragma_Expression (N : Node_Id; Nam : Name_Id) return Boolean;
     --  Returns true if the expression N occurs within a pragma with name Nam
  
!    function In_Pre_Post_Condition
!      (N : Node_Id; Class_Wide_Only : Boolean := False) return Boolean;
     --  Returns True if node N appears within a pre/postcondition pragma. Note
!    --  the pragma Check equivalents are NOT considered. If Class_Wide_Only is
!    --  True, then tests for N appearing within a class-wide pre/postcondition.
  
     function In_Quantified_Expression (N : Node_Id) return Boolean;
     --  Returns true if the expression N occurs within a quantified expression
*************** package Sem_Util is
*** 1712,1718 ****
     --  subprogram call.
  
     function Is_Actual_Parameter (N : Node_Id) return Boolean;
!    --  Determines if N is an actual parameter in a subprogram call
  
     function Is_Actual_Tagged_Parameter (N : Node_Id) return Boolean;
     --  Determines if N is an actual parameter of a formal of tagged type in a
--- 1814,1820 ----
     --  subprogram call.
  
     function Is_Actual_Parameter (N : Node_Id) return Boolean;
!    --  Determines if N is an actual parameter in a subprogram or entry call
  
     function Is_Actual_Tagged_Parameter (N : Node_Id) return Boolean;
     --  Determines if N is an actual parameter of a formal of tagged type in a
*************** package Sem_Util is
*** 1765,1770 ****
--- 1867,1879 ----
     --  Returns true if the two specifications of the given
     --  nonoverridable aspect are compatible.
  
+    function Is_Conjunction_Of_Formal_Preelab_Init_Attributes
+      (Expr : Node_Id) return Boolean;
+    --  Returns True if Expr is a Preelaborable_Initialization attribute applied
+    --  to a formal type, or a sequence of two or more such attributes connected
+    --  by "and" operators, or if the Original_Node of Expr or its constituents
+    --  is such an attribute.
+ 
     function Is_Constant_Bound (Exp : Node_Id) return Boolean;
     --  Exp is the expression for an array bound. Determines whether the
     --  bound is a compile-time known value, or a constant entity, or an
*************** package Sem_Util is
*** 1965,1970 ****
--- 2074,2088 ----
     --  Determine whether subprogram [body] Subp denotes an expression function
     --  or is completed by an expression function body.
  
+    function Is_Extended_Precision_Floating_Point_Type
+      (E : Entity_Id) return Boolean;
+    --  Return whether E is an extended precision floating point type,
+    --  characterized by:
+    --  . machine_radix = 2
+    --  . machine_mantissa = 64
+    --  . machine_emax = 2**14
+    --  . machine_emin = 3 - machine_emax
+ 
     function Is_EVF_Expression (N : Node_Id) return Boolean;
     --  Determine whether node N denotes a reference to a formal parameter of
     --  a specific tagged type whose related subprogram is subject to pragma
*************** package Sem_Util is
*** 1975,1985 ****
     --    3) An if expression with at least one EVF dependent_expression
     --    4) A case expression with at least one EVF dependent_expression
  
!    function Is_False (U : Uint) return Boolean;
     pragma Inline (Is_False);
!    --  The argument is a Uint value which is the Boolean'Pos value of a Boolean
!    --  operand (i.e. is either 0 for False, or 1 for True). This function tests
!    --  if it is False (i.e. zero).
  
     function Is_Fixed_Model_Number (U : Ureal; T : Entity_Id) return Boolean;
     --  Returns True iff the number U is a model number of the fixed-point type
--- 2093,2109 ----
     --    3) An if expression with at least one EVF dependent_expression
     --    4) A case expression with at least one EVF dependent_expression
  
!    function Is_False (U : Opt_Ubool) return Boolean;
     pragma Inline (Is_False);
!    --  True if U is Boolean'Pos (False) (i.e. Uint_0)
! 
!    function Is_True (U : Opt_Ubool) return Boolean;
!    pragma Inline (Is_True);
!    --  True if U is Boolean'Pos (True) (i.e. Uint_1). Also True if U is
!    --  No_Uint; we allow No_Uint because Static_Boolean returns that in
!    --  case of error. It doesn't really matter whether the error case is
!    --  considered True or False, but we don't want this to blow up in that
!    --  case.
  
     function Is_Fixed_Model_Number (U : Ureal; T : Entity_Id) return Boolean;
     --  Returns True iff the number U is a model number of the fixed-point type
*************** package Sem_Util is
*** 1987,1993 ****
  
     function Is_Full_Access_Object (N : Node_Id) return Boolean;
     --  Determine whether arbitrary node N denotes a reference to a full access
!    --  object as per Ada 2020 RM C.6(8.2).
  
     function Is_Fully_Initialized_Type (Typ : Entity_Id) return Boolean;
     --  Typ is a type entity. This function returns true if this type is fully
--- 2111,2117 ----
  
     function Is_Full_Access_Object (N : Node_Id) return Boolean;
     --  Determine whether arbitrary node N denotes a reference to a full access
!    --  object as per Ada 2022 RM C.6(8.2).
  
     function Is_Fully_Initialized_Type (Typ : Entity_Id) return Boolean;
     --  Typ is a type entity. This function returns true if this type is fully
*************** package Sem_Util is
*** 2039,2054 ****
     --  an array, either inside a loop of the form 'for X of A' or a quantified
     --  expression of the form 'for all/some X of A' where A is of array type.
  
-    type Is_LHS_Result is (Yes, No, Unknown);
-    function Is_LHS (N : Node_Id) return Is_LHS_Result;
-    --  Returns Yes if N is definitely used as Name in an assignment statement.
-    --  Returns No if N is definitely NOT used as a Name in an assignment
-    --  statement. Returns Unknown if we can't tell at this stage (happens in
-    --  the case where we don't know the type of N yet, and we have something
-    --  like N.A := 3, where this counts as N being used on the left side of
-    --  an assignment only if N is not an access type. If it is an access type
-    --  then it is N.all.A that is assigned, not N.
- 
     function Is_Library_Level_Entity (E : Entity_Id) return Boolean;
     --  A library-level declaration is one that is accessible from Standard,
     --  i.e. a library unit or an entity declared in a library package.
--- 2163,2168 ----
*************** package Sem_Util is
*** 2060,2068 ****
     --  limited view must be treated in the same way.
  
     function Is_Local_Variable_Reference (Expr : Node_Id) return Boolean;
!    --  Determines whether Expr is a reference to a variable or IN OUT mode
!    --  parameter of the current enclosing subprogram.
!    --  Why are OUT parameters not considered here ???
  
     function Is_Master (N : Node_Id) return Boolean;
     --  Determine if the given node N constitutes a finalization master
--- 2174,2181 ----
     --  limited view must be treated in the same way.
  
     function Is_Local_Variable_Reference (Expr : Node_Id) return Boolean;
!    --  Determines whether Expr is a reference to a variable or formal parameter
!    --  of mode OUT or IN OUT of the current enclosing subprogram.
  
     function Is_Master (N : Node_Id) return Boolean;
     --  Determine if the given node N constitutes a finalization master
*************** package Sem_Util is
*** 2083,2091 ****
     --  assertion expression of pragma Default_Initial_Condition and if it does,
     --  the encapsulated expression is nontrivial.
  
!    function Is_Null_Record_Type (T : Entity_Id) return Boolean;
!    --  Determine whether T is declared with a null record definition or a
!    --  null component list.
  
     function Is_Object_Image (Prefix : Node_Id) return Boolean;
     --  Returns True if an 'Img, 'Image, 'Wide_Image, or 'Wide_Wide_Image
--- 2196,2223 ----
     --  assertion expression of pragma Default_Initial_Condition and if it does,
     --  the encapsulated expression is nontrivial.
  
!    function Is_Null_Extension
!     (T : Entity_Id; Ignore_Privacy : Boolean := False) return Boolean;
!    --  Given a tagged type, returns True if argument is a type extension
!    --  that introduces no new components (discriminant or nondiscriminant).
!    --  Ignore_Privacy should be True for use in implementing dynamic semantics.
! 
!    function Is_Null_Extension_Of
!      (Descendant, Ancestor : Entity_Id) return Boolean;
!    --  Given two tagged types, the first a descendant of the second,
!    --  returns True if every component of Descendant is inherited
!    --  (directly or indirectly) from Ancestor. Privacy is ignored.
! 
!    function Is_Null_Record_Definition (Record_Def : Node_Id) return Boolean;
!    --  Returns True for an N_Record_Definition node that has no user-defined
!    --  components (and no variant part).
! 
!    function Is_Null_Record_Type
!      (T : Entity_Id; Ignore_Privacy : Boolean := False) return Boolean;
!    --  Determine whether T is declared with a null record definition, a
!    --  null component list, or as a type derived from a null record type
!    --  (with a null extension if tagged). Returns True for interface types,
!    --  False for discriminated types.
  
     function Is_Object_Image (Prefix : Node_Id) return Boolean;
     --  Returns True if an 'Img, 'Image, 'Wide_Image, or 'Wide_Wide_Image
*************** package Sem_Util is
*** 2103,2113 ****
     --  conversions and hence variables.
  
     function Is_OK_Volatile_Context
!      (Context : Node_Id;
!       Obj_Ref : Node_Id) return Boolean;
     --  Determine whether node Context denotes a "non-interfering context" (as
     --  defined in SPARK RM 7.1.3(10)) where volatile reference Obj_Ref can
!    --  safely reside.
  
     function Is_Package_Contract_Annotation (Item : Node_Id) return Boolean;
     --  Determine whether aspect specification or pragma Item is one of the
--- 2235,2250 ----
     --  conversions and hence variables.
  
     function Is_OK_Volatile_Context
!      (Context       : Node_Id;
!       Obj_Ref       : Node_Id;
!       Check_Actuals : Boolean) return Boolean;
     --  Determine whether node Context denotes a "non-interfering context" (as
     --  defined in SPARK RM 7.1.3(10)) where volatile reference Obj_Ref can
!    --  safely reside. When examining references that might be located within
!    --  actual parameters of a subprogram call that has not been resolved yet,
!    --  Check_Actuals should be False; such references will be assumed to be
!    --  legal. They will need to be checked again after subprogram call has
!    --  been resolved.
  
     function Is_Package_Contract_Annotation (Item : Node_Id) return Boolean;
     --  Determine whether aspect specification or pragma Item is one of the
*************** package Sem_Util is
*** 2167,2172 ****
--- 2304,2313 ----
     --  Is_Non_Preelaborable_Construct takes into account the syntactic
     --  and semantic properties of N for a more accurate diagnostic.
  
+    function Is_Private_Library_Unit (Unit : Entity_Id) return Boolean;
+    --  Returns True if and only if the library unit is declared with an
+    --  explicit designation of private.
+ 
     function Is_Protected_Self_Reference (N : Node_Id) return Boolean;
     --  Return True if node N denotes a protected type name which represents
     --  the current instance of a protected object according to RM 9.4(21/2).
*************** package Sem_Util is
*** 2299,2308 ****
     --  Determine whether arbitrary subprogram Subp_Id may act as a primitive of
     --  an arbitrary tagged type.
  
-    function Is_Suspension_Object (Id : Entity_Id) return Boolean;
-    --  Determine whether arbitrary entity Id denotes Suspension_Object defined
-    --  in Ada.Synchronous_Task_Control.
- 
     function Is_Synchronized_Object (Id : Entity_Id) return Boolean;
     --  Determine whether entity Id denotes an object and if it does, whether
     --  this object is synchronized as specified in SPARK RM 9.1. To qualify as
--- 2440,2445 ----
*************** package Sem_Util is
*** 2320,2331 ****
     --  unconditional transfer of control at run time, i.e. the following
     --  statement definitely will not be executed.
  
-    function Is_True (U : Uint) return Boolean;
-    pragma Inline (Is_True);
-    --  The argument is a Uint value which is the Boolean'Pos value of a Boolean
-    --  operand (i.e. is either 0 for False, or 1 for True). This function tests
-    --  if it is True (i.e. non-zero).
- 
     function Is_Unchecked_Conversion_Instance (Id : Entity_Id) return Boolean;
     --  Determine whether an arbitrary entity denotes an instance of function
     --  Ada.Unchecked_Conversion.
--- 2457,2462 ----
*************** package Sem_Util is
*** 2375,2381 ****
     --  Initialize/Adjust/Finalize subprogram does not override the inherited
     --  one.
  
!    function Is_Volatile_Full_Access_Object (N : Node_Id) return Boolean;
     --  Determine whether arbitrary node N denotes a reference to an object
     --  which is Volatile_Full_Access.
  
--- 2506,2512 ----
     --  Initialize/Adjust/Finalize subprogram does not override the inherited
     --  one.
  
!    function Is_Volatile_Full_Access_Object_Ref (N : Node_Id) return Boolean;
     --  Determine whether arbitrary node N denotes a reference to an object
     --  which is Volatile_Full_Access.
  
*************** package Sem_Util is
*** 2384,2390 ****
     --  pragma Volatile_Function. Protected functions are treated as volatile
     --  (SPARK RM 7.1.2).
  
!    function Is_Volatile_Object (N : Node_Id) return Boolean;
     --  Determine whether arbitrary node N denotes a reference to a volatile
     --  object as per RM C.6(8). Note that the test here is for something that
     --  is actually declared as volatile, not for an object that gets treated
--- 2515,2521 ----
     --  pragma Volatile_Function. Protected functions are treated as volatile
     --  (SPARK RM 7.1.2).
  
!    function Is_Volatile_Object_Ref (N : Node_Id) return Boolean;
     --  Determine whether arbitrary node N denotes a reference to a volatile
     --  object as per RM C.6(8). Note that the test here is for something that
     --  is actually declared as volatile, not for an object that gets treated
*************** package Sem_Util is
*** 2452,2463 ****
     --  and returns True if so. Returns False otherwise. It is an error to call
     --  this function if N is not of an access type.
  
!    function Known_To_Be_Assigned (N : Node_Id) return Boolean;
     --  The node N is an entity reference. This function determines whether the
     --  reference is for sure an assignment of the entity, returning True if
!    --  so. This differs from May_Be_Lvalue in that it defaults in the other
!    --  direction. Cases which may possibly be assignments but are not known to
!    --  be may return True from May_Be_Lvalue, but False from this function.
  
     function Last_Source_Statement (HSS : Node_Id) return Node_Id;
     --  HSS is a handled statement sequence. This function returns the last
--- 2583,2595 ----
     --  and returns True if so. Returns False otherwise. It is an error to call
     --  this function if N is not of an access type.
  
!    function Known_To_Be_Assigned
!      (N        : Node_Id;
!       Only_LHS : Boolean := False) return Boolean;
     --  The node N is an entity reference. This function determines whether the
     --  reference is for sure an assignment of the entity, returning True if
!    --  so. Only_LHS will modify this behavior such that actuals for out or
!    --  in out parameters will not be considered assigned.
  
     function Last_Source_Statement (HSS : Node_Id) return Node_Id;
     --  HSS is a handled statement sequence. This function returns the last
*************** package Sem_Util is
*** 2481,2487 ****
     --  follows:
     --
     --    Checks   - Save the status of Elaboration_Check
!    --    Level    - Save the declaration level of N_Id (if appicable)
     --    Modes    - Save the Ghost and SPARK modes in effect (if applicable)
     --    Warnings - Save the status of Elab_Warnings
  
--- 2613,2619 ----
     --  follows:
     --
     --    Checks   - Save the status of Elaboration_Check
!    --    Level    - Save the declaration level of N_Id (if applicable)
     --    Modes    - Save the Ghost and SPARK modes in effect (if applicable)
     --    Warnings - Save the status of Elab_Warnings
  
*************** package Sem_Util is
*** 2496,2524 ****
     --  same number of dimensions, and the same static bounds for each index
     --  position.
  
-    function May_Be_Lvalue (N : Node_Id) return Boolean;
-    --  Determines if N could be an lvalue (e.g. an assignment left hand side).
-    --  An lvalue is defined as any expression which appears in a context where
-    --  a name is required by the syntax, and the identity, rather than merely
-    --  the value of the node is needed (for example, the prefix of an Access
-    --  attribute is in this category). Note that, as implied by the name, this
-    --  test is conservative. If it cannot be sure that N is NOT an lvalue, then
-    --  it returns True. It tries hard to get the answer right, but it is hard
-    --  to guarantee this in all cases. Note that it is more possible to give
-    --  correct answer if the tree is fully analyzed.
- 
     function Might_Raise (N : Node_Id) return Boolean;
     --  True if evaluation of N might raise an exception. This is conservative;
     --  if we're not sure, we return True. If N is a subprogram body, this is
     --  about whether execution of that body can raise.
  
     function Nearest_Enclosing_Instance (E : Entity_Id) return Entity_Id;
     --  Return the entity of the nearest enclosing instance which encapsulates
     --  entity E. If no such instance exits, return Empty.
  
     function Needs_Finalization (Typ : Entity_Id) return Boolean;
!    --  Determine whether type Typ is controlled and thus requires finalization
!    --  actions.
  
     function Needs_One_Actual (E : Entity_Id) return Boolean;
     --  Returns True if a function has defaults for all but its first formal,
--- 2628,2650 ----
     --  same number of dimensions, and the same static bounds for each index
     --  position.
  
     function Might_Raise (N : Node_Id) return Boolean;
     --  True if evaluation of N might raise an exception. This is conservative;
     --  if we're not sure, we return True. If N is a subprogram body, this is
     --  about whether execution of that body can raise.
  
+    function Nearest_Class_Condition_Subprogram
+      (Kind    : Condition_Kind;
+       Spec_Id : Entity_Id) return Entity_Id;
+    --  Return the nearest ancestor containing the merged class-wide conditions
+    --  that statically apply to Spec_Id; return Empty otherwise.
+ 
     function Nearest_Enclosing_Instance (E : Entity_Id) return Entity_Id;
     --  Return the entity of the nearest enclosing instance which encapsulates
     --  entity E. If no such instance exits, return Empty.
  
     function Needs_Finalization (Typ : Entity_Id) return Boolean;
!    --  True if Typ requires finalization actions
  
     function Needs_One_Actual (E : Entity_Id) return Boolean;
     --  Returns True if a function has defaults for all but its first formal,
*************** package Sem_Util is
*** 2760,2765 ****
--- 2886,2895 ----
     --  corresponding operation of S is the original corresponding operation of
     --  S2. Otherwise, it is S itself.
  
+    function Original_View_In_Visible_Part (Typ : Entity_Id) return Boolean;
+    --  Returns True if the type Typ has a private view or if the public view
+    --  appears in the visible part of a package spec.
+ 
     procedure Output_Entity (Id : Entity_Id);
     --  Print entity Id to standard output. The name of the entity appears in
     --  fully qualified form.
*************** package Sem_Util is
*** 2826,2834 ****
     procedure Propagate_Concurrent_Flags
       (Typ      : Entity_Id;
        Comp_Typ : Entity_Id);
!    --  Set Has_Task, Has_Protected and Has_Timing_Event on Typ when the flags
!    --  are set on Comp_Typ. This follows the definition of these flags which
!    --  are set (recursively) on any composite type which has a component marked
     --  by one of these flags. This procedure can only set flags for Typ, and
     --  never clear them. Comp_Typ is the type of a component or a parent.
  
--- 2956,2964 ----
     procedure Propagate_Concurrent_Flags
       (Typ      : Entity_Id;
        Comp_Typ : Entity_Id);
!    --  Set Has_Task, Has_Protected, and Has_Timing_Event on Typ when the flags
!    --  are set on Comp_Typ. This follows the definition of these flags, which
!    --  are set (recursively) on any composite type that has a component marked
     --  by one of these flags. This procedure can only set flags for Typ, and
     --  never clear them. Comp_Typ is the type of a component or a parent.
  
*************** package Sem_Util is
*** 2841,2854 ****
     procedure Propagate_Invariant_Attributes
       (Typ      : Entity_Id;
        From_Typ : Entity_Id);
!    --  Inherit all invariant-related attributes form type From_Typ. Typ is the
     --  destination type.
  
     procedure Propagate_Predicate_Attributes
       (Typ      : Entity_Id;
        From_Typ : Entity_Id);
!    --  Inherit some predicate-related attributes form type From_Typ. Typ is the
!    --  destination type. Probably to be completed with more attributes???
  
     procedure Record_Possible_Part_Of_Reference
       (Var_Id : Entity_Id;
--- 2971,2984 ----
     procedure Propagate_Invariant_Attributes
       (Typ      : Entity_Id;
        From_Typ : Entity_Id);
!    --  Inherit all invariant-related attributes from type From_Typ. Typ is the
     --  destination type.
  
     procedure Propagate_Predicate_Attributes
       (Typ      : Entity_Id;
        From_Typ : Entity_Id);
!    --  Inherit predicate functions and Has_Predicates flag from type From_Typ.
!    --  Typ is the destination type.
  
     procedure Record_Possible_Part_Of_Reference
       (Var_Id : Entity_Id;
*************** package Sem_Util is
*** 2941,2949 ****
     --  the value is valid) for the given entity Ent. This value can only be
     --  captured if sequential execution semantics can be properly guaranteed so
     --  that a subsequent reference will indeed be sure that this current value
!    --  indication is correct. The node N is the construct which resulted in
!    --  the possible capture of the value (this is used to check if we are in
!    --  a conditional).
     --
     --  Cond is used to skip the test for being inside a conditional. It is used
     --  in the case of capturing values from if/while tests, which already do a
--- 3071,3079 ----
     --  the value is valid) for the given entity Ent. This value can only be
     --  captured if sequential execution semantics can be properly guaranteed so
     --  that a subsequent reference will indeed be sure that this current value
!    --  indication is correct. The node N is the construct that resulted in the
!    --  possible capture of the value (this is used to check if we are in a
!    --  conditional).
     --
     --  Cond is used to skip the test for being inside a conditional. It is used
     --  in the case of capturing values from if/while tests, which already do a
*************** package Sem_Util is
*** 3005,3017 ****
     --  the same scope. Note that scopes are partially ordered, so Scope_Within
     --  (A, B) and Scope_Within (B, A) may both return False.
  
-    procedure Set_Convention (E : Entity_Id; Val : Convention_Id);
-    --  Same as Basic_Set_Convention, but with an extra check for access types.
-    --  In particular, if E is an access-to-subprogram type, and Val is a
-    --  foreign convention, then we set Can_Use_Internal_Rep to False on E.
-    --  Also, if the Etype of E is set and is an anonymous access type with
-    --  no convention set, this anonymous type inherits the convention of E.
- 
     procedure Set_Current_Entity (E : Entity_Id);
     pragma Inline (Set_Current_Entity);
     --  Establish the entity E as the currently visible definition of its
--- 3135,3140 ----
*************** package Sem_Util is
*** 3121,3127 ****
     --  predefined unit. The _Par version should be called only from the parser;
     --  the _Sem version should be called only during semantic analysis.
  
!    function Static_Boolean (N : Node_Id) return Uint;
     --  This function analyzes the given expression node and then resolves it
     --  as Standard.Boolean. If the result is static, then Uint_1 or Uint_0 is
     --  returned corresponding to the value, otherwise an error message is
--- 3244,3250 ----
     --  predefined unit. The _Par version should be called only from the parser;
     --  the _Sem version should be called only during semantic analysis.
  
!    function Static_Boolean (N : Node_Id) return Opt_Ubool;
     --  This function analyzes the given expression node and then resolves it
     --  as Standard.Boolean. If the result is static, then Uint_1 or Uint_0 is
     --  returned corresponding to the value, otherwise an error message is
*************** package Sem_Util is
*** 3187,3195 ****
     --  returned, i.e. Traverse_More_Func is called and the result is simply
     --  discarded.
  
!    function Type_Access_Level (Typ : Entity_Id) return Uint;
     --  Return the accessibility level of Typ
  
     function Type_Without_Stream_Operation
       (T  : Entity_Id;
        Op : TSS_Name_Type := TSS_Null) return Entity_Id;
--- 3310,3328 ----
     --  returned, i.e. Traverse_More_Func is called and the result is simply
     --  discarded.
  
!    function Type_Access_Level
!      (Typ             : Entity_Id;
!       Allow_Alt_Model : Boolean   := True;
!       Assoc_Ent       : Entity_Id := Empty) return Uint;
     --  Return the accessibility level of Typ
  
+    --  The Allow_Alt_Model parameter allows the alternative level calculation
+    --  under the restriction No_Dynamic_Accessibility_Checks to be performed.
+ 
+    --  Assoc_Ent allows for the optional specification of the entity associated
+    --  with Typ. This gets utilized mostly for anonymous access type
+    --  processing, where context matters in interpreting Typ's level.
+ 
     function Type_Without_Stream_Operation
       (T  : Entity_Id;
        Op : TSS_Name_Type := TSS_Null) return Entity_Id;
*************** package Sem_Util is
*** 3201,3206 ****
--- 3334,3348 ----
     --  prevents the construction of a composite stream operation. If Op is
     --  specified we check only for the given stream operation.
  
+    function Ultimate_Overlaid_Entity (E : Entity_Id) return Entity_Id;
+    --  If entity E is overlaying some other entity via an Address clause (which
+    --  possibly overlays yet another entity via its own Address clause), then
+    --  return the ultimate overlaid entity. If entity E is not overlaying any
+    --  other entity (or the overlaid entity cannot be determined statically),
+    --  then return Empty.
+    --
+    --  Subsidiary to the analysis of object overlays in SPARK.
+ 
     function Ultimate_Prefix (N : Node_Id) return Node_Id;
     --  Obtain the "outermost" prefix of arbitrary node N. Return N if no such
     --  prefix exists.
*************** package Sem_Util is
*** 3258,3264 ****
  
     function Validated_View (Typ : Entity_Id) return Entity_Id;
     --  Obtain the "validated view" of arbitrary type Typ which is suitable for
!    --  verification by attributes 'Valid_Scalars. This view is the type itself
     --  or its full view while stripping away concurrency, derivations, and
     --  privacy.
  
--- 3400,3406 ----
  
     function Validated_View (Typ : Entity_Id) return Entity_Id;
     --  Obtain the "validated view" of arbitrary type Typ which is suitable for
!    --  verification by attribute 'Valid_Scalars. This view is the type itself
     --  or its full view while stripping away concurrency, derivations, and
     --  privacy.
  
*************** package Sem_Util is
*** 3278,3287 ****
     function Within_Scope (E : Entity_Id; S : Entity_Id) return Boolean;
     --  Returns True if entity E is declared within scope S
  
-    function Within_Subprogram_Call (N : Node_Id) return Boolean;
-    --  Determine whether arbitrary node N appears in an entry, function, or
-    --  procedure call.
- 
     procedure Wrong_Type (Expr : Node_Id; Expected_Type : Entity_Id);
     --  Output error message for incorrectly typed expression. Expr is the node
     --  for the incorrectly typed construct (Etype (Expr) is the type found),
--- 3420,3425 ----
*************** package Sem_Util is
*** 3341,3347 ****
        --  Returns True iff every value belonging to some interval of
        --  Subset also belongs to some interval of Of_Set.
  
!       --  TBD: When we get around to implementing "is statically compatible"
        --  correctly for real types with static predicates, we may need
        --  an analogous Real_Interval_List type. Most of the language
        --  rules that reference "is statically compatible" pertain to
--- 3479,3485 ----
        --  Returns True iff every value belonging to some interval of
        --  Subset also belongs to some interval of Of_Set.
  
!       --  When we get around to implementing "is statically compatible"
        --  correctly for real types with static predicates, we may need
        --  an analogous Real_Interval_List type. Most of the language
        --  rules that reference "is statically compatible" pertain to
*************** package Sem_Util is
*** 3366,3372 ****
           --  (typically a 'Old attribute reference), returns True if
           --     - the expression is conditionally evaluated; and
           --     - its determining expressions are all known on entry; and
!          --     - Ada_Version >= Ada_2020.
           --  See RM 6.1.1 for definitions of these terms.
           --
           --  Also returns True if Expr is of an anonymous access type;
--- 3504,3510 ----
           --  (typically a 'Old attribute reference), returns True if
           --     - the expression is conditionally evaluated; and
           --     - its determining expressions are all known on entry; and
!          --     - Ada_Version >= Ada_2022.
           --  See RM 6.1.1 for definitions of these terms.
           --
           --  Also returns True if Expr is of an anonymous access type;
*************** package Sem_Util is
*** 3438,3441 ****
--- 3576,3651 ----
  
        end Indirect_Temps;
     end Old_Attr_Util;
+ 
+    package Storage_Model_Support is
+ 
+       --  This package provides a set of utility functions related to support
+       --  for the Storage_Model feature. These functions provide an interface
+       --  that the compiler (in particular back-end phases such as gigi and
+       --  GNAT-LLVM) can use to easily obtain entities and operations that
+       --  are specified for types in the aspects Storage_Model_Type and
+       --  Designated_Storage_Model.
+ 
+       function Get_Storage_Model_Type_Entity
+         (Typ : Entity_Id;
+          Nam : Name_Id) return Entity_Id;
+       --  Given type Typ with aspect Storage_Model_Type, returns the Entity_Id
+       --  corresponding to the entity associated with Nam in the aspect. If the
+       --  type does not specify the aspect, or such an entity is not present,
+       --  then returns Empty. (Note: This function is modeled on function
+       --  Get_Iterable_Type_Primitive.)
+ 
+       function Has_Designated_Storage_Model_Aspect
+         (Typ : Entity_Id) return Boolean;
+       --  Returns True iff Typ specifies aspect Designated_Storage_Model
+ 
+       function Has_Storage_Model_Type_Aspect (Typ : Entity_Id) return Boolean;
+       --  Returns True iff Typ specifies aspect Storage_Model_Type
+ 
+       function Storage_Model_Object (Typ : Entity_Id) return Entity_Id;
+       --  Given an access type with aspect Designated_Storage_Model, returns
+       --  the storage-model object associated with that type; returns Empty
+       --  if there is no associated object.
+ 
+       function Storage_Model_Type (Obj : Entity_Id) return Entity_Id;
+       --  Given an object Obj of a type specifying aspect Storage_Model_Type,
+       --  returns that type; otherwise returns Empty.
+ 
+       function Storage_Model_Address_Type (Typ : Entity_Id) return Entity_Id;
+       --  Given a type Typ that specifies aspect Storage_Model_Type, returns
+       --  the type specified for the Address_Type choice in that aspect;
+       --  returns Empty if the aspect or the type isn't specified.
+ 
+       function Storage_Model_Null_Address (Typ : Entity_Id) return Entity_Id;
+       --  Given a type Typ that specifies aspect Storage_Model_Type, returns
+       --  constant specified for Null_Address choice in that aspect; returns
+       --  Empty if the aspect or the constant object isn't specified.
+ 
+       function Storage_Model_Allocate (Typ : Entity_Id) return Entity_Id;
+       --  Given a type Typ that specifies aspect Storage_Model_Type, returns
+       --  procedure specified for the Allocate choice in that aspect; returns
+       --  Empty if the aspect or the procedure isn't specified.
+ 
+       function Storage_Model_Deallocate (Typ : Entity_Id) return Entity_Id;
+       --  Given a type Typ that specifies aspect Storage_Model_Type, returns
+       --  procedure specified for the Deallocate choice in that aspect; returns
+       --  Empty if the aspect or the procedure isn't specified.
+ 
+       function Storage_Model_Copy_From (Typ : Entity_Id) return Entity_Id;
+       --  Given a type Typ that specifies aspect Storage_Model_Type, returns
+       --  procedure specified for the Copy_From choice in that aspect; returns
+       --  Empty if the aspect or the procedure isn't specified.
+ 
+       function Storage_Model_Copy_To (Typ : Entity_Id) return Entity_Id;
+       --  Given a type Typ that specifies aspect Storage_Model_Type, returns
+       --  procedure specified for the Copy_To choice in that aspect; returns
+       --  Empty if the aspect or the procedure isn't specified.
+ 
+       function Storage_Model_Storage_Size (Typ : Entity_Id) return Entity_Id;
+       --  Given a type Typ that specifies aspect Storage_Model_Type, returns
+       --  function specified for Storage_Size choice in that aspect; returns
+       --  Empty if the aspect or the procedure isn't specified.
+ 
+    end Storage_Model_Support;
+ 
  end Sem_Util;
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_warn.adb gcc-12.1.0/gcc/ada/sem_warn.adb
*** gcc-11.3.0/gcc/ada/sem_warn.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_warn.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
***************
*** 23,53 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Exp_Code; use Exp_Code;
! with Lib;      use Lib;
! with Lib.Xref; use Lib.Xref;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Par_SCO;  use Par_SCO;
! with Rtsfind;  use Rtsfind;
! with Sem;      use Sem;
! with Sem_Ch8;  use Sem_Ch8;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Eval; use Sem_Eval;
! with Sem_Prag; use Sem_Prag;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Tbuild;   use Tbuild;
! with Uintp;    use Uintp;
  
  package body Sem_Warn is
  
--- 23,57 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Exp_Code;       use Exp_Code;
! with Lib;            use Lib;
! with Lib.Xref;       use Lib.Xref;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Par_SCO;        use Par_SCO;
! with Rtsfind;        use Rtsfind;
! with Sem;            use Sem;
! with Sem_Ch8;        use Sem_Ch8;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Prag;       use Sem_Prag;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Tbuild;         use Tbuild;
! with Uintp;          use Uintp;
  
  package body Sem_Warn is
  
*************** package body Sem_Warn is
*** 509,515 ****
              --  If this is an lvalue, then definitely abandon, since
              --  this could be a direct modification of the variable.
  
!             if May_Be_Lvalue (N) then
                 return Abandon;
              end if;
  
--- 513,519 ----
              --  If this is an lvalue, then definitely abandon, since
              --  this could be a direct modification of the variable.
  
!             if Known_To_Be_Assigned (N) then
                 return Abandon;
              end if;
  
*************** package body Sem_Warn is
*** 555,561 ****
             and then Present (Renamed_Object (Entity (N)))
             and then Is_Entity_Name (Renamed_Object (Entity (N)))
             and then Entity (Renamed_Object (Entity (N))) = Var
!            and then May_Be_Lvalue (N)
           then
              return Abandon;
  
--- 559,565 ----
             and then Present (Renamed_Object (Entity (N)))
             and then Is_Entity_Name (Renamed_Object (Entity (N)))
             and then Entity (Renamed_Object (Entity (N))) = Var
!            and then Known_To_Be_Assigned (N)
           then
              return Abandon;
  
*************** package body Sem_Warn is
*** 1176,1182 ****
                 --  Case of an unassigned variable
  
                 --  First gather any Unset_Reference indication for E1. In the
!                --  case of a parameter, it is the Spec_Entity that is relevant.
  
                 if Ekind (E1) = E_Out_Parameter
                   and then Present (Spec_Entity (E1))
--- 1180,1187 ----
                 --  Case of an unassigned variable
  
                 --  First gather any Unset_Reference indication for E1. In the
!                --  case of an 'out' parameter, it is the Spec_Entity that is
!                --  relevant.
  
                 if Ekind (E1) = E_Out_Parameter
                   and then Present (Spec_Entity (E1))
*************** package body Sem_Warn is
*** 1215,1222 ****
                 --  the wanted effect is included in Never_Set_In_Source.
  
                 elsif Warn_On_Constant
!                  and then (Ekind (E1) = E_Variable
!                             and then Has_Initial_Value (E1))
                   and then Never_Set_In_Source_Check_Spec (E1)
                   and then not Generic_Package_Spec_Entity (E1)
                 then
--- 1220,1227 ----
                 --  the wanted effect is included in Never_Set_In_Source.
  
                 elsif Warn_On_Constant
!                  and then Ekind (E1) = E_Variable
!                  and then Has_Initial_Value (E1)
                   and then Never_Set_In_Source_Check_Spec (E1)
                   and then not Generic_Package_Spec_Entity (E1)
                 then
*************** package body Sem_Warn is
*** 1294,1302 ****
                   --  never referenced, since again it seems odd to rely on
                   --  default initialization to set an out parameter value.
  
!                 and then (Is_Access_Type (E1T)
!                            or else Ekind (E1) = E_Out_Parameter
!                            or else not Is_Fully_Initialized_Type (E1T))
                 then
                    --  Do not output complaint about never being assigned a
                    --  value if a pragma Unmodified applies to the variable
--- 1299,1307 ----
                   --  never referenced, since again it seems odd to rely on
                   --  default initialization to set an out parameter value.
  
!                  and then (Is_Access_Type (E1T)
!                              or else Ekind (E1) = E_Out_Parameter
!                              or else not Is_Fully_Initialized_Type (E1T))
                 then
                    --  Do not output complaint about never being assigned a
                    --  value if a pragma Unmodified applies to the variable
*************** package body Sem_Warn is
*** 1350,1358 ****
                       --  Suppress warning if composite type contains any access
                       --  component, since the logical effect of modifying a
                       --  parameter may be achieved by modifying a referenced
!                      --  object.
  
                       elsif Is_Composite_Type (E1T)
                         and then Has_Access_Values (E1T)
                       then
                          null;
--- 1355,1365 ----
                       --  Suppress warning if composite type contains any access
                       --  component, since the logical effect of modifying a
                       --  parameter may be achieved by modifying a referenced
!                      --  object. This rationale does not apply to private
!                      --  types, so we warn in that case.
  
                       elsif Is_Composite_Type (E1T)
+                        and then not Is_Private_Type (E1T)
                         and then Has_Access_Values (E1T)
                       then
                          null;
*************** package body Sem_Warn is
*** 1523,1528 ****
--- 1530,1546 ----
                          --  uninitialized component to get a better message.
  
                       elsif Nkind (Parent (UR)) = N_Selected_Component then
+                         --  Suppress possibly superfluous warning if component
+                         --  is known to exist and is partially initialized.
+ 
+                         if not Has_Discriminants (Etype (E1))
+                           and then
+                             Is_Partially_Initialized_Type
+                               (Etype (Parent (UR)), False)
+                         then
+                            goto Continue;
+                         end if;
+ 
                          Error_Msg_Node_2 := Selector_Name (Parent (UR));
  
                          if not Comes_From_Source (Parent (UR)) then
*************** package body Sem_Warn is
*** 1530,1547 ****
                                Comp : Entity_Id;
  
                             begin
!                               Comp := First_Entity (E1T);
                                while Present (Comp) loop
!                                  if Ekind (Comp) = E_Component
!                                    and then Nkind (Parent (Comp)) =
!                                               N_Component_Declaration
                                     and then No (Expression (Parent (Comp)))
                                   then
                                      Error_Msg_Node_2 := Comp;
                                      exit;
                                   end if;
  
!                                  Next_Entity (Comp);
                                end loop;
                             end;
                          end if;
--- 1548,1564 ----
                                Comp : Entity_Id;
  
                             begin
!                               Comp := First_Component (E1T);
                                while Present (Comp) loop
!                                  if Nkind (Parent (Comp)) =
!                                       N_Component_Declaration
                                     and then No (Expression (Parent (Comp)))
                                   then
                                      Error_Msg_Node_2 := Comp;
                                      exit;
                                   end if;
  
!                                  Next_Component (Comp);
                                end loop;
                             end;
                          end if;
*************** package body Sem_Warn is
*** 1551,1565 ****
                          --  For access types, UR was only set for dereferences,
                          --  so the issue is that the value may be null.
  
!                         if not Is_Trivial_Subprogram (Scope (E1)) then
!                            if not Warnings_Off_E1 then
!                               if Is_Access_Type (Etype (Parent (UR))) then
!                                  Error_Msg_N ("??`&.&` may be null!", UR);
!                               else
!                                  Error_Msg_N
!                                    ("??`&.&` may be referenced before "
!                                     & "it has a value!", UR);
!                               end if;
                             end if;
                          end if;
  
--- 1568,1580 ----
                          --  For access types, UR was only set for dereferences,
                          --  so the issue is that the value may be null.
  
!                         if not Warnings_Off_E1 then
!                            if Is_Access_Type (Etype (Parent (UR))) then
!                               Error_Msg_N ("??`&.&` may be null!", UR);
!                            else
!                               Error_Msg_N
!                                 ("??`&.&` may be referenced before "
!                                  & "it has a value!", UR);
                             end if;
                          end if;
  
*************** package body Sem_Warn is
*** 1685,1691 ****
                and then ((Ekind (E1) /= E_Variable
                            and then Ekind (E1) /= E_Constant
                            and then Ekind (E1) /= E_Component)
!                          or else not Is_Task_Type (E1T))
  
                --  For subunits, only place warnings on the main unit itself,
                --  since parent units are not completely compiled.
--- 1700,1710 ----
                and then ((Ekind (E1) /= E_Variable
                            and then Ekind (E1) /= E_Constant
                            and then Ekind (E1) /= E_Component)
! 
!                          --  Check that E1T is not a task or a composite type
!                          --  with a task component.
! 
!                          or else not Has_Task (E1T))
  
                --  For subunits, only place warnings on the main unit itself,
                --  since parent units are not completely compiled.
*************** package body Sem_Warn is
*** 2297,2303 ****
  
           procedure Check_Inner_Package (Pack : Entity_Id) is
              E  : Entity_Id;
!             Un : constant Node_Id := Sinfo.Unit (Cnode);
  
              function Check_Use_Clause (N : Node_Id) return Traverse_Result;
              --  If N is a use_clause for Pack, emit warning
--- 2316,2322 ----
  
           procedure Check_Inner_Package (Pack : Entity_Id) is
              E  : Entity_Id;
!             Un : constant Node_Id := Sinfo.Nodes.Unit (Cnode);
  
              function Check_Use_Clause (N : Node_Id) return Traverse_Result;
              --  If N is a use_clause for Pack, emit warning
*************** package body Sem_Warn is
*** 2390,2401 ****
  
              E1 := First_Entity (P);
              while Present (E1) loop
!                if Ekind (E1) = E_Package and then Renamed_Object (E1) = L then
                    Is_Visible_Renaming := not Is_Hidden (E1);
                    return E1;
  
                 elsif Ekind (E1) = E_Package
!                  and then No (Renamed_Object (E1))
                   and then not Is_Generic_Instance (E1)
                 then
                    R := Find_Package_Renaming (E1, L);
--- 2409,2420 ----
  
              E1 := First_Entity (P);
              while Present (E1) loop
!                if Ekind (E1) = E_Package and then Renamed_Entity (E1) = L then
                    Is_Visible_Renaming := not Is_Hidden (E1);
                    return E1;
  
                 elsif Ekind (E1) = E_Package
!                  and then No (Renamed_Entity (E1))
                   and then not Is_Generic_Instance (E1)
                 then
                    R := Find_Package_Renaming (E1, L);
*************** package body Sem_Warn is
*** 3015,3021 ****
        --  if we have seen the address of the subprogram being taken, or if the
        --  subprogram is used as a generic actual (in the latter cases the
        --  context may force use of IN OUT, even if the parameter is not
!       --  modifies for this particular case.
  
        -----------------------
        -- No_Warn_On_In_Out --
--- 3034,3040 ----
        --  if we have seen the address of the subprogram being taken, or if the
        --  subprogram is used as a generic actual (in the latter cases the
        --  context may force use of IN OUT, even if the parameter is not
!       --  modified for this particular case.
  
        -----------------------
        -- No_Warn_On_In_Out --
*************** package body Sem_Warn is
*** 3075,3081 ****
              --  Here we generate the warning
  
              else
!                --  If -gnatwk is set then output message that we could be IN
  
                 if not Is_Trivial_Subprogram (Scope (E1)) then
                    if Warn_On_Constant then
--- 3094,3100 ----
              --  Here we generate the warning
  
              else
!                --  If -gnatwk is set then output message that it could be IN
  
                 if not Is_Trivial_Subprogram (Scope (E1)) then
                    if Warn_On_Constant then
*************** package body Sem_Warn is
*** 3275,3295 ****
  
              elsif Warnings_Off_Used_Unmodified (E) then
                 Error_Msg_NE
!                  ("?W?could use Unmodified instead of "
                    & "Warnings Off for &", Pragma_Identifier (N), E);
  
              --  Used only in context where Unreferenced would have worked
  
              elsif Warnings_Off_Used_Unreferenced (E) then
                 Error_Msg_NE
!                  ("?W?could use Unreferenced instead of "
                    & "Warnings Off for &", Pragma_Identifier (N), E);
  
              --  Not used at all
  
              else
                 Error_Msg_NE
!                  ("?W?pragma Warnings Off for & unused, "
                    & "could be omitted", N, E);
              end if;
           end;
--- 3294,3314 ----
  
              elsif Warnings_Off_Used_Unmodified (E) then
                 Error_Msg_NE
!                  ("?.w?could use Unmodified instead of "
                    & "Warnings Off for &", Pragma_Identifier (N), E);
  
              --  Used only in context where Unreferenced would have worked
  
              elsif Warnings_Off_Used_Unreferenced (E) then
                 Error_Msg_NE
!                  ("?.w?could use Unreferenced instead of "
                    & "Warnings Off for &", Pragma_Identifier (N), E);
  
              --  Not used at all
  
              else
                 Error_Msg_NE
!                  ("?.w?pragma Warnings Off for & unused, "
                    & "could be omitted", N, E);
              end if;
           end;
*************** package body Sem_Warn is
*** 3651,3656 ****
--- 3670,3678 ----
     ---------------------------------
  
     procedure Warn_On_Overlapping_Actuals (Subp : Entity_Id; N : Node_Id) is
+       function Explicitly_By_Reference (Formal_Id : Entity_Id) return Boolean;
+       --  Returns True iff the type of Formal_Id is explicitly by-reference
+ 
        function Refer_Same_Object
          (Act1 : Node_Id;
           Act2 : Node_Id) return Boolean;
*************** package body Sem_Warn is
*** 3662,3667 ****
--- 3684,3707 ----
        --  object_name is known to refer to the same object as the other name
        --  (RM 6.4.1(6.11/3))
  
+       -----------------------------
+       -- Explicitly_By_Reference --
+       -----------------------------
+ 
+       function Explicitly_By_Reference
+         (Formal_Id : Entity_Id)
+          return Boolean
+       is
+          Typ : constant Entity_Id := Underlying_Type (Etype (Formal_Id));
+       begin
+          if Present (Typ) then
+             return Is_By_Reference_Type (Typ)
+               or else Convention (Typ) = Convention_Ada_Pass_By_Reference;
+          else
+             return False;
+          end if;
+       end Explicitly_By_Reference;
+ 
        -----------------------
        -- Refer_Same_Object --
        -----------------------
*************** package body Sem_Warn is
*** 3678,3701 ****
  
        --  Local variables
  
!       Act1      : Node_Id;
!       Act2      : Node_Id;
!       Form1     : Entity_Id;
!       Form2     : Entity_Id;
  
     --  Start of processing for Warn_On_Overlapping_Actuals
  
     begin
  
!       if Ada_Version < Ada_2012 and then not Warn_On_Overlap then
           return;
-       end if;
  
!       --  Exclude calls rewritten as enumeration literals
  
!       if Nkind (N) not in N_Subprogram_Call
!         and then Nkind (N) /= N_Entry_Call_Statement
!       then
           return;
        end if;
  
--- 3718,3739 ----
  
        --  Local variables
  
!       Act1  : Node_Id;
!       Act2  : Node_Id;
!       Form1 : Entity_Id;
!       Form2 : Entity_Id;
  
     --  Start of processing for Warn_On_Overlapping_Actuals
  
     begin
+       --  Exclude calls rewritten as enumeration literals
  
!       if Nkind (N) not in N_Subprogram_Call | N_Entry_Call_Statement then
           return;
  
!       --  Guard against previous errors
  
!       elsif Error_Posted (N) then
           return;
        end if;
  
*************** package body Sem_Warn is
*** 3726,3900 ****
        Form1 := First_Formal (Subp);
        Act1  := First_Actual (N);
        while Present (Form1) and then Present (Act1) loop
-          if Is_Generic_Type (Etype (Act1)) then
-             return;
-          end if;
- 
-          --  One of the formals must be either (in)-out or composite.
-          --  The other must be (in)-out.
- 
-          if Is_Elementary_Type (Etype (Act1))
-            and then Ekind (Form1) = E_In_Parameter
-          then
-             null;
- 
-          else
-             Form2 := Next_Formal (Form1);
-             Act2  := Next_Actual (Act1);
-             while Present (Form2) and then Present (Act2) loop
-                if Refer_Same_Object (Act1, Act2) then
-                   if Is_Generic_Type (Etype (Act2)) then
-                      return;
-                   end if;
  
!                   --  First case : two writable elementary parameters
!                   --  that overlap.
! 
!                   if (Is_Elementary_Type (Etype (Form1))
!                     and then Is_Elementary_Type (Etype (Form2))
!                     and then Ekind (Form1) /= E_In_Parameter
!                     and then Ekind (Form2) /= E_In_Parameter)
! 
!                   --  Second case : two composite parameters that overlap,
!                   --  one of which is writable.
! 
!                     or else (Is_Composite_Type (Etype (Form1))
!                      and then Is_Composite_Type (Etype (Form2))
!                      and then (Ekind (Form1) /= E_In_Parameter
!                        or else Ekind (Form2) /= E_In_Parameter))
! 
!                   --  Third case : an elementary writable parameter that
!                   --  overlaps a composite one.
  
!                     or else (Is_Elementary_Type (Etype (Form1))
!                      and then Ekind (Form1) /= E_In_Parameter
!                      and then Is_Composite_Type (Etype (Form2)))
  
!                    or else (Is_Elementary_Type (Etype (Form2))
!                      and then Ekind (Form2) /= E_In_Parameter
!                      and then Is_Composite_Type (Etype (Form1)))
!                   then
  
!                   --  Guard against previous errors
  
!                      if Error_Posted (N)
!                        or else No (Etype (Act1))
!                        or else No (Etype (Act2))
!                      then
!                         null;
  
!                      --  If the actual is a function call in prefix notation,
!                      --  there is no real overlap.
  
!                      elsif Nkind (Act2) = N_Function_Call then
!                         null;
  
!                      --  If type is explicitly not by-copy, assume that
!                      --  aliasing is intended.
  
!                      elsif
!                        Present (Underlying_Type (Etype (Form1)))
!                          and then
!                            (Is_By_Reference_Type
!                              (Underlying_Type (Etype (Form1)))
!                              or else
!                                Convention (Underlying_Type (Etype (Form1))) =
!                                             Convention_Ada_Pass_By_Reference)
!                      then
!                         null;
  
!                      --  Under Ada 2012 we only report warnings on overlapping
!                      --  arrays and record types if switch is set.
  
!                      elsif Ada_Version >= Ada_2012
!                        and then not Is_Elementary_Type (Etype (Form1))
!                        and then not Warn_On_Overlap
!                      then
!                         null;
  
!                      --  Here we may need to issue overlap message
  
!                      else
!                         Error_Msg_Warn :=
  
!                           --  Overlap checking is an error only in Ada 2012.
!                           --  For earlier versions of Ada, this is a warning.
  
!                           Ada_Version < Ada_2012
  
!                           --  Overlap is only illegal in Ada 2012 in the case
!                           --  of elementary types (passed by copy). For other
!                           --  types we always have a warning in all versions.
!                           --  This is clarified by AI12-0216.
  
!                           or else not
!                            (Is_Elementary_Type (Etype (Form1))
!                             and then Is_Elementary_Type (Etype (Form2)))
  
!                           --  debug flag -gnatd.E changes the error to a
!                           --  warning even in Ada 2012 mode.
  
!                           or else Error_To_Warning;
  
!                         if Is_Elementary_Type (Etype (Act1))
!                           and then Ekind (Form2) = E_In_Parameter
!                         then
!                            null;  --  No real aliasing
  
!                         elsif Is_Elementary_Type (Etype (Act2))
!                           and then Ekind (Form2) = E_In_Parameter
!                         then
!                            null;  --  Ditto
  
!                         --  If the call was written in prefix notation, and
!                         --  thus its prefix before rewriting was a selected
!                         --  component, count only visible actuals in call.
  
!                         elsif Is_Entity_Name (First_Actual (N))
!                           and then Nkind (Original_Node (N)) = Nkind (N)
!                           and then Nkind (Name (Original_Node (N))) =
!                                                         N_Selected_Component
!                           and then
!                             Is_Entity_Name (Prefix (Name (Original_Node (N))))
!                           and then
!                             Entity (Prefix (Name (Original_Node (N)))) =
!                               Entity (First_Actual (N))
!                         then
!                            if Act1 = First_Actual (N) then
!                               Error_Msg_FE
!                                 ("<I<`IN OUT` prefix overlaps with "
!                                  & "actual for&", Act1, Form2);
  
!                            else
!                               --  For greater clarity, give name of formal
  
!                               Error_Msg_Node_2 := Form2;
!                               Error_Msg_FE
!                                 ("<I<writable actual for & overlaps with "
!                                  & "actual for&", Act1, Form2);
!                            end if;
  
!                         else
!                            --  For greater clarity, give name of formal
  
!                            Error_Msg_Node_2 := Form2;
  
!                            --  This is one of the messages
  
!                            Error_Msg_FE
!                              ("<I<writable actual for & overlaps with "
!                               & "actual for&", Act1, Form1);
!                         end if;
!                      end if;
                    end if;
- 
-                   return;
                 end if;
  
!                Next_Formal (Form2);
!                Next_Actual (Act2);
!             end loop;
!          end if;
  
           Next_Formal (Form1);
           Next_Actual (Act1);
--- 3764,3878 ----
        Form1 := First_Formal (Subp);
        Act1  := First_Actual (N);
        while Present (Form1) and then Present (Act1) loop
  
!          Form2 := Next_Formal (Form1);
!          Act2  := Next_Actual (Act1);
!          while Present (Form2) and then Present (Act2) loop
  
!             --  Ignore formals of generic types; they will be examined when
!             --  instantiated.
  
!             if Is_Generic_Type (Etype (Form1))
!               or else Is_Generic_Type (Etype (Form2))
!             then
!                null;
  
!             elsif Refer_Same_Object (Act1, Act2) then
  
!                --  Case 1: two writable elementary parameters that overlap
  
!                if (Is_Elementary_Type (Etype (Form1))
!                  and then Is_Elementary_Type (Etype (Form2))
!                  and then Ekind (Form1) /= E_In_Parameter
!                  and then Ekind (Form2) /= E_In_Parameter)
  
!                --  Case 2: two composite parameters that overlap, one of
!                --  which is writable.
  
!                  or else (Is_Composite_Type (Etype (Form1))
!                   and then Is_Composite_Type (Etype (Form2))
!                   and then (Ekind (Form1) /= E_In_Parameter
!                     or else Ekind (Form2) /= E_In_Parameter))
  
!                --  Case 3: an elementary writable parameter that overlaps
!                --  a composite one.
  
!                  or else (Is_Elementary_Type (Etype (Form1))
!                   and then Ekind (Form1) /= E_In_Parameter
!                   and then Is_Composite_Type (Etype (Form2)))
  
!                 or else (Is_Elementary_Type (Etype (Form2))
!                   and then Ekind (Form2) /= E_In_Parameter
!                   and then Is_Composite_Type (Etype (Form1)))
!                then
  
!                   --  Guard against previous errors
  
!                   if No (Etype (Act1))
!                     or else No (Etype (Act2))
!                   then
!                      null;
  
!                   --  If type is explicitly by-reference, then it is not
!                   --  covered by the legality rule, which only applies to
!                   --  elementary types. Actually, the aliasing is most
!                   --  likely intended, so don't emit a warning either.
  
!                   elsif Explicitly_By_Reference (Form1)
!                     or else Explicitly_By_Reference (Form2)
!                   then
!                      null;
  
!                   --  We only report warnings on overlapping arrays and record
!                   --  types if switch is set.
  
!                   elsif not Warn_On_Overlap
!                     and then not (Is_Elementary_Type (Etype (Form1))
!                                     and then
!                                   Is_Elementary_Type (Etype (Form2)))
!                   then
!                      null;
  
!                   --  Here we may need to issue overlap message
  
!                   else
!                      Error_Msg_Warn :=
  
!                        --  Overlap checking is an error only in Ada 2012. For
!                        --  earlier versions of Ada, this is a warning.
  
!                        Ada_Version < Ada_2012
  
!                        --  Overlap is only illegal since Ada 2012 and only for
!                        --  elementary types (passed by copy). For other types
!                        --  we always have a warning in all versions. This is
!                        --  clarified by AI12-0216.
  
!                        or else not
!                         (Is_Elementary_Type (Etype (Form1))
!                          and then Is_Elementary_Type (Etype (Form2)))
  
!                        --  debug flag -gnatd.E changes the error to a warning
!                        --  even in Ada 2012 mode.
  
!                        or else Error_To_Warning;
  
!                      --  For greater clarity, give name of formal
  
!                      Error_Msg_Node_2 := Form2;
  
!                      --  This is one of the messages
  
!                      Error_Msg_FE
!                        ("<.i<writable actual for & overlaps with actual for &",
!                         Act1, Form1);
                    end if;
                 end if;
+             end if;
  
!             Next_Formal (Form2);
!             Next_Actual (Act2);
!          end loop;
  
           Next_Formal (Form1);
           Next_Actual (Act1);
*************** package body Sem_Warn is
*** 4243,4253 ****
                 if Nkind (Par) = N_Op_Eq then
                    Error_Msg_N
                      ("suspicious equality test with modified version of "
!                      & "same object?T?", Par);
                 else
                    Error_Msg_N
                      ("suspicious inequality test with modified version of "
!                      & "same object?T?", Par);
                 end if;
              end if;
           end if;
--- 4221,4231 ----
                 if Nkind (Par) = N_Op_Eq then
                    Error_Msg_N
                      ("suspicious equality test with modified version of "
!                      & "same object?.t?", Par);
                 else
                    Error_Msg_N
                      ("suspicious inequality test with modified version of "
!                      & "same object?.t?", Par);
                 end if;
              end if;
           end if;
*************** package body Sem_Warn is
*** 4262,4269 ****
       (Return_Node : Node_Id;
        Scope_Id    : Entity_Id)
     is
!       Form  : Entity_Id;
!       Form2 : Entity_Id;
  
     begin
        --  Ignore if procedure or return statement does not come from source
--- 4240,4246 ----
       (Return_Node : Node_Id;
        Scope_Id    : Entity_Id)
     is
!       Form : Entity_Id;
  
     begin
        --  Ignore if procedure or return statement does not come from source
*************** package body Sem_Warn is
*** 4274,4279 ****
--- 4251,4276 ----
           return;
        end if;
  
+       --  Before we issue the warning, add an ad hoc defence against the most
+       --  common case of false positives with this warning which is the case
+       --  where there is a Boolean OUT parameter that has been set, and whose
+       --  meaning is "ignore the values of the other parameters". We can't of
+       --  course reliably tell this case at compile time, but the following
+       --  test kills a lot of false positives, without generating a significant
+       --  number of false negatives (missed real warnings).
+ 
+       Form := First_Formal (Scope_Id);
+       while Present (Form) loop
+          if Ekind (Form) = E_Out_Parameter
+            and then Root_Type (Etype (Form)) = Standard_Boolean
+            and then not Never_Set_In_Source_Check_Spec (Form)
+          then
+             return;
+          end if;
+ 
+          Next_Formal (Form);
+       end loop;
+ 
        --  Loop through formals
  
        Form := First_Formal (Scope_Id);
*************** package body Sem_Warn is
*** 4288,4314 ****
             and then Is_Scalar_Type (Etype (Form))
             and then not Present (Unset_Reference (Form))
           then
-             --  Before we issue the warning, an add ad hoc defence against the
-             --  most common case of false positives with this warning which is
-             --  the case where there is a Boolean OUT parameter that has been
-             --  set, and whose meaning is "ignore the values of the other
-             --  parameters". We can't of course reliably tell this case at
-             --  compile time, but the following test kills a lot of false
-             --  positives, without generating a significant number of false
-             --  negatives (missed real warnings).
- 
-             Form2 := First_Formal (Scope_Id);
-             while Present (Form2) loop
-                if Ekind (Form2) = E_Out_Parameter
-                  and then Root_Type (Etype (Form2)) = Standard_Boolean
-                  and then not Never_Set_In_Source_Check_Spec (Form2)
-                then
-                   return;
-                end if;
- 
-                Next_Formal (Form2);
-             end loop;
- 
              --  Here all conditions are met, record possible unset reference
  
              Set_Unset_Reference (Form, Return_Node);
--- 4285,4290 ----
*************** package body Sem_Warn is
*** 4624,4633 ****
                          if Nkind (Parent (LA)) in N_Parameter_Association
                                                  | N_Procedure_Call_Statement
                          then
!                            Error_Msg_NE
!                              ("?m?& modified by call, but value might not be "
!                               & "referenced", LA, Ent);
! 
                          else
                             Error_Msg_NE -- CODEFIX
                               ("?m?possibly useless assignment to&, value "
--- 4600,4610 ----
                          if Nkind (Parent (LA)) in N_Parameter_Association
                                                  | N_Procedure_Call_Statement
                          then
!                            if Warn_On_All_Unread_Out_Parameters then
!                               Error_Msg_NE
!                                 ("?m?& modified by call, but value might not "
!                                  & "be referenced", LA, Ent);
!                            end if;
                          else
                             Error_Msg_NE -- CODEFIX
                               ("?m?possibly useless assignment to&, value "
diff -Nrcpad gcc-11.3.0/gcc/ada/sem_warn.ads gcc-12.1.0/gcc/ada/sem_warn.ads
*** gcc-11.3.0/gcc/ada/sem_warn.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sem_warn.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/set_targ.adb gcc-12.1.0/gcc/ada/set_targ.adb
*** gcc-11.3.0/gcc/ada/set_targ.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/set_targ.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2013-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2013-2022, 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- --
*************** package body Set_Targ is
*** 309,315 ****
              Write_Str ("pragma Float_Representation (");
  
              case Float_Rep is
-                when AAMP        => Write_Str ("AAMP");
                 when IEEE_Binary => Write_Str ("IEEE");
              end case;
  
--- 309,314 ----
*************** package body Set_Targ is
*** 532,538 ****
              AddC (' ');
  
              case E.FLOAT_REP is
-                when AAMP        => AddC ('A');
                 when IEEE_Binary => AddC ('I');
              end case;
  
--- 531,536 ----
*************** package body Set_Targ is
*** 795,803 ****
                 when 'I'    =>
                    E.FLOAT_REP := IEEE_Binary;
  
-                when 'A'    =>
-                   E.FLOAT_REP := AAMP;
- 
                 when others =>
                    FailN ("bad float rep field for");
              end case;
--- 793,798 ----
*************** begin
*** 880,886 ****
           argv := save_argv;
           argc := save_argc;
        else
!          --  Case of a non gcc compiler, e.g. gnat2why or gnat2scil
           argv := gnat_argv;
           argc := gnat_argc;
        end if;
--- 875,881 ----
           argv := save_argv;
           argc := save_argc;
        else
!          --  Case of a non-GCC compiler, e.g. gnat2why or gnat2scil
           argv := gnat_argv;
           argc := gnat_argc;
        end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/set_targ.ads gcc-12.1.0/gcc/ada/set_targ.ads
*** gcc-11.3.0/gcc/ada/set_targ.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/set_targ.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2013-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2013-2022, 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- --
***************
*** 25,31 ****
  
  --  This package handles setting target dependent parameters. If the -gnatet
  --  switch is not set, then these values are taken from the back end (via the
! --  routines in Get_Targ, and the enumerate_modes routine in misc.c). If the
  --  switch is set, then the values are read from the target.atp file in the
  --  current directory (usually written with the Write_Target_Dependent_Values
  --  procedure defined in this package).
--- 25,31 ----
  
  --  This package handles setting target dependent parameters. If the -gnatet
  --  switch is not set, then these values are taken from the back end (via the
! --  routines in Get_Targ, and the enumerate_modes routine in misc.cc). If the
  --  switch is set, then the values are read from the target.atp file in the
  --  current directory (usually written with the Write_Target_Dependent_Values
  --  procedure defined in this package).
***************
*** 36,42 ****
  --  of Wide_Character_Type uses twice the size of a C char, instead of the
  --  size of wchar_t, since this corresponds to expected Ada usage.
  
- with Einfo; use Einfo;
  with Stand; use Stand;
  with Types; use Types;
  
--- 36,41 ----
*************** package Set_Targ is
*** 89,95 ****
     -------------------------------------
  
     --  This table contains the list of modes supported by the back-end as
!    --  provided by the back end routine enumerate_modes in misc.c. Note that
     --  we only store floating-point modes (see Register_Float_Type).
  
     type FPT_Mode_Entry is record
--- 88,94 ----
     -------------------------------------
  
     --  This table contains the list of modes supported by the back-end as
!    --  provided by the back end routine enumerate_modes in misc.cc. Note that
     --  we only store floating-point modes (see Register_Float_Type).
  
     type FPT_Mode_Entry is record
*************** package Set_Targ is
*** 144,155 ****
     --
     --       name  digs float_rep precision alignment
     --
!    --     where name is the string name of the type (which can have single
!    --     spaces embedded in the name (e.g. long double). The name is followed
!    --     by at least two blanks. The following fields are as described above
!    --     for a Mode_Entry (where float_rep is I/V/A for IEEE-754-Binary,
!    --     Vax_Native, AAMP), fields are separated by at least one blank, and
!    --     a LF character immediately follows the alignment field.
     --
     --     ??? We do not write the size for backward compatibility reasons,
     --     which means that target.atp will not be a complete description for
--- 143,156 ----
     --
     --       name  digs float_rep precision alignment
     --
!    --     where name is the string name of the type (which can have
!    --     single spaces embedded in the name (e.g. long double). The
!    --     name is followed by at least two blanks. The following fields
!    --     are as described above for a Mode_Entry (where float_rep is
!    --     I for IEEE-754-Binary, which is the only Float_Rep_Kind
!    --     currently supported), fields are separated by at least one
!    --     blank, and a LF character immediately follows the alignment
!    --     field.
     --
     --     ??? We do not write the size for backward compatibility reasons,
     --     which means that target.atp will not be a complete description for
diff -Nrcpad gcc-11.3.0/gcc/ada/sfn_scan.adb gcc-12.1.0/gcc/ada/sfn_scan.adb
*** gcc-11.3.0/gcc/ada/sfn_scan.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sfn_scan.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sfn_scan.ads gcc-12.1.0/gcc/ada/sfn_scan.ads
*** gcc-11.3.0/gcc/ada/sfn_scan.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sfn_scan.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2000-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sigtramp-armdroid.c gcc-12.1.0/gcc/ada/sigtramp-armdroid.c
*** gcc-11.3.0/gcc/ada/sigtramp-armdroid.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sigtramp-armdroid.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                         Asm Implementation File                          *
   *                                                                          *
!  *           Copyright (C) 2015-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                         Asm Implementation File                          *
   *                                                                          *
!  *           Copyright (C) 2015-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/sigtramp-ios.c gcc-12.1.0/gcc/ada/sigtramp-ios.c
*** gcc-11.3.0/gcc/ada/sigtramp-ios.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sigtramp-ios.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                         Asm Implementation File                          *
   *                                                                          *
!  *           Copyright (C) 2015-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                         Asm Implementation File                          *
   *                                                                          *
!  *           Copyright (C) 2015-2022, 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- *
***************
*** 71,76 ****
--- 71,80 ----
  
  /* sigtramp stub providing unwind info for common registers.  */
  
+ #if defined(__cplusplus)
+ extern "C" {
+ #endif
+ 
  extern void __gnat_sigtramp_common
    (int signo, void *siginfo, void *sigcontext,
     __sigtramphandler_t * handler);
*************** void __gnat_sigtramp (int signo, void *s
*** 87,92 ****
--- 91,100 ----
    __gnat_sigtramp_common (signo, si, mcontext, handler);
  }
  
+ #if defined(__cplusplus)
+ }
+ #endif
+ 
  /* asm string construction helpers.  */
  
  #define STR(TEXT) #TEXT
diff -Nrcpad gcc-11.3.0/gcc/ada/sigtramp-qnx.c gcc-12.1.0/gcc/ada/sigtramp-qnx.c
*** gcc-11.3.0/gcc/ada/sigtramp-qnx.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sigtramp-qnx.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                         Asm Implementation File                          *
   *                                                                          *
!  *           Copyright (C) 2017-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                         Asm Implementation File                          *
   *                                                                          *
!  *           Copyright (C) 2017-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/sigtramp-vxworks-target.h gcc-12.1.0/gcc/ada/sigtramp-vxworks-target.h
*** gcc-11.3.0/gcc/ada/sigtramp-vxworks-target.h	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/sigtramp-vxworks-target.h	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,585 ----
+ /****************************************************************************
+  *                                                                          *
+  *                         GNAT COMPILER COMPONENTS                         *
+  *                                                                          *
+  *                      S I G T R A M P - T A R G E T                       *
+  *                                                                          *
+  *                     Asm Implementation Include File                      *
+  *                                                                          *
+  *         Copyright (C) 2011-2022, Free Software Foundation, Inc.          *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+  * or FITNESS FOR A PARTICULAR PURPOSE.                                     *
+  *                                                                          *
+  * 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.               *
+  *                                                                          *
+  * In particular,  you can freely  distribute your programs  built with the *
+  * GNAT Pro compiler, including any required library run-time units,  using *
+  * any licensing terms  of your choosing.  See the AdaCore Software License *
+  * for full details.                                                        *
+  *                                                                          *
+  * GNAT was originally developed  by the GNAT team at  New York University. *
+  * Extensive contributions were provided by Ada Core Technologies Inc.      *
+  *                                                                          *
+  ****************************************************************************/
+ 
+ /***************************************************************
+  * VxWorks target specific part of the __gnat_sigtramp service *
+  ***************************************************************/
+ 
+ /* Note: This target specific part is kept in a separate file to avoid
+    duplication of its code for the vxworks and vxworks-vxsim asm
+    implementation files.  */
+ 
+ /* ---------------------------
+    -- And now the asm stubs --
+    ---------------------------
+ 
+    They all have a common structure with blocks of asm sequences queued one
+    after the others.  Typically:
+ 
+    SYMBOL_START
+ 
+    CFI_DIRECTIVES
+      CFI_DEF_CFA,
+      CFI_COMMON_REGISTERS,
+      ...
+ 
+    STUB_BODY
+      asm code to establish frame, setup the cfa reg value,
+      call the real signal handler, ...
+ 
+    SYMBOL_END
+ */
+ 
+ /*--------------------------------
+   -- Misc constants and helpers --
+   -------------------------------- */
+ 
+ /* asm string construction helpers.  */
+ 
+ #define STR(TEXT) #TEXT
+ /* stringify expanded TEXT, surrounding it with double quotes.  */
+ 
+ #define S(E) STR(E)
+ /* stringify E, which will resolve as text but may contain macros
+    still to be expanded.  */
+ 
+ /* asm (TEXT) outputs <tab>TEXT. These facilitate the output of
+    multine contents:  */
+ #define TAB(S) "\t" S
+ #define CR(S)  S "\n"
+ 
+ #undef TCR
+ #define TCR(S) TAB(CR(S))
+ 
+ /* REGNO constants, dwarf column numbers for registers of interest.  */
+ 
+ #if defined (__PPC__)
+ 
+ #define REGNO_LR  65
+ #define REGNO_CTR 66
+ #define REGNO_CR  70
+ #define REGNO_XER 76
+ #define REGNO_GR(N) (N)
+ 
+ #define REGNO_PC  67  /* ARG_POINTER_REGNUM  */
+ 
+ #define FUNCTION "@function"
+ 
+ #elif defined (ARMEL)
+ 
+ #define REGNO_G_REG_OFFSET(N) (N)
+ 
+ #define FUNCTION "%function"
+ 
+ #ifdef __aarch64__
+ #define REGNO_PC_OFFSET  96  /* DWARF_ALT_FRAME_RETURN_COLUMN */
+ #else
+ #define REGNO_PC_OFFSET  15  /* PC_REGNUM */
+ #endif
+ 
+ /* Mapping of CFI Column, Gcc Regno, Signal context offset for _LP64
+ 
+    Name	   CFI	   GCC	   SCTX
+    G0-G30  0-30    0-30    0-30
+    SP      31      31      31
+    PC                      32
+    V0-V31  64-95   32-63   N/A
+ 
+ */
+ 
+ #elif defined (i386)
+ 
+ /* These are the cfi colunm numbers */
+ 
+ #define REGNO_EDI 7
+ #define REGNO_ESI 6
+ #define REGNO_EBP 5
+ #define REGNO_ESP 4
+ #define REGNO_EBX 3
+ #define REGNO_EDX 2
+ #define REGNO_ECX 1
+ #define REGNO_EAX 0
+ #define REGNO_EFLAGS 9
+ #define REGNO_SET_PC 8 /* aka %eip */
+ 
+ #define FUNCTION "@function"
+ 
+ /* Mapping of CFI Column, Gcc Regno, Signal context offset for 32bit
+ 
+    Name	   CFI	   GCC	   SCTX
+    %eax	    0	    0	    7
+    %ecx	    1	    2	    6
+    %edx	    2	    1	    5
+    %ebx     3	    3	    4
+    %esp	    4	    7	    3
+    %ebp	    5	    6	    2
+    %esi	    6	    4	    1
+    %edi	    7	    5	    0
+    %eflags  9	   17 	    8
+    %eip	    8	  n/a	    9
+ 
+ 
+    In general:
+    There is no unique numbering for the x86 architecture.  It's parameterized
+    by DWARF_FRAME_REGNUM, which is DBX_REGISTER_NUMBER except for Windows, and
+    the latter depends on the platform.
+ */
+ 
+ #elif defined (__x86_64__)
+ 
+ /* These are the cfi colunm numbers */
+ 
+ #define REGNO_RAX 0
+ #define REGNO_RDX 1
+ #define REGNO_RCX 2
+ #define REGNO_RBX 3
+ #define REGNO_RSI 4
+ #define REGNO_RDI 5
+ #define REGNO_RBP 6
+ #define REGNO_RSP 7
+ #define REGNO_R8 8
+ #define REGNO_R9 9
+ #define REGNO_R10 10
+ #define REGNO_R11 11
+ #define REGNO_R12 12
+ #define REGNO_R13 13
+ #define REGNO_R14 14
+ #define REGNO_R15 15
+ #define REGNO_RPC 16 /* aka %rip */
+ #define REGNO_EFLAGS 49
+ #define REGNO_FS 54
+ 
+ #define FUNCTION "@function"
+ 
+ #else
+ Not_implemented;
+ #endif /* REGNO constants */
+ 
+ 
+ /*------------------------------
+   -- Stub construction blocks --
+   ------------------------------ */
+ 
+ /* CFA setup block
+    ---------------
+    Only non-volatile registers are suitable for a CFA base. These are the
+    only ones we can expect to be able retrieve from the unwinding context
+    while walking up the chain, saved by at least the bottom-most exception
+    propagation services.  We set a non-volatile register to the value we
+    need in the stub body that follows.  */
+ 
+ #if defined (__PPC__)
+ 
+ /* Use r15 for PPC.  Note that r14 is inappropriate here, even though it
+    is non-volatile according to the ABI, because GCC uses it as an extra
+    SCRATCH on SPE targets.  */
+ 
+ #define CFA_REG 15
+ 
+ #elif defined (ARMEL)
+ 
+ #ifdef __aarch64__
+ #define CFA_REG 19
+ #else
+ /* Use r8 for ARM.  Any of r4-r8 should work.  */
+ #define CFA_REG 8
+ #endif
+ 
+ #elif defined (i386)
+ 
+ #define CFA_REG 7
+ 
+ #elif defined (__x86_64__)
+ 
+ /* R15 register */
+ #define CFA_REG 15
+ 
+ #else
+ Not_implemented;
+ #endif /* CFA setup block */
+ 
+ #define CFI_DEF_CFA \
+ CR(".cfi_def_cfa " S(CFA_REG) ", 0")
+ 
+ /* Register location blocks
+    ------------------------
+    Rules to find registers of interest from the CFA. This should comprise
+    all the non-volatile registers relevant to the interrupted context.
+ 
+    Note that we include r1 in this set, unlike the libgcc unwinding
+    fallbacks.  This is useful for fallbacks to allow the use of r1 in CFI
+    expressions and the absence of rule for r1 gets compensated by using the
+    target CFA instead.  We don't need the expression facility here and
+    setup a fake CFA to allow very simple offset expressions, so having a
+    rule for r1 is the proper thing to do.  We for sure have observed
+    crashes in some cases without it.  */
+ 
+ #if defined (__PPC__)
+ 
+ #define COMMON_CFI(REG) \
+   ".cfi_offset " S(REGNO_##REG) "," S(REG_SET_##REG)
+ 
+ #define CFI_COMMON_REGS \
+ CR("# CFI for common registers\n") \
+ TCR(COMMON_CFI(GR(0)))  \
+ TCR(COMMON_CFI(GR(1)))  \
+ TCR(COMMON_CFI(GR(2)))  \
+ TCR(COMMON_CFI(GR(3)))  \
+ TCR(COMMON_CFI(GR(4)))  \
+ TCR(COMMON_CFI(GR(5)))  \
+ TCR(COMMON_CFI(GR(6)))  \
+ TCR(COMMON_CFI(GR(7)))  \
+ TCR(COMMON_CFI(GR(8)))  \
+ TCR(COMMON_CFI(GR(9)))  \
+ TCR(COMMON_CFI(GR(10)))  \
+ TCR(COMMON_CFI(GR(11)))  \
+ TCR(COMMON_CFI(GR(12)))  \
+ TCR(COMMON_CFI(GR(13)))  \
+ TCR(COMMON_CFI(GR(14))) \
+ TCR(COMMON_CFI(GR(15))) \
+ TCR(COMMON_CFI(GR(16))) \
+ TCR(COMMON_CFI(GR(17))) \
+ TCR(COMMON_CFI(GR(18))) \
+ TCR(COMMON_CFI(GR(19))) \
+ TCR(COMMON_CFI(GR(20))) \
+ TCR(COMMON_CFI(GR(21))) \
+ TCR(COMMON_CFI(GR(22))) \
+ TCR(COMMON_CFI(GR(23))) \
+ TCR(COMMON_CFI(GR(24))) \
+ TCR(COMMON_CFI(GR(25))) \
+ TCR(COMMON_CFI(GR(26))) \
+ TCR(COMMON_CFI(GR(27))) \
+ TCR(COMMON_CFI(GR(28))) \
+ TCR(COMMON_CFI(GR(29))) \
+ TCR(COMMON_CFI(GR(30))) \
+ TCR(COMMON_CFI(GR(31))) \
+ TCR(COMMON_CFI(LR)) \
+ TCR(COMMON_CFI(CR)) \
+ TCR(COMMON_CFI(CTR)) \
+ TCR(COMMON_CFI(XER)) \
+ TCR(COMMON_CFI(PC)) \
+ TCR(".cfi_return_column " S(REGNO_PC))
+ 
+ /* Trampoline body block
+    ---------------------  */
+ 
+ #if !defined (__PPC64__)
+ #define SIGTRAMP_BODY \
+ CR("") \
+ TCR("# Allocate frame and save the non-volatile") \
+ TCR("# registers we're going to modify") \
+ TCR("stwu %r1,-16(%r1)")  \
+ TCR("mflr %r0")	\
+ TCR("stw %r0,20(%r1)")	\
+ TCR("stw %r" S(CFA_REG) ",8(%r1)")	\
+ TCR("")			\
+ TCR("# Setup CFA_REG = context, which we'll retrieve as our CFA value") \
+ TCR("mr %r" S(CFA_REG) ", %r7") \
+ TCR("")			\
+ TCR("# Call the real handler. The signo, siginfo and sigcontext") \
+ TCR("# arguments are the same as those we received in r3, r4 and r5") \
+ TCR("mtctr %r6") \
+ TCR("bctrl")	\
+ TCR("")		\
+ TCR("# Restore our callee-saved items, release our frame and return") \
+ TCR("lwz %r" S(CFA_REG) ",8(%r1)")	\
+ TCR("lwz %r0,20(%r1)")	\
+ TCR("mtlr %r0")		\
+ TCR("")			\
+ TCR("addi %r1,%r1,16")	\
+ TCR("blr")
+ #else
+ #define SIGTRAMP_BODY \
+ CR("") \
+ TCR(".LOC_SIGTMP_COM_0:") \
+ TCR("addis 2,12,.TOC.-.LOC_SIGTMP_COM_0@ha") \
+ TCR("addi 2,2,.TOC.-.LOC_SIGTMP_COM_0@l") \
+ TCR(".localentry	__gnat_sigtramp_common,.-__gnat_sigtramp_common") \
+ TCR("# Allocate frame and save the non-volatile") \
+ TCR("# registers we're going to modify") \
+ TCR("mflr %r0")	\
+ TCR("std %r0,16(%r1)")	\
+ TCR("stdu %r1,-32(%r1)")  \
+ TCR("std %r2,24(%r1)")	\
+ TCR("std %r" S(CFA_REG) ",8(%r1)")	\
+ TCR("")			\
+ TCR("# Setup CFA_REG = context, which we'll retrieve as our CFA value") \
+ TCR("mr %r" S(CFA_REG) ", %r7") \
+ TCR("")			\
+ TCR("# Call the real handler. The signo, siginfo and sigcontext") \
+ TCR("# arguments are the same as those we received in r3, r4 and r5") \
+ TCR("mr %r12,%r6") \
+ TCR("mtctr %r6") \
+ TCR("bctrl")	\
+ TCR("")		\
+ TCR("# Restore our callee-saved items, release our frame and return") \
+ TCR("ld %r" S(CFA_REG) ",8(%r1)")	\
+ TCR("ld %r2,24(%r1)")	\
+ TCR("addi %r1,%r1,32")  \
+ TCR("ld %r0,16(%r1)")	\
+ TCR("mtlr %r0")		\
+ TCR("blr")
+ #endif
+ 
+ #elif defined (ARMEL)
+ 
+ #define COMMON_CFI(REG) \
+   ".cfi_offset " S(REGNO_##REG) "," S(REG_SET_##REG)
+ 
+ #ifdef __aarch64__
+ #define CFI_COMMON_REGS \
+ CR("# CFI for common registers\n") \
+ TCR(COMMON_CFI(G_REG_OFFSET(0)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(1)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(2)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(3)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(4)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(5)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(6)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(7)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(8)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(9)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(10)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(11)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(12)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(13)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(14))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(15))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(16))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(17))) \
+ CR("# Leave alone R18, VxWorks reserved\n") \
+ TCR(COMMON_CFI(G_REG_OFFSET(19))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(20))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(21))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(22))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(23))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(24))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(25))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(26))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(27))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(28))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(29))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(30))) \
+ TCR(COMMON_CFI(G_REG_OFFSET(31))) \
+ TCR(COMMON_CFI(PC_OFFSET)) \
+ TCR(".cfi_return_column " S(REGNO_PC_OFFSET))
+ #else
+ #define CFI_COMMON_REGS \
+ CR("# CFI for common registers\n") \
+ TCR(COMMON_CFI(G_REG_OFFSET(0)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(1)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(2)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(3)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(4)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(5)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(6)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(7)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(8)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(9)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(10)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(11)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(12)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(13)))  \
+ TCR(COMMON_CFI(G_REG_OFFSET(14))) \
+ TCR(COMMON_CFI(PC_OFFSET)) \
+ TCR(".cfi_return_column " S(REGNO_PC_OFFSET))
+ #endif
+ 
+ /* Trampoline body block
+    ---------------------  */
+ #ifdef __aarch64__
+ #define SIGTRAMP_BODY \
+ CR("") \
+ TCR("# Allocate the frame (16bytes aligned) and push FP and LR") \
+ TCR("stp x29, x30, [sp, #-32]!") \
+ TCR("add x29, sp, 0") \
+ TCR("# Store register used to hold the CFA on stack (pro forma)") \
+ TCR("str x" S(CFA_REG) ", [sp, 16]")  \
+ TCR("# Set the CFA reg from the 5th arg") \
+ TCR("mov x" S(CFA_REG) ", x4") \
+ TCR("# Call the handler") \
+ TCR("blr x3") \
+ TCR("# Release our frame and return (should never get here!).") \
+ TCR("ldr x" S(CFA_REG) ", [sp, 16]") \
+ TCR("ldp x29, x30, [sp], 32") \
+ TCR("ret")
+ #else
+ #define SIGTRAMP_BODY \
+ CR("") \
+ TCR("# Allocate frame and save the non-volatile") \
+ TCR("# registers we're going to modify") \
+ TCR("mov	ip, sp") \
+ TCR("stmfd	sp!, {r"S(CFA_REG)", fp, ip, lr, pc}") \
+ TCR("# Setup CFA_REG = context, which we'll retrieve as our CFA value") \
+ TCR("ldr	r"S(CFA_REG)", [ip]") \
+ TCR("")                 \
+ TCR("# Call the real handler. The signo, siginfo and sigcontext") \
+ TCR("# arguments are the same as those we received in r0, r1 and r2") \
+ TCR("sub	fp, ip, #4") \
+ TCR("blx	r3") \
+ TCR("# Restore our callee-saved items, release our frame and return") \
+ TCR("ldmfd	sp, {r"S(CFA_REG)", fp, sp, pc}")
+ #endif
+ 
+ #elif defined (i386)
+ 
+ #if CPU == SIMNT || CPU == SIMPENTIUM || CPU == SIMLINUX
+ #define COMMON_CFI(REG) \
+   ".cfi_offset " S(REGNO_##REG) "," S(REG_SET_##REG)
+ #else
+ #define COMMON_CFI(REG) \
+   ".cfi_offset " S(REGNO_##REG) "," S(REG_##REG)
+ #endif
+ 
+ #define PC_CFI(REG) \
+   ".cfi_offset " S(REGNO_##REG) "," S(REG_##REG)
+ 
+ #define CFI_COMMON_REGS \
+ CR("# CFI for common registers\n") \
+ TCR(COMMON_CFI(EDI)) \
+ TCR(COMMON_CFI(ESI)) \
+ TCR(COMMON_CFI(EBP)) \
+ TCR(COMMON_CFI(ESP)) \
+ TCR(COMMON_CFI(EBX)) \
+ TCR(COMMON_CFI(EDX)) \
+ TCR(COMMON_CFI(ECX)) \
+ TCR(COMMON_CFI(EAX)) \
+ TCR(COMMON_CFI(EFLAGS)) \
+ TCR(PC_CFI(SET_PC)) \
+ TCR(".cfi_return_column " S(REGNO_SET_PC))
+ 
+ /* Trampoline body block
+    ---------------------  */
+ 
+ #define SIGTRAMP_BODY \
+ CR("") \
+ TCR("# Allocate frame and save the non-volatile") \
+ TCR("# registers we're going to modify") \
+ TCR("pushl	%ebp") \
+ TCR("movl	%esp, %ebp") \
+ TCR("pushl	%edi") \
+ TCR("subl	$24, %esp") \
+ TCR("# Setup CFA_REG = context, which we'll retrieve as our CFA value") \
+ TCR("movl	24(%ebp), %edi") \
+ TCR("# Call the real handler. The signo, siginfo and sigcontext") \
+ TCR("# arguments are the same as those we received") \
+ TCR("movl	16(%ebp), %eax") \
+ TCR("movl	%eax, 8(%esp)") \
+ TCR("movl	12(%ebp), %eax") \
+ TCR("movl	%eax, 4(%esp)") \
+ TCR("movl	8(%ebp), %eax") \
+ TCR("movl	%eax, (%esp)") \
+ TCR("call	*20(%ebp)") \
+ TCR("# Restore our callee-saved items, release our frame and return") \
+ TCR("popl	%edi") \
+ TCR("leave") \
+ TCR("ret")
+ 
+ #elif defined (__x86_64__)
+ 
+ #define COMMON_CFI(REG) \
+   ".cfi_offset " S(REGNO_##REG) "," S(REG_##REG)
+ 
+ #define CFI_COMMON_REGS \
+ CR("# CFI for common registers\n") \
+ TCR(COMMON_CFI(R15)) \
+ TCR(COMMON_CFI(R14)) \
+ TCR(COMMON_CFI(R13)) \
+ TCR(COMMON_CFI(R12)) \
+ TCR(COMMON_CFI(R11)) \
+ TCR(COMMON_CFI(R10)) \
+ TCR(COMMON_CFI(R9)) \
+ TCR(COMMON_CFI(R8)) \
+ TCR(COMMON_CFI(RDI)) \
+ TCR(COMMON_CFI(RSI)) \
+ TCR(COMMON_CFI(RBP)) \
+ TCR(COMMON_CFI(RSP)) \
+ TCR(COMMON_CFI(RBX)) \
+ TCR(COMMON_CFI(RDX)) \
+ TCR(COMMON_CFI(RCX)) \
+ TCR(COMMON_CFI(RAX)) \
+ TCR(COMMON_CFI(RPC)) \
+ TCR(".cfi_return_column " S(REGNO_RPC))
+ 
+ /* Trampoline body block
+    ---------------------  */
+ 
+ #define SIGTRAMP_BODY \
+ CR("") \
+ TCR("# Allocate frame and save the non-volatile") \
+ TCR("# registers we're going to modify") \
+ TCR("subq	$8, %rsp") \
+ TCR("# Setup CFA_REG = context, which we'll retrieve as our CFA value") \
+ TCR("movq	%r8, %r15") \
+ TCR("# Call the real handler. The signo, siginfo and sigcontext") \
+ TCR("# arguments are the same as those we received") \
+ TCR("call	*%rcx") \
+ TCR("# This part should never be executed") \
+ TCR("addq	$8, %rsp") \
+ TCR("ret")
+ 
+ #else
+ Not_implemented;
+ #endif /* CFI_COMMON_REGS and SIGTRAMP_BODY */
+ 
+ /* Symbol definition block
+    -----------------------  */
+ 
+ #ifdef __x86_64__
+ #define FUNC_ALIGN TCR(".p2align 4,,15")
+ #else
+ #define FUNC_ALIGN
+ #endif
+ 
+ #define SIGTRAMP_START(SYM) \
+ CR("# " S(SYM) " cfi trampoline") \
+ TCR(".type " S(SYM) ", "FUNCTION) \
+ CR("") \
+ FUNC_ALIGN \
+ CR(S(SYM) ":") \
+ TCR(".cfi_startproc") \
+ TCR(".cfi_signal_frame")
+ 
+ /* Symbol termination block
+    ------------------------  */
+ 
+ #define SIGTRAMP_END(SYM) \
+ CR(".cfi_endproc") \
+ TCR(".size " S(SYM) ", .-" S(SYM))
+ 
+ /*----------------------------
+   -- And now, the real code --
+   ---------------------------- */
+ 
+ /* Text section start.  The compiler isn't aware of that switch.  */
+ 
+ asm (".text\n"
+      TCR(".align 2"));
diff -Nrcpad gcc-11.3.0/gcc/ada/sigtramp-vxworks-target.inc gcc-12.1.0/gcc/ada/sigtramp-vxworks-target.inc
*** gcc-11.3.0/gcc/ada/sigtramp-vxworks-target.inc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sigtramp-vxworks-target.inc	Thu Jan  1 00:00:00 1970
***************
*** 1,585 ****
- /****************************************************************************
-  *                                                                          *
-  *                         GNAT COMPILER COMPONENTS                         *
-  *                                                                          *
-  *                      S I G T R A M P - T A R G E T                       *
-  *                                                                          *
-  *                     Asm Implementation Include File                      *
-  *                                                                          *
-  *         Copyright (C) 2011-2018, Free Software Foundation, Inc.          *
-  *                                                                          *
-  * GNAT is free software;  you can  redistribute it  and/or modify it under *
-  * terms of the  GNU General Public License as published  by the Free Soft- *
-  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
-  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
-  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
-  * or FITNESS FOR A PARTICULAR PURPOSE.                                     *
-  *                                                                          *
-  * 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.               *
-  *                                                                          *
-  * In particular,  you can freely  distribute your programs  built with the *
-  * GNAT Pro compiler, including any required library run-time units,  using *
-  * any licensing terms  of your choosing.  See the AdaCore Software License *
-  * for full details.                                                        *
-  *                                                                          *
-  * GNAT was originally developed  by the GNAT team at  New York University. *
-  * Extensive contributions were provided by Ada Core Technologies Inc.      *
-  *                                                                          *
-  ****************************************************************************/
- 
- /***************************************************************
-  * VxWorks target specific part of the __gnat_sigtramp service *
-  ***************************************************************/
- 
- /* Note: This target specific part is kept in a separate file to avoid
-    duplication of its code for the vxworks and vxworks-vxsim asm
-    implementation files.  */
- 
- /* ---------------------------
-    -- And now the asm stubs --
-    ---------------------------
- 
-    They all have a common structure with blocks of asm sequences queued one
-    after the others.  Typically:
- 
-    SYMBOL_START
- 
-    CFI_DIRECTIVES
-      CFI_DEF_CFA,
-      CFI_COMMON_REGISTERS,
-      ...
- 
-    STUB_BODY
-      asm code to establish frame, setup the cfa reg value,
-      call the real signal handler, ...
- 
-    SYMBOL_END
- */
- 
- /*--------------------------------
-   -- Misc constants and helpers --
-   -------------------------------- */
- 
- /* asm string construction helpers.  */
- 
- #define STR(TEXT) #TEXT
- /* stringify expanded TEXT, surrounding it with double quotes.  */
- 
- #define S(E) STR(E)
- /* stringify E, which will resolve as text but may contain macros
-    still to be expanded.  */
- 
- /* asm (TEXT) outputs <tab>TEXT. These facilitate the output of
-    multine contents:  */
- #define TAB(S) "\t" S
- #define CR(S)  S "\n"
- 
- #undef TCR
- #define TCR(S) TAB(CR(S))
- 
- /* REGNO constants, dwarf column numbers for registers of interest.  */
- 
- #if defined (__PPC__)
- 
- #define REGNO_LR  65
- #define REGNO_CTR 66
- #define REGNO_CR  70
- #define REGNO_XER 76
- #define REGNO_GR(N) (N)
- 
- #define REGNO_PC  67  /* ARG_POINTER_REGNUM  */
- 
- #define FUNCTION "@function"
- 
- #elif defined (ARMEL)
- 
- #define REGNO_G_REG_OFFSET(N) (N)
- 
- #define FUNCTION "%function"
- 
- #ifdef __aarch64__
- #define REGNO_PC_OFFSET  80  /* aka V16, a scratch register */
- #else
- #define REGNO_PC_OFFSET  15  /* PC_REGNUM */
- #endif
- 
- /* Mapping of CFI Column, Gcc Regno, Signal context offset for _LP64
- 
-    Name	   CFI	   GCC	   SCTX
-    G0-G30  0-30    0-30    0-30
-    SP      31      31      31
-    PC                      32
-    V0-V31  64-95   32-63   N/A
- 
- */
- 
- #elif defined (i386)
- 
- /* These are the cfi colunm numbers */
- 
- #define REGNO_EDI 7
- #define REGNO_ESI 6
- #define REGNO_EBP 5
- #define REGNO_ESP 4
- #define REGNO_EBX 3
- #define REGNO_EDX 2
- #define REGNO_ECX 1
- #define REGNO_EAX 0
- #define REGNO_EFLAGS 9
- #define REGNO_SET_PC 8 /* aka %eip */
- 
- #define FUNCTION "@function"
- 
- /* Mapping of CFI Column, Gcc Regno, Signal context offset for 32bit
- 
-    Name	   CFI	   GCC	   SCTX
-    %eax	    0	    0	    7
-    %ecx	    1	    2	    6
-    %edx	    2	    1	    5
-    %ebx     3	    3	    4
-    %esp	    4	    7	    3
-    %ebp	    5	    6	    2
-    %esi	    6	    4	    1
-    %edi	    7	    5	    0
-    %eflags  9	   17 	    8
-    %eip	    8	  n/a	    9
- 
- 
-    In general:
-    There is no unique numbering for the x86 architecture.  It's parameterized
-    by DWARF_FRAME_REGNUM, which is DBX_REGISTER_NUMBER except for Windows, and
-    the latter depends on the platform.
- */
- 
- #elif defined (__x86_64__)
- 
- /* These are the cfi colunm numbers */
- 
- #define REGNO_RAX 0
- #define REGNO_RDX 1
- #define REGNO_RCX 2
- #define REGNO_RBX 3
- #define REGNO_RSI 4
- #define REGNO_RDI 5
- #define REGNO_RBP 6
- #define REGNO_RSP 7
- #define REGNO_R8 8
- #define REGNO_R9 9
- #define REGNO_R10 10
- #define REGNO_R11 11
- #define REGNO_R12 12
- #define REGNO_R13 13
- #define REGNO_R14 14
- #define REGNO_R15 15
- #define REGNO_RPC 16 /* aka %rip */
- #define REGNO_EFLAGS 49
- #define REGNO_FS 54
- 
- #define FUNCTION "@function"
- 
- #else
- Not_implemented;
- #endif /* REGNO constants */
- 
- 
- /*------------------------------
-   -- Stub construction blocks --
-   ------------------------------ */
- 
- /* CFA setup block
-    ---------------
-    Only non-volatile registers are suitable for a CFA base. These are the
-    only ones we can expect to be able retrieve from the unwinding context
-    while walking up the chain, saved by at least the bottom-most exception
-    propagation services.  We set a non-volatile register to the value we
-    need in the stub body that follows.  */
- 
- #if defined (__PPC__)
- 
- /* Use r15 for PPC.  Note that r14 is inappropriate here, even though it
-    is non-volatile according to the ABI, because GCC uses it as an extra
-    SCRATCH on SPE targets.  */
- 
- #define CFA_REG 15
- 
- #elif defined (ARMEL)
- 
- #ifdef __aarch64__
- #define CFA_REG 19
- #else
- /* Use r8 for ARM.  Any of r4-r8 should work.  */
- #define CFA_REG 8
- #endif
- 
- #elif defined (i386)
- 
- #define CFA_REG 7
- 
- #elif defined (__x86_64__)
- 
- /* R15 register */
- #define CFA_REG 15
- 
- #else
- Not_implemented;
- #endif /* CFA setup block */
- 
- #define CFI_DEF_CFA \
- CR(".cfi_def_cfa " S(CFA_REG) ", 0")
- 
- /* Register location blocks
-    ------------------------
-    Rules to find registers of interest from the CFA. This should comprise
-    all the non-volatile registers relevant to the interrupted context.
- 
-    Note that we include r1 in this set, unlike the libgcc unwinding
-    fallbacks.  This is useful for fallbacks to allow the use of r1 in CFI
-    expressions and the absence of rule for r1 gets compensated by using the
-    target CFA instead.  We don't need the expression facility here and
-    setup a fake CFA to allow very simple offset expressions, so having a
-    rule for r1 is the proper thing to do.  We for sure have observed
-    crashes in some cases without it.  */
- 
- #if defined (__PPC__)
- 
- #define COMMON_CFI(REG) \
-   ".cfi_offset " S(REGNO_##REG) "," S(REG_SET_##REG)
- 
- #define CFI_COMMON_REGS \
- CR("# CFI for common registers\n") \
- TCR(COMMON_CFI(GR(0)))  \
- TCR(COMMON_CFI(GR(1)))  \
- TCR(COMMON_CFI(GR(2)))  \
- TCR(COMMON_CFI(GR(3)))  \
- TCR(COMMON_CFI(GR(4)))  \
- TCR(COMMON_CFI(GR(5)))  \
- TCR(COMMON_CFI(GR(6)))  \
- TCR(COMMON_CFI(GR(7)))  \
- TCR(COMMON_CFI(GR(8)))  \
- TCR(COMMON_CFI(GR(9)))  \
- TCR(COMMON_CFI(GR(10)))  \
- TCR(COMMON_CFI(GR(11)))  \
- TCR(COMMON_CFI(GR(12)))  \
- TCR(COMMON_CFI(GR(13)))  \
- TCR(COMMON_CFI(GR(14))) \
- TCR(COMMON_CFI(GR(15))) \
- TCR(COMMON_CFI(GR(16))) \
- TCR(COMMON_CFI(GR(17))) \
- TCR(COMMON_CFI(GR(18))) \
- TCR(COMMON_CFI(GR(19))) \
- TCR(COMMON_CFI(GR(20))) \
- TCR(COMMON_CFI(GR(21))) \
- TCR(COMMON_CFI(GR(22))) \
- TCR(COMMON_CFI(GR(23))) \
- TCR(COMMON_CFI(GR(24))) \
- TCR(COMMON_CFI(GR(25))) \
- TCR(COMMON_CFI(GR(26))) \
- TCR(COMMON_CFI(GR(27))) \
- TCR(COMMON_CFI(GR(28))) \
- TCR(COMMON_CFI(GR(29))) \
- TCR(COMMON_CFI(GR(30))) \
- TCR(COMMON_CFI(GR(31))) \
- TCR(COMMON_CFI(LR)) \
- TCR(COMMON_CFI(CR)) \
- TCR(COMMON_CFI(CTR)) \
- TCR(COMMON_CFI(XER)) \
- TCR(COMMON_CFI(PC)) \
- TCR(".cfi_return_column " S(REGNO_PC))
- 
- /* Trampoline body block
-    ---------------------  */
- 
- #if !defined (__PPC64__)
- #define SIGTRAMP_BODY \
- CR("") \
- TCR("# Allocate frame and save the non-volatile") \
- TCR("# registers we're going to modify") \
- TCR("stwu %r1,-16(%r1)")  \
- TCR("mflr %r0")	\
- TCR("stw %r0,20(%r1)")	\
- TCR("stw %r" S(CFA_REG) ",8(%r1)")	\
- TCR("")			\
- TCR("# Setup CFA_REG = context, which we'll retrieve as our CFA value") \
- TCR("mr %r" S(CFA_REG) ", %r7") \
- TCR("")			\
- TCR("# Call the real handler. The signo, siginfo and sigcontext") \
- TCR("# arguments are the same as those we received in r3, r4 and r5") \
- TCR("mtctr %r6") \
- TCR("bctrl")	\
- TCR("")		\
- TCR("# Restore our callee-saved items, release our frame and return") \
- TCR("lwz %r" S(CFA_REG) ",8(%r1)")	\
- TCR("lwz %r0,20(%r1)")	\
- TCR("mtlr %r0")		\
- TCR("")			\
- TCR("addi %r1,%r1,16")	\
- TCR("blr")
- #else
- #define SIGTRAMP_BODY \
- CR("") \
- TCR("0:") \
- TCR("addis 2,12,.TOC.-0@ha") \
- TCR("addi 2,2,.TOC.-0@l") \
- TCR(".localentry	__gnat_sigtramp_common,.-__gnat_sigtramp_common") \
- TCR("# Allocate frame and save the non-volatile") \
- TCR("# registers we're going to modify") \
- TCR("mflr %r0")	\
- TCR("std %r0,16(%r1)")	\
- TCR("stdu %r1,-32(%r1)")  \
- TCR("std %r2,24(%r1)")	\
- TCR("std %r" S(CFA_REG) ",8(%r1)")	\
- TCR("")			\
- TCR("# Setup CFA_REG = context, which we'll retrieve as our CFA value") \
- TCR("mr %r" S(CFA_REG) ", %r7") \
- TCR("")			\
- TCR("# Call the real handler. The signo, siginfo and sigcontext") \
- TCR("# arguments are the same as those we received in r3, r4 and r5") \
- TCR("mr %r12,%r6") \
- TCR("mtctr %r6") \
- TCR("bctrl")	\
- TCR("")		\
- TCR("# Restore our callee-saved items, release our frame and return") \
- TCR("ld %r" S(CFA_REG) ",8(%r1)")	\
- TCR("ld %r2,24(%r1)")	\
- TCR("addi %r1,%r1,32")  \
- TCR("ld %r0,16(%r1)")	\
- TCR("mtlr %r0")		\
- TCR("blr")
- #endif
- 
- #elif defined (ARMEL)
- 
- #define COMMON_CFI(REG) \
-   ".cfi_offset " S(REGNO_##REG) "," S(REG_SET_##REG)
- 
- #ifdef __aarch64__
- #define CFI_COMMON_REGS \
- CR("# CFI for common registers\n") \
- TCR(COMMON_CFI(G_REG_OFFSET(0)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(1)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(2)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(3)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(4)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(5)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(6)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(7)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(8)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(9)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(10)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(11)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(12)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(13)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(14))) \
- TCR(COMMON_CFI(G_REG_OFFSET(15))) \
- TCR(COMMON_CFI(G_REG_OFFSET(16))) \
- TCR(COMMON_CFI(G_REG_OFFSET(17))) \
- TCR(COMMON_CFI(G_REG_OFFSET(18))) \
- TCR(COMMON_CFI(G_REG_OFFSET(19))) \
- TCR(COMMON_CFI(G_REG_OFFSET(20))) \
- TCR(COMMON_CFI(G_REG_OFFSET(21))) \
- TCR(COMMON_CFI(G_REG_OFFSET(22))) \
- TCR(COMMON_CFI(G_REG_OFFSET(23))) \
- TCR(COMMON_CFI(G_REG_OFFSET(24))) \
- TCR(COMMON_CFI(G_REG_OFFSET(25))) \
- TCR(COMMON_CFI(G_REG_OFFSET(26))) \
- TCR(COMMON_CFI(G_REG_OFFSET(27))) \
- TCR(COMMON_CFI(G_REG_OFFSET(28))) \
- TCR(COMMON_CFI(G_REG_OFFSET(29))) \
- TCR(COMMON_CFI(G_REG_OFFSET(30))) \
- TCR(COMMON_CFI(G_REG_OFFSET(31))) \
- TCR(COMMON_CFI(PC_OFFSET)) \
- TCR(".cfi_return_column " S(REGNO_PC_OFFSET))
- #else
- #define CFI_COMMON_REGS \
- CR("# CFI for common registers\n") \
- TCR(COMMON_CFI(G_REG_OFFSET(0)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(1)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(2)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(3)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(4)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(5)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(6)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(7)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(8)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(9)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(10)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(11)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(12)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(13)))  \
- TCR(COMMON_CFI(G_REG_OFFSET(14))) \
- TCR(COMMON_CFI(PC_OFFSET)) \
- TCR(".cfi_return_column " S(REGNO_PC_OFFSET))
- #endif
- 
- /* Trampoline body block
-    ---------------------  */
- #ifdef __aarch64__
- #define SIGTRAMP_BODY \
- CR("") \
- TCR("# Allocate the frame (16bytes aligned) and push FP and LR") \
- TCR("stp x29, x30, [sp, #-32]!") \
- TCR("add x29, sp, 0") \
- TCR("# Store register used to hold the CFA on stack (pro forma)") \
- TCR("str x" S(CFA_REG) ", [sp, 16]")  \
- TCR("# Set the CFA reg from the 5th arg") \
- TCR("mov x" S(CFA_REG) ", x4") \
- TCR("# Call the handler") \
- TCR("blr x3") \
- TCR("# Release our frame and return (should never get here!).") \
- TCR("ldr x" S(CFA_REG) ", [sp, 16]") \
- TCR("ldp x29, x30, [sp], 32") \
- TCR("ret")
- #else
- #define SIGTRAMP_BODY \
- CR("") \
- TCR("# Allocate frame and save the non-volatile") \
- TCR("# registers we're going to modify") \
- TCR("mov	ip, sp") \
- TCR("stmfd	sp!, {r"S(CFA_REG)", fp, ip, lr, pc}") \
- TCR("# Setup CFA_REG = context, which we'll retrieve as our CFA value") \
- TCR("ldr	r"S(CFA_REG)", [ip]") \
- TCR("")                 \
- TCR("# Call the real handler. The signo, siginfo and sigcontext") \
- TCR("# arguments are the same as those we received in r0, r1 and r2") \
- TCR("sub	fp, ip, #4") \
- TCR("blx	r3") \
- TCR("# Restore our callee-saved items, release our frame and return") \
- TCR("ldmfd	sp, {r"S(CFA_REG)", fp, sp, pc}")
- #endif
- 
- #elif defined (i386)
- 
- #if CPU == SIMNT || CPU == SIMPENTIUM || CPU == SIMLINUX
- #define COMMON_CFI(REG) \
-   ".cfi_offset " S(REGNO_##REG) "," S(REG_SET_##REG)
- #else
- #define COMMON_CFI(REG) \
-   ".cfi_offset " S(REGNO_##REG) "," S(REG_##REG)
- #endif
- 
- #define PC_CFI(REG) \
-   ".cfi_offset " S(REGNO_##REG) "," S(REG_##REG)
- 
- #define CFI_COMMON_REGS \
- CR("# CFI for common registers\n") \
- TCR(COMMON_CFI(EDI)) \
- TCR(COMMON_CFI(ESI)) \
- TCR(COMMON_CFI(EBP)) \
- TCR(COMMON_CFI(ESP)) \
- TCR(COMMON_CFI(EBX)) \
- TCR(COMMON_CFI(EDX)) \
- TCR(COMMON_CFI(ECX)) \
- TCR(COMMON_CFI(EAX)) \
- TCR(COMMON_CFI(EFLAGS)) \
- TCR(PC_CFI(SET_PC)) \
- TCR(".cfi_return_column " S(REGNO_SET_PC))
- 
- /* Trampoline body block
-    ---------------------  */
- 
- #define SIGTRAMP_BODY \
- CR("") \
- TCR("# Allocate frame and save the non-volatile") \
- TCR("# registers we're going to modify") \
- TCR("pushl	%ebp") \
- TCR("movl	%esp, %ebp") \
- TCR("pushl	%edi") \
- TCR("subl	$24, %esp") \
- TCR("# Setup CFA_REG = context, which we'll retrieve as our CFA value") \
- TCR("movl	24(%ebp), %edi") \
- TCR("# Call the real handler. The signo, siginfo and sigcontext") \
- TCR("# arguments are the same as those we received") \
- TCR("movl	16(%ebp), %eax") \
- TCR("movl	%eax, 8(%esp)") \
- TCR("movl	12(%ebp), %eax") \
- TCR("movl	%eax, 4(%esp)") \
- TCR("movl	8(%ebp), %eax") \
- TCR("movl	%eax, (%esp)") \
- TCR("call	*20(%ebp)") \
- TCR("# Restore our callee-saved items, release our frame and return") \
- TCR("popl	%edi") \
- TCR("leave") \
- TCR("ret")
- 
- #elif defined (__x86_64__)
- 
- #define COMMON_CFI(REG) \
-   ".cfi_offset " S(REGNO_##REG) "," S(REG_##REG)
- 
- #define CFI_COMMON_REGS \
- CR("# CFI for common registers\n") \
- TCR(COMMON_CFI(R15)) \
- TCR(COMMON_CFI(R14)) \
- TCR(COMMON_CFI(R13)) \
- TCR(COMMON_CFI(R12)) \
- TCR(COMMON_CFI(R11)) \
- TCR(COMMON_CFI(R10)) \
- TCR(COMMON_CFI(R9)) \
- TCR(COMMON_CFI(R8)) \
- TCR(COMMON_CFI(RDI)) \
- TCR(COMMON_CFI(RSI)) \
- TCR(COMMON_CFI(RBP)) \
- TCR(COMMON_CFI(RSP)) \
- TCR(COMMON_CFI(RBX)) \
- TCR(COMMON_CFI(RDX)) \
- TCR(COMMON_CFI(RCX)) \
- TCR(COMMON_CFI(RAX)) \
- TCR(COMMON_CFI(RPC)) \
- TCR(".cfi_return_column " S(REGNO_RPC))
- 
- /* Trampoline body block
-    ---------------------  */
- 
- #define SIGTRAMP_BODY \
- CR("") \
- TCR("# Allocate frame and save the non-volatile") \
- TCR("# registers we're going to modify") \
- TCR("subq	$8, %rsp") \
- TCR("# Setup CFA_REG = context, which we'll retrieve as our CFA value") \
- TCR("movq	%r8, %r15") \
- TCR("# Call the real handler. The signo, siginfo and sigcontext") \
- TCR("# arguments are the same as those we received") \
- TCR("call	*%rcx") \
- TCR("# This part should never be executed") \
- TCR("addq	$8, %rsp") \
- TCR("ret")
- 
- #else
- Not_implemented;
- #endif /* CFI_COMMON_REGS and SIGTRAMP_BODY */
- 
- /* Symbol definition block
-    -----------------------  */
- 
- #ifdef __x86_64__
- #define FUNC_ALIGN TCR(".p2align 4,,15")
- #else
- #define FUNC_ALIGN
- #endif
- 
- #define SIGTRAMP_START(SYM) \
- CR("# " S(SYM) " cfi trampoline") \
- TCR(".type " S(SYM) ", "FUNCTION) \
- CR("") \
- FUNC_ALIGN \
- CR(S(SYM) ":") \
- TCR(".cfi_startproc") \
- TCR(".cfi_signal_frame")
- 
- /* Symbol termination block
-    ------------------------  */
- 
- #define SIGTRAMP_END(SYM) \
- CR(".cfi_endproc") \
- TCR(".size " S(SYM) ", .-" S(SYM))
- 
- /*----------------------------
-   -- And now, the real code --
-   ---------------------------- */
- 
- /* Text section start.  The compiler isn't aware of that switch.  */
- 
- asm (".text\n"
-      TCR(".align 2"));
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/sigtramp-vxworks.c gcc-12.1.0/gcc/ada/sigtramp-vxworks.c
*** gcc-11.3.0/gcc/ada/sigtramp-vxworks.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sigtramp-vxworks.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                         Asm Implementation File                          *
   *                                                                          *
!  *         Copyright (C) 2011-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                         Asm Implementation File                          *
   *                                                                          *
!  *         Copyright (C) 2011-2022, 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- *
*************** void __gnat_sigtramp (int signo, void *s
*** 180,186 ****
  }
  
  /* Include the target specific bits.  */
! #include "sigtramp-vxworks-target.inc"
  
  /* sigtramp stub for common registers.  */
  
--- 180,186 ----
  }
  
  /* Include the target specific bits.  */
! #include "sigtramp-vxworks-target.h"
  
  /* sigtramp stub for common registers.  */
  
diff -Nrcpad gcc-11.3.0/gcc/ada/sigtramp.h gcc-12.1.0/gcc/ada/sigtramp.h
*** gcc-11.3.0/gcc/ada/sigtramp.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sigtramp.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 2011-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 2011-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/sinfo-cn.adb gcc-12.1.0/gcc/ada/sinfo-cn.adb
*** gcc-11.3.0/gcc/ada/sinfo-cn.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sinfo-cn.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 30,56 ****
  --  general manner, but in some specific cases, the fields of related nodes
  --  have been deliberately layed out in a manner that permits such alteration.
  
! with Atree;    use Atree;
! with Snames;   use Snames;
  
  package body Sinfo.CN is
  
-    use Atree.Unchecked_Access;
-    --  This package is one of the few packages which is allowed to make direct
-    --  references to tree nodes (since it is in the business of providing a
-    --  higher level of tree access which other clients are expected to use and
-    --  which implements checks).
- 
     ------------------------------------------------------------
     -- Change_Character_Literal_To_Defining_Character_Literal --
     ------------------------------------------------------------
  
     procedure Change_Character_Literal_To_Defining_Character_Literal
!      (N : in out Node_Id)
     is
     begin
!       Set_Nkind (N, N_Defining_Character_Literal);
!       N := Extend_Node (N);
     end Change_Character_Literal_To_Defining_Character_Literal;
  
     ------------------------------------
--- 30,52 ----
  --  general manner, but in some specific cases, the fields of related nodes
  --  have been deliberately layed out in a manner that permits such alteration.
  
! with Atree;          use Atree;
! with Snames;         use Snames;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
  
  package body Sinfo.CN is
  
     ------------------------------------------------------------
     -- Change_Character_Literal_To_Defining_Character_Literal --
     ------------------------------------------------------------
  
     procedure Change_Character_Literal_To_Defining_Character_Literal
!      (N : Node_Id)
     is
     begin
!       Reinit_Field_To_Zero (N, F_Char_Literal_Value);
!       Extend_Node (N);
     end Change_Character_Literal_To_Defining_Character_Literal;
  
     ------------------------------------
*************** package body Sinfo.CN is
*** 60,78 ****
     procedure Change_Conversion_To_Unchecked (N : Node_Id) is
     begin
        Set_Do_Overflow_Check (N, False);
-       Set_Do_Tag_Check (N, False);
        Set_Do_Length_Check (N, False);
!       Set_Nkind (N, N_Unchecked_Type_Conversion);
     end Change_Conversion_To_Unchecked;
  
     ----------------------------------------------
     -- Change_Identifier_To_Defining_Identifier --
     ----------------------------------------------
  
!    procedure Change_Identifier_To_Defining_Identifier (N : in out Node_Id) is
     begin
!       Set_Nkind (N, N_Defining_Identifier);
!       N := Extend_Node (N);
     end Change_Identifier_To_Defining_Identifier;
  
     ---------------------------------------------
--- 56,72 ----
     procedure Change_Conversion_To_Unchecked (N : Node_Id) is
     begin
        Set_Do_Overflow_Check (N, False);
        Set_Do_Length_Check (N, False);
!       Mutate_Nkind (N, N_Unchecked_Type_Conversion);
     end Change_Conversion_To_Unchecked;
  
     ----------------------------------------------
     -- Change_Identifier_To_Defining_Identifier --
     ----------------------------------------------
  
!    procedure Change_Identifier_To_Defining_Identifier (N : Node_Id) is
     begin
!       Extend_Node (N);
     end Change_Identifier_To_Defining_Identifier;
  
     ---------------------------------------------
*************** package body Sinfo.CN is
*** 132,143 ****
     --------------------------------------------------------
  
     procedure Change_Operator_Symbol_To_Defining_Operator_Symbol
!      (N : in out Node_Id)
     is
     begin
!       Set_Nkind (N, N_Defining_Operator_Symbol);
!       Set_Node2 (N, Empty); -- Clear unused Str2 field
!       N := Extend_Node (N);
     end Change_Operator_Symbol_To_Defining_Operator_Symbol;
  
     ----------------------------------------------
--- 126,136 ----
     --------------------------------------------------------
  
     procedure Change_Operator_Symbol_To_Defining_Operator_Symbol
!      (N : Node_Id)
     is
     begin
!       Reinit_Field_To_Zero (N, F_Strval);
!       Extend_Node (N);
     end Change_Operator_Symbol_To_Defining_Operator_Symbol;
  
     ----------------------------------------------
*************** package body Sinfo.CN is
*** 146,153 ****
  
     procedure Change_Operator_Symbol_To_String_Literal (N : Node_Id) is
     begin
!       Set_Nkind (N, N_String_Literal);
!       Set_Node1 (N, Empty); -- clear Name1 field
     end Change_Operator_Symbol_To_String_Literal;
  
     ------------------------------------------------
--- 139,147 ----
  
     procedure Change_Operator_Symbol_To_String_Literal (N : Node_Id) is
     begin
!       Reinit_Field_To_Zero (N, F_Chars);
!       Set_Entity (N, Empty);
!       Mutate_Nkind (N, N_String_Literal);
     end Change_Operator_Symbol_To_String_Literal;
  
     ------------------------------------------------
*************** package body Sinfo.CN is
*** 156,162 ****
  
     procedure Change_Selected_Component_To_Expanded_Name (N : Node_Id) is
     begin
!       Set_Nkind (N, N_Expanded_Name);
        Set_Chars (N, Chars (Selector_Name (N)));
     end Change_Selected_Component_To_Expanded_Name;
  
--- 150,156 ----
  
     procedure Change_Selected_Component_To_Expanded_Name (N : Node_Id) is
     begin
!       Mutate_Nkind (N, N_Expanded_Name);
        Set_Chars (N, Chars (Selector_Name (N)));
     end Change_Selected_Component_To_Expanded_Name;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/sinfo-cn.ads gcc-12.1.0/gcc/ada/sinfo-cn.ads
*** gcc-11.3.0/gcc/ada/sinfo-cn.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sinfo-cn.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 32,51 ****
  
  package Sinfo.CN is
  
!    procedure Change_Identifier_To_Defining_Identifier (N : in out Node_Id);
     --  N must refer to a node of type N_Identifier. This node is modified to
     --  be of type N_Defining_Identifier. The scanner always returns identifiers
     --  as N_Identifier. The parser then uses this routine to change the node
     --  to be a defining identifier where the context demands it. This routine
!    --  also allocates the necessary extension node. Note that this procedure
!    --  may (but is not required to) change the Id of the node in question.
  
     procedure Change_Character_Literal_To_Defining_Character_Literal
!      (N : in out Node_Id);
     --  Similar processing for a character literal
  
     procedure Change_Operator_Symbol_To_Defining_Operator_Symbol
!      (N : in out Node_Id);
     --  Similar processing for an operator symbol
  
     procedure Change_Conversion_To_Unchecked (N : Node_Id);
--- 32,50 ----
  
  package Sinfo.CN is
  
!    procedure Change_Identifier_To_Defining_Identifier (N : Node_Id);
     --  N must refer to a node of type N_Identifier. This node is modified to
     --  be of type N_Defining_Identifier. The scanner always returns identifiers
     --  as N_Identifier. The parser then uses this routine to change the node
     --  to be a defining identifier where the context demands it. This routine
!    --  also allocates the necessary extension node.
  
     procedure Change_Character_Literal_To_Defining_Character_Literal
!      (N : Node_Id);
     --  Similar processing for a character literal
  
     procedure Change_Operator_Symbol_To_Defining_Operator_Symbol
!      (N : Node_Id);
     --  Similar processing for an operator symbol
  
     procedure Change_Conversion_To_Unchecked (N : Node_Id);
diff -Nrcpad gcc-11.3.0/gcc/ada/sinfo-utils.adb gcc-12.1.0/gcc/ada/sinfo-utils.adb
*** gcc-11.3.0/gcc/ada/sinfo-utils.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/sinfo-utils.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,362 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                           S I N F O . U T I L S                          --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --           Copyright (C) 2020-2022, Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Atree;  use Atree;
+ with Debug;  use Debug;
+ with Output; use Output;
+ with Seinfo;
+ with Sinput; use Sinput;
+ 
+ package body Sinfo.Utils is
+ 
+    ---------------
+    -- Debugging --
+    ---------------
+ 
+    --  Suppose you find that node 12345 is messed up. You might want to find
+    --  the code that created that node. There are two ways to do this:
+ 
+    --  One way is to set a conditional breakpoint on New_Node_Debugging_Output
+    --  (nickname "nnd"):
+    --     break nnd if n = 12345
+    --  and run gnat1 again from the beginning.
+ 
+    --  The other way is to set a breakpoint near the beginning (e.g. on
+    --  gnat1drv), and run. Then set Watch_Node (nickname "ww") to 12345 in gdb:
+    --     ww := 12345
+    --  and set a breakpoint on New_Node_Breakpoint (nickname "nn"). Continue.
+ 
+    --  Either way, gnat1 will stop when node 12345 is created, or certain other
+    --  interesting operations are performed, such as Rewrite. To see exactly
+    --  which operations, search for "pragma Debug" below.
+ 
+    --  The second method is much faster if the amount of Ada code being
+    --  compiled is large.
+ 
+    ww : Node_Id'Base := Node_Low_Bound - 1;
+    pragma Export (Ada, ww);
+    Watch_Node : Node_Id'Base renames ww;
+    --  Node to "watch"; that is, whenever a node is created, we check if it
+    --  is equal to Watch_Node, and if so, call New_Node_Breakpoint. You have
+    --  presumably set a breakpoint on New_Node_Breakpoint. Note that the
+    --  initial value of Node_Id'First - 1 ensures that by default, no node
+    --  will be equal to Watch_Node.
+ 
+    procedure nn;
+    pragma Export (Ada, nn);
+    procedure New_Node_Breakpoint renames nn;
+    --  This doesn't do anything interesting; it's just for setting breakpoint
+    --  on as explained above.
+ 
+    procedure nnd (N : Node_Id);
+    pragma Export (Ada, nnd);
+    --  For debugging. If debugging is turned on, New_Node and New_Entity (etc.)
+    --  call this. If debug flag N is turned on, this prints out the new node.
+    --
+    --  If Node = Watch_Node, this prints out the new node and calls
+    --  New_Node_Breakpoint. Otherwise, does nothing.
+ 
+    procedure Node_Debug_Output (Op : String; N : Node_Id);
+    --  Called by nnd; writes Op followed by information about N
+ 
+    -------------------------
+    -- New_Node_Breakpoint --
+    -------------------------
+ 
+    procedure nn is
+    begin
+       Write_Str ("Watched node ");
+       Write_Int (Int (Watch_Node));
+       Write_Eol;
+    end nn;
+ 
+    -------------------------------
+    -- New_Node_Debugging_Output --
+    -------------------------------
+ 
+    procedure nnd (N : Node_Id) is
+       Node_Is_Watched : constant Boolean := N = Watch_Node;
+ 
+    begin
+       if Debug_Flag_N or else Node_Is_Watched then
+          Node_Debug_Output ("Node", N);
+ 
+          if Node_Is_Watched then
+             New_Node_Breakpoint;
+          end if;
+       end if;
+    end nnd;
+ 
+    procedure New_Node_Debugging_Output (N : Node_Id) is
+    begin
+       pragma Debug (nnd (N));
+    end New_Node_Debugging_Output;
+ 
+    -----------------------
+    -- Node_Debug_Output --
+    -----------------------
+ 
+    procedure Node_Debug_Output (Op : String; N : Node_Id) is
+    begin
+       Write_Str (Op);
+ 
+       if Nkind (N) in N_Entity then
+          Write_Str (" entity");
+       else
+          Write_Str (" node");
+       end if;
+ 
+       Write_Str (" Id = ");
+       Write_Int (Int (N));
+       Write_Str ("  ");
+       Write_Location (Sloc (N));
+       Write_Str ("  ");
+       Write_Str (Node_Kind'Image (Nkind (N)));
+       Write_Eol;
+    end Node_Debug_Output;
+ 
+    -------------------------------
+    -- Parent-related operations --
+    -------------------------------
+ 
+    procedure Copy_Parent (To, From : Node_Or_Entity_Id) is
+    begin
+       if Atree.Present (To) and Atree.Present (From) then
+          Atree.Set_Parent (To, Atree.Parent (From));
+       else
+          pragma Assert
+            (if Atree.Present (To) then Atree.No (Atree.Parent (To)));
+       end if;
+    end Copy_Parent;
+ 
+    function Parent_Kind (N : Node_Id) return Node_Kind is
+    begin
+       if Atree.No (N) then
+          return N_Empty;
+       else
+          return Nkind (Atree.Parent (N));
+       end if;
+    end Parent_Kind;
+ 
+    -------------------------
+    -- Iterator Procedures --
+    -------------------------
+ 
+    procedure Next_Entity       (N : in out Node_Id) is
+    begin
+       N := Next_Entity (N);
+    end Next_Entity;
+ 
+    procedure Next_Named_Actual (N : in out Node_Id) is
+    begin
+       N := Next_Named_Actual (N);
+    end Next_Named_Actual;
+ 
+    procedure Next_Rep_Item     (N : in out Node_Id) is
+    begin
+       N := Next_Rep_Item (N);
+    end Next_Rep_Item;
+ 
+    procedure Next_Use_Clause   (N : in out Node_Id) is
+    begin
+       N := Next_Use_Clause (N);
+    end Next_Use_Clause;
+ 
+    ------------------
+    -- End_Location --
+    ------------------
+ 
+    function End_Location (N : Node_Id) return Source_Ptr is
+       L : constant Valid_Uint := End_Span (N);
+    begin
+       return Source_Ptr (Int (Sloc (N)) + UI_To_Int (L));
+    end End_Location;
+ 
+    --------------------
+    -- Get_Pragma_Arg --
+    --------------------
+ 
+    function Get_Pragma_Arg (Arg : Node_Id) return Node_Id is
+    begin
+       if Nkind (Arg) = N_Pragma_Argument_Association then
+          return Expression (Arg);
+       else
+          return Arg;
+       end if;
+    end Get_Pragma_Arg;
+ 
+    ----------------------
+    -- Set_End_Location --
+    ----------------------
+ 
+    procedure Set_End_Location (N : Node_Id; S : Source_Ptr) is
+    begin
+       Set_End_Span (N,
+         UI_From_Int (Int (S) - Int (Sloc (N))));
+    end Set_End_Location;
+ 
+    --------------------------
+    -- Pragma_Name_Unmapped --
+    --------------------------
+ 
+    function Pragma_Name_Unmapped (N : Node_Id) return Name_Id is
+    begin
+       return Chars (Pragma_Identifier (N));
+    end Pragma_Name_Unmapped;
+ 
+    ------------------------------------
+    -- Helpers for Walk_Sinfo_Fields* --
+    ------------------------------------
+ 
+    function Get_Node_Field_Union is new
+      Atree.Atree_Private_Part.Get_32_Bit_Field (Union_Id) with Inline;
+    procedure Set_Node_Field_Union is new
+      Atree.Atree_Private_Part.Set_32_Bit_Field (Union_Id) with Inline;
+ 
+    use Seinfo;
+ 
+    function Is_In_Union_Id (F_Kind : Field_Kind) return Boolean is
+    --  True if the field type is one that can be converted to Types.Union_Id
+      (case F_Kind is
+        when Node_Id_Field
+           | List_Id_Field
+           | Elist_Id_Field
+           | Name_Id_Field
+           | String_Id_Field
+           | Valid_Uint_Field
+           | Unat_Field
+           | Upos_Field
+           | Nonzero_Uint_Field
+           | Uint_Field
+           | Ureal_Field
+           | Union_Id_Field => True,
+        when Flag_Field
+           | Node_Kind_Type_Field
+           | Entity_Kind_Type_Field
+           | Source_Ptr_Field
+           | Small_Paren_Count_Type_Field
+           | Convention_Id_Field
+           | Component_Alignment_Kind_Field
+           | Mechanism_Type_Field => False);
+ 
+    -----------------------
+    -- Walk_Sinfo_Fields --
+    -----------------------
+ 
+    procedure Walk_Sinfo_Fields (N : Node_Id) is
+       Fields : Node_Field_Array renames
+         Node_Field_Table (Nkind (N)).all;
+ 
+    begin
+       for J in Fields'Range loop
+          if Fields (J) /= F_Link then -- Don't walk Parent!
+             declare
+                Desc : Field_Descriptor renames
+                  Field_Descriptors (Fields (J));
+                pragma Assert (Desc.Type_Only = No_Type_Only);
+                --  Type_Only is for entities
+             begin
+                if Is_In_Union_Id (Desc.Kind) then
+                   Action (Get_Node_Field_Union (N, Desc.Offset));
+                end if;
+             end;
+          end if;
+       end loop;
+    end Walk_Sinfo_Fields;
+ 
+    --------------------------------
+    -- Walk_Sinfo_Fields_Pairwise --
+    --------------------------------
+ 
+    procedure Walk_Sinfo_Fields_Pairwise (N1, N2 : Node_Id) is
+       pragma Assert (Nkind (N1) = Nkind (N2));
+ 
+       Fields : Node_Field_Array renames
+         Node_Field_Table (Nkind (N1)).all;
+ 
+    begin
+       for J in Fields'Range loop
+          if Fields (J) /= F_Link then -- Don't walk Parent!
+             declare
+                Desc : Field_Descriptor renames
+                  Field_Descriptors (Fields (J));
+                pragma Assert (Desc.Type_Only = No_Type_Only);
+                --  Type_Only is for entities
+             begin
+                if Is_In_Union_Id (Desc.Kind) then
+                   Set_Node_Field_Union
+                     (N1, Desc.Offset,
+                      Transform (Get_Node_Field_Union (N2, Desc.Offset)));
+                end if;
+             end;
+          end if;
+       end loop;
+    end Walk_Sinfo_Fields_Pairwise;
+ 
+    ---------------------
+    -- Map_Pragma_Name --
+    ---------------------
+ 
+    --  We don't want to introduce a dependence on some hash table package or
+    --  similar, so we use a simple array of Key => Value pairs, and do a linear
+    --  search. Linear search is plenty efficient, given that we don't expect
+    --  more than a couple of entries in the mapping.
+ 
+    type Name_Pair is record
+       Key   : Name_Id;
+       Value : Name_Id;
+    end record;
+ 
+    type Pragma_Map_Index is range 1 .. 100;
+    Pragma_Map : array (Pragma_Map_Index) of Name_Pair;
+    Last_Pair : Pragma_Map_Index'Base range 0 .. Pragma_Map_Index'Last := 0;
+ 
+    procedure Map_Pragma_Name (From, To : Name_Id) is
+    begin
+       if Last_Pair = Pragma_Map'Last then
+          raise Too_Many_Pragma_Mappings;
+       end if;
+ 
+       Last_Pair := Last_Pair + 1;
+       Pragma_Map (Last_Pair) := (Key => From, Value => To);
+    end Map_Pragma_Name;
+ 
+    -----------------
+    -- Pragma_Name --
+    -----------------
+ 
+    function Pragma_Name (N : Node_Id) return Name_Id is
+       Result : constant Name_Id := Pragma_Name_Unmapped (N);
+    begin
+       for J in Pragma_Map'First .. Last_Pair loop
+          if Result = Pragma_Map (J).Key then
+             return Pragma_Map (J).Value;
+          end if;
+       end loop;
+ 
+       return Result;
+    end Pragma_Name;
+ 
+ end Sinfo.Utils;
diff -Nrcpad gcc-11.3.0/gcc/ada/sinfo-utils.ads gcc-12.1.0/gcc/ada/sinfo-utils.ads
*** gcc-11.3.0/gcc/ada/sinfo-utils.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/sinfo-utils.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,162 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                           S I N F O . U T I L S                          --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --           Copyright (C) 2020-2022, Free Software Foundation, Inc.        --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ with Sinfo.Nodes; use Sinfo.Nodes;
+ 
+ package Sinfo.Utils is
+ 
+    -------------------------------
+    -- Parent-related operations --
+    -------------------------------
+ 
+    procedure Copy_Parent (To, From : Node_Or_Entity_Id);
+    --  Does Set_Parent (To, Parent (From)), except that if To or From are
+    --  empty, does nothing. If From is empty but To is not, then Parent (To)
+    --  should already be Empty.
+ 
+    function Parent_Kind (N : Node_Id) return Node_Kind;
+    --  Same as Nkind (Parent (N)), except if N is Empty, return N_Empty
+ 
+    -------------------------
+    -- Iterator Procedures --
+    -------------------------
+ 
+    --  The call to Next_xxx (N) is equivalent to N := Next_xxx (N)
+ 
+    procedure Next_Entity       (N : in out Node_Id);
+    procedure Next_Named_Actual (N : in out Node_Id);
+    procedure Next_Rep_Item     (N : in out Node_Id);
+    procedure Next_Use_Clause   (N : in out Node_Id);
+ 
+    -------------------------------------------
+    -- Miscellaneous Tree Access Subprograms --
+    -------------------------------------------
+ 
+    function End_Location (N : Node_Id) return Source_Ptr;
+    --  N is an N_If_Statement or N_Case_Statement node, and this function
+    --  returns the location of the IF token in the END IF sequence by
+    --  translating the value of the End_Span field.
+ 
+    --  WARNING: There is a matching C declaration of this subprogram in fe.h
+ 
+    procedure Set_End_Location (N : Node_Id; S : Source_Ptr);
+    --  N is an N_If_Statement or N_Case_Statement node. This procedure sets
+    --  the End_Span field to correspond to the given value S. In other words,
+    --  End_Span is set to the difference between S and Sloc (N), the starting
+    --  location.
+ 
+    function Get_Pragma_Arg (Arg : Node_Id) return Node_Id;
+    --  Given an argument to a pragma Arg, this function returns the expression
+    --  for the argument. This is Arg itself, or, in the case where Arg is a
+    --  pragma argument association node, the expression from this node.
+ 
+    -----------------------
+    -- Utility Functions --
+    -----------------------
+ 
+    procedure Map_Pragma_Name (From, To : Name_Id);
+    --  Used in the implementation of pragma Rename_Pragma. Maps pragma name
+    --  From to pragma name To, so From can be used as a synonym for To.
+ 
+    Too_Many_Pragma_Mappings : exception;
+    --  Raised if Map_Pragma_Name is called too many times. We expect that few
+    --  programs will use it at all, and those that do will use it approximately
+    --  once or twice.
+ 
+    function Pragma_Name (N : Node_Id) return Name_Id;
+    --  Obtain the name of pragma N from the Chars field of its identifier. If
+    --  the pragma has been renamed using Rename_Pragma, this routine returns
+    --  the name of the renaming.
+ 
+    function Pragma_Name_Unmapped (N : Node_Id) return Name_Id;
+    --  Obtain the name of pragma N from the Chars field of its identifier. This
+    --  form of name extraction does not take into account renamings performed
+    --  by Rename_Pragma.
+ 
+    generic
+       with procedure Action (U : Union_Id);
+    procedure Walk_Sinfo_Fields (N : Node_Id);
+    --  Walk the Sinfo fields of N, for all field types that Union_Id includes,
+    --  and call Action on each one. However, skip the Link field, which is the
+    --  Parent, and would cause us to wander off into the weeds.
+ 
+    generic
+       with function Transform (U : Union_Id) return Union_Id;
+    procedure Walk_Sinfo_Fields_Pairwise (N1, N2 : Node_Id);
+    --  Walks the Sinfo fields of N1 and N2 pairwise, calls Tranform on each N2
+    --  field, copying the resut into the corresponding field of N1. The Nkinds
+    --  must match. Link is skipped.
+ 
+    -------------------------------------------
+    -- Aliases for Entity_Or_Associated_Node --
+    -------------------------------------------
+ 
+    --  Historically, the Entity, Associated_Node, and Entity_Or_Associated_Node
+    --  fields shared the same slot. A further complication is that there is an
+    --  N_Has_Entity that does not include all node types that have the Entity
+    --  field. N_Inclusive_Has_Entity are the node types that have the Entity
+    --  field.
+ 
+    subtype N_Inclusive_Has_Entity is Node_Id with Predicate =>
+      N_Inclusive_Has_Entity in
+        N_Has_Entity_Id
+        | N_Attribute_Definition_Clause_Id
+        | N_Aspect_Specification_Id
+        | N_Freeze_Entity_Id
+        | N_Freeze_Generic_Entity_Id;
+ 
+    subtype N_Has_Associated_Node is Node_Id with Predicate =>
+      N_Has_Associated_Node in
+        N_Has_Entity_Id
+        | N_Aggregate_Id
+        | N_Extension_Aggregate_Id
+        | N_Selected_Component_Id
+        | N_Use_Package_Clause_Id;
+ 
+    function Associated_Node
+      (N : N_Has_Associated_Node) return Node_Id
+       renames Entity_Or_Associated_Node;
+ 
+    function Entity
+      (N : N_Inclusive_Has_Entity) return Node_Id
+       renames Entity_Or_Associated_Node;
+ 
+    procedure Set_Associated_Node
+      (N : N_Has_Associated_Node; Val : Node_Id)
+       renames Set_Entity_Or_Associated_Node;
+ 
+    procedure Set_Entity
+      (N : N_Inclusive_Has_Entity; Val : Node_Id)
+       renames Set_Entity_Or_Associated_Node;
+ 
+    ---------------
+    -- Debugging --
+    ---------------
+ 
+    procedure New_Node_Debugging_Output (N : Node_Id);
+    pragma Inline (New_Node_Debugging_Output);
+    --  See package body for documentation
+ 
+ end Sinfo.Utils;
diff -Nrcpad gcc-11.3.0/gcc/ada/sinfo.adb gcc-12.1.0/gcc/ada/sinfo.adb
*** gcc-11.3.0/gcc/ada/sinfo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sinfo.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,7188 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree; use Atree;
! 
! package body Sinfo is
! 
!    use Atree.Unchecked_Access;
!    --  This package is one of the few packages which is allowed to make direct
!    --  references to tree nodes (since it is in the business of providing a
!    --  higher level of tree access which other clients are expected to use and
!    --  which implements checks).
! 
!    use Atree_Private_Part;
!    --  The only reason that we ask for direct access to the private part of
!    --  the tree package is so that we can directly reference the Nkind field
!    --  of nodes table entries. We do this since it helps the efficiency of
!    --  the Sinfo debugging checks considerably (note that when we are checking
!    --  Nkind values, we don't need to check for a valid node reference, because
!    --  we will check that anyway when we reference the field).
! 
!    NT : Nodes.Table_Ptr renames Nodes.Table;
!    --  A short hand abbreviation, useful for the debugging checks
! 
!    ----------------------------
!    -- Field Access Functions --
!    ----------------------------
! 
!    --  Note: The use of Assert (False or else ...) is just a device to allow
!    --  uniform format of the conditions following this. Note that csinfo
!    --  expects this uniform format.
! 
!    function Abort_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Requeue_Statement);
!       return Flag15 (N);
!    end Abort_Present;
! 
!    function Abortable_Part
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Asynchronous_Select);
!       return Node2 (N);
!    end Abortable_Part;
! 
!    function Abstract_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Private_Type_Definition
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Private_Type_Declaration
!         or else NT (N).Nkind = N_Record_Definition);
!       return Flag4 (N);
!    end Abstract_Present;
! 
!    function Accept_Handler_Records
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Alternative);
!       return List5 (N);
!    end Accept_Handler_Records;
! 
!    function Accept_Statement
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Alternative);
!       return Node2 (N);
!    end Accept_Statement;
! 
!    function Access_Definition
!      (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Definition
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Object_Renaming_Declaration);
!       return Node3 (N);
!    end Access_Definition;
! 
!    function Access_To_Subprogram_Definition
!      (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Definition);
!       return Node3 (N);
!    end Access_To_Subprogram_Definition;
! 
!    function Access_Types_To_Process
!       (N : Node_Id) return Elist_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Freeze_Entity);
!       return Elist2 (N);
!    end Access_Types_To_Process;
! 
!    function Actions
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_And_Then
!         or else NT (N).Nkind = N_Case_Expression_Alternative
!         or else NT (N).Nkind = N_Compilation_Unit_Aux
!         or else NT (N).Nkind = N_Compound_Statement
!         or else NT (N).Nkind = N_Expression_With_Actions
!         or else NT (N).Nkind = N_Freeze_Entity
!         or else NT (N).Nkind = N_Or_Else);
!       return List1 (N);
!    end Actions;
! 
!    function Activation_Chain_Entity
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Entry_Body
!         or else NT (N).Nkind = N_Generic_Package_Declaration
!         or else NT (N).Nkind = N_Package_Declaration
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Task_Body);
!       return Node3 (N);
!    end Activation_Chain_Entity;
! 
!    function Acts_As_Spec
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit
!         or else NT (N).Nkind = N_Subprogram_Body);
!       return Flag4 (N);
!    end Acts_As_Spec;
! 
!    function Actual_Designated_Subtype
!      (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Explicit_Dereference
!         or else NT (N).Nkind = N_Free_Statement);
!       return Node4 (N);
!    end Actual_Designated_Subtype;
! 
!    function Address_Warning_Posted
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Definition_Clause);
!       return Flag18 (N);
!    end Address_Warning_Posted;
! 
!    function Aggregate_Bounds
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate);
!       return Node3 (N);
!    end Aggregate_Bounds;
! 
!    function Aliased_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Definition
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification);
!       return Flag4 (N);
!    end Aliased_Present;
! 
!    function Alloc_For_BIP_Return
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator);
!       return Flag1 (N);
!    end Alloc_For_BIP_Return;
! 
!    function All_Others
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Others_Choice);
!       return Flag11 (N);
!    end All_Others;
! 
!    function All_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Definition
!         or else NT (N).Nkind = N_Access_To_Object_Definition
!         or else NT (N).Nkind = N_Quantified_Expression
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       return Flag15 (N);
!    end All_Present;
! 
!    function Alternatives
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Case_Expression
!         or else NT (N).Nkind = N_Case_Statement
!         or else NT (N).Nkind = N_In
!         or else NT (N).Nkind = N_Not_In);
!       return List4 (N);
!    end Alternatives;
! 
!    function Ancestor_Part
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Extension_Aggregate);
!       return Node3 (N);
!    end Ancestor_Part;
! 
!    function Atomic_Sync_Required
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Explicit_Dereference
!         or else NT (N).Nkind = N_Identifier
!         or else NT (N).Nkind = N_Indexed_Component
!         or else NT (N).Nkind = N_Selected_Component);
!       return Flag14 (N);
!    end Atomic_Sync_Required;
! 
!    function Array_Aggregate
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Enumeration_Representation_Clause);
!       return Node3 (N);
!    end Array_Aggregate;
! 
!    function Aspect_On_Partial_View
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification);
!       return Flag18 (N);
!    end Aspect_On_Partial_View;
! 
!    function Aspect_Rep_Item
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification);
!       return Node2 (N);
!    end Aspect_Rep_Item;
! 
!    function Assignment_OK
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind in N_Subexpr);
!       return Flag15 (N);
!    end Assignment_OK;
! 
!    function Associated_Node
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Has_Entity
!         or else NT (N).Nkind = N_Aggregate
!         or else NT (N).Nkind = N_Extension_Aggregate
!         or else NT (N).Nkind = N_Selected_Component
!         or else NT (N).Nkind = N_Use_Package_Clause);
!       return Node4 (N);
!    end Associated_Node;
! 
!    function At_End_Proc
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Handled_Sequence_Of_Statements);
!       return Node1 (N);
!    end At_End_Proc;
! 
!    function Attribute_Name
!       (N : Node_Id) return Name_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Reference);
!       return Name2 (N);
!    end Attribute_Name;
! 
!    function Aux_Decls_Node
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       return Node5 (N);
!    end Aux_Decls_Node;
! 
!    function Backwards_OK
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement);
!       return Flag6 (N);
!    end Backwards_OK;
! 
!    function Bad_Is_Detected
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body);
!       return Flag15 (N);
!    end Bad_Is_Detected;
! 
!    function Body_Required
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       return Flag13 (N);
!    end Body_Required;
! 
!    function Body_To_Inline
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Declaration);
!       return Node3 (N);
!    end Body_To_Inline;
! 
!    function Box_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Association
!         or else NT (N).Nkind = N_Formal_Abstract_Subprogram_Declaration
!         or else NT (N).Nkind = N_Formal_Concrete_Subprogram_Declaration
!         or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Generic_Association
!         or else NT (N).Nkind = N_Iterated_Component_Association
!         or else NT (N).Nkind = N_Iterated_Element_Association);
!       return Flag15 (N);
!    end Box_Present;
! 
!    function By_Ref
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Extended_Return_Statement
!         or else NT (N).Nkind = N_Simple_Return_Statement);
!       return Flag5 (N);
!    end By_Ref;
! 
!    function Char_Literal_Value
!       (N : Node_Id) return Uint is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Character_Literal);
!       return Uint2 (N);
!    end Char_Literal_Value;
! 
!    function Chars
!       (N : Node_Id) return Name_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Has_Chars);
!       return Name1 (N);
!    end Chars;
! 
!    function Check_Address_Alignment
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!           or else NT (N).Nkind = N_Attribute_Definition_Clause);
!       return Flag11 (N);
!    end Check_Address_Alignment;
! 
!    function Choice_Parameter
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Handler);
!       return Node2 (N);
!    end Choice_Parameter;
! 
!    function Choices
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Association);
!       return List1 (N);
!    end Choices;
! 
!    function Class_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Pragma);
!       return Flag6 (N);
!    end Class_Present;
! 
!    function Classifications
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Contract);
!       return Node3 (N);
!    end Classifications;
! 
!    function Cleanup_Actions
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement);
!       return List5 (N);
!    end Cleanup_Actions;
! 
!    function Comes_From_Extended_Return_Statement
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Simple_Return_Statement);
!       return Flag18 (N);
!    end Comes_From_Extended_Return_Statement;
! 
!    function Compile_Time_Known_Aggregate
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate);
!       return Flag18 (N);
!    end Compile_Time_Known_Aggregate;
! 
!    function Component_Associations
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate
!         or else NT (N).Nkind = N_Delta_Aggregate
!         or else NT (N).Nkind = N_Extension_Aggregate);
!       return List2 (N);
!    end Component_Associations;
! 
!    function Component_Clauses
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Record_Representation_Clause);
!       return List3 (N);
!    end Component_Clauses;
! 
!    function Component_Definition
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Declaration
!         or else NT (N).Nkind = N_Constrained_Array_Definition
!         or else NT (N).Nkind = N_Unconstrained_Array_Definition);
!       return Node4 (N);
!    end Component_Definition;
! 
!    function Component_Items
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_List);
!       return List3 (N);
!    end Component_Items;
! 
!    function Component_List
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Record_Definition
!         or else NT (N).Nkind = N_Variant);
!       return Node1 (N);
!    end Component_List;
! 
!    function Component_Name
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Clause);
!       return Node1 (N);
!    end Component_Name;
! 
!    function Componentwise_Assignment
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement);
!       return Flag14 (N);
!    end Componentwise_Assignment;
! 
!    function Condition
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Alternative
!         or else NT (N).Nkind = N_Delay_Alternative
!         or else NT (N).Nkind = N_Elsif_Part
!         or else NT (N).Nkind = N_Entry_Body_Formal_Part
!         or else NT (N).Nkind = N_Exit_Statement
!         or else NT (N).Nkind = N_If_Statement
!         or else NT (N).Nkind = N_Iteration_Scheme
!         or else NT (N).Nkind = N_Quantified_Expression
!         or else NT (N).Nkind = N_Raise_Constraint_Error
!         or else NT (N).Nkind = N_Raise_Program_Error
!         or else NT (N).Nkind = N_Raise_Storage_Error
!         or else NT (N).Nkind = N_Terminate_Alternative);
!       return Node1 (N);
!    end Condition;
! 
!    function Condition_Actions
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Elsif_Part
!         or else NT (N).Nkind = N_Iteration_Scheme);
!       return List3 (N);
!    end Condition_Actions;
! 
!    function Config_Pragmas
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit_Aux);
!       return List4 (N);
!    end Config_Pragmas;
! 
!    function Constant_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Definition
!         or else NT (N).Nkind = N_Access_To_Object_Definition
!         or else NT (N).Nkind = N_Object_Declaration);
!       return Flag17 (N);
!    end Constant_Present;
! 
!    function Constraint
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subtype_Indication);
!       return Node3 (N);
!    end Constraint;
! 
!    function Constraints
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Index_Or_Discriminant_Constraint);
!       return List1 (N);
!    end Constraints;
! 
!    function Context_Installed
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag13 (N);
!    end Context_Installed;
! 
!    function Context_Items
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       return List1 (N);
!    end Context_Items;
! 
!    function Context_Pending
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       return Flag16 (N);
!    end Context_Pending;
! 
!    function Contract_Test_Cases
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Contract);
!       return Node2 (N);
!    end Contract_Test_Cases;
! 
!    function Controlling_Argument
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Procedure_Call_Statement);
!       return Node1 (N);
!    end Controlling_Argument;
! 
!    function Conversion_OK
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Type_Conversion);
!       return Flag14 (N);
!    end Conversion_OK;
! 
!    function Convert_To_Return_False
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Raise_Expression);
!       return Flag13 (N);
!    end Convert_To_Return_False;
! 
!    function Corresponding_Aspect
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       return Node3 (N);
!    end Corresponding_Aspect;
! 
!    function Corresponding_Body
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Declaration
!         or else NT (N).Nkind = N_Generic_Package_Declaration
!         or else NT (N).Nkind = N_Generic_Subprogram_Declaration
!         or else NT (N).Nkind = N_Package_Body_Stub
!         or else NT (N).Nkind = N_Package_Declaration
!         or else NT (N).Nkind = N_Protected_Body_Stub
!         or else NT (N).Nkind = N_Protected_Type_Declaration
!         or else NT (N).Nkind = N_Subprogram_Body_Stub
!         or else NT (N).Nkind = N_Subprogram_Declaration
!         or else NT (N).Nkind = N_Task_Body_Stub
!         or else NT (N).Nkind = N_Task_Type_Declaration);
!       return Node5 (N);
!    end Corresponding_Body;
! 
!    function Corresponding_Formal_Spec
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
!       return Node3 (N);
!    end Corresponding_Formal_Spec;
! 
!    function Corresponding_Generic_Association
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Object_Renaming_Declaration);
!       return Node5 (N);
!    end Corresponding_Generic_Association;
! 
!    function Corresponding_Integer_Value
!       (N : Node_Id) return Uint is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Real_Literal);
!       return Uint4 (N);
!    end Corresponding_Integer_Value;
! 
!    function Corresponding_Spec
!       (N : Node_Id) return Entity_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Expression_Function
!         or else NT (N).Nkind = N_Package_Body
!         or else NT (N).Nkind = N_Protected_Body
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration
!         or else NT (N).Nkind = N_Task_Body
!         or else NT (N).Nkind = N_With_Clause);
!       return Node5 (N);
!    end Corresponding_Spec;
! 
!    function Corresponding_Spec_Of_Stub
!       (N : Node_Id) return Entity_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Package_Body_Stub
!         or else NT (N).Nkind = N_Protected_Body_Stub
!         or else NT (N).Nkind = N_Subprogram_Body_Stub
!         or else NT (N).Nkind = N_Task_Body_Stub);
!       return Node2 (N);
!    end Corresponding_Spec_Of_Stub;
! 
!    function Corresponding_Stub
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subunit);
!       return Node3 (N);
!    end Corresponding_Stub;
! 
!    function Dcheck_Function
!       (N : Node_Id) return Entity_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Variant);
!       return Node5 (N);
!    end Dcheck_Function;
! 
!    function Declarations
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Statement
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Compilation_Unit_Aux
!         or else NT (N).Nkind = N_Entry_Body
!         or else NT (N).Nkind = N_Package_Body
!         or else NT (N).Nkind = N_Protected_Body
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Task_Body);
!       return List2 (N);
!    end Declarations;
! 
!    function Default_Expression
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification);
!       return Node5 (N);
!    end Default_Expression;
! 
!    function Default_Storage_Pool
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit_Aux);
!       return Node3 (N);
!    end Default_Storage_Pool;
! 
!    function Default_Name
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Abstract_Subprogram_Declaration
!         or else NT (N).Nkind = N_Formal_Concrete_Subprogram_Declaration);
!       return Node2 (N);
!    end Default_Name;
! 
!    function Defining_Identifier
!       (N : Node_Id) return Entity_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Declaration
!         or else NT (N).Nkind = N_Defining_Program_Unit_Name
!         or else NT (N).Nkind = N_Discriminant_Specification
!         or else NT (N).Nkind = N_Entry_Body
!         or else NT (N).Nkind = N_Entry_Declaration
!         or else NT (N).Nkind = N_Entry_Index_Specification
!         or else NT (N).Nkind = N_Exception_Declaration
!         or else NT (N).Nkind = N_Exception_Renaming_Declaration
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Formal_Type_Declaration
!         or else NT (N).Nkind = N_Full_Type_Declaration
!         or else NT (N).Nkind = N_Implicit_Label_Declaration
!         or else NT (N).Nkind = N_Incomplete_Type_Declaration
!         or else NT (N).Nkind = N_Iterated_Component_Association
!         or else NT (N).Nkind = N_Iterator_Specification
!         or else NT (N).Nkind = N_Loop_Parameter_Specification
!         or else NT (N).Nkind = N_Number_Declaration
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Object_Renaming_Declaration
!         or else NT (N).Nkind = N_Package_Body_Stub
!         or else NT (N).Nkind = N_Parameter_Specification
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Private_Type_Declaration
!         or else NT (N).Nkind = N_Protected_Body
!         or else NT (N).Nkind = N_Protected_Body_Stub
!         or else NT (N).Nkind = N_Protected_Type_Declaration
!         or else NT (N).Nkind = N_Single_Protected_Declaration
!         or else NT (N).Nkind = N_Single_Task_Declaration
!         or else NT (N).Nkind = N_Subtype_Declaration
!         or else NT (N).Nkind = N_Task_Body
!         or else NT (N).Nkind = N_Task_Body_Stub
!         or else NT (N).Nkind = N_Task_Type_Declaration);
!       return Node1 (N);
!    end Defining_Identifier;
! 
!    function Defining_Unit_Name
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Function_Specification
!         or else NT (N).Nkind = N_Generic_Function_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Package_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Procedure_Renaming_Declaration
!         or else NT (N).Nkind = N_Package_Body
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Package_Renaming_Declaration
!         or else NT (N).Nkind = N_Package_Specification
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Procedure_Specification);
!       return Node1 (N);
!    end Defining_Unit_Name;
! 
!    function Delay_Alternative
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Timed_Entry_Call);
!       return Node4 (N);
!    end Delay_Alternative;
! 
!    function Delay_Statement
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Delay_Alternative);
!       return Node2 (N);
!    end Delay_Statement;
! 
!    function Delta_Expression
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Decimal_Fixed_Point_Definition
!         or else NT (N).Nkind = N_Delta_Constraint
!         or else NT (N).Nkind = N_Ordinary_Fixed_Point_Definition);
!       return Node3 (N);
!    end Delta_Expression;
! 
!    function Digits_Expression
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Decimal_Fixed_Point_Definition
!         or else NT (N).Nkind = N_Digits_Constraint
!         or else NT (N).Nkind = N_Floating_Point_Definition);
!       return Node2 (N);
!    end Digits_Expression;
! 
!    function Discr_Check_Funcs_Built
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Full_Type_Declaration);
!       return Flag11 (N);
!    end Discr_Check_Funcs_Built;
! 
!    function Discrete_Choices
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Case_Expression_Alternative
!         or else NT (N).Nkind = N_Case_Statement_Alternative
!         or else NT (N).Nkind = N_Iterated_Component_Association
!         or else NT (N).Nkind = N_Variant);
!       return List4 (N);
!    end Discrete_Choices;
! 
!    function Discrete_Range
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Slice);
!       return Node4 (N);
!    end Discrete_Range;
! 
!    function Discrete_Subtype_Definition
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Declaration
!         or else NT (N).Nkind = N_Entry_Index_Specification
!         or else NT (N).Nkind = N_Loop_Parameter_Specification);
!       return Node4 (N);
!    end Discrete_Subtype_Definition;
! 
!    function Discrete_Subtype_Definitions
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Constrained_Array_Definition);
!       return List2 (N);
!    end Discrete_Subtype_Definitions;
! 
!    function Discriminant_Specifications
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Type_Declaration
!         or else NT (N).Nkind = N_Full_Type_Declaration
!         or else NT (N).Nkind = N_Incomplete_Type_Declaration
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Private_Type_Declaration
!         or else NT (N).Nkind = N_Protected_Type_Declaration
!         or else NT (N).Nkind = N_Task_Type_Declaration);
!       return List4 (N);
!    end Discriminant_Specifications;
! 
!    function Discriminant_Type
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Discriminant_Specification);
!       return Node5 (N);
!    end Discriminant_Type;
! 
!    function Do_Accessibility_Check
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Parameter_Specification);
!       return Flag13 (N);
!    end Do_Accessibility_Check;
! 
!    function Do_Discriminant_Check
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Selected_Component
!         or else NT (N).Nkind = N_Type_Conversion);
!       return Flag3 (N);
!    end Do_Discriminant_Check;
! 
!    function Do_Division_Check
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Op_Divide
!         or else NT (N).Nkind = N_Op_Mod
!         or else NT (N).Nkind = N_Op_Rem);
!       return Flag13 (N);
!    end Do_Division_Check;
! 
!    function Do_Length_Check
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Op_And
!         or else NT (N).Nkind = N_Op_Or
!         or else NT (N).Nkind = N_Op_Xor
!         or else NT (N).Nkind = N_Type_Conversion);
!       return Flag4 (N);
!    end Do_Length_Check;
! 
!    function Do_Overflow_Check
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Op
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Case_Expression
!         or else NT (N).Nkind = N_If_Expression
!         or else NT (N).Nkind = N_Type_Conversion);
!       return Flag17 (N);
!    end Do_Overflow_Check;
! 
!    function Do_Range_Check
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Subexpr);
!       return Flag9 (N);
!    end Do_Range_Check;
! 
!    function Do_Storage_Check
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator
!         or else NT (N).Nkind = N_Subprogram_Body);
!       return Flag17 (N);
!    end Do_Storage_Check;
! 
!    function Do_Tag_Check
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Extended_Return_Statement
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Procedure_Call_Statement
!         or else NT (N).Nkind = N_Simple_Return_Statement
!         or else NT (N).Nkind = N_Type_Conversion);
!       return Flag13 (N);
!    end Do_Tag_Check;
! 
!    function Elaborate_All_Desirable
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag9 (N);
!    end Elaborate_All_Desirable;
! 
!    function Elaborate_All_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag14 (N);
!    end Elaborate_All_Present;
! 
!    function Elaborate_Desirable
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag11 (N);
!    end Elaborate_Desirable;
! 
!    function Elaborate_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag4 (N);
!    end Elaborate_Present;
! 
!    function Else_Actions
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_If_Expression);
!       return List3 (N);
!    end Else_Actions;
! 
!    function Else_Statements
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Conditional_Entry_Call
!         or else NT (N).Nkind = N_If_Statement
!         or else NT (N).Nkind = N_Selective_Accept);
!       return List4 (N);
!    end Else_Statements;
! 
!    function Elsif_Parts
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_If_Statement);
!       return List3 (N);
!    end Elsif_Parts;
! 
!    function Enclosing_Variant
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Variant);
!       return Node2 (N);
!    end Enclosing_Variant;
! 
!    function End_Label
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Enumeration_Type_Definition
!         or else NT (N).Nkind = N_Handled_Sequence_Of_Statements
!         or else NT (N).Nkind = N_Loop_Statement
!         or else NT (N).Nkind = N_Package_Specification
!         or else NT (N).Nkind = N_Protected_Body
!         or else NT (N).Nkind = N_Protected_Definition
!         or else NT (N).Nkind = N_Record_Definition
!         or else NT (N).Nkind = N_Task_Definition);
!       return Node4 (N);
!    end End_Label;
! 
!    function End_Span
!       (N : Node_Id) return Uint is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Case_Statement
!         or else NT (N).Nkind = N_If_Statement);
!       return Uint5 (N);
!    end End_Span;
! 
!    function Entity
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Has_Entity
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Attribute_Definition_Clause
!         or else NT (N).Nkind = N_Freeze_Entity
!         or else NT (N).Nkind = N_Freeze_Generic_Entity);
!       return Node4 (N);
!    end Entity;
! 
!    function Entity_Or_Associated_Node
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Has_Entity
!         or else NT (N).Nkind = N_Freeze_Entity);
!       return Node4 (N);
!    end Entity_Or_Associated_Node;
! 
!    function Entry_Body_Formal_Part
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Body);
!       return Node5 (N);
!    end Entry_Body_Formal_Part;
! 
!    function Entry_Call_Alternative
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Conditional_Entry_Call
!         or else NT (N).Nkind = N_Timed_Entry_Call);
!       return Node1 (N);
!    end Entry_Call_Alternative;
! 
!    function Entry_Call_Statement
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Call_Alternative);
!       return Node1 (N);
!    end Entry_Call_Statement;
! 
!    function Entry_Direct_Name
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Statement);
!       return Node1 (N);
!    end Entry_Direct_Name;
! 
!    function Entry_Index
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Statement);
!       return Node5 (N);
!    end Entry_Index;
! 
!    function Entry_Index_Specification
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Body_Formal_Part);
!       return Node4 (N);
!    end Entry_Index_Specification;
! 
!    function Etype
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Has_Etype);
!       return Node5 (N);
!    end Etype;
! 
!    function Exception_Choices
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Handler);
!       return List4 (N);
!    end Exception_Choices;
! 
!    function Exception_Handlers
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Handled_Sequence_Of_Statements);
!       return List5 (N);
!    end Exception_Handlers;
! 
!    function Exception_Junk
!      (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Goto_Statement
!         or else NT (N).Nkind = N_Label
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Subtype_Declaration);
!       return Flag8 (N);
!    end Exception_Junk;
! 
!    function Exception_Label
!      (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Handler
!         or else NT (N).Nkind = N_Push_Constraint_Error_Label
!         or else NT (N).Nkind = N_Push_Program_Error_Label
!         or else NT (N).Nkind = N_Push_Storage_Error_Label);
!       return Node5 (N);
!    end Exception_Label;
! 
!    function Expansion_Delayed
!      (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate
!         or else NT (N).Nkind = N_Extension_Aggregate);
!       return Flag11 (N);
!    end Expansion_Delayed;
! 
!    function Explicit_Actual_Parameter
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Parameter_Association);
!       return Node3 (N);
!    end Explicit_Actual_Parameter;
! 
!    function Explicit_Generic_Actual_Parameter
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Generic_Association);
!       return Node1 (N);
!    end Explicit_Generic_Actual_Parameter;
! 
!    function Expression
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_At_Clause
!         or else NT (N).Nkind = N_Attribute_Definition_Clause
!         or else NT (N).Nkind = N_Case_Expression
!         or else NT (N).Nkind = N_Case_Expression_Alternative
!         or else NT (N).Nkind = N_Case_Statement
!         or else NT (N).Nkind = N_Code_Statement
!         or else NT (N).Nkind = N_Component_Association
!         or else NT (N).Nkind = N_Component_Declaration
!         or else NT (N).Nkind = N_Delay_Relative_Statement
!         or else NT (N).Nkind = N_Delay_Until_Statement
!         or else NT (N).Nkind = N_Delta_Aggregate
!         or else NT (N).Nkind = N_Discriminant_Association
!         or else NT (N).Nkind = N_Discriminant_Specification
!         or else NT (N).Nkind = N_Exception_Declaration
!         or else NT (N).Nkind = N_Expression_Function
!         or else NT (N).Nkind = N_Expression_With_Actions
!         or else NT (N).Nkind = N_Free_Statement
!         or else NT (N).Nkind = N_Iterated_Component_Association
!         or else NT (N).Nkind = N_Iterated_Element_Association
!         or else NT (N).Nkind = N_Mod_Clause
!         or else NT (N).Nkind = N_Modular_Type_Definition
!         or else NT (N).Nkind = N_Number_Declaration
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification
!         or else NT (N).Nkind = N_Pragma_Argument_Association
!         or else NT (N).Nkind = N_Qualified_Expression
!         or else NT (N).Nkind = N_Raise_Expression
!         or else NT (N).Nkind = N_Raise_Statement
!         or else NT (N).Nkind = N_Simple_Return_Statement
!         or else NT (N).Nkind = N_Type_Conversion
!         or else NT (N).Nkind = N_Unchecked_Expression
!         or else NT (N).Nkind = N_Unchecked_Type_Conversion);
!       return Node3 (N);
!    end Expression;
! 
!    function Expression_Copy
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma_Argument_Association);
!       return Node2 (N);
!    end Expression_Copy;
! 
!    function Expressions
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Extension_Aggregate
!         or else NT (N).Nkind = N_If_Expression
!         or else NT (N).Nkind = N_Indexed_Component);
!       return List1 (N);
!    end Expressions;
! 
!    function First_Bit
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Clause);
!       return Node3 (N);
!    end First_Bit;
! 
!    function First_Inlined_Subprogram
!       (N : Node_Id) return Entity_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       return Node3 (N);
!    end First_Inlined_Subprogram;
! 
!    function First_Name
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag5 (N);
!    end First_Name;
! 
!    function First_Named_Actual
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Call_Statement
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Procedure_Call_Statement);
!       return Node4 (N);
!    end First_Named_Actual;
! 
!    function First_Real_Statement
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Handled_Sequence_Of_Statements);
!       return Node2 (N);
!    end First_Real_Statement;
! 
!    function First_Subtype_Link
!       (N : Node_Id) return Entity_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Freeze_Entity);
!       return Node5 (N);
!    end First_Subtype_Link;
! 
!    function Float_Truncate
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Type_Conversion);
!       return Flag11 (N);
!    end Float_Truncate;
! 
!    function Formal_Type_Definition
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Type_Declaration);
!       return Node3 (N);
!    end Formal_Type_Definition;
! 
!    function Forwards_OK
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement);
!       return Flag5 (N);
!    end Forwards_OK;
! 
!    function From_Aspect_Specification
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Definition_Clause
!         or else NT (N).Nkind = N_Pragma);
!       return Flag13 (N);
!    end From_Aspect_Specification;
! 
!    function From_At_End
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Raise_Statement);
!       return Flag4 (N);
!    end From_At_End;
! 
!    function From_At_Mod
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Definition_Clause);
!       return Flag4 (N);
!    end From_At_Mod;
! 
!    function From_Conditional_Expression
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Case_Statement
!         or else NT (N).Nkind = N_If_Statement);
!       return Flag1 (N);
!    end From_Conditional_Expression;
! 
!    function From_Default
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
!       return Flag6 (N);
!    end From_Default;
! 
!    function Generalized_Indexing
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Indexed_Component);
!       return Node4 (N);
!    end Generalized_Indexing;
! 
!    function Generic_Associations
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Instantiation);
!       return List3 (N);
!    end Generic_Associations;
! 
!    function Generic_Formal_Declarations
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Generic_Package_Declaration
!         or else NT (N).Nkind = N_Generic_Subprogram_Declaration);
!       return List2 (N);
!    end Generic_Formal_Declarations;
! 
!    function Generic_Parent
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Specification
!         or else NT (N).Nkind = N_Package_Specification
!         or else NT (N).Nkind = N_Procedure_Specification);
!       return Node5 (N);
!    end Generic_Parent;
! 
!    function Generic_Parent_Type
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subtype_Declaration);
!       return Node4 (N);
!    end Generic_Parent_Type;
! 
!    function Handled_Statement_Sequence
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Statement
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Entry_Body
!         or else NT (N).Nkind = N_Extended_Return_Statement
!         or else NT (N).Nkind = N_Package_Body
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Task_Body);
!       return Node4 (N);
!    end Handled_Statement_Sequence;
! 
!    function Handler_List_Entry
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Object_Declaration);
!       return Node2 (N);
!    end Handler_List_Entry;
! 
!    function Has_Created_Identifier
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Loop_Statement);
!       return Flag15 (N);
!    end Has_Created_Identifier;
! 
!    function Has_Dereference_Action
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Explicit_Dereference);
!       return Flag13 (N);
!    end Has_Dereference_Action;
! 
!    function Has_Dynamic_Length_Check
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Subexpr);
!       return Flag10 (N);
!    end Has_Dynamic_Length_Check;
! 
!    function Has_Init_Expression
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Object_Declaration);
!       return Flag14 (N);
!    end Has_Init_Expression;
! 
!    function Has_Local_Raise
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Handler);
!       return Flag8 (N);
!    end Has_Local_Raise;
! 
!    function Has_No_Elaboration_Code
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       return Flag17 (N);
!    end Has_No_Elaboration_Code;
! 
!    function Has_Pragma_Suppress_All
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       return Flag14 (N);
!    end Has_Pragma_Suppress_All;
! 
!    function Has_Private_View
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!        or else NT (N).Nkind in N_Op
!        or else NT (N).Nkind = N_Character_Literal
!        or else NT (N).Nkind = N_Expanded_Name
!        or else NT (N).Nkind = N_Identifier
!        or else NT (N).Nkind = N_Operator_Symbol);
!       return Flag11 (N);
!    end Has_Private_View;
! 
!    function Has_Relative_Deadline_Pragma
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Task_Definition);
!       return Flag9 (N);
!    end Has_Relative_Deadline_Pragma;
! 
!    function Has_Self_Reference
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate
!         or else NT (N).Nkind = N_Extension_Aggregate);
!       return Flag13 (N);
!    end Has_Self_Reference;
! 
!    function Has_SP_Choice
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Case_Expression_Alternative
!         or else NT (N).Nkind = N_Case_Statement_Alternative
!         or else NT (N).Nkind = N_Variant);
!       return Flag15 (N);
!    end Has_SP_Choice;
! 
!    function Has_Storage_Size_Pragma
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Task_Definition);
!       return Flag5 (N);
!    end Has_Storage_Size_Pragma;
! 
!    function Has_Target_Names
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement);
!       return Flag8 (N);
!    end Has_Target_Names;
! 
!    function Has_Wide_Character
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_String_Literal);
!       return Flag11 (N);
!    end Has_Wide_Character;
! 
!    function Has_Wide_Wide_Character
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_String_Literal);
!       return Flag13 (N);
!    end Has_Wide_Wide_Character;
! 
!    function Header_Size_Added
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Reference);
!       return Flag11 (N);
!    end Header_Size_Added;
! 
!    function Hidden_By_Use_Clause
!      (N : Node_Id) return Elist_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       return Elist5 (N);
!    end Hidden_By_Use_Clause;
! 
!    function High_Bound
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Range
!         or else NT (N).Nkind = N_Real_Range_Specification
!         or else NT (N).Nkind = N_Signed_Integer_Type_Definition);
!       return Node2 (N);
!    end High_Bound;
! 
!    function Identifier
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_At_Clause
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Designator
!         or else NT (N).Nkind = N_Enumeration_Representation_Clause
!         or else NT (N).Nkind = N_Label
!         or else NT (N).Nkind = N_Loop_Statement
!         or else NT (N).Nkind = N_Record_Representation_Clause);
!       return Node1 (N);
!    end Identifier;
! 
!    function Implicit_With
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag16 (N);
!    end Implicit_With;
! 
!    function Interface_List
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Protected_Type_Declaration
!         or else NT (N).Nkind = N_Record_Definition
!         or else NT (N).Nkind = N_Single_Protected_Declaration
!         or else NT (N).Nkind = N_Single_Task_Declaration
!         or else NT (N).Nkind = N_Task_Type_Declaration);
!       return List2 (N);
!    end Interface_List;
! 
!    function Interface_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Record_Definition);
!       return Flag16 (N);
!    end Interface_Present;
! 
!    function Import_Interface_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       return Flag16 (N);
!    end Import_Interface_Present;
! 
!    function In_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification);
!       return Flag15 (N);
!    end In_Present;
! 
!    function Includes_Infinities
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Range);
!       return Flag11 (N);
!    end Includes_Infinities;
! 
!    function Incomplete_View
!      (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Full_Type_Declaration);
!       return Node2 (N);
!    end Incomplete_View;
! 
!    function Inherited_Discriminant
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Association);
!       return Flag13 (N);
!    end Inherited_Discriminant;
! 
!    function Instance_Spec
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Instantiation);
!       return Node5 (N);
!    end Instance_Spec;
! 
!    function Intval
!       (N : Node_Id) return Uint is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Integer_Literal);
!       return Uint3 (N);
!    end Intval;
! 
!    function Is_Abort_Block
!      (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement);
!       return Flag4 (N);
!    end Is_Abort_Block;
! 
!    function Is_Accessibility_Actual
!      (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Parameter_Association);
!       return Flag13 (N);
!    end Is_Accessibility_Actual;
! 
!    function Is_Analyzed_Pragma
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       return Flag5 (N);
!    end Is_Analyzed_Pragma;
! 
!    function Is_Asynchronous_Call_Block
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement);
!       return Flag7 (N);
!    end Is_Asynchronous_Call_Block;
! 
!    function Is_Boolean_Aspect
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification);
!       return Flag16 (N);
!    end Is_Boolean_Aspect;
! 
!    function Is_Checked
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Pragma);
!       return Flag11 (N);
!    end Is_Checked;
! 
!    function Is_Checked_Ghost_Pragma
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       return Flag3 (N);
!    end Is_Checked_Ghost_Pragma;
! 
!    function Is_Component_Left_Opnd
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Op_Concat);
!       return Flag13 (N);
!    end Is_Component_Left_Opnd;
! 
!    function Is_Component_Right_Opnd
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Op_Concat);
!       return Flag14 (N);
!    end Is_Component_Right_Opnd;
! 
!    function Is_Controlling_Actual
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Subexpr);
!       return Flag16 (N);
!    end Is_Controlling_Actual;
! 
!    function Is_Declaration_Level_Node
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Call_Marker
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Instantiation);
!       return Flag5 (N);
!    end Is_Declaration_Level_Node;
! 
!    function Is_Delayed_Aspect
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Attribute_Definition_Clause
!         or else NT (N).Nkind = N_Pragma);
!       return Flag14 (N);
!    end Is_Delayed_Aspect;
! 
!    function Is_Disabled
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Pragma);
!       return Flag15 (N);
!    end Is_Disabled;
! 
!    function Is_Dispatching_Call
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Call_Marker);
!       return Flag6 (N);
!    end Is_Dispatching_Call;
! 
!    function Is_Dynamic_Coextension
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator);
!       return Flag18 (N);
!    end Is_Dynamic_Coextension;
! 
!    function Is_Effective_Use_Clause
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       return Flag1 (N);
!    end Is_Effective_Use_Clause;
! 
!    function Is_Elaboration_Checks_OK_Node
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Call_Marker
!         or else NT (N).Nkind = N_Entry_Call_Statement
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Identifier
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Call_Statement
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Requeue_Statement
!         or else NT (N).Nkind = N_Variable_Reference_Marker);
!       return Flag1 (N);
!    end Is_Elaboration_Checks_OK_Node;
! 
!    function Is_Elaboration_Code
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement);
!       return Flag9 (N);
!    end Is_Elaboration_Code;
! 
!    function Is_Elaboration_Warnings_OK_Node
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Call_Marker
!         or else NT (N).Nkind = N_Entry_Call_Statement
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Identifier
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Call_Statement
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Requeue_Statement
!         or else NT (N).Nkind = N_Variable_Reference_Marker);
!       return Flag3 (N);
!    end Is_Elaboration_Warnings_OK_Node;
! 
!    function Is_Elsif
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_If_Expression);
!       return Flag13 (N);
!    end Is_Elsif;
! 
!    function Is_Entry_Barrier_Function
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Subprogram_Declaration);
!       return Flag8 (N);
!    end Is_Entry_Barrier_Function;
! 
!    function Is_Expanded_Build_In_Place_Call
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Call);
!       return Flag11 (N);
!    end Is_Expanded_Build_In_Place_Call;
! 
!    function Is_Expanded_Contract
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Contract);
!       return Flag1 (N);
!    end Is_Expanded_Contract;
! 
!    function Is_Finalization_Wrapper
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement);
!       return Flag9 (N);
!    end Is_Finalization_Wrapper;
! 
!    function Is_Folded_In_Parser
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_String_Literal);
!       return Flag4 (N);
!    end Is_Folded_In_Parser;
! 
!    function Is_Generic_Contract_Pragma
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       return Flag2 (N);
!    end Is_Generic_Contract_Pragma;
! 
!    function Is_Homogeneous_Aggregate
!      (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate);
!       return Flag14 (N);
!    end Is_Homogeneous_Aggregate;
! 
!    function Is_Ignored
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Pragma);
!       return Flag9 (N);
!    end Is_Ignored;
! 
!    function Is_Ignored_Ghost_Pragma
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       return Flag8 (N);
!    end Is_Ignored_Ghost_Pragma;
! 
!    function Is_In_Discriminant_Check
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Selected_Component);
!       return Flag11 (N);
!    end Is_In_Discriminant_Check;
! 
!    function Is_Inherited_Pragma
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       return Flag4 (N);
!    end Is_Inherited_Pragma;
! 
!    function Is_Initialization_Block
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement);
!       return Flag1 (N);
!    end Is_Initialization_Block;
! 
!    function Is_Known_Guaranteed_ABE
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Call_Marker
!         or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Call_Statement
!         or else NT (N).Nkind = N_Procedure_Instantiation);
!       return Flag18 (N);
!    end Is_Known_Guaranteed_ABE;
! 
!    function Is_Machine_Number
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Real_Literal);
!       return Flag11 (N);
!    end Is_Machine_Number;
! 
!    function Is_Null_Loop
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Loop_Statement);
!       return Flag16 (N);
!    end Is_Null_Loop;
! 
!    function Is_Overloaded
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Subexpr);
!       return Flag5 (N);
!    end Is_Overloaded;
! 
!    function Is_Power_Of_2_For_Shift
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Op_Expon);
!       return Flag13 (N);
!    end Is_Power_Of_2_For_Shift;
! 
!    function Is_Preelaborable_Call
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Call_Marker);
!       return Flag7 (N);
!    end Is_Preelaborable_Call;
! 
!    function Is_Prefixed_Call
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Selected_Component);
!       return Flag17 (N);
!    end Is_Prefixed_Call;
! 
!    function Is_Protected_Subprogram_Body
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body);
!       return Flag7 (N);
!    end Is_Protected_Subprogram_Body;
! 
!    function Is_Qualified_Universal_Literal
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Qualified_Expression);
!       return Flag4 (N);
!    end Is_Qualified_Universal_Literal;
! 
!    function Is_Read
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Variable_Reference_Marker);
!       return Flag4 (N);
!    end Is_Read;
! 
!    function Is_Source_Call
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Call_Marker);
!       return Flag4 (N);
!    end Is_Source_Call;
! 
!    function Is_SPARK_Mode_On_Node
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Call_Marker
!         or else NT (N).Nkind = N_Entry_Call_Statement
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Identifier
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Call_Statement
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Requeue_Statement
!         or else NT (N).Nkind = N_Variable_Reference_Marker);
!       return Flag2 (N);
!    end Is_SPARK_Mode_On_Node;
! 
!    function Is_Static_Coextension
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator);
!       return Flag14 (N);
!    end Is_Static_Coextension;
! 
!    function Is_Static_Expression
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Subexpr);
!       return Flag6 (N);
!    end Is_Static_Expression;
! 
!    function Is_Subprogram_Descriptor
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Object_Declaration);
!       return Flag16 (N);
!    end Is_Subprogram_Descriptor;
! 
!    function Is_Task_Allocation_Block
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement);
!       return Flag6 (N);
!    end Is_Task_Allocation_Block;
! 
!    function Is_Task_Body_Procedure
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Subprogram_Declaration);
!       return Flag1 (N);
!    end Is_Task_Body_Procedure;
! 
!    function Is_Task_Master
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Task_Body);
!       return Flag5 (N);
!    end Is_Task_Master;
! 
!    function Is_Write
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Variable_Reference_Marker);
!       return Flag5 (N);
!    end Is_Write;
! 
!    function Iterator_Filter
!      (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Iterator_Specification
!         or else NT (N).Nkind = N_Loop_Parameter_Specification);
!       return Node3 (N);
!    end Iterator_Filter;
! 
!    function Iteration_Scheme
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Loop_Statement);
!       return Node2 (N);
!    end Iteration_Scheme;
! 
!    function Iterator_Specification
!      (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Iterated_Component_Association
!         or else NT (N).Nkind = N_Iterated_Element_Association
!         or else NT (N).Nkind = N_Iteration_Scheme
!         or else NT (N).Nkind = N_Quantified_Expression);
!       return Node2 (N);
!    end Iterator_Specification;
! 
!    function Itype
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!       or else NT (N).Nkind = N_Itype_Reference);
!       return Node1 (N);
!    end Itype;
! 
!    function Key_Expression
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!       or else NT (N).Nkind = N_Iterated_Element_Association);
!       return Node1 (N);
!    end Key_Expression;
! 
!    function Kill_Range_Check
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Unchecked_Type_Conversion);
!       return Flag11 (N);
!    end Kill_Range_Check;
! 
!    function Label_Construct
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Implicit_Label_Declaration);
!       return Node2 (N);
!    end Label_Construct;
! 
!    function Last_Bit
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Clause);
!       return Node4 (N);
!    end Last_Bit;
! 
!    function Last_Name
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag6 (N);
!    end Last_Name;
! 
!    function Left_Opnd
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_And_Then
!         or else NT (N).Nkind = N_In
!         or else NT (N).Nkind = N_Not_In
!         or else NT (N).Nkind = N_Or_Else
!         or else NT (N).Nkind in N_Binary_Op);
!       return Node2 (N);
!    end Left_Opnd;
! 
!    function Library_Unit
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit
!         or else NT (N).Nkind = N_Package_Body_Stub
!         or else NT (N).Nkind = N_Protected_Body_Stub
!         or else NT (N).Nkind = N_Subprogram_Body_Stub
!         or else NT (N).Nkind = N_Task_Body_Stub
!         or else NT (N).Nkind = N_With_Clause);
!       return Node4 (N);
!    end Library_Unit;
! 
!    function Limited_View_Installed
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Package_Specification
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag18 (N);
!    end Limited_View_Installed;
! 
!    function Limited_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Private_Type_Definition
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Private_Type_Declaration
!         or else NT (N).Nkind = N_Record_Definition
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag17 (N);
!    end Limited_Present;
! 
!    function Literals
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Enumeration_Type_Definition);
!       return List1 (N);
!    end Literals;
! 
!    function Local_Raise_Not_OK
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Handler);
!       return Flag7 (N);
!    end Local_Raise_Not_OK;
! 
!    function Local_Raise_Statements
!       (N : Node_Id) return Elist_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Handler);
!       return Elist1 (N);
!    end Local_Raise_Statements;
! 
!    function Loop_Actions
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Association
!         or else NT (N).Nkind = N_Iterated_Component_Association
!         or else NT (N).Nkind = N_Iterated_Element_Association);
!       return List5 (N);
!    end Loop_Actions;
! 
!    function Loop_Parameter_Specification
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Iterated_Element_Association
!         or else NT (N).Nkind = N_Iteration_Scheme
!         or else NT (N).Nkind = N_Quantified_Expression);
!       return Node4 (N);
!    end Loop_Parameter_Specification;
! 
!    function Low_Bound
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Range
!         or else NT (N).Nkind = N_Real_Range_Specification
!         or else NT (N).Nkind = N_Signed_Integer_Type_Definition);
!       return Node1 (N);
!    end Low_Bound;
! 
!    function Mod_Clause
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Record_Representation_Clause);
!       return Node2 (N);
!    end Mod_Clause;
! 
!    function More_Ids
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Declaration
!         or else NT (N).Nkind = N_Discriminant_Specification
!         or else NT (N).Nkind = N_Exception_Declaration
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Number_Declaration
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       return Flag5 (N);
!    end More_Ids;
! 
!    function Must_Be_Byte_Aligned
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Reference);
!       return Flag14 (N);
!    end Must_Be_Byte_Aligned;
! 
!    function Must_Not_Freeze
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subtype_Indication
!         or else NT (N).Nkind in N_Subexpr);
!       return Flag8 (N);
!    end Must_Not_Freeze;
! 
!    function Must_Not_Override
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Declaration
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Function_Specification
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Procedure_Specification);
!       return Flag15 (N);
!    end Must_Not_Override;
! 
!    function Must_Override
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Declaration
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Function_Specification
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Procedure_Specification);
!       return Flag14 (N);
!    end Must_Override;
! 
!    function Name
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Attribute_Definition_Clause
!         or else NT (N).Nkind = N_Defining_Program_Unit_Name
!         or else NT (N).Nkind = N_Designator
!         or else NT (N).Nkind = N_Entry_Call_Statement
!         or else NT (N).Nkind = N_Exception_Renaming_Declaration
!         or else NT (N).Nkind = N_Exit_Statement
!         or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Generic_Function_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Package_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Procedure_Renaming_Declaration
!         or else NT (N).Nkind = N_Goto_Statement
!         or else NT (N).Nkind = N_Iterator_Specification
!         or else NT (N).Nkind = N_Object_Renaming_Declaration
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Package_Renaming_Declaration
!         or else NT (N).Nkind = N_Procedure_Call_Statement
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Raise_Expression
!         or else NT (N).Nkind = N_Raise_Statement
!         or else NT (N).Nkind = N_Requeue_Statement
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration
!         or else NT (N).Nkind = N_Subunit
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Variant_Part
!         or else NT (N).Nkind = N_With_Clause);
!       return Node2 (N);
!    end Name;
! 
!    function Names
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Abort_Statement);
!       return List2 (N);
!    end Names;
! 
!    function Next_Entity
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Defining_Character_Literal
!         or else NT (N).Nkind = N_Defining_Identifier
!         or else NT (N).Nkind = N_Defining_Operator_Symbol);
!       return Node2 (N);
!    end Next_Entity;
! 
!    function Next_Exit_Statement
!      (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exit_Statement);
!       return Node3 (N);
!    end Next_Exit_Statement;
! 
!    function Next_Implicit_With
!      (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       return Node3 (N);
!    end Next_Implicit_With;
! 
!    function Next_Named_Actual
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Parameter_Association);
!       return Node4 (N);
!    end Next_Named_Actual;
! 
!    function Next_Pragma
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       return Node1 (N);
!    end Next_Pragma;
! 
!    function Next_Rep_Item
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Attribute_Definition_Clause
!         or else NT (N).Nkind = N_Enumeration_Representation_Clause
!         or else NT (N).Nkind = N_Null_Statement
!         or else NT (N).Nkind = N_Pragma
!         or else NT (N).Nkind = N_Record_Representation_Clause);
!       return Node5 (N);
!    end Next_Rep_Item;
! 
!    function Next_Use_Clause
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       return Node3 (N);
!    end Next_Use_Clause;
! 
!    function No_Ctrl_Actions
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement);
!       return Flag7 (N);
!    end No_Ctrl_Actions;
! 
!    function No_Elaboration_Check
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Procedure_Call_Statement);
!       return Flag4 (N);
!    end No_Elaboration_Check;
! 
!    function No_Entities_Ref_In_Spec
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag8 (N);
!    end No_Entities_Ref_In_Spec;
! 
!    function No_Initialization
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator
!         or else NT (N).Nkind = N_Object_Declaration);
!       return Flag13 (N);
!    end No_Initialization;
! 
!    function No_Minimize_Eliminate
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_In
!         or else NT (N).Nkind = N_Not_In);
!       return Flag17 (N);
!    end No_Minimize_Eliminate;
! 
!    function No_Side_Effect_Removal
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Call);
!       return Flag17 (N);
!    end No_Side_Effect_Removal;
! 
!    function No_Truncation
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Unchecked_Type_Conversion);
!       return Flag17 (N);
!    end No_Truncation;
! 
!    function Null_Excluding_Subtype
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_To_Object_Definition);
!       return Flag16 (N);
!    end Null_Excluding_Subtype;
! 
!    function Null_Exclusion_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Definition
!         or else NT (N).Nkind = N_Access_Function_Definition
!         or else NT (N).Nkind = N_Access_Procedure_Definition
!         or else NT (N).Nkind = N_Access_To_Object_Definition
!         or else NT (N).Nkind = N_Allocator
!         or else NT (N).Nkind = N_Component_Definition
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Discriminant_Specification
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Function_Specification
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Object_Renaming_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification
!         or else NT (N).Nkind = N_Subtype_Declaration);
!       return Flag11 (N);
!    end Null_Exclusion_Present;
! 
!    function Null_Exclusion_In_Return_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Function_Definition);
!       return Flag14 (N);
!    end Null_Exclusion_In_Return_Present;
! 
!    function Null_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_List
!         or else NT (N).Nkind = N_Procedure_Specification
!         or else NT (N).Nkind = N_Record_Definition);
!       return Flag13 (N);
!    end Null_Present;
! 
!    function Null_Record_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate
!         or else NT (N).Nkind = N_Extension_Aggregate);
!       return Flag17 (N);
!    end Null_Record_Present;
! 
!    function Null_Statement
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Procedure_Specification);
!       return Node2 (N);
!    end Null_Statement;
! 
!    function Object_Definition
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Object_Declaration);
!       return Node4 (N);
!    end Object_Definition;
! 
!    function Of_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Iterator_Specification);
!       return Flag16 (N);
!    end Of_Present;
! 
!    function Original_Discriminant
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Identifier);
!       return Node2 (N);
!    end Original_Discriminant;
! 
!    function Original_Entity
!       (N : Node_Id) return Entity_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Integer_Literal
!         or else NT (N).Nkind = N_Real_Literal);
!       return Node2 (N);
!    end Original_Entity;
! 
!    function Others_Discrete_Choices
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Others_Choice);
!       return List1 (N);
!    end Others_Discrete_Choices;
! 
!    function Out_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification);
!       return Flag17 (N);
!    end Out_Present;
! 
!    function Parameter_Associations
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Call_Statement
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Procedure_Call_Statement);
!       return List3 (N);
!    end Parameter_Associations;
! 
!    function Parameter_Specifications
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Statement
!         or else NT (N).Nkind = N_Access_Function_Definition
!         or else NT (N).Nkind = N_Access_Procedure_Definition
!         or else NT (N).Nkind = N_Entry_Body_Formal_Part
!         or else NT (N).Nkind = N_Entry_Declaration
!         or else NT (N).Nkind = N_Function_Specification
!         or else NT (N).Nkind = N_Procedure_Specification);
!       return List3 (N);
!    end Parameter_Specifications;
! 
!    function Parameter_Type
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Parameter_Specification);
!       return Node2 (N);
!    end Parameter_Type;
! 
!    function Parent_Spec
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Generic_Function_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Package_Declaration
!         or else NT (N).Nkind = N_Generic_Package_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Procedure_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Subprogram_Declaration
!         or else NT (N).Nkind = N_Package_Declaration
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Package_Renaming_Declaration
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Subprogram_Declaration
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
!       return Node4 (N);
!    end Parent_Spec;
! 
!    function Parent_With
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag1 (N);
!    end Parent_With;
! 
!    function Position
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Clause);
!       return Node2 (N);
!    end Position;
! 
!    function Pragma_Argument_Associations
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       return List2 (N);
!    end Pragma_Argument_Associations;
! 
!    function Pragma_Identifier
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       return Node4 (N);
!    end Pragma_Identifier;
! 
!    function Pragmas_After
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit_Aux
!         or else NT (N).Nkind = N_Terminate_Alternative);
!       return List5 (N);
!    end Pragmas_After;
! 
!    function Pragmas_Before
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Alternative
!         or else NT (N).Nkind = N_Delay_Alternative
!         or else NT (N).Nkind = N_Entry_Call_Alternative
!         or else NT (N).Nkind = N_Mod_Clause
!         or else NT (N).Nkind = N_Terminate_Alternative
!         or else NT (N).Nkind = N_Triggering_Alternative);
!       return List4 (N);
!    end Pragmas_Before;
! 
!    function Pre_Post_Conditions
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Contract);
!       return Node1 (N);
!    end Pre_Post_Conditions;
! 
!    function Prefix
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Explicit_Dereference
!         or else NT (N).Nkind = N_Indexed_Component
!         or else NT (N).Nkind = N_Reference
!         or else NT (N).Nkind = N_Selected_Component
!         or else NT (N).Nkind = N_Slice);
!       return Node3 (N);
!    end Prefix;
! 
!    function Premature_Use
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Incomplete_Type_Declaration);
!       return Node5 (N);
!    end Premature_Use;
! 
!    function Present_Expr
!       (N : Node_Id) return Uint is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Variant);
!       return Uint3 (N);
!    end Present_Expr;
! 
!    function Prev_Ids
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Declaration
!         or else NT (N).Nkind = N_Discriminant_Specification
!         or else NT (N).Nkind = N_Exception_Declaration
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Number_Declaration
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       return Flag6 (N);
!    end Prev_Ids;
! 
!    function Prev_Use_Clause
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       return Node1 (N);
!    end Prev_Use_Clause;
! 
!    function Print_In_Hex
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Integer_Literal);
!       return Flag13 (N);
!    end Print_In_Hex;
! 
!    function Private_Declarations
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Package_Specification
!         or else NT (N).Nkind = N_Protected_Definition
!         or else NT (N).Nkind = N_Task_Definition);
!       return List3 (N);
!    end Private_Declarations;
! 
!    function Private_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag15 (N);
!    end Private_Present;
! 
!    function Procedure_To_Call
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator
!         or else NT (N).Nkind = N_Extended_Return_Statement
!         or else NT (N).Nkind = N_Free_Statement
!         or else NT (N).Nkind = N_Simple_Return_Statement);
!       return Node2 (N);
!    end Procedure_To_Call;
! 
!    function Proper_Body
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subunit);
!       return Node1 (N);
!    end Proper_Body;
! 
!    function Protected_Definition
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Protected_Type_Declaration
!         or else NT (N).Nkind = N_Single_Protected_Declaration);
!       return Node3 (N);
!    end Protected_Definition;
! 
!    function Protected_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Function_Definition
!         or else NT (N).Nkind = N_Access_Procedure_Definition
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Record_Definition);
!       return Flag6 (N);
!    end Protected_Present;
! 
!    function Raises_Constraint_Error
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Subexpr);
!       return Flag7 (N);
!    end Raises_Constraint_Error;
! 
!    function Range_Constraint
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Delta_Constraint
!         or else NT (N).Nkind = N_Digits_Constraint);
!       return Node4 (N);
!    end Range_Constraint;
! 
!    function Range_Expression
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Range_Constraint);
!       return Node4 (N);
!    end Range_Expression;
! 
!    function Real_Range_Specification
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Decimal_Fixed_Point_Definition
!         or else NT (N).Nkind = N_Floating_Point_Definition
!         or else NT (N).Nkind = N_Ordinary_Fixed_Point_Definition);
!       return Node4 (N);
!    end Real_Range_Specification;
! 
!    function Realval
!       (N : Node_Id) return Ureal is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Real_Literal);
!       return Ureal3 (N);
!    end Realval;
! 
!    function Reason
!       (N : Node_Id) return Uint is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Raise_Constraint_Error
!         or else NT (N).Nkind = N_Raise_Program_Error
!         or else NT (N).Nkind = N_Raise_Storage_Error);
!       return Uint3 (N);
!    end Reason;
! 
!    function Record_Extension_Part
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition);
!       return Node3 (N);
!    end Record_Extension_Part;
! 
!    function Redundant_Use
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Identifier);
!       return Flag13 (N);
!    end Redundant_Use;
! 
!    function Renaming_Exception
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Declaration);
!       return Node2 (N);
!    end Renaming_Exception;
! 
!    function Result_Definition
!      (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Function_Definition
!         or else NT (N).Nkind = N_Function_Specification);
!       return Node4 (N);
!    end Result_Definition;
! 
!    function Return_Object_Declarations
!      (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Extended_Return_Statement);
!       return List3 (N);
!    end Return_Object_Declarations;
! 
!    function Return_Statement_Entity
!      (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Extended_Return_Statement
!         or else NT (N).Nkind = N_Simple_Return_Statement);
!       return Node5 (N);
!    end Return_Statement_Entity;
! 
!    function Reverse_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Iterator_Specification
!         or else NT (N).Nkind = N_Loop_Parameter_Specification);
!       return Flag15 (N);
!    end Reverse_Present;
! 
!    function Right_Opnd
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Op
!         or else NT (N).Nkind = N_And_Then
!         or else NT (N).Nkind = N_In
!         or else NT (N).Nkind = N_Not_In
!         or else NT (N).Nkind = N_Or_Else);
!       return Node3 (N);
!    end Right_Opnd;
! 
!    function Rounded_Result
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Op_Divide
!         or else NT (N).Nkind = N_Op_Multiply
!         or else NT (N).Nkind = N_Type_Conversion);
!       return Flag18 (N);
!    end Rounded_Result;
! 
!    function Save_Invocation_Graph_Of_Body
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       return Flag1 (N);
!    end Save_Invocation_Graph_Of_Body;
! 
!    function SCIL_Controlling_Tag
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_SCIL_Dispatching_Call);
!       return Node5 (N);
!    end SCIL_Controlling_Tag;
! 
!    function SCIL_Entity
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_SCIL_Dispatch_Table_Tag_Init
!         or else NT (N).Nkind = N_SCIL_Dispatching_Call
!         or else NT (N).Nkind = N_SCIL_Membership_Test);
!       return Node4 (N);
!    end SCIL_Entity;
! 
!    function SCIL_Tag_Value
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_SCIL_Membership_Test);
!       return Node5 (N);
!    end SCIL_Tag_Value;
! 
!    function SCIL_Target_Prim
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_SCIL_Dispatching_Call);
!       return Node2 (N);
!    end SCIL_Target_Prim;
! 
!    function Scope
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Defining_Character_Literal
!         or else NT (N).Nkind = N_Defining_Identifier
!         or else NT (N).Nkind = N_Defining_Operator_Symbol);
!       return Node3 (N);
!    end Scope;
! 
!    function Select_Alternatives
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Selective_Accept);
!       return List1 (N);
!    end Select_Alternatives;
! 
!    function Selector_Name
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Generic_Association
!         or else NT (N).Nkind = N_Parameter_Association
!         or else NT (N).Nkind = N_Selected_Component);
!       return Node2 (N);
!    end Selector_Name;
! 
!    function Selector_Names
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Discriminant_Association);
!       return List1 (N);
!    end Selector_Names;
! 
!    function Shift_Count_OK
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Op_Rotate_Left
!         or else NT (N).Nkind = N_Op_Rotate_Right
!         or else NT (N).Nkind = N_Op_Shift_Left
!         or else NT (N).Nkind = N_Op_Shift_Right
!         or else NT (N).Nkind = N_Op_Shift_Right_Arithmetic);
!       return Flag4 (N);
!    end Shift_Count_OK;
! 
!    function Source_Type
!       (N : Node_Id) return Entity_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Validate_Unchecked_Conversion);
!       return Node1 (N);
!    end Source_Type;
! 
!    function Specification
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Abstract_Subprogram_Declaration
!         or else NT (N).Nkind = N_Expression_Function
!         or else NT (N).Nkind = N_Formal_Abstract_Subprogram_Declaration
!         or else NT (N).Nkind = N_Formal_Concrete_Subprogram_Declaration
!         or else NT (N).Nkind = N_Generic_Package_Declaration
!         or else NT (N).Nkind = N_Generic_Subprogram_Declaration
!         or else NT (N).Nkind = N_Package_Declaration
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Subprogram_Body_Stub
!         or else NT (N).Nkind = N_Subprogram_Declaration
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
!       return Node1 (N);
!    end Specification;
! 
!    function Split_PPC
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Pragma);
!       return Flag17 (N);
!    end Split_PPC;
! 
!    function Statements
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Abortable_Part
!         or else NT (N).Nkind = N_Accept_Alternative
!         or else NT (N).Nkind = N_Case_Statement_Alternative
!         or else NT (N).Nkind = N_Delay_Alternative
!         or else NT (N).Nkind = N_Entry_Call_Alternative
!         or else NT (N).Nkind = N_Exception_Handler
!         or else NT (N).Nkind = N_Handled_Sequence_Of_Statements
!         or else NT (N).Nkind = N_Loop_Statement
!         or else NT (N).Nkind = N_Triggering_Alternative);
!       return List3 (N);
!    end Statements;
! 
!    function Storage_Pool
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator
!         or else NT (N).Nkind = N_Extended_Return_Statement
!         or else NT (N).Nkind = N_Free_Statement
!         or else NT (N).Nkind = N_Simple_Return_Statement);
!       return Node1 (N);
!    end Storage_Pool;
! 
!    function Subpool_Handle_Name
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator);
!       return Node4 (N);
!    end Subpool_Handle_Name;
! 
!    function Strval
!       (N : Node_Id) return String_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Operator_Symbol
!         or else NT (N).Nkind = N_String_Literal);
!       return Str3 (N);
!    end Strval;
! 
!    function Subtype_Indication
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_To_Object_Definition
!         or else NT (N).Nkind = N_Component_Definition
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Iterator_Specification
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Subtype_Declaration);
!       return Node5 (N);
!    end Subtype_Indication;
! 
!    function Suppress_Assignment_Checks
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Object_Declaration);
!       return Flag18 (N);
!    end Suppress_Assignment_Checks;
! 
!    function Suppress_Loop_Warnings
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Loop_Statement);
!       return Flag17 (N);
!    end Suppress_Loop_Warnings;
! 
!    function Subtype_Mark
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Definition
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Object_Renaming_Declaration
!         or else NT (N).Nkind = N_Qualified_Expression
!         or else NT (N).Nkind = N_Subtype_Indication
!         or else NT (N).Nkind = N_Type_Conversion
!         or else NT (N).Nkind = N_Unchecked_Type_Conversion
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       return Node4 (N);
!    end Subtype_Mark;
! 
!    function Subtype_Marks
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Unconstrained_Array_Definition);
!       return List2 (N);
!    end Subtype_Marks;
! 
!    function Synchronized_Present
!      (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Record_Definition);
!       return Flag7 (N);
!    end Synchronized_Present;
! 
!    function Tagged_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Incomplete_Type_Definition
!         or else NT (N).Nkind = N_Formal_Private_Type_Definition
!         or else NT (N).Nkind = N_Incomplete_Type_Declaration
!         or else NT (N).Nkind = N_Private_Type_Declaration
!         or else NT (N).Nkind = N_Record_Definition);
!       return Flag15 (N);
!    end Tagged_Present;
! 
!    function Target
!       (N : Node_Id) return Entity_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Call_Marker
!         or else NT (N).Nkind = N_Variable_Reference_Marker);
!       return Node1 (N);
!    end Target;
! 
!    function Target_Type
!       (N : Node_Id) return Entity_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Validate_Unchecked_Conversion);
!       return Node2 (N);
!    end Target_Type;
! 
!    function Task_Definition
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Single_Task_Declaration
!         or else NT (N).Nkind = N_Task_Type_Declaration);
!       return Node3 (N);
!    end Task_Definition;
! 
!    function Task_Present
!      (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Record_Definition);
!       return Flag5 (N);
!    end Task_Present;
! 
!    function Then_Actions
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_If_Expression);
!       return List2 (N);
!    end Then_Actions;
! 
!    function Then_Statements
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Elsif_Part
!         or else NT (N).Nkind = N_If_Statement);
!       return List2 (N);
!    end Then_Statements;
! 
!    function Triggering_Alternative
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Asynchronous_Select);
!       return Node1 (N);
!    end Triggering_Alternative;
! 
!    function Triggering_Statement
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Triggering_Alternative);
!       return Node1 (N);
!    end Triggering_Statement;
! 
!    function TSS_Elist
!       (N : Node_Id) return Elist_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Freeze_Entity);
!       return Elist3 (N);
!    end TSS_Elist;
! 
!    function Type_Definition
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Full_Type_Declaration);
!       return Node3 (N);
!    end Type_Definition;
! 
!    function Uneval_Old_Accept
!      (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       return Flag7 (N);
!    end Uneval_Old_Accept;
! 
!    function Uneval_Old_Warn
!      (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       return Flag18 (N);
!    end Uneval_Old_Warn;
! 
!    function Unit
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       return Node2 (N);
!    end Unit;
! 
!    function Unknown_Discriminants_Present
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Type_Declaration
!         or else NT (N).Nkind = N_Incomplete_Type_Declaration
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Private_Type_Declaration);
!       return Flag13 (N);
!    end Unknown_Discriminants_Present;
! 
!    function Unreferenced_In_Spec
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       return Flag7 (N);
!    end Unreferenced_In_Spec;
! 
!    function Variant_Part
!       (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_List);
!       return Node4 (N);
!    end Variant_Part;
! 
!    function Variants
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Variant_Part);
!       return List1 (N);
!    end Variants;
! 
!    function Visible_Declarations
!       (N : Node_Id) return List_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Package_Specification
!         or else NT (N).Nkind = N_Protected_Definition
!         or else NT (N).Nkind = N_Task_Definition);
!       return List2 (N);
!    end Visible_Declarations;
! 
!    function Uninitialized_Variable
!      (N : Node_Id) return Node_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Private_Type_Definition
!         or else NT (N).Nkind = N_Private_Extension_Declaration);
!       return Node3 (N);
!    end Uninitialized_Variable;
! 
!    function Used_Operations
!      (N : Node_Id) return Elist_Id is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       return Elist2 (N);
!    end Used_Operations;
! 
!    function Was_Attribute_Reference
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body);
!       return Flag2 (N);
!    end Was_Attribute_Reference;
! 
!    function Was_Default_Init_Box_Association
!      (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Association);
!       return Flag14 (N);
!    end Was_Default_Init_Box_Association;
! 
!    function Was_Expression_Function
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body);
!       return Flag18 (N);
!    end Was_Expression_Function;
! 
!    function Was_Originally_Stub
!       (N : Node_Id) return Boolean is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Package_Body
!         or else NT (N).Nkind = N_Protected_Body
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Task_Body);
!       return Flag13 (N);
!    end Was_Originally_Stub;
! 
!    --------------------------
!    -- Field Set Procedures --
!    --------------------------
! 
!    procedure Set_Abort_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Requeue_Statement);
!       Set_Flag15 (N, Val);
!    end Set_Abort_Present;
! 
!    procedure Set_Abortable_Part
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Asynchronous_Select);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Abortable_Part;
! 
!    procedure Set_Abstract_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Private_Type_Definition
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Private_Type_Declaration
!         or else NT (N).Nkind = N_Record_Definition);
!       Set_Flag4 (N, Val);
!    end Set_Abstract_Present;
! 
!    procedure Set_Accept_Handler_Records
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Alternative);
!       Set_List5 (N, Val); -- semantic field, no parent set
!    end Set_Accept_Handler_Records;
! 
!    procedure Set_Accept_Statement
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Alternative);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Accept_Statement;
! 
!    procedure Set_Access_Definition
!      (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Definition
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Object_Renaming_Declaration);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Access_Definition;
! 
!    procedure Set_Access_To_Subprogram_Definition
!      (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Definition);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Access_To_Subprogram_Definition;
! 
!    procedure Set_Access_Types_To_Process
!       (N : Node_Id; Val : Elist_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Freeze_Entity);
!       Set_Elist2 (N, Val); -- semantic field, no parent set
!    end Set_Access_Types_To_Process;
! 
!    procedure Set_Actions
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_And_Then
!         or else NT (N).Nkind = N_Case_Expression_Alternative
!         or else NT (N).Nkind = N_Compilation_Unit_Aux
!         or else NT (N).Nkind = N_Compound_Statement
!         or else NT (N).Nkind = N_Expression_With_Actions
!         or else NT (N).Nkind = N_Freeze_Entity
!         or else NT (N).Nkind = N_Or_Else);
!       Set_List1_With_Parent (N, Val);
!    end Set_Actions;
! 
!    procedure Set_Activation_Chain_Entity
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Entry_Body
!         or else NT (N).Nkind = N_Generic_Package_Declaration
!         or else NT (N).Nkind = N_Package_Declaration
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Task_Body);
!       Set_Node3 (N, Val); -- semantic field, no parent set
!    end Set_Activation_Chain_Entity;
! 
!    procedure Set_Acts_As_Spec
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit
!         or else NT (N).Nkind = N_Subprogram_Body);
!       Set_Flag4 (N, Val);
!    end Set_Acts_As_Spec;
! 
!    procedure Set_Actual_Designated_Subtype
!      (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Explicit_Dereference
!         or else NT (N).Nkind = N_Free_Statement);
!       Set_Node4 (N, Val);
!    end Set_Actual_Designated_Subtype;
! 
!    procedure Set_Address_Warning_Posted
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Definition_Clause);
!       Set_Flag18 (N, Val);
!    end Set_Address_Warning_Posted;
! 
!    procedure Set_Aggregate_Bounds
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate);
!       Set_Node3 (N, Val); -- semantic field, no parent set
!    end Set_Aggregate_Bounds;
! 
!    procedure Set_Aliased_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Definition
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification);
!       Set_Flag4 (N, Val);
!    end Set_Aliased_Present;
! 
!    procedure Set_Alloc_For_BIP_Return
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator);
!       Set_Flag1 (N, Val);
!    end Set_Alloc_For_BIP_Return;
! 
!    procedure Set_All_Others
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Others_Choice);
!       Set_Flag11 (N, Val);
!    end Set_All_Others;
! 
!    procedure Set_All_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Definition
!         or else NT (N).Nkind = N_Access_To_Object_Definition
!         or else NT (N).Nkind = N_Quantified_Expression
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       Set_Flag15 (N, Val);
!    end Set_All_Present;
! 
!    procedure Set_Alternatives
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Case_Expression
!         or else NT (N).Nkind = N_Case_Statement
!         or else NT (N).Nkind = N_In
!         or else NT (N).Nkind = N_Not_In);
!       Set_List4_With_Parent (N, Val);
!    end Set_Alternatives;
! 
!    procedure Set_Ancestor_Part
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Extension_Aggregate);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Ancestor_Part;
! 
!    procedure Set_Atomic_Sync_Required
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Explicit_Dereference
!         or else NT (N).Nkind = N_Identifier
!         or else NT (N).Nkind = N_Indexed_Component
!         or else NT (N).Nkind = N_Selected_Component);
!       Set_Flag14 (N, Val);
!    end Set_Atomic_Sync_Required;
! 
!    procedure Set_Array_Aggregate
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Enumeration_Representation_Clause);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Array_Aggregate;
! 
!    procedure Set_Aspect_On_Partial_View
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification);
!       Set_Flag18 (N, Val);
!    end Set_Aspect_On_Partial_View;
! 
!    procedure Set_Aspect_Rep_Item
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification);
!       Set_Node2 (N, Val);
!    end Set_Aspect_Rep_Item;
! 
!    procedure Set_Assignment_OK
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind in N_Subexpr);
!       Set_Flag15 (N, Val);
!    end Set_Assignment_OK;
! 
!    procedure Set_Associated_Node
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Has_Entity
!         or else NT (N).Nkind = N_Aggregate
!         or else NT (N).Nkind = N_Extension_Aggregate
!         or else NT (N).Nkind = N_Selected_Component
!         or else NT (N).Nkind = N_Use_Package_Clause);
!       Set_Node4 (N, Val); -- semantic field, no parent set
!    end Set_Associated_Node;
! 
!    procedure Set_At_End_Proc
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Handled_Sequence_Of_Statements);
!       Set_Node1 (N, Val);
!    end Set_At_End_Proc;
! 
!    procedure Set_Attribute_Name
!       (N : Node_Id; Val : Name_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Reference);
!       Set_Name2 (N, Val);
!    end Set_Attribute_Name;
! 
!    procedure Set_Aux_Decls_Node
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       Set_Node5_With_Parent (N, Val);
!    end Set_Aux_Decls_Node;
! 
!    procedure Set_Backwards_OK
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement);
!       Set_Flag6 (N, Val);
!    end Set_Backwards_OK;
! 
!    procedure Set_Bad_Is_Detected
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body);
!       Set_Flag15 (N, Val);
!    end Set_Bad_Is_Detected;
! 
!    procedure Set_Body_Required
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       Set_Flag13 (N, Val);
!    end Set_Body_Required;
! 
!    procedure Set_Body_To_Inline
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Declaration);
!       Set_Node3 (N, Val);
!    end Set_Body_To_Inline;
! 
!    procedure Set_Box_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Association
!         or else NT (N).Nkind = N_Formal_Abstract_Subprogram_Declaration
!         or else NT (N).Nkind = N_Formal_Concrete_Subprogram_Declaration
!         or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Generic_Association
!         or else NT (N).Nkind = N_Iterated_Component_Association
!         or else NT (N).Nkind = N_Iterated_Element_Association);
!       Set_Flag15 (N, Val);
!    end Set_Box_Present;
! 
!    procedure Set_By_Ref
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Extended_Return_Statement
!         or else NT (N).Nkind = N_Simple_Return_Statement);
!       Set_Flag5 (N, Val);
!    end Set_By_Ref;
! 
!    procedure Set_Char_Literal_Value
!       (N : Node_Id; Val : Uint) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Character_Literal);
!       Set_Uint2 (N, Val);
!    end Set_Char_Literal_Value;
! 
!    procedure Set_Chars
!       (N : Node_Id; Val : Name_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Has_Chars);
!       Set_Name1 (N, Val);
!    end Set_Chars;
! 
!    procedure Set_Check_Address_Alignment
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!           or else NT (N).Nkind = N_Attribute_Definition_Clause);
!       Set_Flag11 (N, Val);
!    end Set_Check_Address_Alignment;
! 
!    procedure Set_Choice_Parameter
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Handler);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Choice_Parameter;
! 
!    procedure Set_Choices
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Association);
!       Set_List1_With_Parent (N, Val);
!    end Set_Choices;
! 
!    procedure Set_Class_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag6 (N, Val);
!    end Set_Class_Present;
! 
!    procedure Set_Classifications
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Contract);
!       Set_Node3 (N, Val); -- semantic field, no parent set
!    end Set_Classifications;
! 
!    procedure Set_Cleanup_Actions
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement);
!       Set_List5 (N, Val); -- semantic field, no parent set
!    end Set_Cleanup_Actions;
! 
!    procedure Set_Comes_From_Extended_Return_Statement
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Simple_Return_Statement);
!       Set_Flag18 (N, Val);
!    end Set_Comes_From_Extended_Return_Statement;
! 
!    procedure Set_Compile_Time_Known_Aggregate
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate);
!       Set_Flag18 (N, Val);
!    end Set_Compile_Time_Known_Aggregate;
! 
!    procedure Set_Component_Associations
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate
!         or else NT (N).Nkind = N_Delta_Aggregate
!         or else NT (N).Nkind = N_Extension_Aggregate);
!       Set_List2_With_Parent (N, Val);
!    end Set_Component_Associations;
! 
!    procedure Set_Component_Clauses
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Record_Representation_Clause);
!       Set_List3_With_Parent (N, Val);
!    end Set_Component_Clauses;
! 
!    procedure Set_Component_Definition
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Declaration
!         or else NT (N).Nkind = N_Constrained_Array_Definition
!         or else NT (N).Nkind = N_Unconstrained_Array_Definition);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Component_Definition;
! 
!    procedure Set_Component_Items
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_List);
!       Set_List3_With_Parent (N, Val);
!    end Set_Component_Items;
! 
!    procedure Set_Component_List
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Record_Definition
!         or else NT (N).Nkind = N_Variant);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Component_List;
! 
!    procedure Set_Component_Name
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Clause);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Component_Name;
! 
!    procedure Set_Componentwise_Assignment
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement);
!       Set_Flag14 (N, Val);
!    end Set_Componentwise_Assignment;
! 
!    procedure Set_Condition
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Alternative
!         or else NT (N).Nkind = N_Delay_Alternative
!         or else NT (N).Nkind = N_Elsif_Part
!         or else NT (N).Nkind = N_Entry_Body_Formal_Part
!         or else NT (N).Nkind = N_Exit_Statement
!         or else NT (N).Nkind = N_If_Statement
!         or else NT (N).Nkind = N_Iteration_Scheme
!         or else NT (N).Nkind = N_Quantified_Expression
!         or else NT (N).Nkind = N_Raise_Constraint_Error
!         or else NT (N).Nkind = N_Raise_Program_Error
!         or else NT (N).Nkind = N_Raise_Storage_Error
!         or else NT (N).Nkind = N_Terminate_Alternative);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Condition;
! 
!    procedure Set_Condition_Actions
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Elsif_Part
!         or else NT (N).Nkind = N_Iteration_Scheme);
!       Set_List3 (N, Val); -- semantic field, no parent set
!    end Set_Condition_Actions;
! 
!    procedure Set_Config_Pragmas
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit_Aux);
!       Set_List4_With_Parent (N, Val);
!    end Set_Config_Pragmas;
! 
!    procedure Set_Constant_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Definition
!         or else NT (N).Nkind = N_Access_To_Object_Definition
!         or else NT (N).Nkind = N_Object_Declaration);
!       Set_Flag17 (N, Val);
!    end Set_Constant_Present;
! 
!    procedure Set_Constraint
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subtype_Indication);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Constraint;
! 
!    procedure Set_Constraints
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Index_Or_Discriminant_Constraint);
!       Set_List1_With_Parent (N, Val);
!    end Set_Constraints;
! 
!    procedure Set_Context_Installed
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag13 (N, Val);
!    end Set_Context_Installed;
! 
!    procedure Set_Context_Items
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       Set_List1_With_Parent (N, Val);
!    end Set_Context_Items;
! 
!    procedure Set_Context_Pending
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       Set_Flag16 (N, Val);
!    end Set_Context_Pending;
! 
!    procedure Set_Contract_Test_Cases
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Contract);
!       Set_Node2 (N, Val); -- semantic field, no parent set
!    end Set_Contract_Test_Cases;
! 
!    procedure Set_Controlling_Argument
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Procedure_Call_Statement);
!       Set_Node1 (N, Val); -- semantic field, no parent set
!    end Set_Controlling_Argument;
! 
!    procedure Set_Conversion_OK
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Type_Conversion);
!       Set_Flag14 (N, Val);
!    end Set_Conversion_OK;
! 
!    procedure Set_Convert_To_Return_False
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Raise_Expression);
!       Set_Flag13 (N, Val);
!    end Set_Convert_To_Return_False;
! 
!    procedure Set_Corresponding_Aspect
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       Set_Node3 (N, Val);
!    end Set_Corresponding_Aspect;
! 
!    procedure Set_Corresponding_Body
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Declaration
!         or else NT (N).Nkind = N_Generic_Package_Declaration
!         or else NT (N).Nkind = N_Generic_Subprogram_Declaration
!         or else NT (N).Nkind = N_Package_Body_Stub
!         or else NT (N).Nkind = N_Package_Declaration
!         or else NT (N).Nkind = N_Protected_Body_Stub
!         or else NT (N).Nkind = N_Protected_Type_Declaration
!         or else NT (N).Nkind = N_Subprogram_Body_Stub
!         or else NT (N).Nkind = N_Subprogram_Declaration
!         or else NT (N).Nkind = N_Task_Body_Stub
!         or else NT (N).Nkind = N_Task_Type_Declaration);
!       Set_Node5 (N, Val); -- semantic field, no parent set
!    end Set_Corresponding_Body;
! 
!    procedure Set_Corresponding_Formal_Spec
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
!       Set_Node3 (N, Val); -- semantic field, no parent set
!    end Set_Corresponding_Formal_Spec;
! 
!    procedure Set_Corresponding_Generic_Association
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Object_Renaming_Declaration);
!       Set_Node5 (N, Val); -- semantic field, no parent set
!    end Set_Corresponding_Generic_Association;
! 
!    procedure Set_Corresponding_Integer_Value
!       (N : Node_Id; Val : Uint) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Real_Literal);
!       Set_Uint4 (N, Val); -- semantic field, no parent set
!    end Set_Corresponding_Integer_Value;
! 
!    procedure Set_Corresponding_Spec
!       (N : Node_Id; Val : Entity_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Expression_Function
!         or else NT (N).Nkind = N_Package_Body
!         or else NT (N).Nkind = N_Protected_Body
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration
!         or else NT (N).Nkind = N_Task_Body
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Node5 (N, Val); -- semantic field, no parent set
!    end Set_Corresponding_Spec;
! 
!    procedure Set_Corresponding_Spec_Of_Stub
!       (N : Node_Id; Val : Entity_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Package_Body_Stub
!         or else NT (N).Nkind = N_Protected_Body_Stub
!         or else NT (N).Nkind = N_Subprogram_Body_Stub
!         or else NT (N).Nkind = N_Task_Body_Stub);
!       Set_Node2 (N, Val); -- semantic field, no parent set
!    end Set_Corresponding_Spec_Of_Stub;
! 
!    procedure Set_Corresponding_Stub
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subunit);
!       Set_Node3 (N, Val);
!    end Set_Corresponding_Stub;
! 
!    procedure Set_Dcheck_Function
!       (N : Node_Id; Val : Entity_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Variant);
!       Set_Node5 (N, Val); -- semantic field, no parent set
!    end Set_Dcheck_Function;
! 
!    procedure Set_Declarations
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Statement
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Compilation_Unit_Aux
!         or else NT (N).Nkind = N_Entry_Body
!         or else NT (N).Nkind = N_Package_Body
!         or else NT (N).Nkind = N_Protected_Body
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Task_Body);
!       Set_List2_With_Parent (N, Val);
!    end Set_Declarations;
! 
!    procedure Set_Default_Expression
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification);
!       Set_Node5 (N, Val); -- semantic field, no parent set
!    end Set_Default_Expression;
! 
!    procedure Set_Default_Storage_Pool
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit_Aux);
!       Set_Node3 (N, Val); -- semantic field, no parent set
!    end Set_Default_Storage_Pool;
! 
!    procedure Set_Default_Name
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Abstract_Subprogram_Declaration
!         or else NT (N).Nkind = N_Formal_Concrete_Subprogram_Declaration);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Default_Name;
! 
!    procedure Set_Defining_Identifier
!       (N : Node_Id; Val : Entity_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Declaration
!         or else NT (N).Nkind = N_Defining_Program_Unit_Name
!         or else NT (N).Nkind = N_Discriminant_Specification
!         or else NT (N).Nkind = N_Entry_Body
!         or else NT (N).Nkind = N_Entry_Declaration
!         or else NT (N).Nkind = N_Entry_Index_Specification
!         or else NT (N).Nkind = N_Exception_Declaration
!         or else NT (N).Nkind = N_Exception_Renaming_Declaration
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Formal_Type_Declaration
!         or else NT (N).Nkind = N_Full_Type_Declaration
!         or else NT (N).Nkind = N_Implicit_Label_Declaration
!         or else NT (N).Nkind = N_Incomplete_Type_Declaration
!         or else NT (N).Nkind = N_Iterated_Component_Association
!         or else NT (N).Nkind = N_Iterator_Specification
!         or else NT (N).Nkind = N_Loop_Parameter_Specification
!         or else NT (N).Nkind = N_Number_Declaration
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Object_Renaming_Declaration
!         or else NT (N).Nkind = N_Package_Body_Stub
!         or else NT (N).Nkind = N_Parameter_Specification
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Private_Type_Declaration
!         or else NT (N).Nkind = N_Protected_Body
!         or else NT (N).Nkind = N_Protected_Body_Stub
!         or else NT (N).Nkind = N_Protected_Type_Declaration
!         or else NT (N).Nkind = N_Single_Protected_Declaration
!         or else NT (N).Nkind = N_Single_Task_Declaration
!         or else NT (N).Nkind = N_Subtype_Declaration
!         or else NT (N).Nkind = N_Task_Body
!         or else NT (N).Nkind = N_Task_Body_Stub
!         or else NT (N).Nkind = N_Task_Type_Declaration);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Defining_Identifier;
! 
!    procedure Set_Defining_Unit_Name
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Function_Specification
!         or else NT (N).Nkind = N_Generic_Function_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Package_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Procedure_Renaming_Declaration
!         or else NT (N).Nkind = N_Package_Body
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Package_Renaming_Declaration
!         or else NT (N).Nkind = N_Package_Specification
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Procedure_Specification);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Defining_Unit_Name;
! 
!    procedure Set_Delay_Alternative
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Timed_Entry_Call);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Delay_Alternative;
! 
!    procedure Set_Delay_Statement
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Delay_Alternative);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Delay_Statement;
! 
!    procedure Set_Delta_Expression
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Decimal_Fixed_Point_Definition
!         or else NT (N).Nkind = N_Delta_Constraint
!         or else NT (N).Nkind = N_Ordinary_Fixed_Point_Definition);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Delta_Expression;
! 
!    procedure Set_Digits_Expression
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Decimal_Fixed_Point_Definition
!         or else NT (N).Nkind = N_Digits_Constraint
!         or else NT (N).Nkind = N_Floating_Point_Definition);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Digits_Expression;
! 
!    procedure Set_Discr_Check_Funcs_Built
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Full_Type_Declaration);
!       Set_Flag11 (N, Val);
!    end Set_Discr_Check_Funcs_Built;
! 
!    procedure Set_Discrete_Choices
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Case_Expression_Alternative
!         or else NT (N).Nkind = N_Case_Statement_Alternative
!         or else NT (N).Nkind = N_Iterated_Component_Association
!         or else NT (N).Nkind = N_Variant);
!       Set_List4_With_Parent (N, Val);
!    end Set_Discrete_Choices;
! 
!    procedure Set_Discrete_Range
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Slice);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Discrete_Range;
! 
!    procedure Set_Discrete_Subtype_Definition
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Declaration
!         or else NT (N).Nkind = N_Entry_Index_Specification
!         or else NT (N).Nkind = N_Loop_Parameter_Specification);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Discrete_Subtype_Definition;
! 
!    procedure Set_Discrete_Subtype_Definitions
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Constrained_Array_Definition);
!       Set_List2_With_Parent (N, Val);
!    end Set_Discrete_Subtype_Definitions;
! 
!    procedure Set_Discriminant_Specifications
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Type_Declaration
!         or else NT (N).Nkind = N_Full_Type_Declaration
!         or else NT (N).Nkind = N_Incomplete_Type_Declaration
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Private_Type_Declaration
!         or else NT (N).Nkind = N_Protected_Type_Declaration
!         or else NT (N).Nkind = N_Task_Type_Declaration);
!       Set_List4_With_Parent (N, Val);
!    end Set_Discriminant_Specifications;
! 
!    procedure Set_Discriminant_Type
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Discriminant_Specification);
!       Set_Node5_With_Parent (N, Val);
!    end Set_Discriminant_Type;
! 
!    procedure Set_Do_Accessibility_Check
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Parameter_Specification);
!       Set_Flag13 (N, Val);
!    end Set_Do_Accessibility_Check;
! 
!    procedure Set_Do_Discriminant_Check
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Selected_Component
!         or else NT (N).Nkind = N_Type_Conversion);
!       Set_Flag3 (N, Val);
!    end Set_Do_Discriminant_Check;
! 
!    procedure Set_Do_Division_Check
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Op_Divide
!         or else NT (N).Nkind = N_Op_Mod
!         or else NT (N).Nkind = N_Op_Rem);
!       Set_Flag13 (N, Val);
!    end Set_Do_Division_Check;
! 
!    procedure Set_Do_Length_Check
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Op_And
!         or else NT (N).Nkind = N_Op_Or
!         or else NT (N).Nkind = N_Op_Xor
!         or else NT (N).Nkind = N_Type_Conversion);
!       Set_Flag4 (N, Val);
!    end Set_Do_Length_Check;
! 
!    procedure Set_Do_Overflow_Check
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Op
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Case_Expression
!         or else NT (N).Nkind = N_If_Expression
!         or else NT (N).Nkind = N_Type_Conversion);
!       Set_Flag17 (N, Val);
!    end Set_Do_Overflow_Check;
! 
!    procedure Set_Do_Range_Check
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Subexpr);
!       Set_Flag9 (N, Val);
!    end Set_Do_Range_Check;
! 
!    procedure Set_Do_Storage_Check
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator
!         or else NT (N).Nkind = N_Subprogram_Body);
!       Set_Flag17 (N, Val);
!    end Set_Do_Storage_Check;
! 
!    procedure Set_Do_Tag_Check
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Extended_Return_Statement
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Procedure_Call_Statement
!         or else NT (N).Nkind = N_Simple_Return_Statement
!         or else NT (N).Nkind = N_Type_Conversion);
!       Set_Flag13 (N, Val);
!    end Set_Do_Tag_Check;
! 
!    procedure Set_Elaborate_All_Desirable
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag9 (N, Val);
!    end Set_Elaborate_All_Desirable;
! 
!    procedure Set_Elaborate_All_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag14 (N, Val);
!    end Set_Elaborate_All_Present;
! 
!    procedure Set_Elaborate_Desirable
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag11 (N, Val);
!    end Set_Elaborate_Desirable;
! 
!    procedure Set_Elaborate_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag4 (N, Val);
!    end Set_Elaborate_Present;
! 
!    procedure Set_Else_Actions
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_If_Expression);
!       Set_List3_With_Parent (N, Val); -- semantic field, but needs parents
!    end Set_Else_Actions;
! 
!    procedure Set_Else_Statements
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Conditional_Entry_Call
!         or else NT (N).Nkind = N_If_Statement
!         or else NT (N).Nkind = N_Selective_Accept);
!       Set_List4_With_Parent (N, Val);
!    end Set_Else_Statements;
! 
!    procedure Set_Elsif_Parts
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_If_Statement);
!       Set_List3_With_Parent (N, Val);
!    end Set_Elsif_Parts;
! 
!    procedure Set_Enclosing_Variant
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Variant);
!       Set_Node2 (N, Val); -- semantic field, no parent set
!    end Set_Enclosing_Variant;
! 
!    procedure Set_End_Label
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Enumeration_Type_Definition
!         or else NT (N).Nkind = N_Handled_Sequence_Of_Statements
!         or else NT (N).Nkind = N_Loop_Statement
!         or else NT (N).Nkind = N_Package_Specification
!         or else NT (N).Nkind = N_Protected_Body
!         or else NT (N).Nkind = N_Protected_Definition
!         or else NT (N).Nkind = N_Record_Definition
!         or else NT (N).Nkind = N_Task_Definition);
!       Set_Node4_With_Parent (N, Val);
!    end Set_End_Label;
! 
!    procedure Set_End_Span
!       (N : Node_Id; Val : Uint) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Case_Statement
!         or else NT (N).Nkind = N_If_Statement);
!       Set_Uint5 (N, Val);
!    end Set_End_Span;
! 
!    procedure Set_Entity
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Has_Entity
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Attribute_Definition_Clause
!         or else NT (N).Nkind = N_Freeze_Entity
!         or else NT (N).Nkind = N_Freeze_Generic_Entity);
!       Set_Node4 (N, Val); -- semantic field, no parent set
!    end Set_Entity;
! 
!    procedure Set_Entry_Body_Formal_Part
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Body);
!       Set_Node5_With_Parent (N, Val);
!    end Set_Entry_Body_Formal_Part;
! 
!    procedure Set_Entry_Call_Alternative
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Conditional_Entry_Call
!         or else NT (N).Nkind = N_Timed_Entry_Call);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Entry_Call_Alternative;
! 
!    procedure Set_Entry_Call_Statement
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Call_Alternative);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Entry_Call_Statement;
! 
!    procedure Set_Entry_Direct_Name
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Statement);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Entry_Direct_Name;
! 
!    procedure Set_Entry_Index
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Statement);
!       Set_Node5_With_Parent (N, Val);
!    end Set_Entry_Index;
! 
!    procedure Set_Entry_Index_Specification
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Body_Formal_Part);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Entry_Index_Specification;
! 
!    procedure Set_Etype
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Has_Etype);
!       Set_Node5 (N, Val); -- semantic field, no parent set
!    end Set_Etype;
! 
!    procedure Set_Exception_Choices
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Handler);
!       Set_List4_With_Parent (N, Val);
!    end Set_Exception_Choices;
! 
!    procedure Set_Exception_Handlers
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Handled_Sequence_Of_Statements);
!       Set_List5_With_Parent (N, Val);
!    end Set_Exception_Handlers;
! 
!    procedure Set_Exception_Junk
!      (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Goto_Statement
!         or else NT (N).Nkind = N_Label
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Subtype_Declaration);
!       Set_Flag8 (N, Val);
!    end Set_Exception_Junk;
! 
!    procedure Set_Exception_Label
!      (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Handler
!         or else NT (N).Nkind = N_Push_Constraint_Error_Label
!         or else NT (N).Nkind = N_Push_Program_Error_Label
!         or else NT (N).Nkind = N_Push_Storage_Error_Label);
!       Set_Node5 (N, Val); -- semantic field, no parent set
!    end Set_Exception_Label;
! 
!    procedure Set_Expansion_Delayed
!      (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate
!         or else NT (N).Nkind = N_Extension_Aggregate);
!       Set_Flag11 (N, Val);
!    end Set_Expansion_Delayed;
! 
!    procedure Set_Explicit_Actual_Parameter
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Parameter_Association);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Explicit_Actual_Parameter;
! 
!    procedure Set_Explicit_Generic_Actual_Parameter
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Generic_Association);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Explicit_Generic_Actual_Parameter;
! 
!    procedure Set_Expression
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_At_Clause
!         or else NT (N).Nkind = N_Attribute_Definition_Clause
!         or else NT (N).Nkind = N_Case_Expression
!         or else NT (N).Nkind = N_Case_Expression_Alternative
!         or else NT (N).Nkind = N_Case_Statement
!         or else NT (N).Nkind = N_Code_Statement
!         or else NT (N).Nkind = N_Component_Association
!         or else NT (N).Nkind = N_Component_Declaration
!         or else NT (N).Nkind = N_Delay_Relative_Statement
!         or else NT (N).Nkind = N_Delay_Until_Statement
!         or else NT (N).Nkind = N_Delta_Aggregate
!         or else NT (N).Nkind = N_Discriminant_Association
!         or else NT (N).Nkind = N_Discriminant_Specification
!         or else NT (N).Nkind = N_Exception_Declaration
!         or else NT (N).Nkind = N_Expression_Function
!         or else NT (N).Nkind = N_Expression_With_Actions
!         or else NT (N).Nkind = N_Free_Statement
!         or else NT (N).Nkind = N_Iterated_Component_Association
!         or else NT (N).Nkind = N_Iterated_Element_Association
!         or else NT (N).Nkind = N_Mod_Clause
!         or else NT (N).Nkind = N_Modular_Type_Definition
!         or else NT (N).Nkind = N_Number_Declaration
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification
!         or else NT (N).Nkind = N_Pragma_Argument_Association
!         or else NT (N).Nkind = N_Qualified_Expression
!         or else NT (N).Nkind = N_Raise_Expression
!         or else NT (N).Nkind = N_Raise_Statement
!         or else NT (N).Nkind = N_Simple_Return_Statement
!         or else NT (N).Nkind = N_Type_Conversion
!         or else NT (N).Nkind = N_Unchecked_Expression
!         or else NT (N).Nkind = N_Unchecked_Type_Conversion);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Expression;
! 
!    procedure Set_Expression_Copy
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma_Argument_Association);
!       Set_Node2 (N, Val);  -- semantic field, no parent set
!    end Set_Expression_Copy;
! 
!    procedure Set_Expressions
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Extension_Aggregate
!         or else NT (N).Nkind = N_If_Expression
!         or else NT (N).Nkind = N_Indexed_Component);
!       Set_List1_With_Parent (N, Val);
!    end Set_Expressions;
! 
!    procedure Set_First_Bit
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Clause);
!       Set_Node3_With_Parent (N, Val);
!    end Set_First_Bit;
! 
!    procedure Set_First_Inlined_Subprogram
!       (N : Node_Id; Val : Entity_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       Set_Node3 (N, Val);  -- semantic field, no parent set
!    end Set_First_Inlined_Subprogram;
! 
!    procedure Set_First_Name
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag5 (N, Val);
!    end Set_First_Name;
! 
!    procedure Set_First_Named_Actual
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Call_Statement
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Procedure_Call_Statement);
!       Set_Node4 (N, Val); -- semantic field, no parent set
!    end Set_First_Named_Actual;
! 
!    procedure Set_First_Real_Statement
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Handled_Sequence_Of_Statements);
!       Set_Node2 (N, Val); -- semantic field, no parent set
!    end Set_First_Real_Statement;
! 
!    procedure Set_First_Subtype_Link
!       (N : Node_Id; Val : Entity_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Freeze_Entity);
!       Set_Node5 (N, Val); -- semantic field, no parent set
!    end Set_First_Subtype_Link;
! 
!    procedure Set_Float_Truncate
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Type_Conversion);
!       Set_Flag11 (N, Val);
!    end Set_Float_Truncate;
! 
!    procedure Set_Formal_Type_Definition
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Type_Declaration);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Formal_Type_Definition;
! 
!    procedure Set_Forwards_OK
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement);
!       Set_Flag5 (N, Val);
!    end Set_Forwards_OK;
! 
!    procedure Set_From_Aspect_Specification
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Definition_Clause
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag13 (N, Val);
!    end Set_From_Aspect_Specification;
! 
!    procedure Set_From_At_End
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Raise_Statement);
!       Set_Flag4 (N, Val);
!    end Set_From_At_End;
! 
!    procedure Set_From_At_Mod
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Definition_Clause);
!       Set_Flag4 (N, Val);
!    end Set_From_At_Mod;
! 
!    procedure Set_From_Conditional_Expression
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Case_Statement
!         or else NT (N).Nkind = N_If_Statement);
!       Set_Flag1 (N, Val);
!    end Set_From_Conditional_Expression;
! 
!    procedure Set_From_Default
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
!       Set_Flag6 (N, Val);
!    end Set_From_Default;
! 
!    procedure Set_Generalized_Indexing
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Indexed_Component);
!       Set_Node4 (N, Val);
!    end Set_Generalized_Indexing;
! 
!    procedure Set_Generic_Associations
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Instantiation);
!       Set_List3_With_Parent (N, Val);
!    end Set_Generic_Associations;
! 
!    procedure Set_Generic_Formal_Declarations
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Generic_Package_Declaration
!         or else NT (N).Nkind = N_Generic_Subprogram_Declaration);
!       Set_List2_With_Parent (N, Val);
!    end Set_Generic_Formal_Declarations;
! 
!    procedure Set_Generic_Parent
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Specification
!         or else NT (N).Nkind = N_Package_Specification
!         or else NT (N).Nkind = N_Procedure_Specification);
!       Set_Node5 (N, Val);
!    end Set_Generic_Parent;
! 
!    procedure Set_Generic_Parent_Type
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subtype_Declaration);
!       Set_Node4 (N, Val);
!    end Set_Generic_Parent_Type;
! 
!    procedure Set_Handled_Statement_Sequence
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Statement
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Entry_Body
!         or else NT (N).Nkind = N_Extended_Return_Statement
!         or else NT (N).Nkind = N_Package_Body
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Task_Body);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Handled_Statement_Sequence;
! 
!    procedure Set_Handler_List_Entry
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Object_Declaration);
!       Set_Node2 (N, Val);
!    end Set_Handler_List_Entry;
! 
!    procedure Set_Has_Created_Identifier
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Loop_Statement);
!       Set_Flag15 (N, Val);
!    end Set_Has_Created_Identifier;
! 
!    procedure Set_Has_Dereference_Action
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Explicit_Dereference);
!       Set_Flag13 (N, Val);
!    end Set_Has_Dereference_Action;
! 
!    procedure Set_Has_Dynamic_Length_Check
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Subexpr);
!       Set_Flag10 (N, Val);
!    end Set_Has_Dynamic_Length_Check;
! 
!    procedure Set_Has_Init_Expression
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Object_Declaration);
!       Set_Flag14 (N, Val);
!    end Set_Has_Init_Expression;
! 
!    procedure Set_Has_Local_Raise
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Handler);
!       Set_Flag8 (N, Val);
!    end Set_Has_Local_Raise;
! 
!    procedure Set_Has_No_Elaboration_Code
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       Set_Flag17 (N, Val);
!    end Set_Has_No_Elaboration_Code;
! 
!    procedure Set_Has_Pragma_Suppress_All
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       Set_Flag14 (N, Val);
!    end Set_Has_Pragma_Suppress_All;
! 
!    procedure Set_Has_Private_View
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!        or else NT (N).Nkind in N_Op
!        or else NT (N).Nkind = N_Character_Literal
!        or else NT (N).Nkind = N_Expanded_Name
!        or else NT (N).Nkind = N_Identifier
!        or else NT (N).Nkind = N_Operator_Symbol);
!       Set_Flag11 (N, Val);
!    end Set_Has_Private_View;
! 
!    procedure Set_Has_Relative_Deadline_Pragma
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Task_Definition);
!       Set_Flag9 (N, Val);
!    end Set_Has_Relative_Deadline_Pragma;
! 
!    procedure Set_Has_Self_Reference
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate
!         or else NT (N).Nkind = N_Extension_Aggregate);
!       Set_Flag13 (N, Val);
!    end Set_Has_Self_Reference;
! 
!    procedure Set_Has_SP_Choice
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Case_Expression_Alternative
!         or else NT (N).Nkind = N_Case_Statement_Alternative
!         or else NT (N).Nkind = N_Variant);
!       Set_Flag15 (N, Val);
!    end Set_Has_SP_Choice;
! 
!    procedure Set_Has_Storage_Size_Pragma
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Task_Definition);
!       Set_Flag5 (N, Val);
!    end Set_Has_Storage_Size_Pragma;
! 
!    procedure Set_Has_Target_Names
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement);
!       Set_Flag8 (N, Val);
!    end Set_Has_Target_Names;
! 
!    procedure Set_Has_Wide_Character
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_String_Literal);
!       Set_Flag11 (N, Val);
!    end Set_Has_Wide_Character;
! 
!    procedure Set_Has_Wide_Wide_Character
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_String_Literal);
!       Set_Flag13 (N, Val);
!    end Set_Has_Wide_Wide_Character;
! 
!    procedure Set_Header_Size_Added
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Reference);
!       Set_Flag11 (N, Val);
!    end Set_Header_Size_Added;
! 
!    procedure Set_Hidden_By_Use_Clause
!      (N : Node_Id; Val : Elist_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       Set_Elist5 (N, Val);
!    end Set_Hidden_By_Use_Clause;
! 
!    procedure Set_High_Bound
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Range
!         or else NT (N).Nkind = N_Real_Range_Specification
!         or else NT (N).Nkind = N_Signed_Integer_Type_Definition);
!       Set_Node2_With_Parent (N, Val);
!    end Set_High_Bound;
! 
!    procedure Set_Identifier
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_At_Clause
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Designator
!         or else NT (N).Nkind = N_Enumeration_Representation_Clause
!         or else NT (N).Nkind = N_Label
!         or else NT (N).Nkind = N_Loop_Statement
!         or else NT (N).Nkind = N_Record_Representation_Clause);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Identifier;
! 
!    procedure Set_Implicit_With
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag16 (N, Val);
!    end Set_Implicit_With;
! 
!    procedure Set_Interface_List
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Protected_Type_Declaration
!         or else NT (N).Nkind = N_Record_Definition
!         or else NT (N).Nkind = N_Single_Protected_Declaration
!         or else NT (N).Nkind = N_Single_Task_Declaration
!         or else NT (N).Nkind = N_Task_Type_Declaration);
!       Set_List2_With_Parent (N, Val);
!    end Set_Interface_List;
! 
!    procedure Set_Interface_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Record_Definition);
!       Set_Flag16 (N, Val);
!    end Set_Interface_Present;
! 
!    procedure Set_Import_Interface_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag16 (N, Val);
!    end Set_Import_Interface_Present;
! 
!    procedure Set_In_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification);
!       Set_Flag15 (N, Val);
!    end Set_In_Present;
! 
!    procedure Set_Includes_Infinities
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Range);
!       Set_Flag11 (N, Val);
!    end Set_Includes_Infinities;
! 
!    procedure Set_Incomplete_View
!      (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Full_Type_Declaration);
!       Set_Node2 (N, Val); --  semantic field, no Parent set
!    end Set_Incomplete_View;
! 
!    procedure Set_Inherited_Discriminant
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Association);
!       Set_Flag13 (N, Val);
!    end Set_Inherited_Discriminant;
! 
!    procedure Set_Instance_Spec
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Instantiation);
!       Set_Node5 (N, Val); -- semantic field, no Parent set
!    end Set_Instance_Spec;
! 
!    procedure Set_Intval
!       (N : Node_Id; Val : Uint) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Integer_Literal);
!       Set_Uint3 (N, Val);
!    end Set_Intval;
! 
!    procedure Set_Is_Abort_Block
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement);
!       Set_Flag4 (N, Val);
!    end Set_Is_Abort_Block;
! 
!    procedure Set_Is_Accessibility_Actual
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Parameter_Association);
!       Set_Flag13 (N, Val);
!    end Set_Is_Accessibility_Actual;
! 
!    procedure Set_Is_Analyzed_Pragma
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag5 (N, Val);
!    end Set_Is_Analyzed_Pragma;
! 
!    procedure Set_Is_Asynchronous_Call_Block
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement);
!       Set_Flag7 (N, Val);
!    end Set_Is_Asynchronous_Call_Block;
! 
!    procedure Set_Is_Boolean_Aspect
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification);
!       Set_Flag16 (N, Val);
!    end Set_Is_Boolean_Aspect;
! 
!    procedure Set_Is_Checked
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag11 (N, Val);
!    end Set_Is_Checked;
! 
!    procedure Set_Is_Checked_Ghost_Pragma
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag3 (N, Val);
!    end Set_Is_Checked_Ghost_Pragma;
! 
!    procedure Set_Is_Component_Left_Opnd
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Op_Concat);
!       Set_Flag13 (N, Val);
!    end Set_Is_Component_Left_Opnd;
! 
!    procedure Set_Is_Component_Right_Opnd
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Op_Concat);
!       Set_Flag14 (N, Val);
!    end Set_Is_Component_Right_Opnd;
! 
!    procedure Set_Is_Controlling_Actual
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Subexpr);
!       Set_Flag16 (N, Val);
!    end Set_Is_Controlling_Actual;
! 
!    procedure Set_Is_Declaration_Level_Node
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Call_Marker
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Instantiation);
!       Set_Flag5 (N, Val);
!    end Set_Is_Declaration_Level_Node;
! 
!    procedure Set_Is_Delayed_Aspect
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Attribute_Definition_Clause
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag14 (N, Val);
!    end Set_Is_Delayed_Aspect;
! 
!    procedure Set_Is_Disabled
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag15 (N, Val);
!    end Set_Is_Disabled;
! 
!    procedure Set_Is_Dispatching_Call
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Call_Marker);
!       Set_Flag6 (N, Val);
!    end Set_Is_Dispatching_Call;
! 
!    procedure Set_Is_Dynamic_Coextension
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator);
!       pragma Assert (not Val
!         or else not Is_Static_Coextension (N));
!       Set_Flag18 (N, Val);
!    end Set_Is_Dynamic_Coextension;
! 
!    procedure Set_Is_Effective_Use_Clause
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       Set_Flag1 (N, Val);
!    end Set_Is_Effective_Use_Clause;
! 
!    procedure Set_Is_Elaboration_Checks_OK_Node
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Call_Marker
!         or else NT (N).Nkind = N_Entry_Call_Statement
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Identifier
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Call_Statement
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Requeue_Statement
!         or else NT (N).Nkind = N_Variable_Reference_Marker);
!       Set_Flag1 (N, Val);
!    end Set_Is_Elaboration_Checks_OK_Node;
! 
!    procedure Set_Is_Elaboration_Code
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement);
!       Set_Flag9 (N, Val);
!    end Set_Is_Elaboration_Code;
! 
!    procedure Set_Is_Elaboration_Warnings_OK_Node
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Call_Marker
!         or else NT (N).Nkind = N_Entry_Call_Statement
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Identifier
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Call_Statement
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Requeue_Statement
!         or else NT (N).Nkind = N_Variable_Reference_Marker);
!       Set_Flag3 (N, Val);
!    end Set_Is_Elaboration_Warnings_OK_Node;
! 
!    procedure Set_Is_Elsif
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_If_Expression);
!       Set_Flag13 (N, Val);
!    end Set_Is_Elsif;
! 
!    procedure Set_Is_Entry_Barrier_Function
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Subprogram_Declaration);
!       Set_Flag8 (N, Val);
!    end Set_Is_Entry_Barrier_Function;
! 
!    procedure Set_Is_Expanded_Build_In_Place_Call
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Call);
!       Set_Flag11 (N, Val);
!    end Set_Is_Expanded_Build_In_Place_Call;
! 
!    procedure Set_Is_Expanded_Contract
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Contract);
!       Set_Flag1 (N, Val);
!    end Set_Is_Expanded_Contract;
! 
!    procedure Set_Is_Finalization_Wrapper
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement);
!       Set_Flag9 (N, Val);
!    end Set_Is_Finalization_Wrapper;
! 
!    procedure Set_Is_Folded_In_Parser
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_String_Literal);
!       Set_Flag4 (N, Val);
!    end Set_Is_Folded_In_Parser;
! 
!    procedure Set_Is_Generic_Contract_Pragma
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag2 (N, Val);
!    end Set_Is_Generic_Contract_Pragma;
! 
!    procedure Set_Is_Homogeneous_Aggregate
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate);
!       Set_Flag14 (N, Val);
!    end Set_Is_Homogeneous_Aggregate;
! 
!    procedure Set_Is_Ignored
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag9 (N, Val);
!    end Set_Is_Ignored;
! 
!    procedure Set_Is_Ignored_Ghost_Pragma
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag8 (N, Val);
!    end Set_Is_Ignored_Ghost_Pragma;
! 
!    procedure Set_Is_In_Discriminant_Check
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Selected_Component);
!       Set_Flag11 (N, Val);
!    end Set_Is_In_Discriminant_Check;
! 
!    procedure Set_Is_Inherited_Pragma
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag4 (N, Val);
!    end Set_Is_Inherited_Pragma;
! 
!    procedure Set_Is_Initialization_Block
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement);
!       Set_Flag1 (N, Val);
!    end Set_Is_Initialization_Block;
! 
!    procedure Set_Is_Known_Guaranteed_ABE
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Call_Marker
!         or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Call_Statement
!         or else NT (N).Nkind = N_Procedure_Instantiation);
!       Set_Flag18 (N, Val);
!    end Set_Is_Known_Guaranteed_ABE;
! 
!    procedure Set_Is_Machine_Number
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Real_Literal);
!       Set_Flag11 (N, Val);
!    end Set_Is_Machine_Number;
! 
!    procedure Set_Is_Null_Loop
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Loop_Statement);
!       Set_Flag16 (N, Val);
!    end Set_Is_Null_Loop;
! 
!    procedure Set_Is_Overloaded
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Subexpr);
!       Set_Flag5 (N, Val);
!    end Set_Is_Overloaded;
! 
!    procedure Set_Is_Power_Of_2_For_Shift
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Op_Expon);
!       Set_Flag13 (N, Val);
!    end Set_Is_Power_Of_2_For_Shift;
! 
!    procedure Set_Is_Preelaborable_Call
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Call_Marker);
!       Set_Flag7 (N, Val);
!    end Set_Is_Preelaborable_Call;
! 
!    procedure Set_Is_Prefixed_Call
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Selected_Component);
!       Set_Flag17 (N, Val);
!    end Set_Is_Prefixed_Call;
! 
!    procedure Set_Is_Protected_Subprogram_Body
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body);
!       Set_Flag7 (N, Val);
!    end Set_Is_Protected_Subprogram_Body;
! 
!    procedure Set_Is_Qualified_Universal_Literal
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Qualified_Expression);
!       Set_Flag4 (N, Val);
!    end Set_Is_Qualified_Universal_Literal;
! 
!    procedure Set_Is_Read
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Variable_Reference_Marker);
!       Set_Flag4 (N, Val);
!    end Set_Is_Read;
! 
!    procedure Set_Is_Source_Call
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Call_Marker);
!       Set_Flag4 (N, Val);
!    end Set_Is_Source_Call;
! 
!    procedure Set_Is_SPARK_Mode_On_Node
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Call_Marker
!         or else NT (N).Nkind = N_Entry_Call_Statement
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Identifier
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Procedure_Call_Statement
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Requeue_Statement
!         or else NT (N).Nkind = N_Variable_Reference_Marker);
!       Set_Flag2 (N, Val);
!    end Set_Is_SPARK_Mode_On_Node;
! 
!    procedure Set_Is_Static_Coextension
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator);
!       pragma Assert (not Val
!         or else not Is_Dynamic_Coextension (N));
!       Set_Flag14 (N, Val);
!    end Set_Is_Static_Coextension;
! 
!    procedure Set_Is_Static_Expression
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Subexpr);
!       Set_Flag6 (N, Val);
!    end Set_Is_Static_Expression;
! 
!    procedure Set_Is_Subprogram_Descriptor
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Object_Declaration);
!       Set_Flag16 (N, Val);
!    end Set_Is_Subprogram_Descriptor;
! 
!    procedure Set_Is_Task_Allocation_Block
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement);
!       Set_Flag6 (N, Val);
!    end Set_Is_Task_Allocation_Block;
! 
!    procedure Set_Is_Task_Body_Procedure
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Subprogram_Declaration);
!       Set_Flag1 (N, Val);
!    end Set_Is_Task_Body_Procedure;
! 
!    procedure Set_Is_Task_Master
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Block_Statement
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Task_Body);
!       Set_Flag5 (N, Val);
!    end Set_Is_Task_Master;
! 
!    procedure Set_Is_Write
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Variable_Reference_Marker);
!       Set_Flag5 (N, Val);
!    end Set_Is_Write;
! 
!    procedure Set_Iterator_Filter
!      (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Iterator_Specification
!         or else NT (N).Nkind = N_Loop_Parameter_Specification);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Iterator_Filter;
! 
!    procedure Set_Iteration_Scheme
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Loop_Statement);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Iteration_Scheme;
! 
!    procedure Set_Iterator_Specification
!      (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Iterated_Component_Association
!         or else NT (N).Nkind = N_Iterated_Element_Association
!         or else NT (N).Nkind = N_Iteration_Scheme
!         or else NT (N).Nkind = N_Quantified_Expression);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Iterator_Specification;
! 
!    procedure Set_Itype
!       (N : Node_Id; Val : Entity_Id) is
!    begin
!       pragma Assert (False
!       or else NT (N).Nkind = N_Itype_Reference);
!       Set_Node1 (N, Val); -- no parent, semantic field
!    end Set_Itype;
! 
!    procedure Set_Key_Expression
!       (N : Node_Id; Val : Entity_Id) is
!    begin
!       pragma Assert (False
!       or else NT (N).Nkind = N_Iterated_Element_Association);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Key_Expression;
! 
!    procedure Set_Kill_Range_Check
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Unchecked_Type_Conversion);
!       Set_Flag11 (N, Val);
!    end Set_Kill_Range_Check;
! 
!    procedure Set_Label_Construct
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Implicit_Label_Declaration);
!       Set_Node2 (N, Val); -- semantic field, no parent set
!    end Set_Label_Construct;
! 
!    procedure Set_Last_Bit
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Clause);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Last_Bit;
! 
!    procedure Set_Last_Name
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag6 (N, Val);
!    end Set_Last_Name;
! 
!    procedure Set_Left_Opnd
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_And_Then
!         or else NT (N).Nkind = N_In
!         or else NT (N).Nkind = N_Not_In
!         or else NT (N).Nkind = N_Or_Else
!         or else NT (N).Nkind in N_Binary_Op);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Left_Opnd;
! 
!    procedure Set_Library_Unit
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit
!         or else NT (N).Nkind = N_Package_Body_Stub
!         or else NT (N).Nkind = N_Protected_Body_Stub
!         or else NT (N).Nkind = N_Subprogram_Body_Stub
!         or else NT (N).Nkind = N_Task_Body_Stub
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Node4 (N, Val); -- semantic field, no parent set
!    end Set_Library_Unit;
! 
!    procedure Set_Limited_View_Installed
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Package_Specification
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag18 (N, Val);
!    end Set_Limited_View_Installed;
! 
!    procedure Set_Limited_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Private_Type_Definition
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Private_Type_Declaration
!         or else NT (N).Nkind = N_Record_Definition
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag17 (N, Val);
!    end Set_Limited_Present;
! 
!    procedure Set_Literals
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Enumeration_Type_Definition);
!       Set_List1_With_Parent (N, Val);
!    end Set_Literals;
! 
!    procedure Set_Local_Raise_Not_OK
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Handler);
!       Set_Flag7 (N, Val);
!    end Set_Local_Raise_Not_OK;
! 
!    procedure Set_Local_Raise_Statements
!       (N : Node_Id; Val : Elist_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Handler);
!       Set_Elist1 (N, Val);
!    end Set_Local_Raise_Statements;
! 
!    procedure Set_Loop_Actions
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Association
!         or else NT (N).Nkind = N_Iterated_Component_Association
!         or else NT (N).Nkind = N_Iterated_Element_Association);
!       Set_List5 (N, Val); -- semantic field, no parent set
!    end Set_Loop_Actions;
! 
!    procedure Set_Loop_Parameter_Specification
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Iterated_Element_Association
!         or else NT (N).Nkind = N_Iteration_Scheme
!         or else NT (N).Nkind = N_Quantified_Expression);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Loop_Parameter_Specification;
! 
!    procedure Set_Low_Bound
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Range
!         or else NT (N).Nkind = N_Real_Range_Specification
!         or else NT (N).Nkind = N_Signed_Integer_Type_Definition);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Low_Bound;
! 
!    procedure Set_Mod_Clause
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Record_Representation_Clause);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Mod_Clause;
! 
!    procedure Set_More_Ids
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Declaration
!         or else NT (N).Nkind = N_Discriminant_Specification
!         or else NT (N).Nkind = N_Exception_Declaration
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Number_Declaration
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       Set_Flag5 (N, Val);
!    end Set_More_Ids;
! 
!    procedure Set_Must_Be_Byte_Aligned
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Reference);
!       Set_Flag14 (N, Val);
!    end Set_Must_Be_Byte_Aligned;
! 
!    procedure Set_Must_Not_Freeze
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subtype_Indication
!         or else NT (N).Nkind in N_Subexpr);
!       Set_Flag8 (N, Val);
!    end Set_Must_Not_Freeze;
! 
!    procedure Set_Must_Not_Override
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Declaration
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Function_Specification
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Procedure_Specification);
!       Set_Flag15 (N, Val);
!    end Set_Must_Not_Override;
! 
!    procedure Set_Must_Override
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Declaration
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Function_Specification
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Procedure_Specification);
!       Set_Flag14 (N, Val);
!    end Set_Must_Override;
! 
!    procedure Set_Name
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Attribute_Definition_Clause
!         or else NT (N).Nkind = N_Defining_Program_Unit_Name
!         or else NT (N).Nkind = N_Designator
!         or else NT (N).Nkind = N_Entry_Call_Statement
!         or else NT (N).Nkind = N_Exception_Renaming_Declaration
!         or else NT (N).Nkind = N_Exit_Statement
!         or else NT (N).Nkind = N_Formal_Package_Declaration
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Generic_Function_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Package_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Procedure_Renaming_Declaration
!         or else NT (N).Nkind = N_Goto_Statement
!         or else NT (N).Nkind = N_Iterator_Specification
!         or else NT (N).Nkind = N_Object_Renaming_Declaration
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Package_Renaming_Declaration
!         or else NT (N).Nkind = N_Procedure_Call_Statement
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Raise_Expression
!         or else NT (N).Nkind = N_Raise_Statement
!         or else NT (N).Nkind = N_Requeue_Statement
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration
!         or else NT (N).Nkind = N_Subunit
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Variant_Part
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Name;
! 
!    procedure Set_Names
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Abort_Statement);
!       Set_List2_With_Parent (N, Val);
!    end Set_Names;
! 
!    procedure Set_Next_Entity
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Defining_Character_Literal
!         or else NT (N).Nkind = N_Defining_Identifier
!         or else NT (N).Nkind = N_Defining_Operator_Symbol);
!       Set_Node2 (N, Val); -- semantic field, no parent set
!    end Set_Next_Entity;
! 
!    procedure Set_Next_Exit_Statement
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exit_Statement);
!       Set_Node3 (N, Val); -- semantic field, no parent set
!    end Set_Next_Exit_Statement;
! 
!    procedure Set_Next_Implicit_With
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Node3 (N, Val); -- semantic field, no parent set
!    end Set_Next_Implicit_With;
! 
!    procedure Set_Next_Named_Actual
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Parameter_Association);
!       Set_Node4 (N, Val); -- semantic field, no parent set
!    end Set_Next_Named_Actual;
! 
!    procedure Set_Next_Pragma
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       Set_Node1 (N, Val); -- semantic field, no parent set
!    end Set_Next_Pragma;
! 
!    procedure Set_Next_Rep_Item
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Attribute_Definition_Clause
!         or else NT (N).Nkind = N_Enumeration_Representation_Clause
!         or else NT (N).Nkind = N_Null_Statement
!         or else NT (N).Nkind = N_Pragma
!         or else NT (N).Nkind = N_Record_Representation_Clause);
!       Set_Node5 (N, Val); -- semantic field, no parent set
!    end Set_Next_Rep_Item;
! 
!    procedure Set_Next_Use_Clause
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       Set_Node3 (N, Val); -- semantic field, no parent set
!    end Set_Next_Use_Clause;
! 
!    procedure Set_No_Ctrl_Actions
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement);
!       Set_Flag7 (N, Val);
!    end Set_No_Ctrl_Actions;
! 
!    procedure Set_No_Elaboration_Check
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Procedure_Call_Statement);
!       Set_Flag4 (N, Val);
!    end Set_No_Elaboration_Check;
! 
!    procedure Set_No_Entities_Ref_In_Spec
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag8 (N, Val);
!    end Set_No_Entities_Ref_In_Spec;
! 
!    procedure Set_No_Initialization
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator
!         or else NT (N).Nkind = N_Object_Declaration);
!       Set_Flag13 (N, Val);
!    end Set_No_Initialization;
! 
!    procedure Set_No_Minimize_Eliminate
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_In
!         or else NT (N).Nkind = N_Not_In);
!       Set_Flag17 (N, Val);
!    end Set_No_Minimize_Eliminate;
! 
!    procedure Set_No_Side_Effect_Removal
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Call);
!       Set_Flag17 (N, Val);
!    end Set_No_Side_Effect_Removal;
! 
!    procedure Set_No_Truncation
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Unchecked_Type_Conversion);
!       Set_Flag17 (N, Val);
!    end Set_No_Truncation;
! 
!    procedure Set_Null_Excluding_Subtype
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_To_Object_Definition);
!       Set_Flag16 (N, Val);
!    end Set_Null_Excluding_Subtype;
! 
!    procedure Set_Null_Exclusion_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Definition
!         or else NT (N).Nkind = N_Access_Function_Definition
!         or else NT (N).Nkind = N_Access_Procedure_Definition
!         or else NT (N).Nkind = N_Access_To_Object_Definition
!         or else NT (N).Nkind = N_Allocator
!         or else NT (N).Nkind = N_Component_Definition
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Discriminant_Specification
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Function_Specification
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Object_Renaming_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification
!         or else NT (N).Nkind = N_Subtype_Declaration);
!       Set_Flag11 (N, Val);
!    end Set_Null_Exclusion_Present;
! 
!    procedure Set_Null_Exclusion_In_Return_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Function_Definition);
!       Set_Flag14 (N, Val);
!    end Set_Null_Exclusion_In_Return_Present;
! 
!    procedure Set_Null_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_List
!         or else NT (N).Nkind = N_Procedure_Specification
!         or else NT (N).Nkind = N_Record_Definition);
!       Set_Flag13 (N, Val);
!    end Set_Null_Present;
! 
!    procedure Set_Null_Record_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aggregate
!         or else NT (N).Nkind = N_Extension_Aggregate);
!       Set_Flag17 (N, Val);
!    end Set_Null_Record_Present;
! 
!    procedure Set_Null_Statement
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Procedure_Specification);
!       Set_Node2 (N, Val);
!    end Set_Null_Statement;
! 
!    procedure Set_Object_Definition
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Object_Declaration);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Object_Definition;
! 
!    procedure Set_Of_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Iterator_Specification);
!       Set_Flag16 (N, Val);
!    end Set_Of_Present;
! 
!    procedure Set_Original_Discriminant
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Identifier);
!       Set_Node2 (N, Val); -- semantic field, no parent set
!    end Set_Original_Discriminant;
! 
!    procedure Set_Original_Entity
!       (N : Node_Id; Val : Entity_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Integer_Literal
!         or else NT (N).Nkind = N_Real_Literal);
!       Set_Node2 (N, Val); --  semantic field, no parent set
!    end Set_Original_Entity;
! 
!    procedure Set_Others_Discrete_Choices
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Others_Choice);
!       Set_List1_With_Parent (N, Val);
!    end Set_Others_Discrete_Choices;
! 
!    procedure Set_Out_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification);
!       Set_Flag17 (N, Val);
!    end Set_Out_Present;
! 
!    procedure Set_Parameter_Associations
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Entry_Call_Statement
!         or else NT (N).Nkind = N_Function_Call
!         or else NT (N).Nkind = N_Procedure_Call_Statement);
!       Set_List3_With_Parent (N, Val);
!    end Set_Parameter_Associations;
! 
!    procedure Set_Parameter_Specifications
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Statement
!         or else NT (N).Nkind = N_Access_Function_Definition
!         or else NT (N).Nkind = N_Access_Procedure_Definition
!         or else NT (N).Nkind = N_Entry_Body_Formal_Part
!         or else NT (N).Nkind = N_Entry_Declaration
!         or else NT (N).Nkind = N_Function_Specification
!         or else NT (N).Nkind = N_Procedure_Specification);
!       Set_List3_With_Parent (N, Val);
!    end Set_Parameter_Specifications;
! 
!    procedure Set_Parameter_Type
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Parameter_Specification);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Parameter_Type;
! 
!    procedure Set_Parent_Spec
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Function_Instantiation
!         or else NT (N).Nkind = N_Generic_Function_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Package_Declaration
!         or else NT (N).Nkind = N_Generic_Package_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Procedure_Renaming_Declaration
!         or else NT (N).Nkind = N_Generic_Subprogram_Declaration
!         or else NT (N).Nkind = N_Package_Declaration
!         or else NT (N).Nkind = N_Package_Instantiation
!         or else NT (N).Nkind = N_Package_Renaming_Declaration
!         or else NT (N).Nkind = N_Procedure_Instantiation
!         or else NT (N).Nkind = N_Subprogram_Declaration
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
!       Set_Node4 (N, Val); -- semantic field, no parent set
!    end Set_Parent_Spec;
! 
!    procedure Set_Parent_With
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag1 (N, Val);
!    end Set_Parent_With;
! 
!    procedure Set_Position
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Clause);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Position;
! 
!    procedure Set_Pragma_Argument_Associations
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       Set_List2_With_Parent (N, Val);
!    end Set_Pragma_Argument_Associations;
! 
!    procedure Set_Pragma_Identifier
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Pragma_Identifier;
! 
!    procedure Set_Pragmas_After
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit_Aux
!         or else NT (N).Nkind = N_Terminate_Alternative);
!       Set_List5_With_Parent (N, Val);
!    end Set_Pragmas_After;
! 
!    procedure Set_Pragmas_Before
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Accept_Alternative
!         or else NT (N).Nkind = N_Delay_Alternative
!         or else NT (N).Nkind = N_Entry_Call_Alternative
!         or else NT (N).Nkind = N_Mod_Clause
!         or else NT (N).Nkind = N_Terminate_Alternative
!         or else NT (N).Nkind = N_Triggering_Alternative);
!       Set_List4_With_Parent (N, Val);
!    end Set_Pragmas_Before;
! 
!    procedure Set_Pre_Post_Conditions
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Contract);
!       Set_Node1 (N, Val); -- semantic field, no parent set
!    end Set_Pre_Post_Conditions;
! 
!    procedure Set_Prefix
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Explicit_Dereference
!         or else NT (N).Nkind = N_Indexed_Component
!         or else NT (N).Nkind = N_Reference
!         or else NT (N).Nkind = N_Selected_Component
!         or else NT (N).Nkind = N_Slice);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Prefix;
! 
!    procedure Set_Premature_Use
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Incomplete_Type_Declaration);
!       Set_Node5 (N, Val);
!    end Set_Premature_Use;
! 
!    procedure Set_Present_Expr
!       (N : Node_Id; Val : Uint) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Variant);
!       Set_Uint3 (N, Val);
!    end Set_Present_Expr;
! 
!    procedure Set_Prev_Ids
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Declaration
!         or else NT (N).Nkind = N_Discriminant_Specification
!         or else NT (N).Nkind = N_Exception_Declaration
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Number_Declaration
!         or else NT (N).Nkind = N_Object_Declaration
!         or else NT (N).Nkind = N_Parameter_Specification
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       Set_Flag6 (N, Val);
!    end Set_Prev_Ids;
! 
!    procedure Set_Prev_Use_Clause
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Use_Package_Clause
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       Set_Node1 (N, Val); -- semantic field, no parent set
!    end Set_Prev_Use_Clause;
! 
!    procedure Set_Print_In_Hex
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Integer_Literal);
!       Set_Flag13 (N, Val);
!    end Set_Print_In_Hex;
! 
!    procedure Set_Private_Declarations
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Package_Specification
!         or else NT (N).Nkind = N_Protected_Definition
!         or else NT (N).Nkind = N_Task_Definition);
!       Set_List3_With_Parent (N, Val);
!    end Set_Private_Declarations;
! 
!    procedure Set_Private_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag15 (N, Val);
!    end Set_Private_Present;
! 
!    procedure Set_Procedure_To_Call
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator
!         or else NT (N).Nkind = N_Extended_Return_Statement
!         or else NT (N).Nkind = N_Free_Statement
!         or else NT (N).Nkind = N_Simple_Return_Statement);
!       Set_Node2 (N, Val); -- semantic field, no parent set
!    end Set_Procedure_To_Call;
! 
!    procedure Set_Proper_Body
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subunit);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Proper_Body;
! 
!    procedure Set_Protected_Definition
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Protected_Type_Declaration
!         or else NT (N).Nkind = N_Single_Protected_Declaration);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Protected_Definition;
! 
!    procedure Set_Protected_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Function_Definition
!         or else NT (N).Nkind = N_Access_Procedure_Definition
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Record_Definition);
!       Set_Flag6 (N, Val);
!    end Set_Protected_Present;
! 
!    procedure Set_Raises_Constraint_Error
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Subexpr);
!       Set_Flag7 (N, Val);
!    end Set_Raises_Constraint_Error;
! 
!    procedure Set_Range_Constraint
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Delta_Constraint
!         or else NT (N).Nkind = N_Digits_Constraint);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Range_Constraint;
! 
!    procedure Set_Range_Expression
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Range_Constraint);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Range_Expression;
! 
!    procedure Set_Real_Range_Specification
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Decimal_Fixed_Point_Definition
!         or else NT (N).Nkind = N_Floating_Point_Definition
!         or else NT (N).Nkind = N_Ordinary_Fixed_Point_Definition);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Real_Range_Specification;
! 
!    procedure Set_Realval
!      (N : Node_Id; Val : Ureal) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Real_Literal);
!       Set_Ureal3 (N, Val);
!    end Set_Realval;
! 
!    procedure Set_Reason
!       (N : Node_Id; Val : Uint) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Raise_Constraint_Error
!         or else NT (N).Nkind = N_Raise_Program_Error
!         or else NT (N).Nkind = N_Raise_Storage_Error);
!       Set_Uint3 (N, Val);
!    end Set_Reason;
! 
!    procedure Set_Record_Extension_Part
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Record_Extension_Part;
! 
!    procedure Set_Redundant_Use
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Attribute_Reference
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Identifier);
!       Set_Flag13 (N, Val);
!    end Set_Redundant_Use;
! 
!    procedure Set_Renaming_Exception
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Exception_Declaration);
!       Set_Node2 (N, Val);
!    end Set_Renaming_Exception;
! 
!    procedure Set_Result_Definition
!      (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Function_Definition
!         or else NT (N).Nkind = N_Function_Specification);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Result_Definition;
! 
!    procedure Set_Return_Object_Declarations
!      (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Extended_Return_Statement);
!       Set_List3_With_Parent (N, Val);
!    end Set_Return_Object_Declarations;
! 
!    procedure Set_Return_Statement_Entity
!      (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Extended_Return_Statement
!         or else NT (N).Nkind = N_Simple_Return_Statement);
!       Set_Node5 (N, Val); -- semantic field, no parent set
!    end Set_Return_Statement_Entity;
! 
!    procedure Set_Reverse_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Iterator_Specification
!         or else NT (N).Nkind = N_Loop_Parameter_Specification);
!       Set_Flag15 (N, Val);
!    end Set_Reverse_Present;
! 
!    procedure Set_Right_Opnd
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind in N_Op
!         or else NT (N).Nkind = N_And_Then
!         or else NT (N).Nkind = N_In
!         or else NT (N).Nkind = N_Not_In
!         or else NT (N).Nkind = N_Or_Else);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Right_Opnd;
! 
!    procedure Set_Rounded_Result
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Op_Divide
!         or else NT (N).Nkind = N_Op_Multiply
!         or else NT (N).Nkind = N_Type_Conversion);
!       Set_Flag18 (N, Val);
!    end Set_Rounded_Result;
! 
!    procedure Set_Save_Invocation_Graph_Of_Body
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       Set_Flag1 (N, Val);
!    end Set_Save_Invocation_Graph_Of_Body;
! 
!    procedure Set_SCIL_Controlling_Tag
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_SCIL_Dispatching_Call);
!       Set_Node5 (N, Val); -- semantic field, no parent set
!    end Set_SCIL_Controlling_Tag;
! 
!    procedure Set_SCIL_Entity
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_SCIL_Dispatch_Table_Tag_Init
!         or else NT (N).Nkind = N_SCIL_Dispatching_Call
!         or else NT (N).Nkind = N_SCIL_Membership_Test);
!       Set_Node4 (N, Val); -- semantic field, no parent set
!    end Set_SCIL_Entity;
! 
!    procedure Set_SCIL_Tag_Value
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_SCIL_Membership_Test);
!       Set_Node5 (N, Val); -- semantic field, no parent set
!    end Set_SCIL_Tag_Value;
! 
!    procedure Set_SCIL_Target_Prim
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_SCIL_Dispatching_Call);
!       Set_Node2 (N, Val); -- semantic field, no parent set
!    end Set_SCIL_Target_Prim;
! 
!    procedure Set_Scope
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Defining_Character_Literal
!         or else NT (N).Nkind = N_Defining_Identifier
!         or else NT (N).Nkind = N_Defining_Operator_Symbol);
!       Set_Node3 (N, Val); -- semantic field, no parent set
!    end Set_Scope;
! 
!    procedure Set_Select_Alternatives
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Selective_Accept);
!       Set_List1_With_Parent (N, Val);
!    end Set_Select_Alternatives;
! 
!    procedure Set_Selector_Name
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Expanded_Name
!         or else NT (N).Nkind = N_Generic_Association
!         or else NT (N).Nkind = N_Parameter_Association
!         or else NT (N).Nkind = N_Selected_Component);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Selector_Name;
! 
!    procedure Set_Selector_Names
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Discriminant_Association);
!       Set_List1_With_Parent (N, Val);
!    end Set_Selector_Names;
! 
!    procedure Set_Shift_Count_OK
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Op_Rotate_Left
!         or else NT (N).Nkind = N_Op_Rotate_Right
!         or else NT (N).Nkind = N_Op_Shift_Left
!         or else NT (N).Nkind = N_Op_Shift_Right
!         or else NT (N).Nkind = N_Op_Shift_Right_Arithmetic);
!       Set_Flag4 (N, Val);
!    end Set_Shift_Count_OK;
! 
!    procedure Set_Source_Type
!       (N : Node_Id; Val : Entity_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Validate_Unchecked_Conversion);
!       Set_Node1 (N, Val); -- semantic field, no parent set
!    end Set_Source_Type;
! 
!    procedure Set_Specification
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Abstract_Subprogram_Declaration
!         or else NT (N).Nkind = N_Expression_Function
!         or else NT (N).Nkind = N_Formal_Abstract_Subprogram_Declaration
!         or else NT (N).Nkind = N_Formal_Concrete_Subprogram_Declaration
!         or else NT (N).Nkind = N_Generic_Package_Declaration
!         or else NT (N).Nkind = N_Generic_Subprogram_Declaration
!         or else NT (N).Nkind = N_Package_Declaration
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Subprogram_Body_Stub
!         or else NT (N).Nkind = N_Subprogram_Declaration
!         or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Specification;
! 
!    procedure Set_Split_PPC
!       (N : Node_Id; Val : Boolean) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Aspect_Specification
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag17 (N, Val);
!    end Set_Split_PPC;
! 
!    procedure Set_Statements
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Abortable_Part
!         or else NT (N).Nkind = N_Accept_Alternative
!         or else NT (N).Nkind = N_Case_Statement_Alternative
!         or else NT (N).Nkind = N_Delay_Alternative
!         or else NT (N).Nkind = N_Entry_Call_Alternative
!         or else NT (N).Nkind = N_Exception_Handler
!         or else NT (N).Nkind = N_Handled_Sequence_Of_Statements
!         or else NT (N).Nkind = N_Loop_Statement
!         or else NT (N).Nkind = N_Triggering_Alternative);
!       Set_List3_With_Parent (N, Val);
!    end Set_Statements;
! 
!    procedure Set_Storage_Pool
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator
!         or else NT (N).Nkind = N_Extended_Return_Statement
!         or else NT (N).Nkind = N_Free_Statement
!         or else NT (N).Nkind = N_Simple_Return_Statement);
!       Set_Node1 (N, Val); -- semantic field, no parent set
!    end Set_Storage_Pool;
! 
!    procedure Set_Subpool_Handle_Name
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Allocator);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Subpool_Handle_Name;
! 
!    procedure Set_Strval
!       (N : Node_Id; Val : String_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Operator_Symbol
!         or else NT (N).Nkind = N_String_Literal);
!       Set_Str3 (N, Val);
!    end Set_Strval;
! 
!    procedure Set_Subtype_Indication
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_To_Object_Definition
!         or else NT (N).Nkind = N_Component_Definition
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Iterator_Specification
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Subtype_Declaration);
!       Set_Node5_With_Parent (N, Val);
!    end Set_Subtype_Indication;
! 
!    procedure Set_Subtype_Mark
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Access_Definition
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Object_Declaration
!         or else NT (N).Nkind = N_Object_Renaming_Declaration
!         or else NT (N).Nkind = N_Qualified_Expression
!         or else NT (N).Nkind = N_Subtype_Indication
!         or else NT (N).Nkind = N_Type_Conversion
!         or else NT (N).Nkind = N_Unchecked_Type_Conversion
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Subtype_Mark;
! 
!    procedure Set_Subtype_Marks
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Unconstrained_Array_Definition);
!       Set_List2_With_Parent (N, Val);
!    end Set_Subtype_Marks;
! 
!    procedure Set_Suppress_Assignment_Checks
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Assignment_Statement
!         or else NT (N).Nkind = N_Object_Declaration);
!       Set_Flag18 (N, Val);
!    end Set_Suppress_Assignment_Checks;
! 
!    procedure Set_Suppress_Loop_Warnings
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Loop_Statement);
!       Set_Flag17 (N, Val);
!    end Set_Suppress_Loop_Warnings;
! 
!    procedure Set_Synchronized_Present
!      (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Formal_Derived_Type_Definition
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Record_Definition);
!       Set_Flag7 (N, Val);
!    end Set_Synchronized_Present;
! 
!    procedure Set_Tagged_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Incomplete_Type_Definition
!         or else NT (N).Nkind = N_Formal_Private_Type_Definition
!         or else NT (N).Nkind = N_Incomplete_Type_Declaration
!         or else NT (N).Nkind = N_Private_Type_Declaration
!         or else NT (N).Nkind = N_Record_Definition);
!       Set_Flag15 (N, Val);
!    end Set_Tagged_Present;
! 
!    procedure Set_Target
!       (N : Node_Id; Val : Entity_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Call_Marker
!         or else NT (N).Nkind = N_Variable_Reference_Marker);
!       Set_Node1 (N, Val); -- semantic field, no parent set
!    end Set_Target;
! 
!    procedure Set_Target_Type
!       (N : Node_Id; Val : Entity_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Validate_Unchecked_Conversion);
!       Set_Node2 (N, Val); -- semantic field, no parent set
!    end Set_Target_Type;
! 
!    procedure Set_Task_Definition
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Single_Task_Declaration
!         or else NT (N).Nkind = N_Task_Type_Declaration);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Task_Definition;
! 
!    procedure Set_Task_Present
!      (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Derived_Type_Definition
!         or else NT (N).Nkind = N_Record_Definition);
!       Set_Flag5 (N, Val);
!    end Set_Task_Present;
! 
!    procedure Set_Then_Actions
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_If_Expression);
!       Set_List2_With_Parent (N, Val); -- semantic field, but needs parents
!    end Set_Then_Actions;
! 
!    procedure Set_Then_Statements
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Elsif_Part
!         or else NT (N).Nkind = N_If_Statement);
!       Set_List2_With_Parent (N, Val);
!    end Set_Then_Statements;
! 
!    procedure Set_Triggering_Alternative
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Asynchronous_Select);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Triggering_Alternative;
! 
!    procedure Set_Triggering_Statement
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Triggering_Alternative);
!       Set_Node1_With_Parent (N, Val);
!    end Set_Triggering_Statement;
! 
!    procedure Set_TSS_Elist
!       (N : Node_Id; Val : Elist_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Freeze_Entity);
!       Set_Elist3 (N, Val); -- semantic field, no parent set
!    end Set_TSS_Elist;
! 
!    procedure Set_Uneval_Old_Accept
!      (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag7 (N, Val);
!    end Set_Uneval_Old_Accept;
! 
!    procedure Set_Uneval_Old_Warn
!      (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Pragma);
!       Set_Flag18 (N, Val);
!    end Set_Uneval_Old_Warn;
! 
!    procedure Set_Type_Definition
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Full_Type_Declaration);
!       Set_Node3_With_Parent (N, Val);
!    end Set_Type_Definition;
! 
!    procedure Set_Unit
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Compilation_Unit);
!       Set_Node2_With_Parent (N, Val);
!    end Set_Unit;
! 
!    procedure Set_Unknown_Discriminants_Present
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Type_Declaration
!         or else NT (N).Nkind = N_Incomplete_Type_Declaration
!         or else NT (N).Nkind = N_Private_Extension_Declaration
!         or else NT (N).Nkind = N_Private_Type_Declaration);
!       Set_Flag13 (N, Val);
!    end Set_Unknown_Discriminants_Present;
! 
!    procedure Set_Unreferenced_In_Spec
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_With_Clause);
!       Set_Flag7 (N, Val);
!    end Set_Unreferenced_In_Spec;
! 
!    procedure Set_Variant_Part
!       (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_List);
!       Set_Node4_With_Parent (N, Val);
!    end Set_Variant_Part;
! 
!    procedure Set_Variants
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Variant_Part);
!       Set_List1_With_Parent (N, Val);
!    end Set_Variants;
! 
!    procedure Set_Visible_Declarations
!       (N : Node_Id; Val : List_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Package_Specification
!         or else NT (N).Nkind = N_Protected_Definition
!         or else NT (N).Nkind = N_Task_Definition);
!       Set_List2_With_Parent (N, Val);
!    end Set_Visible_Declarations;
! 
!    procedure Set_Uninitialized_Variable
!      (N : Node_Id; Val : Node_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Formal_Private_Type_Definition
!         or else NT (N).Nkind = N_Private_Extension_Declaration);
!       Set_Node3 (N, Val);
!    end Set_Uninitialized_Variable;
! 
!    procedure Set_Used_Operations
!      (N : Node_Id; Val :  Elist_Id) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Use_Type_Clause);
!       Set_Elist2 (N, Val);
!    end Set_Used_Operations;
! 
!    procedure Set_Was_Attribute_Reference
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body);
!       Set_Flag2 (N, Val);
!    end Set_Was_Attribute_Reference;
! 
!    procedure Set_Was_Default_Init_Box_Association
!      (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Component_Association);
!       Set_Flag14 (N, Val);
!    end Set_Was_Default_Init_Box_Association;
! 
!    procedure Set_Was_Expression_Function
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Subprogram_Body);
!       Set_Flag18 (N, Val);
!    end Set_Was_Expression_Function;
! 
!    procedure Set_Was_Originally_Stub
!       (N : Node_Id; Val : Boolean := True) is
!    begin
!       pragma Assert (False
!         or else NT (N).Nkind = N_Package_Body
!         or else NT (N).Nkind = N_Protected_Body
!         or else NT (N).Nkind = N_Subprogram_Body
!         or else NT (N).Nkind = N_Task_Body);
!       Set_Flag13 (N, Val);
!    end Set_Was_Originally_Stub;
! 
!    -------------------------
!    -- Iterator Procedures --
!    -------------------------
! 
!    procedure Next_Entity       (N : in out Node_Id) is
!    begin
!       N := Next_Entity (N);
!    end Next_Entity;
! 
!    procedure Next_Named_Actual (N : in out Node_Id) is
!    begin
!       N := Next_Named_Actual (N);
!    end Next_Named_Actual;
! 
!    procedure Next_Rep_Item     (N : in out Node_Id) is
!    begin
!       N := Next_Rep_Item (N);
!    end Next_Rep_Item;
! 
!    procedure Next_Use_Clause   (N : in out Node_Id) is
!    begin
!       N := Next_Use_Clause (N);
!    end Next_Use_Clause;
! 
!    ------------------
!    -- End_Location --
!    ------------------
! 
!    function End_Location (N : Node_Id) return Source_Ptr is
!       L : constant Uint := End_Span (N);
!    begin
!       if L = No_Uint then
!          return No_Location;
!       else
!          return Source_Ptr (Int (Sloc (N)) + UI_To_Int (L));
!       end if;
!    end End_Location;
! 
!    --------------------
!    -- Get_Pragma_Arg --
!    --------------------
! 
!    function Get_Pragma_Arg (Arg : Node_Id) return Node_Id is
!    begin
!       if Nkind (Arg) = N_Pragma_Argument_Association then
!          return Expression (Arg);
!       else
!          return Arg;
!       end if;
!    end Get_Pragma_Arg;
! 
!    ----------------------
!    -- Set_End_Location --
!    ----------------------
! 
!    procedure Set_End_Location (N : Node_Id; S : Source_Ptr) is
!    begin
!       Set_End_Span (N,
!         UI_From_Int (Int (S) - Int (Sloc (N))));
!    end Set_End_Location;
! 
!    --------------------------
!    -- Pragma_Name_Unmapped --
!    --------------------------
! 
!    function Pragma_Name_Unmapped (N : Node_Id) return Name_Id is
!    begin
!       return Chars (Pragma_Identifier (N));
!    end Pragma_Name_Unmapped;
! 
!    ---------------------
!    -- Map_Pragma_Name --
!    ---------------------
! 
!    --  We don't want to introduce a dependence on some hash table package or
!    --  similar, so we use a simple array of Key => Value pairs, and do a linear
!    --  search. Linear search is plenty efficient, given that we don't expect
!    --  more than a couple of entries in the mapping.
! 
!    type Name_Pair is record
!       Key   : Name_Id;
!       Value : Name_Id;
!    end record;
! 
!    type Pragma_Map_Index is range 1 .. 100;
!    Pragma_Map : array (Pragma_Map_Index) of Name_Pair;
!    Last_Pair : Pragma_Map_Index'Base range 0 .. Pragma_Map_Index'Last := 0;
! 
!    procedure Map_Pragma_Name (From, To : Name_Id) is
!    begin
!       if Last_Pair = Pragma_Map'Last then
!          raise Too_Many_Pragma_Mappings;
!       end if;
! 
!       Last_Pair := Last_Pair + 1;
!       Pragma_Map (Last_Pair) := (Key => From, Value => To);
!    end Map_Pragma_Name;
! 
!    -----------------
!    -- Pragma_Name --
!    -----------------
! 
!    function Pragma_Name (N : Node_Id) return Name_Id is
!       Result : constant Name_Id := Pragma_Name_Unmapped (N);
!    begin
!       for J in Pragma_Map'First .. Last_Pair loop
!          if Result = Pragma_Map (J).Key then
!             return Pragma_Map (J).Value;
!          end if;
!       end loop;
! 
!       return Result;
!    end Pragma_Name;
! 
! end Sinfo;
--- 23,26 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! pragma No_Body;
diff -Nrcpad gcc-11.3.0/gcc/ada/sinfo.ads gcc-12.1.0/gcc/ada/sinfo.ads
*** gcc-11.3.0/gcc/ada/sinfo.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sinfo.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,29 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package defines the structure of the abstract syntax tree. The Tree
  --  package provides a basic tree structure. Sinfo describes how this structure
  --  is used to represent the syntax of an Ada program.
  
--- 23,29 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  This package documents the structure of the abstract syntax tree. The Atree
  --  package provides a basic tree structure. Sinfo describes how this structure
  --  is used to represent the syntax of an Ada program.
  
***************
*** 37,128 ****
  --  would normally be regarded as the symbol table information. In addition a
  --  number of the tree nodes contain semantic information.
  
! --  WARNING: Several files are automatically generated from this package.
! --  See below for details.
  
  with Namet;  use Namet;
  with Types;  use Types;
  with Uintp;  use Uintp;
  with Urealp; use Urealp;
  
  package Sinfo is
  
!    ---------------------------------
!    -- Making Changes to This File --
!    ---------------------------------
  
!    --  If changes are made to this file, a number of related steps must be
!    --  carried out to ensure consistency. First, if a field access function is
!    --  added, it appears in these places:
  
!    --    In sinfo.ads:
!    --      The documentation associated with the field (if semantic)
!    --      The documentation associated with the node
!    --      The spec of the access function
!    --      The spec of the set procedure
!    --      The entries in Is_Syntactic_Field
!    --      The pragma Inline for the access function
!    --      The pragma Inline for the set procedure
!    --    In sinfo.adb:
!    --      The body of the access function
!    --      The body of the set procedure
  
!    --  The field chosen must be consistent in all places, and, for a node that
!    --  is a subexpression, must not overlap any of the standard expression
!    --  fields.
  
!    --  In addition, if any of the standard expression fields is changed, then
!    --  the utility program which creates the Treeprs spec (in file treeprs.ads)
!    --  must be updated appropriately, since it special cases expression fields.
  
!    --  If a new tree node is added, then the following changes are made:
  
!    --    Add it to the documentation in the appropriate place
!    --    Add its fields to this documentation section
!    --    Define it in the appropriate classification in Node_Kind
!    --    Add an entry in Is_Syntactic_Field
!    --    In the body (sinfo), add entries to the access functions for all
!    --     its fields (except standard expression fields) to include the new
!    --     node in the checks.
!    --    Add an appropriate section to the case statement in sprint.adb
!    --    Add an appropriate section to the case statement in sem.adb
!    --    Add an appropriate section to the case statement in exp_util.adb
!    --     (Insert_Actions procedure)
!    --    For a subexpression, add an appropriate section to the case
!    --     statement in sem_eval.adb
!    --    For a subexpression, add an appropriate section to the case
!    --     statement in sem_res.adb
  
!    --  All back ends must be made aware of the new node kind.
  
!    --  Finally, four utility programs must be run:
  
!    --    (Optional.) Run CSinfo to check that you have made the changes
!    --     consistently. It checks most of the rules given above. This utility
!    --     reads sinfo.ads and sinfo.adb and generates a report to standard
!    --     output. This step is optional because XSinfo runs CSinfo.
  
!    --    Run XSinfo to create sinfo.h, the corresponding C header. This
!    --     utility reads sinfo.ads and generates sinfo.h. Note that it does
!    --     not need to read sinfo.adb, since the contents of the body are
!    --     algorithmically determinable from the spec.
  
!    --    Run XTreeprs to create treeprs.ads, an updated version of the module
!    --     that is used to drive the tree print routine. This utility reads (but
!    --     does not modify) treeprs.adt, the template that provides the basic
!    --     structure of the file, and then fills in the data from the comments
!    --     in sinfo.ads.
  
!    --    Run XNmake to create nmake.ads and nmake.adb, the package body and
!    --     spec of the Nmake package which contains functions for constructing
!    --     nodes.
  
!    --  The above steps are done automatically by the build scripts when you do
!    --  a full bootstrap.
  
!    --  Note: sometime we could write a utility that actually generated the body
!    --  of sinfo from the spec instead of simply checking it, since, as noted
!    --  above, the contents of the body can be determined from the spec.
  
     --------------------------------
     -- Implicit Nodes in the Tree --
--- 37,117 ----
  --  would normally be regarded as the symbol table information. In addition a
  --  number of the tree nodes contain semantic information.
  
! --  See the spec of Gen_IL.Gen for instructions on making changes to this file.
! --  Note that the official definition of what nodes have what fields is in
! --  Gen_IL.Gen.Gen_Nodes; if there is a discrepancy between that and the
! --  comments here, Gen_IL.Gen.Gen_Nodes wins.
  
+ pragma Warnings (Off); -- with/use clauses for children
  with Namet;  use Namet;
  with Types;  use Types;
  with Uintp;  use Uintp;
  with Urealp; use Urealp;
+ pragma Warnings (On);
  
  package Sinfo is
  
!    ----------------------------------------
!    -- Definitions of fields in tree node --
!    ----------------------------------------
  
!    --  The following fields are common to all nodes:
  
!    --   Nkind         Indicates the kind of the node. This field is present
!    --                 in all nodes.
  
!    --   Sloc          Location (Source_Ptr) of the corresponding token
!    --                 in the Source buffer. The individual node definitions
!    --                 show which token is referenced by this pointer.
  
!    --   In_List       A flag used to indicate if the node is a member
!    --                 of a node list (see package Nlists).
  
!    --   Rewrite_Ins   A flag set if a node is marked as a rewrite inserted
!    --                 node as a result of a call to Mark_Rewrite_Insertion.
  
!    --   Small_Paren_Count
!    --                 A 2-bit count used in subexpression nodes to indicate
!    --                 the level of parentheses. The settings are 0,1,2 and
!    --                 3 for many. If the value is 3, then an auxiliary table
!    --                 is used to indicate the real value, which is computed by
!    --                 Paren_Count. Set to zero for nonsubexpression nodes.
  
!    --                 Note: the required parentheses surrounding conditional
!    --                 and quantified expressions count as a level of parens
!    --                 for this purpose, so e.g. in X := (if A then B else C);
!    --                 Paren_Count for the right side will be 1.
  
!    --   Comes_From_Source
!    --                 This flag is present in all nodes. It is set if the
!    --                 node is built by the scanner or parser, and clear if
!    --                 the node is built by the analyzer or expander. It
!    --                 indicates that the node corresponds to a construct
!    --                 that appears in the original source program.
  
!    --   Analyzed      This flag is present in all nodes. It is set when
!    --                 a node is analyzed, and is used to avoid analyzing
!    --                 the same node twice. Analysis includes expansion if
!    --                 expansion is active, so in this case if the flag is
!    --                 set it means the node has been analyzed and expanded.
  
!    --   Error_Posted  This flag is present in all nodes. It is set when
!    --                 an error message is posted which is associated with
!    --                 the flagged node. This is used to avoid posting more
!    --                 than one message on the same node.
  
!    --   Link          For a node, points to the Parent. For a list, points
!    --                 to the list header. Note that in the latter case, a
!    --                 client cannot modify the link field. This field is
!    --                 private to the Atree package (but is also modified
!    --                 by the Nlists package).
  
!    --  The following additional fields are common to all entities (that is,
!    --  nodes whose Nkind is in N_Entity):
  
!    --   Ekind         Entity type.
  
!    --   Convention    Entity convention (Convention_Id value)
  
     --------------------------------
     -- Implicit Nodes in the Tree --
*************** package Sinfo is
*** 211,217 ****
  
     --  The exceptions to this rule occur with {DEFINING_IDENTIFIERS} in all
     --  contexts, which is handled as described in the previous section, and
!    --  with {,library_unit_NAME} in the N_With_Clause mode, which is handled
     --  using the First_Name and Last_Name flags, as further detailed in the
     --  description of the N_With_Clause node.
  
--- 200,206 ----
  
     --  The exceptions to this rule occur with {DEFINING_IDENTIFIERS} in all
     --  contexts, which is handled as described in the previous section, and
!    --  with {,library_unit_NAME} in the N_With_Clause node, which is handled
     --  using the First_Name and Last_Name flags, as further detailed in the
     --  description of the N_With_Clause node.
  
*************** package Sinfo is
*** 394,430 ****
     --  abbreviations are used:
  
     --    "plus fields for binary operator"
!    --       Chars                    (Name1)      Name_Id for the operator
!    --       Left_Opnd                (Node2)      left operand expression
!    --       Right_Opnd               (Node3)      right operand expression
!    --       Entity                   (Node4-Sem)  defining entity for operator
!    --       Associated_Node          (Node4-Sem)  for generic processing
!    --       Do_Overflow_Check        (Flag17-Sem) set if overflow check needed
!    --       Has_Private_View         (Flag11-Sem) set in generic units.
  
     --    "plus fields for unary operator"
!    --       Chars                    (Name1)      Name_Id for the operator
!    --       Right_Opnd               (Node3)      right operand expression
!    --       Entity                   (Node4-Sem)  defining entity for operator
!    --       Associated_Node          (Node4-Sem)  for generic processing
!    --       Do_Overflow_Check        (Flag17-Sem) set if overflow check needed
!    --       Has_Private_View         (Flag11-Sem) set in generic units.
  
     --    "plus fields for expression"
!    --       Paren_Count                           number of parentheses levels
!    --       Etype                    (Node5-Sem)  type of the expression
!    --       Is_Overloaded            (Flag5-Sem)  >1 type interpretation exists
!    --       Is_Static_Expression     (Flag6-Sem)  set for static expression
!    --       Raises_Constraint_Error  (Flag7-Sem)  evaluation raises CE
!    --       Must_Not_Freeze          (Flag8-Sem)  set if must not freeze
!    --       Do_Range_Check           (Flag9-Sem)  set if a range check needed
!    --       Has_Dynamic_Length_Check (Flag10-Sem) set if length check inserted
!    --       Assignment_OK            (Flag15-Sem) set if modification is OK
!    --       Is_Controlling_Actual    (Flag16-Sem) set for controlling argument
! 
!    --  Note: the utility program that creates the Treeprs spec (in the file
!    --  xtreeprs.adb) knows about the special fields here, so it must be
!    --  modified if any change is made to these fields.
  
     --  Note: see under (EXPRESSION) for further details on the use of
     --  the Paren_Count field to record the number of parentheses levels.
--- 383,415 ----
     --  abbreviations are used:
  
     --    "plus fields for binary operator"
!    --       Chars                     Name_Id for the operator
!    --       Left_Opnd                 left operand expression
!    --       Right_Opnd                right operand expression
!    --       Entity                    defining entity for operator
!    --       Associated_Node           for generic processing
!    --       Do_Overflow_Check         set if overflow check needed
!    --       Has_Private_View          set in generic units.
  
     --    "plus fields for unary operator"
!    --       Chars                     Name_Id for the operator
!    --       Right_Opnd                right operand expression
!    --       Entity                    defining entity for operator
!    --       Associated_Node           for generic processing
!    --       Do_Overflow_Check         set if overflow check needed
!    --       Has_Private_View          set in generic units.
  
     --    "plus fields for expression"
!    --       Paren_Count               number of parentheses levels
!    --       Etype                     type of the expression
!    --       Is_Overloaded             >1 type interpretation exists
!    --       Is_Static_Expression      set for static expression
!    --       Raises_Constraint_Error   evaluation raises CE
!    --       Must_Not_Freeze           set if must not freeze
!    --       Do_Range_Check            set if a range check needed
!    --       Has_Dynamic_Length_Check  set if length check inserted
!    --       Assignment_OK             set if modification is OK
!    --       Is_Controlling_Actual     set for controlling argument
  
     --  Note: see under (EXPRESSION) for further details on the use of
     --  the Paren_Count field to record the number of parentheses levels.
*************** package Sinfo is
*** 700,710 ****
  
     --  The following flag fields appear in various nodes:
  
-    --    Do_Accessibility_Check
     --    Do_Discriminant_Check
     --    Do_Length_Check
     --    Do_Storage_Check
-    --    Do_Tag_Check
  
     --  These flags are used in some specific cases by the front end, either
     --  during semantic analysis or during expansion, and cannot be expected
--- 685,693 ----
*************** package Sinfo is
*** 792,798 ****
     --  section describes the usage of the semantic fields, which are used to
     --  contain additional information determined during semantic analysis.
  
!    --  Accept_Handler_Records (List5-Sem)
     --    This field is present only in an N_Accept_Alternative node. It is used
     --    to temporarily hold the exception handler records from an accept
     --    statement in a selective accept. These exception handlers will
--- 775,781 ----
     --  section describes the usage of the semantic fields, which are used to
     --  contain additional information determined during semantic analysis.
  
!    --  Accept_Handler_Records
     --    This field is present only in an N_Accept_Alternative node. It is used
     --    to temporarily hold the exception handler records from an accept
     --    statement in a selective accept. These exception handlers will
*************** package Sinfo is
*** 800,818 ****
     --    built for this accept (see Expand_N_Selective_Accept procedure in
     --    Exp_Ch9 for further details).
  
!    --  Access_Types_To_Process (Elist2-Sem)
     --    Present in N_Freeze_Entity nodes for Incomplete or private types.
     --    Contains the list of access types which may require specific treatment
     --    when the nature of the type completion is completely known. An example
     --    of such treatment is the generation of the associated_final_chain.
  
!    --  Actions (List1-Sem)
     --    This field contains a sequence of actions that are associated with the
     --    node holding the field. See the individual node types for details of
     --    how this field is used, as well as the description of the specific use
     --    for a particular node type.
  
!    --  Activation_Chain_Entity (Node3-Sem)
     --    This is used in tree nodes representing task activators (blocks,
     --    subprogram bodies, package declarations, and task bodies). It is
     --    initially Empty, and then gets set to point to the entity for the
--- 783,801 ----
     --    built for this accept (see Expand_N_Selective_Accept procedure in
     --    Exp_Ch9 for further details).
  
!    --  Access_Types_To_Process
     --    Present in N_Freeze_Entity nodes for Incomplete or private types.
     --    Contains the list of access types which may require specific treatment
     --    when the nature of the type completion is completely known. An example
     --    of such treatment is the generation of the associated_final_chain.
  
!    --  Actions
     --    This field contains a sequence of actions that are associated with the
     --    node holding the field. See the individual node types for details of
     --    how this field is used, as well as the description of the specific use
     --    for a particular node type.
  
!    --  Activation_Chain_Entity
     --    This is used in tree nodes representing task activators (blocks,
     --    subprogram bodies, package declarations, and task bodies). It is
     --    initially Empty, and then gets set to point to the entity for the
*************** package Sinfo is
*** 826,837 ****
     --    statement, the tasks are moved to the caller's chain, and the caller
     --    activates them.
  
!    --  Acts_As_Spec (Flag4-Sem)
     --    A flag set in the N_Subprogram_Body node for a subprogram body which
     --    is acting as its own spec. In the case of a library-level subprogram
     --    the flag is set as well on the parent compilation unit node.
  
!    --  Actual_Designated_Subtype (Node4-Sem)
     --    Present in N_Free_Statement and N_Explicit_Dereference nodes. If gigi
     --    needs to known the dynamic constrained subtype of the designated
     --    object, this attribute is set to that type. This is done for
--- 809,820 ----
     --    statement, the tasks are moved to the caller's chain, and the caller
     --    activates them.
  
!    --  Acts_As_Spec
     --    A flag set in the N_Subprogram_Body node for a subprogram body which
     --    is acting as its own spec. In the case of a library-level subprogram
     --    the flag is set as well on the parent compilation unit node.
  
!    --  Actual_Designated_Subtype
     --    Present in N_Free_Statement and N_Explicit_Dereference nodes. If gigi
     --    needs to known the dynamic constrained subtype of the designated
     --    object, this attribute is set to that type. This is done for
*************** package Sinfo is
*** 840,877 ****
     --    the designated type is an unconstrained packed array and the
     --    dereference is the prefix of a 'Size attribute reference.
  
!    --  Address_Warning_Posted (Flag18-Sem)
     --    Present in N_Attribute_Definition nodes. Set to indicate that we have
     --    posted a warning for the address clause regarding size or alignment
     --    issues. Used to inhibit multiple redundant messages.
  
!    --  Aggregate_Bounds (Node3-Sem)
     --    Present in array N_Aggregate nodes. If the bounds of the aggregate are
     --    known at compile time, this field points to an N_Range node with those
     --    bounds. Otherwise Empty.
  
!    --  Alloc_For_BIP_Return (Flag1-Sem)
     --    Present in N_Allocator nodes. True if the allocator is one of those
     --    generated for a build-in-place return statement.
  
!    --  All_Others (Flag11-Sem)
     --    Present in an N_Others_Choice node. This flag is set for an others
     --    exception where all exceptions are to be caught, even those that are
     --    not normally handled (in particular the tasking abort signal). This
     --    is used for translation of the at end handler into a normal exception
     --    handler.
  
!    --  Aspect_On_Partial_View (Flag18)
     --    Present on an N_Aspect_Specification node. For an aspect that applies
     --    to a type entity, indicates whether the specification appears on the
     --    partial view of a private type or extension. Undefined for aspects
     --    that apply to other entities.
  
!    --  Aspect_Rep_Item (Node2-Sem)
     --    Present in N_Aspect_Specification nodes. Points to the corresponding
     --    pragma/attribute definition node used to process the aspect.
  
!    --  Assignment_OK (Flag15-Sem)
     --    This flag is set in a subexpression node for an object, indicating
     --    that the associated object can be modified, even if this would not
     --    normally be permissible (either by direct assignment, or by being
--- 823,860 ----
     --    the designated type is an unconstrained packed array and the
     --    dereference is the prefix of a 'Size attribute reference.
  
!    --  Address_Warning_Posted
     --    Present in N_Attribute_Definition nodes. Set to indicate that we have
     --    posted a warning for the address clause regarding size or alignment
     --    issues. Used to inhibit multiple redundant messages.
  
!    --  Aggregate_Bounds
     --    Present in array N_Aggregate nodes. If the bounds of the aggregate are
     --    known at compile time, this field points to an N_Range node with those
     --    bounds. Otherwise Empty.
  
!    --  Alloc_For_BIP_Return
     --    Present in N_Allocator nodes. True if the allocator is one of those
     --    generated for a build-in-place return statement.
  
!    --  All_Others
     --    Present in an N_Others_Choice node. This flag is set for an others
     --    exception where all exceptions are to be caught, even those that are
     --    not normally handled (in particular the tasking abort signal). This
     --    is used for translation of the at end handler into a normal exception
     --    handler.
  
!    --  Aspect_On_Partial_View
     --    Present on an N_Aspect_Specification node. For an aspect that applies
     --    to a type entity, indicates whether the specification appears on the
     --    partial view of a private type or extension. Undefined for aspects
     --    that apply to other entities.
  
!    --  Aspect_Rep_Item
     --    Present in N_Aspect_Specification nodes. Points to the corresponding
     --    pragma/attribute definition node used to process the aspect.
  
!    --  Assignment_OK
     --    This flag is set in a subexpression node for an object, indicating
     --    that the associated object can be modified, even if this would not
     --    normally be permissible (either by direct assignment, or by being
*************** package Sinfo is
*** 885,891 ****
     --    a Force_Evaluation call for an unchecked conversion, but this usage
     --    is unclear and not documented ???
  
!    --  Associated_Node (Node4-Sem)
     --    Present in nodes that can denote an entity: identifiers, character
     --    literals, operator symbols, expanded names, operator nodes, and
     --    attribute reference nodes (all these nodes have an Entity field).
--- 868,874 ----
     --    a Force_Evaluation call for an unchecked conversion, but this usage
     --    is unclear and not documented ???
  
!    --  Associated_Node
     --    Present in nodes that can denote an entity: identifiers, character
     --    literals, operator symbols, expanded names, operator nodes, and
     --    attribute reference nodes (all these nodes have an Entity field).
*************** package Sinfo is
*** 900,915 ****
     --    Since the back end is expected to ignore generic templates, this is
     --    harmless.
  
!    --  Atomic_Sync_Required (Flag14-Sem)
     --    This flag is set on a node for which atomic synchronization is
     --    required for the corresponding reference or modification.
  
!    --  At_End_Proc (Node1)
     --    This field is present in an N_Handled_Sequence_Of_Statements node.
     --    It contains an identifier reference for the cleanup procedure to be
     --    called. See description of this node for further details.
  
!    --  Backwards_OK (Flag6-Sem)
     --    A flag present in the N_Assignment_Statement node. It is used only
     --    if the type being assigned is an array type, and is set if analysis
     --    determines that it is definitely safe to do the copy backwards, i.e.
--- 883,898 ----
     --    Since the back end is expected to ignore generic templates, this is
     --    harmless.
  
!    --  Atomic_Sync_Required
     --    This flag is set on a node for which atomic synchronization is
     --    required for the corresponding reference or modification.
  
!    --  At_End_Proc
     --    This field is present in an N_Handled_Sequence_Of_Statements node.
     --    It contains an identifier reference for the cleanup procedure to be
     --    called. See description of this node for further details.
  
!    --  Backwards_OK
     --    A flag present in the N_Assignment_Statement node. It is used only
     --    if the type being assigned is an array type, and is set if analysis
     --    determines that it is definitely safe to do the copy backwards, i.e.
*************** package Sinfo is
*** 923,929 ****
     --    cannot figure it out. If both flags Forwards_OK and Backwards_OK are
     --    set, it means that the front end can assure no overlap of operands.
  
!    --  Body_To_Inline (Node3-Sem)
     --    Present in subprogram declarations. Denotes analyzed but unexpanded
     --    body of subprogram, to be used when inlining calls. Present when the
     --    subprogram has an Inline pragma and inlining is enabled. If the
--- 906,912 ----
     --    cannot figure it out. If both flags Forwards_OK and Backwards_OK are
     --    set, it means that the front end can assure no overlap of operands.
  
!    --  Body_To_Inline
     --    Present in subprogram declarations. Denotes analyzed but unexpanded
     --    body of subprogram, to be used when inlining calls. Present when the
     --    subprogram has an Inline pragma and inlining is enabled. If the
*************** package Sinfo is
*** 931,937 ****
     --    is a subprogram, the Body_To_Inline is the name of that entity, which
     --    is used directly in later calls to the original subprogram.
  
!    --  Body_Required (Flag13-Sem)
     --    A flag that appears in the N_Compilation_Unit node indicating that
     --    the corresponding unit requires a body. For the package case, this
     --    indicates that a completion is required. In Ada 95, if the flag is not
--- 914,920 ----
     --    is a subprogram, the Body_To_Inline is the name of that entity, which
     --    is used directly in later calls to the original subprogram.
  
!    --  Body_Required
     --    A flag that appears in the N_Compilation_Unit node indicating that
     --    the corresponding unit requires a body. For the package case, this
     --    indicates that a completion is required. In Ada 95, if the flag is not
*************** package Sinfo is
*** 941,957 ****
     --    a pragma Import or Interface applies, in which case no body is
     --    permitted (in Ada 83 or Ada 95).
  
!    --  By_Ref (Flag5-Sem)
     --    Present in N_Simple_Return_Statement and N_Extended_Return_Statement,
     --    this flag is set when the returned expression is already allocated on
     --    the secondary stack and thus the result is passed by reference rather
     --    than copied another time.
  
!    --  Cleanup_Actions (List5-Sem)
     --    Present in block statements created for transient blocks, contains
     --    additional cleanup actions carried over from the transient scope.
  
!    --  Check_Address_Alignment (Flag11-Sem)
     --    A flag present in N_Attribute_Definition clause for a 'Address
     --    attribute definition. This flag is set if a dynamic check should be
     --    generated at the freeze point for the entity to which this address
--- 924,940 ----
     --    a pragma Import or Interface applies, in which case no body is
     --    permitted (in Ada 83 or Ada 95).
  
!    --  By_Ref
     --    Present in N_Simple_Return_Statement and N_Extended_Return_Statement,
     --    this flag is set when the returned expression is already allocated on
     --    the secondary stack and thus the result is passed by reference rather
     --    than copied another time.
  
!    --  Cleanup_Actions
     --    Present in block statements created for transient blocks, contains
     --    additional cleanup actions carried over from the transient scope.
  
!    --  Check_Address_Alignment
     --    A flag present in N_Attribute_Definition clause for a 'Address
     --    attribute definition. This flag is set if a dynamic check should be
     --    generated at the freeze point for the entity to which this address
*************** package Sinfo is
*** 960,976 ****
     --    attribute definition clause is given, rather than testing this at the
     --    freeze point.
  
!    --  Comes_From_Extended_Return_Statement (Flag18-Sem)
     --    Present in N_Simple_Return_Statement nodes. True if this node was
     --    constructed as part of the N_Extended_Return_Statement expansion.
  
!    --  Compile_Time_Known_Aggregate (Flag18-Sem)
     --    Present in N_Aggregate nodes. Set for aggregates which can be fully
     --    evaluated at compile time without raising constraint error. Such
     --    aggregates can be passed as is to the back end without any expansion.
     --    See Exp_Aggr for specific conditions under which this flag gets set.
  
!    --  Componentwise_Assignment (Flag14-Sem)
     --    Present in N_Assignment_Statement nodes. Set for a record assignment
     --    where all that needs doing is to expand it into component-by-component
     --    assignments. This is used internally for the case of tagged types with
--- 943,959 ----
     --    attribute definition clause is given, rather than testing this at the
     --    freeze point.
  
!    --  Comes_From_Extended_Return_Statement
     --    Present in N_Simple_Return_Statement nodes. True if this node was
     --    constructed as part of the N_Extended_Return_Statement expansion.
  
!    --  Compile_Time_Known_Aggregate
     --    Present in N_Aggregate nodes. Set for aggregates which can be fully
     --    evaluated at compile time without raising constraint error. Such
     --    aggregates can be passed as is to the back end without any expansion.
     --    See Exp_Aggr for specific conditions under which this flag gets set.
  
!    --  Componentwise_Assignment
     --    Present in N_Assignment_Statement nodes. Set for a record assignment
     --    where all that needs doing is to expand it into component-by-component
     --    assignments. This is used internally for the case of tagged types with
*************** package Sinfo is
*** 980,986 ****
     --    expanding component assignments in this case, we never assign the _tag
     --    field, but we recursively assign components of the parent type.
  
!    --  Condition_Actions (List3-Sem)
     --    This field appears in else-if nodes and in the iteration scheme node
     --    for while loops. This field is only used during semantic processing to
     --    temporarily hold actions inserted into the tree. In the tree passed
--- 963,969 ----
     --    expanding component assignments in this case, we never assign the _tag
     --    field, but we recursively assign components of the parent type.
  
!    --  Condition_Actions
     --    This field appears in else-if nodes and in the iteration scheme node
     --    for while loops. This field is only used during semantic processing to
     --    temporarily hold actions inserted into the tree. In the tree passed
*************** package Sinfo is
*** 989,1002 ****
     --    package Exp_Util, and also the expansion routines for the relevant
     --    nodes.
  
!    --  Context_Pending (Flag16-Sem)
     --    This field appears in Compilation_Unit nodes, to indicate that the
     --    context of the unit is being compiled. Used to detect circularities
     --    that are not otherwise detected by the loading mechanism. Such
     --    circularities can occur in the presence of limited and non-limited
     --    with_clauses that mention the same units.
  
!    --  Controlling_Argument (Node1-Sem)
     --    This field is set in procedure and function call nodes if the call
     --    is a dispatching call (it is Empty for a non-dispatching call). It
     --    indicates the source of the call's controlling tag. For procedure
--- 972,985 ----
     --    package Exp_Util, and also the expansion routines for the relevant
     --    nodes.
  
!    --  Context_Pending
     --    This field appears in Compilation_Unit nodes, to indicate that the
     --    context of the unit is being compiled. Used to detect circularities
     --    that are not otherwise detected by the loading mechanism. Such
     --    circularities can occur in the presence of limited and non-limited
     --    with_clauses that mention the same units.
  
!    --  Controlling_Argument
     --    This field is set in procedure and function call nodes if the call
     --    is a dispatching call (it is Empty for a non-dispatching call). It
     --    indicates the source of the call's controlling tag. For procedure
*************** package Sinfo is
*** 1007,1013 ****
     --    tagged object. The latter is needed by the implementations of AI-239
     --    and AI-260.
  
!    --  Conversion_OK (Flag14-Sem)
     --    A flag set on type conversion nodes to indicate that the conversion
     --    is to be considered as being valid, even though it is the case that
     --    the conversion is not valid Ada. This is used for attributes Enum_Rep,
--- 990,996 ----
     --    tagged object. The latter is needed by the implementations of AI-239
     --    and AI-260.
  
!    --  Conversion_OK
     --    A flag set on type conversion nodes to indicate that the conversion
     --    is to be considered as being valid, even though it is the case that
     --    the conversion is not valid Ada. This is used for attributes Enum_Rep,
*************** package Sinfo is
*** 1019,1048 ****
     --    direct conversion of the underlying integer result, with no regard to
     --    the small operand.
  
!    --  Convert_To_Return_False (Flag13-Sem)
     --    Present in N_Raise_Expression nodes that appear in the body of the
     --    special predicateM function used to test a predicate in the context
     --    of a membership test, where raise expression results in returning a
!    --    value of False rather than raising an exception.???obsolete flag
  
!    --  Corresponding_Aspect (Node3-Sem)
     --    Present in N_Pragma node. Used to point back to the source aspect from
     --    the corresponding pragma. This field is Empty for source pragmas.
  
!    --  Corresponding_Body (Node5-Sem)
     --    This field is set in subprogram declarations, package declarations,
     --    entry declarations of protected types, and in generic units. It points
     --    to the defining entity for the corresponding body (NOT the node for
     --    the body itself).
  
!    --  Corresponding_Formal_Spec (Node3-Sem)
     --    This field is set in subprogram renaming declarations, where it points
     --    to the defining entity for a formal subprogram in the case where the
     --    renaming corresponds to a generic formal subprogram association in an
     --    instantiation. The field is Empty if the renaming does not correspond
     --    to such a formal association.
  
!    --  Corresponding_Generic_Association (Node5-Sem)
     --    This field is defined for object declarations and object renaming
     --    declarations. It is set for the declarations within an instance that
     --    map generic formals to their actuals. If set, the field points either
--- 1002,1035 ----
     --    direct conversion of the underlying integer result, with no regard to
     --    the small operand.
  
!    --  Convert_To_Return_False
     --    Present in N_Raise_Expression nodes that appear in the body of the
     --    special predicateM function used to test a predicate in the context
     --    of a membership test, where raise expression results in returning a
!    --    value of False rather than raising an exception.
  
!    --  Corresponding_Aspect
     --    Present in N_Pragma node. Used to point back to the source aspect from
     --    the corresponding pragma. This field is Empty for source pragmas.
  
!    --  Corresponding_Body
     --    This field is set in subprogram declarations, package declarations,
     --    entry declarations of protected types, and in generic units. It points
     --    to the defining entity for the corresponding body (NOT the node for
     --    the body itself).
  
!    --    Corresponding_Entry_Body
!    --    Defined in N_Subprogram_Body. Set for subprogram bodies that implement
!    --    a protected type entry; points to the body for the entry.
! 
!    --  Corresponding_Formal_Spec
     --    This field is set in subprogram renaming declarations, where it points
     --    to the defining entity for a formal subprogram in the case where the
     --    renaming corresponds to a generic formal subprogram association in an
     --    instantiation. The field is Empty if the renaming does not correspond
     --    to such a formal association.
  
!    --  Corresponding_Generic_Association
     --    This field is defined for object declarations and object renaming
     --    declarations. It is set for the declarations within an instance that
     --    map generic formals to their actuals. If set, the field points either
*************** package Sinfo is
*** 1050,1063 ****
     --    generic_association which is the original parent of the expression or
     --    name appearing in the declaration. This simplifies GNATprove queries.
  
!    --  Corresponding_Integer_Value (Uint4-Sem)
     --    This field is set in real literals of fixed-point types (it is not
     --    used for floating-point types). It contains the integer value used
     --    to represent the fixed-point value. It is also set on the universal
     --    real literals used to represent bounds of fixed-point base types
     --    and their first named subtypes.
  
!    --  Corresponding_Spec (Node5-Sem)
     --    This field is set in subprogram, package, task, and protected body
     --    nodes, where it points to the defining entity in the corresponding
     --    spec. The attribute is also set in N_With_Clause nodes where it points
--- 1037,1050 ----
     --    generic_association which is the original parent of the expression or
     --    name appearing in the declaration. This simplifies GNATprove queries.
  
!    --  Corresponding_Integer_Value
     --    This field is set in real literals of fixed-point types (it is not
     --    used for floating-point types). It contains the integer value used
     --    to represent the fixed-point value. It is also set on the universal
     --    real literals used to represent bounds of fixed-point base types
     --    and their first named subtypes.
  
!    --  Corresponding_Spec
     --    This field is set in subprogram, package, task, and protected body
     --    nodes, where it points to the defining entity in the corresponding
     --    spec. The attribute is also set in N_With_Clause nodes where it points
*************** package Sinfo is
*** 1069,1114 ****
     --    In Ada 2012, Corresponding_Spec is set on expression functions that
     --    complete a subprogram declaration.
  
!    --  Corresponding_Spec_Of_Stub (Node2-Sem)
     --    This field is present in subprogram, package, task, and protected body
     --    stubs where it points to the corresponding spec of the stub. Due to
     --    clashes in the structure of nodes, we cannot use Corresponding_Spec.
  
!    --  Corresponding_Stub (Node3-Sem)
     --    This field is present in an N_Subunit node. It holds the node in
     --    the parent unit that is the stub declaration for the subunit. It is
     --    set when analysis of the stub forces loading of the proper body. If
     --    expansion of the proper body creates new declarative nodes, they are
     --    inserted at the point of the corresponding_stub.
  
!    --  Dcheck_Function (Node5-Sem)
     --    This field is present in an N_Variant node, It references the entity
     --    for the discriminant checking function for the variant.
  
!    --  Default_Expression (Node5-Sem)
     --    This field is Empty if there is no default expression. If there is a
     --    simple default expression (one with no side effects), then this field
     --    simply contains a copy of the Expression field (both point to the tree
     --    for the default expression). Default_Expression is used for
     --    conformance checking.
  
!    --  Default_Storage_Pool (Node3-Sem)
     --    This field is present in N_Compilation_Unit_Aux nodes. It is set to a
     --    copy of Opt.Default_Pool at the end of the compilation unit. See
     --    package Opt for details. This is used for inheriting the
     --    Default_Storage_Pool in child units.
  
!    --  Discr_Check_Funcs_Built (Flag11-Sem)
     --    This flag is present in N_Full_Type_Declaration nodes. It is set when
     --    discriminant checking functions are constructed. The purpose is to
     --    avoid attempting to set these functions more than once.
  
!    --  Do_Accessibility_Check (Flag13-Sem)
!    --    This flag is set on N_Parameter_Specification nodes to indicate
!    --    that an accessibility check is required for the parameter. It is
!    --    not yet decided who takes care of this check (TBD ???).
! 
!    --  Do_Discriminant_Check (Flag3-Sem)
     --    This flag is set on N_Selected_Component nodes to indicate that a
     --    discriminant check is required using the discriminant check routine
     --    associated with the selector. The actual check is generated by the
--- 1056,1096 ----
     --    In Ada 2012, Corresponding_Spec is set on expression functions that
     --    complete a subprogram declaration.
  
!    --  Corresponding_Spec_Of_Stub
     --    This field is present in subprogram, package, task, and protected body
     --    stubs where it points to the corresponding spec of the stub. Due to
     --    clashes in the structure of nodes, we cannot use Corresponding_Spec.
  
!    --  Corresponding_Stub
     --    This field is present in an N_Subunit node. It holds the node in
     --    the parent unit that is the stub declaration for the subunit. It is
     --    set when analysis of the stub forces loading of the proper body. If
     --    expansion of the proper body creates new declarative nodes, they are
     --    inserted at the point of the corresponding_stub.
  
!    --  Dcheck_Function
     --    This field is present in an N_Variant node, It references the entity
     --    for the discriminant checking function for the variant.
  
!    --  Default_Expression
     --    This field is Empty if there is no default expression. If there is a
     --    simple default expression (one with no side effects), then this field
     --    simply contains a copy of the Expression field (both point to the tree
     --    for the default expression). Default_Expression is used for
     --    conformance checking.
  
!    --  Default_Storage_Pool
     --    This field is present in N_Compilation_Unit_Aux nodes. It is set to a
     --    copy of Opt.Default_Pool at the end of the compilation unit. See
     --    package Opt for details. This is used for inheriting the
     --    Default_Storage_Pool in child units.
  
!    --  Discr_Check_Funcs_Built
     --    This flag is present in N_Full_Type_Declaration nodes. It is set when
     --    discriminant checking functions are constructed. The purpose is to
     --    avoid attempting to set these functions more than once.
  
!    --  Do_Discriminant_Check
     --    This flag is set on N_Selected_Component nodes to indicate that a
     --    discriminant check is required using the discriminant check routine
     --    associated with the selector. The actual check is generated by the
*************** package Sinfo is
*** 1119,1136 ****
     --    (and set if the assignment requires a discriminant check), and in type
     --    conversion nodes (and set if the conversion requires a check).
  
!    --  Do_Division_Check (Flag13-Sem)
     --    This flag is set on a division operator (/ mod rem) to indicate that
     --    a zero divide check is required. The actual check is either dealt with
     --    by the back end if Backend_Divide_Checks is set to true, or by the
     --    front end itself if it is set to false.
  
!    --  Do_Length_Check (Flag4-Sem)
     --    This flag is set in an N_Assignment_Statement, N_Op_And, N_Op_Or,
     --    N_Op_Xor, or N_Type_Conversion node to indicate that a length check
     --    is required. It is not determined who deals with this flag (???).
  
!    --  Do_Overflow_Check (Flag17-Sem)
     --    This flag is set on an operator where an overflow check is required on
     --    the operation. The actual check is either dealt with by the back end
     --    if Backend_Overflow_Checks is set to true, or by the front end itself
--- 1101,1118 ----
     --    (and set if the assignment requires a discriminant check), and in type
     --    conversion nodes (and set if the conversion requires a check).
  
!    --  Do_Division_Check
     --    This flag is set on a division operator (/ mod rem) to indicate that
     --    a zero divide check is required. The actual check is either dealt with
     --    by the back end if Backend_Divide_Checks is set to true, or by the
     --    front end itself if it is set to false.
  
!    --  Do_Length_Check
     --    This flag is set in an N_Assignment_Statement, N_Op_And, N_Op_Or,
     --    N_Op_Xor, or N_Type_Conversion node to indicate that a length check
     --    is required. It is not determined who deals with this flag (???).
  
!    --  Do_Overflow_Check
     --    This flag is set on an operator where an overflow check is required on
     --    the operation. The actual check is either dealt with by the back end
     --    if Backend_Overflow_Checks is set to true, or by the front end itself
*************** package Sinfo is
*** 1143,1149 ****
     --    MINIMIZED or ELIMINATED overflow checking mode (to make sure that we
     --    properly process overflow checking for dependent expressions).
  
!    --  Do_Range_Check (Flag9-Sem)
     --    This flag is set on an expression which appears in a context where a
     --    range check is required. The target type is clear from the context.
     --    The contexts in which this flag can appear are the following:
--- 1125,1131 ----
     --    MINIMIZED or ELIMINATED overflow checking mode (to make sure that we
     --    properly process overflow checking for dependent expressions).
  
!    --  Do_Range_Check
     --    This flag is set on an expression which appears in a context where a
     --    range check is required. The target type is clear from the context.
     --    The contexts in which this flag can appear are the following:
*************** package Sinfo is
*** 1184,1190 ****
     --    listed above (e.g. in a return statement), an additional type
     --    conversion node is introduced to represent the required check.
  
!    --  Do_Storage_Check (Flag17-Sem)
     --    This flag is set in an N_Allocator node to indicate that a storage
     --    check is required for the allocation, or in an N_Subprogram_Body node
     --    to indicate that a stack check is required in the subprogram prologue.
--- 1166,1172 ----
     --    listed above (e.g. in a return statement), an additional type
     --    conversion node is introduced to represent the required check.
  
!    --  Do_Storage_Check
     --    This flag is set in an N_Allocator node to indicate that a storage
     --    check is required for the allocation, or in an N_Subprogram_Body node
     --    to indicate that a stack check is required in the subprogram prologue.
*************** package Sinfo is
*** 1192,1223 ****
     --    to the runtime routine. The N_Subprogram_Body case is handled by the
     --    backend, and all the semantics does is set the flag.
  
!    --  Do_Tag_Check (Flag13-Sem)
!    --    This flag is set on an N_Assignment_Statement, N_Function_Call,
!    --    N_Procedure_Call_Statement, N_Type_Conversion,
!    --    N_Simple_Return_Statement, or N_Extended_Return_Statement
!    --    node to indicate that the tag check can be suppressed. It is not
!    --    yet decided how this flag is used (TBD ???).
! 
!    --  Elaborate_Present (Flag4-Sem)
     --    This flag is set in the N_With_Clause node to indicate that pragma
     --    Elaborate pragma appears for the with'ed units.
  
!    --  Elaborate_All_Desirable (Flag9-Sem)
     --    This flag is set in the N_With_Clause mode to indicate that the static
     --    elaboration processing has determined that an Elaborate_All pragma is
     --    desirable for correct elaboration for this unit.
  
!    --  Elaborate_All_Present (Flag14-Sem)
     --    This flag is set in the N_With_Clause node to indicate that a
     --    pragma Elaborate_All pragma appears for the with'ed units.
  
!    --  Elaborate_Desirable (Flag11-Sem)
     --    This flag is set in the N_With_Clause mode to indicate that the static
     --    elaboration processing has determined that an Elaborate pragma is
     --    desirable for correct elaboration for this unit.
  
!    --  Else_Actions (List3-Sem)
     --    This field is present in if expression nodes. During code
     --    expansion we use the Insert_Actions procedure (in Exp_Util) to insert
     --    actions at an appropriate place in the tree to get elaborated at the
--- 1174,1198 ----
     --    to the runtime routine. The N_Subprogram_Body case is handled by the
     --    backend, and all the semantics does is set the flag.
  
!    --  Elaborate_Present
     --    This flag is set in the N_With_Clause node to indicate that pragma
     --    Elaborate pragma appears for the with'ed units.
  
!    --  Elaborate_All_Desirable
     --    This flag is set in the N_With_Clause mode to indicate that the static
     --    elaboration processing has determined that an Elaborate_All pragma is
     --    desirable for correct elaboration for this unit.
  
!    --  Elaborate_All_Present
     --    This flag is set in the N_With_Clause node to indicate that a
     --    pragma Elaborate_All pragma appears for the with'ed units.
  
!    --  Elaborate_Desirable
     --    This flag is set in the N_With_Clause mode to indicate that the static
     --    elaboration processing has determined that an Elaborate pragma is
     --    desirable for correct elaboration for this unit.
  
!    --  Else_Actions
     --    This field is present in if expression nodes. During code
     --    expansion we use the Insert_Actions procedure (in Exp_Util) to insert
     --    actions at an appropriate place in the tree to get elaborated at the
*************** package Sinfo is
*** 1228,1240 ****
     --    need for this field, so in the tree passed to Gigi, this field is
     --    always set to No_List.
  
!    --  Enclosing_Variant (Node2-Sem)
     --    This field is present in the N_Variant node and identifies the Node_Id
     --    corresponding to the immediately enclosing variant when the variant is
     --    nested, and N_Empty otherwise. Set during semantic processing of the
     --    variant part of a record type.
  
!    --  Entity (Node4-Sem)
     --    Appears in all direct names (identifiers, character literals, and
     --    operator symbols), as well as expanded names, and attributes that
     --    denote entities, such as 'Class. Points to entity for corresponding
--- 1203,1215 ----
     --    need for this field, so in the tree passed to Gigi, this field is
     --    always set to No_List.
  
!    --  Enclosing_Variant
     --    This field is present in the N_Variant node and identifies the Node_Id
     --    corresponding to the immediately enclosing variant when the variant is
     --    nested, and N_Empty otherwise. Set during semantic processing of the
     --    variant part of a record type.
  
!    --  Entity
     --    Appears in all direct names (identifiers, character literals, and
     --    operator symbols), as well as expanded names, and attributes that
     --    denote entities, such as 'Class. Points to entity for corresponding
*************** package Sinfo is
*** 1272,1283 ****
     --    aspects must be used to store arbitrary expressions for later semantic
     --    checks. See section on aspect specifications for details.
  
!    --  Entity_Or_Associated_Node (Node4-Sem)
     --    A synonym for both Entity and Associated_Node. Used by convention in
     --    the code when referencing this field in cases where it is not known
     --    whether the field contains an Entity or an Associated_Node.
  
!    --  Etype (Node5-Sem)
     --    Appears in all expression nodes, all direct names, and all entities.
     --    Points to the entity for the related type. Set after type resolution.
     --    Normally this is the actual subtype of the expression. However, in
--- 1247,1258 ----
     --    aspects must be used to store arbitrary expressions for later semantic
     --    checks. See section on aspect specifications for details.
  
!    --  Entity_Or_Associated_Node
     --    A synonym for both Entity and Associated_Node. Used by convention in
     --    the code when referencing this field in cases where it is not known
     --    whether the field contains an Entity or an Associated_Node.
  
!    --  Etype
     --    Appears in all expression nodes, all direct names, and all entities.
     --    Points to the entity for the related type. Set after type resolution.
     --    Normally this is the actual subtype of the expression. However, in
*************** package Sinfo is
*** 1289,1302 ****
     --    points to an essentially arbitrary choice from the possible set of
     --    types.
  
!    --  Exception_Junk (Flag8-Sem)
     --    This flag is set in a various nodes appearing in a statement sequence
     --    to indicate that the corresponding node is an artifact of the
     --    generated code for exception handling, and should be ignored when
     --    analyzing the control flow of the relevant sequence of statements
     --    (e.g. to check that it does not end with a bad return statement).
  
!    --  Exception_Label (Node5-Sem)
     --    Appears in N_Push_xxx_Label nodes. Points to the entity of the label
     --    to be used for transforming the corresponding exception into a goto,
     --    or contains Empty, if this exception is not to be transformed. Also
--- 1264,1277 ----
     --    points to an essentially arbitrary choice from the possible set of
     --    types.
  
!    --  Exception_Junk
     --    This flag is set in a various nodes appearing in a statement sequence
     --    to indicate that the corresponding node is an artifact of the
     --    generated code for exception handling, and should be ignored when
     --    analyzing the control flow of the relevant sequence of statements
     --    (e.g. to check that it does not end with a bad return statement).
  
!    --  Exception_Label
     --    Appears in N_Push_xxx_Label nodes. Points to the entity of the label
     --    to be used for transforming the corresponding exception into a goto,
     --    or contains Empty, if this exception is not to be transformed. Also
*************** package Sinfo is
*** 1305,1311 ****
     --    to allow a goto is required (and this field contains the label for
     --    this goto). See Exp_Ch11.Expand_Local_Exception_Handlers for details.
  
!    --  Expansion_Delayed (Flag11-Sem)
     --    Set on aggregates and extension aggregates that need a top-down rather
     --    than bottom-up expansion. Typically aggregate expansion happens bottom
     --    up. For nested aggregates the expansion is delayed until the enclosing
--- 1280,1286 ----
     --    to allow a goto is required (and this field contains the label for
     --    this goto). See Exp_Ch11.Expand_Local_Exception_Handlers for details.
  
!    --  Expansion_Delayed
     --    Set on aggregates and extension aggregates that need a top-down rather
     --    than bottom-up expansion. Typically aggregate expansion happens bottom
     --    up. For nested aggregates the expansion is delayed until the enclosing
*************** package Sinfo is
*** 1313,1339 ****
     --    delay it we set this flag. This is done to avoid creating a temporary
     --    for each level of a nested aggregate, and also to prevent the
     --    premature generation of constraint checks. This is also a requirement
!    --    if we want to generate the proper attachment to the internal????
     --    finalization lists (for record with controlled components). Top down
     --    expansion of aggregates is also used for in-place array aggregate
     --    assignment or initialization. When the full context is known, the
     --    target of the assignment or initialization is used to generate the
!    --    left-hand side of individual assignment to each sub-component.
  
!    --  Expression_Copy (Node2-Sem)
     --    Present in N_Pragma_Argument_Association nodes. Contains a copy of the
     --    original expression. This field is best used to store pragma-dependent
     --    modifications performed on the original expression such as replacement
     --    of the current type instance or substitutions of primitives.
  
!    --  First_Inlined_Subprogram (Node3-Sem)
     --    Present in the N_Compilation_Unit node for the main program. Points
     --    to a chain of entities for subprograms that are to be inlined. The
     --    Next_Inlined_Subprogram field of these entities is used as a link
     --    pointer with Empty marking the end of the list. This field is Empty
     --    if there are no inlined subprograms or inlining is not active.
  
!    --  First_Named_Actual (Node4-Sem)
     --    Present in procedure call statement and function call nodes, and also
     --    in Intrinsic nodes. Set during semantic analysis to point to the first
     --    named parameter where parameters are ordered by declaration order (as
--- 1288,1314 ----
     --    delay it we set this flag. This is done to avoid creating a temporary
     --    for each level of a nested aggregate, and also to prevent the
     --    premature generation of constraint checks. This is also a requirement
!    --    if we want to generate the proper attachment to the internal
     --    finalization lists (for record with controlled components). Top down
     --    expansion of aggregates is also used for in-place array aggregate
     --    assignment or initialization. When the full context is known, the
     --    target of the assignment or initialization is used to generate the
!    --    left-hand side of individual assignment to each subcomponent.
  
!    --  Expression_Copy
     --    Present in N_Pragma_Argument_Association nodes. Contains a copy of the
     --    original expression. This field is best used to store pragma-dependent
     --    modifications performed on the original expression such as replacement
     --    of the current type instance or substitutions of primitives.
  
!    --  First_Inlined_Subprogram
     --    Present in the N_Compilation_Unit node for the main program. Points
     --    to a chain of entities for subprograms that are to be inlined. The
     --    Next_Inlined_Subprogram field of these entities is used as a link
     --    pointer with Empty marking the end of the list. This field is Empty
     --    if there are no inlined subprograms or inlining is not active.
  
!    --  First_Named_Actual
     --    Present in procedure call statement and function call nodes, and also
     --    in Intrinsic nodes. Set during semantic analysis to point to the first
     --    named parameter where parameters are ordered by declaration order (as
*************** package Sinfo is
*** 1341,1347 ****
     --    named associations). Note: this field points to the explicit actual
     --    parameter itself, not the N_Parameter_Association node (its parent).
  
!    --  First_Real_Statement (Node2-Sem)
     --    Present in N_Handled_Sequence_Of_Statements node. Normally set to
     --    Empty. Used only when declarations are moved into the statement part
     --    of a construct as a result of wrapping an AT END handler that is
--- 1316,1322 ----
     --    named associations). Note: this field points to the explicit actual
     --    parameter itself, not the N_Parameter_Association node (its parent).
  
!    --  First_Real_Statement
     --    Present in N_Handled_Sequence_Of_Statements node. Normally set to
     --    Empty. Used only when declarations are moved into the statement part
     --    of a construct as a result of wrapping an AT END handler that is
*************** package Sinfo is
*** 1350,1365 ****
     --    statement, i.e. the statement that used to be first in the statement
     --    list before the declarations were prepended.
  
!    --  First_Subtype_Link (Node5-Sem)
     --    Present in N_Freeze_Entity node for an anonymous base type that is
     --    implicitly created by the declaration of a first subtype. It points
     --    to the entity for the first subtype.
  
!    --  Float_Truncate (Flag11-Sem)
     --    A flag present in type conversion nodes. This is used for float to
     --    integer conversions where truncation is required rather than rounding.
  
!    --  Forwards_OK (Flag5-Sem)
     --    A flag present in the N_Assignment_Statement node. It is used only
     --    if the type being assigned is an array type, and is set if analysis
     --    determines that it is definitely safe to do the copy forwards, i.e.
--- 1325,1340 ----
     --    statement, i.e. the statement that used to be first in the statement
     --    list before the declarations were prepended.
  
!    --  First_Subtype_Link
     --    Present in N_Freeze_Entity node for an anonymous base type that is
     --    implicitly created by the declaration of a first subtype. It points
     --    to the entity for the first subtype.
  
!    --  Float_Truncate
     --    A flag present in type conversion nodes. This is used for float to
     --    integer conversions where truncation is required rather than rounding.
  
!    --  Forwards_OK
     --    A flag present in the N_Assignment_Statement node. It is used only
     --    if the type being assigned is an array type, and is set if analysis
     --    determines that it is definitely safe to do the copy forwards, i.e.
*************** package Sinfo is
*** 1373,1392 ****
     --    cannot figure it out. If both flags Forwards_OK and Backwards_OK are
     --    set, it means that the front end can assure no overlap of operands.
  
!    --  From_Aspect_Specification (Flag13-Sem)
     --    Processing of aspect specifications typically results in insertion in
     --    the tree of corresponding pragma or attribute definition clause nodes.
     --    These generated nodes have the From_Aspect_Specification flag set to
     --    indicate that they came from aspect specifications originally.
  
!    --  From_At_End (Flag4-Sem)
     --    This flag is set on an N_Raise_Statement node if it corresponds to
     --    the reraise statement generated as the last statement of an AT END
     --    handler when SJLJ exception handling is active. It is used to stop
     --    a bogus violation of restriction (No_Exception_Propagation), bogus
     --    because if the restriction is set, the reraise is not generated.
  
!    --  From_At_Mod (Flag4-Sem)
     --    This flag is set on the attribute definition clause node that is
     --    generated by a transformation of an at mod phrase in a record
     --    representation clause. This is used to give slightly different (Ada 83
--- 1348,1367 ----
     --    cannot figure it out. If both flags Forwards_OK and Backwards_OK are
     --    set, it means that the front end can assure no overlap of operands.
  
!    --  From_Aspect_Specification
     --    Processing of aspect specifications typically results in insertion in
     --    the tree of corresponding pragma or attribute definition clause nodes.
     --    These generated nodes have the From_Aspect_Specification flag set to
     --    indicate that they came from aspect specifications originally.
  
!    --  From_At_End
     --    This flag is set on an N_Raise_Statement node if it corresponds to
     --    the reraise statement generated as the last statement of an AT END
     --    handler when SJLJ exception handling is active. It is used to stop
     --    a bogus violation of restriction (No_Exception_Propagation), bogus
     --    because if the restriction is set, the reraise is not generated.
  
!    --  From_At_Mod
     --    This flag is set on the attribute definition clause node that is
     --    generated by a transformation of an at mod phrase in a record
     --    representation clause. This is used to give slightly different (Ada 83
*************** package Sinfo is
*** 1396,1414 ****
     --    must be a multiple of the given value, and the representation clause
     --    is considered to be type specific instead of subtype specific.
  
!    --  From_Conditional_Expression (Flag1-Sem)
     --    This flag is set on if and case statements generated by the expansion
     --    of if and case expressions respectively. The flag is used to suppress
     --    any finalization of controlled objects found within these statements.
  
!    --  From_Default (Flag6-Sem)
     --    This flag is set on the subprogram renaming declaration created in an
     --    instance for a formal subprogram, when the formal is declared with a
     --    box, and there is no explicit actual. If the flag is present, the
     --    declaration is treated as an implicit reference to the formal in the
     --    ali file.
  
!    --  Generalized_Indexing (Node4-Sem)
     --    Present in N_Indexed_Component nodes. Set for Indexed_Component nodes
     --    that are Ada 2012 container indexing operations. The value of the
     --    attribute is a function call (possibly dereferenced) that corresponds
--- 1371,1389 ----
     --    must be a multiple of the given value, and the representation clause
     --    is considered to be type specific instead of subtype specific.
  
!    --  From_Conditional_Expression
     --    This flag is set on if and case statements generated by the expansion
     --    of if and case expressions respectively. The flag is used to suppress
     --    any finalization of controlled objects found within these statements.
  
!    --  From_Default
     --    This flag is set on the subprogram renaming declaration created in an
     --    instance for a formal subprogram, when the formal is declared with a
     --    box, and there is no explicit actual. If the flag is present, the
     --    declaration is treated as an implicit reference to the formal in the
     --    ali file.
  
!    --  Generalized_Indexing
     --    Present in N_Indexed_Component nodes. Set for Indexed_Component nodes
     --    that are Ada 2012 container indexing operations. The value of the
     --    attribute is a function call (possibly dereferenced) that corresponds
*************** package Sinfo is
*** 1416,1427 ****
     --    expansion, the source node is rewritten as the resolved generalized
     --    indexing.
  
!    --  Generic_Parent (Node5-Sem)
     --    Generic_Parent is defined on declaration nodes that are instances. The
     --    value of Generic_Parent is the generic entity from which the instance
     --    is obtained.
  
!    --  Generic_Parent_Type (Node4-Sem)
     --    Generic_Parent_Type is defined on Subtype_Declaration nodes for the
     --    actuals of formal private and derived types. Within the instance, the
     --    operations on the actual are those inherited from the parent. For a
--- 1391,1402 ----
     --    expansion, the source node is rewritten as the resolved generalized
     --    indexing.
  
!    --  Generic_Parent
     --    Generic_Parent is defined on declaration nodes that are instances. The
     --    value of Generic_Parent is the generic entity from which the instance
     --    is obtained.
  
!    --  Generic_Parent_Type
     --    Generic_Parent_Type is defined on Subtype_Declaration nodes for the
     --    actuals of formal private and derived types. Within the instance, the
     --    operations on the actual are those inherited from the parent. For a
*************** package Sinfo is
*** 1429,1435 ****
     --    Generic_Parent_Type is also used in an instance to determine whether a
     --    private operation overrides an inherited one.
  
!    --  Handler_List_Entry (Node2-Sem)
     --    This field is present in N_Object_Declaration nodes. It is set only
     --    for the Handler_Record entry generated for an exception in zero cost
     --    exception handling mode. It references the corresponding item in the
--- 1404,1410 ----
     --    Generic_Parent_Type is also used in an instance to determine whether a
     --    private operation overrides an inherited one.
  
!    --  Handler_List_Entry
     --    This field is present in N_Object_Declaration nodes. It is set only
     --    for the Handler_Record entry generated for an exception in zero cost
     --    exception handling mode. It references the corresponding item in the
*************** package Sinfo is
*** 1437,1462 ****
     --    handler is deleted during optimization. For further details on why
     --    this is required, see Exp_Ch11.Remove_Handler_Entries.
  
!    --  Has_Dereference_Action (Flag13-Sem)
     --    This flag is present in N_Explicit_Dereference nodes. It is set to
     --    indicate that the expansion has aready produced a call to primitive
     --    Dereference of a System.Checked_Pools.Checked_Pool implementation.
     --    Such dereference actions are produced for debugging purposes.
  
!    --  Has_Dynamic_Length_Check (Flag10-Sem)
     --    This flag is present in all expression nodes. It is set to indicate
     --    that one of the routines in unit Checks has generated a length check
     --    action which has been inserted at the flagged node. This is used to
     --    avoid the generation of duplicate checks.
  
!    --  Has_Local_Raise (Flag8-Sem)
     --    Present in exception handler nodes. Set if the handler can be entered
     --    via a local raise that gets transformed to a goto statement. This will
     --    always be set if Local_Raise_Statements is non-empty, but can also be
     --    set as a result of generation of N_Raise_xxx nodes, or flags set in
     --    nodes requiring generation of back end checks.
  
!    --  Has_No_Elaboration_Code (Flag17-Sem)
     --    A flag that appears in the N_Compilation_Unit node to indicate whether
     --    or not elaboration code is present for this unit. It is initially set
     --    true for subprogram specs and bodies and for all generic units and
--- 1412,1437 ----
     --    handler is deleted during optimization. For further details on why
     --    this is required, see Exp_Ch11.Remove_Handler_Entries.
  
!    --  Has_Dereference_Action
     --    This flag is present in N_Explicit_Dereference nodes. It is set to
     --    indicate that the expansion has aready produced a call to primitive
     --    Dereference of a System.Checked_Pools.Checked_Pool implementation.
     --    Such dereference actions are produced for debugging purposes.
  
!    --  Has_Dynamic_Length_Check
     --    This flag is present in all expression nodes. It is set to indicate
     --    that one of the routines in unit Checks has generated a length check
     --    action which has been inserted at the flagged node. This is used to
     --    avoid the generation of duplicate checks.
  
!    --  Has_Local_Raise
     --    Present in exception handler nodes. Set if the handler can be entered
     --    via a local raise that gets transformed to a goto statement. This will
     --    always be set if Local_Raise_Statements is non-empty, but can also be
     --    set as a result of generation of N_Raise_xxx nodes, or flags set in
     --    nodes requiring generation of back end checks.
  
!    --  Has_No_Elaboration_Code
     --    A flag that appears in the N_Compilation_Unit node to indicate whether
     --    or not elaboration code is present for this unit. It is initially set
     --    true for subprogram specs and bodies and for all generic units and
*************** package Sinfo is
*** 1467,1473 ****
     --    generate elaboration code, and non-preelaborated packages which do
     --    not generate elaboration code.
  
!    --  Has_Pragma_Suppress_All (Flag14-Sem)
     --    This flag is set in an N_Compilation_Unit node if the Suppress_All
     --    pragma appears anywhere in the unit. This accommodates the rather
     --    strange placement rules of other compilers (DEC permits it at the
--- 1442,1448 ----
     --    generate elaboration code, and non-preelaborated packages which do
     --    not generate elaboration code.
  
!    --  Has_Pragma_Suppress_All
     --    This flag is set in an N_Compilation_Unit node if the Suppress_All
     --    pragma appears anywhere in the unit. This accommodates the rather
     --    strange placement rules of other compilers (DEC permits it at the
*************** package Sinfo is
*** 1476,1535 ****
     --    Suppress (All_Checks) appearing at the start of the configuration
     --    pragmas for the unit.
  
!    --  Has_Private_View (Flag11-Sem)
     --    A flag present in generic nodes that have an entity, to indicate that
     --    the node has a private type. Used to exchange private and full
     --    declarations if the visibility at instantiation is different from the
     --    visibility at generic definition.
  
!    --  Has_Relative_Deadline_Pragma (Flag9-Sem)
     --    A flag present in N_Subprogram_Body and N_Task_Definition nodes to
     --    flag the presence of a pragma Relative_Deadline.
  
!    --  Has_Self_Reference (Flag13-Sem)
     --    Present in N_Aggregate and N_Extension_Aggregate. Indicates that one
     --    of the expressions contains an access attribute reference to the
     --    enclosing type. Such a self-reference can only appear in default-
     --    initialized aggregate for a record type.
  
!    --  Has_SP_Choice (Flag15-Sem)
     --    Present in all nodes containing a Discrete_Choices field (N_Variant,
     --    N_Case_Expression_Alternative, N_Case_Statement_Alternative). Set to
     --    True if the Discrete_Choices list has at least one occurrence of a
     --    statically predicated subtype.
  
!    --  Has_Storage_Size_Pragma (Flag5-Sem)
     --    A flag present in an N_Task_Definition node to flag the presence of a
     --    Storage_Size pragma.
  
!    --  Has_Target_Names (Flag8-Sem)
     --    Present in assignment statements. Indicates that the RHS contains
     --    target names (see AI12-0125-3) and must be expanded accordingly.
  
!    --  Has_Wide_Character (Flag11-Sem)
     --    Present in string literals, set if any wide character (i.e. character
     --    code outside the Character range but within Wide_Character range)
     --    appears in the string. Used to implement pragma preference rules.
  
!    --  Has_Wide_Wide_Character (Flag13-Sem)
     --    Present in string literals, set if any wide character (i.e. character
     --    code outside the Wide_Character range) appears in the string. Used to
     --    implement pragma preference rules.
  
!    --  Header_Size_Added (Flag11-Sem)
     --    Present in N_Attribute_Reference nodes, set only for attribute
     --    Max_Size_In_Storage_Elements. The flag indicates that the size of the
     --    hidden list header used by the runtime finalization support has been
     --    added to the size of the prefix. The flag also prevents the infinite
     --    expansion of the same attribute in the said context.
  
!    --  Hidden_By_Use_Clause (Elist5-Sem)
     --    An entity list present in use clauses that appear within
     --    instantiations. For the resolution of local entities, entities
     --    introduced by these use clauses have priority over global ones,
     --    and outer entities must be explicitly hidden/restored on exit.
  
!    --  Implicit_With (Flag16-Sem)
     --    Present in N_With_Clause nodes. The flag indicates that the clause
     --    does not comes from source and introduces an implicit dependency on
     --    a particular unit. Such implicit with clauses are generated by:
--- 1451,1510 ----
     --    Suppress (All_Checks) appearing at the start of the configuration
     --    pragmas for the unit.
  
!    --  Has_Private_View
     --    A flag present in generic nodes that have an entity, to indicate that
     --    the node has a private type. Used to exchange private and full
     --    declarations if the visibility at instantiation is different from the
     --    visibility at generic definition.
  
!    --  Has_Relative_Deadline_Pragma
     --    A flag present in N_Subprogram_Body and N_Task_Definition nodes to
     --    flag the presence of a pragma Relative_Deadline.
  
!    --  Has_Self_Reference
     --    Present in N_Aggregate and N_Extension_Aggregate. Indicates that one
     --    of the expressions contains an access attribute reference to the
     --    enclosing type. Such a self-reference can only appear in default-
     --    initialized aggregate for a record type.
  
!    --  Has_SP_Choice
     --    Present in all nodes containing a Discrete_Choices field (N_Variant,
     --    N_Case_Expression_Alternative, N_Case_Statement_Alternative). Set to
     --    True if the Discrete_Choices list has at least one occurrence of a
     --    statically predicated subtype.
  
!    --  Has_Storage_Size_Pragma
     --    A flag present in an N_Task_Definition node to flag the presence of a
     --    Storage_Size pragma.
  
!    --  Has_Target_Names
     --    Present in assignment statements. Indicates that the RHS contains
     --    target names (see AI12-0125-3) and must be expanded accordingly.
  
!    --  Has_Wide_Character
     --    Present in string literals, set if any wide character (i.e. character
     --    code outside the Character range but within Wide_Character range)
     --    appears in the string. Used to implement pragma preference rules.
  
!    --  Has_Wide_Wide_Character
     --    Present in string literals, set if any wide character (i.e. character
     --    code outside the Wide_Character range) appears in the string. Used to
     --    implement pragma preference rules.
  
!    --  Header_Size_Added
     --    Present in N_Attribute_Reference nodes, set only for attribute
     --    Max_Size_In_Storage_Elements. The flag indicates that the size of the
     --    hidden list header used by the runtime finalization support has been
     --    added to the size of the prefix. The flag also prevents the infinite
     --    expansion of the same attribute in the said context.
  
!    --  Hidden_By_Use_Clause
     --    An entity list present in use clauses that appear within
     --    instantiations. For the resolution of local entities, entities
     --    introduced by these use clauses have priority over global ones,
     --    and outer entities must be explicitly hidden/restored on exit.
  
!    --  Implicit_With
     --    Present in N_With_Clause nodes. The flag indicates that the clause
     --    does not comes from source and introduces an implicit dependency on
     --    a particular unit. Such implicit with clauses are generated by:
*************** package Sinfo is
*** 1546,1557 ****
     --      * RTSfind - The compiler generates code which references entities
     --        from the runtime.
  
!    --  Import_Interface_Present (Flag16-Sem)
     --    This flag is set in an Interface or Import pragma if a matching
     --    pragma of the other kind is also present. This is used to avoid
     --    generating some unwanted error messages.
  
!    --  Includes_Infinities (Flag11-Sem)
     --    This flag is present in N_Range nodes. It is set for the range of
     --    unconstrained float types defined in Standard, which include not only
     --    the given range of values, but also legitimately can include infinite
--- 1521,1532 ----
     --      * RTSfind - The compiler generates code which references entities
     --        from the runtime.
  
!    --  Import_Interface_Present
     --    This flag is set in an Interface or Import pragma if a matching
     --    pragma of the other kind is also present. This is used to avoid
     --    generating some unwanted error messages.
  
!    --  Includes_Infinities
     --    This flag is present in N_Range nodes. It is set for the range of
     --    unconstrained float types defined in Standard, which include not only
     --    the given range of values, but also legitimately can include infinite
*************** package Sinfo is
*** 1559,1612 ****
     --    range is given by the programmer, even if that range is identical to
     --    the range for Float.
  
!    --  Incomplete_View (Node2-Sem)
     --    Present in full type declarations that are completions of incomplete
     --    type declarations. Denotes the corresponding incomplete type
     --    declaration. Used to simplify the retrieval of primitive operations
     --    that may be declared between the partial and the full view of an
     --    untagged type.
  
!    --  Inherited_Discriminant (Flag13-Sem)
     --    This flag is present in N_Component_Association nodes. It indicates
     --    that a given component association in an extension aggregate is the
     --    value obtained from a constraint on an ancestor. Used to prevent
     --    double expansion when the aggregate has expansion delayed.
  
!    --  Instance_Spec (Node5-Sem)
     --    This field is present in generic instantiation nodes, and also in
     --    formal package declaration nodes (formal package declarations are
     --    treated in a manner very similar to package instantiations). It points
     --    to the node for the spec of the instance, inserted as part of the
     --    semantic processing for instantiations in Sem_Ch12.
  
!    --  Is_Abort_Block (Flag4-Sem)
     --    Present in N_Block_Statement nodes. True if the block protects a list
     --    of statements with an Abort_Defer / Abort_Undefer_Direct pair.
  
!    --  Is_Accessibility_Actual (Flag13-Sem)
     --    Present in N_Parameter_Association nodes. True if the parameter is
     --    an extra actual that carries the accessibility level of the actual
     --    for an access parameter, in a function that dispatches on result and
     --    is called in a dispatching context. Used to prevent a formal/actual
     --    mismatch when the call is rewritten as a dispatching call.
  
!    --  Is_Analyzed_Pragma (Flag5-Sem)
     --    Present in N_Pragma nodes. Set for delayed pragmas that require a two
     --    step analysis. The initial step is peformed by routine Analyze_Pragma
     --    and verifies the overall legality of the pragma. The second step takes
     --    place in the various Analyze_xxx_In_Decl_Part routines which perform
     --    full analysis. The flag prevents the reanalysis of a delayed pragma.
  
!    --  Is_Asynchronous_Call_Block (Flag7-Sem)
     --    A flag set in a Block_Statement node to indicate that it is the
     --    expansion of an asynchronous entry call. Such a block needs cleanup
     --    handler to assure that the call is cancelled.
  
!    --  Is_Boolean_Aspect (Flag16-Sem)
     --    Present in N_Aspect_Specification node. Set if the aspect is for a
     --    boolean aspect (i.e. Aspect_Id is in Boolean_Aspect subtype).
  
!    --  Is_Checked (Flag11-Sem)
     --    Present in N_Aspect_Specification and N_Pragma nodes. Set for an
     --    assertion aspect or pragma, or check pragma for an assertion, that
     --    is to be checked at run time. If either Is_Checked or Is_Ignored
--- 1534,1587 ----
     --    range is given by the programmer, even if that range is identical to
     --    the range for Float.
  
!    --  Incomplete_View
     --    Present in full type declarations that are completions of incomplete
     --    type declarations. Denotes the corresponding incomplete type
     --    declaration. Used to simplify the retrieval of primitive operations
     --    that may be declared between the partial and the full view of an
     --    untagged type.
  
!    --  Inherited_Discriminant
     --    This flag is present in N_Component_Association nodes. It indicates
     --    that a given component association in an extension aggregate is the
     --    value obtained from a constraint on an ancestor. Used to prevent
     --    double expansion when the aggregate has expansion delayed.
  
!    --  Instance_Spec
     --    This field is present in generic instantiation nodes, and also in
     --    formal package declaration nodes (formal package declarations are
     --    treated in a manner very similar to package instantiations). It points
     --    to the node for the spec of the instance, inserted as part of the
     --    semantic processing for instantiations in Sem_Ch12.
  
!    --  Is_Abort_Block
     --    Present in N_Block_Statement nodes. True if the block protects a list
     --    of statements with an Abort_Defer / Abort_Undefer_Direct pair.
  
!    --  Is_Accessibility_Actual
     --    Present in N_Parameter_Association nodes. True if the parameter is
     --    an extra actual that carries the accessibility level of the actual
     --    for an access parameter, in a function that dispatches on result and
     --    is called in a dispatching context. Used to prevent a formal/actual
     --    mismatch when the call is rewritten as a dispatching call.
  
!    --  Is_Analyzed_Pragma
     --    Present in N_Pragma nodes. Set for delayed pragmas that require a two
     --    step analysis. The initial step is peformed by routine Analyze_Pragma
     --    and verifies the overall legality of the pragma. The second step takes
     --    place in the various Analyze_xxx_In_Decl_Part routines which perform
     --    full analysis. The flag prevents the reanalysis of a delayed pragma.
  
!    --  Is_Asynchronous_Call_Block
     --    A flag set in a Block_Statement node to indicate that it is the
     --    expansion of an asynchronous entry call. Such a block needs cleanup
     --    handler to assure that the call is cancelled.
  
!    --  Is_Boolean_Aspect
     --    Present in N_Aspect_Specification node. Set if the aspect is for a
     --    boolean aspect (i.e. Aspect_Id is in Boolean_Aspect subtype).
  
!    --  Is_Checked
     --    Present in N_Aspect_Specification and N_Pragma nodes. Set for an
     --    assertion aspect or pragma, or check pragma for an assertion, that
     --    is to be checked at run time. If either Is_Checked or Is_Ignored
*************** package Sinfo is
*** 1615,1649 ****
     --    be further modified (in some cases these flags are copied when a
     --    pragma is rewritten).
  
!    --  Is_Checked_Ghost_Pragma (Flag3-Sem)
     --    This flag is present in N_Pragma nodes. It is set when the pragma is
     --    related to a checked Ghost entity or encloses a checked Ghost entity.
     --    This flag has no relation to Is_Checked.
  
!    --  Is_Component_Left_Opnd  (Flag13-Sem)
!    --  Is_Component_Right_Opnd (Flag14-Sem)
     --    Present in concatenation nodes, to indicate that the corresponding
     --    operand is of the component type of the result. Used in resolving
     --    concatenation nodes in instances.
  
!    --  Is_Controlling_Actual (Flag16-Sem)
     --    This flag is set on an expression that is a controlling argument in
     --    a dispatching call. It is off in all other cases. See Sem_Disp for
     --    details of its use.
  
!    --  Is_Declaration_Level_Node (Flag5-Sem)
     --    Present in call marker and instantiation nodes. Set when the constuct
     --    appears within the declarations of a block statement, an entry body,
     --    a subprogram body, or a task body. The flag aids the ABE Processing
     --    phase to catch certain forms of guaranteed ABEs.
  
!    --  Is_Delayed_Aspect (Flag14-Sem)
     --    Present in N_Pragma and N_Attribute_Definition_Clause nodes which
     --    come from aspect specifications, where the evaluation of the aspect
     --    must be delayed to the freeze point. This flag is also set True in
     --    the corresponding N_Aspect_Specification node.
  
!    --  Is_Disabled (Flag15-Sem)
     --    A flag set in an N_Aspect_Specification or N_Pragma node if there was
     --    a Check_Policy or Assertion_Policy (or in the case of a Debug_Pragma)
     --    a Debug_Policy pragma that resulted in totally disabling the flagged
--- 1590,1624 ----
     --    be further modified (in some cases these flags are copied when a
     --    pragma is rewritten).
  
!    --  Is_Checked_Ghost_Pragma
     --    This flag is present in N_Pragma nodes. It is set when the pragma is
     --    related to a checked Ghost entity or encloses a checked Ghost entity.
     --    This flag has no relation to Is_Checked.
  
!    --  Is_Component_Left_Opnd
!    --  Is_Component_Right_Opnd
     --    Present in concatenation nodes, to indicate that the corresponding
     --    operand is of the component type of the result. Used in resolving
     --    concatenation nodes in instances.
  
!    --  Is_Controlling_Actual
     --    This flag is set on an expression that is a controlling argument in
     --    a dispatching call. It is off in all other cases. See Sem_Disp for
     --    details of its use.
  
!    --  Is_Declaration_Level_Node
     --    Present in call marker and instantiation nodes. Set when the constuct
     --    appears within the declarations of a block statement, an entry body,
     --    a subprogram body, or a task body. The flag aids the ABE Processing
     --    phase to catch certain forms of guaranteed ABEs.
  
!    --  Is_Delayed_Aspect
     --    Present in N_Pragma and N_Attribute_Definition_Clause nodes which
     --    come from aspect specifications, where the evaluation of the aspect
     --    must be delayed to the freeze point. This flag is also set True in
     --    the corresponding N_Aspect_Specification node.
  
!    --  Is_Disabled
     --    A flag set in an N_Aspect_Specification or N_Pragma node if there was
     --    a Check_Policy or Assertion_Policy (or in the case of a Debug_Pragma)
     --    a Debug_Policy pragma that resulted in totally disabling the flagged
*************** package Sinfo is
*** 1651,1672 ****
     --    If this flag is set, the aspect or policy is not analyzed for semantic
     --    correctness, so any expressions etc will not be marked as analyzed.
  
!    --  Is_Dispatching_Call (Flag6-Sem)
     --    Present in call marker nodes. Set when the related call which prompted
     --    the creation of the marker is dispatching.
  
!    --  Is_Dynamic_Coextension (Flag18-Sem)
     --    Present in allocator nodes, to indicate that this is an allocator
     --    for an access discriminant of a dynamically allocated object. The
     --    coextension must be deallocated and finalized at the same time as
     --    the enclosing object. The partner flag Is_Static_Coextension must
     --    be cleared before setting this flag to True.
  
!    --  Is_Effective_Use_Clause (Flag1-Sem)
     --    Present in both N_Use_Type_Clause and N_Use_Package_Clause to indicate
     --    a use clause is "used" in the current source.
  
!    --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
     --    Present in the following nodes:
     --
     --      assignment statement
--- 1626,1647 ----
     --    If this flag is set, the aspect or policy is not analyzed for semantic
     --    correctness, so any expressions etc will not be marked as analyzed.
  
!    --  Is_Dispatching_Call
     --    Present in call marker nodes. Set when the related call which prompted
     --    the creation of the marker is dispatching.
  
!    --  Is_Dynamic_Coextension
     --    Present in allocator nodes, to indicate that this is an allocator
     --    for an access discriminant of a dynamically allocated object. The
     --    coextension must be deallocated and finalized at the same time as
     --    the enclosing object. The partner flag Is_Static_Coextension must
     --    be cleared before setting this flag to True.
  
!    --  Is_Effective_Use_Clause
     --    Present in both N_Use_Type_Clause and N_Use_Package_Clause to indicate
     --    a use clause is "used" in the current source.
  
!    --  Is_Elaboration_Checks_OK_Node
     --    Present in the following nodes:
     --
     --      assignment statement
*************** package Sinfo is
*** 1687,1698 ****
     --    of run-time ABE checks. This flag detemines whether the ABE Processing
     --    phase generates conditional ABE checks and guaranteed ABE failures.
  
!    --  Is_Elaboration_Code (Flag9-Sem)
     --    Present in assignment statements. Set for an assignment which updates
     --    the elaboration flag of a package or subprogram when the corresponding
     --    body is successfully elaborated.
  
!    --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
     --    Present in the following nodes:
     --
     --      attribute reference
--- 1662,1673 ----
     --    of run-time ABE checks. This flag detemines whether the ABE Processing
     --    phase generates conditional ABE checks and guaranteed ABE failures.
  
!    --  Is_Elaboration_Code
     --    Present in assignment statements. Set for an assignment which updates
     --    the elaboration flag of a package or subprogram when the corresponding
     --    body is successfully elaborated.
  
!    --  Is_Elaboration_Warnings_OK_Node
     --    Present in the following nodes:
     --
     --      attribute reference
*************** package Sinfo is
*** 1712,1738 ****
     --    are enabled. This flag determines whether the ABE processing phase
     --    generates diagnostics on various elaboration issues.
  
!    --  Is_Entry_Barrier_Function (Flag8-Sem)
     --    This flag is set on N_Subprogram_Declaration and N_Subprogram_Body
     --    nodes which emulate the barrier function of a protected entry body.
     --    The flag is used when checking for incorrect use of Current_Task.
  
!    --  Is_Expanded_Build_In_Place_Call (Flag11-Sem)
     --    This flag is set in an N_Function_Call node to indicate that the extra
     --    actuals to support a build-in-place style of call have been added to
     --    the call.
  
!    --  Is_Expanded_Contract (Flag1-Sem)
     --    Present in N_Contract nodes. Set if the contract has already undergone
     --    expansion activities.
  
!    --  Is_Finalization_Wrapper (Flag9-Sem)
     --    This flag is present in N_Block_Statement nodes. It is set when the
     --    block acts as a wrapper of a handled construct which has controlled
     --    objects. The wrapper prevents interference between exception handlers
     --    and At_End handlers.
  
!    --  Is_Generic_Contract_Pragma (Flag2-Sem)
     --    This flag is present in N_Pragma nodes. It is set when the pragma is
     --    a source construct, applies to a generic unit or its body, and denotes
     --    one of the following contract-related annotations:
--- 1687,1713 ----
     --    are enabled. This flag determines whether the ABE processing phase
     --    generates diagnostics on various elaboration issues.
  
!    --  Is_Entry_Barrier_Function
     --    This flag is set on N_Subprogram_Declaration and N_Subprogram_Body
     --    nodes which emulate the barrier function of a protected entry body.
     --    The flag is used when checking for incorrect use of Current_Task.
  
!    --  Is_Expanded_Build_In_Place_Call
     --    This flag is set in an N_Function_Call node to indicate that the extra
     --    actuals to support a build-in-place style of call have been added to
     --    the call.
  
!    --  Is_Expanded_Contract
     --    Present in N_Contract nodes. Set if the contract has already undergone
     --    expansion activities.
  
!    --  Is_Finalization_Wrapper
     --    This flag is present in N_Block_Statement nodes. It is set when the
     --    block acts as a wrapper of a handled construct which has controlled
     --    objects. The wrapper prevents interference between exception handlers
     --    and At_End handlers.
  
!    --  Is_Generic_Contract_Pragma
     --    This flag is present in N_Pragma nodes. It is set when the pragma is
     --    a source construct, applies to a generic unit or its body, and denotes
     --    one of the following contract-related annotations:
*************** package Sinfo is
*** 1755,1766 ****
     --      Refined_State
     --      Test_Case
  
!    --  Is_Homogeneous_Aggregate (Flag14)
!    --    A flag set on an Ada 2020 aggregate that uses square brackets as
     --    delimiters, and thus denotes an array or container aggregate, or
     --    the prefix of a reduction attribute.
  
!    --  Is_Ignored (Flag9-Sem)
     --    A flag set in an N_Aspect_Specification or N_Pragma node if there was
     --    a Check_Policy or Assertion_Policy (or in the case of a Debug_Pragma)
     --    a Debug_Policy pragma that specified a policy of IGNORE, DISABLE, or
--- 1730,1741 ----
     --      Refined_State
     --      Test_Case
  
!    --  Is_Homogeneous_Aggregate
!    --    A flag set on an Ada 2022 aggregate that uses square brackets as
     --    delimiters, and thus denotes an array or container aggregate, or
     --    the prefix of a reduction attribute.
  
!    --  Is_Ignored
     --    A flag set in an N_Aspect_Specification or N_Pragma node if there was
     --    a Check_Policy or Assertion_Policy (or in the case of a Debug_Pragma)
     --    a Debug_Policy pragma that specified a policy of IGNORE, DISABLE, or
*************** package Sinfo is
*** 1774,1802 ****
     --    aspect/pragma is fully analyzed and checked for other syntactic
     --    and semantic errors, but it does not have any semantic effect.
  
!    --  Is_Ignored_Ghost_Pragma (Flag8-Sem)
     --    This flag is present in N_Pragma nodes. It is set when the pragma is
     --    related to an ignored Ghost entity or encloses ignored Ghost entity.
     --    This flag has no relation to Is_Ignored.
  
!    --  Is_In_Discriminant_Check (Flag11-Sem)
     --    This flag is present in a selected component, and is used to indicate
     --    that the reference occurs within a discriminant check. The
     --    significance is that optimizations based on assuming that the
     --    discriminant check has a correct value cannot be performed in this
     --    case (or the discriminant check may be optimized away).
  
!    --  Is_Inherited_Pragma (Flag4-Sem)
     --    This flag is set in an N_Pragma node that appears in a N_Contract node
     --    to indicate that the pragma has been inherited from a parent context.
  
!    --  Is_Initialization_Block (Flag1-Sem)
     --    Defined in block nodes. Set when the block statement was created by
     --    the finalization machinery to wrap initialization statements. This
     --    flag aids the ABE Processing phase to suppress the diagnostics of
     --    finalization actions in initialization contexts.
  
!    --  Is_Known_Guaranteed_ABE (Flag18-Sem)
     --    NOTE: this flag is shared between the legacy ABE mechanism and the
     --    default ABE mechanism.
     --
--- 1749,1777 ----
     --    aspect/pragma is fully analyzed and checked for other syntactic
     --    and semantic errors, but it does not have any semantic effect.
  
!    --  Is_Ignored_Ghost_Pragma
     --    This flag is present in N_Pragma nodes. It is set when the pragma is
     --    related to an ignored Ghost entity or encloses ignored Ghost entity.
     --    This flag has no relation to Is_Ignored.
  
!    --  Is_In_Discriminant_Check
     --    This flag is present in a selected component, and is used to indicate
     --    that the reference occurs within a discriminant check. The
     --    significance is that optimizations based on assuming that the
     --    discriminant check has a correct value cannot be performed in this
     --    case (or the discriminant check may be optimized away).
  
!    --  Is_Inherited_Pragma
     --    This flag is set in an N_Pragma node that appears in a N_Contract node
     --    to indicate that the pragma has been inherited from a parent context.
  
!    --  Is_Initialization_Block
     --    Defined in block nodes. Set when the block statement was created by
     --    the finalization machinery to wrap initialization statements. This
     --    flag aids the ABE Processing phase to suppress the diagnostics of
     --    finalization actions in initialization contexts.
  
!    --  Is_Known_Guaranteed_ABE
     --    NOTE: this flag is shared between the legacy ABE mechanism and the
     --    default ABE mechanism.
     --
*************** package Sinfo is
*** 1816,1837 ****
     --    instantiation, as well as to prevent the reexamination of the node by
     --    the ABE Processing phase.
  
!    --  Is_Machine_Number (Flag11-Sem)
     --    This flag is set in an N_Real_Literal node to indicate that the value
     --    is a machine number. This avoids some unnecessary cases of converting
     --    real literals to machine numbers.
  
!    --  Is_Null_Loop (Flag16-Sem)
     --    This flag is set in an N_Loop_Statement node if the corresponding loop
     --    can be determined to be null at compile time. This is used to remove
     --    the loop entirely at expansion time.
  
!    --  Is_Overloaded (Flag5-Sem)
     --    A flag present in all expression nodes. Used temporarily during
     --    overloading determination. The setting of this flag is not relevant
     --    once overloading analysis is complete.
  
!    --  Is_Power_Of_2_For_Shift (Flag13-Sem)
     --    A flag present only in N_Op_Expon nodes. It is set when the
     --    exponentiation is of the form 2 ** N, where the type of N is an
     --    unsigned integral subtype whose size does not exceed the size of
--- 1791,1812 ----
     --    instantiation, as well as to prevent the reexamination of the node by
     --    the ABE Processing phase.
  
!    --  Is_Machine_Number
     --    This flag is set in an N_Real_Literal node to indicate that the value
     --    is a machine number. This avoids some unnecessary cases of converting
     --    real literals to machine numbers.
  
!    --  Is_Null_Loop
     --    This flag is set in an N_Loop_Statement node if the corresponding loop
     --    can be determined to be null at compile time. This is used to remove
     --    the loop entirely at expansion time.
  
!    --  Is_Overloaded
     --    A flag present in all expression nodes. Used temporarily during
     --    overloading determination. The setting of this flag is not relevant
     --    once overloading analysis is complete.
  
!    --  Is_Power_Of_2_For_Shift
     --    A flag present only in N_Op_Expon nodes. It is set when the
     --    exponentiation is of the form 2 ** N, where the type of N is an
     --    unsigned integral subtype whose size does not exceed the size of
*************** package Sinfo is
*** 1843,1879 ****
     --    conditions holds, and the flag is set, then the division or
     --    multiplication can be (and is) converted to a shift.
  
!    --  Is_Preelaborable_Call (Flag7-Sem)
     --    Present in call marker nodes. Set when the related call is non-static
     --    but preelaborable.
  
!    --  Is_Prefixed_Call (Flag17-Sem)
     --    This flag is set in a selected component within a generic unit, if
     --    it resolves to a prefixed call to a primitive operation. The flag
     --    is used to prevent accidental overloadings in an instance, when a
     --    primitive operation and a private record component may be homographs.
  
!    --  Is_Protected_Subprogram_Body (Flag7-Sem)
     --    A flag set in a Subprogram_Body block to indicate that it is the
     --    implementation of a protected subprogram. Such a body needs cleanup
     --    handler to make sure that the associated protected object is unlocked
     --    when the subprogram completes.
  
!    --  Is_Qualified_Universal_Literal (Flag4-Sem)
     --    Present in N_Qualified_Expression nodes. Set when the qualification is
     --    converting a universal literal to a specific type. Such qualifiers aid
     --    the resolution of accidental overloading of binary or unary operators
     --    which may occur in instances.
  
!    --  Is_Read (Flag4-Sem)
     --    Present in variable reference markers. Set when the original variable
!    --    reference constitues a read of the variable.
  
!    --  Is_Source_Call (Flag4-Sem)
     --    Present in call marker nodes. Set when the related call came from
     --    source.
  
!    --  Is_SPARK_Mode_On_Node (Flag2-Sem)
     --    Present in the following nodes:
     --
     --      assignment statement
--- 1818,1854 ----
     --    conditions holds, and the flag is set, then the division or
     --    multiplication can be (and is) converted to a shift.
  
!    --  Is_Preelaborable_Call
     --    Present in call marker nodes. Set when the related call is non-static
     --    but preelaborable.
  
!    --  Is_Prefixed_Call
     --    This flag is set in a selected component within a generic unit, if
     --    it resolves to a prefixed call to a primitive operation. The flag
     --    is used to prevent accidental overloadings in an instance, when a
     --    primitive operation and a private record component may be homographs.
  
!    --  Is_Protected_Subprogram_Body
     --    A flag set in a Subprogram_Body block to indicate that it is the
     --    implementation of a protected subprogram. Such a body needs cleanup
     --    handler to make sure that the associated protected object is unlocked
     --    when the subprogram completes.
  
!    --  Is_Qualified_Universal_Literal
     --    Present in N_Qualified_Expression nodes. Set when the qualification is
     --    converting a universal literal to a specific type. Such qualifiers aid
     --    the resolution of accidental overloading of binary or unary operators
     --    which may occur in instances.
  
!    --  Is_Read
     --    Present in variable reference markers. Set when the original variable
!    --    reference constitutes a read of the variable.
  
!    --  Is_Source_Call
     --    Present in call marker nodes. Set when the related call came from
     --    source.
  
!    --  Is_SPARK_Mode_On_Node
     --    Present in the following nodes:
     --
     --      assignment statement
*************** package Sinfo is
*** 1894,1952 ****
     --    This flag determines when the SPARK model of elaboration be activated
     --    by the ABE Processing phase.
  
!    --  Is_Static_Coextension (Flag14-Sem)
     --    Present in N_Allocator nodes. Set if the allocator is a coextension
     --    of an object allocated on the stack rather than the heap. The partner
     --    flag Is_Dynamic_Coextension must be cleared before setting this flag
     --    to True.
  
!    --  Is_Static_Expression (Flag6-Sem)
     --    Indicates that an expression is a static expression according to the
     --    rules in RM-4.9. See Sem_Eval for details.
  
!    --  Is_Subprogram_Descriptor (Flag16-Sem)
     --    Present in N_Object_Declaration, and set only for the object
     --    declaration generated for a subprogram descriptor in fast exception
     --    mode. See Exp_Ch11 for details of use.
  
!    --  Is_Task_Allocation_Block (Flag6-Sem)
     --    A flag set in a Block_Statement node to indicate that it is the
     --    expansion of a task allocator, or the allocator of an object
     --    containing tasks. Such a block requires a cleanup handler to call
     --    Expunge_Unactivated_Tasks to complete any tasks that have been
     --    allocated but not activated when the allocator completes abnormally.
  
!    --  Is_Task_Body_Procedure (Flag1-Sem)
     --    This flag is set on N_Subprogram_Declaration and N_Subprogram_Body
     --    nodes which emulate the body of a task unit.
  
!    --  Is_Task_Master (Flag5-Sem)
     --    A flag set in a Subprogram_Body, Block_Statement, or Task_Body node to
     --    indicate that the construct is a task master (i.e. has declared tasks
     --    or declares an access to a task type).
  
!    --  Is_Write (Flag5-Sem)
     --    Present in variable reference markers. Set when the original variable
!    --    reference constitues a write of the variable.
  
!    --  Itype (Node1-Sem)
     --    Used in N_Itype_Reference node to reference an itype for which it is
     --    important to ensure that it is defined. See description of this node
     --    for further details.
  
!    --  Kill_Range_Check (Flag11-Sem)
     --    Used in an N_Unchecked_Type_Conversion node to indicate that the
     --    result should not be subjected to range checks. This is used for the
     --    implementation of Normalize_Scalars.
  
!    --  Label_Construct (Node2-Sem)
     --    Used in an N_Implicit_Label_Declaration node. Refers to an N_Label,
     --    N_Block_Statement or N_Loop_Statement node to which the label
     --    declaration applies. The field is left empty for the special labels
     --    generated as part of expanding raise statements with a local exception
     --    handler.
  
!    --  Library_Unit (Node4-Sem)
     --    In a stub node, Library_Unit points to the compilation unit node of
     --    the corresponding subunit.
     --
--- 1869,1927 ----
     --    This flag determines when the SPARK model of elaboration be activated
     --    by the ABE Processing phase.
  
!    --  Is_Static_Coextension
     --    Present in N_Allocator nodes. Set if the allocator is a coextension
     --    of an object allocated on the stack rather than the heap. The partner
     --    flag Is_Dynamic_Coextension must be cleared before setting this flag
     --    to True.
  
!    --  Is_Static_Expression
     --    Indicates that an expression is a static expression according to the
     --    rules in RM-4.9. See Sem_Eval for details.
  
!    --  Is_Subprogram_Descriptor
     --    Present in N_Object_Declaration, and set only for the object
     --    declaration generated for a subprogram descriptor in fast exception
     --    mode. See Exp_Ch11 for details of use.
  
!    --  Is_Task_Allocation_Block
     --    A flag set in a Block_Statement node to indicate that it is the
     --    expansion of a task allocator, or the allocator of an object
     --    containing tasks. Such a block requires a cleanup handler to call
     --    Expunge_Unactivated_Tasks to complete any tasks that have been
     --    allocated but not activated when the allocator completes abnormally.
  
!    --  Is_Task_Body_Procedure
     --    This flag is set on N_Subprogram_Declaration and N_Subprogram_Body
     --    nodes which emulate the body of a task unit.
  
!    --  Is_Task_Master
     --    A flag set in a Subprogram_Body, Block_Statement, or Task_Body node to
     --    indicate that the construct is a task master (i.e. has declared tasks
     --    or declares an access to a task type).
  
!    --  Is_Write
     --    Present in variable reference markers. Set when the original variable
!    --    reference constitutes a write of the variable.
  
!    --  Itype
     --    Used in N_Itype_Reference node to reference an itype for which it is
     --    important to ensure that it is defined. See description of this node
     --    for further details.
  
!    --  Kill_Range_Check
     --    Used in an N_Unchecked_Type_Conversion node to indicate that the
     --    result should not be subjected to range checks. This is used for the
     --    implementation of Normalize_Scalars.
  
!    --  Label_Construct
     --    Used in an N_Implicit_Label_Declaration node. Refers to an N_Label,
     --    N_Block_Statement or N_Loop_Statement node to which the label
     --    declaration applies. The field is left empty for the special labels
     --    generated as part of expanding raise statements with a local exception
     --    handler.
  
!    --  Library_Unit
     --    In a stub node, Library_Unit points to the compilation unit node of
     --    the corresponding subunit.
     --
*************** package Sinfo is
*** 1976,1982 ****
     --    described above). Instead for a child unit, implicit with's are
     --    generated for all parents.
  
!    --  Local_Raise_Statements (Elist1)
     --    This field is present in exception handler nodes. It is set to
     --    No_Elist in the normal case. If there is at least one raise statement
     --    which can potentially be handled as a local raise, then this field
--- 1951,1957 ----
     --    described above). Instead for a child unit, implicit with's are
     --    generated for all parents.
  
!    --  Local_Raise_Statements
     --    This field is present in exception handler nodes. It is set to
     --    No_Elist in the normal case. If there is at least one raise statement
     --    which can potentially be handled as a local raise, then this field
*************** package Sinfo is
*** 1987,1998 ****
     --    N_Raise_xxx_Error nodes since the transformation of these nodes is
     --    handled by the back end (using the N_Push/N_Pop mechanism).
  
!    --  Loop_Actions (List5-Sem)
     --    A list present in Component_Association nodes in array aggregates.
     --    Used to collect actions that must be executed within the loop because
     --    they may need to be evaluated anew each time through.
  
!    --  Limited_View_Installed (Flag18-Sem)
     --    Present in With_Clauses and in package specifications. If set on
     --    with_clause, it indicates that this clause has created the current
     --    limited view of the designated package. On a package specification, it
--- 1962,1973 ----
     --    N_Raise_xxx_Error nodes since the transformation of these nodes is
     --    handled by the back end (using the N_Push/N_Pop mechanism).
  
!    --  Loop_Actions
     --    A list present in Component_Association nodes in array aggregates.
     --    Used to collect actions that must be executed within the loop because
     --    they may need to be evaluated anew each time through.
  
!    --  Limited_View_Installed
     --    Present in With_Clauses and in package specifications. If set on
     --    with_clause, it indicates that this clause has created the current
     --    limited view of the designated package. On a package specification, it
*************** package Sinfo is
*** 2000,2012 ****
     --    package is mentioned in a limited_with_clause in the closure of the
     --    unit being compiled.
  
!    --  Local_Raise_Not_OK (Flag7-Sem)
     --    Present in N_Exception_Handler nodes. Set if the handler contains
     --    a construct (reraise statement, or call to subprogram in package
     --    GNAT.Current_Exception) that makes the handler unsuitable as a target
     --    for a local raise (one that could otherwise be converted to a goto).
  
!    --  Must_Be_Byte_Aligned (Flag14-Sem)
     --    This flag is present in N_Attribute_Reference nodes. It can be set
     --    only for the Address and Unrestricted_Access attributes. If set it
     --    means that the object for which the address/access is given must be on
--- 1975,1987 ----
     --    package is mentioned in a limited_with_clause in the closure of the
     --    unit being compiled.
  
!    --  Local_Raise_Not_OK
     --    Present in N_Exception_Handler nodes. Set if the handler contains
     --    a construct (reraise statement, or call to subprogram in package
     --    GNAT.Current_Exception) that makes the handler unsuitable as a target
     --    for a local raise (one that could otherwise be converted to a goto).
  
!    --  Must_Be_Byte_Aligned
     --    This flag is present in N_Attribute_Reference nodes. It can be set
     --    only for the Address and Unrestricted_Access attributes. If set it
     --    means that the object for which the address/access is given must be on
*************** package Sinfo is
*** 2019,2025 ****
     --    has more information about type layout and may be able to (but is not
     --    guaranteed to) prevent making unnecessary copies.
  
!    --  Must_Not_Freeze (Flag8-Sem)
     --    A flag present in all expression nodes. Normally expressions cause
     --    freezing as described in the RM. If this flag is set, then this is
     --    inhibited. This is used by the analyzer and expander to label nodes
--- 1994,2000 ----
     --    has more information about type layout and may be able to (but is not
     --    guaranteed to) prevent making unnecessary copies.
  
!    --  Must_Not_Freeze
     --    A flag present in all expression nodes. Normally expressions cause
     --    freezing as described in the RM. If this flag is set, then this is
     --    inhibited. This is used by the analyzer and expander to label nodes
*************** package Sinfo is
*** 2028,2046 ****
     --    present in an N_Subtype_Indication node, since we also use these in
     --    calls to Freeze_Expression.
  
!    --  Next_Entity (Node2-Sem)
     --    Present in defining identifiers, defining character literals, and
     --    defining operator symbols (i.e. in all entities). The entities of a
     --    scope are chained, and this field is used as the forward pointer for
     --    this list. See Einfo for further details.
  
!    --  Next_Exit_Statement (Node3-Sem)
     --    Present in N_Exit_Statement nodes. The exit statements for a loop are
     --    chained (in reverse order of appearance) from the First_Exit_Statement
     --    field of the E_Loop entity for the loop. Next_Exit_Statement points to
     --    the next entry on this chain (Empty = end of list).
  
!    --  Next_Implicit_With (Node3-Sem)
     --    Present in N_With_Clause. Part of a chain of with_clauses generated
     --    in rtsfind to indicate implicit dependencies on predefined units. Used
     --    to prevent multiple with_clauses for the same unit in a given context.
--- 2003,2021 ----
     --    present in an N_Subtype_Indication node, since we also use these in
     --    calls to Freeze_Expression.
  
!    --  Next_Entity
     --    Present in defining identifiers, defining character literals, and
     --    defining operator symbols (i.e. in all entities). The entities of a
     --    scope are chained, and this field is used as the forward pointer for
     --    this list. See Einfo for further details.
  
!    --  Next_Exit_Statement
     --    Present in N_Exit_Statement nodes. The exit statements for a loop are
     --    chained (in reverse order of appearance) from the First_Exit_Statement
     --    field of the E_Loop entity for the loop. Next_Exit_Statement points to
     --    the next entry on this chain (Empty = end of list).
  
!    --  Next_Implicit_With
     --    Present in N_With_Clause. Part of a chain of with_clauses generated
     --    in rtsfind to indicate implicit dependencies on predefined units. Used
     --    to prevent multiple with_clauses for the same unit in a given context.
*************** package Sinfo is
*** 2050,2056 ****
     --    that any subprogram call is examined after the subprogram declaration
     --    has been seen.
  
!    --  Next_Named_Actual (Node4-Sem)
     --    Present in parameter association nodes. Set during semantic analysis
     --    to point to the next named parameter, where parameters are ordered by
     --    declaration order (as opposed to the actual order in the call, which
--- 2025,2031 ----
     --    that any subprogram call is examined after the subprogram declaration
     --    has been seen.
  
!    --  Next_Named_Actual
     --    Present in parameter association nodes. Set during semantic analysis
     --    to point to the next named parameter, where parameters are ordered by
     --    declaration order (as opposed to the actual order in the call, which
*************** package Sinfo is
*** 2058,2064 ****
     --    points to the explicit actual parameter itself, not to the
     --    N_Parameter_Association node (its parent).
  
!    --  Next_Pragma (Node1-Sem)
     --    Present in N_Pragma nodes. Used to create a linked list of pragma
     --    nodes. Currently used for two purposes:
     --
--- 2033,2039 ----
     --    points to the explicit actual parameter itself, not to the
     --    N_Parameter_Association node (its parent).
  
!    --  Next_Pragma
     --    Present in N_Pragma nodes. Used to create a linked list of pragma
     --    nodes. Currently used for two purposes:
     --
*************** package Sinfo is
*** 2073,2085 ****
     --      the apply to the same construct. These are visible/private mode for
     --      a package spec and declarative/statement mode for package body.
  
!    --  Next_Rep_Item (Node5-Sem)
     --    Present in pragma nodes, attribute definition nodes, enumeration rep
     --    clauses, record rep clauses, aspect specification and null statement
     --    nodes. Used to link representation items that apply to an entity. See
     --    full description of First_Rep_Item field in Einfo for further details.
  
!    --  Next_Use_Clause (Node3-Sem)
     --    While use clauses are active during semantic processing, they are
     --    chained from the scope stack entry, using Next_Use_Clause as a link
     --    pointer, with Empty marking the end of the list. The head pointer is
--- 2048,2060 ----
     --      the apply to the same construct. These are visible/private mode for
     --      a package spec and declarative/statement mode for package body.
  
!    --  Next_Rep_Item
     --    Present in pragma nodes, attribute definition nodes, enumeration rep
     --    clauses, record rep clauses, aspect specification and null statement
     --    nodes. Used to link representation items that apply to an entity. See
     --    full description of First_Rep_Item field in Einfo for further details.
  
!    --  Next_Use_Clause
     --    While use clauses are active during semantic processing, they are
     --    chained from the scope stack entry, using Next_Use_Clause as a link
     --    pointer, with Empty marking the end of the list. The head pointer is
*************** package Sinfo is
*** 2087,2093 ****
     --    processing (i.e. when Gigi sees the tree, the contents of this field
     --    is undefined and should not be read).
  
!    --  No_Ctrl_Actions (Flag7-Sem)
     --    Present in N_Assignment_Statement to indicate that no Finalize nor
     --    Adjust should take place on this assignment even though the RHS is
     --    controlled. Also indicates that the primitive _assign should not be
--- 2062,2068 ----
     --    processing (i.e. when Gigi sees the tree, the contents of this field
     --    is undefined and should not be read).
  
!    --  No_Ctrl_Actions
     --    Present in N_Assignment_Statement to indicate that no Finalize nor
     --    Adjust should take place on this assignment even though the RHS is
     --    controlled. Also indicates that the primitive _assign should not be
*************** package Sinfo is
*** 2095,2101 ****
     --    expansions where the generated assignments are initializations, not
     --    real assignments.
  
!    --  No_Elaboration_Check (Flag4-Sem)
     --    NOTE: this flag is relevant only for the legacy ABE mechanism and
     --    should not be used outside of that context.
     --
--- 2070,2076 ----
     --    expansions where the generated assignments are initializations, not
     --    real assignments.
  
!    --  No_Elaboration_Check
     --    NOTE: this flag is relevant only for the legacy ABE mechanism and
     --    should not be used outside of that context.
     --
*************** package Sinfo is
*** 2103,2111 ****
     --    that no elaboration check is needed on the call, because it appears in
     --    the context of a local Suppress pragma. This is used on calls within
     --    task bodies, where the actual elaboration checks are applied after
!    --    analysis, when the local scope stack is not present
  
!    --  No_Entities_Ref_In_Spec (Flag8-Sem)
     --    Present in N_With_Clause nodes. Set if the with clause is on the
     --    package or subprogram spec where the main unit is the corresponding
     --    body, and no entities of the with'ed unit are referenced by the spec
--- 2078,2086 ----
     --    that no elaboration check is needed on the call, because it appears in
     --    the context of a local Suppress pragma. This is used on calls within
     --    task bodies, where the actual elaboration checks are applied after
!    --    analysis, when the local scope stack is not present.
  
!    --  No_Entities_Ref_In_Spec
     --    Present in N_With_Clause nodes. Set if the with clause is on the
     --    package or subprogram spec where the main unit is the corresponding
     --    body, and no entities of the with'ed unit are referenced by the spec
*************** package Sinfo is
*** 2113,2119 ****
     --    to generate the proper message (see Sem_Util.Check_Unused_Withs for
     --    full details).
  
!    --  No_Initialization (Flag13-Sem)
     --    Present in N_Object_Declaration and N_Allocator to indicate that the
     --    object must not be initialized (by Initialize or call to an init
     --    proc). This is needed for controlled aggregates. When the Object
--- 2088,2094 ----
     --    to generate the proper message (see Sem_Util.Check_Unused_Withs for
     --    full details).
  
!    --  No_Initialization
     --    Present in N_Object_Declaration and N_Allocator to indicate that the
     --    object must not be initialized (by Initialize or call to an init
     --    proc). This is needed for controlled aggregates. When the Object
*************** package Sinfo is
*** 2122,2139 ****
     --    with aggregates, and for object with an address clause, which are
     --    initialized with an assignment at freeze time).
  
!    --  No_Minimize_Eliminate (Flag17-Sem)
     --    This flag is present in membership operator nodes (N_In/N_Not_In).
     --    It is used to indicate that processing for extended overflow checking
     --    modes is not required (this is used to prevent infinite recursion).
  
!    --  No_Side_Effect_Removal (Flag17-Sem)
     --    Present in N_Function_Call nodes. Set when a function call does not
     --    require side effect removal. This attribute suppresses the generation
     --    of a temporary to capture the result of the function which eventually
     --    replaces the function call.
  
!    --  No_Truncation (Flag17-Sem)
     --    Present in N_Unchecked_Type_Conversion node. This flag has an effect
     --    only if the RM_Size of the source is greater than the RM_Size of the
     --    target for scalar operands. Normally in such a case we truncate some
--- 2097,2114 ----
     --    with aggregates, and for object with an address clause, which are
     --    initialized with an assignment at freeze time).
  
!    --  No_Minimize_Eliminate
     --    This flag is present in membership operator nodes (N_In/N_Not_In).
     --    It is used to indicate that processing for extended overflow checking
     --    modes is not required (this is used to prevent infinite recursion).
  
!    --  No_Side_Effect_Removal
     --    Present in N_Function_Call nodes. Set when a function call does not
     --    require side effect removal. This attribute suppresses the generation
     --    of a temporary to capture the result of the function which eventually
     --    replaces the function call.
  
!    --  No_Truncation
     --    Present in N_Unchecked_Type_Conversion node. This flag has an effect
     --    only if the RM_Size of the source is greater than the RM_Size of the
     --    target for scalar operands. Normally in such a case we truncate some
*************** package Sinfo is
*** 2145,2163 ****
     --    is used for properly setting out of range values for use by pragmas
     --    Initialize_Scalars and Normalize_Scalars.
  
!    --  Null_Excluding_Subtype (Flag16)
     --    Present in N_Access_To_Object_Definition. Indicates that the subtype
     --    indication carries a null-exclusion indicator, which is distinct from
     --    the null-exclusion indicator that may precede the access keyword.
  
!    --  Original_Discriminant (Node2-Sem)
     --    Present in identifiers. Used in references to discriminants that
     --    appear in generic units. Because the names of the discriminants may be
     --    different in an instance, we use this field to recover the position of
     --    the discriminant in the original type, and replace it with the
     --    discriminant at the same position in the instantiated type.
  
!    --  Original_Entity (Node2-Sem)
     --    Present in numeric literals. Used to denote the named number that has
     --    been constant-folded into the given literal. If literal is from
     --    source, or the result of some other constant-folding operation, then
--- 2120,2138 ----
     --    is used for properly setting out of range values for use by pragmas
     --    Initialize_Scalars and Normalize_Scalars.
  
!    --  Null_Excluding_Subtype
     --    Present in N_Access_To_Object_Definition. Indicates that the subtype
     --    indication carries a null-exclusion indicator, which is distinct from
     --    the null-exclusion indicator that may precede the access keyword.
  
!    --  Original_Discriminant
     --    Present in identifiers. Used in references to discriminants that
     --    appear in generic units. Because the names of the discriminants may be
     --    different in an instance, we use this field to recover the position of
     --    the discriminant in the original type, and replace it with the
     --    discriminant at the same position in the instantiated type.
  
!    --  Original_Entity
     --    Present in numeric literals. Used to denote the named number that has
     --    been constant-folded into the given literal. If literal is from
     --    source, or the result of some other constant-folding operation, then
*************** package Sinfo is
*** 2166,2172 ****
     --    interferes with the Entity field, making it impossible to preserve the
     --    original entity at the point of instantiation.
  
!    --  Others_Discrete_Choices (List1-Sem)
     --    When a case statement or variant is analyzed, the semantic checks
     --    determine the actual list of choices that correspond to an others
     --    choice. This list is materialized for later use by the expander and
--- 2141,2147 ----
     --    interferes with the Entity field, making it impossible to preserve the
     --    original entity at the point of instantiation.
  
!    --  Others_Discrete_Choices
     --    When a case statement or variant is analyzed, the semantic checks
     --    determine the actual list of choices that correspond to an others
     --    choice. This list is materialized for later use by the expander and
*************** package Sinfo is
*** 2175,2222 ****
     --    list of discrete choices, except that of course it cannot contain an
     --    N_Others_Choice entry.
  
!    --  Parent_Spec (Node4-Sem)
     --    For a library unit that is a child unit spec (package or subprogram
     --    declaration, generic declaration or instantiation, or library level
     --    rename) this field points to the compilation unit node for the parent
     --    package specification. This field is Empty for library bodies (the
     --    parent spec in this case can be found from the corresponding spec).
  
!    --  Parent_With (Flag1-Sem)
     --    Present in N_With_Clause nodes. The flag indicates that the clause
     --    was generated for an ancestor unit to provide proper visibility. A
     --    with clause for child unit A.B.C produces two implicit parent with
     --    clauses for A and A.B.
  
!    --  Premature_Use (Node5-Sem)
     --    Present in N_Incomplete_Type_Declaration node. Used for improved
     --    error diagnostics: if there is a premature usage of an incomplete
     --    type, a subsequently generated error message indicates the position
     --    of its full declaration.
  
!    --  Present_Expr (Uint3-Sem)
     --    Present in an N_Variant node. This has a meaningful value only after
     --    Gigi has back annotated the tree with representation information. At
     --    this point, it contains a reference to a gcc expression that depends
!    --    on the values of one or more discriminants. Give a set of discriminant
!    --    values, this expression evaluates to False (zero) if variant is not
!    --    present, and True (non-zero) if it is present. See unit Repinfo for
!    --    further details on gigi back annotation. This field is used during
!    --    back-annotation processing (for -gnatR -gnatc) to determine if a field
!    --    is present or not.
  
!    --  Prev_Use_Clause (Node1-Sem)
     --    Present in both N_Use_Package_Clause and N_Use_Type_Clause. Used in
     --    detection of ineffective use clauses by allowing a chain of related
     --    clauses together to avoid traversing the current scope stack.
  
!    --  Print_In_Hex (Flag13-Sem)
     --    Set on an N_Integer_Literal node to indicate that the value should be
     --    printed in hexadecimal in the sprint listing. Has no effect on
     --    legality or semantics of program, only on the displayed output. This
     --    is used to clarify output from the packed array cases.
  
!    --  Procedure_To_Call (Node2-Sem)
     --    Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement,
     --    and N_Extended_Return_Statement nodes. References the entity for the
     --    declaration of the procedure to be called to accomplish the required
--- 2150,2197 ----
     --    list of discrete choices, except that of course it cannot contain an
     --    N_Others_Choice entry.
  
!    --  Parent_Spec
     --    For a library unit that is a child unit spec (package or subprogram
     --    declaration, generic declaration or instantiation, or library level
     --    rename) this field points to the compilation unit node for the parent
     --    package specification. This field is Empty for library bodies (the
     --    parent spec in this case can be found from the corresponding spec).
  
!    --  Parent_With
     --    Present in N_With_Clause nodes. The flag indicates that the clause
     --    was generated for an ancestor unit to provide proper visibility. A
     --    with clause for child unit A.B.C produces two implicit parent with
     --    clauses for A and A.B.
  
!    --  Premature_Use
     --    Present in N_Incomplete_Type_Declaration node. Used for improved
     --    error diagnostics: if there is a premature usage of an incomplete
     --    type, a subsequently generated error message indicates the position
     --    of its full declaration.
  
!    --  Present_Expr
     --    Present in an N_Variant node. This has a meaningful value only after
     --    Gigi has back annotated the tree with representation information. At
     --    this point, it contains a reference to a gcc expression that depends
!    --    on the values of one or more discriminants. Given a set of
!    --    discriminant values, this expression evaluates to False (zero) if
!    --    variant is not present, and True (non-zero) if it is present. See
!    --    unit Repinfo for further details on gigi back annotation. This field
!    --    is used during back-annotation processing (for -gnatR -gnatc) to
!    --    determine if a field is present or not.
  
!    --  Prev_Use_Clause
     --    Present in both N_Use_Package_Clause and N_Use_Type_Clause. Used in
     --    detection of ineffective use clauses by allowing a chain of related
     --    clauses together to avoid traversing the current scope stack.
  
!    --  Print_In_Hex
     --    Set on an N_Integer_Literal node to indicate that the value should be
     --    printed in hexadecimal in the sprint listing. Has no effect on
     --    legality or semantics of program, only on the displayed output. This
     --    is used to clarify output from the packed array cases.
  
!    --  Procedure_To_Call
     --    Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement,
     --    and N_Extended_Return_Statement nodes. References the entity for the
     --    declaration of the procedure to be called to accomplish the required
*************** package Sinfo is
*** 2225,2241 ****
     --    allocating the return value), and for the Deallocate procedure in the
     --    case of N_Free_Statement.
  
!    --  Raises_Constraint_Error (Flag7-Sem)
     --    Set on an expression whose evaluation will definitely fail constraint
     --    error check. See Sem_Eval for details.
  
!    --  Redundant_Use (Flag13-Sem)
     --    Present in nodes that can appear as an operand in a use clause or use
     --    type clause (identifiers, expanded names, attribute references). Set
     --    to indicate that a use is redundant (and therefore need not be undone
     --    on scope exit).
  
!    --  Renaming_Exception (Node2-Sem)
     --    Present in N_Exception_Declaration node. Used to point back to the
     --    exception renaming for an exception declared within a subprogram.
     --    What happens is that an exception declared in a subprogram is moved
--- 2200,2216 ----
     --    allocating the return value), and for the Deallocate procedure in the
     --    case of N_Free_Statement.
  
!    --  Raises_Constraint_Error
     --    Set on an expression whose evaluation will definitely fail constraint
     --    error check. See Sem_Eval for details.
  
!    --  Redundant_Use
     --    Present in nodes that can appear as an operand in a use clause or use
     --    type clause (identifiers, expanded names, attribute references). Set
     --    to indicate that a use is redundant (and therefore need not be undone
     --    on scope exit).
  
!    --  Renaming_Exception
     --    Present in N_Exception_Declaration node. Used to point back to the
     --    exception renaming for an exception declared within a subprogram.
     --    What happens is that an exception declared in a subprogram is moved
*************** package Sinfo is
*** 2243,2260 ****
     --    becomes a renaming. This link from the library level exception to the
     --    renaming declaration allows registering of the proper exception name.
  
!    --  Return_Statement_Entity (Node5-Sem)
     --    Present in N_Simple_Return_Statement and N_Extended_Return_Statement.
     --    Points to an E_Return_Statement representing the return statement.
  
!    --  Return_Object_Declarations (List3)
     --    Present in N_Extended_Return_Statement. Points to a list initially
     --    containing a single N_Object_Declaration representing the return
     --    object. We use a list (instead of just a pointer to the object decl)
     --    because Analyze wants to insert extra actions on this list, before the
     --    N_Object_Declaration, which always remains last on the list.
  
!    --  Rounded_Result (Flag18-Sem)
     --    Present in N_Type_Conversion, N_Op_Divide, and N_Op_Multiply nodes.
     --    Used in the fixed-point cases to indicate that the result must be
     --    rounded as a result of the use of the 'Round attribute. Also used for
--- 2218,2235 ----
     --    becomes a renaming. This link from the library level exception to the
     --    renaming declaration allows registering of the proper exception name.
  
!    --  Return_Statement_Entity
     --    Present in N_Simple_Return_Statement and N_Extended_Return_Statement.
     --    Points to an E_Return_Statement representing the return statement.
  
!    --  Return_Object_Declarations
     --    Present in N_Extended_Return_Statement. Points to a list initially
     --    containing a single N_Object_Declaration representing the return
     --    object. We use a list (instead of just a pointer to the object decl)
     --    because Analyze wants to insert extra actions on this list, before the
     --    N_Object_Declaration, which always remains last on the list.
  
!    --  Rounded_Result
     --    Present in N_Type_Conversion, N_Op_Divide, and N_Op_Multiply nodes.
     --    Used in the fixed-point cases to indicate that the result must be
     --    rounded as a result of the use of the 'Round attribute. Also used for
*************** package Sinfo is
*** 2264,2282 ****
     --    are the result of expansion of rounded fixed-point divide, conversion
     --    and multiplication operations.
  
!    --  Save_Invocation_Graph_Of_Body (Flag1-Sem)
     --    Present in compilation unit nodes. Set when the elaboration mechanism
     --    must record all invocation constructs and invocation relations within
     --    the body of the compilation unit.
     --
!    --  SCIL_Entity (Node4-Sem)
     --    Present in SCIL nodes. References the specific tagged type associated
     --    with the SCIL node (for an N_SCIL_Dispatching_Call node, this is
     --    the controlling type of the call; for an N_SCIL_Membership_Test node
     --    generated as part of testing membership in T'Class, this is T; for an
     --    N_SCIL_Dispatch_Table_Tag_Init node, this is the type being declared).
  
!    --  SCIL_Controlling_Tag (Node5-Sem)
     --    Present in N_SCIL_Dispatching_Call nodes. References the controlling
     --    tag of a dispatching call. This is usually an N_Selected_Component
     --    node (for a _tag component), but may be an N_Object_Declaration or
--- 2239,2257 ----
     --    are the result of expansion of rounded fixed-point divide, conversion
     --    and multiplication operations.
  
!    --  Save_Invocation_Graph_Of_Body
     --    Present in compilation unit nodes. Set when the elaboration mechanism
     --    must record all invocation constructs and invocation relations within
     --    the body of the compilation unit.
     --
!    --  SCIL_Entity
     --    Present in SCIL nodes. References the specific tagged type associated
     --    with the SCIL node (for an N_SCIL_Dispatching_Call node, this is
     --    the controlling type of the call; for an N_SCIL_Membership_Test node
     --    generated as part of testing membership in T'Class, this is T; for an
     --    N_SCIL_Dispatch_Table_Tag_Init node, this is the type being declared).
  
!    --  SCIL_Controlling_Tag
     --    Present in N_SCIL_Dispatching_Call nodes. References the controlling
     --    tag of a dispatching call. This is usually an N_Selected_Component
     --    node (for a _tag component), but may be an N_Object_Declaration or
*************** package Sinfo is
*** 2284,2316 ****
     --    a classwide streaming operation or a call to an instance of
     --    Ada.Tags.Generic_Dispatching_Constructor).
  
!    --  SCIL_Tag_Value (Node5-Sem)
     --    Present in N_SCIL_Membership_Test nodes. Used to reference the tag
     --    of the value that is being tested.
  
!    --  SCIL_Target_Prim (Node2-Sem)
     --    Present in N_SCIL_Dispatching_Call nodes. References the primitive
     --    operation named (statically) in a dispatching call.
  
!    --  Scope (Node3-Sem)
     --    Present in defining identifiers, defining character literals, and
     --    defining operator symbols (i.e. in all entities). The entities of a
     --    scope all use this field to reference the corresponding scope entity.
     --    See Einfo for further details.
  
!    --  Shift_Count_OK (Flag4-Sem)
     --    A flag present in shift nodes to indicate that the shift count is
     --    known to be in range, i.e. is in the range from zero to word length
     --    minus one. If this flag is not set, then the shift count may be
     --    outside this range, i.e. larger than the word length, and the code
     --    must ensure that such shift counts give the appropriate result.
  
!    --  Source_Type (Node1-Sem)
     --    Used in an N_Validate_Unchecked_Conversion node to point to the
     --    source type entity for the unchecked conversion instantiation
     --    which gigi must do size validation for.
  
!    --  Split_PPC (Flag17)
     --    When a Pre or Post aspect specification is processed, it is broken
     --    into AND THEN sections. The leftmost section has Split_PPC set to
     --    False, indicating that it is the original specification (e.g. for
--- 2259,2291 ----
     --    a classwide streaming operation or a call to an instance of
     --    Ada.Tags.Generic_Dispatching_Constructor).
  
!    --  SCIL_Tag_Value
     --    Present in N_SCIL_Membership_Test nodes. Used to reference the tag
     --    of the value that is being tested.
  
!    --  SCIL_Target_Prim
     --    Present in N_SCIL_Dispatching_Call nodes. References the primitive
     --    operation named (statically) in a dispatching call.
  
!    --  Scope
     --    Present in defining identifiers, defining character literals, and
     --    defining operator symbols (i.e. in all entities). The entities of a
     --    scope all use this field to reference the corresponding scope entity.
     --    See Einfo for further details.
  
!    --  Shift_Count_OK
     --    A flag present in shift nodes to indicate that the shift count is
     --    known to be in range, i.e. is in the range from zero to word length
     --    minus one. If this flag is not set, then the shift count may be
     --    outside this range, i.e. larger than the word length, and the code
     --    must ensure that such shift counts give the appropriate result.
  
!    --  Source_Type
     --    Used in an N_Validate_Unchecked_Conversion node to point to the
     --    source type entity for the unchecked conversion instantiation
     --    which gigi must do size validation for.
  
!    --  Split_PPC
     --    When a Pre or Post aspect specification is processed, it is broken
     --    into AND THEN sections. The leftmost section has Split_PPC set to
     --    False, indicating that it is the original specification (e.g. for
*************** package Sinfo is
*** 2318,2324 ****
     --    This flag is set in both the N_Aspect_Specification node itself,
     --    and in the pragma which is generated from this node.
  
!    --  Storage_Pool (Node1-Sem)
     --    Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement,
     --    and N_Extended_Return_Statement nodes. References the entity for the
     --    storage pool to be used for the allocate or free call or for the
--- 2293,2299 ----
     --    This flag is set in both the N_Aspect_Specification node itself,
     --    and in the pragma which is generated from this node.
  
!    --  Storage_Pool
     --    Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement,
     --    and N_Extended_Return_Statement nodes. References the entity for the
     --    storage pool to be used for the allocate or free call or for the
*************** package Sinfo is
*** 2328,2334 ****
     --    value of a type whose size is not known at compile time on the
     --    secondary stack.
  
!    --  Suppress_Assignment_Checks (Flag18-Sem)
     --    Used in generated N_Assignment_Statement nodes to suppress predicate
     --    and range checks in cases where the generated code knows that the
     --    value being assigned is in range and satisfies any predicate. Also
--- 2303,2309 ----
     --    value of a type whose size is not known at compile time on the
     --    secondary stack.
  
!    --  Suppress_Assignment_Checks
     --    Used in generated N_Assignment_Statement nodes to suppress predicate
     --    and range checks in cases where the generated code knows that the
     --    value being assigned is in range and satisfies any predicate. Also
*************** package Sinfo is
*** 2337,2359 ****
     --    suppresses access checks in the generated code for out- and in-out
     --    parameters in entry calls.
  
!    --  Suppress_Loop_Warnings (Flag17-Sem)
     --    Used in N_Loop_Statement node to indicate that warnings within the
     --    body of the loop should be suppressed. This is set when the range
     --    of a FOR loop is known to be null, or is probably null (loop would
     --    only execute if invalid values are present).
  
!    --  Target (Node1-Sem)
     --    Present in call and variable reference marker nodes. References the
     --    entity of the original entity, operator, or subprogram being invoked,
     --    or the original variable being read or written.
  
!    --  Target_Type (Node2-Sem)
     --    Used in an N_Validate_Unchecked_Conversion node to point to the target
     --    type entity for the unchecked conversion instantiation which gigi must
     --    do size validation for.
  
!    --  Then_Actions (List3-Sem)
     --    This field is present in if expression nodes. During code expansion
     --    we use the Insert_Actions procedure (in Exp_Util) to insert actions
     --    at an appropriate place in the tree to get elaborated at the right
--- 2312,2334 ----
     --    suppresses access checks in the generated code for out- and in-out
     --    parameters in entry calls.
  
!    --  Suppress_Loop_Warnings
     --    Used in N_Loop_Statement node to indicate that warnings within the
     --    body of the loop should be suppressed. This is set when the range
     --    of a FOR loop is known to be null, or is probably null (loop would
     --    only execute if invalid values are present).
  
!    --  Target
     --    Present in call and variable reference marker nodes. References the
     --    entity of the original entity, operator, or subprogram being invoked,
     --    or the original variable being read or written.
  
!    --  Target_Type
     --    Used in an N_Validate_Unchecked_Conversion node to point to the target
     --    type entity for the unchecked conversion instantiation which gigi must
     --    do size validation for.
  
!    --  Then_Actions
     --    This field is present in if expression nodes. During code expansion
     --    we use the Insert_Actions procedure (in Exp_Util) to insert actions
     --    at an appropriate place in the tree to get elaborated at the right
*************** package Sinfo is
*** 2364,2370 ****
     --    need for this field, so in the tree passed to Gigi, this field is
     --    always set to No_List.
  
!    --  TSS_Elist (Elist3-Sem)
     --    Present in N_Freeze_Entity nodes. Holds an element list containing
     --    entries for each TSS (type support subprogram) associated with the
     --    frozen type. The elements of the list are the entities for the
--- 2339,2345 ----
     --    need for this field, so in the tree passed to Gigi, this field is
     --    always set to No_List.
  
!    --  TSS_Elist
     --    Present in N_Freeze_Entity nodes. Holds an element list containing
     --    entries for each TSS (type support subprogram) associated with the
     --    frozen type. The elements of the list are the entities for the
*************** package Sinfo is
*** 2372,2428 ****
     --    if there are no type support subprograms for the type or if the freeze
     --    node is not for a type.
  
!    --  Uneval_Old_Accept (Flag7-Sem)
     --    Present in N_Pragma nodes. Set True if Opt.Uneval_Old is set to 'A'
     --    (accept) at the point where the pragma is encountered (including the
     --    case of a pragma generated from an aspect specification). It is this
     --    setting that is relevant, rather than the setting at the point where
     --    a contract is finally analyzed after the delay till the freeze point.
  
!    --  Uneval_Old_Warn (Flag18-Sem)
     --    Present in N_Pragma nodes. Set True if Opt.Uneval_Old is set to 'W'
     --    (warn) at the point where the pragma is encountered (including the
     --    case of a pragma generated from an aspect specification). It is this
     --    setting that is relevant, rather than the setting at the point where
     --    a contract is finally analyzed after the delay till the freeze point.
  
!    --  Unreferenced_In_Spec (Flag7-Sem)
     --    Present in N_With_Clause nodes. Set if the with clause is on the
     --    package or subprogram spec where the main unit is the corresponding
     --    body, and is not referenced by the spec (it may still be referenced by
     --    the body, so this flag is used to generate the proper message (see
     --    Sem_Util.Check_Unused_Withs for details)
  
!    --  Uninitialized_Variable (Node3-Sem)
     --    Present in N_Formal_Private_Type_Definition and in N_Private_
     --    Extension_Declarations. Indicates that a variable in a generic unit
     --    whose type is a formal private or derived type is read without being
     --    initialized. Used to warn if the corresponding actual type is not
     --    a fully initialized type.
  
!    --  Used_Operations (Elist2-Sem)
     --    Present in N_Use_Type_Clause nodes. Holds the list of operations that
     --    are made potentially use-visible by the clause. Simplifies processing
     --    on exit from the scope of the use_type_clause, in particular in the
     --    case of Use_All_Type, when those operations several scopes.
  
!    --  Was_Attribute_Reference (Flag2-Sem)
     --    Present in N_Subprogram_Body. Set to True if the original source is an
     --    attribute reference which is an actual in a generic instantiation. The
     --    instantiation prologue renames these attributes, and expansion later
     --    converts them into subprogram bodies.
  
!    --  Was_Default_Init_Box_Association (Flag14-Sem)
!    --    Present in N_Component_Association. Set to True if the original source
!    --    is an aggregate component association with a box (<>) for a component
!    --    that is initialized by default.
! 
!    --  Was_Expression_Function (Flag18-Sem)
     --    Present in N_Subprogram_Body. True if the original source had an
     --    N_Expression_Function, which was converted to the N_Subprogram_Body
     --    by Analyze_Expression_Function.
  
!    --  Was_Originally_Stub (Flag13-Sem)
     --    This flag is set in the node for a proper body that replaces stub.
     --    During the analysis procedure, stubs in some situations get rewritten
     --    by the corresponding bodies, and we set this flag to remember that
--- 2347,2398 ----
     --    if there are no type support subprograms for the type or if the freeze
     --    node is not for a type.
  
!    --  Uneval_Old_Accept
     --    Present in N_Pragma nodes. Set True if Opt.Uneval_Old is set to 'A'
     --    (accept) at the point where the pragma is encountered (including the
     --    case of a pragma generated from an aspect specification). It is this
     --    setting that is relevant, rather than the setting at the point where
     --    a contract is finally analyzed after the delay till the freeze point.
  
!    --  Uneval_Old_Warn
     --    Present in N_Pragma nodes. Set True if Opt.Uneval_Old is set to 'W'
     --    (warn) at the point where the pragma is encountered (including the
     --    case of a pragma generated from an aspect specification). It is this
     --    setting that is relevant, rather than the setting at the point where
     --    a contract is finally analyzed after the delay till the freeze point.
  
!    --  Unreferenced_In_Spec
     --    Present in N_With_Clause nodes. Set if the with clause is on the
     --    package or subprogram spec where the main unit is the corresponding
     --    body, and is not referenced by the spec (it may still be referenced by
     --    the body, so this flag is used to generate the proper message (see
     --    Sem_Util.Check_Unused_Withs for details)
  
!    --  Uninitialized_Variable
     --    Present in N_Formal_Private_Type_Definition and in N_Private_
     --    Extension_Declarations. Indicates that a variable in a generic unit
     --    whose type is a formal private or derived type is read without being
     --    initialized. Used to warn if the corresponding actual type is not
     --    a fully initialized type.
  
!    --  Used_Operations
     --    Present in N_Use_Type_Clause nodes. Holds the list of operations that
     --    are made potentially use-visible by the clause. Simplifies processing
     --    on exit from the scope of the use_type_clause, in particular in the
     --    case of Use_All_Type, when those operations several scopes.
  
!    --  Was_Attribute_Reference
     --    Present in N_Subprogram_Body. Set to True if the original source is an
     --    attribute reference which is an actual in a generic instantiation. The
     --    instantiation prologue renames these attributes, and expansion later
     --    converts them into subprogram bodies.
  
!    --  Was_Expression_Function
     --    Present in N_Subprogram_Body. True if the original source had an
     --    N_Expression_Function, which was converted to the N_Subprogram_Body
     --    by Analyze_Expression_Function.
  
!    --  Was_Originally_Stub
     --    This flag is set in the node for a proper body that replaces stub.
     --    During the analysis procedure, stubs in some situations get rewritten
     --    by the corresponding bodies, and we set this flag to remember that
*************** package Sinfo is
*** 2529,2544 ****
  
        --  N_Identifier
        --  Sloc points to identifier
!       --  Chars (Name1) contains the Name_Id for the identifier
!       --  Entity (Node4-Sem)
!       --  Associated_Node (Node4-Sem)
!       --  Original_Discriminant (Node2-Sem)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
!       --  Has_Private_View (Flag11-Sem) (set in generic units)
!       --  Redundant_Use (Flag13-Sem)
!       --  Atomic_Sync_Required (Flag14-Sem)
        --  plus fields for expression
  
        --------------------------
--- 2499,2514 ----
  
        --  N_Identifier
        --  Sloc points to identifier
!       --  Chars contains the Name_Id for the identifier
!       --  Entity
!       --  Associated_Node
!       --  Original_Discriminant
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Is_Elaboration_Warnings_OK_Node
!       --  Has_Private_View (set in generic units)
!       --  Redundant_Use
!       --  Atomic_Sync_Required
        --  plus fields for expression
  
        --------------------------
*************** package Sinfo is
*** 2575,2593 ****
  
        --  N_Integer_Literal
        --  Sloc points to literal
!       --  Original_Entity (Node2-Sem) If not Empty, holds Named_Number that
        --  has been constant-folded into its literal value.
!       --  Intval (Uint3) contains integer value of literal
!       --  Print_In_Hex (Flag13-Sem)
        --  plus fields for expression
  
        --  N_Real_Literal
        --  Sloc points to literal
!       --  Original_Entity (Node2-Sem) If not Empty, holds Named_Number that
        --  has been constant-folded into its literal value.
!       --  Realval (Ureal3) contains real value of literal
!       --  Corresponding_Integer_Value (Uint4-Sem)
!       --  Is_Machine_Number (Flag11-Sem)
        --  plus fields for expression
  
        --------------------------
--- 2545,2563 ----
  
        --  N_Integer_Literal
        --  Sloc points to literal
!       --  Original_Entity If not Empty, holds Named_Number that
        --  has been constant-folded into its literal value.
!       --  Intval contains integer value of literal
!       --  Print_In_Hex
        --  plus fields for expression
  
        --  N_Real_Literal
        --  Sloc points to literal
!       --  Original_Entity If not Empty, holds Named_Number that
        --  has been constant-folded into its literal value.
!       --  Realval contains real value of literal
!       --  Corresponding_Integer_Value
!       --  Is_Machine_Number
        --  plus fields for expression
  
        --------------------------
*************** package Sinfo is
*** 2615,2625 ****
  
        --  N_Character_Literal
        --  Sloc points to literal
!       --  Chars (Name1) contains the Name_Id for the identifier
!       --  Char_Literal_Value (Uint2) contains the literal value
!       --  Entity (Node4-Sem)
!       --  Associated_Node (Node4-Sem)
!       --  Has_Private_View (Flag11-Sem) set in generic units.
        --  plus fields for expression
  
        --  Note: the Entity field will be missing (set to Empty) for character
--- 2585,2595 ----
  
        --  N_Character_Literal
        --  Sloc points to literal
!       --  Chars contains the Name_Id for the identifier
!       --  Char_Literal_Value contains the literal value
!       --  Entity
!       --  Associated_Node
!       --  Has_Private_View (set in generic units)
        --  plus fields for expression
  
        --  Note: the Entity field will be missing (set to Empty) for character
*************** package Sinfo is
*** 2647,2656 ****
  
        --  N_String_Literal
        --  Sloc points to literal
!       --  Strval (Str3) contains Id of string value
!       --  Has_Wide_Character (Flag11-Sem)
!       --  Has_Wide_Wide_Character (Flag13-Sem)
!       --  Is_Folded_In_Parser (Flag4)
        --  plus fields for expression
  
        ------------------
--- 2617,2626 ----
  
        --  N_String_Literal
        --  Sloc points to literal
!       --  Strval contains Id of string value
!       --  Has_Wide_Character
!       --  Has_Wide_Wide_Character
!       --  Is_Folded_In_Parser
        --  plus fields for expression
  
        ------------------
*************** package Sinfo is
*** 2678,2703 ****
  
        --  N_Pragma
        --  Sloc points to PRAGMA
!       --  Next_Pragma (Node1-Sem)
!       --  Pragma_Argument_Associations (List2) (set to No_List if none)
!       --  Corresponding_Aspect (Node3-Sem) (set to Empty if not present)
!       --  Pragma_Identifier (Node4)
!       --  Next_Rep_Item (Node5-Sem)
!       --  Is_Generic_Contract_Pragma (Flag2-Sem)
!       --  Is_Checked_Ghost_Pragma (Flag3-Sem)
!       --  Is_Inherited_Pragma (Flag4-Sem)
!       --  Is_Analyzed_Pragma (Flag5-Sem)
!       --  Class_Present (Flag6) set if from Aspect with 'Class
!       --  Uneval_Old_Accept (Flag7-Sem)
!       --  Is_Ignored_Ghost_Pragma (Flag8-Sem)
!       --  Is_Ignored (Flag9-Sem)
!       --  Is_Checked (Flag11-Sem)
!       --  From_Aspect_Specification (Flag13-Sem)
!       --  Is_Delayed_Aspect (Flag14-Sem)
!       --  Is_Disabled (Flag15-Sem)
!       --  Import_Interface_Present (Flag16-Sem)
!       --  Split_PPC (Flag17) set if corresponding aspect had Split_PPC set
!       --  Uneval_Old_Warn (Flag18-Sem)
  
        --  Note: we should have a section on what pragmas are passed on to
        --  the back end to be processed. This section should note that pragma
--- 2648,2673 ----
  
        --  N_Pragma
        --  Sloc points to PRAGMA
!       --  Next_Pragma
!       --  Pragma_Argument_Associations (set to No_List if none)
!       --  Corresponding_Aspect (set to Empty if not present)
!       --  Pragma_Identifier
!       --  Next_Rep_Item
!       --  Is_Generic_Contract_Pragma
!       --  Is_Checked_Ghost_Pragma
!       --  Is_Inherited_Pragma
!       --  Is_Analyzed_Pragma
!       --  Class_Present set if from Aspect with 'Class
!       --  Uneval_Old_Accept
!       --  Is_Ignored_Ghost_Pragma
!       --  Is_Ignored
!       --  Is_Checked
!       --  From_Aspect_Specification
!       --  Is_Delayed_Aspect
!       --  Is_Disabled
!       --  Import_Interface_Present
!       --  Split_PPC set if corresponding aspect had Split_PPC set
!       --  Uneval_Old_Warn
  
        --  Note: we should have a section on what pragmas are passed on to
        --  the back end to be processed. This section should note that pragma
*************** package Sinfo is
*** 2746,2754 ****
  
        --  N_Pragma_Argument_Association
        --  Sloc points to first token in association
!       --  Chars (Name1) (set to No_Name if no pragma argument identifier)
!       --  Expression_Copy (Node2-Sem)
!       --  Expression (Node3)
  
        ------------------------
        -- 2.9  Reserved Word --
--- 2716,2724 ----
  
        --  N_Pragma_Argument_Association
        --  Sloc points to first token in association
!       --  Chars (set to No_Name if no pragma argument identifier)
!       --  Expression_Copy
!       --  Expression
  
        ------------------------
        -- 2.9  Reserved Word --
*************** package Sinfo is
*** 2794,2803 ****
  
        --  N_Defining_Identifier
        --  Sloc points to identifier
!       --  Chars (Name1) contains the Name_Id for the identifier
!       --  Next_Entity (Node2-Sem)
!       --  Scope (Node3-Sem)
!       --  Etype (Node5-Sem)
  
        -----------------------------
        -- 3.2.1  Type Declaration --
--- 2764,2773 ----
  
        --  N_Defining_Identifier
        --  Sloc points to identifier
!       --  Chars contains the Name_Id for the identifier
!       --  Next_Entity
!       --  Scope
!       --  Etype
  
        -----------------------------
        -- 3.2.1  Type Declaration --
*************** package Sinfo is
*** 2826,2836 ****
  
        --  N_Full_Type_Declaration
        --  Sloc points to TYPE
!       --  Defining_Identifier (Node1)
!       --  Incomplete_View (Node2-Sem)
!       --  Discriminant_Specifications (List4) (set to No_List if none)
!       --  Type_Definition (Node3)
!       --  Discr_Check_Funcs_Built (Flag11-Sem)
  
        ----------------------------
        -- 3.2.1  Type Definition --
--- 2796,2806 ----
  
        --  N_Full_Type_Declaration
        --  Sloc points to TYPE
!       --  Defining_Identifier
!       --  Incomplete_View
!       --  Discriminant_Specifications (set to No_List if none)
!       --  Type_Definition
!       --  Discr_Check_Funcs_Built
  
        ----------------------------
        -- 3.2.1  Type Definition --
*************** package Sinfo is
*** 2855,2865 ****
  
        --  N_Subtype_Declaration
        --  Sloc points to SUBTYPE
!       --  Defining_Identifier (Node1)
!       --  Null_Exclusion_Present (Flag11)
!       --  Subtype_Indication (Node5)
!       --  Generic_Parent_Type (Node4-Sem) (set for an actual derived type).
!       --  Exception_Junk (Flag8-Sem)
  
        -------------------------------
        -- 3.2.2  Subtype Indication --
--- 2825,2835 ----
  
        --  N_Subtype_Declaration
        --  Sloc points to SUBTYPE
!       --  Defining_Identifier
!       --  Null_Exclusion_Present
!       --  Subtype_Indication
!       --  Generic_Parent_Type (set for an actual derived type).
!       --  Exception_Junk
  
        -------------------------------
        -- 3.2.2  Subtype Indication --
*************** package Sinfo is
*** 2881,2890 ****
  
        --  N_Subtype_Indication
        --  Sloc points to first token of subtype mark
!       --  Subtype_Mark (Node4)
!       --  Constraint (Node3)
!       --  Etype (Node5-Sem)
!       --  Must_Not_Freeze (Flag8-Sem)
  
        --  Note: Depending on context, the Etype is either the entity of the
        --  Subtype_Mark field, or it is an itype constructed to reify the
--- 2851,2860 ----
  
        --  N_Subtype_Indication
        --  Sloc points to first token of subtype mark
!       --  Subtype_Mark
!       --  Constraint
!       --  Etype
!       --  Must_Not_Freeze
  
        --  Note: Depending on context, the Etype is either the entity of the
        --  Subtype_Mark field, or it is an itype constructed to reify the
*************** package Sinfo is
*** 2980,3001 ****
  
        --  N_Object_Declaration
        --  Sloc points to first identifier
!       --  Defining_Identifier (Node1)
!       --  Aliased_Present (Flag4)
!       --  Constant_Present (Flag17) set if CONSTANT appears
!       --  Null_Exclusion_Present (Flag11)
!       --  Object_Definition (Node4) subtype indic./array type def./access def.
!       --  Expression (Node3) (set to Empty if not present)
!       --  Handler_List_Entry (Node2-Sem)
!       --  Corresponding_Generic_Association (Node5-Sem)
!       --  More_Ids (Flag5) (set to False if no more identifiers in list)
!       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
!       --  No_Initialization (Flag13-Sem)
!       --  Assignment_OK (Flag15-Sem)
!       --  Exception_Junk (Flag8-Sem)
!       --  Is_Subprogram_Descriptor (Flag16-Sem)
!       --  Has_Init_Expression (Flag14)
!       --  Suppress_Assignment_Checks (Flag18-Sem)
  
        -------------------------------------
        -- 3.3.1  Defining Identifier List --
--- 2950,2971 ----
  
        --  N_Object_Declaration
        --  Sloc points to first identifier
!       --  Defining_Identifier
!       --  Aliased_Present
!       --  Constant_Present set if CONSTANT appears
!       --  Null_Exclusion_Present
!       --  Object_Definition subtype indic./array type def./access def.
!       --  Expression (set to Empty if not present)
!       --  Handler_List_Entry
!       --  Corresponding_Generic_Association
!       --  More_Ids (set to False if no more identifiers in list)
!       --  Prev_Ids (set to False if no previous identifiers in list)
!       --  No_Initialization
!       --  Assignment_OK
!       --  Exception_Junk
!       --  Is_Subprogram_Descriptor
!       --  Has_Init_Expression
!       --  Suppress_Assignment_Checks
  
        -------------------------------------
        -- 3.3.1  Defining Identifier List --
*************** package Sinfo is
*** 3021,3030 ****
  
        --  N_Number_Declaration
        --  Sloc points to first identifier
!       --  Defining_Identifier (Node1)
!       --  Expression (Node3)
!       --  More_Ids (Flag5) (set to False if no more identifiers in list)
!       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  
        ----------------------------------
        -- 3.4  Derived Type Definition --
--- 2991,3000 ----
  
        --  N_Number_Declaration
        --  Sloc points to first identifier
!       --  Defining_Identifier
!       --  Expression
!       --  More_Ids (set to False if no more identifiers in list)
!       --  Prev_Ids (set to False if no previous identifiers in list)
  
        ----------------------------------
        -- 3.4  Derived Type Definition --
*************** package Sinfo is
*** 3041,3056 ****
  
        --  N_Derived_Type_Definition
        --  Sloc points to NEW
!       --  Abstract_Present (Flag4)
!       --  Null_Exclusion_Present (Flag11) (set to False if not present)
!       --  Subtype_Indication (Node5)
!       --  Record_Extension_Part (Node3) (set to Empty if not present)
!       --  Limited_Present (Flag17)
!       --  Task_Present (Flag5) set in task interfaces
!       --  Protected_Present (Flag6) set in protected interfaces
!       --  Synchronized_Present (Flag7) set in interfaces
!       --  Interface_List (List2) (set to No_List if none)
!       --  Interface_Present (Flag16) set in abstract interfaces
  
        --  Note: Task_Present, Protected_Present, Synchronized_Present,
        --        Interface_List, and Interface_Present are used for abstract
--- 3011,3026 ----
  
        --  N_Derived_Type_Definition
        --  Sloc points to NEW
!       --  Abstract_Present
!       --  Null_Exclusion_Present (set to False if not present)
!       --  Subtype_Indication
!       --  Record_Extension_Part (set to Empty if not present)
!       --  Limited_Present
!       --  Task_Present set in task interfaces
!       --  Protected_Present set in protected interfaces
!       --  Synchronized_Present set in interfaces
!       --  Interface_List (set to No_List if none)
!       --  Interface_Present set in abstract interfaces
  
        --  Note: Task_Present, Protected_Present, Synchronized_Present,
        --        Interface_List, and Interface_Present are used for abstract
*************** package Sinfo is
*** 3064,3070 ****
  
        --  N_Range_Constraint
        --  Sloc points to RANGE
!       --  Range_Expression (Node4)
  
        ----------------
        -- 3.5  Range --
--- 3034,3040 ----
  
        --  N_Range_Constraint
        --  Sloc points to RANGE
!       --  Range_Expression
  
        ----------------
        -- 3.5  Range --
*************** package Sinfo is
*** 3087,3095 ****
  
        --  N_Range
        --  Sloc points to ..
!       --  Low_Bound (Node1)
!       --  High_Bound (Node2)
!       --  Includes_Infinities (Flag11)
        --  plus fields for expression
  
        --  Note: if the range appears in a context, such as a subtype
--- 3057,3065 ----
  
        --  N_Range
        --  Sloc points to ..
!       --  Low_Bound
!       --  High_Bound
!       --  Includes_Infinities
        --  plus fields for expression
  
        --  Note: if the range appears in a context, such as a subtype
*************** package Sinfo is
*** 3111,3118 ****
  
        --  N_Enumeration_Type_Definition
        --  Sloc points to left parenthesis
!       --  Literals (List1) (Empty for CHARACTER or WIDE_CHARACTER)
!       --  End_Label (Node4) (set to Empty if internally generated record)
  
        ----------------------------------------------
        -- 3.5.1  Enumeration Literal Specification --
--- 3081,3088 ----
  
        --  N_Enumeration_Type_Definition
        --  Sloc points to left parenthesis
!       --  Literals (Empty for CHARACTER or WIDE_CHARACTER)
!       --  End_Label (set to Empty if internally generated record)
  
        ----------------------------------------------
        -- 3.5.1  Enumeration Literal Specification --
*************** package Sinfo is
*** 3140,3149 ****
  
        --  N_Defining_Character_Literal
        --  Sloc points to literal
!       --  Chars (Name1) contains the Name_Id for the identifier
!       --  Next_Entity (Node2-Sem)
!       --  Scope (Node3-Sem)
!       --  Etype (Node5-Sem)
  
        ------------------------------------
        -- 3.5.4  Integer Type Definition --
--- 3110,3119 ----
  
        --  N_Defining_Character_Literal
        --  Sloc points to literal
!       --  Chars contains the Name_Id for the identifier
!       --  Next_Entity
!       --  Scope
!       --  Etype
  
        ------------------------------------
        -- 3.5.4  Integer Type Definition --
*************** package Sinfo is
*** 3168,3175 ****
  
        --  N_Signed_Integer_Type_Definition
        --  Sloc points to RANGE
!       --  Low_Bound (Node1)
!       --  High_Bound (Node2)
  
        ------------------------------------
        -- 3.5.4  Modular Type Definition --
--- 3138,3145 ----
  
        --  N_Signed_Integer_Type_Definition
        --  Sloc points to RANGE
!       --  Low_Bound
!       --  High_Bound
  
        ------------------------------------
        -- 3.5.4  Modular Type Definition --
*************** package Sinfo is
*** 3179,3185 ****
  
        --  N_Modular_Type_Definition
        --  Sloc points to MOD
!       --  Expression (Node3)
  
        ---------------------------------
        -- 3.5.6  Real Type Definition --
--- 3149,3155 ----
  
        --  N_Modular_Type_Definition
        --  Sloc points to MOD
!       --  Expression
  
        ---------------------------------
        -- 3.5.6  Real Type Definition --
*************** package Sinfo is
*** 3200,3207 ****
  
        --  N_Floating_Point_Definition
        --  Sloc points to DIGITS
!       --  Digits_Expression (Node2)
!       --  Real_Range_Specification (Node4) (set to Empty if not present)
  
        -------------------------------------
        -- 3.5.7  Real Range Specification --
--- 3170,3177 ----
  
        --  N_Floating_Point_Definition
        --  Sloc points to DIGITS
!       --  Digits_Expression
!       --  Real_Range_Specification (set to Empty if not present)
  
        -------------------------------------
        -- 3.5.7  Real Range Specification --
*************** package Sinfo is
*** 3212,3219 ****
  
        --  N_Real_Range_Specification
        --  Sloc points to RANGE
!       --  Low_Bound (Node1)
!       --  High_Bound (Node2)
  
        -----------------------------------
        -- 3.5.9  Fixed Point Definition --
--- 3182,3189 ----
  
        --  N_Real_Range_Specification
        --  Sloc points to RANGE
!       --  Low_Bound
!       --  High_Bound
  
        -----------------------------------
        -- 3.5.9  Fixed Point Definition --
*************** package Sinfo is
*** 3233,3240 ****
  
        --  N_Ordinary_Fixed_Point_Definition
        --  Sloc points to DELTA
!       --  Delta_Expression (Node3)
!       --  Real_Range_Specification (Node4)
  
        -------------------------------------------
        -- 3.5.9  Decimal Fixed Point Definition --
--- 3203,3210 ----
  
        --  N_Ordinary_Fixed_Point_Definition
        --  Sloc points to DELTA
!       --  Delta_Expression
!       --  Real_Range_Specification
  
        -------------------------------------------
        -- 3.5.9  Decimal Fixed Point Definition --
*************** package Sinfo is
*** 3248,3256 ****
  
        --  N_Decimal_Fixed_Point_Definition
        --  Sloc points to DELTA
!       --  Delta_Expression (Node3)
!       --  Digits_Expression (Node2)
!       --  Real_Range_Specification (Node4) (set to Empty if not present)
  
        ------------------------------
        -- 3.5.9  Digits Constraint --
--- 3218,3226 ----
  
        --  N_Decimal_Fixed_Point_Definition
        --  Sloc points to DELTA
!       --  Delta_Expression
!       --  Digits_Expression
!       --  Real_Range_Specification (set to Empty if not present)
  
        ------------------------------
        -- 3.5.9  Digits Constraint --
*************** package Sinfo is
*** 3264,3271 ****
  
        --  N_Digits_Constraint
        --  Sloc points to DIGITS
!       --  Digits_Expression (Node2)
!       --  Range_Constraint (Node4) (set to Empty if not present)
  
        --------------------------------
        -- 3.6  Array Type Definition --
--- 3234,3241 ----
  
        --  N_Digits_Constraint
        --  Sloc points to DIGITS
!       --  Digits_Expression
!       --  Range_Constraint (set to Empty if not present)
  
        --------------------------------
        -- 3.6  Array Type Definition --
*************** package Sinfo is
*** 3287,3294 ****
  
        --  N_Unconstrained_Array_Definition
        --  Sloc points to ARRAY
!       --  Subtype_Marks (List2)
!       --  Component_Definition (Node4)
  
        -----------------------------------
        -- 3.6  Index Subtype Definition --
--- 3257,3264 ----
  
        --  N_Unconstrained_Array_Definition
        --  Sloc points to ARRAY
!       --  Subtype_Marks
!       --  Component_Definition
  
        -----------------------------------
        -- 3.6  Index Subtype Definition --
*************** package Sinfo is
*** 3315,3322 ****
  
        --  N_Constrained_Array_Definition
        --  Sloc points to ARRAY
!       --  Discrete_Subtype_Definitions (List2)
!       --  Component_Definition (Node4)
  
        --  Note: although the language allows the full syntax for discrete
        --  subtype definitions (i.e. a discrete subtype indication or a range),
--- 3285,3292 ----
  
        --  N_Constrained_Array_Definition
        --  Sloc points to ARRAY
!       --  Discrete_Subtype_Definitions
!       --  Component_Definition
  
        --  Note: although the language allows the full syntax for discrete
        --  subtype definitions (i.e. a discrete subtype indication or a range),
*************** package Sinfo is
*** 3347,3356 ****
  
        --  N_Component_Definition
        --  Sloc points to ALIASED, ACCESS, or to first token of subtype mark
!       --  Aliased_Present (Flag4)
!       --  Null_Exclusion_Present (Flag11)
!       --  Subtype_Indication (Node5) (set to Empty if not present)
!       --  Access_Definition (Node3) (set to Empty if not present)
  
        -----------------------------
        -- 3.6.1  Index Constraint --
--- 3317,3326 ----
  
        --  N_Component_Definition
        --  Sloc points to ALIASED, ACCESS, or to first token of subtype mark
!       --  Aliased_Present
!       --  Null_Exclusion_Present
!       --  Subtype_Indication (set to Empty if not present)
!       --  Access_Definition (set to Empty if not present)
  
        -----------------------------
        -- 3.6.1  Index Constraint --
*************** package Sinfo is
*** 3420,3431 ****
  
        --  N_Discriminant_Specification
        --  Sloc points to first identifier
!       --  Defining_Identifier (Node1)
!       --  Null_Exclusion_Present (Flag11)
!       --  Discriminant_Type (Node5) subtype mark or access parameter definition
!       --  Expression (Node3) (set to Empty if no default expression)
!       --  More_Ids (Flag5) (set to False if no more identifiers in list)
!       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  
        -----------------------------
        -- 3.7  Default Expression --
--- 3390,3401 ----
  
        --  N_Discriminant_Specification
        --  Sloc points to first identifier
!       --  Defining_Identifier
!       --  Null_Exclusion_Present
!       --  Discriminant_Type subtype mark or access parameter definition
!       --  Expression (set to Empty if no default expression)
!       --  More_Ids (set to False if no more identifiers in list)
!       --  Prev_Ids (set to False if no previous identifiers in list)
  
        -----------------------------
        -- 3.7  Default Expression --
*************** package Sinfo is
*** 3450,3456 ****
  
        --  N_Index_Or_Discriminant_Constraint
        --  Sloc points to left paren
!       --  Constraints (List1) points to list of discrete ranges or
        --    discriminant associations
  
        -------------------------------------
--- 3420,3426 ----
  
        --  N_Index_Or_Discriminant_Constraint
        --  Sloc points to left paren
!       --  Constraints points to list of discrete ranges or
        --    discriminant associations
  
        -------------------------------------
*************** package Sinfo is
*** 3466,3474 ****
  
        --  N_Discriminant_Association
        --  Sloc points to first token of discriminant association
!       --  Selector_Names (List1) (always non-empty, since if no selector
        --    names are present, this node is not used, see comment above)
!       --  Expression (Node3)
  
        ---------------------------------
        -- 3.8  Record Type Definition --
--- 3436,3444 ----
  
        --  N_Discriminant_Association
        --  Sloc points to first token of discriminant association
!       --  Selector_Names (always non-empty, since if no selector
        --    names are present, this node is not used, see comment above)
!       --  Expression
  
        ---------------------------------
        -- 3.8  Record Type Definition --
*************** package Sinfo is
*** 3502,3518 ****
  
        --  N_Record_Definition
        --  Sloc points to RECORD or NULL
!       --  End_Label (Node4) (set to Empty if internally generated record)
!       --  Abstract_Present (Flag4)
!       --  Tagged_Present (Flag15)
!       --  Limited_Present (Flag17)
!       --  Component_List (Node1) empty in null record case
!       --  Null_Present (Flag13) set in null record case
!       --  Task_Present (Flag5) set in task interfaces
!       --  Protected_Present (Flag6) set in protected interfaces
!       --  Synchronized_Present (Flag7) set in interfaces
!       --  Interface_Present (Flag16) set in abstract interfaces
!       --  Interface_List (List2) (set to No_List if none)
  
        --  Note: Task_Present, Protected_Present, Synchronized _Present,
        --        Interface_List and Interface_Present are used for abstract
--- 3472,3488 ----
  
        --  N_Record_Definition
        --  Sloc points to RECORD or NULL
!       --  End_Label (set to Empty if internally generated record)
!       --  Abstract_Present
!       --  Tagged_Present
!       --  Limited_Present
!       --  Component_List empty in null record case
!       --  Null_Present set in null record case
!       --  Task_Present set in task interfaces
!       --  Protected_Present set in protected interfaces
!       --  Synchronized_Present set in interfaces
!       --  Interface_Present set in abstract interfaces
!       --  Interface_List (set to No_List if none)
  
        --  Note: Task_Present, Protected_Present, Synchronized _Present,
        --        Interface_List and Interface_Present are used for abstract
*************** package Sinfo is
*** 3529,3537 ****
  
        --  N_Component_List
        --  Sloc points to first token of component list
!       --  Component_Items (List3)
!       --  Variant_Part (Node4) (set to Empty if no variant part)
!       --  Null_Present (Flag13)
  
        -------------------------
        -- 3.8  Component Item --
--- 3499,3507 ----
  
        --  N_Component_List
        --  Sloc points to first token of component list
!       --  Component_Items
!       --  Variant_Part (set to Empty if no variant part)
!       --  Null_Present
  
        -------------------------
        -- 3.8  Component Item --
*************** package Sinfo is
*** 3568,3578 ****
  
        --  N_Component_Declaration
        --  Sloc points to first identifier
!       --  Defining_Identifier (Node1)
!       --  Component_Definition (Node4)
!       --  Expression (Node3) (set to Empty if no default expression)
!       --  More_Ids (Flag5) (set to False if no more identifiers in list)
!       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  
        -------------------------
        -- 3.8.1  Variant Part --
--- 3538,3548 ----
  
        --  N_Component_Declaration
        --  Sloc points to first identifier
!       --  Defining_Identifier
!       --  Component_Definition
!       --  Expression (set to Empty if no default expression)
!       --  More_Ids (set to False if no more identifiers in list)
!       --  Prev_Ids (set to False if no previous identifiers in list)
  
        -------------------------
        -- 3.8.1  Variant Part --
*************** package Sinfo is
*** 3588,3595 ****
  
        --  N_Variant_Part
        --  Sloc points to CASE
!       --  Name (Node2)
!       --  Variants (List1)
  
        --------------------
        -- 3.8.1  Variant --
--- 3558,3565 ----
  
        --  N_Variant_Part
        --  Sloc points to CASE
!       --  Name
!       --  Variants
  
        --------------------
        -- 3.8.1  Variant --
*************** package Sinfo is
*** 3601,3612 ****
  
        --  N_Variant
        --  Sloc points to WHEN
!       --  Discrete_Choices (List4)
!       --  Component_List (Node1)
!       --  Enclosing_Variant (Node2-Sem)
!       --  Present_Expr (Uint3-Sem)
!       --  Dcheck_Function (Node5-Sem)
!       --  Has_SP_Choice (Flag15-Sem)
  
        --  Note: in the list of Discrete_Choices, the tree passed to the back
        --  end does not have choice entries corresponding to names of statically
--- 3571,3582 ----
  
        --  N_Variant
        --  Sloc points to WHEN
!       --  Discrete_Choices
!       --  Component_List
!       --  Enclosing_Variant
!       --  Present_Expr
!       --  Dcheck_Function
!       --  Has_SP_Choice
  
        --  Note: in the list of Discrete_Choices, the tree passed to the back
        --  end does not have choice entries corresponding to names of statically
*************** package Sinfo is
*** 3638,3645 ****
  
        --  N_Others_Choice
        --  Sloc points to OTHERS
!       --  Others_Discrete_Choices (List1-Sem)
!       --  All_Others (Flag11-Sem)
  
        ----------------------------------
        -- 3.9.1  Record Extension Part --
--- 3608,3615 ----
  
        --  N_Others_Choice
        --  Sloc points to OTHERS
!       --  Others_Discrete_Choices
!       --  All_Others
  
        ----------------------------------
        -- 3.9.1  Record Extension Part --
*************** package Sinfo is
*** 3686,3696 ****
  
        --  N_Access_To_Object_Definition
        --  Sloc points to ACCESS
!       --  All_Present (Flag15)
!       --  Null_Exclusion_Present (Flag11)
!       --  Null_Excluding_Subtype (Flag16)
!       --  Subtype_Indication (Node5)
!       --  Constant_Present (Flag17)
  
        -----------------------------------
        -- 3.10  General Access Modifier --
--- 3656,3666 ----
  
        --  N_Access_To_Object_Definition
        --  Sloc points to ACCESS
!       --  All_Present
!       --  Null_Exclusion_Present
!       --  Null_Excluding_Subtype
!       --  Subtype_Indication
!       --  Constant_Present
  
        -----------------------------------
        -- 3.10  General Access Modifier --
*************** package Sinfo is
*** 3717,3733 ****
  
        --  N_Access_Function_Definition
        --  Sloc points to ACCESS
!       --  Null_Exclusion_Present (Flag11)
!       --  Null_Exclusion_In_Return_Present (Flag14)
!       --  Protected_Present (Flag6)
!       --  Parameter_Specifications (List3) (set to No_List if no formal part)
!       --  Result_Definition (Node4) result subtype (subtype mark or access def)
  
        --  N_Access_Procedure_Definition
        --  Sloc points to ACCESS
!       --  Null_Exclusion_Present (Flag11)
!       --  Protected_Present (Flag6)
!       --  Parameter_Specifications (List3) (set to No_List if no formal part)
  
        -----------------------------
        -- 3.10  Access Definition --
--- 3687,3703 ----
  
        --  N_Access_Function_Definition
        --  Sloc points to ACCESS
!       --  Null_Exclusion_Present
!       --  Null_Exclusion_In_Return_Present
!       --  Protected_Present
!       --  Parameter_Specifications (set to No_List if no formal part)
!       --  Result_Definition result subtype (subtype mark or access def)
  
        --  N_Access_Procedure_Definition
        --  Sloc points to ACCESS
!       --  Null_Exclusion_Present
!       --  Protected_Present
!       --  Parameter_Specifications (set to No_List if no formal part)
  
        -----------------------------
        -- 3.10  Access Definition --
*************** package Sinfo is
*** 3741,3751 ****
  
        --  N_Access_Definition
        --  Sloc points to ACCESS
!       --  Null_Exclusion_Present (Flag11)
!       --  All_Present (Flag15)
!       --  Constant_Present (Flag17)
!       --  Subtype_Mark (Node4)
!       --  Access_To_Subprogram_Definition (Node3) (set to Empty if not present)
  
        -----------------------------------------
        -- 3.10.1  Incomplete Type Declaration --
--- 3711,3721 ----
  
        --  N_Access_Definition
        --  Sloc points to ACCESS
!       --  Null_Exclusion_Present
!       --  All_Present
!       --  Constant_Present
!       --  Subtype_Mark
!       --  Access_To_Subprogram_Definition (set to Empty if not present)
  
        -----------------------------------------
        -- 3.10.1  Incomplete Type Declaration --
*************** package Sinfo is
*** 3756,3768 ****
  
        --  N_Incomplete_Type_Declaration
        --  Sloc points to TYPE
!       --  Defining_Identifier (Node1)
!       --  Discriminant_Specifications (List4) (set to No_List if no
        --   discriminant part, or if the discriminant part is an
        --   unknown discriminant part)
!       --  Premature_Use (Node5-Sem) used for improved diagnostics.
!       --  Unknown_Discriminants_Present (Flag13) set if (<>) discriminant
!       --  Tagged_Present (Flag15)
  
        ----------------------------
        -- 3.11  Declarative Part --
--- 3726,3738 ----
  
        --  N_Incomplete_Type_Declaration
        --  Sloc points to TYPE
!       --  Defining_Identifier
!       --  Discriminant_Specifications (set to No_List if no
        --   discriminant part, or if the discriminant part is an
        --   unknown discriminant part)
!       --  Premature_Use used for improved diagnostics.
!       --  Unknown_Discriminants_Present set if (<>) discriminant
!       --  Tagged_Present
  
        ----------------------------
        -- 3.11  Declarative Part --
*************** package Sinfo is
*** 3833,3842 ****
  
        --  N_Explicit_Dereference
        --  Sloc points to ALL
!       --  Prefix (Node3)
!       --  Actual_Designated_Subtype (Node4-Sem)
!       --  Has_Dereference_Action (Flag13-Sem)
!       --  Atomic_Sync_Required (Flag14-Sem)
        --  plus fields for expression
  
        -------------------------------
--- 3803,3812 ----
  
        --  N_Explicit_Dereference
        --  Sloc points to ALL
!       --  Prefix
!       --  Actual_Designated_Subtype
!       --  Has_Dereference_Action
!       --  Atomic_Sync_Required
        --  plus fields for expression
  
        -------------------------------
*************** package Sinfo is
*** 3857,3866 ****
  
        --  N_Indexed_Component
        --  Sloc contains a copy of the Sloc value of the Prefix
!       --  Prefix (Node3)
!       --  Expressions (List1)
!       --  Generalized_Indexing (Node4-Sem)
!       --  Atomic_Sync_Required (Flag14-Sem)
        --  plus fields for expression
  
        --  Note: if any of the subscripts requires a range check, then the
--- 3827,3836 ----
  
        --  N_Indexed_Component
        --  Sloc contains a copy of the Sloc value of the Prefix
!       --  Prefix
!       --  Expressions
!       --  Generalized_Indexing
!       --  Atomic_Sync_Required
        --  plus fields for expression
  
        --  Note: if any of the subscripts requires a range check, then the
*************** package Sinfo is
*** 3883,3890 ****
  
        --  N_Slice
        --  Sloc points to first token of prefix
!       --  Prefix (Node3)
!       --  Discrete_Range (Node4)
        --  plus fields for expression
  
        -------------------------------
--- 3853,3860 ----
  
        --  N_Slice
        --  Sloc points to first token of prefix
!       --  Prefix
!       --  Discrete_Range
        --  plus fields for expression
  
        -------------------------------
*************** package Sinfo is
*** 3899,3911 ****
  
        --  N_Selected_Component
        --  Sloc points to the period
!       --  Prefix (Node3)
!       --  Selector_Name (Node2)
!       --  Associated_Node (Node4-Sem)
!       --  Do_Discriminant_Check (Flag3-Sem)
!       --  Is_In_Discriminant_Check (Flag11-Sem)
!       --  Atomic_Sync_Required (Flag14-Sem)
!       --  Is_Prefixed_Call (Flag17-Sem)
        --  plus fields for expression
  
        --------------------------
--- 3869,3881 ----
  
        --  N_Selected_Component
        --  Sloc points to the period
!       --  Prefix
!       --  Selector_Name
!       --  Associated_Node
!       --  Do_Discriminant_Check
!       --  Is_In_Discriminant_Check
!       --  Atomic_Sync_Required
!       --  Is_Prefixed_Call
        --  plus fields for expression
  
        --------------------------
*************** package Sinfo is
*** 3993,4009 ****
  
        --  N_Attribute_Reference
        --  Sloc points to apostrophe
!       --  Prefix (Node3) (general expression, see note above)
!       --  Attribute_Name (Name2) identifier name from attribute designator
!       --  Expressions (List1) (set to No_List if no associated expressions)
!       --  Entity (Node4-Sem) used if the attribute yields a type
!       --  Associated_Node (Node4-Sem)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
!       --  Header_Size_Added (Flag11-Sem)
!       --  Redundant_Use (Flag13-Sem)
!       --  Must_Be_Byte_Aligned (Flag14-Sem)
        --  plus fields for expression
  
        --  Note: in Modify_Tree_For_C mode, Max and Min attributes are expanded
--- 3963,3979 ----
  
        --  N_Attribute_Reference
        --  Sloc points to apostrophe
!       --  Prefix (general expression, see note above)
!       --  Attribute_Name identifier name from attribute designator
!       --  Expressions (set to No_List if no associated expressions)
!       --  Entity used if the attribute yields a type
!       --  Associated_Node
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Is_Elaboration_Warnings_OK_Node
!       --  Header_Size_Added
!       --  Redundant_Use
!       --  Must_Be_Byte_Aligned
        --  plus fields for expression
  
        --  Note: in Modify_Tree_For_C mode, Max and Min attributes are expanded
*************** package Sinfo is
*** 4058,4072 ****
  
        --  N_Aggregate
        --  Sloc points to left parenthesis
!       --  Expressions (List1) (set to No_List if none or null record case)
!       --  Component_Associations (List2) (set to No_List if none)
!       --  Null_Record_Present (Flag17)
!       --  Aggregate_Bounds (Node3-Sem)
!       --  Associated_Node (Node4-Sem)
!       --  Compile_Time_Known_Aggregate (Flag18-Sem)
!       --  Expansion_Delayed (Flag11-Sem)
!       --  Has_Self_Reference (Flag13-Sem)
!       --  Is_Homogeneous_Aggregate (Flag14)
        --  plus fields for expression
  
        --  Note: this structure is used for both record and array aggregates
--- 4028,4042 ----
  
        --  N_Aggregate
        --  Sloc points to left parenthesis
!       --  Expressions (set to No_List if none or null record case)
!       --  Component_Associations (set to No_List if none)
!       --  Null_Record_Present
!       --  Aggregate_Bounds
!       --  Associated_Node
!       --  Compile_Time_Known_Aggregate
!       --  Expansion_Delayed
!       --  Has_Self_Reference
!       --  Is_Homogeneous_Aggregate
        --  plus fields for expression
  
        --  Note: this structure is used for both record and array aggregates
*************** package Sinfo is
*** 4121,4132 ****
  
        --  N_Component_Association
        --  Sloc points to first selector name
!       --  Choices (List1)
!       --  Expression (Node3) (empty if Box_Present)
!       --  Loop_Actions (List5-Sem)
!       --  Box_Present (Flag15)
!       --  Was_Default_Init_Box_Association (Flag14)
!       --  Inherited_Discriminant (Flag13)
  
        --  Note: this structure is used for both record component associations
        --  and array component associations, since the two cases aren't always
--- 4091,4102 ----
  
        --  N_Component_Association
        --  Sloc points to first selector name
!       --  Choices
!       --  Expression (empty if Box_Present)
!       --  Loop_Actions
!       --  Box_Present
!       --  Inherited_Discriminant
!       --  Binding_Chars
  
        --  Note: this structure is used for both record component associations
        --  and array component associations, since the two cases aren't always
*************** package Sinfo is
*** 4134,4142 ****
        --  list of selector names in the record aggregate case, or a list of
        --  discrete choices in the array aggregate case or an N_Others_Choice
        --  node (which appears as a singleton list). Box_Present gives support
!       --  to Ada 2005 (AI-287). Was_Default_Init_Box_Association is used for
!       --  determining the need for Default_Initial_Condition check on component
!       --  associations with a box.
  
        ----------------------------------
        -- 4.3.1  Component Choice List --
--- 4104,4114 ----
        --  list of selector names in the record aggregate case, or a list of
        --  discrete choices in the array aggregate case or an N_Others_Choice
        --  node (which appears as a singleton list). Box_Present gives support
!       --  to Ada 2005 (AI-287). Binding_Chars is only set if GNAT extensions
!       --  are enabled and the given component association occurs within a
!       --  choice_expression; in this case, it is the Name_Id, if any, specified
!       --  via either of two syntactic forms: "Foo => Bar is Abc" or
!       --  "Foo => <Abc>".
  
        ----------------------------------
        -- 4.3.1  Component Choice List --
*************** package Sinfo is
*** 4161,4173 ****
  
        --  N_Extension_Aggregate
        --  Sloc points to left parenthesis
!       --  Ancestor_Part (Node3)
!       --  Associated_Node (Node4-Sem)
!       --  Expressions (List1) (set to No_List if none or null record case)
!       --  Component_Associations (List2) (set to No_List if none)
!       --  Null_Record_Present (Flag17)
!       --  Expansion_Delayed (Flag11-Sem)
!       --  Has_Self_Reference (Flag13-Sem)
        --  plus fields for expression
  
        --------------------------
--- 4133,4145 ----
  
        --  N_Extension_Aggregate
        --  Sloc points to left parenthesis
!       --  Ancestor_Part
!       --  Associated_Node
!       --  Expressions (set to No_List if none or null record case)
!       --  Component_Associations (set to No_List if none)
!       --  Null_Record_Present
!       --  Expansion_Delayed
!       --  Has_Self_Reference
        --  plus fields for expression
  
        --------------------------
*************** package Sinfo is
*** 4223,4234 ****
  
        --  N_Iterated_Component_Association
        --  Sloc points to FOR
!       --  Defining_Identifier (Node1)
!       --  Iterator_Specification (Node2) (set to Empty if no Iterator_Spec)
!       --  Expression (Node3)
!       --  Discrete_Choices (List4)
!       --  Loop_Actions (List5-Sem)
!       --  Box_Present (Flag15)
  
        --  Note that Box_Present is always False, but it is intentionally added
        --  for completeness.
--- 4195,4206 ----
  
        --  N_Iterated_Component_Association
        --  Sloc points to FOR
!       --  Defining_Identifier
!       --  Iterator_Specification (set to Empty if no Iterator_Spec)
!       --  Expression
!       --  Discrete_Choices
!       --  Loop_Actions
!       --  Box_Present
  
        --  Note that Box_Present is always False, but it is intentionally added
        --  for completeness.
*************** package Sinfo is
*** 4239,4266 ****
  
        --  N_Delta_Aggregate
        --  Sloc points to left parenthesis
!       --  Expression (Node3)
!       --  Component_Associations (List2)
!       --  Etype (Node5-Sem)
  
        ---------------------------------
        --  3.4.5 Comtainer_Aggregates --
        ---------------------------------
  
        --  N_Iterated_Element_Association
!       --  Key_Expression (Node1)
!       --  Iterator_Specification (Node2)
!       --  Expression (Node3)
!       --  Loop_Parameter_Specification (Node4)
!       --  Loop_Actions (List5-Sem)
!       --  Box_Present (Flag15)
  
        --  Exactly one of Iterator_Specification or Loop_Parameter_
        --  specification is present. If the Key_Expression is absent,
        --  the construct is parsed as an Iterated_Component_Association,
        --  and legality checks are performed during semantic analysis.
  
!       --  Both iterated associations are Ada2020 features that are
        --  expanded during aggregate construction, and do not appear in
        --  expanded code.
  
--- 4211,4238 ----
  
        --  N_Delta_Aggregate
        --  Sloc points to left parenthesis
!       --  Expression
!       --  Component_Associations
!       --  Etype
  
        ---------------------------------
        --  3.4.5 Comtainer_Aggregates --
        ---------------------------------
  
        --  N_Iterated_Element_Association
!       --  Key_Expression
!       --  Iterator_Specification
!       --  Expression
!       --  Loop_Parameter_Specification
!       --  Loop_Actions
!       --  Box_Present
  
        --  Exactly one of Iterator_Specification or Loop_Parameter_
        --  specification is present. If the Key_Expression is absent,
        --  the construct is parsed as an Iterated_Component_Association,
        --  and legality checks are performed during semantic analysis.
  
!       --  Both iterated associations are Ada 2022 features that are
        --  expanded during aggregate construction, and do not appear in
        --  expanded code.
  
*************** package Sinfo is
*** 4373,4388 ****
  
        --  N_And_Then
        --  Sloc points to AND of AND THEN
!       --  Left_Opnd (Node2)
!       --  Right_Opnd (Node3)
!       --  Actions (List1-Sem)
        --  plus fields for expression
  
        --  N_Or_Else
        --  Sloc points to OR of OR ELSE
!       --  Left_Opnd (Node2)
!       --  Right_Opnd (Node3)
!       --  Actions (List1-Sem)
        --  plus fields for expression
  
        --  Note: The Actions field is used to hold actions associated with
--- 4345,4360 ----
  
        --  N_And_Then
        --  Sloc points to AND of AND THEN
!       --  Left_Opnd
!       --  Right_Opnd
!       --  Actions
        --  plus fields for expression
  
        --  N_Or_Else
        --  Sloc points to OR of OR ELSE
!       --  Left_Opnd
!       --  Right_Opnd
!       --  Actions
        --  plus fields for expression
  
        --  Note: The Actions field is used to hold actions associated with
*************** package Sinfo is
*** 4421,4438 ****
  
        --  N_In
        --  Sloc points to IN
!       --  Left_Opnd (Node2)
!       --  Right_Opnd (Node3)
!       --  Alternatives (List4) (set to No_List if only one set alternative)
!       --  No_Minimize_Eliminate (Flag17)
        --  plus fields for expression
  
        --  N_Not_In
        --  Sloc points to NOT of NOT IN
!       --  Left_Opnd (Node2)
!       --  Right_Opnd (Node3)
!       --  Alternatives (List4) (set to No_List if only one set alternative)
!       --  No_Minimize_Eliminate (Flag17)
        --  plus fields for expression
  
        --------------------
--- 4393,4410 ----
  
        --  N_In
        --  Sloc points to IN
!       --  Left_Opnd
!       --  Right_Opnd
!       --  Alternatives (set to No_List if only one set alternative)
!       --  No_Minimize_Eliminate
        --  plus fields for expression
  
        --  N_Not_In
        --  Sloc points to NOT of NOT IN
!       --  Left_Opnd
!       --  Right_Opnd
!       --  Alternatives (set to No_List if only one set alternative)
!       --  No_Minimize_Eliminate
        --  plus fields for expression
  
        --------------------
*************** package Sinfo is
*** 4465,4483 ****
  
        --  N_Op_And
        --  Sloc points to AND
!       --  Do_Length_Check (Flag4-Sem)
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Or
        --  Sloc points to OR
!       --  Do_Length_Check (Flag4-Sem)
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Xor
        --  Sloc points to XOR
!       --  Do_Length_Check (Flag4-Sem)
        --  plus fields for binary operator
        --  plus fields for expression
  
--- 4437,4455 ----
  
        --  N_Op_And
        --  Sloc points to AND
!       --  Do_Length_Check
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Or
        --  Sloc points to OR
!       --  Do_Length_Check
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Xor
        --  Sloc points to XOR
!       --  Do_Length_Check
        --  plus fields for binary operator
        --  plus fields for expression
  
*************** package Sinfo is
*** 4523,4561 ****
  
        --  N_Op_Concat
        --  Sloc points to &
!       --  Is_Component_Left_Opnd (Flag13-Sem)
!       --  Is_Component_Right_Opnd (Flag14-Sem)
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Multiply
        --  Sloc points to *
!       --  Rounded_Result (Flag18-Sem)
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Divide
        --  Sloc points to /
!       --  Do_Division_Check (Flag13-Sem)
!       --  Rounded_Result (Flag18-Sem)
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Mod
        --  Sloc points to MOD
!       --  Do_Division_Check (Flag13-Sem)
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Rem
        --  Sloc points to REM
!       --  Do_Division_Check (Flag13-Sem)
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Expon
        --  Sloc points to **
!       --  Is_Power_Of_2_For_Shift (Flag13-Sem)
        --  plus fields for binary operator
        --  plus fields for expression
  
--- 4495,4533 ----
  
        --  N_Op_Concat
        --  Sloc points to &
!       --  Is_Component_Left_Opnd
!       --  Is_Component_Right_Opnd
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Multiply
        --  Sloc points to *
!       --  Rounded_Result
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Divide
        --  Sloc points to /
!       --  Do_Division_Check
!       --  Rounded_Result
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Mod
        --  Sloc points to MOD
!       --  Do_Division_Check
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Rem
        --  Sloc points to REM
!       --  Do_Division_Check
        --  plus fields for binary operator
        --  plus fields for expression
  
        --  N_Op_Expon
        --  Sloc points to **
!       --  Is_Power_Of_2_For_Shift
        --  plus fields for binary operator
        --  plus fields for expression
  
*************** package Sinfo is
*** 4627,4637 ****
  
        --  N_If_Expression
        --  Sloc points to IF or ELSIF keyword
!       --  Expressions (List1)
!       --  Then_Actions (List2-Sem)
!       --  Else_Actions (List3-Sem)
!       --  Is_Elsif (Flag13) (set if comes from ELSIF)
!       --  Do_Overflow_Check (Flag17-Sem)
        --  plus fields for expression
  
        --  Expressions here is a three-element list, whose first element is the
--- 4599,4609 ----
  
        --  N_If_Expression
        --  Sloc points to IF or ELSIF keyword
!       --  Expressions
!       --  Then_Actions
!       --  Else_Actions
!       --  Is_Elsif (set if comes from ELSIF)
!       --  Do_Overflow_Check
        --  plus fields for expression
  
        --  Expressions here is a three-element list, whose first element is the
*************** package Sinfo is
*** 4666,4675 ****
  
        --  N_Case_Expression
        --  Sloc points to CASE
!       --  Expression (Node3) (the selecting expression)
!       --  Alternatives (List4) (the case expression alternatives)
!       --  Etype (Node5-Sem)
!       --  Do_Overflow_Check (Flag17-Sem)
  
        ----------------------------------------
        -- 4.5.7  Case Expression Alternative --
--- 4638,4647 ----
  
        --  N_Case_Expression
        --  Sloc points to CASE
!       --  Expression (the selecting expression)
!       --  Alternatives (the case expression alternatives)
!       --  Etype
!       --  Do_Overflow_Check
  
        ----------------------------------------
        -- 4.5.7  Case Expression Alternative --
*************** package Sinfo is
*** 4681,4690 ****
  
        --  N_Case_Expression_Alternative
        --  Sloc points to WHEN
!       --  Actions (List1)
!       --  Discrete_Choices (List4)
!       --  Expression (Node3)
!       --  Has_SP_Choice (Flag15-Sem)
  
        --  Note: The Actions field temporarily holds any actions associated with
        --  evaluation of the Expression. During expansion of the case expression
--- 4653,4662 ----
  
        --  N_Case_Expression_Alternative
        --  Sloc points to WHEN
!       --  Actions
!       --  Discrete_Choices
!       --  Expression
!       --  Has_SP_Choice
  
        --  Note: The Actions field temporarily holds any actions associated with
        --  evaluation of the Expression. During expansion of the case expression
*************** package Sinfo is
*** 4709,4718 ****
  
        --  N_Quantified_Expression
        --  Sloc points to FOR
!       --  Iterator_Specification (Node2)
!       --  Loop_Parameter_Specification (Node4)
!       --  Condition (Node1)
!       --  All_Present (Flag15)
  
        --------------------------
        -- 4.6  Type Conversion --
--- 4681,4690 ----
  
        --  N_Quantified_Expression
        --  Sloc points to FOR
!       --  Iterator_Specification
!       --  Loop_Parameter_Specification
!       --  Condition
!       --  All_Present
  
        --------------------------
        -- 4.6  Type Conversion --
*************** package Sinfo is
*** 4732,4738 ****
        --  Conversions from floating-point to integer are only handled in
        --  the case where Float_Truncate flag set. Other conversions from
        --  floating-point to integer (involving rounding) and all conversions
!       --  involving fixed-point types are handled by the expander.
  
        --  Sprint syntax if Float_Truncate set: X^(Y)
        --  Sprint syntax if Conversion_OK set X?(Y)
--- 4704,4711 ----
        --  Conversions from floating-point to integer are only handled in
        --  the case where Float_Truncate flag set. Other conversions from
        --  floating-point to integer (involving rounding) and all conversions
!       --  involving fixed-point types are handled by the expander, unless the
!       --  Conversion_OK flag is set.
  
        --  Sprint syntax if Float_Truncate set: X^(Y)
        --  Sprint syntax if Conversion_OK set X?(Y)
*************** package Sinfo is
*** 4744,4758 ****
  
        --  N_Type_Conversion
        --  Sloc points to first token of subtype mark
!       --  Subtype_Mark (Node4)
!       --  Expression (Node3)
!       --  Do_Discriminant_Check (Flag3-Sem)
!       --  Do_Length_Check (Flag4-Sem)
!       --  Float_Truncate (Flag11-Sem)
!       --  Do_Tag_Check (Flag13-Sem)
!       --  Conversion_OK (Flag14-Sem)
!       --  Do_Overflow_Check (Flag17-Sem)
!       --  Rounded_Result (Flag18-Sem)
        --  plus fields for expression
  
        --  Note: if a range check is required, then the Do_Range_Check flag
--- 4717,4730 ----
  
        --  N_Type_Conversion
        --  Sloc points to first token of subtype mark
!       --  Subtype_Mark
!       --  Expression
!       --  Do_Discriminant_Check
!       --  Do_Length_Check
!       --  Float_Truncate
!       --  Conversion_OK
!       --  Do_Overflow_Check
!       --  Rounded_Result
        --  plus fields for expression
  
        --  Note: if a range check is required, then the Do_Range_Check flag
*************** package Sinfo is
*** 4774,4782 ****
  
        --  N_Qualified_Expression
        --  Sloc points to apostrophe
!       --  Subtype_Mark (Node4)
!       --  Expression (Node3) expression or aggregate
!       --  Is_Qualified_Universal_Literal (Flag4-Sem)
        --  plus fields for expression
  
        --------------------
--- 4746,4754 ----
  
        --  N_Qualified_Expression
        --  Sloc points to apostrophe
!       --  Subtype_Mark
!       --  Expression expression or aggregate
!       --  Is_Qualified_Universal_Literal
        --  plus fields for expression
  
        --------------------
*************** package Sinfo is
*** 4796,4811 ****
  
        --  N_Allocator
        --  Sloc points to NEW
!       --  Expression (Node3) subtype indication or qualified expression
!       --  Subpool_Handle_Name (Node4) (set to Empty if not present)
!       --  Storage_Pool (Node1-Sem)
!       --  Procedure_To_Call (Node2-Sem)
!       --  Alloc_For_BIP_Return (Flag1-Sem)
!       --  Null_Exclusion_Present (Flag11)
!       --  No_Initialization (Flag13-Sem)
!       --  Is_Static_Coextension (Flag14-Sem)
!       --  Do_Storage_Check (Flag17-Sem)
!       --  Is_Dynamic_Coextension (Flag18-Sem)
        --  plus fields for expression
  
        --  Note: like all nodes, the N_Allocator has the Comes_From_Source flag.
--- 4768,4783 ----
  
        --  N_Allocator
        --  Sloc points to NEW
!       --  Expression subtype indication or qualified expression
!       --  Subpool_Handle_Name (set to Empty if not present)
!       --  Storage_Pool
!       --  Procedure_To_Call
!       --  Alloc_For_BIP_Return
!       --  Null_Exclusion_Present
!       --  No_Initialization
!       --  Is_Static_Coextension
!       --  Do_Storage_Check
!       --  Is_Dynamic_Coextension
        --  plus fields for expression
  
        --  Note: like all nodes, the N_Allocator has the Comes_From_Source flag.
*************** package Sinfo is
*** 4871,4877 ****
  
        --  N_Null_Statement
        --  Sloc points to NULL
!       --  Next_Rep_Item (Node5-Sem)
  
        ----------------
        -- 5.1  Label --
--- 4843,4849 ----
  
        --  N_Null_Statement
        --  Sloc points to NULL
!       --  Next_Rep_Item
  
        ----------------
        -- 5.1  Label --
*************** package Sinfo is
*** 4886,4893 ****
  
        --  N_Label
        --  Sloc points to <<
!       --  Identifier (Node1) direct name of statement identifier
!       --  Exception_Junk (Flag8-Sem)
  
        --  Note: Before Ada 2012, a label is always followed by a statement,
        --  and this is true in the tree even in Ada 2012 mode (the parser
--- 4858,4865 ----
  
        --  N_Label
        --  Sloc points to <<
!       --  Identifier direct name of statement identifier
!       --  Exception_Junk
  
        --  Note: Before Ada 2012, a label is always followed by a statement,
        --  and this is true in the tree even in Ada 2012 mode (the parser
*************** package Sinfo is
*** 4911,4930 ****
  
        --  N_Assignment_Statement
        --  Sloc points to :=
!       --  Name (Node2)
!       --  Expression (Node3)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Do_Discriminant_Check (Flag3-Sem)
!       --  Do_Length_Check (Flag4-Sem)
!       --  Forwards_OK (Flag5-Sem)
!       --  Backwards_OK (Flag6-Sem)
!       --  No_Ctrl_Actions (Flag7-Sem)
!       --  Has_Target_Names (Flag8-Sem)
!       --  Is_Elaboration_Code (Flag9-Sem)
!       --  Do_Tag_Check (Flag13-Sem)
!       --  Componentwise_Assignment (Flag14-Sem)
!       --  Suppress_Assignment_Checks (Flag18-Sem)
  
        --  Note: if a range check is required, then the Do_Range_Check flag
        --  is set in the Expression (right hand side), with the check being
--- 4883,4901 ----
  
        --  N_Assignment_Statement
        --  Sloc points to :=
!       --  Name
!       --  Expression
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Do_Discriminant_Check
!       --  Do_Length_Check
!       --  Forwards_OK
!       --  Backwards_OK
!       --  No_Ctrl_Actions
!       --  Has_Target_Names
!       --  Is_Elaboration_Code
!       --  Componentwise_Assignment
!       --  Suppress_Assignment_Checks
  
        --  Note: if a range check is required, then the Do_Range_Check flag
        --  is set in the Expression (right hand side), with the check being
*************** package Sinfo is
*** 4943,4951 ****
  
        --  N_Target_Name
        --  Sloc points to @
!       --  Etype (Node5-Sem)
  
!       --  Note (Ada 2020): node is used during analysis as a placeholder for
        --  the value of the LHS of the enclosing assignment statement. Node is
        --  eventually rewritten together with enclosing assignment, and backends
        --  are not aware of it.
--- 4914,4922 ----
  
        --  N_Target_Name
        --  Sloc points to @
!       --  Etype
  
!       --  Note (Ada 2022): node is used during analysis as a placeholder for
        --  the value of the LHS of the enclosing assignment statement. Node is
        --  eventually rewritten together with enclosing assignment, and backends
        --  are not aware of it.
*************** package Sinfo is
*** 4969,4986 ****
  
        --  N_If_Statement
        --  Sloc points to IF
!       --  Condition (Node1)
!       --  Then_Statements (List2)
!       --  Elsif_Parts (List3) (set to No_List if none present)
!       --  Else_Statements (List4) (set to No_List if no else part present)
!       --  End_Span (Uint5) (set to Uint_0 if expander generated)
!       --  From_Conditional_Expression (Flag1-Sem)
  
        --  N_Elsif_Part
        --  Sloc points to ELSIF
!       --  Condition (Node1)
!       --  Then_Statements (List2)
!       --  Condition_Actions (List3-Sem)
  
        --------------------
        -- 5.3  Condition --
--- 4940,4957 ----
  
        --  N_If_Statement
        --  Sloc points to IF
!       --  Condition
!       --  Then_Statements
!       --  Elsif_Parts (set to No_List if none present)
!       --  Else_Statements (set to No_List if no else part present)
!       --  End_Span (set to Uint_0 if expander generated)
!       --  From_Conditional_Expression
  
        --  N_Elsif_Part
        --  Sloc points to ELSIF
!       --  Condition
!       --  Then_Statements
!       --  Condition_Actions
  
        --------------------
        -- 5.3  Condition --
*************** package Sinfo is
*** 5004,5013 ****
  
        --  N_Case_Statement
        --  Sloc points to CASE
!       --  Expression (Node3)
!       --  Alternatives (List4)
!       --  End_Span (Uint5) (set to Uint_0 if expander generated)
!       --  From_Conditional_Expression (Flag1-Sem)
  
        --  Note: Before Ada 2012, a pragma in a statement sequence is always
        --  followed by a statement, and this is true in the tree even in Ada
--- 4975,4984 ----
  
        --  N_Case_Statement
        --  Sloc points to CASE
!       --  Expression
!       --  Alternatives
!       --  End_Span (set to Uint_0 if expander generated)
!       --  From_Conditional_Expression
  
        --  Note: Before Ada 2012, a pragma in a statement sequence is always
        --  followed by a statement, and this is true in the tree even in Ada
*************** package Sinfo is
*** 5024,5037 ****
  
        --  N_Case_Statement_Alternative
        --  Sloc points to WHEN
!       --  Discrete_Choices (List4)
!       --  Statements (List3)
!       --  Has_SP_Choice (Flag15-Sem)
  
        --  Note: in the list of Discrete_Choices, the tree passed to the back
        --  end does not have choice entries corresponding to names of statically
        --  predicated subtypes. Such entries are always expanded out to the list
!       --  of equivalent values or ranges.
  
        -------------------------
        -- 5.5  Loop Statement --
--- 4995,5013 ----
  
        --  N_Case_Statement_Alternative
        --  Sloc points to WHEN
!       --  Discrete_Choices
!       --  Statements
!       --  Has_SP_Choice
!       --  Multidefined_Bindings
  
        --  Note: in the list of Discrete_Choices, the tree passed to the back
        --  end does not have choice entries corresponding to names of statically
        --  predicated subtypes. Such entries are always expanded out to the list
!       --  of equivalent values or ranges. Multidefined_Bindings is True iff
!       --  more than one choice is present and each choice contains
!       --  at least one component association having a non-null Binding_Chars
!       --  attribute; this can only occur if GNAT extensions are enabled
!       --  and the type of the case selector is composite.
  
        -------------------------
        -- 5.5  Loop Statement --
*************** package Sinfo is
*** 5061,5073 ****
  
        --  N_Loop_Statement
        --  Sloc points to LOOP
!       --  Identifier (Node1) loop identifier (set to Empty if no identifier)
!       --  Iteration_Scheme (Node2) (set to Empty if no iteration scheme)
!       --  Statements (List3)
!       --  End_Label (Node4)
!       --  Has_Created_Identifier (Flag15)
!       --  Is_Null_Loop (Flag16)
!       --  Suppress_Loop_Warnings (Flag17)
  
        --  Note: the parser fills in the Identifier field if there is an
        --  explicit loop identifier. Otherwise the parser leaves this field
--- 5037,5049 ----
  
        --  N_Loop_Statement
        --  Sloc points to LOOP
!       --  Identifier loop identifier (set to Empty if no identifier)
!       --  Iteration_Scheme (set to Empty if no iteration scheme)
!       --  Statements
!       --  End_Label
!       --  Has_Created_Identifier
!       --  Is_Null_Loop
!       --  Suppress_Loop_Warnings
  
        --  Note: the parser fills in the Identifier field if there is an
        --  explicit loop identifier. Otherwise the parser leaves this field
*************** package Sinfo is
*** 5095,5104 ****
  
        --  N_Iteration_Scheme
        --  Sloc points to WHILE or FOR
!       --  Condition (Node1) (set to Empty if FOR case)
!       --  Condition_Actions (List3-Sem)
!       --  Iterator_Specification (Node2) (set to Empty if WHILE case)
!       --  Loop_Parameter_Specification (Node4) (set to Empty if WHILE case)
  
        ---------------------------------------
        -- 5.5  Loop Parameter Specification --
--- 5071,5080 ----
  
        --  N_Iteration_Scheme
        --  Sloc points to WHILE or FOR
!       --  Condition (set to Empty if FOR case)
!       --  Condition_Actions
!       --  Iterator_Specification (set to Empty if WHILE case)
!       --  Loop_Parameter_Specification (set to Empty if WHILE case)
  
        ---------------------------------------
        -- 5.5  Loop Parameter Specification --
*************** package Sinfo is
*** 5108,5121 ****
        --    DEFINING_IDENTIFIER in [reverse] DISCRETE_SUBTYPE_DEFINITION
        --    [Iterator_Filter]
  
!       --  Note; the optional Iterator_Filter is an Ada_2020 construct.
  
        --  N_Loop_Parameter_Specification
        --  Sloc points to first identifier
!       --  Defining_Identifier (Node1)
!       --  Reverse_Present (Flag15)
!       --  Iterator_Filter (Node3) (set to Empty if not present)
!       --  Discrete_Subtype_Definition (Node4)
  
        -----------------------------------
        -- 5.5.1  Iterator Specification --
--- 5084,5097 ----
        --    DEFINING_IDENTIFIER in [reverse] DISCRETE_SUBTYPE_DEFINITION
        --    [Iterator_Filter]
  
!       --  Note: the optional Iterator_Filter is an Ada 2022 construct.
  
        --  N_Loop_Parameter_Specification
        --  Sloc points to first identifier
!       --  Defining_Identifier
!       --  Reverse_Present
!       --  Iterator_Filter (set to Empty if not present)
!       --  Discrete_Subtype_Definition
  
        -----------------------------------
        -- 5.5.1  Iterator Specification --
*************** package Sinfo is
*** 5127,5138 ****
  
        --  N_Iterator_Specification
        --  Sloc points to defining identifier
!       --  Defining_Identifier (Node1)
!       --  Name (Node2)
!       --  Reverse_Present (Flag15)
!       --  Of_Present (Flag16)
!       --  Iterator_Filter (Node3) (set to Empty if not present)
!       --  Subtype_Indication (Node5)
  
        --  Note: The Of_Present flag distinguishes the two forms
  
--- 5103,5114 ----
  
        --  N_Iterator_Specification
        --  Sloc points to defining identifier
!       --  Defining_Identifier
!       --  Name
!       --  Reverse_Present
!       --  Of_Present
!       --  Iterator_Filter (set to Empty if not present)
!       --  Subtype_Indication
  
        --  Note: The Of_Present flag distinguishes the two forms
  
*************** package Sinfo is
*** 5179,5197 ****
  
        --  N_Block_Statement
        --  Sloc points to DECLARE or BEGIN
!       --  Identifier (Node1) block direct name (set to Empty if not present)
!       --  Declarations (List2) (set to No_List if no DECLARE part)
!       --  Handled_Statement_Sequence (Node4)
!       --  Activation_Chain_Entity (Node3-Sem)
!       --  Cleanup_Actions (List5-Sem)
!       --  Has_Created_Identifier (Flag15)
!       --  Is_Asynchronous_Call_Block (Flag7)
!       --  Is_Task_Allocation_Block (Flag6)
!       --  Exception_Junk (Flag8-Sem)
!       --  Is_Abort_Block (Flag4-Sem)
!       --  Is_Finalization_Wrapper (Flag9-Sem)
!       --  Is_Initialization_Block (Flag1-Sem)
!       --  Is_Task_Master (Flag5-Sem)
  
        -------------------------
        -- 5.7  Exit Statement --
--- 5155,5173 ----
  
        --  N_Block_Statement
        --  Sloc points to DECLARE or BEGIN
!       --  Identifier block direct name (set to Empty if not present)
!       --  Declarations (set to No_List if no DECLARE part)
!       --  Handled_Statement_Sequence
!       --  Activation_Chain_Entity
!       --  Cleanup_Actions
!       --  Has_Created_Identifier
!       --  Is_Asynchronous_Call_Block
!       --  Is_Task_Allocation_Block
!       --  Exception_Junk
!       --  Is_Abort_Block
!       --  Is_Finalization_Wrapper
!       --  Is_Initialization_Block
!       --  Is_Task_Master
  
        -------------------------
        -- 5.7  Exit Statement --
*************** package Sinfo is
*** 5205,5213 ****
  
        --  N_Exit_Statement
        --  Sloc points to EXIT
!       --  Name (Node2) (set to Empty if no loop name present)
!       --  Condition (Node1) (set to Empty if no WHEN part present)
!       --  Next_Exit_Statement (Node3-Sem): Next exit on chain
  
        -------------------------
        -- 5.9  Goto Statement --
--- 5181,5189 ----
  
        --  N_Exit_Statement
        --  Sloc points to EXIT
!       --  Name (set to Empty if no loop name present)
!       --  Condition (set to Empty if no WHEN part present)
!       --  Next_Exit_Statement : Next exit on chain
  
        -------------------------
        -- 5.9  Goto Statement --
*************** package Sinfo is
*** 5217,5224 ****
  
        --  N_Goto_Statement
        --  Sloc points to GOTO
!       --  Name (Node2)
!       --  Exception_Junk (Flag8-Sem)
  
        ---------------------------------
        -- 6.1  Subprogram Declaration --
--- 5193,5200 ----
  
        --  N_Goto_Statement
        --  Sloc points to GOTO
!       --  Name
!       --  Exception_Junk
  
        ---------------------------------
        -- 6.1  Subprogram Declaration --
*************** package Sinfo is
*** 5230,5241 ****
  
        --  N_Subprogram_Declaration
        --  Sloc points to FUNCTION or PROCEDURE
!       --  Specification (Node1)
!       --  Body_To_Inline (Node3-Sem)
!       --  Corresponding_Body (Node5-Sem)
!       --  Parent_Spec (Node4-Sem)
!       --  Is_Entry_Barrier_Function (Flag8-Sem)
!       --  Is_Task_Body_Procedure (Flag1-Sem)
  
        ------------------------------------------
        -- 6.1  Abstract Subprogram Declaration --
--- 5206,5217 ----
  
        --  N_Subprogram_Declaration
        --  Sloc points to FUNCTION or PROCEDURE
!       --  Specification
!       --  Body_To_Inline
!       --  Corresponding_Body
!       --  Parent_Spec
!       --  Is_Entry_Barrier_Function
!       --  Is_Task_Body_Procedure
  
        ------------------------------------------
        -- 6.1  Abstract Subprogram Declaration --
*************** package Sinfo is
*** 5247,5253 ****
  
        --  N_Abstract_Subprogram_Declaration
        --  Sloc points to ABSTRACT
!       --  Specification (Node1)
  
        -----------------------------------
        -- 6.1  Subprogram Specification --
--- 5223,5229 ----
  
        --  N_Abstract_Subprogram_Declaration
        --  Sloc points to ABSTRACT
!       --  Specification
  
        -----------------------------------
        -- 6.1  Subprogram Specification --
*************** package Sinfo is
*** 5264,5286 ****
  
        --  N_Function_Specification
        --  Sloc points to FUNCTION
!       --  Defining_Unit_Name (Node1) (the designator)
!       --  Parameter_Specifications (List3) (set to No_List if no formal part)
!       --  Null_Exclusion_Present (Flag11)
!       --  Result_Definition (Node4) for result subtype
!       --  Generic_Parent (Node5-Sem)
!       --  Must_Override (Flag14) set if overriding indicator present
!       --  Must_Not_Override (Flag15) set if not_overriding indicator present
  
        --  N_Procedure_Specification
        --  Sloc points to PROCEDURE
!       --  Defining_Unit_Name (Node1)
!       --  Null_Statement (Node2-Sem) NULL statement for body, if Null_Present
!       --  Parameter_Specifications (List3) (set to No_List if no formal part)
!       --  Generic_Parent (Node5-Sem)
!       --  Null_Present (Flag13) set for null procedure case (Ada 2005 feature)
!       --  Must_Override (Flag14) set if overriding indicator present
!       --  Must_Not_Override (Flag15) set if not_overriding indicator present
  
        --  Note: overriding indicator is an Ada 2005 feature
  
--- 5240,5262 ----
  
        --  N_Function_Specification
        --  Sloc points to FUNCTION
!       --  Defining_Unit_Name (the designator)
!       --  Parameter_Specifications (set to No_List if no formal part)
!       --  Null_Exclusion_Present
!       --  Result_Definition for result subtype
!       --  Generic_Parent
!       --  Must_Override set if overriding indicator present
!       --  Must_Not_Override set if not_overriding indicator present
  
        --  N_Procedure_Specification
        --  Sloc points to PROCEDURE
!       --  Defining_Unit_Name
!       --  Null_Statement NULL statement for body, if Null_Present
!       --  Parameter_Specifications (set to No_List if no formal part)
!       --  Generic_Parent
!       --  Null_Present set for null procedure case (Ada 2005 feature)
!       --  Must_Override set if overriding indicator present
!       --  Must_Not_Override set if not_overriding indicator present
  
        --  Note: overriding indicator is an Ada 2005 feature
  
*************** package Sinfo is
*** 5297,5304 ****
  
        --  N_Designator
        --  Sloc points to period
!       --  Name (Node2) holds the parent unit name
!       --  Identifier (Node1)
  
        --  Note: Name is always non-Empty, since this node is only used for the
        --  case where a parent library unit package name is present.
--- 5273,5280 ----
  
        --  N_Designator
        --  Sloc points to period
!       --  Name holds the parent unit name
!       --  Identifier
  
        --  Note: Name is always non-Empty, since this node is only used for the
        --  case where a parent library unit package name is present.
*************** package Sinfo is
*** 5328,5335 ****
  
        --  N_Defining_Program_Unit_Name
        --  Sloc points to period
!       --  Name (Node2) holds the parent unit name
!       --  Defining_Identifier (Node1)
  
        --  Note: Name is always non-Empty, since this node is only used for the
        --  case where a parent unit name is present.
--- 5304,5311 ----
  
        --  N_Defining_Program_Unit_Name
        --  Sloc points to period
!       --  Name holds the parent unit name
!       --  Defining_Identifier
  
        --  Note: Name is always non-Empty, since this node is only used for the
        --  case where a parent unit name is present.
*************** package Sinfo is
*** 5350,5362 ****
  
        --  N_Operator_Symbol
        --  Sloc points to literal
!       --  Chars (Name1) contains the Name_Id for the operator symbol
!       --  Strval (Str3) Id of string value. This is used if the operator
        --   symbol turns out to be a normal string after all.
!       --  Entity (Node4-Sem)
!       --  Associated_Node (Node4-Sem)
!       --  Etype (Node5-Sem)
!       --  Has_Private_View (Flag11-Sem) set in generic units
  
        --  Note: the Strval field may be set to No_String for generated
        --  operator symbols that are known not to be string literals
--- 5326,5338 ----
  
        --  N_Operator_Symbol
        --  Sloc points to literal
!       --  Chars contains the Name_Id for the operator symbol
!       --  Strval Id of string value. This is used if the operator
        --   symbol turns out to be a normal string after all.
!       --  Entity
!       --  Associated_Node Note this is shared with Entity
!       --  Etype
!       --  Has_Private_View (set in generic units)
  
        --  Note: the Strval field may be set to No_String for generated
        --  operator symbols that are known not to be string literals
*************** package Sinfo is
*** 5382,5391 ****
  
        --  N_Defining_Operator_Symbol
        --  Sloc points to literal
!       --  Chars (Name1) contains the Name_Id for the operator symbol
!       --  Next_Entity (Node2-Sem)
!       --  Scope (Node3-Sem)
!       --  Etype (Node5-Sem)
  
        ----------------------------
        -- 6.1  Parameter Profile --
--- 5358,5367 ----
  
        --  N_Defining_Operator_Symbol
        --  Sloc points to literal
!       --  Chars contains the Name_Id for the operator symbol
!       --  Next_Entity
!       --  Scope
!       --  Etype
  
        ----------------------------
        -- 6.1  Parameter Profile --
*************** package Sinfo is
*** 5433,5449 ****
  
        --  N_Parameter_Specification
        --  Sloc points to first identifier
!       --  Defining_Identifier (Node1)
!       --  Aliased_Present (Flag4)
!       --  In_Present (Flag15)
!       --  Out_Present (Flag17)
!       --  Null_Exclusion_Present (Flag11)
!       --  Parameter_Type (Node2) subtype mark or access definition
!       --  Expression (Node3) (set to Empty if no default expression present)
!       --  Do_Accessibility_Check (Flag13-Sem)
!       --  More_Ids (Flag5) (set to False if no more identifiers in list)
!       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
!       --  Default_Expression (Node5-Sem)
  
        ---------------
        -- 6.1  Mode --
--- 5409,5424 ----
  
        --  N_Parameter_Specification
        --  Sloc points to first identifier
!       --  Defining_Identifier
!       --  Aliased_Present
!       --  In_Present
!       --  Out_Present
!       --  Null_Exclusion_Present
!       --  Parameter_Type subtype mark or access definition
!       --  Expression (set to Empty if no default expression present)
!       --  More_Ids (set to False if no more identifiers in list)
!       --  Prev_Ids (set to False if no previous identifiers in list)
!       --  Default_Expression
  
        ---------------
        -- 6.1  Mode --
*************** package Sinfo is
*** 5468,5489 ****
  
        --  N_Subprogram_Body
        --  Sloc points to FUNCTION or PROCEDURE
!       --  Specification (Node1)
!       --  Declarations (List2)
!       --  Handled_Statement_Sequence (Node4)
!       --  Activation_Chain_Entity (Node3-Sem)
!       --  Corresponding_Spec (Node5-Sem)
!       --  Acts_As_Spec (Flag4-Sem)
!       --  Bad_Is_Detected (Flag15) used only by parser
!       --  Do_Storage_Check (Flag17-Sem)
!       --  Has_Relative_Deadline_Pragma (Flag9-Sem)
!       --  Is_Entry_Barrier_Function (Flag8-Sem)
!       --  Is_Protected_Subprogram_Body (Flag7-Sem)
!       --  Is_Task_Body_Procedure (Flag1-Sem)
!       --  Is_Task_Master (Flag5-Sem)
!       --  Was_Attribute_Reference (Flag2-Sem)
!       --  Was_Expression_Function (Flag18-Sem)
!       --  Was_Originally_Stub (Flag13-Sem)
  
        -----------------------------------
        -- 6.4  Procedure Call Statement --
--- 5443,5464 ----
  
        --  N_Subprogram_Body
        --  Sloc points to FUNCTION or PROCEDURE
!       --  Specification
!       --  Declarations
!       --  Handled_Statement_Sequence
!       --  Activation_Chain_Entity
!       --  Corresponding_Spec
!       --  Acts_As_Spec
!       --  Bad_Is_Detected used only by parser
!       --  Do_Storage_Check
!       --  Has_Relative_Deadline_Pragma
!       --  Is_Entry_Barrier_Function
!       --  Is_Protected_Subprogram_Body
!       --  Is_Task_Body_Procedure
!       --  Is_Task_Master
!       --  Was_Attribute_Reference
!       --  Was_Expression_Function
!       --  Was_Originally_Stub
  
        -----------------------------------
        -- 6.4  Procedure Call Statement --
*************** package Sinfo is
*** 5500,5516 ****
  
        --  N_Procedure_Call_Statement
        --  Sloc points to first token of name or prefix
!       --  Name (Node2) stores name or prefix
!       --  Parameter_Associations (List3) (set to No_List if no
        --   actual parameter part)
!       --  First_Named_Actual (Node4-Sem)
!       --  Controlling_Argument (Node1-Sem) (set to Empty if not dispatching)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
!       --  No_Elaboration_Check (Flag4-Sem)
!       --  Do_Tag_Check (Flag13-Sem)
!       --  Is_Known_Guaranteed_ABE (Flag18-Sem)
        --  plus fields for expression
  
        --  If any IN parameter requires a range check, then the corresponding
--- 5475,5490 ----
  
        --  N_Procedure_Call_Statement
        --  Sloc points to first token of name or prefix
!       --  Name stores name or prefix
!       --  Parameter_Associations (set to No_List if no
        --   actual parameter part)
!       --  First_Named_Actual
!       --  Controlling_Argument (set to Empty if not dispatching)
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Is_Elaboration_Warnings_OK_Node
!       --  No_Elaboration_Check
!       --  Is_Known_Guaranteed_ABE
        --  plus fields for expression
  
        --  If any IN parameter requires a range check, then the corresponding
*************** package Sinfo is
*** 5533,5551 ****
  
        --  N_Function_Call
        --  Sloc points to first token of name or prefix
!       --  Name (Node2) stores name or prefix
!       --  Parameter_Associations (List3) (set to No_List if no
        --   actual parameter part)
!       --  First_Named_Actual (Node4-Sem)
!       --  Controlling_Argument (Node1-Sem) (set to Empty if not dispatching)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
!       --  No_Elaboration_Check (Flag4-Sem)
!       --  Is_Expanded_Build_In_Place_Call (Flag11-Sem)
!       --  Do_Tag_Check (Flag13-Sem)
!       --  No_Side_Effect_Removal (Flag17-Sem)
!       --  Is_Known_Guaranteed_ABE (Flag18-Sem)
        --  plus fields for expression
  
        --------------------------------
--- 5507,5524 ----
  
        --  N_Function_Call
        --  Sloc points to first token of name or prefix
!       --  Name stores name or prefix
!       --  Parameter_Associations (set to No_List if no
        --   actual parameter part)
!       --  First_Named_Actual
!       --  Controlling_Argument (set to Empty if not dispatching)
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Is_Elaboration_Warnings_OK_Node
!       --  No_Elaboration_Check
!       --  Is_Expanded_Build_In_Place_Call
!       --  No_Side_Effect_Removal
!       --  Is_Known_Guaranteed_ABE
        --  plus fields for expression
  
        --------------------------------
*************** package Sinfo is
*** 5569,5578 ****
  
        --  N_Parameter_Association
        --  Sloc points to formal parameter
!       --  Selector_Name (Node2) (always non-Empty)
!       --  Explicit_Actual_Parameter (Node3)
!       --  Next_Named_Actual (Node4-Sem)
!       --  Is_Accessibility_Actual (Flag13-Sem)
  
        ---------------------------
        -- 6.4  Actual Parameter --
--- 5542,5551 ----
  
        --  N_Parameter_Association
        --  Sloc points to formal parameter
!       --  Selector_Name (always non-Empty)
!       --  Explicit_Actual_Parameter
!       --  Next_Named_Actual
!       --  Is_Accessibility_Actual
  
        ---------------------------
        -- 6.4  Actual Parameter --
*************** package Sinfo is
*** 5602,5614 ****
  
        --  N_Simple_Return_Statement
        --  Sloc points to RETURN
!       --  Return_Statement_Entity (Node5-Sem)
!       --  Expression (Node3) (set to Empty if no expression present)
!       --  Storage_Pool (Node1-Sem)
!       --  Procedure_To_Call (Node2-Sem)
!       --  Do_Tag_Check (Flag13-Sem)
!       --  By_Ref (Flag5-Sem)
!       --  Comes_From_Extended_Return_Statement (Flag18-Sem)
  
        --  Note: Return_Statement_Entity points to an E_Return_Statement
  
--- 5575,5586 ----
  
        --  N_Simple_Return_Statement
        --  Sloc points to RETURN
!       --  Return_Statement_Entity
!       --  Expression (set to Empty if no expression present)
!       --  Storage_Pool
!       --  Procedure_To_Call
!       --  By_Ref
!       --  Comes_From_Extended_Return_Statement
  
        --  Note: Return_Statement_Entity points to an E_Return_Statement
  
*************** package Sinfo is
*** 5617,5629 ****
  
        --  N_Extended_Return_Statement
        --  Sloc points to RETURN
!       --  Return_Statement_Entity (Node5-Sem)
!       --  Return_Object_Declarations (List3)
!       --  Handled_Statement_Sequence (Node4) (set to Empty if not present)
!       --  Storage_Pool (Node1-Sem)
!       --  Procedure_To_Call (Node2-Sem)
!       --  Do_Tag_Check (Flag13-Sem)
!       --  By_Ref (Flag5-Sem)
  
        --  Note: Return_Statement_Entity points to an E_Return_Statement.
  
--- 5589,5600 ----
  
        --  N_Extended_Return_Statement
        --  Sloc points to RETURN
!       --  Return_Statement_Entity
!       --  Return_Object_Declarations
!       --  Handled_Statement_Sequence (set to Empty if not present)
!       --  Storage_Pool
!       --  Procedure_To_Call
!       --  By_Ref
  
        --  Note: Return_Statement_Entity points to an E_Return_Statement.
  
*************** package Sinfo is
*** 5654,5662 ****
  
        --  N_Expression_Function
        --  Sloc points to FUNCTION
!       --  Specification (Node1)
!       --  Expression (Node3)
!       --  Corresponding_Spec (Node5-Sem)
  
        ------------------------------
        -- 7.1  Package Declaration --
--- 5625,5633 ----
  
        --  N_Expression_Function
        --  Sloc points to FUNCTION
!       --  Specification
!       --  Expression
!       --  Corresponding_Spec
  
        ------------------------------
        -- 7.1  Package Declaration --
*************** package Sinfo is
*** 5670,5679 ****
  
        --  N_Package_Declaration
        --  Sloc points to PACKAGE
!       --  Specification (Node1)
!       --  Corresponding_Body (Node5-Sem)
!       --  Parent_Spec (Node4-Sem)
!       --  Activation_Chain_Entity (Node3-Sem)
  
        --------------------------------
        -- 7.1  Package Specification --
--- 5641,5650 ----
  
        --  N_Package_Declaration
        --  Sloc points to PACKAGE
!       --  Specification
!       --  Corresponding_Body
!       --  Parent_Spec
!       --  Activation_Chain_Entity
  
        --------------------------------
        -- 7.1  Package Specification --
*************** package Sinfo is
*** 5690,5702 ****
  
        --  N_Package_Specification
        --  Sloc points to PACKAGE
!       --  Defining_Unit_Name (Node1)
!       --  Visible_Declarations (List2)
!       --  Private_Declarations (List3) (set to No_List if no private
        --   part present)
!       --  End_Label (Node4)
!       --  Generic_Parent (Node5-Sem)
!       --  Limited_View_Installed (Flag18-Sem)
  
        -----------------------
        -- 7.1  Package Body --
--- 5661,5673 ----
  
        --  N_Package_Specification
        --  Sloc points to PACKAGE
!       --  Defining_Unit_Name
!       --  Visible_Declarations
!       --  Private_Declarations (set to No_List if no private
        --   part present)
!       --  End_Label
!       --  Generic_Parent
!       --  Limited_View_Installed
  
        -----------------------
        -- 7.1  Package Body --
*************** package Sinfo is
*** 5713,5723 ****
  
        --  N_Package_Body
        --  Sloc points to PACKAGE
!       --  Defining_Unit_Name (Node1)
!       --  Declarations (List2)
!       --  Handled_Statement_Sequence (Node4) (set to Empty if no HSS present)
!       --  Corresponding_Spec (Node5-Sem)
!       --  Was_Originally_Stub (Flag13-Sem)
  
        --  Note: if a source level package does not contain a handled sequence
        --  of statements, then the parser supplies a dummy one with a null
--- 5684,5694 ----
  
        --  N_Package_Body
        --  Sloc points to PACKAGE
!       --  Defining_Unit_Name
!       --  Declarations
!       --  Handled_Statement_Sequence (set to Empty if no HSS present)
!       --  Corresponding_Spec
!       --  Was_Originally_Stub
  
        --  Note: if a source level package does not contain a handled sequence
        --  of statements, then the parser supplies a dummy one with a null
*************** package Sinfo is
*** 5738,5750 ****
  
        --  N_Private_Type_Declaration
        --  Sloc points to TYPE
!       --  Defining_Identifier (Node1)
!       --  Discriminant_Specifications (List4) (set to No_List if no
        --   discriminant part)
!       --  Unknown_Discriminants_Present (Flag13) set if (<>) discriminant
!       --  Abstract_Present (Flag4)
!       --  Tagged_Present (Flag15)
!       --  Limited_Present (Flag17)
  
        ----------------------------------------
        -- 7.4  Private Extension Declaration --
--- 5709,5721 ----
  
        --  N_Private_Type_Declaration
        --  Sloc points to TYPE
!       --  Defining_Identifier
!       --  Discriminant_Specifications (set to No_List if no
        --   discriminant part)
!       --  Unknown_Discriminants_Present set if (<>) discriminant
!       --  Abstract_Present
!       --  Tagged_Present
!       --  Limited_Present
  
        ----------------------------------------
        -- 7.4  Private Extension Declaration --
*************** package Sinfo is
*** 5761,5776 ****
  
        --  N_Private_Extension_Declaration
        --  Sloc points to TYPE
!       --  Defining_Identifier (Node1)
!       --  Uninitialized_Variable (Node3-Sem)
!       --  Discriminant_Specifications (List4) (set to No_List if no
        --   discriminant part)
!       --  Unknown_Discriminants_Present (Flag13) set if (<>) discriminant
!       --  Abstract_Present (Flag4)
!       --  Limited_Present (Flag17)
!       --  Synchronized_Present (Flag7)
!       --  Subtype_Indication (Node5)
!       --  Interface_List (List2) (set to No_List if none)
  
        ---------------------
        -- 8.4  Use Clause --
--- 5732,5747 ----
  
        --  N_Private_Extension_Declaration
        --  Sloc points to TYPE
!       --  Defining_Identifier
!       --  Uninitialized_Variable
!       --  Discriminant_Specifications (set to No_List if no
        --   discriminant part)
!       --  Unknown_Discriminants_Present set if (<>) discriminant
!       --  Abstract_Present
!       --  Limited_Present
!       --  Synchronized_Present
!       --  Subtype_Indication
!       --  Interface_List (set to No_List if none)
  
        ---------------------
        -- 8.4  Use Clause --
*************** package Sinfo is
*** 5786,5799 ****
  
        --  N_Use_Package_Clause
        --  Sloc points to USE
!       --  Prev_Use_Clause (Node1-Sem)
!       --  Name (Node2)
!       --  Next_Use_Clause (Node3-Sem)
!       --  Associated_Node (Node4-Sem)
!       --  Hidden_By_Use_Clause (Elist5-Sem)
!       --  Is_Effective_Use_Clause (Flag1)
!       --  More_Ids (Flag5) (set to False if no more identifiers in list)
!       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  
        --------------------------
        -- 8.4  Use Type Clause --
--- 5757,5770 ----
  
        --  N_Use_Package_Clause
        --  Sloc points to USE
!       --  Prev_Use_Clause
!       --  Name
!       --  Next_Use_Clause
!       --  Associated_Node
!       --  Hidden_By_Use_Clause
!       --  Is_Effective_Use_Clause
!       --  More_Ids (set to False if no more identifiers in list)
!       --  Prev_Ids (set to False if no previous identifiers in list)
  
        --------------------------
        -- 8.4  Use Type Clause --
*************** package Sinfo is
*** 5807,5821 ****
  
        --  N_Use_Type_Clause
        --  Sloc points to USE
!       --  Prev_Use_Clause (Node1-Sem)
!       --  Used_Operations (Elist2-Sem)
!       --  Next_Use_Clause (Node3-Sem)
!       --  Subtype_Mark (Node4)
!       --  Hidden_By_Use_Clause (Elist5-Sem)
!       --  Is_Effective_Use_Clause (Flag1)
!       --  More_Ids (Flag5) (set to False if no more identifiers in list)
!       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
!       --  All_Present (Flag15)
  
        -------------------------------
        -- 8.5  Renaming Declaration --
--- 5778,5792 ----
  
        --  N_Use_Type_Clause
        --  Sloc points to USE
!       --  Prev_Use_Clause
!       --  Used_Operations
!       --  Next_Use_Clause
!       --  Subtype_Mark
!       --  Hidden_By_Use_Clause
!       --  Is_Effective_Use_Clause
!       --  More_Ids (set to False if no more identifiers in list)
!       --  Prev_Ids (set to False if no previous identifiers in list)
!       --  All_Present
  
        -------------------------------
        -- 8.5  Renaming Declaration --
*************** package Sinfo is
*** 5846,5857 ****
  
        --  N_Object_Renaming_Declaration
        --  Sloc points to first identifier
!       --  Defining_Identifier (Node1)
!       --  Null_Exclusion_Present (Flag11) (set to False if not present)
!       --  Subtype_Mark (Node4) (set to Empty if not present)
!       --  Access_Definition (Node3) (set to Empty if not present)
!       --  Name (Node2)
!       --  Corresponding_Generic_Association (Node5-Sem)
  
        -----------------------------------------
        -- 8.5  Exception Renaming Declaration --
--- 5817,5828 ----
  
        --  N_Object_Renaming_Declaration
        --  Sloc points to first identifier
!       --  Defining_Identifier
!       --  Null_Exclusion_Present (set to False if not present)
!       --  Subtype_Mark (set to Empty if not present)
!       --  Access_Definition (set to Empty if not present)
!       --  Name
!       --  Corresponding_Generic_Association
  
        -----------------------------------------
        -- 8.5  Exception Renaming Declaration --
*************** package Sinfo is
*** 5863,5870 ****
  
        --  N_Exception_Renaming_Declaration
        --  Sloc points to first identifier
!       --  Defining_Identifier (Node1)
!       --  Name (Node2)
  
        ---------------------------------------
        -- 8.5  Package Renaming Declaration --
--- 5834,5841 ----
  
        --  N_Exception_Renaming_Declaration
        --  Sloc points to first identifier
!       --  Defining_Identifier
!       --  Name
  
        ---------------------------------------
        -- 8.5  Package Renaming Declaration --
*************** package Sinfo is
*** 5876,5884 ****
  
        --  N_Package_Renaming_Declaration
        --  Sloc points to PACKAGE
!       --  Defining_Unit_Name (Node1)
!       --  Name (Node2)
!       --  Parent_Spec (Node4-Sem)
  
        ------------------------------------------
        -- 8.5  Subprogram Renaming Declaration --
--- 5847,5855 ----
  
        --  N_Package_Renaming_Declaration
        --  Sloc points to PACKAGE
!       --  Defining_Unit_Name
!       --  Name
!       --  Parent_Spec
  
        ------------------------------------------
        -- 8.5  Subprogram Renaming Declaration --
*************** package Sinfo is
*** 5890,5901 ****
  
        --  N_Subprogram_Renaming_Declaration
        --  Sloc points to RENAMES
!       --  Specification (Node1)
!       --  Name (Node2)
!       --  Parent_Spec (Node4-Sem)
!       --  Corresponding_Spec (Node5-Sem)
!       --  Corresponding_Formal_Spec (Node3-Sem)
!       --  From_Default (Flag6-Sem)
  
        -----------------------------------------
        -- 8.5.5  Generic Renaming Declaration --
--- 5861,5872 ----
  
        --  N_Subprogram_Renaming_Declaration
        --  Sloc points to RENAMES
!       --  Specification
!       --  Name
!       --  Parent_Spec
!       --  Corresponding_Spec
!       --  Corresponding_Formal_Spec
!       --  From_Default
  
        -----------------------------------------
        -- 8.5.5  Generic Renaming Declaration --
*************** package Sinfo is
*** 5914,5934 ****
  
        --  N_Generic_Package_Renaming_Declaration
        --  Sloc points to GENERIC
!       --  Defining_Unit_Name (Node1)
!       --  Name (Node2)
!       --  Parent_Spec (Node4-Sem)
  
        --  N_Generic_Procedure_Renaming_Declaration
        --  Sloc points to GENERIC
!       --  Defining_Unit_Name (Node1)
!       --  Name (Node2)
!       --  Parent_Spec (Node4-Sem)
  
        --  N_Generic_Function_Renaming_Declaration
        --  Sloc points to GENERIC
!       --  Defining_Unit_Name (Node1)
!       --  Name (Node2)
!       --  Parent_Spec (Node4-Sem)
  
        --------------------------------
        -- 9.1  Task Type Declaration --
--- 5885,5905 ----
  
        --  N_Generic_Package_Renaming_Declaration
        --  Sloc points to GENERIC
!       --  Defining_Unit_Name
!       --  Name
!       --  Parent_Spec
  
        --  N_Generic_Procedure_Renaming_Declaration
        --  Sloc points to GENERIC
!       --  Defining_Unit_Name
!       --  Name
!       --  Parent_Spec
  
        --  N_Generic_Function_Renaming_Declaration
        --  Sloc points to GENERIC
!       --  Defining_Unit_Name
!       --  Name
!       --  Parent_Spec
  
        --------------------------------
        -- 9.1  Task Type Declaration --
*************** package Sinfo is
*** 5941,5952 ****
  
        --  N_Task_Type_Declaration
        --  Sloc points to TASK
!       --  Defining_Identifier (Node1)
!       --  Discriminant_Specifications (List4) (set to No_List if no
        --   discriminant part)
!       --  Interface_List (List2) (set to No_List if none)
!       --  Task_Definition (Node3) (set to Empty if not present)
!       --  Corresponding_Body (Node5-Sem)
  
        ----------------------------------
        -- 9.1  Single Task Declaration --
--- 5912,5923 ----
  
        --  N_Task_Type_Declaration
        --  Sloc points to TASK
!       --  Defining_Identifier
!       --  Discriminant_Specifications (set to No_List if no
        --   discriminant part)
!       --  Interface_List (set to No_List if none)
!       --  Task_Definition (set to Empty if not present)
!       --  Corresponding_Body
  
        ----------------------------------
        -- 9.1  Single Task Declaration --
*************** package Sinfo is
*** 5959,5967 ****
  
        --  N_Single_Task_Declaration
        --  Sloc points to TASK
!       --  Defining_Identifier (Node1)
!       --  Interface_List (List2) (set to No_List if none)
!       --  Task_Definition (Node3) (set to Empty if not present)
  
        --------------------------
        -- 9.1  Task Definition --
--- 5930,5938 ----
  
        --  N_Single_Task_Declaration
        --  Sloc points to TASK
!       --  Defining_Identifier
!       --  Interface_List (set to No_List if none)
!       --  Task_Definition (set to Empty if not present)
  
        --------------------------
        -- 9.1  Task Definition --
*************** package Sinfo is
*** 5978,5988 ****
  
        --  N_Task_Definition
        --  Sloc points to first token of task definition
!       --  Visible_Declarations (List2)
!       --  Private_Declarations (List3) (set to No_List if no private part)
!       --  End_Label (Node4)
!       --  Has_Storage_Size_Pragma (Flag5-Sem)
!       --  Has_Relative_Deadline_Pragma (Flag9-Sem)
  
        --------------------
        -- 9.1  Task Item --
--- 5949,5959 ----
  
        --  N_Task_Definition
        --  Sloc points to first token of task definition
!       --  Visible_Declarations
!       --  Private_Declarations (set to No_List if no private part)
!       --  End_Label
!       --  Has_Storage_Size_Pragma
!       --  Has_Relative_Deadline_Pragma
  
        --------------------
        -- 9.1  Task Item --
*************** package Sinfo is
*** 6007,6019 ****
  
        --  N_Task_Body
        --  Sloc points to TASK
!       --  Defining_Identifier (Node1)
!       --  Declarations (List2)
!       --  Handled_Statement_Sequence (Node4)
!       --  Is_Task_Master (Flag5-Sem)
!       --  Activation_Chain_Entity (Node3-Sem)
!       --  Corresponding_Spec (Node5-Sem)
!       --  Was_Originally_Stub (Flag13-Sem)
  
        -------------------------------------
        -- 9.4  Protected Type Declaration --
--- 5978,5990 ----
  
        --  N_Task_Body
        --  Sloc points to TASK
!       --  Defining_Identifier
!       --  Declarations
!       --  Handled_Statement_Sequence
!       --  Is_Task_Master
!       --  Activation_Chain_Entity
!       --  Corresponding_Spec
!       --  Was_Originally_Stub
  
        -------------------------------------
        -- 9.4  Protected Type Declaration --
*************** package Sinfo is
*** 6028,6039 ****
  
        --  N_Protected_Type_Declaration
        --  Sloc points to PROTECTED
!       --  Defining_Identifier (Node1)
!       --  Discriminant_Specifications (List4) (set to No_List if no
        --   discriminant part)
!       --  Interface_List (List2) (set to No_List if none)
!       --  Protected_Definition (Node3)
!       --  Corresponding_Body (Node5-Sem)
  
        ---------------------------------------
        -- 9.4  Single Protected Declaration --
--- 5999,6010 ----
  
        --  N_Protected_Type_Declaration
        --  Sloc points to PROTECTED
!       --  Defining_Identifier
!       --  Discriminant_Specifications (set to No_List if no
        --   discriminant part)
!       --  Interface_List (set to No_List if none)
!       --  Protected_Definition
!       --  Corresponding_Body
  
        ---------------------------------------
        -- 9.4  Single Protected Declaration --
*************** package Sinfo is
*** 6048,6056 ****
  
        --  N_Single_Protected_Declaration
        --  Sloc points to PROTECTED
!       --  Defining_Identifier (Node1)
!       --  Interface_List (List2) (set to No_List if none)
!       --  Protected_Definition (Node3)
  
        -------------------------------
        -- 9.4  Protected Definition --
--- 6019,6027 ----
  
        --  N_Single_Protected_Declaration
        --  Sloc points to PROTECTED
!       --  Defining_Identifier
!       --  Interface_List (set to No_List if none)
!       --  Protected_Definition
  
        -------------------------------
        -- 9.4  Protected Definition --
*************** package Sinfo is
*** 6064,6072 ****
  
        --  N_Protected_Definition
        --  Sloc points to first token of protected definition
!       --  Visible_Declarations (List2)
!       --  Private_Declarations (List3) (set to No_List if no private part)
!       --  End_Label (Node4)
  
        ------------------------------------------
        -- 9.4  Protected Operation Declaration --
--- 6035,6043 ----
  
        --  N_Protected_Definition
        --  Sloc points to first token of protected definition
!       --  Visible_Declarations
!       --  Private_Declarations (set to No_List if no private part)
!       --  End_Label
  
        ------------------------------------------
        -- 9.4  Protected Operation Declaration --
*************** package Sinfo is
*** 6101,6111 ****
  
        --  N_Protected_Body
        --  Sloc points to PROTECTED
!       --  Defining_Identifier (Node1)
!       --  Declarations (List2) protected operation items (and pragmas)
!       --  End_Label (Node4)
!       --  Corresponding_Spec (Node5-Sem)
!       --  Was_Originally_Stub (Flag13-Sem)
  
        -----------------------------------
        -- 9.4  Protected Operation Item --
--- 6072,6082 ----
  
        --  N_Protected_Body
        --  Sloc points to PROTECTED
!       --  Defining_Identifier
!       --  Declarations protected operation items (and pragmas)
!       --  End_Label
!       --  Corresponding_Spec
!       --  Was_Originally_Stub
  
        -----------------------------------
        -- 9.4  Protected Operation Item --
*************** package Sinfo is
*** 6129,6140 ****
  
        --  N_Entry_Declaration
        --  Sloc points to ENTRY
!       --  Defining_Identifier (Node1)
!       --  Discrete_Subtype_Definition (Node4) (set to Empty if not present)
!       --  Parameter_Specifications (List3) (set to No_List if no formal part)
!       --  Corresponding_Body (Node5-Sem)
!       --  Must_Override (Flag14) set if overriding indicator present
!       --  Must_Not_Override (Flag15) set if not_overriding indicator present
  
        --  Note: overriding indicator is an Ada 2005 feature
  
--- 6100,6111 ----
  
        --  N_Entry_Declaration
        --  Sloc points to ENTRY
!       --  Defining_Identifier
!       --  Discrete_Subtype_Definition (set to Empty if not present)
!       --  Parameter_Specifications (set to No_List if no formal part)
!       --  Corresponding_Body
!       --  Must_Override set if overriding indicator present
!       --  Must_Not_Override set if not_overriding indicator present
  
        --  Note: overriding indicator is an Ada 2005 feature
  
*************** package Sinfo is
*** 6158,6168 ****
  
        --  N_Accept_Statement
        --  Sloc points to ACCEPT
!       --  Entry_Direct_Name (Node1)
!       --  Entry_Index (Node5) (set to Empty if not present)
!       --  Parameter_Specifications (List3) (set to No_List if no formal part)
!       --  Handled_Statement_Sequence (Node4)
!       --  Declarations (List2) (set to No_List if no declarations)
  
        ------------------------
        -- 9.5.2  Entry Index --
--- 6129,6139 ----
  
        --  N_Accept_Statement
        --  Sloc points to ACCEPT
!       --  Entry_Direct_Name
!       --  Entry_Index (set to Empty if not present)
!       --  Parameter_Specifications (set to No_List if no formal part)
!       --  Handled_Statement_Sequence
!       --  Declarations (set to No_List if no declarations)
  
        ------------------------
        -- 9.5.2  Entry Index --
*************** package Sinfo is
*** 6191,6201 ****
  
        --  N_Entry_Body
        --  Sloc points to ENTRY
!       --  Defining_Identifier (Node1)
!       --  Entry_Body_Formal_Part (Node5)
!       --  Declarations (List2)
!       --  Handled_Statement_Sequence (Node4)
!       --  Activation_Chain_Entity (Node3-Sem)
  
        -----------------------------------
        -- 9.5.2  Entry Body Formal Part --
--- 6162,6172 ----
  
        --  N_Entry_Body
        --  Sloc points to ENTRY
!       --  Defining_Identifier
!       --  Entry_Body_Formal_Part
!       --  Declarations
!       --  Handled_Statement_Sequence
!       --  Activation_Chain_Entity
  
        -----------------------------------
        -- 9.5.2  Entry Body Formal Part --
*************** package Sinfo is
*** 6214,6222 ****
  
        --  N_Entry_Body_Formal_Part
        --  Sloc points to first token
!       --  Entry_Index_Specification (Node4) (set to Empty if not present)
!       --  Parameter_Specifications (List3) (set to No_List if no formal part)
!       --  Condition (Node1) from entry barrier of entry body
  
        --------------------------
        -- 9.5.2  Entry Barrier --
--- 6185,6193 ----
  
        --  N_Entry_Body_Formal_Part
        --  Sloc points to first token
!       --  Entry_Index_Specification (set to Empty if not present)
!       --  Parameter_Specifications (set to No_List if no formal part)
!       --  Condition from entry barrier of entry body
  
        --------------------------
        -- 9.5.2  Entry Barrier --
*************** package Sinfo is
*** 6235,6242 ****
  
        --  N_Entry_Index_Specification
        --  Sloc points to FOR
!       --  Defining_Identifier (Node1)
!       --  Discrete_Subtype_Definition (Node4)
  
        ---------------------------------
        -- 9.5.3  Entry Call Statement --
--- 6206,6213 ----
  
        --  N_Entry_Index_Specification
        --  Sloc points to FOR
!       --  Defining_Identifier
!       --  Discrete_Subtype_Definition
  
        ---------------------------------
        -- 9.5.3  Entry Call Statement --
*************** package Sinfo is
*** 6251,6263 ****
  
        --  N_Entry_Call_Statement
        --  Sloc points to first token of name
!       --  Name (Node2)
!       --  Parameter_Associations (List3) (set to No_List if no
        --   actual parameter part)
!       --  First_Named_Actual (Node4-Sem)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
  
        ------------------------------
        -- 9.5.4  Requeue Statement --
--- 6222,6234 ----
  
        --  N_Entry_Call_Statement
        --  Sloc points to first token of name
!       --  Name
!       --  Parameter_Associations (set to No_List if no
        --   actual parameter part)
!       --  First_Named_Actual
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Is_Elaboration_Warnings_OK_Node
  
        ------------------------------
        -- 9.5.4  Requeue Statement --
*************** package Sinfo is
*** 6271,6281 ****
  
        --  N_Requeue_Statement
        --  Sloc points to REQUEUE
!       --  Name (Node2)
!       --  Abort_Present (Flag15)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
  
        --------------------------
        -- 9.6  Delay Statement --
--- 6242,6252 ----
  
        --  N_Requeue_Statement
        --  Sloc points to REQUEUE
!       --  Name
!       --  Abort_Present
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Is_Elaboration_Warnings_OK_Node
  
        --------------------------
        -- 9.6  Delay Statement --
*************** package Sinfo is
*** 6297,6303 ****
  
        --  N_Delay_Until_Statement
        --  Sloc points to DELAY
!       --  Expression (Node3)
  
        -----------------------------------
        -- 9.6  Delay Relative Statement --
--- 6268,6274 ----
  
        --  N_Delay_Until_Statement
        --  Sloc points to DELAY
!       --  Expression
  
        -----------------------------------
        -- 9.6  Delay Relative Statement --
*************** package Sinfo is
*** 6309,6315 ****
  
        --  N_Delay_Relative_Statement
        --  Sloc points to DELAY
!       --  Expression (Node3)
  
        ---------------------------
        -- 9.7  Select Statement --
--- 6280,6286 ----
  
        --  N_Delay_Relative_Statement
        --  Sloc points to DELAY
!       --  Expression
  
        ---------------------------
        -- 9.7  Select Statement --
*************** package Sinfo is
*** 6343,6350 ****
  
        --  N_Selective_Accept
        --  Sloc points to SELECT
!       --  Select_Alternatives (List1)
!       --  Else_Statements (List4) (set to No_List if no else part)
  
        ------------------
        -- 9.7.1  Guard --
--- 6314,6321 ----
  
        --  N_Selective_Accept
        --  Sloc points to SELECT
!       --  Select_Alternatives
!       --  Else_Statements (set to No_List if no else part)
  
        ------------------
        -- 9.7.1  Guard --
*************** package Sinfo is
*** 6375,6385 ****
  
        --  N_Accept_Alternative
        --  Sloc points to ACCEPT
!       --  Accept_Statement (Node2)
!       --  Condition (Node1) from the guard (set to Empty if no guard present)
!       --  Statements (List3) (set to Empty_List if no statements)
!       --  Pragmas_Before (List4) pragmas before alt (set to No_List if none)
!       --  Accept_Handler_Records (List5-Sem)
  
        ------------------------------
        -- 9.7.1  Delay Alternative --
--- 6346,6356 ----
  
        --  N_Accept_Alternative
        --  Sloc points to ACCEPT
!       --  Accept_Statement
!       --  Condition from the guard (set to Empty if no guard present)
!       --  Statements (set to Empty_List if no statements)
!       --  Pragmas_Before pragmas before alt (set to No_List if none)
!       --  Accept_Handler_Records
  
        ------------------------------
        -- 9.7.1  Delay Alternative --
*************** package Sinfo is
*** 6392,6401 ****
  
        --  N_Delay_Alternative
        --  Sloc points to DELAY
!       --  Delay_Statement (Node2)
!       --  Condition (Node1) from the guard (set to Empty if no guard present)
!       --  Statements (List3) (set to Empty_List if no statements)
!       --  Pragmas_Before (List4) pragmas before alt (set to No_List if none)
  
        ----------------------------------
        -- 9.7.1  Terminate Alternative --
--- 6363,6372 ----
  
        --  N_Delay_Alternative
        --  Sloc points to DELAY
!       --  Delay_Statement
!       --  Condition from the guard (set to Empty if no guard present)
!       --  Statements (set to Empty_List if no statements)
!       --  Pragmas_Before pragmas before alt (set to No_List if none)
  
        ----------------------------------
        -- 9.7.1  Terminate Alternative --
*************** package Sinfo is
*** 6407,6415 ****
  
        --  N_Terminate_Alternative
        --  Sloc points to TERMINATE
!       --  Condition (Node1) from the guard (set to Empty if no guard present)
!       --  Pragmas_Before (List4) pragmas before alt (set to No_List if none)
!       --  Pragmas_After (List5) pragmas after alt (set to No_List if none)
  
        -----------------------------
        -- 9.7.2  Timed Entry Call --
--- 6378,6386 ----
  
        --  N_Terminate_Alternative
        --  Sloc points to TERMINATE
!       --  Condition from the guard (set to Empty if no guard present)
!       --  Pragmas_Before pragmas before alt (set to No_List if none)
!       --  Pragmas_After pragmas after alt (set to No_List if none)
  
        -----------------------------
        -- 9.7.2  Timed Entry Call --
*************** package Sinfo is
*** 6426,6433 ****
  
        --  N_Timed_Entry_Call
        --  Sloc points to SELECT
!       --  Entry_Call_Alternative (Node1)
!       --  Delay_Alternative (Node4)
  
        -----------------------------------
        -- 9.7.2  Entry Call Alternative --
--- 6397,6404 ----
  
        --  N_Timed_Entry_Call
        --  Sloc points to SELECT
!       --  Entry_Call_Alternative
!       --  Delay_Alternative
  
        -----------------------------------
        -- 9.7.2  Entry Call Alternative --
*************** package Sinfo is
*** 6443,6451 ****
  
        --  N_Entry_Call_Alternative
        --  Sloc points to first token of entry call statement
!       --  Entry_Call_Statement (Node1)
!       --  Statements (List3) (set to Empty_List if no statements)
!       --  Pragmas_Before (List4) pragmas before alt (set to No_List if none)
  
        -----------------------------------
        -- 9.7.3  Conditional Entry Call --
--- 6414,6422 ----
  
        --  N_Entry_Call_Alternative
        --  Sloc points to first token of entry call statement
!       --  Entry_Call_Statement
!       --  Statements (set to Empty_List if no statements)
!       --  Pragmas_Before pragmas before alt (set to No_List if none)
  
        -----------------------------------
        -- 9.7.3  Conditional Entry Call --
*************** package Sinfo is
*** 6462,6469 ****
  
        --  N_Conditional_Entry_Call
        --  Sloc points to SELECT
!       --  Entry_Call_Alternative (Node1)
!       --  Else_Statements (List4)
  
        --------------------------------
        -- 9.7.4  Asynchronous Select --
--- 6433,6440 ----
  
        --  N_Conditional_Entry_Call
        --  Sloc points to SELECT
!       --  Entry_Call_Alternative
!       --  Else_Statements
  
        --------------------------------
        -- 9.7.4  Asynchronous Select --
*************** package Sinfo is
*** 6482,6489 ****
  
        --  N_Asynchronous_Select
        --  Sloc points to SELECT
!       --  Triggering_Alternative (Node1)
!       --  Abortable_Part (Node2)
  
        -----------------------------------
        -- 9.7.4  Triggering Alternative --
--- 6453,6460 ----
  
        --  N_Asynchronous_Select
        --  Sloc points to SELECT
!       --  Triggering_Alternative
!       --  Abortable_Part
  
        -----------------------------------
        -- 9.7.4  Triggering Alternative --
*************** package Sinfo is
*** 6496,6504 ****
  
        --  N_Triggering_Alternative
        --  Sloc points to first token of triggering statement
!       --  Triggering_Statement (Node1)
!       --  Statements (List3) (set to Empty_List if no statements)
!       --  Pragmas_Before (List4) pragmas before alt (set to No_List if none)
  
        ---------------------------------
        -- 9.7.4  Triggering Statement --
--- 6467,6475 ----
  
        --  N_Triggering_Alternative
        --  Sloc points to first token of triggering statement
!       --  Triggering_Statement
!       --  Statements (set to Empty_List if no statements)
!       --  Pragmas_Before pragmas before alt (set to No_List if none)
  
        ---------------------------------
        -- 9.7.4  Triggering Statement --
*************** package Sinfo is
*** 6516,6522 ****
  
        --  N_Abortable_Part
        --  Sloc points to ABORT
!       --  Statements (List3)
  
        --------------------------
        -- 9.8  Abort Statement --
--- 6487,6493 ----
  
        --  N_Abortable_Part
        --  Sloc points to ABORT
!       --  Statements
  
        --------------------------
        -- 9.8  Abort Statement --
*************** package Sinfo is
*** 6528,6534 ****
  
        --  N_Abort_Statement
        --  Sloc points to ABORT
!       --  Names (List2)
  
        -------------------------
        -- 10.1.1  Compilation --
--- 6499,6505 ----
  
        --  N_Abort_Statement
        --  Sloc points to ABORT
!       --  Names
  
        -------------------------
        -- 10.1.1  Compilation --
*************** package Sinfo is
*** 6579,6604 ****
  
        --  N_Compilation_Unit
        --  Sloc points to first token of defining unit name
!       --  Context_Items (List1) context items and pragmas preceding unit
!       --  Private_Present (Flag15) set if library unit has private keyword
!       --  Unit (Node2) library item or subunit
!       --  Aux_Decls_Node (Node5) points to the N_Compilation_Unit_Aux node
!       --  First_Inlined_Subprogram (Node3-Sem)
!       --  Library_Unit (Node4-Sem) corresponding/parent spec/body
!       --  Save_Invocation_Graph_Of_Body (Flag1-Sem)
!       --  Acts_As_Spec (Flag4-Sem) flag for subprogram body with no spec
!       --  Body_Required (Flag13-Sem) set for spec if body is required
!       --  Has_Pragma_Suppress_All (Flag14-Sem)
!       --  Context_Pending (Flag16-Sem)
!       --  Has_No_Elaboration_Code (Flag17-Sem)
  
        --  N_Compilation_Unit_Aux
        --  Sloc is a copy of the Sloc from the N_Compilation_Unit node
!       --  Declarations (List2) (set to No_List if no global declarations)
!       --  Actions (List1) (set to No_List if no actions)
!       --  Pragmas_After (List5) pragmas after unit (set to No_List if none)
!       --  Config_Pragmas (List4) config pragmas (set to Empty_List if none)
!       --  Default_Storage_Pool (Node3-Sem)
  
        --------------------------
        -- 10.1.1  Library Item --
--- 6550,6575 ----
  
        --  N_Compilation_Unit
        --  Sloc points to first token of defining unit name
!       --  Context_Items context items and pragmas preceding unit
!       --  Private_Present set if library unit has private keyword
!       --  Unit library item or subunit
!       --  Aux_Decls_Node points to the N_Compilation_Unit_Aux node
!       --  First_Inlined_Subprogram
!       --  Library_Unit corresponding/parent spec/body
!       --  Save_Invocation_Graph_Of_Body
!       --  Acts_As_Spec flag for subprogram body with no spec
!       --  Body_Required set for spec if body is required
!       --  Has_Pragma_Suppress_All
!       --  Context_Pending
!       --  Has_No_Elaboration_Code
  
        --  N_Compilation_Unit_Aux
        --  Sloc is a copy of the Sloc from the N_Compilation_Unit node
!       --  Declarations (set to No_List if no global declarations)
!       --  Actions (set to No_List if no actions)
!       --  Pragmas_After pragmas after unit (set to No_List if none)
!       --  Config_Pragmas config pragmas (set to Empty_List if none)
!       --  Default_Storage_Pool
  
        --------------------------
        -- 10.1.1  Library Item --
*************** package Sinfo is
*** 6682,6705 ****
  
        --  N_With_Clause
        --  Sloc points to first token of library unit name
!       --  Name (Node2)
!       --  Private_Present (Flag15) set if with_clause has private keyword
!       --  Limited_Present (Flag17) set if LIMITED is present
!       --  Next_Implicit_With (Node3-Sem)
!       --  Library_Unit (Node4-Sem)
!       --  Corresponding_Spec (Node5-Sem)
!       --  First_Name (Flag5) (set to True if first name or only one name)
!       --  Last_Name (Flag6) (set to True if last name or only one name)
!       --  Context_Installed (Flag13-Sem)
!       --  Elaborate_Present (Flag4-Sem)
!       --  Elaborate_All_Present (Flag14-Sem)
!       --  Elaborate_All_Desirable (Flag9-Sem)
!       --  Elaborate_Desirable (Flag11-Sem)
!       --  Implicit_With (Flag16-Sem)
!       --  Limited_View_Installed (Flag18-Sem)
!       --  Parent_With (Flag1-Sem)
!       --  Unreferenced_In_Spec (Flag7-Sem)
!       --  No_Entities_Ref_In_Spec (Flag8-Sem)
  
        --  Note: Limited_Present and Limited_View_Installed are used to support
        --  the implementation of Ada 2005 (AI-50217).
--- 6653,6676 ----
  
        --  N_With_Clause
        --  Sloc points to first token of library unit name
!       --  Name
!       --  Private_Present set if with_clause has private keyword
!       --  Limited_Present set if LIMITED is present
!       --  Next_Implicit_With
!       --  Library_Unit
!       --  Corresponding_Spec
!       --  First_Name (set to True if first name or only one name)
!       --  Last_Name (set to True if last name or only one name)
!       --  Context_Installed
!       --  Elaborate_Present
!       --  Elaborate_All_Present
!       --  Elaborate_All_Desirable
!       --  Elaborate_Desirable
!       --  Implicit_With
!       --  Limited_View_Installed
!       --  Parent_With
!       --  Unreferenced_In_Spec
!       --  No_Entities_Ref_In_Spec
  
        --  Note: Limited_Present and Limited_View_Installed are used to support
        --  the implementation of Ada 2005 (AI-50217).
*************** package Sinfo is
*** 6743,6752 ****
  
        --  N_Subprogram_Body_Stub
        --  Sloc points to FUNCTION or PROCEDURE
!       --  Specification (Node1)
!       --  Corresponding_Spec_Of_Stub (Node2-Sem)
!       --  Library_Unit (Node4-Sem) points to the subunit
!       --  Corresponding_Body (Node5-Sem)
  
        -------------------------------
        -- 10.1.3  Package Body Stub --
--- 6714,6723 ----
  
        --  N_Subprogram_Body_Stub
        --  Sloc points to FUNCTION or PROCEDURE
!       --  Specification
!       --  Corresponding_Spec_Of_Stub
!       --  Library_Unit points to the subunit
!       --  Corresponding_Body
  
        -------------------------------
        -- 10.1.3  Package Body Stub --
*************** package Sinfo is
*** 6758,6767 ****
  
        --  N_Package_Body_Stub
        --  Sloc points to PACKAGE
!       --  Defining_Identifier (Node1)
!       --  Corresponding_Spec_Of_Stub (Node2-Sem)
!       --  Library_Unit (Node4-Sem) points to the subunit
!       --  Corresponding_Body (Node5-Sem)
  
        ----------------------------
        -- 10.1.3  Task Body Stub --
--- 6729,6738 ----
  
        --  N_Package_Body_Stub
        --  Sloc points to PACKAGE
!       --  Defining_Identifier
!       --  Corresponding_Spec_Of_Stub
!       --  Library_Unit points to the subunit
!       --  Corresponding_Body
  
        ----------------------------
        -- 10.1.3  Task Body Stub --
*************** package Sinfo is
*** 6773,6782 ****
  
        --  N_Task_Body_Stub
        --  Sloc points to TASK
!       --  Defining_Identifier (Node1)
!       --  Corresponding_Spec_Of_Stub (Node2-Sem)
!       --  Library_Unit (Node4-Sem) points to the subunit
!       --  Corresponding_Body (Node5-Sem)
  
        ---------------------------------
        -- 10.1.3  Protected Body Stub --
--- 6744,6753 ----
  
        --  N_Task_Body_Stub
        --  Sloc points to TASK
!       --  Defining_Identifier
!       --  Corresponding_Spec_Of_Stub
!       --  Library_Unit points to the subunit
!       --  Corresponding_Body
  
        ---------------------------------
        -- 10.1.3  Protected Body Stub --
*************** package Sinfo is
*** 6790,6799 ****
  
        --  N_Protected_Body_Stub
        --  Sloc points to PROTECTED
!       --  Defining_Identifier (Node1)
!       --  Corresponding_Spec_Of_Stub (Node2-Sem)
!       --  Library_Unit (Node4-Sem) points to the subunit
!       --  Corresponding_Body (Node5-Sem)
  
        ---------------------
        -- 10.1.3  Subunit --
--- 6761,6770 ----
  
        --  N_Protected_Body_Stub
        --  Sloc points to PROTECTED
!       --  Defining_Identifier
!       --  Corresponding_Spec_Of_Stub
!       --  Library_Unit points to the subunit
!       --  Corresponding_Body
  
        ---------------------
        -- 10.1.3  Subunit --
*************** package Sinfo is
*** 6803,6811 ****
  
        --  N_Subunit
        --  Sloc points to SEPARATE
!       --  Name (Node2) is the name of the parent unit
!       --  Proper_Body (Node1) is the subunit body
!       --  Corresponding_Stub (Node3-Sem) is the stub declaration for the unit.
  
        ---------------------------------
        -- 11.1  Exception Declaration --
--- 6774,6782 ----
  
        --  N_Subunit
        --  Sloc points to SEPARATE
!       --  Name is the name of the parent unit
!       --  Proper_Body is the subunit body
!       --  Corresponding_Stub is the stub declaration for the unit.
  
        ---------------------------------
        -- 11.1  Exception Declaration --
*************** package Sinfo is
*** 6822,6832 ****
  
        --  N_Exception_Declaration
        --  Sloc points to EXCEPTION
!       --  Defining_Identifier (Node1)
!       --  Expression (Node3-Sem)
!       --  Renaming_Exception (Node2-Sem)
!       --  More_Ids (Flag5) (set to False if no more identifiers in list)
!       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  
        ------------------------------------------
        -- 11.2  Handled Sequence Of Statements --
--- 6793,6803 ----
  
        --  N_Exception_Declaration
        --  Sloc points to EXCEPTION
!       --  Defining_Identifier
!       --  Expression
!       --  Renaming_Exception
!       --  More_Ids (set to False if no more identifiers in list)
!       --  Prev_Ids (set to False if no previous identifiers in list)
  
        ------------------------------------------
        -- 11.2  Handled Sequence Of Statements --
*************** package Sinfo is
*** 6898,6908 ****
  
        --  N_Handled_Sequence_Of_Statements
        --  Sloc points to first token of first statement
!       --  Statements (List3)
!       --  End_Label (Node4) (set to Empty if expander generated)
!       --  Exception_Handlers (List5) (set to No_List if none present)
!       --  At_End_Proc (Node1) (set to Empty if no clean up procedure)
!       --  First_Real_Statement (Node2-Sem)
  
        --  Note: the parent always contains a Declarations field which contains
        --  declarations associated with the handled sequence of statements. This
--- 6869,6879 ----
  
        --  N_Handled_Sequence_Of_Statements
        --  Sloc points to first token of first statement
!       --  Statements
!       --  End_Label (set to Empty if expander generated)
!       --  Exception_Handlers (set to No_List if none present)
!       --  At_End_Proc (set to Empty if no clean up procedure)
!       --  First_Real_Statement
  
        --  Note: the parent always contains a Declarations field which contains
        --  declarations associated with the handled sequence of statements. This
*************** package Sinfo is
*** 6924,6936 ****
  
        --  N_Exception_Handler
        --  Sloc points to WHEN
!       --  Choice_Parameter (Node2) (set to Empty if not present)
!       --  Exception_Choices (List4)
!       --  Statements (List3)
!       --  Exception_Label (Node5-Sem) (set to Empty of not present)
!       --  Local_Raise_Statements (Elist1-Sem) (set to No_Elist if not present)
!       --  Local_Raise_Not_OK (Flag7-Sem)
!       --  Has_Local_Raise (Flag8-Sem)
  
        ------------------------------------------
        -- 11.2  Choice parameter specification --
--- 6895,6907 ----
  
        --  N_Exception_Handler
        --  Sloc points to WHEN
!       --  Choice_Parameter (set to Empty if not present)
!       --  Exception_Choices
!       --  Statements
!       --  Exception_Label (set to Empty if not present)
!       --  Local_Raise_Statements (set to No_Elist if not present)
!       --  Local_Raise_Not_OK
!       --  Has_Local_Raise
  
        ------------------------------------------
        -- 11.2  Choice parameter specification --
*************** package Sinfo is
*** 6965,6973 ****
  
        --  N_Raise_Statement
        --  Sloc points to RAISE
!       --  Name (Node2) (set to Empty if no exception name present)
!       --  Expression (Node3) (set to Empty if no expression present)
!       --  From_At_End (Flag4-Sem)
  
        ----------------------------
        -- 11.3  Raise Expression --
--- 6936,6944 ----
  
        --  N_Raise_Statement
        --  Sloc points to RAISE
!       --  Name (set to Empty if no exception name present)
!       --  Expression (set to Empty if no expression present)
!       --  From_At_End
  
        ----------------------------
        -- 11.3  Raise Expression --
*************** package Sinfo is
*** 6977,6985 ****
  
        --  N_Raise_Expression
        --  Sloc points to RAISE
!       --  Name (Node2) (always present)
!       --  Expression (Node3) (set to Empty if no expression present)
!       --  Convert_To_Return_False (Flag13-Sem)
        --  plus fields for expression
  
        -------------------------------
--- 6948,6956 ----
  
        --  N_Raise_Expression
        --  Sloc points to RAISE
!       --  Name (always present)
!       --  Expression (set to Empty if no expression present)
!       --  Convert_To_Return_False
        --  plus fields for expression
  
        -------------------------------
*************** package Sinfo is
*** 7001,7010 ****
  
        --  N_Generic_Subprogram_Declaration
        --  Sloc points to GENERIC
!       --  Specification (Node1) subprogram specification
!       --  Corresponding_Body (Node5-Sem)
!       --  Generic_Formal_Declarations (List2) from generic formal part
!       --  Parent_Spec (Node4-Sem)
  
        ---------------------------------------
        -- 12.1  Generic Package Declaration --
--- 6972,6981 ----
  
        --  N_Generic_Subprogram_Declaration
        --  Sloc points to GENERIC
!       --  Specification subprogram specification
!       --  Corresponding_Body
!       --  Generic_Formal_Declarations from generic formal part
!       --  Parent_Spec
  
        ---------------------------------------
        -- 12.1  Generic Package Declaration --
*************** package Sinfo is
*** 7022,7032 ****
  
        --  N_Generic_Package_Declaration
        --  Sloc points to GENERIC
!       --  Specification (Node1) package specification
!       --  Corresponding_Body (Node5-Sem)
!       --  Generic_Formal_Declarations (List2) from generic formal part
!       --  Parent_Spec (Node4-Sem)
!       --  Activation_Chain_Entity (Node3-Sem)
  
        -------------------------------
        -- 12.1  Generic Formal Part --
--- 6993,7003 ----
  
        --  N_Generic_Package_Declaration
        --  Sloc points to GENERIC
!       --  Specification package specification
!       --  Corresponding_Body
!       --  Generic_Formal_Declarations from generic formal part
!       --  Parent_Spec
!       --  Activation_Chain_Entity
  
        -------------------------------
        -- 12.1  Generic Formal Part --
*************** package Sinfo is
*** 7064,7112 ****
  
        --  N_Package_Instantiation
        --  Sloc points to PACKAGE
!       --  Defining_Unit_Name (Node1)
!       --  Name (Node2)
!       --  Generic_Associations (List3) (set to No_List if no
        --   generic actual part)
!       --  Parent_Spec (Node4-Sem)
!       --  Instance_Spec (Node5-Sem)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
!       --  Is_Declaration_Level_Node (Flag5-Sem)
!       --  Is_Known_Guaranteed_ABE (Flag18-Sem)
  
        --  N_Procedure_Instantiation
        --  Sloc points to PROCEDURE
!       --  Defining_Unit_Name (Node1)
!       --  Name (Node2)
!       --  Parent_Spec (Node4-Sem)
!       --  Generic_Associations (List3) (set to No_List if no
        --   generic actual part)
!       --  Instance_Spec (Node5-Sem)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
!       --  Is_Declaration_Level_Node (Flag5-Sem)
!       --  Must_Override (Flag14) set if overriding indicator present
!       --  Must_Not_Override (Flag15) set if not_overriding indicator present
!       --  Is_Known_Guaranteed_ABE (Flag18-Sem)
  
        --  N_Function_Instantiation
        --  Sloc points to FUNCTION
!       --  Defining_Unit_Name (Node1)
!       --  Name (Node2)
!       --  Generic_Associations (List3) (set to No_List if no
        --   generic actual part)
!       --  Parent_Spec (Node4-Sem)
!       --  Instance_Spec (Node5-Sem)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
!       --  Is_Declaration_Level_Node (Flag5-Sem)
!       --  Must_Override (Flag14) set if overriding indicator present
!       --  Must_Not_Override (Flag15) set if not_overriding indicator present
!       --  Is_Known_Guaranteed_ABE (Flag18-Sem)
  
        --  Note: overriding indicator is an Ada 2005 feature
  
--- 7035,7083 ----
  
        --  N_Package_Instantiation
        --  Sloc points to PACKAGE
!       --  Defining_Unit_Name
!       --  Name
!       --  Generic_Associations (set to No_List if no
        --   generic actual part)
!       --  Parent_Spec
!       --  Instance_Spec
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Is_Elaboration_Warnings_OK_Node
!       --  Is_Declaration_Level_Node
!       --  Is_Known_Guaranteed_ABE
  
        --  N_Procedure_Instantiation
        --  Sloc points to PROCEDURE
!       --  Defining_Unit_Name
!       --  Name
!       --  Parent_Spec
!       --  Generic_Associations (set to No_List if no
        --   generic actual part)
!       --  Instance_Spec
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Is_Elaboration_Warnings_OK_Node
!       --  Is_Declaration_Level_Node
!       --  Must_Override set if overriding indicator present
!       --  Must_Not_Override set if not_overriding indicator present
!       --  Is_Known_Guaranteed_ABE
  
        --  N_Function_Instantiation
        --  Sloc points to FUNCTION
!       --  Defining_Unit_Name
!       --  Name
!       --  Generic_Associations (set to No_List if no
        --   generic actual part)
!       --  Parent_Spec
!       --  Instance_Spec
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Is_Elaboration_Warnings_OK_Node
!       --  Is_Declaration_Level_Node
!       --  Must_Override set if overriding indicator present
!       --  Must_Not_Override set if not_overriding indicator present
!       --  Is_Known_Guaranteed_ABE
  
        --  Note: overriding indicator is an Ada 2005 feature
  
*************** package Sinfo is
*** 7137,7146 ****
  
        --  N_Generic_Association
        --  Sloc points to first token of generic association
!       --  Selector_Name (Node2) (set to Empty if no formal
        --   parameter selector name)
!       --  Explicit_Generic_Actual_Parameter (Node1) (Empty if box present)
!       --  Box_Present (Flag15) (for formal_package associations with a box)
  
        ---------------------------------------------
        -- 12.3  Explicit Generic Actual Parameter --
--- 7108,7117 ----
  
        --  N_Generic_Association
        --  Sloc points to first token of generic association
!       --  Selector_Name (set to Empty if no formal
        --   parameter selector name)
!       --  Explicit_Generic_Actual_Parameter (Empty if box present)
!       --  Box_Present (for formal_package associations with a box)
  
        ---------------------------------------------
        -- 12.3  Explicit Generic Actual Parameter --
*************** package Sinfo is
*** 7172,7186 ****
  
        --  N_Formal_Object_Declaration
        --  Sloc points to first identifier
!       --  Defining_Identifier (Node1)
!       --  In_Present (Flag15)
!       --  Out_Present (Flag17)
!       --  Null_Exclusion_Present (Flag11) (set to False if not present)
!       --  Subtype_Mark (Node4) (set to Empty if not present)
!       --  Access_Definition (Node3) (set to Empty if not present)
!       --  Default_Expression (Node5) (set to Empty if no default expression)
!       --  More_Ids (Flag5) (set to False if no more identifiers in list)
!       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  
        -----------------------------------
        -- 12.5  Formal Type Declaration --
--- 7143,7157 ----
  
        --  N_Formal_Object_Declaration
        --  Sloc points to first identifier
!       --  Defining_Identifier
!       --  In_Present
!       --  Out_Present
!       --  Null_Exclusion_Present (set to False if not present)
!       --  Subtype_Mark (set to Empty if not present)
!       --  Access_Definition (set to Empty if not present)
!       --  Default_Expression (set to Empty if no default expression)
!       --  More_Ids (set to False if no more identifiers in list)
!       --  Prev_Ids (set to False if no previous identifiers in list)
  
        -----------------------------------
        -- 12.5  Formal Type Declaration --
*************** package Sinfo is
*** 7194,7204 ****
  
        --  N_Formal_Type_Declaration
        --  Sloc points to TYPE
!       --  Defining_Identifier (Node1)
!       --  Formal_Type_Definition (Node3)
!       --  Discriminant_Specifications (List4) (set to No_List if no
        --   discriminant part)
!       --  Unknown_Discriminants_Present (Flag13) set if (<>) discriminant
  
        ----------------------------------
        -- 12.5  Formal type definition --
--- 7165,7176 ----
  
        --  N_Formal_Type_Declaration
        --  Sloc points to TYPE
!       --  Defining_Identifier
!       --  Formal_Type_Definition
!       --  Discriminant_Specifications (set to No_List if no
        --   discriminant part)
!       --  Unknown_Discriminants_Present set if (<>) discriminant
!       --  Default_Subtype_Mark
  
        ----------------------------------
        -- 12.5  Formal type definition --
*************** package Sinfo is
*** 7234,7243 ****
  
        --  N_Formal_Private_Type_Definition
        --  Sloc points to PRIVATE
!       --  Uninitialized_Variable (Node3-Sem)
!       --  Abstract_Present (Flag4)
!       --  Tagged_Present (Flag15)
!       --  Limited_Present (Flag17)
  
        --------------------------------------------
        -- 12.5.1  Formal Derived Type Definition --
--- 7206,7215 ----
  
        --  N_Formal_Private_Type_Definition
        --  Sloc points to PRIVATE
!       --  Uninitialized_Variable
!       --  Abstract_Present
!       --  Tagged_Present
!       --  Limited_Present
  
        --------------------------------------------
        -- 12.5.1  Formal Derived Type Definition --
*************** package Sinfo is
*** 7250,7261 ****
  
        --  N_Formal_Derived_Type_Definition
        --  Sloc points to NEW
!       --  Subtype_Mark (Node4)
!       --  Private_Present (Flag15)
!       --  Abstract_Present (Flag4)
!       --  Limited_Present (Flag17)
!       --  Synchronized_Present (Flag7)
!       --  Interface_List (List2) (set to No_List if none)
  
        -----------------------------------------------
        -- 12.5.1  Formal Incomplete Type Definition --
--- 7222,7233 ----
  
        --  N_Formal_Derived_Type_Definition
        --  Sloc points to NEW
!       --  Subtype_Mark
!       --  Private_Present
!       --  Abstract_Present
!       --  Limited_Present
!       --  Synchronized_Present
!       --  Interface_List (set to No_List if none)
  
        -----------------------------------------------
        -- 12.5.1  Formal Incomplete Type Definition --
*************** package Sinfo is
*** 7265,7271 ****
  
        --  N_Formal_Incomplete_Type_Definition
        --  Sloc points to identifier of parent
!       --  Tagged_Present (Flag15)
  
        ---------------------------------------------
        -- 12.5.2  Formal Discrete Type Definition --
--- 7237,7243 ----
  
        --  N_Formal_Incomplete_Type_Definition
        --  Sloc points to identifier of parent
!       --  Tagged_Present
  
        ---------------------------------------------
        -- 12.5.2  Formal Discrete Type Definition --
*************** package Sinfo is
*** 7359,7367 ****
  
        --  N_Formal_Concrete_Subprogram_Declaration
        --  Sloc points to WITH
!       --  Specification (Node1)
!       --  Default_Name (Node2) (set to Empty if no subprogram default)
!       --  Box_Present (Flag15)
  
        --  Note: if no subprogram default is present, then Name is set
        --  to Empty, and Box_Present is False.
--- 7331,7339 ----
  
        --  N_Formal_Concrete_Subprogram_Declaration
        --  Sloc points to WITH
!       --  Specification
!       --  Default_Name (set to Empty if no subprogram default)
!       --  Box_Present
  
        --  Note: if no subprogram default is present, then Name is set
        --  to Empty, and Box_Present is False.
*************** package Sinfo is
*** 7376,7384 ****
  
        --  N_Formal_Abstract_Subprogram_Declaration
        --  Sloc points to WITH
!       --  Specification (Node1)
!       --  Default_Name (Node2) (set to Empty if no subprogram default)
!       --  Box_Present (Flag15)
  
        --  Note: if no subprogram default is present, then Name is set
        --  to Empty, and Box_Present is False.
--- 7348,7356 ----
  
        --  N_Formal_Abstract_Subprogram_Declaration
        --  Sloc points to WITH
!       --  Specification
!       --  Default_Name (set to Empty if no subprogram default)
!       --  Box_Present
  
        --  Note: if no subprogram default is present, then Name is set
        --  to Empty, and Box_Present is False.
*************** package Sinfo is
*** 7413,7425 ****
  
        --  N_Formal_Package_Declaration
        --  Sloc points to WITH
!       --  Defining_Identifier (Node1)
!       --  Name (Node2)
!       --  Generic_Associations (List3) (set to No_List if (<>) case or
        --   empty generic actual part)
!       --  Box_Present (Flag15)
!       --  Instance_Spec (Node5-Sem)
!       --  Is_Known_Guaranteed_ABE (Flag18-Sem)
  
        --------------------------------------
        -- 12.7  Formal Package Actual Part --
--- 7385,7397 ----
  
        --  N_Formal_Package_Declaration
        --  Sloc points to WITH
!       --  Defining_Identifier
!       --  Name
!       --  Generic_Associations (set to No_List if (<>) case or
        --   empty generic actual part)
!       --  Box_Present
!       --  Instance_Spec
!       --  Is_Known_Guaranteed_ABE
  
        --------------------------------------
        -- 12.7  Formal Package Actual Part --
*************** package Sinfo is
*** 7500,7515 ****
  
        --  N_Attribute_Definition_Clause
        --  Sloc points to FOR
!       --  Name (Node2) the local name
!       --  Chars (Name1) the identifier name from the attribute designator
!       --  Expression (Node3) the expression or name
!       --  Entity (Node4-Sem)
!       --  Next_Rep_Item (Node5-Sem)
!       --  From_At_Mod (Flag4-Sem)
!       --  Check_Address_Alignment (Flag11-Sem)
!       --  From_Aspect_Specification (Flag13-Sem)
!       --  Is_Delayed_Aspect (Flag14-Sem)
!       --  Address_Warning_Posted (Flag18-Sem)
  
        --  Note: if From_Aspect_Specification is set, then Sloc points to the
        --  aspect name, and Entity is resolved already to reference the entity
--- 7472,7487 ----
  
        --  N_Attribute_Definition_Clause
        --  Sloc points to FOR
!       --  Name the local name
!       --  Chars the identifier name from the attribute designator
!       --  Expression the expression or name
!       --  Entity
!       --  Next_Rep_Item
!       --  From_At_Mod
!       --  Check_Address_Alignment
!       --  From_Aspect_Specification
!       --  Is_Delayed_Aspect
!       --  Address_Warning_Posted
  
        --  Note: if From_Aspect_Specification is set, then Sloc points to the
        --  aspect name, and Entity is resolved already to reference the entity
*************** package Sinfo is
*** 7552,7570 ****
  
        --  N_Aspect_Specification
        --  Sloc points to aspect identifier
!       --  Identifier (Node1) aspect identifier
!       --  Aspect_Rep_Item (Node2-Sem)
!       --  Expression (Node3) Aspect_Definition (set to Empty if none)
!       --  Entity (Node4-Sem) entity to which the aspect applies
!       --  Next_Rep_Item (Node5-Sem)
!       --  Class_Present (Flag6) Set if 'Class present
!       --  Is_Ignored (Flag9-Sem)
!       --  Is_Checked (Flag11-Sem)
!       --  Is_Delayed_Aspect (Flag14-Sem)
!       --  Is_Disabled (Flag15-Sem)
!       --  Is_Boolean_Aspect (Flag16-Sem)
!       --  Split_PPC (Flag17) Set if split pre/post attribute
!       --  Aspect_On_Partial_View (Flag18-Sem)
  
        --  Note: Aspect_Specification is an Ada 2012 feature
  
--- 7524,7542 ----
  
        --  N_Aspect_Specification
        --  Sloc points to aspect identifier
!       --  Identifier aspect identifier
!       --  Aspect_Rep_Item
!       --  Expression (set to Empty if none)
!       --  Entity entity to which the aspect applies
!       --  Next_Rep_Item
!       --  Class_Present Set if 'Class present
!       --  Is_Ignored
!       --  Is_Checked
!       --  Is_Delayed_Aspect
!       --  Is_Disabled
!       --  Is_Boolean_Aspect
!       --  Split_PPC Set if split pre/post attribute
!       --  Aspect_On_Partial_View
  
        --  Note: Aspect_Specification is an Ada 2012 feature
  
*************** package Sinfo is
*** 7594,7602 ****
  
        --  N_Enumeration_Representation_Clause
        --  Sloc points to FOR
!       --  Identifier (Node1) direct name
!       --  Array_Aggregate (Node3)
!       --  Next_Rep_Item (Node5-Sem)
  
        ---------------------------------
        -- 13.4  Enumeration aggregate --
--- 7566,7574 ----
  
        --  N_Enumeration_Representation_Clause
        --  Sloc points to FOR
!       --  Identifier direct name
!       --  Array_Aggregate
!       --  Next_Rep_Item
  
        ---------------------------------
        -- 13.4  Enumeration aggregate --
*************** package Sinfo is
*** 7621,7630 ****
  
        --  N_Record_Representation_Clause
        --  Sloc points to FOR
!       --  Identifier (Node1) direct name
!       --  Mod_Clause (Node2) (set to Empty if no mod clause present)
!       --  Component_Clauses (List3)
!       --  Next_Rep_Item (Node5-Sem)
  
        ------------------------------
        -- 13.5.1  Component clause --
--- 7593,7602 ----
  
        --  N_Record_Representation_Clause
        --  Sloc points to FOR
!       --  Identifier direct name
!       --  Mod_Clause (set to Empty if no mod clause present)
!       --  Component_Clauses
!       --  Next_Rep_Item
  
        ------------------------------
        -- 13.5.1  Component clause --
*************** package Sinfo is
*** 7636,7645 ****
  
        --  N_Component_Clause
        --  Sloc points to AT
!       --  Component_Name (Node1) points to Name or Attribute_Reference
!       --  Position (Node2)
!       --  First_Bit (Node3)
!       --  Last_Bit (Node4)
  
        ----------------------
        -- 13.5.1  Position --
--- 7608,7617 ----
  
        --  N_Component_Clause
        --  Sloc points to AT
!       --  Component_Name points to Name or Attribute_Reference
!       --  Position
!       --  First_Bit
!       --  Last_Bit
  
        ----------------------
        -- 13.5.1  Position --
*************** package Sinfo is
*** 7677,7683 ****
  
        --  N_Code_Statement
        --  Sloc points to first token of the expression
!       --  Expression (Node3)
  
        --  Note: package Exp_Code contains an abstract functional interface
        --  for use by Gigi in accessing the data from N_Code_Statement nodes.
--- 7649,7655 ----
  
        --  N_Code_Statement
        --  Sloc points to first token of the expression
!       --  Expression
  
        --  Note: package Exp_Code contains an abstract functional interface
        --  for use by Gigi in accessing the data from N_Code_Statement nodes.
*************** package Sinfo is
*** 7717,7747 ****
        --  Sloc points to the function name
        --  plus fields for binary operator
        --  plus fields for expression
!       --  Shift_Count_OK (Flag4-Sem)
  
        --  N_Op_Rotate_Right
        --  Sloc points to the function name
        --  plus fields for binary operator
        --  plus fields for expression
!       --  Shift_Count_OK (Flag4-Sem)
  
        --  N_Op_Shift_Left
        --  Sloc points to the function name
        --  plus fields for binary operator
        --  plus fields for expression
!       --  Shift_Count_OK (Flag4-Sem)
  
        --  N_Op_Shift_Right_Arithmetic
        --  Sloc points to the function name
        --  plus fields for binary operator
        --  plus fields for expression
!       --  Shift_Count_OK (Flag4-Sem)
  
        --  N_Op_Shift_Right
        --  Sloc points to the function name
        --  plus fields for binary operator
        --  plus fields for expression
!       --  Shift_Count_OK (Flag4-Sem)
  
        --  Note: N_Op_Rotate_Left, N_Op_Rotate_Right, N_Shift_Right_Arithmetic
        --  never appear in the expanded tree if Modify_Tree_For_C mode is set.
--- 7689,7719 ----
        --  Sloc points to the function name
        --  plus fields for binary operator
        --  plus fields for expression
!       --  Shift_Count_OK
  
        --  N_Op_Rotate_Right
        --  Sloc points to the function name
        --  plus fields for binary operator
        --  plus fields for expression
!       --  Shift_Count_OK
  
        --  N_Op_Shift_Left
        --  Sloc points to the function name
        --  plus fields for binary operator
        --  plus fields for expression
!       --  Shift_Count_OK
  
        --  N_Op_Shift_Right_Arithmetic
        --  Sloc points to the function name
        --  plus fields for binary operator
        --  plus fields for expression
!       --  Shift_Count_OK
  
        --  N_Op_Shift_Right
        --  Sloc points to the function name
        --  plus fields for binary operator
        --  plus fields for expression
!       --  Shift_Count_OK
  
        --  Note: N_Op_Rotate_Left, N_Op_Rotate_Right, N_Shift_Right_Arithmetic
        --  never appear in the expanded tree if Modify_Tree_For_C mode is set.
*************** package Sinfo is
*** 7770,7777 ****
  
        --  N_Delta_Constraint
        --  Sloc points to DELTA
!       --  Delta_Expression (Node3)
!       --  Range_Constraint (Node4) (set to Empty if not present)
  
        --------------------
        -- J.7  At Clause --
--- 7742,7749 ----
  
        --  N_Delta_Constraint
        --  Sloc points to DELTA
!       --  Delta_Expression
!       --  Range_Constraint (set to Empty if not present)
  
        --------------------
        -- J.7  At Clause --
*************** package Sinfo is
*** 7790,7797 ****
  
        --  N_At_Clause
        --  Sloc points to FOR
!       --  Identifier (Node1)
!       --  Expression (Node3)
  
        ---------------------
        -- J.8  Mod clause --
--- 7762,7769 ----
  
        --  N_At_Clause
        --  Sloc points to FOR
!       --  Identifier
!       --  Expression
  
        ---------------------
        -- J.8  Mod clause --
*************** package Sinfo is
*** 7816,7823 ****
  
        --  N_Mod_Clause
        --  Sloc points to AT
!       --  Expression (Node3)
!       --  Pragmas_Before (List4) Pragmas before mod clause (No_List if none)
  
     --------------------
     -- Semantic Nodes --
--- 7788,7795 ----
  
        --  N_Mod_Clause
        --  Sloc points to AT
!       --  Expression
!       --  Pragmas_Before Pragmas before mod clause (No_List if none)
  
     --------------------
     -- Semantic Nodes --
*************** package Sinfo is
*** 7857,7871 ****
  
        --  N_Call_Marker
        --  Sloc points to Sloc of original call
!       --  Target (Node1-Sem)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
!       --  Is_Source_Call (Flag4-Sem)
!       --  Is_Declaration_Level_Node (Flag5-Sem)
!       --  Is_Dispatching_Call (Flag6-Sem)
!       --  Is_Preelaborable_Call (Flag7-Sem)
!       --  Is_Known_Guaranteed_ABE (Flag18-Sem)
  
        ------------------------
        -- Compound Statement --
--- 7829,7843 ----
  
        --  N_Call_Marker
        --  Sloc points to Sloc of original call
!       --  Target
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Is_Elaboration_Warnings_OK_Node
!       --  Is_Source_Call
!       --  Is_Declaration_Level_Node
!       --  Is_Dispatching_Call
!       --  Is_Preelaborable_Call
!       --  Is_Known_Guaranteed_ABE
  
        ------------------------
        -- Compound Statement --
*************** package Sinfo is
*** 7898,7904 ****
        --                  end;
  
        --  N_Compound_Statement
!       --  Actions (List1)
  
        --------------
        -- Contract --
--- 7870,7876 ----
        --                  end;
  
        --  N_Compound_Statement
!       --  Actions
  
        --------------
        -- Contract --
*************** package Sinfo is
*** 7921,7930 ****
  
        --  N_Contract
        --  Sloc points to the subprogram's name
!       --  Pre_Post_Conditions (Node1-Sem) (set to Empty if none)
!       --  Contract_Test_Cases (Node2-Sem) (set to Empty if none)
!       --  Classifications (Node3-Sem) (set to Empty if none)
!       --  Is_Expanded_Contract (Flag1-Sem)
  
        --  Pre_Post_Conditions contains a collection of pragmas that correspond
        --  to pre- and postconditions associated with an entry or a subprogram
--- 7893,7902 ----
  
        --  N_Contract
        --  Sloc points to the subprogram's name
!       --  Pre_Post_Conditions (set to Empty if none)
!       --  Contract_Test_Cases (set to Empty if none)
!       --  Classifications (set to Empty if none)
!       --  Is_Expanded_Contract
  
        --  Pre_Post_Conditions contains a collection of pragmas that correspond
        --  to pre- and postconditions associated with an entry or a subprogram
*************** package Sinfo is
*** 7991,8007 ****
  
        --  N_Expanded_Name
        --  Sloc points to the period
!       --  Chars (Name1) copy of Chars field of selector name
!       --  Prefix (Node3)
!       --  Selector_Name (Node2)
!       --  Entity (Node4-Sem)
!       --  Associated_Node (Node4-Sem)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
!       --  Has_Private_View (Flag11-Sem) set in generic units
!       --  Redundant_Use (Flag13-Sem)
!       --  Atomic_Sync_Required (Flag14-Sem)
        --  plus fields for expression
  
        -----------------------------
--- 7963,7979 ----
  
        --  N_Expanded_Name
        --  Sloc points to the period
!       --  Chars copy of Chars field of selector name
!       --  Prefix
!       --  Selector_Name
!       --  Entity
!       --  Associated_Node
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Is_Elaboration_Warnings_OK_Node
!       --  Has_Private_View (set in generic units)
!       --  Redundant_Use
!       --  Atomic_Sync_Required
        --  plus fields for expression
  
        -----------------------------
*************** package Sinfo is
*** 8026,8032 ****
        --  If the actions contain declarations, then these declarations may
        --  be referenced within the expression.
  
!       --  (AI12-0236-1): In Ada 2020, for a declare_expression, the parser
        --  generates an N_Expression_With_Actions. Declare_expressions have
        --  various restrictions, which we do not enforce on
        --  N_Expression_With_Actions nodes that are generated by the
--- 7998,8004 ----
        --  If the actions contain declarations, then these declarations may
        --  be referenced within the expression.
  
!       --  (AI12-0236-1): In Ada 2022, for a declare_expression, the parser
        --  generates an N_Expression_With_Actions. Declare_expressions have
        --  various restrictions, which we do not enforce on
        --  N_Expression_With_Actions nodes that are generated by the
*************** package Sinfo is
*** 8045,8052 ****
        --                  in expression end
  
        --  N_Expression_With_Actions
!       --  Actions (List1)
!       --  Expression (Node3)
        --  plus fields for expression
  
        --  Note: In the final generated tree presented to the code generator,
--- 8017,8024 ----
        --                  in expression end
  
        --  N_Expression_With_Actions
!       --  Actions
!       --  Expression
        --  plus fields for expression
  
        --  Note: In the final generated tree presented to the code generator,
*************** package Sinfo is
*** 8074,8083 ****
  
        --  N_Free_Statement
        --  Sloc is copied from the unchecked deallocation call
!       --  Expression (Node3) argument to unchecked deallocation call
!       --  Storage_Pool (Node1-Sem)
!       --  Procedure_To_Call (Node2-Sem)
!       --  Actual_Designated_Subtype (Node4-Sem)
  
        --  Note: in the case where a debug source file is generated, the Sloc
        --  for this node points to the FREE keyword in the Sprint file output.
--- 8046,8055 ----
  
        --  N_Free_Statement
        --  Sloc is copied from the unchecked deallocation call
!       --  Expression argument to unchecked deallocation call
!       --  Storage_Pool
!       --  Procedure_To_Call
!       --  Actual_Designated_Subtype
  
        --  Note: in the case where a debug source file is generated, the Sloc
        --  for this node points to the FREE keyword in the Sprint file output.
*************** package Sinfo is
*** 8113,8123 ****
  
        --  N_Freeze_Entity
        --  Sloc points near freeze point (see above special note)
!       --  Entity (Node4-Sem)
!       --  Access_Types_To_Process (Elist2-Sem) (set to No_Elist if none)
!       --  TSS_Elist (Elist3-Sem) (set to No_Elist if no associated TSS's)
!       --  Actions (List1) (set to No_List if no freeze actions)
!       --  First_Subtype_Link (Node5-Sem) (set to Empty if no link)
  
        --  The Actions field holds actions associated with the freeze. These
        --  actions are elaborated at the point where the type is frozen.
--- 8085,8095 ----
  
        --  N_Freeze_Entity
        --  Sloc points near freeze point (see above special note)
!       --  Entity
!       --  Access_Types_To_Process (set to No_Elist if none)
!       --  TSS_Elist (set to No_Elist if no associated TSS's)
!       --  Actions (set to No_List if no freeze actions)
!       --  First_Subtype_Link (set to Empty if no link)
  
        --  The Actions field holds actions associated with the freeze. These
        --  actions are elaborated at the point where the type is frozen.
*************** package Sinfo is
*** 8146,8152 ****
  
        --  N_Freeze_Generic_Entity
        --  Sloc points near freeze point
!       --  Entity (Node4-Sem)
  
        --------------------------------
        -- Implicit Label Declaration --
--- 8118,8124 ----
  
        --  N_Freeze_Generic_Entity
        --  Sloc points near freeze point
!       --  Entity
  
        --------------------------------
        -- Implicit Label Declaration --
*************** package Sinfo is
*** 8178,8185 ****
        --  N_Implicit_Label_Declaration
        --  Sloc points to the << token for a statement identifier, or to the
        --    LOOP, DECLARE, or BEGIN token for a loop or block identifier
!       --  Defining_Identifier (Node1)
!       --  Label_Construct (Node2-Sem)
  
        --  Note: in the case where a debug source file is generated, the Sloc
        --  for this node points to the label name in the generated declaration.
--- 8150,8157 ----
        --  N_Implicit_Label_Declaration
        --  Sloc points to the << token for a statement identifier, or to the
        --    LOOP, DECLARE, or BEGIN token for a loop or block identifier
!       --  Defining_Identifier
!       --  Label_Construct
  
        --  Note: in the case where a debug source file is generated, the Sloc
        --  for this node points to the label name in the generated declaration.
*************** package Sinfo is
*** 8203,8209 ****
  
        --  N_Itype_Reference
        --  Sloc points to the node generating the reference
!       --  Itype (Node1-Sem)
  
        --  Note: in the case where a debug source file is generated, the Sloc
        --  for this node points to the REFERENCE keyword in the file output.
--- 8175,8181 ----
  
        --  N_Itype_Reference
        --  Sloc points to the node generating the reference
!       --  Itype
  
        --  Note: in the case where a debug source file is generated, the Sloc
        --  for this node points to the REFERENCE keyword in the file output.
*************** package Sinfo is
*** 8252,8271 ****
  
        --  N_Raise_Constraint_Error
        --  Sloc references related construct
!       --  Condition (Node1) (set to Empty if no condition)
!       --  Reason (Uint3)
        --  plus fields for expression
  
        --  N_Raise_Program_Error
        --  Sloc references related construct
!       --  Condition (Node1) (set to Empty if no condition)
!       --  Reason (Uint3)
        --  plus fields for expression
  
        --  N_Raise_Storage_Error
        --  Sloc references related construct
!       --  Condition (Node1) (set to Empty if no condition)
!       --  Reason (Uint3)
        --  plus fields for expression
  
        --  Note: Sloc is copied from the expression generating the exception.
--- 8224,8243 ----
  
        --  N_Raise_Constraint_Error
        --  Sloc references related construct
!       --  Condition (set to Empty if no condition)
!       --  Reason
        --  plus fields for expression
  
        --  N_Raise_Program_Error
        --  Sloc references related construct
!       --  Condition (set to Empty if no condition)
!       --  Reason
        --  plus fields for expression
  
        --  N_Raise_Storage_Error
        --  Sloc references related construct
!       --  Condition (set to Empty if no condition)
!       --  Reason
        --  plus fields for expression
  
        --  Note: Sloc is copied from the expression generating the exception.
*************** package Sinfo is
*** 8319,8333 ****
  
        --  N_Push_Constraint_Error_Label
        --  Sloc references first statement in region covered
!       --  Exception_Label (Node5-Sem)
  
        --  N_Push_Program_Error_Label
        --  Sloc references first statement in region covered
!       --  Exception_Label (Node5-Sem)
  
        --  N_Push_Storage_Error_Label
        --  Sloc references first statement in region covered
!       --  Exception_Label (Node5-Sem)
  
        --  N_Pop_Constraint_Error_Label
        --  Sloc references last statement in region covered
--- 8291,8305 ----
  
        --  N_Push_Constraint_Error_Label
        --  Sloc references first statement in region covered
!       --  Exception_Label
  
        --  N_Push_Program_Error_Label
        --  Sloc references first statement in region covered
!       --  Exception_Label
  
        --  N_Push_Storage_Error_Label
        --  Sloc references first statement in region covered
!       --  Exception_Label
  
        --  N_Pop_Constraint_Error_Label
        --  Sloc references last statement in region covered
*************** package Sinfo is
*** 8368,8374 ****
  
        --  N_Reference
        --  Sloc is copied from the expression
!       --  Prefix (Node3)
        --  plus fields for expression
  
        --  Note: in the case where a debug source file is generated, the Sloc
--- 8340,8346 ----
  
        --  N_Reference
        --  Sloc is copied from the expression
!       --  Prefix
        --  plus fields for expression
  
        --  Note: in the case where a debug source file is generated, the Sloc
*************** package Sinfo is
*** 8390,8396 ****
  
        --  N_SCIL_Dispatch_Table_Tag_Init
        --  Sloc references a node for a tag initialization
!       --  SCIL_Entity (Node4-Sem)
        --
        --  An N_SCIL_Dispatch_Table_Tag_Init node may be associated (via
        --  Get_SCIL_Node) with the N_Object_Declaration node corresponding to
--- 8362,8368 ----
  
        --  N_SCIL_Dispatch_Table_Tag_Init
        --  Sloc references a node for a tag initialization
!       --  SCIL_Entity
        --
        --  An N_SCIL_Dispatch_Table_Tag_Init node may be associated (via
        --  Get_SCIL_Node) with the N_Object_Declaration node corresponding to
*************** package Sinfo is
*** 8398,8406 ****
  
        --  N_SCIL_Dispatching_Call
        --  Sloc references the node of a dispatching call
!       --  SCIL_Target_Prim (Node2-Sem)
!       --  SCIL_Entity (Node4-Sem)
!       --  SCIL_Controlling_Tag (Node5-Sem)
        --
        --  An N_Scil_Dispatching call node may be associated (via Get_SCIL_Node)
        --  with the N_Procedure_Call_Statement or N_Function_Call node (or a
--- 8370,8378 ----
  
        --  N_SCIL_Dispatching_Call
        --  Sloc references the node of a dispatching call
!       --  SCIL_Target_Prim
!       --  SCIL_Entity
!       --  SCIL_Controlling_Tag
        --
        --  An N_Scil_Dispatching call node may be associated (via Get_SCIL_Node)
        --  with the N_Procedure_Call_Statement or N_Function_Call node (or a
*************** package Sinfo is
*** 8408,8415 ****
  
        --  N_SCIL_Membership_Test
        --  Sloc references the node of a membership test
!       --  SCIL_Tag_Value (Node5-Sem)
!       --  SCIL_Entity (Node4-Sem)
        --
        --  An N_Scil_Membership_Test node may be associated (via Get_SCIL_Node)
        --  with the N_In node (or a rewriting thereof) corresponding to a
--- 8380,8387 ----
  
        --  N_SCIL_Membership_Test
        --  Sloc references the node of a membership test
!       --  SCIL_Tag_Value
!       --  SCIL_Entity
        --
        --  An N_Scil_Membership_Test node may be associated (via Get_SCIL_Node)
        --  with the N_In node (or a rewriting thereof) corresponding to a
*************** package Sinfo is
*** 8431,8437 ****
  
        --  N_Unchecked_Expression
        --  Sloc is a copy of the Sloc of the expression
!       --  Expression (Node3)
        --  plus fields for expression
  
        --  Note: in the case where a debug source file is generated, the Sloc
--- 8403,8409 ----
  
        --  N_Unchecked_Expression
        --  Sloc is a copy of the Sloc of the expression
!       --  Expression
        --  plus fields for expression
  
        --  Note: in the case where a debug source file is generated, the Sloc
*************** package Sinfo is
*** 8444,8451 ****
        --  An unchecked type conversion node represents the semantic action
        --  corresponding to a call to an instantiation of Unchecked_Conversion.
        --  It is generated as a result of actual use of Unchecked_Conversion
!       --  and also the expander generates unchecked type conversion nodes
!       --  directly for expansion of complex semantic actions.
  
        --  Note: an unchecked type conversion is a variable as far as the
        --  semantics are concerned, which is convenient for the expander.
--- 8416,8426 ----
        --  An unchecked type conversion node represents the semantic action
        --  corresponding to a call to an instantiation of Unchecked_Conversion.
        --  It is generated as a result of actual use of Unchecked_Conversion
!       --  and also by the expander.
! 
!       --  Unchecked type conversion nodes should be created by calling
!       --  Tbuild.Unchecked_Convert_To, rather than by directly calling
!       --  Nmake.Make_Unchecked_Type_Conversion.
  
        --  Note: an unchecked type conversion is a variable as far as the
        --  semantics are concerned, which is convenient for the expander.
*************** package Sinfo is
*** 8457,8466 ****
  
        --  N_Unchecked_Type_Conversion
        --  Sloc points to related node in source
!       --  Subtype_Mark (Node4)
!       --  Expression (Node3)
!       --  Kill_Range_Check (Flag11-Sem)
!       --  No_Truncation (Flag17-Sem)
        --  plus fields for expression
  
        --  Note: in the case where a debug source file is generated, the Sloc
--- 8432,8441 ----
  
        --  N_Unchecked_Type_Conversion
        --  Sloc points to related node in source
!       --  Subtype_Mark
!       --  Expression
!       --  Kill_Range_Check
!       --  No_Truncation
        --  plus fields for expression
  
        --  Note: in the case where a debug source file is generated, the Sloc
*************** package Sinfo is
*** 8499,8506 ****
  
        --  N_Validate_Unchecked_Conversion
        --  Sloc points to instantiation (location for warning message)
!       --  Source_Type (Node1-Sem)
!       --  Target_Type (Node2-Sem)
  
        --  Note: in the case where a debug source file is generated, the Sloc
        --  for this node points to the VALIDATE keyword in the file output.
--- 8474,8481 ----
  
        --  N_Validate_Unchecked_Conversion
        --  Sloc points to instantiation (location for warning message)
!       --  Source_Type
!       --  Target_Type
  
        --  Note: in the case where a debug source file is generated, the Sloc
        --  for this node points to the VALIDATE keyword in the file output.
*************** package Sinfo is
*** 8532,8543 ****
  
        --  N_Variable_Reference_Marker
        --  Sloc points to Sloc of original variable reference
!       --  Target (Node1-Sem)
!       --  Is_Elaboration_Checks_OK_Node (Flag1-Sem)
!       --  Is_SPARK_Mode_On_Node (Flag2-Sem)
!       --  Is_Elaboration_Warnings_OK_Node (Flag3-Sem)
!       --  Is_Read (Flag4-Sem)
!       --  Is_Write (Flag5-Sem)
  
     -----------
     -- Empty --
--- 8507,8518 ----
  
        --  N_Variable_Reference_Marker
        --  Sloc points to Sloc of original variable reference
!       --  Target
!       --  Is_Elaboration_Checks_OK_Node
!       --  Is_SPARK_Mode_On_Node
!       --  Is_Elaboration_Warnings_OK_Node
!       --  Is_Read
!       --  Is_Write
  
     -----------
     -- Empty --
*************** package Sinfo is
*** 8547,8553 ****
     --  some other situations to indicate an uninitialized value.
  
     --  N_Empty
!    --  Chars (Name1) is set to No_Name
  
     -----------
     -- Error --
--- 8522,8528 ----
     --  some other situations to indicate an uninitialized value.
  
     --  N_Empty
!    --  Chars is set to No_Name
  
     -----------
     -- Error --
*************** package Sinfo is
*** 8558,13864 ****
     --  error recovery (Error_Posted is also set in the Error node).
  
     --  N_Error
!    --  Chars (Name1) is set to Error_Name
!    --  Etype (Node5-Sem)
! 
!    --------------------------
!    -- Node Type Definition --
!    --------------------------
! 
!    --  The following is the definition of the Node_Kind type. As previously
!    --  discussed, this is separated off to allow rearrangement of the order to
!    --  facilitate definition of subtype ranges. The comments show the subtype
!    --  classes which apply to each set of node kinds. The first entry in the
!    --  comment characterizes the following list of nodes.
! 
!    type Node_Kind is (
!       N_Unused_At_Start,
! 
!       --  N_Representation_Clause
! 
!       N_At_Clause,
!       N_Component_Clause,
!       N_Enumeration_Representation_Clause,
!       N_Mod_Clause,
!       N_Record_Representation_Clause,
! 
!       --  N_Representation_Clause, N_Has_Chars
! 
!       N_Attribute_Definition_Clause,
! 
!       --  N_Has_Chars
! 
!       N_Empty,
!       N_Pragma_Argument_Association,
! 
!       --  N_Has_Etype, N_Has_Chars
! 
!       --  Note: of course N_Error does not really have Etype or Chars fields,
!       --  and any attempt to access these fields in N_Error will cause an
!       --  error, but historically this always has been positioned so that an
!       --  "in N_Has_Chars" or "in N_Has_Etype" test yields true for N_Error.
!       --  Most likely this makes coding easier somewhere but still seems
!       --  undesirable. To be investigated some time ???
! 
!       N_Error,
! 
!       --  N_Entity, N_Has_Etype, N_Has_Chars
! 
!       N_Defining_Character_Literal,
!       N_Defining_Identifier,
!       N_Defining_Operator_Symbol,
! 
!       --  N_Subexpr, N_Has_Etype, N_Has_Chars, N_Has_Entity
! 
!       N_Expanded_Name,
! 
!       --  N_Direct_Name, N_Subexpr, N_Has_Etype,
!       --  N_Has_Chars, N_Has_Entity
! 
!       N_Identifier,
!       N_Operator_Symbol,
! 
!       --  N_Direct_Name, N_Subexpr, N_Has_Etype,
!       --  N_Has_Chars, N_Has_Entity
! 
!       N_Character_Literal,
! 
!       --  N_Binary_Op, N_Op, N_Subexpr,
!       --  N_Has_Etype, N_Has_Chars, N_Has_Entity
! 
!       N_Op_Add,
!       N_Op_Concat,
!       N_Op_Expon,
!       N_Op_Subtract,
! 
!       --  N_Binary_Op, N_Op, N_Subexpr,
!       --  N_Has_Etype, N_Has_Chars, N_Has_Entity, N_Multiplying_Operator
! 
!       N_Op_Divide,
!       N_Op_Mod,
!       N_Op_Multiply,
!       N_Op_Rem,
! 
!       --  N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype
!       --  N_Has_Entity, N_Has_Chars, N_Op_Boolean
! 
!       N_Op_And,
! 
!       --  N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype
!       --  N_Has_Entity, N_Has_Chars, N_Op_Boolean, N_Op_Compare
! 
!       N_Op_Eq,
!       N_Op_Ge,
!       N_Op_Gt,
!       N_Op_Le,
!       N_Op_Lt,
!       N_Op_Ne,
! 
!       --  N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype
!       --  N_Has_Entity, N_Has_Chars, N_Op_Boolean
! 
!       N_Op_Or,
!       N_Op_Xor,
! 
!       --  N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype,
!       --  N_Op_Shift, N_Has_Chars, N_Has_Entity
! 
!       N_Op_Rotate_Left,
!       N_Op_Rotate_Right,
!       N_Op_Shift_Left,
!       N_Op_Shift_Right,
!       N_Op_Shift_Right_Arithmetic,
! 
!       --  N_Unary_Op, N_Op, N_Subexpr, N_Has_Etype,
!       --  N_Has_Chars, N_Has_Entity
! 
!       N_Op_Abs,
!       N_Op_Minus,
!       N_Op_Not,
!       N_Op_Plus,
! 
!       --  N_Subexpr, N_Has_Etype, N_Has_Entity
! 
!       N_Attribute_Reference,
! 
!       --  N_Subexpr, N_Has_Etype, N_Membership_Test
! 
!       N_In,
!       N_Not_In,
! 
!       --  N_Subexpr, N_Has_Etype, N_Short_Circuit
! 
!       N_And_Then,
!       N_Or_Else,
! 
!       --  N_Subexpr, N_Has_Etype, N_Subprogram_Call
! 
!       N_Function_Call,
!       N_Procedure_Call_Statement,
! 
!       --  N_Subexpr, N_Has_Etype, N_Raise_xxx_Error
! 
!       N_Raise_Constraint_Error,
!       N_Raise_Program_Error,
!       N_Raise_Storage_Error,
! 
!       --  N_Subexpr, N_Has_Etype, N_Numeric_Or_String_Literal
! 
!       N_Integer_Literal,
!       N_Real_Literal,
!       N_String_Literal,
! 
!       --  N_Subexpr, N_Has_Etype
! 
!       N_Explicit_Dereference,
!       N_Expression_With_Actions,
!       N_If_Expression,
!       N_Indexed_Component,
!       N_Null,
!       N_Qualified_Expression,
!       N_Quantified_Expression,
!       N_Aggregate,
!       N_Allocator,
!       N_Case_Expression,
!       N_Delta_Aggregate,
!       N_Extension_Aggregate,
!       N_Raise_Expression,
!       N_Range,
!       N_Reference,
!       N_Selected_Component,
!       N_Slice,
!       N_Target_Name,
!       N_Type_Conversion,
!       N_Unchecked_Expression,
!       N_Unchecked_Type_Conversion,
! 
!       --  N_Has_Etype
! 
!       N_Subtype_Indication,
! 
!       --  N_Declaration
! 
!       N_Component_Declaration,
!       N_Entry_Declaration,
!       N_Expression_Function,
!       N_Formal_Object_Declaration,
!       N_Formal_Type_Declaration,
!       N_Full_Type_Declaration,
!       N_Incomplete_Type_Declaration,
!       N_Iterator_Specification,
!       N_Loop_Parameter_Specification,
!       N_Object_Declaration,
!       N_Protected_Type_Declaration,
!       N_Private_Extension_Declaration,
!       N_Private_Type_Declaration,
!       N_Subtype_Declaration,
! 
!       --  N_Subprogram_Specification, N_Declaration
! 
!       N_Function_Specification,
!       N_Procedure_Specification,
! 
!       --  N_Access_To_Subprogram_Definition
! 
!       N_Access_Function_Definition,
!       N_Access_Procedure_Definition,
! 
!       --  N_Later_Decl_Item
! 
!       N_Task_Type_Declaration,
! 
!       --  N_Body_Stub, N_Later_Decl_Item
! 
!       N_Package_Body_Stub,
!       N_Protected_Body_Stub,
!       N_Subprogram_Body_Stub,
!       N_Task_Body_Stub,
! 
!       --  N_Generic_Instantiation, N_Later_Decl_Item
!       --  N_Subprogram_Instantiation
! 
!       N_Function_Instantiation,
!       N_Procedure_Instantiation,
! 
!       --  N_Generic_Instantiation, N_Later_Decl_Item
! 
!       N_Package_Instantiation,
! 
!       --  N_Unit_Body, N_Later_Decl_Item, N_Proper_Body
! 
!       N_Package_Body,
!       N_Subprogram_Body,
! 
!       --  N_Later_Decl_Item, N_Proper_Body
! 
!       N_Protected_Body,
!       N_Task_Body,
! 
!       --  N_Later_Decl_Item
! 
!       N_Implicit_Label_Declaration,
!       N_Package_Declaration,
!       N_Single_Task_Declaration,
!       N_Subprogram_Declaration,
!       N_Use_Package_Clause,
! 
!       --  N_Generic_Declaration, N_Later_Decl_Item
! 
!       N_Generic_Package_Declaration,
!       N_Generic_Subprogram_Declaration,
! 
!       --  N_Array_Type_Definition
! 
!       N_Constrained_Array_Definition,
!       N_Unconstrained_Array_Definition,
! 
!       --  N_Renaming_Declaration
! 
!       N_Exception_Renaming_Declaration,
!       N_Object_Renaming_Declaration,
!       N_Package_Renaming_Declaration,
!       N_Subprogram_Renaming_Declaration,
! 
!       --  N_Generic_Renaming_Declaration, N_Renaming_Declaration
! 
!       N_Generic_Function_Renaming_Declaration,
!       N_Generic_Package_Renaming_Declaration,
!       N_Generic_Procedure_Renaming_Declaration,
! 
!       --  N_Statement_Other_Than_Procedure_Call
! 
!       N_Abort_Statement,
!       N_Accept_Statement,
!       N_Assignment_Statement,
!       N_Asynchronous_Select,
!       N_Block_Statement,
!       N_Case_Statement,
!       N_Code_Statement,
!       N_Compound_Statement,
!       N_Conditional_Entry_Call,
! 
!       --  N_Statement_Other_Than_Procedure_Call, N_Delay_Statement
! 
!       N_Delay_Relative_Statement,
!       N_Delay_Until_Statement,
! 
!       --  N_Statement_Other_Than_Procedure_Call
! 
!       N_Entry_Call_Statement,
!       N_Free_Statement,
!       N_Goto_Statement,
!       N_Loop_Statement,
!       N_Null_Statement,
!       N_Raise_Statement,
!       N_Requeue_Statement,
!       N_Simple_Return_Statement,
!       N_Extended_Return_Statement,
!       N_Selective_Accept,
!       N_Timed_Entry_Call,
! 
!       --  N_Statement_Other_Than_Procedure_Call, N_Has_Condition
! 
!       N_Exit_Statement,
!       N_If_Statement,
! 
!       --  N_Has_Condition
! 
!       N_Accept_Alternative,
!       N_Delay_Alternative,
!       N_Elsif_Part,
!       N_Entry_Body_Formal_Part,
!       N_Iteration_Scheme,
!       N_Terminate_Alternative,
! 
!       --  N_Formal_Subprogram_Declaration
! 
!       N_Formal_Abstract_Subprogram_Declaration,
!       N_Formal_Concrete_Subprogram_Declaration,
! 
!       --  N_Push_xxx_Label, N_Push_Pop_xxx_Label
! 
!       N_Push_Constraint_Error_Label,
!       N_Push_Program_Error_Label,
!       N_Push_Storage_Error_Label,
! 
!       --  N_Pop_xxx_Label, N_Push_Pop_xxx_Label
! 
!       N_Pop_Constraint_Error_Label,
!       N_Pop_Program_Error_Label,
!       N_Pop_Storage_Error_Label,
! 
!       --  SCIL nodes
! 
!       N_SCIL_Dispatch_Table_Tag_Init,
!       N_SCIL_Dispatching_Call,
!       N_SCIL_Membership_Test,
! 
!       --  Other nodes (not part of any subtype class)
! 
!       N_Abortable_Part,
!       N_Abstract_Subprogram_Declaration,
!       N_Access_Definition,
!       N_Access_To_Object_Definition,
!       N_Aspect_Specification,
!       N_Call_Marker,
!       N_Case_Expression_Alternative,
!       N_Case_Statement_Alternative,
!       N_Compilation_Unit,
!       N_Compilation_Unit_Aux,
!       N_Component_Association,
!       N_Component_Definition,
!       N_Component_List,
!       N_Contract,
!       N_Derived_Type_Definition,
!       N_Decimal_Fixed_Point_Definition,
!       N_Defining_Program_Unit_Name,
!       N_Delta_Constraint,
!       N_Designator,
!       N_Digits_Constraint,
!       N_Discriminant_Association,
!       N_Discriminant_Specification,
!       N_Enumeration_Type_Definition,
!       N_Entry_Body,
!       N_Entry_Call_Alternative,
!       N_Entry_Index_Specification,
!       N_Exception_Declaration,
!       N_Exception_Handler,
!       N_Floating_Point_Definition,
!       N_Formal_Decimal_Fixed_Point_Definition,
!       N_Formal_Derived_Type_Definition,
!       N_Formal_Discrete_Type_Definition,
!       N_Formal_Floating_Point_Definition,
!       N_Formal_Modular_Type_Definition,
!       N_Formal_Ordinary_Fixed_Point_Definition,
!       N_Formal_Package_Declaration,
!       N_Formal_Private_Type_Definition,
!       N_Formal_Incomplete_Type_Definition,
!       N_Formal_Signed_Integer_Type_Definition,
!       N_Freeze_Entity,
!       N_Freeze_Generic_Entity,
!       N_Generic_Association,
!       N_Handled_Sequence_Of_Statements,
!       N_Index_Or_Discriminant_Constraint,
!       N_Iterated_Component_Association,
!       N_Iterated_Element_Association,
!       N_Itype_Reference,
!       N_Label,
!       N_Modular_Type_Definition,
!       N_Number_Declaration,
!       N_Ordinary_Fixed_Point_Definition,
!       N_Others_Choice,
!       N_Package_Specification,
!       N_Parameter_Association,
!       N_Parameter_Specification,
!       N_Pragma,
!       N_Protected_Definition,
!       N_Range_Constraint,
!       N_Real_Range_Specification,
!       N_Record_Definition,
!       N_Signed_Integer_Type_Definition,
!       N_Single_Protected_Declaration,
!       N_Subunit,
!       N_Task_Definition,
!       N_Triggering_Alternative,
!       N_Use_Type_Clause,
!       N_Validate_Unchecked_Conversion,
!       N_Variable_Reference_Marker,
!       N_Variant,
!       N_Variant_Part,
!       N_With_Clause,
!       N_Unused_At_End);
! 
!    for Node_Kind'Size use 8;
!    --  The data structures in Atree assume this
! 
!    ----------------------------
!    -- Node Class Definitions --
!    ----------------------------
! 
!    subtype N_Access_To_Subprogram_Definition is Node_Kind range
!      N_Access_Function_Definition ..
!      N_Access_Procedure_Definition;
! 
!    subtype N_Array_Type_Definition is Node_Kind range
!      N_Constrained_Array_Definition ..
!      N_Unconstrained_Array_Definition;
! 
!    subtype N_Binary_Op is Node_Kind range
!      N_Op_Add ..
!      N_Op_Shift_Right_Arithmetic;
! 
!    subtype N_Body_Stub is Node_Kind range
!      N_Package_Body_Stub ..
!      N_Task_Body_Stub;
! 
!    subtype N_Declaration is Node_Kind range
!      N_Component_Declaration ..
!      N_Procedure_Specification;
!    --  Note: this includes all constructs normally thought of as declarations
!    --  except those which are separately grouped as later declarations.
! 
!    subtype N_Delay_Statement is Node_Kind range
!       N_Delay_Relative_Statement ..
!       N_Delay_Until_Statement;
! 
!    subtype N_Direct_Name is Node_Kind range
!      N_Identifier ..
!      N_Character_Literal;
! 
!    subtype N_Entity is Node_Kind range
!      N_Defining_Character_Literal ..
!      N_Defining_Operator_Symbol;
! 
!    subtype N_Formal_Subprogram_Declaration is Node_Kind range
!      N_Formal_Abstract_Subprogram_Declaration ..
!      N_Formal_Concrete_Subprogram_Declaration;
! 
!    subtype N_Generic_Declaration is Node_Kind range
!      N_Generic_Package_Declaration ..
!      N_Generic_Subprogram_Declaration;
! 
!    subtype N_Generic_Instantiation is Node_Kind range
!      N_Function_Instantiation ..
!      N_Package_Instantiation;
! 
!    subtype N_Generic_Renaming_Declaration is Node_Kind range
!      N_Generic_Function_Renaming_Declaration ..
!      N_Generic_Procedure_Renaming_Declaration;
! 
!    subtype N_Has_Chars is Node_Kind range
!      N_Attribute_Definition_Clause ..
!      N_Op_Plus;
! 
!    subtype N_Has_Entity is Node_Kind range
!      N_Expanded_Name ..
!      N_Attribute_Reference;
!    --  Nodes that have Entity fields
!    --  Warning: DOES NOT INCLUDE N_Freeze_Entity, N_Freeze_Generic_Entity,
!    --  N_Aspect_Specification, or N_Attribute_Definition_Clause.
! 
!    subtype N_Has_Etype is Node_Kind range
!      N_Error ..
!      N_Subtype_Indication;
! 
!    subtype N_Multiplying_Operator is Node_Kind range
!       N_Op_Divide ..
!       N_Op_Rem;
! 
!    subtype N_Later_Decl_Item is Node_Kind range
!      N_Task_Type_Declaration ..
!      N_Generic_Subprogram_Declaration;
!    --  Note: this is Ada 83 relevant only (see Ada 83 RM 3.9 (2)) and includes
!    --  only those items which can appear as later declarative items. This also
!    --  includes N_Implicit_Label_Declaration which is not specifically in the
!    --  grammar but may appear as a valid later declarative items. It does NOT
!    --  include N_Pragma which can also appear among later declarative items.
!    --  It does however include N_Protected_Body, which is a bit peculiar, but
!    --  harmless since this cannot appear in Ada 83 mode anyway.
! 
!    subtype N_Membership_Test is Node_Kind range
!       N_In ..
!       N_Not_In;
! 
!    subtype N_Numeric_Or_String_Literal is Node_Kind range
!       N_Integer_Literal ..
!       N_String_Literal;
! 
!    subtype N_Op is Node_Kind range
!      N_Op_Add ..
!      N_Op_Plus;
! 
!    subtype N_Op_Boolean is Node_Kind range
!      N_Op_And ..
!      N_Op_Xor;
!    --  Binary operators which take operands of a boolean type, and yield
!    --  a result of a boolean type.
! 
!    subtype N_Op_Compare is Node_Kind range
!      N_Op_Eq ..
!      N_Op_Ne;
! 
!    subtype N_Op_Shift is Node_Kind range
!      N_Op_Rotate_Left ..
!      N_Op_Shift_Right_Arithmetic;
! 
!    subtype N_Proper_Body is Node_Kind range
!      N_Package_Body ..
!      N_Task_Body;
! 
!    subtype N_Push_xxx_Label is Node_Kind range
!      N_Push_Constraint_Error_Label ..
!      N_Push_Storage_Error_Label;
! 
!    subtype N_Pop_xxx_Label is Node_Kind range
!      N_Pop_Constraint_Error_Label ..
!      N_Pop_Storage_Error_Label;
! 
!    subtype N_Push_Pop_xxx_Label is Node_Kind range
!      N_Push_Constraint_Error_Label ..
!      N_Pop_Storage_Error_Label;
! 
!    subtype N_Raise_xxx_Error is Node_Kind range
!      N_Raise_Constraint_Error ..
!      N_Raise_Storage_Error;
! 
!    subtype N_Renaming_Declaration is Node_Kind range
!      N_Exception_Renaming_Declaration ..
!      N_Generic_Procedure_Renaming_Declaration;
! 
!    subtype N_Representation_Clause is Node_Kind range
!      N_At_Clause ..
!      N_Attribute_Definition_Clause;
! 
!    subtype N_Short_Circuit is Node_Kind range
!      N_And_Then ..
!      N_Or_Else;
! 
!    subtype N_SCIL_Node is Node_Kind range
!      N_SCIL_Dispatch_Table_Tag_Init ..
!      N_SCIL_Membership_Test;
! 
!    subtype N_Statement_Other_Than_Procedure_Call is Node_Kind range
!      N_Abort_Statement ..
!      N_If_Statement;
!    --  Note that this includes all statement types except for the cases of the
!    --  N_Procedure_Call_Statement which is considered to be a subexpression
!    --  (since overloading is possible, so it needs to go through the normal
!    --  overloading resolution for expressions).
! 
!    subtype N_Subprogram_Call is Node_Kind range
!       N_Function_Call ..
!       N_Procedure_Call_Statement;
! 
!    subtype N_Subprogram_Instantiation is Node_Kind range
!      N_Function_Instantiation ..
!      N_Procedure_Instantiation;
! 
!    subtype N_Has_Condition is Node_Kind range
!      N_Exit_Statement ..
!      N_Terminate_Alternative;
!    --  Nodes with condition fields (does not include N_Raise_xxx_Error)
! 
!    subtype N_Subexpr is Node_Kind range
!      N_Expanded_Name ..
!      N_Unchecked_Type_Conversion;
!    --  Nodes with expression fields
! 
!    subtype N_Subprogram_Specification is Node_Kind range
!      N_Function_Specification ..
!      N_Procedure_Specification;
! 
!    subtype N_Unary_Op is Node_Kind range
!      N_Op_Abs ..
!      N_Op_Plus;
! 
!    subtype N_Unit_Body is Node_Kind range
!      N_Package_Body ..
!      N_Subprogram_Body;
! 
!    ---------------------------
!    -- Node Access Functions --
!    ---------------------------
! 
!    --  The following functions return the contents of the indicated field of
!    --  the node referenced by the argument, which is a Node_Id. They provide
!    --  logical access to fields in the node which could be accessed using the
!    --  Atree.Unchecked_Access package, but the idea is always to use these
!    --  higher level routines which preserve strong typing. In debug mode,
!    --  these routines check that they are being applied to an appropriate
!    --  node, as well as checking that the node is in range.
! 
!    function Abort_Present
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function Abortable_Part
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Abstract_Present
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function Accept_Handler_Records
!      (N : Node_Id) return List_Id;    -- List5
! 
!    function Accept_Statement
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Access_Definition
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Access_To_Subprogram_Definition
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Access_Types_To_Process
!      (N : Node_Id) return Elist_Id;   -- Elist2
! 
!    function Actions
!      (N : Node_Id) return List_Id;    -- List1
! 
!    function Activation_Chain_Entity
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Acts_As_Spec
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function Actual_Designated_Subtype
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Address_Warning_Posted
!      (N : Node_Id) return Boolean;    -- Flag18
! 
!    function Aggregate_Bounds
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Aliased_Present
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function Alloc_For_BIP_Return
!      (N : Node_Id) return Boolean;    -- Flag1
! 
!    function All_Others
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function All_Present
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function Alternatives
!      (N : Node_Id) return List_Id;    -- List4
! 
!    function Ancestor_Part
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Atomic_Sync_Required
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Array_Aggregate
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Aspect_On_Partial_View
!      (N : Node_Id) return Boolean;    -- Flag18
! 
!    function Aspect_Rep_Item
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Assignment_OK
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function Associated_Node
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function At_End_Proc
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Attribute_Name
!      (N : Node_Id) return Name_Id;    -- Name2
! 
!    function Aux_Decls_Node
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Backwards_OK
!      (N : Node_Id) return Boolean;    -- Flag6
! 
!    function Bad_Is_Detected
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function By_Ref
!      (N : Node_Id) return Boolean;    -- Flag5
! 
!    function Body_Required
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Body_To_Inline
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Box_Present
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function Char_Literal_Value
!      (N : Node_Id) return Uint;       -- Uint2
! 
!    function Chars
!      (N : Node_Id) return Name_Id;    -- Name1
! 
!    function Check_Address_Alignment
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Choice_Parameter
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Choices
!      (N : Node_Id) return List_Id;    -- List1
! 
!    function Class_Present
!      (N : Node_Id) return Boolean;    -- Flag6
! 
!    function Classifications
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Cleanup_Actions
!      (N : Node_Id) return List_Id;    -- List5
! 
!    function Comes_From_Extended_Return_Statement
!      (N : Node_Id) return Boolean;    -- Flag18
! 
!    function Compile_Time_Known_Aggregate
!      (N : Node_Id) return Boolean;    -- Flag18
! 
!    function Component_Associations
!      (N : Node_Id) return List_Id;    -- List2
! 
!    function Component_Clauses
!      (N : Node_Id) return List_Id;    -- List3
! 
!    function Component_Definition
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Component_Items
!      (N : Node_Id) return List_Id;    -- List3
! 
!    function Component_List
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Component_Name
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Componentwise_Assignment
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Condition
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Condition_Actions
!      (N : Node_Id) return List_Id;    -- List3
! 
!    function Config_Pragmas
!      (N : Node_Id) return List_Id;    -- List4
! 
!    function Constant_Present
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function Constraint
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Constraints
!      (N : Node_Id) return List_Id;    -- List1
! 
!    function Context_Installed
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Context_Pending
!      (N : Node_Id) return Boolean;    -- Flag16
! 
!    function Context_Items
!      (N : Node_Id) return List_Id;    -- List1
! 
!    function Contract_Test_Cases
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Controlling_Argument
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Conversion_OK
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Convert_To_Return_False
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Corresponding_Aspect
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Corresponding_Body
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Corresponding_Formal_Spec
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Corresponding_Generic_Association
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Corresponding_Integer_Value
!      (N : Node_Id) return Uint;       -- Uint4
! 
!    function Corresponding_Spec
!      (N : Node_Id) return Entity_Id;  -- Node5
! 
!    function Corresponding_Spec_Of_Stub
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Corresponding_Stub
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Dcheck_Function
!      (N : Node_Id) return Entity_Id;  -- Node5
! 
!    function Declarations
!      (N : Node_Id) return List_Id;    -- List2
! 
!    function Default_Expression
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Default_Storage_Pool
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Default_Name
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Defining_Identifier
!      (N : Node_Id) return Entity_Id;  -- Node1
! 
!    function Defining_Unit_Name
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Delay_Alternative
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Delay_Statement
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Delta_Expression
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Digits_Expression
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Discr_Check_Funcs_Built
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Discrete_Choices
!      (N : Node_Id) return List_Id;    -- List4
! 
!    function Discrete_Range
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Discrete_Subtype_Definition
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Discrete_Subtype_Definitions
!      (N : Node_Id) return List_Id;    -- List2
! 
!    function Discriminant_Specifications
!      (N : Node_Id) return List_Id;    -- List4
! 
!    function Discriminant_Type
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Do_Accessibility_Check
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Do_Discriminant_Check
!      (N : Node_Id) return Boolean;    -- Flag3
! 
!    function Do_Division_Check
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Do_Length_Check
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function Do_Overflow_Check
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function Do_Range_Check
!      (N : Node_Id) return Boolean;    -- Flag9
! 
!    function Do_Storage_Check
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function Do_Tag_Check
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Elaborate_All_Desirable
!      (N : Node_Id) return Boolean;    -- Flag9
! 
!    function Elaborate_All_Present
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Elaborate_Desirable
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Elaborate_Present
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function Else_Actions
!      (N : Node_Id) return List_Id;    -- List3
! 
!    function Else_Statements
!      (N : Node_Id) return List_Id;    -- List4
! 
!    function Elsif_Parts
!      (N : Node_Id) return List_Id;    -- List3
! 
!    function Enclosing_Variant
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function End_Label
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function End_Span
!      (N : Node_Id) return Uint;       -- Uint5
! 
!    function Entity
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Entity_Or_Associated_Node
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Entry_Body_Formal_Part
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Entry_Call_Alternative
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Entry_Call_Statement
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Entry_Direct_Name
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Entry_Index
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Entry_Index_Specification
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Etype
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Exception_Choices
!      (N : Node_Id) return List_Id;    -- List4
! 
!    function Exception_Handlers
!      (N : Node_Id) return List_Id;    -- List5
! 
!    function Exception_Junk
!      (N : Node_Id) return Boolean;    -- Flag8
! 
!    function Exception_Label
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Explicit_Actual_Parameter
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Expansion_Delayed
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Explicit_Generic_Actual_Parameter
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Expression
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Expression_Copy
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Expressions
!      (N : Node_Id) return List_Id;    -- List1
! 
!    function First_Bit
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function First_Inlined_Subprogram
!      (N : Node_Id) return Entity_Id;  -- Node3
! 
!    function First_Name
!      (N : Node_Id) return Boolean;    -- Flag5
! 
!    function First_Named_Actual
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function First_Real_Statement
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function First_Subtype_Link
!      (N : Node_Id) return Entity_Id;  -- Node5
! 
!    function Float_Truncate
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Formal_Type_Definition
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Forwards_OK
!      (N : Node_Id) return Boolean;    -- Flag5
! 
!    function From_Aspect_Specification
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function From_At_End
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function From_At_Mod
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function From_Conditional_Expression
!      (N : Node_Id) return Boolean;    -- Flag1
! 
!    function From_Default
!      (N : Node_Id) return Boolean;    -- Flag6
! 
!    function Generalized_Indexing
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Generic_Associations
!      (N : Node_Id) return List_Id;    -- List3
! 
!    function Generic_Formal_Declarations
!      (N : Node_Id) return List_Id;    -- List2
! 
!    function Generic_Parent
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Generic_Parent_Type
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Handled_Statement_Sequence
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Handler_List_Entry
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Has_Created_Identifier
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function Has_Dereference_Action
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Has_Dynamic_Length_Check
!      (N : Node_Id) return Boolean;    -- Flag10
! 
!    function Has_Init_Expression
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Has_Local_Raise
!      (N : Node_Id) return Boolean;    -- Flag8
! 
!    function Has_No_Elaboration_Code
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function Has_Pragma_Suppress_All
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Has_Private_View
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Has_Relative_Deadline_Pragma
!      (N : Node_Id) return Boolean;    -- Flag9
! 
!    function Has_Self_Reference
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Has_SP_Choice
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function Has_Storage_Size_Pragma
!      (N : Node_Id) return Boolean;    -- Flag5
! 
!    function Has_Target_Names
!      (N : Node_Id) return Boolean;    -- Flag8
! 
!    function Has_Wide_Character
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Has_Wide_Wide_Character
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Header_Size_Added
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Hidden_By_Use_Clause
!      (N : Node_Id) return Elist_Id;   -- Elist5
! 
!    function High_Bound
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Identifier
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Interface_List
!      (N : Node_Id) return List_Id;    -- List2
! 
!    function Interface_Present
!      (N : Node_Id) return Boolean;    -- Flag16
! 
!    function Implicit_With
!      (N : Node_Id) return Boolean;    -- Flag16
! 
!    function Import_Interface_Present
!      (N : Node_Id) return Boolean;    -- Flag16
! 
!    function In_Present
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function Includes_Infinities
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Incomplete_View
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Inherited_Discriminant
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Instance_Spec
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Intval
!      (N : Node_Id) return Uint;       -- Uint3
! 
!    function Is_Abort_Block
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function Is_Accessibility_Actual
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Is_Analyzed_Pragma
!      (N : Node_Id) return Boolean;    -- Flag5
! 
!    function Is_Asynchronous_Call_Block
!      (N : Node_Id) return Boolean;    -- Flag7
! 
!    function Is_Boolean_Aspect
!      (N : Node_Id) return Boolean;    -- Flag16
! 
!    function Is_Checked
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Is_Checked_Ghost_Pragma
!      (N : Node_Id) return Boolean;    -- Flag3
! 
!    function Is_Component_Left_Opnd
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Is_Component_Right_Opnd
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Is_Controlling_Actual
!      (N : Node_Id) return Boolean;    -- Flag16
! 
!    function Is_Declaration_Level_Node
!      (N : Node_Id) return Boolean;    -- Flag5
! 
!    function Is_Delayed_Aspect
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Is_Disabled
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function Is_Dispatching_Call
!      (N : Node_Id) return Boolean;    -- Flag6
! 
!    function Is_Dynamic_Coextension
!      (N : Node_Id) return Boolean;    -- Flag18
! 
!    function Is_Effective_Use_Clause
!      (N : Node_Id) return Boolean;    -- Flag1
! 
!    function Is_Elaboration_Checks_OK_Node
!      (N : Node_Id) return Boolean;    -- Flag1
! 
!    function Is_Elaboration_Code
!      (N : Node_Id) return Boolean;    -- Flag9
! 
!    function Is_Elaboration_Warnings_OK_Node
!      (N : Node_Id) return Boolean;    -- Flag3
! 
!    function Is_Elsif
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Is_Entry_Barrier_Function
!      (N : Node_Id) return Boolean;    -- Flag8
! 
!    function Is_Expanded_Build_In_Place_Call
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Is_Expanded_Contract
!      (N : Node_Id) return Boolean;    -- Flag1
! 
!    function Is_Finalization_Wrapper
!      (N : Node_Id) return Boolean;    -- Flag9
! 
!    function Is_Folded_In_Parser
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function Is_Generic_Contract_Pragma
!      (N : Node_Id) return Boolean;    -- Flag2
! 
!    function Is_Homogeneous_Aggregate
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Is_Ignored
!      (N : Node_Id) return Boolean;    -- Flag9
! 
!    function Is_Ignored_Ghost_Pragma
!      (N : Node_Id) return Boolean;    -- Flag8
! 
!    function Is_In_Discriminant_Check
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Is_Inherited_Pragma
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function Is_Initialization_Block
!      (N : Node_Id) return Boolean;    -- Flag1
! 
!    function Is_Known_Guaranteed_ABE
!      (N : Node_Id) return Boolean;    -- Flag18
! 
!    function Is_Machine_Number
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Is_Null_Loop
!      (N : Node_Id) return Boolean;    -- Flag16
! 
!    function Is_Overloaded
!      (N : Node_Id) return Boolean;    -- Flag5
! 
!    function Is_Power_Of_2_For_Shift
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Is_Preelaborable_Call
!      (N : Node_Id) return Boolean;    -- Flag7
! 
!    function Is_Prefixed_Call
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function Is_Protected_Subprogram_Body
!      (N : Node_Id) return Boolean;    -- Flag7
! 
!    function Is_Qualified_Universal_Literal
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function Is_Read
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function Is_Source_Call
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function Is_SPARK_Mode_On_Node
!      (N : Node_Id) return Boolean;    -- Flag2
! 
!    function Is_Static_Coextension
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Is_Static_Expression
!      (N : Node_Id) return Boolean;    -- Flag6
! 
!    function Is_Subprogram_Descriptor
!      (N : Node_Id) return Boolean;    -- Flag16
! 
!    function Is_Task_Allocation_Block
!      (N : Node_Id) return Boolean;    -- Flag6
! 
!    function Is_Task_Body_Procedure
!      (N : Node_Id) return Boolean;    -- Flag1
! 
!    function Is_Task_Master
!      (N : Node_Id) return Boolean;    -- Flag5
! 
!    function Is_Write
!      (N : Node_Id) return Boolean;    -- Flag5
! 
!    function Iteration_Scheme
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Iterator_Filter
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Iterator_Specification
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Itype
!      (N : Node_Id) return Entity_Id;  -- Node1
! 
!    function Key_Expression
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Kill_Range_Check
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Label_Construct
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Left_Opnd
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Last_Bit
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Last_Name
!      (N : Node_Id) return Boolean;    -- Flag6
! 
!    function Library_Unit
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Limited_View_Installed
!      (N : Node_Id) return Boolean;    -- Flag18
! 
!    function Limited_Present
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function Literals
!      (N : Node_Id) return List_Id;    -- List1
! 
!    function Local_Raise_Not_OK
!      (N : Node_Id) return Boolean;    -- Flag7
! 
!    function Local_Raise_Statements
!      (N : Node_Id) return Elist_Id;   -- Elist1
! 
!    function Loop_Actions
!      (N : Node_Id) return List_Id;    -- List5
! 
!    function Loop_Parameter_Specification
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Low_Bound
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Mod_Clause
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function More_Ids
!      (N : Node_Id) return Boolean;    -- Flag5
! 
!    function Must_Be_Byte_Aligned
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Must_Not_Freeze
!      (N : Node_Id) return Boolean;    -- Flag8
! 
!    function Must_Not_Override
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function Must_Override
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Name
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Names
!      (N : Node_Id) return List_Id;    -- List2
! 
!    function Next_Entity
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Next_Exit_Statement
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Next_Implicit_With
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Next_Named_Actual
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Next_Pragma
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Next_Rep_Item
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Next_Use_Clause
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function No_Ctrl_Actions
!      (N : Node_Id) return Boolean;    -- Flag7
! 
!    function No_Elaboration_Check
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function No_Entities_Ref_In_Spec
!      (N : Node_Id) return Boolean;    -- Flag8
! 
!    function No_Initialization
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function No_Minimize_Eliminate
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function No_Side_Effect_Removal
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function No_Truncation
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function Null_Excluding_Subtype
!      (N : Node_Id) return Boolean;    -- Flag16
! 
!    function Null_Exclusion_Present
!      (N : Node_Id) return Boolean;    -- Flag11
! 
!    function Null_Exclusion_In_Return_Present
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Null_Present
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Null_Record_Present
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function Null_Statement
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Object_Definition
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Of_Present
!      (N : Node_Id) return Boolean;    -- Flag16
! 
!    function Original_Discriminant
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Original_Entity
!      (N : Node_Id) return Entity_Id;  -- Node2
! 
!    function Others_Discrete_Choices
!      (N : Node_Id) return List_Id;    -- List1
! 
!    function Out_Present
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function Parameter_Associations
!      (N : Node_Id) return List_Id;    -- List3
! 
!    function Parameter_Specifications
!      (N : Node_Id) return List_Id;    -- List3
! 
!    function Parameter_Type
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Parent_Spec
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Parent_With
!      (N : Node_Id) return Boolean;    -- Flag1
! 
!    function Position
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Pragma_Argument_Associations
!      (N : Node_Id) return List_Id;    -- List2
! 
!    function Pragma_Identifier
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Pragmas_After
!      (N : Node_Id) return List_Id;    -- List5
! 
!    function Pragmas_Before
!      (N : Node_Id) return List_Id;    -- List4
! 
!    function Pre_Post_Conditions
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Prefix
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Premature_Use
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Present_Expr
!      (N : Node_Id) return Uint;       -- Uint3
! 
!    function Prev_Ids
!      (N : Node_Id) return Boolean;    -- Flag6
! 
!    function Prev_Use_Clause
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Print_In_Hex
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Private_Declarations
!      (N : Node_Id) return List_Id;    -- List3
! 
!    function Private_Present
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function Procedure_To_Call
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Proper_Body
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Protected_Definition
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Protected_Present
!      (N : Node_Id) return Boolean;    -- Flag6
! 
!    function Raises_Constraint_Error
!      (N : Node_Id) return Boolean;    -- Flag7
! 
!    function Range_Constraint
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Range_Expression
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Real_Range_Specification
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Realval
!      (N : Node_Id) return Ureal;      -- Ureal3
! 
!    function Reason
!      (N : Node_Id) return Uint;       -- Uint3
! 
!    function Record_Extension_Part
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Redundant_Use
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Renaming_Exception
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Result_Definition
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Return_Object_Declarations
!      (N : Node_Id) return List_Id;    -- List3
! 
!    function Return_Statement_Entity
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Reverse_Present
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function Right_Opnd
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Rounded_Result
!      (N : Node_Id) return Boolean;    -- Flag18
! 
!    function Save_Invocation_Graph_Of_Body
!      (N : Node_Id) return Boolean;    -- Flag1
! 
!    function SCIL_Controlling_Tag
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function SCIL_Entity
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function SCIL_Tag_Value
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function SCIL_Target_Prim
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Scope
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Select_Alternatives
!      (N : Node_Id) return List_Id;    -- List1
! 
!    function Selector_Name
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Selector_Names
!      (N : Node_Id) return List_Id;    -- List1
! 
!    function Shift_Count_OK
!      (N : Node_Id) return Boolean;    -- Flag4
! 
!    function Source_Type
!      (N : Node_Id) return Entity_Id;  -- Node1
! 
!    function Specification
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Split_PPC
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function Statements
!      (N : Node_Id) return List_Id;    -- List3
! 
!    function Storage_Pool
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Subpool_Handle_Name
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Strval
!      (N : Node_Id) return String_Id;  -- Str3
! 
!    function Subtype_Indication
!      (N : Node_Id) return Node_Id;    -- Node5
! 
!    function Subtype_Mark
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Subtype_Marks
!      (N : Node_Id) return List_Id;    -- List2
! 
!    function Suppress_Assignment_Checks
!      (N : Node_Id) return Boolean;    -- Flag18
! 
!    function Suppress_Loop_Warnings
!      (N : Node_Id) return Boolean;    -- Flag17
! 
!    function Synchronized_Present
!      (N : Node_Id) return Boolean;    -- Flag7
! 
!    function Tagged_Present
!      (N : Node_Id) return Boolean;    -- Flag15
! 
!    function Target
!      (N : Node_Id) return Entity_Id;  -- Node1
! 
!    function Target_Type
!      (N : Node_Id) return Entity_Id;  -- Node2
! 
!    function Task_Definition
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Task_Present
!      (N : Node_Id) return Boolean;    -- Flag5
! 
!    function Then_Actions
!      (N : Node_Id) return List_Id;    -- List2
! 
!    function Then_Statements
!      (N : Node_Id) return List_Id;    -- List2
! 
!    function Triggering_Alternative
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function Triggering_Statement
!      (N : Node_Id) return Node_Id;    -- Node1
! 
!    function TSS_Elist
!      (N : Node_Id) return Elist_Id;   -- Elist3
! 
!    function Type_Definition
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Uneval_Old_Accept
!      (N : Node_Id) return Boolean;    -- Flag7
! 
!    function Uneval_Old_Warn
!      (N : Node_Id) return Boolean;    -- Flag18
! 
!    function Unit
!      (N : Node_Id) return Node_Id;    -- Node2
! 
!    function Unknown_Discriminants_Present
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    function Unreferenced_In_Spec
!      (N : Node_Id) return Boolean;    -- Flag7
! 
!    function Variant_Part
!      (N : Node_Id) return Node_Id;    -- Node4
! 
!    function Variants
!      (N : Node_Id) return List_Id;    -- List1
! 
!    function Visible_Declarations
!      (N : Node_Id) return List_Id;    -- List2
! 
!    function Uninitialized_Variable
!      (N : Node_Id) return Node_Id;    -- Node3
! 
!    function Used_Operations
!      (N : Node_Id) return Elist_Id;   -- Elist2
! 
!    function Was_Attribute_Reference
!      (N : Node_Id) return Boolean;    -- Flag2
! 
!    function Was_Default_Init_Box_Association
!      (N : Node_Id) return Boolean;    -- Flag14
! 
!    function Was_Expression_Function
!      (N : Node_Id) return Boolean;    -- Flag18
! 
!    function Was_Originally_Stub
!      (N : Node_Id) return Boolean;    -- Flag13
! 
!    --  End functions (note used by xsinfo utility program to end processing)
! 
!    ----------------------------
!    -- Node Update Procedures --
!    ----------------------------
! 
!    --  These are the corresponding node update routines, which again provide
!    --  a high level logical access with type checking. In addition to setting
!    --  the indicated field of the node N to the given Val, in the case of
!    --  tree pointers (List1-4), the parent pointer of the Val node is set to
!    --  point back to node N. This automates the setting of the parent pointer.
! 
!    --  WARNING: There is a matching C declaration of a few subprograms in fe.h
! 
!    procedure Set_Abort_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_Abortable_Part
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Abstract_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_Accept_Handler_Records
!      (N : Node_Id; Val : List_Id);            -- List5
! 
!    procedure Set_Accept_Statement
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Access_Definition
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Access_To_Subprogram_Definition
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Access_Types_To_Process
!      (N : Node_Id; Val : Elist_Id);           -- Elist2
! 
!    procedure Set_Actions
!      (N : Node_Id; Val : List_Id);            -- List1
! 
!    procedure Set_Activation_Chain_Entity
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Acts_As_Spec
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_Actual_Designated_Subtype
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Address_Warning_Posted
!      (N : Node_Id; Val : Boolean := True);    -- Flag18
! 
!    procedure Set_Aggregate_Bounds
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Aliased_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_Alloc_For_BIP_Return
!      (N : Node_Id; Val : Boolean := True);    -- Flag1
! 
!    procedure Set_All_Others
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_All_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_Alternatives
!      (N : Node_Id; Val : List_Id);            -- List4
! 
!    procedure Set_Ancestor_Part
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Atomic_Sync_Required
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Array_Aggregate
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Aspect_On_Partial_View
!      (N : Node_Id; Val : Boolean := True);    -- Flag18
! 
!    procedure Set_Aspect_Rep_Item
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Assignment_OK
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_Associated_Node
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Attribute_Name
!      (N : Node_Id; Val : Name_Id);            -- Name2
! 
!    procedure Set_At_End_Proc
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Aux_Decls_Node
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Backwards_OK
!      (N : Node_Id; Val : Boolean := True);    -- Flag6
! 
!    procedure Set_Bad_Is_Detected
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_Body_Required
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Body_To_Inline
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Box_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_By_Ref
!      (N : Node_Id; Val : Boolean := True);    -- Flag5
! 
!    procedure Set_Char_Literal_Value
!      (N : Node_Id; Val : Uint);               -- Uint2
! 
!    procedure Set_Chars
!      (N : Node_Id; Val : Name_Id);            -- Name1
! 
!    procedure Set_Check_Address_Alignment
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Choice_Parameter
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Choices
!      (N : Node_Id; Val : List_Id);            -- List1
! 
!    procedure Set_Class_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag6
! 
!    procedure Set_Classifications
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Cleanup_Actions
!      (N : Node_Id; Val : List_Id);            -- List5
! 
!    procedure Set_Comes_From_Extended_Return_Statement
!      (N : Node_Id; Val : Boolean := True);    -- Flag18
! 
!    procedure Set_Compile_Time_Known_Aggregate
!      (N : Node_Id; Val : Boolean := True);    -- Flag18
! 
!    procedure Set_Component_Associations
!      (N : Node_Id; Val : List_Id);            -- List2
! 
!    procedure Set_Component_Clauses
!      (N : Node_Id; Val : List_Id);            -- List3
! 
!    procedure Set_Component_Definition
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Component_Items
!      (N : Node_Id; Val : List_Id);            -- List3
! 
!    procedure Set_Component_List
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Component_Name
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Componentwise_Assignment
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Condition
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Condition_Actions
!      (N : Node_Id; Val : List_Id);            -- List3
! 
!    procedure Set_Config_Pragmas
!      (N : Node_Id; Val : List_Id);            -- List4
! 
!    procedure Set_Constant_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag17
! 
!    procedure Set_Constraint
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Constraints
!      (N : Node_Id; Val : List_Id);            -- List1
! 
!    procedure Set_Context_Installed
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Context_Items
!      (N : Node_Id; Val : List_Id);            -- List1
! 
!    procedure Set_Context_Pending
!      (N : Node_Id; Val : Boolean := True);    -- Flag16
! 
!    procedure Set_Contract_Test_Cases
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Controlling_Argument
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Conversion_OK
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Convert_To_Return_False
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Corresponding_Aspect
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Corresponding_Body
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Corresponding_Formal_Spec
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Corresponding_Generic_Association
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Corresponding_Integer_Value
!      (N : Node_Id; Val : Uint);               -- Uint4
! 
!    procedure Set_Corresponding_Spec
!      (N : Node_Id; Val : Entity_Id);          -- Node5
! 
!    procedure Set_Corresponding_Spec_Of_Stub
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Corresponding_Stub
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Dcheck_Function
!      (N : Node_Id; Val : Entity_Id);          -- Node5
! 
!    procedure Set_Declarations
!      (N : Node_Id; Val : List_Id);            -- List2
! 
!    procedure Set_Default_Expression
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Default_Storage_Pool
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Default_Name
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Defining_Identifier
!      (N : Node_Id; Val : Entity_Id);          -- Node1
! 
!    procedure Set_Defining_Unit_Name
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Delay_Alternative
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Delay_Statement
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Delta_Expression
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Digits_Expression
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Discr_Check_Funcs_Built
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Discrete_Choices
!      (N : Node_Id; Val : List_Id);            -- List4
! 
!    procedure Set_Discrete_Range
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Discrete_Subtype_Definition
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Discrete_Subtype_Definitions
!      (N : Node_Id; Val : List_Id);            -- List2
! 
!    procedure Set_Discriminant_Specifications
!      (N : Node_Id; Val : List_Id);            -- List4
! 
!    procedure Set_Discriminant_Type
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Do_Accessibility_Check
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Do_Discriminant_Check
!      (N : Node_Id; Val : Boolean := True);    -- Flag3
! 
!    procedure Set_Do_Division_Check
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Do_Length_Check
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_Do_Overflow_Check
!      (N : Node_Id; Val : Boolean := True);    -- Flag17
! 
!    procedure Set_Do_Range_Check
!      (N : Node_Id; Val : Boolean := True);    -- Flag9
! 
!    procedure Set_Do_Storage_Check
!      (N : Node_Id; Val : Boolean := True);    -- Flag17
! 
!    procedure Set_Do_Tag_Check
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Elaborate_All_Desirable
!      (N : Node_Id; Val : Boolean := True);    -- Flag9
! 
!    procedure Set_Elaborate_All_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Elaborate_Desirable
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Elaborate_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_Else_Actions
!      (N : Node_Id; Val : List_Id);            -- List3
! 
!    procedure Set_Else_Statements
!      (N : Node_Id; Val : List_Id);            -- List4
! 
!    procedure Set_Elsif_Parts
!      (N : Node_Id; Val : List_Id);            -- List3
! 
!    procedure Set_Enclosing_Variant
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_End_Label
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_End_Span
!      (N : Node_Id; Val : Uint);               -- Uint5
! 
!    procedure Set_Entity
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Entry_Body_Formal_Part
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Entry_Call_Alternative
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Entry_Call_Statement
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Entry_Direct_Name
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Entry_Index
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Entry_Index_Specification
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Etype
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Exception_Choices
!      (N : Node_Id; Val : List_Id);            -- List4
! 
!    procedure Set_Exception_Handlers
!      (N : Node_Id; Val : List_Id);            -- List5
! 
!    procedure Set_Exception_Junk
!      (N : Node_Id; Val : Boolean := True);    -- Flag8
! 
!    procedure Set_Exception_Label
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Expansion_Delayed
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Explicit_Actual_Parameter
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Explicit_Generic_Actual_Parameter
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Expression
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Expression_Copy
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Expressions
!      (N : Node_Id; Val : List_Id);            -- List1
! 
!    procedure Set_First_Bit
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_First_Inlined_Subprogram
!      (N : Node_Id; Val : Entity_Id);          -- Node3
! 
!    procedure Set_First_Name
!      (N : Node_Id; Val : Boolean := True);    -- Flag5
! 
!    procedure Set_First_Named_Actual
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_First_Real_Statement
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_First_Subtype_Link
!      (N : Node_Id; Val : Entity_Id);          -- Node5
! 
!    procedure Set_Float_Truncate
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Formal_Type_Definition
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Forwards_OK
!      (N : Node_Id; Val : Boolean := True);    -- Flag5
! 
!    procedure Set_From_Aspect_Specification
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_From_At_End
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_From_At_Mod
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_From_Conditional_Expression
!      (N : Node_Id; Val : Boolean := True);    -- Flag1
! 
!    procedure Set_From_Default
!      (N : Node_Id; Val : Boolean := True);    -- Flag6
! 
!    procedure Set_Generalized_Indexing
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Generic_Associations
!      (N : Node_Id; Val : List_Id);            -- List3
! 
!    procedure Set_Generic_Formal_Declarations
!      (N : Node_Id; Val : List_Id);            -- List2
! 
!    procedure Set_Generic_Parent
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Generic_Parent_Type
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Handled_Statement_Sequence
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Handler_List_Entry
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Has_Created_Identifier
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_Has_Dereference_Action
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Has_Dynamic_Length_Check
!      (N : Node_Id; Val : Boolean := True);    -- Flag10
! 
!    procedure Set_Has_Init_Expression
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Has_Local_Raise
!      (N : Node_Id; Val : Boolean := True);    -- Flag8
! 
!    procedure Set_Has_No_Elaboration_Code
!      (N : Node_Id; Val : Boolean := True);    -- Flag17
! 
!    procedure Set_Has_Pragma_Suppress_All
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Has_Private_View
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Has_Relative_Deadline_Pragma
!      (N : Node_Id; Val : Boolean := True);    -- Flag9
! 
!    procedure Set_Has_Self_Reference
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Has_SP_Choice
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_Has_Storage_Size_Pragma
!      (N : Node_Id; Val : Boolean := True);    -- Flag5
! 
!    procedure Set_Has_Target_Names
!      (N : Node_Id; Val : Boolean := True);    -- Flag8
! 
!    procedure Set_Has_Wide_Character
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Has_Wide_Wide_Character
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Header_Size_Added
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Hidden_By_Use_Clause
!      (N : Node_Id; Val : Elist_Id);           -- Elist5
! 
!    procedure Set_High_Bound
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Identifier
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Interface_List
!      (N : Node_Id; Val : List_Id);            -- List2
! 
!    procedure Set_Interface_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag16
! 
!    procedure Set_Implicit_With
!      (N : Node_Id; Val : Boolean := True);    -- Flag16
! 
!    procedure Set_Import_Interface_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag16
! 
!    procedure Set_In_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_Includes_Infinities
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Incomplete_View
!      (N : Node_Id;  Val : Node_Id);           -- Node2
! 
!    procedure Set_Inherited_Discriminant
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Instance_Spec
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Intval
!      (N : Node_Id; Val : Uint);               -- Uint3
! 
!    procedure Set_Is_Abort_Block
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_Is_Accessibility_Actual
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Is_Analyzed_Pragma
!      (N : Node_Id; Val : Boolean := True);    -- Flag5
! 
!    procedure Set_Is_Asynchronous_Call_Block
!      (N : Node_Id; Val : Boolean := True);    -- Flag7
! 
!    procedure Set_Is_Boolean_Aspect
!      (N : Node_Id; Val : Boolean := True);    -- Flag16
! 
!    procedure Set_Is_Checked
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Is_Checked_Ghost_Pragma
!      (N : Node_Id; Val : Boolean := True);    -- Flag3
! 
!    procedure Set_Is_Component_Left_Opnd
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Is_Component_Right_Opnd
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Is_Controlling_Actual
!      (N : Node_Id; Val : Boolean := True);    -- Flag16
! 
!    procedure Set_Is_Declaration_Level_Node
!      (N : Node_Id; Val : Boolean := True);    -- Flag5
! 
!    procedure Set_Is_Delayed_Aspect
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Is_Disabled
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_Is_Dispatching_Call
!      (N : Node_Id; Val : Boolean := True);    -- Flag6
! 
!    procedure Set_Is_Dynamic_Coextension
!      (N : Node_Id; Val : Boolean := True);    -- Flag18
! 
!    procedure Set_Is_Effective_Use_Clause
!      (N : Node_Id; Val : Boolean := True);    -- Flag1
! 
!    procedure Set_Is_Elaboration_Checks_OK_Node
!      (N : Node_Id; Val : Boolean := True);    -- Flag1
! 
!    procedure Set_Is_Elaboration_Code
!      (N : Node_Id; Val : Boolean := True);    -- Flag9
! 
!    procedure Set_Is_Elaboration_Warnings_OK_Node
!      (N : Node_Id; Val : Boolean := True);    -- Flag3
! 
!    procedure Set_Is_Elsif
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Is_Entry_Barrier_Function
!      (N : Node_Id; Val : Boolean := True);    -- Flag8
! 
!    procedure Set_Is_Expanded_Build_In_Place_Call
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Is_Expanded_Contract
!      (N : Node_Id; Val : Boolean := True);    -- Flag1
! 
!    procedure Set_Is_Finalization_Wrapper
!      (N : Node_Id; Val : Boolean := True);    -- Flag9
! 
!    procedure Set_Is_Folded_In_Parser
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_Is_Generic_Contract_Pragma
!      (N : Node_Id; Val : Boolean := True);    -- Flag2
! 
!    procedure Set_Is_Homogeneous_Aggregate
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Is_Ignored
!      (N : Node_Id; Val : Boolean := True);    -- Flag9
! 
!    procedure Set_Is_Ignored_Ghost_Pragma
!      (N : Node_Id; Val : Boolean := True);    -- Flag8
! 
!    procedure Set_Is_In_Discriminant_Check
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Is_Inherited_Pragma
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_Is_Initialization_Block
!      (N : Node_Id; Val : Boolean := True);    -- Flag1
! 
!    procedure Set_Is_Known_Guaranteed_ABE
!      (N : Node_Id; Val : Boolean := True);    -- Flag18
! 
!    procedure Set_Is_Machine_Number
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Is_Null_Loop
!      (N : Node_Id; Val : Boolean := True);    -- Flag16
! 
!    procedure Set_Is_Overloaded
!      (N : Node_Id; Val : Boolean := True);    -- Flag5
! 
!    procedure Set_Is_Power_Of_2_For_Shift
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Is_Preelaborable_Call
!      (N : Node_Id; Val : Boolean := True);    -- Flag7
! 
!    procedure Set_Is_Prefixed_Call
!      (N : Node_Id; Val : Boolean := True);    -- Flag17
! 
!    procedure Set_Is_Protected_Subprogram_Body
!      (N : Node_Id; Val : Boolean := True);    -- Flag7
! 
!    procedure Set_Is_Qualified_Universal_Literal
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_Is_Read
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_Is_Source_Call
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_Is_SPARK_Mode_On_Node
!      (N : Node_Id; Val : Boolean := True);    -- Flag2
! 
!    procedure Set_Is_Static_Coextension
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Is_Static_Expression
!      (N : Node_Id; Val : Boolean := True);    -- Flag6
! 
!    procedure Set_Is_Subprogram_Descriptor
!      (N : Node_Id; Val : Boolean := True);    -- Flag16
! 
!    procedure Set_Is_Task_Allocation_Block
!      (N : Node_Id; Val : Boolean := True);    -- Flag6
! 
!    procedure Set_Is_Task_Body_Procedure
!      (N : Node_Id; Val : Boolean := True);    -- Flag1
! 
!    procedure Set_Is_Task_Master
!      (N : Node_Id; Val : Boolean := True);    -- Flag5
! 
!    procedure Set_Is_Write
!      (N : Node_Id; Val : Boolean := True);    -- Flag5
! 
!    procedure Set_Iterator_Filter
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Iteration_Scheme
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Iterator_Specification
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Itype
!      (N : Node_Id; Val : Entity_Id);          -- Node1
! 
!    procedure Set_Key_Expression
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Kill_Range_Check
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Last_Bit
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Last_Name
!      (N : Node_Id; Val : Boolean := True);    -- Flag6
! 
!    procedure Set_Library_Unit
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Label_Construct
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Left_Opnd
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Limited_View_Installed
!      (N : Node_Id; Val : Boolean := True);    -- Flag18
! 
!    procedure Set_Limited_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag17
! 
!    procedure Set_Literals
!      (N : Node_Id; Val : List_Id);            -- List1
! 
!    procedure Set_Local_Raise_Not_OK
!      (N : Node_Id; Val : Boolean := True);    -- Flag7
! 
!    procedure Set_Local_Raise_Statements
!      (N : Node_Id; Val : Elist_Id);           -- Elist1
! 
!    procedure Set_Loop_Actions
!      (N : Node_Id; Val : List_Id);            -- List5
! 
!    procedure Set_Loop_Parameter_Specification
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Low_Bound
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Mod_Clause
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_More_Ids
!      (N : Node_Id; Val : Boolean := True);    -- Flag5
! 
!    procedure Set_Must_Be_Byte_Aligned
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Must_Not_Freeze
!      (N : Node_Id; Val : Boolean := True);    -- Flag8
! 
!    procedure Set_Must_Not_Override
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_Must_Override
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Name
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Names
!      (N : Node_Id; Val : List_Id);            -- List2
! 
!    procedure Set_Next_Entity
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Next_Exit_Statement
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Next_Implicit_With
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Next_Named_Actual
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Next_Pragma
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Next_Rep_Item
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Next_Use_Clause
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_No_Ctrl_Actions
!      (N : Node_Id; Val : Boolean := True);    -- Flag7
! 
!    procedure Set_No_Elaboration_Check
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_No_Entities_Ref_In_Spec
!      (N : Node_Id; Val : Boolean := True);    -- Flag8
! 
!    procedure Set_No_Initialization
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_No_Minimize_Eliminate
!      (N : Node_Id; Val : Boolean := True);    -- Flag17
! 
!    procedure Set_No_Side_Effect_Removal
!      (N : Node_Id; Val : Boolean := True);    -- Flag17
! 
!    procedure Set_No_Truncation
!      (N : Node_Id; Val : Boolean := True);    -- Flag17
! 
!    procedure Set_Null_Excluding_Subtype
!      (N : Node_Id; Val : Boolean := True);    -- Flag16
! 
!    procedure Set_Null_Exclusion_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag11
! 
!    procedure Set_Null_Exclusion_In_Return_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Null_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Null_Record_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag17
! 
!    procedure Set_Null_Statement
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Object_Definition
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Of_Present
!      (N : Node_Id; Val : Boolean := True);   -- Flag16
! 
!    procedure Set_Original_Discriminant
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Original_Entity
!      (N : Node_Id; Val : Entity_Id);          -- Node2
! 
!    procedure Set_Others_Discrete_Choices
!      (N : Node_Id; Val : List_Id);            -- List1
! 
!    procedure Set_Out_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag17
! 
!    procedure Set_Parameter_Associations
!      (N : Node_Id; Val : List_Id);            -- List3
! 
!    procedure Set_Parameter_Specifications
!      (N : Node_Id; Val : List_Id);            -- List3
! 
!    procedure Set_Parameter_Type
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Parent_Spec
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Parent_With
!      (N : Node_Id; Val : Boolean := True);    -- Flag1
! 
!    procedure Set_Position
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Pragma_Argument_Associations
!      (N : Node_Id; Val : List_Id);            -- List2
! 
!    procedure Set_Pragma_Identifier
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Pragmas_After
!      (N : Node_Id; Val : List_Id);            -- List5
! 
!    procedure Set_Pragmas_Before
!      (N : Node_Id; Val : List_Id);            -- List4
! 
!    procedure Set_Pre_Post_Conditions
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Prefix
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Premature_Use
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Present_Expr
!      (N : Node_Id; Val : Uint);               -- Uint3
! 
!    procedure Set_Prev_Ids
!      (N : Node_Id; Val : Boolean := True);    -- Flag6
! 
!    procedure Set_Prev_Use_Clause
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Print_In_Hex
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Private_Declarations
!      (N : Node_Id; Val : List_Id);            -- List3
! 
!    procedure Set_Private_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_Procedure_To_Call
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Proper_Body
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Protected_Definition
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Protected_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag6
! 
!    procedure Set_Raises_Constraint_Error
!      (N : Node_Id; Val : Boolean := True);    -- Flag7
! 
!    procedure Set_Range_Constraint
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Range_Expression
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Real_Range_Specification
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Realval
!      (N : Node_Id; Val : Ureal);              -- Ureal3
! 
!    procedure Set_Reason
!      (N : Node_Id; Val : Uint);               -- Uint3
! 
!    procedure Set_Record_Extension_Part
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Redundant_Use
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Renaming_Exception
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Result_Definition
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Return_Object_Declarations
!      (N : Node_Id; Val : List_Id);            -- List3
! 
!    procedure Set_Return_Statement_Entity
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Reverse_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_Right_Opnd
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Rounded_Result
!      (N : Node_Id; Val : Boolean := True);    -- Flag18
! 
!    procedure Set_Save_Invocation_Graph_Of_Body
!      (N : Node_Id; Val : Boolean := True);    -- Flag1
! 
!    procedure Set_SCIL_Controlling_Tag
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_SCIL_Entity
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_SCIL_Tag_Value
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_SCIL_Target_Prim
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Scope
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Select_Alternatives
!      (N : Node_Id; Val : List_Id);            -- List1
! 
!    procedure Set_Selector_Name
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Selector_Names
!      (N : Node_Id; Val : List_Id);            -- List1
! 
!    procedure Set_Shift_Count_OK
!      (N : Node_Id; Val : Boolean := True);    -- Flag4
! 
!    procedure Set_Source_Type
!      (N : Node_Id; Val : Entity_Id);          -- Node1
! 
!    procedure Set_Specification
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Split_PPC
!      (N : Node_Id; Val : Boolean);            -- Flag17
! 
!    procedure Set_Statements
!      (N : Node_Id; Val : List_Id);            -- List3
! 
!    procedure Set_Storage_Pool
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Subpool_Handle_Name
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Strval
!      (N : Node_Id; Val : String_Id);          -- Str3
! 
!    procedure Set_Subtype_Indication
!      (N : Node_Id; Val : Node_Id);            -- Node5
! 
!    procedure Set_Subtype_Mark
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Subtype_Marks
!      (N : Node_Id; Val : List_Id);            -- List2
! 
!    procedure Set_Suppress_Assignment_Checks
!      (N : Node_Id; Val : Boolean := True);    -- Flag18
! 
!    procedure Set_Suppress_Loop_Warnings
!      (N : Node_Id; Val : Boolean := True);    -- Flag17
! 
!    procedure Set_Synchronized_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag7
! 
!    procedure Set_Tagged_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag15
! 
!    procedure Set_Target
!      (N : Node_Id; Val : Entity_Id);          -- Node1
! 
!    procedure Set_Target_Type
!      (N : Node_Id; Val : Entity_Id);          -- Node2
! 
!    procedure Set_Task_Definition
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Task_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag5
! 
!    procedure Set_Then_Actions
!      (N : Node_Id; Val : List_Id);            -- List2
! 
!    procedure Set_Then_Statements
!      (N : Node_Id; Val : List_Id);            -- List2
! 
!    procedure Set_Triggering_Alternative
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_Triggering_Statement
!      (N : Node_Id; Val : Node_Id);            -- Node1
! 
!    procedure Set_TSS_Elist
!      (N : Node_Id; Val : Elist_Id);           -- Elist3
! 
!    procedure Set_Type_Definition
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Uneval_Old_Accept
!      (N : Node_Id; Val : Boolean := True);    -- Flag7
! 
!    procedure Set_Uneval_Old_Warn
!      (N : Node_Id; Val : Boolean := True);    -- Flag18
! 
!    procedure Set_Unit
!      (N : Node_Id; Val : Node_Id);            -- Node2
! 
!    procedure Set_Unknown_Discriminants_Present
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    procedure Set_Unreferenced_In_Spec
!      (N : Node_Id; Val : Boolean := True);    -- Flag7
! 
!    procedure Set_Variant_Part
!      (N : Node_Id; Val : Node_Id);            -- Node4
! 
!    procedure Set_Variants
!      (N : Node_Id; Val : List_Id);            -- List1
! 
!    procedure Set_Visible_Declarations
!      (N : Node_Id; Val : List_Id);            -- List2
! 
!    procedure Set_Uninitialized_Variable
!      (N : Node_Id; Val : Node_Id);            -- Node3
! 
!    procedure Set_Used_Operations
!      (N : Node_Id; Val : Elist_Id);           -- Elist2
! 
!    procedure Set_Was_Attribute_Reference
!      (N : Node_Id; Val : Boolean := True);    -- Flag2
! 
!    procedure Set_Was_Default_Init_Box_Association
!      (N : Node_Id; Val : Boolean := True);    -- Flag14
! 
!    procedure Set_Was_Expression_Function
!      (N : Node_Id; Val : Boolean := True);    -- Flag18
! 
!    procedure Set_Was_Originally_Stub
!      (N : Node_Id; Val : Boolean := True);    -- Flag13
! 
!    -------------------------
!    -- Iterator Procedures --
!    -------------------------
! 
!    --  The call to Next_xxx (N) is equivalent to N := Next_xxx (N)
! 
!    procedure Next_Entity       (N : in out Node_Id);
!    procedure Next_Named_Actual (N : in out Node_Id);
!    procedure Next_Rep_Item     (N : in out Node_Id);
!    procedure Next_Use_Clause   (N : in out Node_Id);
! 
!    -------------------------------------------
!    -- Miscellaneous Tree Access Subprograms --
!    -------------------------------------------
! 
!    function End_Location (N : Node_Id) return Source_Ptr;
!    --  N is an N_If_Statement or N_Case_Statement node, and this function
!    --  returns the location of the IF token in the END IF sequence by
!    --  translating the value of the End_Span field.
! 
!    --  WARNING: There is a matching C declaration of this subprogram in fe.h
! 
!    procedure Set_End_Location (N : Node_Id; S : Source_Ptr);
!    --  N is an N_If_Statement or N_Case_Statement node. This procedure sets
!    --  the End_Span field to correspond to the given value S. In other words,
!    --  End_Span is set to the difference between S and Sloc (N), the starting
!    --  location.
! 
!    function Get_Pragma_Arg (Arg : Node_Id) return Node_Id;
!    --  Given an argument to a pragma Arg, this function returns the expression
!    --  for the argument. This is Arg itself, or, in the case where Arg is a
!    --  pragma argument association node, the expression from this node.
! 
!    -----------------------
!    -- Utility Functions --
!    -----------------------
! 
!    procedure Map_Pragma_Name (From, To : Name_Id);
!    --  Used in the implementation of pragma Rename_Pragma. Maps pragma name
!    --  From to pragma name To, so From can be used as a synonym for To.
! 
!    Too_Many_Pragma_Mappings : exception;
!    --  Raised if Map_Pragma_Name is called too many times. We expect that few
!    --  programs will use it at all, and those that do will use it approximately
!    --  once or twice.
! 
!    function Pragma_Name (N : Node_Id) return Name_Id;
!    --  Obtain the name of pragma N from the Chars field of its identifier. If
!    --  the pragma has been renamed using Rename_Pragma, this routine returns
!    --  the name of the renaming.
! 
!    function Pragma_Name_Unmapped (N : Node_Id) return Name_Id;
!    --  Obtain the name of pragma N from the Chars field of its identifier. This
!    --  form of name extraction does not take into account renamings performed
!    --  by Rename_Pragma.
! 
!    -----------------------------
!    -- Syntactic Parent Tables --
!    -----------------------------
! 
!    --  These tables show for each node, and for each of the five fields,
!    --  whether the corresponding field is syntactic (True) or semantic (False).
!    --  Unused entries are also set to False.
! 
!    subtype Field_Num is Natural range 1 .. 5;
! 
!    Is_Syntactic_Field : constant array (Node_Kind, Field_Num) of Boolean := (
! 
!    --  Following entries can be built automatically from the sinfo sources
!    --  using the makeisf utility (currently this program is in spitbol).
! 
!      N_Identifier =>
!        (1 => True,    --  Chars (Name1)
!         2 => False,   --  Original_Discriminant (Node2-Sem)
!         3 => False,   --  unused
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Integer_Literal =>
!        (1 => False,   --  unused
!         2 => False,   --  Original_Entity (Node2-Sem)
!         3 => True,    --  Intval (Uint3)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Real_Literal =>
!        (1 => False,   --  unused
!         2 => False,   --  Original_Entity (Node2-Sem)
!         3 => True,    --  Realval (Ureal3)
!         4 => False,   --  Corresponding_Integer_Value (Uint4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Character_Literal =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Char_Literal_Value (Uint2)
!         3 => False,   --  unused
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_String_Literal =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Strval (Str3)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Pragma =>
!        (1 => False,   --  Next_Pragma (Node1-Sem)
!         2 => True,    --  Pragma_Argument_Associations (List2)
!         3 => False,   --  Corresponding_Aspect (Node3-Sem)
!         4 => True,    --  Pragma_Identifier (Node4)
!         5 => False),  --  Next_Rep_Item (Node5-Sem)
! 
!      N_Pragma_Argument_Association =>
!        (1 => True,    --  Chars (Name1)
!         2 => False,   --  Expression_Copy (Node2-Sem)
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Defining_Identifier =>
!        (1 => True,    --  Chars (Name1)
!         2 => False,   --  Next_Entity (Node2-Sem)
!         3 => False,   --  Scope (Node3-Sem)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Full_Type_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  Incomplete_View (Node2-Sem)
!         3 => True,    --  Type_Definition (Node3)
!         4 => True,    --  Discriminant_Specifications (List4)
!         5 => False),  --  unused
! 
!      N_Subtype_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  Generic_Parent_Type (Node4-Sem)
!         5 => True),   --  Subtype_Indication (Node5)
! 
!      N_Subtype_Indication =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Constraint (Node3)
!         4 => True,    --  Subtype_Mark (Node4)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Object_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  Handler_List_Entry (Node2-Sem)
!         3 => True,    --  Expression (Node3)
!         4 => True,    --  Object_Definition (Node4)
!         5 => False),  --  Corresponding_Generic_Association (Node5-Sem)
! 
!      N_Number_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Derived_Type_Definition =>
!        (1 => False,   --  unused
!         2 => True,    --  Interface_List (List2)
!         3 => True,    --  Record_Extension_Part (Node3)
!         4 => False,   --  unused
!         5 => True),   --  Subtype_Indication (Node5)
! 
!      N_Range_Constraint =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => True,    --  Range_Expression (Node4)
!         5 => False),  --  unused
! 
!      N_Range =>
!        (1 => True,    --  Low_Bound (Node1)
!         2 => True,    --  High_Bound (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Enumeration_Type_Definition =>
!        (1 => True,    --  Literals (List1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => True,    --  End_Label (Node4)
!         5 => False),  --  unused
! 
!      N_Defining_Character_Literal =>
!        (1 => True,    --  Chars (Name1)
!         2 => False,   --  Next_Entity (Node2-Sem)
!         3 => False,   --  Scope (Node3-Sem)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Signed_Integer_Type_Definition =>
!        (1 => True,    --  Low_Bound (Node1)
!         2 => True,    --  High_Bound (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Modular_Type_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Floating_Point_Definition =>
!        (1 => False,   --  unused
!         2 => True,    --  Digits_Expression (Node2)
!         3 => False,   --  unused
!         4 => True,    --  Real_Range_Specification (Node4)
!         5 => False),  --  unused
! 
!      N_Real_Range_Specification =>
!        (1 => True,    --  Low_Bound (Node1)
!         2 => True,    --  High_Bound (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Ordinary_Fixed_Point_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Delta_Expression (Node3)
!         4 => True,    --  Real_Range_Specification (Node4)
!         5 => False),  --  unused
! 
!      N_Decimal_Fixed_Point_Definition =>
!        (1 => False,   --  unused
!         2 => True,    --  Digits_Expression (Node2)
!         3 => True,    --  Delta_Expression (Node3)
!         4 => True,    --  Real_Range_Specification (Node4)
!         5 => False),  --  unused
! 
!      N_Digits_Constraint =>
!        (1 => False,   --  unused
!         2 => True,    --  Digits_Expression (Node2)
!         3 => False,   --  unused
!         4 => True,    --  Range_Constraint (Node4)
!         5 => False),  --  unused
! 
!      N_Unconstrained_Array_Definition =>
!        (1 => False,   --  unused
!         2 => True,    --  Subtype_Marks (List2)
!         3 => False,   --  unused
!         4 => True,    --  Component_Definition (Node4)
!         5 => False),  --  unused
! 
!      N_Constrained_Array_Definition =>
!        (1 => False,   --  unused
!         2 => True,    --  Discrete_Subtype_Definitions (List2)
!         3 => False,   --  unused
!         4 => True,    --  Component_Definition (Node4)
!         5 => False),  --  unused
! 
!      N_Component_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Access_Definition (Node3)
!         4 => False,   --  unused
!         5 => True),   --  Subtype_Indication (Node5)
! 
!      N_Discriminant_Specification =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => True),   --  Discriminant_Type (Node5)
! 
!      N_Index_Or_Discriminant_Constraint =>
!        (1 => True,    --  Constraints (List1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Discriminant_Association =>
!        (1 => True,    --  Selector_Names (List1)
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Record_Definition =>
!        (1 => True,    --  Component_List (Node1)
!         2 => True,    --  Interface_List (List2)
!         3 => False,   --  unused
!         4 => True,    --  End_Label (Node4)
!         5 => False),  --  unused
! 
!      N_Component_List =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Component_Items (List3)
!         4 => True,    --  Variant_Part (Node4)
!         5 => False),  --  unused
! 
!      N_Component_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => True,    --  Component_Definition (Node4)
!         5 => False),  --  unused
! 
!      N_Variant_Part =>
!        (1 => True,    --  Variants (List1)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Variant =>
!        (1 => True,    --  Component_List (Node1)
!         2 => False,   --  Enclosing_Variant (Node2-Sem)
!         3 => False,   --  Present_Expr (Uint3-Sem)
!         4 => True,    --  Discrete_Choices (List4)
!         5 => False),  --  Dcheck_Function (Node5-Sem)
! 
!      N_Others_Choice =>
!        (1 => False,   --  Others_Discrete_Choices (List1-Sem)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Access_To_Object_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => True),   --  Subtype_Indication (Node5)
! 
!      N_Access_Function_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Parameter_Specifications (List3)
!         4 => True,    --  Result_Definition (Node4)
!         5 => False),  --  unused
! 
!      N_Access_Procedure_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Parameter_Specifications (List3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Access_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Access_To_Subprogram_Definition (Node3)
!         4 => True,    --  Subtype_Mark (Node4)
!         5 => False),  --  unused
! 
!      N_Incomplete_Type_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => True,    --  Discriminant_Specifications (List4)
!         5 => False),  --  Premature_Use
! 
!      N_Explicit_Dereference =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Prefix (Node3)
!         4 => False,   --  Actual_Designated_Subtype (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Indexed_Component =>
!        (1 => True,    --  Expressions (List1)
!         2 => False,   --  unused
!         3 => True,    --  Prefix (Node3)
!         4 => False,   --  Generalized_Indexing (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Slice =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Prefix (Node3)
!         4 => True,    --  Discrete_Range (Node4)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Selected_Component =>
!        (1 => False,   --  unused
!         2 => True,    --  Selector_Name (Node2)
!         3 => True,    --  Prefix (Node3)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Attribute_Reference =>
!        (1 => True,    --  Expressions (List1)
!         2 => True,    --  Attribute_Name (Name2)
!         3 => True,    --  Prefix (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Aggregate =>
!        (1 => True,    --  Expressions (List1)
!         2 => True,    --  Component_Associations (List2)
!         3 => False,   --  Aggregate_Bounds (Node3-Sem)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Component_Association =>
!        (1 => True,    --  Choices (List1)
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => True),   --  Loop_Actions (List5-Sem);
! 
!      N_Iterated_Component_Association =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Iterator_Specification
!         3 => True,    --  Expression (Node3)
!         4 => True,    --  Discrete_Choices (List4)
!         5 => True),   --  Loop_Actions (List5-Sem);
! 
!      N_Iterated_Element_Association =>
!        (1 => True,    --  Key_expression
!         2 => True,    --  Iterator_Specification
!         3 => True,    --  Expression (Node3)
!         4 => True,    --  Loop_Parameter_Specification
!         5 => True),   --  Loop_Actions (List5-Sem);
! 
!      N_Delta_Aggregate =>
!        (1 => False,   --  Unused
!         2 => True,    --  Component_Associations (List2)
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  Unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Extension_Aggregate =>
!        (1 => True,    --  Expressions (List1)
!         2 => True,    --  Component_Associations (List2)
!         3 => True,    --  Ancestor_Part (Node3)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Null =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_And_Then =>
!        (1 => False,   --  Actions (List1-Sem)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Or_Else =>
!        (1 => False,   --  Actions (List1-Sem)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_In =>
!        (1 => False,   --  unused
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => True,    --  Alternatives (List4)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Not_In =>
!        (1 => False,   --  unused
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => True,    --  Alternatives (List4)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_And =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Or =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Xor =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Eq =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Ne =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Lt =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Le =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Gt =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Ge =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Add =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Subtract =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Concat =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Multiply =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Divide =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Mod =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Rem =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Expon =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Plus =>
!        (1 => True,    --  Chars (Name1)
!         2 => False,   --  unused
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Minus =>
!        (1 => True,    --  Chars (Name1)
!         2 => False,   --  unused
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Abs =>
!        (1 => True,    --  Chars (Name1)
!         2 => False,   --  unused
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Not =>
!        (1 => True,    --  Chars (Name1)
!         2 => False,   --  unused
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Type_Conversion =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => True,    --  Subtype_Mark (Node4)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Qualified_Expression =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => True,    --  Subtype_Mark (Node4)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Quantified_Expression =>
!        (1 => True,    --  Condition (Node1)
!         2 => True,    --  Iterator_Specification (Node2)
!         3 => False,   --  unused
!         4 => True,    --  Loop_Parameter_Specification (Node4)
!         5 => False),  --  unused
! 
!      N_Allocator =>
!        (1 => False,   --  Storage_Pool (Node1-Sem)
!         2 => False,   --  Procedure_To_Call (Node2-Sem)
!         3 => True,    --  Expression (Node3)
!         4 => True,    --  Subpool_Handle_Name (Node4)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Null_Statement =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Label =>
!        (1 => True,    --  Identifier (Node1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Assignment_Statement =>
!        (1 => False,   --  unused
!         2 => True,    --  Name (Node2)
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Target_Name =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_If_Statement =>
!        (1 => True,    --  Condition (Node1)
!         2 => True,    --  Then_Statements (List2)
!         3 => True,    --  Elsif_Parts (List3)
!         4 => True,    --  Else_Statements (List4)
!         5 => True),   --  End_Span (Uint5)
! 
!      N_Elsif_Part =>
!        (1 => True,    --  Condition (Node1)
!         2 => True,    --  Then_Statements (List2)
!         3 => False,   --  Condition_Actions (List3-Sem)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Case_Expression =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => True,    --  Alternatives (List4)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Case_Expression_Alternative =>
!        (1 => False,   --  Actions (List1-Sem)
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => True,    --  Discrete_Choices (List4)
!         5 => False),  --  unused
! 
!      N_Case_Statement =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => True,    --  Alternatives (List4)
!         5 => True),   --  End_Span (Uint5)
! 
!      N_Case_Statement_Alternative =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Statements (List3)
!         4 => True,    --  Discrete_Choices (List4)
!         5 => False),  --  unused
! 
!      N_Loop_Statement =>
!        (1 => True,    --  Identifier (Node1)
!         2 => True,    --  Iteration_Scheme (Node2)
!         3 => True,    --  Statements (List3)
!         4 => True,    --  End_Label (Node4)
!         5 => False),  --  unused
! 
!      N_Iteration_Scheme =>
!        (1 => True,    --  Condition (Node1)
!         2 => True,    --  Iterator_Specification (Node2)
!         3 => False,   --  Condition_Actions (List3-Sem)
!         4 => True,    --  Loop_Parameter_Specification (Node4)
!         5 => False),  --  unused
! 
!      N_Loop_Parameter_Specification =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => True,    --  Discrete_Subtype_Definition (Node4)
!         5 => True),  --   Iterator_Filter (Node5)
! 
!      N_Iterator_Specification =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  Unused
!         4 => False,   --  Unused
!         5 => True),   --  Subtype_Indication (Node5)
! 
!      N_Block_Statement =>
!        (1 => True,    --  Identifier (Node1)
!         2 => True,    --  Declarations (List2)
!         3 => False,   --  Activation_Chain_Entity (Node3-Sem)
!         4 => True,    --  Handled_Statement_Sequence (Node4)
!         5 => False),  --  unused
! 
!      N_Exit_Statement =>
!        (1 => True,    --  Condition (Node1)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Goto_Statement =>
!        (1 => False,   --  unused
!         2 => True,    --  Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Subprogram_Declaration =>
!        (1 => True,    --  Specification (Node1)
!         2 => False,   --  unused
!         3 => False,   --  Body_To_Inline (Node3-Sem)
!         4 => False,   --  Parent_Spec (Node4-Sem)
!         5 => False),  --  Corresponding_Body (Node5-Sem)
! 
!      N_Abstract_Subprogram_Declaration =>
!        (1 => True,    --  Specification (Node1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Function_Specification =>
!        (1 => True,    --  Defining_Unit_Name (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Parameter_Specifications (List3)
!         4 => True,    --  Result_Definition (Node4)
!         5 => False),  --  Generic_Parent (Node5-Sem)
! 
!      N_Procedure_Specification =>
!        (1 => True,    --  Defining_Unit_Name (Node1)
!         2 => False,   --  Null_Statement (Node2-Sem)
!         3 => True,    --  Parameter_Specifications (List3)
!         4 => False,   --  unused
!         5 => False),  --  Generic_Parent (Node5-Sem)
! 
!      N_Designator =>
!        (1 => True,    --  Identifier (Node1)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Defining_Program_Unit_Name =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Operator_Symbol =>
!        (1 => True,    --  Chars (Name1)
!         2 => False,   --  unused
!         3 => True,    --  Strval (Str3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Defining_Operator_Symbol =>
!        (1 => True,    --  Chars (Name1)
!         2 => False,   --  Next_Entity (Node2-Sem)
!         3 => False,   --  Scope (Node3-Sem)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Parameter_Specification =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Parameter_Type (Node2)
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  Default_Expression (Node5-Sem)
! 
!      N_Subprogram_Body =>
!        (1 => True,    --  Specification (Node1)
!         2 => True,    --  Declarations (List2)
!         3 => False,   --  Activation_Chain_Entity (Node3-Sem)
!         4 => True,    --  Handled_Statement_Sequence (Node4)
!         5 => False),  --  Corresponding_Spec (Node5-Sem)
! 
!      N_Expression_Function =>
!        (1 => True,    --  Specification (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Procedure_Call_Statement =>
!        (1 => False,   --  Controlling_Argument (Node1-Sem)
!         2 => True,    --  Name (Node2)
!         3 => True,    --  Parameter_Associations (List3)
!         4 => False,   --  First_Named_Actual (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Function_Call =>
!        (1 => False,   --  Controlling_Argument (Node1-Sem)
!         2 => True,    --  Name (Node2)
!         3 => True,    --  Parameter_Associations (List3)
!         4 => False,   --  First_Named_Actual (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Parameter_Association =>
!        (1 => False,   --  unused
!         2 => True,    --  Selector_Name (Node2)
!         3 => True,    --  Explicit_Actual_Parameter (Node3)
!         4 => False,   --  Next_Named_Actual (Node4-Sem)
!         5 => False),  --  unused
! 
!      N_Simple_Return_Statement =>
!        (1 => False,   --  Storage_Pool (Node1-Sem)
!         2 => False,   --  Procedure_To_Call (Node2-Sem)
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  Return_Statement_Entity (Node5-Sem)
! 
!      N_Extended_Return_Statement =>
!        (1 => False,   --  Storage_Pool (Node1-Sem)
!         2 => False,   --  Procedure_To_Call (Node2-Sem)
!         3 => True,    --  Return_Object_Declarations (List3)
!         4 => True,    --  Handled_Statement_Sequence (Node4)
!         5 => False),  --  Return_Statement_Entity (Node5-Sem)
! 
!      N_Package_Declaration =>
!        (1 => True,    --  Specification (Node1)
!         2 => False,   --  unused
!         3 => False,   --  Activation_Chain_Entity (Node3-Sem)
!         4 => False,   --  Parent_Spec (Node4-Sem)
!         5 => False),  --  Corresponding_Body (Node5-Sem)
! 
!      N_Package_Specification =>
!        (1 => True,    --  Defining_Unit_Name (Node1)
!         2 => True,    --  Visible_Declarations (List2)
!         3 => True,    --  Private_Declarations (List3)
!         4 => True,    --  End_Label (Node4)
!         5 => False),  --  Generic_Parent (Node5-Sem)
! 
!      N_Package_Body =>
!        (1 => True,    --  Defining_Unit_Name (Node1)
!         2 => True,    --  Declarations (List2)
!         3 => False,   --  unused
!         4 => True,    --  Handled_Statement_Sequence (Node4)
!         5 => False),  --  Corresponding_Spec (Node5-Sem)
! 
!      N_Private_Type_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => True,    --  Discriminant_Specifications (List4)
!         5 => False),  --  unused
! 
!      N_Private_Extension_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Interface_List (List2)
!         3 => False,   --  unused
!         4 => True,    --  Discriminant_Specifications (List4)
!         5 => True),   --  Subtype_Indication (Node5)
! 
!      N_Use_Package_Clause =>
!        (1 => False,   --  Prev_Use_Clause (Node1-Sem)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  Next_Use_Clause (Node3-Sem)
!         4 => False,   --  Associated_Node (Node4-Sem)
!         5 => False),  --  Hidden_By_Use_Clause (Elist5-Sem)
! 
!      N_Use_Type_Clause =>
!        (1 => False,   --  Prev_Use_Clause (Node1-Sem)
!         2 => False,   --  Used_Operations (Elist2-Sem)
!         3 => False,   --  Next_Use_Clause (Node3-Sem)
!         4 => True,    --  Subtype_Mark (Node4)
!         5 => False),  --  Hidden_By_Use_Clause (Elist5-Sem)
! 
!      N_Object_Renaming_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Name (Node2)
!         3 => True,    --  Access_Definition (Node3)
!         4 => True,    --  Subtype_Mark (Node4)
!         5 => False),  --  Corresponding_Generic_Association (Node5-Sem)
! 
!      N_Exception_Renaming_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Package_Renaming_Declaration =>
!        (1 => True,    --  Defining_Unit_Name (Node1)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  Parent_Spec (Node4-Sem)
!         5 => False),  --  unused
! 
!      N_Subprogram_Renaming_Declaration =>
!        (1 => True,    --  Specification (Node1)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  Corresponding_Formal_Spec (Node3-Sem)
!         4 => False,   --  Parent_Spec (Node4-Sem)
!         5 => False),  --  Corresponding_Spec (Node5-Sem)
! 
!      N_Generic_Package_Renaming_Declaration =>
!        (1 => True,    --  Defining_Unit_Name (Node1)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  Parent_Spec (Node4-Sem)
!         5 => False),  --  unused
! 
!      N_Generic_Procedure_Renaming_Declaration =>
!        (1 => True,    --  Defining_Unit_Name (Node1)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  Parent_Spec (Node4-Sem)
!         5 => False),  --  unused
! 
!      N_Generic_Function_Renaming_Declaration =>
!        (1 => True,    --  Defining_Unit_Name (Node1)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  Parent_Spec (Node4-Sem)
!         5 => False),  --  unused
! 
!      N_Task_Type_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Interface_List (List2)
!         3 => True,    --  Task_Definition (Node3)
!         4 => True,    --  Discriminant_Specifications (List4)
!         5 => False),  --  Corresponding_Body (Node5-Sem)
! 
!      N_Single_Task_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Interface_List (List2)
!         3 => True,    --  Task_Definition (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Task_Definition =>
!        (1 => False,   --  unused
!         2 => True,    --  Visible_Declarations (List2)
!         3 => True,    --  Private_Declarations (List3)
!         4 => True,    --  End_Label (Node4)
!         5 => False),  --  unused
! 
!      N_Task_Body =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Declarations (List2)
!         3 => False,   --  Activation_Chain_Entity (Node3-Sem)
!         4 => True,    --  Handled_Statement_Sequence (Node4)
!         5 => False),  --  Corresponding_Spec (Node5-Sem)
! 
!      N_Protected_Type_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Interface_List (List2)
!         3 => True,    --  Protected_Definition (Node3)
!         4 => True,    --  Discriminant_Specifications (List4)
!         5 => False),  --  Corresponding_Body (Node5-Sem)
! 
!      N_Single_Protected_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Interface_List (List2)
!         3 => True,    --  Protected_Definition (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Protected_Definition =>
!        (1 => False,   --  unused
!         2 => True,    --  Visible_Declarations (List2)
!         3 => True,    --  Private_Declarations (List3)
!         4 => True,    --  End_Label (Node4)
!         5 => False),  --  unused
! 
!      N_Protected_Body =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Declarations (List2)
!         3 => False,   --  unused
!         4 => True,    --  End_Label (Node4)
!         5 => False),  --  Corresponding_Spec (Node5-Sem)
! 
!      N_Entry_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Parameter_Specifications (List3)
!         4 => True,    --  Discrete_Subtype_Definition (Node4)
!         5 => False),  --  Corresponding_Body (Node5-Sem)
! 
!      N_Accept_Statement =>
!        (1 => True,    --  Entry_Direct_Name (Node1)
!         2 => True,    --  Declarations (List2)
!         3 => True,    --  Parameter_Specifications (List3)
!         4 => True,    --  Handled_Statement_Sequence (Node4)
!         5 => True),   --  Entry_Index (Node5)
! 
!      N_Entry_Body =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Declarations (List2)
!         3 => False,   --  Activation_Chain_Entity (Node3-Sem)
!         4 => True,    --  Handled_Statement_Sequence (Node4)
!         5 => True),   --  Entry_Body_Formal_Part (Node5)
! 
!      N_Entry_Body_Formal_Part =>
!        (1 => True,    --  Condition (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Parameter_Specifications (List3)
!         4 => True,    --  Entry_Index_Specification (Node4)
!         5 => False),  --  unused
! 
!      N_Entry_Index_Specification =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => True,    --  Discrete_Subtype_Definition (Node4)
!         5 => False),  --  unused
! 
!      N_Entry_Call_Statement =>
!        (1 => False,   --  unused
!         2 => True,    --  Name (Node2)
!         3 => True,    --  Parameter_Associations (List3)
!         4 => False,   --  First_Named_Actual (Node4-Sem)
!         5 => False),  --  unused
! 
!      N_Requeue_Statement =>
!        (1 => False,   --  unused
!         2 => True,    --  Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Delay_Until_Statement =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Delay_Relative_Statement =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Selective_Accept =>
!        (1 => True,    --  Select_Alternatives (List1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => True,    --  Else_Statements (List4)
!         5 => False),  --  unused
! 
!      N_Accept_Alternative =>
!        (1 => True,    --  Condition (Node1)
!         2 => True,    --  Accept_Statement (Node2)
!         3 => True,    --  Statements (List3)
!         4 => True,    --  Pragmas_Before (List4)
!         5 => False),  --  Accept_Handler_Records (List5-Sem)
! 
!      N_Delay_Alternative =>
!        (1 => True,    --  Condition (Node1)
!         2 => True,    --  Delay_Statement (Node2)
!         3 => True,    --  Statements (List3)
!         4 => True,    --  Pragmas_Before (List4)
!         5 => False),  --  unused
! 
!      N_Terminate_Alternative =>
!        (1 => True,    --  Condition (Node1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => True,    --  Pragmas_Before (List4)
!         5 => True),   --  Pragmas_After (List5)
! 
!      N_Timed_Entry_Call =>
!        (1 => True,    --  Entry_Call_Alternative (Node1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => True,    --  Delay_Alternative (Node4)
!         5 => False),  --  unused
! 
!      N_Entry_Call_Alternative =>
!        (1 => True,    --  Entry_Call_Statement (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Statements (List3)
!         4 => True,    --  Pragmas_Before (List4)
!         5 => False),  --  unused
! 
!      N_Conditional_Entry_Call =>
!        (1 => True,    --  Entry_Call_Alternative (Node1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => True,    --  Else_Statements (List4)
!         5 => False),  --  unused
! 
!      N_Asynchronous_Select =>
!        (1 => True,    --  Triggering_Alternative (Node1)
!         2 => True,    --  Abortable_Part (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Triggering_Alternative =>
!        (1 => True,    --  Triggering_Statement (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Statements (List3)
!         4 => True,    --  Pragmas_Before (List4)
!         5 => False),  --  unused
! 
!      N_Abortable_Part =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Statements (List3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Abort_Statement =>
!        (1 => False,   --  unused
!         2 => True,    --  Names (List2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Compilation_Unit =>
!        (1 => True,    --  Context_Items (List1)
!         2 => True,    --  Unit (Node2)
!         3 => False,   --  First_Inlined_Subprogram (Node3-Sem)
!         4 => False,   --  Library_Unit (Node4-Sem)
!         5 => True),   --  Aux_Decls_Node (Node5)
! 
!      N_Compilation_Unit_Aux =>
!        (1 => True,    --  Actions (List1)
!         2 => True,    --  Declarations (List2)
!         3 => False,   --  Default_Storage_Pool (Node3)
!         4 => True,    --  Config_Pragmas (List4)
!         5 => True),   --  Pragmas_After (List5)
! 
!      N_With_Clause =>
!        (1 => False,   --  unused
!         2 => True,    --  Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  Library_Unit (Node4-Sem)
!         5 => False),  --  Corresponding_Spec (Node5-Sem)
! 
!      N_Subprogram_Body_Stub =>
!        (1 => True,    --  Specification (Node1)
!         2 => False,   --  Corresponding_Spec_Of_Stub (Node2-Sem)
!         3 => False,   --  unused
!         4 => False,   --  Library_Unit (Node4-Sem)
!         5 => False),  --  Corresponding_Body (Node5-Sem)
! 
!      N_Package_Body_Stub =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  Corresponding_Spec_Of_Stub (Node2-Sem)
!         3 => False,   --  unused
!         4 => False,   --  Library_Unit (Node4-Sem)
!         5 => False),  --  Corresponding_Body (Node5-Sem)
! 
!      N_Task_Body_Stub =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  Corresponding_Spec_Of_Stub (Node2-Sem)
!         3 => False,   --  unused
!         4 => False,   --  Library_Unit (Node4-Sem)
!         5 => False),  --  Corresponding_Body (Node5-Sem)
! 
!      N_Protected_Body_Stub =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  Corresponding_Spec_Of_Stub (Node2-Sem)
!         3 => False,   --  unused
!         4 => False,   --  Library_Unit (Node4-Sem)
!         5 => False),  --  Corresponding_Body (Node5-Sem)
! 
!      N_Subunit =>
!        (1 => True,    --  Proper_Body (Node1)
!         2 => True,    --  Name (Node2)
!         3 => False,   --  Corresponding_Stub (Node3-Sem)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Exception_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  unused
!         3 => False,   --  Expression (Node3-Sem)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Handled_Sequence_Of_Statements =>
!        (1 => True,    --  At_End_Proc (Node1)
!         2 => False,   --  First_Real_Statement (Node2-Sem)
!         3 => True,    --  Statements (List3)
!         4 => True,    --  End_Label (Node4)
!         5 => True),   --  Exception_Handlers (List5)
! 
!      N_Exception_Handler =>
!        (1 => False,   --  Local_Raise_Statements (Elist1)
!         2 => True,    --  Choice_Parameter (Node2)
!         3 => True,    --  Statements (List3)
!         4 => True,    --  Exception_Choices (List4)
!         5 => False),  --  Exception_Label (Node5)
! 
!      N_Raise_Statement =>
!        (1 => False,   --  unused
!         2 => True,    --  Name (Node2)
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Raise_Expression =>
!        (1 => False,   --  unused
!         2 => True,    --  Name (Node2)
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Generic_Subprogram_Declaration =>
!        (1 => True,    --  Specification (Node1)
!         2 => True,    --  Generic_Formal_Declarations (List2)
!         3 => False,   --  unused
!         4 => False,   --  Parent_Spec (Node4-Sem)
!         5 => False),  --  Corresponding_Body (Node5-Sem)
! 
!      N_Generic_Package_Declaration =>
!        (1 => True,    --  Specification (Node1)
!         2 => True,    --  Generic_Formal_Declarations (List2)
!         3 => False,   --  Activation_Chain_Entity (Node3-Sem)
!         4 => False,   --  Parent_Spec (Node4-Sem)
!         5 => False),  --  Corresponding_Body (Node5-Sem)
! 
!      N_Package_Instantiation =>
!        (1 => True,    --  Defining_Unit_Name (Node1)
!         2 => True,    --  Name (Node2)
!         3 => True,    --  Generic_Associations (List3)
!         4 => False,   --  Parent_Spec (Node4-Sem)
!         5 => False),  --  Instance_Spec (Node5-Sem)
! 
!      N_Procedure_Instantiation =>
!        (1 => True,    --  Defining_Unit_Name (Node1)
!         2 => True,    --  Name (Node2)
!         3 => True,    --  Generic_Associations (List3)
!         4 => False,   --  Parent_Spec (Node4-Sem)
!         5 => False),  --  Instance_Spec (Node5-Sem)
! 
!      N_Function_Instantiation =>
!        (1 => True,    --  Defining_Unit_Name (Node1)
!         2 => True,    --  Name (Node2)
!         3 => True,    --  Generic_Associations (List3)
!         4 => False,   --  Parent_Spec (Node4-Sem)
!         5 => False),  --  Instance_Spec (Node5-Sem)
! 
!      N_Generic_Association =>
!        (1 => True,    --  Explicit_Generic_Actual_Parameter (Node1)
!         2 => True,    --  Selector_Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Formal_Object_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Access_Definition (Node3)
!         4 => True,    --  Subtype_Mark (Node4)
!         5 => True),   --  Default_Expression (Node5)
! 
!      N_Formal_Type_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Formal_Type_Definition (Node3)
!         4 => True,    --  Discriminant_Specifications (List4)
!         5 => False),  --  unused
! 
!      N_Formal_Private_Type_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Formal_Incomplete_Type_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Formal_Derived_Type_Definition =>
!        (1 => False,   --  unused
!         2 => True,    --  Interface_List (List2)
!         3 => False,   --  unused
!         4 => True,    --  Subtype_Mark (Node4)
!         5 => False),  --  unused
! 
!      N_Formal_Discrete_Type_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Formal_Signed_Integer_Type_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Formal_Modular_Type_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Formal_Floating_Point_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Formal_Ordinary_Fixed_Point_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Formal_Decimal_Fixed_Point_Definition =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Formal_Concrete_Subprogram_Declaration =>
!        (1 => True,    --  Specification (Node1)
!         2 => True,    --  Default_Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Formal_Abstract_Subprogram_Declaration =>
!        (1 => True,    --  Specification (Node1)
!         2 => True,    --  Default_Name (Node2)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Formal_Package_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => True,    --  Name (Node2)
!         3 => True,    --  Generic_Associations (List3)
!         4 => False,   --  unused
!         5 => False),  --  Instance_Spec (Node5-Sem)
! 
!      N_Attribute_Definition_Clause =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Name (Node2)
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  Next_Rep_Item (Node5-Sem)
! 
!      N_Aspect_Specification =>
!        (1 => True,    --  Identifier (Node1)
!         2 => False,   --  Aspect_Rep_Item (Node2-Sem)
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Next_Rep_Item (Node5-Sem)
! 
!      N_Enumeration_Representation_Clause =>
!        (1 => True,    --  Identifier (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Array_Aggregate (Node3)
!         4 => False,   --  unused
!         5 => False),  --  Next_Rep_Item (Node5-Sem)
! 
!      N_Record_Representation_Clause =>
!        (1 => True,    --  Identifier (Node1)
!         2 => True,    --  Mod_Clause (Node2)
!         3 => True,    --  Component_Clauses (List3)
!         4 => False,   --  unused
!         5 => False),  --  Next_Rep_Item (Node5-Sem)
! 
!      N_Component_Clause =>
!        (1 => True,    --  Component_Name (Node1)
!         2 => True,    --  Position (Node2)
!         3 => True,    --  First_Bit (Node3)
!         4 => True,    --  Last_Bit (Node4)
!         5 => False),  --  unused
! 
!      N_Code_Statement =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Op_Rotate_Left =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Rotate_Right =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Shift_Left =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Shift_Right_Arithmetic =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Op_Shift_Right =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Left_Opnd (Node2)
!         3 => True,    --  Right_Opnd (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Delta_Constraint =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Delta_Expression (Node3)
!         4 => True,    --  Range_Constraint (Node4)
!         5 => False),  --  unused
! 
!      N_At_Clause =>
!        (1 => True,    --  Identifier (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Mod_Clause =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => True,    --  Pragmas_Before (List4)
!         5 => False),  --  unused
! 
!      N_If_Expression =>
!        (1 => True,    --  Expressions (List1)
!         2 => False,   --  Then_Actions (List2-Sem)
!         3 => False,   --  Else_Actions (List3-Sem)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Compound_Statement =>
!        (1 => True,    --  Actions (List1)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Contract =>
!        (1 => False,   --  Pre_Post_Conditions (Node1-Sem)
!         2 => False,   --  Contract_Test_Cases (Node2-Sem)
!         3 => False,   --  Classifications (Node3-Sem)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Expanded_Name =>
!        (1 => True,    --  Chars (Name1)
!         2 => True,    --  Selector_Name (Node2)
!         3 => True,    --  Prefix (Node3)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Expression_With_Actions =>
!        (1 => True,    --  Actions (List1)
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Free_Statement =>
!        (1 => False,   --  Storage_Pool (Node1-Sem)
!         2 => False,   --  Procedure_To_Call (Node2-Sem)
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  Actual_Designated_Subtype (Node4-Sem)
!         5 => False),  --  unused
! 
!      N_Freeze_Entity =>
!        (1 => True,    --  Actions (List1)
!         2 => False,   --  Access_Types_To_Process (Elist2-Sem)
!         3 => False,   --  TSS_Elist (Elist3-Sem)
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  First_Subtype_Link (Node5-Sem)
! 
!      N_Freeze_Generic_Entity =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  Entity (Node4-Sem)
!         5 => False),  --  unused
! 
!      N_Implicit_Label_Declaration =>
!        (1 => True,    --  Defining_Identifier (Node1)
!         2 => False,   --  Label_Construct (Node2-Sem)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Itype_Reference =>
!        (1 => False,   --  Itype (Node1-Sem)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Raise_Constraint_Error =>
!        (1 => True,    --  Condition (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Reason (Uint3)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Raise_Program_Error =>
!        (1 => True,    --  Condition (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Reason (Uint3)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Raise_Storage_Error =>
!        (1 => True,    --  Condition (Node1)
!         2 => False,   --  unused
!         3 => True,    --  Reason (Uint3)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Push_Constraint_Error_Label =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Push_Program_Error_Label =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  Exception_Label
! 
!      N_Push_Storage_Error_Label =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  Exception_Label
! 
!      N_Pop_Constraint_Error_Label =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Pop_Program_Error_Label =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Pop_Storage_Error_Label =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Reference =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Prefix (Node3)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Unchecked_Expression =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => False,   --  unused
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Unchecked_Type_Conversion =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => True,    --  Expression (Node3)
!         4 => True,    --  Subtype_Mark (Node4)
!         5 => False),  --  Etype (Node5-Sem)
! 
!      N_Validate_Unchecked_Conversion =>
!        (1 => False,   --  Source_Type (Node1-Sem)
!         2 => False,   --  Target_Type (Node2-Sem)
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!    --  Entries for SCIL nodes
! 
!      N_SCIL_Dispatch_Table_Tag_Init =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  SCIL_Entity (Node4-Sem)
!         5 => False),  --  unused
! 
!      N_SCIL_Dispatching_Call =>
!        (1 => False,   --  unused
!         2 => False,   --  SCIL_Target_Prim (Node2-Sem)
!         3 => False,   --  unused
!         4 => False,   --  SCIL_Entity (Node4-Sem)
!         5 => False),  --  SCIL_Controlling_Tag (Node5-Sem)
! 
!      N_SCIL_Membership_Test =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  SCIL_Entity (Node4-Sem)
!         5 => False),  --  SCIL_Tag_Value (Node5-Sem)
! 
!      N_Call_Marker =>
!        (1 => False,   --  Target (Node1-Sem)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Variable_Reference_Marker =>
!        (1 => False,   --  Target (Node1-Sem)
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!    --  Entries for Empty, Error, and Unused. Even though these have a Chars
!    --  field for debugging purposes, they are not really syntactic fields, so
!    --  we mark all fields as unused.
! 
!      N_Empty =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Error =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Unused_At_Start =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False),  --  unused
! 
!      N_Unused_At_End =>
!        (1 => False,   --  unused
!         2 => False,   --  unused
!         3 => False,   --  unused
!         4 => False,   --  unused
!         5 => False)); --  unused
! 
!    --------------------
!    -- Inline Pragmas --
!    --------------------
! 
!    pragma Inline (Abort_Present);
!    pragma Inline (Abortable_Part);
!    pragma Inline (Abstract_Present);
!    pragma Inline (Accept_Handler_Records);
!    pragma Inline (Accept_Statement);
!    pragma Inline (Access_Definition);
!    pragma Inline (Access_To_Subprogram_Definition);
!    pragma Inline (Access_Types_To_Process);
!    pragma Inline (Actions);
!    pragma Inline (Activation_Chain_Entity);
!    pragma Inline (Acts_As_Spec);
!    pragma Inline (Actual_Designated_Subtype);
!    pragma Inline (Address_Warning_Posted);
!    pragma Inline (Aggregate_Bounds);
!    pragma Inline (Aliased_Present);
!    pragma Inline (Alloc_For_BIP_Return);
!    pragma Inline (All_Others);
!    pragma Inline (All_Present);
!    pragma Inline (Alternatives);
!    pragma Inline (Ancestor_Part);
!    pragma Inline (Atomic_Sync_Required);
!    pragma Inline (Array_Aggregate);
!    pragma Inline (Aspect_On_Partial_View);
!    pragma Inline (Aspect_Rep_Item);
!    pragma Inline (Assignment_OK);
!    pragma Inline (Associated_Node);
!    pragma Inline (At_End_Proc);
!    pragma Inline (Attribute_Name);
!    pragma Inline (Aux_Decls_Node);
!    pragma Inline (Backwards_OK);
!    pragma Inline (Bad_Is_Detected);
!    pragma Inline (Body_To_Inline);
!    pragma Inline (Body_Required);
!    pragma Inline (By_Ref);
!    pragma Inline (Box_Present);
!    pragma Inline (Char_Literal_Value);
!    pragma Inline (Chars);
!    pragma Inline (Check_Address_Alignment);
!    pragma Inline (Choice_Parameter);
!    pragma Inline (Choices);
!    pragma Inline (Class_Present);
!    pragma Inline (Classifications);
!    pragma Inline (Cleanup_Actions);
!    pragma Inline (Comes_From_Extended_Return_Statement);
!    pragma Inline (Compile_Time_Known_Aggregate);
!    pragma Inline (Component_Associations);
!    pragma Inline (Component_Clauses);
!    pragma Inline (Component_Definition);
!    pragma Inline (Component_Items);
!    pragma Inline (Component_List);
!    pragma Inline (Component_Name);
!    pragma Inline (Componentwise_Assignment);
!    pragma Inline (Condition);
!    pragma Inline (Condition_Actions);
!    pragma Inline (Config_Pragmas);
!    pragma Inline (Constant_Present);
!    pragma Inline (Constraint);
!    pragma Inline (Constraints);
!    pragma Inline (Context_Installed);
!    pragma Inline (Context_Items);
!    pragma Inline (Context_Pending);
!    pragma Inline (Contract_Test_Cases);
!    pragma Inline (Controlling_Argument);
!    pragma Inline (Convert_To_Return_False);
!    pragma Inline (Conversion_OK);
!    pragma Inline (Corresponding_Aspect);
!    pragma Inline (Corresponding_Body);
!    pragma Inline (Corresponding_Formal_Spec);
!    pragma Inline (Corresponding_Generic_Association);
!    pragma Inline (Corresponding_Integer_Value);
!    pragma Inline (Corresponding_Spec);
!    pragma Inline (Corresponding_Spec_Of_Stub);
!    pragma Inline (Corresponding_Stub);
!    pragma Inline (Dcheck_Function);
!    pragma Inline (Declarations);
!    pragma Inline (Default_Expression);
!    pragma Inline (Default_Storage_Pool);
!    pragma Inline (Default_Name);
!    pragma Inline (Defining_Identifier);
!    pragma Inline (Defining_Unit_Name);
!    pragma Inline (Delay_Alternative);
!    pragma Inline (Delay_Statement);
!    pragma Inline (Delta_Expression);
!    pragma Inline (Digits_Expression);
!    pragma Inline (Discr_Check_Funcs_Built);
!    pragma Inline (Discrete_Choices);
!    pragma Inline (Discrete_Range);
!    pragma Inline (Discrete_Subtype_Definition);
!    pragma Inline (Discrete_Subtype_Definitions);
!    pragma Inline (Discriminant_Specifications);
!    pragma Inline (Discriminant_Type);
!    pragma Inline (Do_Accessibility_Check);
!    pragma Inline (Do_Discriminant_Check);
!    pragma Inline (Do_Length_Check);
!    pragma Inline (Do_Division_Check);
!    pragma Inline (Do_Overflow_Check);
!    pragma Inline (Do_Range_Check);
!    pragma Inline (Do_Storage_Check);
!    pragma Inline (Do_Tag_Check);
!    pragma Inline (Elaborate_All_Desirable);
!    pragma Inline (Elaborate_All_Present);
!    pragma Inline (Elaborate_Desirable);
!    pragma Inline (Elaborate_Present);
!    pragma Inline (Else_Actions);
!    pragma Inline (Else_Statements);
!    pragma Inline (Elsif_Parts);
!    pragma Inline (Enclosing_Variant);
!    pragma Inline (End_Label);
!    pragma Inline (End_Span);
!    pragma Inline (Entity);
!    pragma Inline (Entity_Or_Associated_Node);
!    pragma Inline (Entry_Body_Formal_Part);
!    pragma Inline (Entry_Call_Alternative);
!    pragma Inline (Entry_Call_Statement);
!    pragma Inline (Entry_Direct_Name);
!    pragma Inline (Entry_Index);
!    pragma Inline (Entry_Index_Specification);
!    pragma Inline (Etype);
!    pragma Inline (Exception_Choices);
!    pragma Inline (Exception_Handlers);
!    pragma Inline (Exception_Junk);
!    pragma Inline (Exception_Label);
!    pragma Inline (Expansion_Delayed);
!    pragma Inline (Explicit_Actual_Parameter);
!    pragma Inline (Explicit_Generic_Actual_Parameter);
!    pragma Inline (Expression);
!    pragma Inline (Expression_Copy);
!    pragma Inline (Expressions);
!    pragma Inline (First_Bit);
!    pragma Inline (First_Inlined_Subprogram);
!    pragma Inline (First_Name);
!    pragma Inline (First_Named_Actual);
!    pragma Inline (First_Real_Statement);
!    pragma Inline (First_Subtype_Link);
!    pragma Inline (Float_Truncate);
!    pragma Inline (Formal_Type_Definition);
!    pragma Inline (Forwards_OK);
!    pragma Inline (From_Aspect_Specification);
!    pragma Inline (From_At_End);
!    pragma Inline (From_At_Mod);
!    pragma Inline (From_Conditional_Expression);
!    pragma Inline (From_Default);
!    pragma Inline (Generalized_Indexing);
!    pragma Inline (Generic_Associations);
!    pragma Inline (Generic_Formal_Declarations);
!    pragma Inline (Generic_Parent);
!    pragma Inline (Generic_Parent_Type);
!    pragma Inline (Handled_Statement_Sequence);
!    pragma Inline (Handler_List_Entry);
!    pragma Inline (Has_Created_Identifier);
!    pragma Inline (Has_Dereference_Action);
!    pragma Inline (Has_Dynamic_Length_Check);
!    pragma Inline (Has_Init_Expression);
!    pragma Inline (Has_Local_Raise);
!    pragma Inline (Has_Self_Reference);
!    pragma Inline (Has_SP_Choice);
!    pragma Inline (Has_No_Elaboration_Code);
!    pragma Inline (Has_Pragma_Suppress_All);
!    pragma Inline (Has_Private_View);
!    pragma Inline (Has_Relative_Deadline_Pragma);
!    pragma Inline (Has_Storage_Size_Pragma);
!    pragma Inline (Has_Target_Names);
!    pragma Inline (Has_Wide_Character);
!    pragma Inline (Has_Wide_Wide_Character);
!    pragma Inline (Header_Size_Added);
!    pragma Inline (Hidden_By_Use_Clause);
!    pragma Inline (High_Bound);
!    pragma Inline (Identifier);
!    pragma Inline (Implicit_With);
!    pragma Inline (Interface_List);
!    pragma Inline (Interface_Present);
!    pragma Inline (Includes_Infinities);
!    pragma Inline (Import_Interface_Present);
!    pragma Inline (In_Present);
!    pragma Inline (Incomplete_View);
!    pragma Inline (Inherited_Discriminant);
!    pragma Inline (Instance_Spec);
!    pragma Inline (Intval);
!    pragma Inline (Iterator_Specification);
!    pragma Inline (Is_Abort_Block);
!    pragma Inline (Is_Accessibility_Actual);
!    pragma Inline (Is_Analyzed_Pragma);
!    pragma Inline (Is_Asynchronous_Call_Block);
!    pragma Inline (Is_Boolean_Aspect);
!    pragma Inline (Is_Checked);
!    pragma Inline (Is_Checked_Ghost_Pragma);
!    pragma Inline (Is_Component_Left_Opnd);
!    pragma Inline (Is_Component_Right_Opnd);
!    pragma Inline (Is_Controlling_Actual);
!    pragma Inline (Is_Declaration_Level_Node);
!    pragma Inline (Is_Delayed_Aspect);
!    pragma Inline (Is_Disabled);
!    pragma Inline (Is_Dispatching_Call);
!    pragma Inline (Is_Dynamic_Coextension);
!    pragma Inline (Is_Effective_Use_Clause);
!    pragma Inline (Is_Elaboration_Checks_OK_Node);
!    pragma Inline (Is_Elaboration_Code);
!    pragma Inline (Is_Elaboration_Warnings_OK_Node);
!    pragma Inline (Is_Elsif);
!    pragma Inline (Is_Entry_Barrier_Function);
!    pragma Inline (Is_Expanded_Build_In_Place_Call);
!    pragma Inline (Is_Expanded_Contract);
!    pragma Inline (Is_Finalization_Wrapper);
!    pragma Inline (Is_Folded_In_Parser);
!    pragma Inline (Is_Generic_Contract_Pragma);
!    pragma Inline (Is_Homogeneous_Aggregate);
!    pragma Inline (Is_Ignored);
!    pragma Inline (Is_Ignored_Ghost_Pragma);
!    pragma Inline (Is_In_Discriminant_Check);
!    pragma Inline (Is_Inherited_Pragma);
!    pragma Inline (Is_Initialization_Block);
!    pragma Inline (Is_Known_Guaranteed_ABE);
!    pragma Inline (Is_Machine_Number);
!    pragma Inline (Is_Null_Loop);
!    pragma Inline (Is_Overloaded);
!    pragma Inline (Is_Power_Of_2_For_Shift);
!    pragma Inline (Is_Preelaborable_Call);
!    pragma Inline (Is_Prefixed_Call);
!    pragma Inline (Is_Protected_Subprogram_Body);
!    pragma Inline (Is_Qualified_Universal_Literal);
!    pragma Inline (Is_Read);
!    pragma Inline (Is_Source_Call);
!    pragma Inline (Is_SPARK_Mode_On_Node);
!    pragma Inline (Is_Static_Coextension);
!    pragma Inline (Is_Static_Expression);
!    pragma Inline (Is_Subprogram_Descriptor);
!    pragma Inline (Is_Task_Allocation_Block);
!    pragma Inline (Is_Task_Body_Procedure);
!    pragma Inline (Is_Task_Master);
!    pragma Inline (Is_Write);
!    pragma Inline (Iterator_Filter);
!    pragma Inline (Iteration_Scheme);
!    pragma Inline (Itype);
!    pragma Inline (Key_Expression);
!    pragma Inline (Kill_Range_Check);
!    pragma Inline (Last_Bit);
!    pragma Inline (Last_Name);
!    pragma Inline (Library_Unit);
!    pragma Inline (Label_Construct);
!    pragma Inline (Left_Opnd);
!    pragma Inline (Limited_View_Installed);
!    pragma Inline (Limited_Present);
!    pragma Inline (Literals);
!    pragma Inline (Local_Raise_Not_OK);
!    pragma Inline (Local_Raise_Statements);
!    pragma Inline (Loop_Actions);
!    pragma Inline (Loop_Parameter_Specification);
!    pragma Inline (Low_Bound);
!    pragma Inline (Mod_Clause);
!    pragma Inline (More_Ids);
!    pragma Inline (Must_Be_Byte_Aligned);
!    pragma Inline (Must_Not_Freeze);
!    pragma Inline (Must_Not_Override);
!    pragma Inline (Must_Override);
!    pragma Inline (Name);
!    pragma Inline (Names);
!    pragma Inline (Next_Entity);
!    pragma Inline (Next_Exit_Statement);
!    pragma Inline (Next_Implicit_With);
!    pragma Inline (Next_Named_Actual);
!    pragma Inline (Next_Pragma);
!    pragma Inline (Next_Rep_Item);
!    pragma Inline (Next_Use_Clause);
!    pragma Inline (No_Ctrl_Actions);
!    pragma Inline (No_Elaboration_Check);
!    pragma Inline (No_Entities_Ref_In_Spec);
!    pragma Inline (No_Initialization);
!    pragma Inline (No_Minimize_Eliminate);
!    pragma Inline (No_Side_Effect_Removal);
!    pragma Inline (No_Truncation);
!    pragma Inline (Null_Excluding_Subtype);
!    pragma Inline (Null_Exclusion_Present);
!    pragma Inline (Null_Exclusion_In_Return_Present);
!    pragma Inline (Null_Present);
!    pragma Inline (Null_Record_Present);
!    pragma Inline (Null_Statement);
!    pragma Inline (Object_Definition);
!    pragma Inline (Of_Present);
!    pragma Inline (Original_Discriminant);
!    pragma Inline (Original_Entity);
!    pragma Inline (Others_Discrete_Choices);
!    pragma Inline (Out_Present);
!    pragma Inline (Parameter_Associations);
!    pragma Inline (Parameter_Specifications);
!    pragma Inline (Parameter_Type);
!    pragma Inline (Parent_Spec);
!    pragma Inline (Parent_With);
!    pragma Inline (Position);
!    pragma Inline (Pragma_Argument_Associations);
!    pragma Inline (Pragma_Identifier);
!    pragma Inline (Pragmas_After);
!    pragma Inline (Pragmas_Before);
!    pragma Inline (Pre_Post_Conditions);
!    pragma Inline (Prefix);
!    pragma Inline (Premature_Use);
!    pragma Inline (Present_Expr);
!    pragma Inline (Prev_Ids);
!    pragma Inline (Prev_Use_Clause);
!    pragma Inline (Print_In_Hex);
!    pragma Inline (Private_Declarations);
!    pragma Inline (Private_Present);
!    pragma Inline (Procedure_To_Call);
!    pragma Inline (Proper_Body);
!    pragma Inline (Protected_Definition);
!    pragma Inline (Protected_Present);
!    pragma Inline (Raises_Constraint_Error);
!    pragma Inline (Range_Constraint);
!    pragma Inline (Range_Expression);
!    pragma Inline (Real_Range_Specification);
!    pragma Inline (Realval);
!    pragma Inline (Reason);
!    pragma Inline (Record_Extension_Part);
!    pragma Inline (Redundant_Use);
!    pragma Inline (Renaming_Exception);
!    pragma Inline (Result_Definition);
!    pragma Inline (Return_Object_Declarations);
!    pragma Inline (Return_Statement_Entity);
!    pragma Inline (Reverse_Present);
!    pragma Inline (Right_Opnd);
!    pragma Inline (Rounded_Result);
!    pragma Inline (Save_Invocation_Graph_Of_Body);
!    pragma Inline (SCIL_Controlling_Tag);
!    pragma Inline (SCIL_Entity);
!    pragma Inline (SCIL_Tag_Value);
!    pragma Inline (SCIL_Target_Prim);
!    pragma Inline (Scope);
!    pragma Inline (Select_Alternatives);
!    pragma Inline (Selector_Name);
!    pragma Inline (Selector_Names);
!    pragma Inline (Shift_Count_OK);
!    pragma Inline (Source_Type);
!    pragma Inline (Specification);
!    pragma Inline (Split_PPC);
!    pragma Inline (Statements);
!    pragma Inline (Storage_Pool);
!    pragma Inline (Subpool_Handle_Name);
!    pragma Inline (Strval);
!    pragma Inline (Subtype_Indication);
!    pragma Inline (Subtype_Mark);
!    pragma Inline (Subtype_Marks);
!    pragma Inline (Suppress_Assignment_Checks);
!    pragma Inline (Suppress_Loop_Warnings);
!    pragma Inline (Synchronized_Present);
!    pragma Inline (Tagged_Present);
!    pragma Inline (Target);
!    pragma Inline (Target_Type);
!    pragma Inline (Task_Definition);
!    pragma Inline (Task_Present);
!    pragma Inline (Then_Actions);
!    pragma Inline (Then_Statements);
!    pragma Inline (Triggering_Alternative);
!    pragma Inline (Triggering_Statement);
!    pragma Inline (TSS_Elist);
!    pragma Inline (Type_Definition);
!    pragma Inline (Uneval_Old_Accept);
!    pragma Inline (Uneval_Old_Warn);
!    pragma Inline (Unit);
!    pragma Inline (Uninitialized_Variable);
!    pragma Inline (Unknown_Discriminants_Present);
!    pragma Inline (Unreferenced_In_Spec);
!    pragma Inline (Variant_Part);
!    pragma Inline (Variants);
!    pragma Inline (Visible_Declarations);
!    pragma Inline (Used_Operations);
!    pragma Inline (Was_Attribute_Reference);
!    pragma Inline (Was_Default_Init_Box_Association);
!    pragma Inline (Was_Expression_Function);
!    pragma Inline (Was_Originally_Stub);
! 
!    pragma Inline (Set_Abort_Present);
!    pragma Inline (Set_Abortable_Part);
!    pragma Inline (Set_Abstract_Present);
!    pragma Inline (Set_Accept_Handler_Records);
!    pragma Inline (Set_Accept_Statement);
!    pragma Inline (Set_Access_Definition);
!    pragma Inline (Set_Access_To_Subprogram_Definition);
!    pragma Inline (Set_Access_Types_To_Process);
!    pragma Inline (Set_Actions);
!    pragma Inline (Set_Activation_Chain_Entity);
!    pragma Inline (Set_Acts_As_Spec);
!    pragma Inline (Set_Actual_Designated_Subtype);
!    pragma Inline (Set_Address_Warning_Posted);
!    pragma Inline (Set_Aggregate_Bounds);
!    pragma Inline (Set_Aliased_Present);
!    pragma Inline (Set_Alloc_For_BIP_Return);
!    pragma Inline (Set_All_Others);
!    pragma Inline (Set_All_Present);
!    pragma Inline (Set_Alternatives);
!    pragma Inline (Set_Ancestor_Part);
!    pragma Inline (Set_Array_Aggregate);
!    pragma Inline (Set_Aspect_On_Partial_View);
!    pragma Inline (Set_Aspect_Rep_Item);
!    pragma Inline (Set_Assignment_OK);
!    pragma Inline (Set_Associated_Node);
!    pragma Inline (Set_At_End_Proc);
!    pragma Inline (Set_Atomic_Sync_Required);
!    pragma Inline (Set_Attribute_Name);
!    pragma Inline (Set_Aux_Decls_Node);
!    pragma Inline (Set_Backwards_OK);
!    pragma Inline (Set_Bad_Is_Detected);
!    pragma Inline (Set_Body_Required);
!    pragma Inline (Set_Body_To_Inline);
!    pragma Inline (Set_Box_Present);
!    pragma Inline (Set_By_Ref);
!    pragma Inline (Set_Char_Literal_Value);
!    pragma Inline (Set_Chars);
!    pragma Inline (Set_Check_Address_Alignment);
!    pragma Inline (Set_Choice_Parameter);
!    pragma Inline (Set_Choices);
!    pragma Inline (Set_Class_Present);
!    pragma Inline (Set_Classifications);
!    pragma Inline (Set_Cleanup_Actions);
!    pragma Inline (Set_Comes_From_Extended_Return_Statement);
!    pragma Inline (Set_Compile_Time_Known_Aggregate);
!    pragma Inline (Set_Component_Associations);
!    pragma Inline (Set_Component_Clauses);
!    pragma Inline (Set_Component_Definition);
!    pragma Inline (Set_Component_Items);
!    pragma Inline (Set_Component_List);
!    pragma Inline (Set_Component_Name);
!    pragma Inline (Set_Componentwise_Assignment);
!    pragma Inline (Set_Condition);
!    pragma Inline (Set_Condition_Actions);
!    pragma Inline (Set_Config_Pragmas);
!    pragma Inline (Set_Constant_Present);
!    pragma Inline (Set_Constraint);
!    pragma Inline (Set_Constraints);
!    pragma Inline (Set_Context_Installed);
!    pragma Inline (Set_Context_Items);
!    pragma Inline (Set_Context_Pending);
!    pragma Inline (Set_Contract_Test_Cases);
!    pragma Inline (Set_Controlling_Argument);
!    pragma Inline (Set_Conversion_OK);
!    pragma Inline (Set_Convert_To_Return_False);
!    pragma Inline (Set_Corresponding_Aspect);
!    pragma Inline (Set_Corresponding_Body);
!    pragma Inline (Set_Corresponding_Formal_Spec);
!    pragma Inline (Set_Corresponding_Generic_Association);
!    pragma Inline (Set_Corresponding_Integer_Value);
!    pragma Inline (Set_Corresponding_Spec);
!    pragma Inline (Set_Corresponding_Spec_Of_Stub);
!    pragma Inline (Set_Corresponding_Stub);
!    pragma Inline (Set_Dcheck_Function);
!    pragma Inline (Set_Declarations);
!    pragma Inline (Set_Default_Expression);
!    pragma Inline (Set_Default_Name);
!    pragma Inline (Set_Default_Storage_Pool);
!    pragma Inline (Set_Defining_Identifier);
!    pragma Inline (Set_Defining_Unit_Name);
!    pragma Inline (Set_Delay_Alternative);
!    pragma Inline (Set_Delay_Statement);
!    pragma Inline (Set_Delta_Expression);
!    pragma Inline (Set_Digits_Expression);
!    pragma Inline (Set_Discr_Check_Funcs_Built);
!    pragma Inline (Set_Discrete_Choices);
!    pragma Inline (Set_Discrete_Range);
!    pragma Inline (Set_Discrete_Subtype_Definition);
!    pragma Inline (Set_Discrete_Subtype_Definitions);
!    pragma Inline (Set_Discriminant_Specifications);
!    pragma Inline (Set_Discriminant_Type);
!    pragma Inline (Set_Do_Accessibility_Check);
!    pragma Inline (Set_Do_Discriminant_Check);
!    pragma Inline (Set_Do_Division_Check);
!    pragma Inline (Set_Do_Length_Check);
!    pragma Inline (Set_Do_Overflow_Check);
!    pragma Inline (Set_Do_Range_Check);
!    pragma Inline (Set_Do_Storage_Check);
!    pragma Inline (Set_Do_Tag_Check);
!    pragma Inline (Set_Elaborate_All_Desirable);
!    pragma Inline (Set_Elaborate_All_Present);
!    pragma Inline (Set_Elaborate_Desirable);
!    pragma Inline (Set_Elaborate_Present);
!    pragma Inline (Set_Else_Actions);
!    pragma Inline (Set_Else_Statements);
!    pragma Inline (Set_Elsif_Parts);
!    pragma Inline (Set_Enclosing_Variant);
!    pragma Inline (Set_End_Label);
!    pragma Inline (Set_End_Span);
!    pragma Inline (Set_Entity);
!    pragma Inline (Set_Entry_Body_Formal_Part);
!    pragma Inline (Set_Entry_Call_Alternative);
!    pragma Inline (Set_Entry_Call_Statement);
!    pragma Inline (Set_Entry_Direct_Name);
!    pragma Inline (Set_Entry_Index);
!    pragma Inline (Set_Entry_Index_Specification);
!    pragma Inline (Set_Etype);
!    pragma Inline (Set_Exception_Choices);
!    pragma Inline (Set_Exception_Handlers);
!    pragma Inline (Set_Exception_Junk);
!    pragma Inline (Set_Exception_Label);
!    pragma Inline (Set_Expansion_Delayed);
!    pragma Inline (Set_Explicit_Actual_Parameter);
!    pragma Inline (Set_Explicit_Generic_Actual_Parameter);
!    pragma Inline (Set_Expression);
!    pragma Inline (Set_Expression_Copy);
!    pragma Inline (Set_Expressions);
!    pragma Inline (Set_First_Bit);
!    pragma Inline (Set_First_Inlined_Subprogram);
!    pragma Inline (Set_First_Name);
!    pragma Inline (Set_First_Named_Actual);
!    pragma Inline (Set_First_Real_Statement);
!    pragma Inline (Set_First_Subtype_Link);
!    pragma Inline (Set_Float_Truncate);
!    pragma Inline (Set_Formal_Type_Definition);
!    pragma Inline (Set_Forwards_OK);
!    pragma Inline (Set_From_Aspect_Specification);
!    pragma Inline (Set_From_At_End);
!    pragma Inline (Set_From_At_Mod);
!    pragma Inline (Set_From_Conditional_Expression);
!    pragma Inline (Set_From_Default);
!    pragma Inline (Set_Generalized_Indexing);
!    pragma Inline (Set_Generic_Associations);
!    pragma Inline (Set_Generic_Formal_Declarations);
!    pragma Inline (Set_Generic_Parent);
!    pragma Inline (Set_Generic_Parent_Type);
!    pragma Inline (Set_Handled_Statement_Sequence);
!    pragma Inline (Set_Handler_List_Entry);
!    pragma Inline (Set_Has_Created_Identifier);
!    pragma Inline (Set_Has_Dereference_Action);
!    pragma Inline (Set_Has_Dynamic_Length_Check);
!    pragma Inline (Set_Has_Init_Expression);
!    pragma Inline (Set_Has_Local_Raise);
!    pragma Inline (Set_Has_No_Elaboration_Code);
!    pragma Inline (Set_Has_Pragma_Suppress_All);
!    pragma Inline (Set_Has_Private_View);
!    pragma Inline (Set_Has_Relative_Deadline_Pragma);
!    pragma Inline (Set_Has_Self_Reference);
!    pragma Inline (Set_Has_SP_Choice);
!    pragma Inline (Set_Has_Storage_Size_Pragma);
!    pragma Inline (Set_Has_Target_Names);
!    pragma Inline (Set_Has_Wide_Character);
!    pragma Inline (Set_Has_Wide_Wide_Character);
!    pragma Inline (Set_Header_Size_Added);
!    pragma Inline (Set_Hidden_By_Use_Clause);
!    pragma Inline (Set_High_Bound);
!    pragma Inline (Set_Identifier);
!    pragma Inline (Set_Implicit_With);
!    pragma Inline (Set_Import_Interface_Present);
!    pragma Inline (Set_In_Present);
!    pragma Inline (Set_Includes_Infinities);
!    pragma Inline (Set_Incomplete_View);
!    pragma Inline (Set_Inherited_Discriminant);
!    pragma Inline (Set_Instance_Spec);
!    pragma Inline (Set_Interface_List);
!    pragma Inline (Set_Interface_Present);
!    pragma Inline (Set_Intval);
!    pragma Inline (Set_Is_Abort_Block);
!    pragma Inline (Set_Is_Accessibility_Actual);
!    pragma Inline (Set_Is_Analyzed_Pragma);
!    pragma Inline (Set_Is_Asynchronous_Call_Block);
!    pragma Inline (Set_Is_Boolean_Aspect);
!    pragma Inline (Set_Is_Checked);
!    pragma Inline (Set_Is_Checked_Ghost_Pragma);
!    pragma Inline (Set_Is_Component_Left_Opnd);
!    pragma Inline (Set_Is_Component_Right_Opnd);
!    pragma Inline (Set_Is_Controlling_Actual);
!    pragma Inline (Set_Is_Declaration_Level_Node);
!    pragma Inline (Set_Is_Delayed_Aspect);
!    pragma Inline (Set_Is_Disabled);
!    pragma Inline (Set_Is_Dispatching_Call);
!    pragma Inline (Set_Is_Dynamic_Coextension);
!    pragma Inline (Set_Is_Effective_Use_Clause);
!    pragma Inline (Set_Is_Elaboration_Checks_OK_Node);
!    pragma Inline (Set_Is_Elaboration_Code);
!    pragma Inline (Set_Is_Elaboration_Warnings_OK_Node);
!    pragma Inline (Set_Is_Elsif);
!    pragma Inline (Set_Is_Entry_Barrier_Function);
!    pragma Inline (Set_Is_Expanded_Build_In_Place_Call);
!    pragma Inline (Set_Is_Expanded_Contract);
!    pragma Inline (Set_Is_Finalization_Wrapper);
!    pragma Inline (Set_Is_Folded_In_Parser);
!    pragma Inline (Set_Is_Generic_Contract_Pragma);
!    pragma Inline (Set_Is_Homogeneous_Aggregate);
!    pragma Inline (Set_Is_Ignored);
!    pragma Inline (Set_Is_Ignored_Ghost_Pragma);
!    pragma Inline (Set_Is_In_Discriminant_Check);
!    pragma Inline (Set_Is_Inherited_Pragma);
!    pragma Inline (Set_Is_Initialization_Block);
!    pragma Inline (Set_Is_Known_Guaranteed_ABE);
!    pragma Inline (Set_Is_Machine_Number);
!    pragma Inline (Set_Is_Null_Loop);
!    pragma Inline (Set_Is_Overloaded);
!    pragma Inline (Set_Is_Power_Of_2_For_Shift);
!    pragma Inline (Set_Is_Preelaborable_Call);
!    pragma Inline (Set_Is_Prefixed_Call);
!    pragma Inline (Set_Is_Protected_Subprogram_Body);
!    pragma Inline (Set_Is_Qualified_Universal_Literal);
!    pragma Inline (Set_Is_Read);
!    pragma Inline (Set_Is_Source_Call);
!    pragma Inline (Set_Is_SPARK_Mode_On_Node);
!    pragma Inline (Set_Is_Static_Coextension);
!    pragma Inline (Set_Is_Static_Expression);
!    pragma Inline (Set_Is_Subprogram_Descriptor);
!    pragma Inline (Set_Is_Task_Allocation_Block);
!    pragma Inline (Set_Is_Task_Body_Procedure);
!    pragma Inline (Set_Is_Task_Master);
!    pragma Inline (Set_Is_Write);
!    pragma Inline (Set_Iterator_Filter);
!    pragma Inline (Set_Iteration_Scheme);
!    pragma Inline (Set_Iterator_Specification);
!    pragma Inline (Set_Itype);
!    pragma Inline (Set_Key_Expression);
!    pragma Inline (Set_Kill_Range_Check);
!    pragma Inline (Set_Label_Construct);
!    pragma Inline (Set_Last_Bit);
!    pragma Inline (Set_Last_Name);
!    pragma Inline (Set_Left_Opnd);
!    pragma Inline (Set_Library_Unit);
!    pragma Inline (Set_Limited_Present);
!    pragma Inline (Set_Limited_View_Installed);
!    pragma Inline (Set_Literals);
!    pragma Inline (Set_Local_Raise_Not_OK);
!    pragma Inline (Set_Local_Raise_Statements);
!    pragma Inline (Set_Loop_Actions);
!    pragma Inline (Set_Loop_Parameter_Specification);
!    pragma Inline (Set_Low_Bound);
!    pragma Inline (Set_Mod_Clause);
!    pragma Inline (Set_More_Ids);
!    pragma Inline (Set_Must_Be_Byte_Aligned);
!    pragma Inline (Set_Must_Not_Freeze);
!    pragma Inline (Set_Must_Not_Override);
!    pragma Inline (Set_Must_Override);
!    pragma Inline (Set_Name);
!    pragma Inline (Set_Names);
!    pragma Inline (Set_Next_Entity);
!    pragma Inline (Set_Next_Exit_Statement);
!    pragma Inline (Set_Next_Implicit_With);
!    pragma Inline (Set_Next_Named_Actual);
!    pragma Inline (Set_Next_Pragma);
!    pragma Inline (Set_Next_Rep_Item);
!    pragma Inline (Set_Next_Use_Clause);
!    pragma Inline (Set_No_Ctrl_Actions);
!    pragma Inline (Set_No_Elaboration_Check);
!    pragma Inline (Set_No_Entities_Ref_In_Spec);
!    pragma Inline (Set_No_Initialization);
!    pragma Inline (Set_No_Minimize_Eliminate);
!    pragma Inline (Set_No_Side_Effect_Removal);
!    pragma Inline (Set_No_Truncation);
!    pragma Inline (Set_Null_Excluding_Subtype);
!    pragma Inline (Set_Null_Exclusion_Present);
!    pragma Inline (Set_Null_Exclusion_In_Return_Present);
!    pragma Inline (Set_Null_Present);
!    pragma Inline (Set_Null_Record_Present);
!    pragma Inline (Set_Null_Statement);
!    pragma Inline (Set_Object_Definition);
!    pragma Inline (Set_Of_Present);
!    pragma Inline (Set_Original_Discriminant);
!    pragma Inline (Set_Original_Entity);
!    pragma Inline (Set_Others_Discrete_Choices);
!    pragma Inline (Set_Out_Present);
!    pragma Inline (Set_Parameter_Associations);
!    pragma Inline (Set_Parameter_Specifications);
!    pragma Inline (Set_Parameter_Type);
!    pragma Inline (Set_Parent_Spec);
!    pragma Inline (Set_Parent_With);
!    pragma Inline (Set_Position);
!    pragma Inline (Set_Pragma_Argument_Associations);
!    pragma Inline (Set_Pragma_Identifier);
!    pragma Inline (Set_Pragmas_After);
!    pragma Inline (Set_Pragmas_Before);
!    pragma Inline (Set_Pre_Post_Conditions);
!    pragma Inline (Set_Prefix);
!    pragma Inline (Set_Premature_Use);
!    pragma Inline (Set_Present_Expr);
!    pragma Inline (Set_Prev_Ids);
!    pragma Inline (Set_Prev_Use_Clause);
!    pragma Inline (Set_Print_In_Hex);
!    pragma Inline (Set_Private_Declarations);
!    pragma Inline (Set_Private_Present);
!    pragma Inline (Set_Procedure_To_Call);
!    pragma Inline (Set_Proper_Body);
!    pragma Inline (Set_Protected_Definition);
!    pragma Inline (Set_Protected_Present);
!    pragma Inline (Set_Raises_Constraint_Error);
!    pragma Inline (Set_Range_Constraint);
!    pragma Inline (Set_Range_Expression);
!    pragma Inline (Set_Real_Range_Specification);
!    pragma Inline (Set_Realval);
!    pragma Inline (Set_Reason);
!    pragma Inline (Set_Record_Extension_Part);
!    pragma Inline (Set_Redundant_Use);
!    pragma Inline (Set_Renaming_Exception);
!    pragma Inline (Set_Result_Definition);
!    pragma Inline (Set_Return_Object_Declarations);
!    pragma Inline (Set_Reverse_Present);
!    pragma Inline (Set_Right_Opnd);
!    pragma Inline (Set_Rounded_Result);
!    pragma Inline (Set_Save_Invocation_Graph_Of_Body);
!    pragma Inline (Set_SCIL_Controlling_Tag);
!    pragma Inline (Set_SCIL_Entity);
!    pragma Inline (Set_SCIL_Tag_Value);
!    pragma Inline (Set_SCIL_Target_Prim);
!    pragma Inline (Set_Scope);
!    pragma Inline (Set_Select_Alternatives);
!    pragma Inline (Set_Selector_Name);
!    pragma Inline (Set_Selector_Names);
!    pragma Inline (Set_Shift_Count_OK);
!    pragma Inline (Set_Source_Type);
!    pragma Inline (Set_Split_PPC);
!    pragma Inline (Set_Statements);
!    pragma Inline (Set_Storage_Pool);
!    pragma Inline (Set_Strval);
!    pragma Inline (Set_Subpool_Handle_Name);
!    pragma Inline (Set_Subtype_Indication);
!    pragma Inline (Set_Subtype_Mark);
!    pragma Inline (Set_Subtype_Marks);
!    pragma Inline (Set_Suppress_Assignment_Checks);
!    pragma Inline (Set_Suppress_Loop_Warnings);
!    pragma Inline (Set_Synchronized_Present);
!    pragma Inline (Set_TSS_Elist);
!    pragma Inline (Set_Tagged_Present);
!    pragma Inline (Set_Target);
!    pragma Inline (Set_Target_Type);
!    pragma Inline (Set_Task_Definition);
!    pragma Inline (Set_Task_Present);
!    pragma Inline (Set_Then_Actions);
!    pragma Inline (Set_Then_Statements);
!    pragma Inline (Set_Triggering_Alternative);
!    pragma Inline (Set_Triggering_Statement);
!    pragma Inline (Set_Type_Definition);
!    pragma Inline (Set_Uneval_Old_Accept);
!    pragma Inline (Set_Uneval_Old_Warn);
!    pragma Inline (Set_Unit);
!    pragma Inline (Set_Uninitialized_Variable);
!    pragma Inline (Set_Unknown_Discriminants_Present);
!    pragma Inline (Set_Unreferenced_In_Spec);
!    pragma Inline (Set_Used_Operations);
!    pragma Inline (Set_Variant_Part);
!    pragma Inline (Set_Variants);
!    pragma Inline (Set_Visible_Declarations);
!    pragma Inline (Set_Was_Attribute_Reference);
!    pragma Inline (Set_Was_Default_Init_Box_Association);
!    pragma Inline (Set_Was_Expression_Function);
!    pragma Inline (Set_Was_Originally_Stub);
  
  end Sinfo;
--- 8533,8539 ----
     --  error recovery (Error_Posted is also set in the Error node).
  
     --  N_Error
!    --  Chars is set to Error_Name
!    --  Etype
  
  end Sinfo;
diff -Nrcpad gcc-11.3.0/gcc/ada/sinput-c.adb gcc-12.1.0/gcc/ada/sinput-c.adb
*** gcc-11.3.0/gcc/ada/sinput-c.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sinput-c.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sinput-c.ads gcc-12.1.0/gcc/ada/sinput-c.ads
*** gcc-11.3.0/gcc/ada/sinput-c.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sinput-c.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sinput-d.adb gcc-12.1.0/gcc/ada/sinput-d.adb
*** gcc-11.3.0/gcc/ada/sinput-d.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sinput-d.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2002-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sinput-d.ads gcc-12.1.0/gcc/ada/sinput-d.ads
*** gcc-11.3.0/gcc/ada/sinput-d.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sinput-d.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sinput-l.adb gcc-12.1.0/gcc/ada/sinput-l.adb
*** gcc-11.3.0/gcc/ada/sinput-l.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sinput-l.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 24,49 ****
  ------------------------------------------------------------------------------
  
  with Alloc;
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Fname;    use Fname;
! with Lib;      use Lib;
! with Opt;      use Opt;
! with Osint;    use Osint;
! with Output;   use Output;
! with Prep;     use Prep;
! with Prepcomp; use Prepcomp;
! with Scans;    use Scans;
! with Scn;      use Scn;
! with Sem_Aux;  use Sem_Aux;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with System;   use System;
  
! with System.OS_Lib; use System.OS_Lib;
  
  package body Sinput.L is
  
--- 24,52 ----
  ------------------------------------------------------------------------------
  
  with Alloc;
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Fname;          use Fname;
! with Lib;            use Lib;
! with Opt;            use Opt;
! with Osint;          use Osint;
! with Output;         use Output;
! with Prep;           use Prep;
! with Prepcomp;       use Prepcomp;
! with Scans;          use Scans;
! with Scn;            use Scn;
! with Sem_Aux;        use Sem_Aux;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Snames;         use Snames;
! with System;         use System;
  
! with System.OS_Lib;  use System.OS_Lib;
  
  package body Sinput.L is
  
*************** package body Sinput.L is
*** 417,423 ****
        if Null_Source_Buffer_Ptr (Src) then
           Source_File.Decrement_Last;
  
!          if FD = Null_FD then
              return No_Source_File;
           else
              return No_Access_To_Source_File;
--- 420,426 ----
        if Null_Source_Buffer_Ptr (Src) then
           Source_File.Decrement_Last;
  
!          if FD = Osint.Null_FD then
              return No_Source_File;
           else
              return No_Access_To_Source_File;
*************** package body Sinput.L is
*** 548,566 ****
              Set_Source_File_Index_Table (X);
  
              if Opt.List_Preprocessing_Symbols then
-                Get_Name_String (N);
- 
                 declare
!                   Foreword : String (1 .. Foreword_Start'Length +
!                                           Name_Len + Foreword_End'Length);
! 
                 begin
-                   Foreword (1 .. Foreword_Start'Length) := Foreword_Start;
-                   Foreword (Foreword_Start'Length + 1 ..
-                               Foreword_Start'Length + Name_Len) :=
-                     Name_Buffer (1 .. Name_Len);
-                   Foreword (Foreword'Last - Foreword_End'Length + 1 ..
-                               Foreword'Last) := Foreword_End;
                    Prep.List_Symbols (Foreword);
                 end;
              end if;
--- 551,560 ----
              Set_Source_File_Index_Table (X);
  
              if Opt.List_Preprocessing_Symbols then
                 declare
!                   Foreword : constant String :=
!                     Foreword_Start & Get_Name_String (N) & Foreword_End;
                 begin
                    Prep.List_Symbols (Foreword);
                 end;
              end if;
*************** package body Sinput.L is
*** 651,664 ****
                          NB     : Integer;
                          Status : Boolean;
  
!                      begin
!                         Get_Name_String (N);
!                         Add_Str_To_Name_Buffer (Prep_Suffix);
  
!                         Delete_File (Name_Buffer (1 .. Name_Len), Status);
  
!                         FD :=
!                           Create_New_File (Name_Buffer (1 .. Name_Len), Text);
  
                          Status := FD /= Invalid_FD;
  
--- 645,657 ----
                          NB     : Integer;
                          Status : Boolean;
  
!                         Prep_Filename : constant String :=
!                           Get_Name_String (N) & Prep_Suffix;
  
!                      begin
!                         Delete_File (Prep_Filename, Status);
  
!                         FD := Create_New_File (Prep_Filename, Text);
  
                          Status := FD /= Invalid_FD;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/sinput-l.ads gcc-12.1.0/gcc/ada/sinput-l.ads
*** gcc-11.3.0/gcc/ada/sinput-l.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sinput-l.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sinput.adb gcc-12.1.0/gcc/ada/sinput.adb
*** gcc-11.3.0/gcc/ada/sinput.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sinput.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 26,37 ****
  pragma Style_Checks (All_Checks);
  --  Subprograms not all in alpha order
  
! with Atree;    use Atree;
! with Debug;    use Debug;
! with Opt;      use Opt;
! with Output;   use Output;
! with Scans;    use Scans;
! with Widechar; use Widechar;
  
  with GNAT.Byte_Order_Mark; use GNAT.Byte_Order_Mark;
  
--- 26,39 ----
  pragma Style_Checks (All_Checks);
  --  Subprograms not all in alpha order
  
! with Atree;          use Atree;
! with Debug;          use Debug;
! with Opt;            use Opt;
! with Output;         use Output;
! with Scans;          use Scans;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Widechar;       use Widechar;
  
  with GNAT.Byte_Order_Mark; use GNAT.Byte_Order_Mark;
  
*************** package body Sinput is
*** 327,333 ****
     begin
        for X in 1 .. Source_File.Last loop
           declare
!             S  : Source_File_Record renames Source_File.Table (X);
           begin
              if S.Instance = No_Instance_Id then
                 Free_Source_Buffer (S.Source_Text);
--- 329,335 ----
     begin
        for X in 1 .. Source_File.Last loop
           declare
!             S : Source_File_Record renames Source_File.Table (X);
           begin
              if S.Instance = No_Instance_Id then
                 Free_Source_Buffer (S.Source_Text);
*************** package body Sinput is
*** 931,937 ****
  
     procedure Sloc_Range (N : Node_Id; Min, Max : out Source_Ptr) is
  
!       Indx : constant Source_File_Index :=  Get_Source_File_Index (Sloc (N));
  
        function Process (N : Node_Id) return Traverse_Result;
        --  Process function for traversing the node tree
--- 933,939 ----
  
     procedure Sloc_Range (N : Node_Id; Min, Max : out Source_Ptr) is
  
!       Indx : constant Source_File_Index := Get_Source_File_Index (Sloc (N));
  
        function Process (N : Node_Id) return Traverse_Result;
        --  Process function for traversing the node tree
*************** package body Sinput is
*** 943,967 ****
        -------------
  
        function Process (N : Node_Id) return Traverse_Result is
!          Orig : constant Node_Id := Original_Node (N);
  
        begin
           --  Skip nodes that may have been added during expansion and
           --  that originate in other units, such as code for contracts
           --  in subprogram bodies.
  
!          if Get_Source_File_Index (Sloc (Orig)) /= Indx then
              return Skip;
           end if;
  
!          if Sloc (Orig) < Min then
!             if Sloc (Orig) > No_Location then
!                Min := Sloc (Orig);
!             end if;
! 
!          elsif Sloc (Orig) > Max then
!             if Sloc (Orig) > No_Location then
!                Max := Sloc (Orig);
              end if;
           end if;
  
--- 945,966 ----
        -------------
  
        function Process (N : Node_Id) return Traverse_Result is
!          Loc : constant Source_Ptr := Sloc (Original_Node (N));
  
        begin
           --  Skip nodes that may have been added during expansion and
           --  that originate in other units, such as code for contracts
           --  in subprogram bodies.
  
!          if Get_Source_File_Index (Loc) /= Indx then
              return Skip;
           end if;
  
!          if Loc > No_Location then
!             if Loc < Min then
!                Min := Loc;
!             elsif Loc > Max then
!                Max := Loc;
              end if;
           end if;
  
*************** package body Sinput is
*** 972,978 ****
  
     begin
        Min := Sloc (N);
!       Max := Sloc (N);
        Traverse (N);
     end Sloc_Range;
  
--- 971,977 ----
  
     begin
        Min := Sloc (N);
!       Max := Min;
        Traverse (N);
     end Sloc_Range;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/sinput.ads gcc-12.1.0/gcc/ada/sinput.ads
*** gcc-11.3.0/gcc/ada/sinput.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sinput.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sinput is
*** 412,421 ****
     --  Initialized so that some tools (such as gprbuild) can be built with
     --  -gnatVa and pragma Initialize_Scalars without problems.
  
!    Current_Source_Unit : Unit_Number_Type;
!    --  Unit number of source file currently being scanned. The special value
!    --  of No_Unit indicates that the configuration pragma file is currently
!    --  being scanned (this has no entry in the unit table).
  
     Source_gnat_adc : Source_File_Index := No_Source_File;
     --  This is set if a gnat.adc file is present to reference this file
--- 412,421 ----
     --  Initialized so that some tools (such as gprbuild) can be built with
     --  -gnatVa and pragma Initialize_Scalars without problems.
  
!    Current_Source_Unit : Unit_Number_Type := No_Unit;
!    --  Unit number of source file currently being scanned. Initialized to
!    --  No_Unit for pre-processing and the configuration pragma file scanning,
!    --  since both stages have no corresponding entry in the unit table.
  
     Source_gnat_adc : Source_File_Index := No_Source_File;
     --  This is set if a gnat.adc file is present to reference this file
diff -Nrcpad gcc-11.3.0/gcc/ada/snames.adb-tmpl gcc-12.1.0/gcc/ada/snames.adb-tmpl
*** gcc-11.3.0/gcc/ada/snames.adb-tmpl	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/snames.adb-tmpl	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2021, 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- --
*************** package body Snames is
*** 258,263 ****
--- 258,265 ----
              return Pragma_Interrupt_Priority;
           when Name_Lock_Free                        =>
              return Pragma_Lock_Free;
+          when Name_Preelaborable_Initialization     =>
+             return Pragma_Preelaborable_Initialization;
           when Name_Priority                         =>
              return Pragma_Priority;
           when Name_Secondary_Stack_Size             =>
*************** package body Snames is
*** 488,493 ****
--- 490,496 ----
          or else N = Name_Interface
          or else N = Name_Interrupt_Priority
          or else N = Name_Lock_Free
+         or else N = Name_Preelaborable_Initialization
          or else N = Name_Priority
          or else N = Name_Secondary_Stack_Size
          or else N = Name_Storage_Size
diff -Nrcpad gcc-11.3.0/gcc/ada/snames.ads-tmpl gcc-12.1.0/gcc/ada/snames.ads-tmpl
*** gcc-11.3.0/gcc/ada/snames.ads-tmpl	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/snames.ads-tmpl	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2021, 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- --
*************** package Snames is
*** 37,42 ****
--- 37,53 ----
     --  some exceptions). See the body of Get_Attribute_Id for details. The
     --  same is true of other enumeration types declared in this package.
  
+    --  ALSO NOTE: In the case of a name that corresponds to both an attribute
+    --  and a pragma, the Name_Id must be defined in the attribute section
+    --  (between First_Attribute_Name and Last_Attribute_Name). Also, please
+    --  add a comment in the list of Name_Ids at the point where the name would
+    --  normally appear alphabetically (for an example, see comment starting
+    --  "Note: CPU ..."). The Pragma_Id with that name must be defined in the
+    --  last section of literals for type Pragma_Id (see set of Pragma_Ids that
+    --  require special processing due to matching an attribute name). Finally,
+    --  the bodies of functions Get_Pragma_Id and Is_Pragma_Name must be updated
+    --  to test for each such pragma that shares a name with an attribute.
+ 
     ------------------
     -- Preset Names --
     ------------------
*************** package Snames is
*** 138,143 ****
--- 149,155 ----
  
     Name_Default_Value                  : constant Name_Id := N + $;
     Name_Default_Component_Value        : constant Name_Id := N + $;
+    Name_Designated_Storage_Model       : constant Name_Id := N + $;
     Name_Dimension                      : constant Name_Id := N + $;
     Name_Dimension_System               : constant Name_Id := N + $;
     Name_Disable_Controlled             : constant Name_Id := N + $;
*************** package Snames is
*** 145,154 ****
--- 157,170 ----
     Name_Exclusive_Functions            : constant Name_Id := N + $;
     Name_Full_Access_Only               : constant Name_Id := N + $;
     Name_Integer_Literal                : constant Name_Id := N + $;
+    Name_No_Controlled_Parts            : constant Name_Id := N + $;
+    Name_No_Task_Parts                  : 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 + $;
     Name_Static_Predicate               : constant Name_Id := N + $;
+    Name_Storage_Model                  : constant Name_Id := N + $;
+    Name_Storage_Model_Type             : constant Name_Id := N + $;
     Name_String_Literal                 : constant Name_Id := N + $;
     Name_Synchronization                : constant Name_Id := N + $;
     Name_Unimplemented                  : constant Name_Id := N + $;
*************** package Snames is
*** 165,176 ****
     Name_uController                    : constant Name_Id := N + $;
     Name_uCPU                           : constant Name_Id := N + $;
     Name_uDispatching_Domain            : constant Name_Id := N + $;
-    Name_uEntry_Bodies                  : constant Name_Id := N + $;
-    Name_uExpunge                       : constant Name_Id := N + $;
     Name_uFinalizer                     : constant Name_Id := N + $;
     Name_uFinalizer_Old                 : constant Name_Id := N + $;
     Name_uFinalization_Controller       : constant Name_Id := N + $;
-    Name_uIdepth                        : constant Name_Id := N + $;
     Name_uInit                          : constant Name_Id := N + $;
     Name_uInit_Level                    : constant Name_Id := N + $;
     Name_uInvariant                     : constant Name_Id := N + $;
--- 181,189 ----
*************** package Snames is
*** 181,202 ****
     Name_uPostcond_Enabled              : constant Name_Id := N + $;
     Name_uPre                           : constant Name_Id := N + $;
     Name_uPriority                      : constant Name_Id := N + $;
-    Name_uProcess_ATSD                  : constant Name_Id := N + $;
     Name_uRelative_Deadline             : constant Name_Id := N + $;
     Name_uResult                        : constant Name_Id := N + $;
     Name_uResult_Object_For_Postcond    : constant Name_Id := N + $;
     Name_uReturn_Success_For_Postcond   : constant Name_Id := N + $;
     Name_uSecondary_Stack               : constant Name_Id := N + $;
     Name_uSecondary_Stack_Size          : constant Name_Id := N + $;
-    Name_uService                       : constant Name_Id := N + $;
     Name_uSize                          : constant Name_Id := N + $;
     Name_uStack                         : constant Name_Id := N + $;
-    Name_uTags                          : constant Name_Id := N + $;
     Name_uTask                          : constant Name_Id := N + $;
     Name_uTask_Id                       : constant Name_Id := N + $;
     Name_uTask_Info                     : constant Name_Id := N + $;
     Name_uTask_Name                     : constant Name_Id := N + $;
-    Name_uTrace_Sp                      : constant Name_Id := N + $;
     Name_uType_Invariant                : constant Name_Id := N + $;
     Name_uVariants                      : constant Name_Id := N + $;
  
--- 194,211 ----
*************** package Snames is
*** 323,329 ****
     Name_Origin                         : constant Name_Id := N + $;
     Name_Params                         : constant Name_Id := N + $;
     Name_Partition                      : constant Name_Id := N + $;
-    Name_Partition_Interface            : constant Name_Id := N + $;
     Name_Ras                            : constant Name_Id := N + $;
     Name_uCall                          : constant Name_Id := N + $;
     Name_RCI_Name                       : constant Name_Id := N + $;
--- 332,337 ----
*************** package Snames is
*** 333,339 ****
     Name_Operation                      : constant Name_Id := N + $;
     Name_Argument                       : constant Name_Id := N + $;
     Name_Arg_Modes                      : constant Name_Id := N + $;
-    Name_Handler                        : constant Name_Id := N + $;
     Name_Target                         : constant Name_Id := N + $;
     Name_Req                            : constant Name_Id := N + $;
     Name_Obj_TypeCode                   : constant Name_Id := N + $;
--- 341,346 ----
*************** package Snames is
*** 385,394 ****
     --  Ada 83, Ada 95, and Ada 2005 mode as well, where they are technically
     --  considered to be implementation dependent pragmas.
  
-    --  The entries marked AAMP are AAMP specific pragmas that are recognized
-    --  only in GNAT for the AAMP. They are ignored in other versions with
-    --  appropriate warnings.
- 
     First_Pragma_Name                   : constant Name_Id := N + $;
  
     --  Configuration pragmas are grouped at start. Note that there is a list
--- 392,397 ----
*************** package Snames is
*** 401,407 ****
     Name_Ada_2005                       : constant Name_Id := N + $; -- GNAT
     Name_Ada_12                         : constant Name_Id := N + $; -- GNAT
     Name_Ada_2012                       : constant Name_Id := N + $; -- GNAT
!    Name_Ada_2020                       : constant Name_Id := N + $; -- GNAT
     Name_Aggregate_Individually_Assign  : constant Name_Id := N + $; -- GNAT
     Name_Allow_Integer_Address          : constant Name_Id := N + $; -- GNAT
     Name_Annotate                       : constant Name_Id := N + $; -- GNAT
--- 404,410 ----
     Name_Ada_2005                       : constant Name_Id := N + $; -- GNAT
     Name_Ada_12                         : constant Name_Id := N + $; -- GNAT
     Name_Ada_2012                       : constant Name_Id := N + $; -- GNAT
!    Name_Ada_2022                       : constant Name_Id := N + $; -- GNAT
     Name_Aggregate_Individually_Assign  : constant Name_Id := N + $; -- GNAT
     Name_Allow_Integer_Address          : constant Name_Id := N + $; -- GNAT
     Name_Annotate                       : constant Name_Id := N + $; -- GNAT
*************** package Snames is
*** 413,420 ****
     Name_Check_Policy                   : constant Name_Id := N + $; -- GNAT
     Name_Compile_Time_Error             : constant Name_Id := N + $; -- GNAT
     Name_Compile_Time_Warning           : constant Name_Id := N + $; -- GNAT
-    Name_Compiler_Unit                  : constant Name_Id := N + $; -- GNAT
-    Name_Compiler_Unit_Warning          : constant Name_Id := N + $; -- GNAT
     Name_Component_Alignment            : constant Name_Id := N + $; -- GNAT
     Name_Convention_Identifier          : constant Name_Id := N + $; -- GNAT
     Name_Debug_Policy                   : constant Name_Id := N + $; -- GNAT
--- 416,421 ----
*************** package Snames is
*** 441,446 ****
--- 442,448 ----
     --  correctly recognize and process Fast_Math.
  
     Name_Favor_Top_Level                : constant Name_Id := N + $; -- GNAT
+    Name_GNAT_Annotate                  : constant Name_Id := N + $; -- GNAT
     Name_Ignore_Pragma                  : constant Name_Id := N + $; -- GNAT
     Name_Implicit_Packing               : constant Name_Id := N + $; -- GNAT
     Name_Initialize_Scalars             : constant Name_Id := N + $; -- GNAT
*************** package Snames is
*** 480,486 ****
     Name_Suppress_Exception_Locations   : constant Name_Id := N + $; -- GNAT
     Name_Task_Dispatching_Policy        : constant Name_Id := N + $;
     Name_Unevaluated_Use_Of_Old         : constant Name_Id := N + $; -- GNAT
-    Name_Universal_Data                 : constant Name_Id := N + $; -- AAMP
     Name_Unsuppress                     : constant Name_Id := N + $; -- Ada 05
     Name_Use_VADS_Size                  : constant Name_Id := N + $; -- GNAT
     Name_Validity_Checks                : constant Name_Id := N + $; -- GNAT
--- 482,487 ----
*************** package Snames is
*** 517,522 ****
--- 518,524 ----
     Name_CPP_Constructor                : constant Name_Id := N + $; -- GNAT
     Name_CPP_Virtual                    : constant Name_Id := N + $; -- GNAT
     Name_CPP_Vtable                     : constant Name_Id := N + $; -- GNAT
+    Name_CUDA_Device                    : constant Name_Id := N + $; -- GNAT
     Name_CUDA_Execute                   : constant Name_Id := N + $; -- GNAT
     Name_CUDA_Global                    : constant Name_Id := N + $; -- GNAT
  
*************** package Snames is
*** 545,551 ****
     Name_Export_Function                : constant Name_Id := N + $; -- GNAT
     Name_Export_Object                  : constant Name_Id := N + $; -- GNAT
     Name_Export_Procedure               : constant Name_Id := N + $; -- GNAT
-    Name_Export_Value                   : constant Name_Id := N + $; -- GNAT
     Name_Export_Valued_Procedure        : constant Name_Id := N + $; -- GNAT
     Name_Extensions_Visible             : constant Name_Id := N + $; -- GNAT
     Name_External                       : constant Name_Id := N + $; -- GNAT
--- 547,552 ----
*************** package Snames is
*** 627,633 ****
     Name_Precondition                   : constant Name_Id := N + $; -- GNAT
     Name_Predicate                      : constant Name_Id := N + $; -- GNAT
     Name_Predicate_Failure              : constant Name_Id := N + $; -- Ada 12
!    Name_Preelaborable_Initialization   : constant Name_Id := N + $; -- Ada 05
     Name_Preelaborate                   : constant Name_Id := N + $;
     Name_Pre_Class                      : constant Name_Id := N + $; -- GNAT
  
--- 628,640 ----
     Name_Precondition                   : constant Name_Id := N + $; -- GNAT
     Name_Predicate                      : constant Name_Id := N + $; -- GNAT
     Name_Predicate_Failure              : constant Name_Id := N + $; -- Ada 12
! 
!    --  Note: Preelaborable_Initialization is not in this list because its name
!    --  matches the name of the corresponding attribute. However, it is included
!    --  in the definition of the type Pragma_Id, and the functions Get_Pragma_Id
!    --  and Is_Pragma_Name correctly recognize and process that pragma name.
!    --  Preelaborable_Initialization is a standard Ada 2005 pragma.
! 
     Name_Preelaborate                   : constant Name_Id := N + $;
     Name_Pre_Class                      : constant Name_Id := N + $; -- GNAT
  
*************** package Snames is
*** 764,769 ****
--- 771,777 ----
  
     --  Other special names used in processing attributes, aspects, and pragmas
  
+    Name_Address_Type                   : constant Name_Id := N + $;
     Name_Aggregate                      : constant Name_Id := N + $;
     Name_Allow                          : constant Name_Id := N + $;
     Name_Amount                         : constant Name_Id := N + $;
*************** package Snames is
*** 778,789 ****
     Name_By_Entry                       : constant Name_Id := N + $;
     Name_By_Protected_Procedure         : constant Name_Id := N + $;
     Name_Casing                         : constant Name_Id := N + $;
-    Name_Check_All                      : constant Name_Id := N + $;
     Name_Code                           : constant Name_Id := N + $;
     Name_Component                      : constant Name_Id := N + $;
     Name_Component_Size_4               : constant Name_Id := N + $;
     Name_Copy                           : constant Name_Id := N + $;
!    Name_D_Float                        : constant Name_Id := N + $;
     Name_Decreases                      : constant Name_Id := N + $;
     Name_Disable                        : constant Name_Id := N + $;
     Name_Dot_Replacement                : constant Name_Id := N + $;
--- 786,797 ----
     Name_By_Entry                       : constant Name_Id := N + $;
     Name_By_Protected_Procedure         : constant Name_Id := N + $;
     Name_Casing                         : constant Name_Id := N + $;
     Name_Code                           : constant Name_Id := N + $;
     Name_Component                      : constant Name_Id := N + $;
     Name_Component_Size_4               : constant Name_Id := N + $;
     Name_Copy                           : constant Name_Id := N + $;
!    Name_Copy_From                      : constant Name_Id := N + $;
!    Name_Copy_To                        : constant Name_Id := N + $;
     Name_Decreases                      : constant Name_Id := N + $;
     Name_Disable                        : constant Name_Id := N + $;
     Name_Dot_Replacement                : constant Name_Id := N + $;
*************** package Snames is
*** 791,812 ****
     Name_Eliminated                     : constant Name_Id := N + $;
     Name_Ensures                        : constant Name_Id := N + $;
     Name_Entity                         : constant Name_Id := N + $;
-    Name_Entry_Count                    : constant Name_Id := N + $;
     Name_External_Name                  : constant Name_Id := N + $;
-    Name_First_Optional_Parameter       : constant Name_Id := N + $;
-    Name_Force                          : constant Name_Id := N + $;
     Name_Form                           : constant Name_Id := N + $;
-    Name_G_Float                        : constant Name_Id := N + $;
     Name_Gcc                            : constant Name_Id := N + $;
     Name_General                        : constant Name_Id := N + $;
     Name_Gnat                           : constant Name_Id := N + $;
-    Name_Gnat_Annotate                  : constant Name_Id := N + $;
     Name_Gnat_Extended_Ravenscar        : constant Name_Id := N + $;
     Name_Gnat_Ravenscar_EDF             : constant Name_Id := N + $;
     Name_Gnatprove                      : constant Name_Id := N + $;
     Name_GPL                            : constant Name_Id := N + $;
     Name_High_Order_First               : constant Name_Id := N + $;
-    Name_IEEE_Float                     : constant Name_Id := N + $;
     Name_Ignore                         : constant Name_Id := N + $;
     Name_In_Out                         : constant Name_Id := N + $;
     Name_Increases                      : constant Name_Id := N + $;
--- 799,814 ----
*************** package Snames is
*** 825,835 ****
     Name_Mode                           : constant Name_Id := N + $;
     Name_Modified_GPL                   : constant Name_Id := N + $;
     Name_Name                           : constant Name_Id := N + $;
-    Name_NCA                            : constant Name_Id := N + $;
     Name_New_Name                       : constant Name_Id := N + $;
     Name_No                             : constant Name_Id := N + $;
-    Name_No_Access_Parameter_Allocators : constant Name_Id := N + $;
-    Name_No_Coextensions                : constant Name_Id := N + $;
     Name_No_Dependence                  : constant Name_Id := N + $;
     Name_No_Dynamic_Attachment          : constant Name_Id := N + $;
     Name_No_Dynamic_Interrupts          : constant Name_Id := N + $;
--- 827,834 ----
*************** package Snames is
*** 839,845 ****
     Name_No_Requeue                     : constant Name_Id := N + $;
     Name_No_Requeue_Statements          : constant Name_Id := N + $;
     Name_No_Specification_Of_Aspect     : constant Name_Id := N + $;
-    Name_No_Standard_Allocators_After_Elaboration : constant Name_Id := N + $;
     Name_No_Task_Attributes             : constant Name_Id := N + $;
     Name_No_Task_Attributes_Package     : constant Name_Id := N + $;
     Name_No_Use_Of_Attribute            : constant Name_Id := N + $;
--- 838,843 ----
*************** package Snames is
*** 847,857 ****
     Name_No_Use_Of_Pragma               : constant Name_Id := N + $;
     Name_No_Unroll                      : constant Name_Id := N + $;
     Name_No_Unrecognized_Aspects        : constant Name_Id := N + $;
-    Name_No_Unrecognized_Pragmas        : constant Name_Id := N + $;
     Name_No_Vector                      : constant Name_Id := N + $;
     Name_Nominal                        : constant Name_Id := N + $;
-    Name_Non_Volatile                   : constant Name_Id := N + $;
     Name_None                           : constant Name_Id := N + $;
     Name_On                             : constant Name_Id := N + $;
     Name_Optional                       : constant Name_Id := N + $;
     Name_Policy                         : constant Name_Id := N + $;
--- 845,854 ----
     Name_No_Use_Of_Pragma               : constant Name_Id := N + $;
     Name_No_Unroll                      : constant Name_Id := N + $;
     Name_No_Unrecognized_Aspects        : constant Name_Id := N + $;
     Name_No_Vector                      : constant Name_Id := N + $;
     Name_Nominal                        : constant Name_Id := N + $;
     Name_None                           : constant Name_Id := N + $;
+    Name_Null_Address                   : constant Name_Id := N + $;
     Name_On                             : constant Name_Id := N + $;
     Name_Optional                       : constant Name_Id := N + $;
     Name_Policy                         : constant Name_Id := N + $;
*************** package Snames is
*** 879,904 ****
     Name_Stack_Size                     : constant Name_Id := N + $;
     Name_Strict                         : constant Name_Id := N + $;
     Name_Subunit_File_Name              : constant Name_Id := N + $;
-    Name_Suppressed                     : constant Name_Id := N + $;
     Name_Suppressible                   : constant Name_Id := N + $;
     Name_Synchronous                    : constant Name_Id := N + $;
     Name_Task_Stack_Size_Default        : constant Name_Id := N + $;
     Name_Task_Type                      : constant Name_Id := N + $;
     Name_Time_Slicing_Enabled           : constant Name_Id := N + $;
     Name_Top_Guard                      : constant Name_Id := N + $;
-    Name_UBA                            : constant Name_Id := N + $;
-    Name_UBS                            : constant Name_Id := N + $;
-    Name_UBSB                           : constant Name_Id := N + $;
     Name_Unit_Name                      : constant Name_Id := N + $;
-    Name_Unknown                        : constant Name_Id := N + $;
     Name_Unrestricted                   : constant Name_Id := N + $;
     Name_Unroll                         : constant Name_Id := N + $;
     Name_Uppercase                      : constant Name_Id := N + $;
     Name_User                           : constant Name_Id := N + $;
     Name_Variant                        : constant Name_Id := N + $;
-    Name_VAX_Float                      : constant Name_Id := N + $;
     Name_Vector                         : constant Name_Id := N + $;
-    Name_Vtable_Ptr                     : constant Name_Id := N + $;
     Name_Warn                           : constant Name_Id := N + $;
     Name_Working_Storage                : constant Name_Id := N + $;
  
--- 876,894 ----
*************** package Snames is
*** 949,956 ****
     Name_Elaborated                     : constant Name_Id := N + $; -- GNAT
     Name_Emax                           : constant Name_Id := N + $; -- Ada 83
     Name_Enabled                        : constant Name_Id := N + $; -- GNAT
!    Name_Enum_Rep                       : constant Name_Id := N + $; -- GNAT
!    Name_Enum_Val                       : constant Name_Id := N + $; -- GNAT
     Name_Epsilon                        : constant Name_Id := N + $; -- Ada 83
     Name_Exponent                       : constant Name_Id := N + $;
     Name_External_Tag                   : constant Name_Id := N + $;
--- 939,946 ----
     Name_Elaborated                     : constant Name_Id := N + $; -- GNAT
     Name_Emax                           : constant Name_Id := N + $; -- Ada 83
     Name_Enabled                        : constant Name_Id := N + $; -- GNAT
!    Name_Enum_Rep                       : constant Name_Id := N + $; -- Ada 22
!    Name_Enum_Val                       : constant Name_Id := N + $; -- Ada 22
     Name_Epsilon                        : constant Name_Id := N + $; -- Ada 83
     Name_Exponent                       : constant Name_Id := N + $;
     Name_External_Tag                   : constant Name_Id := N + $;
*************** package Snames is
*** 1003,1019 ****
     Name_Modulus                        : constant Name_Id := N + $;
     Name_Null_Parameter                 : constant Name_Id := N + $; -- GNAT
     Name_Object_Size                    : constant Name_Id := N + $; -- GNAT
!    Name_Old                            : constant Name_Id := N + $; -- GNAT
     Name_Overlaps_Storage               : constant Name_Id := N + $; -- GNAT
     Name_Partition_ID                   : constant Name_Id := N + $;
     Name_Passed_By_Reference            : constant Name_Id := N + $; -- GNAT
     Name_Pool_Address                   : constant Name_Id := N + $; -- GNAT
     Name_Pos                            : constant Name_Id := N + $;
     Name_Position                       : constant Name_Id := N + $;
     Name_Priority                       : constant Name_Id := N + $; -- Ada 05
     Name_Range                          : constant Name_Id := N + $;
     Name_Range_Length                   : constant Name_Id := N + $; -- GNAT
!    Name_Reduce                         : constant Name_Id := N + $; -- GNAT
     Name_Ref                            : constant Name_Id := N + $; -- GNAT
     Name_Restriction_Set                : constant Name_Id := N + $; -- GNAT
     Name_Result                         : constant Name_Id := N + $; -- GNAT
--- 993,1010 ----
     Name_Modulus                        : constant Name_Id := N + $;
     Name_Null_Parameter                 : constant Name_Id := N + $; -- GNAT
     Name_Object_Size                    : constant Name_Id := N + $; -- GNAT
!    Name_Old                            : constant Name_Id := N + $; -- Ada 12
     Name_Overlaps_Storage               : constant Name_Id := N + $; -- GNAT
     Name_Partition_ID                   : constant Name_Id := N + $;
     Name_Passed_By_Reference            : constant Name_Id := N + $; -- GNAT
     Name_Pool_Address                   : constant Name_Id := N + $; -- GNAT
     Name_Pos                            : constant Name_Id := N + $;
     Name_Position                       : constant Name_Id := N + $;
+    Name_Preelaborable_Initialization   : constant Name_Id := N + $; -- Ada 22
     Name_Priority                       : constant Name_Id := N + $; -- Ada 05
     Name_Range                          : constant Name_Id := N + $;
     Name_Range_Length                   : constant Name_Id := N + $; -- GNAT
!    Name_Reduce                         : constant Name_Id := N + $; -- Ada 22
     Name_Ref                            : constant Name_Id := N + $; -- GNAT
     Name_Restriction_Set                : constant Name_Id := N + $; -- GNAT
     Name_Result                         : constant Name_Id := N + $; -- GNAT
*************** package Snames is
*** 1085,1090 ****
--- 1076,1082 ----
     Name_To_Any                         : constant Name_Id := N + $; -- GNAT
     Name_Truncation                     : constant Name_Id := N + $;
     Name_TypeCode                       : constant Name_Id := N + $; -- GNAT
+    Name_Valid_Value                    : constant Name_Id := N + $; -- GNAT
     Name_Value                          : constant Name_Id := N + $;
     Name_Wide_Image                     : constant Name_Id := N + $;
     Name_Wide_Wide_Image                : constant Name_Id := N + $;
*************** package Snames is
*** 1333,1339 ****
     Name_Import_Address                   : constant Name_Id := N + $;
     Name_Import_Largest_Value             : constant Name_Id := N + $;
     Name_Import_Value                     : constant Name_Id := N + $;
-    Name_Is_Negative                      : constant Name_Id := N + $;
     Name_Line                             : constant Name_Id := N + $;
     Name_Rotate_Left                      : constant Name_Id := N + $;
     Name_Rotate_Right                     : constant Name_Id := N + $;
--- 1325,1330 ----
*************** package Snames is
*** 1364,1373 ****
     subtype Ada_95_Reserved_Words is Name_Id
       range First_95_Reserved_Word .. Last_95_Reserved_Word;
  
-    --  Miscellaneous names used in semantic checking
- 
-    Name_Raise_Exception                  : constant Name_Id := N + $;
- 
     --  Additional names used by the Repinfo unit
  
     Name_Discriminant                     : constant Name_Id := N + $;
--- 1355,1360 ----
*************** package Snames is
*** 1377,1394 ****
     --  Note that the UP_ prefix means use the rest of the name in uppercase,
     --  e.g. Name_UP_RESULT corresponds to the name "RESULT".
  
-    Name_Unaligned_Valid                  : constant Name_Id := N + $;
     Name_UP_RESULT                        : constant Name_Id := N + $;
-    Name_Suspension_Object                : constant Name_Id := N + $;
     Name_Synchronous_Task_Control         : constant Name_Id := N + $;
  
     --  Names used to implement iterators over predefined containers
  
     Name_Cursor                           : constant Name_Id := N + $;
     Name_Element                          : constant Name_Id := N + $;
-    Name_Element_Type                     : constant Name_Id := N + $;
     Name_Has_Element                      : constant Name_Id := N + $;
-    Name_No_Element                       : constant Name_Id := N + $;
     Name_Forward_Iterator                 : constant Name_Id := N + $;
     Name_Reversible_Iterator              : constant Name_Id := N + $;
     Name_Previous                         : constant Name_Id := N + $;
--- 1364,1377 ----
*************** package Snames is
*** 1539,1544 ****
--- 1522,1528 ----
        Attribute_Pool_Address,
        Attribute_Pos,
        Attribute_Position,
+       Attribute_Preelaborable_Initialization,
        Attribute_Priority,
        Attribute_Range,
        Attribute_Range_Length,
*************** package Snames is
*** 1611,1616 ****
--- 1595,1601 ----
        Attribute_To_Any,
        Attribute_Truncation,
        Attribute_TypeCode,
+       Attribute_Valid_Value,
        Attribute_Value,
        Attribute_Wide_Image,
        Attribute_Wide_Wide_Image,
*************** package Snames is
*** 1705,1711 ****
        --  in Sem_Prag.
  
     for Convention_Id'Size use 8;
-    --  Plenty of space for expansion
  
     subtype Convention_C_Family is Convention_Id
       range Convention_C .. Convention_CPP;
--- 1690,1695 ----
*************** package Snames is
*** 1741,1748 ****
        Pragma_Ada_2005,
        Pragma_Ada_12,
        Pragma_Ada_2012,
!       Pragma_Ada_2020,
!       --  Note that there is no Pragma_Ada_20. Pragma_Ada_05/12 are for
        --  compatibility reasons only; the full year names are preferred.
        Pragma_Aggregate_Individually_Assign,
        Pragma_Allow_Integer_Address,
--- 1725,1732 ----
        Pragma_Ada_2005,
        Pragma_Ada_12,
        Pragma_Ada_2012,
!       Pragma_Ada_2022,
!       --  Note that there is no Pragma_Ada_22. Pragma_Ada_05/12 are for
        --  compatibility reasons only; the full year names are preferred.
        Pragma_Aggregate_Individually_Assign,
        Pragma_Allow_Integer_Address,
*************** package Snames is
*** 1755,1762 ****
        Pragma_Check_Policy,
        Pragma_Compile_Time_Error,
        Pragma_Compile_Time_Warning,
-       Pragma_Compiler_Unit,
-       Pragma_Compiler_Unit_Warning,
        Pragma_Component_Alignment,
        Pragma_Convention_Identifier,
        Pragma_Debug_Policy,
--- 1739,1744 ----
*************** package Snames is
*** 1771,1776 ****
--- 1753,1759 ----
        Pragma_Extensions_Allowed,
        Pragma_External_Name_Casing,
        Pragma_Favor_Top_Level,
+       Pragma_GNAT_Annotate,
        Pragma_Ignore_Pragma,
        Pragma_Implicit_Packing,
        Pragma_Initialize_Scalars,
*************** package Snames is
*** 1810,1816 ****
        Pragma_Suppress_Exception_Locations,
        Pragma_Task_Dispatching_Policy,
        Pragma_Unevaluated_Use_Of_Old,
-       Pragma_Universal_Data,
        Pragma_Unsuppress,
        Pragma_Use_VADS_Size,
        Pragma_Validity_Checks,
--- 1793,1798 ----
*************** package Snames is
*** 1846,1851 ****
--- 1828,1834 ----
        Pragma_CPP_Constructor,
        Pragma_CPP_Virtual,
        Pragma_CPP_Vtable,
+       Pragma_CUDA_Device,
        Pragma_CUDA_Execute,
        Pragma_CUDA_Global,
        Pragma_Deadline_Floor,
*************** package Snames is
*** 1861,1867 ****
        Pragma_Export_Function,
        Pragma_Export_Object,
        Pragma_Export_Procedure,
-       Pragma_Export_Value,
        Pragma_Export_Valued_Procedure,
        Pragma_Extensions_Visible,
        Pragma_External,
--- 1844,1849 ----
*************** package Snames is
*** 1925,1931 ****
        Pragma_Precondition,
        Pragma_Predicate,
        Pragma_Predicate_Failure,
-       Pragma_Preelaborable_Initialization,
        Pragma_Preelaborate,
        Pragma_Pre_Class,
        Pragma_Provide_Shift_Operators,
--- 1907,1912 ----
*************** package Snames is
*** 1978,1984 ****
  
        --  The following pragmas are on their own, out of order, because of the
        --  special processing required to deal with the fact that their names
!       --  match existing attribute names.
  
        Pragma_CPU,
        Pragma_Default_Scalar_Storage_Order,
--- 1959,1967 ----
  
        --  The following pragmas are on their own, out of order, because of the
        --  special processing required to deal with the fact that their names
!       --  match existing attribute names. Note that when a pragma is added in
!       --  this section, functions Get_Pragma_Id and Is_Pragma_Name must be
!       --  updated to account for the new pragma.
  
        Pragma_CPU,
        Pragma_Default_Scalar_Storage_Order,
*************** package Snames is
*** 1987,1992 ****
--- 1970,1976 ----
        Pragma_Interface,
        Pragma_Interrupt_Priority,
        Pragma_Lock_Free,
+       Pragma_Preelaborable_Initialization,
        Pragma_Priority,
        Pragma_Secondary_Stack_Size,
        Pragma_Storage_Size,
diff -Nrcpad gcc-11.3.0/gcc/ada/socket.c gcc-12.1.0/gcc/ada/socket.c
*** gcc-11.3.0/gcc/ada/socket.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/socket.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 2003-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *          Copyright (C) 2003-2022, 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- *
*************** __gnat_gethostbyaddr (const char *addr,
*** 314,319 ****
--- 314,320 ----
    ret->h_addrtype  = AF_INET;
    ret->h_length    = 4;
    ret->h_addr_list = &vxw_h_addr_list;
+   return 0;
  }
  
  int
*************** __gnat_inet_pton (int af, const char *sr
*** 587,592 ****
--- 588,596 ----
      *(in_addr_t *)dst = addr;
    }
    return rc;
+ 
+ #else
+   return -1;
  #endif
  }
  #endif
diff -Nrcpad gcc-11.3.0/gcc/ada/spark_xrefs.adb gcc-12.1.0/gcc/ada/spark_xrefs.adb
*** gcc-11.3.0/gcc/ada/spark_xrefs.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/spark_xrefs.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/spark_xrefs.ads gcc-12.1.0/gcc/ada/spark_xrefs.ads
*** gcc-11.3.0/gcc/ada/spark_xrefs.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/spark_xrefs.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2011-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/sprint.adb gcc-12.1.0/gcc/ada/sprint.adb
*** gcc-11.3.0/gcc/ada/sprint.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sprint.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,51 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Csets;    use Csets;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Output;   use Output;
! with Rtsfind;  use Rtsfind;
! with Sem_Eval; use Sem_Eval;
! with Sem_Util; use Sem_Util;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Sinput.D; use Sinput.D;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Uintp;    use Uintp;
! with Uname;    use Uname;
! with Urealp;   use Urealp;
  
  package body Sprint is
     Current_Source_File : Source_File_Index;
--- 23,55 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;        use Aspects;
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Csets;          use Csets;
! with Debug;          use Debug;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Lib;            use Lib;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Output;         use Output;
! with Rtsfind;        use Rtsfind;
! with Sem_Eval;       use Sem_Eval;
! with Sem_Util;       use Sem_Util;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Sinput.D;       use Sinput.D;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Uintp;          use Uintp;
! with Uname;          use Uname;
! with Urealp;         use Urealp;
  
  package body Sprint is
     Current_Source_File : Source_File_Index;
*************** package body Sprint is
*** 305,311 ****
     procedure Write_Param_Specs (N : Node_Id);
     --  Output parameter specifications for node N (which is a subprogram, or
     --  entry or entry family or access-subprogram-definition, all of which
!    --  have a Parameter_Specificatioons field).
  
     procedure Write_Rewrite_Str (S : String);
     --  Writes out a string (typically containing <<< or >>>}) for a node
--- 309,315 ----
     procedure Write_Param_Specs (N : Node_Id);
     --  Output parameter specifications for node N (which is a subprogram, or
     --  entry or entry family or access-subprogram-definition, all of which
!    --  have a Parameter_Specifications field).
  
     procedure Write_Rewrite_Str (S : String);
     --  Writes out a string (typically containing <<< or >>>}) for a node
*************** package body Sprint is
*** 584,590 ****
                               Print_Generated_Code or
                               Debug_Generated_Code;
        Dump_Original_Only  := Debug_Flag_O;
!       Dump_Freeze_Null    := Debug_Flag_S or Debug_Flag_G;
  
        --  Note that we turn off the tree dump flags immediately, before
        --  starting the dump. This avoids generating two copies of the dump
--- 588,594 ----
                               Print_Generated_Code or
                               Debug_Generated_Code;
        Dump_Original_Only  := Debug_Flag_O;
!       Dump_Freeze_Null    := Debug_Flag_S or Dump_Generated_Only;
  
        --  Note that we turn off the tree dump flags immediately, before
        --  starting the dump. This avoids generating two copies of the dump
*************** package body Sprint is
*** 669,674 ****
--- 673,683 ----
              end if;
           end loop;
        end if;
+ 
+       --  See above for the rationale, but we cannot do it earlier for them
+ 
+       Print_Generated_Code := False;
+       Debug_Generated_Code := False;
     end Source_Dump;
  
     ---------------------
*************** package body Sprint is
*** 1061,1076 ****
                 if Present (Expressions (Node)) then
                    Sprint_Comma_List (Expressions (Node));
  
!                   if Present (Component_Associations (Node))
!                     and then not Is_Empty_List (Component_Associations (Node))
!                   then
                       Write_Str (", ");
                    end if;
                 end if;
  
!                if Present (Component_Associations (Node))
!                  and then not Is_Empty_List (Component_Associations (Node))
!                then
                    Indent_Begin;
  
                    declare
--- 1070,1081 ----
                 if Present (Expressions (Node)) then
                    Sprint_Comma_List (Expressions (Node));
  
!                   if not Is_Empty_List (Component_Associations (Node)) then
                       Write_Str (", ");
                    end if;
                 end if;
  
!                if not Is_Empty_List (Component_Associations (Node)) then
                    Indent_Begin;
  
                    declare
*************** package body Sprint is
*** 1116,1121 ****
--- 1121,1132 ----
                 Write_Char (']');
              end if;
  
+             if Present (Procedure_To_Call (Node)) then
+                Write_Str_With_Col_Check ("[procedure_to_call = ");
+                Sprint_Node (Procedure_To_Call (Node));
+                Write_Char (']');
+             end if;
+ 
           when N_And_Then =>
              Sprint_Left_Opnd (Node);
              Write_Str_Sloc (" and then ");
*************** package body Sprint is
*** 1124,1130 ****
           --  Note: the following code for N_Aspect_Specification is not
           --  normally used, since we deal with aspects as part of a
           --  declaration, but it is here in case we deliberately try
!          --  to print an N_Aspect_Speficiation node (e.g. from GDB).
  
           when N_Aspect_Specification =>
              Sprint_Node (Identifier (Node));
--- 1135,1141 ----
           --  Note: the following code for N_Aspect_Specification is not
           --  normally used, since we deal with aspects as part of a
           --  declaration, but it is here in case we deliberately try
!          --  to print an N_Aspect_Specification node (e.g. from GDB).
  
           when N_Aspect_Specification =>
              Sprint_Node (Identifier (Node));
*************** package body Sprint is
*** 1785,1795 ****
              if Present (Handled_Statement_Sequence (Node)) then
                 Write_Str_With_Col_Check (" do");
                 Sprint_Node (Handled_Statement_Sequence (Node));
!                Write_Indent_Str ("end return;");
!             else
!                Write_Indent_Str (";");
              end if;
  
           when N_Delta_Aggregate =>
              Write_Str_With_Col_Check_Sloc ("(");
              Sprint_Node (Expression (Node));
--- 1796,1818 ----
              if Present (Handled_Statement_Sequence (Node)) then
                 Write_Str_With_Col_Check (" do");
                 Sprint_Node (Handled_Statement_Sequence (Node));
!                Write_Indent_Str ("end return");
!             end if;
! 
!             if Present (Storage_Pool (Node)) then
!                Write_Str_With_Col_Check ("[storage_pool = ");
!                Sprint_Node (Storage_Pool (Node));
!                Write_Char (']');
!             end if;
! 
!             if Present (Procedure_To_Call (Node)) then
!                Write_Str_With_Col_Check ("[procedure_to_call = ");
!                Sprint_Node (Procedure_To_Call (Node));
!                Write_Char (']');
              end if;
  
+             Write_Char (';');
+ 
           when N_Delta_Aggregate =>
              Write_Str_With_Col_Check_Sloc ("(");
              Sprint_Node (Expression (Node));
*************** package body Sprint is
*** 1973,1978 ****
--- 1996,2014 ----
           when N_Free_Statement =>
              Write_Indent_Str_Sloc ("free ");
              Sprint_Node (Expression (Node));
+ 
+             if Present (Storage_Pool (Node)) then
+                Write_Str_With_Col_Check ("[storage_pool = ");
+                Sprint_Node (Storage_Pool (Node));
+                Write_Char (']');
+             end if;
+ 
+             if Present (Procedure_To_Call (Node)) then
+                Write_Str_With_Col_Check ("[procedure_to_call = ");
+                Sprint_Node (Procedure_To_Call (Node));
+                Write_Char (']');
+             end if;
+ 
              Write_Char (';');
  
           when N_Freeze_Entity =>
*************** package body Sprint is
*** 2075,2081 ****
              Sprint_Node (Name (Node));
              Write_Char (';');
  
!          when N_Generic_Package_Declaration =>
              Extra_Blank_Line;
              Write_Indent_Str_Sloc ("generic ");
              Sprint_Indented_List (Generic_Formal_Declarations (Node));
--- 2111,2117 ----
              Sprint_Node (Name (Node));
              Write_Char (';');
  
!          when N_Generic_Declaration =>
              Extra_Blank_Line;
              Write_Indent_Str_Sloc ("generic ");
              Sprint_Indented_List (Generic_Formal_Declarations (Node));
*************** package body Sprint is
*** 2097,2110 ****
              Sprint_Node (Name (Node));
              Write_Char (';');
  
-          when N_Generic_Subprogram_Declaration =>
-             Extra_Blank_Line;
-             Write_Indent_Str_Sloc ("generic ");
-             Sprint_Indented_List (Generic_Formal_Declarations (Node));
-             Write_Indent;
-             Sprint_Node (Specification (Node));
-             Write_Char (';');
- 
           when N_Goto_Statement =>
              Write_Indent_Str_Sloc ("goto ");
              Sprint_Node (Name (Node));
--- 2133,2138 ----
*************** package body Sprint is
*** 2114,2119 ****
--- 2142,2154 ----
                 Write_Indent;
              end if;
  
+          when N_Goto_When_Statement =>
+             Write_Indent_Str_Sloc ("goto ");
+             Sprint_Node (Name (Node));
+             Write_Str (" when ");
+             Sprint_Node (Condition (Node));
+             Write_Char (';');
+ 
           when N_Handled_Sequence_Of_Statements =>
              Set_Debug_Sloc;
              Sprint_Indented_List (Statements (Node));
*************** package body Sprint is
*** 2489,2495 ****
  
              --  AI12-0275: Object_Renaming_Declaration without explicit subtype
  
!             elsif Ada_Version >= Ada_2020 then
                 null;
  
              else
--- 2524,2530 ----
  
              --  AI12-0275: Object_Renaming_Declaration without explicit subtype
  
!             elsif Ada_Version >= Ada_2022 then
                 null;
  
              else
*************** package body Sprint is
*** 3065,3074 ****
  
              Write_Char (';');
  
           when N_Range =>
              Sprint_Node (Low_Bound (Node));
              Write_Str_Sloc (" .. ");
!             Sprint_Node (High_Bound (Node));
              Update_Itype (Node);
  
           when N_Range_Constraint =>
--- 3100,3128 ----
  
              Write_Char (';');
  
+          when N_Raise_When_Statement =>
+             Write_Indent_Str_Sloc ("raise ");
+             Sprint_Node (Name (Node));
+             Write_Str (" when ");
+             Sprint_Node (Condition (Node));
+ 
+             if Present (Expression (Node)) then
+                Write_Str_With_Col_Check_Sloc (" with ");
+                Sprint_Node (Expression (Node));
+             end if;
+ 
+             Write_Char (';');
+ 
           when N_Range =>
              Sprint_Node (Low_Bound (Node));
              Write_Str_Sloc (" .. ");
!             if Present (Etype (Node))
!               and then Is_Fixed_Lower_Bound_Index_Subtype (Etype (Node))
!             then
!                Write_Str ("<>");
!             else
!                Sprint_Node (High_Bound (Node));
!             end if;
              Update_Itype (Node);
  
           when N_Range_Constraint =>
*************** package body Sprint is
*** 3132,3141 ****
  
              Write_Char (';');
  
!          --  Don't we want to print more detail???
! 
!          --  Doc of this extended syntax belongs in sinfo.ads and/or
!          --  sprint.ads ???
  
           when N_SCIL_Dispatch_Table_Tag_Init =>
              Write_Indent_Str ("[N_SCIL_Dispatch_Table_Tag_Init]");
--- 3186,3197 ----
  
              Write_Char (';');
  
!          when N_Return_When_Statement =>
!             Write_Indent_Str_Sloc ("return ");
!             Sprint_Node (Expression (Node));
!             Write_Str (" when ");
!             Sprint_Node (Condition (Node));
!             Write_Char (';');
  
           when N_SCIL_Dispatch_Table_Tag_Init =>
              Write_Indent_Str ("[N_SCIL_Dispatch_Table_Tag_Init]");
*************** package body Sprint is
*** 3150,3160 ****
              if Present (Expression (Node)) then
                 Write_Indent_Str_Sloc ("return ");
                 Sprint_Node (Expression (Node));
-                Write_Char (';');
              else
!                Write_Indent_Str_Sloc ("return;");
              end if;
  
           when N_Selective_Accept =>
              Write_Indent_Str_Sloc ("select");
  
--- 3206,3229 ----
              if Present (Expression (Node)) then
                 Write_Indent_Str_Sloc ("return ");
                 Sprint_Node (Expression (Node));
              else
!                Write_Indent_Str_Sloc ("return");
!             end if;
! 
!             if Present (Storage_Pool (Node)) then
!                Write_Str_With_Col_Check ("[storage_pool = ");
!                Sprint_Node (Storage_Pool (Node));
!                Write_Char (']');
!             end if;
! 
!             if Present (Procedure_To_Call (Node)) then
!                Write_Str_With_Col_Check ("[procedure_to_call = ");
!                Sprint_Node (Procedure_To_Call (Node));
!                Write_Char (']');
              end if;
  
+             Write_Char (';');
+ 
           when N_Selective_Accept =>
              Write_Indent_Str_Sloc ("select");
  
*************** package body Sprint is
*** 4194,4200 ****
           --  Itype to be printed
  
           declare
!             B : constant Node_Id := Etype (Typ);
              P : constant Node_Id := Parent (Typ);
              S : constant Saved_Output_Buffer := Save_Output_Buffer;
              --  Save current output buffer
--- 4263,4269 ----
           --  Itype to be printed
  
           declare
!             B : constant Entity_Id := Etype (Typ);
              P : constant Node_Id := Parent (Typ);
              S : constant Saved_Output_Buffer := Save_Output_Buffer;
              --  Save current output buffer
*************** package body Sprint is
*** 4374,4380 ****
                    when E_Modular_Integer_Type =>
                       Write_Header;
                       Write_Str ("mod ");
!                      Write_Uint_With_Col_Check (Modulus (Typ), Auto);
  
                    --  Floating-point types and subtypes
  
--- 4443,4454 ----
                    when E_Modular_Integer_Type =>
                       Write_Header;
                       Write_Str ("mod ");
! 
!                      if No (Modulus (Typ)) then
!                         Write_Uint_With_Col_Check (Uint_0, Auto);
!                      else
!                         Write_Uint_With_Col_Check (Modulus (Typ), Auto);
!                      end if;
  
                    --  Floating-point types and subtypes
  
*************** package body Sprint is
*** 4578,4584 ****
                          Write_Str (");");
                       end;
  
!                   --  For all other Itypes, print ??? (fill in later)
  
                    when others =>
                       Write_Header (True);
--- 4652,4659 ----
                          Write_Str (");");
                       end;
  
!                   --  For all other Itypes, print a triple ? (fill in later
!                   --  if needed).
  
                    when others =>
                       Write_Header (True);
*************** package body Sprint is
*** 4731,4737 ****
        --  Set true if we output at least one parameter
  
     begin
!       --  Write out explicit specs from Parameter_Speficiations list
  
        if Specs_Present then
           Write_Str_With_Col_Check (" (");
--- 4806,4812 ----
        --  Set true if we output at least one parameter
  
     begin
!       --  Write out explicit specs from Parameter_Specifications list
  
        if Specs_Present then
           Write_Str_With_Col_Check (" (");
*************** package body Sprint is
*** 4841,4847 ****
           Write_Int (Int (L));
           Write_Str (": ");
  
!          while Src (Loc) not in Line_Terminator loop
              Write_Char (Src (Loc));
              Loc := Loc + 1;
           end loop;
--- 4916,4925 ----
           Write_Int (Int (L));
           Write_Str (": ");
  
!          --  We need to check for EOF here, in case the last line of the source
!          --  file does not have a Line_Terminator.
! 
!          while Src (Loc) not in Line_Terminator | EOF loop
              Write_Char (Src (Loc));
              Loc := Loc + 1;
           end loop;
diff -Nrcpad gcc-11.3.0/gcc/ada/sprint.ads gcc-12.1.0/gcc/ada/sprint.ads
*** gcc-11.3.0/gcc/ada/sprint.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sprint.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Sprint is
*** 97,103 ****
     --    -dg  print source from tree, including only the generated code
     --    -do  print source from tree, including only the original code
     --    -df  modify the above to include all units, not just the main unit
!    --    -sz  print source from tree for package Standard
  
     procedure Sprint_Comma_List (List : List_Id);
     --  Prints the nodes in a list, with separating commas. If the list is empty
--- 97,103 ----
     --    -dg  print source from tree, including only the generated code
     --    -do  print source from tree, including only the original code
     --    -df  modify the above to include all units, not just the main unit
!    --    -dz  print source from tree for package Standard
  
     procedure Sprint_Comma_List (List : List_Id);
     --  Prints the nodes in a list, with separating commas. If the list is empty
diff -Nrcpad gcc-11.3.0/gcc/ada/stand.ads gcc-12.1.0/gcc/ada/stand.ads
*** gcc-11.3.0/gcc/ada/stand.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/stand.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Stand is
*** 335,346 ****
     --  This is a type used to represent the Etype of exceptions
  
     Standard_A_String : Entity_Id;
!    --  An access to String type used for building elements of tables
!    --  carrying the enumeration literal names.
  
     Standard_A_Char : Entity_Id;
!    --  Access to character, used as a component of the exception type to denote
!    --  a thin pointer component.
  
     Standard_Debug_Renaming_Type : Entity_Id;
     --  A zero-size subtype of Integer, used as the type of variables used to
--- 335,346 ----
     --  This is a type used to represent the Etype of exceptions
  
     Standard_A_String : Entity_Id;
!    --  An access to String type used for building elements of tables carrying
!    --  the enumeration literal names.
  
     Standard_A_Char : Entity_Id;
!    --  An access to character type, used as a component of the exception type
!    --  to denote a thin pointer component. Needed for non-GCC back-ends.
  
     Standard_Debug_Renaming_Type : Entity_Id;
     --  A zero-size subtype of Integer, used as the type of variables used to
*************** package Stand is
*** 375,383 ****
     --  them the type is still Any_Type, the node has no possible interpretation
     --  and an error can be emitted (and Any_Type will be propagated upwards).
  
-    Any_Access : Entity_Id;
-    --  Used to resolve the overloaded literal NULL
- 
     Any_Array : Entity_Id;
     --  Used to represent some unknown array type
  
--- 375,380 ----
*************** package Stand is
*** 451,456 ****
--- 448,456 ----
     --  universal integer and universal real, it is never used for runtime
     --  calculations).
  
+    Universal_Access : Entity_Id;
+    --  Entity for universal access type. It is only used for the literal null
+ 
     Standard_Integer_8   : Entity_Id;
     Standard_Integer_16  : Entity_Id;
     Standard_Integer_32  : Entity_Id;
diff -Nrcpad gcc-11.3.0/gcc/ada/stringt.adb gcc-12.1.0/gcc/ada/stringt.adb
*** gcc-11.3.0/gcc/ada/stringt.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/stringt.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/stringt.ads gcc-12.1.0/gcc/ada/stringt.ads
*** gcc-11.3.0/gcc/ada/stringt.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/stringt.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Stringt is
*** 56,62 ****
     --------------------------------------
  
     procedure Initialize;
!    --  Initializes the strings table for a new compilation.
  
     procedure Lock;
     --  Lock internal tables before calling back end
--- 56,62 ----
     --------------------------------------
  
     procedure Initialize;
!    --  Initializes the strings table for a new compilation
  
     procedure Lock;
     --  Lock internal tables before calling back end
diff -Nrcpad gcc-11.3.0/gcc/ada/stringt.h gcc-12.1.0/gcc/ada/stringt.h
*** gcc-11.3.0/gcc/ada/stringt.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/stringt.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 1992-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/strub.adb gcc-12.1.0/gcc/ada/strub.adb
*** gcc-11.3.0/gcc/ada/strub.adb	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/strub.adb	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,301 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                                S T R U B                                 --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Package containing utility procedures related to Stack Scrubbing
+ 
+ with Atree;          use Atree;
+ with Einfo;          use Einfo;
+ with Einfo.Entities; use Einfo.Entities;
+ with Errout;         use Errout;
+ with Namet;          use Namet;
+ with Nlists;         use Nlists;
+ with Sem_Eval;       use Sem_Eval;
+ with Sinfo;          use Sinfo;
+ with Sinfo.Nodes;    use Sinfo.Nodes;
+ with Sinfo.Utils;    use Sinfo.Utils;
+ with Snames;         use Snames;
+ with Stringt;        use Stringt;
+ 
+ package body Strub is
+    -----------------------
+    -- Local Subprograms --
+    -----------------------
+ 
+    function Find_Explicit_Strub_Pragma (Id : Entity_Id) return Node_Id;
+    --  Return a pragma Machine_Attribute (Id, "strub"[, "mode"]) node
+    --  if Id has one.
+ 
+    function Strub_Pragma_Arg (Item : Node_Id) return Node_Id is
+       (Get_Pragma_Arg
+          (Next (Next (First (Pragma_Argument_Associations (Item))))));
+    --  Return the pragma argument holding the strub mode associated
+    --  with Item, a subprogram, variable, constant, or type. Bear in
+    --  mind that strub pragmas with an explicit strub mode argument,
+    --  naming access-to-subprogram types, are applied to the
+    --  designated subprogram type.
+ 
+    function Strub_Pragma_Arg_To_String (Item : Node_Id) return String is
+       (To_String (Strval (Expr_Value_S (Item))));
+    --  Extract and return as a String the strub mode held in a node
+    --  returned by Strub_Pragma_Arg.
+ 
+    function Strub_Pragma_Mode
+      (Id   : Entity_Id;
+       Item : Node_Id) return Strub_Mode;
+    --  Return the strub mode associated with Item expressed in Id.
+    --  Strub_Pragma_P (Id) must hold.
+ 
+    ---------------------------
+    -- Check_Same_Strub_Mode --
+    ---------------------------
+ 
+    procedure Check_Same_Strub_Mode
+      (Dest, Src : Entity_Id;
+       Report    : Boolean := True)
+    is
+       Src_Strub_Mode  : constant Strub_Mode := Explicit_Strub_Mode (Src);
+       Dest_Strub_Mode : constant Strub_Mode := Explicit_Strub_Mode (Dest);
+ 
+    begin
+       if Dest_Strub_Mode = Src_Strub_Mode then
+          return;
+       end if;
+ 
+       --  Internal is not part of the interface, it's an *internal*
+       --  implementation detail, so consider it equivalent to unspecified here.
+       --  ??? -fstrub=relaxed|strict makes them interface-equivalent to
+       --  Callable or Disabled, respectively, but we don't look at that flag in
+       --  the front-end, and it seems undesirable for that flag to affect
+       --  whether specifications are conformant. Maybe there should be some
+       --  means to specify Callable or Disabled along with Internal?
+ 
+       if Dest_Strub_Mode in Unspecified | Internal
+         and then Src_Strub_Mode in Unspecified | Internal
+       then
+          return;
+       end if;
+ 
+       if not Report then
+          return;
+       end if;
+ 
+       if Src_Strub_Mode /= Unspecified then
+          Error_Msg_Sloc := Sloc (Find_Explicit_Strub_Pragma (Src));
+       else
+          Error_Msg_Sloc := Sloc (Src);
+       end if;
+       Error_Msg_Node_2 := Src;
+       Error_Msg_NE ("& requires the same `strub` mode as &#",
+                     (if Dest_Strub_Mode /= Unspecified
+                        then Find_Explicit_Strub_Pragma (Dest)
+                        else Dest),
+                     Dest);
+    end Check_Same_Strub_Mode;
+ 
+    ----------------------------
+    -- Compatible_Strub_Modes --
+    ----------------------------
+ 
+    function Compatible_Strub_Modes
+      (Dest, Src : Entity_Id) return Boolean
+    is
+       Src_Strub_Mode : constant Strub_Mode := Explicit_Strub_Mode (Src);
+       Dest_Strub_Mode : constant Strub_Mode := Explicit_Strub_Mode (Dest);
+ 
+    begin
+       return Src_Strub_Mode = Dest_Strub_Mode
+         or else At_Calls not in Src_Strub_Mode | Dest_Strub_Mode;
+    end Compatible_Strub_Modes;
+ 
+    ---------------------
+    -- Copy_Strub_Mode --
+    ---------------------
+ 
+    procedure Copy_Strub_Mode (Dest, Src : Entity_Id) is
+       Strub : Node_Id := Find_Explicit_Strub_Pragma (Src);
+       Src_Strub_Mode : constant Strub_Mode := Strub_Pragma_Mode (Src, Strub);
+ 
+    begin
+       pragma Assert (Explicit_Strub_Mode (Dest) = Unspecified);
+ 
+       --  Refrain from copying Internal to subprogram types.
+       --  It affects code generation for the subprogram,
+       --  but it has no effect on its type or interface.
+ 
+       if Src_Strub_Mode = Unspecified
+         or else (Ekind (Dest) = E_Subprogram_Type
+                    and then Src_Strub_Mode = Internal)
+       then
+          return;
+       end if;
+ 
+       Strub := New_Copy (Strub);
+       Set_Next_Rep_Item (Strub, First_Rep_Item (Dest));
+       Set_First_Rep_Item (Dest, Strub);
+       Set_Has_Gigi_Rep_Item (Dest);
+    end Copy_Strub_Mode;
+ 
+    -------------------------
+    -- Explicit_Strub_Mode --
+    -------------------------
+ 
+    function Explicit_Strub_Mode (Id : Entity_Id) return Strub_Mode is
+       Item : constant Node_Id := Find_Explicit_Strub_Pragma (Id);
+ 
+    begin
+       return Strub_Pragma_Mode (Id, Item);
+    end Explicit_Strub_Mode;
+ 
+    --------------------------------
+    -- Find_Explicit_Strub_Pragma --
+    --------------------------------
+ 
+    function Find_Explicit_Strub_Pragma (Id : Entity_Id) return Node_Id is
+       Item : Node_Id;
+ 
+    begin
+       if not Has_Gigi_Rep_Item (Id) then
+          return Empty;
+       end if;
+ 
+       Item := First_Rep_Item (Id);
+       while Present (Item) loop
+          if Strub_Pragma_P (Item) then
+             return Item;
+          end if;
+          Item := Next_Rep_Item (Item);
+       end loop;
+ 
+       return Empty;
+    end Find_Explicit_Strub_Pragma;
+ 
+    -----------------------
+    -- Strub_Pragma_Mode --
+    -----------------------
+ 
+    function Strub_Pragma_Mode
+      (Id   : Entity_Id;
+       Item : Node_Id) return Strub_Mode
+    is
+       Arg : Node_Id := Empty;
+ 
+    begin
+       --  ??? Enumeration literals, despite being conceptually functions, have
+       --  neither bodies nor stack frames, and it's not clear whether it would
+       --  make more sense to treat them as subprograms or as constants, but
+       --  they can be renamed as functions.  Should we require all literals of
+       --  a type to have the same strub mode?  Rule out their annotation?
+ 
+       if Ekind (Id) in E_Subprogram_Type
+                      | Overloadable_Kind
+                      | Generic_Subprogram_Kind
+       then
+          if Item = Empty then
+             return Unspecified;
+          end if;
+ 
+          Arg := Strub_Pragma_Arg (Item);
+          if Arg = Empty then
+             return At_Calls;
+          end if;
+ 
+          declare
+             Str : constant String := Strub_Pragma_Arg_To_String (Arg);
+          begin
+             if Str'Length /= 8 then
+                return Unspecified;
+             end if;
+ 
+             case Str (Str'First) is
+                when 'a' =>
+                   if Str = "at-calls" then
+                      return At_Calls;
+                   end if;
+ 
+                when 'i' =>
+                   if Str = "internal" then
+                      return Internal;
+                   end if;
+ 
+                when 'c' =>
+                   if Str = "callable" then
+                      return Callable;
+                   end if;
+ 
+                when 'd' =>
+                   if Str = "disabled" then
+                      return Disabled;
+                   end if;
+ 
+                when others =>
+                   null;
+             end case;
+             return Unspecified;
+          end;
+ 
+       --  Access-to-subprogram types and variables can be treated just like
+       --  other access types, because the pragma logic has already promoted to
+       --  subprogram types any annotations applicable to them.
+ 
+       elsif Ekind (Id) in Type_Kind -- except E_Subprogram_Type, covered above
+                         | Scalar_Kind
+                         | Object_Kind
+                         | Named_Kind
+       then
+          if Item = Empty then
+             return Unspecified;
+          end if;
+ 
+          Arg := Strub_Pragma_Arg (Item);
+          if Arg /= Empty then
+             --  A strub parameter is not applicable to variables,
+             --  and will be ignored.
+ 
+             return Unspecified;
+          end if;
+ 
+          return Enabled;
+ 
+       else
+          pragma Assert (Item = Empty);
+          return Not_Applicable;
+       end if;
+    end Strub_Pragma_Mode;
+ 
+    --------------------
+    -- Strub_Pragma_P --
+    --------------------
+ 
+    function Strub_Pragma_P
+      (Item : Node_Id) return Boolean is
+       (Nkind (Item) = N_Pragma
+          and then Pragma_Name (Item) = Name_Machine_Attribute
+          and then
+            Strub_Pragma_Arg_To_String
+              (Get_Pragma_Arg
+                 (Next (First (Pragma_Argument_Associations (Item)))))
+              = "strub");
+ 
+ end Strub;
diff -Nrcpad gcc-11.3.0/gcc/ada/strub.ads gcc-12.1.0/gcc/ada/strub.ads
*** gcc-11.3.0/gcc/ada/strub.ads	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/strub.ads	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,115 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --                                S T R U B                                 --
+ --                                                                          --
+ --                                 S p e c                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2022, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
+ -- for  more details.  You should have  received  a copy of the GNU General --
+ -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+ -- http://www.gnu.org/licenses for a complete copy of the license.          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  Package containing utility procedures related to Stack Scrubbing
+ 
+ with Types; use Types;
+ 
+ package Strub is
+    type Strub_Mode is
+      (Disabled,        --  Subprogram cannot be called from strub contexts
+       At_Calls,        --  Subprogram strubbed by caller
+       Internal,        --  Subprogram strubbed by wrapper
+       Callable,        --  Subprogram safe to call despite no strub
+       Unspecified,     --  Subprogram or data without strub annotation
+       Enabled,         --  Data (variable or constant) that enables strub
+       Not_Applicable); --  Entities that are not strub-capable
+    --  This is the type that expresses decoded strub annotations
+ 
+    --  We compare strub modes in the following circumstances:
+ 
+    --  * subprogram definition vs specification
+    --  * overriding vs overridden dispatch subprograms
+    --  * implementation vs interface dispatch subprogram
+    --  * renaming vs renamed subprogram
+    --  * type resolution
+    --  * explicit conversions
+ 
+    --  Explicit conversions can convert between strub modes other than
+    --  at-calls (see Compatible_Strub_Modes), but for the other cases
+    --  above, we insist on identity of the strub modes (see
+    --  Check_Same_Strub_Mode). Anything else would be
+    --  troublesome.
+ 
+    --  E.g., overriding a callable subprogram with a strub-disabled
+    --  implementation would enable a subprogram that's unsafe to call
+    --  in strub contexts to be called through a dispatching
+    --  interface. An explicitly strub-disabled subprogram shall not be
+    --  called from strub contexts, and a callable overriding
+    --  subprogram would still seem not-callable, so accepting
+    --  different modes would be surprising.
+ 
+    --  We could relax the requirement for overriders from equality to
+    --  compatibility, with the understanding that the dispatching ABI
+    --  is what prevails. For renaming, however, if we don't require
+    --  equality, it would have to encompass an implicit conversion.
+ 
+    procedure Check_Same_Strub_Mode
+      (Dest, Src : Entity_Id;
+       Report    : Boolean := True);
+    --  Check whether Dest and Src are subprograms or subprogram types
+    --  annotated (or not) with the same strub mode. If Report is
+    --  requested, and the strub modes are not equivalent, an error
+    --  message is issued. Unspecified and Internal are considered
+    --  equivalent, because Internal is an internal implementation
+    --  detail. Unspecified decays to Disabled or Callable depending on
+    --  -fstrub=(strict|relaxed), but this procedure does not take this
+    --  decay into account, which avoids turning strub-equivalent
+    --  declarations into incompatible ones at command-line changes.
+ 
+    function Compatible_Strub_Modes
+      (Dest, Src : Entity_Id) return Boolean;
+    --  Return True if Dest and Src are subprograms or subprogram types
+    --  annotated (or not) with ABI-compatible strub modes. At-calls is
+    --  incompatible to other strub modes, because the back end
+    --  internally modifies the signature of such subprograms, adding
+    --  hidden parameters. Calling a subprogram through an
+    --  access-to-subprogram object converted between strub-at-calls
+    --  and other strub modes should be deemed equivalent to
+    --  dereferencing an uninitialized access-to-data object, though
+    --  one-way conversions might seem to work in some circumstances.
+    --
+    --  Unspecified, Disabled, Internal and Callable
+    --  (access-to-)subprograms, on the other hand, can be safely but
+    --  explicitly converted to each other, because these strub modes
+    --  do not require signature changes; so it is possible to alter
+    --  the caller-side stack scrubbing semantics of the call (e.g. to
+    --  call a subprogram that isn't strub-callable from within a strub
+    --  context, or to prevent it from being called through an access
+    --  object) without any incompatibilities.
+ 
+    procedure Copy_Strub_Mode (Dest, Src : Entity_Id);
+    --  Copy the strub mode from Src to Dest, subprograms or subprogram
+    --  types. Dest is required to not have a strub mode already set.
+ 
+    function Explicit_Strub_Mode (Id : Entity_Id) return Strub_Mode;
+    --  Return the strub mode associated with Id, that should refer to
+    --  a subprogram, a data object, or a type.
+ 
+    function Strub_Pragma_P (Item : Node_Id) return Boolean;
+    --  Return True iff Item is a strub annotation, specifically, one
+    --  introduced by pragma Machine_Attribute (Entity, "strub"[, "mode"]).
+ 
+ end Strub;
diff -Nrcpad gcc-11.3.0/gcc/ada/style.adb gcc-12.1.0/gcc/ada/style.adb
*** gcc-11.3.0/gcc/ada/style.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/style.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,40 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Csets;    use Csets;
! with Einfo;    use Einfo;
! with Errout;   use Errout;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Opt;      use Opt;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Stand;    use Stand;
! with Stylesw;  use Stylesw;
  
  package body Style is
  
--- 23,44 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Csets;          use Csets;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Errout;         use Errout;
! with Namet;          use Namet;
! with Nlists;         use Nlists;
! with Opt;            use Opt;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
! with Stand;          use Stand;
! with Stylesw;        use Stylesw;
  
  package body Style is
  
*************** package body Style is
*** 132,179 ****
              Tref := Source_Text (Get_Source_File_Index (Sref));
              Tdef := Source_Text (Get_Source_File_Index (Sdef));
  
!             --  Ignore operator name case completely. This also catches the
!             --  case of where one is an operator and the other is not. This
!             --  is a phenomenon from rewriting of operators as functions,
!             --  and is to be ignored.
  
              if Tref (Sref) = '"' or else Tdef (Sdef) = '"' then
                 return;
  
              else
!                while Tref (Sref) = Tdef (Sdef) loop
  
!                   --  If end of identifier, all done
  
                    if not Identifier_Char (Tref (Sref)) then
                       return;
- 
-                   --  Otherwise loop continues
- 
-                   else
-                      Sref := Sref + 1;
-                      Sdef := Sdef + 1;
                    end if;
-                end loop;
  
!                --  Fall through loop when mismatch between identifiers
!                --  If either identifier is not terminated, error.
  
!                if Identifier_Char (Tref (Sref))
!                     or else
!                   Identifier_Char (Tdef (Sdef))
!                then
!                   Error_Msg_Node_1 := Def;
!                   Error_Msg_Sloc := Sloc (Def);
!                   Error_Msg -- CODEFIX
!                     ("(style) bad casing of & declared#", Sref, Ref);
!                   return;
  
!                --  Else end of identifiers, and they match
  
!                else
!                   return;
!                end if;
              end if;
           end if;
  
--- 136,177 ----
              Tref := Source_Text (Get_Source_File_Index (Sref));
              Tdef := Source_Text (Get_Source_File_Index (Sdef));
  
!             --  Ignore case of operator names. This also catches the case
!             --  where one is an operator and the other is not. This is a
!             --  phenomenon from rewriting of operators as functions, and is
!             --  to be ignored.
  
              if Tref (Sref) = '"' or else Tdef (Sdef) = '"' then
                 return;
  
              else
!                loop
!                   --  If end of identifiers, all done. Note that they are the
!                   --  same length.
  
!                   pragma Assert
!                     (Identifier_Char (Tref (Sref)) =
!                      Identifier_Char (Tdef (Sdef)));
  
                    if not Identifier_Char (Tref (Sref)) then
                       return;
                    end if;
  
!                   --  Case mismatch
  
!                   if Tref (Sref) /= Tdef (Sdef) then
!                      Error_Msg_Node_1 := Def;
!                      Error_Msg_Sloc := Sloc (Def);
!                      Error_Msg -- CODEFIX
!                        ("(style) bad casing of & declared#", Sref, Ref);
!                      return;
!                   end if;
  
!                   Sref := Sref + 1;
!                   Sdef := Sdef + 1;
!                end loop;
  
!                pragma Assert (False);
              end if;
           end if;
  
*************** package body Style is
*** 267,277 ****
--- 265,279 ----
        --  indicators were introduced in Ada 2005. We apply Comes_From_Source
        --  to Original_Node to catch the case of a procedure body declared with
        --  "is null" that has been rewritten as a normal empty body.
+       --  We do not emit a warning on an inherited operation that comes from
+       --  a type derivation.
  
        if Style_Check_Missing_Overriding
          and then (Comes_From_Source (Original_Node (N))
                     or else Is_Generic_Instance (E))
          and then Ada_Version_Explicit >= Ada_2005
+         and then Present (Parent (E))
+         and then Nkind (Parent (E)) /= N_Full_Type_Declaration
        then
           --  If the subprogram is an instantiation,  its declaration appears
           --  within a wrapper package that precedes the instance node. Place
diff -Nrcpad gcc-11.3.0/gcc/ada/style.ads gcc-12.1.0/gcc/ada/style.ads
*** gcc-11.3.0/gcc/ada/style.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/style.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/styleg.adb gcc-12.1.0/gcc/ada/styleg.adb
*** gcc-11.3.0/gcc/ada/styleg.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/styleg.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 27,42 ****
  --  checking rules. For documentation of these rules, see comments on the
  --  individual procedures.
  
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Csets;    use Csets;
! with Einfo;    use Einfo;
! with Err_Vars; use Err_Vars;
! with Opt;      use Opt;
! with Scans;    use Scans;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
! with Stylesw;  use Stylesw;
  
  package body Styleg is
  
--- 27,44 ----
  --  checking rules. For documentation of these rules, see comments on the
  --  individual procedures.
  
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Csets;          use Csets;
! with Einfo;          use Einfo;
! with Einfo.Utils;    use Einfo.Utils;
! with Err_Vars;       use Err_Vars;
! with Opt;            use Opt;
! with Scans;          use Scans;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinput;         use Sinput;
! with Stylesw;        use Stylesw;
  
  package body Styleg is
  
*************** package body Styleg is
*** 82,88 ****
     function Is_White_Space (C : Character) return Boolean;
     pragma Inline (Is_White_Space);
     --  Returns True for space or HT, False otherwise
-    --  What about VT and FF, should they return True ???
  
     procedure Require_Following_Space;
     pragma Inline (Require_Following_Space);
--- 84,89 ----
*************** package body Styleg is
*** 98,109 ****
     -- Check_Abs_Or_Not --
     ----------------------
  
!    --  In check token mode (-gnatyt), ABS/NOT must be followed by a space
  
     procedure Check_Abs_Not is
     begin
        if Style_Check_Tokens then
!          if Source (Scan_Ptr) > ' ' then -- ???
              Error_Space_Required (Scan_Ptr);
           end if;
        end if;
--- 99,111 ----
     -- Check_Abs_Or_Not --
     ----------------------
  
!    --  In check token mode (-gnatyt), ABS/NOT must be followed by a space or
!    --  a line feed.
  
     procedure Check_Abs_Not is
     begin
        if Style_Check_Tokens then
!          if Source (Scan_Ptr) not in ' ' | ASCII.CR | ASCII.LF then
              Error_Space_Required (Scan_Ptr);
           end if;
        end if;
*************** package body Styleg is
*** 113,119 ****
     -- Check_Apostrophe --
     ----------------------
  
!    --  Do not allow space before or after apostrophe -- OR AFTER???
  
     procedure Check_Apostrophe is
     begin
--- 115,121 ----
     -- Check_Apostrophe --
     ----------------------
  
!    --  Do not allow space after apostrophe
  
     procedure Check_Apostrophe is
     begin
diff -Nrcpad gcc-11.3.0/gcc/ada/styleg.ads gcc-12.1.0/gcc/ada/styleg.ads
*** gcc-11.3.0/gcc/ada/styleg.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/styleg.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/stylesw.adb gcc-12.1.0/gcc/ada/stylesw.adb
*** gcc-11.3.0/gcc/ada/stylesw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/stylesw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/stylesw.ads gcc-12.1.0/gcc/ada/stylesw.ads
*** gcc-11.3.0/gcc/ada/stylesw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/stylesw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/switch-b.adb gcc-12.1.0/gcc/ada/switch-b.adb
*** gcc-11.3.0/gcc/ada/switch-b.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/switch-b.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
*************** package body Switch.B is
*** 312,318 ****
  
              Ptr := Max + 1;
  
!             if not Is_Read_Accessible_File (Force_Elab_Order_File.all) then
                 Osint.Fail (Force_Elab_Order_File.all & ": file not found");
              end if;
  
--- 312,318 ----
  
              Ptr := Max + 1;
  
!             if not Is_Regular_File (Force_Elab_Order_File.all) then
                 Osint.Fail (Force_Elab_Order_File.all & ": file not found");
              end if;
  
*************** package body Switch.B is
*** 369,381 ****
              Ptr := Ptr + 1;
              C := Switch_Chars (Ptr);
  
!             if C in '1' .. '5'
!               or else C = '8'
!               or else C = 'p'
!               or else C = 'f'
!               or else C = 'n'
!               or else C = 'w'
!             then
                 Identifier_Character_Set := C;
                 Ptr := Ptr + 1;
              else
--- 369,375 ----
              Ptr := Ptr + 1;
              C := Switch_Chars (Ptr);
  
!             if C in '1' .. '5' | '9' | 'p' | '8' | 'f' | 'n' | 'w' then
                 Identifier_Character_Set := C;
                 Ptr := Ptr + 1;
              else
diff -Nrcpad gcc-11.3.0/gcc/ada/switch-b.ads gcc-12.1.0/gcc/ada/switch-b.ads
*** gcc-11.3.0/gcc/ada/switch-b.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/switch-b.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/switch-c.adb gcc-12.1.0/gcc/ada/switch-c.adb
*** gcc-11.3.0/gcc/ada/switch-c.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/switch-c.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
*************** package body Switch.C is
*** 112,118 ****
  
           when '3' =>
              if Standard_Long_Long_Integer_Size /= 64 then
!                Bad_Switch ("-gnato3 not implemented for this configuration");
              else
                 return Eliminated;
              end if;
--- 112,118 ----
  
           when '3' =>
              if Standard_Long_Long_Integer_Size /= 64 then
!                Bad_Switch ("-gnato3 requires Long_Long_Integer'Size = 64");
              else
                 return Eliminated;
              end if;
*************** package body Switch.C is
*** 427,433 ****
                 --  The reason for this prohibition is that the rewriting of
                 --  Sloc values causes strange malfunctions in the tests of
                 --  whether units belong to the main source. This is really a
!                --  bug, but too hard to fix for a marginal capability ???
  
                 --  The proper fix is to completely redo -gnatD processing so
                 --  that the tree is not messed with, and instead a separate
--- 427,433 ----
                 --  The reason for this prohibition is that the rewriting of
                 --  Sloc values causes strange malfunctions in the tests of
                 --  whether units belong to the main source. This is really a
!                --  bug, but too hard to fix for a marginal capability.
  
                 --  The proper fix is to completely redo -gnatD processing so
                 --  that the tree is not messed with, and instead a separate
*************** package body Switch.C is
*** 451,457 ****
  
                 Debug_Generated_Code := True;
                 Xref_Active := False;
-                Set_Debug_Flag ('g');
  
              --  -gnate? (extended switches)
  
--- 451,456 ----
*************** package body Switch.C is
*** 929,942 ****
                 Ptr := Ptr + 1;
                 C := Switch_Chars (Ptr);
  
!                if C in '1' .. '5'
!                  or else C = '8'
!                  or else C = '9'
!                  or else C = 'p'
!                  or else C = 'f'
!                  or else C = 'n'
!                  or else C = 'w'
!                then
                    Identifier_Character_Set := C;
                    Ptr := Ptr + 1;
  
--- 928,934 ----
                 Ptr := Ptr + 1;
                 C := Switch_Chars (Ptr);
  
!                if C in '1' .. '5' | '8' | 'p' | '9' | 'f' | 'n' | 'w' then
                    Identifier_Character_Set := C;
                    Ptr := Ptr + 1;
  
*************** package body Switch.C is
*** 1293,1299 ****
  
                 else
                    declare
!                      OK  : Boolean;
  
                    begin
                       Set_Validity_Check_Options
--- 1285,1291 ----
  
                 else
                    declare
!                      OK : Boolean;
  
                    begin
                       Set_Validity_Check_Options
*************** package body Switch.C is
*** 1399,1407 ****
  
              when 'X' =>
                 Ptr := Ptr + 1;
!                Extensions_Allowed   := True;
!                Ada_Version          := Ada_Version_Type'Last;
!                Ada_Version_Explicit := Ada_Version_Type'Last;
                 Ada_Version_Pragma   := Empty;
  
              --  -gnaty (style checks)
--- 1391,1398 ----
  
              when 'X' =>
                 Ptr := Ptr + 1;
!                Ada_Version          := Ada_With_Extensions;
!                Ada_Version_Explicit := Ada_With_Extensions;
                 Ada_Version_Pragma   := Empty;
  
              --  -gnaty (style checks)
*************** package body Switch.C is
*** 1417,1423 ****
                    Store_Switch := False;
  
                    declare
!                      OK  : Boolean;
  
                    begin
                       Set_Style_Check_Options
--- 1408,1414 ----
                    Store_Switch := False;
  
                    declare
!                      OK : Boolean;
  
                    begin
                       Set_Style_Check_Options
*************** package body Switch.C is
*** 1588,1595 ****
                 elsif Switch_Chars (Ptr .. Ptr + 3) = "2012" then
                    Ada_Version := Ada_2012;
  
!                elsif Switch_Chars (Ptr .. Ptr + 3) = "2020" then
!                   Ada_Version := Ada_2020;
  
                 else
                    Bad_Switch ("-gnat" & Switch_Chars (Ptr .. Ptr + 3));
--- 1579,1588 ----
                 elsif Switch_Chars (Ptr .. Ptr + 3) = "2012" then
                    Ada_Version := Ada_2012;
  
!                elsif Switch_Chars (Ptr .. Ptr + 3) = "2020"
!                  or else Switch_Chars (Ptr .. Ptr + 3) = "2022"
!                then
!                   Ada_Version := Ada_2022;
  
                 else
                    Bad_Switch ("-gnat" & Switch_Chars (Ptr .. Ptr + 3));
*************** package body Switch.C is
*** 1620,1630 ****
                    Ptr := Ptr + 1;
                 end if;
  
-             --  We ignore '/' in switches, this is historical, still needed???
- 
-             when '/' =>
-                Store_Switch := False;
- 
              --  Anything else is an error (illegal switch character)
  
              when others =>
--- 1613,1618 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/switch-c.ads gcc-12.1.0/gcc/ada/switch-c.ads
*** gcc-11.3.0/gcc/ada/switch-c.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/switch-c.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/switch-m.adb gcc-12.1.0/gcc/ada/switch-m.adb
*** gcc-11.3.0/gcc/ada/switch-m.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/switch-m.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/switch-m.ads gcc-12.1.0/gcc/ada/switch-m.ads
*** gcc-11.3.0/gcc/ada/switch-m.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/switch-m.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/switch.adb gcc-12.1.0/gcc/ada/switch.adb
*** gcc-11.3.0/gcc/ada/switch.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/switch.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/switch.ads gcc-12.1.0/gcc/ada/switch.ads
*** gcc-11.3.0/gcc/ada/switch.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/switch.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Switch is
*** 79,85 ****
     --  Returns True iff Switch_Chars represents an internal GCC switch to be
     --  followed by a single argument, such as -dumpbase, or --param.
     --  Even though passed by the "gcc" driver, these need not be stored in ALI
!    --  files and may safely be ignored by non GCC back-ends.
  
     function Switch_Last (Switch_Chars : String) return Natural;
     --  Index in Switch_Chars of the last relevant character for later string
--- 79,85 ----
     --  Returns True iff Switch_Chars represents an internal GCC switch to be
     --  followed by a single argument, such as -dumpbase, or --param.
     --  Even though passed by the "gcc" driver, these need not be stored in ALI
!    --  files and may safely be ignored by non-GCC back ends.
  
     function Switch_Last (Switch_Chars : String) return Natural;
     --  Index in Switch_Chars of the last relevant character for later string
diff -Nrcpad gcc-11.3.0/gcc/ada/sysdep.c gcc-12.1.0/gcc/ada/sysdep.c
*** gcc-11.3.0/gcc/ada/sysdep.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/sysdep.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *         Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *         Copyright (C) 1992-2022, 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- *
*************** long __gnat_invalid_tzoff = 259273;
*** 643,653 ****
  /* Reentrant localtime for Windows. */
  
  extern void
! __gnat_localtime_tzoff (const time_t *, const int *, long *);
  
  static const unsigned long long w32_epoch_offset = 11644473600ULL;
  void
! __gnat_localtime_tzoff (const time_t *timer, const int *is_historic, long *off)
  {
    TIME_ZONE_INFORMATION tzi;
  
--- 643,653 ----
  /* Reentrant localtime for Windows. */
  
  extern void
! __gnat_localtime_tzoff (const OS_Time *, const int *, long *);
  
  static const unsigned long long w32_epoch_offset = 11644473600ULL;
  void
! __gnat_localtime_tzoff (const OS_Time *timer, const int *is_historic, long *off)
  {
    TIME_ZONE_INFORMATION tzi;
  
*************** __gnat_localtime_tzoff (const time_t *ti
*** 737,746 ****
     the Lynx convention when building against the legacy API. */
  
  extern void
! __gnat_localtime_tzoff (const time_t *, const int *, long *);
  
  void
! __gnat_localtime_tzoff (const time_t *timer, const int *is_historic, long *off)
  {
    *off = 0;
  }
--- 737,746 ----
     the Lynx convention when building against the legacy API. */
  
  extern void
! __gnat_localtime_tzoff (const OS_Time *, const int *, long *);
  
  void
! __gnat_localtime_tzoff (const OS_Time *timer, const int *is_historic, long *off)
  {
    *off = 0;
  }
*************** extern void (*Lock_Task) (void);
*** 756,776 ****
  extern void (*Unlock_Task) (void);
  
  extern void
! __gnat_localtime_tzoff (const time_t *, const int *, long *);
  
  void
! __gnat_localtime_tzoff (const time_t *timer ATTRIBUTE_UNUSED,
  			const int *is_historic ATTRIBUTE_UNUSED,
  			long *off ATTRIBUTE_UNUSED)
  {
    struct tm tp ATTRIBUTE_UNUSED;
  
  /* AIX, HPUX, Sun Solaris */
  #if defined (_AIX) || defined (__hpux__) || defined (__sun__)
  {
    (*Lock_Task) ();
  
!   localtime_r (timer, &tp);
    *off = (long) -timezone;
  
    (*Unlock_Task) ();
--- 756,777 ----
  extern void (*Unlock_Task) (void);
  
  extern void
! __gnat_localtime_tzoff (const OS_Time *, const int *, long *);
  
  void
! __gnat_localtime_tzoff (const OS_Time *timer ATTRIBUTE_UNUSED,
  			const int *is_historic ATTRIBUTE_UNUSED,
  			long *off ATTRIBUTE_UNUSED)
  {
    struct tm tp ATTRIBUTE_UNUSED;
+   const time_t time = (time_t) *timer;
  
  /* AIX, HPUX, Sun Solaris */
  #if defined (_AIX) || defined (__hpux__) || defined (__sun__)
  {
    (*Lock_Task) ();
  
!   localtime_r (&time, &tp);
    *off = (long) -timezone;
  
    (*Unlock_Task) ();
*************** __gnat_localtime_tzoff (const time_t *ti
*** 787,793 ****
  {
    (*Lock_Task) ();
  
!   localtime_r (timer, &tp);
  
    /* Try to read the environment variable TIMEZONE. The variable may not have
       been initialize, in that case return an offset of zero (0) for UTC. */
--- 788,794 ----
  {
    (*Lock_Task) ();
  
!   localtime_r (&time, &tp);
  
    /* Try to read the environment variable TIMEZONE. The variable may not have
       been initialize, in that case return an offset of zero (0) for UTC. */
*************** __gnat_localtime_tzoff (const time_t *ti
*** 833,839 ****
    || defined (__GLIBC__) || defined (__DragonFly__) || defined (__OpenBSD__) \
    || defined (__DJGPP__) || defined (__QNX__)
  {
!   localtime_r (timer, &tp);
    *off = tp.tm_gmtoff;
  }
  
--- 834,840 ----
    || defined (__GLIBC__) || defined (__DragonFly__) || defined (__OpenBSD__) \
    || defined (__DJGPP__) || defined (__QNX__)
  {
!   localtime_r (&time, &tp);
    *off = tp.tm_gmtoff;
  }
  
*************** __gnat_is_file_not_found_error (int errn
*** 906,911 ****
--- 907,916 ----
      if (errno_val == ENOENT)
        return 1;
  #ifdef __vxworks
+     /* Starting with VxWorks 21.03, the fopen() function can set errno to
+      * ENODEV when the prefix of the path does not match any known device. */
+     else if (errno_val == ENODEV)
+       return 1;
      /* In the case of VxWorks, we also have to take into account various
       * filesystem-specific variants of this error.
       */
diff -Nrcpad gcc-11.3.0/gcc/ada/table.adb gcc-12.1.0/gcc/ada/table.adb
*** gcc-11.3.0/gcc/ada/table.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/table.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/table.ads gcc-12.1.0/gcc/ada/table.ads
*** gcc-11.3.0/gcc/ada/table.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/table.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/targext.c gcc-12.1.0/gcc/ada/targext.c
*** gcc-11.3.0/gcc/ada/targext.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/targext.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *        Copyright (C) 2005-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *        Copyright (C) 2005-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/targparm.adb gcc-12.1.0/gcc/ada/targparm.adb
*** gcc-11.3.0/gcc/ada/targparm.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/targparm.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
*************** package body Targparm is
*** 157,171 ****
           return;
        end if;
  
!       Name_Buffer (1 .. 10) := "system.ads";
!       Name_Len := 10;
! 
!       Read_Source_File (Name_Find, 0, Hi, Text, FD);
  
        if Null_Source_Buffer_Ptr (Text) then
           Write_Line ("fatal error, run-time library not installed correctly");
  
!          if FD = Null_FD then
              Write_Line ("cannot locate file system.ads");
           else
              Write_Line ("no read access for file system.ads");
--- 157,168 ----
           return;
        end if;
  
!       Read_Source_File (Name_Find ("system.ads"), 0, Hi, Text, FD);
  
        if Null_Source_Buffer_Ptr (Text) then
           Write_Line ("fatal error, run-time library not installed correctly");
  
!          if FD = Osint.Null_FD then
              Write_Line ("cannot locate file system.ads");
           else
              Write_Line ("no read access for file system.ads");
diff -Nrcpad gcc-11.3.0/gcc/ada/targparm.ads gcc-12.1.0/gcc/ada/targparm.ads
*** gcc-11.3.0/gcc/ada/targparm.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/targparm.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
*************** package Targparm is
*** 177,188 ****
     --  The default values here are used if no value is found in system.ads.
     --  This should normally happen if the special version of system.ads used
     --  by the compiler itself is in use or if the value is only relevant to a
!    --  particular target (e.g. AAMP). The default values are suitable for use
!    --  in normal environments. This approach allows the possibility of new
!    --  versions of the compiler (possibly with new system parameters added)
!    --  being used to compile older versions of the compiler sources, as well as
!    --  avoiding duplicating values in all system-*.ads files for flags that are
!    --  used on a few platforms only.
  
     --  All these parameters should be regarded as read only by all clients
     --  of the package. The only way they get modified is by calling the
--- 177,188 ----
     --  The default values here are used if no value is found in system.ads.
     --  This should normally happen if the special version of system.ads used
     --  by the compiler itself is in use or if the value is only relevant to a
!    --  particular target. The default values are suitable for use in normal
!    --  environments. This approach allows the possibility of new versions of
!    --  the compiler (possibly with new system parameters added) being used to
!    --  compile older versions of the compiler sources, as well as avoiding
!    --  duplicating values in all system-*.ads files for flags that are used on
!    --  a few platforms only.
  
     --  All these parameters should be regarded as read only by all clients
     --  of the package. The only way they get modified is by calling the
*************** package Targparm is
*** 365,376 ****
     --  this flag is False, and the use of aggregates is not permitted.
  
     Support_Atomic_Primitives_On_Target : Boolean := False;
!    --  If this flag is True, then the back-end support GCC built-in atomic
!    --  operations for memory model such as atomic load or atomic compare
     --  exchange (see the GCC manual for more information). If the flag is
!    --  False, then the back-end doesn't provide this support. Note this flag is
!    --  set to True only if the target supports all atomic primitives up to 64
!    --  bits. ??? To be modified.
  
     Support_Composite_Assign_On_Target : Boolean := True;
     --  The assignment of composite objects other than small records and
--- 365,376 ----
     --  this flag is False, and the use of aggregates is not permitted.
  
     Support_Atomic_Primitives_On_Target : Boolean := False;
!    --  If this flag is True, then the back end supports GCC built-in atomic
!    --  operations for memory model, such as atomic load or atomic compare
     --  exchange (see the GCC manual for more information). If the flag is
!    --  False, then the back end doesn't provide this support. Note that this
!    --  flag is set to True only if the target supports all atomic primitives
!    --  up to 64 bits.
  
     Support_Composite_Assign_On_Target : Boolean := True;
     --  The assignment of composite objects other than small records and
*************** package Targparm is
*** 469,478 ****
     -- Command Line Arguments --
     ----------------------------
  
!    --  For most ports of GNAT, command line arguments are supported. The
!    --  following flag is set to False for targets that do not support
!    --  command line arguments (VxWorks and AAMP). Note that support of
!    --  command line arguments is not required on such targets (RM A.15(13)).
  
     Command_Line_Args_On_Target : Boolean := True;
     --  Set False if no command line arguments on target. Note that if this
--- 469,478 ----
     -- Command Line Arguments --
     ----------------------------
  
!    --  Command line arguments are supported on most targets. The following flag
!    --  is set to False for targets that do not support command line arguments
!    --  (i.e. VxWorks). Note that support for command line arguments is not
!    --  required on such targets (RM A.15(13)).
  
     Command_Line_Args_On_Target : Boolean := True;
     --  Set False if no command line arguments on target. Note that if this
*************** package Targparm is
*** 480,487 ****
     --  this causes suppression of generation of the argv/argc variables
     --  used to record command line arguments.
  
!    --  Similarly, most ports support the use of an exit status, but AAMP
!    --  is an exception (as allowed by RM A.15(18-20))
  
     Exit_Status_Supported_On_Target : Boolean := True;
     --  Set False if returning of an exit status is not supported on target.
--- 480,487 ----
     --  this causes suppression of generation of the argv/argc variables
     --  used to record command line arguments.
  
!    --  Similarly, most targets support the use of an exit status, but other
!    --  targets might not, as allowed by RM A.15(18-20).
  
     Exit_Status_Supported_On_Target : Boolean := True;
     --  Set False if returning of an exit status is not supported on target.
diff -Nrcpad gcc-11.3.0/gcc/ada/tbuild.adb gcc-12.1.0/gcc/ada/tbuild.adb
*** gcc-11.3.0/gcc/ada/tbuild.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/tbuild.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,44 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Aspects;  use Aspects;
! with Csets;    use Csets;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Lib;      use Lib;
! with Nlists;   use Nlists;
! with Nmake;    use Nmake;
! with Opt;      use Opt;
! with Restrict; use Restrict;
! with Rident;   use Rident;
! with Sem_Aux;  use Sem_Aux;
! with Snames;   use Snames;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with Urealp;   use Urealp;
  
  package body Tbuild is
  
--- 23,46 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Aspects;        use Aspects;
! with Csets;          use Csets;
! with Einfo;          use Einfo;
! with Einfo.Entities; use Einfo.Entities;
! with Einfo.Utils;    use Einfo.Utils;
! with Lib;            use Lib;
! with Nlists;         use Nlists;
! with Nmake;          use Nmake;
! with Opt;            use Opt;
! with Restrict;       use Restrict;
! with Rident;         use Rident;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sem_Util;       use Sem_Util;
! with Snames;         use Snames;
! with Stand;          use Stand;
! with Stringt;        use Stringt;
! with Urealp;         use Urealp;
  
  package body Tbuild is
  
*************** package body Tbuild is
*** 113,118 ****
--- 115,121 ----
     ----------------
  
     function Convert_To (Typ : Entity_Id; Expr : Node_Id) return Node_Id is
+       pragma Assert (Is_Type (Typ));
        Result : Node_Id;
  
     begin
*************** package body Tbuild is
*** 181,212 ****
        return N;
     end Make_Byte_Aligned_Attribute_Reference;
  
-    --------------------
-    -- Make_DT_Access --
-    --------------------
- 
-    function Make_DT_Access
-      (Loc : Source_Ptr;
-       Rec : Node_Id;
-       Typ : Entity_Id) return Node_Id
-    is
-       Full_Type : Entity_Id := Typ;
- 
-    begin
-       if Is_Private_Type (Typ) then
-          Full_Type := Underlying_Type (Typ);
-       end if;
- 
-       return
-         Unchecked_Convert_To (
-           New_Occurrence_Of
-             (Etype (Node (First_Elmt (Access_Disp_Table (Full_Type)))), Loc),
-           Make_Selected_Component (Loc,
-             Prefix => New_Copy (Rec),
-             Selector_Name =>
-               New_Occurrence_Of (First_Tag_Component (Full_Type), Loc)));
-    end Make_DT_Access;
- 
     ------------------------
     -- Make_Float_Literal --
     ------------------------
--- 184,189 ----
*************** package body Tbuild is
*** 348,361 ****
        Has_Created_Identifier : Boolean := False;
        End_Label              : Node_Id := Empty) return Node_Id
     is
     begin
!       Check_Restriction (No_Implicit_Loops, Node);
  
!       if Present (Iteration_Scheme)
!         and then Nkind (Iteration_Scheme) /= N_Iterator_Specification
!         and then Present (Condition (Iteration_Scheme))
!       then
!          Check_Restriction (No_Implicit_Conditionals, Node);
        end if;
  
        return Make_Loop_Statement (Sloc (Node),
--- 325,366 ----
        Has_Created_Identifier : Boolean := False;
        End_Label              : Node_Id := Empty) return Node_Id
     is
+       P                  : Node_Id;
+       Check_Restrictions : Boolean := True;
     begin
!       --  Do not check restrictions if the implicit loop statement is part
!       --  of a dead branch: False and then ...
!       --  This will occur in particular as part of the expansion of pragma
!       --  Assert when assertions are disabled.
  
!       P := Parent (Node);
!       while Present (P) loop
!          if Nkind (P) = N_And_Then then
!             if Nkind (Left_Opnd (P)) = N_Identifier
!               and then Entity (Left_Opnd (P)) = Standard_False
!             then
!                Check_Restrictions := False;
!                exit;
!             end if;
! 
!          --  Prevent the search from going too far
! 
!          elsif Is_Body_Or_Package_Declaration (P) then
!             exit;
!          end if;
! 
!          P := Parent (P);
!       end loop;
! 
!       if Check_Restrictions then
!          Check_Restriction (No_Implicit_Loops, Node);
! 
!          if Present (Iteration_Scheme)
!            and then Nkind (Iteration_Scheme) /= N_Iterator_Specification
!            and then Present (Condition (Iteration_Scheme))
!          then
!             Check_Restriction (No_Implicit_Conditionals, Node);
!          end if;
        end if;
  
        return Make_Loop_Statement (Sloc (Node),
*************** package body Tbuild is
*** 694,704 ****
        Loc    : Source_Ptr) return Node_Id
     is
        pragma Assert (Present (Def_Id) and then Nkind (Def_Id) in N_Entity);
!       Occurrence : Node_Id;
  
     begin
-       Occurrence := New_Node (N_Identifier, Loc);
-       Set_Chars (Occurrence, Chars (Def_Id));
        Set_Entity (Occurrence, Def_Id);
  
        if Is_Type (Def_Id) then
--- 699,708 ----
        Loc    : Source_Ptr) return Node_Id
     is
        pragma Assert (Present (Def_Id) and then Nkind (Def_Id) in N_Entity);
!       Occurrence : constant Node_Id :=
!         Make_Identifier (Loc, Chars (Def_Id));
  
     begin
        Set_Entity (Occurrence, Def_Id);
  
        if Is_Type (Def_Id) then
*************** package body Tbuild is
*** 874,899 ****
       (Typ  : Entity_Id;
        Expr : Node_Id) return Node_Id
     is
        Loc         : constant Source_Ptr := Sloc (Expr);
        Result      : Node_Id;
-       Expr_Parent : Node_Id;
  
     begin
        --  If the expression is already of the correct type, then nothing
!       --  to do, except for relocating the node in case this is required.
  
        if Present (Etype (Expr))
!         and then (Base_Type (Etype (Expr)) = Typ
!                    or else Etype (Expr) = Typ)
        then
           return Relocate_Node (Expr);
  
!       --  Case where the expression is itself an unchecked conversion to
!       --  the same type, and we can thus eliminate the outer conversion.
  
        elsif Nkind (Expr) = N_Unchecked_Type_Conversion
!         and then Entity (Subtype_Mark (Expr)) = Typ
        then
           Result := Relocate_Node (Expr);
  
        elsif Nkind (Expr) = N_Null
--- 878,911 ----
       (Typ  : Entity_Id;
        Expr : Node_Id) return Node_Id
     is
+       pragma Assert (Ekind (Typ) in E_Void | Type_Kind);
+       --  We don't really want to allow E_Void here, but existing code passes
+       --  it.
+ 
        Loc         : constant Source_Ptr := Sloc (Expr);
        Result      : Node_Id;
  
     begin
        --  If the expression is already of the correct type, then nothing
!       --  to do, except for relocating the node
  
        if Present (Etype (Expr))
!         and then (Base_Type (Etype (Expr)) = Typ or else Etype (Expr) = Typ)
        then
           return Relocate_Node (Expr);
  
!       --  Case where the expression is already an unchecked conversion. We
!       --  replace the type being converted to, to avoid creating an unchecked
!       --  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.
  
        elsif Nkind (Expr) = N_Unchecked_Type_Conversion
!         and then Is_Composite_Type (Etype (Expr))
!         and then Is_Composite_Type (Typ)
        then
+          Set_Subtype_Mark (Expr, New_Occurrence_Of (Typ, Loc));
           Result := Relocate_Node (Expr);
  
        elsif Nkind (Expr) = N_Null
*************** package body Tbuild is
*** 906,923 ****
        --  All other cases
  
        else
!          --  Capture the parent of the expression before relocating it and
!          --  creating the conversion, so the conversion's parent can be set
!          --  to the original parent below.
! 
!          Expr_Parent := Parent (Expr);
! 
!          Result :=
!            Make_Unchecked_Type_Conversion (Loc,
!              Subtype_Mark => New_Occurrence_Of (Typ, Loc),
!              Expression   => Relocate_Node (Expr));
! 
!          Set_Parent (Result, Expr_Parent);
        end if;
  
        Set_Etype (Result, Typ);
--- 918,932 ----
        --  All other cases
  
        else
!          declare
!             Expr_Parent : constant Node_Id := Parent (Expr);
!          begin
!             Result :=
!               Make_Unchecked_Type_Conversion (Loc,
!                 Subtype_Mark => New_Occurrence_Of (Typ, Loc),
!                 Expression   => Relocate_Node (Expr));
!             Set_Parent (Result, Expr_Parent);
!          end;
        end if;
  
        Set_Etype (Result, Typ);
diff -Nrcpad gcc-11.3.0/gcc/ada/tbuild.ads gcc-12.1.0/gcc/ada/tbuild.ads
*** gcc-11.3.0/gcc/ada/tbuild.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/tbuild.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 26,35 ****
  --  This package contains various utility procedures to assist in building
  --  specific types of tree nodes.
  
! with Namet; use Namet;
! with Sinfo; use Sinfo;
! with Types; use Types;
! with Uintp; use Uintp;
  
  package Tbuild is
  
--- 26,36 ----
  --  This package contains various utility procedures to assist in building
  --  specific types of tree nodes.
  
! with Namet;          use Namet;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Types;          use Types;
! with Uintp;          use Uintp;
  
  package Tbuild is
  
*************** package Tbuild is
*** 40,58 ****
     --  except that it will be analyzed and resolved with checks off.
  
     function Convert_To (Typ : Entity_Id; Expr : Node_Id) return Node_Id;
!    --  Returns an expression that represents the result of a checked convert
!    --  of expression Exp to type T. If the base type of Exp is T, then no
!    --  conversion is required, and Exp is returned unchanged. Otherwise an
!    --  N_Type_Conversion node is constructed to convert the expression.
!    --  If an N_Type_Conversion node is required, Relocate_Node is used on
!    --  Exp. This means that it is safe to replace a node by a Convert_To
!    --  of itself to some other type.
  
     procedure Convert_To_And_Rewrite (Typ : Entity_Id; Expr : Node_Id);
     pragma Inline (Convert_To_And_Rewrite);
     --  Like the function, except that there is an extra step of calling
     --  Rewrite on the Expr node and replacing it with the converted result.
-    --  As noted above, this is safe, because Relocate_Node is called.
  
     procedure Discard_Node (N : Node_Or_Entity_Id);
     pragma Inline (Discard_Node);
--- 41,56 ----
     --  except that it will be analyzed and resolved with checks off.
  
     function Convert_To (Typ : Entity_Id; Expr : Node_Id) return Node_Id;
!    --  Returns an expression that is a type conversion of expression Expr to
!    --  type Typ. If the type of Expr is Typ, then no conversion is required.
!    --  Otherwise an N_Type_Conversion node is constructed to convert the
!    --  expression. Relocate_Node is applied to Expr, so that it is safe to
!    --  replace a node by a Convert_To of itself to some other type.
  
     procedure Convert_To_And_Rewrite (Typ : Entity_Id; Expr : Node_Id);
     pragma Inline (Convert_To_And_Rewrite);
     --  Like the function, except that there is an extra step of calling
     --  Rewrite on the Expr node and replacing it with the converted result.
  
     procedure Discard_Node (N : Node_Or_Entity_Id);
     pragma Inline (Discard_Node);
*************** package Tbuild is
*** 77,87 ****
     --  Must_Be_Byte_Aligned is set in the attribute reference node. The
     --  Attribute_Name must be Name_Address or Name_Unrestricted_Access.
  
-    function Make_DT_Access
-      (Loc : Source_Ptr; Rec : Node_Id; Typ : Entity_Id) return Node_Id;
-    --  Create an access to the Dispatch Table by using the Tag field of a
-    --  tagged record : Acc_Dt (Rec.tag).all
- 
     function Make_Float_Literal
       (Loc         : Source_Ptr;
        Radix       : Uint;
--- 75,80 ----
*************** package Tbuild is
*** 318,330 ****
     function New_Occurrence_Of
       (Def_Id : Entity_Id;
        Loc    : Source_Ptr) return Node_Id;
!    --  New_Occurrence_Of creates an N_Identifier node which is an occurrence
!    --  of the defining identifier which is passed as its argument. The Entity
!    --  and Etype of the result are set from the given defining identifier as
!    --  follows: Entity is simply a copy of Def_Id. Etype is a copy of Def_Id
!    --  for types, and a copy of the Etype of Def_Id for other entities. Note
!    --  that Is_Static_Expression is set if this call creates an occurrence of
!    --  an enumeration literal.
  
     function New_Suffixed_Name
       (Related_Id : Name_Id;
--- 311,321 ----
     function New_Occurrence_Of
       (Def_Id : Entity_Id;
        Loc    : Source_Ptr) return Node_Id;
!    --  New_Occurrence_Of creates an N_Identifier node that is an occurrence of
!    --  the defining identifier Def_Id. The Entity of the result is Def_Id. The
!    --  Etype of the result is Def_Id for types, and Etype (Def_Id) otherwise.
!    --  Is_Static_Expression is set if this call creates an occurrence of an
!    --  enumeration literal.
  
     function New_Suffixed_Name
       (Related_Id : Name_Id;
*************** package Tbuild is
*** 348,354 ****
       (Typ  : Entity_Id;
        Expr : Node_Id) return Node_Id;
     --  Like Convert_To, but if a conversion is actually needed, constructs an
!    --  N_Unchecked_Type_Conversion node to do the required conversion.
  
     -------------------------------------
     -- Subprograms for Use by Gnat1drv --
--- 339,348 ----
       (Typ  : Entity_Id;
        Expr : Node_Id) return Node_Id;
     --  Like Convert_To, but if a conversion is actually needed, constructs an
!    --  N_Unchecked_Type_Conversion node to do the required conversion. Unlike
!    --  Convert_To, a new node is not required if Expr is already of the correct
!    --  BASE type, and if a new node is created, the Parent of Expr is copied to
!    --  it.
  
     -------------------------------------
     -- Subprograms for Use by Gnat1drv --
diff -Nrcpad gcc-11.3.0/gcc/ada/tempdir.adb gcc-12.1.0/gcc/ada/tempdir.adb
*** gcc-11.3.0/gcc/ada/tempdir.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/tempdir.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/tempdir.ads gcc-12.1.0/gcc/ada/tempdir.ads
*** gcc-11.3.0/gcc/ada/tempdir.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/tempdir.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2003-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/terminals.c gcc-12.1.0/gcc/ada/terminals.c
*** gcc-11.3.0/gcc/ada/terminals.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/terminals.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *                     Copyright (C) 2008-2020, AdaCore                     *
   *                                                                          *
   * 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *                     Copyright (C) 2008-2022, AdaCore                     *
   *                                                                          *
   * 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/tracebak.c gcc-12.1.0/gcc/ada/tracebak.c
*** gcc-11.3.0/gcc/ada/tracebak.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/tracebak.c	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *            Copyright (C) 2000-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                          C Implementation File                           *
   *                                                                          *
!  *            Copyright (C) 2000-2022, 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- *
*************** __gnat_backtrace (void **array,
*** 316,321 ****
--- 316,328 ----
  #define PC_ADJUST -2
  #define USING_ARM_UNWINDING 1
  
+ /*---------------------- ARM RTEMS ------------------------------------ -*/
+ #elif (defined (__arm__) && defined (__rtems__))
+ 
+ #define USE_GCC_UNWINDER
+ #define PC_ADJUST -2
+ #define USING_ARM_UNWINDING 1
+ 
  /*---------------------- PPC AIX/PPC Lynx 178/Older Darwin --------------*/
  #elif ((defined (_POWER) && defined (_AIX)) || \
         (defined (__powerpc__) && defined (__Lynx__) && !defined(__ELF__)) || \
*************** extern void __runnit(); /* thread entry
*** 370,380 ****
  
  #define BASE_SKIP 1
  
! /*----------- PPC ELF (GNU/Linux & VxWorks & Lynx178e) -------------------*/
  
  #elif (defined (_ARCH_PPC) && defined (__vxworks)) ||  \
    (defined (__powerpc__) && defined (__Lynx__) && defined(__ELF__)) || \
!   (defined (__linux__) && defined (__powerpc__))
  
  #if defined (_ARCH_PPC64) && !defined (__USING_SJLJ_EXCEPTIONS__)
  #define USE_GCC_UNWINDER
--- 377,388 ----
  
  #define BASE_SKIP 1
  
! /*----------- PPC ELF (GNU/Linux & VxWorks & Lynx178e & RTEMS ) ----------*/
  
  #elif (defined (_ARCH_PPC) && defined (__vxworks)) ||  \
    (defined (__powerpc__) && defined (__Lynx__) && defined(__ELF__)) || \
!   (defined (__linux__) && defined (__powerpc__)) || \
!   (defined (__powerpc__) && defined (__rtems__))
  
  #if defined (_ARCH_PPC64) && !defined (__USING_SJLJ_EXCEPTIONS__)
  #define USE_GCC_UNWINDER
*************** struct layout
*** 404,412 ****
  
  #define BASE_SKIP 1
  
! /*-------------------------- SPARC Solaris -----------------------------*/
  
! #elif defined (__sun__) && defined (__sparc__)
  
  #define USE_GENERIC_UNWINDER
  
--- 412,420 ----
  
  #define BASE_SKIP 1
  
! /*-------------------------- SPARC Solaris or RTEMS --------------------*/
  
! #elif (defined (__sun__) || defined (__rtems__)) && defined (__sparc__)
  
  #define USE_GENERIC_UNWINDER
  
*************** is_return_from(void *symbol_addr, void *
*** 551,559 ****
  #error Unhandled QNX architecture.
  #endif
  
! /*------------------- aarch64-linux ----------------------------------*/
  
! #elif (defined (__aarch64__) && defined (__linux__))
  
  #define USE_GCC_UNWINDER
  #define PC_ADJUST -4
--- 559,567 ----
  #error Unhandled QNX architecture.
  #endif
  
! /*------------------- aarch64-linux or aarch64-rtems -----------------*/
  
! #elif (defined (__aarch64__) && (defined (__linux__) || defined (__rtems__)))
  
  #define USE_GCC_UNWINDER
  #define PC_ADJUST -4
diff -Nrcpad gcc-11.3.0/gcc/ada/treepr.adb gcc-12.1.0/gcc/ada/treepr.adb
*** gcc-11.3.0/gcc/ada/treepr.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/treepr.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,58 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;  use Aspects;
! with Atree;    use Atree;
! with Csets;    use Csets;
! with Debug;    use Debug;
! with Einfo;    use Einfo;
! with Elists;   use Elists;
! with Lib;      use Lib;
! with Namet;    use Namet;
! with Nlists;   use Nlists;
! with Output;   use Output;
! with Sem_Mech; use Sem_Mech;
! with Sinfo;    use Sinfo;
! with Snames;   use Snames;
! with Sinput;   use Sinput;
! with Stand;    use Stand;
! with Stringt;  use Stringt;
! with SCIL_LL;  use SCIL_LL;
! with Treeprs;  use Treeprs;
! with Uintp;    use Uintp;
! with Urealp;   use Urealp;
! with Uname;    use Uname;
! with Unchecked_Deallocation;
  
  package body Treepr is
  
-    use Atree.Unchecked_Access;
-    --  This module uses the unchecked access functions in package Atree
-    --  since it does an untyped traversal of the tree (we do not want to
-    --  count on the structure of the tree being correct in this routine).
- 
     ----------------------------------
     -- Approach Used for Tree Print --
     ----------------------------------
--- 23,58 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Aspects;              use Aspects;
! with Atree;                use Atree;
! with Debug;                use Debug;
! with Einfo;                use Einfo;
! with Einfo.Entities;       use Einfo.Entities;
! with Einfo.Utils;          use Einfo.Utils;
! with Elists;               use Elists;
! with GNAT.Dynamic_HTables; use GNAT.Dynamic_HTables;
! with Lib;                  use Lib;
! with Namet;                use Namet;
! with Nlists;               use Nlists;
! with Output;               use Output;
! with Seinfo;               use Seinfo;
! with Sem_Eval;             use Sem_Eval;
! with Sinfo;                use Sinfo;
! with Sinfo.Nodes;          use Sinfo.Nodes;
! with Sinfo.Utils;          use Sinfo.Utils;
! with Snames;               use Snames;
! with Sinput;               use Sinput;
! with Stand;                use Stand;
! with Stringt;              use Stringt;
! with System.Case_Util;     use System.Case_Util;
! with SCIL_LL;              use SCIL_LL;
! with Uintp;                use Uintp;
! with Urealp;               use Urealp;
! with Uname;                use Uname;
! with Unchecked_Conversion;
  
  package body Treepr is
  
     ----------------------------------
     -- Approach Used for Tree Print --
     ----------------------------------
*************** package body Treepr is
*** 77,99 ****
     -- Global Variables --
     ----------------------
  
!    type Hash_Record is record
!       Serial : Nat;
!       --  Serial number for hash table entry. A value of zero means that
!       --  the entry is currently unused.
  
!       Id : Int;
!       --  If serial number field is non-zero, contains corresponding Id value
!    end record;
  
!    type Hash_Table_Type is array (Nat range <>) of Hash_Record;
!    type Access_Hash_Table_Type is access Hash_Table_Type;
!    Hash_Table : Access_Hash_Table_Type;
!    --  The hash table itself, see Serial_Number function for details of use
  
!    Hash_Table_Len : Nat;
!    --  Range of Hash_Table is from 0 .. Hash_Table_Len - 1 so that dividing
!    --  by Hash_Table_Len gives a remainder that is in Hash_Table'Range.
  
     Next_Serial_Number : Nat;
     --  Number of last visited node or list. Used during the marking phase to
--- 77,111 ----
     -- Global Variables --
     ----------------------
  
!    Print_Low_Level_Info : Boolean := False with Warnings => Off;
!    --  Set True to print low-level information useful for debugging Atree and
!    --  the like.
  
!    function Hash (Key : Int) return GNAT.Bucket_Range_Type;
!    --  Simple Hash function for Node_Ids, List_Ids and Elist_Ids
  
!    procedure Destroy (Value : in out Nat) is null;
!    pragma Annotate (CodePeer, False_Positive, "unassigned parameter",
!                     "in out parameter is required to instantiate generic");
!    --  Dummy routine for destroing hashed values
  
!    package Serial_Numbers is new Dynamic_Hash_Tables
!      (Key_Type              => Int,
!       Value_Type            => Nat,
!       No_Value              => 0,
!       Expansion_Threshold   => 1.5,
!       Expansion_Factor      => 2,
!       Compression_Threshold => 0.3,
!       Compression_Factor    => 2,
!       "="                   => "=",
!       Destroy_Value         => Destroy,
!       Hash                  => Hash);
!    --  Hash tables with dynamic resizing based on load factor. They provide
!    --  reasonable performance both when the printed AST is small (e.g. when
!    --  printing from debugger) and large (e.g. when printing with -gnatdt).
! 
!    Hash_Table : Serial_Numbers.Dynamic_Hash_Table;
!    --  The hash table itself, see Serial_Number function for details of use
  
     Next_Serial_Number : Nat;
     --  Number of last visited node or list. Used during the marking phase to
*************** package body Treepr is
*** 120,133 ****
     -- Local Procedures --
     ----------------------
  
!    procedure Print_End_Span (N : Node_Id);
!    --  Special routine to print contents of End_Span field of node N.
!    --  The format includes the implicit source location as well as the
!    --  value of the field.
  
     procedure Print_Init;
     --  Initialize for printing of tree with descendants
  
     procedure Print_Term;
     --  Clean up after printing of tree with descendants
  
--- 132,153 ----
     -- Local Procedures --
     ----------------------
  
!    function From_Union is new Unchecked_Conversion (Union_Id, Uint);
!    function From_Union is new Unchecked_Conversion (Union_Id, Ureal);
! 
!    function To_Mixed (S : String) return String;
!    --  Turns an identifier into Mixed_Case. For bootstrap reasons, we cannot
!    --  use To_Mixed function from System.Case_Util.
! 
!    function Image (F : Node_Or_Entity_Field) return String;
  
     procedure Print_Init;
     --  Initialize for printing of tree with descendants
  
+    procedure Print_End_Span (N : Node_Id);
+    --  Print contents of End_Span field of node N. The format includes the
+    --  implicit source location as well as the value of the field.
+ 
     procedure Print_Term;
     --  Clean up after printing of tree with descendants
  
*************** package body Treepr is
*** 172,181 ****
--- 192,221 ----
     --  extension, using routines in Einfo to get the field names and flags.
  
     procedure Print_Field (Val : Union_Id; Format : UI_Format := Auto);
+    procedure Print_Field
+      (Prefix : String;
+       Field  : String;
+       N      : Node_Or_Entity_Id;
+       FD     : Field_Descriptor;
+       Format : UI_Format);
     --  Print representation of Field value (name, tree, string, uint, charcode)
     --  The format parameter controls the format of printing in the case of an
     --  integer value (see UI_Write for details).
  
+    procedure Print_Node_Field
+      (Prefix : String;
+       Field  : Node_Field;
+       N      : Node_Id;
+       FD     : Field_Descriptor;
+       Format : UI_Format := Auto);
+ 
+    procedure Print_Entity_Field
+      (Prefix : String;
+       Field  : Entity_Field;
+       N      : Entity_Id;
+       FD     : Field_Descriptor;
+       Format : UI_Format := Auto);
+ 
     procedure Print_Flag (F : Boolean);
     --  Print True or False
  
*************** package body Treepr is
*** 215,220 ****
--- 255,383 ----
     --  descendants are to be printed. Prefix_Str is to be added to all
     --  printed lines.
  
+    ----------
+    -- Hash --
+    ----------
+ 
+    function Hash (Key : Int) return GNAT.Bucket_Range_Type is
+       function Cast is new Unchecked_Conversion
+         (Source => Int, Target => GNAT.Bucket_Range_Type);
+    begin
+       return Cast (Key);
+    end Hash;
+ 
+    -----------
+    -- Image --
+    -----------
+ 
+    function Image (F : Node_Or_Entity_Field) return String is
+    begin
+       case F is
+          when F_Alloc_For_BIP_Return =>
+             return "Alloc_For_BIP_Return";
+          when F_Assignment_OK =>
+             return "Assignment_OK";
+          when F_Backwards_OK =>
+             return "Backwards_OK";
+          when F_Conversion_OK =>
+             return "Conversion_OK";
+          when F_Forwards_OK =>
+             return "Forwards_OK";
+          when F_Has_SP_Choice =>
+             return "Has_SP_Choice";
+          when F_Is_Elaboration_Checks_OK_Node =>
+             return "Is_Elaboration_Checks_OK_Node";
+          when F_Is_Elaboration_Warnings_OK_Node =>
+             return "Is_Elaboration_Warnings_OK_Node";
+          when F_Is_Known_Guaranteed_ABE =>
+             return "Is_Known_Guaranteed_ABE";
+          when F_Is_SPARK_Mode_On_Node =>
+             return "Is_SPARK_Mode_On_Node";
+          when F_Local_Raise_Not_OK =>
+             return "Local_Raise_Not_OK";
+          when F_SCIL_Controlling_Tag =>
+             return "SCIL_Controlling_Tag";
+          when F_SCIL_Entity =>
+             return "SCIL_Entity";
+          when F_SCIL_Tag_Value =>
+             return "SCIL_Tag_Value";
+          when F_SCIL_Target_Prim =>
+             return "SCIL_Target_Prim";
+          when F_Shift_Count_OK =>
+             return "Shift_Count_OK";
+          when F_Split_PPC =>
+             return "Split_PPC";
+          when F_TSS_Elist =>
+             return "TSS_Elist";
+ 
+          when F_BIP_Initialization_Call =>
+             return "BIP_Initialization_Call";
+          when F_Body_Needed_For_SAL =>
+             return "Body_Needed_For_SAL";
+          when F_CR_Discriminant =>
+             return "CR_Discriminant";
+          when F_DT_Entry_Count =>
+             return "DT_Entry_Count";
+          when F_DT_Offset_To_Top_Func =>
+             return "DT_Offset_To_Top_Func";
+          when F_DT_Position =>
+             return "DT_Position";
+          when F_DTC_Entity =>
+             return "DTC_Entity";
+          when F_Has_Inherited_DIC =>
+             return "Has_Inherited_DIC";
+          when F_Has_Own_DIC =>
+             return "Has_Own_DIC";
+          when F_Has_RACW =>
+             return "Has_RACW";
+          when F_Ignore_SPARK_Mode_Pragmas =>
+             return "Ignore_SPARK_Mode_Pragmas";
+          when F_Is_Constr_Subt_For_UN_Aliased =>
+             return "Is_Constr_Subt_For_UN_Aliased";
+          when F_Is_CPP_Class =>
+             return "Is_CPP_Class";
+          when F_Is_CUDA_Kernel =>
+             return "Is_CUDA_Kernel";
+          when F_Is_DIC_Procedure =>
+             return "Is_DIC_Procedure";
+          when F_Is_Discrim_SO_Function =>
+             return "Is_Discrim_SO_Function";
+          when F_Is_Elaboration_Checks_OK_Id =>
+             return "Is_Elaboration_Checks_OK_Id";
+          when F_Is_Elaboration_Warnings_OK_Id =>
+             return "Is_Elaboration_Warnings_OK_Id";
+          when F_Is_RACW_Stub_Type =>
+             return "Is_RACW_Stub_Type";
+          when F_LSP_Subprogram =>
+             return "LSP_Subprogram";
+          when F_OK_To_Rename =>
+             return "OK_To_Rename";
+          when F_Referenced_As_LHS =>
+             return "Referenced_As_LHS";
+          when F_RM_Size =>
+             return "RM_Size";
+          when F_SPARK_Aux_Pragma =>
+             return "SPARK_Aux_Pragma";
+          when F_SPARK_Aux_Pragma_Inherited =>
+             return "SPARK_Aux_Pragma_Inherited";
+          when F_SPARK_Pragma =>
+             return "SPARK_Pragma";
+          when F_SPARK_Pragma_Inherited =>
+             return "SPARK_Pragma_Inherited";
+          when F_SSO_Set_High_By_Default =>
+             return "SSO_Set_High_By_Default";
+          when F_SSO_Set_Low_By_Default =>
+             return "SSO_Set_Low_By_Default";
+ 
+          when others =>
+             declare
+                Result : constant String := To_Mixed (F'Img);
+             begin
+                return Result (3 .. Result'Last); -- Remove "F_"
+             end;
+       end case;
+    end Image;
+ 
     -------
     -- p --
     -------
*************** package body Treepr is
*** 226,232 ****
              return Nlists.Parent (List_Id (N));
  
           when Node_Range =>
!             return Atree.Parent (Node_Or_Entity_Id (N));
  
           when others =>
              Write_Int (Int (N));
--- 389,395 ----
              return Nlists.Parent (List_Id (N));
  
           when Node_Range =>
!             return Parent (Node_Or_Entity_Id (N));
  
           when others =>
              Write_Int (Int (N));
*************** package body Treepr is
*** 425,434 ****
     begin
        UI_Write (Val);
        Write_Str (" (Uint = ");
!       Write_Int (Int (Field5 (N)));
        Write_Str (")  ");
  
!       if Val /= No_Uint then
           Write_Location (End_Location (N));
        end if;
     end Print_End_Span;
--- 588,597 ----
     begin
        UI_Write (Val);
        Write_Str (" (Uint = ");
!       Write_Str (UI_Image (Val));
        Write_Str (")  ");
  
!       if Present (Val) then
           Write_Location (End_Location (N));
        end if;
     end Print_End_Span;
*************** package body Treepr is
*** 438,459 ****
     -----------------------
  
     procedure Print_Entity_Info (Ent : Entity_Id; Prefix : String) is
-       function Field_Present (U : Union_Id) return Boolean;
-       --  Returns False unless the value U represents a missing value
-       --  (Empty, No_Elist, No_Uint, No_Ureal or No_String)
- 
-       function Field_Present (U : Union_Id) return Boolean is
-       begin
-          return
-             U /= Union_Id (Empty)    and then
-             U /= Union_Id (No_Elist) and then
-             U /= To_Union (No_Uint)  and then
-             U /= To_Union (No_Ureal) and then
-             U /= Union_Id (No_String);
-       end Field_Present;
- 
-    --  Start of processing for Print_Entity_Info
- 
     begin
        Print_Str (Prefix);
        Print_Str ("Ekind = ");
--- 601,606 ----
*************** package body Treepr is
*** 480,819 ****
           end;
        end if;
  
!       if Field_Present (Field6 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field6_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field6 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field7 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field7_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field7 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field8 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field8_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field8 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field9 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field9_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field9 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field10 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field10_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field10 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field11 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field11_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field11 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field12 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field12_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field12 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field13 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field13_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field13 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field14 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field14_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field14 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field15 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field15_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field15 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field16 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field16_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field16 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field17 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field17_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field17 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field18 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field18_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field18 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field19 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field19_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field19 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field20 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field20_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field20 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field21 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field21_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field21 (Ent));
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field22 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field22_Name (Ent);
!          Write_Str (" = ");
! 
!          --  Mechanism case has to be handled specially
! 
!          if Ekind (Ent) = E_Function or else Is_Formal (Ent) then
!             declare
!                M : constant Mechanism_Type := Mechanism (Ent);
! 
!             begin
!                case M is
!                   when Default_Mechanism =>
!                      Write_Str ("Default");
! 
!                   when By_Copy =>
!                      Write_Str ("By_Copy");
! 
!                   when By_Reference =>
!                      Write_Str ("By_Reference");
! 
!                   when 1 .. Mechanism_Type'Last =>
!                      Write_Str ("By_Copy if size <= ");
!                      Write_Int (Int (M));
!                end case;
!             end;
! 
!          --  Normal case (not Mechanism)
! 
!          else
!             Print_Field (Field22 (Ent));
!          end if;
! 
!          Print_Eol;
!       end if;
! 
!       if Field_Present (Field23 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field23_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field23 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field24 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field24_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field24 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field25 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field25_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field25 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field26 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field26_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field26 (Ent));
!          Print_Eol;
        end if;
  
!       if Field_Present (Field27 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field27_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field27 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field28 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field28_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field28 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field29 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field29_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field29 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field30 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field30_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field30 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field31 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field31_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field31 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field32 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field32_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field32 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field33 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field33_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field33 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field34 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field34_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field34 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field35 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field35_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field35 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field36 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field36_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field36 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field37 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field37_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field37 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field38 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field38_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field38 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field39 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field39_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field39 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field40 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field40_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field40 (Ent));
!          Print_Eol;
!       end if;
  
!       if Field_Present (Field41 (Ent)) then
!          Print_Str (Prefix);
!          Write_Field41_Name (Ent);
!          Write_Str (" = ");
!          Print_Field (Field41 (Ent));
!          Print_Eol;
!       end if;
  
!       Write_Entity_Flags (Ent, Prefix);
!    end Print_Entity_Info;
  
!    ---------------
!    -- Print_Eol --
!    ---------------
  
!    procedure Print_Eol is
!    begin
!       if Phase = Printing then
!          Write_Eol;
!       end if;
!    end Print_Eol;
  
!    -----------------
!    -- Print_Field --
!    -----------------
  
     procedure Print_Field (Val : Union_Id; Format : UI_Format := Auto) is
     begin
--- 627,732 ----
           end;
        end if;
  
!       declare
!          Fields : Entity_Field_Array renames
!            Entity_Field_Table (Ekind (Ent)).all;
!          Should_Print : constant Entity_Field_Set :=
!            --  Set of fields that should be printed. False for fields that were
!            --  already printed above.
!            (F_Ekind
!             | F_Basic_Convention => False, -- Convention was printed
!             others => True);
!       begin
!          --  Outer loop makes flags come out last
  
!          for Print_Flags in Boolean loop
!             for Field_Index in Fields'Range loop
!                declare
!                   FD : Field_Descriptor renames
!                     Field_Descriptors (Fields (Field_Index));
!                begin
!                   if Should_Print (Fields (Field_Index))
!                     and then (FD.Kind = Flag_Field) = Print_Flags
!                   then
!                      Print_Entity_Field
!                        (Prefix, Fields (Field_Index), Ent, FD);
!                   end if;
!                end;
!             end loop;
!          end loop;
!       end;
!    end Print_Entity_Info;
  
!    ---------------
!    -- Print_Eol --
!    ---------------
  
!    procedure Print_Eol is
!    begin
!       if Phase = Printing then
!          Write_Eol;
        end if;
+    end Print_Eol;
  
!    -----------------
!    -- Print_Field --
!    -----------------
  
!    --  Instantiations of low-level getters and setters that take offsets
!    --  in units of the size of the field.
  
!    use Atree.Atree_Private_Part;
  
!    function Get_Flag is new Get_1_Bit_Field
!      (Boolean) with Inline;
  
!    function Get_Node_Id is new Get_32_Bit_Field
!      (Node_Id) with Inline;
  
!    function Get_List_Id is new Get_32_Bit_Field
!      (List_Id) with Inline;
  
!    function Get_Elist_Id is new Get_32_Bit_Field_With_Default
!      (Elist_Id, No_Elist) with Inline;
  
!    function Get_Name_Id is new Get_32_Bit_Field
!      (Name_Id) with Inline;
  
!    function Get_String_Id is new Get_32_Bit_Field
!      (String_Id) with Inline;
  
!    function Get_Uint is new Get_32_Bit_Field_With_Default
!      (Uint, Uint_0) with Inline;
  
!    function Get_Valid_Uint is new Get_32_Bit_Field
!      (Uint) with Inline;
!    --  Used for both Valid_Uint and other subtypes of Uint. Note that we don't
!    --  instantiate Get_Valid_32_Bit_Field; we don't want to blow up if the
!    --  value is wrong.
  
!    function Get_Ureal is new Get_32_Bit_Field
!      (Ureal) with Inline;
  
!    function Get_Node_Kind_Type is new Get_8_Bit_Field
!      (Node_Kind) with Inline;
  
!    function Get_Entity_Kind_Type is new Get_8_Bit_Field
!      (Entity_Kind) with Inline;
  
!    function Get_Source_Ptr is new Get_32_Bit_Field
!      (Source_Ptr) with Inline, Unreferenced;
  
!    function Get_Small_Paren_Count_Type is new Get_2_Bit_Field
!      (Small_Paren_Count_Type) with Inline, Unreferenced;
  
!    function Get_Union_Id is new Get_32_Bit_Field
!      (Union_Id) with Inline;
  
!    function Get_Convention_Id is new Get_8_Bit_Field
!      (Convention_Id) with Inline, Unreferenced;
  
!    function Get_Mechanism_Type is new Get_32_Bit_Field
!      (Mechanism_Type) with Inline, Unreferenced;
  
     procedure Print_Field (Val : Union_Id; Format : UI_Format := Auto) is
     begin
*************** package body Treepr is
*** 860,865 ****
--- 773,1052 ----
        end if;
     end Print_Field;
  
+    procedure Print_Field
+      (Prefix : String;
+       Field  : String;
+       N      : Node_Or_Entity_Id;
+       FD     : Field_Descriptor;
+       Format : UI_Format)
+    is
+       Printed : Boolean := False;
+ 
+       procedure Print_Initial;
+       --  Print the initial stuff that goes before the value
+ 
+       -------------------
+       -- Print_Initial --
+       -------------------
+ 
+       procedure Print_Initial is
+       begin
+          Printed := True;
+          Print_Str (Prefix);
+          Print_Str (Field);
+ 
+          if Print_Low_Level_Info then
+             Write_Str (" at ");
+             Write_Int (Int (FD.Offset));
+          end if;
+ 
+          Write_Str (" = ");
+       end Print_Initial;
+ 
+    --  Start of processing for Print_Field
+ 
+    begin
+       if Phase /= Printing then
+          return;
+       end if;
+ 
+       case FD.Kind is
+          when Flag_Field =>
+             declare
+                Val : constant Boolean := Get_Flag (N, FD.Offset);
+             begin
+                if Val then
+                   Print_Initial;
+                   Print_Flag (Val);
+                end if;
+             end;
+ 
+          when Node_Id_Field =>
+             declare
+                Val : constant Node_Id := Get_Node_Id (N, FD.Offset);
+             begin
+                if Present (Val) then
+                   Print_Initial;
+                   Print_Node_Ref (Val);
+                end if;
+             end;
+ 
+          when List_Id_Field =>
+             declare
+                Val : constant List_Id := Get_List_Id (N, FD.Offset);
+             begin
+                if Present (Val) then
+                   Print_Initial;
+                   Print_List_Ref (Val);
+                end if;
+             end;
+ 
+          when Elist_Id_Field =>
+             declare
+                Val : constant Elist_Id := Get_Elist_Id (N, FD.Offset);
+             begin
+                if Present (Val) then
+                   Print_Initial;
+                   Print_Elist_Ref (Val);
+                end if;
+             end;
+ 
+          when Name_Id_Field =>
+             declare
+                Val : constant Name_Id := Get_Name_Id (N, FD.Offset);
+             begin
+                if Present (Val) then
+                   Print_Initial;
+                   Print_Name (Val);
+                   Write_Str (" (Name_Id=");
+                   Write_Int (Int (Val));
+                   Write_Char (')');
+                end if;
+             end;
+ 
+          when String_Id_Field =>
+             declare
+                Val : constant String_Id := Get_String_Id (N, FD.Offset);
+             begin
+                if Val /= No_String then
+                   Print_Initial;
+                   Write_String_Table_Entry (Val);
+                   Write_Str (" (String_Id=");
+                   Write_Int (Int (Val));
+                   Write_Char (')');
+                end if;
+             end;
+ 
+          when Uint_Field =>
+             declare
+                Val : constant Uint := Get_Uint (N, FD.Offset);
+                function Cast is new Unchecked_Conversion (Uint, Int);
+             begin
+                if Present (Val) then
+                   Print_Initial;
+                   UI_Write (Val, Format);
+                   Write_Str (" (Uint = ");
+                   Write_Int (Cast (Val));
+                   Write_Char (')');
+                end if;
+             end;
+ 
+          when Valid_Uint_Field | Unat_Field | Upos_Field
+             | Nonzero_Uint_Field =>
+             declare
+                Val : constant Uint := Get_Valid_Uint (N, FD.Offset);
+                function Cast is new Unchecked_Conversion (Uint, Int);
+             begin
+                Print_Initial;
+                UI_Write (Val, Format);
+ 
+                case FD.Kind is
+                   when Valid_Uint_Field => Write_Str (" v");
+                   when Unat_Field => Write_Str (" n");
+                   when Upos_Field => Write_Str (" p");
+                   when Nonzero_Uint_Field => Write_Str (" nz");
+                   when others => raise Program_Error;
+                end case;
+ 
+                Write_Str (" (Uint = ");
+                Write_Int (Cast (Val));
+                Write_Char (')');
+             end;
+ 
+          when Ureal_Field =>
+             declare
+                Val : constant Ureal := Get_Ureal (N, FD.Offset);
+                function Cast is new Unchecked_Conversion (Ureal, Int);
+             begin
+                if Val /= No_Ureal then
+                   Print_Initial;
+                   UR_Write (Val);
+                   Write_Str (" (Ureal = ");
+                   Write_Int (Cast (Val));
+                   Write_Char (')');
+                end if;
+             end;
+ 
+          when Node_Kind_Type_Field =>
+             declare
+                Val : constant Node_Kind := Get_Node_Kind_Type (N, FD.Offset);
+             begin
+                Print_Initial;
+                Print_Str_Mixed_Case (Node_Kind'Image (Val));
+             end;
+ 
+          when Entity_Kind_Type_Field =>
+             declare
+                Val : constant Entity_Kind :=
+                  Get_Entity_Kind_Type (N, FD.Offset);
+             begin
+                Print_Initial;
+                Print_Str_Mixed_Case (Entity_Kind'Image (Val));
+             end;
+ 
+          when Union_Id_Field =>
+             declare
+                Val : constant Union_Id := Get_Union_Id (N, FD.Offset);
+             begin
+                if Val /= Empty_List_Or_Node then
+                   Print_Initial;
+ 
+                   if Val in Node_Range then
+                      Print_Node_Ref (Node_Id (Val));
+ 
+                   elsif Val in List_Range then
+                      Print_List_Ref (List_Id (Val));
+ 
+                   else
+                      Print_Str ("<invalid union id>");
+                   end if;
+                end if;
+             end;
+ 
+          when others =>
+             Print_Initial;
+             Print_Str ("<unknown ");
+             Print_Str (Field_Kind'Image (FD.Kind));
+             Print_Str (">");
+       end case;
+ 
+       if Printed then
+          Print_Eol;
+       end if;
+ 
+    --  If an exception is raised while printing, we try to print some low-level
+    --  information that is useful for debugging.
+ 
+    exception
+       when others =>
+          declare
+             function Cast is new Unchecked_Conversion (Field_Size_32_Bit, Int);
+          begin
+             Write_Eol;
+             Print_Initial;
+             Write_Str ("exception raised in Print_Field -- int val = ");
+             Write_Eol;
+ 
+             case Field_Size (FD.Kind) is
+                when 1 => Write_Int (Int (Get_1_Bit_Val (N, FD.Offset)));
+                when 2 => Write_Int (Int (Get_2_Bit_Val (N, FD.Offset)));
+                when 4 => Write_Int (Int (Get_4_Bit_Val (N, FD.Offset)));
+                when 8 => Write_Int (Int (Get_8_Bit_Val (N, FD.Offset)));
+                when others =>  -- 32
+                   Write_Int (Cast (Get_32_Bit_Val (N, FD.Offset)));
+             end case;
+ 
+             Write_Str (", ");
+             Write_Str (FD.Kind'Img);
+             Write_Str (" ");
+             Write_Int (Int (Field_Size (FD.Kind)));
+             Write_Str (" bits");
+             Write_Eol;
+          exception
+             when others =>
+                Write_Eol;
+                Write_Str ("double exception raised in Print_Field");
+                Write_Eol;
+          end;
+    end Print_Field;
+ 
+    ----------------------
+    -- Print_Node_Field --
+    ----------------------
+ 
+    procedure Print_Node_Field
+      (Prefix : String;
+       Field  : Node_Field;
+       N      : Node_Id;
+       FD     : Field_Descriptor;
+       Format : UI_Format := Auto)
+    is
+       pragma Assert (FD.Type_Only = No_Type_Only);
+       --  Type_Only is for entities
+    begin
+       if not Field_Is_Initial_Zero (N, Field) then
+          Print_Field (Prefix, Image (Field), N, FD, Format);
+       end if;
+    end Print_Node_Field;
+ 
+    ------------------------
+    -- Print_Entity_Field --
+    ------------------------
+ 
+    procedure Print_Entity_Field
+      (Prefix : String;
+       Field  : Entity_Field;
+       N      : Entity_Id;
+       FD     : Field_Descriptor;
+       Format : UI_Format := Auto)
+    is
+       NN : constant Node_Id := Node_To_Fetch_From (N, Field);
+    begin
+       if not Field_Is_Initial_Zero (N, Field) then
+          Print_Field (Prefix, Image (Field), NN, FD, Format);
+       end if;
+    end Print_Entity_Field;
+ 
     ----------------
     -- Print_Flag --
     ----------------
*************** package body Treepr is
*** 878,900 ****
     ----------------
  
     procedure Print_Init is
-       Max_Hash_Entries : constant Nat :=
-         Approx_Num_Nodes_And_Entities + Num_Lists + Num_Elists;
     begin
        Printing_Descendants := True;
        Write_Eol;
  
!       --  Allocate and clear serial number hash table. The size is 150% of
!       --  the maximum possible number of entries, so that the hash table
!       --  cannot get significantly overloaded.
! 
!       Hash_Table_Len := (150 * Max_Hash_Entries) / 100;
!       Hash_Table := new Hash_Table_Type  (0 .. Hash_Table_Len - 1);
! 
!       for J in Hash_Table'Range loop
!          Hash_Table (J).Serial := 0;
!       end loop;
! 
     end Print_Init;
  
     ---------------
--- 1065,1076 ----
     ----------------
  
     procedure Print_Init is
     begin
        Printing_Descendants := True;
        Write_Eol;
  
!       pragma Assert (not Serial_Numbers.Present (Hash_Table));
!       Hash_Table := Serial_Numbers.Create (512);
     end Print_Init;
  
     ---------------
*************** package body Treepr is
*** 979,985 ****
              Print_Char ('"');
  
           else
!             Print_Str ("<invalid name ???>");
           end if;
        end if;
     end Print_Name;
--- 1155,1161 ----
              Print_Char ('"');
  
           else
!             Print_Str ("<invalid name>");
           end if;
        end if;
     end Print_Name;
*************** package body Treepr is
*** 993,1006 ****
        Prefix_Str  : String;
        Prefix_Char : Character)
     is
!       F : Fchar;
!       P : Natural;
! 
!       Field_To_Be_Printed : Boolean;
!       Prefix_Str_Char     : String (Prefix_Str'First .. Prefix_Str'Last + 1);
  
        Sfile : Source_File_Index;
-       Fmt   : UI_Format;
  
     begin
        if Phase /= Printing then
--- 1169,1177 ----
        Prefix_Str  : String;
        Prefix_Char : Character)
     is
!       Prefix : constant String := Prefix_Str & Prefix_Char;
  
        Sfile : Source_File_Index;
  
     begin
        if Phase /= Printing then
*************** package body Treepr is
*** 1010,1034 ****
        --  If there is no such node, indicate that. Skip the rest, so we don't
        --  crash getting fields of the nonexistent node.
  
!       if N > Atree_Private_Part.Nodes.Last then
           Print_Str ("No such node: ");
           Print_Int (Int (N));
           Print_Eol;
           return;
        end if;
  
-       --  Similarly, if N points to an extension, avoid crashing
- 
-       if Atree_Private_Part.Nodes.Table (N).Is_Extension then
-          Print_Int (Int (N));
-          Print_Str (" is an extension, not a node");
-          Print_Eol;
-          return;
-       end if;
- 
-       Prefix_Str_Char (Prefix_Str'Range)    := Prefix_Str;
-       Prefix_Str_Char (Prefix_Str'Last + 1) := Prefix_Char;
- 
        --  Print header line
  
        Print_Str (Prefix_Str);
--- 1181,1193 ----
        --  If there is no such node, indicate that. Skip the rest, so we don't
        --  crash getting fields of the nonexistent node.
  
!       if not Is_Valid_Node (Union_Id (N)) then
           Print_Str ("No such node: ");
           Print_Int (Int (N));
           Print_Eol;
           return;
        end if;
  
        --  Print header line
  
        Print_Str (Prefix_Str);
*************** package body Treepr is
*** 1041,1046 ****
--- 1200,1209 ----
           Print_Eol;
        end if;
  
+       if Print_Low_Level_Info then
+          Print_Atree_Info (N);
+       end if;
+ 
        if N = Empty then
           return;
        end if;
*************** package body Treepr is
*** 1055,1061 ****
        --  Print Sloc field if it is set
  
        if Sloc (N) /= No_Location then
!          Print_Str (Prefix_Str_Char);
           Print_Str ("Sloc = ");
  
           if Sloc (N) = Standard_Location then
--- 1218,1224 ----
        --  Print Sloc field if it is set
  
        if Sloc (N) /= No_Location then
!          Print_Str (Prefix);
           Print_Str ("Sloc = ");
  
           if Sloc (N) = Standard_Location then
*************** package body Treepr is
*** 1076,1089 ****
  
        --  Print Chars field if present
  
!       if Nkind (N) in N_Has_Chars and then Chars (N) /= No_Name then
!          Print_Str (Prefix_Str_Char);
!          Print_Str ("Chars = ");
!          Print_Name (Chars (N));
!          Write_Str (" (Name_Id=");
!          Write_Int (Int (Chars (N)));
!          Write_Char (')');
!          Print_Eol;
        end if;
  
        --  Special field print operations for non-entity nodes
--- 1239,1259 ----
  
        --  Print Chars field if present
  
!       if Nkind (N) in N_Has_Chars then
!          if Field_Is_Initial_Zero (N, F_Chars) then
!             Print_Str (Prefix);
!             Print_Str ("Chars = initial zero");
!             Print_Eol;
! 
!          elsif Chars (N) /= No_Name then
!             Print_Str (Prefix);
!             Print_Str ("Chars = ");
!             Print_Name (Chars (N));
!             Write_Str (" (Name_Id=");
!             Write_Int (Int (Chars (N)));
!             Write_Char (')');
!             Print_Eol;
!          end if;
        end if;
  
        --  Special field print operations for non-entity nodes
*************** package body Treepr is
*** 1099,1105 ****
              --  Print Left_Opnd if present
  
              if Nkind (N) not in N_Unary_Op then
!                Print_Str (Prefix_Str_Char);
                 Print_Str ("Left_Opnd = ");
                 Print_Node_Ref (Left_Opnd (N));
                 Print_Eol;
--- 1269,1275 ----
              --  Print Left_Opnd if present
  
              if Nkind (N) not in N_Unary_Op then
!                Print_Str (Prefix);
                 Print_Str ("Left_Opnd = ");
                 Print_Node_Ref (Left_Opnd (N));
                 Print_Eol;
*************** package body Treepr is
*** 1107,1126 ****
  
              --  Print Right_Opnd
  
!             Print_Str (Prefix_Str_Char);
              Print_Str ("Right_Opnd = ");
              Print_Node_Ref (Right_Opnd (N));
              Print_Eol;
           end if;
  
!          --  Print Entity field if operator (other cases of Entity
!          --  are in the table, so are handled in the normal circuit)
  
!          if Nkind (N) in N_Op and then Present (Entity (N)) then
!             Print_Str (Prefix_Str_Char);
              Print_Str ("Entity = ");
              Print_Node_Ref (Entity (N));
              Print_Eol;
           end if;
  
           --  Print special fields if we have a subexpression
--- 1277,1304 ----
  
              --  Print Right_Opnd
  
!             Print_Str (Prefix);
              Print_Str ("Right_Opnd = ");
              Print_Node_Ref (Right_Opnd (N));
              Print_Eol;
           end if;
  
!          --  Deal with Entity_Or_Associated_Node. If N has both, then just
!          --  print Entity; they are the same thing.
  
!          if N in N_Inclusive_Has_Entity and then Present (Entity (N)) then
!             Print_Str (Prefix);
              Print_Str ("Entity = ");
              Print_Node_Ref (Entity (N));
              Print_Eol;
+ 
+          elsif N in N_Has_Associated_Node
+            and then Present (Associated_Node (N))
+          then
+             Print_Str (Prefix);
+             Print_Str ("Associated_Node = ");
+             Print_Node_Ref (Associated_Node (N));
+             Print_Eol;
           end if;
  
           --  Print special fields if we have a subexpression
*************** package body Treepr is
*** 1128,1189 ****
           if Nkind (N) in N_Subexpr then
  
              if Assignment_OK (N) then
!                Print_Str (Prefix_Str_Char);
                 Print_Str ("Assignment_OK = True");
                 Print_Eol;
              end if;
  
              if Do_Range_Check (N) then
!                Print_Str (Prefix_Str_Char);
                 Print_Str ("Do_Range_Check = True");
                 Print_Eol;
              end if;
  
              if Has_Dynamic_Length_Check (N) then
!                Print_Str (Prefix_Str_Char);
                 Print_Str ("Has_Dynamic_Length_Check = True");
                 Print_Eol;
              end if;
  
              if Has_Aspects (N) then
!                Print_Str (Prefix_Str_Char);
                 Print_Str ("Has_Aspects = True");
                 Print_Eol;
              end if;
  
              if Is_Controlling_Actual (N) then
!                Print_Str (Prefix_Str_Char);
                 Print_Str ("Is_Controlling_Actual = True");
                 Print_Eol;
              end if;
  
              if Is_Overloaded (N) then
!                Print_Str (Prefix_Str_Char);
                 Print_Str ("Is_Overloaded = True");
                 Print_Eol;
              end if;
  
              if Is_Static_Expression (N) then
!                Print_Str (Prefix_Str_Char);
                 Print_Str ("Is_Static_Expression = True");
                 Print_Eol;
              end if;
  
              if Must_Not_Freeze (N) then
!                Print_Str (Prefix_Str_Char);
                 Print_Str ("Must_Not_Freeze = True");
                 Print_Eol;
              end if;
  
              if Paren_Count (N) /= 0 then
!                Print_Str (Prefix_Str_Char);
                 Print_Str ("Paren_Count = ");
                 Print_Int (Int (Paren_Count (N)));
                 Print_Eol;
              end if;
  
              if Raises_Constraint_Error (N) then
!                Print_Str (Prefix_Str_Char);
                 Print_Str ("Raises_Constraint_Error = True");
                 Print_Eol;
              end if;
--- 1306,1367 ----
           if Nkind (N) in N_Subexpr then
  
              if Assignment_OK (N) then
!                Print_Str (Prefix);
                 Print_Str ("Assignment_OK = True");
                 Print_Eol;
              end if;
  
              if Do_Range_Check (N) then
!                Print_Str (Prefix);
                 Print_Str ("Do_Range_Check = True");
                 Print_Eol;
              end if;
  
              if Has_Dynamic_Length_Check (N) then
!                Print_Str (Prefix);
                 Print_Str ("Has_Dynamic_Length_Check = True");
                 Print_Eol;
              end if;
  
              if Has_Aspects (N) then
!                Print_Str (Prefix);
                 Print_Str ("Has_Aspects = True");
                 Print_Eol;
              end if;
  
              if Is_Controlling_Actual (N) then
!                Print_Str (Prefix);
                 Print_Str ("Is_Controlling_Actual = True");
                 Print_Eol;
              end if;
  
              if Is_Overloaded (N) then
!                Print_Str (Prefix);
                 Print_Str ("Is_Overloaded = True");
                 Print_Eol;
              end if;
  
              if Is_Static_Expression (N) then
!                Print_Str (Prefix);
                 Print_Str ("Is_Static_Expression = True");
                 Print_Eol;
              end if;
  
              if Must_Not_Freeze (N) then
!                Print_Str (Prefix);
                 Print_Str ("Must_Not_Freeze = True");
                 Print_Eol;
              end if;
  
              if Paren_Count (N) /= 0 then
!                Print_Str (Prefix);
                 Print_Str ("Paren_Count = ");
                 Print_Int (Int (Paren_Count (N)));
                 Print_Eol;
              end if;
  
              if Raises_Constraint_Error (N) then
!                Print_Str (Prefix);
                 Print_Str ("Raises_Constraint_Error = True");
                 Print_Eol;
              end if;
*************** package body Treepr is
*** 1193,1199 ****
           --  Print Do_Overflow_Check field if present
  
           if Nkind (N) in N_Op and then Do_Overflow_Check (N) then
!             Print_Str (Prefix_Str_Char);
              Print_Str ("Do_Overflow_Check = True");
              Print_Eol;
           end if;
--- 1371,1377 ----
           --  Print Do_Overflow_Check field if present
  
           if Nkind (N) in N_Op and then Do_Overflow_Check (N) then
!             Print_Str (Prefix);
              Print_Str ("Do_Overflow_Check = True");
              Print_Eol;
           end if;
*************** package body Treepr is
*** 1202,1333 ****
           --  is handled by the Print_Entity_Info procedure).
  
           if Nkind (N) in N_Has_Etype and then Present (Etype (N)) then
!             Print_Str (Prefix_Str_Char);
              Print_Str ("Etype = ");
              Print_Node_Ref (Etype (N));
              Print_Eol;
           end if;
        end if;
  
!       --  Loop to print fields included in Pchars array
! 
!       P := Pchar_Pos (Nkind (N));
! 
!       if Nkind (N) = N_Integer_Literal and then Print_In_Hex (N) then
!          Fmt := Hex;
!       else
!          Fmt := Auto;
!       end if;
! 
!       while P < Pchar_Pos (Node_Kind'Succ (Nkind (N))) loop
!          F := Pchars (P);
!          P := P + 1;
! 
!          --  Check for case of False flag, which we never print, or an Empty
!          --  field, which is also never printed.
! 
!          case F is
!             when F_Field1 =>
!                Field_To_Be_Printed := Field1 (N) /= Union_Id (Empty);
! 
!             when F_Field2 =>
!                Field_To_Be_Printed := Field2 (N) /= Union_Id (Empty);
! 
!             when F_Field3 =>
!                Field_To_Be_Printed := Field3 (N) /= Union_Id (Empty);
! 
!             when F_Field4 =>
!                Field_To_Be_Printed := Field4 (N) /= Union_Id (Empty);
! 
!             when F_Field5 =>
!                Field_To_Be_Printed := Field5 (N) /= Union_Id (Empty);
! 
!             when F_Flag1  => Field_To_Be_Printed := Flag1  (N);
!             when F_Flag2  => Field_To_Be_Printed := Flag2  (N);
!             when F_Flag3  => Field_To_Be_Printed := Flag3  (N);
!             when F_Flag4  => Field_To_Be_Printed := Flag4  (N);
!             when F_Flag5  => Field_To_Be_Printed := Flag5  (N);
!             when F_Flag6  => Field_To_Be_Printed := Flag6  (N);
!             when F_Flag7  => Field_To_Be_Printed := Flag7  (N);
!             when F_Flag8  => Field_To_Be_Printed := Flag8  (N);
!             when F_Flag9  => Field_To_Be_Printed := Flag9  (N);
!             when F_Flag10 => Field_To_Be_Printed := Flag10 (N);
!             when F_Flag11 => Field_To_Be_Printed := Flag11 (N);
!             when F_Flag12 => Field_To_Be_Printed := Flag12 (N);
!             when F_Flag13 => Field_To_Be_Printed := Flag13 (N);
!             when F_Flag14 => Field_To_Be_Printed := Flag14 (N);
!             when F_Flag15 => Field_To_Be_Printed := Flag15 (N);
!             when F_Flag16 => Field_To_Be_Printed := Flag16 (N);
!             when F_Flag17 => Field_To_Be_Printed := Flag17 (N);
!             when F_Flag18 => Field_To_Be_Printed := Flag18 (N);
!          end case;
! 
!          --  Print field if it is to be printed
  
!          if Field_To_Be_Printed then
!             Print_Str (Prefix_Str_Char);
  
!             while P < Pchar_Pos (Node_Kind'Succ (Nkind (N)))
!               and then Pchars (P) not in Fchar
!             loop
!                Print_Char (Pchars (P));
!                P := P + 1;
!             end loop;
  
!             Print_Str (" = ");
  
!             case F is
!                when F_Field1 => Print_Field (Field1 (N), Fmt);
!                when F_Field2 => Print_Field (Field2 (N), Fmt);
!                when F_Field3 => Print_Field (Field3 (N), Fmt);
!                when F_Field4 => Print_Field (Field4 (N), Fmt);
  
!                --  Special case End_Span = Uint5
  
!                when F_Field5 =>
!                   if Nkind (N) in N_Case_Statement | N_If_Statement then
!                      Print_End_Span (N);
!                   else
!                      Print_Field (Field5 (N), Fmt);
                    end if;
! 
!                when F_Flag1  => Print_Flag (Flag1 (N));
!                when F_Flag2  => Print_Flag (Flag2 (N));
!                when F_Flag3  => Print_Flag (Flag3 (N));
!                when F_Flag4  => Print_Flag (Flag4 (N));
!                when F_Flag5  => Print_Flag (Flag5 (N));
!                when F_Flag6  => Print_Flag (Flag6 (N));
!                when F_Flag7  => Print_Flag (Flag7 (N));
!                when F_Flag8  => Print_Flag (Flag8 (N));
!                when F_Flag9  => Print_Flag (Flag9 (N));
!                when F_Flag10 => Print_Flag (Flag10 (N));
!                when F_Flag11 => Print_Flag (Flag11 (N));
!                when F_Flag12 => Print_Flag (Flag12 (N));
!                when F_Flag13 => Print_Flag (Flag13 (N));
!                when F_Flag14 => Print_Flag (Flag14 (N));
!                when F_Flag15 => Print_Flag (Flag15 (N));
!                when F_Flag16 => Print_Flag (Flag16 (N));
!                when F_Flag17 => Print_Flag (Flag17 (N));
!                when F_Flag18 => Print_Flag (Flag18 (N));
!             end case;
! 
!             Print_Eol;
! 
!          --  Field is not to be printed (False flag field)
! 
!          else
!             while P < Pchar_Pos (Node_Kind'Succ (Nkind (N)))
!               and then Pchars (P) not in Fchar
!             loop
!                P := P + 1;
              end loop;
!          end if;
!       end loop;
  
        --  Print aspects if present
  
        if Has_Aspects (N) then
!          Print_Str (Prefix_Str_Char);
           Print_Str ("Aspect_Specifications = ");
           Print_Field (Union_Id (Aspect_Specifications (N)));
           Print_Eol;
--- 1380,1464 ----
           --  is handled by the Print_Entity_Info procedure).
  
           if Nkind (N) in N_Has_Etype and then Present (Etype (N)) then
!             Print_Str (Prefix);
              Print_Str ("Etype = ");
              Print_Node_Ref (Etype (N));
              Print_Eol;
           end if;
        end if;
  
!       declare
!          Fields : Node_Field_Array renames Node_Field_Table (Nkind (N)).all;
!          Should_Print : constant Node_Field_Set :=
!            --  Set of fields that should be printed. False for fields that were
!            --  already printed above, and for In_List, which we don't bother
!            --  printing.
!            (F_Nkind
!             | F_Chars
!             | F_Comes_From_Source
!             | F_Analyzed
!             | F_Error_Posted
!             | F_Is_Ignored_Ghost_Node
!             | F_Check_Actuals
!             | F_Link -- Parent was printed
!             | F_Sloc
!             | F_Left_Opnd
!             | F_Right_Opnd
!             | F_Entity_Or_Associated_Node -- one of them was printed
!             | F_Assignment_OK
!             | F_Do_Range_Check
!             | F_Has_Dynamic_Length_Check
!             | F_Has_Aspects
!             | F_Is_Controlling_Actual
!             | F_Is_Overloaded
!             | F_Is_Static_Expression
!             | F_Must_Not_Freeze
!             | F_Small_Paren_Count -- Paren_Count was printed
!             | F_Raises_Constraint_Error
!             | F_Do_Overflow_Check
!             | F_Etype
!             | F_In_List
!               => False,
  
!             others => True);
  
!          Fmt : constant UI_Format :=
!            (if Nkind (N) = N_Integer_Literal and then Print_In_Hex (N)
!             then Hex
!             else Auto);
  
!       begin
!          --  Outer loop makes flags come out last
  
!          for Print_Flags in Boolean loop
!             for Field_Index in Fields'Range loop
!                declare
!                   FD : Field_Descriptor renames
!                     Field_Descriptors (Fields (Field_Index));
!                begin
!                   if Should_Print (Fields (Field_Index))
!                     and then (FD.Kind = Flag_Field) = Print_Flags
!                   then
!                      --  Special case for End_Span, which also prints the
!                      --  End_Location.
  
!                      if Fields (Field_Index) = F_End_Span then
!                         Print_End_Span (N);
  
!                      else
!                         Print_Node_Field
!                           (Prefix, Fields (Field_Index), N, FD, Fmt);
!                      end if;
                    end if;
!                end;
              end loop;
!          end loop;
!       end;
  
        --  Print aspects if present
  
        if Has_Aspects (N) then
!          Print_Str (Prefix);
           Print_Str ("Aspect_Specifications = ");
           Print_Field (Union_Id (Aspect_Specifications (N)));
           Print_Eol;
*************** package body Treepr is
*** 1336,1348 ****
        --  Print entity information for entities
  
        if Nkind (N) in N_Entity then
!          Print_Entity_Info (N, Prefix_Str_Char);
        end if;
  
        --  Print the SCIL node (if available)
  
        if Present (Get_SCIL_Node (N)) then
!          Print_Str (Prefix_Str_Char);
           Print_Str ("SCIL_Node = ");
           Print_Node_Ref (Get_SCIL_Node (N));
           Print_Eol;
--- 1467,1479 ----
        --  Print entity information for entities
  
        if Nkind (N) in N_Entity then
!          Print_Entity_Info (N, Prefix);
        end if;
  
        --  Print the SCIL node (if available)
  
        if Present (Get_SCIL_Node (N)) then
!          Print_Str (Prefix);
           Print_Str ("SCIL_Node = ");
           Print_Node_Ref (Get_SCIL_Node (N));
           Print_Eol;
*************** package body Treepr is
*** 1393,1399 ****
     begin
        Print_Node_Ref (N);
  
!       if N > Atree_Private_Part.Nodes.Last then
           Print_Str (" (no such node)");
           Print_Eol;
           return;
--- 1524,1530 ----
     begin
        Print_Node_Ref (N);
  
!       if not Is_Valid_Node (Union_Id (N)) then
           Print_Str (" (no such node)");
           Print_Eol;
           return;
*************** package body Treepr is
*** 1433,1457 ****
     ---------------------
  
     procedure Print_Node_Kind (N : Node_Id) is
-       Ucase : Boolean;
-       S     : constant String := Node_Kind'Image (Nkind (N));
- 
     begin
        if Phase = Printing then
!          Ucase := True;
! 
!          --  Note: the call to Fold_Upper in this loop is to get past the GNAT
!          --  bug of 'Image returning lower case instead of upper case.
! 
!          for J in S'Range loop
!             if Ucase then
!                Write_Char (Fold_Upper (S (J)));
!             else
!                Write_Char (Fold_Lower (S (J)));
!             end if;
! 
!             Ucase := (S (J) = '_');
!          end loop;
        end if;
     end Print_Node_Kind;
  
--- 1564,1572 ----
     ---------------------
  
     procedure Print_Node_Kind (N : Node_Id) is
     begin
        if Phase = Printing then
!          Print_Str_Mixed_Case (Node_Kind'Image (Nkind (N)));
        end if;
     end Print_Node_Kind;
  
*************** package body Treepr is
*** 1489,1495 ****
  
           if Nkind (N) in N_Has_Chars then
              Write_Char (' ');
!             Print_Name (Chars (N));
           end if;
  
           if Nkind (N) in N_Entity then
--- 1604,1635 ----
  
           if Nkind (N) in N_Has_Chars then
              Write_Char (' ');
! 
!             if Field_Is_Initial_Zero (N, F_Chars) then
!                Print_Str ("Chars = initial zero");
!                Print_Eol;
! 
!             else
!                Print_Name (Chars (N));
!             end if;
!          end if;
! 
!          --  If this is a discrete expression whose value is known, print that
!          --  value.
! 
!          if Nkind (N) in N_Subexpr
!            and then Compile_Time_Known_Value (N)
!            and then Present (Etype (N))
!            and then Is_Discrete_Type (Etype (N))
!          then
!             if Is_Entity_Name (N) -- e.g. enumeration literal
!               or else Nkind (N) in N_Integer_Literal
!                                  | N_Character_Literal
!                                  | N_Unchecked_Type_Conversion
!             then
!                Print_Str (" val = ");
!                UI_Write (Expr_Value (N));
!             end if;
           end if;
  
           if Nkind (N) in N_Entity then
*************** package body Treepr is
*** 1544,1565 ****
     --------------------------
  
     procedure Print_Str_Mixed_Case (S : String) is
-       Ucase : Boolean;
- 
     begin
!       if Phase = Printing then
!          Ucase := True;
! 
!          for J in S'Range loop
!             if Ucase then
!                Write_Char (S (J));
!             else
!                Write_Char (Fold_Lower (S (J)));
!             end if;
! 
!             Ucase := (S (J) = '_');
!          end loop;
!       end if;
     end Print_Str_Mixed_Case;
  
     ----------------
--- 1684,1691 ----
     --------------------------
  
     procedure Print_Str_Mixed_Case (S : String) is
     begin
!       Print_Str (To_Mixed (S));
     end Print_Str_Mixed_Case;
  
     ----------------
*************** package body Treepr is
*** 1567,1577 ****
     ----------------
  
     procedure Print_Term is
-       procedure Free is new Unchecked_Deallocation
-         (Hash_Table_Type, Access_Hash_Table_Type);
- 
     begin
!       Free (Hash_Table);
     end Print_Term;
  
     ---------------------
--- 1693,1700 ----
     ----------------
  
     procedure Print_Term is
     begin
!       Serial_Numbers.Destroy (Hash_Table);
     end Print_Term;
  
     ---------------------
*************** package body Treepr is
*** 1676,1715 ****
     -- Serial_Number --
     -------------------
  
!    --  The hashing algorithm is to use the remainder of the ID value divided
!    --  by the hash table length as the starting point in the table, and then
!    --  handle collisions by serial searching wrapping at the end of the table.
! 
!    Hash_Slot : Nat;
     --  Set by an unsuccessful call to Serial_Number (one which returns zero)
!    --  to save the slot that should be used if Set_Serial_Number is called.
  
     function Serial_Number (Id : Int) return Nat is
-       H : Int := Id mod Hash_Table_Len;
- 
     begin
!       while Hash_Table (H).Serial /= 0 loop
! 
!          if Id = Hash_Table (H).Id then
!             return Hash_Table (H).Serial;
!          end if;
! 
!          H := H + 1;
! 
!          if H > Hash_Table'Last then
!             H := 0;
!          end if;
!       end loop;
! 
!       --  Entry was not found, save slot number for possible subsequent call
!       --  to Set_Serial_Number, and unconditionally save the Id in this slot
!       --  in case of such a call (the Id field is never read if the serial
!       --  number of the slot is zero, so this is harmless in the case where
!       --  Set_Serial_Number is not subsequently called).
! 
!       Hash_Slot := H;
!       Hash_Table (H).Id := Id;
!       return 0;
     end Serial_Number;
  
     -----------------------
--- 1799,1812 ----
     -- Serial_Number --
     -------------------
  
!    Hash_Id : Int;
     --  Set by an unsuccessful call to Serial_Number (one which returns zero)
!    --  to save the Id that should be used if Set_Serial_Number is called.
  
     function Serial_Number (Id : Int) return Nat is
     begin
!       Hash_Id := Id;
!       return Serial_Numbers.Get (Hash_Table, Id);
     end Serial_Number;
  
     -----------------------
*************** package body Treepr is
*** 1718,1727 ****
  
     procedure Set_Serial_Number is
     begin
!       Hash_Table (Hash_Slot).Serial := Next_Serial_Number;
        Next_Serial_Number := Next_Serial_Number + 1;
     end Set_Serial_Number;
  
     ---------------
     -- Tree_Dump --
     ---------------
--- 1815,1835 ----
  
     procedure Set_Serial_Number is
     begin
!       Serial_Numbers.Put (Hash_Table, Hash_Id, Next_Serial_Number);
        Next_Serial_Number := Next_Serial_Number + 1;
     end Set_Serial_Number;
  
+    --------------
+    -- To_Mixed --
+    --------------
+ 
+    function To_Mixed (S : String) return String is
+    begin
+       return Result : String (S'Range) := S do
+          To_Mixed (Result);
+       end return;
+    end To_Mixed;
+ 
     ---------------
     -- Tree_Dump --
     ---------------
*************** package body Treepr is
*** 1919,1943 ****
        New_Prefix : String (Prefix_Str'First .. Prefix_Str'Last + 2);
        --  Prefix string for printing referenced fields
  
!       procedure Visit_Descendant
!         (D         : Union_Id;
!          No_Indent : Boolean := False);
        --  This procedure tests the given value of one of the Fields referenced
        --  by the current node to determine whether to visit it recursively.
!       --  Normally No_Indent is false, which means that the visited node will
!       --  be indented using New_Prefix. If No_Indent is set to True, then
!       --  this indentation is skipped, and Prefix_Str is used for the call
!       --  to print the descendant. No_Indent is effective only if the
!       --  referenced descendant is a node.
  
        ----------------------
        -- Visit_Descendant --
        ----------------------
  
!       procedure Visit_Descendant
!         (D         : Union_Id;
!          No_Indent : Boolean := False)
!       is
        begin
           --  Case of descendant is a node
  
--- 2027,2042 ----
        New_Prefix : String (Prefix_Str'First .. Prefix_Str'Last + 2);
        --  Prefix string for printing referenced fields
  
!       procedure Visit_Descendant (D : Union_Id);
        --  This procedure tests the given value of one of the Fields referenced
        --  by the current node to determine whether to visit it recursively.
!       --  The visited node will be indented using New_Prefix.
  
        ----------------------
        -- Visit_Descendant --
        ----------------------
  
!       procedure Visit_Descendant (D : Union_Id) is
        begin
           --  Case of descendant is a node
  
*************** package body Treepr is
*** 2010,2020 ****
                 --  execute a return if the node is not to be visited), we can
                 --  go ahead and visit the node.
  
!                if No_Indent then
!                   Visit_Node (Nod, Prefix_Str, Prefix_Char);
!                else
!                   Visit_Node (Nod, New_Prefix, ' ');
!                end if;
              end;
  
           --  Case of descendant is a list
--- 2109,2115 ----
                 --  execute a return if the node is not to be visited), we can
                 --  go ahead and visit the node.
  
!                Visit_Node (Nod, New_Prefix, ' ');
              end;
  
           --  Case of descendant is a list
*************** package body Treepr is
*** 2060,2072 ****
                 Visit_Elist (Elist_Id (D), New_Prefix);
              end if;
  
-          --  For all other kinds of descendants (strings, names, uints etc),
-          --  there is nothing to visit (the contents of the field will be
-          --  printed when we print the containing node, but what concerns
-          --  us now is looking for descendants in the tree.
- 
           else
!             null;
           end if;
        end Visit_Descendant;
  
--- 2155,2162 ----
                 Visit_Elist (Elist_Id (D), New_Prefix);
              end if;
  
           else
!             raise Program_Error;
           end if;
        end Visit_Descendant;
  
*************** package body Treepr is
*** 2129,2170 ****
  
        --  Visit all descendants of this node
  
!       if Nkind (N) not in N_Entity then
!          Visit_Descendant (Field1 (N));
!          Visit_Descendant (Field2 (N));
!          Visit_Descendant (Field3 (N));
!          Visit_Descendant (Field4 (N));
!          Visit_Descendant (Field5 (N));
  
!          if Has_Aspects (N) then
!             Visit_Descendant (Union_Id (Aspect_Specifications (N)));
!          end if;
  
!       --  Entity case
  
!       else
!          Visit_Descendant (Field1 (N));
!          Visit_Descendant (Field3 (N));
!          Visit_Descendant (Field4 (N));
!          Visit_Descendant (Field5 (N));
!          Visit_Descendant (Field6 (N));
!          Visit_Descendant (Field7 (N));
!          Visit_Descendant (Field8 (N));
!          Visit_Descendant (Field9 (N));
!          Visit_Descendant (Field10 (N));
!          Visit_Descendant (Field11 (N));
!          Visit_Descendant (Field12 (N));
!          Visit_Descendant (Field13 (N));
!          Visit_Descendant (Field14 (N));
!          Visit_Descendant (Field15 (N));
!          Visit_Descendant (Field16 (N));
!          Visit_Descendant (Field17 (N));
!          Visit_Descendant (Field18 (N));
!          Visit_Descendant (Field19 (N));
!          Visit_Descendant (Field20 (N));
!          Visit_Descendant (Field21 (N));
!          Visit_Descendant (Field22 (N));
!          Visit_Descendant (Field23 (N));
  
           --  Now an interesting special case. Normally parents are always
           --  printed since we traverse the tree in a downwards direction.
--- 2219,2267 ----
  
        --  Visit all descendants of this node
  
!       declare
!          A : Node_Field_Array renames Node_Field_Table (Nkind (N)).all;
!       begin
!          for Field_Index in A'Range loop
!             declare
!                F : constant Node_Field := A (Field_Index);
!                FD : Field_Descriptor renames Field_Descriptors (F);
!             begin
!                if FD.Kind in Node_Id_Field | List_Id_Field | Elist_Id_Field
!                   --  For all other kinds of descendants (strings, names, uints
!                   --  etc), there is nothing to visit (the contents of the
!                   --  field will be printed when we print the containing node,
!                   --  but what concerns us now is looking for descendants in
!                   --  the tree.
  
!                  and then F /= F_Next_Entity -- See below for why we skip this
!                then
!                   Visit_Descendant (Get_Union_Id (N, FD.Offset));
!                end if;
!             end;
!          end loop;
!       end;
  
!       if Has_Aspects (N) then
!          Visit_Descendant (Union_Id (Aspect_Specifications (N)));
!       end if;
  
!       if Nkind (N) in N_Entity then
!          declare
!             A : Entity_Field_Array renames Entity_Field_Table (Ekind (N)).all;
!          begin
!             for Field_Index in A'Range loop
!                declare
!                   F : constant Entity_Field := A (Field_Index);
!                   FD : Field_Descriptor renames Field_Descriptors (F);
!                begin
!                   if FD.Kind in Node_Id_Field | List_Id_Field | Elist_Id_Field
!                   then
!                      Visit_Descendant (Get_Union_Id (N, FD.Offset));
!                   end if;
!                end;
!             end loop;
!          end;
  
           --  Now an interesting special case. Normally parents are always
           --  printed since we traverse the tree in a downwards direction.
*************** package body Treepr is
*** 2176,2187 ****
              Visit_Descendant (Union_Id (Parent (N)));
           end if;
  
!          --  You may be wondering why we omitted Field2 above. The answer
!          --  is that this is the Next_Entity field, and we want to treat
!          --  it rather specially. Why? Because a Next_Entity link does not
!          --  correspond to a level deeper in the tree, and we do not want
!          --  the tree to march off to the right of the page due to bogus
!          --  indentations coming from this effect.
  
           --  To prevent this, what we do is to control references via
           --  Next_Entity only from the first entity on a given scope chain,
--- 2273,2283 ----
              Visit_Descendant (Union_Id (Parent (N)));
           end if;
  
!          --  You may be wondering why we omitted Next_Entity above. The answer
!          --  is that we want to treat it rather specially. Why? Because a
!          --  Next_Entity link does not correspond to a level deeper in the
!          --  tree, and we do not want the tree to march off to the right of the
!          --  page due to bogus indentations coming from this effect.
  
           --  To prevent this, what we do is to control references via
           --  Next_Entity only from the first entity on a given scope chain,
*************** package body Treepr is
*** 2198,2205 ****
              begin
                 Nod := N;
                 while Present (Nod) loop
-                   Visit_Descendant (Union_Id (Next_Entity (Nod)));
                    Next_Entity (Nod);
                 end loop;
              end;
           end if;
--- 2294,2301 ----
              begin
                 Nod := N;
                 while Present (Nod) loop
                    Next_Entity (Nod);
+                   Visit_Descendant (Union_Id (Nod));
                 end loop;
              end;
           end if;
diff -Nrcpad gcc-11.3.0/gcc/ada/treepr.ads gcc-12.1.0/gcc/ada/treepr.ads
*** gcc-11.3.0/gcc/ada/treepr.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/treepr.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 26,32 ****
  with Types; use Types;
  package Treepr is
  
! --  This package provides printing routines for the abstract syntax tree
  --  These routines are intended only for debugging use.
  
     procedure Tree_Dump;
--- 26,32 ----
  with Types; use Types;
  package Treepr is
  
! --  This package provides printing routines for the abstract syntax tree.
  --  These routines are intended only for debugging use.
  
     procedure Tree_Dump;
*************** package Treepr is
*** 42,52 ****
  
     procedure Print_Tree_List (L : List_Id);
     --  Prints a single node list, without printing the descendants of any
!    --  of the nodes in the list
  
     procedure Print_Tree_Elist (E : Elist_Id);
     --  Prints a single node list, without printing the descendants of any
!    --  of the nodes in the list
  
     procedure Print_Node_Subtree (N : Node_Id);
     --  Prints the subtree rooted at a specified tree node, including all
--- 42,52 ----
  
     procedure Print_Tree_List (L : List_Id);
     --  Prints a single node list, without printing the descendants of any
!    --  of the nodes in the list.
  
     procedure Print_Tree_Elist (E : Elist_Id);
     --  Prints a single node list, without printing the descendants of any
!    --  of the nodes in the list.
  
     procedure Print_Node_Subtree (N : Node_Id);
     --  Prints the subtree rooted at a specified tree node, including all
*************** package Treepr is
*** 80,86 ****
     pragma Export (Ada, pe);
     --  Print a node, node list, uint, or anything else that falls under
     --  the definition of Union_Id. Historically this was only for printing
!    --  nodes, hence the name.
  
     procedure ppar (N : Union_Id);
     pragma Export (Ada, ppar);
--- 80,87 ----
     pragma Export (Ada, pe);
     --  Print a node, node list, uint, or anything else that falls under
     --  the definition of Union_Id. Historically this was only for printing
!    --  nodes, hence the name pn. These are all the same, but the renamings
!    --  need to be in the body, or else the debugger can't find them.
  
     procedure ppar (N : Union_Id);
     pragma Export (Ada, ppar);
diff -Nrcpad gcc-11.3.0/gcc/ada/treeprs.adt gcc-12.1.0/gcc/ada/treeprs.adt
*** gcc-11.3.0/gcc/ada/treeprs.adt	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/treeprs.adt	Thu Jan  1 00:00:00 1970
***************
*** 1,107 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                         GNAT COMPILER COMPONENTS                         --
- --                                                                          --
- --                              T R E E P R S                               --
- --                                                                          --
- --                             T e m p l a t e                              --
- --                                                                          --
- --          Copyright (C) 1992-2013, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
- -- http://www.gnu.org/licenses for a complete copy of the license.          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- --  This file is a template used as input to the utility program XTreeprs,
- --  which reads this template, and the spec of Sinfo (sinfo.ads) and generates
- --  the spec for the Treeprs package (file treeprs.ads)
- 
- --  This package contains the declaration of the string used by the Tree_Print
- --  package. It must be updated whenever the arrangements of the field names
- --  in package Sinfo is changed. The utility program XTREEPRS is used to
- --  do this update correctly using the template treeprs.adt as input.
- 
- with Sinfo; use Sinfo;
- 
- package Treeprs is
- 
-    --------------------------------
-    -- String Data for Node Print --
-    --------------------------------
- 
-    --  String data for print out. The Pchars array is a long string with the
-    --  the entry for each node type consisting of a single blank, followed by
-    --  a series of entries, one for each Op or Flag field used for the node.
-    --  Each entry has a single character which identifies the field, followed
-    --  by the synonym name. The starting location for a given node type is
-    --  found from the corresponding entry in the Pchars_Pos_Array.
- 
-    --  The following characters identify the field. These are characters which
-    --  could never occur in a field name, so they also mark the end of the
-    --  previous name.
- 
-    --  Note the following definitions do not include Flag0. This will have to
-    --  be addressed if we ever need to use Flag0 (it's not currently used).
- 
-    subtype Fchar is Character range '#' .. '9';
- 
-    F_Field1     : constant Fchar := '#'; -- Character'Val (16#23#)
-    F_Field2     : constant Fchar := '$'; -- Character'Val (16#24#)
-    F_Field3     : constant Fchar := '%'; -- Character'Val (16#25#)
-    F_Field4     : constant Fchar := '&'; -- Character'Val (16#26#)
-    F_Field5     : constant Fchar := '''; -- Character'Val (16#27#)
-    F_Flag1      : constant Fchar := '('; -- Character'Val (16#28#)
-    F_Flag2      : constant Fchar := ')'; -- Character'Val (16#29#)
-    F_Flag3      : constant Fchar := '*'; -- Character'Val (16#2A#)
-    F_Flag4      : constant Fchar := '+'; -- Character'Val (16#2B#)
-    F_Flag5      : constant Fchar := ','; -- Character'Val (16#2C#)
-    F_Flag6      : constant Fchar := '-'; -- Character'Val (16#2D#)
-    F_Flag7      : constant Fchar := '.'; -- Character'Val (16#2E#)
-    F_Flag8      : constant Fchar := '/'; -- Character'Val (16#2F#)
-    F_Flag9      : constant Fchar := '0'; -- Character'Val (16#30#)
-    F_Flag10     : constant Fchar := '1'; -- Character'Val (16#31#)
-    F_Flag11     : constant Fchar := '2'; -- Character'Val (16#32#)
-    F_Flag12     : constant Fchar := '3'; -- Character'Val (16#33#)
-    F_Flag13     : constant Fchar := '4'; -- Character'Val (16#34#)
-    F_Flag14     : constant Fchar := '5'; -- Character'Val (16#35#)
-    F_Flag15     : constant Fchar := '6'; -- Character'Val (16#36#)
-    F_Flag16     : constant Fchar := '7'; -- Character'Val (16#37#)
-    F_Flag17     : constant Fchar := '8'; -- Character'Val (16#38#)
-    F_Flag18     : constant Fchar := '9'; -- Character'Val (16#39#)
- 
-    --  Note this table does not include entity field and flags whose access
-    --  functions are in Einfo (these are handled by the Print_Entity_Info
-    --  procedure in Treepr, which uses the routines in Einfo to get the proper
-    --  symbolic information). In addition, the following fields are handled by
-    --  Treepr, and do not appear in the Pchars array:
- 
-    --    Analyzed
-    --    Cannot_Be_Constant
-    --    Chars
-    --    Comes_From_Source
-    --    Error_Posted
-    --    Etype
-    --    Is_Controlling_Actual
-    --    Is_Overloaded
-    --    Is_Static_Expression
-    --    Left_Opnd
-    --    Must_Check_Expr
-    --    Must_Not_Freeze
-    --    No_Overflow_Expr
-    --    Paren_Count
-    --    Raises_Constraint_Error
-    --    Right_Opnd
- 
- !!TEMPLATE INSERTION POINT
- 
- end Treeprs;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/ttypes.ads gcc-12.1.0/gcc/ada/ttypes.ads
*** gcc-11.3.0/gcc/ada/ttypes.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/ttypes.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 25,31 ****
  
  --  This package contains constants describing target properties
  
! with Types;    use Types;
  with Set_Targ;
  
  package Ttypes is
--- 25,31 ----
  
  --  This package contains constants describing target properties
  
! with Types; use Types;
  with Set_Targ;
  
  package Ttypes is
*************** package Ttypes is
*** 210,216 ****
                                 Set_Targ.Strict_Alignment /= 0;
     --  True if instructions will fail if data is misaligned. Note that this
     --  is a variable rather than a constant since it can be modified (set to
!    --  True) if the debug flag -gnatd.A is used.
  
     Target_Double_Float_Alignment : constant Nat :=
                                       Set_Targ.Double_Float_Alignment;
--- 210,216 ----
                                 Set_Targ.Strict_Alignment /= 0;
     --  True if instructions will fail if data is misaligned. Note that this
     --  is a variable rather than a constant since it can be modified (set to
!    --  True) if the debug flag -gnatd.a is used.
  
     Target_Double_Float_Alignment : constant Nat :=
                                       Set_Targ.Double_Float_Alignment;
diff -Nrcpad gcc-11.3.0/gcc/ada/types.adb gcc-12.1.0/gcc/ada/types.adb
*** gcc-11.3.0/gcc/ada/types.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/types.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/types.ads gcc-12.1.0/gcc/ada/types.ads
*** gcc-11.3.0/gcc/ada/types.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/types.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Types is
*** 59,64 ****
--- 59,73 ----
     subtype Pos is Int range 1 .. Int'Last;
     --  Positive Int values
  
+    subtype Nonzero_Int is Int with Predicate => Nonzero_Int /= 0;
+ 
+    type Int_64 is range -2 ** 63 .. +2 ** 63 - 1;
+    --  Signed 64-bit integer
+ 
+    subtype Nat_64 is Int_64 range 0 .. Int_64'Last;
+    subtype Pos_64 is Int_64 range 1 .. Int_64'Last;
+    subtype Nonzero_Int_64 is Int_64 with Predicate => Nonzero_Int_64 /= 0;
+ 
     type Word is mod 2 ** 32;
     --  Unsigned 32-bit integer
  
*************** package Types is
*** 218,223 ****
--- 227,242 ----
     --  which source it refers to. Note that negative numbers are allowed to
     --  accommodate the following special values.
  
+    type Source_Span is record
+       Ptr, First, Last : Source_Ptr;
+    end record;
+    --  Type used to represent a source span, consisting in a main location Ptr,
+    --  with a First and Last location, such that Ptr in First .. Last
+ 
+    function To_Span (Loc : Source_Ptr) return Source_Span is ((others => Loc));
+    function To_Span (Ptr, First, Last : Source_Ptr) return Source_Span is
+      ((Ptr, First, Last));
+ 
     No_Location : constant Source_Ptr := -1;
     --  Value used to indicate no source position set in a node. A test for a
     --  Source_Ptr value being > No_Location is the approved way to test for a
*************** package Types is
*** 302,309 ****
     --  The tree Id values start at zero, because we use zero for Empty (to
     --  allow a zero test for Empty).
  
!    Node_High_Bound : constant :=
!      (if Standard'Address_Size = 32 then 299_999_999 else 1_999_999_999);
  
     Elist_Low_Bound : constant := -199_999_999;
     --  The Elist_Id values are subscripts into an array of elist headers which
--- 321,327 ----
     --  The tree Id values start at zero, because we use zero for Empty (to
     --  allow a zero test for Empty).
  
!    Node_High_Bound : constant := 1_999_999_999;
  
     Elist_Low_Bound : constant := -199_999_999;
     --  The Elist_Id values are subscripts into an array of elist headers which
*************** package Types is
*** 377,383 ****
     --  the special values Empty and Error are subscripts into this table.
     --  See package Atree for further details.
  
!    type Node_Id is range Node_Low_Bound .. Node_High_Bound;
     --  Type used to identify nodes in the tree
  
     subtype Entity_Id is Node_Id;
--- 395,401 ----
     --  the special values Empty and Error are subscripts into this table.
     --  See package Atree for further details.
  
!    type Node_Id is range Node_Low_Bound .. Node_High_Bound with Size => 32;
     --  Type used to identify nodes in the tree
  
     subtype Entity_Id is Node_Id;
*************** package Types is
*** 426,432 ****
     --  attempt to apply list operations to No_List will cause a (detected)
     --  error.
  
!    type List_Id is range List_Low_Bound .. List_High_Bound;
     --  Type used to identify a node list
  
     No_List : constant List_Id := List_High_Bound;
--- 444,450 ----
     --  attempt to apply list operations to No_List will cause a (detected)
     --  error.
  
!    type List_Id is range List_Low_Bound .. List_High_Bound with Size => 32;
     --  Type used to identify a node list
  
     No_List : constant List_Id := List_High_Bound;
*************** package Types is
*** 451,457 ****
     --  of the tree, allowing nodes to be members of more than one such list
     --  (see package Elists for further details).
  
!    type Elist_Id is range Elist_Low_Bound .. Elist_High_Bound;
     --  Type used to identify an element list (Elist header table subscript)
  
     No_Elist : constant Elist_Id := Elist_Low_Bound;
--- 469,475 ----
     --  of the tree, allowing nodes to be members of more than one such list
     --  (see package Elists for further details).
  
!    type Elist_Id is range Elist_Low_Bound .. Elist_High_Bound with Size => 32;
     --  Type used to identify an element list (Elist header table subscript)
  
     No_Elist : constant Elist_Id := Elist_Low_Bound;
*************** package Types is
*** 481,487 ****
     --  String_Id values are used to identify entries in the strings table. They
     --  are subscripts into the Strings table defined in package Stringt.
  
!    type String_Id is range Strings_Low_Bound .. Strings_High_Bound;
     --  Type used to identify entries in the strings table
  
     No_String : constant String_Id := Strings_Low_Bound;
--- 499,506 ----
     --  String_Id values are used to identify entries in the strings table. They
     --  are subscripts into the Strings table defined in package Stringt.
  
!    type String_Id is range Strings_Low_Bound .. Strings_High_Bound
!      with Size => 32;
     --  Type used to identify entries in the strings table
  
     No_String : constant String_Id := Strings_Low_Bound;
*************** package Types is
*** 763,769 ****
        Overflow_Mode_Assertions : Overflow_Mode_Type;
        --  This field indicates the mode for handling code generation and
        --  overflow checking (if enabled) for intermediate expression values.
!       --  This applies to any expression occuring inside assertions.
     end record;
  
     -----------------------------------
--- 782,788 ----
        Overflow_Mode_Assertions : Overflow_Mode_Type;
        --  This field indicates the mode for handling code generation and
        --  overflow checking (if enabled) for intermediate expression values.
!       --  This applies to any expression occurring inside assertions.
     end record;
  
     -----------------------------------
*************** package Types is
*** 807,812 ****
--- 826,864 ----
     --  then Default_C_Record_Mechanism is set to 32, and the meaning is to use
     --  By_Reference if the size is greater than 32, and By_Copy otherwise.
  
+    ---------------------------------
+    -- Component_Alignment Control --
+    ---------------------------------
+ 
+    --  There are four types of alignment possible for array and record
+    --  types, and a field in the type entities contains a value of the
+    --  following type indicating which alignment choice applies. For full
+    --  details of the meaning of these alignment types, see description
+    --  of the Component_Alignment pragma.
+ 
+    type Component_Alignment_Kind is (
+       Calign_Default,          -- default alignment
+       Calign_Component_Size,   -- natural alignment for component size
+       Calign_Component_Size_4, -- natural for size <= 4, 4 for size >= 4
+       Calign_Storage_Unit);    -- all components byte aligned
+ 
+    -----------------------------------
+    -- Floating Point Representation --
+    -----------------------------------
+ 
+    type Float_Rep_Kind is (IEEE_Binary);
+    --  The only one supported now is IEEE 754p conforming binary format, but
+    --  other formats were supported in the past, and could conceivably be
+    --  supported in the future, so we keep this singleton enumeration type.
+ 
+    ----------------------------
+    -- Small_Paren_Count_Type --
+    ----------------------------
+ 
+    --  See Paren_Count in Atree for documentation
+ 
+    subtype Small_Paren_Count_Type is Nat range 0 .. 3;
+ 
     ------------------------------
     -- Run-Time Exception Codes --
     ------------------------------
*************** package Types is
*** 888,893 ****
--- 940,946 ----
        SE_Object_Too_Large,               -- 35
        PE_Stream_Operation_Not_Allowed,   -- 36
        PE_Build_In_Place_Mismatch);       -- 37
+    pragma Convention (C, RT_Exception_Code);
  
     Last_Reason_Code : constant :=
       RT_Exception_Code'Pos (RT_Exception_Code'Last);
*************** package Types is
*** 938,941 ****
--- 991,1017 ----
                SE_Infinite_Recursion             => SE_Reason,
                SE_Object_Too_Large               => SE_Reason);
  
+    --  Types for field offsets/sizes used in Seinfo, Sinfo.Nodes and
+    --  Einfo.Entities:
+ 
+    type Field_Offset is new Nat;
+    --  Offset of a node field, in units of the size of the field, which is
+    --  always a power of 2.
+ 
+    subtype Node_Offset is Field_Offset'Base range 1 .. Field_Offset'Base'Last;
+ 
+    subtype Slot_Count is Field_Offset;
+    --  Count of number of slots. Same type as Field_Offset to avoid
+    --  proliferation of type conversions.
+ 
+    subtype Field_Size_In_Bits is Field_Offset with Predicate =>
+      Field_Size_In_Bits in 1 | 2 | 4 | 8 | 32;
+ 
+    subtype Opt_Field_Offset is Field_Offset'Base range -1 .. Field_Offset'Last;
+    No_Field_Offset : constant Opt_Field_Offset := Opt_Field_Offset'First;
+ 
+    type Offset_Array_Index is new Nat;
+    type Offset_Array is
+      array (Offset_Array_Index range <>) of Opt_Field_Offset;
+ 
  end Types;
diff -Nrcpad gcc-11.3.0/gcc/ada/types.h gcc-12.1.0/gcc/ada/types.h
*** gcc-11.3.0/gcc/ada/types.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/types.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *          Copyright (C) 1992-2022, 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- *
*************** typedef Char *Text_Buffer_Ptr;
*** 122,128 ****
  typedef Int Line_Number_Type;
  
  /* Column number type, used for storing all column numbers.  */
! typedef Int Column_Number_Type;
  
  /* Type used to store text of a source file.  */
  typedef Text_Buffer Source_Buffer;
--- 122,128 ----
  typedef Int Line_Number_Type;
  
  /* Column number type, used for storing all column numbers.  */
! typedef Short Column_Number_Type;
  
  /* Type used to store text of a source file.  */
  typedef Text_Buffer Source_Buffer;
*************** typedef Int String_Id;
*** 261,266 ****
--- 261,270 ----
  
  /* Type used for representation of universal integers.  */
  typedef Int Uint;
+ typedef Uint Valid_Uint;
+ typedef Uint Unat;
+ typedef Uint Upos;
+ typedef Uint Nonzero_Uint;
  
  /* Used to indicate missing Uint value.  */
  #define No_Uint Uint_Low_Bound
*************** typedef Int Mechanism_Type;
*** 360,405 ****
  #define By_Short_Descriptor_NCA  (-18)
  #define By_Short_Descriptor_Last (-18)
  
! /* Definitions of Reason codes for Raise_xxx_Error nodes */
! #define CE_Access_Check_Failed              0
! #define CE_Access_Parameter_Is_Null         1
! #define CE_Discriminant_Check_Failed        2
! #define CE_Divide_By_Zero                   3
! #define CE_Explicit_Raise                   4
! #define CE_Index_Check_Failed               5
! #define CE_Invalid_Data                     6
! #define CE_Length_Check_Failed              7
! #define CE_Null_Exception_Id                8
! #define CE_Null_Not_Allowed                 9
! #define CE_Overflow_Check_Failed           10
! #define CE_Partition_Check_Failed          11
! #define CE_Range_Check_Failed              12
! #define CE_Tag_Check_Failed                13
  
! #define PE_Access_Before_Elaboration       14
! #define PE_Accessibility_Check_Failed      15
! #define PE_Address_Of_Intrinsic            16
! #define PE_Aliased_Parameters              17
! #define PE_All_Guards_Closed               18
! #define PE_Bad_Predicated_Generic_Type     19
! #define PE_Build_In_Place_Mismatch         37
! #define PE_Current_Task_In_Entry_Body      20
! #define PE_Duplicated_Entry_Address        21
! #define PE_Explicit_Raise                  22
! #define PE_Finalize_Raised_Exception       23
! #define PE_Implicit_Return                 24
! #define PE_Misaligned_Address_Value        25
! #define PE_Missing_Return                  26
! #define PE_Non_Transportable_Actual        31
! #define PE_Overlaid_Controlled_Object      27
! #define PE_Potentially_Blocking_Operation  28
! #define PE_Stream_Operation_Not_Allowed    36
! #define PE_Stubbed_Subprogram_Called       29
! #define PE_Unchecked_Union_Restriction     30
  
! #define SE_Empty_Storage_Pool              32
! #define SE_Explicit_Raise                  33
! #define SE_Infinite_Recursion              34
! #define SE_Object_Too_Large                35
  
! #define LAST_REASON_CODE                   37
--- 364,438 ----
  #define By_Short_Descriptor_NCA  (-18)
  #define By_Short_Descriptor_Last (-18)
  
! typedef char Component_Alignment_Kind;
! #define Calign_Default           0
! #define Calign_Component_Size    1
! #define Calign_Component_Size_4  2
! #define Calign_Storage_Unit      3
  
! typedef char Float_Rep_Kind;
! #define IEEE_Binary              0
! #define AAMP                     1
  
! typedef Nat Small_Paren_Count_Type;
  
! typedef Nat Field_Offset;
! 
! typedef unsigned int any_slot;
! 
! #define Slot_Size (sizeof (any_slot) * 8)
! 
! /* Slots are 32 bits (for now, but we might want to make that 64).
!    The first bootstrap stage uses -std=gnu++98, so we cannot use
!    static_assert in that case.  */
! #if __cplusplus >= 201402L
! static_assert (Slot_Size == 32);
! #endif
! 
! /* Definitions of Reason codes for Raise_xxx_Error nodes.  */
! enum RT_Exception_Code
! {
!   CE_Access_Check_Failed            = 0,
!   CE_Access_Parameter_Is_Null       = 1,
!   CE_Discriminant_Check_Failed      = 2,
!   CE_Divide_By_Zero                 = 3,
!   CE_Explicit_Raise                 = 4,
!   CE_Index_Check_Failed             = 5,
!   CE_Invalid_Data                   = 6,
!   CE_Length_Check_Failed            = 7,
!   CE_Null_Exception_Id              = 8,
!   CE_Null_Not_Allowed               = 9,
! 
!   CE_Overflow_Check_Failed          = 10,
!   CE_Partition_Check_Failed         = 11,
!   CE_Range_Check_Failed             = 12,
!   CE_Tag_Check_Failed               = 13,
!   PE_Access_Before_Elaboratio       = 14,
!   PE_Accessibility_Check_Failed     = 15,
!   PE_Address_Of_Intrinsic           = 16,
!   PE_Aliased_Parameters             = 17,
!   PE_All_Guards_Closed              = 18,
!   PE_Bad_Predicated_Generic_Type    = 19,
! 
!   PE_Current_Task_In_Entry_Body     = 20,
!   PE_Duplicated_Entry_Address       = 21,
!   PE_Explicit_Raise                 = 22,
!   PE_Finalize_Raised_Exception      = 23,
!   PE_Implicit_Return                = 24,
!   PE_Misaligned_Address_Value       = 25,
!   PE_Missing_Return                 = 26,
!   PE_Overlaid_Controlled_Object     = 27,
!   PE_Potentially_Blocking_Operation = 28,
!   PE_Stubbed_Subprogram_Called      = 29,
! 
!   PE_Unchecked_Union_Restriction    = 30,
!   PE_Non_Transportable_Actual       = 31,
!   SE_Empty_Storage_Pool             = 32,
!   SE_Explicit_Raise                 = 33,
!   SE_Infinite_Recursion             = 34,
!   SE_Object_Too_Large               = 35,
!   PE_Stream_Operation_Not_Allowed   = 36,
!   PE_Build_In_Place_Mismatch        = 37
! };
! 
! #define LAST_REASON_CODE 37
diff -Nrcpad gcc-11.3.0/gcc/ada/uintp.adb gcc-12.1.0/gcc/ada/uintp.adb
*** gcc-11.3.0/gcc/ada/uintp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/uintp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Uintp is
*** 73,78 ****
--- 73,90 ----
     --  These values are used in some cases where the use of numeric literals
     --  would cause ambiguities (integer vs Uint).
  
+    type UI_Vector is array (Pos range <>) of Int;
+    --  Vector containing the integer values of a Uint value
+ 
+    --  Note: An earlier version of this package used pointers of arrays of Ints
+    --  (dynamically allocated) for the Uint type. The change leads to a few
+    --  less natural idioms used throughout this code, but eliminates all uses
+    --  of the heap except for the table package itself. For example, Uint
+    --  parameters are often converted to UI_Vectors for internal manipulation.
+    --  This is done by creating the local UI_Vector using the function N_Digits
+    --  on the Uint to find the size needed for the vector, and then calling
+    --  Init_Operand to copy the values out of the table into the vector.
+ 
     ----------------------------
     -- UI_From_Int Hash Table --
     ----------------------------
*************** package body Uintp is
*** 98,109 ****
     -- Local Subprograms --
     -----------------------
  
!    function Direct (U : Uint) return Boolean;
     pragma Inline (Direct);
     --  Returns True if U is represented directly
  
!    function Direct_Val (U : Uint) return Int;
!    --  U is a Uint for is represented directly. The returned result is the
     --  value represented.
  
     function GCD (Jin, Kin : Int) return Int;
--- 110,121 ----
     -- Local Subprograms --
     -----------------------
  
!    function Direct (U : Valid_Uint) return Boolean;
     pragma Inline (Direct);
     --  Returns True if U is represented directly
  
!    function Direct_Val (U : Valid_Uint) return Int;
!    --  U is a Uint that is represented directly. The returned result is the
     --  value represented.
  
     function GCD (Jin, Kin : Int) return Int;
*************** package body Uintp is
*** 117,123 ****
     --  UI_Image, and false for UI_Write, and Format is copied from the Format
     --  parameter to UI_Image or UI_Write.
  
!    procedure Init_Operand (UI : Uint; Vec : out UI_Vector);
     pragma Inline (Init_Operand);
     --  This procedure puts the value of UI into the vector in canonical
     --  multiple precision format. The parameter should be of the correct size
--- 129,135 ----
     --  UI_Image, and false for UI_Write, and Format is copied from the Format
     --  parameter to UI_Image or UI_Write.
  
!    procedure Init_Operand (UI : Valid_Uint; Vec : out UI_Vector);
     pragma Inline (Init_Operand);
     --  This procedure puts the value of UI into the vector in canonical
     --  multiple precision format. The parameter should be of the correct size
*************** package body Uintp is
*** 127,133 ****
     --  contain the corresponding one or two digit value. The low bound of Vec
     --  is always 1.
  
!    function Least_Sig_Digit (Arg : Uint) return Int;
     pragma Inline (Least_Sig_Digit);
     --  Returns the Least Significant Digit of Arg quickly. When the given Uint
     --  is less than 2**15, the value returned is the input value, in this case
--- 139,161 ----
     --  contain the corresponding one or two digit value. The low bound of Vec
     --  is always 1.
  
!    function Vector_To_Uint
!      (In_Vec   : UI_Vector;
!       Negative : Boolean) return Valid_Uint;
!    --  Functions that calculate values in UI_Vectors, call this function to
!    --  create and return the Uint value. In_Vec contains the multiple precision
!    --  (Base) representation of a non-negative value. Leading zeroes are
!    --  permitted. Negative is set if the desired result is the negative of the
!    --  given value. The result will be either the appropriate directly
!    --  represented value, or a table entry in the proper canonical format is
!    --  created and returned.
!    --
!    --  Note that Init_Operand puts a signed value in the result vector, but
!    --  Vector_To_Uint is always presented with a non-negative value. The
!    --  processing of signs is something that is done by the caller before
!    --  calling Vector_To_Uint.
! 
!    function Least_Sig_Digit (Arg : Valid_Uint) return Int;
     pragma Inline (Least_Sig_Digit);
     --  Returns the Least Significant Digit of Arg quickly. When the given Uint
     --  is less than 2**15, the value returned is the input value, in this case
*************** package body Uintp is
*** 137,144 ****
     --  two.
  
     procedure Most_Sig_2_Digits
!      (Left      : Uint;
!       Right     : Uint;
        Left_Hat  : out Int;
        Right_Hat : out Int);
     --  Returns leading two significant digits from the given pair of Uint's.
--- 165,172 ----
     --  two.
  
     procedure Most_Sig_2_Digits
!      (Left      : Valid_Uint;
!       Right     : Valid_Uint;
        Left_Hat  : out Int;
        Right_Hat : out Int);
     --  Returns leading two significant digits from the given pair of Uint's.
*************** package body Uintp is
*** 146,174 ****
     --  K is as small as possible S.T. Right_Hat < Base * Base. It is required
     --  that Left >= Right for the algorithm to work.
  
!    function N_Digits (Input : Uint) return Int;
     pragma Inline (N_Digits);
     --  Returns number of "digits" in a Uint
  
     procedure UI_Div_Rem
!      (Left, Right       : Uint;
        Quotient          : out Uint;
        Remainder         : out Uint;
        Discard_Quotient  : Boolean := False;
        Discard_Remainder : Boolean := False);
     --  Compute Euclidean division of Left by Right. If Discard_Quotient is
!    --  False then the quotient is returned in Quotient (otherwise Quotient is
!    --  set to No_Uint). If Discard_Remainder is False, then the remainder is
!    --  returned in Remainder (otherwise Remainder is set to No_Uint).
     --
!    --  If Discard_Quotient is True, Quotient is set to No_Uint
!    --  If Discard_Remainder is True, Remainder is set to No_Uint
  
     ------------
     -- Direct --
     ------------
  
!    function Direct (U : Uint) return Boolean is
     begin
        return Int (U) <= Int (Uint_Direct_Last);
     end Direct;
--- 174,213 ----
     --  K is as small as possible S.T. Right_Hat < Base * Base. It is required
     --  that Left >= Right for the algorithm to work.
  
!    function N_Digits (Input : Valid_Uint) return Int;
     pragma Inline (N_Digits);
     --  Returns number of "digits" in a Uint
  
     procedure UI_Div_Rem
!      (Left, Right       : Valid_Uint;
        Quotient          : out Uint;
        Remainder         : out Uint;
        Discard_Quotient  : Boolean := False;
        Discard_Remainder : Boolean := False);
     --  Compute Euclidean division of Left by Right. If Discard_Quotient is
!    --  False then the quotient is returned in Quotient. If Discard_Remainder
!    --  is False, then the remainder is returned in Remainder.
     --
!    --  If Discard_Quotient is True, Quotient is set to No_Uint.
!    --  If Discard_Remainder is True, Remainder is set to No_Uint.
! 
!    function UI_Modular_Exponentiation
!      (B      : Valid_Uint;
!       E      : Valid_Uint;
!       Modulo : Valid_Uint) return Valid_Uint with Unreferenced;
!    --  Efficiently compute (B**E) rem Modulo
! 
!    function UI_Modular_Inverse
!      (N : Valid_Uint; Modulo : Valid_Uint) return Valid_Uint with Unreferenced;
!    --  Compute the multiplicative inverse of N in modular arithmetics with the
!    --  given Modulo (uses Euclid's algorithm). Note: the call is considered
!    --  to be erroneous (and the behavior is undefined) if n is not invertible.
  
     ------------
     -- Direct --
     ------------
  
!    function Direct (U : Valid_Uint) return Boolean is
     begin
        return Int (U) <= Int (Uint_Direct_Last);
     end Direct;
*************** package body Uintp is
*** 177,183 ****
     -- Direct_Val --
     ----------------
  
!    function Direct_Val (U : Uint) return Int is
     begin
        pragma Assert (Direct (U));
        return Int (U) - Int (Uint_Direct_Bias);
--- 216,222 ----
     -- Direct_Val --
     ----------------
  
!    function Direct_Val (U : Valid_Uint) return Int is
     begin
        pragma Assert (Direct (U));
        return Int (U) - Int (Uint_Direct_Bias);
*************** package body Uintp is
*** 224,231 ****
        Format    : UI_Format)
     is
        Marks  : constant Uintp.Save_Mark := Uintp.Mark;
!       Base   : Uint;
!       Ainput : Uint;
  
        Digs_Output : Natural := 0;
        --  Counts digits output. In hex mode, but not in decimal mode, we
--- 263,270 ----
        Format    : UI_Format)
     is
        Marks  : constant Uintp.Save_Mark := Uintp.Mark;
!       Base   : Valid_Uint;
!       Ainput : Valid_Uint;
  
        Digs_Output : Natural := 0;
        --  Counts digits output. In hex mode, but not in decimal mode, we
*************** package body Uintp is
*** 243,255 ****
        --  value is returned from a correctness point of view.
  
        procedure Image_Char (C : Character);
!       --  Internal procedure to output one character
  
        procedure Image_Exponent (N : Natural);
        --  Output non-zero exponent. Note that we only use the exponent form in
        --  the buffer case, so we know that To_Buffer is true.
  
!       procedure Image_Uint (U : Uint);
        --  Internal procedure to output characters of non-negative Uint
  
        -------------------
--- 282,297 ----
        --  value is returned from a correctness point of view.
  
        procedure Image_Char (C : Character);
!       --  Output one character
! 
!       procedure Image_String (S : String);
!       --  Output characters
  
        procedure Image_Exponent (N : Natural);
        --  Output non-zero exponent. Note that we only use the exponent form in
        --  the buffer case, so we know that To_Buffer is true.
  
!       procedure Image_Uint (U : Valid_Uint);
        --  Internal procedure to output characters of non-negative Uint
  
        -------------------
*************** package body Uintp is
*** 257,264 ****
        -------------------
  
        function Better_In_Hex return Boolean is
!          T16 : constant Uint := Uint_2**Int'(16);
!          A   : Uint;
  
        begin
           A := UI_Abs (Input);
--- 299,306 ----
        -------------------
  
        function Better_In_Hex return Boolean is
!          T16 : constant Valid_Uint := Uint_2**Int'(16);
!          A   : Valid_Uint;
  
        begin
           A := UI_Abs (Input);
*************** package body Uintp is
*** 332,346 ****
             Character'Val (Character'Pos ('0') + N mod 10);
        end Image_Exponent;
  
        ----------------
        -- Image_Uint --
        ----------------
  
!       procedure Image_Uint (U : Uint) is
           H : constant array (Int range 0 .. 15) of Character :=
                 "0123456789ABCDEF";
  
!          Q, R : Uint;
        begin
           UI_Div_Rem (U, Base, Q, R);
  
--- 374,399 ----
             Character'Val (Character'Pos ('0') + N mod 10);
        end Image_Exponent;
  
+       ------------------
+       -- Image_String --
+       ------------------
+ 
+       procedure Image_String (S : String) is
+       begin
+          for X of S loop
+             Image_Char (X);
+          end loop;
+       end Image_String;
+ 
        ----------------
        -- Image_Uint --
        ----------------
  
!       procedure Image_Uint (U : Valid_Uint) is
           H : constant array (Int range 0 .. 15) of Character :=
                 "0123456789ABCDEF";
  
!          Q, R : Valid_Uint;
        begin
           UI_Div_Rem (U, Base, Q, R);
  
*************** package body Uintp is
*** 361,368 ****
     --  Start of processing for Image_Out
  
     begin
!       if Input = No_Uint then
!          Image_Char ('?');
           return;
        end if;
  
--- 414,421 ----
     --  Start of processing for Image_Out
  
     begin
!       if No (Input) then
!          Image_String ("No_Uint");
           return;
        end if;
  
*************** package body Uintp is
*** 403,409 ****
     -- Init_Operand --
     -------------------
  
!    procedure Init_Operand (UI : Uint; Vec : out UI_Vector) is
        Loc : Int;
  
        pragma Assert (Vec'First = Int'(1));
--- 456,462 ----
     -- Init_Operand --
     -------------------
  
!    procedure Init_Operand (UI : Valid_Uint; Vec : out UI_Vector) is
        Loc : Int;
  
        pragma Assert (Vec'First = Int'(1));
*************** package body Uintp is
*** 454,460 ****
     -- Least_Sig_Digit --
     ---------------------
  
!    function Least_Sig_Digit (Arg : Uint) return Int is
        V : Int;
  
     begin
--- 507,513 ----
     -- Least_Sig_Digit --
     ---------------------
  
!    function Least_Sig_Digit (Arg : Valid_Uint) return Int is
        V : Int;
  
     begin
*************** package body Uintp is
*** 490,497 ****
     -----------------------
  
     procedure Most_Sig_2_Digits
!      (Left      : Uint;
!       Right     : Uint;
        Left_Hat  : out Int;
        Right_Hat : out Int)
     is
--- 543,550 ----
     -----------------------
  
     procedure Most_Sig_2_Digits
!      (Left      : Valid_Uint;
!       Right     : Valid_Uint;
        Left_Hat  : out Int;
        Right_Hat : out Int)
     is
*************** package body Uintp is
*** 552,560 ****
     -- N_Digits --
     ---------------
  
!    --  Note: N_Digits returns 1 for No_Uint
! 
!    function N_Digits (Input : Uint) return Int is
     begin
        if Direct (Input) then
           if Direct_Val (Input) >= Base then
--- 605,611 ----
     -- N_Digits --
     ---------------
  
!    function N_Digits (Input : Valid_Uint) return Int is
     begin
        if Direct (Input) then
           if Direct_Val (Input) >= Base then
*************** package body Uintp is
*** 572,578 ****
     -- Num_Bits --
     --------------
  
!    function Num_Bits (Input : Uint) return Nat is
        Bits : Nat;
        Num  : Nat;
  
--- 623,629 ----
     -- Num_Bits --
     --------------
  
!    function Num_Bits (Input : Valid_Uint) return Nat is
        Bits : Nat;
        Num  : Nat;
  
*************** package body Uintp is
*** 633,639 ****
  
     procedure Release (M : Save_Mark) is
     begin
!       Uints.Set_Last   (Uint'Max (M.Save_Uint,   Uints_Min));
        Udigits.Set_Last (Int'Max  (M.Save_Udigit, Udigits_Min));
     end Release;
  
--- 684,690 ----
  
     procedure Release (M : Save_Mark) is
     begin
!       Uints.Set_Last   (Valid_Uint'Max (M.Save_Uint, Uints_Min));
        Udigits.Set_Last (Int'Max  (M.Save_Udigit, Udigits_Min));
     end Release;
  
*************** package body Uintp is
*** 641,647 ****
     -- Release_And_Save --
     ----------------------
  
!    procedure Release_And_Save (M : Save_Mark; UI : in out Uint) is
     begin
        if Direct (UI) then
           Release (M);
--- 692,698 ----
     -- Release_And_Save --
     ----------------------
  
!    procedure Release_And_Save (M : Save_Mark; UI : in out Valid_Uint) is
     begin
        if Direct (UI) then
           Release (M);
*************** package body Uintp is
*** 667,673 ****
        end if;
     end Release_And_Save;
  
!    procedure Release_And_Save (M : Save_Mark; UI1, UI2 : in out Uint) is
     begin
        if Direct (UI1) then
           Release_And_Save (M, UI2);
--- 718,724 ----
        end if;
     end Release_And_Save;
  
!    procedure Release_And_Save (M : Save_Mark; UI1, UI2 : in out Valid_Uint) is
     begin
        if Direct (UI1) then
           Release_And_Save (M, UI2);
*************** package body Uintp is
*** 713,719 ****
     -- UI_Abs --
     -------------
  
!    function UI_Abs (Right : Uint) return Uint is
     begin
        if Right < Uint_0 then
           return -Right;
--- 764,770 ----
     -- UI_Abs --
     -------------
  
!    function UI_Abs (Right : Valid_Uint) return Unat is
     begin
        if Right < Uint_0 then
           return -Right;
*************** package body Uintp is
*** 726,743 ****
     -- UI_Add --
     -------------
  
!    function UI_Add (Left : Int; Right : Uint) return Uint is
     begin
        return UI_Add (UI_From_Int (Left), Right);
     end UI_Add;
  
!    function UI_Add (Left : Uint; Right : Int) return Uint is
     begin
        return UI_Add (Left, UI_From_Int (Right));
     end UI_Add;
  
!    function UI_Add (Left : Uint; Right : Uint) return Uint is
     begin
        --  Simple cases of direct operands and addition of zero
  
        if Direct (Left) then
--- 777,799 ----
     -- UI_Add --
     -------------
  
!    function UI_Add (Left : Int; Right : Valid_Uint) return Valid_Uint is
     begin
        return UI_Add (UI_From_Int (Left), Right);
     end UI_Add;
  
!    function UI_Add (Left : Valid_Uint; Right : Int) return Valid_Uint is
     begin
        return UI_Add (Left, UI_From_Int (Right));
     end UI_Add;
  
!    function UI_Add (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint is
     begin
+       pragma Assert (Present (Left));
+       pragma Assert (Present (Right));
+       --  Assertions are here in case we're called from C++ code, which does
+       --  not check the predicates.
+ 
        --  Simple cases of direct operands and addition of zero
  
        if Direct (Left) then
*************** package body Uintp is
*** 902,908 ****
     -- UI_Decimal_Digits_Hi --
     --------------------------
  
!    function UI_Decimal_Digits_Hi (U : Uint) return Nat is
     begin
        --  The maximum value of a "digit" is 32767, which is 5 decimal digits,
        --  so an N_Digit number could take up to 5 times this number of digits.
--- 958,964 ----
     -- UI_Decimal_Digits_Hi --
     --------------------------
  
!    function UI_Decimal_Digits_Hi (U : Valid_Uint) return Nat is
     begin
        --  The maximum value of a "digit" is 32767, which is 5 decimal digits,
        --  so an N_Digit number could take up to 5 times this number of digits.
*************** package body Uintp is
*** 916,922 ****
     -- UI_Decimal_Digits_Lo --
     --------------------------
  
!    function UI_Decimal_Digits_Lo (U : Uint) return Nat is
     begin
        --  The maximum value of a "digit" is 32767, which is more than four
        --  decimal digits, but not a full five digits. The easily computed
--- 972,978 ----
     -- UI_Decimal_Digits_Lo --
     --------------------------
  
!    function UI_Decimal_Digits_Lo (U : Valid_Uint) return Nat is
     begin
        --  The maximum value of a "digit" is 32767, which is more than four
        --  decimal digits, but not a full five digits. The easily computed
*************** package body Uintp is
*** 931,954 ****
     -- UI_Div --
     ------------
  
!    function UI_Div (Left : Int; Right : Uint) return Uint is
     begin
        return UI_Div (UI_From_Int (Left), Right);
     end UI_Div;
  
!    function UI_Div (Left : Uint; Right : Int) return Uint is
     begin
        return UI_Div (Left, UI_From_Int (Right));
     end UI_Div;
  
!    function UI_Div (Left, Right : Uint) return Uint is
!       Quotient  : Uint;
!       Remainder : Uint;
!       pragma Warnings (Off, Remainder);
     begin
        UI_Div_Rem
          (Left, Right,
!          Quotient, Remainder,
           Discard_Remainder => True);
        return Quotient;
     end UI_Div;
--- 987,1013 ----
     -- UI_Div --
     ------------
  
!    function UI_Div (Left : Int; Right : Nonzero_Uint) return Valid_Uint is
     begin
        return UI_Div (UI_From_Int (Left), Right);
     end UI_Div;
  
!    function UI_Div
!      (Left : Valid_Uint; Right : Nonzero_Int) return Valid_Uint
!    is
     begin
        return UI_Div (Left, UI_From_Int (Right));
     end UI_Div;
  
!    function UI_Div
!      (Left : Valid_Uint; Right : Nonzero_Uint) return Valid_Uint
!    is
!       Quotient  : Valid_Uint;
!       Ignored_Remainder : Uint;
     begin
        UI_Div_Rem
          (Left, Right,
!          Quotient, Ignored_Remainder,
           Discard_Remainder => True);
        return Quotient;
     end UI_Div;
*************** package body Uintp is
*** 958,964 ****
     ----------------
  
     procedure UI_Div_Rem
!      (Left, Right       : Uint;
        Quotient          : out Uint;
        Remainder         : out Uint;
        Discard_Quotient  : Boolean := False;
--- 1017,1023 ----
     ----------------
  
     procedure UI_Div_Rem
!      (Left, Right       : Valid_Uint;
        Quotient          : out Uint;
        Remainder         : out Uint;
        Discard_Quotient  : Boolean := False;
*************** package body Uintp is
*** 1232,1245 ****
              if not Discard_Remainder then
                 declare
                    Remainder_V : UI_Vector (1 .. R_Length);
!                   Discard_Int : Int;
!                   pragma Warnings (Off, Discard_Int);
                 begin
                    pragma Assert (D /= Int'(0));
                    UI_Div_Vector
                      (Dividend (Dividend'Last - R_Length + 1 .. Dividend'Last),
                       D,
!                      Remainder_V, Discard_Int);
                    Remainder := Vector_To_Uint (Remainder_V, L_Vec (1) < Int_0);
                 end;
              end if;
--- 1291,1303 ----
              if not Discard_Remainder then
                 declare
                    Remainder_V : UI_Vector (1 .. R_Length);
!                   Ignore : Int;
                 begin
                    pragma Assert (D /= Int'(0));
                    UI_Div_Vector
                      (Dividend (Dividend'Last - R_Length + 1 .. Dividend'Last),
                       D,
!                      Remainder_V, Ignore);
                    Remainder := Vector_To_Uint (Remainder_V, L_Vec (1) < Int_0);
                 end;
              end if;
*************** package body Uintp is
*** 1251,1267 ****
     -- UI_Eq --
     ------------
  
!    function UI_Eq (Left : Int; Right : Uint) return Boolean is
     begin
        return not UI_Ne (UI_From_Int (Left), Right);
     end UI_Eq;
  
!    function UI_Eq (Left : Uint; Right : Int) return Boolean is
     begin
        return not UI_Ne (Left, UI_From_Int (Right));
     end UI_Eq;
  
!    function UI_Eq (Left : Uint; Right : Uint) return Boolean is
     begin
        return not UI_Ne (Left, Right);
     end UI_Eq;
--- 1309,1325 ----
     -- UI_Eq --
     ------------
  
!    function UI_Eq (Left : Int; Right : Valid_Uint) return Boolean is
     begin
        return not UI_Ne (UI_From_Int (Left), Right);
     end UI_Eq;
  
!    function UI_Eq (Left : Valid_Uint; Right : Int) return Boolean is
     begin
        return not UI_Ne (Left, UI_From_Int (Right));
     end UI_Eq;
  
!    function UI_Eq (Left : Valid_Uint; Right : Valid_Uint) return Boolean is
     begin
        return not UI_Ne (Left, Right);
     end UI_Eq;
*************** package body Uintp is
*** 1270,1291 ****
     -- UI_Expon --
     --------------
  
!    function UI_Expon (Left : Int; Right : Uint) return Uint is
     begin
        return UI_Expon (UI_From_Int (Left), Right);
     end UI_Expon;
  
!    function UI_Expon (Left : Uint; Right : Int) return Uint is
     begin
        return UI_Expon (Left, UI_From_Int (Right));
     end UI_Expon;
  
!    function UI_Expon (Left : Int; Right : Int) return Uint is
     begin
        return UI_Expon (UI_From_Int (Left), UI_From_Int (Right));
     end UI_Expon;
  
!    function UI_Expon (Left : Uint; Right : Uint) return Uint is
     begin
        pragma Assert (Right >= Uint_0);
  
--- 1328,1351 ----
     -- UI_Expon --
     --------------
  
!    function UI_Expon (Left : Int; Right : Unat) return Valid_Uint is
     begin
        return UI_Expon (UI_From_Int (Left), Right);
     end UI_Expon;
  
!    function UI_Expon (Left : Valid_Uint; Right : Nat) return Valid_Uint is
     begin
        return UI_Expon (Left, UI_From_Int (Right));
     end UI_Expon;
  
!    function UI_Expon (Left : Int; Right : Nat) return Valid_Uint is
     begin
        return UI_Expon (UI_From_Int (Left), UI_From_Int (Right));
     end UI_Expon;
  
!    function UI_Expon
!      (Left : Valid_Uint; Right : Unat) return Valid_Uint
!    is
     begin
        pragma Assert (Right >= Uint_0);
  
*************** package body Uintp is
*** 1358,1366 ****
        --  If we fall through, then we have the general case (see Knuth 4.6.3)
  
        declare
!          N       : Uint := Right;
!          Squares : Uint := Left;
!          Result  : Uint := Uint_1;
           M       : constant Uintp.Save_Mark := Uintp.Mark;
  
        begin
--- 1418,1426 ----
        --  If we fall through, then we have the general case (see Knuth 4.6.3)
  
        declare
!          N       : Valid_Uint := Right;
!          Squares : Valid_Uint := Left;
!          Result  : Valid_Uint := Uint_1;
           M       : constant Uintp.Save_Mark := Uintp.Mark;
  
        begin
*************** package body Uintp is
*** 1383,1389 ****
     -- UI_From_CC --
     ----------------
  
!    function UI_From_CC (Input : Char_Code) return Uint is
     begin
        return UI_From_Int (Int (Input));
     end UI_From_CC;
--- 1443,1449 ----
     -- UI_From_CC --
     ----------------
  
!    function UI_From_CC (Input : Char_Code) return Valid_Uint is
     begin
        return UI_From_Int (Int (Input));
     end UI_From_CC;
*************** package body Uintp is
*** 1392,1410 ****
     -- UI_From_Int --
     -----------------
  
!    function UI_From_Int (Input : Int) return Uint is
        U : Uint;
  
     begin
        if Min_Direct <= Input and then Input <= Max_Direct then
!          return Uint (Int (Uint_Direct_Bias) + Input);
        end if;
  
        --  If already in the hash table, return entry
  
        U := UI_Ints.Get (Input);
  
!       if U /= No_Uint then
           return U;
        end if;
  
--- 1452,1470 ----
     -- UI_From_Int --
     -----------------
  
!    function UI_From_Int (Input : Int) return Valid_Uint is
        U : Uint;
  
     begin
        if Min_Direct <= Input and then Input <= Max_Direct then
!          return Valid_Uint (Int (Uint_Direct_Bias) + Input);
        end if;
  
        --  If already in the hash table, return entry
  
        U := UI_Ints.Get (Input);
  
!       if Present (U) then
           return U;
        end if;
  
*************** package body Uintp is
*** 1438,1444 ****
     -- UI_From_Integral --
     ----------------------
  
!    function UI_From_Integral (Input : In_T) return Uint is
     begin
        --  If in range of our normal conversion function, use it so we can use
        --  direct access and our cache.
--- 1498,1504 ----
     -- UI_From_Integral --
     ----------------------
  
!    function UI_From_Integral (Input : In_T) return Valid_Uint is
     begin
        --  If in range of our normal conversion function, use it so we can use
        --  direct access and our cache.
*************** package body Uintp is
*** 1459,1465 ****
              --  Base is defined so that 3 Uint digits is sufficient to hold the
              --  largest possible Int value.
  
!             U : Uint;
              V : UI_Vector (1 .. Max_For_In_T);
  
           begin
--- 1519,1525 ----
              --  Base is defined so that 3 Uint digits is sufficient to hold the
              --  largest possible Int value.
  
!             U : Valid_Uint;
              V : UI_Vector (1 .. Max_For_In_T);
  
           begin
*************** package body Uintp is
*** 1489,1496 ****
  
     --  We use the same notation as Knuth (U_Hat standing for the obvious)
  
!    function UI_GCD (Uin, Vin : Uint) return Uint is
!       U, V : Uint;
        --  Copies of Uin and Vin
  
        U_Hat, V_Hat : Int;
--- 1549,1556 ----
  
     --  We use the same notation as Knuth (U_Hat standing for the obvious)
  
!    function UI_GCD (Uin, Vin : Valid_Uint) return Valid_Uint is
!       U, V : Valid_Uint;
        --  Copies of Uin and Vin
  
        U_Hat, V_Hat : Int;
*************** package body Uintp is
*** 1498,1504 ****
  
        A, B, C, D, T, Q, Den1, Den2 : Int;
  
!       Tmp_UI : Uint;
        Marks  : constant Uintp.Save_Mark := Uintp.Mark;
        Iterations : Integer := 0;
  
--- 1558,1564 ----
  
        A, B, C, D, T, Q, Den1, Den2 : Int;
  
!       Tmp_UI : Valid_Uint;
        Marks  : constant Uintp.Save_Mark := Uintp.Mark;
        Iterations : Integer := 0;
  
*************** package body Uintp is
*** 1591,1607 ****
     -- UI_Ge --
     ------------
  
!    function UI_Ge (Left : Int; Right : Uint) return Boolean is
     begin
        return not UI_Lt (UI_From_Int (Left), Right);
     end UI_Ge;
  
!    function UI_Ge (Left : Uint; Right : Int) return Boolean is
     begin
        return not UI_Lt (Left, UI_From_Int (Right));
     end UI_Ge;
  
!    function UI_Ge (Left : Uint; Right : Uint) return Boolean is
     begin
        return not UI_Lt (Left, Right);
     end UI_Ge;
--- 1651,1667 ----
     -- UI_Ge --
     ------------
  
!    function UI_Ge (Left : Int; Right : Valid_Uint) return Boolean is
     begin
        return not UI_Lt (UI_From_Int (Left), Right);
     end UI_Ge;
  
!    function UI_Ge (Left : Valid_Uint; Right : Int) return Boolean is
     begin
        return not UI_Lt (Left, UI_From_Int (Right));
     end UI_Ge;
  
!    function UI_Ge (Left : Valid_Uint; Right : Valid_Uint) return Boolean is
     begin
        return not UI_Lt (Left, Right);
     end UI_Ge;
*************** package body Uintp is
*** 1610,1626 ****
     -- UI_Gt --
     ------------
  
!    function UI_Gt (Left : Int; Right : Uint) return Boolean is
     begin
        return UI_Lt (Right, UI_From_Int (Left));
     end UI_Gt;
  
!    function UI_Gt (Left : Uint; Right : Int) return Boolean is
     begin
        return UI_Lt (UI_From_Int (Right), Left);
     end UI_Gt;
  
!    function UI_Gt (Left : Uint; Right : Uint) return Boolean is
     begin
        return UI_Lt (Left => Right, Right => Left);
     end UI_Gt;
--- 1670,1686 ----
     -- UI_Gt --
     ------------
  
!    function UI_Gt (Left : Int; Right : Valid_Uint) return Boolean is
     begin
        return UI_Lt (Right, UI_From_Int (Left));
     end UI_Gt;
  
!    function UI_Gt (Left : Valid_Uint; Right : Int) return Boolean is
     begin
        return UI_Lt (UI_From_Int (Right), Left);
     end UI_Gt;
  
!    function UI_Gt (Left : Valid_Uint; Right : Valid_Uint) return Boolean is
     begin
        return UI_Lt (Left => Right, Right => Left);
     end UI_Gt;
*************** package body Uintp is
*** 1647,1653 ****
     -- UI_Is_In_Int_Range --
     -------------------------
  
!    function UI_Is_In_Int_Range (Input : Uint) return Boolean is
     begin
        --  Make sure we don't get called before Initialize
  
--- 1707,1716 ----
     -- UI_Is_In_Int_Range --
     -------------------------
  
!    function UI_Is_In_Int_Range (Input : Valid_Uint) return Boolean is
!       pragma Assert (Present (Input));
!       --  Assertion is here in case we're called from C++ code, which does
!       --  not check the predicates.
     begin
        --  Make sure we don't get called before Initialize
  
*************** package body Uintp is
*** 1656,1663 ****
        if Direct (Input) then
           return True;
        else
!          return Input >= Uint_Int_First
!            and then Input <= Uint_Int_Last;
        end if;
     end UI_Is_In_Int_Range;
  
--- 1719,1725 ----
        if Direct (Input) then
           return True;
        else
!          return Input >= Uint_Int_First and then Input <= Uint_Int_Last;
        end if;
     end UI_Is_In_Int_Range;
  
*************** package body Uintp is
*** 1665,1681 ****
     -- UI_Le --
     ------------
  
!    function UI_Le (Left : Int; Right : Uint) return Boolean is
     begin
        return not UI_Lt (Right, UI_From_Int (Left));
     end UI_Le;
  
!    function UI_Le (Left : Uint; Right : Int) return Boolean is
     begin
        return not UI_Lt (UI_From_Int (Right), Left);
     end UI_Le;
  
!    function UI_Le (Left : Uint; Right : Uint) return Boolean is
     begin
        return not UI_Lt (Left => Right, Right => Left);
     end UI_Le;
--- 1727,1743 ----
     -- UI_Le --
     ------------
  
!    function UI_Le (Left : Int; Right : Valid_Uint) return Boolean is
     begin
        return not UI_Lt (Right, UI_From_Int (Left));
     end UI_Le;
  
!    function UI_Le (Left : Valid_Uint; Right : Int) return Boolean is
     begin
        return not UI_Lt (UI_From_Int (Right), Left);
     end UI_Le;
  
!    function UI_Le (Left : Valid_Uint; Right : Valid_Uint) return Boolean is
     begin
        return not UI_Lt (Left => Right, Right => Left);
     end UI_Le;
*************** package body Uintp is
*** 1684,1701 ****
     -- UI_Lt --
     ------------
  
!    function UI_Lt (Left : Int; Right : Uint) return Boolean is
     begin
        return UI_Lt (UI_From_Int (Left), Right);
     end UI_Lt;
  
!    function UI_Lt (Left : Uint; Right : Int) return Boolean is
     begin
        return UI_Lt (Left, UI_From_Int (Right));
     end UI_Lt;
  
!    function UI_Lt (Left : Uint; Right : Uint) return Boolean is
     begin
        --  Quick processing for identical arguments
  
        if Int (Left) = Int (Right) then
--- 1746,1768 ----
     -- UI_Lt --
     ------------
  
!    function UI_Lt (Left : Int; Right : Valid_Uint) return Boolean is
     begin
        return UI_Lt (UI_From_Int (Left), Right);
     end UI_Lt;
  
!    function UI_Lt (Left : Valid_Uint; Right : Int) return Boolean is
     begin
        return UI_Lt (Left, UI_From_Int (Right));
     end UI_Lt;
  
!    function UI_Lt (Left : Valid_Uint; Right : Valid_Uint) return Boolean is
     begin
+       pragma Assert (Present (Left));
+       pragma Assert (Present (Right));
+       --  Assertions are here in case we're called from C++ code, which does
+       --  not check the predicates.
+ 
        --  Quick processing for identical arguments
  
        if Int (Left) = Int (Right) then
*************** package body Uintp is
*** 1777,1793 ****
     -- UI_Max --
     ------------
  
!    function UI_Max (Left : Int; Right : Uint) return Uint is
     begin
        return UI_Max (UI_From_Int (Left), Right);
     end UI_Max;
  
!    function UI_Max (Left : Uint; Right : Int) return Uint is
     begin
        return UI_Max (Left, UI_From_Int (Right));
     end UI_Max;
  
!    function UI_Max (Left : Uint; Right : Uint) return Uint is
     begin
        if Left >= Right then
           return Left;
--- 1844,1860 ----
     -- UI_Max --
     ------------
  
!    function UI_Max (Left : Int; Right : Valid_Uint) return Valid_Uint is
     begin
        return UI_Max (UI_From_Int (Left), Right);
     end UI_Max;
  
!    function UI_Max (Left : Valid_Uint; Right : Int) return Valid_Uint is
     begin
        return UI_Max (Left, UI_From_Int (Right));
     end UI_Max;
  
!    function UI_Max (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint is
     begin
        if Left >= Right then
           return Left;
*************** package body Uintp is
*** 1800,1816 ****
     -- UI_Min --
     ------------
  
!    function UI_Min (Left : Int; Right : Uint) return Uint is
     begin
        return UI_Min (UI_From_Int (Left), Right);
     end UI_Min;
  
!    function UI_Min (Left : Uint; Right : Int) return Uint is
     begin
        return UI_Min (Left, UI_From_Int (Right));
     end UI_Min;
  
!    function UI_Min (Left : Uint; Right : Uint) return Uint is
     begin
        if Left <= Right then
           return Left;
--- 1867,1883 ----
     -- UI_Min --
     ------------
  
!    function UI_Min (Left : Int; Right : Valid_Uint) return Valid_Uint is
     begin
        return UI_Min (UI_From_Int (Left), Right);
     end UI_Min;
  
!    function UI_Min (Left : Valid_Uint; Right : Int) return Valid_Uint is
     begin
        return UI_Min (Left, UI_From_Int (Right));
     end UI_Min;
  
!    function UI_Min (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint is
     begin
        if Left <= Right then
           return Left;
*************** package body Uintp is
*** 1823,1840 ****
     -- UI_Mod --
     -------------
  
!    function UI_Mod (Left : Int; Right : Uint) return Uint is
     begin
        return UI_Mod (UI_From_Int (Left), Right);
     end UI_Mod;
  
!    function UI_Mod (Left : Uint; Right : Int) return Uint is
     begin
        return UI_Mod (Left, UI_From_Int (Right));
     end UI_Mod;
  
!    function UI_Mod (Left : Uint; Right : Uint) return Uint is
!       Urem : constant Uint := Left rem Right;
  
     begin
        if (Left < Uint_0) = (Right < Uint_0)
--- 1890,1911 ----
     -- UI_Mod --
     -------------
  
!    function UI_Mod (Left : Int; Right : Nonzero_Uint) return Valid_Uint is
     begin
        return UI_Mod (UI_From_Int (Left), Right);
     end UI_Mod;
  
!    function UI_Mod
!      (Left : Valid_Uint; Right : Nonzero_Int) return Valid_Uint
!    is
     begin
        return UI_Mod (Left, UI_From_Int (Right));
     end UI_Mod;
  
!    function UI_Mod
!      (Left : Valid_Uint; Right : Nonzero_Uint) return Valid_Uint
!    is
!       Urem : constant Valid_Uint := Left rem Right;
  
     begin
        if (Left < Uint_0) = (Right < Uint_0)
*************** package body Uintp is
*** 1851,1865 ****
     -------------------------------
  
     function UI_Modular_Exponentiation
!      (B      : Uint;
!       E      : Uint;
!       Modulo : Uint) return Uint
     is
        M : constant Save_Mark := Mark;
  
!       Result   : Uint := Uint_1;
!       Base     : Uint := B;
!       Exponent : Uint := E;
  
     begin
        while Exponent /= Uint_0 loop
--- 1922,1936 ----
     -------------------------------
  
     function UI_Modular_Exponentiation
!      (B      : Valid_Uint;
!       E      : Valid_Uint;
!       Modulo : Valid_Uint) return Valid_Uint
     is
        M : constant Save_Mark := Mark;
  
!       Result   : Valid_Uint := Uint_1;
!       Base     : Valid_Uint := B;
!       Exponent : Valid_Uint := E;
  
     begin
        while Exponent /= Uint_0 loop
*************** package body Uintp is
*** 1879,1893 ****
     -- UI_Modular_Inverse --
     ------------------------
  
!    function UI_Modular_Inverse (N : Uint; Modulo : Uint) return Uint is
        M : constant Save_Mark := Mark;
!       U : Uint;
!       V : Uint;
!       Q : Uint;
!       R : Uint;
!       X : Uint;
!       Y : Uint;
!       T : Uint;
        S : Int := 1;
  
     begin
--- 1950,1966 ----
     -- UI_Modular_Inverse --
     ------------------------
  
!    function UI_Modular_Inverse
!      (N : Valid_Uint; Modulo : Valid_Uint) return Valid_Uint
!    is
        M : constant Save_Mark := Mark;
!       U : Valid_Uint;
!       V : Valid_Uint;
!       Q : Valid_Uint;
!       R : Valid_Uint;
!       X : Valid_Uint;
!       Y : Valid_Uint;
!       T : Valid_Uint;
        S : Int := 1;
  
     begin
*************** package body Uintp is
*** 1923,1939 ****
     -- UI_Mul --
     ------------
  
!    function UI_Mul (Left : Int; Right : Uint) return Uint is
     begin
        return UI_Mul (UI_From_Int (Left), Right);
     end UI_Mul;
  
!    function UI_Mul (Left : Uint; Right : Int) return Uint is
     begin
        return UI_Mul (Left, UI_From_Int (Right));
     end UI_Mul;
  
!    function UI_Mul (Left : Uint; Right : Uint) return Uint is
     begin
        --  Case where product fits in the range of a 32-bit integer
  
--- 1996,2012 ----
     -- UI_Mul --
     ------------
  
!    function UI_Mul (Left : Int; Right : Valid_Uint) return Valid_Uint is
     begin
        return UI_Mul (UI_From_Int (Left), Right);
     end UI_Mul;
  
!    function UI_Mul (Left : Valid_Uint; Right : Int) return Valid_Uint is
     begin
        return UI_Mul (Left, UI_From_Int (Right));
     end UI_Mul;
  
!    function UI_Mul (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint is
     begin
        --  Case where product fits in the range of a 32-bit integer
  
*************** package body Uintp is
*** 1991,2010 ****
     -- UI_Ne --
     ------------
  
!    function UI_Ne (Left : Int; Right : Uint) return Boolean is
     begin
        return UI_Ne (UI_From_Int (Left), Right);
     end UI_Ne;
  
!    function UI_Ne (Left : Uint; Right : Int) return Boolean is
     begin
        return UI_Ne (Left, UI_From_Int (Right));
     end UI_Ne;
  
!    function UI_Ne (Left : Uint; Right : Uint) return Boolean is
     begin
!       --  Quick processing for identical arguments. Note that this takes
!       --  care of the case of two No_Uint arguments.
  
        if Int (Left) = Int (Right) then
           return False;
--- 2064,2087 ----
     -- UI_Ne --
     ------------
  
!    function UI_Ne (Left : Int; Right : Valid_Uint) return Boolean is
     begin
        return UI_Ne (UI_From_Int (Left), Right);
     end UI_Ne;
  
!    function UI_Ne (Left : Valid_Uint; Right : Int) return Boolean is
     begin
        return UI_Ne (Left, UI_From_Int (Right));
     end UI_Ne;
  
!    function UI_Ne (Left : Valid_Uint; Right : Valid_Uint) return Boolean is
     begin
!       pragma Assert (Present (Left));
!       pragma Assert (Present (Right));
!       --  Assertions are here in case we're called from C++ code, which does
!       --  not check the predicates.
! 
!       --  Quick processing for identical arguments
  
        if Int (Left) = Int (Right) then
           return False;
*************** package body Uintp is
*** 2062,2068 ****
     -- UI_Negate --
     ----------------
  
!    function UI_Negate (Right : Uint) return Uint is
     begin
        --  Case where input is directly represented. Note that since the range
        --  of Direct values is non-symmetrical, the result may not be directly
--- 2139,2145 ----
     -- UI_Negate --
     ----------------
  
!    function UI_Negate (Right : Valid_Uint) return Valid_Uint is
     begin
        --  Case where input is directly represented. Note that since the range
        --  of Direct values is non-symmetrical, the result may not be directly
*************** package body Uintp is
*** 2095,2114 ****
     -- UI_Rem --
     -------------
  
!    function UI_Rem (Left : Int; Right : Uint) return Uint is
     begin
        return UI_Rem (UI_From_Int (Left), Right);
     end UI_Rem;
  
!    function UI_Rem (Left : Uint; Right : Int) return Uint is
     begin
        return UI_Rem (Left, UI_From_Int (Right));
     end UI_Rem;
  
!    function UI_Rem (Left, Right : Uint) return Uint is
!       Remainder : Uint;
!       Quotient  : Uint;
!       pragma Warnings (Off, Quotient);
  
     begin
        pragma Assert (Right /= Uint_0);
--- 2172,2194 ----
     -- UI_Rem --
     -------------
  
!    function UI_Rem (Left : Int; Right : Nonzero_Uint) return Valid_Uint is
     begin
        return UI_Rem (UI_From_Int (Left), Right);
     end UI_Rem;
  
!    function UI_Rem
!      (Left : Valid_Uint; Right : Nonzero_Int) return Valid_Uint
!    is
     begin
        return UI_Rem (Left, UI_From_Int (Right));
     end UI_Rem;
  
!    function UI_Rem
!      (Left : Valid_Uint; Right : Nonzero_Uint) return Valid_Uint
!    is
!       Remainder : Valid_Uint;
!       Ignored_Quotient  : Uint;
  
     begin
        pragma Assert (Right /= Uint_0);
*************** package body Uintp is
*** 2118,2124 ****
  
        else
           UI_Div_Rem
!            (Left, Right, Quotient, Remainder, Discard_Quotient => True);
           return Remainder;
        end if;
     end UI_Rem;
--- 2198,2205 ----
  
        else
           UI_Div_Rem
!            (Left, Right, Ignored_Quotient, Remainder,
!             Discard_Quotient => True);
           return Remainder;
        end if;
     end UI_Rem;
*************** package body Uintp is
*** 2127,2143 ****
     -- UI_Sub --
     ------------
  
!    function UI_Sub (Left : Int; Right : Uint) return Uint is
     begin
        return UI_Add (Left, -Right);
     end UI_Sub;
  
!    function UI_Sub (Left : Uint; Right : Int) return Uint is
     begin
        return UI_Add (Left, -Right);
     end UI_Sub;
  
!    function UI_Sub (Left : Uint; Right : Uint) return Uint is
     begin
        if Direct (Left) and then Direct (Right) then
           return UI_From_Int (Direct_Val (Left) - Direct_Val (Right));
--- 2208,2224 ----
     -- UI_Sub --
     ------------
  
!    function UI_Sub (Left : Int; Right : Valid_Uint) return Valid_Uint is
     begin
        return UI_Add (Left, -Right);
     end UI_Sub;
  
!    function UI_Sub (Left : Valid_Uint; Right : Int) return Valid_Uint is
     begin
        return UI_Add (Left, -Right);
     end UI_Sub;
  
!    function UI_Sub (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint is
     begin
        if Direct (Left) and then Direct (Right) then
           return UI_From_Int (Direct_Val (Left) - Direct_Val (Right));
*************** package body Uintp is
*** 2150,2156 ****
     -- UI_To_CC --
     --------------
  
!    function UI_To_CC (Input : Uint) return Char_Code is
     begin
        if Direct (Input) then
           return Char_Code (Direct_Val (Input));
--- 2231,2237 ----
     -- UI_To_CC --
     --------------
  
!    function UI_To_CC (Input : Valid_Uint) return Char_Code is
     begin
        if Direct (Input) then
           return Char_Code (Direct_Val (Input));
*************** package body Uintp is
*** 2179,2191 ****
        end if;
     end UI_To_CC;
  
!    ----------------
     -- UI_To_Int --
!    ----------------
! 
!    function UI_To_Int (Input : Uint) return Int is
!       pragma Assert (Input /= No_Uint);
  
     begin
        if Direct (Input) then
           return Direct_Val (Input);
--- 2260,2270 ----
        end if;
     end UI_To_CC;
  
!    ---------------
     -- UI_To_Int --
!    ---------------
  
+    function UI_To_Int (Input : Valid_Uint) return Int is
     begin
        if Direct (Input) then
           return Direct_Val (Input);
*************** package body Uintp is
*** 2230,2235 ****
--- 2309,2352 ----
        end if;
     end UI_To_Int;
  
+    -----------------
+    -- UI_To_Uns64 --
+    -----------------
+ 
+    function UI_To_Unsigned_64 (Input : Valid_Uint) return Unsigned_64 is
+    begin
+       if Input < Uint_0 then
+          raise Constraint_Error;
+       end if;
+ 
+       if Direct (Input) then
+          return Unsigned_64 (Direct_Val (Input));
+ 
+       --  Case of input is more than one digit
+ 
+       else
+          if Input >= Uint_2**Int'(64) then
+             raise Constraint_Error;
+          end if;
+ 
+          declare
+             In_Length : constant Int := N_Digits (Input);
+             In_Vec    : UI_Vector (1 .. In_Length);
+             Ret_Int   : Unsigned_64 := 0;
+ 
+          begin
+             Init_Operand (Input, In_Vec);
+ 
+             for Idx in In_Vec'Range loop
+                Ret_Int :=
+                  Ret_Int * Unsigned_64 (Base) + Unsigned_64 (In_Vec (Idx));
+             end loop;
+ 
+             return Ret_Int;
+          end;
+       end if;
+    end UI_To_Unsigned_64;
+ 
     --------------
     -- UI_Write --
     --------------
*************** package body Uintp is
*** 2245,2252 ****
  
     function Vector_To_Uint
       (In_Vec   : UI_Vector;
!       Negative : Boolean)
!       return     Uint
     is
        Size : Int;
        Val  : Int;
--- 2362,2368 ----
  
     function Vector_To_Uint
       (In_Vec   : UI_Vector;
!       Negative : Boolean) return Valid_Uint
     is
        Size : Int;
        Val  : Int;
*************** package body Uintp is
*** 2266,2274 ****
  
              if Size = Int_1 then
                 if Negative then
!                   return Uint (Int (Uint_Direct_Bias) - In_Vec (J));
                 else
!                   return Uint (Int (Uint_Direct_Bias) + In_Vec (J));
                 end if;
  
              --  Positive two digit values may be in direct representation range
--- 2382,2390 ----
  
              if Size = Int_1 then
                 if Negative then
!                   return Valid_Uint (Int (Uint_Direct_Bias) - In_Vec (J));
                 else
!                   return Valid_Uint (Int (Uint_Direct_Bias) + In_Vec (J));
                 end if;
  
              --  Positive two digit values may be in direct representation range
*************** package body Uintp is
*** 2277,2283 ****
                 Val := In_Vec (J) * Base + In_Vec (J + 1);
  
                 if Val <= Max_Direct then
!                   return Uint (Int (Uint_Direct_Bias) + Val);
                 end if;
              end if;
  
--- 2393,2399 ----
                 Val := In_Vec (J) * Base + In_Vec (J + 1);
  
                 if Val <= Max_Direct then
!                   return Valid_Uint (Int (Uint_Direct_Bias) + Val);
                 end if;
              end if;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/uintp.ads gcc-12.1.0/gcc/ada/uintp.ads
*** gcc-11.3.0/gcc/ada/uintp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/uintp.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Uintp is
*** 90,106 ****
     Uint_Minus_127 : constant Uint;
     Uint_Minus_128 : constant Uint;
  
!    type UI_Vector is array (Pos range <>) of Int;
!    --  Vector containing the integer values of a Uint value
  
!    --  Note: An earlier version of this package used pointers of arrays of Ints
!    --  (dynamically allocated) for the Uint type. The change leads to a few
!    --  less natural idioms used throughout this code, but eliminates all uses
!    --  of the heap except for the table package itself. For example, Uint
!    --  parameters are often converted to UI_Vectors for internal manipulation.
!    --  This is done by creating the local UI_Vector using the function N_Digits
!    --  on the Uint to find the size needed for the vector, and then calling
!    --  Init_Operand to copy the values out of the table into the vector.
  
     -----------------
     -- Subprograms --
--- 90,113 ----
     Uint_Minus_127 : constant Uint;
     Uint_Minus_128 : constant Uint;
  
!    --  Functions for detecting No_Uint. Note that clients of this package
!    --  cannot use "=" and "/=" to compare with No_Uint; they must use No
!    --  and Present instead.
  
!    function No (X : Uint) return Boolean is (X = No_Uint);
!    --  Note that this is using the predefined "=", not the "=" declared below,
!    --  which would blow up on No_Uint.
! 
!    function Present (X : Uint) return Boolean is (not No (X));
! 
!    subtype Valid_Uint is Uint with Predicate => Present (Valid_Uint);
!    subtype Unat is Valid_Uint with Predicate => Unat >= Uint_0; -- natural
!    subtype Upos is Valid_Uint with Predicate => Upos >= Uint_1; -- positive
!    subtype Nonzero_Uint is Valid_Uint with Predicate => Nonzero_Uint /= Uint_0;
!    subtype Unegative is Valid_Uint with Predicate => Unegative < Uint_0;
!    subtype Ubool is Valid_Uint with Predicate => Ubool in Uint_0 | Uint_1;
!    subtype Opt_Ubool is Uint with
!      Predicate => No (Opt_Ubool) or else Opt_Ubool in Ubool;
  
     -----------------
     -- Subprograms --
*************** package Uintp is
*** 111,282 ****
     --  unit, these are among the few tables that can be expanded during
     --  gigi processing.
  
!    function UI_Abs (Right : Uint) return Uint;
     pragma Inline (UI_Abs);
     --  Returns abs function of universal integer
  
!    function UI_Add (Left : Uint; Right : Uint) return Uint;
!    function UI_Add (Left : Int;  Right : Uint) return Uint;
!    function UI_Add (Left : Uint; Right : Int)  return Uint;
     --  Returns sum of two integer values
  
!    function UI_Decimal_Digits_Hi (U : Uint) return Nat;
     --  Returns an estimate of the number of decimal digits required to
     --  represent the absolute value of U. This estimate is correct or high,
     --  i.e. it never returns a value that is too low. The accuracy of the
     --  estimate affects only the effectiveness of comparison optimizations
     --  in Urealp.
  
!    function UI_Decimal_Digits_Lo (U : Uint) return Nat;
     --  Returns an estimate of the number of decimal digits required to
     --  represent the absolute value of U. This estimate is correct or low,
     --  i.e. it never returns a value that is too high. The accuracy of the
     --  estimate affects only the effectiveness of comparison optimizations
     --  in Urealp.
  
!    function UI_Div (Left : Uint; Right : Uint) return Uint;
!    function UI_Div (Left : Int;  Right : Uint) return Uint;
!    function UI_Div (Left : Uint; Right : Int)  return Uint;
     --  Returns quotient of two integer values. Fatal error if Right = 0
  
!    function UI_Eq (Left : Uint; Right : Uint) return Boolean;
!    function UI_Eq (Left : Int;  Right : Uint) return Boolean;
!    function UI_Eq (Left : Uint; Right : Int)  return Boolean;
     pragma Inline (UI_Eq);
     --  Compares integer values for equality
  
!    function UI_Expon (Left : Uint; Right : Uint) return Uint;
!    function UI_Expon (Left : Int;  Right : Uint) return Uint;
!    function UI_Expon (Left : Uint; Right : Int)  return Uint;
!    function UI_Expon (Left : Int;  Right : Int)  return Uint;
     --  Returns result of exponentiating two integer values.
     --  Fatal error if Right is negative.
  
!    function UI_GCD (Uin, Vin : Uint) return Uint;
     --  Computes GCD of input values. Assumes Uin >= Vin >= 0
  
!    function UI_Ge (Left : Uint; Right : Uint) return Boolean;
!    function UI_Ge (Left : Int;  Right : Uint) return Boolean;
!    function UI_Ge (Left : Uint; Right : Int)  return Boolean;
     pragma Inline (UI_Ge);
     --  Compares integer values for greater than or equal
  
!    function UI_Gt (Left : Uint; Right : Uint) return Boolean;
!    function UI_Gt (Left : Int;  Right : Uint) return Boolean;
!    function UI_Gt (Left : Uint; Right : Int)  return Boolean;
     pragma Inline (UI_Gt);
     --  Compares integer values for greater than
  
!    function UI_Is_In_Int_Range (Input : Uint) return Boolean;
     pragma Inline (UI_Is_In_Int_Range);
!    --  Determines if universal integer is in Int range
  
!    function UI_Le (Left : Uint; Right : Uint) return Boolean;
!    function UI_Le (Left : Int;  Right : Uint) return Boolean;
!    function UI_Le (Left : Uint; Right : Int)  return Boolean;
     pragma Inline (UI_Le);
     --  Compares integer values for less than or equal
  
!    function UI_Lt (Left : Uint; Right : Uint) return Boolean;
!    function UI_Lt (Left : Int;  Right : Uint) return Boolean;
!    function UI_Lt (Left : Uint; Right : Int)  return Boolean;
     --  Compares integer values for less than
  
!    function UI_Max (Left : Uint; Right : Uint) return Uint;
!    function UI_Max (Left : Int;  Right : Uint) return Uint;
!    function UI_Max (Left : Uint; Right : Int)  return Uint;
     --  Returns maximum of two integer values
  
!    function UI_Min (Left : Uint; Right : Uint) return Uint;
!    function UI_Min (Left : Int;  Right : Uint) return Uint;
!    function UI_Min (Left : Uint; Right : Int)  return Uint;
     --  Returns minimum of two integer values
  
!    function UI_Mod (Left : Uint; Right : Uint) return Uint;
!    function UI_Mod (Left : Int;  Right : Uint) return Uint;
!    function UI_Mod (Left : Uint; Right : Int)  return Uint;
     pragma Inline (UI_Mod);
     --  Returns mod function of two integer values
  
!    function UI_Mul (Left : Uint; Right : Uint) return Uint;
!    function UI_Mul (Left : Int;  Right : Uint) return Uint;
!    function UI_Mul (Left : Uint; Right : Int)  return Uint;
     --  Returns product of two integer values
  
!    function UI_Ne (Left : Uint; Right : Uint) return Boolean;
!    function UI_Ne (Left : Int;  Right : Uint) return Boolean;
!    function UI_Ne (Left : Uint; Right : Int)  return Boolean;
     pragma Inline (UI_Ne);
     --  Compares integer values for inequality
  
!    function UI_Negate (Right : Uint) return Uint;
     pragma Inline (UI_Negate);
     --  Returns negative of universal integer
  
!    function UI_Rem (Left : Uint; Right : Uint) return Uint;
!    function UI_Rem (Left : Int;  Right : Uint) return Uint;
!    function UI_Rem (Left : Uint; Right : Int)  return Uint;
     --  Returns rem of two integer values
  
!    function UI_Sub (Left : Uint; Right : Uint) return Uint;
!    function UI_Sub (Left : Int;  Right : Uint) return Uint;
!    function UI_Sub (Left : Uint; Right : Int)  return Uint;
     pragma Inline (UI_Sub);
     --  Returns difference of two integer values
  
!    function UI_Modular_Exponentiation
!      (B      : Uint;
!       E      : Uint;
!       Modulo : Uint) return Uint;
!    --  Efficiently compute (B**E) rem Modulo
! 
!    function UI_Modular_Inverse (N : Uint; Modulo : Uint) return Uint;
!    --  Compute the multiplicative inverse of N in modular arithmetics with the
!    --  given Modulo (uses Euclid's algorithm). Note: the call is considered
!    --  to be erroneous (and the behavior is undefined) if n is not invertible.
! 
!    function UI_From_Int (Input : Int) return Uint;
     --  Converts Int value to universal integer form
  
     generic
        type In_T is range <>;
!    function UI_From_Integral (Input : In_T) return Uint;
     --  Likewise, but converts from any integer type. Must not be applied to
     --  biased types (instantiation will provide a warning if actual is a biased
     --  type).
  
!    function UI_From_CC (Input : Char_Code) return Uint;
     --  Converts Char_Code value to universal integer form
  
!    function UI_To_Int (Input : Uint) return Int;
     --  Converts universal integer value to Int. Constraint_Error if value is
     --  not in appropriate range.
  
!    function UI_To_CC (Input : Uint) return Char_Code;
     --  Converts universal integer value to Char_Code. Constraint_Error if value
     --  is not in Char_Code range.
  
!    function Num_Bits (Input : Uint) return Nat;
     --  Approximate number of binary bits in given universal integer. This
     --  function is used for capacity checks, and it can be one bit off
     --  without affecting its usage.
  
-    function Vector_To_Uint
-      (In_Vec   : UI_Vector;
-       Negative : Boolean) return Uint;
-    --  Functions that calculate values in UI_Vectors, call this function to
-    --  create and return the Uint value. In_Vec contains the multiple precision
-    --  (Base) representation of a non-negative value. Leading zeroes are
-    --  permitted. Negative is set if the desired result is the negative of the
-    --  given value. The result will be either the appropriate directly
-    --  represented value, or a table entry in the proper canonical format is
-    --  created and returned.
-    --
-    --  Note that Init_Operand puts a signed value in the result vector, but
-    --  Vector_To_Uint is always presented with a non-negative value. The
-    --  processing of signs is something that is done by the caller before
-    --  calling Vector_To_Uint.
- 
     ---------------------
     -- Output Routines --
     ---------------------
--- 118,267 ----
     --  unit, these are among the few tables that can be expanded during
     --  gigi processing.
  
!    function UI_Abs (Right : Valid_Uint) return Unat;
     pragma Inline (UI_Abs);
     --  Returns abs function of universal integer
  
!    function UI_Add (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint;
!    function UI_Add (Left : Int;  Right : Valid_Uint) return Valid_Uint;
!    function UI_Add (Left : Valid_Uint; Right : Int)  return Valid_Uint;
     --  Returns sum of two integer values
  
!    function UI_Decimal_Digits_Hi (U : Valid_Uint) return Nat;
     --  Returns an estimate of the number of decimal digits required to
     --  represent the absolute value of U. This estimate is correct or high,
     --  i.e. it never returns a value that is too low. The accuracy of the
     --  estimate affects only the effectiveness of comparison optimizations
     --  in Urealp.
  
!    function UI_Decimal_Digits_Lo (U : Valid_Uint) return Nat;
     --  Returns an estimate of the number of decimal digits required to
     --  represent the absolute value of U. This estimate is correct or low,
     --  i.e. it never returns a value that is too high. The accuracy of the
     --  estimate affects only the effectiveness of comparison optimizations
     --  in Urealp.
  
!    function UI_Div (Left : Valid_Uint; Right : Nonzero_Uint) return Valid_Uint;
!    function UI_Div (Left : Int;  Right : Nonzero_Uint) return Valid_Uint;
!    function UI_Div (Left : Valid_Uint; Right : Nonzero_Int)  return Valid_Uint;
     --  Returns quotient of two integer values. Fatal error if Right = 0
  
!    function UI_Eq (Left : Valid_Uint; Right : Valid_Uint) return Boolean;
!    function UI_Eq (Left : Int;  Right : Valid_Uint) return Boolean;
!    function UI_Eq (Left : Valid_Uint; Right : Int)  return Boolean;
     pragma Inline (UI_Eq);
     --  Compares integer values for equality
  
!    function UI_Expon (Left : Valid_Uint; Right : Unat) return Valid_Uint;
!    function UI_Expon (Left : Int;  Right : Unat) return Valid_Uint;
!    function UI_Expon (Left : Valid_Uint; Right : Nat)  return Valid_Uint;
!    function UI_Expon (Left : Int;  Right : Nat)  return Valid_Uint;
     --  Returns result of exponentiating two integer values.
     --  Fatal error if Right is negative.
  
!    function UI_GCD (Uin, Vin : Valid_Uint) return Valid_Uint;
     --  Computes GCD of input values. Assumes Uin >= Vin >= 0
  
!    function UI_Ge (Left : Valid_Uint; Right : Valid_Uint) return Boolean;
!    function UI_Ge (Left : Int;  Right : Valid_Uint) return Boolean;
!    function UI_Ge (Left : Valid_Uint; Right : Int)  return Boolean;
     pragma Inline (UI_Ge);
     --  Compares integer values for greater than or equal
  
!    function UI_Gt (Left : Valid_Uint; Right : Valid_Uint) return Boolean;
!    function UI_Gt (Left : Int;  Right : Valid_Uint) return Boolean;
!    function UI_Gt (Left : Valid_Uint; Right : Int)  return Boolean;
     pragma Inline (UI_Gt);
     --  Compares integer values for greater than
  
!    function UI_Is_In_Int_Range (Input : Valid_Uint) return Boolean;
     pragma Inline (UI_Is_In_Int_Range);
!    --  Determines if universal integer is in Int range.
  
!    function UI_Le (Left : Valid_Uint; Right : Valid_Uint) return Boolean;
!    function UI_Le (Left : Int;  Right : Valid_Uint) return Boolean;
!    function UI_Le (Left : Valid_Uint; Right : Int)  return Boolean;
     pragma Inline (UI_Le);
     --  Compares integer values for less than or equal
  
!    function UI_Lt (Left : Valid_Uint; Right : Valid_Uint) return Boolean;
!    function UI_Lt (Left : Int;  Right : Valid_Uint) return Boolean;
!    function UI_Lt (Left : Valid_Uint; Right : Int)  return Boolean;
     --  Compares integer values for less than
  
!    function UI_Max (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint;
!    function UI_Max (Left : Int;  Right : Valid_Uint) return Valid_Uint;
!    function UI_Max (Left : Valid_Uint; Right : Int)  return Valid_Uint;
     --  Returns maximum of two integer values
  
!    function UI_Min (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint;
!    function UI_Min (Left : Int;  Right : Valid_Uint) return Valid_Uint;
!    function UI_Min (Left : Valid_Uint; Right : Int)  return Valid_Uint;
     --  Returns minimum of two integer values
  
!    function UI_Mod (Left : Valid_Uint; Right : Nonzero_Uint) return Valid_Uint;
!    function UI_Mod (Left : Int;  Right : Nonzero_Uint) return Valid_Uint;
!    function UI_Mod (Left : Valid_Uint; Right : Nonzero_Int)  return Valid_Uint;
     pragma Inline (UI_Mod);
     --  Returns mod function of two integer values
  
!    function UI_Mul (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint;
!    function UI_Mul (Left : Int;  Right : Valid_Uint) return Valid_Uint;
!    function UI_Mul (Left : Valid_Uint; Right : Int)  return Valid_Uint;
     --  Returns product of two integer values
  
!    function UI_Ne (Left : Valid_Uint; Right : Valid_Uint) return Boolean;
!    function UI_Ne (Left : Int;  Right : Valid_Uint) return Boolean;
!    function UI_Ne (Left : Valid_Uint; Right : Int)  return Boolean;
     pragma Inline (UI_Ne);
     --  Compares integer values for inequality
  
!    function UI_Negate (Right : Valid_Uint) return Valid_Uint;
     pragma Inline (UI_Negate);
     --  Returns negative of universal integer
  
!    function UI_Rem (Left : Valid_Uint; Right : Nonzero_Uint) return Valid_Uint;
!    function UI_Rem (Left : Int;  Right : Nonzero_Uint) return Valid_Uint;
!    function UI_Rem (Left : Valid_Uint; Right : Nonzero_Int)  return Valid_Uint;
     --  Returns rem of two integer values
  
!    function UI_Sub (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint;
!    function UI_Sub (Left : Int;  Right : Valid_Uint) return Valid_Uint;
!    function UI_Sub (Left : Valid_Uint; Right : Int)  return Valid_Uint;
     pragma Inline (UI_Sub);
     --  Returns difference of two integer values
  
!    function UI_From_Int (Input : Int) return Valid_Uint;
     --  Converts Int value to universal integer form
  
     generic
        type In_T is range <>;
!    function UI_From_Integral (Input : In_T) return Valid_Uint;
     --  Likewise, but converts from any integer type. Must not be applied to
     --  biased types (instantiation will provide a warning if actual is a biased
     --  type).
  
!    function UI_From_CC (Input : Char_Code) return Valid_Uint;
     --  Converts Char_Code value to universal integer form
  
!    function UI_To_Int (Input : Valid_Uint) return Int;
     --  Converts universal integer value to Int. Constraint_Error if value is
     --  not in appropriate range.
  
!    type Unsigned_64 is mod 2**64;
!    function UI_To_Unsigned_64 (Input : Valid_Uint) return Unsigned_64;
!    --  Converts universal integer value to Unsigned_64. Constraint_Error if
!    --  value is not in appropriate range.
! 
!    function UI_To_CC (Input : Valid_Uint) return Char_Code;
     --  Converts universal integer value to Char_Code. Constraint_Error if value
     --  is not in Char_Code range.
  
!    function Num_Bits (Input : Valid_Uint) return Nat;
     --  Approximate number of binary bits in given universal integer. This
     --  function is used for capacity checks, and it can be one bit off
     --  without affecting its usage.
  
     ---------------------
     -- Output Routines --
     ---------------------
*************** package Uintp is
*** 328,385 ****
     -- Operator Renamings --
     ------------------------
  
!    function "+" (Left : Uint; Right : Uint) return Uint renames UI_Add;
!    function "+" (Left : Int;  Right : Uint) return Uint renames UI_Add;
!    function "+" (Left : Uint; Right : Int)  return Uint renames UI_Add;
  
!    function "/" (Left : Uint; Right : Uint) return Uint renames UI_Div;
!    function "/" (Left : Int;  Right : Uint) return Uint renames UI_Div;
!    function "/" (Left : Uint; Right : Int)  return Uint renames UI_Div;
  
!    function "*" (Left : Uint; Right : Uint) return Uint renames UI_Mul;
!    function "*" (Left : Int;  Right : Uint) return Uint renames UI_Mul;
!    function "*" (Left : Uint; Right : Int)  return Uint renames UI_Mul;
  
!    function "-" (Left : Uint; Right : Uint) return Uint renames UI_Sub;
!    function "-" (Left : Int;  Right : Uint) return Uint renames UI_Sub;
!    function "-" (Left : Uint; Right : Int)  return Uint renames UI_Sub;
  
!    function "**"  (Left : Uint; Right : Uint) return Uint renames UI_Expon;
!    function "**"  (Left : Uint; Right : Int)  return Uint renames UI_Expon;
!    function "**"  (Left : Int;  Right : Uint) return Uint renames UI_Expon;
!    function "**"  (Left : Int;  Right : Int)  return Uint renames UI_Expon;
  
!    function "abs" (Real : Uint) return Uint renames UI_Abs;
  
!    function "mod" (Left : Uint; Right : Uint) return Uint renames UI_Mod;
!    function "mod" (Left : Int;  Right : Uint) return Uint renames UI_Mod;
!    function "mod" (Left : Uint; Right : Int)  return Uint renames UI_Mod;
  
!    function "rem" (Left : Uint; Right : Uint) return Uint renames UI_Rem;
!    function "rem" (Left : Int;  Right : Uint) return Uint renames UI_Rem;
!    function "rem" (Left : Uint; Right : Int)  return Uint renames UI_Rem;
  
!    function "-"   (Real : Uint) return Uint renames UI_Negate;
  
!    function "="   (Left : Uint; Right : Uint) return Boolean renames UI_Eq;
!    function "="   (Left : Int;  Right : Uint) return Boolean renames UI_Eq;
!    function "="   (Left : Uint; Right : Int)  return Boolean renames UI_Eq;
  
!    function ">="  (Left : Uint; Right : Uint) return Boolean renames UI_Ge;
!    function ">="  (Left : Int;  Right : Uint) return Boolean renames UI_Ge;
!    function ">="  (Left : Uint; Right : Int)  return Boolean renames UI_Ge;
  
!    function ">"   (Left : Uint; Right : Uint) return Boolean renames UI_Gt;
!    function ">"   (Left : Int;  Right : Uint) return Boolean renames UI_Gt;
!    function ">"   (Left : Uint; Right : Int)  return Boolean renames UI_Gt;
  
!    function "<="  (Left : Uint; Right : Uint) return Boolean renames UI_Le;
!    function "<="  (Left : Int;  Right : Uint) return Boolean renames UI_Le;
!    function "<="  (Left : Uint; Right : Int)  return Boolean renames UI_Le;
  
!    function "<"   (Left : Uint; Right : Uint) return Boolean renames UI_Lt;
!    function "<"   (Left : Int;  Right : Uint) return Boolean renames UI_Lt;
!    function "<"   (Left : Uint; Right : Int)  return Boolean renames UI_Lt;
  
     -----------------------------
     -- Mark/Release Processing --
--- 313,409 ----
     -- Operator Renamings --
     ------------------------
  
!    function "+" (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint
!      renames UI_Add;
!    function "+" (Left : Int;  Right : Valid_Uint) return Valid_Uint
!      renames UI_Add;
!    function "+" (Left : Valid_Uint; Right : Int)  return Valid_Uint
!      renames UI_Add;
  
!    function "/" (Left : Valid_Uint; Right : Nonzero_Uint) return Valid_Uint
!      renames UI_Div;
!    function "/" (Left : Int;  Right : Nonzero_Uint) return Valid_Uint
!      renames UI_Div;
!    function "/" (Left : Valid_Uint; Right : Nonzero_Int)  return Valid_Uint
!      renames UI_Div;
  
!    function "*" (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint
!      renames UI_Mul;
!    function "*" (Left : Int;  Right : Valid_Uint) return Valid_Uint
!      renames UI_Mul;
!    function "*" (Left : Valid_Uint; Right : Int)  return Valid_Uint
!      renames UI_Mul;
  
!    function "-" (Left : Valid_Uint; Right : Valid_Uint) return Valid_Uint
!      renames UI_Sub;
!    function "-" (Left : Int;  Right : Valid_Uint) return Valid_Uint
!      renames UI_Sub;
!    function "-" (Left : Valid_Uint; Right : Int)  return Valid_Uint
!      renames UI_Sub;
  
!    function "**"  (Left : Valid_Uint; Right : Unat) return Valid_Uint
!      renames UI_Expon;
!    function "**"  (Left : Valid_Uint; Right : Nat)  return Valid_Uint
!      renames UI_Expon;
!    function "**"  (Left : Int;  Right : Unat) return Valid_Uint
!      renames UI_Expon;
!    function "**"  (Left : Int;  Right : Nat)  return Valid_Uint
!      renames UI_Expon;
  
!    function "abs" (Real : Valid_Uint) return Unat
!      renames UI_Abs;
  
!    function "mod" (Left : Valid_Uint; Right : Nonzero_Uint) return Valid_Uint
!      renames UI_Mod;
!    function "mod" (Left : Int;  Right : Nonzero_Uint) return Valid_Uint
!      renames UI_Mod;
!    function "mod" (Left : Valid_Uint; Right : Nonzero_Int)  return Valid_Uint
!      renames UI_Mod;
  
!    function "rem" (Left : Valid_Uint; Right : Nonzero_Uint) return Valid_Uint
!      renames UI_Rem;
!    function "rem" (Left : Int;  Right : Nonzero_Uint) return Valid_Uint
!      renames UI_Rem;
!    function "rem" (Left : Valid_Uint; Right : Nonzero_Int)  return Valid_Uint
!      renames UI_Rem;
  
!    function "-"   (Real : Valid_Uint) return Valid_Uint
!      renames UI_Negate;
  
!    function "="   (Left : Valid_Uint; Right : Valid_Uint) return Boolean
!      renames UI_Eq;
!    function "="   (Left : Int;  Right : Valid_Uint) return Boolean
!      renames UI_Eq;
!    function "="   (Left : Valid_Uint; Right : Int)  return Boolean
!      renames UI_Eq;
  
!    function ">="  (Left : Valid_Uint; Right : Valid_Uint) return Boolean
!      renames UI_Ge;
!    function ">="  (Left : Int;  Right : Valid_Uint) return Boolean
!      renames UI_Ge;
!    function ">="  (Left : Valid_Uint; Right : Int)  return Boolean
!      renames UI_Ge;
  
!    function ">"   (Left : Valid_Uint; Right : Valid_Uint) return Boolean
!      renames UI_Gt;
!    function ">"   (Left : Int;  Right : Valid_Uint) return Boolean
!      renames UI_Gt;
!    function ">"   (Left : Valid_Uint; Right : Int)  return Boolean
!      renames UI_Gt;
  
!    function "<="  (Left : Valid_Uint; Right : Valid_Uint) return Boolean
!      renames UI_Le;
!    function "<="  (Left : Int;  Right : Valid_Uint) return Boolean
!      renames UI_Le;
!    function "<="  (Left : Valid_Uint; Right : Int)  return Boolean
!      renames UI_Le;
  
!    function "<"   (Left : Valid_Uint; Right : Valid_Uint) return Boolean
!      renames UI_Lt;
!    function "<"   (Left : Int;  Right : Valid_Uint) return Boolean
!      renames UI_Lt;
!    function "<"   (Left : Valid_Uint; Right : Int)  return Boolean
!      renames UI_Lt;
  
     -----------------------------
     -- Mark/Release Processing --
*************** package Uintp is
*** 399,410 ****
     procedure Release (M : Save_Mark);
     --  Release storage allocated since mark was noted
  
!    procedure Release_And_Save (M : Save_Mark; UI : in out Uint);
     --  Like Release, except that the given Uint value (which is typically among
     --  the data being released) is recopied after the release, so that it is
     --  the most recent item, and UI is updated to point to its copied location.
  
!    procedure Release_And_Save (M : Save_Mark; UI1, UI2 : in out Uint);
     --  Like Release, except that the given Uint values (which are typically
     --  among the data being released) are recopied after the release, so that
     --  they are the most recent items, and UI1 and UI2 are updated if necessary
--- 423,434 ----
     procedure Release (M : Save_Mark);
     --  Release storage allocated since mark was noted
  
!    procedure Release_And_Save (M : Save_Mark; UI : in out Valid_Uint);
     --  Like Release, except that the given Uint value (which is typically among
     --  the data being released) is recopied after the release, so that it is
     --  the most recent item, and UI is updated to point to its copied location.
  
!    procedure Release_And_Save (M : Save_Mark; UI1, UI2 : in out Valid_Uint);
     --  Like Release, except that the given Uint values (which are typically
     --  among the data being released) are recopied after the release, so that
     --  they are the most recent items, and UI1 and UI2 are updated if necessary
*************** private
*** 508,514 ****
     --  UI_Mul to efficiently compute the product in this case.
  
     type Save_Mark is record
!       Save_Uint   : Uint;
        Save_Udigit : Int;
     end record;
  
--- 532,538 ----
     --  UI_Mul to efficiently compute the product in this case.
  
     type Save_Mark is record
!       Save_Uint   : Valid_Uint;
        Save_Udigit : Int;
     end record;
  
*************** private
*** 527,540 ****
     --  Some subprograms defined in this package manipulate the Udigits table
     --  directly, while for others it is more convenient to work with locally
     --  defined arrays of the digits of the Universal Integers. The type
!    --  UI_Vector is defined for this purpose and some internal subprograms
!    --  used for converting from one to the other are defined.
  
     type Uint_Entry is record
!       Length : Pos;
        --  Length of entry in Udigits table in digits (i.e. in words)
  
!       Loc : Int;
        --  Starting location in Udigits table of this Uint value
     end record;
  
--- 551,565 ----
     --  Some subprograms defined in this package manipulate the Udigits table
     --  directly, while for others it is more convenient to work with locally
     --  defined arrays of the digits of the Universal Integers. The type
!    --  UI_Vector is declared in the package body for this purpose and some
!    --  internal subprograms used for converting from one to the other are
!    --  defined.
  
     type Uint_Entry is record
!       Length : aliased Pos;
        --  Length of entry in Udigits table in digits (i.e. in words)
  
!       Loc : aliased Int;
        --  Starting location in Udigits table of this Uint value
     end record;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/uintp.h gcc-12.1.0/gcc/ada/uintp.h
*** gcc-11.3.0/gcc/ada/uintp.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/uintp.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 1992-2022, 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- *
*************** extern Boolean UI_Lt			(Uint, Uint);
*** 99,112 ****
  
     For efficiency, this method is used only for integer values larger than the
     constant Uint_Bias.  If a Uint is less than this constant, then it contains
!    the integer value itself.  The origin of the Uints_Ptr table is adjusted so
!    that a Uint value of Uint_Bias indexes the first element.  */
  
! #define Uints_Ptr (uintp__uints__table - Uint_Table_Start)
! extern struct Uint_Entry *uintp__uints__table;
  
  #define Udigits_Ptr uintp__udigits__table
! extern int *uintp__udigits__table;
  
  #ifdef __cplusplus
  }
--- 99,111 ----
  
     For efficiency, this method is used only for integer values larger than the
     constant Uint_Bias.  If a Uint is less than this constant, then it contains
!    the integer value itself.  */
  
! #define Uints_Ptr uintp__uints__table
! extern struct Uint_Entry (*Uints_Ptr)[];
  
  #define Udigits_Ptr uintp__udigits__table
! extern int (*Udigits_Ptr)[];
  
  #ifdef __cplusplus
  }
diff -Nrcpad gcc-11.3.0/gcc/ada/uname.adb gcc-12.1.0/gcc/ada/uname.adb
*** gcc-11.3.0/gcc/ada/uname.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/uname.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
***************
*** 23,37 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;    use Atree;
! with Casing;   use Casing;
! with Einfo;    use Einfo;
  with Hostparm;
! with Lib;      use Lib;
! with Nlists;   use Nlists;
! with Output;   use Output;
! with Sinfo;    use Sinfo;
! with Sinput;   use Sinput;
  
  package body Uname is
  
--- 23,40 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! with Atree;          use Atree;
! with Casing;         use Casing;
! with Einfo;          use Einfo;
! with Einfo.Utils;    use Einfo.Utils;
  with Hostparm;
! with Lib;            use Lib;
! with Nlists;         use Nlists;
! with Output;         use Output;
! with Sinfo;          use Sinfo;
! with Sinfo.Nodes;    use Sinfo.Nodes;
! with Sinfo.Utils;    use Sinfo.Utils;
! with Sinput;         use Sinput;
  
  package body Uname is
  
*************** package body Uname is
*** 44,58 ****
     -------------------
  
     function Get_Body_Name (N : Unit_Name_Type) return Unit_Name_Type is
     begin
!       Get_Name_String (N);
  
!       pragma Assert (Name_Len > 2
!                        and then Name_Buffer (Name_Len - 1) = '%'
!                        and then Name_Buffer (Name_Len) = 's');
  
!       Name_Buffer (Name_Len) := 'b';
!       return Name_Find;
     end Get_Body_Name;
  
     -----------------------------------
--- 47,64 ----
     -------------------
  
     function Get_Body_Name (N : Unit_Name_Type) return Unit_Name_Type is
+       Buffer : Bounded_String;
     begin
!       Append (Buffer, N);
  
!       pragma Assert
!         (Buffer.Length > 2
!          and then Buffer.Chars (Buffer.Length - 1) = '%'
!          and then Buffer.Chars (Buffer.Length) = 's');
  
!       Buffer.Chars (Buffer.Length) := 'b';
! 
!       return Name_Find (Buffer);
     end Get_Body_Name;
  
     -----------------------------------
*************** package body Uname is
*** 108,126 ****
     --------------------------
  
     function Get_Parent_Body_Name (N : Unit_Name_Type) return Unit_Name_Type is
     begin
!       Get_Name_String (N);
  
!       while Name_Buffer (Name_Len) /= '.' loop
!          pragma Assert (Name_Len > 1); -- not a child or subunit name
!          Name_Len := Name_Len - 1;
        end loop;
  
!       Name_Buffer (Name_Len) := '%';
!       Name_Len := Name_Len + 1;
!       Name_Buffer (Name_Len) := 'b';
!       return Name_Find;
  
     end Get_Parent_Body_Name;
  
     --------------------------
--- 114,132 ----
     --------------------------
  
     function Get_Parent_Body_Name (N : Unit_Name_Type) return Unit_Name_Type is
+       Buffer : Bounded_String;
     begin
!       Append (Buffer, N);
  
!       while Buffer.Chars (Buffer.Length) /= '.' loop
!          pragma Assert (Buffer.Length > 1); -- not a child or subunit name
!          Buffer.Length := Buffer.Length - 1;
        end loop;
  
!       Buffer.Chars (Buffer.Length) := '%';
!       Append (Buffer, 'b');
  
+       return Name_Find (Buffer);
     end Get_Parent_Body_Name;
  
     --------------------------
*************** package body Uname is
*** 128,149 ****
     --------------------------
  
     function Get_Parent_Spec_Name (N : Unit_Name_Type) return Unit_Name_Type is
     begin
!       Get_Name_String (N);
  
!       while Name_Buffer (Name_Len) /= '.' loop
!          if Name_Len = 1 then
              return No_Unit_Name;
           else
!             Name_Len := Name_Len - 1;
           end if;
        end loop;
  
!       Name_Buffer (Name_Len) := '%';
!       Name_Len := Name_Len + 1;
!       Name_Buffer (Name_Len) := 's';
!       return Name_Find;
  
     end Get_Parent_Spec_Name;
  
     -------------------
--- 134,155 ----
     --------------------------
  
     function Get_Parent_Spec_Name (N : Unit_Name_Type) return Unit_Name_Type is
+       Buffer : Bounded_String;
     begin
!       Append (Buffer, N);
  
!       while Buffer.Chars (Buffer.Length) /= '.' loop
!          if Buffer.Length = 1 then
              return No_Unit_Name;
           else
!             Buffer.Length := Buffer.Length - 1;
           end if;
        end loop;
  
!       Buffer.Chars (Buffer.Length) := '%';
!       Append (Buffer, 's');
  
+       return Name_Find (Buffer);
     end Get_Parent_Spec_Name;
  
     -------------------
*************** package body Uname is
*** 151,165 ****
     -------------------
  
     function Get_Spec_Name (N : Unit_Name_Type) return Unit_Name_Type is
     begin
!       Get_Name_String (N);
  
!       pragma Assert (Name_Len > 2
!                        and then Name_Buffer (Name_Len - 1) = '%'
!                        and then Name_Buffer (Name_Len) = 'b');
  
!       Name_Buffer (Name_Len) := 's';
!       return Name_Find;
     end Get_Spec_Name;
  
     -------------------
--- 157,174 ----
     -------------------
  
     function Get_Spec_Name (N : Unit_Name_Type) return Unit_Name_Type is
+       Buffer : Bounded_String;
     begin
!       Append (Buffer, N);
  
!       pragma Assert
!         (Buffer.Length > 2
!          and then Buffer.Chars (Buffer.Length - 1) = '%'
!          and then Buffer.Chars (Buffer.Length) = 'b');
  
!       Buffer.Chars (Buffer.Length) := 's';
! 
!       return Name_Find (Buffer);
     end Get_Spec_Name;
  
     -------------------
*************** package body Uname is
*** 168,180 ****
  
     function Get_Unit_Name (N : Node_Id) return Unit_Name_Type is
  
!       Unit_Name_Buffer : String (1 .. Hostparm.Max_Name_Length);
!       --  Buffer used to build name of unit. Note that we cannot use the
!       --  Name_Buffer in package Name_Table because we use it to read
!       --  component names.
! 
!       Unit_Name_Length : Natural := 0;
!       --  Length of name stored in Unit_Name_Buffer
  
        Node : Node_Id;
        --  Program unit node
--- 177,184 ----
  
     function Get_Unit_Name (N : Node_Id) return Unit_Name_Type is
  
!       Unit_Name_Buffer : Bounded_String;
!       --  Buffer used to build name of unit
  
        Node : Node_Id;
        --  Program unit node
*************** package body Uname is
*** 197,205 ****
  
        procedure Add_Char (C : Character) is
        begin
!          --  Should really check for max length exceeded here???
!          Unit_Name_Length := Unit_Name_Length + 1;
!          Unit_Name_Buffer (Unit_Name_Length) := C;
        end Add_Char;
  
        --------------
--- 201,207 ----
  
        procedure Add_Char (C : Character) is
        begin
!          Append (Unit_Name_Buffer, C);
        end Add_Char;
  
        --------------
*************** package body Uname is
*** 208,218 ****
  
        procedure Add_Name (Name : Name_Id) is
        begin
!          Get_Name_String (Name);
! 
!          for J in 1 .. Name_Len loop
!             Add_Char (Name_Buffer (J));
!          end loop;
        end Add_Name;
  
        -------------------
--- 210,216 ----
  
        procedure Add_Name (Name : Name_Id) is
        begin
!          Append (Unit_Name_Buffer, Name);
        end Add_Name;
  
        -------------------
*************** package body Uname is
*** 220,227 ****
        -------------------
  
        procedure Add_Node_Name (Node : Node_Id) is
-          Kind : constant Node_Kind := Nkind (Node);
- 
        begin
           --  Just ignore an error node (someone else will give a message)
  
--- 218,223 ----
*************** package body Uname is
*** 231,237 ****
           --  Otherwise see what kind of node we have
  
           else
!             case Kind is
                 when N_Defining_Identifier
                    | N_Defining_Operator_Symbol
                    | N_Identifier
--- 227,233 ----
           --  Otherwise see what kind of node we have
  
           else
!             case Nkind (Node) is
                 when N_Defining_Identifier
                    | N_Defining_Operator_Symbol
                    | N_Identifier
*************** package body Uname is
*** 364,371 ****
           Node := Declaration_Node (Entity (Node));
        end if;
  
!       if Nkind (Node) = N_Package_Specification
!         or else Nkind (Node) in N_Subprogram_Specification
        then
           Node := Parent (Node);
        end if;
--- 360,367 ----
           Node := Declaration_Node (Entity (Node));
        end if;
  
!       if Nkind (Node) in N_Package_Specification
!                        | N_Subprogram_Specification
        then
           Node := Parent (Node);
        end if;
*************** package body Uname is
*** 407,417 ****
              raise Program_Error;
        end case;
  
!       Name_Buffer (1 .. Unit_Name_Length) :=
!         Unit_Name_Buffer (1 .. Unit_Name_Length);
!       Name_Len := Unit_Name_Length;
!       return Name_Find;
! 
     end Get_Unit_Name;
  
     --------------------------
--- 403,409 ----
              raise Program_Error;
        end case;
  
!       return Name_Find (Unit_Name_Buffer);
     end Get_Unit_Name;
  
     --------------------------
*************** package body Uname is
*** 488,498 ****
     ------------------
  
     function Is_Body_Name (N : Unit_Name_Type) return Boolean is
     begin
!       Get_Name_String (N);
!       return Name_Len > 2
!         and then Name_Buffer (Name_Len - 1) = '%'
!         and then Name_Buffer (Name_Len) = 'b';
     end Is_Body_Name;
  
     -------------------
--- 480,491 ----
     ------------------
  
     function Is_Body_Name (N : Unit_Name_Type) return Boolean is
+       Buffer : Bounded_String;
     begin
!       Append (Buffer, N);
!       return Buffer.Length > 2
!         and then Buffer.Chars (Buffer.Length - 1) = '%'
!         and then Buffer.Chars (Buffer.Length) = 'b';
     end Is_Body_Name;
  
     -------------------
*************** package body Uname is
*** 500,516 ****
     -------------------
  
     function Is_Child_Name (N : Unit_Name_Type) return Boolean is
!       J : Natural;
  
     begin
!       Get_Name_String (N);
!       J := Name_Len;
  
!       while Name_Buffer (J) /= '.' loop
!          if J = 1 then
              return False; -- not a child or subunit name
           else
!             J := J - 1;
           end if;
        end loop;
  
--- 493,508 ----
     -------------------
  
     function Is_Child_Name (N : Unit_Name_Type) return Boolean is
!       Buffer : Bounded_String;
  
     begin
!       Append (Buffer, N);
  
!       while Buffer.Chars (Buffer.Length) /= '.' loop
!          if Buffer.Length = 1 then
              return False; -- not a child or subunit name
           else
!             Buffer.Length := Buffer.Length - 1;
           end if;
        end loop;
  
*************** package body Uname is
*** 588,598 ****
     ------------------
  
     function Is_Spec_Name (N : Unit_Name_Type) return Boolean is
     begin
!       Get_Name_String (N);
!       return Name_Len > 2
!         and then Name_Buffer (Name_Len - 1) = '%'
!         and then Name_Buffer (Name_Len) = 's';
     end Is_Spec_Name;
  
     -----------------------
--- 580,591 ----
     ------------------
  
     function Is_Spec_Name (N : Unit_Name_Type) return Boolean is
+       Buffer : Bounded_String;
     begin
!       Append (Buffer, N);
!       return Buffer.Length > 2
!         and then Buffer.Chars (Buffer.Length - 1) = '%'
!         and then Buffer.Chars (Buffer.Length) = 's';
     end Is_Spec_Name;
  
     -----------------------
*************** package body Uname is
*** 600,611 ****
     -----------------------
  
     function Name_To_Unit_Name (N : Name_Id) return Unit_Name_Type is
     begin
!       Get_Name_String (N);
!       Name_Buffer (Name_Len + 1) := '%';
!       Name_Buffer (Name_Len + 2) := 's';
!       Name_Len := Name_Len + 2;
!       return Name_Find;
     end Name_To_Unit_Name;
  
     ---------------
--- 593,603 ----
     -----------------------
  
     function Name_To_Unit_Name (N : Name_Id) return Unit_Name_Type is
+       Buffer : Bounded_String;
     begin
!       Append (Buffer, N);
!       Append (Buffer, "%s");
!       return Name_Find (Buffer);
     end Name_To_Unit_Name;
  
     ---------------
diff -Nrcpad gcc-11.3.0/gcc/ada/uname.ads gcc-12.1.0/gcc/ada/uname.ads
*** gcc-11.3.0/gcc/ada/uname.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/uname.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/urealp.adb gcc-12.1.0/gcc/ada/urealp.adb
*** gcc-11.3.0/gcc/ada/urealp.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/urealp.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package body Urealp is
*** 174,189 ****
           return UI_Decimal_Digits_Hi (Val.Num) -
                  UI_Decimal_Digits_Lo (Val.Den);
  
!       --  For based numbers, just subtract the decimal exponent from the
!       --  high estimate of the number of digits in the numerator and add
!       --  one to accommodate possible round off errors for non-decimal
!       --  bases. For example:
  
!       --     1_500_000 / 10**4 = 1.50E-2
  
!       else -- Val.Rbase /= 0
!          return UI_Decimal_Digits_Hi (Val.Num) -
!                 Equivalent_Decimal_Exponent (Val) + 1;
        end if;
     end Decimal_Exponent_Hi;
  
--- 174,203 ----
           return UI_Decimal_Digits_Hi (Val.Num) -
                  UI_Decimal_Digits_Lo (Val.Den);
  
!       --  For based numbers, get the maximum number of digits in the numerator
!       --  minus one and the either exact or floor value of the decimal exponent
!       --  of the denominator, and subtract. For example:
  
!       --      321 / 10**3 = 3.21E-1
!       --      435 / 5**7  = 5.57E-3
  
!       else
!          declare
!             E : Int;
! 
!          begin
!             if Val.Rbase = 10 then
!                E := UI_To_Int (Val.Den);
! 
!             else
!                E := Equivalent_Decimal_Exponent (Val);
!                if E < 0 then
!                   E := E - 1;
!                end if;
!             end if;
! 
!             return UI_Decimal_Digits_Hi (Val.Num) - 1 - E;
!          end;
        end if;
     end Decimal_Exponent_Hi;
  
*************** package body Urealp is
*** 213,228 ****
           return UI_Decimal_Digits_Lo (Val.Num) -
                  UI_Decimal_Digits_Hi (Val.Den) - 1;
  
!       --  For based numbers, just subtract the decimal exponent from the
!       --  low estimate of the number of digits in the numerator and subtract
!       --  one to accommodate possible round off errors for non-decimal
!       --  bases. For example:
  
!       --     1_500_000 / 10**4 = 1.50E-2
  
!       else -- Val.Rbase /= 0
!          return UI_Decimal_Digits_Lo (Val.Num) -
!                 Equivalent_Decimal_Exponent (Val) - 1;
        end if;
     end Decimal_Exponent_Lo;
  
--- 227,256 ----
           return UI_Decimal_Digits_Lo (Val.Num) -
                  UI_Decimal_Digits_Hi (Val.Den) - 1;
  
!       --  For based numbers, get the minimum number of digits in the numerator
!       --  minus one and the either exact or ceil value of the decimal exponent
!       --  of the denominator, and subtract. For example:
  
!       --      321 / 10**3 = 3.21E-1
!       --      435 / 5**7  = 5.57E-3
  
!       else
!          declare
!             E : Int;
! 
!          begin
!             if Val.Rbase = 10 then
!                E := UI_To_Int (Val.Den);
! 
!             else
!                E := Equivalent_Decimal_Exponent (Val);
!                if E > 0 then
!                   E := E + 1;
!                end if;
!             end if;
! 
!             return UI_Decimal_Digits_Lo (Val.Num) - 1 - E;
!          end;
        end if;
     end Decimal_Exponent_Lo;
  
*************** package body Urealp is
*** 270,292 ****
          15 => (Num =>  53_385_559, Den =>   45_392_361),  -- 1.176091259055681
          16 => (Num =>  78_897_839, Den =>   65_523_237)); -- 1.204119982655924
  
!       function Scale (X : Int; R : Ratio) return Int;
        --  Compute the value of X scaled by R
  
        -----------
        -- Scale --
        -----------
  
!       function Scale (X : Int; R : Ratio) return Int is
!          type Wide_Int is range -2**63 .. 2**63 - 1;
! 
        begin
!          return Int (Wide_Int (X) * Wide_Int (R.Num) / Wide_Int (R.Den));
        end Scale;
  
     begin
        pragma Assert (U.Rbase /= 0);
!       return Scale (UI_To_Int (U.Den), Logs (U.Rbase));
     end Equivalent_Decimal_Exponent;
  
     ----------------
--- 298,318 ----
          15 => (Num =>  53_385_559, Den =>   45_392_361),  -- 1.176091259055681
          16 => (Num =>  78_897_839, Den =>   65_523_237)); -- 1.204119982655924
  
!       function Scale (X : Uint; R : Ratio) return Int;
        --  Compute the value of X scaled by R
  
        -----------
        -- Scale --
        -----------
  
!       function Scale (X : Uint; R : Ratio) return Int is
        begin
!          return UI_To_Int (X * R.Num / R.Den);
        end Scale;
  
     begin
        pragma Assert (U.Rbase /= 0);
!       return Scale (U.Den, Logs (U.Rbase));
     end Equivalent_Decimal_Exponent;
  
     ----------------
*************** package body Urealp is
*** 376,382 ****
        Tmp : Uint;
        Num : Uint;
        Den : Uint;
!       M   : constant Uintp.Save_Mark := Uintp.Mark;
  
     begin
        --  Start by setting J to the greatest of the absolute values of the
--- 402,408 ----
        Tmp : Uint;
        Num : Uint;
        Den : Uint;
!       M   : constant Uintp.Save_Mark := Mark;
  
     begin
        --  Start by setting J to the greatest of the absolute values of the
*************** package body Urealp is
*** 1488,1493 ****
--- 1514,1593 ----
        end if;
     end UR_Write;
  
+    ----------------------
+    -- UR_Write_To_JSON --
+    ----------------------
+ 
+    --  We defer to the implementation of UR_Write in all cases, either directly
+    --  for values that are naturally written in a JSON compatible format, or by
+    --  first computing a decimal approximation for other values.
+ 
+    procedure UR_Write_To_JSON (Real : Ureal) is
+       Val  : constant Ureal_Entry      := Ureals.Table (Real);
+       Imrk : constant Uintp.Save_Mark  := Mark;
+       Rmrk : constant Urealp.Save_Mark := Mark;
+ 
+       T : Ureal;
+ 
+    begin
+       --  Zero is zero
+ 
+       if Val.Num = 0 then
+          T := Real;
+ 
+       --  For constants with a denominator of zero, the value is simply the
+       --  numerator value, since we are dividing by base**0, which is 1.
+ 
+       elsif Val.Den = 0 then
+          T := Real;
+ 
+       --  Small powers of 2 get written in decimal fixed-point format
+ 
+       elsif Val.Rbase = 2
+         and then Val.Den <= 3
+         and then Val.Den >= -16
+       then
+          T := Real;
+ 
+       --  Constants in base 10 can be written in normal Ada literal style
+ 
+       elsif Val.Rbase = 10 then
+          T := Real;
+ 
+       --  Rationals where numerator is divisible by denominator can be output
+       --  as literals after we do the division. This includes the common case
+       --  where the denominator is 1.
+ 
+       elsif Val.Rbase = 0 and then Val.Num mod Val.Den = 0 then
+          T := Real;
+ 
+       --  For other constants, compute an approximation in base 10
+ 
+       else
+          declare
+             A : constant Ureal := UR_Abs (Real);
+             --  The absolute value
+ 
+             E : constant Uint  :=
+                   (if A < Ureal_1
+                    then UI_From_Int (3 - Decimal_Exponent_Lo (Real))
+                    else Uint_3);
+             --  The exponent for at least 3 digits after the decimal point
+ 
+             Num : constant Uint :=
+                     UR_To_Uint (UR_Mul (A, UR_Exponentiate (Ureal_10, E)));
+             --  The numerator appropriately rounded
+ 
+          begin
+             T := UR_From_Components (Num, E, 10, Val.Negative);
+          end;
+       end if;
+ 
+       UR_Write (T);
+       Release (Imrk);
+       Release (Rmrk);
+    end UR_Write_To_JSON;
+ 
     -------------
     -- Ureal_0 --
     -------------
diff -Nrcpad gcc-11.3.0/gcc/ada/urealp.ads gcc-12.1.0/gcc/ada/urealp.ads
*** gcc-11.3.0/gcc/ada/urealp.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/urealp.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** package Urealp is
*** 288,293 ****
--- 288,297 ----
     --  In the case where an expression is output, if Brackets is set to True,
     --  the expression is surrounded by square brackets.
  
+    procedure UR_Write_To_JSON (Real : Ureal);
+    --  Writes value of Real to standard output in the JSON data interchange
+    --  format specified by the ECMA-404 standard, for the -gnatRj output.
+ 
     procedure pr (Real : Ureal);
     pragma Export (Ada, pr);
     --  Writes value of Real to standard output with a terminating line return,
diff -Nrcpad gcc-11.3.0/gcc/ada/urealp.h gcc-12.1.0/gcc/ada/urealp.h
*** gcc-11.3.0/gcc/ada/urealp.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/urealp.h	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 1992-2020, 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- *
--- 6,12 ----
   *                                                                          *
   *                              C Header File                               *
   *                                                                          *
!  *            Copyright (C) 1992-2022, 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- *
diff -Nrcpad gcc-11.3.0/gcc/ada/usage.adb gcc-12.1.0/gcc/ada/usage.adb
*** gcc-11.3.0/gcc/ada/usage.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/usage.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                B o d y                                   --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
*************** begin
*** 483,490 ****
     Write_Line ("        .B   turn off warnings for biased representation");
     Write_Line ("        c+   turn on warnings for constant conditional");
     Write_Line ("        C*   turn off warnings for constant conditional");
!    Write_Line ("        .c+  turn on warnings for unrepped components");
!    Write_Line ("        .C*  turn off warnings for unrepped components");
     Write_Line ("        _c*  turn on warnings for unknown " &
                                                   "Compile_Time_Warning");
     Write_Line ("        _C   turn off warnings for unknown " &
--- 483,492 ----
     Write_Line ("        .B   turn off warnings for biased representation");
     Write_Line ("        c+   turn on warnings for constant conditional");
     Write_Line ("        C*   turn off warnings for constant conditional");
!    Write_Line ("        .c+  turn on warnings for components without " &
!                                                      "representation clauses");
!    Write_Line ("        .C*  turn off warnings for components without " &
!                                                      "representation clauses");
     Write_Line ("        _c*  turn on warnings for unknown " &
                                                   "Compile_Time_Warning");
     Write_Line ("        _C   turn off warnings for unknown " &
*************** begin
*** 532,539 ****
                                                    "but not read");
     Write_Line ("        M*   turn off warnings for variable assigned " &
                                                    "but not read");
!    Write_Line ("        .m*+ turn on warnings for suspicious modulus value");
!    Write_Line ("        .M   turn off warnings for suspicious modulus value");
     Write_Line ("        n*   normal warning mode (cancels -gnatws/-gnatwe)");
     Write_Line ("        .n   turn on info messages for atomic " &
                                                    "synchronization");
--- 534,543 ----
                                                    "but not read");
     Write_Line ("        M*   turn off warnings for variable assigned " &
                                                    "but not read");
!    Write_Line ("        .m*+ turn on warnings for suspicious usage " &
!                                                       "of modular type");
!    Write_Line ("        .M   turn off warnings for suspicious usage " &
!                                                       "of modular type");
     Write_Line ("        n*   normal warning mode (cancels -gnatws/-gnatwe)");
     Write_Line ("        .n   turn on info messages for atomic " &
                                                    "synchronization");
*************** begin
*** 553,558 ****
--- 557,564 ----
                                                    "order");
     Write_Line ("        .P*  turn off warnings for suspicious parameter " &
                                                    "order");
+    Write_Line ("        _p   turn on warnings for pedantic checks");
+    Write_Line ("        _P   turn off warnings for pedantic checks");
     Write_Line ("        q*+  turn on warnings for questionable " &
                                                    "missing parenthesis");
     Write_Line ("        Q    turn off warnings for questionable " &
*************** begin
*** 696,717 ****
        --  Line for -gnat95 switch
  
        Write_Switch_Char ("95");
! 
!       if Ada_Version_Default = Ada_95 then
!          Write_Line ("Ada 95 mode (default)");
!       else
!          Write_Line ("Ada 95 mode");
!       end if;
  
        --  Line for -gnat2005 switch
  
        Write_Switch_Char ("2005");
! 
!       if Ada_Version_Default = Ada_2005 then
!          Write_Line ("Ada 2005 mode (default)");
!       else
!          Write_Line ("Ada 2005 mode");
!       end if;
     end if;
  
     --  Line for -gnat2012 switch
--- 702,713 ----
        --  Line for -gnat95 switch
  
        Write_Switch_Char ("95");
!       Write_Line ("Ada 95 mode");
  
        --  Line for -gnat2005 switch
  
        Write_Switch_Char ("2005");
!       Write_Line ("Ada 2005 mode");
     end if;
  
     --  Line for -gnat2012 switch
*************** begin
*** 724,729 ****
--- 720,735 ----
        Write_Line ("Ada 2012 mode");
     end if;
  
+    --  Line for -gnat2022 switch
+ 
+    Write_Switch_Char ("2022");
+ 
+    if Ada_Version_Default = Ada_2022 then
+       Write_Line ("Ada 2022 mode (default)");
+    else
+       Write_Line ("Ada 2022 mode");
+    end if;
+ 
     --  Line for -gnat-p switch
  
     Write_Switch_Char ("-p");
diff -Nrcpad gcc-11.3.0/gcc/ada/usage.ads gcc-12.1.0/gcc/ada/usage.ads
*** gcc-11.3.0/gcc/ada/usage.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/usage.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/validsw.adb gcc-12.1.0/gcc/ada/validsw.adb
*** gcc-11.3.0/gcc/ada/validsw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/validsw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/validsw.ads gcc-12.1.0/gcc/ada/validsw.ads
*** gcc-11.3.0/gcc/ada/validsw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/validsw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 2001-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/vast.adb gcc-12.1.0/gcc/ada/vast.adb
*** gcc-11.3.0/gcc/ada/vast.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/vast.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --             Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/vast.ads gcc-12.1.0/gcc/ada/vast.ads
*** gcc-11.3.0/gcc/ada/vast.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/vast.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --             Copyright (C) 2020-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/version.c gcc-12.1.0/gcc/ada/version.c
*** gcc-11.3.0/gcc/ada/version.c	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/version.c	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,34 ----
+ /****************************************************************************
+  *                                                                          *
+  *                         GNAT COMPILER COMPONENTS                         *
+  *                                                                          *
+  *                              V E R S I O N                               *
+  *                                                                          *
+  *                          C Implementation File                           *
+  *                                                                          *
+  *            Copyright (C) 2021, Free Software Foundation, Inc.            *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+  * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+  * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+  * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+  * or FITNESS FOR A PARTICULAR PURPOSE.                                     *
+  *                                                                          *
+  * 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/>.                                          *
+  *                                                                          *
+  * GNAT was originally developed  by the GNAT team at  New York University. *
+  * Extensive contributions were provided by Ada Core Technologies Inc.      *
+  *                                                                          *
+  ****************************************************************************/
+ 
+ #include "version.h"
+ 
+ char gnat_version_string[] = version_string;
diff -Nrcpad gcc-11.3.0/gcc/ada/vxworks7-cert-rtp-base-link.spec gcc-12.1.0/gcc/ada/vxworks7-cert-rtp-base-link.spec
*** gcc-11.3.0/gcc/ada/vxworks7-cert-rtp-base-link.spec	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/vxworks7-cert-rtp-base-link.spec	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,2 ----
+ *base_link:
+ --defsym=__wrs_rtp_base=0x80000000
diff -Nrcpad gcc-11.3.0/gcc/ada/vxworks7-cert-rtp-base-link__ppc64.spec gcc-12.1.0/gcc/ada/vxworks7-cert-rtp-base-link__ppc64.spec
*** gcc-11.3.0/gcc/ada/vxworks7-cert-rtp-base-link__ppc64.spec	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/vxworks7-cert-rtp-base-link__ppc64.spec	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,2 ----
+ *base_link:
+ --defsym=__wrs_rtp_base=0x40000000
diff -Nrcpad gcc-11.3.0/gcc/ada/vxworks7-cert-rtp-base-link__x86.spec gcc-12.1.0/gcc/ada/vxworks7-cert-rtp-base-link__x86.spec
*** gcc-11.3.0/gcc/ada/vxworks7-cert-rtp-base-link__x86.spec	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/vxworks7-cert-rtp-base-link__x86.spec	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,2 ----
+ *base_link:
+ --defsym=__wrs_rtp_base=0x400000
diff -Nrcpad gcc-11.3.0/gcc/ada/vxworks7-cert-rtp-base-link__x86_64.spec gcc-12.1.0/gcc/ada/vxworks7-cert-rtp-base-link__x86_64.spec
*** gcc-11.3.0/gcc/ada/vxworks7-cert-rtp-base-link__x86_64.spec	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/vxworks7-cert-rtp-base-link__x86_64.spec	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,2 ----
+ *base_link:
+ --defsym=__wrs_rtp_base=0x200000
diff -Nrcpad gcc-11.3.0/gcc/ada/vxworks7-cert-rtp-link.spec gcc-12.1.0/gcc/ada/vxworks7-cert-rtp-link.spec
*** gcc-11.3.0/gcc/ada/vxworks7-cert-rtp-link.spec	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/vxworks7-cert-rtp-link.spec	Fri May  6 07:30:56 2022
***************
*** 3,8 ****
--- 3,9 ----
  
  *link:
  + %{!nostdlib:%{mrtp:%{!shared: \
+      %(base_link) \
       -l:certRtp.o \
       -L%:getenv(VSB_DIR /usr/lib/common/objcert) \
       -T%:getenv(VSB_DIR /usr/ldscripts/rtp.ld) \
diff -Nrcpad gcc-11.3.0/gcc/ada/vxworks7-cert-rtp-link__ppcXX.spec gcc-12.1.0/gcc/ada/vxworks7-cert-rtp-link__ppcXX.spec
*** gcc-11.3.0/gcc/ada/vxworks7-cert-rtp-link__ppcXX.spec	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/ada/vxworks7-cert-rtp-link__ppcXX.spec	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,10 ----
+ *self_spec:
+ + %{!nostdlib:-nodefaultlibs -nostartfiles}
+ 
+ *link:
+ + %{!nostdlib:%{mrtp:%{!shared: \
+      %(base_link) \
+      -lcert -lgnu \
+      -L%:getenv(VSB_DIR /usr/lib/common/objcert) \
+      -T%:getenv(VSB_DIR /usr/ldscripts/rtp.ld) \
+    }}}
diff -Nrcpad gcc-11.3.0/gcc/ada/warnsw.adb gcc-12.1.0/gcc/ada/warnsw.adb
*** gcc-11.3.0/gcc/ada/warnsw.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/warnsw.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
*************** package body Warnsw is
*** 76,81 ****
--- 76,82 ----
        Warn_On_Overlap                      := Setting;
        Warn_On_Overridden_Size              := Setting;
        Warn_On_Parameter_Order              := Setting;
+       Warn_On_Pedantic_Checks              := Setting;
        Warn_On_Questionable_Layout          := Setting;
        Warn_On_Questionable_Missing_Parens  := Setting;
        Warn_On_Record_Holes                 := Setting;
*************** package body Warnsw is
*** 172,177 ****
--- 173,180 ----
          W.Warn_On_Overridden_Size;
        Warn_On_Parameter_Order              :=
          W.Warn_On_Parameter_Order;
+       Warn_On_Pedantic_Checks              :=
+         W.Warn_On_Pedantic_Checks;
        Warn_On_Questionable_Layout          :=
          W.Warn_On_Questionable_Layout;
        Warn_On_Questionable_Missing_Parens  :=
*************** package body Warnsw is
*** 284,289 ****
--- 287,294 ----
          Warn_On_Overridden_Size;
        W.Warn_On_Parameter_Order              :=
          Warn_On_Parameter_Order;
+       W.Warn_On_Pedantic_Checks              :=
+         Warn_On_Pedantic_Checks;
        W.Warn_On_Questionable_Layout          :=
          Warn_On_Questionable_Layout;
        W.Warn_On_Questionable_Missing_Parens  :=
*************** package body Warnsw is
*** 505,510 ****
--- 510,521 ----
           when 'C' =>
              Warn_On_Unknown_Compile_Time_Warning := False;
  
+          when 'p' =>
+             Warn_On_Pedantic_Checks := True;
+ 
+          when 'P' =>
+             Warn_On_Pedantic_Checks := False;
+ 
           when 'r' =>
              Warn_On_Component_Order := True;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/warnsw.ads gcc-12.1.0/gcc/ada/warnsw.ads
*** gcc-11.3.0/gcc/ada/warnsw.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/warnsw.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1999-2022, 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- --
*************** package Warnsw is
*** 50,56 ****
  
     Warn_On_Unknown_Compile_Time_Warning : Boolean := True;
     --  Warn on a pragma Compile_Time_Warning whose condition has a value that
!    --  is not known at compile time.
  
     Warn_On_Overridden_Size : Boolean := False;
     --  Warn when explicit record component clause or array component_size
--- 50,57 ----
  
     Warn_On_Unknown_Compile_Time_Warning : Boolean := True;
     --  Warn on a pragma Compile_Time_Warning whose condition has a value that
!    --  is not known at compile time. On by default, modified by use
!    --  of -gnatw_c/_C and set as part of -gnatwa.
  
     Warn_On_Overridden_Size : Boolean := False;
     --  Warn when explicit record component clause or array component_size
*************** package Warnsw is
*** 58,63 ****
--- 59,71 ----
     --  set with an explicit size clause. Off by default, modified by use of
     --  -gnatw.s/.S (but not -gnatwa).
  
+    Warn_On_Pedantic_Checks : Boolean := False;
+    --  Warn for violation of miscellaneous pedantic rules (such as when the
+    --  subtype of a formal parameter given in a subprogram body's specification
+    --  comes from a different subtype declaration that the subtype of the
+    --  formal in the subprogram declaration). Off by default, and set by
+    --  -gnatw_p (but not -gnatwa).
+ 
     Warn_On_Questionable_Layout : Boolean := False;
     --  Warn when default layout of a record type is questionable for run-time
     --  efficiency reasons and would be improved by reordering the components.
*************** package Warnsw is
*** 128,133 ****
--- 136,142 ----
        Warn_On_Overlap                      : Boolean;
        Warn_On_Overridden_Size              : Boolean;
        Warn_On_Parameter_Order              : Boolean;
+       Warn_On_Pedantic_Checks              : Boolean;
        Warn_On_Questionable_Layout          : Boolean;
        Warn_On_Questionable_Missing_Parens  : Boolean;
        Warn_On_Record_Holes                 : Boolean;
diff -Nrcpad gcc-11.3.0/gcc/ada/widechar.adb gcc-12.1.0/gcc/ada/widechar.adb
*** gcc-11.3.0/gcc/ada/widechar.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/widechar.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/widechar.ads gcc-12.1.0/gcc/ada/widechar.ads
*** gcc-11.3.0/gcc/ada/widechar.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/widechar.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/xeinfo.adb gcc-12.1.0/gcc/ada/xeinfo.adb
*** gcc-11.3.0/gcc/ada/xeinfo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/xeinfo.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,551 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                          GNAT SYSTEM UTILITIES                           --
- --                                                                          --
- --                               X E I N F O                                --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
- -- http://www.gnu.org/licenses for a complete copy of the license.          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Program to construct C header file einfo.h (C version of einfo.ads spec)
- --  for use by Gigi. This header file contains all definitions and access
- --  functions, but does not contain set procedures, since Gigi is not allowed
- --  to modify the GNAT tree.
- 
- --    Input files:
- 
- --       einfo.ads     spec of Einfo package
- --       einfo.adb     body of Einfo package
- 
- --    Output files:
- 
- --       einfo.h       corresponding C header file
- 
- --  Note: It is assumed that the input files have been compiled without errors
- 
- --  An optional argument allows the specification of an output file name to
- --  override the default einfo.h file name for the generated output file.
- 
- --  Most, but not all of the functions in Einfo can be inlined in the C header.
- --  They are the functions identified by pragma Inline in the spec. Functions
- --  that cannot be inlined are simply defined in the header.
- 
- with Ada.Command_Line;              use Ada.Command_Line;
- with Ada.Strings.Unbounded;         use Ada.Strings.Unbounded;
- with Ada.Strings.Unbounded.Text_IO; use Ada.Strings.Unbounded.Text_IO;
- with Ada.Strings.Maps;              use Ada.Strings.Maps;
- with Ada.Strings.Maps.Constants;    use Ada.Strings.Maps.Constants;
- with Ada.Text_IO;                   use Ada.Text_IO;
- 
- with GNAT.Spitbol;                  use GNAT.Spitbol;
- with GNAT.Spitbol.Patterns;         use GNAT.Spitbol.Patterns;
- with GNAT.Spitbol.Table_Boolean;    use GNAT.Spitbol.Table_Boolean;
- 
- with CEinfo;
- 
- procedure XEinfo is
- 
-    package TB renames GNAT.Spitbol.Table_Boolean;
- 
-    Err : exception;
- 
-    A         : VString := Nul;
-    B         : VString := Nul;
-    C         : VString := Nul;
-    Expr      : VString := Nul;
-    Filler    : VString := Nul;
-    Fline     : VString := Nul;
-    Formal    : VString := Nul;
-    Formaltyp : VString := Nul;
-    FN        : VString := Nul;
-    Line      : VString := Nul;
-    N         : VString := Nul;
-    N1        : VString := Nul;
-    N2        : VString := Nul;
-    N3        : VString := Nul;
-    Nam       : VString := Nul;
-    Name      : VString := Nul;
-    NewS      : VString := Nul;
-    Nextlin   : VString := Nul;
-    OldS      : VString := Nul;
-    Rtn       : VString := Nul;
-    Term      : VString := Nul;
- 
-    InB : File_Type;
-    --  Used to read initial header from body
- 
-    InF   : File_Type;
-    --  Used to read full text of both spec and body
- 
-    Ofile : File_Type;
-    --  Used to write output file
- 
-    wsp      : constant Pattern := NSpan (' ' & ASCII.HT);
-    Comment  : constant Pattern := wsp & "--";
-    For_Rep  : constant Pattern := wsp & "for";
-    Get_Func : constant Pattern := wsp * A & "function" & wsp
-                                   & Break (' ') * Name;
-    Inline   : constant Pattern := wsp & "pragma Inline (" & Break (')') * Name;
-    Get_Pack : constant Pattern := wsp & "package ";
-    Get_Enam : constant Pattern := wsp & Break (',') * N & ',';
-    Find_Fun : constant Pattern := wsp & "function";
-    F_Subtyp : constant Pattern := wsp * A & "subtype " & Break (' ') * N;
-    G_Subtyp : constant Pattern := wsp & "subtype" & wsp & Break (' ') * NewS
-                                   & wsp & "is" & wsp & Break (" ;") * OldS
-                                   & wsp & ';' & wsp & Rtab (0);
-    F_Typ    : constant Pattern := wsp * A & "type " & Break (' ') * N &
-                                   " is (";
-    Get_Nam  : constant Pattern := wsp * A & Break (",)") * Nam
-                                   & Len (1) * Term;
-    Get_Styp : constant Pattern := wsp * A & "subtype " & Break (' ') * N;
-    Get_N1   : constant Pattern := wsp & Break (' ') * N1;
-    Get_N2   : constant Pattern := wsp & "-- " & Rest * N2;
-    Get_N3   : constant Pattern := wsp & Break (';') * N3;
-    Get_FN   : constant Pattern := wsp * C & "function" & wsp
-                                   & Break (" (") * FN;
-    Is_Rturn : constant Pattern := BreakX ('r') & "return";
-    Is_Begin : constant Pattern := wsp & "begin";
-    Get_Asrt : constant Pattern := wsp & "pragma Assert";
-    Semicoln : constant Pattern := BreakX (';');
-    Get_Cmnt : constant Pattern := BreakX ('-') * A & "--";
-    Get_Expr : constant Pattern := wsp & "return " & Break (';') * Expr;
-    Chek_End : constant Pattern := wsp & "end" & BreakX (';') & ';';
-    Get_B0   : constant Pattern := BreakX (' ') * A & " or else " & Rest * B;
-    Get_B1   : constant Pattern := BreakX (' ') * A & " in " & Rest * B;
-    Get_B2   : constant Pattern := BreakX (' ') * A & " = " & Rest * B;
-    Get_B3   : constant Pattern := BreakX (' ') * A & " /= " & Rest * B;
-    To_Paren : constant Pattern := wsp * Filler & '(';
-    Get_Fml  : constant Pattern := Break (" :") * Formal & wsp & ':' & wsp
-                                   & BreakX (" );") * Formaltyp;
-    Nxt_Fml  : constant Pattern := wsp & "; ";
-    Get_Rtn  : constant Pattern := wsp & "return" & wsp & BreakX (" ;") * Rtn;
-    Rem_Prn  : constant Pattern := wsp & ')';
- 
-    M : Match_Result;
- 
-    Lineno : Natural := 0;
-    --  Line number in spec
- 
-    V   : Natural;
-    Ctr : Natural;
- 
-    Inlined : TB.Table (200);
-    --  Inlined<N> = True for inlined function, False otherwise
- 
-    Lastinlined : Boolean;
- 
-    procedure Badfunc;
-    pragma No_Return (Badfunc);
-    --  Signal bad function in body
- 
-    function Getlin return VString;
-    --  Get non-comment line (comment lines skipped, also skips FOR rep clauses)
-    --  Fatal error (raises End_Error exception) if end of file encountered
- 
-    procedure Must (B : Boolean);
-    --  Raises Err if the argument (a Match) call, returns False
- 
-    procedure Sethead (Line : in out VString; Term : String);
-    --  Process function header into C
- 
-    procedure Translate_Expr (Expr : in out VString);
-    --  Translate expression from Ada to C
- 
-    -------------
-    -- Badfunc --
-    -------------
- 
-    procedure Badfunc is
-    begin
-       Put_Line
-         (Standard_Error,
-          "Body for function " & FN & " does not meet requirements");
-       raise Err;
-    end Badfunc;
- 
-    -------------
-    -- Getlin --
-    -------------
- 
-    function Getlin return VString is
-       Lin : VString;
- 
-    begin
-       loop
-          Lin := Get_Line (InF);
-          Lineno := Lineno + 1;
- 
-          if Lin /= ""
-            and then not Match (Lin, Comment)
-            and then not Match (Lin, For_Rep)
-          then
-             return Lin;
-          end if;
-       end loop;
-    end Getlin;
- 
-    ----------
-    -- Must --
-    ----------
- 
-    procedure Must (B : Boolean) is
-    begin
-       if not B then
-          raise Err;
-       end if;
-    end Must;
- 
-    -------------
-    -- Sethead --
-    -------------
- 
-    procedure Sethead (Line : in out VString; Term : String) is
-       Args : VString;
- 
-    begin
-       Must (Match (Line, Get_Func, ""));
-       Args := Nul;
- 
-       if Match (Line, To_Paren, "") then
-          Args := Filler & '(';
- 
-          loop
-             Must (Match (Line, Get_Fml, ""));
-             Append (Args, Formaltyp & ' ' & Formal);
-             exit when not Match (Line, Nxt_Fml);
-             Append (Args, ",");
-          end loop;
- 
-          Match (Line, Rem_Prn, "");
-          Append (Args, ')');
-       end if;
- 
-       Must (Match (Line, Get_Rtn));
- 
-       if Present (Inlined, Name) then
-          Put_Line (Ofile, A & "INLINE " & Rtn & ' ' & Name & Args & Term);
-       else
-          Put_Line (Ofile, A &  Rtn & ' ' & Name & Args & Term);
-       end if;
-    end Sethead;
- 
-    --------------------
-    -- Translate_Expr --
-    --------------------
- 
-    procedure Translate_Expr (Expr : in out VString) is
-       M : Match_Result;
- 
-    begin
-       Match (Expr, Get_B1, M);
-       Replace (M, "IN (" & A & ", " & B & ')');
-       Match (Expr, Get_B2, M);
-       Replace (M, A & " == " & B);
-       Match (Expr, Get_B3, M);
-       Replace (M, A & " != " & B);
-    end Translate_Expr;
- 
- --  Start of processing for XEinfo
- 
- begin
-    --  First run CEinfo to check for errors. Note that CEinfo is also a
-    --  stand-alone program that can be run separately.
- 
-    CEinfo;
- 
-    Anchored_Mode := True;
- 
-    if Argument_Count > 0 then
-       Create (Ofile, Out_File, Argument (1));
-    else
-       Create (Ofile, Out_File, "einfo.h");
-    end if;
- 
-    Open (InB, In_File, "einfo.adb");
-    Open (InF, In_File, "einfo.ads");
- 
-    Lineno := 0;
-    loop
-       Line := Get_Line (InF);
-       Lineno := Lineno + 1;
-       exit when Line = "";
- 
-       Match (Line,
-              "--                                 S p e c       ",
-              "--                              C Header File    ");
-       Match (Line, "--", "/*");
-       Match (Line, Rtab (2) * A & "--", M);
-       Replace (M, A & "*/");
-       Put_Line (Ofile, Line);
-    end loop;
- 
-    Put_Line (Ofile, "");
- 
-    Put_Line (Ofile, "#ifdef __cplusplus");
-    Put_Line (Ofile, "extern ""C"" {");
-    Put_Line (Ofile, "#endif");
- 
-    --  Find and record pragma Inlines
- 
-    loop
-       Line := Get_Line (InF);
-       exit when Match (Line, "   --  END XEINFO INLINES");
- 
-       if Match (Line, Inline) then
-          Set (Inlined, Name, True);
-       end if;
-    end loop;
- 
-    --  Skip to package line
- 
-    Reset (InF, In_File);
-    Lineno := 0;
- 
-    loop
-       Line := Getlin;
-       exit when Match (Line, Get_Pack);
-    end loop;
- 
-    V := 0;
-    Line := Getlin;
-    Must (Match (Line, wsp & "type Entity_Kind"));
- 
-    --  Process entity kind code definitions
- 
-    loop
-       Line := Getlin;
-       exit when not Match (Line, Get_Enam);
-       Put_Line (Ofile, "   #define " & Rpad (N, 32) & " " & V);
-       V := V + 1;
-    end loop;
- 
-    Must (Match (Line, wsp & Rest * N));
-    Put_Line (Ofile, "   #define " & Rpad (N, 32) & ' ' & V);
-    Line := Getlin;
- 
-    Must (Match (Line, wsp & ");"));
-    Put_Line (Ofile, "");
- 
-    --  Loop through subtype and type declarations
- 
-    loop
-       Line := Getlin;
-       exit when Match (Line, Find_Fun);
- 
-       --  Case of a subtype declaration
- 
-       if Match (Line, F_Subtyp) then
- 
-          --  Case of a subtype declaration that is an abbreviation of the
-          --  form subtype x is y, and if so generate the appropriate typedef
- 
-          if Match (Line, G_Subtyp) then
-             Put_Line (Ofile, A & "typedef " & OldS & ' ' & NewS & ';');
- 
-          --  Otherwise the subtype must be declaring a subrange of Entity_Id
- 
-          else
-             Must (Match (Line, Get_Styp));
-             Line := Getlin;
-             Must (Match (Line, Get_N1));
- 
-             loop
-                Line := Get_Line (InF);
-                Lineno := Lineno + 1;
-                exit when not Match (Line, Get_N2);
-             end loop;
- 
-             Must (Match (Line, Get_N3));
-             Put_Line (Ofile, A & "SUBTYPE (" & N & ", Entity_Kind, ");
-             Put_Line (Ofile, A & "   " & N1 & ", " & N3 & ')');
-             Put_Line (Ofile, "");
-          end if;
- 
-       --  Case of type declaration
- 
-       elsif Match (Line, F_Typ) then
- 
-          --  Process type declaration (must be enumeration type)
- 
-          Ctr := 0;
-          Put_Line (Ofile, A & "typedef char " & N & ';');
- 
-          loop
-             Line := Getlin;
-             Must (Match (Line, Get_Nam));
-             Put_Line (Ofile, A & "#define " & Rpad (Nam, 25) & Ctr);
-             Ctr := Ctr + 1;
-             exit when Term /= ",";
-          end loop;
- 
-          Put_Line (Ofile, "");
- 
-       --  Neither subtype nor type declaration
- 
-       else
-          raise Err;
-       end if;
-    end loop;
- 
-    --  Process function declarations
- 
-    --  Note: Lastinlined used to control blank lines
- 
-    Put_Line (Ofile, "");
-    Lastinlined := True;
- 
-    --  Loop through function declarations
- 
-    while Match (Line, Get_FN) loop
- 
-       --  Non-inlined function
- 
-       if not Present (Inlined, FN) then
-          Put_Line (Ofile, "");
-          Put_Line
-            (Ofile,
-             "   #define " & FN & " einfo__" & Translate (FN, Lower_Case_Map));
- 
-       --  Inlined function
- 
-       else
-          if not Lastinlined then
-             Put_Line (Ofile, "");
-          end if;
-       end if;
- 
-       --  Merge here to output spec
- 
-       Sethead (Line, ";");
-       Lastinlined := Get (Inlined, FN);
-       Line := Getlin;
-    end loop;
- 
-    Put_Line (Ofile, "");
- 
-    --  Read body to find inlined functions
- 
-    Close (InB);
-    Close (InF);
-    Open (InF, In_File, "einfo.adb");
-    Lineno := 0;
- 
-    --  Loop through input lines to find bodies of inlined functions
- 
-    while not End_Of_File (InF) loop
-       Fline := Get_Line (InF);
- 
-       if Match (Fline, Get_FN)
-         and then Get (Inlined, FN)
-       then
-          --  Here we have an inlined function
- 
-          if not Match (Fline, Is_Rturn) then
-             Line := Fline;
-             Badfunc;
-          end if;
- 
-          Line := Getlin;
- 
-          if not Match (Line, Is_Begin) then
-             Badfunc;
-          end if;
- 
-          --  Skip past pragma Asserts
- 
-          loop
-             Line := Getlin;
-             exit when not Match (Line, Get_Asrt);
- 
-             --  Pragma assert found, get its continuation lines
- 
-             loop
-                exit when Match (Line, Semicoln);
-                Line := Getlin;
-             end loop;
-          end loop;
- 
-          --  Process return statement
- 
-          Match (Line, Get_Cmnt, M);
-          Replace (M, A);
- 
-          --  Get continuations of return statement
- 
-          while not Match (Line, Semicoln) loop
-             Nextlin := Getlin;
-             Match (Nextlin, wsp, " ");
-             Append (Line, Nextlin);
-          end loop;
- 
-          if not Match (Line, Get_Expr) then
-             Badfunc;
-          end if;
- 
-          Line := Getlin;
- 
-          if not Match (Line, Chek_End) then
-             Badfunc;
-          end if;
- 
-          --  Process expression
- 
-          if Match (Expr, Get_B0, M) then
-             declare
-                Saved_A : VString := A;
-                Saved_B : VString := B;
-             begin
-                Translate_Expr (Saved_A);
-                Translate_Expr (Saved_B);
-                Replace (M, Saved_A & " || " & Saved_B);
-             end;
-          else
-             Translate_Expr (Expr);
-          end if;
- 
-          Put_Line (Ofile, "");
-          Sethead (Fline, "");
-          Put_Line (Ofile, C & "   { return " & Expr & "; }");
-       end if;
-    end loop;
- 
-    Put_Line (Ofile, "");
- 
-    Put_Line (Ofile, "#ifdef __cplusplus");
-    Put_Line (Ofile, "}");
-    Put_Line (Ofile, "#endif");
- 
-    Put_Line
-      (Ofile,
-       "/* End of einfo.h (C version of Einfo package specification) */");
- 
-    Close (InF);
-    Close (Ofile);
- 
- exception
-    when Err =>
-       Put_Line (Standard_Error, Lineno & ".  " & Line);
-       Put_Line (Standard_Error, "**** fatal error ****");
-       Set_Exit_Status (1);
- 
-    when End_Error =>
-       Put_Line (Standard_Error, "unexpected end of file");
-       Put_Line (Standard_Error, "**** fatal error ****");
- 
- end XEinfo;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/xnmake.adb gcc-12.1.0/gcc/ada/xnmake.adb
*** gcc-11.3.0/gcc/ada/xnmake.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/xnmake.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,467 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                          GNAT SYSTEM UTILITIES                           --
- --                                                                          --
- --                               X N M A K E                                --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
- -- http://www.gnu.org/licenses for a complete copy of the license.          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Program to construct the spec and body of the Nmake package
- 
- --    Input files:
- 
- --       sinfo.ads     Spec of Sinfo package
- --       nmake.adt     Template for Nmake package
- 
- --    Output files:
- 
- --       nmake.ads     Spec of Nmake package
- --       nmake.adb     Body of Nmake package
- 
- --  Note: this program assumes that sinfo.ads has passed the error checks that
- --  are carried out by the csinfo utility, so it does not duplicate these
- --  checks and assumes that sinfo.ads has the correct form.
- 
- --   In the absence of any switches, both the ads and adb files are output.
- --   The switch -s or /s indicates that only the ads file is to be output.
- --   The switch -b or /b indicates that only the adb file is to be output.
- 
- --   If a file name argument is given, then the output is written to this file
- --   rather than to nmake.ads or nmake.adb. A file name can only be given if
- --   exactly one of the -s or -b options is present.
- 
- with Ada.Command_Line;              use Ada.Command_Line;
- with Ada.Strings.Unbounded;         use Ada.Strings.Unbounded;
- with Ada.Strings.Unbounded.Text_IO; use Ada.Strings.Unbounded.Text_IO;
- with Ada.Strings.Maps;              use Ada.Strings.Maps;
- with Ada.Strings.Maps.Constants;    use Ada.Strings.Maps.Constants;
- with Ada.Streams.Stream_IO;         use Ada.Streams.Stream_IO;
- with Ada.Text_IO;                   use Ada.Text_IO;
- 
- with GNAT.Spitbol;                  use GNAT.Spitbol;
- with GNAT.Spitbol.Patterns;         use GNAT.Spitbol.Patterns;
- 
- with XUtil;
- 
- procedure XNmake is
- 
-    Err : exception;
-    --  Raised to terminate execution
- 
-    A        : VString := Nul;
-    Arg      : VString := Nul;
-    Arg_List : VString := Nul;
-    Comment  : VString := Nul;
-    Default  : VString := Nul;
-    Field    : VString := Nul;
-    Line     : VString := Nul;
-    Node     : VString := Nul;
-    Op_Name  : VString := Nul;
-    Prevl    : VString := Nul;
-    Synonym  : VString := Nul;
-    X        : VString := Nul;
- 
-    NWidth : Natural;
- 
-    FileS : VString := V ("nmake.ads");
-    FileB : VString := V ("nmake.adb");
-    --  Set to null if corresponding file not to be generated
- 
-    Given_File : VString := Nul;
-    --  File name given by command line argument
- 
-    subtype Sfile is Ada.Streams.Stream_IO.File_Type;
- 
-    InS,  InT  : Ada.Text_IO.File_Type;
-    OutS, OutB : Sfile;
- 
-    wsp : constant Pattern := Span (' ' & ASCII.HT);
- 
-    Body_Only : constant Pattern := BreakX (' ') * X
-                                    & Span (' ') & "--  body only";
-    Spec_Only : constant Pattern := BreakX (' ') * X
-                                    & Span (' ') & "--  spec only";
- 
-    Node_Hdr  : constant Pattern := wsp & "--  N_" & Rest * Node;
-    Punc      : constant Pattern := BreakX (" .,");
- 
-    Binop     : constant Pattern := wsp
-                                    & "--  plus fields for binary operator";
-    Unop      : constant Pattern := wsp
-                                    & "--  plus fields for unary operator";
-    Syn       : constant Pattern := wsp & "--  " & Break (' ') * Synonym
-                                    & " (" & Break (')') * Field
-                                    & Rest * Comment;
- 
-    Templ     : constant Pattern := BreakX ('T') * A & "T e m p l a t e";
-    Spec      : constant Pattern := BreakX ('S') * A & "S p e c";
- 
-    Sem_Field : constant Pattern := BreakX ('-') & "-Sem";
-    Lib_Field : constant Pattern := BreakX ('-') & "-Lib";
- 
-    Get_Field : constant Pattern := BreakX (Decimal_Digit_Set) * Field;
- 
-    Get_Dflt  : constant Pattern := BreakX ('(') & "(set to "
-                                    & Break (" ") * Default & " if";
- 
-    Next_Arg  : constant Pattern := Break (',') * Arg & ',';
- 
-    Op_Node   : constant Pattern := "Op_" & Rest * Op_Name;
- 
-    Shft_Rot  : constant Pattern := "Shift_" or "Rotate_";
- 
-    No_Ent    : constant Pattern := "Or_Else" or "And_Then"
-                                      or "In" or "Not_In";
- 
-    M : Match_Result;
- 
-    V_String_Id : constant VString := V ("String_Id");
-    V_Node_Id   : constant VString := V ("Node_Id");
-    V_Name_Id   : constant VString := V ("Name_Id");
-    V_List_Id   : constant VString := V ("List_Id");
-    V_Elist_Id  : constant VString := V ("Elist_Id");
-    V_Boolean   : constant VString := V ("Boolean");
- 
-    procedure Put_Line (F : Sfile; S : String)  renames XUtil.Put_Line;
-    procedure Put_Line (F : Sfile; S : VString) renames XUtil.Put_Line;
-    --  Local version of Put_Line ensures Unix style line endings
- 
-    procedure WriteS  (S : String);
-    procedure WriteB  (S : String);
-    procedure WriteBS (S : String);
-    procedure WriteS  (S : VString);
-    procedure WriteB  (S : VString);
-    procedure WriteBS (S : VString);
-    --  Write given line to spec or body file or both if active
- 
-    procedure WriteB (S : String) is
-    begin
-       if FileB /= Nul then
-          Put_Line (OutB, S);
-       end if;
-    end WriteB;
- 
-    procedure WriteB (S : VString) is
-    begin
-       if FileB /= Nul then
-          Put_Line (OutB, S);
-       end if;
-    end WriteB;
- 
-    procedure WriteBS (S : String) is
-    begin
-       if FileB /= Nul then
-          Put_Line (OutB, S);
-       end if;
- 
-       if FileS /= Nul then
-          Put_Line (OutS, S);
-       end if;
-    end WriteBS;
- 
-    procedure WriteBS (S : VString) is
-    begin
-       if FileB /= Nul then
-          Put_Line (OutB, S);
-       end if;
- 
-       if FileS /= Nul then
-          Put_Line (OutS, S);
-       end if;
-    end WriteBS;
- 
-    procedure WriteS (S : String) is
-    begin
-       if FileS /= Nul then
-          Put_Line (OutS, S);
-       end if;
-    end WriteS;
- 
-    procedure WriteS (S : VString) is
-    begin
-       if FileS /= Nul then
-          Put_Line (OutS, S);
-       end if;
-    end WriteS;
- 
- --  Start of processing for XNmake
- 
- begin
-    NWidth := 28;
-    Anchored_Mode := True;
- 
-    for ArgN in 1 .. Argument_Count loop
-       declare
-          Arg : constant String := Argument (ArgN);
- 
-       begin
-          if Arg (1) = '-' then
-             if Arg'Length = 2
-               and then (Arg (2) = 'b' or else Arg (2) = 'B')
-             then
-                FileS := Nul;
- 
-             elsif Arg'Length = 2
-               and then (Arg (2) = 's' or else Arg (2) = 'S')
-             then
-                FileB := Nul;
- 
-             else
-                raise Err;
-             end if;
- 
-          else
-             if Given_File /= Nul then
-                raise Err;
-             else
-                Given_File := V (Arg);
-             end if;
-          end if;
-       end;
-    end loop;
- 
-    if FileS = Nul and then FileB = Nul then
-       raise Err;
- 
-    elsif Given_File /= Nul then
-       if FileB = Nul then
-          FileS := Given_File;
- 
-       elsif FileS = Nul then
-          FileB := Given_File;
- 
-       else
-          raise Err;
-       end if;
-    end if;
- 
-    Open (InS, In_File, "sinfo.ads");
-    Open (InT, In_File, "nmake.adt");
- 
-    if FileS /= Nul then
-       Create (OutS, Out_File, S (FileS));
-    end if;
- 
-    if FileB /= Nul then
-       Create (OutB, Out_File, S (FileB));
-    end if;
- 
-    Anchored_Mode := True;
- 
-    --  Copy initial part of template to spec and body
- 
-    loop
-       Line := Get_Line (InT);
- 
-       --  Skip lines describing the template
- 
-       if Match (Line, "--  This file is a template") then
-          loop
-             Line := Get_Line (InT);
-             exit when Line = "";
-          end loop;
-       end if;
- 
-       --  Loop keeps going until "package" keyword written
- 
-       exit when Match (Line, "package");
- 
-       --  Deal with WITH lines, writing to body or spec as appropriate
- 
-       if Match (Line, Body_Only, M) then
-          Replace (M, X);
-          WriteB (Line);
- 
-       elsif Match (Line, Spec_Only, M) then
-          Replace (M, X);
-          WriteS (Line);
- 
-       --  Change header from Template to Spec and write to spec file
- 
-       else
-          if Match (Line, Templ, M) then
-             Replace (M, A &  "    S p e c    ");
-          end if;
- 
-          WriteS (Line);
- 
-          --  Write header line to body file
- 
-          if Match (Line, Spec, M) then
-             Replace (M, A &  "B o d y");
-          end if;
- 
-          WriteB (Line);
-       end if;
-    end loop;
- 
-    --  Package line reached
- 
-    WriteS ("package Nmake is");
-    WriteB ("package body Nmake is");
-    WriteB ("");
- 
-    --  Copy rest of lines up to template insert point to spec only
- 
-    loop
-       Line := Get_Line (InT);
-       exit when Match (Line, "!!TEMPLATE INSERTION POINT");
-       WriteS (Line);
-    end loop;
- 
-    --  Here we are doing the actual insertions, loop through node types
- 
-    loop
-       Line := Get_Line (InS);
- 
-       if Match (Line, Node_Hdr)
-         and then not Match (Node, Punc)
-         and then Node /= "Unused"
-       then
-          exit when Node = "Empty";
-          Prevl := "   function Make_" & Node & " (Sloc : Source_Ptr";
-          Arg_List := Nul;
- 
-          --  Loop through fields of one node
- 
-          loop
-             Line := Get_Line (InS);
-             exit when Line = "";
- 
-             if Match (Line, Binop) then
-                WriteBS (Prevl & ';');
-                Append (Arg_List, "Left_Opnd,Right_Opnd,");
-                WriteBS (
-                  "      " & Rpad ("Left_Opnd",  NWidth) & " : Node_Id;");
-                Prevl :=
-                  "      " & Rpad ("Right_Opnd", NWidth) & " : Node_Id";
- 
-             elsif Match (Line, Unop) then
-                WriteBS (Prevl & ';');
-                Append (Arg_List, "Right_Opnd,");
-                Prevl := "      " & Rpad ("Right_Opnd", NWidth) & " : Node_Id";
- 
-             elsif Match (Line, Syn) then
-                if         Synonym /= "Prev_Ids"
-                  and then Synonym /= "More_Ids"
-                  and then Synonym /= "Comes_From_Source"
-                  and then Synonym /= "Paren_Count"
-                  and then not Match (Field, Sem_Field)
-                  and then not Match (Field, Lib_Field)
-                then
-                   Match (Field, Get_Field);
- 
-                   if    Field = "Str"   then
-                      Field := V_String_Id;
-                   elsif Field = "Node"  then
-                      Field := V_Node_Id;
-                   elsif Field = "Name"  then
-                      Field := V_Name_Id;
-                   elsif Field = "List"  then
-                      Field := V_List_Id;
-                   elsif Field = "Elist" then
-                      Field := V_Elist_Id;
-                   elsif Field = "Flag"  then
-                      Field := V_Boolean;
-                   end if;
- 
-                   if Field = "Boolean" then
-                      Default := V ("False");
-                   else
-                      Default := Nul;
-                   end if;
- 
-                   Match (Comment, Get_Dflt);
- 
-                   WriteBS (Prevl & ';');
-                   Append (Arg_List, Synonym & ',');
-                   Rpad (Synonym, NWidth);
- 
-                   if Default = "" then
-                      Prevl := "      " & Synonym & " : " & Field;
-                   else
-                      Prevl :=
-                        "      " & Synonym & " : " & Field & " := " & Default;
-                   end if;
-                end if;
-             end if;
-          end loop;
- 
-          WriteBS (Prevl & ')');
-          WriteS ("      return Node_Id;");
-          WriteS ("   pragma Inline (Make_" & Node & ");");
-          WriteB ("      return Node_Id");
-          WriteB ("   is");
-          WriteB ("      N : constant Node_Id :=");
- 
-          if Match (Node, "Defining_Identifier") or else
-             Match (Node, "Defining_Character")  or else
-             Match (Node, "Defining_Operator")
-          then
-             WriteB ("            New_Entity (N_" & Node & ", Sloc);");
-          else
-             WriteB ("            New_Node (N_" & Node & ", Sloc);");
-          end if;
- 
-          WriteB ("   begin");
- 
-          while Match (Arg_List, Next_Arg, "") loop
-             if Length (Arg) < NWidth then
-                WriteB ("      Set_" & Arg & " (N, " & Arg & ");");
-             else
-                WriteB ("      Set_" & Arg);
-                WriteB ("        (N, " & Arg & ");");
-             end if;
-          end loop;
- 
-          if Match (Node, Op_Node) then
-             if Node = "Op_Plus" then
-                WriteB ("      Set_Chars (N, Name_Op_Add);");
- 
-             elsif Node = "Op_Minus" then
-                WriteB ("      Set_Chars (N, Name_Op_Subtract);");
- 
-             elsif Match (Op_Name, Shft_Rot) then
-                WriteB ("      Set_Chars (N, Name_" & Op_Name & ");");
- 
-             else
-                WriteB ("      Set_Chars (N, Name_" & Node & ");");
-             end if;
- 
-             if not Match (Op_Name, No_Ent) then
-                WriteB ("      Set_Entity (N, Standard_" & Node & ");");
-             end if;
-          end if;
- 
-          WriteB ("      return N;");
-          WriteB ("   end Make_" & Node & ';');
-          WriteBS ("");
-       end if;
-    end loop;
- 
-    WriteBS ("end Nmake;");
- 
- exception
- 
-    when Err =>
-       Put_Line (Standard_Error, "usage: xnmake [-b] [-s] [filename]");
-       Set_Exit_Status (1);
- 
- end XNmake;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/xoscons.adb gcc-12.1.0/gcc/ada/xoscons.adb
*** gcc-11.3.0/gcc/ada/xoscons.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/xoscons.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2008-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 2008-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/xr_tabls.adb gcc-12.1.0/gcc/ada/xr_tabls.adb
*** gcc-11.3.0/gcc/ada/xr_tabls.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/xr_tabls.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
*************** package body Xr_Tabls is
*** 106,115 ****
     --  when sorting the table.
  
     Longest_File_Name_In_Table : Natural := 0;
!    Unvisited_Files            : Unvisited_Files_Access := null;
!    Directories                : Project_File_Ptr;
!    Default_Match              : Boolean := False;
!    --  The above need commenting ???
  
     function Parse_Gnatls_Src return String;
     --  Return the standard source directories (taking into account the
--- 106,121 ----
     --  when sorting the table.
  
     Longest_File_Name_In_Table : Natural := 0;
!    --  The length of the longest file name stored
! 
!    Unvisited_Files : Unvisited_Files_Access := null;
!    --  Linked list of unvisited files
! 
!    Directories : Project_File_Ptr;
!    --  Store the list of directories to visit
! 
!    Default_Match : Boolean := False;
!    --  Default value for match in declarations
  
     function Parse_Gnatls_Src return String;
     --  Return the standard source directories (taking into account the
*************** package body Xr_Tabls is
*** 482,490 ****
     -------------------
  
     function ALI_File_Name (Ada_File_Name : String) return String is
! 
!       --  ??? Should ideally be based on the naming scheme defined in
!       --  project files.
  
        Index : constant Natural :=
                  Ada.Strings.Fixed.Index
--- 488,495 ----
     -------------------
  
     function ALI_File_Name (Ada_File_Name : String) return String is
!       --  Should ideally be based on the naming scheme defined in
!       --  project files but this is too late for an obsolescent feature.
  
        Index : constant Natural :=
                  Ada.Strings.Fixed.Index
*************** package body Xr_Tabls is
*** 762,768 ****
        Strip    : Natural    := 0) return String
     is
        pragma Annotate (CodePeer, Skip_Analysis);
!       --  ??? To disable false positives currently generated
  
        Tmp : GNAT.OS_Lib.String_Access;
  
--- 767,773 ----
        Strip    : Natural    := 0) return String
     is
        pragma Annotate (CodePeer, Skip_Analysis);
!       --  Disable CodePeer false positives
  
        Tmp : GNAT.OS_Lib.String_Access;
  
*************** package body Xr_Tabls is
*** 1385,1392 ****
     begin
        File_Ref.Visited := False;
  
!       --  ??? Do not add a source file to the list. This is true at
!       --  least for gnatxref, and probably for gnatfind as well
  
        if F'Length > 4
          and then F (F'Last - 3 .. F'Last) = "." & Osint.ALI_Suffix.all
--- 1390,1397 ----
     begin
        File_Ref.Visited := False;
  
!       --  Do not add a source file to the list. This is true for gnatxref
!       --  gnatfind, so good enough.
  
        if F'Length > 4
          and then F (F'Last - 3 .. F'Last) = "." & Osint.ALI_Suffix.all
diff -Nrcpad gcc-11.3.0/gcc/ada/xr_tabls.ads gcc-12.1.0/gcc/ada/xr_tabls.ads
*** gcc-11.3.0/gcc/ada/xr_tabls.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/xr_tabls.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
***************
*** 23,29 ****
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  We need comment here saying what this package is???
  
  with GNAT.OS_Lib;
  
--- 23,29 ----
  --                                                                          --
  ------------------------------------------------------------------------------
  
! --  Cross reference utilities used by gnatxref and gnatfind
  
  with GNAT.OS_Lib;
  
diff -Nrcpad gcc-11.3.0/gcc/ada/xref_lib.adb gcc-12.1.0/gcc/ada/xref_lib.adb
*** gcc-11.3.0/gcc/ada/xref_lib.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/xref_lib.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
*************** package body Xref_Lib is
*** 786,792 ****
        --  line and column in the dependent unit number Eun. For this we need
        --  to parse the ali file again because the parent entity is not in
        --  the declaration table if it did not match the search pattern.
!       --  If the symbol is not found, we return "???".
  
        procedure Skip_To_Matching_Closing_Bracket;
        --  When Ptr points to an opening square bracket, moves it to the
--- 786,792 ----
        --  line and column in the dependent unit number Eun. For this we need
        --  to parse the ali file again because the parent entity is not in
        --  the declaration table if it did not match the search pattern.
!       --  If the symbol is not found, we return (1 .. 3 => '?').
  
        procedure Skip_To_Matching_Closing_Bracket;
        --  When Ptr points to an opening square bracket, moves it to the
diff -Nrcpad gcc-11.3.0/gcc/ada/xref_lib.ads gcc-12.1.0/gcc/ada/xref_lib.ads
*** gcc-11.3.0/gcc/ada/xref_lib.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/xref_lib.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1998-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/xsinfo.adb gcc-12.1.0/gcc/ada/xsinfo.adb
*** gcc-11.3.0/gcc/ada/xsinfo.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/xsinfo.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,262 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                          GNAT SYSTEM UTILITIES                           --
- --                                                                          --
- --                               X S I N F O                                --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
- -- http://www.gnu.org/licenses for a complete copy of the license.          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Program to construct C header file sinfo.h (C version of sinfo.ads spec,
- --  for use by Gigi, contains all definitions and access functions, but does
- --  not contain set procedures, since Gigi never modifies the GNAT tree)
- 
- --    Input files:
- 
- --       sinfo.ads     Spec of Sinfo package
- 
- --    Output files:
- 
- --       sinfo.h       Corresponding c header file
- 
- --  An optional argument allows the specification of an output file name to
- --  override the default sinfo.h file name for the generated output file.
- 
- with Ada.Command_Line;              use Ada.Command_Line;
- with Ada.Strings.Unbounded;         use Ada.Strings.Unbounded;
- with Ada.Strings.Unbounded.Text_IO; use Ada.Strings.Unbounded.Text_IO;
- with Ada.Text_IO;                   use Ada.Text_IO;
- 
- with GNAT.Spitbol;                  use GNAT.Spitbol;
- with GNAT.Spitbol.Patterns;         use GNAT.Spitbol.Patterns;
- 
- with CSinfo;
- 
- procedure XSinfo is
- 
-    Done : exception;
-    Err  : exception;
- 
-    A         : VString := Nul;
-    Arg       : VString := Nul;
-    Comment   : VString := Nul;
-    Line      : VString := Nul;
-    N         : VString := Nul;
-    N1, N2    : VString := Nul;
-    Nam       : VString := Nul;
-    Rtn       : VString := Nul;
-    Term      : VString := Nul;
- 
-    InS   : File_Type;
-    Ofile : File_Type;
- 
-    wsp     : constant Pattern := Span (' ' & ASCII.HT);
-    Wsp_For : constant Pattern := wsp & "for";
-    Is_Cmnt : constant Pattern := wsp & "--";
-    Typ_Nod : constant Pattern := wsp * A & "type Node_Kind is";
-    Get_Nam : constant Pattern := wsp * A & "N_" &  Break (",)") * Nam
-                                  & Len (1) * Term;
-    Sub_Typ : constant Pattern := wsp * A & "subtype " &  Break (' ') * N;
-    No_Cont : constant Pattern := wsp & Break (' ') * N1
-                                  & " .. " & Break (';') * N2;
-    Cont_N1 : constant Pattern := wsp & Break (' ') * N1 & " .." & Rpos (0);
-    Cont_N2 : constant Pattern := Span (' ') & Break (';') * N2;
-    Is_Func : constant Pattern := wsp * A & "function " & Rest * Nam;
-    Get_Arg : constant Pattern := wsp & "(N : " & Break (')') * Arg
-                                  & ") return " & Break (';') * Rtn
-                                  & ';' & wsp & "--" & wsp & Rest * Comment;
- 
-    NKV : Natural;
- 
-    M : Match_Result;
- 
-    procedure Getline;
-    --  Get non-comment, non-blank line. Also skips "for " rep clauses
- 
-    -------------
-    -- Getline --
-    -------------
- 
-    procedure Getline is
-    begin
-       loop
-          Line := Get_Line (InS);
- 
-          if Line /= ""
-            and then not Match (Line, Wsp_For)
-            and then not Match (Line, Is_Cmnt)
-          then
-             return;
- 
-          elsif Match (Line, "   --  End functions (note") then
-             raise Done;
-          end if;
-       end loop;
-    end Getline;
- 
- --  Start of processing for XSinfo
- 
- begin
-    --  First run CSinfo to check for errors. Note that CSinfo is also a
-    --  stand-alone program that can be run separately.
- 
-    CSinfo;
- 
-    Set_Exit_Status (1);
-    Anchored_Mode := True;
- 
-    if Argument_Count > 0 then
-       Create (Ofile, Out_File, Argument (1));
-    else
-       Create (Ofile, Out_File, "sinfo.h");
-    end if;
- 
-    Open (InS, In_File, "sinfo.ads");
- 
-    --  Write header to output file
- 
-    loop
-       Line := Get_Line (InS);
-       exit when Line = "";
- 
-       Match
-         (Line,
-          "--                                 S p e c       ",
-          "--                              C Header File    ");
- 
-       Match (Line, "--", "/*");
-       Match (Line, Rtab (2) * A & "--", M);
-       Replace (M, A & "*/");
-       Put_Line (Ofile, Line);
-    end loop;
- 
-    --  Skip to package line
- 
-    loop
-       Getline;
-       exit when Match (Line, "package");
-    end loop;
- 
-    --  Skip to first node kind line
- 
-    loop
-       Getline;
-       exit when Match (Line, Typ_Nod);
-       Put_Line (Ofile, Line);
-    end loop;
- 
-    Put_Line (Ofile, "");
- 
-    Put_Line (Ofile, "#ifdef __cplusplus");
-    Put_Line (Ofile, "extern ""C"" {");
-    Put_Line (Ofile, "#endif");
- 
-    NKV := 0;
- 
-    --  Loop through node kind codes
- 
-    loop
-       Getline;
- 
-       if Match (Line, Get_Nam) then
-          Put_Line (Ofile, A & "#define N_" & Nam & ' ' & NKV);
-          NKV := NKV + 1;
-          exit when not Match (Term, ",");
- 
-       else
-          Put_Line (Ofile, Line);
-       end if;
-    end loop;
- 
-    Put_Line (Ofile, "");
-    Put_Line (Ofile, A & "#define Number_Node_Kinds " & NKV);
- 
-    --  Loop through subtype declarations
- 
-    loop
-       Getline;
- 
-       if not Match (Line, Sub_Typ) then
-          exit when Match (Line, "   function");
-          Put_Line (Ofile, Line);
- 
-       else
-          Put_Line (Ofile, A & "SUBTYPE (" & N & ", Node_Kind, ");
-          Getline;
- 
-          --  Normal case
- 
-          if Match (Line, No_Cont) then
-             Put_Line (Ofile, A & "   " & N1 & ", " & N2 & ')');
- 
-          --  Continuation case
- 
-          else
-             if not Match (Line, Cont_N1) then
-                raise Err;
-             end if;
- 
-             Getline;
- 
-             if not Match (Line, Cont_N2) then
-                raise Err;
-             end if;
- 
-             Put_Line (Ofile,  A & "   " & N1 & ',');
-             Put_Line (Ofile,  A & "   " & N2 & ')');
-          end if;
-       end if;
-    end loop;
- 
-    --  Loop through functions. Note that this loop is terminated by
-    --  the call to Getfile encountering the end of functions sentinel
- 
-    loop
-       if Match (Line, Is_Func) then
-          Getline;
-             if not Match (Line, Get_Arg) then
-                raise Err;
-             end if;
-          Put_Line
-            (Ofile,
-             A &  "INLINE " & Rpad (Rtn, 9)
-             & ' ' & Rpad (Nam, 30) & " (" & Arg & " N)");
- 
-          Put_Line (Ofile,  A & "   { return " & Comment & " (N); }");
- 
-       else
-          Put_Line (Ofile, Line);
-       end if;
- 
-       Getline;
-    end loop;
- 
-    --  Can't get here since above loop only left via raise
- 
- exception
-    when Done =>
-       Close (InS);
-       Put_Line (Ofile, "");
-       Put_Line (Ofile, "#ifdef __cplusplus");
-       Put_Line (Ofile, "}");
-       Put_Line (Ofile, "#endif");
-       Close (Ofile);
-       Set_Exit_Status (0);
- 
- end XSinfo;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/xsnamest.adb gcc-12.1.0/gcc/ada/xsnamest.adb
*** gcc-11.3.0/gcc/ada/xsnamest.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/xsnamest.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/xtreeprs.adb gcc-12.1.0/gcc/ada/xtreeprs.adb
*** gcc-11.3.0/gcc/ada/xtreeprs.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/xtreeprs.adb	Thu Jan  1 00:00:00 1970
***************
*** 1,357 ****
- ------------------------------------------------------------------------------
- --                                                                          --
- --                          GNAT SYSTEM UTILITIES                           --
- --                                                                          --
- --                             X T R E E P R S                              --
- --                                                                          --
- --                                 B o d y                                  --
- --                                                                          --
- --          Copyright (C) 1992-2020, Free Software Foundation, Inc.         --
- --                                                                          --
- -- GNAT is free software;  you can  redistribute it  and/or modify it under --
- -- terms of the  GNU General Public License as published  by the Free Soft- --
- -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
- -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
- -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
- -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
- -- for  more details.  You should have  received  a copy of the GNU General --
- -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
- -- http://www.gnu.org/licenses for a complete copy of the license.          --
- --                                                                          --
- -- GNAT was originally developed  by the GNAT team at  New York University. --
- -- Extensive contributions were provided by Ada Core Technologies Inc.      --
- --                                                                          --
- ------------------------------------------------------------------------------
- 
- --  Program to construct the spec of the Treeprs package
- 
- --    Input files:
- 
- --       sinfo.ads     Spec of Sinfo package
- --       treeprs.adt   Template for Treeprs package
- 
- --    Output files:
- 
- --       treeprs.ads   Spec of Treeprs package
- 
- --  Note: this program assumes that sinfo.ads has passed the error checks which
- --  are carried out by the CSinfo utility so it does not duplicate these checks
- 
- --  An optional argument allows the specification of an output file name to
- --  override the default treeprs.ads file name for the generated output file.
- 
- with Ada.Command_Line;              use Ada.Command_Line;
- with Ada.Strings.Unbounded;         use Ada.Strings.Unbounded;
- with Ada.Strings.Unbounded.Text_IO; use Ada.Strings.Unbounded.Text_IO;
- with Ada.Text_IO;                   use Ada.Text_IO;
- with Ada.Streams.Stream_IO;         use Ada.Streams.Stream_IO;
- 
- with GNAT.Spitbol;                  use GNAT.Spitbol;
- with GNAT.Spitbol.Patterns;         use GNAT.Spitbol.Patterns;
- with GNAT.Spitbol.Table_Boolean;    use GNAT.Spitbol.Table_Boolean;
- with GNAT.Spitbol.Table_VString;    use GNAT.Spitbol.Table_VString;
- 
- procedure XTreeprs is
- 
-    package TB renames GNAT.Spitbol.Table_Boolean;
-    package TV renames GNAT.Spitbol.Table_VString;
- 
-    Err : exception;
-    --  Raised on fatal error
- 
-    A         : VString := Nul;
-    Ffield    : VString := Nul;
-    Field     : VString := Nul;
-    Fieldno   : VString := Nul;
-    Flagno    : VString := Nul;
-    Line      : VString := Nul;
-    Name      : VString := Nul;
-    Node      : VString := Nul;
-    Outstring : VString := Nul;
-    Prefix    : VString := Nul;
-    S         : VString := Nul;
-    S1        : VString := Nul;
-    Syn       : VString := Nul;
-    Synonym   : VString := Nul;
-    Term      : VString := Nul;
- 
-    subtype Sfile is Ada.Streams.Stream_IO.File_Type;
- 
-    OutS : Sfile;
-    --  Output file
- 
-    InS : Ada.Text_IO.File_Type;
-    --  Read sinfo.ads
- 
-    InT : Ada.Text_IO.File_Type;
-    --  Read treeprs.adt
- 
-    Special : TB.Table (20);
-    --  Table of special fields. These fields are not included in the table
-    --  constructed by Xtreeprs, since they are specially handled in treeprs.
-    --  This means these field definitions are completely ignored.
- 
-    Names : array (1 .. 500) of VString;
-    --  Table of names of synonyms
- 
-    Positions : array (1 .. 500) of Natural;
-    --  Table of starting positions in Pchars string for synonyms
- 
-    Strings : TV.Table (300);
-    --  Contribution of each synonym to Pchars string, indexed by name
- 
-    Count  : Natural := 0;
-    --  Number of synonyms processed so far
- 
-    Curpos : Natural := 1;
-    --  Number of characters generated in Pchars string so far
- 
-    Lineno : Natural := 0;
-    --  Line number in sinfo.ads
- 
-    Field_Base : constant := Character'Pos ('#');
-    --  Fields 1-5 are represented by the characters #$%&' (i.e. by five
-    --  contiguous characters starting at # (16#23#)).
- 
-    Flag_Base : constant := Character'Pos ('(');
-    --  Flags 1-18 are represented by the characters ()*+,-./0123456789
-    --  (i.e. by 18 contiguous characters starting at (16#28#)).
- 
-    Fieldch : Character;
-    --  Field character, as per above tables
- 
-    Sp : aliased Natural;
-    --  Space left on line for Pchars output
- 
-    wsp      : constant Pattern := Span (' ' & ASCII.HT);
-    Is_Temp  : constant Pattern := BreakX ('T') * A & "T e m p l a t e";
-    Get_Node : constant Pattern := wsp & "--  N_" & Rest * Node;
-    Tst_Punc : constant Pattern := Break (" ,.");
-    Get_Syn  : constant Pattern := Span (' ') & "--  " & Break (' ') * Synonym
-                                   & " (" & Break (')') * Field;
-    Brk_Min  : constant Pattern := Break ('-') * Ffield;
-    Is_Flag  : constant Pattern := "Flag" & Rest * Flagno;
-    Is_Field : constant Pattern := Rtab (1) & Len (1) * Fieldno;
-    Is_Syn   : constant Pattern := wsp & "N_" & Break (",)") * Syn
-                                   & Len (1) * Term;
-    Brk_Node : constant Pattern := Break (' ') * Node & ' ';
-    Chop_SP  : constant Pattern := Len (Sp'Unrestricted_Access) * S1;
- 
-    M : Match_Result;
- 
-    procedure Put_Line (F : Sfile; S : String);
-    procedure Put_Line (F : Sfile; S : VString);
-    --  Local version of Put_Line ensures Unix style line endings
- 
-    procedure Put_Line (F : Sfile; S : String) is
-    begin
-       String'Write (Stream (F), S);
-       Character'Write (Stream (F), ASCII.LF);
-    end Put_Line;
- 
-    procedure Put_Line (F : Sfile; S : VString) is
-    begin
-       Put_Line (F, To_String (S));
-    end Put_Line;
- 
- --  Start of processing for XTreeprs
- 
- begin
-    Anchored_Mode := True;
- 
-    if Argument_Count > 0 then
-       Create (OutS, Out_File, Argument (1));
-    else
-       Create (OutS, Out_File, "treeprs.ads");
-    end if;
- 
-    Open (InS, In_File, "sinfo.ads");
-    Open (InT, In_File, "treeprs.adt");
- 
-    --  Initialize special fields table
- 
-    Set (Special, "Analyzed",                True);
-    Set (Special, "Cannot_Be_Constant",      True);
-    Set (Special, "Chars",                   True);
-    Set (Special, "Comes_From_Source",       True);
-    Set (Special, "Error_Posted",            True);
-    Set (Special, "Etype",                   True);
-    Set (Special, "Has_No_Side_Effects",     True);
-    Set (Special, "Is_Controlling_Actual",   True);
-    Set (Special, "Is_Overloaded",           True);
-    Set (Special, "Is_Static_Expression",    True);
-    Set (Special, "Left_Opnd",               True);
-    Set (Special, "Must_Check_Expr",         True);
-    Set (Special, "No_Overflow_Expr",        True);
-    Set (Special, "Paren_Count",             True);
-    Set (Special, "Raises_Constraint_Error", True);
-    Set (Special, "Right_Opnd",              True);
- 
-    --  Read template header and generate new header
- 
-    loop
-       Line := Get_Line (InT);
- 
-       --  Skip lines describing the template
- 
-       if Match (Line, "--  This file is a template") then
-          loop
-             Line := Get_Line (InT);
-             exit when Line = "";
-          end loop;
-       end if;
- 
-       exit when Match (Line, "package");
- 
-       if Match (Line, Is_Temp, M) then
-          Replace (M, A & "    S p e c    ");
-       end if;
- 
-       Put_Line (OutS, Line);
-    end loop;
- 
-    Put_Line (OutS, Line);
- 
-    --  Copy rest of comments up to template insert point to spec
- 
-    loop
-       Line := Get_Line (InT);
-       exit when Match (Line, "!!TEMPLATE INSERTION POINT");
-       Put_Line (OutS, Line);
-    end loop;
- 
-    --  Here we are doing the actual insertions
- 
-    Put_Line (OutS, "   Pchars : constant String :=");
- 
-    --  Loop through comments describing nodes, picking up fields
- 
-    loop
-       Line := Get_Line (InS);
-       Lineno := Lineno + 1;
-       exit when Match (Line, "   type Node_Kind");
- 
-       if Match (Line, Get_Node)
-         and then not Match (Node, Tst_Punc)
-       then
-          Outstring := Node & ' ';
- 
-          loop
-             Line := Get_Line (InS);
-             exit when Line = "";
- 
-             if Match (Line, Get_Syn)
-               and then not Match (Synonym, "plus")
-               and then not Present (Special, Synonym)
-             then
-                --  Convert this field into the character used to
-                --  represent the field according to the table:
- 
-                --    Field1       '#'
-                --    Field2       '$'
-                --    Field3       '%'
-                --    Field4       '&'
-                --    Field5       "'"
-                --    Flag4        '+'
-                --    Flag5        ','
-                --    Flag6        '-'
-                --    Flag7        '.'
-                --    Flag8        '/'
-                --    Flag9        '0'
-                --    Flag10       '1'
-                --    Flag11       '2'
-                --    Flag12       '3'
-                --    Flag13       '4'
-                --    Flag14       '5'
-                --    Flag15       '6'
-                --    Flag16       '7'
-                --    Flag17       '8'
-                --    Flag18       '9'
- 
-                if Match (Field, Brk_Min) then
-                   Field := Ffield;
-                end if;
- 
-                if Match (Field, Is_Flag) then
-                   Fieldch := Char (Flag_Base - 1 + N (Flagno));
- 
-                elsif Match (Field, Is_Field) then
-                   Fieldch := Char (Field_Base - 1 + N (Fieldno));
- 
-                else
-                   Put_Line
-                     (Standard_Error,
-                      "*** Line " &
-                       Lineno &
-                       " has unrecognized field name " &
-                       Field);
-                   raise Err;
-                end if;
- 
-                Append (Outstring, Fieldch & Synonym);
-             end if;
-          end loop;
- 
-          Set (Strings, Node, Outstring);
-       end if;
-    end loop;
- 
-    --  Loop through actual definitions of node kind enumeration literals
- 
-    loop
-       loop
-          Line := Get_Line (InS);
-          Lineno := Lineno + 1;
-          exit when Match (Line, Is_Syn);
-       end loop;
- 
-       S := Get (Strings, Syn);
-       Match (S, Brk_Node, "");
-       Count := Count + 1;
-       Names (Count) := Syn;
-       Positions (Count) := Curpos;
-       Curpos := Curpos + Length (S);
-       Put_Line (OutS, "      --  " & Node);
-       Prefix := V ("      ");
-       exit when Term = ")";
- 
-       --  Loop to output the string literal for Pchars
- 
-       loop
-          Sp := 79 - 4 - Length (Prefix);
-          exit when Size (S) <= Sp;
-          Match (S, Chop_SP, "");
-          Put_Line (OutS, Prefix & '"' & S1 & """ &");
-          Prefix := V ("         ");
-       end loop;
- 
-       Put_Line (OutS, Prefix & '"' & S & """ &");
-    end loop;
- 
-    Put_Line (OutS, "      """";");
-    Put_Line (OutS, "");
-    Put_Line
-      (OutS, "   type Pchar_Pos_Array is array (Node_Kind) of Positive;");
-    Put_Line
-      (OutS,
-       "   Pchar_Pos : constant Pchar_Pos_Array := Pchar_Pos_Array'(");
- 
-    --  Output lines for Pchar_Pos_Array values
- 
-    for M in 1 .. Count - 1 loop
-       Name := Rpad ("N_" & Names (M), 40);
-       Put_Line (OutS, "      " & Name & " => " & Positions (M) & ',');
-    end loop;
- 
-    Name := Rpad ("N_" & Names (Count), 40);
-    Put_Line (OutS, "      " & Name & " => " & Positions (Count) & ");");
- 
-    Put_Line (OutS, "");
-    Put_Line (OutS, "end Treeprs;");
- 
- exception
-    when Err =>
-       Put_Line (Standard_Error, "*** fatal error");
-       Set_Exit_Status (1);
- 
- end XTreeprs;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/ada/xutil.adb gcc-12.1.0/gcc/ada/xutil.adb
*** gcc-11.3.0/gcc/ada/xutil.adb	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/xutil.adb	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 B o d y                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/ada/xutil.ads gcc-12.1.0/gcc/ada/xutil.ads
*** gcc-11.3.0/gcc/ada/xutil.ads	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/ada/xutil.ads	Fri May  6 07:30:56 2022
***************
*** 6,12 ****
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2020, 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- --
--- 6,12 ----
  --                                                                          --
  --                                 S p e c                                  --
  --                                                                          --
! --          Copyright (C) 1992-2022, 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- --
diff -Nrcpad gcc-11.3.0/gcc/addresses.h gcc-12.1.0/gcc/addresses.h
*** gcc-11.3.0/gcc/addresses.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/addresses.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Inline functions to test validity of reg classes for addressing modes.
!    Copyright (C) 2006-2021 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Inline functions to test validity of reg classes for addressing modes.
!    Copyright (C) 2006-2022 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
diff -Nrcpad gcc-11.3.0/gcc/adjust-alignment.c gcc-12.1.0/gcc/adjust-alignment.c
*** gcc-11.3.0/gcc/adjust-alignment.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/adjust-alignment.c	Thu Jan  1 00:00:00 1970
***************
*** 1,85 ****
- /* Adjust alignment for local variable.
-    Copyright (C) 2020-2021 Free Software Foundation, Inc.
-    Contributed by Kito Cheng <kito.cheng@sifive.com>
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "backend.h"
- #include "target.h"
- #include "tree.h"
- #include "tree-pass.h"
- #include "memmodel.h"
- #include "tm_p.h"
- 
- namespace {
- 
- const pass_data pass_data_adjust_alignment =
- {
-   GIMPLE_PASS, /* type */
-   "adjust_alignment", /* name */
-   OPTGROUP_NONE, /* optinfo_flags */
-   TV_NONE, /* tv_id */
-   0, /* properties_required */
-   0, /* properties_provided */
-   0, /* properties_destroyed */
-   0, /* todo_flags_start */
-   0, /* todo_flags_finish */
- };
- 
- class pass_adjust_alignment : public gimple_opt_pass
- {
- public:
-   pass_adjust_alignment (gcc::context *ctxt)
-     : gimple_opt_pass (pass_data_adjust_alignment, ctxt)
-   {}
- 
-   virtual unsigned int execute (function *);
- }; // class pass_adjust_alignment
- 
- } // anon namespace
- 
- /* Entry point to adjust_alignment pass.  */
- unsigned int
- pass_adjust_alignment::execute (function *fun)
- {
-   size_t i;
-   tree var;
- 
-   FOR_EACH_LOCAL_DECL (fun, i, var)
-     {
-       /* Don't adjust aligment for static local var and hard register var.  */
-       if (is_global_var (var) || DECL_HARD_REGISTER (var))
- 	continue;
- 
-       unsigned align = LOCAL_DECL_ALIGNMENT (var);
- 
-       /* Make sure alignment only increase.  */
-       gcc_assert (align >= DECL_ALIGN (var));
- 
-       SET_DECL_ALIGN (var, align);
-     }
-   return 0;
- }
- 
- gimple_opt_pass *
- make_pass_adjust_alignment (gcc::context *ctxt)
- {
-   return new pass_adjust_alignment (ctxt);
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/adjust-alignment.cc gcc-12.1.0/gcc/adjust-alignment.cc
*** gcc-11.3.0/gcc/adjust-alignment.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/adjust-alignment.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,85 ----
+ /* Adjust alignment for local variable.
+    Copyright (C) 2020-2022 Free Software Foundation, Inc.
+    Contributed by Kito Cheng <kito.cheng@sifive.com>
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "backend.h"
+ #include "target.h"
+ #include "tree.h"
+ #include "tree-pass.h"
+ #include "memmodel.h"
+ #include "tm_p.h"
+ 
+ namespace {
+ 
+ const pass_data pass_data_adjust_alignment =
+ {
+   GIMPLE_PASS, /* type */
+   "adjust_alignment", /* name */
+   OPTGROUP_NONE, /* optinfo_flags */
+   TV_NONE, /* tv_id */
+   0, /* properties_required */
+   0, /* properties_provided */
+   0, /* properties_destroyed */
+   0, /* todo_flags_start */
+   0, /* todo_flags_finish */
+ };
+ 
+ class pass_adjust_alignment : public gimple_opt_pass
+ {
+ public:
+   pass_adjust_alignment (gcc::context *ctxt)
+     : gimple_opt_pass (pass_data_adjust_alignment, ctxt)
+   {}
+ 
+   virtual unsigned int execute (function *);
+ }; // class pass_adjust_alignment
+ 
+ } // anon namespace
+ 
+ /* Entry point to adjust_alignment pass.  */
+ unsigned int
+ pass_adjust_alignment::execute (function *fun)
+ {
+   size_t i;
+   tree var;
+ 
+   FOR_EACH_LOCAL_DECL (fun, i, var)
+     {
+       /* Don't adjust aligment for static local var and hard register var.  */
+       if (is_global_var (var) || DECL_HARD_REGISTER (var))
+ 	continue;
+ 
+       unsigned align = LOCAL_DECL_ALIGNMENT (var);
+ 
+       /* Make sure alignment only increase.  */
+       gcc_assert (align >= DECL_ALIGN (var));
+ 
+       SET_DECL_ALIGN (var, align);
+     }
+   return 0;
+ }
+ 
+ gimple_opt_pass *
+ make_pass_adjust_alignment (gcc::context *ctxt)
+ {
+   return new pass_adjust_alignment (ctxt);
+ }
diff -Nrcpad gcc-11.3.0/gcc/alias.c gcc-12.1.0/gcc/alias.c
*** gcc-11.3.0/gcc/alias.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/alias.c	Thu Jan  1 00:00:00 1970
***************
*** 1,3596 ****
- /* Alias analysis for GNU C
-    Copyright (C) 1997-2021 Free Software Foundation, Inc.
-    Contributed by John Carr (jfc@mit.edu).
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "backend.h"
- #include "target.h"
- #include "rtl.h"
- #include "tree.h"
- #include "gimple.h"
- #include "df.h"
- #include "memmodel.h"
- #include "tm_p.h"
- #include "gimple-ssa.h"
- #include "emit-rtl.h"
- #include "alias.h"
- #include "fold-const.h"
- #include "varasm.h"
- #include "cselib.h"
- #include "langhooks.h"
- #include "cfganal.h"
- #include "rtl-iter.h"
- #include "cgraph.h"
- #include "ipa-utils.h"
- 
- /* The aliasing API provided here solves related but different problems:
- 
-    Say there exists (in c)
- 
-    struct X {
-      struct Y y1;
-      struct Z z2;
-    } x1, *px1,  *px2;
- 
-    struct Y y2, *py;
-    struct Z z2, *pz;
- 
- 
-    py = &x1.y1;
-    px2 = &x1;
- 
-    Consider the four questions:
- 
-    Can a store to x1 interfere with px2->y1?
-    Can a store to x1 interfere with px2->z2?
-    Can a store to x1 change the value pointed to by with py?
-    Can a store to x1 change the value pointed to by with pz?
- 
-    The answer to these questions can be yes, yes, yes, and maybe.
- 
-    The first two questions can be answered with a simple examination
-    of the type system.  If structure X contains a field of type Y then
-    a store through a pointer to an X can overwrite any field that is
-    contained (recursively) in an X (unless we know that px1 != px2).
- 
-    The last two questions can be solved in the same way as the first
-    two questions but this is too conservative.  The observation is
-    that in some cases we can know which (if any) fields are addressed
-    and if those addresses are used in bad ways.  This analysis may be
-    language specific.  In C, arbitrary operations may be applied to
-    pointers.  However, there is some indication that this may be too
-    conservative for some C++ types.
- 
-    The pass ipa-type-escape does this analysis for the types whose
-    instances do not escape across the compilation boundary.
- 
-    Historically in GCC, these two problems were combined and a single
-    data structure that was used to represent the solution to these
-    problems.  We now have two similar but different data structures,
-    The data structure to solve the last two questions is similar to
-    the first, but does not contain the fields whose address are never
-    taken.  For types that do escape the compilation unit, the data
-    structures will have identical information.
- */
- 
- /* The alias sets assigned to MEMs assist the back-end in determining
-    which MEMs can alias which other MEMs.  In general, two MEMs in
-    different alias sets cannot alias each other, with one important
-    exception.  Consider something like:
- 
-      struct S { int i; double d; };
- 
-    a store to an `S' can alias something of either type `int' or type
-    `double'.  (However, a store to an `int' cannot alias a `double'
-    and vice versa.)  We indicate this via a tree structure that looks
-    like:
- 	   struct S
- 	    /   \
- 	   /     \
- 	 |/_     _\|
- 	 int    double
- 
-    (The arrows are directed and point downwards.)
-     In this situation we say the alias set for `struct S' is the
-    `superset' and that those for `int' and `double' are `subsets'.
- 
-    To see whether two alias sets can point to the same memory, we must
-    see if either alias set is a subset of the other. We need not trace
-    past immediate descendants, however, since we propagate all
-    grandchildren up one level.
- 
-    Alias set zero is implicitly a superset of all other alias sets.
-    However, this is no actual entry for alias set zero.  It is an
-    error to attempt to explicitly construct a subset of zero.  */
- 
- struct alias_set_hash : int_hash <int, INT_MIN, INT_MIN + 1> {};
- 
- struct GTY(()) alias_set_entry {
-   /* The alias set number, as stored in MEM_ALIAS_SET.  */
-   alias_set_type alias_set;
- 
-   /* Nonzero if would have a child of zero: this effectively makes this
-      alias set the same as alias set zero.  */
-   bool has_zero_child;
-   /* Nonzero if alias set corresponds to pointer type itself (i.e. not to
-      aggregate contaiing pointer.
-      This is used for a special case where we need an universal pointer type
-      compatible with all other pointer types.  */
-   bool is_pointer;
-   /* Nonzero if is_pointer or if one of childs have has_pointer set.  */
-   bool has_pointer;
- 
-   /* The children of the alias set.  These are not just the immediate
-      children, but, in fact, all descendants.  So, if we have:
- 
-        struct T { struct S s; float f; }
- 
-      continuing our example above, the children here will be all of
-      `int', `double', `float', and `struct S'.  */
-   hash_map<alias_set_hash, int> *children;
- };
- 
- static int rtx_equal_for_memref_p (const_rtx, const_rtx);
- static void record_set (rtx, const_rtx, void *);
- static int base_alias_check (rtx, rtx, rtx, rtx, machine_mode,
- 			     machine_mode);
- static rtx find_base_value (rtx);
- static int mems_in_disjoint_alias_sets_p (const_rtx, const_rtx);
- static alias_set_entry *get_alias_set_entry (alias_set_type);
- static tree decl_for_component_ref (tree);
- static int write_dependence_p (const_rtx,
- 			       const_rtx, machine_mode, rtx,
- 			       bool, bool, bool);
- static int compare_base_symbol_refs (const_rtx, const_rtx,
- 				     HOST_WIDE_INT * = NULL);
- 
- static void memory_modified_1 (rtx, const_rtx, void *);
- 
- /* Query statistics for the different low-level disambiguators.
-    A high-level query may trigger multiple of them.  */
- 
- static struct {
-   unsigned long long num_alias_zero;
-   unsigned long long num_same_alias_set;
-   unsigned long long num_same_objects;
-   unsigned long long num_volatile;
-   unsigned long long num_dag;
-   unsigned long long num_universal;
-   unsigned long long num_disambiguated;
- } alias_stats;
- 
- 
- /* Set up all info needed to perform alias analysis on memory references.  */
- 
- /* Returns the size in bytes of the mode of X.  */
- #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
- 
- /* Cap the number of passes we make over the insns propagating alias
-    information through set chains.
-    ??? 10 is a completely arbitrary choice.  This should be based on the
-    maximum loop depth in the CFG, but we do not have this information
-    available (even if current_loops _is_ available).  */
- #define MAX_ALIAS_LOOP_PASSES 10
- 
- /* reg_base_value[N] gives an address to which register N is related.
-    If all sets after the first add or subtract to the current value
-    or otherwise modify it so it does not point to a different top level
-    object, reg_base_value[N] is equal to the address part of the source
-    of the first set.
- 
-    A base address can be an ADDRESS, SYMBOL_REF, or LABEL_REF.  ADDRESS
-    expressions represent three types of base:
- 
-      1. incoming arguments.  There is just one ADDRESS to represent all
- 	arguments, since we do not know at this level whether accesses
- 	based on different arguments can alias.  The ADDRESS has id 0.
- 
-      2. stack_pointer_rtx, frame_pointer_rtx, hard_frame_pointer_rtx
- 	(if distinct from frame_pointer_rtx) and arg_pointer_rtx.
- 	Each of these rtxes has a separate ADDRESS associated with it,
- 	each with a negative id.
- 
- 	GCC is (and is required to be) precise in which register it
- 	chooses to access a particular region of stack.  We can therefore
- 	assume that accesses based on one of these rtxes do not alias
- 	accesses based on another of these rtxes.
- 
-      3. bases that are derived from malloc()ed memory (REG_NOALIAS).
- 	Each such piece of memory has a separate ADDRESS associated
- 	with it, each with an id greater than 0.
- 
-    Accesses based on one ADDRESS do not alias accesses based on other
-    ADDRESSes.  Accesses based on ADDRESSes in groups (2) and (3) do not
-    alias globals either; the ADDRESSes have Pmode to indicate this.
-    The ADDRESS in group (1) _may_ alias globals; it has VOIDmode to
-    indicate this.  */
- 
- static GTY(()) vec<rtx, va_gc> *reg_base_value;
- static rtx *new_reg_base_value;
- 
- /* The single VOIDmode ADDRESS that represents all argument bases.
-    It has id 0.  */
- static GTY(()) rtx arg_base_value;
- 
- /* Used to allocate unique ids to each REG_NOALIAS ADDRESS.  */
- static int unique_id;
- 
- /* We preserve the copy of old array around to avoid amount of garbage
-    produced.  About 8% of garbage produced were attributed to this
-    array.  */
- static GTY((deletable)) vec<rtx, va_gc> *old_reg_base_value;
- 
- /* Values of XINT (address, 0) of Pmode ADDRESS rtxes for special
-    registers.  */
- #define UNIQUE_BASE_VALUE_SP	-1
- #define UNIQUE_BASE_VALUE_ARGP	-2
- #define UNIQUE_BASE_VALUE_FP	-3
- #define UNIQUE_BASE_VALUE_HFP	-4
- 
- #define static_reg_base_value \
-   (this_target_rtl->x_static_reg_base_value)
- 
- #define REG_BASE_VALUE(X)					\
-   (REGNO (X) < vec_safe_length (reg_base_value)			\
-    ? (*reg_base_value)[REGNO (X)] : 0)
- 
- /* Vector indexed by N giving the initial (unchanging) value known for
-    pseudo-register N.  This vector is initialized in init_alias_analysis,
-    and does not change until end_alias_analysis is called.  */
- static GTY(()) vec<rtx, va_gc> *reg_known_value;
- 
- /* Vector recording for each reg_known_value whether it is due to a
-    REG_EQUIV note.  Future passes (viz., reload) may replace the
-    pseudo with the equivalent expression and so we account for the
-    dependences that would be introduced if that happens.
- 
-    The REG_EQUIV notes created in assign_parms may mention the arg
-    pointer, and there are explicit insns in the RTL that modify the
-    arg pointer.  Thus we must ensure that such insns don't get
-    scheduled across each other because that would invalidate the
-    REG_EQUIV notes.  One could argue that the REG_EQUIV notes are
-    wrong, but solving the problem in the scheduler will likely give
-    better code, so we do it here.  */
- static sbitmap reg_known_equiv_p;
- 
- /* True when scanning insns from the start of the rtl to the
-    NOTE_INSN_FUNCTION_BEG note.  */
- static bool copying_arguments;
- 
- 
- /* The splay-tree used to store the various alias set entries.  */
- static GTY (()) vec<alias_set_entry *, va_gc> *alias_sets;
- 
- /* Build a decomposed reference object for querying the alias-oracle
-    from the MEM rtx and store it in *REF.
-    Returns false if MEM is not suitable for the alias-oracle.  */
- 
- static bool
- ao_ref_from_mem (ao_ref *ref, const_rtx mem)
- {
-   tree expr = MEM_EXPR (mem);
-   tree base;
- 
-   if (!expr)
-     return false;
- 
-   ao_ref_init (ref, expr);
- 
-   /* Get the base of the reference and see if we have to reject or
-      adjust it.  */
-   base = ao_ref_base (ref);
-   if (base == NULL_TREE)
-     return false;
- 
-   /* The tree oracle doesn't like bases that are neither decls
-      nor indirect references of SSA names.  */
-   if (!(DECL_P (base)
- 	|| (TREE_CODE (base) == MEM_REF
- 	    && TREE_CODE (TREE_OPERAND (base, 0)) == SSA_NAME)
- 	|| (TREE_CODE (base) == TARGET_MEM_REF
- 	    && TREE_CODE (TMR_BASE (base)) == SSA_NAME)))
-     return false;
- 
-   ref->ref_alias_set = MEM_ALIAS_SET (mem);
- 
-   /* If MEM_OFFSET or MEM_SIZE are unknown what we got from MEM_EXPR
-      is conservative, so trust it.  */
-   if (!MEM_OFFSET_KNOWN_P (mem)
-       || !MEM_SIZE_KNOWN_P (mem))
-     return true;
- 
-   /* If MEM_OFFSET/MEM_SIZE get us outside of ref->offset/ref->max_size
-      drop ref->ref.  */
-   if (maybe_lt (MEM_OFFSET (mem), 0)
-       || (ref->max_size_known_p ()
- 	  && maybe_gt ((MEM_OFFSET (mem) + MEM_SIZE (mem)) * BITS_PER_UNIT,
- 		       ref->max_size)))
-     ref->ref = NULL_TREE;
- 
-   /* Refine size and offset we got from analyzing MEM_EXPR by using
-      MEM_SIZE and MEM_OFFSET.  */
- 
-   ref->offset += MEM_OFFSET (mem) * BITS_PER_UNIT;
-   ref->size = MEM_SIZE (mem) * BITS_PER_UNIT;
- 
-   /* The MEM may extend into adjacent fields, so adjust max_size if
-      necessary.  */
-   if (ref->max_size_known_p ())
-     ref->max_size = upper_bound (ref->max_size, ref->size);
- 
-   /* If MEM_OFFSET and MEM_SIZE might get us outside of the base object of
-      the MEM_EXPR punt.  This happens for STRICT_ALIGNMENT targets a lot.  */
-   if (MEM_EXPR (mem) != get_spill_slot_decl (false)
-       && (maybe_lt (ref->offset, 0)
- 	  || (DECL_P (ref->base)
- 	      && (DECL_SIZE (ref->base) == NULL_TREE
- 		  || !poly_int_tree_p (DECL_SIZE (ref->base))
- 		  || maybe_lt (wi::to_poly_offset (DECL_SIZE (ref->base)),
- 			       ref->offset + ref->size)))))
-     return false;
- 
-   return true;
- }
- 
- /* Query the alias-oracle on whether the two memory rtx X and MEM may
-    alias.  If TBAA_P is set also apply TBAA.  Returns true if the
-    two rtxen may alias, false otherwise.  */
- 
- static bool
- rtx_refs_may_alias_p (const_rtx x, const_rtx mem, bool tbaa_p)
- {
-   ao_ref ref1, ref2;
- 
-   if (!ao_ref_from_mem (&ref1, x)
-       || !ao_ref_from_mem (&ref2, mem))
-     return true;
- 
-   return refs_may_alias_p_1 (&ref1, &ref2,
- 			     tbaa_p
- 			     && MEM_ALIAS_SET (x) != 0
- 			     && MEM_ALIAS_SET (mem) != 0);
- }
- 
- /* Return true if the ref EARLIER behaves the same as LATER with respect
-    to TBAA for every memory reference that might follow LATER.  */
- 
- bool
- refs_same_for_tbaa_p (tree earlier, tree later)
- {
-   ao_ref earlier_ref, later_ref;
-   ao_ref_init (&earlier_ref, earlier);
-   ao_ref_init (&later_ref, later);
-   alias_set_type earlier_set = ao_ref_alias_set (&earlier_ref);
-   alias_set_type later_set = ao_ref_alias_set (&later_ref);
-   if (!(earlier_set == later_set
- 	|| alias_set_subset_of (later_set, earlier_set)))
-     return false;
-   alias_set_type later_base_set = ao_ref_base_alias_set (&later_ref);
-   alias_set_type earlier_base_set = ao_ref_base_alias_set (&earlier_ref);
-   return (earlier_base_set == later_base_set
- 	  || alias_set_subset_of (later_base_set, earlier_base_set));
- }
- 
- /* Returns a pointer to the alias set entry for ALIAS_SET, if there is
-    such an entry, or NULL otherwise.  */
- 
- static inline alias_set_entry *
- get_alias_set_entry (alias_set_type alias_set)
- {
-   return (*alias_sets)[alias_set];
- }
- 
- /* Returns nonzero if the alias sets for MEM1 and MEM2 are such that
-    the two MEMs cannot alias each other.  */
- 
- static inline int
- mems_in_disjoint_alias_sets_p (const_rtx mem1, const_rtx mem2)
- {
-   return (flag_strict_aliasing
- 	  && ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1),
- 				      MEM_ALIAS_SET (mem2)));
- }
- 
- /* Return true if the first alias set is a subset of the second.  */
- 
- bool
- alias_set_subset_of (alias_set_type set1, alias_set_type set2)
- {
-   alias_set_entry *ase2;
- 
-   /* Disable TBAA oracle with !flag_strict_aliasing.  */
-   if (!flag_strict_aliasing)
-     return true;
- 
-   /* Everything is a subset of the "aliases everything" set.  */
-   if (set2 == 0)
-     return true;
- 
-   /* Check if set1 is a subset of set2.  */
-   ase2 = get_alias_set_entry (set2);
-   if (ase2 != 0
-       && (ase2->has_zero_child
- 	  || (ase2->children && ase2->children->get (set1))))
-     return true;
- 
-   /* As a special case we consider alias set of "void *" to be both subset
-      and superset of every alias set of a pointer.  This extra symmetry does
-      not matter for alias_sets_conflict_p but it makes aliasing_component_refs_p
-      to return true on the following testcase:
- 
-      void *ptr;
-      char **ptr2=(char **)&ptr;
-      *ptr2 = ...
- 
-      Additionally if a set contains universal pointer, we consider every pointer
-      to be a subset of it, but we do not represent this explicitely - doing so
-      would require us to update transitive closure each time we introduce new
-      pointer type.  This makes aliasing_component_refs_p to return true
-      on the following testcase:
- 
-      struct a {void *ptr;}
-      char **ptr = (char **)&a.ptr;
-      ptr = ...
- 
-      This makes void * truly universal pointer type.  See pointer handling in
-      get_alias_set for more details.  */
-   if (ase2 && ase2->has_pointer)
-     {
-       alias_set_entry *ase1 = get_alias_set_entry (set1);
- 
-       if (ase1 && ase1->is_pointer)
- 	{
-           alias_set_type voidptr_set = TYPE_ALIAS_SET (ptr_type_node);
- 	  /* If one is ptr_type_node and other is pointer, then we consider
-  	     them subset of each other.  */
- 	  if (set1 == voidptr_set || set2 == voidptr_set)
- 	    return true;
- 	  /* If SET2 contains universal pointer's alias set, then we consdier
-  	     every (non-universal) pointer.  */
- 	  if (ase2->children && set1 != voidptr_set
- 	      && ase2->children->get (voidptr_set))
- 	    return true;
- 	}
-     }
-   return false;
- }
- 
- /* Return 1 if the two specified alias sets may conflict.  */
- 
- int
- alias_sets_conflict_p (alias_set_type set1, alias_set_type set2)
- {
-   alias_set_entry *ase1;
-   alias_set_entry *ase2;
- 
-   /* The easy case.  */
-   if (alias_sets_must_conflict_p (set1, set2))
-     return 1;
- 
-   /* See if the first alias set is a subset of the second.  */
-   ase1 = get_alias_set_entry (set1);
-   if (ase1 != 0
-       && ase1->children && ase1->children->get (set2))
-     {
-       ++alias_stats.num_dag;
-       return 1;
-     }
- 
-   /* Now do the same, but with the alias sets reversed.  */
-   ase2 = get_alias_set_entry (set2);
-   if (ase2 != 0
-       && ase2->children && ase2->children->get (set1))
-     {
-       ++alias_stats.num_dag;
-       return 1;
-     }
- 
-   /* We want void * to be compatible with any other pointer without
-      really dropping it to alias set 0. Doing so would make it
-      compatible with all non-pointer types too.
- 
-      This is not strictly necessary by the C/C++ language
-      standards, but avoids common type punning mistakes.  In
-      addition to that, we need the existence of such universal
-      pointer to implement Fortran's C_PTR type (which is defined as
-      type compatible with all C pointers).  */
-   if (ase1 && ase2 && ase1->has_pointer && ase2->has_pointer)
-     {
-       alias_set_type voidptr_set = TYPE_ALIAS_SET (ptr_type_node);
- 
-       /* If one of the sets corresponds to universal pointer,
-  	 we consider it to conflict with anything that is
- 	 or contains pointer.  */
-       if (set1 == voidptr_set || set2 == voidptr_set)
- 	{
- 	  ++alias_stats.num_universal;
- 	  return true;
- 	}
-      /* If one of sets is (non-universal) pointer and the other
-  	contains universal pointer, we also get conflict.  */
-      if (ase1->is_pointer && set2 != voidptr_set
- 	 && ase2->children && ase2->children->get (voidptr_set))
- 	{
- 	  ++alias_stats.num_universal;
- 	  return true;
- 	}
-      if (ase2->is_pointer && set1 != voidptr_set
- 	 && ase1->children && ase1->children->get (voidptr_set))
- 	{
- 	  ++alias_stats.num_universal;
- 	  return true;
- 	}
-     }
- 
-   ++alias_stats.num_disambiguated;
- 
-   /* The two alias sets are distinct and neither one is the
-      child of the other.  Therefore, they cannot conflict.  */
-   return 0;
- }
- 
- /* Return 1 if the two specified alias sets will always conflict.  */
- 
- int
- alias_sets_must_conflict_p (alias_set_type set1, alias_set_type set2)
- {
-   /* Disable TBAA oracle with !flag_strict_aliasing.  */
-   if (!flag_strict_aliasing)
-     return 1;
-   if (set1 == 0 || set2 == 0)
-     {
-       ++alias_stats.num_alias_zero;
-       return 1;
-     }
-   if (set1 == set2)
-     {
-       ++alias_stats.num_same_alias_set;
-       return 1;
-     }
- 
-   return 0;
- }
- 
- /* Return 1 if any MEM object of type T1 will always conflict (using the
-    dependency routines in this file) with any MEM object of type T2.
-    This is used when allocating temporary storage.  If T1 and/or T2 are
-    NULL_TREE, it means we know nothing about the storage.  */
- 
- int
- objects_must_conflict_p (tree t1, tree t2)
- {
-   alias_set_type set1, set2;
- 
-   /* If neither has a type specified, we don't know if they'll conflict
-      because we may be using them to store objects of various types, for
-      example the argument and local variables areas of inlined functions.  */
-   if (t1 == 0 && t2 == 0)
-     return 0;
- 
-   /* If they are the same type, they must conflict.  */
-   if (t1 == t2)
-     {
-       ++alias_stats.num_same_objects;
-       return 1;
-     }
-   /* Likewise if both are volatile.  */
-   if (t1 != 0 && TYPE_VOLATILE (t1) && t2 != 0 && TYPE_VOLATILE (t2))
-     {
-       ++alias_stats.num_volatile;
-       return 1;
-     }
- 
-   set1 = t1 ? get_alias_set (t1) : 0;
-   set2 = t2 ? get_alias_set (t2) : 0;
- 
-   /* We can't use alias_sets_conflict_p because we must make sure
-      that every subtype of t1 will conflict with every subtype of
-      t2 for which a pair of subobjects of these respective subtypes
-      overlaps on the stack.  */
-   return alias_sets_must_conflict_p (set1, set2);
- }
- 
- /* Return true if T is an end of the access path which can be used
-    by type based alias oracle.  */
- 
- bool
- ends_tbaa_access_path_p (const_tree t)
- {
-   switch (TREE_CODE (t))
-     {
-     case COMPONENT_REF:
-       if (DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1)))
- 	return true;
-       /* Permit type-punning when accessing a union, provided the access
- 	 is directly through the union.  For example, this code does not
- 	 permit taking the address of a union member and then storing
- 	 through it.  Even the type-punning allowed here is a GCC
- 	 extension, albeit a common and useful one; the C standard says
- 	 that such accesses have implementation-defined behavior.  */
-       else if (TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == UNION_TYPE)
- 	return true;
-       break;
- 
-     case ARRAY_REF:
-     case ARRAY_RANGE_REF:
-       if (TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t, 0))))
- 	return true;
-       break;
- 
-     case REALPART_EXPR:
-     case IMAGPART_EXPR:
-       break;
- 
-     case BIT_FIELD_REF:
-     case VIEW_CONVERT_EXPR:
-       /* Bitfields and casts are never addressable.  */
-       return true;
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
-   return false;
- }
- 
- /* Return the outermost parent of component present in the chain of
-    component references handled by get_inner_reference in T with the
-    following property:
-      - the component is non-addressable
-    or NULL_TREE if no such parent exists.  In the former cases, the alias
-    set of this parent is the alias set that must be used for T itself.  */
- 
- tree
- component_uses_parent_alias_set_from (const_tree t)
- {
-   const_tree found = NULL_TREE;
- 
-   while (handled_component_p (t))
-     {
-       if (ends_tbaa_access_path_p (t))
- 	found = t;
- 
-       t = TREE_OPERAND (t, 0);
-     }
-  
-   if (found)
-     return TREE_OPERAND (found, 0);
- 
-   return NULL_TREE;
- }
- 
- 
- /* Return whether the pointer-type T effective for aliasing may
-    access everything and thus the reference has to be assigned
-    alias-set zero.  */
- 
- static bool
- ref_all_alias_ptr_type_p (const_tree t)
- {
-   return (TREE_CODE (TREE_TYPE (t)) == VOID_TYPE
- 	  || TYPE_REF_CAN_ALIAS_ALL (t));
- }
- 
- /* Return the alias set for the memory pointed to by T, which may be
-    either a type or an expression.  Return -1 if there is nothing
-    special about dereferencing T.  */
- 
- static alias_set_type
- get_deref_alias_set_1 (tree t)
- {
-   /* All we care about is the type.  */
-   if (! TYPE_P (t))
-     t = TREE_TYPE (t);
- 
-   /* If we have an INDIRECT_REF via a void pointer, we don't
-      know anything about what that might alias.  Likewise if the
-      pointer is marked that way.  */
-   if (ref_all_alias_ptr_type_p (t))
-     return 0;
- 
-   return -1;
- }
- 
- /* Return the alias set for the memory pointed to by T, which may be
-    either a type or an expression.  */
- 
- alias_set_type
- get_deref_alias_set (tree t)
- {
-   /* If we're not doing any alias analysis, just assume everything
-      aliases everything else.  */
-   if (!flag_strict_aliasing)
-     return 0;
- 
-   alias_set_type set = get_deref_alias_set_1 (t);
- 
-   /* Fall back to the alias-set of the pointed-to type.  */
-   if (set == -1)
-     {
-       if (! TYPE_P (t))
- 	t = TREE_TYPE (t);
-       set = get_alias_set (TREE_TYPE (t));
-     }
- 
-   return set;
- }
- 
- /* Return the pointer-type relevant for TBAA purposes from the
-    memory reference tree *T or NULL_TREE in which case *T is
-    adjusted to point to the outermost component reference that
-    can be used for assigning an alias set.  */
-  
- tree
- reference_alias_ptr_type_1 (tree *t)
- {
-   tree inner;
- 
-   /* Get the base object of the reference.  */
-   inner = *t;
-   while (handled_component_p (inner))
-     {
-       /* If there is a VIEW_CONVERT_EXPR in the chain we cannot use
- 	 the type of any component references that wrap it to
- 	 determine the alias-set.  */
-       if (TREE_CODE (inner) == VIEW_CONVERT_EXPR)
- 	*t = TREE_OPERAND (inner, 0);
-       inner = TREE_OPERAND (inner, 0);
-     }
- 
-   /* Handle pointer dereferences here, they can override the
-      alias-set.  */
-   if (INDIRECT_REF_P (inner)
-       && ref_all_alias_ptr_type_p (TREE_TYPE (TREE_OPERAND (inner, 0))))
-     return TREE_TYPE (TREE_OPERAND (inner, 0));
-   else if (TREE_CODE (inner) == TARGET_MEM_REF)
-     return TREE_TYPE (TMR_OFFSET (inner));
-   else if (TREE_CODE (inner) == MEM_REF
- 	   && ref_all_alias_ptr_type_p (TREE_TYPE (TREE_OPERAND (inner, 1))))
-     return TREE_TYPE (TREE_OPERAND (inner, 1));
- 
-   /* If the innermost reference is a MEM_REF that has a
-      conversion embedded treat it like a VIEW_CONVERT_EXPR above,
-      using the memory access type for determining the alias-set.  */
-   if (TREE_CODE (inner) == MEM_REF
-       && (TYPE_MAIN_VARIANT (TREE_TYPE (inner))
- 	  != TYPE_MAIN_VARIANT
- 	       (TREE_TYPE (TREE_TYPE (TREE_OPERAND (inner, 1))))))
-     return TREE_TYPE (TREE_OPERAND (inner, 1));
- 
-   /* Otherwise, pick up the outermost object that we could have
-      a pointer to.  */
-   tree tem = component_uses_parent_alias_set_from (*t);
-   if (tem)
-     *t = tem;
- 
-   return NULL_TREE;
- }
- 
- /* Return the pointer-type relevant for TBAA purposes from the
-    gimple memory reference tree T.  This is the type to be used for
-    the offset operand of MEM_REF or TARGET_MEM_REF replacements of T
-    and guarantees that get_alias_set will return the same alias
-    set for T and the replacement.  */
- 
- tree
- reference_alias_ptr_type (tree t)
- {
-   /* If the frontend assigns this alias-set zero, preserve that.  */
-   if (lang_hooks.get_alias_set (t) == 0)
-     return ptr_type_node;
- 
-   tree ptype = reference_alias_ptr_type_1 (&t);
-   /* If there is a given pointer type for aliasing purposes, return it.  */
-   if (ptype != NULL_TREE)
-     return ptype;
- 
-   /* Otherwise build one from the outermost component reference we
-      may use.  */
-   if (TREE_CODE (t) == MEM_REF
-       || TREE_CODE (t) == TARGET_MEM_REF)
-     return TREE_TYPE (TREE_OPERAND (t, 1));
-   else
-     return build_pointer_type (TYPE_MAIN_VARIANT (TREE_TYPE (t)));
- }
- 
- /* Return whether the pointer-types T1 and T2 used to determine
-    two alias sets of two references will yield the same answer
-    from get_deref_alias_set.  */
- 
- bool
- alias_ptr_types_compatible_p (tree t1, tree t2)
- {
-   if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
-     return true;
- 
-   if (ref_all_alias_ptr_type_p (t1)
-       || ref_all_alias_ptr_type_p (t2))
-     return false;
- 
-     /* This function originally abstracts from simply comparing
-        get_deref_alias_set so that we are sure this still computes
-        the same result after LTO type merging is applied.
-        When in LTO type merging is done we can actually do this compare.
-     */
-   if (in_lto_p)
-     return get_deref_alias_set (t1) == get_deref_alias_set (t2);
-   else
-     return (TYPE_MAIN_VARIANT (TREE_TYPE (t1))
- 	    == TYPE_MAIN_VARIANT (TREE_TYPE (t2)));
- }
- 
- /* Create emptry alias set entry.  */
- 
- alias_set_entry *
- init_alias_set_entry (alias_set_type set)
- {
-   alias_set_entry *ase = ggc_alloc<alias_set_entry> ();
-   ase->alias_set = set;
-   ase->children = NULL;
-   ase->has_zero_child = false;
-   ase->is_pointer = false;
-   ase->has_pointer = false;
-   gcc_checking_assert (!get_alias_set_entry (set));
-   (*alias_sets)[set] = ase;
-   return ase;
- }
- 
- /* Return the alias set for T, which may be either a type or an
-    expression.  Call language-specific routine for help, if needed.  */
- 
- alias_set_type
- get_alias_set (tree t)
- {
-   alias_set_type set;
- 
-   /* We cannot give up with -fno-strict-aliasing because we need to build
-      proper type representations for possible functions which are built with
-      -fstrict-aliasing.  */
- 
-   /* return 0 if this or its type is an error.  */
-   if (t == error_mark_node
-       || (! TYPE_P (t)
- 	  && (TREE_TYPE (t) == 0 || TREE_TYPE (t) == error_mark_node)))
-     return 0;
- 
-   /* We can be passed either an expression or a type.  This and the
-      language-specific routine may make mutually-recursive calls to each other
-      to figure out what to do.  At each juncture, we see if this is a tree
-      that the language may need to handle specially.  First handle things that
-      aren't types.  */
-   if (! TYPE_P (t))
-     {
-       /* Give the language a chance to do something with this tree
- 	 before we look at it.  */
-       STRIP_NOPS (t);
-       set = lang_hooks.get_alias_set (t);
-       if (set != -1)
- 	return set;
- 
-       /* Get the alias pointer-type to use or the outermost object
-          that we could have a pointer to.  */
-       tree ptype = reference_alias_ptr_type_1 (&t);
-       if (ptype != NULL)
- 	return get_deref_alias_set (ptype);
- 
-       /* If we've already determined the alias set for a decl, just return
- 	 it.  This is necessary for C++ anonymous unions, whose component
- 	 variables don't look like union members (boo!).  */
-       if (VAR_P (t)
- 	  && DECL_RTL_SET_P (t) && MEM_P (DECL_RTL (t)))
- 	return MEM_ALIAS_SET (DECL_RTL (t));
- 
-       /* Now all we care about is the type.  */
-       t = TREE_TYPE (t);
-     }
- 
-   /* Variant qualifiers don't affect the alias set, so get the main
-      variant.  */
-   t = TYPE_MAIN_VARIANT (t);
- 
-   if (AGGREGATE_TYPE_P (t)
-       && TYPE_TYPELESS_STORAGE (t))
-     return 0;
- 
-   /* Always use the canonical type as well.  If this is a type that
-      requires structural comparisons to identify compatible types
-      use alias set zero.  */
-   if (TYPE_STRUCTURAL_EQUALITY_P (t))
-     {
-       /* Allow the language to specify another alias set for this
- 	 type.  */
-       set = lang_hooks.get_alias_set (t);
-       if (set != -1)
- 	return set;
-       /* Handle structure type equality for pointer types, arrays and vectors.
- 	 This is easy to do, because the code below ignores canonical types on
- 	 these anyway.  This is important for LTO, where TYPE_CANONICAL for
- 	 pointers cannot be meaningfully computed by the frontend.  */
-       if (canonical_type_used_p (t))
- 	{
- 	  /* In LTO we set canonical types for all types where it makes
- 	     sense to do so.  Double check we did not miss some type.  */
- 	  gcc_checking_assert (!in_lto_p || !type_with_alias_set_p (t));
-           return 0;
- 	}
-     }
-   else
-     {
-       t = TYPE_CANONICAL (t);
-       gcc_checking_assert (!TYPE_STRUCTURAL_EQUALITY_P (t));
-     }
- 
-   /* If this is a type with a known alias set, return it.  */
-   gcc_checking_assert (t == TYPE_MAIN_VARIANT (t));
-   if (TYPE_ALIAS_SET_KNOWN_P (t))
-     return TYPE_ALIAS_SET (t);
- 
-   /* We don't want to set TYPE_ALIAS_SET for incomplete types.  */
-   if (!COMPLETE_TYPE_P (t))
-     {
-       /* For arrays with unknown size the conservative answer is the
- 	 alias set of the element type.  */
-       if (TREE_CODE (t) == ARRAY_TYPE)
- 	return get_alias_set (TREE_TYPE (t));
- 
-       /* But return zero as a conservative answer for incomplete types.  */
-       return 0;
-     }
- 
-   /* See if the language has special handling for this type.  */
-   set = lang_hooks.get_alias_set (t);
-   if (set != -1)
-     return set;
- 
-   /* There are no objects of FUNCTION_TYPE, so there's no point in
-      using up an alias set for them.  (There are, of course, pointers
-      and references to functions, but that's different.)  */
-   else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
-     set = 0;
- 
-   /* Unless the language specifies otherwise, let vector types alias
-      their components.  This avoids some nasty type punning issues in
-      normal usage.  And indeed lets vectors be treated more like an
-      array slice.  */
-   else if (TREE_CODE (t) == VECTOR_TYPE)
-     set = get_alias_set (TREE_TYPE (t));
- 
-   /* Unless the language specifies otherwise, treat array types the
-      same as their components.  This avoids the asymmetry we get
-      through recording the components.  Consider accessing a
-      character(kind=1) through a reference to a character(kind=1)[1:1].
-      Or consider if we want to assign integer(kind=4)[0:D.1387] and
-      integer(kind=4)[4] the same alias set or not.
-      Just be pragmatic here and make sure the array and its element
-      type get the same alias set assigned.  */
-   else if (TREE_CODE (t) == ARRAY_TYPE
- 	   && (!TYPE_NONALIASED_COMPONENT (t)
- 	       || TYPE_STRUCTURAL_EQUALITY_P (t)))
-     set = get_alias_set (TREE_TYPE (t));
- 
-   /* From the former common C and C++ langhook implementation:
- 
-      Unfortunately, there is no canonical form of a pointer type.
-      In particular, if we have `typedef int I', then `int *', and
-      `I *' are different types.  So, we have to pick a canonical
-      representative.  We do this below.
- 
-      Technically, this approach is actually more conservative that
-      it needs to be.  In particular, `const int *' and `int *'
-      should be in different alias sets, according to the C and C++
-      standard, since their types are not the same, and so,
-      technically, an `int **' and `const int **' cannot point at
-      the same thing.
- 
-      But, the standard is wrong.  In particular, this code is
-      legal C++:
- 
-      int *ip;
-      int **ipp = &ip;
-      const int* const* cipp = ipp;
-      And, it doesn't make sense for that to be legal unless you
-      can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
-      the pointed-to types.  This issue has been reported to the
-      C++ committee.
- 
-      For this reason go to canonical type of the unqalified pointer type.
-      Until GCC 6 this code set all pointers sets to have alias set of
-      ptr_type_node but that is a bad idea, because it prevents disabiguations
-      in between pointers.  For Firefox this accounts about 20% of all
-      disambiguations in the program.  */
-   else if (POINTER_TYPE_P (t) && t != ptr_type_node)
-     {
-       tree p;
-       auto_vec <bool, 8> reference;
- 
-       /* Unnest all pointers and references.
- 	 We also want to make pointer to array/vector equivalent to pointer to
- 	 its element (see the reasoning above). Skip all those types, too.  */
-       for (p = t; POINTER_TYPE_P (p)
- 	   || (TREE_CODE (p) == ARRAY_TYPE
- 	       && (!TYPE_NONALIASED_COMPONENT (p)
- 		   || !COMPLETE_TYPE_P (p)
- 		   || TYPE_STRUCTURAL_EQUALITY_P (p)))
- 	   || TREE_CODE (p) == VECTOR_TYPE;
- 	   p = TREE_TYPE (p))
- 	{
- 	  /* Ada supports recursive pointers.  Instead of doing recursion
- 	     check, just give up once the preallocated space of 8 elements
- 	     is up.  In this case just punt to void * alias set.  */
- 	  if (reference.length () == 8)
- 	    {
- 	      p = ptr_type_node;
- 	      break;
- 	    }
- 	  if (TREE_CODE (p) == REFERENCE_TYPE)
- 	    /* In LTO we want languages that use references to be compatible
-  	       with languages that use pointers.  */
- 	    reference.safe_push (true && !in_lto_p);
- 	  if (TREE_CODE (p) == POINTER_TYPE)
- 	    reference.safe_push (false);
- 	}
-       p = TYPE_MAIN_VARIANT (p);
- 
-       /* In LTO for C++ programs we can turn incomplete types to complete
- 	 using ODR name lookup.  */
-       if (in_lto_p && TYPE_STRUCTURAL_EQUALITY_P (p) && odr_type_p (p))
- 	{
- 	  p = prevailing_odr_type (p);
- 	  gcc_checking_assert (TYPE_MAIN_VARIANT (p) == p);
- 	}
- 
-       /* Make void * compatible with char * and also void **.
- 	 Programs are commonly violating TBAA by this.
- 
- 	 We also make void * to conflict with every pointer
- 	 (see record_component_aliases) and thus it is safe it to use it for
- 	 pointers to types with TYPE_STRUCTURAL_EQUALITY_P.  */
-       if (TREE_CODE (p) == VOID_TYPE || TYPE_STRUCTURAL_EQUALITY_P (p))
- 	set = get_alias_set (ptr_type_node);
-       else
- 	{
- 	  /* Rebuild pointer type starting from canonical types using
- 	     unqualified pointers and references only.  This way all such
- 	     pointers will have the same alias set and will conflict with
- 	     each other.
- 
- 	     Most of time we already have pointers or references of a given type.
- 	     If not we build new one just to be sure that if someone later
- 	     (probably only middle-end can, as we should assign all alias
- 	     classes only after finishing translation unit) builds the pointer
- 	     type, the canonical type will match.  */
- 	  p = TYPE_CANONICAL (p);
- 	  while (!reference.is_empty ())
- 	    {
- 	      if (reference.pop ())
- 		p = build_reference_type (p);
- 	      else
- 		p = build_pointer_type (p);
- 	      gcc_checking_assert (p == TYPE_MAIN_VARIANT (p));
- 	      /* build_pointer_type should always return the canonical type.
- 		 For LTO TYPE_CANOINCAL may be NULL, because we do not compute
- 		 them.  Be sure that frontends do not glob canonical types of
- 		 pointers in unexpected way and that p == TYPE_CANONICAL (p)
- 		 in all other cases.  */
- 	      gcc_checking_assert (!TYPE_CANONICAL (p)
- 				   || p == TYPE_CANONICAL (p));
- 	    }
- 
- 	  /* Assign the alias set to both p and t.
- 	     We cannot call get_alias_set (p) here as that would trigger
- 	     infinite recursion when p == t.  In other cases it would just
- 	     trigger unnecesary legwork of rebuilding the pointer again.  */
- 	  gcc_checking_assert (p == TYPE_MAIN_VARIANT (p));
- 	  if (TYPE_ALIAS_SET_KNOWN_P (p))
- 	    set = TYPE_ALIAS_SET (p);
- 	  else
- 	    {
- 	      set = new_alias_set ();
- 	      TYPE_ALIAS_SET (p) = set;
- 	    }
- 	}
-     }
-   /* Alias set of ptr_type_node is special and serve as universal pointer which
-      is TBAA compatible with every other pointer type.  Be sure we have the
-      alias set built even for LTO which otherwise keeps all TYPE_CANONICAL
-      of pointer types NULL.  */
-   else if (t == ptr_type_node)
-     set = new_alias_set ();
- 
-   /* Otherwise make a new alias set for this type.  */
-   else
-     {
-       /* Each canonical type gets its own alias set, so canonical types
- 	 shouldn't form a tree.  It doesn't really matter for types
- 	 we handle specially above, so only check it where it possibly
- 	 would result in a bogus alias set.  */
-       gcc_checking_assert (TYPE_CANONICAL (t) == t);
- 
-       set = new_alias_set ();
-     }
- 
-   TYPE_ALIAS_SET (t) = set;
- 
-   /* If this is an aggregate type or a complex type, we must record any
-      component aliasing information.  */
-   if (AGGREGATE_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
-     record_component_aliases (t);
- 
-   /* We treat pointer types specially in alias_set_subset_of.  */
-   if (POINTER_TYPE_P (t) && set)
-     {
-       alias_set_entry *ase = get_alias_set_entry (set);
-       if (!ase)
- 	ase = init_alias_set_entry (set);
-       ase->is_pointer = true;
-       ase->has_pointer = true;
-     }
- 
-   return set;
- }
- 
- /* Return a brand-new alias set.  */
- 
- alias_set_type
- new_alias_set (void)
- {
-   if (alias_sets == 0)
-     vec_safe_push (alias_sets, (alias_set_entry *) NULL);
-   vec_safe_push (alias_sets, (alias_set_entry *) NULL);
-   return alias_sets->length () - 1;
- }
- 
- /* Indicate that things in SUBSET can alias things in SUPERSET, but that
-    not everything that aliases SUPERSET also aliases SUBSET.  For example,
-    in C, a store to an `int' can alias a load of a structure containing an
-    `int', and vice versa.  But it can't alias a load of a 'double' member
-    of the same structure.  Here, the structure would be the SUPERSET and
-    `int' the SUBSET.  This relationship is also described in the comment at
-    the beginning of this file.
- 
-    This function should be called only once per SUPERSET/SUBSET pair.
- 
-    It is illegal for SUPERSET to be zero; everything is implicitly a
-    subset of alias set zero.  */
- 
- void
- record_alias_subset (alias_set_type superset, alias_set_type subset)
- {
-   alias_set_entry *superset_entry;
-   alias_set_entry *subset_entry;
- 
-   /* It is possible in complex type situations for both sets to be the same,
-      in which case we can ignore this operation.  */
-   if (superset == subset)
-     return;
- 
-   gcc_assert (superset);
- 
-   superset_entry = get_alias_set_entry (superset);
-   if (superset_entry == 0)
-     {
-       /* Create an entry for the SUPERSET, so that we have a place to
- 	 attach the SUBSET.  */
-       superset_entry = init_alias_set_entry (superset);
-     }
- 
-   if (subset == 0)
-     superset_entry->has_zero_child = 1;
-   else
-     {
-       if (!superset_entry->children)
- 	superset_entry->children
- 	  = hash_map<alias_set_hash, int>::create_ggc (64);
- 
-       /* Enter the SUBSET itself as a child of the SUPERSET.  If it was
- 	 already there we're done.  */
-       if (superset_entry->children->put (subset, 0))
- 	return;
- 
-       subset_entry = get_alias_set_entry (subset);
-       /* If there is an entry for the subset, enter all of its children
- 	 (if they are not already present) as children of the SUPERSET.  */
-       if (subset_entry)
- 	{
- 	  if (subset_entry->has_zero_child)
- 	    superset_entry->has_zero_child = true;
-           if (subset_entry->has_pointer)
- 	    superset_entry->has_pointer = true;
- 
- 	  if (subset_entry->children)
- 	    {
- 	      hash_map<alias_set_hash, int>::iterator iter
- 		= subset_entry->children->begin ();
- 	      for (; iter != subset_entry->children->end (); ++iter)
- 		superset_entry->children->put ((*iter).first, (*iter).second);
- 	    }
- 	}
-     }
- }
- 
- /* Record that component types of TYPE, if any, are part of SUPERSET for
-    aliasing purposes.  For record types, we only record component types
-    for fields that are not marked non-addressable.  For array types, we
-    only record the component type if it is not marked non-aliased.  */
- 
- void
- record_component_aliases (tree type, alias_set_type superset)
- {
-   tree field;
- 
-   if (superset == 0)
-     return;
- 
-   switch (TREE_CODE (type))
-     {
-     case RECORD_TYPE:
-     case UNION_TYPE:
-     case QUAL_UNION_TYPE:
-       {
- 	/* LTO non-ODR type merging does not make any difference between 
- 	   component pointer types.  We may have
- 
- 	   struct foo {int *a;};
- 
- 	   as TYPE_CANONICAL of 
- 
- 	   struct bar {float *a;};
- 
- 	   Because accesses to int * and float * do not alias, we would get
- 	   false negative when accessing the same memory location by
- 	   float ** and bar *. We thus record the canonical type as:
- 
- 	   struct {void *a;};
- 
- 	   void * is special cased and works as a universal pointer type.
- 	   Accesses to it conflicts with accesses to any other pointer
- 	   type.  */
- 	bool void_pointers = in_lto_p
- 			     && (!odr_type_p (type)
- 				 || !odr_based_tbaa_p (type));
- 	for (field = TYPE_FIELDS (type); field != 0; field = DECL_CHAIN (field))
- 	  if (TREE_CODE (field) == FIELD_DECL && !DECL_NONADDRESSABLE_P (field))
- 	    {
- 	      tree t = TREE_TYPE (field);
- 	      if (void_pointers)
- 		{
- 		  /* VECTOR_TYPE and ARRAY_TYPE share the alias set with their
- 		     element type and that type has to be normalized to void *,
- 		     too, in the case it is a pointer. */
- 		  while (!canonical_type_used_p (t) && !POINTER_TYPE_P (t))
- 		    {
- 		      gcc_checking_assert (TYPE_STRUCTURAL_EQUALITY_P (t));
- 		      t = TREE_TYPE (t);
- 		    }
- 		  if (POINTER_TYPE_P (t))
- 		    t = ptr_type_node;
- 		  else if (flag_checking)
- 		    gcc_checking_assert (get_alias_set (t)
- 					 == get_alias_set (TREE_TYPE (field)));
- 		}
- 
- 	      alias_set_type set = get_alias_set (t);
- 	      record_alias_subset (superset, set);
- 	      /* If the field has alias-set zero make sure to still record
- 		 any componets of it.  This makes sure that for
- 		   struct A {
- 		     struct B {
- 		       int i;
- 		       char c[4];
- 		     } b;
- 		   };
- 		 in C++ even though 'B' has alias-set zero because
- 		 TYPE_TYPELESS_STORAGE is set, 'A' has the alias-set of
- 		 'int' as subset.  */
- 	      if (set == 0)
- 		record_component_aliases (t, superset);
- 	    }
-       }
-       break;
- 
-     case COMPLEX_TYPE:
-       record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
-       break;
- 
-     /* VECTOR_TYPE and ARRAY_TYPE share the alias set with their
-        element type.  */
- 
-     default:
-       break;
-     }
- }
- 
- /* Record that component types of TYPE, if any, are part of that type for
-    aliasing purposes.  For record types, we only record component types
-    for fields that are not marked non-addressable.  For array types, we
-    only record the component type if it is not marked non-aliased.  */
- 
- void
- record_component_aliases (tree type)
- {
-   alias_set_type superset = get_alias_set (type);
-   record_component_aliases (type, superset);
- }
- 
- 
- /* Allocate an alias set for use in storing and reading from the varargs
-    spill area.  */
- 
- static GTY(()) alias_set_type varargs_set = -1;
- 
- alias_set_type
- get_varargs_alias_set (void)
- {
- #if 1
-   /* We now lower VA_ARG_EXPR, and there's currently no way to attach the
-      varargs alias set to an INDIRECT_REF (FIXME!), so we can't
-      consistently use the varargs alias set for loads from the varargs
-      area.  So don't use it anywhere.  */
-   return 0;
- #else
-   if (varargs_set == -1)
-     varargs_set = new_alias_set ();
- 
-   return varargs_set;
- #endif
- }
- 
- /* Likewise, but used for the fixed portions of the frame, e.g., register
-    save areas.  */
- 
- static GTY(()) alias_set_type frame_set = -1;
- 
- alias_set_type
- get_frame_alias_set (void)
- {
-   if (frame_set == -1)
-     frame_set = new_alias_set ();
- 
-   return frame_set;
- }
- 
- /* Create a new, unique base with id ID.  */
- 
- static rtx
- unique_base_value (HOST_WIDE_INT id)
- {
-   return gen_rtx_ADDRESS (Pmode, id);
- }
- 
- /* Return true if accesses based on any other base value cannot alias
-    those based on X.  */
- 
- static bool
- unique_base_value_p (rtx x)
- {
-   return GET_CODE (x) == ADDRESS && GET_MODE (x) == Pmode;
- }
- 
- /* Return true if X is known to be a base value.  */
- 
- static bool
- known_base_value_p (rtx x)
- {
-   switch (GET_CODE (x))
-     {
-     case LABEL_REF:
-     case SYMBOL_REF:
-       return true;
- 
-     case ADDRESS:
-       /* Arguments may or may not be bases; we don't know for sure.  */
-       return GET_MODE (x) != VOIDmode;
- 
-     default:
-       return false;
-     }
- }
- 
- /* Inside SRC, the source of a SET, find a base address.  */
- 
- static rtx
- find_base_value (rtx src)
- {
-   unsigned int regno;
-   scalar_int_mode int_mode;
- 
- #if defined (FIND_BASE_TERM)
-   /* Try machine-dependent ways to find the base term.  */
-   src = FIND_BASE_TERM (src);
- #endif
- 
-   switch (GET_CODE (src))
-     {
-     case SYMBOL_REF:
-     case LABEL_REF:
-       return src;
- 
-     case REG:
-       regno = REGNO (src);
-       /* At the start of a function, argument registers have known base
- 	 values which may be lost later.  Returning an ADDRESS
- 	 expression here allows optimization based on argument values
- 	 even when the argument registers are used for other purposes.  */
-       if (regno < FIRST_PSEUDO_REGISTER && copying_arguments)
- 	return new_reg_base_value[regno];
- 
-       /* If a pseudo has a known base value, return it.  Do not do this
- 	 for non-fixed hard regs since it can result in a circular
- 	 dependency chain for registers which have values at function entry.
- 
- 	 The test above is not sufficient because the scheduler may move
- 	 a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN.  */
-       if ((regno >= FIRST_PSEUDO_REGISTER || fixed_regs[regno])
- 	  && regno < vec_safe_length (reg_base_value))
- 	{
- 	  /* If we're inside init_alias_analysis, use new_reg_base_value
- 	     to reduce the number of relaxation iterations.  */
- 	  if (new_reg_base_value && new_reg_base_value[regno]
- 	      && DF_REG_DEF_COUNT (regno) == 1)
- 	    return new_reg_base_value[regno];
- 
- 	  if ((*reg_base_value)[regno])
- 	    return (*reg_base_value)[regno];
- 	}
- 
-       return 0;
- 
-     case MEM:
-       /* Check for an argument passed in memory.  Only record in the
- 	 copying-arguments block; it is too hard to track changes
- 	 otherwise.  */
-       if (copying_arguments
- 	  && (XEXP (src, 0) == arg_pointer_rtx
- 	      || (GET_CODE (XEXP (src, 0)) == PLUS
- 		  && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
- 	return arg_base_value;
-       return 0;
- 
-     case CONST:
-       src = XEXP (src, 0);
-       if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
- 	break;
- 
-       /* fall through */
- 
-     case PLUS:
-     case MINUS:
-       {
- 	rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
- 
- 	/* If either operand is a REG that is a known pointer, then it
- 	   is the base.  */
- 	if (REG_P (src_0) && REG_POINTER (src_0))
- 	  return find_base_value (src_0);
- 	if (REG_P (src_1) && REG_POINTER (src_1))
- 	  return find_base_value (src_1);
- 
- 	/* If either operand is a REG, then see if we already have
- 	   a known value for it.  */
- 	if (REG_P (src_0))
- 	  {
- 	    temp = find_base_value (src_0);
- 	    if (temp != 0)
- 	      src_0 = temp;
- 	  }
- 
- 	if (REG_P (src_1))
- 	  {
- 	    temp = find_base_value (src_1);
- 	    if (temp!= 0)
- 	      src_1 = temp;
- 	  }
- 
- 	/* If either base is named object or a special address
- 	   (like an argument or stack reference), then use it for the
- 	   base term.  */
- 	if (src_0 != 0 && known_base_value_p (src_0))
- 	  return src_0;
- 
- 	if (src_1 != 0 && known_base_value_p (src_1))
- 	  return src_1;
- 
- 	/* Guess which operand is the base address:
- 	   If either operand is a symbol, then it is the base.  If
- 	   either operand is a CONST_INT, then the other is the base.  */
- 	if (CONST_INT_P (src_1) || CONSTANT_P (src_0))
- 	  return find_base_value (src_0);
- 	else if (CONST_INT_P (src_0) || CONSTANT_P (src_1))
- 	  return find_base_value (src_1);
- 
- 	return 0;
-       }
- 
-     case LO_SUM:
-       /* The standard form is (lo_sum reg sym) so look only at the
- 	 second operand.  */
-       return find_base_value (XEXP (src, 1));
- 
-     case AND:
-       /* Look through aligning ANDs.  And AND with zero or one with
-          the LSB set isn't one (see for example PR92462).  */
-       if (CONST_INT_P (XEXP (src, 1))
- 	  && INTVAL (XEXP (src, 1)) != 0
- 	  && (INTVAL (XEXP (src, 1)) & 1) == 0)
- 	return find_base_value (XEXP (src, 0));
-       return 0;
- 
-     case TRUNCATE:
-       /* As we do not know which address space the pointer is referring to, we can
- 	 handle this only if the target does not support different pointer or
- 	 address modes depending on the address space.  */
-       if (!target_default_pointer_address_modes_p ())
- 	break;
-       if (!is_a <scalar_int_mode> (GET_MODE (src), &int_mode)
- 	  || GET_MODE_PRECISION (int_mode) < GET_MODE_PRECISION (Pmode))
- 	break;
-       /* Fall through.  */
-     case HIGH:
-     case PRE_INC:
-     case PRE_DEC:
-     case POST_INC:
-     case POST_DEC:
-     case PRE_MODIFY:
-     case POST_MODIFY:
-       return find_base_value (XEXP (src, 0));
- 
-     case ZERO_EXTEND:
-     case SIGN_EXTEND:	/* used for NT/Alpha pointers */
-       /* As we do not know which address space the pointer is referring to, we can
- 	 handle this only if the target does not support different pointer or
- 	 address modes depending on the address space.  */
-       if (!target_default_pointer_address_modes_p ())
- 	break;
- 
-       {
- 	rtx temp = find_base_value (XEXP (src, 0));
- 
- 	if (temp != 0 && CONSTANT_P (temp))
- 	  temp = convert_memory_address (Pmode, temp);
- 
- 	return temp;
-       }
- 
-     default:
-       break;
-     }
- 
-   return 0;
- }
- 
- /* Called from init_alias_analysis indirectly through note_stores,
-    or directly if DEST is a register with a REG_NOALIAS note attached.
-    SET is null in the latter case.  */
- 
- /* While scanning insns to find base values, reg_seen[N] is nonzero if
-    register N has been set in this function.  */
- static sbitmap reg_seen;
- 
- static void
- record_set (rtx dest, const_rtx set, void *data ATTRIBUTE_UNUSED)
- {
-   unsigned regno;
-   rtx src;
-   int n;
- 
-   if (!REG_P (dest))
-     return;
- 
-   regno = REGNO (dest);
- 
-   gcc_checking_assert (regno < reg_base_value->length ());
- 
-   n = REG_NREGS (dest);
-   if (n != 1)
-     {
-       while (--n >= 0)
- 	{
- 	  bitmap_set_bit (reg_seen, regno + n);
- 	  new_reg_base_value[regno + n] = 0;
- 	}
-       return;
-     }
- 
-   if (set)
-     {
-       /* A CLOBBER wipes out any old value but does not prevent a previously
- 	 unset register from acquiring a base address (i.e. reg_seen is not
- 	 set).  */
-       if (GET_CODE (set) == CLOBBER)
- 	{
- 	  new_reg_base_value[regno] = 0;
- 	  return;
- 	}
- 
-       src = SET_SRC (set);
-     }
-   else
-     {
-       /* There's a REG_NOALIAS note against DEST.  */
-       if (bitmap_bit_p (reg_seen, regno))
- 	{
- 	  new_reg_base_value[regno] = 0;
- 	  return;
- 	}
-       bitmap_set_bit (reg_seen, regno);
-       new_reg_base_value[regno] = unique_base_value (unique_id++);
-       return;
-     }
- 
-   /* If this is not the first set of REGNO, see whether the new value
-      is related to the old one.  There are two cases of interest:
- 
- 	(1) The register might be assigned an entirely new value
- 	    that has the same base term as the original set.
- 
- 	(2) The set might be a simple self-modification that
- 	    cannot change REGNO's base value.
- 
-      If neither case holds, reject the original base value as invalid.
-      Note that the following situation is not detected:
- 
- 	 extern int x, y;  int *p = &x; p += (&y-&x);
- 
-      ANSI C does not allow computing the difference of addresses
-      of distinct top level objects.  */
-   if (new_reg_base_value[regno] != 0
-       && find_base_value (src) != new_reg_base_value[regno])
-     switch (GET_CODE (src))
-       {
-       case LO_SUM:
-       case MINUS:
- 	if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
- 	  new_reg_base_value[regno] = 0;
- 	break;
-       case PLUS:
- 	/* If the value we add in the PLUS is also a valid base value,
- 	   this might be the actual base value, and the original value
- 	   an index.  */
- 	{
- 	  rtx other = NULL_RTX;
- 
- 	  if (XEXP (src, 0) == dest)
- 	    other = XEXP (src, 1);
- 	  else if (XEXP (src, 1) == dest)
- 	    other = XEXP (src, 0);
- 
- 	  if (! other || find_base_value (other))
- 	    new_reg_base_value[regno] = 0;
- 	  break;
- 	}
-       case AND:
- 	if (XEXP (src, 0) != dest || !CONST_INT_P (XEXP (src, 1)))
- 	  new_reg_base_value[regno] = 0;
- 	break;
-       default:
- 	new_reg_base_value[regno] = 0;
- 	break;
-       }
-   /* If this is the first set of a register, record the value.  */
-   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
- 	   && ! bitmap_bit_p (reg_seen, regno) && new_reg_base_value[regno] == 0)
-     new_reg_base_value[regno] = find_base_value (src);
- 
-   bitmap_set_bit (reg_seen, regno);
- }
- 
- /* Return REG_BASE_VALUE for REGNO.  Selective scheduler uses this to avoid
-    using hard registers with non-null REG_BASE_VALUE for renaming.  */
- rtx
- get_reg_base_value (unsigned int regno)
- {
-   return (*reg_base_value)[regno];
- }
- 
- /* If a value is known for REGNO, return it.  */
- 
- rtx
- get_reg_known_value (unsigned int regno)
- {
-   if (regno >= FIRST_PSEUDO_REGISTER)
-     {
-       regno -= FIRST_PSEUDO_REGISTER;
-       if (regno < vec_safe_length (reg_known_value))
- 	return (*reg_known_value)[regno];
-     }
-   return NULL;
- }
- 
- /* Set it.  */
- 
- static void
- set_reg_known_value (unsigned int regno, rtx val)
- {
-   if (regno >= FIRST_PSEUDO_REGISTER)
-     {
-       regno -= FIRST_PSEUDO_REGISTER;
-       if (regno < vec_safe_length (reg_known_value))
- 	(*reg_known_value)[regno] = val;
-     }
- }
- 
- /* Similarly for reg_known_equiv_p.  */
- 
- bool
- get_reg_known_equiv_p (unsigned int regno)
- {
-   if (regno >= FIRST_PSEUDO_REGISTER)
-     {
-       regno -= FIRST_PSEUDO_REGISTER;
-       if (regno < vec_safe_length (reg_known_value))
- 	return bitmap_bit_p (reg_known_equiv_p, regno);
-     }
-   return false;
- }
- 
- static void
- set_reg_known_equiv_p (unsigned int regno, bool val)
- {
-   if (regno >= FIRST_PSEUDO_REGISTER)
-     {
-       regno -= FIRST_PSEUDO_REGISTER;
-       if (regno < vec_safe_length (reg_known_value))
- 	{
- 	  if (val)
- 	    bitmap_set_bit (reg_known_equiv_p, regno);
- 	  else
- 	    bitmap_clear_bit (reg_known_equiv_p, regno);
- 	}
-     }
- }
- 
- 
- /* Returns a canonical version of X, from the point of view alias
-    analysis.  (For example, if X is a MEM whose address is a register,
-    and the register has a known value (say a SYMBOL_REF), then a MEM
-    whose address is the SYMBOL_REF is returned.)  */
- 
- rtx
- canon_rtx (rtx x)
- {
-   /* Recursively look for equivalences.  */
-   if (REG_P (x) && REGNO (x) >= FIRST_PSEUDO_REGISTER)
-     {
-       rtx t = get_reg_known_value (REGNO (x));
-       if (t == x)
- 	return x;
-       if (t)
- 	return canon_rtx (t);
-     }
- 
-   if (GET_CODE (x) == PLUS)
-     {
-       rtx x0 = canon_rtx (XEXP (x, 0));
-       rtx x1 = canon_rtx (XEXP (x, 1));
- 
-       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
- 	return simplify_gen_binary (PLUS, GET_MODE (x), x0, x1);
-     }
- 
-   /* This gives us much better alias analysis when called from
-      the loop optimizer.   Note we want to leave the original
-      MEM alone, but need to return the canonicalized MEM with
-      all the flags with their original values.  */
-   else if (MEM_P (x))
-     x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
- 
-   return x;
- }
- 
- /* Return 1 if X and Y are identical-looking rtx's.
-    Expect that X and Y has been already canonicalized.
- 
-    We use the data in reg_known_value above to see if two registers with
-    different numbers are, in fact, equivalent.  */
- 
- static int
- rtx_equal_for_memref_p (const_rtx x, const_rtx y)
- {
-   int i;
-   int j;
-   enum rtx_code code;
-   const char *fmt;
- 
-   if (x == 0 && y == 0)
-     return 1;
-   if (x == 0 || y == 0)
-     return 0;
- 
-   if (x == y)
-     return 1;
- 
-   code = GET_CODE (x);
-   /* Rtx's of different codes cannot be equal.  */
-   if (code != GET_CODE (y))
-     return 0;
- 
-   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
-      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
- 
-   if (GET_MODE (x) != GET_MODE (y))
-     return 0;
- 
-   /* Some RTL can be compared without a recursive examination.  */
-   switch (code)
-     {
-     case REG:
-       return REGNO (x) == REGNO (y);
- 
-     case LABEL_REF:
-       return label_ref_label (x) == label_ref_label (y);
- 
-     case SYMBOL_REF:
-       {
- 	HOST_WIDE_INT distance = 0;
- 	return (compare_base_symbol_refs (x, y, &distance) == 1
- 		&& distance == 0);
-       }
- 
-     case ENTRY_VALUE:
-       /* This is magic, don't go through canonicalization et al.  */
-       return rtx_equal_p (ENTRY_VALUE_EXP (x), ENTRY_VALUE_EXP (y));
- 
-     case VALUE:
-     CASE_CONST_UNIQUE:
-       /* Pointer equality guarantees equality for these nodes.  */
-       return 0;
- 
-     default:
-       break;
-     }
- 
-   /* canon_rtx knows how to handle plus.  No need to canonicalize.  */
-   if (code == PLUS)
-     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
- 	     && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
- 	    || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
- 		&& rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
-   /* For commutative operations, the RTX match if the operand match in any
-      order.  Also handle the simple binary and unary cases without a loop.  */
-   if (COMMUTATIVE_P (x))
-     {
-       rtx xop0 = canon_rtx (XEXP (x, 0));
-       rtx yop0 = canon_rtx (XEXP (y, 0));
-       rtx yop1 = canon_rtx (XEXP (y, 1));
- 
-       return ((rtx_equal_for_memref_p (xop0, yop0)
- 	       && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop1))
- 	      || (rtx_equal_for_memref_p (xop0, yop1)
- 		  && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop0)));
-     }
-   else if (NON_COMMUTATIVE_P (x))
-     {
-       return (rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
- 				      canon_rtx (XEXP (y, 0)))
- 	      && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)),
- 					 canon_rtx (XEXP (y, 1))));
-     }
-   else if (UNARY_P (x))
-     return rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
- 				   canon_rtx (XEXP (y, 0)));
- 
-   /* Compare the elements.  If any pair of corresponding elements
-      fail to match, return 0 for the whole things.
- 
-      Limit cases to types which actually appear in addresses.  */
- 
-   fmt = GET_RTX_FORMAT (code);
-   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-     {
-       switch (fmt[i])
- 	{
- 	case 'i':
- 	  if (XINT (x, i) != XINT (y, i))
- 	    return 0;
- 	  break;
- 
- 	case 'p':
- 	  if (maybe_ne (SUBREG_BYTE (x), SUBREG_BYTE (y)))
- 	    return 0;
- 	  break;
- 
- 	case 'E':
- 	  /* Two vectors must have the same length.  */
- 	  if (XVECLEN (x, i) != XVECLEN (y, i))
- 	    return 0;
- 
- 	  /* And the corresponding elements must match.  */
- 	  for (j = 0; j < XVECLEN (x, i); j++)
- 	    if (rtx_equal_for_memref_p (canon_rtx (XVECEXP (x, i, j)),
- 					canon_rtx (XVECEXP (y, i, j))) == 0)
- 	      return 0;
- 	  break;
- 
- 	case 'e':
- 	  if (rtx_equal_for_memref_p (canon_rtx (XEXP (x, i)),
- 				      canon_rtx (XEXP (y, i))) == 0)
- 	    return 0;
- 	  break;
- 
- 	  /* This can happen for asm operands.  */
- 	case 's':
- 	  if (strcmp (XSTR (x, i), XSTR (y, i)))
- 	    return 0;
- 	  break;
- 
- 	/* This can happen for an asm which clobbers memory.  */
- 	case '0':
- 	  break;
- 
- 	  /* It is believed that rtx's at this level will never
- 	     contain anything but integers and other rtx's,
- 	     except for within LABEL_REFs and SYMBOL_REFs.  */
- 	default:
- 	  gcc_unreachable ();
- 	}
-     }
-   return 1;
- }
- 
- static rtx
- find_base_term (rtx x, vec<std::pair<cselib_val *,
- 				     struct elt_loc_list *> > &visited_vals)
- {
-   cselib_val *val;
-   struct elt_loc_list *l, *f;
-   rtx ret;
-   scalar_int_mode int_mode;
- 
- #if defined (FIND_BASE_TERM)
-   /* Try machine-dependent ways to find the base term.  */
-   x = FIND_BASE_TERM (x);
- #endif
- 
-   switch (GET_CODE (x))
-     {
-     case REG:
-       return REG_BASE_VALUE (x);
- 
-     case TRUNCATE:
-       /* As we do not know which address space the pointer is referring to, we can
- 	 handle this only if the target does not support different pointer or
- 	 address modes depending on the address space.  */
-       if (!target_default_pointer_address_modes_p ())
- 	return 0;
-       if (!is_a <scalar_int_mode> (GET_MODE (x), &int_mode)
- 	  || GET_MODE_PRECISION (int_mode) < GET_MODE_PRECISION (Pmode))
- 	return 0;
-       /* Fall through.  */
-     case HIGH:
-     case PRE_INC:
-     case PRE_DEC:
-     case POST_INC:
-     case POST_DEC:
-     case PRE_MODIFY:
-     case POST_MODIFY:
-       return find_base_term (XEXP (x, 0), visited_vals);
- 
-     case ZERO_EXTEND:
-     case SIGN_EXTEND:	/* Used for Alpha/NT pointers */
-       /* As we do not know which address space the pointer is referring to, we can
- 	 handle this only if the target does not support different pointer or
- 	 address modes depending on the address space.  */
-       if (!target_default_pointer_address_modes_p ())
- 	return 0;
- 
-       {
- 	rtx temp = find_base_term (XEXP (x, 0), visited_vals);
- 
- 	if (temp != 0 && CONSTANT_P (temp))
- 	  temp = convert_memory_address (Pmode, temp);
- 
- 	return temp;
-       }
- 
-     case VALUE:
-       val = CSELIB_VAL_PTR (x);
-       ret = NULL_RTX;
- 
-       if (!val)
- 	return ret;
- 
-       if (cselib_sp_based_value_p (val))
- 	return static_reg_base_value[STACK_POINTER_REGNUM];
- 
-       if (visited_vals.length () > (unsigned) param_max_find_base_term_values)
- 	return ret;
- 
-       f = val->locs;
-       /* Reset val->locs to avoid infinite recursion.  */
-       if (f)
- 	visited_vals.safe_push (std::make_pair (val, f));
-       val->locs = NULL;
- 
-       for (l = f; l; l = l->next)
- 	if (GET_CODE (l->loc) == VALUE
- 	    && CSELIB_VAL_PTR (l->loc)->locs
- 	    && !CSELIB_VAL_PTR (l->loc)->locs->next
- 	    && CSELIB_VAL_PTR (l->loc)->locs->loc == x)
- 	  continue;
- 	else if ((ret = find_base_term (l->loc, visited_vals)) != 0)
- 	  break;
- 
-       return ret;
- 
-     case LO_SUM:
-       /* The standard form is (lo_sum reg sym) so look only at the
-          second operand.  */
-       return find_base_term (XEXP (x, 1), visited_vals);
- 
-     case CONST:
-       x = XEXP (x, 0);
-       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
- 	return 0;
-       /* Fall through.  */
-     case PLUS:
-     case MINUS:
-       {
- 	rtx tmp1 = XEXP (x, 0);
- 	rtx tmp2 = XEXP (x, 1);
- 
- 	/* This is a little bit tricky since we have to determine which of
- 	   the two operands represents the real base address.  Otherwise this
- 	   routine may return the index register instead of the base register.
- 
- 	   That may cause us to believe no aliasing was possible, when in
- 	   fact aliasing is possible.
- 
- 	   We use a few simple tests to guess the base register.  Additional
- 	   tests can certainly be added.  For example, if one of the operands
- 	   is a shift or multiply, then it must be the index register and the
- 	   other operand is the base register.  */
- 
- 	if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
- 	  return find_base_term (tmp2, visited_vals);
- 
- 	/* If either operand is known to be a pointer, then prefer it
- 	   to determine the base term.  */
- 	if (REG_P (tmp1) && REG_POINTER (tmp1))
- 	  ;
- 	else if (REG_P (tmp2) && REG_POINTER (tmp2))
- 	  std::swap (tmp1, tmp2);
- 	/* If second argument is constant which has base term, prefer it
- 	   over variable tmp1.  See PR64025.  */
- 	else if (CONSTANT_P (tmp2) && !CONST_INT_P (tmp2))
- 	  std::swap (tmp1, tmp2);
- 
- 	/* Go ahead and find the base term for both operands.  If either base
- 	   term is from a pointer or is a named object or a special address
- 	   (like an argument or stack reference), then use it for the
- 	   base term.  */
- 	rtx base = find_base_term (tmp1, visited_vals);
- 	if (base != NULL_RTX
- 	    && ((REG_P (tmp1) && REG_POINTER (tmp1))
- 		 || known_base_value_p (base)))
- 	  return base;
- 	base = find_base_term (tmp2, visited_vals);
- 	if (base != NULL_RTX
- 	    && ((REG_P (tmp2) && REG_POINTER (tmp2))
- 		 || known_base_value_p (base)))
- 	  return base;
- 
- 	/* We could not determine which of the two operands was the
- 	   base register and which was the index.  So we can determine
- 	   nothing from the base alias check.  */
- 	return 0;
-       }
- 
-     case AND:
-       /* Look through aligning ANDs.  And AND with zero or one with
-          the LSB set isn't one (see for example PR92462).  */
-       if (CONST_INT_P (XEXP (x, 1))
- 	  && INTVAL (XEXP (x, 1)) != 0
- 	  && (INTVAL (XEXP (x, 1)) & 1) == 0)
- 	return find_base_term (XEXP (x, 0), visited_vals);
-       return 0;
- 
-     case SYMBOL_REF:
-     case LABEL_REF:
-       return x;
- 
-     default:
-       return 0;
-     }
- }
- 
- /* Wrapper around the worker above which removes locs from visited VALUEs
-    to avoid visiting them multiple times.  We unwind that changes here.  */
- 
- static rtx
- find_base_term (rtx x)
- {
-   auto_vec<std::pair<cselib_val *, struct elt_loc_list *>, 32> visited_vals;
-   rtx res = find_base_term (x, visited_vals);
-   for (unsigned i = 0; i < visited_vals.length (); ++i)
-     visited_vals[i].first->locs = visited_vals[i].second;
-   return res;
- }
- 
- /* Return true if accesses to address X may alias accesses based
-    on the stack pointer.  */
- 
- bool
- may_be_sp_based_p (rtx x)
- {
-   rtx base = find_base_term (x);
-   return !base || base == static_reg_base_value[STACK_POINTER_REGNUM];
- }
- 
- /* BASE1 and BASE2 are decls.  Return 1 if they refer to same object, 0
-    if they refer to different objects and -1 if we cannot decide.  */
- 
- int
- compare_base_decls (tree base1, tree base2)
- {
-   int ret;
-   gcc_checking_assert (DECL_P (base1) && DECL_P (base2));
-   if (base1 == base2)
-     return 1;
- 
-   /* If we have two register decls with register specification we
-      cannot decide unless their assembler names are the same.  */
-   if (VAR_P (base1)
-       && VAR_P (base2)
-       && DECL_HARD_REGISTER (base1)
-       && DECL_HARD_REGISTER (base2)
-       && DECL_ASSEMBLER_NAME_SET_P (base1)
-       && DECL_ASSEMBLER_NAME_SET_P (base2))
-     {
-       if (DECL_ASSEMBLER_NAME_RAW (base1) == DECL_ASSEMBLER_NAME_RAW (base2))
- 	return 1;
-       return -1;
-     }
- 
-   /* Declarations of non-automatic variables may have aliases.  All other
-      decls are unique.  */
-   if (!decl_in_symtab_p (base1)
-       || !decl_in_symtab_p (base2))
-     return 0;
- 
-   /* Don't cause symbols to be inserted by the act of checking.  */
-   symtab_node *node1 = symtab_node::get (base1);
-   if (!node1)
-     return 0;
-   symtab_node *node2 = symtab_node::get (base2);
-   if (!node2)
-     return 0;
-   
-   ret = node1->equal_address_to (node2, true);
-   return ret;
- }
- 
- /* Compare SYMBOL_REFs X_BASE and Y_BASE.
- 
-    - Return 1 if Y_BASE - X_BASE is constant, adding that constant
-      to *DISTANCE if DISTANCE is nonnull.
- 
-    - Return 0 if no accesses based on X_BASE can alias Y_BASE.
- 
-    - Return -1 if one of the two results applies, but we can't tell
-      which at compile time.  Update DISTANCE in the same way as
-      for a return value of 1, for the case in which that holds.  */
- 
- static int
- compare_base_symbol_refs (const_rtx x_base, const_rtx y_base,
- 			  HOST_WIDE_INT *distance)
- {
-   tree x_decl = SYMBOL_REF_DECL (x_base);
-   tree y_decl = SYMBOL_REF_DECL (y_base);
-   bool binds_def = true;
- 
-   if (XSTR (x_base, 0) == XSTR (y_base, 0))
-     return 1;
-   if (x_decl && y_decl)
-     return compare_base_decls (x_decl, y_decl);
-   if (x_decl || y_decl)
-     {
-       if (!x_decl)
- 	{
- 	  std::swap (x_decl, y_decl);
- 	  std::swap (x_base, y_base);
- 	}
-       /* We handle specially only section anchors.  Other symbols are
- 	 either equal (via aliasing) or refer to different objects.  */
-       if (!SYMBOL_REF_HAS_BLOCK_INFO_P (y_base))
-         return -1;
-       /* Anchors contains static VAR_DECLs and CONST_DECLs.  We are safe
- 	 to ignore CONST_DECLs because they are readonly.  */
-       if (!VAR_P (x_decl)
- 	  || (!TREE_STATIC (x_decl) && !TREE_PUBLIC (x_decl)))
- 	return 0;
- 
-       symtab_node *x_node = symtab_node::get_create (x_decl)
- 			    ->ultimate_alias_target ();
-       /* External variable cannot be in section anchor.  */
-       if (!x_node->definition)
- 	return 0;
-       x_base = XEXP (DECL_RTL (x_node->decl), 0);
-       /* If not in anchor, we can disambiguate.  */
-       if (!SYMBOL_REF_HAS_BLOCK_INFO_P (x_base))
- 	return 0;
- 
-       /* We have an alias of anchored variable.  If it can be interposed;
-  	 we must assume it may or may not alias its anchor.  */
-       binds_def = decl_binds_to_current_def_p (x_decl);
-     }
-   /* If we have variable in section anchor, we can compare by offset.  */
-   if (SYMBOL_REF_HAS_BLOCK_INFO_P (x_base)
-       && SYMBOL_REF_HAS_BLOCK_INFO_P (y_base))
-     {
-       if (SYMBOL_REF_BLOCK (x_base) != SYMBOL_REF_BLOCK (y_base))
- 	return 0;
-       if (distance)
- 	*distance += (SYMBOL_REF_BLOCK_OFFSET (y_base)
- 		      - SYMBOL_REF_BLOCK_OFFSET (x_base));
-       return binds_def ? 1 : -1;
-     }
-   /* Either the symbols are equal (via aliasing) or they refer to
-      different objects.  */
-   return -1;
- }
- 
- /* Return 0 if the addresses X and Y are known to point to different
-    objects, 1 if they might be pointers to the same object.  */
- 
- static int
- base_alias_check (rtx x, rtx x_base, rtx y, rtx y_base,
- 		  machine_mode x_mode, machine_mode y_mode)
- {
-   /* If the address itself has no known base see if a known equivalent
-      value has one.  If either address still has no known base, nothing
-      is known about aliasing.  */
-   if (x_base == 0)
-     {
-       rtx x_c;
- 
-       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
- 	return 1;
- 
-       x_base = find_base_term (x_c);
-       if (x_base == 0)
- 	return 1;
-     }
- 
-   if (y_base == 0)
-     {
-       rtx y_c;
-       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
- 	return 1;
- 
-       y_base = find_base_term (y_c);
-       if (y_base == 0)
- 	return 1;
-     }
- 
-   /* If the base addresses are equal nothing is known about aliasing.  */
-   if (rtx_equal_p (x_base, y_base))
-     return 1;
- 
-   /* The base addresses are different expressions.  If they are not accessed
-      via AND, there is no conflict.  We can bring knowledge of object
-      alignment into play here.  For example, on alpha, "char a, b;" can
-      alias one another, though "char a; long b;" cannot.  AND addresses may
-      implicitly alias surrounding objects; i.e. unaligned access in DImode
-      via AND address can alias all surrounding object types except those
-      with aligment 8 or higher.  */
-   if (GET_CODE (x) == AND && GET_CODE (y) == AND)
-     return 1;
-   if (GET_CODE (x) == AND
-       && (!CONST_INT_P (XEXP (x, 1))
- 	  || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
-     return 1;
-   if (GET_CODE (y) == AND
-       && (!CONST_INT_P (XEXP (y, 1))
- 	  || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
-     return 1;
- 
-   /* Differing symbols not accessed via AND never alias.  */
-   if (GET_CODE (x_base) == SYMBOL_REF && GET_CODE (y_base) == SYMBOL_REF)
-     return compare_base_symbol_refs (x_base, y_base) != 0;
- 
-   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
-     return 0;
- 
-   if (unique_base_value_p (x_base) || unique_base_value_p (y_base))
-     return 0;
- 
-   return 1;
- }
- 
- /* Return TRUE if EXPR refers to a VALUE whose uid is greater than
-    (or equal to) that of V.  */
- 
- static bool
- refs_newer_value_p (const_rtx expr, rtx v)
- {
-   int minuid = CSELIB_VAL_PTR (v)->uid;
-   subrtx_iterator::array_type array;
-   FOR_EACH_SUBRTX (iter, array, expr, NONCONST)
-     if (GET_CODE (*iter) == VALUE && CSELIB_VAL_PTR (*iter)->uid >= minuid)
-       return true;
-   return false;
- }
- 
- /* Convert the address X into something we can use.  This is done by returning
-    it unchanged unless it is a VALUE or VALUE +/- constant; for VALUE
-    we call cselib to get a more useful rtx.  */
- 
- rtx
- get_addr (rtx x)
- {
-   cselib_val *v;
-   struct elt_loc_list *l;
- 
-   if (GET_CODE (x) != VALUE)
-     {
-       if ((GET_CODE (x) == PLUS || GET_CODE (x) == MINUS)
- 	  && GET_CODE (XEXP (x, 0)) == VALUE
- 	  && CONST_SCALAR_INT_P (XEXP (x, 1)))
- 	{
- 	  rtx op0 = get_addr (XEXP (x, 0));
- 	  if (op0 != XEXP (x, 0))
- 	    {
- 	      poly_int64 c;
- 	      if (GET_CODE (x) == PLUS
- 		  && poly_int_rtx_p (XEXP (x, 1), &c))
- 		return plus_constant (GET_MODE (x), op0, c);
- 	      return simplify_gen_binary (GET_CODE (x), GET_MODE (x),
- 					  op0, XEXP (x, 1));
- 	    }
- 	}
-       return x;
-     }
-   v = CSELIB_VAL_PTR (x);
-   if (v)
-     {
-       bool have_equivs = cselib_have_permanent_equivalences ();
-       if (have_equivs)
- 	v = canonical_cselib_val (v);
-       for (l = v->locs; l; l = l->next)
- 	if (CONSTANT_P (l->loc))
- 	  return l->loc;
-       for (l = v->locs; l; l = l->next)
- 	if (!REG_P (l->loc) && !MEM_P (l->loc)
- 	    /* Avoid infinite recursion when potentially dealing with
- 	       var-tracking artificial equivalences, by skipping the
- 	       equivalences themselves, and not choosing expressions
- 	       that refer to newer VALUEs.  */
- 	    && (!have_equivs
- 		|| (GET_CODE (l->loc) != VALUE
- 		    && !refs_newer_value_p (l->loc, x))))
- 	  return l->loc;
-       if (have_equivs)
- 	{
- 	  for (l = v->locs; l; l = l->next)
- 	    if (REG_P (l->loc)
- 		|| (GET_CODE (l->loc) != VALUE
- 		    && !refs_newer_value_p (l->loc, x)))
- 	      return l->loc;
- 	  /* Return the canonical value.  */
- 	  return v->val_rtx;
- 	}
-       if (v->locs)
- 	return v->locs->loc;
-     }
-   return x;
- }
- 
- /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
-     where SIZE is the size in bytes of the memory reference.  If ADDR
-     is not modified by the memory reference then ADDR is returned.  */
- 
- static rtx
- addr_side_effect_eval (rtx addr, poly_int64 size, int n_refs)
- {
-   poly_int64 offset = 0;
- 
-   switch (GET_CODE (addr))
-     {
-     case PRE_INC:
-       offset = (n_refs + 1) * size;
-       break;
-     case PRE_DEC:
-       offset = -(n_refs + 1) * size;
-       break;
-     case POST_INC:
-       offset = n_refs * size;
-       break;
-     case POST_DEC:
-       offset = -n_refs * size;
-       break;
- 
-     default:
-       return addr;
-     }
- 
-   addr = plus_constant (GET_MODE (addr), XEXP (addr, 0), offset);
-   addr = canon_rtx (addr);
- 
-   return addr;
- }
- 
- /* Return TRUE if an object X sized at XSIZE bytes and another object
-    Y sized at YSIZE bytes, starting C bytes after X, may overlap.  If
-    any of the sizes is zero, assume an overlap, otherwise use the
-    absolute value of the sizes as the actual sizes.  */
- 
- static inline bool
- offset_overlap_p (poly_int64 c, poly_int64 xsize, poly_int64 ysize)
- {
-   if (known_eq (xsize, 0) || known_eq (ysize, 0))
-     return true;
- 
-   if (maybe_ge (c, 0))
-     return maybe_gt (maybe_lt (xsize, 0) ? -xsize : xsize, c);
-   else
-     return maybe_gt (maybe_lt (ysize, 0) ? -ysize : ysize, -c);
- }
- 
- /* Return one if X and Y (memory addresses) reference the
-    same location in memory or if the references overlap.
-    Return zero if they do not overlap, else return
-    minus one in which case they still might reference the same location.
- 
-    C is an offset accumulator.  When
-    C is nonzero, we are testing aliases between X and Y + C.
-    XSIZE is the size in bytes of the X reference,
-    similarly YSIZE is the size in bytes for Y.
-    Expect that canon_rtx has been already called for X and Y.
- 
-    If XSIZE or YSIZE is zero, we do not know the amount of memory being
-    referenced (the reference was BLKmode), so make the most pessimistic
-    assumptions.
- 
-    If XSIZE or YSIZE is negative, we may access memory outside the object
-    being referenced as a side effect.  This can happen when using AND to
-    align memory references, as is done on the Alpha.
- 
-    Nice to notice that varying addresses cannot conflict with fp if no
-    local variables had their addresses taken, but that's too hard now.
- 
-    ???  Contrary to the tree alias oracle this does not return
-    one for X + non-constant and Y + non-constant when X and Y are equal.
-    If that is fixed the TBAA hack for union type-punning can be removed.  */
- 
- static int
- memrefs_conflict_p (poly_int64 xsize, rtx x, poly_int64 ysize, rtx y,
- 		    poly_int64 c)
- {
-   if (GET_CODE (x) == VALUE)
-     {
-       if (REG_P (y))
- 	{
- 	  struct elt_loc_list *l = NULL;
- 	  if (CSELIB_VAL_PTR (x))
- 	    for (l = canonical_cselib_val (CSELIB_VAL_PTR (x))->locs;
- 		 l; l = l->next)
- 	      if (REG_P (l->loc) && rtx_equal_for_memref_p (l->loc, y))
- 		break;
- 	  if (l)
- 	    x = y;
- 	  else
- 	    x = get_addr (x);
- 	}
-       /* Don't call get_addr if y is the same VALUE.  */
-       else if (x != y)
- 	x = get_addr (x);
-     }
-   if (GET_CODE (y) == VALUE)
-     {
-       if (REG_P (x))
- 	{
- 	  struct elt_loc_list *l = NULL;
- 	  if (CSELIB_VAL_PTR (y))
- 	    for (l = canonical_cselib_val (CSELIB_VAL_PTR (y))->locs;
- 		 l; l = l->next)
- 	      if (REG_P (l->loc) && rtx_equal_for_memref_p (l->loc, x))
- 		break;
- 	  if (l)
- 	    y = x;
- 	  else
- 	    y = get_addr (y);
- 	}
-       /* Don't call get_addr if x is the same VALUE.  */
-       else if (y != x)
- 	y = get_addr (y);
-     }
-   if (GET_CODE (x) == HIGH)
-     x = XEXP (x, 0);
-   else if (GET_CODE (x) == LO_SUM)
-     x = XEXP (x, 1);
-   else
-     x = addr_side_effect_eval (x, maybe_lt (xsize, 0) ? -xsize : xsize, 0);
-   if (GET_CODE (y) == HIGH)
-     y = XEXP (y, 0);
-   else if (GET_CODE (y) == LO_SUM)
-     y = XEXP (y, 1);
-   else
-     y = addr_side_effect_eval (y, maybe_lt (ysize, 0) ? -ysize : ysize, 0);
- 
-   if (GET_CODE (x) == SYMBOL_REF && GET_CODE (y) == SYMBOL_REF)
-     {
-       HOST_WIDE_INT distance = 0;
-       int cmp = compare_base_symbol_refs (x, y, &distance);
- 
-       /* If both decls are the same, decide by offsets.  */
-       if (cmp == 1)
- 	return offset_overlap_p (c + distance, xsize, ysize);
-       /* Assume a potential overlap for symbolic addresses that went
- 	 through alignment adjustments (i.e., that have negative
- 	 sizes), because we can't know how far they are from each
- 	 other.  */
-       if (maybe_lt (xsize, 0) || maybe_lt (ysize, 0))
- 	return -1;
-       /* If decls are different or we know by offsets that there is no overlap,
- 	 we win.  */
-       if (!cmp || !offset_overlap_p (c + distance, xsize, ysize))
- 	return 0;
-       /* Decls may or may not be different and offsets overlap....*/
-       return -1;
-     }
-   else if (rtx_equal_for_memref_p (x, y))
-     {
-       return offset_overlap_p (c, xsize, ysize);
-     }
- 
-   /* This code used to check for conflicts involving stack references and
-      globals but the base address alias code now handles these cases.  */
- 
-   if (GET_CODE (x) == PLUS)
-     {
-       /* The fact that X is canonicalized means that this
- 	 PLUS rtx is canonicalized.  */
-       rtx x0 = XEXP (x, 0);
-       rtx x1 = XEXP (x, 1);
- 
-       /* However, VALUEs might end up in different positions even in
- 	 canonical PLUSes.  Comparing their addresses is enough.  */
-       if (x0 == y)
- 	return memrefs_conflict_p (xsize, x1, ysize, const0_rtx, c);
-       else if (x1 == y)
- 	return memrefs_conflict_p (xsize, x0, ysize, const0_rtx, c);
- 
-       poly_int64 cx1, cy1;
-       if (GET_CODE (y) == PLUS)
- 	{
- 	  /* The fact that Y is canonicalized means that this
- 	     PLUS rtx is canonicalized.  */
- 	  rtx y0 = XEXP (y, 0);
- 	  rtx y1 = XEXP (y, 1);
- 
- 	  if (x0 == y1)
- 	    return memrefs_conflict_p (xsize, x1, ysize, y0, c);
- 	  if (x1 == y0)
- 	    return memrefs_conflict_p (xsize, x0, ysize, y1, c);
- 
- 	  if (rtx_equal_for_memref_p (x1, y1))
- 	    return memrefs_conflict_p (xsize, x0, ysize, y0, c);
- 	  if (rtx_equal_for_memref_p (x0, y0))
- 	    return memrefs_conflict_p (xsize, x1, ysize, y1, c);
- 	  if (poly_int_rtx_p (x1, &cx1))
- 	    {
- 	      if (poly_int_rtx_p (y1, &cy1))
- 		return memrefs_conflict_p (xsize, x0, ysize, y0,
- 					   c - cx1 + cy1);
- 	      else
- 		return memrefs_conflict_p (xsize, x0, ysize, y, c - cx1);
- 	    }
- 	  else if (poly_int_rtx_p (y1, &cy1))
- 	    return memrefs_conflict_p (xsize, x, ysize, y0, c + cy1);
- 
- 	  return -1;
- 	}
-       else if (poly_int_rtx_p (x1, &cx1))
- 	return memrefs_conflict_p (xsize, x0, ysize, y, c - cx1);
-     }
-   else if (GET_CODE (y) == PLUS)
-     {
-       /* The fact that Y is canonicalized means that this
- 	 PLUS rtx is canonicalized.  */
-       rtx y0 = XEXP (y, 0);
-       rtx y1 = XEXP (y, 1);
- 
-       if (x == y0)
- 	return memrefs_conflict_p (xsize, const0_rtx, ysize, y1, c);
-       if (x == y1)
- 	return memrefs_conflict_p (xsize, const0_rtx, ysize, y0, c);
- 
-       poly_int64 cy1;
-       if (poly_int_rtx_p (y1, &cy1))
- 	return memrefs_conflict_p (xsize, x, ysize, y0, c + cy1);
-       else
- 	return -1;
-     }
- 
-   if (GET_CODE (x) == GET_CODE (y))
-     switch (GET_CODE (x))
-       {
-       case MULT:
- 	{
- 	  /* Handle cases where we expect the second operands to be the
- 	     same, and check only whether the first operand would conflict
- 	     or not.  */
- 	  rtx x0, y0;
- 	  rtx x1 = canon_rtx (XEXP (x, 1));
- 	  rtx y1 = canon_rtx (XEXP (y, 1));
- 	  if (! rtx_equal_for_memref_p (x1, y1))
- 	    return -1;
- 	  x0 = canon_rtx (XEXP (x, 0));
- 	  y0 = canon_rtx (XEXP (y, 0));
- 	  if (rtx_equal_for_memref_p (x0, y0))
- 	    return offset_overlap_p (c, xsize, ysize);
- 
- 	  /* Can't properly adjust our sizes.  */
- 	  poly_int64 c1;
- 	  if (!poly_int_rtx_p (x1, &c1)
- 	      || !can_div_trunc_p (xsize, c1, &xsize)
- 	      || !can_div_trunc_p (ysize, c1, &ysize)
- 	      || !can_div_trunc_p (c, c1, &c))
- 	    return -1;
- 	  return memrefs_conflict_p (xsize, x0, ysize, y0, c);
- 	}
- 
-       default:
- 	break;
-       }
- 
-   /* Deal with alignment ANDs by adjusting offset and size so as to
-      cover the maximum range, without taking any previously known
-      alignment into account.  Make a size negative after such an
-      adjustments, so that, if we end up with e.g. two SYMBOL_REFs, we
-      assume a potential overlap, because they may end up in contiguous
-      memory locations and the stricter-alignment access may span over
-      part of both.  */
-   if (GET_CODE (x) == AND && CONST_INT_P (XEXP (x, 1)))
-     {
-       HOST_WIDE_INT sc = INTVAL (XEXP (x, 1));
-       unsigned HOST_WIDE_INT uc = sc;
-       if (sc < 0 && pow2_or_zerop (-uc))
- 	{
- 	  if (maybe_gt (xsize, 0))
- 	    xsize = -xsize;
- 	  if (maybe_ne (xsize, 0))
- 	    xsize += sc + 1;
- 	  c -= sc + 1;
- 	  return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
- 				     ysize, y, c);
- 	}
-     }
-   if (GET_CODE (y) == AND && CONST_INT_P (XEXP (y, 1)))
-     {
-       HOST_WIDE_INT sc = INTVAL (XEXP (y, 1));
-       unsigned HOST_WIDE_INT uc = sc;
-       if (sc < 0 && pow2_or_zerop (-uc))
- 	{
- 	  if (maybe_gt (ysize, 0))
- 	    ysize = -ysize;
- 	  if (maybe_ne (ysize, 0))
- 	    ysize += sc + 1;
- 	  c += sc + 1;
- 	  return memrefs_conflict_p (xsize, x,
- 				     ysize, canon_rtx (XEXP (y, 0)), c);
- 	}
-     }
- 
-   if (CONSTANT_P (x))
-     {
-       poly_int64 cx, cy;
-       if (poly_int_rtx_p (x, &cx) && poly_int_rtx_p (y, &cy))
- 	{
- 	  c += cy - cx;
- 	  return offset_overlap_p (c, xsize, ysize);
- 	}
- 
-       if (GET_CODE (x) == CONST)
- 	{
- 	  if (GET_CODE (y) == CONST)
- 	    return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
- 				       ysize, canon_rtx (XEXP (y, 0)), c);
- 	  else
- 	    return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
- 				       ysize, y, c);
- 	}
-       if (GET_CODE (y) == CONST)
- 	return memrefs_conflict_p (xsize, x, ysize,
- 				   canon_rtx (XEXP (y, 0)), c);
- 
-       /* Assume a potential overlap for symbolic addresses that went
- 	 through alignment adjustments (i.e., that have negative
- 	 sizes), because we can't know how far they are from each
- 	 other.  */
-       if (CONSTANT_P (y))
- 	return (maybe_lt (xsize, 0)
- 		|| maybe_lt (ysize, 0)
- 		|| offset_overlap_p (c, xsize, ysize));
- 
-       return -1;
-     }
- 
-   return -1;
- }
- 
- /* Functions to compute memory dependencies.
- 
-    Since we process the insns in execution order, we can build tables
-    to keep track of what registers are fixed (and not aliased), what registers
-    are varying in known ways, and what registers are varying in unknown
-    ways.
- 
-    If both memory references are volatile, then there must always be a
-    dependence between the two references, since their order cannot be
-    changed.  A volatile and non-volatile reference can be interchanged
-    though.
- 
-    We also must allow AND addresses, because they may generate accesses
-    outside the object being referenced.  This is used to generate aligned
-    addresses from unaligned addresses, for instance, the alpha
-    storeqi_unaligned pattern.  */
- 
- /* Read dependence: X is read after read in MEM takes place.  There can
-    only be a dependence here if both reads are volatile, or if either is
-    an explicit barrier.  */
- 
- int
- read_dependence (const_rtx mem, const_rtx x)
- {
-   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-     return true;
-   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
-       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
-     return true;
-   return false;
- }
- 
- /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it.  */
- 
- static tree
- decl_for_component_ref (tree x)
- {
-   do
-     {
-       x = TREE_OPERAND (x, 0);
-     }
-   while (x && TREE_CODE (x) == COMPONENT_REF);
- 
-   return x && DECL_P (x) ? x : NULL_TREE;
- }
- 
- /* Walk up the COMPONENT_REF list in X and adjust *OFFSET to compensate
-    for the offset of the field reference.  *KNOWN_P says whether the
-    offset is known.  */
- 
- static void
- adjust_offset_for_component_ref (tree x, bool *known_p,
- 				 poly_int64 *offset)
- {
-   if (!*known_p)
-     return;
-   do
-     {
-       tree xoffset = component_ref_field_offset (x);
-       tree field = TREE_OPERAND (x, 1);
-       if (!poly_int_tree_p (xoffset))
- 	{
- 	  *known_p = false;
- 	  return;
- 	}
- 
-       poly_offset_int woffset
- 	= (wi::to_poly_offset (xoffset)
- 	   + (wi::to_offset (DECL_FIELD_BIT_OFFSET (field))
- 	      >> LOG2_BITS_PER_UNIT)
- 	   + *offset);
-       if (!woffset.to_shwi (offset))
- 	{
- 	  *known_p = false;
- 	  return;
- 	}
- 
-       x = TREE_OPERAND (x, 0);
-     }
-   while (x && TREE_CODE (x) == COMPONENT_REF);
- }
- 
- /* Return nonzero if we can determine the exprs corresponding to memrefs
-    X and Y and they do not overlap. 
-    If LOOP_VARIANT is set, skip offset-based disambiguation */
- 
- int
- nonoverlapping_memrefs_p (const_rtx x, const_rtx y, bool loop_invariant)
- {
-   tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
-   rtx rtlx, rtly;
-   rtx basex, basey;
-   bool moffsetx_known_p, moffsety_known_p;
-   poly_int64 moffsetx = 0, moffsety = 0;
-   poly_int64 offsetx = 0, offsety = 0, sizex, sizey;
- 
-   /* Unless both have exprs, we can't tell anything.  */
-   if (exprx == 0 || expry == 0)
-     return 0;
- 
-   /* For spill-slot accesses make sure we have valid offsets.  */
-   if ((exprx == get_spill_slot_decl (false)
-        && ! MEM_OFFSET_KNOWN_P (x))
-       || (expry == get_spill_slot_decl (false)
- 	  && ! MEM_OFFSET_KNOWN_P (y)))
-     return 0;
- 
-   /* If the field reference test failed, look at the DECLs involved.  */
-   moffsetx_known_p = MEM_OFFSET_KNOWN_P (x);
-   if (moffsetx_known_p)
-     moffsetx = MEM_OFFSET (x);
-   if (TREE_CODE (exprx) == COMPONENT_REF)
-     {
-       tree t = decl_for_component_ref (exprx);
-       if (! t)
- 	return 0;
-       adjust_offset_for_component_ref (exprx, &moffsetx_known_p, &moffsetx);
-       exprx = t;
-     }
- 
-   moffsety_known_p = MEM_OFFSET_KNOWN_P (y);
-   if (moffsety_known_p)
-     moffsety = MEM_OFFSET (y);
-   if (TREE_CODE (expry) == COMPONENT_REF)
-     {
-       tree t = decl_for_component_ref (expry);
-       if (! t)
- 	return 0;
-       adjust_offset_for_component_ref (expry, &moffsety_known_p, &moffsety);
-       expry = t;
-     }
- 
-   if (! DECL_P (exprx) || ! DECL_P (expry))
-     return 0;
- 
-   /* If we refer to different gimple registers, or one gimple register
-      and one non-gimple-register, we know they can't overlap.  First,
-      gimple registers don't have their addresses taken.  Now, there
-      could be more than one stack slot for (different versions of) the
-      same gimple register, but we can presumably tell they don't
-      overlap based on offsets from stack base addresses elsewhere.
-      It's important that we don't proceed to DECL_RTL, because gimple
-      registers may not pass DECL_RTL_SET_P, and make_decl_rtl won't be
-      able to do anything about them since no SSA information will have
-      remained to guide it.  */
-   if (is_gimple_reg (exprx) || is_gimple_reg (expry))
-     return exprx != expry
-       || (moffsetx_known_p && moffsety_known_p
- 	  && MEM_SIZE_KNOWN_P (x) && MEM_SIZE_KNOWN_P (y)
- 	  && !offset_overlap_p (moffsety - moffsetx,
- 				MEM_SIZE (x), MEM_SIZE (y)));
- 
-   /* With invalid code we can end up storing into the constant pool.
-      Bail out to avoid ICEing when creating RTL for this.
-      See gfortran.dg/lto/20091028-2_0.f90.  */
-   if (TREE_CODE (exprx) == CONST_DECL
-       || TREE_CODE (expry) == CONST_DECL)
-     return 1;
- 
-   /* If one decl is known to be a function or label in a function and
-      the other is some kind of data, they can't overlap.  */
-   if ((TREE_CODE (exprx) == FUNCTION_DECL
-        || TREE_CODE (exprx) == LABEL_DECL)
-       != (TREE_CODE (expry) == FUNCTION_DECL
- 	  || TREE_CODE (expry) == LABEL_DECL))
-     return 1;
- 
-   /* If either of the decls doesn't have DECL_RTL set (e.g. marked as
-      living in multiple places), we can't tell anything.  Exception
-      are FUNCTION_DECLs for which we can create DECL_RTL on demand.  */
-   if ((!DECL_RTL_SET_P (exprx) && TREE_CODE (exprx) != FUNCTION_DECL)
-       || (!DECL_RTL_SET_P (expry) && TREE_CODE (expry) != FUNCTION_DECL))
-     return 0;
- 
-   rtlx = DECL_RTL (exprx);
-   rtly = DECL_RTL (expry);
- 
-   /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
-      can't overlap unless they are the same because we never reuse that part
-      of the stack frame used for locals for spilled pseudos.  */
-   if ((!MEM_P (rtlx) || !MEM_P (rtly))
-       && ! rtx_equal_p (rtlx, rtly))
-     return 1;
- 
-   /* If we have MEMs referring to different address spaces (which can
-      potentially overlap), we cannot easily tell from the addresses
-      whether the references overlap.  */
-   if (MEM_P (rtlx) && MEM_P (rtly)
-       && MEM_ADDR_SPACE (rtlx) != MEM_ADDR_SPACE (rtly))
-     return 0;
- 
-   /* Get the base and offsets of both decls.  If either is a register, we
-      know both are and are the same, so use that as the base.  The only
-      we can avoid overlap is if we can deduce that they are nonoverlapping
-      pieces of that decl, which is very rare.  */
-   basex = MEM_P (rtlx) ? XEXP (rtlx, 0) : rtlx;
-   basex = strip_offset_and_add (basex, &offsetx);
- 
-   basey = MEM_P (rtly) ? XEXP (rtly, 0) : rtly;
-   basey = strip_offset_and_add (basey, &offsety);
- 
-   /* If the bases are different, we know they do not overlap if both
-      are constants or if one is a constant and the other a pointer into the
-      stack frame.  Otherwise a different base means we can't tell if they
-      overlap or not.  */
-   if (compare_base_decls (exprx, expry) == 0)
-     return ((CONSTANT_P (basex) && CONSTANT_P (basey))
- 	    || (CONSTANT_P (basex) && REG_P (basey)
- 		&& REGNO_PTR_FRAME_P (REGNO (basey)))
- 	    || (CONSTANT_P (basey) && REG_P (basex)
- 		&& REGNO_PTR_FRAME_P (REGNO (basex))));
- 
-   /* Offset based disambiguation not appropriate for loop invariant */
-   if (loop_invariant)
-     return 0;
- 
-   /* Offset based disambiguation is OK even if we do not know that the
-      declarations are necessarily different
-     (i.e. compare_base_decls (exprx, expry) == -1)  */
- 
-   sizex = (!MEM_P (rtlx) ? poly_int64 (GET_MODE_SIZE (GET_MODE (rtlx)))
- 	   : MEM_SIZE_KNOWN_P (rtlx) ? MEM_SIZE (rtlx)
- 	   : -1);
-   sizey = (!MEM_P (rtly) ? poly_int64 (GET_MODE_SIZE (GET_MODE (rtly)))
- 	   : MEM_SIZE_KNOWN_P (rtly) ? MEM_SIZE (rtly)
- 	   : -1);
- 
-   /* If we have an offset for either memref, it can update the values computed
-      above.  */
-   if (moffsetx_known_p)
-     offsetx += moffsetx, sizex -= moffsetx;
-   if (moffsety_known_p)
-     offsety += moffsety, sizey -= moffsety;
- 
-   /* If a memref has both a size and an offset, we can use the smaller size.
-      We can't do this if the offset isn't known because we must view this
-      memref as being anywhere inside the DECL's MEM.  */
-   if (MEM_SIZE_KNOWN_P (x) && moffsetx_known_p)
-     sizex = MEM_SIZE (x);
-   if (MEM_SIZE_KNOWN_P (y) && moffsety_known_p)
-     sizey = MEM_SIZE (y);
- 
-   return !ranges_maybe_overlap_p (offsetx, sizex, offsety, sizey);
- }
- 
- /* Helper for true_dependence and canon_true_dependence.
-    Checks for true dependence: X is read after store in MEM takes place.
- 
-    If MEM_CANONICALIZED is FALSE, then X_ADDR and MEM_ADDR should be
-    NULL_RTX, and the canonical addresses of MEM and X are both computed
-    here.  If MEM_CANONICALIZED, then MEM must be already canonicalized.
- 
-    If X_ADDR is non-NULL, it is used in preference of XEXP (x, 0).
- 
-    Returns 1 if there is a true dependence, 0 otherwise.  */
- 
- static int
- true_dependence_1 (const_rtx mem, machine_mode mem_mode, rtx mem_addr,
- 		   const_rtx x, rtx x_addr, bool mem_canonicalized)
- {
-   rtx true_mem_addr;
-   rtx base;
-   int ret;
- 
-   gcc_checking_assert (mem_canonicalized ? (mem_addr != NULL_RTX)
- 		       : (mem_addr == NULL_RTX && x_addr == NULL_RTX));
- 
-   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-     return 1;
- 
-   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
-      This is used in epilogue deallocation functions, and in cselib.  */
-   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
-     return 1;
-   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
-     return 1;
-   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
-       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
-     return 1;
- 
-   if (! x_addr)
-     x_addr = XEXP (x, 0);
-   x_addr = get_addr (x_addr);
- 
-   if (! mem_addr)
-     {
-       mem_addr = XEXP (mem, 0);
-       if (mem_mode == VOIDmode)
- 	mem_mode = GET_MODE (mem);
-     }
-   true_mem_addr = get_addr (mem_addr);
- 
-   /* Read-only memory is by definition never modified, and therefore can't
-      conflict with anything.  However, don't assume anything when AND
-      addresses are involved and leave to the code below to determine
-      dependence.  We don't expect to find read-only set on MEM, but
-      stupid user tricks can produce them, so don't die.  */
-   if (MEM_READONLY_P (x)
-       && GET_CODE (x_addr) != AND
-       && GET_CODE (true_mem_addr) != AND)
-     return 0;
- 
-   /* If we have MEMs referring to different address spaces (which can
-      potentially overlap), we cannot easily tell from the addresses
-      whether the references overlap.  */
-   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
-     return 1;
- 
-   base = find_base_term (x_addr);
-   if (base && (GET_CODE (base) == LABEL_REF
- 	       || (GET_CODE (base) == SYMBOL_REF
- 		   && CONSTANT_POOL_ADDRESS_P (base))))
-     return 0;
- 
-   rtx mem_base = find_base_term (true_mem_addr);
-   if (! base_alias_check (x_addr, base, true_mem_addr, mem_base,
- 			  GET_MODE (x), mem_mode))
-     return 0;
- 
-   x_addr = canon_rtx (x_addr);
-   if (!mem_canonicalized)
-     mem_addr = canon_rtx (true_mem_addr);
- 
-   if ((ret = memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
- 				 SIZE_FOR_MODE (x), x_addr, 0)) != -1)
-     return ret;
- 
-   if (mems_in_disjoint_alias_sets_p (x, mem))
-     return 0;
- 
-   if (nonoverlapping_memrefs_p (mem, x, false))
-     return 0;
- 
-   return rtx_refs_may_alias_p (x, mem, true);
- }
- 
- /* True dependence: X is read after store in MEM takes place.  */
- 
- int
- true_dependence (const_rtx mem, machine_mode mem_mode, const_rtx x)
- {
-   return true_dependence_1 (mem, mem_mode, NULL_RTX,
- 			    x, NULL_RTX, /*mem_canonicalized=*/false);
- }
- 
- /* Canonical true dependence: X is read after store in MEM takes place.
-    Variant of true_dependence which assumes MEM has already been
-    canonicalized (hence we no longer do that here).
-    The mem_addr argument has been added, since true_dependence_1 computed
-    this value prior to canonicalizing.  */
- 
- int
- canon_true_dependence (const_rtx mem, machine_mode mem_mode, rtx mem_addr,
- 		       const_rtx x, rtx x_addr)
- {
-   return true_dependence_1 (mem, mem_mode, mem_addr,
- 			    x, x_addr, /*mem_canonicalized=*/true);
- }
- 
- /* Returns nonzero if a write to X might alias a previous read from
-    (or, if WRITEP is true, a write to) MEM.
-    If X_CANONCALIZED is true, then X_ADDR is the canonicalized address of X,
-    and X_MODE the mode for that access.
-    If MEM_CANONICALIZED is true, MEM is canonicalized.  */
- 
- static int
- write_dependence_p (const_rtx mem,
- 		    const_rtx x, machine_mode x_mode, rtx x_addr,
- 		    bool mem_canonicalized, bool x_canonicalized, bool writep)
- {
-   rtx mem_addr;
-   rtx true_mem_addr, true_x_addr;
-   rtx base;
-   int ret;
- 
-   gcc_checking_assert (x_canonicalized
- 		       ? (x_addr != NULL_RTX
- 			  && (x_mode != VOIDmode || GET_MODE (x) == VOIDmode))
- 		       : (x_addr == NULL_RTX && x_mode == VOIDmode));
- 
-   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-     return 1;
- 
-   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
-      This is used in epilogue deallocation functions.  */
-   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
-     return 1;
-   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
-     return 1;
-   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
-       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
-     return 1;
- 
-   if (!x_addr)
-     x_addr = XEXP (x, 0);
-   true_x_addr = get_addr (x_addr);
- 
-   mem_addr = XEXP (mem, 0);
-   true_mem_addr = get_addr (mem_addr);
- 
-   /* A read from read-only memory can't conflict with read-write memory.
-      Don't assume anything when AND addresses are involved and leave to
-      the code below to determine dependence.  */
-   if (!writep
-       && MEM_READONLY_P (mem)
-       && GET_CODE (true_x_addr) != AND
-       && GET_CODE (true_mem_addr) != AND)
-     return 0;
- 
-   /* If we have MEMs referring to different address spaces (which can
-      potentially overlap), we cannot easily tell from the addresses
-      whether the references overlap.  */
-   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
-     return 1;
- 
-   base = find_base_term (true_mem_addr);
-   if (! writep
-       && base
-       && (GET_CODE (base) == LABEL_REF
- 	  || (GET_CODE (base) == SYMBOL_REF
- 	      && CONSTANT_POOL_ADDRESS_P (base))))
-     return 0;
- 
-   rtx x_base = find_base_term (true_x_addr);
-   if (! base_alias_check (true_x_addr, x_base, true_mem_addr, base,
- 			  GET_MODE (x), GET_MODE (mem)))
-     return 0;
- 
-   if (!x_canonicalized)
-     {
-       x_addr = canon_rtx (true_x_addr);
-       x_mode = GET_MODE (x);
-     }
-   if (!mem_canonicalized)
-     mem_addr = canon_rtx (true_mem_addr);
- 
-   if ((ret = memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
- 				 GET_MODE_SIZE (x_mode), x_addr, 0)) != -1)
-     return ret;
- 
-   if (nonoverlapping_memrefs_p (x, mem, false))
-     return 0;
- 
-   return rtx_refs_may_alias_p (x, mem, false);
- }
- 
- /* Anti dependence: X is written after read in MEM takes place.  */
- 
- int
- anti_dependence (const_rtx mem, const_rtx x)
- {
-   return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
- 			     /*mem_canonicalized=*/false,
- 			     /*x_canonicalized*/false, /*writep=*/false);
- }
- 
- /* Likewise, but we already have a canonicalized MEM, and X_ADDR for X.
-    Also, consider X in X_MODE (which might be from an enclosing
-    STRICT_LOW_PART / ZERO_EXTRACT).
-    If MEM_CANONICALIZED is true, MEM is canonicalized.  */
- 
- int
- canon_anti_dependence (const_rtx mem, bool mem_canonicalized,
- 		       const_rtx x, machine_mode x_mode, rtx x_addr)
- {
-   return write_dependence_p (mem, x, x_mode, x_addr,
- 			     mem_canonicalized, /*x_canonicalized=*/true,
- 			     /*writep=*/false);
- }
- 
- /* Output dependence: X is written after store in MEM takes place.  */
- 
- int
- output_dependence (const_rtx mem, const_rtx x)
- {
-   return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
- 			     /*mem_canonicalized=*/false,
- 			     /*x_canonicalized*/false, /*writep=*/true);
- }
- 
- /* Likewise, but we already have a canonicalized MEM, and X_ADDR for X.
-    Also, consider X in X_MODE (which might be from an enclosing
-    STRICT_LOW_PART / ZERO_EXTRACT).
-    If MEM_CANONICALIZED is true, MEM is canonicalized.  */
- 
- int
- canon_output_dependence (const_rtx mem, bool mem_canonicalized,
- 			 const_rtx x, machine_mode x_mode, rtx x_addr)
- {
-   return write_dependence_p (mem, x, x_mode, x_addr,
- 			     mem_canonicalized, /*x_canonicalized=*/true,
- 			     /*writep=*/true);
- }
- 
- 
- 
- /* Check whether X may be aliased with MEM.  Don't do offset-based
-   memory disambiguation & TBAA.  */
- int
- may_alias_p (const_rtx mem, const_rtx x)
- {
-   rtx x_addr, mem_addr;
- 
-   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-     return 1;
- 
-   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
-      This is used in epilogue deallocation functions.  */
-   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
-     return 1;
-   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
-     return 1;
-   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
-       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
-     return 1;
- 
-   x_addr = XEXP (x, 0);
-   x_addr = get_addr (x_addr);
- 
-   mem_addr = XEXP (mem, 0);
-   mem_addr = get_addr (mem_addr);
- 
-   /* Read-only memory is by definition never modified, and therefore can't
-      conflict with anything.  However, don't assume anything when AND
-      addresses are involved and leave to the code below to determine
-      dependence.  We don't expect to find read-only set on MEM, but
-      stupid user tricks can produce them, so don't die.  */
-   if (MEM_READONLY_P (x)
-       && GET_CODE (x_addr) != AND
-       && GET_CODE (mem_addr) != AND)
-     return 0;
- 
-   /* If we have MEMs referring to different address spaces (which can
-      potentially overlap), we cannot easily tell from the addresses
-      whether the references overlap.  */
-   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
-     return 1;
- 
-   rtx x_base = find_base_term (x_addr);
-   rtx mem_base = find_base_term (mem_addr);
-   if (! base_alias_check (x_addr, x_base, mem_addr, mem_base,
- 			  GET_MODE (x), GET_MODE (mem_addr)))
-     return 0;
- 
-   if (nonoverlapping_memrefs_p (mem, x, true))
-     return 0;
- 
-   /* TBAA not valid for loop_invarint */
-   return rtx_refs_may_alias_p (x, mem, false);
- }
- 
- void
- init_alias_target (void)
- {
-   int i;
- 
-   if (!arg_base_value)
-     arg_base_value = gen_rtx_ADDRESS (VOIDmode, 0);
- 
-   memset (static_reg_base_value, 0, sizeof static_reg_base_value);
- 
-   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-     /* Check whether this register can hold an incoming pointer
-        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
-        numbers, so translate if necessary due to register windows.  */
-     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
- 	&& targetm.hard_regno_mode_ok (i, Pmode))
-       static_reg_base_value[i] = arg_base_value;
- 
-   /* RTL code is required to be consistent about whether it uses the
-      stack pointer, the frame pointer or the argument pointer to
-      access a given area of the frame.  We can therefore use the
-      base address to distinguish between the different areas.  */
-   static_reg_base_value[STACK_POINTER_REGNUM]
-     = unique_base_value (UNIQUE_BASE_VALUE_SP);
-   static_reg_base_value[ARG_POINTER_REGNUM]
-     = unique_base_value (UNIQUE_BASE_VALUE_ARGP);
-   static_reg_base_value[FRAME_POINTER_REGNUM]
-     = unique_base_value (UNIQUE_BASE_VALUE_FP);
- 
-   /* The above rules extend post-reload, with eliminations applying
-      consistently to each of the three pointers.  Cope with cases in
-      which the frame pointer is eliminated to the hard frame pointer
-      rather than the stack pointer.  */
-   if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
-     static_reg_base_value[HARD_FRAME_POINTER_REGNUM]
-       = unique_base_value (UNIQUE_BASE_VALUE_HFP);
- }
- 
- /* Set MEMORY_MODIFIED when X modifies DATA (that is assumed
-    to be memory reference.  */
- static bool memory_modified;
- static void
- memory_modified_1 (rtx x, const_rtx pat ATTRIBUTE_UNUSED, void *data)
- {
-   if (MEM_P (x))
-     {
-       if (anti_dependence (x, (const_rtx)data) || output_dependence (x, (const_rtx)data))
- 	memory_modified = true;
-     }
- }
- 
- 
- /* Return true when INSN possibly modify memory contents of MEM
-    (i.e. address can be modified).  */
- bool
- memory_modified_in_insn_p (const_rtx mem, const_rtx insn)
- {
-   if (!INSN_P (insn))
-     return false;
-   /* Conservatively assume all non-readonly MEMs might be modified in
-      calls.  */
-   if (CALL_P (insn))
-     return true;
-   memory_modified = false;
-   note_stores (as_a<const rtx_insn *> (insn), memory_modified_1,
- 	       CONST_CAST_RTX(mem));
-   return memory_modified;
- }
- 
- /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
-    array.  */
- 
- void
- init_alias_analysis (void)
- {
-   unsigned int maxreg = max_reg_num ();
-   int changed, pass;
-   int i;
-   unsigned int ui;
-   rtx_insn *insn;
-   rtx val;
-   int rpo_cnt;
-   int *rpo;
- 
-   timevar_push (TV_ALIAS_ANALYSIS);
- 
-   vec_safe_grow_cleared (reg_known_value, maxreg - FIRST_PSEUDO_REGISTER,
- 			 true);
-   reg_known_equiv_p = sbitmap_alloc (maxreg - FIRST_PSEUDO_REGISTER);
-   bitmap_clear (reg_known_equiv_p);
- 
-   /* If we have memory allocated from the previous run, use it.  */
-   if (old_reg_base_value)
-     reg_base_value = old_reg_base_value;
- 
-   if (reg_base_value)
-     reg_base_value->truncate (0);
- 
-   vec_safe_grow_cleared (reg_base_value, maxreg, true);
- 
-   new_reg_base_value = XNEWVEC (rtx, maxreg);
-   reg_seen = sbitmap_alloc (maxreg);
- 
-   /* The basic idea is that each pass through this loop will use the
-      "constant" information from the previous pass to propagate alias
-      information through another level of assignments.
- 
-      The propagation is done on the CFG in reverse post-order, to propagate
-      things forward as far as possible in each iteration.
- 
-      This could get expensive if the assignment chains are long.  Maybe
-      we should throttle the number of iterations, possibly based on
-      the optimization level or flag_expensive_optimizations.
- 
-      We could propagate more information in the first pass by making use
-      of DF_REG_DEF_COUNT to determine immediately that the alias information
-      for a pseudo is "constant".
- 
-      A program with an uninitialized variable can cause an infinite loop
-      here.  Instead of doing a full dataflow analysis to detect such problems
-      we just cap the number of iterations for the loop.
- 
-      The state of the arrays for the set chain in question does not matter
-      since the program has undefined behavior.  */
- 
-   rpo = XNEWVEC (int, n_basic_blocks_for_fn (cfun));
-   rpo_cnt = pre_and_rev_post_order_compute (NULL, rpo, false);
- 
-   /* The prologue/epilogue insns are not threaded onto the
-      insn chain until after reload has completed.  Thus,
-      there is no sense wasting time checking if INSN is in
-      the prologue/epilogue until after reload has completed.  */
-   bool could_be_prologue_epilogue = ((targetm.have_prologue ()
- 				      || targetm.have_epilogue ())
- 				     && reload_completed);
- 
-   pass = 0;
-   do
-     {
-       /* Assume nothing will change this iteration of the loop.  */
-       changed = 0;
- 
-       /* We want to assign the same IDs each iteration of this loop, so
- 	 start counting from one each iteration of the loop.  */
-       unique_id = 1;
- 
-       /* We're at the start of the function each iteration through the
- 	 loop, so we're copying arguments.  */
-       copying_arguments = true;
- 
-       /* Wipe the potential alias information clean for this pass.  */
-       memset (new_reg_base_value, 0, maxreg * sizeof (rtx));
- 
-       /* Wipe the reg_seen array clean.  */
-       bitmap_clear (reg_seen);
- 
-       /* Initialize the alias information for this pass.  */
-       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
- 	if (static_reg_base_value[i]
- 	    /* Don't treat the hard frame pointer as special if we
- 	       eliminated the frame pointer to the stack pointer instead.  */
- 	    && !(i == HARD_FRAME_POINTER_REGNUM
- 		 && reload_completed
- 		 && !frame_pointer_needed
- 		 && targetm.can_eliminate (FRAME_POINTER_REGNUM,
- 					   STACK_POINTER_REGNUM)))
- 	  {
- 	    new_reg_base_value[i] = static_reg_base_value[i];
- 	    bitmap_set_bit (reg_seen, i);
- 	  }
- 
-       /* Walk the insns adding values to the new_reg_base_value array.  */
-       for (i = 0; i < rpo_cnt; i++)
- 	{
- 	  basic_block bb = BASIC_BLOCK_FOR_FN (cfun, rpo[i]);
- 	  FOR_BB_INSNS (bb, insn)
- 	    {
- 	      if (NONDEBUG_INSN_P (insn))
- 		{
- 		  rtx note, set;
- 
- 		  if (could_be_prologue_epilogue
- 		      && prologue_epilogue_contains (insn))
- 		    continue;
- 
- 		  /* If this insn has a noalias note, process it,  Otherwise,
- 		     scan for sets.  A simple set will have no side effects
- 		     which could change the base value of any other register.  */
- 
- 		  if (GET_CODE (PATTERN (insn)) == SET
- 		      && REG_NOTES (insn) != 0
- 		      && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
- 		    record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
- 		  else
- 		    note_stores (insn, record_set, NULL);
- 
- 		  set = single_set (insn);
- 
- 		  if (set != 0
- 		      && REG_P (SET_DEST (set))
- 		      && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
- 		    {
- 		      unsigned int regno = REGNO (SET_DEST (set));
- 		      rtx src = SET_SRC (set);
- 		      rtx t;
- 
- 		      note = find_reg_equal_equiv_note (insn);
- 		      if (note && REG_NOTE_KIND (note) == REG_EQUAL
- 			  && DF_REG_DEF_COUNT (regno) != 1)
- 			note = NULL_RTX;
- 
- 		      poly_int64 offset;
- 		      if (note != NULL_RTX
- 			  && GET_CODE (XEXP (note, 0)) != EXPR_LIST
- 			  && ! rtx_varies_p (XEXP (note, 0), 1)
- 			  && ! reg_overlap_mentioned_p (SET_DEST (set),
- 							XEXP (note, 0)))
- 			{
- 			  set_reg_known_value (regno, XEXP (note, 0));
- 			  set_reg_known_equiv_p (regno,
- 						 REG_NOTE_KIND (note) == REG_EQUIV);
- 			}
- 		      else if (DF_REG_DEF_COUNT (regno) == 1
- 			       && GET_CODE (src) == PLUS
- 			       && REG_P (XEXP (src, 0))
- 			       && (t = get_reg_known_value (REGNO (XEXP (src, 0))))
- 			       && poly_int_rtx_p (XEXP (src, 1), &offset))
- 			{
- 			  t = plus_constant (GET_MODE (src), t, offset);
- 			  set_reg_known_value (regno, t);
- 			  set_reg_known_equiv_p (regno, false);
- 			}
- 		      else if (DF_REG_DEF_COUNT (regno) == 1
- 			       && ! rtx_varies_p (src, 1))
- 			{
- 			  set_reg_known_value (regno, src);
- 			  set_reg_known_equiv_p (regno, false);
- 			}
- 		    }
- 		}
- 	      else if (NOTE_P (insn)
- 		       && NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG)
- 		copying_arguments = false;
- 	    }
- 	}
- 
-       /* Now propagate values from new_reg_base_value to reg_base_value.  */
-       gcc_assert (maxreg == (unsigned int) max_reg_num ());
- 
-       for (ui = 0; ui < maxreg; ui++)
- 	{
- 	  if (new_reg_base_value[ui]
- 	      && new_reg_base_value[ui] != (*reg_base_value)[ui]
- 	      && ! rtx_equal_p (new_reg_base_value[ui], (*reg_base_value)[ui]))
- 	    {
- 	      (*reg_base_value)[ui] = new_reg_base_value[ui];
- 	      changed = 1;
- 	    }
- 	}
-     }
-   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
-   XDELETEVEC (rpo);
- 
-   /* Fill in the remaining entries.  */
-   FOR_EACH_VEC_ELT (*reg_known_value, i, val)
-     {
-       int regno = i + FIRST_PSEUDO_REGISTER;
-       if (! val)
- 	set_reg_known_value (regno, regno_reg_rtx[regno]);
-     }
- 
-   /* Clean up.  */
-   free (new_reg_base_value);
-   new_reg_base_value = 0;
-   sbitmap_free (reg_seen);
-   reg_seen = 0;
-   timevar_pop (TV_ALIAS_ANALYSIS);
- }
- 
- /* Equate REG_BASE_VALUE (reg1) to REG_BASE_VALUE (reg2).
-    Special API for var-tracking pass purposes.  */
- 
- void
- vt_equate_reg_base_value (const_rtx reg1, const_rtx reg2)
- {
-   (*reg_base_value)[REGNO (reg1)] = REG_BASE_VALUE (reg2);
- }
- 
- void
- end_alias_analysis (void)
- {
-   old_reg_base_value = reg_base_value;
-   vec_free (reg_known_value);
-   sbitmap_free (reg_known_equiv_p);
- }
- 
- void
- dump_alias_stats_in_alias_c (FILE *s)
- {
-   fprintf (s, "  TBAA oracle: %llu disambiguations %llu queries\n"
- 	      "               %llu are in alias set 0\n"
- 	      "               %llu queries asked about the same object\n"
- 	      "               %llu queries asked about the same alias set\n"
- 	      "               %llu access volatile\n"
- 	      "               %llu are dependent in the DAG\n"
- 	      "               %llu are aritificially in conflict with void *\n",
- 	   alias_stats.num_disambiguated,
- 	   alias_stats.num_alias_zero + alias_stats.num_same_alias_set
- 	   + alias_stats.num_same_objects + alias_stats.num_volatile
- 	   + alias_stats.num_dag + alias_stats.num_disambiguated
- 	   + alias_stats.num_universal,
- 	   alias_stats.num_alias_zero, alias_stats.num_same_alias_set,
- 	   alias_stats.num_same_objects, alias_stats.num_volatile,
- 	   alias_stats.num_dag, alias_stats.num_universal);
- }
- #include "gt-alias.h"
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/alias.cc gcc-12.1.0/gcc/alias.cc
*** gcc-11.3.0/gcc/alias.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/alias.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,3586 ----
+ /* Alias analysis for GNU C
+    Copyright (C) 1997-2022 Free Software Foundation, Inc.
+    Contributed by John Carr (jfc@mit.edu).
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "backend.h"
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
+ #include "gimple.h"
+ #include "df.h"
+ #include "memmodel.h"
+ #include "tm_p.h"
+ #include "gimple-ssa.h"
+ #include "emit-rtl.h"
+ #include "alias.h"
+ #include "fold-const.h"
+ #include "varasm.h"
+ #include "cselib.h"
+ #include "langhooks.h"
+ #include "cfganal.h"
+ #include "rtl-iter.h"
+ #include "cgraph.h"
+ #include "ipa-utils.h"
+ 
+ /* The aliasing API provided here solves related but different problems:
+ 
+    Say there exists (in c)
+ 
+    struct X {
+      struct Y y1;
+      struct Z z2;
+    } x1, *px1,  *px2;
+ 
+    struct Y y2, *py;
+    struct Z z2, *pz;
+ 
+ 
+    py = &x1.y1;
+    px2 = &x1;
+ 
+    Consider the four questions:
+ 
+    Can a store to x1 interfere with px2->y1?
+    Can a store to x1 interfere with px2->z2?
+    Can a store to x1 change the value pointed to by with py?
+    Can a store to x1 change the value pointed to by with pz?
+ 
+    The answer to these questions can be yes, yes, yes, and maybe.
+ 
+    The first two questions can be answered with a simple examination
+    of the type system.  If structure X contains a field of type Y then
+    a store through a pointer to an X can overwrite any field that is
+    contained (recursively) in an X (unless we know that px1 != px2).
+ 
+    The last two questions can be solved in the same way as the first
+    two questions but this is too conservative.  The observation is
+    that in some cases we can know which (if any) fields are addressed
+    and if those addresses are used in bad ways.  This analysis may be
+    language specific.  In C, arbitrary operations may be applied to
+    pointers.  However, there is some indication that this may be too
+    conservative for some C++ types.
+ 
+    The pass ipa-type-escape does this analysis for the types whose
+    instances do not escape across the compilation boundary.
+ 
+    Historically in GCC, these two problems were combined and a single
+    data structure that was used to represent the solution to these
+    problems.  We now have two similar but different data structures,
+    The data structure to solve the last two questions is similar to
+    the first, but does not contain the fields whose address are never
+    taken.  For types that do escape the compilation unit, the data
+    structures will have identical information.
+ */
+ 
+ /* The alias sets assigned to MEMs assist the back-end in determining
+    which MEMs can alias which other MEMs.  In general, two MEMs in
+    different alias sets cannot alias each other, with one important
+    exception.  Consider something like:
+ 
+      struct S { int i; double d; };
+ 
+    a store to an `S' can alias something of either type `int' or type
+    `double'.  (However, a store to an `int' cannot alias a `double'
+    and vice versa.)  We indicate this via a tree structure that looks
+    like:
+ 	   struct S
+ 	    /   \
+ 	   /     \
+ 	 |/_     _\|
+ 	 int    double
+ 
+    (The arrows are directed and point downwards.)
+     In this situation we say the alias set for `struct S' is the
+    `superset' and that those for `int' and `double' are `subsets'.
+ 
+    To see whether two alias sets can point to the same memory, we must
+    see if either alias set is a subset of the other. We need not trace
+    past immediate descendants, however, since we propagate all
+    grandchildren up one level.
+ 
+    Alias set zero is implicitly a superset of all other alias sets.
+    However, this is no actual entry for alias set zero.  It is an
+    error to attempt to explicitly construct a subset of zero.  */
+ 
+ struct alias_set_hash : int_hash <int, INT_MIN, INT_MIN + 1> {};
+ 
+ struct GTY(()) alias_set_entry {
+   /* The alias set number, as stored in MEM_ALIAS_SET.  */
+   alias_set_type alias_set;
+ 
+   /* Nonzero if would have a child of zero: this effectively makes this
+      alias set the same as alias set zero.  */
+   bool has_zero_child;
+   /* Nonzero if alias set corresponds to pointer type itself (i.e. not to
+      aggregate contaiing pointer.
+      This is used for a special case where we need an universal pointer type
+      compatible with all other pointer types.  */
+   bool is_pointer;
+   /* Nonzero if is_pointer or if one of childs have has_pointer set.  */
+   bool has_pointer;
+ 
+   /* The children of the alias set.  These are not just the immediate
+      children, but, in fact, all descendants.  So, if we have:
+ 
+        struct T { struct S s; float f; }
+ 
+      continuing our example above, the children here will be all of
+      `int', `double', `float', and `struct S'.  */
+   hash_map<alias_set_hash, int> *children;
+ };
+ 
+ static int rtx_equal_for_memref_p (const_rtx, const_rtx);
+ static void record_set (rtx, const_rtx, void *);
+ static int base_alias_check (rtx, rtx, rtx, rtx, machine_mode,
+ 			     machine_mode);
+ static rtx find_base_value (rtx);
+ static int mems_in_disjoint_alias_sets_p (const_rtx, const_rtx);
+ static alias_set_entry *get_alias_set_entry (alias_set_type);
+ static tree decl_for_component_ref (tree);
+ static int write_dependence_p (const_rtx,
+ 			       const_rtx, machine_mode, rtx,
+ 			       bool, bool, bool);
+ static int compare_base_symbol_refs (const_rtx, const_rtx,
+ 				     HOST_WIDE_INT * = NULL);
+ 
+ static void memory_modified_1 (rtx, const_rtx, void *);
+ 
+ /* Query statistics for the different low-level disambiguators.
+    A high-level query may trigger multiple of them.  */
+ 
+ static struct {
+   unsigned long long num_alias_zero;
+   unsigned long long num_same_alias_set;
+   unsigned long long num_same_objects;
+   unsigned long long num_volatile;
+   unsigned long long num_dag;
+   unsigned long long num_universal;
+   unsigned long long num_disambiguated;
+ } alias_stats;
+ 
+ 
+ /* Set up all info needed to perform alias analysis on memory references.  */
+ 
+ /* Returns the size in bytes of the mode of X.  */
+ #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
+ 
+ /* Cap the number of passes we make over the insns propagating alias
+    information through set chains.
+    ??? 10 is a completely arbitrary choice.  This should be based on the
+    maximum loop depth in the CFG, but we do not have this information
+    available (even if current_loops _is_ available).  */
+ #define MAX_ALIAS_LOOP_PASSES 10
+ 
+ /* reg_base_value[N] gives an address to which register N is related.
+    If all sets after the first add or subtract to the current value
+    or otherwise modify it so it does not point to a different top level
+    object, reg_base_value[N] is equal to the address part of the source
+    of the first set.
+ 
+    A base address can be an ADDRESS, SYMBOL_REF, or LABEL_REF.  ADDRESS
+    expressions represent three types of base:
+ 
+      1. incoming arguments.  There is just one ADDRESS to represent all
+ 	arguments, since we do not know at this level whether accesses
+ 	based on different arguments can alias.  The ADDRESS has id 0.
+ 
+      2. stack_pointer_rtx, frame_pointer_rtx, hard_frame_pointer_rtx
+ 	(if distinct from frame_pointer_rtx) and arg_pointer_rtx.
+ 	Each of these rtxes has a separate ADDRESS associated with it,
+ 	each with a negative id.
+ 
+ 	GCC is (and is required to be) precise in which register it
+ 	chooses to access a particular region of stack.  We can therefore
+ 	assume that accesses based on one of these rtxes do not alias
+ 	accesses based on another of these rtxes.
+ 
+      3. bases that are derived from malloc()ed memory (REG_NOALIAS).
+ 	Each such piece of memory has a separate ADDRESS associated
+ 	with it, each with an id greater than 0.
+ 
+    Accesses based on one ADDRESS do not alias accesses based on other
+    ADDRESSes.  Accesses based on ADDRESSes in groups (2) and (3) do not
+    alias globals either; the ADDRESSes have Pmode to indicate this.
+    The ADDRESS in group (1) _may_ alias globals; it has VOIDmode to
+    indicate this.  */
+ 
+ static GTY(()) vec<rtx, va_gc> *reg_base_value;
+ static rtx *new_reg_base_value;
+ 
+ /* The single VOIDmode ADDRESS that represents all argument bases.
+    It has id 0.  */
+ static GTY(()) rtx arg_base_value;
+ 
+ /* Used to allocate unique ids to each REG_NOALIAS ADDRESS.  */
+ static int unique_id;
+ 
+ /* We preserve the copy of old array around to avoid amount of garbage
+    produced.  About 8% of garbage produced were attributed to this
+    array.  */
+ static GTY((deletable)) vec<rtx, va_gc> *old_reg_base_value;
+ 
+ /* Values of XINT (address, 0) of Pmode ADDRESS rtxes for special
+    registers.  */
+ #define UNIQUE_BASE_VALUE_SP	-1
+ #define UNIQUE_BASE_VALUE_ARGP	-2
+ #define UNIQUE_BASE_VALUE_FP	-3
+ #define UNIQUE_BASE_VALUE_HFP	-4
+ 
+ #define static_reg_base_value \
+   (this_target_rtl->x_static_reg_base_value)
+ 
+ #define REG_BASE_VALUE(X)					\
+   (REGNO (X) < vec_safe_length (reg_base_value)			\
+    ? (*reg_base_value)[REGNO (X)] : 0)
+ 
+ /* Vector indexed by N giving the initial (unchanging) value known for
+    pseudo-register N.  This vector is initialized in init_alias_analysis,
+    and does not change until end_alias_analysis is called.  */
+ static GTY(()) vec<rtx, va_gc> *reg_known_value;
+ 
+ /* Vector recording for each reg_known_value whether it is due to a
+    REG_EQUIV note.  Future passes (viz., reload) may replace the
+    pseudo with the equivalent expression and so we account for the
+    dependences that would be introduced if that happens.
+ 
+    The REG_EQUIV notes created in assign_parms may mention the arg
+    pointer, and there are explicit insns in the RTL that modify the
+    arg pointer.  Thus we must ensure that such insns don't get
+    scheduled across each other because that would invalidate the
+    REG_EQUIV notes.  One could argue that the REG_EQUIV notes are
+    wrong, but solving the problem in the scheduler will likely give
+    better code, so we do it here.  */
+ static sbitmap reg_known_equiv_p;
+ 
+ /* True when scanning insns from the start of the rtl to the
+    NOTE_INSN_FUNCTION_BEG note.  */
+ static bool copying_arguments;
+ 
+ 
+ /* The splay-tree used to store the various alias set entries.  */
+ static GTY (()) vec<alias_set_entry *, va_gc> *alias_sets;
+ 
+ /* Build a decomposed reference object for querying the alias-oracle
+    from the MEM rtx and store it in *REF.
+    Returns false if MEM is not suitable for the alias-oracle.  */
+ 
+ static bool
+ ao_ref_from_mem (ao_ref *ref, const_rtx mem)
+ {
+   tree expr = MEM_EXPR (mem);
+   tree base;
+ 
+   if (!expr)
+     return false;
+ 
+   ao_ref_init (ref, expr);
+ 
+   /* Get the base of the reference and see if we have to reject or
+      adjust it.  */
+   base = ao_ref_base (ref);
+   if (base == NULL_TREE)
+     return false;
+ 
+   /* The tree oracle doesn't like bases that are neither decls
+      nor indirect references of SSA names.  */
+   if (!(DECL_P (base)
+ 	|| (TREE_CODE (base) == MEM_REF
+ 	    && TREE_CODE (TREE_OPERAND (base, 0)) == SSA_NAME)
+ 	|| (TREE_CODE (base) == TARGET_MEM_REF
+ 	    && TREE_CODE (TMR_BASE (base)) == SSA_NAME)))
+     return false;
+ 
+   ref->ref_alias_set = MEM_ALIAS_SET (mem);
+ 
+   /* If MEM_OFFSET or MEM_SIZE are unknown what we got from MEM_EXPR
+      is conservative, so trust it.  */
+   if (!MEM_OFFSET_KNOWN_P (mem)
+       || !MEM_SIZE_KNOWN_P (mem))
+     return true;
+ 
+   /* If MEM_OFFSET/MEM_SIZE get us outside of ref->offset/ref->max_size
+      drop ref->ref.  */
+   if (maybe_lt (MEM_OFFSET (mem), 0)
+       || (ref->max_size_known_p ()
+ 	  && maybe_gt ((MEM_OFFSET (mem) + MEM_SIZE (mem)) * BITS_PER_UNIT,
+ 		       ref->max_size)))
+     ref->ref = NULL_TREE;
+ 
+   /* Refine size and offset we got from analyzing MEM_EXPR by using
+      MEM_SIZE and MEM_OFFSET.  */
+ 
+   ref->offset += MEM_OFFSET (mem) * BITS_PER_UNIT;
+   ref->size = MEM_SIZE (mem) * BITS_PER_UNIT;
+ 
+   /* The MEM may extend into adjacent fields, so adjust max_size if
+      necessary.  */
+   if (ref->max_size_known_p ())
+     ref->max_size = upper_bound (ref->max_size, ref->size);
+ 
+   /* If MEM_OFFSET and MEM_SIZE might get us outside of the base object of
+      the MEM_EXPR punt.  This happens for STRICT_ALIGNMENT targets a lot.  */
+   if (MEM_EXPR (mem) != get_spill_slot_decl (false)
+       && (maybe_lt (ref->offset, 0)
+ 	  || (DECL_P (ref->base)
+ 	      && (DECL_SIZE (ref->base) == NULL_TREE
+ 		  || !poly_int_tree_p (DECL_SIZE (ref->base))
+ 		  || maybe_lt (wi::to_poly_offset (DECL_SIZE (ref->base)),
+ 			       ref->offset + ref->size)))))
+     return false;
+ 
+   return true;
+ }
+ 
+ /* Query the alias-oracle on whether the two memory rtx X and MEM may
+    alias.  If TBAA_P is set also apply TBAA.  Returns true if the
+    two rtxen may alias, false otherwise.  */
+ 
+ static bool
+ rtx_refs_may_alias_p (const_rtx x, const_rtx mem, bool tbaa_p)
+ {
+   ao_ref ref1, ref2;
+ 
+   if (!ao_ref_from_mem (&ref1, x)
+       || !ao_ref_from_mem (&ref2, mem))
+     return true;
+ 
+   return refs_may_alias_p_1 (&ref1, &ref2,
+ 			     tbaa_p
+ 			     && MEM_ALIAS_SET (x) != 0
+ 			     && MEM_ALIAS_SET (mem) != 0);
+ }
+ 
+ /* Return true if the ref EARLIER behaves the same as LATER with respect
+    to TBAA for every memory reference that might follow LATER.  */
+ 
+ bool
+ refs_same_for_tbaa_p (tree earlier, tree later)
+ {
+   ao_ref earlier_ref, later_ref;
+   ao_ref_init (&earlier_ref, earlier);
+   ao_ref_init (&later_ref, later);
+   alias_set_type earlier_set = ao_ref_alias_set (&earlier_ref);
+   alias_set_type later_set = ao_ref_alias_set (&later_ref);
+   if (!(earlier_set == later_set
+ 	|| alias_set_subset_of (later_set, earlier_set)))
+     return false;
+   alias_set_type later_base_set = ao_ref_base_alias_set (&later_ref);
+   alias_set_type earlier_base_set = ao_ref_base_alias_set (&earlier_ref);
+   return (earlier_base_set == later_base_set
+ 	  || alias_set_subset_of (later_base_set, earlier_base_set));
+ }
+ 
+ /* Returns a pointer to the alias set entry for ALIAS_SET, if there is
+    such an entry, or NULL otherwise.  */
+ 
+ static inline alias_set_entry *
+ get_alias_set_entry (alias_set_type alias_set)
+ {
+   return (*alias_sets)[alias_set];
+ }
+ 
+ /* Returns nonzero if the alias sets for MEM1 and MEM2 are such that
+    the two MEMs cannot alias each other.  */
+ 
+ static inline int
+ mems_in_disjoint_alias_sets_p (const_rtx mem1, const_rtx mem2)
+ {
+   return (flag_strict_aliasing
+ 	  && ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1),
+ 				      MEM_ALIAS_SET (mem2)));
+ }
+ 
+ /* Return true if the first alias set is a subset of the second.  */
+ 
+ bool
+ alias_set_subset_of (alias_set_type set1, alias_set_type set2)
+ {
+   alias_set_entry *ase2;
+ 
+   /* Disable TBAA oracle with !flag_strict_aliasing.  */
+   if (!flag_strict_aliasing)
+     return true;
+ 
+   /* Everything is a subset of the "aliases everything" set.  */
+   if (set2 == 0)
+     return true;
+ 
+   /* Check if set1 is a subset of set2.  */
+   ase2 = get_alias_set_entry (set2);
+   if (ase2 != 0
+       && (ase2->has_zero_child
+ 	  || (ase2->children && ase2->children->get (set1))))
+     return true;
+ 
+   /* As a special case we consider alias set of "void *" to be both subset
+      and superset of every alias set of a pointer.  This extra symmetry does
+      not matter for alias_sets_conflict_p but it makes aliasing_component_refs_p
+      to return true on the following testcase:
+ 
+      void *ptr;
+      char **ptr2=(char **)&ptr;
+      *ptr2 = ...
+ 
+      Additionally if a set contains universal pointer, we consider every pointer
+      to be a subset of it, but we do not represent this explicitely - doing so
+      would require us to update transitive closure each time we introduce new
+      pointer type.  This makes aliasing_component_refs_p to return true
+      on the following testcase:
+ 
+      struct a {void *ptr;}
+      char **ptr = (char **)&a.ptr;
+      ptr = ...
+ 
+      This makes void * truly universal pointer type.  See pointer handling in
+      get_alias_set for more details.  */
+   if (ase2 && ase2->has_pointer)
+     {
+       alias_set_entry *ase1 = get_alias_set_entry (set1);
+ 
+       if (ase1 && ase1->is_pointer)
+ 	{
+           alias_set_type voidptr_set = TYPE_ALIAS_SET (ptr_type_node);
+ 	  /* If one is ptr_type_node and other is pointer, then we consider
+  	     them subset of each other.  */
+ 	  if (set1 == voidptr_set || set2 == voidptr_set)
+ 	    return true;
+ 	  /* If SET2 contains universal pointer's alias set, then we consdier
+  	     every (non-universal) pointer.  */
+ 	  if (ase2->children && set1 != voidptr_set
+ 	      && ase2->children->get (voidptr_set))
+ 	    return true;
+ 	}
+     }
+   return false;
+ }
+ 
+ /* Return 1 if the two specified alias sets may conflict.  */
+ 
+ int
+ alias_sets_conflict_p (alias_set_type set1, alias_set_type set2)
+ {
+   alias_set_entry *ase1;
+   alias_set_entry *ase2;
+ 
+   /* The easy case.  */
+   if (alias_sets_must_conflict_p (set1, set2))
+     return 1;
+ 
+   /* See if the first alias set is a subset of the second.  */
+   ase1 = get_alias_set_entry (set1);
+   if (ase1 != 0
+       && ase1->children && ase1->children->get (set2))
+     {
+       ++alias_stats.num_dag;
+       return 1;
+     }
+ 
+   /* Now do the same, but with the alias sets reversed.  */
+   ase2 = get_alias_set_entry (set2);
+   if (ase2 != 0
+       && ase2->children && ase2->children->get (set1))
+     {
+       ++alias_stats.num_dag;
+       return 1;
+     }
+ 
+   /* We want void * to be compatible with any other pointer without
+      really dropping it to alias set 0. Doing so would make it
+      compatible with all non-pointer types too.
+ 
+      This is not strictly necessary by the C/C++ language
+      standards, but avoids common type punning mistakes.  In
+      addition to that, we need the existence of such universal
+      pointer to implement Fortran's C_PTR type (which is defined as
+      type compatible with all C pointers).  */
+   if (ase1 && ase2 && ase1->has_pointer && ase2->has_pointer)
+     {
+       alias_set_type voidptr_set = TYPE_ALIAS_SET (ptr_type_node);
+ 
+       /* If one of the sets corresponds to universal pointer,
+  	 we consider it to conflict with anything that is
+ 	 or contains pointer.  */
+       if (set1 == voidptr_set || set2 == voidptr_set)
+ 	{
+ 	  ++alias_stats.num_universal;
+ 	  return true;
+ 	}
+      /* If one of sets is (non-universal) pointer and the other
+  	contains universal pointer, we also get conflict.  */
+      if (ase1->is_pointer && set2 != voidptr_set
+ 	 && ase2->children && ase2->children->get (voidptr_set))
+ 	{
+ 	  ++alias_stats.num_universal;
+ 	  return true;
+ 	}
+      if (ase2->is_pointer && set1 != voidptr_set
+ 	 && ase1->children && ase1->children->get (voidptr_set))
+ 	{
+ 	  ++alias_stats.num_universal;
+ 	  return true;
+ 	}
+     }
+ 
+   ++alias_stats.num_disambiguated;
+ 
+   /* The two alias sets are distinct and neither one is the
+      child of the other.  Therefore, they cannot conflict.  */
+   return 0;
+ }
+ 
+ /* Return 1 if the two specified alias sets will always conflict.  */
+ 
+ int
+ alias_sets_must_conflict_p (alias_set_type set1, alias_set_type set2)
+ {
+   /* Disable TBAA oracle with !flag_strict_aliasing.  */
+   if (!flag_strict_aliasing)
+     return 1;
+   if (set1 == 0 || set2 == 0)
+     {
+       ++alias_stats.num_alias_zero;
+       return 1;
+     }
+   if (set1 == set2)
+     {
+       ++alias_stats.num_same_alias_set;
+       return 1;
+     }
+ 
+   return 0;
+ }
+ 
+ /* Return 1 if any MEM object of type T1 will always conflict (using the
+    dependency routines in this file) with any MEM object of type T2.
+    This is used when allocating temporary storage.  If T1 and/or T2 are
+    NULL_TREE, it means we know nothing about the storage.  */
+ 
+ int
+ objects_must_conflict_p (tree t1, tree t2)
+ {
+   alias_set_type set1, set2;
+ 
+   /* If neither has a type specified, we don't know if they'll conflict
+      because we may be using them to store objects of various types, for
+      example the argument and local variables areas of inlined functions.  */
+   if (t1 == 0 && t2 == 0)
+     return 0;
+ 
+   /* If they are the same type, they must conflict.  */
+   if (t1 == t2)
+     {
+       ++alias_stats.num_same_objects;
+       return 1;
+     }
+   /* Likewise if both are volatile.  */
+   if (t1 != 0 && TYPE_VOLATILE (t1) && t2 != 0 && TYPE_VOLATILE (t2))
+     {
+       ++alias_stats.num_volatile;
+       return 1;
+     }
+ 
+   set1 = t1 ? get_alias_set (t1) : 0;
+   set2 = t2 ? get_alias_set (t2) : 0;
+ 
+   /* We can't use alias_sets_conflict_p because we must make sure
+      that every subtype of t1 will conflict with every subtype of
+      t2 for which a pair of subobjects of these respective subtypes
+      overlaps on the stack.  */
+   return alias_sets_must_conflict_p (set1, set2);
+ }
+ 
+ /* Return true if T is an end of the access path which can be used
+    by type based alias oracle.  */
+ 
+ bool
+ ends_tbaa_access_path_p (const_tree t)
+ {
+   switch (TREE_CODE (t))
+     {
+     case COMPONENT_REF:
+       if (DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1)))
+ 	return true;
+       /* Permit type-punning when accessing a union, provided the access
+ 	 is directly through the union.  For example, this code does not
+ 	 permit taking the address of a union member and then storing
+ 	 through it.  Even the type-punning allowed here is a GCC
+ 	 extension, albeit a common and useful one; the C standard says
+ 	 that such accesses have implementation-defined behavior.  */
+       else if (TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == UNION_TYPE)
+ 	return true;
+       break;
+ 
+     case ARRAY_REF:
+     case ARRAY_RANGE_REF:
+       if (TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t, 0))))
+ 	return true;
+       break;
+ 
+     case REALPART_EXPR:
+     case IMAGPART_EXPR:
+       break;
+ 
+     case BIT_FIELD_REF:
+     case VIEW_CONVERT_EXPR:
+       /* Bitfields and casts are never addressable.  */
+       return true;
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+   return false;
+ }
+ 
+ /* Return the outermost parent of component present in the chain of
+    component references handled by get_inner_reference in T with the
+    following property:
+      - the component is non-addressable
+    or NULL_TREE if no such parent exists.  In the former cases, the alias
+    set of this parent is the alias set that must be used for T itself.  */
+ 
+ tree
+ component_uses_parent_alias_set_from (const_tree t)
+ {
+   const_tree found = NULL_TREE;
+ 
+   while (handled_component_p (t))
+     {
+       if (ends_tbaa_access_path_p (t))
+ 	found = t;
+ 
+       t = TREE_OPERAND (t, 0);
+     }
+  
+   if (found)
+     return TREE_OPERAND (found, 0);
+ 
+   return NULL_TREE;
+ }
+ 
+ 
+ /* Return whether the pointer-type T effective for aliasing may
+    access everything and thus the reference has to be assigned
+    alias-set zero.  */
+ 
+ static bool
+ ref_all_alias_ptr_type_p (const_tree t)
+ {
+   return (TREE_CODE (TREE_TYPE (t)) == VOID_TYPE
+ 	  || TYPE_REF_CAN_ALIAS_ALL (t));
+ }
+ 
+ /* Return the alias set for the memory pointed to by T, which may be
+    either a type or an expression.  Return -1 if there is nothing
+    special about dereferencing T.  */
+ 
+ static alias_set_type
+ get_deref_alias_set_1 (tree t)
+ {
+   /* All we care about is the type.  */
+   if (! TYPE_P (t))
+     t = TREE_TYPE (t);
+ 
+   /* If we have an INDIRECT_REF via a void pointer, we don't
+      know anything about what that might alias.  Likewise if the
+      pointer is marked that way.  */
+   if (ref_all_alias_ptr_type_p (t))
+     return 0;
+ 
+   return -1;
+ }
+ 
+ /* Return the alias set for the memory pointed to by T, which may be
+    either a type or an expression.  */
+ 
+ alias_set_type
+ get_deref_alias_set (tree t)
+ {
+   /* If we're not doing any alias analysis, just assume everything
+      aliases everything else.  */
+   if (!flag_strict_aliasing)
+     return 0;
+ 
+   alias_set_type set = get_deref_alias_set_1 (t);
+ 
+   /* Fall back to the alias-set of the pointed-to type.  */
+   if (set == -1)
+     {
+       if (! TYPE_P (t))
+ 	t = TREE_TYPE (t);
+       set = get_alias_set (TREE_TYPE (t));
+     }
+ 
+   return set;
+ }
+ 
+ /* Return the pointer-type relevant for TBAA purposes from the
+    memory reference tree *T or NULL_TREE in which case *T is
+    adjusted to point to the outermost component reference that
+    can be used for assigning an alias set.  */
+  
+ tree
+ reference_alias_ptr_type_1 (tree *t)
+ {
+   tree inner;
+ 
+   /* Get the base object of the reference.  */
+   inner = *t;
+   while (handled_component_p (inner))
+     {
+       /* If there is a VIEW_CONVERT_EXPR in the chain we cannot use
+ 	 the type of any component references that wrap it to
+ 	 determine the alias-set.  */
+       if (TREE_CODE (inner) == VIEW_CONVERT_EXPR)
+ 	*t = TREE_OPERAND (inner, 0);
+       inner = TREE_OPERAND (inner, 0);
+     }
+ 
+   /* Handle pointer dereferences here, they can override the
+      alias-set.  */
+   if (INDIRECT_REF_P (inner)
+       && ref_all_alias_ptr_type_p (TREE_TYPE (TREE_OPERAND (inner, 0))))
+     return TREE_TYPE (TREE_OPERAND (inner, 0));
+   else if (TREE_CODE (inner) == TARGET_MEM_REF)
+     return TREE_TYPE (TMR_OFFSET (inner));
+   else if (TREE_CODE (inner) == MEM_REF
+ 	   && ref_all_alias_ptr_type_p (TREE_TYPE (TREE_OPERAND (inner, 1))))
+     return TREE_TYPE (TREE_OPERAND (inner, 1));
+ 
+   /* If the innermost reference is a MEM_REF that has a
+      conversion embedded treat it like a VIEW_CONVERT_EXPR above,
+      using the memory access type for determining the alias-set.  */
+   if (TREE_CODE (inner) == MEM_REF
+       && (TYPE_MAIN_VARIANT (TREE_TYPE (inner))
+ 	  != TYPE_MAIN_VARIANT
+ 	       (TREE_TYPE (TREE_TYPE (TREE_OPERAND (inner, 1))))))
+     return TREE_TYPE (TREE_OPERAND (inner, 1));
+ 
+   /* Otherwise, pick up the outermost object that we could have
+      a pointer to.  */
+   tree tem = component_uses_parent_alias_set_from (*t);
+   if (tem)
+     *t = tem;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Return the pointer-type relevant for TBAA purposes from the
+    gimple memory reference tree T.  This is the type to be used for
+    the offset operand of MEM_REF or TARGET_MEM_REF replacements of T
+    and guarantees that get_alias_set will return the same alias
+    set for T and the replacement.  */
+ 
+ tree
+ reference_alias_ptr_type (tree t)
+ {
+   /* If the frontend assigns this alias-set zero, preserve that.  */
+   if (lang_hooks.get_alias_set (t) == 0)
+     return ptr_type_node;
+ 
+   tree ptype = reference_alias_ptr_type_1 (&t);
+   /* If there is a given pointer type for aliasing purposes, return it.  */
+   if (ptype != NULL_TREE)
+     return ptype;
+ 
+   /* Otherwise build one from the outermost component reference we
+      may use.  */
+   if (TREE_CODE (t) == MEM_REF
+       || TREE_CODE (t) == TARGET_MEM_REF)
+     return TREE_TYPE (TREE_OPERAND (t, 1));
+   else
+     return build_pointer_type (TYPE_MAIN_VARIANT (TREE_TYPE (t)));
+ }
+ 
+ /* Return whether the pointer-types T1 and T2 used to determine
+    two alias sets of two references will yield the same answer
+    from get_deref_alias_set.  */
+ 
+ bool
+ alias_ptr_types_compatible_p (tree t1, tree t2)
+ {
+   if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
+     return true;
+ 
+   if (ref_all_alias_ptr_type_p (t1)
+       || ref_all_alias_ptr_type_p (t2))
+     return false;
+ 
+     /* This function originally abstracts from simply comparing
+        get_deref_alias_set so that we are sure this still computes
+        the same result after LTO type merging is applied.
+        When in LTO type merging is done we can actually do this compare.
+     */
+   if (in_lto_p)
+     return get_deref_alias_set (t1) == get_deref_alias_set (t2);
+   else
+     return (TYPE_MAIN_VARIANT (TREE_TYPE (t1))
+ 	    == TYPE_MAIN_VARIANT (TREE_TYPE (t2)));
+ }
+ 
+ /* Create emptry alias set entry.  */
+ 
+ alias_set_entry *
+ init_alias_set_entry (alias_set_type set)
+ {
+   alias_set_entry *ase = ggc_alloc<alias_set_entry> ();
+   ase->alias_set = set;
+   ase->children = NULL;
+   ase->has_zero_child = false;
+   ase->is_pointer = false;
+   ase->has_pointer = false;
+   gcc_checking_assert (!get_alias_set_entry (set));
+   (*alias_sets)[set] = ase;
+   return ase;
+ }
+ 
+ /* Return the alias set for T, which may be either a type or an
+    expression.  Call language-specific routine for help, if needed.  */
+ 
+ alias_set_type
+ get_alias_set (tree t)
+ {
+   alias_set_type set;
+ 
+   /* We cannot give up with -fno-strict-aliasing because we need to build
+      proper type representations for possible functions which are built with
+      -fstrict-aliasing.  */
+ 
+   /* return 0 if this or its type is an error.  */
+   if (t == error_mark_node
+       || (! TYPE_P (t)
+ 	  && (TREE_TYPE (t) == 0 || TREE_TYPE (t) == error_mark_node)))
+     return 0;
+ 
+   /* We can be passed either an expression or a type.  This and the
+      language-specific routine may make mutually-recursive calls to each other
+      to figure out what to do.  At each juncture, we see if this is a tree
+      that the language may need to handle specially.  First handle things that
+      aren't types.  */
+   if (! TYPE_P (t))
+     {
+       /* Give the language a chance to do something with this tree
+ 	 before we look at it.  */
+       STRIP_NOPS (t);
+       set = lang_hooks.get_alias_set (t);
+       if (set != -1)
+ 	return set;
+ 
+       /* Get the alias pointer-type to use or the outermost object
+          that we could have a pointer to.  */
+       tree ptype = reference_alias_ptr_type_1 (&t);
+       if (ptype != NULL)
+ 	return get_deref_alias_set (ptype);
+ 
+       /* If we've already determined the alias set for a decl, just return
+ 	 it.  This is necessary for C++ anonymous unions, whose component
+ 	 variables don't look like union members (boo!).  */
+       if (VAR_P (t)
+ 	  && DECL_RTL_SET_P (t) && MEM_P (DECL_RTL (t)))
+ 	return MEM_ALIAS_SET (DECL_RTL (t));
+ 
+       /* Now all we care about is the type.  */
+       t = TREE_TYPE (t);
+     }
+ 
+   /* Variant qualifiers don't affect the alias set, so get the main
+      variant.  */
+   t = TYPE_MAIN_VARIANT (t);
+ 
+   if (AGGREGATE_TYPE_P (t)
+       && TYPE_TYPELESS_STORAGE (t))
+     return 0;
+ 
+   /* Always use the canonical type as well.  If this is a type that
+      requires structural comparisons to identify compatible types
+      use alias set zero.  */
+   if (TYPE_STRUCTURAL_EQUALITY_P (t))
+     {
+       /* Allow the language to specify another alias set for this
+ 	 type.  */
+       set = lang_hooks.get_alias_set (t);
+       if (set != -1)
+ 	return set;
+       /* Handle structure type equality for pointer types, arrays and vectors.
+ 	 This is easy to do, because the code below ignores canonical types on
+ 	 these anyway.  This is important for LTO, where TYPE_CANONICAL for
+ 	 pointers cannot be meaningfully computed by the frontend.  */
+       if (canonical_type_used_p (t))
+ 	{
+ 	  /* In LTO we set canonical types for all types where it makes
+ 	     sense to do so.  Double check we did not miss some type.  */
+ 	  gcc_checking_assert (!in_lto_p || !type_with_alias_set_p (t));
+           return 0;
+ 	}
+     }
+   else
+     {
+       t = TYPE_CANONICAL (t);
+       gcc_checking_assert (!TYPE_STRUCTURAL_EQUALITY_P (t));
+     }
+ 
+   /* If this is a type with a known alias set, return it.  */
+   gcc_checking_assert (t == TYPE_MAIN_VARIANT (t));
+   if (TYPE_ALIAS_SET_KNOWN_P (t))
+     return TYPE_ALIAS_SET (t);
+ 
+   /* We don't want to set TYPE_ALIAS_SET for incomplete types.  */
+   if (!COMPLETE_TYPE_P (t))
+     {
+       /* For arrays with unknown size the conservative answer is the
+ 	 alias set of the element type.  */
+       if (TREE_CODE (t) == ARRAY_TYPE)
+ 	return get_alias_set (TREE_TYPE (t));
+ 
+       /* But return zero as a conservative answer for incomplete types.  */
+       return 0;
+     }
+ 
+   /* See if the language has special handling for this type.  */
+   set = lang_hooks.get_alias_set (t);
+   if (set != -1)
+     return set;
+ 
+   /* There are no objects of FUNCTION_TYPE, so there's no point in
+      using up an alias set for them.  (There are, of course, pointers
+      and references to functions, but that's different.)  */
+   else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
+     set = 0;
+ 
+   /* Unless the language specifies otherwise, let vector types alias
+      their components.  This avoids some nasty type punning issues in
+      normal usage.  And indeed lets vectors be treated more like an
+      array slice.  */
+   else if (TREE_CODE (t) == VECTOR_TYPE)
+     set = get_alias_set (TREE_TYPE (t));
+ 
+   /* Unless the language specifies otherwise, treat array types the
+      same as their components.  This avoids the asymmetry we get
+      through recording the components.  Consider accessing a
+      character(kind=1) through a reference to a character(kind=1)[1:1].
+      Or consider if we want to assign integer(kind=4)[0:D.1387] and
+      integer(kind=4)[4] the same alias set or not.
+      Just be pragmatic here and make sure the array and its element
+      type get the same alias set assigned.  */
+   else if (TREE_CODE (t) == ARRAY_TYPE
+ 	   && (!TYPE_NONALIASED_COMPONENT (t)
+ 	       || TYPE_STRUCTURAL_EQUALITY_P (t)))
+     set = get_alias_set (TREE_TYPE (t));
+ 
+   /* From the former common C and C++ langhook implementation:
+ 
+      Unfortunately, there is no canonical form of a pointer type.
+      In particular, if we have `typedef int I', then `int *', and
+      `I *' are different types.  So, we have to pick a canonical
+      representative.  We do this below.
+ 
+      Technically, this approach is actually more conservative that
+      it needs to be.  In particular, `const int *' and `int *'
+      should be in different alias sets, according to the C and C++
+      standard, since their types are not the same, and so,
+      technically, an `int **' and `const int **' cannot point at
+      the same thing.
+ 
+      But, the standard is wrong.  In particular, this code is
+      legal C++:
+ 
+      int *ip;
+      int **ipp = &ip;
+      const int* const* cipp = ipp;
+      And, it doesn't make sense for that to be legal unless you
+      can dereference IPP and CIPP.  So, we ignore cv-qualifiers on
+      the pointed-to types.  This issue has been reported to the
+      C++ committee.
+ 
+      For this reason go to canonical type of the unqalified pointer type.
+      Until GCC 6 this code set all pointers sets to have alias set of
+      ptr_type_node but that is a bad idea, because it prevents disabiguations
+      in between pointers.  For Firefox this accounts about 20% of all
+      disambiguations in the program.  */
+   else if (POINTER_TYPE_P (t) && t != ptr_type_node)
+     {
+       tree p;
+       auto_vec <bool, 8> reference;
+ 
+       /* Unnest all pointers and references.
+ 	 We also want to make pointer to array/vector equivalent to pointer to
+ 	 its element (see the reasoning above). Skip all those types, too.  */
+       for (p = t; POINTER_TYPE_P (p)
+ 	   || (TREE_CODE (p) == ARRAY_TYPE
+ 	       && (!TYPE_NONALIASED_COMPONENT (p)
+ 		   || !COMPLETE_TYPE_P (p)
+ 		   || TYPE_STRUCTURAL_EQUALITY_P (p)))
+ 	   || TREE_CODE (p) == VECTOR_TYPE;
+ 	   p = TREE_TYPE (p))
+ 	{
+ 	  /* Ada supports recursive pointers.  Instead of doing recursion
+ 	     check, just give up once the preallocated space of 8 elements
+ 	     is up.  In this case just punt to void * alias set.  */
+ 	  if (reference.length () == 8)
+ 	    {
+ 	      p = ptr_type_node;
+ 	      break;
+ 	    }
+ 	  if (TREE_CODE (p) == REFERENCE_TYPE)
+ 	    /* In LTO we want languages that use references to be compatible
+  	       with languages that use pointers.  */
+ 	    reference.safe_push (true && !in_lto_p);
+ 	  if (TREE_CODE (p) == POINTER_TYPE)
+ 	    reference.safe_push (false);
+ 	}
+       p = TYPE_MAIN_VARIANT (p);
+ 
+       /* In LTO for C++ programs we can turn incomplete types to complete
+ 	 using ODR name lookup.  */
+       if (in_lto_p && TYPE_STRUCTURAL_EQUALITY_P (p) && odr_type_p (p))
+ 	{
+ 	  p = prevailing_odr_type (p);
+ 	  gcc_checking_assert (TYPE_MAIN_VARIANT (p) == p);
+ 	}
+ 
+       /* Make void * compatible with char * and also void **.
+ 	 Programs are commonly violating TBAA by this.
+ 
+ 	 We also make void * to conflict with every pointer
+ 	 (see record_component_aliases) and thus it is safe it to use it for
+ 	 pointers to types with TYPE_STRUCTURAL_EQUALITY_P.  */
+       if (TREE_CODE (p) == VOID_TYPE || TYPE_STRUCTURAL_EQUALITY_P (p))
+ 	set = get_alias_set (ptr_type_node);
+       else
+ 	{
+ 	  /* Rebuild pointer type starting from canonical types using
+ 	     unqualified pointers and references only.  This way all such
+ 	     pointers will have the same alias set and will conflict with
+ 	     each other.
+ 
+ 	     Most of time we already have pointers or references of a given type.
+ 	     If not we build new one just to be sure that if someone later
+ 	     (probably only middle-end can, as we should assign all alias
+ 	     classes only after finishing translation unit) builds the pointer
+ 	     type, the canonical type will match.  */
+ 	  p = TYPE_CANONICAL (p);
+ 	  while (!reference.is_empty ())
+ 	    {
+ 	      if (reference.pop ())
+ 		p = build_reference_type (p);
+ 	      else
+ 		p = build_pointer_type (p);
+ 	      gcc_checking_assert (p == TYPE_MAIN_VARIANT (p));
+ 	      /* build_pointer_type should always return the canonical type.
+ 		 For LTO TYPE_CANOINCAL may be NULL, because we do not compute
+ 		 them.  Be sure that frontends do not glob canonical types of
+ 		 pointers in unexpected way and that p == TYPE_CANONICAL (p)
+ 		 in all other cases.  */
+ 	      gcc_checking_assert (!TYPE_CANONICAL (p)
+ 				   || p == TYPE_CANONICAL (p));
+ 	    }
+ 
+ 	  /* Assign the alias set to both p and t.
+ 	     We cannot call get_alias_set (p) here as that would trigger
+ 	     infinite recursion when p == t.  In other cases it would just
+ 	     trigger unnecesary legwork of rebuilding the pointer again.  */
+ 	  gcc_checking_assert (p == TYPE_MAIN_VARIANT (p));
+ 	  if (TYPE_ALIAS_SET_KNOWN_P (p))
+ 	    set = TYPE_ALIAS_SET (p);
+ 	  else
+ 	    {
+ 	      set = new_alias_set ();
+ 	      TYPE_ALIAS_SET (p) = set;
+ 	    }
+ 	}
+     }
+   /* Alias set of ptr_type_node is special and serve as universal pointer which
+      is TBAA compatible with every other pointer type.  Be sure we have the
+      alias set built even for LTO which otherwise keeps all TYPE_CANONICAL
+      of pointer types NULL.  */
+   else if (t == ptr_type_node)
+     set = new_alias_set ();
+ 
+   /* Otherwise make a new alias set for this type.  */
+   else
+     {
+       /* Each canonical type gets its own alias set, so canonical types
+ 	 shouldn't form a tree.  It doesn't really matter for types
+ 	 we handle specially above, so only check it where it possibly
+ 	 would result in a bogus alias set.  */
+       gcc_checking_assert (TYPE_CANONICAL (t) == t);
+ 
+       set = new_alias_set ();
+     }
+ 
+   TYPE_ALIAS_SET (t) = set;
+ 
+   /* If this is an aggregate type or a complex type, we must record any
+      component aliasing information.  */
+   if (AGGREGATE_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
+     record_component_aliases (t);
+ 
+   /* We treat pointer types specially in alias_set_subset_of.  */
+   if (POINTER_TYPE_P (t) && set)
+     {
+       alias_set_entry *ase = get_alias_set_entry (set);
+       if (!ase)
+ 	ase = init_alias_set_entry (set);
+       ase->is_pointer = true;
+       ase->has_pointer = true;
+     }
+ 
+   return set;
+ }
+ 
+ /* Return a brand-new alias set.  */
+ 
+ alias_set_type
+ new_alias_set (void)
+ {
+   if (alias_sets == 0)
+     vec_safe_push (alias_sets, (alias_set_entry *) NULL);
+   vec_safe_push (alias_sets, (alias_set_entry *) NULL);
+   return alias_sets->length () - 1;
+ }
+ 
+ /* Indicate that things in SUBSET can alias things in SUPERSET, but that
+    not everything that aliases SUPERSET also aliases SUBSET.  For example,
+    in C, a store to an `int' can alias a load of a structure containing an
+    `int', and vice versa.  But it can't alias a load of a 'double' member
+    of the same structure.  Here, the structure would be the SUPERSET and
+    `int' the SUBSET.  This relationship is also described in the comment at
+    the beginning of this file.
+ 
+    This function should be called only once per SUPERSET/SUBSET pair.
+ 
+    It is illegal for SUPERSET to be zero; everything is implicitly a
+    subset of alias set zero.  */
+ 
+ void
+ record_alias_subset (alias_set_type superset, alias_set_type subset)
+ {
+   alias_set_entry *superset_entry;
+   alias_set_entry *subset_entry;
+ 
+   /* It is possible in complex type situations for both sets to be the same,
+      in which case we can ignore this operation.  */
+   if (superset == subset)
+     return;
+ 
+   gcc_assert (superset);
+ 
+   superset_entry = get_alias_set_entry (superset);
+   if (superset_entry == 0)
+     {
+       /* Create an entry for the SUPERSET, so that we have a place to
+ 	 attach the SUBSET.  */
+       superset_entry = init_alias_set_entry (superset);
+     }
+ 
+   if (subset == 0)
+     superset_entry->has_zero_child = 1;
+   else
+     {
+       if (!superset_entry->children)
+ 	superset_entry->children
+ 	  = hash_map<alias_set_hash, int>::create_ggc (64);
+ 
+       /* Enter the SUBSET itself as a child of the SUPERSET.  If it was
+ 	 already there we're done.  */
+       if (superset_entry->children->put (subset, 0))
+ 	return;
+ 
+       subset_entry = get_alias_set_entry (subset);
+       /* If there is an entry for the subset, enter all of its children
+ 	 (if they are not already present) as children of the SUPERSET.  */
+       if (subset_entry)
+ 	{
+ 	  if (subset_entry->has_zero_child)
+ 	    superset_entry->has_zero_child = true;
+           if (subset_entry->has_pointer)
+ 	    superset_entry->has_pointer = true;
+ 
+ 	  if (subset_entry->children)
+ 	    {
+ 	      hash_map<alias_set_hash, int>::iterator iter
+ 		= subset_entry->children->begin ();
+ 	      for (; iter != subset_entry->children->end (); ++iter)
+ 		superset_entry->children->put ((*iter).first, (*iter).second);
+ 	    }
+ 	}
+     }
+ }
+ 
+ /* Record that component types of TYPE, if any, are part of SUPERSET for
+    aliasing purposes.  For record types, we only record component types
+    for fields that are not marked non-addressable.  For array types, we
+    only record the component type if it is not marked non-aliased.  */
+ 
+ void
+ record_component_aliases (tree type, alias_set_type superset)
+ {
+   tree field;
+ 
+   if (superset == 0)
+     return;
+ 
+   switch (TREE_CODE (type))
+     {
+     case RECORD_TYPE:
+     case UNION_TYPE:
+     case QUAL_UNION_TYPE:
+       {
+ 	/* LTO non-ODR type merging does not make any difference between 
+ 	   component pointer types.  We may have
+ 
+ 	   struct foo {int *a;};
+ 
+ 	   as TYPE_CANONICAL of 
+ 
+ 	   struct bar {float *a;};
+ 
+ 	   Because accesses to int * and float * do not alias, we would get
+ 	   false negative when accessing the same memory location by
+ 	   float ** and bar *. We thus record the canonical type as:
+ 
+ 	   struct {void *a;};
+ 
+ 	   void * is special cased and works as a universal pointer type.
+ 	   Accesses to it conflicts with accesses to any other pointer
+ 	   type.  */
+ 	bool void_pointers = in_lto_p
+ 			     && (!odr_type_p (type)
+ 				 || !odr_based_tbaa_p (type));
+ 	for (field = TYPE_FIELDS (type); field != 0; field = DECL_CHAIN (field))
+ 	  if (TREE_CODE (field) == FIELD_DECL && !DECL_NONADDRESSABLE_P (field))
+ 	    {
+ 	      tree t = TREE_TYPE (field);
+ 	      if (void_pointers)
+ 		{
+ 		  /* VECTOR_TYPE and ARRAY_TYPE share the alias set with their
+ 		     element type and that type has to be normalized to void *,
+ 		     too, in the case it is a pointer. */
+ 		  while (!canonical_type_used_p (t) && !POINTER_TYPE_P (t))
+ 		    {
+ 		      gcc_checking_assert (TYPE_STRUCTURAL_EQUALITY_P (t));
+ 		      t = TREE_TYPE (t);
+ 		    }
+ 		  if (POINTER_TYPE_P (t))
+ 		    t = ptr_type_node;
+ 		  else if (flag_checking)
+ 		    gcc_checking_assert (get_alias_set (t)
+ 					 == get_alias_set (TREE_TYPE (field)));
+ 		}
+ 
+ 	      alias_set_type set = get_alias_set (t);
+ 	      record_alias_subset (superset, set);
+ 	      /* If the field has alias-set zero make sure to still record
+ 		 any componets of it.  This makes sure that for
+ 		   struct A {
+ 		     struct B {
+ 		       int i;
+ 		       char c[4];
+ 		     } b;
+ 		   };
+ 		 in C++ even though 'B' has alias-set zero because
+ 		 TYPE_TYPELESS_STORAGE is set, 'A' has the alias-set of
+ 		 'int' as subset.  */
+ 	      if (set == 0)
+ 		record_component_aliases (t, superset);
+ 	    }
+       }
+       break;
+ 
+     case COMPLEX_TYPE:
+       record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
+       break;
+ 
+     /* VECTOR_TYPE and ARRAY_TYPE share the alias set with their
+        element type.  */
+ 
+     default:
+       break;
+     }
+ }
+ 
+ /* Record that component types of TYPE, if any, are part of that type for
+    aliasing purposes.  For record types, we only record component types
+    for fields that are not marked non-addressable.  For array types, we
+    only record the component type if it is not marked non-aliased.  */
+ 
+ void
+ record_component_aliases (tree type)
+ {
+   alias_set_type superset = get_alias_set (type);
+   record_component_aliases (type, superset);
+ }
+ 
+ 
+ /* Allocate an alias set for use in storing and reading from the varargs
+    spill area.  */
+ 
+ static GTY(()) alias_set_type varargs_set = -1;
+ 
+ alias_set_type
+ get_varargs_alias_set (void)
+ {
+ #if 1
+   /* We now lower VA_ARG_EXPR, and there's currently no way to attach the
+      varargs alias set to an INDIRECT_REF (FIXME!), so we can't
+      consistently use the varargs alias set for loads from the varargs
+      area.  So don't use it anywhere.  */
+   return 0;
+ #else
+   if (varargs_set == -1)
+     varargs_set = new_alias_set ();
+ 
+   return varargs_set;
+ #endif
+ }
+ 
+ /* Likewise, but used for the fixed portions of the frame, e.g., register
+    save areas.  */
+ 
+ static GTY(()) alias_set_type frame_set = -1;
+ 
+ alias_set_type
+ get_frame_alias_set (void)
+ {
+   if (frame_set == -1)
+     frame_set = new_alias_set ();
+ 
+   return frame_set;
+ }
+ 
+ /* Create a new, unique base with id ID.  */
+ 
+ static rtx
+ unique_base_value (HOST_WIDE_INT id)
+ {
+   return gen_rtx_ADDRESS (Pmode, id);
+ }
+ 
+ /* Return true if accesses based on any other base value cannot alias
+    those based on X.  */
+ 
+ static bool
+ unique_base_value_p (rtx x)
+ {
+   return GET_CODE (x) == ADDRESS && GET_MODE (x) == Pmode;
+ }
+ 
+ /* Return true if X is known to be a base value.  */
+ 
+ static bool
+ known_base_value_p (rtx x)
+ {
+   switch (GET_CODE (x))
+     {
+     case LABEL_REF:
+     case SYMBOL_REF:
+       return true;
+ 
+     case ADDRESS:
+       /* Arguments may or may not be bases; we don't know for sure.  */
+       return GET_MODE (x) != VOIDmode;
+ 
+     default:
+       return false;
+     }
+ }
+ 
+ /* Inside SRC, the source of a SET, find a base address.  */
+ 
+ static rtx
+ find_base_value (rtx src)
+ {
+   unsigned int regno;
+   scalar_int_mode int_mode;
+ 
+ #if defined (FIND_BASE_TERM)
+   /* Try machine-dependent ways to find the base term.  */
+   src = FIND_BASE_TERM (src);
+ #endif
+ 
+   switch (GET_CODE (src))
+     {
+     case SYMBOL_REF:
+     case LABEL_REF:
+       return src;
+ 
+     case REG:
+       regno = REGNO (src);
+       /* At the start of a function, argument registers have known base
+ 	 values which may be lost later.  Returning an ADDRESS
+ 	 expression here allows optimization based on argument values
+ 	 even when the argument registers are used for other purposes.  */
+       if (regno < FIRST_PSEUDO_REGISTER && copying_arguments)
+ 	return new_reg_base_value[regno];
+ 
+       /* If a pseudo has a known base value, return it.  Do not do this
+ 	 for non-fixed hard regs since it can result in a circular
+ 	 dependency chain for registers which have values at function entry.
+ 
+ 	 The test above is not sufficient because the scheduler may move
+ 	 a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN.  */
+       if ((regno >= FIRST_PSEUDO_REGISTER || fixed_regs[regno])
+ 	  && regno < vec_safe_length (reg_base_value))
+ 	{
+ 	  /* If we're inside init_alias_analysis, use new_reg_base_value
+ 	     to reduce the number of relaxation iterations.  */
+ 	  if (new_reg_base_value && new_reg_base_value[regno]
+ 	      && DF_REG_DEF_COUNT (regno) == 1)
+ 	    return new_reg_base_value[regno];
+ 
+ 	  if ((*reg_base_value)[regno])
+ 	    return (*reg_base_value)[regno];
+ 	}
+ 
+       return 0;
+ 
+     case MEM:
+       /* Check for an argument passed in memory.  Only record in the
+ 	 copying-arguments block; it is too hard to track changes
+ 	 otherwise.  */
+       if (copying_arguments
+ 	  && (XEXP (src, 0) == arg_pointer_rtx
+ 	      || (GET_CODE (XEXP (src, 0)) == PLUS
+ 		  && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
+ 	return arg_base_value;
+       return 0;
+ 
+     case CONST:
+       src = XEXP (src, 0);
+       if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
+ 	break;
+ 
+       /* fall through */
+ 
+     case PLUS:
+     case MINUS:
+       {
+ 	rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
+ 
+ 	/* If either operand is a REG that is a known pointer, then it
+ 	   is the base.  */
+ 	if (REG_P (src_0) && REG_POINTER (src_0))
+ 	  return find_base_value (src_0);
+ 	if (REG_P (src_1) && REG_POINTER (src_1))
+ 	  return find_base_value (src_1);
+ 
+ 	/* If either operand is a REG, then see if we already have
+ 	   a known value for it.  */
+ 	if (REG_P (src_0))
+ 	  {
+ 	    temp = find_base_value (src_0);
+ 	    if (temp != 0)
+ 	      src_0 = temp;
+ 	  }
+ 
+ 	if (REG_P (src_1))
+ 	  {
+ 	    temp = find_base_value (src_1);
+ 	    if (temp!= 0)
+ 	      src_1 = temp;
+ 	  }
+ 
+ 	/* If either base is named object or a special address
+ 	   (like an argument or stack reference), then use it for the
+ 	   base term.  */
+ 	if (src_0 != 0 && known_base_value_p (src_0))
+ 	  return src_0;
+ 
+ 	if (src_1 != 0 && known_base_value_p (src_1))
+ 	  return src_1;
+ 
+ 	/* Guess which operand is the base address:
+ 	   If either operand is a symbol, then it is the base.  If
+ 	   either operand is a CONST_INT, then the other is the base.  */
+ 	if (CONST_INT_P (src_1) || CONSTANT_P (src_0))
+ 	  return find_base_value (src_0);
+ 	else if (CONST_INT_P (src_0) || CONSTANT_P (src_1))
+ 	  return find_base_value (src_1);
+ 
+ 	return 0;
+       }
+ 
+     case LO_SUM:
+       /* The standard form is (lo_sum reg sym) so look only at the
+ 	 second operand.  */
+       return find_base_value (XEXP (src, 1));
+ 
+     case AND:
+       /* Look through aligning ANDs.  And AND with zero or one with
+          the LSB set isn't one (see for example PR92462).  */
+       if (CONST_INT_P (XEXP (src, 1))
+ 	  && INTVAL (XEXP (src, 1)) != 0
+ 	  && (INTVAL (XEXP (src, 1)) & 1) == 0)
+ 	return find_base_value (XEXP (src, 0));
+       return 0;
+ 
+     case TRUNCATE:
+       /* As we do not know which address space the pointer is referring to, we can
+ 	 handle this only if the target does not support different pointer or
+ 	 address modes depending on the address space.  */
+       if (!target_default_pointer_address_modes_p ())
+ 	break;
+       if (!is_a <scalar_int_mode> (GET_MODE (src), &int_mode)
+ 	  || GET_MODE_PRECISION (int_mode) < GET_MODE_PRECISION (Pmode))
+ 	break;
+       /* Fall through.  */
+     case HIGH:
+     case PRE_INC:
+     case PRE_DEC:
+     case POST_INC:
+     case POST_DEC:
+     case PRE_MODIFY:
+     case POST_MODIFY:
+       return find_base_value (XEXP (src, 0));
+ 
+     case ZERO_EXTEND:
+     case SIGN_EXTEND:	/* used for NT/Alpha pointers */
+       /* As we do not know which address space the pointer is referring to, we can
+ 	 handle this only if the target does not support different pointer or
+ 	 address modes depending on the address space.  */
+       if (!target_default_pointer_address_modes_p ())
+ 	break;
+ 
+       {
+ 	rtx temp = find_base_value (XEXP (src, 0));
+ 
+ 	if (temp != 0 && CONSTANT_P (temp))
+ 	  temp = convert_memory_address (Pmode, temp);
+ 
+ 	return temp;
+       }
+ 
+     default:
+       break;
+     }
+ 
+   return 0;
+ }
+ 
+ /* Called from init_alias_analysis indirectly through note_stores,
+    or directly if DEST is a register with a REG_NOALIAS note attached.
+    SET is null in the latter case.  */
+ 
+ /* While scanning insns to find base values, reg_seen[N] is nonzero if
+    register N has been set in this function.  */
+ static sbitmap reg_seen;
+ 
+ static void
+ record_set (rtx dest, const_rtx set, void *data ATTRIBUTE_UNUSED)
+ {
+   unsigned regno;
+   rtx src;
+   int n;
+ 
+   if (!REG_P (dest))
+     return;
+ 
+   regno = REGNO (dest);
+ 
+   gcc_checking_assert (regno < reg_base_value->length ());
+ 
+   n = REG_NREGS (dest);
+   if (n != 1)
+     {
+       while (--n >= 0)
+ 	{
+ 	  bitmap_set_bit (reg_seen, regno + n);
+ 	  new_reg_base_value[regno + n] = 0;
+ 	}
+       return;
+     }
+ 
+   if (set)
+     {
+       /* A CLOBBER wipes out any old value but does not prevent a previously
+ 	 unset register from acquiring a base address (i.e. reg_seen is not
+ 	 set).  */
+       if (GET_CODE (set) == CLOBBER)
+ 	{
+ 	  new_reg_base_value[regno] = 0;
+ 	  return;
+ 	}
+ 
+       src = SET_SRC (set);
+     }
+   else
+     {
+       /* There's a REG_NOALIAS note against DEST.  */
+       if (bitmap_bit_p (reg_seen, regno))
+ 	{
+ 	  new_reg_base_value[regno] = 0;
+ 	  return;
+ 	}
+       bitmap_set_bit (reg_seen, regno);
+       new_reg_base_value[regno] = unique_base_value (unique_id++);
+       return;
+     }
+ 
+   /* If this is not the first set of REGNO, see whether the new value
+      is related to the old one.  There are two cases of interest:
+ 
+ 	(1) The register might be assigned an entirely new value
+ 	    that has the same base term as the original set.
+ 
+ 	(2) The set might be a simple self-modification that
+ 	    cannot change REGNO's base value.
+ 
+      If neither case holds, reject the original base value as invalid.
+      Note that the following situation is not detected:
+ 
+ 	 extern int x, y;  int *p = &x; p += (&y-&x);
+ 
+      ANSI C does not allow computing the difference of addresses
+      of distinct top level objects.  */
+   if (new_reg_base_value[regno] != 0
+       && find_base_value (src) != new_reg_base_value[regno])
+     switch (GET_CODE (src))
+       {
+       case LO_SUM:
+       case MINUS:
+ 	if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
+ 	  new_reg_base_value[regno] = 0;
+ 	break;
+       case PLUS:
+ 	/* If the value we add in the PLUS is also a valid base value,
+ 	   this might be the actual base value, and the original value
+ 	   an index.  */
+ 	{
+ 	  rtx other = NULL_RTX;
+ 
+ 	  if (XEXP (src, 0) == dest)
+ 	    other = XEXP (src, 1);
+ 	  else if (XEXP (src, 1) == dest)
+ 	    other = XEXP (src, 0);
+ 
+ 	  if (! other || find_base_value (other))
+ 	    new_reg_base_value[regno] = 0;
+ 	  break;
+ 	}
+       case AND:
+ 	if (XEXP (src, 0) != dest || !CONST_INT_P (XEXP (src, 1)))
+ 	  new_reg_base_value[regno] = 0;
+ 	break;
+       default:
+ 	new_reg_base_value[regno] = 0;
+ 	break;
+       }
+   /* If this is the first set of a register, record the value.  */
+   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
+ 	   && ! bitmap_bit_p (reg_seen, regno) && new_reg_base_value[regno] == 0)
+     new_reg_base_value[regno] = find_base_value (src);
+ 
+   bitmap_set_bit (reg_seen, regno);
+ }
+ 
+ /* Return REG_BASE_VALUE for REGNO.  Selective scheduler uses this to avoid
+    using hard registers with non-null REG_BASE_VALUE for renaming.  */
+ rtx
+ get_reg_base_value (unsigned int regno)
+ {
+   return (*reg_base_value)[regno];
+ }
+ 
+ /* If a value is known for REGNO, return it.  */
+ 
+ rtx
+ get_reg_known_value (unsigned int regno)
+ {
+   if (regno >= FIRST_PSEUDO_REGISTER)
+     {
+       regno -= FIRST_PSEUDO_REGISTER;
+       if (regno < vec_safe_length (reg_known_value))
+ 	return (*reg_known_value)[regno];
+     }
+   return NULL;
+ }
+ 
+ /* Set it.  */
+ 
+ static void
+ set_reg_known_value (unsigned int regno, rtx val)
+ {
+   if (regno >= FIRST_PSEUDO_REGISTER)
+     {
+       regno -= FIRST_PSEUDO_REGISTER;
+       if (regno < vec_safe_length (reg_known_value))
+ 	(*reg_known_value)[regno] = val;
+     }
+ }
+ 
+ /* Similarly for reg_known_equiv_p.  */
+ 
+ bool
+ get_reg_known_equiv_p (unsigned int regno)
+ {
+   if (regno >= FIRST_PSEUDO_REGISTER)
+     {
+       regno -= FIRST_PSEUDO_REGISTER;
+       if (regno < vec_safe_length (reg_known_value))
+ 	return bitmap_bit_p (reg_known_equiv_p, regno);
+     }
+   return false;
+ }
+ 
+ static void
+ set_reg_known_equiv_p (unsigned int regno, bool val)
+ {
+   if (regno >= FIRST_PSEUDO_REGISTER)
+     {
+       regno -= FIRST_PSEUDO_REGISTER;
+       if (regno < vec_safe_length (reg_known_value))
+ 	{
+ 	  if (val)
+ 	    bitmap_set_bit (reg_known_equiv_p, regno);
+ 	  else
+ 	    bitmap_clear_bit (reg_known_equiv_p, regno);
+ 	}
+     }
+ }
+ 
+ 
+ /* Returns a canonical version of X, from the point of view alias
+    analysis.  (For example, if X is a MEM whose address is a register,
+    and the register has a known value (say a SYMBOL_REF), then a MEM
+    whose address is the SYMBOL_REF is returned.)  */
+ 
+ rtx
+ canon_rtx (rtx x)
+ {
+   /* Recursively look for equivalences.  */
+   if (REG_P (x) && REGNO (x) >= FIRST_PSEUDO_REGISTER)
+     {
+       rtx t = get_reg_known_value (REGNO (x));
+       if (t == x)
+ 	return x;
+       if (t)
+ 	return canon_rtx (t);
+     }
+ 
+   if (GET_CODE (x) == PLUS)
+     {
+       rtx x0 = canon_rtx (XEXP (x, 0));
+       rtx x1 = canon_rtx (XEXP (x, 1));
+ 
+       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
+ 	return simplify_gen_binary (PLUS, GET_MODE (x), x0, x1);
+     }
+ 
+   /* This gives us much better alias analysis when called from
+      the loop optimizer.   Note we want to leave the original
+      MEM alone, but need to return the canonicalized MEM with
+      all the flags with their original values.  */
+   else if (MEM_P (x))
+     x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
+ 
+   return x;
+ }
+ 
+ /* Return 1 if X and Y are identical-looking rtx's.
+    Expect that X and Y has been already canonicalized.
+ 
+    We use the data in reg_known_value above to see if two registers with
+    different numbers are, in fact, equivalent.  */
+ 
+ static int
+ rtx_equal_for_memref_p (const_rtx x, const_rtx y)
+ {
+   int i;
+   int j;
+   enum rtx_code code;
+   const char *fmt;
+ 
+   if (x == 0 && y == 0)
+     return 1;
+   if (x == 0 || y == 0)
+     return 0;
+ 
+   if (x == y)
+     return 1;
+ 
+   code = GET_CODE (x);
+   /* Rtx's of different codes cannot be equal.  */
+   if (code != GET_CODE (y))
+     return 0;
+ 
+   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
+      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
+ 
+   if (GET_MODE (x) != GET_MODE (y))
+     return 0;
+ 
+   /* Some RTL can be compared without a recursive examination.  */
+   switch (code)
+     {
+     case REG:
+       return REGNO (x) == REGNO (y);
+ 
+     case LABEL_REF:
+       return label_ref_label (x) == label_ref_label (y);
+ 
+     case SYMBOL_REF:
+       {
+ 	HOST_WIDE_INT distance = 0;
+ 	return (compare_base_symbol_refs (x, y, &distance) == 1
+ 		&& distance == 0);
+       }
+ 
+     case ENTRY_VALUE:
+       /* This is magic, don't go through canonicalization et al.  */
+       return rtx_equal_p (ENTRY_VALUE_EXP (x), ENTRY_VALUE_EXP (y));
+ 
+     case VALUE:
+     CASE_CONST_UNIQUE:
+       /* Pointer equality guarantees equality for these nodes.  */
+       return 0;
+ 
+     default:
+       break;
+     }
+ 
+   /* canon_rtx knows how to handle plus.  No need to canonicalize.  */
+   if (code == PLUS)
+     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
+ 	     && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
+ 	    || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
+ 		&& rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
+   /* For commutative operations, the RTX match if the operand match in any
+      order.  Also handle the simple binary and unary cases without a loop.  */
+   if (COMMUTATIVE_P (x))
+     {
+       rtx xop0 = canon_rtx (XEXP (x, 0));
+       rtx yop0 = canon_rtx (XEXP (y, 0));
+       rtx yop1 = canon_rtx (XEXP (y, 1));
+ 
+       return ((rtx_equal_for_memref_p (xop0, yop0)
+ 	       && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop1))
+ 	      || (rtx_equal_for_memref_p (xop0, yop1)
+ 		  && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop0)));
+     }
+   else if (NON_COMMUTATIVE_P (x))
+     {
+       return (rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
+ 				      canon_rtx (XEXP (y, 0)))
+ 	      && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)),
+ 					 canon_rtx (XEXP (y, 1))));
+     }
+   else if (UNARY_P (x))
+     return rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
+ 				   canon_rtx (XEXP (y, 0)));
+ 
+   /* Compare the elements.  If any pair of corresponding elements
+      fail to match, return 0 for the whole things.
+ 
+      Limit cases to types which actually appear in addresses.  */
+ 
+   fmt = GET_RTX_FORMAT (code);
+   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
+     {
+       switch (fmt[i])
+ 	{
+ 	case 'i':
+ 	  if (XINT (x, i) != XINT (y, i))
+ 	    return 0;
+ 	  break;
+ 
+ 	case 'p':
+ 	  if (maybe_ne (SUBREG_BYTE (x), SUBREG_BYTE (y)))
+ 	    return 0;
+ 	  break;
+ 
+ 	case 'E':
+ 	  /* Two vectors must have the same length.  */
+ 	  if (XVECLEN (x, i) != XVECLEN (y, i))
+ 	    return 0;
+ 
+ 	  /* And the corresponding elements must match.  */
+ 	  for (j = 0; j < XVECLEN (x, i); j++)
+ 	    if (rtx_equal_for_memref_p (canon_rtx (XVECEXP (x, i, j)),
+ 					canon_rtx (XVECEXP (y, i, j))) == 0)
+ 	      return 0;
+ 	  break;
+ 
+ 	case 'e':
+ 	  if (rtx_equal_for_memref_p (canon_rtx (XEXP (x, i)),
+ 				      canon_rtx (XEXP (y, i))) == 0)
+ 	    return 0;
+ 	  break;
+ 
+ 	  /* This can happen for asm operands.  */
+ 	case 's':
+ 	  if (strcmp (XSTR (x, i), XSTR (y, i)))
+ 	    return 0;
+ 	  break;
+ 
+ 	/* This can happen for an asm which clobbers memory.  */
+ 	case '0':
+ 	  break;
+ 
+ 	  /* It is believed that rtx's at this level will never
+ 	     contain anything but integers and other rtx's,
+ 	     except for within LABEL_REFs and SYMBOL_REFs.  */
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+     }
+   return 1;
+ }
+ 
+ static rtx
+ find_base_term (rtx x, vec<std::pair<cselib_val *,
+ 				     struct elt_loc_list *> > &visited_vals)
+ {
+   cselib_val *val;
+   struct elt_loc_list *l, *f;
+   rtx ret;
+   scalar_int_mode int_mode;
+ 
+ #if defined (FIND_BASE_TERM)
+   /* Try machine-dependent ways to find the base term.  */
+   x = FIND_BASE_TERM (x);
+ #endif
+ 
+   switch (GET_CODE (x))
+     {
+     case REG:
+       return REG_BASE_VALUE (x);
+ 
+     case TRUNCATE:
+       /* As we do not know which address space the pointer is referring to, we can
+ 	 handle this only if the target does not support different pointer or
+ 	 address modes depending on the address space.  */
+       if (!target_default_pointer_address_modes_p ())
+ 	return 0;
+       if (!is_a <scalar_int_mode> (GET_MODE (x), &int_mode)
+ 	  || GET_MODE_PRECISION (int_mode) < GET_MODE_PRECISION (Pmode))
+ 	return 0;
+       /* Fall through.  */
+     case HIGH:
+     case PRE_INC:
+     case PRE_DEC:
+     case POST_INC:
+     case POST_DEC:
+     case PRE_MODIFY:
+     case POST_MODIFY:
+       return find_base_term (XEXP (x, 0), visited_vals);
+ 
+     case ZERO_EXTEND:
+     case SIGN_EXTEND:	/* Used for Alpha/NT pointers */
+       /* As we do not know which address space the pointer is referring to, we can
+ 	 handle this only if the target does not support different pointer or
+ 	 address modes depending on the address space.  */
+       if (!target_default_pointer_address_modes_p ())
+ 	return 0;
+ 
+       {
+ 	rtx temp = find_base_term (XEXP (x, 0), visited_vals);
+ 
+ 	if (temp != 0 && CONSTANT_P (temp))
+ 	  temp = convert_memory_address (Pmode, temp);
+ 
+ 	return temp;
+       }
+ 
+     case VALUE:
+       val = CSELIB_VAL_PTR (x);
+       ret = NULL_RTX;
+ 
+       if (!val)
+ 	return ret;
+ 
+       if (cselib_sp_based_value_p (val))
+ 	return static_reg_base_value[STACK_POINTER_REGNUM];
+ 
+       if (visited_vals.length () > (unsigned) param_max_find_base_term_values)
+ 	return ret;
+ 
+       f = val->locs;
+       /* Reset val->locs to avoid infinite recursion.  */
+       if (f)
+ 	visited_vals.safe_push (std::make_pair (val, f));
+       val->locs = NULL;
+ 
+       for (l = f; l; l = l->next)
+ 	if (GET_CODE (l->loc) == VALUE
+ 	    && CSELIB_VAL_PTR (l->loc)->locs
+ 	    && !CSELIB_VAL_PTR (l->loc)->locs->next
+ 	    && CSELIB_VAL_PTR (l->loc)->locs->loc == x)
+ 	  continue;
+ 	else if ((ret = find_base_term (l->loc, visited_vals)) != 0)
+ 	  break;
+ 
+       return ret;
+ 
+     case LO_SUM:
+       /* The standard form is (lo_sum reg sym) so look only at the
+          second operand.  */
+       return find_base_term (XEXP (x, 1), visited_vals);
+ 
+     case CONST:
+       x = XEXP (x, 0);
+       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
+ 	return 0;
+       /* Fall through.  */
+     case PLUS:
+     case MINUS:
+       {
+ 	rtx tmp1 = XEXP (x, 0);
+ 	rtx tmp2 = XEXP (x, 1);
+ 
+ 	/* This is a little bit tricky since we have to determine which of
+ 	   the two operands represents the real base address.  Otherwise this
+ 	   routine may return the index register instead of the base register.
+ 
+ 	   That may cause us to believe no aliasing was possible, when in
+ 	   fact aliasing is possible.
+ 
+ 	   We use a few simple tests to guess the base register.  Additional
+ 	   tests can certainly be added.  For example, if one of the operands
+ 	   is a shift or multiply, then it must be the index register and the
+ 	   other operand is the base register.  */
+ 
+ 	if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
+ 	  return find_base_term (tmp2, visited_vals);
+ 
+ 	/* If either operand is known to be a pointer, then prefer it
+ 	   to determine the base term.  */
+ 	if (REG_P (tmp1) && REG_POINTER (tmp1))
+ 	  ;
+ 	else if (REG_P (tmp2) && REG_POINTER (tmp2))
+ 	  std::swap (tmp1, tmp2);
+ 	/* If second argument is constant which has base term, prefer it
+ 	   over variable tmp1.  See PR64025.  */
+ 	else if (CONSTANT_P (tmp2) && !CONST_INT_P (tmp2))
+ 	  std::swap (tmp1, tmp2);
+ 
+ 	/* Go ahead and find the base term for both operands.  If either base
+ 	   term is from a pointer or is a named object or a special address
+ 	   (like an argument or stack reference), then use it for the
+ 	   base term.  */
+ 	rtx base = find_base_term (tmp1, visited_vals);
+ 	if (base != NULL_RTX
+ 	    && ((REG_P (tmp1) && REG_POINTER (tmp1))
+ 		 || known_base_value_p (base)))
+ 	  return base;
+ 	base = find_base_term (tmp2, visited_vals);
+ 	if (base != NULL_RTX
+ 	    && ((REG_P (tmp2) && REG_POINTER (tmp2))
+ 		 || known_base_value_p (base)))
+ 	  return base;
+ 
+ 	/* We could not determine which of the two operands was the
+ 	   base register and which was the index.  So we can determine
+ 	   nothing from the base alias check.  */
+ 	return 0;
+       }
+ 
+     case AND:
+       /* Look through aligning ANDs.  And AND with zero or one with
+          the LSB set isn't one (see for example PR92462).  */
+       if (CONST_INT_P (XEXP (x, 1))
+ 	  && INTVAL (XEXP (x, 1)) != 0
+ 	  && (INTVAL (XEXP (x, 1)) & 1) == 0)
+ 	return find_base_term (XEXP (x, 0), visited_vals);
+       return 0;
+ 
+     case SYMBOL_REF:
+     case LABEL_REF:
+       return x;
+ 
+     default:
+       return 0;
+     }
+ }
+ 
+ /* Wrapper around the worker above which removes locs from visited VALUEs
+    to avoid visiting them multiple times.  We unwind that changes here.  */
+ 
+ static rtx
+ find_base_term (rtx x)
+ {
+   auto_vec<std::pair<cselib_val *, struct elt_loc_list *>, 32> visited_vals;
+   rtx res = find_base_term (x, visited_vals);
+   for (unsigned i = 0; i < visited_vals.length (); ++i)
+     visited_vals[i].first->locs = visited_vals[i].second;
+   return res;
+ }
+ 
+ /* Return true if accesses to address X may alias accesses based
+    on the stack pointer.  */
+ 
+ bool
+ may_be_sp_based_p (rtx x)
+ {
+   rtx base = find_base_term (x);
+   return !base || base == static_reg_base_value[STACK_POINTER_REGNUM];
+ }
+ 
+ /* BASE1 and BASE2 are decls.  Return 1 if they refer to same object, 0
+    if they refer to different objects and -1 if we cannot decide.  */
+ 
+ int
+ compare_base_decls (tree base1, tree base2)
+ {
+   int ret;
+   gcc_checking_assert (DECL_P (base1) && DECL_P (base2));
+   if (base1 == base2)
+     return 1;
+ 
+   /* If we have two register decls with register specification we
+      cannot decide unless their assembler names are the same.  */
+   if (VAR_P (base1)
+       && VAR_P (base2)
+       && DECL_HARD_REGISTER (base1)
+       && DECL_HARD_REGISTER (base2)
+       && DECL_ASSEMBLER_NAME_SET_P (base1)
+       && DECL_ASSEMBLER_NAME_SET_P (base2))
+     {
+       if (DECL_ASSEMBLER_NAME_RAW (base1) == DECL_ASSEMBLER_NAME_RAW (base2))
+ 	return 1;
+       return -1;
+     }
+ 
+   /* Declarations of non-automatic variables may have aliases.  All other
+      decls are unique.  */
+   if (!decl_in_symtab_p (base1)
+       || !decl_in_symtab_p (base2))
+     return 0;
+ 
+   /* Don't cause symbols to be inserted by the act of checking.  */
+   symtab_node *node1 = symtab_node::get (base1);
+   if (!node1)
+     return 0;
+   symtab_node *node2 = symtab_node::get (base2);
+   if (!node2)
+     return 0;
+   
+   ret = node1->equal_address_to (node2, true);
+   return ret;
+ }
+ 
+ /* Compare SYMBOL_REFs X_BASE and Y_BASE.
+ 
+    - Return 1 if Y_BASE - X_BASE is constant, adding that constant
+      to *DISTANCE if DISTANCE is nonnull.
+ 
+    - Return 0 if no accesses based on X_BASE can alias Y_BASE.
+ 
+    - Return -1 if one of the two results applies, but we can't tell
+      which at compile time.  Update DISTANCE in the same way as
+      for a return value of 1, for the case in which that holds.  */
+ 
+ static int
+ compare_base_symbol_refs (const_rtx x_base, const_rtx y_base,
+ 			  HOST_WIDE_INT *distance)
+ {
+   tree x_decl = SYMBOL_REF_DECL (x_base);
+   tree y_decl = SYMBOL_REF_DECL (y_base);
+   bool binds_def = true;
+   bool swap = false;
+ 
+   if (XSTR (x_base, 0) == XSTR (y_base, 0))
+     return 1;
+   if (x_decl && y_decl)
+     return compare_base_decls (x_decl, y_decl);
+   if (x_decl || y_decl)
+     {
+       if (!x_decl)
+ 	{
+ 	  swap = true;
+ 	  std::swap (x_decl, y_decl);
+ 	  std::swap (x_base, y_base);
+ 	}
+       /* We handle specially only section anchors.  Other symbols are
+ 	 either equal (via aliasing) or refer to different objects.  */
+       if (!SYMBOL_REF_HAS_BLOCK_INFO_P (y_base))
+         return -1;
+       /* Anchors contains static VAR_DECLs and CONST_DECLs.  We are safe
+ 	 to ignore CONST_DECLs because they are readonly.  */
+       if (!VAR_P (x_decl)
+ 	  || (!TREE_STATIC (x_decl) && !TREE_PUBLIC (x_decl)))
+ 	return 0;
+ 
+       symtab_node *x_node = symtab_node::get_create (x_decl)
+ 			    ->ultimate_alias_target ();
+       /* External variable cannot be in section anchor.  */
+       if (!x_node->definition)
+ 	return 0;
+       x_base = XEXP (DECL_RTL (x_node->decl), 0);
+       /* If not in anchor, we can disambiguate.  */
+       if (!SYMBOL_REF_HAS_BLOCK_INFO_P (x_base))
+ 	return 0;
+ 
+       /* We have an alias of anchored variable.  If it can be interposed;
+  	 we must assume it may or may not alias its anchor.  */
+       binds_def = decl_binds_to_current_def_p (x_decl);
+     }
+   /* If we have variable in section anchor, we can compare by offset.  */
+   if (SYMBOL_REF_HAS_BLOCK_INFO_P (x_base)
+       && SYMBOL_REF_HAS_BLOCK_INFO_P (y_base))
+     {
+       if (SYMBOL_REF_BLOCK (x_base) != SYMBOL_REF_BLOCK (y_base))
+ 	return 0;
+       if (distance)
+ 	*distance += (swap ? -1 : 1) * (SYMBOL_REF_BLOCK_OFFSET (y_base)
+ 					- SYMBOL_REF_BLOCK_OFFSET (x_base));
+       return binds_def ? 1 : -1;
+     }
+   /* Either the symbols are equal (via aliasing) or they refer to
+      different objects.  */
+   return -1;
+ }
+ 
+ /* Return 0 if the addresses X and Y are known to point to different
+    objects, 1 if they might be pointers to the same object.  */
+ 
+ static int
+ base_alias_check (rtx x, rtx x_base, rtx y, rtx y_base,
+ 		  machine_mode x_mode, machine_mode y_mode)
+ {
+   /* If the address itself has no known base see if a known equivalent
+      value has one.  If either address still has no known base, nothing
+      is known about aliasing.  */
+   if (x_base == 0)
+     {
+       rtx x_c;
+ 
+       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
+ 	return 1;
+ 
+       x_base = find_base_term (x_c);
+       if (x_base == 0)
+ 	return 1;
+     }
+ 
+   if (y_base == 0)
+     {
+       rtx y_c;
+       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
+ 	return 1;
+ 
+       y_base = find_base_term (y_c);
+       if (y_base == 0)
+ 	return 1;
+     }
+ 
+   /* If the base addresses are equal nothing is known about aliasing.  */
+   if (rtx_equal_p (x_base, y_base))
+     return 1;
+ 
+   /* The base addresses are different expressions.  If they are not accessed
+      via AND, there is no conflict.  We can bring knowledge of object
+      alignment into play here.  For example, on alpha, "char a, b;" can
+      alias one another, though "char a; long b;" cannot.  AND addresses may
+      implicitly alias surrounding objects; i.e. unaligned access in DImode
+      via AND address can alias all surrounding object types except those
+      with aligment 8 or higher.  */
+   if (GET_CODE (x) == AND && GET_CODE (y) == AND)
+     return 1;
+   if (GET_CODE (x) == AND
+       && (!CONST_INT_P (XEXP (x, 1))
+ 	  || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
+     return 1;
+   if (GET_CODE (y) == AND
+       && (!CONST_INT_P (XEXP (y, 1))
+ 	  || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
+     return 1;
+ 
+   /* Differing symbols not accessed via AND never alias.  */
+   if (GET_CODE (x_base) == SYMBOL_REF && GET_CODE (y_base) == SYMBOL_REF)
+     return compare_base_symbol_refs (x_base, y_base) != 0;
+ 
+   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
+     return 0;
+ 
+   if (unique_base_value_p (x_base) || unique_base_value_p (y_base))
+     return 0;
+ 
+   return 1;
+ }
+ 
+ /* Return TRUE if EXPR refers to a VALUE whose uid is greater than
+    (or equal to) that of V.  */
+ 
+ static bool
+ refs_newer_value_p (const_rtx expr, rtx v)
+ {
+   int minuid = CSELIB_VAL_PTR (v)->uid;
+   subrtx_iterator::array_type array;
+   FOR_EACH_SUBRTX (iter, array, expr, NONCONST)
+     if (GET_CODE (*iter) == VALUE && CSELIB_VAL_PTR (*iter)->uid >= minuid)
+       return true;
+   return false;
+ }
+ 
+ /* Convert the address X into something we can use.  This is done by returning
+    it unchanged unless it is a VALUE or VALUE +/- constant; for VALUE
+    we call cselib to get a more useful rtx.  */
+ 
+ rtx
+ get_addr (rtx x)
+ {
+   cselib_val *v;
+   struct elt_loc_list *l;
+ 
+   if (GET_CODE (x) != VALUE)
+     {
+       if ((GET_CODE (x) == PLUS || GET_CODE (x) == MINUS)
+ 	  && GET_CODE (XEXP (x, 0)) == VALUE
+ 	  && CONST_SCALAR_INT_P (XEXP (x, 1)))
+ 	{
+ 	  rtx op0 = get_addr (XEXP (x, 0));
+ 	  if (op0 != XEXP (x, 0))
+ 	    {
+ 	      poly_int64 c;
+ 	      if (GET_CODE (x) == PLUS
+ 		  && poly_int_rtx_p (XEXP (x, 1), &c))
+ 		return plus_constant (GET_MODE (x), op0, c);
+ 	      return simplify_gen_binary (GET_CODE (x), GET_MODE (x),
+ 					  op0, XEXP (x, 1));
+ 	    }
+ 	}
+       return x;
+     }
+   v = CSELIB_VAL_PTR (x);
+   if (v)
+     {
+       bool have_equivs = cselib_have_permanent_equivalences ();
+       if (have_equivs)
+ 	v = canonical_cselib_val (v);
+       for (l = v->locs; l; l = l->next)
+ 	if (CONSTANT_P (l->loc))
+ 	  return l->loc;
+       for (l = v->locs; l; l = l->next)
+ 	if (!REG_P (l->loc) && !MEM_P (l->loc)
+ 	    /* Avoid infinite recursion when potentially dealing with
+ 	       var-tracking artificial equivalences, by skipping the
+ 	       equivalences themselves, and not choosing expressions
+ 	       that refer to newer VALUEs.  */
+ 	    && (!have_equivs
+ 		|| (GET_CODE (l->loc) != VALUE
+ 		    && !refs_newer_value_p (l->loc, x))))
+ 	  return l->loc;
+       if (have_equivs)
+ 	{
+ 	  for (l = v->locs; l; l = l->next)
+ 	    if (REG_P (l->loc)
+ 		|| (GET_CODE (l->loc) != VALUE
+ 		    && !refs_newer_value_p (l->loc, x)))
+ 	      return l->loc;
+ 	  /* Return the canonical value.  */
+ 	  return v->val_rtx;
+ 	}
+       if (v->locs)
+ 	return v->locs->loc;
+     }
+   return x;
+ }
+ 
+ /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
+     where SIZE is the size in bytes of the memory reference.  If ADDR
+     is not modified by the memory reference then ADDR is returned.  */
+ 
+ static rtx
+ addr_side_effect_eval (rtx addr, poly_int64 size, int n_refs)
+ {
+   poly_int64 offset = 0;
+ 
+   switch (GET_CODE (addr))
+     {
+     case PRE_INC:
+       offset = (n_refs + 1) * size;
+       break;
+     case PRE_DEC:
+       offset = -(n_refs + 1) * size;
+       break;
+     case POST_INC:
+       offset = n_refs * size;
+       break;
+     case POST_DEC:
+       offset = -n_refs * size;
+       break;
+ 
+     default:
+       return addr;
+     }
+ 
+   addr = plus_constant (GET_MODE (addr), XEXP (addr, 0), offset);
+   addr = canon_rtx (addr);
+ 
+   return addr;
+ }
+ 
+ /* Return TRUE if an object X sized at XSIZE bytes and another object
+    Y sized at YSIZE bytes, starting C bytes after X, may overlap.  If
+    any of the sizes is zero, assume an overlap, otherwise use the
+    absolute value of the sizes as the actual sizes.  */
+ 
+ static inline bool
+ offset_overlap_p (poly_int64 c, poly_int64 xsize, poly_int64 ysize)
+ {
+   if (known_eq (xsize, 0) || known_eq (ysize, 0))
+     return true;
+ 
+   if (maybe_ge (c, 0))
+     return maybe_gt (maybe_lt (xsize, 0) ? -xsize : xsize, c);
+   else
+     return maybe_gt (maybe_lt (ysize, 0) ? -ysize : ysize, -c);
+ }
+ 
+ /* Return one if X and Y (memory addresses) reference the
+    same location in memory or if the references overlap.
+    Return zero if they do not overlap, else return
+    minus one in which case they still might reference the same location.
+ 
+    C is an offset accumulator.  When
+    C is nonzero, we are testing aliases between X and Y + C.
+    XSIZE is the size in bytes of the X reference,
+    similarly YSIZE is the size in bytes for Y.
+    Expect that canon_rtx has been already called for X and Y.
+ 
+    If XSIZE or YSIZE is zero, we do not know the amount of memory being
+    referenced (the reference was BLKmode), so make the most pessimistic
+    assumptions.
+ 
+    If XSIZE or YSIZE is negative, we may access memory outside the object
+    being referenced as a side effect.  This can happen when using AND to
+    align memory references, as is done on the Alpha.
+ 
+    Nice to notice that varying addresses cannot conflict with fp if no
+    local variables had their addresses taken, but that's too hard now.
+ 
+    ???  Contrary to the tree alias oracle this does not return
+    one for X + non-constant and Y + non-constant when X and Y are equal.
+    If that is fixed the TBAA hack for union type-punning can be removed.  */
+ 
+ static int
+ memrefs_conflict_p (poly_int64 xsize, rtx x, poly_int64 ysize, rtx y,
+ 		    poly_int64 c)
+ {
+   if (GET_CODE (x) == VALUE)
+     {
+       if (REG_P (y))
+ 	{
+ 	  struct elt_loc_list *l = NULL;
+ 	  if (CSELIB_VAL_PTR (x))
+ 	    for (l = canonical_cselib_val (CSELIB_VAL_PTR (x))->locs;
+ 		 l; l = l->next)
+ 	      if (REG_P (l->loc) && rtx_equal_for_memref_p (l->loc, y))
+ 		break;
+ 	  if (l)
+ 	    x = y;
+ 	  else
+ 	    x = get_addr (x);
+ 	}
+       /* Don't call get_addr if y is the same VALUE.  */
+       else if (x != y)
+ 	x = get_addr (x);
+     }
+   if (GET_CODE (y) == VALUE)
+     {
+       if (REG_P (x))
+ 	{
+ 	  struct elt_loc_list *l = NULL;
+ 	  if (CSELIB_VAL_PTR (y))
+ 	    for (l = canonical_cselib_val (CSELIB_VAL_PTR (y))->locs;
+ 		 l; l = l->next)
+ 	      if (REG_P (l->loc) && rtx_equal_for_memref_p (l->loc, x))
+ 		break;
+ 	  if (l)
+ 	    y = x;
+ 	  else
+ 	    y = get_addr (y);
+ 	}
+       /* Don't call get_addr if x is the same VALUE.  */
+       else if (y != x)
+ 	y = get_addr (y);
+     }
+   if (GET_CODE (x) == HIGH)
+     x = XEXP (x, 0);
+   else if (GET_CODE (x) == LO_SUM)
+     x = XEXP (x, 1);
+   else
+     x = addr_side_effect_eval (x, maybe_lt (xsize, 0) ? -xsize : xsize, 0);
+   if (GET_CODE (y) == HIGH)
+     y = XEXP (y, 0);
+   else if (GET_CODE (y) == LO_SUM)
+     y = XEXP (y, 1);
+   else
+     y = addr_side_effect_eval (y, maybe_lt (ysize, 0) ? -ysize : ysize, 0);
+ 
+   if (GET_CODE (x) == SYMBOL_REF && GET_CODE (y) == SYMBOL_REF)
+     {
+       HOST_WIDE_INT distance = 0;
+       int cmp = compare_base_symbol_refs (x, y, &distance);
+ 
+       /* If both decls are the same, decide by offsets.  */
+       if (cmp == 1)
+ 	return offset_overlap_p (c + distance, xsize, ysize);
+       /* Assume a potential overlap for symbolic addresses that went
+ 	 through alignment adjustments (i.e., that have negative
+ 	 sizes), because we can't know how far they are from each
+ 	 other.  */
+       if (maybe_lt (xsize, 0) || maybe_lt (ysize, 0))
+ 	return -1;
+       /* If decls are different or we know by offsets that there is no overlap,
+ 	 we win.  */
+       if (!cmp || !offset_overlap_p (c + distance, xsize, ysize))
+ 	return 0;
+       /* Decls may or may not be different and offsets overlap....*/
+       return -1;
+     }
+   else if (rtx_equal_for_memref_p (x, y))
+     {
+       return offset_overlap_p (c, xsize, ysize);
+     }
+ 
+   /* This code used to check for conflicts involving stack references and
+      globals but the base address alias code now handles these cases.  */
+ 
+   if (GET_CODE (x) == PLUS)
+     {
+       /* The fact that X is canonicalized means that this
+ 	 PLUS rtx is canonicalized.  */
+       rtx x0 = XEXP (x, 0);
+       rtx x1 = XEXP (x, 1);
+ 
+       /* However, VALUEs might end up in different positions even in
+ 	 canonical PLUSes.  Comparing their addresses is enough.  */
+       if (x0 == y)
+ 	return memrefs_conflict_p (xsize, x1, ysize, const0_rtx, c);
+       else if (x1 == y)
+ 	return memrefs_conflict_p (xsize, x0, ysize, const0_rtx, c);
+ 
+       poly_int64 cx1, cy1;
+       if (GET_CODE (y) == PLUS)
+ 	{
+ 	  /* The fact that Y is canonicalized means that this
+ 	     PLUS rtx is canonicalized.  */
+ 	  rtx y0 = XEXP (y, 0);
+ 	  rtx y1 = XEXP (y, 1);
+ 
+ 	  if (x0 == y1)
+ 	    return memrefs_conflict_p (xsize, x1, ysize, y0, c);
+ 	  if (x1 == y0)
+ 	    return memrefs_conflict_p (xsize, x0, ysize, y1, c);
+ 
+ 	  if (rtx_equal_for_memref_p (x1, y1))
+ 	    return memrefs_conflict_p (xsize, x0, ysize, y0, c);
+ 	  if (rtx_equal_for_memref_p (x0, y0))
+ 	    return memrefs_conflict_p (xsize, x1, ysize, y1, c);
+ 	  if (poly_int_rtx_p (x1, &cx1))
+ 	    {
+ 	      if (poly_int_rtx_p (y1, &cy1))
+ 		return memrefs_conflict_p (xsize, x0, ysize, y0,
+ 					   c - cx1 + cy1);
+ 	      else
+ 		return memrefs_conflict_p (xsize, x0, ysize, y, c - cx1);
+ 	    }
+ 	  else if (poly_int_rtx_p (y1, &cy1))
+ 	    return memrefs_conflict_p (xsize, x, ysize, y0, c + cy1);
+ 
+ 	  return -1;
+ 	}
+       else if (poly_int_rtx_p (x1, &cx1))
+ 	return memrefs_conflict_p (xsize, x0, ysize, y, c - cx1);
+     }
+   else if (GET_CODE (y) == PLUS)
+     {
+       /* The fact that Y is canonicalized means that this
+ 	 PLUS rtx is canonicalized.  */
+       rtx y0 = XEXP (y, 0);
+       rtx y1 = XEXP (y, 1);
+ 
+       if (x == y0)
+ 	return memrefs_conflict_p (xsize, const0_rtx, ysize, y1, c);
+       if (x == y1)
+ 	return memrefs_conflict_p (xsize, const0_rtx, ysize, y0, c);
+ 
+       poly_int64 cy1;
+       if (poly_int_rtx_p (y1, &cy1))
+ 	return memrefs_conflict_p (xsize, x, ysize, y0, c + cy1);
+       else
+ 	return -1;
+     }
+ 
+   if (GET_CODE (x) == GET_CODE (y))
+     switch (GET_CODE (x))
+       {
+       case MULT:
+ 	{
+ 	  /* Handle cases where we expect the second operands to be the
+ 	     same, and check only whether the first operand would conflict
+ 	     or not.  */
+ 	  rtx x0, y0;
+ 	  rtx x1 = canon_rtx (XEXP (x, 1));
+ 	  rtx y1 = canon_rtx (XEXP (y, 1));
+ 	  if (! rtx_equal_for_memref_p (x1, y1))
+ 	    return -1;
+ 	  x0 = canon_rtx (XEXP (x, 0));
+ 	  y0 = canon_rtx (XEXP (y, 0));
+ 	  if (rtx_equal_for_memref_p (x0, y0))
+ 	    return offset_overlap_p (c, xsize, ysize);
+ 
+ 	  /* Can't properly adjust our sizes.  */
+ 	  poly_int64 c1;
+ 	  if (!poly_int_rtx_p (x1, &c1)
+ 	      || !can_div_trunc_p (xsize, c1, &xsize)
+ 	      || !can_div_trunc_p (ysize, c1, &ysize)
+ 	      || !can_div_trunc_p (c, c1, &c))
+ 	    return -1;
+ 	  return memrefs_conflict_p (xsize, x0, ysize, y0, c);
+ 	}
+ 
+       default:
+ 	break;
+       }
+ 
+   /* Deal with alignment ANDs by adjusting offset and size so as to
+      cover the maximum range, without taking any previously known
+      alignment into account.  Make a size negative after such an
+      adjustments, so that, if we end up with e.g. two SYMBOL_REFs, we
+      assume a potential overlap, because they may end up in contiguous
+      memory locations and the stricter-alignment access may span over
+      part of both.  */
+   if (GET_CODE (x) == AND && CONST_INT_P (XEXP (x, 1)))
+     {
+       HOST_WIDE_INT sc = INTVAL (XEXP (x, 1));
+       unsigned HOST_WIDE_INT uc = sc;
+       if (sc < 0 && pow2_or_zerop (-uc))
+ 	{
+ 	  if (maybe_gt (xsize, 0))
+ 	    xsize = -xsize;
+ 	  if (maybe_ne (xsize, 0))
+ 	    xsize += sc + 1;
+ 	  c -= sc + 1;
+ 	  return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
+ 				     ysize, y, c);
+ 	}
+     }
+   if (GET_CODE (y) == AND && CONST_INT_P (XEXP (y, 1)))
+     {
+       HOST_WIDE_INT sc = INTVAL (XEXP (y, 1));
+       unsigned HOST_WIDE_INT uc = sc;
+       if (sc < 0 && pow2_or_zerop (-uc))
+ 	{
+ 	  if (maybe_gt (ysize, 0))
+ 	    ysize = -ysize;
+ 	  if (maybe_ne (ysize, 0))
+ 	    ysize += sc + 1;
+ 	  c += sc + 1;
+ 	  return memrefs_conflict_p (xsize, x,
+ 				     ysize, canon_rtx (XEXP (y, 0)), c);
+ 	}
+     }
+ 
+   if (CONSTANT_P (x))
+     {
+       poly_int64 cx, cy;
+       if (poly_int_rtx_p (x, &cx) && poly_int_rtx_p (y, &cy))
+ 	{
+ 	  c += cy - cx;
+ 	  return offset_overlap_p (c, xsize, ysize);
+ 	}
+ 
+       if (GET_CODE (x) == CONST)
+ 	{
+ 	  if (GET_CODE (y) == CONST)
+ 	    return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
+ 				       ysize, canon_rtx (XEXP (y, 0)), c);
+ 	  else
+ 	    return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
+ 				       ysize, y, c);
+ 	}
+       if (GET_CODE (y) == CONST)
+ 	return memrefs_conflict_p (xsize, x, ysize,
+ 				   canon_rtx (XEXP (y, 0)), c);
+ 
+       /* Assume a potential overlap for symbolic addresses that went
+ 	 through alignment adjustments (i.e., that have negative
+ 	 sizes), because we can't know how far they are from each
+ 	 other.  */
+       if (CONSTANT_P (y))
+ 	return (maybe_lt (xsize, 0)
+ 		|| maybe_lt (ysize, 0)
+ 		|| offset_overlap_p (c, xsize, ysize));
+ 
+       return -1;
+     }
+ 
+   return -1;
+ }
+ 
+ /* Functions to compute memory dependencies.
+ 
+    Since we process the insns in execution order, we can build tables
+    to keep track of what registers are fixed (and not aliased), what registers
+    are varying in known ways, and what registers are varying in unknown
+    ways.
+ 
+    If both memory references are volatile, then there must always be a
+    dependence between the two references, since their order cannot be
+    changed.  A volatile and non-volatile reference can be interchanged
+    though.
+ 
+    We also must allow AND addresses, because they may generate accesses
+    outside the object being referenced.  This is used to generate aligned
+    addresses from unaligned addresses, for instance, the alpha
+    storeqi_unaligned pattern.  */
+ 
+ /* Read dependence: X is read after read in MEM takes place.  There can
+    only be a dependence here if both reads are volatile, or if either is
+    an explicit barrier.  */
+ 
+ int
+ read_dependence (const_rtx mem, const_rtx x)
+ {
+   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
+     return true;
+   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
+       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
+     return true;
+   return false;
+ }
+ 
+ /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it.  */
+ 
+ static tree
+ decl_for_component_ref (tree x)
+ {
+   do
+     {
+       x = TREE_OPERAND (x, 0);
+     }
+   while (x && TREE_CODE (x) == COMPONENT_REF);
+ 
+   return x && DECL_P (x) ? x : NULL_TREE;
+ }
+ 
+ /* Walk up the COMPONENT_REF list in X and adjust *OFFSET to compensate
+    for the offset of the field reference.  *KNOWN_P says whether the
+    offset is known.  */
+ 
+ static void
+ adjust_offset_for_component_ref (tree x, bool *known_p,
+ 				 poly_int64 *offset)
+ {
+   if (!*known_p)
+     return;
+   do
+     {
+       tree xoffset = component_ref_field_offset (x);
+       tree field = TREE_OPERAND (x, 1);
+       if (!poly_int_tree_p (xoffset))
+ 	{
+ 	  *known_p = false;
+ 	  return;
+ 	}
+ 
+       poly_offset_int woffset
+ 	= (wi::to_poly_offset (xoffset)
+ 	   + (wi::to_offset (DECL_FIELD_BIT_OFFSET (field))
+ 	      >> LOG2_BITS_PER_UNIT)
+ 	   + *offset);
+       if (!woffset.to_shwi (offset))
+ 	{
+ 	  *known_p = false;
+ 	  return;
+ 	}
+ 
+       x = TREE_OPERAND (x, 0);
+     }
+   while (x && TREE_CODE (x) == COMPONENT_REF);
+ }
+ 
+ /* Return nonzero if we can determine the exprs corresponding to memrefs
+    X and Y and they do not overlap. 
+    If LOOP_VARIANT is set, skip offset-based disambiguation */
+ 
+ int
+ nonoverlapping_memrefs_p (const_rtx x, const_rtx y, bool loop_invariant)
+ {
+   tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
+   rtx rtlx, rtly;
+   rtx basex, basey;
+   bool moffsetx_known_p, moffsety_known_p;
+   poly_int64 moffsetx = 0, moffsety = 0;
+   poly_int64 offsetx = 0, offsety = 0, sizex, sizey;
+ 
+   /* Unless both have exprs, we can't tell anything.  */
+   if (exprx == 0 || expry == 0)
+     return 0;
+ 
+   /* For spill-slot accesses make sure we have valid offsets.  */
+   if ((exprx == get_spill_slot_decl (false)
+        && ! MEM_OFFSET_KNOWN_P (x))
+       || (expry == get_spill_slot_decl (false)
+ 	  && ! MEM_OFFSET_KNOWN_P (y)))
+     return 0;
+ 
+   /* If the field reference test failed, look at the DECLs involved.  */
+   moffsetx_known_p = MEM_OFFSET_KNOWN_P (x);
+   if (moffsetx_known_p)
+     moffsetx = MEM_OFFSET (x);
+   if (TREE_CODE (exprx) == COMPONENT_REF)
+     {
+       tree t = decl_for_component_ref (exprx);
+       if (! t)
+ 	return 0;
+       adjust_offset_for_component_ref (exprx, &moffsetx_known_p, &moffsetx);
+       exprx = t;
+     }
+ 
+   moffsety_known_p = MEM_OFFSET_KNOWN_P (y);
+   if (moffsety_known_p)
+     moffsety = MEM_OFFSET (y);
+   if (TREE_CODE (expry) == COMPONENT_REF)
+     {
+       tree t = decl_for_component_ref (expry);
+       if (! t)
+ 	return 0;
+       adjust_offset_for_component_ref (expry, &moffsety_known_p, &moffsety);
+       expry = t;
+     }
+ 
+   if (! DECL_P (exprx) || ! DECL_P (expry))
+     return 0;
+ 
+   /* If we refer to different gimple registers, or one gimple register
+      and one non-gimple-register, we know they can't overlap.  First,
+      gimple registers don't have their addresses taken.  Now, there
+      could be more than one stack slot for (different versions of) the
+      same gimple register, but we can presumably tell they don't
+      overlap based on offsets from stack base addresses elsewhere.
+      It's important that we don't proceed to DECL_RTL, because gimple
+      registers may not pass DECL_RTL_SET_P, and make_decl_rtl won't be
+      able to do anything about them since no SSA information will have
+      remained to guide it.  */
+   if (is_gimple_reg (exprx) || is_gimple_reg (expry))
+     return exprx != expry
+       || (moffsetx_known_p && moffsety_known_p
+ 	  && MEM_SIZE_KNOWN_P (x) && MEM_SIZE_KNOWN_P (y)
+ 	  && !offset_overlap_p (moffsety - moffsetx,
+ 				MEM_SIZE (x), MEM_SIZE (y)));
+ 
+   /* With invalid code we can end up storing into the constant pool.
+      Bail out to avoid ICEing when creating RTL for this.
+      See gfortran.dg/lto/20091028-2_0.f90.  */
+   if (TREE_CODE (exprx) == CONST_DECL
+       || TREE_CODE (expry) == CONST_DECL)
+     return 1;
+ 
+   /* If one decl is known to be a function or label in a function and
+      the other is some kind of data, they can't overlap.  */
+   if ((TREE_CODE (exprx) == FUNCTION_DECL
+        || TREE_CODE (exprx) == LABEL_DECL)
+       != (TREE_CODE (expry) == FUNCTION_DECL
+ 	  || TREE_CODE (expry) == LABEL_DECL))
+     return 1;
+ 
+   /* If either of the decls doesn't have DECL_RTL set (e.g. marked as
+      living in multiple places), we can't tell anything.  Exception
+      are FUNCTION_DECLs for which we can create DECL_RTL on demand.  */
+   if ((!DECL_RTL_SET_P (exprx) && TREE_CODE (exprx) != FUNCTION_DECL)
+       || (!DECL_RTL_SET_P (expry) && TREE_CODE (expry) != FUNCTION_DECL))
+     return 0;
+ 
+   rtlx = DECL_RTL (exprx);
+   rtly = DECL_RTL (expry);
+ 
+   /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
+      can't overlap unless they are the same because we never reuse that part
+      of the stack frame used for locals for spilled pseudos.  */
+   if ((!MEM_P (rtlx) || !MEM_P (rtly))
+       && ! rtx_equal_p (rtlx, rtly))
+     return 1;
+ 
+   /* If we have MEMs referring to different address spaces (which can
+      potentially overlap), we cannot easily tell from the addresses
+      whether the references overlap.  */
+   if (MEM_P (rtlx) && MEM_P (rtly)
+       && MEM_ADDR_SPACE (rtlx) != MEM_ADDR_SPACE (rtly))
+     return 0;
+ 
+   /* Get the base and offsets of both decls.  If either is a register, we
+      know both are and are the same, so use that as the base.  The only
+      we can avoid overlap is if we can deduce that they are nonoverlapping
+      pieces of that decl, which is very rare.  */
+   basex = MEM_P (rtlx) ? XEXP (rtlx, 0) : rtlx;
+   basex = strip_offset_and_add (basex, &offsetx);
+ 
+   basey = MEM_P (rtly) ? XEXP (rtly, 0) : rtly;
+   basey = strip_offset_and_add (basey, &offsety);
+ 
+   /* If the bases are different, we know they do not overlap if both
+      are constants or if one is a constant and the other a pointer into the
+      stack frame.  Otherwise a different base means we can't tell if they
+      overlap or not.  */
+   if (compare_base_decls (exprx, expry) == 0)
+     return ((CONSTANT_P (basex) && CONSTANT_P (basey))
+ 	    || (CONSTANT_P (basex) && REG_P (basey)
+ 		&& REGNO_PTR_FRAME_P (REGNO (basey)))
+ 	    || (CONSTANT_P (basey) && REG_P (basex)
+ 		&& REGNO_PTR_FRAME_P (REGNO (basex))));
+ 
+   /* Offset based disambiguation not appropriate for loop invariant */
+   if (loop_invariant)
+     return 0;
+ 
+   /* Offset based disambiguation is OK even if we do not know that the
+      declarations are necessarily different
+     (i.e. compare_base_decls (exprx, expry) == -1)  */
+ 
+   sizex = (!MEM_P (rtlx) ? poly_int64 (GET_MODE_SIZE (GET_MODE (rtlx)))
+ 	   : MEM_SIZE_KNOWN_P (rtlx) ? MEM_SIZE (rtlx)
+ 	   : -1);
+   sizey = (!MEM_P (rtly) ? poly_int64 (GET_MODE_SIZE (GET_MODE (rtly)))
+ 	   : MEM_SIZE_KNOWN_P (rtly) ? MEM_SIZE (rtly)
+ 	   : -1);
+ 
+   /* If we have an offset for either memref, it can update the values computed
+      above.  */
+   if (moffsetx_known_p)
+     offsetx += moffsetx, sizex -= moffsetx;
+   if (moffsety_known_p)
+     offsety += moffsety, sizey -= moffsety;
+ 
+   /* If a memref has both a size and an offset, we can use the smaller size.
+      We can't do this if the offset isn't known because we must view this
+      memref as being anywhere inside the DECL's MEM.  */
+   if (MEM_SIZE_KNOWN_P (x) && moffsetx_known_p)
+     sizex = MEM_SIZE (x);
+   if (MEM_SIZE_KNOWN_P (y) && moffsety_known_p)
+     sizey = MEM_SIZE (y);
+ 
+   return !ranges_maybe_overlap_p (offsetx, sizex, offsety, sizey);
+ }
+ 
+ /* Helper for true_dependence and canon_true_dependence.
+    Checks for true dependence: X is read after store in MEM takes place.
+ 
+    If MEM_CANONICALIZED is FALSE, then X_ADDR and MEM_ADDR should be
+    NULL_RTX, and the canonical addresses of MEM and X are both computed
+    here.  If MEM_CANONICALIZED, then MEM must be already canonicalized.
+ 
+    If X_ADDR is non-NULL, it is used in preference of XEXP (x, 0).
+ 
+    Returns 1 if there is a true dependence, 0 otherwise.  */
+ 
+ static int
+ true_dependence_1 (const_rtx mem, machine_mode mem_mode, rtx mem_addr,
+ 		   const_rtx x, rtx x_addr, bool mem_canonicalized)
+ {
+   rtx true_mem_addr;
+   rtx base;
+   int ret;
+ 
+   gcc_checking_assert (mem_canonicalized ? (mem_addr != NULL_RTX)
+ 		       : (mem_addr == NULL_RTX && x_addr == NULL_RTX));
+ 
+   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
+     return 1;
+ 
+   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
+      This is used in epilogue deallocation functions, and in cselib.  */
+   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
+     return 1;
+   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
+     return 1;
+   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
+       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
+     return 1;
+ 
+   if (! x_addr)
+     x_addr = XEXP (x, 0);
+   x_addr = get_addr (x_addr);
+ 
+   if (! mem_addr)
+     {
+       mem_addr = XEXP (mem, 0);
+       if (mem_mode == VOIDmode)
+ 	mem_mode = GET_MODE (mem);
+     }
+   true_mem_addr = get_addr (mem_addr);
+ 
+   /* Read-only memory is by definition never modified, and therefore can't
+      conflict with anything.  However, don't assume anything when AND
+      addresses are involved and leave to the code below to determine
+      dependence.  We don't expect to find read-only set on MEM, but
+      stupid user tricks can produce them, so don't die.  */
+   if (MEM_READONLY_P (x)
+       && GET_CODE (x_addr) != AND
+       && GET_CODE (true_mem_addr) != AND)
+     return 0;
+ 
+   /* If we have MEMs referring to different address spaces (which can
+      potentially overlap), we cannot easily tell from the addresses
+      whether the references overlap.  */
+   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
+     return 1;
+ 
+   base = find_base_term (x_addr);
+   if (base && (GET_CODE (base) == LABEL_REF
+ 	       || (GET_CODE (base) == SYMBOL_REF
+ 		   && CONSTANT_POOL_ADDRESS_P (base))))
+     return 0;
+ 
+   rtx mem_base = find_base_term (true_mem_addr);
+   if (! base_alias_check (x_addr, base, true_mem_addr, mem_base,
+ 			  GET_MODE (x), mem_mode))
+     return 0;
+ 
+   x_addr = canon_rtx (x_addr);
+   if (!mem_canonicalized)
+     mem_addr = canon_rtx (true_mem_addr);
+ 
+   if ((ret = memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
+ 				 SIZE_FOR_MODE (x), x_addr, 0)) != -1)
+     return ret;
+ 
+   if (mems_in_disjoint_alias_sets_p (x, mem))
+     return 0;
+ 
+   if (nonoverlapping_memrefs_p (mem, x, false))
+     return 0;
+ 
+   return rtx_refs_may_alias_p (x, mem, true);
+ }
+ 
+ /* True dependence: X is read after store in MEM takes place.  */
+ 
+ int
+ true_dependence (const_rtx mem, machine_mode mem_mode, const_rtx x)
+ {
+   return true_dependence_1 (mem, mem_mode, NULL_RTX,
+ 			    x, NULL_RTX, /*mem_canonicalized=*/false);
+ }
+ 
+ /* Canonical true dependence: X is read after store in MEM takes place.
+    Variant of true_dependence which assumes MEM has already been
+    canonicalized (hence we no longer do that here).
+    The mem_addr argument has been added, since true_dependence_1 computed
+    this value prior to canonicalizing.  */
+ 
+ int
+ canon_true_dependence (const_rtx mem, machine_mode mem_mode, rtx mem_addr,
+ 		       const_rtx x, rtx x_addr)
+ {
+   return true_dependence_1 (mem, mem_mode, mem_addr,
+ 			    x, x_addr, /*mem_canonicalized=*/true);
+ }
+ 
+ /* Returns nonzero if a write to X might alias a previous read from
+    (or, if WRITEP is true, a write to) MEM.
+    If X_CANONCALIZED is true, then X_ADDR is the canonicalized address of X,
+    and X_MODE the mode for that access.
+    If MEM_CANONICALIZED is true, MEM is canonicalized.  */
+ 
+ static int
+ write_dependence_p (const_rtx mem,
+ 		    const_rtx x, machine_mode x_mode, rtx x_addr,
+ 		    bool mem_canonicalized, bool x_canonicalized, bool writep)
+ {
+   rtx mem_addr;
+   rtx true_mem_addr, true_x_addr;
+   rtx base;
+   int ret;
+ 
+   gcc_checking_assert (x_canonicalized
+ 		       ? (x_addr != NULL_RTX
+ 			  && (x_mode != VOIDmode || GET_MODE (x) == VOIDmode))
+ 		       : (x_addr == NULL_RTX && x_mode == VOIDmode));
+ 
+   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
+     return 1;
+ 
+   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
+      This is used in epilogue deallocation functions.  */
+   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
+     return 1;
+   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
+     return 1;
+   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
+       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
+     return 1;
+ 
+   if (!x_addr)
+     x_addr = XEXP (x, 0);
+   true_x_addr = get_addr (x_addr);
+ 
+   mem_addr = XEXP (mem, 0);
+   true_mem_addr = get_addr (mem_addr);
+ 
+   /* A read from read-only memory can't conflict with read-write memory.
+      Don't assume anything when AND addresses are involved and leave to
+      the code below to determine dependence.  */
+   if (!writep
+       && MEM_READONLY_P (mem)
+       && GET_CODE (true_x_addr) != AND
+       && GET_CODE (true_mem_addr) != AND)
+     return 0;
+ 
+   /* If we have MEMs referring to different address spaces (which can
+      potentially overlap), we cannot easily tell from the addresses
+      whether the references overlap.  */
+   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
+     return 1;
+ 
+   base = find_base_term (true_mem_addr);
+   if (! writep
+       && base
+       && (GET_CODE (base) == LABEL_REF
+ 	  || (GET_CODE (base) == SYMBOL_REF
+ 	      && CONSTANT_POOL_ADDRESS_P (base))))
+     return 0;
+ 
+   rtx x_base = find_base_term (true_x_addr);
+   if (! base_alias_check (true_x_addr, x_base, true_mem_addr, base,
+ 			  GET_MODE (x), GET_MODE (mem)))
+     return 0;
+ 
+   if (!x_canonicalized)
+     {
+       x_addr = canon_rtx (true_x_addr);
+       x_mode = GET_MODE (x);
+     }
+   if (!mem_canonicalized)
+     mem_addr = canon_rtx (true_mem_addr);
+ 
+   if ((ret = memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
+ 				 GET_MODE_SIZE (x_mode), x_addr, 0)) != -1)
+     return ret;
+ 
+   if (nonoverlapping_memrefs_p (x, mem, false))
+     return 0;
+ 
+   return rtx_refs_may_alias_p (x, mem, false);
+ }
+ 
+ /* Anti dependence: X is written after read in MEM takes place.  */
+ 
+ int
+ anti_dependence (const_rtx mem, const_rtx x)
+ {
+   return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
+ 			     /*mem_canonicalized=*/false,
+ 			     /*x_canonicalized*/false, /*writep=*/false);
+ }
+ 
+ /* Likewise, but we already have a canonicalized MEM, and X_ADDR for X.
+    Also, consider X in X_MODE (which might be from an enclosing
+    STRICT_LOW_PART / ZERO_EXTRACT).
+    If MEM_CANONICALIZED is true, MEM is canonicalized.  */
+ 
+ int
+ canon_anti_dependence (const_rtx mem, bool mem_canonicalized,
+ 		       const_rtx x, machine_mode x_mode, rtx x_addr)
+ {
+   return write_dependence_p (mem, x, x_mode, x_addr,
+ 			     mem_canonicalized, /*x_canonicalized=*/true,
+ 			     /*writep=*/false);
+ }
+ 
+ /* Output dependence: X is written after store in MEM takes place.  */
+ 
+ int
+ output_dependence (const_rtx mem, const_rtx x)
+ {
+   return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
+ 			     /*mem_canonicalized=*/false,
+ 			     /*x_canonicalized*/false, /*writep=*/true);
+ }
+ 
+ /* Likewise, but we already have a canonicalized MEM, and X_ADDR for X.
+    Also, consider X in X_MODE (which might be from an enclosing
+    STRICT_LOW_PART / ZERO_EXTRACT).
+    If MEM_CANONICALIZED is true, MEM is canonicalized.  */
+ 
+ int
+ canon_output_dependence (const_rtx mem, bool mem_canonicalized,
+ 			 const_rtx x, machine_mode x_mode, rtx x_addr)
+ {
+   return write_dependence_p (mem, x, x_mode, x_addr,
+ 			     mem_canonicalized, /*x_canonicalized=*/true,
+ 			     /*writep=*/true);
+ }
+ 
+ 
+ 
+ /* Check whether X may be aliased with MEM.  Don't do offset-based
+   memory disambiguation & TBAA.  */
+ int
+ may_alias_p (const_rtx mem, const_rtx x)
+ {
+   rtx x_addr, mem_addr;
+ 
+   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
+     return 1;
+ 
+   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
+      This is used in epilogue deallocation functions.  */
+   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
+     return 1;
+   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
+     return 1;
+   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
+       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
+     return 1;
+ 
+   x_addr = XEXP (x, 0);
+   x_addr = get_addr (x_addr);
+ 
+   mem_addr = XEXP (mem, 0);
+   mem_addr = get_addr (mem_addr);
+ 
+   /* Read-only memory is by definition never modified, and therefore can't
+      conflict with anything.  However, don't assume anything when AND
+      addresses are involved and leave to the code below to determine
+      dependence.  We don't expect to find read-only set on MEM, but
+      stupid user tricks can produce them, so don't die.  */
+   if (MEM_READONLY_P (x)
+       && GET_CODE (x_addr) != AND
+       && GET_CODE (mem_addr) != AND)
+     return 0;
+ 
+   /* If we have MEMs referring to different address spaces (which can
+      potentially overlap), we cannot easily tell from the addresses
+      whether the references overlap.  */
+   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
+     return 1;
+ 
+   rtx x_base = find_base_term (x_addr);
+   rtx mem_base = find_base_term (mem_addr);
+   if (! base_alias_check (x_addr, x_base, mem_addr, mem_base,
+ 			  GET_MODE (x), GET_MODE (mem_addr)))
+     return 0;
+ 
+   if (nonoverlapping_memrefs_p (mem, x, true))
+     return 0;
+ 
+   /* TBAA not valid for loop_invarint */
+   return rtx_refs_may_alias_p (x, mem, false);
+ }
+ 
+ void
+ init_alias_target (void)
+ {
+   int i;
+ 
+   if (!arg_base_value)
+     arg_base_value = gen_rtx_ADDRESS (VOIDmode, 0);
+ 
+   memset (static_reg_base_value, 0, sizeof static_reg_base_value);
+ 
+   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+     /* Check whether this register can hold an incoming pointer
+        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
+        numbers, so translate if necessary due to register windows.  */
+     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
+ 	&& targetm.hard_regno_mode_ok (i, Pmode))
+       static_reg_base_value[i] = arg_base_value;
+ 
+   /* RTL code is required to be consistent about whether it uses the
+      stack pointer, the frame pointer or the argument pointer to
+      access a given area of the frame.  We can therefore use the
+      base address to distinguish between the different areas.  */
+   static_reg_base_value[STACK_POINTER_REGNUM]
+     = unique_base_value (UNIQUE_BASE_VALUE_SP);
+   static_reg_base_value[ARG_POINTER_REGNUM]
+     = unique_base_value (UNIQUE_BASE_VALUE_ARGP);
+   static_reg_base_value[FRAME_POINTER_REGNUM]
+     = unique_base_value (UNIQUE_BASE_VALUE_FP);
+ 
+   /* The above rules extend post-reload, with eliminations applying
+      consistently to each of the three pointers.  Cope with cases in
+      which the frame pointer is eliminated to the hard frame pointer
+      rather than the stack pointer.  */
+   if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
+     static_reg_base_value[HARD_FRAME_POINTER_REGNUM]
+       = unique_base_value (UNIQUE_BASE_VALUE_HFP);
+ }
+ 
+ /* Set MEMORY_MODIFIED when X modifies DATA (that is assumed
+    to be memory reference.  */
+ static bool memory_modified;
+ static void
+ memory_modified_1 (rtx x, const_rtx pat ATTRIBUTE_UNUSED, void *data)
+ {
+   if (MEM_P (x))
+     {
+       if (anti_dependence (x, (const_rtx)data) || output_dependence (x, (const_rtx)data))
+ 	memory_modified = true;
+     }
+ }
+ 
+ 
+ /* Return true when INSN possibly modify memory contents of MEM
+    (i.e. address can be modified).  */
+ bool
+ memory_modified_in_insn_p (const_rtx mem, const_rtx insn)
+ {
+   if (!INSN_P (insn))
+     return false;
+   /* Conservatively assume all non-readonly MEMs might be modified in
+      calls.  */
+   if (CALL_P (insn))
+     return true;
+   memory_modified = false;
+   note_stores (as_a<const rtx_insn *> (insn), memory_modified_1,
+ 	       CONST_CAST_RTX(mem));
+   return memory_modified;
+ }
+ 
+ /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
+    array.  */
+ 
+ void
+ init_alias_analysis (void)
+ {
+   unsigned int maxreg = max_reg_num ();
+   int changed, pass;
+   int i;
+   unsigned int ui;
+   rtx_insn *insn;
+   rtx val;
+   int rpo_cnt;
+   int *rpo;
+ 
+   timevar_push (TV_ALIAS_ANALYSIS);
+ 
+   vec_safe_grow_cleared (reg_known_value, maxreg - FIRST_PSEUDO_REGISTER,
+ 			 true);
+   reg_known_equiv_p = sbitmap_alloc (maxreg - FIRST_PSEUDO_REGISTER);
+   bitmap_clear (reg_known_equiv_p);
+ 
+   /* If we have memory allocated from the previous run, use it.  */
+   if (old_reg_base_value)
+     reg_base_value = old_reg_base_value;
+ 
+   if (reg_base_value)
+     reg_base_value->truncate (0);
+ 
+   vec_safe_grow_cleared (reg_base_value, maxreg, true);
+ 
+   new_reg_base_value = XNEWVEC (rtx, maxreg);
+   reg_seen = sbitmap_alloc (maxreg);
+ 
+   /* The basic idea is that each pass through this loop will use the
+      "constant" information from the previous pass to propagate alias
+      information through another level of assignments.
+ 
+      The propagation is done on the CFG in reverse post-order, to propagate
+      things forward as far as possible in each iteration.
+ 
+      This could get expensive if the assignment chains are long.  Maybe
+      we should throttle the number of iterations, possibly based on
+      the optimization level or flag_expensive_optimizations.
+ 
+      We could propagate more information in the first pass by making use
+      of DF_REG_DEF_COUNT to determine immediately that the alias information
+      for a pseudo is "constant".
+ 
+      A program with an uninitialized variable can cause an infinite loop
+      here.  Instead of doing a full dataflow analysis to detect such problems
+      we just cap the number of iterations for the loop.
+ 
+      The state of the arrays for the set chain in question does not matter
+      since the program has undefined behavior.  */
+ 
+   rpo = XNEWVEC (int, n_basic_blocks_for_fn (cfun));
+   rpo_cnt = pre_and_rev_post_order_compute (NULL, rpo, false);
+ 
+   pass = 0;
+   do
+     {
+       /* Assume nothing will change this iteration of the loop.  */
+       changed = 0;
+ 
+       /* We want to assign the same IDs each iteration of this loop, so
+ 	 start counting from one each iteration of the loop.  */
+       unique_id = 1;
+ 
+       /* We're at the start of the function each iteration through the
+ 	 loop, so we're copying arguments.  */
+       copying_arguments = true;
+ 
+       /* Wipe the potential alias information clean for this pass.  */
+       memset (new_reg_base_value, 0, maxreg * sizeof (rtx));
+ 
+       /* Wipe the reg_seen array clean.  */
+       bitmap_clear (reg_seen);
+ 
+       /* Initialize the alias information for this pass.  */
+       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ 	if (static_reg_base_value[i]
+ 	    /* Don't treat the hard frame pointer as special if we
+ 	       eliminated the frame pointer to the stack pointer instead.  */
+ 	    && !(i == HARD_FRAME_POINTER_REGNUM
+ 		 && reload_completed
+ 		 && !frame_pointer_needed
+ 		 && targetm.can_eliminate (FRAME_POINTER_REGNUM,
+ 					   STACK_POINTER_REGNUM)))
+ 	  {
+ 	    new_reg_base_value[i] = static_reg_base_value[i];
+ 	    bitmap_set_bit (reg_seen, i);
+ 	  }
+ 
+       /* Walk the insns adding values to the new_reg_base_value array.  */
+       for (i = 0; i < rpo_cnt; i++)
+ 	{
+ 	  basic_block bb = BASIC_BLOCK_FOR_FN (cfun, rpo[i]);
+ 	  FOR_BB_INSNS (bb, insn)
+ 	    {
+ 	      if (NONDEBUG_INSN_P (insn))
+ 		{
+ 		  rtx note, set;
+ 
+ 		  /* If this insn has a noalias note, process it,  Otherwise,
+ 		     scan for sets.  A simple set will have no side effects
+ 		     which could change the base value of any other register.  */
+ 
+ 		  if (GET_CODE (PATTERN (insn)) == SET
+ 		      && REG_NOTES (insn) != 0
+ 		      && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
+ 		    record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
+ 		  else
+ 		    note_stores (insn, record_set, NULL);
+ 
+ 		  set = single_set (insn);
+ 
+ 		  if (set != 0
+ 		      && REG_P (SET_DEST (set))
+ 		      && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
+ 		    {
+ 		      unsigned int regno = REGNO (SET_DEST (set));
+ 		      rtx src = SET_SRC (set);
+ 		      rtx t;
+ 
+ 		      note = find_reg_equal_equiv_note (insn);
+ 		      if (note && REG_NOTE_KIND (note) == REG_EQUAL
+ 			  && DF_REG_DEF_COUNT (regno) != 1)
+ 			note = NULL_RTX;
+ 
+ 		      poly_int64 offset;
+ 		      if (note != NULL_RTX
+ 			  && GET_CODE (XEXP (note, 0)) != EXPR_LIST
+ 			  && ! rtx_varies_p (XEXP (note, 0), 1)
+ 			  && ! reg_overlap_mentioned_p (SET_DEST (set),
+ 							XEXP (note, 0)))
+ 			{
+ 			  set_reg_known_value (regno, XEXP (note, 0));
+ 			  set_reg_known_equiv_p (regno,
+ 						 REG_NOTE_KIND (note) == REG_EQUIV);
+ 			}
+ 		      else if (DF_REG_DEF_COUNT (regno) == 1
+ 			       && GET_CODE (src) == PLUS
+ 			       && REG_P (XEXP (src, 0))
+ 			       && (t = get_reg_known_value (REGNO (XEXP (src, 0))))
+ 			       && poly_int_rtx_p (XEXP (src, 1), &offset))
+ 			{
+ 			  t = plus_constant (GET_MODE (src), t, offset);
+ 			  set_reg_known_value (regno, t);
+ 			  set_reg_known_equiv_p (regno, false);
+ 			}
+ 		      else if (DF_REG_DEF_COUNT (regno) == 1
+ 			       && ! rtx_varies_p (src, 1))
+ 			{
+ 			  set_reg_known_value (regno, src);
+ 			  set_reg_known_equiv_p (regno, false);
+ 			}
+ 		    }
+ 		}
+ 	      else if (NOTE_P (insn)
+ 		       && NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG)
+ 		copying_arguments = false;
+ 	    }
+ 	}
+ 
+       /* Now propagate values from new_reg_base_value to reg_base_value.  */
+       gcc_assert (maxreg == (unsigned int) max_reg_num ());
+ 
+       for (ui = 0; ui < maxreg; ui++)
+ 	{
+ 	  if (new_reg_base_value[ui]
+ 	      && new_reg_base_value[ui] != (*reg_base_value)[ui]
+ 	      && ! rtx_equal_p (new_reg_base_value[ui], (*reg_base_value)[ui]))
+ 	    {
+ 	      (*reg_base_value)[ui] = new_reg_base_value[ui];
+ 	      changed = 1;
+ 	    }
+ 	}
+     }
+   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
+   XDELETEVEC (rpo);
+ 
+   /* Fill in the remaining entries.  */
+   FOR_EACH_VEC_ELT (*reg_known_value, i, val)
+     {
+       int regno = i + FIRST_PSEUDO_REGISTER;
+       if (! val)
+ 	set_reg_known_value (regno, regno_reg_rtx[regno]);
+     }
+ 
+   /* Clean up.  */
+   free (new_reg_base_value);
+   new_reg_base_value = 0;
+   sbitmap_free (reg_seen);
+   reg_seen = 0;
+   timevar_pop (TV_ALIAS_ANALYSIS);
+ }
+ 
+ /* Equate REG_BASE_VALUE (reg1) to REG_BASE_VALUE (reg2).
+    Special API for var-tracking pass purposes.  */
+ 
+ void
+ vt_equate_reg_base_value (const_rtx reg1, const_rtx reg2)
+ {
+   (*reg_base_value)[REGNO (reg1)] = REG_BASE_VALUE (reg2);
+ }
+ 
+ void
+ end_alias_analysis (void)
+ {
+   old_reg_base_value = reg_base_value;
+   vec_free (reg_known_value);
+   sbitmap_free (reg_known_equiv_p);
+ }
+ 
+ void
+ dump_alias_stats_in_alias_c (FILE *s)
+ {
+   fprintf (s, "  TBAA oracle: %llu disambiguations %llu queries\n"
+ 	      "               %llu are in alias set 0\n"
+ 	      "               %llu queries asked about the same object\n"
+ 	      "               %llu queries asked about the same alias set\n"
+ 	      "               %llu access volatile\n"
+ 	      "               %llu are dependent in the DAG\n"
+ 	      "               %llu are aritificially in conflict with void *\n",
+ 	   alias_stats.num_disambiguated,
+ 	   alias_stats.num_alias_zero + alias_stats.num_same_alias_set
+ 	   + alias_stats.num_same_objects + alias_stats.num_volatile
+ 	   + alias_stats.num_dag + alias_stats.num_disambiguated
+ 	   + alias_stats.num_universal,
+ 	   alias_stats.num_alias_zero, alias_stats.num_same_alias_set,
+ 	   alias_stats.num_same_objects, alias_stats.num_volatile,
+ 	   alias_stats.num_dag, alias_stats.num_universal);
+ }
+ #include "gt-alias.h"
diff -Nrcpad gcc-11.3.0/gcc/alias.h gcc-12.1.0/gcc/alias.h
*** gcc-11.3.0/gcc/alias.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/alias.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
! /* Exported functions from alias.c
!    Copyright (C) 2004-2021 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
! /* Exported functions from alias.cc
!    Copyright (C) 2004-2022 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
diff -Nrcpad gcc-11.3.0/gcc/align.h gcc-12.1.0/gcc/align.h
*** gcc-11.3.0/gcc/align.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/align.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Alignment-related classes.
!    Copyright (C) 2018-2021 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Alignment-related classes.
!    Copyright (C) 2018-2022 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
diff -Nrcpad gcc-11.3.0/gcc/alloc-pool.c gcc-12.1.0/gcc/alloc-pool.c
*** gcc-11.3.0/gcc/alloc-pool.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/alloc-pool.c	Thu Jan  1 00:00:00 1970
***************
*** 1,38 ****
- /* Functions to support a pool of allocatable objects.
-    Copyright (C) 1987-2021 Free Software Foundation, Inc.
-    Contributed by Daniel Berlin <dan@cgsoftware.com>
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "alloc-pool.h"
- 
- ALLOC_POOL_ID_TYPE last_id;
- mem_alloc_description<pool_usage> pool_allocator_usage;
- bool after_memory_report = false;
- 
- /* Output per-alloc_pool memory usage statistics.  */
- void
- dump_alloc_pool_statistics (void)
- {
-   if (! GATHER_STATISTICS)
-     return;
- 
-   pool_allocator_usage.dump (ALLOC_POOL_ORIGIN);
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/alloc-pool.cc gcc-12.1.0/gcc/alloc-pool.cc
*** gcc-11.3.0/gcc/alloc-pool.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/alloc-pool.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,38 ----
+ /* Functions to support a pool of allocatable objects.
+    Copyright (C) 1987-2022 Free Software Foundation, Inc.
+    Contributed by Daniel Berlin <dan@cgsoftware.com>
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "alloc-pool.h"
+ 
+ ALLOC_POOL_ID_TYPE last_id;
+ mem_alloc_description<pool_usage> pool_allocator_usage;
+ bool after_memory_report = false;
+ 
+ /* Output per-alloc_pool memory usage statistics.  */
+ void
+ dump_alloc_pool_statistics (void)
+ {
+   if (! GATHER_STATISTICS)
+     return;
+ 
+   pool_allocator_usage.dump (ALLOC_POOL_ORIGIN);
+ }
diff -Nrcpad gcc-11.3.0/gcc/alloc-pool.h gcc-12.1.0/gcc/alloc-pool.h
*** gcc-11.3.0/gcc/alloc-pool.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/alloc-pool.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Functions to support a pool of allocatable objects
!    Copyright (C) 1997-2021 Free Software Foundation, Inc.
     Contributed by Daniel Berlin <dan@cgsoftware.com>
  
  This file is part of GCC.
--- 1,5 ----
  /* Functions to support a pool of allocatable objects
!    Copyright (C) 1997-2022 Free Software Foundation, Inc.
     Contributed by Daniel Berlin <dan@cgsoftware.com>
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/ChangeLog gcc-12.1.0/gcc/analyzer/ChangeLog
*** gcc-11.3.0/gcc/analyzer/ChangeLog	Thu Apr 21 07:59:16 2022
--- gcc-12.1.0/gcc/analyzer/ChangeLog	Fri May  6 07:30:56 2022
***************
*** 1,24 ****
! 2022-04-21  Release Manager
  
! 	* GCC 11.3.0 released.
  
! 2021-12-11  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/101962
  	* region-model.cc (region_model::eval_condition_without_cm):
  	Refactor comparison against zero, adding a check for
  	POINTER_PLUS_EXPR of non-NULL.
  
! 2021-07-28  Release Manager
  
! 	* GCC 11.2.0 released.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	* store.cc (binding_cluster::get_any_binding): Make symbolic reads
  	from a cluster with concrete bindings return unknown.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	* region-model-manager.cc
  	(region_model_manager::get_or_create_int_cst): New.
--- 1,2232 ----
! 2022-05-06  Release Manager
  
! 	* GCC 12.1.0 released.
  
! 2022-04-25  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/105365
! 	PR analyzer/105366
! 	* svalue.cc
! 	(cmp_cst): Rename to...
! 	(cmp_csts_same_type): ...this.  Convert all recursive calls to
! 	calls to...
! 	(cmp_csts_and_types): ....this new function.
! 	(svalue::cmp_ptr): Update for renaming of cmp_cst
! 
! 2022-04-14  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/105264
! 	* region-model-reachability.cc (reachable_regions::handle_parm):
! 	Use maybe_get_deref_base_region rather than just region_svalue, to
! 	handle pointer arithmetic also.
! 	* svalue.cc (svalue::maybe_get_deref_base_region): New.
! 	* svalue.h (svalue::maybe_get_deref_base_region): New decl.
! 
! 2022-04-14  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/105252
! 	* svalue.cc (cmp_cst): When comparing VECTOR_CSTs, compare the
! 	types of the encoded elements before calling cmp_cst on them.
! 
! 2022-04-09  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/103892
! 	* region-model-manager.cc
! 	(region_model_manager::get_unknown_symbolic_region): New,
! 	extracted from...
! 	(region_model_manager::get_field_region): ...here.
! 	(region_model_manager::get_element_region): Use it here.
! 	(region_model_manager::get_offset_region): Likewise.
! 	(region_model_manager::get_sized_region): Likewise.
! 	(region_model_manager::get_cast_region): Likewise.
! 	(region_model_manager::get_bit_range): Likewise.
! 	* region-model.h
! 	(region_model_manager::get_unknown_symbolic_region): New decl.
! 	* region.cc (symbolic_region::symbolic_region): Handle sval_ptr
! 	having NULL type.
! 	(symbolic_region::dump_to_pp): Handle having NULL type.
! 
! 2022-04-07  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/102208
! 	* store.cc (binding_map::remove_overlapping_bindings): Add
! 	"always_overlap" param, using it to generalize to the case where
! 	we want to remove all bindings.  Update "uncertainty" logic to
! 	only record maybe-bound values for cases where there is a symbolic
! 	write involved.
! 	(binding_cluster::mark_region_as_unknown): Split param "reg" into
! 	"reg_to_bind" and "reg_for_overlap".
! 	(binding_cluster::maybe_get_compound_binding): Pass "false" to
! 	binding_map::remove_overlapping_bindings new "always_overlap" param.
! 	(binding_cluster::remove_overlapping_bindings): Determine
! 	"always_overlap" and pass it to
! 	binding_map::remove_overlapping_bindings.
! 	(store::set_value): Pass uncertainty to remove_overlapping_bindings
! 	call.  Update for new param of
! 	binding_cluster::mark_region_as_unknown, passing both the base
! 	region of the iter_cluster, and the lhs_reg.
! 	(store::mark_region_as_unknown): Update for new param of
! 	binding_cluster::mark_region_as_unknown, passing "reg" for both.
! 	(store::remove_overlapping_bindings): Add param "uncertainty", and
! 	pass it on to call to
! 	binding_cluster::remove_overlapping_bindings.
! 	* store.h (binding_map::remove_overlapping_bindings): Add
! 	"always_overlap" param.
! 	(binding_cluster::mark_region_as_unknown): Split param "reg" into
! 	"reg_to_bind" and "reg_for_overlap".
! 	(store::remove_overlapping_bindings): Add param "uncertainty".
! 
! 2022-03-29  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR testsuite/105085
! 	* region-model-manager.cc (dump_untracked_region): Skip decls in
! 	the constant pool.
! 
! 2022-03-29  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/105087
! 	* analyzer.h (class conjured_purge): New forward decl.
! 	* region-model-asm.cc (region_model::on_asm_stmt): Add
! 	conjured_purge param to calls binding_cluster::on_asm and
! 	region_model_manager::get_or_create_conjured_svalue.
! 	* region-model-impl-calls.cc
! 	(call_details::get_or_create_conjured_svalue): Likewise for call
! 	to region_model_manager::get_or_create_conjured_svalue.
! 	(region_model::impl_call_fgets): Remove call to
! 	region_model::purge_state_involving, as this is now done
! 	implicitly by call_details::get_or_create_conjured_svalue.
! 	(region_model::impl_call_fread): Likewise.
! 	(region_model::impl_call_strchr): Pass conjured_purge param to
! 	call to region_model_manager::get_or_create_conjured_svalue.
! 	* region-model-manager.cc (conjured_purge::purge): New.
! 	(region_model_manager::get_or_create_conjured_svalue): Add
! 	param "p".  Use it to purge state when reusing an existing
! 	conjured_svalue.
! 	* region-model.cc (region_model::on_call_pre): Replace call to
! 	region_model::purge_state_involving with passing conjured_purge
! 	to region_model_manager::get_or_create_conjured_svalue.
! 	(region_model::handle_unrecognized_call): Pass conjured_purge to
! 	store::on_unknown_fncall.
! 	* region-model.h
! 	(region_model_manager::get_or_create_conjured_svalue): Add param
! 	"p".
! 	* store.cc (binding_cluster::on_unknown_fncall): Likewise.  Pass
! 	it on to region_model_manager::get_or_create_conjured_svalue.
! 	(binding_cluster::on_asm): Likewise.
! 	(store::on_unknown_fncall): Add param "p" and pass it on to
! 	binding_cluster::on_unknown_fncall.
! 	* store.h (binding_cluster::on_unknown_fncall): Add param p.
! 	(binding_cluster::on_asm): Likewise.
! 	(store::on_unknown_fncall): Likewise.
! 	* svalue.h (class conjured_purge): New.
! 
! 2022-03-29  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/105074
! 	* region.cc (ipa_ref_requires_tracking): Drop "context_fndecl",
! 	instead using the ref->referring to get the cgraph node of the
! 	caller.
! 	(symnode_requires_tracking_p): Likewise.
! 
! 2022-03-26  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/105057
! 	* store.cc (binding_cluster::make_unknown_relative_to): Reject
! 	attempts to create a cluster for untracked base regions.
! 	(store::set_value): Likewise.
! 	(store::fill_region): Likewise.
! 	(store::mark_region_as_unknown): Likewise.
! 
! 2022-03-25  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104954
! 	* analyzer.opt (-fdump-analyzer-untracked): New option.
! 	* engine.cc (impl_run_checkers): Handle it.
! 	* region-model-asm.cc (region_model::on_asm_stmt): Don't attempt
! 	to clobber regions with !tracked_p ().
! 	* region-model-manager.cc (dump_untracked_region): New.
! 	(region_model_manager::dump_untracked_regions): New.
! 	(frame_region::dump_untracked_regions): New.
! 	* region-model.h (region_model_manager::dump_untracked_regions):
! 	New decl.
! 	* region.cc (ipa_ref_requires_tracking): New.
! 	(symnode_requires_tracking_p): New.
! 	(decl_region::calc_tracked_p): New.
! 	* region.h (region::tracked_p): New vfunc.
! 	(frame_region::dump_untracked_regions): New decl.
! 	(class decl_region): Note that this is also used fo SSA names.
! 	(decl_region::decl_region): Initialize m_tracked.
! 	(decl_region::tracked_p): New.
! 	(decl_region::calc_tracked_p): New decl.
! 	(decl_region::m_tracked): New.
! 	* store.cc (store::get_or_create_cluster): Assert that we
! 	don't try to create clusters for base regions that aren't
! 	trackable.
! 	(store::mark_as_escaped): Don't mark base regions that we're not
! 	tracking.
! 
! 2022-03-23  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104979
! 	* engine.cc (impl_run_checkers): Create the engine after the
! 	supergraph, and pass the supergraph to the engine.
! 	* region-model.cc (region_model::get_lvalue_1): Pass ctxt to
! 	frame_region::get_region_for_local.
! 	(region_model::update_for_return_gcall): Pass the lvalue for the
! 	result to pop_frame as a tree, rather than as a region.
! 	(region_model::pop_frame): Update for above change, determining
! 	the destination region after the frame is popped and thus with
! 	respect to the caller frame rather than the called frame.
! 	Likewise, set the value of the region to the return value after
! 	the frame is popped.
! 	(engine::engine): Add supergraph pointer.
! 	(selftest::test_stack_frames): Set the DECL_CONTECT of PARM_DECLs.
! 	(selftest::test_get_representative_path_var): Likewise.
! 	(selftest::test_state_merging): Likewise.
! 	* region-model.h (region_model::pop_frame): Convert first param
! 	from a const region * to a tree.
! 	(engine::engine): Add param "sg".
! 	(engine::m_sg): New field.
! 	* region.cc: Include "analyzer/sm.h" and
! 	"analyzer/program-state.h".
! 	(frame_region::get_region_for_local): Add "ctxt" param.
! 	Add assertions that VAR_DECLs are locals, and that expr is for the
! 	correct function.
! 	* region.h (frame_region::get_region_for_local): Add "ctxt" param.
! 
! 2022-03-23  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/105017
! 	* sm-taint.cc (taint_diagnostic::subclass_equal_p): Check
! 	m_has_bounds as well as m_arg.
! 	(tainted_allocation_size::subclass_equal_p): Chain up to base
! 	class implementation.  Also check m_mem_space.
! 	(tainted_allocation_size::emit): Add note showing stack-based vs
! 	heap-based allocations.
! 
! 2022-03-23  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104997
! 	* diagnostic-manager.cc (diagnostic_manager::add_diagnostic):
! 	Convert return type from "void" to "bool", reporting success vs
! 	failure to caller, for both overloads.
! 	* diagnostic-manager.h (diagnostic_manager::add_diagnostic):
! 	Likewise.
! 	* engine.cc (impl_region_model_context::warn): Propagate return
! 	value from diagnostic_manager::add_diagnostic.
! 
! 2022-03-18  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104943
! 	PR analyzer/104954
! 	PR analyzer/103533
! 	* analyzer.h (class state_purge_per_decl): New forward decl.
! 	* engine.cc (impl_run_checkers): Pass region_model_manager to
! 	state_purge_map ctor.
! 	* program-point.cc (function_point::final_stmt_p): New.
! 	(function_point::get_next): New.
! 	* program-point.h (function_point::final_stmt_p): New decl.
! 	(function_point::get_next): New decl.
! 	* program-state.cc (program_state::prune_for_point): Generalize to
! 	purge local decls as well as SSA names.
! 	(program_state::can_purge_base_region_p): New.
! 	* program-state.h (program_state::can_purge_base_region_p): New
! 	decl.
! 	* region-model.cc (struct append_ssa_names_cb_data): Rename to...
! 	(struct append_regions_cb_data): ...this.
! 	(region_model::get_ssa_name_regions_for_current_frame): Rename
! 	to...
! 	(region_model::get_regions_for_current_frame): ...this, updating
! 	for other renamings.
! 	(region_model::append_ssa_names_cb): Rename to...
! 	(region_model::append_regions_cb): ...this, and drop the requirement
! 	that the subregion be a SSA name.
! 	* region-model.h (struct append_ssa_names_cb_data): Rename decl
! 	to...
! 	(struct append_regions_cb_data): ...this.
! 	(region_model::get_ssa_name_regions_for_current_frame): Rename
! 	decl to...
! 	(region_model::get_regions_for_current_frame): ...this.
! 	(region_model::append_ssa_names_cb): Rename decl to...
! 	(region_model::append_regions_cb): ...this.
! 	* state-purge.cc: Include "tristate.h", "selftest.h",
! 	"analyzer/store.h", "analyzer/region-model.h", and
! 	"gimple-walk.h".
! 	(get_candidate_for_purging): New.
! 	(class gimple_op_visitor): New.
! 	(my_load_cb): New.
! 	(my_store_cb): New.
! 	(my_addr_cb): New.
! 	(state_purge_map::state_purge_map): Add "mgr" param.  Update for
! 	renamings.  Find uses of local variables.
! 	(state_purge_map::~state_purge_map): Update for renaming of m_map
! 	to m_ssa_map.  Clean up m_decl_map.
! 	(state_purge_map::get_or_create_data_for_decl): New.
! 	(state_purge_per_ssa_name::state_purge_per_ssa_name): Update for
! 	inheriting from state_purge_per_tree.
! 	(state_purge_per_ssa_name::add_to_worklist): Likewise.
! 	(state_purge_per_decl::state_purge_per_decl): New.
! 	(state_purge_per_decl::add_needed_at): New.
! 	(state_purge_per_decl::add_pointed_to_at): New.
! 	(state_purge_per_decl::process_worklists): New.
! 	(state_purge_per_decl::add_to_worklist): New.
! 	(same_binding_p): New.
! 	(fully_overwrites_p): New.
! 	(state_purge_per_decl::process_point_backwards): New.
! 	(state_purge_per_decl::process_point_forwards): New.
! 	(state_purge_per_decl::needed_at_point_p): New.
! 	(state_purge_annotator::print_needed): Generalize to print local
! 	decls as well as SSA names.
! 	* state-purge.h (class state_purge_map): Update leading comment.
! 	(state_purge_map::map_t): Rename to...
! 	(state_purge_map::ssa_map_t): ...this.
! 	(state_purge_map::iterator): Rename to...
! 	(state_purge_map::ssa_iterator): ...this.
! 	(state_purge_map::decl_map_t): New typedef.
! 	(state_purge_map::decl_iterator): New typedef.
! 	(state_purge_map::state_purge_map): Add "mgr" param.
! 	(state_purge_map::get_data_for_ssa_name): Update for renaming.
! 	(state_purge_map::get_any_data_for_decl): New.
! 	(state_purge_map::get_or_create_data_for_decl): New decl.
! 	(state_purge_map::begin): Rename to...
! 	(state_purge_map::begin_ssas): ...this.
! 	(state_purge_map::end): Rename to...
! 	(state_purge_map::end_ssa): ...this.
! 	(state_purge_map::begin_decls): New.
! 	(state_purge_map::end_decls): New.
! 	(state_purge_map::m_map): Rename to...
! 	(state_purge_map::m_ssa_map): ...this.
! 	(state_purge_map::m_decl_map): New field.
! 	(class state_purge_per_tree): New class.
! 	(class state_purge_per_ssa_name): Inherit from state_purge_per_tree.
! 	(state_purge_per_ssa_name::get_function): Move to base class.
! 	(state_purge_per_ssa_name::point_set_t): Likewise.
! 	(state_purge_per_ssa_name::m_fun): Likewise.
! 	(class state_purge_per_decl): New.
! 
! 2022-03-17  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* state-purge.cc (state_purge_annotator::add_node_annotations):
! 	Avoid duplicate before-supernode annotations when returning from
! 	an interprocedural call.  Show after-supernode annotations.
! 
! 2022-03-17  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* program-point.cc (program_point::get_next): Fix missing
! 	increment of index.
! 
! 2022-03-16  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104955
! 	* diagnostic-manager.cc (get_emission_location): New.
! 	(diagnostic_manager::diagnostic_manager): Initialize
! 	m_num_disabled_diagnostics.
! 	(diagnostic_manager::add_diagnostic): Reject diagnostics that
! 	will eventually be rejected due to being disabled.
! 	(diagnostic_manager::emit_saved_diagnostics): Log the number
! 	of disabled diagnostics.
! 	(diagnostic_manager::emit_saved_diagnostic): Split out logic for
! 	determining emission location to get_emission_location.
! 	* diagnostic-manager.h
! 	(diagnostic_manager::m_num_disabled_diagnostics): New field.
! 	* engine.cc (stale_jmp_buf::get_controlling_option): New.
! 	(stale_jmp_buf::emit): Use it.
! 	* pending-diagnostic.h
! 	(pending_diagnostic::get_controlling_option): New vfunc.
! 	* region-model.cc
! 	(poisoned_value_diagnostic::get_controlling_option): New.
! 	(poisoned_value_diagnostic::emit): Use it.
! 	(shift_count_negative_diagnostic::get_controlling_option): New.
! 	(shift_count_negative_diagnostic::emit): Use it.
! 	(shift_count_overflow_diagnostic::get_controlling_option): New.
! 	(shift_count_overflow_diagnostic::emit): Use it.
! 	(dump_path_diagnostic::get_controlling_option): New.
! 	(dump_path_diagnostic::emit): Use it.
! 	(write_to_const_diagnostic::get_controlling_option): New.
! 	(write_to_const_diagnostic::emit): Use it.
! 	(write_to_string_literal_diagnostic::get_controlling_option): New.
! 	(write_to_string_literal_diagnostic::emit): Use it.
! 	* sm-file.cc (double_fclose::get_controlling_option): New.
! 	(double_fclose::emit): Use it.
! 	(file_leak::get_controlling_option): New.
! 	(file_leak::emit): Use it.
! 	* sm-malloc.cc (mismatching_deallocation::get_controlling_option):
! 	New.
! 	(mismatching_deallocation::emit): Use it.
! 	(double_free::get_controlling_option): New.
! 	(double_free::emit): Use it.
! 	(possible_null_deref::get_controlling_option): New.
! 	(possible_null_deref::emit): Use it.
! 	(possible_null_arg::get_controlling_option): New.
! 	(possible_null_arg::emit): Use it.
! 	(null_deref::get_controlling_option): New.
! 	(null_deref::emit): Use it.
! 	(null_arg::get_controlling_option): New.
! 	(null_arg::emit): Use it.
! 	(use_after_free::get_controlling_option): New.
! 	(use_after_free::emit): Use it.
! 	(malloc_leak::get_controlling_option): New.
! 	(malloc_leak::emit): Use it.
! 	(free_of_non_heap::get_controlling_option): New.
! 	(free_of_non_heap::emit): Use it.
! 	* sm-pattern-test.cc (pattern_match::get_controlling_option): New.
! 	(pattern_match::emit): Use it.
! 	* sm-sensitive.cc
! 	(exposure_through_output_file::get_controlling_option): New.
! 	(exposure_through_output_file::emit): Use it.
! 	* sm-signal.cc (signal_unsafe_call::get_controlling_option): New.
! 	(signal_unsafe_call::emit): Use it.
! 	* sm-taint.cc (tainted_array_index::get_controlling_option): New.
! 	(tainted_array_index::emit): Use it.
! 	(tainted_offset::get_controlling_option): New.
! 	(tainted_offset::emit): Use it.
! 	(tainted_size::get_controlling_option): New.
! 	(tainted_size::emit): Use it.
! 	(tainted_divisor::get_controlling_option): New.
! 	(tainted_divisor::emit): Use it.
! 	(tainted_allocation_size::get_controlling_option): New.
! 	(tainted_allocation_size::emit): Use it.
! 
! 2022-03-15  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* store.cc (store::store): Presize m_cluster_map.
! 
! 2022-03-10  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104863
! 	* constraint-manager.cc (constraint_manager::add_constraint):
! 	Refresh the EC IDs when adding constraints implied by offsets.
! 
! 2022-03-10  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104793
! 	* analyzer.h (class pending_note): New forward decl.
! 	* diagnostic-manager.cc (saved_diagnostic::saved_diagnostic):
! 	Initialize m_notes.
! 	(saved_diagnostic::operator==): Compare m_notes.
! 	(saved_diagnostic::add_note): New.
! 	(saved_diagnostic::emit_any_notes): New.
! 	(diagnostic_manager::add_note): New.
! 	(diagnostic_manager::emit_saved_diagnostic): Call emit_any_notes
! 	after emitting the warning.
! 	* diagnostic-manager.h (saved_diagnostic::add_note): New decl.
! 	(saved_diagnostic::emit_any_notes): New decl.
! 	(saved_diagnostic::m_notes): New field.
! 	(diagnostic_manager::add_note): New decl.
! 	* engine.cc (impl_region_model_context::add_note): New.
! 	* exploded-graph.h (impl_region_model_context::add_note): New
! 	decl.
! 	* pending-diagnostic.h (class pending_note): New.
! 	(class pending_note_subclass): New template.
! 	* region-model.cc (class reason_attr_access): New.
! 	(check_external_function_for_access_attr): Add class
! 	annotating_ctxt and use it when checking region.
! 	(noop_region_model_context::add_note): New.
! 	* region-model.h (region_model_context::add_note): New vfunc.
! 	(noop_region_model_context::add_note): New decl.
! 	(class region_model_context_decorator): New.
! 	(class note_adding_context): New.
! 
! 2022-03-10  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104793
! 	* region-model.cc
! 	(region_model::check_external_function_for_access_attr): New.
! 	(region_model::handle_unrecognized_call): Call it.
! 	* region-model.h
! 	(region_model::check_external_function_for_access_attr): New decl.
! 	(region_model::handle_unrecognized_call): New decl.
! 
! 2022-03-10  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* sm-taint.cc (taint_state_machine::check_for_tainted_size_arg):
! 	Avoid generating duplicate saved_diagnostics by only handling the
! 	rdwr_map entry for the ptrarg, not the duplicate entry for the
! 	sizarg.
! 
! 2022-03-07  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/101983
! 	* engine.cc (returning_from_function_p): New.
! 	(impl_region_model_context::on_state_leak): Use it when rejecting
! 	leaks at the return from "main".
! 
! 2022-03-07  Jakub Jelinek  <jakub@redhat.com>
! 
! 	* store.cc: Fix up duplicated word issue in a comment.
! 	* analyzer.cc: Likewise.
! 	* engine.cc: Likewise.
! 	* sm-taint.cc: Likewise.
! 
! 2022-03-04  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/103521
! 	* analyzer.opt (-param=analyzer-max-svalue-depth=): Reduce from 13
! 	to 12.
! 
! 2022-02-23  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104434
! 	* analyzer.h (class const_fn_result_svalue): New decl.
! 	* region-model-impl-calls.cc (call_details::get_manager): New.
! 	* region-model-manager.cc
! 	(region_model_manager::get_or_create_const_fn_result_svalue): New.
! 	(region_model_manager::log_stats): Log
! 	m_const_fn_result_values_map.
! 	* region-model.cc (const_fn_p): New.
! 	(maybe_get_const_fn_result): New.
! 	(region_model::on_call_pre): Handle fndecls with
! 	__attribute__((const)) by calling the above rather than making
! 	a conjured_svalue.
! 	* region-model.h (visitor::visit_const_fn_result_svalue): New.
! 	(region_model_manager::get_or_create_const_fn_result_svalue): New
! 	decl.
! 	(region_model_manager::const_fn_result_values_map_t): New typedef.
! 	(region_model_manager::m_const_fn_result_values_map): New field.
! 	(call_details::get_manager): New decl.
! 	* svalue.cc (svalue::cmp_ptr): Handle SK_CONST_FN_RESULT.
! 	(const_fn_result_svalue::dump_to_pp): New.
! 	(const_fn_result_svalue::dump_input): New.
! 	(const_fn_result_svalue::accept): New.
! 	* svalue.h (enum svalue_kind): Add SK_CONST_FN_RESULT.
! 	(svalue::dyn_cast_const_fn_result_svalue): New.
! 	(class const_fn_result_svalue): New.
! 	(is_a_helper <const const_fn_result_svalue *>::test): New.
! 	(template <> struct default_hash_traits<const_fn_result_svalue::key_t>):
! 	New.
! 
! 2022-02-17  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104576
! 	* region-model.cc: Include "calls.h".
! 	(region_model::on_call_pre): Use flags_from_decl_or_type to
! 	generalize check for DECL_PURE_P to also check for ECF_CONST.
! 
! 2022-02-16  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104560
! 	* diagnostic-manager.cc (diagnostic_manager::build_emission_path):
! 	Add region creation events for globals of interest.
! 	(null_assignment_sm_context::get_old_program_state): New.
! 	(diagnostic_manager::add_events_for_eedge): Move check for
! 	changing dynamic extents from PK_BEFORE_STMT case to after the
! 	switch on the dst_point's kind so that we can emit them for the
! 	final stmt in a basic block.
! 	* engine.cc (impl_sm_context::get_old_program_state): New.
! 	* sm-malloc.cc (malloc_state_machine::get_default_state): Rewrite
! 	detection of m_non_heap to use get_memory_space.
! 	(free_of_non_heap::free_of_non_heap): Add freed_reg param.
! 	(free_of_non_heap::subclass_equal_p): Update for changes to
! 	fields.
! 	(free_of_non_heap::emit): Drop m_kind in favor of
! 	get_memory_space.
! 	(free_of_non_heap::describe_state_change): Remove logic for
! 	detecting alloca.
! 	(free_of_non_heap::mark_interesting_stuff): Add region-creation of
! 	m_freed_reg.
! 	(free_of_non_heap::get_memory_space): New.
! 	(free_of_non_heap::kind): Drop enum.
! 	(free_of_non_heap::m_freed_reg): New field.
! 	(free_of_non_heap::m_kind): Drop field.
! 	(malloc_state_machine::on_stmt): Drop transition to m_non_heap.
! 	(malloc_state_machine::handle_free_of_non_heap): New function,
! 	split out from on_deallocator_call and on_realloc_call, adding
! 	detection of the freed region.
! 	(malloc_state_machine::on_deallocator_call): Use it.
! 	(malloc_state_machine::on_realloc_call): Likewise.
! 	* sm.h (sm_context::get_old_program_state): New vfunc.
! 
! 2022-02-15  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104524
! 	* region-model-manager.cc
! 	(region_model_manager::maybe_fold_sub_svalue): Only call
! 	get_or_create_cast if type is non-NULL.
! 
! 2022-02-15  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/102692
! 	* exploded-graph.h (impl_region_model_context::get_stmt): New.
! 	* region-model.cc: Include "gimple-ssa.h", "tree-phinodes.h",
! 	"tree-ssa-operands.h", and "ssa-iterators.h".
! 	(within_short_circuited_stmt_p): New.
! 	(region_model::check_for_poison): Don't warn about uninit values
! 	if within_short_circuited_stmt_p.
! 	* region-model.h (region_model_context::get_stmt): New vfunc.
! 	(noop_region_model_context::get_stmt): New.
! 
! 2022-02-11  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104274
! 	* region-model.cc (region_model::check_for_poison): Ignore
! 	uninitialized uses of empty types.
! 
! 2022-02-10  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/98797
! 	* region-model-manager.cc
! 	(region_model_manager::maybe_fold_sub_svalue): Generalize getting
! 	individual chars of a STRING_CST from element_region to any
! 	subregion which is a concrete access of a single byte from its
! 	parent region.
! 	* region.cc (region::get_relative_concrete_byte_range): New.
! 	* region.h (region::get_relative_concrete_byte_range): New decl.
! 
! 2022-02-09  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104452
! 	* region-model.cc (selftest::test_bit_range_regions): New.
! 	(selftest::analyzer_region_model_cc_tests): Call it.
! 	* region.h (bit_range_region::key_t::hash): Fix hashing of m_bits
! 	to avoid using uninitialized data.
! 
! 2022-02-07  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104417
! 	* sm-taint.cc (tainted_allocation_size::tainted_allocation_size):
! 	Remove overzealous assertion.
! 	(tainted_allocation_size::emit): Likewise.
! 	(region_model::check_dynamic_size_for_taint): Likewise.
! 
! 2022-02-07  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/103872
! 	* region-model-impl-calls.cc (region_model::impl_call_memcpy):
! 	Reimplement in terms of a get_store_value followed by a set_value.
! 
! 2022-02-03  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104369
! 	* engine.cc (exploded_graph::process_node): Use the node for any
! 	diagnostics, avoiding ICE if a bifurcation update adds a
! 	saved_diagnostic, such as for a tainted realloc size.
! 	* region-model-impl-calls.cc
! 	(region_model::impl_call_realloc::success_no_move::update_model):
! 	Require the old pointer to be non-NULL to be able successfully
! 	grow in place.  Use model->deref_rvalue rather than maybe_get_region
! 	to support the old pointer being symbolic.
! 	(region_model::impl_call_realloc::success_with_move::update_model):
! 	Likewise.  Add a constraint that the new pointer != the old pointer.
! 	Use a sized_region when setting the value of the new region.
! 	Handle the case where we don't know the dynamic size of the old
! 	region by marking the new region as unknown.
! 	* sm-taint.cc (tainted_allocation_size::tainted_allocation_size):
! 	Update assertion to also allow for MEMSPACE_UNKNOWN.
! 	(tainted_allocation_size::emit): Likewise.
! 	(region_model::check_dynamic_size_for_taint): Likewise.
! 
! 2022-02-03  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* region-model-impl-calls.cc (region_model::impl_call_calloc): Use
! 	a sized_region when calling zero_fill_region.
! 
! 2022-02-02  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* region-model.cc (region_model::on_return): Replace usage of
! 	copy_region with get_rvalue/set_value pair.
! 	(region_model::pop_frame): Likewise.
! 	(selftest::test_compound_assignment): Likewise.
! 	* region-model.h (region_model::copy_region): Delete decl.
! 	* region.cc (region_model::copy_region): Delete.
! 
! 2022-02-02  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* region.cc (region::calc_offset): Consolidate effectively
! 	identical cases.
! 
! 2022-02-02  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* analyzer.h (class bit_range_region): New forward decl.
! 	* region-model-manager.cc (region_model_manager::get_bit_range):
! 	New.
! 	(region_model_manager::log_stats): Handle m_bit_range_regions.
! 	* region-model.cc (region_model::get_lvalue_1): Handle
! 	BIT_FIELD_REF.
! 	* region-model.h (region_model_manager::get_bit_range): New decl.
! 	(region_model_manager::m_bit_range_regions): New field.
! 	* region.cc (region::get_base_region): Handle RK_BIT_RANGE.
! 	(region::base_region_p): Likewise.
! 	(region::calc_offset): Likewise.
! 	(bit_range_region::dump_to_pp): New.
! 	(bit_range_region::get_byte_size): New.
! 	(bit_range_region::get_bit_size): New.
! 	(bit_range_region::get_byte_size_sval): New.
! 	(bit_range_region::get_relative_concrete_offset): New.
! 	* region.h (enum region_kind): Add RK_BIT_RANGE.
! 	(region::dyn_cast_bit_range_region): New vfunc.
! 	(class bit_range_region): New.
! 	(is_a_helper <const bit_range_region *>::test): New.
! 	(default_hash_traits<bit_range_region::key_t>): New.
! 
! 2022-02-02  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104270
! 	* region-model.cc (region_model::on_call_pre): Handle
! 	IFN_DEFERRED_INIT.
! 
! 2022-01-27  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* checker-path.cc (event_kind_to_string): Handle
! 	EK_REGION_CREATION.
! 	(region_creation_event::region_creation_event): New.
! 	(region_creation_event::get_desc): New.
! 	(checker_path::add_region_creation_event): New.
! 	* checker-path.h (enum event_kind): Add EK_REGION_CREATION.
! 	(class region_creation_event): New subclass.
! 	(checker_path::add_region_creation_event): New decl.
! 	* diagnostic-manager.cc
! 	(diagnostic_manager::emit_saved_diagnostic): Pass NULL for new
! 	param to add_events_for_eedge when handling trailing eedge.
! 	(diagnostic_manager::build_emission_path): Create an interesting_t
! 	instance, allow the pending diagnostic to populate it, and pass it
! 	to the calls to add_events_for_eedge.
! 	(diagnostic_manager::add_events_for_eedge): Add "interest" param.
! 	Use it to add region_creation_events for on-stack regions created
! 	within at function entry, and when pertinent dynamically-sized
! 	regions are created.
! 	(diagnostic_manager::prune_for_sm_diagnostic): Add case for
! 	EK_REGION_CREATION.
! 	* diagnostic-manager.h (diagnostic_manager::add_events_for_eedge):
! 	Add "interest" param.
! 	* pending-diagnostic.cc: Include "selftest.h", "tristate.h",
! 	"analyzer/call-string.h", "analyzer/program-point.h",
! 	"analyzer/store.h", and "analyzer/region-model.h".
! 	(interesting_t::add_region_creation): New.
! 	(interesting_t::dump_to_pp): New.
! 	* pending-diagnostic.h (struct interesting_t): New.
! 	(pending_diagnostic::mark_interesting_stuff): New vfunc.
! 	* region-model.cc
! 	(poisoned_value_diagnostic::poisoned_value_diagnostic): Add
! 	(poisoned_value_diagnostic::operator==): Compare m_pkind and
! 	m_src_region fields.
! 	(poisoned_value_diagnostic::mark_interesting_stuff): New.
! 	(poisoned_value_diagnostic::m_src_region): New.
! 	(region_model::check_for_poison): Call
! 	get_region_for_poisoned_expr for uninit values and pass the resul
! 	to the diagnostic.
! 	(region_model::get_region_for_poisoned_expr): New.
! 	(region_model::deref_rvalue): Pass NULL for
! 	poisoned_value_diagnostic's src_region.
! 	* region-model.h (region_model::get_region_for_poisoned_expr): New
! 	decl.
! 	* region.h (frame_region::get_fndecl): New.
! 
! 2022-01-27  Martin Liska  <mliska@suse.cz>
! 
! 	PR analyzer/104247
! 	* constraint-manager.cc (bounded_ranges_manager::log_stats):
! 	Cast to long for format purpose.
! 	* region-model-manager.cc (log_uniq_map): Likewise.
! 
! 2022-01-26  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104224
! 	* region-model.cc (region_model::check_call_args): New.
! 	(region_model::on_call_pre): Call it when ignoring stdio builtins.
! 	* region-model.h (region_model::check_call_args): New decl
! 
! 2022-01-26  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/94362
! 	* constraint-manager.cc (range::add_bound): Fix tests for
! 	discarding redundant constraints.  Perform test for rejecting
! 	unsatisfiable constraints earlier so that they don't update
! 	the object on failure.
! 	(selftest::test_range): New.
! 	(selftest::test_constant_comparisons): Add test coverage for
! 	existing constraints becoming narrower until they are
! 	unsatisfiable.
! 	(selftest::run_constraint_manager_tests): Call test_range.
! 
! 2022-01-22  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104159
! 	* region-model-manager.cc
! 	(region_model_manager::get_or_create_cast): Bail out if the types
! 	are the same.  Don't attempt to handle casts involving vector
! 	types.
! 
! 2022-01-20  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/94362
! 	* constraint-manager.cc (bound::ensure_closed): Convert param to
! 	enum bound_kind.
! 	(range::constrained_to_single_element): Likewise.
! 	(range::add_bound): New.
! 	(constraint_manager::add_constraint): Handle SVAL + OFFSET
! 	compared to a constant.
! 	(constraint_manager::get_ec_bounds): Rewrite in terms of
! 	range::add_bound.
! 	(constraint_manager::eval_condition): Reject if range::add_bound
! 	fails.
! 	(selftest::test_constant_comparisons): Add test coverage for
! 	various impossible combinations of integer comparisons.
! 	* constraint-manager.h (enum bound_kind): New.
! 	(struct bound): Likewise.
! 	(bound::ensure_closed): Convert to param to enum bound_kind.
! 	(struct range): Convert to...
! 	(class range): ...this, making fields private.
! 	(range::add_bound): New decls.
! 	* region-model.cc (region_model::add_constraint): Fail if
! 	constraint_manager::add_constraint fails.
! 
! 2022-01-18  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104089
! 	* region-model-manager.cc
! 	(region_model_manager::get_or_create_constant_svalue): Assert that
! 	we have a CONSTANT_CLASS_P.
! 	(region_model_manager::maybe_fold_unaryop): Only fold a constant
! 	when fold_unary's result is a constant or a cast of a constant.
! 
! 2022-01-18  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104062
! 	* region-model-manager.cc
! 	(region_model_manager::maybe_fold_sub_svalue): Avoid casting to
! 	NULL type when folding access to repeated svalue.
! 
! 2022-01-17  Martin Liska  <mliska@suse.cz>
! 
! 	* analyzer.cc (is_special_named_call_p): Rename .c names to .cc.
! 	(is_named_call_p): Likewise.
! 	* region-model-asm.cc (deterministic_p): Likewise.
! 	* region.cc (field_region::get_relative_concrete_offset): Likewise.
! 	* sm-malloc.cc (method_p): Likewise.
! 	* supergraph.cc (superedge::dump_dot): Likewise.
! 
! 2022-01-14  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* sm-taint.cc (taint_state_machine::combine_states): Handle combination
! 	of has_ub and has_lb.
! 
! 2022-01-14  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/104029
! 	* sm-taint.cc (taint_state_machine::alt_get_inherited_state):
! 	Remove gcc_unreachable from default case for unary ops.
! 
! 2022-01-14  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* engine.cc: Include "stringpool.h", "attribs.h", and
! 	"tree-dfa.h".
! 	(mark_params_as_tainted): New.
! 	(class tainted_args_function_custom_event): New.
! 	(class tainted_args_function_info): New.
! 	(exploded_graph::add_function_entry): Handle functions with
! 	"tainted_args" attribute.
! 	(class tainted_args_field_custom_event): New.
! 	(class tainted_args_callback_custom_event): New.
! 	(class tainted_args_call_info): New.
! 	(add_tainted_args_callback): New.
! 	(add_any_callbacks): New.
! 	(exploded_graph::build_initial_worklist): Likewise.
! 	(exploded_graph::build_initial_worklist): Find callbacks that are
! 	reachable from global initializers, calling add_any_callbacks on
! 	them.
! 
! 2022-01-12  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/103940
! 	* engine.cc (impl_sm_context::impl_sm_context): Add
! 	"unknown_side_effects" param and use it to initialize
! 	new m_unknown_side_effects field.
! 	(impl_sm_context::unknown_side_effects_p): New.
! 	(impl_sm_context::m_unknown_side_effects): New.
! 	(exploded_node::on_stmt): Pass unknown_side_effects to sm_ctxt
! 	ctor.
! 	* sm-taint.cc: Include "stringpool.h" and "attribs.h".
! 	(tainted_size::tainted_size): Drop "dir" param.
! 	(tainted_size::get_kind): Drop "FINAL".
! 	(tainted_size::emit): Likewise.
! 	(tainted_size::m_dir): Drop unused field.
! 	(class tainted_access_attrib_size): New subclass.
! 	(taint_state_machine::on_stmt): Call check_for_tainted_size_arg on
! 	external functions with unknown side effects.
! 	(taint_state_machine::check_for_tainted_size_arg): New.
! 	(region_model::check_region_for_taint): Drop "dir" param from
! 	tainted_size ctor.
! 	* sm.h (sm_context::unknown_side_effects_p): New.
! 
! 2022-01-11  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/102692
! 	* diagnostic-manager.cc
! 	(class auto_disable_complexity_checks): Rename to...
! 	(class auto_checking_feasibility): ...this, updating
! 	the calls accordingly.
! 	(epath_finder::explore_feasible_paths): Update for renaming.
! 	* region-model-manager.cc
! 	(region_model_manager::region_model_manager): Update for change from
! 	m_check_complexity to m_checking_feasibility.
! 	(region_model_manager::reject_if_too_complex): Likewise.
! 	(region_model_manager::get_or_create_unknown_svalue): Handle
! 	m_checking_feasibility.
! 	(region_model_manager::create_unique_svalue): New.
! 	(region_model_manager::maybe_fold_binop): Handle BIT_AND_EXPR and
! 	BIT_IOR_EXPRs on booleans where we know the result.
! 	* region-model.cc (test_binop_svalue_folding): Add test coverage
! 	for the above.
! 	* region-model.h (region_model_manager::create_unique_svalue): New
! 	decl.
! 	(region_model_manager::enable_complexity_check): Replace with...
! 	(region_model_manager::begin_checking_feasibility): ...this.
! 	(region_model_manager::disable_complexity_check): Replace with...
! 	(region_model_manager::end_checking_feasibility): ...this.
! 	(region_model_manager::m_check_complexity): Replace with...
! 	(region_model_manager::m_checking_feasibility): ...this.
! 	(region_model_manager::m_managed_dynamic_svalues): New field.
! 
! 2022-01-08  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* engine.cc (impl_run_checkers): Pass logger to engine ctor.
! 	* region-model-manager.cc
! 	(region_model_manager::region_model_manager): Add logger param and
! 	use it to initialize m_logger.
! 	* region-model.cc (engine::engine): New.
! 	* region-model.h (region_model_manager::region_model_manager):
! 	Add logger param.
! 	(region_model_manager::get_logger): New.
! 	(region_model_manager::m_logger): New field.
! 	(engine::engine): New.
! 	* store.cc (store_manager::get_logger): New.
! 	(store::set_value): Log scope.  Log when marking a cluster as
! 	unknown due to possible aliasing.
! 	* store.h (store_manager::get_logger): New decl.
! 
! 2022-01-08  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* region-model-impl-calls.cc (cmp_decls): New.
! 	(cmp_decls_ptr_ptr): New.
! 	(region_model::impl_call_analyzer_dump_escaped): New.
! 	* region-model.cc (region_model::on_stmt_pre): Handle
! 	__analyzer_dump_escaped.
! 	* region-model.h (region_model::impl_call_analyzer_dump_escaped):
! 	New decl.
! 	* store.h (binding_cluster::get_base_region): New accessor.
! 
! 2022-01-08  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* region.cc (region::is_named_decl_p): New.
! 	* region.h (region::is_named_decl_p): New decl.
! 
! 2022-01-06  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/103546
! 	* store.cc (store::eval_alias_1): Refactor handling of decl
! 	regions, adding a test for may_be_aliased, rejecting those for
! 	which it returns false.
! 
! 2021-12-12  Jonathan Wakely  <jwakely@redhat.com>
! 
! 	* engine.cc: Define INCLUDE_MEMORY instead of INCLUDE_UNIQUE_PTR.
! 
! 2021-12-06  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/103533
! 	* constraint-manager.cc (equiv_class::contains_non_constant_p):
! 	New.
! 	(constraint_manager::canonicalize): Call it when determining
! 	redundant ECs.
! 	(selftest::test_purging): New selftest.
! 	(selftest::run_constraint_manager_tests): Likewise.
! 	* constraint-manager.h (equiv_class::contains_non_constant_p):
! 	New decl.
! 
! 2021-12-01  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/102471
! 	* region-model-reachability.cc (reachable_regions::handle_parm):
! 	Treat all svalues within a compound parm has reachable, and those
! 	wrapped in a cast.
! 
! 2021-11-29  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/103217
! 	* store.cc (binding_cluster::can_merge_p): For the "key is bound"
! 	vs "key is not bound" merger case, check that the bound svalue
! 	is mergeable before merging it to "unknown", rejecting the merger
! 	otherwise.
! 
! 2021-11-19  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/103217
! 	* engine.cc (exploded_graph::get_or_create_node): Pass in
! 	m_ext_state to program_state::can_merge_with_p.
! 	(exploded_graph::process_worklist): Likewise.
! 	(exploded_graph::maybe_process_run_of_before_supernode_enodes):
! 	Likewise.
! 	(exploded_graph::process_node): Add missing call to detect_leaks
! 	when handling phi nodes.
! 	* program-state.cc (program_state::can_merge_with_p): Add
! 	"ext_state" param.  Pass it and state ptrs to
! 	region_model::can_merge_with_p.
! 	(selftest::test_program_state_merging): Update for new ext_state
! 	param of program_state::can_merge_with_p.
! 	(selftest::test_program_state_merging_2): Likewise.
! 	* program-state.h (program_state::can_purge_p): Make const.
! 	(program_state::can_merge_with_p): Add "ext_state" param.
! 	* region-model.cc: Include "analyzer/program-state.h".
! 	(region_model::can_merge_with_p): Add params "ext_state",
! 	"state_a", and "state_b", use them when creating model_merger
! 	object.
! 	(model_merger::mergeable_svalue_p): New.
! 	* region-model.h (region_model::can_merge_with_p): Add params
! 	"ext_state", "state_a", and "state_b".
! 	(model_merger::model_merger) Likewise, initializing new fields.
! 	(model_merger::mergeable_svalue_p): New decl.
! 	(model_merger::m_ext_state): New field.
! 	(model_merger::m_state_a): New field.
! 	(model_merger::m_state_b): New field.
! 	* svalue.cc (svalue::can_merge_p): Call
! 	model_merger::mergeable_svalue_p on both states and reject the
! 	merger accordingly.
! 
! 2021-11-17  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/102695
! 	* region-model-impl-calls.cc (region_model::impl_call_strchr): New.
! 	* region-model-manager.cc
! 	(region_model_manager::maybe_fold_unaryop): Simplify cast to
! 	pointer type of an existing pointer to a region.
! 	* region-model.cc (region_model::on_call_pre): Handle
! 	BUILT_IN_STRCHR and "strchr".
! 	(write_to_const_diagnostic::emit): Add auto_diagnostic_group.  Add
! 	alternate wordings for functions and labels.
! 	(write_to_const_diagnostic::describe_final_event): Add alternate
! 	wordings for functions and labels.
! 	(region_model::check_for_writable_region): Handle RK_FUNCTION and
! 	RK_LABEL.
! 	* region-model.h (region_model::impl_call_strchr): New decl.
! 
! 2021-11-16  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/102662
! 	* constraint-manager.cc (bounded_range::operator==): Require the
! 	types to be the same for equality.
! 
! 2021-11-13  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* analyzer.opt (Wanalyzer-tainted-allocation-size): New.
! 	(Wanalyzer-tainted-divisor): New.
! 	(Wanalyzer-tainted-offset): New.
! 	(Wanalyzer-tainted-size): New.
! 	* engine.cc (impl_region_model_context::get_taint_map): New.
! 	* exploded-graph.h (impl_region_model_context::get_taint_map):
! 	New decl.
! 	* program-state.cc (sm_state_map::get_state): Call
! 	alt_get_inherited_state.
! 	(sm_state_map::impl_set_state): Modify states within
! 	compound svalues.
! 	(program_state::impl_call_analyzer_dump_state): Undo casts.
! 	(selftest::test_program_state_1): Update for new context param of
! 	create_region_for_heap_alloc.
! 	(selftest::test_program_state_merging): Likewise.
! 	* region-model-impl-calls.cc (region_model::impl_call_alloca):
! 	Likewise.
! 	(region_model::impl_call_calloc): Likewise.
! 	(region_model::impl_call_malloc): Likewise.
! 	(region_model::impl_call_operator_new): Likewise.
! 	(region_model::impl_call_realloc): Likewise.
! 	* region-model.cc (region_model::check_region_access): Call
! 	check_region_for_taint.
! 	(region_model::get_representative_path_var_1): Handle binops.
! 	(region_model::create_region_for_heap_alloc): Add "ctxt" param and
! 	pass it to set_dynamic_extents.
! 	(region_model::create_region_for_alloca): Likewise.
! 	(region_model::set_dynamic_extents): Add "ctxt" param and use it
! 	to call check_dynamic_size_for_taint.
! 	(selftest::test_state_merging): Update for new context param of
! 	create_region_for_heap_alloc.
! 	(selftest::test_malloc_constraints): Likewise.
! 	(selftest::test_malloc): Likewise.
! 	(selftest::test_alloca): Likewise for create_region_for_alloca.
! 	* region-model.h (region_model::create_region_for_heap_alloc): Add
! 	"ctxt" param.
! 	(region_model::create_region_for_alloca): Likewise.
! 	(region_model::set_dynamic_extents): Likewise.
! 	(region_model::check_dynamic_size_for_taint): New decl.
! 	(region_model::check_region_for_taint): New decl.
! 	(region_model_context::get_taint_map): New vfunc.
! 	(noop_region_model_context::get_taint_map): New.
! 	* sm-taint.cc: Remove include of "diagnostic-event-id.h"; add
! 	includes of "gimple-iterator.h", "tristate.h", "selftest.h",
! 	"ordered-hash-map.h", "cgraph.h", "cfg.h", "digraph.h",
! 	"analyzer/supergraph.h", "analyzer/call-string.h",
! 	"analyzer/program-point.h", "analyzer/store.h",
! 	"analyzer/region-model.h", and "analyzer/program-state.h".
! 	(enum bounds): Move to top of file.
! 	(class taint_diagnostic): New.
! 	(class tainted_array_index): Convert to subclass of taint_diagnostic.
! 	(tainted_array_index::emit): Add CWE-129.  Reword warning to use
! 	"attacker-controlled" rather than "tainted".
! 	(tainted_array_index::describe_state_change): Move to
! 	taint_diagnostic::describe_state_change.
! 	(tainted_array_index::describe_final_event): Reword to use
! 	"attacker-controlled" rather than "tainted".
! 	(class tainted_offset): New.
! 	(class tainted_size): New.
! 	(class tainted_divisor): New.
! 	(class tainted_allocation_size): New.
! 	(taint_state_machine::alt_get_inherited_state): New.
! 	(taint_state_machine::on_stmt): In assignment handling, remove
! 	ARRAY_REF handling in favor of check_region_for_taint.  Add
! 	detection of tainted divisors.
! 	(taint_state_machine::get_taint): New.
! 	(taint_state_machine::combine_states): New.
! 	(region_model::check_region_for_taint): New.
! 	(region_model::check_dynamic_size_for_taint): New.
! 	* sm.h (state_machine::alt_get_inherited_state): New.
! 
! 2021-11-12  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* engine.cc (exploded_node::on_stmt_pre): Return when handling
! 	"__analyzer_dump_state".
! 
! 2021-11-11  Richard Biener  <rguenther@suse.de>
! 
! 	* supergraph.cc: Include bitmap.h.
! 
! 2021-11-04  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* program-state.cc (sm_state_map::dump): Use default_tree_printer
! 	as format decoder.
! 
! 2021-09-16  Maxim Blinov  <maxim.blinov@embecosm.com>
! 
! 	PR bootstrap/102242
! 	* engine.cc (INCLUDE_UNIQUE_PTR): Define.
! 
! 2021-09-08  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/102225
! 	* analyzer.h (compat_types_p): New decl.
! 	* constraint-manager.cc
! 	(constraint_manager::get_or_add_equiv_class): Guard against NULL
! 	type when checking for pointer types.
! 	* region-model-impl-calls.cc (region_model::impl_call_realloc):
! 	Guard against NULL lhs type/region.  Guard against the size value
! 	not being of a compatible type for dynamic extents.
! 	* region-model.cc (compat_types_p): Make non-static.
! 
! 2021-08-30  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/99260
! 	* analyzer.h (class custom_edge_info): New class, adapted from
! 	exploded_edge::custom_info_t.  Make member functions const.
! 	Make update_model return bool, converting edge param from
! 	reference to a pointer, and adding a ctxt param.
! 	(class path_context): New class.
! 	* call-info.cc: New file.
! 	* call-info.h: New file.
! 	* engine.cc: Include "analyzer/call-info.h" and <memory>.
! 	(impl_region_model_context::impl_region_model_context): Update for
! 	new m_path_ctxt field.
! 	(impl_region_model_context::bifurcate): New.
! 	(impl_region_model_context::terminate_path): New.
! 	(impl_region_model_context::get_malloc_map): New.
! 	(impl_sm_context::impl_sm_context): Update for new m_path_ctxt
! 	field.
! 	(impl_sm_context::get_fndecl_for_call): Likewise.
! 	(impl_sm_context::set_next_state): Likewise.
! 	(impl_sm_context::warn): Likewise.
! 	(impl_sm_context::is_zero_assignment): Likewise.
! 	(impl_sm_context::get_path_context): New.
! 	(impl_sm_context::m_path_ctxt): New.
! 	(impl_region_model_context::on_condition): Update for new
! 	path_ctxt param.  Handle m_enode_for_diag being NULL.
! 	(impl_region_model_context::on_phi): Update for new path_ctxt
! 	param.
! 	(exploded_node::on_stmt): Add path_ctxt param, updating ctor calls
! 	to use it as necessary.  Use it to bail out after sm-handling,
! 	if needed.
! 	(exploded_node::detect_leaks): Update for new path_ctxt param.
! 	(dynamic_call_info_t::update_model): Update for conversion of
! 	exploded_edge::custom_info_t to custom_edge_info.
! 	(dynamic_call_info_t::add_events_to_path): Likewise.
! 	(rewind_info_t::update_model): Likewise.
! 	(rewind_info_t::add_events_to_path): Likewise.
! 	(exploded_edge::exploded_edge): Likewise.
! 	(exploded_graph::add_edge): Likewise.
! 	(exploded_graph::maybe_process_run_of_before_supernode_enodes):
! 	Update for new path_ctxt param.
! 	(class impl_path_context): New.
! 	(exploded_graph::process_node): Update for new path_ctxt param.
! 	Create an impl_path_context and pass it to exploded_node::on_stmt.
! 	Use it to terminate iterating stmts if terminate_path is called
! 	on it.  After processing a run of stmts, query path_ctxt to
! 	potentially terminate the analysis path, and/or to "bifurcate" the
! 	analysis into multiple additional paths.
! 	(feasibility_state::maybe_update_for_edge): Update for new
! 	update_model ctxt param.
! 	* exploded-graph.h
! 	(impl_region_model_context::impl_region_model_context): Add
! 	path_ctxt param.
! 	(impl_region_model_context::bifurcate): New.
! 	(impl_region_model_context::terminate_path): New
! 	(impl_region_model_context::get_ext_state): New.
! 	(impl_region_model_context::get_malloc_map): New.
! 	(impl_region_model_context::m_path_ctxt): New field.
! 	(exploded_node::on_stmt): Add path_ctxt param.
! 	(class exploded_edge::custom_info_t): Move to analyzer.h, renaming
! 	to custom_edge_info, and making the changes as noted in analyzer.h
! 	above.
! 	(exploded_edge::exploded_edge): Update for these changes to
! 	exploded_edge::custom_info_t.
! 	(exploded_edge::m_custom_info): Likewise.
! 	(class dynamic_call_info_t): Likewise.
! 	(class rewind_info_t): Likewise.
! 	(exploded_graph::add_edge): Likewise.
! 	* program-state.cc (program_state::on_edge): Update for new
! 	path_ctxt param.
! 	(program_state::push_call): Likewise.
! 	(program_state::returning_call): Likewise.
! 	(program_state::prune_for_point): Likewise.
! 	* region-model-impl-calls.cc: Include "analyzer/call-info.h".
! 	(call_details::get_fndecl_for_call): New.
! 	(region_model::impl_call_realloc): Reimplement.
! 	* region-model.cc (region_model::on_call_pre): Move call to
! 	impl_call_realloc to...
! 	(region_model::on_call_post): ...here.  Consolidate creation
! 	of call_details instance.
! 	(noop_region_model_context::bifurcate): New.
! 	(noop_region_model_context::terminate_path): New.
! 	* region-model.h (call_details::get_call_stmt): New.
! 	(call_details::get_fndecl_for_call): New.
! 	(region_model::on_realloc_with_move): New.
! 	(region_model_context::bifurcate): New.
! 	(region_model_context::terminate_path): New.
! 	(region_model_context::get_ext_state): New.
! 	(region_model_context::get_malloc_map): New.
! 	(noop_region_model_context::bifurcate): New.
! 	(noop_region_model_context::terminate_path): New.
! 	(noop_region_model_context::get_ext_state): New.
! 	(noop_region_model_context::get_malloc_map): New.
! 	* sm-malloc.cc: Include "analyzer/program-state.h".
! 	(malloc_state_machine::on_realloc_call): Reimplement.
! 	(malloc_state_machine::on_realloc_with_move): New.
! 	(region_model::on_realloc_with_move): New.
! 	* sm-signal.cc (class signal_delivery_edge_info_t): Update for
! 	conversion from exploded_edge::custom_info_t to custom_edge_info.
! 	* sm.h (sm_context::get_path_context): New.
! 	* svalue.cc (svalue::maybe_get_constant): Call
! 	unwrap_any_unmergeable.
! 
! 2021-08-25  Ankur Saini  <arsenic@sourceware.org>
! 
! 	PR analyzer/101980
! 	* engine.cc (exploded_graph::maybe_create_dynamic_call): Don't create
! 	calls if max recursion limit is reached.
! 
! 2021-08-23  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* analyzer.h (struct rejected_constraint): Convert to...
! 	(class rejected_constraint): ...this.
! 	(class bounded_ranges): New forward decl.
! 	(class bounded_ranges_manager): New forward decl.
! 	* constraint-manager.cc: Include "analyzer/analyzer-logging.h" and
! 	"tree-pretty-print.h".
! 	(can_plus_one_p): New.
! 	(plus_one): New.
! 	(can_minus_one_p): New.
! 	(minus_one): New.
! 	(bounded_range::bounded_range): New.
! 	(dump_cst): New.
! 	(bounded_range::dump_to_pp): New.
! 	(bounded_range::dump): New.
! 	(bounded_range::to_json): New.
! 	(bounded_range::set_json_attr): New.
! 	(bounded_range::contains_p): New.
! 	(bounded_range::intersects_p): New.
! 	(bounded_range::operator==): New.
! 	(bounded_range::cmp): New.
! 	(bounded_ranges::bounded_ranges): New.
! 	(bounded_ranges::bounded_ranges): New.
! 	(bounded_ranges::bounded_ranges): New.
! 	(bounded_ranges::canonicalize): New.
! 	(bounded_ranges::validate): New.
! 	(bounded_ranges::operator==): New.
! 	(bounded_ranges::dump_to_pp): New.
! 	(bounded_ranges::dump): New.
! 	(bounded_ranges::to_json): New.
! 	(bounded_ranges::eval_condition): New.
! 	(bounded_ranges::contain_p): New.
! 	(bounded_ranges::cmp): New.
! 	(bounded_ranges_manager::~bounded_ranges_manager): New.
! 	(bounded_ranges_manager::get_or_create_empty): New.
! 	(bounded_ranges_manager::get_or_create_point): New.
! 	(bounded_ranges_manager::get_or_create_range): New.
! 	(bounded_ranges_manager::get_or_create_union): New.
! 	(bounded_ranges_manager::get_or_create_intersection): New.
! 	(bounded_ranges_manager::get_or_create_inverse): New.
! 	(bounded_ranges_manager::consolidate): New.
! 	(bounded_ranges_manager::get_or_create_ranges_for_switch): New.
! 	(bounded_ranges_manager::create_ranges_for_switch): New.
! 	(bounded_ranges_manager::make_case_label_ranges): New.
! 	(bounded_ranges_manager::log_stats): New.
! 	(bounded_ranges_constraint::print): New.
! 	(bounded_ranges_constraint::to_json): New.
! 	(bounded_ranges_constraint::operator==): New.
! 	(bounded_ranges_constraint::add_to_hash): New.
! 	(constraint_manager::constraint_manager): Update for new field
! 	m_bounded_ranges_constraints.
! 	(constraint_manager::operator=): Likewise.
! 	(constraint_manager::hash): Likewise.
! 	(constraint_manager::operator==): Likewise.
! 	(constraint_manager::print): Likewise.
! 	(constraint_manager::dump_to_pp): Likewise.
! 	(constraint_manager::to_json): Likewise.
! 	(constraint_manager::add_unknown_constraint): Update the lhs_ec_id
! 	if necessary in existing constraints when combining equivalence
! 	classes.  Add similar code for handling
! 	m_bounded_ranges_constraints.
! 	(constraint_manager::add_constraint_internal): Add comment.
! 	(constraint_manager::add_bounded_ranges): New.
! 	(constraint_manager::eval_condition): Use new field
! 	m_bounded_ranges_constraints.
! 	(constraint_manager::purge): Update bounded_ranges_constraint
! 	instances.
! 	(constraint_manager::canonicalize): Update for new field.
! 	(merger_fact_visitor::on_ranges): New.
! 	(constraint_manager::for_each_fact): Use new field
! 	m_bounded_ranges_constraints.
! 	(constraint_manager::validate):  Fix off-by-one error needed due
! 	to bug fixed above in add_unknown_constraint.  Validate the EC IDs
! 	in m_bounded_ranges_constraints.
! 	(constraint_manager::get_range_manager): New.
! 	(selftest::assert_dump_bounded_range_eq): New.
! 	(ASSERT_DUMP_BOUNDED_RANGE_EQ): New.
! 	(selftest::test_bounded_range): New.
! 	(selftest::assert_dump_bounded_ranges_eq): New.
! 	(ASSERT_DUMP_BOUNDED_RANGES_EQ): New.
! 	(selftest::test_bounded_ranges): New.
! 	(selftest::run_constraint_manager_tests): Call the new selftests.
! 	* constraint-manager.h (struct bounded_range): New.
! 	(struct bounded_ranges): New.
! 	(template <> struct default_hash_traits<bounded_ranges::key_t>): New.
! 	(class bounded_ranges_manager): New.
! 	(fact_visitor::on_ranges): New pure virtual function.
! 	(class bounded_ranges_constraint): New.
! 	(constraint_manager::add_bounded_ranges): New decl.
! 	(constraint_manager::get_range_manager): New decl.
! 	(constraint_manager::m_bounded_ranges_constraints): New field.
! 	* diagnostic-manager.cc (epath_finder::process_worklist_item):
! 	Transfer ownership of rc to add_feasibility_problem.
! 	* engine.cc (feasibility_problem::dump_to_pp): Use get_model.
! 	* feasible-graph.cc (infeasible_node::dump_dot): Update for
! 	conversion of m_rc to a pointer.
! 	(feasible_graph::add_feasibility_problem): Pass RC by pointer and
! 	take ownership.
! 	* feasible-graph.h (infeasible_node::infeasible_node): Pass RC by
! 	pointer and take ownership.
! 	(infeasible_node::~infeasible_node): New.
! 	(infeasible_node::m_rc): Convert to a pointer.
! 	(feasible_graph::add_feasibility_problem): Pass RC by pointer and
! 	take ownership.
! 	* region-model-manager.cc: Include
! 	"analyzer/constraint-manager.h".
! 	(region_model_manager::region_model_manager): Initializer new
! 	field m_range_mgr.
! 	(region_model_manager::~region_model_manager): Delete it.
! 	(region_model_manager::log_stats): Call log_stats on it.
! 	* region-model.cc (region_model::add_constraint): Use new subclass
! 	rejected_op_constraint.
! 	(region_model::apply_constraints_for_gswitch): Reimplement using
! 	bounded_ranges_manager.
! 	(rejected_constraint::dump_to_pp): Convert to...
! 	(rejected_op_constraint::dump_to_pp): ...this.
! 	(rejected_ranges_constraint::dump_to_pp): New.
! 	* region-model.h (struct purge_stats): Add field
! 	m_num_bounded_ranges_constraints.
! 	(region_model_manager::get_range_manager): New.
! 	(region_model_manager::m_range_mgr): New.
! 	(region_model::get_range_manager): New.
! 	(struct rejected_constraint): Split into...
! 	(class rejected_constraint):...this new abstract base class,
! 	and...
! 	(class rejected_op_constraint): ...this new concrete subclass.
! 	(class rejected_ranges_constraint): New.
! 	* supergraph.cc: Include "tree-cfg.h".
! 	(supergraph::supergraph): Drop idx param from add_cfg_edge.
! 	(supergraph::add_cfg_edge): Drop idx param.
! 	(switch_cfg_superedge::switch_cfg_superedge): Move here from
! 	header.  Populate m_case_labels with all cases which go to DST.
! 	(switch_cfg_superedge::dump_label_to_pp): Reimplement to use
! 	m_case_labels.
! 	(switch_cfg_superedge::get_case_label): Delete.
! 	* supergraph.h (supergraphadd_cfg_edge): Drop "idx" param.
! 	(switch_cfg_superedge::switch_cfg_superedge): Drop idx param and
! 	move implementation to supergraph.cc.
! 	(switch_cfg_superedge::get_case_label): Delete.
! 	(switch_cfg_superedge::get_case_labels): New.
! 	(switch_cfg_superedge::m_idx): Delete.
! 	(switch_cfg_superedge::m_case_labels): New field.
! 
! 2021-08-23  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/101875
! 	* sm-file.cc (file_diagnostic::describe_state_change): Handle
! 	change.m_expr being NULL.
! 
! 2021-08-23  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/101837
! 	* analyzer.cc (maybe_reconstruct_from_def_stmt): Bail if fn is
! 	NULL, and assert that it's non-NULL before passing it to
! 	build_call_array_loc.
! 
! 2021-08-23  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/101962
  	* region-model.cc (region_model::eval_condition_without_cm):
  	Refactor comparison against zero, adding a check for
  	POINTER_PLUS_EXPR of non-NULL.
  
! 2021-08-23  David Malcolm  <dmalcolm@redhat.com>
  
! 	* store.cc (bit_range::intersects_p): New overload.
! 	(bit_range::operator-): New.
! 	(binding_cluster::maybe_get_compound_binding): Handle the partial
! 	overlap case.
! 	(selftest::test_bit_range_intersects_p): Add test coverage for
! 	new overload of bit_range::intersects_p.
! 	* store.h (bit_range::intersects_p): New overload.
! 	(bit_range::operator-): New.
  
! 2021-08-23  Ankur Saini  <arsenic@sourceware.org>
! 
! 	PR analyzer/102020
! 	* diagnostic-manager.cc
! 	(diagnostic_manager::prune_for_sm_diagnostic)<case EK_CALL_EDGE>: Fix typo.
! 
! 2021-08-21  Ankur Saini  <arsenic@sourceware.org>
! 
! 	PR analyzer/101980
! 	* diagnostic-manager.cc
! 	(diagnostic_manager::prune_for_sm_diagnostic)<case EK_CALL_EDGE>: Use
! 	caller_model only when the supergraph_edge doesn't exixt.
! 	(diagnostic_manager::prune_for_sm_diagnostic)<case EK_RETURN_EDGE>:
! 	Likewise.
! 	* engine.cc (exploded_graph::create_dynamic_call): Rename to...
! 	(exploded_graph::maybe_create_dynamic_call): ...this, return call
! 	creation status.
! 	(exploded_graph::process_node): Handle calls which were not dynamically
! 	discovered.
! 	* exploded-graph.h (exploded_graph::create_dynamic_call): Rename to...
! 	(exploded_graph::maybe_create_dynamic_call): ...this.
! 	* region-model.cc (region_model::update_for_gcall): New param, use it
! 	to push call to frame.
! 	(region_model::update_for_call_superedge): Pass callee function to
! 	update_for_gcall.
! 	* region-model.h (region_model::update_for_gcall): New param.
! 
! 2021-08-18  Ankur Saini  <arsenic@sourceware.org>
! 
! 	PR analyzer/97114
! 	* region-model.cc (region_model::get_rvalue_1): Add case for
! 	OBJ_TYPE_REF.
! 
! 2021-08-18  Ankur Saini  <arsenic@sourceware.org>
! 
! 	PR analyzer/100546
! 	* analysis-plan.cc (analysis_plan::use_summary_p): Don't use call
! 	summaries if there is no callgraph edge
! 	* checker-path.cc (call_event::call_event): Handle calls events that
! 	are not represented by a supergraph call edge
! 	(return_event::return_event): Likewise.
! 	(call_event::get_desc): Work with new call_event structure.
! 	(return_event::get_desc): Likeise.
! 	* checker-path.h (call_event::m_src_snode): New field.
! 	(call_event::m_dest_snode): New field.
! 	(return_event::m_src_snode): New field.
! 	(return_event::m_dest_snode): New field.
! 	* diagnostic-manager.cc
! 	(diagnostic_manager::prune_for_sm_diagnostic)<case EK_CALL_EDGE>:
! 	Refactor to work with edges without callgraph edge.
! 	(diagnostic_manager::prune_for_sm_diagnostic)<case EK_RETURN_EDGE>:
! 	Likewise.
! 	* engine.cc (dynamic_call_info_t::update_model): New function.
! 	(dynamic_call_info_t::add_events_to_path): New function.
! 	(exploded_graph::create_dynamic_call): New function.
! 	(exploded_graph::process_node): Work with dynamically discovered calls.
! 	* exploded-graph.h (class dynamic_call_info_t): New class.
! 	(exploded_graph::create_dynamic_call): New decl.
! 	* program-point.cc (program_point::push_to_call_stack): New function.
! 	(program_point::pop_from_call_stack): New function.
! 	* program-point.h (program_point::push_to_call_stack): New decl.
! 	(program_point::pop_from_call_stack): New decl.
! 	* program-state.cc (program_state::push_call): New function.
! 	(program_state::returning_call): New function.
! 	* program-state.h (program_state::push_call): New decl.
! 	(program_state::returning_call): New decl.
! 	* region-model.cc (region_model::update_for_gcall) New function.
! 	(region_model::update_for_return_gcall): New function.
! 	(egion_model::update_for_call_superedge): Get the underlying gcall and
! 	update for gcall.
! 	(region_model::update_for_return_superedge): Likewise.
! 	* region-model.h (region_model::update_for_gcall): New decl.
! 	(region_model::update_for_return_gcall): New decl.
! 	* state-purge.cc (state_purge_per_ssa_name::process_point): Update to
! 	work with calls without underlying cgraph edge.
! 	* supergraph.cc (supergraph::supergraph) Split snodes at every callsite.
! 	* supergraph.h (supernode::get_returning_call) New accessor.
! 
! 2021-08-04  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/101570
! 	* analyzer.cc (maybe_reconstruct_from_def_stmt): Add GIMPLE_ASM
! 	case.
! 	* analyzer.h (class asm_output_svalue): New forward decl.
! 	(class reachable_regions): New forward decl.
! 	* complexity.cc (complexity::from_vec_svalue): New.
! 	* complexity.h (complexity::from_vec_svalue): New decl.
! 	* engine.cc (feasibility_state::maybe_update_for_edge): Handle
! 	asm stmts by calling on_asm_stmt.
! 	* region-model-asm.cc: New file.
! 	* region-model-manager.cc
! 	(region_model_manager::maybe_fold_asm_output_svalue): New.
! 	(region_model_manager::get_or_create_asm_output_svalue): New.
! 	(region_model_manager::log_stats): Log m_asm_output_values_map.
! 	* region-model.cc (region_model::on_stmt_pre): Handle GIMPLE_ASM.
! 	* region-model.h (visitor::visit_asm_output_svalue): New.
! 	(region_model_manager::get_or_create_asm_output_svalue): New decl.
! 	(region_model_manager::maybe_fold_asm_output_svalue): New decl.
! 	(region_model_manager::asm_output_values_map_t): New typedef.
! 	(region_model_manager::m_asm_output_values_map): New field.
! 	(region_model::on_asm_stmt): New.
! 	* store.cc (binding_cluster::on_asm): New.
! 	* store.h (binding_cluster::on_asm): New decl.
! 	* svalue.cc (svalue::cmp_ptr): Handle SK_ASM_OUTPUT.
! 	(asm_output_svalue::dump_to_pp): New.
! 	(asm_output_svalue::dump_input): New.
! 	(asm_output_svalue::input_idx_to_asm_idx): New.
! 	(asm_output_svalue::accept): New.
! 	* svalue.h (enum svalue_kind): Add SK_ASM_OUTPUT.
! 	(svalue::dyn_cast_asm_output_svalue): New.
! 	(class asm_output_svalue): New.
! 	(is_a_helper <const asm_output_svalue *>::test): New.
! 	(struct default_hash_traits<asm_output_svalue::key_t>): New.
! 
! 2021-08-03  Jakub Jelinek  <jakub@redhat.com>
! 
! 	PR analyzer/101721
! 	* sm-malloc.cc (known_allocator_p): Only check DECL_FUNCTION_CODE on
! 	BUILT_IN_NORMAL builtins.
! 
! 2021-07-29  Ankur Saini  <arsenic@sourceware.org>
! 
! 	* call-string.cc (call_string::element_t::operator==): New operator.
! 	(call_String::element_t::operator!=): New operator.
! 	(call_string::element_t::get_caller_function): New function.
! 	(call_string::element_t::get_callee_function): New function.
! 	(call_string::call_string): Refactor to Initialise m_elements.
! 	(call_string::operator=): Refactor to work with m_elements.
! 	(call_string::operator==): Likewise.
! 	(call_string::to_json): Likewise.
! 	(call_string::hash): Refactor to hash e.m_caller.
! 	(call_string::push_call): Refactor to work with m_elements.
! 	(call_string::push_call): New overload to push call via supernodes.
! 	(call_string::pop): Refactor to work with m_elements.
! 	(call_string::calc_recursion_depth): Likewise.
! 	(call_string::cmp): Likewise.
! 	(call_string::validate): Likewise.
! 	(call_string::operator[]): Likewise.
! 	* call-string.h (class supernode): New forward decl.
! 	(struct call_string::element_t): New struct.
! 	(call_string::call_string): Refactor to initialise m_elements.
! 	(call_string::bool empty_p): Refactor to work with m_elements.
! 	(call_string::get_callee_node): New decl.
! 	(call_string::get_caller_node): New decl.
! 	(m_elements): Replaces m_return_edges.
! 	* program-point.cc (program_point::get_function_at_depth): Refactor to
! 	work with new call-string format.
! 	(program_point::validate): Likewise.
! 	(program_point::on_edge): Likewise.
! 
! 2021-07-28  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* region-model.cc (region_model::on_call_pre): Treat
! 	IFN_UBSAN_BOUNDS, BUILT_IN_STACK_SAVE, and BUILT_IN_STACK_RESTORE
! 	as no-ops, rather than handling them as unknown functions.
! 
! 2021-07-28  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* region-model-impl-calls.cc (region_model::impl_call_alloca):
! 	Drop redundant return value.
! 	(region_model::impl_call_builtin_expect): Likewise.
! 	(region_model::impl_call_calloc): Likewise.
! 	(region_model::impl_call_malloc): Likewise.
! 	(region_model::impl_call_memset): Likewise.
! 	(region_model::impl_call_operator_new): Likewise.
! 	(region_model::impl_call_operator_delete): Likewise.
! 	(region_model::impl_call_strlen): Likewise.
! 	* region-model.cc (region_model::on_call_pre): Fix return value of
! 	known functions that don't have unknown side-effects.
! 	* region-model.h (region_model::impl_call_alloca): Drop redundant
! 	return value.
! 	(region_model::impl_call_builtin_expect): Likewise.
! 	(region_model::impl_call_calloc): Likewise.
! 	(region_model::impl_call_malloc): Likewise.
! 	(region_model::impl_call_memset): Likewise.
! 	(region_model::impl_call_strlen): Likewise.
! 	(region_model::impl_call_operator_new): Likewise.
! 	(region_model::impl_call_operator_delete): Likewise.
! 
! 2021-07-28  Siddhesh Poyarekar  <siddhesh@gotplt.org>
! 
! 	* analyzer.cc (is_named_call_p, is_std_named_call_p): Make
! 	first argument a const_tree.
! 	* analyzer.h (is_named_call_p, -s_std_named_call_p): Likewise.
! 	* sm-malloc.cc (known_allocator_p): New function.
! 	(malloc_state_machine::on_stmt): Use it.
! 
! 2021-07-28  Siddhesh Poyarekar  <siddhesh@gotplt.org>
! 
! 	* sm-malloc.cc
! 	(malloc_state_machine::get_or_create_deallocator): Recognize
! 	__builtin_free.
! 
! 2021-07-26  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* region-model.cc (region_model::on_call_pre): Always set conjured
! 	LHS, not just for SSA names.
! 
! 2021-07-23  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* diagnostic-manager.cc
! 	(class auto_disable_complexity_checks): New.
! 	(epath_finder::explore_feasible_paths): Use it to disable
! 	complexity checks whilst processing the worklist.
! 	* region-model-manager.cc
! 	(region_model_manager::region_model_manager): Initialize
! 	m_check_complexity.
! 	(region_model_manager::reject_if_too_complex): Bail if
! 	m_check_complexity is false.
! 	* region-model.h
! 	(region_model_manager::enable_complexity_check): New.
! 	(region_model_manager::disable_complexity_check): New.
! 	(region_model_manager::m_check_complexity): New.
! 
! 2021-07-21  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/101547
! 	* sm-file.cc (file_leak::emit): Handle m_arg being NULL.
! 	(file_leak::describe_final_event): Handle ev.m_expr being NULL.
! 
! 2021-07-21  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/101522
! 	* store.cc (binding_cluster::purge_state_involving): Don't change
! 	m_map whilst iterating through it.
! 
! 2021-07-21  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* region-model.cc (region_model::handle_phi): Add "old_state"
! 	param and use it.
! 	(region_model::update_for_phis): Update so that all of the phi
! 	stmts are effectively handled simultaneously, rather than in
! 	order.
! 	* region-model.h (region_model::handle_phi): Add "old_state"
! 	param.
! 	* state-purge.cc (self_referential_phi_p): Replace with...
! 	(name_used_by_phis_p): ...this new function.
! 	(state_purge_per_ssa_name::process_point): Update to use the
! 	above, so that all phi stmts at a basic block are effectively
! 	considered simultaneously, and only consider the phi arguments for
! 	the pertinent in-edge.
! 	* supergraph.cc (cfg_superedge::get_phi_arg_idx): New.
! 	(cfg_superedge::get_phi_arg): Use the above.
! 	* supergraph.h (cfg_superedge::get_phi_arg_idx): New decl.
! 
! 2021-07-21  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* state-purge.cc (state_purge_annotator::add_node_annotations):
! 	Rather than erroneously always using the NULL in-edge, determine
! 	each relevant in-edge, and print the appropriate data for each
! 	in-edge.  Use print_needed to print the data as comma-separated
! 	lists of SSA names.
! 	(print_vec_of_names): Add "within_table" param and use it.
! 	(state_purge_annotator::add_stmt_annotations): Factor out
! 	collation and printing code into...
! 	(state_purge_annotator::print_needed): ...this new function.
! 	* state-purge.h (state_purge_annotator::print_needed): New decl.
! 
! 2021-07-21  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* program-point.cc (function_point::print): Show src BB index at
! 	BEFORE_SUPERNODE.
! 
! 2021-07-21  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* svalue.cc (infix_p): New.
! 	(binop_svalue::dump_to_pp): Use it to print MIN_EXPR and MAX_EXPR
! 	in prefix form, rather than infix.
! 
! 2021-07-19  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/101503
! 	* constraint-manager.cc (constraint_manager::add_constraint): Use
! 	can_have_associated_state_p rather than testing for unknown.
! 	(constraint_manager::get_or_add_equiv_class): Likewise.
! 	* program-state.cc (sm_state_map::set_state): Likewise.
! 	(sm_state_map::impl_set_state): Add assertion.
! 	* region-model-manager.cc
! 	(region_model_manager::maybe_fold_unaryop): Handle poisoned
! 	values.
! 	(region_model_manager::maybe_fold_binop): Move handling of unknown
! 	values...
! 	(region_model_manager::get_or_create_binop): ...to here, and
! 	generalize to use can_have_associated_state_p.
! 	(region_model_manager::maybe_fold_sub_svalue): Use
! 	can_have_associated_state_p rather than testing for unknown.
! 	(region_model_manager::maybe_fold_repeated_svalue): Use unknown
! 	when the size or repeated value is "unknown"/"poisoned".
! 	* region-model.cc (region_model::purge_state_involving): Reject
! 	attempts to purge unknown/poisoned svalues, as these svalues
! 	should not have state associated with them.
! 	* svalue.cc (sub_svalue::sub_svalue): Assert that we're building
! 	on top of an svalue with can_have_associated_state_p.
! 	(repeated_svalue::repeated_svalue): Likewise.
! 	(bits_within_svalue::bits_within_svalue): Likewise.
! 	* svalue.h (svalue::can_have_associated_state_p): New.
! 	(unknown_svalue::can_have_associated_state_p): New.
! 	(poisoned_svalue::can_have_associated_state_p): New.
! 	(unaryop_svalue::unaryop_svalue): Assert that we're building on
! 	top of an svalue with can_have_associated_state_p.
! 	(binop_svalue::binop_svalue): Likewise.
! 	(widening_svalue::widening_svalue): Likewise.
! 
! 2021-07-16  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* analyzer.h (enum access_direction): New.
! 	* engine.cc (exploded_node::on_longjmp): Update for new param of
! 	get_store_value.
! 	* program-state.cc (program_state::prune_for_point): Likewise.
! 	* region-model-impl-calls.cc (region_model::impl_call_memcpy):
! 	Replace call to check_for_writable_region with call to
! 	check_region_for_write.
! 	(region_model::impl_call_memset): Likewise.
! 	(region_model::impl_call_strcpy): Likewise.
! 	* region-model-reachability.cc (reachable_regions::add): Update
! 	for new param of get_store_value.
! 	* region-model.cc (region_model::get_rvalue_1): Likewise, also for
! 	get_rvalue_for_bits.
! 	(region_model::get_store_value): Add ctxt param and use it to call
! 	check_region_for_read.
! 	(region_model::get_rvalue_for_bits): Add ctxt param and use it to
! 	call get_store_value.
! 	(region_model::check_region_access): New.
! 	(region_model::check_region_for_write): New.
! 	(region_model::check_region_for_read): New.
! 	(region_model::set_value): Update comment.  Replace call to
! 	check_for_writable_region with call to check_region_for_write.
! 	* region-model.h (region_model::get_rvalue_for_bits): Add ctxt
! 	param.
! 	(region_model::get_store_value): Add ctxt param.
! 	(region_model::check_region_access): New decl.
! 	(region_model::check_region_for_write): New decl.
! 	(region_model::check_region_for_read): New decl.
! 	* region.cc (region_model::copy_region): Update call to
! 	get_store_value.
! 	* svalue.cc (initial_svalue::implicitly_live_p): Likewise.
! 
! 2021-07-16  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* engine.cc (exploded_node::on_stmt_pre): Handle
! 	__analyzer_dump_state.
! 	* program-state.cc (extrinsic_state::get_sm_idx_by_name): New.
! 	(program_state::impl_call_analyzer_dump_state): New.
! 	* program-state.h (extrinsic_state::get_sm_idx_by_name): New decl.
! 	(program_state::impl_call_analyzer_dump_state): New decl.
! 	* region-model-impl-calls.cc
! 	(call_details::get_arg_string_literal): New.
! 	* region-model.h (call_details::get_arg_string_literal): New decl.
! 
! 2021-07-16  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* program-state.cc (program_state::detect_leaks): Simplify using
! 	svalue::maybe_get_region.
! 	* region-model-impl-calls.cc (region_model::impl_call_fgets): Likewise.
! 	(region_model::impl_call_fread): Likewise.
! 	(region_model::impl_call_free): Likewise.
! 	(region_model::impl_call_operator_delete): Likewise.
! 	* region-model.cc (selftest::test_stack_frames): Likewise.
! 	(selftest::test_state_merging): Likewise.
! 	* svalue.cc (svalue::maybe_get_region): New.
! 	* svalue.h (svalue::maybe_get_region): New decl.
! 
! 2021-07-15  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* svalue.h (is_a_helper <placeholder_svalue *>::test): Make
! 	param and template param const.
! 	(is_a_helper <widening_svalue *>::test): Likewise.
! 	(is_a_helper <compound_svalue *>::test): Likewise.
! 	(is_a_helper <conjured_svalue *>::test): Likewise.
! 
! 2021-07-15  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/95006
! 	PR analyzer/94713
! 	PR analyzer/94714
! 	* analyzer.cc (maybe_reconstruct_from_def_stmt): Split out
! 	GIMPLE_ASSIGN case into...
! 	(get_diagnostic_tree_for_gassign_1): New.
! 	(get_diagnostic_tree_for_gassign): New.
! 	* analyzer.h (get_diagnostic_tree_for_gassign): New decl.
! 	* analyzer.opt (Wanalyzer-write-to-string-literal): New.
! 	* constraint-manager.cc (class svalue_purger): New.
! 	(constraint_manager::purge_state_involving): New.
! 	* constraint-manager.h
! 	(constraint_manager::purge_state_involving): New.
! 	* diagnostic-manager.cc (saved_diagnostic::supercedes_p): New.
! 	(dedupe_winners::handle_interactions): New.
! 	(diagnostic_manager::emit_saved_diagnostics): Call it.
! 	* diagnostic-manager.h (saved_diagnostic::supercedes_p): New decl.
! 	* engine.cc (impl_region_model_context::warn): Convert return type
! 	to bool.  Return false if the diagnostic isn't saved.
! 	(impl_region_model_context::purge_state_involving): New.
! 	(impl_sm_context::get_state): Use NULL ctxt when querying old
! 	rvalue.
! 	(impl_sm_context::set_next_state): Use new sval when querying old
! 	state.
! 	(class dump_path_diagnostic): Move to region-model.cc
! 	(exploded_node::on_stmt): Move to on_stmt_pre and on_stmt_post.
! 	Remove call to purge_state_involving.
! 	(exploded_node::on_stmt_pre): New, based on the above.  Move most
! 	of it to region_model::on_stmt_pre.
! 	(exploded_node::on_stmt_post): Likewise, moving to
! 	region_model::on_stmt_post.
! 	(class stale_jmp_buf): Fix parent class to use curiously recurring
! 	template pattern.
! 	(feasibility_state::maybe_update_for_edge): Call on_call_pre and
! 	on_call_post on gcalls.
! 	* exploded-graph.h (impl_region_model_context::warn): Return bool.
! 	(impl_region_model_context::purge_state_involving): New decl.
! 	(exploded_node::on_stmt_pre): New decl.
! 	(exploded_node::on_stmt_post): New decl.
! 	* pending-diagnostic.h (pending_diagnostic::use_of_uninit_p): New.
! 	(pending_diagnostic::supercedes_p): New.
! 	* program-state.cc (sm_state_map::get_state): Inherit state for
! 	conjured_svalue as well as initial_svalue.
! 	(sm_state_map::purge_state_involving): Also support SK_CONJURED.
! 	* region-model-impl-calls.cc (call_details::get_uncertainty):
! 	Handle m_ctxt being NULL.
! 	(call_details::get_or_create_conjured_svalue): New.
! 	(region_model::impl_call_fgets): New.
! 	(region_model::impl_call_fread): New.
! 	* region-model-manager.cc
! 	(region_model_manager::get_or_create_initial_value): Return an
! 	uninitialized poisoned value for regions that can't have initial
! 	values.
! 	* region-model-reachability.cc
! 	(reachable_regions::mark_escaped_clusters): Handle ctxt being
! 	NULL.
! 	* region-model.cc (region_to_value_map::purge_state_involving): New.
! 	(poisoned_value_diagnostic::use_of_uninit_p): New.
! 	(poisoned_value_diagnostic::emit): Handle POISON_KIND_UNINIT.
! 	(poisoned_value_diagnostic::describe_final_event): Likewise.
! 	(region_model::check_for_poison): New.
! 	(region_model::on_assignment): Call it.
! 	(class dump_path_diagnostic): Move here from engine.cc.
! 	(region_model::on_stmt_pre): New, based on exploded_node::on_stmt.
! 	(region_model::on_call_pre): Move the setting of the LHS to a
! 	conjured svalue to before the checks for specific functions.
! 	Handle "fgets", "fgets_unlocked", and "fread".
! 	(region_model::purge_state_involving): New.
! 	(region_model::handle_unrecognized_call): Handle ctxt being NULL.
! 	(region_model::get_rvalue): Call check_for_poison.
! 	(selftest::test_stack_frames): Use NULL for context when getting
! 	uninitialized rvalue.
! 	(selftest::test_alloca): Likewise.
! 	* region-model.h (region_to_value_map::purge_state_involving): New
! 	decl.
! 	(call_details::get_or_create_conjured_svalue): New decl.
! 	(region_model::on_stmt_pre): New decl.
! 	(region_model::purge_state_involving): New decl.
! 	(region_model::impl_call_fgets): New decl.
! 	(region_model::impl_call_fread): New decl.
! 	(region_model::check_for_poison): New decl.
! 	(region_model_context::warn): Return bool.
! 	(region_model_context::purge_state_involving): New.
! 	(noop_region_model_context::warn): Return bool.
! 	(noop_region_model_context::purge_state_involving): New.
! 	(test_region_model_context:: warn): Return bool.
! 	* region.cc (region::get_memory_space): New.
! 	(region::can_have_initial_svalue_p): New.
! 	(region::involves_p): New.
! 	* region.h (enum memory_space): New.
! 	(region::get_memory_space): New decl.
! 	(region::can_have_initial_svalue_p): New decl.
! 	(region::involves_p): New decl.
! 	* sm-malloc.cc (use_after_free::supercedes_p): New.
! 	* store.cc (binding_cluster::purge_state_involving): New.
! 	(store::purge_state_involving): New.
! 	* store.h (class symbolic_binding): New forward decl.
! 	(binding_key::dyn_cast_symbolic_binding): New.
! 	(symbolic_binding::dyn_cast_symbolic_binding): New.
! 	(binding_cluster::purge_state_involving): New.
! 	(store::purge_state_involving): New.
! 	* svalue.cc (svalue::can_merge_p): Reject attempts to merge
! 	poisoned svalues with other svalues, so that we identify
! 	paths in which a variable is conditionally uninitialized.
! 	(involvement_visitor::visit_conjured_svalue): New.
! 	(svalue::involves_p): Also handle SK_CONJURED.
! 	(poison_kind_to_str): Handle POISON_KIND_UNINIT.
! 	(poisoned_svalue::maybe_fold_bits_within): New.
! 	* svalue.h (enum poison_kind): Add POISON_KIND_UNINIT.
! 	(poisoned_svalue::maybe_fold_bits_within): New decl.
! 
! 2021-07-15  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* analyzer.opt (fdump-analyzer-exploded-paths): New.
! 	* diagnostic-manager.cc
! 	(diagnostic_manager::emit_saved_diagnostic): Implement it.
! 	* engine.cc (exploded_path::dump_to_pp): Add ext_state param and
! 	use it to dump states if non-NULL.
! 	(exploded_path::dump): Likewise.
! 	(exploded_path::dump_to_file): New.
! 	* exploded-graph.h (exploded_path::dump_to_pp): Add ext_state
! 	param.
! 	(exploded_path::dump): Likewise.
! 	(exploded_path::dump): Likewise.
! 	(exploded_path::dump_to_file): New.
! 
! 2021-07-15  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* analyzer.cc (fixup_tree_for_diagnostic_1): Use DECL_DEBUG_EXPR
! 	if it's available.
! 	* engine.cc (readability): Likewise.
! 
! 2021-07-15  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* state-purge.cc (self_referential_phi_p): New.
! 	(state_purge_per_ssa_name::process_point): Don't purge an SSA name
! 	at its def-stmt if the def-stmt is self-referential.
! 
! 2021-07-07  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* diagnostic-manager.cc (null_assignment_sm_context::get_state):
! 	New overload.
! 	(null_assignment_sm_context::set_next_state): New overload.
! 	(null_assignment_sm_context::get_diagnostic_tree): New.
! 	* engine.cc (impl_sm_context::get_state): New overload.
! 	(impl_sm_context::set_next_state): New overload.
! 	(impl_sm_context::get_diagnostic_tree): New overload.
! 	(impl_region_model_context::on_condition): Convert params from
! 	tree to const svalue *.
! 	* exploded-graph.h (impl_region_model_context::on_condition):
! 	Likewise.
! 	* region-model.cc (region_model::on_call_pre): Move handling of
! 	internal calls to before checking for get_fndecl_for_call.
! 	(region_model::add_constraints_from_binop): New.
! 	(region_model::add_constraint): Split out into a new overload
! 	working on const svalue * rather than tree.  Call
! 	add_constraints_from_binop.  Drop call to
! 	add_any_constraints_from_ssa_def_stmt.
! 	(region_model::add_any_constraints_from_ssa_def_stmt): Delete.
! 	(region_model::add_any_constraints_from_gassign): Delete.
! 	(region_model::add_any_constraints_from_gcall): Delete.
! 	* region-model.h
! 	(region_model::add_any_constraints_from_ssa_def_stmt): Delete.
! 	(region_model::add_any_constraints_from_gassign): Delete.
! 	(region_model::add_any_constraints_from_gcall): Delete.
! 	(region_model::add_constraint): Add overload decl.
! 	(region_model::add_constraints_from_binop): New decl.
! 	(region_model_context::on_condition): Convert params from tree to
! 	const svalue *.
! 	(noop_region_model_context::on_condition): Likewise.
! 	* sm-file.cc (fileptr_state_machine::condition): Likewise.
! 	* sm-malloc.cc (malloc_state_machine::on_condition): Likewise.
! 	* sm-pattern-test.cc: Include tristate.h, selftest.h,
! 	analyzer/call-string.h, analyzer/program-point.h,
! 	analyzer/store.h, and analyzer/region-model.h.
! 	(pattern_test_state_machine::on_condition): Convert params from tree to
! 	const svalue *.
! 	* sm-sensitive.cc (sensitive_state_machine::on_condition): Delete.
! 	* sm-signal.cc (signal_state_machine::on_condition): Delete.
! 	* sm-taint.cc (taint_state_machine::on_condition): Convert params
! 	from tree to const svalue *.
! 	* sm.cc: Include tristate.h, selftest.h, analyzer/call-string.h,
! 	analyzer/program-point.h, analyzer/store.h, and
! 	analyzer/region-model.h.
! 	(any_pointer_p): Add overload taking const svalue *sval.
! 	* sm.h (any_pointer_p): Add overload taking const svalue *sval.
! 	(state_machine::on_condition): Convert params from tree to
! 	const svalue *.  Provide no-op default implementation.
! 	(sm_context::get_state): Add overload taking const svalue *sval.
! 	(sm_context::set_next_state): Likewise.
! 	(sm_context::on_transition): Likewise.
! 	(sm_context::get_diagnostic_tree): Likewise.
! 	* svalue.cc (svalue::all_zeroes_p): New.
! 	(constant_svalue::all_zeroes_p): New.
! 	(repeated_svalue::all_zeroes_p): Convert to vfunc.
! 	* svalue.h (svalue::all_zeroes_p): New decl.
! 	(constant_svalue::all_zeroes_p): New decl.
! 	(repeated_svalue::all_zeroes_p): Convert decl to vfunc.
! 
! 2021-06-30  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/95006
! 	* analyzer.h (class repeated_svalue): New forward decl.
! 	(class bits_within_svalue): New forward decl.
! 	(class sized_region): New forward decl.
! 	(get_field_at_bit_offset): New forward decl.
! 	* engine.cc (exploded_graph::get_or_create_node): Validate the
! 	merged state.
! 	(exploded_graph::maybe_process_run_of_before_supernode_enodes):
! 	Validate the states at each stage.
! 	* program-state.cc (program_state::validate): Validate
! 	m_region_model.
! 	* region-model-impl-calls.cc (region_model::impl_call_memset):
! 	Replace special-case logic for handling constant sizes with
! 	a call to fill_region of a sized_region with the given fill value.
! 	* region-model-manager.cc (maybe_undo_optimize_bit_field_compare):
! 	Drop DK_direct.
! 	(region_model_manager::maybe_fold_sub_svalue):  Fold element-based
! 	subregions of an initial value into initial values of an element.
! 	Fold subvalues of repeated svalues.
! 	(region_model_manager::maybe_fold_repeated_svalue): New.
! 	(region_model_manager::get_or_create_repeated_svalue): New.
! 	(get_bit_range_for_field): New.
! 	(get_byte_range_for_field): New.
! 	(get_field_at_byte_range): New.
! 	(region_model_manager::maybe_fold_bits_within_svalue): New.
! 	(region_model_manager::get_or_create_bits_within): New.
! 	(region_model_manager::get_sized_region): New.
! 	(region_model_manager::log_stats): Update for addition of
! 	m_repeated_values_map, m_bits_within_values_map, and
! 	m_sized_regions.
! 	* region-model.cc (region_model::validate): New.
! 	(region_model::on_assignment): Drop enum binding_kind.
! 	(region_model::get_initial_value_for_global): Likewise.
! 	(region_model::get_rvalue_for_bits): Replace body with call to
! 	get_or_create_bits_within.
! 	(region_model::get_capacity): Handle RK_SIZED.
! 	(region_model::set_value): Drop enum binding_kind.
! 	(region_model::fill_region): New.
! 	(region_model::get_representative_path_var_1): Handle RK_SIZED.
! 	* region-model.h (visitor::visit_repeated_svalue): New.
! 	(visitor::visit_bits_within_svalue): New.
! 	(region_model_manager::get_or_create_repeated_svalue): New decl.
! 	(region_model_manager::get_or_create_bits_within): New decl.
! 	(region_model_manager::get_sized_region): New decl.
! 	(region_model_manager::maybe_fold_repeated_svalue): New decl.
! 	(region_model_manager::maybe_fold_bits_within_svalue): New decl.
! 	(region_model_manager::repeated_values_map_t): New typedef.
! 	(region_model_manager::m_repeated_values_map): New field.
! 	(region_model_manager::bits_within_values_map_t): New typedef.
! 	(region_model_manager::m_bits_within_values_map): New field.
! 	(region_model_manager::m_sized_regions): New field.
! 	(region_model::fill_region): New decl.
! 	* region.cc (region::get_base_region): Handle RK_SIZED.
! 	(region::base_region_p): Likewise.
! 	(region::get_byte_size_sval): New.
! 	(get_field_at_bit_offset): Make non-static.
! 	(region::calc_offset): Move implementation of cases to
! 	get_relative_concrete_offset vfunc implementations.  Handle
! 	RK_SIZED.
! 	(region::get_relative_concrete_offset): New.
! 	(decl_region::get_svalue_for_initializer): Drop enum binding_kind.
! 	(field_region::get_relative_concrete_offset): New, from
! 	region::calc_offset.
! 	(element_region::get_relative_concrete_offset): Likewise.
! 	(offset_region::get_relative_concrete_offset): Likewise.
! 	(sized_region::accept): New.
! 	(sized_region::dump_to_pp): New.
! 	(sized_region::get_byte_size): New.
! 	(sized_region::get_bit_size): New.
! 	* region.h (enum region_kind): Add RK_SIZED.
! 	(region::dyn_cast_sized_region): New.
! 	(region::get_byte_size): Make virtual.
! 	(region::get_bit_size): Likewise.
! 	(region::get_byte_size_sval): New decl.
! 	(region::get_relative_concrete_offset): New decl.
! 	(field_region::get_relative_concrete_offset): New decl.
! 	(element_region::get_relative_concrete_offset): Likewise.
! 	(offset_region::get_relative_concrete_offset): Likewise.
! 	(class sized_region): New.
! 	* store.cc (binding_kind_to_string): Delete.
! 	(binding_key::make): Drop enum binding_kind.
! 	(binding_key::dump_to_pp): Delete.
! 	(binding_key::cmp_ptrs): Drop enum binding_kind.
! 	(bit_range::contains_p): New.
! 	(byte_range::dump): New.
! 	(byte_range::contains_p): New.
! 	(byte_range::cmp): New.
! 	(concrete_binding::dump_to_pp): Drop enum binding_kind.
! 	(concrete_binding::cmp_ptr_ptr): Likewise.
! 	(symbolic_binding::dump_to_pp): Likewise.
! 	(symbolic_binding::cmp_ptr_ptr): Likewise.
! 	(binding_map::apply_ctor_val_to_range): Likewise.
! 	(binding_map::apply_ctor_pair_to_child_region): Likewise.
! 	(binding_map::get_overlapping_bindings): New.
! 	(binding_map::remove_overlapping_bindings): New.
! 	(binding_cluster::validate): New.
! 	(binding_cluster::bind): Drop enum binding_kind.
! 	(binding_cluster::bind_compound_sval): Likewise.
! 	(binding_cluster::purge_region): Likewise.
! 	(binding_cluster::zero_fill_region): Reimplement in terms of...
! 	(binding_cluster::fill_region): New.
! 	(binding_cluster::mark_region_as_unknown): Drop enum binding_kind.
! 	(binding_cluster::get_binding): Likewise.
! 	(binding_cluster::get_binding_recursive): Likewise.
! 	(binding_cluster::get_any_binding): Likewise.
! 	(binding_cluster::maybe_get_compound_binding): Reimplement.
! 	(binding_cluster::get_overlapping_bindings): Delete.
! 	(binding_cluster::remove_overlapping_bindings): Reimplement in
! 	terms of binding_map::remove_overlapping_bindings.
! 	(binding_cluster::can_merge_p): Update for removal of
! 	enum binding_kind.
! 	(binding_cluster::on_unknown_fncall): Drop enum binding_kind.
! 	(binding_cluster::maybe_get_simple_value): Likewise.
! 	(store_manager::get_concrete_binding): Likewise.
! 	(store_manager::get_symbolic_binding): Likewise.
! 	(store::validate): New.
! 	(store::set_value): Drop enum binding_kind.
! 	(store::zero_fill_region): Reimplement in terms of...
! 	(store::fill_region): New.
! 	(selftest::test_binding_key_overlap): Drop enum binding_kind.
! 	* store.h (enum binding_kind): Delete.
! 	(binding_kind_to_string): Delete decl.
! 	(binding_key::make): Drop enum binding_kind.
! 	(binding_key::dump_to_pp): Make pure virtual.
! 	(binding_key::get_kind): Delete.
! 	(binding_key::mark_deleted): Delete.
! 	(binding_key::mark_empty): Delete.
! 	(binding_key::is_deleted): Delete.
! 	(binding_key::is_empty): Delete.
! 	(binding_key::binding_key): Delete.
! 	(binding_key::impl_hash): Delete.
! 	(binding_key::impl_eq): Delete.
! 	(binding_key::m_kind): Delete.
! 	(bit_range::get_last_bit_offset): New.
! 	(bit_range::contains_p): New.
! 	(byte_range::contains_p): New.
! 	(byte_range::operator==): New.
! 	(byte_range::get_start_byte_offset): New.
! 	(byte_range::get_next_byte_offset): New.
! 	(byte_range::get_last_byte_offset): New.
! 	(byte_range::as_bit_range): New.
! 	(byte_range::cmp): New.
! 	(concrete_binding::concrete_binding): Drop enum binding_kind.
! 	(concrete_binding::hash): Likewise.
! 	(concrete_binding::operator==): Likewise.
! 	(concrete_binding::mark_deleted): New.
! 	(concrete_binding::mark_empty): New.
! 	(concrete_binding::is_deleted): New.
! 	(concrete_binding::is_empty): New.
! 	(default_hash_traits<ana::concrete_binding>::empty_zero_p): Make false.
! 	(symbolic_binding::symbolic_binding): Drop enum binding_kind.
! 	(symbolic_binding::hash): Likewise.
! 	(symbolic_binding::operator==): Likewise.
! 	(symbolic_binding::mark_deleted): New.
! 	(symbolic_binding::mark_empty): New.
! 	(symbolic_binding::is_deleted): New.
! 	(symbolic_binding::is_empty): New.
! 	(binding_map::remove_overlapping_bindings): New decl.
! 	(binding_map::get_overlapping_bindings): New decl.
! 	(binding_cluster::validate): New decl.
! 	(binding_cluster::bind): Drop enum binding_kind.
! 	(binding_cluster::fill_region): New decl.
! 	(binding_cluster::get_binding): Drop enum binding_kind.
! 	(binding_cluster::get_binding_recursive): Likewise.
! 	(binding_cluster::get_overlapping_bindings): Delete.
! 	(store::validate): New decl.
! 	(store::set_value): Drop enum binding_kind.
! 	(store::fill_region): New decl.
! 	(store_manager::get_concrete_binding): Drop enum binding_kind.
! 	(store_manager::get_symbolic_binding): Likewise.
! 	* svalue.cc (svalue::cmp_ptr): Handle SK_REPEATED and
! 	SK_BITS_WITHIN.
! 	(svalue::extract_bit_range): New.
! 	(svalue::maybe_fold_bits_within): New.
! 	(constant_svalue::maybe_fold_bits_within): New.
! 	(unknown_svalue::maybe_fold_bits_within): New.
! 	(unaryop_svalue::maybe_fold_bits_within): New.
! 	(repeated_svalue::repeated_svalue): New.
! 	(repeated_svalue::dump_to_pp): New.
! 	(repeated_svalue::accept): New.
! 	(repeated_svalue::all_zeroes_p): New.
! 	(repeated_svalue::maybe_fold_bits_within): New.
! 	(bits_within_svalue::bits_within_svalue): New.
! 	(bits_within_svalue::dump_to_pp): New.
! 	(bits_within_svalue::maybe_fold_bits_within): New.
! 	(bits_within_svalue::accept): New.
! 	(bits_within_svalue::implicitly_live_p): New.
! 	(compound_svalue::maybe_fold_bits_within): New.
! 	* svalue.h (enum svalue_kind): Add SK_REPEATED and SK_BITS_WITHIN.
! 	(svalue::dyn_cast_repeated_svalue): New.
! 	(svalue::dyn_cast_bits_within_svalue): New.
! 	(svalue::extract_bit_range): New decl.
! 	(svalue::maybe_fold_bits_within): New vfunc decl.
! 	(region_svalue::key_t::mark_empty): Use 2 rather than NULL_TREE.
! 	(region_svalue::key_t::is_empty): Likewise.
! 	(default_hash_traits<region_svalue::key_t>::empty_zero_p): Make false.
! 	(constant_svalue::maybe_fold_bits_within): New.
! 	(unknown_svalue::maybe_fold_bits_within): New.
! 	(poisoned_svalue::key_t::mark_empty): Use 2 rather than NULL_TREE.
! 	(poisoned_svalue::key_t::is_empty): Likewise.
! 	(default_hash_traits<poisoned_svalue::key_t>::empty_zero_p): Make
! 	false.
! 	(setjmp_svalue::key_t::mark_empty): Use 2 rather than NULL_TREE.
! 	(setjmp_svalue::key_t::is_empty): Likewise.
! 	(default_hash_traits<setjmp_svalue::key_t>::empty_zero_p): Make
! 	false.
! 	(unaryop_svalue::key_t::mark_empty): Use 2 rather than NULL_TREE.
! 	(unaryop_svalue::key_t::is_empty): Likewise.
! 	(unaryop_svalue::maybe_fold_bits_within): New.
! 	(default_hash_traits<unaryop_svalue::key_t>::empty_zero_p): Make
! 	false.
! 	(binop_svalue::key_t::mark_empty): Use 2 rather than NULL_TREE.
! 	(binop_svalue::key_t::is_empty): Likewise.
! 	(default_hash_traits<binop_svalue::key_t>::empty_zero_p): Make
! 	false.
! 	(sub_svalue::key_t::mark_empty): Use 2 rather than NULL_TREE.
! 	(sub_svalue::key_t::is_empty): Likewise.
! 	(default_hash_traits<sub_svalue::key_t>::empty_zero_p): Make
! 	false.
! 	(class repeated_svalue): New.
! 	(is_a_helper <const repeated_svalue *>::test): New.
! 	(struct default_hash_traits<repeated_svalue::key_t>): New.
! 	(class bits_within_svalue): New.
! 	(is_a_helper <const bits_within_svalue *>::test): New.
! 	(struct default_hash_traits<bits_within_svalue::key_t>): New.
! 	(widening_svalue::key_t::mark_empty): Use 2 rather than NULL_TREE.
! 	(widening_svalue::key_t::is_empty): Likewise.
! 	(default_hash_traits<widening_svalue::key_t>::empty_zero_p): Make
! 	false.
! 	(compound_svalue::key_t::mark_empty): Use 2 rather than NULL_TREE.
! 	(compound_svalue::key_t::is_empty): Likewise.
! 	(compound_svalue::maybe_fold_bits_within): New.
! 	(default_hash_traits<compound_svalue::key_t>::empty_zero_p): Make
! 	false.
! 
! 2021-06-28  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* analyzer.h (byte_offset_t): New typedef.
! 	* store.cc (bit_range::dump_to_pp): Dump as a byte range if
! 	possible.
! 	(bit_range::as_byte_range): New.
! 	(byte_range::dump_to_pp): New.
! 	* store.h (class byte_range): New forward decl.
! 	(struct bit_range): Add comment.
! 	(bit_range::as_byte_range): New decl.
! 	(struct byte_range): New.
! 
! 2021-06-22  David Malcolm  <dmalcolm@redhat.com>
! 
! 	PR analyzer/101143
! 	* region-model.cc (compat_types_p): New function.
! 	(region_model::create_region_for_heap_alloc): Convert assertion to
! 	an error check.
! 	(region_model::create_region_for_alloca): Likewise.
! 
! 2021-06-18  David Malcolm  <dmalcolm@redhat.com>
  
  	* store.cc (binding_cluster::get_any_binding): Make symbolic reads
  	from a cluster with concrete bindings return unknown.
  
! 2021-06-18  David Malcolm  <dmalcolm@redhat.com>
  
  	* region-model-manager.cc
  	(region_model_manager::get_or_create_int_cst): New.
***************
*** 31,37 ****
  	* store.cc (binding_cluster::zero_fill_region): Use it to simplify
  	away a local tree.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/99212
  	PR analyzer/101082
--- 2239,2262 ----
  	* store.cc (binding_cluster::zero_fill_region): Use it to simplify
  	away a local tree.
  
! 2021-06-18  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* checker-path.cc (class custom_event): Make abstract to allow for
! 	custom vfuncs, splitting existing implementation into...
! 	(class precanned_custom_event): New subclass.
! 	(custom_event::get_desc): Move to...
! 	(precanned_custom_event::get_desc): ...subclass.
! 	* checker-path.h (class custom_event): Make abstract to allow for
! 	custom vfuncs, splitting existing implementation into...
! 	(class precanned_custom_event): New subclass.
! 	* diagnostic-manager.cc (diagnostic_manager::add_events_for_eedge):
! 	Use precanned_custom_event.
! 	* engine.cc
! 	(stale_jmp_buf::maybe_add_custom_events_for_superedge): Likewise.
! 	* sm-signal.cc (signal_delivery_edge_info_t::add_events_to_path):
! 	Likewise.
! 
! 2021-06-15  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/99212
  	PR analyzer/101082
***************
*** 53,64 ****
  	* store.cc (bit_range::dump): New function.
  	* store.h (bit_range::dump): New decl.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	* engine.cc (worklist::key_t::cmp): Move sort by call_string to
  	before SCC.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	* region-model.cc (region_model::get_lvalue_1): Make const.
  	(region_model::get_lvalue): Likewise.
--- 2278,2376 ----
  	* store.cc (bit_range::dump): New function.
  	* store.h (bit_range::dump): New decl.
  
! 2021-06-15  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* engine.cc (exploded_node::on_stmt): Handle __analyzer_dump_capacity.
! 	(exploded_node::on_stmt): Drop m_sm_changes from on_stmt_flags.
! 	(state_change_requires_new_enode_p): New function...
! 	(exploded_graph::process_node): Call it, rather than querying
! 	flags.m_sm_changes, so that dynamic-extent differences can also
! 	trigger the splitting of nodes.
! 	* exploded-graph.h (struct on_stmt_flags): Drop field m_sm_changes.
! 	* program-state.cc (program_state::detect_leaks): Purge dead
! 	heap-allocated regions from dynamic extents.
! 	(selftest::test_program_state_1): Fix type of "size_in_bytes".
! 	(selftest::test_program_state_merging): Likewise.
! 	* region-model-impl-calls.cc
! 	(region_model::impl_call_analyzer_dump_capacity): New.
! 	(region_model::impl_call_free): Remove dynamic extents from the
! 	freed region.
! 	* region-model-reachability.h
! 	(reachable_regions::begin_mutable_base_regs): New.
! 	(reachable_regions::end_mutable_base_regs): New.
! 	* region-model.cc: Include "tree-object-size.h".
! 	(region_model::region_model): Support new field m_dynamic_extents.
! 	(region_model::operator=): Likewise.
! 	(region_model::operator==): Likewise.
! 	(region_model::dump_to_pp): Dump sizes of dynamic regions.
! 	(region_model::handle_unrecognized_call): Purge dynamic extents
! 	from any regions that have escaped mutably:.
! 	(region_model::get_capacity): New function.
! 	(region_model::add_constraint): Unset dynamic extents when a
! 	heap-allocated region's address is NULL.
! 	(region_model::unbind_region_and_descendents): Purge dynamic
! 	extents of unbound regions.
! 	(region_model::can_merge_with_p): Call
! 	m_dynamic_extents.can_merge_with_p.
! 	(region_model::create_region_for_heap_alloc): Assert that
! 	size_in_bytes's type is compatible with size_type_node.  Update
! 	for renaming of record_dynamic_extents to set_dynamic_extents.
! 	(region_model::create_region_for_alloca): Likewise.
! 	(region_model::record_dynamic_extents): Rename to...
! 	(region_model::set_dynamic_extents): ...this.  Assert that
! 	size_in_bytes's type is compatible with size_type_node.  Add it
! 	to the m_dynamic_extents map.
! 	(region_model::get_dynamic_extents): New.
! 	(region_model::unset_dynamic_extents): New.
! 	(selftest::test_state_merging): Fix type of "size".
! 	(selftest::test_malloc_constraints): Likewise.
! 	(selftest::test_malloc): Verify dynamic extents.
! 	(selftest::test_alloca): Likewise.
! 	* region-model.h (region_to_value_map::is_empty): New.
! 	(region_model::dynamic_extents_t): New typedef.
! 	(region_model::impl_call_analyzer_dump_capacity): New decl.
! 	(region_model::get_dynamic_extents): New function.
! 	(region_model::get_dynamic_extents): New decl.
! 	(region_model::set_dynamic_extents): New decl.
! 	(region_model::unset_dynamic_extents): New decl.
! 	(region_model::get_capacity): New decl.
! 	(region_model::record_dynamic_extents): Rename to set_dynamic_extents.
! 	(region_model::m_dynamic_extents): New field.
! 
! 2021-06-15  David Malcolm  <dmalcolm@redhat.com>
! 
! 	* region-model.cc (region_to_value_map::operator=): New.
! 	(region_to_value_map::operator==): New.
! 	(region_to_value_map::dump_to_pp): New.
! 	(region_to_value_map::dump): New.
! 	(region_to_value_map::can_merge_with_p): New.
! 	* region-model.h (class region_to_value_map): New class.
! 
! 2021-06-13  Trevor Saunders  <tbsaunde@tbsaunde.org>
! 
! 	* call-string.cc (call_string::call_string): Use range based for
! 	to iterate over vec<>.
! 	(call_string::to_json): Likewise.
! 	(call_string::hash): Likewise.
! 	(call_string::calc_recursion_depth): Likewise.
! 	* checker-path.cc (checker_path::fixup_locations): Likewise.
! 	* constraint-manager.cc (equiv_class::equiv_class): Likewise.
! 	(equiv_class::to_json): Likewise.
! 	(equiv_class::hash): Likewise.
! 	(constraint_manager::to_json): Likewise.
! 	* engine.cc (impl_region_model_context::on_svalue_leak):
! 	Likewise.
! 	(on_liveness_change): Likewise.
! 	(impl_region_model_context::on_unknown_change): Likewise.
! 	* program-state.cc (sm_state_map::set_state): Likewise.
! 	* region-model.cc (test_canonicalization_4): Likewise.
! 
! 2021-06-11  David Malcolm  <dmalcolm@redhat.com>
  
  	* engine.cc (worklist::key_t::cmp): Move sort by call_string to
  	before SCC.
  
! 2021-06-09  David Malcolm  <dmalcolm@redhat.com>
  
  	* region-model.cc (region_model::get_lvalue_1): Make const.
  	(region_model::get_lvalue): Likewise.
***************
*** 73,79 ****
  	(region_model::get_lvalue_1): Likewise.
  	(region_model::get_rvalue_1): Likewise.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/99212
  	* region-model-manager.cc
--- 2385,2391 ----
  	(region_model::get_lvalue_1): Likewise.
  	(region_model::get_rvalue_1): Likewise.
  
! 2021-06-08  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/99212
  	* region-model-manager.cc
***************
*** 97,109 ****
  	(store_manager::get_concrete_binding): New overload taking
  	const bit_range &.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	* analyzer.h (int_size_in_bits): New decl.
  	* region.cc (int_size_in_bits): New function.
  	(region::get_bit_size): Reimplement in terms of the above.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	* store.cc (concrete_binding::dump_to_pp): Move bulk of
  	implementation to...
--- 2409,2421 ----
  	(store_manager::get_concrete_binding): New overload taking
  	const bit_range &.
  
! 2021-06-08  David Malcolm  <dmalcolm@redhat.com>
  
  	* analyzer.h (int_size_in_bits): New decl.
  	* region.cc (int_size_in_bits): New function.
  	(region::get_bit_size): Reimplement in terms of the above.
  
! 2021-06-08  David Malcolm  <dmalcolm@redhat.com>
  
  	* store.cc (concrete_binding::dump_to_pp): Move bulk of
  	implementation to...
***************
*** 115,135 ****
  	(class concrete_binding): Replace fields m_start_bit_offset and
  	m_size_in_bits with new field m_bit_range.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	* svalue.h (conjured_svalue::iterator_t): Delete.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	* store.h (store::get_direct_binding): Remove unused decl.
  	(store::get_default_binding): Likewise.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	* svalue.cc (poisoned_svalue::dump_to_pp): Dump type.
  	(compound_svalue::dump_to_pp): Dump any type.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/100615
  	* sm-malloc.cc: Include "analyzer/function-set.h".
--- 2427,2447 ----
  	(class concrete_binding): Replace fields m_start_bit_offset and
  	m_size_in_bits with new field m_bit_range.
  
! 2021-06-08  David Malcolm  <dmalcolm@redhat.com>
  
  	* svalue.h (conjured_svalue::iterator_t): Delete.
  
! 2021-06-03  David Malcolm  <dmalcolm@redhat.com>
  
  	* store.h (store::get_direct_binding): Remove unused decl.
  	(store::get_default_binding): Likewise.
  
! 2021-06-03  David Malcolm  <dmalcolm@redhat.com>
  
  	* svalue.cc (poisoned_svalue::dump_to_pp): Dump type.
  	(compound_svalue::dump_to_pp): Dump any type.
  
! 2021-05-18  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/100615
  	* sm-malloc.cc: Include "analyzer/function-set.h".
***************
*** 137,152 ****
  	bail on the functions it recognizes.
  	(malloc_state_machine::unaffected_by_call_p): New.
  
! 2021-07-02  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/100244
  	* sm-malloc.cc (free_of_non_heap::describe_state_change):
  	Bulletproof against change.m_expr being NULL.
  
- 2021-04-27  Release Manager
- 
- 	* GCC 11.1.0 released.
- 
  2021-04-13  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/98599
--- 2449,2473 ----
  	bail on the functions it recognizes.
  	(malloc_state_machine::unaffected_by_call_p): New.
  
! 2021-05-10  Martin Liska  <mliska@suse.cz>
! 
! 	* sm-file.cc (is_file_using_fn_p): Use startswith
! 	function instead of strncmp.
! 
! 2021-05-10  Martin Liska  <mliska@suse.cz>
! 
! 	* program-state.cc (program_state::operator=): Remove
! 	__cplusplus >= 201103.
! 	(program_state::program_state): Likewise.
! 	* program-state.h: Likewise.
! 	* region-model.h (class region_model): Remove dead code.
! 
! 2021-04-24  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/100244
  	* sm-malloc.cc (free_of_non_heap::describe_state_change):
  	Bulletproof against change.m_expr being NULL.
  
  2021-04-13  David Malcolm  <dmalcolm@redhat.com>
  
  	PR analyzer/98599
***************
*** 4746,4752 ****
  	* Initial creation
  
  
! Copyright (C) 2019-2021 Free Software Foundation, Inc.
  
  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
--- 7067,7073 ----
  	* Initial creation
  
  
! Copyright (C) 2019-2022 Free Software Foundation, Inc.
  
  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
diff -Nrcpad gcc-11.3.0/gcc/analyzer/analysis-plan.cc gcc-12.1.0/gcc/analyzer/analysis-plan.cc
*** gcc-11.3.0/gcc/analyzer/analysis-plan.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/analysis-plan.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* A class to encapsulate decisions about how the analysis should happen.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* A class to encapsulate decisions about how the analysis should happen.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** analysis_plan::use_summary_p (const cgra
*** 109,114 ****
--- 109,118 ----
    if (!flag_analyzer_call_summaries)
      return false;
  
+   /* Don't use call summaries if there is no callgraph edge */
+   if (!edge || !edge->callee)
+     return false;
+ 
    /* TODO: don't count callsites each time.  */
    int num_call_sites = 0;
    const cgraph_node *callee = edge->callee;
diff -Nrcpad gcc-11.3.0/gcc/analyzer/analysis-plan.h gcc-12.1.0/gcc/analyzer/analysis-plan.h
*** gcc-11.3.0/gcc/analyzer/analysis-plan.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/analysis-plan.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* A class to encapsulate decisions about how the analysis should happen.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* A class to encapsulate decisions about how the analysis should happen.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/analyzer-logging.cc gcc-12.1.0/gcc/analyzer/analyzer-logging.cc
*** gcc-11.3.0/gcc/analyzer/analyzer-logging.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/analyzer-logging.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Hierarchical log messages for the analyzer.
!    Copyright (C) 2014-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Hierarchical log messages for the analyzer.
!    Copyright (C) 2014-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/analyzer-logging.h gcc-12.1.0/gcc/analyzer/analyzer-logging.h
*** gcc-11.3.0/gcc/analyzer/analyzer-logging.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/analyzer-logging.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Hierarchical log messages for the analyzer.
!    Copyright (C) 2014-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Hierarchical log messages for the analyzer.
!    Copyright (C) 2014-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/analyzer-pass.cc gcc-12.1.0/gcc/analyzer/analyzer-pass.cc
*** gcc-11.3.0/gcc/analyzer/analyzer-pass.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/analyzer-pass.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Integration of the analyzer with GCC's pass manager.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Integration of the analyzer with GCC's pass manager.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/analyzer-selftests.cc gcc-12.1.0/gcc/analyzer/analyzer-selftests.cc
*** gcc-11.3.0/gcc/analyzer/analyzer-selftests.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/analyzer-selftests.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Selftest support for the analyzer.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Selftest support for the analyzer.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/analyzer-selftests.h gcc-12.1.0/gcc/analyzer/analyzer-selftests.h
*** gcc-11.3.0/gcc/analyzer/analyzer-selftests.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/analyzer-selftests.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Selftests for the analyzer.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Selftests for the analyzer.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/analyzer.cc gcc-12.1.0/gcc/analyzer/analyzer.cc
*** gcc-11.3.0/gcc/analyzer/analyzer.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/analyzer.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Utility functions for the analyzer.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Utility functions for the analyzer.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** get_stmt_location (const gimple *stmt, f
*** 63,70 ****
  static tree
  fixup_tree_for_diagnostic_1 (tree expr, hash_set<tree> *visited);
  
  /*  Subroutine of fixup_tree_for_diagnostic_1, called on SSA names.
!     Attempt to reconstruct a a tree expression for SSA_NAME
      based on its def-stmt.
      SSA_NAME must be non-NULL.
      VISITED must be non-NULL; it is used to ensure termination.
--- 63,115 ----
  static tree
  fixup_tree_for_diagnostic_1 (tree expr, hash_set<tree> *visited);
  
+ /* Attemp to generate a tree for the LHS of ASSIGN_STMT.
+    VISITED must be non-NULL; it is used to ensure termination.  */
+ 
+ static tree
+ get_diagnostic_tree_for_gassign_1 (const gassign *assign_stmt,
+ 				   hash_set<tree> *visited)
+ {
+   enum tree_code code = gimple_assign_rhs_code (assign_stmt);
+ 
+   /* Reverse the effect of extract_ops_from_tree during
+      gimplification.  */
+   switch (get_gimple_rhs_class (code))
+     {
+     default:
+     case GIMPLE_INVALID_RHS:
+       gcc_unreachable ();
+     case GIMPLE_TERNARY_RHS:
+     case GIMPLE_BINARY_RHS:
+     case GIMPLE_UNARY_RHS:
+       {
+ 	tree t = make_node (code);
+ 	TREE_TYPE (t) = TREE_TYPE (gimple_assign_lhs (assign_stmt));
+ 	unsigned num_rhs_args = gimple_num_ops (assign_stmt) - 1;
+ 	for (unsigned i = 0; i < num_rhs_args; i++)
+ 	  {
+ 	    tree op = gimple_op (assign_stmt, i + 1);
+ 	    if (op)
+ 	      {
+ 		op = fixup_tree_for_diagnostic_1 (op, visited);
+ 		if (op == NULL_TREE)
+ 		  return NULL_TREE;
+ 	      }
+ 	    TREE_OPERAND (t, i) = op;
+ 	  }
+ 	return t;
+       }
+     case GIMPLE_SINGLE_RHS:
+       {
+ 	tree op = gimple_op (assign_stmt, 1);
+ 	op = fixup_tree_for_diagnostic_1 (op, visited);
+ 	return op;
+       }
+     }
+ }
+ 
  /*  Subroutine of fixup_tree_for_diagnostic_1, called on SSA names.
!     Attempt to reconstruct a tree expression for SSA_NAME
      based on its def-stmt.
      SSA_NAME must be non-NULL.
      VISITED must be non-NULL; it is used to ensure termination.
*************** maybe_reconstruct_from_def_stmt (tree ss
*** 86,141 ****
      {
      default:
        gcc_unreachable ();
      case GIMPLE_NOP:
      case GIMPLE_PHI:
        /* Can't handle these.  */
        return NULL_TREE;
      case GIMPLE_ASSIGN:
!       {
! 	enum tree_code code = gimple_assign_rhs_code (def_stmt);
! 
! 	/* Reverse the effect of extract_ops_from_tree during
! 	   gimplification.  */
! 	switch (get_gimple_rhs_class (code))
! 	  {
! 	  default:
! 	  case GIMPLE_INVALID_RHS:
! 	    gcc_unreachable ();
! 	  case GIMPLE_TERNARY_RHS:
! 	  case GIMPLE_BINARY_RHS:
! 	  case GIMPLE_UNARY_RHS:
! 	    {
! 	      tree t = make_node (code);
! 	      TREE_TYPE (t) = TREE_TYPE (ssa_name);
! 	      unsigned num_rhs_args = gimple_num_ops (def_stmt) - 1;
! 	      for (unsigned i = 0; i < num_rhs_args; i++)
! 		{
! 		  tree op = gimple_op (def_stmt, i + 1);
! 		  if (op)
! 		    {
! 		      op = fixup_tree_for_diagnostic_1 (op, visited);
! 		      if (op == NULL_TREE)
! 			return NULL_TREE;
! 		    }
! 		  TREE_OPERAND (t, i) = op;
! 		}
! 	      return t;
! 	    }
! 	  case GIMPLE_SINGLE_RHS:
! 	    {
! 	      tree op = gimple_op (def_stmt, 1);
! 	      op = fixup_tree_for_diagnostic_1 (op, visited);
! 	      return op;
! 	    }
! 	  }
!       }
!       break;
      case GIMPLE_CALL:
        {
  	gcall *call_stmt = as_a <gcall *> (def_stmt);
  	tree return_type = gimple_call_return_type (call_stmt);
  	tree fn = fixup_tree_for_diagnostic_1 (gimple_call_fn (call_stmt),
  					       visited);
  	unsigned num_args = gimple_call_num_args (call_stmt);
  	auto_vec<tree> args (num_args);
  	for (unsigned i = 0; i < num_args; i++)
--- 131,152 ----
      {
      default:
        gcc_unreachable ();
+     case GIMPLE_ASM:
      case GIMPLE_NOP:
      case GIMPLE_PHI:
        /* Can't handle these.  */
        return NULL_TREE;
      case GIMPLE_ASSIGN:
!       return get_diagnostic_tree_for_gassign_1
! 	(as_a <const gassign *> (def_stmt), visited);
      case GIMPLE_CALL:
        {
  	gcall *call_stmt = as_a <gcall *> (def_stmt);
  	tree return_type = gimple_call_return_type (call_stmt);
  	tree fn = fixup_tree_for_diagnostic_1 (gimple_call_fn (call_stmt),
  					       visited);
+ 	if (fn == NULL_TREE)
+ 	  return NULL_TREE;
  	unsigned num_args = gimple_call_num_args (call_stmt);
  	auto_vec<tree> args (num_args);
  	for (unsigned i = 0; i < num_args; i++)
*************** maybe_reconstruct_from_def_stmt (tree ss
*** 146,151 ****
--- 157,163 ----
  	      return NULL_TREE;
  	    args.quick_push (arg);
  	  }
+ 	gcc_assert (fn);
  	return build_call_array_loc (gimple_location (call_stmt),
  				     return_type, fn,
  				     num_args, args.address ());
*************** fixup_tree_for_diagnostic_1 (tree expr,
*** 165,172 ****
        && TREE_CODE (expr) == SSA_NAME
        && (SSA_NAME_VAR (expr) == NULL_TREE
  	  || DECL_ARTIFICIAL (SSA_NAME_VAR (expr))))
!     if (tree expr2 = maybe_reconstruct_from_def_stmt (expr, visited))
!       return expr2;
    return expr;
  }
  
--- 177,189 ----
        && TREE_CODE (expr) == SSA_NAME
        && (SSA_NAME_VAR (expr) == NULL_TREE
  	  || DECL_ARTIFICIAL (SSA_NAME_VAR (expr))))
!     {
!       if (tree var = SSA_NAME_VAR (expr))
! 	if (VAR_P (var) && DECL_HAS_DEBUG_EXPR_P (var))
! 	  return DECL_DEBUG_EXPR (var);
!       if (tree expr2 = maybe_reconstruct_from_def_stmt (expr, visited))
! 	return expr2;
!     }
    return expr;
  }
  
*************** fixup_tree_for_diagnostic (tree expr)
*** 188,193 ****
--- 205,219 ----
    return fixup_tree_for_diagnostic_1 (expr, &visited);
  }
  
+ /* Attempt to generate a tree for the LHS of ASSIGN_STMT.  */
+ 
+ tree
+ get_diagnostic_tree_for_gassign (const gassign *assign_stmt)
+ {
+   hash_set<tree> visited;
+   return get_diagnostic_tree_for_gassign_1 (assign_stmt, &visited);
+ }
+ 
  } // namespace ana
  
  /* Helper function for checkers.  Is the CALL to the given function name,
*************** is_special_named_call_p (const gcall *ca
*** 215,224 ****
  /* Helper function for checkers.  Is FNDECL an extern fndecl at file scope
     that has the given FUNCNAME?
  
!    Compare with special_function_p in calls.c.  */
  
  bool
! is_named_call_p (tree fndecl, const char *funcname)
  {
    gcc_assert (fndecl);
    gcc_assert (funcname);
--- 241,250 ----
  /* Helper function for checkers.  Is FNDECL an extern fndecl at file scope
     that has the given FUNCNAME?
  
!    Compare with special_function_p in calls.cc.  */
  
  bool
! is_named_call_p (const_tree fndecl, const char *funcname)
  {
    gcc_assert (fndecl);
    gcc_assert (funcname);
*************** is_named_call_p (tree fndecl, const char
*** 245,251 ****
  }
  
  /* Return true if FNDECL is within the namespace "std".
!    Compare with cp/typeck.c: decl_in_std_namespace_p, but this doesn't
     rely on being the C++ FE (or handle inline namespaces inside of std).  */
  
  static inline bool
--- 271,277 ----
  }
  
  /* Return true if FNDECL is within the namespace "std".
!    Compare with cp/typeck.cc: decl_in_std_namespace_p, but this doesn't
     rely on being the C++ FE (or handle inline namespaces inside of std).  */
  
  static inline bool
*************** is_std_function_p (const_tree fndecl)
*** 270,276 ****
  /* Like is_named_call_p, but look for std::FUNCNAME.  */
  
  bool
! is_std_named_call_p (tree fndecl, const char *funcname)
  {
    gcc_assert (fndecl);
    gcc_assert (funcname);
--- 296,302 ----
  /* Like is_named_call_p, but look for std::FUNCNAME.  */
  
  bool
! is_std_named_call_p (const_tree fndecl, const char *funcname)
  {
    gcc_assert (fndecl);
    gcc_assert (funcname);
*************** is_std_named_call_p (tree fndecl, const
*** 292,298 ****
     arguments?  */
  
  bool
! is_named_call_p (tree fndecl, const char *funcname,
  		 const gcall *call, unsigned int num_args)
  {
    gcc_assert (fndecl);
--- 318,324 ----
     arguments?  */
  
  bool
! is_named_call_p (const_tree fndecl, const char *funcname,
  		 const gcall *call, unsigned int num_args)
  {
    gcc_assert (fndecl);
*************** is_named_call_p (tree fndecl, const char
*** 310,316 ****
  /* Like is_named_call_p, but check for std::FUNCNAME.  */
  
  bool
! is_std_named_call_p (tree fndecl, const char *funcname,
  		     const gcall *call, unsigned int num_args)
  {
    gcc_assert (fndecl);
--- 336,342 ----
  /* Like is_named_call_p, but check for std::FUNCNAME.  */
  
  bool
! is_std_named_call_p (const_tree fndecl, const char *funcname,
  		     const gcall *call, unsigned int num_args)
  {
    gcc_assert (fndecl);
diff -Nrcpad gcc-11.3.0/gcc/analyzer/analyzer.h gcc-12.1.0/gcc/analyzer/analyzer.h
*** gcc-11.3.0/gcc/analyzer/analyzer.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/analyzer.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Utility functions for the analyzer.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Utility functions for the analyzer.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** class svalue;
*** 46,56 ****
--- 46,60 ----
    class unaryop_svalue;
    class binop_svalue;
    class sub_svalue;
+   class repeated_svalue;
+   class bits_within_svalue;
    class unmergeable_svalue;
    class placeholder_svalue;
    class widening_svalue;
    class compound_svalue;
    class conjured_svalue;
+   class asm_output_svalue;
+   class const_fn_result_svalue;
  typedef hash_set<const svalue *> svalue_set;
  class region;
    class frame_region;
*************** class region;
*** 60,69 ****
--- 64,76 ----
    class symbolic_region;
    class element_region;
    class offset_region;
+   class sized_region;
    class cast_region;
    class field_region;
    class string_region;
+   class bit_range_region;
  class region_model_manager;
+ class conjured_purge;
  struct model_merger;
  class store_manager;
  class store;
*************** class region_model;
*** 71,81 ****
  class region_model_context;
    class impl_region_model_context;
  class call_details;
! struct rejected_constraint;
  class constraint_manager;
  class equiv_class;
  
  class pending_diagnostic;
  class state_change_event;
  class checker_path;
  class extrinsic_state;
--- 78,92 ----
  class region_model_context;
    class impl_region_model_context;
  class call_details;
! class rejected_constraint;
  class constraint_manager;
  class equiv_class;
+ class reachable_regions;
+ class bounded_ranges;
+ class bounded_ranges_manager;
  
  class pending_diagnostic;
+ class pending_note;
  class state_change_event;
  class checker_path;
  class extrinsic_state;
*************** class exploded_path;
*** 93,98 ****
--- 104,110 ----
  class analysis_plan;
  class state_purge_map;
  class state_purge_per_ssa_name;
+ class state_purge_per_decl;
  class state_change;
  class rewind_info_t;
  
*************** extern void print_quoted_type (pretty_pr
*** 109,114 ****
--- 121,127 ----
  extern int readability_comparator (const void *p1, const void *p2);
  extern int tree_cmp (const void *p1, const void *p2);
  extern tree fixup_tree_for_diagnostic (tree);
+ extern tree get_diagnostic_tree_for_gassign (const gassign *);
  
  /* A tree, extended with stack frame information for locals, so that
     we can distinguish between different values of locals within a potentially
*************** public:
*** 142,151 ****
--- 155,167 ----
  
  typedef offset_int bit_offset_t;
  typedef offset_int bit_size_t;
+ typedef offset_int byte_offset_t;
  typedef offset_int byte_size_t;
  
  extern bool int_size_in_bits (const_tree type, bit_size_t *out);
  
+ extern tree get_field_at_bit_offset (tree record_type, bit_offset_t bit_offset);
+ 
  /* The location of a region expressesd as an offset relative to a
     base region.  */
  
*************** private:
*** 192,197 ****
--- 208,215 ----
  
  extern location_t get_stmt_location (const gimple *stmt, function *fun);
  
+ extern bool compat_types_p (tree src_type, tree dst_type);
+ 
  /* Passed by pointer to PLUGIN_ANALYZER_INIT callbacks.  */
  
  class plugin_analyzer_init_iface
*************** public:
*** 201,215 ****
    virtual logger *get_logger () const = 0;
  };
  
  } // namespace ana
  
  extern bool is_special_named_call_p (const gcall *call, const char *funcname,
  				     unsigned int num_args);
! extern bool is_named_call_p (tree fndecl, const char *funcname);
! extern bool is_named_call_p (tree fndecl, const char *funcname,
  			     const gcall *call, unsigned int num_args);
! extern bool is_std_named_call_p (tree fndecl, const char *funcname);
! extern bool is_std_named_call_p (tree fndecl, const char *funcname,
  				 const gcall *call, unsigned int num_args);
  extern bool is_setjmp_call_p (const gcall *call);
  extern bool is_longjmp_call_p (const gcall *call);
--- 219,292 ----
    virtual logger *get_logger () const = 0;
  };
  
+ /* An enum for describing the direction of an access to memory.  */
+ 
+ enum access_direction
+ {
+   DIR_READ,
+   DIR_WRITE
+ };
+ 
+ /* Abstract base class for associating custom data with an
+    exploded_edge, for handling non-standard edges such as
+    rewinding from a longjmp, signal handlers, etc.
+    Also used when "bifurcating" state: splitting the execution
+    path in non-standard ways (e.g. for simulating the various
+    outcomes of "realloc").  */
+ 
+ class custom_edge_info
+ {
+ public:
+   virtual ~custom_edge_info () {}
+ 
+   /* Hook for making .dot label more readable.  */
+   virtual void print (pretty_printer *pp) const = 0;
+ 
+   /* Hook for updating MODEL within exploded_path::feasible_p
+      and when handling bifurcation.  */
+   virtual bool update_model (region_model *model,
+ 			     const exploded_edge *eedge,
+ 			     region_model_context *ctxt) const = 0;
+ 
+   virtual void add_events_to_path (checker_path *emission_path,
+ 				   const exploded_edge &eedge) const = 0;
+ };
+ 
+ /* Abstract base class for splitting state.
+ 
+    Most of the state-management code in the analyzer involves
+    modifying state objects in-place, which assumes a single outcome.
+ 
+    This class provides an escape hatch to allow for multiple outcomes
+    for such updates e.g. for modelling multiple outcomes from function
+    calls, such as the various outcomes of "realloc".  */
+ 
+ class path_context
+ {
+ public:
+   virtual ~path_context () {}
+ 
+   /* Hook for clients to split state with a non-standard path.
+      Take ownership of INFO.  */
+   virtual void bifurcate (custom_edge_info *info) = 0;
+ 
+   /* Hook for clients to terminate the standard path.  */
+   virtual void terminate_path () = 0;
+ 
+   /* Hook for clients to determine if the standard path has been
+      terminated.  */
+   virtual bool terminate_path_p () const = 0;
+ };
+ 
  } // namespace ana
  
  extern bool is_special_named_call_p (const gcall *call, const char *funcname,
  				     unsigned int num_args);
! extern bool is_named_call_p (const_tree fndecl, const char *funcname);
! extern bool is_named_call_p (const_tree fndecl, const char *funcname,
  			     const gcall *call, unsigned int num_args);
! extern bool is_std_named_call_p (const_tree fndecl, const char *funcname);
! extern bool is_std_named_call_p (const_tree fndecl, const char *funcname,
  				 const gcall *call, unsigned int num_args);
  extern bool is_setjmp_call_p (const gcall *call);
  extern bool is_longjmp_call_p (const gcall *call);
diff -Nrcpad gcc-11.3.0/gcc/analyzer/analyzer.opt gcc-12.1.0/gcc/analyzer/analyzer.opt
*** gcc-11.3.0/gcc/analyzer/analyzer.opt	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/analyzer.opt	Fri May  6 07:30:56 2022
***************
*** 1,6 ****
  ; analyzer.opt -- Options for the analyzer.
  
! ; Copyright (C) 2019-2021 Free Software Foundation, Inc.
  ;
  ; This file is part of GCC.
  ;
--- 1,6 ----
  ; analyzer.opt -- Options for the analyzer.
  
! ; Copyright (C) 2019-2022 Free Software Foundation, Inc.
  ;
  ; This file is part of GCC.
  ;
*************** Common Joined UInteger Var(param_analyze
*** 43,49 ****
  The maximum number of times a callsite can appear in a call stack within the analyzer, before terminating analysis of a call that would recurse deeper.
  
  -param=analyzer-max-svalue-depth=
! Common Joined UInteger Var(param_analyzer_max_svalue_depth) Init(13) Param
  The maximum depth of a symbolic value, before approximating the value as unknown.
  
  -param=analyzer-min-snodes-for-call-summary=
--- 43,49 ----
  The maximum number of times a callsite can appear in a call stack within the analyzer, before terminating analysis of a call that would recurse deeper.
  
  -param=analyzer-max-svalue-depth=
! Common Joined UInteger Var(param_analyzer_max_svalue_depth) Init(12) Param
  The maximum depth of a symbolic value, before approximating the value as unknown.
  
  -param=analyzer-min-snodes-for-call-summary=
*************** Wanalyzer-stale-setjmp-buffer
*** 114,123 ****
--- 114,139 ----
  Common Var(warn_analyzer_stale_setjmp_buffer) Init(1) Warning
  Warn about code paths in which a longjmp rewinds to a jmp_buf saved in a stack frame that has returned.
  
+ Wanalyzer-tainted-allocation-size
+ Common Var(warn_analyzer_tainted_allocation_size) Init(1) Warning
+ Warn about code paths in which an unsanitized value is used as an allocation size.
+ 
  Wanalyzer-tainted-array-index
  Common Var(warn_analyzer_tainted_array_index) Init(1) Warning
  Warn about code paths in which an unsanitized value is used as an array index.
  
+ Wanalyzer-tainted-divisor
+ Common Var(warn_analyzer_tainted_divisor) Init(1) Warning
+ Warn about code paths in which an unsanitized value is used as a divisor.
+ 
+ Wanalyzer-tainted-offset
+ Common Var(warn_analyzer_tainted_offset) Init(1) Warning
+ Warn about code paths in which an unsanitized value is used as a pointer offset.
+ 
+ Wanalyzer-tainted-size
+ Common Var(warn_analyzer_tainted_size) Init(1) Warning
+ Warn about code paths in which an unsanitized value is used as a size.
+ 
  Wanalyzer-use-after-free
  Common Var(warn_analyzer_use_after_free) Init(1) Warning
  Warn about code paths in which a freed value is used.
*************** Wanalyzer-write-to-string-literal
*** 134,139 ****
--- 150,159 ----
  Common Var(warn_analyzer_write_to_string_literal) Init(1) Warning
  Warn about code paths which attempt to write to a string literal.
  
+ Wanalyzer-use-of-uninitialized-value
+ Common Var(warn_analyzer_use_of_uninitialized_value) Init(1) Warning
+ Warn about code paths in which an uninitialized value is used.
+ 
  Wanalyzer-too-complex
  Common Var(warn_analyzer_too_complex) Init(0) Warning
  Warn if the code is too complicated for the analyzer to fully explore.
*************** fdump-analyzer-exploded-nodes-3
*** 210,215 ****
--- 230,239 ----
  Common RejectNegative Var(flag_dump_analyzer_exploded_nodes_3)
  Dump a textual representation of the exploded graph to SRCFILE.eg-ID.txt.
  
+ fdump-analyzer-exploded-paths
+ Common RejectNegative Var(flag_dump_analyzer_exploded_paths)
+ Dump a textual representation of each diagnostic's exploded path to SRCFILE.IDX.KIND.epath.txt.
+ 
  fdump-analyzer-feasibility
  Common RejectNegative Var(flag_dump_analyzer_feasibility)
  Dump various analyzer internals to SRCFILE.*.fg.dot and SRCFILE.*.tg.dot.
*************** fdump-analyzer-supergraph
*** 226,229 ****
--- 250,257 ----
  Common RejectNegative Var(flag_dump_analyzer_supergraph)
  Dump the analyzer supergraph to a SRCFILE.supergraph.dot file.
  
+ fdump-analyzer-untracked
+ Common RejectNegative Var(flag_dump_analyzer_untracked)
+ Emit custom warnings with internal details intended for analyzer developers.
+ 
  ; This comment is to ensure we retain the blank line above.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/bar-chart.cc gcc-12.1.0/gcc/analyzer/bar-chart.cc
*** gcc-11.3.0/gcc/analyzer/bar-chart.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/bar-chart.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Support for plotting bar charts in dumps.
!    Copyright (C) 2020-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Support for plotting bar charts in dumps.
!    Copyright (C) 2020-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/bar-chart.h gcc-12.1.0/gcc/analyzer/bar-chart.h
*** gcc-11.3.0/gcc/analyzer/bar-chart.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/bar-chart.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Support for plotting bar charts in dumps.
!    Copyright (C) 2020-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Support for plotting bar charts in dumps.
!    Copyright (C) 2020-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/call-info.cc gcc-12.1.0/gcc/analyzer/call-info.cc
*** gcc-11.3.0/gcc/analyzer/call-info.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/analyzer/call-info.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,162 ----
+ /* Subclasses of custom_edge_info for describing outcomes of function calls.
+    Copyright (C) 2021-2022 Free Software Foundation, Inc.
+    Contributed by David Malcolm <dmalcolm@redhat.com>.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tree.h"
+ #include "function.h"
+ #include "basic-block.h"
+ #include "gimple.h"
+ #include "gimple-iterator.h"
+ #include "diagnostic-core.h"
+ #include "options.h"
+ #include "cgraph.h"
+ #include "tree-pretty-print.h"
+ #include "tristate.h"
+ #include "bitmap.h"
+ #include "selftest.h"
+ #include "function.h"
+ #include "json.h"
+ #include "analyzer/analyzer.h"
+ #include "analyzer/analyzer-logging.h"
+ #include "ordered-hash-map.h"
+ #include "cfg.h"
+ #include "digraph.h"
+ #include "analyzer/supergraph.h"
+ #include "sbitmap.h"
+ #include "analyzer/call-string.h"
+ #include "analyzer/program-point.h"
+ #include "analyzer/store.h"
+ #include "analyzer/region-model.h"
+ #include "analyzer/constraint-manager.h"
+ #include "diagnostic-event-id.h"
+ #include "analyzer/sm.h"
+ #include "analyzer/pending-diagnostic.h"
+ #include "analyzer/region-model-reachability.h"
+ #include "analyzer/analyzer-selftests.h"
+ #include "analyzer/program-state.h"
+ #include "diagnostic-path.h"
+ #include "analyzer/checker-path.h"
+ #include "analyzer/diagnostic-manager.h"
+ #include "alloc-pool.h"
+ #include "fibonacci_heap.h"
+ #include "shortest-paths.h"
+ #include "analyzer/exploded-graph.h"
+ #include "analyzer/call-info.h"
+ 
+ #if ENABLE_ANALYZER
+ 
+ namespace ana {
+ 
+ /* class call_info : public custom_eedge_info_t.  */
+ 
+ /* Implementation of custom_edge_info::print vfunc for call_info:
+    use get_desc to get a label_text, and print it to PP.  */
+ 
+ void
+ call_info::print (pretty_printer *pp) const
+ {
+   label_text desc (get_desc (pp_show_color (pp)));
+   pp_string (pp, desc.m_buffer);
+   desc.maybe_free ();
+ }
+ 
+ /* Implementation of custom_edge_info::add_events_to_path vfunc for
+    call_info: add a custom_event using call_info::get_desc as its
+    description.  */
+ 
+ void
+ call_info::add_events_to_path (checker_path *emission_path,
+ 			       const exploded_edge &eedge) const
+ {
+   class call_event : public custom_event
+   {
+   public:
+     call_event (location_t loc, tree fndecl, int depth,
+ 		const call_info *call_info)
+       : custom_event (loc, fndecl, depth),
+ 	m_call_info (call_info)
+     {}
+ 
+     label_text get_desc (bool can_colorize) const
+     {
+       return m_call_info->get_desc (can_colorize);
+     }
+ 
+   private:
+     const call_info *m_call_info;
+   };
+ 
+   const exploded_node *src_node = eedge.m_src;
+   const program_point &src_point = src_node->get_point ();
+   tree caller_fndecl = src_point.get_fndecl ();
+   const int stack_depth = src_point.get_stack_depth ();
+ 
+   emission_path->add_event (new call_event (get_call_stmt ()->location,
+ 					    caller_fndecl,
+ 					    stack_depth,
+ 					    this));
+ }
+ 
+ /* Recreate a call_details instance from this call_info.  */
+ 
+ call_details
+ call_info::get_call_details (region_model *model,
+ 			     region_model_context *ctxt) const
+ {
+   return call_details (m_call_stmt, model, ctxt);
+ }
+ 
+ /* call_info's ctor.
+ 
+    The call_info instance will outlive the call_details instance;
+    call_details instances are typically created on the stack.  */
+ 
+ call_info::call_info (const call_details &cd)
+ : m_call_stmt (cd.get_call_stmt ()),
+   m_fndecl (cd.get_fndecl_for_call ())
+ {
+   gcc_assert (m_fndecl);
+ }
+ 
+ /* class success_call_info : public call_info.  */
+ 
+ /* Implementation of call_info::get_desc vfunc for success_call_info.  */
+ 
+ label_text
+ success_call_info::get_desc (bool can_colorize) const
+ {
+   return make_label_text (can_colorize, "when %qE succeeds", get_fndecl ());
+ }
+ 
+ /* class failed_call_info : public call_info.  */
+ 
+ /* Implementation of call_info::get_desc vfunc for failed_call_info.  */
+ 
+ label_text
+ failed_call_info::get_desc (bool can_colorize) const
+ {
+   return make_label_text (can_colorize, "when %qE fails", get_fndecl ());
+ }
+ 
+ } // namespace ana
+ 
+ #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/call-info.h gcc-12.1.0/gcc/analyzer/call-info.h
*** gcc-11.3.0/gcc/analyzer/call-info.h	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/analyzer/call-info.h	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,83 ----
+ /* Subclasses of custom_edge_info for describing outcomes of function calls.
+    Copyright (C) 2021-2022 Free Software Foundation, Inc.
+    Contributed by David Malcolm <dmalcolm@redhat.com>.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_ANALYZER_CALL_INFO_H
+ #define GCC_ANALYZER_CALL_INFO_H
+ 
+ namespace ana {
+ 
+ /* Subclass of custom_edge_info for an outcome of a call.
+    This is still abstract; the update_model and get_desc vfuncs must be
+    implemented.  */
+ 
+ class call_info : public custom_edge_info
+ {
+ public:
+   void print (pretty_printer *pp) const FINAL OVERRIDE;
+   void add_events_to_path (checker_path *emission_path,
+ 			   const exploded_edge &eedge) const FINAL OVERRIDE;
+ 
+   const gcall *get_call_stmt () const { return m_call_stmt; }
+   tree get_fndecl () const { return m_fndecl; }
+ 
+   virtual label_text get_desc (bool can_colorize) const = 0;
+ 
+   call_details get_call_details (region_model *model,
+ 				 region_model_context *ctxt) const;
+ 
+ protected:
+   call_info (const call_details &cd);
+ 
+ private:
+   const gcall *m_call_stmt;
+   tree m_fndecl;
+ };
+ 
+ /* Subclass of call_info for a "success" outcome of a call,
+    adding a "when `FNDECL' succeeds" message.
+    This is still abstract: the custom_edge_info::update_model vfunc
+    must be implemented.  */
+ 
+ class success_call_info : public call_info
+ {
+ public:
+   label_text get_desc (bool can_colorize) const FINAL OVERRIDE;
+ 
+ protected:
+   success_call_info (const call_details &cd) : call_info (cd) {}
+ };
+ 
+ /* Subclass of call_info for a "failure" outcome of a call,
+    adding a "when `FNDECL' fails" message.
+    This is still abstract: the custom_edge_info::update_model vfunc
+    must be implemented.  */
+ 
+ class failed_call_info : public call_info
+ {
+ public:
+   label_text get_desc (bool can_colorize) const FINAL OVERRIDE;
+ 
+ protected:
+   failed_call_info (const call_details &cd) : call_info (cd) {}
+ };
+ 
+ } // namespace ana
+ 
+ #endif /* GCC_ANALYZER_CALL_INFO_H */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/call-string.cc gcc-12.1.0/gcc/analyzer/call-string.cc
*** gcc-11.3.0/gcc/analyzer/call-string.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/call-string.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Call stacks at program points.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Call stacks at program points.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 45,59 ****
  
  /* class call_string.  */
  
  /* call_string's copy ctor.  */
  
  call_string::call_string (const call_string &other)
! : m_return_edges (other.m_return_edges.length ())
  {
!   const return_superedge *e;
!   int i;
!   FOR_EACH_VEC_ELT (other.m_return_edges, i, e)
!     m_return_edges.quick_push (e);
  }
  
  /* call_string's assignment operator.  */
--- 45,86 ----
  
  /* class call_string.  */
  
+ /* struct call_string::element_t.  */
+ 
+ /* call_string::element_t's equality operator.  */
+ 
+ bool
+ call_string::element_t::operator== (const call_string::element_t &other) const
+ {
+   return (m_caller == other.m_caller && m_callee == other.m_callee);
+ }
+ 
+ /* call_string::element_t's inequality operator.  */
+ bool
+ call_string::element_t::operator!= (const call_string::element_t &other) const
+ {
+   return !(*this == other);
+ }
+ 
+ function *
+ call_string::element_t::get_caller_function () const
+ {
+   return m_caller->get_function ();
+ }
+ 
+ function *
+ call_string::element_t::get_callee_function () const
+ {
+   return m_callee->get_function ();
+ }
+ 
  /* call_string's copy ctor.  */
  
  call_string::call_string (const call_string &other)
! : m_elements (other.m_elements.length ())
  {
!   for (const call_string::element_t &e : other.m_elements)
!     m_elements.quick_push (e);
  }
  
  /* call_string's assignment operator.  */
*************** call_string&
*** 62,73 ****
  call_string::operator= (const call_string &other)
  {
    // would be much simpler if we could rely on vec<> assignment op
!   m_return_edges.truncate (0);
!   m_return_edges.reserve (other.m_return_edges.length (), true);
!   const return_superedge *e;
    int i;
!   FOR_EACH_VEC_ELT (other.m_return_edges, i, e)
!     m_return_edges.quick_push (e);
    return *this;
  }
  
--- 89,100 ----
  call_string::operator= (const call_string &other)
  {
    // would be much simpler if we could rely on vec<> assignment op
!   m_elements.truncate (0);
!   m_elements.reserve (other.m_elements.length (), true);
!   call_string::element_t *e;
    int i;
!   FOR_EACH_VEC_ELT (other.m_elements, i, e)
!     m_elements.quick_push (*e);
    return *this;
  }
  
*************** call_string::operator= (const call_strin
*** 76,87 ****
  bool
  call_string::operator== (const call_string &other) const
  {
!   if (m_return_edges.length () != other.m_return_edges.length ())
      return false;
!   const return_superedge *e;
    int i;
!   FOR_EACH_VEC_ELT (m_return_edges, i, e)
!     if (e != other.m_return_edges[i])
        return false;
    return true;
  }
--- 103,114 ----
  bool
  call_string::operator== (const call_string &other) const
  {
!   if (m_elements.length () != other.m_elements.length ())
      return false;
!   call_string::element_t *e;
    int i;
!   FOR_EACH_VEC_ELT (m_elements, i, e)
!     if (*e != other.m_elements[i])
        return false;
    return true;
  }
*************** call_string::print (pretty_printer *pp)
*** 93,107 ****
  {
    pp_string (pp, "[");
  
!   const return_superedge *e;
    int i;
!   FOR_EACH_VEC_ELT (m_return_edges, i, e)
      {
        if (i > 0)
  	pp_string (pp, ", ");
        pp_printf (pp, "(SN: %i -> SN: %i in %s)",
! 		 e->m_src->m_index, e->m_dest->m_index,
! 		 function_name (e->m_dest->m_fun));
      }
  
    pp_string (pp, "]");
--- 120,134 ----
  {
    pp_string (pp, "[");
  
!   call_string::element_t *e;
    int i;
!   FOR_EACH_VEC_ELT (m_elements, i, e)
      {
        if (i > 0)
  	pp_string (pp, ", ");
        pp_printf (pp, "(SN: %i -> SN: %i in %s)",
! 		 e->m_callee->m_index, e->m_caller->m_index,
! 		 function_name (e->m_caller->m_fun));
      }
  
    pp_string (pp, "]");
*************** call_string::print (pretty_printer *pp)
*** 111,134 ****
     [{"src_snode_idx" : int,
       "dst_snode_idx" : int,
       "funcname" : str},
!      ...for each return_superedge in the callstring].  */
  
  json::value *
  call_string::to_json () const
  {
    json::array *arr = new json::array ();
  
!   const return_superedge *e;
!   int i;
!   FOR_EACH_VEC_ELT (m_return_edges, i, e)
      {
        json::object *e_obj = new json::object ();
        e_obj->set ("src_snode_idx",
! 		  new json::integer_number (e->m_src->m_index));
        e_obj->set ("dst_snode_idx",
! 		  new json::integer_number (e->m_dest->m_index));
        e_obj->set ("funcname",
! 		  new json::string (function_name (e->m_dest->m_fun)));
        arr->append (e_obj);
      }
  
--- 138,159 ----
     [{"src_snode_idx" : int,
       "dst_snode_idx" : int,
       "funcname" : str},
!      ...for each element in the callstring].  */
  
  json::value *
  call_string::to_json () const
  {
    json::array *arr = new json::array ();
  
!   for (const call_string::element_t &e : m_elements)
      {
        json::object *e_obj = new json::object ();
        e_obj->set ("src_snode_idx",
! 		  new json::integer_number (e.m_callee->m_index));
        e_obj->set ("dst_snode_idx",
! 		  new json::integer_number (e.m_caller->m_index));
        e_obj->set ("funcname",
! 		  new json::string (function_name (e.m_caller->m_fun)));
        arr->append (e_obj);
      }
  
*************** hashval_t
*** 141,150 ****
  call_string::hash () const
  {
    inchash::hash hstate;
!   int i;
!   const return_superedge *e;
!   FOR_EACH_VEC_ELT (m_return_edges, i, e)
!     hstate.add_ptr (e);
    return hstate.end ();
  }
  
--- 166,173 ----
  call_string::hash () const
  {
    inchash::hash hstate;
!   for (const call_string::element_t &e : m_elements)
!     hstate.add_ptr (e.m_caller);
    return hstate.end ();
  }
  
*************** call_string::push_call (const supergraph
*** 158,181 ****
    gcc_assert (call_sedge);
    const return_superedge *return_sedge = call_sedge->get_edge_for_return (sg);
    gcc_assert (return_sedge);
!   m_return_edges.safe_push (return_sedge);
  }
  
  /* Count the number of times the top-most call site appears in the
     stack.  */
- 
  int
  call_string::calc_recursion_depth () const
  {
!   if (m_return_edges.is_empty ())
      return 0;
!   const return_superedge *top_return_sedge
!     = m_return_edges[m_return_edges.length () - 1];
  
    int result = 0;
!   const return_superedge *e;
!   int i;
!   FOR_EACH_VEC_ELT (m_return_edges, i, e)
      if (e == top_return_sedge)
        ++result;
    return result;
--- 181,216 ----
    gcc_assert (call_sedge);
    const return_superedge *return_sedge = call_sedge->get_edge_for_return (sg);
    gcc_assert (return_sedge);
!   call_string::element_t e (return_sedge->m_dest, return_sedge->m_src);
!   m_elements.safe_push (e);
! }
! 
! void
! call_string::push_call (const supernode *caller,
! 			const supernode *callee)
! {
!   call_string::element_t e (caller, callee);
!   m_elements.safe_push (e);
! }
! 
! call_string::element_t
! call_string::pop ()
! {
!   return m_elements.pop();
  }
  
  /* Count the number of times the top-most call site appears in the
     stack.  */
  int
  call_string::calc_recursion_depth () const
  {
!   if (m_elements.is_empty ())
      return 0;
!   const call_string::element_t top_return_sedge 
!     = m_elements[m_elements.length () - 1];
  
    int result = 0;
!   for (const call_string::element_t &e : m_elements)
      if (e == top_return_sedge)
        ++result;
    return result;
*************** call_string::cmp (const call_string &a,
*** 209,221 ****
        if (i >= len_b)
  	return -1;
  
!       /* Otherwise, compare the edges.  */
!       const return_superedge *edge_a = a[i];
!       const return_superedge *edge_b = b[i];
!       int src_cmp = edge_a->m_src->m_index - edge_b->m_src->m_index;
        if (src_cmp)
  	return src_cmp;
!       int dest_cmp = edge_a->m_dest->m_index - edge_b->m_dest->m_index;
        if (dest_cmp)
  	return dest_cmp;
        i++;
--- 244,258 ----
        if (i >= len_b)
  	return -1;
  
!       /* Otherwise, compare the node pairs.  */
!       const call_string::element_t a_node_pair = a[i];
!       const call_string::element_t b_node_pair = b[i];
!       int src_cmp 
!       	= a_node_pair.m_callee->m_index - b_node_pair.m_callee->m_index;
        if (src_cmp)
  	return src_cmp;
!       int dest_cmp 
!       	= a_node_pair.m_caller->m_index - b_node_pair.m_caller->m_index;
        if (dest_cmp)
  	return dest_cmp;
        i++;
*************** call_string::cmp (const call_string &a,
*** 223,228 ****
--- 260,285 ----
      }
  }
  
+ /* Return the pointer to callee of the topmost call in the stack,
+    or NULL if stack is empty.  */
+ const supernode *
+ call_string::get_callee_node () const
+ {
+   if(m_elements.is_empty ())
+     return NULL;
+   return m_elements[m_elements.length () - 1].m_callee;
+ }
+ 
+ /* Return the pointer to caller of the topmost call in the stack,
+    or NULL if stack is empty.  */
+ const supernode * 
+ call_string::get_caller_node () const
+ {
+   if(m_elements.is_empty ())
+     return NULL;
+   return m_elements[m_elements.length () - 1].m_caller;
+ }
+ 
  /* Assert that this object is sane.  */
  
  void
*************** call_string::validate () const
*** 234,245 ****
  #endif
  
    /* Each entry's "caller" should be the "callee" of the previous entry.  */
!   const return_superedge *e;
    int i;
!   FOR_EACH_VEC_ELT (m_return_edges, i, e)
      if (i > 0)
!       gcc_assert (e->get_caller_function ()
! 		  == m_return_edges[i - 1]->get_callee_function ());
  }
  
  #endif /* #if ENABLE_ANALYZER */
--- 291,304 ----
  #endif
  
    /* Each entry's "caller" should be the "callee" of the previous entry.  */
!   call_string::element_t *e;
    int i;
!   FOR_EACH_VEC_ELT (m_elements, i, e)
      if (i > 0)
!     {
!       gcc_assert (e->get_caller_function () == 
!       		  m_elements[i - 1].get_callee_function ());
!     }
  }
  
  #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/call-string.h gcc-12.1.0/gcc/analyzer/call-string.h
*** gcc-11.3.0/gcc/analyzer/call-string.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/call-string.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Call stacks at program points.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Call stacks at program points.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 24,45 ****
  namespace ana {
  
  class supergraph;
  class call_superedge;
  class return_superedge;
  
  /* A string of return_superedge pointers, representing a call stack
     at a program point.
  
     This is used to ensure that we generate interprocedurally valid paths
     i.e. that we return to the same callsite that called us.
  
!    The class actually stores the return edges, rather than the call edges,
!    since that's what we need to compare against.  */
  
  class call_string
  {
  public:
!   call_string () : m_return_edges () {}
    call_string (const call_string &other);
    call_string& operator= (const call_string &other);
  
--- 24,71 ----
  namespace ana {
  
  class supergraph;
+ class supernode;
  class call_superedge;
  class return_superedge;
  
+ 
  /* A string of return_superedge pointers, representing a call stack
     at a program point.
  
     This is used to ensure that we generate interprocedurally valid paths
     i.e. that we return to the same callsite that called us.
  
!    The class stores returning calls ( which may be represented by a
!    returning superedge ). We do so because this is what we need to compare 
!    against.  */
  
  class call_string
  {
  public:
!   /* A struct representing an element in the call_string.
! 
!    Each element represents a path from m_callee to m_caller which represents
!    returning from function.  */
! 
!   struct element_t
!   {
!     element_t (const supernode *caller, const supernode *callee)
!     :  m_caller (caller), m_callee (callee)
!     {
!     }
! 
!     bool operator== (const element_t &other) const;
!     bool operator!= (const element_t &other) const;
! 
!     /* Accessors */
!     function *get_caller_function () const;
!     function *get_callee_function () const;
!     
!     const supernode *m_caller;
!     const supernode *m_callee;
!   };
! 
!   call_string () : m_elements () {}
    call_string (const call_string &other);
    call_string& operator= (const call_string &other);
  
*************** public:
*** 51,77 ****
  
    hashval_t hash () const;
  
!   bool empty_p () const { return m_return_edges.is_empty (); }
  
    void push_call (const supergraph &sg,
  		  const call_superedge *sedge);
!   const return_superedge *pop () { return m_return_edges.pop (); }
  
    int calc_recursion_depth () const;
  
    static int cmp (const call_string &a,
  		  const call_string &b);
  
!   unsigned length () const { return m_return_edges.length (); }
!   const return_superedge *operator[] (unsigned idx) const
    {
!     return m_return_edges[idx];
    }
  
    void validate () const;
  
  private:
!   auto_vec<const return_superedge *> m_return_edges;
  };
  
  } // namespace ana
--- 77,111 ----
  
    hashval_t hash () const;
  
!   bool empty_p () const { return m_elements.is_empty (); }
  
    void push_call (const supergraph &sg,
  		  const call_superedge *sedge);
! 
!   void push_call (const supernode *src, 
!     const supernode *dest);
! 
!   element_t pop ();
  
    int calc_recursion_depth () const;
  
    static int cmp (const call_string &a,
  		  const call_string &b);
  
!   /* Accessors */
! 
!   const supernode *get_callee_node () const;
!   const supernode *get_caller_node () const;
!   unsigned length () const { return m_elements.length (); }
!   element_t operator[] (unsigned idx) const
    {
!     return m_elements[idx];
    }
  
    void validate () const;
  
  private:
!   auto_vec<element_t> m_elements;
  };
  
  } // namespace ana
diff -Nrcpad gcc-11.3.0/gcc/analyzer/checker-path.cc gcc-12.1.0/gcc/analyzer/checker-path.cc
*** gcc-11.3.0/gcc/analyzer/checker-path.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/checker-path.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Subclasses of diagnostic_path and diagnostic_event for analyzer diagnostics.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Subclasses of diagnostic_path and diagnostic_event for analyzer diagnostics.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** event_kind_to_string (enum event_kind ek
*** 81,86 ****
--- 81,88 ----
        return "EK_CUSTOM";
      case EK_STMT:
        return "EK_STMT";
+     case EK_REGION_CREATION:
+       return "EK_REGION_CREATION";
      case EK_FUNCTION_ENTRY:
        return "EK_FUNCTION_ENTRY";
      case EK_STATE_CHANGE:
*************** debug_event::get_desc (bool) const
*** 162,175 ****
    return label_text::borrow (m_desc);
  }
  
! /* class custom_event : public checker_event.  */
  
  /* Implementation of diagnostic_event::get_desc vfunc for
!    custom_event.
     Use the saved string as the event's description.  */
  
  label_text
! custom_event::get_desc (bool) const
  {
    return label_text::borrow (m_desc);
  }
--- 164,177 ----
    return label_text::borrow (m_desc);
  }
  
! /* class precanned_custom_event : public custom_event.  */
  
  /* Implementation of diagnostic_event::get_desc vfunc for
!    precanned_custom_event.
     Use the saved string as the event's description.  */
  
  label_text
! precanned_custom_event::get_desc (bool) const
  {
    return label_text::borrow (m_desc);
  }
*************** statement_event::get_desc (bool) const
*** 199,204 ****
--- 201,234 ----
    return label_text::take (xstrdup (pp_formatted_text (&pp)));
  }
  
+ /* class region_creation_event : public checker_event.  */
+ 
+ region_creation_event::region_creation_event (const region *reg,
+ 					      location_t loc,
+ 					      tree fndecl,
+ 					      int depth)
+ : checker_event (EK_REGION_CREATION, loc, fndecl, depth),
+   m_reg (reg)
+ {
+ }
+ 
+ /* Implementation of diagnostic_event::get_desc vfunc for
+    region_creation_event.  */
+ 
+ label_text
+ region_creation_event::get_desc (bool) const
+ {
+   switch (m_reg->get_memory_space ())
+     {
+     default:
+       return label_text::borrow ("region created here");
+     case MEMSPACE_STACK:
+       return label_text::borrow ("region created on stack here");
+     case MEMSPACE_HEAP:
+       return label_text::borrow ("region created on heap here");
+     }
+ }
+ 
  /* class function_entry_event : public checker_event.  */
  
  /* Implementation of diagnostic_event::get_desc vfunc for
*************** call_event::call_event (const exploded_e
*** 614,620 ****
  			location_t loc, tree fndecl, int depth)
  : superedge_event (EK_CALL_EDGE, eedge, loc, fndecl, depth)
  {
!   gcc_assert (eedge.m_sedge->m_kind == SUPEREDGE_CALL);
  }
  
  /* Implementation of diagnostic_event::get_desc vfunc for
--- 644,654 ----
  			location_t loc, tree fndecl, int depth)
  : superedge_event (EK_CALL_EDGE, eedge, loc, fndecl, depth)
  {
!   if (eedge.m_sedge)
!     gcc_assert (eedge.m_sedge->m_kind == SUPEREDGE_CALL);
! 
!    m_src_snode = eedge.m_src->get_supernode ();
!    m_dest_snode = eedge.m_dest->get_supernode ();
  }
  
  /* Implementation of diagnostic_event::get_desc vfunc for
*************** call_event::get_desc (bool can_colorize)
*** 638,645 ****
        label_text custom_desc
  	= m_pending_diagnostic->describe_call_with_state
  	    (evdesc::call_with_state (can_colorize,
! 				      m_sedge->m_src->m_fun->decl,
! 				      m_sedge->m_dest->m_fun->decl,
  				      var,
  				      m_critical_state));
        if (custom_desc.m_buffer)
--- 672,679 ----
        label_text custom_desc
  	= m_pending_diagnostic->describe_call_with_state
  	    (evdesc::call_with_state (can_colorize,
! 				      m_src_snode->m_fun->decl,
! 				      m_dest_snode->m_fun->decl,
  				      var,
  				      m_critical_state));
        if (custom_desc.m_buffer)
*************** call_event::get_desc (bool can_colorize)
*** 648,655 ****
  
    return make_label_text (can_colorize,
  			  "calling %qE from %qE",
! 			  m_sedge->m_dest->m_fun->decl,
! 			  m_sedge->m_src->m_fun->decl);
  }
  
  /* Override of checker_event::is_call_p for calls.  */
--- 682,689 ----
  
    return make_label_text (can_colorize,
  			  "calling %qE from %qE",
! 			  m_dest_snode->m_fun->decl,
! 			  m_src_snode->m_fun->decl);
  }
  
  /* Override of checker_event::is_call_p for calls.  */
*************** return_event::return_event (const explod
*** 668,674 ****
  			    location_t loc, tree fndecl, int depth)
  : superedge_event (EK_RETURN_EDGE, eedge, loc, fndecl, depth)
  {
!   gcc_assert (eedge.m_sedge->m_kind == SUPEREDGE_RETURN);
  }
  
  /* Implementation of diagnostic_event::get_desc vfunc for
--- 702,712 ----
  			    location_t loc, tree fndecl, int depth)
  : superedge_event (EK_RETURN_EDGE, eedge, loc, fndecl, depth)
  {
!   if (eedge.m_sedge)
!     gcc_assert (eedge.m_sedge->m_kind == SUPEREDGE_RETURN);
! 
!   m_src_snode = eedge.m_src->get_supernode ();
!   m_dest_snode = eedge.m_dest->get_supernode ();
  }
  
  /* Implementation of diagnostic_event::get_desc vfunc for
*************** return_event::get_desc (bool can_coloriz
*** 694,709 ****
        label_text custom_desc
  	= m_pending_diagnostic->describe_return_of_state
  	    (evdesc::return_of_state (can_colorize,
! 				      m_sedge->m_dest->m_fun->decl,
! 				      m_sedge->m_src->m_fun->decl,
  				      m_critical_state));
        if (custom_desc.m_buffer)
  	return custom_desc;
      }
    return make_label_text (can_colorize,
  			  "returning to %qE from %qE",
! 			  m_sedge->m_dest->m_fun->decl,
! 			  m_sedge->m_src->m_fun->decl);
  }
  
  /* Override of checker_event::is_return_p for returns.  */
--- 732,747 ----
        label_text custom_desc
  	= m_pending_diagnostic->describe_return_of_state
  	    (evdesc::return_of_state (can_colorize,
! 				      m_dest_snode->m_fun->decl,
! 				      m_src_snode->m_fun->decl,
  				      m_critical_state));
        if (custom_desc.m_buffer)
  	return custom_desc;
      }
    return make_label_text (can_colorize,
  			  "returning to %qE from %qE",
! 			  m_dest_snode->m_fun->decl,
! 			  m_src_snode->m_fun->decl);
  }
  
  /* Override of checker_event::is_return_p for returns.  */
*************** checker_path::debug () const
*** 983,988 ****
--- 1021,1037 ----
      }
  }
  
+ /* Add region_creation_event instance to this path for REG,
+    describing whether REG is on the stack or heap.  */
+ 
+ void
+ checker_path::add_region_creation_event (const region *reg,
+ 					 location_t loc,
+ 					 tree fndecl, int depth)
+ {
+   add_event (new region_creation_event (reg, loc, fndecl, depth));
+ }
+ 
  /* Add a warning_event to the end of this path.  */
  
  void
*************** checker_path::add_final_event (const sta
*** 1001,1009 ****
  void
  checker_path::fixup_locations (pending_diagnostic *pd)
  {
!   checker_event *e;
!   int i;
!   FOR_EACH_VEC_ELT (m_events, i, e)
      e->set_location (pd->fixup_location (e->get_location ()));
  }
  
--- 1050,1056 ----
  void
  checker_path::fixup_locations (pending_diagnostic *pd)
  {
!   for (checker_event *e : m_events)
      e->set_location (pd->fixup_location (e->get_location ()));
  }
  
diff -Nrcpad gcc-11.3.0/gcc/analyzer/checker-path.h gcc-12.1.0/gcc/analyzer/checker-path.h
*** gcc-11.3.0/gcc/analyzer/checker-path.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/checker-path.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Subclasses of diagnostic_path and diagnostic_event for analyzer diagnostics.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Subclasses of diagnostic_path and diagnostic_event for analyzer diagnostics.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** enum event_kind
*** 31,36 ****
--- 31,37 ----
    EK_DEBUG,
    EK_CUSTOM,
    EK_STMT,
+   EK_REGION_CREATION,
    EK_FUNCTION_ENTRY,
    EK_STATE_CHANGE,
    EK_START_CFG_EDGE,
*************** extern const char *event_kind_to_string
*** 56,62 ****
--- 57,65 ----
       checker_event
         debug_event (EK_DEBUG)
         custom_event (EK_CUSTOM)
+ 	 precanned_custom_event
         statement_event (EK_STMT)
+        region_creation_event (EK_REGION_CREATION)
         function_entry_event (EK_FUNCTION_ENTRY)
         state_change_event (EK_STATE_CHANGE)
         superedge_event
*************** private:
*** 144,162 ****
    char *m_desc;
  };
  
! /* A concrete event subclass for custom events.  These are not filtered,
     as they are likely to be pertinent to the diagnostic.  */
  
  class custom_event : public checker_event
  {
  public:
!   custom_event (location_t loc, tree fndecl, int depth,
! 		const char *desc)
!   : checker_event (EK_CUSTOM, loc, fndecl, depth),
      m_desc (xstrdup (desc))
    {
    }
!   ~custom_event ()
    {
      free (m_desc);
    }
--- 147,176 ----
    char *m_desc;
  };
  
! /* An abstract event subclass for custom events.  These are not filtered,
     as they are likely to be pertinent to the diagnostic.  */
  
  class custom_event : public checker_event
  {
+ protected:
+   custom_event (location_t loc, tree fndecl, int depth)
+   : checker_event (EK_CUSTOM, loc, fndecl, depth)
+   {
+   }
+ };
+ 
+ /* A concrete custom_event subclass with a precanned message.  */
+ 
+ class precanned_custom_event : public custom_event
+ {
  public:
!   precanned_custom_event (location_t loc, tree fndecl, int depth,
! 			  const char *desc)
!   : custom_event (loc, fndecl, depth),
      m_desc (xstrdup (desc))
    {
    }
!   ~precanned_custom_event ()
    {
      free (m_desc);
    }
*************** public:
*** 182,187 ****
--- 196,216 ----
    const program_state m_dst_state;
  };
  
+ /* A concrete event subclass describing the creation of a region that
+    is significant for a diagnostic  e.g. "region created on stack here".  */
+ 
+ class region_creation_event : public checker_event
+ {
+ public:
+   region_creation_event (const region *reg,
+ 			 location_t loc, tree fndecl, int depth);
+ 
+   label_text get_desc (bool) const FINAL OVERRIDE;
+ 
+ private:
+   const region *m_reg;
+ };
+ 
  /* An event subclass describing the entry to a function.  */
  
  class function_entry_event : public checker_event
*************** public:
*** 326,331 ****
--- 355,363 ----
    label_text get_desc (bool can_colorize) const FINAL OVERRIDE;
  
    bool is_call_p () const FINAL OVERRIDE;
+ 
+   const supernode *m_src_snode;
+   const supernode *m_dest_snode;
  };
  
  /* A concrete event subclass for an interprocedural return.  */
*************** public:
*** 339,344 ****
--- 371,379 ----
    label_text get_desc (bool can_colorize) const FINAL OVERRIDE;
  
    bool is_return_p () const FINAL OVERRIDE;
+ 
+   const supernode *m_src_snode;
+   const supernode *m_dest_snode;
  };
  
  /* A concrete event subclass for the start of a consolidated run of CFG
*************** public:
*** 543,548 ****
--- 578,587 ----
      m_events[idx] = new_event;
    }
  
+   void add_region_creation_event (const region *reg,
+ 				  location_t loc,
+ 				  tree fndecl, int depth);
+ 
    void add_final_event (const state_machine *sm,
  			const exploded_node *enode, const gimple *stmt,
  			tree var, state_machine::state_t state);
diff -Nrcpad gcc-11.3.0/gcc/analyzer/complexity.cc gcc-12.1.0/gcc/analyzer/complexity.cc
*** gcc-11.3.0/gcc/analyzer/complexity.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/complexity.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Measuring the complexity of svalues/regions.
!    Copyright (C) 2020-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Measuring the complexity of svalues/regions.
!    Copyright (C) 2020-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** complexity::from_pair (const complexity
*** 90,95 ****
--- 90,111 ----
  		     MAX (c1.m_max_depth, c2.m_max_depth) + 1);
  }
  
+ /* Get complexity for a new node that references the svalues in VEC.  */
+ 
+ complexity
+ complexity::from_vec_svalue (const vec<const svalue *> &vec)
+ {
+   unsigned num_nodes = 0;
+   unsigned max_depth = 0;
+   for (auto iter_sval : vec)
+     {
+       const complexity &iter_c = iter_sval->get_complexity ();
+       num_nodes += iter_c.m_num_nodes;
+       max_depth = MAX (max_depth, iter_c.m_max_depth);
+     }
+   return complexity (num_nodes + 1, max_depth + 1);
+ }
+ 
  } // namespace ana
  
  #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/complexity.h gcc-12.1.0/gcc/analyzer/complexity.h
*** gcc-11.3.0/gcc/analyzer/complexity.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/complexity.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Measuring the complexity of svalues/regions.
!    Copyright (C) 2020-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Measuring the complexity of svalues/regions.
!    Copyright (C) 2020-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** struct complexity
*** 36,41 ****
--- 36,42 ----
    complexity (const region *reg);
    complexity (const svalue *sval);
    static complexity from_pair (const complexity &c1, const complexity &c);
+   static complexity from_vec_svalue (const vec<const svalue *> &vec);
  
    /* The total number of svalues and regions in the tree of this
       entity, including the entity itself.  */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/constraint-manager.cc gcc-12.1.0/gcc/analyzer/constraint-manager.cc
*** gcc-11.3.0/gcc/analyzer/constraint-manager.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/constraint-manager.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Tracking equivalence classes and constraints at a point on an execution path.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Tracking equivalence classes and constraints at a point on an execution path.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 42,53 ****
--- 42,55 ----
  #include "sbitmap.h"
  #include "bitmap.h"
  #include "tristate.h"
+ #include "analyzer/analyzer-logging.h"
  #include "analyzer/call-string.h"
  #include "analyzer/program-point.h"
  #include "analyzer/store.h"
  #include "analyzer/region-model.h"
  #include "analyzer/constraint-manager.h"
  #include "analyzer/analyzer-selftests.h"
+ #include "tree-pretty-print.h"
  
  #if ENABLE_ANALYZER
  
*************** compare_constants (tree lhs_const, enum
*** 65,77 ****
    return tristate (tristate::TS_UNKNOWN);
  }
  
  /* struct bound.  */
  
  /* Ensure that this bound is closed by converting an open bound to a
     closed one.  */
  
  void
! bound::ensure_closed (bool is_upper)
  {
    if (!m_closed)
      {
--- 67,123 ----
    return tristate (tristate::TS_UNKNOWN);
  }
  
+ /* Return true iff CST is below the maximum value for its type.  */
+ 
+ static bool
+ can_plus_one_p (tree cst)
+ {
+   gcc_assert (CONSTANT_CLASS_P (cst));
+   return tree_int_cst_lt (cst, TYPE_MAX_VALUE (TREE_TYPE (cst)));
+ }
+ 
+ /* Return (CST + 1).  */
+ 
+ static tree
+ plus_one (tree cst)
+ {
+   gcc_assert (CONSTANT_CLASS_P (cst));
+   gcc_assert (can_plus_one_p (cst));
+   tree result = fold_build2 (PLUS_EXPR, TREE_TYPE (cst),
+ 			     cst, integer_one_node);
+   gcc_assert (CONSTANT_CLASS_P (result));
+   return result;
+ }
+ 
+ /* Return true iff CST is above the minimum value for its type.  */
+ 
+ static bool
+ can_minus_one_p (tree cst)
+ {
+   gcc_assert (CONSTANT_CLASS_P (cst));
+   return tree_int_cst_lt (TYPE_MIN_VALUE (TREE_TYPE (cst)), cst);
+ }
+ 
+ /* Return (CST - 1).  */
+ 
+ static tree
+ minus_one (tree cst)
+ {
+   gcc_assert (CONSTANT_CLASS_P (cst));
+   gcc_assert (can_minus_one_p (cst));
+   tree result = fold_build2 (MINUS_EXPR, TREE_TYPE (cst),
+ 			     cst, integer_one_node);
+   gcc_assert (CONSTANT_CLASS_P (result));
+   return result;
+ }
+ 
  /* struct bound.  */
  
  /* Ensure that this bound is closed by converting an open bound to a
     closed one.  */
  
  void
! bound::ensure_closed (enum bound_kind bound_kind)
  {
    if (!m_closed)
      {
*************** bound::ensure_closed (bool is_upper)
*** 79,85 ****
  	 For example, convert 3 < x into 4 <= x,
  	 and convert x < 5 into x <= 4.  */
        gcc_assert (CONSTANT_CLASS_P (m_constant));
!       m_constant = fold_build2 (is_upper ? MINUS_EXPR : PLUS_EXPR,
  				TREE_TYPE (m_constant),
  				m_constant, integer_one_node);
        gcc_assert (CONSTANT_CLASS_P (m_constant));
--- 125,131 ----
  	 For example, convert 3 < x into 4 <= x,
  	 and convert x < 5 into x <= 4.  */
        gcc_assert (CONSTANT_CLASS_P (m_constant));
!       m_constant = fold_build2 (bound_kind == BK_UPPER ? MINUS_EXPR : PLUS_EXPR,
  				TREE_TYPE (m_constant),
  				m_constant, integer_one_node);
        gcc_assert (CONSTANT_CLASS_P (m_constant));
*************** range::constrained_to_single_element ()
*** 159,166 ****
      return NULL_TREE;
  
    /* Convert any open bounds to closed bounds.  */
!   m_lower_bound.ensure_closed (false);
!   m_upper_bound.ensure_closed (true);
  
    // Are they equal?
    tree comparison = fold_binary (EQ_EXPR, boolean_type_node,
--- 205,212 ----
      return NULL_TREE;
  
    /* Convert any open bounds to closed bounds.  */
!   m_lower_bound.ensure_closed (BK_LOWER);
!   m_upper_bound.ensure_closed (BK_UPPER);
  
    // Are they equal?
    tree comparison = fold_binary (EQ_EXPR, boolean_type_node,
*************** range::above_upper_bound (tree rhs_const
*** 255,260 ****
--- 301,1061 ----
  			    m_upper_bound.m_constant).is_true ();
  }
  
+ /* Attempt to add B to the bound of the given kind of this range.
+    Return true if feasible; false if infeasible.  */
+ 
+ bool
+ range::add_bound (bound b, enum bound_kind bound_kind)
+ {
+   b.ensure_closed (bound_kind);
+ 
+   switch (bound_kind)
+     {
+     default:
+       gcc_unreachable ();
+     case BK_LOWER:
+       /* Discard redundant bounds.  */
+       if (m_lower_bound.m_constant)
+ 	{
+ 	  m_lower_bound.ensure_closed (BK_LOWER);
+ 	  if (tree_int_cst_le (b.m_constant,
+ 			       m_lower_bound.m_constant))
+ 	    return true;
+ 	}
+       if (m_upper_bound.m_constant)
+ 	{
+ 	  m_upper_bound.ensure_closed (BK_UPPER);
+ 	  /* Reject B <= V <= UPPER when B > UPPER.  */
+ 	  if (!tree_int_cst_le (b.m_constant,
+ 				m_upper_bound.m_constant))
+ 	    return false;
+ 	}
+       m_lower_bound = b;
+       break;
+ 
+     case BK_UPPER:
+       /* Discard redundant bounds.  */
+       if (m_upper_bound.m_constant)
+ 	{
+ 	  m_upper_bound.ensure_closed (BK_UPPER);
+ 	  if (!tree_int_cst_lt (b.m_constant,
+ 				m_upper_bound.m_constant))
+ 	    return true;
+ 	}
+       if (m_lower_bound.m_constant)
+ 	{
+ 	  m_lower_bound.ensure_closed (BK_LOWER);
+ 	  /* Reject LOWER <= V <= B when LOWER > B.  */
+ 	  if (!tree_int_cst_le (m_lower_bound.m_constant,
+ 				b.m_constant))
+ 	    return false;
+ 	}
+       m_upper_bound = b;
+       break;
+     }
+ 
+   return true;
+ }
+ 
+ /* Attempt to add (RANGE OP RHS_CONST) as a bound to this range.
+    Return true if feasible; false if infeasible.  */
+ 
+ bool
+ range::add_bound (enum tree_code op, tree rhs_const)
+ {
+   switch (op)
+     {
+     default:
+       return true;
+     case LT_EXPR:
+       /* "V < RHS_CONST"  */
+       return add_bound (bound (rhs_const, false), BK_UPPER);
+     case LE_EXPR:
+       /* "V <= RHS_CONST"  */
+       return add_bound (bound (rhs_const, true), BK_UPPER);
+     case GE_EXPR:
+       /* "V >= RHS_CONST"  */
+       return add_bound (bound (rhs_const, true), BK_LOWER);
+     case GT_EXPR:
+       /* "V > RHS_CONST"  */
+       return add_bound (bound (rhs_const, false), BK_LOWER);
+     }
+ }
+ 
+ /* struct bounded_range.  */
+ 
+ bounded_range::bounded_range (const_tree lower, const_tree upper)
+ : m_lower (const_cast<tree> (lower)),
+   m_upper (const_cast<tree> (upper))
+ {
+   if (lower && upper)
+     {
+       gcc_assert (TREE_CODE (m_lower) == INTEGER_CST);
+       gcc_assert (TREE_CODE (m_upper) == INTEGER_CST);
+       /* We should have lower <= upper.  */
+       gcc_assert (!tree_int_cst_lt (m_upper, m_lower));
+     }
+   else
+     {
+       /* Purely for pending on-stack values, for
+ 	 writing back to.  */
+       gcc_assert (m_lower == NULL_TREE);
+       gcc_assert (m_lower == NULL_TREE);
+     }
+ }
+ 
+ static void
+ dump_cst (pretty_printer *pp, tree cst, bool show_types)
+ {
+   gcc_assert (cst);
+   if (show_types)
+     {
+       pp_character (pp, '(');
+       dump_generic_node (pp, TREE_TYPE (cst), 0, (dump_flags_t)0, false);
+       pp_character (pp, ')');
+     }
+   dump_generic_node (pp, cst, 0, (dump_flags_t)0, false);
+ }
+ 
+ /* Dump this object to PP.  */
+ 
+ void
+ bounded_range::dump_to_pp (pretty_printer *pp, bool show_types) const
+ {
+   if (tree_int_cst_equal (m_lower, m_upper))
+     dump_cst (pp, m_lower, show_types);
+   else
+     {
+       pp_character (pp, '[');
+       dump_cst (pp, m_lower, show_types);
+       pp_string (pp, ", ");
+       dump_cst (pp, m_upper, show_types);
+       pp_character (pp, ']');
+     }
+ }
+ 
+ /* Dump this object to stderr.  */
+ 
+ void
+ bounded_range::dump (bool show_types) const
+ {
+   pretty_printer pp;
+   pp_format_decoder (&pp) = default_tree_printer;
+   pp_show_color (&pp) = pp_show_color (global_dc->printer);
+   pp.buffer->stream = stderr;
+   dump_to_pp (&pp, show_types);
+   pp_newline (&pp);
+   pp_flush (&pp);
+ }
+ 
+ json::object *
+ bounded_range::to_json () const
+ {
+   json::object *range_obj = new json::object ();
+   set_json_attr (range_obj, "lower", m_lower);
+   set_json_attr (range_obj, "upper", m_upper);
+   return range_obj;
+ }
+ 
+ /* Subroutine of bounded_range::to_json.  */
+ 
+ void
+ bounded_range::set_json_attr (json::object *obj, const char *name, tree value)
+ {
+   pretty_printer pp;
+   pp_format_decoder (&pp) = default_tree_printer;
+   pp_printf (&pp, "%E", value);
+   obj->set (name, new json::string (pp_formatted_text (&pp)));
+ }
+ 
+ 
+ /* Return true iff CST is within this range.  */
+ 
+ bool
+ bounded_range::contains_p (tree cst) const
+ {
+   /* Reject if below lower bound.  */
+   if (tree_int_cst_lt (cst, m_lower))
+     return false;
+   /* Reject if above lower bound.  */
+   if (tree_int_cst_lt (m_upper, cst))
+     return false;
+   return true;
+ }
+ 
+ /* If this range intersects OTHER, return true, writing
+    the intersection to *OUT if OUT is non-NULL.
+    Return false if they do not intersect.  */
+ 
+ bool
+ bounded_range::intersects_p (const bounded_range &other,
+ 			     bounded_range *out) const
+ {
+   const tree max_lower
+     = (tree_int_cst_le (m_lower, other.m_lower)
+        ? other.m_lower : m_lower);
+   gcc_assert (TREE_CODE (max_lower) == INTEGER_CST);
+   const tree min_upper
+     = (tree_int_cst_le (m_upper, other.m_upper)
+        ? m_upper : other.m_upper);
+   gcc_assert (TREE_CODE (min_upper) == INTEGER_CST);
+ 
+   if (tree_int_cst_le (max_lower, min_upper))
+     {
+       if (out)
+ 	*out = bounded_range (max_lower, min_upper);
+       return true;
+     }
+   else
+     return false;
+ }
+ 
+ bool
+ bounded_range::operator== (const bounded_range &other) const
+ {
+   return (TREE_TYPE (m_lower) == TREE_TYPE (other.m_lower)
+ 	  && TREE_TYPE (m_upper) == TREE_TYPE (other.m_upper)
+ 	  && tree_int_cst_equal (m_lower, other.m_lower)
+ 	  && tree_int_cst_equal (m_upper, other.m_upper));
+ }
+ 
+ int
+ bounded_range::cmp (const bounded_range &br1, const bounded_range &br2)
+ {
+   if (int cmp_lower = tree_int_cst_compare (br1.m_lower,
+ 					    br2.m_lower))
+     return cmp_lower;
+   return tree_int_cst_compare (br1.m_upper, br2.m_upper);
+ }
+ 
+ /* struct bounded_ranges.  */
+ 
+ /* Construct a bounded_ranges instance from a single range.  */
+ 
+ bounded_ranges::bounded_ranges (const bounded_range &range)
+ : m_ranges (1)
+ {
+   m_ranges.quick_push (range);
+   canonicalize ();
+   validate ();
+ }
+ 
+ /* Construct a bounded_ranges instance from multiple ranges.  */
+ 
+ bounded_ranges::bounded_ranges (const vec<bounded_range> &ranges)
+ : m_ranges (ranges.length ())
+ {
+   m_ranges.safe_splice (ranges);
+   canonicalize ();
+   validate ();
+ }
+ 
+ /* Construct a bounded_ranges instance for values of LHS for which
+    (LHS OP RHS_CONST) is true (e.g. "(LHS > 3)".  */
+ 
+ bounded_ranges::bounded_ranges (enum tree_code op, tree rhs_const)
+ : m_ranges ()
+ {
+   gcc_assert (TREE_CODE (rhs_const) == INTEGER_CST);
+   tree type = TREE_TYPE (rhs_const);
+   switch (op)
+     {
+     default:
+       gcc_unreachable ();
+     case EQ_EXPR:
+       m_ranges.safe_push (bounded_range (rhs_const, rhs_const));
+       break;
+ 
+     case GE_EXPR:
+       m_ranges.safe_push (bounded_range (rhs_const, TYPE_MAX_VALUE (type)));
+       break;
+ 
+     case LE_EXPR:
+       m_ranges.safe_push (bounded_range (TYPE_MIN_VALUE (type), rhs_const));
+       break;
+ 
+     case NE_EXPR:
+       if (tree_int_cst_lt (TYPE_MIN_VALUE (type), rhs_const))
+ 	m_ranges.safe_push (bounded_range (TYPE_MIN_VALUE (type),
+ 					   minus_one (rhs_const)));
+       if (tree_int_cst_lt (rhs_const, TYPE_MAX_VALUE (type)))
+ 	m_ranges.safe_push (bounded_range (plus_one (rhs_const),
+ 					   TYPE_MAX_VALUE (type)));
+       break;
+     case GT_EXPR:
+       if (tree_int_cst_lt (rhs_const, TYPE_MAX_VALUE (type)))
+ 	m_ranges.safe_push (bounded_range (plus_one (rhs_const),
+ 					   TYPE_MAX_VALUE (type)));
+       break;
+     case LT_EXPR:
+       if (tree_int_cst_lt (TYPE_MIN_VALUE (type), rhs_const))
+ 	m_ranges.safe_push (bounded_range (TYPE_MIN_VALUE (type),
+ 					   minus_one (rhs_const)));
+       break;
+     }
+   canonicalize ();
+   validate ();
+ }
+ 
+ /* Subroutine of ctors for fixing up m_ranges.
+    Also, initialize m_hash.  */
+ 
+ void
+ bounded_ranges::canonicalize ()
+ {
+   /* Sort the ranges.  */
+   m_ranges.qsort ([](const void *p1, const void *p2) -> int
+ 		  {
+ 		    const bounded_range &br1 = *(const bounded_range *)p1;
+ 		    const bounded_range &br2 = *(const bounded_range *)p2;
+ 		    return bounded_range::cmp (br1, br2);
+ 		  });
+ 
+   /* Merge ranges that are touching or overlapping.  */
+   for (unsigned i = 1; i < m_ranges.length (); )
+     {
+       bounded_range *prev = &m_ranges[i - 1];
+       const bounded_range *next = &m_ranges[i];
+       if (prev->intersects_p (*next, NULL)
+ 	  || (can_plus_one_p (prev->m_upper)
+ 	      && tree_int_cst_equal (plus_one (prev->m_upper),
+ 				     next->m_lower)))
+ 	{
+ 	  prev->m_upper = next->m_upper;
+ 	  m_ranges.ordered_remove (i);
+ 	}
+       else
+ 	i++;
+     }
+ 
+   /* Initialize m_hash.  */
+   inchash::hash hstate (0);
+   for (const auto &iter : m_ranges)
+     {
+       inchash::add_expr (iter.m_lower, hstate);
+       inchash::add_expr (iter.m_upper, hstate);
+     }
+   m_hash = hstate.end ();
+ }
+ 
+ /* Assert that this object is valid.  */
+ 
+ void
+ bounded_ranges::validate () const
+ {
+   /* Skip this in a release build.  */
+ #if !CHECKING_P
+   return;
+ #endif
+ 
+   for (unsigned i = 1; i < m_ranges.length (); i++)
+     {
+       const bounded_range &prev = m_ranges[i - 1];
+       const bounded_range &next = m_ranges[i];
+ 
+       /* Give up if we somehow have incompatible different types.  */
+       if (!types_compatible_p (TREE_TYPE (prev.m_upper),
+ 			       TREE_TYPE (next.m_lower)))
+ 	continue;
+ 
+       /* Verify sorted.  */
+       gcc_assert (tree_int_cst_lt (prev.m_upper, next.m_lower));
+ 
+       gcc_assert (can_plus_one_p (prev.m_upper));
+       /* otherwise there's no room for "next".  */
+ 
+       /* Verify no ranges touch each other.  */
+       gcc_assert (tree_int_cst_lt (plus_one (prev.m_upper), next.m_lower));
+     }
+ }
+ 
+ /* bounded_ranges equality operator.  */
+ 
+ bool
+ bounded_ranges::operator== (const bounded_ranges &other) const
+ {
+   if (m_ranges.length () != other.m_ranges.length ())
+     return false;
+   for (unsigned i = 0; i < m_ranges.length (); i++)
+     {
+       if (m_ranges[i] != other.m_ranges[i])
+ 	return false;
+     }
+   return true;
+ }
+ 
+ /* Dump this object to PP.  */
+ 
+ void
+ bounded_ranges::dump_to_pp (pretty_printer *pp, bool show_types) const
+ {
+   pp_character (pp, '{');
+   for (unsigned i = 0; i < m_ranges.length (); ++i)
+     {
+       if (i > 0)
+ 	pp_string (pp, ", ");
+       m_ranges[i].dump_to_pp (pp, show_types);
+     }
+   pp_character (pp, '}');
+ }
+ 
+ /* Dump this object to stderr.  */
+ 
+ DEBUG_FUNCTION void
+ bounded_ranges::dump (bool show_types) const
+ {
+   pretty_printer pp;
+   pp_format_decoder (&pp) = default_tree_printer;
+   pp_show_color (&pp) = pp_show_color (global_dc->printer);
+   pp.buffer->stream = stderr;
+   dump_to_pp (&pp, show_types);
+   pp_newline (&pp);
+   pp_flush (&pp);
+ }
+ 
+ json::value *
+ bounded_ranges::to_json () const
+ {
+   json::array *arr_obj = new json::array ();
+ 
+   for (unsigned i = 0; i < m_ranges.length (); ++i)
+     arr_obj->append (m_ranges[i].to_json ());
+ 
+   return arr_obj;
+ }
+ 
+ /* Determine whether (X OP RHS_CONST) is known to be true or false
+    for all X in the ranges expressed by this object.  */
+ 
+ tristate
+ bounded_ranges::eval_condition (enum tree_code op,
+ 				tree rhs_const,
+ 				bounded_ranges_manager *mgr) const
+ {
+   /* Convert (X OP RHS_CONST) to a bounded_ranges instance and find
+      the intersection of that with this object.  */
+   bounded_ranges other (op, rhs_const);
+   const bounded_ranges *intersection
+     = mgr->get_or_create_intersection (this, &other);
+ 
+   if (intersection->m_ranges.length () > 0)
+     {
+       /* We can use pointer equality to check for equality,
+ 	 due to instance consolidation.  */
+       if (intersection == this)
+ 	return tristate (tristate::TS_TRUE);
+       else
+ 	return tristate (tristate::TS_UNKNOWN);
+     }
+   else
+     /* No intersection.  */
+     return tristate (tristate::TS_FALSE);
+ }
+ 
+ /* Return true if CST is within any of the ranges.  */
+ 
+ bool
+ bounded_ranges::contain_p (tree cst) const
+ {
+   gcc_assert (TREE_CODE (cst) == INTEGER_CST);
+   for (const auto &iter : m_ranges)
+     {
+       /* TODO: should we optimize this based on sorting?  */
+       if (iter.contains_p (cst))
+ 	return true;
+     }
+   return false;
+ }
+ 
+ int
+ bounded_ranges::cmp (const bounded_ranges *a, const bounded_ranges *b)
+ {
+   if (int cmp_length = ((int)a->m_ranges.length ()
+ 			- (int)b->m_ranges.length ()))
+     return cmp_length;
+   for (unsigned i = 0; i < a->m_ranges.length (); i++)
+     {
+       if (int cmp_range = bounded_range::cmp (a->m_ranges[i], b->m_ranges[i]))
+ 	return cmp_range;
+     }
+   /* They are equal.  They ought to have been consolidated, so we should
+      have two pointers to the same object.  */
+   gcc_assert (a == b);
+   return 0;
+ }
+ 
+ /* class bounded_ranges_manager.  */
+ 
+ /* bounded_ranges_manager's dtor.  */
+ 
+ bounded_ranges_manager::~bounded_ranges_manager ()
+ {
+   /* Delete the managed objects.  */
+   for (const auto &iter : m_map)
+     delete iter.second;
+ }
+ 
+ /* Get the bounded_ranges instance for the empty set,  creating it if
+    necessary.  */
+ 
+ const bounded_ranges *
+ bounded_ranges_manager::get_or_create_empty ()
+ {
+   auto_vec<bounded_range> empty_vec;
+ 
+   return consolidate (new bounded_ranges (empty_vec));
+ }
+ 
+ /* Get the bounded_ranges instance for {CST}, creating it if necessary.  */
+ 
+ const bounded_ranges *
+ bounded_ranges_manager::get_or_create_point (const_tree cst)
+ {
+   gcc_assert (TREE_CODE (cst) == INTEGER_CST);
+ 
+   return get_or_create_range (cst, cst);
+ }
+ 
+ /* Get the bounded_ranges instance for {[LOWER_BOUND..UPPER_BOUND]},
+    creating it if necessary.  */
+ 
+ const bounded_ranges *
+ bounded_ranges_manager::get_or_create_range (const_tree lower_bound,
+ 					     const_tree upper_bound)
+ {
+   gcc_assert (TREE_CODE (lower_bound) == INTEGER_CST);
+   gcc_assert (TREE_CODE (upper_bound) == INTEGER_CST);
+ 
+   return consolidate
+     (new bounded_ranges (bounded_range (lower_bound, upper_bound)));
+ }
+ 
+ /* Get the bounded_ranges instance for the union of OTHERS,
+    creating it if necessary.  */
+ 
+ const bounded_ranges *
+ bounded_ranges_manager::
+ get_or_create_union (const vec <const bounded_ranges *> &others)
+ {
+   auto_vec<bounded_range> ranges;
+   for (const auto &r : others)
+     ranges.safe_splice (r->m_ranges);
+   return consolidate (new bounded_ranges (ranges));
+ }
+ 
+ /* Get the bounded_ranges instance for the intersection of A and B,
+    creating it if necessary.  */
+ 
+ const bounded_ranges *
+ bounded_ranges_manager::get_or_create_intersection (const bounded_ranges *a,
+ 						    const bounded_ranges *b)
+ {
+   auto_vec<bounded_range> ranges;
+   unsigned a_idx = 0;
+   unsigned b_idx = 0;
+   while (a_idx < a->m_ranges.length ()
+ 	 && b_idx < b->m_ranges.length ())
+     {
+       const bounded_range &r_a = a->m_ranges[a_idx];
+       const bounded_range &r_b = b->m_ranges[b_idx];
+ 
+       bounded_range intersection (NULL_TREE, NULL_TREE);
+       if (r_a.intersects_p (r_b, &intersection))
+ 	{
+ 	  ranges.safe_push (intersection);
+ 	}
+       if (tree_int_cst_lt (r_a.m_lower, r_b.m_lower))
+ 	{
+ 	  a_idx++;
+ 	}
+       else
+ 	{
+ 	  if (tree_int_cst_lt (r_a.m_upper, r_b.m_upper))
+ 	    a_idx++;
+ 	  else
+ 	    b_idx++;
+ 	}
+     }
+ 
+   return consolidate (new bounded_ranges (ranges));
+ }
+ 
+ /* Get the bounded_ranges instance for the inverse of OTHER relative
+    to TYPE, creating it if necessary.
+    This is for use when handling "default" in switch statements, where
+    OTHER represents all the other cases.  */
+ 
+ const bounded_ranges *
+ bounded_ranges_manager::get_or_create_inverse (const bounded_ranges *other,
+ 					       tree type)
+ {
+   tree min_val = TYPE_MIN_VALUE (type);
+   tree max_val = TYPE_MAX_VALUE (type);
+   if (other->m_ranges.length () == 0)
+     return get_or_create_range (min_val, max_val);
+   auto_vec<bounded_range> ranges;
+   tree first_lb = other->m_ranges[0].m_lower;
+   if (tree_int_cst_lt (min_val, first_lb)
+       && can_minus_one_p (first_lb))
+     ranges.safe_push (bounded_range (min_val,
+ 				     minus_one (first_lb)));
+   for (unsigned i = 1; i < other->m_ranges.length (); i++)
+     {
+       tree prev_ub = other->m_ranges[i - 1].m_upper;
+       tree iter_lb = other->m_ranges[i].m_lower;
+       gcc_assert (tree_int_cst_lt (prev_ub, iter_lb));
+       if (can_plus_one_p (prev_ub) && can_minus_one_p (iter_lb))
+ 	ranges.safe_push (bounded_range (plus_one (prev_ub),
+ 					 minus_one (iter_lb)));
+     }
+   tree last_ub
+     = other->m_ranges[other->m_ranges.length () - 1].m_upper;
+   if (tree_int_cst_lt (last_ub, max_val)
+       && can_plus_one_p (last_ub))
+     ranges.safe_push (bounded_range (plus_one (last_ub), max_val));
+ 
+   return consolidate (new bounded_ranges (ranges));
+ }
+ 
+ /* If an object equal to INST is already present, delete INST and
+    return the existing object.
+    Otherwise add INST and return it.  */
+ 
+ const bounded_ranges *
+ bounded_ranges_manager::consolidate (bounded_ranges *inst)
+ {
+   if (bounded_ranges **slot = m_map.get (inst))
+     {
+       delete inst;
+       return *slot;
+     }
+   m_map.put (inst, inst);
+   return inst;
+ }
+ 
+ /* Get the bounded_ranges instance for EDGE of SWITCH_STMT,
+    creating it if necessary, and caching it by edge.  */
+ 
+ const bounded_ranges *
+ bounded_ranges_manager::
+ get_or_create_ranges_for_switch (const switch_cfg_superedge *edge,
+ 				 const gswitch *switch_stmt)
+ {
+   /* Look in per-edge cache.  */
+   if (const bounded_ranges ** slot = m_edge_cache.get (edge))
+     return *slot;
+ 
+   /* Not yet in cache.  */
+   const bounded_ranges *all_cases_ranges
+     = create_ranges_for_switch (*edge, switch_stmt);
+   m_edge_cache.put (edge, all_cases_ranges);
+   return all_cases_ranges;
+ }
+ 
+ /* Get the bounded_ranges instance for EDGE of SWITCH_STMT,
+    creating it if necessary, for edges for which the per-edge
+    cache has not yet been populated.  */
+ 
+ const bounded_ranges *
+ bounded_ranges_manager::
+ create_ranges_for_switch (const switch_cfg_superedge &edge,
+ 			  const gswitch *switch_stmt)
+ {
+   /* Get the ranges for each case label.  */
+   auto_vec <const bounded_ranges *> case_ranges_vec
+     (gimple_switch_num_labels (switch_stmt));
+ 
+   for (tree case_label : edge.get_case_labels ())
+     {
+       /* Get the ranges for this case label.  */
+       const bounded_ranges *case_ranges
+ 	= make_case_label_ranges (switch_stmt, case_label);
+       case_ranges_vec.quick_push (case_ranges);
+     }
+ 
+   /* Combine all the ranges for each case label into a single collection
+      of ranges.  */
+   const bounded_ranges *all_cases_ranges
+     = get_or_create_union (case_ranges_vec);
+   return all_cases_ranges;
+ }
+ 
+ /* Get the bounded_ranges instance for CASE_LABEL within
+    SWITCH_STMT.  */
+ 
+ const bounded_ranges *
+ bounded_ranges_manager::
+ make_case_label_ranges (const gswitch *switch_stmt,
+ 			tree case_label)
+ {
+   gcc_assert (TREE_CODE (case_label) == CASE_LABEL_EXPR);
+   tree lower_bound = CASE_LOW (case_label);
+   tree upper_bound = CASE_HIGH (case_label);
+   if (lower_bound)
+     {
+       if (upper_bound)
+ 	/* Range.  */
+ 	return get_or_create_range (lower_bound, upper_bound);
+       else
+ 	/* Single-value.  */
+ 	return get_or_create_point (lower_bound);
+     }
+   else
+     {
+       /* The default case.
+ 	 Add exclusions based on the other cases.  */
+       auto_vec <const bounded_ranges *> other_case_ranges
+ 	(gimple_switch_num_labels (switch_stmt));
+       for (unsigned other_idx = 1;
+ 	   other_idx < gimple_switch_num_labels (switch_stmt);
+ 	   other_idx++)
+ 	{
+ 	  tree other_label = gimple_switch_label (switch_stmt,
+ 						  other_idx);
+ 	  const bounded_ranges *other_ranges
+ 	    = make_case_label_ranges (switch_stmt, other_label);
+ 	  other_case_ranges.quick_push (other_ranges);
+ 	}
+       const bounded_ranges *other_cases_ranges
+ 	= get_or_create_union (other_case_ranges);
+       tree type = TREE_TYPE (gimple_switch_index (switch_stmt));
+       return get_or_create_inverse (other_cases_ranges, type);
+     }
+ }
+ 
+ /* Dump the number of objects of each class that were managed by this
+    manager to LOGGER.
+    If SHOW_OBJS is true, also dump the objects themselves.  */
+ 
+ void
+ bounded_ranges_manager::log_stats (logger *logger, bool show_objs) const
+ {
+   LOG_SCOPE (logger);
+   logger->log ("  # %s: %li", "ranges", (long)m_map.elements ());
+   if (!show_objs)
+     return;
+ 
+   auto_vec<const bounded_ranges *> vec_objs (m_map.elements ());
+   for (const auto &iter : m_map)
+     vec_objs.quick_push (iter.second);
+   vec_objs.qsort
+     ([](const void *p1, const void *p2) -> int
+      {
+        const bounded_ranges *br1 = *(const bounded_ranges * const *)p1;
+        const bounded_ranges *br2 = *(const bounded_ranges * const *)p2;
+        return bounded_ranges::cmp (br1, br2);
+      });
+ 
+   for (const auto &iter : vec_objs)
+     {
+       logger->start_log_line ();
+       pretty_printer *pp = logger->get_printer ();
+       pp_string (pp, "    ");
+       iter->dump_to_pp (pp, true);
+       logger->end_log_line ();
+     }
+ }
+ 
  /* class equiv_class.  */
  
  /* equiv_class's default ctor.  */
*************** equiv_class::equiv_class (const equiv_cl
*** 270,278 ****
  : m_constant (other.m_constant), m_cst_sval (other.m_cst_sval),
    m_vars (other.m_vars.length ())
  {
!   int i;
!   const svalue *sval;
!   FOR_EACH_VEC_ELT (other.m_vars, i, sval)
      m_vars.quick_push (sval);
  }
  
--- 1071,1077 ----
  : m_constant (other.m_constant), m_cst_sval (other.m_cst_sval),
    m_vars (other.m_vars.length ())
  {
!   for (const svalue *sval : other.m_vars)
      m_vars.quick_push (sval);
  }
  
*************** equiv_class::to_json () const
*** 310,318 ****
    json::object *ec_obj = new json::object ();
  
    json::array *sval_arr = new json::array ();
!   int i;
!   const svalue *sval;
!   FOR_EACH_VEC_ELT (m_vars, i, sval)
      sval_arr->append (sval->to_json ());
    ec_obj->set ("svals", sval_arr);
  
--- 1109,1115 ----
    json::object *ec_obj = new json::object ();
  
    json::array *sval_arr = new json::array ();
!   for (const svalue *sval : m_vars)
      sval_arr->append (sval->to_json ());
    ec_obj->set ("svals", sval_arr);
  
*************** equiv_class::hash () const
*** 337,345 ****
    inchash::hash hstate;
  
    inchash::add_expr (m_constant, hstate);
!   int i;
!   const svalue *sval;
!   FOR_EACH_VEC_ELT (m_vars, i, sval)
      hstate.add_ptr (sval);
    return hstate.end ();
  }
--- 1134,1140 ----
    inchash::hash hstate;
  
    inchash::add_expr (m_constant, hstate);
!   for (const svalue * sval : m_vars)
      hstate.add_ptr (sval);
    return hstate.end ();
  }
*************** equiv_class::canonicalize ()
*** 431,436 ****
--- 1226,1255 ----
    m_vars.qsort (svalue::cmp_ptr_ptr);
  }
  
+ /* Return true if this EC contains a variable, false if it merely
+    contains constants.
+    Subroutine of constraint_manager::canonicalize, for removing
+    redundant ECs.  */
+ 
+ bool
+ equiv_class::contains_non_constant_p () const
+ {
+   if (m_constant)
+     {
+       for (auto iter : m_vars)
+ 	if (iter->maybe_get_constant ())
+ 	  continue;
+ 	else
+ 	  /* We have {non-constant == constant}.  */
+ 	  return true;
+       /* We only have constants.  */
+       return false;
+     }
+   else
+     /* Return true if we have {non-constant == non-constant}.  */
+     return m_vars.length () > 1;
+ }
+ 
  /* Get a debug string for C_OP.  */
  
  const char *
*************** constraint::implied_by (const constraint
*** 582,587 ****
--- 1401,1449 ----
    return false;
  }
  
+ /* class bounded_ranges_constraint.  */
+ 
+ void
+ bounded_ranges_constraint::print (pretty_printer *pp,
+ 				  const constraint_manager &cm) const
+ {
+   m_ec_id.print (pp);
+   pp_string (pp, ": ");
+   m_ec_id.get_obj (cm).print (pp);
+   pp_string (pp, ": ");
+   m_ranges->dump_to_pp (pp, true);
+ }
+ 
+ json::object *
+ bounded_ranges_constraint::to_json () const
+ {
+   json::object *con_obj = new json::object ();
+ 
+   con_obj->set ("ec", new json::integer_number (m_ec_id.as_int ()));
+   con_obj->set ("ranges", m_ranges->to_json ());
+ 
+   return con_obj;
+ }
+ 
+ bool
+ bounded_ranges_constraint::
+ operator== (const bounded_ranges_constraint &other) const
+ {
+   if (m_ec_id != other.m_ec_id)
+     return false;
+ 
+   /* We can compare by pointer, since the bounded_ranges_manager
+      consolidates instances.  */
+   return m_ranges == other.m_ranges;
+ }
+ 
+ void
+ bounded_ranges_constraint::add_to_hash (inchash::hash *hstate) const
+ {
+   hstate->add_int (m_ec_id.m_idx);
+   hstate->merge_hash (m_ranges->get_hash ());
+ }
+ 
  /* class equiv_class_id.  */
  
  /* Get the underlying equiv_class for this ID from CM.  */
*************** equiv_class_id::print (pretty_printer *p
*** 618,623 ****
--- 1480,1486 ----
  constraint_manager::constraint_manager (const constraint_manager &other)
  : m_equiv_classes (other.m_equiv_classes.length ()),
    m_constraints (other.m_constraints.length ()),
+   m_bounded_ranges_constraints (other.m_bounded_ranges_constraints.length ()),
    m_mgr (other.m_mgr)
  {
    int i;
*************** constraint_manager::constraint_manager (
*** 627,632 ****
--- 1490,1497 ----
    constraint *c;
    FOR_EACH_VEC_ELT (other.m_constraints, i, c)
      m_constraints.quick_push (*c);
+   for (const auto &iter : other.m_bounded_ranges_constraints)
+     m_bounded_ranges_constraints.quick_push (iter);
  }
  
  /* constraint_manager's assignment operator.  */
*************** constraint_manager::operator= (const con
*** 636,641 ****
--- 1501,1507 ----
  {
    gcc_assert (m_equiv_classes.length () == 0);
    gcc_assert (m_constraints.length () == 0);
+   gcc_assert (m_bounded_ranges_constraints.length () == 0);
  
    int i;
    equiv_class *ec;
*************** constraint_manager::operator= (const con
*** 646,651 ****
--- 1512,1519 ----
    m_constraints.reserve (other.m_constraints.length ());
    FOR_EACH_VEC_ELT (other.m_constraints, i, c)
      m_constraints.quick_push (*c);
+   for (const auto &iter : other.m_bounded_ranges_constraints)
+     m_bounded_ranges_constraints.quick_push (iter);
  
    return *this;
  }
*************** constraint_manager::hash () const
*** 664,669 ****
--- 1532,1539 ----
      hstate.merge_hash (ec->hash ());
    FOR_EACH_VEC_ELT (m_constraints, i, c)
      hstate.merge_hash (c->hash ());
+   for (const auto &iter : m_bounded_ranges_constraints)
+     iter.add_to_hash (&hstate);
    return hstate.end ();
  }
  
*************** constraint_manager::operator== (const co
*** 676,681 ****
--- 1546,1554 ----
      return false;
    if (m_constraints.length () != other.m_constraints.length ())
      return false;
+   if (m_bounded_ranges_constraints.length ()
+       != other.m_bounded_ranges_constraints.length ())
+     return false;
  
    int i;
    equiv_class *ec;
*************** constraint_manager::operator== (const co
*** 690,695 ****
--- 1563,1575 ----
      if (!(*c == other.m_constraints[i]))
        return false;
  
+   for (unsigned i = 0; i < m_bounded_ranges_constraints.length (); i++)
+     {
+       if (m_bounded_ranges_constraints[i]
+ 	  != other.m_bounded_ranges_constraints[i])
+ 	return false;
+     }
+ 
    return true;
  }
  
*************** constraint_manager::print (pretty_printe
*** 717,722 ****
--- 1597,1614 ----
  	pp_string (pp, " && ");
        c->print (pp, *this);
      }
+   if (m_bounded_ranges_constraints.length ())
+     {
+       pp_string (pp, "  |  ");
+       i = 0;
+       for (const auto &iter : m_bounded_ranges_constraints)
+ 	{
+ 	  if (i > 0)
+ 	    pp_string (pp, " && ");
+ 	  iter.print (pp, *this);
+ 	  i++;
+ 	}
+     }
    pp_printf (pp, "}");
  }
  
*************** constraint_manager::dump_to_pp (pretty_p
*** 768,773 ****
--- 1660,1689 ----
      }
    if (!multiline)
      pp_string (pp, "}");
+   if (m_bounded_ranges_constraints.length ())
+     {
+       if (multiline)
+ 	pp_string (pp, "  ");
+       pp_string (pp, "ranges:");
+       if (multiline)
+ 	pp_newline (pp);
+       else
+ 	pp_string (pp, "{");
+       i = 0;
+       for (const auto &iter : m_bounded_ranges_constraints)
+ 	{
+ 	  if (multiline)
+ 	    pp_string (pp, "    ");
+ 	  else if (i > 0)
+ 	    pp_string (pp, " && ");
+ 	  iter.print (pp, *this);
+ 	  if (multiline)
+ 	    pp_newline (pp);
+ 	  i++;
+ 	}
+       if (!multiline)
+ 	pp_string (pp, "}");
+       }
  }
  
  /* Dump a multiline representation of this constraint_manager to FP.  */
*************** constraint_manager::to_json () const
*** 811,819 ****
    /* Equivalence classes.  */
    {
      json::array *ec_arr = new json::array ();
!     int i;
!     equiv_class *ec;
!     FOR_EACH_VEC_ELT (m_equiv_classes, i, ec)
        ec_arr->append (ec->to_json ());
      cm_obj->set ("ecs", ec_arr);
    }
--- 1727,1733 ----
    /* Equivalence classes.  */
    {
      json::array *ec_arr = new json::array ();
!     for (const equiv_class *ec : m_equiv_classes)
        ec_arr->append (ec->to_json ());
      cm_obj->set ("ecs", ec_arr);
    }
*************** constraint_manager::to_json () const
*** 821,833 ****
    /* Constraints.  */
    {
      json::array *con_arr = new json::array ();
!     int i;
!     constraint *c;
!     FOR_EACH_VEC_ELT (m_constraints, i, c)
!       con_arr->append (c->to_json ());
      cm_obj->set ("constraints", con_arr);
    }
  
    return cm_obj;
  }
  
--- 1735,1753 ----
    /* Constraints.  */
    {
      json::array *con_arr = new json::array ();
!     for (const constraint &c : m_constraints)
!       con_arr->append (c.to_json ());
      cm_obj->set ("constraints", con_arr);
    }
  
+   /* m_bounded_ranges_constraints.  */
+   {
+     json::array *con_arr = new json::array ();
+     for (const auto &c : m_bounded_ranges_constraints)
+       con_arr->append (c.to_json ());
+     cm_obj->set ("bounded_ranges_constraints", con_arr);
+   }
+ 
    return cm_obj;
  }
  
*************** constraint_manager::add_constraint (cons
*** 843,851 ****
    lhs = lhs->unwrap_any_unmergeable ();
    rhs = rhs->unwrap_any_unmergeable ();
  
!   /* Nothing can be known about unknown values.  */
!   if (lhs->get_kind () == SK_UNKNOWN
!       || rhs->get_kind () == SK_UNKNOWN)
      /* Not a contradiction.  */
      return true;
  
--- 1763,1771 ----
    lhs = lhs->unwrap_any_unmergeable ();
    rhs = rhs->unwrap_any_unmergeable ();
  
!   /* Nothing can be known about unknown/poisoned values.  */
!   if (!lhs->can_have_associated_state_p ()
!       || !rhs->can_have_associated_state_p ())
      /* Not a contradiction.  */
      return true;
  
*************** constraint_manager::add_constraint (cons
*** 879,884 ****
--- 1799,1829 ----
        return false;
    }
  
+   /* If adding
+        (SVAL + OFFSET) > CST,
+      then that can imply:
+        SVAL > (CST - OFFSET).  */
+   if (const binop_svalue *lhs_binop = lhs->dyn_cast_binop_svalue ())
+     if (tree rhs_cst = rhs->maybe_get_constant ())
+       if (tree offset = lhs_binop->get_arg1 ()->maybe_get_constant ())
+ 	if ((op == GT_EXPR || op == LT_EXPR
+ 	     || op == GE_EXPR || op == LE_EXPR)
+ 	    && lhs_binop->get_op () == PLUS_EXPR)
+ 	  {
+ 	    tree offset_of_cst = fold_build2 (MINUS_EXPR, TREE_TYPE (rhs_cst),
+ 					      rhs_cst, offset);
+ 	    const svalue *implied_lhs = lhs_binop->get_arg0 ();
+ 	    enum tree_code implied_op = op;
+ 	    const svalue *implied_rhs
+ 	      = m_mgr->get_or_create_constant_svalue (offset_of_cst);
+ 	    if (!add_constraint (implied_lhs, implied_op, implied_rhs))
+ 	      return false;
+ 	    /* The above add_constraint could lead to EC merger, so we need
+ 	       to refresh the EC IDs.  */
+ 	    lhs_ec_id = get_or_add_equiv_class (lhs);
+ 	    rhs_ec_id = get_or_add_equiv_class (rhs);
+ 	  }
+ 
    add_unknown_constraint (lhs_ec_id, op, rhs_ec_id);
    return true;
  }
*************** constraint_manager::add_unknown_constrai
*** 946,951 ****
--- 1891,1898 ----
  	if (final_ec != old_ec)
  	  m_equiv_classes[rhs_ec_id.m_idx] = final_ec;
  	delete old_ec;
+ 	if (lhs_ec_id == final_ec_id)
+ 	  lhs_ec_id = rhs_ec_id;
  
  	/* Update the constraints.  */
  	constraint *c;
*************** constraint_manager::add_unknown_constrai
*** 965,970 ****
--- 1912,1925 ----
  	    if (c->m_rhs == final_ec_id)
  	      c->m_rhs = rhs_ec_id;
  	  }
+ 	bounded_ranges_constraint *brc;
+ 	FOR_EACH_VEC_ELT (m_bounded_ranges_constraints, i, brc)
+ 	  {
+ 	    if (brc->m_ec_id == rhs_ec_id)
+ 	      brc->m_ec_id = lhs_ec_id;
+ 	    if (brc->m_ec_id == final_ec_id)
+ 	      brc->m_ec_id = rhs_ec_id;
+ 	  }
  
  	/* We may now have self-comparisons due to the merger; these
  	   constraints should be removed.  */
*************** constraint_manager::add_constraint_inter
*** 1018,1023 ****
--- 1973,1980 ----
    /* Add the constraint.  */
    m_constraints.safe_push (new_c);
  
+   /* We don't yet update m_bounded_ranges_constraints here yet.  */
+ 
    if (!flag_analyzer_transitivity)
      return;
  
*************** constraint_manager::add_constraint_inter
*** 1151,1156 ****
--- 2108,2187 ----
      }
  }
  
+ /* Attempt to add the constraint that SVAL is within RANGES to this
+    constraint_manager.
+ 
+    Return true if the constraint was successfully added (or is already
+    known to be true).
+    Return false if the constraint contradicts existing knowledge.  */
+ 
+ bool
+ constraint_manager::add_bounded_ranges (const svalue *sval,
+ 					const bounded_ranges *ranges)
+ {
+   sval = sval->unwrap_any_unmergeable ();
+ 
+   /* Nothing can be known about unknown/poisoned values.  */
+   if (!sval->can_have_associated_state_p ())
+     /* Not a contradiction.  */
+     return true;
+ 
+   /* If SVAL is a constant, then we can look at RANGES directly.  */
+   if (tree cst = sval->maybe_get_constant ())
+     {
+       /* If the ranges contain CST, then it's a successful no-op;
+ 	 otherwise it's a contradiction.  */
+       return ranges->contain_p (cst);
+     }
+ 
+   equiv_class_id ec_id = get_or_add_equiv_class (sval);
+ 
+   /* If the EC has a constant, it's either true or false.  */
+   const equiv_class &ec = ec_id.get_obj (*this);
+   if (tree ec_cst = ec.get_any_constant ())
+     {
+       if (ranges->contain_p (ec_cst))
+ 	/* We already have SVAL == EC_CST, within RANGES, so
+ 	   we can discard RANGES and succeed.  */
+ 	return true;
+       else
+ 	/* We already have SVAL == EC_CST, not within RANGES, so
+ 	   we can reject RANGES as a contradiction.  */
+ 	return false;
+     }
+ 
+   /* We have at most one per ec_id.  */
+   /* Iterate through each range in RANGES.  */
+   for (auto iter : m_bounded_ranges_constraints)
+     {
+       if (iter.m_ec_id == ec_id)
+ 	{
+ 	  /* Update with intersection, or fail if empty.  */
+ 	  bounded_ranges_manager *mgr = get_range_manager ();
+ 	  const bounded_ranges *intersection
+ 	    = mgr->get_or_create_intersection (iter.m_ranges, ranges);
+ 	  if (intersection->empty_p ())
+ 	    {
+ 	      /* No intersection; fail.  */
+ 	      return false;
+ 	    }
+ 	  else
+ 	    {
+ 	      /* Update with intersection; succeed.  */
+ 	      iter.m_ranges = intersection;
+ 	      validate ();
+ 	      return true;
+ 	    }
+ 	}
+     }
+   m_bounded_ranges_constraints.safe_push
+     (bounded_ranges_constraint (ec_id, ranges));
+ 
+   validate ();
+ 
+   return true;
+ }
+ 
  /* Look for SVAL within the equivalence classes of this constraint_manager;
     if found, return true, writing the id to *OUT if OUT is non-NULL,
     otherwise return false.  */
*************** constraint_manager::get_or_add_equiv_cla
*** 1185,1198 ****
  {
    equiv_class_id result (-1);
  
!   gcc_assert (sval->get_kind () != SK_UNKNOWN);
  
    /* Convert all NULL pointers to (void *) to avoid state explosions
       involving all of the various (foo *)NULL vs (bar *)NULL.  */
!   if (POINTER_TYPE_P (sval->get_type ()))
!     if (tree cst = sval->maybe_get_constant ())
!       if (zerop (cst))
! 	sval = m_mgr->get_or_create_constant_svalue (null_pointer_node);
  
    /* Try svalue match.  */
    if (get_equiv_class_by_svalue (sval, &result))
--- 2216,2230 ----
  {
    equiv_class_id result (-1);
  
!   gcc_assert (sval->can_have_associated_state_p ());
  
    /* Convert all NULL pointers to (void *) to avoid state explosions
       involving all of the various (foo *)NULL vs (bar *)NULL.  */
!   if (sval->get_type ())
!     if (POINTER_TYPE_P (sval->get_type ()))
!       if (tree cst = sval->maybe_get_constant ())
! 	if (zerop (cst))
! 	  sval = m_mgr->get_or_create_constant_svalue (null_pointer_node);
  
    /* Try svalue match.  */
    if (get_equiv_class_by_svalue (sval, &result))
*************** constraint_manager::eval_condition (equi
*** 1289,1294 ****
--- 2321,2328 ----
  	}
      }
  
+   /* We don't use m_bounded_ranges_constraints here yet.  */
+ 
    return tristate (tristate::TS_UNKNOWN);
  }
  
*************** constraint_manager::get_ec_bounds (equiv
*** 1313,1324 ****
  
  	      case CONSTRAINT_LT:
  		/* We have "EC_ID < OTHER_CST".  */
! 		result.m_upper_bound = bound (other_cst, false);
  		break;
  
  	      case CONSTRAINT_LE:
  		/* We have "EC_ID <= OTHER_CST".  */
! 		result.m_upper_bound = bound (other_cst, true);
  		break;
  	      }
  	}
--- 2347,2358 ----
  
  	      case CONSTRAINT_LT:
  		/* We have "EC_ID < OTHER_CST".  */
! 		result.add_bound (bound (other_cst, false), BK_UPPER);
  		break;
  
  	      case CONSTRAINT_LE:
  		/* We have "EC_ID <= OTHER_CST".  */
! 		result.add_bound (bound (other_cst, true), BK_UPPER);
  		break;
  	      }
  	}
*************** constraint_manager::get_ec_bounds (equiv
*** 1335,1347 ****
  	      case CONSTRAINT_LT:
  		/* We have "OTHER_CST < EC_ID"
  		   i.e. "EC_ID > OTHER_CST".  */
! 		result.m_lower_bound = bound (other_cst, false);
  		break;
  
  	      case CONSTRAINT_LE:
  		/* We have "OTHER_CST <= EC_ID"
  		   i.e. "EC_ID >= OTHER_CST".  */
! 		result.m_lower_bound = bound (other_cst, true);
  		break;
  	      }
  	}
--- 2369,2381 ----
  	      case CONSTRAINT_LT:
  		/* We have "OTHER_CST < EC_ID"
  		   i.e. "EC_ID > OTHER_CST".  */
! 		result.add_bound (bound (other_cst, false), BK_LOWER);
  		break;
  
  	      case CONSTRAINT_LE:
  		/* We have "OTHER_CST <= EC_ID"
  		   i.e. "EC_ID >= OTHER_CST".  */
! 		result.add_bound (bound (other_cst, true), BK_LOWER);
  		break;
  	      }
  	}
*************** constraint_manager::eval_condition (equi
*** 1414,1422 ****
  	    }
  	}
      }
    /* Look at existing bounds on LHS_EC.  */
    range lhs_bounds = get_ec_bounds (lhs_ec);
!   return lhs_bounds.eval_condition (op, rhs_const);
  }
  
  /* Evaluate the condition LHS OP RHS, without modifying this
--- 2448,2470 ----
  	    }
  	}
      }
+ 
+   bounded_ranges_manager *mgr = get_range_manager ();
+   for (const auto &iter : m_bounded_ranges_constraints)
+     if (iter.m_ec_id == lhs_ec)
+       return iter.m_ranges->eval_condition (op, rhs_const, mgr);
+ 
    /* Look at existing bounds on LHS_EC.  */
    range lhs_bounds = get_ec_bounds (lhs_ec);
!   tristate result = lhs_bounds.eval_condition (op, rhs_const);
!   if (result.is_known ())
!     return result;
! 
!   /* Also reject if range::add_bound fails.  */
!   if (!lhs_bounds.add_bound (op, rhs_const))
!     return tristate (false);
! 
!   return tristate::unknown ();
  }
  
  /* Evaluate the condition LHS OP RHS, without modifying this
*************** constraint_manager::purge (const PurgeCr
*** 1562,1567 ****
--- 2610,2638 ----
  		  con_idx++;
  		}
  	    }
+ 
+ 	  /* Update bounded_ranges_constraint instances.  */
+ 	  for (unsigned r_idx = 0;
+ 	       r_idx < m_bounded_ranges_constraints.length (); )
+ 	    {
+ 	      bounded_ranges_constraint *brc
+ 		= &m_bounded_ranges_constraints[r_idx];
+ 
+ 	      /* Remove if it refers to the deleted EC.  */
+ 	      if (brc->m_ec_id == ec_idx)
+ 		{
+ 		  m_bounded_ranges_constraints.ordered_remove (r_idx);
+ 		  if (stats)
+ 		    stats->m_num_bounded_ranges_constraints++;
+ 		}
+ 	      else
+ 		{
+ 		  /* Renumber any EC ids that refer to ECs that have
+ 		     had their idx changed.  */
+ 		  brc->m_ec_id.update_for_removal (ec_idx);
+ 		  r_idx++;
+ 		}
+ 	    }
  	}
        else
  	ec_idx++;
*************** constraint_manager::purge (const PurgeCr
*** 1620,1625 ****
--- 2691,2707 ----
  		  c->m_lhs.update_for_removal (ec_idx);
  		  c->m_rhs.update_for_removal (ec_idx);
  		}
+ 
+ 	      /* Likewise for m_bounded_ranges_constraints.  */
+ 	      for (unsigned r_idx = 0;
+ 		   r_idx < m_bounded_ranges_constraints.length ();
+ 		   r_idx++)
+ 		{
+ 		  bounded_ranges_constraint *brc
+ 		    = &m_bounded_ranges_constraints[r_idx];
+ 		  brc->m_ec_id.update_for_removal (ec_idx);
+ 		}
+ 
  	      continue;
  	    }
  	}
*************** on_liveness_change (const svalue_set &li
*** 1663,1668 ****
--- 2745,2773 ----
    purge (p, NULL);
  }
  
+ class svalue_purger
+ {
+ public:
+   svalue_purger (const svalue *sval) : m_sval (sval) {}
+ 
+   bool should_purge_p (const svalue *sval) const
+   {
+     return sval->involves_p (m_sval);
+   }
+ 
+ private:
+   const svalue *m_sval;
+ };
+ 
+ /* Purge any state involving SVAL.  */
+ 
+ void
+ constraint_manager::purge_state_involving (const svalue *sval)
+ {
+   svalue_purger p (sval);
+   purge (p, NULL);
+ }
+ 
  /* Comparator for use by constraint_manager::canonicalize.
     Sort a pair of equiv_class instances, using the representative
     svalue as a sort key.  */
*************** constraint_manager::canonicalize ()
*** 1738,1743 ****
--- 2843,2851 ----
        used_ecs.add (m_equiv_classes[c->m_rhs.as_int ()]);
      }
  
+   for (const auto &iter : m_bounded_ranges_constraints)
+     used_ecs.add (m_equiv_classes[iter.m_ec_id.as_int ()]);
+ 
    /* Purge unused ECs: those that aren't used by constraints and
       that effectively have only one svalue (either in m_constant
       or in m_vars).  */
*************** constraint_manager::canonicalize ()
*** 1748,1755 ****
        {
  	equiv_class *ec = m_equiv_classes[i];
  	if (!used_ecs.contains (ec)
! 	    && ((ec->m_vars.length () < 2 && ec->m_constant == NULL_TREE)
! 		|| (ec->m_vars.length () == 0)))
  	  {
  	    m_equiv_classes.unordered_remove (i);
  	    delete ec;
--- 2856,2862 ----
        {
  	equiv_class *ec = m_equiv_classes[i];
  	if (!used_ecs.contains (ec)
! 	    && !ec->contains_non_constant_p ())
  	  {
  	    m_equiv_classes.unordered_remove (i);
  	    delete ec;
*************** constraint_manager::canonicalize ()
*** 1778,1783 ****
--- 2885,2893 ----
        ec_id_map.update (&c->m_rhs);
      }
  
+   for (auto &iter : m_bounded_ranges_constraints)
+     ec_id_map.update (&iter.m_ec_id);
+ 
    /* Finally, sort the constraints. */
    m_constraints.qsort (constraint_cmp);
  }
*************** public:
*** 1822,1827 ****
--- 2932,2963 ----
        }
    }
  
+   void on_ranges (const svalue *lhs_sval,
+ 		  const bounded_ranges *ranges) FINAL OVERRIDE
+   {
+     for (const auto &iter : m_cm_b->m_bounded_ranges_constraints)
+       {
+ 	const equiv_class &ec_rhs = iter.m_ec_id.get_obj (*m_cm_b);
+ 	for (unsigned i = 0; i < ec_rhs.m_vars.length (); i++)
+ 	  {
+ 	    const svalue *rhs_sval = ec_rhs.m_vars[i];
+ 	    if (lhs_sval == rhs_sval)
+ 	      {
+ 		/* Union of the two ranges.  */
+ 		auto_vec <const bounded_ranges *> pair (2);
+ 		pair.quick_push (ranges);
+ 		pair.quick_push (iter.m_ranges);
+ 		bounded_ranges_manager *ranges_mgr
+ 		  = m_cm_b->get_range_manager ();
+ 		const bounded_ranges *union_
+ 		  = ranges_mgr->get_or_create_union (pair);
+ 		bool sat = m_out->add_bounded_ranges (lhs_sval, union_);
+ 		gcc_assert (sat);
+ 	      }
+ 	  }
+       }
+   }
+ 
  private:
    const constraint_manager *m_cm_b;
    constraint_manager *m_out;
*************** constraint_manager::for_each_fact (fact_
*** 1895,1900 ****
--- 3031,3046 ----
  	    visitor->on_fact (ec_lhs.m_vars[i], code, ec_rhs.m_vars[j]);
  	}
      }
+ 
+   for (const auto &iter : m_bounded_ranges_constraints)
+     {
+       const equiv_class &ec_lhs = iter.m_ec_id.get_obj (*this);
+       for (unsigned i = 0; i < ec_lhs.m_vars.length (); i++)
+ 	{
+ 	  const svalue *lhs_sval = ec_lhs.m_vars[i];
+ 	  visitor->on_ranges (lhs_sval, iter.m_ranges);
+ 	}
+     }
  }
  
  /* Assert that this object is valid.  */
*************** constraint_manager::validate () const
*** 1932,1943 ****
    FOR_EACH_VEC_ELT (m_constraints, i, c)
      {
        gcc_assert (!c->m_lhs.null_p ());
!       gcc_assert (c->m_lhs.as_int () <= (int)m_equiv_classes.length ());
        gcc_assert (!c->m_rhs.null_p ());
!       gcc_assert (c->m_rhs.as_int () <= (int)m_equiv_classes.length ());
      }
  }
  
  #if CHECKING_P
  
  namespace selftest {
--- 3078,3101 ----
    FOR_EACH_VEC_ELT (m_constraints, i, c)
      {
        gcc_assert (!c->m_lhs.null_p ());
!       gcc_assert (c->m_lhs.as_int () < (int)m_equiv_classes.length ());
        gcc_assert (!c->m_rhs.null_p ());
!       gcc_assert (c->m_rhs.as_int () < (int)m_equiv_classes.length ());
!     }
! 
!   for (const auto &iter : m_bounded_ranges_constraints)
!     {
!       gcc_assert (!iter.m_ec_id.null_p ());
!       gcc_assert (iter.m_ec_id.as_int () < (int)m_equiv_classes.length ());
      }
  }
  
+ bounded_ranges_manager *
+ constraint_manager::get_range_manager () const
+ {
+   return m_mgr->get_range_manager ();
+ }
+ 
  #if CHECKING_P
  
  namespace selftest {
*************** namespace selftest {
*** 1946,1951 ****
--- 3104,3152 ----
     These have to be written in terms of a region_model, since
     the latter is responsible for managing svalue instances.  */
  
+ /* Verify that range::add_bound works as expected.  */
+ 
+ static void
+ test_range ()
+ {
+   tree int_0 = build_int_cst (integer_type_node, 0);
+   tree int_1 = build_int_cst (integer_type_node, 1);
+   tree int_2 = build_int_cst (integer_type_node, 2);
+   tree int_5 = build_int_cst (integer_type_node, 5);
+ 
+   {
+     range r;
+     ASSERT_FALSE (r.constrained_to_single_element ());
+ 
+     /* (r >= 1).  */
+     ASSERT_TRUE (r.add_bound (GE_EXPR, int_1));
+ 
+     /* Redundant.  */
+     ASSERT_TRUE (r.add_bound (GE_EXPR, int_0));
+     ASSERT_TRUE (r.add_bound (GT_EXPR, int_0));
+ 
+     ASSERT_FALSE (r.constrained_to_single_element ());
+ 
+     /* Contradiction.  */
+     ASSERT_FALSE (r.add_bound (LT_EXPR, int_1));
+ 
+     /* (r < 5).  */
+     ASSERT_TRUE (r.add_bound (LT_EXPR, int_5));
+     ASSERT_FALSE (r.constrained_to_single_element ());
+ 
+     /* Contradiction.  */
+     ASSERT_FALSE (r.add_bound (GE_EXPR, int_5));
+ 
+     /* (r < 2).  */
+     ASSERT_TRUE (r.add_bound (LT_EXPR, int_2));
+     ASSERT_TRUE (r.constrained_to_single_element ());
+ 
+     /* Redundant.  */
+     ASSERT_TRUE (r.add_bound (LE_EXPR, int_1));
+     ASSERT_TRUE (r.constrained_to_single_element ());
+   }
+ }
+ 
  /* Verify that setting and getting simple conditions within a region_model
     work (thus exercising the underlying constraint_manager).  */
  
*************** test_transitivity ()
*** 2408,2413 ****
--- 3609,3615 ----
  static void
  test_constant_comparisons ()
  {
+   tree int_1 = build_int_cst (integer_type_node, 1);
    tree int_3 = build_int_cst (integer_type_node, 3);
    tree int_4 = build_int_cst (integer_type_node, 4);
    tree int_5 = build_int_cst (integer_type_node, 5);
*************** test_constant_comparisons ()
*** 2418,2423 ****
--- 3620,3627 ----
    tree a = build_global_decl ("a", integer_type_node);
    tree b = build_global_decl ("b", integer_type_node);
  
+   tree a_plus_one = build2 (PLUS_EXPR, integer_type_node, a, int_1);
+ 
    /* Given a >= 1024, then a <= 1023 should be impossible.  */
    {
      region_model_manager mgr;
*************** test_constant_comparisons ()
*** 2518,2523 ****
--- 3722,3789 ----
      ASSERT_CONDITION_UNKNOWN (model, f, EQ_EXPR, float_4);
      ASSERT_CONDITION_UNKNOWN (model, f, EQ_EXPR, int_4);
    }
+ 
+   /* "a > 3 && a <= 3" should be impossible.  */
+   {
+     region_model_manager mgr;
+     region_model model (&mgr);
+     ADD_SAT_CONSTRAINT (model, a, GT_EXPR, int_3);
+     ADD_UNSAT_CONSTRAINT (model, a, LE_EXPR, int_3);
+   }
+ 
+   /* "(a + 1) > 3 && a < 3" should be impossible.  */
+   {
+     region_model_manager mgr;
+     {
+       region_model model (&mgr);
+       ADD_SAT_CONSTRAINT (model, a_plus_one, GT_EXPR, int_3);
+       ADD_UNSAT_CONSTRAINT (model, a, LT_EXPR, int_3);
+     }
+     {
+       region_model model (&mgr);
+       ADD_SAT_CONSTRAINT (model, a, LT_EXPR, int_3);
+       ADD_UNSAT_CONSTRAINT (model, a_plus_one, GT_EXPR, int_3);
+     }
+   }
+ 
+   /* "3 < a < 4" should be impossible for integer a.  */
+   {
+     region_model_manager mgr;
+     {
+       region_model model (&mgr);
+       ADD_SAT_CONSTRAINT (model, int_3, LT_EXPR, a);
+       ADD_UNSAT_CONSTRAINT (model, a, LT_EXPR, int_4);
+     }
+     {
+       region_model model (&mgr);
+       ADD_SAT_CONSTRAINT (model, int_1, LT_EXPR, a);
+       ADD_SAT_CONSTRAINT (model, int_3, LT_EXPR, a);
+       ADD_SAT_CONSTRAINT (model, a, LT_EXPR, int_5);
+       ADD_UNSAT_CONSTRAINT (model, a, LT_EXPR, int_4);
+     }
+     {
+       region_model model (&mgr);
+       ADD_SAT_CONSTRAINT (model, int_1, LT_EXPR, a);
+       ADD_SAT_CONSTRAINT (model, a, LT_EXPR, int_5);
+       ADD_SAT_CONSTRAINT (model, int_3, LT_EXPR, a);
+       ADD_UNSAT_CONSTRAINT (model, a, LT_EXPR, int_4);
+     }
+     {
+       region_model model (&mgr);
+       ADD_SAT_CONSTRAINT (model, a, LT_EXPR, int_4);
+       ADD_UNSAT_CONSTRAINT (model, int_3, LT_EXPR, a);
+     }
+     {
+       region_model model (&mgr);
+       ADD_SAT_CONSTRAINT (model, a, GT_EXPR, int_3);
+       ADD_UNSAT_CONSTRAINT (model, int_4, GT_EXPR, a);
+     }
+     {
+       region_model model (&mgr);
+       ADD_SAT_CONSTRAINT (model, int_4, GT_EXPR, a);
+       ADD_UNSAT_CONSTRAINT (model, a, GT_EXPR, int_3);
+     }
+   }
  }
  
  /* Verify various lower-level implementation details about
*************** test_many_constants ()
*** 2683,2688 ****
--- 3949,4387 ----
      }
  }
  
+ /* Verify that purging state relating to a variable doesn't leave stray
+    equivalence classes (after canonicalization).  */
+ 
+ static void
+ test_purging (void)
+ {
+   tree int_0 = build_int_cst (integer_type_node, 0);
+   tree a = build_global_decl ("a", integer_type_node);
+   tree b = build_global_decl ("b", integer_type_node);
+ 
+   /*  "a != 0".  */
+   {
+     region_model_manager mgr;
+     region_model model (&mgr);
+     ADD_SAT_CONSTRAINT (model, a, NE_EXPR, int_0);
+     ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 2);
+     ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 1);
+ 
+     /* Purge state for "a".  */
+     const svalue *sval_a = model.get_rvalue (a, NULL);
+     model.purge_state_involving (sval_a, NULL);
+     model.canonicalize ();
+     /* We should have an empty constraint_manager.  */
+     ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 0);
+     ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 0);
+   }
+ 
+   /*  "a != 0" && "b != 0".  */
+   {
+     region_model_manager mgr;
+     region_model model (&mgr);
+     ADD_SAT_CONSTRAINT (model, a, NE_EXPR, int_0);
+     ADD_SAT_CONSTRAINT (model, b, NE_EXPR, int_0);
+     ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 3);
+     ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 2);
+ 
+     /* Purge state for "a".  */
+     const svalue *sval_a = model.get_rvalue (a, NULL);
+     model.purge_state_involving (sval_a, NULL);
+     model.canonicalize ();
+     /* We should just have the constraint/ECs involving b != 0.  */
+     ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 2);
+     ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 1);
+     ASSERT_CONDITION_TRUE (model, b, NE_EXPR, int_0);
+   }
+ 
+   /*  "a != 0" && "b == 0".  */
+   {
+     region_model_manager mgr;
+     region_model model (&mgr);
+     ADD_SAT_CONSTRAINT (model, a, NE_EXPR, int_0);
+     ADD_SAT_CONSTRAINT (model, b, EQ_EXPR, int_0);
+     ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 2);
+     ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 1);
+ 
+     /* Purge state for "a".  */
+     const svalue *sval_a = model.get_rvalue (a, NULL);
+     model.purge_state_involving (sval_a, NULL);
+     model.canonicalize ();
+     /* We should just have the EC involving b == 0.  */
+     ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 1);
+     ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 0);
+     ASSERT_CONDITION_TRUE (model, b, EQ_EXPR, int_0);
+   }
+ 
+   /*  "a == 0".  */
+   {
+     region_model_manager mgr;
+     region_model model (&mgr);
+     ADD_SAT_CONSTRAINT (model, a, EQ_EXPR, int_0);
+     ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 1);
+     ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 0);
+ 
+     /* Purge state for "a".  */
+     const svalue *sval_a = model.get_rvalue (a, NULL);
+     model.purge_state_involving (sval_a, NULL);
+     model.canonicalize ();
+     /* We should have an empty constraint_manager.  */
+     ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 0);
+     ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 0);
+   }
+ 
+   /*  "a == 0" && "b != 0".  */
+   {
+     region_model_manager mgr;
+     region_model model (&mgr);
+     ADD_SAT_CONSTRAINT (model, a, EQ_EXPR, int_0);
+     ADD_SAT_CONSTRAINT (model, b, NE_EXPR, int_0);
+     ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 2);
+     ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 1);
+ 
+     /* Purge state for "a".  */
+     const svalue *sval_a = model.get_rvalue (a, NULL);
+     model.purge_state_involving (sval_a, NULL);
+     model.canonicalize ();
+     /* We should just have the constraint/ECs involving b != 0.  */
+     ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 2);
+     ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 1);
+     ASSERT_CONDITION_TRUE (model, b, NE_EXPR, int_0);
+   }
+ 
+   /*  "a == 0" && "b == 0".  */
+   {
+     region_model_manager mgr;
+     region_model model (&mgr);
+     ADD_SAT_CONSTRAINT (model, a, EQ_EXPR, int_0);
+     ADD_SAT_CONSTRAINT (model, b, EQ_EXPR, int_0);
+     ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 1);
+     ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 0);
+ 
+     /* Purge state for "a".  */
+     const svalue *sval_a = model.get_rvalue (a, NULL);
+     model.purge_state_involving (sval_a, NULL);
+     model.canonicalize ();
+     /* We should just have the EC involving b == 0.  */
+     ASSERT_EQ (model.get_constraints ()->m_equiv_classes.length (), 1);
+     ASSERT_EQ (model.get_constraints ()->m_constraints.length (), 0);
+     ASSERT_CONDITION_TRUE (model, b, EQ_EXPR, int_0);
+   }
+ }
+ 
+ /* Implementation detail of ASSERT_DUMP_BOUNDED_RANGES_EQ.  */
+ 
+ static void
+ assert_dump_bounded_range_eq (const location &loc,
+ 			      const bounded_range &range,
+ 			      const char *expected)
+ {
+   auto_fix_quotes sentinel;
+   pretty_printer pp;
+   pp_format_decoder (&pp) = default_tree_printer;
+   range.dump_to_pp (&pp, false);
+   ASSERT_STREQ_AT (loc, pp_formatted_text (&pp), expected);
+ }
+ 
+ /* Assert that BR.dump (false) is EXPECTED.  */
+ 
+ #define ASSERT_DUMP_BOUNDED_RANGE_EQ(BR, EXPECTED) \
+   SELFTEST_BEGIN_STMT							\
+   assert_dump_bounded_range_eq ((SELFTEST_LOCATION), (BR), (EXPECTED)); \
+   SELFTEST_END_STMT
+ 
+ /* Verify that bounded_range works as expected.  */
+ 
+ static void
+ test_bounded_range ()
+ {
+   tree u8_0 = build_int_cst (unsigned_char_type_node, 0);
+   tree u8_1 = build_int_cst (unsigned_char_type_node, 1);
+   tree u8_64 = build_int_cst (unsigned_char_type_node, 64);
+   tree u8_128 = build_int_cst (unsigned_char_type_node, 128);
+   tree u8_255 = build_int_cst (unsigned_char_type_node, 255);
+ 
+   tree s8_0 = build_int_cst (signed_char_type_node, 0);
+   tree s8_1 = build_int_cst (signed_char_type_node, 1);
+   tree s8_2 = build_int_cst (signed_char_type_node, 2);
+ 
+   bounded_range br_u8_0 (u8_0, u8_0);
+   ASSERT_DUMP_BOUNDED_RANGE_EQ (br_u8_0, "0");
+   ASSERT_TRUE (br_u8_0.contains_p (u8_0));
+   ASSERT_FALSE (br_u8_0.contains_p (u8_1));
+   ASSERT_TRUE (br_u8_0.contains_p (s8_0));
+   ASSERT_FALSE (br_u8_0.contains_p (s8_1));
+ 
+   bounded_range br_u8_0_1 (u8_0, u8_1);
+   ASSERT_DUMP_BOUNDED_RANGE_EQ (br_u8_0_1, "[0, 1]");
+ 
+   bounded_range tmp (NULL_TREE, NULL_TREE);
+   ASSERT_TRUE (br_u8_0.intersects_p (br_u8_0_1, &tmp));
+   ASSERT_DUMP_BOUNDED_RANGE_EQ (tmp, "0");
+ 
+   bounded_range br_u8_64_128 (u8_64, u8_128);
+   ASSERT_DUMP_BOUNDED_RANGE_EQ (br_u8_64_128, "[64, 128]");
+ 
+   ASSERT_FALSE (br_u8_0.intersects_p (br_u8_64_128, NULL));
+   ASSERT_FALSE (br_u8_64_128.intersects_p (br_u8_0, NULL));
+ 
+   bounded_range br_u8_128_255 (u8_128, u8_255);
+   ASSERT_DUMP_BOUNDED_RANGE_EQ (br_u8_128_255, "[128, 255]");
+   ASSERT_TRUE (br_u8_128_255.intersects_p (br_u8_64_128, &tmp));
+   ASSERT_DUMP_BOUNDED_RANGE_EQ (tmp, "128");
+ 
+   bounded_range br_s8_2 (s8_2, s8_2);
+   ASSERT_DUMP_BOUNDED_RANGE_EQ (br_s8_2, "2");
+   bounded_range br_s8_2_u8_255 (s8_2, u8_255);
+   ASSERT_DUMP_BOUNDED_RANGE_EQ (br_s8_2_u8_255, "[2, 255]");
+ }
+ 
+ /* Implementation detail of ASSERT_DUMP_BOUNDED_RANGES_EQ.  */
+ 
+ static void
+ assert_dump_bounded_ranges_eq (const location &loc,
+ 			       const bounded_ranges *ranges,
+ 			       const char *expected)
+ {
+   auto_fix_quotes sentinel;
+   pretty_printer pp;
+   pp_format_decoder (&pp) = default_tree_printer;
+   ranges->dump_to_pp (&pp, false);
+   ASSERT_STREQ_AT (loc, pp_formatted_text (&pp), expected);
+ }
+ 
+ /* Implementation detail of ASSERT_DUMP_BOUNDED_RANGES_EQ.  */
+ 
+ static void
+ assert_dump_bounded_ranges_eq (const location &loc,
+ 			       const bounded_ranges &ranges,
+ 			       const char *expected)
+ {
+   auto_fix_quotes sentinel;
+   pretty_printer pp;
+   pp_format_decoder (&pp) = default_tree_printer;
+   ranges.dump_to_pp (&pp, false);
+   ASSERT_STREQ_AT (loc, pp_formatted_text (&pp), expected);
+ }
+ 
+ /* Assert that BRS.dump (false) is EXPECTED.  */
+ 
+ #define ASSERT_DUMP_BOUNDED_RANGES_EQ(BRS, EXPECTED) \
+   SELFTEST_BEGIN_STMT							\
+   assert_dump_bounded_ranges_eq ((SELFTEST_LOCATION), (BRS), (EXPECTED)); \
+   SELFTEST_END_STMT
+ 
+ /* Verify that the bounded_ranges class works as expected.  */
+ 
+ static void
+ test_bounded_ranges ()
+ {
+   bounded_ranges_manager mgr;
+ 
+   tree ch0 = build_int_cst (unsigned_char_type_node, 0);
+   tree ch1 = build_int_cst (unsigned_char_type_node, 1);
+   tree ch2 = build_int_cst (unsigned_char_type_node, 2);
+   tree ch3 = build_int_cst (unsigned_char_type_node, 3);
+   tree ch128 = build_int_cst (unsigned_char_type_node, 128);
+   tree ch129 = build_int_cst (unsigned_char_type_node, 129);
+   tree ch254 = build_int_cst (unsigned_char_type_node, 254);
+   tree ch255 = build_int_cst (unsigned_char_type_node, 255);
+ 
+   const bounded_ranges *empty = mgr.get_or_create_empty ();
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (empty, "{}");
+ 
+   const bounded_ranges *point0 = mgr.get_or_create_point (ch0);
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (point0, "{0}");
+ 
+   const bounded_ranges *point1 = mgr.get_or_create_point (ch1);
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (point1, "{1}");
+ 
+   const bounded_ranges *point2 = mgr.get_or_create_point (ch2);
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (point2, "{2}");
+ 
+   const bounded_ranges *range0_128 = mgr.get_or_create_range (ch0, ch128);
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (range0_128, "{[0, 128]}");
+ 
+   const bounded_ranges *range0_255 = mgr.get_or_create_range (ch0, ch255);
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (range0_255, "{[0, 255]}");
+ 
+   ASSERT_FALSE (empty->contain_p (ch0));
+   ASSERT_FALSE (empty->contain_p (ch1));
+   ASSERT_FALSE (empty->contain_p (ch255));
+ 
+   ASSERT_TRUE (point0->contain_p (ch0));
+   ASSERT_FALSE (point0->contain_p (ch1));
+   ASSERT_FALSE (point0->contain_p (ch255));
+ 
+   ASSERT_FALSE (point1->contain_p (ch0));
+   ASSERT_TRUE (point1->contain_p (ch1));
+   ASSERT_FALSE (point0->contain_p (ch255));
+ 
+   ASSERT_TRUE (range0_128->contain_p (ch0));
+   ASSERT_TRUE (range0_128->contain_p (ch1));
+   ASSERT_TRUE (range0_128->contain_p (ch128));
+   ASSERT_FALSE (range0_128->contain_p (ch129));
+   ASSERT_FALSE (range0_128->contain_p (ch254));
+   ASSERT_FALSE (range0_128->contain_p (ch255));
+ 
+   const bounded_ranges *inv0_128
+     = mgr.get_or_create_inverse (range0_128, unsigned_char_type_node);
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (inv0_128, "{[129, 255]}");
+ 
+   const bounded_ranges *range128_129 = mgr.get_or_create_range (ch128, ch129);
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (range128_129, "{[128, 129]}");
+ 
+   const bounded_ranges *inv128_129
+     = mgr.get_or_create_inverse (range128_129, unsigned_char_type_node);
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (inv128_129, "{[0, 127], [130, 255]}");
+ 
+   /* Intersection.  */
+   {
+     /* Intersection of disjoint ranges should be empty set.  */
+     const bounded_ranges *intersect0_1
+       = mgr.get_or_create_intersection (point0, point1);
+     ASSERT_DUMP_BOUNDED_RANGES_EQ (intersect0_1, "{}");
+   }
+ 
+   /* Various tests of "union of ranges".  */
+   {
+     {
+       /* Touching points should be merged into a range.  */
+       auto_vec <const bounded_ranges *> v;
+       v.safe_push (point0);
+       v.safe_push (point1);
+       const bounded_ranges *union_0_and_1 = mgr.get_or_create_union (v);
+       ASSERT_DUMP_BOUNDED_RANGES_EQ (union_0_and_1, "{[0, 1]}");
+     }
+ 
+     {
+       /* Overlapping and out-of-order.  */
+       auto_vec <const bounded_ranges *> v;
+       v.safe_push (inv0_128); // {[129, 255]}
+       v.safe_push (range128_129);
+       const bounded_ranges *union_129_255_and_128_129
+ 	= mgr.get_or_create_union (v);
+       ASSERT_DUMP_BOUNDED_RANGES_EQ (union_129_255_and_128_129, "{[128, 255]}");
+     }
+ 
+     {
+       /* Union of R and inverse(R) should be full range of type.  */
+       auto_vec <const bounded_ranges *> v;
+       v.safe_push (range128_129);
+       v.safe_push (inv128_129);
+       const bounded_ranges *union_ = mgr.get_or_create_union (v);
+       ASSERT_DUMP_BOUNDED_RANGES_EQ (union_, "{[0, 255]}");
+     }
+ 
+     /* Union with an endpoint.  */
+     {
+       const bounded_ranges *range2_to_255
+ 	= mgr.get_or_create_range (ch2, ch255);
+       ASSERT_DUMP_BOUNDED_RANGES_EQ (range2_to_255, "{[2, 255]}");
+       auto_vec <const bounded_ranges *> v;
+       v.safe_push (point0);
+       v.safe_push (point2);
+       v.safe_push (range2_to_255);
+       const bounded_ranges *union_ = mgr.get_or_create_union (v);
+       ASSERT_DUMP_BOUNDED_RANGES_EQ (union_, "{0, [2, 255]}");
+     }
+ 
+     /* Construct from vector of bounded_range.  */
+     {
+       auto_vec<bounded_range> v;
+       v.safe_push (bounded_range (ch2, ch2));
+       v.safe_push (bounded_range (ch0, ch0));
+       v.safe_push (bounded_range (ch2, ch255));
+       bounded_ranges br (v);
+       ASSERT_DUMP_BOUNDED_RANGES_EQ (&br, "{0, [2, 255]}");
+     }
+   }
+ 
+   /* Various tests of "inverse".  */
+   {
+     {
+       const bounded_ranges *range_1_to_3 = mgr.get_or_create_range (ch1, ch3);
+       ASSERT_DUMP_BOUNDED_RANGES_EQ (range_1_to_3, "{[1, 3]}");
+       const bounded_ranges *inv
+ 	= mgr.get_or_create_inverse (range_1_to_3, unsigned_char_type_node);
+       ASSERT_DUMP_BOUNDED_RANGES_EQ (inv, "{0, [4, 255]}");
+     }
+     {
+       const bounded_ranges *range_1_to_255
+ 	= mgr.get_or_create_range (ch1, ch255);
+       ASSERT_DUMP_BOUNDED_RANGES_EQ (range_1_to_255, "{[1, 255]}");
+       const bounded_ranges *inv
+ 	= mgr.get_or_create_inverse (range_1_to_255, unsigned_char_type_node);
+       ASSERT_DUMP_BOUNDED_RANGES_EQ (inv, "{0}");
+     }
+     {
+       const bounded_ranges *range_0_to_254
+ 	= mgr.get_or_create_range (ch0, ch254);
+       ASSERT_DUMP_BOUNDED_RANGES_EQ (range_0_to_254, "{[0, 254]}");
+       const bounded_ranges *inv
+ 	= mgr.get_or_create_inverse (range_0_to_254, unsigned_char_type_node);
+       ASSERT_DUMP_BOUNDED_RANGES_EQ (inv, "{255}");
+     }
+   }
+ 
+   /* "case 'a'-'z': case 'A-Z':" vs "default:", for ASCII.  */
+   {
+     tree ch65 = build_int_cst (unsigned_char_type_node, 65);
+     tree ch90 = build_int_cst (unsigned_char_type_node, 90);
+ 
+     tree ch97 = build_int_cst (unsigned_char_type_node, 97);
+     tree ch122 = build_int_cst (unsigned_char_type_node, 122);
+ 
+     const bounded_ranges *A_to_Z = mgr.get_or_create_range (ch65, ch90);
+     ASSERT_DUMP_BOUNDED_RANGES_EQ (A_to_Z, "{[65, 90]}");
+     const bounded_ranges *a_to_z = mgr.get_or_create_range (ch97, ch122);
+     ASSERT_DUMP_BOUNDED_RANGES_EQ (a_to_z, "{[97, 122]}");
+     auto_vec <const bounded_ranges *> v;
+     v.safe_push (A_to_Z);
+     v.safe_push (a_to_z);
+     const bounded_ranges *label_ranges = mgr.get_or_create_union (v);
+     ASSERT_DUMP_BOUNDED_RANGES_EQ (label_ranges, "{[65, 90], [97, 122]}");
+     const bounded_ranges *default_ranges
+       = mgr.get_or_create_inverse (label_ranges, unsigned_char_type_node);
+     ASSERT_DUMP_BOUNDED_RANGES_EQ (default_ranges,
+ 				   "{[0, 64], [91, 96], [123, 255]}");
+   }
+ 
+   /* Verify ranges from ops.  */
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (bounded_ranges (EQ_EXPR, ch128),
+ 				 "{128}");
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (bounded_ranges (NE_EXPR, ch128),
+ 				 "{[0, 127], [129, 255]}");
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (bounded_ranges (LT_EXPR, ch128),
+ 				 "{[0, 127]}");
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (bounded_ranges (LE_EXPR, ch128),
+ 				 "{[0, 128]}");
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (bounded_ranges (GE_EXPR, ch128),
+ 				 "{[128, 255]}");
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (bounded_ranges (GT_EXPR, ch128),
+ 				 "{[129, 255]}");
+   /* Ops at endpoints of type ranges.  */
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (bounded_ranges (LE_EXPR, ch0),
+ 				 "{0}");
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (bounded_ranges (LT_EXPR, ch0),
+ 				 "{}");
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (bounded_ranges (NE_EXPR, ch0),
+ 				 "{[1, 255]}");
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (bounded_ranges (GE_EXPR, ch255),
+ 				 "{255}");
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (bounded_ranges (GT_EXPR, ch255),
+ 				 "{}");
+   ASSERT_DUMP_BOUNDED_RANGES_EQ (bounded_ranges (NE_EXPR, ch255),
+ 				 "{[0, 254]}");
+ 
+   /* Verify that instances are consolidated by mgr.  */
+   ASSERT_EQ (mgr.get_or_create_point (ch0),
+ 	     mgr.get_or_create_point (ch0));
+   ASSERT_NE (mgr.get_or_create_point (ch0),
+ 	     mgr.get_or_create_point (ch1));
+ }
+ 
  /* Run the selftests in this file, temporarily overriding
     flag_analyzer_transitivity with TRANSITIVITY.  */
  
*************** run_constraint_manager_tests (bool trans
*** 2692,2697 ****
--- 4391,4397 ----
    int saved_flag_analyzer_transitivity = flag_analyzer_transitivity;
    flag_analyzer_transitivity = transitivity;
  
+   test_range ();
    test_constraint_conditions ();
    if (flag_analyzer_transitivity)
      {
*************** run_constraint_manager_tests (bool trans
*** 2702,2707 ****
--- 4402,4410 ----
    test_constraint_impl ();
    test_equality ();
    test_many_constants ();
+   test_purging ();
+   test_bounded_range ();
+   test_bounded_ranges ();
  
    flag_analyzer_transitivity = saved_flag_analyzer_transitivity;
  }
diff -Nrcpad gcc-11.3.0/gcc/analyzer/constraint-manager.h gcc-12.1.0/gcc/analyzer/constraint-manager.h
*** gcc-11.3.0/gcc/analyzer/constraint-manager.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/constraint-manager.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Tracking equivalence classes and constraints at a point on an execution path.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Tracking equivalence classes and constraints at a point on an execution path.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** namespace ana {
*** 25,30 ****
--- 25,36 ----
  
  class constraint_manager;
  
+ enum bound_kind
+ {
+   BK_LOWER,
+   BK_UPPER
+ };
+ 
  /* One of the end-points of a range.  */
  
  struct bound
*************** struct bound
*** 33,39 ****
    bound (tree constant, bool closed)
    : m_constant (constant), m_closed (closed) {}
  
!   void ensure_closed (bool is_upper);
  
    const char * get_relation_as_str () const;
  
--- 39,45 ----
    bound (tree constant, bool closed)
    : m_constant (constant), m_closed (closed) {}
  
!   void ensure_closed (enum bound_kind bound_kind);
  
    const char * get_relation_as_str () const;
  
*************** struct bound
*** 44,51 ****
  /* A range of values, used for determining if a value has been
     constrained to just one possible constant value.  */
  
! struct range
  {
    range () : m_lower_bound (), m_upper_bound () {}
    range (const bound &lower, const bound &upper)
    : m_lower_bound (lower), m_upper_bound (upper) {}
--- 50,58 ----
  /* A range of values, used for determining if a value has been
     constrained to just one possible constant value.  */
  
! class range
  {
+ public:
    range () : m_lower_bound (), m_upper_bound () {}
    range (const bound &lower, const bound &upper)
    : m_lower_bound (lower), m_upper_bound (upper) {}
*************** struct range
*** 60,69 ****
--- 67,238 ----
    bool below_lower_bound (tree rhs_const) const;
    bool above_upper_bound (tree rhs_const) const;
  
+   bool add_bound (bound b, enum bound_kind bound_kind);
+   bool add_bound (enum tree_code op, tree rhs_const);
+ 
+ private:
    bound m_lower_bound;
    bound m_upper_bound;
  };
  
+ /* A closed range of values with constant integer bounds
+    e.g. [3, 5] for the set {3, 4, 5}.  */
+ 
+ struct bounded_range
+ {
+   bounded_range (const_tree lower, const_tree upper);
+ 
+   void dump_to_pp (pretty_printer *pp, bool show_types) const;
+   void dump (bool show_types) const;
+ 
+   json::object *to_json () const;
+ 
+   bool contains_p (tree cst) const;
+ 
+   bool intersects_p (const bounded_range &other,
+ 		     bounded_range *out) const;
+ 
+   bool operator== (const bounded_range &other) const;
+   bool operator!= (const bounded_range &other) const
+   {
+     return !(*this == other);
+   }
+ 
+   static int cmp (const bounded_range &a, const bounded_range &b);
+ 
+   tree m_lower;
+   tree m_upper;
+ 
+ private:
+   static void set_json_attr (json::object *obj, const char *name, tree value);
+ };
+ 
+ /* A collection of bounded_range instances, suitable
+    for representing the ranges on a case label within a switch
+    statement.  */
+ 
+ struct bounded_ranges
+ {
+ public:
+   typedef bounded_ranges key_t;
+ 
+   bounded_ranges (const bounded_range &range);
+   bounded_ranges (const vec<bounded_range> &ranges);
+   bounded_ranges (enum tree_code op, tree rhs_const);
+ 
+   bool operator== (const bounded_ranges &other) const;
+ 
+   hashval_t get_hash () const { return m_hash; }
+ 
+   void dump_to_pp (pretty_printer *pp, bool show_types) const;
+   void dump (bool show_types) const;
+ 
+   json::value *to_json () const;
+ 
+   tristate eval_condition (enum tree_code op,
+ 			   tree rhs_const,
+ 			   bounded_ranges_manager *mgr) const;
+ 
+   bool contain_p (tree cst) const;
+   bool empty_p () const { return m_ranges.length () == 0; }
+ 
+   static int cmp (const bounded_ranges *a, const bounded_ranges *b);
+ 
+ private:
+   void canonicalize ();
+   void validate () const;
+ 
+   friend class bounded_ranges_manager;
+ 
+   auto_vec<bounded_range> m_ranges;
+   hashval_t m_hash;
+ };
+ 
+ } // namespace ana
+ 
+ template <> struct default_hash_traits<bounded_ranges::key_t>
+ : public member_function_hash_traits<bounded_ranges::key_t>
+ {
+   static const bool empty_zero_p = true;
+ };
+ 
+ namespace ana {
+ 
+ /* An object to own and consolidate bounded_ranges instances.
+    This also caches the mapping from switch_cfg_superedge
+    bounded_ranges instances, so that get_or_create_ranges_for_switch is
+    memoized.  */
+ 
+ class bounded_ranges_manager
+ {
+ public:
+   ~bounded_ranges_manager ();
+ 
+   const bounded_ranges *
+   get_or_create_ranges_for_switch (const switch_cfg_superedge *edge,
+ 				   const gswitch *switch_stmt);
+ 
+   const bounded_ranges *get_or_create_empty ();
+   const bounded_ranges *get_or_create_point (const_tree value);
+   const bounded_ranges *get_or_create_range (const_tree lower_bound,
+ 					     const_tree upper_bound);
+   const bounded_ranges *
+   get_or_create_union (const vec <const bounded_ranges *> &others);
+   const bounded_ranges *
+   get_or_create_intersection (const bounded_ranges *a,
+ 			      const bounded_ranges *b);
+   const bounded_ranges *
+   get_or_create_inverse (const bounded_ranges *other, tree type);
+ 
+   void log_stats (logger *logger, bool show_objs) const;
+ 
+ private:
+   const bounded_ranges *
+   create_ranges_for_switch (const switch_cfg_superedge &edge,
+ 			    const gswitch *switch_stmt);
+ 
+   const bounded_ranges *
+   make_case_label_ranges (const gswitch *switch_stmt,
+ 			  tree case_label);
+ 
+   const bounded_ranges *consolidate (bounded_ranges *);
+ 
+   struct hash_traits_t : public typed_noop_remove<bounded_ranges *>
+   {
+     typedef bounded_ranges *key_type;
+     typedef bounded_ranges *value_type;
+ 
+     static inline bool
+     equal (const key_type &k1, const key_type &k2)
+     {
+       return *k1 == *k2;
+     }
+     static inline hashval_t
+     hash (const key_type &k)
+     {
+       return k->get_hash ();
+     }
+     static inline bool is_empty (key_type k) { return k == NULL; }
+     static inline void mark_empty (key_type &k) { k = NULL; }
+     static inline bool is_deleted (key_type k)
+     {
+       return k == reinterpret_cast<key_type> (1);
+     }
+ 
+     static const bool empty_zero_p = true;
+   };
+   struct traits_t : public simple_hashmap_traits<hash_traits_t,
+ 						 bounded_ranges *>
+   {
+   };
+   typedef hash_map<bounded_ranges *, bounded_ranges *, traits_t> map_t;
+   map_t m_map;
+ 
+   typedef hash_map<const switch_cfg_superedge *,
+ 		   const bounded_ranges *> edge_cache_t;
+   edge_cache_t m_edge_cache;
+ };
+ 
  /* An equivalence class within a constraint manager: a set of
     svalues that are known to all be equal to each other,
     together with an optional tree constant that they are equal to.  */
*************** public:
*** 90,95 ****
--- 259,266 ----
  
    json::object *to_json () const;
  
+   bool contains_non_constant_p () const;
+ 
    /* An equivalence class can contain multiple constants (e.g. multiple
       different zeroes, for different types); these are just for the last
       constant added.  */
*************** class fact_visitor
*** 190,195 ****
--- 361,393 ----
    virtual void on_fact (const svalue *lhs,
  			enum tree_code,
  			const svalue *rhs) = 0;
+   virtual void on_ranges (const svalue *lhs,
+ 			  const bounded_ranges *ranges) = 0;
+ };
+ 
+ class bounded_ranges_constraint
+ {
+ public:
+   bounded_ranges_constraint (equiv_class_id ec_id,
+ 			     const bounded_ranges *ranges)
+   : m_ec_id (ec_id), m_ranges (ranges)
+   {
+   }
+ 
+   void print (pretty_printer *pp, const constraint_manager &cm) const;
+ 
+   json::object *to_json () const;
+ 
+   bool operator== (const bounded_ranges_constraint &other) const;
+   bool operator!= (const bounded_ranges_constraint &other) const
+   {
+     return !(*this == other);
+   }
+ 
+   void add_to_hash (inchash::hash *hstate) const;
+ 
+   equiv_class_id m_ec_id;
+   const bounded_ranges *m_ranges;
  };
  
  /* A collection of equivalence classes and constraints on them.
*************** public:
*** 248,253 ****
--- 446,454 ----
  			       enum tree_code op,
  			       equiv_class_id rhs_ec_id);
  
+   bool add_bounded_ranges (const svalue *sval,
+ 			   const bounded_ranges *ranges);
+ 
    bool get_equiv_class_by_svalue (const svalue *sval,
  				    equiv_class_id *out) const;
    equiv_class_id get_or_add_equiv_class (const svalue *sval);
*************** public:
*** 269,274 ****
--- 470,476 ----
  
    void on_liveness_change (const svalue_set &live_svalues,
  			   const region_model *model);
+   void purge_state_involving (const svalue *sval);
  
    void canonicalize ();
  
*************** public:
*** 280,287 ****
--- 482,492 ----
  
    void validate () const;
  
+   bounded_ranges_manager *get_range_manager () const;
+ 
    auto_delete_vec<equiv_class> m_equiv_classes;
    auto_vec<constraint> m_constraints;
+   auto_vec<bounded_ranges_constraint> m_bounded_ranges_constraints;
  
   private:
    void add_constraint_internal (equiv_class_id lhs_id,
diff -Nrcpad gcc-11.3.0/gcc/analyzer/diagnostic-manager.cc gcc-12.1.0/gcc/analyzer/diagnostic-manager.cc
*** gcc-11.3.0/gcc/analyzer/diagnostic-manager.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/diagnostic-manager.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for saving, deduplicating, and emitting analyzer diagnostics.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for saving, deduplicating, and emitting analyzer diagnostics.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** private:
*** 292,297 ****
--- 292,328 ----
    const shortest_paths<eg_traits, exploded_path> &m_sep;
  };
  
+ /* When we're building the exploded graph we want to simplify
+    overly-complicated symbolic values down to "UNKNOWN" to try to avoid
+    state explosions and unbounded chains of exploration.
+ 
+    However, when we're building the feasibility graph for a diagnostic
+    (actually a tree), we don't want UNKNOWN values, as conditions on them
+    are also unknown: we don't want to have a contradiction such as a path
+    where (VAL != 0) and then (VAL == 0) along the same path.
+ 
+    Hence this is an RAII class for temporarily disabling complexity-checking
+    in the region_model_manager, for use within
+    epath_finder::explore_feasible_paths.
+ 
+    We also disable the creation of unknown_svalue instances during feasibility
+    checking, instead creating unique svalues, to avoid paradoxes in paths.  */
+ 
+ class auto_checking_feasibility
+ {
+ public:
+   auto_checking_feasibility (region_model_manager *mgr) : m_mgr (mgr)
+   {
+     m_mgr->begin_checking_feasibility ();
+   }
+   ~auto_checking_feasibility ()
+   {
+     m_mgr->end_checking_feasibility ();
+   }
+ private:
+   region_model_manager *m_mgr;
+ };
+ 
  /* Attempt to find the shortest feasible path from the origin to
     TARGET_ENODE by iteratively building a feasible_graph, in which
     every path to a feasible_node is feasible by construction.
*************** epath_finder::explore_feasible_paths (co
*** 344,349 ****
--- 375,382 ----
    logger *logger = get_logger ();
    LOG_SCOPE (logger);
  
+   region_model_manager *mgr = m_eg.get_engine ()->get_model_manager ();
+ 
    /* Determine the shortest path to TARGET_ENODE from each node in
       the exploded graph.  */
    shortest_paths<eg_traits, exploded_path> sep
*************** epath_finder::explore_feasible_paths (co
*** 363,370 ****
  
    /* Populate the worklist with the origin node.  */
    {
!     feasibility_state init_state (m_eg.get_engine ()->get_model_manager (),
! 				  m_eg.get_supergraph ());
      feasible_node *origin = fg.add_node (m_eg.get_origin (), init_state, 0);
      worklist.add_node (origin);
    }
--- 396,402 ----
  
    /* Populate the worklist with the origin node.  */
    {
!     feasibility_state init_state (mgr, m_eg.get_supergraph ());
      feasible_node *origin = fg.add_node (m_eg.get_origin (), init_state, 0);
      worklist.add_node (origin);
    }
*************** epath_finder::explore_feasible_paths (co
*** 376,386 ****
    /* Set this if we find a feasible path to TARGET_ENODE.  */
    exploded_path *best_path = NULL;
  
!   while (process_worklist_item (&worklist, tg, &fg, target_enode, diag_idx,
! 				&best_path))
!     {
!       /* Empty; the work is done within process_worklist_item.  */
!     }
  
    if (logger)
      {
--- 408,422 ----
    /* Set this if we find a feasible path to TARGET_ENODE.  */
    exploded_path *best_path = NULL;
  
!   {
!     auto_checking_feasibility sentinel (mgr);
! 
!     while (process_worklist_item (&worklist, tg, &fg, target_enode, diag_idx,
! 				  &best_path))
!       {
! 	/* Empty; the work is done within process_worklist_item.  */
!       }
!   }
  
    if (logger)
      {
*************** epath_finder::process_worklist_item (fea
*** 487,494 ****
  	  gcc_assert (rc);
  	  fg->add_feasibility_problem (fnode,
  				       succ_eedge,
! 				       *rc);
! 	  delete rc;
  
  	  /* Give up if there have been too many infeasible edges.  */
  	  if (fg->get_num_infeasible ()
--- 523,529 ----
  	  gcc_assert (rc);
  	  fg->add_feasibility_problem (fnode,
  				       succ_eedge,
! 				       rc);
  
  	  /* Give up if there have been too many infeasible edges.  */
  	  if (fg->get_num_infeasible ()
*************** saved_diagnostic::saved_diagnostic (cons
*** 594,600 ****
    m_var (var), m_sval (sval), m_state (state),
    m_d (d), m_trailing_eedge (NULL),
    m_idx (idx),
!   m_best_epath (NULL), m_problem (NULL)
  {
    gcc_assert (m_stmt || m_stmt_finder);
  
--- 629,636 ----
    m_var (var), m_sval (sval), m_state (state),
    m_d (d), m_trailing_eedge (NULL),
    m_idx (idx),
!   m_best_epath (NULL), m_problem (NULL),
!   m_notes ()
  {
    gcc_assert (m_stmt || m_stmt_finder);
  
*************** saved_diagnostic::~saved_diagnostic ()
*** 616,621 ****
--- 652,662 ----
  bool
  saved_diagnostic::operator== (const saved_diagnostic &other) const
  {
+   if (m_notes.length () != other.m_notes.length ())
+     return false;
+   for (unsigned i = 0; i < m_notes.length (); i++)
+     if (!m_notes[i]->equal_p (*other.m_notes[i]))
+       return false;
    return (m_sm == other.m_sm
  	  /* We don't compare m_enode.  */
  	  && m_snode == other.m_snode
*************** saved_diagnostic::operator== (const save
*** 627,632 ****
--- 668,682 ----
  	  && m_trailing_eedge == other.m_trailing_eedge);
  }
  
+ /* Add PN to this diagnostic, taking ownership of it.  */
+ 
+ void
+ saved_diagnostic::add_note (pending_note *pn)
+ {
+   gcc_assert (pn);
+   m_notes.safe_push (pn);
+ }
+ 
  /* Return a new json::object of the form
     {"sm": optional str,
      "enode": int,
*************** saved_diagnostic::to_json () const
*** 662,667 ****
--- 712,718 ----
       exploded_edge *m_trailing_eedge;
       enum status m_status;
       feasibility_problem *m_problem;
+      auto_delete_vec <pending_note> m_notes;
    */
  
    return sd_obj;
*************** saved_diagnostic::add_duplicate (saved_d
*** 722,727 ****
--- 773,799 ----
    m_duplicates.safe_push (other);
  }
  
+ /* Return true if this diagnostic supercedes OTHER, and that OTHER should
+    therefore not be emitted.  */
+ 
+ bool
+ saved_diagnostic::supercedes_p (const saved_diagnostic &other) const
+ {
+   /* They should be at the same stmt.  */
+   if (m_stmt != other.m_stmt)
+     return false;
+   return m_d->supercedes_p (*other.m_d);
+ }
+ 
+ /* Emit any pending notes owned by this diagnostic.  */
+ 
+ void
+ saved_diagnostic::emit_any_notes () const
+ {
+   for (auto pn : m_notes)
+     pn->emit ();
+ }
+ 
  /* State for building a checker_path from a particular exploded_path.
     In particular, this precomputes reachability information: the set of
     source enodes for which a path be found to the diagnostic enode.  */
*************** private:
*** 777,795 ****
    const feasibility_problem *m_feasibility_problem;
  };
  
  /* class diagnostic_manager.  */
  
  /* diagnostic_manager's ctor.  */
  
  diagnostic_manager::diagnostic_manager (logger *logger, engine *eng,
  					int verbosity)
! : log_user (logger), m_eng (eng), m_verbosity (verbosity)
  {
  }
  
! /* Queue pending_diagnostic D at ENODE for later emission.  */
  
! void
  diagnostic_manager::add_diagnostic (const state_machine *sm,
  				    exploded_node *enode,
  				    const supernode *snode, const gimple *stmt,
--- 849,884 ----
    const feasibility_problem *m_feasibility_problem;
  };
  
+ /* Determine the emission location for PD at STMT in FUN.  */
+ 
+ static location_t
+ get_emission_location (const gimple *stmt, function *fun,
+ 		       const pending_diagnostic &pd)
+ {
+   location_t loc = get_stmt_location (stmt, fun);
+ 
+   /* Allow the pending_diagnostic to fix up the location.  */
+   loc = pd.fixup_location (loc);
+ 
+   return loc;
+ }
+ 
  /* class diagnostic_manager.  */
  
  /* diagnostic_manager's ctor.  */
  
  diagnostic_manager::diagnostic_manager (logger *logger, engine *eng,
  					int verbosity)
! : log_user (logger), m_eng (eng), m_verbosity (verbosity),
!   m_num_disabled_diagnostics (0)
  {
  }
  
! /* Queue pending_diagnostic D at ENODE for later emission.
!    Return true/false signifying if the diagnostic was actually added.
!    Take ownership of D (or delete it).  */
  
! bool
  diagnostic_manager::add_diagnostic (const state_machine *sm,
  				    exploded_node *enode,
  				    const supernode *snode, const gimple *stmt,
*************** diagnostic_manager::add_diagnostic (cons
*** 805,810 ****
--- 894,918 ----
       through the exploded_graph to the diagnostic.  */
    gcc_assert (enode);
  
+   /* If this warning is ultimately going to be rejected by a -Wno-analyzer-*
+      flag, reject it now.
+      We can only do this for diagnostics where we already know the stmt,
+      and thus can determine the emission location.  */
+   if (stmt)
+     {
+       location_t loc = get_emission_location (stmt, snode->m_fun, *d);
+       int option = d->get_controlling_option ();
+       if (!warning_enabled_at (loc, option))
+ 	{
+ 	  if (get_logger ())
+ 	    get_logger ()->log ("rejecting disabled warning %qs",
+ 				d->get_kind ());
+ 	  delete d;
+ 	  m_num_disabled_diagnostics++;
+ 	  return false;
+ 	}
+     }
+ 
    saved_diagnostic *sd
      = new saved_diagnostic (sm, enode, snode, stmt, finder, var, sval,
  			    state, d, m_saved_diagnostics.length ());
*************** diagnostic_manager::add_diagnostic (cons
*** 814,831 ****
      log ("adding saved diagnostic %i at SN %i to EN %i: %qs",
  	 sd->get_index (),
  	 snode->m_index, enode->m_index, d->get_kind ());
  }
  
! /* Queue pending_diagnostic D at ENODE for later emission.  */
  
! void
  diagnostic_manager::add_diagnostic (exploded_node *enode,
  				    const supernode *snode, const gimple *stmt,
  				    stmt_finder *finder,
  				    pending_diagnostic *d)
  {
    gcc_assert (enode);
!   add_diagnostic (NULL, enode, snode, stmt, finder, NULL_TREE, NULL, 0, d);
  }
  
  /* Return a new json::object of the form
--- 922,957 ----
      log ("adding saved diagnostic %i at SN %i to EN %i: %qs",
  	 sd->get_index (),
  	 snode->m_index, enode->m_index, d->get_kind ());
+   return true;
  }
  
! /* Queue pending_diagnostic D at ENODE for later emission.
!    Return true/false signifying if the diagnostic was actually added.
!    Take ownership of D (or delete it).  */
  
! bool
  diagnostic_manager::add_diagnostic (exploded_node *enode,
  				    const supernode *snode, const gimple *stmt,
  				    stmt_finder *finder,
  				    pending_diagnostic *d)
  {
    gcc_assert (enode);
!   return add_diagnostic (NULL, enode, snode, stmt, finder, NULL_TREE,
! 			 NULL, 0, d);
! }
! 
! /* Add PN to the most recent saved_diagnostic.  */
! 
! void
! diagnostic_manager::add_note (pending_note *pn)
! {
!   LOG_FUNC (get_logger ());
!   gcc_assert (pn);
! 
!   /* Get most recent saved_diagnostic.  */
!   gcc_assert (m_saved_diagnostics.length () > 0);
!   saved_diagnostic *sd = m_saved_diagnostics[m_saved_diagnostics.length () - 1];
!   sd->add_note (pn);
  }
  
  /* Return a new json::object of the form
*************** public:
*** 1021,1026 ****
--- 1147,1184 ----
        }
    }
  
+   /* Handle interactions between the dedupe winners, so that some
+      diagnostics can supercede others (of different kinds).
+ 
+      We want use-after-free to supercede use-of-unitialized-value,
+      so that if we have these at the same stmt, we don't emit
+      a use-of-uninitialized, just the use-after-free.  */
+ 
+   void handle_interactions (diagnostic_manager *dm)
+   {
+     LOG_SCOPE (dm->get_logger ());
+     auto_vec<const dedupe_key *> superceded;
+     for (auto outer : m_map)
+       {
+ 	const saved_diagnostic *outer_sd = outer.second;
+ 	for (auto inner : m_map)
+ 	  {
+ 	    const saved_diagnostic *inner_sd = inner.second;
+ 	    if (inner_sd->supercedes_p (*outer_sd))
+ 	      {
+ 		superceded.safe_push (outer.first);
+ 		if (dm->get_logger ())
+ 		  dm->log ("sd[%i] \"%s\" superceded by sd[%i] \"%s\"",
+ 			   outer_sd->get_index (), outer_sd->m_d->get_kind (),
+ 			   inner_sd->get_index (), inner_sd->m_d->get_kind ());
+ 		break;
+ 	      }
+ 	  }
+       }
+     for (auto iter : superceded)
+       m_map.remove (iter);
+   }
+ 
   /* Emit the simplest diagnostic within each set.  */
  
    void emit_best (diagnostic_manager *dm,
*************** diagnostic_manager::emit_saved_diagnosti
*** 1068,1073 ****
--- 1226,1232 ----
    LOG_SCOPE (get_logger ());
    auto_timevar tv (TV_ANALYZER_DIAGNOSTICS);
    log ("# saved diagnostics: %i", m_saved_diagnostics.length ());
+   log ("# disabled diagnostics: %i", m_num_disabled_diagnostics);
    if (get_logger ())
      {
        unsigned i;
*************** diagnostic_manager::emit_saved_diagnosti
*** 1095,1100 ****
--- 1254,1261 ----
    FOR_EACH_VEC_ELT (m_saved_diagnostics, i, sd)
      best_candidates.add (get_logger (), &pf, sd);
  
+   best_candidates.handle_interactions (this);
+ 
    /* For each dedupe-key, call emit_saved_diagnostic on the "best"
       saved_diagnostic.  */
    best_candidates.emit_best (this, eg);
*************** diagnostic_manager::emit_saved_diagnosti
*** 1141,1155 ****
       trailing eedge stashed, add any events for it.  This is for use
       in handling longjmp, to show where a longjmp is rewinding to.  */
    if (sd.m_trailing_eedge)
!     add_events_for_eedge (pb, *sd.m_trailing_eedge, &emission_path);
  
    emission_path.prepare_for_emission (sd.m_d);
  
!   location_t loc = get_stmt_location (sd.m_stmt, sd.m_snode->m_fun);
  
!   /* Allow the pending_diagnostic to fix up the primary location
!      and any locations for events.  */
!   loc = sd.m_d->fixup_location (loc);
    emission_path.fixup_locations (sd.m_d);
  
    gcc_rich_location rich_loc (loc);
--- 1302,1315 ----
       trailing eedge stashed, add any events for it.  This is for use
       in handling longjmp, to show where a longjmp is rewinding to.  */
    if (sd.m_trailing_eedge)
!     add_events_for_eedge (pb, *sd.m_trailing_eedge, &emission_path, NULL);
  
    emission_path.prepare_for_emission (sd.m_d);
  
!   location_t loc
!     = get_emission_location (sd.m_stmt, sd.m_snode->m_fun, *sd.m_d);
  
!   /* Allow the pending_diagnostic to fix up the locations of events.  */
    emission_path.fixup_locations (sd.m_d);
  
    gcc_rich_location rich_loc (loc);
*************** diagnostic_manager::emit_saved_diagnosti
*** 1159,1169 ****
--- 1319,1342 ----
    auto_cfun sentinel (sd.m_snode->m_fun);
    if (sd.m_d->emit (&rich_loc))
      {
+       sd.emit_any_notes ();
+ 
        unsigned num_dupes = sd.get_num_dupes ();
        if (flag_analyzer_show_duplicate_count && num_dupes > 0)
  	inform_n (loc, num_dupes,
  		  "%i duplicate", "%i duplicates",
  		  num_dupes);
+       if (flag_dump_analyzer_exploded_paths)
+ 	{
+ 	  auto_timevar tv (TV_ANALYZER_DUMP);
+ 	  pretty_printer pp;
+ 	  pp_printf (&pp, "%s.%i.%s.epath.txt",
+ 		     dump_base_name, sd.get_index (), sd.m_d->get_kind ());
+ 	  char *filename = xstrdup (pp_formatted_text (&pp));
+ 	  epath->dump_to_file (filename, eg.get_ext_state ());
+ 	  inform (loc, "exploded path written to %qs", filename);
+ 	  free (filename);
+ 	}
      }
    delete pp;
  }
*************** diagnostic_manager::build_emission_path
*** 1177,1186 ****
  					 checker_path *emission_path) const
  {
    LOG_SCOPE (get_logger ());
    for (unsigned i = 0; i < epath.m_edges.length (); i++)
      {
        const exploded_edge *eedge = epath.m_edges[i];
!       add_events_for_eedge (pb, *eedge, emission_path);
      }
  }
  
--- 1350,1391 ----
  					 checker_path *emission_path) const
  {
    LOG_SCOPE (get_logger ());
+ 
+   interesting_t interest;
+   pb.get_pending_diagnostic ()->mark_interesting_stuff (&interest);
+ 
+   /* Add region creation events for any globals of interest, at the
+      beginning of the path.  */
+   {
+     for (auto reg : interest.m_region_creation)
+       switch (reg->get_memory_space ())
+ 	{
+ 	default:
+ 	  continue;
+ 	case MEMSPACE_CODE:
+ 	case MEMSPACE_GLOBALS:
+ 	case MEMSPACE_READONLY_DATA:
+ 	  {
+ 	    const region *base_reg = reg->get_base_region ();
+ 	    if (tree decl = base_reg->maybe_get_decl ())
+ 	      if (DECL_P (decl)
+ 		  && DECL_SOURCE_LOCATION (decl) != UNKNOWN_LOCATION)
+ 		{
+ 		  emission_path->add_region_creation_event
+ 		    (reg,
+ 		     DECL_SOURCE_LOCATION (decl),
+ 		     NULL_TREE,
+ 		     0);
+ 		}
+ 	  }
+ 	}
+   }
+ 
+   /* Walk EPATH, adding events as appropriate.  */
    for (unsigned i = 0; i < epath.m_edges.length (); i++)
      {
        const exploded_edge *eedge = epath.m_edges[i];
!       add_events_for_eedge (pb, *eedge, emission_path, &interest);
      }
  }
  
*************** struct null_assignment_sm_context : publ
*** 1377,1382 ****
--- 1582,1595 ----
      return current;
    }
  
+   state_machine::state_t get_state (const gimple *stmt ATTRIBUTE_UNUSED,
+ 				    const svalue *sval) FINAL OVERRIDE
+   {
+     const sm_state_map *old_smap = m_old_state->m_checker_states[m_sm_idx];
+     state_machine::state_t current = old_smap->get_state (sval, m_ext_state);
+     return current;
+   }
+ 
    void set_next_state (const gimple *stmt,
  		       tree var,
  		       state_machine::state_t to,
*************** struct null_assignment_sm_context : publ
*** 1401,1406 ****
--- 1614,1641 ----
  							*m_new_state));
    }
  
+   void set_next_state (const gimple *stmt,
+ 		       const svalue *sval,
+ 		       state_machine::state_t to,
+ 		       tree origin ATTRIBUTE_UNUSED) FINAL OVERRIDE
+   {
+     state_machine::state_t from = get_state (stmt, sval);
+     if (from != m_sm.get_start_state ())
+       return;
+ 
+     const supernode *supernode = m_point->get_supernode ();
+     int stack_depth = m_point->get_stack_depth ();
+ 
+     m_emission_path->add_event (new state_change_event (supernode,
+ 							m_stmt,
+ 							stack_depth,
+ 							m_sm,
+ 							sval,
+ 							from, to,
+ 							NULL,
+ 							*m_new_state));
+   }
+ 
    void warn (const supernode *, const gimple *,
  	     tree, pending_diagnostic *d) FINAL OVERRIDE
    {
*************** struct null_assignment_sm_context : publ
*** 1412,1417 ****
--- 1647,1657 ----
      return expr;
    }
  
+   tree get_diagnostic_tree (const svalue *sval) FINAL OVERRIDE
+   {
+     return m_new_state->m_region_model->get_representative_tree (sval);
+   }
+ 
    state_machine::state_t get_global_state () const FINAL OVERRIDE
    {
      return 0;
*************** struct null_assignment_sm_context : publ
*** 1439,1444 ****
--- 1679,1689 ----
      return NULL_TREE;
    }
  
+   const program_state *get_old_program_state () const FINAL OVERRIDE
+   {
+     return m_old_state;
+   }
+ 
    const program_state *m_old_state;
    const program_state *m_new_state;
    const gimple *m_stmt;
*************** struct null_assignment_sm_context : publ
*** 1453,1462 ****
  void
  diagnostic_manager::add_events_for_eedge (const path_builder &pb,
  					  const exploded_edge &eedge,
! 					  checker_path *emission_path) const
  {
    const exploded_node *src_node = eedge.m_src;
    const program_point &src_point = src_node->get_point ();
    const exploded_node *dst_node = eedge.m_dest;
    const program_point &dst_point = dst_node->get_point ();
    const int dst_stack_depth = dst_point.get_stack_depth ();
--- 1698,1709 ----
  void
  diagnostic_manager::add_events_for_eedge (const path_builder &pb,
  					  const exploded_edge &eedge,
! 					  checker_path *emission_path,
! 					  interesting_t *interest) const
  {
    const exploded_node *src_node = eedge.m_src;
    const program_point &src_point = src_node->get_point ();
+   const int src_stack_depth = src_point.get_stack_depth ();
    const exploded_node *dst_node = eedge.m_dest;
    const program_point &dst_point = dst_node->get_point ();
    const int dst_stack_depth = dst_point.get_stack_depth ();
*************** diagnostic_manager::add_events_for_eedge
*** 1518,1523 ****
--- 1765,1793 ----
  	     (dst_point.get_supernode ()->get_start_location (),
  	      dst_point.get_fndecl (),
  	      dst_stack_depth));
+ 	  /* Create region_creation_events for on-stack regions within
+ 	     this frame.  */
+ 	  if (interest)
+ 	    {
+ 	      unsigned i;
+ 	      const region *reg;
+ 	      FOR_EACH_VEC_ELT (interest->m_region_creation, i, reg)
+ 		if (const frame_region *frame = reg->maybe_get_frame_region ())
+ 		  if (frame->get_fndecl () == dst_point.get_fndecl ())
+ 		    {
+ 		      const region *base_reg = reg->get_base_region ();
+ 		      if (tree decl = base_reg->maybe_get_decl ())
+ 			if (DECL_P (decl)
+ 			    && DECL_SOURCE_LOCATION (decl) != UNKNOWN_LOCATION)
+ 			  {
+ 			    emission_path->add_region_creation_event
+ 			      (reg,
+ 			       DECL_SOURCE_LOCATION (decl),
+ 			       dst_point.get_fndecl (),
+ 			       dst_stack_depth);
+ 			  }
+ 		    }
+ 	    }
  	}
        break;
      case PK_BEFORE_STMT:
*************** diagnostic_manager::add_events_for_eedge
*** 1573,1583 ****
--- 1843,1890 ----
  			    == dst_node->m_succs[0]->m_dest->get_point ())))
  		  break;
  	      }
+ 
  	  }
        }
        break;
      }
  
+   /* Look for changes in dynamic extents, which will identify
+      the creation of heap-based regions and alloca regions.  */
+   if (interest)
+     {
+       const region_model *src_model = src_state.m_region_model;
+       const region_model *dst_model = dst_state.m_region_model;
+       if (src_model->get_dynamic_extents ()
+ 	  != dst_model->get_dynamic_extents ())
+ 	{
+ 	  unsigned i;
+ 	  const region *reg;
+ 	  FOR_EACH_VEC_ELT (interest->m_region_creation, i, reg)
+ 	    {
+ 	      const region *base_reg = reg->get_base_region ();
+ 	      const svalue *old_extents
+ 		= src_model->get_dynamic_extents (base_reg);
+ 	      const svalue *new_extents
+ 		= dst_model->get_dynamic_extents (base_reg);
+ 	      if (old_extents == NULL && new_extents != NULL)
+ 		switch (base_reg->get_kind ())
+ 		  {
+ 		  default:
+ 		    break;
+ 		  case RK_HEAP_ALLOCATED:
+ 		  case RK_ALLOCA:
+ 		    emission_path->add_region_creation_event
+ 		      (reg,
+ 		       src_point.get_location (),
+ 		       src_point.get_fndecl (),
+ 		       src_stack_depth);
+ 		    break;
+ 		  }
+ 	    }
+ 	}
+     }
+ 
    if (pb.get_feasibility_problem ()
        && &pb.get_feasibility_problem ()->m_eedge == &eedge)
      {
*************** diagnostic_manager::add_events_for_eedge
*** 1587,1593 ****
  		 "this path would have been rejected as infeasible"
  		 " at this edge: ");
        pb.get_feasibility_problem ()->dump_to_pp (&pp);
!       emission_path->add_event (new custom_event
  				(dst_point.get_location (),
  				 dst_point.get_fndecl (),
  				 dst_stack_depth,
--- 1894,1900 ----
  		 "this path would have been rejected as infeasible"
  		 " at this edge: ");
        pb.get_feasibility_problem ()->dump_to_pp (&pp);
!       emission_path->add_event (new precanned_custom_event
  				(dst_point.get_location (),
  				 dst_point.get_fndecl (),
  				 dst_stack_depth,
*************** diagnostic_manager::prune_for_sm_diagnos
*** 1877,1882 ****
--- 2184,2193 ----
  	  }
  	  break;
  
+ 	case EK_REGION_CREATION:
+ 	  /* Don't filter these.  */
+ 	  break;
+ 
  	case EK_FUNCTION_ENTRY:
  	  if (m_verbosity < 1)
  	    {
*************** diagnostic_manager::prune_for_sm_diagnos
*** 1968,1985 ****
  	case EK_CALL_EDGE:
  	  {
  	    call_event *event = (call_event *)base_event;
- 	    const callgraph_superedge& cg_superedge
- 	      = event->get_callgraph_superedge ();
  	    const region_model *callee_model
  	      = event->m_eedge.m_dest->get_state ().m_region_model;
  	    tree callee_var = callee_model->get_representative_tree (sval);
- 	    /* We could just use caller_model->get_representative_tree (sval);
- 	       to get the caller_var, but for now use
- 	       map_expr_from_callee_to_caller so as to only record critical
- 	       state for parms and the like.  */
  	    callsite_expr expr;
! 	    tree caller_var
! 	      = cg_superedge.map_expr_from_callee_to_caller (callee_var, &expr);
  	    if (caller_var)
  	      {
  		if (get_logger ())
--- 2279,2306 ----
  	case EK_CALL_EDGE:
  	  {
  	    call_event *event = (call_event *)base_event;
  	    const region_model *callee_model
  	      = event->m_eedge.m_dest->get_state ().m_region_model;
+ 	    const region_model *caller_model
+ 	      = event->m_eedge.m_src->get_state ().m_region_model;
  	    tree callee_var = callee_model->get_representative_tree (sval);
  	    callsite_expr expr;
! 
! 	    tree caller_var;
!             if(event->m_sedge)
!               {
!                 const callgraph_superedge& cg_superedge
!                   = event->get_callgraph_superedge ();
!                 if (cg_superedge.m_cedge)
! 	          caller_var
! 	            = cg_superedge.map_expr_from_callee_to_caller (callee_var,
!                                                                    &expr);
!                 else
!                   caller_var = caller_model->get_representative_tree (sval);
!               }
!             else
! 	      caller_var = caller_model->get_representative_tree (sval);
! 
  	    if (caller_var)
  	      {
  		if (get_logger ())
*************** diagnostic_manager::prune_for_sm_diagnos
*** 2001,2015 ****
  	    if (sval)
  	      {
  		return_event *event = (return_event *)base_event;
! 		const callgraph_superedge& cg_superedge
! 		  = event->get_callgraph_superedge ();
! 		const region_model *caller_model
! 		  = event->m_eedge.m_dest->get_state ().m_region_model;
! 		tree caller_var = caller_model->get_representative_tree (sval);
  		callsite_expr expr;
! 		tree callee_var
! 		  = cg_superedge.map_expr_from_caller_to_callee (caller_var,
! 								 &expr);
  		if (callee_var)
  		  {
  		    if (get_logger ())
--- 2322,2349 ----
  	    if (sval)
  	      {
  		return_event *event = (return_event *)base_event;
!                 const region_model *caller_model
!                   = event->m_eedge.m_dest->get_state ().m_region_model;
!                 tree caller_var = caller_model->get_representative_tree (sval);
!                 const region_model *callee_model
!                   = event->m_eedge.m_src->get_state ().m_region_model;
  		callsite_expr expr;
! 
!                 tree callee_var;
!                 if (event->m_sedge)
!                   {
!                     const callgraph_superedge& cg_superedge
!                       = event->get_callgraph_superedge ();
!                     if (cg_superedge.m_cedge)
!                       callee_var
!                         = cg_superedge.map_expr_from_caller_to_callee (caller_var,
!                                                                        &expr);
!                     else
!                       callee_var = callee_model->get_representative_tree (sval);
!                   }
!                 else
!                   callee_var = callee_model->get_representative_tree (sval);
! 
  		if (callee_var)
  		  {
  		    if (get_logger ())
diff -Nrcpad gcc-11.3.0/gcc/analyzer/diagnostic-manager.h gcc-12.1.0/gcc/analyzer/diagnostic-manager.h
*** gcc-11.3.0/gcc/analyzer/diagnostic-manager.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/diagnostic-manager.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for saving, deduplicating, and emitting analyzer diagnostics.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for saving, deduplicating, and emitting analyzer diagnostics.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** public:
*** 42,47 ****
--- 42,49 ----
  
    bool operator== (const saved_diagnostic &other) const;
  
+   void add_note (pending_note *pn);
+ 
    json::object *to_json () const;
  
    const feasibility_problem *get_feasibility_problem () const
*************** public:
*** 58,63 ****
--- 60,69 ----
  
    unsigned get_index () const { return m_idx; }
  
+   bool supercedes_p (const saved_diagnostic &other) const;
+ 
+   void emit_any_notes () const;
+ 
    //private:
    const state_machine *m_sm;
    const exploded_node *m_enode;
*************** private:
*** 78,83 ****
--- 84,90 ----
    feasibility_problem *m_problem; // owned
  
    auto_vec<const saved_diagnostic *> m_duplicates;
+   auto_delete_vec <pending_note> m_notes;
  };
  
  class path_builder;
*************** public:
*** 100,106 ****
  
    json::object *to_json () const;
  
!   void add_diagnostic (const state_machine *sm,
  		       exploded_node *enode,
  		       const supernode *snode, const gimple *stmt,
  		       stmt_finder *finder,
--- 107,113 ----
  
    json::object *to_json () const;
  
!   bool add_diagnostic (const state_machine *sm,
  		       exploded_node *enode,
  		       const supernode *snode, const gimple *stmt,
  		       stmt_finder *finder,
*************** public:
*** 109,119 ****
  		       state_machine::state_t state,
  		       pending_diagnostic *d);
  
!   void add_diagnostic (exploded_node *enode,
  		       const supernode *snode, const gimple *stmt,
  		       stmt_finder *finder,
  		       pending_diagnostic *d);
  
    void emit_saved_diagnostics (const exploded_graph &eg);
  
    void emit_saved_diagnostic (const exploded_graph &eg,
--- 116,128 ----
  		       state_machine::state_t state,
  		       pending_diagnostic *d);
  
!   bool add_diagnostic (exploded_node *enode,
  		       const supernode *snode, const gimple *stmt,
  		       stmt_finder *finder,
  		       pending_diagnostic *d);
  
+   void add_note (pending_note *pn);
+ 
    void emit_saved_diagnostics (const exploded_graph &eg);
  
    void emit_saved_diagnostic (const exploded_graph &eg,
*************** private:
*** 139,145 ****
  
    void add_events_for_eedge (const path_builder &pb,
  			     const exploded_edge &eedge,
! 			     checker_path *emission_path) const;
  
    bool significant_edge_p (const path_builder &pb,
  			   const exploded_edge &eedge) const;
--- 148,155 ----
  
    void add_events_for_eedge (const path_builder &pb,
  			     const exploded_edge &eedge,
! 			     checker_path *emission_path,
! 			     interesting_t *interest) const;
  
    bool significant_edge_p (const path_builder &pb,
  			   const exploded_edge &eedge) const;
*************** private:
*** 169,174 ****
--- 179,185 ----
    engine *m_eng;
    auto_delete_vec<saved_diagnostic> m_saved_diagnostics;
    const int m_verbosity;
+   int m_num_disabled_diagnostics;
  };
  
  } // namespace ana
diff -Nrcpad gcc-11.3.0/gcc/analyzer/engine.cc gcc-12.1.0/gcc/analyzer/engine.cc
*** gcc-11.3.0/gcc/analyzer/engine.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/engine.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* The analysis "engine".
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* The analysis "engine".
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 19,24 ****
--- 19,25 ----
  <http://www.gnu.org/licenses/>.  */
  
  #include "config.h"
+ #define INCLUDE_MEMORY
  #include "system.h"
  #include "coretypes.h"
  #include "tree.h"
*************** along with GCC; see the file COPYING3.
*** 62,70 ****
--- 63,76 ----
  #include "analyzer/checker-path.h"
  #include "analyzer/state-purge.h"
  #include "analyzer/bar-chart.h"
+ #include "analyzer/call-info.h"
  #include <zlib.h>
  #include "plugin.h"
  #include "target.h"
+ #include <memory>
+ #include "stringpool.h"
+ #include "attribs.h"
+ #include "tree-dfa.h"
  
  /* For an overview, see gcc/doc/analyzer.texi.  */
  
*************** impl_region_model_context (exploded_grap
*** 80,85 ****
--- 86,92 ----
  			   const program_state *old_state,
  			   program_state *new_state,
  			   uncertainty_t *uncertainty,
+ 			   path_context *path_ctxt,
  			   const gimple *stmt,
  			   stmt_finder *stmt_finder)
  : m_eg (&eg), m_logger (eg.get_logger ()),
*************** impl_region_model_context (exploded_grap
*** 89,95 ****
    m_stmt (stmt),
    m_stmt_finder (stmt_finder),
    m_ext_state (eg.get_ext_state ()),
!   m_uncertainty (uncertainty)
  {
  }
  
--- 96,103 ----
    m_stmt (stmt),
    m_stmt_finder (stmt_finder),
    m_ext_state (eg.get_ext_state ()),
!   m_uncertainty (uncertainty),
!   m_path_ctxt (path_ctxt)
  {
  }
  
*************** impl_region_model_context (program_state
*** 104,130 ****
    m_stmt (NULL),
    m_stmt_finder (NULL),
    m_ext_state (ext_state),
!   m_uncertainty (uncertainty)
  {
  }
  
! void
  impl_region_model_context::warn (pending_diagnostic *d)
  {
    LOG_FUNC (get_logger ());
    if (m_eg)
!     m_eg->get_diagnostic_manager ().add_diagnostic
        (m_enode_for_diag, m_enode_for_diag->get_supernode (),
         m_stmt, m_stmt_finder, d);
  }
  
  void
  impl_region_model_context::on_svalue_leak (const svalue *sval)
  
  {
!   int sm_idx;
!   sm_state_map *smap;
!   FOR_EACH_VEC_ELT (m_new_state->m_checker_states, sm_idx, smap)
      smap->on_svalue_leak (sval, this);
  }
  
--- 112,159 ----
    m_stmt (NULL),
    m_stmt_finder (NULL),
    m_ext_state (ext_state),
!   m_uncertainty (uncertainty),
!   m_path_ctxt (NULL)
  {
  }
  
! bool
  impl_region_model_context::warn (pending_diagnostic *d)
  {
    LOG_FUNC (get_logger ());
+   if (m_stmt == NULL && m_stmt_finder == NULL)
+     {
+       if (get_logger ())
+ 	get_logger ()->log ("rejecting diagnostic: no stmt");
+       delete d;
+       return false;
+     }
    if (m_eg)
!     return m_eg->get_diagnostic_manager ().add_diagnostic
        (m_enode_for_diag, m_enode_for_diag->get_supernode (),
         m_stmt, m_stmt_finder, d);
+   else
+     {
+       delete d;
+       return false;
+     }
+ }
+ 
+ void
+ impl_region_model_context::add_note (pending_note *pn)
+ {
+   LOG_FUNC (get_logger ());
+   if (m_eg)
+     m_eg->get_diagnostic_manager ().add_note (pn);
+   else
+     delete pn;
  }
  
  void
  impl_region_model_context::on_svalue_leak (const svalue *sval)
  
  {
!   for (sm_state_map *smap : m_new_state->m_checker_states)
      smap->on_svalue_leak (sval, this);
  }
  
*************** impl_region_model_context::
*** 133,141 ****
  on_liveness_change (const svalue_set &live_svalues,
  		    const region_model *model)
  {
!   int sm_idx;
!   sm_state_map *smap;
!   FOR_EACH_VEC_ELT (m_new_state->m_checker_states, sm_idx, smap)
      smap->on_liveness_change (live_svalues, model, this);
  }
  
--- 162,168 ----
  on_liveness_change (const svalue_set &live_svalues,
  		    const region_model *model)
  {
!   for (sm_state_map *smap : m_new_state->m_checker_states)
      smap->on_liveness_change (live_svalues, model, this);
  }
  
*************** void
*** 143,151 ****
  impl_region_model_context::on_unknown_change (const svalue *sval,
  					      bool is_mutable)
  {
!   int sm_idx;
!   sm_state_map *smap;
!   FOR_EACH_VEC_ELT (m_new_state->m_checker_states, sm_idx, smap)
      smap->on_unknown_change (sval, is_mutable, m_ext_state);
  }
  
--- 170,176 ----
  impl_region_model_context::on_unknown_change (const svalue *sval,
  					      bool is_mutable)
  {
!   for (sm_state_map *smap : m_new_state->m_checker_states)
      smap->on_unknown_change (sval, is_mutable, m_ext_state);
  }
  
*************** impl_region_model_context::get_uncertain
*** 161,166 ****
--- 186,253 ----
    return m_uncertainty;
  }
  
+ /* Purge state involving SVAL.  The region_model has already been purged,
+    so we only need to purge other state in the program_state:
+    the sm-state.  */
+ 
+ void
+ impl_region_model_context::purge_state_involving (const svalue *sval)
+ {
+   int i;
+   sm_state_map *smap;
+   FOR_EACH_VEC_ELT (m_new_state->m_checker_states, i, smap)
+     smap->purge_state_involving (sval, m_ext_state);
+ }
+ 
+ void
+ impl_region_model_context::bifurcate (custom_edge_info *info)
+ {
+   if (m_path_ctxt)
+     m_path_ctxt->bifurcate (info);
+   else
+     delete info;
+ }
+ 
+ void
+ impl_region_model_context::terminate_path ()
+ {
+   if (m_path_ctxt)
+     return m_path_ctxt->terminate_path ();
+ }
+ 
+ bool
+ impl_region_model_context::get_malloc_map (sm_state_map **out_smap,
+ 					   const state_machine **out_sm,
+ 					   unsigned *out_sm_idx)
+ {
+   unsigned malloc_sm_idx;
+   if (!m_ext_state.get_sm_idx_by_name ("malloc", &malloc_sm_idx))
+     return false;
+ 
+   *out_smap = m_new_state->m_checker_states[malloc_sm_idx];
+   *out_sm = &m_ext_state.get_sm (malloc_sm_idx);
+   *out_sm_idx = malloc_sm_idx;
+   return true;
+ }
+ 
+ bool
+ impl_region_model_context::get_taint_map (sm_state_map **out_smap,
+ 					  const state_machine **out_sm,
+ 					  unsigned *out_sm_idx)
+ {
+   if (!m_new_state)
+     return false;
+ 
+   unsigned taint_sm_idx;
+   if (!m_ext_state.get_sm_idx_by_name ("taint", &taint_sm_idx))
+     return false;
+ 
+   *out_smap = m_new_state->m_checker_states[taint_sm_idx];
+   *out_sm = &m_ext_state.get_sm (taint_sm_idx);
+   *out_sm_idx = taint_sm_idx;
+   return true;
+ }
+ 
  /* struct setjmp_record.  */
  
  int
*************** public:
*** 215,227 ****
  		   program_state *new_state,
  		   const sm_state_map *old_smap,
  		   sm_state_map *new_smap,
! 		   stmt_finder *stmt_finder = NULL)
    : sm_context (sm_idx, sm),
      m_logger (eg.get_logger ()),
      m_eg (eg), m_enode_for_diag (enode_for_diag),
      m_old_state (old_state), m_new_state (new_state),
      m_old_smap (old_smap), m_new_smap (new_smap),
!     m_stmt_finder (stmt_finder)
    {
    }
  
--- 302,318 ----
  		   program_state *new_state,
  		   const sm_state_map *old_smap,
  		   sm_state_map *new_smap,
! 		   path_context *path_ctxt,
! 		   stmt_finder *stmt_finder = NULL,
! 		   bool unknown_side_effects = false)
    : sm_context (sm_idx, sm),
      m_logger (eg.get_logger ()),
      m_eg (eg), m_enode_for_diag (enode_for_diag),
      m_old_state (old_state), m_new_state (new_state),
      m_old_smap (old_smap), m_new_smap (new_smap),
!     m_path_ctxt (path_ctxt),
!     m_stmt_finder (stmt_finder),
!     m_unknown_side_effects (unknown_side_effects)
    {
    }
  
*************** public:
*** 230,256 ****
    tree get_fndecl_for_call (const gcall *call) FINAL OVERRIDE
    {
      impl_region_model_context old_ctxt
!       (m_eg, m_enode_for_diag, NULL, NULL/*m_enode->get_state ()*/,
         NULL, call);
      region_model *model = m_new_state->m_region_model;
      return model->get_fndecl_for_call (call, &old_ctxt);
    }
  
!   state_machine::state_t get_state (const gimple *stmt,
  				    tree var)
    {
      logger * const logger = get_logger ();
      LOG_FUNC (logger);
!     impl_region_model_context old_ctxt
!       (m_eg, m_enode_for_diag, NULL, NULL/*m_enode->get_state ()*/,
!        NULL, stmt);
      const svalue *var_old_sval
!       = m_old_state->m_region_model->get_rvalue (var, &old_ctxt);
  
      state_machine::state_t current
        = m_old_smap->get_state (var_old_sval, m_eg.get_ext_state ());
      return current;
    }
  
    void set_next_state (const gimple *stmt,
  		       tree var,
--- 321,356 ----
    tree get_fndecl_for_call (const gcall *call) FINAL OVERRIDE
    {
      impl_region_model_context old_ctxt
!       (m_eg, m_enode_for_diag, NULL, NULL, NULL/*m_enode->get_state ()*/,
         NULL, call);
      region_model *model = m_new_state->m_region_model;
      return model->get_fndecl_for_call (call, &old_ctxt);
    }
  
!   state_machine::state_t get_state (const gimple *stmt ATTRIBUTE_UNUSED,
  				    tree var)
    {
      logger * const logger = get_logger ();
      LOG_FUNC (logger);
!     /* Use NULL ctxt on this get_rvalue call to avoid triggering
!        uninitialized value warnings.  */
      const svalue *var_old_sval
!       = m_old_state->m_region_model->get_rvalue (var, NULL);
  
      state_machine::state_t current
        = m_old_smap->get_state (var_old_sval, m_eg.get_ext_state ());
      return current;
    }
+   state_machine::state_t get_state (const gimple *stmt ATTRIBUTE_UNUSED,
+ 				    const svalue *sval)
+   {
+     logger * const logger = get_logger ();
+     LOG_FUNC (logger);
+     state_machine::state_t current
+       = m_old_smap->get_state (sval, m_eg.get_ext_state ());
+     return current;
+   }
+ 
  
    void set_next_state (const gimple *stmt,
  		       tree var,
*************** public:
*** 259,281 ****
    {
      logger * const logger = get_logger ();
      LOG_FUNC (logger);
-     impl_region_model_context old_ctxt
-       (m_eg, m_enode_for_diag, NULL, NULL/*m_enode->get_state ()*/,
-        NULL, stmt);
-     const svalue *var_old_sval
-       = m_old_state->m_region_model->get_rvalue (var, &old_ctxt);
- 
      impl_region_model_context new_ctxt (m_eg, m_enode_for_diag,
  					m_old_state, m_new_state,
! 					NULL,
  					stmt);
      const svalue *var_new_sval
        = m_new_state->m_region_model->get_rvalue (var, &new_ctxt);
      const svalue *origin_new_sval
        = m_new_state->m_region_model->get_rvalue (origin, &new_ctxt);
  
      state_machine::state_t current
!       = m_old_smap->get_state (var_old_sval, m_eg.get_ext_state ());
      if (logger)
        logger->log ("%s: state transition of %qE: %s -> %s",
  		   m_sm.get_name (),
--- 359,376 ----
    {
      logger * const logger = get_logger ();
      LOG_FUNC (logger);
      impl_region_model_context new_ctxt (m_eg, m_enode_for_diag,
  					m_old_state, m_new_state,
! 					NULL, NULL,
  					stmt);
      const svalue *var_new_sval
        = m_new_state->m_region_model->get_rvalue (var, &new_ctxt);
      const svalue *origin_new_sval
        = m_new_state->m_region_model->get_rvalue (origin, &new_ctxt);
  
+     /* We use the new sval here to avoid issues with uninitialized values.  */
      state_machine::state_t current
!       = m_old_smap->get_state (var_new_sval, m_eg.get_ext_state ());
      if (logger)
        logger->log ("%s: state transition of %qE: %s -> %s",
  		   m_sm.get_name (),
*************** public:
*** 286,298 ****
  			   to, origin_new_sval, m_eg.get_ext_state ());
    }
  
    void warn (const supernode *snode, const gimple *stmt,
  	     tree var, pending_diagnostic *d) FINAL OVERRIDE
    {
      LOG_FUNC (get_logger ());
      gcc_assert (d); // take ownership
      impl_region_model_context old_ctxt
!       (m_eg, m_enode_for_diag, m_old_state, m_new_state, NULL, NULL);
  
      const svalue *var_old_sval
        = m_old_state->m_region_model->get_rvalue (var, &old_ctxt);
--- 381,428 ----
  			   to, origin_new_sval, m_eg.get_ext_state ());
    }
  
+   void set_next_state (const gimple *stmt,
+ 		       const svalue *sval,
+ 		       state_machine::state_t to,
+ 		       tree origin)
+   {
+     logger * const logger = get_logger ();
+     LOG_FUNC (logger);
+     impl_region_model_context old_ctxt
+       (m_eg, m_enode_for_diag, NULL, NULL, NULL/*m_enode->get_state ()*/,
+        NULL, stmt);
+ 
+     impl_region_model_context new_ctxt (m_eg, m_enode_for_diag,
+ 					m_old_state, m_new_state,
+ 					NULL, NULL,
+ 					stmt);
+     const svalue *origin_new_sval
+       = m_new_state->m_region_model->get_rvalue (origin, &new_ctxt);
+ 
+     state_machine::state_t current
+       = m_old_smap->get_state (sval, m_eg.get_ext_state ());
+     if (logger)
+       {
+ 	logger->start_log_line ();
+ 	logger->log_partial ("%s: state transition of ",
+ 			     m_sm.get_name ());
+ 	sval->dump_to_pp (logger->get_printer (), true);
+ 	logger->log_partial (": %s -> %s",
+ 			     current->get_name (),
+ 			     to->get_name ());
+ 	logger->end_log_line ();
+       }
+     m_new_smap->set_state (m_new_state->m_region_model, sval,
+ 			   to, origin_new_sval, m_eg.get_ext_state ());
+   }
+ 
    void warn (const supernode *snode, const gimple *stmt,
  	     tree var, pending_diagnostic *d) FINAL OVERRIDE
    {
      LOG_FUNC (get_logger ());
      gcc_assert (d); // take ownership
      impl_region_model_context old_ctxt
!       (m_eg, m_enode_for_diag, m_old_state, m_new_state, NULL, NULL, NULL);
  
      const svalue *var_old_sval
        = m_old_state->m_region_model->get_rvalue (var, &old_ctxt);
*************** public:
*** 329,334 ****
--- 459,469 ----
        return expr;
    }
  
+   tree get_diagnostic_tree (const svalue *sval) FINAL OVERRIDE
+   {
+     return m_new_state->m_region_model->get_representative_tree (sval);
+   }
+ 
    state_machine::state_t get_global_state () const FINAL OVERRIDE
    {
      return m_old_state->m_checker_states[m_sm_idx]->get_global_state ();
*************** public:
*** 352,358 ****
      if (!assign_stmt)
       return NULL_TREE;
      impl_region_model_context old_ctxt
!       (m_eg, m_enode_for_diag, m_old_state, m_new_state, NULL, stmt);
      if (const svalue *sval
  	= m_new_state->m_region_model->get_gassign_result (assign_stmt,
  							    &old_ctxt))
--- 487,493 ----
      if (!assign_stmt)
       return NULL_TREE;
      impl_region_model_context old_ctxt
!       (m_eg, m_enode_for_diag, m_old_state, m_new_state, NULL, NULL, stmt);
      if (const svalue *sval
  	= m_new_state->m_region_model->get_gassign_result (assign_stmt,
  							    &old_ctxt))
*************** public:
*** 362,367 ****
--- 497,517 ----
      return NULL_TREE;
    }
  
+   path_context *get_path_context () const FINAL OVERRIDE
+   {
+     return m_path_ctxt;
+   }
+ 
+   bool unknown_side_effects_p () const FINAL OVERRIDE
+   {
+     return m_unknown_side_effects;
+   }
+ 
+   const program_state *get_old_program_state () const FINAL OVERRIDE
+   {
+     return m_old_state;
+   }
+ 
    log_user m_logger;
    exploded_graph &m_eg;
    exploded_node *m_enode_for_diag;
*************** public:
*** 369,375 ****
--- 519,529 ----
    program_state *m_new_state;
    const sm_state_map *m_old_smap;
    sm_state_map *m_new_smap;
+   path_context *m_path_ctxt;
    stmt_finder *m_stmt_finder;
+ 
+   /* Are we handling an external function with unknown side effects?  */
+   bool m_unknown_side_effects;
  };
  
  /* Subclass of stmt_finder for finding the best stmt to report the leak at,
*************** readability (const_tree expr)
*** 483,491 ****
      case SSA_NAME:
        {
  	if (tree var = SSA_NAME_VAR (expr))
! 	  /* Slightly favor the underlying var over the SSA name to
! 	     avoid having them compare equal.  */
! 	  return readability (var) - 1;
  	/* Avoid printing '<unknown>' for SSA names for temporaries.  */
  	return -1;
        }
--- 637,658 ----
      case SSA_NAME:
        {
  	if (tree var = SSA_NAME_VAR (expr))
! 	  {
! 	    if (DECL_ARTIFICIAL (var))
! 	      {
! 		/* If we have an SSA name for an artificial var,
! 		   only use it if it has a debug expr associated with
! 		   it that fixup_tree_for_diagnostic can use.  */
! 		if (VAR_P (var) && DECL_HAS_DEBUG_EXPR_P (var))
! 		  return readability (DECL_DEBUG_EXPR (var)) - 1;
! 	      }
! 	    else
! 	      {
! 		/* Slightly favor the underlying var over the SSA name to
! 		   avoid having them compare equal.  */
! 		return readability (var) - 1;
! 	      }
! 	  }
  	/* Avoid printing '<unknown>' for SSA names for temporaries.  */
  	return -1;
        }
*************** readability_comparator (const void *p1,
*** 580,585 ****
--- 747,797 ----
    return 0;
  }
  
+ /* Return true is SNODE is the EXIT node of a function, or is one
+    of the final snodes within its function.
+ 
+    Specifically, handle the final supernodes before the EXIT node,
+    for the case of clobbers that happen immediately before exiting.
+    We need a run of snodes leading to the return_p snode, where all edges are
+    intraprocedural, and every snode has just one successor.
+ 
+    We use this when suppressing leak reports at the end of "main".  */
+ 
+ static bool
+ returning_from_function_p (const supernode *snode)
+ {
+   if (!snode)
+     return false;
+ 
+   unsigned count = 0;
+   const supernode *iter = snode;
+   while (true)
+     {
+       if (iter->return_p ())
+ 	return true;
+       if (iter->m_succs.length () != 1)
+ 	return false;
+       const superedge *sedge = iter->m_succs[0];
+       if (sedge->get_kind () != SUPEREDGE_CFG_EDGE)
+ 	return false;
+       iter = sedge->m_dest;
+ 
+       /* Impose a limit to ensure we terminate for pathological cases.
+ 
+ 	 We only care about the final 3 nodes, due to cases like:
+ 	   BB:
+ 	     (clobber causing leak)
+ 
+ 	   BB:
+ 	   <label>:
+ 	   return _val;
+ 
+ 	   EXIT BB.*/
+       if (++count > 3)
+ 	return false;
+     }
+ }
+ 
  /* Find the best tree for SVAL and call SM's on_leak vfunc with it.
     If on_leak returns a pending_diagnostic, queue it up to be reported,
     so that we potentially complain about a leak of SVAL in the given STATE.  */
*************** impl_region_model_context::on_state_leak
*** 634,641 ****
    gcc_assert (m_enode_for_diag);
  
    /* Don't complain about leaks when returning from "main".  */
!   if (m_enode_for_diag->get_supernode ()
!       && m_enode_for_diag->get_supernode ()->return_p ())
      {
        tree fndecl = m_enode_for_diag->get_function ()->decl;
        if (id_equal (DECL_NAME (fndecl), "main"))
--- 846,852 ----
    gcc_assert (m_enode_for_diag);
  
    /* Don't complain about leaks when returning from "main".  */
!   if (returning_from_function_p (m_enode_for_diag->get_supernode ()))
      {
        tree fndecl = m_enode_for_diag->get_function ()->decl;
        if (id_equal (DECL_NAME (fndecl), "main"))
*************** impl_region_model_context::on_state_leak
*** 660,666 ****
     state transitions.  */
  
  void
! impl_region_model_context::on_condition (tree lhs, enum tree_code op, tree rhs)
  {
    int sm_idx;
    sm_state_map *smap;
--- 871,879 ----
     state transitions.  */
  
  void
! impl_region_model_context::on_condition (const svalue *lhs,
! 					 enum tree_code op,
! 					 const svalue *rhs)
  {
    int sm_idx;
    sm_state_map *smap;
*************** impl_region_model_context::on_condition
*** 670,678 ****
        impl_sm_context sm_ctxt (*m_eg, sm_idx, sm, m_enode_for_diag,
  			       m_old_state, m_new_state,
  			       m_old_state->m_checker_states[sm_idx],
! 			       m_new_state->m_checker_states[sm_idx]);
        sm.on_condition (&sm_ctxt,
! 		       m_enode_for_diag->get_supernode (), m_stmt,
  		       lhs, op, rhs);
      }
  }
--- 883,895 ----
        impl_sm_context sm_ctxt (*m_eg, sm_idx, sm, m_enode_for_diag,
  			       m_old_state, m_new_state,
  			       m_old_state->m_checker_states[sm_idx],
! 			       m_new_state->m_checker_states[sm_idx],
! 			       m_path_ctxt);
        sm.on_condition (&sm_ctxt,
! 		       (m_enode_for_diag
! 			? m_enode_for_diag->get_supernode ()
! 			: NULL),
! 		       m_stmt,
  		       lhs, op, rhs);
      }
  }
*************** impl_region_model_context::on_phi (const
*** 692,698 ****
        impl_sm_context sm_ctxt (*m_eg, sm_idx, sm, m_enode_for_diag,
  			       m_old_state, m_new_state,
  			       m_old_state->m_checker_states[sm_idx],
! 			       m_new_state->m_checker_states[sm_idx]);
        sm.on_phi (&sm_ctxt, m_enode_for_diag->get_supernode (), phi, rhs);
      }
  }
--- 909,916 ----
        impl_sm_context sm_ctxt (*m_eg, sm_idx, sm, m_enode_for_diag,
  			       m_old_state, m_new_state,
  			       m_old_state->m_checker_states[sm_idx],
! 			       m_new_state->m_checker_states[sm_idx],
! 			       m_path_ctxt);
        sm.on_phi (&sm_ctxt, m_enode_for_diag->get_supernode (), phi, rhs);
      }
  }
*************** fndecl_has_gimple_body_p (tree fndecl)
*** 1101,1126 ****
  
  namespace ana {
  
- /* A pending_diagnostic subclass for implementing "__analyzer_dump_path".  */
- 
- class dump_path_diagnostic
-   : public pending_diagnostic_subclass<dump_path_diagnostic>
- {
- public:
-   bool emit (rich_location *richloc) FINAL OVERRIDE
-   {
-     inform (richloc, "path");
-     return true;
-   }
- 
-   const char *get_kind () const FINAL OVERRIDE { return "dump_path_diagnostic"; }
- 
-   bool operator== (const dump_path_diagnostic &) const
-   {
-     return true;
-   }
- };
- 
  /* Modify STATE in place, applying the effects of the stmt at this node's
     point.  */
  
--- 1319,1324 ----
*************** exploded_node::on_stmt (exploded_graph &
*** 1129,1135 ****
  			const supernode *snode,
  			const gimple *stmt,
  			program_state *state,
! 			uncertainty_t *uncertainty)
  {
    logger *logger = eg.get_logger ();
    LOG_SCOPE (logger);
--- 1327,1334 ----
  			const supernode *snode,
  			const gimple *stmt,
  			program_state *state,
! 			uncertainty_t *uncertainty,
! 			path_context *path_ctxt)
  {
    logger *logger = eg.get_logger ();
    LOG_SCOPE (logger);
*************** exploded_node::on_stmt (exploded_graph &
*** 1154,1250 ****
  
    impl_region_model_context ctxt (eg, this,
  				  &old_state, state, uncertainty,
! 				  stmt);
  
    bool unknown_side_effects = false;
    bool terminate_path = false;
  
!   switch (gimple_code (stmt))
!     {
!     default:
!       /* No-op for now.  */
!       break;
! 
!     case GIMPLE_ASSIGN:
!       {
! 	const gassign *assign = as_a <const gassign *> (stmt);
! 	state->m_region_model->on_assignment (assign, &ctxt);
!       }
!       break;
! 
!     case GIMPLE_ASM:
!       /* No-op for now.  */
!       break;
! 
!     case GIMPLE_CALL:
!       {
! 	/* Track whether we have a gcall to a function that's not recognized by
! 	   anything, for which we don't have a function body, or for which we
! 	   don't know the fndecl.  */
! 	const gcall *call = as_a <const gcall *> (stmt);
! 
! 	/* Debugging/test support.  */
! 	if (is_special_named_call_p (call, "__analyzer_describe", 2))
! 	  state->m_region_model->impl_call_analyzer_describe (call, &ctxt);
! 	else if (is_special_named_call_p (call, "__analyzer_dump", 0))
! 	  {
! 	    /* Handle the builtin "__analyzer_dump" by dumping state
! 	       to stderr.  */
! 	    state->dump (eg.get_ext_state (), true);
! 	  }
! 	else if (is_special_named_call_p (call, "__analyzer_dump_path", 0))
! 	  {
! 	    /* Handle the builtin "__analyzer_dump_path" by queuing a
! 	       diagnostic at this exploded_node.  */
! 	    ctxt.warn (new dump_path_diagnostic ());
! 	  }
! 	else if (is_special_named_call_p (call, "__analyzer_dump_region_model",
! 					  0))
! 	  {
! 	    /* Handle the builtin "__analyzer_dump_region_model" by dumping
! 	       the region model's state to stderr.  */
! 	    state->m_region_model->dump (false);
! 	  }
! 	else if (is_special_named_call_p (call, "__analyzer_eval", 1))
! 	  state->m_region_model->impl_call_analyzer_eval (call, &ctxt);
! 	else if (is_special_named_call_p (call, "__analyzer_break", 0))
! 	  {
! 	    /* Handle the builtin "__analyzer_break" by triggering a
! 	       breakpoint.  */
! 	    /* TODO: is there a good cross-platform way to do this?  */
! 	    raise (SIGINT);
! 	  }
! 	else if (is_special_named_call_p (call,
! 					  "__analyzer_dump_exploded_nodes",
! 					  1))
! 	  {
! 	    /* This is handled elsewhere.  */
! 	  }
! 	else if (is_setjmp_call_p (call))
! 	  state->m_region_model->on_setjmp (call, this, &ctxt);
! 	else if (is_longjmp_call_p (call))
! 	  {
! 	    on_longjmp (eg, call, state, &ctxt);
! 	    return on_stmt_flags::terminate_path ();
! 	  }
! 	else
! 	  unknown_side_effects
! 	    = state->m_region_model->on_call_pre (call, &ctxt, &terminate_path);
!       }
!       break;
! 
!     case GIMPLE_RETURN:
!       {
! 	const greturn *return_ = as_a <const greturn *> (stmt);
! 	state->m_region_model->on_return (return_, &ctxt);
!       }
!       break;
!     }
  
    if (terminate_path)
      return on_stmt_flags::terminate_path ();
  
-   bool any_sm_changes = false;
    int sm_idx;
    sm_state_map *smap;
    FOR_EACH_VEC_ELT (old_state.m_checker_states, sm_idx, smap)
--- 1353,1369 ----
  
    impl_region_model_context ctxt (eg, this,
  				  &old_state, state, uncertainty,
! 				  path_ctxt, stmt);
  
    bool unknown_side_effects = false;
    bool terminate_path = false;
  
!   on_stmt_pre (eg, stmt, state, &terminate_path,
! 	       &unknown_side_effects, &ctxt);
  
    if (terminate_path)
      return on_stmt_flags::terminate_path ();
  
    int sm_idx;
    sm_state_map *smap;
    FOR_EACH_VEC_ELT (old_state.m_checker_states, sm_idx, smap)
*************** exploded_node::on_stmt (exploded_graph &
*** 1254,1296 ****
  	= old_state.m_checker_states[sm_idx];
        sm_state_map *new_smap = state->m_checker_states[sm_idx];
        impl_sm_context sm_ctxt (eg, sm_idx, sm, this, &old_state, state,
! 			       old_smap, new_smap);
! 
!       /* If we're at the def-stmt of an SSA name, then potentially purge
! 	 any sm-state for svalues that involve that SSA name.  This avoids
! 	 false positives in loops, since a symbolic value referring to the
! 	 SSA name will be referring to the previous value of that SSA name.
! 	 For example, in:
! 	   while ((e = hashmap_iter_next(&iter))) {
! 	     struct oid2strbuf *e_strbuf = (struct oid2strbuf *)e;
! 	     free (e_strbuf->value);
! 	   }
! 	 at the def-stmt of e_8:
! 	   e_8 = hashmap_iter_next (&iter);
! 	 we should purge the "freed" state of:
! 	   INIT_VAL(CAST_REG(‘struct oid2strbuf’, (*INIT_VAL(e_8))).value)
! 	 which is the "e_strbuf->value" value from the previous iteration,
! 	 or we will erroneously report a double-free - the "e_8" within it
! 	 refers to the previous value.  */
!       if (tree lhs = gimple_get_lhs (stmt))
! 	if (TREE_CODE (lhs) == SSA_NAME)
! 	  {
! 	    const svalue *sval
! 	      = old_state.m_region_model->get_rvalue (lhs, &ctxt);
! 	    new_smap->purge_state_involving (sval, eg.get_ext_state ());
! 	  }
  
        /* Allow the state_machine to handle the stmt.  */
        if (sm.on_stmt (&sm_ctxt, snode, stmt))
  	unknown_side_effects = false;
-       if (*old_smap != *new_smap)
- 	any_sm_changes = true;
      }
  
    if (const gcall *call = dyn_cast <const gcall *> (stmt))
!     state->m_region_model->on_call_post (call, unknown_side_effects, &ctxt);
  
!   return on_stmt_flags (any_sm_changes);
  }
  
  /* Consider the effect of following superedge SUCC from this node.
--- 1373,1453 ----
  	= old_state.m_checker_states[sm_idx];
        sm_state_map *new_smap = state->m_checker_states[sm_idx];
        impl_sm_context sm_ctxt (eg, sm_idx, sm, this, &old_state, state,
! 			       old_smap, new_smap, path_ctxt, NULL,
! 			       unknown_side_effects);
  
        /* Allow the state_machine to handle the stmt.  */
        if (sm.on_stmt (&sm_ctxt, snode, stmt))
  	unknown_side_effects = false;
      }
  
+   if (path_ctxt->terminate_path_p ())
+     return on_stmt_flags::terminate_path ();
+ 
+   on_stmt_post (stmt, state, unknown_side_effects, &ctxt);
+ 
+   return on_stmt_flags ();
+ }
+ 
+ /* Handle the pre-sm-state part of STMT, modifying STATE in-place.
+    Write true to *OUT_TERMINATE_PATH if the path should be terminated.
+    Write true to *OUT_UNKNOWN_SIDE_EFFECTS if the stmt has unknown
+    side effects.  */
+ 
+ void
+ exploded_node::on_stmt_pre (exploded_graph &eg,
+ 			    const gimple *stmt,
+ 			    program_state *state,
+ 			    bool *out_terminate_path,
+ 			    bool *out_unknown_side_effects,
+ 			    region_model_context *ctxt)
+ {
+   /* Handle special-case calls that require the full program_state.  */
    if (const gcall *call = dyn_cast <const gcall *> (stmt))
!     {
!       if (is_special_named_call_p (call, "__analyzer_dump", 0))
! 	{
! 	  /* Handle the builtin "__analyzer_dump" by dumping state
! 	     to stderr.  */
! 	  state->dump (eg.get_ext_state (), true);
! 	  return;
! 	}
!       else if (is_special_named_call_p (call, "__analyzer_dump_state", 2))
! 	{
! 	  state->impl_call_analyzer_dump_state (call, eg.get_ext_state (),
! 						ctxt);
! 	  return;
! 	}
!       else if (is_setjmp_call_p (call))
! 	{
! 	  state->m_region_model->on_setjmp (call, this, ctxt);
! 	  return;
! 	}
!       else if (is_longjmp_call_p (call))
! 	{
! 	  on_longjmp (eg, call, state, ctxt);
! 	  *out_terminate_path = true;
! 	  return;
! 	}
!     }
  
!   /* Otherwise, defer to m_region_model.  */
!   state->m_region_model->on_stmt_pre (stmt,
! 				      out_terminate_path,
! 				      out_unknown_side_effects,
! 				      ctxt);
! }
! 
! /* Handle the post-sm-state part of STMT, modifying STATE in-place.  */
! 
! void
! exploded_node::on_stmt_post (const gimple *stmt,
! 			     program_state *state,
! 			     bool unknown_side_effects,
! 			     region_model_context *ctxt)
! {
!   if (const gcall *call = dyn_cast <const gcall *> (stmt))
!     state->m_region_model->on_call_post (call, unknown_side_effects, ctxt);
  }
  
  /* Consider the effect of following superedge SUCC from this node.
*************** valid_longjmp_stack_p (const program_poi
*** 1357,1363 ****
     where the enclosing function of the "setjmp" has returned (and thus
     the stack frame no longer exists).  */
  
! class stale_jmp_buf : public pending_diagnostic_subclass<dump_path_diagnostic>
  {
  public:
    stale_jmp_buf (const gcall *setjmp_call, const gcall *longjmp_call,
--- 1514,1520 ----
     where the enclosing function of the "setjmp" has returned (and thus
     the stack frame no longer exists).  */
  
! class stale_jmp_buf : public pending_diagnostic_subclass<stale_jmp_buf>
  {
  public:
    stale_jmp_buf (const gcall *setjmp_call, const gcall *longjmp_call,
*************** public:
*** 1366,1375 ****
      m_setjmp_point (setjmp_point), m_stack_pop_event (NULL)
    {}
  
    bool emit (rich_location *richloc) FINAL OVERRIDE
    {
      return warning_at
!       (richloc, OPT_Wanalyzer_stale_setjmp_buffer,
         "%qs called after enclosing function of %qs has returned",
         get_user_facing_name (m_longjmp_call),
         get_user_facing_name (m_setjmp_call));
--- 1523,1537 ----
      m_setjmp_point (setjmp_point), m_stack_pop_event (NULL)
    {}
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_stale_setjmp_buffer;
+   }
+ 
    bool emit (rich_location *richloc) FINAL OVERRIDE
    {
      return warning_at
!       (richloc, get_controlling_option (),
         "%qs called after enclosing function of %qs has returned",
         get_user_facing_name (m_longjmp_call),
         get_user_facing_name (m_setjmp_call));
*************** public:
*** 1402,1408 ****
        {
  	/* Compare with diagnostic_manager::add_events_for_superedge.  */
  	const int src_stack_depth = src_point.get_stack_depth ();
! 	m_stack_pop_event = new custom_event
  	  (src_point.get_location (),
  	   src_point.get_fndecl (),
  	   src_stack_depth,
--- 1564,1570 ----
        {
  	/* Compare with diagnostic_manager::add_events_for_superedge.  */
  	const int src_stack_depth = src_point.get_stack_depth ();
! 	m_stack_pop_event = new precanned_custom_event
  	  (src_point.get_location (),
  	   src_point.get_fndecl (),
  	   src_stack_depth,
*************** exploded_node::on_longjmp (exploded_grap
*** 1456,1462 ****
    const region *buf = new_region_model->deref_rvalue (buf_ptr_sval, buf_ptr,
  						       ctxt);
  
!   const svalue *buf_content_sval = new_region_model->get_store_value (buf);
    const setjmp_svalue *setjmp_sval
      = buf_content_sval->dyn_cast_setjmp_svalue ();
    if (!setjmp_sval)
--- 1618,1625 ----
    const region *buf = new_region_model->deref_rvalue (buf_ptr_sval, buf_ptr,
  						       ctxt);
  
!   const svalue *buf_content_sval
!     = new_region_model->get_store_value (buf, ctxt);
    const setjmp_svalue *setjmp_sval
      = buf_content_sval->dyn_cast_setjmp_svalue ();
    if (!setjmp_sval)
*************** exploded_node::detect_leaks (exploded_gr
*** 1579,1585 ****
  
    uncertainty_t uncertainty;
    impl_region_model_context ctxt (eg, this,
! 				  &old_state, &new_state, &uncertainty,
  				  get_stmt ());
    const svalue *result = NULL;
    new_state.m_region_model->pop_frame (NULL, &result, &ctxt);
--- 1742,1748 ----
  
    uncertainty_t uncertainty;
    impl_region_model_context ctxt (eg, this,
! 				  &old_state, &new_state, &uncertainty, NULL,
  				  get_stmt ());
    const svalue *result = NULL;
    new_state.m_region_model->pop_frame (NULL, &result, &ctxt);
*************** exploded_node::dump_succs_and_preds (FIL
*** 1614,1634 ****
    }
  }
  
! /* class rewind_info_t : public exploded_edge::custom_info_t.  */
  
! /* Implementation of exploded_edge::custom_info_t::update_model vfunc
     for rewind_info_t.
  
     Update state for the special-case of a rewind of a longjmp
     to a setjmp (which doesn't have a superedge, but does affect
     state).  */
  
! void
  rewind_info_t::update_model (region_model *model,
! 			     const exploded_edge &eedge)
  {
!   const program_point &longjmp_point = eedge.m_src->get_point ();
!   const program_point &setjmp_point = eedge.m_dest->get_point ();
  
    gcc_assert (longjmp_point.get_stack_depth ()
  	      >= setjmp_point.get_stack_depth ());
--- 1777,1846 ----
    }
  }
  
! /* class dynamic_call_info_t : public custom_edge_info.  */
  
! /* Implementation of custom_edge_info::update_model vfunc
!    for dynamic_call_info_t.
! 
!    Update state for the dynamically discorverd calls */
! 
! bool
! dynamic_call_info_t::update_model (region_model *model,
! 				   const exploded_edge *eedge,
! 				   region_model_context *) const
! {
!   gcc_assert (eedge);
!   const program_state &dest_state = eedge->m_dest->get_state ();
!   *model = *dest_state.m_region_model;
!   return true;
! }
! 
! /* Implementation of custom_edge_info::add_events_to_path vfunc
!    for dynamic_call_info_t.  */
! 
! void
! dynamic_call_info_t::add_events_to_path (checker_path *emission_path,
! 				   const exploded_edge &eedge) const
! {
!   const exploded_node *src_node = eedge.m_src;
!   const program_point &src_point = src_node->get_point ();
!   const int src_stack_depth = src_point.get_stack_depth ();
!   const exploded_node *dest_node = eedge.m_dest;
!   const program_point &dest_point = dest_node->get_point ();
!   const int dest_stack_depth = dest_point.get_stack_depth ();
! 
!   if (m_is_returning_call)
!     emission_path->add_event (new return_event (eedge, (m_dynamic_call
! 	                   			        ? m_dynamic_call->location
! 	           	   		                : UNKNOWN_LOCATION),
! 	          	      dest_point.get_fndecl (),
! 	          	      dest_stack_depth));
!   else
!     emission_path->add_event (new call_event (eedge, (m_dynamic_call
! 	                   			      ? m_dynamic_call->location
! 	           	   		              : UNKNOWN_LOCATION),
! 	          	      src_point.get_fndecl (),
! 	          	      src_stack_depth));
! 
! }
! 
! /* class rewind_info_t : public custom_edge_info.  */
! 
! /* Implementation of custom_edge_info::update_model vfunc
     for rewind_info_t.
  
     Update state for the special-case of a rewind of a longjmp
     to a setjmp (which doesn't have a superedge, but does affect
     state).  */
  
! bool
  rewind_info_t::update_model (region_model *model,
! 			     const exploded_edge *eedge,
! 			     region_model_context *) const
  {
!   gcc_assert (eedge);
!   const program_point &longjmp_point = eedge->m_src->get_point ();
!   const program_point &setjmp_point = eedge->m_dest->get_point ();
  
    gcc_assert (longjmp_point.get_stack_depth ()
  	      >= setjmp_point.get_stack_depth ());
*************** rewind_info_t::update_model (region_mode
*** 1636,1649 ****
    model->on_longjmp (get_longjmp_call (),
  		     get_setjmp_call (),
  		     setjmp_point.get_stack_depth (), NULL);
  }
  
! /* Implementation of exploded_edge::custom_info_t::add_events_to_path vfunc
     for rewind_info_t.  */
  
  void
  rewind_info_t::add_events_to_path (checker_path *emission_path,
! 				   const exploded_edge &eedge)
  {
    const exploded_node *src_node = eedge.m_src;
    const program_point &src_point = src_node->get_point ();
--- 1848,1862 ----
    model->on_longjmp (get_longjmp_call (),
  		     get_setjmp_call (),
  		     setjmp_point.get_stack_depth (), NULL);
+   return true;
  }
  
! /* Implementation of custom_edge_info::add_events_to_path vfunc
     for rewind_info_t.  */
  
  void
  rewind_info_t::add_events_to_path (checker_path *emission_path,
! 				   const exploded_edge &eedge) const
  {
    const exploded_node *src_node = eedge.m_src;
    const program_point &src_point = src_node->get_point ();
*************** rewind_info_t::add_events_to_path (check
*** 1670,1676 ****
  
  exploded_edge::exploded_edge (exploded_node *src, exploded_node *dest,
  			      const superedge *sedge,
! 			      custom_info_t *custom_info)
  : dedge<eg_traits> (src, dest), m_sedge (sedge),
    m_custom_info (custom_info)
  {
--- 1883,1889 ----
  
  exploded_edge::exploded_edge (exploded_node *src, exploded_node *dest,
  			      const superedge *sedge,
! 			      custom_edge_info *custom_info)
  : dedge<eg_traits> (src, dest), m_sedge (sedge),
    m_custom_info (custom_info)
  {
*************** exploded_graph::~exploded_graph ()
*** 2138,2143 ****
--- 2351,2466 ----
      delete (*iter).second;
  }
  
+ /* Subroutine for use when implementing __attribute__((tainted_args))
+    on functions and on function pointer fields in structs.
+ 
+    Called on STATE representing a call to FNDECL.
+    Mark all params of FNDECL in STATE as "tainted".  Mark the value of all
+    regions pointed to by params of FNDECL as "tainted".
+ 
+    Return true if successful; return false if the "taint" state machine
+    was not found.  */
+ 
+ static bool
+ mark_params_as_tainted (program_state *state, tree fndecl,
+ 			const extrinsic_state &ext_state)
+ {
+   unsigned taint_sm_idx;
+   if (!ext_state.get_sm_idx_by_name ("taint", &taint_sm_idx))
+     return false;
+   sm_state_map *smap = state->m_checker_states[taint_sm_idx];
+ 
+   const state_machine &sm = ext_state.get_sm (taint_sm_idx);
+   state_machine::state_t tainted = sm.get_state_by_name ("tainted");
+ 
+   region_model_manager *mgr = ext_state.get_model_manager ();
+ 
+   function *fun = DECL_STRUCT_FUNCTION (fndecl);
+   gcc_assert (fun);
+ 
+   for (tree iter_parm = DECL_ARGUMENTS (fndecl); iter_parm;
+        iter_parm = DECL_CHAIN (iter_parm))
+     {
+       tree param = iter_parm;
+       if (tree parm_default_ssa = ssa_default_def (fun, iter_parm))
+ 	param = parm_default_ssa;
+       const region *param_reg = state->m_region_model->get_lvalue (param, NULL);
+       const svalue *init_sval = mgr->get_or_create_initial_value (param_reg);
+       smap->set_state (state->m_region_model, init_sval,
+ 		       tainted, NULL /*origin_new_sval*/, ext_state);
+       if (POINTER_TYPE_P (TREE_TYPE (param)))
+ 	{
+ 	  const region *pointee_reg = mgr->get_symbolic_region (init_sval);
+ 	  /* Mark "*param" as tainted.  */
+ 	  const svalue *init_pointee_sval
+ 	    = mgr->get_or_create_initial_value (pointee_reg);
+ 	  smap->set_state (state->m_region_model, init_pointee_sval,
+ 			   tainted, NULL /*origin_new_sval*/, ext_state);
+ 	}
+     }
+ 
+   return true;
+ }
+ 
+ /* Custom event for use by tainted_args_function_info when a function
+    has been marked with __attribute__((tainted_args)).  */
+ 
+ class tainted_args_function_custom_event : public custom_event
+ {
+ public:
+   tainted_args_function_custom_event (location_t loc, tree fndecl, int depth)
+   : custom_event (loc, fndecl, depth),
+     m_fndecl (fndecl)
+   {
+   }
+ 
+   label_text get_desc (bool can_colorize) const FINAL OVERRIDE
+   {
+     return make_label_text
+       (can_colorize,
+        "function %qE marked with %<__attribute__((tainted_args))%>",
+        m_fndecl);
+   }
+ 
+ private:
+   tree m_fndecl;
+ };
+ 
+ /* Custom exploded_edge info for top-level calls to a function
+    marked with __attribute__((tainted_args)).  */
+ 
+ class tainted_args_function_info : public custom_edge_info
+ {
+ public:
+   tainted_args_function_info (tree fndecl)
+   : m_fndecl (fndecl)
+   {}
+ 
+   void print (pretty_printer *pp) const FINAL OVERRIDE
+   {
+     pp_string (pp, "call to tainted_args function");
+   };
+ 
+   bool update_model (region_model *,
+ 		     const exploded_edge *,
+ 		     region_model_context *) const FINAL OVERRIDE
+   {
+     /* No-op.  */
+     return true;
+   }
+ 
+   void add_events_to_path (checker_path *emission_path,
+ 			   const exploded_edge &) const FINAL OVERRIDE
+   {
+     emission_path->add_event
+       (new tainted_args_function_custom_event
+        (DECL_SOURCE_LOCATION (m_fndecl), m_fndecl, 0));
+   }
+ 
+ private:
+   tree m_fndecl;
+ };
+ 
  /* Ensure that there is an exploded_node representing an external call to
     FUN, adding it to the worklist if creating it.
  
*************** exploded_graph::add_function_entry (func
*** 2164,2177 ****
    program_state state (m_ext_state);
    state.push_frame (m_ext_state, fun);
  
    if (!state.m_valid)
      return NULL;
  
    exploded_node *enode = get_or_create_node (point, state, NULL);
    if (!enode)
!     return NULL;
  
!   add_edge (m_origin, enode, NULL);
  
    m_functions_with_enodes.add (fun);
  
--- 2487,2511 ----
    program_state state (m_ext_state);
    state.push_frame (m_ext_state, fun);
  
+   custom_edge_info *edge_info = NULL;
+ 
+   if (lookup_attribute ("tainted_args", DECL_ATTRIBUTES (fun->decl)))
+     {
+       if (mark_params_as_tainted (&state, fun->decl, m_ext_state))
+ 	edge_info = new tainted_args_function_info (fun->decl);
+     }
+ 
    if (!state.m_valid)
      return NULL;
  
    exploded_node *enode = get_or_create_node (point, state, NULL);
    if (!enode)
!     {
!       delete edge_info;
!       return NULL;
!     }
  
!   add_edge (m_origin, enode, NULL, edge_info);
  
    m_functions_with_enodes.add (fun);
  
*************** exploded_graph::get_or_create_node (cons
*** 2279,2287 ****
  	  /* This merges successfully within the loop.  */
  
  	  program_state merged_state (m_ext_state);
! 	  if (pruned_state.can_merge_with_p (existing_state, point,
  					     &merged_state))
  	    {
  	      if (logger)
  		logger->log ("merging new state with that of EN: %i",
  			     existing_enode->m_index);
--- 2613,2622 ----
  	  /* This merges successfully within the loop.  */
  
  	  program_state merged_state (m_ext_state);
! 	  if (pruned_state.can_merge_with_p (existing_state, m_ext_state, point,
  					     &merged_state))
  	    {
+ 	      merged_state.validate (m_ext_state);
  	      if (logger)
  		logger->log ("merging new state with that of EN: %i",
  			     existing_enode->m_index);
*************** exploded_graph::get_or_create_node (cons
*** 2374,2380 ****
  exploded_edge *
  exploded_graph::add_edge (exploded_node *src, exploded_node *dest,
  			  const superedge *sedge,
! 			  exploded_edge::custom_info_t *custom_info)
  {
    if (get_logger ())
      get_logger ()->log ("creating edge EN: %i -> EN: %i",
--- 2709,2715 ----
  exploded_edge *
  exploded_graph::add_edge (exploded_node *src, exploded_node *dest,
  			  const superedge *sedge,
! 			  custom_edge_info *custom_info)
  {
    if (get_logger ())
      get_logger ()->log ("creating edge EN: %i -> EN: %i",
*************** toplevel_function_p (function *fun, logg
*** 2484,2489 ****
--- 2819,3005 ----
    return true;
  }
  
+ /* Custom event for use by tainted_call_info when a callback field has been
+    marked with __attribute__((tainted_args)), for labelling the field.  */
+ 
+ class tainted_args_field_custom_event : public custom_event
+ {
+ public:
+   tainted_args_field_custom_event (tree field)
+   : custom_event (DECL_SOURCE_LOCATION (field), NULL_TREE, 0),
+     m_field (field)
+   {
+   }
+ 
+   label_text get_desc (bool can_colorize) const FINAL OVERRIDE
+   {
+     return make_label_text (can_colorize,
+ 			    "field %qE of %qT"
+ 			    " is marked with %<__attribute__((tainted_args))%>",
+ 			    m_field, DECL_CONTEXT (m_field));
+   }
+ 
+ private:
+   tree m_field;
+ };
+ 
+ /* Custom event for use by tainted_call_info when a callback field has been
+    marked with __attribute__((tainted_args)), for labelling the function used
+    in that callback.  */
+ 
+ class tainted_args_callback_custom_event : public custom_event
+ {
+ public:
+   tainted_args_callback_custom_event (location_t loc, tree fndecl, int depth,
+ 				 tree field)
+   : custom_event (loc, fndecl, depth),
+     m_field (field)
+   {
+   }
+ 
+   label_text get_desc (bool can_colorize) const FINAL OVERRIDE
+   {
+     return make_label_text (can_colorize,
+ 			    "function %qE used as initializer for field %qE"
+ 			    " marked with %<__attribute__((tainted_args))%>",
+ 			    m_fndecl, m_field);
+   }
+ 
+ private:
+   tree m_field;
+ };
+ 
+ /* Custom edge info for use when adding a function used by a callback field
+    marked with '__attribute__((tainted_args))'.   */
+ 
+ class tainted_args_call_info : public custom_edge_info
+ {
+ public:
+   tainted_args_call_info (tree field, tree fndecl, location_t loc)
+   : m_field (field), m_fndecl (fndecl), m_loc (loc)
+   {}
+ 
+   void print (pretty_printer *pp) const FINAL OVERRIDE
+   {
+     pp_string (pp, "call to tainted field");
+   };
+ 
+   bool update_model (region_model *,
+ 		     const exploded_edge *,
+ 		     region_model_context *) const FINAL OVERRIDE
+   {
+     /* No-op.  */
+     return true;
+   }
+ 
+   void add_events_to_path (checker_path *emission_path,
+ 			   const exploded_edge &) const FINAL OVERRIDE
+   {
+     /* Show the field in the struct declaration, e.g.
+        "(1) field 'store' is marked with '__attribute__((tainted_args))'"  */
+     emission_path->add_event
+       (new tainted_args_field_custom_event (m_field));
+ 
+     /* Show the callback in the initializer
+        e.g.
+        "(2) function 'gadget_dev_desc_UDC_store' used as initializer
+        for field 'store' marked with '__attribute__((tainted_args))'".  */
+     emission_path->add_event
+       (new tainted_args_callback_custom_event (m_loc, m_fndecl, 0, m_field));
+   }
+ 
+ private:
+   tree m_field;
+   tree m_fndecl;
+   location_t m_loc;
+ };
+ 
+ /* Given an initializer at LOC for FIELD marked with
+    '__attribute__((tainted_args))' initialized with FNDECL, add an
+    entrypoint to FNDECL to EG (and to its worklist) where the params to
+    FNDECL are marked as tainted.  */
+ 
+ static void
+ add_tainted_args_callback (exploded_graph *eg, tree field, tree fndecl,
+ 			   location_t loc)
+ {
+   logger *logger = eg->get_logger ();
+ 
+   LOG_SCOPE (logger);
+ 
+   if (!gimple_has_body_p (fndecl))
+     return;
+ 
+   const extrinsic_state &ext_state = eg->get_ext_state ();
+ 
+   function *fun = DECL_STRUCT_FUNCTION (fndecl);
+   gcc_assert (fun);
+ 
+   program_point point
+     = program_point::from_function_entry (eg->get_supergraph (), fun);
+   program_state state (ext_state);
+   state.push_frame (ext_state, fun);
+ 
+   if (!mark_params_as_tainted (&state, fndecl, ext_state))
+     return;
+ 
+   if (!state.m_valid)
+     return;
+ 
+   exploded_node *enode = eg->get_or_create_node (point, state, NULL);
+   if (logger)
+     {
+       if (enode)
+ 	logger->log ("created EN %i for tainted_args %qE entrypoint",
+ 		     enode->m_index, fndecl);
+       else
+ 	{
+ 	  logger->log ("did not create enode for tainted_args %qE entrypoint",
+ 		       fndecl);
+ 	  return;
+ 	}
+     }
+ 
+   tainted_args_call_info *info
+     = new tainted_args_call_info (field, fndecl, loc);
+   eg->add_edge (eg->get_origin (), enode, NULL, info);
+ }
+ 
+ /* Callback for walk_tree for finding callbacks within initializers;
+    ensure that any callback initializer where the corresponding field is
+    marked with '__attribute__((tainted_args))' is treated as an entrypoint
+    to the analysis, special-casing that the inputs to the callback are
+    untrustworthy.  */
+ 
+ static tree
+ add_any_callbacks (tree *tp, int *, void *data)
+ {
+   exploded_graph *eg = (exploded_graph *)data;
+   if (TREE_CODE (*tp) == CONSTRUCTOR)
+     {
+       /* Find fields with the "tainted_args" attribute.
+ 	 walk_tree only walks the values, not the index values;
+ 	 look at the index values.  */
+       unsigned HOST_WIDE_INT idx;
+       constructor_elt *ce;
+ 
+       for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (*tp), idx, &ce);
+ 	   idx++)
+ 	if (ce->index && TREE_CODE (ce->index) == FIELD_DECL)
+ 	  if (lookup_attribute ("tainted_args", DECL_ATTRIBUTES (ce->index)))
+ 	    {
+ 	      tree value = ce->value;
+ 	      if (TREE_CODE (value) == ADDR_EXPR
+ 		  && TREE_CODE (TREE_OPERAND (value, 0)) == FUNCTION_DECL)
+ 		add_tainted_args_callback (eg, ce->index,
+ 					   TREE_OPERAND (value, 0),
+ 					   EXPR_LOCATION (value));
+ 	    }
+     }
+ 
+   return NULL_TREE;
+ }
+ 
  /* Add initial nodes to EG, with entrypoints for externally-callable
     functions.  */
  
*************** exploded_graph::build_initial_worklist (
*** 2509,2514 ****
--- 3025,3041 ----
  	  logger->log ("did not create enode for %qE entrypoint", fun->decl);
        }
    }
+ 
+   /* Find callbacks that are reachable from global initializers.  */
+   varpool_node *vpnode;
+   FOR_EACH_VARIABLE (vpnode)
+     {
+       tree decl = vpnode->decl;
+       tree init = DECL_INITIAL (decl);
+       if (!init)
+ 	continue;
+       walk_tree (&init, add_any_callbacks, this, NULL);
+     }
  }
  
  /* The main loop of the analysis.
*************** exploded_graph::process_worklist ()
*** 2578,2584 ****
  		gcc_assert (state != state_2);
  
  		program_state merged_state (m_ext_state);
! 		if (state.can_merge_with_p (state_2, point, &merged_state))
  		  {
  		    if (logger)
  		      logger->log ("merging EN: %i and EN: %i",
--- 3105,3112 ----
  		gcc_assert (state != state_2);
  
  		program_state merged_state (m_ext_state);
! 		if (state.can_merge_with_p (state_2, m_ext_state,
! 					    point, &merged_state))
  		  {
  		    if (logger)
  		      logger->log ("merging EN: %i and EN: %i",
*************** maybe_process_run_of_before_supernode_en
*** 2801,2819 ****
        items.quick_push (it);
        const program_state &state = iter_enode->get_state ();
        program_state *next_state = &it->m_processed_state;
        const program_point &iter_point = iter_enode->get_point ();
        if (const superedge *iter_sedge = iter_point.get_from_edge ())
  	{
  	  uncertainty_t uncertainty;
  	  impl_region_model_context ctxt (*this, iter_enode,
  					  &state, next_state,
! 					  &uncertainty, NULL);
  	  const cfg_superedge *last_cfg_superedge
  	    = iter_sedge->dyn_cast_cfg_superedge ();
  	  if (last_cfg_superedge)
  	    next_state->m_region_model->update_for_phis
  	      (snode, last_cfg_superedge, &ctxt);
  	}
      }
  
    /* Attempt to partition the items into a set of merged states.
--- 3329,3349 ----
        items.quick_push (it);
        const program_state &state = iter_enode->get_state ();
        program_state *next_state = &it->m_processed_state;
+       next_state->validate (m_ext_state);
        const program_point &iter_point = iter_enode->get_point ();
        if (const superedge *iter_sedge = iter_point.get_from_edge ())
  	{
  	  uncertainty_t uncertainty;
  	  impl_region_model_context ctxt (*this, iter_enode,
  					  &state, next_state,
! 					  &uncertainty, NULL, NULL);
  	  const cfg_superedge *last_cfg_superedge
  	    = iter_sedge->dyn_cast_cfg_superedge ();
  	  if (last_cfg_superedge)
  	    next_state->m_region_model->update_for_phis
  	      (snode, last_cfg_superedge, &ctxt);
  	}
+       next_state->validate (m_ext_state);
      }
  
    /* Attempt to partition the items into a set of merged states.
*************** maybe_process_run_of_before_supernode_en
*** 2830,2839 ****
        unsigned iter_merger_idx;
        FOR_EACH_VEC_ELT (merged_states, iter_merger_idx, merged_state)
  	{
  	  program_state merge (m_ext_state);
! 	  if (it_state.can_merge_with_p (*merged_state, next_point, &merge))
  	    {
  	      *merged_state = merge;
  	      it->m_merger_idx = iter_merger_idx;
  	      if (logger)
  		logger->log ("reusing merger state %i for item %i (EN: %i)",
--- 3360,3372 ----
        unsigned iter_merger_idx;
        FOR_EACH_VEC_ELT (merged_states, iter_merger_idx, merged_state)
  	{
+ 	  merged_state->validate (m_ext_state);
  	  program_state merge (m_ext_state);
! 	  if (it_state.can_merge_with_p (*merged_state, m_ext_state,
! 					 next_point, &merge))
  	    {
  	      *merged_state = merge;
+ 	      merged_state->validate (m_ext_state);
  	      it->m_merger_idx = iter_merger_idx;
  	      if (logger)
  		logger->log ("reusing merger state %i for item %i (EN: %i)",
*************** stmt_requires_new_enode_p (const gimple
*** 2932,2937 ****
--- 3465,3637 ----
    return false;
  }
  
+ /* Return true if OLD_STATE and NEW_STATE are sufficiently different that
+    we should split enodes and create an exploded_edge separating them
+    (which makes it easier to identify state changes of intereset when
+    constructing checker_paths).  */
+ 
+ static bool
+ state_change_requires_new_enode_p (const program_state &old_state,
+ 				   const program_state &new_state)
+ {
+   /* Changes in dynamic extents signify creations of heap/alloca regions
+      and resizings of heap regions; likely to be of interest in
+      diagnostic paths.  */
+   if (old_state.m_region_model->get_dynamic_extents ()
+       != new_state.m_region_model->get_dynamic_extents ())
+     return true;
+ 
+   /* Changes in sm-state are of interest.  */
+   int sm_idx;
+   sm_state_map *smap;
+   FOR_EACH_VEC_ELT (old_state.m_checker_states, sm_idx, smap)
+     {
+       const sm_state_map *old_smap = old_state.m_checker_states[sm_idx];
+       const sm_state_map *new_smap = new_state.m_checker_states[sm_idx];
+       if (*old_smap != *new_smap)
+ 	return true;
+     }
+ 
+   return false;
+ }
+ 
+ /* Create enodes and eedges for the function calls that doesn't have an 
+    underlying call superedge.
+ 
+    Such case occurs when GCC's middle end didn't know which function to
+    call but the analyzer does (with the help of current state).
+ 
+    Some example such calls are dynamically dispatched calls to virtual
+    functions or calls that happen via function pointer.  */
+ 
+ bool
+ exploded_graph::maybe_create_dynamic_call (const gcall *call,
+                                            tree fn_decl,
+                                            exploded_node *node,
+                                            program_state next_state,
+                                            program_point &next_point,
+                                            uncertainty_t *uncertainty,
+                                            logger *logger)
+ {
+   LOG_FUNC (logger);
+ 
+   const program_point *this_point = &node->get_point ();
+   function *fun = DECL_STRUCT_FUNCTION (fn_decl);
+   if (fun)
+     {
+       const supergraph &sg = this->get_supergraph ();
+       supernode *sn_entry = sg.get_node_for_function_entry (fun);
+       supernode *sn_exit = sg.get_node_for_function_exit (fun);
+ 
+       program_point new_point
+         = program_point::before_supernode (sn_entry,
+                                            NULL,
+                                            this_point->get_call_string ());
+ 
+       new_point.push_to_call_stack (sn_exit,
+                                     next_point.get_supernode());
+ 
+       /* Impose a maximum recursion depth and don't analyze paths
+          that exceed it further.
+          This is something of a blunt workaround, but it only
+          applies to recursion (and mutual recursion), not to
+          general call stacks.  */
+       if (new_point.get_call_string ().calc_recursion_depth ()
+           > param_analyzer_max_recursion_depth)
+       {
+         if (logger)
+           logger->log ("rejecting call edge: recursion limit exceeded");
+         return false;
+       }
+ 
+       next_state.push_call (*this, node, call, uncertainty);
+ 
+       if (next_state.m_valid)
+         {
+           if (logger)
+             logger->log ("Discovered call to %s [SN: %i -> SN: %i]",
+                           function_name(fun),
+                           this_point->get_supernode ()->m_index,
+                           sn_entry->m_index);
+ 
+           exploded_node *enode = get_or_create_node (new_point,
+                                                      next_state,
+                                                      node);
+           if (enode)
+             add_edge (node,enode, NULL,
+                       new dynamic_call_info_t (call));
+           return true;
+         }
+     }
+   return false;
+ }
+ 
+ /* Subclass of path_context for use within exploded_graph::process_node,
+    so that we can split states e.g. at "realloc" calls.  */
+ 
+ class impl_path_context : public path_context
+ {
+ public:
+   impl_path_context (const program_state *cur_state)
+   : m_cur_state (cur_state),
+     m_terminate_path (false)
+   {
+   }
+ 
+   bool bifurcation_p () const
+   {
+     return m_custom_eedge_infos.length () > 0;
+   }
+ 
+   const program_state &get_state_at_bifurcation () const
+   {
+     gcc_assert (m_state_at_bifurcation);
+     return *m_state_at_bifurcation;
+   }
+ 
+   void
+   bifurcate (custom_edge_info *info) FINAL OVERRIDE
+   {
+     if (m_state_at_bifurcation)
+       /* Verify that the state at bifurcation is consistent when we
+ 	 split into multiple out-edges.  */
+       gcc_assert (*m_state_at_bifurcation == *m_cur_state);
+     else
+       /* Take a copy of the cur_state at the moment when bifurcation
+ 	 happens.  */
+       m_state_at_bifurcation
+ 	= std::unique_ptr<program_state> (new program_state (*m_cur_state));
+ 
+     /* Take ownership of INFO.  */
+     m_custom_eedge_infos.safe_push (info);
+   }
+ 
+   void terminate_path () FINAL OVERRIDE
+   {
+     m_terminate_path = true;
+   }
+ 
+   bool terminate_path_p () const FINAL OVERRIDE
+   {
+     return m_terminate_path;
+   }
+ 
+   const vec<custom_edge_info *> & get_custom_eedge_infos ()
+   {
+     return m_custom_eedge_infos;
+   }
+ 
+ private:
+   const program_state *m_cur_state;
+ 
+   /* Lazily-created copy of the state before the split.  */
+   std::unique_ptr<program_state> m_state_at_bifurcation;
+ 
+   auto_vec <custom_edge_info *> m_custom_eedge_infos;
+ 
+   bool m_terminate_path;
+ };
+ 
  /* The core of exploded_graph::process_worklist (the main analysis loop),
     handling one node in the worklist.
  
*************** exploded_graph::process_node (exploded_n
*** 2987,2993 ****
  	  {
  	    impl_region_model_context ctxt (*this, node,
  					    &state, &next_state,
! 					    &uncertainty, NULL);
  	    const cfg_superedge *last_cfg_superedge
  	      = point.get_from_edge ()->dyn_cast_cfg_superedge ();
  	    if (last_cfg_superedge)
--- 3687,3693 ----
  	  {
  	    impl_region_model_context ctxt (*this, node,
  					    &state, &next_state,
! 					    &uncertainty, NULL, NULL);
  	    const cfg_superedge *last_cfg_superedge
  	      = point.get_from_edge ()->dyn_cast_cfg_superedge ();
  	    if (last_cfg_superedge)
*************** exploded_graph::process_node (exploded_n
*** 2995,3000 ****
--- 3695,3702 ----
  		(node->get_supernode (),
  		 last_cfg_superedge,
  		 &ctxt);
+ 	    program_state::detect_leaks (state, next_state, NULL,
+ 					 get_ext_state (), &ctxt);
  	  }
  
  	program_point next_point (point.get_next ());
*************** exploded_graph::process_node (exploded_n
*** 3025,3030 ****
--- 3727,3735 ----
  	   the sm-state-change occurs on an edge where the src enode has
  	   exactly one stmt, the one that caused the change. */
  	program_state next_state (state);
+ 
+ 	impl_path_context path_ctxt (&next_state);
+ 
  	uncertainty_t uncertainty;
  	const supernode *snode = point.get_supernode ();
  	unsigned stmt_idx;
*************** exploded_graph::process_node (exploded_n
*** 3047,3053 ****
  
  	    /* Process the stmt.  */
  	    exploded_node::on_stmt_flags flags
! 	      = node->on_stmt (*this, snode, stmt, &next_state, &uncertainty);
  	    node->m_num_processed_stmts++;
  
  	    /* If flags.m_terminate_path, stop analyzing; any nodes/edges
--- 3752,3759 ----
  
  	    /* Process the stmt.  */
  	    exploded_node::on_stmt_flags flags
! 	      = node->on_stmt (*this, snode, stmt, &next_state, &uncertainty,
! 			       &path_ctxt);
  	    node->m_num_processed_stmts++;
  
  	    /* If flags.m_terminate_path, stop analyzing; any nodes/edges
*************** exploded_graph::process_node (exploded_n
*** 3059,3065 ****
  	      {
  		impl_region_model_context ctxt (*this, node,
  						&old_state, &next_state,
! 						&uncertainty, stmt);
  		program_state::detect_leaks (old_state, next_state, NULL,
  					     get_ext_state (), &ctxt);
  	      }
--- 3765,3771 ----
  	      {
  		impl_region_model_context ctxt (*this, node,
  						&old_state, &next_state,
! 						&uncertainty, NULL, stmt);
  		program_state::detect_leaks (old_state, next_state, NULL,
  					     get_ext_state (), &ctxt);
  	      }
*************** exploded_graph::process_node (exploded_n
*** 3074,3080 ****
  	    next_state = next_state.prune_for_point (*this, next_point, node,
  						     &uncertainty);
  
! 	    if (flags.m_sm_changes || flag_analyzer_fine_grained)
  	      {
  		program_point split_point
  		  = program_point::before_stmt (point.get_supernode (),
--- 3780,3789 ----
  	    next_state = next_state.prune_for_point (*this, next_point, node,
  						     &uncertainty);
  
! 	    if (flag_analyzer_fine_grained
! 		|| state_change_requires_new_enode_p (old_state, next_state)
! 		|| path_ctxt.bifurcation_p ()
! 		|| path_ctxt.terminate_path_p ())
  	      {
  		program_point split_point
  		  = program_point::before_stmt (point.get_supernode (),
*************** exploded_graph::process_node (exploded_n
*** 3118,3134 ****
  					   point.get_call_string ())
  	     : program_point::after_supernode (point.get_supernode (),
  					       point.get_call_string ()));
! 	exploded_node *next = get_or_create_node (next_point, next_state, node);
! 	if (next)
! 	  add_edge (node, next, NULL);
        }
        break;
      case PK_AFTER_SUPERNODE:
        {
  	/* If this is an EXIT BB, detect leaks, and potentially
  	   create a function summary.  */
  	if (point.get_supernode ()->return_p ())
  	  {
  	    node->detect_leaks (*this);
  	    if (flag_analyzer_call_summaries
  		&& point.get_call_string ().empty_p ())
--- 3827,3903 ----
  					   point.get_call_string ())
  	     : program_point::after_supernode (point.get_supernode (),
  					       point.get_call_string ()));
! 	if (path_ctxt.terminate_path_p ())
! 	  {
! 	    if (logger)
! 	      logger->log ("not adding node: terminating path");
! 	  }
! 	else
! 	  {
! 	    exploded_node *next
! 	      = get_or_create_node (next_point, next_state, node);
! 	    if (next)
! 	      add_edge (node, next, NULL);
! 	  }
! 
! 	/* If we have custom edge infos, "bifurcate" the state
! 	   accordingly, potentially creating a new state/enode/eedge
! 	   instances.  For example, to handle a "realloc" call, we
! 	   might split into 3 states, for the "failure",
! 	   "resizing in place", and "moving to a new buffer" cases.  */
! 	for (auto edge_info : path_ctxt.get_custom_eedge_infos ())
! 	  {
! 	    if (logger)
! 	      {
! 		logger->start_log_line ();
! 		logger->log_partial ("bifurcating for edge: ");
! 		edge_info->print (logger->get_printer ());
! 		logger->end_log_line ();
! 	      }
! 	    program_state bifurcated_new_state
! 	      (path_ctxt.get_state_at_bifurcation ());
! 
! 	    /* Apply edge_info to state.  */
! 	    impl_region_model_context
! 	      bifurcation_ctxt (*this,
! 				node, // enode_for_diag
! 				&path_ctxt.get_state_at_bifurcation (),
! 				&bifurcated_new_state,
! 				NULL, // uncertainty_t *uncertainty
! 				NULL, // path_context *path_ctxt
! 				stmt);
! 	    if (edge_info->update_model (bifurcated_new_state.m_region_model,
! 					 NULL, /* no exploded_edge yet.  */
! 					 &bifurcation_ctxt))
! 	      {
! 		exploded_node *next2
! 		  = get_or_create_node (next_point, bifurcated_new_state, node);
! 		if (next2)
! 		  {
! 		    /* Take ownership of edge_info.  */
! 		    add_edge (node, next2, NULL, edge_info);
! 		  }
! 		else
! 		  delete edge_info;
! 	      }
! 	    else
! 	      {
! 		if (logger)
! 		  logger->log ("infeasible state, not adding node");
! 		delete edge_info;
! 	      }
! 	  }
        }
        break;
      case PK_AFTER_SUPERNODE:
        {
+         bool found_a_superedge = false;
+         bool is_an_exit_block = false;
  	/* If this is an EXIT BB, detect leaks, and potentially
  	   create a function summary.  */
  	if (point.get_supernode ()->return_p ())
  	  {
+ 	    is_an_exit_block = true;
  	    node->detect_leaks (*this);
  	    if (flag_analyzer_call_summaries
  		&& point.get_call_string ().empty_p ())
*************** exploded_graph::process_node (exploded_n
*** 3156,3161 ****
--- 3925,3931 ----
  	superedge *succ;
  	FOR_EACH_VEC_ELT (point.get_supernode ()->m_succs, i, succ)
  	  {
+ 	    found_a_superedge = true;
  	    if (logger)
  	      logger->log ("considering SN: %i -> SN: %i",
  			   succ->m_src->m_index, succ->m_dest->m_index);
*************** exploded_graph::process_node (exploded_n
*** 3165,3170 ****
--- 3935,3990 ----
  						 point.get_call_string ());
  	    program_state next_state (state);
  	    uncertainty_t uncertainty;
+ 
+             /* Make use the current state and try to discover and analyse
+                indirect function calls (a call that doesn't have an underlying
+                cgraph edge representing call).
+ 
+                Some examples of such calls are virtual function calls
+                and calls that happen via a function pointer.  */
+             if (succ->m_kind == SUPEREDGE_INTRAPROCEDURAL_CALL
+             	&& !(succ->get_any_callgraph_edge ()))
+               {
+                 const gcall *call
+                   = point.get_supernode ()->get_final_call ();
+ 
+                 impl_region_model_context ctxt (*this,
+                                                 node,
+                                                 &state,
+                                                 &next_state,
+                                                 &uncertainty,
+ 						NULL,
+                                                 point.get_stmt());
+ 
+                 region_model *model = state.m_region_model;
+                 bool call_discovered = false;
+ 
+                 if (tree fn_decl = model->get_fndecl_for_call(call,&ctxt))
+                   call_discovered = maybe_create_dynamic_call (call,
+                                                                fn_decl,
+                                                                node,
+                                                                next_state,
+                                                                next_point,
+                                                                &uncertainty,
+                                                                logger);
+                 if (!call_discovered)
+                   {
+                      /* An unknown function or a special function was called 
+                         at this point, in such case, don't terminate the 
+                         analysis of the current function.
+ 
+                         The analyzer handles calls to such functions while
+                         analysing the stmt itself, so the function call
+                         must have been handled by the anlyzer till now.  */
+                      exploded_node *next
+                        = get_or_create_node (next_point,
+                                              next_state,
+                                              node);
+                      if (next)
+                        add_edge (node, next, succ);
+                   }
+               }
+ 
  	    if (!node->on_edge (*this, succ, &next_point, &next_state,
  				&uncertainty))
  	      {
*************** exploded_graph::process_node (exploded_n
*** 3178,3183 ****
--- 3998,4035 ----
  	    if (next)
  	      add_edge (node, next, succ);
  	  }
+ 
+         /* Return from the calls which doesn't have a return superedge.
+     	   Such case occurs when GCC's middle end didn't knew which function to
+     	   call but analyzer did.  */
+         if((is_an_exit_block && !found_a_superedge)
+            && (!point.get_call_string ().empty_p ()))
+           {
+             const call_string cs = point.get_call_string ();
+             program_point next_point
+               = program_point::before_supernode (cs.get_caller_node (),
+                                                  NULL,
+                                                  cs);
+             program_state next_state (state);
+             uncertainty_t uncertainty;
+ 
+             const gcall *call
+               = next_point.get_supernode ()->get_returning_call ();
+ 
+             if(call)
+               next_state.returning_call (*this, node, call, &uncertainty);
+ 
+             if (next_state.m_valid)
+               {
+                 next_point.pop_from_call_stack ();
+                 exploded_node *enode = get_or_create_node (next_point,
+                                                            next_state,
+                                                            node);
+                 if (enode)
+                   add_edge (node, enode, NULL,
+                             new dynamic_call_info_t (call, true));
+               }
+           }
        }
        break;
      }
*************** exploded_path::feasible_p (logger *logge
*** 3536,3545 ****
    return true;
  }
  
! /* Dump this path in multiline form to PP.  */
  
  void
! exploded_path::dump_to_pp (pretty_printer *pp) const
  {
    for (unsigned i = 0; i < m_edges.length (); i++)
      {
--- 4388,4399 ----
    return true;
  }
  
! /* Dump this path in multiline form to PP.
!    If EXT_STATE is non-NULL, then show the nodes.  */
  
  void
! exploded_path::dump_to_pp (pretty_printer *pp,
! 			   const extrinsic_state *ext_state) const
  {
    for (unsigned i = 0; i < m_edges.length (); i++)
      {
*************** exploded_path::dump_to_pp (pretty_printe
*** 3549,3576 ****
  		 eedge->m_src->m_index,
  		 eedge->m_dest->m_index);
        pp_newline (pp);
      }
  }
  
  /* Dump this path in multiline form to FP.  */
  
  void
! exploded_path::dump (FILE *fp) const
  {
    pretty_printer pp;
    pp_format_decoder (&pp) = default_tree_printer;
    pp_show_color (&pp) = pp_show_color (global_dc->printer);
    pp.buffer->stream = fp;
!   dump_to_pp (&pp);
    pp_flush (&pp);
  }
  
  /* Dump this path in multiline form to stderr.  */
  
  DEBUG_FUNCTION void
! exploded_path::dump () const
  {
!   dump (stderr);
  }
  
  /* class feasibility_problem.  */
--- 4403,4450 ----
  		 eedge->m_src->m_index,
  		 eedge->m_dest->m_index);
        pp_newline (pp);
+ 
+       if (ext_state)
+ 	eedge->m_dest->dump_to_pp (pp, *ext_state);
      }
  }
  
  /* Dump this path in multiline form to FP.  */
  
  void
! exploded_path::dump (FILE *fp, const extrinsic_state *ext_state) const
  {
    pretty_printer pp;
    pp_format_decoder (&pp) = default_tree_printer;
    pp_show_color (&pp) = pp_show_color (global_dc->printer);
    pp.buffer->stream = fp;
!   dump_to_pp (&pp, ext_state);
    pp_flush (&pp);
  }
  
  /* Dump this path in multiline form to stderr.  */
  
  DEBUG_FUNCTION void
! exploded_path::dump (const extrinsic_state *ext_state) const
  {
!   dump (stderr, ext_state);
! }
! 
! /* Dump this path verbosely to FILENAME.  */
! 
! void
! exploded_path::dump_to_file (const char *filename,
! 			     const extrinsic_state &ext_state) const
! {
!   FILE *fp = fopen (filename, "w");
!   if (!fp)
!     return;
!   pretty_printer pp;
!   pp_format_decoder (&pp) = default_tree_printer;
!   pp.buffer->stream = fp;
!   dump_to_pp (&pp, &ext_state);
!   pp_flush (&pp);
!   fclose (fp);
  }
  
  /* class feasibility_problem.  */
*************** feasibility_problem::dump_to_pp (pretty_
*** 3585,3591 ****
        pp_string (pp, "; rejected constraint: ");
        m_rc->dump_to_pp (pp);
        pp_string (pp, "; rmodel: ");
!       m_rc->m_model.dump_to_pp (pp, true, false);
      }
  }
  
--- 4459,4465 ----
        pp_string (pp, "; rejected constraint: ");
        m_rc->dump_to_pp (pp);
        pp_string (pp, "; rmodel: ");
!       m_rc->get_model ().dump_to_pp (pp, true, false);
      }
  }
  
*************** feasibility_state::maybe_update_for_edge
*** 3647,3652 ****
--- 4521,4535 ----
  
        if (const gassign *assign = dyn_cast <const gassign *> (stmt))
  	m_model.on_assignment (assign, NULL);
+       else if (const gasm *asm_stmt = dyn_cast <const gasm *> (stmt))
+ 	m_model.on_asm_stmt (asm_stmt, NULL);
+       else if (const gcall *call = dyn_cast <const gcall *> (stmt))
+ 	{
+ 	  bool terminate_path;
+ 	  bool unknown_side_effects
+ 	    = m_model.on_call_pre (call, NULL, &terminate_path);
+ 	  m_model.on_call_post (call, unknown_side_effects, NULL);
+ 	}
        else if (const greturn *return_ = dyn_cast <const greturn *> (stmt))
  	m_model.on_return (return_, NULL);
      }
*************** feasibility_state::maybe_update_for_edge
*** 3688,3694 ****
  	}
        else if (eedge->m_custom_info)
  	{
! 	  eedge->m_custom_info->update_model (&m_model, *eedge);
  	}
      }
  
--- 4571,4577 ----
  	}
        else if (eedge->m_custom_info)
  	{
! 	  eedge->m_custom_info->update_model (&m_model, eedge, NULL);
  	}
      }
  
*************** impl_run_checkers (logger *logger)
*** 4834,4848 ****
    FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
      node->get_untransformed_body ();
  
-   engine eng;
- 
    /* Create the supergraph.  */
    supergraph sg (logger);
  
    state_purge_map *purge_map = NULL;
  
    if (flag_analyzer_state_purge)
!     purge_map = new state_purge_map (sg, logger);
  
    if (flag_dump_analyzer_supergraph)
      {
--- 5717,5731 ----
    FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
      node->get_untransformed_body ();
  
    /* Create the supergraph.  */
    supergraph sg (logger);
  
+   engine eng (&sg, logger);
+ 
    state_purge_map *purge_map = NULL;
  
    if (flag_analyzer_state_purge)
!     purge_map = new state_purge_map (sg, eng.get_model_manager (), logger);
  
    if (flag_dump_analyzer_supergraph)
      {
*************** impl_run_checkers (logger *logger)
*** 4928,4933 ****
--- 5811,5819 ----
    if (flag_dump_analyzer_json)
      dump_analyzer_json (sg, eg);
  
+   if (flag_dump_analyzer_untracked)
+     eng.get_model_manager ()->dump_untracked_regions ();
+ 
    delete purge_map;
  }
  
diff -Nrcpad gcc-11.3.0/gcc/analyzer/engine.h gcc-12.1.0/gcc/analyzer/engine.h
*** gcc-11.3.0/gcc/analyzer/engine.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/engine.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* The analysis "engine".
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* The analysis "engine".
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/exploded-graph.h gcc-12.1.0/gcc/analyzer/exploded-graph.h
*** gcc-11.3.0/gcc/analyzer/exploded-graph.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/exploded-graph.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for managing a directed graph of <point, state> pairs.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for managing a directed graph of <point, state> pairs.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** class impl_region_model_context : public
*** 37,42 ****
--- 37,43 ----
  			     const program_state *old_state,
  			     program_state *new_state,
  			     uncertainty_t *uncertainty,
+ 			     path_context *path_ctxt,
  
  			     const gimple *stmt,
  			     stmt_finder *stmt_finder = NULL);
*************** class impl_region_model_context : public
*** 46,52 ****
  			     uncertainty_t *uncertainty,
  			     logger *logger = NULL);
  
!   void warn (pending_diagnostic *d) FINAL OVERRIDE;
    void on_svalue_leak (const svalue *) OVERRIDE;
    void on_liveness_change (const svalue_set &live_svalues,
  			   const region_model *model) FINAL OVERRIDE;
--- 47,54 ----
  			     uncertainty_t *uncertainty,
  			     logger *logger = NULL);
  
!   bool warn (pending_diagnostic *d) FINAL OVERRIDE;
!   void add_note (pending_note *pn) FINAL OVERRIDE;
    void on_svalue_leak (const svalue *) OVERRIDE;
    void on_liveness_change (const svalue_set &live_svalues,
  			   const region_model *model) FINAL OVERRIDE;
*************** class impl_region_model_context : public
*** 59,65 ****
  		      const svalue *sval,
  		      state_machine::state_t state);
  
!   void on_condition (tree lhs, enum tree_code op, tree rhs) FINAL OVERRIDE;
  
    void on_unknown_change (const svalue *sval, bool is_mutable) FINAL OVERRIDE;
  
--- 61,69 ----
  		      const svalue *sval,
  		      state_machine::state_t state);
  
!   void on_condition (const svalue *lhs,
! 		     enum tree_code op,
! 		     const svalue *rhs) FINAL OVERRIDE;
  
    void on_unknown_change (const svalue *sval, bool is_mutable) FINAL OVERRIDE;
  
*************** class impl_region_model_context : public
*** 72,77 ****
--- 76,98 ----
  
    uncertainty_t *get_uncertainty () FINAL OVERRIDE;
  
+   void purge_state_involving (const svalue *sval) FINAL OVERRIDE;
+ 
+   void bifurcate (custom_edge_info *info) FINAL OVERRIDE;
+   void terminate_path () FINAL OVERRIDE;
+   const extrinsic_state *get_ext_state () const FINAL OVERRIDE
+   {
+     return &m_ext_state;
+   }
+   bool get_malloc_map (sm_state_map **out_smap,
+ 		       const state_machine **out_sm,
+ 		       unsigned *out_sm_idx) FINAL OVERRIDE;
+   bool get_taint_map (sm_state_map **out_smap,
+ 		       const state_machine **out_sm,
+ 		       unsigned *out_sm_idx) FINAL OVERRIDE;
+ 
+   const gimple *get_stmt () const OVERRIDE { return m_stmt; }
+ 
    exploded_graph *m_eg;
    log_user m_logger;
    exploded_node *m_enode_for_diag;
*************** class impl_region_model_context : public
*** 81,86 ****
--- 102,108 ----
    stmt_finder *m_stmt_finder;
    const extrinsic_state &m_ext_state;
    uncertainty_t *m_uncertainty;
+   path_context *m_path_ctxt;
  };
  
  /* A <program_point, program_state> pair, used internally by
*************** class exploded_node : public dnode<eg_tr
*** 198,230 ****
    /* The result of on_stmt.  */
    struct on_stmt_flags
    {
!     on_stmt_flags (bool sm_changes)
!     : m_sm_changes (sm_changes),
!       m_terminate_path (false)
      {}
  
      static on_stmt_flags terminate_path ()
      {
!       return on_stmt_flags (true, true);
!     }
! 
!     static on_stmt_flags state_change (bool any_sm_changes)
!     {
!       return on_stmt_flags (any_sm_changes, false);
      }
  
-     /* Did any sm-changes occur handling the stmt.  */
-     bool m_sm_changes : 1;
- 
      /* Should we stop analyzing this path (on_stmt may have already
         added nodes/edges, e.g. when handling longjmp).  */
      bool m_terminate_path : 1;
  
    private:
!     on_stmt_flags (bool sm_changes,
! 		   bool terminate_path)
!     : m_sm_changes (sm_changes),
!       m_terminate_path (terminate_path)
      {}
    };
  
--- 220,240 ----
    /* The result of on_stmt.  */
    struct on_stmt_flags
    {
!     on_stmt_flags () : m_terminate_path (false)
      {}
  
      static on_stmt_flags terminate_path ()
      {
!       return on_stmt_flags (true);
      }
  
      /* Should we stop analyzing this path (on_stmt may have already
         added nodes/edges, e.g. when handling longjmp).  */
      bool m_terminate_path : 1;
  
    private:
!     on_stmt_flags (bool terminate_path)
!     : m_terminate_path (terminate_path)
      {}
    };
  
*************** class exploded_node : public dnode<eg_tr
*** 232,238 ****
  			 const supernode *snode,
  			 const gimple *stmt,
  			 program_state *state,
! 			 uncertainty_t *uncertainty);
    bool on_edge (exploded_graph &eg,
  		const superedge *succ,
  		program_point *next_point,
--- 242,260 ----
  			 const supernode *snode,
  			 const gimple *stmt,
  			 program_state *state,
! 			 uncertainty_t *uncertainty,
! 			 path_context *path_ctxt);
!   void on_stmt_pre (exploded_graph &eg,
! 		    const gimple *stmt,
! 		    program_state *state,
! 		    bool *out_terminate_path,
! 		    bool *out_unknown_side_effects,
! 		    region_model_context *ctxt);
!   void on_stmt_post (const gimple *stmt,
! 		     program_state *state,
! 		     bool unknown_side_effects,
! 		     region_model_context *ctxt);
! 
    bool on_edge (exploded_graph &eg,
  		const superedge *succ,
  		program_point *next_point,
*************** public:
*** 316,343 ****
  class exploded_edge : public dedge<eg_traits>
  {
   public:
-   /* Abstract base class for associating custom data with an
-      exploded_edge, for handling non-standard edges such as
-      rewinding from a longjmp, signal handlers, etc.  */
-   class custom_info_t
-   {
-   public:
-     virtual ~custom_info_t () {}
- 
-     /* Hook for making .dot label more readable .  */
-     virtual void print (pretty_printer *pp) = 0;
- 
-     /* Hook for updating MODEL within exploded_path::feasible_p.  */
-     virtual void update_model (region_model *model,
- 			       const exploded_edge &eedge) = 0;
- 
-     virtual void add_events_to_path (checker_path *emission_path,
- 				     const exploded_edge &eedge) = 0;
-   };
- 
    exploded_edge (exploded_node *src, exploded_node *dest,
  		 const superedge *sedge,
! 		 custom_info_t *custom_info);
    ~exploded_edge ();
    void dump_dot (graphviz_out *gv, const dump_args_t &args)
      const FINAL OVERRIDE;
--- 338,346 ----
  class exploded_edge : public dedge<eg_traits>
  {
   public:
    exploded_edge (exploded_node *src, exploded_node *dest,
  		 const superedge *sedge,
! 		 custom_edge_info *custom_info);
    ~exploded_edge ();
    void dump_dot (graphviz_out *gv, const dump_args_t &args)
      const FINAL OVERRIDE;
*************** class exploded_edge : public dedge<eg_tr
*** 353,368 ****
       a signal is delivered to a signal-handler.
  
       Owned by this class.  */
!   custom_info_t *m_custom_info;
  
  private:
    DISABLE_COPY_AND_ASSIGN (exploded_edge);
  };
  
  /* Extra data for an exploded_edge that represents a rewind from a
     longjmp to a setjmp (or from a siglongjmp to a sigsetjmp).  */
  
! class rewind_info_t : public exploded_edge::custom_info_t
  {
  public:
    rewind_info_t (const setjmp_record &setjmp_record,
--- 356,403 ----
       a signal is delivered to a signal-handler.
  
       Owned by this class.  */
!   custom_edge_info *m_custom_info;
  
  private:
    DISABLE_COPY_AND_ASSIGN (exploded_edge);
  };
  
+ /* Extra data for an exploded_edge that represents dynamic call info ( calls
+    that doesn't have an underlying superedge representing the call ).  */
+ 
+ class dynamic_call_info_t : public custom_edge_info
+ {
+ public:
+   dynamic_call_info_t (const gcall *dynamic_call,
+   		       const bool is_returning_call = false)
+   : m_dynamic_call (dynamic_call), 
+     m_is_returning_call (is_returning_call)
+   {}
+ 
+   void print (pretty_printer *pp) const FINAL OVERRIDE
+   {
+     if (m_is_returning_call)
+       pp_string (pp, "dynamic_return");
+     else
+       pp_string (pp, "dynamic_call");
+   }
+ 
+   bool update_model (region_model *model,
+ 		     const exploded_edge *eedge,
+ 		     region_model_context *ctxt) const FINAL OVERRIDE;
+ 
+   void add_events_to_path (checker_path *emission_path,
+ 			   const exploded_edge &eedge) const FINAL OVERRIDE;
+ private:
+   const gcall *m_dynamic_call;
+   const bool m_is_returning_call;
+ };
+ 
+ 
  /* Extra data for an exploded_edge that represents a rewind from a
     longjmp to a setjmp (or from a siglongjmp to a sigsetjmp).  */
  
! class rewind_info_t : public custom_edge_info
  {
  public:
    rewind_info_t (const setjmp_record &setjmp_record,
*************** public:
*** 371,386 ****
      m_longjmp_call (longjmp_call)
    {}
  
!   void print (pretty_printer *pp) FINAL OVERRIDE
    {
      pp_string (pp, "rewind");
    }
  
!   void update_model (region_model *model,
! 		     const exploded_edge &eedge) FINAL OVERRIDE;
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge) FINAL OVERRIDE;
  
    const program_point &get_setjmp_point () const
    {
--- 406,422 ----
      m_longjmp_call (longjmp_call)
    {}
  
!   void print (pretty_printer *pp) const FINAL OVERRIDE
    {
      pp_string (pp, "rewind");
    }
  
!   bool update_model (region_model *model,
! 		     const exploded_edge *eedge,
! 		     region_model_context *ctxt) const FINAL OVERRIDE;
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge) const FINAL OVERRIDE;
  
    const program_point &get_setjmp_point () const
    {
*************** public:
*** 782,793 ****
    bool maybe_process_run_of_before_supernode_enodes (exploded_node *node);
    void process_node (exploded_node *node);
  
    exploded_node *get_or_create_node (const program_point &point,
  				     const program_state &state,
  				     exploded_node *enode_for_diag);
    exploded_edge *add_edge (exploded_node *src, exploded_node *dest,
  			   const superedge *sedge,
! 			   exploded_edge::custom_info_t *custom = NULL);
  
    per_program_point_data *
    get_or_create_per_program_point_data (const program_point &);
--- 818,837 ----
    bool maybe_process_run_of_before_supernode_enodes (exploded_node *node);
    void process_node (exploded_node *node);
  
+   bool maybe_create_dynamic_call (const gcall *call,
+                                   tree fn_decl,
+                                   exploded_node *node,
+                                   program_state next_state,
+                                   program_point &next_point,
+                                   uncertainty_t *uncertainty,
+                                   logger *logger);
+ 
    exploded_node *get_or_create_node (const program_point &point,
  				     const program_state &state,
  				     exploded_node *enode_for_diag);
    exploded_edge *add_edge (exploded_node *src, exploded_node *dest,
  			   const superedge *sedge,
! 			   custom_edge_info *custom = NULL);
  
    per_program_point_data *
    get_or_create_per_program_point_data (const program_point &);
*************** public:
*** 905,913 ****
  
    exploded_node *get_final_enode () const;
  
!   void dump_to_pp (pretty_printer *pp) const;
!   void dump (FILE *fp) const;
!   void dump () const;
  
    bool feasible_p (logger *logger, feasibility_problem **out,
  		    engine *eng, const exploded_graph *eg) const;
--- 949,960 ----
  
    exploded_node *get_final_enode () const;
  
!   void dump_to_pp (pretty_printer *pp,
! 		   const extrinsic_state *ext_state) const;
!   void dump (FILE *fp, const extrinsic_state *ext_state) const;
!   void dump (const extrinsic_state *ext_state = NULL) const;
!   void dump_to_file (const char *filename,
! 		     const extrinsic_state &ext_state) const;
  
    bool feasible_p (logger *logger, feasibility_problem **out,
  		    engine *eng, const exploded_graph *eg) const;
diff -Nrcpad gcc-11.3.0/gcc/analyzer/feasible-graph.cc gcc-12.1.0/gcc/analyzer/feasible-graph.cc
*** gcc-11.3.0/gcc/analyzer/feasible-graph.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/feasible-graph.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* A graph for exploring trees of feasible paths through the egraph.
!    Copyright (C) 2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* A graph for exploring trees of feasible paths through the egraph.
!    Copyright (C) 2021-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** infeasible_node::dump_dot (graphviz_out
*** 129,135 ****
  
    pp_string (pp, "rejected constraint:");
    pp_newline (pp);
!   m_rc.dump_to_pp (pp);
  
    pp_write_text_as_dot_label_to_stream (pp, /*for_record=*/true);
  
--- 129,135 ----
  
    pp_string (pp, "rejected constraint:");
    pp_newline (pp);
!   m_rc->dump_to_pp (pp);
  
    pp_write_text_as_dot_label_to_stream (pp, /*for_record=*/true);
  
*************** feasible_graph::add_node (const exploded
*** 178,189 ****
  }
  
  /* Add an infeasible_node to this graph and an infeasible_edge connecting
!    to it from SRC_FNODE, capturing a failure of RC along EEDGE.  */
  
  void
  feasible_graph::add_feasibility_problem (feasible_node *src_fnode,
  					 const exploded_edge *eedge,
! 					 const rejected_constraint &rc)
  {
    infeasible_node *dst_fnode
      = new infeasible_node (eedge->m_dest, m_nodes.length (), rc);
--- 178,190 ----
  }
  
  /* Add an infeasible_node to this graph and an infeasible_edge connecting
!    to it from SRC_FNODE, capturing a failure of RC along EEDGE.
!    Takes ownership of RC.  */
  
  void
  feasible_graph::add_feasibility_problem (feasible_node *src_fnode,
  					 const exploded_edge *eedge,
! 					 rejected_constraint *rc)
  {
    infeasible_node *dst_fnode
      = new infeasible_node (eedge->m_dest, m_nodes.length (), rc);
diff -Nrcpad gcc-11.3.0/gcc/analyzer/feasible-graph.h gcc-12.1.0/gcc/analyzer/feasible-graph.h
*** gcc-11.3.0/gcc/analyzer/feasible-graph.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/feasible-graph.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* A graph for exploring trees of feasible paths through the egraph.
!    Copyright (C) 2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* A graph for exploring trees of feasible paths through the egraph.
!    Copyright (C) 2021-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** class infeasible_node : public base_feas
*** 115,131 ****
  {
  public:
    infeasible_node (const exploded_node *inner_node, unsigned index,
! 		   const rejected_constraint &rc)
    : base_feasible_node (inner_node, index),
      m_rc (rc)
    {
    }
  
    void dump_dot (graphviz_out *gv,
  		 const dump_args_t &args) const FINAL OVERRIDE;
  
  private:
!   rejected_constraint m_rc;
  };
  
  /* Base class of edge within a feasible_graph.  */
--- 115,132 ----
  {
  public:
    infeasible_node (const exploded_node *inner_node, unsigned index,
! 		   rejected_constraint *rc)
    : base_feasible_node (inner_node, index),
      m_rc (rc)
    {
    }
+   ~infeasible_node () { delete m_rc; }
  
    void dump_dot (graphviz_out *gv,
  		 const dump_args_t &args) const FINAL OVERRIDE;
  
  private:
!   rejected_constraint *m_rc;
  };
  
  /* Base class of edge within a feasible_graph.  */
*************** class feasible_graph : public digraph <f
*** 192,198 ****
  
    void add_feasibility_problem (feasible_node *src_fnode,
  				const exploded_edge *eedge,
! 				const rejected_constraint &rc);
  
    exploded_path *make_epath (feasible_node *fnode) const;
  
--- 193,199 ----
  
    void add_feasibility_problem (feasible_node *src_fnode,
  				const exploded_edge *eedge,
! 				rejected_constraint *rc);
  
    exploded_path *make_epath (feasible_node *fnode) const;
  
diff -Nrcpad gcc-11.3.0/gcc/analyzer/function-set.cc gcc-12.1.0/gcc/analyzer/function-set.cc
*** gcc-11.3.0/gcc/analyzer/function-set.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/function-set.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Sets of function names.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Sets of function names.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/function-set.h gcc-12.1.0/gcc/analyzer/function-set.h
*** gcc-11.3.0/gcc/analyzer/function-set.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/function-set.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Sets of function names.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Sets of function names.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/pending-diagnostic.cc gcc-12.1.0/gcc/analyzer/pending-diagnostic.cc
*** gcc-11.3.0/gcc/analyzer/pending-diagnostic.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/pending-diagnostic.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for analyzer diagnostics.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for analyzer diagnostics.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 33,43 ****
--- 33,75 ----
  #include "diagnostic-event-id.h"
  #include "analyzer/sm.h"
  #include "analyzer/pending-diagnostic.h"
+ #include "selftest.h"
+ #include "tristate.h"
+ #include "analyzer/call-string.h"
+ #include "analyzer/program-point.h"
+ #include "analyzer/store.h"
+ #include "analyzer/region-model.h"
  
  #if ENABLE_ANALYZER
  
  namespace ana {
  
+ /* struct interesting_t.  */
+ 
+ /* Mark the creation of REG as being interesting.  */
+ 
+ void
+ interesting_t::add_region_creation (const region *reg)
+ {
+   gcc_assert (reg);
+   m_region_creation.safe_push (reg);
+ }
+ 
+ void
+ interesting_t::dump_to_pp (pretty_printer *pp, bool simple) const
+ {
+   pp_string (pp, "{ region creation: [");
+   unsigned i;
+   const region *reg;
+   FOR_EACH_VEC_ELT (m_region_creation, i, reg)
+     {
+       if (i > 0)
+ 	pp_string (pp, ", ");
+       reg->dump_to_pp (pp, simple);
+     }
+   pp_string (pp, "]}");
+ }
+ 
  /* Generate a label_text by printing FMT.
  
     Use a clone of the global_dc for formatting callbacks.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/pending-diagnostic.h gcc-12.1.0/gcc/analyzer/pending-diagnostic.h
*** gcc-11.3.0/gcc/analyzer/pending-diagnostic.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/pending-diagnostic.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for analyzer diagnostics.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for analyzer diagnostics.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 23,28 ****
--- 23,44 ----
  
  namespace ana {
  
+ /* A bundle of information about things that are of interest to a
+    pending_diagnostic.
+ 
+    For now, merely the set of regions that are pertinent to the
+    diagnostic, so that we can notify the user about when they
+    were created.  */
+ 
+ struct interesting_t
+ {
+   void add_region_creation (const region *reg);
+ 
+   void dump_to_pp (pretty_printer *pp, bool simple) const;
+ 
+   auto_vec<const region *> m_region_creation;
+ };
+ 
  /* Various bundles of information used for generating more precise
     messages for events within a diagnostic_path, for passing to the
     various "describe_*" vfuncs of pending_diagnostic.  See those
*************** class pending_diagnostic
*** 146,151 ****
--- 162,173 ----
   public:
    virtual ~pending_diagnostic () {}
  
+   /* Vfunc to get the command-line option used when emitting the diagnostic,
+      or zero if there is none.
+      Used by diagnostic_manager for early rejection of diagnostics (to avoid
+      having to generate feasible execution paths for them).  */
+   virtual int get_controlling_option () const = 0;
+ 
    /* Vfunc for emitting the diagnostic.  The rich_location will have been
       populated with a diagnostic_path.
       Return true if a diagnostic is actually emitted.  */
*************** class pending_diagnostic
*** 154,159 ****
--- 176,184 ----
    /* Hand-coded RTTI: get an ID for the subclass.  */
    virtual const char *get_kind () const = 0;
  
+   /* A vfunc for identifying "use of uninitialized value".  */
+   virtual bool use_of_uninit_p () const { return false; }
+ 
    /* Compare for equality with OTHER, which might be of a different
       subclass.  */
  
*************** class pending_diagnostic
*** 269,274 ****
--- 294,317 ----
    {
      return false;
    }
+ 
+   /* Vfunc for determining that this pending_diagnostic supercedes OTHER,
+      and that OTHER should therefore not be emitted.
+      They have already been tested for being at the same stmt.  */
+ 
+   virtual bool
+   supercedes_p (const pending_diagnostic &other ATTRIBUTE_UNUSED) const
+   {
+     return false;
+   }
+ 
+   /* Vfunc for registering additional information of interest to this
+      diagnostic.  */
+ 
+   virtual void mark_interesting_stuff (interesting_t *)
+   {
+     /* Default no-op implementation.  */
+   }
  };
  
  /* A template to make it easier to make subclasses of pending_diagnostic.
*************** class pending_diagnostic_subclass : publ
*** 288,293 ****
--- 331,379 ----
      FINAL OVERRIDE
    {
      const Subclass &other = (const Subclass &)base_other;
+     return *(const Subclass*)this == other;
+   }
+ };
+ 
+ /* An abstract base class for capturing additional notes that are to be
+    emitted with a diagnostic.  */
+ 
+ class pending_note
+ {
+ public:
+   virtual ~pending_note () {}
+ 
+   /* Hand-coded RTTI: get an ID for the subclass.  */
+   virtual const char *get_kind () const = 0;
+ 
+   /* Vfunc for emitting the note.  */
+   virtual void emit () const = 0;
+ 
+   bool equal_p (const pending_note &other) const
+   {
+     /* Check for pointer equality on the IDs from get_kind.  */
+     if (get_kind () != other.get_kind ())
+       return false;
+     /* Call vfunc now we know they have the same ID: */
+     return subclass_equal_p (other);
+   }
+ 
+   /* A vfunc for testing for equality, where we've already
+      checked they have the same ID.  See pending_note_subclass
+      below for a convenience subclass for implementing this.  */
+   virtual bool subclass_equal_p (const pending_note &other) const = 0;
+ };
+ 
+ /* Analogous to pending_diagnostic_subclass, but for pending_note.  */
+ 
+ template <class Subclass>
+ class pending_note_subclass : public pending_note
+ {
+  public:
+   bool subclass_equal_p (const pending_note &base_other) const
+     FINAL OVERRIDE
+   {
+     const Subclass &other = (const Subclass &)base_other;
      return *(const Subclass*)this == other;
    }
  };
diff -Nrcpad gcc-11.3.0/gcc/analyzer/program-point.cc gcc-12.1.0/gcc/analyzer/program-point.cc
*** gcc-11.3.0/gcc/analyzer/program-point.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/program-point.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for representing locations within the program.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for representing locations within the program.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** function_point::print (pretty_printer *p
*** 119,126 ****
      case PK_BEFORE_SUPERNODE:
        {
  	if (m_from_edge)
! 	  pp_printf (pp, "before SN: %i (from SN: %i)",
! 		     m_supernode->m_index, m_from_edge->m_src->m_index);
  	else
  	  pp_printf (pp, "before SN: %i (NULL from-edge)",
  		     m_supernode->m_index);
--- 119,133 ----
      case PK_BEFORE_SUPERNODE:
        {
  	if (m_from_edge)
! 	  {
! 	    if (basic_block bb = m_from_edge->m_src->m_bb)
! 	      pp_printf (pp, "before SN: %i (from SN: %i (bb: %i))",
! 			 m_supernode->m_index, m_from_edge->m_src->m_index,
! 			 bb->index);
! 	    else
! 	      pp_printf (pp, "before SN: %i (from SN: %i)",
! 			 m_supernode->m_index, m_from_edge->m_src->m_index);
! 	  }
  	else
  	  pp_printf (pp, "before SN: %i (NULL from-edge)",
  		     m_supernode->m_index);
*************** function_point::get_location () const
*** 207,212 ****
--- 214,230 ----
      return UNKNOWN_LOCATION;
  }
  
+ /* Return true if this function_point is a before_stmt for
+    the final stmt in its supernode.  */
+ 
+ bool
+ function_point::final_stmt_p () const
+ {
+   if (m_kind != PK_BEFORE_STMT)
+     return false;
+   return m_stmt_idx == get_supernode ()->m_stmts.length () - 1;
+ }
+ 
  /* Create a function_point representing the entrypoint of function FUN.  */
  
  function_point
*************** program_point::to_json () const
*** 323,328 ****
--- 341,364 ----
    return point_obj;
  }
  
+ /* Update the callstack to represent a call from caller to callee.
+ 
+    Generally used to push a custom call to a perticular program point 
+    where we don't have a superedge representing the call.  */
+ void
+ program_point::push_to_call_stack (const supernode *caller,
+ 				   const supernode *callee)
+ {
+   m_call_string.push_call (callee, caller);
+ }
+ 
+ /* Pop the topmost call from the current callstack.  */
+ void
+ program_point::pop_from_call_stack ()
+ {
+   m_call_string.pop ();
+ }
+ 
  /* Generate a hash value for this program_point.  */
  
  hashval_t
*************** program_point::get_function_at_depth (un
*** 343,349 ****
    if (depth == m_call_string.length ())
      return m_function_point.get_function ();
    else
!     return m_call_string[depth]->get_caller_function ();
  }
  
  /* Assert that this object is sane.  */
--- 379,385 ----
    if (depth == m_call_string.length ())
      return m_function_point.get_function ();
    else
!     return m_call_string[depth].get_caller_function ();
  }
  
  /* Assert that this object is sane.  */
*************** program_point::validate () const
*** 360,366 ****
    /* The "callee" of the final entry in the callstring should be the
       function of the m_function_point.  */
    if (m_call_string.length () > 0)
!     gcc_assert (m_call_string[m_call_string.length () - 1]->get_callee_function ()
  		== get_function ());
  }
  
--- 396,402 ----
    /* The "callee" of the final entry in the callstring should be the
       function of the m_function_point.  */
    if (m_call_string.length () > 0)
!     gcc_assert (m_call_string[m_call_string.length () - 1].get_callee_function ()
  		== get_function ());
  }
  
*************** program_point::on_edge (exploded_graph &
*** 431,438 ****
  	      logger->log ("rejecting return edge: empty call string");
  	    return false;
  	  }
! 	const return_superedge *top_of_stack = m_call_string.pop ();
! 	if (top_of_stack != succ)
  	  {
  	    if (logger)
  	      logger->log ("rejecting return edge: return to wrong callsite");
--- 467,476 ----
  	      logger->log ("rejecting return edge: empty call string");
  	    return false;
  	  }
! 	const call_string::element_t top_of_stack = m_call_string.pop ();
! 	call_string::element_t current_call_string_element (succ->m_dest,
! 							    succ->m_src);
! 	if (top_of_stack != current_call_string_element)
  	  {
  	    if (logger)
  	      logger->log ("rejecting return edge: return to wrong callsite");
*************** function_point::next_stmt ()
*** 598,603 ****
--- 636,670 ----
      }
  }
  
+ /* For those function points for which there is a uniquely-defined
+    successor, return it.  */
+ 
+ function_point
+ function_point::get_next () const
+ {
+   switch (get_kind ())
+     {
+     default:
+       gcc_unreachable ();
+     case PK_ORIGIN:
+     case PK_AFTER_SUPERNODE:
+       gcc_unreachable (); /* Not uniquely defined.  */
+     case PK_BEFORE_SUPERNODE:
+       if (get_supernode ()->m_stmts.length () > 0)
+ 	return before_stmt (get_supernode (), 0);
+       else
+ 	return after_supernode (get_supernode ());
+     case PK_BEFORE_STMT:
+       {
+ 	unsigned next_idx = get_stmt_idx () + 1;
+ 	if (next_idx < get_supernode ()->m_stmts.length ())
+ 	  return before_stmt (get_supernode (), next_idx);
+ 	else
+ 	  return after_supernode (get_supernode ());
+       }
+     }
+ }
+ 
  /* For those program points for which there is a uniquely-defined
     successor, return it.  */
  
*************** program_point::get_next () const
*** 618,624 ****
  	return after_supernode (get_supernode (), get_call_string ());
      case PK_BEFORE_STMT:
        {
! 	unsigned next_idx = get_stmt_idx ();
  	if (next_idx < get_supernode ()->m_stmts.length ())
  	  return before_stmt (get_supernode (), next_idx, get_call_string ());
  	else
--- 685,691 ----
  	return after_supernode (get_supernode (), get_call_string ());
      case PK_BEFORE_STMT:
        {
! 	unsigned next_idx = get_stmt_idx () + 1;
  	if (next_idx < get_supernode ()->m_stmts.length ())
  	  return before_stmt (get_supernode (), next_idx, get_call_string ());
  	else
diff -Nrcpad gcc-11.3.0/gcc/analyzer/program-point.h gcc-12.1.0/gcc/analyzer/program-point.h
*** gcc-11.3.0/gcc/analyzer/program-point.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/program-point.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for representing locations within the program.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for representing locations within the program.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** public:
*** 104,109 ****
--- 104,111 ----
      return m_stmt_idx;
    }
  
+   bool final_stmt_p () const;
+ 
    /* Factory functions for making various kinds of program_point.  */
  
    static function_point from_function_entry (const supergraph &sg,
*************** public:
*** 145,150 ****
--- 147,154 ----
    /* For before_stmt, go to next stmt.  */
    void next_stmt ();
  
+   function_point get_next () const;
+ 
   private:
    const supernode *m_supernode;
  
*************** public:
*** 293,299 ****
    }
  
    bool on_edge (exploded_graph &eg, const superedge *succ);
! 
    void validate () const;
  
    /* For before_stmt, go to next stmt.  */
--- 297,304 ----
    }
  
    bool on_edge (exploded_graph &eg, const superedge *succ);
!   void push_to_call_stack (const supernode *caller, const supernode *callee);
!   void pop_from_call_stack ();
    void validate () const;
  
    /* For before_stmt, go to next stmt.  */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/program-state.cc gcc-12.1.0/gcc/analyzer/program-state.cc
*** gcc-11.3.0/gcc/analyzer/program-state.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/program-state.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for representing the state of interest at a given path of analysis.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for representing the state of interest at a given path of analysis.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** extrinsic_state::get_model_manager () co
*** 131,136 ****
--- 131,157 ----
      return NULL; /* for selftests.  */
  }
  
+ /* Try to find a state machine named NAME.
+    If found, return true and write its index to *OUT.
+    Otherwise return false.  */
+ 
+ bool
+ extrinsic_state::get_sm_idx_by_name (const char *name, unsigned *out) const
+ {
+   unsigned i;
+   state_machine *sm;
+   FOR_EACH_VEC_ELT (m_checkers, i, sm)
+     if (0 == strcmp (name, sm->get_name ()))
+       {
+ 	/* Found NAME.  */
+ 	*out = i;
+ 	return true;
+       }
+ 
+   /* NAME not found.  */
+   return false;
+ }
+ 
  /* struct sm_state_map::entry_t.  */
  
  int
*************** DEBUG_FUNCTION void
*** 252,257 ****
--- 273,279 ----
  sm_state_map::dump (bool simple) const
  {
    pretty_printer pp;
+   pp_format_decoder (&pp) = default_tree_printer;
    pp_show_color (&pp) = pp_show_color (global_dc->printer);
    pp.buffer->stream = stderr;
    print (NULL, simple, true, &pp);
*************** sm_state_map::get_state (const svalue *s
*** 372,392 ****
       INIT_VAL(foo).  */
    if (m_sm.inherited_state_p ())
      if (region_model_manager *mgr = ext_state.get_model_manager ())
!       if (const initial_svalue *init_sval = sval->dyn_cast_initial_svalue ())
! 	{
! 	  const region *reg = init_sval->get_region ();
! 	  /* Try recursing upwards (up to the base region for the cluster).  */
! 	  if (!reg->base_region_p ())
! 	    if (const region *parent_reg = reg->get_parent_region ())
! 	      {
! 		const svalue *parent_init_sval
! 		  = mgr->get_or_create_initial_value (parent_reg);
! 		state_machine::state_t parent_state
! 		  = get_state (parent_init_sval, ext_state);
! 		if (parent_state)
! 		  return parent_state;
! 	      }
! 	}
  
    return m_sm.get_default_state (sval);
  }
--- 394,428 ----
       INIT_VAL(foo).  */
    if (m_sm.inherited_state_p ())
      if (region_model_manager *mgr = ext_state.get_model_manager ())
!       {
! 	if (const initial_svalue *init_sval = sval->dyn_cast_initial_svalue ())
! 	  {
! 	    const region *reg = init_sval->get_region ();
! 	    /* Try recursing upwards (up to the base region for the
! 	       cluster).  */
! 	    if (!reg->base_region_p ())
! 	      if (const region *parent_reg = reg->get_parent_region ())
! 		{
! 		  const svalue *parent_init_sval
! 		    = mgr->get_or_create_initial_value (parent_reg);
! 		  state_machine::state_t parent_state
! 		    = get_state (parent_init_sval, ext_state);
! 		  if (parent_state)
! 		    return parent_state;
! 		}
! 	  }
! 	else if (const sub_svalue *sub_sval = sval->dyn_cast_sub_svalue ())
! 	  {
! 	    const svalue *parent_sval = sub_sval->get_parent ();
! 	    if (state_machine::state_t parent_state
! 		  = get_state (parent_sval, ext_state))
! 	      return parent_state;
! 	  }
!       }
! 
!   if (state_machine::state_t state
!       = m_sm.alt_get_inherited_state (*this, sval, ext_state))
!     return state;
  
    return m_sm.get_default_state (sval);
  }
*************** sm_state_map::set_state (region_model *m
*** 422,429 ****
    if (model == NULL)
      return;
  
!   /* Reject attempts to set state on UNKNOWN.  */
!   if (sval->get_kind () == SK_UNKNOWN)
      return;
  
    equiv_class &ec = model->get_constraints ()->get_equiv_class (sval);
--- 458,465 ----
    if (model == NULL)
      return;
  
!   /* Reject attempts to set state on UNKNOWN/POISONED.  */
!   if (!sval->can_have_associated_state_p ())
      return;
  
    equiv_class &ec = model->get_constraints ()->get_equiv_class (sval);
*************** sm_state_map::set_state (const equiv_cla
*** 441,450 ****
  			 const svalue *origin,
  			 const extrinsic_state &ext_state)
  {
-   int i;
-   const svalue *sval;
    bool any_changed = false;
!   FOR_EACH_VEC_ELT (ec.m_vars, i, sval)
      any_changed |= impl_set_state (sval, state, origin, ext_state);
    return any_changed;
  }
--- 477,484 ----
  			 const svalue *origin,
  			 const extrinsic_state &ext_state)
  {
    bool any_changed = false;
!   for (const svalue *sval : ec.m_vars)
      any_changed |= impl_set_state (sval, state, origin, ext_state);
    return any_changed;
  }
*************** sm_state_map::impl_set_state (const sval
*** 463,468 ****
--- 497,516 ----
    if (get_state (sval, ext_state) == state)
      return false;
  
+   gcc_assert (sval->can_have_associated_state_p ());
+ 
+   if (m_sm.inherited_state_p ())
+     {
+       if (const compound_svalue *compound_sval
+ 	    = sval->dyn_cast_compound_svalue ())
+ 	for (auto iter : *compound_sval)
+ 	  {
+ 	    const svalue *inner_sval = iter.second;
+ 	    if (inner_sval->can_have_associated_state_p ())
+ 	      impl_set_state (inner_sval, state, origin, ext_state);
+ 	  }
+     }
+ 
    /* Special-case state 0 as the default value.  */
    if (state == 0)
      {
*************** sm_state_map::purge_state_involving (con
*** 598,604 ****
  				     const extrinsic_state &ext_state)
  {
    /* Currently svalue::involves_p requires this.  */
!   if (sval->get_kind () != SK_INITIAL)
      return;
  
    svalue_set svals_to_unset;
--- 646,653 ----
  				     const extrinsic_state &ext_state)
  {
    /* Currently svalue::involves_p requires this.  */
!   if (!(sval->get_kind () == SK_INITIAL
! 	|| sval->get_kind () == SK_CONJURED))
      return;
  
    svalue_set svals_to_unset;
*************** program_state::operator= (const program_
*** 731,737 ****
    return *this;
  }
  
- #if __cplusplus >= 201103
  /* Move constructor for program_state (when building with C++11).  */
  program_state::program_state (program_state &&other)
  : m_region_model (other.m_region_model),
--- 780,785 ----
*************** program_state::program_state (program_st
*** 747,753 ****
  
    m_valid = other.m_valid;
  }
- #endif
  
  /* program_state's dtor.  */
  
--- 795,800 ----
*************** program_state::on_edge (exploded_graph &
*** 983,989 ****
    impl_region_model_context ctxt (eg, enode,
  				  &enode->get_state (),
  				  this,
! 				  uncertainty,
  				  last_stmt);
    if (!m_region_model->maybe_update_for_edge (*succ,
  					      last_stmt,
--- 1030,1036 ----
    impl_region_model_context ctxt (eg, enode,
  				  &enode->get_state (),
  				  this,
! 				  uncertainty, NULL,
  				  last_stmt);
    if (!m_region_model->maybe_update_for_edge (*succ,
  					      last_stmt,
*************** program_state::on_edge (exploded_graph &
*** 1004,1009 ****
--- 1051,1102 ----
    return true;
  }
  
+ /* Update this program_state to reflect a call to function
+    represented by CALL_STMT.
+    currently used only when the call doesn't have a superedge representing 
+    the call ( like call via a function pointer )  */
+ void
+ program_state::push_call (exploded_graph &eg,
+                           exploded_node *enode,
+                           const gcall *call_stmt,
+                           uncertainty_t *uncertainty)
+ {
+   /* Update state.  */
+   const program_point &point = enode->get_point ();
+   const gimple *last_stmt = point.get_supernode ()->get_last_stmt ();
+ 
+   impl_region_model_context ctxt (eg, enode,
+                                   &enode->get_state (),
+                                   this,
+                                   uncertainty,
+ 				  NULL,
+                                   last_stmt);
+   m_region_model->update_for_gcall (call_stmt, &ctxt);
+ }
+ 
+ /* Update this program_state to reflect a return from function
+    call to which is represented by CALL_STMT.
+    currently used only when the call doesn't have a superedge representing 
+    the return */
+ void
+ program_state::returning_call (exploded_graph &eg,
+                                exploded_node *enode,
+                                const gcall *call_stmt,
+                                uncertainty_t *uncertainty)
+ {
+   /* Update state.  */
+   const program_point &point = enode->get_point ();
+   const gimple *last_stmt = point.get_supernode ()->get_last_stmt ();
+ 
+   impl_region_model_context ctxt (eg, enode,
+                                   &enode->get_state (),
+                                   this,
+                                   uncertainty,
+ 				  NULL,
+                                   last_stmt);
+   m_region_model->update_for_return_gcall (call_stmt, &ctxt);
+ }
+ 
  /* Generate a simpler version of THIS, discarding state that's no longer
     relevant at POINT.
     The idea is that we're more likely to be able to consolidate
*************** program_state::prune_for_point (exploded
*** 1029,1084 ****
    if (pm)
      {
        unsigned num_ssas_purged = 0;
!       auto_vec<const decl_region *> ssa_name_regs;
!       new_state.m_region_model->get_ssa_name_regions_for_current_frame
! 	(&ssa_name_regs);
!       ssa_name_regs.qsort (region::cmp_ptr_ptr);
        unsigned i;
        const decl_region *reg;
!       FOR_EACH_VEC_ELT (ssa_name_regs, i, reg)
  	{
! 	  tree ssa_name = reg->get_decl ();
! 	  const state_purge_per_ssa_name &per_ssa
! 	    = pm->get_data_for_ssa_name (ssa_name);
! 	  if (!per_ssa.needed_at_point_p (point.get_function_point ()))
  	    {
! 	      /* Don't purge bindings of SSA names to svalues
! 		 that have unpurgable sm-state, so that leaks are
! 		 reported at the end of the function, rather than
! 		 at the last place that such an SSA name is referred to.
! 
! 		 But do purge them for temporaries (when SSA_NAME_VAR is
! 		 NULL), so that we report for cases where a leak happens when
! 		 a variable is overwritten with another value, so that the leak
! 		 is reported at the point of overwrite, rather than having
! 		 temporaries keep the value reachable until the frame is
! 		 popped.  */
! 	      const svalue *sval
! 		= new_state.m_region_model->get_store_value (reg);
! 	      if (!new_state.can_purge_p (eg.get_ext_state (), sval)
! 		  && SSA_NAME_VAR (ssa_name))
  		{
! 		  /* (currently only state maps can keep things
! 		     alive).  */
! 		  if (logger)
! 		    logger->log ("not purging binding for %qE"
! 				 " (used by state map)", ssa_name);
! 		  continue;
  		}
  
! 	      new_state.m_region_model->purge_region (reg);
! 	      num_ssas_purged++;
  	    }
  	}
  
!       if (num_ssas_purged > 0)
  	{
  	  if (logger)
! 	    logger->log ("num_ssas_purged: %i", num_ssas_purged);
  	  impl_region_model_context ctxt (eg, enode_for_diag,
  					  this,
  					  &new_state,
! 					  uncertainty,
  					  point.get_stmt ());
  	  detect_leaks (*this, new_state, NULL, eg.get_ext_state (), &ctxt);
  	}
--- 1122,1215 ----
    if (pm)
      {
        unsigned num_ssas_purged = 0;
!       unsigned num_decls_purged = 0;
!       auto_vec<const decl_region *> regs;
!       new_state.m_region_model->get_regions_for_current_frame (&regs);
!       regs.qsort (region::cmp_ptr_ptr);
        unsigned i;
        const decl_region *reg;
!       FOR_EACH_VEC_ELT (regs, i, reg)
  	{
! 	  const tree node = reg->get_decl ();
! 	  if (TREE_CODE (node) == SSA_NAME)
  	    {
! 	      const tree ssa_name = node;
! 	      const state_purge_per_ssa_name &per_ssa
! 		= pm->get_data_for_ssa_name (node);
! 	      if (!per_ssa.needed_at_point_p (point.get_function_point ()))
  		{
! 		  /* Don't purge bindings of SSA names to svalues
! 		     that have unpurgable sm-state, so that leaks are
! 		     reported at the end of the function, rather than
! 		     at the last place that such an SSA name is referred to.
! 
! 		     But do purge them for temporaries (when SSA_NAME_VAR is
! 		     NULL), so that we report for cases where a leak happens when
! 		     a variable is overwritten with another value, so that the leak
! 		     is reported at the point of overwrite, rather than having
! 		     temporaries keep the value reachable until the frame is
! 		     popped.  */
! 		  const svalue *sval
! 		    = new_state.m_region_model->get_store_value (reg, NULL);
! 		  if (!new_state.can_purge_p (eg.get_ext_state (), sval)
! 		      && SSA_NAME_VAR (ssa_name))
! 		    {
! 		      /* (currently only state maps can keep things
! 			 alive).  */
! 		      if (logger)
! 			logger->log ("not purging binding for %qE"
! 				     " (used by state map)", ssa_name);
! 		      continue;
! 		    }
! 
! 		  new_state.m_region_model->purge_region (reg);
! 		  num_ssas_purged++;
  		}
+ 	    }
+ 	  else
+ 	    {
+ 	      const tree decl = node;
+ 	      gcc_assert (TREE_CODE (node) == VAR_DECL
+ 			  || TREE_CODE (node) == PARM_DECL
+ 			  || TREE_CODE (node) == RESULT_DECL);
+ 	      if (const state_purge_per_decl *per_decl
+ 		  = pm->get_any_data_for_decl (decl))
+ 		if (!per_decl->needed_at_point_p (point.get_function_point ()))
+ 		  {
+ 		    /* Don't purge bindings of decls if there are svalues
+ 		       that have unpurgable sm-state within the decl's cluster,
+ 		       so that leaks are reported at the end of the function,
+ 		       rather than at the last place that such a decl is
+ 		       referred to.  */
+ 		    if (!new_state.can_purge_base_region_p (eg.get_ext_state (),
+ 							    reg))
+ 		      {
+ 			/* (currently only state maps can keep things
+ 			   alive).  */
+ 			if (logger)
+ 			  logger->log ("not purging binding for %qE"
+ 				       " (value in binding used by state map)",
+ 				       decl);
+ 			continue;
+ 		      }
  
! 		    new_state.m_region_model->purge_region (reg);
! 		    num_decls_purged++;
! 		  }
  	    }
  	}
  
!       if (num_ssas_purged > 0 || num_decls_purged > 0)
  	{
  	  if (logger)
! 	    {
! 	      logger->log ("num_ssas_purged: %i", num_ssas_purged);
! 	      logger->log ("num_decl_purged: %i", num_decls_purged);
! 	    }
  	  impl_region_model_context ctxt (eg, enode_for_diag,
  					  this,
  					  &new_state,
! 					  uncertainty, NULL,
  					  point.get_stmt ());
  	  detect_leaks (*this, new_state, NULL, eg.get_ext_state (), &ctxt);
  	}
*************** program_state::prune_for_point (exploded
*** 1089,1094 ****
--- 1220,1246 ----
    return new_state;
  }
  
+ /* Return true if there are no unpurgeable bindings within BASE_REG. */
+ 
+ bool
+ program_state::can_purge_base_region_p (const extrinsic_state &ext_state,
+ 					const region *base_reg) const
+ {
+   binding_cluster *cluster
+     = m_region_model->get_store ()->get_cluster (base_reg);
+   if (!cluster)
+     return true;
+ 
+   for (auto iter : *cluster)
+     {
+       const svalue *sval = iter.second;
+       if (!can_purge_p (ext_state, sval))
+ 	return false;
+     }
+ 
+   return true;
+ }
+ 
  /* Get a representative tree to use for describing SVAL.  */
  
  tree
*************** program_state::get_representative_tree (
*** 1104,1109 ****
--- 1256,1262 ----
  
  bool
  program_state::can_merge_with_p (const program_state &other,
+ 				 const extrinsic_state &ext_state,
  				 const program_point &point,
  				 program_state *out) const
  {
*************** program_state::can_merge_with_p (const p
*** 1120,1126 ****
    /* Attempt to merge the region_models.  */
    if (!m_region_model->can_merge_with_p (*other.m_region_model,
  					  point,
! 					  out->m_region_model))
      return false;
  
    /* Copy m_checker_states to OUT.  */
--- 1273,1281 ----
    /* Attempt to merge the region_models.  */
    if (!m_region_model->can_merge_with_p (*other.m_region_model,
  					  point,
! 					 out->m_region_model,
! 					 &ext_state,
! 					 this, &other))
      return false;
  
    /* Copy m_checker_states to OUT.  */
*************** program_state::validate (const extrinsic
*** 1146,1151 ****
--- 1301,1307 ----
  #endif
  
    gcc_assert (m_checker_states.length () == ext_state.get_num_checkers ());
+   m_region_model->validate ();
  }
  
  static void
*************** program_state::detect_leaks (const progr
*** 1274,1279 ****
--- 1430,1473 ----
    /* Purge dead svals from constraints.  */
    dest_state.m_region_model->get_constraints ()->on_liveness_change
      (maybe_dest_svalues, dest_state.m_region_model);
+ 
+   /* Purge dead heap-allocated regions from dynamic extents.  */
+   for (const svalue *sval : dead_svals)
+     if (const region *reg = sval->maybe_get_region ())
+       if (reg->get_kind () == RK_HEAP_ALLOCATED)
+ 	dest_state.m_region_model->unset_dynamic_extents (reg);
+ }
+ 
+ /* Handle calls to "__analyzer_dump_state".  */
+ 
+ void
+ program_state::impl_call_analyzer_dump_state (const gcall *call,
+ 					      const extrinsic_state &ext_state,
+ 					      region_model_context *ctxt)
+ {
+   call_details cd (call, m_region_model, ctxt);
+   const char *sm_name = cd.get_arg_string_literal (0);
+   if (!sm_name)
+     {
+       error_at (call->location, "cannot determine state machine");
+       return;
+     }
+   unsigned sm_idx;
+   if (!ext_state.get_sm_idx_by_name (sm_name, &sm_idx))
+     {
+       error_at (call->location, "unrecognized state machine %qs", sm_name);
+       return;
+     }
+   const sm_state_map *smap = m_checker_states[sm_idx];
+ 
+   const svalue *sval = cd.get_arg_svalue (1);
+ 
+   /* Strip off cast to int (due to variadic args).  */
+   if (const svalue *cast = sval->maybe_undo_cast ())
+     sval = cast;
+ 
+   state_machine::state_t state = smap->get_state (sval, ext_state);
+   warning_at (call->location, 0, "state: %qs", state->get_name ());
  }
  
  #if CHECKING_P
*************** test_program_state_1 ()
*** 1430,1437 ****
    program_state s (ext_state);
    region_model *model = s.m_region_model;
    const svalue *size_in_bytes
!     = mgr->get_or_create_unknown_svalue (integer_type_node);
!   const region *new_reg = model->create_region_for_heap_alloc (size_in_bytes);
    const svalue *ptr_sval = mgr->get_ptr_svalue (ptr_type_node, new_reg);
    model->set_value (model->get_lvalue (p, NULL),
  		    ptr_sval, NULL);
--- 1624,1632 ----
    program_state s (ext_state);
    region_model *model = s.m_region_model;
    const svalue *size_in_bytes
!     = mgr->get_or_create_unknown_svalue (size_type_node);
!   const region *new_reg
!     = model->create_region_for_heap_alloc (size_in_bytes, NULL);
    const svalue *ptr_sval = mgr->get_ptr_svalue (ptr_type_node, new_reg);
    model->set_value (model->get_lvalue (p, NULL),
  		    ptr_sval, NULL);
*************** test_program_state_merging ()
*** 1486,1493 ****
  
    region_model *model0 = s0.m_region_model;
    const svalue *size_in_bytes
!     = mgr->get_or_create_unknown_svalue (integer_type_node);
!   const region *new_reg = model0->create_region_for_heap_alloc (size_in_bytes);
    const svalue *ptr_sval = mgr->get_ptr_svalue (ptr_type_node, new_reg);
    model0->set_value (model0->get_lvalue (p, &ctxt),
  		     ptr_sval, &ctxt);
--- 1681,1689 ----
  
    region_model *model0 = s0.m_region_model;
    const svalue *size_in_bytes
!     = mgr->get_or_create_unknown_svalue (size_type_node);
!   const region *new_reg
!     = model0->create_region_for_heap_alloc (size_in_bytes, NULL);
    const svalue *ptr_sval = mgr->get_ptr_svalue (ptr_type_node, new_reg);
    model0->set_value (model0->get_lvalue (p, &ctxt),
  		     ptr_sval, &ctxt);
*************** test_program_state_merging ()
*** 1511,1517 ****
       with the given sm-state.
       They ought to be mergeable, preserving the sm-state.  */
    program_state merged (ext_state);
!   ASSERT_TRUE (s0.can_merge_with_p (s1, point, &merged));
    merged.validate (ext_state);
  
    /* Verify that the merged state has the sm-state for "p".  */
--- 1707,1713 ----
       with the given sm-state.
       They ought to be mergeable, preserving the sm-state.  */
    program_state merged (ext_state);
!   ASSERT_TRUE (s0.can_merge_with_p (s1, ext_state, point, &merged));
    merged.validate (ext_state);
  
    /* Verify that the merged state has the sm-state for "p".  */
*************** test_program_state_merging_2 ()
*** 1569,1575 ****
  
    /* They ought to not be mergeable.  */
    program_state merged (ext_state);
!   ASSERT_FALSE (s0.can_merge_with_p (s1, point, &merged));
  }
  
  /* Run all of the selftests within this file.  */
--- 1765,1771 ----
  
    /* They ought to not be mergeable.  */
    program_state merged (ext_state);
!   ASSERT_FALSE (s0.can_merge_with_p (s1, ext_state, point, &merged));
  }
  
  /* Run all of the selftests within this file.  */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/program-state.h gcc-12.1.0/gcc/analyzer/program-state.h
*** gcc-11.3.0/gcc/analyzer/program-state.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/program-state.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for representing the state of interest at a given path of analysis.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for representing the state of interest at a given path of analysis.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** public:
*** 58,63 ****
--- 58,65 ----
    engine *get_engine () const { return m_engine; }
    region_model_manager *get_model_manager () const;
  
+   bool get_sm_idx_by_name (const char *name, unsigned *out) const;
+ 
  private:
    /* The state machines.  */
    auto_delete_vec <state_machine> &m_checkers;
*************** public:
*** 192,202 ****
    program_state (const extrinsic_state &ext_state);
    program_state (const program_state &other);
    program_state& operator= (const program_state &other);
- 
- #if __cplusplus >= 201103
    program_state (program_state &&other);
- #endif
- 
    ~program_state ();
  
    hashval_t hash () const;
--- 194,200 ----
*************** public:
*** 220,225 ****
--- 218,234 ----
    void push_frame (const extrinsic_state &ext_state, function *fun);
    function * get_current_function () const;
  
+   void push_call (exploded_graph &eg,
+ 		  exploded_node *enode,
+ 		  const gcall *call_stmt,
+ 		  uncertainty_t *uncertainty);
+ 
+   void returning_call (exploded_graph &eg,
+ 		       exploded_node *enode,
+ 		       const gcall *call_stmt,
+ 		       uncertainty_t *uncertainty);
+ 
+ 
    bool on_edge (exploded_graph &eg,
  		exploded_node *enode,
  		const superedge *succ,
*************** public:
*** 233,239 ****
    tree get_representative_tree (const svalue *sval) const;
  
    bool can_purge_p (const extrinsic_state &ext_state,
! 		    const svalue *sval)
    {
      /* Don't purge vars that have non-purgeable sm state, to avoid
         generating false "leak" complaints.  */
--- 242,248 ----
    tree get_representative_tree (const svalue *sval) const;
  
    bool can_purge_p (const extrinsic_state &ext_state,
! 		    const svalue *sval) const
    {
      /* Don't purge vars that have non-purgeable sm state, to avoid
         generating false "leak" complaints.  */
*************** public:
*** 248,254 ****
--- 257,267 ----
      return true;
    }
  
+   bool can_purge_base_region_p (const extrinsic_state &ext_state,
+ 				const region *base_reg) const;
+ 
    bool can_merge_with_p (const program_state &other,
+ 			 const extrinsic_state &ext_state,
  			 const program_point &point,
  			 program_state *out) const;
  
*************** public:
*** 260,265 ****
--- 273,282 ----
  			    const extrinsic_state &ext_state,
  			    region_model_context *ctxt);
  
+   void impl_call_analyzer_dump_state (const gcall *call,
+ 				      const extrinsic_state &ext_state,
+ 				      region_model_context *ctxt);
+ 
    /* TODO: lose the pointer here (const-correctness issues?).  */
    region_model *m_region_model;
    auto_delete_vec<sm_state_map> m_checker_states;
diff -Nrcpad gcc-11.3.0/gcc/analyzer/reachability.h gcc-12.1.0/gcc/analyzer/reachability.h
*** gcc-11.3.0/gcc/analyzer/reachability.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/reachability.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Digraph reachability.
!    Copyright (C) 2020-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Digraph reachability.
!    Copyright (C) 2020-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/region-model-asm.cc gcc-12.1.0/gcc/analyzer/region-model-asm.cc
*** gcc-11.3.0/gcc/analyzer/region-model-asm.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/analyzer/region-model-asm.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,306 ----
+ /* Handling inline asm in the analyzer.
+    Copyright (C) 2021-2022 Free Software Foundation, Inc.
+    Contributed by David Malcolm <dmalcolm@redhat.com>.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tree.h"
+ #include "function.h"
+ #include "basic-block.h"
+ #include "gimple.h"
+ #include "gimple-iterator.h"
+ #include "diagnostic-core.h"
+ #include "pretty-print.h"
+ #include "tristate.h"
+ #include "selftest.h"
+ #include "json.h"
+ #include "analyzer/analyzer.h"
+ #include "analyzer/analyzer-logging.h"
+ #include "options.h"
+ #include "analyzer/call-string.h"
+ #include "analyzer/program-point.h"
+ #include "analyzer/store.h"
+ #include "analyzer/region-model.h"
+ #include "analyzer/region-model-reachability.h"
+ #include "stmt.h"
+ 
+ #if ENABLE_ANALYZER
+ 
+ namespace ana {
+ 
+ /* Minimal asm support for the analyzer.
+ 
+    The objective of this code is to:
+    - minimize false positives from the analyzer on the Linux kernel
+    (which makes heavy use of inline asm), whilst
+    - avoiding having to "teach" the compiler anything about specific strings
+    in asm statements.
+ 
+    Specifically, we want to:
+ 
+    (a) mark asm outputs and certain other regions as having been written to,
+        to avoid false postives from -Wanalyzer-use-of-uninitialized-value.
+ 
+    (b) identify some of these stmts as "deterministic" so that we can
+        write consistent outputs given consistent inputs, so that we can
+        avoid false positives for paths in which an asm is invoked twice
+        with the same inputs and is expected to emit the same output.
+ 
+    This file implements heuristics for achieving the above.  */
+ 
+ /* Determine if ASM_STMT is deterministic, in the sense of (b) above.
+ 
+    Consider this x86 function taken from the Linux kernel
+    (arch/x86/include/asm/barrier.h):
+ 
+      static inline unsigned long array_index_mask_nospec(unsigned long index,
+ 							 unsigned long size)
+      {
+        unsigned long mask;
+ 
+        asm volatile ("cmp %1,%2; sbb %0,%0;"
+ 		     :"=r" (mask)
+ 		     :"g"(size),"r" (index)
+ 		     :"cc");
+        return mask;
+      }
+ 
+    The above is a mitigation for Spectre-variant-1 attacks, for clamping
+    an array access to within the range of [0, size] if the CPU speculates
+    past the array bounds.
+ 
+    However, it is ultimately used to implement wdev_to_wvif:
+ 
+      static inline struct wfx_vif *
+      wdev_to_wvif(struct wfx_dev *wdev, int vif_id)
+      {
+        vif_id = array_index_nospec(vif_id, ARRAY_SIZE(wdev->vif));
+        if (!wdev->vif[vif_id]) {
+ 	 return NULL;
+        }
+        return (struct wfx_vif *)wdev->vif[vif_id]->drv_priv;
+      }
+ 
+    which is used by:
+ 
+      if (wdev_to_wvif(wvif->wdev, 1))
+        return wdev_to_wvif(wvif->wdev, 1)->vif;
+ 
+    The code has been written to assume that wdev_to_wvif is deterministic,
+    and won't change from returning non-NULL at the "if" clause to
+    returning NULL at the "->vif" dereference.
+ 
+    By treating the above specific "asm volatile" as deterministic we avoid
+    a false positive from -Wanalyzer-null-dereference.  */
+ 
+ static bool
+ deterministic_p (const gasm *asm_stmt)
+ {
+   /* Assume something volatile with no inputs is querying
+      changeable state e.g. rdtsc.  */
+   if (gimple_asm_ninputs (asm_stmt) == 0
+       && gimple_asm_volatile_p (asm_stmt))
+     return false;
+ 
+   /* Otherwise assume it's purely a function of its inputs.  */
+   return true;
+ }
+ 
+ /* Update this model for the asm STMT, using CTXT to report any
+    diagnostics.
+ 
+    Compare with cfgexpand.cc: expand_asm_stmt.  */
+ 
+ void
+ region_model::on_asm_stmt (const gasm *stmt, region_model_context *ctxt)
+ {
+   logger *logger = ctxt ? ctxt->get_logger () : NULL;
+   LOG_SCOPE (logger);
+ 
+   const unsigned noutputs = gimple_asm_noutputs (stmt);
+   const unsigned ninputs = gimple_asm_ninputs (stmt);
+ 
+   auto_vec<tree> output_tvec;
+   auto_vec<tree> input_tvec;
+   auto_vec<const char *> constraints;
+ 
+   /* Copy the gimple vectors into new vectors that we can manipulate.  */
+   output_tvec.safe_grow (noutputs, true);
+   input_tvec.safe_grow (ninputs, true);
+   constraints.safe_grow (noutputs + ninputs, true);
+ 
+   for (unsigned i = 0; i < noutputs; ++i)
+     {
+       tree t = gimple_asm_output_op (stmt, i);
+       output_tvec[i] = TREE_VALUE (t);
+       constraints[i] = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
+     }
+   for (unsigned i = 0; i < ninputs; i++)
+     {
+       tree t = gimple_asm_input_op (stmt, i);
+       input_tvec[i] = TREE_VALUE (t);
+       constraints[i + noutputs]
+ 	= TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
+     }
+ 
+   /* Determine which regions are reachable from the inputs
+      to this stmt.  */
+   reachable_regions reachable_regs (this);
+ 
+   int num_errors = 0;
+ 
+   auto_vec<const region *> output_regions (noutputs);
+   for (unsigned i = 0; i < noutputs; ++i)
+     {
+       tree val = output_tvec[i];
+       const char *constraint;
+       bool is_inout;
+       bool allows_reg;
+       bool allows_mem;
+ 
+       const region *dst_reg = get_lvalue (val, ctxt);
+       output_regions.quick_push (dst_reg);
+       reachable_regs.add (dst_reg, true);
+ 
+       /* Try to parse the output constraint.  If that fails, there's
+ 	 no point in going further.  */
+       constraint = constraints[i];
+       if (!parse_output_constraint (&constraint, i, ninputs, noutputs,
+ 				    &allows_mem, &allows_reg, &is_inout))
+ 	{
+ 	  if (logger)
+ 	    logger->log ("error parsing constraint for output %i: %qs",
+ 			 i, constraint);
+ 	  num_errors++;
+ 	  continue;
+ 	}
+ 
+       if (logger)
+ 	{
+ 	  logger->log ("output %i: %qs %qE"
+ 		       " is_inout: %i allows_reg: %i allows_mem: %i",
+ 		       i, constraint, val,
+ 		       (int)is_inout, (int)allows_reg, (int)allows_mem);
+ 	  logger->start_log_line ();
+ 	  logger->log_partial ("  region: ");
+ 	  dst_reg->dump_to_pp (logger->get_printer (), true);
+ 	  logger->end_log_line ();
+ 	}
+ 
+     }
+ 
+   /* Ideally should combine with inout_svals to determine the
+      "effective inputs" and use this for the asm_output_svalue.  */
+ 
+   auto_vec<const svalue *> input_svals (ninputs);
+   for (unsigned i = 0; i < ninputs; i++)
+     {
+       tree val = input_tvec[i];
+       const char *constraint = constraints[i + noutputs];
+       bool allows_reg, allows_mem;
+       if (! parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
+ 				    constraints.address (),
+ 				    &allows_mem, &allows_reg))
+ 	{
+ 	  if (logger)
+ 	    logger->log ("error parsing constraint for input %i: %qs",
+ 			 i, constraint);
+ 	  num_errors++;
+ 	  continue;
+ 	}
+ 
+       tree src_expr = input_tvec[i];
+       const svalue *src_sval = get_rvalue (src_expr, ctxt);
+       check_for_poison (src_sval, src_expr, ctxt);
+       input_svals.quick_push (src_sval);
+       reachable_regs.handle_sval (src_sval);
+ 
+       if (logger)
+ 	{
+ 	  logger->log ("input %i: %qs %qE"
+ 		       " allows_reg: %i allows_mem: %i",
+ 		       i, constraint, val,
+ 		       (int)allows_reg, (int)allows_mem);
+ 	  logger->start_log_line ();
+ 	  logger->log_partial ("  sval: ");
+ 	  src_sval->dump_to_pp (logger->get_printer (), true);
+ 	  logger->end_log_line ();
+ 	}
+     }
+ 
+   if (num_errors > 0)
+     gcc_unreachable ();
+ 
+   if (logger)
+     {
+       logger->log ("reachability: ");
+       reachable_regs.dump_to_pp (logger->get_printer ());
+       logger->end_log_line ();
+     }
+ 
+   /* Given the regions that were reachable from the inputs we
+      want to clobber them.
+      This is similar to region_model::handle_unrecognized_call,
+      but the unknown call policies seems too aggressive (e.g. purging state
+      from anything that's ever escaped).  Instead, clobber any clusters
+      that were reachable in *this* asm stmt, rather than those that
+      escaped, and we don't treat the values as having escaped.
+      We also assume that asm stmts don't affect sm-state.  */
+   for (auto iter = reachable_regs.begin_mutable_base_regs ();
+        iter != reachable_regs.end_mutable_base_regs (); ++iter)
+     {
+       const region *base_reg = *iter;
+       if (base_reg->symbolic_for_unknown_ptr_p ()
+ 	  || !base_reg->tracked_p ())
+ 	continue;
+ 
+       binding_cluster *cluster = m_store.get_or_create_cluster (base_reg);
+       cluster->on_asm (stmt, m_mgr->get_store_manager (),
+ 		       conjured_purge (this, ctxt));
+     }
+ 
+   /* Update the outputs.  */
+   for (unsigned output_idx = 0; output_idx < noutputs; output_idx++)
+     {
+       tree dst_expr = output_tvec[output_idx];
+       const region *dst_reg = output_regions[output_idx];
+ 
+       const svalue *sval;
+       if (deterministic_p (stmt)
+ 	  && input_svals.length () <= asm_output_svalue::MAX_INPUTS)
+ 	sval = m_mgr->get_or_create_asm_output_svalue (TREE_TYPE (dst_expr),
+ 						       stmt,
+ 						       output_idx,
+ 						       input_svals);
+       else
+ 	{
+ 	  sval = m_mgr->get_or_create_conjured_svalue (TREE_TYPE (dst_expr),
+ 						       stmt,
+ 						       dst_reg,
+ 						       conjured_purge (this,
+ 								       ctxt));
+ 	}
+       set_value (dst_reg, sval, ctxt);
+     }
+ }
+ 
+ } // namespace ana
+ 
+ #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/region-model-impl-calls.cc gcc-12.1.0/gcc/analyzer/region-model-impl-calls.cc
*** gcc-11.3.0/gcc/analyzer/region-model-impl-calls.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/region-model-impl-calls.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Handling for the known behavior of various specific functions.
!    Copyright (C) 2020-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Handling for the known behavior of various specific functions.
!    Copyright (C) 2020-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 56,61 ****
--- 56,62 ----
  #include "analyzer/program-point.h"
  #include "analyzer/store.h"
  #include "analyzer/region-model.h"
+ #include "analyzer/call-info.h"
  #include "gimple-pretty-print.h"
  
  #if ENABLE_ANALYZER
*************** call_details::call_details (const gcall
*** 79,90 ****
      }
  }
  
  /* Get any uncertainty_t associated with the region_model_context.  */
  
  uncertainty_t *
  call_details::get_uncertainty () const
  {
!   return m_ctxt->get_uncertainty ();
  }
  
  /* If the callsite has a left-hand-side region, set it to RESULT
--- 80,102 ----
      }
  }
  
+ /* Get the manager from m_model.  */
+ 
+ region_model_manager *
+ call_details::get_manager () const
+ {
+   return m_model->get_manager ();
+ }
+ 
  /* Get any uncertainty_t associated with the region_model_context.  */
  
  uncertainty_t *
  call_details::get_uncertainty () const
  {
!   if (m_ctxt)
!     return m_ctxt->get_uncertainty ();
!   else
!     return NULL;
  }
  
  /* If the callsite has a left-hand-side region, set it to RESULT
*************** call_details::get_arg_svalue (unsigned i
*** 137,142 ****
--- 149,181 ----
    return m_model->get_rvalue (arg, m_ctxt);
  }
  
+ /* Attempt to get the string literal for argument IDX, or return NULL
+    otherwise.
+    For use when implementing "__analyzer_*" functions that take
+    string literals.  */
+ 
+ const char *
+ call_details::get_arg_string_literal (unsigned idx) const
+ {
+   const svalue *str_arg = get_arg_svalue (idx);
+   if (const region *pointee = str_arg->maybe_get_region ())
+     if (const string_region *string_reg = pointee->dyn_cast_string_region ())
+       {
+ 	tree string_cst = string_reg->get_string_cst ();
+ 	return TREE_STRING_POINTER (string_cst);
+       }
+   return NULL;
+ }
+ 
+ /* Attempt to get the fndecl used at this call, if known, or NULL_TREE
+    otherwise.  */
+ 
+ tree
+ call_details::get_fndecl_for_call () const
+ {
+   return m_model->get_fndecl_for_call (m_call, m_ctxt);
+ }
+ 
  /* Dump a multiline representation of this call to PP.  */
  
  void
*************** call_details::dump (bool simple) const
*** 173,191 ****
    pp_flush (&pp);
  }
  
  /* Implementations of specific functions.  */
  
  /* Handle the on_call_pre part of "alloca".  */
  
! bool
  region_model::impl_call_alloca (const call_details &cd)
  {
    const svalue *size_sval = cd.get_arg_svalue (0);
!   const region *new_reg = create_region_for_alloca (size_sval);
    const svalue *ptr_sval
      = m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
    cd.maybe_set_lhs (ptr_sval);
-   return true;
  }
  
  /* Handle a call to "__analyzer_describe".
--- 212,240 ----
    pp_flush (&pp);
  }
  
+ /* Get a conjured_svalue for this call for REG,
+    and purge any state already relating to that conjured_svalue.  */
+ 
+ const svalue *
+ call_details::get_or_create_conjured_svalue (const region *reg) const
+ {
+   region_model_manager *mgr = m_model->get_manager ();
+   return mgr->get_or_create_conjured_svalue (reg->get_type (), m_call, reg,
+ 					     conjured_purge (m_model, m_ctxt));
+ }
+ 
  /* Implementations of specific functions.  */
  
  /* Handle the on_call_pre part of "alloca".  */
  
! void
  region_model::impl_call_alloca (const call_details &cd)
  {
    const svalue *size_sval = cd.get_arg_svalue (0);
!   const region *new_reg = create_region_for_alloca (size_sval, cd.get_ctxt ());
    const svalue *ptr_sval
      = m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
    cd.maybe_set_lhs (ptr_sval);
  }
  
  /* Handle a call to "__analyzer_describe".
*************** region_model::impl_call_analyzer_describ
*** 206,211 ****
--- 255,348 ----
    warning_at (call->location, 0, "svalue: %qs", desc.m_buffer);
  }
  
+ /* Handle a call to "__analyzer_dump_capacity".
+ 
+    Emit a warning describing the capacity of the base region of
+    the region pointed to by the 1st argument.
+    This is for use when debugging, and may be of use in DejaGnu tests.  */
+ 
+ void
+ region_model::impl_call_analyzer_dump_capacity (const gcall *call,
+ 						region_model_context *ctxt)
+ {
+   tree t_ptr = gimple_call_arg (call, 0);
+   const svalue *sval_ptr = get_rvalue (t_ptr, ctxt);
+   const region *reg = deref_rvalue (sval_ptr, t_ptr, ctxt);
+   const region *base_reg = reg->get_base_region ();
+   const svalue *capacity = get_capacity (base_reg);
+   label_text desc = capacity->get_desc (true);
+   warning_at (call->location, 0, "capacity: %qs", desc.m_buffer);
+ }
+ 
+ /* Compare D1 and D2 using their names, and then IDs to order them.  */
+ 
+ static int
+ cmp_decls (tree d1, tree d2)
+ {
+   gcc_assert (DECL_P (d1));
+   gcc_assert (DECL_P (d2));
+   if (DECL_NAME (d1) && DECL_NAME (d2))
+     if (int cmp = strcmp (IDENTIFIER_POINTER (DECL_NAME (d1)),
+ 			  IDENTIFIER_POINTER (DECL_NAME (d2))))
+       return cmp;
+   return (int)DECL_UID (d1) - (int)DECL_UID (d2);
+ }
+ 
+ /* Comparator for use by vec<tree>::qsort,
+    using their names, and then IDs to order them.  */
+ 
+ static int
+ cmp_decls_ptr_ptr (const void *p1, const void *p2)
+ {
+   tree const *d1 = (tree const *)p1;
+   tree const *d2 = (tree const *)p2;
+ 
+   return cmp_decls (*d1, *d2);
+ }
+ 
+ /* Handle a call to "__analyzer_dump_escaped".
+ 
+    Emit a warning giving the number of decls that have escaped, followed
+    by a comma-separated list of their names, in alphabetical order.
+ 
+    This is for use when debugging, and may be of use in DejaGnu tests.  */
+ 
+ void
+ region_model::impl_call_analyzer_dump_escaped (const gcall *call)
+ {
+   auto_vec<tree> escaped_decls;
+   for (auto iter : m_store)
+     {
+       const binding_cluster *c = iter.second;
+       if (!c->escaped_p ())
+ 	continue;
+       if (tree decl = c->get_base_region ()->maybe_get_decl ())
+ 	escaped_decls.safe_push (decl);
+     }
+ 
+   /* Sort them into deterministic order; alphabetical is
+      probably most user-friendly.  */
+   escaped_decls.qsort (cmp_decls_ptr_ptr);
+ 
+   pretty_printer pp;
+   pp_format_decoder (&pp) = default_tree_printer;
+   pp_show_color (&pp) = pp_show_color (global_dc->printer);
+   bool first = true;
+   for (auto iter : escaped_decls)
+     {
+       if (first)
+ 	first = false;
+       else
+ 	pp_string (&pp, ", ");
+       pp_printf (&pp, "%qD", iter);
+     }
+   /* Print the number to make it easier to write DejaGnu tests for
+      the "nothing has escaped" case.  */
+   warning_at (call->location, 0, "escaped: %i: %s",
+ 	      escaped_decls.length (),
+ 	      pp_formatted_text (&pp));
+ }
+ 
  /* Handle a call to "__analyzer_eval" by evaluating the input
     and dumping as a dummy warning, so that test cases can use
     dg-warning to validate the result (and so unexpected warnings will
*************** region_model::impl_call_analyzer_eval (c
*** 225,242 ****
  
  /* Handle the on_call_pre part of "__builtin_expect" etc.  */
  
! bool
  region_model::impl_call_builtin_expect (const call_details &cd)
  {
    /* __builtin_expect's return value is its initial argument.  */
    const svalue *sval = cd.get_arg_svalue (0);
    cd.maybe_set_lhs (sval);
-   return false;
  }
  
  /* Handle the on_call_pre part of "calloc".  */
  
! bool
  region_model::impl_call_calloc (const call_details &cd)
  {
    const svalue *nmemb_sval = cd.get_arg_svalue (0);
--- 362,378 ----
  
  /* Handle the on_call_pre part of "__builtin_expect" etc.  */
  
! void
  region_model::impl_call_builtin_expect (const call_details &cd)
  {
    /* __builtin_expect's return value is its initial argument.  */
    const svalue *sval = cd.get_arg_svalue (0);
    cd.maybe_set_lhs (sval);
  }
  
  /* Handle the on_call_pre part of "calloc".  */
  
! void
  region_model::impl_call_calloc (const call_details &cd)
  {
    const svalue *nmemb_sval = cd.get_arg_svalue (0);
*************** region_model::impl_call_calloc (const ca
*** 245,259 ****
    const svalue *prod_sval
      = m_mgr->get_or_create_binop (size_type_node, MULT_EXPR,
  				  nmemb_sval, size_sval);
!   const region *new_reg = create_region_for_heap_alloc (prod_sval);
!   zero_fill_region (new_reg);
    if (cd.get_lhs_type ())
      {
        const svalue *ptr_sval
  	= m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
        cd.maybe_set_lhs (ptr_sval);
      }
-   return true;
  }
  
  /* Handle the on_call_pre part of "error" and "error_at_line" from
--- 381,397 ----
    const svalue *prod_sval
      = m_mgr->get_or_create_binop (size_type_node, MULT_EXPR,
  				  nmemb_sval, size_sval);
!   const region *new_reg
!     = create_region_for_heap_alloc (prod_sval, cd.get_ctxt ());
!   const region *sized_reg
!     = m_mgr->get_sized_region (new_reg, NULL_TREE, prod_sval);
!   zero_fill_region (sized_reg);
    if (cd.get_lhs_type ())
      {
        const svalue *ptr_sval
  	= m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
        cd.maybe_set_lhs (ptr_sval);
      }
  }
  
  /* Handle the on_call_pre part of "error" and "error_at_line" from
*************** region_model::impl_call_error (const cal
*** 286,291 ****
--- 424,459 ----
    return true;
  }
  
+ /* Handle the on_call_pre part of "fgets" and "fgets_unlocked".  */
+ 
+ void
+ region_model::impl_call_fgets (const call_details &cd)
+ {
+   /* Ideally we would bifurcate state here between the
+      error vs no error cases.  */
+   const svalue *ptr_sval = cd.get_arg_svalue (0);
+   if (const region *reg = ptr_sval->maybe_get_region ())
+     {
+       const region *base_reg = reg->get_base_region ();
+       const svalue *new_sval = cd.get_or_create_conjured_svalue (base_reg);
+       set_value (base_reg, new_sval, cd.get_ctxt ());
+     }
+ }
+ 
+ /* Handle the on_call_pre part of "fread".  */
+ 
+ void
+ region_model::impl_call_fread (const call_details &cd)
+ {
+   const svalue *ptr_sval = cd.get_arg_svalue (0);
+   if (const region *reg = ptr_sval->maybe_get_region ())
+     {
+       const region *base_reg = reg->get_base_region ();
+       const svalue *new_sval = cd.get_or_create_conjured_svalue (base_reg);
+       set_value (base_reg, new_sval, cd.get_ctxt ());
+     }
+ }
+ 
  /* Handle the on_call_post part of "free", after sm-handling.
  
     If the ptr points to an underlying heap region, delete the region,
*************** void
*** 305,365 ****
  region_model::impl_call_free (const call_details &cd)
  {
    const svalue *ptr_sval = cd.get_arg_svalue (0);
!   if (const region_svalue *ptr_to_region_sval
!       = ptr_sval->dyn_cast_region_svalue ())
      {
        /* If the ptr points to an underlying heap region, delete it,
  	 poisoning pointers.  */
-       const region *freed_reg = ptr_to_region_sval->get_pointee ();
        unbind_region_and_descendents (freed_reg, POISON_KIND_FREED);
      }
  }
  
  /* Handle the on_call_pre part of "malloc".  */
  
! bool
  region_model::impl_call_malloc (const call_details &cd)
  {
    const svalue *size_sval = cd.get_arg_svalue (0);
!   const region *new_reg = create_region_for_heap_alloc (size_sval);
    if (cd.get_lhs_type ())
      {
        const svalue *ptr_sval
  	= m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
        cd.maybe_set_lhs (ptr_sval);
      }
-   return true;
  }
  
  /* Handle the on_call_pre part of "memcpy" and "__builtin_memcpy".  */
  
  void
  region_model::impl_call_memcpy (const call_details &cd)
  {
!   const svalue *dest_sval = cd.get_arg_svalue (0);
    const svalue *num_bytes_sval = cd.get_arg_svalue (2);
  
!   const region *dest_reg = deref_rvalue (dest_sval, cd.get_arg_tree (0),
  					 cd.get_ctxt ());
  
!   cd.maybe_set_lhs (dest_sval);
! 
!   if (tree num_bytes = num_bytes_sval->maybe_get_constant ())
!     {
!       /* "memcpy" of zero size is a no-op.  */
!       if (zerop (num_bytes))
! 	return;
!     }
! 
!   check_for_writable_region (dest_reg, cd.get_ctxt ());
  
!   /* Otherwise, mark region's contents as unknown.  */
!   mark_region_as_unknown (dest_reg, cd.get_uncertainty ());
  }
  
  /* Handle the on_call_pre part of "memset" and "__builtin_memset".  */
  
! bool
  region_model::impl_call_memset (const call_details &cd)
  {
    const svalue *dest_sval = cd.get_arg_svalue (0);
--- 473,532 ----
  region_model::impl_call_free (const call_details &cd)
  {
    const svalue *ptr_sval = cd.get_arg_svalue (0);
!   if (const region *freed_reg = ptr_sval->maybe_get_region ())
      {
        /* If the ptr points to an underlying heap region, delete it,
  	 poisoning pointers.  */
        unbind_region_and_descendents (freed_reg, POISON_KIND_FREED);
+       m_dynamic_extents.remove (freed_reg);
      }
  }
  
  /* Handle the on_call_pre part of "malloc".  */
  
! void
  region_model::impl_call_malloc (const call_details &cd)
  {
    const svalue *size_sval = cd.get_arg_svalue (0);
!   const region *new_reg
!     = create_region_for_heap_alloc (size_sval, cd.get_ctxt ());
    if (cd.get_lhs_type ())
      {
        const svalue *ptr_sval
  	= m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
        cd.maybe_set_lhs (ptr_sval);
      }
  }
  
  /* Handle the on_call_pre part of "memcpy" and "__builtin_memcpy".  */
+ // TODO: complain about overlapping src and dest.
  
  void
  region_model::impl_call_memcpy (const call_details &cd)
  {
!   const svalue *dest_ptr_sval = cd.get_arg_svalue (0);
!   const svalue *src_ptr_sval = cd.get_arg_svalue (1);
    const svalue *num_bytes_sval = cd.get_arg_svalue (2);
  
!   const region *dest_reg = deref_rvalue (dest_ptr_sval, cd.get_arg_tree (0),
  					 cd.get_ctxt ());
+   const region *src_reg = deref_rvalue (src_ptr_sval, cd.get_arg_tree (1),
+ 					cd.get_ctxt ());
  
!   cd.maybe_set_lhs (dest_ptr_sval);
  
!   const region *sized_src_reg
!     = m_mgr->get_sized_region (src_reg, NULL_TREE, num_bytes_sval);
!   const region *sized_dest_reg
!     = m_mgr->get_sized_region (dest_reg, NULL_TREE, num_bytes_sval);
!   const svalue *src_contents_sval
!     = get_store_value (sized_src_reg, cd.get_ctxt ());
!   set_value (sized_dest_reg, src_contents_sval, cd.get_ctxt ());
  }
  
  /* Handle the on_call_pre part of "memset" and "__builtin_memset".  */
  
! void
  region_model::impl_call_memset (const call_details &cd)
  {
    const svalue *dest_sval = cd.get_arg_svalue (0);
*************** region_model::impl_call_memset (const ca
*** 369,450 ****
    const region *dest_reg = deref_rvalue (dest_sval, cd.get_arg_tree (0),
  					  cd.get_ctxt ());
  
!   if (tree num_bytes = num_bytes_sval->maybe_get_constant ())
!     {
!       /* "memset" of zero size is a no-op.  */
!       if (zerop (num_bytes))
! 	return true;
! 
!       /* Set with known amount.  */
!       byte_size_t reg_size;
!       if (dest_reg->get_byte_size (&reg_size))
! 	{
! 	  /* Check for an exact size match.  */
! 	  if (reg_size == wi::to_offset (num_bytes))
! 	    {
! 	      if (tree cst = fill_value_sval->maybe_get_constant ())
! 		{
! 		  if (zerop (cst))
! 		    {
! 		      zero_fill_region (dest_reg);
! 		      return true;
! 		    }
! 		}
! 	    }
! 	}
!     }
! 
!   check_for_writable_region (dest_reg, cd.get_ctxt ());
  
!   /* Otherwise, mark region's contents as unknown.  */
!   mark_region_as_unknown (dest_reg, cd.get_uncertainty ());
!   return false;
  }
  
  /* Handle the on_call_pre part of "operator new".  */
  
! bool
  region_model::impl_call_operator_new (const call_details &cd)
  {
    const svalue *size_sval = cd.get_arg_svalue (0);
!   const region *new_reg = create_region_for_heap_alloc (size_sval);
    if (cd.get_lhs_type ())
      {
        const svalue *ptr_sval
  	= m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
        cd.maybe_set_lhs (ptr_sval);
      }
-   return false;
  }
  
  /* Handle the on_call_pre part of "operator delete", which comes in
     both sized and unsized variants (2 arguments and 1 argument
     respectively).  */
  
! bool
  region_model::impl_call_operator_delete (const call_details &cd)
  {
    const svalue *ptr_sval = cd.get_arg_svalue (0);
!   if (const region_svalue *ptr_to_region_sval
!       = ptr_sval->dyn_cast_region_svalue ())
      {
        /* If the ptr points to an underlying heap region, delete it,
  	 poisoning pointers.  */
-       const region *freed_reg = ptr_to_region_sval->get_pointee ();
        unbind_region_and_descendents (freed_reg, POISON_KIND_FREED);
      }
-   return false;
  }
  
! /* Handle the on_call_pre part of "realloc".  */
  
  void
! region_model::impl_call_realloc (const call_details &)
  {
!   /* Currently we don't support bifurcating state, so there's no good
!      way to implement realloc(3).
!      For now, malloc_state_machine::on_realloc_call has a minimal
!      implementation to suppress false positives.  */
  }
  
  /* Handle the on_call_pre part of "strcpy" and "__builtin_strcpy_chk".  */
--- 536,858 ----
    const region *dest_reg = deref_rvalue (dest_sval, cd.get_arg_tree (0),
  					  cd.get_ctxt ());
  
!   const svalue *fill_value_u8
!     = m_mgr->get_or_create_cast (unsigned_char_type_node, fill_value_sval);
  
!   const region *sized_dest_reg = m_mgr->get_sized_region (dest_reg,
! 							  NULL_TREE,
! 							  num_bytes_sval);
!   check_region_for_write (sized_dest_reg, cd.get_ctxt ());
!   fill_region (sized_dest_reg, fill_value_u8);
  }
  
  /* Handle the on_call_pre part of "operator new".  */
  
! void
  region_model::impl_call_operator_new (const call_details &cd)
  {
    const svalue *size_sval = cd.get_arg_svalue (0);
!   const region *new_reg
!     = create_region_for_heap_alloc (size_sval, cd.get_ctxt ());
    if (cd.get_lhs_type ())
      {
        const svalue *ptr_sval
  	= m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
        cd.maybe_set_lhs (ptr_sval);
      }
  }
  
  /* Handle the on_call_pre part of "operator delete", which comes in
     both sized and unsized variants (2 arguments and 1 argument
     respectively).  */
  
! void
  region_model::impl_call_operator_delete (const call_details &cd)
  {
    const svalue *ptr_sval = cd.get_arg_svalue (0);
!   if (const region *freed_reg = ptr_sval->maybe_get_region ())
      {
        /* If the ptr points to an underlying heap region, delete it,
  	 poisoning pointers.  */
        unbind_region_and_descendents (freed_reg, POISON_KIND_FREED);
      }
  }
  
! /* Handle the on_call_post part of "realloc":
! 
!      void *realloc(void *ptr, size_t size);
! 
!    realloc(3) is awkward, since it has various different outcomes
!    that are best modelled as separate exploded nodes/edges.
! 
!    We first check for sm-state, in
!    malloc_state_machine::on_realloc_call, so that we
!    can complain about issues such as realloc of a non-heap
!    pointer, and terminate the path for such cases (and issue
!    the complaints at the call's exploded node).
! 
!    Assuming that these checks pass, we split the path here into
!    three special cases (and terminate the "standard" path):
!    (A) failure, returning NULL
!    (B) success, growing the buffer in-place without moving it
!    (C) success, allocating a new buffer, copying the content
!    of the old buffer to it, and freeing the old buffer.
! 
!    Each of these has a custom_edge_info subclass, which updates
!    the region_model and sm-state of the destination state.  */
  
  void
! region_model::impl_call_realloc (const call_details &cd)
  {
!   /* Three custom subclasses of custom_edge_info, for handling the various
!      outcomes of "realloc".  */
! 
!   /* Concrete custom_edge_info: a realloc call that fails, returning NULL.  */
!   class failure : public failed_call_info
!   {
!   public:
!     failure (const call_details &cd)
!     : failed_call_info (cd)
!     {
!     }
! 
!     bool update_model (region_model *model,
! 		       const exploded_edge *,
! 		       region_model_context *ctxt) const FINAL OVERRIDE
!     {
!       /* Return NULL; everything else is unchanged.  */
!       const call_details cd (get_call_details (model, ctxt));
!       if (cd.get_lhs_type ())
! 	{
! 	  const svalue *zero
! 	    = model->m_mgr->get_or_create_int_cst (cd.get_lhs_type (), 0);
! 	  model->set_value (cd.get_lhs_region (),
! 			    zero,
! 			    cd.get_ctxt ());
! 	}
!       return true;
!     }
!   };
! 
!   /* Concrete custom_edge_info: a realloc call that succeeds, growing
!      the existing buffer without moving it.  */
!   class success_no_move : public call_info
!   {
!   public:
!     success_no_move (const call_details &cd)
!     : call_info (cd)
!     {
!     }
! 
!     label_text get_desc (bool can_colorize) const FINAL OVERRIDE
!     {
!       return make_label_text (can_colorize,
! 			      "when %qE succeeds, without moving buffer",
! 			      get_fndecl ());
!     }
! 
!     bool update_model (region_model *model,
! 		       const exploded_edge *,
! 		       region_model_context *ctxt) const FINAL OVERRIDE
!     {
!       /* Update size of buffer and return the ptr unchanged.  */
!       const call_details cd (get_call_details (model, ctxt));
!       const svalue *ptr_sval = cd.get_arg_svalue (0);
!       const svalue *size_sval = cd.get_arg_svalue (1);
! 
!       /* We can only grow in place with a non-NULL pointer.  */
!       {
! 	const svalue *null_ptr
! 	  = model->m_mgr->get_or_create_int_cst (ptr_sval->get_type (), 0);
! 	if (!model->add_constraint (ptr_sval, NE_EXPR, null_ptr,
! 				    cd.get_ctxt ()))
! 	  return false;
!       }
! 
!       if (const region *buffer_reg = model->deref_rvalue (ptr_sval, NULL_TREE,
! 							  ctxt))
! 	if (compat_types_p (size_sval->get_type (), size_type_node))
! 	  model->set_dynamic_extents (buffer_reg, size_sval, ctxt);
!       if (cd.get_lhs_region ())
! 	{
! 	  model->set_value (cd.get_lhs_region (), ptr_sval, cd.get_ctxt ());
! 	  const svalue *zero
! 	    = model->m_mgr->get_or_create_int_cst (cd.get_lhs_type (), 0);
! 	  return model->add_constraint (ptr_sval, NE_EXPR, zero, cd.get_ctxt ());
! 	}
!       else
! 	return true;
!     }
!   };
! 
!   /* Concrete custom_edge_info: a realloc call that succeeds, freeing
!      the existing buffer and moving the content to a freshly allocated
!      buffer.  */
!   class success_with_move : public call_info
!   {
!   public:
!     success_with_move (const call_details &cd)
!     : call_info (cd)
!     {
!     }
! 
!     label_text get_desc (bool can_colorize) const FINAL OVERRIDE
!     {
!       return make_label_text (can_colorize,
! 			      "when %qE succeeds, moving buffer",
! 			      get_fndecl ());
!     }
!     bool update_model (region_model *model,
! 		       const exploded_edge *,
! 		       region_model_context *ctxt) const FINAL OVERRIDE
!     {
!       const call_details cd (get_call_details (model, ctxt));
!       const svalue *old_ptr_sval = cd.get_arg_svalue (0);
!       const svalue *new_size_sval = cd.get_arg_svalue (1);
! 
!       /* Create the new region.  */
!       const region *new_reg
! 	= model->create_region_for_heap_alloc (new_size_sval, ctxt);
!       const svalue *new_ptr_sval
! 	= model->m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
!       if (!model->add_constraint (new_ptr_sval, NE_EXPR, old_ptr_sval,
! 				  cd.get_ctxt ()))
! 	return false;
! 
!       if (cd.get_lhs_type ())
! 	cd.maybe_set_lhs (new_ptr_sval);
! 
!       if (const region *freed_reg = model->deref_rvalue (old_ptr_sval,
! 							 NULL_TREE, ctxt))
! 	{
! 	  /* Copy the data.  */
! 	  const svalue *old_size_sval = model->get_dynamic_extents (freed_reg);
! 	  if (old_size_sval)
! 	    {
! 	      const region *sized_old_reg
! 		= model->m_mgr->get_sized_region (freed_reg, NULL,
! 						  old_size_sval);
! 	      const svalue *buffer_content_sval
! 		= model->get_store_value (sized_old_reg, cd.get_ctxt ());
! 	      const region *sized_new_reg
! 		= model->m_mgr->get_sized_region (new_reg, NULL,
! 						  old_size_sval);
! 	      model->set_value (sized_new_reg, buffer_content_sval,
! 				cd.get_ctxt ());
! 	    }
! 	  else
! 	    {
! 	      /* We don't know how big the old region was;
! 		 mark the new region as having been touched to avoid uninit
! 		 issues.  */
! 	      model->mark_region_as_unknown (new_reg, cd.get_uncertainty ());
! 	    }
! 
! 	  /* Free the old region, so that pointers to the old buffer become
! 	     invalid.  */
! 
! 	  /* If the ptr points to an underlying heap region, delete it,
! 	     poisoning pointers.  */
! 	  model->unbind_region_and_descendents (freed_reg, POISON_KIND_FREED);
! 	  model->m_dynamic_extents.remove (freed_reg);
! 	}
! 
!       /* Update the sm-state: mark the old_ptr_sval as "freed",
! 	 and the new_ptr_sval as "nonnull".  */
!       model->on_realloc_with_move (cd, old_ptr_sval, new_ptr_sval);
! 
!       if (cd.get_lhs_type ())
! 	{
! 	  const svalue *zero
! 	    = model->m_mgr->get_or_create_int_cst (cd.get_lhs_type (), 0);
! 	  return model->add_constraint (new_ptr_sval, NE_EXPR, zero,
! 					cd.get_ctxt ());
! 	}
!       else
! 	return true;
!     }
!   };
! 
!   /* Body of region_model::impl_call_realloc.  */
! 
!   if (cd.get_ctxt ())
!     {
!       cd.get_ctxt ()->bifurcate (new failure (cd));
!       cd.get_ctxt ()->bifurcate (new success_no_move (cd));
!       cd.get_ctxt ()->bifurcate (new success_with_move (cd));
!       cd.get_ctxt ()->terminate_path ();
!     }
! }
! 
! /* Handle the on_call_pre part of "strchr" and "__builtin_strchr".  */
! 
! void
! region_model::impl_call_strchr (const call_details &cd)
! {
!   class strchr_call_info : public call_info
!   {
!   public:
!     strchr_call_info (const call_details &cd, bool found)
!     : call_info (cd), m_found (found)
!     {
!     }
! 
!     label_text get_desc (bool can_colorize) const FINAL OVERRIDE
!     {
!       if (m_found)
! 	return make_label_text (can_colorize,
! 				"when %qE returns non-NULL",
! 				get_fndecl ());
!       else
! 	return make_label_text (can_colorize,
! 				"when %qE returns NULL",
! 				get_fndecl ());
!     }
! 
!     bool update_model (region_model *model,
! 		       const exploded_edge *,
! 		       region_model_context *ctxt) const FINAL OVERRIDE
!     {
!       const call_details cd (get_call_details (model, ctxt));
!       if (tree lhs_type = cd.get_lhs_type ())
! 	{
! 	  region_model_manager *mgr = model->get_manager ();
! 	  const svalue *result;
! 	  if (m_found)
! 	    {
! 	      const svalue *str_sval = cd.get_arg_svalue (0);
! 	      const region *str_reg
! 		= model->deref_rvalue (str_sval, cd.get_arg_tree (0),
! 				       cd.get_ctxt ());
! 	      /* We want str_sval + OFFSET for some unknown OFFSET.
! 		 Use a conjured_svalue to represent the offset,
! 		 using the str_reg as the id of the conjured_svalue.  */
! 	      const svalue *offset
! 		= mgr->get_or_create_conjured_svalue (size_type_node,
! 						      cd.get_call_stmt (),
! 						      str_reg,
! 						      conjured_purge (model,
! 								      ctxt));
! 	      result = mgr->get_or_create_binop (lhs_type, POINTER_PLUS_EXPR,
! 						 str_sval, offset);
! 	    }
! 	  else
! 	    result = mgr->get_or_create_int_cst (lhs_type, 0);
! 	  cd.maybe_set_lhs (result);
! 	}
!       return true;
!     }
!   private:
!     bool m_found;
!   };
! 
!   /* Bifurcate state, creating a "not found" out-edge.  */
!   if (cd.get_ctxt ())
!     cd.get_ctxt ()->bifurcate (new strchr_call_info (cd, false));
! 
!   /* The "unbifurcated" state is the "found" case.  */
!   strchr_call_info found (cd, true);
!   found.update_model (this, NULL, cd.get_ctxt ());
  }
  
  /* Handle the on_call_pre part of "strcpy" and "__builtin_strcpy_chk".  */
*************** region_model::impl_call_strcpy (const ca
*** 458,473 ****
  
    cd.maybe_set_lhs (dest_sval);
  
!   check_for_writable_region (dest_reg, cd.get_ctxt ());
  
    /* For now, just mark region's contents as unknown.  */
    mark_region_as_unknown (dest_reg, cd.get_uncertainty ());
  }
  
! /* Handle the on_call_pre part of "strlen".
!    Return true if the LHS is updated.  */
  
! bool
  region_model::impl_call_strlen (const call_details &cd)
  {
    region_model_context *ctxt = cd.get_ctxt ();
--- 866,880 ----
  
    cd.maybe_set_lhs (dest_sval);
  
!   check_region_for_write (dest_reg, cd.get_ctxt ());
  
    /* For now, just mark region's contents as unknown.  */
    mark_region_as_unknown (dest_reg, cd.get_uncertainty ());
  }
  
! /* Handle the on_call_pre part of "strlen".  */
  
! void
  region_model::impl_call_strlen (const call_details &cd)
  {
    region_model_context *ctxt = cd.get_ctxt ();
*************** region_model::impl_call_strlen (const ca
*** 486,496 ****
  	  const svalue *result_sval
  	    = m_mgr->get_or_create_constant_svalue (t_cst);
  	  cd.maybe_set_lhs (result_sval);
! 	  return true;
  	}
      }
!   /* Otherwise an unknown value.  */
!   return true;
  }
  
  /* Handle calls to functions referenced by
--- 893,902 ----
  	  const svalue *result_sval
  	    = m_mgr->get_or_create_constant_svalue (t_cst);
  	  cd.maybe_set_lhs (result_sval);
! 	  return;
  	}
      }
!   /* Otherwise a conjured value.  */
  }
  
  /* Handle calls to functions referenced by
diff -Nrcpad gcc-11.3.0/gcc/analyzer/region-model-manager.cc gcc-12.1.0/gcc/analyzer/region-model-manager.cc
*** gcc-11.3.0/gcc/analyzer/region-model-manager.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/region-model-manager.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Consolidation of svalues and regions.
!    Copyright (C) 2020-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Consolidation of svalues and regions.
!    Copyright (C) 2020-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 56,61 ****
--- 56,62 ----
  #include "analyzer/program-point.h"
  #include "analyzer/store.h"
  #include "analyzer/region-model.h"
+ #include "analyzer/constraint-manager.h"
  
  #if ENABLE_ANALYZER
  
*************** namespace ana {
*** 65,82 ****
  
  /* region_model_manager's ctor.  */
  
! region_model_manager::region_model_manager ()
! : m_next_region_id (0),
    m_root_region (alloc_region_id ()),
    m_stack_region (alloc_region_id (), &m_root_region),
    m_heap_region (alloc_region_id (), &m_root_region),
    m_unknown_NULL (NULL),
    m_max_complexity (0, 0),
    m_code_region (alloc_region_id (), &m_root_region),
    m_fndecls_map (), m_labels_map (),
    m_globals_region (alloc_region_id (), &m_root_region),
    m_globals_map (),
!   m_store_mgr (this)
  {
  }
  
--- 66,86 ----
  
  /* region_model_manager's ctor.  */
  
! region_model_manager::region_model_manager (logger *logger)
! : m_logger (logger),
!   m_next_region_id (0),
    m_root_region (alloc_region_id ()),
    m_stack_region (alloc_region_id (), &m_root_region),
    m_heap_region (alloc_region_id (), &m_root_region),
    m_unknown_NULL (NULL),
+   m_checking_feasibility (false),
    m_max_complexity (0, 0),
    m_code_region (alloc_region_id (), &m_root_region),
    m_fndecls_map (), m_labels_map (),
    m_globals_region (alloc_region_id (), &m_root_region),
    m_globals_map (),
!   m_store_mgr (this),
!   m_range_mgr (new bounded_ranges_manager ())
  {
  }
  
*************** region_model_manager::~region_model_mana
*** 141,146 ****
--- 145,152 ----
    for (string_map_t::iterator iter = m_string_map.begin ();
         iter != m_string_map.end (); ++iter)
      delete (*iter).second;
+ 
+   delete m_range_mgr;
  }
  
  /* Return true if C exceeds the complexity limit for svalues.  */
*************** region_model_manager::too_complex_p (con
*** 160,165 ****
--- 166,174 ----
  bool
  region_model_manager::reject_if_too_complex (svalue *sval)
  {
+   if (m_checking_feasibility)
+     return false;
+ 
    const complexity &c = sval->get_complexity ();
    if (!too_complex_p (c))
      {
*************** const svalue *
*** 200,205 ****
--- 209,215 ----
  region_model_manager::get_or_create_constant_svalue (tree cst_expr)
  {
    gcc_assert (cst_expr);
+   gcc_assert (CONSTANT_CLASS_P (cst_expr));
  
    constant_svalue **slot = m_constants_map.get (cst_expr);
    if (slot)
*************** region_model_manager::get_or_create_int_
*** 229,234 ****
--- 239,249 ----
  const svalue *
  region_model_manager::get_or_create_unknown_svalue (tree type)
  {
+   /* Don't create unknown values when doing feasibility testing;
+      instead, create a unique svalue.  */
+   if (m_checking_feasibility)
+     return create_unique_svalue (type);
+ 
    /* Special-case NULL, so that the hash_map can use NULL as the
       "empty" value.  */
    if (type == NULL_TREE)
*************** region_model_manager::get_or_create_unkn
*** 246,257 ****
--- 261,286 ----
    return sval;
  }
  
+ /* Return a freshly-allocated svalue of TYPE, owned by this manager.  */
+ 
+ const svalue *
+ region_model_manager::create_unique_svalue (tree type)
+ {
+   svalue *sval = new placeholder_svalue (type, "unique");
+   m_managed_dynamic_svalues.safe_push (sval);
+   return sval;
+ }
+ 
  /* Return the svalue * for the initial value of REG, creating it if
     necessary.  */
  
  const svalue *
  region_model_manager::get_or_create_initial_value (const region *reg)
  {
+   if (!reg->can_have_initial_svalue_p ())
+     return get_or_create_poisoned_svalue (POISON_KIND_UNINIT,
+ 					  reg->get_type ());
+ 
    /* The initial value of a cast is a cast of the initial value.  */
    if (const cast_region *cast_reg = reg->dyn_cast_cast_region ())
      {
*************** region_model_manager::maybe_fold_unaryop
*** 336,341 ****
--- 365,377 ----
    /* Ops on "unknown" are also unknown.  */
    if (arg->get_kind () == SK_UNKNOWN)
      return get_or_create_unknown_svalue (type);
+   /* Likewise for "poisoned".  */
+   else if (const poisoned_svalue *poisoned_sval
+ 	     = arg->dyn_cast_poisoned_svalue ())
+     return get_or_create_poisoned_svalue (poisoned_sval->get_poison_kind (),
+ 					  type);
+ 
+   gcc_assert (arg->can_have_associated_state_p ());
  
    switch (op)
      {
*************** region_model_manager::maybe_fold_unaryop
*** 361,366 ****
--- 397,409 ----
  		    == boolean_true_node))
  	      return maybe_fold_unaryop (type, op, innermost_arg);
  	  }
+ 	/* Avoid creating symbolic regions for pointer casts by
+ 	   simplifying (T*)(&REGION) to ((T*)&REGION).  */
+ 	if (const region_svalue *region_sval = arg->dyn_cast_region_svalue ())
+ 	  if (POINTER_TYPE_P (type)
+ 	      && region_sval->get_type ()
+ 	      && POINTER_TYPE_P (region_sval->get_type ()))
+ 	    return get_ptr_svalue (type, region_sval->get_pointee ());
        }
        break;
      case TRUTH_NOT_EXPR:
*************** region_model_manager::maybe_fold_unaryop
*** 384,390 ****
    /* Constants.  */
    if (tree cst = arg->maybe_get_constant ())
      if (tree result = fold_unary (op, type, cst))
!       return get_or_create_constant_svalue (result);
  
    return NULL;
  }
--- 427,449 ----
    /* Constants.  */
    if (tree cst = arg->maybe_get_constant ())
      if (tree result = fold_unary (op, type, cst))
!       {
! 	if (CONSTANT_CLASS_P (result))
! 	  return get_or_create_constant_svalue (result);
! 
! 	/* fold_unary can return casts of constants; try to handle them.  */
! 	if (op != NOP_EXPR
! 		 && type
! 		 && TREE_CODE (result) == NOP_EXPR
! 		 && CONSTANT_CLASS_P (TREE_OPERAND (result, 0)))
! 	  {
! 	    const svalue *inner_cst
! 	      = get_or_create_constant_svalue (TREE_OPERAND (result, 0));
! 	    return get_or_create_cast (type,
! 				       get_or_create_cast (TREE_TYPE (result),
! 							   inner_cst));
! 	  }
!       }
  
    return NULL;
  }
*************** const svalue *
*** 438,443 ****
--- 497,513 ----
  region_model_manager::get_or_create_cast (tree type, const svalue *arg)
  {
    gcc_assert (type);
+ 
+   /* No-op if the types are the same.  */
+   if (type == arg->get_type ())
+     return arg;
+ 
+   /* Don't attempt to handle casts involving vector types for now.  */
+   if (TREE_CODE (type) == VECTOR_TYPE
+       || (arg->get_type ()
+ 	  && TREE_CODE (arg->get_type ()) == VECTOR_TYPE))
+     return get_or_create_unknown_svalue (type);
+ 
    enum tree_code op = get_code_for_cast (type, arg->get_type ());
    return get_or_create_unaryop (type, op, arg);
  }
*************** maybe_undo_optimize_bit_field_compare (t
*** 477,483 ****
      bound_bits = bit_range (BITS_PER_UNIT - bits.get_next_bit_offset (),
  			    bits.m_size_in_bits);
    const concrete_binding *conc
!     = get_store_manager ()->get_concrete_binding (bound_bits, BK_direct);
    const svalue *sval = map.get (conc);
    if (!sval)
      return NULL;
--- 547,553 ----
      bound_bits = bit_range (BITS_PER_UNIT - bits.get_next_bit_offset (),
  			    bits.m_size_in_bits);
    const concrete_binding *conc
!     = get_store_manager ()->get_concrete_binding (bound_bits);
    const svalue *sval = map.get (conc);
    if (!sval)
      return NULL;
*************** region_model_manager::maybe_fold_binop (
*** 557,562 ****
--- 627,668 ----
  							 cst1, arg1))
  	      return sval;
  	}
+       if (arg0->get_type () == boolean_type_node
+ 	  && arg1->get_type () == boolean_type_node)
+ 	{
+ 	  /* If the LHS are both _Bool, then... */
+ 	  /* ..."(1 & x) -> x".  */
+ 	  if (cst0 && !zerop (cst0))
+ 	    return get_or_create_cast (type, arg1);
+ 	  /* ..."(x & 1) -> x".  */
+ 	  if (cst1 && !zerop (cst1))
+ 	    return get_or_create_cast (type, arg0);
+ 	  /* ..."(0 & x) -> 0".  */
+ 	  if (cst0 && zerop (cst0))
+ 	    return get_or_create_int_cst (type, 0);
+ 	  /* ..."(x & 0) -> 0".  */
+ 	  if (cst1 && zerop (cst1))
+ 	    return get_or_create_int_cst (type, 0);
+ 	}
+       break;
+     case BIT_IOR_EXPR:
+       if (arg0->get_type () == boolean_type_node
+ 	  && arg1->get_type () == boolean_type_node)
+ 	{
+ 	  /* If the LHS are both _Bool, then... */
+ 	  /* ..."(1 | x) -> 1".  */
+ 	  if (cst0 && !zerop (cst0))
+ 	    return get_or_create_int_cst (type, 1);
+ 	  /* ..."(x | 1) -> 1".  */
+ 	  if (cst1 && !zerop (cst1))
+ 	    return get_or_create_int_cst (type, 1);
+ 	  /* ..."(0 | x) -> x".  */
+ 	  if (cst0 && zerop (cst0))
+ 	    return get_or_create_cast (type, arg1);
+ 	  /* ..."(x | 0) -> x".  */
+ 	  if (cst1 && zerop (cst1))
+ 	    return get_or_create_cast (type, arg0);
+ 	}
        break;
      case TRUTH_ANDIF_EXPR:
      case TRUTH_AND_EXPR:
*************** region_model_manager::maybe_fold_binop (
*** 611,622 ****
  	     get_or_create_binop (size_type_node, op,
  				  binop->get_arg1 (), arg1));
  
-   /* Ops on "unknown" are also unknown (unless we can use one of the
-      identities above).  */
-   if (arg0->get_kind () == SK_UNKNOWN
-       || arg1->get_kind () == SK_UNKNOWN)
-     return get_or_create_unknown_svalue (type);
- 
    /* etc.  */
  
    return NULL;
--- 717,722 ----
*************** region_model_manager::get_or_create_bino
*** 637,642 ****
--- 737,748 ----
    if (const svalue *folded = maybe_fold_binop (type, op, arg0, arg1))
      return folded;
  
+   /* Ops on "unknown"/"poisoned" are unknown (unless we were able to fold
+      it via an identity in maybe_fold_binop).  */
+   if (!arg0->can_have_associated_state_p ()
+       || !arg1->can_have_associated_state_p ())
+     return get_or_create_unknown_svalue (type);
+ 
    binop_svalue::key_t key (type, op, arg0, arg1);
    if (binop_svalue **slot = m_binop_values_map.get (key))
      return *slot;
*************** region_model_manager::maybe_fold_sub_sva
*** 654,661 ****
  					     const svalue *parent_svalue,
  					     const region *subregion)
  {
!   /* Subvalues of "unknown" are unknown.  */
!   if (parent_svalue->get_kind () == SK_UNKNOWN)
      return get_or_create_unknown_svalue (type);
  
    /* If we have a subregion of a zero-fill, it's zero.  */
--- 760,767 ----
  					     const svalue *parent_svalue,
  					     const region *subregion)
  {
!   /* Subvalues of "unknown"/"poisoned" are unknown.  */
!   if (!parent_svalue->can_have_associated_state_p ())
      return get_or_create_unknown_svalue (type);
  
    /* If we have a subregion of a zero-fill, it's zero.  */
*************** region_model_manager::maybe_fold_sub_sva
*** 665,671 ****
        if (unary->get_op () == NOP_EXPR
  	  || unary->get_op () == VIEW_CONVERT_EXPR)
  	if (tree cst = unary->get_arg ()->maybe_get_constant ())
! 	  if (zerop (cst))
  	    {
  	      const svalue *cst_sval
  		= get_or_create_constant_svalue (cst);
--- 771,777 ----
        if (unary->get_op () == NOP_EXPR
  	  || unary->get_op () == VIEW_CONVERT_EXPR)
  	if (tree cst = unary->get_arg ()->maybe_get_constant ())
! 	  if (zerop (cst) && type)
  	    {
  	      const svalue *cst_sval
  		= get_or_create_constant_svalue (cst);
*************** region_model_manager::maybe_fold_sub_sva
*** 676,698 ****
    /* Handle getting individual chars from a STRING_CST.  */
    if (tree cst = parent_svalue->maybe_get_constant ())
      if (TREE_CODE (cst) == STRING_CST)
!       if (const element_region *element_reg
! 	    = subregion->dyn_cast_element_region ())
! 	{
! 	  const svalue *idx_sval = element_reg->get_index ();
! 	  if (tree cst_idx = idx_sval->maybe_get_constant ())
  	    if (const svalue *char_sval
  		= maybe_get_char_from_string_cst (cst, cst_idx))
  	      return get_or_create_cast (type, char_sval);
! 	}
  
-   /* SUB(INIT(r)).FIELD -> INIT(r.FIELD)
-      i.e.
-      Subvalue(InitialValue(R1), FieldRegion(R2, F))
-        -> InitialValue(FieldRegion(R1, F)).  */
    if (const initial_svalue *init_sval
!         = parent_svalue->dyn_cast_initial_svalue ())
      {
        if (const field_region *field_reg = subregion->dyn_cast_field_region ())
  	{
  	  const region *field_reg_new
--- 782,812 ----
    /* Handle getting individual chars from a STRING_CST.  */
    if (tree cst = parent_svalue->maybe_get_constant ())
      if (TREE_CODE (cst) == STRING_CST)
!       {
! 	/* If we have a concrete 1-byte access within the parent region... */
! 	byte_range subregion_bytes (0, 0);
! 	if (subregion->get_relative_concrete_byte_range (&subregion_bytes)
! 	    && subregion_bytes.m_size_in_bytes == 1
! 	    && type)
! 	  {
! 	    /* ...then attempt to get that char from the STRING_CST.  */
! 	    HOST_WIDE_INT hwi_start_byte
! 	      = subregion_bytes.m_start_byte_offset.to_shwi ();
! 	    tree cst_idx
! 	      = build_int_cst_type (size_type_node, hwi_start_byte);
  	    if (const svalue *char_sval
  		= maybe_get_char_from_string_cst (cst, cst_idx))
  	      return get_or_create_cast (type, char_sval);
! 	  }
!       }
  
    if (const initial_svalue *init_sval
! 	= parent_svalue->dyn_cast_initial_svalue ())
      {
+       /* SUB(INIT(r)).FIELD -> INIT(r.FIELD)
+ 	 i.e.
+ 	 Subvalue(InitialValue(R1), FieldRegion(R2, F))
+ 	 -> InitialValue(FieldRegion(R1, F)).  */
        if (const field_region *field_reg = subregion->dyn_cast_field_region ())
  	{
  	  const region *field_reg_new
*************** region_model_manager::maybe_fold_sub_sva
*** 700,707 ****
--- 814,838 ----
  				field_reg->get_field ());
  	  return get_or_create_initial_value (field_reg_new);
  	}
+       /* SUB(INIT(r)[ELEMENT] -> INIT(e[ELEMENT])
+ 	 i.e.
+ 	 Subvalue(InitialValue(R1), ElementRegion(R2, IDX))
+ 	 -> InitialValue(ElementRegion(R1, IDX)).  */
+       if (const element_region *element_reg = subregion->dyn_cast_element_region ())
+ 	{
+ 	  const region *element_reg_new
+ 	    = get_element_region (init_sval->get_region (),
+ 				  element_reg->get_type (),
+ 				  element_reg->get_index ());
+ 	  return get_or_create_initial_value (element_reg_new);
+ 	}
      }
  
+   if (const repeated_svalue *repeated_sval
+ 	= parent_svalue->dyn_cast_repeated_svalue ())
+     if (type)
+       return get_or_create_cast (type, repeated_sval->get_inner_svalue ());
+ 
    return NULL;
  }
  
*************** region_model_manager::get_or_create_sub_
*** 727,732 ****
--- 858,1117 ----
    return sub_sval;
  }
  
+ /* Subroutine of region_model_manager::get_or_create_repeated_svalue.
+    Return a folded svalue, or NULL.  */
+ 
+ const svalue *
+ region_model_manager::maybe_fold_repeated_svalue (tree type,
+ 						  const svalue *outer_size,
+ 						  const svalue *inner_svalue)
+ {
+   /* Repeated "unknown"/"poisoned" is unknown.  */
+   if (!outer_size->can_have_associated_state_p ()
+       || !inner_svalue->can_have_associated_state_p ())
+     return get_or_create_unknown_svalue (type);
+ 
+   /* If INNER_SVALUE is the same size as OUTER_SIZE,
+      turn into simply a cast.  */
+   if (tree cst_outer_num_bytes = outer_size->maybe_get_constant ())
+     {
+       HOST_WIDE_INT num_bytes_inner_svalue
+ 	= int_size_in_bytes (inner_svalue->get_type ());
+       if (num_bytes_inner_svalue != -1)
+ 	if (num_bytes_inner_svalue
+ 	    == (HOST_WIDE_INT)tree_to_uhwi (cst_outer_num_bytes))
+ 	  {
+ 	    if (type)
+ 	      return get_or_create_cast (type, inner_svalue);
+ 	    else
+ 	      return inner_svalue;
+ 	  }
+     }
+ 
+   /* Handle zero-fill of a specific type.  */
+   if (tree cst = inner_svalue->maybe_get_constant ())
+     if (zerop (cst) && type)
+       return get_or_create_cast (type, inner_svalue);
+ 
+   return NULL;
+ }
+ 
+ /* Return the svalue * of type TYPE in which INNER_SVALUE is repeated
+    enough times to be of size OUTER_SIZE, creating it if necessary.
+    e.g. for filling buffers with a constant value.  */
+ 
+ const svalue *
+ region_model_manager::get_or_create_repeated_svalue (tree type,
+ 						     const svalue *outer_size,
+ 						     const svalue *inner_svalue)
+ {
+   if (const svalue *folded
+ 	= maybe_fold_repeated_svalue (type, outer_size, inner_svalue))
+     return folded;
+ 
+   repeated_svalue::key_t key (type, outer_size, inner_svalue);
+   if (repeated_svalue **slot = m_repeated_values_map.get (key))
+     return *slot;
+   repeated_svalue *repeated_sval
+     = new repeated_svalue (type, outer_size, inner_svalue);
+   RETURN_UNKNOWN_IF_TOO_COMPLEX (repeated_sval);
+   m_repeated_values_map.put (key, repeated_sval);
+   return repeated_sval;
+ }
+ 
+ /* Attempt to get the bit_range for FIELD within a RECORD_TYPE.
+    Return true and write the result to OUT if successful.
+    Return false otherwise.  */
+ 
+ static bool
+ get_bit_range_for_field (tree field, bit_range *out)
+ {
+   bit_size_t bit_size;
+   if (!int_size_in_bits (TREE_TYPE (field), &bit_size))
+     return false;
+   int field_bit_offset = int_bit_position (field);
+   *out = bit_range (field_bit_offset, bit_size);
+   return true;
+ }
+ 
+ /* Attempt to get the byte_range for FIELD within a RECORD_TYPE.
+    Return true and write the result to OUT if successful.
+    Return false otherwise.  */
+ 
+ static bool
+ get_byte_range_for_field (tree field, byte_range *out)
+ {
+   bit_range field_bits (0, 0);
+   if (!get_bit_range_for_field (field, &field_bits))
+     return false;
+   return field_bits.as_byte_range (out);
+ }
+ 
+ /* Attempt to determine if there is a specific field within RECORD_TYPE
+    at BYTES.  If so, return it, and write the location of BYTES relative
+    to the field to *OUT_RANGE_WITHIN_FIELD.
+    Otherwise, return NULL_TREE.
+    For example, given:
+      struct foo { uint32 a; uint32; b};
+    and
+      bytes = {bytes 6-7} (of foo)
+    we have bytes 3-4 of field b.  */
+ 
+ static tree
+ get_field_at_byte_range (tree record_type, const byte_range &bytes,
+ 			 byte_range *out_range_within_field)
+ {
+   bit_offset_t bit_offset = bytes.m_start_byte_offset * BITS_PER_UNIT;
+ 
+   tree field = get_field_at_bit_offset (record_type, bit_offset);
+   if (!field)
+     return NULL_TREE;
+ 
+   byte_range field_bytes (0,0);
+   if (!get_byte_range_for_field (field, &field_bytes))
+     return NULL_TREE;
+ 
+   /* Is BYTES fully within field_bytes?  */
+   byte_range bytes_within_field (0,0);
+   if (!field_bytes.contains_p (bytes, &bytes_within_field))
+     return NULL_TREE;
+ 
+   *out_range_within_field = bytes_within_field;
+   return field;
+ }
+ 
+ /* Subroutine of region_model_manager::get_or_create_bits_within.
+    Return a folded svalue, or NULL.  */
+ 
+ const svalue *
+ region_model_manager::maybe_fold_bits_within_svalue (tree type,
+ 						     const bit_range &bits,
+ 						     const svalue *inner_svalue)
+ {
+   tree inner_type = inner_svalue->get_type ();
+   /* Fold:
+        BITS_WITHIN ((0, sizeof (VAL), VAL))
+      to:
+        CAST(TYPE, VAL).  */
+   if (bits.m_start_bit_offset == 0 && inner_type)
+     {
+       bit_size_t inner_type_size;
+       if (int_size_in_bits (inner_type, &inner_type_size))
+ 	if (inner_type_size == bits.m_size_in_bits)
+ 	  {
+ 	    if (type)
+ 	      return get_or_create_cast (type, inner_svalue);
+ 	    else
+ 	      return inner_svalue;
+ 	  }
+     }
+ 
+   /* Kind-specific folding.  */
+   if (const svalue *sval
+       = inner_svalue->maybe_fold_bits_within (type, bits, this))
+     return sval;
+ 
+   byte_range bytes (0,0);
+   if (bits.as_byte_range (&bytes) && inner_type)
+     switch (TREE_CODE (inner_type))
+       {
+       default:
+ 	break;
+       case ARRAY_TYPE:
+ 	{
+ 	  /* Fold:
+ 	       BITS_WITHIN (range, KIND(REG))
+ 	     to:
+ 	       BITS_WITHIN (range - offsetof(ELEMENT), KIND(REG.ELEMENT))
+ 	     if range1 is a byte-range fully within one ELEMENT.  */
+ 	  tree element_type = TREE_TYPE (inner_type);
+ 	  HOST_WIDE_INT element_byte_size
+ 	    = int_size_in_bytes (element_type);
+ 	  if (element_byte_size > 0)
+ 	    {
+ 	      HOST_WIDE_INT start_idx
+ 		= (bytes.get_start_byte_offset ().to_shwi ()
+ 		   / element_byte_size);
+ 	      HOST_WIDE_INT last_idx
+ 		= (bytes.get_last_byte_offset ().to_shwi ()
+ 		   / element_byte_size);
+ 	      if (start_idx == last_idx)
+ 		{
+ 		  if (const initial_svalue *initial_sval
+ 		      = inner_svalue->dyn_cast_initial_svalue ())
+ 		    {
+ 		      bit_offset_t start_of_element
+ 			= start_idx * element_byte_size * BITS_PER_UNIT;
+ 		      bit_range bits_within_element
+ 			(bits.m_start_bit_offset - start_of_element,
+ 			 bits.m_size_in_bits);
+ 		      const svalue *idx_sval
+ 			= get_or_create_int_cst (integer_type_node, start_idx);
+ 		      const region *element_reg =
+ 			get_element_region (initial_sval->get_region (),
+ 					    element_type, idx_sval);
+ 		      const svalue *element_reg_sval
+ 			= get_or_create_initial_value (element_reg);
+ 		      return get_or_create_bits_within (type,
+ 							bits_within_element,
+ 							element_reg_sval);
+ 		    }
+ 		}
+ 	    }
+ 	}
+ 	break;
+       case RECORD_TYPE:
+ 	{
+ 	  /* Fold:
+ 	       BYTES_WITHIN (range, KIND(REG))
+ 	     to:
+ 	       BYTES_WITHIN (range - offsetof(FIELD), KIND(REG.FIELD))
+ 	     if range1 is fully within FIELD.  */
+ 	  byte_range bytes_within_field (0, 0);
+ 	  if (tree field = get_field_at_byte_range (inner_type, bytes,
+ 						    &bytes_within_field))
+ 	    {
+ 	      if (const initial_svalue *initial_sval
+ 		  = inner_svalue->dyn_cast_initial_svalue ())
+ 		{
+ 		  const region *field_reg =
+ 		    get_field_region (initial_sval->get_region (), field);
+ 		  const svalue *initial_reg_sval
+ 		    = get_or_create_initial_value (field_reg);
+ 		  return get_or_create_bits_within
+ 		    (type,
+ 		     bytes_within_field.as_bit_range (),
+ 		     initial_reg_sval);
+ 		}
+ 	    }
+ 	}
+ 	break;
+       }
+   return NULL;
+ }
+ 
+ /* Return the svalue * of type TYPE for extracting BITS from INNER_SVALUE,
+    creating it if necessary.  */
+ 
+ const svalue *
+ region_model_manager::get_or_create_bits_within (tree type,
+ 						 const bit_range &bits,
+ 						 const svalue *inner_svalue)
+ {
+   if (const svalue *folded
+ 	= maybe_fold_bits_within_svalue (type, bits, inner_svalue))
+     return folded;
+ 
+   bits_within_svalue::key_t key (type, bits, inner_svalue);
+   if (bits_within_svalue **slot = m_bits_within_values_map.get (key))
+     return *slot;
+   bits_within_svalue *bits_within_sval
+     = new bits_within_svalue (type, bits, inner_svalue);
+   RETURN_UNKNOWN_IF_TOO_COMPLEX (bits_within_sval);
+   m_bits_within_values_map.put (key, bits_within_sval);
+   return bits_within_sval;
+ }
+ 
  /* Return the svalue * that decorates ARG as being unmergeable,
     creating it if necessary.  */
  
*************** region_model_manager::get_or_create_comp
*** 784,800 ****
    return compound_sval;
  }
  
  /* Return the svalue * of type TYPE for the value conjured for ID_REG
!    at STMT, creating it if necessary.  */
  
  const svalue *
  region_model_manager::get_or_create_conjured_svalue (tree type,
  						     const gimple *stmt,
! 						     const region *id_reg)
  {
    conjured_svalue::key_t key (type, stmt, id_reg);
    if (conjured_svalue **slot = m_conjured_values_map.get (key))
!     return *slot;
    conjured_svalue *conjured_sval
      = new conjured_svalue (type, stmt, id_reg);
    RETURN_UNKNOWN_IF_TOO_COMPLEX (conjured_sval);
--- 1169,1206 ----
    return compound_sval;
  }
  
+ /* class conjured_purge.  */
+ 
+ /* Purge state relating to SVAL.  */
+ 
+ void
+ conjured_purge::purge (const conjured_svalue *sval) const
+ {
+   m_model->purge_state_involving (sval, m_ctxt);
+ }
+ 
  /* Return the svalue * of type TYPE for the value conjured for ID_REG
!    at STMT, creating it if necessary.
!    Use P to purge existing state from the svalue, for the case where a
!    conjured_svalue would be reused along an execution path.  */
  
  const svalue *
  region_model_manager::get_or_create_conjured_svalue (tree type,
  						     const gimple *stmt,
! 						     const region *id_reg,
! 						     const conjured_purge &p)
  {
    conjured_svalue::key_t key (type, stmt, id_reg);
    if (conjured_svalue **slot = m_conjured_values_map.get (key))
!     {
!       const conjured_svalue *sval = *slot;
!       /* We're reusing an existing conjured_svalue, perhaps from a different
! 	 state within this analysis, or perhaps from an earlier state on this
! 	 execution path.  For the latter, purge any state involving the "new"
! 	 svalue from the current program_state.  */
!       p.purge (sval);
!       return sval;
!     }
    conjured_svalue *conjured_sval
      = new conjured_svalue (type, stmt, id_reg);
    RETURN_UNKNOWN_IF_TOO_COMPLEX (conjured_sval);
*************** region_model_manager::get_or_create_conj
*** 802,807 ****
--- 1208,1284 ----
    return conjured_sval;
  }
  
+ /* Subroutine of region_model_manager::get_or_create_asm_output_svalue.
+    Return a folded svalue, or NULL.  */
+ 
+ const svalue *
+ region_model_manager::
+ maybe_fold_asm_output_svalue (tree type,
+ 			      const vec<const svalue *> &inputs)
+ {
+   /* Unknown inputs should lead to unknown results.  */
+   for (const auto &iter : inputs)
+     if (iter->get_kind () == SK_UNKNOWN)
+       return get_or_create_unknown_svalue (type);
+ 
+   return NULL;
+ }
+ 
+ /* Return the svalue * of type TYPE for OUTPUT_IDX of the deterministic
+    asm stmt ASM_STMT, given INPUTS as inputs.  */
+ 
+ const svalue *
+ region_model_manager::
+ get_or_create_asm_output_svalue (tree type,
+ 				 const gasm *asm_stmt,
+ 				 unsigned output_idx,
+ 				 const vec<const svalue *> &inputs)
+ {
+   gcc_assert (inputs.length () <= asm_output_svalue::MAX_INPUTS);
+ 
+   if (const svalue *folded
+ 	= maybe_fold_asm_output_svalue (type, inputs))
+     return folded;
+ 
+   const char *asm_string = gimple_asm_string (asm_stmt);
+   const unsigned noutputs = gimple_asm_noutputs (asm_stmt);
+ 
+   asm_output_svalue::key_t key (type, asm_string, output_idx, inputs);
+   if (asm_output_svalue **slot = m_asm_output_values_map.get (key))
+     return *slot;
+   asm_output_svalue *asm_output_sval
+     = new asm_output_svalue (type, asm_string, output_idx, noutputs, inputs);
+   RETURN_UNKNOWN_IF_TOO_COMPLEX (asm_output_sval);
+   m_asm_output_values_map.put (key, asm_output_sval);
+   return asm_output_sval;
+ }
+ 
+ 
+ /* Return the svalue * of type TYPE for the result of a call to FNDECL
+    with __attribute__((const)), given INPUTS as inputs.  */
+ 
+ const svalue *
+ region_model_manager::
+ get_or_create_const_fn_result_svalue (tree type,
+ 				      tree fndecl,
+ 				      const vec<const svalue *> &inputs)
+ {
+   gcc_assert (type);
+   gcc_assert (fndecl);
+   gcc_assert (DECL_P (fndecl));
+   gcc_assert (TREE_READONLY (fndecl));
+   gcc_assert (inputs.length () <= const_fn_result_svalue::MAX_INPUTS);
+ 
+   const_fn_result_svalue::key_t key (type, fndecl, inputs);
+   if (const_fn_result_svalue **slot = m_const_fn_result_values_map.get (key))
+     return *slot;
+   const_fn_result_svalue *const_fn_result_sval
+     = new const_fn_result_svalue (type, fndecl, inputs);
+   RETURN_UNKNOWN_IF_TOO_COMPLEX (const_fn_result_sval);
+   m_const_fn_result_values_map.put (key, const_fn_result_sval);
+   return const_fn_result_sval;
+ }
+ 
  /* Given STRING_CST, a STRING_CST and BYTE_OFFSET_CST a constant,
     attempt to get the character at that offset, returning either
     the svalue for the character constant, or NULL if unsuccessful.  */
*************** region_model_manager::get_region_for_glo
*** 885,890 ****
--- 1362,1380 ----
    return reg;
  }
  
+ /* Return the region for an unknown access of type REGION_TYPE,
+    creating it if necessary.
+    This is a symbolic_region, where the pointer is an unknown_svalue
+    of type &REGION_TYPE.  */
+ 
+ const region *
+ region_model_manager::get_unknown_symbolic_region (tree region_type)
+ {
+   tree ptr_type = region_type ? build_pointer_type (region_type) : NULL_TREE;
+   const svalue *unknown_ptr = get_or_create_unknown_svalue (ptr_type);
+   return get_symbolic_region (unknown_ptr);
+ }
+ 
  /* Return the region that describes accessing field FIELD of PARENT,
     creating it if necessary.  */
  
*************** region_model_manager::get_field_region (
*** 895,906 ****
  
    /* (*UNKNOWN_PTR).field is (*UNKNOWN_PTR_OF_&FIELD_TYPE).  */
    if (parent->symbolic_for_unknown_ptr_p ())
!     {
!       tree ptr_to_field_type = build_pointer_type (TREE_TYPE (field));
!       const svalue *unknown_ptr_to_field
! 	= get_or_create_unknown_svalue (ptr_to_field_type);
!       return get_symbolic_region (unknown_ptr_to_field);
!     }
  
    field_region::key_t key (parent, field);
    if (field_region *reg = m_field_regions.get (key))
--- 1385,1391 ----
  
    /* (*UNKNOWN_PTR).field is (*UNKNOWN_PTR_OF_&FIELD_TYPE).  */
    if (parent->symbolic_for_unknown_ptr_p ())
!     return get_unknown_symbolic_region (TREE_TYPE (field));
  
    field_region::key_t key (parent, field);
    if (field_region *reg = m_field_regions.get (key))
*************** region_model_manager::get_element_region
*** 920,925 ****
--- 1405,1414 ----
  					  tree element_type,
  					  const svalue *index)
  {
+   /* (UNKNOWN_PTR[IDX]) is (UNKNOWN_PTR).  */
+   if (parent->symbolic_for_unknown_ptr_p ())
+     return get_unknown_symbolic_region (element_type);
+ 
    element_region::key_t key (parent, element_type, index);
    if (element_region *reg = m_element_regions.get (key))
      return reg;
*************** region_model_manager::get_offset_region
*** 939,944 ****
--- 1428,1437 ----
  					 tree type,
  					 const svalue *byte_offset)
  {
+   /* (UNKNOWN_PTR + OFFSET) is (UNKNOWN_PTR).  */
+   if (parent->symbolic_for_unknown_ptr_p ())
+     return get_unknown_symbolic_region (type);
+ 
    /* If BYTE_OFFSET is zero, return PARENT.  */
    if (tree cst_offset = byte_offset->maybe_get_constant ())
      if (zerop (cst_offset))
*************** region_model_manager::get_offset_region
*** 966,971 ****
--- 1459,1499 ----
    return offset_reg;
  }
  
+ /* Return the region that describes accessing the subregion of type
+    TYPE of size BYTE_SIZE_SVAL within PARENT, creating it if necessary.  */
+ 
+ const region *
+ region_model_manager::get_sized_region (const region *parent,
+ 					tree type,
+ 					const svalue *byte_size_sval)
+ {
+   if (parent->symbolic_for_unknown_ptr_p ())
+     return get_unknown_symbolic_region (type);
+ 
+   if (byte_size_sval->get_type () != size_type_node)
+     byte_size_sval = get_or_create_cast (size_type_node, byte_size_sval);
+ 
+   /* If PARENT is already that size, return it.  */
+   const svalue *parent_byte_size_sval = parent->get_byte_size_sval (this);
+   if (tree parent_size_cst = parent_byte_size_sval->maybe_get_constant ())
+     if (tree size_cst = byte_size_sval->maybe_get_constant ())
+       {
+ 	tree comparison
+ 	  = fold_binary (EQ_EXPR, boolean_type_node, parent_size_cst, size_cst);
+ 	if (comparison == boolean_true_node)
+ 	  return parent;
+       }
+ 
+   sized_region::key_t key (parent, type, byte_size_sval);
+   if (sized_region *reg = m_sized_regions.get (key))
+     return reg;
+ 
+   sized_region *sized_reg
+     = new sized_region (alloc_region_id (), parent, type, byte_size_sval);
+   m_sized_regions.put (key, sized_reg);
+   return sized_reg;
+ }
+ 
  /* Return the region that describes accessing PARENT_REGION as if
     it were of type TYPE, creating it if necessary.  */
  
*************** region_model_manager::get_cast_region (c
*** 977,982 ****
--- 1505,1513 ----
    if (type == original_region->get_type ())
      return original_region;
  
+   if (original_region->symbolic_for_unknown_ptr_p ())
+     return get_unknown_symbolic_region (type);
+ 
    cast_region::key_t key (original_region, type);
    if (cast_region *reg = m_cast_regions.get (key))
      return reg;
*************** region_model_manager::get_region_for_str
*** 1040,1045 ****
--- 1571,1598 ----
    return reg;
  }
  
+ /* Return the region that describes accessing BITS within PARENT as TYPE,
+    creating it if necessary.  */
+ 
+ const region *
+ region_model_manager::get_bit_range (const region *parent, tree type,
+ 				     const bit_range &bits)
+ {
+   gcc_assert (parent);
+ 
+   if (parent->symbolic_for_unknown_ptr_p ())
+     return get_unknown_symbolic_region (type);
+ 
+   bit_range_region::key_t key (parent, type, bits);
+   if (bit_range_region *reg = m_bit_range_regions.get (key))
+     return reg;
+ 
+   bit_range_region *bit_range_reg
+     = new bit_range_region (alloc_region_id (), parent, type, bits);
+   m_bit_range_regions.put (key, bit_range_reg);
+   return bit_range_reg;
+ }
+ 
  /* If we see a tree code we don't know how to handle, rather than
     ICE or generate bogus results, create a dummy region, and notify
     CTXT so that it can mark the new state as being not properly
*************** static void
*** 1119,1125 ****
  log_uniq_map (logger *logger, bool show_objs, const char *title,
  	      const hash_map<K, T*> &uniq_map)
  {
!   logger->log ("  # %s: %li", title, uniq_map.elements ());
    if (!show_objs)
      return;
    auto_vec<const T *> vec_objs (uniq_map.elements ());
--- 1672,1678 ----
  log_uniq_map (logger *logger, bool show_objs, const char *title,
  	      const hash_map<K, T*> &uniq_map)
  {
!   logger->log ("  # %s: %li", title, (long)uniq_map.elements ());
    if (!show_objs)
      return;
    auto_vec<const T *> vec_objs (uniq_map.elements ());
*************** static void
*** 1143,1149 ****
  log_uniq_map (logger *logger, bool show_objs, const char *title,
  	      const consolidation_map<T> &map)
  {
!   logger->log ("  # %s: %li", title, map.elements ());
    if (!show_objs)
      return;
  
--- 1696,1702 ----
  log_uniq_map (logger *logger, bool show_objs, const char *title,
  	      const consolidation_map<T> &map)
  {
!   logger->log ("  # %s: %li", title, (long)map.elements ());
    if (!show_objs)
      return;
  
*************** region_model_manager::log_stats (logger
*** 1180,1190 ****
--- 1733,1751 ----
    log_uniq_map (logger, show_objs, "unaryop_svalue", m_unaryop_values_map);
    log_uniq_map (logger, show_objs, "binop_svalue", m_binop_values_map);
    log_uniq_map (logger, show_objs, "sub_svalue", m_sub_values_map);
+   log_uniq_map (logger, show_objs, "repeated_svalue", m_repeated_values_map);
+   log_uniq_map (logger, show_objs, "bits_within_svalue",
+ 		m_bits_within_values_map);
    log_uniq_map (logger, show_objs, "unmergeable_svalue",
  		m_unmergeable_values_map);
    log_uniq_map (logger, show_objs, "widening_svalue", m_widening_values_map);
    log_uniq_map (logger, show_objs, "compound_svalue", m_compound_values_map);
    log_uniq_map (logger, show_objs, "conjured_svalue", m_conjured_values_map);
+   log_uniq_map (logger, show_objs, "asm_output_svalue",
+ 		m_asm_output_values_map);
+   log_uniq_map (logger, show_objs, "const_fn_result_svalue",
+ 		m_const_fn_result_values_map);
+ 
    logger->log ("max accepted svalue num_nodes: %i",
  	       m_max_complexity.m_num_nodes);
    logger->log ("max accepted svalue max_depth: %i",
*************** region_model_manager::log_stats (logger
*** 1198,1210 ****
--- 1759,1774 ----
    log_uniq_map (logger, show_objs, "field_region", m_field_regions);
    log_uniq_map (logger, show_objs, "element_region", m_element_regions);
    log_uniq_map (logger, show_objs, "offset_region", m_offset_regions);
+   log_uniq_map (logger, show_objs, "sized_region", m_sized_regions);
    log_uniq_map (logger, show_objs, "cast_region", m_cast_regions);
    log_uniq_map (logger, show_objs, "frame_region", m_frame_regions);
    log_uniq_map (logger, show_objs, "symbolic_region", m_symbolic_regions);
    log_uniq_map (logger, show_objs, "string_region", m_string_map);
+   log_uniq_map (logger, show_objs, "bit_range_region", m_bit_range_regions);
    logger->log ("  # managed dynamic regions: %i",
  	       m_managed_dynamic_regions.length ());
    m_store_mgr.log_stats (logger, show_objs);
+   m_range_mgr->log_stats (logger, show_objs);
  }
  
  /* Dump the number of objects of each class that were managed by this
*************** store_manager::log_stats (logger *logger
*** 1222,1227 ****
--- 1786,1839 ----
  		m_symbolic_binding_key_mgr);
  }
  
+ /* Emit a warning showing DECL_REG->tracked_p () for use in DejaGnu tests
+    (using -fdump-analyzer-untracked).  */
+ 
+ static void
+ dump_untracked_region (const decl_region *decl_reg)
+ {
+   tree decl = decl_reg->get_decl ();
+   if (TREE_CODE (decl) != VAR_DECL)
+     return;
+   /* For now, don't emit the status of decls in the constant pool, to avoid
+      differences in DejaGnu test results between targets that use these vs
+      those that don't.
+      (Eventually these decls should probably be untracked and we should test
+      for that, but that's not stage 4 material).  */
+   if (DECL_IN_CONSTANT_POOL (decl))
+     return;
+   warning_at (DECL_SOURCE_LOCATION (decl), 0,
+ 	      "track %qD: %s",
+ 	      decl, (decl_reg->tracked_p () ? "yes" : "no"));
+ }
+ 
+ /* Implementation of -fdump-analyzer-untracked.  */
+ 
+ void
+ region_model_manager::dump_untracked_regions () const
+ {
+   for (auto iter : m_globals_map)
+     {
+       const decl_region *decl_reg = iter.second;
+       dump_untracked_region (decl_reg);
+     }
+   for (auto frame_iter : m_frame_regions)
+     {
+       const frame_region *frame_reg = frame_iter.second;
+       frame_reg->dump_untracked_regions ();
+     }
+ }
+ 
+ void
+ frame_region::dump_untracked_regions () const
+ {
+   for (auto iter : m_locals)
+     {
+       const decl_region *decl_reg = iter.second;
+       dump_untracked_region (decl_reg);
+     }
+ }
+ 
  } // namespace ana
  
  #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/region-model-reachability.cc gcc-12.1.0/gcc/analyzer/region-model-reachability.cc
*** gcc-11.3.0/gcc/analyzer/region-model-reachability.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/region-model-reachability.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Finding reachable regions and values.
!    Copyright (C) 2020-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Finding reachable regions and values.
!    Copyright (C) 2020-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** reachable_regions::add (const region *re
*** 154,160 ****
    if (binding_cluster *bind_cluster = m_store->get_cluster (base_reg))
      bind_cluster->for_each_value (handle_sval_cb, this);
    else
!     handle_sval (m_model->get_store_value (reg));
  }
  
  void
--- 154,160 ----
    if (binding_cluster *bind_cluster = m_store->get_cluster (base_reg))
      bind_cluster->for_each_value (handle_sval_cb, this);
    else
!     handle_sval (m_model->get_store_value (reg, NULL));
  }
  
  void
*************** reachable_regions::handle_parm (const sv
*** 252,263 ****
      m_mutable_svals.add (sval);
    else
      m_reachable_svals.add (sval);
!   if (const region_svalue *parm_ptr
!       = sval->dyn_cast_region_svalue ())
      {
!       const region *pointee_reg = parm_ptr->get_pointee ();
!       add (pointee_reg, is_mutable);
      }
  }
  
  /* Update the store to mark the clusters that were found to be mutable
--- 252,272 ----
      m_mutable_svals.add (sval);
    else
      m_reachable_svals.add (sval);
!   if (const region *base_reg = sval->maybe_get_deref_base_region ())
!     add (base_reg, is_mutable);
!   /* Treat all svalues within a compound_svalue as reachable.  */
!   if (const compound_svalue *compound_sval
!       = sval->dyn_cast_compound_svalue ())
      {
!       for (compound_svalue::iterator_t iter = compound_sval->begin ();
! 	   iter != compound_sval->end (); ++iter)
! 	{
! 	  const svalue *iter_sval = (*iter).second;
! 	  handle_sval (iter_sval);
! 	}
      }
+   if (const svalue *cast = sval->maybe_undo_cast ())
+     handle_sval (cast);
  }
  
  /* Update the store to mark the clusters that were found to be mutable
*************** reachable_regions::handle_parm (const sv
*** 267,273 ****
  void
  reachable_regions::mark_escaped_clusters (region_model_context *ctxt)
  {
-   gcc_assert (ctxt);
    auto_vec<const function_region *> escaped_fn_regs
      (m_mutable_base_regs.elements ());
    for (hash_set<const region *>::iterator iter = m_mutable_base_regs.begin ();
--- 276,281 ----
*************** reachable_regions::mark_escaped_clusters
*** 281,292 ****
        if (const function_region *fn_reg = base_reg->dyn_cast_function_region ())
  	escaped_fn_regs.quick_push (fn_reg);
      }
!   /* Sort to ensure deterministic results.  */
!   escaped_fn_regs.qsort (region::cmp_ptr_ptr);
!   unsigned i;
!   const function_region *fn_reg;
!   FOR_EACH_VEC_ELT (escaped_fn_regs, i, fn_reg)
!     ctxt->on_escaped_function (fn_reg->get_fndecl ());
  }
  
  /* Dump SET to PP, sorting it to avoid churn when comparing dumps.  */
--- 289,303 ----
        if (const function_region *fn_reg = base_reg->dyn_cast_function_region ())
  	escaped_fn_regs.quick_push (fn_reg);
      }
!   if (ctxt)
!     {
!       /* Sort to ensure deterministic results.  */
!       escaped_fn_regs.qsort (region::cmp_ptr_ptr);
!       unsigned i;
!       const function_region *fn_reg;
!       FOR_EACH_VEC_ELT (escaped_fn_regs, i, fn_reg)
! 	ctxt->on_escaped_function (fn_reg->get_fndecl ());
!     }
  }
  
  /* Dump SET to PP, sorting it to avoid churn when comparing dumps.  */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/region-model-reachability.h gcc-12.1.0/gcc/analyzer/region-model-reachability.h
*** gcc-11.3.0/gcc/analyzer/region-model-reachability.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/region-model-reachability.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Finding reachable regions and values.
!    Copyright (C) 2020-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Finding reachable regions and values.
!    Copyright (C) 2020-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** public:
*** 89,94 ****
--- 89,102 ----
    {
      return m_mutable_svals.end ();
    }
+   hash_set<const region *>::iterator begin_mutable_base_regs ()
+   {
+     return m_mutable_base_regs.begin ();
+   }
+   hash_set<const region *>::iterator end_mutable_base_regs ()
+   {
+     return m_mutable_base_regs.end ();
+   }
  
    void dump_to_pp (pretty_printer *pp) const;
  
diff -Nrcpad gcc-11.3.0/gcc/analyzer/region-model.cc gcc-12.1.0/gcc/analyzer/region-model.cc
*** gcc-11.3.0/gcc/analyzer/region-model.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/region-model.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for modeling the state of memory.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for modeling the state of memory.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 64,71 ****
--- 64,78 ----
  #include "analyzer/pending-diagnostic.h"
  #include "analyzer/region-model-reachability.h"
  #include "analyzer/analyzer-selftests.h"
+ #include "analyzer/program-state.h"
  #include "stor-layout.h"
  #include "attribs.h"
+ #include "tree-object-size.h"
+ #include "gimple-ssa.h"
+ #include "tree-phinodes.h"
+ #include "tree-ssa-operands.h"
+ #include "ssa-iterators.h"
+ #include "calls.h"
  
  #if ENABLE_ANALYZER
  
*************** print_quoted_type (pretty_printer *pp, t
*** 110,121 ****
    pp_end_quote (pp, pp_show_color (pp));
  }
  
  /* class region_model.  */
  
  /* Ctor for region_model: construct an "empty" model.  */
  
  region_model::region_model (region_model_manager *mgr)
! : m_mgr (mgr), m_store (), m_current_frame (NULL)
  {
    m_constraints = new constraint_manager (mgr);
  }
--- 117,256 ----
    pp_end_quote (pp, pp_show_color (pp));
  }
  
+ /* class region_to_value_map.  */
+ 
+ /* Assignment operator for region_to_value_map.  */
+ 
+ region_to_value_map &
+ region_to_value_map::operator= (const region_to_value_map &other)
+ {
+   m_hash_map.empty ();
+   for (auto iter : other.m_hash_map)
+     {
+       const region *reg = iter.first;
+       const svalue *sval = iter.second;
+       m_hash_map.put (reg, sval);
+     }
+   return *this;
+ }
+ 
+ /* Equality operator for region_to_value_map.  */
+ 
+ bool
+ region_to_value_map::operator== (const region_to_value_map &other) const
+ {
+   if (m_hash_map.elements () != other.m_hash_map.elements ())
+     return false;
+ 
+   for (auto iter : *this)
+     {
+       const region *reg = iter.first;
+       const svalue *sval = iter.second;
+       const svalue * const *other_slot = other.get (reg);
+       if (other_slot == NULL)
+ 	return false;
+       if (sval != *other_slot)
+ 	return false;
+     }
+ 
+   return true;
+ }
+ 
+ /* Dump this object to PP.  */
+ 
+ void
+ region_to_value_map::dump_to_pp (pretty_printer *pp, bool simple,
+ 				 bool multiline) const
+ {
+   auto_vec<const region *> regs;
+   for (iterator iter = begin (); iter != end (); ++iter)
+     regs.safe_push ((*iter).first);
+   regs.qsort (region::cmp_ptr_ptr);
+   if (multiline)
+     pp_newline (pp);
+   else
+     pp_string (pp, " {");
+   unsigned i;
+   const region *reg;
+   FOR_EACH_VEC_ELT (regs, i, reg)
+     {
+       if (multiline)
+ 	pp_string (pp, "  ");
+       else if (i > 0)
+ 	pp_string (pp, ", ");
+       reg->dump_to_pp (pp, simple);
+       pp_string (pp, ": ");
+       const svalue *sval = *get (reg);
+       sval->dump_to_pp (pp, true);
+       if (multiline)
+ 	pp_newline (pp);
+     }
+   if (!multiline)
+     pp_string (pp, "}");
+ }
+ 
+ /* Dump this object to stderr.  */
+ 
+ DEBUG_FUNCTION void
+ region_to_value_map::dump (bool simple) const
+ {
+   pretty_printer pp;
+   pp_format_decoder (&pp) = default_tree_printer;
+   pp_show_color (&pp) = pp_show_color (global_dc->printer);
+   pp.buffer->stream = stderr;
+   dump_to_pp (&pp, simple, true);
+   pp_newline (&pp);
+   pp_flush (&pp);
+ }
+ 
+ 
+ /* Attempt to merge THIS with OTHER, writing the result
+    to OUT.
+ 
+    For now, write (region, value) mappings that are in common between THIS
+    and OTHER to OUT, effectively taking the intersection, rather than
+    rejecting differences.  */
+ 
+ bool
+ region_to_value_map::can_merge_with_p (const region_to_value_map &other,
+ 				       region_to_value_map *out) const
+ {
+   for (auto iter : *this)
+     {
+       const region *iter_reg = iter.first;
+       const svalue *iter_sval = iter.second;
+       const svalue * const * other_slot = other.get (iter_reg);
+       if (other_slot)
+ 	if (iter_sval == *other_slot)
+ 	  out->put (iter_reg, iter_sval);
+     }
+   return true;
+ }
+ 
+ /* Purge any state involving SVAL.  */
+ 
+ void
+ region_to_value_map::purge_state_involving (const svalue *sval)
+ {
+   auto_vec<const region *> to_purge;
+   for (auto iter : *this)
+     {
+       const region *iter_reg = iter.first;
+       const svalue *iter_sval = iter.second;
+       if (iter_reg->involves_p (sval) || iter_sval->involves_p (sval))
+ 	to_purge.safe_push (iter_reg);
+     }
+   for (auto iter : to_purge)
+     m_hash_map.remove (iter);
+ }
+ 
  /* class region_model.  */
  
  /* Ctor for region_model: construct an "empty" model.  */
  
  region_model::region_model (region_model_manager *mgr)
! : m_mgr (mgr), m_store (), m_current_frame (NULL),
!   m_dynamic_extents ()
  {
    m_constraints = new constraint_manager (mgr);
  }
*************** region_model::region_model (region_model
*** 125,131 ****
  region_model::region_model (const region_model &other)
  : m_mgr (other.m_mgr), m_store (other.m_store),
    m_constraints (new constraint_manager (*other.m_constraints)),
!   m_current_frame (other.m_current_frame)
  {
  }
  
--- 260,267 ----
  region_model::region_model (const region_model &other)
  : m_mgr (other.m_mgr), m_store (other.m_store),
    m_constraints (new constraint_manager (*other.m_constraints)),
!   m_current_frame (other.m_current_frame),
!   m_dynamic_extents (other.m_dynamic_extents)
  {
  }
  
*************** region_model::operator= (const region_mo
*** 151,156 ****
--- 287,294 ----
  
    m_current_frame = other.m_current_frame;
  
+   m_dynamic_extents = other.m_dynamic_extents;
+ 
    return *this;
  }
  
*************** region_model::operator== (const region_m
*** 175,180 ****
--- 313,321 ----
    if (m_current_frame != other.m_current_frame)
      return false;
  
+   if (m_dynamic_extents != other.m_dynamic_extents)
+     return false;
+ 
    gcc_checking_assert (hash () == other.hash ());
  
    return true;
*************** region_model::dump_to_pp (pretty_printer
*** 236,241 ****
--- 377,389 ----
    m_constraints->dump_to_pp (pp, multiline);
    if (!multiline)
      pp_string (pp, "}");
+ 
+   /* Dump sizes of dynamic regions, if any are known.  */
+   if (!m_dynamic_extents.is_empty ())
+     {
+       pp_string (pp, "dynamic_extents:");
+       m_dynamic_extents.dump_to_pp (pp, simple, multiline);
+     }
  }
  
  /* Dump a representation of this model to FILE.  */
*************** region_model::debug () const
*** 268,273 ****
--- 416,429 ----
    dump (true);
  }
  
+ /* Assert that this object is valid.  */
+ 
+ void
+ region_model::validate () const
+ {
+   m_store.validate ();
+ }
+ 
  /* Canonicalize the store and constraints, to maximize the chance of
     equality between region_model instances.  */
  
*************** class poisoned_value_diagnostic
*** 303,317 ****
  : public pending_diagnostic_subclass<poisoned_value_diagnostic>
  {
  public:
!   poisoned_value_diagnostic (tree expr, enum poison_kind pkind)
!   : m_expr (expr), m_pkind (pkind)
    {}
  
    const char *get_kind () const FINAL OVERRIDE { return "poisoned_value_diagnostic"; }
  
    bool operator== (const poisoned_value_diagnostic &other) const
    {
!     return m_expr == other.m_expr;
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
--- 459,497 ----
  : public pending_diagnostic_subclass<poisoned_value_diagnostic>
  {
  public:
!   poisoned_value_diagnostic (tree expr, enum poison_kind pkind,
! 			     const region *src_region)
!   : m_expr (expr), m_pkind (pkind),
!     m_src_region (src_region)
    {}
  
    const char *get_kind () const FINAL OVERRIDE { return "poisoned_value_diagnostic"; }
  
+   bool use_of_uninit_p () const FINAL OVERRIDE
+   {
+     return m_pkind == POISON_KIND_UNINIT;
+   }
+ 
    bool operator== (const poisoned_value_diagnostic &other) const
    {
!     return (m_expr == other.m_expr
! 	    && m_pkind == other.m_pkind
! 	    && m_src_region == other.m_src_region);
!   }
! 
!   int get_controlling_option () const FINAL OVERRIDE
!   {
!     switch (m_pkind)
!       {
!       default:
! 	gcc_unreachable ();
!       case POISON_KIND_UNINIT:
! 	return OPT_Wanalyzer_use_of_uninitialized_value;
!       case POISON_KIND_FREED:
! 	return OPT_Wanalyzer_use_after_free;
!       case POISON_KIND_POPPED_STACK:
! 	return OPT_Wanalyzer_use_of_pointer_in_stale_stack_frame;
!       }
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
*************** public:
*** 320,331 ****
        {
        default:
  	gcc_unreachable ();
        case POISON_KIND_FREED:
  	{
  	  diagnostic_metadata m;
  	  m.add_cwe (416); /* "CWE-416: Use After Free".  */
! 	  return warning_meta (rich_loc, m,
! 			       OPT_Wanalyzer_use_after_free,
  			       "use after %<free%> of %qE",
  			       m_expr);
  	}
--- 500,519 ----
        {
        default:
  	gcc_unreachable ();
+       case POISON_KIND_UNINIT:
+ 	{
+ 	  diagnostic_metadata m;
+ 	  m.add_cwe (457); /* "CWE-457: Use of Uninitialized Variable".  */
+ 	  return warning_meta (rich_loc, m, get_controlling_option (),
+ 			       "use of uninitialized value %qE",
+ 			       m_expr);
+ 	}
+ 	break;
        case POISON_KIND_FREED:
  	{
  	  diagnostic_metadata m;
  	  m.add_cwe (416); /* "CWE-416: Use After Free".  */
! 	  return warning_meta (rich_loc, m, get_controlling_option (),
  			       "use after %<free%> of %qE",
  			       m_expr);
  	}
*************** public:
*** 334,341 ****
  	{
  	  /* TODO: which CWE?  */
  	  return warning_at
! 	    (rich_loc,
! 	     OPT_Wanalyzer_use_of_pointer_in_stale_stack_frame,
  	     "dereferencing pointer %qE to within stale stack frame",
  	     m_expr);
  	}
--- 522,528 ----
  	{
  	  /* TODO: which CWE?  */
  	  return warning_at
! 	    (rich_loc, get_controlling_option (),
  	     "dereferencing pointer %qE to within stale stack frame",
  	     m_expr);
  	}
*************** public:
*** 349,354 ****
--- 536,544 ----
        {
        default:
  	gcc_unreachable ();
+       case POISON_KIND_UNINIT:
+ 	return ev.formatted_print ("use of uninitialized value %qE here",
+ 				   m_expr);
        case POISON_KIND_FREED:
  	return ev.formatted_print ("use after %<free%> of %qE here",
  				   m_expr);
*************** public:
*** 359,367 ****
--- 549,564 ----
        }
    }
  
+   void mark_interesting_stuff (interesting_t *interest) FINAL OVERRIDE
+   {
+     if (m_src_region)
+       interest->add_region_creation (m_src_region);
+   }
+ 
  private:
    tree m_expr;
    enum poison_kind m_pkind;
+   const region *m_src_region;
  };
  
  /* A subclass of pending_diagnostic for complaining about shifts
*************** public:
*** 386,394 ****
  	    && same_tree_p (m_count_cst, other.m_count_cst));
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
!     return warning_at (rich_loc, OPT_Wanalyzer_shift_count_negative,
  		       "shift by negative count (%qE)", m_count_cst);
    }
  
--- 583,596 ----
  	    && same_tree_p (m_count_cst, other.m_count_cst));
    }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_shift_count_negative;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
!     return warning_at (rich_loc, get_controlling_option (),
  		       "shift by negative count (%qE)", m_count_cst);
    }
  
*************** public:
*** 428,436 ****
  	    && same_tree_p (m_count_cst, other.m_count_cst));
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
!     return warning_at (rich_loc, OPT_Wanalyzer_shift_count_overflow,
  		       "shift by count (%qE) >= precision of type (%qi)",
  		       m_count_cst, m_operand_precision);
    }
--- 630,643 ----
  	    && same_tree_p (m_count_cst, other.m_count_cst));
    }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_shift_count_overflow;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
!     return warning_at (rich_loc, get_controlling_option (),
  		       "shift by count (%qE) >= precision of type (%qi)",
  		       m_count_cst, m_operand_precision);
    }
*************** region_model::get_gassign_result (const
*** 649,654 ****
--- 856,1033 ----
      }
  }
  
+ /* Workaround for discarding certain false positives from
+    -Wanalyzer-use-of-uninitialized-value
+    of the form:
+      ((A OR-IF B) OR-IF C)
+    and:
+      ((A AND-IF B) AND-IF C)
+    where evaluating B is redundant, but could involve simple accesses of
+    uninitialized locals.
+ 
+    When optimization is turned on the FE can immediately fold compound
+    conditionals.  Specifically, c_parser_condition parses this condition:
+      ((A OR-IF B) OR-IF C)
+    and calls c_fully_fold on the condition.
+    Within c_fully_fold, fold_truth_andor is called, which bails when
+    optimization is off, but if any optimization is turned on can convert the
+      ((A OR-IF B) OR-IF C)
+    into:
+      ((A OR B) OR_IF C)
+    for sufficiently simple B
+    i.e. the inner OR-IF becomes an OR.
+    At gimplification time the inner OR becomes BIT_IOR_EXPR (in gimplify_expr),
+    giving this for the inner condition:
+       tmp = A | B;
+       if (tmp)
+    thus effectively synthesizing a redundant access of B when optimization
+    is turned on, when compared to:
+       if (A) goto L1; else goto L4;
+   L1: if (B) goto L2; else goto L4;
+   L2: if (C) goto L3; else goto L4;
+    for the unoptimized case.
+ 
+    Return true if CTXT appears to be  handling such a short-circuitable stmt,
+    such as the def-stmt for B for the:
+       tmp = A | B;
+    case above, for the case where A is true and thus B would have been
+    short-circuited without optimization, using MODEL for the value of A.  */
+ 
+ static bool
+ within_short_circuited_stmt_p (const region_model *model,
+ 			       region_model_context *ctxt)
+ {
+   gcc_assert (ctxt);
+   const gimple *curr_stmt = ctxt->get_stmt ();
+   if (curr_stmt == NULL)
+     return false;
+ 
+   /* We must have an assignment to a temporary of _Bool type.  */
+   const gassign *assign_stmt = dyn_cast <const gassign *> (curr_stmt);
+   if (!assign_stmt)
+     return false;
+   tree lhs = gimple_assign_lhs (assign_stmt);
+   if (TREE_TYPE (lhs) != boolean_type_node)
+     return false;
+   if (TREE_CODE (lhs) != SSA_NAME)
+     return false;
+   if (SSA_NAME_VAR (lhs) != NULL_TREE)
+     return false;
+ 
+   /* The temporary bool must be used exactly once: as the second arg of
+      a BIT_IOR_EXPR or BIT_AND_EXPR.  */
+   use_operand_p use_op;
+   gimple *use_stmt;
+   if (!single_imm_use (lhs, &use_op, &use_stmt))
+     return false;
+   const gassign *use_assign = dyn_cast <const gassign *> (use_stmt);
+   if (!use_assign)
+     return false;
+   enum tree_code op = gimple_assign_rhs_code (use_assign);
+   if (!(op == BIT_IOR_EXPR ||op == BIT_AND_EXPR))
+     return false;
+   if (!(gimple_assign_rhs1 (use_assign) != lhs
+ 	&& gimple_assign_rhs2 (use_assign) == lhs))
+     return false;
+ 
+   /* The first arg of the bitwise stmt must have a known value in MODEL
+      that implies that the value of the second arg doesn't matter, i.e.
+      1 for bitwise or, 0 for bitwise and.  */
+   tree other_arg = gimple_assign_rhs1 (use_assign);
+   /* Use a NULL ctxt here to avoid generating warnings.  */
+   const svalue *other_arg_sval = model->get_rvalue (other_arg, NULL);
+   tree other_arg_cst = other_arg_sval->maybe_get_constant ();
+   if (!other_arg_cst)
+     return false;
+   switch (op)
+     {
+     default:
+       gcc_unreachable ();
+     case BIT_IOR_EXPR:
+       if (zerop (other_arg_cst))
+ 	return false;
+       break;
+     case BIT_AND_EXPR:
+       if (!zerop (other_arg_cst))
+ 	return false;
+       break;
+     }
+ 
+   /* All tests passed.  We appear to be in a stmt that generates a boolean
+      temporary with a value that won't matter.  */
+   return true;
+ }
+ 
+ /* Check for SVAL being poisoned, adding a warning to CTXT.
+    Return SVAL, or, if a warning is added, another value, to avoid
+    repeatedly complaining about the same poisoned value in followup code.  */
+ 
+ const svalue *
+ region_model::check_for_poison (const svalue *sval,
+ 				tree expr,
+ 				region_model_context *ctxt) const
+ {
+   if (!ctxt)
+     return sval;
+ 
+   if (const poisoned_svalue *poisoned_sval = sval->dyn_cast_poisoned_svalue ())
+     {
+       enum poison_kind pkind = poisoned_sval->get_poison_kind ();
+ 
+       /* Ignore uninitialized uses of empty types; there's nothing
+ 	 to initialize.  */
+       if (pkind == POISON_KIND_UNINIT
+ 	  && sval->get_type ()
+ 	  && is_empty_type (sval->get_type ()))
+ 	return sval;
+ 
+       /* Special case to avoid certain false positives.  */
+       if (pkind == POISON_KIND_UNINIT
+ 	  && within_short_circuited_stmt_p (this, ctxt))
+ 	  return sval;
+ 
+       /* If we have an SSA name for a temporary, we don't want to print
+ 	 '<unknown>'.
+ 	 Poisoned values are shared by type, and so we can't reconstruct
+ 	 the tree other than via the def stmts, using
+ 	 fixup_tree_for_diagnostic.  */
+       tree diag_arg = fixup_tree_for_diagnostic (expr);
+       const region *src_region = NULL;
+       if (pkind == POISON_KIND_UNINIT)
+ 	src_region = get_region_for_poisoned_expr (expr);
+       if (ctxt->warn (new poisoned_value_diagnostic (diag_arg, pkind,
+ 						     src_region)))
+ 	{
+ 	  /* We only want to report use of a poisoned value at the first
+ 	     place it gets used; return an unknown value to avoid generating
+ 	     a chain of followup warnings.  */
+ 	  sval = m_mgr->get_or_create_unknown_svalue (sval->get_type ());
+ 	}
+ 
+       return sval;
+     }
+ 
+   return sval;
+ }
+ 
+ /* Attempt to get a region for describing EXPR, the source of region of
+    a poisoned_svalue for use in a poisoned_value_diagnostic.
+    Return NULL if there is no good region to use.  */
+ 
+ const region *
+ region_model::get_region_for_poisoned_expr (tree expr) const
+ {
+   if (TREE_CODE (expr) == SSA_NAME)
+     {
+       tree decl = SSA_NAME_VAR (expr);
+       if (decl && DECL_P (decl))
+ 	expr = decl;
+       else
+ 	return NULL;
+     }
+   return get_lvalue (expr, NULL);
+ }
+ 
  /* Update this model for the ASSIGN stmt, using CTXT to report any
     diagnostics.  */
  
*************** region_model::on_assignment (const gassi
*** 665,670 ****
--- 1044,1051 ----
       for some SVALUE.  */
    if (const svalue *sval = get_gassign_result (assign, ctxt))
      {
+       tree expr = get_diagnostic_tree_for_gassign (assign);
+       check_for_poison (sval, expr, ctxt);
        set_value (lhs_reg, sval, ctxt);
        return;
      }
*************** region_model::on_assignment (const gassi
*** 722,737 ****
      case STRING_CST:
        {
  	/* e.g. "struct s2 x = {{'A', 'B', 'C', 'D'}};".  */
- 	/* Add a default binding, rather than a direct one, so that array
- 	   access will "inherit" the individual chars.  */
  	const svalue *rhs_sval = get_rvalue (rhs1, ctxt);
  	m_store.set_value (m_mgr->get_store_manager(), lhs_reg, rhs_sval,
! 			   BK_default, ctxt ? ctxt->get_uncertainty () : NULL);
        }
        break;
      }
  }
  
  /* Update this model for the CALL stmt, using CTXT to report any
     diagnostics - the first half.
  
--- 1103,1284 ----
      case STRING_CST:
        {
  	/* e.g. "struct s2 x = {{'A', 'B', 'C', 'D'}};".  */
  	const svalue *rhs_sval = get_rvalue (rhs1, ctxt);
  	m_store.set_value (m_mgr->get_store_manager(), lhs_reg, rhs_sval,
! 			   ctxt ? ctxt->get_uncertainty () : NULL);
        }
        break;
      }
  }
  
+ /* A pending_diagnostic subclass for implementing "__analyzer_dump_path".  */
+ 
+ class dump_path_diagnostic
+   : public pending_diagnostic_subclass<dump_path_diagnostic>
+ {
+ public:
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return 0;
+   }
+ 
+   bool emit (rich_location *richloc) FINAL OVERRIDE
+   {
+     inform (richloc, "path");
+     return true;
+   }
+ 
+   const char *get_kind () const FINAL OVERRIDE { return "dump_path_diagnostic"; }
+ 
+   bool operator== (const dump_path_diagnostic &) const
+   {
+     return true;
+   }
+ };
+ 
+ /* Handle the pre-sm-state part of STMT, modifying this object in-place.
+    Write true to *OUT_TERMINATE_PATH if the path should be terminated.
+    Write true to *OUT_UNKNOWN_SIDE_EFFECTS if the stmt has unknown
+    side effects.  */
+ 
+ void
+ region_model::on_stmt_pre (const gimple *stmt,
+ 			   bool *out_terminate_path,
+ 			   bool *out_unknown_side_effects,
+ 			   region_model_context *ctxt)
+ {
+   switch (gimple_code (stmt))
+     {
+     default:
+       /* No-op for now.  */
+       break;
+ 
+     case GIMPLE_ASSIGN:
+       {
+ 	const gassign *assign = as_a <const gassign *> (stmt);
+ 	on_assignment (assign, ctxt);
+       }
+       break;
+ 
+     case GIMPLE_ASM:
+       {
+ 	const gasm *asm_stmt = as_a <const gasm *> (stmt);
+ 	on_asm_stmt (asm_stmt, ctxt);
+       }
+       break;
+ 
+     case GIMPLE_CALL:
+       {
+ 	/* Track whether we have a gcall to a function that's not recognized by
+ 	   anything, for which we don't have a function body, or for which we
+ 	   don't know the fndecl.  */
+ 	const gcall *call = as_a <const gcall *> (stmt);
+ 
+ 	/* Debugging/test support.  */
+ 	if (is_special_named_call_p (call, "__analyzer_describe", 2))
+ 	  impl_call_analyzer_describe (call, ctxt);
+ 	else if (is_special_named_call_p (call, "__analyzer_dump_capacity", 1))
+ 	  impl_call_analyzer_dump_capacity (call, ctxt);
+ 	else if (is_special_named_call_p (call, "__analyzer_dump_escaped", 0))
+ 	  impl_call_analyzer_dump_escaped (call);
+ 	else if (is_special_named_call_p (call, "__analyzer_dump_path", 0))
+ 	  {
+ 	    /* Handle the builtin "__analyzer_dump_path" by queuing a
+ 	       diagnostic at this exploded_node.  */
+ 	    ctxt->warn (new dump_path_diagnostic ());
+ 	  }
+ 	else if (is_special_named_call_p (call, "__analyzer_dump_region_model",
+ 					  0))
+ 	  {
+ 	    /* Handle the builtin "__analyzer_dump_region_model" by dumping
+ 	       the region model's state to stderr.  */
+ 	    dump (false);
+ 	  }
+ 	else if (is_special_named_call_p (call, "__analyzer_eval", 1))
+ 	  impl_call_analyzer_eval (call, ctxt);
+ 	else if (is_special_named_call_p (call, "__analyzer_break", 0))
+ 	  {
+ 	    /* Handle the builtin "__analyzer_break" by triggering a
+ 	       breakpoint.  */
+ 	    /* TODO: is there a good cross-platform way to do this?  */
+ 	    raise (SIGINT);
+ 	  }
+ 	else if (is_special_named_call_p (call,
+ 					  "__analyzer_dump_exploded_nodes",
+ 					  1))
+ 	  {
+ 	    /* This is handled elsewhere.  */
+ 	  }
+ 	else
+ 	  *out_unknown_side_effects = on_call_pre (call, ctxt,
+ 						   out_terminate_path);
+       }
+       break;
+ 
+     case GIMPLE_RETURN:
+       {
+ 	const greturn *return_ = as_a <const greturn *> (stmt);
+ 	on_return (return_, ctxt);
+       }
+       break;
+     }
+ }
+ 
+ /* Ensure that all arguments at the call described by CD are checked
+    for poisoned values, by calling get_rvalue on each argument.  */
+ 
+ void
+ region_model::check_call_args (const call_details &cd) const
+ {
+   for (unsigned arg_idx = 0; arg_idx < cd.num_args (); arg_idx++)
+     cd.get_arg_svalue (arg_idx);
+ }
+ 
+ /* Return true if CD is known to be a call to a function with
+    __attribute__((const)).  */
+ 
+ static bool
+ const_fn_p (const call_details &cd)
+ {
+   tree fndecl = cd.get_fndecl_for_call ();
+   if (!fndecl)
+     return false;
+   gcc_assert (DECL_P (fndecl));
+   return TREE_READONLY (fndecl);
+ }
+ 
+ /* If this CD is known to be a call to a function with
+    __attribute__((const)), attempt to get a const_fn_result_svalue
+    based on the arguments, or return NULL otherwise.  */
+ 
+ static const svalue *
+ maybe_get_const_fn_result (const call_details &cd)
+ {
+   if (!const_fn_p (cd))
+     return NULL;
+ 
+   unsigned num_args = cd.num_args ();
+   if (num_args > const_fn_result_svalue::MAX_INPUTS)
+     /* Too many arguments.  */
+     return NULL;
+ 
+   auto_vec<const svalue *> inputs (num_args);
+   for (unsigned arg_idx = 0; arg_idx < num_args; arg_idx++)
+     {
+       const svalue *arg_sval = cd.get_arg_svalue (arg_idx);
+       if (!arg_sval->can_have_associated_state_p ())
+ 	return NULL;
+       inputs.quick_push (arg_sval);
+     }
+ 
+   region_model_manager *mgr = cd.get_manager ();
+   const svalue *sval
+     = mgr->get_or_create_const_fn_result_svalue (cd.get_lhs_type (),
+ 						 cd.get_fndecl_for_call (),
+ 						 inputs);
+   return sval;
+ }
+ 
  /* Update this model for the CALL stmt, using CTXT to report any
     diagnostics - the first half.
  
*************** bool
*** 750,787 ****
  region_model::on_call_pre (const gcall *call, region_model_context *ctxt,
  			   bool *out_terminate_path)
  {
    bool unknown_side_effects = false;
  
!   if (tree callee_fndecl = get_fndecl_for_call (call, ctxt))
      {
!       call_details cd (call, this, ctxt);
  
        /* The various impl_call_* member functions are implemented
  	 in region-model-impl-calls.cc.
  	 Having them split out into separate functions makes it easier
  	 to put breakpoints on the handling of specific functions.  */
  
        if (fndecl_built_in_p (callee_fndecl, BUILT_IN_NORMAL)
  	  && gimple_builtin_call_types_compatible_p (call, callee_fndecl))
  	switch (DECL_UNCHECKED_FUNCTION_CODE (callee_fndecl))
  	  {
  	  default:
! 	    if (!DECL_PURE_P (callee_fndecl))
  	      unknown_side_effects = true;
  	    break;
  	  case BUILT_IN_ALLOCA:
  	  case BUILT_IN_ALLOCA_WITH_ALIGN:
! 	    return impl_call_alloca (cd);
  	  case BUILT_IN_CALLOC:
! 	    return impl_call_calloc (cd);
  	  case BUILT_IN_EXPECT:
  	  case BUILT_IN_EXPECT_WITH_PROBABILITY:
! 	    return impl_call_builtin_expect (cd);
  	  case BUILT_IN_FREE:
  	    /* Handle in "on_call_post".  */
  	    break;
  	  case BUILT_IN_MALLOC:
! 	    return impl_call_malloc (cd);
  	  case BUILT_IN_MEMCPY:
  	  case BUILT_IN_MEMCPY_CHK:
  	    impl_call_memcpy (cd);
--- 1297,1383 ----
  region_model::on_call_pre (const gcall *call, region_model_context *ctxt,
  			   bool *out_terminate_path)
  {
+   call_details cd (call, this, ctxt);
+ 
    bool unknown_side_effects = false;
  
!   /* Special-case for IFN_DEFERRED_INIT.
!      We want to report uninitialized variables with -fanalyzer (treating
!      -ftrivial-auto-var-init= as purely a mitigation feature).
!      Handle IFN_DEFERRED_INIT by treating it as no-op: don't touch the
!      lhs of the call, so that it is still uninitialized from the point of
!      view of the analyzer.  */
!   if (gimple_call_internal_p (call)
!       && gimple_call_internal_fn (call) == IFN_DEFERRED_INIT)
!     return false;
! 
!   /* Some of the cases below update the lhs of the call based on the
!      return value, but not all.  Provide a default value, which may
!      get overwritten below.  */
!   if (tree lhs = gimple_call_lhs (call))
      {
!       const region *lhs_region = get_lvalue (lhs, ctxt);
!       const svalue *sval = maybe_get_const_fn_result (cd);
!       if (!sval)
! 	{
! 	  /* For the common case of functions without __attribute__((const)),
! 	     use a conjured value, and purge any prior state involving that
! 	     value (in case this is in a loop).  */
! 	  sval = m_mgr->get_or_create_conjured_svalue (TREE_TYPE (lhs), call,
! 						       lhs_region,
! 						       conjured_purge (this,
! 								       ctxt));
! 	}
!       set_value (lhs_region, sval, ctxt);
!     }
  
+   if (gimple_call_internal_p (call))
+     {
+       switch (gimple_call_internal_fn (call))
+        {
+        default:
+ 	 break;
+        case IFN_BUILTIN_EXPECT:
+ 	 impl_call_builtin_expect (cd);
+ 	 return false;
+        case IFN_UBSAN_BOUNDS:
+ 	 return false;
+        }
+     }
+ 
+   if (tree callee_fndecl = get_fndecl_for_call (call, ctxt))
+     {
        /* The various impl_call_* member functions are implemented
  	 in region-model-impl-calls.cc.
  	 Having them split out into separate functions makes it easier
  	 to put breakpoints on the handling of specific functions.  */
+       int callee_fndecl_flags = flags_from_decl_or_type (callee_fndecl);
  
        if (fndecl_built_in_p (callee_fndecl, BUILT_IN_NORMAL)
  	  && gimple_builtin_call_types_compatible_p (call, callee_fndecl))
  	switch (DECL_UNCHECKED_FUNCTION_CODE (callee_fndecl))
  	  {
  	  default:
! 	    if (!(callee_fndecl_flags & (ECF_CONST | ECF_PURE)))
  	      unknown_side_effects = true;
  	    break;
  	  case BUILT_IN_ALLOCA:
  	  case BUILT_IN_ALLOCA_WITH_ALIGN:
! 	    impl_call_alloca (cd);
! 	    return false;
  	  case BUILT_IN_CALLOC:
! 	    impl_call_calloc (cd);
! 	    return false;
  	  case BUILT_IN_EXPECT:
  	  case BUILT_IN_EXPECT_WITH_PROBABILITY:
! 	    impl_call_builtin_expect (cd);
! 	    return false;
  	  case BUILT_IN_FREE:
  	    /* Handle in "on_call_post".  */
  	    break;
  	  case BUILT_IN_MALLOC:
! 	    impl_call_malloc (cd);
! 	    return false;
  	  case BUILT_IN_MEMCPY:
  	  case BUILT_IN_MEMCPY_CHK:
  	    impl_call_memcpy (cd);
*************** region_model::on_call_pre (const gcall *
*** 792,807 ****
  	    return false;
  	    break;
  	  case BUILT_IN_REALLOC:
! 	    impl_call_realloc (cd);
  	    return false;
  	  case BUILT_IN_STRCPY:
  	  case BUILT_IN_STRCPY_CHK:
  	    impl_call_strcpy (cd);
  	    return false;
  	  case BUILT_IN_STRLEN:
! 	    if (impl_call_strlen (cd))
! 	      return false;
! 	    break;
  
  	  /* Stdio builtins.  */
  	  case BUILT_IN_FPRINTF:
--- 1388,1408 ----
  	    return false;
  	    break;
  	  case BUILT_IN_REALLOC:
! 	    return false;
! 	  case BUILT_IN_STRCHR:
! 	    impl_call_strchr (cd);
  	    return false;
  	  case BUILT_IN_STRCPY:
  	  case BUILT_IN_STRCPY_CHK:
  	    impl_call_strcpy (cd);
  	    return false;
  	  case BUILT_IN_STRLEN:
! 	    impl_call_strlen (cd);
! 	    return false;
! 
! 	  case BUILT_IN_STACK_SAVE:
! 	  case BUILT_IN_STACK_RESTORE:
! 	    return false;
  
  	  /* Stdio builtins.  */
  	  case BUILT_IN_FPRINTF:
*************** region_model::on_call_pre (const gcall *
*** 825,848 ****
  	    /* These stdio builtins have external effects that are out
  	       of scope for the analyzer: we only want to model the effects
  	       on the return value.  */
  	    break;
  	  }
-       else if (gimple_call_internal_p (call))
- 	switch (gimple_call_internal_fn (call))
- 	  {
- 	  default:
- 	    if (!DECL_PURE_P (callee_fndecl))
- 	      unknown_side_effects = true;
- 	    break;
- 	  case IFN_BUILTIN_EXPECT:
- 	    return impl_call_builtin_expect (cd);
- 	  }
        else if (is_named_call_p (callee_fndecl, "malloc", call, 1))
! 	return impl_call_malloc (cd);
        else if (is_named_call_p (callee_fndecl, "calloc", call, 2))
! 	return impl_call_calloc (cd);
        else if (is_named_call_p (callee_fndecl, "alloca", call, 1))
! 	return impl_call_alloca (cd);
        else if (is_named_call_p (callee_fndecl, "realloc", call, 2))
  	{
  	  impl_call_realloc (cd);
--- 1426,1449 ----
  	    /* These stdio builtins have external effects that are out
  	       of scope for the analyzer: we only want to model the effects
  	       on the return value.  */
+ 	    check_call_args (cd);
  	    break;
  	  }
        else if (is_named_call_p (callee_fndecl, "malloc", call, 1))
! 	{
! 	  impl_call_malloc (cd);
! 	  return false;
! 	}
        else if (is_named_call_p (callee_fndecl, "calloc", call, 2))
! 	{
! 	  impl_call_calloc (cd);
! 	  return false;
! 	}
        else if (is_named_call_p (callee_fndecl, "alloca", call, 1))
! 	{
! 	  impl_call_alloca (cd);
! 	  return false;
! 	}
        else if (is_named_call_p (callee_fndecl, "realloc", call, 2))
  	{
  	  impl_call_realloc (cd);
*************** region_model::on_call_pre (const gcall *
*** 862,867 ****
--- 1463,1479 ----
  	  else
  	    unknown_side_effects = true;
  	}
+       else if (is_named_call_p (callee_fndecl, "fgets", call, 3)
+ 	       || is_named_call_p (callee_fndecl, "fgets_unlocked", call, 3))
+ 	{
+ 	  impl_call_fgets (cd);
+ 	  return false;
+ 	}
+       else if (is_named_call_p (callee_fndecl, "fread", call, 4))
+ 	{
+ 	  impl_call_fread (cd);
+ 	  return false;
+ 	}
        else if (is_named_call_p (callee_fndecl, "getchar", call, 0))
  	{
  	  /* No side-effects (tracking stream state is out-of-scope
*************** region_model::on_call_pre (const gcall *
*** 873,888 ****
  	  impl_call_memset (cd);
  	  return false;
  	}
        else if (is_named_call_p (callee_fndecl, "strlen", call, 1)
  	       && POINTER_TYPE_P (cd.get_arg_type (0)))
  	{
! 	  if (impl_call_strlen (cd))
! 	    return false;
  	}
        else if (is_named_call_p (callee_fndecl, "operator new", call, 1))
! 	return impl_call_operator_new (cd);
        else if (is_named_call_p (callee_fndecl, "operator new []", call, 1))
! 	return impl_call_operator_new (cd);
        else if (is_named_call_p (callee_fndecl, "operator delete", call, 1)
  	       || is_named_call_p (callee_fndecl, "operator delete", call, 2)
  	       || is_named_call_p (callee_fndecl, "operator delete []", call, 1))
--- 1485,1512 ----
  	  impl_call_memset (cd);
  	  return false;
  	}
+       else if (is_named_call_p (callee_fndecl, "strchr", call, 2)
+ 	       && POINTER_TYPE_P (cd.get_arg_type (0)))
+ 	{
+ 	  impl_call_strchr (cd);
+ 	  return false;
+ 	}
        else if (is_named_call_p (callee_fndecl, "strlen", call, 1)
  	       && POINTER_TYPE_P (cd.get_arg_type (0)))
  	{
! 	  impl_call_strlen (cd);
! 	  return false;
  	}
        else if (is_named_call_p (callee_fndecl, "operator new", call, 1))
! 	{
! 	  impl_call_operator_new (cd);
! 	  return false;
! 	}
        else if (is_named_call_p (callee_fndecl, "operator new []", call, 1))
! 	{
! 	  impl_call_operator_new (cd);
! 	  return false;
! 	}
        else if (is_named_call_p (callee_fndecl, "operator delete", call, 1)
  	       || is_named_call_p (callee_fndecl, "operator delete", call, 2)
  	       || is_named_call_p (callee_fndecl, "operator delete []", call, 1))
*************** region_model::on_call_pre (const gcall *
*** 890,915 ****
  	  /* Handle in "on_call_post".  */
  	}
        else if (!fndecl_has_gimple_body_p (callee_fndecl)
! 	       && !DECL_PURE_P (callee_fndecl)
  	       && !fndecl_built_in_p (callee_fndecl))
  	unknown_side_effects = true;
      }
    else
      unknown_side_effects = true;
  
-   /* Some of the above cases update the lhs of the call based on the
-      return value.  If we get here, it hasn't been done yet, so do that
-      now.  */
-   if (tree lhs = gimple_call_lhs (call))
-     {
-       const region *lhs_region = get_lvalue (lhs, ctxt);
-       if (TREE_CODE (lhs) == SSA_NAME)
- 	{
- 	  const svalue *sval = m_mgr->get_or_create_initial_value (lhs_region);
- 	  set_value (lhs_region, sval, ctxt);
- 	}
-     }
- 
    return unknown_side_effects;
  }
  
--- 1514,1526 ----
  	  /* Handle in "on_call_post".  */
  	}
        else if (!fndecl_has_gimple_body_p (callee_fndecl)
! 	       && (!(callee_fndecl_flags & (ECF_CONST | ECF_PURE)))
  	       && !fndecl_built_in_p (callee_fndecl))
  	unknown_side_effects = true;
      }
    else
      unknown_side_effects = true;
  
    return unknown_side_effects;
  }
  
*************** region_model::on_call_post (const gcall
*** 930,938 ****
  {
    if (tree callee_fndecl = get_fndecl_for_call (call, ctxt))
      {
        if (is_named_call_p (callee_fndecl, "free", call, 1))
  	{
- 	  call_details cd (call, this, ctxt);
  	  impl_call_free (cd);
  	  return;
  	}
--- 1541,1549 ----
  {
    if (tree callee_fndecl = get_fndecl_for_call (call, ctxt))
      {
+       call_details cd (call, this, ctxt);
        if (is_named_call_p (callee_fndecl, "free", call, 1))
  	{
  	  impl_call_free (cd);
  	  return;
  	}
*************** region_model::on_call_post (const gcall
*** 940,946 ****
  	  || is_named_call_p (callee_fndecl, "operator delete", call, 2)
  	  || is_named_call_p (callee_fndecl, "operator delete []", call, 1))
  	{
- 	  call_details cd (call, this, ctxt);
  	  impl_call_operator_delete (cd);
  	  return;
  	}
--- 1551,1556 ----
*************** region_model::on_call_post (const gcall
*** 948,963 ****
  	 __attribute__((malloc(FOO)))?  */
        if (lookup_attribute ("*dealloc", DECL_ATTRIBUTES (callee_fndecl)))
  	{
- 	  call_details cd (call, this, ctxt);
  	  impl_deallocation_call (cd);
  	  return;
  	}
      }
  
    if (unknown_side_effects)
      handle_unrecognized_call (call, ctxt);
  }
  
  /* Handle a call CALL to a function with unknown behavior.
  
     Traverse the regions in this model, determining what regions are
--- 1558,1732 ----
  	 __attribute__((malloc(FOO)))?  */
        if (lookup_attribute ("*dealloc", DECL_ATTRIBUTES (callee_fndecl)))
  	{
  	  impl_deallocation_call (cd);
  	  return;
  	}
+       if (fndecl_built_in_p (callee_fndecl, BUILT_IN_NORMAL)
+ 	  && gimple_builtin_call_types_compatible_p (call, callee_fndecl))
+ 	switch (DECL_UNCHECKED_FUNCTION_CODE (callee_fndecl))
+ 	  {
+ 	  default:
+ 	    break;
+ 	  case BUILT_IN_REALLOC:
+ 	    impl_call_realloc (cd);
+ 	    return;
+ 	  }
      }
  
    if (unknown_side_effects)
      handle_unrecognized_call (call, ctxt);
  }
  
+ /* Purge state involving SVAL from this region_model, using CTXT
+    (if non-NULL) to purge other state in a program_state.
+ 
+    For example, if we're at the def-stmt of an SSA name, then we need to
+    purge any state for svalues that involve that SSA name.  This avoids
+    false positives in loops, since a symbolic value referring to the
+    SSA name will be referring to the previous value of that SSA name.
+ 
+    For example, in:
+      while ((e = hashmap_iter_next(&iter))) {
+        struct oid2strbuf *e_strbuf = (struct oid2strbuf *)e;
+        free (e_strbuf->value);
+      }
+    at the def-stmt of e_8:
+      e_8 = hashmap_iter_next (&iter);
+    we should purge the "freed" state of:
+      INIT_VAL(CAST_REG(‘struct oid2strbuf’, (*INIT_VAL(e_8))).value)
+    which is the "e_strbuf->value" value from the previous iteration,
+    or we will erroneously report a double-free - the "e_8" within it
+    refers to the previous value.  */
+ 
+ void
+ region_model::purge_state_involving (const svalue *sval,
+ 				     region_model_context *ctxt)
+ {
+   if (!sval->can_have_associated_state_p ())
+     return;
+   m_store.purge_state_involving (sval, m_mgr);
+   m_constraints->purge_state_involving (sval);
+   m_dynamic_extents.purge_state_involving (sval);
+   if (ctxt)
+     ctxt->purge_state_involving (sval);
+ }
+ 
+ /* A pending_note subclass for adding a note about an
+    __attribute__((access, ...)) to a diagnostic.  */
+ 
+ class reason_attr_access : public pending_note_subclass<reason_attr_access>
+ {
+ public:
+   reason_attr_access (tree callee_fndecl, const attr_access &access)
+   : m_callee_fndecl (callee_fndecl),
+     m_ptr_argno (access.ptrarg),
+     m_access_str (TREE_STRING_POINTER (access.to_external_string ()))
+   {
+   }
+ 
+   const char *get_kind () const FINAL OVERRIDE { return "reason_attr_access"; }
+ 
+   void emit () const
+   {
+     inform (DECL_SOURCE_LOCATION (m_callee_fndecl),
+ 	    "parameter %i of %qD marked with attribute %qs",
+ 	    m_ptr_argno + 1, m_callee_fndecl, m_access_str);
+   }
+ 
+   bool operator== (const reason_attr_access &other) const
+   {
+     return (m_callee_fndecl == other.m_callee_fndecl
+ 	    && m_ptr_argno == other.m_ptr_argno
+ 	    && !strcmp (m_access_str, other.m_access_str));
+   }
+ 
+ private:
+   tree m_callee_fndecl;
+   unsigned m_ptr_argno;
+   const char *m_access_str;
+ };
+ 
+ /* Check CALL a call to external function CALLEE_FNDECL based on
+    any __attribute__ ((access, ....) on the latter, complaining to
+    CTXT about any issues.
+ 
+    Currently we merely call check_region_for_write on any regions
+    pointed to by arguments marked with a "write_only" or "read_write"
+    attribute.  */
+ 
+ void
+ region_model::
+ check_external_function_for_access_attr (const gcall *call,
+ 					 tree callee_fndecl,
+ 					 region_model_context *ctxt) const
+ {
+   gcc_assert (call);
+   gcc_assert (callee_fndecl);
+   gcc_assert (ctxt);
+ 
+   tree fntype = TREE_TYPE (callee_fndecl);
+   if (!fntype)
+     return;
+ 
+   if (!TYPE_ATTRIBUTES (fntype))
+     return;
+ 
+   /* Initialize a map of attribute access specifications for arguments
+      to the function call.  */
+   rdwr_map rdwr_idx;
+   init_attr_rdwr_indices (&rdwr_idx, TYPE_ATTRIBUTES (fntype));
+ 
+   unsigned argno = 0;
+ 
+   for (tree iter = TYPE_ARG_TYPES (fntype); iter;
+        iter = TREE_CHAIN (iter), ++argno)
+     {
+       const attr_access* access = rdwr_idx.get (argno);
+       if (!access)
+ 	continue;
+ 
+       /* Ignore any duplicate entry in the map for the size argument.  */
+       if (access->ptrarg != argno)
+ 	continue;
+ 
+       if (access->mode == access_write_only
+ 	  || access->mode == access_read_write)
+ 	{
+ 	  /* Subclass of decorated_region_model_context that
+ 	     adds a note about the attr access to any saved diagnostics.  */
+ 	  class annotating_ctxt : public note_adding_context
+ 	  {
+ 	  public:
+ 	    annotating_ctxt (tree callee_fndecl,
+ 			     const attr_access &access,
+ 			     region_model_context *ctxt)
+ 	    : note_adding_context (ctxt),
+ 	      m_callee_fndecl (callee_fndecl),
+ 	      m_access (access)
+ 	    {
+ 	    }
+ 	    pending_note *make_note () FINAL OVERRIDE
+ 	    {
+ 	      return new reason_attr_access (m_callee_fndecl, m_access);
+ 	    }
+ 	  private:
+ 	    tree m_callee_fndecl;
+ 	    const attr_access &m_access;
+ 	  };
+ 
+ 	  /* Use this ctxt below so that any diagnostics get the
+ 	     note added to them.  */
+ 	  annotating_ctxt my_ctxt (callee_fndecl, *access, ctxt);
+ 
+ 	  tree ptr_tree = gimple_call_arg (call, access->ptrarg);
+ 	  const svalue *ptr_sval = get_rvalue (ptr_tree, &my_ctxt);
+ 	  const region *reg = deref_rvalue (ptr_sval, ptr_tree, &my_ctxt);
+ 	  check_region_for_write (reg, &my_ctxt);
+ 	  /* We don't use the size arg for now.  */
+ 	}
+     }
+ }
+ 
  /* Handle a call CALL to a function with unknown behavior.
  
     Traverse the regions in this model, determining what regions are
*************** region_model::handle_unrecognized_call (
*** 973,978 ****
--- 1742,1750 ----
  {
    tree fndecl = get_fndecl_for_call (call, ctxt);
  
+   if (fndecl && ctxt)
+     check_external_function_for_access_attr (call, fndecl, ctxt);
+ 
    reachable_regions reachable_regs (this);
  
    /* Determine the reachable regions and their mutability.  */
*************** region_model::handle_unrecognized_call (
*** 1003,1009 ****
        }
    }
  
!   uncertainty_t *uncertainty = ctxt->get_uncertainty ();
  
    /* Purge sm-state for the svalues that were reachable,
       both in non-mutable and mutable form.  */
--- 1775,1781 ----
        }
    }
  
!   uncertainty_t *uncertainty = ctxt ? ctxt->get_uncertainty () : NULL;
  
    /* Purge sm-state for the svalues that were reachable,
       both in non-mutable and mutable form.  */
*************** region_model::handle_unrecognized_call (
*** 1012,1025 ****
         iter != reachable_regs.end_reachable_svals (); ++iter)
      {
        const svalue *sval = (*iter);
!       ctxt->on_unknown_change (sval, false);
      }
    for (svalue_set::iterator iter
  	 = reachable_regs.begin_mutable_svals ();
         iter != reachable_regs.end_mutable_svals (); ++iter)
      {
        const svalue *sval = (*iter);
!       ctxt->on_unknown_change (sval, true);
        if (uncertainty)
  	uncertainty->on_mutable_sval_at_unknown_call (sval);
      }
--- 1784,1799 ----
         iter != reachable_regs.end_reachable_svals (); ++iter)
      {
        const svalue *sval = (*iter);
!       if (ctxt)
! 	ctxt->on_unknown_change (sval, false);
      }
    for (svalue_set::iterator iter
  	 = reachable_regs.begin_mutable_svals ();
         iter != reachable_regs.end_mutable_svals (); ++iter)
      {
        const svalue *sval = (*iter);
!       if (ctxt)
! 	ctxt->on_unknown_change (sval, true);
        if (uncertainty)
  	uncertainty->on_mutable_sval_at_unknown_call (sval);
      }
*************** region_model::handle_unrecognized_call (
*** 1029,1035 ****
  
    /* Update bindings for all clusters that have escaped, whether above,
       or previously.  */
!   m_store.on_unknown_fncall (call, m_mgr->get_store_manager ());
  }
  
  /* Traverse the regions in this model, determining what regions are
--- 1803,1821 ----
  
    /* Update bindings for all clusters that have escaped, whether above,
       or previously.  */
!   m_store.on_unknown_fncall (call, m_mgr->get_store_manager (),
! 			     conjured_purge (this, ctxt));
! 
!   /* Purge dynamic extents from any regions that have escaped mutably:
!      realloc could have been called on them.  */
!   for (hash_set<const region *>::iterator
! 	 iter = reachable_regs.begin_mutable_base_regs ();
!        iter != reachable_regs.end_mutable_base_regs ();
!        ++iter)
!     {
!       const region *base_reg = (*iter);
!       unset_dynamic_extents (base_reg);
!     }
  }
  
  /* Traverse the regions in this model, determining what regions are
*************** region_model::on_return (const greturn *
*** 1093,1099 ****
    tree rhs = gimple_return_retval (return_stmt);
  
    if (lhs && rhs)
!     copy_region (get_lvalue (lhs, ctxt), get_lvalue (rhs, ctxt), ctxt);
  }
  
  /* Update this model for a call and return of setjmp/sigsetjmp at CALL within
--- 1879,1889 ----
    tree rhs = gimple_return_retval (return_stmt);
  
    if (lhs && rhs)
!     {
!       const svalue *sval = get_rvalue (rhs, ctxt);
!       const region *ret_reg = get_lvalue (lhs, ctxt);
!       set_value (ret_reg, sval, ctxt);
!     }
  }
  
  /* Update this model for a call and return of setjmp/sigsetjmp at CALL within
*************** region_model::on_longjmp (const gcall *l
*** 1185,1195 ****
  
  /* Update this region_model for a phi stmt of the form
       LHS = PHI <...RHS...>.
!    where RHS is for the appropriate edge.  */
  
  void
  region_model::handle_phi (const gphi *phi,
  			  tree lhs, tree rhs,
  			  region_model_context *ctxt)
  {
    /* For now, don't bother tracking the .MEM SSA names.  */
--- 1975,1988 ----
  
  /* Update this region_model for a phi stmt of the form
       LHS = PHI <...RHS...>.
!    where RHS is for the appropriate edge.
!    Get state from OLD_STATE so that all of the phi stmts for a basic block
!    are effectively handled simultaneously.  */
  
  void
  region_model::handle_phi (const gphi *phi,
  			  tree lhs, tree rhs,
+ 			  const region_model &old_state,
  			  region_model_context *ctxt)
  {
    /* For now, don't bother tracking the .MEM SSA names.  */
*************** region_model::handle_phi (const gphi *ph
*** 1198,1206 ****
        if (VAR_DECL_IS_VIRTUAL_OPERAND (var))
  	return;
  
!   const svalue *rhs_sval = get_rvalue (rhs, ctxt);
  
!   set_value (get_lvalue (lhs, ctxt), rhs_sval, ctxt);
  
    if (ctxt)
      ctxt->on_phi (phi, rhs);
--- 1991,2000 ----
        if (VAR_DECL_IS_VIRTUAL_OPERAND (var))
  	return;
  
!   const svalue *src_sval = old_state.get_rvalue (rhs, ctxt);
!   const region *dst_reg = old_state.get_lvalue (lhs, ctxt);
  
!   set_value (dst_reg, src_sval, ctxt);
  
    if (ctxt)
      ctxt->on_phi (phi, rhs);
*************** region_model::get_lvalue_1 (path_var pv,
*** 1237,1242 ****
--- 2031,2050 ----
        }
        break;
  
+     case BIT_FIELD_REF:
+       {
+ 	tree inner_expr = TREE_OPERAND (expr, 0);
+ 	const region *inner_reg = get_lvalue (inner_expr, ctxt);
+ 	tree num_bits = TREE_OPERAND (expr, 1);
+ 	tree first_bit_offset = TREE_OPERAND (expr, 2);
+ 	gcc_assert (TREE_CODE (num_bits) == INTEGER_CST);
+ 	gcc_assert (TREE_CODE (first_bit_offset) == INTEGER_CST);
+ 	bit_range bits (TREE_INT_CST_LOW (first_bit_offset),
+ 			TREE_INT_CST_LOW (num_bits));
+ 	return m_mgr->get_bit_range (inner_reg, TREE_TYPE (expr), bits);
+       }
+       break;
+ 
      case MEM_REF:
        {
  	tree ptr = TREE_OPERAND (expr, 0);
*************** region_model::get_lvalue_1 (path_var pv,
*** 1275,1281 ****
  	int stack_index = pv.m_stack_depth;
  	const frame_region *frame = get_frame_at_index (stack_index);
  	gcc_assert (frame);
! 	return frame->get_region_for_local (m_mgr, expr);
        }
  
      case COMPONENT_REF:
--- 2083,2089 ----
  	int stack_index = pv.m_stack_depth;
  	const frame_region *frame = get_frame_at_index (stack_index);
  	gcc_assert (frame);
! 	return frame->get_region_for_local (m_mgr, expr, ctxt);
        }
  
      case COMPONENT_REF:
*************** assert_compat_types (tree src_type, tree
*** 1307,1312 ****
--- 2115,2131 ----
      }
  }
  
+ /* Return true if SRC_TYPE can be converted to DST_TYPE as a no-op.  */
+ 
+ bool
+ compat_types_p (tree src_type, tree dst_type)
+ {
+   if (src_type && dst_type && !VOID_TYPE_P (dst_type))
+     if (!(useless_type_conversion_p (src_type, dst_type)))
+       return false;
+   return true;
+ }
+ 
  /* Get the region for PV within this region_model,
     emitting any diagnostics to CTXT.  */
  
*************** region_model::get_rvalue_1 (path_var pv,
*** 1366,1372 ****
  	gcc_assert (TREE_CODE (first_bit_offset) == INTEGER_CST);
  	bit_range bits (TREE_INT_CST_LOW (first_bit_offset),
  			TREE_INT_CST_LOW (num_bits));
! 	return get_rvalue_for_bits (TREE_TYPE (expr), reg, bits);
        }
  
      case SSA_NAME:
--- 2185,2191 ----
  	gcc_assert (TREE_CODE (first_bit_offset) == INTEGER_CST);
  	bit_range bits (TREE_INT_CST_LOW (first_bit_offset),
  			TREE_INT_CST_LOW (num_bits));
! 	return get_rvalue_for_bits (TREE_TYPE (expr), reg, bits, ctxt);
        }
  
      case SSA_NAME:
*************** region_model::get_rvalue_1 (path_var pv,
*** 1376,1382 ****
      case ARRAY_REF:
        {
  	const region *reg = get_lvalue (pv, ctxt);
! 	return get_store_value (reg);
        }
  
      case REALPART_EXPR:
--- 2195,2201 ----
      case ARRAY_REF:
        {
  	const region *reg = get_lvalue (pv, ctxt);
! 	return get_store_value (reg, ctxt);
        }
  
      case REALPART_EXPR:
*************** region_model::get_rvalue_1 (path_var pv,
*** 1431,1437 ****
      case MEM_REF:
        {
  	const region *ref_reg = get_lvalue (pv, ctxt);
! 	return get_store_value (ref_reg);
        }
      }
  }
--- 2250,2261 ----
      case MEM_REF:
        {
  	const region *ref_reg = get_lvalue (pv, ctxt);
! 	return get_store_value (ref_reg, ctxt);
!       }
!     case OBJ_TYPE_REF:
!       {
!         tree expr = OBJ_TYPE_REF_EXPR (pv.m_tree);
!         return get_rvalue (expr, ctxt);
        }
      }
  }
*************** region_model::get_rvalue (path_var pv, r
*** 1449,1454 ****
--- 2273,2280 ----
  
    assert_compat_types (result_sval->get_type (), TREE_TYPE (pv.m_tree));
  
+   result_sval = check_for_poison (result_sval, pv.m_tree, ctxt);
+ 
    return result_sval;
  }
  
*************** region_model::get_initial_value_for_glob
*** 1515,1522 ****
  	    {
  	      /* Get the value for REG within base_reg_init.  */
  	      binding_cluster c (base_reg);
! 	      c.bind (m_mgr->get_store_manager (), base_reg, base_reg_init,
! 		      BK_direct);
  	      const svalue *sval
  		= c.get_any_binding (m_mgr->get_store_manager (), reg);
  	      if (sval)
--- 2341,2347 ----
  	    {
  	      /* Get the value for REG within base_reg_init.  */
  	      binding_cluster c (base_reg);
! 	      c.bind (m_mgr->get_store_manager (), base_reg, base_reg_init);
  	      const svalue *sval
  		= c.get_any_binding (m_mgr->get_store_manager (), reg);
  	      if (sval)
*************** region_model::get_initial_value_for_glob
*** 1535,1545 ****
  }
  
  /* Get a value for REG, looking it up in the store, or otherwise falling
!    back to "initial" or "unknown" values.  */
  
  const svalue *
! region_model::get_store_value (const region *reg) const
  {
    /* Special-case: handle var_decls in the constant pool.  */
    if (const decl_region *decl_reg = reg->dyn_cast_decl_region ())
      if (const svalue *sval = decl_reg->maybe_get_constant_value (m_mgr))
--- 2360,2374 ----
  }
  
  /* Get a value for REG, looking it up in the store, or otherwise falling
!    back to "initial" or "unknown" values.
!    Use CTXT to report any warnings associated with reading from REG. */
  
  const svalue *
! region_model::get_store_value (const region *reg,
! 			       region_model_context *ctxt) const
  {
+   check_region_for_read (reg, ctxt);
+ 
    /* Special-case: handle var_decls in the constant pool.  */
    if (const decl_region *decl_reg = reg->dyn_cast_decl_region ())
      if (const svalue *sval = decl_reg->maybe_get_constant_value (m_mgr))
*************** region_model::deref_rvalue (const svalue
*** 1686,1692 ****
  		const poisoned_svalue *poisoned_sval
  		  = as_a <const poisoned_svalue *> (ptr_sval);
  		enum poison_kind pkind = poisoned_sval->get_poison_kind ();
! 		ctxt->warn (new poisoned_value_diagnostic (ptr, pkind));
  	      }
  	  }
        }
--- 2515,2521 ----
  		const poisoned_svalue *poisoned_sval
  		  = as_a <const poisoned_svalue *> (ptr_sval);
  		enum poison_kind pkind = poisoned_sval->get_poison_kind ();
! 		ctxt->warn (new poisoned_value_diagnostic (ptr, pkind, NULL));
  	      }
  	  }
        }
*************** region_model::deref_rvalue (const svalue
*** 1699,1751 ****
  /* Attempt to get BITS within any value of REG, as TYPE.
     In particular, extract values from compound_svalues for the case
     where there's a concrete binding at BITS.
!    Return an unknown svalue if we can't handle the given case.  */
  
  const svalue *
  region_model::get_rvalue_for_bits (tree type,
  				   const region *reg,
! 				   const bit_range &bits) const
  {
!   const svalue *sval = get_store_value (reg);
!   if (const compound_svalue *compound_sval = sval->dyn_cast_compound_svalue ())
!     {
!       const binding_map &map = compound_sval->get_map ();
!       binding_map result_map;
!       for (auto iter : map)
! 	{
! 	  const binding_key *key = iter.first;
! 	  if (const concrete_binding *conc_key
! 	      = key->dyn_cast_concrete_binding ())
! 	    {
! 	      /* Ignore concrete bindings outside BITS.  */
! 	      if (!conc_key->get_bit_range ().intersects_p (bits))
! 		continue;
! 	      if ((conc_key->get_start_bit_offset ()
! 		   < bits.get_start_bit_offset ())
! 		  || (conc_key->get_next_bit_offset ()
! 		      > bits.get_next_bit_offset ()))
! 		{
! 		  /* If we have any concrete keys that aren't fully within BITS,
! 		     then bail out.  */
! 		  return m_mgr->get_or_create_unknown_svalue (type);
! 		}
! 	      const concrete_binding *offset_conc_key
! 		    = m_mgr->get_store_manager ()->get_concrete_binding
! 			(conc_key->get_start_bit_offset ()
! 			   - bits.get_start_bit_offset (),
! 			 conc_key->get_size_in_bits (),
! 			 conc_key->get_kind ());
! 		  const svalue *sval = iter.second;
! 		  result_map.put (offset_conc_key, sval);
! 	    }
! 	  else
! 	    /* If we have any symbolic keys we can't get it as bits.  */
! 	    return m_mgr->get_or_create_unknown_svalue (type);
! 	}
!       return m_mgr->get_or_create_compound_svalue (type, result_map);
!     }
! 
!   return m_mgr->get_or_create_unknown_svalue (type);
  }
  
  /* A subclass of pending_diagnostic for complaining about writes to
--- 2528,2544 ----
  /* Attempt to get BITS within any value of REG, as TYPE.
     In particular, extract values from compound_svalues for the case
     where there's a concrete binding at BITS.
!    Return an unknown svalue if we can't handle the given case.
!    Use CTXT to report any warnings associated with reading from REG.  */
  
  const svalue *
  region_model::get_rvalue_for_bits (tree type,
  				   const region *reg,
! 				   const bit_range &bits,
! 				   region_model_context *ctxt) const
  {
!   const svalue *sval = get_store_value (reg, ctxt);
!   return m_mgr->get_or_create_bits_within (type, bits, sval);
  }
  
  /* A subclass of pending_diagnostic for complaining about writes to
*************** public:
*** 1770,1779 ****
  	    && m_decl == other.m_decl);
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
!     bool warned = warning_at (rich_loc, OPT_Wanalyzer_write_to_const,
! 			      "write to %<const%> object %qE", m_decl);
      if (warned)
        inform (DECL_SOURCE_LOCATION (m_decl), "declared here");
      return warned;
--- 2563,2592 ----
  	    && m_decl == other.m_decl);
    }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_write_to_const;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
!     auto_diagnostic_group d;
!     bool warned;
!     switch (m_reg->get_kind ())
!       {
!       default:
! 	warned = warning_at (rich_loc, get_controlling_option (),
! 			     "write to %<const%> object %qE", m_decl);
! 	break;
!       case RK_FUNCTION:
! 	warned = warning_at (rich_loc, get_controlling_option (),
! 			     "write to function %qE", m_decl);
! 	break;
!       case RK_LABEL:
! 	warned = warning_at (rich_loc, get_controlling_option (),
! 			     "write to label %qE", m_decl);
! 	break;
!       }
      if (warned)
        inform (DECL_SOURCE_LOCATION (m_decl), "declared here");
      return warned;
*************** public:
*** 1781,1787 ****
  
    label_text describe_final_event (const evdesc::final_event &ev) FINAL OVERRIDE
    {
!     return ev.formatted_print ("write to %<const%> object %qE here", m_decl);
    }
  
  private:
--- 2594,2608 ----
  
    label_text describe_final_event (const evdesc::final_event &ev) FINAL OVERRIDE
    {
!     switch (m_reg->get_kind ())
!       {
!       default:
! 	return ev.formatted_print ("write to %<const%> object %qE here", m_decl);
!       case RK_FUNCTION:
! 	return ev.formatted_print ("write to function %qE here", m_decl);
!       case RK_LABEL:
! 	return ev.formatted_print ("write to label %qE here", m_decl);
!       }
    }
  
  private:
*************** public:
*** 1810,1818 ****
      return m_reg == other.m_reg;
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
!     return warning_at (rich_loc, OPT_Wanalyzer_write_to_string_literal,
  		       "write to string literal");
      /* Ideally we would show the location of the STRING_CST as well,
         but it is not available at this point.  */
--- 2631,2644 ----
      return m_reg == other.m_reg;
    }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_write_to_string_literal;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
!     return warning_at (rich_loc, get_controlling_option (),
  		       "write to string literal");
      /* Ideally we would show the location of the STRING_CST as well,
         but it is not available at this point.  */
*************** region_model::check_for_writable_region
*** 1842,1847 ****
--- 2668,2687 ----
      {
      default:
        break;
+     case RK_FUNCTION:
+       {
+ 	const function_region *func_reg = as_a <const function_region *> (base_reg);
+ 	tree fndecl = func_reg->get_fndecl ();
+ 	ctxt->warn (new write_to_const_diagnostic (func_reg, fndecl));
+       }
+       break;
+     case RK_LABEL:
+       {
+ 	const label_region *label_reg = as_a <const label_region *> (base_reg);
+ 	tree label = label_reg->get_label ();
+ 	ctxt->warn (new write_to_const_diagnostic (label_reg, label));
+       }
+       break;
      case RK_DECL:
        {
  	const decl_region *decl_reg = as_a <const decl_region *> (base_reg);
*************** region_model::check_for_writable_region
*** 1861,1868 ****
      }
  }
  
  /* Set the value of the region given by LHS_REG to the value given
!    by RHS_SVAL.  */
  
  void
  region_model::set_value (const region *lhs_reg, const svalue *rhs_sval,
--- 2701,2793 ----
      }
  }
  
+ /* Get the capacity of REG in bytes.  */
+ 
+ const svalue *
+ region_model::get_capacity (const region *reg) const
+ {
+   switch (reg->get_kind ())
+     {
+     default:
+       break;
+     case RK_DECL:
+       {
+ 	const decl_region *decl_reg = as_a <const decl_region *> (reg);
+ 	tree decl = decl_reg->get_decl ();
+ 	if (TREE_CODE (decl) == SSA_NAME)
+ 	  {
+ 	    tree type = TREE_TYPE (decl);
+ 	    tree size = TYPE_SIZE (type);
+ 	    return get_rvalue (size, NULL);
+ 	  }
+ 	else
+ 	  {
+ 	    tree size = decl_init_size (decl, false);
+ 	    if (size)
+ 	      return get_rvalue (size, NULL);
+ 	  }
+       }
+       break;
+     case RK_SIZED:
+       /* Look through sized regions to get at the capacity
+ 	 of the underlying regions.  */
+       return get_capacity (reg->get_parent_region ());
+     }
+ 
+   if (const svalue *recorded = get_dynamic_extents (reg))
+     return recorded;
+ 
+   return m_mgr->get_or_create_unknown_svalue (sizetype);
+ }
+ 
+ /* If CTXT is non-NULL, use it to warn about any problems accessing REG,
+    using DIR to determine if this access is a read or write.  */
+ 
+ void
+ region_model::check_region_access (const region *reg,
+ 				   enum access_direction dir,
+ 				   region_model_context *ctxt) const
+ {
+   /* Fail gracefully if CTXT is NULL.  */
+   if (!ctxt)
+     return;
+ 
+   check_region_for_taint (reg, dir, ctxt);
+ 
+   switch (dir)
+     {
+     default:
+       gcc_unreachable ();
+     case DIR_READ:
+       /* Currently a no-op.  */
+       break;
+     case DIR_WRITE:
+       check_for_writable_region (reg, ctxt);
+       break;
+     }
+ }
+ 
+ /* If CTXT is non-NULL, use it to warn about any problems writing to REG.  */
+ 
+ void
+ region_model::check_region_for_write (const region *dest_reg,
+ 				      region_model_context *ctxt) const
+ {
+   check_region_access (dest_reg, DIR_WRITE, ctxt);
+ }
+ 
+ /* If CTXT is non-NULL, use it to warn about any problems reading from REG.  */
+ 
+ void
+ region_model::check_region_for_read (const region *src_reg,
+ 				     region_model_context *ctxt) const
+ {
+   check_region_access (src_reg, DIR_READ, ctxt);
+ }
+ 
  /* Set the value of the region given by LHS_REG to the value given
!    by RHS_SVAL.
!    Use CTXT to report any warnings associated with writing to LHS_REG.  */
  
  void
  region_model::set_value (const region *lhs_reg, const svalue *rhs_sval,
*************** region_model::set_value (const region *l
*** 1871,1880 ****
    gcc_assert (lhs_reg);
    gcc_assert (rhs_sval);
  
!   check_for_writable_region (lhs_reg, ctxt);
  
    m_store.set_value (m_mgr->get_store_manager(), lhs_reg, rhs_sval,
! 		     BK_direct, ctxt ? ctxt->get_uncertainty () : NULL);
  }
  
  /* Set the value of the region given by LHS to the value given by RHS.  */
--- 2796,2805 ----
    gcc_assert (lhs_reg);
    gcc_assert (rhs_sval);
  
!   check_region_for_write (lhs_reg, ctxt);
  
    m_store.set_value (m_mgr->get_store_manager(), lhs_reg, rhs_sval,
! 		     ctxt ? ctxt->get_uncertainty () : NULL);
  }
  
  /* Set the value of the region given by LHS to the value given by RHS.  */
*************** region_model::purge_region (const region
*** 1905,1910 ****
--- 2830,2843 ----
    m_store.purge_region (m_mgr->get_store_manager(), reg);
  }
  
+ /* Fill REG with SVAL.  */
+ 
+ void
+ region_model::fill_region (const region *reg, const svalue *sval)
+ {
+   m_store.fill_region (m_mgr->get_store_manager(), reg, sval);
+ }
+ 
  /* Zero-fill REG.  */
  
  void
*************** region_model::compare_initial_and_pointe
*** 2107,2112 ****
--- 3040,3162 ----
    return tristate::TS_UNKNOWN;
  }
  
+ /* Handle various constraints of the form:
+      LHS: ((bool)INNER_LHS INNER_OP INNER_RHS))
+      OP : == or !=
+      RHS: zero
+    and (with a cast):
+      LHS: CAST([long]int, ((bool)INNER_LHS INNER_OP INNER_RHS))
+      OP : == or !=
+      RHS: zero
+    by adding constraints for INNER_LHS INNEROP INNER_RHS.
+ 
+    Return true if this function can fully handle the constraint; if
+    so, add the implied constraint(s) and write true to *OUT if they
+    are consistent with existing constraints, or write false to *OUT
+    if they contradicts existing constraints.
+ 
+    Return false for cases that this function doeesn't know how to handle.
+ 
+    For example, if we're checking a stored conditional, we'll have
+    something like:
+      LHS: CAST(long int, (&HEAP_ALLOCATED_REGION(8)!=(int *)0B))
+      OP : NE_EXPR
+      RHS: zero
+    which this function can turn into an add_constraint of:
+      (&HEAP_ALLOCATED_REGION(8) != (int *)0B)
+ 
+    Similarly, optimized && and || conditionals lead to e.g.
+      if (p && q)
+    becoming gimple like this:
+      _1 = p_6 == 0B;
+      _2 = q_8 == 0B
+      _3 = _1 | _2
+    On the "_3 is false" branch we can have constraints of the form:
+      ((&HEAP_ALLOCATED_REGION(8)!=(int *)0B)
+       | (&HEAP_ALLOCATED_REGION(10)!=(int *)0B))
+      == 0
+    which implies that both _1 and _2 are false,
+    which this function can turn into a pair of add_constraints of
+      (&HEAP_ALLOCATED_REGION(8)!=(int *)0B)
+    and:
+      (&HEAP_ALLOCATED_REGION(10)!=(int *)0B).  */
+ 
+ bool
+ region_model::add_constraints_from_binop (const svalue *outer_lhs,
+ 					  enum tree_code outer_op,
+ 					  const svalue *outer_rhs,
+ 					  bool *out,
+ 					  region_model_context *ctxt)
+ {
+   while (const svalue *cast = outer_lhs->maybe_undo_cast ())
+     outer_lhs = cast;
+   const binop_svalue *binop_sval = outer_lhs->dyn_cast_binop_svalue ();
+   if (!binop_sval)
+     return false;
+   if (!outer_rhs->all_zeroes_p ())
+     return false;
+ 
+   const svalue *inner_lhs = binop_sval->get_arg0 ();
+   enum tree_code inner_op = binop_sval->get_op ();
+   const svalue *inner_rhs = binop_sval->get_arg1 ();
+ 
+   if (outer_op != NE_EXPR && outer_op != EQ_EXPR)
+     return false;
+ 
+   /* We have either
+      - "OUTER_LHS != false" (i.e. OUTER is true), or
+      - "OUTER_LHS == false" (i.e. OUTER is false).  */
+   bool is_true = outer_op == NE_EXPR;
+ 
+   switch (inner_op)
+     {
+     default:
+       return false;
+ 
+     case EQ_EXPR:
+     case NE_EXPR:
+       {
+ 	/* ...and "(inner_lhs OP inner_rhs) == 0"
+ 	   then (inner_lhs OP inner_rhs) must have the same
+ 	   logical value as LHS.  */
+ 	if (!is_true)
+ 	  inner_op = invert_tree_comparison (inner_op, false /* honor_nans */);
+ 	*out = add_constraint (inner_lhs, inner_op, inner_rhs, ctxt);
+ 	return true;
+       }
+       break;
+ 
+     case BIT_AND_EXPR:
+       if (is_true)
+ 	{
+ 	  /* ...and "(inner_lhs & inner_rhs) != 0"
+ 	     then both inner_lhs and inner_rhs must be true.  */
+ 	  const svalue *false_sval
+ 	    = m_mgr->get_or_create_constant_svalue (boolean_false_node);
+ 	  bool sat1 = add_constraint (inner_lhs, NE_EXPR, false_sval, ctxt);
+ 	  bool sat2 = add_constraint (inner_rhs, NE_EXPR, false_sval, ctxt);
+ 	  *out = sat1 && sat2;
+ 	  return true;
+ 	}
+       return false;
+ 
+     case BIT_IOR_EXPR:
+       if (!is_true)
+ 	{
+ 	  /* ...and "(inner_lhs | inner_rhs) == 0"
+ 	     i.e. "(inner_lhs | inner_rhs)" is false
+ 	     then both inner_lhs and inner_rhs must be false.  */
+ 	  const svalue *false_sval
+ 	    = m_mgr->get_or_create_constant_svalue (boolean_false_node);
+ 	  bool sat1 = add_constraint (inner_lhs, EQ_EXPR, false_sval, ctxt);
+ 	  bool sat2 = add_constraint (inner_rhs, EQ_EXPR, false_sval, ctxt);
+ 	  *out = sat1 && sat2;
+ 	  return true;
+ 	}
+       return false;
+     }
+ }
+ 
  /* Attempt to add the constraint "LHS OP RHS" to this region_model.
     If it is consistent with existing constraints, add it, and return true.
     Return false if it contradicts existing constraints.
*************** region_model::add_constraint (tree lhs,
*** 2124,2130 ****
    const svalue *lhs_sval = get_rvalue (lhs, ctxt);
    const svalue *rhs_sval = get_rvalue (rhs, ctxt);
  
!   tristate t_cond = eval_condition (lhs_sval, op, rhs_sval);
  
    /* If we already have the condition, do nothing.  */
    if (t_cond.is_true ())
--- 3174,3194 ----
    const svalue *lhs_sval = get_rvalue (lhs, ctxt);
    const svalue *rhs_sval = get_rvalue (rhs, ctxt);
  
!   return add_constraint (lhs_sval, op, rhs_sval, ctxt);
! }
! 
! /* Attempt to add the constraint "LHS OP RHS" to this region_model.
!    If it is consistent with existing constraints, add it, and return true.
!    Return false if it contradicts existing constraints.
!    Use CTXT for reporting any diagnostics associated with the accesses.  */
! 
! bool
! region_model::add_constraint (const svalue *lhs,
! 			      enum tree_code op,
! 			      const svalue *rhs,
! 			      region_model_context *ctxt)
! {
!   tristate t_cond = eval_condition (lhs, op, rhs);
  
    /* If we already have the condition, do nothing.  */
    if (t_cond.is_true ())
*************** region_model::add_constraint (tree lhs,
*** 2135,2144 ****
    if (t_cond.is_false ())
      return false;
  
!   /* Store the constraint.  */
!   m_constraints->add_constraint (lhs_sval, op, rhs_sval);
  
!   add_any_constraints_from_ssa_def_stmt (lhs, op, rhs, ctxt);
  
    /* Notify the context, if any.  This exists so that the state machines
       in a program_state can be notified about the condition, and so can
--- 3199,3211 ----
    if (t_cond.is_false ())
      return false;
  
!   bool out;
!   if (add_constraints_from_binop (lhs, op, rhs, &out, ctxt))
!     return out;
  
!   /* Attempt to store the constraint.  */
!   if (!m_constraints->add_constraint (lhs, op, rhs))
!     return false;
  
    /* Notify the context, if any.  This exists so that the state machines
       in a program_state can be notified about the condition, and so can
*************** region_model::add_constraint (tree lhs,
*** 2147,2152 ****
--- 3214,3226 ----
    if (ctxt)
      ctxt->on_condition (lhs, op, rhs);
  
+   /* If we have &REGION == NULL, then drop dynamic extents for REGION (for
+      the case where REGION is heap-allocated and thus could be NULL).  */
+   if (tree rhs_cst = rhs->maybe_get_constant ())
+     if (op == EQ_EXPR && zerop (rhs_cst))
+       if (const region_svalue *region_sval = lhs->dyn_cast_region_svalue ())
+ 	unset_dynamic_extents (region_sval->get_pointee ());
+ 
    return true;
  }
  
*************** region_model::add_constraint (tree lhs,
*** 2160,2300 ****
  {
    bool sat = add_constraint (lhs, op, rhs, ctxt);
    if (!sat && out)
!     *out = new rejected_constraint (*this, lhs, op, rhs);
    return sat;
  }
  
- /* Subroutine of region_model::add_constraint for handling optimized
-    && and || conditionals.
- 
-    If we have an SSA_NAME for a boolean compared against 0,
-    look at anything implied by the def stmt and call add_constraint
-    for it (which could recurse).
- 
-    For example, if we have
-       _1 = p_6 == 0B;
-       _2 = p_8 == 0B
-       _3 = _1 | _2
-     and add the constraint
-       (_3 == 0),
-     then the def stmt for _3 implies that _1 and _2 are both false,
-     and hence we can add the constraints:
-       p_6 != 0B
-       p_8 != 0B.  */
- 
- void
- region_model::add_any_constraints_from_ssa_def_stmt (tree lhs,
- 						     enum tree_code op,
- 						     tree rhs,
- 						     region_model_context *ctxt)
- {
-   if (TREE_CODE (lhs) != SSA_NAME)
-     return;
- 
-   if (!zerop (rhs))
-     return;
- 
-   if (op != NE_EXPR && op != EQ_EXPR)
-     return;
- 
-   gimple *def_stmt = SSA_NAME_DEF_STMT (lhs);
-   if (const gassign *assign = dyn_cast<gassign *> (def_stmt))
-     add_any_constraints_from_gassign (op, rhs, assign, ctxt);
-   else if (gcall *call = dyn_cast<gcall *> (def_stmt))
-     add_any_constraints_from_gcall (op, rhs, call, ctxt);
- }
- 
- /* Add any constraints for an SSA_NAME defined by ASSIGN
-    where the result OP RHS.  */
- 
- void
- region_model::add_any_constraints_from_gassign (enum tree_code op,
- 						tree rhs,
- 						const gassign *assign,
- 						region_model_context *ctxt)
- {
-   /* We have either
-      - "LHS != false" (i.e. LHS is true), or
-      - "LHS == false" (i.e. LHS is false).  */
-   bool is_true = op == NE_EXPR;
- 
-   enum tree_code rhs_code = gimple_assign_rhs_code (assign);
- 
-   switch (rhs_code)
-     {
-     default:
-       break;
- 
-     case NOP_EXPR:
-     case VIEW_CONVERT_EXPR:
-       {
- 	add_constraint (gimple_assign_rhs1 (assign), op, rhs, ctxt);
-       }
-       break;
- 
-     case BIT_AND_EXPR:
-       {
- 	if (is_true)
- 	  {
- 	    /* ...and "LHS == (rhs1 & rhs2) i.e. "(rhs1 & rhs2)" is true
- 	       then both rhs1 and rhs2 must be true.  */
- 	    tree rhs1 = gimple_assign_rhs1 (assign);
- 	    tree rhs2 = gimple_assign_rhs2 (assign);
- 	    add_constraint (rhs1, NE_EXPR, boolean_false_node, ctxt);
- 	    add_constraint (rhs2, NE_EXPR, boolean_false_node, ctxt);
- 	  }
-       }
-       break;
- 
-     case BIT_IOR_EXPR:
-       {
- 	if (!is_true)
- 	  {
- 	    /* ...and "LHS == (rhs1 | rhs2)
- 	       i.e. "(rhs1 | rhs2)" is false
- 	       then both rhs1 and rhs2 must be false.  */
- 	    tree rhs1 = gimple_assign_rhs1 (assign);
- 	    tree rhs2 = gimple_assign_rhs2 (assign);
- 	    add_constraint (rhs1, EQ_EXPR, boolean_false_node, ctxt);
- 	    add_constraint (rhs2, EQ_EXPR, boolean_false_node, ctxt);
- 	  }
-       }
-       break;
- 
-     case EQ_EXPR:
-     case NE_EXPR:
-       {
- 	/* ...and "LHS == (rhs1 OP rhs2)"
- 	   then rhs1 OP rhs2 must have the same logical value as LHS.  */
- 	tree rhs1 = gimple_assign_rhs1 (assign);
- 	tree rhs2 = gimple_assign_rhs2 (assign);
- 	if (!is_true)
- 	  rhs_code
- 	    = invert_tree_comparison (rhs_code, false /* honor_nans */);
- 	add_constraint (rhs1, rhs_code, rhs2, ctxt);
-       }
-       break;
-     }
- }
- 
- /* Add any constraints for an SSA_NAME defined by CALL
-    where the result OP RHS.  */
- 
- void
- region_model::add_any_constraints_from_gcall (enum tree_code op,
- 					      tree rhs,
- 					      const gcall *call,
- 					      region_model_context *ctxt)
- {
-   if (gimple_call_builtin_p (call, BUILT_IN_EXPECT)
-       || gimple_call_builtin_p (call, BUILT_IN_EXPECT_WITH_PROBABILITY)
-       || gimple_call_internal_p (call, IFN_BUILTIN_EXPECT))
-     {
-       /* __builtin_expect's return value is its initial argument.  */
-       add_constraint (gimple_call_arg (call, 0), op, rhs, ctxt);
-     }
- }
- 
  /* Determine what is known about the condition "LHS OP RHS" within
     this model.
     Use CTXT for reporting any diagnostics associated with the accesses.  */
--- 3234,3243 ----
  {
    bool sat = add_constraint (lhs, op, rhs, ctxt);
    if (!sat && out)
!     *out = new rejected_op_constraint (*this, lhs, op, rhs);
    return sat;
  }
  
  /* Determine what is known about the condition "LHS OP RHS" within
     this model.
     Use CTXT for reporting any diagnostics associated with the accesses.  */
*************** region_model::get_representative_path_va
*** 2373,2378 ****
--- 3316,3332 ----
  			   parent_pv.m_stack_depth);
      }
  
+   /* Handle binops.  */
+   if (const binop_svalue *binop_sval = sval->dyn_cast_binop_svalue ())
+     if (path_var lhs_pv
+ 	= get_representative_path_var (binop_sval->get_arg0 (), visited))
+       if (path_var rhs_pv
+ 	  = get_representative_path_var (binop_sval->get_arg1 (), visited))
+ 	return path_var (build2 (binop_sval->get_op (),
+ 				 sval->get_type (),
+ 				 lhs_pv.m_tree, rhs_pv.m_tree),
+ 			 lhs_pv.m_stack_depth);
+ 
    if (pvs.length () < 1)
      return path_var (NULL_TREE, 0);
  
*************** region_model::get_representative_path_va
*** 2540,2545 ****
--- 3494,3502 ----
  			 parent_pv.m_stack_depth);
        }
  
+     case RK_SIZED:
+       return path_var (NULL_TREE, 0);
+ 
      case RK_CAST:
        {
  	path_var parent_pv
*************** region_model::update_for_phis (const sup
*** 2602,2607 ****
--- 3559,3568 ----
  {
    gcc_assert (last_cfg_superedge);
  
+   /* Copy this state and pass it to handle_phi so that all of the phi stmts
+      are effectively handled simultaneously.  */
+   const region_model old_state (*this);
+ 
    for (gphi_iterator gpi = const_cast<supernode *>(snode)->start_phis ();
         !gsi_end_p (gpi); gsi_next (&gpi))
      {
*************** region_model::update_for_phis (const sup
*** 2610,2617 ****
        tree src = last_cfg_superedge->get_phi_arg (phi);
        tree lhs = gimple_phi_result (phi);
  
!       /* Update next_state based on phi.  */
!       handle_phi (phi, lhs, src, ctxt);
      }
  }
  
--- 3571,3578 ----
        tree src = last_cfg_superedge->get_phi_arg (phi);
        tree lhs = gimple_phi_result (phi);
  
!       /* Update next_state based on phi and old_state.  */
!       handle_phi (phi, lhs, src, old_state, ctxt);
      }
  }
  
*************** region_model::maybe_update_for_edge (con
*** 2705,2716 ****
     caller's frame.  */
  
  void
! region_model::update_for_call_superedge (const call_superedge &call_edge,
! 					 region_model_context *ctxt)
  {
    /* Build a vec of argument svalues, using the current top
       frame for resolving tree expressions.  */
-   const gcall *call_stmt = call_edge.get_call_stmt ();
    auto_vec<const svalue *> arg_svals (gimple_call_num_args (call_stmt));
  
    for (unsigned i = 0; i < gimple_call_num_args (call_stmt); i++)
--- 3666,3677 ----
     caller's frame.  */
  
  void
! region_model::update_for_gcall (const gcall *call_stmt,
! 				region_model_context *ctxt,
! 				function *callee)
  {
    /* Build a vec of argument svalues, using the current top
       frame for resolving tree expressions.  */
    auto_vec<const svalue *> arg_svals (gimple_call_num_args (call_stmt));
  
    for (unsigned i = 0; i < gimple_call_num_args (call_stmt); i++)
*************** region_model::update_for_call_superedge
*** 2719,2749 ****
        arg_svals.quick_push (get_rvalue (arg, ctxt));
      }
  
!   push_frame (call_edge.get_callee_function (), &arg_svals, ctxt);
  }
  
  /* Pop the top-most frame_region from the stack, and copy the return
     region's values (if any) into the region for the lvalue of the LHS of
     the call (if any).  */
  void
  region_model::update_for_return_superedge (const return_superedge &return_edge,
  					   region_model_context *ctxt)
  {
-   /* Get the region for the result of the call, within the caller frame.  */
-   const region *result_dst_reg = NULL;
    const gcall *call_stmt = return_edge.get_call_stmt ();
!   tree lhs = gimple_call_lhs (call_stmt);
!   if (lhs)
!     {
!       /* Normally we access the top-level frame, which is:
! 	   path_var (expr, get_stack_depth () - 1)
! 	 whereas here we need the caller frame, hence "- 2" here.  */
!       gcc_assert (get_stack_depth () >= 2);
!       result_dst_reg = get_lvalue (path_var (lhs, get_stack_depth () - 2),
! 				   ctxt);
!     }
! 
!   pop_frame (result_dst_reg, NULL, ctxt);
  }
  
  /* Update this region_model with a summary of the effect of calling
--- 3680,3730 ----
        arg_svals.quick_push (get_rvalue (arg, ctxt));
      }
  
!   if(!callee)
!   {
!     /* Get the function * from the gcall.  */
!     tree fn_decl = get_fndecl_for_call (call_stmt,ctxt);
!     callee = DECL_STRUCT_FUNCTION (fn_decl);
!   }
! 
!   push_frame (callee, &arg_svals, ctxt);
  }
  
  /* Pop the top-most frame_region from the stack, and copy the return
     region's values (if any) into the region for the lvalue of the LHS of
     the call (if any).  */
+ 
+ void
+ region_model::update_for_return_gcall (const gcall *call_stmt,
+ 				       region_model_context *ctxt)
+ {
+   /* Get the lvalue for the result of the call, passing it to pop_frame,
+      so that pop_frame can determine the region with respect to the
+      *caller* frame.  */
+   tree lhs = gimple_call_lhs (call_stmt);
+   pop_frame (lhs, NULL, ctxt);
+ }
+ 
+ /* Extract calling information from the superedge and update the model for the 
+    call  */
+ 
+ void
+ region_model::update_for_call_superedge (const call_superedge &call_edge,
+ 					 region_model_context *ctxt)
+ {
+   const gcall *call_stmt = call_edge.get_call_stmt ();
+   update_for_gcall (call_stmt, ctxt, call_edge.get_callee_function ());
+ }
+ 
+ /* Extract calling information from the return superedge and update the model 
+    for the returning call */
+ 
  void
  region_model::update_for_return_superedge (const return_superedge &return_edge,
  					   region_model_context *ctxt)
  {
    const gcall *call_stmt = return_edge.get_call_stmt ();
!   update_for_return_gcall (call_stmt, ctxt);
  }
  
  /* Update this region_model with a summary of the effect of calling
*************** region_model::apply_constraints_for_gswi
*** 2811,2866 ****
  					     region_model_context *ctxt,
  					     rejected_constraint **out)
  {
    tree index  = gimple_switch_index (switch_stmt);
!   tree case_label = edge.get_case_label ();
!   gcc_assert (TREE_CODE (case_label) == CASE_LABEL_EXPR);
!   tree lower_bound = CASE_LOW (case_label);
!   tree upper_bound = CASE_HIGH (case_label);
!   if (lower_bound)
!     {
!       if (upper_bound)
! 	{
! 	  /* Range.  */
! 	  if (!add_constraint (index, GE_EXPR, lower_bound, ctxt, out))
! 	    return false;
! 	  return add_constraint (index, LE_EXPR, upper_bound, ctxt, out);
! 	}
!       else
! 	/* Single-value.  */
! 	return add_constraint (index, EQ_EXPR, lower_bound, ctxt, out);
!     }
!   else
!     {
!       /* The default case.
! 	 Add exclusions based on the other cases.  */
!       for (unsigned other_idx = 1;
! 	   other_idx < gimple_switch_num_labels (switch_stmt);
! 	   other_idx++)
! 	{
! 	  tree other_label = gimple_switch_label (switch_stmt,
! 						  other_idx);
! 	  tree other_lower_bound = CASE_LOW (other_label);
! 	  tree other_upper_bound = CASE_HIGH (other_label);
! 	  gcc_assert (other_lower_bound);
! 	  if (other_upper_bound)
! 	    {
! 	      /* Exclude this range-valued case.
! 		 For now, we just exclude the boundary values.
! 		 TODO: exclude the values within the region.  */
! 	      if (!add_constraint (index, NE_EXPR, other_lower_bound,
! 				   ctxt, out))
! 		return false;
! 	      if (!add_constraint (index, NE_EXPR, other_upper_bound,
! 				   ctxt, out))
! 		return false;
! 	    }
! 	  else
! 	    /* Exclude this single-valued case.  */
! 	    if (!add_constraint (index, NE_EXPR, other_lower_bound, ctxt, out))
! 	      return false;
! 	}
!       return true;
!     }
  }
  
  /* Apply any constraints due to an exception being thrown at LAST_STMT.
--- 3792,3806 ----
  					     region_model_context *ctxt,
  					     rejected_constraint **out)
  {
+   bounded_ranges_manager *ranges_mgr = get_range_manager ();
+   const bounded_ranges *all_cases_ranges
+     = ranges_mgr->get_or_create_ranges_for_switch (&edge, switch_stmt);
    tree index  = gimple_switch_index (switch_stmt);
!   const svalue *index_sval = get_rvalue (index, ctxt);
!   bool sat = m_constraints->add_bounded_ranges (index_sval, all_cases_ranges);
!   if (!sat && out)
!     *out = new rejected_ranges_constraint (*this, index, all_cases_ranges);
!   return sat;
  }
  
  /* Apply any constraints due to an exception being thrown at LAST_STMT.
*************** region_model::get_current_function () co
*** 2981,2988 ****
  
  /* Pop the topmost frame_region from this region_model's stack;
  
!    If RESULT_DST_REG is non-null, copy any return value from the frame
!    into RESULT_DST_REG's region.
     If OUT_RESULT is non-null, copy any return value from the frame
     into *OUT_RESULT.
  
--- 3921,3929 ----
  
  /* Pop the topmost frame_region from this region_model's stack;
  
!    If RESULT_LVALUE is non-null, copy any return value from the frame
!    into the corresponding region (evaluated with respect to the *caller*
!    frame, rather than the called frame).
     If OUT_RESULT is non-null, copy any return value from the frame
     into *OUT_RESULT.
  
*************** region_model::get_current_function () co
*** 2991,2997 ****
     POISON_KIND_POPPED_STACK svalues.  */
  
  void
! region_model::pop_frame (const region *result_dst_reg,
  			 const svalue **out_result,
  			 region_model_context *ctxt)
  {
--- 3932,3938 ----
     POISON_KIND_POPPED_STACK svalues.  */
  
  void
! region_model::pop_frame (tree result_lvalue,
  			 const svalue **out_result,
  			 region_model_context *ctxt)
  {
*************** region_model::pop_frame (const region *r
*** 3001,3022 ****
    const frame_region *frame_reg = m_current_frame;
    tree fndecl = m_current_frame->get_function ()->decl;
    tree result = DECL_RESULT (fndecl);
    if (result && TREE_TYPE (result) != void_type_node)
      {
!       if (result_dst_reg)
! 	{
! 	  /* Copy the result to RESULT_DST_REG.  */
! 	  copy_region (result_dst_reg,
! 		       get_lvalue (result, ctxt),
! 		       ctxt);
! 	}
        if (out_result)
! 	*out_result = get_rvalue (result, ctxt);
      }
  
    /* Pop the frame.  */
    m_current_frame = m_current_frame->get_calling_frame ();
  
    unbind_region_and_descendents (frame_reg,POISON_KIND_POPPED_STACK);
  }
  
--- 3942,3966 ----
    const frame_region *frame_reg = m_current_frame;
    tree fndecl = m_current_frame->get_function ()->decl;
    tree result = DECL_RESULT (fndecl);
+   const svalue *retval = NULL;
    if (result && TREE_TYPE (result) != void_type_node)
      {
!       retval = get_rvalue (result, ctxt);
        if (out_result)
! 	*out_result = retval;
      }
  
    /* Pop the frame.  */
    m_current_frame = m_current_frame->get_calling_frame ();
  
+   if (result_lvalue && retval)
+     {
+       /* Compute result_dst_reg using RESULT_LVALUE *after* popping
+ 	 the frame, but before poisoning pointers into the old frame.  */
+       const region *result_dst_reg = get_lvalue (result_lvalue, ctxt);
+       set_value (result_dst_reg, retval, ctxt);
+     }
+ 
    unbind_region_and_descendents (frame_reg,POISON_KIND_POPPED_STACK);
  }
  
*************** region_model::get_frame_at_index (int in
*** 3052,3058 ****
  
  /* Unbind svalues for any regions in REG and below.
     Find any pointers to such regions; convert them to
!    poisoned values of kind PKIND.  */
  
  void
  region_model::unbind_region_and_descendents (const region *reg,
--- 3996,4003 ----
  
  /* Unbind svalues for any regions in REG and below.
     Find any pointers to such regions; convert them to
!    poisoned values of kind PKIND.
!    Also purge any dynamic extents.  */
  
  void
  region_model::unbind_region_and_descendents (const region *reg,
*************** region_model::unbind_region_and_descende
*** 3073,3078 ****
--- 4018,4032 ----
  
    /* Find any pointers to REG or its descendents; convert to poisoned.  */
    poison_any_pointers_to_descendents (reg, pkind);
+ 
+   /* Purge dynamic extents of any base regions in REG and below
+      (e.g. VLAs and alloca stack regions).  */
+   for (auto iter : m_dynamic_extents)
+     {
+       const region *iter_reg = iter.first;
+       if (iter_reg->descendent_of_p (reg))
+ 	unset_dynamic_extents (iter_reg);
+     }
  }
  
  /* Implementation of BindingVisitor.
*************** region_model::poison_any_pointers_to_des
*** 3130,3136 ****
  bool
  region_model::can_merge_with_p (const region_model &other_model,
  				const program_point &point,
! 				region_model *out_model) const
  {
    gcc_assert (out_model);
    gcc_assert (m_mgr == other_model.m_mgr);
--- 4084,4093 ----
  bool
  region_model::can_merge_with_p (const region_model &other_model,
  				const program_point &point,
! 				region_model *out_model,
! 				const extrinsic_state *ext_state,
! 				const program_state *state_a,
! 				const program_state *state_b) const
  {
    gcc_assert (out_model);
    gcc_assert (m_mgr == other_model.m_mgr);
*************** region_model::can_merge_with_p (const re
*** 3140,3152 ****
      return false;
    out_model->m_current_frame = m_current_frame;
  
!   model_merger m (this, &other_model, point, out_model);
  
    if (!store::can_merge_p (&m_store, &other_model.m_store,
  			   &out_model->m_store, m_mgr->get_store_manager (),
  			   &m))
      return false;
  
    /* Merge constraints.  */
    constraint_manager::merge (*m_constraints,
  			      *other_model.m_constraints,
--- 4097,4114 ----
      return false;
    out_model->m_current_frame = m_current_frame;
  
!   model_merger m (this, &other_model, point, out_model,
! 		  ext_state, state_a, state_b);
  
    if (!store::can_merge_p (&m_store, &other_model.m_store,
  			   &out_model->m_store, m_mgr->get_store_manager (),
  			   &m))
      return false;
  
+   if (!m_dynamic_extents.can_merge_with_p (other_model.m_dynamic_extents,
+ 					   &out_model->m_dynamic_extents))
+     return false;
+ 
    /* Merge constraints.  */
    constraint_manager::merge (*m_constraints,
  			      *other_model.m_constraints,
*************** region_model::get_fndecl_for_call (const
*** 3187,3255 ****
  
  /* Would be much simpler to use a lambda here, if it were supported.  */
  
! struct append_ssa_names_cb_data
  {
    const region_model *model;
    auto_vec<const decl_region *> *out;
  };
  
! /* Populate *OUT with all decl_regions for SSA names in the current
     frame that have clusters within the store.  */
  
  void
  region_model::
! get_ssa_name_regions_for_current_frame (auto_vec<const decl_region *> *out)
!   const
  {
!   append_ssa_names_cb_data data;
    data.model = this;
    data.out = out;
!   m_store.for_each_cluster (append_ssa_names_cb, &data);
  }
  
! /* Implementation detail of get_ssa_name_regions_for_current_frame.  */
  
  void
! region_model::append_ssa_names_cb (const region *base_reg,
! 				   append_ssa_names_cb_data *cb_data)
  {
    if (base_reg->get_parent_region () != cb_data->model->m_current_frame)
      return;
    if (const decl_region *decl_reg = base_reg->dyn_cast_decl_region ())
!     {
!       if (TREE_CODE (decl_reg->get_decl ()) == SSA_NAME)
! 	cb_data->out->safe_push (decl_reg);
!     }
  }
  
! /* Return a new region describing a heap-allocated block of memory.  */
  
  const region *
! region_model::create_region_for_heap_alloc (const svalue *size_in_bytes)
  {
    const region *reg = m_mgr->create_region_for_heap_alloc ();
!   record_dynamic_extents (reg, size_in_bytes);
    return reg;
  }
  
  /* Return a new region describing a block of memory allocated within the
!    current frame.  */
  
  const region *
! region_model::create_region_for_alloca (const svalue *size_in_bytes)
  {
    const region *reg = m_mgr->create_region_for_alloca (m_current_frame);
!   record_dynamic_extents (reg, size_in_bytes);
    return reg;
  }
  
! /* Placeholder hook for recording that the size of REG is SIZE_IN_BYTES.
!    Currently does nothing.  */
  
  void
! region_model::
! record_dynamic_extents (const region *reg ATTRIBUTE_UNUSED,
! 			const svalue *size_in_bytes ATTRIBUTE_UNUSED)
  {
  }
  
--- 4149,4262 ----
  
  /* Would be much simpler to use a lambda here, if it were supported.  */
  
! struct append_regions_cb_data
  {
    const region_model *model;
    auto_vec<const decl_region *> *out;
  };
  
! /* Populate *OUT with all decl_regions in the current
     frame that have clusters within the store.  */
  
  void
  region_model::
! get_regions_for_current_frame (auto_vec<const decl_region *> *out) const
  {
!   append_regions_cb_data data;
    data.model = this;
    data.out = out;
!   m_store.for_each_cluster (append_regions_cb, &data);
  }
  
! /* Implementation detail of get_regions_for_current_frame.  */
  
  void
! region_model::append_regions_cb (const region *base_reg,
! 				 append_regions_cb_data *cb_data)
  {
    if (base_reg->get_parent_region () != cb_data->model->m_current_frame)
      return;
    if (const decl_region *decl_reg = base_reg->dyn_cast_decl_region ())
!     cb_data->out->safe_push (decl_reg);
  }
  
! /* Return a new region describing a heap-allocated block of memory.
!    Use CTXT to complain about tainted sizes.  */
  
  const region *
! region_model::create_region_for_heap_alloc (const svalue *size_in_bytes,
! 					    region_model_context *ctxt)
  {
    const region *reg = m_mgr->create_region_for_heap_alloc ();
!   if (compat_types_p (size_in_bytes->get_type (), size_type_node))
!     set_dynamic_extents (reg, size_in_bytes, ctxt);
    return reg;
  }
  
  /* Return a new region describing a block of memory allocated within the
!    current frame.
!    Use CTXT to complain about tainted sizes.  */
  
  const region *
! region_model::create_region_for_alloca (const svalue *size_in_bytes,
! 					region_model_context *ctxt)
  {
    const region *reg = m_mgr->create_region_for_alloca (m_current_frame);
!   if (compat_types_p (size_in_bytes->get_type (), size_type_node))
!     set_dynamic_extents (reg, size_in_bytes, ctxt);
    return reg;
  }
  
! /* Record that the size of REG is SIZE_IN_BYTES.
!    Use CTXT to complain about tainted sizes.  */
  
  void
! region_model::set_dynamic_extents (const region *reg,
! 				   const svalue *size_in_bytes,
! 				   region_model_context *ctxt)
! {
!   assert_compat_types (size_in_bytes->get_type (), size_type_node);
!   if (ctxt)
!     check_dynamic_size_for_taint (reg->get_memory_space (), size_in_bytes,
! 				  ctxt);
!   m_dynamic_extents.put (reg, size_in_bytes);
! }
! 
! /* Get the recording of REG in bytes, or NULL if no dynamic size was
!    recorded.  */
! 
! const svalue *
! region_model::get_dynamic_extents (const region *reg) const
! {
!   if (const svalue * const *slot = m_dynamic_extents.get (reg))
!     return *slot;
!   return NULL;
! }
! 
! /* Unset any recorded dynamic size of REG.  */
! 
! void
! region_model::unset_dynamic_extents (const region *reg)
! {
!   m_dynamic_extents.remove (reg);
! }
! 
! /* class noop_region_model_context : public region_model_context.  */
! 
! void
! noop_region_model_context::add_note (pending_note *pn)
! {
!   delete pn;
! }
! 
! void
! noop_region_model_context::bifurcate (custom_edge_info *info)
! {
!   delete info;
! }
! 
! void
! noop_region_model_context::terminate_path ()
  {
  }
  
*************** model_merger::dump (bool simple) const
*** 3297,3302 ****
--- 4304,4333 ----
    dump (stderr, simple);
  }
  
+ /* Return true if it's OK to merge SVAL with other svalues.  */
+ 
+ bool
+ model_merger::mergeable_svalue_p (const svalue *sval) const
+ {
+   if (m_ext_state)
+     {
+       /* Reject merging svalues that have non-purgable sm-state,
+ 	 to avoid falsely reporting memory leaks by merging them
+ 	 with something else.  For example, given a local var "p",
+ 	 reject the merger of a:
+ 	   store_a mapping "p" to a malloc-ed ptr
+ 	 with:
+ 	   store_b mapping "p" to a NULL ptr.  */
+       if (m_state_a)
+ 	if (!m_state_a->can_purge_p (*m_ext_state, sval))
+ 	  return false;
+       if (m_state_b)
+ 	if (!m_state_b->can_purge_p (*m_ext_state, sval))
+ 	  return false;
+     }
+   return true;
+ }
+ 
  } // namespace ana
  
  /* Dump RMODEL fully to stderr (i.e. without summarization).  */
*************** debug (const region_model &rmodel)
*** 3307,3316 ****
    rmodel.dump (false);
  }
  
! /* struct rejected_constraint.  */
  
  void
! rejected_constraint::dump_to_pp (pretty_printer *pp) const
  {
    region_model m (m_model);
    const svalue *lhs_sval = m.get_rvalue (m_lhs, NULL);
--- 4338,4347 ----
    rmodel.dump (false);
  }
  
! /* class rejected_op_constraint : public rejected_constraint.  */
  
  void
! rejected_op_constraint::dump_to_pp (pretty_printer *pp) const
  {
    region_model m (m_model);
    const svalue *lhs_sval = m.get_rvalue (m_lhs, NULL);
*************** rejected_constraint::dump_to_pp (pretty_
*** 3320,3327 ****
--- 4351,4377 ----
    rhs_sval->dump_to_pp (pp, true);
  }
  
+ /* class rejected_ranges_constraint : public rejected_constraint.  */
+ 
+ void
+ rejected_ranges_constraint::dump_to_pp (pretty_printer *pp) const
+ {
+   region_model m (m_model);
+   const svalue *sval = m.get_rvalue (m_expr, NULL);
+   sval->dump_to_pp (pp, true);
+   pp_string (pp, " in ");
+   m_ranges->dump_to_pp (pp, true);
+ }
+ 
  /* class engine.  */
  
+ /* engine's ctor.  */
+ 
+ engine::engine (const supergraph *sg, logger *logger)
+ : m_sg (sg), m_mgr (logger)
+ {
+ }
+ 
  /* Dump the managed objects by class to LOGGER, and the per-class totals.  */
  
  void
*************** test_binop_svalue_folding ()
*** 3905,3910 ****
--- 4955,4993 ----
      = mgr.get_or_create_binop (integer_type_node, PLUS_EXPR,
  			       x_init_plus_one, cst_sval[1]);
    ASSERT_EQ (x_init_plus_one_plus_one, x_init_plus_two);
+ 
+   /* Verify various binops on booleans.  */
+   {
+     const svalue *sval_true = mgr.get_or_create_int_cst (boolean_type_node, 1);
+     const svalue *sval_false = mgr.get_or_create_int_cst (boolean_type_node, 0);
+     const svalue *sval_unknown
+       = mgr.get_or_create_unknown_svalue (boolean_type_node);
+     const placeholder_svalue sval_placeholder (boolean_type_node, "v");
+     for (auto op : {BIT_IOR_EXPR, TRUTH_OR_EXPR})
+       {
+ 	ASSERT_EQ (mgr.get_or_create_binop (boolean_type_node, op,
+ 					    sval_true, sval_unknown),
+ 		   sval_true);
+ 	ASSERT_EQ (mgr.get_or_create_binop (boolean_type_node, op,
+ 					    sval_false, sval_unknown),
+ 		   sval_unknown);
+ 	ASSERT_EQ (mgr.get_or_create_binop (boolean_type_node, op,
+ 					    sval_false, &sval_placeholder),
+ 		   &sval_placeholder);
+       }
+     for (auto op : {BIT_AND_EXPR, TRUTH_AND_EXPR})
+       {
+ 	ASSERT_EQ (mgr.get_or_create_binop (boolean_type_node, op,
+ 					    sval_false, sval_unknown),
+ 		   sval_false);
+ 	ASSERT_EQ (mgr.get_or_create_binop (boolean_type_node, op,
+ 					    sval_true, sval_unknown),
+ 		   sval_unknown);
+ 	ASSERT_EQ (mgr.get_or_create_binop (boolean_type_node, op,
+ 					    sval_true, &sval_placeholder),
+ 		   &sval_placeholder);
+       }
+   }
  }
  
  /* Verify that sub_svalues are folded as expected.  */
*************** test_descendent_of_p ()
*** 3958,3963 ****
--- 5041,5063 ----
    ASSERT_TRUE (cast_reg->descendent_of_p (x_reg));
  }
  
+ /* Verify that bit_range_region works as expected.  */
+ 
+ static void
+ test_bit_range_regions ()
+ {
+   tree x = build_global_decl ("x", integer_type_node);
+   region_model_manager mgr;
+   const region *x_reg = mgr.get_region_for_global (x);
+   const region *byte0
+     = mgr.get_bit_range (x_reg, char_type_node, bit_range (0, 8));
+   const region *byte1
+     = mgr.get_bit_range (x_reg, char_type_node, bit_range (8, 8));
+   ASSERT_TRUE (byte0->descendent_of_p (x_reg));
+   ASSERT_TRUE (byte1->descendent_of_p (x_reg));
+   ASSERT_NE (byte0, byte1);
+ }
+ 
  /* Verify that simple assignments work as expected.  */
  
  static void
*************** test_compound_assignment ()
*** 4006,4013 ****
    model.set_value (c_y, int_m3, NULL);
  
    /* Copy c to d.  */
!   model.copy_region (model.get_lvalue (d, NULL), model.get_lvalue (c, NULL),
! 		     NULL);
    /* Check that the fields have the same svalues.  */
    ASSERT_EQ (model.get_rvalue (c_x, NULL), model.get_rvalue (d_x, NULL));
    ASSERT_EQ (model.get_rvalue (c_y, NULL), model.get_rvalue (d_y, NULL));
--- 5106,5114 ----
    model.set_value (c_y, int_m3, NULL);
  
    /* Copy c to d.  */
!   const svalue *sval = model.get_rvalue (c, NULL);
!   model.set_value (model.get_lvalue (d, NULL), sval, NULL);
! 
    /* Check that the fields have the same svalues.  */
    ASSERT_EQ (model.get_rvalue (c_x, NULL), model.get_rvalue (d_x, NULL));
    ASSERT_EQ (model.get_rvalue (c_y, NULL), model.get_rvalue (d_y, NULL));
*************** test_stack_frames ()
*** 4038,4053 ****
--- 5139,5158 ----
    tree a = build_decl (UNKNOWN_LOCATION, PARM_DECL,
  		       get_identifier ("a"),
  		       integer_type_node);
+   DECL_CONTEXT (a) = parent_fndecl;
    tree b = build_decl (UNKNOWN_LOCATION, PARM_DECL,
  		       get_identifier ("b"),
  		       integer_type_node);
+   DECL_CONTEXT (b) = parent_fndecl;
    /* "x" and "y" in a child frame.  */
    tree x = build_decl (UNKNOWN_LOCATION, PARM_DECL,
  		       get_identifier ("x"),
  		       integer_type_node);
+   DECL_CONTEXT (x) = child_fndecl;
    tree y = build_decl (UNKNOWN_LOCATION, PARM_DECL,
  		       get_identifier ("y"),
  		       integer_type_node);
+   DECL_CONTEXT (y) = child_fndecl;
  
    /* "p" global.  */
    tree p = build_global_decl ("p", ptr_type_node);
*************** test_stack_frames ()
*** 4115,4121 ****
  
    /* Verify that p (which was pointing at the local "x" in the popped
       frame) has been poisoned.  */
!   const svalue *new_p_sval = model.get_rvalue (p, &ctxt);
    ASSERT_EQ (new_p_sval->get_kind (), SK_POISONED);
    ASSERT_EQ (new_p_sval->dyn_cast_poisoned_svalue ()->get_poison_kind (),
  	     POISON_KIND_POPPED_STACK);
--- 5220,5226 ----
  
    /* Verify that p (which was pointing at the local "x" in the popped
       frame) has been poisoned.  */
!   const svalue *new_p_sval = model.get_rvalue (p, NULL);
    ASSERT_EQ (new_p_sval->get_kind (), SK_POISONED);
    ASSERT_EQ (new_p_sval->dyn_cast_poisoned_svalue ()->get_poison_kind (),
  	     POISON_KIND_POPPED_STACK);
*************** test_stack_frames ()
*** 4124,4130 ****
       renumbering.  */
    const svalue *new_q_sval = model.get_rvalue (q, &ctxt);
    ASSERT_EQ (new_q_sval->get_kind (), SK_REGION);
!   ASSERT_EQ (new_q_sval->dyn_cast_region_svalue ()->get_pointee (),
  	     model.get_lvalue (p, &ctxt));
  
    /* Verify that top of stack has been updated.  */
--- 5229,5235 ----
       renumbering.  */
    const svalue *new_q_sval = model.get_rvalue (q, &ctxt);
    ASSERT_EQ (new_q_sval->get_kind (), SK_REGION);
!   ASSERT_EQ (new_q_sval->maybe_get_region (),
  	     model.get_lvalue (p, &ctxt));
  
    /* Verify that top of stack has been updated.  */
*************** test_get_representative_path_var ()
*** 4158,4163 ****
--- 5263,5269 ----
    tree n = build_decl (UNKNOWN_LOCATION, PARM_DECL,
  		       get_identifier ("n"),
  		       integer_type_node);
+   DECL_CONTEXT (n) = fndecl;
  
    region_model_manager mgr;
    test_region_model_context ctxt;
*************** test_canonicalization_4 ()
*** 4310,4318 ****
    region_model_manager mgr;
    region_model model (&mgr);
  
!   unsigned i;
!   tree cst;
!   FOR_EACH_VEC_ELT (csts, i, cst)
      model.get_rvalue (cst, NULL);
  
    model.canonicalize ();
--- 5416,5422 ----
    region_model_manager mgr;
    region_model model (&mgr);
  
!   for (tree cst : csts)
      model.get_rvalue (cst, NULL);
  
    model.canonicalize ();
*************** test_state_merging ()
*** 4372,4383 ****
--- 5476,5489 ----
    tree a = build_decl (UNKNOWN_LOCATION, PARM_DECL,
  		       get_identifier ("a"),
  		       integer_type_node);
+   DECL_CONTEXT (a) = test_fndecl;
    tree addr_of_a = build1 (ADDR_EXPR, ptr_type_node, a);
  
    /* Param "q", a pointer.  */
    tree q = build_decl (UNKNOWN_LOCATION, PARM_DECL,
  		       get_identifier ("q"),
  		       ptr_type_node);
+   DECL_CONTEXT (q) = test_fndecl;
  
    program_point point (program_point::origin ());
    region_model_manager mgr;
*************** test_state_merging ()
*** 4552,4560 ****
    {
      test_region_model_context ctxt;
      region_model model0 (&mgr);
!     tree size = build_int_cst (integer_type_node, 1024);
      const svalue *size_sval = mgr.get_or_create_constant_svalue (size);
!     const region *new_reg = model0.create_region_for_heap_alloc (size_sval);
      const svalue *ptr_sval = mgr.get_ptr_svalue (ptr_type_node, new_reg);
      model0.set_value (model0.get_lvalue (p, &ctxt),
  		      ptr_sval, &ctxt);
--- 5658,5667 ----
    {
      test_region_model_context ctxt;
      region_model model0 (&mgr);
!     tree size = build_int_cst (size_type_node, 1024);
      const svalue *size_sval = mgr.get_or_create_constant_svalue (size);
!     const region *new_reg
!       = model0.create_region_for_heap_alloc (size_sval, &ctxt);
      const svalue *ptr_sval = mgr.get_ptr_svalue (ptr_type_node, new_reg);
      model0.set_value (model0.get_lvalue (p, &ctxt),
  		      ptr_sval, &ctxt);
*************** test_state_merging ()
*** 4655,4662 ****
      model0.set_value (q_in_first_frame, sval_ptr, NULL);
  
      /* Verify that it's pointing at the newer frame.  */
!     const region *reg_pointee
!       = sval_ptr->dyn_cast_region_svalue ()->get_pointee ();
      ASSERT_EQ (reg_pointee->get_parent_region (), reg_2nd_frame);
  
      model0.canonicalize ();
--- 5762,5768 ----
      model0.set_value (q_in_first_frame, sval_ptr, NULL);
  
      /* Verify that it's pointing at the newer frame.  */
!     const region *reg_pointee = sval_ptr->maybe_get_region ();
      ASSERT_EQ (reg_pointee->get_parent_region (), reg_2nd_frame);
  
      model0.canonicalize ();
*************** test_malloc_constraints ()
*** 4942,4949 ****
    tree null_ptr = build_int_cst (ptr_type_node, 0);
  
    const svalue *size_in_bytes
!     = mgr.get_or_create_unknown_svalue (integer_type_node);
!   const region *reg = model.create_region_for_heap_alloc (size_in_bytes);
    const svalue *sval = mgr.get_ptr_svalue (ptr_type_node, reg);
    model.set_value (model.get_lvalue (p, NULL), sval, NULL);
    model.set_value (q, p, NULL);
--- 6048,6055 ----
    tree null_ptr = build_int_cst (ptr_type_node, 0);
  
    const svalue *size_in_bytes
!     = mgr.get_or_create_unknown_svalue (size_type_node);
!   const region *reg = model.create_region_for_heap_alloc (size_in_bytes, NULL);
    const svalue *sval = mgr.get_ptr_svalue (ptr_type_node, reg);
    model.set_value (model.get_lvalue (p, NULL), sval, NULL);
    model.set_value (q, p, NULL);
*************** test_malloc ()
*** 5164,5173 ****
  
    /* "p = malloc (n * 4);".  */
    const svalue *size_sval = model.get_rvalue (n_times_4, &ctxt);
!   const region *reg = model.create_region_for_heap_alloc (size_sval);
    const svalue *ptr = mgr.get_ptr_svalue (int_star, reg);
    model.set_value (model.get_lvalue (p, &ctxt), ptr, &ctxt);
!   // TODO: verify dynamic extents
  }
  
  /* Verify that alloca works.  */
--- 6270,6279 ----
  
    /* "p = malloc (n * 4);".  */
    const svalue *size_sval = model.get_rvalue (n_times_4, &ctxt);
!   const region *reg = model.create_region_for_heap_alloc (size_sval, &ctxt);
    const svalue *ptr = mgr.get_ptr_svalue (int_star, reg);
    model.set_value (model.get_lvalue (p, &ctxt), ptr, &ctxt);
!   ASSERT_EQ (model.get_capacity (reg), size_sval);
  }
  
  /* Verify that alloca works.  */
*************** test_alloca ()
*** 5198,5213 ****
  			NULL, &ctxt);
    /* "p = alloca (n * 4);".  */
    const svalue *size_sval = model.get_rvalue (n_times_4, &ctxt);
!   const region *reg = model.create_region_for_alloca (size_sval);
    ASSERT_EQ (reg->get_parent_region (), frame_reg);
    const svalue *ptr = mgr.get_ptr_svalue (int_star, reg);
    model.set_value (model.get_lvalue (p, &ctxt), ptr, &ctxt);
!   // TODO: verify dynamic extents
  
    /* Verify that the pointers to the alloca region are replaced by
       poisoned values when the frame is popped.  */
    model.pop_frame (NULL, NULL, &ctxt);
!   ASSERT_EQ (model.get_rvalue (p, &ctxt)->get_kind (), SK_POISONED);
  }
  
  /* Verify that svalue::involves_p works.  */
--- 6304,6319 ----
  			NULL, &ctxt);
    /* "p = alloca (n * 4);".  */
    const svalue *size_sval = model.get_rvalue (n_times_4, &ctxt);
!   const region *reg = model.create_region_for_alloca (size_sval, &ctxt);
    ASSERT_EQ (reg->get_parent_region (), frame_reg);
    const svalue *ptr = mgr.get_ptr_svalue (int_star, reg);
    model.set_value (model.get_lvalue (p, &ctxt), ptr, &ctxt);
!   ASSERT_EQ (model.get_capacity (reg), size_sval);
  
    /* Verify that the pointers to the alloca region are replaced by
       poisoned values when the frame is popped.  */
    model.pop_frame (NULL, NULL, &ctxt);
!   ASSERT_EQ (model.get_rvalue (p, NULL)->get_kind (), SK_POISONED);
  }
  
  /* Verify that svalue::involves_p works.  */
*************** analyzer_region_model_cc_tests ()
*** 5258,5263 ****
--- 6364,6370 ----
    test_binop_svalue_folding ();
    test_sub_svalue_folding ();
    test_descendent_of_p ();
+   test_bit_range_regions ();
    test_assignment ();
    test_compound_assignment ();
    test_stack_frames ();
diff -Nrcpad gcc-11.3.0/gcc/analyzer/region-model.h gcc-12.1.0/gcc/analyzer/region-model.h
*** gcc-11.3.0/gcc/analyzer/region-model.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/region-model.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for modeling the state of memory.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for modeling the state of memory.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** one_way_id_map<T>::update (T *id) const
*** 128,133 ****
--- 128,182 ----
    *id = get_dst_for_src (*id);
  }
  
+ /* A mapping from region to svalue for use when tracking state.  */
+ 
+ class region_to_value_map
+ {
+ public:
+   typedef hash_map<const region *, const svalue *> hash_map_t;
+   typedef hash_map_t::iterator iterator;
+ 
+   region_to_value_map () : m_hash_map () {}
+   region_to_value_map (const region_to_value_map &other)
+   : m_hash_map (other.m_hash_map) {}
+   region_to_value_map &operator= (const region_to_value_map &other);
+ 
+   bool operator== (const region_to_value_map &other) const;
+   bool operator!= (const region_to_value_map &other) const
+   {
+     return !(*this == other);
+   }
+ 
+   iterator begin () const { return m_hash_map.begin (); }
+   iterator end () const { return m_hash_map.end (); }
+ 
+   const svalue * const *get (const region *reg) const
+   {
+     return const_cast <hash_map_t &> (m_hash_map).get (reg);
+   }
+   void put (const region *reg, const svalue *sval)
+   {
+     m_hash_map.put (reg, sval);
+   }
+   void remove (const region *reg)
+   {
+     m_hash_map.remove (reg);
+   }
+ 
+   bool is_empty () const { return m_hash_map.is_empty (); }
+ 
+   void dump_to_pp (pretty_printer *pp, bool simple, bool multiline) const;
+   void dump (bool simple) const;
+ 
+   bool can_merge_with_p (const region_to_value_map &other,
+ 			 region_to_value_map *out) const;
+ 
+   void purge_state_involving (const svalue *sval);
+ 
+ private:
+   hash_map_t m_hash_map;
+ };
+ 
  /* Various operations delete information from a region_model.
  
     This struct tracks how many of each kind of entity were purged (e.g.
*************** struct purge_stats
*** 140,145 ****
--- 189,195 ----
      m_num_regions (0),
      m_num_equiv_classes (0),
      m_num_constraints (0),
+     m_num_bounded_ranges_constraints (0),
      m_num_client_items (0)
    {}
  
*************** struct purge_stats
*** 147,152 ****
--- 197,203 ----
    int m_num_regions;
    int m_num_equiv_classes;
    int m_num_constraints;
+   int m_num_bounded_ranges_constraints;
    int m_num_client_items;
  };
  
*************** public:
*** 165,175 ****
--- 216,230 ----
    virtual void visit_unaryop_svalue (const unaryop_svalue *) {}
    virtual void visit_binop_svalue (const binop_svalue *) {}
    virtual void visit_sub_svalue (const sub_svalue *) {}
+   virtual void visit_repeated_svalue (const repeated_svalue *) {}
+   virtual void visit_bits_within_svalue (const bits_within_svalue *) {}
    virtual void visit_unmergeable_svalue (const unmergeable_svalue *) {}
    virtual void visit_placeholder_svalue (const placeholder_svalue *) {}
    virtual void visit_widening_svalue (const widening_svalue *) {}
    virtual void visit_compound_svalue (const compound_svalue *) {}
    virtual void visit_conjured_svalue (const conjured_svalue *) {}
+   virtual void visit_asm_output_svalue (const asm_output_svalue *) {}
+   virtual void visit_const_fn_result_svalue (const const_fn_result_svalue *) {}
  
    virtual void visit_region (const region *) {}
  };
*************** namespace ana {
*** 186,192 ****
  class region_model_manager
  {
  public:
!   region_model_manager ();
    ~region_model_manager ();
  
    /* svalue consolidation.  */
--- 241,247 ----
  class region_model_manager
  {
  public:
!   region_model_manager (logger *logger = NULL);
    ~region_model_manager ();
  
    /* svalue consolidation.  */
*************** public:
*** 208,213 ****
--- 263,274 ----
    const svalue *get_or_create_sub_svalue (tree type,
  					  const svalue *parent_svalue,
  					  const region *subregion);
+   const svalue *get_or_create_repeated_svalue (tree type,
+ 					       const svalue *outer_size,
+ 					       const svalue *inner_svalue);
+   const svalue *get_or_create_bits_within (tree type,
+ 					   const bit_range &bits,
+ 					   const svalue *inner_svalue);
    const svalue *get_or_create_unmergeable (const svalue *arg);
    const svalue *get_or_create_widening_svalue (tree type,
  					       const program_point &point,
*************** public:
*** 216,226 ****
    const svalue *get_or_create_compound_svalue (tree type,
  					       const binding_map &map);
    const svalue *get_or_create_conjured_svalue (tree type, const gimple *stmt,
! 					       const region *id_reg);
  
    const svalue *maybe_get_char_from_string_cst (tree string_cst,
  						tree byte_offset_cst);
  
    /* region consolidation.  */
    const stack_region * get_stack_region () const { return &m_stack_region; }
    const heap_region *get_heap_region () const { return &m_heap_region; }
--- 277,302 ----
    const svalue *get_or_create_compound_svalue (tree type,
  					       const binding_map &map);
    const svalue *get_or_create_conjured_svalue (tree type, const gimple *stmt,
! 					       const region *id_reg,
! 					       const conjured_purge &p);
!   const svalue *
!   get_or_create_asm_output_svalue (tree type,
! 				   const gasm *asm_stmt,
! 				   unsigned output_idx,
! 				   const vec<const svalue *> &inputs);
!   const svalue *
!   get_or_create_const_fn_result_svalue (tree type,
! 					tree fndecl,
! 					const vec<const svalue *> &inputs);
  
    const svalue *maybe_get_char_from_string_cst (tree string_cst,
  						tree byte_offset_cst);
  
+   /* Dynamically-allocated svalue instances.
+      The number of these within the analysis can grow arbitrarily.
+      They are still owned by the manager.  */
+   const svalue *create_unique_svalue (tree type);
+ 
    /* region consolidation.  */
    const stack_region * get_stack_region () const { return &m_stack_region; }
    const heap_region *get_heap_region () const { return &m_heap_region; }
*************** public:
*** 239,250 ****
--- 315,333 ----
    const region *get_offset_region (const region *parent,
  				   tree type,
  				   const svalue *byte_offset);
+   const region *get_sized_region (const region *parent,
+ 				  tree type,
+ 				  const svalue *byte_size_sval);
    const region *get_cast_region (const region *original_region,
  				 tree type);
    const frame_region *get_frame_region (const frame_region *calling_frame,
  					function *fun);
    const region *get_symbolic_region (const svalue *sval);
    const string_region *get_region_for_string (tree string_cst);
+   const region *get_bit_range (const region *parent, tree type,
+ 			       const bit_range &bits);
+ 
+   const region *get_unknown_symbolic_region (tree region_type);
  
    const region *
    get_region_for_unexpected_tree_code (region_model_context *ctxt,
*************** public:
*** 254,259 ****
--- 337,343 ----
    unsigned alloc_region_id () { return m_next_region_id++; }
  
    store_manager *get_store_manager () { return &m_store_mgr; }
+   bounded_ranges_manager *get_range_manager () const { return m_range_mgr; }
  
    /* Dynamically-allocated region instances.
       The number of these within the analysis can grow arbitrarily.
*************** public:
*** 263,268 ****
--- 347,359 ----
  
    void log_stats (logger *logger, bool show_objs) const;
  
+   void begin_checking_feasibility (void) { m_checking_feasibility = true; }
+   void end_checking_feasibility (void) { m_checking_feasibility = false; }
+ 
+   logger *get_logger () const { return m_logger; }
+ 
+   void dump_untracked_regions () const;
+ 
  private:
    bool too_complex_p (const complexity &c) const;
    bool reject_if_too_complex (svalue *sval);
*************** private:
*** 274,282 ****
--- 365,383 ----
    const svalue *maybe_fold_sub_svalue (tree type,
  				       const svalue *parent_svalue,
  				       const region *subregion);
+   const svalue *maybe_fold_repeated_svalue (tree type,
+ 					    const svalue *outer_size,
+ 					    const svalue *inner_svalue);
+   const svalue *maybe_fold_bits_within_svalue (tree type,
+ 					       const bit_range &bits,
+ 					       const svalue *inner_svalue);
    const svalue *maybe_undo_optimize_bit_field_compare (tree type,
  						       const compound_svalue *compound_sval,
  						       tree cst, const svalue *arg1);
+   const svalue *maybe_fold_asm_output_svalue (tree type,
+ 					      const vec<const svalue *> &inputs);
+ 
+   logger *m_logger;
  
    unsigned m_next_region_id;
    root_region m_root_region;
*************** private:
*** 315,320 ****
--- 416,429 ----
    typedef hash_map<sub_svalue::key_t, sub_svalue *> sub_values_map_t;
    sub_values_map_t m_sub_values_map;
  
+   typedef hash_map<repeated_svalue::key_t,
+ 		   repeated_svalue *> repeated_values_map_t;
+   repeated_values_map_t m_repeated_values_map;
+ 
+   typedef hash_map<bits_within_svalue::key_t,
+ 		   bits_within_svalue *> bits_within_values_map_t;
+   bits_within_values_map_t m_bits_within_values_map;
+ 
    typedef hash_map<const svalue *,
  		   unmergeable_svalue *> unmergeable_values_map_t;
    unmergeable_values_map_t m_unmergeable_values_map;
*************** private:
*** 333,338 ****
--- 442,462 ----
  		   conjured_svalue *> conjured_values_map_t;
    conjured_values_map_t m_conjured_values_map;
  
+   typedef hash_map<asm_output_svalue::key_t,
+ 		   asm_output_svalue *> asm_output_values_map_t;
+   asm_output_values_map_t m_asm_output_values_map;
+ 
+   typedef hash_map<const_fn_result_svalue::key_t,
+ 		   const_fn_result_svalue *> const_fn_result_values_map_t;
+   const_fn_result_values_map_t m_const_fn_result_values_map;
+ 
+   bool m_checking_feasibility;
+ 
+   /* "Dynamically-allocated" svalue instances.
+      The number of these within the analysis can grow arbitrarily.
+      They are still owned by the manager.  */
+   auto_delete_vec<svalue> m_managed_dynamic_svalues;
+ 
    /* Maximum complexity of svalues that weren't rejected.  */
    complexity m_max_complexity;
  
*************** private:
*** 355,360 ****
--- 479,485 ----
    consolidation_map<field_region> m_field_regions;
    consolidation_map<element_region> m_element_regions;
    consolidation_map<offset_region> m_offset_regions;
+   consolidation_map<sized_region> m_sized_regions;
    consolidation_map<cast_region> m_cast_regions;
    consolidation_map<frame_region> m_frame_regions;
    consolidation_map<symbolic_region> m_symbolic_regions;
*************** private:
*** 362,376 ****
    typedef hash_map<tree, string_region *> string_map_t;
    string_map_t m_string_map;
  
    store_manager m_store_mgr;
  
    /* "Dynamically-allocated" region instances.
       The number of these within the analysis can grow arbitrarily.
       They are still owned by the manager.  */
    auto_delete_vec<region> m_managed_dynamic_regions;
  };
  
! struct append_ssa_names_cb_data;
  
  /* Helper class for handling calls to functions with known behavior.
     Implemented in region-model-impl-calls.c.  */
--- 487,505 ----
    typedef hash_map<tree, string_region *> string_map_t;
    string_map_t m_string_map;
  
+   consolidation_map<bit_range_region> m_bit_range_regions;
+ 
    store_manager m_store_mgr;
  
+   bounded_ranges_manager *m_range_mgr;
+ 
    /* "Dynamically-allocated" region instances.
       The number of these within the analysis can grow arbitrarily.
       They are still owned by the manager.  */
    auto_delete_vec<region> m_managed_dynamic_regions;
  };
  
! struct append_regions_cb_data;
  
  /* Helper class for handling calls to functions with known behavior.
     Implemented in region-model-impl-calls.c.  */
*************** public:
*** 381,386 ****
--- 510,516 ----
    call_details (const gcall *call, region_model *model,
  		region_model_context *ctxt);
  
+   region_model_manager *get_manager () const;
    region_model_context *get_ctxt () const { return m_ctxt; }
    uncertainty_t *get_uncertainty () const;
    tree get_lhs_type () const { return m_lhs_type; }
*************** public:
*** 390,402 ****
--- 520,539 ----
  
    unsigned num_args () const;
  
+   const gcall *get_call_stmt () const { return m_call; }
+ 
    tree get_arg_tree (unsigned idx) const;
    tree get_arg_type (unsigned idx) const;
    const svalue *get_arg_svalue (unsigned idx) const;
+   const char *get_arg_string_literal (unsigned idx) const;
+ 
+   tree get_fndecl_for_call () const;
  
    void dump_to_pp (pretty_printer *pp, bool simple) const;
    void dump (bool simple) const;
  
+   const svalue *get_or_create_conjured_svalue (const region *) const;
+ 
  private:
    const gcall *m_call;
    region_model *m_model;
*************** private:
*** 409,428 ****
     a tree of regions, along with their associated values.
     The representation is graph-like because values can be pointers to
     regions.
!    It also stores a constraint_manager, capturing relationships between
!    the values.  */
  
  class region_model
  {
   public:
    region_model (region_model_manager *mgr);
    region_model (const region_model &other);
    ~region_model ();
- 
- #if 0//__cplusplus >= 201103
-   region_model (region_model &&other);
- #endif
- 
    region_model &operator= (const region_model &other);
  
    bool operator== (const region_model &other) const;
--- 546,564 ----
     a tree of regions, along with their associated values.
     The representation is graph-like because values can be pointers to
     regions.
!    It also stores:
!    - a constraint_manager, capturing relationships between the values, and
!    - dynamic extents, mapping dynamically-allocated regions to svalues (their
!    capacities).  */
  
  class region_model
  {
   public:
+   typedef region_to_value_map dynamic_extents_t;
+ 
    region_model (region_model_manager *mgr);
    region_model (const region_model &other);
    ~region_model ();
    region_model &operator= (const region_model &other);
  
    bool operator== (const region_model &other) const;
*************** class region_model
*** 446,479 ****
    void canonicalize ();
    bool canonicalized_p () const;
  
    void on_assignment (const gassign *stmt, region_model_context *ctxt);
    const svalue *get_gassign_result (const gassign *assign,
  				    region_model_context *ctxt);
    bool on_call_pre (const gcall *stmt, region_model_context *ctxt,
  		    bool *out_terminate_path);
    void on_call_post (const gcall *stmt,
  		     bool unknown_side_effects,
  		     region_model_context *ctxt);
  
    /* Specific handling for on_call_pre.  */
!   bool impl_call_alloca (const call_details &cd);
    void impl_call_analyzer_describe (const gcall *call,
  				    region_model_context *ctxt);
    void impl_call_analyzer_eval (const gcall *call,
  				region_model_context *ctxt);
!   bool impl_call_builtin_expect (const call_details &cd);
!   bool impl_call_calloc (const call_details &cd);
    bool impl_call_error (const call_details &cd, unsigned min_args,
  			bool *out_terminate_path);
    void impl_call_free (const call_details &cd);
!   bool impl_call_malloc (const call_details &cd);
    void impl_call_memcpy (const call_details &cd);
!   bool impl_call_memset (const call_details &cd);
    void impl_call_realloc (const call_details &cd);
    void impl_call_strcpy (const call_details &cd);
!   bool impl_call_strlen (const call_details &cd);
!   bool impl_call_operator_new (const call_details &cd);
!   bool impl_call_operator_delete (const call_details &cd);
    void impl_deallocation_call (const call_details &cd);
  
    void handle_unrecognized_call (const gcall *call,
--- 582,630 ----
    void canonicalize ();
    bool canonicalized_p () const;
  
+   void
+   on_stmt_pre (const gimple *stmt,
+ 	       bool *out_terminate_path,
+ 	       bool *out_unknown_side_effects,
+ 	       region_model_context *ctxt);
+ 
    void on_assignment (const gassign *stmt, region_model_context *ctxt);
    const svalue *get_gassign_result (const gassign *assign,
  				    region_model_context *ctxt);
+   void on_asm_stmt (const gasm *asm_stmt, region_model_context *ctxt);
    bool on_call_pre (const gcall *stmt, region_model_context *ctxt,
  		    bool *out_terminate_path);
    void on_call_post (const gcall *stmt,
  		     bool unknown_side_effects,
  		     region_model_context *ctxt);
  
+   void purge_state_involving (const svalue *sval, region_model_context *ctxt);
+ 
    /* Specific handling for on_call_pre.  */
!   void impl_call_alloca (const call_details &cd);
    void impl_call_analyzer_describe (const gcall *call,
  				    region_model_context *ctxt);
+   void impl_call_analyzer_dump_capacity (const gcall *call,
+ 					 region_model_context *ctxt);
+   void impl_call_analyzer_dump_escaped (const gcall *call);
    void impl_call_analyzer_eval (const gcall *call,
  				region_model_context *ctxt);
!   void impl_call_builtin_expect (const call_details &cd);
!   void impl_call_calloc (const call_details &cd);
    bool impl_call_error (const call_details &cd, unsigned min_args,
  			bool *out_terminate_path);
+   void impl_call_fgets (const call_details &cd);
+   void impl_call_fread (const call_details &cd);
    void impl_call_free (const call_details &cd);
!   void impl_call_malloc (const call_details &cd);
    void impl_call_memcpy (const call_details &cd);
!   void impl_call_memset (const call_details &cd);
    void impl_call_realloc (const call_details &cd);
+   void impl_call_strchr (const call_details &cd);
    void impl_call_strcpy (const call_details &cd);
!   void impl_call_strlen (const call_details &cd);
!   void impl_call_operator_new (const call_details &cd);
!   void impl_call_operator_delete (const call_details &cd);
    void impl_deallocation_call (const call_details &cd);
  
    void handle_unrecognized_call (const gcall *call,
*************** class region_model
*** 493,498 ****
--- 644,650 ----
  			region_model_context *ctxt);
  
    void handle_phi (const gphi *phi, tree lhs, tree rhs,
+ 		   const region_model &old_state,
  		   region_model_context *ctxt);
  
    bool maybe_update_for_edge (const superedge &edge,
*************** class region_model
*** 500,510 ****
  			      region_model_context *ctxt,
  			      rejected_constraint **out);
  
    const region *push_frame (function *fun, const vec<const svalue *> *arg_sids,
  			    region_model_context *ctxt);
    const frame_region *get_current_frame () const { return m_current_frame; }
    function * get_current_function () const;
!   void pop_frame (const region *result_dst,
  		  const svalue **out_result,
  		  region_model_context *ctxt);
    int get_stack_depth () const;
--- 652,669 ----
  			      region_model_context *ctxt,
  			      rejected_constraint **out);
  
+   void update_for_gcall (const gcall *call_stmt,
+                          region_model_context *ctxt,
+                          function *callee = NULL);
+   
+   void update_for_return_gcall (const gcall *call_stmt,
+                                 region_model_context *ctxt);
+ 
    const region *push_frame (function *fun, const vec<const svalue *> *arg_sids,
  			    region_model_context *ctxt);
    const frame_region *get_current_frame () const { return m_current_frame; }
    function * get_current_function () const;
!   void pop_frame (tree result_lvalue,
  		  const svalue **out_result,
  		  region_model_context *ctxt);
    int get_stack_depth () const;
*************** class region_model
*** 520,537 ****
  
    const svalue *get_rvalue_for_bits (tree type,
  				     const region *reg,
! 				     const bit_range &bits) const;
  
    void set_value (const region *lhs_reg, const svalue *rhs_sval,
  		  region_model_context *ctxt);
    void set_value (tree lhs, tree rhs, region_model_context *ctxt);
    void clobber_region (const region *reg);
    void purge_region (const region *reg);
    void zero_fill_region (const region *reg);
    void mark_region_as_unknown (const region *reg, uncertainty_t *uncertainty);
  
-   void copy_region (const region *dst_reg, const region *src_reg,
- 		    region_model_context *ctxt);
    tristate eval_condition (const svalue *lhs,
  			   enum tree_code op,
  			   const svalue *rhs) const;
--- 679,696 ----
  
    const svalue *get_rvalue_for_bits (tree type,
  				     const region *reg,
! 				     const bit_range &bits,
! 				     region_model_context *ctxt) const;
  
    void set_value (const region *lhs_reg, const svalue *rhs_sval,
  		  region_model_context *ctxt);
    void set_value (tree lhs, tree rhs, region_model_context *ctxt);
    void clobber_region (const region *reg);
    void purge_region (const region *reg);
+   void fill_region (const region *reg, const svalue *sval);
    void zero_fill_region (const region *reg);
    void mark_region_as_unknown (const region *reg, uncertainty_t *uncertainty);
  
    tristate eval_condition (const svalue *lhs,
  			   enum tree_code op,
  			   const svalue *rhs) const;
*************** class region_model
*** 550,557 ****
  		       region_model_context *ctxt,
  		       rejected_constraint **out);
  
!   const region *create_region_for_heap_alloc (const svalue *size_in_bytes);
!   const region *create_region_for_alloca (const svalue *size_in_bytes);
  
    tree get_representative_tree (const svalue *sval) const;
    path_var
--- 709,718 ----
  		       region_model_context *ctxt,
  		       rejected_constraint **out);
  
!   const region *create_region_for_heap_alloc (const svalue *size_in_bytes,
! 					      region_model_context *ctxt);
!   const region *create_region_for_alloca (const svalue *size_in_bytes,
! 					  region_model_context *ctxt);
  
    tree get_representative_tree (const svalue *sval) const;
    path_var
*************** class region_model
*** 570,598 ****
    store *get_store () { return &m_store; }
    const store *get_store () const { return &m_store; }
  
    region_model_manager *get_manager () const { return m_mgr; }
  
    void unbind_region_and_descendents (const region *reg,
  				      enum poison_kind pkind);
  
    bool can_merge_with_p (const region_model &other_model,
  			 const program_point &point,
! 			 region_model *out_model) const;
  
    tree get_fndecl_for_call (const gcall *call,
  			    region_model_context *ctxt);
  
!   void get_ssa_name_regions_for_current_frame
!     (auto_vec<const decl_region *> *out) const;
!   static void append_ssa_names_cb (const region *base_reg,
! 				   struct append_ssa_names_cb_data *data);
  
!   const svalue *get_store_value (const region *reg) const;
  
    bool region_exists_p (const region *reg) const;
  
    void loop_replay_fixup (const region_model *dst_state);
  
   private:
    const region *get_lvalue_1 (path_var pv, region_model_context *ctxt) const;
    const svalue *get_rvalue_1 (path_var pv, region_model_context *ctxt) const;
--- 731,784 ----
    store *get_store () { return &m_store; }
    const store *get_store () const { return &m_store; }
  
+   const dynamic_extents_t &
+   get_dynamic_extents () const
+   {
+     return m_dynamic_extents;
+   }
+   const svalue *get_dynamic_extents (const region *reg) const;
+   void set_dynamic_extents (const region *reg,
+ 			    const svalue *size_in_bytes,
+ 			    region_model_context *ctxt);
+   void unset_dynamic_extents (const region *reg);
+ 
    region_model_manager *get_manager () const { return m_mgr; }
+   bounded_ranges_manager *get_range_manager () const
+   {
+     return m_mgr->get_range_manager ();
+   }
  
    void unbind_region_and_descendents (const region *reg,
  				      enum poison_kind pkind);
  
    bool can_merge_with_p (const region_model &other_model,
  			 const program_point &point,
! 			 region_model *out_model,
! 			 const extrinsic_state *ext_state = NULL,
! 			 const program_state *state_a = NULL,
! 			 const program_state *state_b = NULL) const;
  
    tree get_fndecl_for_call (const gcall *call,
  			    region_model_context *ctxt);
  
!   void get_regions_for_current_frame (auto_vec<const decl_region *> *out) const;
!   static void append_regions_cb (const region *base_reg,
! 				 struct append_regions_cb_data *data);
  
!   const svalue *get_store_value (const region *reg,
! 				 region_model_context *ctxt) const;
  
    bool region_exists_p (const region *reg) const;
  
    void loop_replay_fixup (const region_model *dst_state);
  
+   const svalue *get_capacity (const region *reg) const;
+ 
+   /* Implemented in sm-malloc.cc  */
+   void on_realloc_with_move (const call_details &cd,
+ 			     const svalue *old_ptr_sval,
+ 			     const svalue *new_ptr_sval);
+ 
   private:
    const region *get_lvalue_1 (path_var pv, region_model_context *ctxt) const;
    const svalue *get_rvalue_1 (path_var pv, region_model_context *ctxt) const;
*************** class region_model
*** 604,621 ****
    get_representative_path_var_1 (const region *reg,
  				 svalue_set *visited) const;
  
!   void add_any_constraints_from_ssa_def_stmt (tree lhs,
! 					      enum tree_code op,
! 					      tree rhs,
! 					      region_model_context *ctxt);
!   void add_any_constraints_from_gassign (enum tree_code op,
! 					 tree rhs,
! 					 const gassign *assign,
! 					 region_model_context *ctxt);
!   void add_any_constraints_from_gcall (enum tree_code op,
! 				       tree rhs,
! 				       const gcall *call,
! 				       region_model_context *ctxt);
  
    void update_for_call_superedge (const call_superedge &call_edge,
  				  region_model_context *ctxt);
--- 790,804 ----
    get_representative_path_var_1 (const region *reg,
  				 svalue_set *visited) const;
  
!   bool add_constraint (const svalue *lhs,
! 		       enum tree_code op,
! 		       const svalue *rhs,
! 		       region_model_context *ctxt);
!   bool add_constraints_from_binop (const svalue *outer_lhs,
! 				   enum tree_code outer_op,
! 				   const svalue *outer_rhs,
! 				   bool *out,
! 				   region_model_context *ctxt);
  
    void update_for_call_superedge (const call_superedge &call_edge,
  				  region_model_context *ctxt);
*************** class region_model
*** 640,653 ****
  
    void on_top_level_param (tree param, region_model_context *ctxt);
  
-   void record_dynamic_extents (const region *reg,
- 			       const svalue *size_in_bytes);
- 
    bool called_from_main_p () const;
    const svalue *get_initial_value_for_global (const region *reg) const;
  
    void check_for_writable_region (const region* dest_reg,
  				  region_model_context *ctxt) const;
  
    /* Storing this here to avoid passing it around everywhere.  */
    region_model_manager *const m_mgr;
--- 823,858 ----
  
    void on_top_level_param (tree param, region_model_context *ctxt);
  
    bool called_from_main_p () const;
    const svalue *get_initial_value_for_global (const region *reg) const;
  
+   const svalue *check_for_poison (const svalue *sval,
+ 				  tree expr,
+ 				  region_model_context *ctxt) const;
+   const region * get_region_for_poisoned_expr (tree expr) const;
+ 
+   void check_dynamic_size_for_taint (enum memory_space mem_space,
+ 				     const svalue *size_in_bytes,
+ 				     region_model_context *ctxt) const;
+ 
+   void check_region_for_taint (const region *reg,
+ 			       enum access_direction dir,
+ 			       region_model_context *ctxt) const;
+ 
    void check_for_writable_region (const region* dest_reg,
  				  region_model_context *ctxt) const;
+   void check_region_access (const region *reg,
+ 			    enum access_direction dir,
+ 			    region_model_context *ctxt) const;
+   void check_region_for_write (const region *dest_reg,
+ 			       region_model_context *ctxt) const;
+   void check_region_for_read (const region *src_reg,
+ 			      region_model_context *ctxt) const;
+ 
+   void check_call_args (const call_details &cd) const;
+   void check_external_function_for_access_attr (const gcall *call,
+ 						tree callee_fndecl,
+ 						region_model_context *ctxt) const;
  
    /* Storing this here to avoid passing it around everywhere.  */
    region_model_manager *const m_mgr;
*************** class region_model
*** 657,662 ****
--- 862,873 ----
    constraint_manager *m_constraints; // TODO: embed, rather than dynalloc?
  
    const frame_region *m_current_frame;
+ 
+   /* Map from base region to size in bytes, for tracking the sizes of
+      dynamically-allocated regions.
+      This is part of the region_model rather than the region to allow for
+      memory regions to be resized (e.g. by realloc).  */
+   dynamic_extents_t m_dynamic_extents;
  };
  
  /* Some region_model activity could lead to warnings (e.g. attempts to use an
*************** class region_model
*** 670,676 ****
  class region_model_context
  {
   public:
!   virtual void warn (pending_diagnostic *d) = 0;
  
    /* Hook for clients to be notified when an SVAL that was reachable
       in a previous state is no longer live, so that clients can emit warnings
--- 881,893 ----
  class region_model_context
  {
   public:
!   /* Hook for clients to store pending diagnostics.
!      Return true if the diagnostic was stored, or false if it was deleted.  */
!   virtual bool warn (pending_diagnostic *d) = 0;
! 
!   /* Hook for clients to add a note to the last previously stored pending diagnostic.
!      Takes ownership of the pending_node (or deletes it).  */
!   virtual void add_note (pending_note *pn) = 0;
  
    /* Hook for clients to be notified when an SVAL that was reachable
       in a previous state is no longer live, so that clients can emit warnings
*************** class region_model_context
*** 691,697 ****
       and use them to trigger sm-state transitions (e.g. transitions due
       to ptrs becoming known to be NULL or non-NULL, rather than just
       "unchecked") */
!   virtual void on_condition (tree lhs, enum tree_code op, tree rhs) = 0;
  
    /* Hooks for clients to be notified when an unknown change happens
       to SVAL (in response to a call to an unknown function).  */
--- 908,916 ----
       and use them to trigger sm-state transitions (e.g. transitions due
       to ptrs becoming known to be NULL or non-NULL, rather than just
       "unchecked") */
!   virtual void on_condition (const svalue *lhs,
! 			     enum tree_code op,
! 			     const svalue *rhs) = 0;
  
    /* Hooks for clients to be notified when an unknown change happens
       to SVAL (in response to a call to an unknown function).  */
*************** class region_model_context
*** 710,715 ****
--- 929,959 ----
    virtual void on_escaped_function (tree fndecl) = 0;
  
    virtual uncertainty_t *get_uncertainty () = 0;
+ 
+   /* Hook for clients to purge state involving SVAL.  */
+   virtual void purge_state_involving (const svalue *sval) = 0;
+ 
+   /* Hook for clients to split state with a non-standard path.
+      Take ownership of INFO.  */
+   virtual void bifurcate (custom_edge_info *info) = 0;
+ 
+   /* Hook for clients to terminate the standard path.  */
+   virtual void terminate_path () = 0;
+ 
+   virtual const extrinsic_state *get_ext_state () const = 0;
+ 
+   /* Hook for clients to access the "malloc" state machine in
+      any underlying program_state.  */
+   virtual bool get_malloc_map (sm_state_map **out_smap,
+ 			       const state_machine **out_sm,
+ 			       unsigned *out_sm_idx) = 0;
+   /* Likewise for the "taint" state machine.  */
+   virtual bool get_taint_map (sm_state_map **out_smap,
+ 			      const state_machine **out_sm,
+ 			      unsigned *out_sm_idx) = 0;
+ 
+   /* Get the current statement, if any.  */
+   virtual const gimple *get_stmt () const = 0;
  };
  
  /* A "do nothing" subclass of region_model_context.  */
*************** class region_model_context
*** 717,730 ****
  class noop_region_model_context : public region_model_context
  {
  public:
!   void warn (pending_diagnostic *) OVERRIDE {}
    void on_svalue_leak (const svalue *) OVERRIDE {}
    void on_liveness_change (const svalue_set &,
  			   const region_model *) OVERRIDE {}
    logger *get_logger () OVERRIDE { return NULL; }
!   void on_condition (tree lhs ATTRIBUTE_UNUSED,
  		     enum tree_code op ATTRIBUTE_UNUSED,
! 		     tree rhs ATTRIBUTE_UNUSED) OVERRIDE
    {
    }
    void on_unknown_change (const svalue *sval ATTRIBUTE_UNUSED,
--- 961,975 ----
  class noop_region_model_context : public region_model_context
  {
  public:
!   bool warn (pending_diagnostic *) OVERRIDE { return false; }
!   void add_note (pending_note *pn) OVERRIDE;
    void on_svalue_leak (const svalue *) OVERRIDE {}
    void on_liveness_change (const svalue_set &,
  			   const region_model *) OVERRIDE {}
    logger *get_logger () OVERRIDE { return NULL; }
!   void on_condition (const svalue *lhs ATTRIBUTE_UNUSED,
  		     enum tree_code op ATTRIBUTE_UNUSED,
! 		     const svalue *rhs ATTRIBUTE_UNUSED) OVERRIDE
    {
    }
    void on_unknown_change (const svalue *sval ATTRIBUTE_UNUSED,
*************** public:
*** 740,745 ****
--- 985,1012 ----
    void on_escaped_function (tree) OVERRIDE {}
  
    uncertainty_t *get_uncertainty () OVERRIDE { return NULL; }
+ 
+   void purge_state_involving (const svalue *sval ATTRIBUTE_UNUSED) OVERRIDE {}
+ 
+   void bifurcate (custom_edge_info *info) OVERRIDE;
+   void terminate_path () OVERRIDE;
+ 
+   const extrinsic_state *get_ext_state () const OVERRIDE { return NULL; }
+ 
+   bool get_malloc_map (sm_state_map **,
+ 		       const state_machine **,
+ 		       unsigned *) OVERRIDE
+   {
+     return false;
+   }
+   bool get_taint_map (sm_state_map **,
+ 		      const state_machine **,
+ 		      unsigned *) OVERRIDE
+   {
+     return false;
+   }
+ 
+   const gimple *get_stmt () const OVERRIDE { return NULL; }
  };
  
  /* A subclass of region_model_context for determining if operations fail
*************** private:
*** 762,767 ****
--- 1029,1175 ----
    int m_num_unexpected_codes;
  };
  
+ /* Subclass of region_model_context that wraps another context, allowing
+    for extra code to be added to the various hooks.  */
+ 
+ class region_model_context_decorator : public region_model_context
+ {
+  public:
+   bool warn (pending_diagnostic *d) OVERRIDE
+   {
+     return m_inner->warn (d);
+   }
+ 
+   void add_note (pending_note *pn) OVERRIDE
+   {
+     m_inner->add_note (pn);
+   }
+ 
+   void on_svalue_leak (const svalue *sval) OVERRIDE
+   {
+     m_inner->on_svalue_leak (sval);
+   }
+ 
+   void on_liveness_change (const svalue_set &live_svalues,
+ 			   const region_model *model) OVERRIDE
+   {
+     m_inner->on_liveness_change (live_svalues, model);
+   }
+ 
+   logger *get_logger () OVERRIDE
+   {
+     return m_inner->get_logger ();
+   }
+ 
+   void on_condition (const svalue *lhs,
+ 		     enum tree_code op,
+ 		     const svalue *rhs) OVERRIDE
+   {
+     m_inner->on_condition (lhs, op, rhs);
+   }
+ 
+   void on_unknown_change (const svalue *sval, bool is_mutable) OVERRIDE
+   {
+     m_inner->on_unknown_change (sval, is_mutable);
+   }
+ 
+   void on_phi (const gphi *phi, tree rhs) OVERRIDE
+   {
+     m_inner->on_phi (phi, rhs);
+   }
+ 
+   void on_unexpected_tree_code (tree t,
+ 				const dump_location_t &loc) OVERRIDE
+   {
+     m_inner->on_unexpected_tree_code (t, loc);
+   }
+ 
+   void on_escaped_function (tree fndecl) OVERRIDE
+   {
+     m_inner->on_escaped_function (fndecl);
+   }
+ 
+   uncertainty_t *get_uncertainty () OVERRIDE
+   {
+     return m_inner->get_uncertainty ();
+   }
+ 
+   void purge_state_involving (const svalue *sval) OVERRIDE
+   {
+     m_inner->purge_state_involving (sval);
+   }
+ 
+   void bifurcate (custom_edge_info *info) OVERRIDE
+   {
+     m_inner->bifurcate (info);
+   }
+ 
+   void terminate_path () OVERRIDE
+   {
+     m_inner->terminate_path ();
+   }
+ 
+   const extrinsic_state *get_ext_state () const OVERRIDE
+   {
+     return m_inner->get_ext_state ();
+   }
+ 
+   bool get_malloc_map (sm_state_map **out_smap,
+ 		       const state_machine **out_sm,
+ 		       unsigned *out_sm_idx) OVERRIDE
+   {
+     return m_inner->get_malloc_map (out_smap, out_sm, out_sm_idx);
+   }
+ 
+   bool get_taint_map (sm_state_map **out_smap,
+ 		      const state_machine **out_sm,
+ 		      unsigned *out_sm_idx) OVERRIDE
+   {
+     return m_inner->get_taint_map (out_smap, out_sm, out_sm_idx);
+   }
+ 
+   const gimple *get_stmt () const OVERRIDE
+   {
+     return m_inner->get_stmt ();
+   }
+ 
+ protected:
+   region_model_context_decorator (region_model_context *inner)
+   : m_inner (inner)
+   {
+     gcc_assert (m_inner);
+   }
+ 
+   region_model_context *m_inner;
+ };
+ 
+ /* Subclass of region_model_context_decorator that adds a note
+    when saving diagnostics.  */
+ 
+ class note_adding_context : public region_model_context_decorator
+ {
+ public:
+   bool warn (pending_diagnostic *d) OVERRIDE
+   {
+     if (m_inner->warn (d))
+       {
+ 	add_note (make_note ());
+ 	return true;
+       }
+     else
+       return false;
+   }
+ 
+   /* Hook to make the new note.  */
+   virtual pending_note *make_note () = 0;
+ 
+ protected:
+   note_adding_context (region_model_context *inner)
+   : region_model_context_decorator (inner)
+   {
+   }
+ };
+ 
  /* A bundle of data for use when attempting to merge two region_model
     instances to make a third.  */
  
*************** struct model_merger
*** 770,779 ****
    model_merger (const region_model *model_a,
  		const region_model *model_b,
  		const program_point &point,
! 		region_model *merged_model)
    : m_model_a (model_a), m_model_b (model_b),
      m_point (point),
!     m_merged_model (merged_model)
    {
    }
  
--- 1178,1192 ----
    model_merger (const region_model *model_a,
  		const region_model *model_b,
  		const program_point &point,
! 		region_model *merged_model,
! 		const extrinsic_state *ext_state,
! 		const program_state *state_a,
! 		const program_state *state_b)
    : m_model_a (model_a), m_model_b (model_b),
      m_point (point),
!     m_merged_model (merged_model),
!     m_ext_state (ext_state),
!     m_state_a (state_a), m_state_b (state_b)
    {
    }
  
*************** struct model_merger
*** 786,827 ****
      return m_model_a->get_manager ();
    }
  
    const region_model *m_model_a;
    const region_model *m_model_b;
    const program_point &m_point;
    region_model *m_merged_model;
  };
  
  /* A record that can (optionally) be written out when
     region_model::add_constraint fails.  */
  
! struct rejected_constraint
  {
!   rejected_constraint (const region_model &model,
! 		     tree lhs, enum tree_code op, tree rhs)
!   : m_model (model), m_lhs (lhs), m_op (op), m_rhs (rhs)
!   {}
  
!   void dump_to_pp (pretty_printer *pp) const;
  
    region_model m_model;
    tree m_lhs;
    enum tree_code m_op;
    tree m_rhs;
  };
  
  /* A bundle of state.  */
  
  class engine
  {
  public:
    region_model_manager *get_model_manager () { return &m_mgr; }
  
    void log_stats (logger *logger) const;
  
  private:
    region_model_manager m_mgr;
- 
  };
  
  } // namespace ana
--- 1199,1281 ----
      return m_model_a->get_manager ();
    }
  
+   bool mergeable_svalue_p (const svalue *) const;
+ 
    const region_model *m_model_a;
    const region_model *m_model_b;
    const program_point &m_point;
    region_model *m_merged_model;
+ 
+   const extrinsic_state *m_ext_state;
+   const program_state *m_state_a;
+   const program_state *m_state_b;
  };
  
  /* A record that can (optionally) be written out when
     region_model::add_constraint fails.  */
  
! class rejected_constraint
  {
! public:
!   virtual ~rejected_constraint () {}
!   virtual void dump_to_pp (pretty_printer *pp) const = 0;
  
!   const region_model &get_model () const { return m_model; }
! 
! protected:
!   rejected_constraint (const region_model &model)
!   : m_model (model)
!   {}
  
    region_model m_model;
+ };
+ 
+ class rejected_op_constraint : public rejected_constraint
+ {
+ public:
+   rejected_op_constraint (const region_model &model,
+ 			  tree lhs, enum tree_code op, tree rhs)
+   : rejected_constraint (model),
+     m_lhs (lhs), m_op (op), m_rhs (rhs)
+   {}
+ 
+   void dump_to_pp (pretty_printer *pp) const FINAL OVERRIDE;
+ 
    tree m_lhs;
    enum tree_code m_op;
    tree m_rhs;
  };
  
+ class rejected_ranges_constraint : public rejected_constraint
+ {
+ public:
+   rejected_ranges_constraint (const region_model &model,
+ 			      tree expr, const bounded_ranges *ranges)
+   : rejected_constraint (model),
+     m_expr (expr), m_ranges (ranges)
+   {}
+ 
+   void dump_to_pp (pretty_printer *pp) const FINAL OVERRIDE;
+ 
+ private:
+   tree m_expr;
+   const bounded_ranges *m_ranges;
+ };
+ 
  /* A bundle of state.  */
  
  class engine
  {
  public:
+   engine (const supergraph *sg = NULL, logger *logger = NULL);
+   const supergraph *get_supergraph () { return m_sg; }
    region_model_manager *get_model_manager () { return &m_mgr; }
  
    void log_stats (logger *logger) const;
  
  private:
+   const supergraph *m_sg;
    region_model_manager m_mgr;
  };
  
  } // namespace ana
*************** using namespace ::selftest;
*** 842,850 ****
  class test_region_model_context : public noop_region_model_context
  {
  public:
!   void warn (pending_diagnostic *d) FINAL OVERRIDE
    {
      m_diagnostics.safe_push (d);
    }
  
    unsigned get_num_diagnostics () const { return m_diagnostics.length (); }
--- 1296,1305 ----
  class test_region_model_context : public noop_region_model_context
  {
  public:
!   bool warn (pending_diagnostic *d) FINAL OVERRIDE
    {
      m_diagnostics.safe_push (d);
+     return true;
    }
  
    unsigned get_num_diagnostics () const { return m_diagnostics.length (); }
diff -Nrcpad gcc-11.3.0/gcc/analyzer/region.cc gcc-12.1.0/gcc/analyzer/region.cc
*** gcc-11.3.0/gcc/analyzer/region.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/region.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Regions of memory.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Regions of memory.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 59,64 ****
--- 59,66 ----
  #include "analyzer/store.h"
  #include "analyzer/region.h"
  #include "analyzer/region-model.h"
+ #include "analyzer/sm.h"
+ #include "analyzer/program-state.h"
  
  #if ENABLE_ANALYZER
  
*************** region::get_base_region () const
*** 98,103 ****
--- 100,107 ----
  	case RK_FIELD:
  	case RK_ELEMENT:
  	case RK_OFFSET:
+ 	case RK_SIZED:
+ 	case RK_BIT_RANGE:
  	  iter = iter->get_parent_region ();
  	  continue;
  	case RK_CAST:
*************** region::base_region_p () const
*** 121,127 ****
--- 125,133 ----
      case RK_FIELD:
      case RK_ELEMENT:
      case RK_OFFSET:
+     case RK_SIZED:
      case RK_CAST:
+     case RK_BIT_RANGE:
        return false;
  
      default:
*************** region::maybe_get_frame_region () const
*** 166,171 ****
--- 172,280 ----
    return NULL;
  }
  
+ /* Get the memory space of this region.  */
+ 
+ enum memory_space
+ region::get_memory_space () const
+ {
+   const region *iter = this;
+   while (iter)
+     {
+       switch (iter->get_kind ())
+ 	{
+ 	default:
+ 	  break;
+ 	case RK_GLOBALS:
+ 	  return MEMSPACE_GLOBALS;
+ 	case RK_CODE:
+ 	case RK_FUNCTION:
+ 	case RK_LABEL:
+ 	  return MEMSPACE_CODE;
+ 	case RK_FRAME:
+ 	case RK_STACK:
+ 	case RK_ALLOCA:
+ 	  return MEMSPACE_STACK;
+ 	case RK_HEAP:
+ 	case RK_HEAP_ALLOCATED:
+ 	  return MEMSPACE_HEAP;
+ 	case RK_STRING:
+ 	  return MEMSPACE_READONLY_DATA;
+ 	}
+       if (iter->get_kind () == RK_CAST)
+ 	iter = iter->dyn_cast_cast_region ()->get_original_region ();
+       else
+ 	iter = iter->get_parent_region ();
+     }
+   return MEMSPACE_UNKNOWN;
+ }
+ 
+ /* Subroutine for use by region_model_manager::get_or_create_initial_value.
+    Return true if this region has an initial_svalue.
+    Return false if attempting to use INIT_VAL(this_region) should give
+    the "UNINITIALIZED" poison value.  */
+ 
+ bool
+ region::can_have_initial_svalue_p () const
+ {
+   const region *base_reg = get_base_region ();
+ 
+   /* Check for memory spaces that are uninitialized by default.  */
+   enum memory_space mem_space = base_reg->get_memory_space ();
+   switch (mem_space)
+     {
+     default:
+       gcc_unreachable ();
+     case MEMSPACE_UNKNOWN:
+     case MEMSPACE_CODE:
+     case MEMSPACE_GLOBALS:
+     case MEMSPACE_READONLY_DATA:
+       /* Such regions have initial_svalues.  */
+       return true;
+ 
+     case MEMSPACE_HEAP:
+       /* Heap allocations are uninitialized by default.  */
+       return false;
+ 
+     case MEMSPACE_STACK:
+       if (tree decl = base_reg->maybe_get_decl ())
+ 	{
+ 	  /* See the assertion in frame_region::get_region_for_local for the
+ 	     tree codes we need to handle here.  */
+ 	  switch (TREE_CODE (decl))
+ 	    {
+ 	    default:
+ 	      gcc_unreachable ();
+ 
+ 	    case PARM_DECL:
+ 	      /* Parameters have initial values.  */
+ 	      return true;
+ 
+ 	    case VAR_DECL:
+ 	    case RESULT_DECL:
+ 	      /* Function locals don't have initial values.  */
+ 	      return false;
+ 
+ 	    case SSA_NAME:
+ 	      {
+ 		tree ssa_name = decl;
+ 		/* SSA names that are the default defn of a PARM_DECL
+ 		   have initial_svalues; other SSA names don't.  */
+ 		if (SSA_NAME_IS_DEFAULT_DEF (ssa_name)
+ 		    && SSA_NAME_VAR (ssa_name)
+ 		    && TREE_CODE (SSA_NAME_VAR (ssa_name)) == PARM_DECL)
+ 		  return true;
+ 		else
+ 		  return false;
+ 	      }
+ 	    }
+ 	}
+ 
+       /* If we have an on-stack region that isn't associated with a decl
+ 	 or SSA name, then we have VLA/alloca, which is uninitialized.  */
+       return false;
+     }
+ }
+ 
  /* If this region is a decl_region, return the decl.
     Otherwise return NULL.  */
  
*************** region::get_offset () const
*** 188,194 ****
    return *m_cached_offset;
  }
  
! /* If the size of this region (in bytes) is known statically, write it to *OUT
     and return true.
     Otherwise return false.  */
  
--- 297,304 ----
    return *m_cached_offset;
  }
  
! /* Base class implementation of region::get_byte_size vfunc.
!    If the size of this region (in bytes) is known statically, write it to *OUT
     and return true.
     Otherwise return false.  */
  
*************** region::get_byte_size (byte_size_t *out)
*** 208,215 ****
    return true;
  }
  
! /* If the size of TYPE (in bits) is constant, write it to *OUT
!    and return true.
     Otherwise return false.  */
  
  bool
--- 318,346 ----
    return true;
  }
  
! /* Base implementation of region::get_byte_size_sval vfunc.  */
! 
! const svalue *
! region::get_byte_size_sval (region_model_manager *mgr) const
! {
!   tree type = get_type ();
! 
!   /* Bail out e.g. for heap-allocated regions.  */
!   if (!type)
!     return mgr->get_or_create_unknown_svalue (size_type_node);
! 
!   HOST_WIDE_INT bytes = int_size_in_bytes (type);
!   if (bytes == -1)
!     return mgr->get_or_create_unknown_svalue (size_type_node);
! 
!   tree byte_size = size_in_bytes (type);
!   if (TREE_TYPE (byte_size) != size_type_node)
!     byte_size = fold_build1 (NOP_EXPR, size_type_node, byte_size);
!   return mgr->get_or_create_constant_svalue (byte_size);
! }
! 
! /* Attempt to get the size of TYPE in bits.
!    If successful, return true and write the size to *OUT.
     Otherwise return false.  */
  
  bool
*************** region::get_bit_size (bit_size_t *out) c
*** 249,255 ****
  
  /* Get the field within RECORD_TYPE at BIT_OFFSET.  */
  
! static tree
  get_field_at_bit_offset (tree record_type, bit_offset_t bit_offset)
  {
    gcc_assert (TREE_CODE (record_type) == RECORD_TYPE);
--- 380,386 ----
  
  /* Get the field within RECORD_TYPE at BIT_OFFSET.  */
  
! tree
  get_field_at_bit_offset (tree record_type, bit_offset_t bit_offset)
  {
    gcc_assert (TREE_CODE (record_type) == RECORD_TYPE);
*************** region::calc_offset () const
*** 370,446 ****
        switch (iter_region->get_kind ())
  	{
  	case RK_FIELD:
- 	  {
- 	    const field_region *field_reg
- 	      = (const field_region *)iter_region;
- 	    iter_region = iter_region->get_parent_region ();
- 
- 	    /* Compare with e.g. gimple-fold.c's
- 	       fold_nonarray_ctor_reference.  */
- 	    tree field = field_reg->get_field ();
- 	    tree byte_offset = DECL_FIELD_OFFSET (field);
- 	    if (TREE_CODE (byte_offset) != INTEGER_CST)
- 	      return region_offset::make_symbolic (iter_region);
- 	    tree field_offset = DECL_FIELD_BIT_OFFSET (field);
- 	    /* Compute bit offset of the field.  */
- 	    offset_int bitoffset
- 	      = (wi::to_offset (field_offset)
- 		 + (wi::to_offset (byte_offset) << LOG2_BITS_PER_UNIT));
- 	    accum_bit_offset += bitoffset;
- 	  }
- 	  continue;
- 
  	case RK_ELEMENT:
  	  {
! 	    const element_region *element_reg
! 	      = (const element_region *)iter_region;
  	    iter_region = iter_region->get_parent_region ();
- 
- 	    if (tree idx_cst
- 		  = element_reg->get_index ()->maybe_get_constant ())
- 	      {
- 		gcc_assert (TREE_CODE (idx_cst) == INTEGER_CST);
- 
- 		tree elem_type = element_reg->get_type ();
- 		offset_int element_idx = wi::to_offset (idx_cst);
- 
- 		/* First, use int_size_in_bytes, to reject the case where we
- 		   have an incomplete type, or a non-constant value.  */
- 		HOST_WIDE_INT hwi_byte_size = int_size_in_bytes (elem_type);
- 		if (hwi_byte_size > 0)
- 		  {
- 		    offset_int element_bit_size
- 		      = hwi_byte_size << LOG2_BITS_PER_UNIT;
- 		    offset_int element_bit_offset
- 		      = element_idx * element_bit_size;
- 		    accum_bit_offset += element_bit_offset;
- 		    continue;
- 		  }
- 	      }
- 	    return region_offset::make_symbolic (iter_region);
  	  }
  	  continue;
  
! 	case RK_OFFSET:
! 	  {
! 	    const offset_region *offset_reg
! 	      = (const offset_region *)iter_region;
! 	    iter_region = iter_region->get_parent_region ();
! 
! 	    if (tree byte_offset_cst
! 		  = offset_reg->get_byte_offset ()->maybe_get_constant ())
! 	      {
! 		gcc_assert (TREE_CODE (byte_offset_cst) == INTEGER_CST);
! 		/* Use a signed value for the byte offset, to handle
! 		   negative offsets.  */
! 		HOST_WIDE_INT byte_offset
! 		  = wi::to_offset (byte_offset_cst).to_shwi ();
! 		HOST_WIDE_INT bit_offset = byte_offset * BITS_PER_UNIT;
! 		accum_bit_offset += bit_offset;
! 	      }
! 	    else
! 	      return region_offset::make_symbolic (iter_region);
! 	  }
  	  continue;
  
  	case RK_CAST:
--- 501,521 ----
        switch (iter_region->get_kind ())
  	{
  	case RK_FIELD:
  	case RK_ELEMENT:
+ 	case RK_OFFSET:
+ 	case RK_BIT_RANGE:
  	  {
! 	    bit_offset_t rel_bit_offset;
! 	    if (!iter_region->get_relative_concrete_offset (&rel_bit_offset))
! 	      return region_offset::make_symbolic
! 		(iter_region->get_parent_region ());
! 	    accum_bit_offset += rel_bit_offset;
  	    iter_region = iter_region->get_parent_region ();
  	  }
  	  continue;
  
! 	case RK_SIZED:
! 	  iter_region = iter_region->get_parent_region ();
  	  continue;
  
  	case RK_CAST:
*************** region::calc_offset () const
*** 458,476 ****
    return region_offset::make_concrete (iter_region, accum_bit_offset);
  }
  
! /* Copy from SRC_REG to DST_REG, using CTXT for any issues that occur.  */
  
! void
! region_model::copy_region (const region *dst_reg, const region *src_reg,
! 			   region_model_context *ctxt)
  {
!   gcc_assert (dst_reg);
!   gcc_assert (src_reg);
!   if (dst_reg == src_reg)
!     return;
  
!   const svalue *sval = get_store_value (src_reg);
!   set_value (dst_reg, sval, ctxt);
  }
  
  /* Dump a description of this region to stderr.  */
--- 533,572 ----
    return region_offset::make_concrete (iter_region, accum_bit_offset);
  }
  
! /* Base implementation of region::get_relative_concrete_offset vfunc.  */
  
! bool
! region::get_relative_concrete_offset (bit_offset_t *) const
  {
!   return false;
! }
  
! /* Attempt to get the position and size of this region expressed as a
!    concrete range of bytes relative to its parent.
!    If successful, return true and write to *OUT.
!    Otherwise return false.  */
! 
! bool
! region::get_relative_concrete_byte_range (byte_range *out) const
! {
!   /* We must have a concrete offset relative to the parent.  */
!   bit_offset_t rel_bit_offset;
!   if (!get_relative_concrete_offset (&rel_bit_offset))
!     return false;
!   /* ...which must be a whole number of bytes.  */
!   if (rel_bit_offset % BITS_PER_UNIT != 0)
!     return false;
!   byte_offset_t start_byte_offset = rel_bit_offset / BITS_PER_UNIT;
! 
!   /* We must have a concrete size, which must be a whole number
!      of bytes.  */
!   byte_size_t num_bytes;
!   if (!get_byte_size (&num_bytes))
!     return false;
! 
!   /* Success.  */
!   *out = byte_range (start_byte_offset, num_bytes);
!   return true;
  }
  
  /* Dump a description of this region to stderr.  */
*************** region::symbolic_for_unknown_ptr_p () co
*** 534,539 ****
--- 630,649 ----
    return false;
  }
  
+ /* Return true if this is a region for a decl with name DECL_NAME.
+    Intended for use when debugging (for assertions and conditional
+    breakpoints).  */
+ 
+ DEBUG_FUNCTION bool
+ region::is_named_decl_p (const char *decl_name) const
+ {
+   if (tree decl = maybe_get_decl ())
+     if (DECL_NAME (decl)
+ 	&& !strcmp (IDENTIFIER_POINTER (DECL_NAME (decl)), decl_name))
+       return true;
+   return false;
+ }
+ 
  /* region's ctor.  */
  
  region::region (complexity c, unsigned id, const region *parent, tree type)
*************** region::non_null_p () const
*** 583,588 ****
--- 693,712 ----
      }
  }
  
+ /* Return true iff this region is defined in terms of SVAL.  */
+ 
+ bool
+ region::involves_p (const svalue *sval) const
+ {
+   if (const symbolic_region *symbolic_reg = dyn_cast_symbolic_region ())
+     {
+       if (symbolic_reg->get_pointer ()->involves_p (sval))
+ 	return true;
+     }
+ 
+   return false;
+ }
+ 
  /* Comparator for trees to impose a deterministic ordering on
     T1 and T2.  */
  
*************** frame_region::dump_to_pp (pretty_printer
*** 720,732 ****
  
  const decl_region *
  frame_region::get_region_for_local (region_model_manager *mgr,
! 				    tree expr) const
  {
!   // TODO: could also check that VAR_DECLs are locals
!   gcc_assert (TREE_CODE (expr) == PARM_DECL
! 	      || TREE_CODE (expr) == VAR_DECL
! 	      || TREE_CODE (expr) == SSA_NAME
! 	      || TREE_CODE (expr) == RESULT_DECL);
  
    /* Ideally we'd use mutable here.  */
    map_t &mutable_locals = const_cast <map_t &> (m_locals);
--- 844,892 ----
  
  const decl_region *
  frame_region::get_region_for_local (region_model_manager *mgr,
! 				    tree expr,
! 				    const region_model_context *ctxt) const
  {
!   if (CHECKING_P)
!     {
!       /* Verify that EXPR is a local or SSA name, and that it's for the
! 	 correct function for this stack frame.  */
!       gcc_assert (TREE_CODE (expr) == PARM_DECL
! 		  || TREE_CODE (expr) == VAR_DECL
! 		  || TREE_CODE (expr) == SSA_NAME
! 		  || TREE_CODE (expr) == RESULT_DECL);
!       switch (TREE_CODE (expr))
! 	{
! 	default:
! 	  gcc_unreachable ();
! 	case VAR_DECL:
! 	  gcc_assert (!is_global_var (expr));
! 	  /* Fall through.  */
! 	case PARM_DECL:
! 	case RESULT_DECL:
! 	  gcc_assert (DECL_CONTEXT (expr) == m_fun->decl);
! 	  break;
! 	case SSA_NAME:
! 	  {
! 	    if (tree var = SSA_NAME_VAR (expr))
! 	      {
! 		if (DECL_P (var))
! 		  gcc_assert (DECL_CONTEXT (var) == m_fun->decl);
! 	      }
! 	    else if (ctxt)
! 	      if (const extrinsic_state *ext_state = ctxt->get_ext_state ())
! 		if (const supergraph *sg
! 		    = ext_state->get_engine ()->get_supergraph ())
! 		  {
! 		    const gimple *def_stmt = SSA_NAME_DEF_STMT (expr);
! 		    const supernode *snode
! 		      = sg->get_supernode_for_stmt (def_stmt);
! 		    gcc_assert (snode->get_function () == m_fun);
! 		  }
! 	  }
! 	  break;
! 	}
!     }
  
    /* Ideally we'd use mutable here.  */
    map_t &mutable_locals = const_cast <map_t &> (m_locals);
*************** root_region::dump_to_pp (pretty_printer
*** 856,862 ****
  symbolic_region::symbolic_region (unsigned id, region *parent,
  				  const svalue *sval_ptr)
  : region (complexity::from_pair (parent, sval_ptr), id, parent,
! 	  TREE_TYPE (sval_ptr->get_type ())),
    m_sval_ptr (sval_ptr)
  {
  }
--- 1016,1024 ----
  symbolic_region::symbolic_region (unsigned id, region *parent,
  				  const svalue *sval_ptr)
  : region (complexity::from_pair (parent, sval_ptr), id, parent,
! 	  (sval_ptr->get_type ()
! 	   ? TREE_TYPE (sval_ptr->get_type ())
! 	   : NULL_TREE)),
    m_sval_ptr (sval_ptr)
  {
  }
*************** symbolic_region::dump_to_pp (pretty_prin
*** 885,892 ****
      {
        pp_string (pp, "symbolic_region(");
        get_parent_region ()->dump_to_pp (pp, simple);
!       pp_string (pp, ", ");
!       print_quoted_type (pp, get_type ());
        pp_string (pp, ", ");
        m_sval_ptr->dump_to_pp (pp, simple);
        pp_string (pp, ")");
--- 1047,1057 ----
      {
        pp_string (pp, "symbolic_region(");
        get_parent_region ()->dump_to_pp (pp, simple);
!       if (get_type ())
! 	{
! 	  pp_string (pp, ", ");
! 	  print_quoted_type (pp, get_type ());
! 	}
        pp_string (pp, ", ");
        m_sval_ptr->dump_to_pp (pp, simple);
        pp_string (pp, ")");
*************** decl_region::get_svalue_for_initializer
*** 984,990 ****
  	 which can fail if we have a region with unknown size
  	 (e.g. "extern const char arr[];").  */
        const binding_key *binding
! 	= binding_key::make (mgr->get_store_manager (), this, BK_direct);
        if (binding->symbolic_p ())
  	return NULL;
  
--- 1149,1155 ----
  	 which can fail if we have a region with unknown size
  	 (e.g. "extern const char arr[];").  */
        const binding_key *binding
! 	= binding_key::make (mgr->get_store_manager (), this);
        if (binding->symbolic_p ())
  	return NULL;
  
*************** decl_region::get_svalue_for_initializer
*** 1007,1012 ****
--- 1172,1266 ----
    return m.get_rvalue (path_var (init, 0), NULL);
  }
  
+ /* Subroutine of symnode_requires_tracking_p; return true if REF
+    might imply that we should be tracking the value of its decl.  */
+ 
+ static bool
+ ipa_ref_requires_tracking (ipa_ref *ref)
+ {
+   /* If we have a load/store/alias of the symbol, then we'll track
+      the decl's value.  */
+   if (ref->use != IPA_REF_ADDR)
+     return true;
+ 
+   if (ref->stmt == NULL)
+     return true;
+ 
+   switch (ref->stmt->code)
+     {
+     default:
+       return true;
+     case GIMPLE_CALL:
+       {
+ 	cgraph_node *caller_cnode = dyn_cast <cgraph_node *> (ref->referring);
+ 	if (caller_cnode == NULL)
+ 	  return true;
+ 	cgraph_edge *edge = caller_cnode->get_edge (ref->stmt);
+ 	if (!edge)
+ 	  return true;
+ 	if (edge->callee == NULL)
+ 	  return true; /* e.g. call through function ptr.  */
+ 	if (edge->callee->definition)
+ 	  return true;
+ 	/* If we get here, then this ref is a pointer passed to
+ 	   a function we don't have the definition for.  */
+ 	return false;
+       }
+       break;
+     case GIMPLE_ASM:
+       {
+ 	const gasm *asm_stmt = as_a <const gasm *> (ref->stmt);
+ 	if (gimple_asm_noutputs (asm_stmt) > 0)
+ 	  return true;
+ 	if (gimple_asm_nclobbers (asm_stmt) > 0)
+ 	  return true;
+ 	/* If we get here, then this ref is the decl being passed
+ 	   by pointer to asm with no outputs.  */
+ 	return false;
+       }
+       break;
+     }
+ }
+ 
+ /* Determine if the decl for SYMNODE should have binding_clusters
+    in our state objects; return false to optimize away tracking
+    certain decls in our state objects, as an optimization.  */
+ 
+ static bool
+ symnode_requires_tracking_p (symtab_node *symnode)
+ {
+   gcc_assert (symnode);
+   if (symnode->externally_visible)
+     return true;
+   tree context_fndecl = DECL_CONTEXT (symnode->decl);
+   if (context_fndecl == NULL)
+     return true;
+   if (TREE_CODE (context_fndecl) != FUNCTION_DECL)
+     return true;
+   for (auto ref : symnode->ref_list.referring)
+     if (ipa_ref_requires_tracking (ref))
+       return true;
+ 
+   /* If we get here, then we don't have uses of this decl that require
+      tracking; we never read from it or write to it explicitly.  */
+   return false;
+ }
+ 
+ /* Subroutine of decl_region ctor: determine whether this decl_region
+    can have binding_clusters; return false to optimize away tracking
+    of certain decls in our state objects, as an optimization.  */
+ 
+ bool
+ decl_region::calc_tracked_p (tree decl)
+ {
+   /* Precondition of symtab_node::get.  */
+   if (TREE_CODE (decl) == VAR_DECL
+       && (TREE_STATIC (decl) || DECL_EXTERNAL (decl) || in_lto_p))
+     if (symtab_node *symnode = symtab_node::get (decl))
+       return symnode_requires_tracking_p (symnode);
+   return true;
+ }
+ 
  /* class field_region : public region.  */
  
  /* Implementation of region::dump_to_pp vfunc for field_region.  */
*************** field_region::dump_to_pp (pretty_printer
*** 1030,1035 ****
--- 1284,1309 ----
      }
  }
  
+ /* Implementation of region::get_relative_concrete_offset vfunc
+    for field_region.  */
+ 
+ bool
+ field_region::get_relative_concrete_offset (bit_offset_t *out) const
+ {
+   /* Compare with e.g. gimple-fold.cc's
+      fold_nonarray_ctor_reference.  */
+   tree byte_offset = DECL_FIELD_OFFSET (m_field);
+   if (TREE_CODE (byte_offset) != INTEGER_CST)
+     return false;
+   tree field_offset = DECL_FIELD_BIT_OFFSET (m_field);
+   /* Compute bit offset of the field.  */
+   offset_int bitoffset
+     = (wi::to_offset (field_offset)
+        + (wi::to_offset (byte_offset) << LOG2_BITS_PER_UNIT));
+   *out = bitoffset;
+   return true;
+ }
+ 
  /* class element_region : public region.  */
  
  /* Implementation of region::accept vfunc for element_region.  */
*************** element_region::dump_to_pp (pretty_print
*** 1067,1072 ****
--- 1341,1375 ----
      }
  }
  
+ /* Implementation of region::get_relative_concrete_offset vfunc
+    for element_region.  */
+ 
+ bool
+ element_region::get_relative_concrete_offset (bit_offset_t *out) const
+ {
+   if (tree idx_cst = m_index->maybe_get_constant ())
+     {
+       gcc_assert (TREE_CODE (idx_cst) == INTEGER_CST);
+ 
+       tree elem_type = get_type ();
+       offset_int element_idx = wi::to_offset (idx_cst);
+ 
+       /* First, use int_size_in_bytes, to reject the case where we
+ 	 have an incomplete type, or a non-constant value.  */
+       HOST_WIDE_INT hwi_byte_size = int_size_in_bytes (elem_type);
+       if (hwi_byte_size > 0)
+ 	{
+ 	  offset_int element_bit_size
+ 	    = hwi_byte_size << LOG2_BITS_PER_UNIT;
+ 	  offset_int element_bit_offset
+ 	    = element_idx * element_bit_size;
+ 	  *out = element_bit_offset;
+ 	  return true;
+ 	}
+     }
+   return false;
+ }
+ 
  /* class offset_region : public region.  */
  
  /* Implementation of region::accept vfunc for offset_region.  */
*************** offset_region::dump_to_pp (pretty_printe
*** 1103,1108 ****
--- 1406,1491 ----
      }
  }
  
+ /* Implementation of region::get_relative_concrete_offset vfunc
+    for offset_region.  */
+ 
+ bool
+ offset_region::get_relative_concrete_offset (bit_offset_t *out) const
+ {
+   if (tree byte_offset_cst = m_byte_offset->maybe_get_constant ())
+     {
+       gcc_assert (TREE_CODE (byte_offset_cst) == INTEGER_CST);
+       /* Use a signed value for the byte offset, to handle
+ 	 negative offsets.  */
+       HOST_WIDE_INT byte_offset
+ 	= wi::to_offset (byte_offset_cst).to_shwi ();
+       HOST_WIDE_INT bit_offset = byte_offset * BITS_PER_UNIT;
+       *out = bit_offset;
+       return true;
+     }
+   return false;
+ }
+ 
+ /* class sized_region : public region.  */
+ 
+ /* Implementation of region::accept vfunc for sized_region.  */
+ 
+ void
+ sized_region::accept (visitor *v) const
+ {
+   region::accept (v);
+   m_byte_size_sval->accept (v);
+ }
+ 
+ /* Implementation of region::dump_to_pp vfunc for sized_region.  */
+ 
+ void
+ sized_region::dump_to_pp (pretty_printer *pp, bool simple) const
+ {
+   if (simple)
+     {
+       pp_string (pp, "SIZED_REG(");
+       get_parent_region ()->dump_to_pp (pp, simple);
+       pp_string (pp, ", ");
+       m_byte_size_sval->dump_to_pp (pp, simple);
+       pp_string (pp, ")");
+     }
+   else
+     {
+       pp_string (pp, "sized_region(");
+       get_parent_region ()->dump_to_pp (pp, simple);
+       pp_string (pp, ", ");
+       m_byte_size_sval->dump_to_pp (pp, simple);
+       pp_printf (pp, ")");
+     }
+ }
+ 
+ /* Implementation of region::get_byte_size vfunc for sized_region.  */
+ 
+ bool
+ sized_region::get_byte_size (byte_size_t *out) const
+ {
+   if (tree cst = m_byte_size_sval->maybe_get_constant ())
+     {
+       gcc_assert (TREE_CODE (cst) == INTEGER_CST);
+       *out = tree_to_uhwi (cst);
+       return true;
+     }
+   return false;
+ }
+ 
+ /* Implementation of region::get_bit_size vfunc for sized_region.  */
+ 
+ bool
+ sized_region::get_bit_size (bit_size_t *out) const
+ {
+   byte_size_t byte_size;
+   if (!get_byte_size (&byte_size))
+     return false;
+   *out = byte_size * BITS_PER_UNIT;
+   return true;
+ }
+ 
  /* class cast_region : public region.  */
  
  /* Implementation of region::accept vfunc for cast_region.  */
*************** string_region::dump_to_pp (pretty_printe
*** 1185,1190 ****
--- 1568,1642 ----
      }
  }
  
+ /* class bit_range_region : public region.  */
+ 
+ /* Implementation of region::dump_to_pp vfunc for bit_range_region.  */
+ 
+ void
+ bit_range_region::dump_to_pp (pretty_printer *pp, bool simple) const
+ {
+   if (simple)
+     {
+       pp_string (pp, "BIT_RANGE_REG(");
+       get_parent_region ()->dump_to_pp (pp, simple);
+       pp_string (pp, ", ");
+       m_bits.dump_to_pp (pp);
+       pp_string (pp, ")");
+     }
+   else
+     {
+       pp_string (pp, "bit_range_region(");
+       get_parent_region ()->dump_to_pp (pp, simple);
+       pp_string (pp, ", ");
+       m_bits.dump_to_pp (pp);
+       pp_printf (pp, ")");
+     }
+ }
+ 
+ /* Implementation of region::get_byte_size vfunc for bit_range_region.  */
+ 
+ bool
+ bit_range_region::get_byte_size (byte_size_t *out) const
+ {
+   if (m_bits.m_size_in_bits % BITS_PER_UNIT == 0)
+     {
+       *out = m_bits.m_size_in_bits / BITS_PER_UNIT;
+       return true;
+     }
+   return false;
+ }
+ 
+ /* Implementation of region::get_bit_size vfunc for bit_range_region.  */
+ 
+ bool
+ bit_range_region::get_bit_size (bit_size_t *out) const
+ {
+   *out = m_bits.m_size_in_bits;
+   return true;
+ }
+ 
+ /* Implementation of region::get_byte_size_sval vfunc for bit_range_region.  */
+ 
+ const svalue *
+ bit_range_region::get_byte_size_sval (region_model_manager *mgr) const
+ {
+   if (m_bits.m_size_in_bits % BITS_PER_UNIT != 0)
+     return mgr->get_or_create_unknown_svalue (size_type_node);
+ 
+   HOST_WIDE_INT num_bytes = m_bits.m_size_in_bits.to_shwi () / BITS_PER_UNIT;
+   return mgr->get_or_create_int_cst (size_type_node, num_bytes);
+ }
+ 
+ /* Implementation of region::get_relative_concrete_offset vfunc for
+    bit_range_region.  */
+ 
+ bool
+ bit_range_region::get_relative_concrete_offset (bit_offset_t *out) const
+ {
+   *out = m_bits.get_start_bit_offset ();
+   return true;
+ }
+ 
  /* class unknown_region : public region.  */
  
  /* Implementation of region::dump_to_pp vfunc for unknown_region.  */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/region.h gcc-12.1.0/gcc/analyzer/region.h
*** gcc-11.3.0/gcc/analyzer/region.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/region.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Regions of memory.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Regions of memory.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 25,30 ****
--- 25,42 ----
  
  namespace ana {
  
+ /* An enum for identifying different spaces within memory.  */
+ 
+ enum memory_space
+ {
+   MEMSPACE_UNKNOWN,
+   MEMSPACE_CODE,
+   MEMSPACE_GLOBALS,
+   MEMSPACE_STACK,
+   MEMSPACE_HEAP,
+   MEMSPACE_READONLY_DATA
+ };
+ 
  /* An enum for discriminating between the different concrete subclasses
     of region.  */
  
*************** enum region_kind
*** 43,52 ****
--- 55,66 ----
    RK_FIELD,
    RK_ELEMENT,
    RK_OFFSET,
+   RK_SIZED,
    RK_CAST,
    RK_HEAP_ALLOCATED,
    RK_ALLOCA,
    RK_STRING,
+   RK_BIT_RANGE,
    RK_UNKNOWN
  };
  
*************** enum region_kind
*** 70,79 ****
--- 84,95 ----
       field_region (RK_FIELD)
       element_region (RK_ELEMENT)
       offset_region (RK_OFFSET)
+      sized_region (RK_SIZED)
       cast_region (RK_CAST)
       heap_allocated_region (RK_HEAP_ALLOCATED)
       alloca_region (RK_ALLOCA)
       string_region (RK_STRING)
+      bit_range_region (RK_BIT_RANGE)
       unknown_region (RK_UNKNOWN).  */
  
  /* Abstract base class for representing ways of accessing chunks of memory.
*************** public:
*** 107,116 ****
--- 123,136 ----
    dyn_cast_element_region () const { return NULL; }
    virtual const offset_region *
    dyn_cast_offset_region () const { return NULL; }
+   virtual const sized_region *
+   dyn_cast_sized_region () const { return NULL; }
    virtual const cast_region *
    dyn_cast_cast_region () const { return NULL; }
    virtual const string_region *
    dyn_cast_string_region () const { return NULL; }
+   virtual const bit_range_region *
+   dyn_cast_bit_range_region () const { return NULL; }
  
    virtual void accept (visitor *v) const;
  
*************** public:
*** 119,124 ****
--- 139,146 ----
    bool base_region_p () const;
    bool descendent_of_p (const region *elder) const;
    const frame_region *maybe_get_frame_region () const;
+   enum memory_space get_memory_space () const;
+   bool can_have_initial_svalue_p () const;
  
    tree maybe_get_decl () const;
  
*************** public:
*** 137,145 ****
  
    static int cmp_ptr_ptr (const void *, const void *);
  
    region_offset get_offset () const;
!   bool get_byte_size (byte_size_t *out) const;
!   bool get_bit_size (bit_size_t *out) const;
  
    void
    get_subregions_for_binding (region_model_manager *mgr,
--- 159,192 ----
  
    static int cmp_ptr_ptr (const void *, const void *);
  
+   bool involves_p (const svalue *sval) const;
+ 
    region_offset get_offset () const;
! 
!   /* Attempt to get the size of this region as a concrete number of bytes.
!      If successful, return true and write the size to *OUT.
!      Otherwise return false.  */
!   virtual bool get_byte_size (byte_size_t *out) const;
! 
!   /* Attempt to get the size of this region as a concrete number of bits.
!      If successful, return true and write the size to *OUT.
!      Otherwise return false.  */
!   virtual bool get_bit_size (bit_size_t *out) const;
! 
!   /* Get a symbolic value describing the size of this region in bytes
!      (which could be "unknown").  */
!   virtual const svalue *get_byte_size_sval (region_model_manager *mgr) const;
! 
!   /* Attempt to get the offset in bits of this region relative to its parent.
!      If successful, return true and write to *OUT.
!      Otherwise return false.  */
!   virtual bool get_relative_concrete_offset (bit_offset_t *out) const;
! 
!   /* Attempt to get the position and size of this region expressed as a
!      concrete range of bytes relative to its parent.
!      If successful, return true and write to *OUT.
!      Otherwise return false.  */
!   bool get_relative_concrete_byte_range (byte_range *out) const;
  
    void
    get_subregions_for_binding (region_model_manager *mgr,
*************** public:
*** 150,157 ****
--- 197,211 ----
  
    bool symbolic_for_unknown_ptr_p () const;
  
+   /* For most base regions it makes sense to track the bindings of the region
+      within the store.  As an optimization, some are not tracked (to avoid
+      bloating the store object with redundant binding clusters).  */
+   virtual bool tracked_p () const { return true; }
+ 
    const complexity &get_complexity () const { return m_complexity; }
  
+   bool is_named_decl_p (const char *decl_name) const;
+ 
   protected:
    region (complexity c, unsigned id, const region *parent, tree type);
  
*************** public:
*** 259,272 ****
    /* Accessors.  */
    const frame_region *get_calling_frame () const { return m_calling_frame; }
    function *get_function () const { return m_fun; }
    int get_index () const { return m_index; }
    int get_stack_depth () const { return m_index + 1; }
  
!   const decl_region *get_region_for_local (region_model_manager *mgr,
! 					   tree expr) const;
  
    unsigned get_num_locals () const { return m_locals.elements (); }
  
   private:
    const frame_region *m_calling_frame;
    function *m_fun;
--- 313,332 ----
    /* Accessors.  */
    const frame_region *get_calling_frame () const { return m_calling_frame; }
    function *get_function () const { return m_fun; }
+   tree get_fndecl () const { return get_function ()->decl; }
    int get_index () const { return m_index; }
    int get_stack_depth () const { return m_index + 1; }
  
!   const decl_region *
!   get_region_for_local (region_model_manager *mgr,
! 			tree expr,
! 			const region_model_context *ctxt) const;
  
    unsigned get_num_locals () const { return m_locals.elements (); }
  
+   /* Implemented in region-model-manager.cc.  */
+   void dump_untracked_regions () const;
+ 
   private:
    const frame_region *m_calling_frame;
    function *m_fun;
*************** template <> struct default_hash_traits<s
*** 581,593 ****
  namespace ana {
  
  /* Concrete region subclass representing the memory occupied by a
!    variable (whether for a global or a local).  */
  
  class decl_region : public region
  {
  public:
    decl_region (unsigned id, const region *parent, tree decl)
!   : region (complexity (parent), id, parent, TREE_TYPE (decl)), m_decl (decl)
    {}
  
    enum region_kind get_kind () const FINAL OVERRIDE { return RK_DECL; }
--- 641,655 ----
  namespace ana {
  
  /* Concrete region subclass representing the memory occupied by a
!    variable (whether for a global or a local).
!    Also used for representing SSA names, as if they were locals.  */
  
  class decl_region : public region
  {
  public:
    decl_region (unsigned id, const region *parent, tree decl)
!   : region (complexity (parent), id, parent, TREE_TYPE (decl)), m_decl (decl),
!     m_tracked (calc_tracked_p (decl))
    {}
  
    enum region_kind get_kind () const FINAL OVERRIDE { return RK_DECL; }
*************** public:
*** 596,601 ****
--- 658,665 ----
  
    void dump_to_pp (pretty_printer *pp, bool simple) const FINAL OVERRIDE;
  
+   bool tracked_p () const FINAL OVERRIDE { return m_tracked; }
+ 
    tree get_decl () const { return m_decl; }
    int get_stack_depth () const;
  
*************** public:
*** 605,611 ****
--- 669,683 ----
    const svalue *get_svalue_for_initializer (region_model_manager *mgr) const;
  
  private:
+   static bool calc_tracked_p (tree decl);
+ 
    tree m_decl;
+ 
+   /* Cached result of calc_tracked_p, so that we can quickly determine when
+      we don't to track a binding_cluster for this decl (to avoid bloating
+      store objects).
+      This can be debugged using -fdump-analyzer-untracked.  */
+   bool m_tracked;
  };
  
  } // namespace ana
*************** public:
*** 670,675 ****
--- 742,749 ----
  
    tree get_field () const { return m_field; }
  
+   bool get_relative_concrete_offset (bit_offset_t *out) const FINAL OVERRIDE;
+ 
  private:
    tree m_field;
  };
*************** public:
*** 751,756 ****
--- 825,833 ----
  
    const svalue *get_index () const { return m_index; }
  
+   virtual bool
+   get_relative_concrete_offset (bit_offset_t *out) const FINAL OVERRIDE;
+ 
  private:
    const svalue *m_index;
  };
*************** public:
*** 833,838 ****
--- 910,917 ----
  
    const svalue *get_byte_offset () const { return m_byte_offset; }
  
+   bool get_relative_concrete_offset (bit_offset_t *out) const FINAL OVERRIDE;
+ 
  private:
    const svalue *m_byte_offset;
  };
*************** template <> struct default_hash_traits<o
*** 855,860 ****
--- 934,1032 ----
  
  namespace ana {
  
+ /* A region that is size BYTES_SIZE_SVAL in size within its parent
+    region (or possibly larger, which would lead to an overflow.  */
+ 
+ class sized_region : public region
+ {
+ public:
+   /* A support class for uniquifying instances of sized_region.  */
+   struct key_t
+   {
+     key_t (const region *parent, tree element_type,
+ 	   const svalue *byte_size_sval)
+       : m_parent (parent), m_element_type (element_type),
+ 	m_byte_size_sval (byte_size_sval)
+     {
+       gcc_assert (byte_size_sval);
+     }
+ 
+     hashval_t hash () const
+     {
+       inchash::hash hstate;
+       hstate.add_ptr (m_parent);
+       hstate.add_ptr (m_element_type);
+       hstate.add_ptr (m_byte_size_sval);
+       return hstate.end ();
+     }
+ 
+     bool operator== (const key_t &other) const
+     {
+       return (m_parent == other.m_parent
+ 	      && m_element_type == other.m_element_type
+ 	      && m_byte_size_sval == other.m_byte_size_sval);
+     }
+ 
+     void mark_deleted () { m_byte_size_sval = reinterpret_cast<const svalue *> (1); }
+     void mark_empty () { m_byte_size_sval = NULL; }
+     bool is_deleted () const
+     {
+       return m_byte_size_sval == reinterpret_cast<const svalue *> (1);
+     }
+     bool is_empty () const { return m_byte_size_sval == NULL; }
+ 
+     const region *m_parent;
+     tree m_element_type;
+     const svalue *m_byte_size_sval;
+     const svalue *m_end_offset;
+   };
+ 
+   sized_region (unsigned id, const region *parent, tree type,
+ 		const svalue *byte_size_sval)
+   : region (complexity::from_pair (parent, byte_size_sval),
+ 	    id, parent, type),
+     m_byte_size_sval (byte_size_sval)
+   {}
+ 
+   enum region_kind get_kind () const FINAL OVERRIDE { return RK_SIZED; }
+   const sized_region *
+   dyn_cast_sized_region () const FINAL OVERRIDE { return this; }
+ 
+   void accept (visitor *v) const FINAL OVERRIDE;
+ 
+   void dump_to_pp (pretty_printer *pp, bool simple) const FINAL OVERRIDE;
+ 
+   bool get_byte_size (byte_size_t *out) const FINAL OVERRIDE;
+   bool get_bit_size (bit_size_t *out) const FINAL OVERRIDE;
+ 
+   const svalue *
+   get_byte_size_sval (region_model_manager *) const FINAL OVERRIDE
+   {
+     return m_byte_size_sval;
+   }
+ 
+ private:
+   const svalue *m_byte_size_sval;
+ };
+ 
+ } // namespace ana
+ 
+ template <>
+ template <>
+ inline bool
+ is_a_helper <const sized_region *>::test (const region *reg)
+ {
+   return reg->get_kind () == RK_SIZED;
+ }
+ 
+ template <> struct default_hash_traits<sized_region::key_t>
+ : public member_function_hash_traits<sized_region::key_t>
+ {
+   static const bool empty_zero_p = true;
+ };
+ 
+ namespace ana {
+ 
  /* A region that views another region using a different type.  */
  
  class cast_region : public region
*************** is_a_helper <const string_region *>::tes
*** 993,998 ****
--- 1165,1256 ----
  
  namespace ana {
  
+ /* A region for a specific range of bits within another region.  */
+ 
+ class bit_range_region : public region
+ {
+ public:
+   /* A support class for uniquifying instances of bit_range_region.  */
+   struct key_t
+   {
+     key_t (const region *parent, tree type, const bit_range &bits)
+     : m_parent (parent), m_type (type), m_bits (bits)
+     {
+       gcc_assert (parent);
+     }
+ 
+     hashval_t hash () const
+     {
+       inchash::hash hstate;
+       hstate.add_ptr (m_parent);
+       hstate.add_ptr (m_type);
+       hstate.add_wide_int (m_bits.m_start_bit_offset);
+       hstate.add_wide_int (m_bits.m_size_in_bits);
+       return hstate.end ();
+     }
+ 
+     bool operator== (const key_t &other) const
+     {
+       return (m_parent == other.m_parent
+ 	      && m_type == other.m_type
+ 	      && m_bits == other.m_bits);
+     }
+ 
+     void mark_deleted () { m_parent = reinterpret_cast<const region *> (1); }
+     void mark_empty () { m_parent = NULL; }
+     bool is_deleted () const
+     {
+       return m_parent == reinterpret_cast<const region *> (1);
+     }
+     bool is_empty () const { return m_parent == NULL; }
+ 
+     const region *m_parent;
+     tree m_type;
+     bit_range m_bits;
+   };
+ 
+   bit_range_region (unsigned id, const region *parent, tree type,
+ 		    const bit_range &bits)
+   : region (complexity (parent), id, parent, type),
+     m_bits (bits)
+   {}
+ 
+   const bit_range_region *
+   dyn_cast_bit_range_region () const FINAL OVERRIDE { return this; }
+ 
+   enum region_kind get_kind () const FINAL OVERRIDE { return RK_BIT_RANGE; }
+ 
+   void dump_to_pp (pretty_printer *pp, bool simple) const FINAL OVERRIDE;
+ 
+   const bit_range &get_bits () const { return m_bits; }
+ 
+   bool get_byte_size (byte_size_t *out) const FINAL OVERRIDE;
+   bool get_bit_size (bit_size_t *out) const FINAL OVERRIDE;
+   const svalue *get_byte_size_sval (region_model_manager *mgr) const FINAL OVERRIDE;
+   bool get_relative_concrete_offset (bit_offset_t *out) const FINAL OVERRIDE;
+ 
+ private:
+   bit_range m_bits;
+ };
+ 
+ } // namespace ana
+ 
+ template <>
+ template <>
+ inline bool
+ is_a_helper <const bit_range_region *>::test (const region *reg)
+ {
+   return reg->get_kind () == RK_BIT_RANGE;
+ }
+ 
+ template <> struct default_hash_traits<bit_range_region::key_t>
+ : public member_function_hash_traits<bit_range_region::key_t>
+ {
+   static const bool empty_zero_p = true;
+ };
+ 
+ namespace ana {
+ 
  /* An unknown region, for handling unimplemented tree codes.  */
  
  class unknown_region : public region
diff -Nrcpad gcc-11.3.0/gcc/analyzer/sm-file.cc gcc-12.1.0/gcc/analyzer/sm-file.cc
*** gcc-11.3.0/gcc/analyzer/sm-file.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/sm-file.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* A state machine for detecting misuses of <stdio.h>'s FILE * API.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* A state machine for detecting misuses of <stdio.h>'s FILE * API.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** public:
*** 77,85 ****
    void on_condition (sm_context *sm_ctxt,
  		     const supernode *node,
  		     const gimple *stmt,
! 		     tree lhs,
  		     enum tree_code op,
! 		     tree rhs) const FINAL OVERRIDE;
  
    bool can_purge_p (state_t s) const FINAL OVERRIDE;
    pending_diagnostic *on_leak (tree var) const FINAL OVERRIDE;
--- 77,85 ----
    void on_condition (sm_context *sm_ctxt,
  		     const supernode *node,
  		     const gimple *stmt,
! 		     const svalue *lhs,
  		     enum tree_code op,
! 		     const svalue *rhs) const FINAL OVERRIDE;
  
    bool can_purge_p (state_t s) const FINAL OVERRIDE;
    pending_diagnostic *on_leak (tree var) const FINAL OVERRIDE;
*************** public:
*** 125,135 ****
        return label_text::borrow ("opened here");
      if (change.m_old_state == m_sm.m_unchecked
  	&& change.m_new_state == m_sm.m_nonnull)
!       return change.formatted_print ("assuming %qE is non-NULL",
! 				     change.m_expr);
      if (change.m_new_state == m_sm.m_null)
!       return change.formatted_print ("assuming %qE is NULL",
! 				     change.m_expr);
      return label_text ();
    }
  
--- 125,145 ----
        return label_text::borrow ("opened here");
      if (change.m_old_state == m_sm.m_unchecked
  	&& change.m_new_state == m_sm.m_nonnull)
!       {
! 	if (change.m_expr)
! 	  return change.formatted_print ("assuming %qE is non-NULL",
! 					 change.m_expr);
! 	else
! 	  return change.formatted_print ("assuming FILE * is non-NULL");
!       }
      if (change.m_new_state == m_sm.m_null)
!       {
! 	if (change.m_expr)
! 	  return change.formatted_print ("assuming %qE is NULL",
! 					 change.m_expr);
! 	else
! 	  return change.formatted_print ("assuming FILE * is NULL");
!       }
      return label_text ();
    }
  
*************** public:
*** 147,155 ****
  
    const char *get_kind () const FINAL OVERRIDE { return "double_fclose"; }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
!     return warning_at (rich_loc, OPT_Wanalyzer_double_fclose,
  		       "double %<fclose%> of FILE %qE",
  		       m_arg);
    }
--- 157,170 ----
  
    const char *get_kind () const FINAL OVERRIDE { return "double_fclose"; }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_double_fclose;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
!     return warning_at (rich_loc, get_controlling_option (),
  		       "double %<fclose%> of FILE %qE",
  		       m_arg);
    }
*************** public:
*** 187,201 ****
  
    const char *get_kind () const FINAL OVERRIDE { return "file_leak"; }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      diagnostic_metadata m;
      /* CWE-775: "Missing Release of File Descriptor or Handle after
         Effective Lifetime". */
      m.add_cwe (775);
!     return warning_meta (rich_loc, m, OPT_Wanalyzer_file_leak,
! 			 "leak of FILE %qE",
! 			 m_arg);
    }
  
    label_text describe_state_change (const evdesc::state_change &change)
--- 202,225 ----
  
    const char *get_kind () const FINAL OVERRIDE { return "file_leak"; }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_file_leak;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      diagnostic_metadata m;
      /* CWE-775: "Missing Release of File Descriptor or Handle after
         Effective Lifetime". */
      m.add_cwe (775);
!     if (m_arg)
!       return warning_meta (rich_loc, m, get_controlling_option (),
! 			   "leak of FILE %qE",
! 			   m_arg);
!     else
!       return warning_meta (rich_loc, m, get_controlling_option (),
! 			   "leak of FILE");
    }
  
    label_text describe_state_change (const evdesc::state_change &change)
*************** public:
*** 212,221 ****
    label_text describe_final_event (const evdesc::final_event &ev) FINAL OVERRIDE
    {
      if (m_fopen_event.known_p ())
!       return ev.formatted_print ("%qE leaks here; was opened at %@",
! 				 ev.m_expr, &m_fopen_event);
      else
!       return ev.formatted_print ("%qE leaks here", ev.m_expr);
    }
  
  private:
--- 236,256 ----
    label_text describe_final_event (const evdesc::final_event &ev) FINAL OVERRIDE
    {
      if (m_fopen_event.known_p ())
!       {
! 	if (ev.m_expr)
! 	  return ev.formatted_print ("%qE leaks here; was opened at %@",
! 				     ev.m_expr, &m_fopen_event);
! 	else
! 	  return ev.formatted_print ("leaks here; was opened at %@",
! 				     &m_fopen_event);
!       }
      else
!       {
! 	if (ev.m_expr)
! 	  return ev.formatted_print ("%qE leaks here", ev.m_expr);
! 	else
! 	  return ev.formatted_print ("leaks here");
!       }
    }
  
  private:
*************** is_file_using_fn_p (tree fndecl)
*** 312,320 ****
  
    /* Also support variants of these names prefixed with "_IO_".  */
    const char *name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
!   if (strncmp (name, "_IO_", 4) == 0)
!     if (fs.contains_name_p (name + 4))
!       return true;
  
    return false;
  }
--- 347,354 ----
  
    /* Also support variants of these names prefixed with "_IO_".  */
    const char *name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
!   if (startswith (name, "_IO_") && fs.contains_name_p (name + 4))
!     return true;
  
    return false;
  }
*************** void
*** 382,400 ****
  fileptr_state_machine::on_condition (sm_context *sm_ctxt,
  				     const supernode *node,
  				     const gimple *stmt,
! 				     tree lhs,
  				     enum tree_code op,
! 				     tree rhs) const
  {
!   if (!zerop (rhs))
      return;
  
    // TODO: has to be a FILE *, specifically
!   if (TREE_CODE (TREE_TYPE (lhs)) != POINTER_TYPE)
      return;
- 
    // TODO: has to be a FILE *, specifically
!   if (TREE_CODE (TREE_TYPE (rhs)) != POINTER_TYPE)
      return;
  
    if (op == NE_EXPR)
--- 416,433 ----
  fileptr_state_machine::on_condition (sm_context *sm_ctxt,
  				     const supernode *node,
  				     const gimple *stmt,
! 				     const svalue *lhs,
  				     enum tree_code op,
! 				     const svalue *rhs) const
  {
!   if (!rhs->all_zeroes_p ())
      return;
  
    // TODO: has to be a FILE *, specifically
!   if (!any_pointer_p (lhs))
      return;
    // TODO: has to be a FILE *, specifically
!   if (!any_pointer_p (rhs))
      return;
  
    if (op == NE_EXPR)
diff -Nrcpad gcc-11.3.0/gcc/analyzer/sm-malloc.cc gcc-12.1.0/gcc/analyzer/sm-malloc.cc
*** gcc-11.3.0/gcc/analyzer/sm-malloc.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/sm-malloc.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* A state machine for detecting misuses of the malloc/free API.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* A state machine for detecting misuses of the malloc/free API.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 45,50 ****
--- 45,51 ----
  #include "stringpool.h"
  #include "attribs.h"
  #include "analyzer/function-set.h"
+ #include "analyzer/program-state.h"
  
  #if ENABLE_ANALYZER
  
*************** public:
*** 355,364 ****
      if (const region_svalue *ptr = sval->dyn_cast_region_svalue ())
        {
  	const region *reg = ptr->get_pointee ();
! 	const region *base_reg = reg->get_base_region ();
! 	if (base_reg->get_kind () == RK_DECL
! 	    || base_reg->get_kind () == RK_STRING)
! 	  return m_non_heap;
        }
      return m_start;
    }
--- 356,371 ----
      if (const region_svalue *ptr = sval->dyn_cast_region_svalue ())
        {
  	const region *reg = ptr->get_pointee ();
! 	switch (reg->get_memory_space ())
! 	  {
! 	  default:
! 	    break;
! 	  case MEMSPACE_CODE:
! 	  case MEMSPACE_GLOBALS:
! 	  case MEMSPACE_STACK:
! 	  case MEMSPACE_READONLY_DATA:
! 	    return m_non_heap;
! 	  }
        }
      return m_start;
    }
*************** public:
*** 375,383 ****
    void on_condition (sm_context *sm_ctxt,
  		     const supernode *node,
  		     const gimple *stmt,
! 		     tree lhs,
  		     enum tree_code op,
! 		     tree rhs) const FINAL OVERRIDE;
  
    bool can_purge_p (state_t s) const FINAL OVERRIDE;
    pending_diagnostic *on_leak (tree var) const FINAL OVERRIDE;
--- 382,390 ----
    void on_condition (sm_context *sm_ctxt,
  		     const supernode *node,
  		     const gimple *stmt,
! 		     const svalue *lhs,
  		     enum tree_code op,
! 		     const svalue *rhs) const FINAL OVERRIDE;
  
    bool can_purge_p (state_t s) const FINAL OVERRIDE;
    pending_diagnostic *on_leak (tree var) const FINAL OVERRIDE;
*************** public:
*** 387,392 ****
--- 394,405 ----
  
    static bool unaffected_by_call_p (tree fndecl);
  
+   void on_realloc_with_move (region_model *model,
+ 			     sm_state_map *smap,
+ 			     const svalue *old_ptr_sval,
+ 			     const svalue *new_ptr_sval,
+ 			     const extrinsic_state &ext_state) const;
+ 
    standard_deallocator_set m_free;
    standard_deallocator_set m_scalar_delete;
    standard_deallocator_set m_vector_delete;
*************** private:
*** 418,423 ****
--- 431,441 ----
  			  const gcall *call,
  			  const deallocator_set *deallocators,
  			  bool returns_nonnull = false) const;
+   void handle_free_of_non_heap (sm_context *sm_ctxt,
+ 				const supernode *node,
+ 				const gcall *call,
+ 				tree arg,
+ 				const deallocator *d) const;
    void on_deallocator_call (sm_context *sm_ctxt,
  			    const supernode *node,
  			    const gcall *call,
*************** public:
*** 742,747 ****
--- 760,770 ----
      return "mismatching_deallocation";
    }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_mismatching_deallocation;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      auto_diagnostic_group d;
*************** public:
*** 749,761 ****
      m.add_cwe (762); /* CWE-762: Mismatched Memory Management Routines.  */
      if (const deallocator *expected_dealloc
  	  = m_expected_deallocators->maybe_get_single ())
!       return warning_meta (rich_loc, m, OPT_Wanalyzer_mismatching_deallocation,
  			   "%qE should have been deallocated with %qs"
  			   " but was deallocated with %qs",
  			   m_arg, expected_dealloc->m_name,
  			   m_actual_dealloc->m_name);
      else
!       return warning_meta (rich_loc, m, OPT_Wanalyzer_mismatching_deallocation,
  			   "%qs called on %qE returned from a mismatched"
  			   " allocation function",
  			   m_actual_dealloc->m_name, m_arg);
--- 772,784 ----
      m.add_cwe (762); /* CWE-762: Mismatched Memory Management Routines.  */
      if (const deallocator *expected_dealloc
  	  = m_expected_deallocators->maybe_get_single ())
!       return warning_meta (rich_loc, m, get_controlling_option (),
  			   "%qE should have been deallocated with %qs"
  			   " but was deallocated with %qs",
  			   m_arg, expected_dealloc->m_name,
  			   m_actual_dealloc->m_name);
      else
!       return warning_meta (rich_loc, m, get_controlling_option (),
  			   "%qs called on %qE returned from a mismatched"
  			   " allocation function",
  			   m_actual_dealloc->m_name, m_arg);
*************** public:
*** 816,827 ****
  
    const char *get_kind () const FINAL OVERRIDE { return "double_free"; }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      auto_diagnostic_group d;
      diagnostic_metadata m;
      m.add_cwe (415); /* CWE-415: Double Free.  */
!     return warning_meta (rich_loc, m, OPT_Wanalyzer_double_free,
  			 "double-%qs of %qE", m_funcname, m_arg);
    }
  
--- 839,855 ----
  
    const char *get_kind () const FINAL OVERRIDE { return "double_free"; }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_double_free;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      auto_diagnostic_group d;
      diagnostic_metadata m;
      m.add_cwe (415); /* CWE-415: Double Free.  */
!     return warning_meta (rich_loc, m, get_controlling_option (),
  			 "double-%qs of %qE", m_funcname, m_arg);
    }
  
*************** public:
*** 907,919 ****
  
    const char *get_kind () const FINAL OVERRIDE { return "possible_null_deref"; }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      /* CWE-690: Unchecked Return Value to NULL Pointer Dereference.  */
      diagnostic_metadata m;
      m.add_cwe (690);
!     return warning_meta (rich_loc, m,
! 			 OPT_Wanalyzer_possible_null_dereference,
  			 "dereference of possibly-NULL %qE", m_arg);
    }
  
--- 935,951 ----
  
    const char *get_kind () const FINAL OVERRIDE { return "possible_null_deref"; }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_possible_null_dereference;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      /* CWE-690: Unchecked Return Value to NULL Pointer Dereference.  */
      diagnostic_metadata m;
      m.add_cwe (690);
!     return warning_meta (rich_loc, m, get_controlling_option (),
  			 "dereference of possibly-NULL %qE", m_arg);
    }
  
*************** method_p (tree fndecl)
*** 938,944 ****
  }
  
  /* Return a 1-based description of ARG_IDX (0-based) of FNDECL.
!    Compare with %P in the C++ FE  (implemented in cp/error.c: parm_to_string
     as called from cp_printer).  */
  
  static label_text
--- 970,976 ----
  }
  
  /* Return a 1-based description of ARG_IDX (0-based) of FNDECL.
!    Compare with %P in the C++ FE  (implemented in cp/error.cc: parm_to_string
     as called from cp_printer).  */
  
  static label_text
*************** public:
*** 992,997 ****
--- 1024,1033 ----
  	    && m_arg_idx == sub_other.m_arg_idx);
    }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_possible_null_argument;
+   }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
*************** public:
*** 1000,1006 ****
      diagnostic_metadata m;
      m.add_cwe (690);
      bool warned
!       = warning_meta (rich_loc, m, OPT_Wanalyzer_possible_null_argument,
  		      "use of possibly-NULL %qE where non-null expected",
  		      m_arg);
      if (warned)
--- 1036,1042 ----
      diagnostic_metadata m;
      m.add_cwe (690);
      bool warned
!       = warning_meta (rich_loc, m, get_controlling_option (),
  		      "use of possibly-NULL %qE where non-null expected",
  		      m_arg);
      if (warned)
*************** public:
*** 1040,1052 ****
  
    const char *get_kind () const FINAL OVERRIDE { return "null_deref"; }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      /* CWE-476: NULL Pointer Dereference.  */
      diagnostic_metadata m;
      m.add_cwe (476);
!     return warning_meta (rich_loc, m,
! 			 OPT_Wanalyzer_null_dereference,
  			 "dereference of NULL %qE", m_arg);
    }
  
--- 1076,1092 ----
  
    const char *get_kind () const FINAL OVERRIDE { return "null_deref"; }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_null_dereference;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      /* CWE-476: NULL Pointer Dereference.  */
      diagnostic_metadata m;
      m.add_cwe (476);
!     return warning_meta (rich_loc, m, get_controlling_option (),
  			 "dereference of NULL %qE", m_arg);
    }
  
*************** public:
*** 1088,1093 ****
--- 1128,1138 ----
  	    && m_arg_idx == sub_other.m_arg_idx);
    }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_null_argument;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      /* CWE-476: NULL Pointer Dereference.  */
*************** public:
*** 1097,1106 ****
  
      bool warned;
      if (zerop (m_arg))
!       warned = warning_meta (rich_loc, m, OPT_Wanalyzer_null_argument,
  			     "use of NULL where non-null expected");
      else
!       warned = warning_meta (rich_loc, m, OPT_Wanalyzer_null_argument,
  			     "use of NULL %qE where non-null expected",
  			     m_arg);
      if (warned)
--- 1142,1151 ----
  
      bool warned;
      if (zerop (m_arg))
!       warned = warning_meta (rich_loc, m, get_controlling_option (),
  			     "use of NULL where non-null expected");
      else
!       warned = warning_meta (rich_loc, m, get_controlling_option (),
  			     "use of NULL %qE where non-null expected",
  			     m_arg);
      if (warned)
*************** public:
*** 1141,1152 ****
  
    const char *get_kind () const FINAL OVERRIDE { return "use_after_free"; }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      /* CWE-416: Use After Free.  */
      diagnostic_metadata m;
      m.add_cwe (416);
!     return warning_meta (rich_loc, m, OPT_Wanalyzer_use_after_free,
  			 "use after %<%s%> of %qE",
  			 m_deallocator->m_name, m_arg);
    }
--- 1186,1202 ----
  
    const char *get_kind () const FINAL OVERRIDE { return "use_after_free"; }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_use_after_free;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      /* CWE-416: Use After Free.  */
      diagnostic_metadata m;
      m.add_cwe (416);
!     return warning_meta (rich_loc, m, get_controlling_option (),
  			 "use after %<%s%> of %qE",
  			 m_deallocator->m_name, m_arg);
    }
*************** public:
*** 1198,1203 ****
--- 1248,1272 ----
  				 funcname, ev.m_expr);
    }
  
+   /* Implementation of pending_diagnostic::supercedes_p for
+      use_after_free.
+ 
+      We want use-after-free to supercede use-of-unitialized-value,
+      so that if we have these at the same stmt, we don't emit
+      a use-of-uninitialized, just the use-after-free.
+      (this is because we fully purge information about freed
+      buffers when we free them to avoid state explosions, so
+      that if they are accessed after the free, it looks like
+      they are uninitialized).  */
+ 
+   bool supercedes_p (const pending_diagnostic &other) const FINAL OVERRIDE
+   {
+     if (other.use_of_uninit_p ())
+       return true;
+ 
+     return false;
+   }
+ 
  private:
    diagnostic_event_id_t m_free_event;
    const deallocator *m_deallocator;
*************** public:
*** 1211,1225 ****
  
    const char *get_kind () const FINAL OVERRIDE { return "malloc_leak"; }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      diagnostic_metadata m;
      m.add_cwe (401);
      if (m_arg)
!       return warning_meta (rich_loc, m, OPT_Wanalyzer_malloc_leak,
  			   "leak of %qE", m_arg);
      else
!       return warning_meta (rich_loc, m, OPT_Wanalyzer_malloc_leak,
  			   "leak of %qs", "<unknown>");
    }
  
--- 1280,1299 ----
  
    const char *get_kind () const FINAL OVERRIDE { return "malloc_leak"; }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_malloc_leak;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      diagnostic_metadata m;
      m.add_cwe (401);
      if (m_arg)
!       return warning_meta (rich_loc, m, get_controlling_option (),
  			   "leak of %qE", m_arg);
      else
!       return warning_meta (rich_loc, m, get_controlling_option (),
  			   "leak of %qs", "<unknown>");
    }
  
*************** class free_of_non_heap : public malloc_d
*** 1263,1270 ****
  {
  public:
    free_of_non_heap (const malloc_state_machine &sm, tree arg,
  		    const char *funcname)
!   : malloc_diagnostic (sm, arg), m_funcname (funcname), m_kind (KIND_UNKNOWN)
    {
    }
  
--- 1337,1345 ----
  {
  public:
    free_of_non_heap (const malloc_state_machine &sm, tree arg,
+ 		    const region *freed_reg,
  		    const char *funcname)
!   : malloc_diagnostic (sm, arg), m_freed_reg (freed_reg), m_funcname (funcname)
    {
    }
  
*************** public:
*** 1274,1280 ****
      FINAL OVERRIDE
    {
      const free_of_non_heap &other = (const free_of_non_heap &)base_other;
!     return (same_tree_p (m_arg, other.m_arg) && m_kind == other.m_kind);
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
--- 1349,1361 ----
      FINAL OVERRIDE
    {
      const free_of_non_heap &other = (const free_of_non_heap &)base_other;
!     return (same_tree_p (m_arg, other.m_arg)
! 	    && m_freed_reg == other.m_freed_reg);
!   }
! 
!   int get_controlling_option () const FINAL OVERRIDE
!   {
!     return OPT_Wanalyzer_free_of_non_heap;
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
*************** public:
*** 1282,1325 ****
      auto_diagnostic_group d;
      diagnostic_metadata m;
      m.add_cwe (590); /* CWE-590: Free of Memory not on the Heap.  */
!     switch (m_kind)
        {
        default:
  	gcc_unreachable ();
!       case KIND_UNKNOWN:
! 	return warning_meta (rich_loc, m, OPT_Wanalyzer_free_of_non_heap,
  			     "%<%s%> of %qE which points to memory"
  			     " not on the heap",
  			     m_funcname, m_arg);
  	break;
!       case KIND_ALLOCA:
! 	return warning_meta (rich_loc, m, OPT_Wanalyzer_free_of_non_heap,
! 			     "%<%s%> of memory allocated on the stack by"
! 			     " %qs (%qE) will corrupt the heap",
! 			     m_funcname, "alloca", m_arg);
  	break;
        }
    }
  
!   label_text describe_state_change (const evdesc::state_change &change)
      FINAL OVERRIDE
    {
-     /* Attempt to reconstruct what kind of pointer it is.
-        (It seems neater for this to be a part of the state, though).  */
-     if (change.m_expr && TREE_CODE (change.m_expr) == SSA_NAME)
-       {
- 	gimple *def_stmt = SSA_NAME_DEF_STMT (change.m_expr);
- 	if (gcall *call = dyn_cast <gcall *> (def_stmt))
- 	  {
- 	    if (is_special_named_call_p (call, "alloca", 1)
- 		|| is_special_named_call_p (call, "__builtin_alloca", 1))
- 	      {
- 		m_kind = KIND_ALLOCA;
- 		return label_text::borrow
- 		  ("memory is allocated on the stack here");
- 	      }
- 	  }
-       }
      return label_text::borrow ("pointer is from here");
    }
  
--- 1363,1394 ----
      auto_diagnostic_group d;
      diagnostic_metadata m;
      m.add_cwe (590); /* CWE-590: Free of Memory not on the Heap.  */
!     switch (get_memory_space ())
        {
        default:
+       case MEMSPACE_HEAP:
  	gcc_unreachable ();
!       case MEMSPACE_UNKNOWN:
!       case MEMSPACE_CODE:
!       case MEMSPACE_GLOBALS:
!       case MEMSPACE_READONLY_DATA:
! 	return warning_meta (rich_loc, m, get_controlling_option (),
  			     "%<%s%> of %qE which points to memory"
  			     " not on the heap",
  			     m_funcname, m_arg);
  	break;
!       case MEMSPACE_STACK:
! 	return warning_meta (rich_loc, m, get_controlling_option (),
! 			     "%<%s%> of %qE which points to memory"
! 			     " on the stack",
! 			     m_funcname, m_arg);
  	break;
        }
    }
  
!   label_text describe_state_change (const evdesc::state_change &)
      FINAL OVERRIDE
    {
      return label_text::borrow ("pointer is from here");
    }
  
*************** public:
*** 1328,1341 ****
      return ev.formatted_print ("call to %qs here", m_funcname);
    }
  
  private:
!   enum kind
    {
!     KIND_UNKNOWN,
!     KIND_ALLOCA
!   };
    const char *m_funcname;
-   enum kind m_kind;
  };
  
  /* struct allocation_state : public state_machine::state.  */
--- 1397,1419 ----
      return ev.formatted_print ("call to %qs here", m_funcname);
    }
  
+   void mark_interesting_stuff (interesting_t *interest) FINAL OVERRIDE
+   {
+     if (m_freed_reg)
+       interest->add_region_creation (m_freed_reg);
+   }
+ 
  private:
!   enum memory_space get_memory_space () const
    {
!     if (m_freed_reg)
!       return m_freed_reg->get_memory_space ();
!     else
!       return MEMSPACE_UNKNOWN;
!   }
! 
!   const region *m_freed_reg;
    const char *m_funcname;
  };
  
  /* struct allocation_state : public state_machine::state.  */
*************** malloc_state_machine::get_or_create_deal
*** 1492,1498 ****
    /* Reuse "free".  */
    deallocator *d;
    if (is_named_call_p (deallocator_fndecl, "free")
!       || is_std_named_call_p (deallocator_fndecl, "free"))
      d = &m_free.m_deallocator;
    else
      {
--- 1570,1577 ----
    /* Reuse "free".  */
    deallocator *d;
    if (is_named_call_p (deallocator_fndecl, "free")
!       || is_std_named_call_p (deallocator_fndecl, "free")
!       || is_named_call_p (deallocator_fndecl, "__builtin_free"))
      d = &m_free.m_deallocator;
    else
      {
*************** malloc_state_machine::get_or_create_deal
*** 1506,1511 ****
--- 1585,1622 ----
    return d;
  }
  
+ /* Try to identify the function declaration either by name or as a known malloc
+    builtin.  */
+ 
+ static bool
+ known_allocator_p (const_tree fndecl, const gcall *call)
+ {
+   /* Either it is a function we know by name and number of arguments... */
+   if (is_named_call_p (fndecl, "malloc", call, 1)
+       || is_named_call_p (fndecl, "calloc", call, 2)
+       || is_std_named_call_p (fndecl, "malloc", call, 1)
+       || is_std_named_call_p (fndecl, "calloc", call, 2)
+       || is_named_call_p (fndecl, "strdup", call, 1)
+       || is_named_call_p (fndecl, "strndup", call, 2))
+     return true;
+ 
+   /* ... or it is a builtin allocator that allocates objects freed with
+      __builtin_free.  */
+   if (fndecl_built_in_p (fndecl, BUILT_IN_NORMAL))
+     switch (DECL_FUNCTION_CODE (fndecl))
+       {
+       case BUILT_IN_MALLOC:
+       case BUILT_IN_CALLOC:
+       case BUILT_IN_STRDUP:
+       case BUILT_IN_STRNDUP:
+ 	return true;
+       default:
+ 	break;
+       }
+ 
+   return false;
+ }
+ 
  /* Implementation of state_machine::on_stmt vfunc for malloc_state_machine.  */
  
  bool
*************** malloc_state_machine::on_stmt (sm_contex
*** 1516,1529 ****
    if (const gcall *call = dyn_cast <const gcall *> (stmt))
      if (tree callee_fndecl = sm_ctxt->get_fndecl_for_call (call))
        {
! 	if (is_named_call_p (callee_fndecl, "malloc", call, 1)
! 	    || is_named_call_p (callee_fndecl, "calloc", call, 2)
! 	    || is_std_named_call_p (callee_fndecl, "malloc", call, 1)
! 	    || is_std_named_call_p (callee_fndecl, "calloc", call, 2)
! 	    || is_named_call_p (callee_fndecl, "__builtin_malloc", call, 1)
! 	    || is_named_call_p (callee_fndecl, "__builtin_calloc", call, 2)
! 	    || is_named_call_p (callee_fndecl, "strdup", call, 1)
! 	    || is_named_call_p (callee_fndecl, "strndup", call, 2))
  	  {
  	    on_allocator_call (sm_ctxt, call, &m_free);
  	    return true;
--- 1627,1633 ----
    if (const gcall *call = dyn_cast <const gcall *> (stmt))
      if (tree callee_fndecl = sm_ctxt->get_fndecl_for_call (call))
        {
! 	if (known_allocator_p (callee_fndecl, call))
  	  {
  	    on_allocator_call (sm_ctxt, call, &m_free);
  	    return true;
*************** malloc_state_machine::on_stmt (sm_contex
*** 1649,1674 ****
      if (any_pointer_p (lhs))
        on_zero_assignment (sm_ctxt, stmt,lhs);
  
-   /* If we have "LHS = &EXPR;" and EXPR is something other than a MEM_REF,
-      transition LHS from start to non_heap.
-      Doing it for ADDR_EXPR(MEM_REF()) is likely wrong, and can lead to
-      unbounded chains of unmergeable sm-state on pointer arithmetic in loops
-      when optimization is enabled.  */
-   if (const gassign *assign_stmt = dyn_cast <const gassign *> (stmt))
-     {
-       enum tree_code op = gimple_assign_rhs_code (assign_stmt);
-       if (op == ADDR_EXPR)
- 	{
- 	  tree lhs = gimple_assign_lhs (assign_stmt);
- 	  if (lhs)
- 	    {
- 	      tree addr_expr = gimple_assign_rhs1 (assign_stmt);
- 	      if (TREE_CODE (TREE_OPERAND (addr_expr, 0)) != MEM_REF)
- 		sm_ctxt->on_transition (node, stmt, lhs, m_start, m_non_heap);
- 	    }
- 	}
-     }
- 
    /* Handle dereferences.  */
    for (unsigned i = 0; i < gimple_num_ops (stmt); i++)
      {
--- 1753,1758 ----
*************** malloc_state_machine::on_allocator_call
*** 1737,1742 ****
--- 1821,1850 ----
      }
  }
  
+ /* Handle deallocations of non-heap pointers.
+    non-heap -> stop, with warning.  */
+ 
+ void
+ malloc_state_machine::handle_free_of_non_heap (sm_context *sm_ctxt,
+ 					       const supernode *node,
+ 					       const gcall *call,
+ 					       tree arg,
+ 					       const deallocator *d) const
+ {
+   tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
+   const region *freed_reg = NULL;
+   if (const program_state *old_state = sm_ctxt->get_old_program_state ())
+     {
+       const region_model *old_model = old_state->m_region_model;
+       const svalue *ptr_sval = old_model->get_rvalue (arg, NULL);
+       freed_reg = old_model->deref_rvalue (ptr_sval, arg, NULL);
+     }
+   sm_ctxt->warn (node, call, arg,
+ 		 new free_of_non_heap (*this, diag_arg, freed_reg,
+ 				       d->m_name));
+   sm_ctxt->set_next_state (call, arg, m_stop);
+ }
+ 
  void
  malloc_state_machine::on_deallocator_call (sm_context *sm_ctxt,
  					   const supernode *node,
*************** malloc_state_machine::on_deallocator_cal
*** 1783,1844 ****
    else if (state == m_non_heap)
      {
        /* non-heap -> stop, with warning.  */
!       tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
!       sm_ctxt->warn (node, call, arg,
! 		     new free_of_non_heap (*this, diag_arg,
! 					   d->m_name));
!       sm_ctxt->set_next_state (call, arg, m_stop);
      }
  }
  
! /* Implementation of realloc(3):
! 
!      void *realloc(void *ptr, size_t size);
! 
!    realloc(3) is awkward.
! 
!    We currently don't have a way to express multiple possible outcomes
!    from a function call, "bifurcating" the state such as:
!    - success: non-NULL is returned
!    - failure: NULL is returned, existing buffer is not freed.
!    or even an N-way state split e.g.:
!    - buffer grew successfully in-place
!    - buffer was successfully moved to a larger allocation
!    - buffer was successfully contracted
!    - realloc failed, returning NULL, without freeing existing buffer.
!    (PR analyzer/99260 tracks this)
  
!    Given that we can currently only express one outcome, eliminate
!    false positives by dropping state from the buffer.  */
  
  void
  malloc_state_machine::on_realloc_call (sm_context *sm_ctxt,
! 				       const supernode *node ATTRIBUTE_UNUSED,
  				       const gcall *call) const
  {
!   tree ptr = gimple_call_arg (call, 0);
  
!   state_t state = sm_ctxt->get_state (call, ptr);
  
-   /* Detect mismatches.  */
    if (unchecked_p (state) || nonnull_p (state))
      {
        const allocation_state *astate = as_a_allocation_state (state);
        gcc_assert (astate->m_deallocators);
!       if (astate->m_deallocators != &m_free)
  	{
  	  /* Wrong allocator.  */
! 	  tree diag_ptr = sm_ctxt->get_diagnostic_tree (ptr);
  	  pending_diagnostic *pd
! 	    = new mismatching_deallocation (*this, diag_ptr,
  					    astate->m_deallocators,
! 					    &m_realloc);
! 	  sm_ctxt->warn (node, call, ptr, pd);
  	}
      }
! 
!   /* Transition ptr to "stop" state.  */
!   sm_ctxt->set_next_state (call, ptr, m_stop);
  }
  
  /* Implementation of state_machine::on_phi vfunc for malloc_state_machine.  */
--- 1891,1955 ----
    else if (state == m_non_heap)
      {
        /* non-heap -> stop, with warning.  */
!       handle_free_of_non_heap (sm_ctxt, node, call, arg, d);
      }
  }
  
! /* Handle a call to "realloc".
!    Check for free of non-heap or mismatching allocators,
!    transitioning to the "stop" state for such cases.
  
!    Otherwise, region_model::impl_call_realloc will later
!    get called (which will handle other sm-state transitions
!    when the state is bifurcated).  */
  
  void
  malloc_state_machine::on_realloc_call (sm_context *sm_ctxt,
! 				       const supernode *node,
  				       const gcall *call) const
  {
!   const unsigned argno = 0;
!   const deallocator *d = &m_realloc;
  
!   tree arg = gimple_call_arg (call, argno);
! 
!   state_t state = sm_ctxt->get_state (call, arg);
  
    if (unchecked_p (state) || nonnull_p (state))
      {
        const allocation_state *astate = as_a_allocation_state (state);
        gcc_assert (astate->m_deallocators);
!       if (!astate->m_deallocators->contains_p (&m_free.m_deallocator))
  	{
  	  /* Wrong allocator.  */
! 	  tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
  	  pending_diagnostic *pd
! 	    = new mismatching_deallocation (*this, diag_arg,
  					    astate->m_deallocators,
! 					    d);
! 	  sm_ctxt->warn (node, call, arg, pd);
! 	  sm_ctxt->set_next_state (call, arg, m_stop);
! 	  if (path_context *path_ctxt = sm_ctxt->get_path_context ())
! 	    path_ctxt->terminate_path ();
  	}
      }
!   else if (state == m_free.m_deallocator.m_freed)
!     {
!       /* freed -> stop, with warning.  */
!       tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
!       sm_ctxt->warn (node, call, arg,
! 		     new double_free (*this, diag_arg, "free"));
!       sm_ctxt->set_next_state (call, arg, m_stop);
!       if (path_context *path_ctxt = sm_ctxt->get_path_context ())
! 	path_ctxt->terminate_path ();
!     }
!   else if (state == m_non_heap)
!     {
!       /* non-heap -> stop, with warning.  */
!       handle_free_of_non_heap (sm_ctxt, node, call, arg, d);
!       if (path_context *path_ctxt = sm_ctxt->get_path_context ())
! 	path_ctxt->terminate_path ();
!     }
  }
  
  /* Implementation of state_machine::on_phi vfunc for malloc_state_machine.  */
*************** void
*** 1863,1873 ****
  malloc_state_machine::on_condition (sm_context *sm_ctxt,
  				    const supernode *node ATTRIBUTE_UNUSED,
  				    const gimple *stmt,
! 				    tree lhs,
  				    enum tree_code op,
! 				    tree rhs) const
  {
!   if (!zerop (rhs))
      return;
  
    if (!any_pointer_p (lhs))
--- 1974,1984 ----
  malloc_state_machine::on_condition (sm_context *sm_ctxt,
  				    const supernode *node ATTRIBUTE_UNUSED,
  				    const gimple *stmt,
! 				    const svalue *lhs,
  				    enum tree_code op,
! 				    const svalue *rhs) const
  {
!   if (!rhs->all_zeroes_p ())
      return;
  
    if (!any_pointer_p (lhs))
*************** malloc_state_machine::on_zero_assignment
*** 1970,1975 ****
--- 2081,2110 ----
      sm_ctxt->set_next_state (stmt, lhs, m_null);
  }
  
+ /* Special-case hook for handling realloc, for the "success with move to
+    a new buffer" case, marking OLD_PTR_SVAL as freed and NEW_PTR_SVAL as
+    non-null.
+ 
+    This is similar to on_deallocator_call and on_allocator_call,
+    but the checks happen in on_realloc_call, and by splitting the states.  */
+ 
+ void
+ malloc_state_machine::
+ on_realloc_with_move (region_model *model,
+ 		      sm_state_map *smap,
+ 		      const svalue *old_ptr_sval,
+ 		      const svalue *new_ptr_sval,
+ 		      const extrinsic_state &ext_state) const
+ {
+   smap->set_state (model, old_ptr_sval,
+ 		   m_free.m_deallocator.m_freed,
+ 		   NULL, ext_state);
+ 
+   smap->set_state (model, new_ptr_sval,
+ 		   m_free.m_nonnull,
+ 		   NULL, ext_state);
+ }
+ 
  } // anonymous namespace
  
  /* Internal interface to this file. */
*************** make_malloc_state_machine (logger *logge
*** 1980,1985 ****
--- 2115,2154 ----
    return new malloc_state_machine (logger);
  }
  
+ /* Specialcase hook for handling realloc, for use by
+    region_model::impl_call_realloc::success_with_move::update_model.  */
+ 
+ void
+ region_model::on_realloc_with_move (const call_details &cd,
+ 				    const svalue *old_ptr_sval,
+ 				    const svalue *new_ptr_sval)
+ {
+   region_model_context *ctxt = cd.get_ctxt ();
+   if (!ctxt)
+     return;
+   const extrinsic_state *ext_state = ctxt->get_ext_state ();
+   if (!ext_state)
+     return;
+ 
+   sm_state_map *smap;
+   const state_machine *sm;
+   unsigned sm_idx;
+   if (!ctxt->get_malloc_map (&smap, &sm, &sm_idx))
+     return;
+ 
+   gcc_assert (smap);
+   gcc_assert (sm);
+ 
+   const malloc_state_machine &malloc_sm
+     = (const malloc_state_machine &)*sm;
+ 
+   malloc_sm.on_realloc_with_move (this,
+ 				  smap,
+ 				  old_ptr_sval,
+ 				  new_ptr_sval,
+ 				  *ext_state);
+ }
+ 
  } // namespace ana
  
  #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/sm-malloc.dot gcc-12.1.0/gcc/analyzer/sm-malloc.dot
*** gcc-11.3.0/gcc/analyzer/sm-malloc.dot	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/sm-malloc.dot	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* An overview of the state machine from sm-malloc.cc.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* An overview of the state machine from sm-malloc.cc.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/sm-pattern-test.cc gcc-12.1.0/gcc/analyzer/sm-pattern-test.cc
*** gcc-11.3.0/gcc/analyzer/sm-pattern-test.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/sm-pattern-test.cc	Fri May  6 07:30:56 2022
***************
*** 1,7 ****
  /* A state machine for use in DejaGnu tests, to check that
     pattern-matching works as expected.
  
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,7 ----
  /* A state machine for use in DejaGnu tests, to check that
     pattern-matching works as expected.
  
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 37,42 ****
--- 37,48 ----
  #include "analyzer/analyzer-logging.h"
  #include "analyzer/sm.h"
  #include "analyzer/pending-diagnostic.h"
+ #include "tristate.h"
+ #include "selftest.h"
+ #include "analyzer/call-string.h"
+ #include "analyzer/program-point.h"
+ #include "analyzer/store.h"
+ #include "analyzer/region-model.h"
  
  #if ENABLE_ANALYZER
  
*************** public:
*** 61,69 ****
    void on_condition (sm_context *sm_ctxt,
  		     const supernode *node,
  		     const gimple *stmt,
! 		     tree lhs,
  		     enum tree_code op,
! 		     tree rhs) const FINAL OVERRIDE;
  
    bool can_purge_p (state_t s) const FINAL OVERRIDE;
  };
--- 67,75 ----
    void on_condition (sm_context *sm_ctxt,
  		     const supernode *node,
  		     const gimple *stmt,
! 		     const svalue *lhs,
  		     enum tree_code op,
! 		     const svalue *rhs) const FINAL OVERRIDE;
  
    bool can_purge_p (state_t s) const FINAL OVERRIDE;
  };
*************** public:
*** 83,91 ****
  	    && same_tree_p (m_rhs, other.m_rhs));
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
!     return warning_at (rich_loc, 0, "pattern match on %<%E %s %E%>",
  		       m_lhs, op_symbol_code (m_op), m_rhs);
    }
  
--- 89,103 ----
  	    && same_tree_p (m_rhs, other.m_rhs));
    }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return 0;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
!     return warning_at (rich_loc, get_controlling_option (),
! 		       "pattern match on %<%E %s %E%>",
  		       m_lhs, op_symbol_code (m_op), m_rhs);
    }
  
*************** void
*** 118,135 ****
  pattern_test_state_machine::on_condition (sm_context *sm_ctxt,
  					  const supernode *node,
  					  const gimple *stmt,
! 					  tree lhs,
  					  enum tree_code op,
! 					  tree rhs) const
  {
    if (stmt == NULL)
      return;
  
!   if (!CONSTANT_CLASS_P (rhs))
      return;
  
!   pending_diagnostic *diag = new pattern_match (lhs, op, rhs);
!   sm_ctxt->warn (node, stmt, lhs, diag);
  }
  
  bool
--- 130,151 ----
  pattern_test_state_machine::on_condition (sm_context *sm_ctxt,
  					  const supernode *node,
  					  const gimple *stmt,
! 					  const svalue *lhs,
  					  enum tree_code op,
! 					  const svalue *rhs) const
  {
    if (stmt == NULL)
      return;
  
!   tree rhs_cst = rhs->maybe_get_constant ();
!   if (!rhs_cst)
      return;
  
!   if (tree lhs_expr = sm_ctxt->get_diagnostic_tree (lhs))
!     {
!       pending_diagnostic *diag = new pattern_match (lhs_expr, op, rhs_cst);
!       sm_ctxt->warn (node, stmt, lhs_expr, diag);
!     }
  }
  
  bool
diff -Nrcpad gcc-11.3.0/gcc/analyzer/sm-sensitive.cc gcc-12.1.0/gcc/analyzer/sm-sensitive.cc
*** gcc-11.3.0/gcc/analyzer/sm-sensitive.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/sm-sensitive.cc	Fri May  6 07:30:56 2022
***************
*** 1,6 ****
  /* An experimental state machine, for tracking exposure of sensitive
     data (e.g. through logging).
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,6 ----
  /* An experimental state machine, for tracking exposure of sensitive
     data (e.g. through logging).
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** public:
*** 58,70 ****
  		const supernode *node,
  		const gimple *stmt) const FINAL OVERRIDE;
  
-   void on_condition (sm_context *sm_ctxt,
- 		     const supernode *node,
- 		     const gimple *stmt,
- 		     tree lhs,
- 		     enum tree_code op,
- 		     tree rhs) const FINAL OVERRIDE;
- 
    bool can_purge_p (state_t s) const FINAL OVERRIDE;
  
    /* State for "sensitive" data, such as a password.  */
--- 58,63 ----
*************** public:
*** 98,110 ****
      return same_tree_p (m_arg, other.m_arg);
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      diagnostic_metadata m;
      /* CWE-532: Information Exposure Through Log Files */
      m.add_cwe (532);
!     return warning_meta (rich_loc, m,
! 			 OPT_Wanalyzer_exposure_through_output_file,
  			 "sensitive value %qE written to output file",
  			 m_arg);
    }
--- 91,107 ----
      return same_tree_p (m_arg, other.m_arg);
    }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_exposure_through_output_file;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      diagnostic_metadata m;
      /* CWE-532: Information Exposure Through Log Files */
      m.add_cwe (532);
!     return warning_meta (rich_loc, m, get_controlling_option (),
  			 "sensitive value %qE written to output file",
  			 m_arg);
    }
*************** sensitive_state_machine::on_stmt (sm_con
*** 222,238 ****
    return false;
  }
  
- void
- sensitive_state_machine::on_condition (sm_context *sm_ctxt ATTRIBUTE_UNUSED,
- 				       const supernode *node ATTRIBUTE_UNUSED,
- 				       const gimple *stmt ATTRIBUTE_UNUSED,
- 				       tree lhs ATTRIBUTE_UNUSED,
- 				       enum tree_code op ATTRIBUTE_UNUSED,
- 				       tree rhs ATTRIBUTE_UNUSED) const
- {
-   /* Empty.  */
- }
- 
  bool
  sensitive_state_machine::can_purge_p (state_t s ATTRIBUTE_UNUSED) const
  {
--- 219,224 ----
diff -Nrcpad gcc-11.3.0/gcc/analyzer/sm-signal.cc gcc-12.1.0/gcc/analyzer/sm-signal.cc
*** gcc-11.3.0/gcc/analyzer/sm-signal.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/sm-signal.cc	Fri May  6 07:30:56 2022
***************
*** 1,7 ****
  /* An experimental state machine, for tracking bad calls from within
     signal handlers.
  
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,7 ----
  /* An experimental state machine, for tracking bad calls from within
     signal handlers.
  
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** public:
*** 81,93 ****
  		const supernode *node,
  		const gimple *stmt) const FINAL OVERRIDE;
  
-   void on_condition (sm_context *sm_ctxt,
- 		     const supernode *node,
- 		     const gimple *stmt,
- 		     tree lhs,
- 		     enum tree_code op,
- 		     tree rhs) const FINAL OVERRIDE;
- 
    bool can_purge_p (state_t s) const FINAL OVERRIDE;
  
    /* These states are "global", rather than per-expression.  */
--- 81,86 ----
*************** public:
*** 120,133 ****
      return m_unsafe_call == other.m_unsafe_call;
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      auto_diagnostic_group d;
      diagnostic_metadata m;
      /* CWE-479: Signal Handler Use of a Non-reentrant Function.  */
      m.add_cwe (479);
!     if (warning_meta (rich_loc, m,
! 		      OPT_Wanalyzer_unsafe_call_within_signal_handler,
  		      "call to %qD from within signal handler",
  		      m_unsafe_fndecl))
        {
--- 113,130 ----
      return m_unsafe_call == other.m_unsafe_call;
    }
  
+   int get_controlling_option () const FINAL OVERRIDE
+   {
+     return OPT_Wanalyzer_unsafe_call_within_signal_handler;
+   }
+ 
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      auto_diagnostic_group d;
      diagnostic_metadata m;
      /* CWE-479: Signal Handler Use of a Non-reentrant Function.  */
      m.add_cwe (479);
!     if (warning_meta (rich_loc, m, get_controlling_option (),
  		      "call to %qD from within signal handler",
  		      m_unsafe_fndecl))
        {
*************** update_model_for_signal_handler (region_
*** 213,222 ****
  
  /* Custom exploded_edge info: entry into a signal-handler.  */
  
! class signal_delivery_edge_info_t : public exploded_edge::custom_info_t
  {
  public:
!   void print (pretty_printer *pp) FINAL OVERRIDE
    {
      pp_string (pp, "signal delivered");
    }
--- 210,219 ----
  
  /* Custom exploded_edge info: entry into a signal-handler.  */
  
! class signal_delivery_edge_info_t : public custom_edge_info
  {
  public:
!   void print (pretty_printer *pp) const FINAL OVERRIDE
    {
      pp_string (pp, "signal delivered");
    }
*************** public:
*** 227,246 ****
      return custom_obj;
    }
  
!   void update_model (region_model *model,
! 		     const exploded_edge &eedge) FINAL OVERRIDE
    {
!     update_model_for_signal_handler (model, eedge.m_dest->get_function ());
    }
  
    void add_events_to_path (checker_path *emission_path,
  			   const exploded_edge &eedge ATTRIBUTE_UNUSED)
!     FINAL OVERRIDE
    {
      emission_path->add_event
!       (new custom_event (UNKNOWN_LOCATION, NULL_TREE, 0,
! 			 "later on,"
! 			 " when the signal is delivered to the process"));
    }
  };
  
--- 224,247 ----
      return custom_obj;
    }
  
!   bool update_model (region_model *model,
! 		     const exploded_edge *eedge,
! 		     region_model_context *) const FINAL OVERRIDE
    {
!     gcc_assert (eedge);
!     update_model_for_signal_handler (model, eedge->m_dest->get_function ());
!     return true;
    }
  
    void add_events_to_path (checker_path *emission_path,
  			   const exploded_edge &eedge ATTRIBUTE_UNUSED)
!     const FINAL OVERRIDE
    {
      emission_path->add_event
!       (new precanned_custom_event
!        (UNKNOWN_LOCATION, NULL_TREE, 0,
! 	"later on,"
! 	" when the signal is delivered to the process"));
    }
  };
  
*************** signal_state_machine::on_stmt (sm_contex
*** 362,381 ****
    return false;
  }
  
- /* Implementation of state_machine::on_condition vfunc for
-    signal_state_machine.  */
- 
- void
- signal_state_machine::on_condition (sm_context *sm_ctxt ATTRIBUTE_UNUSED,
- 				    const supernode *node ATTRIBUTE_UNUSED,
- 				    const gimple *stmt ATTRIBUTE_UNUSED,
- 				    tree lhs ATTRIBUTE_UNUSED,
- 				    enum tree_code op ATTRIBUTE_UNUSED,
- 				    tree rhs ATTRIBUTE_UNUSED) const
- {
-   // Empty
- }
- 
  bool
  signal_state_machine::can_purge_p (state_t s ATTRIBUTE_UNUSED) const
  {
--- 363,368 ----
diff -Nrcpad gcc-11.3.0/gcc/analyzer/sm-taint.cc gcc-12.1.0/gcc/analyzer/sm-taint.cc
*** gcc-11.3.0/gcc/analyzer/sm-taint.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/sm-taint.cc	Fri May  6 07:30:56 2022
***************
*** 1,7 ****
  /* An experimental state machine, for tracking "taint": unsanitized uses
     of data potentially under an attacker's control.
  
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,7 ----
  /* An experimental state machine, for tracking "taint": unsanitized uses
     of data potentially under an attacker's control.
  
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 33,41 ****
  #include "function.h"
  #include "json.h"
  #include "analyzer/analyzer.h"
- #include "diagnostic-event-id.h"
  #include "analyzer/analyzer-logging.h"
  #include "analyzer/sm.h"
  #include "analyzer/pending-diagnostic.h"
  
  #if ENABLE_ANALYZER
--- 33,55 ----
  #include "function.h"
  #include "json.h"
  #include "analyzer/analyzer.h"
  #include "analyzer/analyzer-logging.h"
+ #include "gimple-iterator.h"
+ #include "tristate.h"
+ #include "selftest.h"
+ #include "ordered-hash-map.h"
+ #include "cgraph.h"
+ #include "cfg.h"
+ #include "digraph.h"
+ #include "stringpool.h"
+ #include "attribs.h"
+ #include "analyzer/supergraph.h"
+ #include "analyzer/call-string.h"
+ #include "analyzer/program-point.h"
+ #include "analyzer/store.h"
+ #include "analyzer/region-model.h"
  #include "analyzer/sm.h"
+ #include "analyzer/program-state.h"
  #include "analyzer/pending-diagnostic.h"
  
  #if ENABLE_ANALYZER
*************** namespace ana {
*** 44,49 ****
--- 58,77 ----
  
  namespace {
  
+ /* An enum for describing tainted values.  */
+ 
+ enum bounds
+ {
+   /* This tainted value has no upper or lower bound.  */
+   BOUNDS_NONE,
+ 
+   /* This tainted value has an upper bound but not lower bound.  */
+   BOUNDS_UPPER,
+ 
+   /* This tainted value has a lower bound but no upper bound.  */
+   BOUNDS_LOWER
+ };
+ 
  /* An experimental state machine, for tracking "taint": unsanitized uses
     of data potentially under an attacker's control.  */
  
*************** public:
*** 54,59 ****
--- 82,92 ----
  
    bool inherited_state_p () const FINAL OVERRIDE { return true; }
  
+   state_t alt_get_inherited_state (const sm_state_map &map,
+ 				   const svalue *sval,
+ 				   const extrinsic_state &ext_state)
+     const FINAL OVERRIDE;
+ 
    bool on_stmt (sm_context *sm_ctxt,
  		const supernode *node,
  		const gimple *stmt) const FINAL OVERRIDE;
*************** public:
*** 61,72 ****
    void on_condition (sm_context *sm_ctxt,
  		     const supernode *node,
  		     const gimple *stmt,
! 		     tree lhs,
  		     enum tree_code op,
! 		     tree rhs) const FINAL OVERRIDE;
  
    bool can_purge_p (state_t s) const FINAL OVERRIDE;
  
    /* State for a "tainted" value: unsanitized data potentially under an
       attacker's control.  */
    state_t m_tainted;
--- 94,116 ----
    void on_condition (sm_context *sm_ctxt,
  		     const supernode *node,
  		     const gimple *stmt,
! 		     const svalue *lhs,
  		     enum tree_code op,
! 		     const svalue *rhs) const FINAL OVERRIDE;
  
    bool can_purge_p (state_t s) const FINAL OVERRIDE;
  
+   bool get_taint (state_t s, tree type, enum bounds *out) const;
+ 
+   state_t combine_states (state_t s0, state_t s1) const;
+ 
+ private:
+   void check_for_tainted_size_arg (sm_context *sm_ctxt,
+ 				   const supernode *node,
+ 				   const gcall *call,
+ 				   tree callee_fndecl) const;
+ 
+ public:
    /* State for a "tainted" value: unsanitized data potentially under an
       attacker's control.  */
    state_t m_tainted;
*************** public:
*** 81,157 ****
    state_t m_stop;
  };
  
! enum bounds
  {
!   BOUNDS_NONE,
!   BOUNDS_UPPER,
!   BOUNDS_LOWER
  };
  
! class tainted_array_index
!   : public pending_diagnostic_subclass<tainted_array_index>
  {
  public:
    tainted_array_index (const taint_state_machine &sm, tree arg,
  		       enum bounds has_bounds)
!   : m_sm (sm), m_arg (arg), m_has_bounds (has_bounds) {}
  
    const char *get_kind () const FINAL OVERRIDE { return "tainted_array_index"; }
  
!   bool operator== (const tainted_array_index &other) const
    {
!     return same_tree_p (m_arg, other.m_arg);
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      diagnostic_metadata m;
      m.add_cwe (129);
      switch (m_has_bounds)
        {
        default:
  	gcc_unreachable ();
        case BOUNDS_NONE:
! 	return warning_meta (rich_loc, m, OPT_Wanalyzer_tainted_array_index,
! 			     "use of tainted value %qE in array lookup"
! 			     " without bounds checking",
  			     m_arg);
  	break;
        case BOUNDS_UPPER:
! 	return warning_meta (rich_loc, m, OPT_Wanalyzer_tainted_array_index,
! 			     "use of tainted value %qE in array lookup"
! 			     " without lower-bounds checking",
  			     m_arg);
  	break;
        case BOUNDS_LOWER:
! 	return warning_meta (rich_loc, m, OPT_Wanalyzer_tainted_array_index,
! 			     "use of tainted value %qE in array lookup"
! 			     " without upper-bounds checking",
  			     m_arg);
  	break;
        }
    }
  
!   label_text describe_state_change (const evdesc::state_change &change)
!     FINAL OVERRIDE
    {
!     if (change.m_new_state == m_sm.m_tainted)
        {
! 	if (change.m_origin)
! 	  return change.formatted_print ("%qE has an unchecked value here"
! 					 " (from %qE)",
! 					 change.m_expr, change.m_origin);
! 	else
! 	  return change.formatted_print ("%qE gets an unchecked value here",
! 					 change.m_expr);
        }
-     else if (change.m_new_state == m_sm.m_has_lb)
-       return change.formatted_print ("%qE has its lower bound checked here",
- 				     change.m_expr);
-     else if (change.m_new_state == m_sm.m_has_ub)
-       return change.formatted_print ("%qE has its upper bound checked here",
- 				     change.m_expr);
-     return label_text ();
    }
  
    label_text describe_final_event (const evdesc::final_event &ev) FINAL OVERRIDE
--- 125,402 ----
    state_t m_stop;
  };
  
! /* Class for diagnostics relating to taint_state_machine.  */
! 
! class taint_diagnostic : public pending_diagnostic
  {
! public:
!   taint_diagnostic (const taint_state_machine &sm, tree arg,
! 		    enum bounds has_bounds)
!   : m_sm (sm), m_arg (arg), m_has_bounds (has_bounds)
!   {}
! 
!   bool subclass_equal_p (const pending_diagnostic &base_other) const OVERRIDE
!   {
!     const taint_diagnostic &other = (const taint_diagnostic &)base_other;
!     return (same_tree_p (m_arg, other.m_arg)
! 	    && m_has_bounds == other.m_has_bounds);
!   }
! 
!   label_text describe_state_change (const evdesc::state_change &change)
!     FINAL OVERRIDE
!   {
!     if (change.m_new_state == m_sm.m_tainted)
!       {
! 	if (change.m_origin)
! 	  return change.formatted_print ("%qE has an unchecked value here"
! 					 " (from %qE)",
! 					 change.m_expr, change.m_origin);
! 	else
! 	  return change.formatted_print ("%qE gets an unchecked value here",
! 					 change.m_expr);
!       }
!     else if (change.m_new_state == m_sm.m_has_lb)
!       return change.formatted_print ("%qE has its lower bound checked here",
! 				     change.m_expr);
!     else if (change.m_new_state == m_sm.m_has_ub)
!       return change.formatted_print ("%qE has its upper bound checked here",
! 				     change.m_expr);
!     return label_text ();
!   }
! protected:
!   const taint_state_machine &m_sm;
!   tree m_arg;
!   enum bounds m_has_bounds;
  };
  
! /* Concrete taint_diagnostic subclass for reporting attacker-controlled
!    array index.  */
! 
! class tainted_array_index : public taint_diagnostic
  {
  public:
    tainted_array_index (const taint_state_machine &sm, tree arg,
  		       enum bounds has_bounds)
!   : taint_diagnostic (sm, arg, has_bounds)
!   {}
  
    const char *get_kind () const FINAL OVERRIDE { return "tainted_array_index"; }
  
!   int get_controlling_option () const FINAL OVERRIDE
    {
!     return OPT_Wanalyzer_tainted_array_index;
    }
  
    bool emit (rich_location *rich_loc) FINAL OVERRIDE
    {
      diagnostic_metadata m;
+     /* CWE-129: "Improper Validation of Array Index".  */
      m.add_cwe (129);
      switch (m_has_bounds)
        {
        default:
  	gcc_unreachable ();
        case BOUNDS_NONE:
! 	return warning_meta (rich_loc, m, get_controlling_option (),
! 			     "use of attacker-controlled value %qE"
! 			     " in array lookup without bounds checking",
  			     m_arg);
  	break;
        case BOUNDS_UPPER:
! 	return warning_meta (rich_loc, m, get_controlling_option (),
! 			     "use of attacker-controlled value %qE"
! 			     " in array lookup without checking for negative",
  			     m_arg);
  	break;
        case BOUNDS_LOWER:
! 	return warning_meta (rich_loc, m, get_controlling_option (),
! 			     "use of attacker-controlled value %qE"
! 			     " in array lookup without upper-bounds checking",
  			     m_arg);
  	break;
        }
    }
  
!   label_text describe_final_event (const evdesc::final_event &ev) FINAL OVERRIDE
    {
!     switch (m_has_bounds)
        {
!       default:
! 	gcc_unreachable ();
!       case BOUNDS_NONE:
! 	return ev.formatted_print
! 	  ("use of attacker-controlled value %qE in array lookup"
! 	   " without bounds checking",
! 	   m_arg);
!       case BOUNDS_UPPER:
! 	return ev.formatted_print
! 	  ("use of attacker-controlled value %qE"
! 	   " in array lookup without checking for negative",
! 	   m_arg);
!       case BOUNDS_LOWER:
! 	return ev.formatted_print
! 	  ("use of attacker-controlled value %qE"
! 	   " in array lookup without upper-bounds checking",
! 	   m_arg);
!       }
!   }
! };
! 
! /* Concrete taint_diagnostic subclass for reporting attacker-controlled
!    pointer offset.  */
! 
! class tainted_offset : public taint_diagnostic
! {
! public:
!   tainted_offset (const taint_state_machine &sm, tree arg,
! 		       enum bounds has_bounds)
!   : taint_diagnostic (sm, arg, has_bounds)
!   {}
! 
!   const char *get_kind () const FINAL OVERRIDE { return "tainted_offset"; }
! 
!   int get_controlling_option () const FINAL OVERRIDE
!   {
!     return OPT_Wanalyzer_tainted_offset;
!   }
! 
!   bool emit (rich_location *rich_loc) FINAL OVERRIDE
!   {
!     diagnostic_metadata m;
!     /* CWE-823: "Use of Out-of-range Pointer Offset".  */
!     m.add_cwe (823);
!     if (m_arg)
!       switch (m_has_bounds)
! 	{
! 	default:
! 	  gcc_unreachable ();
! 	case BOUNDS_NONE:
! 	  return warning_meta (rich_loc, m, get_controlling_option (),
! 			       "use of attacker-controlled value %qE as offset"
! 			       " without bounds checking",
! 			       m_arg);
! 	  break;
! 	case BOUNDS_UPPER:
! 	  return warning_meta (rich_loc, m, get_controlling_option (),
! 			       "use of attacker-controlled value %qE as offset"
! 			       " without lower-bounds checking",
! 			       m_arg);
! 	  break;
! 	case BOUNDS_LOWER:
! 	  return warning_meta (rich_loc, m, get_controlling_option (),
! 			       "use of attacker-controlled value %qE as offset"
! 			       " without upper-bounds checking",
! 			       m_arg);
! 	  break;
! 	}
!     else
!       switch (m_has_bounds)
! 	{
! 	default:
! 	  gcc_unreachable ();
! 	case BOUNDS_NONE:
! 	  return warning_meta (rich_loc, m, get_controlling_option (),
! 			       "use of attacker-controlled value as offset"
! 			       " without bounds checking");
! 	  break;
! 	case BOUNDS_UPPER:
! 	  return warning_meta (rich_loc, m, get_controlling_option (),
! 			       "use of attacker-controlled value as offset"
! 			       " without lower-bounds checking");
! 	  break;
! 	case BOUNDS_LOWER:
! 	  return warning_meta (rich_loc, m, get_controlling_option (),
! 			       "use of attacker-controlled value as offset"
! 			       " without upper-bounds checking");
! 	  break;
! 	}
!   }
! 
!   label_text describe_final_event (const evdesc::final_event &ev) FINAL OVERRIDE
!   {
!     if (m_arg)
!       switch (m_has_bounds)
! 	{
! 	default:
! 	  gcc_unreachable ();
! 	case BOUNDS_NONE:
! 	  return ev.formatted_print ("use of attacker-controlled value %qE"
! 				     " as offset without bounds checking",
! 				     m_arg);
! 	case BOUNDS_UPPER:
! 	  return ev.formatted_print ("use of attacker-controlled value %qE"
! 				     " as offset without lower-bounds checking",
! 				     m_arg);
! 	case BOUNDS_LOWER:
! 	  return ev.formatted_print ("use of attacker-controlled value %qE"
! 				     " as offset without upper-bounds checking",
! 				     m_arg);
! 	}
!     else
!       switch (m_has_bounds)
! 	{
! 	default:
! 	  gcc_unreachable ();
! 	case BOUNDS_NONE:
! 	  return ev.formatted_print ("use of attacker-controlled value"
! 				     " as offset without bounds checking");
! 	case BOUNDS_UPPER:
! 	  return ev.formatted_print ("use of attacker-controlled value"
! 				     " as offset without lower-bounds"
! 				     " checking");
! 	case BOUNDS_LOWER:
! 	  return ev.formatted_print ("use of attacker-controlled value"
! 				     " as offset without upper-bounds"
! 				     " checking");
! 	}
!   }
! };
! 
! /* Concrete taint_diagnostic subclass for reporting attacker-controlled
!    size.  */
! 
! class tainted_size : public taint_diagnostic
! {
! public:
!   tainted_size (const taint_state_machine &sm, tree arg,
! 		enum bounds has_bounds)
!   : taint_diagnostic (sm, arg, has_bounds)
!   {}
! 
!   const char *get_kind () const OVERRIDE { return "tainted_size"; }
! 
!   int get_controlling_option () const FINAL OVERRIDE
!   {
!     return OPT_Wanalyzer_tainted_size;
!   }
! 
!   bool emit (rich_location *rich_loc) OVERRIDE
!   {
!     diagnostic_metadata m;
!     m.add_cwe (129);
!     switch (m_has_bounds)
!       {
!       default:
! 	gcc_unreachable ();
!       case BOUNDS_NONE:
! 	return warning_meta (rich_loc, m, get_controlling_option (),
! 			     "use of attacker-controlled value %qE as size"
! 			     " without bounds checking",
! 			     m_arg);
! 	break;
!       case BOUNDS_UPPER:
! 	return warning_meta (rich_loc, m, get_controlling_option (),
! 			     "use of attacker-controlled value %qE as size"
! 			     " without lower-bounds checking",
! 			     m_arg);
! 	break;
!       case BOUNDS_LOWER:
! 	return warning_meta (rich_loc, m, get_controlling_option (),
! 			     "use of attacker-controlled value %qE as size"
! 			     " without upper-bounds checking",
! 			     m_arg);
! 	break;
        }
    }
  
    label_text describe_final_event (const evdesc::final_event &ev) FINAL OVERRIDE
*************** public:
*** 161,184 ****
        default:
  	gcc_unreachable ();
        case BOUNDS_NONE:
! 	return ev.formatted_print ("use of tainted value %qE in array lookup"
! 				   " without bounds checking",
  				   m_arg);
        case BOUNDS_UPPER:
! 	return ev.formatted_print ("use of tainted value %qE in array lookup"
! 				   " without lower-bounds checking",
  				   m_arg);
        case BOUNDS_LOWER:
! 	return ev.formatted_print ("use of tainted value %qE in array lookup"
! 				   " without upper-bounds checking",
  				   m_arg);
        }
    }
  
  private:
!   const taint_state_machine &m_sm;
!   tree m_arg;
!   enum bounds m_has_bounds;
  };
  
  /* taint_state_machine's ctor.  */
--- 406,664 ----
        default:
  	gcc_unreachable ();
        case BOUNDS_NONE:
! 	return ev.formatted_print ("use of attacker-controlled value %qE"
! 				   " as size without bounds checking",
  				   m_arg);
        case BOUNDS_UPPER:
! 	return ev.formatted_print ("use of attacker-controlled value %qE"
! 				   " as size without lower-bounds checking",
  				   m_arg);
        case BOUNDS_LOWER:
! 	return ev.formatted_print ("use of attacker-controlled value %qE"
! 				   " as size without upper-bounds checking",
  				   m_arg);
        }
    }
+ };
+ 
+ /* Subclass of tainted_size for reporting on tainted size values
+    passed to an external function annotated with attribute "access".  */
+ 
+ class tainted_access_attrib_size : public tainted_size
+ {
+ public:
+   tainted_access_attrib_size (const taint_state_machine &sm, tree arg,
+ 			      enum bounds has_bounds, tree callee_fndecl,
+ 			      unsigned size_argno, const char *access_str)
+   : tainted_size (sm, arg, has_bounds),
+     m_callee_fndecl (callee_fndecl),
+     m_size_argno (size_argno), m_access_str (access_str)
+   {
+   }
+ 
+   const char *get_kind () const OVERRIDE
+   {
+     return "tainted_access_attrib_size";
+   }
+ 
+   bool emit (rich_location *rich_loc) FINAL OVERRIDE
+   {
+     bool warned = tainted_size::emit (rich_loc);
+     if (warned)
+       {
+ 	inform (DECL_SOURCE_LOCATION (m_callee_fndecl),
+ 		"parameter %i of %qD marked as a size via attribute %qs",
+ 		m_size_argno + 1, m_callee_fndecl, m_access_str);
+       }
+     return warned;
+   }
  
  private:
!   tree m_callee_fndecl;
!   unsigned m_size_argno;
!   const char *m_access_str;
! };
! 
! /* Concrete taint_diagnostic subclass for reporting attacker-controlled
!    divisor (so that an attacker can trigger a divide by zero).  */
! 
! class tainted_divisor : public taint_diagnostic
! {
! public:
!   tainted_divisor (const taint_state_machine &sm, tree arg,
! 		   enum bounds has_bounds)
!   : taint_diagnostic (sm, arg, has_bounds)
!   {}
! 
!   const char *get_kind () const FINAL OVERRIDE { return "tainted_divisor"; }
! 
!   int get_controlling_option () const FINAL OVERRIDE
!   {
!     return OPT_Wanalyzer_tainted_divisor;
!   }
! 
!   bool emit (rich_location *rich_loc) FINAL OVERRIDE
!   {
!     diagnostic_metadata m;
!     /* CWE-369: "Divide By Zero".  */
!     m.add_cwe (369);
!     if (m_arg)
!       return warning_meta (rich_loc, m, get_controlling_option (),
! 			   "use of attacker-controlled value %qE as divisor"
! 			   " without checking for zero",
! 			   m_arg);
!     else
!       return warning_meta (rich_loc, m, get_controlling_option (),
! 			   "use of attacker-controlled value as divisor"
! 			   " without checking for zero");
!   }
! 
!   label_text describe_final_event (const evdesc::final_event &ev) FINAL OVERRIDE
!   {
!     if (m_arg)
!       return ev.formatted_print
! 	("use of attacker-controlled value %qE as divisor"
! 	 " without checking for zero",
! 	 m_arg);
!     else
!       return ev.formatted_print
! 	("use of attacker-controlled value as divisor"
! 	 " without checking for zero");
!   }
! };
! 
! /* Concrete taint_diagnostic subclass for reporting attacker-controlled
!    size of a dynamic allocation.  */
! 
! class tainted_allocation_size : public taint_diagnostic
! {
! public:
!   tainted_allocation_size (const taint_state_machine &sm, tree arg,
! 			   enum bounds has_bounds, enum memory_space mem_space)
!   : taint_diagnostic (sm, arg, has_bounds),
!     m_mem_space (mem_space)
!   {
!   }
! 
!   const char *get_kind () const FINAL OVERRIDE
!   {
!     return "tainted_allocation_size";
!   }
! 
!   bool subclass_equal_p (const pending_diagnostic &base_other) const OVERRIDE
!   {
!     if (!taint_diagnostic::subclass_equal_p (base_other))
!       return false;
!     const tainted_allocation_size &other
!       = (const tainted_allocation_size &)base_other;
!     return m_mem_space == other.m_mem_space;
!   }
! 
!   int get_controlling_option () const FINAL OVERRIDE
!   {
!     return OPT_Wanalyzer_tainted_allocation_size;
!   }
! 
!   bool emit (rich_location *rich_loc) FINAL OVERRIDE
!   {
!     diagnostic_metadata m;
!     /* "CWE-789: Memory Allocation with Excessive Size Value".  */
!     m.add_cwe (789);
! 
!     bool warned;
!     if (m_arg)
!       switch (m_has_bounds)
! 	{
! 	default:
! 	  gcc_unreachable ();
! 	case BOUNDS_NONE:
! 	  warned = warning_meta (rich_loc, m, get_controlling_option (),
! 				 "use of attacker-controlled value %qE as"
! 				 " allocation size without bounds checking",
! 				 m_arg);
! 	  break;
! 	case BOUNDS_UPPER:
! 	  warned = warning_meta (rich_loc, m, get_controlling_option (),
! 				 "use of attacker-controlled value %qE as"
! 				 " allocation size without"
! 				 " lower-bounds checking",
! 				 m_arg);
! 	  break;
! 	case BOUNDS_LOWER:
! 	  warned = warning_meta (rich_loc, m, get_controlling_option (),
! 				 "use of attacker-controlled value %qE as"
! 				 " allocation size without"
! 				 " upper-bounds checking",
! 				 m_arg);
! 	  break;
! 	}
!     else
!       switch (m_has_bounds)
! 	{
! 	default:
! 	  gcc_unreachable ();
! 	case BOUNDS_NONE:
! 	  warned = warning_meta (rich_loc, m, get_controlling_option (),
! 				 "use of attacker-controlled value as"
! 				 " allocation size without bounds"
! 				 " checking");
! 	  break;
! 	case BOUNDS_UPPER:
! 	  warned = warning_meta (rich_loc, m, get_controlling_option (),
! 				 "use of attacker-controlled value as"
! 				 " allocation size without"
! 				 " lower-bounds checking");
! 	  break;
! 	case BOUNDS_LOWER:
! 	  warned = warning_meta (rich_loc, m, get_controlling_option (),
! 				 "use of attacker-controlled value as"
! 				 " allocation size without"
! 				 " upper-bounds checking");
! 	  break;
! 	}
!     if (warned)
!       {
! 	location_t loc = rich_loc->get_loc ();
! 	switch (m_mem_space)
! 	  {
! 	  default:
! 	    break;
! 	  case MEMSPACE_STACK:
! 	    inform (loc, "stack-based allocation");
! 	    break;
! 	  case MEMSPACE_HEAP:
! 	    inform (loc, "heap-based allocation");
! 	    break;
! 	  }
!       }
!     return warned;
!   }
! 
!   label_text describe_final_event (const evdesc::final_event &ev) FINAL OVERRIDE
!   {
!     if (m_arg)
!       switch (m_has_bounds)
! 	{
! 	default:
! 	  gcc_unreachable ();
! 	case BOUNDS_NONE:
! 	  return ev.formatted_print
! 	    ("use of attacker-controlled value %qE as allocation size"
! 	     " without bounds checking",
! 	     m_arg);
! 	case BOUNDS_UPPER:
! 	  return ev.formatted_print
! 	    ("use of attacker-controlled value %qE as allocation size"
! 	     " without lower-bounds checking",
! 	     m_arg);
! 	case BOUNDS_LOWER:
! 	  return ev.formatted_print
! 	    ("use of attacker-controlled value %qE as allocation size"
! 	     " without upper-bounds checking",
! 	     m_arg);
! 	}
!     else
!       switch (m_has_bounds)
! 	{
! 	default:
! 	  gcc_unreachable ();
! 	case BOUNDS_NONE:
! 	  return ev.formatted_print
! 	    ("use of attacker-controlled value as allocation size"
! 	     " without bounds checking");
! 	case BOUNDS_UPPER:
! 	  return ev.formatted_print
! 	    ("use of attacker-controlled value as allocation size"
! 	     " without lower-bounds checking");
! 	case BOUNDS_LOWER:
! 	  return ev.formatted_print
! 	    ("use of attacker-controlled value as allocation size"
! 	     " without upper-bounds checking");
! 	}
!   }
! 
! private:
!   enum memory_space m_mem_space;
  };
  
  /* taint_state_machine's ctor.  */
*************** taint_state_machine::taint_state_machine
*** 192,197 ****
--- 672,749 ----
    m_stop = add_state ("stop");
  }
  
+ state_machine::state_t
+ taint_state_machine::alt_get_inherited_state (const sm_state_map &map,
+ 					      const svalue *sval,
+ 					      const extrinsic_state &ext_state)
+   const
+ {
+   switch (sval->get_kind ())
+     {
+     default:
+       break;
+     case SK_UNARYOP:
+       {
+ 	const unaryop_svalue *unaryop_sval
+ 	  = as_a <const unaryop_svalue *> (sval);
+ 	enum tree_code op = unaryop_sval->get_op ();
+ 	const svalue *arg = unaryop_sval->get_arg ();
+ 	switch (op)
+ 	  {
+ 	  case NOP_EXPR:
+ 	    {
+ 	      state_t arg_state = map.get_state (arg, ext_state);
+ 	      return arg_state;
+ 	    }
+ 	  default:
+ 	    break;
+ 	  }
+       }
+       break;
+     case SK_BINOP:
+       {
+ 	const binop_svalue *binop_sval = as_a <const binop_svalue *> (sval);
+ 	enum tree_code op = binop_sval->get_op ();
+ 	const svalue *arg0 = binop_sval->get_arg0 ();
+ 	const svalue *arg1 = binop_sval->get_arg1 ();
+ 	switch (op)
+ 	  {
+ 	  default:
+ 	    break;
+ 	  case PLUS_EXPR:
+ 	  case MINUS_EXPR:
+ 	  case MULT_EXPR:
+ 	  case POINTER_PLUS_EXPR:
+ 	  case TRUNC_DIV_EXPR:
+ 	  case TRUNC_MOD_EXPR:
+ 	    {
+ 	      state_t arg0_state = map.get_state (arg0, ext_state);
+ 	      state_t arg1_state = map.get_state (arg1, ext_state);
+ 	      return combine_states (arg0_state, arg1_state);
+ 	    }
+ 	    break;
+ 
+ 	  case EQ_EXPR:
+ 	  case GE_EXPR:
+ 	  case LE_EXPR:
+ 	  case NE_EXPR:
+ 	  case GT_EXPR:
+ 	  case LT_EXPR:
+ 	  case UNORDERED_EXPR:
+ 	  case ORDERED_EXPR:
+ 	    /* Comparisons are just booleans.  */
+ 	    return m_start;
+ 
+ 	  case BIT_AND_EXPR:
+ 	  case RSHIFT_EXPR:
+ 	    return NULL;
+ 	  }
+       }
+       break;
+     }
+   return NULL;
+ }
+ 
  /* Implementation of state_machine::on_stmt vfunc for taint_state_machine.  */
  
  bool
*************** taint_state_machine::on_stmt (sm_context
*** 215,272 ****
  				      m_start, m_tainted);
  	    return true;
  	  }
        }
    // TODO: ...etc; many other sources of untrusted data
  
    if (const gassign *assign = dyn_cast <const gassign *> (stmt))
      {
-       tree rhs1 = gimple_assign_rhs1 (assign);
        enum tree_code op = gimple_assign_rhs_code (assign);
  
!       /* Check array accesses.  */
!       if (op == ARRAY_REF)
  	{
! 	  tree arg = TREE_OPERAND (rhs1, 1);
! 
! 	  /* Unsigned types have an implicit lower bound.  */
! 	  bool is_unsigned = false;
! 	  if (INTEGRAL_TYPE_P (TREE_TYPE (arg)))
! 	    is_unsigned = TYPE_UNSIGNED (TREE_TYPE (arg));
! 
! 	  state_t state = sm_ctxt->get_state (stmt, arg);
! 	  /* Can't use a switch as the states are non-const.  */
! 	  if (state == m_tainted)
! 	    {
! 	      /* Complain about missing bounds.  */
! 	      tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
! 	      pending_diagnostic *d
! 		= new tainted_array_index (*this, diag_arg,
! 					   is_unsigned
! 					   ? BOUNDS_LOWER : BOUNDS_NONE);
! 	      sm_ctxt->warn (node, stmt, arg, d);
! 	      sm_ctxt->set_next_state (stmt, arg, m_stop);
! 	    }
! 	  else if (state == m_has_lb)
! 	    {
! 	      /* Complain about missing upper bound.  */
! 	      tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
! 	      sm_ctxt->warn (node, stmt, arg,
! 			      new tainted_array_index (*this, diag_arg,
! 						       BOUNDS_LOWER));
! 	      sm_ctxt->set_next_state (stmt, arg, m_stop);
! 	    }
! 	  else if (state == m_has_ub)
! 	    {
! 	      /* Complain about missing lower bound.  */
! 	      if (!is_unsigned)
! 		{
! 		  tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
! 		  sm_ctxt->warn  (node, stmt, arg,
! 				  new tainted_array_index (*this, diag_arg,
! 							   BOUNDS_UPPER));
! 		  sm_ctxt->set_next_state (stmt, arg, m_stop);
! 		}
! 	    }
  	}
      }
  
--- 767,810 ----
  				      m_start, m_tainted);
  	    return true;
  	  }
+ 
+ 	/* External function with "access" attribute. */
+ 	if (sm_ctxt->unknown_side_effects_p ())
+ 	  check_for_tainted_size_arg (sm_ctxt, node, call, callee_fndecl);
        }
    // TODO: ...etc; many other sources of untrusted data
  
    if (const gassign *assign = dyn_cast <const gassign *> (stmt))
      {
        enum tree_code op = gimple_assign_rhs_code (assign);
  
!       switch (op)
  	{
! 	default:
! 	  break;
! 	case TRUNC_DIV_EXPR:
! 	case CEIL_DIV_EXPR:
! 	case FLOOR_DIV_EXPR:
! 	case ROUND_DIV_EXPR:
! 	case TRUNC_MOD_EXPR:
! 	case CEIL_MOD_EXPR:
! 	case FLOOR_MOD_EXPR:
! 	case ROUND_MOD_EXPR:
! 	case RDIV_EXPR:
! 	case EXACT_DIV_EXPR:
! 	  {
! 	    tree divisor = gimple_assign_rhs2 (assign);;
! 	    state_t state = sm_ctxt->get_state (stmt, divisor);
! 	    enum bounds b;
! 	    if (get_taint (state, TREE_TYPE (divisor), &b))
! 	      {
! 		tree diag_divisor = sm_ctxt->get_diagnostic_tree (divisor);
! 		sm_ctxt->warn  (node, stmt, divisor,
! 				new tainted_divisor (*this, diag_divisor, b));
! 		sm_ctxt->set_next_state (stmt, divisor, m_stop);
! 	      }
! 	  }
! 	  break;
  	}
      }
  
*************** void
*** 281,289 ****
  taint_state_machine::on_condition (sm_context *sm_ctxt,
  				   const supernode *node,
  				   const gimple *stmt,
! 				   tree lhs,
  				   enum tree_code op,
! 				   tree rhs ATTRIBUTE_UNUSED) const
  {
    if (stmt == NULL)
      return;
--- 819,827 ----
  taint_state_machine::on_condition (sm_context *sm_ctxt,
  				   const supernode *node,
  				   const gimple *stmt,
! 				   const svalue *lhs,
  				   enum tree_code op,
! 				   const svalue *rhs ATTRIBUTE_UNUSED) const
  {
    if (stmt == NULL)
      return;
*************** taint_state_machine::can_purge_p (state_
*** 324,329 ****
--- 862,983 ----
    return true;
  }
  
+ /* If STATE is a tainted state, write the bounds to *OUT and return true.
+    Otherwise return false.
+    Use the signedness of TYPE to determine if "has_ub" is tainted.  */
+ 
+ bool
+ taint_state_machine::get_taint (state_t state, tree type,
+ 				enum bounds *out) const
+ {
+   /* Unsigned types have an implicit lower bound.  */
+   bool is_unsigned = false;
+   if (type)
+     if (INTEGRAL_TYPE_P (type))
+       is_unsigned = TYPE_UNSIGNED (type);
+ 
+   /* Can't use a switch as the states are non-const.  */
+   if (state == m_tainted)
+     {
+       *out = is_unsigned ? BOUNDS_LOWER : BOUNDS_NONE;
+       return true;
+     }
+   else if (state == m_has_lb)
+     {
+       *out = BOUNDS_LOWER;
+       return true;
+     }
+   else if (state == m_has_ub && !is_unsigned)
+     {
+       /* Missing lower bound.  */
+       *out = BOUNDS_UPPER;
+       return true;
+     }
+   return false;
+ }
+ 
+ /* Find the most tainted state of S0 and S1.  */
+ 
+ state_machine::state_t
+ taint_state_machine::combine_states (state_t s0, state_t s1) const
+ {
+   gcc_assert (s0);
+   gcc_assert (s1);
+   if (s0 == s1)
+     return s0;
+   if (s0 == m_tainted || s1 == m_tainted)
+     return m_tainted;
+   if (s0 == m_start)
+     return s1;
+   if (s1 == m_start)
+     return s0;
+   if (s0 == m_stop)
+     return s1;
+   if (s1 == m_stop)
+     return s0;
+   /* The only remaining combinations are one of has_ub and has_lb
+      (in either order).  */
+   gcc_assert ((s0 == m_has_lb && s1 == m_has_ub)
+ 	      || (s0 == m_has_ub && s1 == m_has_lb));
+   return m_tainted;
+ }
+ 
+ /* Check for calls to external functions marked with
+    __attribute__((access)) with a size-index: complain about
+    tainted values passed as a size to such a function.  */
+ 
+ void
+ taint_state_machine::check_for_tainted_size_arg (sm_context *sm_ctxt,
+ 						 const supernode *node,
+ 						 const gcall *call,
+ 						 tree callee_fndecl) const
+ {
+   tree fntype = TREE_TYPE (callee_fndecl);
+   if (!fntype)
+     return;
+ 
+   if (!TYPE_ATTRIBUTES (fntype))
+     return;
+ 
+   /* Initialize a map of attribute access specifications for arguments
+      to the function call.  */
+   rdwr_map rdwr_idx;
+   init_attr_rdwr_indices (&rdwr_idx, TYPE_ATTRIBUTES (fntype));
+ 
+   unsigned argno = 0;
+ 
+   for (tree iter = TYPE_ARG_TYPES (fntype); iter;
+        iter = TREE_CHAIN (iter), ++argno)
+     {
+       const attr_access* access = rdwr_idx.get (argno);
+       if (!access)
+ 	continue;
+ 
+       /* Ignore any duplicate entry in the map for the size argument.  */
+       if (access->ptrarg != argno)
+ 	continue;
+ 
+       if (access->sizarg == UINT_MAX)
+ 	continue;
+ 
+       tree size_arg = gimple_call_arg (call, access->sizarg);
+ 
+       state_t state = sm_ctxt->get_state (call, size_arg);
+       enum bounds b;
+       if (get_taint (state, TREE_TYPE (size_arg), &b))
+ 	{
+ 	  const char* const access_str =
+ 	    TREE_STRING_POINTER (access->to_external_string ());
+ 	  tree diag_size = sm_ctxt->get_diagnostic_tree (size_arg);
+ 	  sm_ctxt->warn (node, call, size_arg,
+ 			 new tainted_access_attrib_size (*this, diag_size, b,
+ 							 callee_fndecl,
+ 							 access->sizarg,
+ 							 access_str));
+ 	}
+     }
+ }
+ 
  } // anonymous namespace
  
  /* Internal interface to this file. */
*************** make_taint_state_machine (logger *logger
*** 334,339 ****
--- 988,1138 ----
    return new taint_state_machine (logger);
  }
  
+ /* Complain to CTXT if accessing REG leads could lead to arbitrary
+    memory access under an attacker's control (due to taint).  */
+ 
+ void
+ region_model::check_region_for_taint (const region *reg,
+ 				      enum access_direction,
+ 				      region_model_context *ctxt) const
+ {
+   gcc_assert (reg);
+   gcc_assert (ctxt);
+ 
+   LOG_SCOPE (ctxt->get_logger ());
+ 
+   sm_state_map *smap;
+   const state_machine *sm;
+   unsigned sm_idx;
+   if (!ctxt->get_taint_map (&smap, &sm, &sm_idx))
+     return;
+ 
+   gcc_assert (smap);
+   gcc_assert (sm);
+ 
+   const taint_state_machine &taint_sm = (const taint_state_machine &)*sm;
+ 
+   const extrinsic_state *ext_state = ctxt->get_ext_state ();
+   if (!ext_state)
+     return;
+ 
+   const region *iter_region = reg;
+   while (iter_region)
+     {
+       switch (iter_region->get_kind ())
+ 	{
+ 	default:
+ 	  break;
+ 
+ 	case RK_ELEMENT:
+ 	  {
+ 	    const element_region *element_reg
+ 	      = (const element_region *)iter_region;
+ 	    const svalue *index = element_reg->get_index ();
+ 	    const state_machine::state_t
+ 	      state = smap->get_state (index, *ext_state);
+ 	    gcc_assert (state);
+ 	    enum bounds b;
+ 	    if (taint_sm.get_taint (state, index->get_type (), &b))
+ 	    {
+ 	      tree arg = get_representative_tree (index);
+ 	      ctxt->warn (new tainted_array_index (taint_sm, arg, b));
+ 	    }
+ 	  }
+ 	  break;
+ 
+ 	case RK_OFFSET:
+ 	  {
+ 	    const offset_region *offset_reg
+ 	      = (const offset_region *)iter_region;
+ 	    const svalue *offset = offset_reg->get_byte_offset ();
+ 	    const state_machine::state_t
+ 	      state = smap->get_state (offset, *ext_state);
+ 	    gcc_assert (state);
+ 	    /* Handle implicit cast to sizetype.  */
+ 	    tree effective_type = offset->get_type ();
+ 	    if (const svalue *cast = offset->maybe_undo_cast ())
+ 	      if (cast->get_type ())
+ 		effective_type = cast->get_type ();
+ 	    enum bounds b;
+ 	    if (taint_sm.get_taint (state, effective_type, &b))
+ 	      {
+ 		tree arg = get_representative_tree (offset);
+ 		ctxt->warn (new tainted_offset (taint_sm, arg, b));
+ 	      }
+ 	  }
+ 	  break;
+ 
+ 	case RK_CAST:
+ 	  {
+ 	    const cast_region *cast_reg
+ 	      = as_a <const cast_region *> (iter_region);
+ 	    iter_region = cast_reg->get_original_region ();
+ 	    continue;
+ 	  }
+ 
+ 	case RK_SIZED:
+ 	  {
+ 	    const sized_region *sized_reg
+ 	      = (const sized_region *)iter_region;
+ 	    const svalue *size_sval = sized_reg->get_byte_size_sval (m_mgr);
+ 	    const state_machine::state_t
+ 	      state = smap->get_state (size_sval, *ext_state);
+ 	    gcc_assert (state);
+ 	    enum bounds b;
+ 	    if (taint_sm.get_taint (state, size_sval->get_type (), &b))
+ 	      {
+ 		tree arg = get_representative_tree (size_sval);
+ 		ctxt->warn (new tainted_size (taint_sm, arg, b));
+ 	      }
+ 	  }
+ 	  break;
+ 	}
+ 
+       iter_region = iter_region->get_parent_region ();
+     }
+ }
+ 
+ /* Complain to CTXT about a tainted allocation size if SIZE_IN_BYTES is
+    under an attacker's control (due to taint), where the allocation
+    is happening within MEM_SPACE.  */
+ 
+ void
+ region_model::check_dynamic_size_for_taint (enum memory_space mem_space,
+ 					    const svalue *size_in_bytes,
+ 					    region_model_context *ctxt) const
+ {
+   gcc_assert (size_in_bytes);
+   gcc_assert (ctxt);
+ 
+   LOG_SCOPE (ctxt->get_logger ());
+ 
+   sm_state_map *smap;
+   const state_machine *sm;
+   unsigned sm_idx;
+   if (!ctxt->get_taint_map (&smap, &sm, &sm_idx))
+     return;
+ 
+   gcc_assert (smap);
+   gcc_assert (sm);
+ 
+   const taint_state_machine &taint_sm = (const taint_state_machine &)*sm;
+ 
+   const extrinsic_state *ext_state = ctxt->get_ext_state ();
+   if (!ext_state)
+     return;
+ 
+   const state_machine::state_t
+     state = smap->get_state (size_in_bytes, *ext_state);
+   gcc_assert (state);
+   enum bounds b;
+   if (taint_sm.get_taint (state, size_in_bytes->get_type (), &b))
+     {
+       tree arg = get_representative_tree (size_in_bytes);
+       ctxt->warn (new tainted_allocation_size (taint_sm, arg, b, mem_space));
+     }
+ }
+ 
  } // namespace ana
  
  #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/sm.cc gcc-12.1.0/gcc/analyzer/sm.cc
*** gcc-11.3.0/gcc/analyzer/sm.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/sm.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Modeling API uses and misuses via state machines.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Modeling API uses and misuses via state machines.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 35,40 ****
--- 35,45 ----
  #include "analyzer/analyzer.h"
  #include "analyzer/analyzer-logging.h"
  #include "analyzer/sm.h"
+ #include "tristate.h"
+ #include "analyzer/call-string.h"
+ #include "analyzer/program-point.h"
+ #include "analyzer/store.h"
+ #include "analyzer/svalue.h"
  
  #if ENABLE_ANALYZER
  
*************** any_pointer_p (tree var)
*** 48,53 ****
--- 53,67 ----
    return POINTER_TYPE_P (TREE_TYPE (var));
  }
  
+ /* Return true if SVAL has pointer or reference type.  */
+ 
+ bool
+ any_pointer_p (const svalue *sval)
+ {
+   if (!sval->get_type ())
+     return false;
+   return POINTER_TYPE_P (sval->get_type ());
+ }
  
  /* class state_machine::state.  */
  
diff -Nrcpad gcc-11.3.0/gcc/analyzer/sm.h gcc-12.1.0/gcc/analyzer/sm.h
*** gcc-11.3.0/gcc/analyzer/sm.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/sm.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Modeling API uses and misuses via state machines.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Modeling API uses and misuses via state machines.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** class state_machine;
*** 29,35 ****
  class sm_context;
  class pending_diagnostic;
  
! extern bool any_pointer_p (tree var);
  
  /* An abstract base class for a state machine describing an API.
     Manages a set of state objects, and has various virtual functions
--- 29,36 ----
  class sm_context;
  class pending_diagnostic;
  
! extern bool any_pointer_p (tree expr);
! extern bool any_pointer_p (const svalue *sval);
  
  /* An abstract base class for a state machine describing an API.
     Manages a set of state objects, and has various virtual functions
*************** public:
*** 68,73 ****
--- 69,83 ----
       within a heap-allocated struct.  */
    virtual bool inherited_state_p () const = 0;
  
+   /* A vfunc for more general handling of inheritance.  */
+   virtual state_t
+   alt_get_inherited_state (const sm_state_map &,
+ 			   const svalue *,
+ 			   const extrinsic_state &) const
+   {
+     return NULL;
+   }
+ 
    virtual state_machine::state_t get_default_state (const svalue *) const
    {
      return m_start;
*************** public:
*** 89,98 ****
    {
    }
  
!   virtual void on_condition (sm_context *sm_ctxt,
! 			     const supernode *node,
! 			     const gimple *stmt,
! 			     tree lhs, enum tree_code op, tree rhs) const = 0;
  
    /* Return true if it safe to discard the given state (to help
       when simplifying state objects).
--- 99,112 ----
    {
    }
  
!   virtual void on_condition (sm_context *sm_ctxt ATTRIBUTE_UNUSED,
! 			     const supernode *node ATTRIBUTE_UNUSED,
! 			     const gimple *stmt ATTRIBUTE_UNUSED,
! 			     const svalue *lhs ATTRIBUTE_UNUSED,
! 			     enum tree_code op ATTRIBUTE_UNUSED,
! 			     const svalue *rhs ATTRIBUTE_UNUSED) const
!   {
!   }
  
    /* Return true if it safe to discard the given state (to help
       when simplifying state objects).
*************** public:
*** 182,187 ****
--- 196,203 ----
    /* Get the old state of VAR at STMT.  */
    virtual state_machine::state_t get_state (const gimple *stmt,
  					    tree var) = 0;
+   virtual state_machine::state_t get_state (const gimple *stmt,
+ 					    const svalue *) = 0;
    /* Set the next state of VAR to be TO, recording the "origin" of the
       state as ORIGIN.
       Use STMT for location information.  */
*************** public:
*** 189,194 ****
--- 205,214 ----
  			       tree var,
  			       state_machine::state_t to,
  			       tree origin = NULL_TREE) = 0;
+   virtual void set_next_state (const gimple *stmt,
+ 			       const svalue *var,
+ 			       state_machine::state_t to,
+ 			       tree origin = NULL_TREE) = 0;
  
    /* Called by state_machine in response to pattern matches:
       if VAR is in state FROM, transition it to state TO, potentially
*************** public:
*** 206,211 ****
--- 226,243 ----
        set_next_state (stmt, var, to, origin);
    }
  
+   void on_transition (const supernode *node ATTRIBUTE_UNUSED,
+ 		      const gimple *stmt,
+ 		      const svalue *var,
+ 		      state_machine::state_t from,
+ 		      state_machine::state_t to,
+ 		      tree origin = NULL_TREE)
+   {
+     state_machine::state_t current = get_state (stmt, var);
+     if (current == from)
+       set_next_state (stmt, var, to, origin);
+   }
+ 
    /* Called by state_machine in response to pattern matches:
       issue a diagnostic D using NODE and STMT for location information.  */
    virtual void warn (const supernode *node, const gimple *stmt,
*************** public:
*** 220,225 ****
--- 252,258 ----
    {
      return expr;
    }
+   virtual tree get_diagnostic_tree (const svalue *) = 0;
  
    virtual state_machine::state_t get_global_state () const = 0;
    virtual void set_global_state (state_machine::state_t) = 0;
*************** public:
*** 233,238 ****
--- 266,283 ----
       Otherwise return NULL_TREE.  */
    virtual tree is_zero_assignment (const gimple *stmt) = 0;
  
+   virtual path_context *get_path_context () const
+   {
+     return NULL;
+   }
+ 
+   /* Are we handling an external function with unknown side effects?  */
+   virtual bool unknown_side_effects_p () const { return false; }
+ 
+   virtual const program_state *get_old_program_state () const = 0;
+ 
+   const svalue *get_old_svalue (tree expr) const;
+ 
  protected:
    sm_context (int sm_idx, const state_machine &sm)
    : m_sm_idx (sm_idx), m_sm (sm) {}
diff -Nrcpad gcc-11.3.0/gcc/analyzer/state-purge.cc gcc-12.1.0/gcc/analyzer/state-purge.cc
*** gcc-11.3.0/gcc/analyzer/state-purge.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/state-purge.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for purging state at function_points.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for purging state at function_points.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 49,61 ****
  #include "analyzer/program-point.h"
  #include "analyzer/analyzer-logging.h"
  #include "analyzer/state-purge.h"
  
  #if ENABLE_ANALYZER
  
  /* state_purge_map's ctor.  Walk all SSA names in all functions, building
!    a state_purge_per_ssa_name instance for each.  */
  
  state_purge_map::state_purge_map (const supergraph &sg,
  				  logger *logger)
  : log_user (logger), m_sg (sg)
  {
--- 49,213 ----
  #include "analyzer/program-point.h"
  #include "analyzer/analyzer-logging.h"
  #include "analyzer/state-purge.h"
+ #include "tristate.h"
+ #include "selftest.h"
+ #include "analyzer/store.h"
+ #include "analyzer/region-model.h"
+ #include "gimple-walk.h"
  
  #if ENABLE_ANALYZER
  
+ /* Given NODE at an access, determine if this access is within
+    a decl that could be consider for purging, and if so, return the decl.  */
+ 
+ static tree
+ get_candidate_for_purging (tree node)
+ {
+   tree iter = node;
+   while (1)
+     switch (TREE_CODE (iter))
+       {
+       default:
+ 	return NULL_TREE;
+ 
+       case COMPONENT_REF:
+ 	iter = TREE_OPERAND (iter, 0);
+ 	continue;
+ 
+       case VAR_DECL:
+ 	if (is_global_var (iter))
+ 	  return NULL_TREE;
+ 	else
+ 	  return iter;
+ 
+       case PARM_DECL:
+       case RESULT_DECL:
+ 	return iter;
+       }
+ }
+ 
+ /* Class-based handler for walk_stmt_load_store_addr_ops at a particular
+    function_point, for populating the worklists within a state_purge_map.  */
+ 
+ class gimple_op_visitor : public log_user
+ {
+ public:
+   gimple_op_visitor (state_purge_map *map,
+ 		     const function_point &point,
+ 		     function *fun)
+   : log_user (map->get_logger ()),
+     m_map (map),
+     m_point (point),
+     m_fun (fun)
+   {}
+ 
+   bool on_load (gimple *stmt, tree base, tree op)
+   {
+     LOG_FUNC (get_logger ());
+     if (get_logger ())
+       {
+ 	pretty_printer pp;
+ 	pp_gimple_stmt_1 (&pp, stmt, 0, (dump_flags_t)0);
+ 	log ("on_load: %s; base: %qE, op: %qE",
+ 	     pp_formatted_text (&pp), base, op);
+       }
+     if (tree node = get_candidate_for_purging (base))
+       add_needed (node);
+     return true;
+   }
+ 
+   bool on_store (gimple *stmt, tree base, tree op)
+   {
+     LOG_FUNC (get_logger ());
+     if (get_logger ())
+       {
+ 	pretty_printer pp;
+ 	pp_gimple_stmt_1 (&pp, stmt, 0, (dump_flags_t)0);
+ 	log ("on_store: %s; base: %qE, op: %qE",
+ 	     pp_formatted_text (&pp), base, op);
+       }
+     return true;
+   }
+ 
+   bool on_addr (gimple *stmt, tree base, tree op)
+   {
+     LOG_FUNC (get_logger ());
+     if (get_logger ())
+       {
+ 	pretty_printer pp;
+ 	pp_gimple_stmt_1 (&pp, stmt, 0, (dump_flags_t)0);
+ 	log ("on_addr: %s; base: %qE, op: %qE",
+ 	     pp_formatted_text (&pp), base, op);
+       }
+     if (TREE_CODE (op) != ADDR_EXPR)
+       return true;
+     if (tree node = get_candidate_for_purging (base))
+       {
+ 	add_needed (node);
+ 	add_pointed_to (node);
+       }
+     return true;
+   }
+ 
+ private:
+   void add_needed (tree decl)
+   {
+     gcc_assert (get_candidate_for_purging (decl) == decl);
+     state_purge_per_decl &data
+       = get_or_create_data_for_decl (decl);
+     data.add_needed_at (m_point);
+ 
+     /* Handle calls: if we're seeing a use at a call, then add a use at the
+        "after-supernode" point (in case of interprocedural call superedges).  */
+     if (m_point.final_stmt_p ())
+       data.add_needed_at (m_point.get_next ());
+   }
+ 
+   void add_pointed_to (tree decl)
+   {
+     gcc_assert (get_candidate_for_purging (decl) == decl);
+     get_or_create_data_for_decl (decl).add_pointed_to_at (m_point);
+   }
+ 
+   state_purge_per_decl &
+   get_or_create_data_for_decl (tree decl)
+   {
+     return m_map->get_or_create_data_for_decl (m_fun, decl);
+   }
+ 
+   state_purge_map *m_map;
+   const function_point &m_point;
+   function *m_fun;
+ };
+ 
+ static bool
+ my_load_cb  (gimple *stmt, tree base, tree op, void *user_data)
+ {
+   gimple_op_visitor *x = (gimple_op_visitor *)user_data;
+   return x->on_load (stmt, base, op);
+ }
+ 
+ static bool
+ my_store_cb  (gimple *stmt, tree base, tree op, void *user_data)
+ {
+   gimple_op_visitor *x = (gimple_op_visitor *)user_data;
+   return x->on_store (stmt, base, op);
+ }
+ 
+ static bool
+ my_addr_cb  (gimple *stmt, tree base, tree op, void *user_data)
+ {
+   gimple_op_visitor *x = (gimple_op_visitor *)user_data;
+   return x->on_addr (stmt, base, op);
+ }
+ 
  /* state_purge_map's ctor.  Walk all SSA names in all functions, building
!    a state_purge_per_ssa_name instance for each.
!    Also, walk all loads and address-taken ops of local variables, building
!    a state_purge_per_decl as appropriate.  */
  
  state_purge_map::state_purge_map (const supergraph &sg,
+ 				  region_model_manager *mgr,
  				  logger *logger)
  : log_user (logger), m_sg (sg)
  {
*************** state_purge_map::state_purge_map (const
*** 78,96 ****
  	  if (TREE_CODE (var) == VAR_DECL)
  	    if (VAR_DECL_IS_VIRTUAL_OPERAND (var))
  	      continue;
! 	m_map.put (name, new state_purge_per_ssa_name (*this, name, fun));
        }
    }
  }
  
  /* state_purge_map's dtor.  */
  
  state_purge_map::~state_purge_map ()
  {
!   for (iterator iter = m_map.begin (); iter != m_map.end (); ++iter)
!     delete (*iter).second;
  }
  
  /* state_purge_per_ssa_name's ctor.
  
     Locate all uses of VAR within FUN.
--- 230,294 ----
  	  if (TREE_CODE (var) == VAR_DECL)
  	    if (VAR_DECL_IS_VIRTUAL_OPERAND (var))
  	      continue;
! 	m_ssa_map.put (name, new state_purge_per_ssa_name (*this, name, fun));
        }
    }
+ 
+   /* Find all uses of local vars.
+      We iterate through all function points, finding loads, stores, and
+      address-taken operations on locals, building a pair of worklists.  */
+   for (auto snode : sg.m_nodes)
+     {
+       if (logger)
+ 	log ("SN: %i", snode->m_index);
+       /* We ignore m_returning_call and phi nodes.  */
+       gimple *stmt;
+       unsigned i;
+       FOR_EACH_VEC_ELT (snode->m_stmts, i, stmt)
+ 	{
+ 	  function_point point (function_point::before_stmt (snode, i));
+ 	  gimple_op_visitor v (this, point, snode->get_function ());
+ 	  walk_stmt_load_store_addr_ops (stmt, &v,
+ 					 my_load_cb, my_store_cb, my_addr_cb);
+ 	}
+     }
+ 
+   /* Now iterate through the m_decl_map, processing each pair of worklists.  */
+   for (state_purge_map::decl_iterator iter = begin_decls ();
+        iter != end_decls ();
+        ++iter)
+     {
+       state_purge_per_decl *per_decl_data = (*iter).second;
+       per_decl_data->process_worklists (*this, mgr);
+     }
  }
  
  /* state_purge_map's dtor.  */
  
  state_purge_map::~state_purge_map ()
  {
!   for (auto iter : m_ssa_map)
!     delete iter.second;
!   for (auto iter : m_decl_map)
!     delete iter.second;
! }
! 
! /* Get the state_purge_per_decl for local DECL within FUN, creating it
!    if necessary.  */
! 
! state_purge_per_decl &
! state_purge_map::get_or_create_data_for_decl (function *fun, tree decl)
! {
!   if (state_purge_per_decl **slot
!       = const_cast <decl_map_t&> (m_decl_map).get (decl))
!     return **slot;
!   state_purge_per_decl *result = new state_purge_per_decl (*this, decl, fun);
!   m_decl_map.put (decl, result);
!   return *result;
  }
  
+ /* class state_purge_per_ssa_name : public state_purge_per_tree.  */
+ 
  /* state_purge_per_ssa_name's ctor.
  
     Locate all uses of VAR within FUN.
*************** state_purge_map::~state_purge_map ()
*** 103,109 ****
  state_purge_per_ssa_name::state_purge_per_ssa_name (const state_purge_map &map,
  						    tree name,
  						    function *fun)
! : m_points_needing_name (), m_name (name), m_fun (fun)
  {
    LOG_FUNC (map.get_logger ());
  
--- 301,307 ----
  state_purge_per_ssa_name::state_purge_per_ssa_name (const state_purge_map &map,
  						    tree name,
  						    function *fun)
! : state_purge_per_tree (fun), m_points_needing_name (), m_name (name)
  {
    LOG_FUNC (map.get_logger ());
  
*************** state_purge_per_ssa_name::add_to_worklis
*** 270,276 ****
        logger->end_log_line ();
      }
  
!   gcc_assert (point.get_function () == m_fun);
    if (point.get_from_edge ())
      gcc_assert (point.get_from_edge ()->get_kind () == SUPEREDGE_CFG_EDGE);
  
--- 468,474 ----
        logger->end_log_line ();
      }
  
!   gcc_assert (point.get_function () == get_function ());
    if (point.get_from_edge ())
      gcc_assert (point.get_from_edge ()->get_kind () == SUPEREDGE_CFG_EDGE);
  
*************** state_purge_per_ssa_name::add_to_worklis
*** 288,293 ****
--- 486,511 ----
      }
  }
  
+ /* Return true iff NAME is used by any of the phi nodes in SNODE
+    when processing the in-edge with PHI_ARG_IDX.  */
+ 
+ static bool
+ name_used_by_phis_p (tree name, const supernode *snode,
+ 		     size_t phi_arg_idx)
+ {
+   gcc_assert (TREE_CODE (name) == SSA_NAME);
+ 
+   for (gphi_iterator gpi
+ 	 = const_cast<supernode *> (snode)->start_phis ();
+        !gsi_end_p (gpi); gsi_next (&gpi))
+     {
+       gphi *phi = gpi.phi ();
+       if (gimple_phi_arg_def (phi, phi_arg_idx) == name)
+ 	return true;
+     }
+   return false;
+ }
+ 
  /* Process POINT, popped from WORKLIST.
     Iterate over predecessors of POINT, adding to WORKLIST.  */
  
*************** state_purge_per_ssa_name::process_point
*** 325,336 ****
  	       = const_cast<supernode *> (snode)->start_phis ();
  	     !gsi_end_p (gpi); gsi_next (&gpi))
  	  {
  	    gphi *phi = gpi.phi ();
  	    if (phi == def_stmt)
  	      {
! 		if (logger)
! 		  logger->log ("def stmt within phis; terminating");
! 		return;
  	      }
  	  }
  
--- 543,571 ----
  	       = const_cast<supernode *> (snode)->start_phis ();
  	     !gsi_end_p (gpi); gsi_next (&gpi))
  	  {
+ 	    gcc_assert (point.get_from_edge ());
+ 	    const cfg_superedge *cfg_sedge
+ 	      = point.get_from_edge ()->dyn_cast_cfg_superedge ();
+ 	    gcc_assert (cfg_sedge);
+ 
  	    gphi *phi = gpi.phi ();
+ 	    /* Are we at the def-stmt for m_name?  */
  	    if (phi == def_stmt)
  	      {
! 		if (name_used_by_phis_p (m_name, snode,
! 					 cfg_sedge->get_phi_arg_idx ()))
! 		  {
! 		    if (logger)
! 		      logger->log ("name in def stmt used within phis;"
! 				   " continuing");
! 		  }
! 		else
! 		  {
! 		    if (logger)
! 		      logger->log ("name in def stmt not used within phis;"
! 				   " terminating");
! 		    return;
! 		  }
  	      }
  	  }
  
*************** state_purge_per_ssa_name::process_point
*** 346,363 ****
  	  {
  	    /* Add any intraprocedually edge for a call.  */
  	    if (snode->m_returning_call)
! 	      {
! 		cgraph_edge *cedge
  		  = supergraph_call_edge (snode->m_fun,
! 					  snode->m_returning_call);
! 		gcc_assert (cedge);
! 		superedge *sedge
! 		  = map.get_sg ().get_intraprocedural_edge_for_call (cedge);
! 		gcc_assert (sedge);
! 		add_to_worklist
! 		  (function_point::after_supernode (sedge->m_src),
! 		   worklist, logger);
! 	      }
  	  }
        }
        break;
--- 581,611 ----
  	  {
  	    /* Add any intraprocedually edge for a call.  */
  	    if (snode->m_returning_call)
! 	    {
! 	      gcall *returning_call = snode->m_returning_call;
! 	      cgraph_edge *cedge
  		  = supergraph_call_edge (snode->m_fun,
! 					  returning_call);
! 	      if(cedge)
! 	        {
! 		  superedge *sedge
! 		    = map.get_sg ().get_intraprocedural_edge_for_call (cedge);
! 		  gcc_assert (sedge);
! 		  add_to_worklist 
! 		    (function_point::after_supernode (sedge->m_src),
! 		     worklist, logger);
! 	        }
! 	      else
! 	        {
! 	          supernode *callernode 
! 	            = map.get_sg ().get_supernode_for_stmt (returning_call);
! 
! 	          gcc_assert (callernode);
! 	          add_to_worklist 
! 	            (function_point::after_supernode (callernode),
! 		     worklist, logger);
! 	         }
! 	    }
  	  }
        }
        break;
*************** state_purge_per_ssa_name::process_point
*** 420,425 ****
--- 668,1049 ----
      }
  }
  
+ /* class state_purge_per_decl : public state_purge_per_tree.  */
+ 
+ /* state_purge_per_decl's ctor.  */
+ 
+ state_purge_per_decl::state_purge_per_decl (const state_purge_map &map,
+ 					    tree decl,
+ 					    function *fun)
+ : state_purge_per_tree (fun),
+   m_decl (decl)
+ {
+   /* The RESULT_DECL is always needed at the end of its function. */
+   if (TREE_CODE (decl) == RESULT_DECL)
+     {
+       supernode *exit_snode = map.get_sg ().get_node_for_function_exit (fun);
+       add_needed_at (function_point::after_supernode (exit_snode));
+     }
+ }
+ 
+ /* Mark the value of the decl (or a subvalue within it) as being needed
+    at POINT.  */
+ 
+ void
+ state_purge_per_decl::add_needed_at (const function_point &point)
+ {
+   m_points_needing_decl.add (point);
+ }
+ 
+ /* Mark that a pointer to the decl (or a region within it) is taken
+    at POINT.  */
+ 
+ void
+ state_purge_per_decl::add_pointed_to_at (const function_point &point)
+ {
+   m_points_taking_address.add (point);
+ }
+ 
+ /* Process the worklists for this decl:
+    (a) walk backwards from points where we know the value of the decl
+    is needed, marking points until we get to a stmt that fully overwrites
+    the decl.
+    (b) walk forwards from points where the address of the decl is taken,
+    marking points as potentially needing the value of the decl.  */
+ 
+ void
+ state_purge_per_decl::process_worklists (const state_purge_map &map,
+ 					 region_model_manager *mgr)
+ {
+   logger *logger = map.get_logger ();
+   LOG_SCOPE (logger);
+   if (logger)
+     logger->log ("decl: %qE within %qD", m_decl, get_fndecl ());
+ 
+   /* Worklist for walking backwards from uses.  */
+   {
+     auto_vec<function_point> worklist;
+     point_set_t seen;
+ 
+     /* Add all uses of the decl to the worklist.  */
+     for (auto iter : m_points_needing_decl)
+       worklist.safe_push (iter);
+ 
+     region_model model (mgr);
+     model.push_frame (get_function (), NULL, NULL);
+ 
+     /* Process worklist by walking backwards until we reach a stmt
+        that fully overwrites the decl.  */
+     {
+       log_scope s (logger, "processing worklist");
+       while (worklist.length () > 0)
+ 	{
+ 	  function_point point = worklist.pop ();
+ 	  process_point_backwards (point, &worklist, &seen, map, model);
+ 	}
+     }
+   }
+ 
+   /* Worklist for walking forwards from address-taken points.  */
+   {
+     auto_vec<function_point> worklist;
+     point_set_t seen;
+ 
+     /* Add all uses of the decl to the worklist.  */
+     for (auto iter : m_points_taking_address)
+       {
+ 	worklist.safe_push (iter);
+ 
+ 	/* Add to m_points_needing_decl (now that we traversed
+ 	   it above for the backward worklist).  */
+ 	m_points_needing_decl.add (iter);
+       }
+ 
+     /* Process worklist by walking forwards. */
+     {
+       log_scope s (logger, "processing worklist");
+       while (worklist.length () > 0)
+ 	{
+ 	  function_point point = worklist.pop ();
+ 	  process_point_forwards (point, &worklist, &seen, map);
+ 	}
+     }
+   }
+ }
+ 
+ /* Add POINT to *WORKLIST if the point is not already in *seen.
+    Add newly seen points to *SEEN and to m_points_needing_name.  */
+ 
+ void
+ state_purge_per_decl::add_to_worklist (const function_point &point,
+ 				       auto_vec<function_point> *worklist,
+ 				       point_set_t *seen,
+ 				       logger *logger)
+ {
+   LOG_FUNC (logger);
+   if (logger)
+     {
+       logger->start_log_line ();
+       logger->log_partial ("point: '");
+       point.print (logger->get_printer (), format (false));
+       logger->log_partial ("' for worklist for %qE", m_decl);
+       logger->end_log_line ();
+     }
+ 
+   gcc_assert (point.get_function () == get_function ());
+   if (point.get_from_edge ())
+     gcc_assert (point.get_from_edge ()->get_kind () == SUPEREDGE_CFG_EDGE);
+ 
+   if (seen->contains (point))
+     {
+       if (logger)
+ 	logger->log ("already seen for %qE", m_decl);
+     }
+   else
+     {
+       if (logger)
+ 	logger->log ("not seen; adding to worklist for %qE", m_decl);
+       m_points_needing_decl.add (point);
+       seen->add (point);
+       worklist->safe_push (point);
+     }
+ }
+ 
+ /* Determine if REG_A and REG_B express writing to exactly the same
+    set of bits.
+    For example, when "s.field" is the only field of "s", and there's no
+    padding, this should return true.  */
+ 
+ static bool
+ same_binding_p (const region *reg_a, const region *reg_b,
+ 		store_manager *store_mgr)
+ {
+   if (reg_a->get_base_region () != reg_b->get_base_region ())
+     return false;
+   const binding_key *bind_key_a = binding_key::make (store_mgr, reg_a);
+   const binding_key *bind_key_b = binding_key::make (store_mgr, reg_b);
+   return bind_key_a == bind_key_b;
+ }
+ 
+ /* Return true if STMT fully overwrites DECL.  */
+ 
+ static bool
+ fully_overwrites_p (const gimple *stmt, tree decl,
+ 		    const region_model &model)
+ {
+   if (tree lhs = gimple_get_lhs (stmt))
+     {
+       /* Determine if LHS fully overwrites DECL.
+ 	 We can't just check for equality; consider the case of
+ 	 "s.field = EXPR;" where the stmt writes to the only field
+ 	 of "s", and there's no padding.  */
+       const region *lhs_reg = model.get_lvalue (lhs, NULL);
+       const region *decl_reg = model.get_lvalue (decl, NULL);
+       if (same_binding_p (lhs_reg, decl_reg,
+ 			  model.get_manager ()->get_store_manager ()))
+ 	return true;
+     }
+   return false;
+ }
+ 
+ /* Process POINT, popped from *WORKLIST.
+    Iterate over predecessors of POINT, adding to *WORKLIST and *SEEN,
+    until we get to a stmt that fully overwrites the decl.  */
+ 
+ void
+ state_purge_per_decl::
+ process_point_backwards (const function_point &point,
+ 			 auto_vec<function_point> *worklist,
+ 			 point_set_t *seen,
+ 			 const state_purge_map &map,
+ 			 const region_model &model)
+ {
+   logger *logger = map.get_logger ();
+   LOG_FUNC (logger);
+   if (logger)
+     {
+       logger->start_log_line ();
+       logger->log_partial ("considering point: '");
+       point.print (logger->get_printer (), format (false));
+       logger->log_partial ("' for %qE", m_decl);
+       logger->end_log_line ();
+     }
+   const supernode *snode = point.get_supernode ();
+ 
+   switch (point.get_kind ())
+     {
+     default:
+       gcc_unreachable ();
+ 
+     case PK_ORIGIN:
+       break;
+ 
+     case PK_BEFORE_SUPERNODE:
+       {
+ 	/* Add given pred to worklist.  */
+ 	if (point.get_from_edge ())
+ 	  {
+ 	    gcc_assert (point.get_from_edge ()->m_src);
+ 	    add_to_worklist
+ 	      (function_point::after_supernode (point.get_from_edge ()->m_src),
+ 	       worklist, seen, logger);
+ 	  }
+ 	else
+ 	  {
+ 	    /* Add any intraprocedually edge for a call.  */
+ 	    if (snode->m_returning_call)
+ 	    {
+ 	      gcall *returning_call = snode->m_returning_call;
+ 	      cgraph_edge *cedge
+ 		  = supergraph_call_edge (snode->m_fun,
+ 					  returning_call);
+ 	      if(cedge)
+ 		{
+ 		  superedge *sedge
+ 		    = map.get_sg ().get_intraprocedural_edge_for_call (cedge);
+ 		  gcc_assert (sedge);
+ 		  add_to_worklist
+ 		    (function_point::after_supernode (sedge->m_src),
+ 		     worklist, seen, logger);
+ 		}
+ 	      else
+ 		{
+ 		  supernode *callernode
+ 		    = map.get_sg ().get_supernode_for_stmt (returning_call);
+ 
+ 		  gcc_assert (callernode);
+ 		  add_to_worklist
+ 		    (function_point::after_supernode (callernode),
+ 		     worklist, seen, logger);
+ 		}
+ 	    }
+ 	  }
+       }
+       break;
+ 
+     case PK_BEFORE_STMT:
+       {
+ 	/* This is somewhat equivalent to how the SSA case handles
+ 	   def-stmts.  */
+ 	if (fully_overwrites_p (point.get_stmt (), m_decl, model))
+ 	  {
+ 	    if (logger)
+ 	      logger->log ("stmt fully overwrites %qE; terminating", m_decl);
+ 	    return;
+ 	  }
+ 	if (point.get_stmt_idx () > 0)
+ 	  add_to_worklist (function_point::before_stmt
+ 			     (snode, point.get_stmt_idx () - 1),
+ 			   worklist, seen, logger);
+ 	else
+ 	{
+ 	  /* Add before_supernode to worklist.  This captures the in-edge,
+ 	     so we have to do it once per in-edge.  */
+ 	  unsigned i;
+ 	  superedge *pred;
+ 	  FOR_EACH_VEC_ELT (snode->m_preds, i, pred)
+ 	    add_to_worklist (function_point::before_supernode (snode,
+ 							       pred),
+ 			     worklist, seen, logger);
+ 	}
+       }
+       break;
+ 
+     case PK_AFTER_SUPERNODE:
+       {
+ 	if (snode->m_stmts.length ())
+ 	  add_to_worklist
+ 	    (function_point::before_stmt (snode,
+ 					  snode->m_stmts.length () - 1),
+ 	     worklist, seen, logger);
+ 	else
+ 	  {
+ 	    /* Add before_supernode to worklist.  This captures the in-edge,
+ 	       so we have to do it once per in-edge.  */
+ 	    unsigned i;
+ 	    superedge *pred;
+ 	    FOR_EACH_VEC_ELT (snode->m_preds, i, pred)
+ 	      add_to_worklist (function_point::before_supernode (snode,
+ 								 pred),
+ 			       worklist, seen, logger);
+ 	  }
+       }
+       break;
+     }
+ 
+ }
+ 
+ /* Process POINT, popped from *WORKLIST.
+    Iterate over successors of POINT, adding to *WORKLIST and *SEEN.  */
+ 
+ void
+ state_purge_per_decl::
+ process_point_forwards (const function_point &point,
+ 			auto_vec<function_point> *worklist,
+ 			point_set_t *seen,
+ 			const state_purge_map &map)
+ {
+   logger *logger = map.get_logger ();
+   LOG_FUNC (logger);
+   if (logger)
+     {
+       logger->start_log_line ();
+       logger->log_partial ("considering point: '");
+       point.print (logger->get_printer (), format (false));
+       logger->log_partial ("' for %qE", m_decl);
+       logger->end_log_line ();
+     }
+   const supernode *snode = point.get_supernode ();
+ 
+   switch (point.get_kind ())
+     {
+     default:
+     case PK_ORIGIN:
+       gcc_unreachable ();
+ 
+     case PK_BEFORE_SUPERNODE:
+       {
+ 	function_point next = point.get_next ();
+ 	add_to_worklist (next, worklist, seen, logger);
+       }
+       break;
+ 
+     case PK_BEFORE_STMT:
+       {
+ 	/* Perhaps we should stop at a clobber of the decl,
+ 	   but that ought to purge state for us explicitly.  */
+ 	function_point next = point.get_next ();
+ 	add_to_worklist (next, worklist, seen, logger);
+       }
+       break;
+ 
+     case PK_AFTER_SUPERNODE:
+       {
+ 	/* Look at interprocedural out-edges.  */
+ 	unsigned i;
+ 	superedge *succ;
+ 	FOR_EACH_VEC_ELT (snode->m_succs, i, succ)
+ 	  {
+ 	    enum edge_kind kind = succ->get_kind ();
+ 	    if (kind == SUPEREDGE_CFG_EDGE
+ 		|| kind == SUPEREDGE_INTRAPROCEDURAL_CALL)
+ 	      add_to_worklist (function_point::before_supernode (succ->m_dest,
+ 								 succ),
+ 			       worklist, seen, logger);
+ 	  }
+       }
+       break;
+     }
+ }
+ 
+ /* Return true if the decl is needed at POINT.  */
+ 
+ bool
+ state_purge_per_decl::needed_at_point_p (const function_point &point) const
+ {
+   return const_cast <point_set_t &> (m_points_needing_decl).contains (point);
+ }
+ 
  /* class state_purge_annotator : public dot_annotator.  */
  
  /* Implementation of dot_annotator::add_node_annotations vfunc for
*************** state_purge_annotator::add_node_annotati
*** 446,468 ****
  	      "lightblue");
     pp_write_text_to_stream (pp);
  
!    // FIXME: passing in a NULL in-edge means we get no hits
!    function_point before_supernode
!      (function_point::before_supernode (&n, NULL));
  
!    for (state_purge_map::iterator iter = m_map->begin ();
! 	iter != m_map->end ();
! 	++iter)
       {
!        tree name = (*iter).first;
!        state_purge_per_ssa_name *per_name_data = (*iter).second;
!        if (per_name_data->get_function () == n.m_fun)
! 	 {
! 	   if (per_name_data->needed_at_point_p (before_supernode))
! 	     pp_printf (pp, "%qE needed here", name);
! 	   else
! 	     pp_printf (pp, "%qE not needed here", name);
! 	 }
         pp_newline (pp);
       }
  
--- 1070,1090 ----
  	      "lightblue");
     pp_write_text_to_stream (pp);
  
!    /* Different in-edges mean different names need purging.
!       Determine which points to dump.  */
!    auto_vec<function_point> points;
!    if (n.entry_p () || n.m_returning_call)
!      points.safe_push (function_point::before_supernode (&n, NULL));
!    else
!      for (auto inedge : n.m_preds)
!        points.safe_push (function_point::before_supernode (&n, inedge));
!    points.safe_push (function_point::after_supernode (&n));
  
!    for (auto & point : points)
       {
!        point.print (pp, format (true));
!        pp_newline (pp);
!        print_needed (gv, point, false);
         pp_newline (pp);
       }
  
*************** state_purge_annotator::add_node_annotati
*** 471,489 ****
     return false;
  }
  
! /* Print V to GV as a comma-separated list in braces within a <TR>,
!    titling it with TITLE.
  
!    Subroutine of state_purge_annotator::add_stmt_annotations.  */
  
  static void
  print_vec_of_names (graphviz_out *gv, const char *title,
! 		    const auto_vec<tree> &v)
  {
    pretty_printer *pp = gv->get_pp ();
    tree name;
    unsigned i;
!   gv->begin_trtd ();
    pp_printf (pp, "%s: {", title);
    FOR_EACH_VEC_ELT (v, i, name)
      {
--- 1093,1112 ----
     return false;
  }
  
! /* Print V to GV as a comma-separated list in braces, titling it with TITLE.
!    If WITHIN_TABLE is true, print it within a <TR>
  
!    Subroutine of state_purge_annotator::print_needed.  */
  
  static void
  print_vec_of_names (graphviz_out *gv, const char *title,
! 		    const auto_vec<tree> &v, bool within_table)
  {
    pretty_printer *pp = gv->get_pp ();
    tree name;
    unsigned i;
!   if (within_table)
!     gv->begin_trtd ();
    pp_printf (pp, "%s: {", title);
    FOR_EACH_VEC_ELT (v, i, name)
      {
*************** print_vec_of_names (graphviz_out *gv, co
*** 492,499 ****
        pp_printf (pp, "%qE", name);
      }
    pp_printf (pp, "}");
!   pp_write_text_as_html_like_dot_to_stream (pp);
!   gv->end_tdtr ();
    pp_newline (pp);
  }
  
--- 1115,1125 ----
        pp_printf (pp, "%qE", name);
      }
    pp_printf (pp, "}");
!   if (within_table)
!     {
!       pp_write_text_as_html_like_dot_to_stream (pp);
!       gv->end_tdtr ();
!     }
    pp_newline (pp);
  }
  
*************** state_purge_annotator::add_stmt_annotati
*** 525,549 ****
    function_point before_stmt
      (function_point::before_stmt (supernode, stmt_idx));
  
    auto_vec<tree> needed;
    auto_vec<tree> not_needed;
!   for (state_purge_map::iterator iter = m_map->begin ();
!        iter != m_map->end ();
         ++iter)
      {
        tree name = (*iter).first;
        state_purge_per_ssa_name *per_name_data = (*iter).second;
!       if (per_name_data->get_function () == supernode->m_fun)
  	{
! 	  if (per_name_data->needed_at_point_p (before_stmt))
  	    needed.safe_push (name);
  	  else
  	    not_needed.safe_push (name);
  	}
      }
  
!   print_vec_of_names (gv, "needed here", needed);
!   print_vec_of_names (gv, "not needed here", not_needed);
  }
  
  #endif /* #if ENABLE_ANALYZER */
--- 1151,1201 ----
    function_point before_stmt
      (function_point::before_stmt (supernode, stmt_idx));
  
+   print_needed (gv, before_stmt, true);
+ }
+ 
+ /* Get the decls and SSA names needed and not-needed at POINT, and
+    print them to GV.
+    If WITHIN_TABLE is true, print them within <TR> elements.  */
+ 
+ void
+ state_purge_annotator::print_needed (graphviz_out *gv,
+ 				     const function_point &point,
+ 				     bool within_table) const
+ {
    auto_vec<tree> needed;
    auto_vec<tree> not_needed;
!   for (state_purge_map::ssa_iterator iter = m_map->begin_ssas ();
!        iter != m_map->end_ssas ();
         ++iter)
      {
        tree name = (*iter).first;
        state_purge_per_ssa_name *per_name_data = (*iter).second;
!       if (per_name_data->get_function () == point.get_function ())
  	{
! 	  if (per_name_data->needed_at_point_p (point))
  	    needed.safe_push (name);
  	  else
  	    not_needed.safe_push (name);
  	}
      }
+   for (state_purge_map::decl_iterator iter = m_map->begin_decls ();
+        iter != m_map->end_decls ();
+        ++iter)
+     {
+       tree decl = (*iter).first;
+       state_purge_per_decl *per_decl_data = (*iter).second;
+       if (per_decl_data->get_function () == point.get_function ())
+ 	{
+ 	  if (per_decl_data->needed_at_point_p (point))
+ 	    needed.safe_push (decl);
+ 	  else
+ 	    not_needed.safe_push (decl);
+ 	}
+     }
  
!   print_vec_of_names (gv, "needed here", needed, within_table);
!   print_vec_of_names (gv, "not needed here", not_needed, within_table);
  }
  
  #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/state-purge.h gcc-12.1.0/gcc/analyzer/state-purge.h
*** gcc-11.3.0/gcc/analyzer/state-purge.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/state-purge.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for purging state at function_points.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for purging state at function_points.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** pod_hash_traits<function_point>::is_empt
*** 70,86 ****
  
  namespace ana {
  
! /* The result of analyzing which SSA names can be purged from state at
     different points in the program, so that we can simplify program_state
     objects, in the hope of reducing state-blowup.  */
  
  class state_purge_map : public log_user
  {
  public:
!   typedef ordered_hash_map<tree, state_purge_per_ssa_name *> map_t;
!   typedef map_t::iterator iterator;
  
!   state_purge_map (const supergraph &sg, logger *logger);
    ~state_purge_map ();
  
    const state_purge_per_ssa_name &get_data_for_ssa_name (tree name) const
--- 70,91 ----
  
  namespace ana {
  
! /* The result of analyzing which decls and SSA names can be purged from state at
     different points in the program, so that we can simplify program_state
     objects, in the hope of reducing state-blowup.  */
  
  class state_purge_map : public log_user
  {
  public:
!   typedef ordered_hash_map<tree, state_purge_per_ssa_name *> ssa_map_t;
!   typedef ssa_map_t::iterator ssa_iterator;
  
!   typedef ordered_hash_map<tree, state_purge_per_decl *> decl_map_t;
!   typedef decl_map_t::iterator decl_iterator;
! 
!   state_purge_map (const supergraph &sg,
! 		   region_model_manager *mgr,
! 		   logger *logger);
    ~state_purge_map ();
  
    const state_purge_per_ssa_name &get_data_for_ssa_name (tree name) const
*************** public:
*** 91,110 ****
  	gcc_assert (!VAR_DECL_IS_VIRTUAL_OPERAND (var));
  
      state_purge_per_ssa_name **slot
!       = const_cast <map_t&> (m_map).get (name);
      return **slot;
    }
  
    const supergraph &get_sg () const { return m_sg; }
  
!   iterator begin () const { return m_map.begin (); }
!   iterator end () const { return m_map.end (); }
  
  private:
    DISABLE_COPY_AND_ASSIGN (state_purge_map);
  
    const supergraph &m_sg;
!   map_t m_map;
  };
  
  /* The part of a state_purge_map relating to a specific SSA name.
--- 96,153 ----
  	gcc_assert (!VAR_DECL_IS_VIRTUAL_OPERAND (var));
  
      state_purge_per_ssa_name **slot
!       = const_cast <ssa_map_t&> (m_ssa_map).get (name);
      return **slot;
    }
  
+   const state_purge_per_decl *get_any_data_for_decl (tree decl) const
+   {
+     gcc_assert (TREE_CODE (decl) == VAR_DECL
+ 		|| TREE_CODE (decl) == PARM_DECL
+ 		|| TREE_CODE (decl) == RESULT_DECL);
+     if (state_purge_per_decl **slot
+ 	= const_cast <decl_map_t&> (m_decl_map).get (decl))
+       return *slot;
+     else
+       return NULL;
+   }
+ 
+   state_purge_per_decl &get_or_create_data_for_decl (function *fun, tree decl);
+ 
    const supergraph &get_sg () const { return m_sg; }
  
!   ssa_iterator begin_ssas () const { return m_ssa_map.begin (); }
!   ssa_iterator end_ssas () const { return m_ssa_map.end (); }
! 
!   decl_iterator begin_decls () const { return m_decl_map.begin (); }
!   decl_iterator end_decls () const { return m_decl_map.end (); }
  
  private:
    DISABLE_COPY_AND_ASSIGN (state_purge_map);
  
    const supergraph &m_sg;
!   ssa_map_t m_ssa_map;
!   decl_map_t m_decl_map;
! };
! 
!   /* Base class for state_purge_per_ssa_name and state_purge_per_decl.  */
! 
! class state_purge_per_tree
! {
! public:
!   function *get_function () const { return m_fun; }
!   tree get_fndecl () const { return m_fun->decl; }
! 
! protected:
!   typedef hash_set<function_point> point_set_t;
! 
!   state_purge_per_tree (function *fun)
!   : m_fun (fun)
!   {
!   }
! 
! private:
!   function *m_fun;
  };
  
  /* The part of a state_purge_map relating to a specific SSA name.
*************** private:
*** 114,120 ****
     their successor states, so that we can simplify program_state objects,
     in the hope of reducing state-blowup.  */
  
! class state_purge_per_ssa_name
  {
  public:
    state_purge_per_ssa_name (const state_purge_map &map,
--- 157,163 ----
     their successor states, so that we can simplify program_state objects,
     in the hope of reducing state-blowup.  */
  
! class state_purge_per_ssa_name : public state_purge_per_tree
  {
  public:
    state_purge_per_ssa_name (const state_purge_map &map,
*************** public:
*** 123,130 ****
  
    bool needed_at_point_p (const function_point &point) const;
  
-   function *get_function () const { return m_fun; }
- 
  private:
    static function_point before_use_stmt (const state_purge_map &map,
  					 const gimple *use_stmt);
--- 166,171 ----
*************** private:
*** 137,146 ****
  		      auto_vec<function_point> *worklist,
  		      const state_purge_map &map);
  
-   typedef hash_set<function_point> point_set_t;
    point_set_t m_points_needing_name;
    tree m_name;
!   function *m_fun;
  };
  
  /* Subclass of dot_annotator for use by -fdump-analyzer-state-purge.
--- 178,230 ----
  		      auto_vec<function_point> *worklist,
  		      const state_purge_map &map);
  
    point_set_t m_points_needing_name;
    tree m_name;
! };
! 
! /* The part of a state_purge_map relating to a specific decl.
! 
!    Analogous to state_purge_per_ssa_name, but for local decls.
! 
!    This is more involved than the SSA name case, because we also need
!    to handle pointers and components.  */
! 
! class state_purge_per_decl : public state_purge_per_tree
! {
! public:
!   state_purge_per_decl (const state_purge_map &map,
! 			tree decl,
! 			function *fun);
! 
!   bool needed_at_point_p (const function_point &point) const;
! 
!   void add_needed_at (const function_point &point);
!   void add_pointed_to_at (const function_point &point);
!   void process_worklists (const state_purge_map &map,
! 			  region_model_manager *mgr);
! 
! private:
!   static function_point before_use_stmt (const state_purge_map &map,
! 					 const gimple *use_stmt);
! 
!   void add_to_worklist (const function_point &point,
! 			auto_vec<function_point> *worklist,
! 			point_set_t *seen,
! 			logger *logger);
! 
!   void process_point_backwards (const function_point &point,
! 				auto_vec<function_point> *worklist,
! 				point_set_t *seen,
! 				const state_purge_map &map,
! 				const region_model &model);
!   void process_point_forwards (const function_point &point,
! 			       auto_vec<function_point> *worklist,
! 			       point_set_t *seen,
! 			       const state_purge_map &map);
! 
!   point_set_t m_points_needing_decl;
!   point_set_t m_points_taking_address;
!   tree m_decl;
  };
  
  /* Subclass of dot_annotator for use by -fdump-analyzer-state-purge.
*************** public:
*** 159,164 ****
--- 243,252 ----
      const FINAL OVERRIDE;
  
  private:
+   void print_needed (graphviz_out *gv,
+ 		     const function_point &point,
+ 		     bool within_table) const;
+ 
    const state_purge_map *m_map;
  };
  
diff -Nrcpad gcc-11.3.0/gcc/analyzer/store.cc gcc-12.1.0/gcc/analyzer/store.cc
*** gcc-11.3.0/gcc/analyzer/store.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/store.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for modeling the state of memory.
!    Copyright (C) 2020-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for modeling the state of memory.
!    Copyright (C) 2020-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** uncertainty_t::dump (bool simple) const
*** 118,169 ****
    pp_flush (&pp);
  }
  
- /* Get a human-readable string for KIND for dumps.  */
- 
- const char *binding_kind_to_string (enum binding_kind kind)
- {
-   switch (kind)
-     {
-     default:
-     case BK_empty:
-     case BK_deleted:
-       /* We shouldn't be attempting to print the hash kinds.  */
-       gcc_unreachable ();
-     case BK_direct:
-       return "direct";
-     case BK_default:
-       return "default";
-     }
- }
- 
  /* class binding_key.  */
  
  const binding_key *
! binding_key::make (store_manager *mgr, const region *r,
! 		   enum binding_kind kind)
  {
    region_offset offset = r->get_offset ();
    if (offset.symbolic_p ())
!     return mgr->get_symbolic_binding (r, kind);
    else
      {
        bit_size_t bit_size;
        if (r->get_bit_size (&bit_size))
  	return mgr->get_concrete_binding (offset.get_bit_offset (),
! 					  bit_size, kind);
        else
! 	return mgr->get_symbolic_binding (r, kind);
      }
  }
  
- /* Base class implementation of binding_key::dump_to_pp vfunc.  */
- 
- void
- binding_key::dump_to_pp (pretty_printer *pp, bool /*simple*/) const
- {
-   pp_printf (pp, "kind: %s", binding_kind_to_string (m_kind));
- }
- 
  /* Dump this binding_key to stderr.  */
  
  DEBUG_FUNCTION void
--- 118,142 ----
    pp_flush (&pp);
  }
  
  /* class binding_key.  */
  
  const binding_key *
! binding_key::make (store_manager *mgr, const region *r)
  {
    region_offset offset = r->get_offset ();
    if (offset.symbolic_p ())
!     return mgr->get_symbolic_binding (r);
    else
      {
        bit_size_t bit_size;
        if (r->get_bit_size (&bit_size))
  	return mgr->get_concrete_binding (offset.get_bit_offset (),
! 					  bit_size);
        else
! 	return mgr->get_symbolic_binding (r);
      }
  }
  
  /* Dump this binding_key to stderr.  */
  
  DEBUG_FUNCTION void
*************** binding_key::cmp_ptrs (const void *p1, c
*** 204,214 ****
  int
  binding_key::cmp (const binding_key *k1, const binding_key *k2)
  {
-   enum binding_kind kind1 = k1->get_kind ();
-   enum binding_kind kind2 = k2->get_kind ();
-   if (kind1 != kind2)
-     return (int)kind1 - (int)kind2;
- 
    int concrete1 = k1->concrete_p ();
    int concrete2 = k2->concrete_p ();
    if (int concrete_cmp = concrete1 - concrete2)
--- 177,182 ----
*************** binding_key::cmp (const binding_key *k1,
*** 236,252 ****
      }
  }
  
! /* struct struct bit_range.  */
  
  void
  bit_range::dump_to_pp (pretty_printer *pp) const
  {
!   pp_string (pp, "start: ");
!   pp_wide_int (pp, m_start_bit_offset, SIGNED);
!   pp_string (pp, ", size: ");
!   pp_wide_int (pp, m_size_in_bits, SIGNED);
!   pp_string (pp, ", next: ");
!   pp_wide_int (pp, get_next_bit_offset (), SIGNED);
  }
  
  /* Dump this object to stderr.  */
--- 204,226 ----
      }
  }
  
! /* struct bit_range.  */
  
  void
  bit_range::dump_to_pp (pretty_printer *pp) const
  {
!   byte_range bytes (0, 0);
!   if (as_byte_range (&bytes))
!     bytes.dump_to_pp (pp);
!   else
!     {
!       pp_string (pp, "start: ");
!       pp_wide_int (pp, m_start_bit_offset, SIGNED);
!       pp_string (pp, ", size: ");
!       pp_wide_int (pp, m_size_in_bits, SIGNED);
!       pp_string (pp, ", next: ");
!       pp_wide_int (pp, get_next_bit_offset (), SIGNED);
!     }
  }
  
  /* Dump this object to stderr.  */
*************** bit_range::dump () const
*** 261,266 ****
--- 235,287 ----
    pp_flush (&pp);
  }
  
+ /* If OTHER is a subset of this, return true and write
+    to *OUT the relative range of OTHER within this.
+    Otherwise return false.  */
+ 
+ bool
+ bit_range::contains_p (const bit_range &other, bit_range *out) const
+ {
+   if (contains_p (other.get_start_bit_offset ())
+       && contains_p (other.get_last_bit_offset ()))
+     {
+       out->m_start_bit_offset = other.m_start_bit_offset - m_start_bit_offset;
+       out->m_size_in_bits = other.m_size_in_bits;
+       return true;
+     }
+   else
+     return false;
+ }
+ 
+ /* If OTHER intersects this, return true and write
+    the relative range of OTHER within THIS to *OUT_THIS,
+    and the relative range of THIS within OTHER to *OUT_OTHER.
+    Otherwise return false.  */
+ 
+ bool
+ bit_range::intersects_p (const bit_range &other,
+ 			 bit_range *out_this,
+ 			 bit_range *out_other) const
+ {
+   if (get_start_bit_offset () < other.get_next_bit_offset ()
+       && other.get_start_bit_offset () < get_next_bit_offset ())
+     {
+       bit_offset_t overlap_start
+ 	= MAX (get_start_bit_offset (),
+ 	       other.get_start_bit_offset ());
+       bit_offset_t overlap_next
+ 	= MIN (get_next_bit_offset (),
+ 	       other.get_next_bit_offset ());
+       gcc_assert (overlap_next > overlap_start);
+       bit_range abs_overlap_bits (overlap_start, overlap_next - overlap_start);
+       *out_this = abs_overlap_bits - get_start_bit_offset ();
+       *out_other = abs_overlap_bits - other.get_start_bit_offset ();
+       return true;
+     }
+   else
+     return false;
+ }
+ 
  int
  bit_range::cmp (const bit_range &br1, const bit_range &br2)
  {
*************** bit_range::cmp (const bit_range &br1, co
*** 271,276 ****
--- 292,305 ----
    return wi::cmpu (br1.m_size_in_bits, br2.m_size_in_bits);
  }
  
+ /* Offset this range by OFFSET.  */
+ 
+ bit_range
+ bit_range::operator- (bit_offset_t offset) const
+ {
+   return bit_range (m_start_bit_offset - offset, m_size_in_bits);
+ }
+ 
  /* If MASK is a contiguous range of set bits, write them
     to *OUT and return true.
     Otherwise return false.  */
*************** bit_range::from_mask (unsigned HOST_WIDE
*** 329,343 ****
    return true;
  }
  
  /* class concrete_binding : public binding_key.  */
  
  /* Implementation of binding_key::dump_to_pp vfunc for concrete_binding.  */
  
  void
! concrete_binding::dump_to_pp (pretty_printer *pp, bool simple) const
  {
-   binding_key::dump_to_pp (pp, simple);
-   pp_string (pp, ", ");
    m_bit_range.dump_to_pp (pp);
  }
  
--- 358,450 ----
    return true;
  }
  
+ /* Attempt to convert this bit_range to a byte_range.
+    Return true if it is possible, writing the result to *OUT.
+    Otherwise return false.  */
+ 
+ bool
+ bit_range::as_byte_range (byte_range *out) const
+ {
+   if (m_start_bit_offset % BITS_PER_UNIT == 0
+       && m_size_in_bits % BITS_PER_UNIT == 0)
+     {
+       out->m_start_byte_offset = m_start_bit_offset / BITS_PER_UNIT;
+       out->m_size_in_bytes = m_size_in_bits / BITS_PER_UNIT;
+       return true;
+     }
+   return false;
+ }
+ 
+ /* Dump this object to PP.  */
+ 
+ void
+ byte_range::dump_to_pp (pretty_printer *pp) const
+ {
+   if (m_size_in_bytes == 1)
+     {
+       pp_string (pp, "byte ");
+       pp_wide_int (pp, m_start_byte_offset, SIGNED);
+     }
+   else
+     {
+       pp_string (pp, "bytes ");
+       pp_wide_int (pp, m_start_byte_offset, SIGNED);
+       pp_string (pp, "-");
+       pp_wide_int (pp, get_last_byte_offset (), SIGNED);
+     }
+ }
+ 
+ /* Dump this object to stderr.  */
+ 
+ DEBUG_FUNCTION void
+ byte_range::dump () const
+ {
+   pretty_printer pp;
+   pp.buffer->stream = stderr;
+   dump_to_pp (&pp);
+   pp_newline (&pp);
+   pp_flush (&pp);
+ }
+ 
+ /* If OTHER is a subset of this, return true and write
+    to *OUT the relative range of OTHER within this.
+    Otherwise return false.  */
+ 
+ bool
+ byte_range::contains_p (const byte_range &other, byte_range *out) const
+ {
+   if (contains_p (other.get_start_byte_offset ())
+       && contains_p (other.get_last_byte_offset ()))
+     {
+       out->m_start_byte_offset = other.m_start_byte_offset - m_start_byte_offset;
+       out->m_size_in_bytes = other.m_size_in_bytes;
+       return true;
+     }
+   else
+     return false;
+ }
+ 
+ /* qsort comparator for byte ranges.  */
+ 
+ int
+ byte_range::cmp (const byte_range &br1, const byte_range &br2)
+ {
+   /* Order first by offset.  */
+   if (int start_cmp = wi::cmps (br1.m_start_byte_offset,
+ 				br2.m_start_byte_offset))
+     return start_cmp;
+ 
+   /* ...then by size.  */
+   return wi::cmpu (br1.m_size_in_bytes, br2.m_size_in_bytes);
+ }
+ 
  /* class concrete_binding : public binding_key.  */
  
  /* Implementation of binding_key::dump_to_pp vfunc for concrete_binding.  */
  
  void
! concrete_binding::dump_to_pp (pretty_printer *pp, bool) const
  {
    m_bit_range.dump_to_pp (pp);
  }
  
*************** concrete_binding::cmp_ptr_ptr (const voi
*** 360,368 ****
    const concrete_binding *b1 = *(const concrete_binding * const *)p1;
    const concrete_binding *b2 = *(const concrete_binding * const *)p2;
  
-   if (int kind_cmp = b1->get_kind () - b2->get_kind ())
-     return kind_cmp;
- 
    return bit_range::cmp (b1->m_bit_range, b2->m_bit_range);
  }
  
--- 467,472 ----
*************** concrete_binding::cmp_ptr_ptr (const voi
*** 371,378 ****
  void
  symbolic_binding::dump_to_pp (pretty_printer *pp, bool simple) const
  {
!   binding_key::dump_to_pp (pp, simple);
!   pp_string (pp, ", region: ");
    m_region->dump_to_pp (pp, simple);
  }
  
--- 475,482 ----
  void
  symbolic_binding::dump_to_pp (pretty_printer *pp, bool simple) const
  {
!   //binding_key::dump_to_pp (pp, simple);
!   pp_string (pp, "region: ");
    m_region->dump_to_pp (pp, simple);
  }
  
*************** symbolic_binding::cmp_ptr_ptr (const voi
*** 384,392 ****
    const symbolic_binding *b1 = *(const symbolic_binding * const *)p1;
    const symbolic_binding *b2 = *(const symbolic_binding * const *)p2;
  
-   if (int kind_cmp = b1->get_kind () - b2->get_kind ())
-     return kind_cmp;
- 
    return region::cmp_ids (b1->get_region (), b2->get_region ());
  }
  
--- 488,493 ----
*************** binding_map::apply_ctor_val_to_range (co
*** 735,742 ****
      return false;
    bit_offset_t start_bit_offset = min_offset.get_bit_offset ();
    store_manager *smgr = mgr->get_store_manager ();
!   const binding_key *max_element_key
!     = binding_key::make (smgr, max_element, BK_direct);
    if (max_element_key->symbolic_p ())
      return false;
    const concrete_binding *max_element_ckey
--- 836,842 ----
      return false;
    bit_offset_t start_bit_offset = min_offset.get_bit_offset ();
    store_manager *smgr = mgr->get_store_manager ();
!   const binding_key *max_element_key = binding_key::make (smgr, max_element);
    if (max_element_key->symbolic_p ())
      return false;
    const concrete_binding *max_element_ckey
*************** binding_map::apply_ctor_val_to_range (co
*** 744,751 ****
    bit_size_t range_size_in_bits
      = max_element_ckey->get_next_bit_offset () - start_bit_offset;
    const concrete_binding *range_key
!     = smgr->get_concrete_binding (start_bit_offset, range_size_in_bits,
! 				  BK_direct);
    if (range_key->symbolic_p ())
      return false;
  
--- 844,850 ----
    bit_size_t range_size_in_bits
      = max_element_ckey->get_next_bit_offset () - start_bit_offset;
    const concrete_binding *range_key
!     = smgr->get_concrete_binding (start_bit_offset, range_size_in_bits);
    if (range_key->symbolic_p ())
      return false;
  
*************** binding_map::apply_ctor_pair_to_child_re
*** 777,784 ****
      {
        const svalue *sval = get_svalue_for_ctor_val (val, mgr);
        const binding_key *k
! 	= binding_key::make (mgr->get_store_manager (), child_reg,
! 			     BK_direct);
        /* Handle the case where we have an unknown size for child_reg
  	 (e.g. due to it being a trailing field with incomplete array
  	 type.  */
--- 876,882 ----
      {
        const svalue *sval = get_svalue_for_ctor_val (val, mgr);
        const binding_key *k
! 	= binding_key::make (mgr->get_store_manager (), child_reg);
        /* Handle the case where we have an unknown size for child_reg
  	 (e.g. due to it being a trailing field with incomplete array
  	 type.  */
*************** binding_map::apply_ctor_pair_to_child_re
*** 802,808 ****
  	       - parent_base_offset.get_bit_offset ());
  	  /* Create a concrete key for the child within the parent.  */
  	  k = mgr->get_store_manager ()->get_concrete_binding
! 	    (child_parent_offset, sval_bit_size, BK_direct);
  	}
        gcc_assert (k->concrete_p ());
        put (k, sval);
--- 900,906 ----
  	       - parent_base_offset.get_bit_offset ());
  	  /* Create a concrete key for the child within the parent.  */
  	  k = mgr->get_store_manager ()->get_concrete_binding
! 	    (child_parent_offset, sval_bit_size);
  	}
        gcc_assert (k->concrete_p ());
        put (k, sval);
*************** binding_map::apply_ctor_pair_to_child_re
*** 810,815 ****
--- 908,1107 ----
      }
  }
  
+ /* Populate OUT with all bindings within this map that overlap KEY.  */
+ 
+ void
+ binding_map::get_overlapping_bindings (const binding_key *key,
+ 				       auto_vec<const binding_key *> *out)
+ {
+   for (auto iter : *this)
+     {
+       const binding_key *iter_key = iter.first;
+       if (const concrete_binding *ckey
+ 	    = key->dyn_cast_concrete_binding ())
+ 	{
+ 	  if (const concrete_binding *iter_ckey
+ 	      = iter_key->dyn_cast_concrete_binding ())
+ 	    {
+ 	      if (ckey->overlaps_p (*iter_ckey))
+ 		out->safe_push (iter_key);
+ 	    }
+ 	  else
+ 	    {
+ 	      /* Assume overlap.  */
+ 	      out->safe_push (iter_key);
+ 	    }
+ 	}
+       else
+ 	{
+ 	  /* Assume overlap.  */
+ 	  out->safe_push (iter_key);
+ 	}
+     }
+ }
+ 
+ /* Remove, truncate, and/or split any bindings within this map that
+    overlap DROP_KEY.
+ 
+    For example, if we have:
+ 
+      +------------------------------------+
+      |             old binding            |
+      +------------------------------------+
+ 
+    which is to be overwritten with:
+ 
+      .......+----------------------+.......
+      .......|      new binding     |.......
+      .......+----------------------+.......
+ 
+    this function "cuts a hole" out of the old binding:
+ 
+      +------+......................+------+
+      |prefix| hole for new binding |suffix|
+      +------+......................+------+
+ 
+    into which the new binding can be added without
+    overlapping the prefix or suffix.
+ 
+    The prefix and suffix (if added) will be bound to the pertinent
+    parts of the value of the old binding.
+ 
+    For example, given:
+      struct s5
+      {
+        char arr[8];
+      };
+      void test_5 (struct s5 *p)
+      {
+        struct s5 f = *p;
+        f.arr[3] = 42;
+      }
+    then after the "f = *p;" we have:
+      cluster for: f: INIT_VAL((*INIT_VAL(p_33(D))))
+    and at the "f.arr[3] = 42;" we remove the bindings overlapping
+    "f.arr[3]", replacing it with a prefix (bytes 0-2) and suffix (bytes 4-7)
+    giving:
+      cluster for: f
+        key:   {bytes 0-2}
+        value:  {BITS_WITHIN(bytes 0-2, inner_val: INIT_VAL((*INIT_VAL(p_33(D))).arr))}
+        key:   {bytes 4-7}
+        value:  {BITS_WITHIN(bytes 4-7, inner_val: INIT_VAL((*INIT_VAL(p_33(D))).arr))}
+    punching a hole into which the new value can be written at byte 3:
+      cluster for: f
+        key:   {bytes 0-2}
+        value:  {BITS_WITHIN(bytes 0-2, inner_val: INIT_VAL((*INIT_VAL(p_33(D))).arr))}
+        key:   {byte 3}
+        value: 'char' {(char)42}
+        key:   {bytes 4-7}
+        value:  {BITS_WITHIN(bytes 4-7, inner_val: INIT_VAL((*INIT_VAL(p_33(D))).arr))}
+ 
+    If UNCERTAINTY is non-NULL, use it to record any svalues that
+    were removed, as being maybe-bound.
+ 
+    If ALWAYS_OVERLAP, then assume that DROP_KEY can overlap anything
+    in the map, due to one or both of the underlying clusters being
+    symbolic (but not the same symbolic region).  Hence even if DROP_KEY is a
+    concrete binding it could actually be referring to the same memory as
+    distinct concrete bindings in the map.  Remove all bindings, but
+    register any svalues with *UNCERTAINTY.  */
+ 
+ void
+ binding_map::remove_overlapping_bindings (store_manager *mgr,
+ 					  const binding_key *drop_key,
+ 					  uncertainty_t *uncertainty,
+ 					  bool always_overlap)
+ {
+   /* Get the bindings of interest within this map.  */
+   auto_vec<const binding_key *> bindings;
+   if (always_overlap)
+     for (auto iter : *this)
+       bindings.safe_push (iter.first); /* Add all bindings.  */
+   else
+     /* Just add overlapping bindings.  */
+     get_overlapping_bindings (drop_key, &bindings);
+ 
+   unsigned i;
+   const binding_key *iter_binding;
+   FOR_EACH_VEC_ELT (bindings, i, iter_binding)
+     {
+       /* Record any svalues that were removed to *UNCERTAINTY as being
+ 	 maybe-bound, provided at least some part of the binding is symbolic.
+ 
+ 	 Specifically, if at least one of the bindings is symbolic, or we
+ 	 have ALWAYS_OVERLAP for the case where we have possibly aliasing
+ 	 regions, then we don't know that the svalue has been overwritten,
+ 	 and should record that to *UNCERTAINTY.
+ 
+ 	 However, if we have concrete keys accessing within the same symbolic
+ 	 region, then we *know* that the symbolic region has been overwritten,
+ 	 so we don't record it to *UNCERTAINTY, as this could be a genuine
+ 	 leak.  */
+       const svalue *old_sval = get (iter_binding);
+       if (uncertainty
+ 	  && (drop_key->symbolic_p ()
+ 	      || iter_binding->symbolic_p ()
+ 	      || always_overlap))
+ 	uncertainty->on_maybe_bound_sval (old_sval);
+ 
+       /* Begin by removing the old binding. */
+       m_map.remove (iter_binding);
+ 
+       /* Don't attempt to handle prefixes/suffixes for the
+ 	 "always_overlap" case; everything's being removed.  */
+       if (always_overlap)
+ 	continue;
+ 
+       /* Now potentially add the prefix and suffix.  */
+       if (const concrete_binding *drop_ckey
+ 	  = drop_key->dyn_cast_concrete_binding ())
+ 	if (const concrete_binding *iter_ckey
+ 	      = iter_binding->dyn_cast_concrete_binding ())
+ 	  {
+ 	    gcc_assert (drop_ckey->overlaps_p (*iter_ckey));
+ 
+ 	    const bit_range &drop_bits = drop_ckey->get_bit_range ();
+ 	    const bit_range &iter_bits = iter_ckey->get_bit_range ();
+ 
+ 	    if (iter_bits.get_start_bit_offset ()
+ 		  < drop_bits.get_start_bit_offset ())
+ 	      {
+ 		/* We have a truncated prefix.  */
+ 		bit_range prefix_bits (iter_bits.get_start_bit_offset (),
+ 				       (drop_bits.get_start_bit_offset ()
+ 					- iter_bits.get_start_bit_offset ()));
+ 		const concrete_binding *prefix_key
+ 		  = mgr->get_concrete_binding (prefix_bits);
+ 		bit_range rel_prefix (0, prefix_bits.m_size_in_bits);
+ 		const svalue *prefix_sval
+ 		  = old_sval->extract_bit_range (NULL_TREE,
+ 						 rel_prefix,
+ 						 mgr->get_svalue_manager ());
+ 		m_map.put (prefix_key, prefix_sval);
+ 	      }
+ 
+ 	    if (iter_bits.get_next_bit_offset ()
+ 		  > drop_bits.get_next_bit_offset ())
+ 	      {
+ 		/* We have a truncated suffix.  */
+ 		bit_range suffix_bits (drop_bits.get_next_bit_offset (),
+ 				       (iter_bits.get_next_bit_offset ()
+ 					- drop_bits.get_next_bit_offset ()));
+ 		const concrete_binding *suffix_key
+ 		  = mgr->get_concrete_binding (suffix_bits);
+ 		bit_range rel_suffix (drop_bits.get_next_bit_offset ()
+ 					- iter_bits.get_start_bit_offset (),
+ 				      suffix_bits.m_size_in_bits);
+ 		const svalue *suffix_sval
+ 		  = old_sval->extract_bit_range (NULL_TREE,
+ 						 rel_suffix,
+ 						 mgr->get_svalue_manager ());
+ 		m_map.put (suffix_key, suffix_sval);
+ 	      }
+ 	  }
+     }
+ }
+ 
  /* class binding_cluster.  */
  
  /* binding_cluster's copy ctor.  */
*************** binding_cluster::dump (bool simple) cons
*** 922,931 ****
    pp_flush (&pp);
  }
  
  /* Return a new json::object of the form
     {"escaped": true/false,
      "touched": true/false,
!     "map" : object for the the binding_map.  */
  
  json::object *
  binding_cluster::to_json () const
--- 1214,1244 ----
    pp_flush (&pp);
  }
  
+ /* Assert that this object is valid.  */
+ 
+ void
+ binding_cluster::validate () const
+ {
+   int num_symbolic = 0;
+   int num_concrete = 0;
+   for (auto iter : m_map)
+     {
+       if (iter.first->symbolic_p ())
+ 	num_symbolic++;
+       else
+ 	num_concrete++;
+     }
+   /* We shouldn't have more than one symbolic key per cluster
+      (or one would have clobbered the other).  */
+   gcc_assert (num_symbolic < 2);
+   /* We can't have both concrete and symbolic keys.  */
+   gcc_assert (num_concrete == 0 || num_symbolic == 0);
+ }
+ 
  /* Return a new json::object of the form
     {"escaped": true/false,
      "touched": true/false,
!     "map" : object for the binding_map.  */
  
  json::object *
  binding_cluster::to_json () const
*************** binding_cluster::to_json () const
*** 944,951 ****
  
  void
  binding_cluster::bind (store_manager *mgr,
! 		       const region *reg, const svalue *sval,
! 		       binding_kind kind)
  {
    if (const compound_svalue *compound_sval
  	= sval->dyn_cast_compound_svalue ())
--- 1257,1263 ----
  
  void
  binding_cluster::bind (store_manager *mgr,
! 		       const region *reg, const svalue *sval)
  {
    if (const compound_svalue *compound_sval
  	= sval->dyn_cast_compound_svalue ())
*************** binding_cluster::bind (store_manager *mg
*** 954,960 ****
        return;
      }
  
!   const binding_key *binding = binding_key::make (mgr, reg, kind);
    bind_key (binding, sval);
  }
  
--- 1266,1272 ----
        return;
      }
  
!   const binding_key *binding = binding_key::make (mgr, reg);
    bind_key (binding, sval);
  }
  
*************** binding_cluster::bind_compound_sval (sto
*** 1003,1010 ****
  	       + reg_offset.get_bit_offset ());
  	  const concrete_binding *effective_concrete_key
  	    = mgr->get_concrete_binding (effective_start,
! 					 concrete_key->get_size_in_bits (),
! 					 iter_key->get_kind ());
  	  bind_key (effective_concrete_key, iter_sval);
  	}
        else
--- 1315,1321 ----
  	       + reg_offset.get_bit_offset ());
  	  const concrete_binding *effective_concrete_key
  	    = mgr->get_concrete_binding (effective_start,
! 					 concrete_key->get_size_in_bits ());
  	  bind_key (effective_concrete_key, iter_sval);
  	}
        else
*************** binding_cluster::purge_region (store_man
*** 1027,1075 ****
  {
    gcc_assert (reg->get_kind () == RK_DECL);
    const binding_key *binding
!     = binding_key::make (mgr, const_cast<region *> (reg),
! 			 BK_direct);
    m_map.remove (binding);
  }
  
! /* Mark REG within this cluster as being filled with zeroes.
!    Remove all bindings, add a default binding to zero, and clear the
!    TOUCHED flag.  */
  
  void
! binding_cluster::zero_fill_region (store_manager *mgr, const region *reg)
  {
    clobber_region (mgr, reg);
  
-   /* Add a default binding to zero.  */
    region_model_manager *sval_mgr = mgr->get_svalue_manager ();
!   const svalue *cst_sval
!     = sval_mgr->get_or_create_int_cst (integer_type_node, 0);
!   const svalue *bound_sval = cst_sval;
!   if (reg->get_type ())
!     bound_sval = sval_mgr->get_or_create_unaryop (reg->get_type (), NOP_EXPR,
! 						  cst_sval);
!   bind (mgr, reg, bound_sval, BK_default);
  
!   m_touched = false;
  }
  
! /* Mark REG within this cluster as being unknown.
     If UNCERTAINTY is non-NULL, use it to record any svalues that
!    had bindings to them removed, as being maybe-bound.  */
  
  void
  binding_cluster::mark_region_as_unknown (store_manager *mgr,
! 					 const region *reg,
  					 uncertainty_t *uncertainty)
  {
!   remove_overlapping_bindings (mgr, reg, uncertainty);
  
    /* Add a default binding to "unknown".  */
    region_model_manager *sval_mgr = mgr->get_svalue_manager ();
    const svalue *sval
!     = sval_mgr->get_or_create_unknown_svalue (reg->get_type ());
!   bind (mgr, reg, sval, BK_default);
  }
  
  /* Get any SVAL bound to REG within this cluster via kind KIND,
--- 1338,1434 ----
  {
    gcc_assert (reg->get_kind () == RK_DECL);
    const binding_key *binding
!     = binding_key::make (mgr, const_cast<region *> (reg));
    m_map.remove (binding);
  }
  
! /* Clobber REG and fill it with repeated copies of SVAL.  */
  
  void
! binding_cluster::fill_region (store_manager *mgr,
! 			      const region *reg,
! 			      const svalue *sval)
  {
    clobber_region (mgr, reg);
  
    region_model_manager *sval_mgr = mgr->get_svalue_manager ();
!   const svalue *byte_size_sval = reg->get_byte_size_sval (sval_mgr);
!   const svalue *fill_sval
!     = sval_mgr->get_or_create_repeated_svalue (reg->get_type (),
! 					       byte_size_sval, sval);
!   bind (mgr, reg, fill_sval);
! }
  
! /* Clobber REG within this cluster and fill it with zeroes.  */
! 
! void
! binding_cluster::zero_fill_region (store_manager *mgr, const region *reg)
! {
!   region_model_manager *sval_mgr = mgr->get_svalue_manager ();
!   const svalue *zero_sval = sval_mgr->get_or_create_int_cst (char_type_node, 0);
!   fill_region (mgr, reg, zero_sval);
  }
  
! /* Mark REG_TO_BIND within this cluster as being unknown.
! 
!    Remove any bindings overlapping REG_FOR_OVERLAP.
     If UNCERTAINTY is non-NULL, use it to record any svalues that
!    had bindings to them removed, as being maybe-bound.
! 
!    REG_TO_BIND and REG_FOR_OVERLAP are the same for
!    store::mark_region_as_unknown, but are different in
!    store::set_value's alias handling, for handling the case where
!    we have a write to a symbolic REG_FOR_OVERLAP. */
  
  void
  binding_cluster::mark_region_as_unknown (store_manager *mgr,
! 					 const region *reg_to_bind,
! 					 const region *reg_for_overlap,
  					 uncertainty_t *uncertainty)
  {
!   remove_overlapping_bindings (mgr, reg_for_overlap, uncertainty);
  
    /* Add a default binding to "unknown".  */
    region_model_manager *sval_mgr = mgr->get_svalue_manager ();
    const svalue *sval
!     = sval_mgr->get_or_create_unknown_svalue (reg_to_bind->get_type ());
!   bind (mgr, reg_to_bind, sval);
! }
! 
! /* Purge state involving SVAL.  */
! 
! void
! binding_cluster::purge_state_involving (const svalue *sval,
! 					region_model_manager *sval_mgr)
! {
!   auto_vec<const binding_key *> to_remove;
!   auto_vec<std::pair<const binding_key *, tree> > to_make_unknown;
!   for (auto iter : m_map)
!     {
!       const binding_key *iter_key = iter.first;
!       if (const symbolic_binding *symbolic_key
! 	    = iter_key->dyn_cast_symbolic_binding ())
! 	{
! 	  const region *reg = symbolic_key->get_region ();
! 	  if (reg->involves_p (sval))
! 	    to_remove.safe_push (iter_key);
! 	}
!       const svalue *iter_sval = iter.second;
!       if (iter_sval->involves_p (sval))
! 	to_make_unknown.safe_push (std::make_pair(iter_key,
! 						  iter_sval->get_type ()));
!     }
!   for (auto iter : to_remove)
!     {
!       m_map.remove (iter);
!       m_touched = true;
!     }
!   for (auto iter : to_make_unknown)
!     {
!       const svalue *new_sval
! 	= sval_mgr->get_or_create_unknown_svalue (iter.second);
!       m_map.put (iter.first, new_sval);
!     }
  }
  
  /* Get any SVAL bound to REG within this cluster via kind KIND,
*************** binding_cluster::mark_region_as_unknown
*** 1077,1086 ****
  
  const svalue *
  binding_cluster::get_binding (store_manager *mgr,
! 			      const region *reg,
! 			      binding_kind kind) const
  {
!   const binding_key *reg_binding = binding_key::make (mgr, reg, kind);
    const svalue *sval = m_map.get (reg_binding);
    if (sval)
      {
--- 1436,1444 ----
  
  const svalue *
  binding_cluster::get_binding (store_manager *mgr,
! 			      const region *reg) const
  {
!   const binding_key *reg_binding = binding_key::make (mgr, reg);
    const svalue *sval = m_map.get (reg_binding);
    if (sval)
      {
*************** binding_cluster::get_binding (store_mana
*** 1098,1104 ****
        while (const region *parent_reg = reg->get_parent_region ())
  	{
  	  const binding_key *parent_reg_binding
! 	    = binding_key::make (mgr, parent_reg, kind);
  	  if (parent_reg_binding == reg_binding
  	      && sval->get_type ()
  	      && reg->get_type ()
--- 1456,1462 ----
        while (const region *parent_reg = reg->get_parent_region ())
  	{
  	  const binding_key *parent_reg_binding
! 	    = binding_key::make (mgr, parent_reg);
  	  if (parent_reg_binding == reg_binding
  	      && sval->get_type ()
  	      && reg->get_type ()
*************** binding_cluster::get_binding (store_mana
*** 1119,1125 ****
  	  FOR_EACH_VEC_ELT_REVERSE (regions, i, iter_reg)
  	    {
  	      region_model_manager *rmm_mgr = mgr->get_svalue_manager ();
! 	      sval = rmm_mgr->get_or_create_sub_svalue (reg->get_type (),
  							sval, iter_reg);
  	    }
  	}
--- 1477,1483 ----
  	  FOR_EACH_VEC_ELT_REVERSE (regions, i, iter_reg)
  	    {
  	      region_model_manager *rmm_mgr = mgr->get_svalue_manager ();
! 	      sval = rmm_mgr->get_or_create_sub_svalue (iter_reg->get_type (),
  							sval, iter_reg);
  	    }
  	}
*************** binding_cluster::get_binding (store_mana
*** 1127,1147 ****
    return sval;
  }
  
! /* Get any SVAL bound to REG within this cluster via kind KIND,
     either directly for REG, or recursively checking for bindings within
     parent regions and extracting subvalues if need be.  */
  
  const svalue *
  binding_cluster::get_binding_recursive (store_manager *mgr,
! 					const region *reg,
! 					enum binding_kind kind) const
  {
!   if (const svalue *sval = get_binding (mgr, reg, kind))
      return sval;
    if (reg != m_base_region)
      if (const region *parent_reg = reg->get_parent_region ())
        if (const svalue *parent_sval
! 	  = get_binding_recursive (mgr, parent_reg, kind))
  	{
  	  /* Extract child svalue from parent svalue.  */
  	  region_model_manager *rmm_mgr = mgr->get_svalue_manager ();
--- 1485,1504 ----
    return sval;
  }
  
! /* Get any SVAL bound to REG within this cluster,
     either directly for REG, or recursively checking for bindings within
     parent regions and extracting subvalues if need be.  */
  
  const svalue *
  binding_cluster::get_binding_recursive (store_manager *mgr,
! 					const region *reg) const
  {
!   if (const svalue *sval = get_binding (mgr, reg))
      return sval;
    if (reg != m_base_region)
      if (const region *parent_reg = reg->get_parent_region ())
        if (const svalue *parent_sval
! 	  = get_binding_recursive (mgr, parent_reg))
  	{
  	  /* Extract child svalue from parent svalue.  */
  	  region_model_manager *rmm_mgr = mgr->get_svalue_manager ();
*************** const svalue *
*** 1157,1174 ****
  binding_cluster::get_any_binding (store_manager *mgr,
  				  const region *reg) const
  {
!   /* Look for a "direct" binding.  */
    if (const svalue *direct_sval
!       = get_binding_recursive (mgr, reg, BK_direct))
      return direct_sval;
  
-   /* Look for a "default" binding, but not if there's been a symbolic
-      write.  */
-   if (!m_touched)
-     if (const svalue *default_sval
- 	= get_binding_recursive (mgr, reg, BK_default))
-       return default_sval;
- 
    /* If this cluster has been touched by a symbolic write, then the content
       of any subregion not currently specifically bound is "UNKNOWN".  */
    if (m_touched)
--- 1514,1524 ----
  binding_cluster::get_any_binding (store_manager *mgr,
  				  const region *reg) const
  {
!   /* Look for a direct binding.  */
    if (const svalue *direct_sval
!       = get_binding_recursive (mgr, reg))
      return direct_sval;
  
    /* If this cluster has been touched by a symbolic write, then the content
       of any subregion not currently specifically bound is "UNKNOWN".  */
    if (m_touched)
*************** const svalue *
*** 1209,1216 ****
  binding_cluster::maybe_get_compound_binding (store_manager *mgr,
  					     const region *reg) const
  {
-   binding_map map;
- 
    region_offset cluster_offset = m_base_region->get_offset ();
    if (cluster_offset.symbolic_p ())
      return NULL;
--- 1559,1564 ----
*************** binding_cluster::maybe_get_compound_bind
*** 1218,1223 ****
--- 1566,1601 ----
    if (reg_offset.symbolic_p ())
      return NULL;
  
+   region_model_manager *sval_mgr = mgr->get_svalue_manager ();
+ 
+   /* We will a build the result map in two parts:
+      (a) result_map, holding the concrete keys from this cluster,
+ 
+      (b) default_map, holding the initial values for the region
+      (e.g. uninitialized, initializer values, or zero), unless this
+      cluster has been touched.
+ 
+      We will populate (a), and as we do, clobber (b), trimming and
+      splitting its bindings as necessary.
+      Finally, we will merge (b) into (a), giving a concrete map
+      that merges both the initial values and the bound values from
+      the binding_cluster.
+      Doing it this way reduces N for the O(N^2) intersection-finding,
+      perhaps we should have a spatial-organized data structure for
+      concrete keys, though.  */
+ 
+   binding_map result_map;
+   binding_map default_map;
+ 
+   /* Set up default values in default_map.  */
+   const svalue *default_sval;
+   if (m_touched)
+     default_sval = sval_mgr->get_or_create_unknown_svalue (reg->get_type ());
+   else
+     default_sval = sval_mgr->get_or_create_initial_value (reg);
+   const binding_key *default_key = binding_key::make (mgr, reg);
+   default_map.put (default_key, default_sval);
+ 
    for (map_t::iterator iter = m_map.begin (); iter != m_map.end (); ++iter)
      {
        const binding_key *key = (*iter).first;
*************** binding_cluster::maybe_get_compound_bind
*** 1226,1303 ****
        if (const concrete_binding *concrete_key
  	  = key->dyn_cast_concrete_binding ())
  	{
! 	  /* Skip bindings that are outside the bit range of REG.  */
! 	  if (concrete_key->get_start_bit_offset ()
! 	      < reg_offset.get_bit_offset ())
! 	    continue;
  	  bit_size_t reg_bit_size;
! 	  if (reg->get_bit_size (&reg_bit_size))
! 	    if (concrete_key->get_start_bit_offset ()
! 	      >= reg_offset.get_bit_offset () + reg_bit_size)
! 	    continue;
  
! 	  /* Get offset of KEY relative to REG, rather than to
! 	     the cluster.  */
! 	  bit_offset_t relative_start
! 	    = (concrete_key->get_start_bit_offset ()
! 	       - reg_offset.get_bit_offset ());
! 	  const concrete_binding *offset_concrete_key
! 	    = mgr->get_concrete_binding (relative_start,
! 					 concrete_key->get_size_in_bits (),
! 					 key->get_kind ());
! 	  map.put (offset_concrete_key, sval);
! 	}
!       else
! 	return NULL;
!     }
  
!   if (map.elements () == 0)
!     return NULL;
  
!   region_model_manager *sval_mgr = mgr->get_svalue_manager ();
!   return sval_mgr->get_or_create_compound_svalue (reg->get_type (), map);
! }
  
  
! /* Populate OUT with all bindings within this cluster that overlap REG.  */
  
! void
! binding_cluster::get_overlapping_bindings (store_manager *mgr,
! 					   const region *reg,
! 					   auto_vec<const binding_key *> *out)
! {
!   const binding_key *binding
!     = binding_key::make (mgr, reg, BK_direct);
!   for (map_t::iterator iter = m_map.begin ();
!        iter != m_map.end (); ++iter)
!     {
!       const binding_key *iter_key = (*iter).first;
!       if (const concrete_binding *ckey
! 	    = binding->dyn_cast_concrete_binding ())
! 	{
! 	  if (const concrete_binding *iter_ckey
! 	      = iter_key->dyn_cast_concrete_binding ())
  	    {
! 	      if (ckey->overlaps_p (*iter_ckey))
! 		out->safe_push (iter_key);
  	    }
  	  else
  	    {
! 	      /* Assume overlap.  */
! 	      out->safe_push (iter_key);
  	    }
  	}
        else
! 	{
! 	  /* Assume overlap.  */
! 	  out->safe_push (iter_key);
! 	}
      }
  }
  
! /* Remove any bindings within this cluster that overlap REG,
!    but retain default bindings that overlap but aren't fully covered
!    by REG.
     If UNCERTAINTY is non-NULL, use it to record any svalues that
     were removed, as being maybe-bound.  */
  
--- 1604,1706 ----
        if (const concrete_binding *concrete_key
  	  = key->dyn_cast_concrete_binding ())
  	{
! 	  const bit_range &bound_range = concrete_key->get_bit_range ();
! 
  	  bit_size_t reg_bit_size;
! 	  if (!reg->get_bit_size (&reg_bit_size))
! 	    return NULL;
  
! 	  bit_range reg_range (reg_offset.get_bit_offset (),
! 			       reg_bit_size);
  
! 	  /* Skip bindings that are outside the bit range of REG.  */
! 	  if (!bound_range.intersects_p (reg_range))
! 	    continue;
  
! 	  /* We shouldn't have an exact match; that should have been
! 	     handled already.  */
! 	  gcc_assert (!(reg_range == bound_range));
  
+ 	  bit_range subrange (0, 0);
+ 	  if (reg_range.contains_p (bound_range, &subrange))
+ 	    {
+ 	      /* We have a bound range fully within REG.
+ 		 Add it to map, offsetting accordingly.  */
  
! 	      /* Get offset of KEY relative to REG, rather than to
! 		 the cluster.  */
! 	      const concrete_binding *offset_concrete_key
! 		= mgr->get_concrete_binding (subrange);
! 	      result_map.put (offset_concrete_key, sval);
  
! 	      /* Clobber default_map, removing/trimming/spliting where
! 		 it overlaps with offset_concrete_key.  */
! 	      default_map.remove_overlapping_bindings (mgr,
! 						       offset_concrete_key,
! 						       NULL, false);
! 	    }
! 	  else if (bound_range.contains_p (reg_range, &subrange))
  	    {
! 	      /* REG is fully within the bound range, but
! 		 is not equal to it; we're extracting a subvalue.  */
! 	      return sval->extract_bit_range (reg->get_type (),
! 					      subrange,
! 					      mgr->get_svalue_manager ());
  	    }
  	  else
  	    {
! 	      /* REG and the bound range partially overlap.  */
! 	      bit_range reg_subrange (0, 0);
! 	      bit_range bound_subrange (0, 0);
! 	      reg_range.intersects_p (bound_range,
! 				      &reg_subrange, &bound_subrange);
! 
! 	      /* Get the bits from the bound value for the bits at the
! 		 intersection (relative to the bound value).  */
! 	      const svalue *overlap_sval
! 		= sval->extract_bit_range (NULL_TREE,
! 					   bound_subrange,
! 					   mgr->get_svalue_manager ());
! 
! 	      /* Get key for overlap, relative to the REG.  */
! 	      const concrete_binding *overlap_concrete_key
! 		= mgr->get_concrete_binding (reg_subrange);
! 	      result_map.put (overlap_concrete_key, overlap_sval);
! 
! 	      /* Clobber default_map, removing/trimming/spliting where
! 		 it overlaps with overlap_concrete_key.  */
! 	      default_map.remove_overlapping_bindings (mgr,
! 						       overlap_concrete_key,
! 						       NULL, false);
  	    }
  	}
        else
! 	/* Can't handle symbolic bindings.  */
! 	return NULL;
!     }
! 
!   if (result_map.elements () == 0)
!     return NULL;
! 
!   /* Merge any bindings from default_map into result_map.  */
!   for (auto iter : default_map)
!     {
!       const binding_key *key = iter.first;
!       const svalue *sval = iter.second;
!       result_map.put (key, sval);
      }
+ 
+   return sval_mgr->get_or_create_compound_svalue (reg->get_type (), result_map);
  }
  
! /* Remove, truncate, and/or split any bindings within this map that
!    could overlap REG.
! 
!    If REG's base region or this cluster is symbolic and they're different
!    base regions, then remove everything in this cluster's map, on the
!    grounds that REG could be referring to the same memory as anything
!    in the map.
! 
     If UNCERTAINTY is non-NULL, use it to record any svalues that
     were removed, as being maybe-bound.  */
  
*************** binding_cluster::remove_overlapping_bind
*** 1306,1331 ****
  					      const region *reg,
  					      uncertainty_t *uncertainty)
  {
!   auto_vec<const binding_key *> bindings;
!   get_overlapping_bindings (mgr, reg, &bindings);
  
!   unsigned i;
!   const binding_key *iter_binding;
!   FOR_EACH_VEC_ELT (bindings, i, iter_binding)
!     {
!       /* Don't remove default bindings, unless the default binding
! 	 is fully covered by REG.  */
!       if (iter_binding->get_kind () == BK_default)
! 	{
! 	  const binding_key *reg_binding
! 	    = binding_key::make (mgr, reg, BK_default);
! 	  if (reg_binding != iter_binding)
! 	    continue;
! 	}
!       if (uncertainty)
! 	uncertainty->on_maybe_bound_sval (m_map.get (iter_binding));
!       m_map.remove (iter_binding);
!     }
  }
  
  /* Attempt to merge CLUSTER_A and CLUSTER_B into OUT_CLUSTER, using
--- 1709,1729 ----
  					      const region *reg,
  					      uncertainty_t *uncertainty)
  {
!   const binding_key *reg_binding = binding_key::make (mgr, reg);
  
!   const region *cluster_base_reg = get_base_region ();
!   const region *other_base_reg = reg->get_base_region ();
!   /* If at least one of the base regions involved is symbolic, and they're
!      not the same base region, then consider everything in the map as
!      potentially overlapping with reg_binding (even if it's a concrete
!      binding and things in the map are concrete - they could be referring
!      to the same memory when the symbolic base regions are taken into
!      account).  */
!   bool always_overlap = (cluster_base_reg != other_base_reg
! 			 && (cluster_base_reg->get_kind () == RK_SYMBOLIC
! 			     || other_base_reg->get_kind () == RK_SYMBOLIC));
!   m_map.remove_overlapping_bindings (mgr, reg_binding, uncertainty,
! 				     always_overlap);
  }
  
  /* Attempt to merge CLUSTER_A and CLUSTER_B into OUT_CLUSTER, using
*************** binding_cluster::can_merge_p (const bind
*** 1386,1398 ****
--- 1784,1804 ----
        const binding_key *key_b = (*iter_b).first;
        keys.add (key_b);
      }
+   int num_symbolic_keys = 0;
+   int num_concrete_keys = 0;
    for (hash_set<const binding_key *>::iterator iter = keys.begin ();
         iter != keys.end (); ++iter)
      {
+       region_model_manager *sval_mgr = mgr->get_svalue_manager ();
        const binding_key *key = *iter;
        const svalue *sval_a = cluster_a->get_any_value (key);
        const svalue *sval_b = cluster_b->get_any_value (key);
  
+       if (key->symbolic_p ())
+ 	num_symbolic_keys++;
+       else
+ 	num_concrete_keys++;
+ 
        if (sval_a == sval_b)
  	{
  	  gcc_assert (sval_a);
*************** binding_cluster::can_merge_p (const bind
*** 1401,1407 ****
  	}
        else if (sval_a && sval_b)
  	{
- 	  region_model_manager *sval_mgr = mgr->get_svalue_manager ();
  	  if (const svalue *merged_sval
  	      = sval_a->can_merge_p (sval_b, sval_mgr, merger))
  	    {
--- 1807,1812 ----
*************** binding_cluster::can_merge_p (const bind
*** 1415,1449 ****
        /* If we get here, then one cluster binds this key and the other
  	 doesn't; merge them as "UNKNOWN".  */
        gcc_assert (sval_a || sval_b);
!       tree type = sval_a ? sval_a->get_type () : sval_b->get_type ();
        const svalue *unknown_sval
  	= mgr->get_svalue_manager ()->get_or_create_unknown_svalue (type);
        out_cluster->m_map.put (key, unknown_sval);
      }
  
!   /* Handle the case where we get a default binding from one and a direct
!      binding from the other.  */
!   auto_vec<const concrete_binding *> duplicate_keys;
!   for (map_t::iterator iter = out_cluster->m_map.begin ();
!        iter != out_cluster->m_map.end (); ++iter)
      {
!       const concrete_binding *ckey
! 	= (*iter).first->dyn_cast_concrete_binding ();
!       if (!ckey)
! 	continue;
!       if (ckey->get_kind () != BK_direct)
! 	continue;
!       const concrete_binding *def_ckey
! 	= mgr->get_concrete_binding (ckey->get_start_bit_offset (),
! 				     ckey->get_size_in_bits (),
! 				     BK_default);
!       if (out_cluster->m_map.get (def_ckey))
! 	duplicate_keys.safe_push (def_ckey);
      }
-   unsigned i;
-   const concrete_binding *key;
-   FOR_EACH_VEC_ELT (duplicate_keys, i, key)
-     out_cluster->m_map.remove (key);
  
    /* We don't handle other kinds of overlaps yet.  */
  
--- 1820,1850 ----
        /* If we get here, then one cluster binds this key and the other
  	 doesn't; merge them as "UNKNOWN".  */
        gcc_assert (sval_a || sval_b);
! 
!       const svalue *bound_sval = sval_a ? sval_a : sval_b;
!       tree type = bound_sval->get_type ();
        const svalue *unknown_sval
  	= mgr->get_svalue_manager ()->get_or_create_unknown_svalue (type);
+ 
+       /* ...but reject the merger if this sval shouldn't be mergeable
+ 	 (e.g. reject merging svalues that have non-purgable sm-state,
+ 	 to avoid falsely reporting memory leaks by merging them
+ 	 with something else).  */
+       if (!bound_sval->can_merge_p (unknown_sval, sval_mgr, merger))
+ 	return false;
+ 
        out_cluster->m_map.put (key, unknown_sval);
      }
  
!   /* We can only have at most one symbolic key per cluster,
!      and if we do, we can't have any concrete keys.
!      If this happens, mark the cluster as touched, with no keys.  */
!   if (num_symbolic_keys >= 2
!       || (num_concrete_keys > 0 && num_symbolic_keys > 0))
      {
!       out_cluster->m_touched = true;
!       out_cluster->m_map.empty ();
      }
  
    /* We don't handle other kinds of overlaps yet.  */
  
*************** binding_cluster::make_unknown_relative_t
*** 1482,1488 ****
  	{
  	  const region *base_reg
  	    = region_sval->get_pointee ()->get_base_region ();
! 	  if (!base_reg->symbolic_for_unknown_ptr_p ())
  	    {
  	      binding_cluster *c = out_store->get_or_create_cluster (base_reg);
  	      c->mark_as_escaped ();
--- 1883,1890 ----
  	{
  	  const region *base_reg
  	    = region_sval->get_pointee ()->get_base_region ();
! 	  if (base_reg->tracked_p ()
! 	      && !base_reg->symbolic_for_unknown_ptr_p ())
  	    {
  	      binding_cluster *c = out_store->get_or_create_cluster (base_reg);
  	      c->mark_as_escaped ();
*************** binding_cluster::mark_as_escaped ()
*** 1501,1512 ****
  
  /* If this cluster has escaped (by this call, or by an earlier one, or
     by being an external param), then unbind all values and mark it
!    as "touched", so that it has an unknown value, rather than an
!    initial_svalue.  */
  
  void
  binding_cluster::on_unknown_fncall (const gcall *call,
! 				    store_manager *mgr)
  {
    if (m_escaped)
      {
--- 1903,1916 ----
  
  /* If this cluster has escaped (by this call, or by an earlier one, or
     by being an external param), then unbind all values and mark it
!    as "touched", so that it has a conjured value, rather than an
!    initial_svalue.
!    Use P to purge state involving conjured_svalues.  */
  
  void
  binding_cluster::on_unknown_fncall (const gcall *call,
! 				    store_manager *mgr,
! 				    const conjured_purge &p)
  {
    if (m_escaped)
      {
*************** binding_cluster::on_unknown_fncall (cons
*** 1515,1527 ****
        /* Bind it to a new "conjured" value using CALL.  */
        const svalue *sval
  	= mgr->get_svalue_manager ()->get_or_create_conjured_svalue
! 	    (m_base_region->get_type (), call, m_base_region);
!       bind (mgr, m_base_region, sval, BK_direct);
  
        m_touched = true;
      }
  }
  
  /* Return true if this binding_cluster has no information
     i.e. if there are no bindings, and it hasn't been marked as having
     escaped, or touched symbolically.  */
--- 1919,1950 ----
        /* Bind it to a new "conjured" value using CALL.  */
        const svalue *sval
  	= mgr->get_svalue_manager ()->get_or_create_conjured_svalue
! 	    (m_base_region->get_type (), call, m_base_region, p);
!       bind (mgr, m_base_region, sval);
  
        m_touched = true;
      }
  }
  
+ /* Mark this cluster as having been clobbered by STMT.
+    Use P to purge state involving conjured_svalues.  */
+ 
+ void
+ binding_cluster::on_asm (const gasm *stmt,
+ 			 store_manager *mgr,
+ 			 const conjured_purge &p)
+ {
+   m_map.empty ();
+ 
+   /* Bind it to a new "conjured" value using CALL.  */
+   const svalue *sval
+     = mgr->get_svalue_manager ()->get_or_create_conjured_svalue
+     (m_base_region->get_type (), stmt, m_base_region, p);
+   bind (mgr, m_base_region, sval);
+ 
+   m_touched = true;
+ }
+ 
  /* Return true if this binding_cluster has no information
     i.e. if there are no bindings, and it hasn't been marked as having
     escaped, or touched symbolically.  */
*************** binding_cluster::redundant_p () const
*** 1534,1540 ****
  	  && !m_touched);
  }
  
! /* Add PV to OUT_PVS, casting it to TYPE if if is not already of that type.  */
  
  static void
  append_pathvar_with_type (path_var pv,
--- 1957,1963 ----
  	  && !m_touched);
  }
  
! /* Add PV to OUT_PVS, casting it to TYPE if it is not already of that type.  */
  
  static void
  append_pathvar_with_type (path_var pv,
*************** binding_cluster::maybe_get_simple_value
*** 1623,1642 ****
    if (m_map.elements () != 1)
      return NULL;
  
!   const binding_key *key = binding_key::make (mgr, m_base_region, BK_direct);
    return get_any_value (key);
  }
  
  /* class store_manager.  */
  
  /* binding consolidation.  */
  
  const concrete_binding *
  store_manager::get_concrete_binding (bit_offset_t start_bit_offset,
! 				     bit_offset_t size_in_bits,
! 				     enum binding_kind kind)
  {
!   concrete_binding b (start_bit_offset, size_in_bits, kind);
    if (concrete_binding *existing = m_concrete_binding_key_mgr.get (b))
      return existing;
  
--- 2046,2070 ----
    if (m_map.elements () != 1)
      return NULL;
  
!   const binding_key *key = binding_key::make (mgr, m_base_region);
    return get_any_value (key);
  }
  
  /* class store_manager.  */
  
+ logger *
+ store_manager::get_logger () const
+ {
+   return m_mgr->get_logger ();
+ }
+ 
  /* binding consolidation.  */
  
  const concrete_binding *
  store_manager::get_concrete_binding (bit_offset_t start_bit_offset,
! 				     bit_offset_t size_in_bits)
  {
!   concrete_binding b (start_bit_offset, size_in_bits);
    if (concrete_binding *existing = m_concrete_binding_key_mgr.get (b))
      return existing;
  
*************** store_manager::get_concrete_binding (bit
*** 1646,1655 ****
  }
  
  const symbolic_binding *
! store_manager::get_symbolic_binding (const region *reg,
! 				     enum binding_kind kind)
  {
!   symbolic_binding b (reg, kind);
    if (symbolic_binding *existing = m_symbolic_binding_key_mgr.get (b))
      return existing;
  
--- 2074,2082 ----
  }
  
  const symbolic_binding *
! store_manager::get_symbolic_binding (const region *reg)
  {
!   symbolic_binding b (reg);
    if (symbolic_binding *existing = m_symbolic_binding_key_mgr.get (b))
      return existing;
  
*************** store::store ()
*** 1670,1676 ****
  /* store's copy ctor.  */
  
  store::store (const store &other)
! : m_called_unknown_fn (other.m_called_unknown_fn)
  {
    for (cluster_map_t::iterator iter = other.m_cluster_map.begin ();
         iter != other.m_cluster_map.end ();
--- 2097,2104 ----
  /* store's copy ctor.  */
  
  store::store (const store &other)
! : m_cluster_map (other.m_cluster_map.elements ()),
!   m_called_unknown_fn (other.m_called_unknown_fn)
  {
    for (cluster_map_t::iterator iter = other.m_cluster_map.begin ();
         iter != other.m_cluster_map.end ();
*************** store::dump (bool simple) const
*** 1910,1915 ****
--- 2338,2352 ----
    pp_flush (&pp);
  }
  
+ /* Assert that this object is valid.  */
+ 
+ void
+ store::validate () const
+ {
+   for (auto iter : m_cluster_map)
+     iter.second->validate ();
+ }
+ 
  /* Return a new json::object of the form
     {PARENT_REGION_DESC: {BASE_REGION_DESC: object for binding_map,
  			 ... for each cluster within parent region},
*************** store::get_any_binding (store_manager *m
*** 1985,1994 ****
  
  void
  store::set_value (store_manager *mgr, const region *lhs_reg,
! 		  const svalue *rhs_sval, enum binding_kind kind,
  		  uncertainty_t *uncertainty)
  {
!   remove_overlapping_bindings (mgr, lhs_reg);
  
    rhs_sval = simplify_for_binding (rhs_sval);
  
--- 2422,2434 ----
  
  void
  store::set_value (store_manager *mgr, const region *lhs_reg,
! 		  const svalue *rhs_sval,
  		  uncertainty_t *uncertainty)
  {
!   logger *logger = mgr->get_logger ();
!   LOG_SCOPE (logger);
! 
!   remove_overlapping_bindings (mgr, lhs_reg, uncertainty);
  
    rhs_sval = simplify_for_binding (rhs_sval);
  
*************** store::set_value (store_manager *mgr, co
*** 2009,2018 ****
  	  mark_as_escaped (ptr_base_reg);
  	}
      }
!   else
      {
        lhs_cluster = get_or_create_cluster (lhs_base_reg);
!       lhs_cluster->bind (mgr, lhs_reg, rhs_sval, kind);
      }
  
    /* Bindings to a cluster can affect other clusters if a symbolic
--- 2449,2464 ----
  	  mark_as_escaped (ptr_base_reg);
  	}
      }
!   else if (lhs_base_reg->tracked_p ())
      {
        lhs_cluster = get_or_create_cluster (lhs_base_reg);
!       lhs_cluster->bind (mgr, lhs_reg, rhs_sval);
!     }
!   else
!     {
!       /* Reject attempting to bind values into an untracked region;
! 	 merely invalidate values below.  */
!       lhs_cluster = NULL;
      }
  
    /* Bindings to a cluster can affect other clusters if a symbolic
*************** store::set_value (store_manager *mgr, co
*** 2040,2047 ****
  	      gcc_unreachable ();
  
  	    case tristate::TS_UNKNOWN:
! 	      iter_cluster->mark_region_as_unknown (mgr, iter_base_reg,
! 						    uncertainty);
  	      break;
  
  	    case tristate::TS_TRUE:
--- 2486,2511 ----
  	      gcc_unreachable ();
  
  	    case tristate::TS_UNKNOWN:
! 	      if (logger)
! 		{
! 		  pretty_printer *pp = logger->get_printer ();
! 		  logger->start_log_line ();
! 		  logger->log_partial ("possible aliasing of ");
! 		  iter_base_reg->dump_to_pp (pp, true);
! 		  logger->log_partial (" when writing SVAL: ");
! 		  rhs_sval->dump_to_pp (pp, true);
! 		  logger->log_partial (" to LHS_REG: ");
! 		  lhs_reg->dump_to_pp (pp, true);
! 		  logger->end_log_line ();
! 		}
! 	      /* Mark all of iter_cluster's iter_base_reg as unknown,
! 		 using LHS_REG when considering overlaps, to handle
! 		 symbolic vs concrete issues.  */
! 	      iter_cluster->mark_region_as_unknown
! 		(mgr,
! 		 iter_base_reg, /* reg_to_bind */
! 		 lhs_reg, /* reg_for_overlap */
! 		 uncertainty);
  	      break;
  
  	    case tristate::TS_TRUE:
*************** store::eval_alias_1 (const region *base_
*** 2091,2103 ****
        = base_reg_a->dyn_cast_symbolic_region ())
      {
        const svalue *sval_a = sym_reg_a->get_pointer ();
!       if (sval_a->get_kind () == SK_INITIAL)
! 	if (tree decl_b = base_reg_b->maybe_get_decl ())
! 	  if (!is_global_var (decl_b))
! 	    {
! 	      /* The initial value of a pointer can't point to a local.  */
! 	      return tristate::TS_FALSE;
! 	    }
        if (sval_a->get_kind () == SK_INITIAL
  	  && base_reg_b->get_kind () == RK_HEAP_ALLOCATED)
  	{
--- 2555,2571 ----
        = base_reg_a->dyn_cast_symbolic_region ())
      {
        const svalue *sval_a = sym_reg_a->get_pointer ();
!       if (tree decl_b = base_reg_b->maybe_get_decl ())
! 	{
! 	  if (!may_be_aliased (decl_b))
! 	    return tristate::TS_FALSE;
! 	  if (sval_a->get_kind () == SK_INITIAL)
! 	    if (!is_global_var (decl_b))
! 	      {
! 		/* The initial value of a pointer can't point to a local.  */
! 		return tristate::TS_FALSE;
! 	      }
! 	}
        if (sval_a->get_kind () == SK_INITIAL
  	  && base_reg_b->get_kind () == RK_HEAP_ALLOCATED)
  	{
*************** store::purge_region (store_manager *mgr,
*** 2167,2182 ****
      }
  }
  
! /* Zero-fill REG.  */
  
  void
! store::zero_fill_region (store_manager *mgr, const region *reg)
  {
    const region *base_reg = reg->get_base_region ();
!   if (base_reg->symbolic_for_unknown_ptr_p ())
      return;
    binding_cluster *cluster = get_or_create_cluster (base_reg);
!   cluster->zero_fill_region (mgr, reg);
  }
  
  /* Mark REG as having unknown content.  */
--- 2635,2661 ----
      }
  }
  
! /* Fill REG with SVAL.  */
  
  void
! store::fill_region (store_manager *mgr, const region *reg, const svalue *sval)
  {
    const region *base_reg = reg->get_base_region ();
!   if (base_reg->symbolic_for_unknown_ptr_p ()
!       || !base_reg->tracked_p ())
      return;
    binding_cluster *cluster = get_or_create_cluster (base_reg);
!   cluster->fill_region (mgr, reg, sval);
! }
! 
! /* Zero-fill REG.  */
! 
! void
! store::zero_fill_region (store_manager *mgr, const region *reg)
! {
!   region_model_manager *sval_mgr = mgr->get_svalue_manager ();
!   const svalue *zero_sval = sval_mgr->get_or_create_int_cst (char_type_node, 0);
!   fill_region (mgr, reg, zero_sval);
  }
  
  /* Mark REG as having unknown content.  */
*************** store::mark_region_as_unknown (store_man
*** 2186,2195 ****
  			       uncertainty_t *uncertainty)
  {
    const region *base_reg = reg->get_base_region ();
!   if (base_reg->symbolic_for_unknown_ptr_p ())
      return;
    binding_cluster *cluster = get_or_create_cluster (base_reg);
!   cluster->mark_region_as_unknown (mgr, reg, uncertainty);
  }
  
  /* Get the cluster for BASE_REG, or NULL (const version).  */
--- 2665,2698 ----
  			       uncertainty_t *uncertainty)
  {
    const region *base_reg = reg->get_base_region ();
!   if (base_reg->symbolic_for_unknown_ptr_p ()
!       || !base_reg->tracked_p ())
      return;
    binding_cluster *cluster = get_or_create_cluster (base_reg);
!   cluster->mark_region_as_unknown (mgr, reg, reg, uncertainty);
! }
! 
! /* Purge state involving SVAL.  */
! 
! void
! store::purge_state_involving (const svalue *sval,
! 			      region_model_manager *sval_mgr)
! {
!   auto_vec <const region *> base_regs_to_purge;
!   for (auto iter : m_cluster_map)
!     {
!       const region *base_reg = iter.first;
!       if (base_reg->involves_p (sval))
! 	base_regs_to_purge.safe_push (base_reg);
!       else
! 	{
! 	  binding_cluster *cluster = iter.second;
! 	  cluster->purge_state_involving (sval, sval_mgr);
! 	}
!     }
! 
!   for (auto iter : base_regs_to_purge)
!     purge_cluster (iter);
  }
  
  /* Get the cluster for BASE_REG, or NULL (const version).  */
*************** store::get_or_create_cluster (const regi
*** 2230,2235 ****
--- 2733,2741 ----
    /* We shouldn't create clusters for dereferencing an UNKNOWN ptr.  */
    gcc_assert (!base_reg->symbolic_for_unknown_ptr_p ());
  
+   /* We shouldn't create clusters for base regions that aren't trackable.  */
+   gcc_assert (base_reg->tracked_p ());
+ 
    if (binding_cluster **slot = m_cluster_map.get (base_reg))
      return *slot;
  
*************** store::mark_as_escaped (const region *ba
*** 2318,2324 ****
    gcc_assert (base_reg);
    gcc_assert (base_reg->get_base_region () == base_reg);
  
!   if (base_reg->symbolic_for_unknown_ptr_p ())
      return;
  
    binding_cluster *cluster = get_or_create_cluster (base_reg);
--- 2824,2831 ----
    gcc_assert (base_reg);
    gcc_assert (base_reg->get_base_region () == base_reg);
  
!   if (base_reg->symbolic_for_unknown_ptr_p ()
!       || !base_reg->tracked_p ())
      return;
  
    binding_cluster *cluster = get_or_create_cluster (base_reg);
*************** store::mark_as_escaped (const region *ba
*** 2329,2341 ****
     (either in this fncall, or in a prior one).  */
  
  void
! store::on_unknown_fncall (const gcall *call, store_manager *mgr)
  {
    m_called_unknown_fn = true;
  
    for (cluster_map_t::iterator iter = m_cluster_map.begin ();
         iter != m_cluster_map.end (); ++iter)
!     (*iter).second->on_unknown_fncall (call, mgr);
  }
  
  /* Return true if a non-const pointer to BASE_REG (or something within it)
--- 2836,2849 ----
     (either in this fncall, or in a prior one).  */
  
  void
! store::on_unknown_fncall (const gcall *call, store_manager *mgr,
! 			  const conjured_purge &p)
  {
    m_called_unknown_fn = true;
  
    for (cluster_map_t::iterator iter = m_cluster_map.begin ();
         iter != m_cluster_map.end (); ++iter)
!     (*iter).second->on_unknown_fncall (call, mgr, p);
  }
  
  /* Return true if a non-const pointer to BASE_REG (or something within it)
*************** store::get_representative_path_vars (con
*** 2384,2393 ****
  }
  
  /* Remove all bindings overlapping REG within this store, removing
!    any clusters that become redundant.  */
  
  void
! store::remove_overlapping_bindings (store_manager *mgr, const region *reg)
  {
    const region *base_reg = reg->get_base_region ();
    if (binding_cluster **cluster_slot = m_cluster_map.get (base_reg))
--- 2892,2905 ----
  }
  
  /* Remove all bindings overlapping REG within this store, removing
!    any clusters that become redundant.
! 
!    If UNCERTAINTY is non-NULL, use it to record any svalues that
!    were removed, as being maybe-bound.  */
  
  void
! store::remove_overlapping_bindings (store_manager *mgr, const region *reg,
! 				    uncertainty_t *uncertainty)
  {
    const region *base_reg = reg->get_base_region ();
    if (binding_cluster **cluster_slot = m_cluster_map.get (base_reg))
*************** store::remove_overlapping_bindings (stor
*** 2400,2406 ****
  	  delete cluster;
  	  return;
  	}
!       cluster->remove_overlapping_bindings (mgr, reg, NULL);
      }
  }
  
--- 2912,2918 ----
  	  delete cluster;
  	  return;
  	}
!       cluster->remove_overlapping_bindings (mgr, reg, uncertainty);
      }
  }
  
*************** test_bit_range_intersects_p ()
*** 2574,2579 ****
--- 3086,3105 ----
  
    ASSERT_FALSE (b3_to_5.intersects_p (b6_to_7));
    ASSERT_FALSE (b6_to_7.intersects_p (b3_to_5));
+ 
+   bit_range r1 (0,0);
+   bit_range r2 (0,0);
+   ASSERT_TRUE (b1_to_6.intersects_p (b0_to_7, &r1, &r2));
+   ASSERT_EQ (r1.get_start_bit_offset (), 0);
+   ASSERT_EQ (r1.m_size_in_bits, 6);
+   ASSERT_EQ (r2.get_start_bit_offset (), 1);
+   ASSERT_EQ (r2.m_size_in_bits, 6);
+ 
+   ASSERT_TRUE (b0_to_7.intersects_p (b1_to_6, &r1, &r2));
+   ASSERT_EQ (r1.get_start_bit_offset (), 1);
+   ASSERT_EQ (r1.m_size_in_bits, 6);
+   ASSERT_EQ (r2.get_start_bit_offset (), 0);
+   ASSERT_EQ (r2.m_size_in_bits, 6);
  }
  
  /* Implementation detail of ASSERT_BIT_RANGE_FROM_MASK_EQ.  */
*************** test_binding_key_overlap ()
*** 2698,2723 ****
    store_manager mgr (NULL);
  
    /* Various 8-bit bindings.  */
!   const concrete_binding *cb_0_7
!     = mgr.get_concrete_binding (0, 8, BK_direct);
!   const concrete_binding *cb_8_15
!     = mgr.get_concrete_binding (8, 8, BK_direct);
!   const concrete_binding *cb_16_23
!     = mgr.get_concrete_binding (16, 8, BK_direct);
!   const concrete_binding *cb_24_31
!     = mgr.get_concrete_binding (24, 8, BK_direct);
  
    /* 16-bit bindings.  */
!   const concrete_binding *cb_0_15
!     = mgr.get_concrete_binding (0, 16, BK_direct);
!   const concrete_binding *cb_8_23
!     = mgr.get_concrete_binding (8, 16, BK_direct);
!   const concrete_binding *cb_16_31
!     = mgr.get_concrete_binding (16, 16, BK_direct);
  
    /* 32-bit binding.  */
!   const concrete_binding *cb_0_31
!     = mgr.get_concrete_binding (0, 32, BK_direct);
  
    /* Everything should self-overlap.  */
    ASSERT_OVERLAP (cb_0_7, cb_0_7);
--- 3224,3241 ----
    store_manager mgr (NULL);
  
    /* Various 8-bit bindings.  */
!   const concrete_binding *cb_0_7 = mgr.get_concrete_binding (0, 8);
!   const concrete_binding *cb_8_15 = mgr.get_concrete_binding (8, 8);
!   const concrete_binding *cb_16_23 = mgr.get_concrete_binding (16, 8);
!   const concrete_binding *cb_24_31 = mgr.get_concrete_binding (24, 8);
  
    /* 16-bit bindings.  */
!   const concrete_binding *cb_0_15 = mgr.get_concrete_binding (0, 16);
!   const concrete_binding *cb_8_23 = mgr.get_concrete_binding (8, 16);
!   const concrete_binding *cb_16_31 = mgr.get_concrete_binding (16, 16);
  
    /* 32-bit binding.  */
!   const concrete_binding *cb_0_31 = mgr.get_concrete_binding (0, 32);
  
    /* Everything should self-overlap.  */
    ASSERT_OVERLAP (cb_0_7, cb_0_7);
diff -Nrcpad gcc-11.3.0/gcc/analyzer/store.h gcc-12.1.0/gcc/analyzer/store.h
*** gcc-11.3.0/gcc/analyzer/store.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/store.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Classes for modeling the state of memory.
!    Copyright (C) 2020-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Classes for modeling the state of memory.
!    Copyright (C) 2020-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** private:
*** 196,225 ****
    hash_set<const svalue *> m_mutable_at_unknown_call_svals;
  };
  
  class concrete_binding;
! 
! /* An enum for discriminating between "direct" vs "default" levels of
!    mapping.  */
! 
! enum binding_kind
! {
!   /* Special-case value for hash support.
!      This is the initial entry, so that hash traits can have
!      empty_zero_p = true.  */
!   BK_empty = 0,
! 
!   /* Special-case value for hash support.  */
!   BK_deleted,
! 
!   /* The normal kind of mapping.  */
!   BK_direct,
! 
!   /* A lower-priority kind of mapping, for use when inheriting
!      default values from a parent region.  */
!   BK_default
! };
! 
! extern const char *binding_kind_to_string (enum binding_kind kind);
  
  /* Abstract base class for describing ranges of bits within a binding_map
     that can have svalues bound to them.  */
--- 196,204 ----
    hash_set<const svalue *> m_mutable_at_unknown_call_svals;
  };
  
+ class byte_range;
  class concrete_binding;
! class symbolic_binding;
  
  /* Abstract base class for describing ranges of bits within a binding_map
     that can have svalues bound to them.  */
*************** public:
*** 231,240 ****
    virtual bool concrete_p () const = 0;
    bool symbolic_p () const { return !concrete_p (); }
  
!   static const binding_key *make (store_manager *mgr, const region *r,
! 				   enum binding_kind kind);
  
!   virtual void dump_to_pp (pretty_printer *pp, bool simple) const;
    void dump (bool simple) const;
    label_text get_desc (bool simple=true) const;
  
--- 210,218 ----
    virtual bool concrete_p () const = 0;
    bool symbolic_p () const { return !concrete_p (); }
  
!   static const binding_key *make (store_manager *mgr, const region *r);
  
!   virtual void dump_to_pp (pretty_printer *pp, bool simple) const = 0;
    void dump (bool simple) const;
    label_text get_desc (bool simple=true) const;
  
*************** public:
*** 243,272 ****
  
    virtual const concrete_binding *dyn_cast_concrete_binding () const
    { return NULL; }
! 
!   enum binding_kind get_kind () const { return m_kind; }
! 
!   void mark_deleted () { m_kind = BK_deleted; }
!   void mark_empty () { m_kind = BK_empty; }
!   bool is_deleted () const { return m_kind == BK_deleted; }
!   bool is_empty () const { return m_kind == BK_empty; }
! 
! protected:
!   binding_key (enum binding_kind kind) : m_kind (kind) {}
! 
!   hashval_t impl_hash () const
!   {
!     return m_kind;
!   }
!   bool impl_eq (const binding_key &other) const
!   {
!     return m_kind == other.m_kind;
!   }
! 
! private:
!   enum binding_kind m_kind;
  };
  
  struct bit_range
  {
    bit_range (bit_offset_t start_bit_offset, bit_size_t size_in_bits)
--- 221,232 ----
  
    virtual const concrete_binding *dyn_cast_concrete_binding () const
    { return NULL; }
!   virtual const symbolic_binding *dyn_cast_symbolic_binding () const
!   { return NULL; }
  };
  
+ /* A concrete range of bits.  */
+ 
  struct bit_range
  {
    bit_range (bit_offset_t start_bit_offset, bit_size_t size_in_bits)
*************** struct bit_range
*** 285,290 ****
--- 245,254 ----
    {
      return m_start_bit_offset + m_size_in_bits;
    }
+   bit_offset_t get_last_bit_offset () const
+   {
+     return get_next_bit_offset () - 1;
+   }
  
    bool contains_p (bit_offset_t offset) const
    {
*************** struct bit_range
*** 292,297 ****
--- 256,263 ----
  	    && offset < get_next_bit_offset ());
    }
  
+   bool contains_p (const bit_range &other, bit_range *out) const;
+ 
    bool operator== (const bit_range &other) const
    {
      return (m_start_bit_offset == other.m_start_bit_offset
*************** struct bit_range
*** 303,317 ****
--- 269,340 ----
      return (get_start_bit_offset () < other.get_next_bit_offset ()
  	    && other.get_start_bit_offset () < get_next_bit_offset ());
    }
+   bool intersects_p (const bit_range &other,
+ 		     bit_range *out_this,
+ 		     bit_range *out_other) const;
  
    static int cmp (const bit_range &br1, const bit_range &br2);
  
+   bit_range operator- (bit_offset_t offset) const;
+ 
    static bool from_mask (unsigned HOST_WIDE_INT mask, bit_range *out);
  
+   bool as_byte_range (byte_range *out) const;
+ 
    bit_offset_t m_start_bit_offset;
    bit_size_t m_size_in_bits;
  };
  
+ /* A concrete range of bytes.  */
+ 
+ struct byte_range
+ {
+   byte_range (byte_offset_t start_byte_offset, byte_size_t size_in_bytes)
+   : m_start_byte_offset (start_byte_offset),
+     m_size_in_bytes (size_in_bytes)
+   {}
+ 
+   void dump_to_pp (pretty_printer *pp) const;
+   void dump () const;
+ 
+   bool contains_p (byte_offset_t offset) const
+   {
+     return (offset >= get_start_byte_offset ()
+ 	    && offset < get_next_byte_offset ());
+   }
+   bool contains_p (const byte_range &other, byte_range *out) const;
+ 
+   bool operator== (const byte_range &other) const
+   {
+     return (m_start_byte_offset == other.m_start_byte_offset
+ 	    && m_size_in_bytes == other.m_size_in_bytes);
+   }
+ 
+   byte_offset_t get_start_byte_offset () const
+   {
+     return m_start_byte_offset;
+   }
+   byte_offset_t get_next_byte_offset () const
+   {
+     return m_start_byte_offset + m_size_in_bytes;
+   }
+   byte_offset_t get_last_byte_offset () const
+   {
+     return m_start_byte_offset + m_size_in_bytes - 1;
+   }
+ 
+   bit_range as_bit_range () const
+   {
+     return bit_range (m_start_byte_offset * BITS_PER_UNIT,
+ 		      m_size_in_bytes * BITS_PER_UNIT);
+   }
+ 
+   static int cmp (const byte_range &br1, const byte_range &br2);
+ 
+   byte_offset_t m_start_byte_offset;
+   byte_size_t m_size_in_bytes;
+ };
+ 
  /* Concrete subclass of binding_key, for describing a concrete range of
     bits within the binding_map (e.g. "bits 8-15").  */
  
*************** public:
*** 321,330 ****
    /* This class is its own key for the purposes of consolidation.  */
    typedef concrete_binding key_t;
  
!   concrete_binding (bit_offset_t start_bit_offset, bit_size_t size_in_bits,
! 		    enum binding_kind kind)
!   : binding_key (kind),
!     m_bit_range (start_bit_offset, size_in_bits)
    {}
    bool concrete_p () const FINAL OVERRIDE { return true; }
  
--- 344,351 ----
    /* This class is its own key for the purposes of consolidation.  */
    typedef concrete_binding key_t;
  
!   concrete_binding (bit_offset_t start_bit_offset, bit_size_t size_in_bits)
!   : m_bit_range (start_bit_offset, size_in_bits)
    {}
    bool concrete_p () const FINAL OVERRIDE { return true; }
  
*************** public:
*** 333,344 ****
      inchash::hash hstate;
      hstate.add_wide_int (m_bit_range.m_start_bit_offset);
      hstate.add_wide_int (m_bit_range.m_size_in_bits);
!     return hstate.end () ^ binding_key::impl_hash ();
    }
    bool operator== (const concrete_binding &other) const
    {
-     if (!binding_key::impl_eq (other))
-       return false;
      return m_bit_range == other.m_bit_range;
    }
  
--- 354,363 ----
      inchash::hash hstate;
      hstate.add_wide_int (m_bit_range.m_start_bit_offset);
      hstate.add_wide_int (m_bit_range.m_size_in_bits);
!     return hstate.end ();
    }
    bool operator== (const concrete_binding &other) const
    {
      return m_bit_range == other.m_bit_range;
    }
  
*************** public:
*** 367,372 ****
--- 386,396 ----
  
    static int cmp_ptr_ptr (const void *, const void *);
  
+   void mark_deleted () { m_bit_range.m_start_bit_offset = -1; }
+   void mark_empty () { m_bit_range.m_start_bit_offset = -2; }
+   bool is_deleted () const { return m_bit_range.m_start_bit_offset == -1; }
+   bool is_empty () const { return m_bit_range.m_start_bit_offset == -2; }
+ 
  private:
    bit_range m_bit_range;
  };
*************** private:
*** 376,382 ****
  template <> struct default_hash_traits<ana::concrete_binding>
  : public member_function_hash_traits<ana::concrete_binding>
  {
!   static const bool empty_zero_p = true;
  };
  
  namespace ana {
--- 400,406 ----
  template <> struct default_hash_traits<ana::concrete_binding>
  : public member_function_hash_traits<ana::concrete_binding>
  {
!   static const bool empty_zero_p = false;
  };
  
  namespace ana {
*************** public:
*** 390,418 ****
    /* This class is its own key for the purposes of consolidation.  */
    typedef symbolic_binding key_t;
  
!   symbolic_binding (const region *region, enum binding_kind kind)
!   : binding_key (kind),
!     m_region (region)
!   {}
    bool concrete_p () const FINAL OVERRIDE { return false; }
  
    hashval_t hash () const
    {
!     return (binding_key::impl_hash () ^ (intptr_t)m_region);
    }
    bool operator== (const symbolic_binding &other) const
    {
!     if (!binding_key::impl_eq (other))
!       return false;
!     return (m_region == other.m_region);
    }
  
    void dump_to_pp (pretty_printer *pp, bool simple) const FINAL OVERRIDE;
  
    const region *get_region () const { return m_region; }
  
    static int cmp_ptr_ptr (const void *, const void *);
  
  private:
    const region *m_region;
  };
--- 414,446 ----
    /* This class is its own key for the purposes of consolidation.  */
    typedef symbolic_binding key_t;
  
!   symbolic_binding (const region *region) : m_region (region) {}
    bool concrete_p () const FINAL OVERRIDE { return false; }
  
    hashval_t hash () const
    {
!     return (intptr_t)m_region;
    }
    bool operator== (const symbolic_binding &other) const
    {
!     return m_region == other.m_region;
    }
  
    void dump_to_pp (pretty_printer *pp, bool simple) const FINAL OVERRIDE;
  
+   const symbolic_binding *dyn_cast_symbolic_binding () const FINAL OVERRIDE
+   { return this; }
+ 
    const region *get_region () const { return m_region; }
  
    static int cmp_ptr_ptr (const void *, const void *);
  
+   void mark_deleted () { m_region = reinterpret_cast<const region *> (1); }
+   void mark_empty () { m_region = NULL; }
+   bool is_deleted () const
+   { return m_region == reinterpret_cast<const region *> (1); }
+   bool is_empty () const { return m_region == NULL; }
+ 
  private:
    const region *m_region;
  };
*************** public:
*** 479,485 ****
--- 507,520 ----
  
    static int cmp (const binding_map &map1, const binding_map &map2);
  
+   void remove_overlapping_bindings (store_manager *mgr,
+ 				    const binding_key *drop_key,
+ 				    uncertainty_t *uncertainty,
+ 				    bool always_overlap);
+ 
  private:
+   void get_overlapping_bindings (const binding_key *key,
+ 				 auto_vec<const binding_key *> *out);
    bool apply_ctor_val_to_range (const region *parent_reg,
  				region_model_manager *mgr,
  				tree min_index, tree max_index,
*************** public:
*** 525,549 ****
  
    bool symbolic_p () const;
  
    void dump_to_pp (pretty_printer *pp, bool simple, bool multiline) const;
    void dump (bool simple) const;
  
    json::object *to_json () const;
  
!   void bind (store_manager *mgr, const region *, const svalue *,
! 	     binding_kind kind);
  
    void clobber_region (store_manager *mgr, const region *reg);
    void purge_region (store_manager *mgr, const region *reg);
    void zero_fill_region (store_manager *mgr, const region *reg);
!   void mark_region_as_unknown (store_manager *mgr, const region *reg,
  			       uncertainty_t *uncertainty);
  
!   const svalue *get_binding (store_manager *mgr, const region *reg,
! 			      binding_kind kind) const;
    const svalue *get_binding_recursive (store_manager *mgr,
! 					const region *reg,
! 					enum binding_kind kind) const;
    const svalue *get_any_binding (store_manager *mgr,
  				  const region *reg) const;
    const svalue *maybe_get_compound_binding (store_manager *mgr,
--- 560,590 ----
  
    bool symbolic_p () const;
  
+   const region *get_base_region () const { return m_base_region; }
+ 
    void dump_to_pp (pretty_printer *pp, bool simple, bool multiline) const;
    void dump (bool simple) const;
  
+   void validate () const;
+ 
    json::object *to_json () const;
  
!   void bind (store_manager *mgr, const region *, const svalue *);
  
    void clobber_region (store_manager *mgr, const region *reg);
    void purge_region (store_manager *mgr, const region *reg);
+   void fill_region (store_manager *mgr, const region *reg, const svalue *sval);
    void zero_fill_region (store_manager *mgr, const region *reg);
!   void mark_region_as_unknown (store_manager *mgr,
! 			       const region *reg_to_bind,
! 			       const region *reg_for_overlap,
  			       uncertainty_t *uncertainty);
+   void purge_state_involving (const svalue *sval,
+ 			      region_model_manager *sval_mgr);
  
!   const svalue *get_binding (store_manager *mgr, const region *reg) const;
    const svalue *get_binding_recursive (store_manager *mgr,
! 					const region *reg) const;
    const svalue *get_any_binding (store_manager *mgr,
  				  const region *reg) const;
    const svalue *maybe_get_compound_binding (store_manager *mgr,
*************** public:
*** 571,577 ****
  				 store_manager *mgr);
  
    void mark_as_escaped ();
!   void on_unknown_fncall (const gcall *call, store_manager *mgr);
  
    bool escaped_p () const { return m_escaped; }
    bool touched_p () const { return m_touched; }
--- 612,621 ----
  				 store_manager *mgr);
  
    void mark_as_escaped ();
!   void on_unknown_fncall (const gcall *call, store_manager *mgr,
! 			  const conjured_purge &p);
!   void on_asm (const gasm *stmt, store_manager *mgr,
! 	       const conjured_purge &p);
  
    bool escaped_p () const { return m_escaped; }
    bool touched_p () const { return m_touched; }
*************** public:
*** 605,612 ****
  
  private:
    const svalue *get_any_value (const binding_key *key) const;
-   void get_overlapping_bindings (store_manager *mgr, const region *reg,
- 				 auto_vec<const binding_key *> *out);
    void bind_compound_sval (store_manager *mgr,
  			   const region *reg,
  			   const compound_svalue *compound_sval);
--- 649,654 ----
*************** public:
*** 659,664 ****
--- 701,708 ----
    void dump (bool simple) const;
    void summarize_to_pp (pretty_printer *pp, bool simple) const;
  
+   void validate () const;
+ 
    json::object *to_json () const;
  
    const svalue *get_any_binding (store_manager *mgr, const region *reg) const;
*************** public:
*** 666,678 ****
    bool called_unknown_fn_p () const { return m_called_unknown_fn; }
  
    void set_value (store_manager *mgr, const region *lhs_reg,
! 		  const svalue *rhs_sval, enum binding_kind kind,
  		  uncertainty_t *uncertainty);
    void clobber_region (store_manager *mgr, const region *reg);
    void purge_region (store_manager *mgr, const region *reg);
    void zero_fill_region (store_manager *mgr, const region *reg);
    void mark_region_as_unknown (store_manager *mgr, const region *reg,
  			       uncertainty_t *uncertainty);
  
    const binding_cluster *get_cluster (const region *base_reg) const;
    binding_cluster *get_cluster (const region *base_reg);
--- 710,725 ----
    bool called_unknown_fn_p () const { return m_called_unknown_fn; }
  
    void set_value (store_manager *mgr, const region *lhs_reg,
! 		  const svalue *rhs_sval,
  		  uncertainty_t *uncertainty);
    void clobber_region (store_manager *mgr, const region *reg);
    void purge_region (store_manager *mgr, const region *reg);
+   void fill_region (store_manager *mgr, const region *reg, const svalue *sval);
    void zero_fill_region (store_manager *mgr, const region *reg);
    void mark_region_as_unknown (store_manager *mgr, const region *reg,
  			       uncertainty_t *uncertainty);
+   void purge_state_involving (const svalue *sval,
+ 			      region_model_manager *sval_mgr);
  
    const binding_cluster *get_cluster (const region *base_reg) const;
    binding_cluster *get_cluster (const region *base_reg);
*************** public:
*** 693,699 ****
  			   model_merger *merger);
  
    void mark_as_escaped (const region *base_reg);
!   void on_unknown_fncall (const gcall *call, store_manager *mgr);
    bool escaped_p (const region *reg) const;
  
    void get_representative_path_vars (const region_model *model,
--- 740,747 ----
  			   model_merger *merger);
  
    void mark_as_escaped (const region *base_reg);
!   void on_unknown_fncall (const gcall *call, store_manager *mgr,
! 			  const conjured_purge &p);
    bool escaped_p (const region *reg) const;
  
    void get_representative_path_vars (const region_model *model,
*************** public:
*** 720,726 ****
  			  region_model_manager *mgr);
  
  private:
!   void remove_overlapping_bindings (store_manager *mgr, const region *reg);
    tristate eval_alias_1 (const region *base_reg_a,
  			 const region *base_reg_b) const;
  
--- 768,775 ----
  			  region_model_manager *mgr);
  
  private:
!   void remove_overlapping_bindings (store_manager *mgr, const region *reg,
! 				    uncertainty_t *uncertainty);
    tristate eval_alias_1 (const region *base_reg_a,
  			 const region *base_reg_b) const;
  
*************** class store_manager
*** 745,766 ****
  public:
    store_manager (region_model_manager *mgr) : m_mgr (mgr) {}
  
    /* binding consolidation.  */
    const concrete_binding *
    get_concrete_binding (bit_offset_t start_bit_offset,
! 			bit_offset_t size_in_bits,
! 			enum binding_kind kind);
    const concrete_binding *
!   get_concrete_binding (const bit_range &bits,
! 			enum binding_kind kind)
    {
      return get_concrete_binding (bits.get_start_bit_offset (),
! 				 bits.m_size_in_bits,
! 				 kind);
    }
    const symbolic_binding *
!   get_symbolic_binding (const region *region,
! 			enum binding_kind kind);
  
    region_model_manager *get_svalue_manager () const
    {
--- 794,813 ----
  public:
    store_manager (region_model_manager *mgr) : m_mgr (mgr) {}
  
+   logger *get_logger () const;
+ 
    /* binding consolidation.  */
    const concrete_binding *
    get_concrete_binding (bit_offset_t start_bit_offset,
! 			bit_offset_t size_in_bits);
    const concrete_binding *
!   get_concrete_binding (const bit_range &bits)
    {
      return get_concrete_binding (bits.get_start_bit_offset (),
! 				 bits.m_size_in_bits);
    }
    const symbolic_binding *
!   get_symbolic_binding (const region *region);
  
    region_model_manager *get_svalue_manager () const
    {
diff -Nrcpad gcc-11.3.0/gcc/analyzer/supergraph.cc gcc-12.1.0/gcc/analyzer/supergraph.cc
*** gcc-11.3.0/gcc/analyzer/supergraph.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/supergraph.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* "Supergraph" classes that combine CFGs and callgraph into one digraph.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* "Supergraph" classes that combine CFGs and callgraph into one digraph.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 41,46 ****
--- 41,47 ----
  #include "graphviz.h"
  #include "cgraph.h"
  #include "tree-dfa.h"
+ #include "bitmap.h"
  #include "cfganal.h"
  #include "function.h"
  #include "json.h"
*************** along with GCC; see the file COPYING3.
*** 50,55 ****
--- 51,57 ----
  #include "cgraph.h"
  #include "cfg.h"
  #include "digraph.h"
+ #include "tree-cfg.h"
  #include "analyzer/supergraph.h"
  #include "analyzer/analyzer-logging.h"
  
*************** supergraph::supergraph (logger *logger)
*** 183,193 ****
  	      m_stmt_to_node_t.put (stmt, node_for_stmts);
  	      m_stmt_uids.make_uid_unique (stmt);
  	      if (cgraph_edge *edge = supergraph_call_edge (fun, stmt))
! 		{
! 		  m_cgraph_edge_to_caller_prev_node.put(edge, node_for_stmts);
! 		  node_for_stmts = add_node (fun, bb, as_a <gcall *> (stmt), NULL);
! 		  m_cgraph_edge_to_caller_next_node.put (edge, node_for_stmts);
! 		}
  	    }
  
  	  m_bb_to_final_node.put (bb, node_for_stmts);
--- 185,217 ----
  	      m_stmt_to_node_t.put (stmt, node_for_stmts);
  	      m_stmt_uids.make_uid_unique (stmt);
  	      if (cgraph_edge *edge = supergraph_call_edge (fun, stmt))
!     		{
!     		  m_cgraph_edge_to_caller_prev_node.put(edge, node_for_stmts);
!     		  node_for_stmts = add_node (fun, bb, as_a <gcall *> (stmt),
!     		   			     NULL);
!     		  m_cgraph_edge_to_caller_next_node.put (edge, node_for_stmts);
!     		}
! 	       else
! 	        {
! 	          // maybe call is via a function pointer
! 	          if (gcall *call = dyn_cast<gcall *> (stmt))
! 	          {
! 	            cgraph_edge *edge 
! 		      = cgraph_node::get (fun->decl)->get_edge (stmt);
! 	            if (!edge || !edge->callee)
! 	            {
! 	              supernode *old_node_for_stmts = node_for_stmts;
! 	              node_for_stmts = add_node (fun, bb, call, NULL);
! 
! 	              superedge *sedge 
! 	                = new callgraph_superedge (old_node_for_stmts,
! 	                  			   node_for_stmts,
! 	                  			   SUPEREDGE_INTRAPROCEDURAL_CALL,
! 	                  			   NULL);
! 	              add_edge (sedge);
! 	            }
! 	          }
! 	        }
  	    }
  
  	  m_bb_to_final_node.put (bb, node_for_stmts);
*************** supergraph::supergraph (logger *logger)
*** 224,230 ****
  	      supernode *dest_supernode
  		= *m_bb_to_initial_node.get (dest_cfg_block);
  	      cfg_superedge *cfg_sedge
! 		= add_cfg_edge (src_supernode, dest_supernode, cfg_edge, idx);
  	      m_cfg_edge_to_cfg_superedge.put (cfg_edge, cfg_sedge);
  	    }
        }
--- 248,254 ----
  	      supernode *dest_supernode
  		= *m_bb_to_initial_node.get (dest_cfg_block);
  	      cfg_superedge *cfg_sedge
! 		= add_cfg_edge (src_supernode, dest_supernode, cfg_edge);
  	      m_cfg_edge_to_cfg_superedge.put (cfg_edge, cfg_sedge);
  	    }
        }
*************** supergraph::add_node (function *fun, bas
*** 483,499 ****
     adding it to this supergraph.
  
     If the edge is for a switch statement, create a switch_cfg_superedge
!    subclass using IDX (the index of E within the out-edges from SRC's
!    underlying basic block).  */
  
  cfg_superedge *
! supergraph::add_cfg_edge (supernode *src, supernode *dest, ::edge e, int idx)
  {
    /* Special-case switch edges.  */
    gimple *stmt = src->get_last_stmt ();
    cfg_superedge *new_edge;
    if (stmt && stmt->code == GIMPLE_SWITCH)
!     new_edge = new switch_cfg_superedge (src, dest, e, idx);
    else
      new_edge = new cfg_superedge (src, dest, e);
    add_edge (new_edge);
--- 507,522 ----
     adding it to this supergraph.
  
     If the edge is for a switch statement, create a switch_cfg_superedge
!    subclass.  */
  
  cfg_superedge *
! supergraph::add_cfg_edge (supernode *src, supernode *dest, ::edge e)
  {
    /* Special-case switch edges.  */
    gimple *stmt = src->get_last_stmt ();
    cfg_superedge *new_edge;
    if (stmt && stmt->code == GIMPLE_SWITCH)
!     new_edge = new switch_cfg_superedge (src, dest, e);
    else
      new_edge = new cfg_superedge (src, dest, e);
    add_edge (new_edge);
*************** superedge::dump_dot (graphviz_out *gv, c
*** 882,888 ****
        break;
      }
  
!   /* Adapted from graph.c:draw_cfg_node_succ_edges.  */
    if (::edge cfg_edge = get_any_cfg_edge ())
      {
        if (cfg_edge->flags & EDGE_FAKE)
--- 905,911 ----
        break;
      }
  
!   /* Adapted from graph.cc:draw_cfg_node_succ_edges.  */
    if (::edge cfg_edge = get_any_cfg_edge ())
      {
        if (cfg_edge->flags & EDGE_FAKE)
*************** cfg_superedge::dump_label_to_pp (pretty_
*** 1032,1046 ****
    /* Otherwise, no label.  */
  }
  
  /* Get the phi argument for PHI for this CFG edge.  */
  
  tree
  cfg_superedge::get_phi_arg (const gphi *phi) const
  {
!   size_t index = m_cfg_edge->dest_idx;
    return gimple_phi_arg_def (phi, index);
  }
  
  /* Implementation of superedge::dump_label_to_pp for CFG superedges for
     "switch" statements.
  
--- 1055,1095 ----
    /* Otherwise, no label.  */
  }
  
+ /* Get the index number for this edge for use in phi stmts
+    in its destination.  */
+ 
+ size_t
+ cfg_superedge::get_phi_arg_idx () const
+ {
+   return m_cfg_edge->dest_idx;
+ }
+ 
  /* Get the phi argument for PHI for this CFG edge.  */
  
  tree
  cfg_superedge::get_phi_arg (const gphi *phi) const
  {
!   size_t index = get_phi_arg_idx ();
    return gimple_phi_arg_def (phi, index);
  }
  
+ switch_cfg_superedge::switch_cfg_superedge (supernode *src,
+ 					    supernode *dst,
+ 					    ::edge e)
+ : cfg_superedge (src, dst, e)
+ {
+   /* Populate m_case_labels with all cases which go to DST.  */
+   const gswitch *gswitch = get_switch_stmt ();
+   for (unsigned i = 0; i < gimple_switch_num_labels (gswitch); i++)
+     {
+       tree case_ = gimple_switch_label (gswitch, i);
+       basic_block bb = label_to_block (src->get_function (),
+ 				       CASE_LABEL (case_));
+       if (bb == dst->m_bb)
+ 	m_case_labels.safe_push (case_);
+     }
+ }
+ 
  /* Implementation of superedge::dump_label_to_pp for CFG superedges for
     "switch" statements.
  
*************** void
*** 1050,1080 ****
  switch_cfg_superedge::dump_label_to_pp (pretty_printer *pp,
  					bool user_facing ATTRIBUTE_UNUSED) const
  {
!   tree case_label = get_case_label ();
!   gcc_assert (TREE_CODE (case_label) == CASE_LABEL_EXPR);
!   tree lower_bound = CASE_LOW (case_label);
!   tree upper_bound = CASE_HIGH (case_label);
!   if (lower_bound)
      {
!       pp_printf (pp, "case ");
!       dump_generic_node (pp, lower_bound, 0, (dump_flags_t)0, false);
!       if (upper_bound)
  	{
! 	  pp_printf (pp, " ... ");
! 	  dump_generic_node (pp, upper_bound, 0, (dump_flags_t)0, false);
  	}
-       pp_printf (pp, ":");
      }
    else
!     pp_printf (pp, "default:");
! }
! 
! /* Get the case label for this "switch" superedge.  */
! 
! tree
! switch_cfg_superedge::get_case_label () const
! {
!   return gimple_switch_label (get_switch_stmt (), m_idx);
  }
  
  /* Implementation of superedge::dump_label_to_pp for interprocedural
--- 1099,1161 ----
  switch_cfg_superedge::dump_label_to_pp (pretty_printer *pp,
  					bool user_facing ATTRIBUTE_UNUSED) const
  {
!   if (user_facing)
      {
!       for (unsigned i = 0; i < m_case_labels.length (); ++i)
  	{
! 	  if (i > 0)
! 	    pp_string (pp, ", ");
! 	  tree case_label = m_case_labels[i];
! 	  gcc_assert (TREE_CODE (case_label) == CASE_LABEL_EXPR);
! 	  tree lower_bound = CASE_LOW (case_label);
! 	  tree upper_bound = CASE_HIGH (case_label);
! 	  if (lower_bound)
! 	    {
! 	      pp_printf (pp, "case ");
! 	      dump_generic_node (pp, lower_bound, 0, (dump_flags_t)0, false);
! 	      if (upper_bound)
! 		{
! 		  pp_printf (pp, " ... ");
! 		  dump_generic_node (pp, upper_bound, 0, (dump_flags_t)0,
! 				     false);
! 		}
! 	      pp_printf (pp, ":");
! 	    }
! 	  else
! 	    pp_printf (pp, "default:");
  	}
      }
    else
!     {
!       pp_character (pp, '{');
!       for (unsigned i = 0; i < m_case_labels.length (); ++i)
! 	{
! 	  if (i > 0)
! 	    pp_string (pp, ", ");
! 	  tree case_label = m_case_labels[i];
! 	  gcc_assert (TREE_CODE (case_label) == CASE_LABEL_EXPR);
! 	  tree lower_bound = CASE_LOW (case_label);
! 	  tree upper_bound = CASE_HIGH (case_label);
! 	  if (lower_bound)
! 	    {
! 	      if (upper_bound)
! 		{
! 		  pp_character (pp, '[');
! 		  dump_generic_node (pp, lower_bound, 0, (dump_flags_t)0,
! 				     false);
! 		  pp_string (pp, ", ");
! 		  dump_generic_node (pp, upper_bound, 0, (dump_flags_t)0,
! 				     false);
! 		  pp_character (pp, ']');
! 		}
! 	      else
! 		dump_generic_node (pp, lower_bound, 0, (dump_flags_t)0, false);
! 	    }
! 	  else
! 	    pp_printf (pp, "default");
! 	}
!       pp_character (pp, '}');
!     }
  }
  
  /* Implementation of superedge::dump_label_to_pp for interprocedural
*************** callgraph_superedge::get_callee_decl ()
*** 1130,1135 ****
--- 1211,1227 ----
    return get_callee_function ()->decl;
  }
  
+ /* Get the gcall * of this interprocedural call/return edge.  */
+ 
+ gcall *
+ callgraph_superedge::get_call_stmt () const
+ {
+   if (m_cedge)
+     return m_cedge->call_stmt;
+   
+   return m_src->get_final_call ();
+ }
+ 
  /* Get the calling fndecl at this interprocedural call/return edge.  */
  
  tree
diff -Nrcpad gcc-11.3.0/gcc/analyzer/supergraph.h gcc-12.1.0/gcc/analyzer/supergraph.h
*** gcc-11.3.0/gcc/analyzer/supergraph.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/supergraph.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* "Supergraph" classes that combine CFGs and callgraph into one digraph.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* "Supergraph" classes that combine CFGs and callgraph into one digraph.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** public:
*** 181,187 ****
  private:
    supernode *add_node (function *fun, basic_block bb, gcall *returning_call,
  		       gimple_seq phi_nodes);
!   cfg_superedge *add_cfg_edge (supernode *src, supernode *dest, ::edge e, int idx);
    call_superedge *add_call_superedge (supernode *src, supernode *dest,
  				      cgraph_edge *cedge);
    return_superedge *add_return_superedge (supernode *src, supernode *dest,
--- 181,187 ----
  private:
    supernode *add_node (function *fun, basic_block bb, gcall *returning_call,
  		       gimple_seq phi_nodes);
!   cfg_superedge *add_cfg_edge (supernode *src, supernode *dest, ::edge e);
    call_superedge *add_call_superedge (supernode *src, supernode *dest,
  				      cgraph_edge *cedge);
    return_superedge *add_return_superedge (supernode *src, supernode *dest,
*************** class supernode : public dnode<supergrap
*** 268,273 ****
--- 268,278 ----
      return i;
    }
  
+   gcall *get_returning_call () const
+   {
+     return m_returning_call;
+   }
+ 
    gimple *get_last_stmt () const
    {
      if (m_stmts.length () == 0)
*************** class callgraph_superedge : public super
*** 400,406 ****
    function *get_caller_function () const;
    tree get_callee_decl () const;
    tree get_caller_decl () const;
!   gcall *get_call_stmt () const { return m_cedge->call_stmt; }
    tree get_arg_for_parm (tree parm, callsite_expr *out) const;
    tree get_parm_for_arg (tree arg, callsite_expr *out) const;
    tree map_expr_from_caller_to_callee (tree caller_expr,
--- 405,411 ----
    function *get_caller_function () const;
    tree get_callee_decl () const;
    tree get_caller_decl () const;
!   gcall *get_call_stmt () const;
    tree get_arg_for_parm (tree parm, callsite_expr *out) const;
    tree get_parm_for_arg (tree arg, callsite_expr *out) const;
    tree map_expr_from_caller_to_callee (tree caller_expr,
*************** class cfg_superedge : public superedge
*** 514,519 ****
--- 519,525 ----
    int false_value_p () const { return get_flags () & EDGE_FALSE_VALUE; }
    int back_edge_p () const { return get_flags () & EDGE_DFS_BACK; }
  
+   size_t get_phi_arg_idx () const;
    tree get_phi_arg (const gphi *phi) const;
  
   private:
*************** is_a_helper <const cfg_superedge *>::tes
*** 533,547 ****
  namespace ana {
  
  /* A subclass for edges from switch statements, retaining enough
!    information to identify the pertinent case, and for adding labels
     when rendering via graphviz.  */
  
  class switch_cfg_superedge : public cfg_superedge {
   public:
!   switch_cfg_superedge (supernode *src, supernode *dst, ::edge e, int idx)
!   : cfg_superedge (src, dst, e),
!     m_idx (idx)
!   {}
  
    const switch_cfg_superedge *dyn_cast_switch_cfg_superedge () const
      FINAL OVERRIDE
--- 539,550 ----
  namespace ana {
  
  /* A subclass for edges from switch statements, retaining enough
!    information to identify the pertinent cases, and for adding labels
     when rendering via graphviz.  */
  
  class switch_cfg_superedge : public cfg_superedge {
   public:
!   switch_cfg_superedge (supernode *src, supernode *dst, ::edge e);
  
    const switch_cfg_superedge *dyn_cast_switch_cfg_superedge () const
      FINAL OVERRIDE
*************** class switch_cfg_superedge : public cfg_
*** 557,566 ****
      return as_a <gswitch *> (m_src->get_last_stmt ());
    }
  
!   tree get_case_label () const;
  
!  private:
!   const int m_idx;
  };
  
  } // namespace ana
--- 560,569 ----
      return as_a <gswitch *> (m_src->get_last_stmt ());
    }
  
!   const vec<tree> &get_case_labels () const { return m_case_labels; }
  
! private:
!   auto_vec<tree> m_case_labels;
  };
  
  } // namespace ana
diff -Nrcpad gcc-11.3.0/gcc/analyzer/svalue.cc gcc-12.1.0/gcc/analyzer/svalue.cc
*** gcc-11.3.0/gcc/analyzer/svalue.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/svalue.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Symbolic values.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Symbolic values.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** along with GCC; see the file COPYING3.
*** 59,64 ****
--- 59,66 ----
  
  namespace ana {
  
+ static int cmp_csts_and_types (const_tree cst1, const_tree cst2);
+ 
  /* class svalue and its various subclasses.  */
  
  /* class svalue.  */
*************** svalue::to_json () const
*** 105,116 ****
  tree
  svalue::maybe_get_constant () const
  {
!   if (const constant_svalue *cst_sval = dyn_cast_constant_svalue ())
      return cst_sval->get_constant ();
    else
      return NULL_TREE;
  }
  
  /* If this svalue is a cast (i.e a unaryop NOP_EXPR or VIEW_CONVERT_EXPR),
     return the underlying svalue.
     Otherwise return NULL.  */
--- 107,131 ----
  tree
  svalue::maybe_get_constant () const
  {
!   const svalue *sval = unwrap_any_unmergeable ();
!   if (const constant_svalue *cst_sval = sval->dyn_cast_constant_svalue ())
      return cst_sval->get_constant ();
    else
      return NULL_TREE;
  }
  
+ /* If this svalue is a region_svalue, return the region it points to.
+    Otherwise return NULL.  */
+ 
+ const region *
+ svalue::maybe_get_region () const
+ {
+   if (const region_svalue *region_sval = dyn_cast_region_svalue ())
+     return region_sval->get_pointee ();
+   else
+     return NULL;
+ }
+ 
  /* If this svalue is a cast (i.e a unaryop NOP_EXPR or VIEW_CONVERT_EXPR),
     return the underlying svalue.
     Otherwise return NULL.  */
*************** svalue::can_merge_p (const svalue *other
*** 158,163 ****
--- 173,185 ----
        || (other->get_kind () == SK_UNMERGEABLE))
      return NULL;
  
+   /* Reject attempts to merge poisoned svalues with other svalues
+      (either non-poisoned, or other kinds of poison), so that e.g.
+      we identify paths in which a variable is conditionally uninitialized.  */
+   if (get_kind () == SK_POISONED
+       || other->get_kind () == SK_POISONED)
+     return NULL;
+ 
    /* Reject attempts to merge NULL pointers with not-NULL-pointers.  */
    if (POINTER_TYPE_P (get_type ()))
      {
*************** svalue::can_merge_p (const svalue *other
*** 173,178 ****
--- 195,208 ----
  	return NULL;
      }
  
+   /* Reject merging svalues that have non-purgable sm-state,
+      to avoid falsely reporting memory leaks by merging them
+      with something else.  */
+   if (!merger->mergeable_svalue_p (this))
+     return NULL;
+   if (!merger->mergeable_svalue_p (other))
+     return NULL;
+ 
    /* Widening.  */
    /* Merge: (new_cst, existing_cst) -> widen (existing, new).  */
    if (maybe_get_constant () && other->maybe_get_constant ())
*************** svalue::implicitly_live_p (const svalue_
*** 276,282 ****
     of the same type.  */
  
  static int
! cmp_cst (const_tree cst1, const_tree cst2)
  {
    gcc_assert (TREE_TYPE (cst1) == TREE_TYPE (cst2));
    gcc_assert (TREE_CODE (cst1) == TREE_CODE (cst2));
--- 306,312 ----
     of the same type.  */
  
  static int
! cmp_csts_same_type (const_tree cst1, const_tree cst2)
  {
    gcc_assert (TREE_TYPE (cst1) == TREE_TYPE (cst2));
    gcc_assert (TREE_CODE (cst1) == TREE_CODE (cst2));
*************** cmp_cst (const_tree cst1, const_tree cst
*** 295,303 ****
  		     TREE_REAL_CST_PTR (cst2),
  		     sizeof (real_value));
      case COMPLEX_CST:
!       if (int cmp_real = cmp_cst (TREE_REALPART (cst1), TREE_REALPART (cst2)))
  	return cmp_real;
!       return cmp_cst (TREE_IMAGPART (cst1), TREE_IMAGPART (cst2));
      case VECTOR_CST:
        if (int cmp_log2_npatterns
  	    = ((int)VECTOR_CST_LOG2_NPATTERNS (cst1)
--- 325,334 ----
  		     TREE_REAL_CST_PTR (cst2),
  		     sizeof (real_value));
      case COMPLEX_CST:
!       if (int cmp_real = cmp_csts_and_types (TREE_REALPART (cst1),
! 					     TREE_REALPART (cst2)))
  	return cmp_real;
!       return cmp_csts_and_types (TREE_IMAGPART (cst1), TREE_IMAGPART (cst2));
      case VECTOR_CST:
        if (int cmp_log2_npatterns
  	    = ((int)VECTOR_CST_LOG2_NPATTERNS (cst1)
*************** cmp_cst (const_tree cst1, const_tree cst
*** 309,321 ****
  	return cmp_nelts_per_pattern;
        unsigned encoded_nelts = vector_cst_encoded_nelts (cst1);
        for (unsigned i = 0; i < encoded_nelts; i++)
! 	if (int el_cmp = cmp_cst (VECTOR_CST_ENCODED_ELT (cst1, i),
! 				  VECTOR_CST_ENCODED_ELT (cst2, i)))
! 	  return el_cmp;
        return 0;
      }
  }
  
  /* Comparator for imposing a deterministic order on svalues.  */
  
  int
--- 340,368 ----
  	return cmp_nelts_per_pattern;
        unsigned encoded_nelts = vector_cst_encoded_nelts (cst1);
        for (unsigned i = 0; i < encoded_nelts; i++)
! 	{
! 	  const_tree elt1 = VECTOR_CST_ENCODED_ELT (cst1, i);
! 	  const_tree elt2 = VECTOR_CST_ENCODED_ELT (cst2, i);
! 	  if (int el_cmp = cmp_csts_and_types (elt1, elt2))
! 	    return el_cmp;
! 	}
        return 0;
      }
  }
  
+ /* Comparator for imposing a deterministic order on constants that might
+    not be of the same type.  */
+ 
+ static int
+ cmp_csts_and_types (const_tree cst1, const_tree cst2)
+ {
+   int t1 = TYPE_UID (TREE_TYPE (cst1));
+   int t2 = TYPE_UID (TREE_TYPE (cst2));
+   if (int cmp_type = t1 - t2)
+     return cmp_type;
+   return cmp_csts_same_type (cst1, cst2);
+ }
+ 
  /* Comparator for imposing a deterministic order on svalues.  */
  
  int
*************** svalue::cmp_ptr (const svalue *sval1, co
*** 347,353 ****
  	const constant_svalue *constant_sval2 = (const constant_svalue *)sval2;
  	const_tree cst1 = constant_sval1->get_constant ();
  	const_tree cst2 = constant_sval2->get_constant ();
! 	return cmp_cst (cst1, cst2);
        }
        break;
      case SK_UNKNOWN:
--- 394,400 ----
  	const constant_svalue *constant_sval2 = (const constant_svalue *)sval2;
  	const_tree cst1 = constant_sval1->get_constant ();
  	const_tree cst2 = constant_sval2->get_constant ();
! 	return cmp_csts_same_type (cst1, cst2);
        }
        break;
      case SK_UNKNOWN:
*************** svalue::cmp_ptr (const svalue *sval1, co
*** 415,420 ****
--- 462,488 ----
  				sub_sval2->get_subregion ());
        }
        break;
+     case SK_REPEATED:
+       {
+ 	const repeated_svalue *repeated_sval1 = (const repeated_svalue *)sval1;
+ 	const repeated_svalue *repeated_sval2 = (const repeated_svalue *)sval2;
+ 	return svalue::cmp_ptr (repeated_sval1->get_inner_svalue (),
+ 				repeated_sval2->get_inner_svalue ());
+       }
+       break;
+     case SK_BITS_WITHIN:
+       {
+ 	const bits_within_svalue *bits_within_sval1
+ 	  = (const bits_within_svalue *)sval1;
+ 	const bits_within_svalue *bits_within_sval2
+ 	  = (const bits_within_svalue *)sval2;
+ 	if (int cmp = bit_range::cmp (bits_within_sval1->get_bits (),
+ 				       bits_within_sval2->get_bits ()))
+ 	  return cmp;
+ 	return svalue::cmp_ptr (bits_within_sval1->get_inner_svalue (),
+ 				bits_within_sval2->get_inner_svalue ());
+       }
+       break;
      case SK_UNMERGEABLE:
        {
  	const unmergeable_svalue *unmergeable_sval1
*************** svalue::cmp_ptr (const svalue *sval1, co
*** 468,473 ****
--- 536,584 ----
  				conjured_sval2->get_id_region ());
        }
        break;
+     case SK_ASM_OUTPUT:
+       {
+ 	const asm_output_svalue *asm_output_sval1
+ 	  = (const asm_output_svalue *)sval1;
+ 	const asm_output_svalue *asm_output_sval2
+ 	  = (const asm_output_svalue *)sval2;
+ 	if (int asm_string_cmp = strcmp (asm_output_sval1->get_asm_string (),
+ 					 asm_output_sval2->get_asm_string ()))
+ 	  return asm_string_cmp;
+ 	if (int output_idx_cmp = ((int)asm_output_sval1->get_output_idx ()
+ 				  - (int)asm_output_sval2->get_output_idx ()))
+ 	  return output_idx_cmp;
+ 	if (int cmp = ((int)asm_output_sval1->get_num_inputs ()
+ 		       - (int)asm_output_sval2->get_num_inputs ()))
+ 	  return cmp;
+ 	for (unsigned i = 0; i < asm_output_sval1->get_num_inputs (); i++)
+ 	  if (int input_cmp
+ 	      = svalue::cmp_ptr (asm_output_sval1->get_input (i),
+ 				 asm_output_sval2->get_input (i)))
+ 	    return input_cmp;
+ 	return 0;
+       }
+       break;
+     case SK_CONST_FN_RESULT:
+       {
+ 	const const_fn_result_svalue *const_fn_result_sval1
+ 	  = (const const_fn_result_svalue *)sval1;
+ 	const const_fn_result_svalue *const_fn_result_sval2
+ 	  = (const const_fn_result_svalue *)sval2;
+ 	int d1 = DECL_UID (const_fn_result_sval1->get_fndecl ());
+ 	int d2 = DECL_UID (const_fn_result_sval2->get_fndecl ());
+ 	if (int cmp_fndecl = d1 - d2)
+ 	  return cmp_fndecl;
+ 	if (int cmp = ((int)const_fn_result_sval1->get_num_inputs ()
+ 		       - (int)const_fn_result_sval2->get_num_inputs ()))
+ 	  return cmp;
+ 	for (unsigned i = 0; i < const_fn_result_sval1->get_num_inputs (); i++)
+ 	  if (int input_cmp
+ 	      = svalue::cmp_ptr (const_fn_result_sval1->get_input (i),
+ 				 const_fn_result_sval2->get_input (i)))
+ 	    return input_cmp;
+ 	return 0;
+       }
      }
  }
  
*************** public:
*** 495,500 ****
--- 606,617 ----
        m_found = true;
    }
  
+   void visit_conjured_svalue (const conjured_svalue *candidate)
+   {
+     if (candidate == m_needle)
+       m_found = true;
+   }
+ 
    bool found_p () const { return m_found; }
  
  private:
*************** private:
*** 507,520 ****
  bool
  svalue::involves_p (const svalue *other) const
  {
!   /* Currently only implemented for initial_svalue.  */
!   gcc_assert (other->get_kind () == SK_INITIAL);
  
    involvement_visitor v (other);
    accept (&v);
    return v.found_p ();
  }
  
  /* class region_svalue : public svalue.  */
  
  /* Implementation of svalue::dump_to_pp vfunc for region_svalue.  */
--- 624,710 ----
  bool
  svalue::involves_p (const svalue *other) const
  {
!   /* Currently only implemented for these kinds.  */
!   gcc_assert (other->get_kind () == SK_INITIAL
! 	      || other->get_kind () == SK_CONJURED);
  
    involvement_visitor v (other);
    accept (&v);
    return v.found_p ();
  }
  
+ /* Extract SUBRANGE from this value, of type TYPE.  */
+ 
+ const svalue *
+ svalue::extract_bit_range (tree type,
+ 			   const bit_range &subrange,
+ 			   region_model_manager *mgr) const
+ {
+   return mgr->get_or_create_bits_within (type, subrange, this);
+ }
+ 
+ /* Base implementation of svalue::maybe_fold_bits_within vfunc.  */
+ 
+ const svalue *
+ svalue::maybe_fold_bits_within (tree,
+ 				const bit_range &,
+ 				region_model_manager *) const
+ {
+   /* By default, don't fold.  */
+   return NULL;
+ }
+ 
+ /* Base implementation of svalue::all_zeroes_p.
+    Return true if this value is known to be all zeroes.  */
+ 
+ bool
+ svalue::all_zeroes_p () const
+ {
+   return false;
+ }
+ 
+ /* If this svalue is a pointer, attempt to determine the base region it points
+    to.  Return NULL on any problems.  */
+ 
+ const region *
+ svalue::maybe_get_deref_base_region () const
+ {
+   const svalue *iter = this;
+   while (1)
+     {
+       switch (iter->get_kind ())
+ 	{
+ 	default:
+ 	  return NULL;
+ 
+ 	case SK_REGION:
+ 	  {
+ 	    const region_svalue *region_sval
+ 	      = as_a <const region_svalue *> (iter);
+ 	    return region_sval->get_pointee ()->get_base_region ();
+ 	  }
+ 
+ 	case SK_BINOP:
+ 	  {
+ 	    const binop_svalue *binop_sval
+ 	      = as_a <const binop_svalue *> (iter);
+ 	    switch (binop_sval->get_op ())
+ 	      {
+ 	      case POINTER_PLUS_EXPR:
+ 		/* If we have a symbolic value expressing pointer arithmetic,
+ 		   use the LHS.  */
+ 		iter = binop_sval->get_arg0 ();
+ 		continue;
+ 
+ 	      default:
+ 		return NULL;
+ 	      }
+ 	    return NULL;
+ 	  }
+ 	}
+     }
+ }
+ 
  /* class region_svalue : public svalue.  */
  
  /* Implementation of svalue::dump_to_pp vfunc for region_svalue.  */
*************** constant_svalue::eval_condition (const c
*** 680,685 ****
--- 870,903 ----
    return tristate::TS_UNKNOWN;
  }
  
+ /* Implementation of svalue::maybe_fold_bits_within vfunc
+    for constant_svalue.  */
+ 
+ const svalue *
+ constant_svalue::maybe_fold_bits_within (tree type,
+ 					 const bit_range &,
+ 					 region_model_manager *mgr) const
+ {
+   /* Bits within an all-zero value are also all zero.  */
+   if (zerop (m_cst_expr))
+     {
+       if (type)
+ 	return mgr->get_or_create_cast (type, this);
+       else
+ 	return this;
+     }
+   /* Otherwise, don't fold.  */
+   return NULL;
+ }
+ 
+ /* Implementation of svalue::all_zeroes_p for constant_svalue.  */
+ 
+ bool
+ constant_svalue::all_zeroes_p () const
+ {
+   return zerop (m_cst_expr);
+ }
+ 
  /* class unknown_svalue : public svalue.  */
  
  /* Implementation of svalue::dump_to_pp vfunc for unknown_svalue.  */
*************** unknown_svalue::accept (visitor *v) cons
*** 711,716 ****
--- 929,946 ----
    v->visit_unknown_svalue (this);
  }
  
+ /* Implementation of svalue::maybe_fold_bits_within vfunc
+    for unknown_svalue.  */
+ 
+ const svalue *
+ unknown_svalue::maybe_fold_bits_within (tree type,
+ 					const bit_range &,
+ 					region_model_manager *mgr) const
+ {
+   /* Bits within an unknown_svalue are themselves unknown.  */
+   return mgr->get_or_create_unknown_svalue (type);
+ }
+ 
  /* Get a string for KIND for use in debug dumps.  */
  
  const char *
*************** poison_kind_to_str (enum poison_kind kin
*** 720,725 ****
--- 950,957 ----
      {
      default:
        gcc_unreachable ();
+     case POISON_KIND_UNINIT:
+       return "uninit";
      case POISON_KIND_FREED:
        return "freed";
      case POISON_KIND_POPPED_STACK:
*************** poisoned_svalue::accept (visitor *v) con
*** 756,761 ****
--- 988,1005 ----
    v->visit_poisoned_svalue (this);
  }
  
+ /* Implementation of svalue::maybe_fold_bits_within vfunc
+    for poisoned_svalue.  */
+ 
+ const svalue *
+ poisoned_svalue::maybe_fold_bits_within (tree type,
+ 					 const bit_range &,
+ 					 region_model_manager *mgr) const
+ {
+   /* Bits within a poisoned value are also poisoned.  */
+   return mgr->get_or_create_poisoned_svalue (m_kind, type);
+ }
+ 
  /* class setjmp_svalue's implementation is in engine.cc, so that it can use
     the declaration of exploded_node.  */
  
*************** initial_svalue::implicitly_live_p (const
*** 805,811 ****
       a popped stack frame.  */
    if (model->region_exists_p (m_reg))
      {
!       const svalue *reg_sval = model->get_store_value (m_reg);
        if (reg_sval == this)
  	return true;
      }
--- 1049,1055 ----
       a popped stack frame.  */
    if (model->region_exists_p (m_reg))
      {
!       const svalue *reg_sval = model->get_store_value (m_reg, NULL);
        if (reg_sval == this)
  	return true;
      }
*************** unaryop_svalue::implicitly_live_p (const
*** 892,899 ****
--- 1136,1186 ----
    return get_arg ()->live_p (live_svalues, model);
  }
  
+ /* Implementation of svalue::maybe_fold_bits_within vfunc
+    for unaryop_svalue.  */
+ 
+ const svalue *
+ unaryop_svalue::maybe_fold_bits_within (tree type,
+ 					const bit_range &,
+ 					region_model_manager *mgr) const
+ {
+   switch (m_op)
+     {
+     default:
+       break;
+     case NOP_EXPR:
+       /* A cast of zero is zero.  */
+       if (tree cst = m_arg->maybe_get_constant ())
+ 	if (zerop (cst))
+ 	  {
+ 	    if (type)
+ 	      return mgr->get_or_create_cast (type, this);
+ 	    else
+ 	      return this;
+ 	  }
+       break;
+     }
+   /* Otherwise, don't fold.  */
+   return NULL;
+ }
+ 
  /* class binop_svalue : public svalue.  */
  
+ /* Return whether OP be printed as an infix operator.  */
+ 
+ static bool
+ infix_p (enum tree_code op)
+ {
+   switch (op)
+     {
+     default:
+       return true;
+     case MAX_EXPR:
+     case MIN_EXPR:
+       return false;
+     }
+ }
+ 
  /* Implementation of svalue::dump_to_pp vfunc for binop_svalue.  */
  
  void
*************** binop_svalue::dump_to_pp (pretty_printer
*** 901,911 ****
  {
    if (simple)
      {
!       pp_character (pp, '(');
!       m_arg0->dump_to_pp (pp, simple);
!       pp_string (pp, op_symbol_code (m_op));
!       m_arg1->dump_to_pp (pp, simple);
!       pp_character (pp, ')');
      }
    else
      {
--- 1188,1212 ----
  {
    if (simple)
      {
!       if (infix_p (m_op))
! 	{
! 	  /* Print "(A OP B)".  */
! 	  pp_character (pp, '(');
! 	  m_arg0->dump_to_pp (pp, simple);
! 	  pp_string (pp, op_symbol_code (m_op));
! 	  m_arg1->dump_to_pp (pp, simple);
! 	  pp_character (pp, ')');
! 	}
!       else
! 	{
! 	  /* Print "OP(A, B)".  */
! 	  pp_string (pp, op_symbol_code (m_op));
! 	  pp_character (pp, '(');
! 	  m_arg0->dump_to_pp (pp, simple);
! 	  pp_string (pp, ", ");
! 	  m_arg1->dump_to_pp (pp, simple);
! 	  pp_character (pp, ')');
! 	}
      }
    else
      {
*************** sub_svalue::sub_svalue (tree type, const
*** 950,955 ****
--- 1251,1257 ----
  	  type),
    m_parent_svalue (parent_svalue), m_subregion (subregion)
  {
+   gcc_assert (parent_svalue->can_have_associated_state_p ());
  }
  
  /* Implementation of svalue::dump_to_pp vfunc for sub_svalue.  */
*************** sub_svalue::implicitly_live_p (const sva
*** 995,1000 ****
--- 1297,1512 ----
    return get_parent ()->live_p (live_svalues, model);
  }
  
+ /* class repeated_svalue : public svalue.  */
+ 
+ /* repeated_svalue'c ctor.  */
+ 
+ repeated_svalue::repeated_svalue (tree type,
+ 				  const svalue *outer_size,
+ 				  const svalue *inner_svalue)
+ : svalue (complexity::from_pair (outer_size, inner_svalue), type),
+   m_outer_size (outer_size),
+   m_inner_svalue (inner_svalue)
+ {
+   gcc_assert (outer_size->can_have_associated_state_p ());
+   gcc_assert (inner_svalue->can_have_associated_state_p ());
+ }
+ 
+ /* Implementation of svalue::dump_to_pp vfunc for repeated_svalue.  */
+ 
+ void
+ repeated_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
+ {
+   if (simple)
+     {
+       pp_string (pp, "REPEATED(");
+       if (get_type ())
+ 	{
+ 	  print_quoted_type (pp, get_type ());
+ 	  pp_string (pp, ", ");
+ 	}
+       pp_string (pp, "outer_size: ");
+       m_outer_size->dump_to_pp (pp, simple);
+       pp_string (pp, ", inner_val: ");
+       m_inner_svalue->dump_to_pp (pp, simple);
+       pp_character (pp, ')');
+     }
+   else
+     {
+       pp_string (pp, "repeated_svalue (");
+       if (get_type ())
+ 	{
+ 	  print_quoted_type (pp, get_type ());
+ 	  pp_string (pp, ", ");
+ 	}
+       pp_string (pp, "outer_size: ");
+       m_outer_size->dump_to_pp (pp, simple);
+       pp_string (pp, ", inner_val: ");
+       m_inner_svalue->dump_to_pp (pp, simple);
+       pp_character (pp, ')');
+     }
+ }
+ 
+ /* Implementation of svalue::accept vfunc for repeated_svalue.  */
+ 
+ void
+ repeated_svalue::accept (visitor *v) const
+ {
+   v->visit_repeated_svalue (this);
+   m_inner_svalue->accept (v);
+ }
+ 
+ /* Implementation of svalue::all_zeroes_p for repeated_svalue.  */
+ 
+ bool
+ repeated_svalue::all_zeroes_p () const
+ {
+   return m_inner_svalue->all_zeroes_p ();
+ }
+ 
+ /* Implementation of svalue::maybe_fold_bits_within vfunc
+    for repeated_svalue.  */
+ 
+ const svalue *
+ repeated_svalue::maybe_fold_bits_within (tree type,
+ 					 const bit_range &bits,
+ 					 region_model_manager *mgr) const
+ {
+   const svalue *innermost_sval = m_inner_svalue;
+   /* Fold
+        BITS_WITHIN (range, REPEATED_SVALUE (ZERO))
+      to:
+        REPEATED_SVALUE (ZERO).  */
+   if (all_zeroes_p ())
+     {
+       byte_range bytes (0,0);
+       if (bits.as_byte_range (&bytes))
+ 	{
+ 	  const svalue *byte_size
+ 	    = mgr->get_or_create_int_cst (size_type_node,
+ 					  bytes.m_size_in_bytes.to_uhwi ());
+ 	  return mgr->get_or_create_repeated_svalue (type, byte_size,
+ 						     innermost_sval);
+ 	}
+     }
+ 
+   /* Fold:
+        BITS_WITHIN (range, REPEATED_SVALUE (INNERMOST_SVALUE))
+      to:
+        BITS_WITHIN (range - offset, INNERMOST_SVALUE)
+      if range is fully within one instance of INNERMOST_SVALUE.  */
+   if (tree innermost_type = innermost_sval->get_type ())
+     {
+       bit_size_t element_bit_size;
+       if (int_size_in_bits (innermost_type, &element_bit_size)
+ 	  && element_bit_size > 0)
+ 	{
+ 	  HOST_WIDE_INT start_idx
+ 	    = (bits.get_start_bit_offset ()
+ 	       / element_bit_size).to_shwi ();
+ 	  HOST_WIDE_INT last_idx
+ 	    = (bits.get_last_bit_offset ()
+ 	       / element_bit_size).to_shwi ();
+ 	  if (start_idx == last_idx)
+ 	    {
+ 	      bit_offset_t start_of_element
+ 		= start_idx * element_bit_size;
+ 	      bit_range range_within_element
+ 		(bits.m_start_bit_offset - start_of_element,
+ 		 bits.m_size_in_bits);
+ 	      return mgr->get_or_create_bits_within (type,
+ 						     range_within_element,
+ 						     innermost_sval);
+ 	    }
+ 	}
+     }
+ 
+   return NULL;
+ }
+ 
+ /* class bits_within_svalue : public svalue.  */
+ 
+ /* bits_within_svalue'c ctor.  */
+ 
+ bits_within_svalue::bits_within_svalue (tree type,
+ 					const bit_range &bits,
+ 					const svalue *inner_svalue)
+ : svalue (complexity (inner_svalue), type),
+   m_bits (bits),
+   m_inner_svalue (inner_svalue)
+ {
+   gcc_assert (inner_svalue->can_have_associated_state_p ());
+ }
+ 
+ /* Implementation of svalue::dump_to_pp vfunc for bits_within_svalue.  */
+ 
+ void
+ bits_within_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
+ {
+   if (simple)
+     {
+       pp_string (pp, "BITS_WITHIN(");
+       if (get_type ())
+ 	{
+ 	  print_quoted_type (pp, get_type ());
+ 	  pp_string (pp, ", ");
+ 	}
+       m_bits.dump_to_pp (pp);
+       pp_string (pp, ", inner_val: ");
+       m_inner_svalue->dump_to_pp (pp, simple);
+       pp_character (pp, ')');
+     }
+   else
+     {
+       pp_string (pp, "bits_within_svalue (");
+       if (get_type ())
+ 	{
+ 	  print_quoted_type (pp, get_type ());
+ 	  pp_string (pp, ", ");
+ 	}
+       m_bits.dump_to_pp (pp);
+       pp_string (pp, ", inner_val: ");
+       m_inner_svalue->dump_to_pp (pp, simple);
+       pp_character (pp, ')');
+     }
+ }
+ 
+ /* Implementation of svalue::maybe_fold_bits_within vfunc
+    for bits_within_svalue.  */
+ 
+ const svalue *
+ bits_within_svalue::maybe_fold_bits_within (tree type,
+ 					    const bit_range &bits,
+ 					    region_model_manager *mgr) const
+ {
+   /* Fold:
+        BITS_WITHIN (range1, BITS_WITHIN (range2, VAL))
+      to:
+        BITS_WITHIN (range1 in range 2, VAL).  */
+   bit_range offset_bits (m_bits.get_start_bit_offset ()
+ 			 + bits.m_start_bit_offset,
+ 			 bits.m_size_in_bits);
+   return mgr->get_or_create_bits_within (type, offset_bits, m_inner_svalue);
+ }
+ 
+ /* Implementation of svalue::accept vfunc for bits_within_svalue.  */
+ 
+ void
+ bits_within_svalue::accept (visitor *v) const
+ {
+   v->visit_bits_within_svalue (this);
+   m_inner_svalue->accept (v);
+ }
+ 
+ /* Implementation of svalue::implicitly_live_p vfunc for bits_within_svalue.  */
+ 
+ bool
+ bits_within_svalue::implicitly_live_p (const svalue_set *live_svalues,
+ 				       const region_model *model) const
+ {
+   return m_inner_svalue->live_p (live_svalues, model);
+ }
+ 
  /* class widening_svalue : public svalue.  */
  
  /* Implementation of svalue::dump_to_pp vfunc for widening_svalue.  */
*************** compound_svalue::calc_complexity (const
*** 1291,1296 ****
--- 1803,1877 ----
    return complexity (num_child_nodes + 1, max_child_depth + 1);
  }
  
+ /* Implementation of svalue::maybe_fold_bits_within vfunc
+    for compound_svalue.  */
+ 
+ const svalue *
+ compound_svalue::maybe_fold_bits_within (tree type,
+ 					 const bit_range &bits,
+ 					 region_model_manager *mgr) const
+ {
+   binding_map result_map;
+   for (auto iter : m_map)
+     {
+       const binding_key *key = iter.first;
+       if (const concrete_binding *conc_key
+ 	  = key->dyn_cast_concrete_binding ())
+ 	{
+ 	  /* Ignore concrete bindings outside BITS.  */
+ 	  if (!conc_key->get_bit_range ().intersects_p (bits))
+ 	    continue;
+ 
+ 	  const svalue *sval = iter.second;
+ 	  /* Get the position of conc_key relative to BITS.  */
+ 	  bit_range result_location (conc_key->get_start_bit_offset ()
+ 				     - bits.get_start_bit_offset (),
+ 				     conc_key->get_size_in_bits ());
+ 	  /* If conc_key starts after BITS, trim off leading bits
+ 	     from the svalue and adjust binding location.  */
+ 	  if (result_location.m_start_bit_offset < 0)
+ 	    {
+ 	      bit_size_t leading_bits_to_drop
+ 		= -result_location.m_start_bit_offset;
+ 	      result_location = bit_range
+ 		(0, result_location.m_size_in_bits - leading_bits_to_drop);
+ 	      bit_range bits_within_sval (leading_bits_to_drop,
+ 					  result_location.m_size_in_bits);
+ 	      /* Trim off leading bits from iter_sval.  */
+ 	      sval = mgr->get_or_create_bits_within (NULL_TREE,
+ 						     bits_within_sval,
+ 						     sval);
+ 	    }
+ 	  /* If conc_key finishes after BITS, trim off trailing bits
+ 	     from the svalue and adjust binding location.  */
+ 	  if (conc_key->get_next_bit_offset ()
+ 	      > bits.get_next_bit_offset ())
+ 	    {
+ 	      bit_size_t trailing_bits_to_drop
+ 		= (conc_key->get_next_bit_offset ()
+ 		   - bits.get_next_bit_offset ());
+ 	      result_location = bit_range
+ 		(result_location.m_start_bit_offset,
+ 		 result_location.m_size_in_bits - trailing_bits_to_drop);
+ 	      bit_range bits_within_sval (0,
+ 					  result_location.m_size_in_bits);
+ 	      /* Trim off leading bits from iter_sval.  */
+ 	      sval = mgr->get_or_create_bits_within (NULL_TREE,
+ 						     bits_within_sval,
+ 						     sval);
+ 	    }
+ 	  const concrete_binding *offset_conc_key
+ 	    = mgr->get_store_manager ()->get_concrete_binding
+ 		(result_location);
+ 	  result_map.put (offset_conc_key, sval);
+ 	}
+       else
+ 	/* If we have any symbolic keys we can't get it as bits.  */
+ 	return NULL;
+     }
+   return mgr->get_or_create_compound_svalue (type, result_map);
+ }
+ 
  /* class conjured_svalue : public svalue.  */
  
  /* Implementation of svalue::dump_to_pp vfunc for conjured_svalue.  */
*************** conjured_svalue::accept (visitor *v) con
*** 1326,1331 ****
--- 1907,2031 ----
    m_id_reg->accept (v);
  }
  
+ /* class asm_output_svalue : public svalue.  */
+ 
+ /* Implementation of svalue::dump_to_pp vfunc for asm_output_svalue.  */
+ 
+ void
+ asm_output_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
+ {
+   if (simple)
+     {
+       pp_printf (pp, "ASM_OUTPUT(%qs, %%%i, {",
+ 		 get_asm_string (),
+ 		 get_output_idx ());
+       for (unsigned i = 0; i < m_num_inputs; i++)
+ 	{
+ 	  if (i > 0)
+ 	    pp_string (pp, ", ");
+ 	  dump_input (pp, 0, m_input_arr[i], simple);
+ 	}
+       pp_string (pp, "})");
+     }
+   else
+     {
+       pp_printf (pp, "asm_output_svalue (%qs, %%%i, {",
+ 		 get_asm_string (),
+ 		 get_output_idx ());
+       for (unsigned i = 0; i < m_num_inputs; i++)
+ 	{
+ 	  if (i > 0)
+ 	    pp_string (pp, ", ");
+ 	  dump_input (pp, 0, m_input_arr[i], simple);
+ 	}
+       pp_string (pp, "})");
+     }
+ }
+ 
+ /* Subroutine of asm_output_svalue::dump_to_pp.  */
+ 
+ void
+ asm_output_svalue::dump_input (pretty_printer *pp,
+ 			       unsigned input_idx,
+ 			       const svalue *sval,
+ 			       bool simple) const
+ {
+   pp_printf (pp, "%%%i: ", input_idx_to_asm_idx (input_idx));
+   sval->dump_to_pp (pp, simple);
+ }
+ 
+ /* Convert INPUT_IDX from an index into the array of inputs
+    into the index of all operands for the asm stmt.  */
+ 
+ unsigned
+ asm_output_svalue::input_idx_to_asm_idx (unsigned input_idx) const
+ {
+   return input_idx + m_num_outputs;
+ }
+ 
+ /* Implementation of svalue::accept vfunc for asm_output_svalue.  */
+ 
+ void
+ asm_output_svalue::accept (visitor *v) const
+ {
+   v->visit_asm_output_svalue (this);
+   for (unsigned i = 0; i < m_num_inputs; i++)
+     m_input_arr[i]->accept (v);
+ }
+ 
+ /* class const_fn_result_svalue : public svalue.  */
+ 
+ /* Implementation of svalue::dump_to_pp vfunc for const_fn_result_svalue.  */
+ 
+ void
+ const_fn_result_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
+ {
+   if (simple)
+     {
+       pp_printf (pp, "CONST_FN_RESULT(%qD, {", m_fndecl);
+       for (unsigned i = 0; i < m_num_inputs; i++)
+ 	{
+ 	  if (i > 0)
+ 	    pp_string (pp, ", ");
+ 	  dump_input (pp, i, m_input_arr[i], simple);
+ 	}
+       pp_string (pp, "})");
+     }
+   else
+     {
+       pp_printf (pp, "CONST_FN_RESULT(%qD, {", m_fndecl);
+       for (unsigned i = 0; i < m_num_inputs; i++)
+ 	{
+ 	  if (i > 0)
+ 	    pp_string (pp, ", ");
+ 	  dump_input (pp, i, m_input_arr[i], simple);
+ 	}
+       pp_string (pp, "})");
+     }
+ }
+ 
+ /* Subroutine of const_fn_result_svalue::dump_to_pp.  */
+ 
+ void
+ const_fn_result_svalue::dump_input (pretty_printer *pp,
+ 				    unsigned input_idx,
+ 				    const svalue *sval,
+ 				    bool simple) const
+ {
+   pp_printf (pp, "arg%i: ", input_idx);
+   sval->dump_to_pp (pp, simple);
+ }
+ 
+ /* Implementation of svalue::accept vfunc for const_fn_result_svalue.  */
+ 
+ void
+ const_fn_result_svalue::accept (visitor *v) const
+ {
+   v->visit_const_fn_result_svalue (this);
+   for (unsigned i = 0; i < m_num_inputs; i++)
+     m_input_arr[i]->accept (v);
+ }
+ 
  } // namespace ana
  
  #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/svalue.h gcc-12.1.0/gcc/analyzer/svalue.h
*** gcc-11.3.0/gcc/analyzer/svalue.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/svalue.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Symbolic values.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Symbolic values.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
*************** enum svalue_kind
*** 41,51 ****
    SK_UNARYOP,
    SK_BINOP,
    SK_SUB,
    SK_UNMERGEABLE,
    SK_PLACEHOLDER,
    SK_WIDENING,
    SK_COMPOUND,
!   SK_CONJURED
  };
  
  /* svalue and its subclasses.
--- 41,55 ----
    SK_UNARYOP,
    SK_BINOP,
    SK_SUB,
+   SK_REPEATED,
+   SK_BITS_WITHIN,
    SK_UNMERGEABLE,
    SK_PLACEHOLDER,
    SK_WIDENING,
    SK_COMPOUND,
!   SK_CONJURED,
!   SK_ASM_OUTPUT,
!   SK_CONST_FN_RESULT
  };
  
  /* svalue and its subclasses.
*************** enum svalue_kind
*** 63,75 ****
       unaryop_svalue (SK_UNARYOP): unary operation on another svalue
       binop_svalue (SK_BINOP): binary operation on two svalues
       sub_svalue (SK_SUB): the result of accessing a subregion
       unmergeable_svalue (SK_UNMERGEABLE): a value that is so interesting
         from a control-flow perspective that it can inhibit state-merging
       placeholder_svalue (SK_PLACEHOLDER): for use in selftests.
       widening_svalue (SK_WIDENING): a merger of two svalues (possibly
         in an iteration).
       compound_svalue (SK_COMPOUND): a mapping of bit-ranges to svalues
!      conjured_svalue (SK_CONJURED): a value arising from a stmt.  */
  
  /* An abstract base class representing a value held by a region of memory.  */
  
--- 67,86 ----
       unaryop_svalue (SK_UNARYOP): unary operation on another svalue
       binop_svalue (SK_BINOP): binary operation on two svalues
       sub_svalue (SK_SUB): the result of accessing a subregion
+      repeated_svalue (SK_REPEATED): repeating an svalue to fill a larger region
+      bits_within_svalue (SK_BITS_WITHIN): a range of bits/bytes within a larger
+        svalue
       unmergeable_svalue (SK_UNMERGEABLE): a value that is so interesting
         from a control-flow perspective that it can inhibit state-merging
       placeholder_svalue (SK_PLACEHOLDER): for use in selftests.
       widening_svalue (SK_WIDENING): a merger of two svalues (possibly
         in an iteration).
       compound_svalue (SK_COMPOUND): a mapping of bit-ranges to svalues
!      conjured_svalue (SK_CONJURED): a value arising from a stmt
!      asm_output_svalue (SK_ASM_OUTPUT): an output from a deterministic
!        asm stmt.
!      const_fn_result_svalue (SK_CONST_FN_RESULT): the return value from
!        a function with __attribute((const)) for given inputs.  */
  
  /* An abstract base class representing a value held by a region of memory.  */
  
*************** public:
*** 107,112 ****
--- 118,127 ----
    dyn_cast_binop_svalue () const { return NULL; }
    virtual const sub_svalue *
    dyn_cast_sub_svalue () const { return NULL; }
+   virtual const repeated_svalue *
+   dyn_cast_repeated_svalue () const { return NULL; }
+   virtual const bits_within_svalue *
+   dyn_cast_bits_within_svalue () const { return NULL; }
    virtual const unmergeable_svalue *
    dyn_cast_unmergeable_svalue () const { return NULL; }
    virtual const widening_svalue *
*************** public:
*** 115,122 ****
--- 130,142 ----
    dyn_cast_compound_svalue () const { return NULL; }
    virtual const conjured_svalue *
    dyn_cast_conjured_svalue () const { return NULL; }
+   virtual const asm_output_svalue *
+   dyn_cast_asm_output_svalue () const { return NULL; }
+   virtual const const_fn_result_svalue *
+   dyn_cast_const_fn_result_svalue () const { return NULL; }
  
    tree maybe_get_constant () const;
+   const region *maybe_get_region () const;
    const svalue *maybe_undo_cast () const;
    const svalue *unwrap_any_unmergeable () const;
  
*************** public:
*** 138,143 ****
--- 158,182 ----
  
    bool involves_p (const svalue *other) const;
  
+   const svalue *
+   extract_bit_range (tree type,
+ 		     const bit_range &subrange,
+ 		     region_model_manager *mgr) const;
+ 
+   virtual const svalue *
+   maybe_fold_bits_within (tree type,
+ 			  const bit_range &subrange,
+ 			  region_model_manager *mgr) const;
+ 
+   virtual bool all_zeroes_p () const;
+ 
+   /* Can this svalue be involved in constraints and sm-state?
+      Most can, but UNKNOWN and POISONED svalues are singletons
+      per-type and thus it's meaningless for them to "have state".  */
+   virtual bool can_have_associated_state_p () const { return true; }
+ 
+   const region *maybe_get_deref_base_region () const;
+ 
   protected:
    svalue (complexity c, tree type)
    : m_complexity (c), m_type (type)
*************** public:
*** 175,183 ****
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = NULL_TREE; }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == NULL_TREE; }
  
      tree m_type;
      const region *m_reg;
--- 214,222 ----
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = reinterpret_cast<tree> (2); }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == reinterpret_cast<tree> (2); }
  
      tree m_type;
      const region *m_reg;
*************** is_a_helper <const region_svalue *>::tes
*** 222,228 ****
  template <> struct default_hash_traits<region_svalue::key_t>
  : public member_function_hash_traits<region_svalue::key_t>
  {
!   static const bool empty_zero_p = true;
  };
  
  namespace ana {
--- 261,267 ----
  template <> struct default_hash_traits<region_svalue::key_t>
  : public member_function_hash_traits<region_svalue::key_t>
  {
!   static const bool empty_zero_p = false;
  };
  
  namespace ana {
*************** public:
*** 253,258 ****
--- 292,304 ----
  				  enum tree_code op,
  				  const constant_svalue *rhs);
  
+   const svalue *
+   maybe_fold_bits_within (tree type,
+ 			  const bit_range &subrange,
+ 			  region_model_manager *mgr) const FINAL OVERRIDE;
+ 
+   bool all_zeroes_p () const FINAL OVERRIDE;
+ 
   private:
    tree m_cst_expr;
  };
*************** public:
*** 285,296 ****
--- 331,353 ----
  
    void dump_to_pp (pretty_printer *pp, bool simple) const FINAL OVERRIDE;
    void accept (visitor *v) const FINAL OVERRIDE;
+ 
+   const svalue *
+   maybe_fold_bits_within (tree type,
+ 			  const bit_range &subrange,
+ 			  region_model_manager *mgr) const FINAL OVERRIDE;
+ 
+   /* Unknown values are singletons per-type, so can't have state.  */
+   bool can_have_associated_state_p () const FINAL OVERRIDE { return false; }
  };
  
  /* An enum describing a particular kind of "poisoned" value.  */
  
  enum poison_kind
  {
+   /* For use to describe uninitialized memory.  */
+   POISON_KIND_UNINIT,
+ 
    /* For use to describe freed memory.  */
    POISON_KIND_FREED,
  
*************** public:
*** 327,335 ****
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = NULL_TREE; }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == NULL_TREE; }
  
      enum poison_kind m_kind;
      tree m_type;
--- 384,392 ----
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = reinterpret_cast<tree> (2); }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == reinterpret_cast<tree> (2); }
  
      enum poison_kind m_kind;
      tree m_type;
*************** public:
*** 345,352 ****
--- 402,417 ----
    void dump_to_pp (pretty_printer *pp, bool simple) const FINAL OVERRIDE;
    void accept (visitor *v) const FINAL OVERRIDE;
  
+   const svalue *
+   maybe_fold_bits_within (tree type,
+ 			  const bit_range &subrange,
+ 			  region_model_manager *mgr) const FINAL OVERRIDE;
+ 
    enum poison_kind get_poison_kind () const { return m_kind; }
  
+   /* Poisoned svalues are singletons per-type, so can't have state.  */
+   bool can_have_associated_state_p () const FINAL OVERRIDE { return false; }
+ 
   private:
    enum poison_kind m_kind;
  };
*************** is_a_helper <const poisoned_svalue *>::t
*** 364,370 ****
  template <> struct default_hash_traits<poisoned_svalue::key_t>
  : public member_function_hash_traits<poisoned_svalue::key_t>
  {
!   static const bool empty_zero_p = true;
  };
  
  namespace ana {
--- 429,435 ----
  template <> struct default_hash_traits<poisoned_svalue::key_t>
  : public member_function_hash_traits<poisoned_svalue::key_t>
  {
!   static const bool empty_zero_p = false;
  };
  
  namespace ana {
*************** public:
*** 426,434 ****
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = NULL_TREE; }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == NULL_TREE; }
  
      setjmp_record m_record;
      tree m_type;
--- 491,499 ----
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = reinterpret_cast<tree> (2); }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == reinterpret_cast<tree> (2); }
  
      setjmp_record m_record;
      tree m_type;
*************** is_a_helper <const setjmp_svalue *>::tes
*** 467,473 ****
  template <> struct default_hash_traits<setjmp_svalue::key_t>
  : public member_function_hash_traits<setjmp_svalue::key_t>
  {
!   static const bool empty_zero_p = true;
  };
  
  namespace ana {
--- 532,538 ----
  template <> struct default_hash_traits<setjmp_svalue::key_t>
  : public member_function_hash_traits<setjmp_svalue::key_t>
  {
!   static const bool empty_zero_p = false;
  };
  
  namespace ana {
*************** public:
*** 548,556 ****
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = NULL_TREE; }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == NULL_TREE; }
  
      tree m_type;
      enum tree_code m_op;
--- 613,621 ----
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = reinterpret_cast<tree> (2); }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == reinterpret_cast<tree> (2); }
  
      tree m_type;
      enum tree_code m_op;
*************** public:
*** 560,565 ****
--- 625,631 ----
    unaryop_svalue (tree type, enum tree_code op, const svalue *arg)
    : svalue (complexity (arg), type), m_op (op), m_arg (arg)
    {
+     gcc_assert (arg->can_have_associated_state_p ());
    }
  
    enum svalue_kind get_kind () const FINAL OVERRIDE { return SK_UNARYOP; }
*************** public:
*** 574,579 ****
--- 640,650 ----
    enum tree_code get_op () const { return m_op; }
    const svalue *get_arg () const { return m_arg; }
  
+   const svalue *
+   maybe_fold_bits_within (tree type,
+ 			  const bit_range &subrange,
+ 			  region_model_manager *mgr) const FINAL OVERRIDE;
+ 
   private:
    enum tree_code m_op;
    const svalue *m_arg;
*************** is_a_helper <const unaryop_svalue *>::te
*** 592,598 ****
  template <> struct default_hash_traits<unaryop_svalue::key_t>
  : public member_function_hash_traits<unaryop_svalue::key_t>
  {
!   static const bool empty_zero_p = true;
  };
  
  namespace ana {
--- 663,669 ----
  template <> struct default_hash_traits<unaryop_svalue::key_t>
  : public member_function_hash_traits<unaryop_svalue::key_t>
  {
!   static const bool empty_zero_p = false;
  };
  
  namespace ana {
*************** public:
*** 630,638 ****
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = NULL_TREE; }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == NULL_TREE; }
  
      tree m_type;
      enum tree_code m_op;
--- 701,709 ----
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = reinterpret_cast<tree> (2); }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == reinterpret_cast<tree> (2); }
  
      tree m_type;
      enum tree_code m_op;
*************** public:
*** 647,652 ****
--- 718,725 ----
  	     type),
      m_op (op), m_arg0 (arg0), m_arg1 (arg1)
    {
+     gcc_assert (arg0->can_have_associated_state_p ());
+     gcc_assert (arg1->can_have_associated_state_p ());
    }
  
    enum svalue_kind get_kind () const FINAL OVERRIDE { return SK_BINOP; }
*************** is_a_helper <const binop_svalue *>::test
*** 683,689 ****
  template <> struct default_hash_traits<binop_svalue::key_t>
  : public member_function_hash_traits<binop_svalue::key_t>
  {
!   static const bool empty_zero_p = true;
  };
  
  namespace ana {
--- 756,762 ----
  template <> struct default_hash_traits<binop_svalue::key_t>
  : public member_function_hash_traits<binop_svalue::key_t>
  {
!   static const bool empty_zero_p = false;
  };
  
  namespace ana {
*************** public:
*** 719,727 ****
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = NULL_TREE; }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == NULL_TREE; }
  
      tree m_type;
      const svalue *m_parent_svalue;
--- 792,800 ----
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = reinterpret_cast<tree> (2); }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == reinterpret_cast<tree> (2); }
  
      tree m_type;
      const svalue *m_parent_svalue;
*************** is_a_helper <const sub_svalue *>::test (
*** 762,768 ****
  template <> struct default_hash_traits<sub_svalue::key_t>
  : public member_function_hash_traits<sub_svalue::key_t>
  {
!   static const bool empty_zero_p = true;
  };
  
  namespace ana {
--- 835,1016 ----
  template <> struct default_hash_traits<sub_svalue::key_t>
  : public member_function_hash_traits<sub_svalue::key_t>
  {
!   static const bool empty_zero_p = false;
! };
! 
! namespace ana {
! 
! /* Concrete subclass of svalue representing repeating an inner svalue
!    (possibly not a whole number of times) to fill a larger region of
!    type TYPE of size OUTER_SIZE bytes.  */
! 
! class repeated_svalue : public svalue
! {
! public:
!   /* A support class for uniquifying instances of repeated_svalue.  */
!   struct key_t
!   {
!     key_t (tree type,
! 	   const svalue *outer_size,
! 	   const svalue *inner_svalue)
!     : m_type (type), m_outer_size (outer_size), m_inner_svalue (inner_svalue)
!     {}
! 
!     hashval_t hash () const
!     {
!       inchash::hash hstate;
!       hstate.add_ptr (m_type);
!       hstate.add_ptr (m_outer_size);
!       hstate.add_ptr (m_inner_svalue);
!       return hstate.end ();
!     }
! 
!     bool operator== (const key_t &other) const
!     {
!       return (m_type == other.m_type
! 	      && m_outer_size == other.m_outer_size
! 	      && m_inner_svalue == other.m_inner_svalue);
!     }
! 
!     void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = reinterpret_cast<tree> (2); }
!     bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == reinterpret_cast<tree> (2); }
! 
!     tree m_type;
!     const svalue *m_outer_size;
!     const svalue *m_inner_svalue;
!   };
!   repeated_svalue (tree type,
! 		   const svalue *outer_size,
! 		   const svalue *inner_svalue);
! 
!   enum svalue_kind get_kind () const FINAL OVERRIDE { return SK_REPEATED; }
!   const repeated_svalue *dyn_cast_repeated_svalue () const FINAL OVERRIDE
!   {
!     return this;
!   }
! 
!   void dump_to_pp (pretty_printer *pp, bool simple) const FINAL OVERRIDE;
!   void accept (visitor *v) const FINAL OVERRIDE;
! 
!   const svalue *get_outer_size () const { return m_outer_size; }
!   const svalue *get_inner_svalue () const { return m_inner_svalue; }
! 
!   bool all_zeroes_p () const FINAL OVERRIDE;
! 
!   const svalue *
!   maybe_fold_bits_within (tree type,
! 			  const bit_range &subrange,
! 			  region_model_manager *mgr) const FINAL OVERRIDE;
! 
!  private:
!   const svalue *m_outer_size;
!   const svalue *m_inner_svalue;
! };
! 
! } // namespace ana
! 
! template <>
! template <>
! inline bool
! is_a_helper <const repeated_svalue *>::test (const svalue *sval)
! {
!   return sval->get_kind () == SK_REPEATED;
! }
! 
! template <> struct default_hash_traits<repeated_svalue::key_t>
! : public member_function_hash_traits<repeated_svalue::key_t>
! {
!   static const bool empty_zero_p = false;
! };
! 
! namespace ana {
! 
! /* A range of bits/bytes within another svalue
!    e.g. bytes 5-39 of INITIAL_SVALUE(R).
!    These can be generated for prefixes and suffixes when part of a binding
!    is clobbered, so that we don't lose too much information.  */
! 
! class bits_within_svalue : public svalue
! {
! public:
!   /* A support class for uniquifying instances of bits_within_svalue.  */
!   struct key_t
!   {
!     key_t (tree type,
! 	   const bit_range &bits,
! 	   const svalue *inner_svalue)
!     : m_type (type), m_bits (bits), m_inner_svalue (inner_svalue)
!     {}
! 
!     hashval_t hash () const
!     {
!       inchash::hash hstate;
!       hstate.add_ptr (m_type);
!       hstate.add_ptr (m_inner_svalue);
!       return hstate.end ();
!     }
! 
!     bool operator== (const key_t &other) const
!     {
!       return (m_type == other.m_type
! 	      && m_bits == other.m_bits
! 	      && m_inner_svalue == other.m_inner_svalue);
!     }
! 
!     void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = reinterpret_cast<tree> (2); }
!     bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == reinterpret_cast<tree> (2); }
! 
!     tree m_type;
!     bit_range m_bits;
!     const svalue *m_inner_svalue;
!   };
!   bits_within_svalue (tree type,
! 		      const bit_range &bits,
! 		      const svalue *inner_svalue);
! 
!   enum svalue_kind get_kind () const FINAL OVERRIDE { return SK_BITS_WITHIN; }
!   const bits_within_svalue *
!   dyn_cast_bits_within_svalue () const FINAL OVERRIDE
!   {
!     return this;
!   }
! 
!   void dump_to_pp (pretty_printer *pp, bool simple) const FINAL OVERRIDE;
!   void accept (visitor *v) const FINAL OVERRIDE;
!   bool implicitly_live_p (const svalue_set *,
! 			  const region_model *) const FINAL OVERRIDE;
! 
!   const bit_range &get_bits () const { return m_bits; }
!   const svalue *get_inner_svalue () const { return m_inner_svalue; }
! 
!   const svalue *
!   maybe_fold_bits_within (tree type,
! 			  const bit_range &subrange,
! 			  region_model_manager *mgr) const FINAL OVERRIDE;
! 
!  private:
!   const bit_range m_bits;
!   const svalue *m_inner_svalue;
! };
! 
! } // namespace ana
! 
! template <>
! template <>
! inline bool
! is_a_helper <const bits_within_svalue *>::test (const svalue *sval)
! {
!   return sval->get_kind () == SK_BITS_WITHIN;
! }
! 
! template <> struct default_hash_traits<bits_within_svalue::key_t>
! : public member_function_hash_traits<bits_within_svalue::key_t>
! {
!   static const bool empty_zero_p = false;
  };
  
  namespace ana {
*************** public:
*** 842,848 ****
  template <>
  template <>
  inline bool
! is_a_helper <placeholder_svalue *>::test (svalue *sval)
  {
    return sval->get_kind () == SK_PLACEHOLDER;
  }
--- 1090,1096 ----
  template <>
  template <>
  inline bool
! is_a_helper <const placeholder_svalue *>::test (const svalue *sval)
  {
    return sval->get_kind () == SK_PLACEHOLDER;
  }
*************** public:
*** 888,896 ****
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = NULL_TREE; }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == NULL_TREE; }
  
      tree m_type;
      function_point m_point;
--- 1136,1144 ----
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = reinterpret_cast<tree> (2); }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == reinterpret_cast<tree> (2); }
  
      tree m_type;
      function_point m_point;
*************** public:
*** 913,918 ****
--- 1161,1168 ----
      m_point (point.get_function_point ()),
      m_base_sval (base_sval), m_iter_sval (iter_sval)
    {
+     gcc_assert (base_sval->can_have_associated_state_p ());
+     gcc_assert (iter_sval->can_have_associated_state_p ());
    }
  
    enum svalue_kind get_kind () const FINAL OVERRIDE { return SK_WIDENING; }
*************** public:
*** 944,950 ****
  template <>
  template <>
  inline bool
! is_a_helper <widening_svalue *>::test (svalue *sval)
  {
    return sval->get_kind () == SK_WIDENING;
  }
--- 1194,1200 ----
  template <>
  template <>
  inline bool
! is_a_helper <const widening_svalue *>::test (const svalue *sval)
  {
    return sval->get_kind () == SK_WIDENING;
  }
*************** is_a_helper <widening_svalue *>::test (s
*** 952,958 ****
  template <> struct default_hash_traits<widening_svalue::key_t>
  : public member_function_hash_traits<widening_svalue::key_t>
  {
!   static const bool empty_zero_p = true;
  };
  
  namespace ana {
--- 1202,1208 ----
  template <> struct default_hash_traits<widening_svalue::key_t>
  : public member_function_hash_traits<widening_svalue::key_t>
  {
!   static const bool empty_zero_p = false;
  };
  
  namespace ana {
*************** public:
*** 1000,1008 ****
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = NULL_TREE; }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == NULL_TREE; }
  
      tree m_type;
      const binding_map *m_map_ptr;
--- 1250,1258 ----
      }
  
      void mark_deleted () { m_type = reinterpret_cast<tree> (1); }
!     void mark_empty () { m_type = reinterpret_cast<tree> (2); }
      bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); }
!     bool is_empty () const { return m_type == reinterpret_cast<tree> (2); }
  
      tree m_type;
      const binding_map *m_map_ptr;
*************** public:
*** 1029,1034 ****
--- 1279,1289 ----
      return key_t (get_type (), &m_map);
    }
  
+   const svalue *
+   maybe_fold_bits_within (tree type,
+ 			  const bit_range &subrange,
+ 			  region_model_manager *mgr) const FINAL OVERRIDE;
+ 
   private:
    static complexity calc_complexity (const binding_map &map);
  
*************** public:
*** 1040,1046 ****
  template <>
  template <>
  inline bool
! is_a_helper <compound_svalue *>::test (svalue *sval)
  {
    return sval->get_kind () == SK_COMPOUND;
  }
--- 1295,1301 ----
  template <>
  template <>
  inline bool
! is_a_helper <const compound_svalue *>::test (const svalue *sval)
  {
    return sval->get_kind () == SK_COMPOUND;
  }
*************** is_a_helper <compound_svalue *>::test (s
*** 1048,1058 ****
  template <> struct default_hash_traits<compound_svalue::key_t>
  : public member_function_hash_traits<compound_svalue::key_t>
  {
!   static const bool empty_zero_p = true;
  };
  
  namespace ana {
  
  /* A defined value arising from a statement, where we want to identify a
     particular unknown value, rather than resorting to the unknown_value
     singleton, so that the value can have sm-state.
--- 1303,1334 ----
  template <> struct default_hash_traits<compound_svalue::key_t>
  : public member_function_hash_traits<compound_svalue::key_t>
  {
!   static const bool empty_zero_p = false;
  };
  
  namespace ana {
  
+ /* A bundle of state for purging information from a program_state about
+    a conjured_svalue.  We pass this whenever calling
+    get_or_create_conjured_svalue, so that if the program_state already
+    has information about this conjured_svalue on an execution path, we
+    can purge that information, to avoid the analyzer confusing the two
+    values as being the same.  */
+ 
+ class conjured_purge
+ {
+ public:
+   conjured_purge (region_model *model, region_model_context *ctxt)
+   : m_model (model), m_ctxt (ctxt)
+   {
+   }
+   void purge (const conjured_svalue *sval) const;
+ 
+ private:
+   region_model *m_model;
+   region_model_context *m_ctxt;
+ };
+ 
  /* A defined value arising from a statement, where we want to identify a
     particular unknown value, rather than resorting to the unknown_value
     singleton, so that the value can have sm-state.
*************** public:
*** 1140,1146 ****
  template <>
  template <>
  inline bool
! is_a_helper <conjured_svalue *>::test (svalue *sval)
  {
    return sval->get_kind () == SK_CONJURED;
  }
--- 1416,1422 ----
  template <>
  template <>
  inline bool
! is_a_helper <const conjured_svalue *>::test (const svalue *sval)
  {
    return sval->get_kind () == SK_CONJURED;
  }
*************** template <> struct default_hash_traits<c
*** 1150,1154 ****
--- 1426,1690 ----
  {
    static const bool empty_zero_p = true;
  };
+ 
+ namespace ana {
+ 
+ /* An output from a deterministic asm stmt, where we want to identify a
+    particular unknown value, rather than resorting to the unknown_value
+    singleton.
+ 
+    Comparisons of variables that share the same asm_output_svalue are known
+    to be equal, even if we don't know what the value is.  */
+ 
+ class asm_output_svalue : public svalue
+ {
+ public:
+   /* Imposing an upper limit and using a (small) array allows key_t
+      to avoid memory management.  */
+   static const unsigned MAX_INPUTS = 2;
+ 
+   /* A support class for uniquifying instances of asm_output_svalue.  */
+   struct key_t
+   {
+     key_t (tree type,
+ 	   const char *asm_string,
+ 	   unsigned output_idx,
+ 	   const vec<const svalue *> &inputs)
+     : m_type (type), m_asm_string (asm_string), m_output_idx (output_idx),
+       m_num_inputs (inputs.length ())
+     {
+       gcc_assert (inputs.length () <= MAX_INPUTS);
+       for (unsigned i = 0; i < m_num_inputs; i++)
+ 	m_input_arr[i] = inputs[i];
+     }
+ 
+     hashval_t hash () const
+     {
+       inchash::hash hstate;
+       hstate.add_ptr (m_type);
+       /* We don't bother hashing m_asm_str.  */
+       hstate.add_int (m_output_idx);
+       for (unsigned i = 0; i < m_num_inputs; i++)
+ 	hstate.add_ptr (m_input_arr[i]);
+       return hstate.end ();
+     }
+ 
+     bool operator== (const key_t &other) const
+     {
+       if (!(m_type == other.m_type
+ 	    && 0 == (strcmp (m_asm_string, other.m_asm_string))
+ 	    && m_output_idx == other.m_output_idx
+ 	    && m_num_inputs == other.m_num_inputs))
+ 	return false;
+       for (unsigned i = 0; i < m_num_inputs; i++)
+ 	if (m_input_arr[i] != other.m_input_arr[i])
+ 	  return false;
+       return true;
+     }
+ 
+     /* Use m_asm_string to mark empty/deleted, as m_type can be NULL for
+        legitimate instances.  */
+     void mark_deleted () { m_asm_string = reinterpret_cast<const char *> (1); }
+     void mark_empty () { m_asm_string = NULL; }
+     bool is_deleted () const
+     {
+       return m_asm_string == reinterpret_cast<const char *> (1);
+     }
+     bool is_empty () const { return m_asm_string == NULL; }
+ 
+     tree m_type;
+     const char *m_asm_string;
+     unsigned m_output_idx;
+     unsigned m_num_inputs;
+     const svalue *m_input_arr[MAX_INPUTS];
+   };
+ 
+   asm_output_svalue (tree type,
+ 		     const char *asm_string,
+ 		     unsigned output_idx,
+ 		     unsigned num_outputs,
+ 		     const vec<const svalue *> &inputs)
+   : svalue (complexity::from_vec_svalue (inputs), type),
+     m_asm_string (asm_string),
+     m_output_idx (output_idx),
+     m_num_outputs (num_outputs),
+     m_num_inputs (inputs.length ())
+   {
+     gcc_assert (inputs.length () <= MAX_INPUTS);
+     for (unsigned i = 0; i < m_num_inputs; i++)
+       m_input_arr[i] = inputs[i];
+   }
+ 
+   enum svalue_kind get_kind () const FINAL OVERRIDE { return SK_ASM_OUTPUT; }
+   const asm_output_svalue *
+   dyn_cast_asm_output_svalue () const FINAL OVERRIDE
+   {
+     return this;
+   }
+ 
+   void dump_to_pp (pretty_printer *pp, bool simple) const FINAL OVERRIDE;
+   void accept (visitor *v) const FINAL OVERRIDE;
+ 
+   const char *get_asm_string () const { return m_asm_string; }
+   unsigned get_output_idx () const { return m_output_idx; }
+   unsigned get_num_inputs () const { return m_num_inputs; }
+   const svalue *get_input (unsigned idx) const { return m_input_arr[idx]; }
+ 
+  private:
+   void dump_input (pretty_printer *pp,
+ 		   unsigned input_idx,
+ 		   const svalue *sval,
+ 		   bool simple) const;
+   unsigned input_idx_to_asm_idx (unsigned input_idx) const;
+ 
+   const char *m_asm_string;
+   unsigned m_output_idx;
+ 
+   /* We capture this so that we can offset the input indices
+      to match the %0, %1, %2 in the asm_string when dumping.  */
+   unsigned m_num_outputs;
+ 
+   unsigned m_num_inputs;
+   const svalue *m_input_arr[MAX_INPUTS];
+ };
+ 
+ } // namespace ana
+ 
+ template <>
+ template <>
+ inline bool
+ is_a_helper <const asm_output_svalue *>::test (const svalue *sval)
+ {
+   return sval->get_kind () == SK_ASM_OUTPUT;
+ }
+ 
+ template <> struct default_hash_traits<asm_output_svalue::key_t>
+ : public member_function_hash_traits<asm_output_svalue::key_t>
+ {
+   static const bool empty_zero_p = true;
+ };
+ 
+ namespace ana {
+ 
+ /* The return value from a function with __attribute((const)) for given
+    inputs, provided that we don't have too many inputs, and all of them
+    are deterministic.
+ 
+    Comparisons of variables that share the same const_fn_result_svalue are known
+    to be equal, even if we don't know what the value is.  */
+ 
+ class const_fn_result_svalue : public svalue
+ {
+ public:
+   /* Imposing an upper limit and using a (small) array allows key_t
+      to avoid memory management.  */
+   static const unsigned MAX_INPUTS = 2;
+ 
+   /* A support class for uniquifying instances of const_fn_result_svalue.  */
+   struct key_t
+   {
+     key_t (tree type,
+ 	   tree fndecl,
+ 	   const vec<const svalue *> &inputs)
+     : m_type (type), m_fndecl (fndecl),
+       m_num_inputs (inputs.length ())
+     {
+       gcc_assert (inputs.length () <= MAX_INPUTS);
+       for (unsigned i = 0; i < m_num_inputs; i++)
+ 	m_input_arr[i] = inputs[i];
+     }
+ 
+     hashval_t hash () const
+     {
+       inchash::hash hstate;
+       hstate.add_ptr (m_type);
+       hstate.add_ptr (m_fndecl);
+       for (unsigned i = 0; i < m_num_inputs; i++)
+ 	hstate.add_ptr (m_input_arr[i]);
+       return hstate.end ();
+     }
+ 
+     bool operator== (const key_t &other) const
+     {
+       if (!(m_type == other.m_type
+ 	    && m_fndecl == other.m_fndecl
+ 	    && m_num_inputs == other.m_num_inputs))
+ 	return false;
+       for (unsigned i = 0; i < m_num_inputs; i++)
+ 	if (m_input_arr[i] != other.m_input_arr[i])
+ 	  return false;
+       return true;
+     }
+ 
+     /* Use m_fndecl to mark empty/deleted.  */
+     void mark_deleted () { m_fndecl = reinterpret_cast<tree> (1); }
+     void mark_empty () { m_fndecl = NULL; }
+     bool is_deleted () const
+     {
+       return m_fndecl == reinterpret_cast<tree> (1);
+     }
+     bool is_empty () const { return m_fndecl == NULL; }
+ 
+     tree m_type;
+     tree m_fndecl;
+     unsigned m_num_inputs;
+     const svalue *m_input_arr[MAX_INPUTS];
+   };
+ 
+   const_fn_result_svalue (tree type,
+ 			  tree fndecl,
+ 			  const vec<const svalue *> &inputs)
+   : svalue (complexity::from_vec_svalue (inputs), type),
+     m_fndecl (fndecl),
+     m_num_inputs (inputs.length ())
+   {
+     gcc_assert (inputs.length () <= MAX_INPUTS);
+     for (unsigned i = 0; i < m_num_inputs; i++)
+       m_input_arr[i] = inputs[i];
+   }
+ 
+   enum svalue_kind get_kind () const FINAL OVERRIDE
+   {
+     return SK_CONST_FN_RESULT;
+   }
+   const const_fn_result_svalue *
+   dyn_cast_const_fn_result_svalue () const FINAL OVERRIDE
+   {
+     return this;
+   }
+ 
+   void dump_to_pp (pretty_printer *pp, bool simple) const FINAL OVERRIDE;
+   void accept (visitor *v) const FINAL OVERRIDE;
+ 
+   tree get_fndecl () const { return m_fndecl; }
+   unsigned get_num_inputs () const { return m_num_inputs; }
+   const svalue *get_input (unsigned idx) const { return m_input_arr[idx]; }
+ 
+  private:
+   void dump_input (pretty_printer *pp,
+ 		   unsigned input_idx,
+ 		   const svalue *sval,
+ 		   bool simple) const;
+ 
+   tree m_fndecl;
+   unsigned m_num_inputs;
+   const svalue *m_input_arr[MAX_INPUTS];
+ };
+ 
+ } // namespace ana
+ 
+ template <>
+ template <>
+ inline bool
+ is_a_helper <const const_fn_result_svalue *>::test (const svalue *sval)
+ {
+   return sval->get_kind () == SK_CONST_FN_RESULT;
+ }
+ 
+ template <> struct default_hash_traits<const_fn_result_svalue::key_t>
+ : public member_function_hash_traits<const_fn_result_svalue::key_t>
+ {
+   static const bool empty_zero_p = true;
+ };
  
  #endif /* GCC_ANALYZER_SVALUE_H */
diff -Nrcpad gcc-11.3.0/gcc/analyzer/trimmed-graph.cc gcc-12.1.0/gcc/analyzer/trimmed-graph.cc
*** gcc-11.3.0/gcc/analyzer/trimmed-graph.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/trimmed-graph.cc	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Trimming an exploded graph to a subset of nodes and edges.
!    Copyright (C) 2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Trimming an exploded graph to a subset of nodes and edges.
!    Copyright (C) 2021-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/analyzer/trimmed-graph.h gcc-12.1.0/gcc/analyzer/trimmed-graph.h
*** gcc-11.3.0/gcc/analyzer/trimmed-graph.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/analyzer/trimmed-graph.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Trimming an exploded graph to a subset of nodes and edges.
!    Copyright (C) 2021 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
--- 1,5 ----
  /* Trimming an exploded graph to a subset of nodes and edges.
!    Copyright (C) 2021-2022 Free Software Foundation, Inc.
     Contributed by David Malcolm <dmalcolm@redhat.com>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/array-traits.h gcc-12.1.0/gcc/array-traits.h
*** gcc-11.3.0/gcc/array-traits.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/array-traits.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Descriptions of array-like objects.
!    Copyright (C) 2019-2021 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Descriptions of array-like objects.
!    Copyright (C) 2019-2022 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
diff -Nrcpad gcc-11.3.0/gcc/asan.c gcc-12.1.0/gcc/asan.c
*** gcc-11.3.0/gcc/asan.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/asan.c	Thu Jan  1 00:00:00 1970
***************
*** 1,4733 ****
- /* AddressSanitizer, a fast memory error detector.
-    Copyright (C) 2012-2021 Free Software Foundation, Inc.
-    Contributed by Kostya Serebryany <kcc@google.com>
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "backend.h"
- #include "target.h"
- #include "rtl.h"
- #include "tree.h"
- #include "gimple.h"
- #include "cfghooks.h"
- #include "alloc-pool.h"
- #include "tree-pass.h"
- #include "memmodel.h"
- #include "tm_p.h"
- #include "ssa.h"
- #include "stringpool.h"
- #include "tree-ssanames.h"
- #include "optabs.h"
- #include "emit-rtl.h"
- #include "cgraph.h"
- #include "gimple-pretty-print.h"
- #include "alias.h"
- #include "fold-const.h"
- #include "cfganal.h"
- #include "gimplify.h"
- #include "gimple-iterator.h"
- #include "varasm.h"
- #include "stor-layout.h"
- #include "tree-iterator.h"
- #include "stringpool.h"
- #include "attribs.h"
- #include "asan.h"
- #include "dojump.h"
- #include "explow.h"
- #include "expr.h"
- #include "output.h"
- #include "langhooks.h"
- #include "cfgloop.h"
- #include "gimple-builder.h"
- #include "gimple-fold.h"
- #include "ubsan.h"
- #include "builtins.h"
- #include "fnmatch.h"
- #include "tree-inline.h"
- #include "tree-ssa.h"
- #include "tree-eh.h"
- 
- /* AddressSanitizer finds out-of-bounds and use-after-free bugs
-    with <2x slowdown on average.
- 
-    The tool consists of two parts:
-    instrumentation module (this file) and a run-time library.
-    The instrumentation module adds a run-time check before every memory insn.
-      For a 8- or 16- byte load accessing address X:
-        ShadowAddr = (X >> 3) + Offset
-        ShadowValue = *(char*)ShadowAddr;  // *(short*) for 16-byte access.
-        if (ShadowValue)
- 	 __asan_report_load8(X);
-      For a load of N bytes (N=1, 2 or 4) from address X:
-        ShadowAddr = (X >> 3) + Offset
-        ShadowValue = *(char*)ShadowAddr;
-        if (ShadowValue)
- 	 if ((X & 7) + N - 1 > ShadowValue)
- 	   __asan_report_loadN(X);
-    Stores are instrumented similarly, but using __asan_report_storeN functions.
-    A call too __asan_init_vN() is inserted to the list of module CTORs.
-    N is the version number of the AddressSanitizer API. The changes between the
-    API versions are listed in libsanitizer/asan/asan_interface_internal.h.
- 
-    The run-time library redefines malloc (so that redzone are inserted around
-    the allocated memory) and free (so that reuse of free-ed memory is delayed),
-    provides __asan_report* and __asan_init_vN functions.
- 
-    Read more:
-    http://code.google.com/p/address-sanitizer/wiki/AddressSanitizerAlgorithm
- 
-    The current implementation supports detection of out-of-bounds and
-    use-after-free in the heap, on the stack and for global variables.
- 
-    [Protection of stack variables]
- 
-    To understand how detection of out-of-bounds and use-after-free works
-    for stack variables, lets look at this example on x86_64 where the
-    stack grows downward:
- 
-      int
-      foo ()
-      {
-        char a[24] = {0};
-        int b[2] = {0};
- 
-        a[5] = 1;
-        b[1] = 2;
- 
-        return a[5] + b[1];
-      }
- 
-    For this function, the stack protected by asan will be organized as
-    follows, from the top of the stack to the bottom:
- 
-    Slot 1/ [red zone of 32 bytes called 'RIGHT RedZone']
- 
-    Slot 2/ [8 bytes of red zone, that adds up to the space of 'a' to make
- 	   the next slot be 32 bytes aligned; this one is called Partial
- 	   Redzone; this 32 bytes alignment is an asan constraint]
- 
-    Slot 3/ [24 bytes for variable 'a']
- 
-    Slot 4/ [red zone of 32 bytes called 'Middle RedZone']
- 
-    Slot 5/ [24 bytes of Partial Red Zone (similar to slot 2]
- 
-    Slot 6/ [8 bytes for variable 'b']
- 
-    Slot 7/ [32 bytes of Red Zone at the bottom of the stack, called
- 	    'LEFT RedZone']
- 
-    The 32 bytes of LEFT red zone at the bottom of the stack can be
-    decomposed as such:
- 
-      1/ The first 8 bytes contain a magical asan number that is always
-      0x41B58AB3.
- 
-      2/ The following 8 bytes contains a pointer to a string (to be
-      parsed at runtime by the runtime asan library), which format is
-      the following:
- 
-       "<function-name> <space> <num-of-variables-on-the-stack>
-       (<32-bytes-aligned-offset-in-bytes-of-variable> <space>
-       <length-of-var-in-bytes> ){n} "
- 
- 	where '(...){n}' means the content inside the parenthesis occurs 'n'
- 	times, with 'n' being the number of variables on the stack.
- 
-      3/ The following 8 bytes contain the PC of the current function which
-      will be used by the run-time library to print an error message.
- 
-      4/ The following 8 bytes are reserved for internal use by the run-time.
- 
-    The shadow memory for that stack layout is going to look like this:
- 
-      - content of shadow memory 8 bytes for slot 7: 0xF1F1F1F1.
-        The F1 byte pattern is a magic number called
-        ASAN_STACK_MAGIC_LEFT and is a way for the runtime to know that
-        the memory for that shadow byte is part of a the LEFT red zone
-        intended to seat at the bottom of the variables on the stack.
- 
-      - content of shadow memory 8 bytes for slots 6 and 5:
-        0xF4F4F400.  The F4 byte pattern is a magic number
-        called ASAN_STACK_MAGIC_PARTIAL.  It flags the fact that the
-        memory region for this shadow byte is a PARTIAL red zone
-        intended to pad a variable A, so that the slot following
-        {A,padding} is 32 bytes aligned.
- 
-        Note that the fact that the least significant byte of this
-        shadow memory content is 00 means that 8 bytes of its
-        corresponding memory (which corresponds to the memory of
-        variable 'b') is addressable.
- 
-      - content of shadow memory 8 bytes for slot 4: 0xF2F2F2F2.
-        The F2 byte pattern is a magic number called
-        ASAN_STACK_MAGIC_MIDDLE.  It flags the fact that the memory
-        region for this shadow byte is a MIDDLE red zone intended to
-        seat between two 32 aligned slots of {variable,padding}.
- 
-      - content of shadow memory 8 bytes for slot 3 and 2:
-        0xF4000000.  This represents is the concatenation of
-        variable 'a' and the partial red zone following it, like what we
-        had for variable 'b'.  The least significant 3 bytes being 00
-        means that the 3 bytes of variable 'a' are addressable.
- 
-      - content of shadow memory 8 bytes for slot 1: 0xF3F3F3F3.
-        The F3 byte pattern is a magic number called
-        ASAN_STACK_MAGIC_RIGHT.  It flags the fact that the memory
-        region for this shadow byte is a RIGHT red zone intended to seat
-        at the top of the variables of the stack.
- 
-    Note that the real variable layout is done in expand_used_vars in
-    cfgexpand.c.  As far as Address Sanitizer is concerned, it lays out
-    stack variables as well as the different red zones, emits some
-    prologue code to populate the shadow memory as to poison (mark as
-    non-accessible) the regions of the red zones and mark the regions of
-    stack variables as accessible, and emit some epilogue code to
-    un-poison (mark as accessible) the regions of red zones right before
-    the function exits.
- 
-    [Protection of global variables]
- 
-    The basic idea is to insert a red zone between two global variables
-    and install a constructor function that calls the asan runtime to do
-    the populating of the relevant shadow memory regions at load time.
- 
-    So the global variables are laid out as to insert a red zone between
-    them. The size of the red zones is so that each variable starts on a
-    32 bytes boundary.
- 
-    Then a constructor function is installed so that, for each global
-    variable, it calls the runtime asan library function
-    __asan_register_globals_with an instance of this type:
- 
-      struct __asan_global
-      {
-        // Address of the beginning of the global variable.
-        const void *__beg;
- 
-        // Initial size of the global variable.
-        uptr __size;
- 
-        // Size of the global variable + size of the red zone.  This
-        //   size is 32 bytes aligned.
-        uptr __size_with_redzone;
- 
-        // Name of the global variable.
-        const void *__name;
- 
-        // Name of the module where the global variable is declared.
-        const void *__module_name;
- 
-        // 1 if it has dynamic initialization, 0 otherwise.
-        uptr __has_dynamic_init;
- 
-        // A pointer to struct that contains source location, could be NULL.
-        __asan_global_source_location *__location;
-      }
- 
-    A destructor function that calls the runtime asan library function
-    _asan_unregister_globals is also installed.  */
- 
- static unsigned HOST_WIDE_INT asan_shadow_offset_value;
- static bool asan_shadow_offset_computed;
- static vec<char *> sanitized_sections;
- static tree last_alloca_addr;
- 
- /* Set of variable declarations that are going to be guarded by
-    use-after-scope sanitizer.  */
- 
- hash_set<tree> *asan_handled_variables = NULL;
- 
- hash_set <tree> *asan_used_labels = NULL;
- 
- /* Global variables for HWASAN stack tagging.  */
- /* hwasan_frame_tag_offset records the offset from the frame base tag that the
-    next object should have.  */
- static uint8_t hwasan_frame_tag_offset = 0;
- /* hwasan_frame_base_ptr is a pointer with the same address as
-    `virtual_stack_vars_rtx` for the current frame, and with the frame base tag
-    stored in it.  N.b. this global RTX does not need to be marked GTY, but is
-    done so anyway.  The need is not there since all uses are in just one pass
-    (cfgexpand) and there are no calls to ggc_collect between the uses.  We mark
-    it GTY(()) anyway to allow the use of the variable later on if needed by
-    future features.  */
- static GTY(()) rtx hwasan_frame_base_ptr = NULL_RTX;
- /* hwasan_frame_base_init_seq is the sequence of RTL insns that will initialize
-    the hwasan_frame_base_ptr.  When the hwasan_frame_base_ptr is requested, we
-    generate this sequence but do not emit it.  If the sequence was created it
-    is emitted once the function body has been expanded.
- 
-    This delay is because the frame base pointer may be needed anywhere in the
-    function body, or needed by the expand_used_vars function.  Emitting once in
-    a known place is simpler than requiring the emission of the instructions to
-    be know where it should go depending on the first place the hwasan frame
-    base is needed.  */
- static GTY(()) rtx_insn *hwasan_frame_base_init_seq = NULL;
- 
- /* Structure defining the extent of one object on the stack that HWASAN needs
-    to tag in the corresponding shadow stack space.
- 
-    The range this object spans on the stack is between `untagged_base +
-    nearest_offset` and `untagged_base + farthest_offset`.
-    `tagged_base` is an rtx containing the same value as `untagged_base` but
-    with a random tag stored in the top byte.  We record both `untagged_base`
-    and `tagged_base` so that `hwasan_emit_prologue` can use both without having
-    to emit RTL into the instruction stream to re-calculate one from the other.
-    (`hwasan_emit_prologue` needs to use both bases since the
-    __hwasan_tag_memory call it emits uses an untagged value, and it calculates
-    the tag to store in shadow memory based on the tag_offset plus the tag in
-    tagged_base).  */
- struct hwasan_stack_var
- {
-   rtx untagged_base;
-   rtx tagged_base;
-   poly_int64 nearest_offset;
-   poly_int64 farthest_offset;
-   uint8_t tag_offset;
- };
- 
- /* Variable recording all stack variables that HWASAN needs to tag.
-    Does not need to be marked as GTY(()) since every use is in the cfgexpand
-    pass and gcc_collect is not called in the middle of that pass.  */
- static vec<hwasan_stack_var> hwasan_tagged_stack_vars;
- 
- 
- /* Sets shadow offset to value in string VAL.  */
- 
- bool
- set_asan_shadow_offset (const char *val)
- {
-   char *endp;
- 
-   errno = 0;
- #ifdef HAVE_LONG_LONG
-   asan_shadow_offset_value = strtoull (val, &endp, 0);
- #else
-   asan_shadow_offset_value = strtoul (val, &endp, 0);
- #endif
-   if (!(*val != '\0' && *endp == '\0' && errno == 0))
-     return false;
- 
-   asan_shadow_offset_computed = true;
- 
-   return true;
- }
- 
- /* Set list of user-defined sections that need to be sanitized.  */
- 
- void
- set_sanitized_sections (const char *sections)
- {
-   char *pat;
-   unsigned i;
-   FOR_EACH_VEC_ELT (sanitized_sections, i, pat)
-     free (pat);
-   sanitized_sections.truncate (0);
- 
-   for (const char *s = sections; *s; )
-     {
-       const char *end;
-       for (end = s; *end && *end != ','; ++end);
-       size_t len = end - s;
-       sanitized_sections.safe_push (xstrndup (s, len));
-       s = *end ? end + 1 : end;
-     }
- }
- 
- bool
- asan_mark_p (gimple *stmt, enum asan_mark_flags flag)
- {
-   return (gimple_call_internal_p (stmt, IFN_ASAN_MARK)
- 	  && tree_to_uhwi (gimple_call_arg (stmt, 0)) == flag);
- }
- 
- bool
- asan_sanitize_stack_p (void)
- {
-   return (sanitize_flags_p (SANITIZE_ADDRESS) && param_asan_stack);
- }
- 
- bool
- asan_sanitize_allocas_p (void)
- {
-   return (asan_sanitize_stack_p () && param_asan_protect_allocas);
- }
- 
- bool
- asan_instrument_reads (void)
- {
-   return (sanitize_flags_p (SANITIZE_ADDRESS) && param_asan_instrument_reads);
- }
- 
- bool
- asan_instrument_writes (void)
- {
-   return (sanitize_flags_p (SANITIZE_ADDRESS) && param_asan_instrument_writes);
- }
- 
- bool
- asan_memintrin (void)
- {
-   return (sanitize_flags_p (SANITIZE_ADDRESS) && param_asan_memintrin);
- }
- 
- 
- /* Checks whether section SEC should be sanitized.  */
- 
- static bool
- section_sanitized_p (const char *sec)
- {
-   char *pat;
-   unsigned i;
-   FOR_EACH_VEC_ELT (sanitized_sections, i, pat)
-     if (fnmatch (pat, sec, FNM_PERIOD) == 0)
-       return true;
-   return false;
- }
- 
- /* Returns Asan shadow offset.  */
- 
- static unsigned HOST_WIDE_INT
- asan_shadow_offset ()
- {
-   if (!asan_shadow_offset_computed)
-     {
-       asan_shadow_offset_computed = true;
-       asan_shadow_offset_value = targetm.asan_shadow_offset ();
-     }
-   return asan_shadow_offset_value;
- }
- 
- /* Returns Asan shadow offset has been set.  */
- bool
- asan_shadow_offset_set_p ()
- {
-   return asan_shadow_offset_computed;
- }
- 
- alias_set_type asan_shadow_set = -1;
- 
- /* Pointer types to 1, 2 or 4 byte integers in shadow memory.  A separate
-    alias set is used for all shadow memory accesses.  */
- static GTY(()) tree shadow_ptr_types[3];
- 
- /* Decl for __asan_option_detect_stack_use_after_return.  */
- static GTY(()) tree asan_detect_stack_use_after_return;
- 
- /* Hashtable support for memory references used by gimple
-    statements.  */
- 
- /* This type represents a reference to a memory region.  */
- struct asan_mem_ref
- {
-   /* The expression of the beginning of the memory region.  */
-   tree start;
- 
-   /* The size of the access.  */
-   HOST_WIDE_INT access_size;
- };
- 
- object_allocator <asan_mem_ref> asan_mem_ref_pool ("asan_mem_ref");
- 
- /* Initializes an instance of asan_mem_ref.  */
- 
- static void
- asan_mem_ref_init (asan_mem_ref *ref, tree start, HOST_WIDE_INT access_size)
- {
-   ref->start = start;
-   ref->access_size = access_size;
- }
- 
- /* Allocates memory for an instance of asan_mem_ref into the memory
-    pool returned by asan_mem_ref_get_alloc_pool and initialize it.
-    START is the address of (or the expression pointing to) the
-    beginning of memory reference.  ACCESS_SIZE is the size of the
-    access to the referenced memory.  */
- 
- static asan_mem_ref*
- asan_mem_ref_new (tree start, HOST_WIDE_INT access_size)
- {
-   asan_mem_ref *ref = asan_mem_ref_pool.allocate ();
- 
-   asan_mem_ref_init (ref, start, access_size);
-   return ref;
- }
- 
- /* This builds and returns a pointer to the end of the memory region
-    that starts at START and of length LEN.  */
- 
- tree
- asan_mem_ref_get_end (tree start, tree len)
- {
-   if (len == NULL_TREE || integer_zerop (len))
-     return start;
- 
-   if (!ptrofftype_p (len))
-     len = convert_to_ptrofftype (len);
- 
-   return fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (start), start, len);
- }
- 
- /*  Return a tree expression that represents the end of the referenced
-     memory region.  Beware that this function can actually build a new
-     tree expression.  */
- 
- tree
- asan_mem_ref_get_end (const asan_mem_ref *ref, tree len)
- {
-   return asan_mem_ref_get_end (ref->start, len);
- }
- 
- struct asan_mem_ref_hasher : nofree_ptr_hash <asan_mem_ref>
- {
-   static inline hashval_t hash (const asan_mem_ref *);
-   static inline bool equal (const asan_mem_ref *, const asan_mem_ref *);
- };
- 
- /* Hash a memory reference.  */
- 
- inline hashval_t
- asan_mem_ref_hasher::hash (const asan_mem_ref *mem_ref)
- {
-   return iterative_hash_expr (mem_ref->start, 0);
- }
- 
- /* Compare two memory references.  We accept the length of either
-    memory references to be NULL_TREE.  */
- 
- inline bool
- asan_mem_ref_hasher::equal (const asan_mem_ref *m1,
- 			    const asan_mem_ref *m2)
- {
-   return operand_equal_p (m1->start, m2->start, 0);
- }
- 
- static hash_table<asan_mem_ref_hasher> *asan_mem_ref_ht;
- 
- /* Returns a reference to the hash table containing memory references.
-    This function ensures that the hash table is created.  Note that
-    this hash table is updated by the function
-    update_mem_ref_hash_table.  */
- 
- static hash_table<asan_mem_ref_hasher> *
- get_mem_ref_hash_table ()
- {
-   if (!asan_mem_ref_ht)
-     asan_mem_ref_ht = new hash_table<asan_mem_ref_hasher> (10);
- 
-   return asan_mem_ref_ht;
- }
- 
- /* Clear all entries from the memory references hash table.  */
- 
- static void
- empty_mem_ref_hash_table ()
- {
-   if (asan_mem_ref_ht)
-     asan_mem_ref_ht->empty ();
- }
- 
- /* Free the memory references hash table.  */
- 
- static void
- free_mem_ref_resources ()
- {
-   delete asan_mem_ref_ht;
-   asan_mem_ref_ht = NULL;
- 
-   asan_mem_ref_pool.release ();
- }
- 
- /* Return true iff the memory reference REF has been instrumented.  */
- 
- static bool
- has_mem_ref_been_instrumented (tree ref, HOST_WIDE_INT access_size)
- {
-   asan_mem_ref r;
-   asan_mem_ref_init (&r, ref, access_size);
- 
-   asan_mem_ref *saved_ref = get_mem_ref_hash_table ()->find (&r);
-   return saved_ref && saved_ref->access_size >= access_size;
- }
- 
- /* Return true iff the memory reference REF has been instrumented.  */
- 
- static bool
- has_mem_ref_been_instrumented (const asan_mem_ref *ref)
- {
-   return has_mem_ref_been_instrumented (ref->start, ref->access_size);
- }
- 
- /* Return true iff access to memory region starting at REF and of
-    length LEN has been instrumented.  */
- 
- static bool
- has_mem_ref_been_instrumented (const asan_mem_ref *ref, tree len)
- {
-   HOST_WIDE_INT size_in_bytes
-     = tree_fits_shwi_p (len) ? tree_to_shwi (len) : -1;
- 
-   return size_in_bytes != -1
-     && has_mem_ref_been_instrumented (ref->start, size_in_bytes);
- }
- 
- /* Set REF to the memory reference present in a gimple assignment
-    ASSIGNMENT.  Return true upon successful completion, false
-    otherwise.  */
- 
- static bool
- get_mem_ref_of_assignment (const gassign *assignment,
- 			   asan_mem_ref *ref,
- 			   bool *ref_is_store)
- {
-   gcc_assert (gimple_assign_single_p (assignment));
- 
-   if (gimple_store_p (assignment)
-       && !gimple_clobber_p (assignment))
-     {
-       ref->start = gimple_assign_lhs (assignment);
-       *ref_is_store = true;
-     }
-   else if (gimple_assign_load_p (assignment))
-     {
-       ref->start = gimple_assign_rhs1 (assignment);
-       *ref_is_store = false;
-     }
-   else
-     return false;
- 
-   ref->access_size = int_size_in_bytes (TREE_TYPE (ref->start));
-   return true;
- }
- 
- /* Return address of last allocated dynamic alloca.  */
- 
- static tree
- get_last_alloca_addr ()
- {
-   if (last_alloca_addr)
-     return last_alloca_addr;
- 
-   last_alloca_addr = create_tmp_reg (ptr_type_node, "last_alloca_addr");
-   gassign *g = gimple_build_assign (last_alloca_addr, null_pointer_node);
-   edge e = single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun));
-   gsi_insert_on_edge_immediate (e, g);
-   return last_alloca_addr;
- }
- 
- /* Insert __asan_allocas_unpoison (top, bottom) call before
-    __builtin_stack_restore (new_sp) call.
-    The pseudocode of this routine should look like this:
-      top = last_alloca_addr;
-      bot = new_sp;
-      __asan_allocas_unpoison (top, bot);
-      last_alloca_addr = new_sp;
-      __builtin_stack_restore (new_sp);
-    In general, we can't use new_sp as bot parameter because on some
-    architectures SP has non zero offset from dynamic stack area.  Moreover, on
-    some architectures this offset (STACK_DYNAMIC_OFFSET) becomes known for each
-    particular function only after all callees were expanded to rtl.
-    The most noticeable example is PowerPC{,64}, see
-    http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#DYNAM-STACK.
-    To overcome the issue we use following trick: pass new_sp as a second
-    parameter to __asan_allocas_unpoison and rewrite it during expansion with
-    new_sp + (virtual_dynamic_stack_rtx - sp) later in
-    expand_asan_emit_allocas_unpoison function.
- 
-    HWASAN needs to do very similar, the eventual pseudocode should be:
-       __hwasan_tag_memory (virtual_stack_dynamic_rtx,
- 			   0,
- 			   new_sp - sp);
-       __builtin_stack_restore (new_sp)
- 
-    Need to use the same trick to handle STACK_DYNAMIC_OFFSET as described
-    above.  */
- 
- static void
- handle_builtin_stack_restore (gcall *call, gimple_stmt_iterator *iter)
- {
-   if (!iter
-       || !(asan_sanitize_allocas_p () || hwasan_sanitize_allocas_p ()))
-     return;
- 
-   tree restored_stack = gimple_call_arg (call, 0);
- 
-   gimple *g;
- 
-   if (hwasan_sanitize_allocas_p ())
-     {
-       enum internal_fn fn = IFN_HWASAN_ALLOCA_UNPOISON;
-       /* There is only one piece of information `expand_HWASAN_ALLOCA_UNPOISON`
- 	 needs to work.  This is the length of the area that we're
- 	 deallocating.  Since the stack pointer is known at expand time, the
- 	 position of the new stack pointer after deallocation is enough
- 	 information to calculate this length.  */
-       g = gimple_build_call_internal (fn, 1, restored_stack);
-     }
-   else
-     {
-       tree last_alloca = get_last_alloca_addr ();
-       tree fn = builtin_decl_implicit (BUILT_IN_ASAN_ALLOCAS_UNPOISON);
-       g = gimple_build_call (fn, 2, last_alloca, restored_stack);
-       gsi_insert_before (iter, g, GSI_SAME_STMT);
-       g = gimple_build_assign (last_alloca, restored_stack);
-     }
- 
-   gsi_insert_before (iter, g, GSI_SAME_STMT);
- }
- 
- /* Deploy and poison redzones around __builtin_alloca call.  To do this, we
-    should replace this call with another one with changed parameters and
-    replace all its uses with new address, so
-        addr = __builtin_alloca (old_size, align);
-    is replaced by
-        left_redzone_size = max (align, ASAN_RED_ZONE_SIZE);
-    Following two statements are optimized out if we know that
-    old_size & (ASAN_RED_ZONE_SIZE - 1) == 0, i.e. alloca doesn't need partial
-    redzone.
-        misalign = old_size & (ASAN_RED_ZONE_SIZE - 1);
-        partial_redzone_size = ASAN_RED_ZONE_SIZE - misalign;
-        right_redzone_size = ASAN_RED_ZONE_SIZE;
-        additional_size = left_redzone_size + partial_redzone_size +
-                          right_redzone_size;
-        new_size = old_size + additional_size;
-        new_alloca = __builtin_alloca (new_size, max (align, 32))
-        __asan_alloca_poison (new_alloca, old_size)
-        addr = new_alloca + max (align, ASAN_RED_ZONE_SIZE);
-        last_alloca_addr = new_alloca;
-    ADDITIONAL_SIZE is added to make new memory allocation contain not only
-    requested memory, but also left, partial and right redzones as well as some
-    additional space, required by alignment.  */
- 
- static void
- handle_builtin_alloca (gcall *call, gimple_stmt_iterator *iter)
- {
-   if (!iter
-       || !(asan_sanitize_allocas_p () || hwasan_sanitize_allocas_p ()))
-     return;
- 
-   gassign *g;
-   gcall *gg;
-   tree callee = gimple_call_fndecl (call);
-   tree lhs = gimple_call_lhs (call);
-   tree old_size = gimple_call_arg (call, 0);
-   tree ptr_type = lhs ? TREE_TYPE (lhs) : ptr_type_node;
-   tree partial_size = NULL_TREE;
-   unsigned int align
-     = DECL_FUNCTION_CODE (callee) == BUILT_IN_ALLOCA
-       ? 0 : tree_to_uhwi (gimple_call_arg (call, 1));
- 
-   bool throws = false;
-   edge e = NULL;
-   if (stmt_can_throw_internal (cfun, call))
-     {
-       if (!lhs)
- 	return;
-       throws = true;
-       e = find_fallthru_edge (gsi_bb (*iter)->succs);
-     }
- 
-   if (hwasan_sanitize_allocas_p ())
-     {
-       gimple_seq stmts = NULL;
-       location_t loc = gimple_location (gsi_stmt (*iter));
-       /*
- 	 HWASAN needs a different expansion.
- 
- 	 addr = __builtin_alloca (size, align);
- 
- 	 should be replaced by
- 
- 	 new_size = size rounded up to HWASAN_TAG_GRANULE_SIZE byte alignment;
- 	 untagged_addr = __builtin_alloca (new_size, align);
- 	 tag = __hwasan_choose_alloca_tag ();
- 	 addr = ifn_HWASAN_SET_TAG (untagged_addr, tag);
- 	 __hwasan_tag_memory (untagged_addr, tag, new_size);
- 	*/
-       /* Ensure alignment at least HWASAN_TAG_GRANULE_SIZE bytes so we start on
- 	 a tag granule.  */
-       align = align > HWASAN_TAG_GRANULE_SIZE ? align : HWASAN_TAG_GRANULE_SIZE;
- 
-       tree old_size = gimple_call_arg (call, 0);
-       tree new_size = gimple_build_round_up (&stmts, loc, size_type_node,
- 					     old_size,
- 					     HWASAN_TAG_GRANULE_SIZE);
- 
-       /* Make the alloca call */
-       tree untagged_addr
- 	= gimple_build (&stmts, loc,
- 			as_combined_fn (BUILT_IN_ALLOCA_WITH_ALIGN), ptr_type,
- 			new_size, build_int_cst (size_type_node, align));
- 
-       /* Choose the tag.
- 	 Here we use an internal function so we can choose the tag at expand
- 	 time.  We need the decision to be made after stack variables have been
- 	 assigned their tag (i.e. once the hwasan_frame_tag_offset variable has
- 	 been set to one after the last stack variables tag).  */
-       tree tag = gimple_build (&stmts, loc, CFN_HWASAN_CHOOSE_TAG,
- 			       unsigned_char_type_node);
- 
-       /* Add tag to pointer.  */
-       tree addr
- 	= gimple_build (&stmts, loc, CFN_HWASAN_SET_TAG, ptr_type,
- 			untagged_addr, tag);
- 
-       /* Tag shadow memory.
- 	 NOTE: require using `untagged_addr` here for libhwasan API.  */
-       gimple_build (&stmts, loc, as_combined_fn (BUILT_IN_HWASAN_TAG_MEM),
- 		    void_type_node, untagged_addr, tag, new_size);
- 
-       /* Insert the built up code sequence into the original instruction stream
- 	 the iterator points to.  */
-       gsi_insert_seq_before (iter, stmts, GSI_SAME_STMT);
- 
-       /* Finally, replace old alloca ptr with NEW_ALLOCA.  */
-       replace_call_with_value (iter, addr);
-       return;
-     }
- 
-   tree last_alloca = get_last_alloca_addr ();
-   const HOST_WIDE_INT redzone_mask = ASAN_RED_ZONE_SIZE - 1;
- 
-   /* If ALIGN > ASAN_RED_ZONE_SIZE, we embed left redzone into first ALIGN
-      bytes of allocated space.  Otherwise, align alloca to ASAN_RED_ZONE_SIZE
-      manually.  */
-   align = MAX (align, ASAN_RED_ZONE_SIZE * BITS_PER_UNIT);
- 
-   tree alloca_rz_mask = build_int_cst (size_type_node, redzone_mask);
-   tree redzone_size = build_int_cst (size_type_node, ASAN_RED_ZONE_SIZE);
- 
-   /* Extract lower bits from old_size.  */
-   wide_int size_nonzero_bits = get_nonzero_bits (old_size);
-   wide_int rz_mask
-     = wi::uhwi (redzone_mask, wi::get_precision (size_nonzero_bits));
-   wide_int old_size_lower_bits = wi::bit_and (size_nonzero_bits, rz_mask);
- 
-   /* If alloca size is aligned to ASAN_RED_ZONE_SIZE, we don't need partial
-      redzone.  Otherwise, compute its size here.  */
-   if (wi::ne_p (old_size_lower_bits, 0))
-     {
-       /* misalign = size & (ASAN_RED_ZONE_SIZE - 1)
-          partial_size = ASAN_RED_ZONE_SIZE - misalign.  */
-       g = gimple_build_assign (make_ssa_name (size_type_node, NULL),
- 			       BIT_AND_EXPR, old_size, alloca_rz_mask);
-       gsi_insert_before (iter, g, GSI_SAME_STMT);
-       tree misalign = gimple_assign_lhs (g);
-       g = gimple_build_assign (make_ssa_name (size_type_node, NULL), MINUS_EXPR,
- 			       redzone_size, misalign);
-       gsi_insert_before (iter, g, GSI_SAME_STMT);
-       partial_size = gimple_assign_lhs (g);
-     }
- 
-   /* additional_size = align + ASAN_RED_ZONE_SIZE.  */
-   tree additional_size = build_int_cst (size_type_node, align / BITS_PER_UNIT
- 							+ ASAN_RED_ZONE_SIZE);
-   /* If alloca has partial redzone, include it to additional_size too.  */
-   if (partial_size)
-     {
-       /* additional_size += partial_size.  */
-       g = gimple_build_assign (make_ssa_name (size_type_node), PLUS_EXPR,
- 			       partial_size, additional_size);
-       gsi_insert_before (iter, g, GSI_SAME_STMT);
-       additional_size = gimple_assign_lhs (g);
-     }
- 
-   /* new_size = old_size + additional_size.  */
-   g = gimple_build_assign (make_ssa_name (size_type_node), PLUS_EXPR, old_size,
- 			   additional_size);
-   gsi_insert_before (iter, g, GSI_SAME_STMT);
-   tree new_size = gimple_assign_lhs (g);
- 
-   /* Build new __builtin_alloca call:
-        new_alloca_with_rz = __builtin_alloca (new_size, align).  */
-   tree fn = builtin_decl_implicit (BUILT_IN_ALLOCA_WITH_ALIGN);
-   gg = gimple_build_call (fn, 2, new_size,
- 			  build_int_cst (size_type_node, align));
-   tree new_alloca_with_rz = make_ssa_name (ptr_type, gg);
-   gimple_call_set_lhs (gg, new_alloca_with_rz);
-   if (throws)
-     {
-       gimple_call_set_lhs (call, NULL);
-       gsi_replace (iter, gg, true);
-     }
-   else
-     gsi_insert_before (iter, gg, GSI_SAME_STMT);
- 
-   /* new_alloca = new_alloca_with_rz + align.  */
-   g = gimple_build_assign (make_ssa_name (ptr_type), POINTER_PLUS_EXPR,
- 			   new_alloca_with_rz,
- 			   build_int_cst (size_type_node,
- 					  align / BITS_PER_UNIT));
-   gimple_stmt_iterator gsi = gsi_none ();
-   if (throws)
-     {
-       gsi_insert_on_edge_immediate (e, g);
-       gsi = gsi_for_stmt (g);
-     }
-   else
-     gsi_insert_before (iter, g, GSI_SAME_STMT);
-   tree new_alloca = gimple_assign_lhs (g);
- 
-   /* Poison newly created alloca redzones:
-       __asan_alloca_poison (new_alloca, old_size).  */
-   fn = builtin_decl_implicit (BUILT_IN_ASAN_ALLOCA_POISON);
-   gg = gimple_build_call (fn, 2, new_alloca, old_size);
-   if (throws)
-     gsi_insert_after (&gsi, gg, GSI_NEW_STMT);
-   else
-     gsi_insert_before (iter, gg, GSI_SAME_STMT);
- 
-   /* Save new_alloca_with_rz value into last_alloca to use it during
-      allocas unpoisoning.  */
-   g = gimple_build_assign (last_alloca, new_alloca_with_rz);
-   if (throws)
-     gsi_insert_after (&gsi, g, GSI_NEW_STMT);
-   else
-     gsi_insert_before (iter, g, GSI_SAME_STMT);
- 
-   /* Finally, replace old alloca ptr with NEW_ALLOCA.  */
-   if (throws)
-     {
-       g = gimple_build_assign (lhs, new_alloca);
-       gsi_insert_after (&gsi, g, GSI_NEW_STMT);
-     }
-   else
-     replace_call_with_value (iter, new_alloca);
- }
- 
- /* Return the memory references contained in a gimple statement
-    representing a builtin call that has to do with memory access.  */
- 
- static bool
- get_mem_refs_of_builtin_call (gcall *call,
- 			      asan_mem_ref *src0,
- 			      tree *src0_len,
- 			      bool *src0_is_store,
- 			      asan_mem_ref *src1,
- 			      tree *src1_len,
- 			      bool *src1_is_store,
- 			      asan_mem_ref *dst,
- 			      tree *dst_len,
- 			      bool *dst_is_store,
- 			      bool *dest_is_deref,
- 			      bool *intercepted_p,
- 			      gimple_stmt_iterator *iter = NULL)
- {
-   gcc_checking_assert (gimple_call_builtin_p (call, BUILT_IN_NORMAL));
- 
-   tree callee = gimple_call_fndecl (call);
-   tree source0 = NULL_TREE, source1 = NULL_TREE,
-     dest = NULL_TREE, len = NULL_TREE;
-   bool is_store = true, got_reference_p = false;
-   HOST_WIDE_INT access_size = 1;
- 
-   *intercepted_p = asan_intercepted_p ((DECL_FUNCTION_CODE (callee)));
- 
-   switch (DECL_FUNCTION_CODE (callee))
-     {
-       /* (s, s, n) style memops.  */
-     case BUILT_IN_BCMP:
-     case BUILT_IN_MEMCMP:
-       source0 = gimple_call_arg (call, 0);
-       source1 = gimple_call_arg (call, 1);
-       len = gimple_call_arg (call, 2);
-       break;
- 
-       /* (src, dest, n) style memops.  */
-     case BUILT_IN_BCOPY:
-       source0 = gimple_call_arg (call, 0);
-       dest = gimple_call_arg (call, 1);
-       len = gimple_call_arg (call, 2);
-       break;
- 
-       /* (dest, src, n) style memops.  */
-     case BUILT_IN_MEMCPY:
-     case BUILT_IN_MEMCPY_CHK:
-     case BUILT_IN_MEMMOVE:
-     case BUILT_IN_MEMMOVE_CHK:
-     case BUILT_IN_MEMPCPY:
-     case BUILT_IN_MEMPCPY_CHK:
-       dest = gimple_call_arg (call, 0);
-       source0 = gimple_call_arg (call, 1);
-       len = gimple_call_arg (call, 2);
-       break;
- 
-       /* (dest, n) style memops.  */
-     case BUILT_IN_BZERO:
-       dest = gimple_call_arg (call, 0);
-       len = gimple_call_arg (call, 1);
-       break;
- 
-       /* (dest, x, n) style memops*/
-     case BUILT_IN_MEMSET:
-     case BUILT_IN_MEMSET_CHK:
-       dest = gimple_call_arg (call, 0);
-       len = gimple_call_arg (call, 2);
-       break;
- 
-     case BUILT_IN_STRLEN:
-       /* Special case strlen here since its length is taken from its return
- 	 value.
- 
- 	 The approach taken by the sanitizers is to check a memory access
- 	 before it's taken.  For ASAN strlen is intercepted by libasan, so no
- 	 check is inserted by the compiler.
- 
- 	 This function still returns `true` and provides a length to the rest
- 	 of the ASAN pass in order to record what areas have been checked,
- 	 avoiding superfluous checks later on.
- 
- 	 HWASAN does not intercept any of these internal functions.
- 	 This means that checks for memory accesses must be inserted by the
- 	 compiler.
- 	 strlen is a special case, because we can tell the length from the
- 	 return of the function, but that is not known until after the function
- 	 has returned.
- 
- 	 Hence we can't check the memory access before it happens.
- 	 We could check the memory access after it has already happened, but
- 	 for now we choose to just ignore `strlen` calls.
- 	 This decision was simply made because that means the special case is
- 	 limited to this one case of this one function.  */
-       if (hwasan_sanitize_p ())
- 	return false;
-       source0 = gimple_call_arg (call, 0);
-       len = gimple_call_lhs (call);
-       break;
- 
-     case BUILT_IN_STACK_RESTORE:
-       handle_builtin_stack_restore (call, iter);
-       break;
- 
-     CASE_BUILT_IN_ALLOCA:
-       handle_builtin_alloca (call, iter);
-       break;
-     /* And now the __atomic* and __sync builtins.
-        These are handled differently from the classical memory
-        access builtins above.  */
- 
-     case BUILT_IN_ATOMIC_LOAD_1:
-       is_store = false;
-       /* FALLTHRU */
-     case BUILT_IN_SYNC_FETCH_AND_ADD_1:
-     case BUILT_IN_SYNC_FETCH_AND_SUB_1:
-     case BUILT_IN_SYNC_FETCH_AND_OR_1:
-     case BUILT_IN_SYNC_FETCH_AND_AND_1:
-     case BUILT_IN_SYNC_FETCH_AND_XOR_1:
-     case BUILT_IN_SYNC_FETCH_AND_NAND_1:
-     case BUILT_IN_SYNC_ADD_AND_FETCH_1:
-     case BUILT_IN_SYNC_SUB_AND_FETCH_1:
-     case BUILT_IN_SYNC_OR_AND_FETCH_1:
-     case BUILT_IN_SYNC_AND_AND_FETCH_1:
-     case BUILT_IN_SYNC_XOR_AND_FETCH_1:
-     case BUILT_IN_SYNC_NAND_AND_FETCH_1:
-     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1:
-     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1:
-     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_1:
-     case BUILT_IN_SYNC_LOCK_RELEASE_1:
-     case BUILT_IN_ATOMIC_EXCHANGE_1:
-     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1:
-     case BUILT_IN_ATOMIC_STORE_1:
-     case BUILT_IN_ATOMIC_ADD_FETCH_1:
-     case BUILT_IN_ATOMIC_SUB_FETCH_1:
-     case BUILT_IN_ATOMIC_AND_FETCH_1:
-     case BUILT_IN_ATOMIC_NAND_FETCH_1:
-     case BUILT_IN_ATOMIC_XOR_FETCH_1:
-     case BUILT_IN_ATOMIC_OR_FETCH_1:
-     case BUILT_IN_ATOMIC_FETCH_ADD_1:
-     case BUILT_IN_ATOMIC_FETCH_SUB_1:
-     case BUILT_IN_ATOMIC_FETCH_AND_1:
-     case BUILT_IN_ATOMIC_FETCH_NAND_1:
-     case BUILT_IN_ATOMIC_FETCH_XOR_1:
-     case BUILT_IN_ATOMIC_FETCH_OR_1:
-       access_size = 1;
-       goto do_atomic;
- 
-     case BUILT_IN_ATOMIC_LOAD_2:
-       is_store = false;
-       /* FALLTHRU */
-     case BUILT_IN_SYNC_FETCH_AND_ADD_2:
-     case BUILT_IN_SYNC_FETCH_AND_SUB_2:
-     case BUILT_IN_SYNC_FETCH_AND_OR_2:
-     case BUILT_IN_SYNC_FETCH_AND_AND_2:
-     case BUILT_IN_SYNC_FETCH_AND_XOR_2:
-     case BUILT_IN_SYNC_FETCH_AND_NAND_2:
-     case BUILT_IN_SYNC_ADD_AND_FETCH_2:
-     case BUILT_IN_SYNC_SUB_AND_FETCH_2:
-     case BUILT_IN_SYNC_OR_AND_FETCH_2:
-     case BUILT_IN_SYNC_AND_AND_FETCH_2:
-     case BUILT_IN_SYNC_XOR_AND_FETCH_2:
-     case BUILT_IN_SYNC_NAND_AND_FETCH_2:
-     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2:
-     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2:
-     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_2:
-     case BUILT_IN_SYNC_LOCK_RELEASE_2:
-     case BUILT_IN_ATOMIC_EXCHANGE_2:
-     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2:
-     case BUILT_IN_ATOMIC_STORE_2:
-     case BUILT_IN_ATOMIC_ADD_FETCH_2:
-     case BUILT_IN_ATOMIC_SUB_FETCH_2:
-     case BUILT_IN_ATOMIC_AND_FETCH_2:
-     case BUILT_IN_ATOMIC_NAND_FETCH_2:
-     case BUILT_IN_ATOMIC_XOR_FETCH_2:
-     case BUILT_IN_ATOMIC_OR_FETCH_2:
-     case BUILT_IN_ATOMIC_FETCH_ADD_2:
-     case BUILT_IN_ATOMIC_FETCH_SUB_2:
-     case BUILT_IN_ATOMIC_FETCH_AND_2:
-     case BUILT_IN_ATOMIC_FETCH_NAND_2:
-     case BUILT_IN_ATOMIC_FETCH_XOR_2:
-     case BUILT_IN_ATOMIC_FETCH_OR_2:
-       access_size = 2;
-       goto do_atomic;
- 
-     case BUILT_IN_ATOMIC_LOAD_4:
-       is_store = false;
-       /* FALLTHRU */
-     case BUILT_IN_SYNC_FETCH_AND_ADD_4:
-     case BUILT_IN_SYNC_FETCH_AND_SUB_4:
-     case BUILT_IN_SYNC_FETCH_AND_OR_4:
-     case BUILT_IN_SYNC_FETCH_AND_AND_4:
-     case BUILT_IN_SYNC_FETCH_AND_XOR_4:
-     case BUILT_IN_SYNC_FETCH_AND_NAND_4:
-     case BUILT_IN_SYNC_ADD_AND_FETCH_4:
-     case BUILT_IN_SYNC_SUB_AND_FETCH_4:
-     case BUILT_IN_SYNC_OR_AND_FETCH_4:
-     case BUILT_IN_SYNC_AND_AND_FETCH_4:
-     case BUILT_IN_SYNC_XOR_AND_FETCH_4:
-     case BUILT_IN_SYNC_NAND_AND_FETCH_4:
-     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4:
-     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4:
-     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_4:
-     case BUILT_IN_SYNC_LOCK_RELEASE_4:
-     case BUILT_IN_ATOMIC_EXCHANGE_4:
-     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4:
-     case BUILT_IN_ATOMIC_STORE_4:
-     case BUILT_IN_ATOMIC_ADD_FETCH_4:
-     case BUILT_IN_ATOMIC_SUB_FETCH_4:
-     case BUILT_IN_ATOMIC_AND_FETCH_4:
-     case BUILT_IN_ATOMIC_NAND_FETCH_4:
-     case BUILT_IN_ATOMIC_XOR_FETCH_4:
-     case BUILT_IN_ATOMIC_OR_FETCH_4:
-     case BUILT_IN_ATOMIC_FETCH_ADD_4:
-     case BUILT_IN_ATOMIC_FETCH_SUB_4:
-     case BUILT_IN_ATOMIC_FETCH_AND_4:
-     case BUILT_IN_ATOMIC_FETCH_NAND_4:
-     case BUILT_IN_ATOMIC_FETCH_XOR_4:
-     case BUILT_IN_ATOMIC_FETCH_OR_4:
-       access_size = 4;
-       goto do_atomic;
- 
-     case BUILT_IN_ATOMIC_LOAD_8:
-       is_store = false;
-       /* FALLTHRU */
-     case BUILT_IN_SYNC_FETCH_AND_ADD_8:
-     case BUILT_IN_SYNC_FETCH_AND_SUB_8:
-     case BUILT_IN_SYNC_FETCH_AND_OR_8:
-     case BUILT_IN_SYNC_FETCH_AND_AND_8:
-     case BUILT_IN_SYNC_FETCH_AND_XOR_8:
-     case BUILT_IN_SYNC_FETCH_AND_NAND_8:
-     case BUILT_IN_SYNC_ADD_AND_FETCH_8:
-     case BUILT_IN_SYNC_SUB_AND_FETCH_8:
-     case BUILT_IN_SYNC_OR_AND_FETCH_8:
-     case BUILT_IN_SYNC_AND_AND_FETCH_8:
-     case BUILT_IN_SYNC_XOR_AND_FETCH_8:
-     case BUILT_IN_SYNC_NAND_AND_FETCH_8:
-     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8:
-     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8:
-     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_8:
-     case BUILT_IN_SYNC_LOCK_RELEASE_8:
-     case BUILT_IN_ATOMIC_EXCHANGE_8:
-     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8:
-     case BUILT_IN_ATOMIC_STORE_8:
-     case BUILT_IN_ATOMIC_ADD_FETCH_8:
-     case BUILT_IN_ATOMIC_SUB_FETCH_8:
-     case BUILT_IN_ATOMIC_AND_FETCH_8:
-     case BUILT_IN_ATOMIC_NAND_FETCH_8:
-     case BUILT_IN_ATOMIC_XOR_FETCH_8:
-     case BUILT_IN_ATOMIC_OR_FETCH_8:
-     case BUILT_IN_ATOMIC_FETCH_ADD_8:
-     case BUILT_IN_ATOMIC_FETCH_SUB_8:
-     case BUILT_IN_ATOMIC_FETCH_AND_8:
-     case BUILT_IN_ATOMIC_FETCH_NAND_8:
-     case BUILT_IN_ATOMIC_FETCH_XOR_8:
-     case BUILT_IN_ATOMIC_FETCH_OR_8:
-       access_size = 8;
-       goto do_atomic;
- 
-     case BUILT_IN_ATOMIC_LOAD_16:
-       is_store = false;
-       /* FALLTHRU */
-     case BUILT_IN_SYNC_FETCH_AND_ADD_16:
-     case BUILT_IN_SYNC_FETCH_AND_SUB_16:
-     case BUILT_IN_SYNC_FETCH_AND_OR_16:
-     case BUILT_IN_SYNC_FETCH_AND_AND_16:
-     case BUILT_IN_SYNC_FETCH_AND_XOR_16:
-     case BUILT_IN_SYNC_FETCH_AND_NAND_16:
-     case BUILT_IN_SYNC_ADD_AND_FETCH_16:
-     case BUILT_IN_SYNC_SUB_AND_FETCH_16:
-     case BUILT_IN_SYNC_OR_AND_FETCH_16:
-     case BUILT_IN_SYNC_AND_AND_FETCH_16:
-     case BUILT_IN_SYNC_XOR_AND_FETCH_16:
-     case BUILT_IN_SYNC_NAND_AND_FETCH_16:
-     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16:
-     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_16:
-     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_16:
-     case BUILT_IN_SYNC_LOCK_RELEASE_16:
-     case BUILT_IN_ATOMIC_EXCHANGE_16:
-     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16:
-     case BUILT_IN_ATOMIC_STORE_16:
-     case BUILT_IN_ATOMIC_ADD_FETCH_16:
-     case BUILT_IN_ATOMIC_SUB_FETCH_16:
-     case BUILT_IN_ATOMIC_AND_FETCH_16:
-     case BUILT_IN_ATOMIC_NAND_FETCH_16:
-     case BUILT_IN_ATOMIC_XOR_FETCH_16:
-     case BUILT_IN_ATOMIC_OR_FETCH_16:
-     case BUILT_IN_ATOMIC_FETCH_ADD_16:
-     case BUILT_IN_ATOMIC_FETCH_SUB_16:
-     case BUILT_IN_ATOMIC_FETCH_AND_16:
-     case BUILT_IN_ATOMIC_FETCH_NAND_16:
-     case BUILT_IN_ATOMIC_FETCH_XOR_16:
-     case BUILT_IN_ATOMIC_FETCH_OR_16:
-       access_size = 16;
-       /* FALLTHRU */
-     do_atomic:
-       {
- 	dest = gimple_call_arg (call, 0);
- 	/* DEST represents the address of a memory location.
- 	   instrument_derefs wants the memory location, so lets
- 	   dereference the address DEST before handing it to
- 	   instrument_derefs.  */
- 	tree type = build_nonstandard_integer_type (access_size
- 						    * BITS_PER_UNIT, 1);
- 	dest = build2 (MEM_REF, type, dest,
- 		       build_int_cst (build_pointer_type (char_type_node), 0));
- 	break;
-       }
- 
-     default:
-       /* The other builtins memory access are not instrumented in this
- 	 function because they either don't have any length parameter,
- 	 or their length parameter is just a limit.  */
-       break;
-     }
- 
-   if (len != NULL_TREE)
-     {
-       if (source0 != NULL_TREE)
- 	{
- 	  src0->start = source0;
- 	  src0->access_size = access_size;
- 	  *src0_len = len;
- 	  *src0_is_store = false;
- 	}
- 
-       if (source1 != NULL_TREE)
- 	{
- 	  src1->start = source1;
- 	  src1->access_size = access_size;
- 	  *src1_len = len;
- 	  *src1_is_store = false;
- 	}
- 
-       if (dest != NULL_TREE)
- 	{
- 	  dst->start = dest;
- 	  dst->access_size = access_size;
- 	  *dst_len = len;
- 	  *dst_is_store = true;
- 	}
- 
-       got_reference_p = true;
-     }
-   else if (dest)
-     {
-       dst->start = dest;
-       dst->access_size = access_size;
-       *dst_len = NULL_TREE;
-       *dst_is_store = is_store;
-       *dest_is_deref = true;
-       got_reference_p = true;
-     }
- 
-   return got_reference_p;
- }
- 
- /* Return true iff a given gimple statement has been instrumented.
-    Note that the statement is "defined" by the memory references it
-    contains.  */
- 
- static bool
- has_stmt_been_instrumented_p (gimple *stmt)
- {
-   if (gimple_assign_single_p (stmt))
-     {
-       bool r_is_store;
-       asan_mem_ref r;
-       asan_mem_ref_init (&r, NULL, 1);
- 
-       if (get_mem_ref_of_assignment (as_a <gassign *> (stmt), &r,
- 				     &r_is_store))
- 	return has_mem_ref_been_instrumented (&r);
-     }
-   else if (gimple_call_builtin_p (stmt, BUILT_IN_NORMAL))
-     {
-       asan_mem_ref src0, src1, dest;
-       asan_mem_ref_init (&src0, NULL, 1);
-       asan_mem_ref_init (&src1, NULL, 1);
-       asan_mem_ref_init (&dest, NULL, 1);
- 
-       tree src0_len = NULL_TREE, src1_len = NULL_TREE, dest_len = NULL_TREE;
-       bool src0_is_store = false, src1_is_store = false,
- 	dest_is_store = false, dest_is_deref = false, intercepted_p = true;
-       if (get_mem_refs_of_builtin_call (as_a <gcall *> (stmt),
- 					&src0, &src0_len, &src0_is_store,
- 					&src1, &src1_len, &src1_is_store,
- 					&dest, &dest_len, &dest_is_store,
- 					&dest_is_deref, &intercepted_p))
- 	{
- 	  if (src0.start != NULL_TREE
- 	      && !has_mem_ref_been_instrumented (&src0, src0_len))
- 	    return false;
- 
- 	  if (src1.start != NULL_TREE
- 	      && !has_mem_ref_been_instrumented (&src1, src1_len))
- 	    return false;
- 
- 	  if (dest.start != NULL_TREE
- 	      && !has_mem_ref_been_instrumented (&dest, dest_len))
- 	    return false;
- 
- 	  return true;
- 	}
-     }
-   else if (is_gimple_call (stmt) && gimple_store_p (stmt))
-     {
-       asan_mem_ref r;
-       asan_mem_ref_init (&r, NULL, 1);
- 
-       r.start = gimple_call_lhs (stmt);
-       r.access_size = int_size_in_bytes (TREE_TYPE (r.start));
-       return has_mem_ref_been_instrumented (&r);
-     }
- 
-   return false;
- }
- 
- /*  Insert a memory reference into the hash table.  */
- 
- static void
- update_mem_ref_hash_table (tree ref, HOST_WIDE_INT access_size)
- {
-   hash_table<asan_mem_ref_hasher> *ht = get_mem_ref_hash_table ();
- 
-   asan_mem_ref r;
-   asan_mem_ref_init (&r, ref, access_size);
- 
-   asan_mem_ref **slot = ht->find_slot (&r, INSERT);
-   if (*slot == NULL || (*slot)->access_size < access_size)
-     *slot = asan_mem_ref_new (ref, access_size);
- }
- 
- /* Initialize shadow_ptr_types array.  */
- 
- static void
- asan_init_shadow_ptr_types (void)
- {
-   asan_shadow_set = new_alias_set ();
-   tree types[3] = { signed_char_type_node, short_integer_type_node,
- 		    integer_type_node };
- 
-   for (unsigned i = 0; i < 3; i++)
-     {
-       shadow_ptr_types[i] = build_distinct_type_copy (types[i]);
-       TYPE_ALIAS_SET (shadow_ptr_types[i]) = asan_shadow_set;
-       shadow_ptr_types[i] = build_pointer_type (shadow_ptr_types[i]);
-     }
- 
-   initialize_sanitizer_builtins ();
- }
- 
- /* Create ADDR_EXPR of STRING_CST with the PP pretty printer text.  */
- 
- static tree
- asan_pp_string (pretty_printer *pp)
- {
-   const char *buf = pp_formatted_text (pp);
-   size_t len = strlen (buf);
-   tree ret = build_string (len + 1, buf);
-   TREE_TYPE (ret)
-     = build_array_type (TREE_TYPE (shadow_ptr_types[0]),
- 			build_index_type (size_int (len)));
-   TREE_READONLY (ret) = 1;
-   TREE_STATIC (ret) = 1;
-   return build1 (ADDR_EXPR, shadow_ptr_types[0], ret);
- }
- 
- /* Clear shadow memory at SHADOW_MEM, LEN bytes.  Can't call a library call here
-    though.  */
- 
- static void
- asan_clear_shadow (rtx shadow_mem, HOST_WIDE_INT len)
- {
-   rtx_insn *insn, *insns, *jump;
-   rtx_code_label *top_label;
-   rtx end, addr, tmp;
- 
-   gcc_assert ((len & 3) == 0);
-   start_sequence ();
-   clear_storage (shadow_mem, GEN_INT (len), BLOCK_OP_NORMAL);
-   insns = get_insns ();
-   end_sequence ();
-   for (insn = insns; insn; insn = NEXT_INSN (insn))
-     if (CALL_P (insn))
-       break;
-   if (insn == NULL_RTX)
-     {
-       emit_insn (insns);
-       return;
-     }
- 
-   top_label = gen_label_rtx ();
-   addr = copy_to_mode_reg (Pmode, XEXP (shadow_mem, 0));
-   shadow_mem = adjust_automodify_address (shadow_mem, SImode, addr, 0);
-   end = force_reg (Pmode, plus_constant (Pmode, addr, len));
-   emit_label (top_label);
- 
-   emit_move_insn (shadow_mem, const0_rtx);
-   tmp = expand_simple_binop (Pmode, PLUS, addr, gen_int_mode (4, Pmode), addr,
- 			     true, OPTAB_LIB_WIDEN);
-   if (tmp != addr)
-     emit_move_insn (addr, tmp);
-   emit_cmp_and_jump_insns (addr, end, LT, NULL_RTX, Pmode, true, top_label);
-   jump = get_last_insn ();
-   gcc_assert (JUMP_P (jump));
-   add_reg_br_prob_note (jump,
- 			profile_probability::guessed_always ()
- 			   .apply_scale (80, 100));
- }
- 
- void
- asan_function_start (void)
- {
-   section *fnsec = function_section (current_function_decl);
-   switch_to_section (fnsec);
-   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LASANPC",
- 			 current_function_funcdef_no);
- }
- 
- /* Return number of shadow bytes that are occupied by a local variable
-    of SIZE bytes.  */
- 
- static unsigned HOST_WIDE_INT
- shadow_mem_size (unsigned HOST_WIDE_INT size)
- {
-   /* It must be possible to align stack variables to granularity
-      of shadow memory.  */
-   gcc_assert (BITS_PER_UNIT
- 	      * ASAN_SHADOW_GRANULARITY <= MAX_SUPPORTED_STACK_ALIGNMENT);
- 
-   return ROUND_UP (size, ASAN_SHADOW_GRANULARITY) / ASAN_SHADOW_GRANULARITY;
- }
- 
- /* Always emit 4 bytes at a time.  */
- #define RZ_BUFFER_SIZE 4
- 
- /* ASAN redzone buffer container that handles emission of shadow bytes.  */
- class asan_redzone_buffer
- {
- public:
-   /* Constructor.  */
-   asan_redzone_buffer (rtx shadow_mem, HOST_WIDE_INT prev_offset):
-     m_shadow_mem (shadow_mem), m_prev_offset (prev_offset),
-     m_original_offset (prev_offset), m_shadow_bytes (RZ_BUFFER_SIZE)
-   {}
- 
-   /* Emit VALUE shadow byte at a given OFFSET.  */
-   void emit_redzone_byte (HOST_WIDE_INT offset, unsigned char value);
- 
-   /* Emit RTX emission of the content of the buffer.  */
-   void flush_redzone_payload (void);
- 
- private:
-   /* Flush if the content of the buffer is full
-      (equal to RZ_BUFFER_SIZE).  */
-   void flush_if_full (void);
- 
-   /* Memory where we last emitted a redzone payload.  */
-   rtx m_shadow_mem;
- 
-   /* Relative offset where we last emitted a redzone payload.  */
-   HOST_WIDE_INT m_prev_offset;
- 
-   /* Relative original offset.  Used for checking only.  */
-   HOST_WIDE_INT m_original_offset;
- 
- public:
-   /* Buffer with redzone payload.  */
-   auto_vec<unsigned char> m_shadow_bytes;
- };
- 
- /* Emit VALUE shadow byte at a given OFFSET.  */
- 
- void
- asan_redzone_buffer::emit_redzone_byte (HOST_WIDE_INT offset,
- 					unsigned char value)
- {
-   gcc_assert ((offset & (ASAN_SHADOW_GRANULARITY - 1)) == 0);
-   gcc_assert (offset >= m_prev_offset);
- 
-   HOST_WIDE_INT off
-     = m_prev_offset + ASAN_SHADOW_GRANULARITY * m_shadow_bytes.length ();
-   if (off == offset)
-     {
-       /* Consecutive shadow memory byte.  */
-       m_shadow_bytes.safe_push (value);
-       flush_if_full ();
-     }
-   else
-     {
-       if (!m_shadow_bytes.is_empty ())
- 	flush_redzone_payload ();
- 
-       /* Maybe start earlier in order to use aligned store.  */
-       HOST_WIDE_INT align = (offset - m_prev_offset) % ASAN_RED_ZONE_SIZE;
-       if (align)
- 	{
- 	  offset -= align;
- 	  for (unsigned i = 0; i < align / BITS_PER_UNIT; i++)
- 	    m_shadow_bytes.safe_push (0);
- 	}
- 
-       /* Adjust m_prev_offset and m_shadow_mem.  */
-       HOST_WIDE_INT diff = offset - m_prev_offset;
-       m_shadow_mem = adjust_address (m_shadow_mem, VOIDmode,
- 				     diff >> ASAN_SHADOW_SHIFT);
-       m_prev_offset = offset;
-       m_shadow_bytes.safe_push (value);
-       flush_if_full ();
-     }
- }
- 
- /* Emit RTX emission of the content of the buffer.  */
- 
- void
- asan_redzone_buffer::flush_redzone_payload (void)
- {
-   gcc_assert (WORDS_BIG_ENDIAN == BYTES_BIG_ENDIAN);
- 
-   if (m_shadow_bytes.is_empty ())
-     return;
- 
-   /* Be sure we always emit to an aligned address.  */
-   gcc_assert (((m_prev_offset - m_original_offset)
- 	      & (ASAN_RED_ZONE_SIZE - 1)) == 0);
- 
-   /* Fill it to RZ_BUFFER_SIZE bytes with zeros if needed.  */
-   unsigned l = m_shadow_bytes.length ();
-   for (unsigned i = 0; i <= RZ_BUFFER_SIZE - l; i++)
-     m_shadow_bytes.safe_push (0);
- 
-   if (dump_file && (dump_flags & TDF_DETAILS))
-     fprintf (dump_file,
- 	     "Flushing rzbuffer at offset %" PRId64 " with: ", m_prev_offset);
- 
-   unsigned HOST_WIDE_INT val = 0;
-   for (unsigned i = 0; i < RZ_BUFFER_SIZE; i++)
-     {
-       unsigned char v
- 	= m_shadow_bytes[BYTES_BIG_ENDIAN ? RZ_BUFFER_SIZE - i - 1 : i];
-       val |= (unsigned HOST_WIDE_INT)v << (BITS_PER_UNIT * i);
-       if (dump_file && (dump_flags & TDF_DETAILS))
- 	fprintf (dump_file, "%02x ", v);
-     }
- 
-   if (dump_file && (dump_flags & TDF_DETAILS))
-     fprintf (dump_file, "\n");
- 
-   rtx c = gen_int_mode (val, SImode);
-   m_shadow_mem = adjust_address (m_shadow_mem, SImode, 0);
-   emit_move_insn (m_shadow_mem, c);
-   m_shadow_bytes.truncate (0);
- }
- 
- /* Flush if the content of the buffer is full
-    (equal to RZ_BUFFER_SIZE).  */
- 
- void
- asan_redzone_buffer::flush_if_full (void)
- {
-   if (m_shadow_bytes.length () == RZ_BUFFER_SIZE)
-     flush_redzone_payload ();
- }
- 
- 
- /* HWAddressSanitizer (hwasan) is a probabilistic method for detecting
-    out-of-bounds and use-after-free bugs.
-    Read more:
-    http://code.google.com/p/address-sanitizer/
- 
-    Similar to AddressSanitizer (asan) it consists of two parts: the
-    instrumentation module in this file, and a run-time library.
- 
-    The instrumentation module adds a run-time check before every memory insn in
-    the same manner as asan (see the block comment for AddressSanitizer above).
-    Currently, hwasan only adds out-of-line instrumentation, where each check is
-    implemented as a function call to the run-time library.  Hence a check for a
-    load of N bytes from address X would be implemented with a function call to
-    __hwasan_loadN(X), and checking a store of N bytes from address X would be
-    implemented with a function call to __hwasan_storeN(X).
- 
-    The main difference between hwasan and asan is in the information stored to
-    help this checking.  Both sanitizers use a shadow memory area which stores
-    data recording the state of main memory at a corresponding address.
- 
-    For hwasan, each 16 byte granule in main memory has a corresponding 1 byte
-    in shadow memory.  This shadow address can be calculated with equation:
-      (addr >> log_2(HWASAN_TAG_GRANULE_SIZE))
- 	  + __hwasan_shadow_memory_dynamic_address;
-    The conversion between real and shadow memory for asan is given in the block
-    comment at the top of this file.
-    The description of how this shadow memory is laid out for asan is in the
-    block comment at the top of this file, here we describe how this shadow
-    memory is used for hwasan.
- 
-    For hwasan, each variable is assigned a byte-sized 'tag'.  The extent of
-    the shadow memory for that variable is filled with the assigned tag, and
-    every pointer referencing that variable has its top byte set to the same
-    tag.  The run-time library redefines malloc so that every allocation returns
-    a tagged pointer and tags the corresponding shadow memory with the same tag.
- 
-    On each pointer dereference the tag found in the pointer is compared to the
-    tag found in the shadow memory corresponding to the accessed memory address.
-    If these tags are found to differ then this memory access is judged to be
-    invalid and a report is generated.
- 
-    This method of bug detection is not perfect -- it can not catch every bad
-    access -- but catches them probabilistically instead.  There is always the
-    possibility that an invalid memory access will happen to access memory
-    tagged with the same tag as the pointer that this access used.
-    The chances of this are approx. 0.4% for any two uncorrelated objects.
- 
-    Random tag generation can mitigate this problem by decreasing the
-    probability that an invalid access will be missed in the same manner over
-    multiple runs.  i.e. if two objects are tagged the same in one run of the
-    binary they are unlikely to be tagged the same in the next run.
-    Both heap and stack allocated objects have random tags by default.
- 
-    [16 byte granule implications]
-     Since the shadow memory only has a resolution on real memory of 16 bytes,
-     invalid accesses that are within the same 16 byte granule as a valid
-     address will not be caught.
- 
-     There is a "short-granule" feature in the runtime library which does catch
-     such accesses, but this feature is not implemented for stack objects (since
-     stack objects are allocated and tagged by compiler instrumentation, and
-     this feature has not yet been implemented in GCC instrumentation).
- 
-     Another outcome of this 16 byte resolution is that each tagged object must
-     be 16 byte aligned.  If two objects were to share any 16 byte granule in
-     memory, then they both would have to be given the same tag, and invalid
-     accesses to one using a pointer to the other would be undetectable.
- 
-    [Compiler instrumentation]
-     Compiler instrumentation ensures that two adjacent buffers on the stack are
-     given different tags, this means an access to one buffer using a pointer
-     generated from the other (e.g. through buffer overrun) will have mismatched
-     tags and be caught by hwasan.
- 
-     We don't randomly tag every object on the stack, since that would require
-     keeping many registers to record each tag.  Instead we randomly generate a
-     tag for each function frame, and each new stack object uses a tag offset
-     from that frame tag.
-     i.e. each object is tagged as RFT + offset, where RFT is the "random frame
-     tag" generated for this frame.
-     This means that randomisation does not peturb the difference between tags
-     on tagged stack objects within a frame, but this is mitigated by the fact
-     that objects with the same tag within a frame are very far apart
-     (approx. 2^HWASAN_TAG_SIZE objects apart).
- 
-     As a demonstration, using the same example program as in the asan block
-     comment above:
- 
-      int
-      foo ()
-      {
-        char a[24] = {0};
-        int b[2] = {0};
- 
-        a[5] = 1;
-        b[1] = 2;
- 
-        return a[5] + b[1];
-      }
- 
-     On AArch64 the stack will be ordered as follows for the above function:
- 
-     Slot 1/ [24 bytes for variable 'a']
-     Slot 2/ [8 bytes padding for alignment]
-     Slot 3/ [8 bytes for variable 'b']
-     Slot 4/ [8 bytes padding for alignment]
- 
-     (The padding is there to ensure 16 byte alignment as described in the 16
-      byte granule implications).
- 
-     While the shadow memory will be ordered as follows:
- 
-     - 2 bytes (representing 32 bytes in real memory) tagged with RFT + 1.
-     - 1 byte (representing 16 bytes in real memory) tagged with RFT + 2.
- 
-     And any pointer to "a" will have the tag RFT + 1, and any pointer to "b"
-     will have the tag RFT + 2.
- 
-    [Top Byte Ignore requirements]
-     Hwasan requires the ability to store an 8 bit tag in every pointer.  There
-     is no instrumentation done to remove this tag from pointers before
-     dereferencing, which means the hardware must ignore this tag during memory
-     accesses.
- 
-     Architectures where this feature is available should indicate this using
-     the TARGET_MEMTAG_CAN_TAG_ADDRESSES hook.
- 
-    [Stack requires cleanup on unwinding]
-     During normal operation of a hwasan sanitized program more space in the
-     shadow memory becomes tagged as the stack grows.  As the stack shrinks this
-     shadow memory space must become untagged.  If it is not untagged then when
-     the stack grows again (during other function calls later on in the program)
-     objects on the stack that are usually not tagged (e.g. parameters passed on
-     the stack) can be placed in memory whose shadow space is tagged with
-     something else, and accesses can cause false positive reports.
- 
-     Hence we place untagging code on every epilogue of functions which tag some
-     stack objects.
- 
-     Moreover, the run-time library intercepts longjmp & setjmp to untag when
-     the stack is unwound this way.
- 
-     C++ exceptions are not yet handled, which means this sanitizer can not
-     handle C++ code that throws exceptions -- it will give false positives
-     after an exception has been thrown.  The implementation that the hwasan
-     library has for handling these relies on the frame pointer being after any
-     local variables.  This is not generally the case for GCC.  */
- 
- 
- /* Returns whether we are tagging pointers and checking those tags on memory
-    access.  */
- bool
- hwasan_sanitize_p ()
- {
-   return sanitize_flags_p (SANITIZE_HWADDRESS);
- }
- 
- /* Are we tagging the stack?  */
- bool
- hwasan_sanitize_stack_p ()
- {
-   return (hwasan_sanitize_p () && param_hwasan_instrument_stack);
- }
- 
- /* Are we tagging alloca objects?  */
- bool
- hwasan_sanitize_allocas_p (void)
- {
-   return (hwasan_sanitize_stack_p () && param_hwasan_instrument_allocas);
- }
- 
- /* Should we instrument reads?  */
- bool
- hwasan_instrument_reads (void)
- {
-   return (hwasan_sanitize_p () && param_hwasan_instrument_reads);
- }
- 
- /* Should we instrument writes?  */
- bool
- hwasan_instrument_writes (void)
- {
-   return (hwasan_sanitize_p () && param_hwasan_instrument_writes);
- }
- 
- /* Should we instrument builtin calls?  */
- bool
- hwasan_memintrin (void)
- {
-   return (hwasan_sanitize_p () && param_hwasan_instrument_mem_intrinsics);
- }
- 
- /* Insert code to protect stack vars.  The prologue sequence should be emitted
-    directly, epilogue sequence returned.  BASE is the register holding the
-    stack base, against which OFFSETS array offsets are relative to, OFFSETS
-    array contains pairs of offsets in reverse order, always the end offset
-    of some gap that needs protection followed by starting offset,
-    and DECLS is an array of representative decls for each var partition.
-    LENGTH is the length of the OFFSETS array, DECLS array is LENGTH / 2 - 1
-    elements long (OFFSETS include gap before the first variable as well
-    as gaps after each stack variable).  PBASE is, if non-NULL, some pseudo
-    register which stack vars DECL_RTLs are based on.  Either BASE should be
-    assigned to PBASE, when not doing use after return protection, or
-    corresponding address based on __asan_stack_malloc* return value.  */
- 
- rtx_insn *
- asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb,
- 			    HOST_WIDE_INT *offsets, tree *decls, int length)
- {
-   rtx shadow_base, shadow_mem, ret, mem, orig_base;
-   rtx_code_label *lab;
-   rtx_insn *insns;
-   char buf[32];
-   HOST_WIDE_INT base_offset = offsets[length - 1];
-   HOST_WIDE_INT base_align_bias = 0, offset, prev_offset;
-   HOST_WIDE_INT asan_frame_size = offsets[0] - base_offset;
-   HOST_WIDE_INT last_offset, last_size, last_size_aligned;
-   int l;
-   unsigned char cur_shadow_byte = ASAN_STACK_MAGIC_LEFT;
-   tree str_cst, decl, id;
-   int use_after_return_class = -1;
- 
-   if (shadow_ptr_types[0] == NULL_TREE)
-     asan_init_shadow_ptr_types ();
- 
-   expanded_location cfun_xloc
-     = expand_location (DECL_SOURCE_LOCATION (current_function_decl));
- 
-   /* First of all, prepare the description string.  */
-   pretty_printer asan_pp;
- 
-   pp_decimal_int (&asan_pp, length / 2 - 1);
-   pp_space (&asan_pp);
-   for (l = length - 2; l; l -= 2)
-     {
-       tree decl = decls[l / 2 - 1];
-       pp_wide_integer (&asan_pp, offsets[l] - base_offset);
-       pp_space (&asan_pp);
-       pp_wide_integer (&asan_pp, offsets[l - 1] - offsets[l]);
-       pp_space (&asan_pp);
- 
-       expanded_location xloc
- 	= expand_location (DECL_SOURCE_LOCATION (decl));
-       char location[32];
- 
-       if (xloc.file == cfun_xloc.file)
- 	sprintf (location, ":%d", xloc.line);
-       else
- 	location[0] = '\0';
- 
-       if (DECL_P (decl) && DECL_NAME (decl))
- 	{
- 	  unsigned idlen
- 	    = IDENTIFIER_LENGTH (DECL_NAME (decl)) + strlen (location);
- 	  pp_decimal_int (&asan_pp, idlen);
- 	  pp_space (&asan_pp);
- 	  pp_tree_identifier (&asan_pp, DECL_NAME (decl));
- 	  pp_string (&asan_pp, location);
- 	}
-       else
- 	pp_string (&asan_pp, "9 <unknown>");
- 
-       if (l > 2)
- 	pp_space (&asan_pp);
-     }
-   str_cst = asan_pp_string (&asan_pp);
- 
-   /* Emit the prologue sequence.  */
-   if (asan_frame_size > 32 && asan_frame_size <= 65536 && pbase
-       && param_asan_use_after_return)
-     {
-       use_after_return_class = floor_log2 (asan_frame_size - 1) - 5;
-       /* __asan_stack_malloc_N guarantees alignment
- 	 N < 6 ? (64 << N) : 4096 bytes.  */
-       if (alignb > (use_after_return_class < 6
- 		    ? (64U << use_after_return_class) : 4096U))
- 	use_after_return_class = -1;
-       else if (alignb > ASAN_RED_ZONE_SIZE && (asan_frame_size & (alignb - 1)))
- 	base_align_bias = ((asan_frame_size + alignb - 1)
- 			   & ~(alignb - HOST_WIDE_INT_1)) - asan_frame_size;
-     }
- 
-   /* Align base if target is STRICT_ALIGNMENT.  */
-   if (STRICT_ALIGNMENT)
-     {
-       const HOST_WIDE_INT align
- 	= (GET_MODE_ALIGNMENT (SImode) / BITS_PER_UNIT) << ASAN_SHADOW_SHIFT;
-       base = expand_binop (Pmode, and_optab, base, gen_int_mode (-align, Pmode),
- 			   NULL_RTX, 1, OPTAB_DIRECT);
-     }
- 
-   if (use_after_return_class == -1 && pbase)
-     emit_move_insn (pbase, base);
- 
-   base = expand_binop (Pmode, add_optab, base,
- 		       gen_int_mode (base_offset - base_align_bias, Pmode),
- 		       NULL_RTX, 1, OPTAB_DIRECT);
-   orig_base = NULL_RTX;
-   if (use_after_return_class != -1)
-     {
-       if (asan_detect_stack_use_after_return == NULL_TREE)
- 	{
- 	  id = get_identifier ("__asan_option_detect_stack_use_after_return");
- 	  decl = build_decl (BUILTINS_LOCATION, VAR_DECL, id,
- 			     integer_type_node);
- 	  SET_DECL_ASSEMBLER_NAME (decl, id);
- 	  TREE_ADDRESSABLE (decl) = 1;
- 	  DECL_ARTIFICIAL (decl) = 1;
- 	  DECL_IGNORED_P (decl) = 1;
- 	  DECL_EXTERNAL (decl) = 1;
- 	  TREE_STATIC (decl) = 1;
- 	  TREE_PUBLIC (decl) = 1;
- 	  TREE_USED (decl) = 1;
- 	  asan_detect_stack_use_after_return = decl;
- 	}
-       orig_base = gen_reg_rtx (Pmode);
-       emit_move_insn (orig_base, base);
-       ret = expand_normal (asan_detect_stack_use_after_return);
-       lab = gen_label_rtx ();
-       emit_cmp_and_jump_insns (ret, const0_rtx, EQ, NULL_RTX,
- 			       VOIDmode, 0, lab,
- 			       profile_probability::very_likely ());
-       snprintf (buf, sizeof buf, "__asan_stack_malloc_%d",
- 		use_after_return_class);
-       ret = init_one_libfunc (buf);
-       ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode,
- 				     GEN_INT (asan_frame_size
- 					      + base_align_bias),
- 				     TYPE_MODE (pointer_sized_int_node));
-       /* __asan_stack_malloc_[n] returns a pointer to fake stack if succeeded
- 	 and NULL otherwise.  Check RET value is NULL here and jump over the
- 	 BASE reassignment in this case.  Otherwise, reassign BASE to RET.  */
-       emit_cmp_and_jump_insns (ret, const0_rtx, EQ, NULL_RTX,
- 			       VOIDmode, 0, lab,
- 			       profile_probability:: very_unlikely ());
-       ret = convert_memory_address (Pmode, ret);
-       emit_move_insn (base, ret);
-       emit_label (lab);
-       emit_move_insn (pbase, expand_binop (Pmode, add_optab, base,
- 					   gen_int_mode (base_align_bias
- 							 - base_offset, Pmode),
- 					   NULL_RTX, 1, OPTAB_DIRECT));
-     }
-   mem = gen_rtx_MEM (ptr_mode, base);
-   mem = adjust_address (mem, VOIDmode, base_align_bias);
-   emit_move_insn (mem, gen_int_mode (ASAN_STACK_FRAME_MAGIC, ptr_mode));
-   mem = adjust_address (mem, VOIDmode, GET_MODE_SIZE (ptr_mode));
-   emit_move_insn (mem, expand_normal (str_cst));
-   mem = adjust_address (mem, VOIDmode, GET_MODE_SIZE (ptr_mode));
-   ASM_GENERATE_INTERNAL_LABEL (buf, "LASANPC", current_function_funcdef_no);
-   id = get_identifier (buf);
-   decl = build_decl (DECL_SOURCE_LOCATION (current_function_decl),
- 		    VAR_DECL, id, char_type_node);
-   SET_DECL_ASSEMBLER_NAME (decl, id);
-   TREE_ADDRESSABLE (decl) = 1;
-   TREE_READONLY (decl) = 1;
-   DECL_ARTIFICIAL (decl) = 1;
-   DECL_IGNORED_P (decl) = 1;
-   TREE_STATIC (decl) = 1;
-   TREE_PUBLIC (decl) = 0;
-   TREE_USED (decl) = 1;
-   DECL_INITIAL (decl) = decl;
-   TREE_ASM_WRITTEN (decl) = 1;
-   TREE_ASM_WRITTEN (id) = 1;
-   emit_move_insn (mem, expand_normal (build_fold_addr_expr (decl)));
-   shadow_base = expand_binop (Pmode, lshr_optab, base,
- 			      gen_int_shift_amount (Pmode, ASAN_SHADOW_SHIFT),
- 			      NULL_RTX, 1, OPTAB_DIRECT);
-   shadow_base
-     = plus_constant (Pmode, shadow_base,
- 		     asan_shadow_offset ()
- 		     + (base_align_bias >> ASAN_SHADOW_SHIFT));
-   gcc_assert (asan_shadow_set != -1
- 	      && (ASAN_RED_ZONE_SIZE >> ASAN_SHADOW_SHIFT) == 4);
-   shadow_mem = gen_rtx_MEM (SImode, shadow_base);
-   set_mem_alias_set (shadow_mem, asan_shadow_set);
-   if (STRICT_ALIGNMENT)
-     set_mem_align (shadow_mem, (GET_MODE_ALIGNMENT (SImode)));
-   prev_offset = base_offset;
- 
-   asan_redzone_buffer rz_buffer (shadow_mem, prev_offset);
-   for (l = length; l; l -= 2)
-     {
-       if (l == 2)
- 	cur_shadow_byte = ASAN_STACK_MAGIC_RIGHT;
-       offset = offsets[l - 1];
- 
-       bool extra_byte = (offset - base_offset) & (ASAN_SHADOW_GRANULARITY - 1);
-       /* If a red-zone is not aligned to ASAN_SHADOW_GRANULARITY then
- 	 the previous stack variable has size % ASAN_SHADOW_GRANULARITY != 0.
- 	 In that case we have to emit one extra byte that will describe
- 	 how many bytes (our of ASAN_SHADOW_GRANULARITY) can be accessed.  */
-       if (extra_byte)
- 	{
- 	  HOST_WIDE_INT aoff
- 	    = base_offset + ((offset - base_offset)
- 			     & ~(ASAN_SHADOW_GRANULARITY - HOST_WIDE_INT_1));
- 	  rz_buffer.emit_redzone_byte (aoff, offset - aoff);
- 	  offset = aoff + ASAN_SHADOW_GRANULARITY;
- 	}
- 
-       /* Calculate size of red zone payload.  */
-       while (offset < offsets[l - 2])
- 	{
- 	  rz_buffer.emit_redzone_byte (offset, cur_shadow_byte);
- 	  offset += ASAN_SHADOW_GRANULARITY;
- 	}
- 
-       cur_shadow_byte = ASAN_STACK_MAGIC_MIDDLE;
-     }
- 
-   /* As the automatic variables are aligned to
-      ASAN_RED_ZONE_SIZE / ASAN_SHADOW_GRANULARITY, the buffer should be
-      flushed here.  */
-   gcc_assert (rz_buffer.m_shadow_bytes.is_empty ());
- 
-   do_pending_stack_adjust ();
- 
-   /* Construct epilogue sequence.  */
-   start_sequence ();
- 
-   lab = NULL;
-   if (use_after_return_class != -1)
-     {
-       rtx_code_label *lab2 = gen_label_rtx ();
-       char c = (char) ASAN_STACK_MAGIC_USE_AFTER_RET;
-       emit_cmp_and_jump_insns (orig_base, base, EQ, NULL_RTX,
- 			       VOIDmode, 0, lab2,
- 			       profile_probability::very_likely ());
-       shadow_mem = gen_rtx_MEM (BLKmode, shadow_base);
-       set_mem_alias_set (shadow_mem, asan_shadow_set);
-       mem = gen_rtx_MEM (ptr_mode, base);
-       mem = adjust_address (mem, VOIDmode, base_align_bias);
-       emit_move_insn (mem, gen_int_mode (ASAN_STACK_RETIRED_MAGIC, ptr_mode));
-       unsigned HOST_WIDE_INT sz = asan_frame_size >> ASAN_SHADOW_SHIFT;
-       if (use_after_return_class < 5
- 	  && can_store_by_pieces (sz, builtin_memset_read_str, &c,
- 				  BITS_PER_UNIT, true))
- 	{
- 	  /* Emit:
- 	       memset(ShadowBase, kAsanStackAfterReturnMagic, ShadowSize);
- 	       **SavedFlagPtr(FakeStack, class_id) = 0
- 	  */
- 	  store_by_pieces (shadow_mem, sz, builtin_memset_read_str, &c,
- 			   BITS_PER_UNIT, true, RETURN_BEGIN);
- 
- 	  unsigned HOST_WIDE_INT offset
- 	    = (1 << (use_after_return_class + 6));
- 	  offset -= GET_MODE_SIZE (ptr_mode);
- 	  mem = gen_rtx_MEM (ptr_mode, base);
- 	  mem = adjust_address (mem, ptr_mode, offset);
- 	  rtx addr = gen_reg_rtx (ptr_mode);
- 	  emit_move_insn (addr, mem);
- 	  addr = convert_memory_address (Pmode, addr);
- 	  mem = gen_rtx_MEM (QImode, addr);
- 	  emit_move_insn (mem, const0_rtx);
- 	}
-       else if (use_after_return_class >= 5
- 	       || !set_storage_via_setmem (shadow_mem,
- 					   GEN_INT (sz),
- 					   gen_int_mode (c, QImode),
- 					   BITS_PER_UNIT, BITS_PER_UNIT,
- 					   -1, sz, sz, sz))
- 	{
- 	  snprintf (buf, sizeof buf, "__asan_stack_free_%d",
- 		    use_after_return_class);
- 	  ret = init_one_libfunc (buf);
- 	  rtx addr = convert_memory_address (ptr_mode, base);
- 	  rtx orig_addr = convert_memory_address (ptr_mode, orig_base);
- 	  emit_library_call (ret, LCT_NORMAL, ptr_mode, addr, ptr_mode,
- 			     GEN_INT (asan_frame_size + base_align_bias),
- 			     TYPE_MODE (pointer_sized_int_node),
- 			     orig_addr, ptr_mode);
- 	}
-       lab = gen_label_rtx ();
-       emit_jump (lab);
-       emit_label (lab2);
-     }
- 
-   shadow_mem = gen_rtx_MEM (BLKmode, shadow_base);
-   set_mem_alias_set (shadow_mem, asan_shadow_set);
- 
-   if (STRICT_ALIGNMENT)
-     set_mem_align (shadow_mem, (GET_MODE_ALIGNMENT (SImode)));
- 
-   prev_offset = base_offset;
-   last_offset = base_offset;
-   last_size = 0;
-   last_size_aligned = 0;
-   for (l = length; l; l -= 2)
-     {
-       offset = base_offset + ((offsets[l - 1] - base_offset)
- 			      & ~(ASAN_RED_ZONE_SIZE - HOST_WIDE_INT_1));
-       if (last_offset + last_size_aligned < offset)
- 	{
- 	  shadow_mem = adjust_address (shadow_mem, VOIDmode,
- 				       (last_offset - prev_offset)
- 				       >> ASAN_SHADOW_SHIFT);
- 	  prev_offset = last_offset;
- 	  asan_clear_shadow (shadow_mem, last_size_aligned >> ASAN_SHADOW_SHIFT);
- 	  last_offset = offset;
- 	  last_size = 0;
- 	}
-       else
- 	last_size = offset - last_offset;
-       last_size += base_offset + ((offsets[l - 2] - base_offset)
- 				  & ~(ASAN_MIN_RED_ZONE_SIZE - HOST_WIDE_INT_1))
- 		   - offset;
- 
-       /* Unpoison shadow memory that corresponds to a variable that is 
- 	 is subject of use-after-return sanitization.  */
-       if (l > 2)
- 	{
- 	  decl = decls[l / 2 - 2];
- 	  if (asan_handled_variables != NULL
- 	      && asan_handled_variables->contains (decl))
- 	    {
- 	      HOST_WIDE_INT size = offsets[l - 3] - offsets[l - 2];
- 	      if (dump_file && (dump_flags & TDF_DETAILS))
- 		{
- 		  const char *n = (DECL_NAME (decl)
- 				   ? IDENTIFIER_POINTER (DECL_NAME (decl))
- 				   : "<unknown>");
- 		  fprintf (dump_file, "Unpoisoning shadow stack for variable: "
- 			   "%s (%" PRId64 " B)\n", n, size);
- 		}
- 
- 		last_size += size & ~(ASAN_MIN_RED_ZONE_SIZE - HOST_WIDE_INT_1);
- 	    }
- 	}
-       last_size_aligned
- 	= ((last_size + (ASAN_RED_ZONE_SIZE - HOST_WIDE_INT_1))
- 	   & ~(ASAN_RED_ZONE_SIZE - HOST_WIDE_INT_1));
-     }
-   if (last_size_aligned)
-     {
-       shadow_mem = adjust_address (shadow_mem, VOIDmode,
- 				   (last_offset - prev_offset)
- 				   >> ASAN_SHADOW_SHIFT);
-       asan_clear_shadow (shadow_mem, last_size_aligned >> ASAN_SHADOW_SHIFT);
-     }
- 
-   /* Clean-up set with instrumented stack variables.  */
-   delete asan_handled_variables;
-   asan_handled_variables = NULL;
-   delete asan_used_labels;
-   asan_used_labels = NULL;
- 
-   do_pending_stack_adjust ();
-   if (lab)
-     emit_label (lab);
- 
-   insns = get_insns ();
-   end_sequence ();
-   return insns;
- }
- 
- /* Emit __asan_allocas_unpoison (top, bot) call.  The BASE parameter corresponds
-    to BOT argument, for TOP virtual_stack_dynamic_rtx is used.  NEW_SEQUENCE
-    indicates whether we're emitting new instructions sequence or not.  */
- 
- rtx_insn *
- asan_emit_allocas_unpoison (rtx top, rtx bot, rtx_insn *before)
- {
-   if (before)
-     push_to_sequence (before);
-   else
-     start_sequence ();
-   rtx ret = init_one_libfunc ("__asan_allocas_unpoison");
-   top = convert_memory_address (ptr_mode, top);
-   bot = convert_memory_address (ptr_mode, bot);
-   emit_library_call (ret, LCT_NORMAL, ptr_mode,
- 		     top, ptr_mode, bot, ptr_mode);
- 
-   do_pending_stack_adjust ();
-   rtx_insn *insns = get_insns ();
-   end_sequence ();
-   return insns;
- }
- 
- /* Return true if DECL, a global var, might be overridden and needs
-    therefore a local alias.  */
- 
- static bool
- asan_needs_local_alias (tree decl)
- {
-   return DECL_WEAK (decl) || !targetm.binds_local_p (decl);
- }
- 
- /* Return true if DECL, a global var, is an artificial ODR indicator symbol
-    therefore doesn't need protection.  */
- 
- static bool
- is_odr_indicator (tree decl)
- {
-   return (DECL_ARTIFICIAL (decl)
- 	  && lookup_attribute ("asan odr indicator", DECL_ATTRIBUTES (decl)));
- }
- 
- /* Return true if DECL is a VAR_DECL that should be protected
-    by Address Sanitizer, by appending a red zone with protected
-    shadow memory after it and aligning it to at least
-    ASAN_RED_ZONE_SIZE bytes.  */
- 
- bool
- asan_protect_global (tree decl, bool ignore_decl_rtl_set_p)
- {
-   if (!param_asan_globals)
-     return false;
- 
-   rtx rtl, symbol;
- 
-   if (TREE_CODE (decl) == STRING_CST)
-     {
-       /* Instrument all STRING_CSTs except those created
- 	 by asan_pp_string here.  */
-       if (shadow_ptr_types[0] != NULL_TREE
- 	  && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
- 	  && TREE_TYPE (TREE_TYPE (decl)) == TREE_TYPE (shadow_ptr_types[0]))
- 	return false;
-       return true;
-     }
-   if (!VAR_P (decl)
-       /* TLS vars aren't statically protectable.  */
-       || DECL_THREAD_LOCAL_P (decl)
-       /* Externs will be protected elsewhere.  */
-       || DECL_EXTERNAL (decl)
-       /* PR sanitizer/81697: For architectures that use section anchors first
- 	 call to asan_protect_global may occur before DECL_RTL (decl) is set.
- 	 We should ignore DECL_RTL_SET_P then, because otherwise the first call
- 	 to asan_protect_global will return FALSE and the following calls on the
- 	 same decl after setting DECL_RTL (decl) will return TRUE and we'll end
- 	 up with inconsistency at runtime.  */
-       || (!DECL_RTL_SET_P (decl) && !ignore_decl_rtl_set_p)
-       /* Comdat vars pose an ABI problem, we can't know if
- 	 the var that is selected by the linker will have
- 	 padding or not.  */
-       || DECL_ONE_ONLY (decl)
-       /* Similarly for common vars.  People can use -fno-common.
- 	 Note: Linux kernel is built with -fno-common, so we do instrument
- 	 globals there even if it is C.  */
-       || (DECL_COMMON (decl) && TREE_PUBLIC (decl))
-       /* Don't protect if using user section, often vars placed
- 	 into user section from multiple TUs are then assumed
- 	 to be an array of such vars, putting padding in there
- 	 breaks this assumption.  */
-       || (DECL_SECTION_NAME (decl) != NULL
- 	  && !symtab_node::get (decl)->implicit_section
- 	  && !section_sanitized_p (DECL_SECTION_NAME (decl)))
-       || DECL_SIZE (decl) == 0
-       || ASAN_RED_ZONE_SIZE * BITS_PER_UNIT > MAX_OFILE_ALIGNMENT
-       || TREE_CODE (DECL_SIZE_UNIT (decl)) != INTEGER_CST
-       || !valid_constant_size_p (DECL_SIZE_UNIT (decl))
-       || DECL_ALIGN_UNIT (decl) > 2 * ASAN_RED_ZONE_SIZE
-       || TREE_TYPE (decl) == ubsan_get_source_location_type ()
-       || is_odr_indicator (decl))
-     return false;
- 
-   if (!ignore_decl_rtl_set_p || DECL_RTL_SET_P (decl))
-     {
- 
-       rtl = DECL_RTL (decl);
-       if (!MEM_P (rtl) || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF)
- 	return false;
-       symbol = XEXP (rtl, 0);
- 
-       if (CONSTANT_POOL_ADDRESS_P (symbol)
- 	  || TREE_CONSTANT_POOL_ADDRESS_P (symbol))
- 	return false;
-     }
- 
-   if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
-     return false;
- 
-   if (!TARGET_SUPPORTS_ALIASES && asan_needs_local_alias (decl))
-     return false;
- 
-   return true;
- }
- 
- /* Construct a function tree for __asan_report_{load,store}{1,2,4,8,16,_n}.
-    IS_STORE is either 1 (for a store) or 0 (for a load).  */
- 
- static tree
- report_error_func (bool is_store, bool recover_p, HOST_WIDE_INT size_in_bytes,
- 		   int *nargs)
- {
-   gcc_assert (!hwasan_sanitize_p ());
- 
-   static enum built_in_function report[2][2][6]
-     = { { { BUILT_IN_ASAN_REPORT_LOAD1, BUILT_IN_ASAN_REPORT_LOAD2,
- 	    BUILT_IN_ASAN_REPORT_LOAD4, BUILT_IN_ASAN_REPORT_LOAD8,
- 	    BUILT_IN_ASAN_REPORT_LOAD16, BUILT_IN_ASAN_REPORT_LOAD_N },
- 	  { BUILT_IN_ASAN_REPORT_STORE1, BUILT_IN_ASAN_REPORT_STORE2,
- 	    BUILT_IN_ASAN_REPORT_STORE4, BUILT_IN_ASAN_REPORT_STORE8,
- 	    BUILT_IN_ASAN_REPORT_STORE16, BUILT_IN_ASAN_REPORT_STORE_N } },
- 	{ { BUILT_IN_ASAN_REPORT_LOAD1_NOABORT,
- 	    BUILT_IN_ASAN_REPORT_LOAD2_NOABORT,
- 	    BUILT_IN_ASAN_REPORT_LOAD4_NOABORT,
- 	    BUILT_IN_ASAN_REPORT_LOAD8_NOABORT,
- 	    BUILT_IN_ASAN_REPORT_LOAD16_NOABORT,
- 	    BUILT_IN_ASAN_REPORT_LOAD_N_NOABORT },
- 	  { BUILT_IN_ASAN_REPORT_STORE1_NOABORT,
- 	    BUILT_IN_ASAN_REPORT_STORE2_NOABORT,
- 	    BUILT_IN_ASAN_REPORT_STORE4_NOABORT,
- 	    BUILT_IN_ASAN_REPORT_STORE8_NOABORT,
- 	    BUILT_IN_ASAN_REPORT_STORE16_NOABORT,
- 	    BUILT_IN_ASAN_REPORT_STORE_N_NOABORT } } };
-   if (size_in_bytes == -1)
-     {
-       *nargs = 2;
-       return builtin_decl_implicit (report[recover_p][is_store][5]);
-     }
-   *nargs = 1;
-   int size_log2 = exact_log2 (size_in_bytes);
-   return builtin_decl_implicit (report[recover_p][is_store][size_log2]);
- }
- 
- /* Construct a function tree for __asan_{load,store}{1,2,4,8,16,_n}.
-    IS_STORE is either 1 (for a store) or 0 (for a load).  */
- 
- static tree
- check_func (bool is_store, bool recover_p, HOST_WIDE_INT size_in_bytes,
- 	    int *nargs)
- {
-   static enum built_in_function check[2][2][6]
-     = { { { BUILT_IN_ASAN_LOAD1, BUILT_IN_ASAN_LOAD2,
- 	    BUILT_IN_ASAN_LOAD4, BUILT_IN_ASAN_LOAD8,
- 	    BUILT_IN_ASAN_LOAD16, BUILT_IN_ASAN_LOADN },
- 	  { BUILT_IN_ASAN_STORE1, BUILT_IN_ASAN_STORE2,
- 	    BUILT_IN_ASAN_STORE4, BUILT_IN_ASAN_STORE8,
- 	    BUILT_IN_ASAN_STORE16, BUILT_IN_ASAN_STOREN } },
- 	{ { BUILT_IN_ASAN_LOAD1_NOABORT,
- 	    BUILT_IN_ASAN_LOAD2_NOABORT,
- 	    BUILT_IN_ASAN_LOAD4_NOABORT,
- 	    BUILT_IN_ASAN_LOAD8_NOABORT,
- 	    BUILT_IN_ASAN_LOAD16_NOABORT,
- 	    BUILT_IN_ASAN_LOADN_NOABORT },
- 	  { BUILT_IN_ASAN_STORE1_NOABORT,
- 	    BUILT_IN_ASAN_STORE2_NOABORT,
- 	    BUILT_IN_ASAN_STORE4_NOABORT,
- 	    BUILT_IN_ASAN_STORE8_NOABORT,
- 	    BUILT_IN_ASAN_STORE16_NOABORT,
- 	    BUILT_IN_ASAN_STOREN_NOABORT } } };
-   if (size_in_bytes == -1)
-     {
-       *nargs = 2;
-       return builtin_decl_implicit (check[recover_p][is_store][5]);
-     }
-   *nargs = 1;
-   int size_log2 = exact_log2 (size_in_bytes);
-   return builtin_decl_implicit (check[recover_p][is_store][size_log2]);
- }
- 
- /* Split the current basic block and create a condition statement
-    insertion point right before or after the statement pointed to by
-    ITER.  Return an iterator to the point at which the caller might
-    safely insert the condition statement.
- 
-    THEN_BLOCK must be set to the address of an uninitialized instance
-    of basic_block.  The function will then set *THEN_BLOCK to the
-    'then block' of the condition statement to be inserted by the
-    caller.
- 
-    If CREATE_THEN_FALLTHRU_EDGE is false, no edge will be created from
-    *THEN_BLOCK to *FALLTHROUGH_BLOCK.
- 
-    Similarly, the function will set *FALLTRHOUGH_BLOCK to the 'else
-    block' of the condition statement to be inserted by the caller.
- 
-    Note that *FALLTHROUGH_BLOCK is a new block that contains the
-    statements starting from *ITER, and *THEN_BLOCK is a new empty
-    block.
- 
-    *ITER is adjusted to point to always point to the first statement
-     of the basic block * FALLTHROUGH_BLOCK.  That statement is the
-     same as what ITER was pointing to prior to calling this function,
-     if BEFORE_P is true; otherwise, it is its following statement.  */
- 
- gimple_stmt_iterator
- create_cond_insert_point (gimple_stmt_iterator *iter,
- 			  bool before_p,
- 			  bool then_more_likely_p,
- 			  bool create_then_fallthru_edge,
- 			  basic_block *then_block,
- 			  basic_block *fallthrough_block)
- {
-   gimple_stmt_iterator gsi = *iter;
- 
-   if (!gsi_end_p (gsi) && before_p)
-     gsi_prev (&gsi);
- 
-   basic_block cur_bb = gsi_bb (*iter);
- 
-   edge e = split_block (cur_bb, gsi_stmt (gsi));
- 
-   /* Get a hold on the 'condition block', the 'then block' and the
-      'else block'.  */
-   basic_block cond_bb = e->src;
-   basic_block fallthru_bb = e->dest;
-   basic_block then_bb = create_empty_bb (cond_bb);
-   if (current_loops)
-     {
-       add_bb_to_loop (then_bb, cond_bb->loop_father);
-       loops_state_set (LOOPS_NEED_FIXUP);
-     }
- 
-   /* Set up the newly created 'then block'.  */
-   e = make_edge (cond_bb, then_bb, EDGE_TRUE_VALUE);
-   profile_probability fallthrough_probability
-     = then_more_likely_p
-     ? profile_probability::very_unlikely ()
-     : profile_probability::very_likely ();
-   e->probability = fallthrough_probability.invert ();
-   then_bb->count = e->count ();
-   if (create_then_fallthru_edge)
-     make_single_succ_edge (then_bb, fallthru_bb, EDGE_FALLTHRU);
- 
-   /* Set up the fallthrough basic block.  */
-   e = find_edge (cond_bb, fallthru_bb);
-   e->flags = EDGE_FALSE_VALUE;
-   e->probability = fallthrough_probability;
- 
-   /* Update dominance info for the newly created then_bb; note that
-      fallthru_bb's dominance info has already been updated by
-      split_bock.  */
-   if (dom_info_available_p (CDI_DOMINATORS))
-     set_immediate_dominator (CDI_DOMINATORS, then_bb, cond_bb);
- 
-   *then_block = then_bb;
-   *fallthrough_block = fallthru_bb;
-   *iter = gsi_start_bb (fallthru_bb);
- 
-   return gsi_last_bb (cond_bb);
- }
- 
- /* Insert an if condition followed by a 'then block' right before the
-    statement pointed to by ITER.  The fallthrough block -- which is the
-    else block of the condition as well as the destination of the
-    outcoming edge of the 'then block' -- starts with the statement
-    pointed to by ITER.
- 
-    COND is the condition of the if.
- 
-    If THEN_MORE_LIKELY_P is true, the probability of the edge to the
-    'then block' is higher than the probability of the edge to the
-    fallthrough block.
- 
-    Upon completion of the function, *THEN_BB is set to the newly
-    inserted 'then block' and similarly, *FALLTHROUGH_BB is set to the
-    fallthrough block.
- 
-    *ITER is adjusted to still point to the same statement it was
-    pointing to initially.  */
- 
- static void
- insert_if_then_before_iter (gcond *cond,
- 			    gimple_stmt_iterator *iter,
- 			    bool then_more_likely_p,
- 			    basic_block *then_bb,
- 			    basic_block *fallthrough_bb)
- {
-   gimple_stmt_iterator cond_insert_point =
-     create_cond_insert_point (iter,
- 			      /*before_p=*/true,
- 			      then_more_likely_p,
- 			      /*create_then_fallthru_edge=*/true,
- 			      then_bb,
- 			      fallthrough_bb);
-   gsi_insert_after (&cond_insert_point, cond, GSI_NEW_STMT);
- }
- 
- /* Build (base_addr >> ASAN_SHADOW_SHIFT) + asan_shadow_offset ().
-    If RETURN_ADDRESS is set to true, return memory location instread
-    of a value in the shadow memory.  */
- 
- static tree
- build_shadow_mem_access (gimple_stmt_iterator *gsi, location_t location,
- 			 tree base_addr, tree shadow_ptr_type,
- 			 bool return_address = false)
- {
-   tree t, uintptr_type = TREE_TYPE (base_addr);
-   tree shadow_type = TREE_TYPE (shadow_ptr_type);
-   gimple *g;
- 
-   t = build_int_cst (uintptr_type, ASAN_SHADOW_SHIFT);
-   g = gimple_build_assign (make_ssa_name (uintptr_type), RSHIFT_EXPR,
- 			   base_addr, t);
-   gimple_set_location (g, location);
-   gsi_insert_after (gsi, g, GSI_NEW_STMT);
- 
-   t = build_int_cst (uintptr_type, asan_shadow_offset ());
-   g = gimple_build_assign (make_ssa_name (uintptr_type), PLUS_EXPR,
- 			   gimple_assign_lhs (g), t);
-   gimple_set_location (g, location);
-   gsi_insert_after (gsi, g, GSI_NEW_STMT);
- 
-   g = gimple_build_assign (make_ssa_name (shadow_ptr_type), NOP_EXPR,
- 			   gimple_assign_lhs (g));
-   gimple_set_location (g, location);
-   gsi_insert_after (gsi, g, GSI_NEW_STMT);
- 
-   if (!return_address)
-     {
-       t = build2 (MEM_REF, shadow_type, gimple_assign_lhs (g),
- 		  build_int_cst (shadow_ptr_type, 0));
-       g = gimple_build_assign (make_ssa_name (shadow_type), MEM_REF, t);
-       gimple_set_location (g, location);
-       gsi_insert_after (gsi, g, GSI_NEW_STMT);
-     }
- 
-   return gimple_assign_lhs (g);
- }
- 
- /* BASE can already be an SSA_NAME; in that case, do not create a
-    new SSA_NAME for it.  */
- 
- static tree
- maybe_create_ssa_name (location_t loc, tree base, gimple_stmt_iterator *iter,
- 		       bool before_p)
- {
-   STRIP_USELESS_TYPE_CONVERSION (base);
-   if (TREE_CODE (base) == SSA_NAME)
-     return base;
-   gimple *g = gimple_build_assign (make_ssa_name (TREE_TYPE (base)), base);
-   gimple_set_location (g, loc);
-   if (before_p)
-     gsi_insert_before (iter, g, GSI_SAME_STMT);
-   else
-     gsi_insert_after (iter, g, GSI_NEW_STMT);
-   return gimple_assign_lhs (g);
- }
- 
- /* LEN can already have necessary size and precision;
-    in that case, do not create a new variable.  */
- 
- tree
- maybe_cast_to_ptrmode (location_t loc, tree len, gimple_stmt_iterator *iter,
- 		       bool before_p)
- {
-   if (ptrofftype_p (len))
-     return len;
-   gimple *g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
- 				  NOP_EXPR, len);
-   gimple_set_location (g, loc);
-   if (before_p)
-     gsi_insert_before (iter, g, GSI_SAME_STMT);
-   else
-     gsi_insert_after (iter, g, GSI_NEW_STMT);
-   return gimple_assign_lhs (g);
- }
- 
- /* Instrument the memory access instruction BASE.  Insert new
-    statements before or after ITER.
- 
-    Note that the memory access represented by BASE can be either an
-    SSA_NAME, or a non-SSA expression.  LOCATION is the source code
-    location.  IS_STORE is TRUE for a store, FALSE for a load.
-    BEFORE_P is TRUE for inserting the instrumentation code before
-    ITER, FALSE for inserting it after ITER.  IS_SCALAR_ACCESS is TRUE
-    for a scalar memory access and FALSE for memory region access.
-    NON_ZERO_P is TRUE if memory region is guaranteed to have non-zero
-    length.  ALIGN tells alignment of accessed memory object.
- 
-    START_INSTRUMENTED and END_INSTRUMENTED are TRUE if start/end of
-    memory region have already been instrumented.
- 
-    If BEFORE_P is TRUE, *ITER is arranged to still point to the
-    statement it was pointing to prior to calling this function,
-    otherwise, it points to the statement logically following it.  */
- 
- static void
- build_check_stmt (location_t loc, tree base, tree len,
- 		  HOST_WIDE_INT size_in_bytes, gimple_stmt_iterator *iter,
- 		  bool is_non_zero_len, bool before_p, bool is_store,
- 		  bool is_scalar_access, unsigned int align = 0)
- {
-   gimple_stmt_iterator gsi = *iter;
-   gimple *g;
- 
-   gcc_assert (!(size_in_bytes > 0 && !is_non_zero_len));
-   gcc_assert (size_in_bytes == -1 || size_in_bytes >= 1);
- 
-   gsi = *iter;
- 
-   base = unshare_expr (base);
-   base = maybe_create_ssa_name (loc, base, &gsi, before_p);
- 
-   if (len)
-     {
-       len = unshare_expr (len);
-       len = maybe_cast_to_ptrmode (loc, len, iter, before_p);
-     }
-   else
-     {
-       gcc_assert (size_in_bytes != -1);
-       len = build_int_cst (pointer_sized_int_node, size_in_bytes);
-     }
- 
-   if (size_in_bytes > 1)
-     {
-       if ((size_in_bytes & (size_in_bytes - 1)) != 0
- 	  || size_in_bytes > 16)
- 	is_scalar_access = false;
-       else if (align && align < size_in_bytes * BITS_PER_UNIT)
- 	{
- 	  /* On non-strict alignment targets, if
- 	     16-byte access is just 8-byte aligned,
- 	     this will result in misaligned shadow
- 	     memory 2 byte load, but otherwise can
- 	     be handled using one read.  */
- 	  if (size_in_bytes != 16
- 	      || STRICT_ALIGNMENT
- 	      || align < 8 * BITS_PER_UNIT)
- 	    is_scalar_access = false;
- 	}
-     }
- 
-   HOST_WIDE_INT flags = 0;
-   if (is_store)
-     flags |= ASAN_CHECK_STORE;
-   if (is_non_zero_len)
-     flags |= ASAN_CHECK_NON_ZERO_LEN;
-   if (is_scalar_access)
-     flags |= ASAN_CHECK_SCALAR_ACCESS;
- 
-   enum internal_fn fn = hwasan_sanitize_p ()
-     ? IFN_HWASAN_CHECK
-     : IFN_ASAN_CHECK;
- 
-   g = gimple_build_call_internal (fn, 4,
- 				  build_int_cst (integer_type_node, flags),
- 				  base, len,
- 				  build_int_cst (integer_type_node,
- 						 align / BITS_PER_UNIT));
-   gimple_set_location (g, loc);
-   if (before_p)
-     gsi_insert_before (&gsi, g, GSI_SAME_STMT);
-   else
-     {
-       gsi_insert_after (&gsi, g, GSI_NEW_STMT);
-       gsi_next (&gsi);
-       *iter = gsi;
-     }
- }
- 
- /* If T represents a memory access, add instrumentation code before ITER.
-    LOCATION is source code location.
-    IS_STORE is either TRUE (for a store) or FALSE (for a load).  */
- 
- static void
- instrument_derefs (gimple_stmt_iterator *iter, tree t,
- 		   location_t location, bool is_store)
- {
-   if (is_store && !(asan_instrument_writes () || hwasan_instrument_writes ()))
-     return;
-   if (!is_store && !(asan_instrument_reads () || hwasan_instrument_reads ()))
-     return;
- 
-   tree type, base;
-   HOST_WIDE_INT size_in_bytes;
-   if (location == UNKNOWN_LOCATION)
-     location = EXPR_LOCATION (t);
- 
-   type = TREE_TYPE (t);
-   switch (TREE_CODE (t))
-     {
-     case ARRAY_REF:
-     case COMPONENT_REF:
-     case INDIRECT_REF:
-     case MEM_REF:
-     case VAR_DECL:
-     case BIT_FIELD_REF:
-       break;
-       /* FALLTHRU */
-     default:
-       return;
-     }
- 
-   size_in_bytes = int_size_in_bytes (type);
-   if (size_in_bytes <= 0)
-     return;
- 
-   poly_int64 bitsize, bitpos;
-   tree offset;
-   machine_mode mode;
-   int unsignedp, reversep, volatilep = 0;
-   tree inner = get_inner_reference (t, &bitsize, &bitpos, &offset, &mode,
- 				    &unsignedp, &reversep, &volatilep);
- 
-   if (TREE_CODE (t) == COMPONENT_REF
-       && DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (t, 1)) != NULL_TREE)
-     {
-       tree repr = DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (t, 1));
-       instrument_derefs (iter, build3 (COMPONENT_REF, TREE_TYPE (repr),
- 				       TREE_OPERAND (t, 0), repr,
- 				       TREE_OPERAND (t, 2)),
- 			 location, is_store);
-       return;
-     }
- 
-   if (!multiple_p (bitpos, BITS_PER_UNIT)
-       || maybe_ne (bitsize, size_in_bytes * BITS_PER_UNIT))
-     return;
- 
-   if (VAR_P (inner) && DECL_HARD_REGISTER (inner))
-     return;
- 
-   poly_int64 decl_size;
-   if ((VAR_P (inner) || TREE_CODE (inner) == RESULT_DECL)
-       && offset == NULL_TREE
-       && DECL_SIZE (inner)
-       && poly_int_tree_p (DECL_SIZE (inner), &decl_size)
-       && known_subrange_p (bitpos, bitsize, 0, decl_size))
-     {
-       if (VAR_P (inner) && DECL_THREAD_LOCAL_P (inner))
- 	return;
-       /* If we're not sanitizing globals and we can tell statically that this
- 	 access is inside a global variable, then there's no point adding
- 	 instrumentation to check the access.  N.b. hwasan currently never
- 	 sanitizes globals.  */
-       if ((hwasan_sanitize_p () || !param_asan_globals)
- 	  && is_global_var (inner))
-         return;
-       if (!TREE_STATIC (inner))
- 	{
- 	  /* Automatic vars in the current function will be always
- 	     accessible.  */
- 	  if (decl_function_context (inner) == current_function_decl
- 	      && (!asan_sanitize_use_after_scope ()
- 		  || !TREE_ADDRESSABLE (inner)))
- 	    return;
- 	}
-       /* Always instrument external vars, they might be dynamically
- 	 initialized.  */
-       else if (!DECL_EXTERNAL (inner))
- 	{
- 	  /* For static vars if they are known not to be dynamically
- 	     initialized, they will be always accessible.  */
- 	  varpool_node *vnode = varpool_node::get (inner);
- 	  if (vnode && !vnode->dynamically_initialized)
- 	    return;
- 	}
-     }
- 
-   if (DECL_P (inner)
-       && decl_function_context (inner) == current_function_decl
-       && !TREE_ADDRESSABLE (inner))
-     mark_addressable (inner);
- 
-   base = build_fold_addr_expr (t);
-   if (!has_mem_ref_been_instrumented (base, size_in_bytes))
-     {
-       unsigned int align = get_object_alignment (t);
-       build_check_stmt (location, base, NULL_TREE, size_in_bytes, iter,
- 			/*is_non_zero_len*/size_in_bytes > 0, /*before_p=*/true,
- 			is_store, /*is_scalar_access*/true, align);
-       update_mem_ref_hash_table (base, size_in_bytes);
-       update_mem_ref_hash_table (t, size_in_bytes);
-     }
- 
- }
- 
- /*  Insert a memory reference into the hash table if access length
-     can be determined in compile time.  */
- 
- static void
- maybe_update_mem_ref_hash_table (tree base, tree len)
- {
-   if (!POINTER_TYPE_P (TREE_TYPE (base))
-       || !INTEGRAL_TYPE_P (TREE_TYPE (len)))
-     return;
- 
-   HOST_WIDE_INT size_in_bytes = tree_fits_shwi_p (len) ? tree_to_shwi (len) : -1;
- 
-   if (size_in_bytes != -1)
-     update_mem_ref_hash_table (base, size_in_bytes);
- }
- 
- /* Instrument an access to a contiguous memory region that starts at
-    the address pointed to by BASE, over a length of LEN (expressed in
-    the sizeof (*BASE) bytes).  ITER points to the instruction before
-    which the instrumentation instructions must be inserted.  LOCATION
-    is the source location that the instrumentation instructions must
-    have.  If IS_STORE is true, then the memory access is a store;
-    otherwise, it's a load.  */
- 
- static void
- instrument_mem_region_access (tree base, tree len,
- 			      gimple_stmt_iterator *iter,
- 			      location_t location, bool is_store)
- {
-   if (!POINTER_TYPE_P (TREE_TYPE (base))
-       || !INTEGRAL_TYPE_P (TREE_TYPE (len))
-       || integer_zerop (len))
-     return;
- 
-   HOST_WIDE_INT size_in_bytes = tree_fits_shwi_p (len) ? tree_to_shwi (len) : -1;
- 
-   if ((size_in_bytes == -1)
-       || !has_mem_ref_been_instrumented (base, size_in_bytes))
-     {
-       build_check_stmt (location, base, len, size_in_bytes, iter,
- 			/*is_non_zero_len*/size_in_bytes > 0, /*before_p*/true,
- 			is_store, /*is_scalar_access*/false, /*align*/0);
-     }
- 
-   maybe_update_mem_ref_hash_table (base, len);
-   *iter = gsi_for_stmt (gsi_stmt (*iter));
- }
- 
- /* Instrument the call to a built-in memory access function that is
-    pointed to by the iterator ITER.
- 
-    Upon completion, return TRUE iff *ITER has been advanced to the
-    statement following the one it was originally pointing to.  */
- 
- static bool
- instrument_builtin_call (gimple_stmt_iterator *iter)
- {
-   if (!(asan_memintrin () || hwasan_memintrin ()))
-     return false;
- 
-   bool iter_advanced_p = false;
-   gcall *call = as_a <gcall *> (gsi_stmt (*iter));
- 
-   gcc_checking_assert (gimple_call_builtin_p (call, BUILT_IN_NORMAL));
- 
-   location_t loc = gimple_location (call);
- 
-   asan_mem_ref src0, src1, dest;
-   asan_mem_ref_init (&src0, NULL, 1);
-   asan_mem_ref_init (&src1, NULL, 1);
-   asan_mem_ref_init (&dest, NULL, 1);
- 
-   tree src0_len = NULL_TREE, src1_len = NULL_TREE, dest_len = NULL_TREE;
-   bool src0_is_store = false, src1_is_store = false, dest_is_store = false,
-     dest_is_deref = false, intercepted_p = true;
- 
-   if (get_mem_refs_of_builtin_call (call,
- 				    &src0, &src0_len, &src0_is_store,
- 				    &src1, &src1_len, &src1_is_store,
- 				    &dest, &dest_len, &dest_is_store,
- 				    &dest_is_deref, &intercepted_p, iter))
-     {
-       if (dest_is_deref)
- 	{
- 	  instrument_derefs (iter, dest.start, loc, dest_is_store);
- 	  gsi_next (iter);
- 	  iter_advanced_p = true;
- 	}
-       else if (!intercepted_p
- 	       && (src0_len || src1_len || dest_len))
- 	{
- 	  if (src0.start != NULL_TREE)
- 	    instrument_mem_region_access (src0.start, src0_len,
- 					  iter, loc, /*is_store=*/false);
- 	  if (src1.start != NULL_TREE)
- 	    instrument_mem_region_access (src1.start, src1_len,
- 					  iter, loc, /*is_store=*/false);
- 	  if (dest.start != NULL_TREE)
- 	    instrument_mem_region_access (dest.start, dest_len,
- 					  iter, loc, /*is_store=*/true);
- 
- 	  *iter = gsi_for_stmt (call);
- 	  gsi_next (iter);
- 	  iter_advanced_p = true;
- 	}
-       else
- 	{
- 	  if (src0.start != NULL_TREE)
- 	    maybe_update_mem_ref_hash_table (src0.start, src0_len);
- 	  if (src1.start != NULL_TREE)
- 	    maybe_update_mem_ref_hash_table (src1.start, src1_len);
- 	  if (dest.start != NULL_TREE)
- 	    maybe_update_mem_ref_hash_table (dest.start, dest_len);
- 	}
-     }
-   return iter_advanced_p;
- }
- 
- /*  Instrument the assignment statement ITER if it is subject to
-     instrumentation.  Return TRUE iff instrumentation actually
-     happened.  In that case, the iterator ITER is advanced to the next
-     logical expression following the one initially pointed to by ITER,
-     and the relevant memory reference that which access has been
-     instrumented is added to the memory references hash table.  */
- 
- static bool
- maybe_instrument_assignment (gimple_stmt_iterator *iter)
- {
-   gimple *s = gsi_stmt (*iter);
- 
-   gcc_assert (gimple_assign_single_p (s));
- 
-   tree ref_expr = NULL_TREE;
-   bool is_store, is_instrumented = false;
- 
-   if (gimple_store_p (s))
-     {
-       ref_expr = gimple_assign_lhs (s);
-       is_store = true;
-       instrument_derefs (iter, ref_expr,
- 			 gimple_location (s),
- 			 is_store);
-       is_instrumented = true;
-     }
- 
-   if (gimple_assign_load_p (s))
-     {
-       ref_expr = gimple_assign_rhs1 (s);
-       is_store = false;
-       instrument_derefs (iter, ref_expr,
- 			 gimple_location (s),
- 			 is_store);
-       is_instrumented = true;
-     }
- 
-   if (is_instrumented)
-     gsi_next (iter);
- 
-   return is_instrumented;
- }
- 
- /* Instrument the function call pointed to by the iterator ITER, if it
-    is subject to instrumentation.  At the moment, the only function
-    calls that are instrumented are some built-in functions that access
-    memory.  Look at instrument_builtin_call to learn more.
- 
-    Upon completion return TRUE iff *ITER was advanced to the statement
-    following the one it was originally pointing to.  */
- 
- static bool
- maybe_instrument_call (gimple_stmt_iterator *iter)
- {
-   gimple *stmt = gsi_stmt (*iter);
-   bool is_builtin = gimple_call_builtin_p (stmt, BUILT_IN_NORMAL);
- 
-   if (is_builtin && instrument_builtin_call (iter))
-     return true;
- 
-   if (gimple_call_noreturn_p (stmt))
-     {
-       if (is_builtin)
- 	{
- 	  tree callee = gimple_call_fndecl (stmt);
- 	  switch (DECL_FUNCTION_CODE (callee))
- 	    {
- 	    case BUILT_IN_UNREACHABLE:
- 	    case BUILT_IN_TRAP:
- 	      /* Don't instrument these.  */
- 	      return false;
- 	    default:
- 	      break;
- 	    }
- 	}
-       /* If a function does not return, then we must handle clearing up the
- 	 shadow stack accordingly.  For ASAN we can simply set the entire stack
- 	 to "valid" for accesses by setting the shadow space to 0 and all
- 	 accesses will pass checks.  That means that some bad accesses may be
- 	 missed, but we will not report any false positives.
- 
- 	 This is not possible for HWASAN.  Since there is no "always valid" tag
- 	 we can not set any space to "always valid".  If we were to clear the
- 	 entire shadow stack then code resuming from `longjmp` or a caught
- 	 exception would trigger false positives when correctly accessing
- 	 variables on the stack.  Hence we need to handle things like
- 	 `longjmp`, thread exit, and exceptions in a different way.  These
- 	 problems must be handled externally to the compiler, e.g. in the
- 	 language runtime.  */
-       if (! hwasan_sanitize_p ())
- 	{
- 	  tree decl = builtin_decl_implicit (BUILT_IN_ASAN_HANDLE_NO_RETURN);
- 	  gimple *g = gimple_build_call (decl, 0);
- 	  gimple_set_location (g, gimple_location (stmt));
- 	  gsi_insert_before (iter, g, GSI_SAME_STMT);
- 	}
-     }
- 
-   bool instrumented = false;
-   if (gimple_store_p (stmt))
-     {
-       tree ref_expr = gimple_call_lhs (stmt);
-       instrument_derefs (iter, ref_expr,
- 			 gimple_location (stmt),
- 			 /*is_store=*/true);
- 
-       instrumented = true;
-     }
- 
-   /* Walk through gimple_call arguments and check them id needed.  */
-   unsigned args_num = gimple_call_num_args (stmt);
-   for (unsigned i = 0; i < args_num; ++i)
-     {
-       tree arg = gimple_call_arg (stmt, i);
-       /* If ARG is not a non-aggregate register variable, compiler in general
- 	 creates temporary for it and pass it as argument to gimple call.
- 	 But in some cases, e.g. when we pass by value a small structure that
- 	 fits to register, compiler can avoid extra overhead by pulling out
- 	 these temporaries.  In this case, we should check the argument.  */
-       if (!is_gimple_reg (arg) && !is_gimple_min_invariant (arg))
- 	{
- 	  instrument_derefs (iter, arg,
- 			     gimple_location (stmt),
- 			     /*is_store=*/false);
- 	  instrumented = true;
- 	}
-     }
-   if (instrumented)
-     gsi_next (iter);
-   return instrumented;
- }
- 
- /* Walk each instruction of all basic block and instrument those that
-    represent memory references: loads, stores, or function calls.
-    In a given basic block, this function avoids instrumenting memory
-    references that have already been instrumented.  */
- 
- static void
- transform_statements (void)
- {
-   basic_block bb, last_bb = NULL;
-   gimple_stmt_iterator i;
-   int saved_last_basic_block = last_basic_block_for_fn (cfun);
- 
-   FOR_EACH_BB_FN (bb, cfun)
-     {
-       basic_block prev_bb = bb;
- 
-       if (bb->index >= saved_last_basic_block) continue;
- 
-       /* Flush the mem ref hash table, if current bb doesn't have
- 	 exactly one predecessor, or if that predecessor (skipping
- 	 over asan created basic blocks) isn't the last processed
- 	 basic block.  Thus we effectively flush on extended basic
- 	 block boundaries.  */
-       while (single_pred_p (prev_bb))
- 	{
- 	  prev_bb = single_pred (prev_bb);
- 	  if (prev_bb->index < saved_last_basic_block)
- 	    break;
- 	}
-       if (prev_bb != last_bb)
- 	empty_mem_ref_hash_table ();
-       last_bb = bb;
- 
-       for (i = gsi_start_bb (bb); !gsi_end_p (i);)
- 	{
- 	  gimple *s = gsi_stmt (i);
- 
- 	  if (has_stmt_been_instrumented_p (s))
- 	    gsi_next (&i);
- 	  else if (gimple_assign_single_p (s)
- 		   && !gimple_clobber_p (s)
- 		   && maybe_instrument_assignment (&i))
- 	    /*  Nothing to do as maybe_instrument_assignment advanced
- 		the iterator I.  */;
- 	  else if (is_gimple_call (s) && maybe_instrument_call (&i))
- 	    /*  Nothing to do as maybe_instrument_call
- 		advanced the iterator I.  */;
- 	  else
- 	    {
- 	      /* No instrumentation happened.
- 
- 		 If the current instruction is a function call that
- 		 might free something, let's forget about the memory
- 		 references that got instrumented.  Otherwise we might
- 		 miss some instrumentation opportunities.  Do the same
- 		 for a ASAN_MARK poisoning internal function.  */
- 	      if (is_gimple_call (s)
- 		  && (!nonfreeing_call_p (s)
- 		      || asan_mark_p (s, ASAN_MARK_POISON)))
- 		empty_mem_ref_hash_table ();
- 
- 	      gsi_next (&i);
- 	    }
- 	}
-     }
-   free_mem_ref_resources ();
- }
- 
- /* Build
-    __asan_before_dynamic_init (module_name)
-    or
-    __asan_after_dynamic_init ()
-    call.  */
- 
- tree
- asan_dynamic_init_call (bool after_p)
- {
-   if (shadow_ptr_types[0] == NULL_TREE)
-     asan_init_shadow_ptr_types ();
- 
-   tree fn = builtin_decl_implicit (after_p
- 				   ? BUILT_IN_ASAN_AFTER_DYNAMIC_INIT
- 				   : BUILT_IN_ASAN_BEFORE_DYNAMIC_INIT);
-   tree module_name_cst = NULL_TREE;
-   if (!after_p)
-     {
-       pretty_printer module_name_pp;
-       pp_string (&module_name_pp, main_input_filename);
- 
-       module_name_cst = asan_pp_string (&module_name_pp);
-       module_name_cst = fold_convert (const_ptr_type_node,
- 				      module_name_cst);
-     }
- 
-   return build_call_expr (fn, after_p ? 0 : 1, module_name_cst);
- }
- 
- /* Build
-    struct __asan_global
-    {
-      const void *__beg;
-      uptr __size;
-      uptr __size_with_redzone;
-      const void *__name;
-      const void *__module_name;
-      uptr __has_dynamic_init;
-      __asan_global_source_location *__location;
-      char *__odr_indicator;
-    } type.  */
- 
- static tree
- asan_global_struct (void)
- {
-   static const char *field_names[]
-     = { "__beg", "__size", "__size_with_redzone",
- 	"__name", "__module_name", "__has_dynamic_init", "__location",
- 	"__odr_indicator" };
-   tree fields[ARRAY_SIZE (field_names)], ret;
-   unsigned i;
- 
-   ret = make_node (RECORD_TYPE);
-   for (i = 0; i < ARRAY_SIZE (field_names); i++)
-     {
-       fields[i]
- 	= build_decl (UNKNOWN_LOCATION, FIELD_DECL,
- 		      get_identifier (field_names[i]),
- 		      (i == 0 || i == 3) ? const_ptr_type_node
- 		      : pointer_sized_int_node);
-       DECL_CONTEXT (fields[i]) = ret;
-       if (i)
- 	DECL_CHAIN (fields[i - 1]) = fields[i];
-     }
-   tree type_decl = build_decl (input_location, TYPE_DECL,
- 			       get_identifier ("__asan_global"), ret);
-   DECL_IGNORED_P (type_decl) = 1;
-   DECL_ARTIFICIAL (type_decl) = 1;
-   TYPE_FIELDS (ret) = fields[0];
-   TYPE_NAME (ret) = type_decl;
-   TYPE_STUB_DECL (ret) = type_decl;
-   TYPE_ARTIFICIAL (ret) = 1;
-   layout_type (ret);
-   return ret;
- }
- 
- /* Create and return odr indicator symbol for DECL.
-    TYPE is __asan_global struct type as returned by asan_global_struct.  */
- 
- static tree
- create_odr_indicator (tree decl, tree type)
- {
-   char *name;
-   tree uptr = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type)));
-   tree decl_name
-     = (HAS_DECL_ASSEMBLER_NAME_P (decl) ? DECL_ASSEMBLER_NAME (decl)
- 					: DECL_NAME (decl));
-   /* DECL_NAME theoretically might be NULL.  Bail out with 0 in this case.  */
-   if (decl_name == NULL_TREE)
-     return build_int_cst (uptr, 0);
-   const char *dname = IDENTIFIER_POINTER (decl_name);
-   if (HAS_DECL_ASSEMBLER_NAME_P (decl))
-     dname = targetm.strip_name_encoding (dname);
-   size_t len = strlen (dname) + sizeof ("__odr_asan_");
-   name = XALLOCAVEC (char, len);
-   snprintf (name, len, "__odr_asan_%s", dname);
- #ifndef NO_DOT_IN_LABEL
-   name[sizeof ("__odr_asan") - 1] = '.';
- #elif !defined(NO_DOLLAR_IN_LABEL)
-   name[sizeof ("__odr_asan") - 1] = '$';
- #endif
-   tree var = build_decl (UNKNOWN_LOCATION, VAR_DECL, get_identifier (name),
- 			 char_type_node);
-   TREE_ADDRESSABLE (var) = 1;
-   TREE_READONLY (var) = 0;
-   TREE_THIS_VOLATILE (var) = 1;
-   DECL_ARTIFICIAL (var) = 1;
-   DECL_IGNORED_P (var) = 1;
-   TREE_STATIC (var) = 1;
-   TREE_PUBLIC (var) = 1;
-   DECL_VISIBILITY (var) = DECL_VISIBILITY (decl);
-   DECL_VISIBILITY_SPECIFIED (var) = DECL_VISIBILITY_SPECIFIED (decl);
- 
-   TREE_USED (var) = 1;
-   tree ctor = build_constructor_va (TREE_TYPE (var), 1, NULL_TREE,
- 				    build_int_cst (unsigned_type_node, 0));
-   TREE_CONSTANT (ctor) = 1;
-   TREE_STATIC (ctor) = 1;
-   DECL_INITIAL (var) = ctor;
-   DECL_ATTRIBUTES (var) = tree_cons (get_identifier ("asan odr indicator"),
- 				     NULL, DECL_ATTRIBUTES (var));
-   make_decl_rtl (var);
-   varpool_node::finalize_decl (var);
-   return fold_convert (uptr, build_fold_addr_expr (var));
- }
- 
- /* Return true if DECL, a global var, might be overridden and needs
-    an additional odr indicator symbol.  */
- 
- static bool
- asan_needs_odr_indicator_p (tree decl)
- {
-   /* Don't emit ODR indicators for kernel because:
-      a) Kernel is written in C thus doesn't need ODR indicators.
-      b) Some kernel code may have assumptions about symbols containing specific
-         patterns in their names.  Since ODR indicators contain original names
-         of symbols they are emitted for, these assumptions would be broken for
-         ODR indicator symbols.  */
-   return (!(flag_sanitize & SANITIZE_KERNEL_ADDRESS)
- 	  && !DECL_ARTIFICIAL (decl)
- 	  && !DECL_WEAK (decl)
- 	  && TREE_PUBLIC (decl));
- }
- 
- /* Append description of a single global DECL into vector V.
-    TYPE is __asan_global struct type as returned by asan_global_struct.  */
- 
- static void
- asan_add_global (tree decl, tree type, vec<constructor_elt, va_gc> *v)
- {
-   tree init, uptr = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type)));
-   unsigned HOST_WIDE_INT size;
-   tree str_cst, module_name_cst, refdecl = decl;
-   vec<constructor_elt, va_gc> *vinner = NULL;
- 
-   pretty_printer asan_pp, module_name_pp;
- 
-   if (DECL_NAME (decl))
-     pp_tree_identifier (&asan_pp, DECL_NAME (decl));
-   else
-     pp_string (&asan_pp, "<unknown>");
-   str_cst = asan_pp_string (&asan_pp);
- 
-   pp_string (&module_name_pp, main_input_filename);
-   module_name_cst = asan_pp_string (&module_name_pp);
- 
-   if (asan_needs_local_alias (decl))
-     {
-       char buf[20];
-       ASM_GENERATE_INTERNAL_LABEL (buf, "LASAN", vec_safe_length (v) + 1);
-       refdecl = build_decl (DECL_SOURCE_LOCATION (decl),
- 			    VAR_DECL, get_identifier (buf), TREE_TYPE (decl));
-       TREE_ADDRESSABLE (refdecl) = TREE_ADDRESSABLE (decl);
-       TREE_READONLY (refdecl) = TREE_READONLY (decl);
-       TREE_THIS_VOLATILE (refdecl) = TREE_THIS_VOLATILE (decl);
-       DECL_NOT_GIMPLE_REG_P (refdecl) = DECL_NOT_GIMPLE_REG_P (decl);
-       DECL_ARTIFICIAL (refdecl) = DECL_ARTIFICIAL (decl);
-       DECL_IGNORED_P (refdecl) = DECL_IGNORED_P (decl);
-       TREE_STATIC (refdecl) = 1;
-       TREE_PUBLIC (refdecl) = 0;
-       TREE_USED (refdecl) = 1;
-       assemble_alias (refdecl, DECL_ASSEMBLER_NAME (decl));
-     }
- 
-   tree odr_indicator_ptr
-     = (asan_needs_odr_indicator_p (decl) ? create_odr_indicator (decl, type)
- 					 : build_int_cst (uptr, 0));
-   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE,
- 			  fold_convert (const_ptr_type_node,
- 					build_fold_addr_expr (refdecl)));
-   size = tree_to_uhwi (DECL_SIZE_UNIT (decl));
-   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE, build_int_cst (uptr, size));
-   size += asan_red_zone_size (size);
-   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE, build_int_cst (uptr, size));
-   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE,
- 			  fold_convert (const_ptr_type_node, str_cst));
-   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE,
- 			  fold_convert (const_ptr_type_node, module_name_cst));
-   varpool_node *vnode = varpool_node::get (decl);
-   int has_dynamic_init = 0;
-   /* FIXME: Enable initialization order fiasco detection in LTO mode once
-      proper fix for PR 79061 will be applied.  */
-   if (!in_lto_p)
-     has_dynamic_init = vnode ? vnode->dynamically_initialized : 0;
-   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE,
- 			  build_int_cst (uptr, has_dynamic_init));
-   tree locptr = NULL_TREE;
-   location_t loc = DECL_SOURCE_LOCATION (decl);
-   expanded_location xloc = expand_location (loc);
-   if (xloc.file != NULL)
-     {
-       static int lasanloccnt = 0;
-       char buf[25];
-       ASM_GENERATE_INTERNAL_LABEL (buf, "LASANLOC", ++lasanloccnt);
-       tree var = build_decl (UNKNOWN_LOCATION, VAR_DECL, get_identifier (buf),
- 			     ubsan_get_source_location_type ());
-       TREE_STATIC (var) = 1;
-       TREE_PUBLIC (var) = 0;
-       DECL_ARTIFICIAL (var) = 1;
-       DECL_IGNORED_P (var) = 1;
-       pretty_printer filename_pp;
-       pp_string (&filename_pp, xloc.file);
-       tree str = asan_pp_string (&filename_pp);
-       tree ctor = build_constructor_va (TREE_TYPE (var), 3,
- 					NULL_TREE, str, NULL_TREE,
- 					build_int_cst (unsigned_type_node,
- 						       xloc.line), NULL_TREE,
- 					build_int_cst (unsigned_type_node,
- 						       xloc.column));
-       TREE_CONSTANT (ctor) = 1;
-       TREE_STATIC (ctor) = 1;
-       DECL_INITIAL (var) = ctor;
-       varpool_node::finalize_decl (var);
-       locptr = fold_convert (uptr, build_fold_addr_expr (var));
-     }
-   else
-     locptr = build_int_cst (uptr, 0);
-   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE, locptr);
-   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE, odr_indicator_ptr);
-   init = build_constructor (type, vinner);
-   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
- }
- 
- /* Initialize sanitizer.def builtins if the FE hasn't initialized them.  */
- void
- initialize_sanitizer_builtins (void)
- {
-   tree decl;
- 
-   if (builtin_decl_implicit_p (BUILT_IN_ASAN_INIT))
-     return;
- 
-   tree BT_FN_VOID = build_function_type_list (void_type_node, NULL_TREE);
-   tree BT_FN_VOID_PTR
-     = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
-   tree BT_FN_VOID_CONST_PTR
-     = build_function_type_list (void_type_node, const_ptr_type_node, NULL_TREE);
-   tree BT_FN_VOID_PTR_PTR
-     = build_function_type_list (void_type_node, ptr_type_node,
- 				ptr_type_node, NULL_TREE);
-   tree BT_FN_VOID_PTR_PTR_PTR
-     = build_function_type_list (void_type_node, ptr_type_node,
- 				ptr_type_node, ptr_type_node, NULL_TREE);
-   tree BT_FN_VOID_PTR_PTRMODE
-     = build_function_type_list (void_type_node, ptr_type_node,
- 				pointer_sized_int_node, NULL_TREE);
-   tree BT_FN_VOID_INT
-     = build_function_type_list (void_type_node, integer_type_node, NULL_TREE);
-   tree BT_FN_SIZE_CONST_PTR_INT
-     = build_function_type_list (size_type_node, const_ptr_type_node,
- 				integer_type_node, NULL_TREE);
- 
-   tree BT_FN_VOID_UINT8_UINT8
-     = build_function_type_list (void_type_node, unsigned_char_type_node,
- 				unsigned_char_type_node, NULL_TREE);
-   tree BT_FN_VOID_UINT16_UINT16
-     = build_function_type_list (void_type_node, uint16_type_node,
- 				uint16_type_node, NULL_TREE);
-   tree BT_FN_VOID_UINT32_UINT32
-     = build_function_type_list (void_type_node, uint32_type_node,
- 				uint32_type_node, NULL_TREE);
-   tree BT_FN_VOID_UINT64_UINT64
-     = build_function_type_list (void_type_node, uint64_type_node,
- 				uint64_type_node, NULL_TREE);
-   tree BT_FN_VOID_FLOAT_FLOAT
-     = build_function_type_list (void_type_node, float_type_node,
- 				float_type_node, NULL_TREE);
-   tree BT_FN_VOID_DOUBLE_DOUBLE
-     = build_function_type_list (void_type_node, double_type_node,
- 				double_type_node, NULL_TREE);
-   tree BT_FN_VOID_UINT64_PTR
-     = build_function_type_list (void_type_node, uint64_type_node,
- 				ptr_type_node, NULL_TREE);
- 
-   tree BT_FN_PTR_CONST_PTR_UINT8
-     = build_function_type_list (ptr_type_node, const_ptr_type_node,
- 				unsigned_char_type_node, NULL_TREE);
-   tree BT_FN_VOID_PTR_UINT8_PTRMODE
-     = build_function_type_list (void_type_node, ptr_type_node,
- 				unsigned_char_type_node,
- 				pointer_sized_int_node, NULL_TREE);
- 
-   tree BT_FN_BOOL_VPTR_PTR_IX_INT_INT[5];
-   tree BT_FN_IX_CONST_VPTR_INT[5];
-   tree BT_FN_IX_VPTR_IX_INT[5];
-   tree BT_FN_VOID_VPTR_IX_INT[5];
-   tree vptr
-     = build_pointer_type (build_qualified_type (void_type_node,
- 						TYPE_QUAL_VOLATILE));
-   tree cvptr
-     = build_pointer_type (build_qualified_type (void_type_node,
- 						TYPE_QUAL_VOLATILE
- 						|TYPE_QUAL_CONST));
-   tree boolt
-     = lang_hooks.types.type_for_size (BOOL_TYPE_SIZE, 1);
-   int i;
-   for (i = 0; i < 5; i++)
-     {
-       tree ix = build_nonstandard_integer_type (BITS_PER_UNIT * (1 << i), 1);
-       BT_FN_BOOL_VPTR_PTR_IX_INT_INT[i]
- 	= build_function_type_list (boolt, vptr, ptr_type_node, ix,
- 				    integer_type_node, integer_type_node,
- 				    NULL_TREE);
-       BT_FN_IX_CONST_VPTR_INT[i]
- 	= build_function_type_list (ix, cvptr, integer_type_node, NULL_TREE);
-       BT_FN_IX_VPTR_IX_INT[i]
- 	= build_function_type_list (ix, vptr, ix, integer_type_node,
- 				    NULL_TREE);
-       BT_FN_VOID_VPTR_IX_INT[i]
- 	= build_function_type_list (void_type_node, vptr, ix,
- 				    integer_type_node, NULL_TREE);
-     }
- #define BT_FN_BOOL_VPTR_PTR_I1_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[0]
- #define BT_FN_I1_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[0]
- #define BT_FN_I1_VPTR_I1_INT BT_FN_IX_VPTR_IX_INT[0]
- #define BT_FN_VOID_VPTR_I1_INT BT_FN_VOID_VPTR_IX_INT[0]
- #define BT_FN_BOOL_VPTR_PTR_I2_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[1]
- #define BT_FN_I2_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[1]
- #define BT_FN_I2_VPTR_I2_INT BT_FN_IX_VPTR_IX_INT[1]
- #define BT_FN_VOID_VPTR_I2_INT BT_FN_VOID_VPTR_IX_INT[1]
- #define BT_FN_BOOL_VPTR_PTR_I4_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[2]
- #define BT_FN_I4_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[2]
- #define BT_FN_I4_VPTR_I4_INT BT_FN_IX_VPTR_IX_INT[2]
- #define BT_FN_VOID_VPTR_I4_INT BT_FN_VOID_VPTR_IX_INT[2]
- #define BT_FN_BOOL_VPTR_PTR_I8_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[3]
- #define BT_FN_I8_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[3]
- #define BT_FN_I8_VPTR_I8_INT BT_FN_IX_VPTR_IX_INT[3]
- #define BT_FN_VOID_VPTR_I8_INT BT_FN_VOID_VPTR_IX_INT[3]
- #define BT_FN_BOOL_VPTR_PTR_I16_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[4]
- #define BT_FN_I16_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[4]
- #define BT_FN_I16_VPTR_I16_INT BT_FN_IX_VPTR_IX_INT[4]
- #define BT_FN_VOID_VPTR_I16_INT BT_FN_VOID_VPTR_IX_INT[4]
- #undef ATTR_NOTHROW_LIST
- #define ATTR_NOTHROW_LIST ECF_NOTHROW
- #undef ATTR_NOTHROW_LEAF_LIST
- #define ATTR_NOTHROW_LEAF_LIST ECF_NOTHROW | ECF_LEAF
- #undef ATTR_TMPURE_NOTHROW_LEAF_LIST
- #define ATTR_TMPURE_NOTHROW_LEAF_LIST ECF_TM_PURE | ATTR_NOTHROW_LEAF_LIST
- #undef ATTR_NORETURN_NOTHROW_LEAF_LIST
- #define ATTR_NORETURN_NOTHROW_LEAF_LIST ECF_NORETURN | ATTR_NOTHROW_LEAF_LIST
- #undef ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST
- #define ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST \
-   ECF_CONST | ATTR_NORETURN_NOTHROW_LEAF_LIST
- #undef ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST
- #define ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST \
-   ECF_TM_PURE | ATTR_NORETURN_NOTHROW_LEAF_LIST
- #undef ATTR_COLD_NOTHROW_LEAF_LIST
- #define ATTR_COLD_NOTHROW_LEAF_LIST \
-   /* ECF_COLD missing */ ATTR_NOTHROW_LEAF_LIST
- #undef ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST
- #define ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST \
-   /* ECF_COLD missing */ ATTR_NORETURN_NOTHROW_LEAF_LIST
- #undef ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST
- #define ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST \
-   /* ECF_COLD missing */ ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST
- #undef ATTR_PURE_NOTHROW_LEAF_LIST
- #define ATTR_PURE_NOTHROW_LEAF_LIST ECF_PURE | ATTR_NOTHROW_LEAF_LIST
- #undef DEF_BUILTIN_STUB
- #define DEF_BUILTIN_STUB(ENUM, NAME)
- #undef DEF_SANITIZER_BUILTIN_1
- #define DEF_SANITIZER_BUILTIN_1(ENUM, NAME, TYPE, ATTRS)		\
-   do {									\
-     decl = add_builtin_function ("__builtin_" NAME, TYPE, ENUM,		\
- 				 BUILT_IN_NORMAL, NAME, NULL_TREE);	\
-     set_call_expr_flags (decl, ATTRS);					\
-     set_builtin_decl (ENUM, decl, true);				\
-   } while (0)
- #undef DEF_SANITIZER_BUILTIN
- #define DEF_SANITIZER_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
-   DEF_SANITIZER_BUILTIN_1 (ENUM, NAME, TYPE, ATTRS);
- 
- #include "sanitizer.def"
- 
-   /* -fsanitize=object-size uses __builtin_object_size, but that might
-      not be available for e.g. Fortran at this point.  We use
-      DEF_SANITIZER_BUILTIN here only as a convenience macro.  */
-   if ((flag_sanitize & SANITIZE_OBJECT_SIZE)
-       && !builtin_decl_implicit_p (BUILT_IN_OBJECT_SIZE))
-     DEF_SANITIZER_BUILTIN_1 (BUILT_IN_OBJECT_SIZE, "object_size",
- 			     BT_FN_SIZE_CONST_PTR_INT,
- 			     ATTR_PURE_NOTHROW_LEAF_LIST);
- 
- #undef DEF_SANITIZER_BUILTIN_1
- #undef DEF_SANITIZER_BUILTIN
- #undef DEF_BUILTIN_STUB
- }
- 
- /* Called via htab_traverse.  Count number of emitted
-    STRING_CSTs in the constant hash table.  */
- 
- int
- count_string_csts (constant_descriptor_tree **slot,
- 		   unsigned HOST_WIDE_INT *data)
- {
-   struct constant_descriptor_tree *desc = *slot;
-   if (TREE_CODE (desc->value) == STRING_CST
-       && TREE_ASM_WRITTEN (desc->value)
-       && asan_protect_global (desc->value))
-     ++*data;
-   return 1;
- }
- 
- /* Helper structure to pass two parameters to
-    add_string_csts.  */
- 
- struct asan_add_string_csts_data
- {
-   tree type;
-   vec<constructor_elt, va_gc> *v;
- };
- 
- /* Called via hash_table::traverse.  Call asan_add_global
-    on emitted STRING_CSTs from the constant hash table.  */
- 
- int
- add_string_csts (constant_descriptor_tree **slot,
- 		 asan_add_string_csts_data *aascd)
- {
-   struct constant_descriptor_tree *desc = *slot;
-   if (TREE_CODE (desc->value) == STRING_CST
-       && TREE_ASM_WRITTEN (desc->value)
-       && asan_protect_global (desc->value))
-     {
-       asan_add_global (SYMBOL_REF_DECL (XEXP (desc->rtl, 0)),
- 		       aascd->type, aascd->v);
-     }
-   return 1;
- }
- 
- /* Needs to be GTY(()), because cgraph_build_static_cdtor may
-    invoke ggc_collect.  */
- static GTY(()) tree asan_ctor_statements;
- 
- /* Module-level instrumentation.
-    - Insert __asan_init_vN() into the list of CTORs.
-    - TODO: insert redzones around globals.
-  */
- 
- void
- asan_finish_file (void)
- {
-   varpool_node *vnode;
-   unsigned HOST_WIDE_INT gcount = 0;
- 
-   if (shadow_ptr_types[0] == NULL_TREE)
-     asan_init_shadow_ptr_types ();
-   /* Avoid instrumenting code in the asan ctors/dtors.
-      We don't need to insert padding after the description strings,
-      nor after .LASAN* array.  */
-   flag_sanitize &= ~SANITIZE_ADDRESS;
- 
-   /* For user-space we want asan constructors to run first.
-      Linux kernel does not support priorities other than default, and the only
-      other user of constructors is coverage. So we run with the default
-      priority.  */
-   int priority = flag_sanitize & SANITIZE_USER_ADDRESS
-                  ? MAX_RESERVED_INIT_PRIORITY - 1 : DEFAULT_INIT_PRIORITY;
- 
-   if (flag_sanitize & SANITIZE_USER_ADDRESS)
-     {
-       tree fn = builtin_decl_implicit (BUILT_IN_ASAN_INIT);
-       append_to_statement_list (build_call_expr (fn, 0), &asan_ctor_statements);
-       fn = builtin_decl_implicit (BUILT_IN_ASAN_VERSION_MISMATCH_CHECK);
-       append_to_statement_list (build_call_expr (fn, 0), &asan_ctor_statements);
-     }
-   FOR_EACH_DEFINED_VARIABLE (vnode)
-     if (TREE_ASM_WRITTEN (vnode->decl)
- 	&& asan_protect_global (vnode->decl))
-       ++gcount;
-   hash_table<tree_descriptor_hasher> *const_desc_htab = constant_pool_htab ();
-   const_desc_htab->traverse<unsigned HOST_WIDE_INT *, count_string_csts>
-     (&gcount);
-   if (gcount)
-     {
-       tree type = asan_global_struct (), var, ctor;
-       tree dtor_statements = NULL_TREE;
-       vec<constructor_elt, va_gc> *v;
-       char buf[20];
- 
-       type = build_array_type_nelts (type, gcount);
-       ASM_GENERATE_INTERNAL_LABEL (buf, "LASAN", 0);
-       var = build_decl (UNKNOWN_LOCATION, VAR_DECL, get_identifier (buf),
- 			type);
-       TREE_STATIC (var) = 1;
-       TREE_PUBLIC (var) = 0;
-       DECL_ARTIFICIAL (var) = 1;
-       DECL_IGNORED_P (var) = 1;
-       vec_alloc (v, gcount);
-       FOR_EACH_DEFINED_VARIABLE (vnode)
- 	if (TREE_ASM_WRITTEN (vnode->decl)
- 	    && asan_protect_global (vnode->decl))
- 	  asan_add_global (vnode->decl, TREE_TYPE (type), v);
-       struct asan_add_string_csts_data aascd;
-       aascd.type = TREE_TYPE (type);
-       aascd.v = v;
-       const_desc_htab->traverse<asan_add_string_csts_data *, add_string_csts>
-        	(&aascd);
-       ctor = build_constructor (type, v);
-       TREE_CONSTANT (ctor) = 1;
-       TREE_STATIC (ctor) = 1;
-       DECL_INITIAL (var) = ctor;
-       SET_DECL_ALIGN (var, MAX (DECL_ALIGN (var),
- 				ASAN_SHADOW_GRANULARITY * BITS_PER_UNIT));
- 
-       varpool_node::finalize_decl (var);
- 
-       tree fn = builtin_decl_implicit (BUILT_IN_ASAN_REGISTER_GLOBALS);
-       tree gcount_tree = build_int_cst (pointer_sized_int_node, gcount);
-       append_to_statement_list (build_call_expr (fn, 2,
- 						 build_fold_addr_expr (var),
- 						 gcount_tree),
- 				&asan_ctor_statements);
- 
-       fn = builtin_decl_implicit (BUILT_IN_ASAN_UNREGISTER_GLOBALS);
-       append_to_statement_list (build_call_expr (fn, 2,
- 						 build_fold_addr_expr (var),
- 						 gcount_tree),
- 				&dtor_statements);
-       cgraph_build_static_cdtor ('D', dtor_statements, priority);
-     }
-   if (asan_ctor_statements)
-     cgraph_build_static_cdtor ('I', asan_ctor_statements, priority);
-   flag_sanitize |= SANITIZE_ADDRESS;
- }
- 
- /* Poison or unpoison (depending on IS_CLOBBER variable) shadow memory based
-    on SHADOW address.  Newly added statements will be added to ITER with
-    given location LOC.  We mark SIZE bytes in shadow memory, where
-    LAST_CHUNK_SIZE is greater than zero in situation where we are at the
-    end of a variable.  */
- 
- static void
- asan_store_shadow_bytes (gimple_stmt_iterator *iter, location_t loc,
- 			 tree shadow,
- 			 unsigned HOST_WIDE_INT base_addr_offset,
- 			 bool is_clobber, unsigned size,
- 			 unsigned last_chunk_size)
- {
-   tree shadow_ptr_type;
- 
-   switch (size)
-     {
-     case 1:
-       shadow_ptr_type = shadow_ptr_types[0];
-       break;
-     case 2:
-       shadow_ptr_type = shadow_ptr_types[1];
-       break;
-     case 4:
-       shadow_ptr_type = shadow_ptr_types[2];
-       break;
-     default:
-       gcc_unreachable ();
-     }
- 
-   unsigned char c = (char) is_clobber ? ASAN_STACK_MAGIC_USE_AFTER_SCOPE : 0;
-   unsigned HOST_WIDE_INT val = 0;
-   unsigned last_pos = size;
-   if (last_chunk_size && !is_clobber)
-     last_pos = BYTES_BIG_ENDIAN ? 0 : size - 1;
-   for (unsigned i = 0; i < size; ++i)
-     {
-       unsigned char shadow_c = c;
-       if (i == last_pos)
- 	shadow_c = last_chunk_size;
-       val |= (unsigned HOST_WIDE_INT) shadow_c << (BITS_PER_UNIT * i);
-     }
- 
-   /* Handle last chunk in unpoisoning.  */
-   tree magic = build_int_cst (TREE_TYPE (shadow_ptr_type), val);
- 
-   tree dest = build2 (MEM_REF, TREE_TYPE (shadow_ptr_type), shadow,
- 		      build_int_cst (shadow_ptr_type, base_addr_offset));
- 
-   gimple *g = gimple_build_assign (dest, magic);
-   gimple_set_location (g, loc);
-   gsi_insert_after (iter, g, GSI_NEW_STMT);
- }
- 
- /* Expand the ASAN_MARK builtins.  */
- 
- bool
- asan_expand_mark_ifn (gimple_stmt_iterator *iter)
- {
-   gimple *g = gsi_stmt (*iter);
-   location_t loc = gimple_location (g);
-   HOST_WIDE_INT flag = tree_to_shwi (gimple_call_arg (g, 0));
-   bool is_poison = ((asan_mark_flags)flag) == ASAN_MARK_POISON;
- 
-   tree base = gimple_call_arg (g, 1);
-   gcc_checking_assert (TREE_CODE (base) == ADDR_EXPR);
-   tree decl = TREE_OPERAND (base, 0);
- 
-   /* For a nested function, we can have: ASAN_MARK (2, &FRAME.2.fp_input, 4) */
-   if (TREE_CODE (decl) == COMPONENT_REF
-       && DECL_NONLOCAL_FRAME (TREE_OPERAND (decl, 0)))
-     decl = TREE_OPERAND (decl, 0);
- 
-   gcc_checking_assert (TREE_CODE (decl) == VAR_DECL);
- 
-   if (hwasan_sanitize_p ())
-     {
-       gcc_assert (param_hwasan_instrument_stack);
-       gimple_seq stmts = NULL;
-       /* Here we swap ASAN_MARK calls for HWASAN_MARK.
- 	 This is because we are using the approach of using ASAN_MARK as a
- 	 synonym until here.
- 	 That approach means we don't yet have to duplicate all the special
- 	 cases for ASAN_MARK and ASAN_POISON with the exact same handling but
- 	 called HWASAN_MARK etc.
- 
- 	 N.b. __asan_poison_stack_memory (which implements ASAN_MARK for ASAN)
- 	 rounds the size up to its shadow memory granularity, while
- 	 __hwasan_tag_memory (which implements the same for HWASAN) does not.
- 	 Hence we emit HWASAN_MARK with an aligned size unlike ASAN_MARK.  */
-       tree len = gimple_call_arg (g, 2);
-       tree new_len = gimple_build_round_up (&stmts, loc, size_type_node, len,
- 					    HWASAN_TAG_GRANULE_SIZE);
-       gimple_build (&stmts, loc, CFN_HWASAN_MARK,
- 		    void_type_node, gimple_call_arg (g, 0),
- 		    base, new_len);
-       gsi_replace_with_seq (iter, stmts, true);
-       return false;
-     }
- 
-   if (is_poison)
-     {
-       if (asan_handled_variables == NULL)
- 	asan_handled_variables = new hash_set<tree> (16);
-       asan_handled_variables->add (decl);
-     }
-   tree len = gimple_call_arg (g, 2);
- 
-   gcc_assert (tree_fits_shwi_p (len));
-   unsigned HOST_WIDE_INT size_in_bytes = tree_to_shwi (len);
-   gcc_assert (size_in_bytes);
- 
-   g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
- 			   NOP_EXPR, base);
-   gimple_set_location (g, loc);
-   gsi_replace (iter, g, false);
-   tree base_addr = gimple_assign_lhs (g);
- 
-   /* Generate direct emission if size_in_bytes is small.  */
-   if (size_in_bytes
-       <= (unsigned)param_use_after_scope_direct_emission_threshold)
-     {
-       const unsigned HOST_WIDE_INT shadow_size
- 	= shadow_mem_size (size_in_bytes);
-       const unsigned int shadow_align
- 	= (get_pointer_alignment (base) / BITS_PER_UNIT) >> ASAN_SHADOW_SHIFT;
- 
-       tree shadow = build_shadow_mem_access (iter, loc, base_addr,
- 					     shadow_ptr_types[0], true);
- 
-       for (unsigned HOST_WIDE_INT offset = 0; offset < shadow_size;)
- 	{
- 	  unsigned size = 1;
- 	  if (shadow_size - offset >= 4
- 	      && (!STRICT_ALIGNMENT || shadow_align >= 4))
- 	    size = 4;
- 	  else if (shadow_size - offset >= 2
- 		   && (!STRICT_ALIGNMENT || shadow_align >= 2))
- 	    size = 2;
- 
- 	  unsigned HOST_WIDE_INT last_chunk_size = 0;
- 	  unsigned HOST_WIDE_INT s = (offset + size) * ASAN_SHADOW_GRANULARITY;
- 	  if (s > size_in_bytes)
- 	    last_chunk_size = ASAN_SHADOW_GRANULARITY - (s - size_in_bytes);
- 
- 	  asan_store_shadow_bytes (iter, loc, shadow, offset, is_poison,
- 				   size, last_chunk_size);
- 	  offset += size;
- 	}
-     }
-   else
-     {
-       g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
- 			       NOP_EXPR, len);
-       gimple_set_location (g, loc);
-       gsi_insert_before (iter, g, GSI_SAME_STMT);
-       tree sz_arg = gimple_assign_lhs (g);
- 
-       tree fun
- 	= builtin_decl_implicit (is_poison ? BUILT_IN_ASAN_POISON_STACK_MEMORY
- 				 : BUILT_IN_ASAN_UNPOISON_STACK_MEMORY);
-       g = gimple_build_call (fun, 2, base_addr, sz_arg);
-       gimple_set_location (g, loc);
-       gsi_insert_after (iter, g, GSI_NEW_STMT);
-     }
- 
-   return false;
- }
- 
- /* Expand the ASAN_{LOAD,STORE} builtins.  */
- 
- bool
- asan_expand_check_ifn (gimple_stmt_iterator *iter, bool use_calls)
- {
-   gcc_assert (!hwasan_sanitize_p ());
-   gimple *g = gsi_stmt (*iter);
-   location_t loc = gimple_location (g);
-   bool recover_p;
-   if (flag_sanitize & SANITIZE_USER_ADDRESS)
-     recover_p = (flag_sanitize_recover & SANITIZE_USER_ADDRESS) != 0;
-   else
-     recover_p = (flag_sanitize_recover & SANITIZE_KERNEL_ADDRESS) != 0;
- 
-   HOST_WIDE_INT flags = tree_to_shwi (gimple_call_arg (g, 0));
-   gcc_assert (flags < ASAN_CHECK_LAST);
-   bool is_scalar_access = (flags & ASAN_CHECK_SCALAR_ACCESS) != 0;
-   bool is_store = (flags & ASAN_CHECK_STORE) != 0;
-   bool is_non_zero_len = (flags & ASAN_CHECK_NON_ZERO_LEN) != 0;
- 
-   tree base = gimple_call_arg (g, 1);
-   tree len = gimple_call_arg (g, 2);
-   HOST_WIDE_INT align = tree_to_shwi (gimple_call_arg (g, 3));
- 
-   HOST_WIDE_INT size_in_bytes
-     = is_scalar_access && tree_fits_shwi_p (len) ? tree_to_shwi (len) : -1;
- 
-   if (use_calls)
-     {
-       /* Instrument using callbacks.  */
-       gimple *g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
- 				      NOP_EXPR, base);
-       gimple_set_location (g, loc);
-       gsi_insert_before (iter, g, GSI_SAME_STMT);
-       tree base_addr = gimple_assign_lhs (g);
- 
-       int nargs;
-       tree fun = check_func (is_store, recover_p, size_in_bytes, &nargs);
-       if (nargs == 1)
- 	g = gimple_build_call (fun, 1, base_addr);
-       else
- 	{
- 	  gcc_assert (nargs == 2);
- 	  g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
- 				   NOP_EXPR, len);
- 	  gimple_set_location (g, loc);
- 	  gsi_insert_before (iter, g, GSI_SAME_STMT);
- 	  tree sz_arg = gimple_assign_lhs (g);
- 	  g = gimple_build_call (fun, nargs, base_addr, sz_arg);
- 	}
-       gimple_set_location (g, loc);
-       gsi_replace (iter, g, false);
-       return false;
-     }
- 
-   HOST_WIDE_INT real_size_in_bytes = size_in_bytes == -1 ? 1 : size_in_bytes;
- 
-   tree shadow_ptr_type = shadow_ptr_types[real_size_in_bytes == 16 ? 1 : 0];
-   tree shadow_type = TREE_TYPE (shadow_ptr_type);
- 
-   gimple_stmt_iterator gsi = *iter;
- 
-   if (!is_non_zero_len)
-     {
-       /* So, the length of the memory area to asan-protect is
- 	 non-constant.  Let's guard the generated instrumentation code
- 	 like:
- 
- 	 if (len != 0)
- 	   {
- 	     //asan instrumentation code goes here.
- 	   }
- 	 // falltrough instructions, starting with *ITER.  */
- 
-       g = gimple_build_cond (NE_EXPR,
- 			    len,
- 			    build_int_cst (TREE_TYPE (len), 0),
- 			    NULL_TREE, NULL_TREE);
-       gimple_set_location (g, loc);
- 
-       basic_block then_bb, fallthrough_bb;
-       insert_if_then_before_iter (as_a <gcond *> (g), iter,
- 				  /*then_more_likely_p=*/true,
- 				  &then_bb, &fallthrough_bb);
-       /* Note that fallthrough_bb starts with the statement that was
- 	pointed to by ITER.  */
- 
-       /* The 'then block' of the 'if (len != 0) condition is where
- 	we'll generate the asan instrumentation code now.  */
-       gsi = gsi_last_bb (then_bb);
-     }
- 
-   /* Get an iterator on the point where we can add the condition
-      statement for the instrumentation.  */
-   basic_block then_bb, else_bb;
-   gsi = create_cond_insert_point (&gsi, /*before_p*/false,
- 				  /*then_more_likely_p=*/false,
- 				  /*create_then_fallthru_edge*/recover_p,
- 				  &then_bb,
- 				  &else_bb);
- 
-   g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
- 			   NOP_EXPR, base);
-   gimple_set_location (g, loc);
-   gsi_insert_before (&gsi, g, GSI_NEW_STMT);
-   tree base_addr = gimple_assign_lhs (g);
- 
-   tree t = NULL_TREE;
-   if (real_size_in_bytes >= 8)
-     {
-       tree shadow = build_shadow_mem_access (&gsi, loc, base_addr,
- 					     shadow_ptr_type);
-       t = shadow;
-     }
-   else
-     {
-       /* Slow path for 1, 2 and 4 byte accesses.  */
-       /* Test (shadow != 0)
- 	 & ((base_addr & 7) + (real_size_in_bytes - 1)) >= shadow).  */
-       tree shadow = build_shadow_mem_access (&gsi, loc, base_addr,
- 					     shadow_ptr_type);
-       gimple *shadow_test = build_assign (NE_EXPR, shadow, 0);
-       gimple_seq seq = NULL;
-       gimple_seq_add_stmt (&seq, shadow_test);
-       /* Aligned (>= 8 bytes) can test just
- 	 (real_size_in_bytes - 1 >= shadow), as base_addr & 7 is known
- 	 to be 0.  */
-       if (align < 8)
- 	{
- 	  gimple_seq_add_stmt (&seq, build_assign (BIT_AND_EXPR,
- 						   base_addr, 7));
- 	  gimple_seq_add_stmt (&seq,
- 			       build_type_cast (shadow_type,
- 						gimple_seq_last (seq)));
- 	  if (real_size_in_bytes > 1)
- 	    gimple_seq_add_stmt (&seq,
- 				 build_assign (PLUS_EXPR,
- 					       gimple_seq_last (seq),
- 					       real_size_in_bytes - 1));
- 	  t = gimple_assign_lhs (gimple_seq_last_stmt (seq));
- 	}
-       else
- 	t = build_int_cst (shadow_type, real_size_in_bytes - 1);
-       gimple_seq_add_stmt (&seq, build_assign (GE_EXPR, t, shadow));
-       gimple_seq_add_stmt (&seq, build_assign (BIT_AND_EXPR, shadow_test,
- 					       gimple_seq_last (seq)));
-       t = gimple_assign_lhs (gimple_seq_last (seq));
-       gimple_seq_set_location (seq, loc);
-       gsi_insert_seq_after (&gsi, seq, GSI_CONTINUE_LINKING);
- 
-       /* For non-constant, misaligned or otherwise weird access sizes,
-        check first and last byte.  */
-       if (size_in_bytes == -1)
- 	{
- 	  g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
- 				   MINUS_EXPR, len,
- 				   build_int_cst (pointer_sized_int_node, 1));
- 	  gimple_set_location (g, loc);
- 	  gsi_insert_after (&gsi, g, GSI_NEW_STMT);
- 	  tree last = gimple_assign_lhs (g);
- 	  g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
- 				   PLUS_EXPR, base_addr, last);
- 	  gimple_set_location (g, loc);
- 	  gsi_insert_after (&gsi, g, GSI_NEW_STMT);
- 	  tree base_end_addr = gimple_assign_lhs (g);
- 
- 	  tree shadow = build_shadow_mem_access (&gsi, loc, base_end_addr,
- 						 shadow_ptr_type);
- 	  gimple *shadow_test = build_assign (NE_EXPR, shadow, 0);
- 	  gimple_seq seq = NULL;
- 	  gimple_seq_add_stmt (&seq, shadow_test);
- 	  gimple_seq_add_stmt (&seq, build_assign (BIT_AND_EXPR,
- 						   base_end_addr, 7));
- 	  gimple_seq_add_stmt (&seq, build_type_cast (shadow_type,
- 						      gimple_seq_last (seq)));
- 	  gimple_seq_add_stmt (&seq, build_assign (GE_EXPR,
- 						   gimple_seq_last (seq),
- 						   shadow));
- 	  gimple_seq_add_stmt (&seq, build_assign (BIT_AND_EXPR, shadow_test,
- 						   gimple_seq_last (seq)));
- 	  gimple_seq_add_stmt (&seq, build_assign (BIT_IOR_EXPR, t,
- 						   gimple_seq_last (seq)));
- 	  t = gimple_assign_lhs (gimple_seq_last (seq));
- 	  gimple_seq_set_location (seq, loc);
- 	  gsi_insert_seq_after (&gsi, seq, GSI_CONTINUE_LINKING);
- 	}
-     }
- 
-   g = gimple_build_cond (NE_EXPR, t, build_int_cst (TREE_TYPE (t), 0),
- 			 NULL_TREE, NULL_TREE);
-   gimple_set_location (g, loc);
-   gsi_insert_after (&gsi, g, GSI_NEW_STMT);
- 
-   /* Generate call to the run-time library (e.g. __asan_report_load8).  */
-   gsi = gsi_start_bb (then_bb);
-   int nargs;
-   tree fun = report_error_func (is_store, recover_p, size_in_bytes, &nargs);
-   g = gimple_build_call (fun, nargs, base_addr, len);
-   gimple_set_location (g, loc);
-   gsi_insert_after (&gsi, g, GSI_NEW_STMT);
- 
-   gsi_remove (iter, true);
-   *iter = gsi_start_bb (else_bb);
- 
-   return true;
- }
- 
- /* Create ASAN shadow variable for a VAR_DECL which has been rewritten
-    into SSA.  Already seen VAR_DECLs are stored in SHADOW_VARS_MAPPING.  */
- 
- static tree
- create_asan_shadow_var (tree var_decl,
- 			hash_map<tree, tree> &shadow_vars_mapping)
- {
-   tree *slot = shadow_vars_mapping.get (var_decl);
-   if (slot == NULL)
-     {
-       tree shadow_var = copy_node (var_decl);
- 
-       copy_body_data id;
-       memset (&id, 0, sizeof (copy_body_data));
-       id.src_fn = id.dst_fn = current_function_decl;
-       copy_decl_for_dup_finish (&id, var_decl, shadow_var);
- 
-       DECL_ARTIFICIAL (shadow_var) = 1;
-       DECL_IGNORED_P (shadow_var) = 1;
-       DECL_SEEN_IN_BIND_EXPR_P (shadow_var) = 0;
-       gimple_add_tmp_var (shadow_var);
- 
-       shadow_vars_mapping.put (var_decl, shadow_var);
-       return shadow_var;
-     }
-   else
-     return *slot;
- }
- 
- /* Expand ASAN_POISON ifn.  */
- 
- bool
- asan_expand_poison_ifn (gimple_stmt_iterator *iter,
- 			bool *need_commit_edge_insert,
- 			hash_map<tree, tree> &shadow_vars_mapping)
- {
-   gimple *g = gsi_stmt (*iter);
-   tree poisoned_var = gimple_call_lhs (g);
-   if (!poisoned_var || has_zero_uses (poisoned_var))
-     {
-       gsi_remove (iter, true);
-       return true;
-     }
- 
-   if (SSA_NAME_VAR (poisoned_var) == NULL_TREE)
-     SET_SSA_NAME_VAR_OR_IDENTIFIER (poisoned_var,
- 				    create_tmp_var (TREE_TYPE (poisoned_var)));
- 
-   tree shadow_var = create_asan_shadow_var (SSA_NAME_VAR (poisoned_var),
- 					    shadow_vars_mapping);
- 
-   bool recover_p;
-   if (flag_sanitize & SANITIZE_USER_ADDRESS)
-     recover_p = (flag_sanitize_recover & SANITIZE_USER_ADDRESS) != 0;
-   else
-     recover_p = (flag_sanitize_recover & SANITIZE_KERNEL_ADDRESS) != 0;
-   tree size = DECL_SIZE_UNIT (shadow_var);
-   gimple *poison_call
-     = gimple_build_call_internal (IFN_ASAN_MARK, 3,
- 				  build_int_cst (integer_type_node,
- 						 ASAN_MARK_POISON),
- 				  build_fold_addr_expr (shadow_var), size);
- 
-   gimple *use;
-   imm_use_iterator imm_iter;
-   FOR_EACH_IMM_USE_STMT (use, imm_iter, poisoned_var)
-     {
-       if (is_gimple_debug (use))
- 	continue;
- 
-       int nargs;
-       bool store_p = gimple_call_internal_p (use, IFN_ASAN_POISON_USE);
-       gcall *call;
-       if (hwasan_sanitize_p ())
- 	{
- 	  tree fun = builtin_decl_implicit (BUILT_IN_HWASAN_TAG_MISMATCH4);
- 	  /* NOTE: hwasan has no __hwasan_report_* functions like asan does.
- 		We use __hwasan_tag_mismatch4 with arguments that tell it the
- 		size of access and load to report all tag mismatches.
- 
- 		The arguments to this function are:
- 		  Address of invalid access.
- 		  Bitfield containing information about the access
- 		    (access_info)
- 		  Pointer to a frame of registers
- 		    (for use in printing the contents of registers in a dump)
- 		    Not used yet -- to be used by inline instrumentation.
- 		  Size of access.
- 
- 		The access_info bitfield encodes the following pieces of
- 		information:
- 		  - Is this a store or load?
- 		    access_info & 0x10  =>  store
- 		  - Should the program continue after reporting the error?
- 		    access_info & 0x20  =>  recover
- 		  - What size access is this (not used here since we can always
- 		    pass the size in the last argument)
- 
- 		    if (access_info & 0xf == 0xf)
- 		      size is taken from last argument.
- 		    else
- 		      size == 1 << (access_info & 0xf)
- 
- 		The last argument contains the size of the access iff the
- 		access_info size indicator is 0xf (we always use this argument
- 		rather than storing the size in the access_info bitfield).
- 
- 		See the function definition `__hwasan_tag_mismatch4` in
- 		libsanitizer/hwasan for the full definition.
- 		*/
- 	  unsigned access_info = (0x20 * recover_p)
- 	    + (0x10 * store_p)
- 	    + (0xf);
- 	  call = gimple_build_call (fun, 4,
- 				    build_fold_addr_expr (shadow_var),
- 				    build_int_cst (pointer_sized_int_node,
- 						   access_info),
- 				    build_int_cst (pointer_sized_int_node, 0),
- 				    size);
- 	}
-       else
- 	{
- 	  tree fun = report_error_func (store_p, recover_p, tree_to_uhwi (size),
- 					&nargs);
- 	  call = gimple_build_call (fun, 1,
- 				    build_fold_addr_expr (shadow_var));
- 	}
-       gimple_set_location (call, gimple_location (use));
-       gimple *call_to_insert = call;
- 
-       /* The USE can be a gimple PHI node.  If so, insert the call on
- 	 all edges leading to the PHI node.  */
-       if (is_a <gphi *> (use))
- 	{
- 	  gphi *phi = dyn_cast<gphi *> (use);
- 	  for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i)
- 	    if (gimple_phi_arg_def (phi, i) == poisoned_var)
- 	      {
- 		edge e = gimple_phi_arg_edge (phi, i);
- 
- 		/* Do not insert on an edge we can't split.  */
- 		if (e->flags & EDGE_ABNORMAL)
- 		  continue;
- 
- 		if (call_to_insert == NULL)
- 		  call_to_insert = gimple_copy (call);
- 
- 		gsi_insert_seq_on_edge (e, call_to_insert);
- 		*need_commit_edge_insert = true;
- 		call_to_insert = NULL;
- 	      }
- 	}
-       else
- 	{
- 	  gimple_stmt_iterator gsi = gsi_for_stmt (use);
- 	  if (store_p)
- 	    gsi_replace (&gsi, call, true);
- 	  else
- 	    gsi_insert_before (&gsi, call, GSI_NEW_STMT);
- 	}
-     }
- 
-   SSA_NAME_IS_DEFAULT_DEF (poisoned_var) = true;
-   SSA_NAME_DEF_STMT (poisoned_var) = gimple_build_nop ();
-   gsi_replace (iter, poison_call, false);
- 
-   return true;
- }
- 
- /* Instrument the current function.  */
- 
- static unsigned int
- asan_instrument (void)
- {
-   if (hwasan_sanitize_p ())
-     {
-       transform_statements ();
-       return 0;
-     }
- 
-   if (shadow_ptr_types[0] == NULL_TREE)
-     asan_init_shadow_ptr_types ();
-   transform_statements ();
-   last_alloca_addr = NULL_TREE;
-   return 0;
- }
- 
- static bool
- gate_asan (void)
- {
-   return sanitize_flags_p (SANITIZE_ADDRESS);
- }
- 
- namespace {
- 
- const pass_data pass_data_asan =
- {
-   GIMPLE_PASS, /* type */
-   "asan", /* name */
-   OPTGROUP_NONE, /* optinfo_flags */
-   TV_NONE, /* tv_id */
-   ( PROP_ssa | PROP_cfg | PROP_gimple_leh ), /* properties_required */
-   0, /* properties_provided */
-   0, /* properties_destroyed */
-   0, /* todo_flags_start */
-   TODO_update_ssa, /* todo_flags_finish */
- };
- 
- class pass_asan : public gimple_opt_pass
- {
- public:
-   pass_asan (gcc::context *ctxt)
-     : gimple_opt_pass (pass_data_asan, ctxt)
-   {}
- 
-   /* opt_pass methods: */
-   opt_pass * clone () { return new pass_asan (m_ctxt); }
-   virtual bool gate (function *) { return gate_asan () || gate_hwasan (); }
-   virtual unsigned int execute (function *) { return asan_instrument (); }
- 
- }; // class pass_asan
- 
- } // anon namespace
- 
- gimple_opt_pass *
- make_pass_asan (gcc::context *ctxt)
- {
-   return new pass_asan (ctxt);
- }
- 
- namespace {
- 
- const pass_data pass_data_asan_O0 =
- {
-   GIMPLE_PASS, /* type */
-   "asan0", /* name */
-   OPTGROUP_NONE, /* optinfo_flags */
-   TV_NONE, /* tv_id */
-   ( PROP_ssa | PROP_cfg | PROP_gimple_leh ), /* properties_required */
-   0, /* properties_provided */
-   0, /* properties_destroyed */
-   0, /* todo_flags_start */
-   TODO_update_ssa, /* todo_flags_finish */
- };
- 
- class pass_asan_O0 : public gimple_opt_pass
- {
- public:
-   pass_asan_O0 (gcc::context *ctxt)
-     : gimple_opt_pass (pass_data_asan_O0, ctxt)
-   {}
- 
-   /* opt_pass methods: */
-   virtual bool gate (function *)
-     {
-       return !optimize && (gate_asan () || gate_hwasan ());
-     }
-   virtual unsigned int execute (function *) { return asan_instrument (); }
- 
- }; // class pass_asan_O0
- 
- } // anon namespace
- 
- gimple_opt_pass *
- make_pass_asan_O0 (gcc::context *ctxt)
- {
-   return new pass_asan_O0 (ctxt);
- }
- 
- /*  HWASAN  */
- 
- /* For stack tagging:
- 
-    Return the offset from the frame base tag that the "next" expanded object
-    should have.  */
- uint8_t
- hwasan_current_frame_tag ()
- {
-   return hwasan_frame_tag_offset;
- }
- 
- /* For stack tagging:
- 
-    Return the 'base pointer' for this function.  If that base pointer has not
-    yet been created then we create a register to hold it and record the insns
-    to initialize the register in `hwasan_frame_base_init_seq` for later
-    emission.  */
- rtx
- hwasan_frame_base ()
- {
-   if (! hwasan_frame_base_ptr)
-     {
-       start_sequence ();
-       hwasan_frame_base_ptr
- 	= force_reg (Pmode,
- 		     targetm.memtag.insert_random_tag (virtual_stack_vars_rtx,
- 						       NULL_RTX));
-       hwasan_frame_base_init_seq = get_insns ();
-       end_sequence ();
-     }
- 
-   return hwasan_frame_base_ptr;
- }
- 
- /* For stack tagging:
- 
-    Check whether this RTX is a standard pointer addressing the base of the
-    stack variables for this frame.  Returns true if the RTX is either
-    virtual_stack_vars_rtx or hwasan_frame_base_ptr.  */
- bool
- stack_vars_base_reg_p (rtx base)
- {
-   return base == virtual_stack_vars_rtx || base == hwasan_frame_base_ptr;
- }
- 
- /* For stack tagging:
- 
-    Emit frame base initialisation.
-    If hwasan_frame_base has been used before here then
-    hwasan_frame_base_init_seq contains the sequence of instructions to
-    initialize it.  This must be put just before the hwasan prologue, so we emit
-    the insns before parm_birth_insn (which will point to the first instruction
-    of the hwasan prologue if it exists).
- 
-    We update `parm_birth_insn` to point to the start of this initialisation
-    since that represents the end of the initialisation done by
-    expand_function_{start,end} functions and we want to maintain that.  */
- void
- hwasan_maybe_emit_frame_base_init ()
- {
-   if (! hwasan_frame_base_init_seq)
-     return;
-   emit_insn_before (hwasan_frame_base_init_seq, parm_birth_insn);
-   parm_birth_insn = hwasan_frame_base_init_seq;
- }
- 
- /* Record a compile-time constant size stack variable that HWASAN will need to
-    tag.  This record of the range of a stack variable will be used by
-    `hwasan_emit_prologue` to emit the RTL at the start of each frame which will
-    set tags in the shadow memory according to the assigned tag for each object.
- 
-    The range that the object spans in stack space should be described by the
-    bounds `untagged_base + nearest_offset` and
-    `untagged_base + farthest_offset`.
-    `tagged_base` is the base address which contains the "base frame tag" for
-    this frame, and from which the value to address this object with will be
-    calculated.
- 
-    We record the `untagged_base` since the functions in the hwasan library we
-    use to tag memory take pointers without a tag.  */
- void
- hwasan_record_stack_var (rtx untagged_base, rtx tagged_base,
- 			 poly_int64 nearest_offset, poly_int64 farthest_offset)
- {
-   hwasan_stack_var cur_var;
-   cur_var.untagged_base = untagged_base;
-   cur_var.tagged_base = tagged_base;
-   cur_var.nearest_offset = nearest_offset;
-   cur_var.farthest_offset = farthest_offset;
-   cur_var.tag_offset = hwasan_current_frame_tag ();
- 
-   hwasan_tagged_stack_vars.safe_push (cur_var);
- }
- 
- /* Return the RTX representing the farthest extent of the statically allocated
-    stack objects for this frame.  If hwasan_frame_base_ptr has not been
-    initialized then we are not storing any static variables on the stack in
-    this frame.  In this case we return NULL_RTX to represent that.
- 
-    Otherwise simply return virtual_stack_vars_rtx + frame_offset.  */
- rtx
- hwasan_get_frame_extent ()
- {
-   return (hwasan_frame_base_ptr
- 	  ? plus_constant (Pmode, virtual_stack_vars_rtx, frame_offset)
- 	  : NULL_RTX);
- }
- 
- /* For stack tagging:
- 
-    Increment the frame tag offset modulo the size a tag can represent.  */
- void
- hwasan_increment_frame_tag ()
- {
-   uint8_t tag_bits = HWASAN_TAG_SIZE;
-   gcc_assert (HWASAN_TAG_SIZE
- 	      <= sizeof (hwasan_frame_tag_offset) * CHAR_BIT);
-   hwasan_frame_tag_offset = (hwasan_frame_tag_offset + 1) % (1 << tag_bits);
-   /* The "background tag" of the stack is zero by definition.
-      This is the tag that objects like parameters passed on the stack and
-      spilled registers are given.  It is handy to avoid this tag for objects
-      whose tags we decide ourselves, partly to ensure that buffer overruns
-      can't affect these important variables (e.g. saved link register, saved
-      stack pointer etc) and partly to make debugging easier (everything with a
-      tag of zero is space allocated automatically by the compiler).
- 
-      This is not feasible when using random frame tags (the default
-      configuration for hwasan) since the tag for the given frame is randomly
-      chosen at runtime.  In order to avoid any tags matching the stack
-      background we would need to decide tag offsets at runtime instead of
-      compile time (and pay the resulting performance cost).
- 
-      When not using random base tags for each frame (i.e. when compiled with
-      `--param hwasan-random-frame-tag=0`) the base tag for each frame is zero.
-      This means the tag that each object gets is equal to the
-      hwasan_frame_tag_offset used in determining it.
-      When this is the case we *can* ensure no object gets the tag of zero by
-      simply ensuring no object has the hwasan_frame_tag_offset of zero.
- 
-      There is the extra complication that we only record the
-      hwasan_frame_tag_offset here (which is the offset from the tag stored in
-      the stack pointer).  In the kernel, the tag in the stack pointer is 0xff
-      rather than zero.  This does not cause problems since tags of 0xff are
-      never checked in the kernel.  As mentioned at the beginning of this
-      comment the background tag of the stack is zero by definition, which means
-      that for the kernel we should skip offsets of both 0 and 1 from the stack
-      pointer.  Avoiding the offset of 0 ensures we use a tag which will be
-      checked, avoiding the offset of 1 ensures we use a tag that is not the
-      same as the background.  */
-   if (hwasan_frame_tag_offset == 0 && ! param_hwasan_random_frame_tag)
-     hwasan_frame_tag_offset += 1;
-   if (hwasan_frame_tag_offset == 1 && ! param_hwasan_random_frame_tag
-       && sanitize_flags_p (SANITIZE_KERNEL_HWADDRESS))
-     hwasan_frame_tag_offset += 1;
- }
- 
- /* Clear internal state for the next function.
-    This function is called before variables on the stack get expanded, in
-    `init_vars_expansion`.  */
- void
- hwasan_record_frame_init ()
- {
-   delete asan_used_labels;
-   asan_used_labels = NULL;
- 
-   /* If this isn't the case then some stack variable was recorded *before*
-      hwasan_record_frame_init is called, yet *after* the hwasan prologue for
-      the previous frame was emitted.  Such stack variables would not have
-      their shadow stack filled in.  */
-   gcc_assert (hwasan_tagged_stack_vars.is_empty ());
-   hwasan_frame_base_ptr = NULL_RTX;
-   hwasan_frame_base_init_seq = NULL;
- 
-   /* When not using a random frame tag we can avoid the background stack
-      color which gives the user a little better debug output upon a crash.
-      Meanwhile, when using a random frame tag it will be nice to avoid adding
-      tags for the first object since that is unnecessary extra work.
-      Hence set the initial hwasan_frame_tag_offset to be 0 if using a random
-      frame tag and 1 otherwise.
- 
-      As described in hwasan_increment_frame_tag, in the kernel the stack
-      pointer has the tag 0xff.  That means that to avoid 0xff and 0 (the tag
-      which the kernel does not check and the background tag respectively) we
-      start with a tag offset of 2.  */
-   hwasan_frame_tag_offset = param_hwasan_random_frame_tag
-     ? 0
-     : sanitize_flags_p (SANITIZE_KERNEL_HWADDRESS) ? 2 : 1;
- }
- 
- /* For stack tagging:
-    (Emits HWASAN equivalent of what is emitted by
-    `asan_emit_stack_protection`).
- 
-    Emits the extra prologue code to set the shadow stack as required for HWASAN
-    stack instrumentation.
- 
-    Uses the vector of recorded stack variables hwasan_tagged_stack_vars.  When
-    this function has completed hwasan_tagged_stack_vars is empty and all
-    objects it had pointed to are deallocated.  */
- void
- hwasan_emit_prologue ()
- {
-   /* We need untagged base pointers since libhwasan only accepts untagged
-     pointers in __hwasan_tag_memory.  We need the tagged base pointer to obtain
-     the base tag for an offset.  */
- 
-   if (hwasan_tagged_stack_vars.is_empty ())
-     return;
- 
-   poly_int64 bot = 0, top = 0;
-   for (hwasan_stack_var &cur : hwasan_tagged_stack_vars)
-     {
-       poly_int64 nearest = cur.nearest_offset;
-       poly_int64 farthest = cur.farthest_offset;
- 
-       if (known_ge (nearest, farthest))
- 	{
- 	  top = nearest;
- 	  bot = farthest;
- 	}
-       else
- 	{
- 	  /* Given how these values are calculated, one must be known greater
- 	     than the other.  */
- 	  gcc_assert (known_le (nearest, farthest));
- 	  top = farthest;
- 	  bot = nearest;
- 	}
-       poly_int64 size = (top - bot);
- 
-       /* Assert the edge of each variable is aligned to the HWASAN tag granule
- 	 size.  */
-       gcc_assert (multiple_p (top, HWASAN_TAG_GRANULE_SIZE));
-       gcc_assert (multiple_p (bot, HWASAN_TAG_GRANULE_SIZE));
-       gcc_assert (multiple_p (size, HWASAN_TAG_GRANULE_SIZE));
- 
-       rtx fn = init_one_libfunc ("__hwasan_tag_memory");
-       rtx base_tag = targetm.memtag.extract_tag (cur.tagged_base, NULL_RTX);
-       rtx tag = plus_constant (QImode, base_tag, cur.tag_offset);
-       tag = hwasan_truncate_to_tag_size (tag, NULL_RTX);
- 
-       rtx bottom = convert_memory_address (ptr_mode,
- 					   plus_constant (Pmode,
- 							  cur.untagged_base,
- 							  bot));
-       emit_library_call (fn, LCT_NORMAL, VOIDmode,
- 			 bottom, ptr_mode,
- 			 tag, QImode,
- 			 gen_int_mode (size, ptr_mode), ptr_mode);
-     }
-   /* Clear the stack vars, we've emitted the prologue for them all now.  */
-   hwasan_tagged_stack_vars.truncate (0);
- }
- 
- /* For stack tagging:
- 
-    Return RTL insns to clear the tags between DYNAMIC and VARS pointers
-    into the stack.  These instructions should be emitted at the end of
-    every function.
- 
-    If `dynamic` is NULL_RTX then no insns are returned.  */
- rtx_insn *
- hwasan_emit_untag_frame (rtx dynamic, rtx vars)
- {
-   if (! dynamic)
-     return NULL;
- 
-   start_sequence ();
- 
-   dynamic = convert_memory_address (ptr_mode, dynamic);
-   vars = convert_memory_address (ptr_mode, vars);
- 
-   rtx top_rtx;
-   rtx bot_rtx;
-   if (FRAME_GROWS_DOWNWARD)
-     {
-       top_rtx = vars;
-       bot_rtx = dynamic;
-     }
-   else
-     {
-       top_rtx = dynamic;
-       bot_rtx = vars;
-     }
- 
-   rtx size_rtx = expand_simple_binop (ptr_mode, MINUS, top_rtx, bot_rtx,
- 				      NULL_RTX, /* unsignedp = */0,
- 				      OPTAB_DIRECT);
- 
-   rtx fn = init_one_libfunc ("__hwasan_tag_memory");
-   emit_library_call (fn, LCT_NORMAL, VOIDmode,
- 		     bot_rtx, ptr_mode,
- 		     HWASAN_STACK_BACKGROUND, QImode,
- 		     size_rtx, ptr_mode);
- 
-   do_pending_stack_adjust ();
-   rtx_insn *insns = get_insns ();
-   end_sequence ();
-   return insns;
- }
- 
- /* Needs to be GTY(()), because cgraph_build_static_cdtor may
-    invoke ggc_collect.  */
- static GTY(()) tree hwasan_ctor_statements;
- 
- /* Insert module initialization into this TU.  This initialization calls the
-    initialization code for libhwasan.  */
- void
- hwasan_finish_file (void)
- {
-   /* Do not emit constructor initialization for the kernel.
-      (the kernel has its own initialization already).  */
-   if (flag_sanitize & SANITIZE_KERNEL_HWADDRESS)
-     return;
- 
-   /* Avoid instrumenting code in the hwasan constructors/destructors.  */
-   flag_sanitize &= ~SANITIZE_HWADDRESS;
-   int priority = MAX_RESERVED_INIT_PRIORITY - 1;
-   tree fn = builtin_decl_implicit (BUILT_IN_HWASAN_INIT);
-   append_to_statement_list (build_call_expr (fn, 0), &hwasan_ctor_statements);
-   cgraph_build_static_cdtor ('I', hwasan_ctor_statements, priority);
-   flag_sanitize |= SANITIZE_HWADDRESS;
- }
- 
- /* For stack tagging:
- 
-    Truncate `tag` to the number of bits that a tag uses (i.e. to
-    HWASAN_TAG_SIZE).  Store the result in `target` if it's convenient.  */
- rtx
- hwasan_truncate_to_tag_size (rtx tag, rtx target)
- {
-   gcc_assert (GET_MODE (tag) == QImode);
-   if (HWASAN_TAG_SIZE != GET_MODE_PRECISION (QImode))
-     {
-       gcc_assert (GET_MODE_PRECISION (QImode) > HWASAN_TAG_SIZE);
-       rtx mask = gen_int_mode ((HOST_WIDE_INT_1U << HWASAN_TAG_SIZE) - 1,
- 			       QImode);
-       tag = expand_simple_binop (QImode, AND, tag, mask, target,
- 				 /* unsignedp = */1, OPTAB_WIDEN);
-       gcc_assert (tag);
-     }
-   return tag;
- }
- 
- /* Construct a function tree for __hwasan_{load,store}{1,2,4,8,16,_n}.
-    IS_STORE is either 1 (for a store) or 0 (for a load).  */
- static combined_fn
- hwasan_check_func (bool is_store, bool recover_p, HOST_WIDE_INT size_in_bytes,
- 		   int *nargs)
- {
-   static enum built_in_function check[2][2][6]
-     = { { { BUILT_IN_HWASAN_LOAD1, BUILT_IN_HWASAN_LOAD2,
- 	    BUILT_IN_HWASAN_LOAD4, BUILT_IN_HWASAN_LOAD8,
- 	    BUILT_IN_HWASAN_LOAD16, BUILT_IN_HWASAN_LOADN },
- 	  { BUILT_IN_HWASAN_STORE1, BUILT_IN_HWASAN_STORE2,
- 	    BUILT_IN_HWASAN_STORE4, BUILT_IN_HWASAN_STORE8,
- 	    BUILT_IN_HWASAN_STORE16, BUILT_IN_HWASAN_STOREN } },
- 	{ { BUILT_IN_HWASAN_LOAD1_NOABORT,
- 	    BUILT_IN_HWASAN_LOAD2_NOABORT,
- 	    BUILT_IN_HWASAN_LOAD4_NOABORT,
- 	    BUILT_IN_HWASAN_LOAD8_NOABORT,
- 	    BUILT_IN_HWASAN_LOAD16_NOABORT,
- 	    BUILT_IN_HWASAN_LOADN_NOABORT },
- 	  { BUILT_IN_HWASAN_STORE1_NOABORT,
- 	    BUILT_IN_HWASAN_STORE2_NOABORT,
- 	    BUILT_IN_HWASAN_STORE4_NOABORT,
- 	    BUILT_IN_HWASAN_STORE8_NOABORT,
- 	    BUILT_IN_HWASAN_STORE16_NOABORT,
- 	    BUILT_IN_HWASAN_STOREN_NOABORT } } };
-   if (size_in_bytes == -1)
-     {
-       *nargs = 2;
-       return as_combined_fn (check[recover_p][is_store][5]);
-     }
-   *nargs = 1;
-   int size_log2 = exact_log2 (size_in_bytes);
-   gcc_assert (size_log2 >= 0 && size_log2 <= 5);
-   return as_combined_fn (check[recover_p][is_store][size_log2]);
- }
- 
- /* Expand the HWASAN_{LOAD,STORE} builtins.  */
- bool
- hwasan_expand_check_ifn (gimple_stmt_iterator *iter, bool)
- {
-   gimple *g = gsi_stmt (*iter);
-   location_t loc = gimple_location (g);
-   bool recover_p;
-   if (flag_sanitize & SANITIZE_USER_HWADDRESS)
-     recover_p = (flag_sanitize_recover & SANITIZE_USER_HWADDRESS) != 0;
-   else
-     recover_p = (flag_sanitize_recover & SANITIZE_KERNEL_HWADDRESS) != 0;
- 
-   HOST_WIDE_INT flags = tree_to_shwi (gimple_call_arg (g, 0));
-   gcc_assert (flags < ASAN_CHECK_LAST);
-   bool is_scalar_access = (flags & ASAN_CHECK_SCALAR_ACCESS) != 0;
-   bool is_store = (flags & ASAN_CHECK_STORE) != 0;
-   bool is_non_zero_len = (flags & ASAN_CHECK_NON_ZERO_LEN) != 0;
- 
-   tree base = gimple_call_arg (g, 1);
-   tree len = gimple_call_arg (g, 2);
- 
-   /* `align` is unused for HWASAN_CHECK, but we pass the argument anyway
-      since that way the arguments match ASAN_CHECK.  */
-   /* HOST_WIDE_INT align = tree_to_shwi (gimple_call_arg (g, 3));  */
- 
-   unsigned HOST_WIDE_INT size_in_bytes
-     = is_scalar_access ? tree_to_shwi (len) : -1;
- 
-   gimple_stmt_iterator gsi = *iter;
- 
-   if (!is_non_zero_len)
-     {
-       /* So, the length of the memory area to hwasan-protect is
- 	 non-constant.  Let's guard the generated instrumentation code
- 	 like:
- 
- 	 if (len != 0)
- 	   {
- 	     // hwasan instrumentation code goes here.
- 	   }
- 	 // falltrough instructions, starting with *ITER.  */
- 
-       g = gimple_build_cond (NE_EXPR,
- 			    len,
- 			    build_int_cst (TREE_TYPE (len), 0),
- 			    NULL_TREE, NULL_TREE);
-       gimple_set_location (g, loc);
- 
-       basic_block then_bb, fallthrough_bb;
-       insert_if_then_before_iter (as_a <gcond *> (g), iter,
- 				  /*then_more_likely_p=*/true,
- 				  &then_bb, &fallthrough_bb);
-       /* Note that fallthrough_bb starts with the statement that was
- 	pointed to by ITER.  */
- 
-       /* The 'then block' of the 'if (len != 0) condition is where
- 	we'll generate the hwasan instrumentation code now.  */
-       gsi = gsi_last_bb (then_bb);
-     }
- 
-   gimple_seq stmts = NULL;
-   tree base_addr = gimple_build (&stmts, loc, NOP_EXPR,
- 				 pointer_sized_int_node, base);
- 
-   int nargs = 0;
-   combined_fn fn
-     = hwasan_check_func (is_store, recover_p, size_in_bytes, &nargs);
-   if (nargs == 1)
-     gimple_build (&stmts, loc, fn, void_type_node, base_addr);
-   else
-     {
-       gcc_assert (nargs == 2);
-       tree sz_arg = gimple_build (&stmts, loc, NOP_EXPR,
- 				  pointer_sized_int_node, len);
-       gimple_build (&stmts, loc, fn, void_type_node, base_addr, sz_arg);
-     }
- 
-   gsi_insert_seq_after (&gsi, stmts, GSI_NEW_STMT);
-   gsi_remove (iter, true);
-   *iter = gsi;
-   return false;
- }
- 
- /* For stack tagging:
- 
-    Dummy: the HWASAN_MARK internal function should only ever be in the code
-    after the sanopt pass.  */
- bool
- hwasan_expand_mark_ifn (gimple_stmt_iterator *)
- {
-   gcc_unreachable ();
- }
- 
- bool
- gate_hwasan ()
- {
-   return hwasan_sanitize_p ();
- }
- 
- #include "gt-asan.h"
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/asan.cc gcc-12.1.0/gcc/asan.cc
*** gcc-11.3.0/gcc/asan.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/asan.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,4737 ----
+ /* AddressSanitizer, a fast memory error detector.
+    Copyright (C) 2012-2022 Free Software Foundation, Inc.
+    Contributed by Kostya Serebryany <kcc@google.com>
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "backend.h"
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
+ #include "gimple.h"
+ #include "cfghooks.h"
+ #include "alloc-pool.h"
+ #include "tree-pass.h"
+ #include "memmodel.h"
+ #include "tm_p.h"
+ #include "ssa.h"
+ #include "stringpool.h"
+ #include "tree-ssanames.h"
+ #include "optabs.h"
+ #include "emit-rtl.h"
+ #include "cgraph.h"
+ #include "gimple-pretty-print.h"
+ #include "alias.h"
+ #include "fold-const.h"
+ #include "cfganal.h"
+ #include "gimplify.h"
+ #include "gimple-iterator.h"
+ #include "varasm.h"
+ #include "stor-layout.h"
+ #include "tree-iterator.h"
+ #include "stringpool.h"
+ #include "attribs.h"
+ #include "asan.h"
+ #include "dojump.h"
+ #include "explow.h"
+ #include "expr.h"
+ #include "output.h"
+ #include "langhooks.h"
+ #include "cfgloop.h"
+ #include "gimple-builder.h"
+ #include "gimple-fold.h"
+ #include "ubsan.h"
+ #include "builtins.h"
+ #include "fnmatch.h"
+ #include "tree-inline.h"
+ #include "tree-ssa.h"
+ #include "tree-eh.h"
+ 
+ /* AddressSanitizer finds out-of-bounds and use-after-free bugs
+    with <2x slowdown on average.
+ 
+    The tool consists of two parts:
+    instrumentation module (this file) and a run-time library.
+    The instrumentation module adds a run-time check before every memory insn.
+      For a 8- or 16- byte load accessing address X:
+        ShadowAddr = (X >> 3) + Offset
+        ShadowValue = *(char*)ShadowAddr;  // *(short*) for 16-byte access.
+        if (ShadowValue)
+ 	 __asan_report_load8(X);
+      For a load of N bytes (N=1, 2 or 4) from address X:
+        ShadowAddr = (X >> 3) + Offset
+        ShadowValue = *(char*)ShadowAddr;
+        if (ShadowValue)
+ 	 if ((X & 7) + N - 1 > ShadowValue)
+ 	   __asan_report_loadN(X);
+    Stores are instrumented similarly, but using __asan_report_storeN functions.
+    A call too __asan_init_vN() is inserted to the list of module CTORs.
+    N is the version number of the AddressSanitizer API. The changes between the
+    API versions are listed in libsanitizer/asan/asan_interface_internal.h.
+ 
+    The run-time library redefines malloc (so that redzone are inserted around
+    the allocated memory) and free (so that reuse of free-ed memory is delayed),
+    provides __asan_report* and __asan_init_vN functions.
+ 
+    Read more:
+    http://code.google.com/p/address-sanitizer/wiki/AddressSanitizerAlgorithm
+ 
+    The current implementation supports detection of out-of-bounds and
+    use-after-free in the heap, on the stack and for global variables.
+ 
+    [Protection of stack variables]
+ 
+    To understand how detection of out-of-bounds and use-after-free works
+    for stack variables, lets look at this example on x86_64 where the
+    stack grows downward:
+ 
+      int
+      foo ()
+      {
+        char a[24] = {0};
+        int b[2] = {0};
+ 
+        a[5] = 1;
+        b[1] = 2;
+ 
+        return a[5] + b[1];
+      }
+ 
+    For this function, the stack protected by asan will be organized as
+    follows, from the top of the stack to the bottom:
+ 
+    Slot 1/ [red zone of 32 bytes called 'RIGHT RedZone']
+ 
+    Slot 2/ [8 bytes of red zone, that adds up to the space of 'a' to make
+ 	   the next slot be 32 bytes aligned; this one is called Partial
+ 	   Redzone; this 32 bytes alignment is an asan constraint]
+ 
+    Slot 3/ [24 bytes for variable 'a']
+ 
+    Slot 4/ [red zone of 32 bytes called 'Middle RedZone']
+ 
+    Slot 5/ [24 bytes of Partial Red Zone (similar to slot 2]
+ 
+    Slot 6/ [8 bytes for variable 'b']
+ 
+    Slot 7/ [32 bytes of Red Zone at the bottom of the stack, called
+ 	    'LEFT RedZone']
+ 
+    The 32 bytes of LEFT red zone at the bottom of the stack can be
+    decomposed as such:
+ 
+      1/ The first 8 bytes contain a magical asan number that is always
+      0x41B58AB3.
+ 
+      2/ The following 8 bytes contains a pointer to a string (to be
+      parsed at runtime by the runtime asan library), which format is
+      the following:
+ 
+       "<function-name> <space> <num-of-variables-on-the-stack>
+       (<32-bytes-aligned-offset-in-bytes-of-variable> <space>
+       <length-of-var-in-bytes> ){n} "
+ 
+ 	where '(...){n}' means the content inside the parenthesis occurs 'n'
+ 	times, with 'n' being the number of variables on the stack.
+ 
+      3/ The following 8 bytes contain the PC of the current function which
+      will be used by the run-time library to print an error message.
+ 
+      4/ The following 8 bytes are reserved for internal use by the run-time.
+ 
+    The shadow memory for that stack layout is going to look like this:
+ 
+      - content of shadow memory 8 bytes for slot 7: 0xF1F1F1F1.
+        The F1 byte pattern is a magic number called
+        ASAN_STACK_MAGIC_LEFT and is a way for the runtime to know that
+        the memory for that shadow byte is part of a the LEFT red zone
+        intended to seat at the bottom of the variables on the stack.
+ 
+      - content of shadow memory 8 bytes for slots 6 and 5:
+        0xF4F4F400.  The F4 byte pattern is a magic number
+        called ASAN_STACK_MAGIC_PARTIAL.  It flags the fact that the
+        memory region for this shadow byte is a PARTIAL red zone
+        intended to pad a variable A, so that the slot following
+        {A,padding} is 32 bytes aligned.
+ 
+        Note that the fact that the least significant byte of this
+        shadow memory content is 00 means that 8 bytes of its
+        corresponding memory (which corresponds to the memory of
+        variable 'b') is addressable.
+ 
+      - content of shadow memory 8 bytes for slot 4: 0xF2F2F2F2.
+        The F2 byte pattern is a magic number called
+        ASAN_STACK_MAGIC_MIDDLE.  It flags the fact that the memory
+        region for this shadow byte is a MIDDLE red zone intended to
+        seat between two 32 aligned slots of {variable,padding}.
+ 
+      - content of shadow memory 8 bytes for slot 3 and 2:
+        0xF4000000.  This represents is the concatenation of
+        variable 'a' and the partial red zone following it, like what we
+        had for variable 'b'.  The least significant 3 bytes being 00
+        means that the 3 bytes of variable 'a' are addressable.
+ 
+      - content of shadow memory 8 bytes for slot 1: 0xF3F3F3F3.
+        The F3 byte pattern is a magic number called
+        ASAN_STACK_MAGIC_RIGHT.  It flags the fact that the memory
+        region for this shadow byte is a RIGHT red zone intended to seat
+        at the top of the variables of the stack.
+ 
+    Note that the real variable layout is done in expand_used_vars in
+    cfgexpand.cc.  As far as Address Sanitizer is concerned, it lays out
+    stack variables as well as the different red zones, emits some
+    prologue code to populate the shadow memory as to poison (mark as
+    non-accessible) the regions of the red zones and mark the regions of
+    stack variables as accessible, and emit some epilogue code to
+    un-poison (mark as accessible) the regions of red zones right before
+    the function exits.
+ 
+    [Protection of global variables]
+ 
+    The basic idea is to insert a red zone between two global variables
+    and install a constructor function that calls the asan runtime to do
+    the populating of the relevant shadow memory regions at load time.
+ 
+    So the global variables are laid out as to insert a red zone between
+    them. The size of the red zones is so that each variable starts on a
+    32 bytes boundary.
+ 
+    Then a constructor function is installed so that, for each global
+    variable, it calls the runtime asan library function
+    __asan_register_globals_with an instance of this type:
+ 
+      struct __asan_global
+      {
+        // Address of the beginning of the global variable.
+        const void *__beg;
+ 
+        // Initial size of the global variable.
+        uptr __size;
+ 
+        // Size of the global variable + size of the red zone.  This
+        //   size is 32 bytes aligned.
+        uptr __size_with_redzone;
+ 
+        // Name of the global variable.
+        const void *__name;
+ 
+        // Name of the module where the global variable is declared.
+        const void *__module_name;
+ 
+        // 1 if it has dynamic initialization, 0 otherwise.
+        uptr __has_dynamic_init;
+ 
+        // A pointer to struct that contains source location, could be NULL.
+        __asan_global_source_location *__location;
+      }
+ 
+    A destructor function that calls the runtime asan library function
+    _asan_unregister_globals is also installed.  */
+ 
+ static unsigned HOST_WIDE_INT asan_shadow_offset_value;
+ static bool asan_shadow_offset_computed;
+ static vec<char *> sanitized_sections;
+ static tree last_alloca_addr;
+ 
+ /* Set of variable declarations that are going to be guarded by
+    use-after-scope sanitizer.  */
+ 
+ hash_set<tree> *asan_handled_variables = NULL;
+ 
+ hash_set <tree> *asan_used_labels = NULL;
+ 
+ /* Global variables for HWASAN stack tagging.  */
+ /* hwasan_frame_tag_offset records the offset from the frame base tag that the
+    next object should have.  */
+ static uint8_t hwasan_frame_tag_offset = 0;
+ /* hwasan_frame_base_ptr is a pointer with the same address as
+    `virtual_stack_vars_rtx` for the current frame, and with the frame base tag
+    stored in it.  N.b. this global RTX does not need to be marked GTY, but is
+    done so anyway.  The need is not there since all uses are in just one pass
+    (cfgexpand) and there are no calls to ggc_collect between the uses.  We mark
+    it GTY(()) anyway to allow the use of the variable later on if needed by
+    future features.  */
+ static GTY(()) rtx hwasan_frame_base_ptr = NULL_RTX;
+ /* hwasan_frame_base_init_seq is the sequence of RTL insns that will initialize
+    the hwasan_frame_base_ptr.  When the hwasan_frame_base_ptr is requested, we
+    generate this sequence but do not emit it.  If the sequence was created it
+    is emitted once the function body has been expanded.
+ 
+    This delay is because the frame base pointer may be needed anywhere in the
+    function body, or needed by the expand_used_vars function.  Emitting once in
+    a known place is simpler than requiring the emission of the instructions to
+    be know where it should go depending on the first place the hwasan frame
+    base is needed.  */
+ static GTY(()) rtx_insn *hwasan_frame_base_init_seq = NULL;
+ 
+ /* Structure defining the extent of one object on the stack that HWASAN needs
+    to tag in the corresponding shadow stack space.
+ 
+    The range this object spans on the stack is between `untagged_base +
+    nearest_offset` and `untagged_base + farthest_offset`.
+    `tagged_base` is an rtx containing the same value as `untagged_base` but
+    with a random tag stored in the top byte.  We record both `untagged_base`
+    and `tagged_base` so that `hwasan_emit_prologue` can use both without having
+    to emit RTL into the instruction stream to re-calculate one from the other.
+    (`hwasan_emit_prologue` needs to use both bases since the
+    __hwasan_tag_memory call it emits uses an untagged value, and it calculates
+    the tag to store in shadow memory based on the tag_offset plus the tag in
+    tagged_base).  */
+ struct hwasan_stack_var
+ {
+   rtx untagged_base;
+   rtx tagged_base;
+   poly_int64 nearest_offset;
+   poly_int64 farthest_offset;
+   uint8_t tag_offset;
+ };
+ 
+ /* Variable recording all stack variables that HWASAN needs to tag.
+    Does not need to be marked as GTY(()) since every use is in the cfgexpand
+    pass and gcc_collect is not called in the middle of that pass.  */
+ static vec<hwasan_stack_var> hwasan_tagged_stack_vars;
+ 
+ 
+ /* Sets shadow offset to value in string VAL.  */
+ 
+ bool
+ set_asan_shadow_offset (const char *val)
+ {
+   char *endp;
+ 
+   errno = 0;
+ #ifdef HAVE_LONG_LONG
+   asan_shadow_offset_value = strtoull (val, &endp, 0);
+ #else
+   asan_shadow_offset_value = strtoul (val, &endp, 0);
+ #endif
+   if (!(*val != '\0' && *endp == '\0' && errno == 0))
+     return false;
+ 
+   asan_shadow_offset_computed = true;
+ 
+   return true;
+ }
+ 
+ /* Set list of user-defined sections that need to be sanitized.  */
+ 
+ void
+ set_sanitized_sections (const char *sections)
+ {
+   char *pat;
+   unsigned i;
+   FOR_EACH_VEC_ELT (sanitized_sections, i, pat)
+     free (pat);
+   sanitized_sections.truncate (0);
+ 
+   for (const char *s = sections; *s; )
+     {
+       const char *end;
+       for (end = s; *end && *end != ','; ++end);
+       size_t len = end - s;
+       sanitized_sections.safe_push (xstrndup (s, len));
+       s = *end ? end + 1 : end;
+     }
+ }
+ 
+ bool
+ asan_mark_p (gimple *stmt, enum asan_mark_flags flag)
+ {
+   return (gimple_call_internal_p (stmt, IFN_ASAN_MARK)
+ 	  && tree_to_uhwi (gimple_call_arg (stmt, 0)) == flag);
+ }
+ 
+ bool
+ asan_sanitize_stack_p (void)
+ {
+   return (sanitize_flags_p (SANITIZE_ADDRESS) && param_asan_stack);
+ }
+ 
+ bool
+ asan_sanitize_allocas_p (void)
+ {
+   return (asan_sanitize_stack_p () && param_asan_protect_allocas);
+ }
+ 
+ bool
+ asan_instrument_reads (void)
+ {
+   return (sanitize_flags_p (SANITIZE_ADDRESS) && param_asan_instrument_reads);
+ }
+ 
+ bool
+ asan_instrument_writes (void)
+ {
+   return (sanitize_flags_p (SANITIZE_ADDRESS) && param_asan_instrument_writes);
+ }
+ 
+ bool
+ asan_memintrin (void)
+ {
+   return (sanitize_flags_p (SANITIZE_ADDRESS) && param_asan_memintrin);
+ }
+ 
+ 
+ /* Checks whether section SEC should be sanitized.  */
+ 
+ static bool
+ section_sanitized_p (const char *sec)
+ {
+   char *pat;
+   unsigned i;
+   FOR_EACH_VEC_ELT (sanitized_sections, i, pat)
+     if (fnmatch (pat, sec, FNM_PERIOD) == 0)
+       return true;
+   return false;
+ }
+ 
+ /* Returns Asan shadow offset.  */
+ 
+ static unsigned HOST_WIDE_INT
+ asan_shadow_offset ()
+ {
+   if (!asan_shadow_offset_computed)
+     {
+       asan_shadow_offset_computed = true;
+       asan_shadow_offset_value = targetm.asan_shadow_offset ();
+     }
+   return asan_shadow_offset_value;
+ }
+ 
+ /* Returns Asan shadow offset has been set.  */
+ bool
+ asan_shadow_offset_set_p ()
+ {
+   return asan_shadow_offset_computed;
+ }
+ 
+ alias_set_type asan_shadow_set = -1;
+ 
+ /* Pointer types to 1, 2 or 4 byte integers in shadow memory.  A separate
+    alias set is used for all shadow memory accesses.  */
+ static GTY(()) tree shadow_ptr_types[3];
+ 
+ /* Decl for __asan_option_detect_stack_use_after_return.  */
+ static GTY(()) tree asan_detect_stack_use_after_return;
+ 
+ /* Hashtable support for memory references used by gimple
+    statements.  */
+ 
+ /* This type represents a reference to a memory region.  */
+ struct asan_mem_ref
+ {
+   /* The expression of the beginning of the memory region.  */
+   tree start;
+ 
+   /* The size of the access.  */
+   HOST_WIDE_INT access_size;
+ };
+ 
+ object_allocator <asan_mem_ref> asan_mem_ref_pool ("asan_mem_ref");
+ 
+ /* Initializes an instance of asan_mem_ref.  */
+ 
+ static void
+ asan_mem_ref_init (asan_mem_ref *ref, tree start, HOST_WIDE_INT access_size)
+ {
+   ref->start = start;
+   ref->access_size = access_size;
+ }
+ 
+ /* Allocates memory for an instance of asan_mem_ref into the memory
+    pool returned by asan_mem_ref_get_alloc_pool and initialize it.
+    START is the address of (or the expression pointing to) the
+    beginning of memory reference.  ACCESS_SIZE is the size of the
+    access to the referenced memory.  */
+ 
+ static asan_mem_ref*
+ asan_mem_ref_new (tree start, HOST_WIDE_INT access_size)
+ {
+   asan_mem_ref *ref = asan_mem_ref_pool.allocate ();
+ 
+   asan_mem_ref_init (ref, start, access_size);
+   return ref;
+ }
+ 
+ /* This builds and returns a pointer to the end of the memory region
+    that starts at START and of length LEN.  */
+ 
+ tree
+ asan_mem_ref_get_end (tree start, tree len)
+ {
+   if (len == NULL_TREE || integer_zerop (len))
+     return start;
+ 
+   if (!ptrofftype_p (len))
+     len = convert_to_ptrofftype (len);
+ 
+   return fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (start), start, len);
+ }
+ 
+ /*  Return a tree expression that represents the end of the referenced
+     memory region.  Beware that this function can actually build a new
+     tree expression.  */
+ 
+ tree
+ asan_mem_ref_get_end (const asan_mem_ref *ref, tree len)
+ {
+   return asan_mem_ref_get_end (ref->start, len);
+ }
+ 
+ struct asan_mem_ref_hasher : nofree_ptr_hash <asan_mem_ref>
+ {
+   static inline hashval_t hash (const asan_mem_ref *);
+   static inline bool equal (const asan_mem_ref *, const asan_mem_ref *);
+ };
+ 
+ /* Hash a memory reference.  */
+ 
+ inline hashval_t
+ asan_mem_ref_hasher::hash (const asan_mem_ref *mem_ref)
+ {
+   return iterative_hash_expr (mem_ref->start, 0);
+ }
+ 
+ /* Compare two memory references.  We accept the length of either
+    memory references to be NULL_TREE.  */
+ 
+ inline bool
+ asan_mem_ref_hasher::equal (const asan_mem_ref *m1,
+ 			    const asan_mem_ref *m2)
+ {
+   return operand_equal_p (m1->start, m2->start, 0);
+ }
+ 
+ static hash_table<asan_mem_ref_hasher> *asan_mem_ref_ht;
+ 
+ /* Returns a reference to the hash table containing memory references.
+    This function ensures that the hash table is created.  Note that
+    this hash table is updated by the function
+    update_mem_ref_hash_table.  */
+ 
+ static hash_table<asan_mem_ref_hasher> *
+ get_mem_ref_hash_table ()
+ {
+   if (!asan_mem_ref_ht)
+     asan_mem_ref_ht = new hash_table<asan_mem_ref_hasher> (10);
+ 
+   return asan_mem_ref_ht;
+ }
+ 
+ /* Clear all entries from the memory references hash table.  */
+ 
+ static void
+ empty_mem_ref_hash_table ()
+ {
+   if (asan_mem_ref_ht)
+     asan_mem_ref_ht->empty ();
+ }
+ 
+ /* Free the memory references hash table.  */
+ 
+ static void
+ free_mem_ref_resources ()
+ {
+   delete asan_mem_ref_ht;
+   asan_mem_ref_ht = NULL;
+ 
+   asan_mem_ref_pool.release ();
+ }
+ 
+ /* Return true iff the memory reference REF has been instrumented.  */
+ 
+ static bool
+ has_mem_ref_been_instrumented (tree ref, HOST_WIDE_INT access_size)
+ {
+   asan_mem_ref r;
+   asan_mem_ref_init (&r, ref, access_size);
+ 
+   asan_mem_ref *saved_ref = get_mem_ref_hash_table ()->find (&r);
+   return saved_ref && saved_ref->access_size >= access_size;
+ }
+ 
+ /* Return true iff the memory reference REF has been instrumented.  */
+ 
+ static bool
+ has_mem_ref_been_instrumented (const asan_mem_ref *ref)
+ {
+   return has_mem_ref_been_instrumented (ref->start, ref->access_size);
+ }
+ 
+ /* Return true iff access to memory region starting at REF and of
+    length LEN has been instrumented.  */
+ 
+ static bool
+ has_mem_ref_been_instrumented (const asan_mem_ref *ref, tree len)
+ {
+   HOST_WIDE_INT size_in_bytes
+     = tree_fits_shwi_p (len) ? tree_to_shwi (len) : -1;
+ 
+   return size_in_bytes != -1
+     && has_mem_ref_been_instrumented (ref->start, size_in_bytes);
+ }
+ 
+ /* Set REF to the memory reference present in a gimple assignment
+    ASSIGNMENT.  Return true upon successful completion, false
+    otherwise.  */
+ 
+ static bool
+ get_mem_ref_of_assignment (const gassign *assignment,
+ 			   asan_mem_ref *ref,
+ 			   bool *ref_is_store)
+ {
+   gcc_assert (gimple_assign_single_p (assignment));
+ 
+   if (gimple_store_p (assignment)
+       && !gimple_clobber_p (assignment))
+     {
+       ref->start = gimple_assign_lhs (assignment);
+       *ref_is_store = true;
+     }
+   else if (gimple_assign_load_p (assignment))
+     {
+       ref->start = gimple_assign_rhs1 (assignment);
+       *ref_is_store = false;
+     }
+   else
+     return false;
+ 
+   ref->access_size = int_size_in_bytes (TREE_TYPE (ref->start));
+   return true;
+ }
+ 
+ /* Return address of last allocated dynamic alloca.  */
+ 
+ static tree
+ get_last_alloca_addr ()
+ {
+   if (last_alloca_addr)
+     return last_alloca_addr;
+ 
+   last_alloca_addr = create_tmp_reg (ptr_type_node, "last_alloca_addr");
+   gassign *g = gimple_build_assign (last_alloca_addr, null_pointer_node);
+   edge e = single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun));
+   gsi_insert_on_edge_immediate (e, g);
+   return last_alloca_addr;
+ }
+ 
+ /* Insert __asan_allocas_unpoison (top, bottom) call before
+    __builtin_stack_restore (new_sp) call.
+    The pseudocode of this routine should look like this:
+      top = last_alloca_addr;
+      bot = new_sp;
+      __asan_allocas_unpoison (top, bot);
+      last_alloca_addr = new_sp;
+      __builtin_stack_restore (new_sp);
+    In general, we can't use new_sp as bot parameter because on some
+    architectures SP has non zero offset from dynamic stack area.  Moreover, on
+    some architectures this offset (STACK_DYNAMIC_OFFSET) becomes known for each
+    particular function only after all callees were expanded to rtl.
+    The most noticeable example is PowerPC{,64}, see
+    http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#DYNAM-STACK.
+    To overcome the issue we use following trick: pass new_sp as a second
+    parameter to __asan_allocas_unpoison and rewrite it during expansion with
+    new_sp + (virtual_dynamic_stack_rtx - sp) later in
+    expand_asan_emit_allocas_unpoison function.
+ 
+    HWASAN needs to do very similar, the eventual pseudocode should be:
+       __hwasan_tag_memory (virtual_stack_dynamic_rtx,
+ 			   0,
+ 			   new_sp - sp);
+       __builtin_stack_restore (new_sp)
+ 
+    Need to use the same trick to handle STACK_DYNAMIC_OFFSET as described
+    above.  */
+ 
+ static void
+ handle_builtin_stack_restore (gcall *call, gimple_stmt_iterator *iter)
+ {
+   if (!iter
+       || !(asan_sanitize_allocas_p () || hwasan_sanitize_allocas_p ()))
+     return;
+ 
+   tree restored_stack = gimple_call_arg (call, 0);
+ 
+   gimple *g;
+ 
+   if (hwasan_sanitize_allocas_p ())
+     {
+       enum internal_fn fn = IFN_HWASAN_ALLOCA_UNPOISON;
+       /* There is only one piece of information `expand_HWASAN_ALLOCA_UNPOISON`
+ 	 needs to work.  This is the length of the area that we're
+ 	 deallocating.  Since the stack pointer is known at expand time, the
+ 	 position of the new stack pointer after deallocation is enough
+ 	 information to calculate this length.  */
+       g = gimple_build_call_internal (fn, 1, restored_stack);
+     }
+   else
+     {
+       tree last_alloca = get_last_alloca_addr ();
+       tree fn = builtin_decl_implicit (BUILT_IN_ASAN_ALLOCAS_UNPOISON);
+       g = gimple_build_call (fn, 2, last_alloca, restored_stack);
+       gsi_insert_before (iter, g, GSI_SAME_STMT);
+       g = gimple_build_assign (last_alloca, restored_stack);
+     }
+ 
+   gsi_insert_before (iter, g, GSI_SAME_STMT);
+ }
+ 
+ /* Deploy and poison redzones around __builtin_alloca call.  To do this, we
+    should replace this call with another one with changed parameters and
+    replace all its uses with new address, so
+        addr = __builtin_alloca (old_size, align);
+    is replaced by
+        left_redzone_size = max (align, ASAN_RED_ZONE_SIZE);
+    Following two statements are optimized out if we know that
+    old_size & (ASAN_RED_ZONE_SIZE - 1) == 0, i.e. alloca doesn't need partial
+    redzone.
+        misalign = old_size & (ASAN_RED_ZONE_SIZE - 1);
+        partial_redzone_size = ASAN_RED_ZONE_SIZE - misalign;
+        right_redzone_size = ASAN_RED_ZONE_SIZE;
+        additional_size = left_redzone_size + partial_redzone_size +
+                          right_redzone_size;
+        new_size = old_size + additional_size;
+        new_alloca = __builtin_alloca (new_size, max (align, 32))
+        __asan_alloca_poison (new_alloca, old_size)
+        addr = new_alloca + max (align, ASAN_RED_ZONE_SIZE);
+        last_alloca_addr = new_alloca;
+    ADDITIONAL_SIZE is added to make new memory allocation contain not only
+    requested memory, but also left, partial and right redzones as well as some
+    additional space, required by alignment.  */
+ 
+ static void
+ handle_builtin_alloca (gcall *call, gimple_stmt_iterator *iter)
+ {
+   if (!iter
+       || !(asan_sanitize_allocas_p () || hwasan_sanitize_allocas_p ()))
+     return;
+ 
+   gassign *g;
+   gcall *gg;
+   tree callee = gimple_call_fndecl (call);
+   tree lhs = gimple_call_lhs (call);
+   tree old_size = gimple_call_arg (call, 0);
+   tree ptr_type = lhs ? TREE_TYPE (lhs) : ptr_type_node;
+   tree partial_size = NULL_TREE;
+   unsigned int align
+     = DECL_FUNCTION_CODE (callee) == BUILT_IN_ALLOCA
+       ? 0 : tree_to_uhwi (gimple_call_arg (call, 1));
+ 
+   bool throws = false;
+   edge e = NULL;
+   if (stmt_can_throw_internal (cfun, call))
+     {
+       if (!lhs)
+ 	return;
+       throws = true;
+       e = find_fallthru_edge (gsi_bb (*iter)->succs);
+     }
+ 
+   if (hwasan_sanitize_allocas_p ())
+     {
+       gimple_seq stmts = NULL;
+       location_t loc = gimple_location (gsi_stmt (*iter));
+       /*
+ 	 HWASAN needs a different expansion.
+ 
+ 	 addr = __builtin_alloca (size, align);
+ 
+ 	 should be replaced by
+ 
+ 	 new_size = size rounded up to HWASAN_TAG_GRANULE_SIZE byte alignment;
+ 	 untagged_addr = __builtin_alloca (new_size, align);
+ 	 tag = __hwasan_choose_alloca_tag ();
+ 	 addr = ifn_HWASAN_SET_TAG (untagged_addr, tag);
+ 	 __hwasan_tag_memory (untagged_addr, tag, new_size);
+ 	*/
+       /* Ensure alignment at least HWASAN_TAG_GRANULE_SIZE bytes so we start on
+ 	 a tag granule.  */
+       align = align > HWASAN_TAG_GRANULE_SIZE ? align : HWASAN_TAG_GRANULE_SIZE;
+ 
+       tree old_size = gimple_call_arg (call, 0);
+       tree new_size = gimple_build_round_up (&stmts, loc, size_type_node,
+ 					     old_size,
+ 					     HWASAN_TAG_GRANULE_SIZE);
+ 
+       /* Make the alloca call */
+       tree untagged_addr
+ 	= gimple_build (&stmts, loc,
+ 			as_combined_fn (BUILT_IN_ALLOCA_WITH_ALIGN), ptr_type,
+ 			new_size, build_int_cst (size_type_node, align));
+ 
+       /* Choose the tag.
+ 	 Here we use an internal function so we can choose the tag at expand
+ 	 time.  We need the decision to be made after stack variables have been
+ 	 assigned their tag (i.e. once the hwasan_frame_tag_offset variable has
+ 	 been set to one after the last stack variables tag).  */
+       tree tag = gimple_build (&stmts, loc, CFN_HWASAN_CHOOSE_TAG,
+ 			       unsigned_char_type_node);
+ 
+       /* Add tag to pointer.  */
+       tree addr
+ 	= gimple_build (&stmts, loc, CFN_HWASAN_SET_TAG, ptr_type,
+ 			untagged_addr, tag);
+ 
+       /* Tag shadow memory.
+ 	 NOTE: require using `untagged_addr` here for libhwasan API.  */
+       gimple_build (&stmts, loc, as_combined_fn (BUILT_IN_HWASAN_TAG_MEM),
+ 		    void_type_node, untagged_addr, tag, new_size);
+ 
+       /* Insert the built up code sequence into the original instruction stream
+ 	 the iterator points to.  */
+       gsi_insert_seq_before (iter, stmts, GSI_SAME_STMT);
+ 
+       /* Finally, replace old alloca ptr with NEW_ALLOCA.  */
+       replace_call_with_value (iter, addr);
+       return;
+     }
+ 
+   tree last_alloca = get_last_alloca_addr ();
+   const HOST_WIDE_INT redzone_mask = ASAN_RED_ZONE_SIZE - 1;
+ 
+   /* If ALIGN > ASAN_RED_ZONE_SIZE, we embed left redzone into first ALIGN
+      bytes of allocated space.  Otherwise, align alloca to ASAN_RED_ZONE_SIZE
+      manually.  */
+   align = MAX (align, ASAN_RED_ZONE_SIZE * BITS_PER_UNIT);
+ 
+   tree alloca_rz_mask = build_int_cst (size_type_node, redzone_mask);
+   tree redzone_size = build_int_cst (size_type_node, ASAN_RED_ZONE_SIZE);
+ 
+   /* Extract lower bits from old_size.  */
+   wide_int size_nonzero_bits = get_nonzero_bits (old_size);
+   wide_int rz_mask
+     = wi::uhwi (redzone_mask, wi::get_precision (size_nonzero_bits));
+   wide_int old_size_lower_bits = wi::bit_and (size_nonzero_bits, rz_mask);
+ 
+   /* If alloca size is aligned to ASAN_RED_ZONE_SIZE, we don't need partial
+      redzone.  Otherwise, compute its size here.  */
+   if (wi::ne_p (old_size_lower_bits, 0))
+     {
+       /* misalign = size & (ASAN_RED_ZONE_SIZE - 1)
+          partial_size = ASAN_RED_ZONE_SIZE - misalign.  */
+       g = gimple_build_assign (make_ssa_name (size_type_node, NULL),
+ 			       BIT_AND_EXPR, old_size, alloca_rz_mask);
+       gsi_insert_before (iter, g, GSI_SAME_STMT);
+       tree misalign = gimple_assign_lhs (g);
+       g = gimple_build_assign (make_ssa_name (size_type_node, NULL), MINUS_EXPR,
+ 			       redzone_size, misalign);
+       gsi_insert_before (iter, g, GSI_SAME_STMT);
+       partial_size = gimple_assign_lhs (g);
+     }
+ 
+   /* additional_size = align + ASAN_RED_ZONE_SIZE.  */
+   tree additional_size = build_int_cst (size_type_node, align / BITS_PER_UNIT
+ 							+ ASAN_RED_ZONE_SIZE);
+   /* If alloca has partial redzone, include it to additional_size too.  */
+   if (partial_size)
+     {
+       /* additional_size += partial_size.  */
+       g = gimple_build_assign (make_ssa_name (size_type_node), PLUS_EXPR,
+ 			       partial_size, additional_size);
+       gsi_insert_before (iter, g, GSI_SAME_STMT);
+       additional_size = gimple_assign_lhs (g);
+     }
+ 
+   /* new_size = old_size + additional_size.  */
+   g = gimple_build_assign (make_ssa_name (size_type_node), PLUS_EXPR, old_size,
+ 			   additional_size);
+   gsi_insert_before (iter, g, GSI_SAME_STMT);
+   tree new_size = gimple_assign_lhs (g);
+ 
+   /* Build new __builtin_alloca call:
+        new_alloca_with_rz = __builtin_alloca (new_size, align).  */
+   tree fn = builtin_decl_implicit (BUILT_IN_ALLOCA_WITH_ALIGN);
+   gg = gimple_build_call (fn, 2, new_size,
+ 			  build_int_cst (size_type_node, align));
+   tree new_alloca_with_rz = make_ssa_name (ptr_type, gg);
+   gimple_call_set_lhs (gg, new_alloca_with_rz);
+   if (throws)
+     {
+       gimple_call_set_lhs (call, NULL);
+       gsi_replace (iter, gg, true);
+     }
+   else
+     gsi_insert_before (iter, gg, GSI_SAME_STMT);
+ 
+   /* new_alloca = new_alloca_with_rz + align.  */
+   g = gimple_build_assign (make_ssa_name (ptr_type), POINTER_PLUS_EXPR,
+ 			   new_alloca_with_rz,
+ 			   build_int_cst (size_type_node,
+ 					  align / BITS_PER_UNIT));
+   gimple_stmt_iterator gsi = gsi_none ();
+   if (throws)
+     {
+       gsi_insert_on_edge_immediate (e, g);
+       gsi = gsi_for_stmt (g);
+     }
+   else
+     gsi_insert_before (iter, g, GSI_SAME_STMT);
+   tree new_alloca = gimple_assign_lhs (g);
+ 
+   /* Poison newly created alloca redzones:
+       __asan_alloca_poison (new_alloca, old_size).  */
+   fn = builtin_decl_implicit (BUILT_IN_ASAN_ALLOCA_POISON);
+   gg = gimple_build_call (fn, 2, new_alloca, old_size);
+   if (throws)
+     gsi_insert_after (&gsi, gg, GSI_NEW_STMT);
+   else
+     gsi_insert_before (iter, gg, GSI_SAME_STMT);
+ 
+   /* Save new_alloca_with_rz value into last_alloca to use it during
+      allocas unpoisoning.  */
+   g = gimple_build_assign (last_alloca, new_alloca_with_rz);
+   if (throws)
+     gsi_insert_after (&gsi, g, GSI_NEW_STMT);
+   else
+     gsi_insert_before (iter, g, GSI_SAME_STMT);
+ 
+   /* Finally, replace old alloca ptr with NEW_ALLOCA.  */
+   if (throws)
+     {
+       g = gimple_build_assign (lhs, new_alloca);
+       gsi_insert_after (&gsi, g, GSI_NEW_STMT);
+     }
+   else
+     replace_call_with_value (iter, new_alloca);
+ }
+ 
+ /* Return the memory references contained in a gimple statement
+    representing a builtin call that has to do with memory access.  */
+ 
+ static bool
+ get_mem_refs_of_builtin_call (gcall *call,
+ 			      asan_mem_ref *src0,
+ 			      tree *src0_len,
+ 			      bool *src0_is_store,
+ 			      asan_mem_ref *src1,
+ 			      tree *src1_len,
+ 			      bool *src1_is_store,
+ 			      asan_mem_ref *dst,
+ 			      tree *dst_len,
+ 			      bool *dst_is_store,
+ 			      bool *dest_is_deref,
+ 			      bool *intercepted_p,
+ 			      gimple_stmt_iterator *iter = NULL)
+ {
+   gcc_checking_assert (gimple_call_builtin_p (call, BUILT_IN_NORMAL));
+ 
+   tree callee = gimple_call_fndecl (call);
+   tree source0 = NULL_TREE, source1 = NULL_TREE,
+     dest = NULL_TREE, len = NULL_TREE;
+   bool is_store = true, got_reference_p = false;
+   HOST_WIDE_INT access_size = 1;
+ 
+   *intercepted_p = asan_intercepted_p ((DECL_FUNCTION_CODE (callee)));
+ 
+   switch (DECL_FUNCTION_CODE (callee))
+     {
+       /* (s, s, n) style memops.  */
+     case BUILT_IN_BCMP:
+     case BUILT_IN_MEMCMP:
+       source0 = gimple_call_arg (call, 0);
+       source1 = gimple_call_arg (call, 1);
+       len = gimple_call_arg (call, 2);
+       break;
+ 
+       /* (src, dest, n) style memops.  */
+     case BUILT_IN_BCOPY:
+       source0 = gimple_call_arg (call, 0);
+       dest = gimple_call_arg (call, 1);
+       len = gimple_call_arg (call, 2);
+       break;
+ 
+       /* (dest, src, n) style memops.  */
+     case BUILT_IN_MEMCPY:
+     case BUILT_IN_MEMCPY_CHK:
+     case BUILT_IN_MEMMOVE:
+     case BUILT_IN_MEMMOVE_CHK:
+     case BUILT_IN_MEMPCPY:
+     case BUILT_IN_MEMPCPY_CHK:
+       dest = gimple_call_arg (call, 0);
+       source0 = gimple_call_arg (call, 1);
+       len = gimple_call_arg (call, 2);
+       break;
+ 
+       /* (dest, n) style memops.  */
+     case BUILT_IN_BZERO:
+       dest = gimple_call_arg (call, 0);
+       len = gimple_call_arg (call, 1);
+       break;
+ 
+       /* (dest, x, n) style memops*/
+     case BUILT_IN_MEMSET:
+     case BUILT_IN_MEMSET_CHK:
+       dest = gimple_call_arg (call, 0);
+       len = gimple_call_arg (call, 2);
+       break;
+ 
+     case BUILT_IN_STRLEN:
+       /* Special case strlen here since its length is taken from its return
+ 	 value.
+ 
+ 	 The approach taken by the sanitizers is to check a memory access
+ 	 before it's taken.  For ASAN strlen is intercepted by libasan, so no
+ 	 check is inserted by the compiler.
+ 
+ 	 This function still returns `true` and provides a length to the rest
+ 	 of the ASAN pass in order to record what areas have been checked,
+ 	 avoiding superfluous checks later on.
+ 
+ 	 HWASAN does not intercept any of these internal functions.
+ 	 This means that checks for memory accesses must be inserted by the
+ 	 compiler.
+ 	 strlen is a special case, because we can tell the length from the
+ 	 return of the function, but that is not known until after the function
+ 	 has returned.
+ 
+ 	 Hence we can't check the memory access before it happens.
+ 	 We could check the memory access after it has already happened, but
+ 	 for now we choose to just ignore `strlen` calls.
+ 	 This decision was simply made because that means the special case is
+ 	 limited to this one case of this one function.  */
+       if (hwasan_sanitize_p ())
+ 	return false;
+       source0 = gimple_call_arg (call, 0);
+       len = gimple_call_lhs (call);
+       break;
+ 
+     case BUILT_IN_STACK_RESTORE:
+       handle_builtin_stack_restore (call, iter);
+       break;
+ 
+     CASE_BUILT_IN_ALLOCA:
+       handle_builtin_alloca (call, iter);
+       break;
+     /* And now the __atomic* and __sync builtins.
+        These are handled differently from the classical memory
+        access builtins above.  */
+ 
+     case BUILT_IN_ATOMIC_LOAD_1:
+       is_store = false;
+       /* FALLTHRU */
+     case BUILT_IN_SYNC_FETCH_AND_ADD_1:
+     case BUILT_IN_SYNC_FETCH_AND_SUB_1:
+     case BUILT_IN_SYNC_FETCH_AND_OR_1:
+     case BUILT_IN_SYNC_FETCH_AND_AND_1:
+     case BUILT_IN_SYNC_FETCH_AND_XOR_1:
+     case BUILT_IN_SYNC_FETCH_AND_NAND_1:
+     case BUILT_IN_SYNC_ADD_AND_FETCH_1:
+     case BUILT_IN_SYNC_SUB_AND_FETCH_1:
+     case BUILT_IN_SYNC_OR_AND_FETCH_1:
+     case BUILT_IN_SYNC_AND_AND_FETCH_1:
+     case BUILT_IN_SYNC_XOR_AND_FETCH_1:
+     case BUILT_IN_SYNC_NAND_AND_FETCH_1:
+     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1:
+     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1:
+     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_1:
+     case BUILT_IN_SYNC_LOCK_RELEASE_1:
+     case BUILT_IN_ATOMIC_EXCHANGE_1:
+     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1:
+     case BUILT_IN_ATOMIC_STORE_1:
+     case BUILT_IN_ATOMIC_ADD_FETCH_1:
+     case BUILT_IN_ATOMIC_SUB_FETCH_1:
+     case BUILT_IN_ATOMIC_AND_FETCH_1:
+     case BUILT_IN_ATOMIC_NAND_FETCH_1:
+     case BUILT_IN_ATOMIC_XOR_FETCH_1:
+     case BUILT_IN_ATOMIC_OR_FETCH_1:
+     case BUILT_IN_ATOMIC_FETCH_ADD_1:
+     case BUILT_IN_ATOMIC_FETCH_SUB_1:
+     case BUILT_IN_ATOMIC_FETCH_AND_1:
+     case BUILT_IN_ATOMIC_FETCH_NAND_1:
+     case BUILT_IN_ATOMIC_FETCH_XOR_1:
+     case BUILT_IN_ATOMIC_FETCH_OR_1:
+       access_size = 1;
+       goto do_atomic;
+ 
+     case BUILT_IN_ATOMIC_LOAD_2:
+       is_store = false;
+       /* FALLTHRU */
+     case BUILT_IN_SYNC_FETCH_AND_ADD_2:
+     case BUILT_IN_SYNC_FETCH_AND_SUB_2:
+     case BUILT_IN_SYNC_FETCH_AND_OR_2:
+     case BUILT_IN_SYNC_FETCH_AND_AND_2:
+     case BUILT_IN_SYNC_FETCH_AND_XOR_2:
+     case BUILT_IN_SYNC_FETCH_AND_NAND_2:
+     case BUILT_IN_SYNC_ADD_AND_FETCH_2:
+     case BUILT_IN_SYNC_SUB_AND_FETCH_2:
+     case BUILT_IN_SYNC_OR_AND_FETCH_2:
+     case BUILT_IN_SYNC_AND_AND_FETCH_2:
+     case BUILT_IN_SYNC_XOR_AND_FETCH_2:
+     case BUILT_IN_SYNC_NAND_AND_FETCH_2:
+     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2:
+     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2:
+     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_2:
+     case BUILT_IN_SYNC_LOCK_RELEASE_2:
+     case BUILT_IN_ATOMIC_EXCHANGE_2:
+     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2:
+     case BUILT_IN_ATOMIC_STORE_2:
+     case BUILT_IN_ATOMIC_ADD_FETCH_2:
+     case BUILT_IN_ATOMIC_SUB_FETCH_2:
+     case BUILT_IN_ATOMIC_AND_FETCH_2:
+     case BUILT_IN_ATOMIC_NAND_FETCH_2:
+     case BUILT_IN_ATOMIC_XOR_FETCH_2:
+     case BUILT_IN_ATOMIC_OR_FETCH_2:
+     case BUILT_IN_ATOMIC_FETCH_ADD_2:
+     case BUILT_IN_ATOMIC_FETCH_SUB_2:
+     case BUILT_IN_ATOMIC_FETCH_AND_2:
+     case BUILT_IN_ATOMIC_FETCH_NAND_2:
+     case BUILT_IN_ATOMIC_FETCH_XOR_2:
+     case BUILT_IN_ATOMIC_FETCH_OR_2:
+       access_size = 2;
+       goto do_atomic;
+ 
+     case BUILT_IN_ATOMIC_LOAD_4:
+       is_store = false;
+       /* FALLTHRU */
+     case BUILT_IN_SYNC_FETCH_AND_ADD_4:
+     case BUILT_IN_SYNC_FETCH_AND_SUB_4:
+     case BUILT_IN_SYNC_FETCH_AND_OR_4:
+     case BUILT_IN_SYNC_FETCH_AND_AND_4:
+     case BUILT_IN_SYNC_FETCH_AND_XOR_4:
+     case BUILT_IN_SYNC_FETCH_AND_NAND_4:
+     case BUILT_IN_SYNC_ADD_AND_FETCH_4:
+     case BUILT_IN_SYNC_SUB_AND_FETCH_4:
+     case BUILT_IN_SYNC_OR_AND_FETCH_4:
+     case BUILT_IN_SYNC_AND_AND_FETCH_4:
+     case BUILT_IN_SYNC_XOR_AND_FETCH_4:
+     case BUILT_IN_SYNC_NAND_AND_FETCH_4:
+     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4:
+     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4:
+     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_4:
+     case BUILT_IN_SYNC_LOCK_RELEASE_4:
+     case BUILT_IN_ATOMIC_EXCHANGE_4:
+     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4:
+     case BUILT_IN_ATOMIC_STORE_4:
+     case BUILT_IN_ATOMIC_ADD_FETCH_4:
+     case BUILT_IN_ATOMIC_SUB_FETCH_4:
+     case BUILT_IN_ATOMIC_AND_FETCH_4:
+     case BUILT_IN_ATOMIC_NAND_FETCH_4:
+     case BUILT_IN_ATOMIC_XOR_FETCH_4:
+     case BUILT_IN_ATOMIC_OR_FETCH_4:
+     case BUILT_IN_ATOMIC_FETCH_ADD_4:
+     case BUILT_IN_ATOMIC_FETCH_SUB_4:
+     case BUILT_IN_ATOMIC_FETCH_AND_4:
+     case BUILT_IN_ATOMIC_FETCH_NAND_4:
+     case BUILT_IN_ATOMIC_FETCH_XOR_4:
+     case BUILT_IN_ATOMIC_FETCH_OR_4:
+       access_size = 4;
+       goto do_atomic;
+ 
+     case BUILT_IN_ATOMIC_LOAD_8:
+       is_store = false;
+       /* FALLTHRU */
+     case BUILT_IN_SYNC_FETCH_AND_ADD_8:
+     case BUILT_IN_SYNC_FETCH_AND_SUB_8:
+     case BUILT_IN_SYNC_FETCH_AND_OR_8:
+     case BUILT_IN_SYNC_FETCH_AND_AND_8:
+     case BUILT_IN_SYNC_FETCH_AND_XOR_8:
+     case BUILT_IN_SYNC_FETCH_AND_NAND_8:
+     case BUILT_IN_SYNC_ADD_AND_FETCH_8:
+     case BUILT_IN_SYNC_SUB_AND_FETCH_8:
+     case BUILT_IN_SYNC_OR_AND_FETCH_8:
+     case BUILT_IN_SYNC_AND_AND_FETCH_8:
+     case BUILT_IN_SYNC_XOR_AND_FETCH_8:
+     case BUILT_IN_SYNC_NAND_AND_FETCH_8:
+     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8:
+     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8:
+     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_8:
+     case BUILT_IN_SYNC_LOCK_RELEASE_8:
+     case BUILT_IN_ATOMIC_EXCHANGE_8:
+     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8:
+     case BUILT_IN_ATOMIC_STORE_8:
+     case BUILT_IN_ATOMIC_ADD_FETCH_8:
+     case BUILT_IN_ATOMIC_SUB_FETCH_8:
+     case BUILT_IN_ATOMIC_AND_FETCH_8:
+     case BUILT_IN_ATOMIC_NAND_FETCH_8:
+     case BUILT_IN_ATOMIC_XOR_FETCH_8:
+     case BUILT_IN_ATOMIC_OR_FETCH_8:
+     case BUILT_IN_ATOMIC_FETCH_ADD_8:
+     case BUILT_IN_ATOMIC_FETCH_SUB_8:
+     case BUILT_IN_ATOMIC_FETCH_AND_8:
+     case BUILT_IN_ATOMIC_FETCH_NAND_8:
+     case BUILT_IN_ATOMIC_FETCH_XOR_8:
+     case BUILT_IN_ATOMIC_FETCH_OR_8:
+       access_size = 8;
+       goto do_atomic;
+ 
+     case BUILT_IN_ATOMIC_LOAD_16:
+       is_store = false;
+       /* FALLTHRU */
+     case BUILT_IN_SYNC_FETCH_AND_ADD_16:
+     case BUILT_IN_SYNC_FETCH_AND_SUB_16:
+     case BUILT_IN_SYNC_FETCH_AND_OR_16:
+     case BUILT_IN_SYNC_FETCH_AND_AND_16:
+     case BUILT_IN_SYNC_FETCH_AND_XOR_16:
+     case BUILT_IN_SYNC_FETCH_AND_NAND_16:
+     case BUILT_IN_SYNC_ADD_AND_FETCH_16:
+     case BUILT_IN_SYNC_SUB_AND_FETCH_16:
+     case BUILT_IN_SYNC_OR_AND_FETCH_16:
+     case BUILT_IN_SYNC_AND_AND_FETCH_16:
+     case BUILT_IN_SYNC_XOR_AND_FETCH_16:
+     case BUILT_IN_SYNC_NAND_AND_FETCH_16:
+     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16:
+     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_16:
+     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_16:
+     case BUILT_IN_SYNC_LOCK_RELEASE_16:
+     case BUILT_IN_ATOMIC_EXCHANGE_16:
+     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16:
+     case BUILT_IN_ATOMIC_STORE_16:
+     case BUILT_IN_ATOMIC_ADD_FETCH_16:
+     case BUILT_IN_ATOMIC_SUB_FETCH_16:
+     case BUILT_IN_ATOMIC_AND_FETCH_16:
+     case BUILT_IN_ATOMIC_NAND_FETCH_16:
+     case BUILT_IN_ATOMIC_XOR_FETCH_16:
+     case BUILT_IN_ATOMIC_OR_FETCH_16:
+     case BUILT_IN_ATOMIC_FETCH_ADD_16:
+     case BUILT_IN_ATOMIC_FETCH_SUB_16:
+     case BUILT_IN_ATOMIC_FETCH_AND_16:
+     case BUILT_IN_ATOMIC_FETCH_NAND_16:
+     case BUILT_IN_ATOMIC_FETCH_XOR_16:
+     case BUILT_IN_ATOMIC_FETCH_OR_16:
+       access_size = 16;
+       /* FALLTHRU */
+     do_atomic:
+       {
+ 	dest = gimple_call_arg (call, 0);
+ 	/* DEST represents the address of a memory location.
+ 	   instrument_derefs wants the memory location, so lets
+ 	   dereference the address DEST before handing it to
+ 	   instrument_derefs.  */
+ 	tree type = build_nonstandard_integer_type (access_size
+ 						    * BITS_PER_UNIT, 1);
+ 	dest = build2 (MEM_REF, type, dest,
+ 		       build_int_cst (build_pointer_type (char_type_node), 0));
+ 	break;
+       }
+ 
+     default:
+       /* The other builtins memory access are not instrumented in this
+ 	 function because they either don't have any length parameter,
+ 	 or their length parameter is just a limit.  */
+       break;
+     }
+ 
+   if (len != NULL_TREE)
+     {
+       if (source0 != NULL_TREE)
+ 	{
+ 	  src0->start = source0;
+ 	  src0->access_size = access_size;
+ 	  *src0_len = len;
+ 	  *src0_is_store = false;
+ 	}
+ 
+       if (source1 != NULL_TREE)
+ 	{
+ 	  src1->start = source1;
+ 	  src1->access_size = access_size;
+ 	  *src1_len = len;
+ 	  *src1_is_store = false;
+ 	}
+ 
+       if (dest != NULL_TREE)
+ 	{
+ 	  dst->start = dest;
+ 	  dst->access_size = access_size;
+ 	  *dst_len = len;
+ 	  *dst_is_store = true;
+ 	}
+ 
+       got_reference_p = true;
+     }
+   else if (dest)
+     {
+       dst->start = dest;
+       dst->access_size = access_size;
+       *dst_len = NULL_TREE;
+       *dst_is_store = is_store;
+       *dest_is_deref = true;
+       got_reference_p = true;
+     }
+ 
+   return got_reference_p;
+ }
+ 
+ /* Return true iff a given gimple statement has been instrumented.
+    Note that the statement is "defined" by the memory references it
+    contains.  */
+ 
+ static bool
+ has_stmt_been_instrumented_p (gimple *stmt)
+ {
+   if (gimple_assign_single_p (stmt))
+     {
+       bool r_is_store;
+       asan_mem_ref r;
+       asan_mem_ref_init (&r, NULL, 1);
+ 
+       if (get_mem_ref_of_assignment (as_a <gassign *> (stmt), &r,
+ 				     &r_is_store))
+ 	return has_mem_ref_been_instrumented (&r);
+     }
+   else if (gimple_call_builtin_p (stmt, BUILT_IN_NORMAL))
+     {
+       asan_mem_ref src0, src1, dest;
+       asan_mem_ref_init (&src0, NULL, 1);
+       asan_mem_ref_init (&src1, NULL, 1);
+       asan_mem_ref_init (&dest, NULL, 1);
+ 
+       tree src0_len = NULL_TREE, src1_len = NULL_TREE, dest_len = NULL_TREE;
+       bool src0_is_store = false, src1_is_store = false,
+ 	dest_is_store = false, dest_is_deref = false, intercepted_p = true;
+       if (get_mem_refs_of_builtin_call (as_a <gcall *> (stmt),
+ 					&src0, &src0_len, &src0_is_store,
+ 					&src1, &src1_len, &src1_is_store,
+ 					&dest, &dest_len, &dest_is_store,
+ 					&dest_is_deref, &intercepted_p))
+ 	{
+ 	  if (src0.start != NULL_TREE
+ 	      && !has_mem_ref_been_instrumented (&src0, src0_len))
+ 	    return false;
+ 
+ 	  if (src1.start != NULL_TREE
+ 	      && !has_mem_ref_been_instrumented (&src1, src1_len))
+ 	    return false;
+ 
+ 	  if (dest.start != NULL_TREE
+ 	      && !has_mem_ref_been_instrumented (&dest, dest_len))
+ 	    return false;
+ 
+ 	  return true;
+ 	}
+     }
+   else if (is_gimple_call (stmt) && gimple_store_p (stmt))
+     {
+       asan_mem_ref r;
+       asan_mem_ref_init (&r, NULL, 1);
+ 
+       r.start = gimple_call_lhs (stmt);
+       r.access_size = int_size_in_bytes (TREE_TYPE (r.start));
+       return has_mem_ref_been_instrumented (&r);
+     }
+ 
+   return false;
+ }
+ 
+ /*  Insert a memory reference into the hash table.  */
+ 
+ static void
+ update_mem_ref_hash_table (tree ref, HOST_WIDE_INT access_size)
+ {
+   hash_table<asan_mem_ref_hasher> *ht = get_mem_ref_hash_table ();
+ 
+   asan_mem_ref r;
+   asan_mem_ref_init (&r, ref, access_size);
+ 
+   asan_mem_ref **slot = ht->find_slot (&r, INSERT);
+   if (*slot == NULL || (*slot)->access_size < access_size)
+     *slot = asan_mem_ref_new (ref, access_size);
+ }
+ 
+ /* Initialize shadow_ptr_types array.  */
+ 
+ static void
+ asan_init_shadow_ptr_types (void)
+ {
+   asan_shadow_set = new_alias_set ();
+   tree types[3] = { signed_char_type_node, short_integer_type_node,
+ 		    integer_type_node };
+ 
+   for (unsigned i = 0; i < 3; i++)
+     {
+       shadow_ptr_types[i] = build_distinct_type_copy (types[i]);
+       TYPE_ALIAS_SET (shadow_ptr_types[i]) = asan_shadow_set;
+       shadow_ptr_types[i] = build_pointer_type (shadow_ptr_types[i]);
+     }
+ 
+   initialize_sanitizer_builtins ();
+ }
+ 
+ /* Create ADDR_EXPR of STRING_CST with the PP pretty printer text.  */
+ 
+ static tree
+ asan_pp_string (pretty_printer *pp)
+ {
+   const char *buf = pp_formatted_text (pp);
+   size_t len = strlen (buf);
+   tree ret = build_string (len + 1, buf);
+   TREE_TYPE (ret)
+     = build_array_type (TREE_TYPE (shadow_ptr_types[0]),
+ 			build_index_type (size_int (len)));
+   TREE_READONLY (ret) = 1;
+   TREE_STATIC (ret) = 1;
+   return build1 (ADDR_EXPR, shadow_ptr_types[0], ret);
+ }
+ 
+ /* Clear shadow memory at SHADOW_MEM, LEN bytes.  Can't call a library call here
+    though.  */
+ 
+ static void
+ asan_clear_shadow (rtx shadow_mem, HOST_WIDE_INT len)
+ {
+   rtx_insn *insn, *insns, *jump;
+   rtx_code_label *top_label;
+   rtx end, addr, tmp;
+ 
+   gcc_assert ((len & 3) == 0);
+   start_sequence ();
+   clear_storage (shadow_mem, GEN_INT (len), BLOCK_OP_NORMAL);
+   insns = get_insns ();
+   end_sequence ();
+   for (insn = insns; insn; insn = NEXT_INSN (insn))
+     if (CALL_P (insn))
+       break;
+   if (insn == NULL_RTX)
+     {
+       emit_insn (insns);
+       return;
+     }
+ 
+   top_label = gen_label_rtx ();
+   addr = copy_to_mode_reg (Pmode, XEXP (shadow_mem, 0));
+   shadow_mem = adjust_automodify_address (shadow_mem, SImode, addr, 0);
+   end = force_reg (Pmode, plus_constant (Pmode, addr, len));
+   emit_label (top_label);
+ 
+   emit_move_insn (shadow_mem, const0_rtx);
+   tmp = expand_simple_binop (Pmode, PLUS, addr, gen_int_mode (4, Pmode), addr,
+ 			     true, OPTAB_LIB_WIDEN);
+   if (tmp != addr)
+     emit_move_insn (addr, tmp);
+   emit_cmp_and_jump_insns (addr, end, LT, NULL_RTX, Pmode, true, top_label);
+   jump = get_last_insn ();
+   gcc_assert (JUMP_P (jump));
+   add_reg_br_prob_note (jump,
+ 			profile_probability::guessed_always ()
+ 			   .apply_scale (80, 100));
+ }
+ 
+ void
+ asan_function_start (void)
+ {
+   section *fnsec = function_section (current_function_decl);
+   switch_to_section (fnsec);
+   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LASANPC",
+ 			 current_function_funcdef_no);
+ }
+ 
+ /* Return number of shadow bytes that are occupied by a local variable
+    of SIZE bytes.  */
+ 
+ static unsigned HOST_WIDE_INT
+ shadow_mem_size (unsigned HOST_WIDE_INT size)
+ {
+   /* It must be possible to align stack variables to granularity
+      of shadow memory.  */
+   gcc_assert (BITS_PER_UNIT
+ 	      * ASAN_SHADOW_GRANULARITY <= MAX_SUPPORTED_STACK_ALIGNMENT);
+ 
+   return ROUND_UP (size, ASAN_SHADOW_GRANULARITY) / ASAN_SHADOW_GRANULARITY;
+ }
+ 
+ /* Always emit 4 bytes at a time.  */
+ #define RZ_BUFFER_SIZE 4
+ 
+ /* ASAN redzone buffer container that handles emission of shadow bytes.  */
+ class asan_redzone_buffer
+ {
+ public:
+   /* Constructor.  */
+   asan_redzone_buffer (rtx shadow_mem, HOST_WIDE_INT prev_offset):
+     m_shadow_mem (shadow_mem), m_prev_offset (prev_offset),
+     m_original_offset (prev_offset), m_shadow_bytes (RZ_BUFFER_SIZE)
+   {}
+ 
+   /* Emit VALUE shadow byte at a given OFFSET.  */
+   void emit_redzone_byte (HOST_WIDE_INT offset, unsigned char value);
+ 
+   /* Emit RTX emission of the content of the buffer.  */
+   void flush_redzone_payload (void);
+ 
+ private:
+   /* Flush if the content of the buffer is full
+      (equal to RZ_BUFFER_SIZE).  */
+   void flush_if_full (void);
+ 
+   /* Memory where we last emitted a redzone payload.  */
+   rtx m_shadow_mem;
+ 
+   /* Relative offset where we last emitted a redzone payload.  */
+   HOST_WIDE_INT m_prev_offset;
+ 
+   /* Relative original offset.  Used for checking only.  */
+   HOST_WIDE_INT m_original_offset;
+ 
+ public:
+   /* Buffer with redzone payload.  */
+   auto_vec<unsigned char> m_shadow_bytes;
+ };
+ 
+ /* Emit VALUE shadow byte at a given OFFSET.  */
+ 
+ void
+ asan_redzone_buffer::emit_redzone_byte (HOST_WIDE_INT offset,
+ 					unsigned char value)
+ {
+   gcc_assert ((offset & (ASAN_SHADOW_GRANULARITY - 1)) == 0);
+   gcc_assert (offset >= m_prev_offset);
+ 
+   HOST_WIDE_INT off
+     = m_prev_offset + ASAN_SHADOW_GRANULARITY * m_shadow_bytes.length ();
+   if (off == offset)
+     /* Consecutive shadow memory byte.  */;
+   else if (offset < m_prev_offset + (HOST_WIDE_INT) (ASAN_SHADOW_GRANULARITY
+ 						     * RZ_BUFFER_SIZE)
+ 	   && !m_shadow_bytes.is_empty ())
+     {
+       /* Shadow memory byte with a small gap.  */
+       for (; off < offset; off += ASAN_SHADOW_GRANULARITY)
+ 	m_shadow_bytes.safe_push (0);
+     }
+   else
+     {
+       if (!m_shadow_bytes.is_empty ())
+ 	flush_redzone_payload ();
+ 
+       /* Maybe start earlier in order to use aligned store.  */
+       HOST_WIDE_INT align = (offset - m_prev_offset) % ASAN_RED_ZONE_SIZE;
+       if (align)
+ 	{
+ 	  offset -= align;
+ 	  for (unsigned i = 0; i < align / BITS_PER_UNIT; i++)
+ 	    m_shadow_bytes.safe_push (0);
+ 	}
+ 
+       /* Adjust m_prev_offset and m_shadow_mem.  */
+       HOST_WIDE_INT diff = offset - m_prev_offset;
+       m_shadow_mem = adjust_address (m_shadow_mem, VOIDmode,
+ 				     diff >> ASAN_SHADOW_SHIFT);
+       m_prev_offset = offset;
+     }
+   m_shadow_bytes.safe_push (value);
+   flush_if_full ();
+ }
+ 
+ /* Emit RTX emission of the content of the buffer.  */
+ 
+ void
+ asan_redzone_buffer::flush_redzone_payload (void)
+ {
+   gcc_assert (WORDS_BIG_ENDIAN == BYTES_BIG_ENDIAN);
+ 
+   if (m_shadow_bytes.is_empty ())
+     return;
+ 
+   /* Be sure we always emit to an aligned address.  */
+   gcc_assert (((m_prev_offset - m_original_offset)
+ 	      & (ASAN_RED_ZONE_SIZE - 1)) == 0);
+ 
+   /* Fill it to RZ_BUFFER_SIZE bytes with zeros if needed.  */
+   unsigned l = m_shadow_bytes.length ();
+   for (unsigned i = 0; i <= RZ_BUFFER_SIZE - l; i++)
+     m_shadow_bytes.safe_push (0);
+ 
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     fprintf (dump_file,
+ 	     "Flushing rzbuffer at offset %" PRId64 " with: ", m_prev_offset);
+ 
+   unsigned HOST_WIDE_INT val = 0;
+   for (unsigned i = 0; i < RZ_BUFFER_SIZE; i++)
+     {
+       unsigned char v
+ 	= m_shadow_bytes[BYTES_BIG_ENDIAN ? RZ_BUFFER_SIZE - i - 1 : i];
+       val |= (unsigned HOST_WIDE_INT)v << (BITS_PER_UNIT * i);
+       if (dump_file && (dump_flags & TDF_DETAILS))
+ 	fprintf (dump_file, "%02x ", v);
+     }
+ 
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     fprintf (dump_file, "\n");
+ 
+   rtx c = gen_int_mode (val, SImode);
+   m_shadow_mem = adjust_address (m_shadow_mem, SImode, 0);
+   emit_move_insn (m_shadow_mem, c);
+   m_shadow_bytes.truncate (0);
+ }
+ 
+ /* Flush if the content of the buffer is full
+    (equal to RZ_BUFFER_SIZE).  */
+ 
+ void
+ asan_redzone_buffer::flush_if_full (void)
+ {
+   if (m_shadow_bytes.length () == RZ_BUFFER_SIZE)
+     flush_redzone_payload ();
+ }
+ 
+ 
+ /* HWAddressSanitizer (hwasan) is a probabilistic method for detecting
+    out-of-bounds and use-after-free bugs.
+    Read more:
+    http://code.google.com/p/address-sanitizer/
+ 
+    Similar to AddressSanitizer (asan) it consists of two parts: the
+    instrumentation module in this file, and a run-time library.
+ 
+    The instrumentation module adds a run-time check before every memory insn in
+    the same manner as asan (see the block comment for AddressSanitizer above).
+    Currently, hwasan only adds out-of-line instrumentation, where each check is
+    implemented as a function call to the run-time library.  Hence a check for a
+    load of N bytes from address X would be implemented with a function call to
+    __hwasan_loadN(X), and checking a store of N bytes from address X would be
+    implemented with a function call to __hwasan_storeN(X).
+ 
+    The main difference between hwasan and asan is in the information stored to
+    help this checking.  Both sanitizers use a shadow memory area which stores
+    data recording the state of main memory at a corresponding address.
+ 
+    For hwasan, each 16 byte granule in main memory has a corresponding 1 byte
+    in shadow memory.  This shadow address can be calculated with equation:
+      (addr >> log_2(HWASAN_TAG_GRANULE_SIZE))
+ 	  + __hwasan_shadow_memory_dynamic_address;
+    The conversion between real and shadow memory for asan is given in the block
+    comment at the top of this file.
+    The description of how this shadow memory is laid out for asan is in the
+    block comment at the top of this file, here we describe how this shadow
+    memory is used for hwasan.
+ 
+    For hwasan, each variable is assigned a byte-sized 'tag'.  The extent of
+    the shadow memory for that variable is filled with the assigned tag, and
+    every pointer referencing that variable has its top byte set to the same
+    tag.  The run-time library redefines malloc so that every allocation returns
+    a tagged pointer and tags the corresponding shadow memory with the same tag.
+ 
+    On each pointer dereference the tag found in the pointer is compared to the
+    tag found in the shadow memory corresponding to the accessed memory address.
+    If these tags are found to differ then this memory access is judged to be
+    invalid and a report is generated.
+ 
+    This method of bug detection is not perfect -- it can not catch every bad
+    access -- but catches them probabilistically instead.  There is always the
+    possibility that an invalid memory access will happen to access memory
+    tagged with the same tag as the pointer that this access used.
+    The chances of this are approx. 0.4% for any two uncorrelated objects.
+ 
+    Random tag generation can mitigate this problem by decreasing the
+    probability that an invalid access will be missed in the same manner over
+    multiple runs.  i.e. if two objects are tagged the same in one run of the
+    binary they are unlikely to be tagged the same in the next run.
+    Both heap and stack allocated objects have random tags by default.
+ 
+    [16 byte granule implications]
+     Since the shadow memory only has a resolution on real memory of 16 bytes,
+     invalid accesses that are within the same 16 byte granule as a valid
+     address will not be caught.
+ 
+     There is a "short-granule" feature in the runtime library which does catch
+     such accesses, but this feature is not implemented for stack objects (since
+     stack objects are allocated and tagged by compiler instrumentation, and
+     this feature has not yet been implemented in GCC instrumentation).
+ 
+     Another outcome of this 16 byte resolution is that each tagged object must
+     be 16 byte aligned.  If two objects were to share any 16 byte granule in
+     memory, then they both would have to be given the same tag, and invalid
+     accesses to one using a pointer to the other would be undetectable.
+ 
+    [Compiler instrumentation]
+     Compiler instrumentation ensures that two adjacent buffers on the stack are
+     given different tags, this means an access to one buffer using a pointer
+     generated from the other (e.g. through buffer overrun) will have mismatched
+     tags and be caught by hwasan.
+ 
+     We don't randomly tag every object on the stack, since that would require
+     keeping many registers to record each tag.  Instead we randomly generate a
+     tag for each function frame, and each new stack object uses a tag offset
+     from that frame tag.
+     i.e. each object is tagged as RFT + offset, where RFT is the "random frame
+     tag" generated for this frame.
+     This means that randomisation does not peturb the difference between tags
+     on tagged stack objects within a frame, but this is mitigated by the fact
+     that objects with the same tag within a frame are very far apart
+     (approx. 2^HWASAN_TAG_SIZE objects apart).
+ 
+     As a demonstration, using the same example program as in the asan block
+     comment above:
+ 
+      int
+      foo ()
+      {
+        char a[24] = {0};
+        int b[2] = {0};
+ 
+        a[5] = 1;
+        b[1] = 2;
+ 
+        return a[5] + b[1];
+      }
+ 
+     On AArch64 the stack will be ordered as follows for the above function:
+ 
+     Slot 1/ [24 bytes for variable 'a']
+     Slot 2/ [8 bytes padding for alignment]
+     Slot 3/ [8 bytes for variable 'b']
+     Slot 4/ [8 bytes padding for alignment]
+ 
+     (The padding is there to ensure 16 byte alignment as described in the 16
+      byte granule implications).
+ 
+     While the shadow memory will be ordered as follows:
+ 
+     - 2 bytes (representing 32 bytes in real memory) tagged with RFT + 1.
+     - 1 byte (representing 16 bytes in real memory) tagged with RFT + 2.
+ 
+     And any pointer to "a" will have the tag RFT + 1, and any pointer to "b"
+     will have the tag RFT + 2.
+ 
+    [Top Byte Ignore requirements]
+     Hwasan requires the ability to store an 8 bit tag in every pointer.  There
+     is no instrumentation done to remove this tag from pointers before
+     dereferencing, which means the hardware must ignore this tag during memory
+     accesses.
+ 
+     Architectures where this feature is available should indicate this using
+     the TARGET_MEMTAG_CAN_TAG_ADDRESSES hook.
+ 
+    [Stack requires cleanup on unwinding]
+     During normal operation of a hwasan sanitized program more space in the
+     shadow memory becomes tagged as the stack grows.  As the stack shrinks this
+     shadow memory space must become untagged.  If it is not untagged then when
+     the stack grows again (during other function calls later on in the program)
+     objects on the stack that are usually not tagged (e.g. parameters passed on
+     the stack) can be placed in memory whose shadow space is tagged with
+     something else, and accesses can cause false positive reports.
+ 
+     Hence we place untagging code on every epilogue of functions which tag some
+     stack objects.
+ 
+     Moreover, the run-time library intercepts longjmp & setjmp to untag when
+     the stack is unwound this way.
+ 
+     C++ exceptions are not yet handled, which means this sanitizer can not
+     handle C++ code that throws exceptions -- it will give false positives
+     after an exception has been thrown.  The implementation that the hwasan
+     library has for handling these relies on the frame pointer being after any
+     local variables.  This is not generally the case for GCC.  */
+ 
+ 
+ /* Returns whether we are tagging pointers and checking those tags on memory
+    access.  */
+ bool
+ hwasan_sanitize_p ()
+ {
+   return sanitize_flags_p (SANITIZE_HWADDRESS);
+ }
+ 
+ /* Are we tagging the stack?  */
+ bool
+ hwasan_sanitize_stack_p ()
+ {
+   return (hwasan_sanitize_p () && param_hwasan_instrument_stack);
+ }
+ 
+ /* Are we tagging alloca objects?  */
+ bool
+ hwasan_sanitize_allocas_p (void)
+ {
+   return (hwasan_sanitize_stack_p () && param_hwasan_instrument_allocas);
+ }
+ 
+ /* Should we instrument reads?  */
+ bool
+ hwasan_instrument_reads (void)
+ {
+   return (hwasan_sanitize_p () && param_hwasan_instrument_reads);
+ }
+ 
+ /* Should we instrument writes?  */
+ bool
+ hwasan_instrument_writes (void)
+ {
+   return (hwasan_sanitize_p () && param_hwasan_instrument_writes);
+ }
+ 
+ /* Should we instrument builtin calls?  */
+ bool
+ hwasan_memintrin (void)
+ {
+   return (hwasan_sanitize_p () && param_hwasan_instrument_mem_intrinsics);
+ }
+ 
+ /* Insert code to protect stack vars.  The prologue sequence should be emitted
+    directly, epilogue sequence returned.  BASE is the register holding the
+    stack base, against which OFFSETS array offsets are relative to, OFFSETS
+    array contains pairs of offsets in reverse order, always the end offset
+    of some gap that needs protection followed by starting offset,
+    and DECLS is an array of representative decls for each var partition.
+    LENGTH is the length of the OFFSETS array, DECLS array is LENGTH / 2 - 1
+    elements long (OFFSETS include gap before the first variable as well
+    as gaps after each stack variable).  PBASE is, if non-NULL, some pseudo
+    register which stack vars DECL_RTLs are based on.  Either BASE should be
+    assigned to PBASE, when not doing use after return protection, or
+    corresponding address based on __asan_stack_malloc* return value.  */
+ 
+ rtx_insn *
+ asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb,
+ 			    HOST_WIDE_INT *offsets, tree *decls, int length)
+ {
+   rtx shadow_base, shadow_mem, ret, mem, orig_base;
+   rtx_code_label *lab;
+   rtx_insn *insns;
+   char buf[32];
+   HOST_WIDE_INT base_offset = offsets[length - 1];
+   HOST_WIDE_INT base_align_bias = 0, offset, prev_offset;
+   HOST_WIDE_INT asan_frame_size = offsets[0] - base_offset;
+   HOST_WIDE_INT last_offset, last_size, last_size_aligned;
+   int l;
+   unsigned char cur_shadow_byte = ASAN_STACK_MAGIC_LEFT;
+   tree str_cst, decl, id;
+   int use_after_return_class = -1;
+ 
+   if (shadow_ptr_types[0] == NULL_TREE)
+     asan_init_shadow_ptr_types ();
+ 
+   expanded_location cfun_xloc
+     = expand_location (DECL_SOURCE_LOCATION (current_function_decl));
+ 
+   /* First of all, prepare the description string.  */
+   pretty_printer asan_pp;
+ 
+   pp_decimal_int (&asan_pp, length / 2 - 1);
+   pp_space (&asan_pp);
+   for (l = length - 2; l; l -= 2)
+     {
+       tree decl = decls[l / 2 - 1];
+       pp_wide_integer (&asan_pp, offsets[l] - base_offset);
+       pp_space (&asan_pp);
+       pp_wide_integer (&asan_pp, offsets[l - 1] - offsets[l]);
+       pp_space (&asan_pp);
+ 
+       expanded_location xloc
+ 	= expand_location (DECL_SOURCE_LOCATION (decl));
+       char location[32];
+ 
+       if (xloc.file == cfun_xloc.file)
+ 	sprintf (location, ":%d", xloc.line);
+       else
+ 	location[0] = '\0';
+ 
+       if (DECL_P (decl) && DECL_NAME (decl))
+ 	{
+ 	  unsigned idlen
+ 	    = IDENTIFIER_LENGTH (DECL_NAME (decl)) + strlen (location);
+ 	  pp_decimal_int (&asan_pp, idlen);
+ 	  pp_space (&asan_pp);
+ 	  pp_tree_identifier (&asan_pp, DECL_NAME (decl));
+ 	  pp_string (&asan_pp, location);
+ 	}
+       else
+ 	pp_string (&asan_pp, "9 <unknown>");
+ 
+       if (l > 2)
+ 	pp_space (&asan_pp);
+     }
+   str_cst = asan_pp_string (&asan_pp);
+ 
+   /* Emit the prologue sequence.  */
+   if (asan_frame_size > 32 && asan_frame_size <= 65536 && pbase
+       && param_asan_use_after_return)
+     {
+       use_after_return_class = floor_log2 (asan_frame_size - 1) - 5;
+       /* __asan_stack_malloc_N guarantees alignment
+ 	 N < 6 ? (64 << N) : 4096 bytes.  */
+       if (alignb > (use_after_return_class < 6
+ 		    ? (64U << use_after_return_class) : 4096U))
+ 	use_after_return_class = -1;
+       else if (alignb > ASAN_RED_ZONE_SIZE && (asan_frame_size & (alignb - 1)))
+ 	base_align_bias = ((asan_frame_size + alignb - 1)
+ 			   & ~(alignb - HOST_WIDE_INT_1)) - asan_frame_size;
+     }
+ 
+   /* Align base if target is STRICT_ALIGNMENT.  */
+   if (STRICT_ALIGNMENT)
+     {
+       const HOST_WIDE_INT align
+ 	= (GET_MODE_ALIGNMENT (SImode) / BITS_PER_UNIT) << ASAN_SHADOW_SHIFT;
+       base = expand_binop (Pmode, and_optab, base, gen_int_mode (-align, Pmode),
+ 			   NULL_RTX, 1, OPTAB_DIRECT);
+     }
+ 
+   if (use_after_return_class == -1 && pbase)
+     emit_move_insn (pbase, base);
+ 
+   base = expand_binop (Pmode, add_optab, base,
+ 		       gen_int_mode (base_offset - base_align_bias, Pmode),
+ 		       NULL_RTX, 1, OPTAB_DIRECT);
+   orig_base = NULL_RTX;
+   if (use_after_return_class != -1)
+     {
+       if (asan_detect_stack_use_after_return == NULL_TREE)
+ 	{
+ 	  id = get_identifier ("__asan_option_detect_stack_use_after_return");
+ 	  decl = build_decl (BUILTINS_LOCATION, VAR_DECL, id,
+ 			     integer_type_node);
+ 	  SET_DECL_ASSEMBLER_NAME (decl, id);
+ 	  TREE_ADDRESSABLE (decl) = 1;
+ 	  DECL_ARTIFICIAL (decl) = 1;
+ 	  DECL_IGNORED_P (decl) = 1;
+ 	  DECL_EXTERNAL (decl) = 1;
+ 	  TREE_STATIC (decl) = 1;
+ 	  TREE_PUBLIC (decl) = 1;
+ 	  TREE_USED (decl) = 1;
+ 	  asan_detect_stack_use_after_return = decl;
+ 	}
+       orig_base = gen_reg_rtx (Pmode);
+       emit_move_insn (orig_base, base);
+       ret = expand_normal (asan_detect_stack_use_after_return);
+       lab = gen_label_rtx ();
+       emit_cmp_and_jump_insns (ret, const0_rtx, EQ, NULL_RTX,
+ 			       VOIDmode, 0, lab,
+ 			       profile_probability::very_likely ());
+       snprintf (buf, sizeof buf, "__asan_stack_malloc_%d",
+ 		use_after_return_class);
+       ret = init_one_libfunc (buf);
+       ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode,
+ 				     GEN_INT (asan_frame_size
+ 					      + base_align_bias),
+ 				     TYPE_MODE (pointer_sized_int_node));
+       /* __asan_stack_malloc_[n] returns a pointer to fake stack if succeeded
+ 	 and NULL otherwise.  Check RET value is NULL here and jump over the
+ 	 BASE reassignment in this case.  Otherwise, reassign BASE to RET.  */
+       emit_cmp_and_jump_insns (ret, const0_rtx, EQ, NULL_RTX,
+ 			       VOIDmode, 0, lab,
+ 			       profile_probability:: very_unlikely ());
+       ret = convert_memory_address (Pmode, ret);
+       emit_move_insn (base, ret);
+       emit_label (lab);
+       emit_move_insn (pbase, expand_binop (Pmode, add_optab, base,
+ 					   gen_int_mode (base_align_bias
+ 							 - base_offset, Pmode),
+ 					   NULL_RTX, 1, OPTAB_DIRECT));
+     }
+   mem = gen_rtx_MEM (ptr_mode, base);
+   mem = adjust_address (mem, VOIDmode, base_align_bias);
+   emit_move_insn (mem, gen_int_mode (ASAN_STACK_FRAME_MAGIC, ptr_mode));
+   mem = adjust_address (mem, VOIDmode, GET_MODE_SIZE (ptr_mode));
+   emit_move_insn (mem, expand_normal (str_cst));
+   mem = adjust_address (mem, VOIDmode, GET_MODE_SIZE (ptr_mode));
+   ASM_GENERATE_INTERNAL_LABEL (buf, "LASANPC", current_function_funcdef_no);
+   id = get_identifier (buf);
+   decl = build_decl (DECL_SOURCE_LOCATION (current_function_decl),
+ 		    VAR_DECL, id, char_type_node);
+   SET_DECL_ASSEMBLER_NAME (decl, id);
+   TREE_ADDRESSABLE (decl) = 1;
+   TREE_READONLY (decl) = 1;
+   DECL_ARTIFICIAL (decl) = 1;
+   DECL_IGNORED_P (decl) = 1;
+   TREE_STATIC (decl) = 1;
+   TREE_PUBLIC (decl) = 0;
+   TREE_USED (decl) = 1;
+   DECL_INITIAL (decl) = decl;
+   TREE_ASM_WRITTEN (decl) = 1;
+   TREE_ASM_WRITTEN (id) = 1;
+   emit_move_insn (mem, expand_normal (build_fold_addr_expr (decl)));
+   shadow_base = expand_binop (Pmode, lshr_optab, base,
+ 			      gen_int_shift_amount (Pmode, ASAN_SHADOW_SHIFT),
+ 			      NULL_RTX, 1, OPTAB_DIRECT);
+   shadow_base
+     = plus_constant (Pmode, shadow_base,
+ 		     asan_shadow_offset ()
+ 		     + (base_align_bias >> ASAN_SHADOW_SHIFT));
+   gcc_assert (asan_shadow_set != -1
+ 	      && (ASAN_RED_ZONE_SIZE >> ASAN_SHADOW_SHIFT) == 4);
+   shadow_mem = gen_rtx_MEM (SImode, shadow_base);
+   set_mem_alias_set (shadow_mem, asan_shadow_set);
+   if (STRICT_ALIGNMENT)
+     set_mem_align (shadow_mem, (GET_MODE_ALIGNMENT (SImode)));
+   prev_offset = base_offset;
+ 
+   asan_redzone_buffer rz_buffer (shadow_mem, prev_offset);
+   for (l = length; l; l -= 2)
+     {
+       if (l == 2)
+ 	cur_shadow_byte = ASAN_STACK_MAGIC_RIGHT;
+       offset = offsets[l - 1];
+ 
+       bool extra_byte = (offset - base_offset) & (ASAN_SHADOW_GRANULARITY - 1);
+       /* If a red-zone is not aligned to ASAN_SHADOW_GRANULARITY then
+ 	 the previous stack variable has size % ASAN_SHADOW_GRANULARITY != 0.
+ 	 In that case we have to emit one extra byte that will describe
+ 	 how many bytes (our of ASAN_SHADOW_GRANULARITY) can be accessed.  */
+       if (extra_byte)
+ 	{
+ 	  HOST_WIDE_INT aoff
+ 	    = base_offset + ((offset - base_offset)
+ 			     & ~(ASAN_SHADOW_GRANULARITY - HOST_WIDE_INT_1));
+ 	  rz_buffer.emit_redzone_byte (aoff, offset - aoff);
+ 	  offset = aoff + ASAN_SHADOW_GRANULARITY;
+ 	}
+ 
+       /* Calculate size of red zone payload.  */
+       while (offset < offsets[l - 2])
+ 	{
+ 	  rz_buffer.emit_redzone_byte (offset, cur_shadow_byte);
+ 	  offset += ASAN_SHADOW_GRANULARITY;
+ 	}
+ 
+       cur_shadow_byte = ASAN_STACK_MAGIC_MIDDLE;
+     }
+ 
+   /* As the automatic variables are aligned to
+      ASAN_RED_ZONE_SIZE / ASAN_SHADOW_GRANULARITY, the buffer should be
+      flushed here.  */
+   gcc_assert (rz_buffer.m_shadow_bytes.is_empty ());
+ 
+   do_pending_stack_adjust ();
+ 
+   /* Construct epilogue sequence.  */
+   start_sequence ();
+ 
+   lab = NULL;
+   if (use_after_return_class != -1)
+     {
+       rtx_code_label *lab2 = gen_label_rtx ();
+       char c = (char) ASAN_STACK_MAGIC_USE_AFTER_RET;
+       emit_cmp_and_jump_insns (orig_base, base, EQ, NULL_RTX,
+ 			       VOIDmode, 0, lab2,
+ 			       profile_probability::very_likely ());
+       shadow_mem = gen_rtx_MEM (BLKmode, shadow_base);
+       set_mem_alias_set (shadow_mem, asan_shadow_set);
+       mem = gen_rtx_MEM (ptr_mode, base);
+       mem = adjust_address (mem, VOIDmode, base_align_bias);
+       emit_move_insn (mem, gen_int_mode (ASAN_STACK_RETIRED_MAGIC, ptr_mode));
+       unsigned HOST_WIDE_INT sz = asan_frame_size >> ASAN_SHADOW_SHIFT;
+       if (use_after_return_class < 5
+ 	  && can_store_by_pieces (sz, builtin_memset_read_str, &c,
+ 				  BITS_PER_UNIT, true))
+ 	{
+ 	  /* Emit:
+ 	       memset(ShadowBase, kAsanStackAfterReturnMagic, ShadowSize);
+ 	       **SavedFlagPtr(FakeStack, class_id) = 0
+ 	  */
+ 	  store_by_pieces (shadow_mem, sz, builtin_memset_read_str, &c,
+ 			   BITS_PER_UNIT, true, RETURN_BEGIN);
+ 
+ 	  unsigned HOST_WIDE_INT offset
+ 	    = (1 << (use_after_return_class + 6));
+ 	  offset -= GET_MODE_SIZE (ptr_mode);
+ 	  mem = gen_rtx_MEM (ptr_mode, base);
+ 	  mem = adjust_address (mem, ptr_mode, offset);
+ 	  rtx addr = gen_reg_rtx (ptr_mode);
+ 	  emit_move_insn (addr, mem);
+ 	  addr = convert_memory_address (Pmode, addr);
+ 	  mem = gen_rtx_MEM (QImode, addr);
+ 	  emit_move_insn (mem, const0_rtx);
+ 	}
+       else if (use_after_return_class >= 5
+ 	       || !set_storage_via_setmem (shadow_mem,
+ 					   GEN_INT (sz),
+ 					   gen_int_mode (c, QImode),
+ 					   BITS_PER_UNIT, BITS_PER_UNIT,
+ 					   -1, sz, sz, sz))
+ 	{
+ 	  snprintf (buf, sizeof buf, "__asan_stack_free_%d",
+ 		    use_after_return_class);
+ 	  ret = init_one_libfunc (buf);
+ 	  rtx addr = convert_memory_address (ptr_mode, base);
+ 	  rtx orig_addr = convert_memory_address (ptr_mode, orig_base);
+ 	  emit_library_call (ret, LCT_NORMAL, ptr_mode, addr, ptr_mode,
+ 			     GEN_INT (asan_frame_size + base_align_bias),
+ 			     TYPE_MODE (pointer_sized_int_node),
+ 			     orig_addr, ptr_mode);
+ 	}
+       lab = gen_label_rtx ();
+       emit_jump (lab);
+       emit_label (lab2);
+     }
+ 
+   shadow_mem = gen_rtx_MEM (BLKmode, shadow_base);
+   set_mem_alias_set (shadow_mem, asan_shadow_set);
+ 
+   if (STRICT_ALIGNMENT)
+     set_mem_align (shadow_mem, (GET_MODE_ALIGNMENT (SImode)));
+ 
+   prev_offset = base_offset;
+   last_offset = base_offset;
+   last_size = 0;
+   last_size_aligned = 0;
+   for (l = length; l; l -= 2)
+     {
+       offset = base_offset + ((offsets[l - 1] - base_offset)
+ 			      & ~(ASAN_RED_ZONE_SIZE - HOST_WIDE_INT_1));
+       if (last_offset + last_size_aligned < offset)
+ 	{
+ 	  shadow_mem = adjust_address (shadow_mem, VOIDmode,
+ 				       (last_offset - prev_offset)
+ 				       >> ASAN_SHADOW_SHIFT);
+ 	  prev_offset = last_offset;
+ 	  asan_clear_shadow (shadow_mem, last_size_aligned >> ASAN_SHADOW_SHIFT);
+ 	  last_offset = offset;
+ 	  last_size = 0;
+ 	}
+       else
+ 	last_size = offset - last_offset;
+       last_size += base_offset + ((offsets[l - 2] - base_offset)
+ 				  & ~(ASAN_MIN_RED_ZONE_SIZE - HOST_WIDE_INT_1))
+ 		   - offset;
+ 
+       /* Unpoison shadow memory that corresponds to a variable that is 
+ 	 is subject of use-after-return sanitization.  */
+       if (l > 2)
+ 	{
+ 	  decl = decls[l / 2 - 2];
+ 	  if (asan_handled_variables != NULL
+ 	      && asan_handled_variables->contains (decl))
+ 	    {
+ 	      HOST_WIDE_INT size = offsets[l - 3] - offsets[l - 2];
+ 	      if (dump_file && (dump_flags & TDF_DETAILS))
+ 		{
+ 		  const char *n = (DECL_NAME (decl)
+ 				   ? IDENTIFIER_POINTER (DECL_NAME (decl))
+ 				   : "<unknown>");
+ 		  fprintf (dump_file, "Unpoisoning shadow stack for variable: "
+ 			   "%s (%" PRId64 " B)\n", n, size);
+ 		}
+ 
+ 		last_size += size & ~(ASAN_MIN_RED_ZONE_SIZE - HOST_WIDE_INT_1);
+ 	    }
+ 	}
+       last_size_aligned
+ 	= ((last_size + (ASAN_RED_ZONE_SIZE - HOST_WIDE_INT_1))
+ 	   & ~(ASAN_RED_ZONE_SIZE - HOST_WIDE_INT_1));
+     }
+   if (last_size_aligned)
+     {
+       shadow_mem = adjust_address (shadow_mem, VOIDmode,
+ 				   (last_offset - prev_offset)
+ 				   >> ASAN_SHADOW_SHIFT);
+       asan_clear_shadow (shadow_mem, last_size_aligned >> ASAN_SHADOW_SHIFT);
+     }
+ 
+   /* Clean-up set with instrumented stack variables.  */
+   delete asan_handled_variables;
+   asan_handled_variables = NULL;
+   delete asan_used_labels;
+   asan_used_labels = NULL;
+ 
+   do_pending_stack_adjust ();
+   if (lab)
+     emit_label (lab);
+ 
+   insns = get_insns ();
+   end_sequence ();
+   return insns;
+ }
+ 
+ /* Emit __asan_allocas_unpoison (top, bot) call.  The BASE parameter corresponds
+    to BOT argument, for TOP virtual_stack_dynamic_rtx is used.  NEW_SEQUENCE
+    indicates whether we're emitting new instructions sequence or not.  */
+ 
+ rtx_insn *
+ asan_emit_allocas_unpoison (rtx top, rtx bot, rtx_insn *before)
+ {
+   if (before)
+     push_to_sequence (before);
+   else
+     start_sequence ();
+   rtx ret = init_one_libfunc ("__asan_allocas_unpoison");
+   top = convert_memory_address (ptr_mode, top);
+   bot = convert_memory_address (ptr_mode, bot);
+   emit_library_call (ret, LCT_NORMAL, ptr_mode,
+ 		     top, ptr_mode, bot, ptr_mode);
+ 
+   do_pending_stack_adjust ();
+   rtx_insn *insns = get_insns ();
+   end_sequence ();
+   return insns;
+ }
+ 
+ /* Return true if DECL, a global var, might be overridden and needs
+    therefore a local alias.  */
+ 
+ static bool
+ asan_needs_local_alias (tree decl)
+ {
+   return DECL_WEAK (decl) || !targetm.binds_local_p (decl);
+ }
+ 
+ /* Return true if DECL, a global var, is an artificial ODR indicator symbol
+    therefore doesn't need protection.  */
+ 
+ static bool
+ is_odr_indicator (tree decl)
+ {
+   return (DECL_ARTIFICIAL (decl)
+ 	  && lookup_attribute ("asan odr indicator", DECL_ATTRIBUTES (decl)));
+ }
+ 
+ /* Return true if DECL is a VAR_DECL that should be protected
+    by Address Sanitizer, by appending a red zone with protected
+    shadow memory after it and aligning it to at least
+    ASAN_RED_ZONE_SIZE bytes.  */
+ 
+ bool
+ asan_protect_global (tree decl, bool ignore_decl_rtl_set_p)
+ {
+   if (!param_asan_globals)
+     return false;
+ 
+   rtx rtl, symbol;
+ 
+   if (TREE_CODE (decl) == STRING_CST)
+     {
+       /* Instrument all STRING_CSTs except those created
+ 	 by asan_pp_string here.  */
+       if (shadow_ptr_types[0] != NULL_TREE
+ 	  && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
+ 	  && TREE_TYPE (TREE_TYPE (decl)) == TREE_TYPE (shadow_ptr_types[0]))
+ 	return false;
+       return true;
+     }
+   if (!VAR_P (decl)
+       /* TLS vars aren't statically protectable.  */
+       || DECL_THREAD_LOCAL_P (decl)
+       /* Externs will be protected elsewhere.  */
+       || DECL_EXTERNAL (decl)
+       /* PR sanitizer/81697: For architectures that use section anchors first
+ 	 call to asan_protect_global may occur before DECL_RTL (decl) is set.
+ 	 We should ignore DECL_RTL_SET_P then, because otherwise the first call
+ 	 to asan_protect_global will return FALSE and the following calls on the
+ 	 same decl after setting DECL_RTL (decl) will return TRUE and we'll end
+ 	 up with inconsistency at runtime.  */
+       || (!DECL_RTL_SET_P (decl) && !ignore_decl_rtl_set_p)
+       /* Comdat vars pose an ABI problem, we can't know if
+ 	 the var that is selected by the linker will have
+ 	 padding or not.  */
+       || DECL_ONE_ONLY (decl)
+       /* Similarly for common vars.  People can use -fno-common.
+ 	 Note: Linux kernel is built with -fno-common, so we do instrument
+ 	 globals there even if it is C.  */
+       || (DECL_COMMON (decl) && TREE_PUBLIC (decl))
+       /* Don't protect if using user section, often vars placed
+ 	 into user section from multiple TUs are then assumed
+ 	 to be an array of such vars, putting padding in there
+ 	 breaks this assumption.  */
+       || (DECL_SECTION_NAME (decl) != NULL
+ 	  && !symtab_node::get (decl)->implicit_section
+ 	  && !section_sanitized_p (DECL_SECTION_NAME (decl)))
+       || DECL_SIZE (decl) == 0
+       || ASAN_RED_ZONE_SIZE * BITS_PER_UNIT > MAX_OFILE_ALIGNMENT
+       || TREE_CODE (DECL_SIZE_UNIT (decl)) != INTEGER_CST
+       || !valid_constant_size_p (DECL_SIZE_UNIT (decl))
+       || DECL_ALIGN_UNIT (decl) > 2 * ASAN_RED_ZONE_SIZE
+       || TREE_TYPE (decl) == ubsan_get_source_location_type ()
+       || is_odr_indicator (decl))
+     return false;
+ 
+   if (!ignore_decl_rtl_set_p || DECL_RTL_SET_P (decl))
+     {
+ 
+       rtl = DECL_RTL (decl);
+       if (!MEM_P (rtl) || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF)
+ 	return false;
+       symbol = XEXP (rtl, 0);
+ 
+       if (CONSTANT_POOL_ADDRESS_P (symbol)
+ 	  || TREE_CONSTANT_POOL_ADDRESS_P (symbol))
+ 	return false;
+     }
+ 
+   if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
+     return false;
+ 
+   if (!TARGET_SUPPORTS_ALIASES && asan_needs_local_alias (decl))
+     return false;
+ 
+   return true;
+ }
+ 
+ /* Construct a function tree for __asan_report_{load,store}{1,2,4,8,16,_n}.
+    IS_STORE is either 1 (for a store) or 0 (for a load).  */
+ 
+ static tree
+ report_error_func (bool is_store, bool recover_p, HOST_WIDE_INT size_in_bytes,
+ 		   int *nargs)
+ {
+   gcc_assert (!hwasan_sanitize_p ());
+ 
+   static enum built_in_function report[2][2][6]
+     = { { { BUILT_IN_ASAN_REPORT_LOAD1, BUILT_IN_ASAN_REPORT_LOAD2,
+ 	    BUILT_IN_ASAN_REPORT_LOAD4, BUILT_IN_ASAN_REPORT_LOAD8,
+ 	    BUILT_IN_ASAN_REPORT_LOAD16, BUILT_IN_ASAN_REPORT_LOAD_N },
+ 	  { BUILT_IN_ASAN_REPORT_STORE1, BUILT_IN_ASAN_REPORT_STORE2,
+ 	    BUILT_IN_ASAN_REPORT_STORE4, BUILT_IN_ASAN_REPORT_STORE8,
+ 	    BUILT_IN_ASAN_REPORT_STORE16, BUILT_IN_ASAN_REPORT_STORE_N } },
+ 	{ { BUILT_IN_ASAN_REPORT_LOAD1_NOABORT,
+ 	    BUILT_IN_ASAN_REPORT_LOAD2_NOABORT,
+ 	    BUILT_IN_ASAN_REPORT_LOAD4_NOABORT,
+ 	    BUILT_IN_ASAN_REPORT_LOAD8_NOABORT,
+ 	    BUILT_IN_ASAN_REPORT_LOAD16_NOABORT,
+ 	    BUILT_IN_ASAN_REPORT_LOAD_N_NOABORT },
+ 	  { BUILT_IN_ASAN_REPORT_STORE1_NOABORT,
+ 	    BUILT_IN_ASAN_REPORT_STORE2_NOABORT,
+ 	    BUILT_IN_ASAN_REPORT_STORE4_NOABORT,
+ 	    BUILT_IN_ASAN_REPORT_STORE8_NOABORT,
+ 	    BUILT_IN_ASAN_REPORT_STORE16_NOABORT,
+ 	    BUILT_IN_ASAN_REPORT_STORE_N_NOABORT } } };
+   if (size_in_bytes == -1)
+     {
+       *nargs = 2;
+       return builtin_decl_implicit (report[recover_p][is_store][5]);
+     }
+   *nargs = 1;
+   int size_log2 = exact_log2 (size_in_bytes);
+   return builtin_decl_implicit (report[recover_p][is_store][size_log2]);
+ }
+ 
+ /* Construct a function tree for __asan_{load,store}{1,2,4,8,16,_n}.
+    IS_STORE is either 1 (for a store) or 0 (for a load).  */
+ 
+ static tree
+ check_func (bool is_store, bool recover_p, HOST_WIDE_INT size_in_bytes,
+ 	    int *nargs)
+ {
+   static enum built_in_function check[2][2][6]
+     = { { { BUILT_IN_ASAN_LOAD1, BUILT_IN_ASAN_LOAD2,
+ 	    BUILT_IN_ASAN_LOAD4, BUILT_IN_ASAN_LOAD8,
+ 	    BUILT_IN_ASAN_LOAD16, BUILT_IN_ASAN_LOADN },
+ 	  { BUILT_IN_ASAN_STORE1, BUILT_IN_ASAN_STORE2,
+ 	    BUILT_IN_ASAN_STORE4, BUILT_IN_ASAN_STORE8,
+ 	    BUILT_IN_ASAN_STORE16, BUILT_IN_ASAN_STOREN } },
+ 	{ { BUILT_IN_ASAN_LOAD1_NOABORT,
+ 	    BUILT_IN_ASAN_LOAD2_NOABORT,
+ 	    BUILT_IN_ASAN_LOAD4_NOABORT,
+ 	    BUILT_IN_ASAN_LOAD8_NOABORT,
+ 	    BUILT_IN_ASAN_LOAD16_NOABORT,
+ 	    BUILT_IN_ASAN_LOADN_NOABORT },
+ 	  { BUILT_IN_ASAN_STORE1_NOABORT,
+ 	    BUILT_IN_ASAN_STORE2_NOABORT,
+ 	    BUILT_IN_ASAN_STORE4_NOABORT,
+ 	    BUILT_IN_ASAN_STORE8_NOABORT,
+ 	    BUILT_IN_ASAN_STORE16_NOABORT,
+ 	    BUILT_IN_ASAN_STOREN_NOABORT } } };
+   if (size_in_bytes == -1)
+     {
+       *nargs = 2;
+       return builtin_decl_implicit (check[recover_p][is_store][5]);
+     }
+   *nargs = 1;
+   int size_log2 = exact_log2 (size_in_bytes);
+   return builtin_decl_implicit (check[recover_p][is_store][size_log2]);
+ }
+ 
+ /* Split the current basic block and create a condition statement
+    insertion point right before or after the statement pointed to by
+    ITER.  Return an iterator to the point at which the caller might
+    safely insert the condition statement.
+ 
+    THEN_BLOCK must be set to the address of an uninitialized instance
+    of basic_block.  The function will then set *THEN_BLOCK to the
+    'then block' of the condition statement to be inserted by the
+    caller.
+ 
+    If CREATE_THEN_FALLTHRU_EDGE is false, no edge will be created from
+    *THEN_BLOCK to *FALLTHROUGH_BLOCK.
+ 
+    Similarly, the function will set *FALLTRHOUGH_BLOCK to the 'else
+    block' of the condition statement to be inserted by the caller.
+ 
+    Note that *FALLTHROUGH_BLOCK is a new block that contains the
+    statements starting from *ITER, and *THEN_BLOCK is a new empty
+    block.
+ 
+    *ITER is adjusted to point to always point to the first statement
+     of the basic block * FALLTHROUGH_BLOCK.  That statement is the
+     same as what ITER was pointing to prior to calling this function,
+     if BEFORE_P is true; otherwise, it is its following statement.  */
+ 
+ gimple_stmt_iterator
+ create_cond_insert_point (gimple_stmt_iterator *iter,
+ 			  bool before_p,
+ 			  bool then_more_likely_p,
+ 			  bool create_then_fallthru_edge,
+ 			  basic_block *then_block,
+ 			  basic_block *fallthrough_block)
+ {
+   gimple_stmt_iterator gsi = *iter;
+ 
+   if (!gsi_end_p (gsi) && before_p)
+     gsi_prev (&gsi);
+ 
+   basic_block cur_bb = gsi_bb (*iter);
+ 
+   edge e = split_block (cur_bb, gsi_stmt (gsi));
+ 
+   /* Get a hold on the 'condition block', the 'then block' and the
+      'else block'.  */
+   basic_block cond_bb = e->src;
+   basic_block fallthru_bb = e->dest;
+   basic_block then_bb = create_empty_bb (cond_bb);
+   if (current_loops)
+     {
+       add_bb_to_loop (then_bb, cond_bb->loop_father);
+       loops_state_set (LOOPS_NEED_FIXUP);
+     }
+ 
+   /* Set up the newly created 'then block'.  */
+   e = make_edge (cond_bb, then_bb, EDGE_TRUE_VALUE);
+   profile_probability fallthrough_probability
+     = then_more_likely_p
+     ? profile_probability::very_unlikely ()
+     : profile_probability::very_likely ();
+   e->probability = fallthrough_probability.invert ();
+   then_bb->count = e->count ();
+   if (create_then_fallthru_edge)
+     make_single_succ_edge (then_bb, fallthru_bb, EDGE_FALLTHRU);
+ 
+   /* Set up the fallthrough basic block.  */
+   e = find_edge (cond_bb, fallthru_bb);
+   e->flags = EDGE_FALSE_VALUE;
+   e->probability = fallthrough_probability;
+ 
+   /* Update dominance info for the newly created then_bb; note that
+      fallthru_bb's dominance info has already been updated by
+      split_bock.  */
+   if (dom_info_available_p (CDI_DOMINATORS))
+     set_immediate_dominator (CDI_DOMINATORS, then_bb, cond_bb);
+ 
+   *then_block = then_bb;
+   *fallthrough_block = fallthru_bb;
+   *iter = gsi_start_bb (fallthru_bb);
+ 
+   return gsi_last_bb (cond_bb);
+ }
+ 
+ /* Insert an if condition followed by a 'then block' right before the
+    statement pointed to by ITER.  The fallthrough block -- which is the
+    else block of the condition as well as the destination of the
+    outcoming edge of the 'then block' -- starts with the statement
+    pointed to by ITER.
+ 
+    COND is the condition of the if.
+ 
+    If THEN_MORE_LIKELY_P is true, the probability of the edge to the
+    'then block' is higher than the probability of the edge to the
+    fallthrough block.
+ 
+    Upon completion of the function, *THEN_BB is set to the newly
+    inserted 'then block' and similarly, *FALLTHROUGH_BB is set to the
+    fallthrough block.
+ 
+    *ITER is adjusted to still point to the same statement it was
+    pointing to initially.  */
+ 
+ static void
+ insert_if_then_before_iter (gcond *cond,
+ 			    gimple_stmt_iterator *iter,
+ 			    bool then_more_likely_p,
+ 			    basic_block *then_bb,
+ 			    basic_block *fallthrough_bb)
+ {
+   gimple_stmt_iterator cond_insert_point =
+     create_cond_insert_point (iter,
+ 			      /*before_p=*/true,
+ 			      then_more_likely_p,
+ 			      /*create_then_fallthru_edge=*/true,
+ 			      then_bb,
+ 			      fallthrough_bb);
+   gsi_insert_after (&cond_insert_point, cond, GSI_NEW_STMT);
+ }
+ 
+ /* Build (base_addr >> ASAN_SHADOW_SHIFT) + asan_shadow_offset ().
+    If RETURN_ADDRESS is set to true, return memory location instread
+    of a value in the shadow memory.  */
+ 
+ static tree
+ build_shadow_mem_access (gimple_stmt_iterator *gsi, location_t location,
+ 			 tree base_addr, tree shadow_ptr_type,
+ 			 bool return_address = false)
+ {
+   tree t, uintptr_type = TREE_TYPE (base_addr);
+   tree shadow_type = TREE_TYPE (shadow_ptr_type);
+   gimple *g;
+ 
+   t = build_int_cst (uintptr_type, ASAN_SHADOW_SHIFT);
+   g = gimple_build_assign (make_ssa_name (uintptr_type), RSHIFT_EXPR,
+ 			   base_addr, t);
+   gimple_set_location (g, location);
+   gsi_insert_after (gsi, g, GSI_NEW_STMT);
+ 
+   t = build_int_cst (uintptr_type, asan_shadow_offset ());
+   g = gimple_build_assign (make_ssa_name (uintptr_type), PLUS_EXPR,
+ 			   gimple_assign_lhs (g), t);
+   gimple_set_location (g, location);
+   gsi_insert_after (gsi, g, GSI_NEW_STMT);
+ 
+   g = gimple_build_assign (make_ssa_name (shadow_ptr_type), NOP_EXPR,
+ 			   gimple_assign_lhs (g));
+   gimple_set_location (g, location);
+   gsi_insert_after (gsi, g, GSI_NEW_STMT);
+ 
+   if (!return_address)
+     {
+       t = build2 (MEM_REF, shadow_type, gimple_assign_lhs (g),
+ 		  build_int_cst (shadow_ptr_type, 0));
+       g = gimple_build_assign (make_ssa_name (shadow_type), MEM_REF, t);
+       gimple_set_location (g, location);
+       gsi_insert_after (gsi, g, GSI_NEW_STMT);
+     }
+ 
+   return gimple_assign_lhs (g);
+ }
+ 
+ /* BASE can already be an SSA_NAME; in that case, do not create a
+    new SSA_NAME for it.  */
+ 
+ static tree
+ maybe_create_ssa_name (location_t loc, tree base, gimple_stmt_iterator *iter,
+ 		       bool before_p)
+ {
+   STRIP_USELESS_TYPE_CONVERSION (base);
+   if (TREE_CODE (base) == SSA_NAME)
+     return base;
+   gimple *g = gimple_build_assign (make_ssa_name (TREE_TYPE (base)), base);
+   gimple_set_location (g, loc);
+   if (before_p)
+     gsi_insert_before (iter, g, GSI_SAME_STMT);
+   else
+     gsi_insert_after (iter, g, GSI_NEW_STMT);
+   return gimple_assign_lhs (g);
+ }
+ 
+ /* LEN can already have necessary size and precision;
+    in that case, do not create a new variable.  */
+ 
+ tree
+ maybe_cast_to_ptrmode (location_t loc, tree len, gimple_stmt_iterator *iter,
+ 		       bool before_p)
+ {
+   if (ptrofftype_p (len))
+     return len;
+   gimple *g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
+ 				  NOP_EXPR, len);
+   gimple_set_location (g, loc);
+   if (before_p)
+     gsi_insert_before (iter, g, GSI_SAME_STMT);
+   else
+     gsi_insert_after (iter, g, GSI_NEW_STMT);
+   return gimple_assign_lhs (g);
+ }
+ 
+ /* Instrument the memory access instruction BASE.  Insert new
+    statements before or after ITER.
+ 
+    Note that the memory access represented by BASE can be either an
+    SSA_NAME, or a non-SSA expression.  LOCATION is the source code
+    location.  IS_STORE is TRUE for a store, FALSE for a load.
+    BEFORE_P is TRUE for inserting the instrumentation code before
+    ITER, FALSE for inserting it after ITER.  IS_SCALAR_ACCESS is TRUE
+    for a scalar memory access and FALSE for memory region access.
+    NON_ZERO_P is TRUE if memory region is guaranteed to have non-zero
+    length.  ALIGN tells alignment of accessed memory object.
+ 
+    START_INSTRUMENTED and END_INSTRUMENTED are TRUE if start/end of
+    memory region have already been instrumented.
+ 
+    If BEFORE_P is TRUE, *ITER is arranged to still point to the
+    statement it was pointing to prior to calling this function,
+    otherwise, it points to the statement logically following it.  */
+ 
+ static void
+ build_check_stmt (location_t loc, tree base, tree len,
+ 		  HOST_WIDE_INT size_in_bytes, gimple_stmt_iterator *iter,
+ 		  bool is_non_zero_len, bool before_p, bool is_store,
+ 		  bool is_scalar_access, unsigned int align = 0)
+ {
+   gimple_stmt_iterator gsi = *iter;
+   gimple *g;
+ 
+   gcc_assert (!(size_in_bytes > 0 && !is_non_zero_len));
+   gcc_assert (size_in_bytes == -1 || size_in_bytes >= 1);
+ 
+   gsi = *iter;
+ 
+   base = unshare_expr (base);
+   base = maybe_create_ssa_name (loc, base, &gsi, before_p);
+ 
+   if (len)
+     {
+       len = unshare_expr (len);
+       len = maybe_cast_to_ptrmode (loc, len, iter, before_p);
+     }
+   else
+     {
+       gcc_assert (size_in_bytes != -1);
+       len = build_int_cst (pointer_sized_int_node, size_in_bytes);
+     }
+ 
+   if (size_in_bytes > 1)
+     {
+       if ((size_in_bytes & (size_in_bytes - 1)) != 0
+ 	  || size_in_bytes > 16)
+ 	is_scalar_access = false;
+       else if (align && align < size_in_bytes * BITS_PER_UNIT)
+ 	{
+ 	  /* On non-strict alignment targets, if
+ 	     16-byte access is just 8-byte aligned,
+ 	     this will result in misaligned shadow
+ 	     memory 2 byte load, but otherwise can
+ 	     be handled using one read.  */
+ 	  if (size_in_bytes != 16
+ 	      || STRICT_ALIGNMENT
+ 	      || align < 8 * BITS_PER_UNIT)
+ 	    is_scalar_access = false;
+ 	}
+     }
+ 
+   HOST_WIDE_INT flags = 0;
+   if (is_store)
+     flags |= ASAN_CHECK_STORE;
+   if (is_non_zero_len)
+     flags |= ASAN_CHECK_NON_ZERO_LEN;
+   if (is_scalar_access)
+     flags |= ASAN_CHECK_SCALAR_ACCESS;
+ 
+   enum internal_fn fn = hwasan_sanitize_p ()
+     ? IFN_HWASAN_CHECK
+     : IFN_ASAN_CHECK;
+ 
+   g = gimple_build_call_internal (fn, 4,
+ 				  build_int_cst (integer_type_node, flags),
+ 				  base, len,
+ 				  build_int_cst (integer_type_node,
+ 						 align / BITS_PER_UNIT));
+   gimple_set_location (g, loc);
+   if (before_p)
+     gsi_insert_before (&gsi, g, GSI_SAME_STMT);
+   else
+     {
+       gsi_insert_after (&gsi, g, GSI_NEW_STMT);
+       gsi_next (&gsi);
+       *iter = gsi;
+     }
+ }
+ 
+ /* If T represents a memory access, add instrumentation code before ITER.
+    LOCATION is source code location.
+    IS_STORE is either TRUE (for a store) or FALSE (for a load).  */
+ 
+ static void
+ instrument_derefs (gimple_stmt_iterator *iter, tree t,
+ 		   location_t location, bool is_store)
+ {
+   if (is_store && !(asan_instrument_writes () || hwasan_instrument_writes ()))
+     return;
+   if (!is_store && !(asan_instrument_reads () || hwasan_instrument_reads ()))
+     return;
+ 
+   tree type, base;
+   HOST_WIDE_INT size_in_bytes;
+   if (location == UNKNOWN_LOCATION)
+     location = EXPR_LOCATION (t);
+ 
+   type = TREE_TYPE (t);
+   switch (TREE_CODE (t))
+     {
+     case ARRAY_REF:
+     case COMPONENT_REF:
+     case INDIRECT_REF:
+     case MEM_REF:
+     case VAR_DECL:
+     case BIT_FIELD_REF:
+       break;
+       /* FALLTHRU */
+     default:
+       return;
+     }
+ 
+   size_in_bytes = int_size_in_bytes (type);
+   if (size_in_bytes <= 0)
+     return;
+ 
+   poly_int64 bitsize, bitpos;
+   tree offset;
+   machine_mode mode;
+   int unsignedp, reversep, volatilep = 0;
+   tree inner = get_inner_reference (t, &bitsize, &bitpos, &offset, &mode,
+ 				    &unsignedp, &reversep, &volatilep);
+ 
+   if (TREE_CODE (t) == COMPONENT_REF
+       && DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (t, 1)) != NULL_TREE)
+     {
+       tree repr = DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (t, 1));
+       instrument_derefs (iter, build3 (COMPONENT_REF, TREE_TYPE (repr),
+ 				       TREE_OPERAND (t, 0), repr,
+ 				       TREE_OPERAND (t, 2)),
+ 			 location, is_store);
+       return;
+     }
+ 
+   if (!multiple_p (bitpos, BITS_PER_UNIT)
+       || maybe_ne (bitsize, size_in_bytes * BITS_PER_UNIT))
+     return;
+ 
+   if (VAR_P (inner) && DECL_HARD_REGISTER (inner))
+     return;
+ 
+   poly_int64 decl_size;
+   if ((VAR_P (inner) || TREE_CODE (inner) == RESULT_DECL)
+       && offset == NULL_TREE
+       && DECL_SIZE (inner)
+       && poly_int_tree_p (DECL_SIZE (inner), &decl_size)
+       && known_subrange_p (bitpos, bitsize, 0, decl_size))
+     {
+       if (VAR_P (inner) && DECL_THREAD_LOCAL_P (inner))
+ 	return;
+       /* If we're not sanitizing globals and we can tell statically that this
+ 	 access is inside a global variable, then there's no point adding
+ 	 instrumentation to check the access.  N.b. hwasan currently never
+ 	 sanitizes globals.  */
+       if ((hwasan_sanitize_p () || !param_asan_globals)
+ 	  && is_global_var (inner))
+         return;
+       if (!TREE_STATIC (inner))
+ 	{
+ 	  /* Automatic vars in the current function will be always
+ 	     accessible.  */
+ 	  if (decl_function_context (inner) == current_function_decl
+ 	      && (!asan_sanitize_use_after_scope ()
+ 		  || !TREE_ADDRESSABLE (inner)))
+ 	    return;
+ 	}
+       /* Always instrument external vars, they might be dynamically
+ 	 initialized.  */
+       else if (!DECL_EXTERNAL (inner))
+ 	{
+ 	  /* For static vars if they are known not to be dynamically
+ 	     initialized, they will be always accessible.  */
+ 	  varpool_node *vnode = varpool_node::get (inner);
+ 	  if (vnode && !vnode->dynamically_initialized)
+ 	    return;
+ 	}
+     }
+ 
+   if (DECL_P (inner)
+       && decl_function_context (inner) == current_function_decl
+       && !TREE_ADDRESSABLE (inner))
+     mark_addressable (inner);
+ 
+   base = build_fold_addr_expr (t);
+   if (!has_mem_ref_been_instrumented (base, size_in_bytes))
+     {
+       unsigned int align = get_object_alignment (t);
+       build_check_stmt (location, base, NULL_TREE, size_in_bytes, iter,
+ 			/*is_non_zero_len*/size_in_bytes > 0, /*before_p=*/true,
+ 			is_store, /*is_scalar_access*/true, align);
+       update_mem_ref_hash_table (base, size_in_bytes);
+       update_mem_ref_hash_table (t, size_in_bytes);
+     }
+ 
+ }
+ 
+ /*  Insert a memory reference into the hash table if access length
+     can be determined in compile time.  */
+ 
+ static void
+ maybe_update_mem_ref_hash_table (tree base, tree len)
+ {
+   if (!POINTER_TYPE_P (TREE_TYPE (base))
+       || !INTEGRAL_TYPE_P (TREE_TYPE (len)))
+     return;
+ 
+   HOST_WIDE_INT size_in_bytes = tree_fits_shwi_p (len) ? tree_to_shwi (len) : -1;
+ 
+   if (size_in_bytes != -1)
+     update_mem_ref_hash_table (base, size_in_bytes);
+ }
+ 
+ /* Instrument an access to a contiguous memory region that starts at
+    the address pointed to by BASE, over a length of LEN (expressed in
+    the sizeof (*BASE) bytes).  ITER points to the instruction before
+    which the instrumentation instructions must be inserted.  LOCATION
+    is the source location that the instrumentation instructions must
+    have.  If IS_STORE is true, then the memory access is a store;
+    otherwise, it's a load.  */
+ 
+ static void
+ instrument_mem_region_access (tree base, tree len,
+ 			      gimple_stmt_iterator *iter,
+ 			      location_t location, bool is_store)
+ {
+   if (!POINTER_TYPE_P (TREE_TYPE (base))
+       || !INTEGRAL_TYPE_P (TREE_TYPE (len))
+       || integer_zerop (len))
+     return;
+ 
+   HOST_WIDE_INT size_in_bytes = tree_fits_shwi_p (len) ? tree_to_shwi (len) : -1;
+ 
+   if ((size_in_bytes == -1)
+       || !has_mem_ref_been_instrumented (base, size_in_bytes))
+     {
+       build_check_stmt (location, base, len, size_in_bytes, iter,
+ 			/*is_non_zero_len*/size_in_bytes > 0, /*before_p*/true,
+ 			is_store, /*is_scalar_access*/false, /*align*/0);
+     }
+ 
+   maybe_update_mem_ref_hash_table (base, len);
+   *iter = gsi_for_stmt (gsi_stmt (*iter));
+ }
+ 
+ /* Instrument the call to a built-in memory access function that is
+    pointed to by the iterator ITER.
+ 
+    Upon completion, return TRUE iff *ITER has been advanced to the
+    statement following the one it was originally pointing to.  */
+ 
+ static bool
+ instrument_builtin_call (gimple_stmt_iterator *iter)
+ {
+   if (!(asan_memintrin () || hwasan_memintrin ()))
+     return false;
+ 
+   bool iter_advanced_p = false;
+   gcall *call = as_a <gcall *> (gsi_stmt (*iter));
+ 
+   gcc_checking_assert (gimple_call_builtin_p (call, BUILT_IN_NORMAL));
+ 
+   location_t loc = gimple_location (call);
+ 
+   asan_mem_ref src0, src1, dest;
+   asan_mem_ref_init (&src0, NULL, 1);
+   asan_mem_ref_init (&src1, NULL, 1);
+   asan_mem_ref_init (&dest, NULL, 1);
+ 
+   tree src0_len = NULL_TREE, src1_len = NULL_TREE, dest_len = NULL_TREE;
+   bool src0_is_store = false, src1_is_store = false, dest_is_store = false,
+     dest_is_deref = false, intercepted_p = true;
+ 
+   if (get_mem_refs_of_builtin_call (call,
+ 				    &src0, &src0_len, &src0_is_store,
+ 				    &src1, &src1_len, &src1_is_store,
+ 				    &dest, &dest_len, &dest_is_store,
+ 				    &dest_is_deref, &intercepted_p, iter))
+     {
+       if (dest_is_deref)
+ 	{
+ 	  instrument_derefs (iter, dest.start, loc, dest_is_store);
+ 	  gsi_next (iter);
+ 	  iter_advanced_p = true;
+ 	}
+       else if (!intercepted_p
+ 	       && (src0_len || src1_len || dest_len))
+ 	{
+ 	  if (src0.start != NULL_TREE)
+ 	    instrument_mem_region_access (src0.start, src0_len,
+ 					  iter, loc, /*is_store=*/false);
+ 	  if (src1.start != NULL_TREE)
+ 	    instrument_mem_region_access (src1.start, src1_len,
+ 					  iter, loc, /*is_store=*/false);
+ 	  if (dest.start != NULL_TREE)
+ 	    instrument_mem_region_access (dest.start, dest_len,
+ 					  iter, loc, /*is_store=*/true);
+ 
+ 	  *iter = gsi_for_stmt (call);
+ 	  gsi_next (iter);
+ 	  iter_advanced_p = true;
+ 	}
+       else
+ 	{
+ 	  if (src0.start != NULL_TREE)
+ 	    maybe_update_mem_ref_hash_table (src0.start, src0_len);
+ 	  if (src1.start != NULL_TREE)
+ 	    maybe_update_mem_ref_hash_table (src1.start, src1_len);
+ 	  if (dest.start != NULL_TREE)
+ 	    maybe_update_mem_ref_hash_table (dest.start, dest_len);
+ 	}
+     }
+   return iter_advanced_p;
+ }
+ 
+ /*  Instrument the assignment statement ITER if it is subject to
+     instrumentation.  Return TRUE iff instrumentation actually
+     happened.  In that case, the iterator ITER is advanced to the next
+     logical expression following the one initially pointed to by ITER,
+     and the relevant memory reference that which access has been
+     instrumented is added to the memory references hash table.  */
+ 
+ static bool
+ maybe_instrument_assignment (gimple_stmt_iterator *iter)
+ {
+   gimple *s = gsi_stmt (*iter);
+ 
+   gcc_assert (gimple_assign_single_p (s));
+ 
+   tree ref_expr = NULL_TREE;
+   bool is_store, is_instrumented = false;
+ 
+   if (gimple_store_p (s))
+     {
+       ref_expr = gimple_assign_lhs (s);
+       is_store = true;
+       instrument_derefs (iter, ref_expr,
+ 			 gimple_location (s),
+ 			 is_store);
+       is_instrumented = true;
+     }
+ 
+   if (gimple_assign_load_p (s))
+     {
+       ref_expr = gimple_assign_rhs1 (s);
+       is_store = false;
+       instrument_derefs (iter, ref_expr,
+ 			 gimple_location (s),
+ 			 is_store);
+       is_instrumented = true;
+     }
+ 
+   if (is_instrumented)
+     gsi_next (iter);
+ 
+   return is_instrumented;
+ }
+ 
+ /* Instrument the function call pointed to by the iterator ITER, if it
+    is subject to instrumentation.  At the moment, the only function
+    calls that are instrumented are some built-in functions that access
+    memory.  Look at instrument_builtin_call to learn more.
+ 
+    Upon completion return TRUE iff *ITER was advanced to the statement
+    following the one it was originally pointing to.  */
+ 
+ static bool
+ maybe_instrument_call (gimple_stmt_iterator *iter)
+ {
+   gimple *stmt = gsi_stmt (*iter);
+   bool is_builtin = gimple_call_builtin_p (stmt, BUILT_IN_NORMAL);
+ 
+   if (is_builtin && instrument_builtin_call (iter))
+     return true;
+ 
+   if (gimple_call_noreturn_p (stmt))
+     {
+       if (is_builtin)
+ 	{
+ 	  tree callee = gimple_call_fndecl (stmt);
+ 	  switch (DECL_FUNCTION_CODE (callee))
+ 	    {
+ 	    case BUILT_IN_UNREACHABLE:
+ 	    case BUILT_IN_TRAP:
+ 	      /* Don't instrument these.  */
+ 	      return false;
+ 	    default:
+ 	      break;
+ 	    }
+ 	}
+       /* If a function does not return, then we must handle clearing up the
+ 	 shadow stack accordingly.  For ASAN we can simply set the entire stack
+ 	 to "valid" for accesses by setting the shadow space to 0 and all
+ 	 accesses will pass checks.  That means that some bad accesses may be
+ 	 missed, but we will not report any false positives.
+ 
+ 	 This is not possible for HWASAN.  Since there is no "always valid" tag
+ 	 we can not set any space to "always valid".  If we were to clear the
+ 	 entire shadow stack then code resuming from `longjmp` or a caught
+ 	 exception would trigger false positives when correctly accessing
+ 	 variables on the stack.  Hence we need to handle things like
+ 	 `longjmp`, thread exit, and exceptions in a different way.  These
+ 	 problems must be handled externally to the compiler, e.g. in the
+ 	 language runtime.  */
+       if (! hwasan_sanitize_p ())
+ 	{
+ 	  tree decl = builtin_decl_implicit (BUILT_IN_ASAN_HANDLE_NO_RETURN);
+ 	  gimple *g = gimple_build_call (decl, 0);
+ 	  gimple_set_location (g, gimple_location (stmt));
+ 	  gsi_insert_before (iter, g, GSI_SAME_STMT);
+ 	}
+     }
+ 
+   bool instrumented = false;
+   if (gimple_store_p (stmt))
+     {
+       tree ref_expr = gimple_call_lhs (stmt);
+       instrument_derefs (iter, ref_expr,
+ 			 gimple_location (stmt),
+ 			 /*is_store=*/true);
+ 
+       instrumented = true;
+     }
+ 
+   /* Walk through gimple_call arguments and check them id needed.  */
+   unsigned args_num = gimple_call_num_args (stmt);
+   for (unsigned i = 0; i < args_num; ++i)
+     {
+       tree arg = gimple_call_arg (stmt, i);
+       /* If ARG is not a non-aggregate register variable, compiler in general
+ 	 creates temporary for it and pass it as argument to gimple call.
+ 	 But in some cases, e.g. when we pass by value a small structure that
+ 	 fits to register, compiler can avoid extra overhead by pulling out
+ 	 these temporaries.  In this case, we should check the argument.  */
+       if (!is_gimple_reg (arg) && !is_gimple_min_invariant (arg))
+ 	{
+ 	  instrument_derefs (iter, arg,
+ 			     gimple_location (stmt),
+ 			     /*is_store=*/false);
+ 	  instrumented = true;
+ 	}
+     }
+   if (instrumented)
+     gsi_next (iter);
+   return instrumented;
+ }
+ 
+ /* Walk each instruction of all basic block and instrument those that
+    represent memory references: loads, stores, or function calls.
+    In a given basic block, this function avoids instrumenting memory
+    references that have already been instrumented.  */
+ 
+ static void
+ transform_statements (void)
+ {
+   basic_block bb, last_bb = NULL;
+   gimple_stmt_iterator i;
+   int saved_last_basic_block = last_basic_block_for_fn (cfun);
+ 
+   FOR_EACH_BB_FN (bb, cfun)
+     {
+       basic_block prev_bb = bb;
+ 
+       if (bb->index >= saved_last_basic_block) continue;
+ 
+       /* Flush the mem ref hash table, if current bb doesn't have
+ 	 exactly one predecessor, or if that predecessor (skipping
+ 	 over asan created basic blocks) isn't the last processed
+ 	 basic block.  Thus we effectively flush on extended basic
+ 	 block boundaries.  */
+       while (single_pred_p (prev_bb))
+ 	{
+ 	  prev_bb = single_pred (prev_bb);
+ 	  if (prev_bb->index < saved_last_basic_block)
+ 	    break;
+ 	}
+       if (prev_bb != last_bb)
+ 	empty_mem_ref_hash_table ();
+       last_bb = bb;
+ 
+       for (i = gsi_start_bb (bb); !gsi_end_p (i);)
+ 	{
+ 	  gimple *s = gsi_stmt (i);
+ 
+ 	  if (has_stmt_been_instrumented_p (s))
+ 	    gsi_next (&i);
+ 	  else if (gimple_assign_single_p (s)
+ 		   && !gimple_clobber_p (s)
+ 		   && maybe_instrument_assignment (&i))
+ 	    /*  Nothing to do as maybe_instrument_assignment advanced
+ 		the iterator I.  */;
+ 	  else if (is_gimple_call (s) && maybe_instrument_call (&i))
+ 	    /*  Nothing to do as maybe_instrument_call
+ 		advanced the iterator I.  */;
+ 	  else
+ 	    {
+ 	      /* No instrumentation happened.
+ 
+ 		 If the current instruction is a function call that
+ 		 might free something, let's forget about the memory
+ 		 references that got instrumented.  Otherwise we might
+ 		 miss some instrumentation opportunities.  Do the same
+ 		 for a ASAN_MARK poisoning internal function.  */
+ 	      if (is_gimple_call (s)
+ 		  && (!nonfreeing_call_p (s)
+ 		      || asan_mark_p (s, ASAN_MARK_POISON)))
+ 		empty_mem_ref_hash_table ();
+ 
+ 	      gsi_next (&i);
+ 	    }
+ 	}
+     }
+   free_mem_ref_resources ();
+ }
+ 
+ /* Build
+    __asan_before_dynamic_init (module_name)
+    or
+    __asan_after_dynamic_init ()
+    call.  */
+ 
+ tree
+ asan_dynamic_init_call (bool after_p)
+ {
+   if (shadow_ptr_types[0] == NULL_TREE)
+     asan_init_shadow_ptr_types ();
+ 
+   tree fn = builtin_decl_implicit (after_p
+ 				   ? BUILT_IN_ASAN_AFTER_DYNAMIC_INIT
+ 				   : BUILT_IN_ASAN_BEFORE_DYNAMIC_INIT);
+   tree module_name_cst = NULL_TREE;
+   if (!after_p)
+     {
+       pretty_printer module_name_pp;
+       pp_string (&module_name_pp, main_input_filename);
+ 
+       module_name_cst = asan_pp_string (&module_name_pp);
+       module_name_cst = fold_convert (const_ptr_type_node,
+ 				      module_name_cst);
+     }
+ 
+   return build_call_expr (fn, after_p ? 0 : 1, module_name_cst);
+ }
+ 
+ /* Build
+    struct __asan_global
+    {
+      const void *__beg;
+      uptr __size;
+      uptr __size_with_redzone;
+      const void *__name;
+      const void *__module_name;
+      uptr __has_dynamic_init;
+      __asan_global_source_location *__location;
+      char *__odr_indicator;
+    } type.  */
+ 
+ static tree
+ asan_global_struct (void)
+ {
+   static const char *field_names[]
+     = { "__beg", "__size", "__size_with_redzone",
+ 	"__name", "__module_name", "__has_dynamic_init", "__location",
+ 	"__odr_indicator" };
+   tree fields[ARRAY_SIZE (field_names)], ret;
+   unsigned i;
+ 
+   ret = make_node (RECORD_TYPE);
+   for (i = 0; i < ARRAY_SIZE (field_names); i++)
+     {
+       fields[i]
+ 	= build_decl (UNKNOWN_LOCATION, FIELD_DECL,
+ 		      get_identifier (field_names[i]),
+ 		      (i == 0 || i == 3) ? const_ptr_type_node
+ 		      : pointer_sized_int_node);
+       DECL_CONTEXT (fields[i]) = ret;
+       if (i)
+ 	DECL_CHAIN (fields[i - 1]) = fields[i];
+     }
+   tree type_decl = build_decl (input_location, TYPE_DECL,
+ 			       get_identifier ("__asan_global"), ret);
+   DECL_IGNORED_P (type_decl) = 1;
+   DECL_ARTIFICIAL (type_decl) = 1;
+   TYPE_FIELDS (ret) = fields[0];
+   TYPE_NAME (ret) = type_decl;
+   TYPE_STUB_DECL (ret) = type_decl;
+   TYPE_ARTIFICIAL (ret) = 1;
+   layout_type (ret);
+   return ret;
+ }
+ 
+ /* Create and return odr indicator symbol for DECL.
+    TYPE is __asan_global struct type as returned by asan_global_struct.  */
+ 
+ static tree
+ create_odr_indicator (tree decl, tree type)
+ {
+   char *name;
+   tree uptr = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type)));
+   tree decl_name
+     = (HAS_DECL_ASSEMBLER_NAME_P (decl) ? DECL_ASSEMBLER_NAME (decl)
+ 					: DECL_NAME (decl));
+   /* DECL_NAME theoretically might be NULL.  Bail out with 0 in this case.  */
+   if (decl_name == NULL_TREE)
+     return build_int_cst (uptr, 0);
+   const char *dname = IDENTIFIER_POINTER (decl_name);
+   if (HAS_DECL_ASSEMBLER_NAME_P (decl))
+     dname = targetm.strip_name_encoding (dname);
+   size_t len = strlen (dname) + sizeof ("__odr_asan_");
+   name = XALLOCAVEC (char, len);
+   snprintf (name, len, "__odr_asan_%s", dname);
+ #ifndef NO_DOT_IN_LABEL
+   name[sizeof ("__odr_asan") - 1] = '.';
+ #elif !defined(NO_DOLLAR_IN_LABEL)
+   name[sizeof ("__odr_asan") - 1] = '$';
+ #endif
+   tree var = build_decl (UNKNOWN_LOCATION, VAR_DECL, get_identifier (name),
+ 			 char_type_node);
+   TREE_ADDRESSABLE (var) = 1;
+   TREE_READONLY (var) = 0;
+   TREE_THIS_VOLATILE (var) = 1;
+   DECL_ARTIFICIAL (var) = 1;
+   DECL_IGNORED_P (var) = 1;
+   TREE_STATIC (var) = 1;
+   TREE_PUBLIC (var) = 1;
+   DECL_VISIBILITY (var) = DECL_VISIBILITY (decl);
+   DECL_VISIBILITY_SPECIFIED (var) = DECL_VISIBILITY_SPECIFIED (decl);
+ 
+   TREE_USED (var) = 1;
+   tree ctor = build_constructor_va (TREE_TYPE (var), 1, NULL_TREE,
+ 				    build_int_cst (unsigned_type_node, 0));
+   TREE_CONSTANT (ctor) = 1;
+   TREE_STATIC (ctor) = 1;
+   DECL_INITIAL (var) = ctor;
+   DECL_ATTRIBUTES (var) = tree_cons (get_identifier ("asan odr indicator"),
+ 				     NULL, DECL_ATTRIBUTES (var));
+   make_decl_rtl (var);
+   varpool_node::finalize_decl (var);
+   return fold_convert (uptr, build_fold_addr_expr (var));
+ }
+ 
+ /* Return true if DECL, a global var, might be overridden and needs
+    an additional odr indicator symbol.  */
+ 
+ static bool
+ asan_needs_odr_indicator_p (tree decl)
+ {
+   /* Don't emit ODR indicators for kernel because:
+      a) Kernel is written in C thus doesn't need ODR indicators.
+      b) Some kernel code may have assumptions about symbols containing specific
+         patterns in their names.  Since ODR indicators contain original names
+         of symbols they are emitted for, these assumptions would be broken for
+         ODR indicator symbols.  */
+   return (!(flag_sanitize & SANITIZE_KERNEL_ADDRESS)
+ 	  && !DECL_ARTIFICIAL (decl)
+ 	  && !DECL_WEAK (decl)
+ 	  && TREE_PUBLIC (decl));
+ }
+ 
+ /* Append description of a single global DECL into vector V.
+    TYPE is __asan_global struct type as returned by asan_global_struct.  */
+ 
+ static void
+ asan_add_global (tree decl, tree type, vec<constructor_elt, va_gc> *v)
+ {
+   tree init, uptr = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type)));
+   unsigned HOST_WIDE_INT size;
+   tree str_cst, module_name_cst, refdecl = decl;
+   vec<constructor_elt, va_gc> *vinner = NULL;
+ 
+   pretty_printer asan_pp, module_name_pp;
+ 
+   if (DECL_NAME (decl))
+     pp_tree_identifier (&asan_pp, DECL_NAME (decl));
+   else
+     pp_string (&asan_pp, "<unknown>");
+   str_cst = asan_pp_string (&asan_pp);
+ 
+   pp_string (&module_name_pp, main_input_filename);
+   module_name_cst = asan_pp_string (&module_name_pp);
+ 
+   if (asan_needs_local_alias (decl))
+     {
+       char buf[20];
+       ASM_GENERATE_INTERNAL_LABEL (buf, "LASAN", vec_safe_length (v) + 1);
+       refdecl = build_decl (DECL_SOURCE_LOCATION (decl),
+ 			    VAR_DECL, get_identifier (buf), TREE_TYPE (decl));
+       TREE_ADDRESSABLE (refdecl) = TREE_ADDRESSABLE (decl);
+       TREE_READONLY (refdecl) = TREE_READONLY (decl);
+       TREE_THIS_VOLATILE (refdecl) = TREE_THIS_VOLATILE (decl);
+       DECL_NOT_GIMPLE_REG_P (refdecl) = DECL_NOT_GIMPLE_REG_P (decl);
+       DECL_ARTIFICIAL (refdecl) = DECL_ARTIFICIAL (decl);
+       DECL_IGNORED_P (refdecl) = DECL_IGNORED_P (decl);
+       TREE_STATIC (refdecl) = 1;
+       TREE_PUBLIC (refdecl) = 0;
+       TREE_USED (refdecl) = 1;
+       assemble_alias (refdecl, DECL_ASSEMBLER_NAME (decl));
+     }
+ 
+   tree odr_indicator_ptr
+     = (asan_needs_odr_indicator_p (decl) ? create_odr_indicator (decl, type)
+ 					 : build_int_cst (uptr, 0));
+   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE,
+ 			  fold_convert (const_ptr_type_node,
+ 					build_fold_addr_expr (refdecl)));
+   size = tree_to_uhwi (DECL_SIZE_UNIT (decl));
+   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE, build_int_cst (uptr, size));
+   size += asan_red_zone_size (size);
+   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE, build_int_cst (uptr, size));
+   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE,
+ 			  fold_convert (const_ptr_type_node, str_cst));
+   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE,
+ 			  fold_convert (const_ptr_type_node, module_name_cst));
+   varpool_node *vnode = varpool_node::get (decl);
+   int has_dynamic_init = 0;
+   /* FIXME: Enable initialization order fiasco detection in LTO mode once
+      proper fix for PR 79061 will be applied.  */
+   if (!in_lto_p)
+     has_dynamic_init = vnode ? vnode->dynamically_initialized : 0;
+   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE,
+ 			  build_int_cst (uptr, has_dynamic_init));
+   tree locptr = NULL_TREE;
+   location_t loc = DECL_SOURCE_LOCATION (decl);
+   expanded_location xloc = expand_location (loc);
+   if (xloc.file != NULL)
+     {
+       static int lasanloccnt = 0;
+       char buf[25];
+       ASM_GENERATE_INTERNAL_LABEL (buf, "LASANLOC", ++lasanloccnt);
+       tree var = build_decl (UNKNOWN_LOCATION, VAR_DECL, get_identifier (buf),
+ 			     ubsan_get_source_location_type ());
+       TREE_STATIC (var) = 1;
+       TREE_PUBLIC (var) = 0;
+       DECL_ARTIFICIAL (var) = 1;
+       DECL_IGNORED_P (var) = 1;
+       pretty_printer filename_pp;
+       pp_string (&filename_pp, xloc.file);
+       tree str = asan_pp_string (&filename_pp);
+       tree ctor = build_constructor_va (TREE_TYPE (var), 3,
+ 					NULL_TREE, str, NULL_TREE,
+ 					build_int_cst (unsigned_type_node,
+ 						       xloc.line), NULL_TREE,
+ 					build_int_cst (unsigned_type_node,
+ 						       xloc.column));
+       TREE_CONSTANT (ctor) = 1;
+       TREE_STATIC (ctor) = 1;
+       DECL_INITIAL (var) = ctor;
+       varpool_node::finalize_decl (var);
+       locptr = fold_convert (uptr, build_fold_addr_expr (var));
+     }
+   else
+     locptr = build_int_cst (uptr, 0);
+   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE, locptr);
+   CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE, odr_indicator_ptr);
+   init = build_constructor (type, vinner);
+   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
+ }
+ 
+ /* Initialize sanitizer.def builtins if the FE hasn't initialized them.  */
+ void
+ initialize_sanitizer_builtins (void)
+ {
+   tree decl;
+ 
+   if (builtin_decl_implicit_p (BUILT_IN_ASAN_INIT))
+     return;
+ 
+   tree BT_FN_VOID = build_function_type_list (void_type_node, NULL_TREE);
+   tree BT_FN_VOID_PTR
+     = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
+   tree BT_FN_VOID_CONST_PTR
+     = build_function_type_list (void_type_node, const_ptr_type_node, NULL_TREE);
+   tree BT_FN_VOID_PTR_PTR
+     = build_function_type_list (void_type_node, ptr_type_node,
+ 				ptr_type_node, NULL_TREE);
+   tree BT_FN_VOID_PTR_PTR_PTR
+     = build_function_type_list (void_type_node, ptr_type_node,
+ 				ptr_type_node, ptr_type_node, NULL_TREE);
+   tree BT_FN_VOID_PTR_PTRMODE
+     = build_function_type_list (void_type_node, ptr_type_node,
+ 				pointer_sized_int_node, NULL_TREE);
+   tree BT_FN_VOID_INT
+     = build_function_type_list (void_type_node, integer_type_node, NULL_TREE);
+   tree BT_FN_SIZE_CONST_PTR_INT
+     = build_function_type_list (size_type_node, const_ptr_type_node,
+ 				integer_type_node, NULL_TREE);
+ 
+   tree BT_FN_VOID_UINT8_UINT8
+     = build_function_type_list (void_type_node, unsigned_char_type_node,
+ 				unsigned_char_type_node, NULL_TREE);
+   tree BT_FN_VOID_UINT16_UINT16
+     = build_function_type_list (void_type_node, uint16_type_node,
+ 				uint16_type_node, NULL_TREE);
+   tree BT_FN_VOID_UINT32_UINT32
+     = build_function_type_list (void_type_node, uint32_type_node,
+ 				uint32_type_node, NULL_TREE);
+   tree BT_FN_VOID_UINT64_UINT64
+     = build_function_type_list (void_type_node, uint64_type_node,
+ 				uint64_type_node, NULL_TREE);
+   tree BT_FN_VOID_FLOAT_FLOAT
+     = build_function_type_list (void_type_node, float_type_node,
+ 				float_type_node, NULL_TREE);
+   tree BT_FN_VOID_DOUBLE_DOUBLE
+     = build_function_type_list (void_type_node, double_type_node,
+ 				double_type_node, NULL_TREE);
+   tree BT_FN_VOID_UINT64_PTR
+     = build_function_type_list (void_type_node, uint64_type_node,
+ 				ptr_type_node, NULL_TREE);
+ 
+   tree BT_FN_PTR_CONST_PTR_UINT8
+     = build_function_type_list (ptr_type_node, const_ptr_type_node,
+ 				unsigned_char_type_node, NULL_TREE);
+   tree BT_FN_VOID_PTR_UINT8_PTRMODE
+     = build_function_type_list (void_type_node, ptr_type_node,
+ 				unsigned_char_type_node,
+ 				pointer_sized_int_node, NULL_TREE);
+ 
+   tree BT_FN_BOOL_VPTR_PTR_IX_INT_INT[5];
+   tree BT_FN_IX_CONST_VPTR_INT[5];
+   tree BT_FN_IX_VPTR_IX_INT[5];
+   tree BT_FN_VOID_VPTR_IX_INT[5];
+   tree vptr
+     = build_pointer_type (build_qualified_type (void_type_node,
+ 						TYPE_QUAL_VOLATILE));
+   tree cvptr
+     = build_pointer_type (build_qualified_type (void_type_node,
+ 						TYPE_QUAL_VOLATILE
+ 						|TYPE_QUAL_CONST));
+   tree boolt
+     = lang_hooks.types.type_for_size (BOOL_TYPE_SIZE, 1);
+   int i;
+   for (i = 0; i < 5; i++)
+     {
+       tree ix = build_nonstandard_integer_type (BITS_PER_UNIT * (1 << i), 1);
+       BT_FN_BOOL_VPTR_PTR_IX_INT_INT[i]
+ 	= build_function_type_list (boolt, vptr, ptr_type_node, ix,
+ 				    integer_type_node, integer_type_node,
+ 				    NULL_TREE);
+       BT_FN_IX_CONST_VPTR_INT[i]
+ 	= build_function_type_list (ix, cvptr, integer_type_node, NULL_TREE);
+       BT_FN_IX_VPTR_IX_INT[i]
+ 	= build_function_type_list (ix, vptr, ix, integer_type_node,
+ 				    NULL_TREE);
+       BT_FN_VOID_VPTR_IX_INT[i]
+ 	= build_function_type_list (void_type_node, vptr, ix,
+ 				    integer_type_node, NULL_TREE);
+     }
+ #define BT_FN_BOOL_VPTR_PTR_I1_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[0]
+ #define BT_FN_I1_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[0]
+ #define BT_FN_I1_VPTR_I1_INT BT_FN_IX_VPTR_IX_INT[0]
+ #define BT_FN_VOID_VPTR_I1_INT BT_FN_VOID_VPTR_IX_INT[0]
+ #define BT_FN_BOOL_VPTR_PTR_I2_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[1]
+ #define BT_FN_I2_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[1]
+ #define BT_FN_I2_VPTR_I2_INT BT_FN_IX_VPTR_IX_INT[1]
+ #define BT_FN_VOID_VPTR_I2_INT BT_FN_VOID_VPTR_IX_INT[1]
+ #define BT_FN_BOOL_VPTR_PTR_I4_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[2]
+ #define BT_FN_I4_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[2]
+ #define BT_FN_I4_VPTR_I4_INT BT_FN_IX_VPTR_IX_INT[2]
+ #define BT_FN_VOID_VPTR_I4_INT BT_FN_VOID_VPTR_IX_INT[2]
+ #define BT_FN_BOOL_VPTR_PTR_I8_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[3]
+ #define BT_FN_I8_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[3]
+ #define BT_FN_I8_VPTR_I8_INT BT_FN_IX_VPTR_IX_INT[3]
+ #define BT_FN_VOID_VPTR_I8_INT BT_FN_VOID_VPTR_IX_INT[3]
+ #define BT_FN_BOOL_VPTR_PTR_I16_INT_INT BT_FN_BOOL_VPTR_PTR_IX_INT_INT[4]
+ #define BT_FN_I16_CONST_VPTR_INT BT_FN_IX_CONST_VPTR_INT[4]
+ #define BT_FN_I16_VPTR_I16_INT BT_FN_IX_VPTR_IX_INT[4]
+ #define BT_FN_VOID_VPTR_I16_INT BT_FN_VOID_VPTR_IX_INT[4]
+ #undef ATTR_NOTHROW_LIST
+ #define ATTR_NOTHROW_LIST ECF_NOTHROW
+ #undef ATTR_NOTHROW_LEAF_LIST
+ #define ATTR_NOTHROW_LEAF_LIST ECF_NOTHROW | ECF_LEAF
+ #undef ATTR_TMPURE_NOTHROW_LEAF_LIST
+ #define ATTR_TMPURE_NOTHROW_LEAF_LIST ECF_TM_PURE | ATTR_NOTHROW_LEAF_LIST
+ #undef ATTR_NORETURN_NOTHROW_LEAF_LIST
+ #define ATTR_NORETURN_NOTHROW_LEAF_LIST ECF_NORETURN | ATTR_NOTHROW_LEAF_LIST
+ #undef ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST
+ #define ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST \
+   ECF_CONST | ATTR_NORETURN_NOTHROW_LEAF_LIST
+ #undef ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST
+ #define ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST \
+   ECF_TM_PURE | ATTR_NORETURN_NOTHROW_LEAF_LIST
+ #undef ATTR_COLD_NOTHROW_LEAF_LIST
+ #define ATTR_COLD_NOTHROW_LEAF_LIST \
+   /* ECF_COLD missing */ ATTR_NOTHROW_LEAF_LIST
+ #undef ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST
+ #define ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST \
+   /* ECF_COLD missing */ ATTR_NORETURN_NOTHROW_LEAF_LIST
+ #undef ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST
+ #define ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST \
+   /* ECF_COLD missing */ ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST
+ #undef ATTR_PURE_NOTHROW_LEAF_LIST
+ #define ATTR_PURE_NOTHROW_LEAF_LIST ECF_PURE | ATTR_NOTHROW_LEAF_LIST
+ #undef DEF_BUILTIN_STUB
+ #define DEF_BUILTIN_STUB(ENUM, NAME)
+ #undef DEF_SANITIZER_BUILTIN_1
+ #define DEF_SANITIZER_BUILTIN_1(ENUM, NAME, TYPE, ATTRS)		\
+   do {									\
+     decl = add_builtin_function ("__builtin_" NAME, TYPE, ENUM,		\
+ 				 BUILT_IN_NORMAL, NAME, NULL_TREE);	\
+     set_call_expr_flags (decl, ATTRS);					\
+     set_builtin_decl (ENUM, decl, true);				\
+   } while (0)
+ #undef DEF_SANITIZER_BUILTIN
+ #define DEF_SANITIZER_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+   DEF_SANITIZER_BUILTIN_1 (ENUM, NAME, TYPE, ATTRS);
+ 
+ #include "sanitizer.def"
+ 
+   /* -fsanitize=object-size uses __builtin_object_size, but that might
+      not be available for e.g. Fortran at this point.  We use
+      DEF_SANITIZER_BUILTIN here only as a convenience macro.  */
+   if ((flag_sanitize & SANITIZE_OBJECT_SIZE)
+       && !builtin_decl_implicit_p (BUILT_IN_OBJECT_SIZE))
+     DEF_SANITIZER_BUILTIN_1 (BUILT_IN_OBJECT_SIZE, "object_size",
+ 			     BT_FN_SIZE_CONST_PTR_INT,
+ 			     ATTR_PURE_NOTHROW_LEAF_LIST);
+ 
+ #undef DEF_SANITIZER_BUILTIN_1
+ #undef DEF_SANITIZER_BUILTIN
+ #undef DEF_BUILTIN_STUB
+ }
+ 
+ /* Called via htab_traverse.  Count number of emitted
+    STRING_CSTs in the constant hash table.  */
+ 
+ int
+ count_string_csts (constant_descriptor_tree **slot,
+ 		   unsigned HOST_WIDE_INT *data)
+ {
+   struct constant_descriptor_tree *desc = *slot;
+   if (TREE_CODE (desc->value) == STRING_CST
+       && TREE_ASM_WRITTEN (desc->value)
+       && asan_protect_global (desc->value))
+     ++*data;
+   return 1;
+ }
+ 
+ /* Helper structure to pass two parameters to
+    add_string_csts.  */
+ 
+ struct asan_add_string_csts_data
+ {
+   tree type;
+   vec<constructor_elt, va_gc> *v;
+ };
+ 
+ /* Called via hash_table::traverse.  Call asan_add_global
+    on emitted STRING_CSTs from the constant hash table.  */
+ 
+ int
+ add_string_csts (constant_descriptor_tree **slot,
+ 		 asan_add_string_csts_data *aascd)
+ {
+   struct constant_descriptor_tree *desc = *slot;
+   if (TREE_CODE (desc->value) == STRING_CST
+       && TREE_ASM_WRITTEN (desc->value)
+       && asan_protect_global (desc->value))
+     {
+       asan_add_global (SYMBOL_REF_DECL (XEXP (desc->rtl, 0)),
+ 		       aascd->type, aascd->v);
+     }
+   return 1;
+ }
+ 
+ /* Needs to be GTY(()), because cgraph_build_static_cdtor may
+    invoke ggc_collect.  */
+ static GTY(()) tree asan_ctor_statements;
+ 
+ /* Module-level instrumentation.
+    - Insert __asan_init_vN() into the list of CTORs.
+    - TODO: insert redzones around globals.
+  */
+ 
+ void
+ asan_finish_file (void)
+ {
+   varpool_node *vnode;
+   unsigned HOST_WIDE_INT gcount = 0;
+ 
+   if (shadow_ptr_types[0] == NULL_TREE)
+     asan_init_shadow_ptr_types ();
+   /* Avoid instrumenting code in the asan ctors/dtors.
+      We don't need to insert padding after the description strings,
+      nor after .LASAN* array.  */
+   flag_sanitize &= ~SANITIZE_ADDRESS;
+ 
+   /* For user-space we want asan constructors to run first.
+      Linux kernel does not support priorities other than default, and the only
+      other user of constructors is coverage. So we run with the default
+      priority.  */
+   int priority = flag_sanitize & SANITIZE_USER_ADDRESS
+                  ? MAX_RESERVED_INIT_PRIORITY - 1 : DEFAULT_INIT_PRIORITY;
+ 
+   if (flag_sanitize & SANITIZE_USER_ADDRESS)
+     {
+       tree fn = builtin_decl_implicit (BUILT_IN_ASAN_INIT);
+       append_to_statement_list (build_call_expr (fn, 0), &asan_ctor_statements);
+       fn = builtin_decl_implicit (BUILT_IN_ASAN_VERSION_MISMATCH_CHECK);
+       append_to_statement_list (build_call_expr (fn, 0), &asan_ctor_statements);
+     }
+   FOR_EACH_DEFINED_VARIABLE (vnode)
+     if (TREE_ASM_WRITTEN (vnode->decl)
+ 	&& asan_protect_global (vnode->decl))
+       ++gcount;
+   hash_table<tree_descriptor_hasher> *const_desc_htab = constant_pool_htab ();
+   const_desc_htab->traverse<unsigned HOST_WIDE_INT *, count_string_csts>
+     (&gcount);
+   if (gcount)
+     {
+       tree type = asan_global_struct (), var, ctor;
+       tree dtor_statements = NULL_TREE;
+       vec<constructor_elt, va_gc> *v;
+       char buf[20];
+ 
+       type = build_array_type_nelts (type, gcount);
+       ASM_GENERATE_INTERNAL_LABEL (buf, "LASAN", 0);
+       var = build_decl (UNKNOWN_LOCATION, VAR_DECL, get_identifier (buf),
+ 			type);
+       TREE_STATIC (var) = 1;
+       TREE_PUBLIC (var) = 0;
+       DECL_ARTIFICIAL (var) = 1;
+       DECL_IGNORED_P (var) = 1;
+       vec_alloc (v, gcount);
+       FOR_EACH_DEFINED_VARIABLE (vnode)
+ 	if (TREE_ASM_WRITTEN (vnode->decl)
+ 	    && asan_protect_global (vnode->decl))
+ 	  asan_add_global (vnode->decl, TREE_TYPE (type), v);
+       struct asan_add_string_csts_data aascd;
+       aascd.type = TREE_TYPE (type);
+       aascd.v = v;
+       const_desc_htab->traverse<asan_add_string_csts_data *, add_string_csts>
+        	(&aascd);
+       ctor = build_constructor (type, v);
+       TREE_CONSTANT (ctor) = 1;
+       TREE_STATIC (ctor) = 1;
+       DECL_INITIAL (var) = ctor;
+       SET_DECL_ALIGN (var, MAX (DECL_ALIGN (var),
+ 				ASAN_SHADOW_GRANULARITY * BITS_PER_UNIT));
+ 
+       varpool_node::finalize_decl (var);
+ 
+       tree fn = builtin_decl_implicit (BUILT_IN_ASAN_REGISTER_GLOBALS);
+       tree gcount_tree = build_int_cst (pointer_sized_int_node, gcount);
+       append_to_statement_list (build_call_expr (fn, 2,
+ 						 build_fold_addr_expr (var),
+ 						 gcount_tree),
+ 				&asan_ctor_statements);
+ 
+       fn = builtin_decl_implicit (BUILT_IN_ASAN_UNREGISTER_GLOBALS);
+       append_to_statement_list (build_call_expr (fn, 2,
+ 						 build_fold_addr_expr (var),
+ 						 gcount_tree),
+ 				&dtor_statements);
+       cgraph_build_static_cdtor ('D', dtor_statements, priority);
+     }
+   if (asan_ctor_statements)
+     cgraph_build_static_cdtor ('I', asan_ctor_statements, priority);
+   flag_sanitize |= SANITIZE_ADDRESS;
+ }
+ 
+ /* Poison or unpoison (depending on IS_CLOBBER variable) shadow memory based
+    on SHADOW address.  Newly added statements will be added to ITER with
+    given location LOC.  We mark SIZE bytes in shadow memory, where
+    LAST_CHUNK_SIZE is greater than zero in situation where we are at the
+    end of a variable.  */
+ 
+ static void
+ asan_store_shadow_bytes (gimple_stmt_iterator *iter, location_t loc,
+ 			 tree shadow,
+ 			 unsigned HOST_WIDE_INT base_addr_offset,
+ 			 bool is_clobber, unsigned size,
+ 			 unsigned last_chunk_size)
+ {
+   tree shadow_ptr_type;
+ 
+   switch (size)
+     {
+     case 1:
+       shadow_ptr_type = shadow_ptr_types[0];
+       break;
+     case 2:
+       shadow_ptr_type = shadow_ptr_types[1];
+       break;
+     case 4:
+       shadow_ptr_type = shadow_ptr_types[2];
+       break;
+     default:
+       gcc_unreachable ();
+     }
+ 
+   unsigned char c = (char) is_clobber ? ASAN_STACK_MAGIC_USE_AFTER_SCOPE : 0;
+   unsigned HOST_WIDE_INT val = 0;
+   unsigned last_pos = size;
+   if (last_chunk_size && !is_clobber)
+     last_pos = BYTES_BIG_ENDIAN ? 0 : size - 1;
+   for (unsigned i = 0; i < size; ++i)
+     {
+       unsigned char shadow_c = c;
+       if (i == last_pos)
+ 	shadow_c = last_chunk_size;
+       val |= (unsigned HOST_WIDE_INT) shadow_c << (BITS_PER_UNIT * i);
+     }
+ 
+   /* Handle last chunk in unpoisoning.  */
+   tree magic = build_int_cst (TREE_TYPE (shadow_ptr_type), val);
+ 
+   tree dest = build2 (MEM_REF, TREE_TYPE (shadow_ptr_type), shadow,
+ 		      build_int_cst (shadow_ptr_type, base_addr_offset));
+ 
+   gimple *g = gimple_build_assign (dest, magic);
+   gimple_set_location (g, loc);
+   gsi_insert_after (iter, g, GSI_NEW_STMT);
+ }
+ 
+ /* Expand the ASAN_MARK builtins.  */
+ 
+ bool
+ asan_expand_mark_ifn (gimple_stmt_iterator *iter)
+ {
+   gimple *g = gsi_stmt (*iter);
+   location_t loc = gimple_location (g);
+   HOST_WIDE_INT flag = tree_to_shwi (gimple_call_arg (g, 0));
+   bool is_poison = ((asan_mark_flags)flag) == ASAN_MARK_POISON;
+ 
+   tree base = gimple_call_arg (g, 1);
+   gcc_checking_assert (TREE_CODE (base) == ADDR_EXPR);
+   tree decl = TREE_OPERAND (base, 0);
+ 
+   /* For a nested function, we can have: ASAN_MARK (2, &FRAME.2.fp_input, 4) */
+   if (TREE_CODE (decl) == COMPONENT_REF
+       && DECL_NONLOCAL_FRAME (TREE_OPERAND (decl, 0)))
+     decl = TREE_OPERAND (decl, 0);
+ 
+   gcc_checking_assert (TREE_CODE (decl) == VAR_DECL);
+ 
+   if (hwasan_sanitize_p ())
+     {
+       gcc_assert (param_hwasan_instrument_stack);
+       gimple_seq stmts = NULL;
+       /* Here we swap ASAN_MARK calls for HWASAN_MARK.
+ 	 This is because we are using the approach of using ASAN_MARK as a
+ 	 synonym until here.
+ 	 That approach means we don't yet have to duplicate all the special
+ 	 cases for ASAN_MARK and ASAN_POISON with the exact same handling but
+ 	 called HWASAN_MARK etc.
+ 
+ 	 N.b. __asan_poison_stack_memory (which implements ASAN_MARK for ASAN)
+ 	 rounds the size up to its shadow memory granularity, while
+ 	 __hwasan_tag_memory (which implements the same for HWASAN) does not.
+ 	 Hence we emit HWASAN_MARK with an aligned size unlike ASAN_MARK.  */
+       tree len = gimple_call_arg (g, 2);
+       tree new_len = gimple_build_round_up (&stmts, loc, size_type_node, len,
+ 					    HWASAN_TAG_GRANULE_SIZE);
+       gimple_build (&stmts, loc, CFN_HWASAN_MARK,
+ 		    void_type_node, gimple_call_arg (g, 0),
+ 		    base, new_len);
+       gsi_replace_with_seq (iter, stmts, true);
+       return false;
+     }
+ 
+   if (is_poison)
+     {
+       if (asan_handled_variables == NULL)
+ 	asan_handled_variables = new hash_set<tree> (16);
+       asan_handled_variables->add (decl);
+     }
+   tree len = gimple_call_arg (g, 2);
+ 
+   gcc_assert (tree_fits_shwi_p (len));
+   unsigned HOST_WIDE_INT size_in_bytes = tree_to_shwi (len);
+   gcc_assert (size_in_bytes);
+ 
+   g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
+ 			   NOP_EXPR, base);
+   gimple_set_location (g, loc);
+   gsi_replace (iter, g, false);
+   tree base_addr = gimple_assign_lhs (g);
+ 
+   /* Generate direct emission if size_in_bytes is small.  */
+   if (size_in_bytes
+       <= (unsigned)param_use_after_scope_direct_emission_threshold)
+     {
+       const unsigned HOST_WIDE_INT shadow_size
+ 	= shadow_mem_size (size_in_bytes);
+       const unsigned int shadow_align
+ 	= (get_pointer_alignment (base) / BITS_PER_UNIT) >> ASAN_SHADOW_SHIFT;
+ 
+       tree shadow = build_shadow_mem_access (iter, loc, base_addr,
+ 					     shadow_ptr_types[0], true);
+ 
+       for (unsigned HOST_WIDE_INT offset = 0; offset < shadow_size;)
+ 	{
+ 	  unsigned size = 1;
+ 	  if (shadow_size - offset >= 4
+ 	      && (!STRICT_ALIGNMENT || shadow_align >= 4))
+ 	    size = 4;
+ 	  else if (shadow_size - offset >= 2
+ 		   && (!STRICT_ALIGNMENT || shadow_align >= 2))
+ 	    size = 2;
+ 
+ 	  unsigned HOST_WIDE_INT last_chunk_size = 0;
+ 	  unsigned HOST_WIDE_INT s = (offset + size) * ASAN_SHADOW_GRANULARITY;
+ 	  if (s > size_in_bytes)
+ 	    last_chunk_size = ASAN_SHADOW_GRANULARITY - (s - size_in_bytes);
+ 
+ 	  asan_store_shadow_bytes (iter, loc, shadow, offset, is_poison,
+ 				   size, last_chunk_size);
+ 	  offset += size;
+ 	}
+     }
+   else
+     {
+       g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
+ 			       NOP_EXPR, len);
+       gimple_set_location (g, loc);
+       gsi_insert_before (iter, g, GSI_SAME_STMT);
+       tree sz_arg = gimple_assign_lhs (g);
+ 
+       tree fun
+ 	= builtin_decl_implicit (is_poison ? BUILT_IN_ASAN_POISON_STACK_MEMORY
+ 				 : BUILT_IN_ASAN_UNPOISON_STACK_MEMORY);
+       g = gimple_build_call (fun, 2, base_addr, sz_arg);
+       gimple_set_location (g, loc);
+       gsi_insert_after (iter, g, GSI_NEW_STMT);
+     }
+ 
+   return false;
+ }
+ 
+ /* Expand the ASAN_{LOAD,STORE} builtins.  */
+ 
+ bool
+ asan_expand_check_ifn (gimple_stmt_iterator *iter, bool use_calls)
+ {
+   gcc_assert (!hwasan_sanitize_p ());
+   gimple *g = gsi_stmt (*iter);
+   location_t loc = gimple_location (g);
+   bool recover_p;
+   if (flag_sanitize & SANITIZE_USER_ADDRESS)
+     recover_p = (flag_sanitize_recover & SANITIZE_USER_ADDRESS) != 0;
+   else
+     recover_p = (flag_sanitize_recover & SANITIZE_KERNEL_ADDRESS) != 0;
+ 
+   HOST_WIDE_INT flags = tree_to_shwi (gimple_call_arg (g, 0));
+   gcc_assert (flags < ASAN_CHECK_LAST);
+   bool is_scalar_access = (flags & ASAN_CHECK_SCALAR_ACCESS) != 0;
+   bool is_store = (flags & ASAN_CHECK_STORE) != 0;
+   bool is_non_zero_len = (flags & ASAN_CHECK_NON_ZERO_LEN) != 0;
+ 
+   tree base = gimple_call_arg (g, 1);
+   tree len = gimple_call_arg (g, 2);
+   HOST_WIDE_INT align = tree_to_shwi (gimple_call_arg (g, 3));
+ 
+   HOST_WIDE_INT size_in_bytes
+     = is_scalar_access && tree_fits_shwi_p (len) ? tree_to_shwi (len) : -1;
+ 
+   if (use_calls)
+     {
+       /* Instrument using callbacks.  */
+       gimple *g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
+ 				      NOP_EXPR, base);
+       gimple_set_location (g, loc);
+       gsi_insert_before (iter, g, GSI_SAME_STMT);
+       tree base_addr = gimple_assign_lhs (g);
+ 
+       int nargs;
+       tree fun = check_func (is_store, recover_p, size_in_bytes, &nargs);
+       if (nargs == 1)
+ 	g = gimple_build_call (fun, 1, base_addr);
+       else
+ 	{
+ 	  gcc_assert (nargs == 2);
+ 	  g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
+ 				   NOP_EXPR, len);
+ 	  gimple_set_location (g, loc);
+ 	  gsi_insert_before (iter, g, GSI_SAME_STMT);
+ 	  tree sz_arg = gimple_assign_lhs (g);
+ 	  g = gimple_build_call (fun, nargs, base_addr, sz_arg);
+ 	}
+       gimple_set_location (g, loc);
+       gsi_replace (iter, g, false);
+       return false;
+     }
+ 
+   HOST_WIDE_INT real_size_in_bytes = size_in_bytes == -1 ? 1 : size_in_bytes;
+ 
+   tree shadow_ptr_type = shadow_ptr_types[real_size_in_bytes == 16 ? 1 : 0];
+   tree shadow_type = TREE_TYPE (shadow_ptr_type);
+ 
+   gimple_stmt_iterator gsi = *iter;
+ 
+   if (!is_non_zero_len)
+     {
+       /* So, the length of the memory area to asan-protect is
+ 	 non-constant.  Let's guard the generated instrumentation code
+ 	 like:
+ 
+ 	 if (len != 0)
+ 	   {
+ 	     //asan instrumentation code goes here.
+ 	   }
+ 	 // falltrough instructions, starting with *ITER.  */
+ 
+       g = gimple_build_cond (NE_EXPR,
+ 			    len,
+ 			    build_int_cst (TREE_TYPE (len), 0),
+ 			    NULL_TREE, NULL_TREE);
+       gimple_set_location (g, loc);
+ 
+       basic_block then_bb, fallthrough_bb;
+       insert_if_then_before_iter (as_a <gcond *> (g), iter,
+ 				  /*then_more_likely_p=*/true,
+ 				  &then_bb, &fallthrough_bb);
+       /* Note that fallthrough_bb starts with the statement that was
+ 	pointed to by ITER.  */
+ 
+       /* The 'then block' of the 'if (len != 0) condition is where
+ 	we'll generate the asan instrumentation code now.  */
+       gsi = gsi_last_bb (then_bb);
+     }
+ 
+   /* Get an iterator on the point where we can add the condition
+      statement for the instrumentation.  */
+   basic_block then_bb, else_bb;
+   gsi = create_cond_insert_point (&gsi, /*before_p*/false,
+ 				  /*then_more_likely_p=*/false,
+ 				  /*create_then_fallthru_edge*/recover_p,
+ 				  &then_bb,
+ 				  &else_bb);
+ 
+   g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
+ 			   NOP_EXPR, base);
+   gimple_set_location (g, loc);
+   gsi_insert_before (&gsi, g, GSI_NEW_STMT);
+   tree base_addr = gimple_assign_lhs (g);
+ 
+   tree t = NULL_TREE;
+   if (real_size_in_bytes >= 8)
+     {
+       tree shadow = build_shadow_mem_access (&gsi, loc, base_addr,
+ 					     shadow_ptr_type);
+       t = shadow;
+     }
+   else
+     {
+       /* Slow path for 1, 2 and 4 byte accesses.  */
+       /* Test (shadow != 0)
+ 	 & ((base_addr & 7) + (real_size_in_bytes - 1)) >= shadow).  */
+       tree shadow = build_shadow_mem_access (&gsi, loc, base_addr,
+ 					     shadow_ptr_type);
+       gimple *shadow_test = build_assign (NE_EXPR, shadow, 0);
+       gimple_seq seq = NULL;
+       gimple_seq_add_stmt (&seq, shadow_test);
+       /* Aligned (>= 8 bytes) can test just
+ 	 (real_size_in_bytes - 1 >= shadow), as base_addr & 7 is known
+ 	 to be 0.  */
+       if (align < 8)
+ 	{
+ 	  gimple_seq_add_stmt (&seq, build_assign (BIT_AND_EXPR,
+ 						   base_addr, 7));
+ 	  gimple_seq_add_stmt (&seq,
+ 			       build_type_cast (shadow_type,
+ 						gimple_seq_last (seq)));
+ 	  if (real_size_in_bytes > 1)
+ 	    gimple_seq_add_stmt (&seq,
+ 				 build_assign (PLUS_EXPR,
+ 					       gimple_seq_last (seq),
+ 					       real_size_in_bytes - 1));
+ 	  t = gimple_assign_lhs (gimple_seq_last_stmt (seq));
+ 	}
+       else
+ 	t = build_int_cst (shadow_type, real_size_in_bytes - 1);
+       gimple_seq_add_stmt (&seq, build_assign (GE_EXPR, t, shadow));
+       gimple_seq_add_stmt (&seq, build_assign (BIT_AND_EXPR, shadow_test,
+ 					       gimple_seq_last (seq)));
+       t = gimple_assign_lhs (gimple_seq_last (seq));
+       gimple_seq_set_location (seq, loc);
+       gsi_insert_seq_after (&gsi, seq, GSI_CONTINUE_LINKING);
+ 
+       /* For non-constant, misaligned or otherwise weird access sizes,
+        check first and last byte.  */
+       if (size_in_bytes == -1)
+ 	{
+ 	  g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
+ 				   MINUS_EXPR, len,
+ 				   build_int_cst (pointer_sized_int_node, 1));
+ 	  gimple_set_location (g, loc);
+ 	  gsi_insert_after (&gsi, g, GSI_NEW_STMT);
+ 	  tree last = gimple_assign_lhs (g);
+ 	  g = gimple_build_assign (make_ssa_name (pointer_sized_int_node),
+ 				   PLUS_EXPR, base_addr, last);
+ 	  gimple_set_location (g, loc);
+ 	  gsi_insert_after (&gsi, g, GSI_NEW_STMT);
+ 	  tree base_end_addr = gimple_assign_lhs (g);
+ 
+ 	  tree shadow = build_shadow_mem_access (&gsi, loc, base_end_addr,
+ 						 shadow_ptr_type);
+ 	  gimple *shadow_test = build_assign (NE_EXPR, shadow, 0);
+ 	  gimple_seq seq = NULL;
+ 	  gimple_seq_add_stmt (&seq, shadow_test);
+ 	  gimple_seq_add_stmt (&seq, build_assign (BIT_AND_EXPR,
+ 						   base_end_addr, 7));
+ 	  gimple_seq_add_stmt (&seq, build_type_cast (shadow_type,
+ 						      gimple_seq_last (seq)));
+ 	  gimple_seq_add_stmt (&seq, build_assign (GE_EXPR,
+ 						   gimple_seq_last (seq),
+ 						   shadow));
+ 	  gimple_seq_add_stmt (&seq, build_assign (BIT_AND_EXPR, shadow_test,
+ 						   gimple_seq_last (seq)));
+ 	  gimple_seq_add_stmt (&seq, build_assign (BIT_IOR_EXPR, t,
+ 						   gimple_seq_last (seq)));
+ 	  t = gimple_assign_lhs (gimple_seq_last (seq));
+ 	  gimple_seq_set_location (seq, loc);
+ 	  gsi_insert_seq_after (&gsi, seq, GSI_CONTINUE_LINKING);
+ 	}
+     }
+ 
+   g = gimple_build_cond (NE_EXPR, t, build_int_cst (TREE_TYPE (t), 0),
+ 			 NULL_TREE, NULL_TREE);
+   gimple_set_location (g, loc);
+   gsi_insert_after (&gsi, g, GSI_NEW_STMT);
+ 
+   /* Generate call to the run-time library (e.g. __asan_report_load8).  */
+   gsi = gsi_start_bb (then_bb);
+   int nargs;
+   tree fun = report_error_func (is_store, recover_p, size_in_bytes, &nargs);
+   g = gimple_build_call (fun, nargs, base_addr, len);
+   gimple_set_location (g, loc);
+   gsi_insert_after (&gsi, g, GSI_NEW_STMT);
+ 
+   gsi_remove (iter, true);
+   *iter = gsi_start_bb (else_bb);
+ 
+   return true;
+ }
+ 
+ /* Create ASAN shadow variable for a VAR_DECL which has been rewritten
+    into SSA.  Already seen VAR_DECLs are stored in SHADOW_VARS_MAPPING.  */
+ 
+ static tree
+ create_asan_shadow_var (tree var_decl,
+ 			hash_map<tree, tree> &shadow_vars_mapping)
+ {
+   tree *slot = shadow_vars_mapping.get (var_decl);
+   if (slot == NULL)
+     {
+       tree shadow_var = copy_node (var_decl);
+ 
+       copy_body_data id;
+       memset (&id, 0, sizeof (copy_body_data));
+       id.src_fn = id.dst_fn = current_function_decl;
+       copy_decl_for_dup_finish (&id, var_decl, shadow_var);
+ 
+       DECL_ARTIFICIAL (shadow_var) = 1;
+       DECL_IGNORED_P (shadow_var) = 1;
+       DECL_SEEN_IN_BIND_EXPR_P (shadow_var) = 0;
+       gimple_add_tmp_var (shadow_var);
+ 
+       shadow_vars_mapping.put (var_decl, shadow_var);
+       return shadow_var;
+     }
+   else
+     return *slot;
+ }
+ 
+ /* Expand ASAN_POISON ifn.  */
+ 
+ bool
+ asan_expand_poison_ifn (gimple_stmt_iterator *iter,
+ 			bool *need_commit_edge_insert,
+ 			hash_map<tree, tree> &shadow_vars_mapping)
+ {
+   gimple *g = gsi_stmt (*iter);
+   tree poisoned_var = gimple_call_lhs (g);
+   if (!poisoned_var || has_zero_uses (poisoned_var))
+     {
+       gsi_remove (iter, true);
+       return true;
+     }
+ 
+   if (SSA_NAME_VAR (poisoned_var) == NULL_TREE)
+     SET_SSA_NAME_VAR_OR_IDENTIFIER (poisoned_var,
+ 				    create_tmp_var (TREE_TYPE (poisoned_var)));
+ 
+   tree shadow_var = create_asan_shadow_var (SSA_NAME_VAR (poisoned_var),
+ 					    shadow_vars_mapping);
+ 
+   bool recover_p;
+   if (flag_sanitize & SANITIZE_USER_ADDRESS)
+     recover_p = (flag_sanitize_recover & SANITIZE_USER_ADDRESS) != 0;
+   else
+     recover_p = (flag_sanitize_recover & SANITIZE_KERNEL_ADDRESS) != 0;
+   tree size = DECL_SIZE_UNIT (shadow_var);
+   gimple *poison_call
+     = gimple_build_call_internal (IFN_ASAN_MARK, 3,
+ 				  build_int_cst (integer_type_node,
+ 						 ASAN_MARK_POISON),
+ 				  build_fold_addr_expr (shadow_var), size);
+ 
+   gimple *use;
+   imm_use_iterator imm_iter;
+   FOR_EACH_IMM_USE_STMT (use, imm_iter, poisoned_var)
+     {
+       if (is_gimple_debug (use))
+ 	continue;
+ 
+       int nargs;
+       bool store_p = gimple_call_internal_p (use, IFN_ASAN_POISON_USE);
+       gcall *call;
+       if (hwasan_sanitize_p ())
+ 	{
+ 	  tree fun = builtin_decl_implicit (BUILT_IN_HWASAN_TAG_MISMATCH4);
+ 	  /* NOTE: hwasan has no __hwasan_report_* functions like asan does.
+ 		We use __hwasan_tag_mismatch4 with arguments that tell it the
+ 		size of access and load to report all tag mismatches.
+ 
+ 		The arguments to this function are:
+ 		  Address of invalid access.
+ 		  Bitfield containing information about the access
+ 		    (access_info)
+ 		  Pointer to a frame of registers
+ 		    (for use in printing the contents of registers in a dump)
+ 		    Not used yet -- to be used by inline instrumentation.
+ 		  Size of access.
+ 
+ 		The access_info bitfield encodes the following pieces of
+ 		information:
+ 		  - Is this a store or load?
+ 		    access_info & 0x10  =>  store
+ 		  - Should the program continue after reporting the error?
+ 		    access_info & 0x20  =>  recover
+ 		  - What size access is this (not used here since we can always
+ 		    pass the size in the last argument)
+ 
+ 		    if (access_info & 0xf == 0xf)
+ 		      size is taken from last argument.
+ 		    else
+ 		      size == 1 << (access_info & 0xf)
+ 
+ 		The last argument contains the size of the access iff the
+ 		access_info size indicator is 0xf (we always use this argument
+ 		rather than storing the size in the access_info bitfield).
+ 
+ 		See the function definition `__hwasan_tag_mismatch4` in
+ 		libsanitizer/hwasan for the full definition.
+ 		*/
+ 	  unsigned access_info = (0x20 * recover_p)
+ 	    + (0x10 * store_p)
+ 	    + (0xf);
+ 	  call = gimple_build_call (fun, 4,
+ 				    build_fold_addr_expr (shadow_var),
+ 				    build_int_cst (pointer_sized_int_node,
+ 						   access_info),
+ 				    build_int_cst (pointer_sized_int_node, 0),
+ 				    size);
+ 	}
+       else
+ 	{
+ 	  tree fun = report_error_func (store_p, recover_p, tree_to_uhwi (size),
+ 					&nargs);
+ 	  call = gimple_build_call (fun, 1,
+ 				    build_fold_addr_expr (shadow_var));
+ 	}
+       gimple_set_location (call, gimple_location (use));
+       gimple *call_to_insert = call;
+ 
+       /* The USE can be a gimple PHI node.  If so, insert the call on
+ 	 all edges leading to the PHI node.  */
+       if (is_a <gphi *> (use))
+ 	{
+ 	  gphi *phi = dyn_cast<gphi *> (use);
+ 	  for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i)
+ 	    if (gimple_phi_arg_def (phi, i) == poisoned_var)
+ 	      {
+ 		edge e = gimple_phi_arg_edge (phi, i);
+ 
+ 		/* Do not insert on an edge we can't split.  */
+ 		if (e->flags & EDGE_ABNORMAL)
+ 		  continue;
+ 
+ 		if (call_to_insert == NULL)
+ 		  call_to_insert = gimple_copy (call);
+ 
+ 		gsi_insert_seq_on_edge (e, call_to_insert);
+ 		*need_commit_edge_insert = true;
+ 		call_to_insert = NULL;
+ 	      }
+ 	}
+       else
+ 	{
+ 	  gimple_stmt_iterator gsi = gsi_for_stmt (use);
+ 	  if (store_p)
+ 	    gsi_replace (&gsi, call, true);
+ 	  else
+ 	    gsi_insert_before (&gsi, call, GSI_NEW_STMT);
+ 	}
+     }
+ 
+   SSA_NAME_IS_DEFAULT_DEF (poisoned_var) = true;
+   SSA_NAME_DEF_STMT (poisoned_var) = gimple_build_nop ();
+   gsi_replace (iter, poison_call, false);
+ 
+   return true;
+ }
+ 
+ /* Instrument the current function.  */
+ 
+ static unsigned int
+ asan_instrument (void)
+ {
+   if (hwasan_sanitize_p ())
+     {
+       transform_statements ();
+       return 0;
+     }
+ 
+   if (shadow_ptr_types[0] == NULL_TREE)
+     asan_init_shadow_ptr_types ();
+   transform_statements ();
+   last_alloca_addr = NULL_TREE;
+   return 0;
+ }
+ 
+ static bool
+ gate_asan (void)
+ {
+   return sanitize_flags_p (SANITIZE_ADDRESS);
+ }
+ 
+ namespace {
+ 
+ const pass_data pass_data_asan =
+ {
+   GIMPLE_PASS, /* type */
+   "asan", /* name */
+   OPTGROUP_NONE, /* optinfo_flags */
+   TV_NONE, /* tv_id */
+   ( PROP_ssa | PROP_cfg | PROP_gimple_leh ), /* properties_required */
+   0, /* properties_provided */
+   0, /* properties_destroyed */
+   0, /* todo_flags_start */
+   TODO_update_ssa, /* todo_flags_finish */
+ };
+ 
+ class pass_asan : public gimple_opt_pass
+ {
+ public:
+   pass_asan (gcc::context *ctxt)
+     : gimple_opt_pass (pass_data_asan, ctxt)
+   {}
+ 
+   /* opt_pass methods: */
+   opt_pass * clone () { return new pass_asan (m_ctxt); }
+   virtual bool gate (function *) { return gate_asan () || gate_hwasan (); }
+   virtual unsigned int execute (function *) { return asan_instrument (); }
+ 
+ }; // class pass_asan
+ 
+ } // anon namespace
+ 
+ gimple_opt_pass *
+ make_pass_asan (gcc::context *ctxt)
+ {
+   return new pass_asan (ctxt);
+ }
+ 
+ namespace {
+ 
+ const pass_data pass_data_asan_O0 =
+ {
+   GIMPLE_PASS, /* type */
+   "asan0", /* name */
+   OPTGROUP_NONE, /* optinfo_flags */
+   TV_NONE, /* tv_id */
+   ( PROP_ssa | PROP_cfg | PROP_gimple_leh ), /* properties_required */
+   0, /* properties_provided */
+   0, /* properties_destroyed */
+   0, /* todo_flags_start */
+   TODO_update_ssa, /* todo_flags_finish */
+ };
+ 
+ class pass_asan_O0 : public gimple_opt_pass
+ {
+ public:
+   pass_asan_O0 (gcc::context *ctxt)
+     : gimple_opt_pass (pass_data_asan_O0, ctxt)
+   {}
+ 
+   /* opt_pass methods: */
+   virtual bool gate (function *)
+     {
+       return !optimize && (gate_asan () || gate_hwasan ());
+     }
+   virtual unsigned int execute (function *) { return asan_instrument (); }
+ 
+ }; // class pass_asan_O0
+ 
+ } // anon namespace
+ 
+ gimple_opt_pass *
+ make_pass_asan_O0 (gcc::context *ctxt)
+ {
+   return new pass_asan_O0 (ctxt);
+ }
+ 
+ /*  HWASAN  */
+ 
+ /* For stack tagging:
+ 
+    Return the offset from the frame base tag that the "next" expanded object
+    should have.  */
+ uint8_t
+ hwasan_current_frame_tag ()
+ {
+   return hwasan_frame_tag_offset;
+ }
+ 
+ /* For stack tagging:
+ 
+    Return the 'base pointer' for this function.  If that base pointer has not
+    yet been created then we create a register to hold it and record the insns
+    to initialize the register in `hwasan_frame_base_init_seq` for later
+    emission.  */
+ rtx
+ hwasan_frame_base ()
+ {
+   if (! hwasan_frame_base_ptr)
+     {
+       start_sequence ();
+       hwasan_frame_base_ptr
+ 	= force_reg (Pmode,
+ 		     targetm.memtag.insert_random_tag (virtual_stack_vars_rtx,
+ 						       NULL_RTX));
+       hwasan_frame_base_init_seq = get_insns ();
+       end_sequence ();
+     }
+ 
+   return hwasan_frame_base_ptr;
+ }
+ 
+ /* For stack tagging:
+ 
+    Check whether this RTX is a standard pointer addressing the base of the
+    stack variables for this frame.  Returns true if the RTX is either
+    virtual_stack_vars_rtx or hwasan_frame_base_ptr.  */
+ bool
+ stack_vars_base_reg_p (rtx base)
+ {
+   return base == virtual_stack_vars_rtx || base == hwasan_frame_base_ptr;
+ }
+ 
+ /* For stack tagging:
+ 
+    Emit frame base initialisation.
+    If hwasan_frame_base has been used before here then
+    hwasan_frame_base_init_seq contains the sequence of instructions to
+    initialize it.  This must be put just before the hwasan prologue, so we emit
+    the insns before parm_birth_insn (which will point to the first instruction
+    of the hwasan prologue if it exists).
+ 
+    We update `parm_birth_insn` to point to the start of this initialisation
+    since that represents the end of the initialisation done by
+    expand_function_{start,end} functions and we want to maintain that.  */
+ void
+ hwasan_maybe_emit_frame_base_init ()
+ {
+   if (! hwasan_frame_base_init_seq)
+     return;
+   emit_insn_before (hwasan_frame_base_init_seq, parm_birth_insn);
+   parm_birth_insn = hwasan_frame_base_init_seq;
+ }
+ 
+ /* Record a compile-time constant size stack variable that HWASAN will need to
+    tag.  This record of the range of a stack variable will be used by
+    `hwasan_emit_prologue` to emit the RTL at the start of each frame which will
+    set tags in the shadow memory according to the assigned tag for each object.
+ 
+    The range that the object spans in stack space should be described by the
+    bounds `untagged_base + nearest_offset` and
+    `untagged_base + farthest_offset`.
+    `tagged_base` is the base address which contains the "base frame tag" for
+    this frame, and from which the value to address this object with will be
+    calculated.
+ 
+    We record the `untagged_base` since the functions in the hwasan library we
+    use to tag memory take pointers without a tag.  */
+ void
+ hwasan_record_stack_var (rtx untagged_base, rtx tagged_base,
+ 			 poly_int64 nearest_offset, poly_int64 farthest_offset)
+ {
+   hwasan_stack_var cur_var;
+   cur_var.untagged_base = untagged_base;
+   cur_var.tagged_base = tagged_base;
+   cur_var.nearest_offset = nearest_offset;
+   cur_var.farthest_offset = farthest_offset;
+   cur_var.tag_offset = hwasan_current_frame_tag ();
+ 
+   hwasan_tagged_stack_vars.safe_push (cur_var);
+ }
+ 
+ /* Return the RTX representing the farthest extent of the statically allocated
+    stack objects for this frame.  If hwasan_frame_base_ptr has not been
+    initialized then we are not storing any static variables on the stack in
+    this frame.  In this case we return NULL_RTX to represent that.
+ 
+    Otherwise simply return virtual_stack_vars_rtx + frame_offset.  */
+ rtx
+ hwasan_get_frame_extent ()
+ {
+   return (hwasan_frame_base_ptr
+ 	  ? plus_constant (Pmode, virtual_stack_vars_rtx, frame_offset)
+ 	  : NULL_RTX);
+ }
+ 
+ /* For stack tagging:
+ 
+    Increment the frame tag offset modulo the size a tag can represent.  */
+ void
+ hwasan_increment_frame_tag ()
+ {
+   uint8_t tag_bits = HWASAN_TAG_SIZE;
+   gcc_assert (HWASAN_TAG_SIZE
+ 	      <= sizeof (hwasan_frame_tag_offset) * CHAR_BIT);
+   hwasan_frame_tag_offset = (hwasan_frame_tag_offset + 1) % (1 << tag_bits);
+   /* The "background tag" of the stack is zero by definition.
+      This is the tag that objects like parameters passed on the stack and
+      spilled registers are given.  It is handy to avoid this tag for objects
+      whose tags we decide ourselves, partly to ensure that buffer overruns
+      can't affect these important variables (e.g. saved link register, saved
+      stack pointer etc) and partly to make debugging easier (everything with a
+      tag of zero is space allocated automatically by the compiler).
+ 
+      This is not feasible when using random frame tags (the default
+      configuration for hwasan) since the tag for the given frame is randomly
+      chosen at runtime.  In order to avoid any tags matching the stack
+      background we would need to decide tag offsets at runtime instead of
+      compile time (and pay the resulting performance cost).
+ 
+      When not using random base tags for each frame (i.e. when compiled with
+      `--param hwasan-random-frame-tag=0`) the base tag for each frame is zero.
+      This means the tag that each object gets is equal to the
+      hwasan_frame_tag_offset used in determining it.
+      When this is the case we *can* ensure no object gets the tag of zero by
+      simply ensuring no object has the hwasan_frame_tag_offset of zero.
+ 
+      There is the extra complication that we only record the
+      hwasan_frame_tag_offset here (which is the offset from the tag stored in
+      the stack pointer).  In the kernel, the tag in the stack pointer is 0xff
+      rather than zero.  This does not cause problems since tags of 0xff are
+      never checked in the kernel.  As mentioned at the beginning of this
+      comment the background tag of the stack is zero by definition, which means
+      that for the kernel we should skip offsets of both 0 and 1 from the stack
+      pointer.  Avoiding the offset of 0 ensures we use a tag which will be
+      checked, avoiding the offset of 1 ensures we use a tag that is not the
+      same as the background.  */
+   if (hwasan_frame_tag_offset == 0 && ! param_hwasan_random_frame_tag)
+     hwasan_frame_tag_offset += 1;
+   if (hwasan_frame_tag_offset == 1 && ! param_hwasan_random_frame_tag
+       && sanitize_flags_p (SANITIZE_KERNEL_HWADDRESS))
+     hwasan_frame_tag_offset += 1;
+ }
+ 
+ /* Clear internal state for the next function.
+    This function is called before variables on the stack get expanded, in
+    `init_vars_expansion`.  */
+ void
+ hwasan_record_frame_init ()
+ {
+   delete asan_used_labels;
+   asan_used_labels = NULL;
+ 
+   /* If this isn't the case then some stack variable was recorded *before*
+      hwasan_record_frame_init is called, yet *after* the hwasan prologue for
+      the previous frame was emitted.  Such stack variables would not have
+      their shadow stack filled in.  */
+   gcc_assert (hwasan_tagged_stack_vars.is_empty ());
+   hwasan_frame_base_ptr = NULL_RTX;
+   hwasan_frame_base_init_seq = NULL;
+ 
+   /* When not using a random frame tag we can avoid the background stack
+      color which gives the user a little better debug output upon a crash.
+      Meanwhile, when using a random frame tag it will be nice to avoid adding
+      tags for the first object since that is unnecessary extra work.
+      Hence set the initial hwasan_frame_tag_offset to be 0 if using a random
+      frame tag and 1 otherwise.
+ 
+      As described in hwasan_increment_frame_tag, in the kernel the stack
+      pointer has the tag 0xff.  That means that to avoid 0xff and 0 (the tag
+      which the kernel does not check and the background tag respectively) we
+      start with a tag offset of 2.  */
+   hwasan_frame_tag_offset = param_hwasan_random_frame_tag
+     ? 0
+     : sanitize_flags_p (SANITIZE_KERNEL_HWADDRESS) ? 2 : 1;
+ }
+ 
+ /* For stack tagging:
+    (Emits HWASAN equivalent of what is emitted by
+    `asan_emit_stack_protection`).
+ 
+    Emits the extra prologue code to set the shadow stack as required for HWASAN
+    stack instrumentation.
+ 
+    Uses the vector of recorded stack variables hwasan_tagged_stack_vars.  When
+    this function has completed hwasan_tagged_stack_vars is empty and all
+    objects it had pointed to are deallocated.  */
+ void
+ hwasan_emit_prologue ()
+ {
+   /* We need untagged base pointers since libhwasan only accepts untagged
+     pointers in __hwasan_tag_memory.  We need the tagged base pointer to obtain
+     the base tag for an offset.  */
+ 
+   if (hwasan_tagged_stack_vars.is_empty ())
+     return;
+ 
+   poly_int64 bot = 0, top = 0;
+   for (hwasan_stack_var &cur : hwasan_tagged_stack_vars)
+     {
+       poly_int64 nearest = cur.nearest_offset;
+       poly_int64 farthest = cur.farthest_offset;
+ 
+       if (known_ge (nearest, farthest))
+ 	{
+ 	  top = nearest;
+ 	  bot = farthest;
+ 	}
+       else
+ 	{
+ 	  /* Given how these values are calculated, one must be known greater
+ 	     than the other.  */
+ 	  gcc_assert (known_le (nearest, farthest));
+ 	  top = farthest;
+ 	  bot = nearest;
+ 	}
+       poly_int64 size = (top - bot);
+ 
+       /* Assert the edge of each variable is aligned to the HWASAN tag granule
+ 	 size.  */
+       gcc_assert (multiple_p (top, HWASAN_TAG_GRANULE_SIZE));
+       gcc_assert (multiple_p (bot, HWASAN_TAG_GRANULE_SIZE));
+       gcc_assert (multiple_p (size, HWASAN_TAG_GRANULE_SIZE));
+ 
+       rtx fn = init_one_libfunc ("__hwasan_tag_memory");
+       rtx base_tag = targetm.memtag.extract_tag (cur.tagged_base, NULL_RTX);
+       rtx tag = plus_constant (QImode, base_tag, cur.tag_offset);
+       tag = hwasan_truncate_to_tag_size (tag, NULL_RTX);
+ 
+       rtx bottom = convert_memory_address (ptr_mode,
+ 					   plus_constant (Pmode,
+ 							  cur.untagged_base,
+ 							  bot));
+       emit_library_call (fn, LCT_NORMAL, VOIDmode,
+ 			 bottom, ptr_mode,
+ 			 tag, QImode,
+ 			 gen_int_mode (size, ptr_mode), ptr_mode);
+     }
+   /* Clear the stack vars, we've emitted the prologue for them all now.  */
+   hwasan_tagged_stack_vars.truncate (0);
+ }
+ 
+ /* For stack tagging:
+ 
+    Return RTL insns to clear the tags between DYNAMIC and VARS pointers
+    into the stack.  These instructions should be emitted at the end of
+    every function.
+ 
+    If `dynamic` is NULL_RTX then no insns are returned.  */
+ rtx_insn *
+ hwasan_emit_untag_frame (rtx dynamic, rtx vars)
+ {
+   if (! dynamic)
+     return NULL;
+ 
+   start_sequence ();
+ 
+   dynamic = convert_memory_address (ptr_mode, dynamic);
+   vars = convert_memory_address (ptr_mode, vars);
+ 
+   rtx top_rtx;
+   rtx bot_rtx;
+   if (FRAME_GROWS_DOWNWARD)
+     {
+       top_rtx = vars;
+       bot_rtx = dynamic;
+     }
+   else
+     {
+       top_rtx = dynamic;
+       bot_rtx = vars;
+     }
+ 
+   rtx size_rtx = expand_simple_binop (ptr_mode, MINUS, top_rtx, bot_rtx,
+ 				      NULL_RTX, /* unsignedp = */0,
+ 				      OPTAB_DIRECT);
+ 
+   rtx fn = init_one_libfunc ("__hwasan_tag_memory");
+   emit_library_call (fn, LCT_NORMAL, VOIDmode,
+ 		     bot_rtx, ptr_mode,
+ 		     HWASAN_STACK_BACKGROUND, QImode,
+ 		     size_rtx, ptr_mode);
+ 
+   do_pending_stack_adjust ();
+   rtx_insn *insns = get_insns ();
+   end_sequence ();
+   return insns;
+ }
+ 
+ /* Needs to be GTY(()), because cgraph_build_static_cdtor may
+    invoke ggc_collect.  */
+ static GTY(()) tree hwasan_ctor_statements;
+ 
+ /* Insert module initialization into this TU.  This initialization calls the
+    initialization code for libhwasan.  */
+ void
+ hwasan_finish_file (void)
+ {
+   /* Do not emit constructor initialization for the kernel.
+      (the kernel has its own initialization already).  */
+   if (flag_sanitize & SANITIZE_KERNEL_HWADDRESS)
+     return;
+ 
+   /* Avoid instrumenting code in the hwasan constructors/destructors.  */
+   flag_sanitize &= ~SANITIZE_HWADDRESS;
+   int priority = MAX_RESERVED_INIT_PRIORITY - 1;
+   tree fn = builtin_decl_implicit (BUILT_IN_HWASAN_INIT);
+   append_to_statement_list (build_call_expr (fn, 0), &hwasan_ctor_statements);
+   cgraph_build_static_cdtor ('I', hwasan_ctor_statements, priority);
+   flag_sanitize |= SANITIZE_HWADDRESS;
+ }
+ 
+ /* For stack tagging:
+ 
+    Truncate `tag` to the number of bits that a tag uses (i.e. to
+    HWASAN_TAG_SIZE).  Store the result in `target` if it's convenient.  */
+ rtx
+ hwasan_truncate_to_tag_size (rtx tag, rtx target)
+ {
+   gcc_assert (GET_MODE (tag) == QImode);
+   if (HWASAN_TAG_SIZE != GET_MODE_PRECISION (QImode))
+     {
+       gcc_assert (GET_MODE_PRECISION (QImode) > HWASAN_TAG_SIZE);
+       rtx mask = gen_int_mode ((HOST_WIDE_INT_1U << HWASAN_TAG_SIZE) - 1,
+ 			       QImode);
+       tag = expand_simple_binop (QImode, AND, tag, mask, target,
+ 				 /* unsignedp = */1, OPTAB_WIDEN);
+       gcc_assert (tag);
+     }
+   return tag;
+ }
+ 
+ /* Construct a function tree for __hwasan_{load,store}{1,2,4,8,16,_n}.
+    IS_STORE is either 1 (for a store) or 0 (for a load).  */
+ static combined_fn
+ hwasan_check_func (bool is_store, bool recover_p, HOST_WIDE_INT size_in_bytes,
+ 		   int *nargs)
+ {
+   static enum built_in_function check[2][2][6]
+     = { { { BUILT_IN_HWASAN_LOAD1, BUILT_IN_HWASAN_LOAD2,
+ 	    BUILT_IN_HWASAN_LOAD4, BUILT_IN_HWASAN_LOAD8,
+ 	    BUILT_IN_HWASAN_LOAD16, BUILT_IN_HWASAN_LOADN },
+ 	  { BUILT_IN_HWASAN_STORE1, BUILT_IN_HWASAN_STORE2,
+ 	    BUILT_IN_HWASAN_STORE4, BUILT_IN_HWASAN_STORE8,
+ 	    BUILT_IN_HWASAN_STORE16, BUILT_IN_HWASAN_STOREN } },
+ 	{ { BUILT_IN_HWASAN_LOAD1_NOABORT,
+ 	    BUILT_IN_HWASAN_LOAD2_NOABORT,
+ 	    BUILT_IN_HWASAN_LOAD4_NOABORT,
+ 	    BUILT_IN_HWASAN_LOAD8_NOABORT,
+ 	    BUILT_IN_HWASAN_LOAD16_NOABORT,
+ 	    BUILT_IN_HWASAN_LOADN_NOABORT },
+ 	  { BUILT_IN_HWASAN_STORE1_NOABORT,
+ 	    BUILT_IN_HWASAN_STORE2_NOABORT,
+ 	    BUILT_IN_HWASAN_STORE4_NOABORT,
+ 	    BUILT_IN_HWASAN_STORE8_NOABORT,
+ 	    BUILT_IN_HWASAN_STORE16_NOABORT,
+ 	    BUILT_IN_HWASAN_STOREN_NOABORT } } };
+   if (size_in_bytes == -1)
+     {
+       *nargs = 2;
+       return as_combined_fn (check[recover_p][is_store][5]);
+     }
+   *nargs = 1;
+   int size_log2 = exact_log2 (size_in_bytes);
+   gcc_assert (size_log2 >= 0 && size_log2 <= 5);
+   return as_combined_fn (check[recover_p][is_store][size_log2]);
+ }
+ 
+ /* Expand the HWASAN_{LOAD,STORE} builtins.  */
+ bool
+ hwasan_expand_check_ifn (gimple_stmt_iterator *iter, bool)
+ {
+   gimple *g = gsi_stmt (*iter);
+   location_t loc = gimple_location (g);
+   bool recover_p;
+   if (flag_sanitize & SANITIZE_USER_HWADDRESS)
+     recover_p = (flag_sanitize_recover & SANITIZE_USER_HWADDRESS) != 0;
+   else
+     recover_p = (flag_sanitize_recover & SANITIZE_KERNEL_HWADDRESS) != 0;
+ 
+   HOST_WIDE_INT flags = tree_to_shwi (gimple_call_arg (g, 0));
+   gcc_assert (flags < ASAN_CHECK_LAST);
+   bool is_scalar_access = (flags & ASAN_CHECK_SCALAR_ACCESS) != 0;
+   bool is_store = (flags & ASAN_CHECK_STORE) != 0;
+   bool is_non_zero_len = (flags & ASAN_CHECK_NON_ZERO_LEN) != 0;
+ 
+   tree base = gimple_call_arg (g, 1);
+   tree len = gimple_call_arg (g, 2);
+ 
+   /* `align` is unused for HWASAN_CHECK, but we pass the argument anyway
+      since that way the arguments match ASAN_CHECK.  */
+   /* HOST_WIDE_INT align = tree_to_shwi (gimple_call_arg (g, 3));  */
+ 
+   unsigned HOST_WIDE_INT size_in_bytes
+     = is_scalar_access ? tree_to_shwi (len) : -1;
+ 
+   gimple_stmt_iterator gsi = *iter;
+ 
+   if (!is_non_zero_len)
+     {
+       /* So, the length of the memory area to hwasan-protect is
+ 	 non-constant.  Let's guard the generated instrumentation code
+ 	 like:
+ 
+ 	 if (len != 0)
+ 	   {
+ 	     // hwasan instrumentation code goes here.
+ 	   }
+ 	 // falltrough instructions, starting with *ITER.  */
+ 
+       g = gimple_build_cond (NE_EXPR,
+ 			    len,
+ 			    build_int_cst (TREE_TYPE (len), 0),
+ 			    NULL_TREE, NULL_TREE);
+       gimple_set_location (g, loc);
+ 
+       basic_block then_bb, fallthrough_bb;
+       insert_if_then_before_iter (as_a <gcond *> (g), iter,
+ 				  /*then_more_likely_p=*/true,
+ 				  &then_bb, &fallthrough_bb);
+       /* Note that fallthrough_bb starts with the statement that was
+ 	pointed to by ITER.  */
+ 
+       /* The 'then block' of the 'if (len != 0) condition is where
+ 	we'll generate the hwasan instrumentation code now.  */
+       gsi = gsi_last_bb (then_bb);
+     }
+ 
+   gimple_seq stmts = NULL;
+   tree base_addr = gimple_build (&stmts, loc, NOP_EXPR,
+ 				 pointer_sized_int_node, base);
+ 
+   int nargs = 0;
+   combined_fn fn
+     = hwasan_check_func (is_store, recover_p, size_in_bytes, &nargs);
+   if (nargs == 1)
+     gimple_build (&stmts, loc, fn, void_type_node, base_addr);
+   else
+     {
+       gcc_assert (nargs == 2);
+       tree sz_arg = gimple_build (&stmts, loc, NOP_EXPR,
+ 				  pointer_sized_int_node, len);
+       gimple_build (&stmts, loc, fn, void_type_node, base_addr, sz_arg);
+     }
+ 
+   gsi_insert_seq_after (&gsi, stmts, GSI_NEW_STMT);
+   gsi_remove (iter, true);
+   *iter = gsi;
+   return false;
+ }
+ 
+ /* For stack tagging:
+ 
+    Dummy: the HWASAN_MARK internal function should only ever be in the code
+    after the sanopt pass.  */
+ bool
+ hwasan_expand_mark_ifn (gimple_stmt_iterator *)
+ {
+   gcc_unreachable ();
+ }
+ 
+ bool
+ gate_hwasan ()
+ {
+   return hwasan_sanitize_p ();
+ }
+ 
+ #include "gt-asan.h"
diff -Nrcpad gcc-11.3.0/gcc/asan.h gcc-12.1.0/gcc/asan.h
*** gcc-11.3.0/gcc/asan.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/asan.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* AddressSanitizer, a fast memory error detector.
!    Copyright (C) 2011-2021 Free Software Foundation, Inc.
     Contributed by Kostya Serebryany <kcc@google.com>
  
  This file is part of GCC.
--- 1,5 ----
  /* AddressSanitizer, a fast memory error detector.
!    Copyright (C) 2011-2022 Free Software Foundation, Inc.
     Contributed by Kostya Serebryany <kcc@google.com>
  
  This file is part of GCC.
*************** sanitize_flags_p (unsigned int flag, con
*** 249,252 ****
--- 249,263 ----
    return result_flags;
  }
  
+ /* Return true when coverage sanitization should happend for FN function.  */
+ 
+ static inline bool
+ sanitize_coverage_p (const_tree fn = current_function_decl)
+ {
+   return (flag_sanitize_coverage
+ 	  && (fn == NULL_TREE
+ 	      || lookup_attribute ("no_sanitize_coverage",
+ 				   DECL_ATTRIBUTES (fn)) == NULL_TREE));
+ }
+ 
  #endif /* TREE_ASAN */
diff -Nrcpad gcc-11.3.0/gcc/attr-fnspec.h gcc-12.1.0/gcc/attr-fnspec.h
*** gcc-11.3.0/gcc/attr-fnspec.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/attr-fnspec.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Handling of fnspec attribute specifiers
!    Copyright (C) 2008-2021 Free Software Foundation, Inc.
     Contributed by Richard Guenther  <rguenther@suse.de>
  
     This file is part of GCC.
--- 1,5 ----
  /* Handling of fnspec attribute specifiers
!    Copyright (C) 2008-2022 Free Software Foundation, Inc.
     Contributed by Richard Guenther  <rguenther@suse.de>
  
     This file is part of GCC.
*************** public:
*** 264,269 ****
--- 264,292 ----
      return str[1] == 'C' || str[1] == 'P';
    }
  
+   /* Return EAF flags for arg I.  */
+   int
+   arg_eaf_flags (unsigned int i)
+   {
+     int flags = 0;
+ 
+     if (!arg_specified_p (i))
+       ;
+     else if (!arg_used_p (i))
+       flags = EAF_UNUSED;
+     else
+       {
+ 	if (arg_direct_p (i))
+ 	  flags |= EAF_NO_INDIRECT_READ | EAF_NO_INDIRECT_ESCAPE
+ 		   | EAF_NOT_RETURNED_INDIRECTLY | EAF_NO_INDIRECT_CLOBBER;
+ 	if (arg_noescape_p (i))
+ 	  flags |= EAF_NO_DIRECT_ESCAPE | EAF_NO_INDIRECT_ESCAPE;
+ 	if (arg_readonly_p (i))
+ 	  flags |= EAF_NO_DIRECT_CLOBBER | EAF_NO_INDIRECT_CLOBBER;
+       }
+     return flags;
+   }
+ 
    /* Check validity of the string.  */
    void verify ();
  
diff -Nrcpad gcc-11.3.0/gcc/attribs.c gcc-12.1.0/gcc/attribs.c
*** gcc-11.3.0/gcc/attribs.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/attribs.c	Thu Jan  1 00:00:00 1970
***************
*** 1,2543 ****
- /* Functions dealing with attribute handling, used by most front ends.
-    Copyright (C) 1992-2021 Free Software Foundation, Inc.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #define INCLUDE_STRING
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "target.h"
- #include "tree.h"
- #include "stringpool.h"
- #include "diagnostic-core.h"
- #include "attribs.h"
- #include "fold-const.h"
- #include "stor-layout.h"
- #include "langhooks.h"
- #include "plugin.h"
- #include "selftest.h"
- #include "hash-set.h"
- #include "diagnostic.h"
- #include "pretty-print.h"
- #include "tree-pretty-print.h"
- #include "intl.h"
- 
- /* Table of the tables of attributes (common, language, format, machine)
-    searched.  */
- static const struct attribute_spec *attribute_tables[4];
- 
- /* Substring representation.  */
- 
- struct substring
- {
-   const char *str;
-   int length;
- };
- 
- /* Simple hash function to avoid need to scan whole string.  */
- 
- static inline hashval_t
- substring_hash (const char *str, int l)
- {
-   return str[0] + str[l - 1] * 256 + l * 65536;
- }
- 
- /* Used for attribute_hash.  */
- 
- struct attribute_hasher : nofree_ptr_hash <attribute_spec>
- {
-   typedef substring *compare_type;
-   static inline hashval_t hash (const attribute_spec *);
-   static inline bool equal (const attribute_spec *, const substring *);
- };
- 
- inline hashval_t
- attribute_hasher::hash (const attribute_spec *spec)
- {
-   const int l = strlen (spec->name);
-   return substring_hash (spec->name, l);
- }
- 
- inline bool
- attribute_hasher::equal (const attribute_spec *spec, const substring *str)
- {
-   return (strncmp (spec->name, str->str, str->length) == 0
- 	  && !spec->name[str->length]);
- }
- 
- /* Scoped attribute name representation.  */
- 
- struct scoped_attributes
- {
-   const char *ns;
-   vec<attribute_spec> attributes;
-   hash_table<attribute_hasher> *attribute_hash;
- };
- 
- /* The table of scope attributes.  */
- static vec<scoped_attributes> attributes_table;
- 
- static scoped_attributes* find_attribute_namespace (const char*);
- static void register_scoped_attribute (const struct attribute_spec *,
- 				       scoped_attributes *);
- 
- static bool attributes_initialized = false;
- 
- /* Default empty table of attributes.  */
- 
- static const struct attribute_spec empty_attribute_table[] =
- {
-   { NULL, 0, 0, false, false, false, false, NULL, NULL }
- };
- 
- /* Return base name of the attribute.  Ie '__attr__' is turned into 'attr'.
-    To avoid need for copying, we simply return length of the string.  */
- 
- static void
- extract_attribute_substring (struct substring *str)
- {
-   if (str->length > 4 && str->str[0] == '_' && str->str[1] == '_'
-       && str->str[str->length - 1] == '_' && str->str[str->length - 2] == '_')
-     {
-       str->length -= 4;
-       str->str += 2;
-     }
- }
- 
- /* Insert an array of attributes ATTRIBUTES into a namespace.  This
-    array must be NULL terminated.  NS is the name of attribute
-    namespace.  The function returns the namespace into which the
-    attributes have been registered.  */
- 
- scoped_attributes *
- register_scoped_attributes (const struct attribute_spec *attributes,
- 			    const char *ns)
- {
-   scoped_attributes *result = NULL;
- 
-   /* See if we already have attributes in the namespace NS.  */
-   result = find_attribute_namespace (ns);
- 
-   if (result == NULL)
-     {
-       /* We don't have any namespace NS yet.  Create one.  */
-       scoped_attributes sa;
- 
-       if (attributes_table.is_empty ())
- 	attributes_table.create (64);
- 
-       memset (&sa, 0, sizeof (sa));
-       sa.ns = ns;
-       sa.attributes.create (64);
-       result = attributes_table.safe_push (sa);
-       result->attribute_hash = new hash_table<attribute_hasher> (200);
-     }
- 
-   /* Really add the attributes to their namespace now.  */
-   for (unsigned i = 0; attributes[i].name != NULL; ++i)
-     {
-       result->attributes.safe_push (attributes[i]);
-       register_scoped_attribute (&attributes[i], result);
-     }
- 
-   gcc_assert (result != NULL);
- 
-   return result;
- }
- 
- /* Return the namespace which name is NS, NULL if none exist.  */
- 
- static scoped_attributes*
- find_attribute_namespace (const char* ns)
- {
-   unsigned ix;
-   scoped_attributes *iter;
- 
-   FOR_EACH_VEC_ELT (attributes_table, ix, iter)
-     if (ns == iter->ns
- 	|| (iter->ns != NULL
- 	    && ns != NULL
- 	    && !strcmp (iter->ns, ns)))
-       return iter;
-   return NULL;
- }
- 
- /* Make some sanity checks on the attribute tables.  */
- 
- static void
- check_attribute_tables (void)
- {
-   for (size_t i = 0; i < ARRAY_SIZE (attribute_tables); i++)
-     for (size_t j = 0; attribute_tables[i][j].name != NULL; j++)
-       {
- 	/* The name must not begin and end with __.  */
- 	const char *name = attribute_tables[i][j].name;
- 	int len = strlen (name);
- 
- 	gcc_assert (!(name[0] == '_' && name[1] == '_'
- 		      && name[len - 1] == '_' && name[len - 2] == '_'));
- 
- 	/* The minimum and maximum lengths must be consistent.  */
- 	gcc_assert (attribute_tables[i][j].min_length >= 0);
- 
- 	gcc_assert (attribute_tables[i][j].max_length == -1
- 		    || (attribute_tables[i][j].max_length
- 			>= attribute_tables[i][j].min_length));
- 
- 	/* An attribute cannot require both a DECL and a TYPE.  */
- 	gcc_assert (!attribute_tables[i][j].decl_required
- 		    || !attribute_tables[i][j].type_required);
- 
- 	  /* If an attribute requires a function type, in particular
- 	     it requires a type.  */
- 	gcc_assert (!attribute_tables[i][j].function_type_required
- 		    || attribute_tables[i][j].type_required);
-       }
- 
-   /* Check that each name occurs just once in each table.  */
-   for (size_t i = 0; i < ARRAY_SIZE (attribute_tables); i++)
-     for (size_t j = 0; attribute_tables[i][j].name != NULL; j++)
-       for (size_t k = j + 1; attribute_tables[i][k].name != NULL; k++)
- 	gcc_assert (strcmp (attribute_tables[i][j].name,
- 			    attribute_tables[i][k].name));
- 
-   /* Check that no name occurs in more than one table.  Names that
-      begin with '*' are exempt, and may be overridden.  */
-   for (size_t i = 0; i < ARRAY_SIZE (attribute_tables); i++)
-     for (size_t j = i + 1; j < ARRAY_SIZE (attribute_tables); j++)
-       for (size_t k = 0; attribute_tables[i][k].name != NULL; k++)
- 	for (size_t l = 0; attribute_tables[j][l].name != NULL; l++)
- 	  gcc_assert (attribute_tables[i][k].name[0] == '*'
- 		      || strcmp (attribute_tables[i][k].name,
- 				 attribute_tables[j][l].name));
- }
- 
- /* Initialize attribute tables, and make some sanity checks if checking is
-    enabled.  */
- 
- void
- init_attributes (void)
- {
-   size_t i;
- 
-   if (attributes_initialized)
-     return;
- 
-   attribute_tables[0] = lang_hooks.common_attribute_table;
-   attribute_tables[1] = lang_hooks.attribute_table;
-   attribute_tables[2] = lang_hooks.format_attribute_table;
-   attribute_tables[3] = targetm.attribute_table;
- 
-   /* Translate NULL pointers to pointers to the empty table.  */
-   for (i = 0; i < ARRAY_SIZE (attribute_tables); i++)
-     if (attribute_tables[i] == NULL)
-       attribute_tables[i] = empty_attribute_table;
- 
-   if (flag_checking)
-     check_attribute_tables ();
- 
-   for (i = 0; i < ARRAY_SIZE (attribute_tables); ++i)
-     /* Put all the GNU attributes into the "gnu" namespace.  */
-     register_scoped_attributes (attribute_tables[i], "gnu");
- 
-   invoke_plugin_callbacks (PLUGIN_ATTRIBUTES, NULL);
-   attributes_initialized = true;
- }
- 
- /* Insert a single ATTR into the attribute table.  */
- 
- void
- register_attribute (const struct attribute_spec *attr)
- {
-   register_scoped_attribute (attr, find_attribute_namespace ("gnu"));
- }
- 
- /* Insert a single attribute ATTR into a namespace of attributes.  */
- 
- static void
- register_scoped_attribute (const struct attribute_spec *attr,
- 			   scoped_attributes *name_space)
- {
-   struct substring str;
-   attribute_spec **slot;
- 
-   gcc_assert (attr != NULL && name_space != NULL);
- 
-   gcc_assert (name_space->attribute_hash);
- 
-   str.str = attr->name;
-   str.length = strlen (str.str);
- 
-   /* Attribute names in the table must be in the form 'text' and not
-      in the form '__text__'.  */
-   gcc_assert (str.length > 0 && str.str[0] != '_');
- 
-   slot = name_space->attribute_hash
- 	 ->find_slot_with_hash (&str, substring_hash (str.str, str.length),
- 				INSERT);
-   gcc_assert (!*slot || attr->name[0] == '*');
-   *slot = CONST_CAST (struct attribute_spec *, attr);
- }
- 
- /* Return the spec for the scoped attribute with namespace NS and
-    name NAME.   */
- 
- static const struct attribute_spec *
- lookup_scoped_attribute_spec (const_tree ns, const_tree name)
- {
-   struct substring attr;
-   scoped_attributes *attrs;
- 
-   const char *ns_str = (ns != NULL_TREE) ? IDENTIFIER_POINTER (ns): NULL;
- 
-   attrs = find_attribute_namespace (ns_str);
- 
-   if (attrs == NULL)
-     return NULL;
- 
-   attr.str = IDENTIFIER_POINTER (name);
-   attr.length = IDENTIFIER_LENGTH (name);
-   extract_attribute_substring (&attr);
-   return attrs->attribute_hash->find_with_hash (&attr,
- 						substring_hash (attr.str,
- 							       	attr.length));
- }
- 
- /* Return the spec for the attribute named NAME.  If NAME is a TREE_LIST,
-    it also specifies the attribute namespace.  */
- 
- const struct attribute_spec *
- lookup_attribute_spec (const_tree name)
- {
-   tree ns;
-   if (TREE_CODE (name) == TREE_LIST)
-     {
-       ns = TREE_PURPOSE (name);
-       name = TREE_VALUE (name);
-     }
-   else
-     ns = get_identifier ("gnu");
-   return lookup_scoped_attribute_spec (ns, name);
- }
- 
- 
- /* Return the namespace of the attribute ATTR.  This accessor works on
-    GNU and C++11 (scoped) attributes.  On GNU attributes,
-    it returns an identifier tree for the string "gnu".
- 
-    Please read the comments of cxx11_attribute_p to understand the
-    format of attributes.  */
- 
- tree
- get_attribute_namespace (const_tree attr)
- {
-   if (cxx11_attribute_p (attr))
-     return TREE_PURPOSE (TREE_PURPOSE (attr));
-   return get_identifier ("gnu");
- }
- 
- /* Check LAST_DECL and NODE of the same symbol for attributes that are
-    recorded in SPEC to be mutually exclusive with ATTRNAME, diagnose
-    them, and return true if any have been found.  NODE can be a DECL
-    or a TYPE.  */
- 
- static bool
- diag_attr_exclusions (tree last_decl, tree node, tree attrname,
- 		      const attribute_spec *spec)
- {
-   const attribute_spec::exclusions *excl = spec->exclude;
- 
-   tree_code code = TREE_CODE (node);
- 
-   if ((code == FUNCTION_DECL && !excl->function
-        && (!excl->type || !spec->affects_type_identity))
-       || (code == VAR_DECL && !excl->variable
- 	  && (!excl->type || !spec->affects_type_identity))
-       || (((code == TYPE_DECL || RECORD_OR_UNION_TYPE_P (node)) && !excl->type)))
-     return false;
- 
-   /* True if an attribute that's mutually exclusive with ATTRNAME
-      has been found.  */
-   bool found = false;
- 
-   if (last_decl && last_decl != node && TREE_TYPE (last_decl) != node)
-     {
-       /* Check both the last DECL and its type for conflicts with
- 	 the attribute being added to the current decl or type.  */
-       found |= diag_attr_exclusions (last_decl, last_decl, attrname, spec);
-       tree decl_type = TREE_TYPE (last_decl);
-       found |= diag_attr_exclusions (last_decl, decl_type, attrname, spec);
-     }
- 
-   /* NODE is either the current DECL to which the attribute is being
-      applied or its TYPE.  For the former, consider the attributes on
-      both the DECL and its type.  */
-   tree attrs[2];
- 
-   if (DECL_P (node))
-     {
-       attrs[0] = DECL_ATTRIBUTES (node);
-       attrs[1] = TYPE_ATTRIBUTES (TREE_TYPE (node));
-     }
-   else
-     {
-       attrs[0] = TYPE_ATTRIBUTES (node);
-       attrs[1] = NULL_TREE;
-     }
- 
-   /* Iterate over the mutually exclusive attribute names and verify
-      that the symbol doesn't contain it.  */
-   for (unsigned i = 0; i != sizeof attrs / sizeof *attrs; ++i)
-     {
-       if (!attrs[i])
- 	continue;
- 
-       for ( ; excl->name; ++excl)
- 	{
- 	  /* Avoid checking the attribute against itself.  */
- 	  if (is_attribute_p (excl->name, attrname))
- 	    continue;
- 
- 	  if (!lookup_attribute (excl->name, attrs[i]))
- 	    continue;
- 
- 	  /* An exclusion may apply either to a function declaration,
- 	     type declaration, or a field/variable declaration, or
- 	     any subset of the three.  */
- 	  if (TREE_CODE (node) == FUNCTION_DECL
- 	      && !excl->function)
- 	    continue;
- 
- 	  if (TREE_CODE (node) == TYPE_DECL
- 	      && !excl->type)
- 	    continue;
- 
- 	  if ((TREE_CODE (node) == FIELD_DECL
- 	       || TREE_CODE (node) == VAR_DECL)
- 	      && !excl->variable)
- 	    continue;
- 
- 	  found = true;
- 
- 	  /* Print a note?  */
- 	  bool note = last_decl != NULL_TREE;
- 	  auto_diagnostic_group d;
- 	  if (TREE_CODE (node) == FUNCTION_DECL
- 	      && fndecl_built_in_p (node))
- 	    note &= warning (OPT_Wattributes,
- 			     "ignoring attribute %qE in declaration of "
- 			     "a built-in function %qD because it conflicts "
- 			     "with attribute %qs",
- 			     attrname, node, excl->name);
- 	  else
- 	    note &= warning (OPT_Wattributes,
- 			     "ignoring attribute %qE because "
- 			     "it conflicts with attribute %qs",
- 			     attrname, excl->name);
- 
- 	  if (note)
- 	    inform (DECL_SOURCE_LOCATION (last_decl),
- 		    "previous declaration here");
- 	}
-     }
- 
-   return found;
- }
- 
- /* Process the attributes listed in ATTRIBUTES and install them in *NODE,
-    which is either a DECL (including a TYPE_DECL) or a TYPE.  If a DECL,
-    it should be modified in place; if a TYPE, a copy should be created
-    unless ATTR_FLAG_TYPE_IN_PLACE is set in FLAGS.  FLAGS gives further
-    information, in the form of a bitwise OR of flags in enum attribute_flags
-    from tree.h.  Depending on these flags, some attributes may be
-    returned to be applied at a later stage (for example, to apply
-    a decl attribute to the declaration rather than to its type).  */
- 
- tree
- decl_attributes (tree *node, tree attributes, int flags,
- 		 tree last_decl /* = NULL_TREE */)
- {
-   tree returned_attrs = NULL_TREE;
- 
-   if (TREE_TYPE (*node) == error_mark_node || attributes == error_mark_node)
-     return NULL_TREE;
- 
-   if (!attributes_initialized)
-     init_attributes ();
- 
-   /* If this is a function and the user used #pragma GCC optimize, add the
-      options to the attribute((optimize(...))) list.  */
-   if (TREE_CODE (*node) == FUNCTION_DECL && current_optimize_pragma)
-     {
-       tree cur_attr = lookup_attribute ("optimize", attributes);
-       tree opts = copy_list (current_optimize_pragma);
- 
-       if (! cur_attr)
- 	attributes
- 	  = tree_cons (get_identifier ("optimize"), opts, attributes);
-       else
- 	TREE_VALUE (cur_attr) = chainon (opts, TREE_VALUE (cur_attr));
-     }
- 
-   if (TREE_CODE (*node) == FUNCTION_DECL
-       && optimization_current_node != optimization_default_node
-       && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node))
-     DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node) = optimization_current_node;
- 
-   /* If this is a function and the user used #pragma GCC target, add the
-      options to the attribute((target(...))) list.  */
-   if (TREE_CODE (*node) == FUNCTION_DECL
-       && current_target_pragma
-       && targetm.target_option.valid_attribute_p (*node, NULL_TREE,
- 						  current_target_pragma, 0))
-     {
-       tree cur_attr = lookup_attribute ("target", attributes);
-       tree opts = copy_list (current_target_pragma);
- 
-       if (! cur_attr)
- 	attributes = tree_cons (get_identifier ("target"), opts, attributes);
-       else
- 	TREE_VALUE (cur_attr) = chainon (opts, TREE_VALUE (cur_attr));
-     }
- 
-   /* A "naked" function attribute implies "noinline" and "noclone" for
-      those targets that support it.  */
-   if (TREE_CODE (*node) == FUNCTION_DECL
-       && attributes
-       && lookup_attribute ("naked", attributes) != NULL
-       && lookup_attribute_spec (get_identifier ("naked"))
-       && lookup_attribute ("noipa", attributes) == NULL)
- 	attributes = tree_cons (get_identifier ("noipa"), NULL, attributes);
- 
-   /* A "noipa" function attribute implies "noinline", "noclone" and "no_icf"
-      for those targets that support it.  */
-   if (TREE_CODE (*node) == FUNCTION_DECL
-       && attributes
-       && lookup_attribute ("noipa", attributes) != NULL
-       && lookup_attribute_spec (get_identifier ("noipa")))
-     {
-       if (lookup_attribute ("noinline", attributes) == NULL)
- 	attributes = tree_cons (get_identifier ("noinline"), NULL, attributes);
- 
-       if (lookup_attribute ("noclone", attributes) == NULL)
- 	attributes = tree_cons (get_identifier ("noclone"),  NULL, attributes);
- 
-       if (lookup_attribute ("no_icf", attributes) == NULL)
- 	attributes = tree_cons (get_identifier ("no_icf"),  NULL, attributes);
-     }
- 
-   targetm.insert_attributes (*node, &attributes);
- 
-   /* Note that attributes on the same declaration are not necessarily
-      in the same order as in the source.  */
-   for (tree attr = attributes; attr; attr = TREE_CHAIN (attr))
-     {
-       tree ns = get_attribute_namespace (attr);
-       tree name = get_attribute_name (attr);
-       tree args = TREE_VALUE (attr);
-       tree *anode = node;
-       const struct attribute_spec *spec
- 	= lookup_scoped_attribute_spec (ns, name);
-       int fn_ptr_quals = 0;
-       tree fn_ptr_tmp = NULL_TREE;
-       const bool cxx11_attr_p = cxx11_attribute_p (attr);
- 
-       if (spec == NULL)
- 	{
- 	  if (!(flags & (int) ATTR_FLAG_BUILT_IN))
- 	    {
- 	      if (ns == NULL_TREE || !cxx11_attr_p)
- 		warning (OPT_Wattributes, "%qE attribute directive ignored",
- 			 name);
- 	      else
- 		warning (OPT_Wattributes,
- 			 "%<%E::%E%> scoped attribute directive ignored",
- 			 ns, name);
- 	    }
- 	  continue;
- 	}
-       else
- 	{
- 	  int nargs = list_length (args);
- 	  if (nargs < spec->min_length
- 	      || (spec->max_length >= 0
- 		  && nargs > spec->max_length))
- 	    {
- 	      error ("wrong number of arguments specified for %qE attribute",
- 		     name);
- 	      if (spec->max_length < 0)
- 		inform (input_location, "expected %i or more, found %i",
- 			spec->min_length, nargs);
- 	      else
- 		inform (input_location, "expected between %i and %i, found %i",
- 			spec->min_length, spec->max_length, nargs);
- 	      continue;
- 	    }
- 	}
-       gcc_assert (is_attribute_p (spec->name, name));
- 
-       if (spec->decl_required && !DECL_P (*anode))
- 	{
- 	  if (flags & ((int) ATTR_FLAG_DECL_NEXT
- 		       | (int) ATTR_FLAG_FUNCTION_NEXT
- 		       | (int) ATTR_FLAG_ARRAY_NEXT))
- 	    {
- 	      /* Pass on this attribute to be tried again.  */
- 	      tree attr = tree_cons (name, args, NULL_TREE);
- 	      returned_attrs = chainon (returned_attrs, attr);
- 	      continue;
- 	    }
- 	  else
- 	    {
- 	      warning (OPT_Wattributes, "%qE attribute does not apply to types",
- 		       name);
- 	      continue;
- 	    }
- 	}
- 
-       /* If we require a type, but were passed a decl, set up to make a
- 	 new type and update the one in the decl.  ATTR_FLAG_TYPE_IN_PLACE
- 	 would have applied if we'd been passed a type, but we cannot modify
- 	 the decl's type in place here.  */
-       if (spec->type_required && DECL_P (*anode))
- 	{
- 	  anode = &TREE_TYPE (*anode);
- 	  flags &= ~(int) ATTR_FLAG_TYPE_IN_PLACE;
- 	}
- 
-       if (spec->function_type_required && TREE_CODE (*anode) != FUNCTION_TYPE
- 	  && TREE_CODE (*anode) != METHOD_TYPE)
- 	{
- 	  if (TREE_CODE (*anode) == POINTER_TYPE
- 	      && (TREE_CODE (TREE_TYPE (*anode)) == FUNCTION_TYPE
- 		  || TREE_CODE (TREE_TYPE (*anode)) == METHOD_TYPE))
- 	    {
- 	      /* OK, this is a bit convoluted.  We can't just make a copy
- 		 of the pointer type and modify its TREE_TYPE, because if
- 		 we change the attributes of the target type the pointer
- 		 type needs to have a different TYPE_MAIN_VARIANT.  So we
- 		 pull out the target type now, frob it as appropriate, and
- 		 rebuild the pointer type later.
- 
- 		 This would all be simpler if attributes were part of the
- 		 declarator, grumble grumble.  */
- 	      fn_ptr_tmp = TREE_TYPE (*anode);
- 	      fn_ptr_quals = TYPE_QUALS (*anode);
- 	      anode = &fn_ptr_tmp;
- 	      flags &= ~(int) ATTR_FLAG_TYPE_IN_PLACE;
- 	    }
- 	  else if (flags & (int) ATTR_FLAG_FUNCTION_NEXT)
- 	    {
- 	      /* Pass on this attribute to be tried again.  */
- 	      tree attr = tree_cons (name, args, NULL_TREE);
- 	      returned_attrs = chainon (returned_attrs, attr);
- 	      continue;
- 	    }
- 
- 	  if (TREE_CODE (*anode) != FUNCTION_TYPE
- 	      && TREE_CODE (*anode) != METHOD_TYPE)
- 	    {
- 	      warning (OPT_Wattributes,
- 		       "%qE attribute only applies to function types",
- 		       name);
- 	      continue;
- 	    }
- 	}
- 
-       if (TYPE_P (*anode)
- 	  && (flags & (int) ATTR_FLAG_TYPE_IN_PLACE)
- 	  && TYPE_SIZE (*anode) != NULL_TREE)
- 	{
- 	  warning (OPT_Wattributes, "type attributes ignored after type is already defined");
- 	  continue;
- 	}
- 
-       bool no_add_attrs = false;
- 
-       /* Check for exclusions with other attributes on the current
- 	 declation as well as the last declaration of the same
- 	 symbol already processed (if one exists).  Detect and
- 	 reject incompatible attributes.  */
-       bool built_in = flags & ATTR_FLAG_BUILT_IN;
-       if (spec->exclude
- 	  && (flag_checking || !built_in)
- 	  && !error_operand_p (last_decl))
- 	{
- 	  /* Always check attributes on user-defined functions.
- 	     Check them on built-ins only when -fchecking is set.
- 	     Ignore __builtin_unreachable -- it's both const and
- 	     noreturn.  */
- 
- 	  if (!built_in
- 	      || !DECL_P (*anode)
- 	      || DECL_BUILT_IN_CLASS (*anode) != BUILT_IN_NORMAL
- 	      || (DECL_FUNCTION_CODE (*anode) != BUILT_IN_UNREACHABLE
- 		  && (DECL_FUNCTION_CODE (*anode)
- 		      != BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE)))
- 	    {
- 	      bool no_add = diag_attr_exclusions (last_decl, *anode, name, spec);
- 	      if (!no_add && anode != node)
- 		no_add = diag_attr_exclusions (last_decl, *node, name, spec);
- 	      no_add_attrs |= no_add;
- 	    }
- 	}
- 
-       if (no_add_attrs)
- 	continue;
- 
-       if (spec->handler != NULL)
- 	{
- 	  int cxx11_flag = (cxx11_attr_p ? ATTR_FLAG_CXX11 : 0);
- 
- 	  /* Pass in an array of the current declaration followed
- 	     by the last pushed/merged declaration if one exists.
- 	     For calls that modify the type attributes of a DECL
- 	     and for which *ANODE is *NODE's type, also pass in
- 	     the DECL as the third element to use in diagnostics.
- 	     If the handler changes CUR_AND_LAST_DECL[0] replace
- 	     *ANODE with its value.  */
- 	  tree cur_and_last_decl[3] = { *anode, last_decl };
- 	  if (anode != node && DECL_P (*node))
- 	    cur_and_last_decl[2] = *node;
- 
- 	  tree ret = (spec->handler) (cur_and_last_decl, name, args,
- 				      flags|cxx11_flag, &no_add_attrs);
- 
- 	  *anode = cur_and_last_decl[0];
- 	  if (ret == error_mark_node)
- 	    {
- 	      warning (OPT_Wattributes, "%qE attribute ignored", name);
- 	      no_add_attrs = true;
- 	    }
- 	  else
- 	    returned_attrs = chainon (ret, returned_attrs);
- 	}
- 
-       /* Layout the decl in case anything changed.  */
-       if (spec->type_required && DECL_P (*node)
- 	  && (VAR_P (*node)
- 	      || TREE_CODE (*node) == PARM_DECL
- 	      || TREE_CODE (*node) == RESULT_DECL))
- 	relayout_decl (*node);
- 
-       if (!no_add_attrs)
- 	{
- 	  tree old_attrs;
- 	  tree a;
- 
- 	  if (DECL_P (*anode))
- 	    old_attrs = DECL_ATTRIBUTES (*anode);
- 	  else
- 	    old_attrs = TYPE_ATTRIBUTES (*anode);
- 
- 	  for (a = lookup_attribute (spec->name, old_attrs);
- 	       a != NULL_TREE;
- 	       a = lookup_attribute (spec->name, TREE_CHAIN (a)))
- 	    {
- 	      if (simple_cst_equal (TREE_VALUE (a), args) == 1)
- 		break;
- 	    }
- 
- 	  if (a == NULL_TREE)
- 	    {
- 	      /* This attribute isn't already in the list.  */
- 	      tree r;
- 	      /* Preserve the C++11 form.  */
- 	      if (cxx11_attr_p)
- 		r = tree_cons (build_tree_list (ns, name), args, old_attrs);
- 	      else
- 		r = tree_cons (name, args, old_attrs);
- 
- 	      if (DECL_P (*anode))
- 		DECL_ATTRIBUTES (*anode) = r;
- 	      else if (flags & (int) ATTR_FLAG_TYPE_IN_PLACE)
- 		{
- 		  TYPE_ATTRIBUTES (*anode) = r;
- 		  /* If this is the main variant, also push the attributes
- 		     out to the other variants.  */
- 		  if (*anode == TYPE_MAIN_VARIANT (*anode))
- 		    {
- 		      for (tree variant = *anode; variant;
- 			   variant = TYPE_NEXT_VARIANT (variant))
- 			{
- 			  if (TYPE_ATTRIBUTES (variant) == old_attrs)
- 			    TYPE_ATTRIBUTES (variant)
- 			      = TYPE_ATTRIBUTES (*anode);
- 			  else if (!lookup_attribute
- 				   (spec->name, TYPE_ATTRIBUTES (variant)))
- 			    TYPE_ATTRIBUTES (variant) = tree_cons
- 			      (name, args, TYPE_ATTRIBUTES (variant));
- 			}
- 		    }
- 		}
- 	      else
- 		*anode = build_type_attribute_variant (*anode, r);
- 	    }
- 	}
- 
-       if (fn_ptr_tmp)
- 	{
- 	  /* Rebuild the function pointer type and put it in the
- 	     appropriate place.  */
- 	  fn_ptr_tmp = build_pointer_type (fn_ptr_tmp);
- 	  if (fn_ptr_quals)
- 	    fn_ptr_tmp = build_qualified_type (fn_ptr_tmp, fn_ptr_quals);
- 	  if (DECL_P (*node))
- 	    TREE_TYPE (*node) = fn_ptr_tmp;
- 	  else
- 	    {
- 	      gcc_assert (TREE_CODE (*node) == POINTER_TYPE);
- 	      *node = fn_ptr_tmp;
- 	    }
- 	}
-     }
- 
-   return returned_attrs;
- }
- 
- /* Return TRUE iff ATTR has been parsed by the front-end as a C++-11
-    attribute.
- 
-    When G++ parses a C++11 attribute, it is represented as
-    a TREE_LIST which TREE_PURPOSE is itself a TREE_LIST.  TREE_PURPOSE
-    (TREE_PURPOSE (ATTR)) is the namespace of the attribute, and the
-    TREE_VALUE (TREE_PURPOSE (ATTR)) is its non-qualified name.  Please
-    use get_attribute_namespace and get_attribute_name to retrieve the
-    namespace and name of the attribute, as these accessors work with
-    GNU attributes as well.  */
- 
- bool
- cxx11_attribute_p (const_tree attr)
- {
-   if (attr == NULL_TREE
-       || TREE_CODE (attr) != TREE_LIST)
-     return false;
- 
-   return (TREE_CODE (TREE_PURPOSE (attr)) == TREE_LIST);
- }
- 
- /* Return the name of the attribute ATTR.  This accessor works on GNU
-    and C++11 (scoped) attributes.
- 
-    Please read the comments of cxx11_attribute_p to understand the
-    format of attributes.  */
- 
- tree
- get_attribute_name (const_tree attr)
- {
-   if (cxx11_attribute_p (attr))
-     return TREE_VALUE (TREE_PURPOSE (attr));
-   return TREE_PURPOSE (attr);
- }
- 
- /* Subroutine of set_method_tm_attributes.  Apply TM attribute ATTR
-    to the method FNDECL.  */
- 
- void
- apply_tm_attr (tree fndecl, tree attr)
- {
-   decl_attributes (&TREE_TYPE (fndecl), tree_cons (attr, NULL, NULL), 0);
- }
- 
- /* Makes a function attribute of the form NAME(ARG_NAME) and chains
-    it to CHAIN.  */
- 
- tree
- make_attribute (const char *name, const char *arg_name, tree chain)
- {
-   tree attr_name;
-   tree attr_arg_name;
-   tree attr_args;
-   tree attr;
- 
-   attr_name = get_identifier (name);
-   attr_arg_name = build_string (strlen (arg_name), arg_name);
-   attr_args = tree_cons (NULL_TREE, attr_arg_name, NULL_TREE);
-   attr = tree_cons (attr_name, attr_args, chain);
-   return attr;
- }
- 
- 
- /* Common functions used for target clone support.  */
- 
- /* Comparator function to be used in qsort routine to sort attribute
-    specification strings to "target".  */
- 
- static int
- attr_strcmp (const void *v1, const void *v2)
- {
-   const char *c1 = *(char *const*)v1;
-   const char *c2 = *(char *const*)v2;
-   return strcmp (c1, c2);
- }
- 
- /* ARGLIST is the argument to target attribute.  This function tokenizes
-    the comma separated arguments, sorts them and returns a string which
-    is a unique identifier for the comma separated arguments.   It also
-    replaces non-identifier characters "=,-" with "_".  */
- 
- char *
- sorted_attr_string (tree arglist)
- {
-   tree arg;
-   size_t str_len_sum = 0;
-   char **args = NULL;
-   char *attr_str, *ret_str;
-   char *attr = NULL;
-   unsigned int argnum = 1;
-   unsigned int i;
- 
-   for (arg = arglist; arg; arg = TREE_CHAIN (arg))
-     {
-       const char *str = TREE_STRING_POINTER (TREE_VALUE (arg));
-       size_t len = strlen (str);
-       str_len_sum += len + 1;
-       if (arg != arglist)
- 	argnum++;
-       for (i = 0; i < strlen (str); i++)
- 	if (str[i] == ',')
- 	  argnum++;
-     }
- 
-   attr_str = XNEWVEC (char, str_len_sum);
-   str_len_sum = 0;
-   for (arg = arglist; arg; arg = TREE_CHAIN (arg))
-     {
-       const char *str = TREE_STRING_POINTER (TREE_VALUE (arg));
-       size_t len = strlen (str);
-       memcpy (attr_str + str_len_sum, str, len);
-       attr_str[str_len_sum + len] = TREE_CHAIN (arg) ? ',' : '\0';
-       str_len_sum += len + 1;
-     }
- 
-   /* Replace "=,-" with "_".  */
-   for (i = 0; i < strlen (attr_str); i++)
-     if (attr_str[i] == '=' || attr_str[i]== '-')
-       attr_str[i] = '_';
- 
-   if (argnum == 1)
-     return attr_str;
- 
-   args = XNEWVEC (char *, argnum);
- 
-   i = 0;
-   attr = strtok (attr_str, ",");
-   while (attr != NULL)
-     {
-       args[i] = attr;
-       i++;
-       attr = strtok (NULL, ",");
-     }
- 
-   qsort (args, argnum, sizeof (char *), attr_strcmp);
- 
-   ret_str = XNEWVEC (char, str_len_sum);
-   str_len_sum = 0;
-   for (i = 0; i < argnum; i++)
-     {
-       size_t len = strlen (args[i]);
-       memcpy (ret_str + str_len_sum, args[i], len);
-       ret_str[str_len_sum + len] = i < argnum - 1 ? '_' : '\0';
-       str_len_sum += len + 1;
-     }
- 
-   XDELETEVEC (args);
-   XDELETEVEC (attr_str);
-   return ret_str;
- }
- 
- 
- /* This function returns true if FN1 and FN2 are versions of the same function,
-    that is, the target strings of the function decls are different.  This assumes
-    that FN1 and FN2 have the same signature.  */
- 
- bool
- common_function_versions (tree fn1, tree fn2)
- {
-   tree attr1, attr2;
-   char *target1, *target2;
-   bool result;
- 
-   if (TREE_CODE (fn1) != FUNCTION_DECL
-       || TREE_CODE (fn2) != FUNCTION_DECL)
-     return false;
- 
-   attr1 = lookup_attribute ("target", DECL_ATTRIBUTES (fn1));
-   attr2 = lookup_attribute ("target", DECL_ATTRIBUTES (fn2));
- 
-   /* At least one function decl should have the target attribute specified.  */
-   if (attr1 == NULL_TREE && attr2 == NULL_TREE)
-     return false;
- 
-   /* Diagnose missing target attribute if one of the decls is already
-      multi-versioned.  */
-   if (attr1 == NULL_TREE || attr2 == NULL_TREE)
-     {
-       if (DECL_FUNCTION_VERSIONED (fn1) || DECL_FUNCTION_VERSIONED (fn2))
- 	{
- 	  if (attr2 != NULL_TREE)
- 	    {
- 	      std::swap (fn1, fn2);
- 	      attr1 = attr2;
- 	    }
- 	  error_at (DECL_SOURCE_LOCATION (fn2),
- 		    "missing %<target%> attribute for multi-versioned %qD",
- 		    fn2);
- 	  inform (DECL_SOURCE_LOCATION (fn1),
- 		  "previous declaration of %qD", fn1);
- 	  /* Prevent diagnosing of the same error multiple times.  */
- 	  DECL_ATTRIBUTES (fn2)
- 	    = tree_cons (get_identifier ("target"),
- 			 copy_node (TREE_VALUE (attr1)),
- 			 DECL_ATTRIBUTES (fn2));
- 	}
-       return false;
-     }
- 
-   target1 = sorted_attr_string (TREE_VALUE (attr1));
-   target2 = sorted_attr_string (TREE_VALUE (attr2));
- 
-   /* The sorted target strings must be different for fn1 and fn2
-      to be versions.  */
-   if (strcmp (target1, target2) == 0)
-     result = false;
-   else
-     result = true;
- 
-   XDELETEVEC (target1);
-   XDELETEVEC (target2);
- 
-   return result;
- }
- 
- /* Return a new name by appending SUFFIX to the DECL name.  If make_unique
-    is true, append the full path name of the source file.  */
- 
- char *
- make_unique_name (tree decl, const char *suffix, bool make_unique)
- {
-   char *global_var_name;
-   int name_len;
-   const char *name;
-   const char *unique_name = NULL;
- 
-   name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
- 
-   /* Get a unique name that can be used globally without any chances
-      of collision at link time.  */
-   if (make_unique)
-     unique_name = IDENTIFIER_POINTER (get_file_function_name ("\0"));
- 
-   name_len = strlen (name) + strlen (suffix) + 2;
- 
-   if (make_unique)
-     name_len += strlen (unique_name) + 1;
-   global_var_name = XNEWVEC (char, name_len);
- 
-   /* Use '.' to concatenate names as it is demangler friendly.  */
-   if (make_unique)
-     snprintf (global_var_name, name_len, "%s.%s.%s", name, unique_name,
- 	      suffix);
-   else
-     snprintf (global_var_name, name_len, "%s.%s", name, suffix);
- 
-   return global_var_name;
- }
- 
- /* Make a dispatcher declaration for the multi-versioned function DECL.
-    Calls to DECL function will be replaced with calls to the dispatcher
-    by the front-end.  Return the decl created.  */
- 
- tree
- make_dispatcher_decl (const tree decl)
- {
-   tree func_decl;
-   char *func_name;
-   tree fn_type, func_type;
- 
-   func_name = xstrdup (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
- 
-   fn_type = TREE_TYPE (decl);
-   func_type = build_function_type (TREE_TYPE (fn_type),
- 				   TYPE_ARG_TYPES (fn_type));
-   
-   func_decl = build_fn_decl (func_name, func_type);
-   XDELETEVEC (func_name);
-   TREE_USED (func_decl) = 1;
-   DECL_CONTEXT (func_decl) = NULL_TREE;
-   DECL_INITIAL (func_decl) = error_mark_node;
-   DECL_ARTIFICIAL (func_decl) = 1;
-   /* Mark this func as external, the resolver will flip it again if
-      it gets generated.  */
-   DECL_EXTERNAL (func_decl) = 1;
-   /* This will be of type IFUNCs have to be externally visible.  */
-   TREE_PUBLIC (func_decl) = 1;
- 
-   return func_decl;  
- }
- 
- /* Returns true if decl is multi-versioned and DECL is the default function,
-    that is it is not tagged with target specific optimization.  */
- 
- bool
- is_function_default_version (const tree decl)
- {
-   if (TREE_CODE (decl) != FUNCTION_DECL
-       || !DECL_FUNCTION_VERSIONED (decl))
-     return false;
-   tree attr = lookup_attribute ("target", DECL_ATTRIBUTES (decl));
-   gcc_assert (attr);
-   attr = TREE_VALUE (TREE_VALUE (attr));
-   return (TREE_CODE (attr) == STRING_CST
- 	  && strcmp (TREE_STRING_POINTER (attr), "default") == 0);
- }
- 
- /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
-    is ATTRIBUTE.  */
- 
- tree
- build_decl_attribute_variant (tree ddecl, tree attribute)
- {
-   DECL_ATTRIBUTES (ddecl) = attribute;
-   return ddecl;
- }
- 
- /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
-    is ATTRIBUTE and its qualifiers are QUALS.
- 
-    Record such modified types already made so we don't make duplicates.  */
- 
- tree
- build_type_attribute_qual_variant (tree otype, tree attribute, int quals)
- {
-   tree ttype = otype;
-   if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
-     {
-       tree ntype;
- 
-       /* Building a distinct copy of a tagged type is inappropriate; it
- 	 causes breakage in code that expects there to be a one-to-one
- 	 relationship between a struct and its fields.
- 	 build_duplicate_type is another solution (as used in
- 	 handle_transparent_union_attribute), but that doesn't play well
- 	 with the stronger C++ type identity model.  */
-       if (TREE_CODE (ttype) == RECORD_TYPE
- 	  || TREE_CODE (ttype) == UNION_TYPE
- 	  || TREE_CODE (ttype) == QUAL_UNION_TYPE
- 	  || TREE_CODE (ttype) == ENUMERAL_TYPE)
- 	{
- 	  warning (OPT_Wattributes,
- 		   "ignoring attributes applied to %qT after definition",
- 		   TYPE_MAIN_VARIANT (ttype));
- 	  return build_qualified_type (ttype, quals);
- 	}
- 
-       ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
-       if (lang_hooks.types.copy_lang_qualifiers
- 	  && otype != TYPE_MAIN_VARIANT (otype))
- 	ttype = (lang_hooks.types.copy_lang_qualifiers
- 		 (ttype, TYPE_MAIN_VARIANT (otype)));
- 
-       tree dtype = ntype = build_distinct_type_copy (ttype);
- 
-       TYPE_ATTRIBUTES (ntype) = attribute;
- 
-       hashval_t hash = type_hash_canon_hash (ntype);
-       ntype = type_hash_canon (hash, ntype);
- 
-       if (ntype != dtype)
- 	/* This variant was already in the hash table, don't mess with
- 	   TYPE_CANONICAL.  */;
-       else if (TYPE_STRUCTURAL_EQUALITY_P (ttype)
- 	       || !comp_type_attributes (ntype, ttype))
- 	/* If the target-dependent attributes make NTYPE different from
- 	   its canonical type, we will need to use structural equality
- 	   checks for this type.
- 
- 	   We shouldn't get here for stripping attributes from a type;
- 	   the no-attribute type might not need structural comparison.  But
- 	   we can if was discarded from type_hash_table.  */
- 	SET_TYPE_STRUCTURAL_EQUALITY (ntype);
-       else if (TYPE_CANONICAL (ntype) == ntype)
- 	TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
- 
-       ttype = build_qualified_type (ntype, quals);
-       if (lang_hooks.types.copy_lang_qualifiers
- 	  && otype != TYPE_MAIN_VARIANT (otype))
- 	ttype = lang_hooks.types.copy_lang_qualifiers (ttype, otype);
-     }
-   else if (TYPE_QUALS (ttype) != quals)
-     ttype = build_qualified_type (ttype, quals);
- 
-   return ttype;
- }
- 
- /* Compare two identifier nodes representing attributes.
-    Return true if they are the same, false otherwise.  */
- 
- static bool
- cmp_attrib_identifiers (const_tree attr1, const_tree attr2)
- {
-   /* Make sure we're dealing with IDENTIFIER_NODEs.  */
-   gcc_checking_assert (TREE_CODE (attr1) == IDENTIFIER_NODE
- 		       && TREE_CODE (attr2) == IDENTIFIER_NODE);
- 
-   /* Identifiers can be compared directly for equality.  */
-   if (attr1 == attr2)
-     return true;
- 
-   return cmp_attribs (IDENTIFIER_POINTER (attr1), IDENTIFIER_LENGTH (attr1),
- 		      IDENTIFIER_POINTER (attr2), IDENTIFIER_LENGTH (attr2));
- }
- 
- /* Compare two constructor-element-type constants.  Return 1 if the lists
-    are known to be equal; otherwise return 0.  */
- 
- static bool
- simple_cst_list_equal (const_tree l1, const_tree l2)
- {
-   while (l1 != NULL_TREE && l2 != NULL_TREE)
-     {
-       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
- 	return false;
- 
-       l1 = TREE_CHAIN (l1);
-       l2 = TREE_CHAIN (l2);
-     }
- 
-   return l1 == l2;
- }
- 
- /* Check if "omp declare simd" attribute arguments, CLAUSES1 and CLAUSES2, are
-    the same.  */
- 
- static bool
- omp_declare_simd_clauses_equal (tree clauses1, tree clauses2)
- {
-   tree cl1, cl2;
-   for (cl1 = clauses1, cl2 = clauses2;
-        cl1 && cl2;
-        cl1 = OMP_CLAUSE_CHAIN (cl1), cl2 = OMP_CLAUSE_CHAIN (cl2))
-     {
-       if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_CODE (cl2))
- 	return false;
-       if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_SIMDLEN)
- 	{
- 	  if (simple_cst_equal (OMP_CLAUSE_DECL (cl1),
- 				OMP_CLAUSE_DECL (cl2)) != 1)
- 	    return false;
- 	}
-       switch (OMP_CLAUSE_CODE (cl1))
- 	{
- 	case OMP_CLAUSE_ALIGNED:
- 	  if (simple_cst_equal (OMP_CLAUSE_ALIGNED_ALIGNMENT (cl1),
- 				OMP_CLAUSE_ALIGNED_ALIGNMENT (cl2)) != 1)
- 	    return false;
- 	  break;
- 	case OMP_CLAUSE_LINEAR:
- 	  if (simple_cst_equal (OMP_CLAUSE_LINEAR_STEP (cl1),
- 				OMP_CLAUSE_LINEAR_STEP (cl2)) != 1)
- 	    return false;
- 	  break;
- 	case OMP_CLAUSE_SIMDLEN:
- 	  if (simple_cst_equal (OMP_CLAUSE_SIMDLEN_EXPR (cl1),
- 				OMP_CLAUSE_SIMDLEN_EXPR (cl2)) != 1)
- 	    return false;
- 	default:
- 	  break;
- 	}
-     }
-   return true;
- }
- 
- 
- /* Compare two attributes for their value identity.  Return true if the
-    attribute values are known to be equal; otherwise return false.  */
- 
- bool
- attribute_value_equal (const_tree attr1, const_tree attr2)
- {
-   if (TREE_VALUE (attr1) == TREE_VALUE (attr2))
-     return true;
- 
-   if (TREE_VALUE (attr1) != NULL_TREE
-       && TREE_CODE (TREE_VALUE (attr1)) == TREE_LIST
-       && TREE_VALUE (attr2) != NULL_TREE
-       && TREE_CODE (TREE_VALUE (attr2)) == TREE_LIST)
-     {
-       /* Handle attribute format.  */
-       if (is_attribute_p ("format", get_attribute_name (attr1)))
- 	{
- 	  attr1 = TREE_VALUE (attr1);
- 	  attr2 = TREE_VALUE (attr2);
- 	  /* Compare the archetypes (printf/scanf/strftime/...).  */
- 	  if (!cmp_attrib_identifiers (TREE_VALUE (attr1), TREE_VALUE (attr2)))
- 	    return false;
- 	  /* Archetypes are the same.  Compare the rest.  */
- 	  return (simple_cst_list_equal (TREE_CHAIN (attr1),
- 					 TREE_CHAIN (attr2)) == 1);
- 	}
-       return (simple_cst_list_equal (TREE_VALUE (attr1),
- 				     TREE_VALUE (attr2)) == 1);
-     }
- 
-   if (TREE_VALUE (attr1)
-       && TREE_CODE (TREE_VALUE (attr1)) == OMP_CLAUSE
-       && TREE_VALUE (attr2)
-       && TREE_CODE (TREE_VALUE (attr2)) == OMP_CLAUSE)
-     return omp_declare_simd_clauses_equal (TREE_VALUE (attr1),
- 					   TREE_VALUE (attr2));
- 
-   return (simple_cst_equal (TREE_VALUE (attr1), TREE_VALUE (attr2)) == 1);
- }
- 
- /* Return 0 if the attributes for two types are incompatible, 1 if they
-    are compatible, and 2 if they are nearly compatible (which causes a
-    warning to be generated).  */
- int
- comp_type_attributes (const_tree type1, const_tree type2)
- {
-   const_tree a1 = TYPE_ATTRIBUTES (type1);
-   const_tree a2 = TYPE_ATTRIBUTES (type2);
-   const_tree a;
- 
-   if (a1 == a2)
-     return 1;
-   for (a = a1; a != NULL_TREE; a = TREE_CHAIN (a))
-     {
-       const struct attribute_spec *as;
-       const_tree attr;
- 
-       as = lookup_attribute_spec (get_attribute_name (a));
-       if (!as || as->affects_type_identity == false)
- 	continue;
- 
-       attr = lookup_attribute (as->name, CONST_CAST_TREE (a2));
-       if (!attr || !attribute_value_equal (a, attr))
- 	break;
-     }
-   if (!a)
-     {
-       for (a = a2; a != NULL_TREE; a = TREE_CHAIN (a))
- 	{
- 	  const struct attribute_spec *as;
- 
- 	  as = lookup_attribute_spec (get_attribute_name (a));
- 	  if (!as || as->affects_type_identity == false)
- 	    continue;
- 
- 	  if (!lookup_attribute (as->name, CONST_CAST_TREE (a1)))
- 	    break;
- 	  /* We don't need to compare trees again, as we did this
- 	     already in first loop.  */
- 	}
-       /* All types - affecting identity - are equal, so
- 	 there is no need to call target hook for comparison.  */
-       if (!a)
- 	return 1;
-     }
-   if (lookup_attribute ("transaction_safe", CONST_CAST_TREE (a)))
-     return 0;
-   if ((lookup_attribute ("nocf_check", TYPE_ATTRIBUTES (type1)) != NULL)
-       ^ (lookup_attribute ("nocf_check", TYPE_ATTRIBUTES (type2)) != NULL))
-     return 0;
-   /* As some type combinations - like default calling-convention - might
-      be compatible, we have to call the target hook to get the final result.  */
-   return targetm.comp_type_attributes (type1, type2);
- }
- 
- /* PREDICATE acts as a function of type:
- 
-      (const_tree attr, const attribute_spec *as) -> bool
- 
-    where ATTR is an attribute and AS is its possibly-null specification.
-    Return a list of every attribute in attribute list ATTRS for which
-    PREDICATE is true.  Return ATTRS itself if PREDICATE returns true
-    for every attribute.  */
- 
- template<typename Predicate>
- tree
- remove_attributes_matching (tree attrs, Predicate predicate)
- {
-   tree new_attrs = NULL_TREE;
-   tree *ptr = &new_attrs;
-   const_tree start = attrs;
-   for (const_tree attr = attrs; attr; attr = TREE_CHAIN (attr))
-     {
-       tree name = get_attribute_name (attr);
-       const attribute_spec *as = lookup_attribute_spec (name);
-       const_tree end;
-       if (!predicate (attr, as))
- 	end = attr;
-       else if (start == attrs)
- 	continue;
-       else
- 	end = TREE_CHAIN (attr);
- 
-       for (; start != end; start = TREE_CHAIN (start))
- 	{
- 	  *ptr = tree_cons (TREE_PURPOSE (start),
- 			    TREE_VALUE (start), NULL_TREE);
- 	  TREE_CHAIN (*ptr) = NULL_TREE;
- 	  ptr = &TREE_CHAIN (*ptr);
- 	}
-       start = TREE_CHAIN (attr);
-     }
-   gcc_assert (!start || start == attrs);
-   return start ? attrs : new_attrs;
- }
- 
- /* If VALUE is true, return the subset of ATTRS that affect type identity,
-    otherwise return the subset of ATTRS that don't affect type identity.  */
- 
- tree
- affects_type_identity_attributes (tree attrs, bool value)
- {
-   auto predicate = [value](const_tree, const attribute_spec *as) -> bool
-     {
-       return bool (as && as->affects_type_identity) == value;
-     };
-   return remove_attributes_matching (attrs, predicate);
- }
- 
- /* Remove attributes that affect type identity from ATTRS unless the
-    same attributes occur in OK_ATTRS.  */
- 
- tree
- restrict_type_identity_attributes_to (tree attrs, tree ok_attrs)
- {
-   auto predicate = [ok_attrs](const_tree attr,
- 			      const attribute_spec *as) -> bool
-     {
-       if (!as || !as->affects_type_identity)
- 	return true;
- 
-       for (tree ok_attr = lookup_attribute (as->name, ok_attrs);
- 	   ok_attr;
- 	   ok_attr = lookup_attribute (as->name, TREE_CHAIN (ok_attr)))
- 	if (simple_cst_equal (TREE_VALUE (ok_attr), TREE_VALUE (attr)) == 1)
- 	  return true;
- 
-       return false;
-     };
-   return remove_attributes_matching (attrs, predicate);
- }
- 
- /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
-    is ATTRIBUTE.
- 
-    Record such modified types already made so we don't make duplicates.  */
- 
- tree
- build_type_attribute_variant (tree ttype, tree attribute)
- {
-   return build_type_attribute_qual_variant (ttype, attribute,
- 					    TYPE_QUALS (ttype));
- }
- 
- /* A variant of lookup_attribute() that can be used with an identifier
-    as the first argument, and where the identifier can be either
-    'text' or '__text__'.
- 
-    Given an attribute ATTR_IDENTIFIER, and a list of attributes LIST,
-    return a pointer to the attribute's list element if the attribute
-    is part of the list, or NULL_TREE if not found.  If the attribute
-    appears more than once, this only returns the first occurrence; the
-    TREE_CHAIN of the return value should be passed back in if further
-    occurrences are wanted.  ATTR_IDENTIFIER must be an identifier but
-    can be in the form 'text' or '__text__'.  */
- static tree
- lookup_ident_attribute (tree attr_identifier, tree list)
- {
-   gcc_checking_assert (TREE_CODE (attr_identifier) == IDENTIFIER_NODE);
- 
-   while (list)
-     {
-       gcc_checking_assert (TREE_CODE (get_attribute_name (list))
- 			   == IDENTIFIER_NODE);
- 
-       if (cmp_attrib_identifiers (attr_identifier,
- 				  get_attribute_name (list)))
- 	/* Found it.  */
- 	break;
-       list = TREE_CHAIN (list);
-     }
- 
-   return list;
- }
- 
- /* Remove any instances of attribute ATTR_NAME in LIST and return the
-    modified list.  */
- 
- tree
- remove_attribute (const char *attr_name, tree list)
- {
-   tree *p;
-   gcc_checking_assert (attr_name[0] != '_');
- 
-   for (p = &list; *p;)
-     {
-       tree l = *p;
- 
-       tree attr = get_attribute_name (l);
-       if (is_attribute_p (attr_name, attr))
- 	*p = TREE_CHAIN (l);
-       else
- 	p = &TREE_CHAIN (l);
-     }
- 
-   return list;
- }
- 
- /* Return an attribute list that is the union of a1 and a2.  */
- 
- tree
- merge_attributes (tree a1, tree a2)
- {
-   tree attributes;
- 
-   /* Either one unset?  Take the set one.  */
- 
-   if ((attributes = a1) == 0)
-     attributes = a2;
- 
-   /* One that completely contains the other?  Take it.  */
- 
-   else if (a2 != 0 && ! attribute_list_contained (a1, a2))
-     {
-       if (attribute_list_contained (a2, a1))
- 	attributes = a2;
-       else
- 	{
- 	  /* Pick the longest list, and hang on the other list.  */
- 
- 	  if (list_length (a1) < list_length (a2))
- 	    attributes = a2, a2 = a1;
- 
- 	  for (; a2 != 0; a2 = TREE_CHAIN (a2))
- 	    {
- 	      tree a;
- 	      for (a = lookup_ident_attribute (get_attribute_name (a2),
- 					       attributes);
- 		   a != NULL_TREE && !attribute_value_equal (a, a2);
- 		   a = lookup_ident_attribute (get_attribute_name (a2),
- 					       TREE_CHAIN (a)))
- 		;
- 	      if (a == NULL_TREE)
- 		{
- 		  a1 = copy_node (a2);
- 		  TREE_CHAIN (a1) = attributes;
- 		  attributes = a1;
- 		}
- 	    }
- 	}
-     }
-   return attributes;
- }
- 
- /* Given types T1 and T2, merge their attributes and return
-   the result.  */
- 
- tree
- merge_type_attributes (tree t1, tree t2)
- {
-   return merge_attributes (TYPE_ATTRIBUTES (t1),
- 			   TYPE_ATTRIBUTES (t2));
- }
- 
- /* Given decls OLDDECL and NEWDECL, merge their attributes and return
-    the result.  */
- 
- tree
- merge_decl_attributes (tree olddecl, tree newdecl)
- {
-   return merge_attributes (DECL_ATTRIBUTES (olddecl),
- 			   DECL_ATTRIBUTES (newdecl));
- }
- 
- /* Duplicate all attributes with name NAME in ATTR list to *ATTRS if
-    they are missing there.  */
- 
- void
- duplicate_one_attribute (tree *attrs, tree attr, const char *name)
- {
-   attr = lookup_attribute (name, attr);
-   if (!attr)
-     return;
-   tree a = lookup_attribute (name, *attrs);
-   while (attr)
-     {
-       tree a2;
-       for (a2 = a; a2; a2 = lookup_attribute (name, TREE_CHAIN (a2)))
- 	if (attribute_value_equal (attr, a2))
- 	  break;
-       if (!a2)
- 	{
- 	  a2 = copy_node (attr);
- 	  TREE_CHAIN (a2) = *attrs;
- 	  *attrs = a2;
- 	}
-       attr = lookup_attribute (name, TREE_CHAIN (attr));
-     }
- }
- 
- /* Duplicate all attributes from user DECL to the corresponding
-    builtin that should be propagated.  */
- 
- void
- copy_attributes_to_builtin (tree decl)
- {
-   tree b = builtin_decl_explicit (DECL_FUNCTION_CODE (decl));
-   if (b)
-     duplicate_one_attribute (&DECL_ATTRIBUTES (b),
- 			     DECL_ATTRIBUTES (decl), "omp declare simd");
- }
- 
- #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
- 
- /* Specialization of merge_decl_attributes for various Windows targets.
- 
-    This handles the following situation:
- 
-      __declspec (dllimport) int foo;
-      int foo;
- 
-    The second instance of `foo' nullifies the dllimport.  */
- 
- tree
- merge_dllimport_decl_attributes (tree old, tree new_tree)
- {
-   tree a;
-   int delete_dllimport_p = 1;
- 
-   /* What we need to do here is remove from `old' dllimport if it doesn't
-      appear in `new'.  dllimport behaves like extern: if a declaration is
-      marked dllimport and a definition appears later, then the object
-      is not dllimport'd.  We also remove a `new' dllimport if the old list
-      contains dllexport:  dllexport always overrides dllimport, regardless
-      of the order of declaration.  */
-   if (!VAR_OR_FUNCTION_DECL_P (new_tree))
-     delete_dllimport_p = 0;
-   else if (DECL_DLLIMPORT_P (new_tree)
-      	   && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
-     {
-       DECL_DLLIMPORT_P (new_tree) = 0;
-       warning (OPT_Wattributes, "%q+D already declared with dllexport "
- 	       "attribute: dllimport ignored", new_tree);
-     }
-   else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new_tree))
-     {
-       /* Warn about overriding a symbol that has already been used, e.g.:
- 	   extern int __attribute__ ((dllimport)) foo;
- 	   int* bar () {return &foo;}
- 	   int foo;
-       */
-       if (TREE_USED (old))
- 	{
- 	  warning (0, "%q+D redeclared without dllimport attribute "
- 		   "after being referenced with dll linkage", new_tree);
- 	  /* If we have used a variable's address with dllimport linkage,
- 	      keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
- 	      decl may already have had TREE_CONSTANT computed.
- 	      We still remove the attribute so that assembler code refers
- 	      to '&foo rather than '_imp__foo'.  */
- 	  if (VAR_P (old) && TREE_ADDRESSABLE (old))
- 	    DECL_DLLIMPORT_P (new_tree) = 1;
- 	}
- 
-       /* Let an inline definition silently override the external reference,
- 	 but otherwise warn about attribute inconsistency.  */
-       else if (VAR_P (new_tree) || !DECL_DECLARED_INLINE_P (new_tree))
- 	warning (OPT_Wattributes, "%q+D redeclared without dllimport "
- 		 "attribute: previous dllimport ignored", new_tree);
-     }
-   else
-     delete_dllimport_p = 0;
- 
-   a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new_tree));
- 
-   if (delete_dllimport_p)
-     a = remove_attribute ("dllimport", a);
- 
-   return a;
- }
- 
- /* Handle a "dllimport" or "dllexport" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- tree
- handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
- 		      bool *no_add_attrs)
- {
-   tree node = *pnode;
-   bool is_dllimport;
- 
-   /* These attributes may apply to structure and union types being created,
-      but otherwise should pass to the declaration involved.  */
-   if (!DECL_P (node))
-     {
-       if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
- 		   | (int) ATTR_FLAG_ARRAY_NEXT))
- 	{
- 	  *no_add_attrs = true;
- 	  return tree_cons (name, args, NULL_TREE);
- 	}
-       if (TREE_CODE (node) == RECORD_TYPE
- 	  || TREE_CODE (node) == UNION_TYPE)
- 	{
- 	  node = TYPE_NAME (node);
- 	  if (!node)
- 	    return NULL_TREE;
- 	}
-       else
- 	{
- 	  warning (OPT_Wattributes, "%qE attribute ignored",
- 		   name);
- 	  *no_add_attrs = true;
- 	  return NULL_TREE;
- 	}
-     }
- 
-   if (!VAR_OR_FUNCTION_DECL_P (node) && TREE_CODE (node) != TYPE_DECL)
-     {
-       *no_add_attrs = true;
-       warning (OPT_Wattributes, "%qE attribute ignored",
- 	       name);
-       return NULL_TREE;
-     }
- 
-   if (TREE_CODE (node) == TYPE_DECL
-       && TREE_CODE (TREE_TYPE (node)) != RECORD_TYPE
-       && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE)
-     {
-       *no_add_attrs = true;
-       warning (OPT_Wattributes, "%qE attribute ignored",
- 	       name);
-       return NULL_TREE;
-     }
- 
-   is_dllimport = is_attribute_p ("dllimport", name);
- 
-   /* Report error on dllimport ambiguities seen now before they cause
-      any damage.  */
-   if (is_dllimport)
-     {
-       /* Honor any target-specific overrides.  */
-       if (!targetm.valid_dllimport_attribute_p (node))
- 	*no_add_attrs = true;
- 
-      else if (TREE_CODE (node) == FUNCTION_DECL
- 	      && DECL_DECLARED_INLINE_P (node))
- 	{
- 	  warning (OPT_Wattributes, "inline function %q+D declared as "
- 		  "dllimport: attribute ignored", node);
- 	  *no_add_attrs = true;
- 	}
-       /* Like MS, treat definition of dllimported variables and
- 	 non-inlined functions on declaration as syntax errors.  */
-      else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
- 	{
- 	  error ("function %q+D definition is marked dllimport", node);
- 	  *no_add_attrs = true;
- 	}
- 
-      else if (VAR_P (node))
- 	{
- 	  if (DECL_INITIAL (node))
- 	    {
- 	      error ("variable %q+D definition is marked dllimport",
- 		     node);
- 	      *no_add_attrs = true;
- 	    }
- 
- 	  /* `extern' needn't be specified with dllimport.
- 	     Specify `extern' now and hope for the best.  Sigh.  */
- 	  DECL_EXTERNAL (node) = 1;
- 	  /* Also, implicitly give dllimport'd variables declared within
- 	     a function global scope, unless declared static.  */
- 	  if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
- 	    TREE_PUBLIC (node) = 1;
- 	  /* Clear TREE_STATIC because DECL_EXTERNAL is set, unless
- 	     it is a C++ static data member.  */
- 	  if (DECL_CONTEXT (node) == NULL_TREE
- 	      || !RECORD_OR_UNION_TYPE_P (DECL_CONTEXT (node)))
- 	    TREE_STATIC (node) = 0;
- 	}
- 
-       if (*no_add_attrs == false)
- 	DECL_DLLIMPORT_P (node) = 1;
-     }
-   else if (TREE_CODE (node) == FUNCTION_DECL
- 	   && DECL_DECLARED_INLINE_P (node)
- 	   && flag_keep_inline_dllexport)
-     /* An exported function, even if inline, must be emitted.  */
-     DECL_EXTERNAL (node) = 0;
- 
-   /*  Report error if symbol is not accessible at global scope.  */
-   if (!TREE_PUBLIC (node) && VAR_OR_FUNCTION_DECL_P (node))
-     {
-       error ("external linkage required for symbol %q+D because of "
- 	     "%qE attribute", node, name);
-       *no_add_attrs = true;
-     }
- 
-   /* A dllexport'd entity must have default visibility so that other
-      program units (shared libraries or the main executable) can see
-      it.  A dllimport'd entity must have default visibility so that
-      the linker knows that undefined references within this program
-      unit can be resolved by the dynamic linker.  */
-   if (!*no_add_attrs)
-     {
-       if (DECL_VISIBILITY_SPECIFIED (node)
- 	  && DECL_VISIBILITY (node) != VISIBILITY_DEFAULT)
- 	error ("%qE implies default visibility, but %qD has already "
- 	       "been declared with a different visibility",
- 	       name, node);
-       DECL_VISIBILITY (node) = VISIBILITY_DEFAULT;
-       DECL_VISIBILITY_SPECIFIED (node) = 1;
-     }
- 
-   return NULL_TREE;
- }
- 
- #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES  */
- 
- /* Given two lists of attributes, return true if list l2 is
-    equivalent to l1.  */
- 
- int
- attribute_list_equal (const_tree l1, const_tree l2)
- {
-   if (l1 == l2)
-     return 1;
- 
-   return attribute_list_contained (l1, l2)
- 	 && attribute_list_contained (l2, l1);
- }
- 
- /* Given two lists of attributes, return true if list L2 is
-    completely contained within L1.  */
- /* ??? This would be faster if attribute names were stored in a canonicalized
-    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
-    must be used to show these elements are equivalent (which they are).  */
- /* ??? It's not clear that attributes with arguments will always be handled
-    correctly.  */
- 
- int
- attribute_list_contained (const_tree l1, const_tree l2)
- {
-   const_tree t1, t2;
- 
-   /* First check the obvious, maybe the lists are identical.  */
-   if (l1 == l2)
-     return 1;
- 
-   /* Maybe the lists are similar.  */
-   for (t1 = l1, t2 = l2;
-        t1 != 0 && t2 != 0
-        && get_attribute_name (t1) == get_attribute_name (t2)
-        && TREE_VALUE (t1) == TREE_VALUE (t2);
-        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
-     ;
- 
-   /* Maybe the lists are equal.  */
-   if (t1 == 0 && t2 == 0)
-     return 1;
- 
-   for (; t2 != 0; t2 = TREE_CHAIN (t2))
-     {
-       const_tree attr;
-       /* This CONST_CAST is okay because lookup_attribute does not
- 	 modify its argument and the return value is assigned to a
- 	 const_tree.  */
-       for (attr = lookup_ident_attribute (get_attribute_name (t2),
- 					  CONST_CAST_TREE (l1));
- 	   attr != NULL_TREE && !attribute_value_equal (t2, attr);
- 	   attr = lookup_ident_attribute (get_attribute_name (t2),
- 					  TREE_CHAIN (attr)))
- 	;
- 
-       if (attr == NULL_TREE)
- 	return 0;
-     }
- 
-   return 1;
- }
- 
- /* The backbone of lookup_attribute().  ATTR_LEN is the string length
-    of ATTR_NAME, and LIST is not NULL_TREE.
- 
-    The function is called from lookup_attribute in order to optimize
-    for size.  */
- 
- tree
- private_lookup_attribute (const char *attr_name, size_t attr_len, tree list)
- {
-   while (list)
-     {
-       tree attr = get_attribute_name (list);
-       size_t ident_len = IDENTIFIER_LENGTH (attr);
-       if (cmp_attribs (attr_name, attr_len, IDENTIFIER_POINTER (attr),
- 		       ident_len))
- 	break;
-       list = TREE_CHAIN (list);
-     }
- 
-   return list;
- }
- 
- /* Return true if the function decl or type NODE has been declared
-    with attribute ANAME among attributes ATTRS.  */
- 
- static bool
- has_attribute (tree node, tree attrs, const char *aname)
- {
-   if (!strcmp (aname, "const"))
-     {
-       if (DECL_P (node) && TREE_READONLY (node))
- 	return true;
-     }
-   else if (!strcmp (aname, "malloc"))
-     {
-       if (DECL_P (node) && DECL_IS_MALLOC (node))
- 	return true;
-     }
-   else if (!strcmp (aname, "noreturn"))
-     {
-       if (DECL_P (node) && TREE_THIS_VOLATILE (node))
- 	return true;
-     }
-   else if (!strcmp (aname, "nothrow"))
-     {
-       if (TREE_NOTHROW (node))
- 	return true;
-     }
-   else if (!strcmp (aname, "pure"))
-     {
-       if (DECL_P (node) && DECL_PURE_P (node))
- 	return true;
-     }
- 
-   return lookup_attribute (aname, attrs);
- }
- 
- /* Return the number of mismatched function or type attributes between
-    the "template" function declaration TMPL and DECL.  The word "template"
-    doesn't necessarily refer to a C++ template but rather a declaration
-    whose attributes should be matched by those on DECL.  For a non-zero
-    return value set *ATTRSTR to a string representation of the list of
-    mismatched attributes with quoted names.
-    ATTRLIST is a list of additional attributes that SPEC should be
-    taken to ultimately be declared with.  */
- 
- unsigned
- decls_mismatched_attributes (tree tmpl, tree decl, tree attrlist,
- 			     const char* const blacklist[],
- 			     pretty_printer *attrstr)
- {
-   if (TREE_CODE (tmpl) != FUNCTION_DECL)
-     return 0;
- 
-   /* Avoid warning if either declaration or its type is deprecated.  */
-   if (TREE_DEPRECATED (tmpl)
-       || TREE_DEPRECATED (decl))
-     return 0;
- 
-   const tree tmpls[] = { tmpl, TREE_TYPE (tmpl) };
-   const tree decls[] = { decl, TREE_TYPE (decl) };
- 
-   if (TREE_DEPRECATED (tmpls[1])
-       || TREE_DEPRECATED (decls[1])
-       || TREE_DEPRECATED (TREE_TYPE (tmpls[1]))
-       || TREE_DEPRECATED (TREE_TYPE (decls[1])))
-     return 0;
- 
-   tree tmpl_attrs[] = { DECL_ATTRIBUTES (tmpl), TYPE_ATTRIBUTES (tmpls[1]) };
-   tree decl_attrs[] = { DECL_ATTRIBUTES (decl), TYPE_ATTRIBUTES (decls[1]) };
- 
-   if (!decl_attrs[0])
-     decl_attrs[0] = attrlist;
-   else if (!decl_attrs[1])
-     decl_attrs[1] = attrlist;
- 
-   /* Avoid warning if the template has no attributes.  */
-   if (!tmpl_attrs[0] && !tmpl_attrs[1])
-     return 0;
- 
-   /* Avoid warning if either declaration contains an attribute on
-      the white list below.  */
-   const char* const whitelist[] = {
-     "error", "warning"
-   };
- 
-   for (unsigned i = 0; i != 2; ++i)
-     for (unsigned j = 0; j != sizeof whitelist / sizeof *whitelist; ++j)
-       if (lookup_attribute (whitelist[j], tmpl_attrs[i])
- 	  || lookup_attribute (whitelist[j], decl_attrs[i]))
- 	return 0;
- 
-   /* Put together a list of the black-listed attributes that the template
-      is declared with and the declaration is not, in case it's not apparent
-      from the most recent declaration of the template.  */
-   unsigned nattrs = 0;
- 
-   for (unsigned i = 0; blacklist[i]; ++i)
-     {
-       /* Attribute leaf only applies to extern functions.  Avoid mentioning
- 	 it when it's missing from a static declaration.  */
-       if (!TREE_PUBLIC (decl)
- 	  && !strcmp ("leaf", blacklist[i]))
- 	continue;
- 
-       for (unsigned j = 0; j != 2; ++j)
- 	{
- 	  if (!has_attribute (tmpls[j], tmpl_attrs[j], blacklist[i]))
- 	    continue;
- 
- 	  bool found = false;
- 	  unsigned kmax = 1 + !!decl_attrs[1];
- 	  for (unsigned k = 0; k != kmax; ++k)
- 	    {
- 	      if (has_attribute (decls[k], decl_attrs[k], blacklist[i]))
- 		{
- 		  found = true;
- 		  break;
- 		}
- 	    }
- 
- 	  if (!found)
- 	    {
- 	      if (nattrs)
- 		pp_string (attrstr, ", ");
- 	      pp_begin_quote (attrstr, pp_show_color (global_dc->printer));
- 	      pp_string (attrstr, blacklist[i]);
- 	      pp_end_quote (attrstr, pp_show_color (global_dc->printer));
- 	      ++nattrs;
- 	    }
- 
- 	  break;
- 	}
-     }
- 
-   return nattrs;
- }
- 
- /* Issue a warning for the declaration ALIAS for TARGET where ALIAS
-    specifies either attributes that are incompatible with those of
-    TARGET, or attributes that are missing and that declaring ALIAS
-    with would benefit.  */
- 
- void
- maybe_diag_alias_attributes (tree alias, tree target)
- {
-   /* Do not expect attributes to match between aliases and ifunc
-      resolvers.  There is no obvious correspondence between them.  */
-   if (lookup_attribute ("ifunc", DECL_ATTRIBUTES (alias)))
-     return;
- 
-   const char* const blacklist[] = {
-     "alloc_align", "alloc_size", "cold", "const", "hot", "leaf", "malloc",
-     "nonnull", "noreturn", "nothrow", "pure", "returns_nonnull",
-     "returns_twice", NULL
-   };
- 
-   pretty_printer attrnames;
-   if (warn_attribute_alias > 1)
-     {
-       /* With -Wattribute-alias=2 detect alias declarations that are more
- 	 restrictive than their targets first.  Those indicate potential
- 	 codegen bugs.  */
-       if (unsigned n = decls_mismatched_attributes (alias, target, NULL_TREE,
- 						    blacklist, &attrnames))
- 	{
- 	  auto_diagnostic_group d;
- 	  if (warning_n (DECL_SOURCE_LOCATION (alias),
- 			 OPT_Wattribute_alias_, n,
- 			 "%qD specifies more restrictive attribute than "
- 			 "its target %qD: %s",
- 			 "%qD specifies more restrictive attributes than "
- 			 "its target %qD: %s",
- 			 alias, target, pp_formatted_text (&attrnames)))
- 	    inform (DECL_SOURCE_LOCATION (target),
- 		    "%qD target declared here", alias);
- 	  return;
- 	}
-     }
- 
-   /* Detect alias declarations that are less restrictive than their
-      targets.  Those suggest potential optimization opportunities
-      (solved by adding the missing attribute(s) to the alias).  */
-   if (unsigned n = decls_mismatched_attributes (target, alias, NULL_TREE,
- 						blacklist, &attrnames))
-     {
-       auto_diagnostic_group d;
-       if (warning_n (DECL_SOURCE_LOCATION (alias),
- 		     OPT_Wmissing_attributes, n,
- 		     "%qD specifies less restrictive attribute than "
- 		     "its target %qD: %s",
- 		     "%qD specifies less restrictive attributes than "
- 		     "its target %qD: %s",
- 		     alias, target, pp_formatted_text (&attrnames)))
- 	inform (DECL_SOURCE_LOCATION (target),
- 		"%qD target declared here", alias);
-     }
- }
- 
- /* Initialize a mapping RWM for a call to a function declared with
-    attribute access in ATTRS.  Each attribute positional operand
-    inserts one entry into the mapping with the operand number as
-    the key.  */
- 
- void
- init_attr_rdwr_indices (rdwr_map *rwm, tree attrs)
- {
-   if (!attrs)
-     return;
- 
-   for (tree access = attrs;
-        (access = lookup_attribute ("access", access));
-        access = TREE_CHAIN (access))
-     {
-       /* The TREE_VALUE of an attribute is a TREE_LIST whose TREE_VALUE
- 	 is the attribute argument's value.  */
-       tree mode = TREE_VALUE (access);
-       if (!mode)
- 	return;
- 
-       /* The (optional) list of VLA bounds.  */
-       tree vblist = TREE_CHAIN (mode);
-       if (vblist)
-        vblist = TREE_VALUE (vblist);
- 
-       mode = TREE_VALUE (mode);
-       if (TREE_CODE (mode) != STRING_CST)
- 	continue;
-       gcc_assert (TREE_CODE (mode) == STRING_CST);
- 
-       for (const char *m = TREE_STRING_POINTER (mode); *m; )
- 	{
- 	  attr_access acc = { };
- 
- 	  /* Skip the internal-only plus sign.  */
- 	  if (*m == '+')
- 	    ++m;
- 
- 	  acc.str = m;
- 	  acc.mode = acc.from_mode_char (*m);
- 	  acc.sizarg = UINT_MAX;
- 
- 	  const char *end;
- 	  acc.ptrarg = strtoul (++m, const_cast<char**>(&end), 10);
- 	  m = end;
- 
- 	  if (*m == '[')
- 	    {
- 	      /* Forms containing the square bracket are internal-only
- 		 (not specified by an attribute declaration), and used
- 		 for various forms of array and VLA parameters.  */
- 	      acc.internal_p = true;
- 
- 	      /* Search to the closing bracket and look at the preceding
- 		 code: it determines the form of the most significant
- 		 bound of the array.  Others prior to it encode the form
- 		 of interior VLA bounds.  They're not of interest here.  */
- 	      end = strchr (m, ']');
- 	      const char *p = end;
- 	      gcc_assert (p);
- 
- 	      while (ISDIGIT (p[-1]))
- 		--p;
- 
- 	      if (ISDIGIT (*p))
- 		{
- 		  /* A digit denotes a constant bound (as in T[3]).  */
- 		  acc.static_p = p[-1] == 's';
- 		  acc.minsize = strtoull (p, NULL, 10);
- 		}
- 	      else if (' ' == p[-1])
- 		{
- 		  /* A space denotes an ordinary array of unspecified bound
- 		     (as in T[]).  */
- 		  acc.minsize = 0;
- 		}
- 	      else if ('*' == p[-1] || '$' == p[-1])
- 		{
- 		  /* An asterisk denotes a VLA.  When the closing bracket
- 		     is followed by a comma and a dollar sign its bound is
- 		     on the list.  Otherwise it's a VLA with an unspecified
- 		     bound.  */
- 		  acc.static_p = p[-2] == 's';
- 		  acc.minsize = HOST_WIDE_INT_M1U;
- 		}
- 
- 	      m = end + 1;
- 	    }
- 
- 	  if (*m == ',')
- 	    {
- 	      ++m;
- 	      do
- 		{
- 		  if (*m == '$')
- 		    {
- 		      ++m;
- 		      if (!acc.size && vblist)
- 			{
- 			  /* Extract the list of VLA bounds for the current
- 			     parameter, store it in ACC.SIZE, and advance
- 			     to the list of bounds for the next VLA parameter.
- 			  */
- 			  acc.size = TREE_VALUE (vblist);
- 			  vblist = TREE_CHAIN (vblist);
- 			}
- 		    }
- 
- 		  if (ISDIGIT (*m))
- 		    {
- 		      /* Extract the positional argument.  It's absent
- 			 for VLAs whose bound doesn't name a function
- 			 parameter.  */
- 		      unsigned pos = strtoul (m, const_cast<char**>(&end), 10);
- 		      if (acc.sizarg == UINT_MAX)
- 			acc.sizarg = pos;
- 		      m = end;
- 		    }
- 		}
- 	      while (*m == '$');
- 	    }
- 
- 	  acc.end = m;
- 
- 	  bool existing;
- 	  auto &ref = rwm->get_or_insert (acc.ptrarg, &existing);
- 	  if (existing)
- 	    {
- 	      /* Merge the new spec with the existing.  */
- 	      if (acc.minsize == HOST_WIDE_INT_M1U)
- 		ref.minsize = HOST_WIDE_INT_M1U;
- 
- 	      if (acc.sizarg != UINT_MAX)
- 		ref.sizarg = acc.sizarg;
- 
- 	      if (acc.mode)
- 		ref.mode = acc.mode;
- 	    }
- 	  else
- 	    ref = acc;
- 
- 	  /* Unconditionally add an entry for the required pointer
- 	     operand of the attribute, and one for the optional size
- 	     operand when it's specified.  */
- 	  if (acc.sizarg != UINT_MAX)
- 	    rwm->put (acc.sizarg, acc);
- 	}
-     }
- }
- 
- /* Return the access specification for a function parameter PARM
-    or null if the current function has no such specification.  */
- 
- attr_access *
- get_parm_access (rdwr_map &rdwr_idx, tree parm,
- 		 tree fndecl /* = current_function_decl */)
- {
-   tree fntype = TREE_TYPE (fndecl);
-   init_attr_rdwr_indices (&rdwr_idx, TYPE_ATTRIBUTES (fntype));
- 
-   if (rdwr_idx.is_empty ())
-     return NULL;
- 
-   unsigned argpos = 0;
-   tree fnargs = DECL_ARGUMENTS (fndecl);
-   for (tree arg = fnargs; arg; arg = TREE_CHAIN (arg), ++argpos)
-     if (arg == parm)
-       return rdwr_idx.get (argpos);
- 
-   return NULL;
- }
- 
- /* Return the internal representation as STRING_CST.  Internal positional
-    arguments are zero-based.  */
- 
- tree
- attr_access::to_internal_string () const
- {
-   return build_string (end - str, str);
- }
- 
- /* Return the human-readable representation of the external attribute
-    specification (as it might appear in the source code) as STRING_CST.
-    External positional arguments are one-based.  */
- 
- tree
- attr_access::to_external_string () const
- {
-   char buf[80];
-   gcc_assert (mode != access_deferred);
-   int len = snprintf (buf, sizeof buf, "access (%s, %u",
- 		      mode_names[mode], ptrarg + 1);
-   if (sizarg != UINT_MAX)
-     len += snprintf (buf + len, sizeof buf - len, ", %u", sizarg + 1);
-   strcpy (buf + len, ")");
-   return build_string (len + 2, buf);
- }
- 
- /* Return the number of specified VLA bounds and set *nunspec to
-    the number of unspecified ones (those designated by [*]).  */
- 
- unsigned
- attr_access::vla_bounds (unsigned *nunspec) const
- {
-   *nunspec = 0;
-   for (const char* p = strrchr (str, ']'); p && *p != '['; --p)
-     if (*p == '*')
-       ++*nunspec;
-   return list_length (size);
- }
- 
- /* Reset front end-specific attribute access data from ATTRS.
-    Called from the free_lang_data pass.  */
- 
- /* static */ void
- attr_access::free_lang_data (tree attrs)
- {
-   for (tree acs = attrs; (acs = lookup_attribute ("access", acs));
-        acs = TREE_CHAIN (acs))
-     {
-       tree vblist = TREE_VALUE (acs);
-       vblist = TREE_CHAIN (vblist);
-       if (!vblist)
- 	continue;
- 
-       for (vblist = TREE_VALUE (vblist); vblist; vblist = TREE_CHAIN (vblist))
- 	{
- 	  tree *pvbnd = &TREE_VALUE (vblist);
- 	  if (!*pvbnd || DECL_P (*pvbnd))
- 	    continue;
- 
- 	  /* VLA bounds that are expressions as opposed to DECLs are
- 	     only used in the front end.  Reset them to keep front end
- 	     trees leaking into the middle end (see pr97172) and to
- 	     free up memory.  */
- 	  *pvbnd = NULL_TREE;
- 	}
-     }
- 
-   for (tree argspec = attrs; (argspec = lookup_attribute ("arg spec", argspec));
-        argspec = TREE_CHAIN (argspec))
-     {
-       /* Same as above.  */
-       tree *pvblist = &TREE_VALUE (argspec);
-       *pvblist = NULL_TREE;
-     }
- }
- 
- /* Defined in attr_access.  */
- constexpr char attr_access::mode_chars[];
- constexpr char attr_access::mode_names[][11];
- 
- /* Format an array, including a VLA, pointed to by TYPE and used as
-    a function parameter as a human-readable string.  ACC describes
-    an access to the parameter and is used to determine the outermost
-    form of the array including its bound which is otherwise obviated
-    by its decay to pointer.  Return the formatted string.  */
- 
- std::string
- attr_access::array_as_string (tree type) const
- {
-   std::string typstr;
- 
-   if (type == error_mark_node)
-     return std::string ();
- 
-   if (this->str)
-     {
-       /* For array parameters (but not pointers) create a temporary array
- 	 type that corresponds to the form of the parameter including its
- 	 qualifiers even though they apply to the pointer, not the array
- 	 type.  */
-       const bool vla_p = minsize == HOST_WIDE_INT_M1U;
-       tree eltype = TREE_TYPE (type);
-       tree index_type = NULL_TREE;
- 
-       if (minsize == HOST_WIDE_INT_M1U)
- 	{
- 	  /* Determine if this is a VLA (an array whose most significant
- 	     bound is nonconstant and whose access string has "$]" in it)
- 	     extract the bound expression from SIZE.  */
- 	  const char *p = end;
- 	  for ( ; p != str && *p-- != ']'; );
- 	  if (*p == '$')
- 	    /* SIZE may have been cleared.  Use it with care.  */
- 	    index_type = build_index_type (size ? TREE_VALUE (size) : size);
- 	}
-       else if (minsize)
- 	index_type = build_index_type (size_int (minsize - 1));
- 
-       tree arat = NULL_TREE;
-       if (static_p || vla_p)
- 	{
- 	  tree flag = static_p ? integer_one_node : NULL_TREE;
- 	  /* Hack: there's no language-independent way to encode
- 	     the "static" specifier or the "*" notation in an array type.
- 	     Add a "fake" attribute to have the pretty-printer add "static"
- 	     or "*".  The "[static N]" notation is only valid in the most
- 	     significant bound but [*] can be used for any bound.  Because
- 	     [*] is represented the same as [0] this hack only works for
- 	     the most significant bound like static and the others are
- 	     rendered as [0].  */
- 	  arat = build_tree_list (get_identifier ("array"), flag);
- 	}
- 
-       const int quals = TYPE_QUALS (type);
-       type = build_array_type (eltype, index_type);
-       type = build_type_attribute_qual_variant (type, arat, quals);
-     }
- 
-   /* Format the type using the current pretty printer.  The generic tree
-      printer does a terrible job.  */
-   pretty_printer *pp = global_dc->printer->clone ();
-   pp_printf (pp, "%qT", type);
-   typstr = pp_formatted_text (pp);
-   delete pp;
- 
-   return typstr;
- }
- 
- #if CHECKING_P
- 
- namespace selftest
- {
- 
- /* Helper types to verify the consistency attribute exclusions.  */
- 
- typedef std::pair<const char *, const char *> excl_pair;
- 
- struct excl_hash_traits: typed_noop_remove<excl_pair>
- {
-   typedef excl_pair  value_type;
-   typedef value_type compare_type;
- 
-   static hashval_t hash (const value_type &x)
-   {
-     hashval_t h1 = htab_hash_string (x.first);
-     hashval_t h2 = htab_hash_string (x.second);
-     return h1 ^ h2;
-   }
- 
-   static bool equal (const value_type &x, const value_type &y)
-   {
-     return !strcmp (x.first, y.first) && !strcmp (x.second, y.second);
-   }
- 
-   static void mark_deleted (value_type &x)
-   {
-     x = value_type (NULL, NULL);
-   }
- 
-   static const bool empty_zero_p = false;
- 
-   static void mark_empty (value_type &x)
-   {
-     x = value_type ("", "");
-   }
- 
-   static bool is_deleted (const value_type &x)
-   {
-     return !x.first && !x.second;
-   }
- 
-   static bool is_empty (const value_type &x)
-   {
-     return !*x.first && !*x.second;
-   }
- };
- 
- 
- /* Self-test to verify that each attribute exclusion is symmetric,
-    meaning that if attribute A is encoded as incompatible with
-    attribute B then the opposite relationship is also encoded.
-    This test also detects most cases of misspelled attribute names
-    in exclusions.  */
- 
- static void
- test_attribute_exclusions ()
- {
-   /* Iterate over the array of attribute tables first (with TI0 as
-      the index) and over the array of attribute_spec in each table
-      (with SI0 as the index).  */
-   const size_t ntables = ARRAY_SIZE (attribute_tables);
- 
-   /* Set of pairs of mutually exclusive attributes.  */
-   typedef hash_set<excl_pair, false, excl_hash_traits> exclusion_set;
-   exclusion_set excl_set;
- 
-   for (size_t ti0 = 0; ti0 != ntables; ++ti0)
-     for (size_t s0 = 0; attribute_tables[ti0][s0].name; ++s0)
-       {
- 	const attribute_spec::exclusions *excl
- 	  = attribute_tables[ti0][s0].exclude;
- 
- 	/* Skip each attribute that doesn't define exclusions.  */
- 	if (!excl)
- 	  continue;
- 
- 	const char *attr_name = attribute_tables[ti0][s0].name;
- 
- 	/* Iterate over the set of exclusions for every attribute
- 	   (with EI0 as the index) adding the exclusions defined
- 	   for each to the set.  */
- 	for (size_t ei0 = 0; excl[ei0].name; ++ei0)
- 	  {
- 	    const char *excl_name = excl[ei0].name;
- 
- 	    if (!strcmp (attr_name, excl_name))
- 	      continue;
- 
- 	    excl_set.add (excl_pair (attr_name, excl_name));
- 	  }
-       }
- 
-   /* Traverse the set of mutually exclusive pairs of attributes
-      and verify that they are symmetric.  */
-   for (exclusion_set::iterator it = excl_set.begin ();
-        it != excl_set.end ();
-        ++it)
-     {
-       if (!excl_set.contains (excl_pair ((*it).second, (*it).first)))
- 	{
- 	  /* An exclusion for an attribute has been found that
- 	     doesn't have a corresponding exclusion in the opposite
- 	     direction.  */
- 	  char desc[120];
- 	  sprintf (desc, "'%s' attribute exclusion '%s' must be symmetric",
- 		   (*it).first, (*it).second);
- 	  fail (SELFTEST_LOCATION, desc);
- 	}
-     }
- }
- 
- void
- attribute_c_tests ()
- {
-   test_attribute_exclusions ();
- }
- 
- } /* namespace selftest */
- 
- #endif /* CHECKING_P */
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/attribs.cc gcc-12.1.0/gcc/attribs.cc
*** gcc-11.3.0/gcc/attribs.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/attribs.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,2670 ----
+ /* Functions dealing with attribute handling, used by most front ends.
+    Copyright (C) 1992-2022 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #define INCLUDE_STRING
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "target.h"
+ #include "tree.h"
+ #include "stringpool.h"
+ #include "diagnostic-core.h"
+ #include "attribs.h"
+ #include "fold-const.h"
+ #include "stor-layout.h"
+ #include "langhooks.h"
+ #include "plugin.h"
+ #include "selftest.h"
+ #include "hash-set.h"
+ #include "diagnostic.h"
+ #include "pretty-print.h"
+ #include "tree-pretty-print.h"
+ #include "intl.h"
+ 
+ /* Table of the tables of attributes (common, language, format, machine)
+    searched.  */
+ static const struct attribute_spec *attribute_tables[4];
+ 
+ /* Substring representation.  */
+ 
+ struct substring
+ {
+   const char *str;
+   int length;
+ };
+ 
+ /* Simple hash function to avoid need to scan whole string.  */
+ 
+ static inline hashval_t
+ substring_hash (const char *str, int l)
+ {
+   return str[0] + str[l - 1] * 256 + l * 65536;
+ }
+ 
+ /* Used for attribute_hash.  */
+ 
+ struct attribute_hasher : nofree_ptr_hash <attribute_spec>
+ {
+   typedef substring *compare_type;
+   static inline hashval_t hash (const attribute_spec *);
+   static inline bool equal (const attribute_spec *, const substring *);
+ };
+ 
+ inline hashval_t
+ attribute_hasher::hash (const attribute_spec *spec)
+ {
+   const int l = strlen (spec->name);
+   return substring_hash (spec->name, l);
+ }
+ 
+ inline bool
+ attribute_hasher::equal (const attribute_spec *spec, const substring *str)
+ {
+   return (strncmp (spec->name, str->str, str->length) == 0
+ 	  && !spec->name[str->length]);
+ }
+ 
+ /* Scoped attribute name representation.  */
+ 
+ struct scoped_attributes
+ {
+   const char *ns;
+   vec<attribute_spec> attributes;
+   hash_table<attribute_hasher> *attribute_hash;
+   /* True if we should not warn about unknown attributes in this NS.  */
+   bool ignored_p;
+ };
+ 
+ /* The table of scope attributes.  */
+ static vec<scoped_attributes> attributes_table;
+ 
+ static scoped_attributes* find_attribute_namespace (const char*);
+ static void register_scoped_attribute (const struct attribute_spec *,
+ 				       scoped_attributes *);
+ static const struct attribute_spec *lookup_scoped_attribute_spec (const_tree,
+ 								  const_tree);
+ 
+ static bool attributes_initialized = false;
+ 
+ /* Default empty table of attributes.  */
+ 
+ static const struct attribute_spec empty_attribute_table[] =
+ {
+   { NULL, 0, 0, false, false, false, false, NULL, NULL }
+ };
+ 
+ /* Return base name of the attribute.  Ie '__attr__' is turned into 'attr'.
+    To avoid need for copying, we simply return length of the string.  */
+ 
+ static void
+ extract_attribute_substring (struct substring *str)
+ {
+   canonicalize_attr_name (str->str, str->length);
+ }
+ 
+ /* Insert an array of attributes ATTRIBUTES into a namespace.  This
+    array must be NULL terminated.  NS is the name of attribute
+    namespace.  IGNORED_P is true iff all unknown attributes in this
+    namespace should be ignored for the purposes of -Wattributes.  The
+    function returns the namespace into which the attributes have been
+    registered.  */
+ 
+ scoped_attributes *
+ register_scoped_attributes (const struct attribute_spec *attributes,
+ 			    const char *ns, bool ignored_p /*=false*/)
+ {
+   scoped_attributes *result = NULL;
+ 
+   /* See if we already have attributes in the namespace NS.  */
+   result = find_attribute_namespace (ns);
+ 
+   if (result == NULL)
+     {
+       /* We don't have any namespace NS yet.  Create one.  */
+       scoped_attributes sa;
+ 
+       if (attributes_table.is_empty ())
+ 	attributes_table.create (64);
+ 
+       memset (&sa, 0, sizeof (sa));
+       sa.ns = ns;
+       sa.attributes.create (64);
+       sa.ignored_p = ignored_p;
+       result = attributes_table.safe_push (sa);
+       result->attribute_hash = new hash_table<attribute_hasher> (200);
+     }
+   else
+     result->ignored_p |= ignored_p;
+ 
+   /* Really add the attributes to their namespace now.  */
+   for (unsigned i = 0; attributes[i].name != NULL; ++i)
+     {
+       result->attributes.safe_push (attributes[i]);
+       register_scoped_attribute (&attributes[i], result);
+     }
+ 
+   gcc_assert (result != NULL);
+ 
+   return result;
+ }
+ 
+ /* Return the namespace which name is NS, NULL if none exist.  */
+ 
+ static scoped_attributes*
+ find_attribute_namespace (const char* ns)
+ {
+   for (scoped_attributes &iter : attributes_table)
+     if (ns == iter.ns
+ 	|| (iter.ns != NULL
+ 	    && ns != NULL
+ 	    && !strcmp (iter.ns, ns)))
+       return &iter;
+   return NULL;
+ }
+ 
+ /* Make some sanity checks on the attribute tables.  */
+ 
+ static void
+ check_attribute_tables (void)
+ {
+   for (size_t i = 0; i < ARRAY_SIZE (attribute_tables); i++)
+     for (size_t j = 0; attribute_tables[i][j].name != NULL; j++)
+       {
+ 	/* The name must not begin and end with __.  */
+ 	const char *name = attribute_tables[i][j].name;
+ 	int len = strlen (name);
+ 
+ 	gcc_assert (!(name[0] == '_' && name[1] == '_'
+ 		      && name[len - 1] == '_' && name[len - 2] == '_'));
+ 
+ 	/* The minimum and maximum lengths must be consistent.  */
+ 	gcc_assert (attribute_tables[i][j].min_length >= 0);
+ 
+ 	gcc_assert (attribute_tables[i][j].max_length == -1
+ 		    || (attribute_tables[i][j].max_length
+ 			>= attribute_tables[i][j].min_length));
+ 
+ 	/* An attribute cannot require both a DECL and a TYPE.  */
+ 	gcc_assert (!attribute_tables[i][j].decl_required
+ 		    || !attribute_tables[i][j].type_required);
+ 
+ 	  /* If an attribute requires a function type, in particular
+ 	     it requires a type.  */
+ 	gcc_assert (!attribute_tables[i][j].function_type_required
+ 		    || attribute_tables[i][j].type_required);
+       }
+ 
+   /* Check that each name occurs just once in each table.  */
+   for (size_t i = 0; i < ARRAY_SIZE (attribute_tables); i++)
+     for (size_t j = 0; attribute_tables[i][j].name != NULL; j++)
+       for (size_t k = j + 1; attribute_tables[i][k].name != NULL; k++)
+ 	gcc_assert (strcmp (attribute_tables[i][j].name,
+ 			    attribute_tables[i][k].name));
+ 
+   /* Check that no name occurs in more than one table.  Names that
+      begin with '*' are exempt, and may be overridden.  */
+   for (size_t i = 0; i < ARRAY_SIZE (attribute_tables); i++)
+     for (size_t j = i + 1; j < ARRAY_SIZE (attribute_tables); j++)
+       for (size_t k = 0; attribute_tables[i][k].name != NULL; k++)
+ 	for (size_t l = 0; attribute_tables[j][l].name != NULL; l++)
+ 	  gcc_assert (attribute_tables[i][k].name[0] == '*'
+ 		      || strcmp (attribute_tables[i][k].name,
+ 				 attribute_tables[j][l].name));
+ }
+ 
+ /* Used to stash pointers to allocated memory so that we can free them at
+    the end of parsing of all TUs. */
+ static vec<attribute_spec *> ignored_attributes_table;
+ 
+ /* Parse arguments V of -Wno-attributes=.
+    Currently we accept:
+      vendor::attr
+      vendor::
+    This functions also registers the parsed attributes so that we don't
+    warn that we don't recognize them.  */
+ 
+ void
+ handle_ignored_attributes_option (vec<char *> *v)
+ {
+   if (v == nullptr)
+     return;
+ 
+   for (auto opt : v)
+     {
+       char *cln = strstr (opt, "::");
+       /* We don't accept '::attr'.  */
+       if (cln == nullptr || cln == opt)
+ 	{
+ 	  error ("wrong argument to ignored attributes");
+ 	  inform (input_location, "valid format is %<ns::attr%> or %<ns::%>");
+ 	  continue;
+ 	}
+       const char *vendor_start = opt;
+       ptrdiff_t vendor_len = cln - opt;
+       const char *attr_start = cln + 2;
+       /* This could really use rawmemchr :(.  */
+       ptrdiff_t attr_len = strchr (attr_start, '\0') - attr_start;
+       /* Verify that they look valid.  */
+       auto valid_p = [](const char *const s, ptrdiff_t len) {
+ 	bool ok = false;
+ 
+ 	for (int i = 0; i < len; ++i)
+ 	  if (ISALNUM (s[i]))
+ 	    ok = true;
+ 	  else if (s[i] != '_')
+ 	    return false;
+ 
+ 	return ok;
+       };
+       if (!valid_p (vendor_start, vendor_len))
+ 	{
+ 	  error ("wrong argument to ignored attributes");
+ 	  continue;
+ 	}
+       canonicalize_attr_name (vendor_start, vendor_len);
+       /* We perform all this hijinks so that we don't have to copy OPT.  */
+       tree vendor_id = get_identifier_with_length (vendor_start, vendor_len);
+       const char *attr;
+       /* In the "vendor::" case, we should ignore *any* attribute coming
+ 	 from this attribute namespace.  */
+       if (attr_len > 0)
+ 	{
+ 	  if (!valid_p (attr_start, attr_len))
+ 	    {
+ 	      error ("wrong argument to ignored attributes");
+ 	      continue;
+ 	    }
+ 	  canonicalize_attr_name (attr_start, attr_len);
+ 	  tree attr_id = get_identifier_with_length (attr_start, attr_len);
+ 	  attr = IDENTIFIER_POINTER (attr_id);
+ 	  /* If we've already seen this vendor::attr, ignore it.  Attempting to
+ 	     register it twice would lead to a crash.  */
+ 	  if (lookup_scoped_attribute_spec (vendor_id, attr_id))
+ 	    continue;
+ 	}
+       else
+ 	attr = nullptr;
+       /* Create a table with extra attributes which we will register.
+ 	 We can't free it here, so squirrel away the pointers.  */
+       attribute_spec *table = new attribute_spec[2];
+       ignored_attributes_table.safe_push (table);
+       table[0] = { attr, 0, -2, false, false, false, false, nullptr, nullptr };
+       table[1] = { nullptr, 0, 0, false, false, false, false, nullptr,
+ 		   nullptr };
+       register_scoped_attributes (table, IDENTIFIER_POINTER (vendor_id), !attr);
+     }
+ }
+ 
+ /* Free data we might have allocated when adding extra attributes.  */
+ 
+ void
+ free_attr_data ()
+ {
+   for (auto x : ignored_attributes_table)
+     delete[] x;
+   ignored_attributes_table.release ();
+ }
+ 
+ /* Initialize attribute tables, and make some sanity checks if checking is
+    enabled.  */
+ 
+ void
+ init_attributes (void)
+ {
+   size_t i;
+ 
+   if (attributes_initialized)
+     return;
+ 
+   attribute_tables[0] = lang_hooks.common_attribute_table;
+   attribute_tables[1] = lang_hooks.attribute_table;
+   attribute_tables[2] = lang_hooks.format_attribute_table;
+   attribute_tables[3] = targetm.attribute_table;
+ 
+   /* Translate NULL pointers to pointers to the empty table.  */
+   for (i = 0; i < ARRAY_SIZE (attribute_tables); i++)
+     if (attribute_tables[i] == NULL)
+       attribute_tables[i] = empty_attribute_table;
+ 
+   if (flag_checking)
+     check_attribute_tables ();
+ 
+   for (i = 0; i < ARRAY_SIZE (attribute_tables); ++i)
+     /* Put all the GNU attributes into the "gnu" namespace.  */
+     register_scoped_attributes (attribute_tables[i], "gnu");
+ 
+   vec<char *> *ignored = (vec<char *> *) flag_ignored_attributes;
+   handle_ignored_attributes_option (ignored);
+ 
+   invoke_plugin_callbacks (PLUGIN_ATTRIBUTES, NULL);
+   attributes_initialized = true;
+ }
+ 
+ /* Insert a single ATTR into the attribute table.  */
+ 
+ void
+ register_attribute (const struct attribute_spec *attr)
+ {
+   register_scoped_attribute (attr, find_attribute_namespace ("gnu"));
+ }
+ 
+ /* Insert a single attribute ATTR into a namespace of attributes.  */
+ 
+ static void
+ register_scoped_attribute (const struct attribute_spec *attr,
+ 			   scoped_attributes *name_space)
+ {
+   struct substring str;
+   attribute_spec **slot;
+ 
+   gcc_assert (attr != NULL && name_space != NULL);
+ 
+   gcc_assert (name_space->attribute_hash);
+ 
+   str.str = attr->name;
+   str.length = strlen (str.str);
+ 
+   /* Attribute names in the table must be in the form 'text' and not
+      in the form '__text__'.  */
+   gcc_checking_assert (!canonicalize_attr_name (str.str, str.length));
+ 
+   slot = name_space->attribute_hash
+ 	 ->find_slot_with_hash (&str, substring_hash (str.str, str.length),
+ 				INSERT);
+   gcc_assert (!*slot || attr->name[0] == '*');
+   *slot = CONST_CAST (struct attribute_spec *, attr);
+ }
+ 
+ /* Return the spec for the scoped attribute with namespace NS and
+    name NAME.   */
+ 
+ static const struct attribute_spec *
+ lookup_scoped_attribute_spec (const_tree ns, const_tree name)
+ {
+   struct substring attr;
+   scoped_attributes *attrs;
+ 
+   const char *ns_str = (ns != NULL_TREE) ? IDENTIFIER_POINTER (ns): NULL;
+ 
+   attrs = find_attribute_namespace (ns_str);
+ 
+   if (attrs == NULL)
+     return NULL;
+ 
+   attr.str = IDENTIFIER_POINTER (name);
+   attr.length = IDENTIFIER_LENGTH (name);
+   extract_attribute_substring (&attr);
+   return attrs->attribute_hash->find_with_hash (&attr,
+ 						substring_hash (attr.str,
+ 							       	attr.length));
+ }
+ 
+ /* Return the spec for the attribute named NAME.  If NAME is a TREE_LIST,
+    it also specifies the attribute namespace.  */
+ 
+ const struct attribute_spec *
+ lookup_attribute_spec (const_tree name)
+ {
+   tree ns;
+   if (TREE_CODE (name) == TREE_LIST)
+     {
+       ns = TREE_PURPOSE (name);
+       name = TREE_VALUE (name);
+     }
+   else
+     ns = get_identifier ("gnu");
+   return lookup_scoped_attribute_spec (ns, name);
+ }
+ 
+ 
+ /* Return the namespace of the attribute ATTR.  This accessor works on
+    GNU and C++11 (scoped) attributes.  On GNU attributes,
+    it returns an identifier tree for the string "gnu".
+ 
+    Please read the comments of cxx11_attribute_p to understand the
+    format of attributes.  */
+ 
+ tree
+ get_attribute_namespace (const_tree attr)
+ {
+   if (cxx11_attribute_p (attr))
+     return TREE_PURPOSE (TREE_PURPOSE (attr));
+   return get_identifier ("gnu");
+ }
+ 
+ /* Check LAST_DECL and NODE of the same symbol for attributes that are
+    recorded in SPEC to be mutually exclusive with ATTRNAME, diagnose
+    them, and return true if any have been found.  NODE can be a DECL
+    or a TYPE.  */
+ 
+ static bool
+ diag_attr_exclusions (tree last_decl, tree node, tree attrname,
+ 		      const attribute_spec *spec)
+ {
+   const attribute_spec::exclusions *excl = spec->exclude;
+ 
+   tree_code code = TREE_CODE (node);
+ 
+   if ((code == FUNCTION_DECL && !excl->function
+        && (!excl->type || !spec->affects_type_identity))
+       || (code == VAR_DECL && !excl->variable
+ 	  && (!excl->type || !spec->affects_type_identity))
+       || (((code == TYPE_DECL || RECORD_OR_UNION_TYPE_P (node)) && !excl->type)))
+     return false;
+ 
+   /* True if an attribute that's mutually exclusive with ATTRNAME
+      has been found.  */
+   bool found = false;
+ 
+   if (last_decl && last_decl != node && TREE_TYPE (last_decl) != node)
+     {
+       /* Check both the last DECL and its type for conflicts with
+ 	 the attribute being added to the current decl or type.  */
+       found |= diag_attr_exclusions (last_decl, last_decl, attrname, spec);
+       tree decl_type = TREE_TYPE (last_decl);
+       found |= diag_attr_exclusions (last_decl, decl_type, attrname, spec);
+     }
+ 
+   /* NODE is either the current DECL to which the attribute is being
+      applied or its TYPE.  For the former, consider the attributes on
+      both the DECL and its type.  */
+   tree attrs[2];
+ 
+   if (DECL_P (node))
+     {
+       attrs[0] = DECL_ATTRIBUTES (node);
+       attrs[1] = TYPE_ATTRIBUTES (TREE_TYPE (node));
+     }
+   else
+     {
+       attrs[0] = TYPE_ATTRIBUTES (node);
+       attrs[1] = NULL_TREE;
+     }
+ 
+   /* Iterate over the mutually exclusive attribute names and verify
+      that the symbol doesn't contain it.  */
+   for (unsigned i = 0; i != sizeof attrs / sizeof *attrs; ++i)
+     {
+       if (!attrs[i])
+ 	continue;
+ 
+       for ( ; excl->name; ++excl)
+ 	{
+ 	  /* Avoid checking the attribute against itself.  */
+ 	  if (is_attribute_p (excl->name, attrname))
+ 	    continue;
+ 
+ 	  if (!lookup_attribute (excl->name, attrs[i]))
+ 	    continue;
+ 
+ 	  /* An exclusion may apply either to a function declaration,
+ 	     type declaration, or a field/variable declaration, or
+ 	     any subset of the three.  */
+ 	  if (TREE_CODE (node) == FUNCTION_DECL
+ 	      && !excl->function)
+ 	    continue;
+ 
+ 	  if (TREE_CODE (node) == TYPE_DECL
+ 	      && !excl->type)
+ 	    continue;
+ 
+ 	  if ((TREE_CODE (node) == FIELD_DECL
+ 	       || TREE_CODE (node) == VAR_DECL)
+ 	      && !excl->variable)
+ 	    continue;
+ 
+ 	  found = true;
+ 
+ 	  /* Print a note?  */
+ 	  bool note = last_decl != NULL_TREE;
+ 	  auto_diagnostic_group d;
+ 	  if (TREE_CODE (node) == FUNCTION_DECL
+ 	      && fndecl_built_in_p (node))
+ 	    note &= warning (OPT_Wattributes,
+ 			     "ignoring attribute %qE in declaration of "
+ 			     "a built-in function %qD because it conflicts "
+ 			     "with attribute %qs",
+ 			     attrname, node, excl->name);
+ 	  else
+ 	    note &= warning (OPT_Wattributes,
+ 			     "ignoring attribute %qE because "
+ 			     "it conflicts with attribute %qs",
+ 			     attrname, excl->name);
+ 
+ 	  if (note)
+ 	    inform (DECL_SOURCE_LOCATION (last_decl),
+ 		    "previous declaration here");
+ 	}
+     }
+ 
+   return found;
+ }
+ 
+ /* Return true iff we should not complain about unknown attributes
+    coming from the attribute namespace NS.  This is the case for
+    the -Wno-attributes=ns:: command-line option.  */
+ 
+ static bool
+ attr_namespace_ignored_p (tree ns)
+ {
+   if (ns == NULL_TREE)
+     return false;
+   scoped_attributes *r = find_attribute_namespace (IDENTIFIER_POINTER (ns));
+   return r && r->ignored_p;
+ }
+ 
+ /* Return true if the attribute ATTR should not be warned about.  */
+ 
+ bool
+ attribute_ignored_p (tree attr)
+ {
+   if (!cxx11_attribute_p (attr))
+     return false;
+   if (tree ns = get_attribute_namespace (attr))
+     {
+       if (attr_namespace_ignored_p (ns))
+ 	return true;
+       const attribute_spec *as = lookup_attribute_spec (TREE_PURPOSE (attr));
+       if (as && as->max_length == -2)
+ 	return true;
+     }
+   return false;
+ }
+ 
+ /* Like above, but takes an attribute_spec AS, which must be nonnull.  */
+ 
+ bool
+ attribute_ignored_p (const attribute_spec *const as)
+ {
+   return as->max_length == -2;
+ }
+ 
+ /* Process the attributes listed in ATTRIBUTES and install them in *NODE,
+    which is either a DECL (including a TYPE_DECL) or a TYPE.  If a DECL,
+    it should be modified in place; if a TYPE, a copy should be created
+    unless ATTR_FLAG_TYPE_IN_PLACE is set in FLAGS.  FLAGS gives further
+    information, in the form of a bitwise OR of flags in enum attribute_flags
+    from tree.h.  Depending on these flags, some attributes may be
+    returned to be applied at a later stage (for example, to apply
+    a decl attribute to the declaration rather than to its type).  */
+ 
+ tree
+ decl_attributes (tree *node, tree attributes, int flags,
+ 		 tree last_decl /* = NULL_TREE */)
+ {
+   tree returned_attrs = NULL_TREE;
+ 
+   if (TREE_TYPE (*node) == error_mark_node || attributes == error_mark_node)
+     return NULL_TREE;
+ 
+   if (!attributes_initialized)
+     init_attributes ();
+ 
+   /* If this is a function and the user used #pragma GCC optimize, add the
+      options to the attribute((optimize(...))) list.  */
+   if (TREE_CODE (*node) == FUNCTION_DECL && current_optimize_pragma)
+     {
+       tree cur_attr = lookup_attribute ("optimize", attributes);
+       tree opts = copy_list (current_optimize_pragma);
+ 
+       if (! cur_attr)
+ 	attributes
+ 	  = tree_cons (get_identifier ("optimize"), opts, attributes);
+       else
+ 	TREE_VALUE (cur_attr) = chainon (opts, TREE_VALUE (cur_attr));
+     }
+ 
+   if (TREE_CODE (*node) == FUNCTION_DECL
+       && (optimization_current_node != optimization_default_node
+ 	  || target_option_current_node != target_option_default_node)
+       && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node))
+     {
+       DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node) = optimization_current_node;
+       /* Don't set DECL_FUNCTION_SPECIFIC_TARGET for targets that don't
+ 	 support #pragma GCC target or target attribute.  */
+       if (target_option_default_node)
+ 	{
+ 	  tree cur_tree
+ 	    = build_target_option_node (&global_options, &global_options_set);
+ 	  tree old_tree = DECL_FUNCTION_SPECIFIC_TARGET (*node);
+ 	  if (!old_tree)
+ 	    old_tree = target_option_default_node;
+ 	  /* The changes on optimization options can cause the changes in
+ 	     target options, update it accordingly if it's changed.  */
+ 	  if (old_tree != cur_tree)
+ 	    DECL_FUNCTION_SPECIFIC_TARGET (*node) = cur_tree;
+ 	}
+     }
+ 
+   /* If this is a function and the user used #pragma GCC target, add the
+      options to the attribute((target(...))) list.  */
+   if (TREE_CODE (*node) == FUNCTION_DECL
+       && current_target_pragma
+       && targetm.target_option.valid_attribute_p (*node, NULL_TREE,
+ 						  current_target_pragma, 0))
+     {
+       tree cur_attr = lookup_attribute ("target", attributes);
+       tree opts = copy_list (current_target_pragma);
+ 
+       if (! cur_attr)
+ 	attributes = tree_cons (get_identifier ("target"), opts, attributes);
+       else
+ 	TREE_VALUE (cur_attr) = chainon (opts, TREE_VALUE (cur_attr));
+     }
+ 
+   /* A "naked" function attribute implies "noinline" and "noclone" for
+      those targets that support it.  */
+   if (TREE_CODE (*node) == FUNCTION_DECL
+       && attributes
+       && lookup_attribute ("naked", attributes) != NULL
+       && lookup_attribute_spec (get_identifier ("naked"))
+       && lookup_attribute ("noipa", attributes) == NULL)
+ 	attributes = tree_cons (get_identifier ("noipa"), NULL, attributes);
+ 
+   /* A "noipa" function attribute implies "noinline", "noclone" and "no_icf"
+      for those targets that support it.  */
+   if (TREE_CODE (*node) == FUNCTION_DECL
+       && attributes
+       && lookup_attribute ("noipa", attributes) != NULL
+       && lookup_attribute_spec (get_identifier ("noipa")))
+     {
+       if (lookup_attribute ("noinline", attributes) == NULL)
+ 	attributes = tree_cons (get_identifier ("noinline"), NULL, attributes);
+ 
+       if (lookup_attribute ("noclone", attributes) == NULL)
+ 	attributes = tree_cons (get_identifier ("noclone"),  NULL, attributes);
+ 
+       if (lookup_attribute ("no_icf", attributes) == NULL)
+ 	attributes = tree_cons (get_identifier ("no_icf"),  NULL, attributes);
+     }
+ 
+   targetm.insert_attributes (*node, &attributes);
+ 
+   /* Note that attributes on the same declaration are not necessarily
+      in the same order as in the source.  */
+   for (tree attr = attributes; attr; attr = TREE_CHAIN (attr))
+     {
+       tree ns = get_attribute_namespace (attr);
+       tree name = get_attribute_name (attr);
+       tree args = TREE_VALUE (attr);
+       tree *anode = node;
+       const struct attribute_spec *spec
+ 	= lookup_scoped_attribute_spec (ns, name);
+       int fn_ptr_quals = 0;
+       tree fn_ptr_tmp = NULL_TREE;
+       const bool cxx11_attr_p = cxx11_attribute_p (attr);
+ 
+       if (spec == NULL)
+ 	{
+ 	  if (!(flags & (int) ATTR_FLAG_BUILT_IN)
+ 	      && !attr_namespace_ignored_p (ns))
+ 	    {
+ 	      if (ns == NULL_TREE || !cxx11_attr_p)
+ 		warning (OPT_Wattributes, "%qE attribute directive ignored",
+ 			 name);
+ 	      else
+ 		warning (OPT_Wattributes,
+ 			 "%<%E::%E%> scoped attribute directive ignored",
+ 			 ns, name);
+ 	    }
+ 	  continue;
+ 	}
+       else
+ 	{
+ 	  int nargs = list_length (args);
+ 	  if (nargs < spec->min_length
+ 	      || (spec->max_length >= 0
+ 		  && nargs > spec->max_length))
+ 	    {
+ 	      error ("wrong number of arguments specified for %qE attribute",
+ 		     name);
+ 	      if (spec->max_length < 0)
+ 		inform (input_location, "expected %i or more, found %i",
+ 			spec->min_length, nargs);
+ 	      else
+ 		inform (input_location, "expected between %i and %i, found %i",
+ 			spec->min_length, spec->max_length, nargs);
+ 	      continue;
+ 	    }
+ 	}
+       gcc_assert (is_attribute_p (spec->name, name));
+ 
+       if (spec->decl_required && !DECL_P (*anode))
+ 	{
+ 	  if (flags & ((int) ATTR_FLAG_DECL_NEXT
+ 		       | (int) ATTR_FLAG_FUNCTION_NEXT
+ 		       | (int) ATTR_FLAG_ARRAY_NEXT))
+ 	    {
+ 	      /* Pass on this attribute to be tried again.  */
+ 	      tree attr = tree_cons (name, args, NULL_TREE);
+ 	      returned_attrs = chainon (returned_attrs, attr);
+ 	      continue;
+ 	    }
+ 	  else
+ 	    {
+ 	      warning (OPT_Wattributes, "%qE attribute does not apply to types",
+ 		       name);
+ 	      continue;
+ 	    }
+ 	}
+ 
+       /* If we require a type, but were passed a decl, set up to make a
+ 	 new type and update the one in the decl.  ATTR_FLAG_TYPE_IN_PLACE
+ 	 would have applied if we'd been passed a type, but we cannot modify
+ 	 the decl's type in place here.  */
+       if (spec->type_required && DECL_P (*anode))
+ 	{
+ 	  anode = &TREE_TYPE (*anode);
+ 	  flags &= ~(int) ATTR_FLAG_TYPE_IN_PLACE;
+ 	}
+ 
+       if (spec->function_type_required && TREE_CODE (*anode) != FUNCTION_TYPE
+ 	  && TREE_CODE (*anode) != METHOD_TYPE)
+ 	{
+ 	  if (TREE_CODE (*anode) == POINTER_TYPE
+ 	      && (TREE_CODE (TREE_TYPE (*anode)) == FUNCTION_TYPE
+ 		  || TREE_CODE (TREE_TYPE (*anode)) == METHOD_TYPE))
+ 	    {
+ 	      /* OK, this is a bit convoluted.  We can't just make a copy
+ 		 of the pointer type and modify its TREE_TYPE, because if
+ 		 we change the attributes of the target type the pointer
+ 		 type needs to have a different TYPE_MAIN_VARIANT.  So we
+ 		 pull out the target type now, frob it as appropriate, and
+ 		 rebuild the pointer type later.
+ 
+ 		 This would all be simpler if attributes were part of the
+ 		 declarator, grumble grumble.  */
+ 	      fn_ptr_tmp = TREE_TYPE (*anode);
+ 	      fn_ptr_quals = TYPE_QUALS (*anode);
+ 	      anode = &fn_ptr_tmp;
+ 	      flags &= ~(int) ATTR_FLAG_TYPE_IN_PLACE;
+ 	    }
+ 	  else if (flags & (int) ATTR_FLAG_FUNCTION_NEXT)
+ 	    {
+ 	      /* Pass on this attribute to be tried again.  */
+ 	      tree attr = tree_cons (name, args, NULL_TREE);
+ 	      returned_attrs = chainon (returned_attrs, attr);
+ 	      continue;
+ 	    }
+ 
+ 	  if (TREE_CODE (*anode) != FUNCTION_TYPE
+ 	      && TREE_CODE (*anode) != METHOD_TYPE)
+ 	    {
+ 	      warning (OPT_Wattributes,
+ 		       "%qE attribute only applies to function types",
+ 		       name);
+ 	      continue;
+ 	    }
+ 	}
+ 
+       if (TYPE_P (*anode)
+ 	  && (flags & (int) ATTR_FLAG_TYPE_IN_PLACE)
+ 	  && TYPE_SIZE (*anode) != NULL_TREE)
+ 	{
+ 	  warning (OPT_Wattributes, "type attributes ignored after type is already defined");
+ 	  continue;
+ 	}
+ 
+       bool no_add_attrs = false;
+ 
+       /* Check for exclusions with other attributes on the current
+ 	 declation as well as the last declaration of the same
+ 	 symbol already processed (if one exists).  Detect and
+ 	 reject incompatible attributes.  */
+       bool built_in = flags & ATTR_FLAG_BUILT_IN;
+       if (spec->exclude
+ 	  && (flag_checking || !built_in)
+ 	  && !error_operand_p (last_decl))
+ 	{
+ 	  /* Always check attributes on user-defined functions.
+ 	     Check them on built-ins only when -fchecking is set.
+ 	     Ignore __builtin_unreachable -- it's both const and
+ 	     noreturn.  */
+ 
+ 	  if (!built_in
+ 	      || !DECL_P (*anode)
+ 	      || DECL_BUILT_IN_CLASS (*anode) != BUILT_IN_NORMAL
+ 	      || (DECL_FUNCTION_CODE (*anode) != BUILT_IN_UNREACHABLE
+ 		  && (DECL_FUNCTION_CODE (*anode)
+ 		      != BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE)))
+ 	    {
+ 	      bool no_add = diag_attr_exclusions (last_decl, *anode, name, spec);
+ 	      if (!no_add && anode != node)
+ 		no_add = diag_attr_exclusions (last_decl, *node, name, spec);
+ 	      no_add_attrs |= no_add;
+ 	    }
+ 	}
+ 
+       if (no_add_attrs)
+ 	continue;
+ 
+       if (spec->handler != NULL)
+ 	{
+ 	  int cxx11_flag = (cxx11_attr_p ? ATTR_FLAG_CXX11 : 0);
+ 
+ 	  /* Pass in an array of the current declaration followed
+ 	     by the last pushed/merged declaration if one exists.
+ 	     For calls that modify the type attributes of a DECL
+ 	     and for which *ANODE is *NODE's type, also pass in
+ 	     the DECL as the third element to use in diagnostics.
+ 	     If the handler changes CUR_AND_LAST_DECL[0] replace
+ 	     *ANODE with its value.  */
+ 	  tree cur_and_last_decl[3] = { *anode, last_decl };
+ 	  if (anode != node && DECL_P (*node))
+ 	    cur_and_last_decl[2] = *node;
+ 
+ 	  tree ret = (spec->handler) (cur_and_last_decl, name, args,
+ 				      flags|cxx11_flag, &no_add_attrs);
+ 
+ 	  *anode = cur_and_last_decl[0];
+ 	  if (ret == error_mark_node)
+ 	    {
+ 	      warning (OPT_Wattributes, "%qE attribute ignored", name);
+ 	      no_add_attrs = true;
+ 	    }
+ 	  else
+ 	    returned_attrs = chainon (ret, returned_attrs);
+ 	}
+ 
+       /* Layout the decl in case anything changed.  */
+       if (spec->type_required && DECL_P (*node)
+ 	  && (VAR_P (*node)
+ 	      || TREE_CODE (*node) == PARM_DECL
+ 	      || TREE_CODE (*node) == RESULT_DECL))
+ 	relayout_decl (*node);
+ 
+       if (!no_add_attrs)
+ 	{
+ 	  tree old_attrs;
+ 	  tree a;
+ 
+ 	  if (DECL_P (*anode))
+ 	    old_attrs = DECL_ATTRIBUTES (*anode);
+ 	  else
+ 	    old_attrs = TYPE_ATTRIBUTES (*anode);
+ 
+ 	  for (a = lookup_attribute (spec->name, old_attrs);
+ 	       a != NULL_TREE;
+ 	       a = lookup_attribute (spec->name, TREE_CHAIN (a)))
+ 	    {
+ 	      if (simple_cst_equal (TREE_VALUE (a), args) == 1)
+ 		break;
+ 	    }
+ 
+ 	  if (a == NULL_TREE)
+ 	    {
+ 	      /* This attribute isn't already in the list.  */
+ 	      tree r;
+ 	      /* Preserve the C++11 form.  */
+ 	      if (cxx11_attr_p)
+ 		r = tree_cons (build_tree_list (ns, name), args, old_attrs);
+ 	      else
+ 		r = tree_cons (name, args, old_attrs);
+ 
+ 	      if (DECL_P (*anode))
+ 		DECL_ATTRIBUTES (*anode) = r;
+ 	      else if (flags & (int) ATTR_FLAG_TYPE_IN_PLACE)
+ 		{
+ 		  TYPE_ATTRIBUTES (*anode) = r;
+ 		  /* If this is the main variant, also push the attributes
+ 		     out to the other variants.  */
+ 		  if (*anode == TYPE_MAIN_VARIANT (*anode))
+ 		    {
+ 		      for (tree variant = *anode; variant;
+ 			   variant = TYPE_NEXT_VARIANT (variant))
+ 			{
+ 			  if (TYPE_ATTRIBUTES (variant) == old_attrs)
+ 			    TYPE_ATTRIBUTES (variant)
+ 			      = TYPE_ATTRIBUTES (*anode);
+ 			  else if (!lookup_attribute
+ 				   (spec->name, TYPE_ATTRIBUTES (variant)))
+ 			    TYPE_ATTRIBUTES (variant) = tree_cons
+ 			      (name, args, TYPE_ATTRIBUTES (variant));
+ 			}
+ 		    }
+ 		}
+ 	      else
+ 		*anode = build_type_attribute_variant (*anode, r);
+ 	    }
+ 	}
+ 
+       if (fn_ptr_tmp)
+ 	{
+ 	  /* Rebuild the function pointer type and put it in the
+ 	     appropriate place.  */
+ 	  fn_ptr_tmp = build_pointer_type (fn_ptr_tmp);
+ 	  if (fn_ptr_quals)
+ 	    fn_ptr_tmp = build_qualified_type (fn_ptr_tmp, fn_ptr_quals);
+ 	  if (DECL_P (*node))
+ 	    TREE_TYPE (*node) = fn_ptr_tmp;
+ 	  else
+ 	    {
+ 	      gcc_assert (TREE_CODE (*node) == POINTER_TYPE);
+ 	      *node = fn_ptr_tmp;
+ 	    }
+ 	}
+     }
+ 
+   return returned_attrs;
+ }
+ 
+ /* Return TRUE iff ATTR has been parsed by the front-end as a C++-11
+    attribute.
+ 
+    When G++ parses a C++11 attribute, it is represented as
+    a TREE_LIST which TREE_PURPOSE is itself a TREE_LIST.  TREE_PURPOSE
+    (TREE_PURPOSE (ATTR)) is the namespace of the attribute, and the
+    TREE_VALUE (TREE_PURPOSE (ATTR)) is its non-qualified name.  Please
+    use get_attribute_namespace and get_attribute_name to retrieve the
+    namespace and name of the attribute, as these accessors work with
+    GNU attributes as well.  */
+ 
+ bool
+ cxx11_attribute_p (const_tree attr)
+ {
+   if (attr == NULL_TREE
+       || TREE_CODE (attr) != TREE_LIST)
+     return false;
+ 
+   return (TREE_CODE (TREE_PURPOSE (attr)) == TREE_LIST);
+ }
+ 
+ /* Return the name of the attribute ATTR.  This accessor works on GNU
+    and C++11 (scoped) attributes.
+ 
+    Please read the comments of cxx11_attribute_p to understand the
+    format of attributes.  */
+ 
+ tree
+ get_attribute_name (const_tree attr)
+ {
+   if (cxx11_attribute_p (attr))
+     return TREE_VALUE (TREE_PURPOSE (attr));
+   return TREE_PURPOSE (attr);
+ }
+ 
+ /* Subroutine of set_method_tm_attributes.  Apply TM attribute ATTR
+    to the method FNDECL.  */
+ 
+ void
+ apply_tm_attr (tree fndecl, tree attr)
+ {
+   decl_attributes (&TREE_TYPE (fndecl), tree_cons (attr, NULL, NULL), 0);
+ }
+ 
+ /* Makes a function attribute of the form NAME(ARG_NAME) and chains
+    it to CHAIN.  */
+ 
+ tree
+ make_attribute (const char *name, const char *arg_name, tree chain)
+ {
+   tree attr_name;
+   tree attr_arg_name;
+   tree attr_args;
+   tree attr;
+ 
+   attr_name = get_identifier (name);
+   attr_arg_name = build_string (strlen (arg_name), arg_name);
+   attr_args = tree_cons (NULL_TREE, attr_arg_name, NULL_TREE);
+   attr = tree_cons (attr_name, attr_args, chain);
+   return attr;
+ }
+ 
+ 
+ /* Common functions used for target clone support.  */
+ 
+ /* Comparator function to be used in qsort routine to sort attribute
+    specification strings to "target".  */
+ 
+ static int
+ attr_strcmp (const void *v1, const void *v2)
+ {
+   const char *c1 = *(char *const*)v1;
+   const char *c2 = *(char *const*)v2;
+   return strcmp (c1, c2);
+ }
+ 
+ /* ARGLIST is the argument to target attribute.  This function tokenizes
+    the comma separated arguments, sorts them and returns a string which
+    is a unique identifier for the comma separated arguments.   It also
+    replaces non-identifier characters "=,-" with "_".  */
+ 
+ char *
+ sorted_attr_string (tree arglist)
+ {
+   tree arg;
+   size_t str_len_sum = 0;
+   char **args = NULL;
+   char *attr_str, *ret_str;
+   char *attr = NULL;
+   unsigned int argnum = 1;
+   unsigned int i;
+ 
+   for (arg = arglist; arg; arg = TREE_CHAIN (arg))
+     {
+       const char *str = TREE_STRING_POINTER (TREE_VALUE (arg));
+       size_t len = strlen (str);
+       str_len_sum += len + 1;
+       if (arg != arglist)
+ 	argnum++;
+       for (i = 0; i < strlen (str); i++)
+ 	if (str[i] == ',')
+ 	  argnum++;
+     }
+ 
+   attr_str = XNEWVEC (char, str_len_sum);
+   str_len_sum = 0;
+   for (arg = arglist; arg; arg = TREE_CHAIN (arg))
+     {
+       const char *str = TREE_STRING_POINTER (TREE_VALUE (arg));
+       size_t len = strlen (str);
+       memcpy (attr_str + str_len_sum, str, len);
+       attr_str[str_len_sum + len] = TREE_CHAIN (arg) ? ',' : '\0';
+       str_len_sum += len + 1;
+     }
+ 
+   /* Replace "=,-" with "_".  */
+   for (i = 0; i < strlen (attr_str); i++)
+     if (attr_str[i] == '=' || attr_str[i]== '-')
+       attr_str[i] = '_';
+ 
+   if (argnum == 1)
+     return attr_str;
+ 
+   args = XNEWVEC (char *, argnum);
+ 
+   i = 0;
+   attr = strtok (attr_str, ",");
+   while (attr != NULL)
+     {
+       args[i] = attr;
+       i++;
+       attr = strtok (NULL, ",");
+     }
+ 
+   qsort (args, argnum, sizeof (char *), attr_strcmp);
+ 
+   ret_str = XNEWVEC (char, str_len_sum);
+   str_len_sum = 0;
+   for (i = 0; i < argnum; i++)
+     {
+       size_t len = strlen (args[i]);
+       memcpy (ret_str + str_len_sum, args[i], len);
+       ret_str[str_len_sum + len] = i < argnum - 1 ? '_' : '\0';
+       str_len_sum += len + 1;
+     }
+ 
+   XDELETEVEC (args);
+   XDELETEVEC (attr_str);
+   return ret_str;
+ }
+ 
+ 
+ /* This function returns true if FN1 and FN2 are versions of the same function,
+    that is, the target strings of the function decls are different.  This assumes
+    that FN1 and FN2 have the same signature.  */
+ 
+ bool
+ common_function_versions (tree fn1, tree fn2)
+ {
+   tree attr1, attr2;
+   char *target1, *target2;
+   bool result;
+ 
+   if (TREE_CODE (fn1) != FUNCTION_DECL
+       || TREE_CODE (fn2) != FUNCTION_DECL)
+     return false;
+ 
+   attr1 = lookup_attribute ("target", DECL_ATTRIBUTES (fn1));
+   attr2 = lookup_attribute ("target", DECL_ATTRIBUTES (fn2));
+ 
+   /* At least one function decl should have the target attribute specified.  */
+   if (attr1 == NULL_TREE && attr2 == NULL_TREE)
+     return false;
+ 
+   /* Diagnose missing target attribute if one of the decls is already
+      multi-versioned.  */
+   if (attr1 == NULL_TREE || attr2 == NULL_TREE)
+     {
+       if (DECL_FUNCTION_VERSIONED (fn1) || DECL_FUNCTION_VERSIONED (fn2))
+ 	{
+ 	  if (attr2 != NULL_TREE)
+ 	    {
+ 	      std::swap (fn1, fn2);
+ 	      attr1 = attr2;
+ 	    }
+ 	  error_at (DECL_SOURCE_LOCATION (fn2),
+ 		    "missing %<target%> attribute for multi-versioned %qD",
+ 		    fn2);
+ 	  inform (DECL_SOURCE_LOCATION (fn1),
+ 		  "previous declaration of %qD", fn1);
+ 	  /* Prevent diagnosing of the same error multiple times.  */
+ 	  DECL_ATTRIBUTES (fn2)
+ 	    = tree_cons (get_identifier ("target"),
+ 			 copy_node (TREE_VALUE (attr1)),
+ 			 DECL_ATTRIBUTES (fn2));
+ 	}
+       return false;
+     }
+ 
+   target1 = sorted_attr_string (TREE_VALUE (attr1));
+   target2 = sorted_attr_string (TREE_VALUE (attr2));
+ 
+   /* The sorted target strings must be different for fn1 and fn2
+      to be versions.  */
+   if (strcmp (target1, target2) == 0)
+     result = false;
+   else
+     result = true;
+ 
+   XDELETEVEC (target1);
+   XDELETEVEC (target2);
+ 
+   return result;
+ }
+ 
+ /* Make a dispatcher declaration for the multi-versioned function DECL.
+    Calls to DECL function will be replaced with calls to the dispatcher
+    by the front-end.  Return the decl created.  */
+ 
+ tree
+ make_dispatcher_decl (const tree decl)
+ {
+   tree func_decl;
+   char *func_name;
+   tree fn_type, func_type;
+ 
+   func_name = xstrdup (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
+ 
+   fn_type = TREE_TYPE (decl);
+   func_type = build_function_type (TREE_TYPE (fn_type),
+ 				   TYPE_ARG_TYPES (fn_type));
+   
+   func_decl = build_fn_decl (func_name, func_type);
+   XDELETEVEC (func_name);
+   TREE_USED (func_decl) = 1;
+   DECL_CONTEXT (func_decl) = NULL_TREE;
+   DECL_INITIAL (func_decl) = error_mark_node;
+   DECL_ARTIFICIAL (func_decl) = 1;
+   /* Mark this func as external, the resolver will flip it again if
+      it gets generated.  */
+   DECL_EXTERNAL (func_decl) = 1;
+   /* This will be of type IFUNCs have to be externally visible.  */
+   TREE_PUBLIC (func_decl) = 1;
+ 
+   return func_decl;  
+ }
+ 
+ /* Returns true if decl is multi-versioned and DECL is the default function,
+    that is it is not tagged with target specific optimization.  */
+ 
+ bool
+ is_function_default_version (const tree decl)
+ {
+   if (TREE_CODE (decl) != FUNCTION_DECL
+       || !DECL_FUNCTION_VERSIONED (decl))
+     return false;
+   tree attr = lookup_attribute ("target", DECL_ATTRIBUTES (decl));
+   gcc_assert (attr);
+   attr = TREE_VALUE (TREE_VALUE (attr));
+   return (TREE_CODE (attr) == STRING_CST
+ 	  && strcmp (TREE_STRING_POINTER (attr), "default") == 0);
+ }
+ 
+ /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
+    is ATTRIBUTE.  */
+ 
+ tree
+ build_decl_attribute_variant (tree ddecl, tree attribute)
+ {
+   DECL_ATTRIBUTES (ddecl) = attribute;
+   return ddecl;
+ }
+ 
+ /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
+    is ATTRIBUTE and its qualifiers are QUALS.
+ 
+    Record such modified types already made so we don't make duplicates.  */
+ 
+ tree
+ build_type_attribute_qual_variant (tree otype, tree attribute, int quals)
+ {
+   tree ttype = otype;
+   if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
+     {
+       tree ntype;
+ 
+       /* Building a distinct copy of a tagged type is inappropriate; it
+ 	 causes breakage in code that expects there to be a one-to-one
+ 	 relationship between a struct and its fields.
+ 	 build_duplicate_type is another solution (as used in
+ 	 handle_transparent_union_attribute), but that doesn't play well
+ 	 with the stronger C++ type identity model.  */
+       if (TREE_CODE (ttype) == RECORD_TYPE
+ 	  || TREE_CODE (ttype) == UNION_TYPE
+ 	  || TREE_CODE (ttype) == QUAL_UNION_TYPE
+ 	  || TREE_CODE (ttype) == ENUMERAL_TYPE)
+ 	{
+ 	  warning (OPT_Wattributes,
+ 		   "ignoring attributes applied to %qT after definition",
+ 		   TYPE_MAIN_VARIANT (ttype));
+ 	  return build_qualified_type (ttype, quals);
+ 	}
+ 
+       ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
+       if (lang_hooks.types.copy_lang_qualifiers
+ 	  && otype != TYPE_MAIN_VARIANT (otype))
+ 	ttype = (lang_hooks.types.copy_lang_qualifiers
+ 		 (ttype, TYPE_MAIN_VARIANT (otype)));
+ 
+       tree dtype = ntype = build_distinct_type_copy (ttype);
+ 
+       TYPE_ATTRIBUTES (ntype) = attribute;
+ 
+       hashval_t hash = type_hash_canon_hash (ntype);
+       ntype = type_hash_canon (hash, ntype);
+ 
+       if (ntype != dtype)
+ 	/* This variant was already in the hash table, don't mess with
+ 	   TYPE_CANONICAL.  */;
+       else if (TYPE_STRUCTURAL_EQUALITY_P (ttype)
+ 	       || !comp_type_attributes (ntype, ttype))
+ 	/* If the target-dependent attributes make NTYPE different from
+ 	   its canonical type, we will need to use structural equality
+ 	   checks for this type.
+ 
+ 	   We shouldn't get here for stripping attributes from a type;
+ 	   the no-attribute type might not need structural comparison.  But
+ 	   we can if was discarded from type_hash_table.  */
+ 	SET_TYPE_STRUCTURAL_EQUALITY (ntype);
+       else if (TYPE_CANONICAL (ntype) == ntype)
+ 	TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
+ 
+       ttype = build_qualified_type (ntype, quals);
+       if (lang_hooks.types.copy_lang_qualifiers
+ 	  && otype != TYPE_MAIN_VARIANT (otype))
+ 	ttype = lang_hooks.types.copy_lang_qualifiers (ttype, otype);
+     }
+   else if (TYPE_QUALS (ttype) != quals)
+     ttype = build_qualified_type (ttype, quals);
+ 
+   return ttype;
+ }
+ 
+ /* Compare two identifier nodes representing attributes.
+    Return true if they are the same, false otherwise.  */
+ 
+ static bool
+ cmp_attrib_identifiers (const_tree attr1, const_tree attr2)
+ {
+   /* Make sure we're dealing with IDENTIFIER_NODEs.  */
+   gcc_checking_assert (TREE_CODE (attr1) == IDENTIFIER_NODE
+ 		       && TREE_CODE (attr2) == IDENTIFIER_NODE);
+ 
+   /* Identifiers can be compared directly for equality.  */
+   if (attr1 == attr2)
+     return true;
+ 
+   return cmp_attribs (IDENTIFIER_POINTER (attr1), IDENTIFIER_LENGTH (attr1),
+ 		      IDENTIFIER_POINTER (attr2), IDENTIFIER_LENGTH (attr2));
+ }
+ 
+ /* Compare two constructor-element-type constants.  Return 1 if the lists
+    are known to be equal; otherwise return 0.  */
+ 
+ bool
+ simple_cst_list_equal (const_tree l1, const_tree l2)
+ {
+   while (l1 != NULL_TREE && l2 != NULL_TREE)
+     {
+       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
+ 	return false;
+ 
+       l1 = TREE_CHAIN (l1);
+       l2 = TREE_CHAIN (l2);
+     }
+ 
+   return l1 == l2;
+ }
+ 
+ /* Check if "omp declare simd" attribute arguments, CLAUSES1 and CLAUSES2, are
+    the same.  */
+ 
+ static bool
+ omp_declare_simd_clauses_equal (tree clauses1, tree clauses2)
+ {
+   tree cl1, cl2;
+   for (cl1 = clauses1, cl2 = clauses2;
+        cl1 && cl2;
+        cl1 = OMP_CLAUSE_CHAIN (cl1), cl2 = OMP_CLAUSE_CHAIN (cl2))
+     {
+       if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_CODE (cl2))
+ 	return false;
+       if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_SIMDLEN)
+ 	{
+ 	  if (simple_cst_equal (OMP_CLAUSE_DECL (cl1),
+ 				OMP_CLAUSE_DECL (cl2)) != 1)
+ 	    return false;
+ 	}
+       switch (OMP_CLAUSE_CODE (cl1))
+ 	{
+ 	case OMP_CLAUSE_ALIGNED:
+ 	  if (simple_cst_equal (OMP_CLAUSE_ALIGNED_ALIGNMENT (cl1),
+ 				OMP_CLAUSE_ALIGNED_ALIGNMENT (cl2)) != 1)
+ 	    return false;
+ 	  break;
+ 	case OMP_CLAUSE_LINEAR:
+ 	  if (simple_cst_equal (OMP_CLAUSE_LINEAR_STEP (cl1),
+ 				OMP_CLAUSE_LINEAR_STEP (cl2)) != 1)
+ 	    return false;
+ 	  break;
+ 	case OMP_CLAUSE_SIMDLEN:
+ 	  if (simple_cst_equal (OMP_CLAUSE_SIMDLEN_EXPR (cl1),
+ 				OMP_CLAUSE_SIMDLEN_EXPR (cl2)) != 1)
+ 	    return false;
+ 	default:
+ 	  break;
+ 	}
+     }
+   return true;
+ }
+ 
+ 
+ /* Compare two attributes for their value identity.  Return true if the
+    attribute values are known to be equal; otherwise return false.  */
+ 
+ bool
+ attribute_value_equal (const_tree attr1, const_tree attr2)
+ {
+   if (TREE_VALUE (attr1) == TREE_VALUE (attr2))
+     return true;
+ 
+   if (TREE_VALUE (attr1) != NULL_TREE
+       && TREE_CODE (TREE_VALUE (attr1)) == TREE_LIST
+       && TREE_VALUE (attr2) != NULL_TREE
+       && TREE_CODE (TREE_VALUE (attr2)) == TREE_LIST)
+     {
+       /* Handle attribute format.  */
+       if (is_attribute_p ("format", get_attribute_name (attr1)))
+ 	{
+ 	  attr1 = TREE_VALUE (attr1);
+ 	  attr2 = TREE_VALUE (attr2);
+ 	  /* Compare the archetypes (printf/scanf/strftime/...).  */
+ 	  if (!cmp_attrib_identifiers (TREE_VALUE (attr1), TREE_VALUE (attr2)))
+ 	    return false;
+ 	  /* Archetypes are the same.  Compare the rest.  */
+ 	  return (simple_cst_list_equal (TREE_CHAIN (attr1),
+ 					 TREE_CHAIN (attr2)) == 1);
+ 	}
+       return (simple_cst_list_equal (TREE_VALUE (attr1),
+ 				     TREE_VALUE (attr2)) == 1);
+     }
+ 
+   if (TREE_VALUE (attr1)
+       && TREE_CODE (TREE_VALUE (attr1)) == OMP_CLAUSE
+       && TREE_VALUE (attr2)
+       && TREE_CODE (TREE_VALUE (attr2)) == OMP_CLAUSE)
+     return omp_declare_simd_clauses_equal (TREE_VALUE (attr1),
+ 					   TREE_VALUE (attr2));
+ 
+   return (simple_cst_equal (TREE_VALUE (attr1), TREE_VALUE (attr2)) == 1);
+ }
+ 
+ /* Return 0 if the attributes for two types are incompatible, 1 if they
+    are compatible, and 2 if they are nearly compatible (which causes a
+    warning to be generated).  */
+ int
+ comp_type_attributes (const_tree type1, const_tree type2)
+ {
+   const_tree a1 = TYPE_ATTRIBUTES (type1);
+   const_tree a2 = TYPE_ATTRIBUTES (type2);
+   const_tree a;
+ 
+   if (a1 == a2)
+     return 1;
+   for (a = a1; a != NULL_TREE; a = TREE_CHAIN (a))
+     {
+       const struct attribute_spec *as;
+       const_tree attr;
+ 
+       as = lookup_attribute_spec (get_attribute_name (a));
+       if (!as || as->affects_type_identity == false)
+ 	continue;
+ 
+       attr = lookup_attribute (as->name, CONST_CAST_TREE (a2));
+       if (!attr || !attribute_value_equal (a, attr))
+ 	break;
+     }
+   if (!a)
+     {
+       for (a = a2; a != NULL_TREE; a = TREE_CHAIN (a))
+ 	{
+ 	  const struct attribute_spec *as;
+ 
+ 	  as = lookup_attribute_spec (get_attribute_name (a));
+ 	  if (!as || as->affects_type_identity == false)
+ 	    continue;
+ 
+ 	  if (!lookup_attribute (as->name, CONST_CAST_TREE (a1)))
+ 	    break;
+ 	  /* We don't need to compare trees again, as we did this
+ 	     already in first loop.  */
+ 	}
+       /* All types - affecting identity - are equal, so
+ 	 there is no need to call target hook for comparison.  */
+       if (!a)
+ 	return 1;
+     }
+   if (lookup_attribute ("transaction_safe", CONST_CAST_TREE (a)))
+     return 0;
+   if ((lookup_attribute ("nocf_check", TYPE_ATTRIBUTES (type1)) != NULL)
+       ^ (lookup_attribute ("nocf_check", TYPE_ATTRIBUTES (type2)) != NULL))
+     return 0;
+   /* As some type combinations - like default calling-convention - might
+      be compatible, we have to call the target hook to get the final result.  */
+   return targetm.comp_type_attributes (type1, type2);
+ }
+ 
+ /* PREDICATE acts as a function of type:
+ 
+      (const_tree attr, const attribute_spec *as) -> bool
+ 
+    where ATTR is an attribute and AS is its possibly-null specification.
+    Return a list of every attribute in attribute list ATTRS for which
+    PREDICATE is true.  Return ATTRS itself if PREDICATE returns true
+    for every attribute.  */
+ 
+ template<typename Predicate>
+ tree
+ remove_attributes_matching (tree attrs, Predicate predicate)
+ {
+   tree new_attrs = NULL_TREE;
+   tree *ptr = &new_attrs;
+   const_tree start = attrs;
+   for (const_tree attr = attrs; attr; attr = TREE_CHAIN (attr))
+     {
+       tree name = get_attribute_name (attr);
+       const attribute_spec *as = lookup_attribute_spec (name);
+       const_tree end;
+       if (!predicate (attr, as))
+ 	end = attr;
+       else if (start == attrs)
+ 	continue;
+       else
+ 	end = TREE_CHAIN (attr);
+ 
+       for (; start != end; start = TREE_CHAIN (start))
+ 	{
+ 	  *ptr = tree_cons (TREE_PURPOSE (start),
+ 			    TREE_VALUE (start), NULL_TREE);
+ 	  TREE_CHAIN (*ptr) = NULL_TREE;
+ 	  ptr = &TREE_CHAIN (*ptr);
+ 	}
+       start = TREE_CHAIN (attr);
+     }
+   gcc_assert (!start || start == attrs);
+   return start ? attrs : new_attrs;
+ }
+ 
+ /* If VALUE is true, return the subset of ATTRS that affect type identity,
+    otherwise return the subset of ATTRS that don't affect type identity.  */
+ 
+ tree
+ affects_type_identity_attributes (tree attrs, bool value)
+ {
+   auto predicate = [value](const_tree, const attribute_spec *as) -> bool
+     {
+       return bool (as && as->affects_type_identity) == value;
+     };
+   return remove_attributes_matching (attrs, predicate);
+ }
+ 
+ /* Remove attributes that affect type identity from ATTRS unless the
+    same attributes occur in OK_ATTRS.  */
+ 
+ tree
+ restrict_type_identity_attributes_to (tree attrs, tree ok_attrs)
+ {
+   auto predicate = [ok_attrs](const_tree attr,
+ 			      const attribute_spec *as) -> bool
+     {
+       if (!as || !as->affects_type_identity)
+ 	return true;
+ 
+       for (tree ok_attr = lookup_attribute (as->name, ok_attrs);
+ 	   ok_attr;
+ 	   ok_attr = lookup_attribute (as->name, TREE_CHAIN (ok_attr)))
+ 	if (simple_cst_equal (TREE_VALUE (ok_attr), TREE_VALUE (attr)) == 1)
+ 	  return true;
+ 
+       return false;
+     };
+   return remove_attributes_matching (attrs, predicate);
+ }
+ 
+ /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
+    is ATTRIBUTE.
+ 
+    Record such modified types already made so we don't make duplicates.  */
+ 
+ tree
+ build_type_attribute_variant (tree ttype, tree attribute)
+ {
+   return build_type_attribute_qual_variant (ttype, attribute,
+ 					    TYPE_QUALS (ttype));
+ }
+ 
+ /* A variant of lookup_attribute() that can be used with an identifier
+    as the first argument, and where the identifier can be either
+    'text' or '__text__'.
+ 
+    Given an attribute ATTR_IDENTIFIER, and a list of attributes LIST,
+    return a pointer to the attribute's list element if the attribute
+    is part of the list, or NULL_TREE if not found.  If the attribute
+    appears more than once, this only returns the first occurrence; the
+    TREE_CHAIN of the return value should be passed back in if further
+    occurrences are wanted.  ATTR_IDENTIFIER must be an identifier but
+    can be in the form 'text' or '__text__'.  */
+ static tree
+ lookup_ident_attribute (tree attr_identifier, tree list)
+ {
+   gcc_checking_assert (TREE_CODE (attr_identifier) == IDENTIFIER_NODE);
+ 
+   while (list)
+     {
+       gcc_checking_assert (TREE_CODE (get_attribute_name (list))
+ 			   == IDENTIFIER_NODE);
+ 
+       if (cmp_attrib_identifiers (attr_identifier,
+ 				  get_attribute_name (list)))
+ 	/* Found it.  */
+ 	break;
+       list = TREE_CHAIN (list);
+     }
+ 
+   return list;
+ }
+ 
+ /* Remove any instances of attribute ATTR_NAME in LIST and return the
+    modified list.  */
+ 
+ tree
+ remove_attribute (const char *attr_name, tree list)
+ {
+   tree *p;
+   gcc_checking_assert (attr_name[0] != '_');
+ 
+   for (p = &list; *p;)
+     {
+       tree l = *p;
+ 
+       tree attr = get_attribute_name (l);
+       if (is_attribute_p (attr_name, attr))
+ 	*p = TREE_CHAIN (l);
+       else
+ 	p = &TREE_CHAIN (l);
+     }
+ 
+   return list;
+ }
+ 
+ /* Return an attribute list that is the union of a1 and a2.  */
+ 
+ tree
+ merge_attributes (tree a1, tree a2)
+ {
+   tree attributes;
+ 
+   /* Either one unset?  Take the set one.  */
+ 
+   if ((attributes = a1) == 0)
+     attributes = a2;
+ 
+   /* One that completely contains the other?  Take it.  */
+ 
+   else if (a2 != 0 && ! attribute_list_contained (a1, a2))
+     {
+       if (attribute_list_contained (a2, a1))
+ 	attributes = a2;
+       else
+ 	{
+ 	  /* Pick the longest list, and hang on the other list.  */
+ 
+ 	  if (list_length (a1) < list_length (a2))
+ 	    attributes = a2, a2 = a1;
+ 
+ 	  for (; a2 != 0; a2 = TREE_CHAIN (a2))
+ 	    {
+ 	      tree a;
+ 	      for (a = lookup_ident_attribute (get_attribute_name (a2),
+ 					       attributes);
+ 		   a != NULL_TREE && !attribute_value_equal (a, a2);
+ 		   a = lookup_ident_attribute (get_attribute_name (a2),
+ 					       TREE_CHAIN (a)))
+ 		;
+ 	      if (a == NULL_TREE)
+ 		{
+ 		  a1 = copy_node (a2);
+ 		  TREE_CHAIN (a1) = attributes;
+ 		  attributes = a1;
+ 		}
+ 	    }
+ 	}
+     }
+   return attributes;
+ }
+ 
+ /* Given types T1 and T2, merge their attributes and return
+   the result.  */
+ 
+ tree
+ merge_type_attributes (tree t1, tree t2)
+ {
+   return merge_attributes (TYPE_ATTRIBUTES (t1),
+ 			   TYPE_ATTRIBUTES (t2));
+ }
+ 
+ /* Given decls OLDDECL and NEWDECL, merge their attributes and return
+    the result.  */
+ 
+ tree
+ merge_decl_attributes (tree olddecl, tree newdecl)
+ {
+   return merge_attributes (DECL_ATTRIBUTES (olddecl),
+ 			   DECL_ATTRIBUTES (newdecl));
+ }
+ 
+ /* Duplicate all attributes with name NAME in ATTR list to *ATTRS if
+    they are missing there.  */
+ 
+ void
+ duplicate_one_attribute (tree *attrs, tree attr, const char *name)
+ {
+   attr = lookup_attribute (name, attr);
+   if (!attr)
+     return;
+   tree a = lookup_attribute (name, *attrs);
+   while (attr)
+     {
+       tree a2;
+       for (a2 = a; a2; a2 = lookup_attribute (name, TREE_CHAIN (a2)))
+ 	if (attribute_value_equal (attr, a2))
+ 	  break;
+       if (!a2)
+ 	{
+ 	  a2 = copy_node (attr);
+ 	  TREE_CHAIN (a2) = *attrs;
+ 	  *attrs = a2;
+ 	}
+       attr = lookup_attribute (name, TREE_CHAIN (attr));
+     }
+ }
+ 
+ /* Duplicate all attributes from user DECL to the corresponding
+    builtin that should be propagated.  */
+ 
+ void
+ copy_attributes_to_builtin (tree decl)
+ {
+   tree b = builtin_decl_explicit (DECL_FUNCTION_CODE (decl));
+   if (b)
+     duplicate_one_attribute (&DECL_ATTRIBUTES (b),
+ 			     DECL_ATTRIBUTES (decl), "omp declare simd");
+ }
+ 
+ #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
+ 
+ /* Specialization of merge_decl_attributes for various Windows targets.
+ 
+    This handles the following situation:
+ 
+      __declspec (dllimport) int foo;
+      int foo;
+ 
+    The second instance of `foo' nullifies the dllimport.  */
+ 
+ tree
+ merge_dllimport_decl_attributes (tree old, tree new_tree)
+ {
+   tree a;
+   int delete_dllimport_p = 1;
+ 
+   /* What we need to do here is remove from `old' dllimport if it doesn't
+      appear in `new'.  dllimport behaves like extern: if a declaration is
+      marked dllimport and a definition appears later, then the object
+      is not dllimport'd.  We also remove a `new' dllimport if the old list
+      contains dllexport:  dllexport always overrides dllimport, regardless
+      of the order of declaration.  */
+   if (!VAR_OR_FUNCTION_DECL_P (new_tree))
+     delete_dllimport_p = 0;
+   else if (DECL_DLLIMPORT_P (new_tree)
+      	   && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
+     {
+       DECL_DLLIMPORT_P (new_tree) = 0;
+       warning (OPT_Wattributes, "%q+D already declared with dllexport "
+ 	       "attribute: dllimport ignored", new_tree);
+     }
+   else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new_tree))
+     {
+       /* Warn about overriding a symbol that has already been used, e.g.:
+ 	   extern int __attribute__ ((dllimport)) foo;
+ 	   int* bar () {return &foo;}
+ 	   int foo;
+       */
+       if (TREE_USED (old))
+ 	{
+ 	  warning (0, "%q+D redeclared without dllimport attribute "
+ 		   "after being referenced with dll linkage", new_tree);
+ 	  /* If we have used a variable's address with dllimport linkage,
+ 	      keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
+ 	      decl may already have had TREE_CONSTANT computed.
+ 	      We still remove the attribute so that assembler code refers
+ 	      to '&foo rather than '_imp__foo'.  */
+ 	  if (VAR_P (old) && TREE_ADDRESSABLE (old))
+ 	    DECL_DLLIMPORT_P (new_tree) = 1;
+ 	}
+ 
+       /* Let an inline definition silently override the external reference,
+ 	 but otherwise warn about attribute inconsistency.  */
+       else if (VAR_P (new_tree) || !DECL_DECLARED_INLINE_P (new_tree))
+ 	warning (OPT_Wattributes, "%q+D redeclared without dllimport "
+ 		 "attribute: previous dllimport ignored", new_tree);
+     }
+   else
+     delete_dllimport_p = 0;
+ 
+   a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new_tree));
+ 
+   if (delete_dllimport_p)
+     a = remove_attribute ("dllimport", a);
+ 
+   return a;
+ }
+ 
+ /* Handle a "dllimport" or "dllexport" attribute; arguments as in
+    struct attribute_spec.handler.  */
+ 
+ tree
+ handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
+ 		      bool *no_add_attrs)
+ {
+   tree node = *pnode;
+   bool is_dllimport;
+ 
+   /* These attributes may apply to structure and union types being created,
+      but otherwise should pass to the declaration involved.  */
+   if (!DECL_P (node))
+     {
+       if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
+ 		   | (int) ATTR_FLAG_ARRAY_NEXT))
+ 	{
+ 	  *no_add_attrs = true;
+ 	  return tree_cons (name, args, NULL_TREE);
+ 	}
+       if (TREE_CODE (node) == RECORD_TYPE
+ 	  || TREE_CODE (node) == UNION_TYPE)
+ 	{
+ 	  node = TYPE_NAME (node);
+ 	  if (!node)
+ 	    return NULL_TREE;
+ 	}
+       else
+ 	{
+ 	  warning (OPT_Wattributes, "%qE attribute ignored",
+ 		   name);
+ 	  *no_add_attrs = true;
+ 	  return NULL_TREE;
+ 	}
+     }
+ 
+   if (!VAR_OR_FUNCTION_DECL_P (node) && TREE_CODE (node) != TYPE_DECL)
+     {
+       *no_add_attrs = true;
+       warning (OPT_Wattributes, "%qE attribute ignored",
+ 	       name);
+       return NULL_TREE;
+     }
+ 
+   if (TREE_CODE (node) == TYPE_DECL
+       && TREE_CODE (TREE_TYPE (node)) != RECORD_TYPE
+       && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE)
+     {
+       *no_add_attrs = true;
+       warning (OPT_Wattributes, "%qE attribute ignored",
+ 	       name);
+       return NULL_TREE;
+     }
+ 
+   is_dllimport = is_attribute_p ("dllimport", name);
+ 
+   /* Report error on dllimport ambiguities seen now before they cause
+      any damage.  */
+   if (is_dllimport)
+     {
+       /* Honor any target-specific overrides.  */
+       if (!targetm.valid_dllimport_attribute_p (node))
+ 	*no_add_attrs = true;
+ 
+      else if (TREE_CODE (node) == FUNCTION_DECL
+ 	      && DECL_DECLARED_INLINE_P (node))
+ 	{
+ 	  warning (OPT_Wattributes, "inline function %q+D declared as "
+ 		  "dllimport: attribute ignored", node);
+ 	  *no_add_attrs = true;
+ 	}
+       /* Like MS, treat definition of dllimported variables and
+ 	 non-inlined functions on declaration as syntax errors.  */
+      else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
+ 	{
+ 	  error ("function %q+D definition is marked dllimport", node);
+ 	  *no_add_attrs = true;
+ 	}
+ 
+      else if (VAR_P (node))
+ 	{
+ 	  if (DECL_INITIAL (node))
+ 	    {
+ 	      error ("variable %q+D definition is marked dllimport",
+ 		     node);
+ 	      *no_add_attrs = true;
+ 	    }
+ 
+ 	  /* `extern' needn't be specified with dllimport.
+ 	     Specify `extern' now and hope for the best.  Sigh.  */
+ 	  DECL_EXTERNAL (node) = 1;
+ 	  /* Also, implicitly give dllimport'd variables declared within
+ 	     a function global scope, unless declared static.  */
+ 	  if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
+ 	    TREE_PUBLIC (node) = 1;
+ 	  /* Clear TREE_STATIC because DECL_EXTERNAL is set, unless
+ 	     it is a C++ static data member.  */
+ 	  if (DECL_CONTEXT (node) == NULL_TREE
+ 	      || !RECORD_OR_UNION_TYPE_P (DECL_CONTEXT (node)))
+ 	    TREE_STATIC (node) = 0;
+ 	}
+ 
+       if (*no_add_attrs == false)
+ 	DECL_DLLIMPORT_P (node) = 1;
+     }
+   else if (TREE_CODE (node) == FUNCTION_DECL
+ 	   && DECL_DECLARED_INLINE_P (node)
+ 	   && flag_keep_inline_dllexport)
+     /* An exported function, even if inline, must be emitted.  */
+     DECL_EXTERNAL (node) = 0;
+ 
+   /*  Report error if symbol is not accessible at global scope.  */
+   if (!TREE_PUBLIC (node) && VAR_OR_FUNCTION_DECL_P (node))
+     {
+       error ("external linkage required for symbol %q+D because of "
+ 	     "%qE attribute", node, name);
+       *no_add_attrs = true;
+     }
+ 
+   /* A dllexport'd entity must have default visibility so that other
+      program units (shared libraries or the main executable) can see
+      it.  A dllimport'd entity must have default visibility so that
+      the linker knows that undefined references within this program
+      unit can be resolved by the dynamic linker.  */
+   if (!*no_add_attrs)
+     {
+       if (DECL_VISIBILITY_SPECIFIED (node)
+ 	  && DECL_VISIBILITY (node) != VISIBILITY_DEFAULT)
+ 	error ("%qE implies default visibility, but %qD has already "
+ 	       "been declared with a different visibility",
+ 	       name, node);
+       DECL_VISIBILITY (node) = VISIBILITY_DEFAULT;
+       DECL_VISIBILITY_SPECIFIED (node) = 1;
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES  */
+ 
+ /* Given two lists of attributes, return true if list l2 is
+    equivalent to l1.  */
+ 
+ int
+ attribute_list_equal (const_tree l1, const_tree l2)
+ {
+   if (l1 == l2)
+     return 1;
+ 
+   return attribute_list_contained (l1, l2)
+ 	 && attribute_list_contained (l2, l1);
+ }
+ 
+ /* Given two lists of attributes, return true if list L2 is
+    completely contained within L1.  */
+ /* ??? This would be faster if attribute names were stored in a canonicalized
+    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
+    must be used to show these elements are equivalent (which they are).  */
+ /* ??? It's not clear that attributes with arguments will always be handled
+    correctly.  */
+ 
+ int
+ attribute_list_contained (const_tree l1, const_tree l2)
+ {
+   const_tree t1, t2;
+ 
+   /* First check the obvious, maybe the lists are identical.  */
+   if (l1 == l2)
+     return 1;
+ 
+   /* Maybe the lists are similar.  */
+   for (t1 = l1, t2 = l2;
+        t1 != 0 && t2 != 0
+        && get_attribute_name (t1) == get_attribute_name (t2)
+        && TREE_VALUE (t1) == TREE_VALUE (t2);
+        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
+     ;
+ 
+   /* Maybe the lists are equal.  */
+   if (t1 == 0 && t2 == 0)
+     return 1;
+ 
+   for (; t2 != 0; t2 = TREE_CHAIN (t2))
+     {
+       const_tree attr;
+       /* This CONST_CAST is okay because lookup_attribute does not
+ 	 modify its argument and the return value is assigned to a
+ 	 const_tree.  */
+       for (attr = lookup_ident_attribute (get_attribute_name (t2),
+ 					  CONST_CAST_TREE (l1));
+ 	   attr != NULL_TREE && !attribute_value_equal (t2, attr);
+ 	   attr = lookup_ident_attribute (get_attribute_name (t2),
+ 					  TREE_CHAIN (attr)))
+ 	;
+ 
+       if (attr == NULL_TREE)
+ 	return 0;
+     }
+ 
+   return 1;
+ }
+ 
+ /* The backbone of lookup_attribute().  ATTR_LEN is the string length
+    of ATTR_NAME, and LIST is not NULL_TREE.
+ 
+    The function is called from lookup_attribute in order to optimize
+    for size.  */
+ 
+ tree
+ private_lookup_attribute (const char *attr_name, size_t attr_len, tree list)
+ {
+   while (list)
+     {
+       tree attr = get_attribute_name (list);
+       size_t ident_len = IDENTIFIER_LENGTH (attr);
+       if (cmp_attribs (attr_name, attr_len, IDENTIFIER_POINTER (attr),
+ 		       ident_len))
+ 	break;
+       list = TREE_CHAIN (list);
+     }
+ 
+   return list;
+ }
+ 
+ /* Return true if the function decl or type NODE has been declared
+    with attribute ANAME among attributes ATTRS.  */
+ 
+ static bool
+ has_attribute (tree node, tree attrs, const char *aname)
+ {
+   if (!strcmp (aname, "const"))
+     {
+       if (DECL_P (node) && TREE_READONLY (node))
+ 	return true;
+     }
+   else if (!strcmp (aname, "malloc"))
+     {
+       if (DECL_P (node) && DECL_IS_MALLOC (node))
+ 	return true;
+     }
+   else if (!strcmp (aname, "noreturn"))
+     {
+       if (DECL_P (node) && TREE_THIS_VOLATILE (node))
+ 	return true;
+     }
+   else if (!strcmp (aname, "nothrow"))
+     {
+       if (TREE_NOTHROW (node))
+ 	return true;
+     }
+   else if (!strcmp (aname, "pure"))
+     {
+       if (DECL_P (node) && DECL_PURE_P (node))
+ 	return true;
+     }
+ 
+   return lookup_attribute (aname, attrs);
+ }
+ 
+ /* Return the number of mismatched function or type attributes between
+    the "template" function declaration TMPL and DECL.  The word "template"
+    doesn't necessarily refer to a C++ template but rather a declaration
+    whose attributes should be matched by those on DECL.  For a non-zero
+    return value set *ATTRSTR to a string representation of the list of
+    mismatched attributes with quoted names.
+    ATTRLIST is a list of additional attributes that SPEC should be
+    taken to ultimately be declared with.  */
+ 
+ unsigned
+ decls_mismatched_attributes (tree tmpl, tree decl, tree attrlist,
+ 			     const char* const blacklist[],
+ 			     pretty_printer *attrstr)
+ {
+   if (TREE_CODE (tmpl) != FUNCTION_DECL)
+     return 0;
+ 
+   /* Avoid warning if either declaration or its type is deprecated.  */
+   if (TREE_DEPRECATED (tmpl)
+       || TREE_DEPRECATED (decl))
+     return 0;
+ 
+   const tree tmpls[] = { tmpl, TREE_TYPE (tmpl) };
+   const tree decls[] = { decl, TREE_TYPE (decl) };
+ 
+   if (TREE_DEPRECATED (tmpls[1])
+       || TREE_DEPRECATED (decls[1])
+       || TREE_DEPRECATED (TREE_TYPE (tmpls[1]))
+       || TREE_DEPRECATED (TREE_TYPE (decls[1])))
+     return 0;
+ 
+   tree tmpl_attrs[] = { DECL_ATTRIBUTES (tmpl), TYPE_ATTRIBUTES (tmpls[1]) };
+   tree decl_attrs[] = { DECL_ATTRIBUTES (decl), TYPE_ATTRIBUTES (decls[1]) };
+ 
+   if (!decl_attrs[0])
+     decl_attrs[0] = attrlist;
+   else if (!decl_attrs[1])
+     decl_attrs[1] = attrlist;
+ 
+   /* Avoid warning if the template has no attributes.  */
+   if (!tmpl_attrs[0] && !tmpl_attrs[1])
+     return 0;
+ 
+   /* Avoid warning if either declaration contains an attribute on
+      the white list below.  */
+   const char* const whitelist[] = {
+     "error", "warning"
+   };
+ 
+   for (unsigned i = 0; i != 2; ++i)
+     for (unsigned j = 0; j != sizeof whitelist / sizeof *whitelist; ++j)
+       if (lookup_attribute (whitelist[j], tmpl_attrs[i])
+ 	  || lookup_attribute (whitelist[j], decl_attrs[i]))
+ 	return 0;
+ 
+   /* Put together a list of the black-listed attributes that the template
+      is declared with and the declaration is not, in case it's not apparent
+      from the most recent declaration of the template.  */
+   unsigned nattrs = 0;
+ 
+   for (unsigned i = 0; blacklist[i]; ++i)
+     {
+       /* Attribute leaf only applies to extern functions.  Avoid mentioning
+ 	 it when it's missing from a static declaration.  */
+       if (!TREE_PUBLIC (decl)
+ 	  && !strcmp ("leaf", blacklist[i]))
+ 	continue;
+ 
+       for (unsigned j = 0; j != 2; ++j)
+ 	{
+ 	  if (!has_attribute (tmpls[j], tmpl_attrs[j], blacklist[i]))
+ 	    continue;
+ 
+ 	  bool found = false;
+ 	  unsigned kmax = 1 + !!decl_attrs[1];
+ 	  for (unsigned k = 0; k != kmax; ++k)
+ 	    {
+ 	      if (has_attribute (decls[k], decl_attrs[k], blacklist[i]))
+ 		{
+ 		  found = true;
+ 		  break;
+ 		}
+ 	    }
+ 
+ 	  if (!found)
+ 	    {
+ 	      if (nattrs)
+ 		pp_string (attrstr, ", ");
+ 	      pp_begin_quote (attrstr, pp_show_color (global_dc->printer));
+ 	      pp_string (attrstr, blacklist[i]);
+ 	      pp_end_quote (attrstr, pp_show_color (global_dc->printer));
+ 	      ++nattrs;
+ 	    }
+ 
+ 	  break;
+ 	}
+     }
+ 
+   return nattrs;
+ }
+ 
+ /* Issue a warning for the declaration ALIAS for TARGET where ALIAS
+    specifies either attributes that are incompatible with those of
+    TARGET, or attributes that are missing and that declaring ALIAS
+    with would benefit.  */
+ 
+ void
+ maybe_diag_alias_attributes (tree alias, tree target)
+ {
+   /* Do not expect attributes to match between aliases and ifunc
+      resolvers.  There is no obvious correspondence between them.  */
+   if (lookup_attribute ("ifunc", DECL_ATTRIBUTES (alias)))
+     return;
+ 
+   const char* const blacklist[] = {
+     "alloc_align", "alloc_size", "cold", "const", "hot", "leaf", "malloc",
+     "nonnull", "noreturn", "nothrow", "pure", "returns_nonnull",
+     "returns_twice", NULL
+   };
+ 
+   pretty_printer attrnames;
+   if (warn_attribute_alias > 1)
+     {
+       /* With -Wattribute-alias=2 detect alias declarations that are more
+ 	 restrictive than their targets first.  Those indicate potential
+ 	 codegen bugs.  */
+       if (unsigned n = decls_mismatched_attributes (alias, target, NULL_TREE,
+ 						    blacklist, &attrnames))
+ 	{
+ 	  auto_diagnostic_group d;
+ 	  if (warning_n (DECL_SOURCE_LOCATION (alias),
+ 			 OPT_Wattribute_alias_, n,
+ 			 "%qD specifies more restrictive attribute than "
+ 			 "its target %qD: %s",
+ 			 "%qD specifies more restrictive attributes than "
+ 			 "its target %qD: %s",
+ 			 alias, target, pp_formatted_text (&attrnames)))
+ 	    inform (DECL_SOURCE_LOCATION (target),
+ 		    "%qD target declared here", alias);
+ 	  return;
+ 	}
+     }
+ 
+   /* Detect alias declarations that are less restrictive than their
+      targets.  Those suggest potential optimization opportunities
+      (solved by adding the missing attribute(s) to the alias).  */
+   if (unsigned n = decls_mismatched_attributes (target, alias, NULL_TREE,
+ 						blacklist, &attrnames))
+     {
+       auto_diagnostic_group d;
+       if (warning_n (DECL_SOURCE_LOCATION (alias),
+ 		     OPT_Wmissing_attributes, n,
+ 		     "%qD specifies less restrictive attribute than "
+ 		     "its target %qD: %s",
+ 		     "%qD specifies less restrictive attributes than "
+ 		     "its target %qD: %s",
+ 		     alias, target, pp_formatted_text (&attrnames)))
+ 	inform (DECL_SOURCE_LOCATION (target),
+ 		"%qD target declared here", alias);
+     }
+ }
+ 
+ /* Initialize a mapping RWM for a call to a function declared with
+    attribute access in ATTRS.  Each attribute positional operand
+    inserts one entry into the mapping with the operand number as
+    the key.  */
+ 
+ void
+ init_attr_rdwr_indices (rdwr_map *rwm, tree attrs)
+ {
+   if (!attrs)
+     return;
+ 
+   for (tree access = attrs;
+        (access = lookup_attribute ("access", access));
+        access = TREE_CHAIN (access))
+     {
+       /* The TREE_VALUE of an attribute is a TREE_LIST whose TREE_VALUE
+ 	 is the attribute argument's value.  */
+       tree mode = TREE_VALUE (access);
+       if (!mode)
+ 	return;
+ 
+       /* The (optional) list of VLA bounds.  */
+       tree vblist = TREE_CHAIN (mode);
+       mode = TREE_VALUE (mode);
+       if (TREE_CODE (mode) != STRING_CST)
+ 	continue;
+       gcc_assert (TREE_CODE (mode) == STRING_CST);
+ 
+       if (vblist)
+ 	vblist = nreverse (copy_list (TREE_VALUE (vblist)));
+ 
+       for (const char *m = TREE_STRING_POINTER (mode); *m; )
+ 	{
+ 	  attr_access acc = { };
+ 
+ 	  /* Skip the internal-only plus sign.  */
+ 	  if (*m == '+')
+ 	    ++m;
+ 
+ 	  acc.str = m;
+ 	  acc.mode = acc.from_mode_char (*m);
+ 	  acc.sizarg = UINT_MAX;
+ 
+ 	  const char *end;
+ 	  acc.ptrarg = strtoul (++m, const_cast<char**>(&end), 10);
+ 	  m = end;
+ 
+ 	  if (*m == '[')
+ 	    {
+ 	      /* Forms containing the square bracket are internal-only
+ 		 (not specified by an attribute declaration), and used
+ 		 for various forms of array and VLA parameters.  */
+ 	      acc.internal_p = true;
+ 
+ 	      /* Search to the closing bracket and look at the preceding
+ 		 code: it determines the form of the most significant
+ 		 bound of the array.  Others prior to it encode the form
+ 		 of interior VLA bounds.  They're not of interest here.  */
+ 	      end = strchr (m, ']');
+ 	      const char *p = end;
+ 	      gcc_assert (p);
+ 
+ 	      while (ISDIGIT (p[-1]))
+ 		--p;
+ 
+ 	      if (ISDIGIT (*p))
+ 		{
+ 		  /* A digit denotes a constant bound (as in T[3]).  */
+ 		  acc.static_p = p[-1] == 's';
+ 		  acc.minsize = strtoull (p, NULL, 10);
+ 		}
+ 	      else if (' ' == p[-1])
+ 		{
+ 		  /* A space denotes an ordinary array of unspecified bound
+ 		     (as in T[]).  */
+ 		  acc.minsize = 0;
+ 		}
+ 	      else if ('*' == p[-1] || '$' == p[-1])
+ 		{
+ 		  /* An asterisk denotes a VLA.  When the closing bracket
+ 		     is followed by a comma and a dollar sign its bound is
+ 		     on the list.  Otherwise it's a VLA with an unspecified
+ 		     bound.  */
+ 		  acc.static_p = p[-2] == 's';
+ 		  acc.minsize = HOST_WIDE_INT_M1U;
+ 		}
+ 
+ 	      m = end + 1;
+ 	    }
+ 
+ 	  if (*m == ',')
+ 	    {
+ 	      ++m;
+ 	      do
+ 		{
+ 		  if (*m == '$')
+ 		    {
+ 		      ++m;
+ 		      if (!acc.size && vblist)
+ 			{
+ 			  /* Extract the list of VLA bounds for the current
+ 			     parameter, store it in ACC.SIZE, and advance
+ 			     to the list of bounds for the next VLA parameter.
+ 			  */
+ 			  acc.size = TREE_VALUE (vblist);
+ 			  vblist = TREE_CHAIN (vblist);
+ 			}
+ 		    }
+ 
+ 		  if (ISDIGIT (*m))
+ 		    {
+ 		      /* Extract the positional argument.  It's absent
+ 			 for VLAs whose bound doesn't name a function
+ 			 parameter.  */
+ 		      unsigned pos = strtoul (m, const_cast<char**>(&end), 10);
+ 		      if (acc.sizarg == UINT_MAX)
+ 			acc.sizarg = pos;
+ 		      m = end;
+ 		    }
+ 		}
+ 	      while (*m == '$');
+ 	    }
+ 
+ 	  acc.end = m;
+ 
+ 	  bool existing;
+ 	  auto &ref = rwm->get_or_insert (acc.ptrarg, &existing);
+ 	  if (existing)
+ 	    {
+ 	      /* Merge the new spec with the existing.  */
+ 	      if (acc.minsize == HOST_WIDE_INT_M1U)
+ 		ref.minsize = HOST_WIDE_INT_M1U;
+ 
+ 	      if (acc.sizarg != UINT_MAX)
+ 		ref.sizarg = acc.sizarg;
+ 
+ 	      if (acc.mode)
+ 		ref.mode = acc.mode;
+ 	    }
+ 	  else
+ 	    ref = acc;
+ 
+ 	  /* Unconditionally add an entry for the required pointer
+ 	     operand of the attribute, and one for the optional size
+ 	     operand when it's specified.  */
+ 	  if (acc.sizarg != UINT_MAX)
+ 	    rwm->put (acc.sizarg, acc);
+ 	}
+     }
+ }
+ 
+ /* Return the access specification for a function parameter PARM
+    or null if the current function has no such specification.  */
+ 
+ attr_access *
+ get_parm_access (rdwr_map &rdwr_idx, tree parm,
+ 		 tree fndecl /* = current_function_decl */)
+ {
+   tree fntype = TREE_TYPE (fndecl);
+   init_attr_rdwr_indices (&rdwr_idx, TYPE_ATTRIBUTES (fntype));
+ 
+   if (rdwr_idx.is_empty ())
+     return NULL;
+ 
+   unsigned argpos = 0;
+   tree fnargs = DECL_ARGUMENTS (fndecl);
+   for (tree arg = fnargs; arg; arg = TREE_CHAIN (arg), ++argpos)
+     if (arg == parm)
+       return rdwr_idx.get (argpos);
+ 
+   return NULL;
+ }
+ 
+ /* Return the internal representation as STRING_CST.  Internal positional
+    arguments are zero-based.  */
+ 
+ tree
+ attr_access::to_internal_string () const
+ {
+   return build_string (end - str, str);
+ }
+ 
+ /* Return the human-readable representation of the external attribute
+    specification (as it might appear in the source code) as STRING_CST.
+    External positional arguments are one-based.  */
+ 
+ tree
+ attr_access::to_external_string () const
+ {
+   char buf[80];
+   gcc_assert (mode != access_deferred);
+   int len = snprintf (buf, sizeof buf, "access (%s, %u",
+ 		      mode_names[mode], ptrarg + 1);
+   if (sizarg != UINT_MAX)
+     len += snprintf (buf + len, sizeof buf - len, ", %u", sizarg + 1);
+   strcpy (buf + len, ")");
+   return build_string (len + 2, buf);
+ }
+ 
+ /* Return the number of specified VLA bounds and set *nunspec to
+    the number of unspecified ones (those designated by [*]).  */
+ 
+ unsigned
+ attr_access::vla_bounds (unsigned *nunspec) const
+ {
+   unsigned nbounds = 0;
+   *nunspec = 0;
+   /* STR points to the beginning of the specified string for the current
+      argument that may be followed by the string for the next argument.  */
+   for (const char* p = strchr (str, ']'); p && *p != '['; --p)
+     {
+       if (*p == '*')
+ 	++*nunspec;
+       else if (*p == '$')
+ 	++nbounds;
+     }
+   return nbounds;
+ }
+ 
+ /* Reset front end-specific attribute access data from ATTRS.
+    Called from the free_lang_data pass.  */
+ 
+ /* static */ void
+ attr_access::free_lang_data (tree attrs)
+ {
+   for (tree acs = attrs; (acs = lookup_attribute ("access", acs));
+        acs = TREE_CHAIN (acs))
+     {
+       tree vblist = TREE_VALUE (acs);
+       vblist = TREE_CHAIN (vblist);
+       if (!vblist)
+ 	continue;
+ 
+       for (vblist = TREE_VALUE (vblist); vblist; vblist = TREE_CHAIN (vblist))
+ 	{
+ 	  tree *pvbnd = &TREE_VALUE (vblist);
+ 	  if (!*pvbnd || DECL_P (*pvbnd))
+ 	    continue;
+ 
+ 	  /* VLA bounds that are expressions as opposed to DECLs are
+ 	     only used in the front end.  Reset them to keep front end
+ 	     trees leaking into the middle end (see pr97172) and to
+ 	     free up memory.  */
+ 	  *pvbnd = NULL_TREE;
+ 	}
+     }
+ 
+   for (tree argspec = attrs; (argspec = lookup_attribute ("arg spec", argspec));
+        argspec = TREE_CHAIN (argspec))
+     {
+       /* Same as above.  */
+       tree *pvblist = &TREE_VALUE (argspec);
+       *pvblist = NULL_TREE;
+     }
+ }
+ 
+ /* Defined in attr_access.  */
+ constexpr char attr_access::mode_chars[];
+ constexpr char attr_access::mode_names[][11];
+ 
+ /* Format an array, including a VLA, pointed to by TYPE and used as
+    a function parameter as a human-readable string.  ACC describes
+    an access to the parameter and is used to determine the outermost
+    form of the array including its bound which is otherwise obviated
+    by its decay to pointer.  Return the formatted string.  */
+ 
+ std::string
+ attr_access::array_as_string (tree type) const
+ {
+   std::string typstr;
+ 
+   if (type == error_mark_node)
+     return std::string ();
+ 
+   if (this->str)
+     {
+       /* For array parameters (but not pointers) create a temporary array
+ 	 type that corresponds to the form of the parameter including its
+ 	 qualifiers even though they apply to the pointer, not the array
+ 	 type.  */
+       const bool vla_p = minsize == HOST_WIDE_INT_M1U;
+       tree eltype = TREE_TYPE (type);
+       tree index_type = NULL_TREE;
+ 
+       if (minsize == HOST_WIDE_INT_M1U)
+ 	{
+ 	  /* Determine if this is a VLA (an array whose most significant
+ 	     bound is nonconstant and whose access string has "$]" in it)
+ 	     extract the bound expression from SIZE.  */
+ 	  const char *p = end;
+ 	  for ( ; p != str && *p-- != ']'; );
+ 	  if (*p == '$')
+ 	    /* SIZE may have been cleared.  Use it with care.  */
+ 	    index_type = build_index_type (size ? TREE_VALUE (size) : size);
+ 	}
+       else if (minsize)
+ 	index_type = build_index_type (size_int (minsize - 1));
+ 
+       tree arat = NULL_TREE;
+       if (static_p || vla_p)
+ 	{
+ 	  tree flag = static_p ? integer_one_node : NULL_TREE;
+ 	  /* Hack: there's no language-independent way to encode
+ 	     the "static" specifier or the "*" notation in an array type.
+ 	     Add a "fake" attribute to have the pretty-printer add "static"
+ 	     or "*".  The "[static N]" notation is only valid in the most
+ 	     significant bound but [*] can be used for any bound.  Because
+ 	     [*] is represented the same as [0] this hack only works for
+ 	     the most significant bound like static and the others are
+ 	     rendered as [0].  */
+ 	  arat = build_tree_list (get_identifier ("array"), flag);
+ 	}
+ 
+       const int quals = TYPE_QUALS (type);
+       type = build_array_type (eltype, index_type);
+       type = build_type_attribute_qual_variant (type, arat, quals);
+     }
+ 
+   /* Format the type using the current pretty printer.  The generic tree
+      printer does a terrible job.  */
+   pretty_printer *pp = global_dc->printer->clone ();
+   pp_printf (pp, "%qT", type);
+   typstr = pp_formatted_text (pp);
+   delete pp;
+ 
+   return typstr;
+ }
+ 
+ #if CHECKING_P
+ 
+ namespace selftest
+ {
+ 
+ /* Helper types to verify the consistency attribute exclusions.  */
+ 
+ typedef std::pair<const char *, const char *> excl_pair;
+ 
+ struct excl_hash_traits: typed_noop_remove<excl_pair>
+ {
+   typedef excl_pair  value_type;
+   typedef value_type compare_type;
+ 
+   static hashval_t hash (const value_type &x)
+   {
+     hashval_t h1 = htab_hash_string (x.first);
+     hashval_t h2 = htab_hash_string (x.second);
+     return h1 ^ h2;
+   }
+ 
+   static bool equal (const value_type &x, const value_type &y)
+   {
+     return !strcmp (x.first, y.first) && !strcmp (x.second, y.second);
+   }
+ 
+   static void mark_deleted (value_type &x)
+   {
+     x = value_type (NULL, NULL);
+   }
+ 
+   static const bool empty_zero_p = false;
+ 
+   static void mark_empty (value_type &x)
+   {
+     x = value_type ("", "");
+   }
+ 
+   static bool is_deleted (const value_type &x)
+   {
+     return !x.first && !x.second;
+   }
+ 
+   static bool is_empty (const value_type &x)
+   {
+     return !*x.first && !*x.second;
+   }
+ };
+ 
+ 
+ /* Self-test to verify that each attribute exclusion is symmetric,
+    meaning that if attribute A is encoded as incompatible with
+    attribute B then the opposite relationship is also encoded.
+    This test also detects most cases of misspelled attribute names
+    in exclusions.  */
+ 
+ static void
+ test_attribute_exclusions ()
+ {
+   /* Iterate over the array of attribute tables first (with TI0 as
+      the index) and over the array of attribute_spec in each table
+      (with SI0 as the index).  */
+   const size_t ntables = ARRAY_SIZE (attribute_tables);
+ 
+   /* Set of pairs of mutually exclusive attributes.  */
+   typedef hash_set<excl_pair, false, excl_hash_traits> exclusion_set;
+   exclusion_set excl_set;
+ 
+   for (size_t ti0 = 0; ti0 != ntables; ++ti0)
+     for (size_t s0 = 0; attribute_tables[ti0][s0].name; ++s0)
+       {
+ 	const attribute_spec::exclusions *excl
+ 	  = attribute_tables[ti0][s0].exclude;
+ 
+ 	/* Skip each attribute that doesn't define exclusions.  */
+ 	if (!excl)
+ 	  continue;
+ 
+ 	const char *attr_name = attribute_tables[ti0][s0].name;
+ 
+ 	/* Iterate over the set of exclusions for every attribute
+ 	   (with EI0 as the index) adding the exclusions defined
+ 	   for each to the set.  */
+ 	for (size_t ei0 = 0; excl[ei0].name; ++ei0)
+ 	  {
+ 	    const char *excl_name = excl[ei0].name;
+ 
+ 	    if (!strcmp (attr_name, excl_name))
+ 	      continue;
+ 
+ 	    excl_set.add (excl_pair (attr_name, excl_name));
+ 	  }
+       }
+ 
+   /* Traverse the set of mutually exclusive pairs of attributes
+      and verify that they are symmetric.  */
+   for (exclusion_set::iterator it = excl_set.begin ();
+        it != excl_set.end ();
+        ++it)
+     {
+       if (!excl_set.contains (excl_pair ((*it).second, (*it).first)))
+ 	{
+ 	  /* An exclusion for an attribute has been found that
+ 	     doesn't have a corresponding exclusion in the opposite
+ 	     direction.  */
+ 	  char desc[120];
+ 	  sprintf (desc, "'%s' attribute exclusion '%s' must be symmetric",
+ 		   (*it).first, (*it).second);
+ 	  fail (SELFTEST_LOCATION, desc);
+ 	}
+     }
+ }
+ 
+ void
+ attribs_cc_tests ()
+ {
+   test_attribute_exclusions ();
+ }
+ 
+ } /* namespace selftest */
+ 
+ #endif /* CHECKING_P */
diff -Nrcpad gcc-11.3.0/gcc/attribs.h gcc-12.1.0/gcc/attribs.h
*** gcc-11.3.0/gcc/attribs.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/attribs.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Declarations and definitions dealing with attribute handling.
!    Copyright (C) 2013-2021 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Declarations and definitions dealing with attribute handling.
!    Copyright (C) 2013-2022 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** along with GCC; see the file COPYING3.
*** 21,26 ****
--- 21,27 ----
  #define GCC_ATTRIBS_H
  
  extern const struct attribute_spec *lookup_attribute_spec (const_tree);
+ extern void free_attr_data ();
  extern void init_attributes (void);
  
  /* Process the attributes listed in ATTRIBUTES and install them in *NODE,
*************** extern tree get_attribute_name (const_tr
*** 38,52 ****
  extern tree get_attribute_namespace (const_tree);
  extern void apply_tm_attr (tree, tree);
  extern tree make_attribute (const char *, const char *, tree);
  
  extern struct scoped_attributes* register_scoped_attributes (const struct attribute_spec *,
! 							     const char *);
  
  extern char *sorted_attr_string (tree);
  extern bool common_function_versions (tree, tree);
- extern char *make_unique_name (tree, const char *, bool);
  extern tree make_dispatcher_decl (const tree);
  extern bool is_function_default_version (const tree);
  
  /* Return a type like TTYPE except that its TYPE_ATTRIBUTES
     is ATTRIBUTE.
--- 39,56 ----
  extern tree get_attribute_namespace (const_tree);
  extern void apply_tm_attr (tree, tree);
  extern tree make_attribute (const char *, const char *, tree);
+ extern bool attribute_ignored_p (tree);
+ extern bool attribute_ignored_p (const attribute_spec *const);
  
  extern struct scoped_attributes* register_scoped_attributes (const struct attribute_spec *,
! 							     const char *,
! 							     bool = false);
  
  extern char *sorted_attr_string (tree);
  extern bool common_function_versions (tree, tree);
  extern tree make_dispatcher_decl (const tree);
  extern bool is_function_default_version (const tree);
+ extern void handle_ignored_attributes_option (vec<char *> *);
  
  /* Return a type like TTYPE except that its TYPE_ATTRIBUTES
     is ATTRIBUTE.
*************** extern tree build_type_attribute_variant
*** 58,63 ****
--- 62,68 ----
  extern tree build_decl_attribute_variant (tree, tree);
  extern tree build_type_attribute_qual_variant (tree, tree, int);
  
+ extern bool simple_cst_list_equal (const_tree, const_tree);
  extern bool attribute_value_equal (const_tree, const_tree);
  
  /* Return 0 if the attributes for two types are incompatible, 1 if they
*************** extern unsigned decls_mismatched_attribu
*** 115,131 ****
  
  extern void maybe_diag_alias_attributes (tree, tree);
  
  /* For a given IDENTIFIER_NODE, strip leading and trailing '_' characters
     so that we have a canonical form of attribute names.  */
  
  static inline tree
  canonicalize_attr_name (tree attr_name)
  {
!   const size_t l = IDENTIFIER_LENGTH (attr_name);
    const char *s = IDENTIFIER_POINTER (attr_name);
  
!   if (l > 4 && s[0] == '_' && s[1] == '_' && s[l - 1] == '_' && s[l - 2] == '_')
!     return get_identifier_with_length (s + 2, l - 4);
  
    return attr_name;
  }
--- 120,153 ----
  
  extern void maybe_diag_alias_attributes (tree, tree);
  
+ /* For a given string S of length L, strip leading and trailing '_' characters
+    so that we have a canonical form of attribute names.  NB: This function may
+    change S and L.  */
+ 
+ template <typename T>
+ inline bool
+ canonicalize_attr_name (const char *&s, T &l)
+ {
+   if (l > 4 && s[0] == '_' && s[1] == '_' && s[l - 1] == '_' && s[l - 2] == '_')
+     {
+       s += 2;
+       l -= 4;
+       return true;
+     }
+   return false;
+ }
+ 
  /* For a given IDENTIFIER_NODE, strip leading and trailing '_' characters
     so that we have a canonical form of attribute names.  */
  
  static inline tree
  canonicalize_attr_name (tree attr_name)
  {
!   size_t l = IDENTIFIER_LENGTH (attr_name);
    const char *s = IDENTIFIER_POINTER (attr_name);
  
!   if (canonicalize_attr_name (s, l))
!     return get_identifier_with_length (s, l);
  
    return attr_name;
  }
*************** is_attribute_p (const char *attr_name, c
*** 169,175 ****
  static inline tree
  lookup_attribute (const char *attr_name, tree list)
  {
!   gcc_checking_assert (attr_name[0] != '_');
    /* In most cases, list is NULL_TREE.  */
    if (list == NULL_TREE)
      return NULL_TREE;
--- 191,201 ----
  static inline tree
  lookup_attribute (const char *attr_name, tree list)
  {
!   if (CHECKING_P && attr_name[0] != '_')
!     {
!       size_t attr_len = strlen (attr_name);
!       gcc_checking_assert (!canonicalize_attr_name (attr_name, attr_len));
!     }
    /* In most cases, list is NULL_TREE.  */
    if (list == NULL_TREE)
      return NULL_TREE;
*************** lookup_attribute_by_prefix (const char *
*** 200,206 ****
        size_t attr_len = strlen (attr_name);
        while (list)
  	{
! 	  size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
  
  	  if (attr_len > ident_len)
  	    {
--- 226,233 ----
        size_t attr_len = strlen (attr_name);
        while (list)
  	{
! 	  tree name = get_attribute_name (list);
! 	  size_t ident_len = IDENTIFIER_LENGTH (name);
  
  	  if (attr_len > ident_len)
  	    {
*************** lookup_attribute_by_prefix (const char *
*** 208,214 ****
  	      continue;
  	    }
  
! 	  const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
  	  gcc_checking_assert (attr_len == 0 || p[0] != '_');
  
  	  if (strncmp (attr_name, p, attr_len) == 0)
--- 235,241 ----
  	      continue;
  	    }
  
! 	  const char *p = IDENTIFIER_POINTER (name);
  	  gcc_checking_assert (attr_len == 0 || p[0] != '_');
  
  	  if (strncmp (attr_name, p, attr_len) == 0)
*************** extern void init_attr_rdwr_indices (rdwr
*** 316,321 ****
  extern attr_access *get_parm_access (rdwr_map &, tree,
  				     tree = current_function_decl);
  
- extern unsigned fndecl_dealloc_argno (tree fndecl);
- 
  #endif // GCC_ATTRIBS_H
--- 343,346 ----
diff -Nrcpad gcc-11.3.0/gcc/auto-inc-dec.c gcc-12.1.0/gcc/auto-inc-dec.c
*** gcc-11.3.0/gcc/auto-inc-dec.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/auto-inc-dec.c	Thu Jan  1 00:00:00 1970
***************
*** 1,1752 ****
- /* Discovery of auto-inc and auto-dec instructions.
-    Copyright (C) 2006-2021 Free Software Foundation, Inc.
-    Contributed by Kenneth Zadeck <zadeck@naturalbridge.com>
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "backend.h"
- #include "target.h"
- #include "rtl.h"
- #include "tree.h"
- #include "predict.h"
- #include "df.h"
- #include "insn-config.h"
- #include "memmodel.h"
- #include "emit-rtl.h"
- #include "recog.h"
- #include "cfgrtl.h"
- #include "expr.h"
- #include "tree-pass.h"
- #include "dbgcnt.h"
- #include "print-rtl.h"
- #include "valtrack.h"
- 
- /* This pass was originally removed from flow.c. However there is
-    almost nothing that remains of that code.
- 
-    There are (4) basic forms that are matched:
- 
-       (1) FORM_PRE_ADD
-            a <- b + c
-            ...
-            *a
- 
-         becomes
- 
-            a <- b
-            ...
-            *(a += c) pre
- 
-         or, alternately,
- 
-            a <- b + c
-            ...
-            *b
- 
-         becomes
- 
-            a <- b
-            ...
-            *(a += c) post
- 
-         This uses a post-add, but it's handled as FORM_PRE_ADD because
-         the "increment" insn appears before the memory access.
- 
- 
-       (2) FORM_PRE_INC
-            a += c
-            ...
-            *a
- 
-         becomes
- 
-            ...
-            *(a += c) pre
- 
- 
-       (3) FORM_POST_ADD
-            *a
-            ...
-            b <- a + c
- 
- 	   (For this case to be true, b must not be assigned or used between
- 	   the *a and the assignment to b.  B must also be a Pmode reg.)
- 
-         becomes
- 
-            b <- a
-            *(b += c) post
-            ...
- 
- 
-       (4) FORM_POST_INC
-            *a
-            ...
-            a <- a + c
- 
-         becomes
- 
-            *(a += c) post
-            ...
- 
- 
-   There are three types of values of c.
- 
-     1) c is a constant equal to the width of the value being accessed by
-        the pointer.  This is useful for machines that have
-        HAVE_PRE_INCREMENT, HAVE_POST_INCREMENT, HAVE_PRE_DECREMENT or
-        HAVE_POST_DECREMENT defined.
- 
-     2) c is a constant not equal to the width of the value being accessed
-        by the pointer.  This is useful for machines that have
-        HAVE_PRE_MODIFY_DISP, HAVE_POST_MODIFY_DISP defined.
- 
-     3) c is a register.  This is useful for machines that have
-        HAVE_PRE_MODIFY_REG,  HAVE_POST_MODIFY_REG
- 
-   The is one special case: if a already had an offset equal to it +-
-   its width and that offset is equal to -c when the increment was
-   before the ref or +c if the increment was after the ref, then if we
-   can do the combination but switch the pre/post bit.  */
- 
- 
- enum form
- {
-   FORM_PRE_ADD,
-   FORM_PRE_INC,
-   FORM_POST_ADD,
-   FORM_POST_INC,
-   FORM_last
- };
- 
- /* The states of the second operands of mem refs and inc insns.  If no
-    second operand of the mem_ref was found, it is assumed to just be
-    ZERO.  SIZE is the size of the mode accessed in the memref.  The
-    ANY is used for constants that are not +-size or 0.  REG is used if
-    the forms are reg1 + reg2.  */
- 
- enum inc_state
- {
-   INC_ZERO,           /* == 0  */
-   INC_NEG_SIZE,       /* == +size  */
-   INC_POS_SIZE,       /* == -size */
-   INC_NEG_ANY,        /* == some -constant  */
-   INC_POS_ANY,        /* == some +constant  */
-   INC_REG,            /* == some register  */
-   INC_last
- };
- 
- /* The eight forms that pre/post inc/dec can take.  */
- enum gen_form
- {
-   NOTHING,
-   SIMPLE_PRE_INC,     /* ++size  */
-   SIMPLE_POST_INC,    /* size++  */
-   SIMPLE_PRE_DEC,     /* --size  */
-   SIMPLE_POST_DEC,    /* size--  */
-   DISP_PRE,           /* ++con   */
-   DISP_POST,          /* con++   */
-   REG_PRE,            /* ++reg   */
-   REG_POST            /* reg++   */
- };
- 
- /* Tmp mem rtx for use in cost modeling.  */
- static rtx mem_tmp;
- 
- static enum inc_state
- set_inc_state (HOST_WIDE_INT val, poly_int64 size)
- {
-   if (val == 0)
-     return INC_ZERO;
-   if (val < 0)
-     return known_eq (val, -size) ? INC_NEG_SIZE : INC_NEG_ANY;
-   else
-     return known_eq (val, size) ? INC_POS_SIZE : INC_POS_ANY;
- }
- 
- /* The DECISION_TABLE that describes what form, if any, the increment
-    or decrement will take. It is a three dimensional table.  The first
-    index is the type of constant or register found as the second
-    operand of the inc insn.  The second index is the type of constant
-    or register found as the second operand of the memory reference (if
-    no second operand exists, 0 is used).  The third index is the form
-    and location (relative to the mem reference) of inc insn.  */
- 
- static bool initialized = false;
- static enum gen_form decision_table[INC_last][INC_last][FORM_last];
- 
- static void
- init_decision_table (void)
- {
-   enum gen_form value;
- 
-   if (HAVE_PRE_INCREMENT || HAVE_PRE_MODIFY_DISP)
-     {
-       /* Prefer the simple form if both are available.  */
-       value = (HAVE_PRE_INCREMENT) ? SIMPLE_PRE_INC : DISP_PRE;
- 
-       decision_table[INC_POS_SIZE][INC_ZERO][FORM_PRE_ADD] = value;
-       decision_table[INC_POS_SIZE][INC_ZERO][FORM_PRE_INC] = value;
- 
-       decision_table[INC_POS_SIZE][INC_POS_SIZE][FORM_POST_ADD] = value;
-       decision_table[INC_POS_SIZE][INC_POS_SIZE][FORM_POST_INC] = value;
-     }
- 
-   if (HAVE_POST_INCREMENT || HAVE_POST_MODIFY_DISP)
-     {
-       /* Prefer the simple form if both are available.  */
-       value = (HAVE_POST_INCREMENT) ? SIMPLE_POST_INC : DISP_POST;
- 
-       decision_table[INC_POS_SIZE][INC_ZERO][FORM_POST_ADD] = value;
-       decision_table[INC_POS_SIZE][INC_ZERO][FORM_POST_INC] = value;
- 
-       decision_table[INC_POS_SIZE][INC_NEG_SIZE][FORM_PRE_ADD] = value;
-       decision_table[INC_POS_SIZE][INC_NEG_SIZE][FORM_PRE_INC] = value;
-     }
- 
-   if (HAVE_PRE_DECREMENT || HAVE_PRE_MODIFY_DISP)
-     {
-       /* Prefer the simple form if both are available.  */
-       value = (HAVE_PRE_DECREMENT) ? SIMPLE_PRE_DEC : DISP_PRE;
- 
-       decision_table[INC_NEG_SIZE][INC_ZERO][FORM_PRE_ADD] = value;
-       decision_table[INC_NEG_SIZE][INC_ZERO][FORM_PRE_INC] = value;
- 
-       decision_table[INC_NEG_SIZE][INC_NEG_SIZE][FORM_POST_ADD] = value;
-       decision_table[INC_NEG_SIZE][INC_NEG_SIZE][FORM_POST_INC] = value;
-     }
- 
-   if (HAVE_POST_DECREMENT || HAVE_POST_MODIFY_DISP)
-     {
-       /* Prefer the simple form if both are available.  */
-       value = (HAVE_POST_DECREMENT) ? SIMPLE_POST_DEC : DISP_POST;
- 
-       decision_table[INC_NEG_SIZE][INC_ZERO][FORM_POST_ADD] = value;
-       decision_table[INC_NEG_SIZE][INC_ZERO][FORM_POST_INC] = value;
- 
-       decision_table[INC_NEG_SIZE][INC_POS_SIZE][FORM_PRE_ADD] = value;
-       decision_table[INC_NEG_SIZE][INC_POS_SIZE][FORM_PRE_INC] = value;
-     }
- 
-   if (HAVE_PRE_MODIFY_DISP)
-     {
-       decision_table[INC_POS_ANY][INC_ZERO][FORM_PRE_ADD] = DISP_PRE;
-       decision_table[INC_POS_ANY][INC_ZERO][FORM_PRE_INC] = DISP_PRE;
- 
-       decision_table[INC_POS_ANY][INC_POS_ANY][FORM_POST_ADD] = DISP_PRE;
-       decision_table[INC_POS_ANY][INC_POS_ANY][FORM_POST_INC] = DISP_PRE;
- 
-       decision_table[INC_NEG_ANY][INC_ZERO][FORM_PRE_ADD] = DISP_PRE;
-       decision_table[INC_NEG_ANY][INC_ZERO][FORM_PRE_INC] = DISP_PRE;
- 
-       decision_table[INC_NEG_ANY][INC_NEG_ANY][FORM_POST_ADD] = DISP_PRE;
-       decision_table[INC_NEG_ANY][INC_NEG_ANY][FORM_POST_INC] = DISP_PRE;
-     }
- 
-   if (HAVE_POST_MODIFY_DISP)
-     {
-       decision_table[INC_POS_ANY][INC_ZERO][FORM_POST_ADD] = DISP_POST;
-       decision_table[INC_POS_ANY][INC_ZERO][FORM_POST_INC] = DISP_POST;
- 
-       decision_table[INC_POS_ANY][INC_NEG_ANY][FORM_PRE_ADD] = DISP_POST;
-       decision_table[INC_POS_ANY][INC_NEG_ANY][FORM_PRE_INC] = DISP_POST;
- 
-       decision_table[INC_NEG_ANY][INC_ZERO][FORM_POST_ADD] = DISP_POST;
-       decision_table[INC_NEG_ANY][INC_ZERO][FORM_POST_INC] = DISP_POST;
- 
-       decision_table[INC_NEG_ANY][INC_POS_ANY][FORM_PRE_ADD] = DISP_POST;
-       decision_table[INC_NEG_ANY][INC_POS_ANY][FORM_PRE_INC] = DISP_POST;
-     }
- 
-   /* This is much simpler than the other cases because we do not look
-      for the reg1-reg2 case.  Note that we do not have a INC_POS_REG
-      and INC_NEG_REG states.  Most of the use of such states would be
-      on a target that had an R1 - R2 update address form.
- 
-      There is the remote possibility that you could also catch a = a +
-      b; *(a - b) as a postdecrement of (a + b).  However, it is
-      unclear if *(a - b) would ever be generated on a machine that did
-      not have that kind of addressing mode.  The IA-64 and RS6000 will
-      not do this, and I cannot speak for any other.  If any
-      architecture does have an a-b update for, these cases should be
-      added.  */
-   if (HAVE_PRE_MODIFY_REG)
-     {
-       decision_table[INC_REG][INC_ZERO][FORM_PRE_ADD] = REG_PRE;
-       decision_table[INC_REG][INC_ZERO][FORM_PRE_INC] = REG_PRE;
- 
-       decision_table[INC_REG][INC_REG][FORM_POST_ADD] = REG_PRE;
-       decision_table[INC_REG][INC_REG][FORM_POST_INC] = REG_PRE;
-     }
- 
-   if (HAVE_POST_MODIFY_REG)
-     {
-       decision_table[INC_REG][INC_ZERO][FORM_POST_ADD] = REG_POST;
-       decision_table[INC_REG][INC_ZERO][FORM_POST_INC] = REG_POST;
-     }
- 
-   initialized = true;
- }
- 
- /* Parsed fields of an inc insn of the form "reg_res = reg0+reg1" or
-    "reg_res = reg0+c".  */
- 
- static struct inc_insn
- {
-   rtx_insn *insn;     /* The insn being parsed.  */
-   rtx pat;            /* The pattern of the insn.  */
-   bool reg1_is_const; /* True if reg1 is const, false if reg1 is a reg.  */
-   enum form form;
-   rtx reg_res;
-   rtx reg0;
-   rtx reg1;
-   enum inc_state reg1_state;/* The form of the const if reg1 is a const.  */
-   HOST_WIDE_INT reg1_val;/* Value if reg1 is const.  */
- } inc_insn;
- 
- 
- /* Dump the parsed inc insn to FILE.  */
- 
- static void
- dump_inc_insn (FILE *file)
- {
-   const char *f = ((inc_insn.form == FORM_PRE_ADD)
- 	      || (inc_insn.form == FORM_PRE_INC)) ? "pre" : "post";
- 
-   dump_insn_slim (file, inc_insn.insn);
- 
-   switch (inc_insn.form)
-     {
-     case FORM_PRE_ADD:
-     case FORM_POST_ADD:
-       if (inc_insn.reg1_is_const)
- 	fprintf (file, "found %s add(%d) r[%d]=r[%d]+%d\n",
- 		 f, INSN_UID (inc_insn.insn),
- 		 REGNO (inc_insn.reg_res),
- 		 REGNO (inc_insn.reg0), (int) inc_insn.reg1_val);
-       else
- 	fprintf (file, "found %s add(%d) r[%d]=r[%d]+r[%d]\n",
- 		 f, INSN_UID (inc_insn.insn),
- 		 REGNO (inc_insn.reg_res),
- 		 REGNO (inc_insn.reg0), REGNO (inc_insn.reg1));
-       break;
- 
-     case FORM_PRE_INC:
-     case FORM_POST_INC:
-       if (inc_insn.reg1_is_const)
- 	fprintf (file, "found %s inc(%d) r[%d]+=%d\n",
- 		 f, INSN_UID (inc_insn.insn),
- 		 REGNO (inc_insn.reg_res), (int) inc_insn.reg1_val);
-       else
- 	fprintf (file, "found %s inc(%d) r[%d]+=r[%d]\n",
- 		 f, INSN_UID (inc_insn.insn),
- 		 REGNO (inc_insn.reg_res), REGNO (inc_insn.reg1));
-       break;
- 
-     default:
-       break;
-     }
- }
- 
- 
- /* Parsed fields of a mem ref of the form "*(reg0+reg1)" or "*(reg0+c)".  */
- 
- static struct mem_insn
- {
-   rtx_insn *insn;     /* The insn being parsed.  */
-   rtx pat;            /* The pattern of the insn.  */
-   rtx *mem_loc;       /* The address of the field that holds the mem */
-                       /* that is to be replaced.  */
-   bool reg1_is_const; /* True if reg1 is const, false if reg1 is a reg.  */
-   rtx reg0;
-   rtx reg1;           /* This is either a reg or a const depending on
- 			 reg1_is_const.  */
-   enum inc_state reg1_state;/* The form of the const if reg1 is a const.  */
-   HOST_WIDE_INT reg1_val;/* Value if reg1 is const.  */
- } mem_insn;
- 
- 
- /* Dump the parsed mem insn to FILE.  */
- 
- static void
- dump_mem_insn (FILE *file)
- {
-   dump_insn_slim (file, mem_insn.insn);
- 
-   if (mem_insn.reg1_is_const)
-     fprintf (file, "found mem(%d) *(r[%d]+%d)\n",
- 	     INSN_UID (mem_insn.insn),
- 	     REGNO (mem_insn.reg0), (int) mem_insn.reg1_val);
-   else
-     fprintf (file, "found mem(%d) *(r[%d]+r[%d])\n",
- 	     INSN_UID (mem_insn.insn),
- 	     REGNO (mem_insn.reg0), REGNO (mem_insn.reg1));
- }
- 
- 
- /* The following three arrays contain pointers to instructions. They
-    are indexed by REGNO.  At any point in the basic block where we are
-    looking these three arrays contain, respectively, the next insn
-    that uses REGNO, the next inc or add insn that uses REGNO and the
-    next insn that sets REGNO.
- 
-    The arrays are not cleared when we move from block to block so
-    whenever an insn is retrieved from these arrays, it's block number
-    must be compared with the current block.
- */
- 
- static rtx_insn **reg_next_debug_use = NULL;
- static rtx_insn **reg_next_use = NULL;
- static rtx_insn **reg_next_inc_use = NULL;
- static rtx_insn **reg_next_def = NULL;
- 
- 
- /* Move dead note that match PATTERN to TO_INSN from FROM_INSN.  We do
-    not really care about moving any other notes from the inc or add
-    insn.  Moving the REG_EQUAL and REG_EQUIV is clearly wrong and it
-    does not appear that there are any other kinds of relevant notes.  */
- 
- static void
- move_dead_notes (rtx_insn *to_insn, rtx_insn *from_insn, rtx pattern)
- {
-   rtx note;
-   rtx next_note;
-   rtx prev_note = NULL;
- 
-   for (note = REG_NOTES (from_insn); note; note = next_note)
-     {
-       next_note = XEXP (note, 1);
- 
-       if ((REG_NOTE_KIND (note) == REG_DEAD)
- 	  && pattern == XEXP (note, 0))
- 	{
- 	  XEXP (note, 1) = REG_NOTES (to_insn);
- 	  REG_NOTES (to_insn) = note;
- 	  if (prev_note)
- 	    XEXP (prev_note, 1) = next_note;
- 	  else
- 	    REG_NOTES (from_insn) = next_note;
- 	}
-       else prev_note = note;
-     }
- }
- 
- /* Change mem_insn.mem_loc so that uses NEW_ADDR which has an
-    increment of INC_REG.  To have reached this point, the change is a
-    legitimate one from a dataflow point of view.  The only questions
-    are is this a valid change to the instruction and is this a
-    profitable change to the instruction.  */
- 
- static bool
- attempt_change (rtx new_addr, rtx inc_reg)
- {
-   /* There are four cases: For the two cases that involve an add
-      instruction, we are going to have to delete the add and insert a
-      mov.  We are going to assume that the mov is free.  This is
-      fairly early in the backend and there are a lot of opportunities
-      for removing that move later.  In particular, there is the case
-      where the move may be dead, this is what dead code elimination
-      passes are for.  The two cases where we have an inc insn will be
-      handled mov free.  */
- 
-   basic_block bb = BLOCK_FOR_INSN (mem_insn.insn);
-   rtx_insn *mov_insn = NULL;
-   int regno;
-   rtx mem = *mem_insn.mem_loc;
-   machine_mode mode = GET_MODE (mem);
-   int align = MEM_ALIGN (mem);
-   rtx new_mem;
-   int old_cost = 0;
-   int new_cost = 0;
-   bool speed = optimize_bb_for_speed_p (bb);
- 
-   PUT_MODE (mem_tmp, mode);
-   XEXP (mem_tmp, 0) = new_addr;
-   set_mem_align (mem_tmp, align);
- 
-   old_cost = (set_src_cost (mem, mode, speed)
- 	      + set_rtx_cost (PATTERN (inc_insn.insn), speed));
- 
-   new_cost = set_src_cost (mem_tmp, mode, speed);
- 
-   /* In the FORM_PRE_ADD and FORM_POST_ADD cases we emit an extra move
-      whose cost we should account for.  */
-   if (inc_insn.form == FORM_PRE_ADD
-       || inc_insn.form == FORM_POST_ADD)
-     {
-       start_sequence ();
-       emit_move_insn (inc_insn.reg_res, inc_insn.reg0);
-       mov_insn = get_insns ();
-       end_sequence ();
-       new_cost += seq_cost (mov_insn, speed);
-     }
- 
-   /* The first item of business is to see if this is profitable.  */
-   if (old_cost < new_cost)
-     {
-       if (dump_file)
- 	fprintf (dump_file, "cost failure old=%d new=%d\n", old_cost, new_cost);
-       return false;
-     }
- 
-   /* Jump through a lot of hoops to keep the attributes up to date.  We
-      do not want to call one of the change address variants that take
-      an offset even though we know the offset in many cases.  These
-      assume you are changing where the address is pointing by the
-      offset.  */
-   new_mem = replace_equiv_address_nv (mem, new_addr);
-   if (! validate_change (mem_insn.insn, mem_insn.mem_loc, new_mem, 0))
-     {
-       if (dump_file)
- 	fprintf (dump_file, "validation failure\n");
-       return false;
-     }
- 
-   /* From here to the end of the function we are committed to the
-      change, i.e. nothing fails.  Generate any necessary movs, move
-      any regnotes, and fix up the reg_next_{use,inc_use,def}.  */
-   switch (inc_insn.form)
-     {
-     case FORM_PRE_ADD:
-       /* Replace the addition with a move.  Do it at the location of
- 	 the addition since the operand of the addition may change
- 	 before the memory reference.  */
-       gcc_assert (mov_insn);
-       emit_insn_before (mov_insn, inc_insn.insn);
-       regno = REGNO (inc_insn.reg0);
-       /* ??? Could REGNO possibly be used in MEM_INSN other than in
- 	 the MEM address, and still die there, so that move_dead_notes
- 	 would incorrectly move the note?  */
-       if (reg_next_use[regno] == mem_insn.insn)
- 	move_dead_notes (mov_insn, mem_insn.insn, inc_insn.reg0);
-       else
- 	move_dead_notes (mov_insn, inc_insn.insn, inc_insn.reg0);
- 
-       regno = REGNO (inc_insn.reg_res);
-       if (reg_next_debug_use && reg_next_debug_use[regno]
- 	  && BLOCK_FOR_INSN (reg_next_debug_use[regno]) == bb)
- 	{
- 	  rtx adjres = gen_rtx_PLUS (GET_MODE (inc_insn.reg_res),
- 				     inc_insn.reg_res, inc_insn.reg1);
- 	  if (dump_file)
- 	    fprintf (dump_file, "adjusting debug insns\n");
- 	  propagate_for_debug (PREV_INSN (reg_next_debug_use[regno]),
- 			       mem_insn.insn,
- 			       inc_insn.reg_res, adjres, bb);
- 	  reg_next_debug_use[regno] = NULL;
- 	}
-       reg_next_def[regno] = mov_insn;
-       reg_next_use[regno] = NULL;
- 
-       regno = REGNO (inc_insn.reg0);
-       if (reg_next_debug_use && reg_next_debug_use[regno]
- 	  && BLOCK_FOR_INSN (reg_next_debug_use[regno]) == bb
- 	  && find_reg_note (mov_insn, REG_DEAD, inc_insn.reg0))
- 	{
- 	  if (dump_file)
- 	    fprintf (dump_file, "remapping debug insns\n");
- 	  propagate_for_debug (PREV_INSN (reg_next_debug_use[regno]),
- 			       mem_insn.insn,
- 			       inc_insn.reg0, inc_insn.reg_res, bb);
- 	  reg_next_debug_use[regno] = NULL;
- 	}
-       reg_next_use[regno] = mov_insn;
-       df_recompute_luids (bb);
-       break;
- 
-     case FORM_POST_INC:
-       regno = REGNO (inc_insn.reg_res);
-       if (reg_next_debug_use && reg_next_debug_use[regno]
- 	  && BLOCK_FOR_INSN (reg_next_debug_use[regno]) == bb)
- 	{
- 	  rtx adjres = gen_rtx_MINUS (GET_MODE (inc_insn.reg_res),
- 				      inc_insn.reg_res, inc_insn.reg1);
- 	  if (dump_file)
- 	    fprintf (dump_file, "adjusting debug insns\n");
- 	  propagate_for_debug (PREV_INSN (reg_next_debug_use[regno]),
- 			       inc_insn.insn,
- 			       inc_insn.reg_res, adjres, bb);
- 	  reg_next_debug_use[regno] = NULL;
- 	}
-       if (reg_next_use[regno] == reg_next_inc_use[regno])
- 	reg_next_inc_use[regno] = NULL;
- 
-       /* Fallthru.  */
-     case FORM_PRE_INC:
-       regno = REGNO (inc_insn.reg_res);
-       /* Despite the fall-through, we won't run this twice: we'll have
- 	 already cleared reg_next_debug_use[regno] before falling
- 	 through.  */
-       if (reg_next_debug_use && reg_next_debug_use[regno]
- 	  && BLOCK_FOR_INSN (reg_next_debug_use[regno]) == bb)
- 	{
- 	  rtx adjres = gen_rtx_PLUS (GET_MODE (inc_insn.reg_res),
- 				     inc_insn.reg_res, inc_insn.reg1);
- 	  if (dump_file)
- 	    fprintf (dump_file, "adjusting debug insns\n");
- 	  propagate_for_debug (PREV_INSN (reg_next_debug_use[regno]),
- 			       mem_insn.insn,
- 			       inc_insn.reg_res, adjres, bb);
- 	  if (DF_INSN_LUID (mem_insn.insn)
- 	      < DF_INSN_LUID (reg_next_debug_use[regno]))
- 	    reg_next_debug_use[regno] = NULL;
- 	}
-       reg_next_def[regno] = mem_insn.insn;
-       reg_next_use[regno] = NULL;
- 
-       break;
- 
-     case FORM_POST_ADD:
-       gcc_assert (mov_insn);
-       emit_insn_before (mov_insn, mem_insn.insn);
-       move_dead_notes (mov_insn, inc_insn.insn, inc_insn.reg0);
- 
-       /* Do not move anything to the mov insn because the instruction
- 	 pointer for the main iteration has not yet hit that.  It is
- 	 still pointing to the mem insn. */
-       regno = REGNO (inc_insn.reg_res);
-       /* The pseudo is now set earlier, so it must have been dead in
- 	 that range, and dead registers cannot be referenced in debug
- 	 insns.  */
-       gcc_assert (!(reg_next_debug_use && reg_next_debug_use[regno]
- 		    && BLOCK_FOR_INSN (reg_next_debug_use[regno]) == bb));
-       reg_next_def[regno] = mem_insn.insn;
-       reg_next_use[regno] = NULL;
- 
-       regno = REGNO (inc_insn.reg0);
-       if (reg_next_debug_use && reg_next_debug_use[regno]
- 	  && BLOCK_FOR_INSN (reg_next_debug_use[regno]) == bb
- 	  && find_reg_note (mov_insn, REG_DEAD, inc_insn.reg0))
- 	{
- 	  if (dump_file)
- 	    fprintf (dump_file, "remapping debug insns\n");
- 	  propagate_for_debug (PREV_INSN (reg_next_debug_use[regno]),
- 			       inc_insn.insn,
- 			       inc_insn.reg0, inc_insn.reg_res, bb);
- 	  reg_next_debug_use[regno] = NULL;
- 	}
-       reg_next_use[regno] = mem_insn.insn;
-       if ((reg_next_use[regno] == reg_next_inc_use[regno])
- 	  || (reg_next_inc_use[regno] == inc_insn.insn))
- 	reg_next_inc_use[regno] = NULL;
-       df_recompute_luids (bb);
-       break;
- 
-     case FORM_last:
-     default:
-       gcc_unreachable ();
-     }
- 
-   if (!inc_insn.reg1_is_const)
-     {
-       regno = REGNO (inc_insn.reg1);
-       reg_next_use[regno] = mem_insn.insn;
-       if ((reg_next_use[regno] == reg_next_inc_use[regno])
- 	  || (reg_next_inc_use[regno] == inc_insn.insn))
- 	reg_next_inc_use[regno] = NULL;
-     }
- 
-   delete_insn (inc_insn.insn);
- 
-   if (dump_file && mov_insn)
-     {
-       fprintf (dump_file, "inserting mov ");
-       dump_insn_slim (dump_file, mov_insn);
-     }
- 
-   /* Record that this insn has an implicit side effect.  */
-   add_reg_note (mem_insn.insn, REG_INC, inc_reg);
- 
-   if (dump_file)
-     {
-       fprintf (dump_file, "****success ");
-       dump_insn_slim (dump_file, mem_insn.insn);
-     }
- 
-   return true;
- }
- 
- 
- /* Try to combine the instruction in INC_INSN with the instruction in
-    MEM_INSN.  First the form is determined using the DECISION_TABLE
-    and the results of parsing the INC_INSN and the MEM_INSN.
-    Assuming the form is ok, a prototype new address is built which is
-    passed to ATTEMPT_CHANGE for final processing.  */
- 
- static bool
- try_merge (void)
- {
-   enum gen_form gen_form;
-   rtx mem = *mem_insn.mem_loc;
-   rtx inc_reg = inc_insn.form == FORM_POST_ADD ?
-     inc_insn.reg_res : mem_insn.reg0;
- 
-   /* The width of the mem being accessed.  */
-   poly_int64 size = GET_MODE_SIZE (GET_MODE (mem));
-   rtx_insn *last_insn = NULL;
-   machine_mode reg_mode = GET_MODE (inc_reg);
- 
-   switch (inc_insn.form)
-     {
-     case FORM_PRE_ADD:
-     case FORM_PRE_INC:
-       last_insn = mem_insn.insn;
-       break;
-     case FORM_POST_INC:
-     case FORM_POST_ADD:
-       last_insn = inc_insn.insn;
-       break;
-     case FORM_last:
-     default:
-       gcc_unreachable ();
-     }
- 
-   /* Cannot handle auto inc of the stack.  */
-   if (inc_reg == stack_pointer_rtx)
-     {
-       if (dump_file)
- 	fprintf (dump_file, "cannot inc stack %d failure\n", REGNO (inc_reg));
-       return false;
-     }
- 
-   /* Look to see if the inc register is dead after the memory
-      reference.  If it is, do not do the combination.  */
-   if (find_regno_note (last_insn, REG_DEAD, REGNO (inc_reg)))
-     {
-       if (dump_file)
- 	fprintf (dump_file, "dead failure %d\n", REGNO (inc_reg));
-       return false;
-     }
- 
-   mem_insn.reg1_state = (mem_insn.reg1_is_const)
-     ? set_inc_state (mem_insn.reg1_val, size) : INC_REG;
-   inc_insn.reg1_state = (inc_insn.reg1_is_const)
-     ? set_inc_state (inc_insn.reg1_val, size) : INC_REG;
- 
-   /* Now get the form that we are generating.  */
-   gen_form = decision_table
-     [inc_insn.reg1_state][mem_insn.reg1_state][inc_insn.form];
- 
-   if (dbg_cnt (auto_inc_dec) == false)
-     return false;
- 
-   switch (gen_form)
-     {
-     default:
-     case NOTHING:
-       return false;
- 
-     case SIMPLE_PRE_INC:     /* ++size  */
-       if (dump_file)
- 	fprintf (dump_file, "trying SIMPLE_PRE_INC\n");
-       return attempt_change (gen_rtx_PRE_INC (reg_mode, inc_reg), inc_reg);
- 
-     case SIMPLE_POST_INC:    /* size++  */
-       if (dump_file)
- 	fprintf (dump_file, "trying SIMPLE_POST_INC\n");
-       return attempt_change (gen_rtx_POST_INC (reg_mode, inc_reg), inc_reg);
- 
-     case SIMPLE_PRE_DEC:     /* --size  */
-       if (dump_file)
- 	fprintf (dump_file, "trying SIMPLE_PRE_DEC\n");
-       return attempt_change (gen_rtx_PRE_DEC (reg_mode, inc_reg), inc_reg);
- 
-     case SIMPLE_POST_DEC:    /* size--  */
-       if (dump_file)
- 	fprintf (dump_file, "trying SIMPLE_POST_DEC\n");
-       return attempt_change (gen_rtx_POST_DEC (reg_mode, inc_reg), inc_reg);
- 
-     case DISP_PRE:           /* ++con   */
-       if (dump_file)
- 	fprintf (dump_file, "trying DISP_PRE\n");
-       return attempt_change (gen_rtx_PRE_MODIFY (reg_mode,
- 						 inc_reg,
- 						 gen_rtx_PLUS (reg_mode,
- 							       inc_reg,
- 							       inc_insn.reg1)),
- 			     inc_reg);
- 
-     case DISP_POST:          /* con++   */
-       if (dump_file)
- 	fprintf (dump_file, "trying POST_DISP\n");
-       return attempt_change (gen_rtx_POST_MODIFY (reg_mode,
- 						  inc_reg,
- 						  gen_rtx_PLUS (reg_mode,
- 								inc_reg,
- 								inc_insn.reg1)),
- 			     inc_reg);
- 
-     case REG_PRE:            /* ++reg   */
-       if (dump_file)
- 	fprintf (dump_file, "trying PRE_REG\n");
-       return attempt_change (gen_rtx_PRE_MODIFY (reg_mode,
- 						 inc_reg,
- 						 gen_rtx_PLUS (reg_mode,
- 							       inc_reg,
- 							       inc_insn.reg1)),
- 			     inc_reg);
- 
-     case REG_POST:            /* reg++   */
-       if (dump_file)
- 	fprintf (dump_file, "trying POST_REG\n");
-       return attempt_change (gen_rtx_POST_MODIFY (reg_mode,
- 						  inc_reg,
- 						  gen_rtx_PLUS (reg_mode,
- 								inc_reg,
- 								inc_insn.reg1)),
- 			     inc_reg);
-     }
- }
- 
- /* Return the next insn that uses (if reg_next_use is passed in
-    NEXT_ARRAY) or defines (if reg_next_def is passed in NEXT_ARRAY)
-    REGNO in BB.  */
- 
- static rtx_insn *
- get_next_ref (int regno, basic_block bb, rtx_insn **next_array)
- {
-   rtx_insn *insn = next_array[regno];
- 
-   /* Lazy about cleaning out the next_arrays.  */
-   if (insn && BLOCK_FOR_INSN (insn) != bb)
-     {
-       next_array[regno] = NULL;
-       insn = NULL;
-     }
- 
-   return insn;
- }
- 
- 
- /* Return true if INSN is of a form "a = b op c" where a and b are
-    regs.  op is + if c is a reg and +|- if c is a const.  Fill in
-    INC_INSN with what is found.
- 
-    This function is called in two contexts, if BEFORE_MEM is true,
-    this is called for each insn in the basic block.  If BEFORE_MEM is
-    false, it is called for the instruction in the block that uses the
-    index register for some memory reference that is currently being
-    processed.  */
- 
- static bool
- parse_add_or_inc (rtx_insn *insn, bool before_mem)
- {
-   rtx pat = single_set (insn);
-   if (!pat)
-     return false;
- 
-   /* Result must be single reg.  */
-   if (!REG_P (SET_DEST (pat)))
-     return false;
- 
-   if ((GET_CODE (SET_SRC (pat)) != PLUS)
-       && (GET_CODE (SET_SRC (pat)) != MINUS))
-     return false;
- 
-   if (!REG_P (XEXP (SET_SRC (pat), 0)))
-     return false;
- 
-   inc_insn.insn = insn;
-   inc_insn.pat = pat;
-   inc_insn.reg_res = SET_DEST (pat);
-   inc_insn.reg0 = XEXP (SET_SRC (pat), 0);
- 
-   /* Block any auto increment of the frame pointer since it expands into
-      an addition and cannot be removed by copy propagation.  */
-   if (inc_insn.reg0 == frame_pointer_rtx)
-     return false;
- 
-   if (rtx_equal_p (inc_insn.reg_res, inc_insn.reg0))
-     inc_insn.form = before_mem ? FORM_PRE_INC : FORM_POST_INC;
-   else
-     inc_insn.form = before_mem ? FORM_PRE_ADD : FORM_POST_ADD;
- 
-   if (CONST_INT_P (XEXP (SET_SRC (pat), 1)))
-     {
-       /* Process a = b + c where c is a const.  */
-       inc_insn.reg1_is_const = true;
-       if (GET_CODE (SET_SRC (pat)) == PLUS)
- 	{
- 	  inc_insn.reg1 = XEXP (SET_SRC (pat), 1);
- 	  inc_insn.reg1_val = INTVAL (inc_insn.reg1);
- 	}
-       else
- 	{
- 	  inc_insn.reg1_val = -INTVAL (XEXP (SET_SRC (pat), 1));
- 	  inc_insn.reg1 = GEN_INT (inc_insn.reg1_val);
- 	}
-       return true;
-     }
-   else if ((HAVE_PRE_MODIFY_REG || HAVE_POST_MODIFY_REG)
- 	   && (REG_P (XEXP (SET_SRC (pat), 1)))
- 	   && GET_CODE (SET_SRC (pat)) == PLUS)
-     {
-       /* Process a = b + c where c is a reg.  */
-       inc_insn.reg1 = XEXP (SET_SRC (pat), 1);
-       inc_insn.reg1_is_const = false;
- 
-       if (inc_insn.form == FORM_PRE_INC
- 	  || inc_insn.form == FORM_POST_INC)
- 	return true;
-       else if (rtx_equal_p (inc_insn.reg_res, inc_insn.reg1))
- 	{
- 	  /* Reverse the two operands and turn *_ADD into *_INC since
- 	     a = c + a.  */
- 	  std::swap (inc_insn.reg0, inc_insn.reg1);
- 	  inc_insn.form = before_mem ? FORM_PRE_INC : FORM_POST_INC;
- 	  return true;
- 	}
-       else
- 	return true;
-     }
- 
-   return false;
- }
- 
- 
- /* A recursive function that checks all of the mem uses in
-    ADDRESS_OF_X to see if any single one of them is compatible with
-    what has been found in inc_insn.  To avoid accidental matches, we
-    will only find MEMs with FINDREG, be it inc_insn.reg_res, be it
-    inc_insn.reg0.
- 
-    -1 is returned for success.  0 is returned if nothing was found and
-    1 is returned for failure. */
- 
- static int
- find_address (rtx *address_of_x, rtx findreg)
- {
-   rtx x = *address_of_x;
-   enum rtx_code code = GET_CODE (x);
-   const char *const fmt = GET_RTX_FORMAT (code);
-   int i;
-   int value = 0;
-   int tem;
- 
-   if (code == MEM && findreg == inc_insn.reg_res
-       && rtx_equal_p (XEXP (x, 0), inc_insn.reg_res))
-     {
-       /* Match with *reg_res.  */
-       mem_insn.mem_loc = address_of_x;
-       mem_insn.reg0 = inc_insn.reg_res;
-       mem_insn.reg1_is_const = true;
-       mem_insn.reg1_val = 0;
-       mem_insn.reg1 = GEN_INT (0);
-       return -1;
-     }
-   if (code == MEM && inc_insn.reg1_is_const && inc_insn.reg0
-       && findreg == inc_insn.reg0
-       && rtx_equal_p (XEXP (x, 0), inc_insn.reg0))
-     {
-       /* Match with *reg0, assumed to be equivalent to
-          *(reg_res - reg1_val); callers must check whether this is the case.  */
-       mem_insn.mem_loc = address_of_x;
-       mem_insn.reg0 = inc_insn.reg_res;
-       mem_insn.reg1_is_const = true;
-       mem_insn.reg1_val = -inc_insn.reg1_val;
-       mem_insn.reg1 = GEN_INT (mem_insn.reg1_val);
-       return -1;
-     }
-   if (code == MEM && findreg == inc_insn.reg_res
-       && GET_CODE (XEXP (x, 0)) == PLUS
-       && rtx_equal_p (XEXP (XEXP (x, 0), 0), inc_insn.reg_res))
-     {
-       rtx b = XEXP (XEXP (x, 0), 1);
-       mem_insn.mem_loc = address_of_x;
-       mem_insn.reg0 = inc_insn.reg_res;
-       mem_insn.reg1 = b;
-       mem_insn.reg1_is_const = inc_insn.reg1_is_const;
-       if (CONST_INT_P (b))
- 	{
- 	  /* Match with *(reg0 + reg1) where reg1 is a const. */
- 	  HOST_WIDE_INT val = INTVAL (b);
- 	  if (inc_insn.reg1_is_const
- 	      && (inc_insn.reg1_val == val || inc_insn.reg1_val == -val))
- 	    {
- 	      mem_insn.reg1_val = val;
- 	      return -1;
- 	    }
- 	}
-       else if (!inc_insn.reg1_is_const
- 	       && rtx_equal_p (inc_insn.reg1, b))
- 	/* Match with *(reg0 + reg1). */
- 	return -1;
-     }
- 
-   if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
-     {
-       /* If REG occurs inside a MEM used in a bit-field reference,
- 	 that is unacceptable.  */
-       if (find_address (&XEXP (x, 0), findreg))
- 	return 1;
-     }
- 
-   if (x == inc_insn.reg_res)
-     return 1;
- 
-   /* Time for some deep diving.  */
-   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-     {
-       if (fmt[i] == 'e')
- 	{
- 	  tem = find_address (&XEXP (x, i), findreg);
- 	  /* If this is the first use, let it go so the rest of the
- 	     insn can be checked.  */
- 	  if (value == 0)
- 	    value = tem;
- 	  else if (tem != 0)
- 	    /* More than one match was found.  */
- 	    return 1;
- 	}
-       else if (fmt[i] == 'E')
- 	{
- 	  int j;
- 	  for (j = XVECLEN (x, i) - 1; j >= 0; j--)
- 	    {
- 	      tem = find_address (&XVECEXP (x, i, j), findreg);
- 	      /* If this is the first use, let it go so the rest of
- 		 the insn can be checked.  */
- 	      if (value == 0)
- 		value = tem;
- 	      else if (tem != 0)
- 		/* More than one match was found.  */
- 		return 1;
- 	    }
- 	}
-     }
-   return value;
- }
- 
- /* Once a suitable mem reference has been found and the MEM_INSN
-    structure has been filled in, FIND_INC is called to see if there is
-    a suitable add or inc insn that follows the mem reference and
-    determine if it is suitable to merge.
- 
-    In the case where the MEM_INSN has two registers in the reference,
-    this function may be called recursively.  The first time looking
-    for an add of the first register, and if that fails, looking for an
-    add of the second register.  The FIRST_TRY parameter is used to
-    only allow the parameters to be reversed once.  */
- 
- static bool
- find_inc (bool first_try)
- {
-   rtx_insn *insn;
-   basic_block bb = BLOCK_FOR_INSN (mem_insn.insn);
-   rtx_insn *other_insn;
-   df_ref def;
- 
-   /* Make sure this reg appears only once in this insn.  */
-   if (count_occurrences (PATTERN (mem_insn.insn), mem_insn.reg0, 1) != 1)
-     {
-       if (dump_file)
- 	fprintf (dump_file, "mem count failure\n");
-       return false;
-     }
- 
-   if (dump_file)
-     dump_mem_insn (dump_file);
- 
-   /* Find the next use that is an inc.  */
-   insn = get_next_ref (REGNO (mem_insn.reg0),
- 		       BLOCK_FOR_INSN (mem_insn.insn),
- 		       reg_next_inc_use);
-   if (!insn)
-     return false;
- 
-   /* Even though we know the next use is an add or inc because it came
-      from the reg_next_inc_use, we must still reparse.  */
-   if (!parse_add_or_inc (insn, false))
-     {
-       /* Next use was not an add.  Look for one extra case. It could be
- 	 that we have:
- 
- 	 *(a + b)
- 	 ...= a;
- 	 ...= b + a
- 
- 	 if we reverse the operands in the mem ref we would
- 	 find this.  Only try it once though.  */
-       if (first_try && !mem_insn.reg1_is_const)
- 	{
- 	  std::swap (mem_insn.reg0, mem_insn.reg1);
- 	  return find_inc (false);
- 	}
-       else
- 	return false;
-     }
- 
-   /* Need to assure that none of the operands of the inc instruction are
-      assigned to by the mem insn.  */
-   FOR_EACH_INSN_DEF (def, mem_insn.insn)
-     {
-       unsigned int regno = DF_REF_REGNO (def);
-       if ((regno == REGNO (inc_insn.reg0))
- 	  || (regno == REGNO (inc_insn.reg_res)))
- 	{
- 	  if (dump_file)
- 	    fprintf (dump_file, "inc conflicts with store failure.\n");
- 	  return false;
- 	}
-       if (!inc_insn.reg1_is_const && (regno == REGNO (inc_insn.reg1)))
- 	{
- 	  if (dump_file)
- 	    fprintf (dump_file, "inc conflicts with store failure.\n");
- 	  return false;
- 	}
-     }
- 
-   if (dump_file)
-     dump_inc_insn (dump_file);
- 
-   if (inc_insn.form == FORM_POST_ADD)
-     {
-       /* Make sure that there is no insn that assigns to inc_insn.res
- 	 between the mem_insn and the inc_insn.  */
-       rtx_insn *other_insn = get_next_ref (REGNO (inc_insn.reg_res),
- 					   BLOCK_FOR_INSN (mem_insn.insn),
- 					   reg_next_def);
-       if (other_insn != inc_insn.insn)
- 	{
- 	  if (dump_file)
- 	    fprintf (dump_file,
- 		     "result of add is assigned to between mem and inc insns.\n");
- 	  return false;
- 	}
- 
-       other_insn = get_next_ref (REGNO (inc_insn.reg_res),
- 				 BLOCK_FOR_INSN (mem_insn.insn),
- 				 reg_next_use);
-       if (other_insn
- 	  && (other_insn != inc_insn.insn)
- 	  && (DF_INSN_LUID (inc_insn.insn) > DF_INSN_LUID (other_insn)))
- 	{
- 	  if (dump_file)
- 	    fprintf (dump_file,
- 		     "result of add is used between mem and inc insns.\n");
- 	  return false;
- 	}
- 
-       /* For the post_add to work, the result_reg of the inc must not be
- 	 used in the mem insn since this will become the new index
- 	 register.  */
-       if (reg_overlap_mentioned_p (inc_insn.reg_res, PATTERN (mem_insn.insn)))
- 	{
- 	  if (dump_file)
- 	    fprintf (dump_file, "base reg replacement failure.\n");
- 	  return false;
- 	}
-     }
- 
-   if (mem_insn.reg1_is_const)
-     {
-       if (mem_insn.reg1_val == 0)
- 	{
- 	  if (!inc_insn.reg1_is_const)
- 	    {
- 	      /* The mem looks like *r0 and the rhs of the add has two
- 		 registers.  */
- 	      int luid = DF_INSN_LUID (inc_insn.insn);
- 	      if (inc_insn.form == FORM_POST_ADD)
- 		{
- 		  /* The trick is that we are not going to increment r0,
- 		     we are going to increment the result of the add insn.
- 		     For this trick to be correct, the result reg of
- 		     the inc must be a valid addressing reg.  */
- 		  addr_space_t as = MEM_ADDR_SPACE (*mem_insn.mem_loc);
- 		  if (GET_MODE (inc_insn.reg_res)
- 		      != targetm.addr_space.address_mode (as))
- 		    {
- 		      if (dump_file)
- 			fprintf (dump_file, "base reg mode failure.\n");
- 		      return false;
- 		    }
- 
- 		  /* We also need to make sure that the next use of
- 		     inc result is after the inc.  */
- 		  other_insn
- 		    = get_next_ref (REGNO (inc_insn.reg1), bb, reg_next_use);
- 		  if (other_insn && luid > DF_INSN_LUID (other_insn))
- 		    return false;
- 
- 		  if (!rtx_equal_p (mem_insn.reg0, inc_insn.reg0))
- 		    std::swap (inc_insn.reg0, inc_insn.reg1);
- 		}
- 
- 	      other_insn
- 		= get_next_ref (REGNO (inc_insn.reg1), bb, reg_next_def);
- 	      if (other_insn && luid > DF_INSN_LUID (other_insn))
- 		return false;
- 	    }
- 	}
-       /* Both the inc/add and the mem have a constant.  Need to check
- 	 that the constants are ok. */
-       else if ((mem_insn.reg1_val != inc_insn.reg1_val)
- 	       && (mem_insn.reg1_val != -inc_insn.reg1_val))
- 	return false;
-     }
-   else
-     {
-       /* The mem insn is of the form *(a + b) where a and b are both
- 	 regs.  It may be that in order to match the add or inc we
- 	 need to treat it as if it was *(b + a).  It may also be that
- 	 the add is of the form a + c where c does not match b and
- 	 then we just abandon this.  */
- 
-       int luid = DF_INSN_LUID (inc_insn.insn);
-       rtx_insn *other_insn;
- 
-       /* Make sure this reg appears only once in this insn.  */
-       if (count_occurrences (PATTERN (mem_insn.insn), mem_insn.reg1, 1) != 1)
- 	return false;
- 
-       if (inc_insn.form == FORM_POST_ADD)
- 	{
- 	  /* For this trick to be correct, the result reg of the inc
- 	     must be a valid addressing reg.  */
- 	  addr_space_t as = MEM_ADDR_SPACE (*mem_insn.mem_loc);
- 	  if (GET_MODE (inc_insn.reg_res)
- 	      != targetm.addr_space.address_mode (as))
- 	    {
- 	      if (dump_file)
- 		fprintf (dump_file, "base reg mode failure.\n");
- 	      return false;
- 	    }
- 
- 	  if (rtx_equal_p (mem_insn.reg0, inc_insn.reg0))
- 	    {
- 	      if (!rtx_equal_p (mem_insn.reg1, inc_insn.reg1))
- 		{
- 		  /* See comment above on find_inc (false) call.  */
- 		  if (first_try)
- 		    {
- 		      std::swap (mem_insn.reg0, mem_insn.reg1);
- 		      return find_inc (false);
- 		    }
- 		  else
- 		    return false;
- 		}
- 
- 	      /* Need to check that there are no assignments to b
- 		 before the add insn.  */
- 	      other_insn
- 		= get_next_ref (REGNO (inc_insn.reg1), bb, reg_next_def);
- 	      if (other_insn && luid > DF_INSN_LUID (other_insn))
- 		return false;
- 	      /* All ok for the next step.  */
- 	    }
- 	  else
- 	    {
- 	      /* We know that mem_insn.reg0 must equal inc_insn.reg1
- 		 or else we would not have found the inc insn.  */
- 	      std::swap (mem_insn.reg0, mem_insn.reg1);
- 	      if (!rtx_equal_p (mem_insn.reg0, inc_insn.reg0))
- 		{
- 		  /* See comment above on find_inc (false) call.  */
- 		  if (first_try)
- 		    return find_inc (false);
- 		  else
- 		    return false;
- 		}
- 	      /* To have gotten here know that.
- 	       *(b + a)
- 
- 	       ... = (b + a)
- 
- 	       We also know that the lhs of the inc is not b or a.  We
- 	       need to make sure that there are no assignments to b
- 	       between the mem ref and the inc.  */
- 
- 	      other_insn
- 		= get_next_ref (REGNO (inc_insn.reg0), bb, reg_next_def);
- 	      if (other_insn && luid > DF_INSN_LUID (other_insn))
- 		return false;
- 	    }
- 
- 	  /* Need to check that the next use of the add result is later than
- 	     add insn since this will be the reg incremented.  */
- 	  other_insn
- 	    = get_next_ref (REGNO (inc_insn.reg_res), bb, reg_next_use);
- 	  if (other_insn && luid > DF_INSN_LUID (other_insn))
- 	    return false;
- 	}
-       else /* FORM_POST_INC.  There is less to check here because we
- 	      know that operands must line up.  */
- 	{
- 	  if (!rtx_equal_p (mem_insn.reg1, inc_insn.reg1))
- 	    /* See comment above on find_inc (false) call.  */
- 	    {
- 	      if (first_try)
- 		{
- 		  std::swap (mem_insn.reg0, mem_insn.reg1);
- 		  return find_inc (false);
- 		}
- 	      else
- 		return false;
- 	    }
- 
- 	  /* To have gotten here know that.
- 	   *(a + b)
- 
- 	   ... = (a + b)
- 
- 	   We also know that the lhs of the inc is not b.  We need to make
- 	   sure that there are no assignments to b between the mem ref and
- 	   the inc.  */
- 	  other_insn
- 	    = get_next_ref (REGNO (inc_insn.reg1), bb, reg_next_def);
- 	  if (other_insn && luid > DF_INSN_LUID (other_insn))
- 	    return false;
- 	}
-     }
- 
-   if (inc_insn.form == FORM_POST_INC)
-     {
-       other_insn
- 	= get_next_ref (REGNO (inc_insn.reg0), bb, reg_next_use);
-       /* When we found inc_insn, we were looking for the
- 	 next add or inc, not the next insn that used the
- 	 reg.  Because we are going to increment the reg
- 	 in this form, we need to make sure that there
- 	 were no intervening uses of reg.  */
-       if (inc_insn.insn != other_insn)
- 	return false;
-     }
- 
-   return try_merge ();
- }
- 
- 
- /* A recursive function that walks ADDRESS_OF_X to find all of the mem
-    uses in pat that could be used as an auto inc or dec.  It then
-    calls FIND_INC for each one.  */
- 
- static bool
- find_mem (rtx *address_of_x)
- {
-   rtx x = *address_of_x;
-   enum rtx_code code = GET_CODE (x);
-   const char *const fmt = GET_RTX_FORMAT (code);
-   int i;
- 
-   if (code == MEM && REG_P (XEXP (x, 0)))
-     {
-       /* Match with *reg0.  */
-       mem_insn.mem_loc = address_of_x;
-       mem_insn.reg0 = XEXP (x, 0);
-       mem_insn.reg1_is_const = true;
-       mem_insn.reg1_val = 0;
-       mem_insn.reg1 = GEN_INT (0);
-       if (find_inc (true))
- 	return true;
-     }
-   if (code == MEM && GET_CODE (XEXP (x, 0)) == PLUS
-       && REG_P (XEXP (XEXP (x, 0), 0)))
-     {
-       rtx reg1 = XEXP (XEXP (x, 0), 1);
-       mem_insn.mem_loc = address_of_x;
-       mem_insn.reg0 = XEXP (XEXP (x, 0), 0);
-       mem_insn.reg1 = reg1;
-       if (CONST_INT_P (reg1))
- 	{
- 	  mem_insn.reg1_is_const = true;
- 	  /* Match with *(reg0 + c) where c is a const. */
- 	  mem_insn.reg1_val = INTVAL (reg1);
- 	  if (find_inc (true))
- 	    return true;
- 	}
-       else if (REG_P (reg1))
- 	{
- 	  /* Match with *(reg0 + reg1).  */
- 	  mem_insn.reg1_is_const = false;
- 	  if (find_inc (true))
- 	    return true;
- 	}
-     }
- 
-   if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
-     {
-       /* If REG occurs inside a MEM used in a bit-field reference,
- 	 that is unacceptable.  */
-       return false;
-     }
- 
-   /* Time for some deep diving.  */
-   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-     {
-       if (fmt[i] == 'e')
- 	{
- 	  if (find_mem (&XEXP (x, i)))
- 	    return true;
- 	}
-       else if (fmt[i] == 'E')
- 	{
- 	  int j;
- 	  for (j = XVECLEN (x, i) - 1; j >= 0; j--)
- 	    if (find_mem (&XVECEXP (x, i, j)))
- 	      return true;
- 	}
-     }
-   return false;
- }
- 
- 
- /* Try to combine all incs and decs by constant values with memory
-    references in BB.  */
- 
- static void
- merge_in_block (int max_reg, basic_block bb)
- {
-   rtx_insn *insn;
-   rtx_insn *curr;
-   int success_in_block = 0;
- 
-   if (dump_file)
-     fprintf (dump_file, "\n\nstarting bb %d\n", bb->index);
- 
-   FOR_BB_INSNS_REVERSE_SAFE (bb, insn, curr)
-     {
-       bool insn_is_add_or_inc = true;
- 
-       if (!NONDEBUG_INSN_P (insn))
- 	{
- 	  if (DEBUG_BIND_INSN_P (insn))
- 	    {
- 	      df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
- 	      df_ref use;
- 
- 	      if (dump_file)
- 		dump_insn_slim (dump_file, insn);
- 
- 	      FOR_EACH_INSN_INFO_USE (use, insn_info)
- 		reg_next_debug_use[DF_REF_REGNO (use)] = insn;
- 	    }
- 	  continue;
- 	}
- 
-       /* Reload should handle auto-inc within a jump correctly, while LRA
- 	 is known to have issues with autoinc.  */
-       if (JUMP_P (insn) && targetm.lra_p ())
- 	continue;
- 
-       if (dump_file)
- 	dump_insn_slim (dump_file, insn);
- 
-       /* Does this instruction increment or decrement a register?  */
-       if (parse_add_or_inc (insn, true))
- 	{
- 	  int regno = REGNO (inc_insn.reg_res);
- 	  /* Cannot handle case where there are three separate regs
- 	     before a mem ref.  Too many moves would be needed to be
- 	     profitable.  */
- 	  if ((inc_insn.form == FORM_PRE_INC) || inc_insn.reg1_is_const)
- 	    {
- 	      mem_insn.insn = get_next_ref (regno, bb, reg_next_use);
- 	      if (mem_insn.insn)
- 		{
- 		  bool ok = true;
- 		  if (!inc_insn.reg1_is_const)
- 		    {
- 		      /* We are only here if we are going to try a
- 			 HAVE_*_MODIFY_REG type transformation.  c is a
- 			 reg and we must sure that the path from the
- 			 inc_insn to the mem_insn.insn is both def and use
- 			 clear of c because the inc insn is going to move
- 			 into the mem_insn.insn.  */
- 		      int luid = DF_INSN_LUID (mem_insn.insn);
- 		      rtx_insn *other_insn
- 			= get_next_ref (REGNO (inc_insn.reg1), bb, reg_next_use);
- 
- 		      if (other_insn && luid > DF_INSN_LUID (other_insn))
- 			ok = false;
- 
- 		      other_insn
- 			= get_next_ref (REGNO (inc_insn.reg1), bb, reg_next_def);
- 
- 		      if (other_insn && luid > DF_INSN_LUID (other_insn))
- 			ok = false;
- 		    }
- 
- 		  if (dump_file)
- 		    dump_inc_insn (dump_file);
- 
- 		  if (ok && find_address (&PATTERN (mem_insn.insn),
- 					  inc_insn.reg_res) == -1)
- 		    {
- 		      if (dump_file)
- 			dump_mem_insn (dump_file);
- 		      if (try_merge ())
- 			{
- 			  success_in_block++;
- 			  insn_is_add_or_inc = false;
- 			}
- 		    }
- 		}
- 
- 	      if (insn_is_add_or_inc
- 		  /* find_address will only recognize an address
- 		     with a reg0 that's not reg_res when
- 		     reg1_is_const, so cut it off early if we
- 		     already know it won't match.  */
- 		  && inc_insn.reg1_is_const
- 		  && inc_insn.reg0
- 		  && inc_insn.reg0 != inc_insn.reg_res)
- 		{
- 		  /* If we identified an inc_insn that uses two
- 		     different pseudos, it's of the form
- 
- 		     (set reg_res (plus reg0 reg1))
- 
- 		     where reg1 is a constant (*).
- 
- 		     The next use of reg_res was not identified by
- 		     find_address as a mem_insn that we could turn
- 		     into auto-inc, so see if we find a suitable
- 		     MEM in the next use of reg0, as long as it's
- 		     before any subsequent use of reg_res:
- 
- 		     ... (mem (... reg0 ...)) ...
- 
- 		     ... reg_res ...
- 
- 		     In this case, we can turn the plus into a
- 		     copy, and the reg0 in the MEM address into a
- 		     post_inc of reg_res:
- 
- 		     (set reg_res reg0)
- 
- 		     ... (mem (... (post_add reg_res reg1) ...)) ...
- 
- 		     reg_res will then have the correct value at
- 		     subsequent uses, and reg0 will remain
- 		     unchanged.
- 
- 		     (*) We could support non-const reg1, but then
- 		     we'd have to check that reg1 remains
- 		     unchanged all the way to the modified MEM,
- 		     and we'd have to extend find_address to
- 		     represent a non-const negated reg1.  */
- 		  regno = REGNO (inc_insn.reg0);
- 		  rtx_insn *reg0_use = get_next_ref (regno, bb,
- 						     reg_next_use);
- 
- 		  /* Give up if the next use of reg0 is after the next
- 		     use of reg_res (same insn is ok; we might have
- 		     found a MEM with reg_res before, and that failed,
- 		     but now we try reg0, which might work), or defs
- 		     of reg_res (same insn is not ok, we'd introduce
- 		     another def in the same insn) or reg0.  */
- 		  if (reg0_use)
- 		    {
- 		      int luid = DF_INSN_LUID (reg0_use);
- 
- 		      /* It might seem pointless to introduce an
- 			 auto-inc if there's no subsequent use of
- 			 reg_res (i.e., mem_insn.insn == NULL), but
- 			 the next use might be in the next iteration
- 			 of a loop, and it won't hurt if we make the
- 			 change even if it's not needed.  */
- 		      if (mem_insn.insn
- 			  && luid > DF_INSN_LUID (mem_insn.insn))
- 			reg0_use = NULL;
- 
- 		      rtx_insn *other_insn
- 			= get_next_ref (REGNO (inc_insn.reg_res), bb,
- 					reg_next_def);
- 
- 		      if (other_insn && luid >= DF_INSN_LUID (other_insn))
- 			reg0_use = NULL;
- 
- 		      other_insn
- 			= get_next_ref (REGNO (inc_insn.reg0), bb,
- 					reg_next_def);
- 
- 		      if (other_insn && luid > DF_INSN_LUID (other_insn))
- 			reg0_use = NULL;
- 		    }
- 
- 		  mem_insn.insn = reg0_use;
- 
- 		  if (mem_insn.insn
- 		      && find_address (&PATTERN (mem_insn.insn),
- 				       inc_insn.reg0) == -1)
- 		    {
- 		      if (dump_file)
- 			dump_mem_insn (dump_file);
- 		      if (try_merge ())
- 			{
- 			  success_in_block++;
- 			  insn_is_add_or_inc = false;
- 			}
- 		    }
- 		}
- 	    }
- 	}
-       else
- 	{
- 	  insn_is_add_or_inc = false;
- 	  /* We can't use auto inc/dec for bare USEs and CLOBBERs,
- 	     since they aren't supposed to generate any code.  */
- 	  rtx_code code = GET_CODE (PATTERN (insn));
- 	  if (code != USE && code != CLOBBER)
- 	    {
- 	      mem_insn.insn = insn;
- 	      if (find_mem (&PATTERN (insn)))
- 		success_in_block++;
- 	    }
- 	}
- 
-       /* If the inc insn was merged with a mem, the inc insn is gone
- 	 and there is noting to update.  */
-       if (df_insn_info *insn_info = DF_INSN_INFO_GET (insn))
- 	{
- 	  df_ref def, use;
- 
- 	  /* Need to update next use.  */
- 	  FOR_EACH_INSN_INFO_DEF (def, insn_info)
- 	    {
- 	      if (reg_next_debug_use)
- 		reg_next_debug_use[DF_REF_REGNO (def)] = NULL;
- 	      reg_next_use[DF_REF_REGNO (def)] = NULL;
- 	      reg_next_inc_use[DF_REF_REGNO (def)] = NULL;
- 	      reg_next_def[DF_REF_REGNO (def)] = insn;
- 	    }
- 
- 	  FOR_EACH_INSN_INFO_USE (use, insn_info)
- 	    {
- 	      if (reg_next_debug_use)
- 		/* This may seem surprising, but we know we may only
- 		   modify the value of a REG between an insn and the
- 		   next nondebug use thereof.  Any debug uses after
- 		   the next nondebug use can be left alone, the REG
- 		   will hold the expected value there.  */
- 		reg_next_debug_use[DF_REF_REGNO (use)] = NULL;
- 	      reg_next_use[DF_REF_REGNO (use)] = insn;
- 	      if (insn_is_add_or_inc)
- 		reg_next_inc_use[DF_REF_REGNO (use)] = insn;
- 	      else
- 		reg_next_inc_use[DF_REF_REGNO (use)] = NULL;
- 	    }
- 	}
-       else if (dump_file)
- 	fprintf (dump_file, "skipping update of deleted insn %d\n",
- 		 INSN_UID (insn));
-     }
- 
-   /* If we were successful, try again.  There may have been several
-      opportunities that were interleaved.  This is rare but
-      gcc.c-torture/compile/pr17273.c actually exhibits this.  */
-   if (success_in_block)
-     {
-       /* In this case, we must clear these vectors since the trick of
- 	 testing if the stale insn in the block will not work.  */
-       if (reg_next_debug_use)
- 	memset (reg_next_debug_use, 0, max_reg * sizeof (rtx));
-       memset (reg_next_use, 0, max_reg * sizeof (rtx));
-       memset (reg_next_inc_use, 0, max_reg * sizeof (rtx));
-       memset (reg_next_def, 0, max_reg * sizeof (rtx));
-       df_recompute_luids (bb);
-       merge_in_block (max_reg, bb);
-     }
- }
- 
- /* Discover auto-inc auto-dec instructions.  */
- 
- namespace {
- 
- const pass_data pass_data_inc_dec =
- {
-   RTL_PASS, /* type */
-   "auto_inc_dec", /* name */
-   OPTGROUP_NONE, /* optinfo_flags */
-   TV_AUTO_INC_DEC, /* tv_id */
-   0, /* properties_required */
-   0, /* properties_provided */
-   0, /* properties_destroyed */
-   0, /* todo_flags_start */
-   TODO_df_finish, /* todo_flags_finish */
- };
- 
- class pass_inc_dec : public rtl_opt_pass
- {
- public:
-   pass_inc_dec (gcc::context *ctxt)
-     : rtl_opt_pass (pass_data_inc_dec, ctxt)
-   {}
- 
-   /* opt_pass methods: */
-   virtual bool gate (function *)
-     {
-       if (!AUTO_INC_DEC)
- 	return false;
- 
-       return (optimize > 0 && flag_auto_inc_dec);
-     }
- 
- 
-   unsigned int execute (function *);
- 
- }; // class pass_inc_dec
- 
- unsigned int
- pass_inc_dec::execute (function *fun ATTRIBUTE_UNUSED)
- {
-   if (!AUTO_INC_DEC)
-     return 0;
- 
-   basic_block bb;
-   int max_reg = max_reg_num ();
- 
-   if (!initialized)
-     init_decision_table ();
- 
-   mem_tmp = gen_rtx_MEM (Pmode, NULL_RTX);
- 
-   df_note_add_problem ();
-   df_analyze ();
- 
-   if (MAY_HAVE_DEBUG_BIND_INSNS)
-     reg_next_debug_use = XCNEWVEC (rtx_insn *, max_reg);
-   else
-     /* An earlier function may have had debug binds.  */
-     reg_next_debug_use = NULL;
-   reg_next_use = XCNEWVEC (rtx_insn *, max_reg);
-   reg_next_inc_use = XCNEWVEC (rtx_insn *, max_reg);
-   reg_next_def = XCNEWVEC (rtx_insn *, max_reg);
-   FOR_EACH_BB_FN (bb, fun)
-     merge_in_block (max_reg, bb);
- 
-   free (reg_next_debug_use);
-   free (reg_next_use);
-   free (reg_next_inc_use);
-   free (reg_next_def);
- 
-   mem_tmp = NULL;
- 
-   return 0;
- }
- 
- } // anon namespace
- 
- rtl_opt_pass *
- make_pass_inc_dec (gcc::context *ctxt)
- {
-   return new pass_inc_dec (ctxt);
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/auto-inc-dec.cc gcc-12.1.0/gcc/auto-inc-dec.cc
*** gcc-11.3.0/gcc/auto-inc-dec.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/auto-inc-dec.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,1752 ----
+ /* Discovery of auto-inc and auto-dec instructions.
+    Copyright (C) 2006-2022 Free Software Foundation, Inc.
+    Contributed by Kenneth Zadeck <zadeck@naturalbridge.com>
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "backend.h"
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
+ #include "predict.h"
+ #include "df.h"
+ #include "insn-config.h"
+ #include "memmodel.h"
+ #include "emit-rtl.h"
+ #include "recog.h"
+ #include "cfgrtl.h"
+ #include "expr.h"
+ #include "tree-pass.h"
+ #include "dbgcnt.h"
+ #include "print-rtl.h"
+ #include "valtrack.h"
+ 
+ /* This pass was originally removed from flow.c. However there is
+    almost nothing that remains of that code.
+ 
+    There are (4) basic forms that are matched:
+ 
+       (1) FORM_PRE_ADD
+            a <- b + c
+            ...
+            *a
+ 
+         becomes
+ 
+            a <- b
+            ...
+            *(a += c) pre
+ 
+         or, alternately,
+ 
+            a <- b + c
+            ...
+            *b
+ 
+         becomes
+ 
+            a <- b
+            ...
+            *(a += c) post
+ 
+         This uses a post-add, but it's handled as FORM_PRE_ADD because
+         the "increment" insn appears before the memory access.
+ 
+ 
+       (2) FORM_PRE_INC
+            a += c
+            ...
+            *a
+ 
+         becomes
+ 
+            ...
+            *(a += c) pre
+ 
+ 
+       (3) FORM_POST_ADD
+            *a
+            ...
+            b <- a + c
+ 
+ 	   (For this case to be true, b must not be assigned or used between
+ 	   the *a and the assignment to b.  B must also be a Pmode reg.)
+ 
+         becomes
+ 
+            b <- a
+            *(b += c) post
+            ...
+ 
+ 
+       (4) FORM_POST_INC
+            *a
+            ...
+            a <- a + c
+ 
+         becomes
+ 
+            *(a += c) post
+            ...
+ 
+ 
+   There are three types of values of c.
+ 
+     1) c is a constant equal to the width of the value being accessed by
+        the pointer.  This is useful for machines that have
+        HAVE_PRE_INCREMENT, HAVE_POST_INCREMENT, HAVE_PRE_DECREMENT or
+        HAVE_POST_DECREMENT defined.
+ 
+     2) c is a constant not equal to the width of the value being accessed
+        by the pointer.  This is useful for machines that have
+        HAVE_PRE_MODIFY_DISP, HAVE_POST_MODIFY_DISP defined.
+ 
+     3) c is a register.  This is useful for machines that have
+        HAVE_PRE_MODIFY_REG,  HAVE_POST_MODIFY_REG
+ 
+   The is one special case: if a already had an offset equal to it +-
+   its width and that offset is equal to -c when the increment was
+   before the ref or +c if the increment was after the ref, then if we
+   can do the combination but switch the pre/post bit.  */
+ 
+ 
+ enum form
+ {
+   FORM_PRE_ADD,
+   FORM_PRE_INC,
+   FORM_POST_ADD,
+   FORM_POST_INC,
+   FORM_last
+ };
+ 
+ /* The states of the second operands of mem refs and inc insns.  If no
+    second operand of the mem_ref was found, it is assumed to just be
+    ZERO.  SIZE is the size of the mode accessed in the memref.  The
+    ANY is used for constants that are not +-size or 0.  REG is used if
+    the forms are reg1 + reg2.  */
+ 
+ enum inc_state
+ {
+   INC_ZERO,           /* == 0  */
+   INC_NEG_SIZE,       /* == +size  */
+   INC_POS_SIZE,       /* == -size */
+   INC_NEG_ANY,        /* == some -constant  */
+   INC_POS_ANY,        /* == some +constant  */
+   INC_REG,            /* == some register  */
+   INC_last
+ };
+ 
+ /* The eight forms that pre/post inc/dec can take.  */
+ enum gen_form
+ {
+   NOTHING,
+   SIMPLE_PRE_INC,     /* ++size  */
+   SIMPLE_POST_INC,    /* size++  */
+   SIMPLE_PRE_DEC,     /* --size  */
+   SIMPLE_POST_DEC,    /* size--  */
+   DISP_PRE,           /* ++con   */
+   DISP_POST,          /* con++   */
+   REG_PRE,            /* ++reg   */
+   REG_POST            /* reg++   */
+ };
+ 
+ /* Tmp mem rtx for use in cost modeling.  */
+ static rtx mem_tmp;
+ 
+ static enum inc_state
+ set_inc_state (HOST_WIDE_INT val, poly_int64 size)
+ {
+   if (val == 0)
+     return INC_ZERO;
+   if (val < 0)
+     return known_eq (val, -size) ? INC_NEG_SIZE : INC_NEG_ANY;
+   else
+     return known_eq (val, size) ? INC_POS_SIZE : INC_POS_ANY;
+ }
+ 
+ /* The DECISION_TABLE that describes what form, if any, the increment
+    or decrement will take. It is a three dimensional table.  The first
+    index is the type of constant or register found as the second
+    operand of the inc insn.  The second index is the type of constant
+    or register found as the second operand of the memory reference (if
+    no second operand exists, 0 is used).  The third index is the form
+    and location (relative to the mem reference) of inc insn.  */
+ 
+ static bool initialized = false;
+ static enum gen_form decision_table[INC_last][INC_last][FORM_last];
+ 
+ static void
+ init_decision_table (void)
+ {
+   enum gen_form value;
+ 
+   if (HAVE_PRE_INCREMENT || HAVE_PRE_MODIFY_DISP)
+     {
+       /* Prefer the simple form if both are available.  */
+       value = (HAVE_PRE_INCREMENT) ? SIMPLE_PRE_INC : DISP_PRE;
+ 
+       decision_table[INC_POS_SIZE][INC_ZERO][FORM_PRE_ADD] = value;
+       decision_table[INC_POS_SIZE][INC_ZERO][FORM_PRE_INC] = value;
+ 
+       decision_table[INC_POS_SIZE][INC_POS_SIZE][FORM_POST_ADD] = value;
+       decision_table[INC_POS_SIZE][INC_POS_SIZE][FORM_POST_INC] = value;
+     }
+ 
+   if (HAVE_POST_INCREMENT || HAVE_POST_MODIFY_DISP)
+     {
+       /* Prefer the simple form if both are available.  */
+       value = (HAVE_POST_INCREMENT) ? SIMPLE_POST_INC : DISP_POST;
+ 
+       decision_table[INC_POS_SIZE][INC_ZERO][FORM_POST_ADD] = value;
+       decision_table[INC_POS_SIZE][INC_ZERO][FORM_POST_INC] = value;
+ 
+       decision_table[INC_POS_SIZE][INC_NEG_SIZE][FORM_PRE_ADD] = value;
+       decision_table[INC_POS_SIZE][INC_NEG_SIZE][FORM_PRE_INC] = value;
+     }
+ 
+   if (HAVE_PRE_DECREMENT || HAVE_PRE_MODIFY_DISP)
+     {
+       /* Prefer the simple form if both are available.  */
+       value = (HAVE_PRE_DECREMENT) ? SIMPLE_PRE_DEC : DISP_PRE;
+ 
+       decision_table[INC_NEG_SIZE][INC_ZERO][FORM_PRE_ADD] = value;
+       decision_table[INC_NEG_SIZE][INC_ZERO][FORM_PRE_INC] = value;
+ 
+       decision_table[INC_NEG_SIZE][INC_NEG_SIZE][FORM_POST_ADD] = value;
+       decision_table[INC_NEG_SIZE][INC_NEG_SIZE][FORM_POST_INC] = value;
+     }
+ 
+   if (HAVE_POST_DECREMENT || HAVE_POST_MODIFY_DISP)
+     {
+       /* Prefer the simple form if both are available.  */
+       value = (HAVE_POST_DECREMENT) ? SIMPLE_POST_DEC : DISP_POST;
+ 
+       decision_table[INC_NEG_SIZE][INC_ZERO][FORM_POST_ADD] = value;
+       decision_table[INC_NEG_SIZE][INC_ZERO][FORM_POST_INC] = value;
+ 
+       decision_table[INC_NEG_SIZE][INC_POS_SIZE][FORM_PRE_ADD] = value;
+       decision_table[INC_NEG_SIZE][INC_POS_SIZE][FORM_PRE_INC] = value;
+     }
+ 
+   if (HAVE_PRE_MODIFY_DISP)
+     {
+       decision_table[INC_POS_ANY][INC_ZERO][FORM_PRE_ADD] = DISP_PRE;
+       decision_table[INC_POS_ANY][INC_ZERO][FORM_PRE_INC] = DISP_PRE;
+ 
+       decision_table[INC_POS_ANY][INC_POS_ANY][FORM_POST_ADD] = DISP_PRE;
+       decision_table[INC_POS_ANY][INC_POS_ANY][FORM_POST_INC] = DISP_PRE;
+ 
+       decision_table[INC_NEG_ANY][INC_ZERO][FORM_PRE_ADD] = DISP_PRE;
+       decision_table[INC_NEG_ANY][INC_ZERO][FORM_PRE_INC] = DISP_PRE;
+ 
+       decision_table[INC_NEG_ANY][INC_NEG_ANY][FORM_POST_ADD] = DISP_PRE;
+       decision_table[INC_NEG_ANY][INC_NEG_ANY][FORM_POST_INC] = DISP_PRE;
+     }
+ 
+   if (HAVE_POST_MODIFY_DISP)
+     {
+       decision_table[INC_POS_ANY][INC_ZERO][FORM_POST_ADD] = DISP_POST;
+       decision_table[INC_POS_ANY][INC_ZERO][FORM_POST_INC] = DISP_POST;
+ 
+       decision_table[INC_POS_ANY][INC_NEG_ANY][FORM_PRE_ADD] = DISP_POST;
+       decision_table[INC_POS_ANY][INC_NEG_ANY][FORM_PRE_INC] = DISP_POST;
+ 
+       decision_table[INC_NEG_ANY][INC_ZERO][FORM_POST_ADD] = DISP_POST;
+       decision_table[INC_NEG_ANY][INC_ZERO][FORM_POST_INC] = DISP_POST;
+ 
+       decision_table[INC_NEG_ANY][INC_POS_ANY][FORM_PRE_ADD] = DISP_POST;
+       decision_table[INC_NEG_ANY][INC_POS_ANY][FORM_PRE_INC] = DISP_POST;
+     }
+ 
+   /* This is much simpler than the other cases because we do not look
+      for the reg1-reg2 case.  Note that we do not have a INC_POS_REG
+      and INC_NEG_REG states.  Most of the use of such states would be
+      on a target that had an R1 - R2 update address form.
+ 
+      There is the remote possibility that you could also catch a = a +
+      b; *(a - b) as a postdecrement of (a + b).  However, it is
+      unclear if *(a - b) would ever be generated on a machine that did
+      not have that kind of addressing mode.  The IA-64 and RS6000 will
+      not do this, and I cannot speak for any other.  If any
+      architecture does have an a-b update for, these cases should be
+      added.  */
+   if (HAVE_PRE_MODIFY_REG)
+     {
+       decision_table[INC_REG][INC_ZERO][FORM_PRE_ADD] = REG_PRE;
+       decision_table[INC_REG][INC_ZERO][FORM_PRE_INC] = REG_PRE;
+ 
+       decision_table[INC_REG][INC_REG][FORM_POST_ADD] = REG_PRE;
+       decision_table[INC_REG][INC_REG][FORM_POST_INC] = REG_PRE;
+     }
+ 
+   if (HAVE_POST_MODIFY_REG)
+     {
+       decision_table[INC_REG][INC_ZERO][FORM_POST_ADD] = REG_POST;
+       decision_table[INC_REG][INC_ZERO][FORM_POST_INC] = REG_POST;
+     }
+ 
+   initialized = true;
+ }
+ 
+ /* Parsed fields of an inc insn of the form "reg_res = reg0+reg1" or
+    "reg_res = reg0+c".  */
+ 
+ static struct inc_insn
+ {
+   rtx_insn *insn;     /* The insn being parsed.  */
+   rtx pat;            /* The pattern of the insn.  */
+   bool reg1_is_const; /* True if reg1 is const, false if reg1 is a reg.  */
+   enum form form;
+   rtx reg_res;
+   rtx reg0;
+   rtx reg1;
+   enum inc_state reg1_state;/* The form of the const if reg1 is a const.  */
+   HOST_WIDE_INT reg1_val;/* Value if reg1 is const.  */
+ } inc_insn;
+ 
+ 
+ /* Dump the parsed inc insn to FILE.  */
+ 
+ static void
+ dump_inc_insn (FILE *file)
+ {
+   const char *f = ((inc_insn.form == FORM_PRE_ADD)
+ 	      || (inc_insn.form == FORM_PRE_INC)) ? "pre" : "post";
+ 
+   dump_insn_slim (file, inc_insn.insn);
+ 
+   switch (inc_insn.form)
+     {
+     case FORM_PRE_ADD:
+     case FORM_POST_ADD:
+       if (inc_insn.reg1_is_const)
+ 	fprintf (file, "found %s add(%d) r[%d]=r[%d]+%d\n",
+ 		 f, INSN_UID (inc_insn.insn),
+ 		 REGNO (inc_insn.reg_res),
+ 		 REGNO (inc_insn.reg0), (int) inc_insn.reg1_val);
+       else
+ 	fprintf (file, "found %s add(%d) r[%d]=r[%d]+r[%d]\n",
+ 		 f, INSN_UID (inc_insn.insn),
+ 		 REGNO (inc_insn.reg_res),
+ 		 REGNO (inc_insn.reg0), REGNO (inc_insn.reg1));
+       break;
+ 
+     case FORM_PRE_INC:
+     case FORM_POST_INC:
+       if (inc_insn.reg1_is_const)
+ 	fprintf (file, "found %s inc(%d) r[%d]+=%d\n",
+ 		 f, INSN_UID (inc_insn.insn),
+ 		 REGNO (inc_insn.reg_res), (int) inc_insn.reg1_val);
+       else
+ 	fprintf (file, "found %s inc(%d) r[%d]+=r[%d]\n",
+ 		 f, INSN_UID (inc_insn.insn),
+ 		 REGNO (inc_insn.reg_res), REGNO (inc_insn.reg1));
+       break;
+ 
+     default:
+       break;
+     }
+ }
+ 
+ 
+ /* Parsed fields of a mem ref of the form "*(reg0+reg1)" or "*(reg0+c)".  */
+ 
+ static struct mem_insn
+ {
+   rtx_insn *insn;     /* The insn being parsed.  */
+   rtx pat;            /* The pattern of the insn.  */
+   rtx *mem_loc;       /* The address of the field that holds the mem */
+                       /* that is to be replaced.  */
+   bool reg1_is_const; /* True if reg1 is const, false if reg1 is a reg.  */
+   rtx reg0;
+   rtx reg1;           /* This is either a reg or a const depending on
+ 			 reg1_is_const.  */
+   enum inc_state reg1_state;/* The form of the const if reg1 is a const.  */
+   HOST_WIDE_INT reg1_val;/* Value if reg1 is const.  */
+ } mem_insn;
+ 
+ 
+ /* Dump the parsed mem insn to FILE.  */
+ 
+ static void
+ dump_mem_insn (FILE *file)
+ {
+   dump_insn_slim (file, mem_insn.insn);
+ 
+   if (mem_insn.reg1_is_const)
+     fprintf (file, "found mem(%d) *(r[%d]+%d)\n",
+ 	     INSN_UID (mem_insn.insn),
+ 	     REGNO (mem_insn.reg0), (int) mem_insn.reg1_val);
+   else
+     fprintf (file, "found mem(%d) *(r[%d]+r[%d])\n",
+ 	     INSN_UID (mem_insn.insn),
+ 	     REGNO (mem_insn.reg0), REGNO (mem_insn.reg1));
+ }
+ 
+ 
+ /* The following three arrays contain pointers to instructions. They
+    are indexed by REGNO.  At any point in the basic block where we are
+    looking these three arrays contain, respectively, the next insn
+    that uses REGNO, the next inc or add insn that uses REGNO and the
+    next insn that sets REGNO.
+ 
+    The arrays are not cleared when we move from block to block so
+    whenever an insn is retrieved from these arrays, it's block number
+    must be compared with the current block.
+ */
+ 
+ static rtx_insn **reg_next_debug_use = NULL;
+ static rtx_insn **reg_next_use = NULL;
+ static rtx_insn **reg_next_inc_use = NULL;
+ static rtx_insn **reg_next_def = NULL;
+ 
+ 
+ /* Move dead note that match PATTERN to TO_INSN from FROM_INSN.  We do
+    not really care about moving any other notes from the inc or add
+    insn.  Moving the REG_EQUAL and REG_EQUIV is clearly wrong and it
+    does not appear that there are any other kinds of relevant notes.  */
+ 
+ static void
+ move_dead_notes (rtx_insn *to_insn, rtx_insn *from_insn, rtx pattern)
+ {
+   rtx note;
+   rtx next_note;
+   rtx prev_note = NULL;
+ 
+   for (note = REG_NOTES (from_insn); note; note = next_note)
+     {
+       next_note = XEXP (note, 1);
+ 
+       if ((REG_NOTE_KIND (note) == REG_DEAD)
+ 	  && pattern == XEXP (note, 0))
+ 	{
+ 	  XEXP (note, 1) = REG_NOTES (to_insn);
+ 	  REG_NOTES (to_insn) = note;
+ 	  if (prev_note)
+ 	    XEXP (prev_note, 1) = next_note;
+ 	  else
+ 	    REG_NOTES (from_insn) = next_note;
+ 	}
+       else prev_note = note;
+     }
+ }
+ 
+ /* Change mem_insn.mem_loc so that uses NEW_ADDR which has an
+    increment of INC_REG.  To have reached this point, the change is a
+    legitimate one from a dataflow point of view.  The only questions
+    are is this a valid change to the instruction and is this a
+    profitable change to the instruction.  */
+ 
+ static bool
+ attempt_change (rtx new_addr, rtx inc_reg)
+ {
+   /* There are four cases: For the two cases that involve an add
+      instruction, we are going to have to delete the add and insert a
+      mov.  We are going to assume that the mov is free.  This is
+      fairly early in the backend and there are a lot of opportunities
+      for removing that move later.  In particular, there is the case
+      where the move may be dead, this is what dead code elimination
+      passes are for.  The two cases where we have an inc insn will be
+      handled mov free.  */
+ 
+   basic_block bb = BLOCK_FOR_INSN (mem_insn.insn);
+   rtx_insn *mov_insn = NULL;
+   int regno;
+   rtx mem = *mem_insn.mem_loc;
+   machine_mode mode = GET_MODE (mem);
+   int align = MEM_ALIGN (mem);
+   rtx new_mem;
+   int old_cost = 0;
+   int new_cost = 0;
+   bool speed = optimize_bb_for_speed_p (bb);
+ 
+   PUT_MODE (mem_tmp, mode);
+   XEXP (mem_tmp, 0) = new_addr;
+   set_mem_align (mem_tmp, align);
+ 
+   old_cost = (set_src_cost (mem, mode, speed)
+ 	      + set_rtx_cost (PATTERN (inc_insn.insn), speed));
+ 
+   new_cost = set_src_cost (mem_tmp, mode, speed);
+ 
+   /* In the FORM_PRE_ADD and FORM_POST_ADD cases we emit an extra move
+      whose cost we should account for.  */
+   if (inc_insn.form == FORM_PRE_ADD
+       || inc_insn.form == FORM_POST_ADD)
+     {
+       start_sequence ();
+       emit_move_insn (inc_insn.reg_res, inc_insn.reg0);
+       mov_insn = get_insns ();
+       end_sequence ();
+       new_cost += seq_cost (mov_insn, speed);
+     }
+ 
+   /* The first item of business is to see if this is profitable.  */
+   if (old_cost < new_cost)
+     {
+       if (dump_file)
+ 	fprintf (dump_file, "cost failure old=%d new=%d\n", old_cost, new_cost);
+       return false;
+     }
+ 
+   /* Jump through a lot of hoops to keep the attributes up to date.  We
+      do not want to call one of the change address variants that take
+      an offset even though we know the offset in many cases.  These
+      assume you are changing where the address is pointing by the
+      offset.  */
+   new_mem = replace_equiv_address_nv (mem, new_addr);
+   if (! validate_change (mem_insn.insn, mem_insn.mem_loc, new_mem, 0))
+     {
+       if (dump_file)
+ 	fprintf (dump_file, "validation failure\n");
+       return false;
+     }
+ 
+   /* From here to the end of the function we are committed to the
+      change, i.e. nothing fails.  Generate any necessary movs, move
+      any regnotes, and fix up the reg_next_{use,inc_use,def}.  */
+   switch (inc_insn.form)
+     {
+     case FORM_PRE_ADD:
+       /* Replace the addition with a move.  Do it at the location of
+ 	 the addition since the operand of the addition may change
+ 	 before the memory reference.  */
+       gcc_assert (mov_insn);
+       emit_insn_before (mov_insn, inc_insn.insn);
+       regno = REGNO (inc_insn.reg0);
+       /* ??? Could REGNO possibly be used in MEM_INSN other than in
+ 	 the MEM address, and still die there, so that move_dead_notes
+ 	 would incorrectly move the note?  */
+       if (reg_next_use[regno] == mem_insn.insn)
+ 	move_dead_notes (mov_insn, mem_insn.insn, inc_insn.reg0);
+       else
+ 	move_dead_notes (mov_insn, inc_insn.insn, inc_insn.reg0);
+ 
+       regno = REGNO (inc_insn.reg_res);
+       if (reg_next_debug_use && reg_next_debug_use[regno]
+ 	  && BLOCK_FOR_INSN (reg_next_debug_use[regno]) == bb)
+ 	{
+ 	  rtx adjres = gen_rtx_PLUS (GET_MODE (inc_insn.reg_res),
+ 				     inc_insn.reg_res, inc_insn.reg1);
+ 	  if (dump_file)
+ 	    fprintf (dump_file, "adjusting debug insns\n");
+ 	  propagate_for_debug (PREV_INSN (reg_next_debug_use[regno]),
+ 			       mem_insn.insn,
+ 			       inc_insn.reg_res, adjres, bb);
+ 	  reg_next_debug_use[regno] = NULL;
+ 	}
+       reg_next_def[regno] = mov_insn;
+       reg_next_use[regno] = NULL;
+ 
+       regno = REGNO (inc_insn.reg0);
+       if (reg_next_debug_use && reg_next_debug_use[regno]
+ 	  && BLOCK_FOR_INSN (reg_next_debug_use[regno]) == bb
+ 	  && find_reg_note (mov_insn, REG_DEAD, inc_insn.reg0))
+ 	{
+ 	  if (dump_file)
+ 	    fprintf (dump_file, "remapping debug insns\n");
+ 	  propagate_for_debug (PREV_INSN (reg_next_debug_use[regno]),
+ 			       mem_insn.insn,
+ 			       inc_insn.reg0, inc_insn.reg_res, bb);
+ 	  reg_next_debug_use[regno] = NULL;
+ 	}
+       reg_next_use[regno] = mov_insn;
+       df_recompute_luids (bb);
+       break;
+ 
+     case FORM_POST_INC:
+       regno = REGNO (inc_insn.reg_res);
+       if (reg_next_debug_use && reg_next_debug_use[regno]
+ 	  && BLOCK_FOR_INSN (reg_next_debug_use[regno]) == bb)
+ 	{
+ 	  rtx adjres = gen_rtx_MINUS (GET_MODE (inc_insn.reg_res),
+ 				      inc_insn.reg_res, inc_insn.reg1);
+ 	  if (dump_file)
+ 	    fprintf (dump_file, "adjusting debug insns\n");
+ 	  propagate_for_debug (PREV_INSN (reg_next_debug_use[regno]),
+ 			       inc_insn.insn,
+ 			       inc_insn.reg_res, adjres, bb);
+ 	  reg_next_debug_use[regno] = NULL;
+ 	}
+       if (reg_next_use[regno] == reg_next_inc_use[regno])
+ 	reg_next_inc_use[regno] = NULL;
+ 
+       /* Fallthru.  */
+     case FORM_PRE_INC:
+       regno = REGNO (inc_insn.reg_res);
+       /* Despite the fall-through, we won't run this twice: we'll have
+ 	 already cleared reg_next_debug_use[regno] before falling
+ 	 through.  */
+       if (reg_next_debug_use && reg_next_debug_use[regno]
+ 	  && BLOCK_FOR_INSN (reg_next_debug_use[regno]) == bb)
+ 	{
+ 	  rtx adjres = gen_rtx_PLUS (GET_MODE (inc_insn.reg_res),
+ 				     inc_insn.reg_res, inc_insn.reg1);
+ 	  if (dump_file)
+ 	    fprintf (dump_file, "adjusting debug insns\n");
+ 	  propagate_for_debug (PREV_INSN (reg_next_debug_use[regno]),
+ 			       mem_insn.insn,
+ 			       inc_insn.reg_res, adjres, bb);
+ 	  if (DF_INSN_LUID (mem_insn.insn)
+ 	      < DF_INSN_LUID (reg_next_debug_use[regno]))
+ 	    reg_next_debug_use[regno] = NULL;
+ 	}
+       reg_next_def[regno] = mem_insn.insn;
+       reg_next_use[regno] = NULL;
+ 
+       break;
+ 
+     case FORM_POST_ADD:
+       gcc_assert (mov_insn);
+       emit_insn_before (mov_insn, mem_insn.insn);
+       move_dead_notes (mov_insn, inc_insn.insn, inc_insn.reg0);
+ 
+       /* Do not move anything to the mov insn because the instruction
+ 	 pointer for the main iteration has not yet hit that.  It is
+ 	 still pointing to the mem insn. */
+       regno = REGNO (inc_insn.reg_res);
+       /* The pseudo is now set earlier, so it must have been dead in
+ 	 that range, and dead registers cannot be referenced in debug
+ 	 insns.  */
+       gcc_assert (!(reg_next_debug_use && reg_next_debug_use[regno]
+ 		    && BLOCK_FOR_INSN (reg_next_debug_use[regno]) == bb));
+       reg_next_def[regno] = mem_insn.insn;
+       reg_next_use[regno] = NULL;
+ 
+       regno = REGNO (inc_insn.reg0);
+       if (reg_next_debug_use && reg_next_debug_use[regno]
+ 	  && BLOCK_FOR_INSN (reg_next_debug_use[regno]) == bb
+ 	  && find_reg_note (mov_insn, REG_DEAD, inc_insn.reg0))
+ 	{
+ 	  if (dump_file)
+ 	    fprintf (dump_file, "remapping debug insns\n");
+ 	  propagate_for_debug (PREV_INSN (reg_next_debug_use[regno]),
+ 			       inc_insn.insn,
+ 			       inc_insn.reg0, inc_insn.reg_res, bb);
+ 	  reg_next_debug_use[regno] = NULL;
+ 	}
+       reg_next_use[regno] = mem_insn.insn;
+       if ((reg_next_use[regno] == reg_next_inc_use[regno])
+ 	  || (reg_next_inc_use[regno] == inc_insn.insn))
+ 	reg_next_inc_use[regno] = NULL;
+       df_recompute_luids (bb);
+       break;
+ 
+     case FORM_last:
+     default:
+       gcc_unreachable ();
+     }
+ 
+   if (!inc_insn.reg1_is_const)
+     {
+       regno = REGNO (inc_insn.reg1);
+       reg_next_use[regno] = mem_insn.insn;
+       if ((reg_next_use[regno] == reg_next_inc_use[regno])
+ 	  || (reg_next_inc_use[regno] == inc_insn.insn))
+ 	reg_next_inc_use[regno] = NULL;
+     }
+ 
+   delete_insn (inc_insn.insn);
+ 
+   if (dump_file && mov_insn)
+     {
+       fprintf (dump_file, "inserting mov ");
+       dump_insn_slim (dump_file, mov_insn);
+     }
+ 
+   /* Record that this insn has an implicit side effect.  */
+   add_reg_note (mem_insn.insn, REG_INC, inc_reg);
+ 
+   if (dump_file)
+     {
+       fprintf (dump_file, "****success ");
+       dump_insn_slim (dump_file, mem_insn.insn);
+     }
+ 
+   return true;
+ }
+ 
+ 
+ /* Try to combine the instruction in INC_INSN with the instruction in
+    MEM_INSN.  First the form is determined using the DECISION_TABLE
+    and the results of parsing the INC_INSN and the MEM_INSN.
+    Assuming the form is ok, a prototype new address is built which is
+    passed to ATTEMPT_CHANGE for final processing.  */
+ 
+ static bool
+ try_merge (void)
+ {
+   enum gen_form gen_form;
+   rtx mem = *mem_insn.mem_loc;
+   rtx inc_reg = inc_insn.form == FORM_POST_ADD ?
+     inc_insn.reg_res : mem_insn.reg0;
+ 
+   /* The width of the mem being accessed.  */
+   poly_int64 size = GET_MODE_SIZE (GET_MODE (mem));
+   rtx_insn *last_insn = NULL;
+   machine_mode reg_mode = GET_MODE (inc_reg);
+ 
+   switch (inc_insn.form)
+     {
+     case FORM_PRE_ADD:
+     case FORM_PRE_INC:
+       last_insn = mem_insn.insn;
+       break;
+     case FORM_POST_INC:
+     case FORM_POST_ADD:
+       last_insn = inc_insn.insn;
+       break;
+     case FORM_last:
+     default:
+       gcc_unreachable ();
+     }
+ 
+   /* Cannot handle auto inc of the stack.  */
+   if (inc_reg == stack_pointer_rtx)
+     {
+       if (dump_file)
+ 	fprintf (dump_file, "cannot inc stack %d failure\n", REGNO (inc_reg));
+       return false;
+     }
+ 
+   /* Look to see if the inc register is dead after the memory
+      reference.  If it is, do not do the combination.  */
+   if (find_regno_note (last_insn, REG_DEAD, REGNO (inc_reg)))
+     {
+       if (dump_file)
+ 	fprintf (dump_file, "dead failure %d\n", REGNO (inc_reg));
+       return false;
+     }
+ 
+   mem_insn.reg1_state = (mem_insn.reg1_is_const)
+     ? set_inc_state (mem_insn.reg1_val, size) : INC_REG;
+   inc_insn.reg1_state = (inc_insn.reg1_is_const)
+     ? set_inc_state (inc_insn.reg1_val, size) : INC_REG;
+ 
+   /* Now get the form that we are generating.  */
+   gen_form = decision_table
+     [inc_insn.reg1_state][mem_insn.reg1_state][inc_insn.form];
+ 
+   if (dbg_cnt (auto_inc_dec) == false)
+     return false;
+ 
+   switch (gen_form)
+     {
+     default:
+     case NOTHING:
+       return false;
+ 
+     case SIMPLE_PRE_INC:     /* ++size  */
+       if (dump_file)
+ 	fprintf (dump_file, "trying SIMPLE_PRE_INC\n");
+       return attempt_change (gen_rtx_PRE_INC (reg_mode, inc_reg), inc_reg);
+ 
+     case SIMPLE_POST_INC:    /* size++  */
+       if (dump_file)
+ 	fprintf (dump_file, "trying SIMPLE_POST_INC\n");
+       return attempt_change (gen_rtx_POST_INC (reg_mode, inc_reg), inc_reg);
+ 
+     case SIMPLE_PRE_DEC:     /* --size  */
+       if (dump_file)
+ 	fprintf (dump_file, "trying SIMPLE_PRE_DEC\n");
+       return attempt_change (gen_rtx_PRE_DEC (reg_mode, inc_reg), inc_reg);
+ 
+     case SIMPLE_POST_DEC:    /* size--  */
+       if (dump_file)
+ 	fprintf (dump_file, "trying SIMPLE_POST_DEC\n");
+       return attempt_change (gen_rtx_POST_DEC (reg_mode, inc_reg), inc_reg);
+ 
+     case DISP_PRE:           /* ++con   */
+       if (dump_file)
+ 	fprintf (dump_file, "trying DISP_PRE\n");
+       return attempt_change (gen_rtx_PRE_MODIFY (reg_mode,
+ 						 inc_reg,
+ 						 gen_rtx_PLUS (reg_mode,
+ 							       inc_reg,
+ 							       inc_insn.reg1)),
+ 			     inc_reg);
+ 
+     case DISP_POST:          /* con++   */
+       if (dump_file)
+ 	fprintf (dump_file, "trying POST_DISP\n");
+       return attempt_change (gen_rtx_POST_MODIFY (reg_mode,
+ 						  inc_reg,
+ 						  gen_rtx_PLUS (reg_mode,
+ 								inc_reg,
+ 								inc_insn.reg1)),
+ 			     inc_reg);
+ 
+     case REG_PRE:            /* ++reg   */
+       if (dump_file)
+ 	fprintf (dump_file, "trying PRE_REG\n");
+       return attempt_change (gen_rtx_PRE_MODIFY (reg_mode,
+ 						 inc_reg,
+ 						 gen_rtx_PLUS (reg_mode,
+ 							       inc_reg,
+ 							       inc_insn.reg1)),
+ 			     inc_reg);
+ 
+     case REG_POST:            /* reg++   */
+       if (dump_file)
+ 	fprintf (dump_file, "trying POST_REG\n");
+       return attempt_change (gen_rtx_POST_MODIFY (reg_mode,
+ 						  inc_reg,
+ 						  gen_rtx_PLUS (reg_mode,
+ 								inc_reg,
+ 								inc_insn.reg1)),
+ 			     inc_reg);
+     }
+ }
+ 
+ /* Return the next insn that uses (if reg_next_use is passed in
+    NEXT_ARRAY) or defines (if reg_next_def is passed in NEXT_ARRAY)
+    REGNO in BB.  */
+ 
+ static rtx_insn *
+ get_next_ref (int regno, basic_block bb, rtx_insn **next_array)
+ {
+   rtx_insn *insn = next_array[regno];
+ 
+   /* Lazy about cleaning out the next_arrays.  */
+   if (insn && BLOCK_FOR_INSN (insn) != bb)
+     {
+       next_array[regno] = NULL;
+       insn = NULL;
+     }
+ 
+   return insn;
+ }
+ 
+ 
+ /* Return true if INSN is of a form "a = b op c" where a and b are
+    regs.  op is + if c is a reg and +|- if c is a const.  Fill in
+    INC_INSN with what is found.
+ 
+    This function is called in two contexts, if BEFORE_MEM is true,
+    this is called for each insn in the basic block.  If BEFORE_MEM is
+    false, it is called for the instruction in the block that uses the
+    index register for some memory reference that is currently being
+    processed.  */
+ 
+ static bool
+ parse_add_or_inc (rtx_insn *insn, bool before_mem)
+ {
+   rtx pat = single_set (insn);
+   if (!pat)
+     return false;
+ 
+   /* Result must be single reg.  */
+   if (!REG_P (SET_DEST (pat)))
+     return false;
+ 
+   if ((GET_CODE (SET_SRC (pat)) != PLUS)
+       && (GET_CODE (SET_SRC (pat)) != MINUS))
+     return false;
+ 
+   if (!REG_P (XEXP (SET_SRC (pat), 0)))
+     return false;
+ 
+   inc_insn.insn = insn;
+   inc_insn.pat = pat;
+   inc_insn.reg_res = SET_DEST (pat);
+   inc_insn.reg0 = XEXP (SET_SRC (pat), 0);
+ 
+   /* Block any auto increment of the frame pointer since it expands into
+      an addition and cannot be removed by copy propagation.  */
+   if (inc_insn.reg0 == frame_pointer_rtx)
+     return false;
+ 
+   if (rtx_equal_p (inc_insn.reg_res, inc_insn.reg0))
+     inc_insn.form = before_mem ? FORM_PRE_INC : FORM_POST_INC;
+   else
+     inc_insn.form = before_mem ? FORM_PRE_ADD : FORM_POST_ADD;
+ 
+   if (CONST_INT_P (XEXP (SET_SRC (pat), 1)))
+     {
+       /* Process a = b + c where c is a const.  */
+       inc_insn.reg1_is_const = true;
+       if (GET_CODE (SET_SRC (pat)) == PLUS)
+ 	{
+ 	  inc_insn.reg1 = XEXP (SET_SRC (pat), 1);
+ 	  inc_insn.reg1_val = INTVAL (inc_insn.reg1);
+ 	}
+       else
+ 	{
+ 	  inc_insn.reg1_val = -INTVAL (XEXP (SET_SRC (pat), 1));
+ 	  inc_insn.reg1 = GEN_INT (inc_insn.reg1_val);
+ 	}
+       return true;
+     }
+   else if ((HAVE_PRE_MODIFY_REG || HAVE_POST_MODIFY_REG)
+ 	   && (REG_P (XEXP (SET_SRC (pat), 1)))
+ 	   && GET_CODE (SET_SRC (pat)) == PLUS)
+     {
+       /* Process a = b + c where c is a reg.  */
+       inc_insn.reg1 = XEXP (SET_SRC (pat), 1);
+       inc_insn.reg1_is_const = false;
+ 
+       if (inc_insn.form == FORM_PRE_INC
+ 	  || inc_insn.form == FORM_POST_INC)
+ 	return true;
+       else if (rtx_equal_p (inc_insn.reg_res, inc_insn.reg1))
+ 	{
+ 	  /* Reverse the two operands and turn *_ADD into *_INC since
+ 	     a = c + a.  */
+ 	  std::swap (inc_insn.reg0, inc_insn.reg1);
+ 	  inc_insn.form = before_mem ? FORM_PRE_INC : FORM_POST_INC;
+ 	  return true;
+ 	}
+       else
+ 	return true;
+     }
+ 
+   return false;
+ }
+ 
+ 
+ /* A recursive function that checks all of the mem uses in
+    ADDRESS_OF_X to see if any single one of them is compatible with
+    what has been found in inc_insn.  To avoid accidental matches, we
+    will only find MEMs with FINDREG, be it inc_insn.reg_res, be it
+    inc_insn.reg0.
+ 
+    -1 is returned for success.  0 is returned if nothing was found and
+    1 is returned for failure. */
+ 
+ static int
+ find_address (rtx *address_of_x, rtx findreg)
+ {
+   rtx x = *address_of_x;
+   enum rtx_code code = GET_CODE (x);
+   const char *const fmt = GET_RTX_FORMAT (code);
+   int i;
+   int value = 0;
+   int tem;
+ 
+   if (code == MEM && findreg == inc_insn.reg_res
+       && rtx_equal_p (XEXP (x, 0), inc_insn.reg_res))
+     {
+       /* Match with *reg_res.  */
+       mem_insn.mem_loc = address_of_x;
+       mem_insn.reg0 = inc_insn.reg_res;
+       mem_insn.reg1_is_const = true;
+       mem_insn.reg1_val = 0;
+       mem_insn.reg1 = GEN_INT (0);
+       return -1;
+     }
+   if (code == MEM && inc_insn.reg1_is_const && inc_insn.reg0
+       && findreg == inc_insn.reg0
+       && rtx_equal_p (XEXP (x, 0), inc_insn.reg0))
+     {
+       /* Match with *reg0, assumed to be equivalent to
+          *(reg_res - reg1_val); callers must check whether this is the case.  */
+       mem_insn.mem_loc = address_of_x;
+       mem_insn.reg0 = inc_insn.reg_res;
+       mem_insn.reg1_is_const = true;
+       mem_insn.reg1_val = -inc_insn.reg1_val;
+       mem_insn.reg1 = GEN_INT (mem_insn.reg1_val);
+       return -1;
+     }
+   if (code == MEM && findreg == inc_insn.reg_res
+       && GET_CODE (XEXP (x, 0)) == PLUS
+       && rtx_equal_p (XEXP (XEXP (x, 0), 0), inc_insn.reg_res))
+     {
+       rtx b = XEXP (XEXP (x, 0), 1);
+       mem_insn.mem_loc = address_of_x;
+       mem_insn.reg0 = inc_insn.reg_res;
+       mem_insn.reg1 = b;
+       mem_insn.reg1_is_const = inc_insn.reg1_is_const;
+       if (CONST_INT_P (b))
+ 	{
+ 	  /* Match with *(reg0 + reg1) where reg1 is a const. */
+ 	  HOST_WIDE_INT val = INTVAL (b);
+ 	  if (inc_insn.reg1_is_const
+ 	      && (inc_insn.reg1_val == val || inc_insn.reg1_val == -val))
+ 	    {
+ 	      mem_insn.reg1_val = val;
+ 	      return -1;
+ 	    }
+ 	}
+       else if (!inc_insn.reg1_is_const
+ 	       && rtx_equal_p (inc_insn.reg1, b))
+ 	/* Match with *(reg0 + reg1). */
+ 	return -1;
+     }
+ 
+   if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
+     {
+       /* If REG occurs inside a MEM used in a bit-field reference,
+ 	 that is unacceptable.  */
+       if (find_address (&XEXP (x, 0), findreg))
+ 	return 1;
+     }
+ 
+   if (x == inc_insn.reg_res)
+     return 1;
+ 
+   /* Time for some deep diving.  */
+   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
+     {
+       if (fmt[i] == 'e')
+ 	{
+ 	  tem = find_address (&XEXP (x, i), findreg);
+ 	  /* If this is the first use, let it go so the rest of the
+ 	     insn can be checked.  */
+ 	  if (value == 0)
+ 	    value = tem;
+ 	  else if (tem != 0)
+ 	    /* More than one match was found.  */
+ 	    return 1;
+ 	}
+       else if (fmt[i] == 'E')
+ 	{
+ 	  int j;
+ 	  for (j = XVECLEN (x, i) - 1; j >= 0; j--)
+ 	    {
+ 	      tem = find_address (&XVECEXP (x, i, j), findreg);
+ 	      /* If this is the first use, let it go so the rest of
+ 		 the insn can be checked.  */
+ 	      if (value == 0)
+ 		value = tem;
+ 	      else if (tem != 0)
+ 		/* More than one match was found.  */
+ 		return 1;
+ 	    }
+ 	}
+     }
+   return value;
+ }
+ 
+ /* Once a suitable mem reference has been found and the MEM_INSN
+    structure has been filled in, FIND_INC is called to see if there is
+    a suitable add or inc insn that follows the mem reference and
+    determine if it is suitable to merge.
+ 
+    In the case where the MEM_INSN has two registers in the reference,
+    this function may be called recursively.  The first time looking
+    for an add of the first register, and if that fails, looking for an
+    add of the second register.  The FIRST_TRY parameter is used to
+    only allow the parameters to be reversed once.  */
+ 
+ static bool
+ find_inc (bool first_try)
+ {
+   rtx_insn *insn;
+   basic_block bb = BLOCK_FOR_INSN (mem_insn.insn);
+   rtx_insn *other_insn;
+   df_ref def;
+ 
+   /* Make sure this reg appears only once in this insn.  */
+   if (count_occurrences (PATTERN (mem_insn.insn), mem_insn.reg0, 1) != 1)
+     {
+       if (dump_file)
+ 	fprintf (dump_file, "mem count failure\n");
+       return false;
+     }
+ 
+   if (dump_file)
+     dump_mem_insn (dump_file);
+ 
+   /* Find the next use that is an inc.  */
+   insn = get_next_ref (REGNO (mem_insn.reg0),
+ 		       BLOCK_FOR_INSN (mem_insn.insn),
+ 		       reg_next_inc_use);
+   if (!insn)
+     return false;
+ 
+   /* Even though we know the next use is an add or inc because it came
+      from the reg_next_inc_use, we must still reparse.  */
+   if (!parse_add_or_inc (insn, false))
+     {
+       /* Next use was not an add.  Look for one extra case. It could be
+ 	 that we have:
+ 
+ 	 *(a + b)
+ 	 ...= a;
+ 	 ...= b + a
+ 
+ 	 if we reverse the operands in the mem ref we would
+ 	 find this.  Only try it once though.  */
+       if (first_try && !mem_insn.reg1_is_const)
+ 	{
+ 	  std::swap (mem_insn.reg0, mem_insn.reg1);
+ 	  return find_inc (false);
+ 	}
+       else
+ 	return false;
+     }
+ 
+   /* Need to assure that none of the operands of the inc instruction are
+      assigned to by the mem insn.  */
+   FOR_EACH_INSN_DEF (def, mem_insn.insn)
+     {
+       unsigned int regno = DF_REF_REGNO (def);
+       if ((regno == REGNO (inc_insn.reg0))
+ 	  || (regno == REGNO (inc_insn.reg_res)))
+ 	{
+ 	  if (dump_file)
+ 	    fprintf (dump_file, "inc conflicts with store failure.\n");
+ 	  return false;
+ 	}
+       if (!inc_insn.reg1_is_const && (regno == REGNO (inc_insn.reg1)))
+ 	{
+ 	  if (dump_file)
+ 	    fprintf (dump_file, "inc conflicts with store failure.\n");
+ 	  return false;
+ 	}
+     }
+ 
+   if (dump_file)
+     dump_inc_insn (dump_file);
+ 
+   if (inc_insn.form == FORM_POST_ADD)
+     {
+       /* Make sure that there is no insn that assigns to inc_insn.res
+ 	 between the mem_insn and the inc_insn.  */
+       rtx_insn *other_insn = get_next_ref (REGNO (inc_insn.reg_res),
+ 					   BLOCK_FOR_INSN (mem_insn.insn),
+ 					   reg_next_def);
+       if (other_insn != inc_insn.insn)
+ 	{
+ 	  if (dump_file)
+ 	    fprintf (dump_file,
+ 		     "result of add is assigned to between mem and inc insns.\n");
+ 	  return false;
+ 	}
+ 
+       other_insn = get_next_ref (REGNO (inc_insn.reg_res),
+ 				 BLOCK_FOR_INSN (mem_insn.insn),
+ 				 reg_next_use);
+       if (other_insn
+ 	  && (other_insn != inc_insn.insn)
+ 	  && (DF_INSN_LUID (inc_insn.insn) > DF_INSN_LUID (other_insn)))
+ 	{
+ 	  if (dump_file)
+ 	    fprintf (dump_file,
+ 		     "result of add is used between mem and inc insns.\n");
+ 	  return false;
+ 	}
+ 
+       /* For the post_add to work, the result_reg of the inc must not be
+ 	 used in the mem insn since this will become the new index
+ 	 register.  */
+       if (reg_overlap_mentioned_p (inc_insn.reg_res, PATTERN (mem_insn.insn)))
+ 	{
+ 	  if (dump_file)
+ 	    fprintf (dump_file, "base reg replacement failure.\n");
+ 	  return false;
+ 	}
+     }
+ 
+   if (mem_insn.reg1_is_const)
+     {
+       if (mem_insn.reg1_val == 0)
+ 	{
+ 	  if (!inc_insn.reg1_is_const)
+ 	    {
+ 	      /* The mem looks like *r0 and the rhs of the add has two
+ 		 registers.  */
+ 	      int luid = DF_INSN_LUID (inc_insn.insn);
+ 	      if (inc_insn.form == FORM_POST_ADD)
+ 		{
+ 		  /* The trick is that we are not going to increment r0,
+ 		     we are going to increment the result of the add insn.
+ 		     For this trick to be correct, the result reg of
+ 		     the inc must be a valid addressing reg.  */
+ 		  addr_space_t as = MEM_ADDR_SPACE (*mem_insn.mem_loc);
+ 		  if (GET_MODE (inc_insn.reg_res)
+ 		      != targetm.addr_space.address_mode (as))
+ 		    {
+ 		      if (dump_file)
+ 			fprintf (dump_file, "base reg mode failure.\n");
+ 		      return false;
+ 		    }
+ 
+ 		  /* We also need to make sure that the next use of
+ 		     inc result is after the inc.  */
+ 		  other_insn
+ 		    = get_next_ref (REGNO (inc_insn.reg1), bb, reg_next_use);
+ 		  if (other_insn && luid > DF_INSN_LUID (other_insn))
+ 		    return false;
+ 
+ 		  if (!rtx_equal_p (mem_insn.reg0, inc_insn.reg0))
+ 		    std::swap (inc_insn.reg0, inc_insn.reg1);
+ 		}
+ 
+ 	      other_insn
+ 		= get_next_ref (REGNO (inc_insn.reg1), bb, reg_next_def);
+ 	      if (other_insn && luid > DF_INSN_LUID (other_insn))
+ 		return false;
+ 	    }
+ 	}
+       /* Both the inc/add and the mem have a constant.  Need to check
+ 	 that the constants are ok. */
+       else if ((mem_insn.reg1_val != inc_insn.reg1_val)
+ 	       && (mem_insn.reg1_val != -inc_insn.reg1_val))
+ 	return false;
+     }
+   else
+     {
+       /* The mem insn is of the form *(a + b) where a and b are both
+ 	 regs.  It may be that in order to match the add or inc we
+ 	 need to treat it as if it was *(b + a).  It may also be that
+ 	 the add is of the form a + c where c does not match b and
+ 	 then we just abandon this.  */
+ 
+       int luid = DF_INSN_LUID (inc_insn.insn);
+       rtx_insn *other_insn;
+ 
+       /* Make sure this reg appears only once in this insn.  */
+       if (count_occurrences (PATTERN (mem_insn.insn), mem_insn.reg1, 1) != 1)
+ 	return false;
+ 
+       if (inc_insn.form == FORM_POST_ADD)
+ 	{
+ 	  /* For this trick to be correct, the result reg of the inc
+ 	     must be a valid addressing reg.  */
+ 	  addr_space_t as = MEM_ADDR_SPACE (*mem_insn.mem_loc);
+ 	  if (GET_MODE (inc_insn.reg_res)
+ 	      != targetm.addr_space.address_mode (as))
+ 	    {
+ 	      if (dump_file)
+ 		fprintf (dump_file, "base reg mode failure.\n");
+ 	      return false;
+ 	    }
+ 
+ 	  if (rtx_equal_p (mem_insn.reg0, inc_insn.reg0))
+ 	    {
+ 	      if (!rtx_equal_p (mem_insn.reg1, inc_insn.reg1))
+ 		{
+ 		  /* See comment above on find_inc (false) call.  */
+ 		  if (first_try)
+ 		    {
+ 		      std::swap (mem_insn.reg0, mem_insn.reg1);
+ 		      return find_inc (false);
+ 		    }
+ 		  else
+ 		    return false;
+ 		}
+ 
+ 	      /* Need to check that there are no assignments to b
+ 		 before the add insn.  */
+ 	      other_insn
+ 		= get_next_ref (REGNO (inc_insn.reg1), bb, reg_next_def);
+ 	      if (other_insn && luid > DF_INSN_LUID (other_insn))
+ 		return false;
+ 	      /* All ok for the next step.  */
+ 	    }
+ 	  else
+ 	    {
+ 	      /* We know that mem_insn.reg0 must equal inc_insn.reg1
+ 		 or else we would not have found the inc insn.  */
+ 	      std::swap (mem_insn.reg0, mem_insn.reg1);
+ 	      if (!rtx_equal_p (mem_insn.reg0, inc_insn.reg0))
+ 		{
+ 		  /* See comment above on find_inc (false) call.  */
+ 		  if (first_try)
+ 		    return find_inc (false);
+ 		  else
+ 		    return false;
+ 		}
+ 	      /* To have gotten here know that.
+ 	       *(b + a)
+ 
+ 	       ... = (b + a)
+ 
+ 	       We also know that the lhs of the inc is not b or a.  We
+ 	       need to make sure that there are no assignments to b
+ 	       between the mem ref and the inc.  */
+ 
+ 	      other_insn
+ 		= get_next_ref (REGNO (inc_insn.reg0), bb, reg_next_def);
+ 	      if (other_insn && luid > DF_INSN_LUID (other_insn))
+ 		return false;
+ 	    }
+ 
+ 	  /* Need to check that the next use of the add result is later than
+ 	     add insn since this will be the reg incremented.  */
+ 	  other_insn
+ 	    = get_next_ref (REGNO (inc_insn.reg_res), bb, reg_next_use);
+ 	  if (other_insn && luid > DF_INSN_LUID (other_insn))
+ 	    return false;
+ 	}
+       else /* FORM_POST_INC.  There is less to check here because we
+ 	      know that operands must line up.  */
+ 	{
+ 	  if (!rtx_equal_p (mem_insn.reg1, inc_insn.reg1))
+ 	    /* See comment above on find_inc (false) call.  */
+ 	    {
+ 	      if (first_try)
+ 		{
+ 		  std::swap (mem_insn.reg0, mem_insn.reg1);
+ 		  return find_inc (false);
+ 		}
+ 	      else
+ 		return false;
+ 	    }
+ 
+ 	  /* To have gotten here know that.
+ 	   *(a + b)
+ 
+ 	   ... = (a + b)
+ 
+ 	   We also know that the lhs of the inc is not b.  We need to make
+ 	   sure that there are no assignments to b between the mem ref and
+ 	   the inc.  */
+ 	  other_insn
+ 	    = get_next_ref (REGNO (inc_insn.reg1), bb, reg_next_def);
+ 	  if (other_insn && luid > DF_INSN_LUID (other_insn))
+ 	    return false;
+ 	}
+     }
+ 
+   if (inc_insn.form == FORM_POST_INC)
+     {
+       other_insn
+ 	= get_next_ref (REGNO (inc_insn.reg0), bb, reg_next_use);
+       /* When we found inc_insn, we were looking for the
+ 	 next add or inc, not the next insn that used the
+ 	 reg.  Because we are going to increment the reg
+ 	 in this form, we need to make sure that there
+ 	 were no intervening uses of reg.  */
+       if (inc_insn.insn != other_insn)
+ 	return false;
+     }
+ 
+   return try_merge ();
+ }
+ 
+ 
+ /* A recursive function that walks ADDRESS_OF_X to find all of the mem
+    uses in pat that could be used as an auto inc or dec.  It then
+    calls FIND_INC for each one.  */
+ 
+ static bool
+ find_mem (rtx *address_of_x)
+ {
+   rtx x = *address_of_x;
+   enum rtx_code code = GET_CODE (x);
+   const char *const fmt = GET_RTX_FORMAT (code);
+   int i;
+ 
+   if (code == MEM && REG_P (XEXP (x, 0)))
+     {
+       /* Match with *reg0.  */
+       mem_insn.mem_loc = address_of_x;
+       mem_insn.reg0 = XEXP (x, 0);
+       mem_insn.reg1_is_const = true;
+       mem_insn.reg1_val = 0;
+       mem_insn.reg1 = GEN_INT (0);
+       if (find_inc (true))
+ 	return true;
+     }
+   if (code == MEM && GET_CODE (XEXP (x, 0)) == PLUS
+       && REG_P (XEXP (XEXP (x, 0), 0)))
+     {
+       rtx reg1 = XEXP (XEXP (x, 0), 1);
+       mem_insn.mem_loc = address_of_x;
+       mem_insn.reg0 = XEXP (XEXP (x, 0), 0);
+       mem_insn.reg1 = reg1;
+       if (CONST_INT_P (reg1))
+ 	{
+ 	  mem_insn.reg1_is_const = true;
+ 	  /* Match with *(reg0 + c) where c is a const. */
+ 	  mem_insn.reg1_val = INTVAL (reg1);
+ 	  if (find_inc (true))
+ 	    return true;
+ 	}
+       else if (REG_P (reg1))
+ 	{
+ 	  /* Match with *(reg0 + reg1).  */
+ 	  mem_insn.reg1_is_const = false;
+ 	  if (find_inc (true))
+ 	    return true;
+ 	}
+     }
+ 
+   if (code == SIGN_EXTRACT || code == ZERO_EXTRACT)
+     {
+       /* If REG occurs inside a MEM used in a bit-field reference,
+ 	 that is unacceptable.  */
+       return false;
+     }
+ 
+   /* Time for some deep diving.  */
+   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
+     {
+       if (fmt[i] == 'e')
+ 	{
+ 	  if (find_mem (&XEXP (x, i)))
+ 	    return true;
+ 	}
+       else if (fmt[i] == 'E')
+ 	{
+ 	  int j;
+ 	  for (j = XVECLEN (x, i) - 1; j >= 0; j--)
+ 	    if (find_mem (&XVECEXP (x, i, j)))
+ 	      return true;
+ 	}
+     }
+   return false;
+ }
+ 
+ 
+ /* Try to combine all incs and decs by constant values with memory
+    references in BB.  */
+ 
+ static void
+ merge_in_block (int max_reg, basic_block bb)
+ {
+   rtx_insn *insn;
+   rtx_insn *curr;
+   int success_in_block = 0;
+ 
+   if (dump_file)
+     fprintf (dump_file, "\n\nstarting bb %d\n", bb->index);
+ 
+   FOR_BB_INSNS_REVERSE_SAFE (bb, insn, curr)
+     {
+       bool insn_is_add_or_inc = true;
+ 
+       if (!NONDEBUG_INSN_P (insn))
+ 	{
+ 	  if (DEBUG_BIND_INSN_P (insn))
+ 	    {
+ 	      df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
+ 	      df_ref use;
+ 
+ 	      if (dump_file)
+ 		dump_insn_slim (dump_file, insn);
+ 
+ 	      FOR_EACH_INSN_INFO_USE (use, insn_info)
+ 		reg_next_debug_use[DF_REF_REGNO (use)] = insn;
+ 	    }
+ 	  continue;
+ 	}
+ 
+       /* Reload should handle auto-inc within a jump correctly, while LRA
+ 	 is known to have issues with autoinc.  */
+       if (JUMP_P (insn) && targetm.lra_p ())
+ 	continue;
+ 
+       if (dump_file)
+ 	dump_insn_slim (dump_file, insn);
+ 
+       /* Does this instruction increment or decrement a register?  */
+       if (parse_add_or_inc (insn, true))
+ 	{
+ 	  int regno = REGNO (inc_insn.reg_res);
+ 	  /* Cannot handle case where there are three separate regs
+ 	     before a mem ref.  Too many moves would be needed to be
+ 	     profitable.  */
+ 	  if ((inc_insn.form == FORM_PRE_INC) || inc_insn.reg1_is_const)
+ 	    {
+ 	      mem_insn.insn = get_next_ref (regno, bb, reg_next_use);
+ 	      if (mem_insn.insn)
+ 		{
+ 		  bool ok = true;
+ 		  if (!inc_insn.reg1_is_const)
+ 		    {
+ 		      /* We are only here if we are going to try a
+ 			 HAVE_*_MODIFY_REG type transformation.  c is a
+ 			 reg and we must sure that the path from the
+ 			 inc_insn to the mem_insn.insn is both def and use
+ 			 clear of c because the inc insn is going to move
+ 			 into the mem_insn.insn.  */
+ 		      int luid = DF_INSN_LUID (mem_insn.insn);
+ 		      rtx_insn *other_insn
+ 			= get_next_ref (REGNO (inc_insn.reg1), bb, reg_next_use);
+ 
+ 		      if (other_insn && luid > DF_INSN_LUID (other_insn))
+ 			ok = false;
+ 
+ 		      other_insn
+ 			= get_next_ref (REGNO (inc_insn.reg1), bb, reg_next_def);
+ 
+ 		      if (other_insn && luid > DF_INSN_LUID (other_insn))
+ 			ok = false;
+ 		    }
+ 
+ 		  if (dump_file)
+ 		    dump_inc_insn (dump_file);
+ 
+ 		  if (ok && find_address (&PATTERN (mem_insn.insn),
+ 					  inc_insn.reg_res) == -1)
+ 		    {
+ 		      if (dump_file)
+ 			dump_mem_insn (dump_file);
+ 		      if (try_merge ())
+ 			{
+ 			  success_in_block++;
+ 			  insn_is_add_or_inc = false;
+ 			}
+ 		    }
+ 		}
+ 
+ 	      if (insn_is_add_or_inc
+ 		  /* find_address will only recognize an address
+ 		     with a reg0 that's not reg_res when
+ 		     reg1_is_const, so cut it off early if we
+ 		     already know it won't match.  */
+ 		  && inc_insn.reg1_is_const
+ 		  && inc_insn.reg0
+ 		  && inc_insn.reg0 != inc_insn.reg_res)
+ 		{
+ 		  /* If we identified an inc_insn that uses two
+ 		     different pseudos, it's of the form
+ 
+ 		     (set reg_res (plus reg0 reg1))
+ 
+ 		     where reg1 is a constant (*).
+ 
+ 		     The next use of reg_res was not identified by
+ 		     find_address as a mem_insn that we could turn
+ 		     into auto-inc, so see if we find a suitable
+ 		     MEM in the next use of reg0, as long as it's
+ 		     before any subsequent use of reg_res:
+ 
+ 		     ... (mem (... reg0 ...)) ...
+ 
+ 		     ... reg_res ...
+ 
+ 		     In this case, we can turn the plus into a
+ 		     copy, and the reg0 in the MEM address into a
+ 		     post_inc of reg_res:
+ 
+ 		     (set reg_res reg0)
+ 
+ 		     ... (mem (... (post_add reg_res reg1) ...)) ...
+ 
+ 		     reg_res will then have the correct value at
+ 		     subsequent uses, and reg0 will remain
+ 		     unchanged.
+ 
+ 		     (*) We could support non-const reg1, but then
+ 		     we'd have to check that reg1 remains
+ 		     unchanged all the way to the modified MEM,
+ 		     and we'd have to extend find_address to
+ 		     represent a non-const negated reg1.  */
+ 		  regno = REGNO (inc_insn.reg0);
+ 		  rtx_insn *reg0_use = get_next_ref (regno, bb,
+ 						     reg_next_use);
+ 
+ 		  /* Give up if the next use of reg0 is after the next
+ 		     use of reg_res (same insn is ok; we might have
+ 		     found a MEM with reg_res before, and that failed,
+ 		     but now we try reg0, which might work), or defs
+ 		     of reg_res (same insn is not ok, we'd introduce
+ 		     another def in the same insn) or reg0.  */
+ 		  if (reg0_use)
+ 		    {
+ 		      int luid = DF_INSN_LUID (reg0_use);
+ 
+ 		      /* It might seem pointless to introduce an
+ 			 auto-inc if there's no subsequent use of
+ 			 reg_res (i.e., mem_insn.insn == NULL), but
+ 			 the next use might be in the next iteration
+ 			 of a loop, and it won't hurt if we make the
+ 			 change even if it's not needed.  */
+ 		      if (mem_insn.insn
+ 			  && luid > DF_INSN_LUID (mem_insn.insn))
+ 			reg0_use = NULL;
+ 
+ 		      rtx_insn *other_insn
+ 			= get_next_ref (REGNO (inc_insn.reg_res), bb,
+ 					reg_next_def);
+ 
+ 		      if (other_insn && luid >= DF_INSN_LUID (other_insn))
+ 			reg0_use = NULL;
+ 
+ 		      other_insn
+ 			= get_next_ref (REGNO (inc_insn.reg0), bb,
+ 					reg_next_def);
+ 
+ 		      if (other_insn && luid > DF_INSN_LUID (other_insn))
+ 			reg0_use = NULL;
+ 		    }
+ 
+ 		  mem_insn.insn = reg0_use;
+ 
+ 		  if (mem_insn.insn
+ 		      && find_address (&PATTERN (mem_insn.insn),
+ 				       inc_insn.reg0) == -1)
+ 		    {
+ 		      if (dump_file)
+ 			dump_mem_insn (dump_file);
+ 		      if (try_merge ())
+ 			{
+ 			  success_in_block++;
+ 			  insn_is_add_or_inc = false;
+ 			}
+ 		    }
+ 		}
+ 	    }
+ 	}
+       else
+ 	{
+ 	  insn_is_add_or_inc = false;
+ 	  /* We can't use auto inc/dec for bare USEs and CLOBBERs,
+ 	     since they aren't supposed to generate any code.  */
+ 	  rtx_code code = GET_CODE (PATTERN (insn));
+ 	  if (code != USE && code != CLOBBER)
+ 	    {
+ 	      mem_insn.insn = insn;
+ 	      if (find_mem (&PATTERN (insn)))
+ 		success_in_block++;
+ 	    }
+ 	}
+ 
+       /* If the inc insn was merged with a mem, the inc insn is gone
+ 	 and there is noting to update.  */
+       if (df_insn_info *insn_info = DF_INSN_INFO_GET (insn))
+ 	{
+ 	  df_ref def, use;
+ 
+ 	  /* Need to update next use.  */
+ 	  FOR_EACH_INSN_INFO_DEF (def, insn_info)
+ 	    {
+ 	      if (reg_next_debug_use)
+ 		reg_next_debug_use[DF_REF_REGNO (def)] = NULL;
+ 	      reg_next_use[DF_REF_REGNO (def)] = NULL;
+ 	      reg_next_inc_use[DF_REF_REGNO (def)] = NULL;
+ 	      reg_next_def[DF_REF_REGNO (def)] = insn;
+ 	    }
+ 
+ 	  FOR_EACH_INSN_INFO_USE (use, insn_info)
+ 	    {
+ 	      if (reg_next_debug_use)
+ 		/* This may seem surprising, but we know we may only
+ 		   modify the value of a REG between an insn and the
+ 		   next nondebug use thereof.  Any debug uses after
+ 		   the next nondebug use can be left alone, the REG
+ 		   will hold the expected value there.  */
+ 		reg_next_debug_use[DF_REF_REGNO (use)] = NULL;
+ 	      reg_next_use[DF_REF_REGNO (use)] = insn;
+ 	      if (insn_is_add_or_inc)
+ 		reg_next_inc_use[DF_REF_REGNO (use)] = insn;
+ 	      else
+ 		reg_next_inc_use[DF_REF_REGNO (use)] = NULL;
+ 	    }
+ 	}
+       else if (dump_file)
+ 	fprintf (dump_file, "skipping update of deleted insn %d\n",
+ 		 INSN_UID (insn));
+     }
+ 
+   /* If we were successful, try again.  There may have been several
+      opportunities that were interleaved.  This is rare but
+      gcc.c-torture/compile/pr17273.c actually exhibits this.  */
+   if (success_in_block)
+     {
+       /* In this case, we must clear these vectors since the trick of
+ 	 testing if the stale insn in the block will not work.  */
+       if (reg_next_debug_use)
+ 	memset (reg_next_debug_use, 0, max_reg * sizeof (rtx));
+       memset (reg_next_use, 0, max_reg * sizeof (rtx));
+       memset (reg_next_inc_use, 0, max_reg * sizeof (rtx));
+       memset (reg_next_def, 0, max_reg * sizeof (rtx));
+       df_recompute_luids (bb);
+       merge_in_block (max_reg, bb);
+     }
+ }
+ 
+ /* Discover auto-inc auto-dec instructions.  */
+ 
+ namespace {
+ 
+ const pass_data pass_data_inc_dec =
+ {
+   RTL_PASS, /* type */
+   "auto_inc_dec", /* name */
+   OPTGROUP_NONE, /* optinfo_flags */
+   TV_AUTO_INC_DEC, /* tv_id */
+   0, /* properties_required */
+   0, /* properties_provided */
+   0, /* properties_destroyed */
+   0, /* todo_flags_start */
+   TODO_df_finish, /* todo_flags_finish */
+ };
+ 
+ class pass_inc_dec : public rtl_opt_pass
+ {
+ public:
+   pass_inc_dec (gcc::context *ctxt)
+     : rtl_opt_pass (pass_data_inc_dec, ctxt)
+   {}
+ 
+   /* opt_pass methods: */
+   virtual bool gate (function *)
+     {
+       if (!AUTO_INC_DEC)
+ 	return false;
+ 
+       return (optimize > 0 && flag_auto_inc_dec);
+     }
+ 
+ 
+   unsigned int execute (function *);
+ 
+ }; // class pass_inc_dec
+ 
+ unsigned int
+ pass_inc_dec::execute (function *fun ATTRIBUTE_UNUSED)
+ {
+   if (!AUTO_INC_DEC)
+     return 0;
+ 
+   basic_block bb;
+   int max_reg = max_reg_num ();
+ 
+   if (!initialized)
+     init_decision_table ();
+ 
+   mem_tmp = gen_rtx_MEM (Pmode, NULL_RTX);
+ 
+   df_note_add_problem ();
+   df_analyze ();
+ 
+   if (MAY_HAVE_DEBUG_BIND_INSNS)
+     reg_next_debug_use = XCNEWVEC (rtx_insn *, max_reg);
+   else
+     /* An earlier function may have had debug binds.  */
+     reg_next_debug_use = NULL;
+   reg_next_use = XCNEWVEC (rtx_insn *, max_reg);
+   reg_next_inc_use = XCNEWVEC (rtx_insn *, max_reg);
+   reg_next_def = XCNEWVEC (rtx_insn *, max_reg);
+   FOR_EACH_BB_FN (bb, fun)
+     merge_in_block (max_reg, bb);
+ 
+   free (reg_next_debug_use);
+   free (reg_next_use);
+   free (reg_next_inc_use);
+   free (reg_next_def);
+ 
+   mem_tmp = NULL;
+ 
+   return 0;
+ }
+ 
+ } // anon namespace
+ 
+ rtl_opt_pass *
+ make_pass_inc_dec (gcc::context *ctxt)
+ {
+   return new pass_inc_dec (ctxt);
+ }
diff -Nrcpad gcc-11.3.0/gcc/auto-profile.c gcc-12.1.0/gcc/auto-profile.c
*** gcc-11.3.0/gcc/auto-profile.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/auto-profile.c	Thu Jan  1 00:00:00 1970
***************
*** 1,1750 ****
- /* Read and annotate call graph profile from the auto profile data file.
-    Copyright (C) 2014-2021 Free Software Foundation, Inc.
-    Contributed by Dehao Chen (dehao@google.com)
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "config.h"
- #define INCLUDE_MAP
- #define INCLUDE_SET
- #include "system.h"
- #include "coretypes.h"
- #include "backend.h"
- #include "tree.h"
- #include "gimple.h"
- #include "predict.h"
- #include "alloc-pool.h"
- #include "tree-pass.h"
- #include "ssa.h"
- #include "cgraph.h"
- #include "gcov-io.h"
- #include "diagnostic-core.h"
- #include "profile.h"
- #include "langhooks.h"
- #include "cfgloop.h"
- #include "tree-cfg.h"
- #include "tree-cfgcleanup.h"
- #include "tree-into-ssa.h"
- #include "gimple-iterator.h"
- #include "value-prof.h"
- #include "symbol-summary.h"
- #include "ipa-prop.h"
- #include "ipa-fnsummary.h"
- #include "ipa-inline.h"
- #include "tree-inline.h"
- #include "auto-profile.h"
- #include "tree-pretty-print.h"
- #include "gimple-pretty-print.h"
- 
- /* The following routines implements AutoFDO optimization.
- 
-    This optimization uses sampling profiles to annotate basic block counts
-    and uses heuristics to estimate branch probabilities.
- 
-    There are three phases in AutoFDO:
- 
-    Phase 1: Read profile from the profile data file.
-      The following info is read from the profile datafile:
-         * string_table: a map between function name and its index.
-         * autofdo_source_profile: a map from function_instance name to
-           function_instance. This is represented as a forest of
-           function_instances.
-         * WorkingSet: a histogram of how many instructions are covered for a
-           given percentage of total cycles. This is describing the binary
-           level information (not source level). This info is used to help
-           decide if we want aggressive optimizations that could increase
-           code footprint (e.g. loop unroll etc.)
-      A function instance is an instance of function that could either be a
-      standalone symbol, or a clone of a function that is inlined into another
-      function.
- 
-    Phase 2: Early inline + value profile transformation.
-      Early inline uses autofdo_source_profile to find if a callsite is:
-         * inlined in the profiled binary.
-         * callee body is hot in the profiling run.
-      If both condition satisfies, early inline will inline the callsite
-      regardless of the code growth.
-      Phase 2 is an iterative process. During each iteration, we also check
-      if an indirect callsite is promoted and inlined in the profiling run.
-      If yes, vpt will happen to force promote it and in the next iteration,
-      einline will inline the promoted callsite in the next iteration.
- 
-    Phase 3: Annotate control flow graph.
-      AutoFDO uses a separate pass to:
-         * Annotate basic block count
-         * Estimate branch probability
- 
-    After the above 3 phases, all profile is readily annotated on the GCC IR.
-    AutoFDO tries to reuse all FDO infrastructure as much as possible to make
-    use of the profile. E.g. it uses existing mechanism to calculate the basic
-    block/edge frequency, as well as the cgraph node/edge count.
- */
- 
- #define DEFAULT_AUTO_PROFILE_FILE "fbdata.afdo"
- #define AUTO_PROFILE_VERSION 1
- 
- namespace autofdo
- {
- 
- /* Intermediate edge info used when propagating AutoFDO profile information.
-    We can't edge->count() directly since it's computed from edge's probability
-    while probability is yet not decided during propagation.  */
- #define AFDO_EINFO(e)                     ((class edge_info *) e->aux)
- class edge_info
- {
- public:
-   edge_info () : count_ (profile_count::zero ().afdo ()), annotated_ (false) {}
-   bool is_annotated () const { return annotated_; }
-   void set_annotated () { annotated_ = true; }
-   profile_count get_count () const { return count_; }
-   void set_count (profile_count count) { count_ = count; }
- private:
-   profile_count count_;
-   bool annotated_;
- };
- 
- /* Represent a source location: (function_decl, lineno).  */
- typedef std::pair<tree, unsigned> decl_lineno;
- 
- /* Represent an inline stack. vector[0] is the leaf node.  */
- typedef auto_vec<decl_lineno> inline_stack;
- 
- /* String array that stores function names.  */
- typedef auto_vec<char *> string_vector;
- 
- /* Map from function name's index in string_table to target's
-    execution count.  */
- typedef std::map<unsigned, gcov_type> icall_target_map;
- 
- /* Set of gimple stmts. Used to track if the stmt has already been promoted
-    to direct call.  */
- typedef std::set<gimple *> stmt_set;
- 
- /* Represent count info of an inline stack.  */
- class count_info
- {
- public:
-   /* Sampled count of the inline stack.  */
-   gcov_type count;
- 
-   /* Map from indirect call target to its sample count.  */
-   icall_target_map targets;
- 
-   /* Whether this inline stack is already used in annotation.
- 
-      Each inline stack should only be used to annotate IR once.
-      This will be enforced when instruction-level discriminator
-      is supported.  */
-   bool annotated;
- };
- 
- /* operator< for "const char *".  */
- struct string_compare
- {
-   bool operator()(const char *a, const char *b) const
-   {
-     return strcmp (a, b) < 0;
-   }
- };
- 
- /* Store a string array, indexed by string position in the array.  */
- class string_table
- {
- public:
-   string_table ()
-   {}
- 
-   ~string_table ();
- 
-   /* For a given string, returns its index.  */
-   int get_index (const char *name) const;
- 
-   /* For a given decl, returns the index of the decl name.  */
-   int get_index_by_decl (tree decl) const;
- 
-   /* For a given index, returns the string.  */
-   const char *get_name (int index) const;
- 
-   /* Read profile, return TRUE on success.  */
-   bool read ();
- 
- private:
-   typedef std::map<const char *, unsigned, string_compare> string_index_map;
-   string_vector vector_;
-   string_index_map map_;
- };
- 
- /* Profile of a function instance:
-      1. total_count of the function.
-      2. head_count (entry basic block count) of the function (only valid when
-         function is a top-level function_instance, i.e. it is the original copy
-         instead of the inlined copy).
-      3. map from source location (decl_lineno) to profile (count_info).
-      4. map from callsite to callee function_instance.  */
- class function_instance
- {
- public:
-   typedef auto_vec<function_instance *> function_instance_stack;
- 
-   /* Read the profile and return a function_instance with head count as
-      HEAD_COUNT. Recursively read callsites to create nested function_instances
-      too. STACK is used to track the recursive creation process.  */
-   static function_instance *
-   read_function_instance (function_instance_stack *stack,
-                           gcov_type head_count);
- 
-   /* Recursively deallocate all callsites (nested function_instances).  */
-   ~function_instance ();
- 
-   /* Accessors.  */
-   int
-   name () const
-   {
-     return name_;
-   }
-   gcov_type
-   total_count () const
-   {
-     return total_count_;
-   }
-   gcov_type
-   head_count () const
-   {
-     return head_count_;
-   }
- 
-   /* Traverse callsites of the current function_instance to find one at the
-      location of LINENO and callee name represented in DECL.  */
-   function_instance *get_function_instance_by_decl (unsigned lineno,
-                                                     tree decl) const;
- 
-   /* Store the profile info for LOC in INFO. Return TRUE if profile info
-      is found.  */
-   bool get_count_info (location_t loc, count_info *info) const;
- 
-   /* Read the inlined indirect call target profile for STMT and store it in
-      MAP, return the total count for all inlined indirect calls.  */
-   gcov_type find_icall_target_map (gcall *stmt, icall_target_map *map) const;
- 
-   /* Sum of counts that is used during annotation.  */
-   gcov_type total_annotated_count () const;
- 
-   /* Mark LOC as annotated.  */
-   void mark_annotated (location_t loc);
- 
- private:
-   /* Callsite, represented as (decl_lineno, callee_function_name_index).  */
-   typedef std::pair<unsigned, unsigned> callsite;
- 
-   /* Map from callsite to callee function_instance.  */
-   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)
-   {
-   }
- 
-   /* Map from source location (decl_lineno) to profile (count_info).  */
-   typedef std::map<unsigned, count_info> position_count_map;
- 
-   /* function_instance name index in the string_table.  */
-   unsigned name_;
- 
-   /* Total sample count.  */
-   gcov_type total_count_;
- 
-   /* Entry BB's sample count.  */
-   gcov_type head_count_;
- 
-   /* Map from callsite location to callee function_instance.  */
-   callsite_map callsites;
- 
-   /* Map from source location to count_info.  */
-   position_count_map pos_counts;
- };
- 
- /* Profile for all functions.  */
- class autofdo_source_profile
- {
- public:
-   static autofdo_source_profile *
-   create ()
-   {
-     autofdo_source_profile *map = new autofdo_source_profile ();
- 
-     if (map->read ())
-       return map;
-     delete map;
-     return NULL;
-   }
- 
-   ~autofdo_source_profile ();
- 
-   /* For a given DECL, returns the top-level function_instance.  */
-   function_instance *get_function_instance_by_decl (tree decl) const;
- 
-   /* Find count_info for a given gimple STMT. If found, store the count_info
-      in INFO and return true; otherwise return false.  */
-   bool get_count_info (gimple *stmt, count_info *info) const;
- 
-   /* Find total count of the callee of EDGE.  */
-   gcov_type get_callsite_total_count (struct cgraph_edge *edge) const;
- 
-   /* Update value profile INFO for STMT from the inlined indirect callsite.
-      Return true if INFO is updated.  */
-   bool update_inlined_ind_target (gcall *stmt, count_info *info);
- 
-   /* Mark LOC as annotated.  */
-   void mark_annotated (location_t loc);
- 
- private:
-   /* Map from function_instance name index (in string_table) to
-      function_instance.  */
-   typedef std::map<unsigned, function_instance *> name_function_instance_map;
- 
-   autofdo_source_profile () {}
- 
-   /* Read AutoFDO profile and returns TRUE on success.  */
-   bool read ();
- 
-   /* Return the function_instance in the profile that correspond to the
-      inline STACK.  */
-   function_instance *
-   get_function_instance_by_inline_stack (const inline_stack &stack) const;
- 
-   name_function_instance_map map_;
- };
- 
- /* Store the strings read from the profile data file.  */
- static string_table *afdo_string_table;
- 
- /* Store the AutoFDO source profile.  */
- static autofdo_source_profile *afdo_source_profile;
- 
- /* gcov_summary structure to store the profile_info.  */
- static gcov_summary *afdo_profile_info;
- 
- /* Helper functions.  */
- 
- /* Return the original name of NAME: strip the suffix that starts
-    with '.' Caller is responsible for freeing RET.  */
- 
- static char *
- get_original_name (const char *name)
- {
-   char *ret = xstrdup (name);
-   char *find = strchr (ret, '.');
-   if (find != NULL)
-     *find = 0;
-   return ret;
- }
- 
- /* Return the combined location, which is a 32bit integer in which
-    higher 16 bits stores the line offset of LOC to the start lineno
-    of DECL, The lower 16 bits stores the discriminator.  */
- 
- static unsigned
- get_combined_location (location_t loc, tree decl)
- {
-   /* 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);
- }
- 
- /* Return the function decl of a given lexical BLOCK.  */
- 
- static tree
- get_function_decl_from_block (tree block)
- {
-   if (!inlined_function_outer_scope_p (block))
-     return NULL_TREE;
- 
-   return BLOCK_ABSTRACT_ORIGIN (block);
- }
- 
- /* Store inline stack for STMT in STACK.  */
- 
- static void
- get_inline_stack (location_t locus, inline_stack *stack)
- {
-   if (LOCATION_LOCUS (locus) == UNKNOWN_LOCATION)
-     return;
- 
-   tree block = LOCATION_BLOCK (locus);
-   if (block && TREE_CODE (block) == BLOCK)
-     {
-       int level = 0;
-       for (block = BLOCK_SUPERCONTEXT (block);
-            block && (TREE_CODE (block) == BLOCK);
-            block = BLOCK_SUPERCONTEXT (block))
-         {
-           location_t tmp_locus = BLOCK_SOURCE_LOCATION (block);
-           if (LOCATION_LOCUS (tmp_locus) == UNKNOWN_LOCATION)
-             continue;
- 
-           tree decl = get_function_decl_from_block (block);
-           stack->safe_push (
-               std::make_pair (decl, get_combined_location (locus, decl)));
-           locus = tmp_locus;
-           level++;
-         }
-     }
-   stack->safe_push (
-       std::make_pair (current_function_decl,
-                       get_combined_location (locus, current_function_decl)));
- }
- 
- /* Return STMT's combined location, which is a 32bit integer in which
-    higher 16 bits stores the line offset of LOC to the start lineno
-    of DECL, The lower 16 bits stores the discriminator.  */
- 
- static unsigned
- get_relative_location_for_stmt (gimple *stmt)
- {
-   location_t locus = gimple_location (stmt);
-   if (LOCATION_LOCUS (locus) == UNKNOWN_LOCATION)
-     return UNKNOWN_LOCATION;
- 
-   for (tree block = gimple_block (stmt); block && (TREE_CODE (block) == BLOCK);
-        block = BLOCK_SUPERCONTEXT (block))
-     if (LOCATION_LOCUS (BLOCK_SOURCE_LOCATION (block)) != UNKNOWN_LOCATION)
-       return get_combined_location (locus,
-                                     get_function_decl_from_block (block));
-   return get_combined_location (locus, current_function_decl);
- }
- 
- /* Return true if BB contains indirect call.  */
- 
- static bool
- has_indirect_call (basic_block bb)
- {
-   gimple_stmt_iterator gsi;
- 
-   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
-     {
-       gimple *stmt = gsi_stmt (gsi);
-       if (gimple_code (stmt) == GIMPLE_CALL && !gimple_call_internal_p (stmt)
-           && (gimple_call_fn (stmt) == NULL
-               || TREE_CODE (gimple_call_fn (stmt)) != FUNCTION_DECL))
-         return true;
-     }
-   return false;
- }
- 
- /* Member functions for string_table.  */
- 
- /* Deconstructor.  */
- 
- string_table::~string_table ()
- {
-   for (unsigned i = 0; i < vector_.length (); i++)
-     free (vector_[i]);
- }
- 
- 
- /* Return the index of a given function NAME. Return -1 if NAME is not
-    found in string table.  */
- 
- int
- string_table::get_index (const char *name) const
- {
-   if (name == NULL)
-     return -1;
-   string_index_map::const_iterator iter = map_.find (name);
-   if (iter == map_.end ())
-     return -1;
- 
-   return iter->second;
- }
- 
- /* Return the index of a given function DECL. Return -1 if DECL is not 
-    found in string table.  */
- 
- int
- string_table::get_index_by_decl (tree decl) const
- {
-   char *name
-       = get_original_name (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
-   int ret = get_index (name);
-   free (name);
-   if (ret != -1)
-     return ret;
-   ret = get_index (lang_hooks.dwarf_name (decl, 0));
-   if (ret != -1)
-     return ret;
-   if (DECL_FROM_INLINE (decl))
-     return get_index_by_decl (DECL_ABSTRACT_ORIGIN (decl));
- 
-   return -1;
- }
- 
- /* Return the function name of a given INDEX.  */
- 
- const char *
- string_table::get_name (int index) const
- {
-   gcc_assert (index > 0 && index < (int)vector_.length ());
-   return vector_[index];
- }
- 
- /* Read the string table. Return TRUE if reading is successful.  */
- 
- bool
- string_table::read ()
- {
-   if (gcov_read_unsigned () != GCOV_TAG_AFDO_FILE_NAMES)
-     return false;
-   /* Skip the length of the section.  */
-   gcov_read_unsigned ();
-   /* Read in the file name table.  */
-   unsigned string_num = gcov_read_unsigned ();
-   for (unsigned i = 0; i < string_num; i++)
-     {
-       vector_.safe_push (get_original_name (gcov_read_string ()));
-       map_[vector_.last ()] = i;
-     }
-   return true;
- }
- 
- /* Member functions for function_instance.  */
- 
- function_instance::~function_instance ()
- {
-   for (callsite_map::iterator iter = callsites.begin ();
-        iter != callsites.end (); ++iter)
-     delete iter->second;
- }
- 
- /* Traverse callsites of the current function_instance to find one at the
-    location of LINENO and callee name represented in DECL.  */
- 
- function_instance *
- function_instance::get_function_instance_by_decl (unsigned lineno,
-                                                   tree decl) const
- {
-   int func_name_idx = afdo_string_table->get_index_by_decl (decl);
-   if (func_name_idx != -1)
-     {
-       callsite_map::const_iterator ret
-           = callsites.find (std::make_pair (lineno, func_name_idx));
-       if (ret != callsites.end ())
-         return ret->second;
-     }
-   func_name_idx
-       = afdo_string_table->get_index (lang_hooks.dwarf_name (decl, 0));
-   if (func_name_idx != -1)
-     {
-       callsite_map::const_iterator ret
-           = callsites.find (std::make_pair (lineno, func_name_idx));
-       if (ret != callsites.end ())
-         return ret->second;
-     }
-   if (DECL_FROM_INLINE (decl))
-     return get_function_instance_by_decl (lineno, DECL_ABSTRACT_ORIGIN (decl));
- 
-   return NULL;
- }
- 
- /* Store the profile info for LOC in INFO. Return TRUE if profile info
-    is found.  */
- 
- bool
- function_instance::get_count_info (location_t loc, count_info *info) const
- {
-   position_count_map::const_iterator iter = pos_counts.find (loc);
-   if (iter == pos_counts.end ())
-     return false;
-   *info = iter->second;
-   return true;
- }
- 
- /* Mark LOC as annotated.  */
- 
- void
- function_instance::mark_annotated (location_t loc)
- {
-   position_count_map::iterator iter = pos_counts.find (loc);
-   if (iter == pos_counts.end ())
-     return;
-   iter->second.annotated = true;
- }
- 
- /* Read the inlined indirect call target profile for STMT and store it in
-    MAP, return the total count for all inlined indirect calls.  */
- 
- gcov_type
- function_instance::find_icall_target_map (gcall *stmt,
-                                           icall_target_map *map) const
- {
-   gcov_type ret = 0;
-   unsigned stmt_offset = get_relative_location_for_stmt (stmt);
- 
-   for (callsite_map::const_iterator iter = callsites.begin ();
-        iter != callsites.end (); ++iter)
-     {
-       unsigned callee = iter->second->name ();
-       /* Check if callsite location match the stmt.  */
-       if (iter->first.first != stmt_offset)
-         continue;
-       struct cgraph_node *node = cgraph_node::get_for_asmname (
-           get_identifier (afdo_string_table->get_name (callee)));
-       if (node == NULL)
-         continue;
-       (*map)[callee] = iter->second->total_count ();
-       ret += iter->second->total_count ();
-     }
-   return ret;
- }
- 
- /* Read the profile and create a function_instance with head count as
-    HEAD_COUNT. Recursively read callsites to create nested function_instances
-    too. STACK is used to track the recursive creation process.  */
- 
- /* function instance profile format:
- 
-    ENTRY_COUNT: 8 bytes
-    NAME_INDEX: 4 bytes
-    NUM_POS_COUNTS: 4 bytes
-    NUM_CALLSITES: 4 byte
-    POS_COUNT_1:
-      POS_1_OFFSET: 4 bytes
-      NUM_TARGETS: 4 bytes
-      COUNT: 8 bytes
-      TARGET_1:
-        VALUE_PROFILE_TYPE: 4 bytes
-        TARGET_IDX: 8 bytes
-        COUNT: 8 bytes
-      TARGET_2
-      ...
-      TARGET_n
-    POS_COUNT_2
-    ...
-    POS_COUNT_N
-    CALLSITE_1:
-      CALLSITE_1_OFFSET: 4 bytes
-      FUNCTION_INSTANCE_PROFILE (nested)
-    CALLSITE_2
-    ...
-    CALLSITE_n.  */
- 
- function_instance *
- function_instance::read_function_instance (function_instance_stack *stack,
-                                            gcov_type head_count)
- {
-   unsigned name = gcov_read_unsigned ();
-   unsigned num_pos_counts = gcov_read_unsigned ();
-   unsigned num_callsites = gcov_read_unsigned ();
-   function_instance *s = new function_instance (name, head_count);
-   stack->safe_push (s);
- 
-   for (unsigned i = 0; i < num_pos_counts; i++)
-     {
-       unsigned offset = gcov_read_unsigned () & 0xffff0000;
-       unsigned num_targets = gcov_read_unsigned ();
-       gcov_type count = gcov_read_counter ();
-       s->pos_counts[offset].count = count;
-       for (unsigned j = 0; j < stack->length (); j++)
-         (*stack)[j]->total_count_ += count;
-       for (unsigned j = 0; j < num_targets; j++)
-         {
-           /* Only indirect call target histogram is supported now.  */
-           gcov_read_unsigned ();
-           gcov_type target_idx = gcov_read_counter ();
-           s->pos_counts[offset].targets[target_idx] = gcov_read_counter ();
-         }
-     }
-   for (unsigned i = 0; i < num_callsites; i++)
-     {
-       unsigned offset = gcov_read_unsigned ();
-       function_instance *callee_function_instance
-           = read_function_instance (stack, 0);
-       s->callsites[std::make_pair (offset, callee_function_instance->name ())]
-           = callee_function_instance;
-     }
-   stack->pop ();
-   return s;
- }
- 
- /* Sum of counts that is used during annotation.  */
- 
- gcov_type
- function_instance::total_annotated_count () const
- {
-   gcov_type ret = 0;
-   for (callsite_map::const_iterator iter = callsites.begin ();
-        iter != callsites.end (); ++iter)
-     ret += iter->second->total_annotated_count ();
-   for (position_count_map::const_iterator iter = pos_counts.begin ();
-        iter != pos_counts.end (); ++iter)
-     if (iter->second.annotated)
-       ret += iter->second.count;
-   return ret;
- }
- 
- /* Member functions for autofdo_source_profile.  */
- 
- autofdo_source_profile::~autofdo_source_profile ()
- {
-   for (name_function_instance_map::const_iterator iter = map_.begin ();
-        iter != map_.end (); ++iter)
-     delete iter->second;
- }
- 
- /* For a given DECL, returns the top-level function_instance.  */
- 
- function_instance *
- autofdo_source_profile::get_function_instance_by_decl (tree decl) const
- {
-   int index = afdo_string_table->get_index_by_decl (decl);
-   if (index == -1)
-     return NULL;
-   name_function_instance_map::const_iterator ret = map_.find (index);
-   return ret == map_.end () ? NULL : ret->second;
- }
- 
- /* Find count_info for a given gimple STMT. If found, store the count_info
-    in INFO and return true; otherwise return false.  */
- 
- bool
- autofdo_source_profile::get_count_info (gimple *stmt, count_info *info) const
- {
-   if (LOCATION_LOCUS (gimple_location (stmt)) == cfun->function_end_locus)
-     return false;
- 
-   inline_stack stack;
-   get_inline_stack (gimple_location (stmt), &stack);
-   if (stack.length () == 0)
-     return false;
-   function_instance *s = get_function_instance_by_inline_stack (stack);
-   if (s == NULL)
-     return false;
-   return s->get_count_info (stack[0].second, info);
- }
- 
- /* Mark LOC as annotated.  */
- 
- void
- autofdo_source_profile::mark_annotated (location_t loc)
- {
-   inline_stack stack;
-   get_inline_stack (loc, &stack);
-   if (stack.length () == 0)
-     return;
-   function_instance *s = get_function_instance_by_inline_stack (stack);
-   if (s == NULL)
-     return;
-   s->mark_annotated (stack[0].second);
- }
- 
- /* Update value profile INFO for STMT from the inlined indirect callsite.
-    Return true if INFO is updated.  */
- 
- bool
- autofdo_source_profile::update_inlined_ind_target (gcall *stmt,
-                                                    count_info *info)
- {
-   if (dump_file)
-     {
-       fprintf (dump_file, "Checking indirect call -> direct call ");
-       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
-     }
- 
-   if (LOCATION_LOCUS (gimple_location (stmt)) == cfun->function_end_locus)
-     {
-       if (dump_file)
- 	fprintf (dump_file, " good locus\n");
-       return false;
-     }
- 
-   count_info old_info;
-   get_count_info (stmt, &old_info);
-   gcov_type total = 0;
-   for (icall_target_map::const_iterator iter = old_info.targets.begin ();
-        iter != old_info.targets.end (); ++iter)
-     total += iter->second;
- 
-   /* Program behavior changed, original promoted (and inlined) target is not
-      hot any more. Will avoid promote the original target.
- 
-      To check if original promoted target is still hot, we check the total
-      count of the unpromoted targets (stored in TOTAL). If a callsite count
-      (stored in INFO) is smaller than half of the total count, the original
-      promoted target is considered not hot any more.  */
-   if (info->count < total / 2)
-     {
-       if (dump_file)
- 	fprintf (dump_file, " not hot anymore %ld < %ld",
- 		 (long)info->count,
- 		 (long)total /2);
-       return false;
-     }
- 
-   inline_stack stack;
-   get_inline_stack (gimple_location (stmt), &stack);
-   if (stack.length () == 0)
-     {
-       if (dump_file)
- 	fprintf (dump_file, " no inline stack\n");
-       return false;
-     }
-   function_instance *s = get_function_instance_by_inline_stack (stack);
-   if (s == NULL)
-     {
-       if (dump_file)
- 	fprintf (dump_file, " function not found in inline stack\n");
-       return false;
-     }
-   icall_target_map map;
-   if (s->find_icall_target_map (stmt, &map) == 0)
-     {
-       if (dump_file)
- 	fprintf (dump_file, " no target map\n");
-       return false;
-     }
-   for (icall_target_map::const_iterator iter = map.begin ();
-        iter != map.end (); ++iter)
-     info->targets[iter->first] = iter->second;
-   if (dump_file)
-     fprintf (dump_file, " looks good\n");
-   return true;
- }
- 
- /* Find total count of the callee of EDGE.  */
- 
- gcov_type
- autofdo_source_profile::get_callsite_total_count (
-     struct cgraph_edge *edge) const
- {
-   inline_stack stack;
-   stack.safe_push (std::make_pair (edge->callee->decl, 0));
-   get_inline_stack (gimple_location (edge->call_stmt), &stack);
- 
-   function_instance *s = get_function_instance_by_inline_stack (stack);
-   if (s == NULL
-       || afdo_string_table->get_index (IDENTIFIER_POINTER (
-              DECL_ASSEMBLER_NAME (edge->callee->decl))) != s->name ())
-     return 0;
- 
-   return s->total_count ();
- }
- 
- /* Read AutoFDO profile and returns TRUE on success.  */
- 
- /* source profile format:
- 
-    GCOV_TAG_AFDO_FUNCTION: 4 bytes
-    LENGTH: 4 bytes
-    NUM_FUNCTIONS: 4 bytes
-    FUNCTION_INSTANCE_1
-    FUNCTION_INSTANCE_2
-    ...
-    FUNCTION_INSTANCE_N.  */
- 
- bool
- autofdo_source_profile::read ()
- {
-   if (gcov_read_unsigned () != GCOV_TAG_AFDO_FUNCTION)
-     {
-       inform (UNKNOWN_LOCATION, "Not expected TAG.");
-       return false;
-     }
- 
-   /* Skip the length of the section.  */
-   gcov_read_unsigned ();
- 
-   /* Read in the function/callsite profile, and store it in local
-      data structure.  */
-   unsigned function_num = gcov_read_unsigned ();
-   for (unsigned i = 0; i < function_num; i++)
-     {
-       function_instance::function_instance_stack stack;
-       function_instance *s = function_instance::read_function_instance (
-           &stack, gcov_read_counter ());
-       map_[s->name ()] = s;
-     }
-   return true;
- }
- 
- /* Return the function_instance in the profile that correspond to the
-    inline STACK.  */
- 
- function_instance *
- autofdo_source_profile::get_function_instance_by_inline_stack (
-     const inline_stack &stack) const
- {
-   name_function_instance_map::const_iterator iter = map_.find (
-       afdo_string_table->get_index_by_decl (stack[stack.length () - 1].first));
-   if (iter == map_.end())
-     return NULL;
-   function_instance *s = iter->second;
-   for (unsigned i = stack.length() - 1; i > 0; i--)
-     {
-       s = s->get_function_instance_by_decl (
-           stack[i].second, stack[i - 1].first);
-       if (s == NULL)
-         return NULL;
-     }
-   return s;
- }
- 
- /* Module profile is only used by LIPO. Here we simply ignore it.  */
- 
- static void
- fake_read_autofdo_module_profile ()
- {
-   /* Read in the module info.  */
-   gcov_read_unsigned ();
- 
-   /* Skip the length of the section.  */
-   gcov_read_unsigned ();
- 
-   /* Read in the file name table.  */
-   unsigned total_module_num = gcov_read_unsigned ();
-   gcc_assert (total_module_num == 0);
- }
- 
- /* Read data from profile data file.  */
- 
- static void
- read_profile (void)
- {
-   if (gcov_open (auto_profile_file, 1) == 0)
-     {
-       error ("cannot open profile file %s", auto_profile_file);
-       return;
-     }
- 
-   if (gcov_read_unsigned () != GCOV_DATA_MAGIC)
-     {
-       error ("AutoFDO profile magic number does not match");
-       return;
-     }
- 
-   /* Skip the version number.  */
-   unsigned version = gcov_read_unsigned ();
-   if (version != AUTO_PROFILE_VERSION)
-     {
-       error ("AutoFDO profile version %u does match %u",
- 	     version, AUTO_PROFILE_VERSION);
-       return;
-     }
- 
-   /* Skip the empty integer.  */
-   gcov_read_unsigned ();
- 
-   /* string_table.  */
-   afdo_string_table = new string_table ();
-   if (!afdo_string_table->read())
-     {
-       error ("cannot read string table from %s", auto_profile_file);
-       return;
-     }
- 
-   /* autofdo_source_profile.  */
-   afdo_source_profile = autofdo_source_profile::create ();
-   if (afdo_source_profile == NULL)
-     {
-       error ("cannot read function profile from %s", auto_profile_file);
-       return;
-     }
- 
-   /* autofdo_module_profile.  */
-   fake_read_autofdo_module_profile ();
- }
- 
- /* From AutoFDO profiles, find values inside STMT for that we want to measure
-    histograms for indirect-call optimization.
- 
-    This function is actually served for 2 purposes:
-      * before annotation, we need to mark histogram, promote and inline
-      * after annotation, we just need to mark, and let follow-up logic to
-        decide if it needs to promote and inline.  */
- 
- static void
- afdo_indirect_call (gimple_stmt_iterator *gsi, const icall_target_map &map,
-                     bool transform)
- {
-   gimple *gs = gsi_stmt (*gsi);
-   tree callee;
- 
-   if (map.size () == 0)
-     return;
-   gcall *stmt = dyn_cast <gcall *> (gs);
-   if (!stmt
-       || gimple_call_internal_p (stmt)
-       || gimple_call_fndecl (stmt) != NULL_TREE)
-     return;
- 
-   gcov_type total = 0;
-   icall_target_map::const_iterator max_iter = map.end ();
- 
-   for (icall_target_map::const_iterator iter = map.begin ();
-        iter != map.end (); ++iter)
-     {
-       total += iter->second;
-       if (max_iter == map.end () || max_iter->second < iter->second)
-         max_iter = iter;
-     }
-   struct cgraph_node *direct_call = cgraph_node::get_for_asmname (
-       get_identifier (afdo_string_table->get_name (max_iter->first)));
-   if (direct_call == NULL || !direct_call->profile_id)
-     return;
- 
-   callee = gimple_call_fn (stmt);
- 
-   histogram_value hist = gimple_alloc_histogram_value (
-       cfun, HIST_TYPE_INDIR_CALL, stmt, callee);
-   hist->n_counters = 3;
-   hist->hvalue.counters = XNEWVEC (gcov_type, hist->n_counters);
-   gimple_add_histogram_value (cfun, stmt, hist);
- 
-   hist->hvalue.counters[0] = direct_call->profile_id;
-   hist->hvalue.counters[1] = max_iter->second;
-   hist->hvalue.counters[2] = total;
- 
-   if (!transform)
-     return;
- 
-   struct cgraph_edge *indirect_edge
-       = cgraph_node::get (current_function_decl)->get_edge (stmt);
- 
-   if (dump_file)
-     {
-       fprintf (dump_file, "Indirect call -> direct call ");
-       print_generic_expr (dump_file, callee, TDF_SLIM);
-       fprintf (dump_file, " => ");
-       print_generic_expr (dump_file, direct_call->decl, TDF_SLIM);
-     }
- 
-   if (direct_call == NULL)
-     {
-       if (dump_file)
-         fprintf (dump_file, " not transforming\n");
-       return;
-     }
-   if (DECL_STRUCT_FUNCTION (direct_call->decl) == NULL)
-     {
-       if (dump_file)
-         fprintf (dump_file, " no declaration\n");
-       return;
-     }
- 
-   if (dump_file)
-     {
-       fprintf (dump_file, " transformation on insn ");
-       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
-       fprintf (dump_file, "\n");
-     }
- 
-   /* FIXME: Count should be initialized.  */
-   struct cgraph_edge *new_edge
-       = indirect_edge->make_speculative (direct_call,
- 					 profile_count::uninitialized ());
-   cgraph_edge::redirect_call_stmt_to_callee (new_edge);
-   gimple_remove_histogram_value (cfun, stmt, hist);
-   inline_call (new_edge, true, NULL, NULL, false);
- }
- 
- /* From AutoFDO profiles, find values inside STMT for that we want to measure
-    histograms and adds them to list VALUES.  */
- 
- static void
- afdo_vpt (gimple_stmt_iterator *gsi, const icall_target_map &map,
-           bool transform)
- {
-   afdo_indirect_call (gsi, map, transform);
- }
- 
- typedef std::set<basic_block> bb_set;
- typedef std::set<edge> edge_set;
- 
- static bool
- is_bb_annotated (const basic_block bb, const bb_set &annotated)
- {
-   return annotated.find (bb) != annotated.end ();
- }
- 
- static void
- set_bb_annotated (basic_block bb, bb_set *annotated)
- {
-   annotated->insert (bb);
- }
- 
- /* For a given BB, set its execution count. Attach value profile if a stmt
-    is not in PROMOTED, because we only want to promote an indirect call once.
-    Return TRUE if BB is annotated.  */
- 
- static bool
- afdo_set_bb_count (basic_block bb, const stmt_set &promoted)
- {
-   gimple_stmt_iterator gsi;
-   edge e;
-   edge_iterator ei;
-   gcov_type max_count = 0;
-   bool has_annotated = false;
- 
-   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
-     {
-       count_info info;
-       gimple *stmt = gsi_stmt (gsi);
-       if (gimple_clobber_p (stmt) || is_gimple_debug (stmt))
-         continue;
-       if (afdo_source_profile->get_count_info (stmt, &info))
-         {
-           if (info.count > max_count)
-             max_count = info.count;
-           has_annotated = true;
-           if (info.targets.size () > 0
-               && promoted.find (stmt) == promoted.end ())
-             afdo_vpt (&gsi, info.targets, false);
-         }
-     }
- 
-   if (!has_annotated)
-     return false;
- 
-   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
-     afdo_source_profile->mark_annotated (gimple_location (gsi_stmt (gsi)));
-   for (gphi_iterator gpi = gsi_start_phis (bb);
-        !gsi_end_p (gpi);
-        gsi_next (&gpi))
-     {
-       gphi *phi = gpi.phi ();
-       size_t i;
-       for (i = 0; i < gimple_phi_num_args (phi); i++)
-         afdo_source_profile->mark_annotated (gimple_phi_arg_location (phi, i));
-     }
-   FOR_EACH_EDGE (e, ei, bb->succs)
-   afdo_source_profile->mark_annotated (e->goto_locus);
- 
-   bb->count = profile_count::from_gcov_type (max_count).afdo ();
-   return true;
- }
- 
- /* BB1 and BB2 are in an equivalent class iff:
-    1. BB1 dominates BB2.
-    2. BB2 post-dominates BB1.
-    3. BB1 and BB2 are in the same loop nest.
-    This function finds the equivalent class for each basic block, and
-    stores a pointer to the first BB in its equivalent class. Meanwhile,
-    set bb counts for the same equivalent class to be idenical. Update
-    ANNOTATED_BB for the first BB in its equivalent class.  */
- 
- static void
- afdo_find_equiv_class (bb_set *annotated_bb)
- {
-   basic_block bb;
- 
-   FOR_ALL_BB_FN (bb, cfun)
-   bb->aux = NULL;
- 
-   FOR_ALL_BB_FN (bb, cfun)
-   {
-     vec<basic_block> dom_bbs;
-     basic_block bb1;
-     int i;
- 
-     if (bb->aux != NULL)
-       continue;
-     bb->aux = bb;
-     dom_bbs = get_dominated_by (CDI_DOMINATORS, bb);
-     FOR_EACH_VEC_ELT (dom_bbs, i, bb1)
-       if (bb1->aux == NULL && dominated_by_p (CDI_POST_DOMINATORS, bb, bb1)
- 	  && bb1->loop_father == bb->loop_father)
- 	{
- 	  bb1->aux = bb;
- 	  if (bb1->count > bb->count && is_bb_annotated (bb1, *annotated_bb))
- 	    {
- 	      bb->count = bb1->count;
- 	      set_bb_annotated (bb, annotated_bb);
- 	    }
- 	}
-     dom_bbs = get_dominated_by (CDI_POST_DOMINATORS, bb);
-     FOR_EACH_VEC_ELT (dom_bbs, i, bb1)
-       if (bb1->aux == NULL && dominated_by_p (CDI_DOMINATORS, bb, bb1)
- 	  && bb1->loop_father == bb->loop_father)
- 	{
- 	  bb1->aux = bb;
- 	  if (bb1->count > bb->count && is_bb_annotated (bb1, *annotated_bb))
- 	    {
- 	      bb->count = bb1->count;
- 	      set_bb_annotated (bb, annotated_bb);
- 	    }
- 	}
-   }
- }
- 
- /* If a basic block's count is known, and only one of its in/out edges' count
-    is unknown, its count can be calculated. Meanwhile, if all of the in/out
-    edges' counts are known, then the basic block's unknown count can also be
-    calculated.
-    IS_SUCC is true if out edges of a basic blocks are examined.
-    Update ANNOTATED_BB accordingly.
-    Return TRUE if any basic block/edge count is changed.  */
- 
- static bool
- afdo_propagate_edge (bool is_succ, bb_set *annotated_bb)
- {
-   basic_block bb;
-   bool changed = false;
- 
-   FOR_EACH_BB_FN (bb, cfun)
-   {
-     edge e, unknown_edge = NULL;
-     edge_iterator ei;
-     int num_unknown_edge = 0;
-     profile_count total_known_count = profile_count::zero ().afdo ();
- 
-     FOR_EACH_EDGE (e, ei, is_succ ? bb->succs : bb->preds)
-       {
- 	gcc_assert (AFDO_EINFO (e) != NULL);
- 	if (! AFDO_EINFO (e)->is_annotated ())
- 	  num_unknown_edge++, unknown_edge = e;
- 	else
- 	  total_known_count += AFDO_EINFO (e)->get_count ();
-       }
- 
-     /* Be careful not to annotate block with no successor in special cases.  */
-     if (num_unknown_edge == 0 && total_known_count > bb->count)
-       {
- 	bb->count = total_known_count;
- 	if (!is_bb_annotated (bb, *annotated_bb))
- 	  set_bb_annotated (bb, annotated_bb);
- 	changed = true;
-       }
-     else if (num_unknown_edge == 1 && is_bb_annotated (bb, *annotated_bb))
-       {
- 	if (bb->count > total_known_count)
- 	  AFDO_EINFO (unknown_edge)->set_count (bb->count - total_known_count);
- 	else
- 	  AFDO_EINFO (unknown_edge)->set_count (profile_count::zero().afdo ());
- 	AFDO_EINFO (unknown_edge)->set_annotated ();
- 	changed = true;
-       }
-   }
-   return changed;
- }
- 
- /* Special propagation for circuit expressions. Because GCC translates
-    control flow into data flow for circuit expressions. E.g.
-    BB1:
-    if (a && b)
-      BB2
-    else
-      BB3
- 
-    will be translated into:
- 
-    BB1:
-      if (a)
-        goto BB.t1
-      else
-        goto BB.t3
-    BB.t1:
-      if (b)
-        goto BB.t2
-      else
-        goto BB.t3
-    BB.t2:
-      goto BB.t3
-    BB.t3:
-      tmp = PHI (0 (BB1), 0 (BB.t1), 1 (BB.t2)
-      if (tmp)
-        goto BB2
-      else
-        goto BB3
- 
-    In this case, we need to propagate through PHI to determine the edge
-    count of BB1->BB.t1, BB.t1->BB.t2.  */
- 
- static void
- afdo_propagate_circuit (const bb_set &annotated_bb)
- {
-   basic_block bb;
-   FOR_ALL_BB_FN (bb, cfun)
-   {
-     gimple *def_stmt;
-     tree cmp_rhs, cmp_lhs;
-     gimple *cmp_stmt = last_stmt (bb);
-     edge e;
-     edge_iterator ei;
- 
-     if (!cmp_stmt || gimple_code (cmp_stmt) != GIMPLE_COND)
-       continue;
-     cmp_rhs = gimple_cond_rhs (cmp_stmt);
-     cmp_lhs = gimple_cond_lhs (cmp_stmt);
-     if (!TREE_CONSTANT (cmp_rhs)
-         || !(integer_zerop (cmp_rhs) || integer_onep (cmp_rhs)))
-       continue;
-     if (TREE_CODE (cmp_lhs) != SSA_NAME)
-       continue;
-     if (!is_bb_annotated (bb, annotated_bb))
-       continue;
-     def_stmt = SSA_NAME_DEF_STMT (cmp_lhs);
-     while (def_stmt && gimple_code (def_stmt) == GIMPLE_ASSIGN
-            && gimple_assign_single_p (def_stmt)
-            && TREE_CODE (gimple_assign_rhs1 (def_stmt)) == SSA_NAME)
-       def_stmt = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (def_stmt));
-     if (!def_stmt)
-       continue;
-     gphi *phi_stmt = dyn_cast <gphi *> (def_stmt);
-     if (!phi_stmt)
-       continue;
-     FOR_EACH_EDGE (e, ei, bb->succs)
-     {
-       unsigned i, total = 0;
-       edge only_one;
-       bool check_value_one = (((integer_onep (cmp_rhs))
-                                ^ (gimple_cond_code (cmp_stmt) == EQ_EXPR))
-                               ^ ((e->flags & EDGE_TRUE_VALUE) != 0));
-       if (! AFDO_EINFO (e)->is_annotated ())
-         continue;
-       for (i = 0; i < gimple_phi_num_args (phi_stmt); i++)
-         {
-           tree val = gimple_phi_arg_def (phi_stmt, i);
-           edge ep = gimple_phi_arg_edge (phi_stmt, i);
- 
-           if (!TREE_CONSTANT (val)
-               || !(integer_zerop (val) || integer_onep (val)))
-             continue;
-           if (check_value_one ^ integer_onep (val))
-             continue;
-           total++;
-           only_one = ep;
-           if (! (AFDO_EINFO (e)->get_count ()).nonzero_p ()
- 	      && ! AFDO_EINFO (ep)->is_annotated ())
- 	    {
- 	      AFDO_EINFO (ep)->set_count (profile_count::zero ().afdo ());
- 	      AFDO_EINFO (ep)->set_annotated ();
- 	    }
- 	}
-       if (total == 1 && ! AFDO_EINFO (only_one)->is_annotated ())
- 	{
- 	  AFDO_EINFO (only_one)->set_count (AFDO_EINFO (e)->get_count ());
- 	  AFDO_EINFO (only_one)->set_annotated ();
- 	}
-     }
-   }
- }
- 
- /* Propagate the basic block count and edge count on the control flow
-    graph. We do the propagation iteratively until stablize.  */
- 
- static void
- afdo_propagate (bb_set *annotated_bb)
- {
-   basic_block bb;
-   bool changed = true;
-   int i = 0;
- 
-   FOR_ALL_BB_FN (bb, cfun)
-   {
-     bb->count = ((basic_block)bb->aux)->count;
-     if (is_bb_annotated ((basic_block)bb->aux, *annotated_bb))
-       set_bb_annotated (bb, annotated_bb);
-   }
- 
-   while (changed && i++ < 10)
-     {
-       changed = false;
- 
-       if (afdo_propagate_edge (true, annotated_bb))
-         changed = true;
-       if (afdo_propagate_edge (false, annotated_bb))
-         changed = true;
-       afdo_propagate_circuit (*annotated_bb);
-     }
- }
- 
- /* Propagate counts on control flow graph and calculate branch
-    probabilities.  */
- 
- static void
- afdo_calculate_branch_prob (bb_set *annotated_bb)
- {
-   edge e;
-   edge_iterator ei;
-   basic_block bb;
- 
-   calculate_dominance_info (CDI_POST_DOMINATORS);
-   calculate_dominance_info (CDI_DOMINATORS);
-   loop_optimizer_init (0);
- 
-   FOR_ALL_BB_FN (bb, cfun)
-     {
-       gcc_assert (bb->aux == NULL);
-       FOR_EACH_EDGE (e, ei, bb->succs)
- 	{
- 	  gcc_assert (e->aux == NULL);
- 	  e->aux = new edge_info ();
- 	}
-     }
- 
-   afdo_find_equiv_class (annotated_bb);
-   afdo_propagate (annotated_bb);
- 
-   FOR_EACH_BB_FN (bb, cfun)
-   {
-     int num_unknown_succ = 0;
-     profile_count total_count = profile_count::zero ().afdo ();
- 
-     FOR_EACH_EDGE (e, ei, bb->succs)
-     {
-       gcc_assert (AFDO_EINFO (e) != NULL);
-       if (! AFDO_EINFO (e)->is_annotated ())
-         num_unknown_succ++;
-       else
-         total_count += AFDO_EINFO (e)->get_count ();
-     }
-     if (num_unknown_succ == 0 && total_count > profile_count::zero ())
-       {
- 	FOR_EACH_EDGE (e, ei, bb->succs)
- 	  e->probability
- 	    = AFDO_EINFO (e)->get_count ().probability_in (total_count);
-       }
-   }
-   FOR_ALL_BB_FN (bb, cfun)
-     {
-       bb->aux = NULL;
-       FOR_EACH_EDGE (e, ei, bb->succs)
- 	if (AFDO_EINFO (e) != NULL)
- 	  {
- 	    delete AFDO_EINFO (e);
- 	    e->aux = NULL;
- 	  }
-     }
- 
-   loop_optimizer_finalize ();
-   free_dominance_info (CDI_DOMINATORS);
-   free_dominance_info (CDI_POST_DOMINATORS);
- }
- 
- /* Perform value profile transformation using AutoFDO profile. Add the
-    promoted stmts to PROMOTED_STMTS. Return TRUE if there is any
-    indirect call promoted.  */
- 
- static bool
- afdo_vpt_for_early_inline (stmt_set *promoted_stmts)
- {
-   basic_block bb;
-   if (afdo_source_profile->get_function_instance_by_decl (
-           current_function_decl) == NULL)
-     return false;
- 
-   compute_fn_summary (cgraph_node::get (current_function_decl), true);
- 
-   bool has_vpt = false;
-   FOR_EACH_BB_FN (bb, cfun)
-   {
-     if (!has_indirect_call (bb))
-       continue;
-     gimple_stmt_iterator gsi;
- 
-     gcov_type bb_count = 0;
-     for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
-       {
-         count_info info;
- 	gimple *stmt = gsi_stmt (gsi);
-         if (afdo_source_profile->get_count_info (stmt, &info))
-           bb_count = MAX (bb_count, info.count);
-       }
- 
-     for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
-       {
-         gcall *stmt = dyn_cast <gcall *> (gsi_stmt (gsi));
-         /* IC_promotion and early_inline_2 is done in multiple iterations.
-            No need to promoted the stmt if its in promoted_stmts (means
-            it is already been promoted in the previous iterations).  */
-         if ((!stmt) || gimple_call_fn (stmt) == NULL
-             || TREE_CODE (gimple_call_fn (stmt)) == FUNCTION_DECL
-             || promoted_stmts->find (stmt) != promoted_stmts->end ())
-           continue;
- 
-         count_info info;
-         afdo_source_profile->get_count_info (stmt, &info);
-         info.count = bb_count;
-         if (afdo_source_profile->update_inlined_ind_target (stmt, &info))
-           {
-             /* Promote the indirect call and update the promoted_stmts.  */
-             promoted_stmts->insert (stmt);
-             afdo_vpt (&gsi, info.targets, true);
-             has_vpt = true;
-           }
-       }
-   }
- 
-   if (has_vpt)
-     {
-       unsigned todo = optimize_inline_calls (current_function_decl);
-       if (todo & TODO_update_ssa_any)
-        update_ssa (TODO_update_ssa);
-       return true;
-     }
- 
-   return false;
- }
- 
- /* Annotate auto profile to the control flow graph. Do not annotate value
-    profile for stmts in PROMOTED_STMTS.  */
- 
- static void
- afdo_annotate_cfg (const stmt_set &promoted_stmts)
- {
-   basic_block bb;
-   bb_set annotated_bb;
-   const function_instance *s
-       = afdo_source_profile->get_function_instance_by_decl (
-           current_function_decl);
- 
-   if (s == NULL)
-     return;
-   cgraph_node::get (current_function_decl)->count
-      = profile_count::from_gcov_type (s->head_count ()).afdo ();
-   ENTRY_BLOCK_PTR_FOR_FN (cfun)->count
-      = profile_count::from_gcov_type (s->head_count ()).afdo ();
-   EXIT_BLOCK_PTR_FOR_FN (cfun)->count = profile_count::zero ().afdo ();
-   profile_count max_count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
- 
-   FOR_EACH_BB_FN (bb, cfun)
-     {
-       /* As autoFDO uses sampling approach, we have to assume that all
- 	 counters are zero when not seen by autoFDO.  */
-       bb->count = profile_count::zero ().afdo ();
-       if (afdo_set_bb_count (bb, promoted_stmts))
- 	set_bb_annotated (bb, &annotated_bb);
-       if (bb->count > max_count)
- 	max_count = bb->count;
-     }
-   if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count
-       > ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb->count)
-     {
-       ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb->count
-           = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
-       set_bb_annotated (ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb, &annotated_bb);
-     }
-   if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count
-       > EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb->count)
-     {
-       EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb->count
-           = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
-       set_bb_annotated (EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb, &annotated_bb);
-     }
-   afdo_source_profile->mark_annotated (
-       DECL_SOURCE_LOCATION (current_function_decl));
-   afdo_source_profile->mark_annotated (cfun->function_start_locus);
-   afdo_source_profile->mark_annotated (cfun->function_end_locus);
-   if (max_count > profile_count::zero ())
-     {
-       /* Calculate, propagate count and probability information on CFG.  */
-       afdo_calculate_branch_prob (&annotated_bb);
-     }
-   update_max_bb_count ();
-   profile_status_for_fn (cfun) = PROFILE_READ;
-   if (flag_value_profile_transformations)
-     {
-       gimple_value_profile_transformations ();
-       free_dominance_info (CDI_DOMINATORS);
-       free_dominance_info (CDI_POST_DOMINATORS);
-       update_ssa (TODO_update_ssa);
-     }
- }
- 
- /* Wrapper function to invoke early inliner.  */
- 
- static void
- early_inline ()
- {
-   compute_fn_summary (cgraph_node::get (current_function_decl), true);
-   unsigned todo = early_inliner (cfun);
-   if (todo & TODO_update_ssa_any)
-     update_ssa (TODO_update_ssa);
- }
- 
- /* Use AutoFDO profile to annoate the control flow graph.
-    Return the todo flag.  */
- 
- static unsigned int
- auto_profile (void)
- {
-   struct cgraph_node *node;
- 
-   if (symtab->state == FINISHED)
-     return 0;
- 
-   init_node_map (true);
-   profile_info = autofdo::afdo_profile_info;
- 
-   FOR_EACH_FUNCTION (node)
-   {
-     if (!gimple_has_body_p (node->decl))
-       continue;
- 
-     /* Don't profile functions produced for builtin stuff.  */
-     if (DECL_SOURCE_LOCATION (node->decl) == BUILTINS_LOCATION)
-       continue;
- 
-     push_cfun (DECL_STRUCT_FUNCTION (node->decl));
- 
-     /* First do indirect call promotion and early inline to make the
-        IR match the profiled binary before actual annotation.
- 
-        This is needed because an indirect call might have been promoted
-        and inlined in the profiled binary. If we do not promote and
-        inline these indirect calls before annotation, the profile for
-        these promoted functions will be lost.
- 
-        e.g. foo() --indirect_call--> bar()
-        In profiled binary, the callsite is promoted and inlined, making
-        the profile look like:
- 
-        foo: {
-          loc_foo_1: count_1
-          bar@loc_foo_2: {
-            loc_bar_1: count_2
-            loc_bar_2: count_3
-          }
-        }
- 
-        Before AutoFDO pass, loc_foo_2 is not promoted thus not inlined.
-        If we perform annotation on it, the profile inside bar@loc_foo2
-        will be wasted.
- 
-        To avoid this, we promote loc_foo_2 and inline the promoted bar
-        function before annotation, so the profile inside bar@loc_foo2
-        will be useful.  */
-     autofdo::stmt_set promoted_stmts;
-     for (int i = 0; i < opt_for_fn (node->decl,
- 				    param_early_inliner_max_iterations); i++)
-       {
-         if (!flag_value_profile_transformations
-             || !autofdo::afdo_vpt_for_early_inline (&promoted_stmts))
-           break;
-         early_inline ();
-       }
- 
-     early_inline ();
-     autofdo::afdo_annotate_cfg (promoted_stmts);
-     compute_function_frequency ();
- 
-     /* Local pure-const may imply need to fixup the cfg.  */
-     if (execute_fixup_cfg () & TODO_cleanup_cfg)
-       cleanup_tree_cfg ();
- 
-     free_dominance_info (CDI_DOMINATORS);
-     free_dominance_info (CDI_POST_DOMINATORS);
-     cgraph_edge::rebuild_edges ();
-     compute_fn_summary (cgraph_node::get (current_function_decl), true);
-     pop_cfun ();
-   }
- 
-   return TODO_rebuild_cgraph_edges;
- }
- } /* namespace autofdo.  */
- 
- /* Read the profile from the profile data file.  */
- 
- void
- read_autofdo_file (void)
- {
-   if (auto_profile_file == NULL)
-     auto_profile_file = DEFAULT_AUTO_PROFILE_FILE;
- 
-   autofdo::afdo_profile_info = XNEW (gcov_summary);
-   autofdo::afdo_profile_info->runs = 1;
-   autofdo::afdo_profile_info->sum_max = 0;
- 
-   /* Read the profile from the profile file.  */
-   autofdo::read_profile ();
- }
- 
- /* Free the resources.  */
- 
- void
- end_auto_profile (void)
- {
-   delete autofdo::afdo_source_profile;
-   delete autofdo::afdo_string_table;
-   profile_info = NULL;
- }
- 
- /* Returns TRUE if EDGE is hot enough to be inlined early.  */
- 
- bool
- afdo_callsite_hot_enough_for_early_inline (struct cgraph_edge *edge)
- {
-   gcov_type count
-       = autofdo::afdo_source_profile->get_callsite_total_count (edge);
- 
-   if (count > 0)
-     {
-       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);
-       profile_info = saved_profile_info;
-       return is_hot;
-     }
- 
-   return false;
- }
- 
- namespace
- {
- 
- const pass_data pass_data_ipa_auto_profile = {
-   SIMPLE_IPA_PASS, "afdo", /* name */
-   OPTGROUP_NONE,           /* optinfo_flags */
-   TV_IPA_AUTOFDO,          /* tv_id */
-   0,                       /* properties_required */
-   0,                       /* properties_provided */
-   0,                       /* properties_destroyed */
-   0,                       /* todo_flags_start */
-   0,                       /* todo_flags_finish */
- };
- 
- class pass_ipa_auto_profile : public simple_ipa_opt_pass
- {
- public:
-   pass_ipa_auto_profile (gcc::context *ctxt)
-       : simple_ipa_opt_pass (pass_data_ipa_auto_profile, ctxt)
-   {
-   }
- 
-   /* opt_pass methods: */
-   virtual bool
-   gate (function *)
-   {
-     return flag_auto_profile;
-   }
-   virtual unsigned int
-   execute (function *)
-   {
-     return autofdo::auto_profile ();
-   }
- }; // class pass_ipa_auto_profile
- 
- } // anon namespace
- 
- simple_ipa_opt_pass *
- make_pass_ipa_auto_profile (gcc::context *ctxt)
- {
-   return new pass_ipa_auto_profile (ctxt);
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/auto-profile.cc gcc-12.1.0/gcc/auto-profile.cc
*** gcc-11.3.0/gcc/auto-profile.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/auto-profile.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,1773 ----
+ /* Read and annotate call graph profile from the auto profile data file.
+    Copyright (C) 2014-2022 Free Software Foundation, Inc.
+    Contributed by Dehao Chen (dehao@google.com)
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #include "config.h"
+ #define INCLUDE_MAP
+ #define INCLUDE_SET
+ #include "system.h"
+ #include "coretypes.h"
+ #include "backend.h"
+ #include "tree.h"
+ #include "gimple.h"
+ #include "predict.h"
+ #include "alloc-pool.h"
+ #include "tree-pass.h"
+ #include "ssa.h"
+ #include "cgraph.h"
+ #include "gcov-io.h"
+ #include "diagnostic-core.h"
+ #include "profile.h"
+ #include "langhooks.h"
+ #include "cfgloop.h"
+ #include "tree-cfg.h"
+ #include "tree-cfgcleanup.h"
+ #include "tree-into-ssa.h"
+ #include "gimple-iterator.h"
+ #include "value-prof.h"
+ #include "symbol-summary.h"
+ #include "ipa-prop.h"
+ #include "ipa-fnsummary.h"
+ #include "ipa-inline.h"
+ #include "tree-inline.h"
+ #include "auto-profile.h"
+ #include "tree-pretty-print.h"
+ #include "gimple-pretty-print.h"
+ 
+ /* The following routines implements AutoFDO optimization.
+ 
+    This optimization uses sampling profiles to annotate basic block counts
+    and uses heuristics to estimate branch probabilities.
+ 
+    There are three phases in AutoFDO:
+ 
+    Phase 1: Read profile from the profile data file.
+      The following info is read from the profile datafile:
+         * string_table: a map between function name and its index.
+         * autofdo_source_profile: a map from function_instance name to
+           function_instance. This is represented as a forest of
+           function_instances.
+         * WorkingSet: a histogram of how many instructions are covered for a
+           given percentage of total cycles. This is describing the binary
+           level information (not source level). This info is used to help
+           decide if we want aggressive optimizations that could increase
+           code footprint (e.g. loop unroll etc.)
+      A function instance is an instance of function that could either be a
+      standalone symbol, or a clone of a function that is inlined into another
+      function.
+ 
+    Phase 2: Early inline + value profile transformation.
+      Early inline uses autofdo_source_profile to find if a callsite is:
+         * inlined in the profiled binary.
+         * callee body is hot in the profiling run.
+      If both condition satisfies, early inline will inline the callsite
+      regardless of the code growth.
+      Phase 2 is an iterative process. During each iteration, we also check
+      if an indirect callsite is promoted and inlined in the profiling run.
+      If yes, vpt will happen to force promote it and in the next iteration,
+      einline will inline the promoted callsite in the next iteration.
+ 
+    Phase 3: Annotate control flow graph.
+      AutoFDO uses a separate pass to:
+         * Annotate basic block count
+         * Estimate branch probability
+ 
+    After the above 3 phases, all profile is readily annotated on the GCC IR.
+    AutoFDO tries to reuse all FDO infrastructure as much as possible to make
+    use of the profile. E.g. it uses existing mechanism to calculate the basic
+    block/edge frequency, as well as the cgraph node/edge count.
+ */
+ 
+ #define DEFAULT_AUTO_PROFILE_FILE "fbdata.afdo"
+ #define AUTO_PROFILE_VERSION 2
+ 
+ namespace autofdo
+ {
+ 
+ /* Intermediate edge info used when propagating AutoFDO profile information.
+    We can't edge->count() directly since it's computed from edge's probability
+    while probability is yet not decided during propagation.  */
+ #define AFDO_EINFO(e)                     ((class edge_info *) e->aux)
+ class edge_info
+ {
+ public:
+   edge_info () : count_ (profile_count::zero ().afdo ()), annotated_ (false) {}
+   bool is_annotated () const { return annotated_; }
+   void set_annotated () { annotated_ = true; }
+   profile_count get_count () const { return count_; }
+   void set_count (profile_count count) { count_ = count; }
+ private:
+   profile_count count_;
+   bool annotated_;
+ };
+ 
+ /* Represent a source location: (function_decl, lineno).  */
+ typedef std::pair<tree, unsigned> decl_lineno;
+ 
+ /* Represent an inline stack. vector[0] is the leaf node.  */
+ typedef auto_vec<decl_lineno> inline_stack;
+ 
+ /* String array that stores function names.  */
+ typedef auto_vec<char *> string_vector;
+ 
+ /* Map from function name's index in string_table to target's
+    execution count.  */
+ typedef std::map<unsigned, gcov_type> icall_target_map;
+ 
+ /* Set of gimple stmts. Used to track if the stmt has already been promoted
+    to direct call.  */
+ typedef std::set<gimple *> stmt_set;
+ 
+ /* Represent count info of an inline stack.  */
+ class count_info
+ {
+ public:
+   /* Sampled count of the inline stack.  */
+   gcov_type count;
+ 
+   /* Map from indirect call target to its sample count.  */
+   icall_target_map targets;
+ 
+   /* Whether this inline stack is already used in annotation.
+ 
+      Each inline stack should only be used to annotate IR once.
+      This will be enforced when instruction-level discriminator
+      is supported.  */
+   bool annotated;
+ };
+ 
+ /* operator< for "const char *".  */
+ struct string_compare
+ {
+   bool operator()(const char *a, const char *b) const
+   {
+     return strcmp (a, b) < 0;
+   }
+ };
+ 
+ /* Store a string array, indexed by string position in the array.  */
+ class string_table
+ {
+ public:
+   string_table ()
+   {}
+ 
+   ~string_table ();
+ 
+   /* For a given string, returns its index.  */
+   int get_index (const char *name) const;
+ 
+   /* For a given decl, returns the index of the decl name.  */
+   int get_index_by_decl (tree decl) const;
+ 
+   /* For a given index, returns the string.  */
+   const char *get_name (int index) const;
+ 
+   /* Read profile, return TRUE on success.  */
+   bool read ();
+ 
+ private:
+   typedef std::map<const char *, unsigned, string_compare> string_index_map;
+   string_vector vector_;
+   string_index_map map_;
+ };
+ 
+ /* Profile of a function instance:
+      1. total_count of the function.
+      2. head_count (entry basic block count) of the function (only valid when
+         function is a top-level function_instance, i.e. it is the original copy
+         instead of the inlined copy).
+      3. map from source location (decl_lineno) to profile (count_info).
+      4. map from callsite to callee function_instance.  */
+ class function_instance
+ {
+ public:
+   typedef auto_vec<function_instance *> function_instance_stack;
+ 
+   /* Read the profile and return a function_instance with head count as
+      HEAD_COUNT. Recursively read callsites to create nested function_instances
+      too. STACK is used to track the recursive creation process.  */
+   static function_instance *
+   read_function_instance (function_instance_stack *stack,
+                           gcov_type head_count);
+ 
+   /* Recursively deallocate all callsites (nested function_instances).  */
+   ~function_instance ();
+ 
+   /* Accessors.  */
+   int
+   name () const
+   {
+     return name_;
+   }
+   gcov_type
+   total_count () const
+   {
+     return total_count_;
+   }
+   gcov_type
+   head_count () const
+   {
+     return head_count_;
+   }
+ 
+   /* Traverse callsites of the current function_instance to find one at the
+      location of LINENO and callee name represented in DECL.  */
+   function_instance *get_function_instance_by_decl (unsigned lineno,
+                                                     tree decl) const;
+ 
+   /* Store the profile info for LOC in INFO. Return TRUE if profile info
+      is found.  */
+   bool get_count_info (location_t loc, count_info *info) const;
+ 
+   /* Read the inlined indirect call target profile for STMT and store it in
+      MAP, return the total count for all inlined indirect calls.  */
+   gcov_type find_icall_target_map (gcall *stmt, icall_target_map *map) const;
+ 
+   /* Sum of counts that is used during annotation.  */
+   gcov_type total_annotated_count () const;
+ 
+   /* Mark LOC as annotated.  */
+   void mark_annotated (location_t loc);
+ 
+ private:
+   /* Callsite, represented as (decl_lineno, callee_function_name_index).  */
+   typedef std::pair<unsigned, unsigned> callsite;
+ 
+   /* Map from callsite to callee function_instance.  */
+   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)
+   {
+   }
+ 
+   /* Map from source location (decl_lineno) to profile (count_info).  */
+   typedef std::map<unsigned, count_info> position_count_map;
+ 
+   /* function_instance name index in the string_table.  */
+   unsigned name_;
+ 
+   /* Total sample count.  */
+   gcov_type total_count_;
+ 
+   /* Entry BB's sample count.  */
+   gcov_type head_count_;
+ 
+   /* Map from callsite location to callee function_instance.  */
+   callsite_map callsites;
+ 
+   /* Map from source location to count_info.  */
+   position_count_map pos_counts;
+ };
+ 
+ /* Profile for all functions.  */
+ class autofdo_source_profile
+ {
+ public:
+   static autofdo_source_profile *
+   create ()
+   {
+     autofdo_source_profile *map = new autofdo_source_profile ();
+ 
+     if (map->read ())
+       return map;
+     delete map;
+     return NULL;
+   }
+ 
+   ~autofdo_source_profile ();
+ 
+   /* For a given DECL, returns the top-level function_instance.  */
+   function_instance *get_function_instance_by_decl (tree decl) const;
+ 
+   /* Find count_info for a given gimple STMT. If found, store the count_info
+      in INFO and return true; otherwise return false.  */
+   bool get_count_info (gimple *stmt, count_info *info) const;
+ 
+   /* Find total count of the callee of EDGE.  */
+   gcov_type get_callsite_total_count (struct cgraph_edge *edge) const;
+ 
+   /* Update value profile INFO for STMT from the inlined indirect callsite.
+      Return true if INFO is updated.  */
+   bool update_inlined_ind_target (gcall *stmt, count_info *info);
+ 
+   /* Mark LOC as annotated.  */
+   void mark_annotated (location_t loc);
+ 
+ private:
+   /* Map from function_instance name index (in string_table) to
+      function_instance.  */
+   typedef std::map<unsigned, function_instance *> name_function_instance_map;
+ 
+   autofdo_source_profile () {}
+ 
+   /* Read AutoFDO profile and returns TRUE on success.  */
+   bool read ();
+ 
+   /* Return the function_instance in the profile that correspond to the
+      inline STACK.  */
+   function_instance *
+   get_function_instance_by_inline_stack (const inline_stack &stack) const;
+ 
+   name_function_instance_map map_;
+ };
+ 
+ /* Store the strings read from the profile data file.  */
+ static string_table *afdo_string_table;
+ 
+ /* Store the AutoFDO source profile.  */
+ static autofdo_source_profile *afdo_source_profile;
+ 
+ /* gcov_summary structure to store the profile_info.  */
+ static gcov_summary *afdo_profile_info;
+ 
+ /* Helper functions.  */
+ 
+ /* Return the original name of NAME: strip the suffix that starts
+    with '.' Caller is responsible for freeing RET.  */
+ 
+ static char *
+ get_original_name (const char *name)
+ {
+   char *ret = xstrdup (name);
+   char *find = strchr (ret, '.');
+   if (find != NULL)
+     *find = 0;
+   return ret;
+ }
+ 
+ /* Return the combined location, which is a 32bit integer in which
+    higher 16 bits stores the line offset of LOC to the start lineno
+    of DECL, The lower 16 bits stores the discriminator.  */
+ 
+ static unsigned
+ get_combined_location (location_t loc, tree decl)
+ {
+   /* 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);
+ }
+ 
+ /* Return the function decl of a given lexical BLOCK.  */
+ 
+ static tree
+ get_function_decl_from_block (tree block)
+ {
+   if (!inlined_function_outer_scope_p (block))
+     return NULL_TREE;
+ 
+   return BLOCK_ABSTRACT_ORIGIN (block);
+ }
+ 
+ /* Store inline stack for STMT in STACK.  */
+ 
+ static void
+ get_inline_stack (location_t locus, inline_stack *stack)
+ {
+   if (LOCATION_LOCUS (locus) == UNKNOWN_LOCATION)
+     return;
+ 
+   tree block = LOCATION_BLOCK (locus);
+   if (block && TREE_CODE (block) == BLOCK)
+     {
+       int level = 0;
+       for (block = BLOCK_SUPERCONTEXT (block);
+            block && (TREE_CODE (block) == BLOCK);
+            block = BLOCK_SUPERCONTEXT (block))
+         {
+           location_t tmp_locus = BLOCK_SOURCE_LOCATION (block);
+           if (LOCATION_LOCUS (tmp_locus) == UNKNOWN_LOCATION)
+             continue;
+ 
+           tree decl = get_function_decl_from_block (block);
+           stack->safe_push (
+               std::make_pair (decl, get_combined_location (locus, decl)));
+           locus = tmp_locus;
+           level++;
+         }
+     }
+   stack->safe_push (
+       std::make_pair (current_function_decl,
+                       get_combined_location (locus, current_function_decl)));
+ }
+ 
+ /* Return STMT's combined location, which is a 32bit integer in which
+    higher 16 bits stores the line offset of LOC to the start lineno
+    of DECL, The lower 16 bits stores the discriminator.  */
+ 
+ static unsigned
+ get_relative_location_for_stmt (gimple *stmt)
+ {
+   location_t locus = gimple_location (stmt);
+   if (LOCATION_LOCUS (locus) == UNKNOWN_LOCATION)
+     return UNKNOWN_LOCATION;
+ 
+   for (tree block = gimple_block (stmt); block && (TREE_CODE (block) == BLOCK);
+        block = BLOCK_SUPERCONTEXT (block))
+     if (LOCATION_LOCUS (BLOCK_SOURCE_LOCATION (block)) != UNKNOWN_LOCATION)
+       return get_combined_location (locus,
+                                     get_function_decl_from_block (block));
+   return get_combined_location (locus, current_function_decl);
+ }
+ 
+ /* Return true if BB contains indirect call.  */
+ 
+ static bool
+ has_indirect_call (basic_block bb)
+ {
+   gimple_stmt_iterator gsi;
+ 
+   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+     {
+       gimple *stmt = gsi_stmt (gsi);
+       if (gimple_code (stmt) == GIMPLE_CALL && !gimple_call_internal_p (stmt)
+           && (gimple_call_fn (stmt) == NULL
+               || TREE_CODE (gimple_call_fn (stmt)) != FUNCTION_DECL))
+         return true;
+     }
+   return false;
+ }
+ 
+ /* Member functions for string_table.  */
+ 
+ /* Deconstructor.  */
+ 
+ string_table::~string_table ()
+ {
+   for (unsigned i = 0; i < vector_.length (); i++)
+     free (vector_[i]);
+ }
+ 
+ 
+ /* Return the index of a given function NAME. Return -1 if NAME is not
+    found in string table.  */
+ 
+ int
+ string_table::get_index (const char *name) const
+ {
+   if (name == NULL)
+     return -1;
+   string_index_map::const_iterator iter = map_.find (name);
+   if (iter == map_.end ())
+     return -1;
+ 
+   return iter->second;
+ }
+ 
+ /* Return the index of a given function DECL. Return -1 if DECL is not 
+    found in string table.  */
+ 
+ int
+ string_table::get_index_by_decl (tree decl) const
+ {
+   char *name
+       = get_original_name (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
+   int ret = get_index (name);
+   free (name);
+   if (ret != -1)
+     return ret;
+   ret = get_index (lang_hooks.dwarf_name (decl, 0));
+   if (ret != -1)
+     return ret;
+   if (DECL_FROM_INLINE (decl))
+     return get_index_by_decl (DECL_ABSTRACT_ORIGIN (decl));
+ 
+   return -1;
+ }
+ 
+ /* Return the function name of a given INDEX.  */
+ 
+ const char *
+ string_table::get_name (int index) const
+ {
+   gcc_assert (index > 0 && index < (int)vector_.length ());
+   return vector_[index];
+ }
+ 
+ /* Read the string table. Return TRUE if reading is successful.  */
+ 
+ bool
+ string_table::read ()
+ {
+   if (gcov_read_unsigned () != GCOV_TAG_AFDO_FILE_NAMES)
+     return false;
+   /* Skip the length of the section.  */
+   gcov_read_unsigned ();
+   /* Read in the file name table.  */
+   unsigned string_num = gcov_read_unsigned ();
+   for (unsigned i = 0; i < string_num; i++)
+     {
+       vector_.safe_push (get_original_name (gcov_read_string ()));
+       map_[vector_.last ()] = i;
+     }
+   return true;
+ }
+ 
+ /* Member functions for function_instance.  */
+ 
+ function_instance::~function_instance ()
+ {
+   for (callsite_map::iterator iter = callsites.begin ();
+        iter != callsites.end (); ++iter)
+     delete iter->second;
+ }
+ 
+ /* Traverse callsites of the current function_instance to find one at the
+    location of LINENO and callee name represented in DECL.  */
+ 
+ function_instance *
+ function_instance::get_function_instance_by_decl (unsigned lineno,
+                                                   tree decl) const
+ {
+   int func_name_idx = afdo_string_table->get_index_by_decl (decl);
+   if (func_name_idx != -1)
+     {
+       callsite_map::const_iterator ret
+           = callsites.find (std::make_pair (lineno, func_name_idx));
+       if (ret != callsites.end ())
+         return ret->second;
+     }
+   func_name_idx
+       = afdo_string_table->get_index (lang_hooks.dwarf_name (decl, 0));
+   if (func_name_idx != -1)
+     {
+       callsite_map::const_iterator ret
+           = callsites.find (std::make_pair (lineno, func_name_idx));
+       if (ret != callsites.end ())
+         return ret->second;
+     }
+   if (DECL_FROM_INLINE (decl))
+     return get_function_instance_by_decl (lineno, DECL_ABSTRACT_ORIGIN (decl));
+ 
+   return NULL;
+ }
+ 
+ /* Store the profile info for LOC in INFO. Return TRUE if profile info
+    is found.  */
+ 
+ bool
+ function_instance::get_count_info (location_t loc, count_info *info) const
+ {
+   position_count_map::const_iterator iter = pos_counts.find (loc);
+   if (iter == pos_counts.end ())
+     return false;
+   *info = iter->second;
+   return true;
+ }
+ 
+ /* Mark LOC as annotated.  */
+ 
+ void
+ function_instance::mark_annotated (location_t loc)
+ {
+   position_count_map::iterator iter = pos_counts.find (loc);
+   if (iter == pos_counts.end ())
+     return;
+   iter->second.annotated = true;
+ }
+ 
+ /* Read the inlined indirect call target profile for STMT and store it in
+    MAP, return the total count for all inlined indirect calls.  */
+ 
+ gcov_type
+ function_instance::find_icall_target_map (gcall *stmt,
+                                           icall_target_map *map) const
+ {
+   gcov_type ret = 0;
+   unsigned stmt_offset = get_relative_location_for_stmt (stmt);
+ 
+   for (callsite_map::const_iterator iter = callsites.begin ();
+        iter != callsites.end (); ++iter)
+     {
+       unsigned callee = iter->second->name ();
+       /* Check if callsite location match the stmt.  */
+       if (iter->first.first != stmt_offset)
+         continue;
+       struct cgraph_node *node = cgraph_node::get_for_asmname (
+           get_identifier (afdo_string_table->get_name (callee)));
+       if (node == NULL)
+         continue;
+       (*map)[callee] = iter->second->total_count ();
+       ret += iter->second->total_count ();
+     }
+   return ret;
+ }
+ 
+ /* Read the profile and create a function_instance with head count as
+    HEAD_COUNT. Recursively read callsites to create nested function_instances
+    too. STACK is used to track the recursive creation process.  */
+ 
+ /* function instance profile format:
+ 
+    ENTRY_COUNT: 8 bytes
+    NAME_INDEX: 4 bytes
+    NUM_POS_COUNTS: 4 bytes
+    NUM_CALLSITES: 4 byte
+    POS_COUNT_1:
+      POS_1_OFFSET: 4 bytes
+      NUM_TARGETS: 4 bytes
+      COUNT: 8 bytes
+      TARGET_1:
+        VALUE_PROFILE_TYPE: 4 bytes
+        TARGET_IDX: 8 bytes
+        COUNT: 8 bytes
+      TARGET_2
+      ...
+      TARGET_n
+    POS_COUNT_2
+    ...
+    POS_COUNT_N
+    CALLSITE_1:
+      CALLSITE_1_OFFSET: 4 bytes
+      FUNCTION_INSTANCE_PROFILE (nested)
+    CALLSITE_2
+    ...
+    CALLSITE_n.  */
+ 
+ function_instance *
+ function_instance::read_function_instance (function_instance_stack *stack,
+                                            gcov_type head_count)
+ {
+   unsigned name = gcov_read_unsigned ();
+   unsigned num_pos_counts = gcov_read_unsigned ();
+   unsigned num_callsites = gcov_read_unsigned ();
+   function_instance *s = new function_instance (name, head_count);
+   stack->safe_push (s);
+ 
+   for (unsigned i = 0; i < num_pos_counts; i++)
+     {
+       unsigned offset = gcov_read_unsigned () & 0xffff0000;
+       unsigned num_targets = gcov_read_unsigned ();
+       gcov_type count = gcov_read_counter ();
+       s->pos_counts[offset].count = count;
+       for (unsigned j = 0; j < stack->length (); j++)
+         (*stack)[j]->total_count_ += count;
+       for (unsigned j = 0; j < num_targets; j++)
+         {
+           /* Only indirect call target histogram is supported now.  */
+           gcov_read_unsigned ();
+           gcov_type target_idx = gcov_read_counter ();
+           s->pos_counts[offset].targets[target_idx] = gcov_read_counter ();
+         }
+     }
+   for (unsigned i = 0; i < num_callsites; i++)
+     {
+       unsigned offset = gcov_read_unsigned ();
+       function_instance *callee_function_instance
+           = read_function_instance (stack, 0);
+       s->callsites[std::make_pair (offset, callee_function_instance->name ())]
+           = callee_function_instance;
+     }
+   stack->pop ();
+   return s;
+ }
+ 
+ /* Sum of counts that is used during annotation.  */
+ 
+ gcov_type
+ function_instance::total_annotated_count () const
+ {
+   gcov_type ret = 0;
+   for (callsite_map::const_iterator iter = callsites.begin ();
+        iter != callsites.end (); ++iter)
+     ret += iter->second->total_annotated_count ();
+   for (position_count_map::const_iterator iter = pos_counts.begin ();
+        iter != pos_counts.end (); ++iter)
+     if (iter->second.annotated)
+       ret += iter->second.count;
+   return ret;
+ }
+ 
+ /* Member functions for autofdo_source_profile.  */
+ 
+ autofdo_source_profile::~autofdo_source_profile ()
+ {
+   for (name_function_instance_map::const_iterator iter = map_.begin ();
+        iter != map_.end (); ++iter)
+     delete iter->second;
+ }
+ 
+ /* For a given DECL, returns the top-level function_instance.  */
+ 
+ function_instance *
+ autofdo_source_profile::get_function_instance_by_decl (tree decl) const
+ {
+   int index = afdo_string_table->get_index_by_decl (decl);
+   if (index == -1)
+     return NULL;
+   name_function_instance_map::const_iterator ret = map_.find (index);
+   return ret == map_.end () ? NULL : ret->second;
+ }
+ 
+ /* Find count_info for a given gimple STMT. If found, store the count_info
+    in INFO and return true; otherwise return false.  */
+ 
+ bool
+ autofdo_source_profile::get_count_info (gimple *stmt, count_info *info) const
+ {
+   if (LOCATION_LOCUS (gimple_location (stmt)) == cfun->function_end_locus)
+     return false;
+ 
+   inline_stack stack;
+   get_inline_stack (gimple_location (stmt), &stack);
+   if (stack.length () == 0)
+     return false;
+   function_instance *s = get_function_instance_by_inline_stack (stack);
+   if (s == NULL)
+     return false;
+   return s->get_count_info (stack[0].second, info);
+ }
+ 
+ /* Mark LOC as annotated.  */
+ 
+ void
+ autofdo_source_profile::mark_annotated (location_t loc)
+ {
+   inline_stack stack;
+   get_inline_stack (loc, &stack);
+   if (stack.length () == 0)
+     return;
+   function_instance *s = get_function_instance_by_inline_stack (stack);
+   if (s == NULL)
+     return;
+   s->mark_annotated (stack[0].second);
+ }
+ 
+ /* Update value profile INFO for STMT from the inlined indirect callsite.
+    Return true if INFO is updated.  */
+ 
+ bool
+ autofdo_source_profile::update_inlined_ind_target (gcall *stmt,
+                                                    count_info *info)
+ {
+   if (dump_file)
+     {
+       fprintf (dump_file, "Checking indirect call -> direct call ");
+       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
+     }
+ 
+   if (LOCATION_LOCUS (gimple_location (stmt)) == cfun->function_end_locus)
+     {
+       if (dump_file)
+ 	fprintf (dump_file, " good locus\n");
+       return false;
+     }
+ 
+   count_info old_info;
+   get_count_info (stmt, &old_info);
+   gcov_type total = 0;
+   for (icall_target_map::const_iterator iter = old_info.targets.begin ();
+        iter != old_info.targets.end (); ++iter)
+     total += iter->second;
+ 
+   /* Program behavior changed, original promoted (and inlined) target is not
+      hot any more. Will avoid promote the original target.
+ 
+      To check if original promoted target is still hot, we check the total
+      count of the unpromoted targets (stored in TOTAL). If a callsite count
+      (stored in INFO) is smaller than half of the total count, the original
+      promoted target is considered not hot any more.  */
+   if (info->count < total / 2)
+     {
+       if (dump_file)
+ 	fprintf (dump_file, " not hot anymore %ld < %ld",
+ 		 (long)info->count,
+ 		 (long)total /2);
+       return false;
+     }
+ 
+   inline_stack stack;
+   get_inline_stack (gimple_location (stmt), &stack);
+   if (stack.length () == 0)
+     {
+       if (dump_file)
+ 	fprintf (dump_file, " no inline stack\n");
+       return false;
+     }
+   function_instance *s = get_function_instance_by_inline_stack (stack);
+   if (s == NULL)
+     {
+       if (dump_file)
+ 	fprintf (dump_file, " function not found in inline stack\n");
+       return false;
+     }
+   icall_target_map map;
+   if (s->find_icall_target_map (stmt, &map) == 0)
+     {
+       if (dump_file)
+ 	fprintf (dump_file, " no target map\n");
+       return false;
+     }
+   for (icall_target_map::const_iterator iter = map.begin ();
+        iter != map.end (); ++iter)
+     info->targets[iter->first] = iter->second;
+   if (dump_file)
+     fprintf (dump_file, " looks good\n");
+   return true;
+ }
+ 
+ /* Find total count of the callee of EDGE.  */
+ 
+ gcov_type
+ autofdo_source_profile::get_callsite_total_count (
+     struct cgraph_edge *edge) const
+ {
+   inline_stack stack;
+   stack.safe_push (std::make_pair (edge->callee->decl, 0));
+   get_inline_stack (gimple_location (edge->call_stmt), &stack);
+ 
+   function_instance *s = get_function_instance_by_inline_stack (stack);
+   if (s == NULL
+       || afdo_string_table->get_index (IDENTIFIER_POINTER (
+              DECL_ASSEMBLER_NAME (edge->callee->decl))) != s->name ())
+     return 0;
+ 
+   return s->total_count ();
+ }
+ 
+ /* Read AutoFDO profile and returns TRUE on success.  */
+ 
+ /* source profile format:
+ 
+    GCOV_TAG_AFDO_FUNCTION: 4 bytes
+    LENGTH: 4 bytes
+    NUM_FUNCTIONS: 4 bytes
+    FUNCTION_INSTANCE_1
+    FUNCTION_INSTANCE_2
+    ...
+    FUNCTION_INSTANCE_N.  */
+ 
+ bool
+ autofdo_source_profile::read ()
+ {
+   if (gcov_read_unsigned () != GCOV_TAG_AFDO_FUNCTION)
+     {
+       inform (UNKNOWN_LOCATION, "Not expected TAG.");
+       return false;
+     }
+ 
+   /* Skip the length of the section.  */
+   gcov_read_unsigned ();
+ 
+   /* Read in the function/callsite profile, and store it in local
+      data structure.  */
+   unsigned function_num = gcov_read_unsigned ();
+   for (unsigned i = 0; i < function_num; i++)
+     {
+       function_instance::function_instance_stack stack;
+       function_instance *s = function_instance::read_function_instance (
+           &stack, gcov_read_counter ());
+       map_[s->name ()] = s;
+     }
+   return true;
+ }
+ 
+ /* Return the function_instance in the profile that correspond to the
+    inline STACK.  */
+ 
+ function_instance *
+ autofdo_source_profile::get_function_instance_by_inline_stack (
+     const inline_stack &stack) const
+ {
+   name_function_instance_map::const_iterator iter = map_.find (
+       afdo_string_table->get_index_by_decl (stack[stack.length () - 1].first));
+   if (iter == map_.end())
+     return NULL;
+   function_instance *s = iter->second;
+   for (unsigned i = stack.length() - 1; i > 0; i--)
+     {
+       s = s->get_function_instance_by_decl (
+           stack[i].second, stack[i - 1].first);
+       if (s == NULL)
+         return NULL;
+     }
+   return s;
+ }
+ 
+ /* Module profile is only used by LIPO. Here we simply ignore it.  */
+ 
+ static void
+ fake_read_autofdo_module_profile ()
+ {
+   /* Read in the module info.  */
+   gcov_read_unsigned ();
+ 
+   /* Skip the length of the section.  */
+   gcov_read_unsigned ();
+ 
+   /* Read in the file name table.  */
+   unsigned total_module_num = gcov_read_unsigned ();
+   gcc_assert (total_module_num == 0);
+ }
+ 
+ /* Read data from profile data file.  */
+ 
+ static void
+ read_profile (void)
+ {
+   if (gcov_open (auto_profile_file, 1) == 0)
+     {
+       error ("cannot open profile file %s", auto_profile_file);
+       return;
+     }
+ 
+   if (gcov_read_unsigned () != GCOV_DATA_MAGIC)
+     {
+       error ("AutoFDO profile magic number does not match");
+       return;
+     }
+ 
+   /* Skip the version number.  */
+   unsigned version = gcov_read_unsigned ();
+   if (version != AUTO_PROFILE_VERSION)
+     {
+       error ("AutoFDO profile version %u does not match %u",
+ 	     version, AUTO_PROFILE_VERSION);
+       return;
+     }
+ 
+   /* Skip the empty integer.  */
+   gcov_read_unsigned ();
+ 
+   /* string_table.  */
+   afdo_string_table = new string_table ();
+   if (!afdo_string_table->read())
+     {
+       error ("cannot read string table from %s", auto_profile_file);
+       return;
+     }
+ 
+   /* autofdo_source_profile.  */
+   afdo_source_profile = autofdo_source_profile::create ();
+   if (afdo_source_profile == NULL)
+     {
+       error ("cannot read function profile from %s", auto_profile_file);
+       return;
+     }
+ 
+   /* autofdo_module_profile.  */
+   fake_read_autofdo_module_profile ();
+ }
+ 
+ /* From AutoFDO profiles, find values inside STMT for that we want to measure
+    histograms for indirect-call optimization.
+ 
+    This function is actually served for 2 purposes:
+      * before annotation, we need to mark histogram, promote and inline
+      * after annotation, we just need to mark, and let follow-up logic to
+        decide if it needs to promote and inline.  */
+ 
+ static bool
+ afdo_indirect_call (gimple_stmt_iterator *gsi, const icall_target_map &map,
+                     bool transform)
+ {
+   gimple *gs = gsi_stmt (*gsi);
+   tree callee;
+ 
+   if (map.size () == 0)
+     return false;
+   gcall *stmt = dyn_cast <gcall *> (gs);
+   if (!stmt
+       || gimple_call_internal_p (stmt)
+       || gimple_call_fndecl (stmt) != NULL_TREE)
+     return false;
+ 
+   gcov_type total = 0;
+   icall_target_map::const_iterator max_iter = map.end ();
+ 
+   for (icall_target_map::const_iterator iter = map.begin ();
+        iter != map.end (); ++iter)
+     {
+       total += iter->second;
+       if (max_iter == map.end () || max_iter->second < iter->second)
+         max_iter = iter;
+     }
+   struct cgraph_node *direct_call = cgraph_node::get_for_asmname (
+       get_identifier (afdo_string_table->get_name (max_iter->first)));
+   if (direct_call == NULL || !direct_call->profile_id)
+     return false;
+ 
+   callee = gimple_call_fn (stmt);
+ 
+   histogram_value hist = gimple_alloc_histogram_value (
+       cfun, HIST_TYPE_INDIR_CALL, stmt, callee);
+   hist->n_counters = 4;
+   hist->hvalue.counters = XNEWVEC (gcov_type, hist->n_counters);
+   gimple_add_histogram_value (cfun, stmt, hist);
+ 
+   /* Total counter */
+   hist->hvalue.counters[0] = total;
+   /* Number of value/counter pairs */
+   hist->hvalue.counters[1] = 1;
+   /* Value */
+   hist->hvalue.counters[2] = direct_call->profile_id;
+   /* Counter */
+   hist->hvalue.counters[3] = max_iter->second;
+ 
+   if (!transform)
+     return false;
+ 
+   cgraph_node* current_function_node = cgraph_node::get (current_function_decl);
+ 
+   /* If the direct call is a recursive call, don't promote it since
+      we are not set up to inline recursive calls at this stage. */
+   if (direct_call == current_function_node)
+     return false;
+ 
+   struct cgraph_edge *indirect_edge
+       = current_function_node->get_edge (stmt);
+ 
+   if (dump_file)
+     {
+       fprintf (dump_file, "Indirect call -> direct call ");
+       print_generic_expr (dump_file, callee, TDF_SLIM);
+       fprintf (dump_file, " => ");
+       print_generic_expr (dump_file, direct_call->decl, TDF_SLIM);
+     }
+ 
+   if (direct_call == NULL)
+     {
+       if (dump_file)
+         fprintf (dump_file, " not transforming\n");
+       return false;
+     }
+   if (DECL_STRUCT_FUNCTION (direct_call->decl) == NULL)
+     {
+       if (dump_file)
+         fprintf (dump_file, " no declaration\n");
+       return false;
+     }
+ 
+   if (dump_file)
+     {
+       fprintf (dump_file, " transformation on insn ");
+       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
+       fprintf (dump_file, "\n");
+     }
+ 
+   /* FIXME: Count should be initialized.  */
+   struct cgraph_edge *new_edge
+       = indirect_edge->make_speculative (direct_call,
+ 					 profile_count::uninitialized ());
+   cgraph_edge::redirect_call_stmt_to_callee (new_edge);
+   gimple_remove_histogram_value (cfun, stmt, hist);
+   inline_call (new_edge, true, NULL, NULL, false);
+   return true;
+ }
+ 
+ /* From AutoFDO profiles, find values inside STMT for that we want to measure
+    histograms and adds them to list VALUES.  */
+ 
+ static bool
+ afdo_vpt (gimple_stmt_iterator *gsi, const icall_target_map &map,
+           bool transform)
+ {
+   return afdo_indirect_call (gsi, map, transform);
+ }
+ 
+ typedef std::set<basic_block> bb_set;
+ typedef std::set<edge> edge_set;
+ 
+ static bool
+ is_bb_annotated (const basic_block bb, const bb_set &annotated)
+ {
+   return annotated.find (bb) != annotated.end ();
+ }
+ 
+ static void
+ set_bb_annotated (basic_block bb, bb_set *annotated)
+ {
+   annotated->insert (bb);
+ }
+ 
+ /* For a given BB, set its execution count. Attach value profile if a stmt
+    is not in PROMOTED, because we only want to promote an indirect call once.
+    Return TRUE if BB is annotated.  */
+ 
+ static bool
+ afdo_set_bb_count (basic_block bb, const stmt_set &promoted)
+ {
+   gimple_stmt_iterator gsi;
+   edge e;
+   edge_iterator ei;
+   gcov_type max_count = 0;
+   bool has_annotated = false;
+ 
+   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+     {
+       count_info info;
+       gimple *stmt = gsi_stmt (gsi);
+       if (gimple_clobber_p (stmt) || is_gimple_debug (stmt))
+         continue;
+       if (afdo_source_profile->get_count_info (stmt, &info))
+         {
+           if (info.count > max_count)
+             max_count = info.count;
+           has_annotated = true;
+           if (info.targets.size () > 0
+               && promoted.find (stmt) == promoted.end ())
+             afdo_vpt (&gsi, info.targets, false);
+         }
+     }
+ 
+   if (!has_annotated)
+     return false;
+ 
+   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+     afdo_source_profile->mark_annotated (gimple_location (gsi_stmt (gsi)));
+   for (gphi_iterator gpi = gsi_start_phis (bb);
+        !gsi_end_p (gpi);
+        gsi_next (&gpi))
+     {
+       gphi *phi = gpi.phi ();
+       size_t i;
+       for (i = 0; i < gimple_phi_num_args (phi); i++)
+         afdo_source_profile->mark_annotated (gimple_phi_arg_location (phi, i));
+     }
+   FOR_EACH_EDGE (e, ei, bb->succs)
+   afdo_source_profile->mark_annotated (e->goto_locus);
+ 
+   bb->count = profile_count::from_gcov_type (max_count).afdo ();
+   return true;
+ }
+ 
+ /* BB1 and BB2 are in an equivalent class iff:
+    1. BB1 dominates BB2.
+    2. BB2 post-dominates BB1.
+    3. BB1 and BB2 are in the same loop nest.
+    This function finds the equivalent class for each basic block, and
+    stores a pointer to the first BB in its equivalent class. Meanwhile,
+    set bb counts for the same equivalent class to be idenical. Update
+    ANNOTATED_BB for the first BB in its equivalent class.  */
+ 
+ static void
+ afdo_find_equiv_class (bb_set *annotated_bb)
+ {
+   basic_block bb;
+ 
+   FOR_ALL_BB_FN (bb, cfun)
+   bb->aux = NULL;
+ 
+   FOR_ALL_BB_FN (bb, cfun)
+   {
+     if (bb->aux != NULL)
+       continue;
+     bb->aux = bb;
+     for (basic_block bb1 : get_dominated_by (CDI_DOMINATORS, bb))
+       if (bb1->aux == NULL && dominated_by_p (CDI_POST_DOMINATORS, bb, bb1)
+ 	  && bb1->loop_father == bb->loop_father)
+ 	{
+ 	  bb1->aux = bb;
+ 	  if (bb1->count > bb->count && is_bb_annotated (bb1, *annotated_bb))
+ 	    {
+ 	      bb->count = bb1->count;
+ 	      set_bb_annotated (bb, annotated_bb);
+ 	    }
+ 	}
+ 
+     for (basic_block bb1 : get_dominated_by (CDI_POST_DOMINATORS, bb))
+       if (bb1->aux == NULL && dominated_by_p (CDI_DOMINATORS, bb, bb1)
+ 	  && bb1->loop_father == bb->loop_father)
+ 	{
+ 	  bb1->aux = bb;
+ 	  if (bb1->count > bb->count && is_bb_annotated (bb1, *annotated_bb))
+ 	    {
+ 	      bb->count = bb1->count;
+ 	      set_bb_annotated (bb, annotated_bb);
+ 	    }
+ 	}
+   }
+ }
+ 
+ /* If a basic block's count is known, and only one of its in/out edges' count
+    is unknown, its count can be calculated. Meanwhile, if all of the in/out
+    edges' counts are known, then the basic block's unknown count can also be
+    calculated. Also, if a block has a single predecessor or successor, the block's
+    count can be propagated to that predecessor or successor.
+    IS_SUCC is true if out edges of a basic blocks are examined.
+    Update ANNOTATED_BB accordingly.
+    Return TRUE if any basic block/edge count is changed.  */
+ 
+ static bool
+ afdo_propagate_edge (bool is_succ, bb_set *annotated_bb)
+ {
+   basic_block bb;
+   bool changed = false;
+ 
+   FOR_EACH_BB_FN (bb, cfun)
+   {
+     edge e, unknown_edge = NULL;
+     edge_iterator ei;
+     int num_unknown_edge = 0;
+     int num_edge = 0;
+     profile_count total_known_count = profile_count::zero ().afdo ();
+ 
+     FOR_EACH_EDGE (e, ei, is_succ ? bb->succs : bb->preds)
+       {
+ 	gcc_assert (AFDO_EINFO (e) != NULL);
+ 	if (! AFDO_EINFO (e)->is_annotated ())
+ 	  num_unknown_edge++, unknown_edge = e;
+ 	else
+ 	  total_known_count += AFDO_EINFO (e)->get_count ();
+ 	num_edge++;
+       }
+ 
+     /* Be careful not to annotate block with no successor in special cases.  */
+     if (num_unknown_edge == 0 && total_known_count > bb->count)
+       {
+ 	bb->count = total_known_count;
+ 	if (!is_bb_annotated (bb, *annotated_bb))
+ 	  set_bb_annotated (bb, annotated_bb);
+ 	changed = true;
+       }
+     else if (num_unknown_edge == 1 && is_bb_annotated (bb, *annotated_bb))
+       {
+ 	if (bb->count > total_known_count)
+ 	  {
+ 	      profile_count new_count = bb->count - total_known_count;
+ 	      AFDO_EINFO(unknown_edge)->set_count(new_count);
+ 	      if (num_edge == 1)
+ 		{
+ 		  basic_block succ_or_pred_bb = is_succ ? unknown_edge->dest : unknown_edge->src;
+ 		  if (new_count > succ_or_pred_bb->count)
+ 		    {
+ 		      succ_or_pred_bb->count = new_count;
+ 		      if (!is_bb_annotated (succ_or_pred_bb, *annotated_bb))
+ 			set_bb_annotated (succ_or_pred_bb, annotated_bb);
+ 		    }
+ 		}
+ 	   }
+ 	else
+ 	  AFDO_EINFO (unknown_edge)->set_count (profile_count::zero().afdo ());
+ 	AFDO_EINFO (unknown_edge)->set_annotated ();
+ 	changed = true;
+       }
+   }
+   return changed;
+ }
+ 
+ /* Special propagation for circuit expressions. Because GCC translates
+    control flow into data flow for circuit expressions. E.g.
+    BB1:
+    if (a && b)
+      BB2
+    else
+      BB3
+ 
+    will be translated into:
+ 
+    BB1:
+      if (a)
+        goto BB.t1
+      else
+        goto BB.t3
+    BB.t1:
+      if (b)
+        goto BB.t2
+      else
+        goto BB.t3
+    BB.t2:
+      goto BB.t3
+    BB.t3:
+      tmp = PHI (0 (BB1), 0 (BB.t1), 1 (BB.t2)
+      if (tmp)
+        goto BB2
+      else
+        goto BB3
+ 
+    In this case, we need to propagate through PHI to determine the edge
+    count of BB1->BB.t1, BB.t1->BB.t2.  */
+ 
+ static void
+ afdo_propagate_circuit (const bb_set &annotated_bb)
+ {
+   basic_block bb;
+   FOR_ALL_BB_FN (bb, cfun)
+   {
+     gimple *def_stmt;
+     tree cmp_rhs, cmp_lhs;
+     gimple *cmp_stmt = last_stmt (bb);
+     edge e;
+     edge_iterator ei;
+ 
+     if (!cmp_stmt || gimple_code (cmp_stmt) != GIMPLE_COND)
+       continue;
+     cmp_rhs = gimple_cond_rhs (cmp_stmt);
+     cmp_lhs = gimple_cond_lhs (cmp_stmt);
+     if (!TREE_CONSTANT (cmp_rhs)
+         || !(integer_zerop (cmp_rhs) || integer_onep (cmp_rhs)))
+       continue;
+     if (TREE_CODE (cmp_lhs) != SSA_NAME)
+       continue;
+     if (!is_bb_annotated (bb, annotated_bb))
+       continue;
+     def_stmt = SSA_NAME_DEF_STMT (cmp_lhs);
+     while (def_stmt && gimple_code (def_stmt) == GIMPLE_ASSIGN
+            && gimple_assign_single_p (def_stmt)
+            && TREE_CODE (gimple_assign_rhs1 (def_stmt)) == SSA_NAME)
+       def_stmt = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (def_stmt));
+     if (!def_stmt)
+       continue;
+     gphi *phi_stmt = dyn_cast <gphi *> (def_stmt);
+     if (!phi_stmt)
+       continue;
+     FOR_EACH_EDGE (e, ei, bb->succs)
+     {
+       unsigned i, total = 0;
+       edge only_one;
+       bool check_value_one = (((integer_onep (cmp_rhs))
+                                ^ (gimple_cond_code (cmp_stmt) == EQ_EXPR))
+                               ^ ((e->flags & EDGE_TRUE_VALUE) != 0));
+       if (! AFDO_EINFO (e)->is_annotated ())
+         continue;
+       for (i = 0; i < gimple_phi_num_args (phi_stmt); i++)
+         {
+           tree val = gimple_phi_arg_def (phi_stmt, i);
+           edge ep = gimple_phi_arg_edge (phi_stmt, i);
+ 
+           if (!TREE_CONSTANT (val)
+               || !(integer_zerop (val) || integer_onep (val)))
+             continue;
+           if (check_value_one ^ integer_onep (val))
+             continue;
+           total++;
+           only_one = ep;
+           if (! (AFDO_EINFO (e)->get_count ()).nonzero_p ()
+ 	      && ! AFDO_EINFO (ep)->is_annotated ())
+ 	    {
+ 	      AFDO_EINFO (ep)->set_count (profile_count::zero ().afdo ());
+ 	      AFDO_EINFO (ep)->set_annotated ();
+ 	    }
+ 	}
+       if (total == 1 && ! AFDO_EINFO (only_one)->is_annotated ())
+ 	{
+ 	  AFDO_EINFO (only_one)->set_count (AFDO_EINFO (e)->get_count ());
+ 	  AFDO_EINFO (only_one)->set_annotated ();
+ 	}
+     }
+   }
+ }
+ 
+ /* Propagate the basic block count and edge count on the control flow
+    graph. We do the propagation iteratively until stablize.  */
+ 
+ static void
+ afdo_propagate (bb_set *annotated_bb)
+ {
+   basic_block bb;
+   bool changed = true;
+   int i = 0;
+ 
+   FOR_ALL_BB_FN (bb, cfun)
+   {
+     bb->count = ((basic_block)bb->aux)->count;
+     if (is_bb_annotated ((basic_block)bb->aux, *annotated_bb))
+       set_bb_annotated (bb, annotated_bb);
+   }
+ 
+   while (changed && i++ < 10)
+     {
+       changed = false;
+ 
+       if (afdo_propagate_edge (true, annotated_bb))
+         changed = true;
+       if (afdo_propagate_edge (false, annotated_bb))
+         changed = true;
+       afdo_propagate_circuit (*annotated_bb);
+     }
+ }
+ 
+ /* Propagate counts on control flow graph and calculate branch
+    probabilities.  */
+ 
+ static void
+ afdo_calculate_branch_prob (bb_set *annotated_bb)
+ {
+   edge e;
+   edge_iterator ei;
+   basic_block bb;
+ 
+   calculate_dominance_info (CDI_POST_DOMINATORS);
+   calculate_dominance_info (CDI_DOMINATORS);
+   loop_optimizer_init (0);
+ 
+   FOR_ALL_BB_FN (bb, cfun)
+     {
+       gcc_assert (bb->aux == NULL);
+       FOR_EACH_EDGE (e, ei, bb->succs)
+ 	{
+ 	  gcc_assert (e->aux == NULL);
+ 	  e->aux = new edge_info ();
+ 	}
+     }
+ 
+   afdo_find_equiv_class (annotated_bb);
+   afdo_propagate (annotated_bb);
+ 
+   FOR_EACH_BB_FN (bb, cfun)
+   {
+     int num_unknown_succ = 0;
+     profile_count total_count = profile_count::zero ().afdo ();
+ 
+     FOR_EACH_EDGE (e, ei, bb->succs)
+     {
+       gcc_assert (AFDO_EINFO (e) != NULL);
+       if (! AFDO_EINFO (e)->is_annotated ())
+         num_unknown_succ++;
+       else
+         total_count += AFDO_EINFO (e)->get_count ();
+     }
+     if (num_unknown_succ == 0 && total_count > profile_count::zero ())
+       {
+ 	FOR_EACH_EDGE (e, ei, bb->succs)
+ 	  e->probability
+ 	    = AFDO_EINFO (e)->get_count ().probability_in (total_count);
+       }
+   }
+   FOR_ALL_BB_FN (bb, cfun)
+     {
+       bb->aux = NULL;
+       FOR_EACH_EDGE (e, ei, bb->succs)
+ 	if (AFDO_EINFO (e) != NULL)
+ 	  {
+ 	    delete AFDO_EINFO (e);
+ 	    e->aux = NULL;
+ 	  }
+     }
+ 
+   loop_optimizer_finalize ();
+   free_dominance_info (CDI_DOMINATORS);
+   free_dominance_info (CDI_POST_DOMINATORS);
+ }
+ 
+ /* Perform value profile transformation using AutoFDO profile. Add the
+    promoted stmts to PROMOTED_STMTS. Return TRUE if there is any
+    indirect call promoted.  */
+ 
+ static bool
+ afdo_vpt_for_early_inline (stmt_set *promoted_stmts)
+ {
+   basic_block bb;
+   if (afdo_source_profile->get_function_instance_by_decl (
+           current_function_decl) == NULL)
+     return false;
+ 
+   compute_fn_summary (cgraph_node::get (current_function_decl), true);
+ 
+   bool has_vpt = false;
+   FOR_EACH_BB_FN (bb, cfun)
+   {
+     if (!has_indirect_call (bb))
+       continue;
+     gimple_stmt_iterator gsi;
+ 
+     gcov_type bb_count = 0;
+     for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+       {
+         count_info info;
+ 	gimple *stmt = gsi_stmt (gsi);
+         if (afdo_source_profile->get_count_info (stmt, &info))
+           bb_count = MAX (bb_count, info.count);
+       }
+ 
+     for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+       {
+         gcall *stmt = dyn_cast <gcall *> (gsi_stmt (gsi));
+         /* IC_promotion and early_inline_2 is done in multiple iterations.
+            No need to promoted the stmt if its in promoted_stmts (means
+            it is already been promoted in the previous iterations).  */
+         if ((!stmt) || gimple_call_fn (stmt) == NULL
+             || TREE_CODE (gimple_call_fn (stmt)) == FUNCTION_DECL
+             || promoted_stmts->find (stmt) != promoted_stmts->end ())
+           continue;
+ 
+         count_info info;
+         afdo_source_profile->get_count_info (stmt, &info);
+         info.count = bb_count;
+         if (afdo_source_profile->update_inlined_ind_target (stmt, &info))
+           {
+             /* Promote the indirect call and update the promoted_stmts.  */
+             promoted_stmts->insert (stmt);
+             if (afdo_vpt (&gsi, info.targets, true))
+               has_vpt = true;
+           }
+       }
+   }
+ 
+   if (has_vpt)
+     {
+       unsigned todo = optimize_inline_calls (current_function_decl);
+       if (todo & TODO_update_ssa_any)
+        update_ssa (TODO_update_ssa);
+       return true;
+     }
+ 
+   return false;
+ }
+ 
+ /* Annotate auto profile to the control flow graph. Do not annotate value
+    profile for stmts in PROMOTED_STMTS.  */
+ 
+ static void
+ afdo_annotate_cfg (const stmt_set &promoted_stmts)
+ {
+   basic_block bb;
+   bb_set annotated_bb;
+   const function_instance *s
+       = afdo_source_profile->get_function_instance_by_decl (
+           current_function_decl);
+ 
+   if (s == NULL)
+     return;
+   cgraph_node::get (current_function_decl)->count
+      = profile_count::from_gcov_type (s->head_count ()).afdo ();
+   ENTRY_BLOCK_PTR_FOR_FN (cfun)->count
+      = profile_count::from_gcov_type (s->head_count ()).afdo ();
+   EXIT_BLOCK_PTR_FOR_FN (cfun)->count = profile_count::zero ().afdo ();
+   profile_count max_count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
+ 
+   FOR_EACH_BB_FN (bb, cfun)
+     {
+       /* As autoFDO uses sampling approach, we have to assume that all
+ 	 counters are zero when not seen by autoFDO.  */
+       bb->count = profile_count::zero ().afdo ();
+       if (afdo_set_bb_count (bb, promoted_stmts))
+ 	set_bb_annotated (bb, &annotated_bb);
+       if (bb->count > max_count)
+ 	max_count = bb->count;
+     }
+   if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count
+       > ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb->count)
+     {
+       ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb->count
+           = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
+       set_bb_annotated (ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb, &annotated_bb);
+     }
+   if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count
+       > EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb->count)
+     {
+       EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb->count
+           = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
+       set_bb_annotated (EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb, &annotated_bb);
+     }
+   afdo_source_profile->mark_annotated (
+       DECL_SOURCE_LOCATION (current_function_decl));
+   afdo_source_profile->mark_annotated (cfun->function_start_locus);
+   afdo_source_profile->mark_annotated (cfun->function_end_locus);
+   if (max_count > profile_count::zero ())
+     {
+       /* Calculate, propagate count and probability information on CFG.  */
+       afdo_calculate_branch_prob (&annotated_bb);
+     }
+   update_max_bb_count ();
+   profile_status_for_fn (cfun) = PROFILE_READ;
+   if (flag_value_profile_transformations)
+     {
+       gimple_value_profile_transformations ();
+       free_dominance_info (CDI_DOMINATORS);
+       free_dominance_info (CDI_POST_DOMINATORS);
+       update_ssa (TODO_update_ssa);
+     }
+ }
+ 
+ /* Wrapper function to invoke early inliner.  */
+ 
+ static void
+ early_inline ()
+ {
+   compute_fn_summary (cgraph_node::get (current_function_decl), true);
+   unsigned todo = early_inliner (cfun);
+   if (todo & TODO_update_ssa_any)
+     update_ssa (TODO_update_ssa);
+ }
+ 
+ /* Use AutoFDO profile to annoate the control flow graph.
+    Return the todo flag.  */
+ 
+ static unsigned int
+ auto_profile (void)
+ {
+   struct cgraph_node *node;
+ 
+   if (symtab->state == FINISHED)
+     return 0;
+ 
+   init_node_map (true);
+   profile_info = autofdo::afdo_profile_info;
+ 
+   FOR_EACH_FUNCTION (node)
+   {
+     if (!gimple_has_body_p (node->decl))
+       continue;
+ 
+     /* Don't profile functions produced for builtin stuff.  */
+     if (DECL_SOURCE_LOCATION (node->decl) == BUILTINS_LOCATION)
+       continue;
+ 
+     push_cfun (DECL_STRUCT_FUNCTION (node->decl));
+ 
+     /* First do indirect call promotion and early inline to make the
+        IR match the profiled binary before actual annotation.
+ 
+        This is needed because an indirect call might have been promoted
+        and inlined in the profiled binary. If we do not promote and
+        inline these indirect calls before annotation, the profile for
+        these promoted functions will be lost.
+ 
+        e.g. foo() --indirect_call--> bar()
+        In profiled binary, the callsite is promoted and inlined, making
+        the profile look like:
+ 
+        foo: {
+          loc_foo_1: count_1
+          bar@loc_foo_2: {
+            loc_bar_1: count_2
+            loc_bar_2: count_3
+          }
+        }
+ 
+        Before AutoFDO pass, loc_foo_2 is not promoted thus not inlined.
+        If we perform annotation on it, the profile inside bar@loc_foo2
+        will be wasted.
+ 
+        To avoid this, we promote loc_foo_2 and inline the promoted bar
+        function before annotation, so the profile inside bar@loc_foo2
+        will be useful.  */
+     autofdo::stmt_set promoted_stmts;
+     for (int i = 0; i < 10; i++)
+       {
+         if (!flag_value_profile_transformations
+             || !autofdo::afdo_vpt_for_early_inline (&promoted_stmts))
+           break;
+         early_inline ();
+       }
+ 
+     early_inline ();
+     autofdo::afdo_annotate_cfg (promoted_stmts);
+     compute_function_frequency ();
+ 
+     /* Local pure-const may imply need to fixup the cfg.  */
+     if (execute_fixup_cfg () & TODO_cleanup_cfg)
+       cleanup_tree_cfg ();
+ 
+     free_dominance_info (CDI_DOMINATORS);
+     free_dominance_info (CDI_POST_DOMINATORS);
+     cgraph_edge::rebuild_edges ();
+     compute_fn_summary (cgraph_node::get (current_function_decl), true);
+     pop_cfun ();
+   }
+ 
+   return TODO_rebuild_cgraph_edges;
+ }
+ } /* namespace autofdo.  */
+ 
+ /* Read the profile from the profile data file.  */
+ 
+ void
+ read_autofdo_file (void)
+ {
+   if (auto_profile_file == NULL)
+     auto_profile_file = DEFAULT_AUTO_PROFILE_FILE;
+ 
+   autofdo::afdo_profile_info = XNEW (gcov_summary);
+   autofdo::afdo_profile_info->runs = 1;
+   autofdo::afdo_profile_info->sum_max = 0;
+ 
+   /* Read the profile from the profile file.  */
+   autofdo::read_profile ();
+ }
+ 
+ /* Free the resources.  */
+ 
+ void
+ end_auto_profile (void)
+ {
+   delete autofdo::afdo_source_profile;
+   delete autofdo::afdo_string_table;
+   profile_info = NULL;
+ }
+ 
+ /* Returns TRUE if EDGE is hot enough to be inlined early.  */
+ 
+ bool
+ afdo_callsite_hot_enough_for_early_inline (struct cgraph_edge *edge)
+ {
+   gcov_type count
+       = autofdo::afdo_source_profile->get_callsite_total_count (edge);
+ 
+   if (count > 0)
+     {
+       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);
+       profile_info = saved_profile_info;
+       return is_hot;
+     }
+ 
+   return false;
+ }
+ 
+ namespace
+ {
+ 
+ const pass_data pass_data_ipa_auto_profile = {
+   SIMPLE_IPA_PASS, "afdo", /* name */
+   OPTGROUP_NONE,           /* optinfo_flags */
+   TV_IPA_AUTOFDO,          /* tv_id */
+   0,                       /* properties_required */
+   0,                       /* properties_provided */
+   0,                       /* properties_destroyed */
+   0,                       /* todo_flags_start */
+   0,                       /* todo_flags_finish */
+ };
+ 
+ class pass_ipa_auto_profile : public simple_ipa_opt_pass
+ {
+ public:
+   pass_ipa_auto_profile (gcc::context *ctxt)
+       : simple_ipa_opt_pass (pass_data_ipa_auto_profile, ctxt)
+   {
+   }
+ 
+   /* opt_pass methods: */
+   virtual bool
+   gate (function *)
+   {
+     return flag_auto_profile;
+   }
+   virtual unsigned int
+   execute (function *)
+   {
+     return autofdo::auto_profile ();
+   }
+ }; // class pass_ipa_auto_profile
+ 
+ } // anon namespace
+ 
+ simple_ipa_opt_pass *
+ make_pass_ipa_auto_profile (gcc::context *ctxt)
+ {
+   return new pass_ipa_auto_profile (ctxt);
+ }
diff -Nrcpad gcc-11.3.0/gcc/auto-profile.h gcc-12.1.0/gcc/auto-profile.h
*** gcc-11.3.0/gcc/auto-profile.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/auto-profile.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
! /* auto-profile.h - Defines data exported from auto-profile.c
!    Copyright (C) 2014-2021 Free Software Foundation, Inc.
     Contributed by Dehao Chen (dehao@google.com)
  
  This file is part of GCC.
--- 1,5 ----
! /* auto-profile.h - Defines data exported from auto-profile.cc
!    Copyright (C) 2014-2022 Free Software Foundation, Inc.
     Contributed by Dehao Chen (dehao@google.com)
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/backend.h gcc-12.1.0/gcc/backend.h
*** gcc-11.3.0/gcc/backend.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/backend.h	Fri May  6 07:30:56 2022
***************
*** 1,6 ****
  /* Common Backend requirements. 
  
!    Copyright (C) 2015-2021 Free Software Foundation, Inc.
     Contributed by Andrew MacLeod <amacleod@redhat.com>
  
  This file is part of GCC.
--- 1,6 ----
  /* Common Backend requirements. 
  
!    Copyright (C) 2015-2022 Free Software Foundation, Inc.
     Contributed by Andrew MacLeod <amacleod@redhat.com>
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/basic-block.h gcc-12.1.0/gcc/basic-block.h
*** gcc-11.3.0/gcc/basic-block.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/basic-block.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Define control flow data structures for the CFG.
!    Copyright (C) 1987-2021 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Define control flow data structures for the CFG.
!    Copyright (C) 1987-2022 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** struct GTY((chain_next ("%h.next_bb"), c
*** 146,152 ****
    /* The index of this block.  */
    int index;
  
!   /* Expected number of executions: calculated in profile.c.  */
    profile_count count;
  
    /* The discriminator for this block.  The discriminator distinguishes
--- 146,152 ----
    /* The index of this block.  */
    int index;
  
!   /* Expected number of executions: calculated in profile.cc.  */
    profile_count count;
  
    /* The discriminator for this block.  The discriminator distinguishes
diff -Nrcpad gcc-11.3.0/gcc/bb-reorder.c gcc-12.1.0/gcc/bb-reorder.c
*** gcc-11.3.0/gcc/bb-reorder.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/bb-reorder.c	Thu Jan  1 00:00:00 1970
***************
*** 1,3054 ****
- /* Basic block reordering routines for the GNU compiler.
-    Copyright (C) 2000-2021 Free Software Foundation, Inc.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 3, or (at your option)
-    any later version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-    License for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- /* This file contains the "reorder blocks" pass, which changes the control
-    flow of a function to encounter fewer branches; the "partition blocks"
-    pass, which divides the basic blocks into "hot" and "cold" partitions,
-    which are kept separate; and the "duplicate computed gotos" pass, which
-    duplicates blocks ending in an indirect jump.
- 
-    There are two algorithms for "reorder blocks": the "simple" algorithm,
-    which just rearranges blocks, trying to minimize the number of executed
-    unconditional branches; and the "software trace cache" algorithm, which
-    also copies code, and in general tries a lot harder to have long linear
-    pieces of machine code executed.  This algorithm is described next.  */
- 
- /* This (greedy) algorithm constructs traces in several rounds.
-    The construction starts from "seeds".  The seed for the first round
-    is the entry point of the function.  When there are more than one seed,
-    the one with the lowest key in the heap is selected first (see bb_to_key).
-    Then the algorithm repeatedly adds the most probable successor to the end
-    of a trace.  Finally it connects the traces.
- 
-    There are two parameters: Branch Threshold and Exec Threshold.
-    If the probability of an edge to a successor of the current basic block is
-    lower than Branch Threshold or its count is lower than Exec Threshold,
-    then the successor will be the seed in one of the next rounds.
-    Each round has these parameters lower than the previous one.
-    The last round has to have these parameters set to zero so that the
-    remaining blocks are picked up.
- 
-    The algorithm selects the most probable successor from all unvisited
-    successors and successors that have been added to this trace.
-    The other successors (that has not been "sent" to the next round) will be
-    other seeds for this round and the secondary traces will start from them.
-    If the successor has not been visited in this trace, it is added to the
-    trace (however, there is some heuristic for simple branches).
-    If the successor has been visited in this trace, a loop has been found.
-    If the loop has many iterations, the loop is rotated so that the source
-    block of the most probable edge going out of the loop is the last block
-    of the trace.
-    If the loop has few iterations and there is no edge from the last block of
-    the loop going out of the loop, the loop header is duplicated.
- 
-    When connecting traces, the algorithm first checks whether there is an edge
-    from the last block of a trace to the first block of another trace.
-    When there are still some unconnected traces it checks whether there exists
-    a basic block BB such that BB is a successor of the last block of a trace
-    and BB is a predecessor of the first block of another trace.  In this case,
-    BB is duplicated, added at the end of the first trace and the traces are
-    connected through it.
-    The rest of traces are simply connected so there will be a jump to the
-    beginning of the rest of traces.
- 
-    The above description is for the full algorithm, which is used when the
-    function is optimized for speed.  When the function is optimized for size,
-    in order to reduce long jumps and connect more fallthru edges, the
-    algorithm is modified as follows:
-    (1) Break long traces to short ones.  A trace is broken at a block that has
-    multiple predecessors/ successors during trace discovery.  When connecting
-    traces, only connect Trace n with Trace n + 1.  This change reduces most
-    long jumps compared with the above algorithm.
-    (2) Ignore the edge probability and count for fallthru edges.
-    (3) Keep the original order of blocks when there is no chance to fall
-    through.  We rely on the results of cfg_cleanup.
- 
-    To implement the change for code size optimization, block's index is
-    selected as the key and all traces are found in one round.
- 
-    References:
- 
-    "Software Trace Cache"
-    A. Ramirez, J. Larriba-Pey, C. Navarro, J. Torrellas and M. Valero; 1999
-    http://citeseer.nj.nec.com/15361.html
- 
- */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "backend.h"
- #include "target.h"
- #include "rtl.h"
- #include "tree.h"
- #include "cfghooks.h"
- #include "df.h"
- #include "memmodel.h"
- #include "optabs.h"
- #include "regs.h"
- #include "emit-rtl.h"
- #include "output.h"
- #include "expr.h"
- #include "tree-pass.h"
- #include "cfgrtl.h"
- #include "cfganal.h"
- #include "cfgbuild.h"
- #include "cfgcleanup.h"
- #include "bb-reorder.h"
- #include "except.h"
- #include "alloc-pool.h"
- #include "fibonacci_heap.h"
- #include "stringpool.h"
- #include "attribs.h"
- #include "common/common-target.h"
- 
- /* The number of rounds.  In most cases there will only be 4 rounds, but
-    when partitioning hot and cold basic blocks into separate sections of
-    the object file there will be an extra round.  */
- #define N_ROUNDS 5
- 
- struct target_bb_reorder default_target_bb_reorder;
- #if SWITCHABLE_TARGET
- struct target_bb_reorder *this_target_bb_reorder = &default_target_bb_reorder;
- #endif
- 
- #define uncond_jump_length \
-   (this_target_bb_reorder->x_uncond_jump_length)
- 
- /* Branch thresholds in thousandths (per mille) of the REG_BR_PROB_BASE.  */
- static const int branch_threshold[N_ROUNDS] = {400, 200, 100, 0, 0};
- 
- /* Exec thresholds in thousandths (per mille) of the count of bb 0.  */
- static const int exec_threshold[N_ROUNDS] = {500, 200, 50, 0, 0};
- 
- /* If edge count is lower than DUPLICATION_THRESHOLD per mille of entry
-    block the edge destination is not duplicated while connecting traces.  */
- #define DUPLICATION_THRESHOLD 100
- 
- typedef fibonacci_heap <long, basic_block_def> bb_heap_t;
- typedef fibonacci_node <long, basic_block_def> bb_heap_node_t;
- 
- /* Structure to hold needed information for each basic block.  */
- struct bbro_basic_block_data
- {
-   /* Which trace is the bb start of (-1 means it is not a start of any).  */
-   int start_of_trace;
- 
-   /* Which trace is the bb end of (-1 means it is not an end of any).  */
-   int end_of_trace;
- 
-   /* Which trace is the bb in?  */
-   int in_trace;
- 
-   /* Which trace was this bb visited in?  */
-   int visited;
- 
-   /* Cached maximum frequency of interesting incoming edges.
-      Minus one means not yet computed.  */
-   int priority;
- 
-   /* Which heap is BB in (if any)?  */
-   bb_heap_t *heap;
- 
-   /* Which heap node is BB in (if any)?  */
-   bb_heap_node_t *node;
- };
- 
- /* The current size of the following dynamic array.  */
- static int array_size;
- 
- /* The array which holds needed information for basic blocks.  */
- static bbro_basic_block_data *bbd;
- 
- /* To avoid frequent reallocation the size of arrays is greater than needed,
-    the number of elements is (not less than) 1.25 * size_wanted.  */
- #define GET_ARRAY_SIZE(X) ((((X) / 4) + 1) * 5)
- 
- /* Free the memory and set the pointer to NULL.  */
- #define FREE(P) (gcc_assert (P), free (P), P = 0)
- 
- /* Structure for holding information about a trace.  */
- struct trace
- {
-   /* First and last basic block of the trace.  */
-   basic_block first, last;
- 
-   /* The round of the STC creation which this trace was found in.  */
-   int round;
- 
-   /* The length (i.e. the number of basic blocks) of the trace.  */
-   int length;
- };
- 
- /* Maximum count of one of the entry blocks.  */
- static profile_count max_entry_count;
- 
- /* Local function prototypes.  */
- static void find_traces_1_round (int, profile_count, struct trace *, int *,
- 				 int, bb_heap_t **, int);
- static basic_block copy_bb (basic_block, edge, basic_block, int);
- static long bb_to_key (basic_block);
- static bool better_edge_p (const_basic_block, const_edge, profile_probability,
- 			   profile_count, profile_probability, profile_count,
- 			   const_edge);
- static bool copy_bb_p (const_basic_block, int);
- 
- /* Return the trace number in which BB was visited.  */
- 
- static int
- bb_visited_trace (const_basic_block bb)
- {
-   gcc_assert (bb->index < array_size);
-   return bbd[bb->index].visited;
- }
- 
- /* This function marks BB that it was visited in trace number TRACE.  */
- 
- static void
- mark_bb_visited (basic_block bb, int trace)
- {
-   bbd[bb->index].visited = trace;
-   if (bbd[bb->index].heap)
-     {
-       bbd[bb->index].heap->delete_node (bbd[bb->index].node);
-       bbd[bb->index].heap = NULL;
-       bbd[bb->index].node = NULL;
-     }
- }
- 
- /* Check to see if bb should be pushed into the next round of trace
-    collections or not.  Reasons for pushing the block forward are 1).
-    If the block is cold, we are doing partitioning, and there will be
-    another round (cold partition blocks are not supposed to be
-    collected into traces until the very last round); or 2). There will
-    be another round, and the basic block is not "hot enough" for the
-    current round of trace collection.  */
- 
- static bool
- push_to_next_round_p (const_basic_block bb, int round, int number_of_rounds,
- 		      profile_count count_th)
- {
-   bool there_exists_another_round;
-   bool block_not_hot_enough;
- 
-   there_exists_another_round = round < number_of_rounds - 1;
- 
-   block_not_hot_enough = (bb->count < count_th
- 			  || probably_never_executed_bb_p (cfun, bb));
- 
-   if (there_exists_another_round
-       && block_not_hot_enough)
-     return true;
-   else
-     return false;
- }
- 
- /* Find the traces for Software Trace Cache.  Chain each trace through
-    RBI()->next.  Store the number of traces to N_TRACES and description of
-    traces to TRACES.  */
- 
- static void
- find_traces (int *n_traces, struct trace *traces)
- {
-   int i;
-   int number_of_rounds;
-   edge e;
-   edge_iterator ei;
-   bb_heap_t *heap = new bb_heap_t (LONG_MIN);
- 
-   /* Add one extra round of trace collection when partitioning hot/cold
-      basic blocks into separate sections.  The last round is for all the
-      cold blocks (and ONLY the cold blocks).  */
- 
-   number_of_rounds = N_ROUNDS - 1;
- 
-   /* Insert entry points of function into heap.  */
-   max_entry_count = profile_count::zero ();
-   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR_FOR_FN (cfun)->succs)
-     {
-       bbd[e->dest->index].heap = heap;
-       bbd[e->dest->index].node = heap->insert (bb_to_key (e->dest), e->dest);
-       if (e->dest->count > max_entry_count)
- 	max_entry_count = e->dest->count;
-     }
- 
-   /* Find the traces.  */
-   for (i = 0; i < number_of_rounds; i++)
-     {
-       profile_count count_threshold;
- 
-       if (dump_file)
- 	fprintf (dump_file, "STC - round %d\n", i + 1);
- 
-       count_threshold = max_entry_count.apply_scale (exec_threshold[i], 1000);
- 
-       find_traces_1_round (REG_BR_PROB_BASE * branch_threshold[i] / 1000,
- 			   count_threshold, traces, n_traces, i, &heap,
- 			   number_of_rounds);
-     }
-   delete heap;
- 
-   if (dump_file)
-     {
-       for (i = 0; i < *n_traces; i++)
- 	{
- 	  basic_block bb;
- 	  fprintf (dump_file, "Trace %d (round %d):  ", i + 1,
- 		   traces[i].round + 1);
- 	  for (bb = traces[i].first;
- 	       bb != traces[i].last;
- 	       bb = (basic_block) bb->aux)
- 	    {
- 	      fprintf (dump_file, "%d [", bb->index);
- 	      bb->count.dump (dump_file);
- 	      fprintf (dump_file, "] ");
- 	    }
- 	  fprintf (dump_file, "%d [", bb->index);
- 	  bb->count.dump (dump_file);
- 	  fprintf (dump_file, "]\n");
- 	}
-       fflush (dump_file);
-     }
- }
- 
- /* Rotate loop whose back edge is BACK_EDGE in the tail of trace TRACE
-    (with sequential number TRACE_N).  */
- 
- static basic_block
- rotate_loop (edge back_edge, struct trace *trace, int trace_n)
- {
-   basic_block bb;
- 
-   /* Information about the best end (end after rotation) of the loop.  */
-   basic_block best_bb = NULL;
-   edge best_edge = NULL;
-   profile_count best_count = profile_count::uninitialized ();
-   /* The best edge is preferred when its destination is not visited yet
-      or is a start block of some trace.  */
-   bool is_preferred = false;
- 
-   /* Find the most frequent edge that goes out from current trace.  */
-   bb = back_edge->dest;
-   do
-     {
-       edge e;
-       edge_iterator ei;
- 
-       FOR_EACH_EDGE (e, ei, bb->succs)
- 	if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)
- 	    && bb_visited_trace (e->dest) != trace_n
- 	    && (e->flags & EDGE_CAN_FALLTHRU)
- 	    && !(e->flags & EDGE_COMPLEX))
- 	{
- 	  if (is_preferred)
- 	    {
- 	      /* The best edge is preferred.  */
- 	      if (!bb_visited_trace (e->dest)
- 		  || bbd[e->dest->index].start_of_trace >= 0)
- 		{
- 		  /* The current edge E is also preferred.  */
- 		  if (e->count () > best_count)
- 		    {
- 		      best_count = e->count ();
- 		      best_edge = e;
- 		      best_bb = bb;
- 		    }
- 		}
- 	    }
- 	  else
- 	    {
- 	      if (!bb_visited_trace (e->dest)
- 		  || bbd[e->dest->index].start_of_trace >= 0)
- 		{
- 		  /* The current edge E is preferred.  */
- 		  is_preferred = true;
- 		  best_count = e->count ();
- 		  best_edge = e;
- 		  best_bb = bb;
- 		}
- 	      else
- 		{
- 		  if (!best_edge || e->count () > best_count)
- 		    {
- 		      best_count = e->count ();
- 		      best_edge = e;
- 		      best_bb = bb;
- 		    }
- 		}
- 	    }
- 	}
-       bb = (basic_block) bb->aux;
-     }
-   while (bb != back_edge->dest);
- 
-   if (best_bb)
-     {
-       /* Rotate the loop so that the BEST_EDGE goes out from the last block of
- 	 the trace.  */
-       if (back_edge->dest == trace->first)
- 	{
- 	  trace->first = (basic_block) best_bb->aux;
- 	}
-       else
- 	{
- 	  basic_block prev_bb;
- 
- 	  for (prev_bb = trace->first;
- 	       prev_bb->aux != back_edge->dest;
- 	       prev_bb = (basic_block) prev_bb->aux)
- 	    ;
- 	  prev_bb->aux = best_bb->aux;
- 
- 	  /* Try to get rid of uncond jump to cond jump.  */
- 	  if (single_succ_p (prev_bb))
- 	    {
- 	      basic_block header = single_succ (prev_bb);
- 
- 	      /* Duplicate HEADER if it is a small block containing cond jump
- 		 in the end.  */
- 	      if (any_condjump_p (BB_END (header)) && copy_bb_p (header, 0)
- 		  && !CROSSING_JUMP_P (BB_END (header)))
- 		copy_bb (header, single_succ_edge (prev_bb), prev_bb, trace_n);
- 	    }
- 	}
-     }
-   else
-     {
-       /* We have not found suitable loop tail so do no rotation.  */
-       best_bb = back_edge->src;
-     }
-   best_bb->aux = NULL;
-   return best_bb;
- }
- 
- /* One round of finding traces.  Find traces for BRANCH_TH and EXEC_TH i.e. do
-    not include basic blocks whose probability is lower than BRANCH_TH or whose
-    count is lower than EXEC_TH into traces (or whose count is lower than
-    COUNT_TH).  Store the new traces into TRACES and modify the number of
-    traces *N_TRACES.  Set the round (which the trace belongs to) to ROUND.
-    The function expects starting basic blocks to be in *HEAP and will delete
-    *HEAP and store starting points for the next round into new *HEAP.  */
- 
- static void
- find_traces_1_round (int branch_th, profile_count count_th,
- 		     struct trace *traces, int *n_traces, int round,
- 		     bb_heap_t **heap, int number_of_rounds)
- {
-   /* Heap for discarded basic blocks which are possible starting points for
-      the next round.  */
-   bb_heap_t *new_heap = new bb_heap_t (LONG_MIN);
-   bool for_size = optimize_function_for_size_p (cfun);
- 
-   while (!(*heap)->empty ())
-     {
-       basic_block bb;
-       struct trace *trace;
-       edge best_edge, e;
-       long key;
-       edge_iterator ei;
- 
-       bb = (*heap)->extract_min ();
-       bbd[bb->index].heap = NULL;
-       bbd[bb->index].node = NULL;
- 
-       if (dump_file)
- 	fprintf (dump_file, "Getting bb %d\n", bb->index);
- 
-       /* If the BB's count is too low, send BB to the next round.  When
- 	 partitioning hot/cold blocks into separate sections, make sure all
- 	 the cold blocks (and ONLY the cold blocks) go into the (extra) final
- 	 round.  When optimizing for size, do not push to next round.  */
- 
-       if (!for_size
- 	  && push_to_next_round_p (bb, round, number_of_rounds,
- 				   count_th))
- 	{
- 	  int key = bb_to_key (bb);
- 	  bbd[bb->index].heap = new_heap;
- 	  bbd[bb->index].node = new_heap->insert (key, bb);
- 
- 	  if (dump_file)
- 	    fprintf (dump_file,
- 		     "  Possible start point of next round: %d (key: %d)\n",
- 		     bb->index, key);
- 	  continue;
- 	}
- 
-       trace = traces + *n_traces;
-       trace->first = bb;
-       trace->round = round;
-       trace->length = 0;
-       bbd[bb->index].in_trace = *n_traces;
-       (*n_traces)++;
- 
-       do
- 	{
- 	  bool ends_in_call;
- 
- 	  /* The probability and count of the best edge.  */
- 	  profile_probability best_prob = profile_probability::uninitialized ();
- 	  profile_count best_count = profile_count::uninitialized ();
- 
- 	  best_edge = NULL;
- 	  mark_bb_visited (bb, *n_traces);
- 	  trace->length++;
- 
- 	  if (dump_file)
- 	    fprintf (dump_file, "Basic block %d was visited in trace %d\n",
- 		     bb->index, *n_traces);
- 
- 	  ends_in_call = block_ends_with_call_p (bb);
- 
- 	  /* Select the successor that will be placed after BB.  */
- 	  FOR_EACH_EDGE (e, ei, bb->succs)
- 	    {
- 	      gcc_assert (!(e->flags & EDGE_FAKE));
- 
- 	      if (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
- 		continue;
- 
- 	      if (bb_visited_trace (e->dest)
- 		  && bb_visited_trace (e->dest) != *n_traces)
- 		continue;
- 
- 	      /* If partitioning hot/cold basic blocks, don't consider edges
- 		 that cross section boundaries.  */
- 	      if (BB_PARTITION (e->dest) != BB_PARTITION (bb))
- 		continue;
- 
- 	      profile_probability prob = e->probability;
- 	      profile_count count = e->dest->count;
- 
- 	      /* The only sensible preference for a call instruction is the
- 		 fallthru edge.  Don't bother selecting anything else.  */
- 	      if (ends_in_call)
- 		{
- 		  if (e->flags & EDGE_CAN_FALLTHRU)
- 		    {
- 		      best_edge = e;
- 		      best_prob = prob;
- 		      best_count = count;
- 		    }
- 		  continue;
- 		}
- 
- 	      /* Edge that cannot be fallthru or improbable or infrequent
- 		 successor (i.e. it is unsuitable successor).  When optimizing
- 		 for size, ignore the probability and count.  */
- 	      if (!(e->flags & EDGE_CAN_FALLTHRU) || (e->flags & EDGE_COMPLEX)
- 		  || !prob.initialized_p ()
- 		  || ((prob.to_reg_br_prob_base () < branch_th
- 		      || e->count () < count_th) && (!for_size)))
- 		continue;
- 
- 	      if (better_edge_p (bb, e, prob, count, best_prob, best_count,
- 				 best_edge))
- 		{
- 		  best_edge = e;
- 		  best_prob = prob;
- 		  best_count = count;
- 		}
- 	    }
- 
- 	  /* If the best destination has multiple predecessors and can be
- 	     duplicated cheaper than a jump, don't allow it to be added to
- 	     a trace; we'll duplicate it when connecting the traces later.
- 	     However, we need to check that this duplication wouldn't leave
- 	     the best destination with only crossing predecessors, because
- 	     this would change its effective partition from hot to cold.  */
- 	  if (best_edge
- 	      && EDGE_COUNT (best_edge->dest->preds) >= 2
- 	      && copy_bb_p (best_edge->dest, 0))
- 	    {
- 	      bool only_crossing_preds = true;
- 	      edge e;
- 	      edge_iterator ei;
- 	      FOR_EACH_EDGE (e, ei, best_edge->dest->preds)
- 		if (e != best_edge && !(e->flags & EDGE_CROSSING))
- 		  {
- 		    only_crossing_preds = false;
- 		    break;
- 		  }
- 	      if (!only_crossing_preds)
- 		best_edge = NULL;
- 	    }
- 
- 	  /* If the best destination has multiple successors or predecessors,
- 	     don't allow it to be added when optimizing for size.  This makes
- 	     sure predecessors with smaller index are handled before the best
- 	     destination.  It breaks long trace and reduces long jumps.
- 
- 	     Take if-then-else as an example.
- 		A
- 	       / \
- 	      B   C
- 	       \ /
- 		D
- 	     If we do not remove the best edge B->D/C->D, the final order might
- 	     be A B D ... C.  C is at the end of the program.  If D's successors
- 	     and D are complicated, might need long jumps for A->C and C->D.
- 	     Similar issue for order: A C D ... B.
- 
- 	     After removing the best edge, the final result will be ABCD/ ACBD.
- 	     It does not add jump compared with the previous order.  But it
- 	     reduces the possibility of long jumps.  */
- 	  if (best_edge && for_size
- 	      && (EDGE_COUNT (best_edge->dest->succs) > 1
- 		 || EDGE_COUNT (best_edge->dest->preds) > 1))
- 	    best_edge = NULL;
- 
- 	  /* Add all non-selected successors to the heaps.  */
- 	  FOR_EACH_EDGE (e, ei, bb->succs)
- 	    {
- 	      if (e == best_edge
- 		  || e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun)
- 		  || bb_visited_trace (e->dest))
- 		continue;
- 
- 	      key = bb_to_key (e->dest);
- 
- 	      if (bbd[e->dest->index].heap)
- 		{
- 		  /* E->DEST is already in some heap.  */
- 		  if (key != bbd[e->dest->index].node->get_key ())
- 		    {
- 		      if (dump_file)
- 			{
- 			  fprintf (dump_file,
- 				   "Changing key for bb %d from %ld to %ld.\n",
- 				   e->dest->index,
- 				   (long) bbd[e->dest->index].node->get_key (),
- 				   key);
- 			}
- 		      bbd[e->dest->index].heap->replace_key
- 		        (bbd[e->dest->index].node, key);
- 		    }
- 		}
- 	      else
- 		{
- 		  bb_heap_t *which_heap = *heap;
- 
- 		  profile_probability prob = e->probability;
- 
- 		  if (!(e->flags & EDGE_CAN_FALLTHRU)
- 		      || (e->flags & EDGE_COMPLEX)
- 		      || !prob.initialized_p ()
- 		      || prob.to_reg_br_prob_base () < branch_th
- 		      || e->count () < count_th)
- 		    {
- 		      /* When partitioning hot/cold basic blocks, make sure
- 			 the cold blocks (and only the cold blocks) all get
- 			 pushed to the last round of trace collection.  When
- 			 optimizing for size, do not push to next round.  */
- 
- 		      if (!for_size && push_to_next_round_p (e->dest, round,
- 							     number_of_rounds,
- 							     count_th))
- 			which_heap = new_heap;
- 		    }
- 
- 		  bbd[e->dest->index].heap = which_heap;
- 		  bbd[e->dest->index].node = which_heap->insert (key, e->dest);
- 
- 		  if (dump_file)
- 		    {
- 		      fprintf (dump_file,
- 			       "  Possible start of %s round: %d (key: %ld)\n",
- 			       (which_heap == new_heap) ? "next" : "this",
- 			       e->dest->index, (long) key);
- 		    }
- 
- 		}
- 	    }
- 
- 	  if (best_edge) /* Suitable successor was found.  */
- 	    {
- 	      if (bb_visited_trace (best_edge->dest) == *n_traces)
- 		{
- 		  /* We do nothing with one basic block loops.  */
- 		  if (best_edge->dest != bb)
- 		    {
- 		      if (best_edge->count ()
- 			  > best_edge->dest->count.apply_scale (4, 5))
- 			{
- 			  /* The loop has at least 4 iterations.  If the loop
- 			     header is not the first block of the function
- 			     we can rotate the loop.  */
- 
- 			  if (best_edge->dest
- 			      != ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb)
- 			    {
- 			      if (dump_file)
- 				{
- 				  fprintf (dump_file,
- 					   "Rotating loop %d - %d\n",
- 					   best_edge->dest->index, bb->index);
- 				}
- 			      bb->aux = best_edge->dest;
- 			      bbd[best_edge->dest->index].in_trace =
- 							     (*n_traces) - 1;
- 			      bb = rotate_loop (best_edge, trace, *n_traces);
- 			    }
- 			}
- 		      else
- 			{
- 			  /* The loop has less than 4 iterations.  */
- 
- 			  if (single_succ_p (bb)
- 			      && copy_bb_p (best_edge->dest,
- 			      		    optimize_edge_for_speed_p
- 			      		    (best_edge)))
- 			    {
- 			      bb = copy_bb (best_edge->dest, best_edge, bb,
- 					    *n_traces);
- 			      trace->length++;
- 			    }
- 			}
- 		    }
- 
- 		  /* Terminate the trace.  */
- 		  break;
- 		}
- 	      else
- 		{
- 		  /* Check for a situation
- 
- 		    A
- 		   /|
- 		  B |
- 		   \|
- 		    C
- 
- 		  where
- 		  AB->count () + BC->count () >= AC->count ().
- 		  (i.e. 2 * B->count >= AC->count )
- 		  Best ordering is then A B C.
- 
- 		  When optimizing for size, A B C is always the best order.
- 
- 		  This situation is created for example by:
- 
- 		  if (A) B;
- 		  C;
- 
- 		  */
- 
- 		  FOR_EACH_EDGE (e, ei, bb->succs)
- 		    if (e != best_edge
- 			&& (e->flags & EDGE_CAN_FALLTHRU)
- 			&& !(e->flags & EDGE_COMPLEX)
- 			&& !bb_visited_trace (e->dest)
- 			&& single_pred_p (e->dest)
- 			&& !(e->flags & EDGE_CROSSING)
- 			&& single_succ_p (e->dest)
- 			&& (single_succ_edge (e->dest)->flags
- 			    & EDGE_CAN_FALLTHRU)
- 			&& !(single_succ_edge (e->dest)->flags & EDGE_COMPLEX)
- 			&& single_succ (e->dest) == best_edge->dest
- 			&& (e->dest->count.apply_scale (2, 1)
- 			    >= best_edge->count () || for_size))
- 		      {
- 			best_edge = e;
- 			if (dump_file)
- 			  fprintf (dump_file, "Selecting BB %d\n",
- 				   best_edge->dest->index);
- 			break;
- 		      }
- 
- 		  bb->aux = best_edge->dest;
- 		  bbd[best_edge->dest->index].in_trace = (*n_traces) - 1;
- 		  bb = best_edge->dest;
- 		}
- 	    }
- 	}
-       while (best_edge);
-       trace->last = bb;
-       bbd[trace->first->index].start_of_trace = *n_traces - 1;
-       if (bbd[trace->last->index].end_of_trace != *n_traces - 1)
- 	{
- 	  bbd[trace->last->index].end_of_trace = *n_traces - 1;
- 	  /* Update the cached maximum frequency for interesting predecessor
- 	     edges for successors of the new trace end.  */
- 	  FOR_EACH_EDGE (e, ei, trace->last->succs)
- 	    if (EDGE_FREQUENCY (e) > bbd[e->dest->index].priority)
- 	      bbd[e->dest->index].priority = EDGE_FREQUENCY (e);
- 	}
- 
-       /* The trace is terminated so we have to recount the keys in heap
- 	 (some block can have a lower key because now one of its predecessors
- 	 is an end of the trace).  */
-       FOR_EACH_EDGE (e, ei, bb->succs)
- 	{
- 	  if (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun)
- 	      || bb_visited_trace (e->dest))
- 	    continue;
- 
- 	  if (bbd[e->dest->index].heap)
- 	    {
- 	      key = bb_to_key (e->dest);
- 	      if (key != bbd[e->dest->index].node->get_key ())
- 		{
- 		  if (dump_file)
- 		    {
- 		      fprintf (dump_file,
- 			       "Changing key for bb %d from %ld to %ld.\n",
- 			       e->dest->index,
- 			       (long) bbd[e->dest->index].node->get_key (), key);
- 		    }
- 		  bbd[e->dest->index].heap->replace_key
- 		    (bbd[e->dest->index].node, key);
- 		}
- 	    }
- 	}
-     }
- 
-   delete (*heap);
- 
-   /* "Return" the new heap.  */
-   *heap = new_heap;
- }
- 
- /* Create a duplicate of the basic block OLD_BB and redirect edge E to it, add
-    it to trace after BB, mark OLD_BB visited and update pass' data structures
-    (TRACE is a number of trace which OLD_BB is duplicated to).  */
- 
- static basic_block
- copy_bb (basic_block old_bb, edge e, basic_block bb, int trace)
- {
-   basic_block new_bb;
- 
-   new_bb = duplicate_block (old_bb, e, bb);
-   BB_COPY_PARTITION (new_bb, old_bb);
- 
-   gcc_assert (e->dest == new_bb);
- 
-   if (dump_file)
-     fprintf (dump_file,
- 	     "Duplicated bb %d (created bb %d)\n",
- 	     old_bb->index, new_bb->index);
- 
-   if (new_bb->index >= array_size
-       || last_basic_block_for_fn (cfun) > array_size)
-     {
-       int i;
-       int new_size;
- 
-       new_size = MAX (last_basic_block_for_fn (cfun), new_bb->index + 1);
-       new_size = GET_ARRAY_SIZE (new_size);
-       bbd = XRESIZEVEC (bbro_basic_block_data, bbd, new_size);
-       for (i = array_size; i < new_size; i++)
- 	{
- 	  bbd[i].start_of_trace = -1;
- 	  bbd[i].end_of_trace = -1;
- 	  bbd[i].in_trace = -1;
- 	  bbd[i].visited = 0;
- 	  bbd[i].priority = -1;
- 	  bbd[i].heap = NULL;
- 	  bbd[i].node = NULL;
- 	}
-       array_size = new_size;
- 
-       if (dump_file)
- 	{
- 	  fprintf (dump_file,
- 		   "Growing the dynamic array to %d elements.\n",
- 		   array_size);
- 	}
-     }
- 
-   gcc_assert (!bb_visited_trace (e->dest));
-   mark_bb_visited (new_bb, trace);
-   new_bb->aux = bb->aux;
-   bb->aux = new_bb;
- 
-   bbd[new_bb->index].in_trace = trace;
- 
-   return new_bb;
- }
- 
- /* Compute and return the key (for the heap) of the basic block BB.  */
- 
- static long
- bb_to_key (basic_block bb)
- {
-   edge e;
-   edge_iterator ei;
- 
-   /* Use index as key to align with its original order.  */
-   if (optimize_function_for_size_p (cfun))
-     return bb->index;
- 
-   /* Do not start in probably never executed blocks.  */
- 
-   if (BB_PARTITION (bb) == BB_COLD_PARTITION
-       || probably_never_executed_bb_p (cfun, bb))
-     return BB_FREQ_MAX;
- 
-   /* Prefer blocks whose predecessor is an end of some trace
-      or whose predecessor edge is EDGE_DFS_BACK.  */
-   int priority = bbd[bb->index].priority;
-   if (priority == -1)
-     {
-       priority = 0;
-       FOR_EACH_EDGE (e, ei, bb->preds)
- 	{
- 	  if ((e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun)
- 	       && bbd[e->src->index].end_of_trace >= 0)
- 	      || (e->flags & EDGE_DFS_BACK))
- 	    {
- 	      int edge_freq = EDGE_FREQUENCY (e);
- 
- 	      if (edge_freq > priority)
- 		priority = edge_freq;
- 	    }
- 	}
-       bbd[bb->index].priority = priority;
-     }
- 
-   if (priority)
-     /* The block with priority should have significantly lower key.  */
-     return -(100 * BB_FREQ_MAX + 100 * priority + bb->count.to_frequency (cfun));
- 
-   return -bb->count.to_frequency (cfun);
- }
- 
- /* Return true when the edge E from basic block BB is better than the temporary
-    best edge (details are in function).  The probability of edge E is PROB. The
-    count of the successor is COUNT.  The current best probability is
-    BEST_PROB, the best count is BEST_COUNT.
-    The edge is considered to be equivalent when PROB does not differ much from
-    BEST_PROB; similarly for count.  */
- 
- static bool
- better_edge_p (const_basic_block bb, const_edge e, profile_probability prob,
- 	       profile_count count, profile_probability best_prob,
- 	       profile_count best_count, const_edge cur_best_edge)
- {
-   bool is_better_edge;
- 
-   /* The BEST_* values do not have to be best, but can be a bit smaller than
-      maximum values.  */
-   profile_probability diff_prob = best_prob.apply_scale (1, 10);
- 
-   /* The smaller one is better to keep the original order.  */
-   if (optimize_function_for_size_p (cfun))
-     return !cur_best_edge
- 	   || cur_best_edge->dest->index > e->dest->index;
- 
-   /* Those edges are so expensive that continuing a trace is not useful
-      performance wise.  */
-   if (e->flags & (EDGE_ABNORMAL | EDGE_EH))
-     return false;
- 
-   if (prob > best_prob + diff_prob
-       || (!best_prob.initialized_p ()
- 	  && prob > profile_probability::guessed_never ()))
-     /* The edge has higher probability than the temporary best edge.  */
-     is_better_edge = true;
-   else if (prob < best_prob - diff_prob)
-     /* The edge has lower probability than the temporary best edge.  */
-     is_better_edge = false;
-   else
-     {
-       profile_count diff_count = best_count.apply_scale (1, 10);
-       if (count < best_count - diff_count
- 	  || (!best_count.initialized_p ()
- 	      && count.nonzero_p ()))
- 	/* The edge and the temporary best edge  have almost equivalent
- 	   probabilities.  The higher countuency of a successor now means
- 	   that there is another edge going into that successor.
- 	   This successor has lower countuency so it is better.  */
- 	is_better_edge = true;
-       else if (count > best_count + diff_count)
- 	/* This successor has higher countuency so it is worse.  */
- 	is_better_edge = false;
-       else if (e->dest->prev_bb == bb)
- 	/* The edges have equivalent probabilities and the successors
- 	   have equivalent frequencies.  Select the previous successor.  */
- 	is_better_edge = true;
-       else
- 	is_better_edge = false;
-     }
- 
-   return is_better_edge;
- }
- 
- /* Return true when the edge E is better than the temporary best edge
-    CUR_BEST_EDGE.  If SRC_INDEX_P is true, the function compares the src bb of
-    E and CUR_BEST_EDGE; otherwise it will compare the dest bb.
-    BEST_LEN is the trace length of src (or dest) bb in CUR_BEST_EDGE.
-    TRACES record the information about traces.
-    When optimizing for size, the edge with smaller index is better.
-    When optimizing for speed, the edge with bigger probability or longer trace
-    is better.  */
- 
- static bool
- connect_better_edge_p (const_edge e, bool src_index_p, int best_len,
- 		       const_edge cur_best_edge, struct trace *traces)
- {
-   int e_index;
-   int b_index;
-   bool is_better_edge;
- 
-   if (!cur_best_edge)
-     return true;
- 
-   if (optimize_function_for_size_p (cfun))
-     {
-       e_index = src_index_p ? e->src->index : e->dest->index;
-       b_index = src_index_p ? cur_best_edge->src->index
- 			      : cur_best_edge->dest->index;
-       /* The smaller one is better to keep the original order.  */
-       return b_index > e_index;
-     }
- 
-   if (src_index_p)
-     {
-       e_index = e->src->index;
- 
-       /* We are looking for predecessor, so probabilities are not that
- 	 informative.  We do not want to connect A to B because A has
- 	 only one successor (probability is 100%) while there is edge
- 	 A' to B where probability is 90% but which is much more frequent.  */
-       if (e->count () > cur_best_edge->count ())
- 	/* The edge has higher probability than the temporary best edge.  */
- 	is_better_edge = true;
-       else if (e->count () < cur_best_edge->count ())
- 	/* The edge has lower probability than the temporary best edge.  */
- 	is_better_edge = false;
-       else if (e->probability > cur_best_edge->probability)
- 	/* The edge has higher probability than the temporary best edge.  */
- 	is_better_edge = true;
-       else if (e->probability < cur_best_edge->probability)
- 	/* The edge has lower probability than the temporary best edge.  */
- 	is_better_edge = false;
-       else if (traces[bbd[e_index].end_of_trace].length > best_len)
- 	/* The edge and the temporary best edge have equivalent probabilities.
- 	   The edge with longer trace is better.  */
- 	is_better_edge = true;
-       else
- 	is_better_edge = false;
-     }
-   else
-     {
-       e_index = e->dest->index;
- 
-       if (e->probability > cur_best_edge->probability)
- 	/* The edge has higher probability than the temporary best edge.  */
- 	is_better_edge = true;
-       else if (e->probability < cur_best_edge->probability)
- 	/* The edge has lower probability than the temporary best edge.  */
- 	is_better_edge = false;
-       else if (traces[bbd[e_index].start_of_trace].length > best_len)
- 	/* The edge and the temporary best edge have equivalent probabilities.
- 	   The edge with longer trace is better.  */
- 	is_better_edge = true;
-       else
- 	is_better_edge = false;
-     }
- 
-   return is_better_edge;
- }
- 
- /* Connect traces in array TRACES, N_TRACES is the count of traces.  */
- 
- static void
- connect_traces (int n_traces, struct trace *traces)
- {
-   int i;
-   bool *connected;
-   bool two_passes;
-   int last_trace;
-   int current_pass;
-   int current_partition;
-   profile_count count_threshold;
-   bool for_size = optimize_function_for_size_p (cfun);
- 
-   count_threshold = max_entry_count.apply_scale (DUPLICATION_THRESHOLD, 1000);
- 
-   connected = XCNEWVEC (bool, n_traces);
-   last_trace = -1;
-   current_pass = 1;
-   current_partition = BB_PARTITION (traces[0].first);
-   two_passes = false;
- 
-   if (crtl->has_bb_partition)
-     for (i = 0; i < n_traces && !two_passes; i++)
-       if (BB_PARTITION (traces[0].first)
- 	  != BB_PARTITION (traces[i].first))
- 	two_passes = true;
- 
-   for (i = 0; i < n_traces || (two_passes && current_pass == 1) ; i++)
-     {
-       int t = i;
-       int t2;
-       edge e, best;
-       int best_len;
- 
-       if (i >= n_traces)
- 	{
- 	  gcc_assert (two_passes && current_pass == 1);
- 	  i = 0;
- 	  t = i;
- 	  current_pass = 2;
- 	  if (current_partition == BB_HOT_PARTITION)
- 	    current_partition = BB_COLD_PARTITION;
- 	  else
- 	    current_partition = BB_HOT_PARTITION;
- 	}
- 
-       if (connected[t])
- 	continue;
- 
-       if (two_passes
- 	  && BB_PARTITION (traces[t].first) != current_partition)
- 	continue;
- 
-       connected[t] = true;
- 
-       /* Find the predecessor traces.  */
-       for (t2 = t; t2 > 0;)
- 	{
- 	  edge_iterator ei;
- 	  best = NULL;
- 	  best_len = 0;
- 	  FOR_EACH_EDGE (e, ei, traces[t2].first->preds)
- 	    {
- 	      int si = e->src->index;
- 
- 	      if (e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun)
- 		  && (e->flags & EDGE_CAN_FALLTHRU)
- 		  && !(e->flags & EDGE_COMPLEX)
- 		  && bbd[si].end_of_trace >= 0
- 		  && !connected[bbd[si].end_of_trace]
- 		  && (BB_PARTITION (e->src) == current_partition)
- 		  && connect_better_edge_p (e, true, best_len, best, traces))
- 		{
- 		  best = e;
- 		  best_len = traces[bbd[si].end_of_trace].length;
- 		}
- 	    }
- 	  if (best)
- 	    {
- 	      best->src->aux = best->dest;
- 	      t2 = bbd[best->src->index].end_of_trace;
- 	      connected[t2] = true;
- 
- 	      if (dump_file)
- 		{
- 		  fprintf (dump_file, "Connection: %d %d\n",
- 			   best->src->index, best->dest->index);
- 		}
- 	    }
- 	  else
- 	    break;
- 	}
- 
-       if (last_trace >= 0)
- 	traces[last_trace].last->aux = traces[t2].first;
-       last_trace = t;
- 
-       /* Find the successor traces.  */
-       while (1)
- 	{
- 	  /* Find the continuation of the chain.  */
- 	  edge_iterator ei;
- 	  best = NULL;
- 	  best_len = 0;
- 	  FOR_EACH_EDGE (e, ei, traces[t].last->succs)
- 	    {
- 	      int di = e->dest->index;
- 
- 	      if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)
- 		  && (e->flags & EDGE_CAN_FALLTHRU)
- 		  && !(e->flags & EDGE_COMPLEX)
- 		  && bbd[di].start_of_trace >= 0
- 		  && !connected[bbd[di].start_of_trace]
- 		  && (BB_PARTITION (e->dest) == current_partition)
- 		  && connect_better_edge_p (e, false, best_len, best, traces))
- 		{
- 		  best = e;
- 		  best_len = traces[bbd[di].start_of_trace].length;
- 		}
- 	    }
- 
- 	  if (for_size)
- 	    {
- 	      if (!best)
- 		/* Stop finding the successor traces.  */
- 		break;
- 
- 	      /* It is OK to connect block n with block n + 1 or a block
- 		 before n.  For others, only connect to the loop header.  */
- 	      if (best->dest->index > (traces[t].last->index + 1))
- 		{
- 		  int count = EDGE_COUNT (best->dest->preds);
- 
- 		  FOR_EACH_EDGE (e, ei, best->dest->preds)
- 		    if (e->flags & EDGE_DFS_BACK)
- 		      count--;
- 
- 		  /* If dest has multiple predecessors, skip it.  We expect
- 		     that one predecessor with smaller index connects with it
- 		     later.  */
- 		  if (count != 1) 
- 		    break;
- 		}
- 
- 	      /* Only connect Trace n with Trace n + 1.  It is conservative
- 		 to keep the order as close as possible to the original order.
- 		 It also helps to reduce long jumps.  */
- 	      if (last_trace != bbd[best->dest->index].start_of_trace - 1)
- 		break;
- 
- 	      if (dump_file)
- 		fprintf (dump_file, "Connection: %d %d\n",
- 			 best->src->index, best->dest->index);
- 
- 	      t = bbd[best->dest->index].start_of_trace;
- 	      traces[last_trace].last->aux = traces[t].first;
- 	      connected[t] = true;
- 	      last_trace = t;
- 	    }
- 	  else if (best)
- 	    {
- 	      if (dump_file)
- 		{
- 		  fprintf (dump_file, "Connection: %d %d\n",
- 			   best->src->index, best->dest->index);
- 		}
- 	      t = bbd[best->dest->index].start_of_trace;
- 	      traces[last_trace].last->aux = traces[t].first;
- 	      connected[t] = true;
- 	      last_trace = t;
- 	    }
- 	  else
- 	    {
- 	      /* Try to connect the traces by duplication of 1 block.  */
- 	      edge e2;
- 	      basic_block next_bb = NULL;
- 	      bool try_copy = false;
- 
- 	      FOR_EACH_EDGE (e, ei, traces[t].last->succs)
- 		if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)
- 		    && (e->flags & EDGE_CAN_FALLTHRU)
- 		    && !(e->flags & EDGE_COMPLEX)
- 		    && (!best || e->probability > best->probability))
- 		  {
- 		    edge_iterator ei;
- 		    edge best2 = NULL;
- 		    int best2_len = 0;
- 
- 		    /* If the destination is a start of a trace which is only
- 		       one block long, then no need to search the successor
- 		       blocks of the trace.  Accept it.  */
- 		    if (bbd[e->dest->index].start_of_trace >= 0
- 			&& traces[bbd[e->dest->index].start_of_trace].length
- 			   == 1)
- 		      {
- 			best = e;
- 			try_copy = true;
- 			continue;
- 		      }
- 
- 		    FOR_EACH_EDGE (e2, ei, e->dest->succs)
- 		      {
- 			int di = e2->dest->index;
- 
- 			if (e2->dest == EXIT_BLOCK_PTR_FOR_FN (cfun)
- 			    || ((e2->flags & EDGE_CAN_FALLTHRU)
- 				&& !(e2->flags & EDGE_COMPLEX)
- 				&& bbd[di].start_of_trace >= 0
- 				&& !connected[bbd[di].start_of_trace]
- 				&& BB_PARTITION (e2->dest) == current_partition
- 				&& e2->count () >= count_threshold
- 				&& (!best2
- 				    || e2->probability > best2->probability
- 				    || (e2->probability == best2->probability
- 					&& traces[bbd[di].start_of_trace].length
- 					   > best2_len))))
- 			  {
- 			    best = e;
- 			    best2 = e2;
- 			    if (e2->dest != EXIT_BLOCK_PTR_FOR_FN (cfun))
- 			      best2_len = traces[bbd[di].start_of_trace].length;
- 			    else
- 			      best2_len = INT_MAX;
- 			    next_bb = e2->dest;
- 			    try_copy = true;
- 			  }
- 		      }
- 		  }
- 
- 	      /* Copy tiny blocks always; copy larger blocks only when the
- 		 edge is traversed frequently enough.  */
- 	      if (try_copy
- 		  && BB_PARTITION (best->src) == BB_PARTITION (best->dest)
- 		  && copy_bb_p (best->dest,
- 				optimize_edge_for_speed_p (best)
- 				&& (!best->count ().initialized_p ()
- 				    || best->count () >= count_threshold)))
- 		{
- 		  basic_block new_bb;
- 
- 		  if (dump_file)
- 		    {
- 		      fprintf (dump_file, "Connection: %d %d ",
- 			       traces[t].last->index, best->dest->index);
- 		      if (!next_bb)
- 			fputc ('\n', dump_file);
- 		      else if (next_bb == EXIT_BLOCK_PTR_FOR_FN (cfun))
- 			fprintf (dump_file, "exit\n");
- 		      else
- 			fprintf (dump_file, "%d\n", next_bb->index);
- 		    }
- 
- 		  new_bb = copy_bb (best->dest, best, traces[t].last, t);
- 		  traces[t].last = new_bb;
- 		  if (next_bb && next_bb != EXIT_BLOCK_PTR_FOR_FN (cfun))
- 		    {
- 		      t = bbd[next_bb->index].start_of_trace;
- 		      traces[last_trace].last->aux = traces[t].first;
- 		      connected[t] = true;
- 		      last_trace = t;
- 		    }
- 		  else
- 		    break;	/* Stop finding the successor traces.  */
- 		}
- 	      else
- 		break;	/* Stop finding the successor traces.  */
- 	    }
- 	}
-     }
- 
-   if (dump_file)
-     {
-       basic_block bb;
- 
-       fprintf (dump_file, "Final order:\n");
-       for (bb = traces[0].first; bb; bb = (basic_block) bb->aux)
- 	fprintf (dump_file, "%d ", bb->index);
-       fprintf (dump_file, "\n");
-       fflush (dump_file);
-     }
- 
-   FREE (connected);
- }
- 
- /* Return true when BB can and should be copied. CODE_MAY_GROW is true
-    when code size is allowed to grow by duplication.  */
- 
- static bool
- copy_bb_p (const_basic_block bb, int code_may_grow)
- {
-   unsigned int size = 0;
-   unsigned int max_size = uncond_jump_length;
-   rtx_insn *insn;
- 
-   if (EDGE_COUNT (bb->preds) < 2)
-     return false;
-   if (!can_duplicate_block_p (bb))
-     return false;
- 
-   /* Avoid duplicating blocks which have many successors (PR/13430).  */
-   if (EDGE_COUNT (bb->succs) > 8)
-     return false;
- 
-   if (code_may_grow && optimize_bb_for_speed_p (bb))
-     max_size *= param_max_grow_copy_bb_insns;
- 
-   FOR_BB_INSNS (bb, insn)
-     {
-       if (INSN_P (insn))
- 	{
- 	  size += get_attr_min_length (insn);
- 	  if (size > max_size)
- 	    break;
- 	}
-     }
- 
-   if (size <= max_size)
-     return true;
- 
-   if (dump_file)
-     {
-       fprintf (dump_file,
- 	       "Block %d can't be copied because its size = %u.\n",
- 	       bb->index, size);
-     }
- 
-   return false;
- }
- 
- /* Return the length of unconditional jump instruction.  */
- 
- int
- get_uncond_jump_length (void)
- {
-   unsigned int length;
- 
-   start_sequence ();
-   rtx_code_label *label = emit_label (gen_label_rtx ());
-   rtx_insn *jump = emit_jump_insn (targetm.gen_jump (label));
-   length = get_attr_min_length (jump);
-   end_sequence ();
- 
-   gcc_assert (length < INT_MAX);
-   return length;
- }
- 
- /* Create a forwarder block to OLD_BB starting with NEW_LABEL and in the
-    other partition wrt OLD_BB.  */
- 
- static basic_block
- create_eh_forwarder_block (rtx_code_label *new_label, basic_block old_bb)
- {
-   /* Split OLD_BB, so that EH pads have always only incoming EH edges,
-      bb_has_eh_pred bbs are treated specially by DF infrastructure.  */
-   old_bb = split_block_after_labels (old_bb)->dest;
- 
-   /* Put the new label and a jump in the new basic block.  */
-   rtx_insn *label = emit_label (new_label);
-   rtx_code_label *old_label = block_label (old_bb);
-   rtx_insn *jump = emit_jump_insn (targetm.gen_jump (old_label));
-   JUMP_LABEL (jump) = old_label;
- 
-   /* Create the new basic block and put it in last position.  */
-   basic_block last_bb = EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb;
-   basic_block new_bb = create_basic_block (label, jump, last_bb);
-   new_bb->aux = last_bb->aux;
-   new_bb->count = old_bb->count;
-   last_bb->aux = new_bb;
- 
-   emit_barrier_after_bb (new_bb);
- 
-   make_single_succ_edge (new_bb, old_bb, 0);
- 
-   /* Make sure the new basic block is in the other partition.  */
-   unsigned new_partition = BB_PARTITION (old_bb);
-   new_partition ^= BB_HOT_PARTITION | BB_COLD_PARTITION;
-   BB_SET_PARTITION (new_bb, new_partition);
- 
-   return new_bb;
- }
- 
- /* The common landing pad in block OLD_BB has edges from both partitions.
-    Add a new landing pad that will just jump to the old one and split the
-    edges so that no EH edge crosses partitions.  */
- 
- static void
- sjlj_fix_up_crossing_landing_pad (basic_block old_bb)
- {
-   const unsigned lp_len = cfun->eh->lp_array->length ();
-   edge_iterator ei;
-   edge e;
- 
-   /* Generate the new common landing-pad label.  */
-   rtx_code_label *new_label = gen_label_rtx ();
-   LABEL_PRESERVE_P (new_label) = 1;
- 
-   /* Create the forwarder block.  */
-   basic_block new_bb = create_eh_forwarder_block (new_label, old_bb);
- 
-   /* Create the map from old to new lp index and initialize it.  */
-   unsigned *index_map = (unsigned *) alloca (lp_len * sizeof (unsigned));
-   memset (index_map, 0, lp_len * sizeof (unsigned));
- 
-   /* Fix up the edges.  */
-   for (ei = ei_start (old_bb->preds); (e = ei_safe_edge (ei)) != NULL; )
-     if (e->src != new_bb && BB_PARTITION (e->src) == BB_PARTITION (new_bb))
-       {
- 	rtx_insn *insn = BB_END (e->src);
- 	rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
- 
- 	gcc_assert (note != NULL);
- 	const unsigned old_index = INTVAL (XEXP (note, 0));
- 
- 	/* Generate the new landing-pad structure.  */
- 	if (index_map[old_index] == 0)
- 	  {
- 	    eh_landing_pad old_lp = (*cfun->eh->lp_array)[old_index];
- 	    eh_landing_pad new_lp = gen_eh_landing_pad (old_lp->region);
- 	    new_lp->post_landing_pad = old_lp->post_landing_pad;
- 	    new_lp->landing_pad = new_label;
- 	    index_map[old_index] = new_lp->index;
- 	  }
- 	XEXP (note, 0) = GEN_INT (index_map[old_index]);
- 
- 	/* Adjust the edge to the new destination.  */
- 	redirect_edge_succ (e, new_bb);
-       }
-     else
-       ei_next (&ei);
- }
- 
- /* The landing pad OLD_LP, in block OLD_BB, has edges from both partitions.
-    Add a new landing pad that will just jump to the old one and split the
-    edges so that no EH edge crosses partitions.  */
- 
- static void
- dw2_fix_up_crossing_landing_pad (eh_landing_pad old_lp, basic_block old_bb)
- {
-   eh_landing_pad new_lp;
-   edge_iterator ei;
-   edge e;
- 
-   /* Generate the new landing-pad structure.  */
-   new_lp = gen_eh_landing_pad (old_lp->region);
-   new_lp->post_landing_pad = old_lp->post_landing_pad;
-   new_lp->landing_pad = gen_label_rtx ();
-   LABEL_PRESERVE_P (new_lp->landing_pad) = 1;
- 
-   /* Create the forwarder block.  */
-   basic_block new_bb = create_eh_forwarder_block (new_lp->landing_pad, old_bb);
- 
-   /* Fix up the edges.  */
-   for (ei = ei_start (old_bb->preds); (e = ei_safe_edge (ei)) != NULL; )
-     if (e->src != new_bb && BB_PARTITION (e->src) == BB_PARTITION (new_bb))
-       {
- 	rtx_insn *insn = BB_END (e->src);
- 	rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
- 
- 	gcc_assert (note != NULL);
- 	gcc_checking_assert (INTVAL (XEXP (note, 0)) == old_lp->index);
- 	XEXP (note, 0) = GEN_INT (new_lp->index);
- 
- 	/* Adjust the edge to the new destination.  */
- 	redirect_edge_succ (e, new_bb);
-       }
-     else
-       ei_next (&ei);
- }
- 
- 
- /* Ensure that all hot bbs are included in a hot path through the
-    procedure. This is done by calling this function twice, once
-    with WALK_UP true (to look for paths from the entry to hot bbs) and
-    once with WALK_UP false (to look for paths from hot bbs to the exit).
-    Returns the updated value of COLD_BB_COUNT and adds newly-hot bbs
-    to BBS_IN_HOT_PARTITION.  */
- 
- static unsigned int
- sanitize_hot_paths (bool walk_up, unsigned int cold_bb_count,
-                     vec<basic_block> *bbs_in_hot_partition)
- {
-   /* Callers check this.  */
-   gcc_checking_assert (cold_bb_count);
- 
-   /* Keep examining hot bbs while we still have some left to check
-      and there are remaining cold bbs.  */
-   vec<basic_block> hot_bbs_to_check = bbs_in_hot_partition->copy ();
-   while (! hot_bbs_to_check.is_empty ()
-          && cold_bb_count)
-     {
-       basic_block bb = hot_bbs_to_check.pop ();
-       vec<edge, va_gc> *edges = walk_up ? bb->preds : bb->succs;
-       edge e;
-       edge_iterator ei;
-       profile_probability highest_probability
- 				 = profile_probability::uninitialized ();
-       profile_count highest_count = profile_count::uninitialized ();
-       bool found = false;
- 
-       /* Walk the preds/succs and check if there is at least one already
-          marked hot. Keep track of the most frequent pred/succ so that we
-          can mark it hot if we don't find one.  */
-       FOR_EACH_EDGE (e, ei, edges)
-         {
-           basic_block reach_bb = walk_up ? e->src : e->dest;
- 
-           if (e->flags & EDGE_DFS_BACK)
-             continue;
- 
- 	  /* Do not expect profile insanities when profile was not adjusted.  */
- 	  if (e->probability == profile_probability::never ()
- 	      || e->count () == profile_count::zero ())
- 	    continue;
- 
-           if (BB_PARTITION (reach_bb) != BB_COLD_PARTITION)
-           {
-             found = true;
-             break;
-           }
-           /* The following loop will look for the hottest edge via
-              the edge count, if it is non-zero, then fallback to
-              the edge probability.  */
-           if (!(e->count () > highest_count))
-             highest_count = e->count ();
-           if (!highest_probability.initialized_p ()
- 	      || e->probability > highest_probability)
-             highest_probability = e->probability;
-         }
- 
-       /* If bb is reached by (or reaches, in the case of !WALK_UP) another hot
-          block (or unpartitioned, e.g. the entry block) then it is ok. If not,
-          then the most frequent pred (or succ) needs to be adjusted.  In the
-          case where multiple preds/succs have the same frequency (e.g. a
-          50-50 branch), then both will be adjusted.  */
-       if (found)
-         continue;
- 
-       FOR_EACH_EDGE (e, ei, edges)
-         {
-           if (e->flags & EDGE_DFS_BACK)
-             continue;
- 	  /* Do not expect profile insanities when profile was not adjusted.  */
- 	  if (e->probability == profile_probability::never ()
- 	      || e->count () == profile_count::zero ())
- 	    continue;
-           /* Select the hottest edge using the edge count, if it is non-zero,
-              then fallback to the edge probability.  */
-           if (highest_count.initialized_p ())
-             {
-               if (!(e->count () >= highest_count))
-                 continue;
-             }
-           else if (!(e->probability >= highest_probability))
-             continue;
- 
-           basic_block reach_bb = walk_up ? e->src : e->dest;
- 
-           /* We have a hot bb with an immediate dominator that is cold.
-              The dominator needs to be re-marked hot.  */
-           BB_SET_PARTITION (reach_bb, BB_HOT_PARTITION);
- 	  if (dump_file)
- 	    fprintf (dump_file, "Promoting bb %i to hot partition to sanitize "
- 		     "profile of bb %i in %s walk\n", reach_bb->index,
- 		     bb->index, walk_up ? "backward" : "forward");
-           cold_bb_count--;
- 
-           /* Now we need to examine newly-hot reach_bb to see if it is also
-              dominated by a cold bb.  */
-           bbs_in_hot_partition->safe_push (reach_bb);
-           hot_bbs_to_check.safe_push (reach_bb);
-         }
-     }
-   hot_bbs_to_check.release ();
- 
-   return cold_bb_count;
- }
- 
- 
- /* Find the basic blocks that are rarely executed and need to be moved to
-    a separate section of the .o file (to cut down on paging and improve
-    cache locality).  Return a vector of all edges that cross.  */
- 
- static vec<edge>
- find_rarely_executed_basic_blocks_and_crossing_edges (void)
- {
-   vec<edge> crossing_edges = vNULL;
-   basic_block bb;
-   edge e;
-   edge_iterator ei;
-   unsigned int cold_bb_count = 0;
-   auto_vec<basic_block> bbs_in_hot_partition;
- 
-   propagate_unlikely_bbs_forward ();
- 
-   /* Mark which partition (hot/cold) each basic block belongs in.  */
-   FOR_EACH_BB_FN (bb, cfun)
-     {
-       bool cold_bb = false;
- 
-       if (probably_never_executed_bb_p (cfun, bb))
-         {
-           cold_bb = true;
- 
-           /* Handle profile insanities created by upstream optimizations
-              by also checking the incoming edge weights. If there is a non-cold
-              incoming edge, conservatively prevent this block from being split
-              into the cold section.  */
- 	  if (!bb->count.precise_p ())
- 	    FOR_EACH_EDGE (e, ei, bb->preds)
- 	      if (!probably_never_executed_edge_p (cfun, e))
- 		{
- 		  cold_bb = false;
- 		  break;
- 		}
-         }
-       if (cold_bb)
-         {
-           BB_SET_PARTITION (bb, BB_COLD_PARTITION);
-           cold_bb_count++;
-         }
-       else
-         {
-           BB_SET_PARTITION (bb, BB_HOT_PARTITION);
-           bbs_in_hot_partition.safe_push (bb);
-         }
-     }
- 
-   /* Ensure that hot bbs are included along a hot path from the entry to exit.
-      Several different possibilities may include cold bbs along all paths
-      to/from a hot bb. One is that there are edge weight insanities
-      due to optimization phases that do not properly update basic block profile
-      counts. The second is that the entry of the function may not be hot, because
-      it is entered fewer times than the number of profile training runs, but there
-      is a loop inside the function that causes blocks within the function to be
-      above the threshold for hotness. This is fixed by walking up from hot bbs
-      to the entry block, and then down from hot bbs to the exit, performing
-      partitioning fixups as necessary.  */
-   if (cold_bb_count)
-     {
-       mark_dfs_back_edges ();
-       cold_bb_count = sanitize_hot_paths (true, cold_bb_count,
-                                           &bbs_in_hot_partition);
-       if (cold_bb_count)
-         sanitize_hot_paths (false, cold_bb_count, &bbs_in_hot_partition);
- 
-       hash_set <basic_block> set;
-       find_bbs_reachable_by_hot_paths (&set);
-       FOR_EACH_BB_FN (bb, cfun)
- 	if (!set.contains (bb))
- 	  BB_SET_PARTITION (bb, BB_COLD_PARTITION);
-     }
- 
-   /* The format of .gcc_except_table does not allow landing pads to
-      be in a different partition as the throw.  Fix this by either
-      moving the landing pads or inserting forwarder landing pads.  */
-   if (cfun->eh->lp_array)
-     {
-       const bool sjlj
- 	= (targetm_common.except_unwind_info (&global_options) == UI_SJLJ);
-       unsigned i;
-       eh_landing_pad lp;
- 
-       FOR_EACH_VEC_ELT (*cfun->eh->lp_array, i, lp)
- 	{
- 	  bool all_same, all_diff;
- 
- 	  if (lp == NULL
- 	      || lp->landing_pad == NULL_RTX
- 	      || !LABEL_P (lp->landing_pad))
- 	    continue;
- 
- 	  all_same = all_diff = true;
- 	  bb = BLOCK_FOR_INSN (lp->landing_pad);
- 	  FOR_EACH_EDGE (e, ei, bb->preds)
- 	    {
- 	      gcc_assert (e->flags & EDGE_EH);
- 	      if (BB_PARTITION (bb) == BB_PARTITION (e->src))
- 		all_diff = false;
- 	      else
- 		all_same = false;
- 	    }
- 
- 	  if (all_same)
- 	    ;
- 	  else if (all_diff)
- 	    {
- 	      int which = BB_PARTITION (bb);
- 	      which ^= BB_HOT_PARTITION | BB_COLD_PARTITION;
- 	      BB_SET_PARTITION (bb, which);
- 	    }
- 	  else if (sjlj)
- 	    sjlj_fix_up_crossing_landing_pad (bb);
- 	  else
- 	    dw2_fix_up_crossing_landing_pad (lp, bb);
- 
- 	  /* There is a single, common landing pad in SJLJ mode.  */
- 	  if (sjlj)
- 	    break;
- 	}
-     }
- 
-   /* Mark every edge that crosses between sections.  */
-   FOR_EACH_BB_FN (bb, cfun)
-     FOR_EACH_EDGE (e, ei, bb->succs)
-       {
- 	unsigned int flags = e->flags;
- 
-         /* We should never have EDGE_CROSSING set yet.  */
- 	gcc_checking_assert ((flags & EDGE_CROSSING) == 0);
- 
- 	if (e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun)
- 	    && e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)
- 	    && BB_PARTITION (e->src) != BB_PARTITION (e->dest))
- 	  {
- 	    crossing_edges.safe_push (e);
- 	    flags |= EDGE_CROSSING;
- 	  }
- 
- 	/* Now that we've split eh edges as appropriate, allow landing pads
- 	   to be merged with the post-landing pads.  */
- 	flags &= ~EDGE_PRESERVE;
- 
- 	e->flags = flags;
-       }
- 
-   return crossing_edges;
- }
- 
- /* Set the flag EDGE_CAN_FALLTHRU for edges that can be fallthru.  */
- 
- static void
- set_edge_can_fallthru_flag (void)
- {
-   basic_block bb;
- 
-   FOR_EACH_BB_FN (bb, cfun)
-     {
-       edge e;
-       edge_iterator ei;
- 
-       FOR_EACH_EDGE (e, ei, bb->succs)
- 	{
- 	  e->flags &= ~EDGE_CAN_FALLTHRU;
- 
- 	  /* The FALLTHRU edge is also CAN_FALLTHRU edge.  */
- 	  if (e->flags & EDGE_FALLTHRU)
- 	    e->flags |= EDGE_CAN_FALLTHRU;
- 	}
- 
-       /* If the BB ends with an invertible condjump all (2) edges are
- 	 CAN_FALLTHRU edges.  */
-       if (EDGE_COUNT (bb->succs) != 2)
- 	continue;
-       if (!any_condjump_p (BB_END (bb)))
- 	continue;
- 
-       rtx_jump_insn *bb_end_jump = as_a <rtx_jump_insn *> (BB_END (bb));
-       if (!invert_jump (bb_end_jump, JUMP_LABEL (bb_end_jump), 0))
- 	continue;
-       invert_jump (bb_end_jump, JUMP_LABEL (bb_end_jump), 0);
-       EDGE_SUCC (bb, 0)->flags |= EDGE_CAN_FALLTHRU;
-       EDGE_SUCC (bb, 1)->flags |= EDGE_CAN_FALLTHRU;
-     }
- }
- 
- /* If any destination of a crossing edge does not have a label, add label;
-    Convert any easy fall-through crossing edges to unconditional jumps.  */
- 
- static void
- add_labels_and_missing_jumps (vec<edge> crossing_edges)
- {
-   size_t i;
-   edge e;
- 
-   FOR_EACH_VEC_ELT (crossing_edges, i, e)
-     {
-       basic_block src = e->src;
-       basic_block dest = e->dest;
-       rtx_jump_insn *new_jump;
- 
-       if (dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
- 	continue;
- 
-       /* Make sure dest has a label.  */
-       rtx_code_label *label = block_label (dest);
- 
-       /* Nothing to do for non-fallthru edges.  */
-       if (src == ENTRY_BLOCK_PTR_FOR_FN (cfun))
- 	continue;
-       if ((e->flags & EDGE_FALLTHRU) == 0)
- 	continue;
- 
-       /* If the block does not end with a control flow insn, then we
- 	 can trivially add a jump to the end to fixup the crossing.
- 	 Otherwise the jump will have to go in a new bb, which will
- 	 be handled by fix_up_fall_thru_edges function.  */
-       if (control_flow_insn_p (BB_END (src)))
- 	continue;
- 
-       /* Make sure there's only one successor.  */
-       gcc_assert (single_succ_p (src));
- 
-       new_jump = emit_jump_insn_after (targetm.gen_jump (label), BB_END (src));
-       BB_END (src) = new_jump;
-       JUMP_LABEL (new_jump) = label;
-       LABEL_NUSES (label) += 1;
- 
-       emit_barrier_after_bb (src);
- 
-       /* Mark edge as non-fallthru.  */
-       e->flags &= ~EDGE_FALLTHRU;
-     }
- }
- 
- /* Find any bb's where the fall-through edge is a crossing edge (note that
-    these bb's must also contain a conditional jump or end with a call
-    instruction; we've already dealt with fall-through edges for blocks
-    that didn't have a conditional jump or didn't end with call instruction
-    in the call to add_labels_and_missing_jumps).  Convert the fall-through
-    edge to non-crossing edge by inserting a new bb to fall-through into.
-    The new bb will contain an unconditional jump (crossing edge) to the
-    original fall through destination.  */
- 
- static void
- fix_up_fall_thru_edges (void)
- {
-   basic_block cur_bb;
- 
-   FOR_EACH_BB_FN (cur_bb, cfun)
-     {
-       edge succ1;
-       edge succ2;
-       edge fall_thru = NULL;
-       edge cond_jump = NULL;
- 
-       fall_thru = NULL;
-       if (EDGE_COUNT (cur_bb->succs) > 0)
- 	succ1 = EDGE_SUCC (cur_bb, 0);
-       else
- 	succ1 = NULL;
- 
-       if (EDGE_COUNT (cur_bb->succs) > 1)
- 	succ2 = EDGE_SUCC (cur_bb, 1);
-       else
- 	succ2 = NULL;
- 
-       /* Find the fall-through edge.  */
- 
-       if (succ1
- 	  && (succ1->flags & EDGE_FALLTHRU))
- 	{
- 	  fall_thru = succ1;
- 	  cond_jump = succ2;
- 	}
-       else if (succ2
- 	       && (succ2->flags & EDGE_FALLTHRU))
- 	{
- 	  fall_thru = succ2;
- 	  cond_jump = succ1;
- 	}
-       else if (succ2 && EDGE_COUNT (cur_bb->succs) > 2)
- 	fall_thru = find_fallthru_edge (cur_bb->succs);
- 
-       if (fall_thru && (fall_thru->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)))
- 	{
- 	  /* Check to see if the fall-thru edge is a crossing edge.  */
- 
- 	  if (fall_thru->flags & EDGE_CROSSING)
- 	    {
- 	      /* The fall_thru edge crosses; now check the cond jump edge, if
- 		 it exists.  */
- 
- 	      bool cond_jump_crosses = true;
- 	      int invert_worked = 0;
- 	      rtx_insn *old_jump = BB_END (cur_bb);
- 
- 	      /* Find the jump instruction, if there is one.  */
- 
- 	      if (cond_jump)
- 		{
- 		  if (!(cond_jump->flags & EDGE_CROSSING))
- 		    cond_jump_crosses = false;
- 
- 		  /* We know the fall-thru edge crosses; if the cond
- 		     jump edge does NOT cross, and its destination is the
- 		     next block in the bb order, invert the jump
- 		     (i.e. fix it so the fall through does not cross and
- 		     the cond jump does).  */
- 
- 		  if (!cond_jump_crosses)
- 		    {
- 		      /* Find label in fall_thru block. We've already added
- 			 any missing labels, so there must be one.  */
- 
- 		      rtx_code_label *fall_thru_label
- 			= block_label (fall_thru->dest);
- 
- 		      if (old_jump && fall_thru_label)
- 			{
- 			  rtx_jump_insn *old_jump_insn
- 			    = dyn_cast <rtx_jump_insn *> (old_jump);
- 			  if (old_jump_insn)
- 			    invert_worked = invert_jump (old_jump_insn,
- 							 fall_thru_label, 0);
- 			}
- 
- 		      if (invert_worked)
- 			{
- 			  fall_thru->flags &= ~EDGE_FALLTHRU;
- 			  cond_jump->flags |= EDGE_FALLTHRU;
- 			  update_br_prob_note (cur_bb);
- 			  std::swap (fall_thru, cond_jump);
- 			  cond_jump->flags |= EDGE_CROSSING;
- 			  fall_thru->flags &= ~EDGE_CROSSING;
- 			}
- 		    }
- 		}
- 
- 	      if (cond_jump_crosses || !invert_worked)
- 		{
- 		  /* This is the case where both edges out of the basic
- 		     block are crossing edges. Here we will fix up the
- 		     fall through edge. The jump edge will be taken care
- 		     of later.  The EDGE_CROSSING flag of fall_thru edge
- 		     is unset before the call to force_nonfallthru
- 		     function because if a new basic-block is created
- 		     this edge remains in the current section boundary
- 		     while the edge between new_bb and the fall_thru->dest
- 		     becomes EDGE_CROSSING.  */
- 
- 		  fall_thru->flags &= ~EDGE_CROSSING;
- 		  basic_block new_bb = force_nonfallthru (fall_thru);
- 
- 		  if (new_bb)
- 		    {
- 		      new_bb->aux = cur_bb->aux;
- 		      cur_bb->aux = new_bb;
- 
-                       /* This is done by force_nonfallthru_and_redirect.  */
- 		      gcc_assert (BB_PARTITION (new_bb)
-                                   == BB_PARTITION (cur_bb));
- 
- 		      single_succ_edge (new_bb)->flags |= EDGE_CROSSING;
- 		    }
- 		  else
- 		    {
- 		      /* If a new basic-block was not created; restore
- 			 the EDGE_CROSSING flag.  */
- 		      fall_thru->flags |= EDGE_CROSSING;
- 		    }
- 
- 		  /* Add barrier after new jump */
- 		  emit_barrier_after_bb (new_bb ? new_bb : cur_bb);
- 		}
- 	    }
- 	}
-     }
- }
- 
- /* This function checks the destination block of a "crossing jump" to
-    see if it has any crossing predecessors that begin with a code label
-    and end with an unconditional jump.  If so, it returns that predecessor
-    block.  (This is to avoid creating lots of new basic blocks that all
-    contain unconditional jumps to the same destination).  */
- 
- static basic_block
- find_jump_block (basic_block jump_dest)
- {
-   basic_block source_bb = NULL;
-   edge e;
-   rtx_insn *insn;
-   edge_iterator ei;
- 
-   FOR_EACH_EDGE (e, ei, jump_dest->preds)
-     if (e->flags & EDGE_CROSSING)
-       {
- 	basic_block src = e->src;
- 
- 	/* Check each predecessor to see if it has a label, and contains
- 	   only one executable instruction, which is an unconditional jump.
- 	   If so, we can use it.  */
- 
- 	if (LABEL_P (BB_HEAD (src)))
- 	  for (insn = BB_HEAD (src);
- 	       !INSN_P (insn) && insn != NEXT_INSN (BB_END (src));
- 	       insn = NEXT_INSN (insn))
- 	    {
- 	      if (INSN_P (insn)
- 		  && insn == BB_END (src)
- 		  && JUMP_P (insn)
- 		  && !any_condjump_p (insn))
- 		{
- 		  source_bb = src;
- 		  break;
- 		}
- 	    }
- 
- 	if (source_bb)
- 	  break;
-       }
- 
-   return source_bb;
- }
- 
- /* Find all BB's with conditional jumps that are crossing edges;
-    insert a new bb and make the conditional jump branch to the new
-    bb instead (make the new bb same color so conditional branch won't
-    be a 'crossing' edge).  Insert an unconditional jump from the
-    new bb to the original destination of the conditional jump.  */
- 
- static void
- fix_crossing_conditional_branches (void)
- {
-   basic_block cur_bb;
-   basic_block new_bb;
-   basic_block dest;
-   edge succ1;
-   edge succ2;
-   edge crossing_edge;
-   edge new_edge;
-   rtx set_src;
-   rtx old_label = NULL_RTX;
-   rtx_code_label *new_label;
- 
-   FOR_EACH_BB_FN (cur_bb, cfun)
-     {
-       crossing_edge = NULL;
-       if (EDGE_COUNT (cur_bb->succs) > 0)
- 	succ1 = EDGE_SUCC (cur_bb, 0);
-       else
- 	succ1 = NULL;
- 
-       if (EDGE_COUNT (cur_bb->succs) > 1)
- 	succ2 = EDGE_SUCC (cur_bb, 1);
-       else
- 	succ2 = NULL;
- 
-       /* We already took care of fall-through edges, so only one successor
- 	 can be a crossing edge.  */
- 
-       if (succ1 && (succ1->flags & EDGE_CROSSING))
- 	crossing_edge = succ1;
-       else if (succ2 && (succ2->flags & EDGE_CROSSING))
- 	crossing_edge = succ2;
- 
-       if (crossing_edge)
- 	{
- 	  rtx_insn *old_jump = BB_END (cur_bb);
- 
- 	  /* Check to make sure the jump instruction is a
- 	     conditional jump.  */
- 
- 	  set_src = NULL_RTX;
- 
- 	  if (any_condjump_p (old_jump))
- 	    {
- 	      if (GET_CODE (PATTERN (old_jump)) == SET)
- 		set_src = SET_SRC (PATTERN (old_jump));
- 	      else if (GET_CODE (PATTERN (old_jump)) == PARALLEL)
- 		{
- 		  set_src = XVECEXP (PATTERN (old_jump), 0,0);
- 		  if (GET_CODE (set_src) == SET)
- 		    set_src = SET_SRC (set_src);
- 		  else
- 		    set_src = NULL_RTX;
- 		}
- 	    }
- 
- 	  if (set_src && (GET_CODE (set_src) == IF_THEN_ELSE))
- 	    {
- 	      rtx_jump_insn *old_jump_insn =
- 			as_a <rtx_jump_insn *> (old_jump);
- 
- 	      if (GET_CODE (XEXP (set_src, 1)) == PC)
- 		old_label = XEXP (set_src, 2);
- 	      else if (GET_CODE (XEXP (set_src, 2)) == PC)
- 		old_label = XEXP (set_src, 1);
- 
- 	      /* Check to see if new bb for jumping to that dest has
- 		 already been created; if so, use it; if not, create
- 		 a new one.  */
- 
- 	      new_bb = find_jump_block (crossing_edge->dest);
- 
- 	      if (new_bb)
- 		new_label = block_label (new_bb);
- 	      else
- 		{
- 		  basic_block last_bb;
- 		  rtx_code_label *old_jump_target;
- 		  rtx_jump_insn *new_jump;
- 
- 		  /* Create new basic block to be dest for
- 		     conditional jump.  */
- 
- 		  /* Put appropriate instructions in new bb.  */
- 
- 		  new_label = gen_label_rtx ();
- 		  emit_label (new_label);
- 
- 		  gcc_assert (GET_CODE (old_label) == LABEL_REF);
- 		  old_jump_target = old_jump_insn->jump_target ();
- 		  new_jump = as_a <rtx_jump_insn *>
- 		    (emit_jump_insn (targetm.gen_jump (old_jump_target)));
- 		  new_jump->set_jump_target (old_jump_target);
- 
- 		  last_bb = EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb;
- 		  new_bb = create_basic_block (new_label, new_jump, last_bb);
- 		  new_bb->aux = last_bb->aux;
- 		  last_bb->aux = new_bb;
- 
- 		  emit_barrier_after_bb (new_bb);
- 
- 		  /* Make sure new bb is in same partition as source
- 		     of conditional branch.  */
- 		  BB_COPY_PARTITION (new_bb, cur_bb);
- 		}
- 
- 	      /* Make old jump branch to new bb.  */
- 
- 	      redirect_jump (old_jump_insn, new_label, 0);
- 
- 	      /* Remove crossing_edge as predecessor of 'dest'.  */
- 
- 	      dest = crossing_edge->dest;
- 
- 	      redirect_edge_succ (crossing_edge, new_bb);
- 
- 	      /* Make a new edge from new_bb to old dest; new edge
- 		 will be a successor for new_bb and a predecessor
- 		 for 'dest'.  */
- 
- 	      if (EDGE_COUNT (new_bb->succs) == 0)
- 		new_edge = make_single_succ_edge (new_bb, dest, 0);
- 	      else
- 		new_edge = EDGE_SUCC (new_bb, 0);
- 
- 	      crossing_edge->flags &= ~EDGE_CROSSING;
- 	      new_edge->flags |= EDGE_CROSSING;
- 	    }
- 	}
-     }
- }
- 
- /* Find any unconditional branches that cross between hot and cold
-    sections.  Convert them into indirect jumps instead.  */
- 
- static void
- fix_crossing_unconditional_branches (void)
- {
-   basic_block cur_bb;
-   rtx_insn *last_insn;
-   rtx label;
-   rtx label_addr;
-   rtx_insn *indirect_jump_sequence;
-   rtx_insn *jump_insn = NULL;
-   rtx new_reg;
-   rtx_insn *cur_insn;
-   edge succ;
- 
-   FOR_EACH_BB_FN (cur_bb, cfun)
-     {
-       last_insn = BB_END (cur_bb);
- 
-       if (EDGE_COUNT (cur_bb->succs) < 1)
- 	continue;
- 
-       succ = EDGE_SUCC (cur_bb, 0);
- 
-       /* Check to see if bb ends in a crossing (unconditional) jump.  At
- 	 this point, no crossing jumps should be conditional.  */
- 
-       if (JUMP_P (last_insn)
- 	  && (succ->flags & EDGE_CROSSING))
- 	{
- 	  gcc_assert (!any_condjump_p (last_insn));
- 
- 	  /* Make sure the jump is not already an indirect or table jump.  */
- 
- 	  if (!computed_jump_p (last_insn)
- 	      && !tablejump_p (last_insn, NULL, NULL))
- 	    {
- 	      /* We have found a "crossing" unconditional branch.  Now
- 		 we must convert it to an indirect jump.  First create
- 		 reference of label, as target for jump.  */
- 
- 	      label = JUMP_LABEL (last_insn);
- 	      label_addr = gen_rtx_LABEL_REF (Pmode, label);
- 	      LABEL_NUSES (label) += 1;
- 
- 	      /* Get a register to use for the indirect jump.  */
- 
- 	      new_reg = gen_reg_rtx (Pmode);
- 
- 	      /* Generate indirect the jump sequence.  */
- 
- 	      start_sequence ();
- 	      emit_move_insn (new_reg, label_addr);
- 	      emit_indirect_jump (new_reg);
- 	      indirect_jump_sequence = get_insns ();
- 	      end_sequence ();
- 
- 	      /* Make sure every instruction in the new jump sequence has
- 		 its basic block set to be cur_bb.  */
- 
- 	      for (cur_insn = indirect_jump_sequence; cur_insn;
- 		   cur_insn = NEXT_INSN (cur_insn))
- 		{
- 		  if (!BARRIER_P (cur_insn))
- 		    BLOCK_FOR_INSN (cur_insn) = cur_bb;
- 		  if (JUMP_P (cur_insn))
- 		    jump_insn = cur_insn;
- 		}
- 
- 	      /* Insert the new (indirect) jump sequence immediately before
- 		 the unconditional jump, then delete the unconditional jump.  */
- 
- 	      emit_insn_before (indirect_jump_sequence, last_insn);
- 	      delete_insn (last_insn);
- 
- 	      JUMP_LABEL (jump_insn) = label;
- 	      LABEL_NUSES (label)++;
- 
- 	      /* Make BB_END for cur_bb be the jump instruction (NOT the
- 		 barrier instruction at the end of the sequence...).  */
- 
- 	      BB_END (cur_bb) = jump_insn;
- 	    }
- 	}
-     }
- }
- 
- /* Update CROSSING_JUMP_P flags on all jump insns.  */
- 
- static void
- update_crossing_jump_flags (void)
- {
-   basic_block bb;
-   edge e;
-   edge_iterator ei;
- 
-   FOR_EACH_BB_FN (bb, cfun)
-     FOR_EACH_EDGE (e, ei, bb->succs)
-       if (e->flags & EDGE_CROSSING)
- 	{
- 	  if (JUMP_P (BB_END (bb)))
- 	    CROSSING_JUMP_P (BB_END (bb)) = 1;
- 	  break;
- 	}
- }
- 
- /* Reorder basic blocks using the software trace cache (STC) algorithm.  */
- 
- static void
- reorder_basic_blocks_software_trace_cache (void)
- {
-   if (dump_file)
-     fprintf (dump_file, "\nReordering with the STC algorithm.\n\n");
- 
-   int n_traces;
-   int i;
-   struct trace *traces;
- 
-   /* We are estimating the length of uncond jump insn only once since the code
-      for getting the insn length always returns the minimal length now.  */
-   if (uncond_jump_length == 0)
-     uncond_jump_length = get_uncond_jump_length ();
- 
-   /* We need to know some information for each basic block.  */
-   array_size = GET_ARRAY_SIZE (last_basic_block_for_fn (cfun));
-   bbd = XNEWVEC (bbro_basic_block_data, array_size);
-   for (i = 0; i < array_size; i++)
-     {
-       bbd[i].start_of_trace = -1;
-       bbd[i].end_of_trace = -1;
-       bbd[i].in_trace = -1;
-       bbd[i].visited = 0;
-       bbd[i].priority = -1;
-       bbd[i].heap = NULL;
-       bbd[i].node = NULL;
-     }
- 
-   traces = XNEWVEC (struct trace, n_basic_blocks_for_fn (cfun));
-   n_traces = 0;
-   find_traces (&n_traces, traces);
-   connect_traces (n_traces, traces);
-   FREE (traces);
-   FREE (bbd);
- }
- 
- /* Order edges by execution frequency, higher first.  */
- 
- static int
- edge_order (const void *ve1, const void *ve2)
- {
-   edge e1 = *(const edge *) ve1;
-   edge e2 = *(const edge *) ve2;
-   profile_count c1 = e1->count ();
-   profile_count c2 = e2->count ();
-   /* Since profile_count::operator< does not establish a strict weak order
-      in presence of uninitialized counts, use 'max': this makes them appear
-      as if having execution frequency less than any initialized count.  */
-   profile_count m = c1.max (c2);
-   return (m == c2) - (m == c1);
- }
- 
- /* Reorder basic blocks using the "simple" algorithm.  This tries to
-    maximize the dynamic number of branches that are fallthrough, without
-    copying instructions.  The algorithm is greedy, looking at the most
-    frequently executed branch first.  */
- 
- static void
- reorder_basic_blocks_simple (void)
- {
-   if (dump_file)
-     fprintf (dump_file, "\nReordering with the \"simple\" algorithm.\n\n");
- 
-   edge *edges = new edge[2 * n_basic_blocks_for_fn (cfun)];
- 
-   /* First, collect all edges that can be optimized by reordering blocks:
-      simple jumps and conditional jumps, as well as the function entry edge.  */
- 
-   int n = 0;
-   edges[n++] = EDGE_SUCC (ENTRY_BLOCK_PTR_FOR_FN (cfun), 0);
- 
-   basic_block bb;
-   FOR_EACH_BB_FN (bb, cfun)
-     {
-       rtx_insn *end = BB_END (bb);
- 
-       if (computed_jump_p (end) || tablejump_p (end, NULL, NULL))
- 	continue;
- 
-       /* We cannot optimize asm goto.  */
-       if (JUMP_P (end) && extract_asm_operands (end))
- 	continue;
- 
-       if (single_succ_p (bb))
- 	edges[n++] = EDGE_SUCC (bb, 0);
-       else if (any_condjump_p (end))
- 	{
- 	  edge e0 = EDGE_SUCC (bb, 0);
- 	  edge e1 = EDGE_SUCC (bb, 1);
- 	  /* When optimizing for size it is best to keep the original
- 	     fallthrough edges.  */
- 	  if (e1->flags & EDGE_FALLTHRU)
- 	    std::swap (e0, e1);
- 	  edges[n++] = e0;
- 	  edges[n++] = e1;
- 	}
-     }
- 
-   /* Sort the edges, the most desirable first.  When optimizing for size
-      all edges are equally desirable.  */
- 
-   if (optimize_function_for_speed_p (cfun))
-     gcc_stablesort (edges, n, sizeof *edges, edge_order);
- 
-   /* Now decide which of those edges to make fallthrough edges.  We set
-      BB_VISITED if a block already has a fallthrough successor assigned
-      to it.  We make ->AUX of an endpoint point to the opposite endpoint
-      of a sequence of blocks that fall through, and ->AUX will be NULL
-      for a block that is in such a sequence but not an endpoint anymore.
- 
-      To start with, everything points to itself, nothing is assigned yet.  */
- 
-   FOR_ALL_BB_FN (bb, cfun)
-     {
-       bb->aux = bb;
-       bb->flags &= ~BB_VISITED;
-     }
- 
-   EXIT_BLOCK_PTR_FOR_FN (cfun)->aux = 0;
- 
-   /* Now for all edges, the most desirable first, see if that edge can
-      connect two sequences.  If it can, update AUX and BB_VISITED; if it
-      cannot, zero out the edge in the table.  */
- 
-   for (int j = 0; j < n; j++)
-     {
-       edge e = edges[j];
- 
-       basic_block tail_a = e->src;
-       basic_block head_b = e->dest;
-       basic_block head_a = (basic_block) tail_a->aux;
-       basic_block tail_b = (basic_block) head_b->aux;
- 
-       /* An edge cannot connect two sequences if:
- 	 - it crosses partitions;
- 	 - its src is not a current endpoint;
- 	 - its dest is not a current endpoint;
- 	 - or, it would create a loop.  */
- 
-       if (e->flags & EDGE_CROSSING
- 	  || tail_a->flags & BB_VISITED
- 	  || !tail_b
- 	  || (!(head_b->flags & BB_VISITED) && head_b != tail_b)
- 	  || tail_a == tail_b)
- 	{
- 	  edges[j] = 0;
- 	  continue;
- 	}
- 
-       tail_a->aux = 0;
-       head_b->aux = 0;
-       head_a->aux = tail_b;
-       tail_b->aux = head_a;
-       tail_a->flags |= BB_VISITED;
-     }
- 
-   /* Put the pieces together, in the same order that the start blocks of
-      the sequences already had.  The hot/cold partitioning gives a little
-      complication: as a first pass only do this for blocks in the same
-      partition as the start block, and (if there is anything left to do)
-      in a second pass handle the other partition.  */
- 
-   basic_block last_tail = (basic_block) ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux;
- 
-   int current_partition
-     = BB_PARTITION (last_tail == ENTRY_BLOCK_PTR_FOR_FN (cfun)
- 		    ? EDGE_SUCC (ENTRY_BLOCK_PTR_FOR_FN (cfun), 0)->dest
- 		    : last_tail);
-   bool need_another_pass = true;
- 
-   for (int pass = 0; pass < 2 && need_another_pass; pass++)
-     {
-       need_another_pass = false;
- 
-       FOR_EACH_BB_FN (bb, cfun)
- 	if ((bb->flags & BB_VISITED && bb->aux) || bb->aux == bb)
- 	  {
- 	    if (BB_PARTITION (bb) != current_partition)
- 	      {
- 		need_another_pass = true;
- 		continue;
- 	      }
- 
- 	    last_tail->aux = bb;
- 	    last_tail = (basic_block) bb->aux;
- 	  }
- 
-       current_partition ^= BB_HOT_PARTITION | BB_COLD_PARTITION;
-     }
- 
-   last_tail->aux = 0;
- 
-   /* Finally, link all the chosen fallthrough edges.  */
- 
-   for (int j = 0; j < n; j++)
-     if (edges[j])
-       edges[j]->src->aux = edges[j]->dest;
- 
-   delete[] edges;
- 
-   /* If the entry edge no longer falls through we have to make a new
-      block so it can do so again.  */
- 
-   edge e = EDGE_SUCC (ENTRY_BLOCK_PTR_FOR_FN (cfun), 0);
-   if (e->dest != ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux)
-     {
-       force_nonfallthru (e);
-       e->src->aux = ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux;
-     }
- }
- 
- /* Reorder basic blocks.  The main entry point to this file.  */
- 
- static void
- reorder_basic_blocks (void)
- {
-   gcc_assert (current_ir_type () == IR_RTL_CFGLAYOUT);
- 
-   if (n_basic_blocks_for_fn (cfun) <= NUM_FIXED_BLOCKS + 1)
-     return;
- 
-   set_edge_can_fallthru_flag ();
-   mark_dfs_back_edges ();
- 
-   switch (flag_reorder_blocks_algorithm)
-     {
-     case REORDER_BLOCKS_ALGORITHM_SIMPLE:
-       reorder_basic_blocks_simple ();
-       break;
- 
-     case REORDER_BLOCKS_ALGORITHM_STC:
-       reorder_basic_blocks_software_trace_cache ();
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   relink_block_chain (/*stay_in_cfglayout_mode=*/true);
- 
-   if (dump_file)
-     {
-       if (dump_flags & TDF_DETAILS)
- 	dump_reg_info (dump_file);
-       dump_flow_info (dump_file, dump_flags);
-     }
- 
-   /* Signal that rtl_verify_flow_info_1 can now verify that there
-      is at most one switch between hot/cold sections.  */
-   crtl->bb_reorder_complete = true;
- }
- 
- /* Determine which partition the first basic block in the function
-    belongs to, then find the first basic block in the current function
-    that belongs to a different section, and insert a
-    NOTE_INSN_SWITCH_TEXT_SECTIONS note immediately before it in the
-    instruction stream.  When writing out the assembly code,
-    encountering this note will make the compiler switch between the
-    hot and cold text sections.  */
- 
- void
- insert_section_boundary_note (void)
- {
-   basic_block bb;
-   bool switched_sections = false;
-   int current_partition = 0;
- 
-   if (!crtl->has_bb_partition)
-     return;
- 
-   FOR_EACH_BB_FN (bb, cfun)
-     {
-       if (!current_partition)
- 	current_partition = BB_PARTITION (bb);
-       if (BB_PARTITION (bb) != current_partition)
- 	{
- 	  gcc_assert (!switched_sections);
-           switched_sections = true;
-           emit_note_before (NOTE_INSN_SWITCH_TEXT_SECTIONS, BB_HEAD (bb));
-           current_partition = BB_PARTITION (bb);
- 	}
-     }
- 
-   /* Make sure crtl->has_bb_partition matches reality even if bbpart finds
-      some hot and some cold basic blocks, but later one of those kinds is
-      optimized away.  */
-   crtl->has_bb_partition = switched_sections;
- }
- 
- namespace {
- 
- const pass_data pass_data_reorder_blocks =
- {
-   RTL_PASS, /* type */
-   "bbro", /* name */
-   OPTGROUP_NONE, /* optinfo_flags */
-   TV_REORDER_BLOCKS, /* tv_id */
-   0, /* properties_required */
-   0, /* properties_provided */
-   0, /* properties_destroyed */
-   0, /* todo_flags_start */
-   0, /* todo_flags_finish */
- };
- 
- class pass_reorder_blocks : public rtl_opt_pass
- {
- public:
-   pass_reorder_blocks (gcc::context *ctxt)
-     : rtl_opt_pass (pass_data_reorder_blocks, ctxt)
-   {}
- 
-   /* opt_pass methods: */
-   virtual bool gate (function *)
-     {
-       if (targetm.cannot_modify_jumps_p ())
- 	return false;
-       return (optimize > 0
- 	      && (flag_reorder_blocks || flag_reorder_blocks_and_partition));
-     }
- 
-   virtual unsigned int execute (function *);
- 
- }; // class pass_reorder_blocks
- 
- unsigned int
- pass_reorder_blocks::execute (function *fun)
- {
-   basic_block bb;
- 
-   /* Last attempt to optimize CFG, as scheduling, peepholing and insn
-      splitting possibly introduced more crossjumping opportunities.  */
-   cfg_layout_initialize (CLEANUP_EXPENSIVE);
- 
-   reorder_basic_blocks ();
-   cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_NO_PARTITIONING);
- 
-   FOR_EACH_BB_FN (bb, fun)
-     if (bb->next_bb != EXIT_BLOCK_PTR_FOR_FN (fun))
-       bb->aux = bb->next_bb;
-   cfg_layout_finalize ();
- 
-   FOR_EACH_BB_FN (bb, fun)
-     df_recompute_luids (bb);
-   return 0;
- }
- 
- } // anon namespace
- 
- rtl_opt_pass *
- make_pass_reorder_blocks (gcc::context *ctxt)
- {
-   return new pass_reorder_blocks (ctxt);
- }
- 
- /* Duplicate a block (that we already know ends in a computed jump) into its
-    predecessors, where possible.  Return whether anything is changed.  */
- static bool
- maybe_duplicate_computed_goto (basic_block bb, int max_size)
- {
-   /* Make sure that the block is small enough.  */
-   rtx_insn *insn;
-   FOR_BB_INSNS (bb, insn)
-     if (INSN_P (insn))
-       {
- 	max_size -= get_attr_min_length (insn);
- 	if (max_size < 0)
- 	   return false;
-       }
- 
-   bool changed = false;
-   edge e;
-   edge_iterator ei;
-   for (ei = ei_start (bb->preds); (e = ei_safe_edge (ei)); )
-     {
-       basic_block pred = e->src;
- 
-       /* Do not duplicate BB into PRED if we cannot merge a copy of BB
- 	 with PRED.  */
-       if (!single_succ_p (pred)
- 	  || e->flags & EDGE_COMPLEX
- 	  || pred->index < NUM_FIXED_BLOCKS
- 	  || (JUMP_P (BB_END (pred)) && !simplejump_p (BB_END (pred)))
- 	  || (JUMP_P (BB_END (pred)) && CROSSING_JUMP_P (BB_END (pred))))
- 	{
- 	  ei_next (&ei);
- 	  continue;
- 	}
- 
-       if (dump_file)
- 	fprintf (dump_file, "Duplicating computed goto bb %d into bb %d\n",
- 		 bb->index, e->src->index);
- 
-       /* Remember if PRED can be duplicated; if so, the copy of BB merged
- 	 with PRED can be duplicated as well.  */
-       bool can_dup_more = can_duplicate_block_p (pred);
- 
-       /* Make a copy of BB, merge it into PRED.  */
-       basic_block copy = duplicate_block (bb, e, NULL);
-       emit_barrier_after_bb (copy);
-       reorder_insns_nobb (BB_HEAD (copy), BB_END (copy), BB_END (pred));
-       merge_blocks (pred, copy);
- 
-       changed = true;
- 
-       /* Try to merge the resulting merged PRED into further predecessors.  */
-       if (can_dup_more)
- 	maybe_duplicate_computed_goto (pred, max_size);
-     }
- 
-   return changed;
- }
- 
- /* Duplicate the blocks containing computed gotos.  This basically unfactors
-    computed gotos that were factored early on in the compilation process to
-    speed up edge based data flow.  We used to not unfactor them again, which
-    can seriously pessimize code with many computed jumps in the source code,
-    such as interpreters.  See e.g. PR15242.  */
- static void
- duplicate_computed_gotos (function *fun)
- {
-   /* We are estimating the length of uncond jump insn only once
-      since the code for getting the insn length always returns
-      the minimal length now.  */
-   if (uncond_jump_length == 0)
-     uncond_jump_length = get_uncond_jump_length ();
- 
-   /* Never copy a block larger than this.  */
-   int max_size
-     = uncond_jump_length * param_max_goto_duplication_insns;
- 
-   bool changed = false;
- 
-   /* Try to duplicate all blocks that end in a computed jump and that
-      can be duplicated at all.  */
-   basic_block bb;
-   FOR_EACH_BB_FN (bb, fun)
-     if (computed_jump_p (BB_END (bb)) && can_duplicate_block_p (bb))
-       changed |= maybe_duplicate_computed_goto (bb, max_size);
- 
-   /* Some blocks may have become unreachable.  */
-   if (changed)
-     cleanup_cfg (0);
- 
-   /* Duplicating blocks will redirect edges and may cause hot blocks
-     previously reached by both hot and cold blocks to become dominated
-     only by cold blocks.  */
-   if (changed)
-     fixup_partitions ();
- }
- 
- namespace {
- 
- const pass_data pass_data_duplicate_computed_gotos =
- {
-   RTL_PASS, /* type */
-   "compgotos", /* name */
-   OPTGROUP_NONE, /* optinfo_flags */
-   TV_REORDER_BLOCKS, /* tv_id */
-   0, /* properties_required */
-   0, /* properties_provided */
-   0, /* properties_destroyed */
-   0, /* todo_flags_start */
-   0, /* todo_flags_finish */
- };
- 
- class pass_duplicate_computed_gotos : public rtl_opt_pass
- {
- public:
-   pass_duplicate_computed_gotos (gcc::context *ctxt)
-     : rtl_opt_pass (pass_data_duplicate_computed_gotos, ctxt)
-   {}
- 
-   /* opt_pass methods: */
-   virtual bool gate (function *);
-   virtual unsigned int execute (function *);
- 
- }; // class pass_duplicate_computed_gotos
- 
- bool
- pass_duplicate_computed_gotos::gate (function *fun)
- {
-   if (targetm.cannot_modify_jumps_p ())
-     return false;
-   return (optimize > 0
- 	  && flag_expensive_optimizations
- 	  && ! optimize_function_for_size_p (fun));
- }
- 
- unsigned int
- pass_duplicate_computed_gotos::execute (function *fun)
- {
-   duplicate_computed_gotos (fun);
- 
-   return 0;
- }
- 
- } // anon namespace
- 
- rtl_opt_pass *
- make_pass_duplicate_computed_gotos (gcc::context *ctxt)
- {
-   return new pass_duplicate_computed_gotos (ctxt);
- }
- 
- /* This function is the main 'entrance' for the optimization that
-    partitions hot and cold basic blocks into separate sections of the
-    .o file (to improve performance and cache locality).  Ideally it
-    would be called after all optimizations that rearrange the CFG have
-    been called.  However part of this optimization may introduce new
-    register usage, so it must be called before register allocation has
-    occurred.  This means that this optimization is actually called
-    well before the optimization that reorders basic blocks (see
-    function above).
- 
-    This optimization checks the feedback information to determine
-    which basic blocks are hot/cold, updates flags on the basic blocks
-    to indicate which section they belong in.  This information is
-    later used for writing out sections in the .o file.  Because hot
-    and cold sections can be arbitrarily large (within the bounds of
-    memory), far beyond the size of a single function, it is necessary
-    to fix up all edges that cross section boundaries, to make sure the
-    instructions used can actually span the required distance.  The
-    fixes are described below.
- 
-    Fall-through edges must be changed into jumps; it is not safe or
-    legal to fall through across a section boundary.  Whenever a
-    fall-through edge crossing a section boundary is encountered, a new
-    basic block is inserted (in the same section as the fall-through
-    source), and the fall through edge is redirected to the new basic
-    block.  The new basic block contains an unconditional jump to the
-    original fall-through target.  (If the unconditional jump is
-    insufficient to cross section boundaries, that is dealt with a
-    little later, see below).
- 
-    In order to deal with architectures that have short conditional
-    branches (which cannot span all of memory) we take any conditional
-    jump that attempts to cross a section boundary and add a level of
-    indirection: it becomes a conditional jump to a new basic block, in
-    the same section.  The new basic block contains an unconditional
-    jump to the original target, in the other section.
- 
-    For those architectures whose unconditional branch is also
-    incapable of reaching all of memory, those unconditional jumps are
-    converted into indirect jumps, through a register.
- 
-    IMPORTANT NOTE: This optimization causes some messy interactions
-    with the cfg cleanup optimizations; those optimizations want to
-    merge blocks wherever possible, and to collapse indirect jump
-    sequences (change "A jumps to B jumps to C" directly into "A jumps
-    to C").  Those optimizations can undo the jump fixes that
-    partitioning is required to make (see above), in order to ensure
-    that jumps attempting to cross section boundaries are really able
-    to cover whatever distance the jump requires (on many architectures
-    conditional or unconditional jumps are not able to reach all of
-    memory).  Therefore tests have to be inserted into each such
-    optimization to make sure that it does not undo stuff necessary to
-    cross partition boundaries.  This would be much less of a problem
-    if we could perform this optimization later in the compilation, but
-    unfortunately the fact that we may need to create indirect jumps
-    (through registers) requires that this optimization be performed
-    before register allocation.
- 
-    Hot and cold basic blocks are partitioned and put in separate
-    sections of the .o file, to reduce paging and improve cache
-    performance (hopefully).  This can result in bits of code from the
-    same function being widely separated in the .o file.  However this
-    is not obvious to the current bb structure.  Therefore we must take
-    care to ensure that: 1). There are no fall_thru edges that cross
-    between sections; 2). For those architectures which have "short"
-    conditional branches, all conditional branches that attempt to
-    cross between sections are converted to unconditional branches;
-    and, 3). For those architectures which have "short" unconditional
-    branches, all unconditional branches that attempt to cross between
-    sections are converted to indirect jumps.
- 
-    The code for fixing up fall_thru edges that cross between hot and
-    cold basic blocks does so by creating new basic blocks containing
-    unconditional branches to the appropriate label in the "other"
-    section.  The new basic block is then put in the same (hot or cold)
-    section as the original conditional branch, and the fall_thru edge
-    is modified to fall into the new basic block instead.  By adding
-    this level of indirection we end up with only unconditional branches
-    crossing between hot and cold sections.
- 
-    Conditional branches are dealt with by adding a level of indirection.
-    A new basic block is added in the same (hot/cold) section as the
-    conditional branch, and the conditional branch is retargeted to the
-    new basic block.  The new basic block contains an unconditional branch
-    to the original target of the conditional branch (in the other section).
- 
-    Unconditional branches are dealt with by converting them into
-    indirect jumps.  */
- 
- namespace {
- 
- const pass_data pass_data_partition_blocks =
- {
-   RTL_PASS, /* type */
-   "bbpart", /* name */
-   OPTGROUP_NONE, /* optinfo_flags */
-   TV_REORDER_BLOCKS, /* tv_id */
-   PROP_cfglayout, /* properties_required */
-   0, /* properties_provided */
-   0, /* properties_destroyed */
-   0, /* todo_flags_start */
-   0, /* todo_flags_finish */
- };
- 
- class pass_partition_blocks : public rtl_opt_pass
- {
- public:
-   pass_partition_blocks (gcc::context *ctxt)
-     : rtl_opt_pass (pass_data_partition_blocks, ctxt)
-   {}
- 
-   /* opt_pass methods: */
-   virtual bool gate (function *);
-   virtual unsigned int execute (function *);
- 
- }; // class pass_partition_blocks
- 
- bool
- pass_partition_blocks::gate (function *fun)
- {
-   /* The optimization to partition hot/cold basic blocks into separate
-      sections of the .o file does not work well with linkonce or with
-      user defined section attributes or with naked attribute.  Don't call
-      it if either case arises.  */
-   return (flag_reorder_blocks_and_partition
- 	  && optimize
- 	  /* See pass_reorder_blocks::gate.  We should not partition if
- 	     we are going to omit the reordering.  */
- 	  && optimize_function_for_speed_p (fun)
- 	  && !DECL_COMDAT_GROUP (current_function_decl)
- 	  && !lookup_attribute ("section", DECL_ATTRIBUTES (fun->decl))
- 	  && !lookup_attribute ("naked", DECL_ATTRIBUTES (fun->decl))
- 	  /* Workaround a bug in GDB where read_partial_die doesn't cope
- 	     with DIEs with DW_AT_ranges, see PR81115.  */
- 	  && !(in_lto_p && MAIN_NAME_P (DECL_NAME (fun->decl))));
- }
- 
- unsigned
- pass_partition_blocks::execute (function *fun)
- {
-   vec<edge> crossing_edges;
- 
-   if (n_basic_blocks_for_fn (fun) <= NUM_FIXED_BLOCKS + 1)
-     return 0;
- 
-   df_set_flags (DF_DEFER_INSN_RESCAN);
- 
-   crossing_edges = find_rarely_executed_basic_blocks_and_crossing_edges ();
-   if (!crossing_edges.exists ())
-     /* Make sure to process deferred rescans and clear changeable df flags.  */
-     return TODO_df_finish;
- 
-   crtl->has_bb_partition = true;
- 
-   /* Make sure the source of any crossing edge ends in a jump and the
-      destination of any crossing edge has a label.  */
-   add_labels_and_missing_jumps (crossing_edges);
- 
-   /* Convert all crossing fall_thru edges to non-crossing fall
-      thrus to unconditional jumps (that jump to the original fall
-      through dest).  */
-   fix_up_fall_thru_edges ();
- 
-   /* If the architecture does not have conditional branches that can
-      span all of memory, convert crossing conditional branches into
-      crossing unconditional branches.  */
-   if (!HAS_LONG_COND_BRANCH)
-     fix_crossing_conditional_branches ();
- 
-   /* If the architecture does not have unconditional branches that
-      can span all of memory, convert crossing unconditional branches
-      into indirect jumps.  Since adding an indirect jump also adds
-      a new register usage, update the register usage information as
-      well.  */
-   if (!HAS_LONG_UNCOND_BRANCH)
-     fix_crossing_unconditional_branches ();
- 
-   update_crossing_jump_flags ();
- 
-   /* Clear bb->aux fields that the above routines were using.  */
-   clear_aux_for_blocks ();
- 
-   crossing_edges.release ();
- 
-   /* ??? FIXME: DF generates the bb info for a block immediately.
-      And by immediately, I mean *during* creation of the block.
- 
- 	#0  df_bb_refs_collect
- 	#1  in df_bb_refs_record
- 	#2  in create_basic_block_structure
- 
-      Which means that the bb_has_eh_pred test in df_bb_refs_collect
-      will *always* fail, because no edges can have been added to the
-      block yet.  Which of course means we don't add the right 
-      artificial refs, which means we fail df_verify (much) later.
- 
-      Cleanest solution would seem to make DF_DEFER_INSN_RESCAN imply
-      that we also shouldn't grab data from the new blocks those new
-      insns are in either.  In this way one can create the block, link
-      it up properly, and have everything Just Work later, when deferred
-      insns are processed.
- 
-      In the meantime, we have no other option but to throw away all
-      of the DF data and recompute it all.  */
-   if (fun->eh->lp_array)
-     {
-       df_finish_pass (true);
-       df_scan_alloc (NULL);
-       df_scan_blocks ();
-       /* Not all post-landing pads use all of the EH_RETURN_DATA_REGNO
- 	 data.  We blindly generated all of them when creating the new
- 	 landing pad.  Delete those assignments we don't use.  */
-       df_set_flags (DF_LR_RUN_DCE);
-       df_analyze ();
-     }
- 
-   /* Make sure to process deferred rescans and clear changeable df flags.  */
-   return TODO_df_finish;
- }
- 
- } // anon namespace
- 
- rtl_opt_pass *
- make_pass_partition_blocks (gcc::context *ctxt)
- {
-   return new pass_partition_blocks (ctxt);
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/bb-reorder.cc gcc-12.1.0/gcc/bb-reorder.cc
*** gcc-11.3.0/gcc/bb-reorder.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/bb-reorder.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,3054 ----
+ /* Basic block reordering routines for the GNU compiler.
+    Copyright (C) 2000-2022 Free Software Foundation, Inc.
+ 
+    This file is part of GCC.
+ 
+    GCC is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3, or (at your option)
+    any later version.
+ 
+    GCC is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+    License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with GCC; see the file COPYING3.  If not see
+    <http://www.gnu.org/licenses/>.  */
+ 
+ /* This file contains the "reorder blocks" pass, which changes the control
+    flow of a function to encounter fewer branches; the "partition blocks"
+    pass, which divides the basic blocks into "hot" and "cold" partitions,
+    which are kept separate; and the "duplicate computed gotos" pass, which
+    duplicates blocks ending in an indirect jump.
+ 
+    There are two algorithms for "reorder blocks": the "simple" algorithm,
+    which just rearranges blocks, trying to minimize the number of executed
+    unconditional branches; and the "software trace cache" algorithm, which
+    also copies code, and in general tries a lot harder to have long linear
+    pieces of machine code executed.  This algorithm is described next.  */
+ 
+ /* This (greedy) algorithm constructs traces in several rounds.
+    The construction starts from "seeds".  The seed for the first round
+    is the entry point of the function.  When there are more than one seed,
+    the one with the lowest key in the heap is selected first (see bb_to_key).
+    Then the algorithm repeatedly adds the most probable successor to the end
+    of a trace.  Finally it connects the traces.
+ 
+    There are two parameters: Branch Threshold and Exec Threshold.
+    If the probability of an edge to a successor of the current basic block is
+    lower than Branch Threshold or its count is lower than Exec Threshold,
+    then the successor will be the seed in one of the next rounds.
+    Each round has these parameters lower than the previous one.
+    The last round has to have these parameters set to zero so that the
+    remaining blocks are picked up.
+ 
+    The algorithm selects the most probable successor from all unvisited
+    successors and successors that have been added to this trace.
+    The other successors (that has not been "sent" to the next round) will be
+    other seeds for this round and the secondary traces will start from them.
+    If the successor has not been visited in this trace, it is added to the
+    trace (however, there is some heuristic for simple branches).
+    If the successor has been visited in this trace, a loop has been found.
+    If the loop has many iterations, the loop is rotated so that the source
+    block of the most probable edge going out of the loop is the last block
+    of the trace.
+    If the loop has few iterations and there is no edge from the last block of
+    the loop going out of the loop, the loop header is duplicated.
+ 
+    When connecting traces, the algorithm first checks whether there is an edge
+    from the last block of a trace to the first block of another trace.
+    When there are still some unconnected traces it checks whether there exists
+    a basic block BB such that BB is a successor of the last block of a trace
+    and BB is a predecessor of the first block of another trace.  In this case,
+    BB is duplicated, added at the end of the first trace and the traces are
+    connected through it.
+    The rest of traces are simply connected so there will be a jump to the
+    beginning of the rest of traces.
+ 
+    The above description is for the full algorithm, which is used when the
+    function is optimized for speed.  When the function is optimized for size,
+    in order to reduce long jumps and connect more fallthru edges, the
+    algorithm is modified as follows:
+    (1) Break long traces to short ones.  A trace is broken at a block that has
+    multiple predecessors/ successors during trace discovery.  When connecting
+    traces, only connect Trace n with Trace n + 1.  This change reduces most
+    long jumps compared with the above algorithm.
+    (2) Ignore the edge probability and count for fallthru edges.
+    (3) Keep the original order of blocks when there is no chance to fall
+    through.  We rely on the results of cfg_cleanup.
+ 
+    To implement the change for code size optimization, block's index is
+    selected as the key and all traces are found in one round.
+ 
+    References:
+ 
+    "Software Trace Cache"
+    A. Ramirez, J. Larriba-Pey, C. Navarro, J. Torrellas and M. Valero; 1999
+    http://citeseer.nj.nec.com/15361.html
+ 
+ */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "backend.h"
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
+ #include "cfghooks.h"
+ #include "df.h"
+ #include "memmodel.h"
+ #include "optabs.h"
+ #include "regs.h"
+ #include "emit-rtl.h"
+ #include "output.h"
+ #include "expr.h"
+ #include "tree-pass.h"
+ #include "cfgrtl.h"
+ #include "cfganal.h"
+ #include "cfgbuild.h"
+ #include "cfgcleanup.h"
+ #include "bb-reorder.h"
+ #include "except.h"
+ #include "alloc-pool.h"
+ #include "fibonacci_heap.h"
+ #include "stringpool.h"
+ #include "attribs.h"
+ #include "common/common-target.h"
+ 
+ /* The number of rounds.  In most cases there will only be 4 rounds, but
+    when partitioning hot and cold basic blocks into separate sections of
+    the object file there will be an extra round.  */
+ #define N_ROUNDS 5
+ 
+ struct target_bb_reorder default_target_bb_reorder;
+ #if SWITCHABLE_TARGET
+ struct target_bb_reorder *this_target_bb_reorder = &default_target_bb_reorder;
+ #endif
+ 
+ #define uncond_jump_length \
+   (this_target_bb_reorder->x_uncond_jump_length)
+ 
+ /* Branch thresholds in thousandths (per mille) of the REG_BR_PROB_BASE.  */
+ static const int branch_threshold[N_ROUNDS] = {400, 200, 100, 0, 0};
+ 
+ /* Exec thresholds in thousandths (per mille) of the count of bb 0.  */
+ static const int exec_threshold[N_ROUNDS] = {500, 200, 50, 0, 0};
+ 
+ /* If edge count is lower than DUPLICATION_THRESHOLD per mille of entry
+    block the edge destination is not duplicated while connecting traces.  */
+ #define DUPLICATION_THRESHOLD 100
+ 
+ typedef fibonacci_heap <long, basic_block_def> bb_heap_t;
+ typedef fibonacci_node <long, basic_block_def> bb_heap_node_t;
+ 
+ /* Structure to hold needed information for each basic block.  */
+ struct bbro_basic_block_data
+ {
+   /* Which trace is the bb start of (-1 means it is not a start of any).  */
+   int start_of_trace;
+ 
+   /* Which trace is the bb end of (-1 means it is not an end of any).  */
+   int end_of_trace;
+ 
+   /* Which trace is the bb in?  */
+   int in_trace;
+ 
+   /* Which trace was this bb visited in?  */
+   int visited;
+ 
+   /* Cached maximum frequency of interesting incoming edges.
+      Minus one means not yet computed.  */
+   int priority;
+ 
+   /* Which heap is BB in (if any)?  */
+   bb_heap_t *heap;
+ 
+   /* Which heap node is BB in (if any)?  */
+   bb_heap_node_t *node;
+ };
+ 
+ /* The current size of the following dynamic array.  */
+ static int array_size;
+ 
+ /* The array which holds needed information for basic blocks.  */
+ static bbro_basic_block_data *bbd;
+ 
+ /* To avoid frequent reallocation the size of arrays is greater than needed,
+    the number of elements is (not less than) 1.25 * size_wanted.  */
+ #define GET_ARRAY_SIZE(X) ((((X) / 4) + 1) * 5)
+ 
+ /* Free the memory and set the pointer to NULL.  */
+ #define FREE(P) (gcc_assert (P), free (P), P = 0)
+ 
+ /* Structure for holding information about a trace.  */
+ struct trace
+ {
+   /* First and last basic block of the trace.  */
+   basic_block first, last;
+ 
+   /* The round of the STC creation which this trace was found in.  */
+   int round;
+ 
+   /* The length (i.e. the number of basic blocks) of the trace.  */
+   int length;
+ };
+ 
+ /* Maximum count of one of the entry blocks.  */
+ static profile_count max_entry_count;
+ 
+ /* Local function prototypes.  */
+ static void find_traces_1_round (int, profile_count, struct trace *, int *,
+ 				 int, bb_heap_t **, int);
+ static basic_block copy_bb (basic_block, edge, basic_block, int);
+ static long bb_to_key (basic_block);
+ static bool better_edge_p (const_basic_block, const_edge, profile_probability,
+ 			   profile_count, profile_probability, profile_count,
+ 			   const_edge);
+ static bool copy_bb_p (const_basic_block, int);
+ 
+ /* Return the trace number in which BB was visited.  */
+ 
+ static int
+ bb_visited_trace (const_basic_block bb)
+ {
+   gcc_assert (bb->index < array_size);
+   return bbd[bb->index].visited;
+ }
+ 
+ /* This function marks BB that it was visited in trace number TRACE.  */
+ 
+ static void
+ mark_bb_visited (basic_block bb, int trace)
+ {
+   bbd[bb->index].visited = trace;
+   if (bbd[bb->index].heap)
+     {
+       bbd[bb->index].heap->delete_node (bbd[bb->index].node);
+       bbd[bb->index].heap = NULL;
+       bbd[bb->index].node = NULL;
+     }
+ }
+ 
+ /* Check to see if bb should be pushed into the next round of trace
+    collections or not.  Reasons for pushing the block forward are 1).
+    If the block is cold, we are doing partitioning, and there will be
+    another round (cold partition blocks are not supposed to be
+    collected into traces until the very last round); or 2). There will
+    be another round, and the basic block is not "hot enough" for the
+    current round of trace collection.  */
+ 
+ static bool
+ push_to_next_round_p (const_basic_block bb, int round, int number_of_rounds,
+ 		      profile_count count_th)
+ {
+   bool there_exists_another_round;
+   bool block_not_hot_enough;
+ 
+   there_exists_another_round = round < number_of_rounds - 1;
+ 
+   block_not_hot_enough = (bb->count < count_th
+ 			  || probably_never_executed_bb_p (cfun, bb));
+ 
+   if (there_exists_another_round
+       && block_not_hot_enough)
+     return true;
+   else
+     return false;
+ }
+ 
+ /* Find the traces for Software Trace Cache.  Chain each trace through
+    RBI()->next.  Store the number of traces to N_TRACES and description of
+    traces to TRACES.  */
+ 
+ static void
+ find_traces (int *n_traces, struct trace *traces)
+ {
+   int i;
+   int number_of_rounds;
+   edge e;
+   edge_iterator ei;
+   bb_heap_t *heap = new bb_heap_t (LONG_MIN);
+ 
+   /* Add one extra round of trace collection when partitioning hot/cold
+      basic blocks into separate sections.  The last round is for all the
+      cold blocks (and ONLY the cold blocks).  */
+ 
+   number_of_rounds = N_ROUNDS - 1;
+ 
+   /* Insert entry points of function into heap.  */
+   max_entry_count = profile_count::zero ();
+   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR_FOR_FN (cfun)->succs)
+     {
+       bbd[e->dest->index].heap = heap;
+       bbd[e->dest->index].node = heap->insert (bb_to_key (e->dest), e->dest);
+       if (e->dest->count > max_entry_count)
+ 	max_entry_count = e->dest->count;
+     }
+ 
+   /* Find the traces.  */
+   for (i = 0; i < number_of_rounds; i++)
+     {
+       profile_count count_threshold;
+ 
+       if (dump_file)
+ 	fprintf (dump_file, "STC - round %d\n", i + 1);
+ 
+       count_threshold = max_entry_count.apply_scale (exec_threshold[i], 1000);
+ 
+       find_traces_1_round (REG_BR_PROB_BASE * branch_threshold[i] / 1000,
+ 			   count_threshold, traces, n_traces, i, &heap,
+ 			   number_of_rounds);
+     }
+   delete heap;
+ 
+   if (dump_file)
+     {
+       for (i = 0; i < *n_traces; i++)
+ 	{
+ 	  basic_block bb;
+ 	  fprintf (dump_file, "Trace %d (round %d):  ", i + 1,
+ 		   traces[i].round + 1);
+ 	  for (bb = traces[i].first;
+ 	       bb != traces[i].last;
+ 	       bb = (basic_block) bb->aux)
+ 	    {
+ 	      fprintf (dump_file, "%d [", bb->index);
+ 	      bb->count.dump (dump_file);
+ 	      fprintf (dump_file, "] ");
+ 	    }
+ 	  fprintf (dump_file, "%d [", bb->index);
+ 	  bb->count.dump (dump_file);
+ 	  fprintf (dump_file, "]\n");
+ 	}
+       fflush (dump_file);
+     }
+ }
+ 
+ /* Rotate loop whose back edge is BACK_EDGE in the tail of trace TRACE
+    (with sequential number TRACE_N).  */
+ 
+ static basic_block
+ rotate_loop (edge back_edge, struct trace *trace, int trace_n)
+ {
+   basic_block bb;
+ 
+   /* Information about the best end (end after rotation) of the loop.  */
+   basic_block best_bb = NULL;
+   edge best_edge = NULL;
+   profile_count best_count = profile_count::uninitialized ();
+   /* The best edge is preferred when its destination is not visited yet
+      or is a start block of some trace.  */
+   bool is_preferred = false;
+ 
+   /* Find the most frequent edge that goes out from current trace.  */
+   bb = back_edge->dest;
+   do
+     {
+       edge e;
+       edge_iterator ei;
+ 
+       FOR_EACH_EDGE (e, ei, bb->succs)
+ 	if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)
+ 	    && bb_visited_trace (e->dest) != trace_n
+ 	    && (e->flags & EDGE_CAN_FALLTHRU)
+ 	    && !(e->flags & EDGE_COMPLEX))
+ 	{
+ 	  if (is_preferred)
+ 	    {
+ 	      /* The best edge is preferred.  */
+ 	      if (!bb_visited_trace (e->dest)
+ 		  || bbd[e->dest->index].start_of_trace >= 0)
+ 		{
+ 		  /* The current edge E is also preferred.  */
+ 		  if (e->count () > best_count)
+ 		    {
+ 		      best_count = e->count ();
+ 		      best_edge = e;
+ 		      best_bb = bb;
+ 		    }
+ 		}
+ 	    }
+ 	  else
+ 	    {
+ 	      if (!bb_visited_trace (e->dest)
+ 		  || bbd[e->dest->index].start_of_trace >= 0)
+ 		{
+ 		  /* The current edge E is preferred.  */
+ 		  is_preferred = true;
+ 		  best_count = e->count ();
+ 		  best_edge = e;
+ 		  best_bb = bb;
+ 		}
+ 	      else
+ 		{
+ 		  if (!best_edge || e->count () > best_count)
+ 		    {
+ 		      best_count = e->count ();
+ 		      best_edge = e;
+ 		      best_bb = bb;
+ 		    }
+ 		}
+ 	    }
+ 	}
+       bb = (basic_block) bb->aux;
+     }
+   while (bb != back_edge->dest);
+ 
+   if (best_bb)
+     {
+       /* Rotate the loop so that the BEST_EDGE goes out from the last block of
+ 	 the trace.  */
+       if (back_edge->dest == trace->first)
+ 	{
+ 	  trace->first = (basic_block) best_bb->aux;
+ 	}
+       else
+ 	{
+ 	  basic_block prev_bb;
+ 
+ 	  for (prev_bb = trace->first;
+ 	       prev_bb->aux != back_edge->dest;
+ 	       prev_bb = (basic_block) prev_bb->aux)
+ 	    ;
+ 	  prev_bb->aux = best_bb->aux;
+ 
+ 	  /* Try to get rid of uncond jump to cond jump.  */
+ 	  if (single_succ_p (prev_bb))
+ 	    {
+ 	      basic_block header = single_succ (prev_bb);
+ 
+ 	      /* Duplicate HEADER if it is a small block containing cond jump
+ 		 in the end.  */
+ 	      if (any_condjump_p (BB_END (header)) && copy_bb_p (header, 0)
+ 		  && !CROSSING_JUMP_P (BB_END (header)))
+ 		copy_bb (header, single_succ_edge (prev_bb), prev_bb, trace_n);
+ 	    }
+ 	}
+     }
+   else
+     {
+       /* We have not found suitable loop tail so do no rotation.  */
+       best_bb = back_edge->src;
+     }
+   best_bb->aux = NULL;
+   return best_bb;
+ }
+ 
+ /* One round of finding traces.  Find traces for BRANCH_TH and EXEC_TH i.e. do
+    not include basic blocks whose probability is lower than BRANCH_TH or whose
+    count is lower than EXEC_TH into traces (or whose count is lower than
+    COUNT_TH).  Store the new traces into TRACES and modify the number of
+    traces *N_TRACES.  Set the round (which the trace belongs to) to ROUND.
+    The function expects starting basic blocks to be in *HEAP and will delete
+    *HEAP and store starting points for the next round into new *HEAP.  */
+ 
+ static void
+ find_traces_1_round (int branch_th, profile_count count_th,
+ 		     struct trace *traces, int *n_traces, int round,
+ 		     bb_heap_t **heap, int number_of_rounds)
+ {
+   /* Heap for discarded basic blocks which are possible starting points for
+      the next round.  */
+   bb_heap_t *new_heap = new bb_heap_t (LONG_MIN);
+   bool for_size = optimize_function_for_size_p (cfun);
+ 
+   while (!(*heap)->empty ())
+     {
+       basic_block bb;
+       struct trace *trace;
+       edge best_edge, e;
+       long key;
+       edge_iterator ei;
+ 
+       bb = (*heap)->extract_min ();
+       bbd[bb->index].heap = NULL;
+       bbd[bb->index].node = NULL;
+ 
+       if (dump_file)
+ 	fprintf (dump_file, "Getting bb %d\n", bb->index);
+ 
+       /* If the BB's count is too low, send BB to the next round.  When
+ 	 partitioning hot/cold blocks into separate sections, make sure all
+ 	 the cold blocks (and ONLY the cold blocks) go into the (extra) final
+ 	 round.  When optimizing for size, do not push to next round.  */
+ 
+       if (!for_size
+ 	  && push_to_next_round_p (bb, round, number_of_rounds,
+ 				   count_th))
+ 	{
+ 	  int key = bb_to_key (bb);
+ 	  bbd[bb->index].heap = new_heap;
+ 	  bbd[bb->index].node = new_heap->insert (key, bb);
+ 
+ 	  if (dump_file)
+ 	    fprintf (dump_file,
+ 		     "  Possible start point of next round: %d (key: %d)\n",
+ 		     bb->index, key);
+ 	  continue;
+ 	}
+ 
+       trace = traces + *n_traces;
+       trace->first = bb;
+       trace->round = round;
+       trace->length = 0;
+       bbd[bb->index].in_trace = *n_traces;
+       (*n_traces)++;
+ 
+       do
+ 	{
+ 	  bool ends_in_call;
+ 
+ 	  /* The probability and count of the best edge.  */
+ 	  profile_probability best_prob = profile_probability::uninitialized ();
+ 	  profile_count best_count = profile_count::uninitialized ();
+ 
+ 	  best_edge = NULL;
+ 	  mark_bb_visited (bb, *n_traces);
+ 	  trace->length++;
+ 
+ 	  if (dump_file)
+ 	    fprintf (dump_file, "Basic block %d was visited in trace %d\n",
+ 		     bb->index, *n_traces);
+ 
+ 	  ends_in_call = block_ends_with_call_p (bb);
+ 
+ 	  /* Select the successor that will be placed after BB.  */
+ 	  FOR_EACH_EDGE (e, ei, bb->succs)
+ 	    {
+ 	      gcc_assert (!(e->flags & EDGE_FAKE));
+ 
+ 	      if (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
+ 		continue;
+ 
+ 	      if (bb_visited_trace (e->dest)
+ 		  && bb_visited_trace (e->dest) != *n_traces)
+ 		continue;
+ 
+ 	      /* If partitioning hot/cold basic blocks, don't consider edges
+ 		 that cross section boundaries.  */
+ 	      if (BB_PARTITION (e->dest) != BB_PARTITION (bb))
+ 		continue;
+ 
+ 	      profile_probability prob = e->probability;
+ 	      profile_count count = e->dest->count;
+ 
+ 	      /* The only sensible preference for a call instruction is the
+ 		 fallthru edge.  Don't bother selecting anything else.  */
+ 	      if (ends_in_call)
+ 		{
+ 		  if (e->flags & EDGE_CAN_FALLTHRU)
+ 		    {
+ 		      best_edge = e;
+ 		      best_prob = prob;
+ 		      best_count = count;
+ 		    }
+ 		  continue;
+ 		}
+ 
+ 	      /* Edge that cannot be fallthru or improbable or infrequent
+ 		 successor (i.e. it is unsuitable successor).  When optimizing
+ 		 for size, ignore the probability and count.  */
+ 	      if (!(e->flags & EDGE_CAN_FALLTHRU) || (e->flags & EDGE_COMPLEX)
+ 		  || !prob.initialized_p ()
+ 		  || ((prob.to_reg_br_prob_base () < branch_th
+ 		      || e->count () < count_th) && (!for_size)))
+ 		continue;
+ 
+ 	      if (better_edge_p (bb, e, prob, count, best_prob, best_count,
+ 				 best_edge))
+ 		{
+ 		  best_edge = e;
+ 		  best_prob = prob;
+ 		  best_count = count;
+ 		}
+ 	    }
+ 
+ 	  /* If the best destination has multiple predecessors and can be
+ 	     duplicated cheaper than a jump, don't allow it to be added to
+ 	     a trace; we'll duplicate it when connecting the traces later.
+ 	     However, we need to check that this duplication wouldn't leave
+ 	     the best destination with only crossing predecessors, because
+ 	     this would change its effective partition from hot to cold.  */
+ 	  if (best_edge
+ 	      && EDGE_COUNT (best_edge->dest->preds) >= 2
+ 	      && copy_bb_p (best_edge->dest, 0))
+ 	    {
+ 	      bool only_crossing_preds = true;
+ 	      edge e;
+ 	      edge_iterator ei;
+ 	      FOR_EACH_EDGE (e, ei, best_edge->dest->preds)
+ 		if (e != best_edge && !(e->flags & EDGE_CROSSING))
+ 		  {
+ 		    only_crossing_preds = false;
+ 		    break;
+ 		  }
+ 	      if (!only_crossing_preds)
+ 		best_edge = NULL;
+ 	    }
+ 
+ 	  /* If the best destination has multiple successors or predecessors,
+ 	     don't allow it to be added when optimizing for size.  This makes
+ 	     sure predecessors with smaller index are handled before the best
+ 	     destination.  It breaks long trace and reduces long jumps.
+ 
+ 	     Take if-then-else as an example.
+ 		A
+ 	       / \
+ 	      B   C
+ 	       \ /
+ 		D
+ 	     If we do not remove the best edge B->D/C->D, the final order might
+ 	     be A B D ... C.  C is at the end of the program.  If D's successors
+ 	     and D are complicated, might need long jumps for A->C and C->D.
+ 	     Similar issue for order: A C D ... B.
+ 
+ 	     After removing the best edge, the final result will be ABCD/ ACBD.
+ 	     It does not add jump compared with the previous order.  But it
+ 	     reduces the possibility of long jumps.  */
+ 	  if (best_edge && for_size
+ 	      && (EDGE_COUNT (best_edge->dest->succs) > 1
+ 		 || EDGE_COUNT (best_edge->dest->preds) > 1))
+ 	    best_edge = NULL;
+ 
+ 	  /* Add all non-selected successors to the heaps.  */
+ 	  FOR_EACH_EDGE (e, ei, bb->succs)
+ 	    {
+ 	      if (e == best_edge
+ 		  || e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun)
+ 		  || bb_visited_trace (e->dest))
+ 		continue;
+ 
+ 	      key = bb_to_key (e->dest);
+ 
+ 	      if (bbd[e->dest->index].heap)
+ 		{
+ 		  /* E->DEST is already in some heap.  */
+ 		  if (key != bbd[e->dest->index].node->get_key ())
+ 		    {
+ 		      if (dump_file)
+ 			{
+ 			  fprintf (dump_file,
+ 				   "Changing key for bb %d from %ld to %ld.\n",
+ 				   e->dest->index,
+ 				   (long) bbd[e->dest->index].node->get_key (),
+ 				   key);
+ 			}
+ 		      bbd[e->dest->index].heap->replace_key
+ 		        (bbd[e->dest->index].node, key);
+ 		    }
+ 		}
+ 	      else
+ 		{
+ 		  bb_heap_t *which_heap = *heap;
+ 
+ 		  profile_probability prob = e->probability;
+ 
+ 		  if (!(e->flags & EDGE_CAN_FALLTHRU)
+ 		      || (e->flags & EDGE_COMPLEX)
+ 		      || !prob.initialized_p ()
+ 		      || prob.to_reg_br_prob_base () < branch_th
+ 		      || e->count () < count_th)
+ 		    {
+ 		      /* When partitioning hot/cold basic blocks, make sure
+ 			 the cold blocks (and only the cold blocks) all get
+ 			 pushed to the last round of trace collection.  When
+ 			 optimizing for size, do not push to next round.  */
+ 
+ 		      if (!for_size && push_to_next_round_p (e->dest, round,
+ 							     number_of_rounds,
+ 							     count_th))
+ 			which_heap = new_heap;
+ 		    }
+ 
+ 		  bbd[e->dest->index].heap = which_heap;
+ 		  bbd[e->dest->index].node = which_heap->insert (key, e->dest);
+ 
+ 		  if (dump_file)
+ 		    {
+ 		      fprintf (dump_file,
+ 			       "  Possible start of %s round: %d (key: %ld)\n",
+ 			       (which_heap == new_heap) ? "next" : "this",
+ 			       e->dest->index, (long) key);
+ 		    }
+ 
+ 		}
+ 	    }
+ 
+ 	  if (best_edge) /* Suitable successor was found.  */
+ 	    {
+ 	      if (bb_visited_trace (best_edge->dest) == *n_traces)
+ 		{
+ 		  /* We do nothing with one basic block loops.  */
+ 		  if (best_edge->dest != bb)
+ 		    {
+ 		      if (best_edge->count ()
+ 			  > best_edge->dest->count.apply_scale (4, 5))
+ 			{
+ 			  /* The loop has at least 4 iterations.  If the loop
+ 			     header is not the first block of the function
+ 			     we can rotate the loop.  */
+ 
+ 			  if (best_edge->dest
+ 			      != ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb)
+ 			    {
+ 			      if (dump_file)
+ 				{
+ 				  fprintf (dump_file,
+ 					   "Rotating loop %d - %d\n",
+ 					   best_edge->dest->index, bb->index);
+ 				}
+ 			      bb->aux = best_edge->dest;
+ 			      bbd[best_edge->dest->index].in_trace =
+ 							     (*n_traces) - 1;
+ 			      bb = rotate_loop (best_edge, trace, *n_traces);
+ 			    }
+ 			}
+ 		      else
+ 			{
+ 			  /* The loop has less than 4 iterations.  */
+ 
+ 			  if (single_succ_p (bb)
+ 			      && copy_bb_p (best_edge->dest,
+ 			      		    optimize_edge_for_speed_p
+ 			      		    (best_edge)))
+ 			    {
+ 			      bb = copy_bb (best_edge->dest, best_edge, bb,
+ 					    *n_traces);
+ 			      trace->length++;
+ 			    }
+ 			}
+ 		    }
+ 
+ 		  /* Terminate the trace.  */
+ 		  break;
+ 		}
+ 	      else
+ 		{
+ 		  /* Check for a situation
+ 
+ 		    A
+ 		   /|
+ 		  B |
+ 		   \|
+ 		    C
+ 
+ 		  where
+ 		  AB->count () + BC->count () >= AC->count ().
+ 		  (i.e. 2 * B->count >= AC->count )
+ 		  Best ordering is then A B C.
+ 
+ 		  When optimizing for size, A B C is always the best order.
+ 
+ 		  This situation is created for example by:
+ 
+ 		  if (A) B;
+ 		  C;
+ 
+ 		  */
+ 
+ 		  FOR_EACH_EDGE (e, ei, bb->succs)
+ 		    if (e != best_edge
+ 			&& (e->flags & EDGE_CAN_FALLTHRU)
+ 			&& !(e->flags & EDGE_COMPLEX)
+ 			&& !bb_visited_trace (e->dest)
+ 			&& single_pred_p (e->dest)
+ 			&& !(e->flags & EDGE_CROSSING)
+ 			&& single_succ_p (e->dest)
+ 			&& (single_succ_edge (e->dest)->flags
+ 			    & EDGE_CAN_FALLTHRU)
+ 			&& !(single_succ_edge (e->dest)->flags & EDGE_COMPLEX)
+ 			&& single_succ (e->dest) == best_edge->dest
+ 			&& (e->dest->count.apply_scale (2, 1)
+ 			    >= best_edge->count () || for_size))
+ 		      {
+ 			best_edge = e;
+ 			if (dump_file)
+ 			  fprintf (dump_file, "Selecting BB %d\n",
+ 				   best_edge->dest->index);
+ 			break;
+ 		      }
+ 
+ 		  bb->aux = best_edge->dest;
+ 		  bbd[best_edge->dest->index].in_trace = (*n_traces) - 1;
+ 		  bb = best_edge->dest;
+ 		}
+ 	    }
+ 	}
+       while (best_edge);
+       trace->last = bb;
+       bbd[trace->first->index].start_of_trace = *n_traces - 1;
+       if (bbd[trace->last->index].end_of_trace != *n_traces - 1)
+ 	{
+ 	  bbd[trace->last->index].end_of_trace = *n_traces - 1;
+ 	  /* Update the cached maximum frequency for interesting predecessor
+ 	     edges for successors of the new trace end.  */
+ 	  FOR_EACH_EDGE (e, ei, trace->last->succs)
+ 	    if (EDGE_FREQUENCY (e) > bbd[e->dest->index].priority)
+ 	      bbd[e->dest->index].priority = EDGE_FREQUENCY (e);
+ 	}
+ 
+       /* The trace is terminated so we have to recount the keys in heap
+ 	 (some block can have a lower key because now one of its predecessors
+ 	 is an end of the trace).  */
+       FOR_EACH_EDGE (e, ei, bb->succs)
+ 	{
+ 	  if (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun)
+ 	      || bb_visited_trace (e->dest))
+ 	    continue;
+ 
+ 	  if (bbd[e->dest->index].heap)
+ 	    {
+ 	      key = bb_to_key (e->dest);
+ 	      if (key != bbd[e->dest->index].node->get_key ())
+ 		{
+ 		  if (dump_file)
+ 		    {
+ 		      fprintf (dump_file,
+ 			       "Changing key for bb %d from %ld to %ld.\n",
+ 			       e->dest->index,
+ 			       (long) bbd[e->dest->index].node->get_key (), key);
+ 		    }
+ 		  bbd[e->dest->index].heap->replace_key
+ 		    (bbd[e->dest->index].node, key);
+ 		}
+ 	    }
+ 	}
+     }
+ 
+   delete (*heap);
+ 
+   /* "Return" the new heap.  */
+   *heap = new_heap;
+ }
+ 
+ /* Create a duplicate of the basic block OLD_BB and redirect edge E to it, add
+    it to trace after BB, mark OLD_BB visited and update pass' data structures
+    (TRACE is a number of trace which OLD_BB is duplicated to).  */
+ 
+ static basic_block
+ copy_bb (basic_block old_bb, edge e, basic_block bb, int trace)
+ {
+   basic_block new_bb;
+ 
+   new_bb = duplicate_block (old_bb, e, bb);
+   BB_COPY_PARTITION (new_bb, old_bb);
+ 
+   gcc_assert (e->dest == new_bb);
+ 
+   if (dump_file)
+     fprintf (dump_file,
+ 	     "Duplicated bb %d (created bb %d)\n",
+ 	     old_bb->index, new_bb->index);
+ 
+   if (new_bb->index >= array_size
+       || last_basic_block_for_fn (cfun) > array_size)
+     {
+       int i;
+       int new_size;
+ 
+       new_size = MAX (last_basic_block_for_fn (cfun), new_bb->index + 1);
+       new_size = GET_ARRAY_SIZE (new_size);
+       bbd = XRESIZEVEC (bbro_basic_block_data, bbd, new_size);
+       for (i = array_size; i < new_size; i++)
+ 	{
+ 	  bbd[i].start_of_trace = -1;
+ 	  bbd[i].end_of_trace = -1;
+ 	  bbd[i].in_trace = -1;
+ 	  bbd[i].visited = 0;
+ 	  bbd[i].priority = -1;
+ 	  bbd[i].heap = NULL;
+ 	  bbd[i].node = NULL;
+ 	}
+       array_size = new_size;
+ 
+       if (dump_file)
+ 	{
+ 	  fprintf (dump_file,
+ 		   "Growing the dynamic array to %d elements.\n",
+ 		   array_size);
+ 	}
+     }
+ 
+   gcc_assert (!bb_visited_trace (e->dest));
+   mark_bb_visited (new_bb, trace);
+   new_bb->aux = bb->aux;
+   bb->aux = new_bb;
+ 
+   bbd[new_bb->index].in_trace = trace;
+ 
+   return new_bb;
+ }
+ 
+ /* Compute and return the key (for the heap) of the basic block BB.  */
+ 
+ static long
+ bb_to_key (basic_block bb)
+ {
+   edge e;
+   edge_iterator ei;
+ 
+   /* Use index as key to align with its original order.  */
+   if (optimize_function_for_size_p (cfun))
+     return bb->index;
+ 
+   /* Do not start in probably never executed blocks.  */
+ 
+   if (BB_PARTITION (bb) == BB_COLD_PARTITION
+       || probably_never_executed_bb_p (cfun, bb))
+     return BB_FREQ_MAX;
+ 
+   /* Prefer blocks whose predecessor is an end of some trace
+      or whose predecessor edge is EDGE_DFS_BACK.  */
+   int priority = bbd[bb->index].priority;
+   if (priority == -1)
+     {
+       priority = 0;
+       FOR_EACH_EDGE (e, ei, bb->preds)
+ 	{
+ 	  if ((e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun)
+ 	       && bbd[e->src->index].end_of_trace >= 0)
+ 	      || (e->flags & EDGE_DFS_BACK))
+ 	    {
+ 	      int edge_freq = EDGE_FREQUENCY (e);
+ 
+ 	      if (edge_freq > priority)
+ 		priority = edge_freq;
+ 	    }
+ 	}
+       bbd[bb->index].priority = priority;
+     }
+ 
+   if (priority)
+     /* The block with priority should have significantly lower key.  */
+     return -(100 * BB_FREQ_MAX + 100 * priority + bb->count.to_frequency (cfun));
+ 
+   return -bb->count.to_frequency (cfun);
+ }
+ 
+ /* Return true when the edge E from basic block BB is better than the temporary
+    best edge (details are in function).  The probability of edge E is PROB. The
+    count of the successor is COUNT.  The current best probability is
+    BEST_PROB, the best count is BEST_COUNT.
+    The edge is considered to be equivalent when PROB does not differ much from
+    BEST_PROB; similarly for count.  */
+ 
+ static bool
+ better_edge_p (const_basic_block bb, const_edge e, profile_probability prob,
+ 	       profile_count count, profile_probability best_prob,
+ 	       profile_count best_count, const_edge cur_best_edge)
+ {
+   bool is_better_edge;
+ 
+   /* The BEST_* values do not have to be best, but can be a bit smaller than
+      maximum values.  */
+   profile_probability diff_prob = best_prob.apply_scale (1, 10);
+ 
+   /* The smaller one is better to keep the original order.  */
+   if (optimize_function_for_size_p (cfun))
+     return !cur_best_edge
+ 	   || cur_best_edge->dest->index > e->dest->index;
+ 
+   /* Those edges are so expensive that continuing a trace is not useful
+      performance wise.  */
+   if (e->flags & (EDGE_ABNORMAL | EDGE_EH))
+     return false;
+ 
+   if (prob > best_prob + diff_prob
+       || (!best_prob.initialized_p ()
+ 	  && prob > profile_probability::guessed_never ()))
+     /* The edge has higher probability than the temporary best edge.  */
+     is_better_edge = true;
+   else if (prob < best_prob - diff_prob)
+     /* The edge has lower probability than the temporary best edge.  */
+     is_better_edge = false;
+   else
+     {
+       profile_count diff_count = best_count.apply_scale (1, 10);
+       if (count < best_count - diff_count
+ 	  || (!best_count.initialized_p ()
+ 	      && count.nonzero_p ()))
+ 	/* The edge and the temporary best edge  have almost equivalent
+ 	   probabilities.  The higher countuency of a successor now means
+ 	   that there is another edge going into that successor.
+ 	   This successor has lower countuency so it is better.  */
+ 	is_better_edge = true;
+       else if (count > best_count + diff_count)
+ 	/* This successor has higher countuency so it is worse.  */
+ 	is_better_edge = false;
+       else if (e->dest->prev_bb == bb)
+ 	/* The edges have equivalent probabilities and the successors
+ 	   have equivalent frequencies.  Select the previous successor.  */
+ 	is_better_edge = true;
+       else
+ 	is_better_edge = false;
+     }
+ 
+   return is_better_edge;
+ }
+ 
+ /* Return true when the edge E is better than the temporary best edge
+    CUR_BEST_EDGE.  If SRC_INDEX_P is true, the function compares the src bb of
+    E and CUR_BEST_EDGE; otherwise it will compare the dest bb.
+    BEST_LEN is the trace length of src (or dest) bb in CUR_BEST_EDGE.
+    TRACES record the information about traces.
+    When optimizing for size, the edge with smaller index is better.
+    When optimizing for speed, the edge with bigger probability or longer trace
+    is better.  */
+ 
+ static bool
+ connect_better_edge_p (const_edge e, bool src_index_p, int best_len,
+ 		       const_edge cur_best_edge, struct trace *traces)
+ {
+   int e_index;
+   int b_index;
+   bool is_better_edge;
+ 
+   if (!cur_best_edge)
+     return true;
+ 
+   if (optimize_function_for_size_p (cfun))
+     {
+       e_index = src_index_p ? e->src->index : e->dest->index;
+       b_index = src_index_p ? cur_best_edge->src->index
+ 			      : cur_best_edge->dest->index;
+       /* The smaller one is better to keep the original order.  */
+       return b_index > e_index;
+     }
+ 
+   if (src_index_p)
+     {
+       e_index = e->src->index;
+ 
+       /* We are looking for predecessor, so probabilities are not that
+ 	 informative.  We do not want to connect A to B because A has
+ 	 only one successor (probability is 100%) while there is edge
+ 	 A' to B where probability is 90% but which is much more frequent.  */
+       if (e->count () > cur_best_edge->count ())
+ 	/* The edge has higher probability than the temporary best edge.  */
+ 	is_better_edge = true;
+       else if (e->count () < cur_best_edge->count ())
+ 	/* The edge has lower probability than the temporary best edge.  */
+ 	is_better_edge = false;
+       else if (e->probability > cur_best_edge->probability)
+ 	/* The edge has higher probability than the temporary best edge.  */
+ 	is_better_edge = true;
+       else if (e->probability < cur_best_edge->probability)
+ 	/* The edge has lower probability than the temporary best edge.  */
+ 	is_better_edge = false;
+       else if (traces[bbd[e_index].end_of_trace].length > best_len)
+ 	/* The edge and the temporary best edge have equivalent probabilities.
+ 	   The edge with longer trace is better.  */
+ 	is_better_edge = true;
+       else
+ 	is_better_edge = false;
+     }
+   else
+     {
+       e_index = e->dest->index;
+ 
+       if (e->probability > cur_best_edge->probability)
+ 	/* The edge has higher probability than the temporary best edge.  */
+ 	is_better_edge = true;
+       else if (e->probability < cur_best_edge->probability)
+ 	/* The edge has lower probability than the temporary best edge.  */
+ 	is_better_edge = false;
+       else if (traces[bbd[e_index].start_of_trace].length > best_len)
+ 	/* The edge and the temporary best edge have equivalent probabilities.
+ 	   The edge with longer trace is better.  */
+ 	is_better_edge = true;
+       else
+ 	is_better_edge = false;
+     }
+ 
+   return is_better_edge;
+ }
+ 
+ /* Connect traces in array TRACES, N_TRACES is the count of traces.  */
+ 
+ static void
+ connect_traces (int n_traces, struct trace *traces)
+ {
+   int i;
+   bool *connected;
+   bool two_passes;
+   int last_trace;
+   int current_pass;
+   int current_partition;
+   profile_count count_threshold;
+   bool for_size = optimize_function_for_size_p (cfun);
+ 
+   count_threshold = max_entry_count.apply_scale (DUPLICATION_THRESHOLD, 1000);
+ 
+   connected = XCNEWVEC (bool, n_traces);
+   last_trace = -1;
+   current_pass = 1;
+   current_partition = BB_PARTITION (traces[0].first);
+   two_passes = false;
+ 
+   if (crtl->has_bb_partition)
+     for (i = 0; i < n_traces && !two_passes; i++)
+       if (BB_PARTITION (traces[0].first)
+ 	  != BB_PARTITION (traces[i].first))
+ 	two_passes = true;
+ 
+   for (i = 0; i < n_traces || (two_passes && current_pass == 1) ; i++)
+     {
+       int t = i;
+       int t2;
+       edge e, best;
+       int best_len;
+ 
+       if (i >= n_traces)
+ 	{
+ 	  gcc_assert (two_passes && current_pass == 1);
+ 	  i = 0;
+ 	  t = i;
+ 	  current_pass = 2;
+ 	  if (current_partition == BB_HOT_PARTITION)
+ 	    current_partition = BB_COLD_PARTITION;
+ 	  else
+ 	    current_partition = BB_HOT_PARTITION;
+ 	}
+ 
+       if (connected[t])
+ 	continue;
+ 
+       if (two_passes
+ 	  && BB_PARTITION (traces[t].first) != current_partition)
+ 	continue;
+ 
+       connected[t] = true;
+ 
+       /* Find the predecessor traces.  */
+       for (t2 = t; t2 > 0;)
+ 	{
+ 	  edge_iterator ei;
+ 	  best = NULL;
+ 	  best_len = 0;
+ 	  FOR_EACH_EDGE (e, ei, traces[t2].first->preds)
+ 	    {
+ 	      int si = e->src->index;
+ 
+ 	      if (e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun)
+ 		  && (e->flags & EDGE_CAN_FALLTHRU)
+ 		  && !(e->flags & EDGE_COMPLEX)
+ 		  && bbd[si].end_of_trace >= 0
+ 		  && !connected[bbd[si].end_of_trace]
+ 		  && (BB_PARTITION (e->src) == current_partition)
+ 		  && connect_better_edge_p (e, true, best_len, best, traces))
+ 		{
+ 		  best = e;
+ 		  best_len = traces[bbd[si].end_of_trace].length;
+ 		}
+ 	    }
+ 	  if (best)
+ 	    {
+ 	      best->src->aux = best->dest;
+ 	      t2 = bbd[best->src->index].end_of_trace;
+ 	      connected[t2] = true;
+ 
+ 	      if (dump_file)
+ 		{
+ 		  fprintf (dump_file, "Connection: %d %d\n",
+ 			   best->src->index, best->dest->index);
+ 		}
+ 	    }
+ 	  else
+ 	    break;
+ 	}
+ 
+       if (last_trace >= 0)
+ 	traces[last_trace].last->aux = traces[t2].first;
+       last_trace = t;
+ 
+       /* Find the successor traces.  */
+       while (1)
+ 	{
+ 	  /* Find the continuation of the chain.  */
+ 	  edge_iterator ei;
+ 	  best = NULL;
+ 	  best_len = 0;
+ 	  FOR_EACH_EDGE (e, ei, traces[t].last->succs)
+ 	    {
+ 	      int di = e->dest->index;
+ 
+ 	      if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)
+ 		  && (e->flags & EDGE_CAN_FALLTHRU)
+ 		  && !(e->flags & EDGE_COMPLEX)
+ 		  && bbd[di].start_of_trace >= 0
+ 		  && !connected[bbd[di].start_of_trace]
+ 		  && (BB_PARTITION (e->dest) == current_partition)
+ 		  && connect_better_edge_p (e, false, best_len, best, traces))
+ 		{
+ 		  best = e;
+ 		  best_len = traces[bbd[di].start_of_trace].length;
+ 		}
+ 	    }
+ 
+ 	  if (for_size)
+ 	    {
+ 	      if (!best)
+ 		/* Stop finding the successor traces.  */
+ 		break;
+ 
+ 	      /* It is OK to connect block n with block n + 1 or a block
+ 		 before n.  For others, only connect to the loop header.  */
+ 	      if (best->dest->index > (traces[t].last->index + 1))
+ 		{
+ 		  int count = EDGE_COUNT (best->dest->preds);
+ 
+ 		  FOR_EACH_EDGE (e, ei, best->dest->preds)
+ 		    if (e->flags & EDGE_DFS_BACK)
+ 		      count--;
+ 
+ 		  /* If dest has multiple predecessors, skip it.  We expect
+ 		     that one predecessor with smaller index connects with it
+ 		     later.  */
+ 		  if (count != 1) 
+ 		    break;
+ 		}
+ 
+ 	      /* Only connect Trace n with Trace n + 1.  It is conservative
+ 		 to keep the order as close as possible to the original order.
+ 		 It also helps to reduce long jumps.  */
+ 	      if (last_trace != bbd[best->dest->index].start_of_trace - 1)
+ 		break;
+ 
+ 	      if (dump_file)
+ 		fprintf (dump_file, "Connection: %d %d\n",
+ 			 best->src->index, best->dest->index);
+ 
+ 	      t = bbd[best->dest->index].start_of_trace;
+ 	      traces[last_trace].last->aux = traces[t].first;
+ 	      connected[t] = true;
+ 	      last_trace = t;
+ 	    }
+ 	  else if (best)
+ 	    {
+ 	      if (dump_file)
+ 		{
+ 		  fprintf (dump_file, "Connection: %d %d\n",
+ 			   best->src->index, best->dest->index);
+ 		}
+ 	      t = bbd[best->dest->index].start_of_trace;
+ 	      traces[last_trace].last->aux = traces[t].first;
+ 	      connected[t] = true;
+ 	      last_trace = t;
+ 	    }
+ 	  else
+ 	    {
+ 	      /* Try to connect the traces by duplication of 1 block.  */
+ 	      edge e2;
+ 	      basic_block next_bb = NULL;
+ 	      bool try_copy = false;
+ 
+ 	      FOR_EACH_EDGE (e, ei, traces[t].last->succs)
+ 		if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)
+ 		    && (e->flags & EDGE_CAN_FALLTHRU)
+ 		    && !(e->flags & EDGE_COMPLEX)
+ 		    && (!best || e->probability > best->probability))
+ 		  {
+ 		    edge_iterator ei;
+ 		    edge best2 = NULL;
+ 		    int best2_len = 0;
+ 
+ 		    /* If the destination is a start of a trace which is only
+ 		       one block long, then no need to search the successor
+ 		       blocks of the trace.  Accept it.  */
+ 		    if (bbd[e->dest->index].start_of_trace >= 0
+ 			&& traces[bbd[e->dest->index].start_of_trace].length
+ 			   == 1)
+ 		      {
+ 			best = e;
+ 			try_copy = true;
+ 			continue;
+ 		      }
+ 
+ 		    FOR_EACH_EDGE (e2, ei, e->dest->succs)
+ 		      {
+ 			int di = e2->dest->index;
+ 
+ 			if (e2->dest == EXIT_BLOCK_PTR_FOR_FN (cfun)
+ 			    || ((e2->flags & EDGE_CAN_FALLTHRU)
+ 				&& !(e2->flags & EDGE_COMPLEX)
+ 				&& bbd[di].start_of_trace >= 0
+ 				&& !connected[bbd[di].start_of_trace]
+ 				&& BB_PARTITION (e2->dest) == current_partition
+ 				&& e2->count () >= count_threshold
+ 				&& (!best2
+ 				    || e2->probability > best2->probability
+ 				    || (e2->probability == best2->probability
+ 					&& traces[bbd[di].start_of_trace].length
+ 					   > best2_len))))
+ 			  {
+ 			    best = e;
+ 			    best2 = e2;
+ 			    if (e2->dest != EXIT_BLOCK_PTR_FOR_FN (cfun))
+ 			      best2_len = traces[bbd[di].start_of_trace].length;
+ 			    else
+ 			      best2_len = INT_MAX;
+ 			    next_bb = e2->dest;
+ 			    try_copy = true;
+ 			  }
+ 		      }
+ 		  }
+ 
+ 	      /* Copy tiny blocks always; copy larger blocks only when the
+ 		 edge is traversed frequently enough.  */
+ 	      if (try_copy
+ 		  && BB_PARTITION (best->src) == BB_PARTITION (best->dest)
+ 		  && copy_bb_p (best->dest,
+ 				optimize_edge_for_speed_p (best)
+ 				&& (!best->count ().initialized_p ()
+ 				    || best->count () >= count_threshold)))
+ 		{
+ 		  basic_block new_bb;
+ 
+ 		  if (dump_file)
+ 		    {
+ 		      fprintf (dump_file, "Connection: %d %d ",
+ 			       traces[t].last->index, best->dest->index);
+ 		      if (!next_bb)
+ 			fputc ('\n', dump_file);
+ 		      else if (next_bb == EXIT_BLOCK_PTR_FOR_FN (cfun))
+ 			fprintf (dump_file, "exit\n");
+ 		      else
+ 			fprintf (dump_file, "%d\n", next_bb->index);
+ 		    }
+ 
+ 		  new_bb = copy_bb (best->dest, best, traces[t].last, t);
+ 		  traces[t].last = new_bb;
+ 		  if (next_bb && next_bb != EXIT_BLOCK_PTR_FOR_FN (cfun))
+ 		    {
+ 		      t = bbd[next_bb->index].start_of_trace;
+ 		      traces[last_trace].last->aux = traces[t].first;
+ 		      connected[t] = true;
+ 		      last_trace = t;
+ 		    }
+ 		  else
+ 		    break;	/* Stop finding the successor traces.  */
+ 		}
+ 	      else
+ 		break;	/* Stop finding the successor traces.  */
+ 	    }
+ 	}
+     }
+ 
+   if (dump_file)
+     {
+       basic_block bb;
+ 
+       fprintf (dump_file, "Final order:\n");
+       for (bb = traces[0].first; bb; bb = (basic_block) bb->aux)
+ 	fprintf (dump_file, "%d ", bb->index);
+       fprintf (dump_file, "\n");
+       fflush (dump_file);
+     }
+ 
+   FREE (connected);
+ }
+ 
+ /* Return true when BB can and should be copied. CODE_MAY_GROW is true
+    when code size is allowed to grow by duplication.  */
+ 
+ static bool
+ copy_bb_p (const_basic_block bb, int code_may_grow)
+ {
+   unsigned int size = 0;
+   unsigned int max_size = uncond_jump_length;
+   rtx_insn *insn;
+ 
+   if (EDGE_COUNT (bb->preds) < 2)
+     return false;
+   if (!can_duplicate_block_p (bb))
+     return false;
+ 
+   /* Avoid duplicating blocks which have many successors (PR/13430).  */
+   if (EDGE_COUNT (bb->succs) > 8)
+     return false;
+ 
+   if (code_may_grow && optimize_bb_for_speed_p (bb))
+     max_size *= param_max_grow_copy_bb_insns;
+ 
+   FOR_BB_INSNS (bb, insn)
+     {
+       if (INSN_P (insn))
+ 	{
+ 	  size += get_attr_min_length (insn);
+ 	  if (size > max_size)
+ 	    break;
+ 	}
+     }
+ 
+   if (size <= max_size)
+     return true;
+ 
+   if (dump_file)
+     {
+       fprintf (dump_file,
+ 	       "Block %d can't be copied because its size = %u.\n",
+ 	       bb->index, size);
+     }
+ 
+   return false;
+ }
+ 
+ /* Return the length of unconditional jump instruction.  */
+ 
+ int
+ get_uncond_jump_length (void)
+ {
+   unsigned int length;
+ 
+   start_sequence ();
+   rtx_code_label *label = emit_label (gen_label_rtx ());
+   rtx_insn *jump = emit_jump_insn (targetm.gen_jump (label));
+   length = get_attr_min_length (jump);
+   end_sequence ();
+ 
+   gcc_assert (length < INT_MAX);
+   return length;
+ }
+ 
+ /* Create a forwarder block to OLD_BB starting with NEW_LABEL and in the
+    other partition wrt OLD_BB.  */
+ 
+ static basic_block
+ create_eh_forwarder_block (rtx_code_label *new_label, basic_block old_bb)
+ {
+   /* Split OLD_BB, so that EH pads have always only incoming EH edges,
+      bb_has_eh_pred bbs are treated specially by DF infrastructure.  */
+   old_bb = split_block_after_labels (old_bb)->dest;
+ 
+   /* Put the new label and a jump in the new basic block.  */
+   rtx_insn *label = emit_label (new_label);
+   rtx_code_label *old_label = block_label (old_bb);
+   rtx_insn *jump = emit_jump_insn (targetm.gen_jump (old_label));
+   JUMP_LABEL (jump) = old_label;
+ 
+   /* Create the new basic block and put it in last position.  */
+   basic_block last_bb = EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb;
+   basic_block new_bb = create_basic_block (label, jump, last_bb);
+   new_bb->aux = last_bb->aux;
+   new_bb->count = old_bb->count;
+   last_bb->aux = new_bb;
+ 
+   emit_barrier_after_bb (new_bb);
+ 
+   make_single_succ_edge (new_bb, old_bb, 0);
+ 
+   /* Make sure the new basic block is in the other partition.  */
+   unsigned new_partition = BB_PARTITION (old_bb);
+   new_partition ^= BB_HOT_PARTITION | BB_COLD_PARTITION;
+   BB_SET_PARTITION (new_bb, new_partition);
+ 
+   return new_bb;
+ }
+ 
+ /* The common landing pad in block OLD_BB has edges from both partitions.
+    Add a new landing pad that will just jump to the old one and split the
+    edges so that no EH edge crosses partitions.  */
+ 
+ static void
+ sjlj_fix_up_crossing_landing_pad (basic_block old_bb)
+ {
+   const unsigned lp_len = cfun->eh->lp_array->length ();
+   edge_iterator ei;
+   edge e;
+ 
+   /* Generate the new common landing-pad label.  */
+   rtx_code_label *new_label = gen_label_rtx ();
+   LABEL_PRESERVE_P (new_label) = 1;
+ 
+   /* Create the forwarder block.  */
+   basic_block new_bb = create_eh_forwarder_block (new_label, old_bb);
+ 
+   /* Create the map from old to new lp index and initialize it.  */
+   unsigned *index_map = (unsigned *) alloca (lp_len * sizeof (unsigned));
+   memset (index_map, 0, lp_len * sizeof (unsigned));
+ 
+   /* Fix up the edges.  */
+   for (ei = ei_start (old_bb->preds); (e = ei_safe_edge (ei)) != NULL; )
+     if (e->src != new_bb && BB_PARTITION (e->src) == BB_PARTITION (new_bb))
+       {
+ 	rtx_insn *insn = BB_END (e->src);
+ 	rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
+ 
+ 	gcc_assert (note != NULL);
+ 	const unsigned old_index = INTVAL (XEXP (note, 0));
+ 
+ 	/* Generate the new landing-pad structure.  */
+ 	if (index_map[old_index] == 0)
+ 	  {
+ 	    eh_landing_pad old_lp = (*cfun->eh->lp_array)[old_index];
+ 	    eh_landing_pad new_lp = gen_eh_landing_pad (old_lp->region);
+ 	    new_lp->post_landing_pad = old_lp->post_landing_pad;
+ 	    new_lp->landing_pad = new_label;
+ 	    index_map[old_index] = new_lp->index;
+ 	  }
+ 	XEXP (note, 0) = GEN_INT (index_map[old_index]);
+ 
+ 	/* Adjust the edge to the new destination.  */
+ 	redirect_edge_succ (e, new_bb);
+       }
+     else
+       ei_next (&ei);
+ }
+ 
+ /* The landing pad OLD_LP, in block OLD_BB, has edges from both partitions.
+    Add a new landing pad that will just jump to the old one and split the
+    edges so that no EH edge crosses partitions.  */
+ 
+ static void
+ dw2_fix_up_crossing_landing_pad (eh_landing_pad old_lp, basic_block old_bb)
+ {
+   eh_landing_pad new_lp;
+   edge_iterator ei;
+   edge e;
+ 
+   /* Generate the new landing-pad structure.  */
+   new_lp = gen_eh_landing_pad (old_lp->region);
+   new_lp->post_landing_pad = old_lp->post_landing_pad;
+   new_lp->landing_pad = gen_label_rtx ();
+   LABEL_PRESERVE_P (new_lp->landing_pad) = 1;
+ 
+   /* Create the forwarder block.  */
+   basic_block new_bb = create_eh_forwarder_block (new_lp->landing_pad, old_bb);
+ 
+   /* Fix up the edges.  */
+   for (ei = ei_start (old_bb->preds); (e = ei_safe_edge (ei)) != NULL; )
+     if (e->src != new_bb && BB_PARTITION (e->src) == BB_PARTITION (new_bb))
+       {
+ 	rtx_insn *insn = BB_END (e->src);
+ 	rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
+ 
+ 	gcc_assert (note != NULL);
+ 	gcc_checking_assert (INTVAL (XEXP (note, 0)) == old_lp->index);
+ 	XEXP (note, 0) = GEN_INT (new_lp->index);
+ 
+ 	/* Adjust the edge to the new destination.  */
+ 	redirect_edge_succ (e, new_bb);
+       }
+     else
+       ei_next (&ei);
+ }
+ 
+ 
+ /* Ensure that all hot bbs are included in a hot path through the
+    procedure. This is done by calling this function twice, once
+    with WALK_UP true (to look for paths from the entry to hot bbs) and
+    once with WALK_UP false (to look for paths from hot bbs to the exit).
+    Returns the updated value of COLD_BB_COUNT and adds newly-hot bbs
+    to BBS_IN_HOT_PARTITION.  */
+ 
+ static unsigned int
+ sanitize_hot_paths (bool walk_up, unsigned int cold_bb_count,
+                     vec<basic_block> *bbs_in_hot_partition)
+ {
+   /* Callers check this.  */
+   gcc_checking_assert (cold_bb_count);
+ 
+   /* Keep examining hot bbs while we still have some left to check
+      and there are remaining cold bbs.  */
+   vec<basic_block> hot_bbs_to_check = bbs_in_hot_partition->copy ();
+   while (! hot_bbs_to_check.is_empty ()
+          && cold_bb_count)
+     {
+       basic_block bb = hot_bbs_to_check.pop ();
+       vec<edge, va_gc> *edges = walk_up ? bb->preds : bb->succs;
+       edge e;
+       edge_iterator ei;
+       profile_probability highest_probability
+ 				 = profile_probability::uninitialized ();
+       profile_count highest_count = profile_count::uninitialized ();
+       bool found = false;
+ 
+       /* Walk the preds/succs and check if there is at least one already
+          marked hot. Keep track of the most frequent pred/succ so that we
+          can mark it hot if we don't find one.  */
+       FOR_EACH_EDGE (e, ei, edges)
+         {
+           basic_block reach_bb = walk_up ? e->src : e->dest;
+ 
+           if (e->flags & EDGE_DFS_BACK)
+             continue;
+ 
+ 	  /* Do not expect profile insanities when profile was not adjusted.  */
+ 	  if (e->probability == profile_probability::never ()
+ 	      || e->count () == profile_count::zero ())
+ 	    continue;
+ 
+           if (BB_PARTITION (reach_bb) != BB_COLD_PARTITION)
+           {
+             found = true;
+             break;
+           }
+           /* The following loop will look for the hottest edge via
+              the edge count, if it is non-zero, then fallback to
+              the edge probability.  */
+           if (!(e->count () > highest_count))
+             highest_count = e->count ();
+           if (!highest_probability.initialized_p ()
+ 	      || e->probability > highest_probability)
+             highest_probability = e->probability;
+         }
+ 
+       /* If bb is reached by (or reaches, in the case of !WALK_UP) another hot
+          block (or unpartitioned, e.g. the entry block) then it is ok. If not,
+          then the most frequent pred (or succ) needs to be adjusted.  In the
+          case where multiple preds/succs have the same frequency (e.g. a
+          50-50 branch), then both will be adjusted.  */
+       if (found)
+         continue;
+ 
+       FOR_EACH_EDGE (e, ei, edges)
+         {
+           if (e->flags & EDGE_DFS_BACK)
+             continue;
+ 	  /* Do not expect profile insanities when profile was not adjusted.  */
+ 	  if (e->probability == profile_probability::never ()
+ 	      || e->count () == profile_count::zero ())
+ 	    continue;
+           /* Select the hottest edge using the edge count, if it is non-zero,
+              then fallback to the edge probability.  */
+           if (highest_count.initialized_p ())
+             {
+               if (!(e->count () >= highest_count))
+                 continue;
+             }
+           else if (!(e->probability >= highest_probability))
+             continue;
+ 
+           basic_block reach_bb = walk_up ? e->src : e->dest;
+ 
+           /* We have a hot bb with an immediate dominator that is cold.
+              The dominator needs to be re-marked hot.  */
+           BB_SET_PARTITION (reach_bb, BB_HOT_PARTITION);
+ 	  if (dump_file)
+ 	    fprintf (dump_file, "Promoting bb %i to hot partition to sanitize "
+ 		     "profile of bb %i in %s walk\n", reach_bb->index,
+ 		     bb->index, walk_up ? "backward" : "forward");
+           cold_bb_count--;
+ 
+           /* Now we need to examine newly-hot reach_bb to see if it is also
+              dominated by a cold bb.  */
+           bbs_in_hot_partition->safe_push (reach_bb);
+           hot_bbs_to_check.safe_push (reach_bb);
+         }
+     }
+   hot_bbs_to_check.release ();
+ 
+   return cold_bb_count;
+ }
+ 
+ 
+ /* Find the basic blocks that are rarely executed and need to be moved to
+    a separate section of the .o file (to cut down on paging and improve
+    cache locality).  Return a vector of all edges that cross.  */
+ 
+ static vec<edge>
+ find_rarely_executed_basic_blocks_and_crossing_edges (void)
+ {
+   vec<edge> crossing_edges = vNULL;
+   basic_block bb;
+   edge e;
+   edge_iterator ei;
+   unsigned int cold_bb_count = 0;
+   auto_vec<basic_block> bbs_in_hot_partition;
+ 
+   propagate_unlikely_bbs_forward ();
+ 
+   /* Mark which partition (hot/cold) each basic block belongs in.  */
+   FOR_EACH_BB_FN (bb, cfun)
+     {
+       bool cold_bb = false;
+ 
+       if (probably_never_executed_bb_p (cfun, bb))
+         {
+           cold_bb = true;
+ 
+           /* Handle profile insanities created by upstream optimizations
+              by also checking the incoming edge weights. If there is a non-cold
+              incoming edge, conservatively prevent this block from being split
+              into the cold section.  */
+ 	  if (!bb->count.precise_p ())
+ 	    FOR_EACH_EDGE (e, ei, bb->preds)
+ 	      if (!probably_never_executed_edge_p (cfun, e))
+ 		{
+ 		  cold_bb = false;
+ 		  break;
+ 		}
+         }
+       if (cold_bb)
+         {
+           BB_SET_PARTITION (bb, BB_COLD_PARTITION);
+           cold_bb_count++;
+         }
+       else
+         {
+           BB_SET_PARTITION (bb, BB_HOT_PARTITION);
+           bbs_in_hot_partition.safe_push (bb);
+         }
+     }
+ 
+   /* Ensure that hot bbs are included along a hot path from the entry to exit.
+      Several different possibilities may include cold bbs along all paths
+      to/from a hot bb. One is that there are edge weight insanities
+      due to optimization phases that do not properly update basic block profile
+      counts. The second is that the entry of the function may not be hot, because
+      it is entered fewer times than the number of profile training runs, but there
+      is a loop inside the function that causes blocks within the function to be
+      above the threshold for hotness. This is fixed by walking up from hot bbs
+      to the entry block, and then down from hot bbs to the exit, performing
+      partitioning fixups as necessary.  */
+   if (cold_bb_count)
+     {
+       mark_dfs_back_edges ();
+       cold_bb_count = sanitize_hot_paths (true, cold_bb_count,
+                                           &bbs_in_hot_partition);
+       if (cold_bb_count)
+         sanitize_hot_paths (false, cold_bb_count, &bbs_in_hot_partition);
+ 
+       hash_set <basic_block> set;
+       find_bbs_reachable_by_hot_paths (&set);
+       FOR_EACH_BB_FN (bb, cfun)
+ 	if (!set.contains (bb))
+ 	  BB_SET_PARTITION (bb, BB_COLD_PARTITION);
+     }
+ 
+   /* The format of .gcc_except_table does not allow landing pads to
+      be in a different partition as the throw.  Fix this by either
+      moving the landing pads or inserting forwarder landing pads.  */
+   if (cfun->eh->lp_array)
+     {
+       const bool sjlj
+ 	= (targetm_common.except_unwind_info (&global_options) == UI_SJLJ);
+       unsigned i;
+       eh_landing_pad lp;
+ 
+       FOR_EACH_VEC_ELT (*cfun->eh->lp_array, i, lp)
+ 	{
+ 	  bool all_same, all_diff;
+ 
+ 	  if (lp == NULL
+ 	      || lp->landing_pad == NULL_RTX
+ 	      || !LABEL_P (lp->landing_pad))
+ 	    continue;
+ 
+ 	  all_same = all_diff = true;
+ 	  bb = BLOCK_FOR_INSN (lp->landing_pad);
+ 	  FOR_EACH_EDGE (e, ei, bb->preds)
+ 	    {
+ 	      gcc_assert (e->flags & EDGE_EH);
+ 	      if (BB_PARTITION (bb) == BB_PARTITION (e->src))
+ 		all_diff = false;
+ 	      else
+ 		all_same = false;
+ 	    }
+ 
+ 	  if (all_same)
+ 	    ;
+ 	  else if (all_diff)
+ 	    {
+ 	      int which = BB_PARTITION (bb);
+ 	      which ^= BB_HOT_PARTITION | BB_COLD_PARTITION;
+ 	      BB_SET_PARTITION (bb, which);
+ 	    }
+ 	  else if (sjlj)
+ 	    sjlj_fix_up_crossing_landing_pad (bb);
+ 	  else
+ 	    dw2_fix_up_crossing_landing_pad (lp, bb);
+ 
+ 	  /* There is a single, common landing pad in SJLJ mode.  */
+ 	  if (sjlj)
+ 	    break;
+ 	}
+     }
+ 
+   /* Mark every edge that crosses between sections.  */
+   FOR_EACH_BB_FN (bb, cfun)
+     FOR_EACH_EDGE (e, ei, bb->succs)
+       {
+ 	unsigned int flags = e->flags;
+ 
+         /* We should never have EDGE_CROSSING set yet.  */
+ 	gcc_checking_assert ((flags & EDGE_CROSSING) == 0);
+ 
+ 	if (e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun)
+ 	    && e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)
+ 	    && BB_PARTITION (e->src) != BB_PARTITION (e->dest))
+ 	  {
+ 	    crossing_edges.safe_push (e);
+ 	    flags |= EDGE_CROSSING;
+ 	  }
+ 
+ 	/* Now that we've split eh edges as appropriate, allow landing pads
+ 	   to be merged with the post-landing pads.  */
+ 	flags &= ~EDGE_PRESERVE;
+ 
+ 	e->flags = flags;
+       }
+ 
+   return crossing_edges;
+ }
+ 
+ /* Set the flag EDGE_CAN_FALLTHRU for edges that can be fallthru.  */
+ 
+ static void
+ set_edge_can_fallthru_flag (void)
+ {
+   basic_block bb;
+ 
+   FOR_EACH_BB_FN (bb, cfun)
+     {
+       edge e;
+       edge_iterator ei;
+ 
+       FOR_EACH_EDGE (e, ei, bb->succs)
+ 	{
+ 	  e->flags &= ~EDGE_CAN_FALLTHRU;
+ 
+ 	  /* The FALLTHRU edge is also CAN_FALLTHRU edge.  */
+ 	  if (e->flags & EDGE_FALLTHRU)
+ 	    e->flags |= EDGE_CAN_FALLTHRU;
+ 	}
+ 
+       /* If the BB ends with an invertible condjump all (2) edges are
+ 	 CAN_FALLTHRU edges.  */
+       if (EDGE_COUNT (bb->succs) != 2)
+ 	continue;
+       if (!any_condjump_p (BB_END (bb)))
+ 	continue;
+ 
+       rtx_jump_insn *bb_end_jump = as_a <rtx_jump_insn *> (BB_END (bb));
+       if (!invert_jump (bb_end_jump, JUMP_LABEL (bb_end_jump), 0))
+ 	continue;
+       invert_jump (bb_end_jump, JUMP_LABEL (bb_end_jump), 0);
+       EDGE_SUCC (bb, 0)->flags |= EDGE_CAN_FALLTHRU;
+       EDGE_SUCC (bb, 1)->flags |= EDGE_CAN_FALLTHRU;
+     }
+ }
+ 
+ /* If any destination of a crossing edge does not have a label, add label;
+    Convert any easy fall-through crossing edges to unconditional jumps.  */
+ 
+ static void
+ add_labels_and_missing_jumps (vec<edge> crossing_edges)
+ {
+   size_t i;
+   edge e;
+ 
+   FOR_EACH_VEC_ELT (crossing_edges, i, e)
+     {
+       basic_block src = e->src;
+       basic_block dest = e->dest;
+       rtx_jump_insn *new_jump;
+ 
+       if (dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
+ 	continue;
+ 
+       /* Make sure dest has a label.  */
+       rtx_code_label *label = block_label (dest);
+ 
+       /* Nothing to do for non-fallthru edges.  */
+       if (src == ENTRY_BLOCK_PTR_FOR_FN (cfun))
+ 	continue;
+       if ((e->flags & EDGE_FALLTHRU) == 0)
+ 	continue;
+ 
+       /* If the block does not end with a control flow insn, then we
+ 	 can trivially add a jump to the end to fixup the crossing.
+ 	 Otherwise the jump will have to go in a new bb, which will
+ 	 be handled by fix_up_fall_thru_edges function.  */
+       if (control_flow_insn_p (BB_END (src)))
+ 	continue;
+ 
+       /* Make sure there's only one successor.  */
+       gcc_assert (single_succ_p (src));
+ 
+       new_jump = emit_jump_insn_after (targetm.gen_jump (label), BB_END (src));
+       BB_END (src) = new_jump;
+       JUMP_LABEL (new_jump) = label;
+       LABEL_NUSES (label) += 1;
+ 
+       emit_barrier_after_bb (src);
+ 
+       /* Mark edge as non-fallthru.  */
+       e->flags &= ~EDGE_FALLTHRU;
+     }
+ }
+ 
+ /* Find any bb's where the fall-through edge is a crossing edge (note that
+    these bb's must also contain a conditional jump or end with a call
+    instruction; we've already dealt with fall-through edges for blocks
+    that didn't have a conditional jump or didn't end with call instruction
+    in the call to add_labels_and_missing_jumps).  Convert the fall-through
+    edge to non-crossing edge by inserting a new bb to fall-through into.
+    The new bb will contain an unconditional jump (crossing edge) to the
+    original fall through destination.  */
+ 
+ static void
+ fix_up_fall_thru_edges (void)
+ {
+   basic_block cur_bb;
+ 
+   FOR_EACH_BB_FN (cur_bb, cfun)
+     {
+       edge succ1;
+       edge succ2;
+       edge fall_thru = NULL;
+       edge cond_jump = NULL;
+ 
+       fall_thru = NULL;
+       if (EDGE_COUNT (cur_bb->succs) > 0)
+ 	succ1 = EDGE_SUCC (cur_bb, 0);
+       else
+ 	succ1 = NULL;
+ 
+       if (EDGE_COUNT (cur_bb->succs) > 1)
+ 	succ2 = EDGE_SUCC (cur_bb, 1);
+       else
+ 	succ2 = NULL;
+ 
+       /* Find the fall-through edge.  */
+ 
+       if (succ1
+ 	  && (succ1->flags & EDGE_FALLTHRU))
+ 	{
+ 	  fall_thru = succ1;
+ 	  cond_jump = succ2;
+ 	}
+       else if (succ2
+ 	       && (succ2->flags & EDGE_FALLTHRU))
+ 	{
+ 	  fall_thru = succ2;
+ 	  cond_jump = succ1;
+ 	}
+       else if (succ2 && EDGE_COUNT (cur_bb->succs) > 2)
+ 	fall_thru = find_fallthru_edge (cur_bb->succs);
+ 
+       if (fall_thru && (fall_thru->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)))
+ 	{
+ 	  /* Check to see if the fall-thru edge is a crossing edge.  */
+ 
+ 	  if (fall_thru->flags & EDGE_CROSSING)
+ 	    {
+ 	      /* The fall_thru edge crosses; now check the cond jump edge, if
+ 		 it exists.  */
+ 
+ 	      bool cond_jump_crosses = true;
+ 	      int invert_worked = 0;
+ 	      rtx_insn *old_jump = BB_END (cur_bb);
+ 
+ 	      /* Find the jump instruction, if there is one.  */
+ 
+ 	      if (cond_jump)
+ 		{
+ 		  if (!(cond_jump->flags & EDGE_CROSSING))
+ 		    cond_jump_crosses = false;
+ 
+ 		  /* We know the fall-thru edge crosses; if the cond
+ 		     jump edge does NOT cross, and its destination is the
+ 		     next block in the bb order, invert the jump
+ 		     (i.e. fix it so the fall through does not cross and
+ 		     the cond jump does).  */
+ 
+ 		  if (!cond_jump_crosses)
+ 		    {
+ 		      /* Find label in fall_thru block. We've already added
+ 			 any missing labels, so there must be one.  */
+ 
+ 		      rtx_code_label *fall_thru_label
+ 			= block_label (fall_thru->dest);
+ 
+ 		      if (old_jump && fall_thru_label)
+ 			{
+ 			  rtx_jump_insn *old_jump_insn
+ 			    = dyn_cast <rtx_jump_insn *> (old_jump);
+ 			  if (old_jump_insn)
+ 			    invert_worked = invert_jump (old_jump_insn,
+ 							 fall_thru_label, 0);
+ 			}
+ 
+ 		      if (invert_worked)
+ 			{
+ 			  fall_thru->flags &= ~EDGE_FALLTHRU;
+ 			  cond_jump->flags |= EDGE_FALLTHRU;
+ 			  update_br_prob_note (cur_bb);
+ 			  std::swap (fall_thru, cond_jump);
+ 			  cond_jump->flags |= EDGE_CROSSING;
+ 			  fall_thru->flags &= ~EDGE_CROSSING;
+ 			}
+ 		    }
+ 		}
+ 
+ 	      if (cond_jump_crosses || !invert_worked)
+ 		{
+ 		  /* This is the case where both edges out of the basic
+ 		     block are crossing edges. Here we will fix up the
+ 		     fall through edge. The jump edge will be taken care
+ 		     of later.  The EDGE_CROSSING flag of fall_thru edge
+ 		     is unset before the call to force_nonfallthru
+ 		     function because if a new basic-block is created
+ 		     this edge remains in the current section boundary
+ 		     while the edge between new_bb and the fall_thru->dest
+ 		     becomes EDGE_CROSSING.  */
+ 
+ 		  fall_thru->flags &= ~EDGE_CROSSING;
+ 		  basic_block new_bb = force_nonfallthru (fall_thru);
+ 
+ 		  if (new_bb)
+ 		    {
+ 		      new_bb->aux = cur_bb->aux;
+ 		      cur_bb->aux = new_bb;
+ 
+                       /* This is done by force_nonfallthru_and_redirect.  */
+ 		      gcc_assert (BB_PARTITION (new_bb)
+                                   == BB_PARTITION (cur_bb));
+ 
+ 		      single_succ_edge (new_bb)->flags |= EDGE_CROSSING;
+ 		    }
+ 		  else
+ 		    {
+ 		      /* If a new basic-block was not created; restore
+ 			 the EDGE_CROSSING flag.  */
+ 		      fall_thru->flags |= EDGE_CROSSING;
+ 		    }
+ 
+ 		  /* Add barrier after new jump */
+ 		  emit_barrier_after_bb (new_bb ? new_bb : cur_bb);
+ 		}
+ 	    }
+ 	}
+     }
+ }
+ 
+ /* This function checks the destination block of a "crossing jump" to
+    see if it has any crossing predecessors that begin with a code label
+    and end with an unconditional jump.  If so, it returns that predecessor
+    block.  (This is to avoid creating lots of new basic blocks that all
+    contain unconditional jumps to the same destination).  */
+ 
+ static basic_block
+ find_jump_block (basic_block jump_dest)
+ {
+   basic_block source_bb = NULL;
+   edge e;
+   rtx_insn *insn;
+   edge_iterator ei;
+ 
+   FOR_EACH_EDGE (e, ei, jump_dest->preds)
+     if (e->flags & EDGE_CROSSING)
+       {
+ 	basic_block src = e->src;
+ 
+ 	/* Check each predecessor to see if it has a label, and contains
+ 	   only one executable instruction, which is an unconditional jump.
+ 	   If so, we can use it.  */
+ 
+ 	if (LABEL_P (BB_HEAD (src)))
+ 	  for (insn = BB_HEAD (src);
+ 	       !INSN_P (insn) && insn != NEXT_INSN (BB_END (src));
+ 	       insn = NEXT_INSN (insn))
+ 	    {
+ 	      if (INSN_P (insn)
+ 		  && insn == BB_END (src)
+ 		  && JUMP_P (insn)
+ 		  && !any_condjump_p (insn))
+ 		{
+ 		  source_bb = src;
+ 		  break;
+ 		}
+ 	    }
+ 
+ 	if (source_bb)
+ 	  break;
+       }
+ 
+   return source_bb;
+ }
+ 
+ /* Find all BB's with conditional jumps that are crossing edges;
+    insert a new bb and make the conditional jump branch to the new
+    bb instead (make the new bb same color so conditional branch won't
+    be a 'crossing' edge).  Insert an unconditional jump from the
+    new bb to the original destination of the conditional jump.  */
+ 
+ static void
+ fix_crossing_conditional_branches (void)
+ {
+   basic_block cur_bb;
+   basic_block new_bb;
+   basic_block dest;
+   edge succ1;
+   edge succ2;
+   edge crossing_edge;
+   edge new_edge;
+   rtx set_src;
+   rtx old_label = NULL_RTX;
+   rtx_code_label *new_label;
+ 
+   FOR_EACH_BB_FN (cur_bb, cfun)
+     {
+       crossing_edge = NULL;
+       if (EDGE_COUNT (cur_bb->succs) > 0)
+ 	succ1 = EDGE_SUCC (cur_bb, 0);
+       else
+ 	succ1 = NULL;
+ 
+       if (EDGE_COUNT (cur_bb->succs) > 1)
+ 	succ2 = EDGE_SUCC (cur_bb, 1);
+       else
+ 	succ2 = NULL;
+ 
+       /* We already took care of fall-through edges, so only one successor
+ 	 can be a crossing edge.  */
+ 
+       if (succ1 && (succ1->flags & EDGE_CROSSING))
+ 	crossing_edge = succ1;
+       else if (succ2 && (succ2->flags & EDGE_CROSSING))
+ 	crossing_edge = succ2;
+ 
+       if (crossing_edge)
+ 	{
+ 	  rtx_insn *old_jump = BB_END (cur_bb);
+ 
+ 	  /* Check to make sure the jump instruction is a
+ 	     conditional jump.  */
+ 
+ 	  set_src = NULL_RTX;
+ 
+ 	  if (any_condjump_p (old_jump))
+ 	    {
+ 	      if (GET_CODE (PATTERN (old_jump)) == SET)
+ 		set_src = SET_SRC (PATTERN (old_jump));
+ 	      else if (GET_CODE (PATTERN (old_jump)) == PARALLEL)
+ 		{
+ 		  set_src = XVECEXP (PATTERN (old_jump), 0,0);
+ 		  if (GET_CODE (set_src) == SET)
+ 		    set_src = SET_SRC (set_src);
+ 		  else
+ 		    set_src = NULL_RTX;
+ 		}
+ 	    }
+ 
+ 	  if (set_src && (GET_CODE (set_src) == IF_THEN_ELSE))
+ 	    {
+ 	      rtx_jump_insn *old_jump_insn =
+ 			as_a <rtx_jump_insn *> (old_jump);
+ 
+ 	      if (GET_CODE (XEXP (set_src, 1)) == PC)
+ 		old_label = XEXP (set_src, 2);
+ 	      else if (GET_CODE (XEXP (set_src, 2)) == PC)
+ 		old_label = XEXP (set_src, 1);
+ 
+ 	      /* Check to see if new bb for jumping to that dest has
+ 		 already been created; if so, use it; if not, create
+ 		 a new one.  */
+ 
+ 	      new_bb = find_jump_block (crossing_edge->dest);
+ 
+ 	      if (new_bb)
+ 		new_label = block_label (new_bb);
+ 	      else
+ 		{
+ 		  basic_block last_bb;
+ 		  rtx_code_label *old_jump_target;
+ 		  rtx_jump_insn *new_jump;
+ 
+ 		  /* Create new basic block to be dest for
+ 		     conditional jump.  */
+ 
+ 		  /* Put appropriate instructions in new bb.  */
+ 
+ 		  new_label = gen_label_rtx ();
+ 		  emit_label (new_label);
+ 
+ 		  gcc_assert (GET_CODE (old_label) == LABEL_REF);
+ 		  old_jump_target = old_jump_insn->jump_target ();
+ 		  new_jump = as_a <rtx_jump_insn *>
+ 		    (emit_jump_insn (targetm.gen_jump (old_jump_target)));
+ 		  new_jump->set_jump_target (old_jump_target);
+ 
+ 		  last_bb = EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb;
+ 		  new_bb = create_basic_block (new_label, new_jump, last_bb);
+ 		  new_bb->aux = last_bb->aux;
+ 		  last_bb->aux = new_bb;
+ 
+ 		  emit_barrier_after_bb (new_bb);
+ 
+ 		  /* Make sure new bb is in same partition as source
+ 		     of conditional branch.  */
+ 		  BB_COPY_PARTITION (new_bb, cur_bb);
+ 		}
+ 
+ 	      /* Make old jump branch to new bb.  */
+ 
+ 	      redirect_jump (old_jump_insn, new_label, 0);
+ 
+ 	      /* Remove crossing_edge as predecessor of 'dest'.  */
+ 
+ 	      dest = crossing_edge->dest;
+ 
+ 	      redirect_edge_succ (crossing_edge, new_bb);
+ 
+ 	      /* Make a new edge from new_bb to old dest; new edge
+ 		 will be a successor for new_bb and a predecessor
+ 		 for 'dest'.  */
+ 
+ 	      if (EDGE_COUNT (new_bb->succs) == 0)
+ 		new_edge = make_single_succ_edge (new_bb, dest, 0);
+ 	      else
+ 		new_edge = EDGE_SUCC (new_bb, 0);
+ 
+ 	      crossing_edge->flags &= ~EDGE_CROSSING;
+ 	      new_edge->flags |= EDGE_CROSSING;
+ 	    }
+ 	}
+     }
+ }
+ 
+ /* Find any unconditional branches that cross between hot and cold
+    sections.  Convert them into indirect jumps instead.  */
+ 
+ static void
+ fix_crossing_unconditional_branches (void)
+ {
+   basic_block cur_bb;
+   rtx_insn *last_insn;
+   rtx label;
+   rtx label_addr;
+   rtx_insn *indirect_jump_sequence;
+   rtx_insn *jump_insn = NULL;
+   rtx new_reg;
+   rtx_insn *cur_insn;
+   edge succ;
+ 
+   FOR_EACH_BB_FN (cur_bb, cfun)
+     {
+       last_insn = BB_END (cur_bb);
+ 
+       if (EDGE_COUNT (cur_bb->succs) < 1)
+ 	continue;
+ 
+       succ = EDGE_SUCC (cur_bb, 0);
+ 
+       /* Check to see if bb ends in a crossing (unconditional) jump.  At
+ 	 this point, no crossing jumps should be conditional.  */
+ 
+       if (JUMP_P (last_insn)
+ 	  && (succ->flags & EDGE_CROSSING))
+ 	{
+ 	  gcc_assert (!any_condjump_p (last_insn));
+ 
+ 	  /* Make sure the jump is not already an indirect or table jump.  */
+ 
+ 	  if (!computed_jump_p (last_insn)
+ 	      && !tablejump_p (last_insn, NULL, NULL))
+ 	    {
+ 	      /* We have found a "crossing" unconditional branch.  Now
+ 		 we must convert it to an indirect jump.  First create
+ 		 reference of label, as target for jump.  */
+ 
+ 	      label = JUMP_LABEL (last_insn);
+ 	      label_addr = gen_rtx_LABEL_REF (Pmode, label);
+ 	      LABEL_NUSES (label) += 1;
+ 
+ 	      /* Get a register to use for the indirect jump.  */
+ 
+ 	      new_reg = gen_reg_rtx (Pmode);
+ 
+ 	      /* Generate indirect the jump sequence.  */
+ 
+ 	      start_sequence ();
+ 	      emit_move_insn (new_reg, label_addr);
+ 	      emit_indirect_jump (new_reg);
+ 	      indirect_jump_sequence = get_insns ();
+ 	      end_sequence ();
+ 
+ 	      /* Make sure every instruction in the new jump sequence has
+ 		 its basic block set to be cur_bb.  */
+ 
+ 	      for (cur_insn = indirect_jump_sequence; cur_insn;
+ 		   cur_insn = NEXT_INSN (cur_insn))
+ 		{
+ 		  if (!BARRIER_P (cur_insn))
+ 		    BLOCK_FOR_INSN (cur_insn) = cur_bb;
+ 		  if (JUMP_P (cur_insn))
+ 		    jump_insn = cur_insn;
+ 		}
+ 
+ 	      /* Insert the new (indirect) jump sequence immediately before
+ 		 the unconditional jump, then delete the unconditional jump.  */
+ 
+ 	      emit_insn_before (indirect_jump_sequence, last_insn);
+ 	      delete_insn (last_insn);
+ 
+ 	      JUMP_LABEL (jump_insn) = label;
+ 	      LABEL_NUSES (label)++;
+ 
+ 	      /* Make BB_END for cur_bb be the jump instruction (NOT the
+ 		 barrier instruction at the end of the sequence...).  */
+ 
+ 	      BB_END (cur_bb) = jump_insn;
+ 	    }
+ 	}
+     }
+ }
+ 
+ /* Update CROSSING_JUMP_P flags on all jump insns.  */
+ 
+ static void
+ update_crossing_jump_flags (void)
+ {
+   basic_block bb;
+   edge e;
+   edge_iterator ei;
+ 
+   FOR_EACH_BB_FN (bb, cfun)
+     FOR_EACH_EDGE (e, ei, bb->succs)
+       if (e->flags & EDGE_CROSSING)
+ 	{
+ 	  if (JUMP_P (BB_END (bb)))
+ 	    CROSSING_JUMP_P (BB_END (bb)) = 1;
+ 	  break;
+ 	}
+ }
+ 
+ /* Reorder basic blocks using the software trace cache (STC) algorithm.  */
+ 
+ static void
+ reorder_basic_blocks_software_trace_cache (void)
+ {
+   if (dump_file)
+     fprintf (dump_file, "\nReordering with the STC algorithm.\n\n");
+ 
+   int n_traces;
+   int i;
+   struct trace *traces;
+ 
+   /* We are estimating the length of uncond jump insn only once since the code
+      for getting the insn length always returns the minimal length now.  */
+   if (uncond_jump_length == 0)
+     uncond_jump_length = get_uncond_jump_length ();
+ 
+   /* We need to know some information for each basic block.  */
+   array_size = GET_ARRAY_SIZE (last_basic_block_for_fn (cfun));
+   bbd = XNEWVEC (bbro_basic_block_data, array_size);
+   for (i = 0; i < array_size; i++)
+     {
+       bbd[i].start_of_trace = -1;
+       bbd[i].end_of_trace = -1;
+       bbd[i].in_trace = -1;
+       bbd[i].visited = 0;
+       bbd[i].priority = -1;
+       bbd[i].heap = NULL;
+       bbd[i].node = NULL;
+     }
+ 
+   traces = XNEWVEC (struct trace, n_basic_blocks_for_fn (cfun));
+   n_traces = 0;
+   find_traces (&n_traces, traces);
+   connect_traces (n_traces, traces);
+   FREE (traces);
+   FREE (bbd);
+ }
+ 
+ /* Order edges by execution frequency, higher first.  */
+ 
+ static int
+ edge_order (const void *ve1, const void *ve2)
+ {
+   edge e1 = *(const edge *) ve1;
+   edge e2 = *(const edge *) ve2;
+   profile_count c1 = e1->count ();
+   profile_count c2 = e2->count ();
+   /* Since profile_count::operator< does not establish a strict weak order
+      in presence of uninitialized counts, use 'max': this makes them appear
+      as if having execution frequency less than any initialized count.  */
+   profile_count m = c1.max (c2);
+   return (m == c2) - (m == c1);
+ }
+ 
+ /* Reorder basic blocks using the "simple" algorithm.  This tries to
+    maximize the dynamic number of branches that are fallthrough, without
+    copying instructions.  The algorithm is greedy, looking at the most
+    frequently executed branch first.  */
+ 
+ static void
+ reorder_basic_blocks_simple (void)
+ {
+   if (dump_file)
+     fprintf (dump_file, "\nReordering with the \"simple\" algorithm.\n\n");
+ 
+   edge *edges = new edge[2 * n_basic_blocks_for_fn (cfun)];
+ 
+   /* First, collect all edges that can be optimized by reordering blocks:
+      simple jumps and conditional jumps, as well as the function entry edge.  */
+ 
+   int n = 0;
+   edges[n++] = EDGE_SUCC (ENTRY_BLOCK_PTR_FOR_FN (cfun), 0);
+ 
+   basic_block bb;
+   FOR_EACH_BB_FN (bb, cfun)
+     {
+       rtx_insn *end = BB_END (bb);
+ 
+       if (computed_jump_p (end) || tablejump_p (end, NULL, NULL))
+ 	continue;
+ 
+       /* We cannot optimize asm goto.  */
+       if (JUMP_P (end) && extract_asm_operands (end))
+ 	continue;
+ 
+       if (single_succ_p (bb))
+ 	edges[n++] = EDGE_SUCC (bb, 0);
+       else if (any_condjump_p (end))
+ 	{
+ 	  edge e0 = EDGE_SUCC (bb, 0);
+ 	  edge e1 = EDGE_SUCC (bb, 1);
+ 	  /* When optimizing for size it is best to keep the original
+ 	     fallthrough edges.  */
+ 	  if (e1->flags & EDGE_FALLTHRU)
+ 	    std::swap (e0, e1);
+ 	  edges[n++] = e0;
+ 	  edges[n++] = e1;
+ 	}
+     }
+ 
+   /* Sort the edges, the most desirable first.  When optimizing for size
+      all edges are equally desirable.  */
+ 
+   if (optimize_function_for_speed_p (cfun))
+     gcc_stablesort (edges, n, sizeof *edges, edge_order);
+ 
+   /* Now decide which of those edges to make fallthrough edges.  We set
+      BB_VISITED if a block already has a fallthrough successor assigned
+      to it.  We make ->AUX of an endpoint point to the opposite endpoint
+      of a sequence of blocks that fall through, and ->AUX will be NULL
+      for a block that is in such a sequence but not an endpoint anymore.
+ 
+      To start with, everything points to itself, nothing is assigned yet.  */
+ 
+   FOR_ALL_BB_FN (bb, cfun)
+     {
+       bb->aux = bb;
+       bb->flags &= ~BB_VISITED;
+     }
+ 
+   EXIT_BLOCK_PTR_FOR_FN (cfun)->aux = 0;
+ 
+   /* Now for all edges, the most desirable first, see if that edge can
+      connect two sequences.  If it can, update AUX and BB_VISITED; if it
+      cannot, zero out the edge in the table.  */
+ 
+   for (int j = 0; j < n; j++)
+     {
+       edge e = edges[j];
+ 
+       basic_block tail_a = e->src;
+       basic_block head_b = e->dest;
+       basic_block head_a = (basic_block) tail_a->aux;
+       basic_block tail_b = (basic_block) head_b->aux;
+ 
+       /* An edge cannot connect two sequences if:
+ 	 - it crosses partitions;
+ 	 - its src is not a current endpoint;
+ 	 - its dest is not a current endpoint;
+ 	 - or, it would create a loop.  */
+ 
+       if (e->flags & EDGE_CROSSING
+ 	  || tail_a->flags & BB_VISITED
+ 	  || !tail_b
+ 	  || (!(head_b->flags & BB_VISITED) && head_b != tail_b)
+ 	  || tail_a == tail_b)
+ 	{
+ 	  edges[j] = 0;
+ 	  continue;
+ 	}
+ 
+       tail_a->aux = 0;
+       head_b->aux = 0;
+       head_a->aux = tail_b;
+       tail_b->aux = head_a;
+       tail_a->flags |= BB_VISITED;
+     }
+ 
+   /* Put the pieces together, in the same order that the start blocks of
+      the sequences already had.  The hot/cold partitioning gives a little
+      complication: as a first pass only do this for blocks in the same
+      partition as the start block, and (if there is anything left to do)
+      in a second pass handle the other partition.  */
+ 
+   basic_block last_tail = (basic_block) ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux;
+ 
+   int current_partition
+     = BB_PARTITION (last_tail == ENTRY_BLOCK_PTR_FOR_FN (cfun)
+ 		    ? EDGE_SUCC (ENTRY_BLOCK_PTR_FOR_FN (cfun), 0)->dest
+ 		    : last_tail);
+   bool need_another_pass = true;
+ 
+   for (int pass = 0; pass < 2 && need_another_pass; pass++)
+     {
+       need_another_pass = false;
+ 
+       FOR_EACH_BB_FN (bb, cfun)
+ 	if ((bb->flags & BB_VISITED && bb->aux) || bb->aux == bb)
+ 	  {
+ 	    if (BB_PARTITION (bb) != current_partition)
+ 	      {
+ 		need_another_pass = true;
+ 		continue;
+ 	      }
+ 
+ 	    last_tail->aux = bb;
+ 	    last_tail = (basic_block) bb->aux;
+ 	  }
+ 
+       current_partition ^= BB_HOT_PARTITION | BB_COLD_PARTITION;
+     }
+ 
+   last_tail->aux = 0;
+ 
+   /* Finally, link all the chosen fallthrough edges.  */
+ 
+   for (int j = 0; j < n; j++)
+     if (edges[j])
+       edges[j]->src->aux = edges[j]->dest;
+ 
+   delete[] edges;
+ 
+   /* If the entry edge no longer falls through we have to make a new
+      block so it can do so again.  */
+ 
+   edge e = EDGE_SUCC (ENTRY_BLOCK_PTR_FOR_FN (cfun), 0);
+   if (e->dest != ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux)
+     {
+       force_nonfallthru (e);
+       e->src->aux = ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux;
+     }
+ }
+ 
+ /* Reorder basic blocks.  The main entry point to this file.  */
+ 
+ static void
+ reorder_basic_blocks (void)
+ {
+   gcc_assert (current_ir_type () == IR_RTL_CFGLAYOUT);
+ 
+   if (n_basic_blocks_for_fn (cfun) <= NUM_FIXED_BLOCKS + 1)
+     return;
+ 
+   set_edge_can_fallthru_flag ();
+   mark_dfs_back_edges ();
+ 
+   switch (flag_reorder_blocks_algorithm)
+     {
+     case REORDER_BLOCKS_ALGORITHM_SIMPLE:
+       reorder_basic_blocks_simple ();
+       break;
+ 
+     case REORDER_BLOCKS_ALGORITHM_STC:
+       reorder_basic_blocks_software_trace_cache ();
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   relink_block_chain (/*stay_in_cfglayout_mode=*/true);
+ 
+   if (dump_file)
+     {
+       if (dump_flags & TDF_DETAILS)
+ 	dump_reg_info (dump_file);
+       dump_flow_info (dump_file, dump_flags);
+     }
+ 
+   /* Signal that rtl_verify_flow_info_1 can now verify that there
+      is at most one switch between hot/cold sections.  */
+   crtl->bb_reorder_complete = true;
+ }
+ 
+ /* Determine which partition the first basic block in the function
+    belongs to, then find the first basic block in the current function
+    that belongs to a different section, and insert a
+    NOTE_INSN_SWITCH_TEXT_SECTIONS note immediately before it in the
+    instruction stream.  When writing out the assembly code,
+    encountering this note will make the compiler switch between the
+    hot and cold text sections.  */
+ 
+ void
+ insert_section_boundary_note (void)
+ {
+   basic_block bb;
+   bool switched_sections = false;
+   int current_partition = 0;
+ 
+   if (!crtl->has_bb_partition)
+     return;
+ 
+   FOR_EACH_BB_FN (bb, cfun)
+     {
+       if (!current_partition)
+ 	current_partition = BB_PARTITION (bb);
+       if (BB_PARTITION (bb) != current_partition)
+ 	{
+ 	  gcc_assert (!switched_sections);
+           switched_sections = true;
+           emit_note_before (NOTE_INSN_SWITCH_TEXT_SECTIONS, BB_HEAD (bb));
+           current_partition = BB_PARTITION (bb);
+ 	}
+     }
+ 
+   /* Make sure crtl->has_bb_partition matches reality even if bbpart finds
+      some hot and some cold basic blocks, but later one of those kinds is
+      optimized away.  */
+   crtl->has_bb_partition = switched_sections;
+ }
+ 
+ namespace {
+ 
+ const pass_data pass_data_reorder_blocks =
+ {
+   RTL_PASS, /* type */
+   "bbro", /* name */
+   OPTGROUP_NONE, /* optinfo_flags */
+   TV_REORDER_BLOCKS, /* tv_id */
+   0, /* properties_required */
+   0, /* properties_provided */
+   0, /* properties_destroyed */
+   0, /* todo_flags_start */
+   0, /* todo_flags_finish */
+ };
+ 
+ class pass_reorder_blocks : public rtl_opt_pass
+ {
+ public:
+   pass_reorder_blocks (gcc::context *ctxt)
+     : rtl_opt_pass (pass_data_reorder_blocks, ctxt)
+   {}
+ 
+   /* opt_pass methods: */
+   virtual bool gate (function *)
+     {
+       if (targetm.cannot_modify_jumps_p ())
+ 	return false;
+       return (optimize > 0
+ 	      && (flag_reorder_blocks || flag_reorder_blocks_and_partition));
+     }
+ 
+   virtual unsigned int execute (function *);
+ 
+ }; // class pass_reorder_blocks
+ 
+ unsigned int
+ pass_reorder_blocks::execute (function *fun)
+ {
+   basic_block bb;
+ 
+   /* Last attempt to optimize CFG, as scheduling, peepholing and insn
+      splitting possibly introduced more crossjumping opportunities.  */
+   cfg_layout_initialize (CLEANUP_EXPENSIVE);
+ 
+   reorder_basic_blocks ();
+   cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_NO_PARTITIONING);
+ 
+   FOR_EACH_BB_FN (bb, fun)
+     if (bb->next_bb != EXIT_BLOCK_PTR_FOR_FN (fun))
+       bb->aux = bb->next_bb;
+   cfg_layout_finalize ();
+ 
+   FOR_EACH_BB_FN (bb, fun)
+     df_recompute_luids (bb);
+   return 0;
+ }
+ 
+ } // anon namespace
+ 
+ rtl_opt_pass *
+ make_pass_reorder_blocks (gcc::context *ctxt)
+ {
+   return new pass_reorder_blocks (ctxt);
+ }
+ 
+ /* Duplicate a block (that we already know ends in a computed jump) into its
+    predecessors, where possible.  Return whether anything is changed.  */
+ static bool
+ maybe_duplicate_computed_goto (basic_block bb, int max_size)
+ {
+   /* Make sure that the block is small enough.  */
+   rtx_insn *insn;
+   FOR_BB_INSNS (bb, insn)
+     if (INSN_P (insn))
+       {
+ 	max_size -= get_attr_min_length (insn);
+ 	if (max_size < 0)
+ 	   return false;
+       }
+ 
+   bool changed = false;
+   edge e;
+   edge_iterator ei;
+   for (ei = ei_start (bb->preds); (e = ei_safe_edge (ei)); )
+     {
+       basic_block pred = e->src;
+ 
+       /* Do not duplicate BB into PRED if we cannot merge a copy of BB
+ 	 with PRED.  */
+       if (!single_succ_p (pred)
+ 	  || e->flags & EDGE_COMPLEX
+ 	  || pred->index < NUM_FIXED_BLOCKS
+ 	  || (JUMP_P (BB_END (pred)) && !simplejump_p (BB_END (pred)))
+ 	  || (JUMP_P (BB_END (pred)) && CROSSING_JUMP_P (BB_END (pred))))
+ 	{
+ 	  ei_next (&ei);
+ 	  continue;
+ 	}
+ 
+       if (dump_file)
+ 	fprintf (dump_file, "Duplicating computed goto bb %d into bb %d\n",
+ 		 bb->index, e->src->index);
+ 
+       /* Remember if PRED can be duplicated; if so, the copy of BB merged
+ 	 with PRED can be duplicated as well.  */
+       bool can_dup_more = can_duplicate_block_p (pred);
+ 
+       /* Make a copy of BB, merge it into PRED.  */
+       basic_block copy = duplicate_block (bb, e, NULL);
+       emit_barrier_after_bb (copy);
+       reorder_insns_nobb (BB_HEAD (copy), BB_END (copy), BB_END (pred));
+       merge_blocks (pred, copy);
+ 
+       changed = true;
+ 
+       /* Try to merge the resulting merged PRED into further predecessors.  */
+       if (can_dup_more)
+ 	maybe_duplicate_computed_goto (pred, max_size);
+     }
+ 
+   return changed;
+ }
+ 
+ /* Duplicate the blocks containing computed gotos.  This basically unfactors
+    computed gotos that were factored early on in the compilation process to
+    speed up edge based data flow.  We used to not unfactor them again, which
+    can seriously pessimize code with many computed jumps in the source code,
+    such as interpreters.  See e.g. PR15242.  */
+ static void
+ duplicate_computed_gotos (function *fun)
+ {
+   /* We are estimating the length of uncond jump insn only once
+      since the code for getting the insn length always returns
+      the minimal length now.  */
+   if (uncond_jump_length == 0)
+     uncond_jump_length = get_uncond_jump_length ();
+ 
+   /* Never copy a block larger than this.  */
+   int max_size
+     = uncond_jump_length * param_max_goto_duplication_insns;
+ 
+   bool changed = false;
+ 
+   /* Try to duplicate all blocks that end in a computed jump and that
+      can be duplicated at all.  */
+   basic_block bb;
+   FOR_EACH_BB_FN (bb, fun)
+     if (computed_jump_p (BB_END (bb)) && can_duplicate_block_p (bb))
+       changed |= maybe_duplicate_computed_goto (bb, max_size);
+ 
+   /* Some blocks may have become unreachable.  */
+   if (changed)
+     cleanup_cfg (0);
+ 
+   /* Duplicating blocks will redirect edges and may cause hot blocks
+     previously reached by both hot and cold blocks to become dominated
+     only by cold blocks.  */
+   if (changed)
+     fixup_partitions ();
+ }
+ 
+ namespace {
+ 
+ const pass_data pass_data_duplicate_computed_gotos =
+ {
+   RTL_PASS, /* type */
+   "compgotos", /* name */
+   OPTGROUP_NONE, /* optinfo_flags */
+   TV_REORDER_BLOCKS, /* tv_id */
+   0, /* properties_required */
+   0, /* properties_provided */
+   0, /* properties_destroyed */
+   0, /* todo_flags_start */
+   0, /* todo_flags_finish */
+ };
+ 
+ class pass_duplicate_computed_gotos : public rtl_opt_pass
+ {
+ public:
+   pass_duplicate_computed_gotos (gcc::context *ctxt)
+     : rtl_opt_pass (pass_data_duplicate_computed_gotos, ctxt)
+   {}
+ 
+   /* opt_pass methods: */
+   virtual bool gate (function *);
+   virtual unsigned int execute (function *);
+ 
+ }; // class pass_duplicate_computed_gotos
+ 
+ bool
+ pass_duplicate_computed_gotos::gate (function *fun)
+ {
+   if (targetm.cannot_modify_jumps_p ())
+     return false;
+   return (optimize > 0
+ 	  && flag_expensive_optimizations
+ 	  && ! optimize_function_for_size_p (fun));
+ }
+ 
+ unsigned int
+ pass_duplicate_computed_gotos::execute (function *fun)
+ {
+   duplicate_computed_gotos (fun);
+ 
+   return 0;
+ }
+ 
+ } // anon namespace
+ 
+ rtl_opt_pass *
+ make_pass_duplicate_computed_gotos (gcc::context *ctxt)
+ {
+   return new pass_duplicate_computed_gotos (ctxt);
+ }
+ 
+ /* This function is the main 'entrance' for the optimization that
+    partitions hot and cold basic blocks into separate sections of the
+    .o file (to improve performance and cache locality).  Ideally it
+    would be called after all optimizations that rearrange the CFG have
+    been called.  However part of this optimization may introduce new
+    register usage, so it must be called before register allocation has
+    occurred.  This means that this optimization is actually called
+    well before the optimization that reorders basic blocks (see
+    function above).
+ 
+    This optimization checks the feedback information to determine
+    which basic blocks are hot/cold, updates flags on the basic blocks
+    to indicate which section they belong in.  This information is
+    later used for writing out sections in the .o file.  Because hot
+    and cold sections can be arbitrarily large (within the bounds of
+    memory), far beyond the size of a single function, it is necessary
+    to fix up all edges that cross section boundaries, to make sure the
+    instructions used can actually span the required distance.  The
+    fixes are described below.
+ 
+    Fall-through edges must be changed into jumps; it is not safe or
+    legal to fall through across a section boundary.  Whenever a
+    fall-through edge crossing a section boundary is encountered, a new
+    basic block is inserted (in the same section as the fall-through
+    source), and the fall through edge is redirected to the new basic
+    block.  The new basic block contains an unconditional jump to the
+    original fall-through target.  (If the unconditional jump is
+    insufficient to cross section boundaries, that is dealt with a
+    little later, see below).
+ 
+    In order to deal with architectures that have short conditional
+    branches (which cannot span all of memory) we take any conditional
+    jump that attempts to cross a section boundary and add a level of
+    indirection: it becomes a conditional jump to a new basic block, in
+    the same section.  The new basic block contains an unconditional
+    jump to the original target, in the other section.
+ 
+    For those architectures whose unconditional branch is also
+    incapable of reaching all of memory, those unconditional jumps are
+    converted into indirect jumps, through a register.
+ 
+    IMPORTANT NOTE: This optimization causes some messy interactions
+    with the cfg cleanup optimizations; those optimizations want to
+    merge blocks wherever possible, and to collapse indirect jump
+    sequences (change "A jumps to B jumps to C" directly into "A jumps
+    to C").  Those optimizations can undo the jump fixes that
+    partitioning is required to make (see above), in order to ensure
+    that jumps attempting to cross section boundaries are really able
+    to cover whatever distance the jump requires (on many architectures
+    conditional or unconditional jumps are not able to reach all of
+    memory).  Therefore tests have to be inserted into each such
+    optimization to make sure that it does not undo stuff necessary to
+    cross partition boundaries.  This would be much less of a problem
+    if we could perform this optimization later in the compilation, but
+    unfortunately the fact that we may need to create indirect jumps
+    (through registers) requires that this optimization be performed
+    before register allocation.
+ 
+    Hot and cold basic blocks are partitioned and put in separate
+    sections of the .o file, to reduce paging and improve cache
+    performance (hopefully).  This can result in bits of code from the
+    same function being widely separated in the .o file.  However this
+    is not obvious to the current bb structure.  Therefore we must take
+    care to ensure that: 1). There are no fall_thru edges that cross
+    between sections; 2). For those architectures which have "short"
+    conditional branches, all conditional branches that attempt to
+    cross between sections are converted to unconditional branches;
+    and, 3). For those architectures which have "short" unconditional
+    branches, all unconditional branches that attempt to cross between
+    sections are converted to indirect jumps.
+ 
+    The code for fixing up fall_thru edges that cross between hot and
+    cold basic blocks does so by creating new basic blocks containing
+    unconditional branches to the appropriate label in the "other"
+    section.  The new basic block is then put in the same (hot or cold)
+    section as the original conditional branch, and the fall_thru edge
+    is modified to fall into the new basic block instead.  By adding
+    this level of indirection we end up with only unconditional branches
+    crossing between hot and cold sections.
+ 
+    Conditional branches are dealt with by adding a level of indirection.
+    A new basic block is added in the same (hot/cold) section as the
+    conditional branch, and the conditional branch is retargeted to the
+    new basic block.  The new basic block contains an unconditional branch
+    to the original target of the conditional branch (in the other section).
+ 
+    Unconditional branches are dealt with by converting them into
+    indirect jumps.  */
+ 
+ namespace {
+ 
+ const pass_data pass_data_partition_blocks =
+ {
+   RTL_PASS, /* type */
+   "bbpart", /* name */
+   OPTGROUP_NONE, /* optinfo_flags */
+   TV_REORDER_BLOCKS, /* tv_id */
+   PROP_cfglayout, /* properties_required */
+   0, /* properties_provided */
+   0, /* properties_destroyed */
+   0, /* todo_flags_start */
+   0, /* todo_flags_finish */
+ };
+ 
+ class pass_partition_blocks : public rtl_opt_pass
+ {
+ public:
+   pass_partition_blocks (gcc::context *ctxt)
+     : rtl_opt_pass (pass_data_partition_blocks, ctxt)
+   {}
+ 
+   /* opt_pass methods: */
+   virtual bool gate (function *);
+   virtual unsigned int execute (function *);
+ 
+ }; // class pass_partition_blocks
+ 
+ bool
+ pass_partition_blocks::gate (function *fun)
+ {
+   /* The optimization to partition hot/cold basic blocks into separate
+      sections of the .o file does not work well with linkonce or with
+      user defined section attributes or with naked attribute.  Don't call
+      it if either case arises.  */
+   return (flag_reorder_blocks_and_partition
+ 	  && optimize
+ 	  /* See pass_reorder_blocks::gate.  We should not partition if
+ 	     we are going to omit the reordering.  */
+ 	  && optimize_function_for_speed_p (fun)
+ 	  && !DECL_COMDAT_GROUP (current_function_decl)
+ 	  && !lookup_attribute ("section", DECL_ATTRIBUTES (fun->decl))
+ 	  && !lookup_attribute ("naked", DECL_ATTRIBUTES (fun->decl))
+ 	  /* Workaround a bug in GDB where read_partial_die doesn't cope
+ 	     with DIEs with DW_AT_ranges, see PR81115.  */
+ 	  && !(in_lto_p && MAIN_NAME_P (DECL_NAME (fun->decl))));
+ }
+ 
+ unsigned
+ pass_partition_blocks::execute (function *fun)
+ {
+   vec<edge> crossing_edges;
+ 
+   if (n_basic_blocks_for_fn (fun) <= NUM_FIXED_BLOCKS + 1)
+     return 0;
+ 
+   df_set_flags (DF_DEFER_INSN_RESCAN);
+ 
+   crossing_edges = find_rarely_executed_basic_blocks_and_crossing_edges ();
+   if (!crossing_edges.exists ())
+     /* Make sure to process deferred rescans and clear changeable df flags.  */
+     return TODO_df_finish;
+ 
+   crtl->has_bb_partition = true;
+ 
+   /* Make sure the source of any crossing edge ends in a jump and the
+      destination of any crossing edge has a label.  */
+   add_labels_and_missing_jumps (crossing_edges);
+ 
+   /* Convert all crossing fall_thru edges to non-crossing fall
+      thrus to unconditional jumps (that jump to the original fall
+      through dest).  */
+   fix_up_fall_thru_edges ();
+ 
+   /* If the architecture does not have conditional branches that can
+      span all of memory, convert crossing conditional branches into
+      crossing unconditional branches.  */
+   if (!HAS_LONG_COND_BRANCH)
+     fix_crossing_conditional_branches ();
+ 
+   /* If the architecture does not have unconditional branches that
+      can span all of memory, convert crossing unconditional branches
+      into indirect jumps.  Since adding an indirect jump also adds
+      a new register usage, update the register usage information as
+      well.  */
+   if (!HAS_LONG_UNCOND_BRANCH)
+     fix_crossing_unconditional_branches ();
+ 
+   update_crossing_jump_flags ();
+ 
+   /* Clear bb->aux fields that the above routines were using.  */
+   clear_aux_for_blocks ();
+ 
+   crossing_edges.release ();
+ 
+   /* ??? FIXME: DF generates the bb info for a block immediately.
+      And by immediately, I mean *during* creation of the block.
+ 
+ 	#0  df_bb_refs_collect
+ 	#1  in df_bb_refs_record
+ 	#2  in create_basic_block_structure
+ 
+      Which means that the bb_has_eh_pred test in df_bb_refs_collect
+      will *always* fail, because no edges can have been added to the
+      block yet.  Which of course means we don't add the right 
+      artificial refs, which means we fail df_verify (much) later.
+ 
+      Cleanest solution would seem to make DF_DEFER_INSN_RESCAN imply
+      that we also shouldn't grab data from the new blocks those new
+      insns are in either.  In this way one can create the block, link
+      it up properly, and have everything Just Work later, when deferred
+      insns are processed.
+ 
+      In the meantime, we have no other option but to throw away all
+      of the DF data and recompute it all.  */
+   if (fun->eh->lp_array)
+     {
+       df_finish_pass (true);
+       df_scan_alloc (NULL);
+       df_scan_blocks ();
+       /* Not all post-landing pads use all of the EH_RETURN_DATA_REGNO
+ 	 data.  We blindly generated all of them when creating the new
+ 	 landing pad.  Delete those assignments we don't use.  */
+       df_set_flags (DF_LR_RUN_DCE);
+       df_analyze ();
+     }
+ 
+   /* Make sure to process deferred rescans and clear changeable df flags.  */
+   return TODO_df_finish;
+ }
+ 
+ } // anon namespace
+ 
+ rtl_opt_pass *
+ make_pass_partition_blocks (gcc::context *ctxt)
+ {
+   return new pass_partition_blocks (ctxt);
+ }
diff -Nrcpad gcc-11.3.0/gcc/bb-reorder.h gcc-12.1.0/gcc/bb-reorder.h
*** gcc-11.3.0/gcc/bb-reorder.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/bb-reorder.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Basic block reordering routines for the GNU compiler.
!    Copyright (C) 2000-2021 Free Software Foundation, Inc.
  
     This file is part of GCC.
  
--- 1,5 ----
  /* Basic block reordering routines for the GNU compiler.
!    Copyright (C) 2000-2022 Free Software Foundation, Inc.
  
     This file is part of GCC.
  
diff -Nrcpad gcc-11.3.0/gcc/bitmap.c gcc-12.1.0/gcc/bitmap.c
*** gcc-11.3.0/gcc/bitmap.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/bitmap.c	Thu Jan  1 00:00:00 1970
***************
*** 1,2983 ****
- /* Functions to support general ended bitmaps.
-    Copyright (C) 1997-2021 Free Software Foundation, Inc.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "bitmap.h"
- #include "selftest.h"
- 
- /* Memory allocation statistics purpose instance.  */
- mem_alloc_description<bitmap_usage> bitmap_mem_desc;
- 
- /* Static zero-initialized bitmap obstack used for default initialization
-    of bitmap_head.  */
- bitmap_obstack bitmap_head::crashme;
- 
- static bitmap_element *bitmap_tree_listify_from (bitmap, bitmap_element *);
- 
- /* Register new bitmap.  */
- void
- bitmap_register (bitmap b MEM_STAT_DECL)
- {
-   static unsigned alloc_descriptor_max_uid = 1;
-   gcc_assert (b->alloc_descriptor == 0);
-   b->alloc_descriptor = alloc_descriptor_max_uid++;
- 
-   bitmap_mem_desc.register_descriptor (b->get_descriptor (), BITMAP_ORIGIN,
- 				       false FINAL_PASS_MEM_STAT);
- }
- 
- /* Account the overhead.  */
- static void
- register_overhead (bitmap b, size_t amount)
- {
-   unsigned *d = b->get_descriptor ();
-   if (bitmap_mem_desc.contains_descriptor_for_instance (d))
-     bitmap_mem_desc.register_instance_overhead (amount, d);
- }
- 
- /* Release the overhead.  */
- static void
- release_overhead (bitmap b, size_t amount, bool remove_from_map)
- {
-   unsigned *d = b->get_descriptor ();
-   if (bitmap_mem_desc.contains_descriptor_for_instance (d))
-     bitmap_mem_desc.release_instance_overhead (d, amount, remove_from_map);
- }
- 
- 
- /* Global data */
- bitmap_element bitmap_zero_bits;  /* An element of all zero bits.  */
- bitmap_obstack bitmap_default_obstack;    /* The default bitmap obstack.  */
- static int bitmap_default_obstack_depth;
- static GTY((deletable)) bitmap_element *bitmap_ggc_free; /* Freelist of
- 							    GC'd elements.  */
- 
- 
- /* Bitmap memory management.  */
- 
- /* Add ELT to the appropriate freelist.  */
- static inline void
- bitmap_elem_to_freelist (bitmap head, bitmap_element *elt)
- {
-   bitmap_obstack *bit_obstack = head->obstack;
- 
-   if (GATHER_STATISTICS)
-     release_overhead (head, sizeof (bitmap_element), false);
- 
-   elt->next = NULL;
-   elt->indx = -1;
-   if (bit_obstack)
-     {
-       elt->prev = bit_obstack->elements;
-       bit_obstack->elements = elt;
-     }
-   else
-     {
-       elt->prev = bitmap_ggc_free;
-       bitmap_ggc_free = elt;
-     }
- }
- 
- /* Allocate a bitmap element.  The bits are cleared, but nothing else is.  */
- 
- static inline bitmap_element *
- bitmap_element_allocate (bitmap head)
- {
-   bitmap_element *element;
-   bitmap_obstack *bit_obstack = head->obstack;
- 
-   if (bit_obstack)
-     {
-       element = bit_obstack->elements;
- 
-       if (element)
- 	/* Use up the inner list first before looking at the next
- 	   element of the outer list.  */
- 	if (element->next)
- 	  {
- 	    bit_obstack->elements = element->next;
- 	    bit_obstack->elements->prev = element->prev;
- 	  }
- 	else
- 	  /*  Inner list was just a singleton.  */
- 	  bit_obstack->elements = element->prev;
-       else
- 	element = XOBNEW (&bit_obstack->obstack, bitmap_element);
-     }
-   else
-     {
-       element = bitmap_ggc_free;
-       if (element)
- 	/* Use up the inner list first before looking at the next
- 	   element of the outer list.  */
- 	if (element->next)
- 	  {
- 	    bitmap_ggc_free = element->next;
- 	    bitmap_ggc_free->prev = element->prev;
- 	  }
- 	else
- 	  /*  Inner list was just a singleton.  */
- 	  bitmap_ggc_free = element->prev;
-       else
- 	element = ggc_alloc<bitmap_element> ();
-     }
- 
-   if (GATHER_STATISTICS)
-     register_overhead (head, sizeof (bitmap_element));
- 
-   memset (element->bits, 0, sizeof (element->bits));
- 
-   return element;
- }
- 
- /* Remove ELT and all following elements from bitmap HEAD.
-    Put the released elements in the freelist for HEAD.  */
- 
- void
- bitmap_elt_clear_from (bitmap head, bitmap_element *elt)
- {
-   bitmap_element *prev;
-   bitmap_obstack *bit_obstack = head->obstack;
- 
-   if (!elt)
-     return;
- 
-   if (head->tree_form)
-     elt = bitmap_tree_listify_from (head, elt);
- 
-   if (GATHER_STATISTICS)
-     {
-       int n = 0;
-       for (prev = elt; prev; prev = prev->next)
- 	n++;
-       release_overhead (head, sizeof (bitmap_element) * n, false);
-     }
- 
-   prev = elt->prev;
-   if (prev)
-     {
-       prev->next = NULL;
-       if (head->current->indx > prev->indx)
- 	{
- 	  head->current = prev;
- 	  head->indx = prev->indx;
- 	}
-     }
-   else
-     {
-       head->first = NULL;
-       head->current = NULL;
-       head->indx = 0;
-     }
- 
-   /* Put the entire list onto the freelist in one operation. */
-   if (bit_obstack)
-     {
-       elt->prev = bit_obstack->elements;
-       bit_obstack->elements = elt;
-     }
-   else
-     {
-       elt->prev = bitmap_ggc_free;
-       bitmap_ggc_free = elt;
-     }
- }
- 
- /* Linked-list view of bitmaps.
- 
-    In this representation, the bitmap elements form a double-linked list
-    with elements sorted by increasing index.  */
- 
- /* Link the bitmap element into the current bitmap linked list.  */
- 
- static inline void
- bitmap_list_link_element (bitmap head, bitmap_element *element)
- {
-   unsigned int indx = element->indx;
-   bitmap_element *ptr;
- 
-   gcc_checking_assert (!head->tree_form);
- 
-   /* If this is the first and only element, set it in.  */
-   if (head->first == 0)
-     {
-       element->next = element->prev = 0;
-       head->first = element;
-     }
- 
-   /* If this index is less than that of the current element, it goes someplace
-      before the current element.  */
-   else if (indx < head->indx)
-     {
-       for (ptr = head->current;
- 	   ptr->prev != 0 && ptr->prev->indx > indx;
- 	   ptr = ptr->prev)
- 	;
- 
-       if (ptr->prev)
- 	ptr->prev->next = element;
-       else
- 	head->first = element;
- 
-       element->prev = ptr->prev;
-       element->next = ptr;
-       ptr->prev = element;
-     }
- 
-   /* Otherwise, it must go someplace after the current element.  */
-   else
-     {
-       for (ptr = head->current;
- 	   ptr->next != 0 && ptr->next->indx < indx;
- 	   ptr = ptr->next)
- 	;
- 
-       if (ptr->next)
- 	ptr->next->prev = element;
- 
-       element->next = ptr->next;
-       element->prev = ptr;
-       ptr->next = element;
-     }
- 
-   /* Set up so this is the first element searched.  */
-   head->current = element;
-   head->indx = indx;
- }
- 
- /* Unlink the bitmap element from the current bitmap linked list,
-    and return it to the freelist.  */
- 
- static inline void
- bitmap_list_unlink_element (bitmap head, bitmap_element *element,
- 			    bool to_freelist = true)
- {
-   bitmap_element *next = element->next;
-   bitmap_element *prev = element->prev;
- 
-   gcc_checking_assert (!head->tree_form);
- 
-   if (prev)
-     prev->next = next;
- 
-   if (next)
-     next->prev = prev;
- 
-   if (head->first == element)
-     head->first = next;
- 
-   /* Since the first thing we try is to insert before current,
-      make current the next entry in preference to the previous.  */
-   if (head->current == element)
-     {
-       head->current = next != 0 ? next : prev;
-       if (head->current)
- 	head->indx = head->current->indx;
-       else
- 	head->indx = 0;
-     }
- 
-   if (to_freelist)
-     bitmap_elem_to_freelist (head, element);
- }
- 
- /* Insert a new uninitialized element (or NODE if not NULL) into bitmap
-    HEAD after element ELT.  If ELT is NULL, insert the element at the start.
-    Return the new element.  */
- 
- static bitmap_element *
- bitmap_list_insert_element_after (bitmap head,
- 				  bitmap_element *elt, unsigned int indx,
- 				  bitmap_element *node = NULL)
- {
-   if (!node)
-     node = bitmap_element_allocate (head);
-   node->indx = indx;
- 
-   gcc_checking_assert (!head->tree_form);
- 
-   if (!elt)
-     {
-       if (!head->current)
- 	{
- 	  head->current = node;
- 	  head->indx = indx;
- 	}
-       node->next = head->first;
-       if (node->next)
- 	node->next->prev = node;
-       head->first = node;
-       node->prev = NULL;
-     }
-   else
-     {
-       gcc_checking_assert (head->current);
-       node->next = elt->next;
-       if (node->next)
- 	node->next->prev = node;
-       elt->next = node;
-       node->prev = elt;
-     }
-   return node;
- }
- 
- /* Return the element for INDX, or NULL if the element doesn't exist.
-    Update the `current' field even if we can't find an element that  
-    would hold the bitmap's bit to make eventual allocation
-    faster.  */
- 
- static inline bitmap_element *
- bitmap_list_find_element (bitmap head, unsigned int indx)
- {
-   bitmap_element *element;
- 
-   if (head->current == NULL
-       || head->indx == indx)
-     return head->current;
- 
-   if (head->current == head->first
-       && head->first->next == NULL)
-     return NULL;
- 
-   /* Usage can be NULL due to allocated bitmaps for which we do not
-      call initialize function.  */
-   bitmap_usage *usage = NULL;
-   if (GATHER_STATISTICS)
-     usage = bitmap_mem_desc.get_descriptor_for_instance (head);
- 
-   /* This bitmap has more than one element, and we're going to look
-      through the elements list.  Count that as a search.  */
-   if (GATHER_STATISTICS && usage)
-     usage->m_nsearches++;
- 
-   if (head->indx < indx)
-     /* INDX is beyond head->indx.  Search from head->current
-        forward.  */
-     for (element = head->current;
- 	 element->next != 0 && element->indx < indx;
- 	 element = element->next)
-       {
- 	if (GATHER_STATISTICS && usage)
- 	  usage->m_search_iter++;
-       }
- 
-   else if (head->indx / 2 < indx)
-     /* INDX is less than head->indx and closer to head->indx than to
-        0.  Search from head->current backward.  */
-     for (element = head->current;
- 	 element->prev != 0 && element->indx > indx;
- 	 element = element->prev)
-       {
- 	if (GATHER_STATISTICS && usage)
- 	  usage->m_search_iter++;
-       }
- 
-   else
-     /* INDX is less than head->indx and closer to 0 than to
-        head->indx.  Search from head->first forward.  */
-     for (element = head->first;
- 	 element->next != 0 && element->indx < indx;
- 	 element = element->next)
-       {
- 	if (GATHER_STATISTICS && usage)
- 	  usage->m_search_iter++;
-       }
- 
-   /* `element' is the nearest to the one we want.  If it's not the one we
-      want, the one we want doesn't exist.  */
-   gcc_checking_assert (element != NULL);
-   head->current = element;
-   head->indx = element->indx;
-   if (element->indx != indx)
-     element = 0;
-   return element;
- }
- 
- 
- /* Splay-tree view of bitmaps.
- 
-    This is an almost one-to-one the implementatin of the simple top-down
-    splay tree in Sleator and Tarjan's "Self-adjusting Binary Search Trees".
-    It is probably not the most efficient form of splay trees, but it should
-    be good enough to experiment with this idea of bitmaps-as-trees.
-    
-    For all functions below, the variable or function argument "t" is a node
-    in the tree, and "e" is a temporary or new node in the tree.  The rest
-    is sufficiently straigh-forward (and very well explained in the paper)
-    that comment would only clutter things.  */
- 
- static inline void
- bitmap_tree_link_left (bitmap_element * &t, bitmap_element * &l)
- {
-   l->next = t;
-   l = t;
-   t = t->next;
- }
- 
- static inline void
- bitmap_tree_link_right (bitmap_element * &t, bitmap_element * &r)
- {
-   r->prev = t;
-   r = t;
-   t = t->prev;
- }
- 
- static inline void
- bitmap_tree_rotate_left (bitmap_element * &t)
- {
-   bitmap_element *e = t->next;
-   t->next = t->next->prev;
-   e->prev = t;
-   t = e;
- }
- 
- static inline void
- bitmap_tree_rotate_right (bitmap_element * &t)
- {
-   bitmap_element *e = t->prev;
-   t->prev = t->prev->next;
-   e->next = t;
-   t = e;
- }
- 
- static bitmap_element *
- bitmap_tree_splay (bitmap head, bitmap_element *t, unsigned int indx)
- {
-   bitmap_element N, *l, *r;
- 
-   if (t == NULL)
-     return NULL;
- 
-   bitmap_usage *usage = NULL;
-   if (GATHER_STATISTICS)
-     usage = bitmap_mem_desc.get_descriptor_for_instance (head);
- 
-   N.prev = N.next = NULL;
-   l = r = &N;
- 
-   while (indx != t->indx)
-     {
-       if (GATHER_STATISTICS && usage)
- 	usage->m_search_iter++;
- 
-       if (indx < t->indx)
- 	{
- 	  if (t->prev != NULL && indx < t->prev->indx)
- 	    bitmap_tree_rotate_right (t);
- 	  if (t->prev == NULL)
- 	    break;
- 	  bitmap_tree_link_right (t, r);
- 	}
-       else if (indx > t->indx)
- 	{
- 	  if (t->next != NULL && indx > t->next->indx)
- 	    bitmap_tree_rotate_left (t);
- 	  if (t->next == NULL)
- 	    break;
- 	  bitmap_tree_link_left (t, l);
- 	}
-     }
- 
-   l->next = t->prev;
-   r->prev = t->next;
-   t->prev = N.next;
-   t->next = N.prev;
-   return t;
- }
- 
- /* Link bitmap element E into the current bitmap splay tree.  */
- 
- static inline void
- bitmap_tree_link_element (bitmap head, bitmap_element *e)
- {
-   if (head->first == NULL)
-     e->prev = e->next = NULL;
-   else
-     {
-       bitmap_element *t = bitmap_tree_splay (head, head->first, e->indx);
-       if (e->indx < t->indx)
- 	{
- 	  e->prev = t->prev;
- 	  e->next = t;
- 	  t->prev = NULL;
- 	}
-       else if (e->indx > t->indx)
- 	{
- 	  e->next = t->next;
- 	  e->prev = t;
- 	  t->next = NULL;
- 	}
-       else
- 	gcc_unreachable ();
-     }
-   head->first = e;
-   head->current = e;
-   head->indx = e->indx;
- }
- 
- /* Unlink bitmap element E from the current bitmap splay tree,
-    and return it to the freelist.  */
- 
- static void
- bitmap_tree_unlink_element (bitmap head, bitmap_element *e)
- {
-   bitmap_element *t = bitmap_tree_splay (head, head->first, e->indx);
- 
-   gcc_checking_assert (t == e);
- 
-   if (e->prev == NULL)
-     t = e->next;
-   else
-     {
-       t = bitmap_tree_splay (head, e->prev, e->indx);
-       t->next = e->next;
-     }
-   head->first = t;
-   head->current = t;
-   head->indx = (t != NULL) ? t->indx : 0;
- 
-   bitmap_elem_to_freelist (head, e);
- }
- 
- /* Return the element for INDX, or NULL if the element doesn't exist.  */
- 
- static inline bitmap_element *
- bitmap_tree_find_element (bitmap head, unsigned int indx)
- {
-   if (head->current == NULL
-       || head->indx == indx)
-     return head->current;
- 
-   /* Usage can be NULL due to allocated bitmaps for which we do not
-      call initialize function.  */
-   bitmap_usage *usage = NULL;
-   if (GATHER_STATISTICS)
-     usage = bitmap_mem_desc.get_descriptor_for_instance (head);
- 
-   /* This bitmap has more than one element, and we're going to look
-      through the elements list.  Count that as a search.  */
-   if (GATHER_STATISTICS && usage)
-     usage->m_nsearches++;
- 
-   bitmap_element *element = bitmap_tree_splay (head, head->first, indx);
-   gcc_checking_assert (element != NULL);
-   head->first = element;
-   head->current = element;
-   head->indx = element->indx;
-   if (element->indx != indx)
-     element = 0;
-   return element;
- }
- 
- /* Converting bitmap views from linked-list to tree and vice versa.  */
- 
- /* Splice element E and all elements with a larger index from
-    bitmap HEAD, convert the spliced elements to the linked-list
-    view, and return the head of the list (which should be E again),  */
- 
- static bitmap_element *
- bitmap_tree_listify_from (bitmap head, bitmap_element *e)
- {
-   bitmap_element *t, *erb;
- 
-   /* Detach the right branch from E (all elements with indx > E->indx),
-      and splay E to the root.  */
-   erb = e->next;
-   e->next = NULL;
-   t = bitmap_tree_splay (head, head->first, e->indx);
-   gcc_checking_assert (t == e);
- 
-   /* Because E has no right branch, and we rotated it to the root,
-      the left branch is the new root.  */
-   t = e->prev;
-   head->first = t;
-   head->current = t;
-   head->indx = (t != NULL) ? t->indx : 0;
- 
-   /* Detach the tree from E, and re-attach the right branch of E.  */
-   e->prev = NULL;
-   e->next = erb;
- 
-   /* The tree is now valid again.  Now we need to "un-tree" E.
-      It is imperative that a non-recursive implementation is used
-      for this, because splay trees have a worst case depth of O(N)
-      for a tree with N nodes.  A recursive implementation could
-      result in a stack overflow for a sufficiently large, unbalanced
-      bitmap tree.  */
- 
-   auto_vec<bitmap_element *, 32> stack;
-   auto_vec<bitmap_element *, 32> sorted_elements;
-   bitmap_element *n = e;
- 
-   while (true)
-     {
-       while (n != NULL)
- 	{
- 	  stack.safe_push (n);
- 	  n = n->prev;
- 	}
- 
-       if (stack.is_empty ())
- 	break;
- 
-       n = stack.pop ();
-       sorted_elements.safe_push (n);
-       n = n->next;
-     }
- 
-   gcc_assert (sorted_elements[0] == e);
- 
-   bitmap_element *prev = NULL;
-   unsigned ix;
-   FOR_EACH_VEC_ELT (sorted_elements, ix, n)
-     {
-       if (prev != NULL)
-         prev->next = n;
-       n->prev = prev;
-       n->next = NULL;
-       prev = n;
-     }
- 
-   return e;
- }
- 
- /* Convert bitmap HEAD from splay-tree view to linked-list view.  */
- 
- void
- bitmap_list_view (bitmap head)
- {
-   bitmap_element *ptr;
- 
-   gcc_assert (head->tree_form);
- 
-   ptr = head->first;
-   if (ptr)
-     {
-       while (ptr->prev)
- 	bitmap_tree_rotate_right (ptr);
-       head->first = ptr;
-       head->first = bitmap_tree_listify_from (head, ptr);
-     }
- 
-   head->tree_form = false;
-   if (!head->current)
-     {
-       head->current = head->first;
-       head->indx = head->current ? head->current->indx : 0;
-     }
- }
- 
- /* Convert bitmap HEAD from linked-list view to splay-tree view.
-    This is simply a matter of dropping the prev or next pointers
-    and setting the tree_form flag.  The tree will balance itself
-    if and when it is used.  */
- 
- void
- bitmap_tree_view (bitmap head)
- {
-   bitmap_element *ptr;
- 
-   gcc_assert (! head->tree_form);
- 
-   ptr = head->first;
-   while (ptr)
-     {
-       ptr->prev = NULL;
-       ptr = ptr->next;
-     }
- 
-   head->tree_form = true;
- }
- 
- /* Clear a bitmap by freeing all its elements.  */
- 
- void
- bitmap_clear (bitmap head)
- {
-   if (head->first == NULL)
-     return;
-   if (head->tree_form)
-     {
-       bitmap_element *e, *t;
-       for (e = head->first; e->prev; e = e->prev)
- 	/* Loop to find the element with the smallest index.  */ ;
-       t = bitmap_tree_splay (head, head->first, e->indx);
-       gcc_checking_assert (t == e);
-       head->first = t;
-     }
-   bitmap_elt_clear_from (head, head->first);
- }
- 
- /* Initialize a bitmap obstack.  If BIT_OBSTACK is NULL, initialize
-    the default bitmap obstack.  */
- 
- void
- bitmap_obstack_initialize (bitmap_obstack *bit_obstack)
- {
-   if (!bit_obstack)
-     {
-       if (bitmap_default_obstack_depth++)
- 	return;
-       bit_obstack = &bitmap_default_obstack;
-     }
- 
- #if !defined(__GNUC__) || (__GNUC__ < 2)
- #define __alignof__(type) 0
- #endif
- 
-   bit_obstack->elements = NULL;
-   bit_obstack->heads = NULL;
-   obstack_specify_allocation (&bit_obstack->obstack, OBSTACK_CHUNK_SIZE,
- 			      __alignof__ (bitmap_element),
- 			      obstack_chunk_alloc,
- 			      obstack_chunk_free);
- }
- 
- /* Release the memory from a bitmap obstack.  If BIT_OBSTACK is NULL,
-    release the default bitmap obstack.  */
- 
- void
- bitmap_obstack_release (bitmap_obstack *bit_obstack)
- {
-   if (!bit_obstack)
-     {
-       if (--bitmap_default_obstack_depth)
- 	{
- 	  gcc_assert (bitmap_default_obstack_depth > 0);
- 	  return;
- 	}
-       bit_obstack = &bitmap_default_obstack;
-     }
- 
-   bit_obstack->elements = NULL;
-   bit_obstack->heads = NULL;
-   obstack_free (&bit_obstack->obstack, NULL);
- }
- 
- /* Create a new bitmap on an obstack.  If BIT_OBSTACK is NULL, create
-    it on the default bitmap obstack.  */
- 
- bitmap
- bitmap_alloc (bitmap_obstack *bit_obstack MEM_STAT_DECL)
- {
-   bitmap map;
- 
-   if (!bit_obstack)
-     bit_obstack = &bitmap_default_obstack;
-   map = bit_obstack->heads;
-   if (map)
-     bit_obstack->heads = (class bitmap_head *) map->first;
-   else
-     map = XOBNEW (&bit_obstack->obstack, bitmap_head);
-   bitmap_initialize (map, bit_obstack PASS_MEM_STAT);
- 
-   if (GATHER_STATISTICS)
-     register_overhead (map, sizeof (bitmap_head));
- 
-   return map;
- }
- 
- /* Create a new GCd bitmap.  */
- 
- bitmap
- bitmap_gc_alloc (ALONE_MEM_STAT_DECL)
- {
-   bitmap map;
- 
-   map = ggc_alloc<bitmap_head> ();
-   bitmap_initialize (map, NULL PASS_MEM_STAT);
- 
-   if (GATHER_STATISTICS)
-     register_overhead (map, sizeof (bitmap_head));
- 
-   return map;
- }
- 
- /* Release an obstack allocated bitmap.  */
- 
- void
- bitmap_obstack_free (bitmap map)
- {
-   if (map)
-     {
-       bitmap_clear (map);
-       map->first = (bitmap_element *) map->obstack->heads;
- 
-       if (GATHER_STATISTICS)
- 	release_overhead (map, sizeof (bitmap_head), true);
- 
-       map->obstack->heads = map;
-     }
- }
- 
- 
- /* Return nonzero if all bits in an element are zero.  */
- 
- static inline int
- bitmap_element_zerop (const bitmap_element *element)
- {
- #if BITMAP_ELEMENT_WORDS == 2
-   return (element->bits[0] | element->bits[1]) == 0;
- #else
-   unsigned i;
- 
-   for (i = 0; i < BITMAP_ELEMENT_WORDS; i++)
-     if (element->bits[i] != 0)
-       return 0;
- 
-   return 1;
- #endif
- }
- 
- /* Copy a bitmap to another bitmap.  */
- 
- void
- bitmap_copy (bitmap to, const_bitmap from)
- {
-   const bitmap_element *from_ptr;
-   bitmap_element *to_ptr = 0;
- 
-   gcc_checking_assert (!to->tree_form && !from->tree_form);
- 
-   bitmap_clear (to);
- 
-   /* Copy elements in forward direction one at a time.  */
-   for (from_ptr = from->first; from_ptr; from_ptr = from_ptr->next)
-     {
-       bitmap_element *to_elt = bitmap_element_allocate (to);
- 
-       to_elt->indx = from_ptr->indx;
-       memcpy (to_elt->bits, from_ptr->bits, sizeof (to_elt->bits));
- 
-       /* Here we have a special case of bitmap_list_link_element,
-          for the case where we know the links are being entered
- 	 in sequence.  */
-       if (to_ptr == 0)
- 	{
- 	  to->first = to->current = to_elt;
- 	  to->indx = from_ptr->indx;
- 	  to_elt->next = to_elt->prev = 0;
- 	}
-       else
- 	{
- 	  to_elt->prev = to_ptr;
- 	  to_elt->next = 0;
- 	  to_ptr->next = to_elt;
- 	}
- 
-       to_ptr = to_elt;
-     }
- }
- 
- /* Move a bitmap to another bitmap.  */
- 
- void
- bitmap_move (bitmap to, bitmap from)
- {
-   gcc_assert (to->obstack == from->obstack);
- 
-   bitmap_clear (to);
- 
-   size_t sz = 0;
-   if (GATHER_STATISTICS)
-     {
-       for (bitmap_element *e = to->first; e; e = e->next)
- 	sz += sizeof (bitmap_element);
-       register_overhead (to, sz);
-     }
- 
-   *to = *from;
- 
-   if (GATHER_STATISTICS)
-     release_overhead (from, sz, false);
- }
- 
- /* Clear a single bit in a bitmap.  Return true if the bit changed.  */
- 
- bool
- bitmap_clear_bit (bitmap head, int bit)
- {
-   unsigned int indx = bit / BITMAP_ELEMENT_ALL_BITS;
-   bitmap_element *ptr;
- 
-   if (!head->tree_form)
-     ptr = bitmap_list_find_element (head, indx);
-   else
-     ptr = bitmap_tree_find_element (head, indx);
-   if (ptr != 0)
-     {
-       unsigned bit_num  = bit % BITMAP_WORD_BITS;
-       unsigned word_num = bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
-       BITMAP_WORD bit_val = ((BITMAP_WORD) 1) << bit_num;
-       bool res = (ptr->bits[word_num] & bit_val) != 0;
-       if (res)
- 	{
- 	  ptr->bits[word_num] &= ~bit_val;
- 	  /* If we cleared the entire word, free up the element.  */
- 	  if (!ptr->bits[word_num]
- 	      && bitmap_element_zerop (ptr))
- 	    {
- 	      if (!head->tree_form)
- 		bitmap_list_unlink_element (head, ptr);
- 	      else
- 		bitmap_tree_unlink_element (head, ptr);
- 	    }
- 	}
- 
-       return res;
-     }
- 
-   return false;
- }
- 
- /* Set a single bit in a bitmap.  Return true if the bit changed.  */
- 
- bool
- bitmap_set_bit (bitmap head, int bit)
- {
-   unsigned indx = bit / BITMAP_ELEMENT_ALL_BITS;
-   bitmap_element *ptr;
-   if (!head->tree_form)
-     ptr = bitmap_list_find_element (head, indx);
-   else
-     ptr = bitmap_tree_find_element (head, indx);
-   unsigned word_num = bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
-   unsigned bit_num  = bit % BITMAP_WORD_BITS;
-   BITMAP_WORD bit_val = ((BITMAP_WORD) 1) << bit_num;
- 
-   if (ptr != 0)
-     {
-       bool res = (ptr->bits[word_num] & bit_val) == 0;
-       if (res)
- 	ptr->bits[word_num] |= bit_val;
-       return res;
-     }
- 
-   ptr = bitmap_element_allocate (head);
-   ptr->indx = bit / BITMAP_ELEMENT_ALL_BITS;
-   ptr->bits[word_num] = bit_val;
-   if (!head->tree_form)
-     bitmap_list_link_element (head, ptr);
-   else
-     bitmap_tree_link_element (head, ptr);
-   return true;
- }
- 
- /* Return whether a bit is set within a bitmap.  */
- 
- int
- bitmap_bit_p (const_bitmap head, int bit)
- {
-   unsigned int indx = bit / BITMAP_ELEMENT_ALL_BITS;
-   const bitmap_element *ptr;
-   unsigned bit_num;
-   unsigned word_num;
- 
-   if (!head->tree_form)
-     ptr = bitmap_list_find_element (const_cast<bitmap> (head), indx);
-   else
-     ptr = bitmap_tree_find_element (const_cast<bitmap> (head), indx);
-   if (ptr == 0)
-     return 0;
- 
-   bit_num = bit % BITMAP_WORD_BITS;
-   word_num = bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
- 
-   return (ptr->bits[word_num] >> bit_num) & 1;
- }
- 
- /* Set CHUNK_SIZE bits at a time in bitmap HEAD.
-    Store CHUNK_VALUE starting at bits CHUNK * chunk_size.
-    This is the set routine for viewing bitmap as a multi-bit sparse array.  */
- 
- void
- bitmap_set_aligned_chunk (bitmap head, unsigned int chunk,
- 			  unsigned int chunk_size, BITMAP_WORD chunk_value)
- {
-   // Ensure chunk size is a power of 2 and fits in BITMAP_WORD.
-   gcc_checking_assert (pow2p_hwi (chunk_size));
-   gcc_checking_assert (chunk_size < (sizeof (BITMAP_WORD) * CHAR_BIT));
- 
-   // Ensure chunk_value is within range of chunk_size bits.
-   BITMAP_WORD max_value = (1 << chunk_size) - 1;
-   gcc_checking_assert (chunk_value <= max_value);
- 
-   unsigned bit = chunk * chunk_size;
-   unsigned indx = bit / BITMAP_ELEMENT_ALL_BITS;
-   bitmap_element *ptr;
-   if (!head->tree_form)
-     ptr = bitmap_list_find_element (head, indx);
-   else
-     ptr = bitmap_tree_find_element (head, indx);
-   unsigned word_num = bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
-   unsigned bit_num  = bit % BITMAP_WORD_BITS;
-   BITMAP_WORD bit_val = chunk_value << bit_num;
-   BITMAP_WORD mask = ~(max_value << bit_num);
- 
-   if (ptr != 0)
-     {
-       ptr->bits[word_num] &= mask;
-       ptr->bits[word_num] |= bit_val;
-       return;
-     }
- 
-   ptr = bitmap_element_allocate (head);
-   ptr->indx = bit / BITMAP_ELEMENT_ALL_BITS;
-   ptr->bits[word_num] = bit_val;
-   if (!head->tree_form)
-     bitmap_list_link_element (head, ptr);
-   else
-     bitmap_tree_link_element (head, ptr);
- }
- 
- /* This is the get routine for viewing bitmap as a multi-bit sparse array.
-    Return a set of CHUNK_SIZE consecutive bits from HEAD, starting at bit
-    CHUNK * chunk_size.   */
- 
- BITMAP_WORD
- bitmap_get_aligned_chunk (const_bitmap head, unsigned int chunk,
- 			  unsigned int chunk_size)
- {
-   // Ensure chunk size is a power of 2, fits in BITMAP_WORD and is in range.
-   gcc_checking_assert (pow2p_hwi (chunk_size));
-   gcc_checking_assert (chunk_size < (sizeof (BITMAP_WORD) * CHAR_BIT));
- 
-   BITMAP_WORD max_value = (1 << chunk_size) - 1;
-   unsigned bit = chunk * chunk_size;
-   unsigned int indx = bit / BITMAP_ELEMENT_ALL_BITS;
-   const bitmap_element *ptr;
-   unsigned bit_num;
-   unsigned word_num;
- 
-   if (!head->tree_form)
-     ptr = bitmap_list_find_element (const_cast<bitmap> (head), indx);
-   else
-     ptr = bitmap_tree_find_element (const_cast<bitmap> (head), indx);
-   if (ptr == 0)
-     return 0;
- 
-   bit_num = bit % BITMAP_WORD_BITS;
-   word_num = bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
- 
-   // Return 4 bits.
-   return (ptr->bits[word_num] >> bit_num) & max_value;
- }
- 
- #if GCC_VERSION < 3400
- /* Table of number of set bits in a character, indexed by value of char.  */
- static const unsigned char popcount_table[] =
- {
-     0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
-     1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
-     1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
-     2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
-     1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
-     2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
-     2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
-     3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,
- };
- 
- static unsigned long
- bitmap_popcount (BITMAP_WORD a)
- {
-   unsigned long ret = 0;
-   unsigned i;
- 
-   /* Just do this the table way for now  */
-   for (i = 0; i < BITMAP_WORD_BITS; i+= 8)
-     ret += popcount_table[(a >> i) & 0xff];
-   return ret;
- }
- #endif
- 
- /* Count and return the number of bits set in the bitmap word BITS.  */
- static unsigned long
- bitmap_count_bits_in_word (const BITMAP_WORD *bits)
- {
-   unsigned long count = 0;
- 
-   for (unsigned ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
-     {
- #if GCC_VERSION >= 3400
-       /* Note that popcountl matches BITMAP_WORD in type, so the actual size
- 	 of BITMAP_WORD is not material.  */
-       count += __builtin_popcountl (bits[ix]);
- #else
-       count += bitmap_popcount (bits[ix]);
- #endif
-     }
-   return count;
- }
- 
- /* Count the number of bits set in the bitmap, and return it.  */
- 
- unsigned long
- bitmap_count_bits (const_bitmap a)
- {
-   unsigned long count = 0;
-   const bitmap_element *elt;
- 
-   gcc_checking_assert (!a->tree_form);
-   for (elt = a->first; elt; elt = elt->next)
-     count += bitmap_count_bits_in_word (elt->bits);
- 
-   return count;
- }
- 
- /* Count the number of unique bits set in A and B and return it.  */
- 
- unsigned long
- bitmap_count_unique_bits (const_bitmap a, const_bitmap b)
- {
-   unsigned long count = 0;
-   const bitmap_element *elt_a, *elt_b;
- 
-   for (elt_a = a->first, elt_b = b->first; elt_a && elt_b; )
-     {
-       /* If we're at different indices, then count all the bits
- 	 in the lower element.  If we're at the same index, then
- 	 count the bits in the IOR of the two elements.  */
-       if (elt_a->indx < elt_b->indx)
- 	{
- 	  count += bitmap_count_bits_in_word (elt_a->bits);
- 	  elt_a = elt_a->next;
- 	}
-       else if (elt_b->indx < elt_a->indx)
- 	{
- 	  count += bitmap_count_bits_in_word (elt_b->bits);
- 	  elt_b = elt_b->next;
- 	}
-       else
- 	{
- 	  BITMAP_WORD bits[BITMAP_ELEMENT_WORDS];
- 	  for (unsigned ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
- 	    bits[ix] = elt_a->bits[ix] | elt_b->bits[ix];
- 	  count += bitmap_count_bits_in_word (bits);
- 	  elt_a = elt_a->next;
- 	  elt_b = elt_b->next;
- 	}
-     }
-   return count;
- }
- 
- /* Return true if the bitmap has a single bit set.  Otherwise return
-    false.  */
- 
- bool
- bitmap_single_bit_set_p (const_bitmap a)
- {
-   unsigned long count = 0;
-   const bitmap_element *elt;
-   unsigned ix;
- 
-   if (bitmap_empty_p (a))
-     return false;
- 
-   elt = a->first;
- 
-   /* As there are no completely empty bitmap elements, a second one
-      means we have more than one bit set.  */
-   if (elt->next != NULL
-       && (!a->tree_form || elt->prev != NULL))
-     return false;
- 
-   for (ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
-     {
- #if GCC_VERSION >= 3400
-       /* Note that popcountl matches BITMAP_WORD in type, so the actual size
- 	 of BITMAP_WORD is not material.  */
-       count += __builtin_popcountl (elt->bits[ix]);
- #else
-       count += bitmap_popcount (elt->bits[ix]);
- #endif
-       if (count > 1)
- 	return false;
-     }
- 
-   return count == 1;
- }
- 
- 
- /* Return the bit number of the first set bit in the bitmap.  The
-    bitmap must be non-empty.  */
- 
- unsigned
- bitmap_first_set_bit (const_bitmap a)
- {
-   const bitmap_element *elt = a->first;
-   unsigned bit_no;
-   BITMAP_WORD word;
-   unsigned ix;
- 
-   gcc_checking_assert (elt);
- 
-   if (a->tree_form)
-     while (elt->prev)
-       elt = elt->prev;
- 
-   bit_no = elt->indx * BITMAP_ELEMENT_ALL_BITS;
-   for (ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
-     {
-       word = elt->bits[ix];
-       if (word)
- 	goto found_bit;
-     }
-   gcc_unreachable ();
-  found_bit:
-   bit_no += ix * BITMAP_WORD_BITS;
- 
- #if GCC_VERSION >= 3004
-   gcc_assert (sizeof (long) == sizeof (word));
-   bit_no += __builtin_ctzl (word);
- #else
-   /* Binary search for the first set bit.  */
- #if BITMAP_WORD_BITS > 64
- #error "Fill out the table."
- #endif
- #if BITMAP_WORD_BITS > 32
-   if (!(word & 0xffffffff))
-     word >>= 32, bit_no += 32;
- #endif
-   if (!(word & 0xffff))
-     word >>= 16, bit_no += 16;
-   if (!(word & 0xff))
-     word >>= 8, bit_no += 8;
-   if (!(word & 0xf))
-     word >>= 4, bit_no += 4;
-   if (!(word & 0x3))
-     word >>= 2, bit_no += 2;
-   if (!(word & 0x1))
-     word >>= 1, bit_no += 1;
- 
-  gcc_checking_assert (word & 1);
- #endif
-  return bit_no;
- }
- 
- /* Return the bit number of the first set bit in the bitmap.  The
-    bitmap must be non-empty.  */
- 
- unsigned
- bitmap_last_set_bit (const_bitmap a)
- {
-   const bitmap_element *elt;
-   unsigned bit_no;
-   BITMAP_WORD word;
-   int ix;
- 
-   if (a->tree_form)
-     elt = a->first;
-   else
-     elt = a->current ? a->current : a->first;
-   gcc_checking_assert (elt);
- 
-   while (elt->next)
-     elt = elt->next;
- 
-   bit_no = elt->indx * BITMAP_ELEMENT_ALL_BITS;
-   for (ix = BITMAP_ELEMENT_WORDS - 1; ix >= 1; ix--)
-     {
-       word = elt->bits[ix];
-       if (word)
- 	goto found_bit;
-     }
-   gcc_assert (elt->bits[ix] != 0);
-  found_bit:
-   bit_no += ix * BITMAP_WORD_BITS;
- #if GCC_VERSION >= 3004
-   gcc_assert (sizeof (long) == sizeof (word));
-   bit_no += BITMAP_WORD_BITS - __builtin_clzl (word) - 1;
- #else
-   /* Hopefully this is a twos-complement host...  */
-   BITMAP_WORD x = word;
-   x |= (x >> 1);
-   x |= (x >> 2);
-   x |= (x >> 4);
-   x |= (x >> 8);
-   x |= (x >> 16);
- #if BITMAP_WORD_BITS > 32
-   x |= (x >> 32);
- #endif
-   bit_no += bitmap_popcount (x) - 1;
- #endif
- 
-   return bit_no;
- }
- 
- 
- /* DST = A & B.  */
- 
- void
- bitmap_and (bitmap dst, const_bitmap a, const_bitmap b)
- {
-   bitmap_element *dst_elt = dst->first;
-   const bitmap_element *a_elt = a->first;
-   const bitmap_element *b_elt = b->first;
-   bitmap_element *dst_prev = NULL;
- 
-   gcc_checking_assert (!dst->tree_form && !a->tree_form && !b->tree_form);
-   gcc_assert (dst != a && dst != b);
- 
-   if (a == b)
-     {
-       bitmap_copy (dst, a);
-       return;
-     }
- 
-   while (a_elt && b_elt)
-     {
-       if (a_elt->indx < b_elt->indx)
- 	a_elt = a_elt->next;
-       else if (b_elt->indx < a_elt->indx)
- 	b_elt = b_elt->next;
-       else
- 	{
- 	  /* Matching elts, generate A & B.  */
- 	  unsigned ix;
- 	  BITMAP_WORD ior = 0;
- 
- 	  if (!dst_elt)
- 	    dst_elt = bitmap_list_insert_element_after (dst, dst_prev,
- 							a_elt->indx);
- 	  else
- 	    dst_elt->indx = a_elt->indx;
- 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	    {
- 	      BITMAP_WORD r = a_elt->bits[ix] & b_elt->bits[ix];
- 
- 	      dst_elt->bits[ix] = r;
- 	      ior |= r;
- 	    }
- 	  if (ior)
- 	    {
- 	      dst_prev = dst_elt;
- 	      dst_elt = dst_elt->next;
- 	    }
- 	  a_elt = a_elt->next;
- 	  b_elt = b_elt->next;
- 	}
-     }
-   /* Ensure that dst->current is valid.  */
-   dst->current = dst->first;
-   bitmap_elt_clear_from (dst, dst_elt);
-   gcc_checking_assert (!dst->current == !dst->first);
-   if (dst->current)
-     dst->indx = dst->current->indx;
- }
- 
- /* A &= B.  Return true if A changed.  */
- 
- bool
- bitmap_and_into (bitmap a, const_bitmap b)
- {
-   bitmap_element *a_elt = a->first;
-   const bitmap_element *b_elt = b->first;
-   bitmap_element *next;
-   bool changed = false;
- 
-   gcc_checking_assert (!a->tree_form && !b->tree_form);
- 
-   if (a == b)
-     return false;
- 
-   while (a_elt && b_elt)
-     {
-       if (a_elt->indx < b_elt->indx)
- 	{
- 	  next = a_elt->next;
- 	  bitmap_list_unlink_element (a, a_elt);
- 	  a_elt = next;
- 	  changed = true;
- 	}
-       else if (b_elt->indx < a_elt->indx)
- 	b_elt = b_elt->next;
-       else
- 	{
- 	  /* Matching elts, generate A &= B.  */
- 	  unsigned ix;
- 	  BITMAP_WORD ior = 0;
- 
- 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	    {
- 	      BITMAP_WORD r = a_elt->bits[ix] & b_elt->bits[ix];
- 	      if (a_elt->bits[ix] != r)
- 		changed = true;
- 	      a_elt->bits[ix] = r;
- 	      ior |= r;
- 	    }
- 	  next = a_elt->next;
- 	  if (!ior)
- 	    bitmap_list_unlink_element (a, a_elt);
- 	  a_elt = next;
- 	  b_elt = b_elt->next;
- 	}
-     }
- 
-   if (a_elt)
-     {
-       changed = true;
-       bitmap_elt_clear_from (a, a_elt);
-     }
- 
-   gcc_checking_assert (!a->current == !a->first
- 		       && (!a->current || a->indx == a->current->indx));
- 
-   return changed;
- }
- 
- 
- /* Insert an element equal to SRC_ELT after DST_PREV, overwriting DST_ELT
-    if non-NULL.  CHANGED is true if the destination bitmap had already been
-    changed; the new value of CHANGED is returned.  */
- 
- static inline bool
- bitmap_elt_copy (bitmap dst, bitmap_element *dst_elt, bitmap_element *dst_prev,
- 		 const bitmap_element *src_elt, bool changed)
- {
-   if (!changed && dst_elt && dst_elt->indx == src_elt->indx)
-     {
-       unsigned ix;
- 
-       for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	if (src_elt->bits[ix] != dst_elt->bits[ix])
- 	  {
- 	    dst_elt->bits[ix] = src_elt->bits[ix];
- 	    changed = true;
- 	  }
-     }
-   else
-     {
-       changed = true;
-       if (!dst_elt)
- 	dst_elt = bitmap_list_insert_element_after (dst, dst_prev,
- 						    src_elt->indx);
-       else
- 	dst_elt->indx = src_elt->indx;
-       memcpy (dst_elt->bits, src_elt->bits, sizeof (dst_elt->bits));
-     }
-   return changed;
- }
- 
- 
- 
- /* DST = A & ~B  */
- 
- bool
- bitmap_and_compl (bitmap dst, const_bitmap a, const_bitmap b)
- {
-   bitmap_element *dst_elt = dst->first;
-   const bitmap_element *a_elt = a->first;
-   const bitmap_element *b_elt = b->first;
-   bitmap_element *dst_prev = NULL;
-   bitmap_element **dst_prev_pnext = &dst->first;
-   bool changed = false;
- 
-   gcc_checking_assert (!dst->tree_form && !a->tree_form && !b->tree_form);
-   gcc_assert (dst != a && dst != b);
- 
-   if (a == b)
-     {
-       changed = !bitmap_empty_p (dst);
-       bitmap_clear (dst);
-       return changed;
-     }
- 
-   while (a_elt)
-     {
-       while (b_elt && b_elt->indx < a_elt->indx)
- 	b_elt = b_elt->next;
- 
-       if (!b_elt || b_elt->indx > a_elt->indx)
- 	{
- 	  changed = bitmap_elt_copy (dst, dst_elt, dst_prev, a_elt, changed);
- 	  dst_prev = *dst_prev_pnext;
- 	  dst_prev_pnext = &dst_prev->next;
- 	  dst_elt = *dst_prev_pnext;
- 	  a_elt = a_elt->next;
- 	}
- 
-       else
- 	{
- 	  /* Matching elts, generate A & ~B.  */
- 	  unsigned ix;
- 	  BITMAP_WORD ior = 0;
- 
- 	  if (!changed && dst_elt && dst_elt->indx == a_elt->indx)
- 	    {
- 	      for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 		{
- 		  BITMAP_WORD r = a_elt->bits[ix] & ~b_elt->bits[ix];
- 
- 		  if (dst_elt->bits[ix] != r)
- 		    {
- 		      changed = true;
- 		      dst_elt->bits[ix] = r;
- 		    }
- 		  ior |= r;
- 		}
- 	    }
- 	  else
- 	    {
- 	      bool new_element;
- 	      if (!dst_elt || dst_elt->indx > a_elt->indx)
- 		{
- 		  dst_elt = bitmap_list_insert_element_after (dst, dst_prev,
- 							      a_elt->indx);
- 		  new_element = true;
- 		}
- 	      else
- 		{
- 		  dst_elt->indx = a_elt->indx;
- 		  new_element = false;
- 		}
- 
- 	      for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 		{
- 		  BITMAP_WORD r = a_elt->bits[ix] & ~b_elt->bits[ix];
- 
- 		  dst_elt->bits[ix] = r;
- 		  ior |= r;
- 		}
- 
- 	      if (ior)
- 	        changed = true;
- 	      else
- 	        {
- 	          changed |= !new_element;
- 		  bitmap_list_unlink_element (dst, dst_elt);
- 		  dst_elt = *dst_prev_pnext;
- 		}
- 	    }
- 
- 	  if (ior)
- 	    {
- 	      dst_prev = *dst_prev_pnext;
- 	      dst_prev_pnext = &dst_prev->next;
- 	      dst_elt = *dst_prev_pnext;
- 	    }
- 	  a_elt = a_elt->next;
- 	  b_elt = b_elt->next;
- 	}
-     }
- 
-   /* Ensure that dst->current is valid.  */
-   dst->current = dst->first;
- 
-   if (dst_elt)
-     {
-       changed = true;
-       bitmap_elt_clear_from (dst, dst_elt);
-     }
-   gcc_checking_assert (!dst->current == !dst->first);
-   if (dst->current)
-     dst->indx = dst->current->indx;
- 
-   return changed;
- }
- 
- /* A &= ~B. Returns true if A changes */
- 
- bool
- bitmap_and_compl_into (bitmap a, const_bitmap b)
- {
-   bitmap_element *a_elt = a->first;
-   const bitmap_element *b_elt = b->first;
-   bitmap_element *next;
-   BITMAP_WORD changed = 0;
- 
-   gcc_checking_assert (!a->tree_form && !b->tree_form);
- 
-   if (a == b)
-     {
-       if (bitmap_empty_p (a))
- 	return false;
-       else
- 	{
- 	  bitmap_clear (a);
- 	  return true;
- 	}
-     }
- 
-   while (a_elt && b_elt)
-     {
-       if (a_elt->indx < b_elt->indx)
- 	a_elt = a_elt->next;
-       else if (b_elt->indx < a_elt->indx)
- 	b_elt = b_elt->next;
-       else
- 	{
- 	  /* Matching elts, generate A &= ~B.  */
- 	  unsigned ix;
- 	  BITMAP_WORD ior = 0;
- 
- 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	    {
- 	      BITMAP_WORD cleared = a_elt->bits[ix] & b_elt->bits[ix];
- 	      BITMAP_WORD r = a_elt->bits[ix] ^ cleared;
- 
- 	      a_elt->bits[ix] = r;
- 	      changed |= cleared;
- 	      ior |= r;
- 	    }
- 	  next = a_elt->next;
- 	  if (!ior)
- 	    bitmap_list_unlink_element (a, a_elt);
- 	  a_elt = next;
- 	  b_elt = b_elt->next;
- 	}
-     }
-   gcc_checking_assert (!a->current == !a->first
- 		       && (!a->current || a->indx == a->current->indx));
-   return changed != 0;
- }
- 
- /* Set COUNT bits from START in HEAD.  */
- void
- bitmap_set_range (bitmap head, unsigned int start, unsigned int count)
- {
-   unsigned int first_index, end_bit_plus1, last_index;
-   bitmap_element *elt, *elt_prev;
-   unsigned int i;
- 
-   gcc_checking_assert (!head->tree_form);
- 
-   if (!count)
-     return;
- 
-   if (count == 1)
-     {
-       bitmap_set_bit (head, start);
-       return;
-     }
- 
-   first_index = start / BITMAP_ELEMENT_ALL_BITS;
-   end_bit_plus1 = start + count;
-   last_index = (end_bit_plus1 - 1) / BITMAP_ELEMENT_ALL_BITS;
-   elt = bitmap_list_find_element (head, first_index);
- 
-   /* If bitmap_list_find_element returns zero, the current is the closest block
-      to the result.  Otherwise, just use bitmap_element_allocate to
-      ensure ELT is set; in the loop below, ELT == NULL means "insert
-      at the end of the bitmap".  */
-   if (!elt)
-     {
-       elt = bitmap_element_allocate (head);
-       elt->indx = first_index;
-       bitmap_list_link_element (head, elt);
-     }
- 
-   gcc_checking_assert (elt->indx == first_index);
-   elt_prev = elt->prev;
-   for (i = first_index; i <= last_index; i++)
-     {
-       unsigned elt_start_bit = i * BITMAP_ELEMENT_ALL_BITS;
-       unsigned elt_end_bit_plus1 = elt_start_bit + BITMAP_ELEMENT_ALL_BITS;
- 
-       unsigned int first_word_to_mod;
-       BITMAP_WORD first_mask;
-       unsigned int last_word_to_mod;
-       BITMAP_WORD last_mask;
-       unsigned int ix;
- 
-       if (!elt || elt->indx != i)
- 	elt = bitmap_list_insert_element_after (head, elt_prev, i);
- 
-       if (elt_start_bit <= start)
- 	{
- 	  /* The first bit to turn on is somewhere inside this
- 	     elt.  */
- 	  first_word_to_mod = (start - elt_start_bit) / BITMAP_WORD_BITS;
- 
- 	  /* This mask should have 1s in all bits >= start position. */
- 	  first_mask =
- 	    (((BITMAP_WORD) 1) << ((start % BITMAP_WORD_BITS))) - 1;
- 	  first_mask = ~first_mask;
- 	}
-       else
- 	{
- 	  /* The first bit to turn on is below this start of this elt.  */
- 	  first_word_to_mod = 0;
- 	  first_mask = ~(BITMAP_WORD) 0;
- 	}
- 
-       if (elt_end_bit_plus1 <= end_bit_plus1)
- 	{
- 	  /* The last bit to turn on is beyond this elt.  */
- 	  last_word_to_mod = BITMAP_ELEMENT_WORDS - 1;
- 	  last_mask = ~(BITMAP_WORD) 0;
- 	}
-       else
- 	{
- 	  /* The last bit to turn on is inside to this elt.  */
- 	  last_word_to_mod =
- 	    (end_bit_plus1 - elt_start_bit) / BITMAP_WORD_BITS;
- 
- 	  /* The last mask should have 1s below the end bit.  */
- 	  last_mask =
- 	    (((BITMAP_WORD) 1) << ((end_bit_plus1 % BITMAP_WORD_BITS))) - 1;
- 	}
- 
-       if (first_word_to_mod == last_word_to_mod)
- 	{
- 	  BITMAP_WORD mask = first_mask & last_mask;
- 	  elt->bits[first_word_to_mod] |= mask;
- 	}
-       else
- 	{
- 	  elt->bits[first_word_to_mod] |= first_mask;
- 	  if (BITMAP_ELEMENT_WORDS > 2)
- 	    for (ix = first_word_to_mod + 1; ix < last_word_to_mod; ix++)
- 	      elt->bits[ix] = ~(BITMAP_WORD) 0;
- 	  elt->bits[last_word_to_mod] |= last_mask;
- 	}
- 
-       elt_prev = elt;
-       elt = elt->next;
-     }
- 
-   head->current = elt ? elt : elt_prev;
-   head->indx = head->current->indx;
- }
- 
- /* Clear COUNT bits from START in HEAD.  */
- void
- bitmap_clear_range (bitmap head, unsigned int start, unsigned int count)
- {
-   unsigned int first_index, end_bit_plus1, last_index;
-   bitmap_element *elt;
- 
-   gcc_checking_assert (!head->tree_form);
- 
-   if (!count)
-     return;
- 
-   if (count == 1)
-     {
-       bitmap_clear_bit (head, start);
-       return;
-     }
- 
-   first_index = start / BITMAP_ELEMENT_ALL_BITS;
-   end_bit_plus1 = start + count;
-   last_index = (end_bit_plus1 - 1) / BITMAP_ELEMENT_ALL_BITS;
-   elt = bitmap_list_find_element (head, first_index);
- 
-   /* If bitmap_list_find_element returns zero, the current is the closest block
-      to the result.  If the current is less than first index, find the
-      next one.  Otherwise, just set elt to be current.  */
-   if (!elt)
-     {
-       if (head->current)
- 	{
- 	  if (head->indx < first_index)
- 	    {
- 	      elt = head->current->next;
- 	      if (!elt)
- 		return;
- 	    }
- 	  else
- 	    elt = head->current;
- 	}
-       else
- 	return;
-     }
- 
-   while (elt && (elt->indx <= last_index))
-     {
-       bitmap_element * next_elt = elt->next;
-       unsigned elt_start_bit = (elt->indx) * BITMAP_ELEMENT_ALL_BITS;
-       unsigned elt_end_bit_plus1 = elt_start_bit + BITMAP_ELEMENT_ALL_BITS;
- 
- 
-       if (elt_start_bit >= start && elt_end_bit_plus1 <= end_bit_plus1)
- 	/* Get rid of the entire elt and go to the next one.  */
- 	bitmap_list_unlink_element (head, elt);
-       else
- 	{
- 	  /* Going to have to knock out some bits in this elt.  */
- 	  unsigned int first_word_to_mod;
- 	  BITMAP_WORD first_mask;
- 	  unsigned int last_word_to_mod;
- 	  BITMAP_WORD last_mask;
- 	  unsigned int i;
- 	  bool clear = true;
- 
- 	  if (elt_start_bit <= start)
- 	    {
- 	      /* The first bit to turn off is somewhere inside this
- 		 elt.  */
- 	      first_word_to_mod = (start - elt_start_bit) / BITMAP_WORD_BITS;
- 
- 	      /* This mask should have 1s in all bits >= start position. */
- 	      first_mask =
- 		(((BITMAP_WORD) 1) << ((start % BITMAP_WORD_BITS))) - 1;
- 	      first_mask = ~first_mask;
- 	    }
- 	  else
- 	    {
- 	      /* The first bit to turn off is below this start of this elt.  */
- 	      first_word_to_mod = 0;
- 	      first_mask = 0;
- 	      first_mask = ~first_mask;
- 	    }
- 
- 	  if (elt_end_bit_plus1 <= end_bit_plus1)
- 	    {
- 	      /* The last bit to turn off is beyond this elt.  */
- 	      last_word_to_mod = BITMAP_ELEMENT_WORDS - 1;
- 	      last_mask = 0;
- 	      last_mask = ~last_mask;
- 	    }
- 	  else
- 	    {
- 	      /* The last bit to turn off is inside to this elt.  */
- 	      last_word_to_mod =
- 		(end_bit_plus1 - elt_start_bit) / BITMAP_WORD_BITS;
- 
- 	      /* The last mask should have 1s below the end bit.  */
- 	      last_mask =
- 		(((BITMAP_WORD) 1) << (((end_bit_plus1) % BITMAP_WORD_BITS))) - 1;
- 	    }
- 
- 
- 	  if (first_word_to_mod == last_word_to_mod)
- 	    {
- 	      BITMAP_WORD mask = first_mask & last_mask;
- 	      elt->bits[first_word_to_mod] &= ~mask;
- 	    }
- 	  else
- 	    {
- 	      elt->bits[first_word_to_mod] &= ~first_mask;
- 	      if (BITMAP_ELEMENT_WORDS > 2)
- 	        for (i = first_word_to_mod + 1; i < last_word_to_mod; i++)
- 		  elt->bits[i] = 0;
- 	      elt->bits[last_word_to_mod] &= ~last_mask;
- 	    }
- 	  for (i = 0; i < BITMAP_ELEMENT_WORDS; i++)
- 	    if (elt->bits[i])
- 	      {
- 		clear = false;
- 		break;
- 	      }
- 	  /* Check to see if there are any bits left.  */
- 	  if (clear)
- 	    bitmap_list_unlink_element (head, elt);
- 	}
-       elt = next_elt;
-     }
- 
-   if (elt)
-     {
-       head->current = elt;
-       head->indx = head->current->indx;
-     }
- }
- 
- /* A = ~A & B. */
- 
- void
- bitmap_compl_and_into (bitmap a, const_bitmap b)
- {
-   bitmap_element *a_elt = a->first;
-   const bitmap_element *b_elt = b->first;
-   bitmap_element *a_prev = NULL;
-   bitmap_element *next;
- 
-   gcc_checking_assert (!a->tree_form && !b->tree_form);
-   gcc_assert (a != b);
- 
-   if (bitmap_empty_p (a))
-     {
-       bitmap_copy (a, b);
-       return;
-     }
-   if (bitmap_empty_p (b))
-     {
-       bitmap_clear (a);
-       return;
-     }
- 
-   while (a_elt || b_elt)
-     {
-       if (!b_elt || (a_elt && a_elt->indx < b_elt->indx))
- 	{
- 	  /* A is before B.  Remove A */
- 	  next = a_elt->next;
- 	  a_prev = a_elt->prev;
- 	  bitmap_list_unlink_element (a, a_elt);
- 	  a_elt = next;
- 	}
-       else if (!a_elt || b_elt->indx < a_elt->indx)
- 	{
- 	  /* B is before A.  Copy B. */
- 	  next = bitmap_list_insert_element_after (a, a_prev, b_elt->indx);
- 	  memcpy (next->bits, b_elt->bits, sizeof (next->bits));
- 	  a_prev = next;
- 	  b_elt = b_elt->next;
- 	}
-       else
- 	{
- 	  /* Matching elts, generate A = ~A & B.  */
- 	  unsigned ix;
- 	  BITMAP_WORD ior = 0;
- 
- 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	    {
- 	      BITMAP_WORD cleared = a_elt->bits[ix] & b_elt->bits[ix];
- 	      BITMAP_WORD r = b_elt->bits[ix] ^ cleared;
- 
- 	      a_elt->bits[ix] = r;
- 	      ior |= r;
- 	    }
- 	  next = a_elt->next;
- 	  if (!ior)
- 	    bitmap_list_unlink_element (a, a_elt);
- 	  else
- 	    a_prev = a_elt;
- 	  a_elt = next;
- 	  b_elt = b_elt->next;
- 	}
-     }
-   gcc_checking_assert (!a->current == !a->first
- 		       && (!a->current || a->indx == a->current->indx));
-   return;
- }
- 
- 
- /* Insert an element corresponding to A_ELT | B_ELT after DST_PREV,
-    overwriting DST_ELT if non-NULL.  CHANGED is true if the destination bitmap
-    had already been changed; the new value of CHANGED is returned.  */
- 
- static inline bool
- bitmap_elt_ior (bitmap dst, bitmap_element *dst_elt, bitmap_element *dst_prev,
- 		const bitmap_element *a_elt, const bitmap_element *b_elt,
- 		bool changed)
- {
-   gcc_assert (a_elt || b_elt);
- 
-   if (a_elt && b_elt && a_elt->indx == b_elt->indx)
-     {
-       /* Matching elts, generate A | B.  */
-       unsigned ix;
- 
-       if (!changed && dst_elt && dst_elt->indx == a_elt->indx)
- 	{
- 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	    {
- 	      BITMAP_WORD r = a_elt->bits[ix] | b_elt->bits[ix];
- 	      if (r != dst_elt->bits[ix])
- 		{
- 		  dst_elt->bits[ix] = r;
- 		  changed = true;
- 		}
- 	    }
- 	}
-       else
- 	{
- 	  changed = true;
- 	  if (!dst_elt)
- 	    dst_elt = bitmap_list_insert_element_after (dst, dst_prev,
- 							a_elt->indx);
- 	  else
- 	    dst_elt->indx = a_elt->indx;
- 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	    {
- 	      BITMAP_WORD r = a_elt->bits[ix] | b_elt->bits[ix];
- 	      dst_elt->bits[ix] = r;
- 	    }
- 	}
-     }
-   else
-     {
-       /* Copy a single element.  */
-       const bitmap_element *src;
- 
-       if (!b_elt || (a_elt && a_elt->indx < b_elt->indx))
- 	src = a_elt;
-       else
- 	src = b_elt;
- 
-       gcc_checking_assert (src);
-       changed = bitmap_elt_copy (dst, dst_elt, dst_prev, src, changed);
-     }
-   return changed;
- }
- 
- 
- /* DST = A | B.  Return true if DST changes.  */
- 
- bool
- bitmap_ior (bitmap dst, const_bitmap a, const_bitmap b)
- {
-   bitmap_element *dst_elt = dst->first;
-   const bitmap_element *a_elt = a->first;
-   const bitmap_element *b_elt = b->first;
-   bitmap_element *dst_prev = NULL;
-   bitmap_element **dst_prev_pnext = &dst->first;
-   bool changed = false;
- 
-   gcc_checking_assert (!dst->tree_form && !a->tree_form && !b->tree_form);
-   gcc_assert (dst != a && dst != b);
- 
-   while (a_elt || b_elt)
-     {
-       changed = bitmap_elt_ior (dst, dst_elt, dst_prev, a_elt, b_elt, changed);
- 
-       if (a_elt && b_elt && a_elt->indx == b_elt->indx)
- 	{
- 	  a_elt = a_elt->next;
- 	  b_elt = b_elt->next;
- 	}
-       else
- 	{
- 	  if (a_elt && (!b_elt || a_elt->indx <= b_elt->indx))
-             a_elt = a_elt->next;
-           else if (b_elt && (!a_elt || b_elt->indx <= a_elt->indx))
-             b_elt = b_elt->next;
- 	}
- 
-       dst_prev = *dst_prev_pnext;
-       dst_prev_pnext = &dst_prev->next;
-       dst_elt = *dst_prev_pnext;
-     }
- 
-   if (dst_elt)
-     {
-       changed = true;
-       /* Ensure that dst->current is valid.  */
-       dst->current = dst->first;
-       bitmap_elt_clear_from (dst, dst_elt);
-     }
-   gcc_checking_assert (!dst->current == !dst->first);
-   if (dst->current)
-     dst->indx = dst->current->indx;
-   return changed;
- }
- 
- /* A |= B.  Return true if A changes.  */
- 
- bool
- bitmap_ior_into (bitmap a, const_bitmap b)
- {
-   bitmap_element *a_elt = a->first;
-   const bitmap_element *b_elt = b->first;
-   bitmap_element *a_prev = NULL;
-   bitmap_element **a_prev_pnext = &a->first;
-   bool changed = false;
- 
-   gcc_checking_assert (!a->tree_form && !b->tree_form);
-   if (a == b)
-     return false;
- 
-   while (b_elt)
-     {
-       /* If A lags behind B, just advance it.  */
-       if (!a_elt || a_elt->indx == b_elt->indx)
- 	{
- 	  changed = bitmap_elt_ior (a, a_elt, a_prev, a_elt, b_elt, changed);
- 	  b_elt = b_elt->next;
- 	}
-       else if (a_elt->indx > b_elt->indx)
- 	{
-           changed = bitmap_elt_copy (a, NULL, a_prev, b_elt, changed);
- 	  b_elt = b_elt->next;
- 	}
- 
-       a_prev = *a_prev_pnext;
-       a_prev_pnext = &a_prev->next;
-       a_elt = *a_prev_pnext;
-     }
- 
-   gcc_checking_assert (!a->current == !a->first);
-   if (a->current)
-     a->indx = a->current->indx;
-   return changed;
- }
- 
- /* A |= B.  Return true if A changes.  Free B (re-using its storage
-    for the result).  */
- 
- bool
- bitmap_ior_into_and_free (bitmap a, bitmap *b_)
- {
-   bitmap b = *b_;
-   bitmap_element *a_elt = a->first;
-   bitmap_element *b_elt = b->first;
-   bitmap_element *a_prev = NULL;
-   bitmap_element **a_prev_pnext = &a->first;
-   bool changed = false;
- 
-   gcc_checking_assert (!a->tree_form && !b->tree_form);
-   gcc_assert (a->obstack == b->obstack);
-   if (a == b)
-     return false;
- 
-   while (b_elt)
-     {
-       /* If A lags behind B, just advance it.  */
-       if (!a_elt || a_elt->indx == b_elt->indx)
- 	{
- 	  changed = bitmap_elt_ior (a, a_elt, a_prev, a_elt, b_elt, changed);
- 	  b_elt = b_elt->next;
- 	}
-       else if (a_elt->indx > b_elt->indx)
- 	{
- 	  bitmap_element *b_elt_next = b_elt->next;
- 	  bitmap_list_unlink_element (b, b_elt, false);
- 	  bitmap_list_insert_element_after (a, a_prev, b_elt->indx, b_elt);
- 	  b_elt = b_elt_next;
- 	}
- 
-       a_prev = *a_prev_pnext;
-       a_prev_pnext = &a_prev->next;
-       a_elt = *a_prev_pnext;
-     }
- 
-   gcc_checking_assert (!a->current == !a->first);
-   if (a->current)
-     a->indx = a->current->indx;
- 
-   if (b->obstack)
-     BITMAP_FREE (*b_);
-   else
-     bitmap_clear (b);
-   return changed;
- }
- 
- /* DST = A ^ B  */
- 
- void
- bitmap_xor (bitmap dst, const_bitmap a, const_bitmap b)
- {
-   bitmap_element *dst_elt = dst->first;
-   const bitmap_element *a_elt = a->first;
-   const bitmap_element *b_elt = b->first;
-   bitmap_element *dst_prev = NULL;
- 
-   gcc_checking_assert (!dst->tree_form && !a->tree_form && !b->tree_form);
-   gcc_assert (dst != a && dst != b);
- 
-   if (a == b)
-     {
-       bitmap_clear (dst);
-       return;
-     }
- 
-   while (a_elt || b_elt)
-     {
-       if (a_elt && b_elt && a_elt->indx == b_elt->indx)
- 	{
- 	  /* Matching elts, generate A ^ B.  */
- 	  unsigned ix;
- 	  BITMAP_WORD ior = 0;
- 
- 	  if (!dst_elt)
- 	    dst_elt = bitmap_list_insert_element_after (dst, dst_prev,
- 							a_elt->indx);
- 	  else
- 	    dst_elt->indx = a_elt->indx;
- 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	    {
- 	      BITMAP_WORD r = a_elt->bits[ix] ^ b_elt->bits[ix];
- 
- 	      ior |= r;
- 	      dst_elt->bits[ix] = r;
- 	    }
- 	  a_elt = a_elt->next;
- 	  b_elt = b_elt->next;
- 	  if (ior)
- 	    {
- 	      dst_prev = dst_elt;
- 	      dst_elt = dst_elt->next;
- 	    }
- 	}
-       else
- 	{
- 	  /* Copy a single element.  */
- 	  const bitmap_element *src;
- 
- 	  if (!b_elt || (a_elt && a_elt->indx < b_elt->indx))
- 	    {
- 	      src = a_elt;
- 	      a_elt = a_elt->next;
- 	    }
- 	  else
- 	    {
- 	      src = b_elt;
- 	      b_elt = b_elt->next;
- 	    }
- 
- 	  if (!dst_elt)
- 	    dst_elt = bitmap_list_insert_element_after (dst, dst_prev,
- 							src->indx);
- 	  else
- 	    dst_elt->indx = src->indx;
- 	  memcpy (dst_elt->bits, src->bits, sizeof (dst_elt->bits));
- 	  dst_prev = dst_elt;
- 	  dst_elt = dst_elt->next;
- 	}
-     }
-   /* Ensure that dst->current is valid.  */
-   dst->current = dst->first;
-   bitmap_elt_clear_from (dst, dst_elt);
-   gcc_checking_assert (!dst->current == !dst->first);
-   if (dst->current)
-     dst->indx = dst->current->indx;
- }
- 
- /* A ^= B */
- 
- void
- bitmap_xor_into (bitmap a, const_bitmap b)
- {
-   bitmap_element *a_elt = a->first;
-   const bitmap_element *b_elt = b->first;
-   bitmap_element *a_prev = NULL;
- 
-   gcc_checking_assert (!a->tree_form && !b->tree_form);
- 
-   if (a == b)
-     {
-       bitmap_clear (a);
-       return;
-     }
- 
-   while (b_elt)
-     {
-       if (!a_elt || b_elt->indx < a_elt->indx)
- 	{
- 	  /* Copy b_elt.  */
- 	  bitmap_element *dst = bitmap_list_insert_element_after (a, a_prev,
- 								  b_elt->indx);
- 	  memcpy (dst->bits, b_elt->bits, sizeof (dst->bits));
- 	  a_prev = dst;
- 	  b_elt = b_elt->next;
- 	}
-       else if (a_elt->indx < b_elt->indx)
- 	{
- 	  a_prev = a_elt;
- 	  a_elt = a_elt->next;
- 	}
-       else
- 	{
- 	  /* Matching elts, generate A ^= B.  */
- 	  unsigned ix;
- 	  BITMAP_WORD ior = 0;
- 	  bitmap_element *next = a_elt->next;
- 
- 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	    {
- 	      BITMAP_WORD r = a_elt->bits[ix] ^ b_elt->bits[ix];
- 
- 	      ior |= r;
- 	      a_elt->bits[ix] = r;
- 	    }
- 	  b_elt = b_elt->next;
- 	  if (ior)
- 	    a_prev = a_elt;
- 	  else
- 	    bitmap_list_unlink_element (a, a_elt);
- 	  a_elt = next;
- 	}
-     }
-   gcc_checking_assert (!a->current == !a->first);
-   if (a->current)
-     a->indx = a->current->indx;
- }
- 
- /* Return true if two bitmaps are identical.
-    We do not bother with a check for pointer equality, as that never
-    occurs in practice.  */
- 
- bool
- bitmap_equal_p (const_bitmap a, const_bitmap b)
- {
-   const bitmap_element *a_elt;
-   const bitmap_element *b_elt;
-   unsigned ix;
- 
-   gcc_checking_assert (!a->tree_form && !b->tree_form);
- 
-   for (a_elt = a->first, b_elt = b->first;
-        a_elt && b_elt;
-        a_elt = a_elt->next, b_elt = b_elt->next)
-     {
-       if (a_elt->indx != b_elt->indx)
- 	return false;
-       for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	if (a_elt->bits[ix] != b_elt->bits[ix])
- 	  return false;
-     }
-   return !a_elt && !b_elt;
- }
- 
- /* Return true if A AND B is not empty.  */
- 
- bool
- bitmap_intersect_p (const_bitmap a, const_bitmap b)
- {
-   const bitmap_element *a_elt;
-   const bitmap_element *b_elt;
-   unsigned ix;
- 
-   gcc_checking_assert (!a->tree_form && !b->tree_form);
- 
-   for (a_elt = a->first, b_elt = b->first;
-        a_elt && b_elt;)
-     {
-       if (a_elt->indx < b_elt->indx)
- 	a_elt = a_elt->next;
-       else if (b_elt->indx < a_elt->indx)
- 	b_elt = b_elt->next;
-       else
- 	{
- 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	    if (a_elt->bits[ix] & b_elt->bits[ix])
- 	      return true;
- 	  a_elt = a_elt->next;
- 	  b_elt = b_elt->next;
- 	}
-     }
-   return false;
- }
- 
- /* Return true if A AND NOT B is not empty.  */
- 
- bool
- bitmap_intersect_compl_p (const_bitmap a, const_bitmap b)
- {
-   const bitmap_element *a_elt;
-   const bitmap_element *b_elt;
-   unsigned ix;
- 
-   gcc_checking_assert (!a->tree_form && !b->tree_form);
- 
-   for (a_elt = a->first, b_elt = b->first;
-        a_elt && b_elt;)
-     {
-       if (a_elt->indx < b_elt->indx)
- 	return true;
-       else if (b_elt->indx < a_elt->indx)
- 	b_elt = b_elt->next;
-       else
- 	{
- 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	    if (a_elt->bits[ix] & ~b_elt->bits[ix])
- 	      return true;
- 	  a_elt = a_elt->next;
- 	  b_elt = b_elt->next;
- 	}
-     }
-   return a_elt != NULL;
- }
- 
- 
- /* DST = A | (FROM1 & ~FROM2).  Return true if DST changes.  */
- 
- bool
- bitmap_ior_and_compl (bitmap dst, const_bitmap a, const_bitmap b, const_bitmap kill)
- {
-   bool changed = false;
- 
-   bitmap_element *dst_elt = dst->first;
-   const bitmap_element *a_elt = a->first;
-   const bitmap_element *b_elt = b->first;
-   const bitmap_element *kill_elt = kill->first;
-   bitmap_element *dst_prev = NULL;
-   bitmap_element **dst_prev_pnext = &dst->first;
- 
-   gcc_checking_assert (!dst->tree_form && !a->tree_form && !b->tree_form
- 		       && !kill->tree_form);
-   gcc_assert (dst != a && dst != b && dst != kill);
- 
-   /* Special cases.  We don't bother checking for bitmap_equal_p (b, kill).  */
-   if (b == kill || bitmap_empty_p (b))
-     {
-       changed = !bitmap_equal_p (dst, a);
-       if (changed)
- 	bitmap_copy (dst, a);
-       return changed;
-     }
-   if (bitmap_empty_p (kill))
-     return bitmap_ior (dst, a, b);
-   if (bitmap_empty_p (a))
-     return bitmap_and_compl (dst, b, kill);
- 
-   while (a_elt || b_elt)
-     {
-       bool new_element = false;
- 
-       if (b_elt)
- 	while (kill_elt && kill_elt->indx < b_elt->indx)
- 	  kill_elt = kill_elt->next;
- 
-       if (b_elt && kill_elt && kill_elt->indx == b_elt->indx
- 	  && (!a_elt || a_elt->indx >= b_elt->indx))
-         {
- 	  bitmap_element tmp_elt;
- 	  unsigned ix;
- 
- 	  BITMAP_WORD ior = 0;
- 	  tmp_elt.indx = b_elt->indx;
- 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
-             {
-               BITMAP_WORD r = b_elt->bits[ix] & ~kill_elt->bits[ix];
-               ior |= r;
-               tmp_elt.bits[ix] = r;
-             }
- 
- 	  if (ior)
- 	    {
- 	      changed = bitmap_elt_ior (dst, dst_elt, dst_prev,
- 				        a_elt, &tmp_elt, changed);
- 	      new_element = true;
- 	      if (a_elt && a_elt->indx == b_elt->indx)
-                 a_elt = a_elt->next;
- 	    }
- 
- 	  b_elt = b_elt->next;
- 	  kill_elt = kill_elt->next;
- 	}
-       else
- 	{
- 	  changed = bitmap_elt_ior (dst, dst_elt, dst_prev,
- 				    a_elt, b_elt, changed);
- 	  new_element = true;
- 
-           if (a_elt && b_elt && a_elt->indx == b_elt->indx)
- 	    {
- 	      a_elt = a_elt->next;
- 	      b_elt = b_elt->next;
- 	    }
-           else
- 	    {
- 	      if (a_elt && (!b_elt || a_elt->indx <= b_elt->indx))
-                 a_elt = a_elt->next;
-               else if (b_elt && (!a_elt || b_elt->indx <= a_elt->indx))
-                 b_elt = b_elt->next;
- 	    }
- 	}
- 
-       if (new_element)
- 	{
- 	  dst_prev = *dst_prev_pnext;
- 	  dst_prev_pnext = &dst_prev->next;
- 	  dst_elt = *dst_prev_pnext;
- 	}
-     }
- 
-   if (dst_elt)
-     {
-       changed = true;
-       /* Ensure that dst->current is valid.  */
-       dst->current = dst->first;
-       bitmap_elt_clear_from (dst, dst_elt);
-     }
-   gcc_checking_assert (!dst->current == !dst->first);
-   if (dst->current)
-     dst->indx = dst->current->indx;
- 
-   return changed;
- }
- 
- /* A |= (B & ~C).  Return true if A changes.  */
- 
- bool
- bitmap_ior_and_compl_into (bitmap a, const_bitmap b, const_bitmap c)
- {
-   bitmap_element *a_elt = a->first;
-   const bitmap_element *b_elt = b->first;
-   const bitmap_element *c_elt = c->first;
-   bitmap_element and_elt;
-   bitmap_element *a_prev = NULL;
-   bitmap_element **a_prev_pnext = &a->first;
-   bool changed = false;
-   unsigned ix;
- 
-   gcc_checking_assert (!a->tree_form && !b->tree_form && !c->tree_form);
- 
-   if (a == b)
-     return false;
-   if (bitmap_empty_p (c))
-     return bitmap_ior_into (a, b);
-   else if (bitmap_empty_p (a))
-     return bitmap_and_compl (a, b, c);
- 
-   and_elt.indx = -1;
-   while (b_elt)
-     {
-       /* Advance C.  */
-       while (c_elt && c_elt->indx < b_elt->indx)
- 	c_elt = c_elt->next;
- 
-       const bitmap_element *and_elt_ptr;
-       if (c_elt && c_elt->indx == b_elt->indx)
- 	{
- 	  BITMAP_WORD overall = 0;
- 	  and_elt_ptr = &and_elt;
- 	  and_elt.indx = b_elt->indx;
- 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	    {
- 	      and_elt.bits[ix] = b_elt->bits[ix] & ~c_elt->bits[ix];
- 	      overall |= and_elt.bits[ix];
- 	    }
- 	  if (!overall)
- 	    {
- 	      b_elt = b_elt->next;
- 	      continue;
- 	    }
- 	}
-       else
- 	and_elt_ptr = b_elt;
- 
-       b_elt = b_elt->next;
- 
-       /* Now find a place to insert AND_ELT.  */
-       do
- 	{
- 	  ix = a_elt ? a_elt->indx : and_elt_ptr->indx;
-           if (ix == and_elt_ptr->indx)
- 	    changed = bitmap_elt_ior (a, a_elt, a_prev, a_elt,
- 				      and_elt_ptr, changed);
-           else if (ix > and_elt_ptr->indx)
- 	    changed = bitmap_elt_copy (a, NULL, a_prev, and_elt_ptr, changed);
- 
-           a_prev = *a_prev_pnext;
-           a_prev_pnext = &a_prev->next;
-           a_elt = *a_prev_pnext;
- 
-           /* If A lagged behind B/C, we advanced it so loop once more.  */
- 	}
-       while (ix < and_elt_ptr->indx);
-     }
- 
-   gcc_checking_assert (!a->current == !a->first);
-   if (a->current)
-     a->indx = a->current->indx;
-   return changed;
- }
- 
- /* A |= (B & C).  Return true if A changes.  */
- 
- bool
- bitmap_ior_and_into (bitmap a, const_bitmap b, const_bitmap c)
- {
-   bitmap_element *a_elt = a->first;
-   const bitmap_element *b_elt = b->first;
-   const bitmap_element *c_elt = c->first;
-   bitmap_element and_elt;
-   bitmap_element *a_prev = NULL;
-   bitmap_element **a_prev_pnext = &a->first;
-   bool changed = false;
-   unsigned ix;
- 
-   gcc_checking_assert (!a->tree_form && !b->tree_form && !c->tree_form);
- 
-   if (b == c)
-     return bitmap_ior_into (a, b);
-   if (bitmap_empty_p (b) || bitmap_empty_p (c))
-     return false;
- 
-   and_elt.indx = -1;
-   while (b_elt && c_elt)
-     {
-       BITMAP_WORD overall;
- 
-       /* Find a common item of B and C.  */
-       while (b_elt->indx != c_elt->indx)
- 	{
-           if (b_elt->indx < c_elt->indx)
- 	    {
- 	      b_elt = b_elt->next;
- 	      if (!b_elt)
- 		goto done;
- 	    }
-           else
- 	    {
- 	      c_elt = c_elt->next;
- 	      if (!c_elt)
- 		goto done;
- 	    }
- 	}
- 
-       overall = 0;
-       and_elt.indx = b_elt->indx;
-       for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
- 	{
- 	  and_elt.bits[ix] = b_elt->bits[ix] & c_elt->bits[ix];
- 	  overall |= and_elt.bits[ix];
- 	}
- 
-       b_elt = b_elt->next;
-       c_elt = c_elt->next;
-       if (!overall)
- 	continue;
- 
-       /* Now find a place to insert AND_ELT.  */
-       do
- 	{
- 	  ix = a_elt ? a_elt->indx : and_elt.indx;
-           if (ix == and_elt.indx)
- 	    changed = bitmap_elt_ior (a, a_elt, a_prev, a_elt, &and_elt, changed);
-           else if (ix > and_elt.indx)
- 	    changed = bitmap_elt_copy (a, NULL, a_prev, &and_elt, changed);
- 
-           a_prev = *a_prev_pnext;
-           a_prev_pnext = &a_prev->next;
-           a_elt = *a_prev_pnext;
- 
-           /* If A lagged behind B/C, we advanced it so loop once more.  */
- 	}
-       while (ix < and_elt.indx);
-     }
- 
-  done:
-   gcc_checking_assert (!a->current == !a->first);
-   if (a->current)
-     a->indx = a->current->indx;
-   return changed;
- }
- 
- /* Compute hash of bitmap (for purposes of hashing).  */
- 
- hashval_t
- bitmap_hash (const_bitmap head)
- {
-   const bitmap_element *ptr;
-   BITMAP_WORD hash = 0;
-   int ix;
- 
-   gcc_checking_assert (!head->tree_form);
- 
-   for (ptr = head->first; ptr; ptr = ptr->next)
-     {
-       hash ^= ptr->indx;
-       for (ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
- 	hash ^= ptr->bits[ix];
-     }
-   return (hashval_t)hash;
- }
- 
- 
- /* Function to obtain a vector of bitmap elements in bit order from
-    HEAD in tree view.  */
- 
- static void
- bitmap_tree_to_vec (vec<bitmap_element *> &elts, const_bitmap head)
- {
-   gcc_checking_assert (head->tree_form);
-   auto_vec<bitmap_element *, 32> stack;
-   bitmap_element *e = head->first;
-   while (true)
-     {
-       while (e != NULL)
- 	{
- 	  stack.safe_push (e);
- 	  e = e->prev;
- 	}
-       if (stack.is_empty ())
- 	break;
- 
-       e = stack.pop ();
-       elts.safe_push (e);
-       e = e->next;
-     }
- }
- 
- /* Debugging function to print out the contents of a bitmap element.  */
- 
- DEBUG_FUNCTION void
- debug_bitmap_elt_file (FILE *file, const bitmap_element *ptr)
- {
-   unsigned int i, j, col = 26;
- 
-   fprintf (file, "\t" HOST_PTR_PRINTF " next = " HOST_PTR_PRINTF
- 	   " prev = " HOST_PTR_PRINTF " indx = %u\n\t\tbits = {",
- 	   (const void*) ptr, (const void*) ptr->next,
- 	   (const void*) ptr->prev, ptr->indx);
- 
-   for (i = 0; i < BITMAP_ELEMENT_WORDS; i++)
-     for (j = 0; j < BITMAP_WORD_BITS; j++)
-       if ((ptr->bits[i] >> j) & 1)
- 	{
- 	  if (col > 70)
- 	    {
- 	      fprintf (file, "\n\t\t\t");
- 	      col = 24;
- 	    }
- 
- 	  fprintf (file, " %u", (ptr->indx * BITMAP_ELEMENT_ALL_BITS
- 				 + i * BITMAP_WORD_BITS + j));
- 	  col += 4;
- 	}
- 
-   fprintf (file, " }\n");
- }
- 
- /* Debugging function to print out the contents of a bitmap.  */
- 
- DEBUG_FUNCTION void
- debug_bitmap_file (FILE *file, const_bitmap head)
- {
-   const bitmap_element *ptr;
- 
-   fprintf (file, "\nfirst = " HOST_PTR_PRINTF
- 	   " current = " HOST_PTR_PRINTF " indx = %u\n",
- 	   (void *) head->first, (void *) head->current, head->indx);
- 
-   if (head->tree_form)
-     {
-       auto_vec<bitmap_element *, 32> elts;
-       bitmap_tree_to_vec (elts, head);
-       for (unsigned i = 0; i < elts.length (); ++i)
- 	debug_bitmap_elt_file (file, elts[i]);
-     }
-   else
-     for (ptr = head->first; ptr; ptr = ptr->next)
-       debug_bitmap_elt_file (file, ptr);
- }
- 
- /* Function to be called from the debugger to print the contents
-    of a bitmap.  */
- 
- DEBUG_FUNCTION void
- debug_bitmap (const_bitmap head)
- {
-   debug_bitmap_file (stderr, head);
- }
- 
- /* Function to print out the contents of a bitmap.  Unlike debug_bitmap_file,
-    it does not print anything but the bits.  */
- 
- DEBUG_FUNCTION void
- bitmap_print (FILE *file, const_bitmap head, const char *prefix,
- 	      const char *suffix)
- {
-   const char *comma = "";
-   unsigned i;
- 
-   fputs (prefix, file);
-   if (head->tree_form)
-     {
-       auto_vec<bitmap_element *, 32> elts;
-       bitmap_tree_to_vec (elts, head);
-       for (i = 0; i < elts.length (); ++i)
- 	for (unsigned ix = 0; ix != BITMAP_ELEMENT_WORDS; ++ix)
- 	  {
- 	    BITMAP_WORD word = elts[i]->bits[ix];
- 	    for (unsigned bit = 0; bit != BITMAP_WORD_BITS; ++bit)
- 	      if (word & ((BITMAP_WORD)1 << bit))
- 		{
- 		  fprintf (file, "%s%d", comma,
- 			   (bit + BITMAP_WORD_BITS * ix
- 			    + elts[i]->indx * BITMAP_ELEMENT_ALL_BITS));
- 		  comma = ", ";
- 		}
- 	  }
-     }
-   else
-     {
-       bitmap_iterator bi;
-       EXECUTE_IF_SET_IN_BITMAP (head, 0, i, bi)
- 	{
- 	  fprintf (file, "%s%d", comma, i);
- 	  comma = ", ";
- 	}
-     }
-   fputs (suffix, file);
- }
- 
- /* Output per-bitmap memory usage statistics.  */
- void
- dump_bitmap_statistics (void)
- {
-   if (!GATHER_STATISTICS)
-     return;
- 
-   bitmap_mem_desc.dump (BITMAP_ORIGIN);
- }
- 
- DEBUG_FUNCTION void
- debug (const bitmap_head &ref)
- {
-   dump_bitmap (stderr, &ref);
- }
- 
- DEBUG_FUNCTION void
- debug (const bitmap_head *ptr)
- {
-   if (ptr)
-     debug (*ptr);
-   else
-     fprintf (stderr, "<nil>\n");
- }
- 
- void
- bitmap_head::dump ()
- {
-   debug (this);
- }
- 
- #if CHECKING_P
- 
- namespace selftest {
- 
- /* Selftests for bitmaps.  */
- 
- /* Freshly-created bitmaps ought to be empty.  */
- 
- static void
- test_gc_alloc ()
- {
-   bitmap b = bitmap_gc_alloc ();
-   ASSERT_TRUE (bitmap_empty_p (b));
- }
- 
- /* Verify bitmap_set_range.  */
- 
- static void
- test_set_range ()
- {
-   bitmap b = bitmap_gc_alloc ();
-   ASSERT_TRUE (bitmap_empty_p (b));
- 
-   bitmap_set_range (b, 7, 5);
-   ASSERT_FALSE (bitmap_empty_p (b));
-   ASSERT_EQ (5, bitmap_count_bits (b));
- 
-   /* Verify bitmap_bit_p at the boundaries.  */
-   ASSERT_FALSE (bitmap_bit_p (b, 6));
-   ASSERT_TRUE (bitmap_bit_p (b, 7));
-   ASSERT_TRUE (bitmap_bit_p (b, 11));
-   ASSERT_FALSE (bitmap_bit_p (b, 12));
- }
- 
- /* Verify splitting a range into two pieces using bitmap_clear_bit.  */
- 
- static void
- test_clear_bit_in_middle ()
- {
-   bitmap b = bitmap_gc_alloc ();
- 
-   /* Set b to [100..200].  */
-   bitmap_set_range (b, 100, 100);
-   ASSERT_EQ (100, bitmap_count_bits (b));
- 
-   /* Clear a bit in the middle.  */
-   bool changed = bitmap_clear_bit (b, 150);
-   ASSERT_TRUE (changed);
-   ASSERT_EQ (99, bitmap_count_bits (b));
-   ASSERT_TRUE (bitmap_bit_p (b, 149));
-   ASSERT_FALSE (bitmap_bit_p (b, 150));
-   ASSERT_TRUE (bitmap_bit_p (b, 151));
- }
- 
- /* Verify bitmap_copy.  */
- 
- static void
- test_copying ()
- {
-   bitmap src = bitmap_gc_alloc ();
-   bitmap_set_range (src, 40, 10);
- 
-   bitmap dst = bitmap_gc_alloc ();
-   ASSERT_FALSE (bitmap_equal_p (src, dst));
-   bitmap_copy (dst, src);
-   ASSERT_TRUE (bitmap_equal_p (src, dst));
- 
-   /* Verify that we can make them unequal again...  */
-   bitmap_set_range (src, 70, 5);
-   ASSERT_FALSE (bitmap_equal_p (src, dst));
- 
-   /* ...and that changing src after the copy didn't affect
-      the other: */
-   ASSERT_FALSE (bitmap_bit_p (dst, 70));
- }
- 
- /* Verify bitmap_single_bit_set_p.  */
- 
- static void
- test_bitmap_single_bit_set_p ()
- {
-   bitmap b = bitmap_gc_alloc ();
- 
-   ASSERT_FALSE (bitmap_single_bit_set_p (b));
- 
-   bitmap_set_range (b, 42, 1);
-   ASSERT_TRUE (bitmap_single_bit_set_p (b));
-   ASSERT_EQ (42, bitmap_first_set_bit (b));
- 
-   bitmap_set_range (b, 1066, 1);
-   ASSERT_FALSE (bitmap_single_bit_set_p (b));
-   ASSERT_EQ (42, bitmap_first_set_bit (b));
- 
-   bitmap_clear_range (b, 0, 100);
-   ASSERT_TRUE (bitmap_single_bit_set_p (b));
-   ASSERT_EQ (1066, bitmap_first_set_bit (b));
- }
- 
- /* Verify accessing aligned bit chunks works as expected.  */
- 
- static void
- test_aligned_chunk (unsigned num_bits)
- {
-   bitmap b = bitmap_gc_alloc ();
-   int limit = 2 ^ num_bits;
- 
-   int index = 3;
-   for (int x = 0; x < limit; x++)
-     {
-       bitmap_set_aligned_chunk (b, index, num_bits, (BITMAP_WORD) x);
-       ASSERT_TRUE ((int) bitmap_get_aligned_chunk (b, index, num_bits) == x);
-       ASSERT_TRUE ((int) bitmap_get_aligned_chunk (b, index + 1,
- 						   num_bits) == 0);
-       ASSERT_TRUE ((int) bitmap_get_aligned_chunk (b, index - 1,
- 						   num_bits) == 0);
-       index += 3;
-     }
-   index = 3;
-   for (int x = 0; x < limit ; x++)
-     {
-       ASSERT_TRUE ((int) bitmap_get_aligned_chunk (b, index, num_bits) == x);
-       index += 3;
-     }
- }
- 
- /* Run all of the selftests within this file.  */
- 
- void
- bitmap_c_tests ()
- {
-   test_gc_alloc ();
-   test_set_range ();
-   test_clear_bit_in_middle ();
-   test_copying ();
-   test_bitmap_single_bit_set_p ();
-   /* Test 2, 4 and 8 bit aligned chunks.  */
-   test_aligned_chunk (2);
-   test_aligned_chunk (4);
-   test_aligned_chunk (8);
- }
- 
- } // namespace selftest
- #endif /* CHECKING_P */
- 
- #include "gt-bitmap.h"
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/bitmap.cc gcc-12.1.0/gcc/bitmap.cc
*** gcc-11.3.0/gcc/bitmap.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/bitmap.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,2995 ----
+ /* Functions to support general ended bitmaps.
+    Copyright (C) 1997-2022 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "bitmap.h"
+ #include "selftest.h"
+ 
+ /* Memory allocation statistics purpose instance.  */
+ mem_alloc_description<bitmap_usage> bitmap_mem_desc;
+ 
+ /* Static zero-initialized bitmap obstack used for default initialization
+    of bitmap_head.  */
+ bitmap_obstack bitmap_head::crashme;
+ 
+ static bitmap_element *bitmap_tree_listify_from (bitmap, bitmap_element *);
+ 
+ /* Register new bitmap.  */
+ void
+ bitmap_register (bitmap b MEM_STAT_DECL)
+ {
+   static unsigned alloc_descriptor_max_uid = 1;
+   gcc_assert (b->alloc_descriptor == 0);
+   b->alloc_descriptor = alloc_descriptor_max_uid++;
+ 
+   bitmap_mem_desc.register_descriptor (b->get_descriptor (), BITMAP_ORIGIN,
+ 				       false FINAL_PASS_MEM_STAT);
+ }
+ 
+ /* Account the overhead.  */
+ static void
+ register_overhead (bitmap b, size_t amount)
+ {
+   unsigned *d = b->get_descriptor ();
+   if (bitmap_mem_desc.contains_descriptor_for_instance (d))
+     bitmap_mem_desc.register_instance_overhead (amount, d);
+ }
+ 
+ /* Release the overhead.  */
+ static void
+ release_overhead (bitmap b, size_t amount, bool remove_from_map)
+ {
+   unsigned *d = b->get_descriptor ();
+   if (bitmap_mem_desc.contains_descriptor_for_instance (d))
+     bitmap_mem_desc.release_instance_overhead (d, amount, remove_from_map);
+ }
+ 
+ 
+ /* Global data */
+ bitmap_element bitmap_zero_bits;  /* An element of all zero bits.  */
+ bitmap_obstack bitmap_default_obstack;    /* The default bitmap obstack.  */
+ static int bitmap_default_obstack_depth;
+ static GTY((deletable)) bitmap_element *bitmap_ggc_free; /* Freelist of
+ 							    GC'd elements.  */
+ 
+ 
+ /* Bitmap memory management.  */
+ 
+ /* Add ELT to the appropriate freelist.  */
+ static inline void
+ bitmap_elem_to_freelist (bitmap head, bitmap_element *elt)
+ {
+   bitmap_obstack *bit_obstack = head->obstack;
+ 
+   if (GATHER_STATISTICS)
+     release_overhead (head, sizeof (bitmap_element), false);
+ 
+   elt->next = NULL;
+   elt->indx = -1;
+   if (bit_obstack)
+     {
+       elt->prev = bit_obstack->elements;
+       bit_obstack->elements = elt;
+     }
+   else
+     {
+       elt->prev = bitmap_ggc_free;
+       bitmap_ggc_free = elt;
+     }
+ }
+ 
+ /* Allocate a bitmap element.  The bits are cleared, but nothing else is.  */
+ 
+ static inline bitmap_element *
+ bitmap_element_allocate (bitmap head)
+ {
+   bitmap_element *element;
+   bitmap_obstack *bit_obstack = head->obstack;
+ 
+   if (bit_obstack)
+     {
+       element = bit_obstack->elements;
+ 
+       if (element)
+ 	/* Use up the inner list first before looking at the next
+ 	   element of the outer list.  */
+ 	if (element->next)
+ 	  {
+ 	    bit_obstack->elements = element->next;
+ 	    bit_obstack->elements->prev = element->prev;
+ 	  }
+ 	else
+ 	  /*  Inner list was just a singleton.  */
+ 	  bit_obstack->elements = element->prev;
+       else
+ 	element = XOBNEW (&bit_obstack->obstack, bitmap_element);
+     }
+   else
+     {
+       element = bitmap_ggc_free;
+       if (element)
+ 	/* Use up the inner list first before looking at the next
+ 	   element of the outer list.  */
+ 	if (element->next)
+ 	  {
+ 	    bitmap_ggc_free = element->next;
+ 	    bitmap_ggc_free->prev = element->prev;
+ 	  }
+ 	else
+ 	  /*  Inner list was just a singleton.  */
+ 	  bitmap_ggc_free = element->prev;
+       else
+ 	element = ggc_alloc<bitmap_element> ();
+     }
+ 
+   if (GATHER_STATISTICS)
+     register_overhead (head, sizeof (bitmap_element));
+ 
+   memset (element->bits, 0, sizeof (element->bits));
+ 
+   return element;
+ }
+ 
+ /* Remove ELT and all following elements from bitmap HEAD.
+    Put the released elements in the freelist for HEAD.  */
+ 
+ void
+ bitmap_elt_clear_from (bitmap head, bitmap_element *elt)
+ {
+   bitmap_element *prev;
+   bitmap_obstack *bit_obstack = head->obstack;
+ 
+   if (!elt)
+     return;
+ 
+   if (head->tree_form)
+     elt = bitmap_tree_listify_from (head, elt);
+ 
+   if (GATHER_STATISTICS)
+     {
+       int n = 0;
+       for (prev = elt; prev; prev = prev->next)
+ 	n++;
+       release_overhead (head, sizeof (bitmap_element) * n, false);
+     }
+ 
+   prev = elt->prev;
+   if (prev)
+     {
+       prev->next = NULL;
+       if (head->current->indx > prev->indx)
+ 	{
+ 	  head->current = prev;
+ 	  head->indx = prev->indx;
+ 	}
+     }
+   else
+     {
+       head->first = NULL;
+       head->current = NULL;
+       head->indx = 0;
+     }
+ 
+   /* Put the entire list onto the freelist in one operation. */
+   if (bit_obstack)
+     {
+       elt->prev = bit_obstack->elements;
+       bit_obstack->elements = elt;
+     }
+   else
+     {
+       elt->prev = bitmap_ggc_free;
+       bitmap_ggc_free = elt;
+     }
+ }
+ 
+ /* Linked-list view of bitmaps.
+ 
+    In this representation, the bitmap elements form a double-linked list
+    with elements sorted by increasing index.  */
+ 
+ /* Link the bitmap element into the current bitmap linked list.  */
+ 
+ static inline void
+ bitmap_list_link_element (bitmap head, bitmap_element *element)
+ {
+   unsigned int indx = element->indx;
+   bitmap_element *ptr;
+ 
+   gcc_checking_assert (!head->tree_form);
+ 
+   /* If this is the first and only element, set it in.  */
+   if (head->first == 0)
+     {
+       element->next = element->prev = 0;
+       head->first = element;
+     }
+ 
+   /* If this index is less than that of the current element, it goes someplace
+      before the current element.  */
+   else if (indx < head->indx)
+     {
+       for (ptr = head->current;
+ 	   ptr->prev != 0 && ptr->prev->indx > indx;
+ 	   ptr = ptr->prev)
+ 	;
+ 
+       if (ptr->prev)
+ 	ptr->prev->next = element;
+       else
+ 	head->first = element;
+ 
+       element->prev = ptr->prev;
+       element->next = ptr;
+       ptr->prev = element;
+     }
+ 
+   /* Otherwise, it must go someplace after the current element.  */
+   else
+     {
+       for (ptr = head->current;
+ 	   ptr->next != 0 && ptr->next->indx < indx;
+ 	   ptr = ptr->next)
+ 	;
+ 
+       if (ptr->next)
+ 	ptr->next->prev = element;
+ 
+       element->next = ptr->next;
+       element->prev = ptr;
+       ptr->next = element;
+     }
+ 
+   /* Set up so this is the first element searched.  */
+   head->current = element;
+   head->indx = indx;
+ }
+ 
+ /* Unlink the bitmap element from the current bitmap linked list,
+    and return it to the freelist.  */
+ 
+ static inline void
+ bitmap_list_unlink_element (bitmap head, bitmap_element *element,
+ 			    bool to_freelist = true)
+ {
+   bitmap_element *next = element->next;
+   bitmap_element *prev = element->prev;
+ 
+   gcc_checking_assert (!head->tree_form);
+ 
+   if (prev)
+     prev->next = next;
+ 
+   if (next)
+     next->prev = prev;
+ 
+   if (head->first == element)
+     head->first = next;
+ 
+   /* Since the first thing we try is to insert before current,
+      make current the next entry in preference to the previous.  */
+   if (head->current == element)
+     {
+       head->current = next != 0 ? next : prev;
+       if (head->current)
+ 	head->indx = head->current->indx;
+       else
+ 	head->indx = 0;
+     }
+ 
+   if (to_freelist)
+     bitmap_elem_to_freelist (head, element);
+ }
+ 
+ /* Insert a new uninitialized element (or NODE if not NULL) into bitmap
+    HEAD after element ELT.  If ELT is NULL, insert the element at the start.
+    Return the new element.  */
+ 
+ static bitmap_element *
+ bitmap_list_insert_element_after (bitmap head,
+ 				  bitmap_element *elt, unsigned int indx,
+ 				  bitmap_element *node = NULL)
+ {
+   if (!node)
+     node = bitmap_element_allocate (head);
+   node->indx = indx;
+ 
+   gcc_checking_assert (!head->tree_form);
+ 
+   if (!elt)
+     {
+       if (!head->current)
+ 	{
+ 	  head->current = node;
+ 	  head->indx = indx;
+ 	}
+       node->next = head->first;
+       if (node->next)
+ 	node->next->prev = node;
+       head->first = node;
+       node->prev = NULL;
+     }
+   else
+     {
+       gcc_checking_assert (head->current);
+       node->next = elt->next;
+       if (node->next)
+ 	node->next->prev = node;
+       elt->next = node;
+       node->prev = elt;
+     }
+   return node;
+ }
+ 
+ /* Return the element for INDX, or NULL if the element doesn't exist.
+    Update the `current' field even if we can't find an element that  
+    would hold the bitmap's bit to make eventual allocation
+    faster.  */
+ 
+ static inline bitmap_element *
+ bitmap_list_find_element (bitmap head, unsigned int indx)
+ {
+   bitmap_element *element;
+ 
+   if (head->current == NULL
+       || head->indx == indx)
+     return head->current;
+ 
+   if (head->current == head->first
+       && head->first->next == NULL)
+     return NULL;
+ 
+   /* Usage can be NULL due to allocated bitmaps for which we do not
+      call initialize function.  */
+   bitmap_usage *usage = NULL;
+   if (GATHER_STATISTICS)
+     usage = bitmap_mem_desc.get_descriptor_for_instance (head);
+ 
+   /* This bitmap has more than one element, and we're going to look
+      through the elements list.  Count that as a search.  */
+   if (GATHER_STATISTICS && usage)
+     usage->m_nsearches++;
+ 
+   if (head->indx < indx)
+     /* INDX is beyond head->indx.  Search from head->current
+        forward.  */
+     for (element = head->current;
+ 	 element->next != 0 && element->indx < indx;
+ 	 element = element->next)
+       {
+ 	if (GATHER_STATISTICS && usage)
+ 	  usage->m_search_iter++;
+       }
+ 
+   else if (head->indx / 2 < indx)
+     /* INDX is less than head->indx and closer to head->indx than to
+        0.  Search from head->current backward.  */
+     for (element = head->current;
+ 	 element->prev != 0 && element->indx > indx;
+ 	 element = element->prev)
+       {
+ 	if (GATHER_STATISTICS && usage)
+ 	  usage->m_search_iter++;
+       }
+ 
+   else
+     /* INDX is less than head->indx and closer to 0 than to
+        head->indx.  Search from head->first forward.  */
+     for (element = head->first;
+ 	 element->next != 0 && element->indx < indx;
+ 	 element = element->next)
+       {
+ 	if (GATHER_STATISTICS && usage)
+ 	  usage->m_search_iter++;
+       }
+ 
+   /* `element' is the nearest to the one we want.  If it's not the one we
+      want, the one we want doesn't exist.  */
+   gcc_checking_assert (element != NULL);
+   head->current = element;
+   head->indx = element->indx;
+   if (element->indx != indx)
+     element = 0;
+   return element;
+ }
+ 
+ 
+ /* Splay-tree view of bitmaps.
+ 
+    This is an almost one-to-one the implementatin of the simple top-down
+    splay tree in Sleator and Tarjan's "Self-adjusting Binary Search Trees".
+    It is probably not the most efficient form of splay trees, but it should
+    be good enough to experiment with this idea of bitmaps-as-trees.
+    
+    For all functions below, the variable or function argument "t" is a node
+    in the tree, and "e" is a temporary or new node in the tree.  The rest
+    is sufficiently straigh-forward (and very well explained in the paper)
+    that comment would only clutter things.  */
+ 
+ static inline void
+ bitmap_tree_link_left (bitmap_element * &t, bitmap_element * &l)
+ {
+   l->next = t;
+   l = t;
+   t = t->next;
+ }
+ 
+ static inline void
+ bitmap_tree_link_right (bitmap_element * &t, bitmap_element * &r)
+ {
+   r->prev = t;
+   r = t;
+   t = t->prev;
+ }
+ 
+ static inline void
+ bitmap_tree_rotate_left (bitmap_element * &t)
+ {
+   bitmap_element *e = t->next;
+   t->next = t->next->prev;
+   e->prev = t;
+   t = e;
+ }
+ 
+ static inline void
+ bitmap_tree_rotate_right (bitmap_element * &t)
+ {
+   bitmap_element *e = t->prev;
+   t->prev = t->prev->next;
+   e->next = t;
+   t = e;
+ }
+ 
+ static bitmap_element *
+ bitmap_tree_splay (bitmap head, bitmap_element *t, unsigned int indx)
+ {
+   bitmap_element N, *l, *r;
+ 
+   if (t == NULL)
+     return NULL;
+ 
+   bitmap_usage *usage = NULL;
+   if (GATHER_STATISTICS)
+     usage = bitmap_mem_desc.get_descriptor_for_instance (head);
+ 
+   N.prev = N.next = NULL;
+   l = r = &N;
+ 
+   while (indx != t->indx)
+     {
+       if (GATHER_STATISTICS && usage)
+ 	usage->m_search_iter++;
+ 
+       if (indx < t->indx)
+ 	{
+ 	  if (t->prev != NULL && indx < t->prev->indx)
+ 	    bitmap_tree_rotate_right (t);
+ 	  if (t->prev == NULL)
+ 	    break;
+ 	  bitmap_tree_link_right (t, r);
+ 	}
+       else if (indx > t->indx)
+ 	{
+ 	  if (t->next != NULL && indx > t->next->indx)
+ 	    bitmap_tree_rotate_left (t);
+ 	  if (t->next == NULL)
+ 	    break;
+ 	  bitmap_tree_link_left (t, l);
+ 	}
+     }
+ 
+   l->next = t->prev;
+   r->prev = t->next;
+   t->prev = N.next;
+   t->next = N.prev;
+   return t;
+ }
+ 
+ /* Link bitmap element E into the current bitmap splay tree.  */
+ 
+ static inline void
+ bitmap_tree_link_element (bitmap head, bitmap_element *e)
+ {
+   if (head->first == NULL)
+     e->prev = e->next = NULL;
+   else
+     {
+       bitmap_element *t = bitmap_tree_splay (head, head->first, e->indx);
+       if (e->indx < t->indx)
+ 	{
+ 	  e->prev = t->prev;
+ 	  e->next = t;
+ 	  t->prev = NULL;
+ 	}
+       else if (e->indx > t->indx)
+ 	{
+ 	  e->next = t->next;
+ 	  e->prev = t;
+ 	  t->next = NULL;
+ 	}
+       else
+ 	gcc_unreachable ();
+     }
+   head->first = e;
+   head->current = e;
+   head->indx = e->indx;
+ }
+ 
+ /* Unlink bitmap element E from the current bitmap splay tree,
+    and return it to the freelist.  */
+ 
+ static void
+ bitmap_tree_unlink_element (bitmap head, bitmap_element *e)
+ {
+   bitmap_element *t = bitmap_tree_splay (head, head->first, e->indx);
+ 
+   gcc_checking_assert (t == e);
+ 
+   if (e->prev == NULL)
+     t = e->next;
+   else
+     {
+       t = bitmap_tree_splay (head, e->prev, e->indx);
+       t->next = e->next;
+     }
+   head->first = t;
+   head->current = t;
+   head->indx = (t != NULL) ? t->indx : 0;
+ 
+   bitmap_elem_to_freelist (head, e);
+ }
+ 
+ /* Return the element for INDX, or NULL if the element doesn't exist.  */
+ 
+ static inline bitmap_element *
+ bitmap_tree_find_element (bitmap head, unsigned int indx)
+ {
+   if (head->current == NULL
+       || head->indx == indx)
+     return head->current;
+ 
+   /* Usage can be NULL due to allocated bitmaps for which we do not
+      call initialize function.  */
+   bitmap_usage *usage = NULL;
+   if (GATHER_STATISTICS)
+     usage = bitmap_mem_desc.get_descriptor_for_instance (head);
+ 
+   /* This bitmap has more than one element, and we're going to look
+      through the elements list.  Count that as a search.  */
+   if (GATHER_STATISTICS && usage)
+     usage->m_nsearches++;
+ 
+   bitmap_element *element = bitmap_tree_splay (head, head->first, indx);
+   gcc_checking_assert (element != NULL);
+   head->first = element;
+   head->current = element;
+   head->indx = element->indx;
+   if (element->indx != indx)
+     element = 0;
+   return element;
+ }
+ 
+ /* Converting bitmap views from linked-list to tree and vice versa.  */
+ 
+ /* Splice element E and all elements with a larger index from
+    bitmap HEAD, convert the spliced elements to the linked-list
+    view, and return the head of the list (which should be E again),  */
+ 
+ static bitmap_element *
+ bitmap_tree_listify_from (bitmap head, bitmap_element *e)
+ {
+   bitmap_element *t, *erb;
+ 
+   /* Detach the right branch from E (all elements with indx > E->indx),
+      and splay E to the root.  */
+   erb = e->next;
+   e->next = NULL;
+   t = bitmap_tree_splay (head, head->first, e->indx);
+   gcc_checking_assert (t == e);
+ 
+   /* Because E has no right branch, and we rotated it to the root,
+      the left branch is the new root.  */
+   t = e->prev;
+   head->first = t;
+   head->current = t;
+   head->indx = (t != NULL) ? t->indx : 0;
+ 
+   /* Detach the tree from E, and re-attach the right branch of E.  */
+   e->prev = NULL;
+   e->next = erb;
+ 
+   /* The tree is now valid again.  Now we need to "un-tree" E.
+      It is imperative that a non-recursive implementation is used
+      for this, because splay trees have a worst case depth of O(N)
+      for a tree with N nodes.  A recursive implementation could
+      result in a stack overflow for a sufficiently large, unbalanced
+      bitmap tree.  */
+ 
+   auto_vec<bitmap_element *, 32> stack;
+   auto_vec<bitmap_element *, 32> sorted_elements;
+   bitmap_element *n = e;
+ 
+   while (true)
+     {
+       while (n != NULL)
+ 	{
+ 	  stack.safe_push (n);
+ 	  n = n->prev;
+ 	}
+ 
+       if (stack.is_empty ())
+ 	break;
+ 
+       n = stack.pop ();
+       sorted_elements.safe_push (n);
+       n = n->next;
+     }
+ 
+   gcc_assert (sorted_elements[0] == e);
+ 
+   bitmap_element *prev = NULL;
+   unsigned ix;
+   FOR_EACH_VEC_ELT (sorted_elements, ix, n)
+     {
+       if (prev != NULL)
+         prev->next = n;
+       n->prev = prev;
+       n->next = NULL;
+       prev = n;
+     }
+ 
+   return e;
+ }
+ 
+ /* Convert bitmap HEAD from splay-tree view to linked-list view.  */
+ 
+ void
+ bitmap_list_view (bitmap head)
+ {
+   bitmap_element *ptr;
+ 
+   gcc_assert (head->tree_form);
+ 
+   ptr = head->first;
+   if (ptr)
+     {
+       while (ptr->prev)
+ 	bitmap_tree_rotate_right (ptr);
+       head->first = ptr;
+       head->first = bitmap_tree_listify_from (head, ptr);
+     }
+ 
+   head->tree_form = false;
+   if (!head->current)
+     {
+       head->current = head->first;
+       head->indx = head->current ? head->current->indx : 0;
+     }
+ }
+ 
+ /* Convert bitmap HEAD from linked-list view to splay-tree view.
+    This is simply a matter of dropping the prev or next pointers
+    and setting the tree_form flag.  The tree will balance itself
+    if and when it is used.  */
+ 
+ void
+ bitmap_tree_view (bitmap head)
+ {
+   bitmap_element *ptr;
+ 
+   gcc_assert (! head->tree_form);
+ 
+   ptr = head->first;
+   while (ptr)
+     {
+       ptr->prev = NULL;
+       ptr = ptr->next;
+     }
+ 
+   head->tree_form = true;
+ }
+ 
+ /* Clear a bitmap by freeing all its elements.  */
+ 
+ void
+ bitmap_clear (bitmap head)
+ {
+   if (head->first == NULL)
+     return;
+   if (head->tree_form)
+     {
+       bitmap_element *e, *t;
+       for (e = head->first; e->prev; e = e->prev)
+ 	/* Loop to find the element with the smallest index.  */ ;
+       t = bitmap_tree_splay (head, head->first, e->indx);
+       gcc_checking_assert (t == e);
+       head->first = t;
+     }
+   bitmap_elt_clear_from (head, head->first);
+ }
+ 
+ /* Initialize a bitmap obstack.  If BIT_OBSTACK is NULL, initialize
+    the default bitmap obstack.  */
+ 
+ void
+ bitmap_obstack_initialize (bitmap_obstack *bit_obstack)
+ {
+   if (!bit_obstack)
+     {
+       if (bitmap_default_obstack_depth++)
+ 	return;
+       bit_obstack = &bitmap_default_obstack;
+     }
+ 
+ #if !defined(__GNUC__) || (__GNUC__ < 2)
+ #define __alignof__(type) 0
+ #endif
+ 
+   bit_obstack->elements = NULL;
+   bit_obstack->heads = NULL;
+   obstack_specify_allocation (&bit_obstack->obstack, OBSTACK_CHUNK_SIZE,
+ 			      __alignof__ (bitmap_element),
+ 			      obstack_chunk_alloc,
+ 			      obstack_chunk_free);
+ }
+ 
+ /* Release the memory from a bitmap obstack.  If BIT_OBSTACK is NULL,
+    release the default bitmap obstack.  */
+ 
+ void
+ bitmap_obstack_release (bitmap_obstack *bit_obstack)
+ {
+   if (!bit_obstack)
+     {
+       if (--bitmap_default_obstack_depth)
+ 	{
+ 	  gcc_assert (bitmap_default_obstack_depth > 0);
+ 	  return;
+ 	}
+       bit_obstack = &bitmap_default_obstack;
+     }
+ 
+   bit_obstack->elements = NULL;
+   bit_obstack->heads = NULL;
+   obstack_free (&bit_obstack->obstack, NULL);
+ }
+ 
+ /* Create a new bitmap on an obstack.  If BIT_OBSTACK is NULL, create
+    it on the default bitmap obstack.  */
+ 
+ bitmap
+ bitmap_alloc (bitmap_obstack *bit_obstack MEM_STAT_DECL)
+ {
+   bitmap map;
+ 
+   if (!bit_obstack)
+     bit_obstack = &bitmap_default_obstack;
+   map = bit_obstack->heads;
+   if (map)
+     bit_obstack->heads = (class bitmap_head *) map->first;
+   else
+     map = XOBNEW (&bit_obstack->obstack, bitmap_head);
+   bitmap_initialize (map, bit_obstack PASS_MEM_STAT);
+ 
+   if (GATHER_STATISTICS)
+     register_overhead (map, sizeof (bitmap_head));
+ 
+   return map;
+ }
+ 
+ /* Create a new GCd bitmap.  */
+ 
+ bitmap
+ bitmap_gc_alloc (ALONE_MEM_STAT_DECL)
+ {
+   bitmap map;
+ 
+   map = ggc_alloc<bitmap_head> ();
+   bitmap_initialize (map, NULL PASS_MEM_STAT);
+ 
+   if (GATHER_STATISTICS)
+     register_overhead (map, sizeof (bitmap_head));
+ 
+   return map;
+ }
+ 
+ /* Release an obstack allocated bitmap.  */
+ 
+ void
+ bitmap_obstack_free (bitmap map)
+ {
+   if (map)
+     {
+       bitmap_clear (map);
+       map->first = (bitmap_element *) map->obstack->heads;
+ 
+       if (GATHER_STATISTICS)
+ 	release_overhead (map, sizeof (bitmap_head), true);
+ 
+       map->obstack->heads = map;
+     }
+ }
+ 
+ 
+ /* Return nonzero if all bits in an element are zero.  */
+ 
+ static inline int
+ bitmap_element_zerop (const bitmap_element *element)
+ {
+ #if BITMAP_ELEMENT_WORDS == 2
+   return (element->bits[0] | element->bits[1]) == 0;
+ #else
+   unsigned i;
+ 
+   for (i = 0; i < BITMAP_ELEMENT_WORDS; i++)
+     if (element->bits[i] != 0)
+       return 0;
+ 
+   return 1;
+ #endif
+ }
+ 
+ /* Copy a bitmap to another bitmap.  */
+ 
+ void
+ bitmap_copy (bitmap to, const_bitmap from)
+ {
+   const bitmap_element *from_ptr;
+   bitmap_element *to_ptr = 0;
+ 
+   gcc_checking_assert (!to->tree_form && !from->tree_form);
+ 
+   bitmap_clear (to);
+ 
+   /* Copy elements in forward direction one at a time.  */
+   for (from_ptr = from->first; from_ptr; from_ptr = from_ptr->next)
+     {
+       bitmap_element *to_elt = bitmap_element_allocate (to);
+ 
+       to_elt->indx = from_ptr->indx;
+       memcpy (to_elt->bits, from_ptr->bits, sizeof (to_elt->bits));
+ 
+       /* Here we have a special case of bitmap_list_link_element,
+          for the case where we know the links are being entered
+ 	 in sequence.  */
+       if (to_ptr == 0)
+ 	{
+ 	  to->first = to->current = to_elt;
+ 	  to->indx = from_ptr->indx;
+ 	  to_elt->next = to_elt->prev = 0;
+ 	}
+       else
+ 	{
+ 	  to_elt->prev = to_ptr;
+ 	  to_elt->next = 0;
+ 	  to_ptr->next = to_elt;
+ 	}
+ 
+       to_ptr = to_elt;
+     }
+ }
+ 
+ /* Move a bitmap to another bitmap.  */
+ 
+ void
+ bitmap_move (bitmap to, bitmap from)
+ {
+   gcc_assert (to->obstack == from->obstack);
+ 
+   bitmap_clear (to);
+ 
+   size_t sz = 0;
+   if (GATHER_STATISTICS)
+     {
+       for (bitmap_element *e = to->first; e; e = e->next)
+ 	sz += sizeof (bitmap_element);
+       register_overhead (to, sz);
+     }
+ 
+   *to = *from;
+ 
+   if (GATHER_STATISTICS)
+     release_overhead (from, sz, false);
+ }
+ 
+ /* Clear a single bit in a bitmap.  Return true if the bit changed.  */
+ 
+ bool
+ bitmap_clear_bit (bitmap head, int bit)
+ {
+   unsigned int indx = bit / BITMAP_ELEMENT_ALL_BITS;
+   bitmap_element *ptr;
+ 
+   if (!head->tree_form)
+     ptr = bitmap_list_find_element (head, indx);
+   else
+     ptr = bitmap_tree_find_element (head, indx);
+   if (ptr != 0)
+     {
+       unsigned bit_num  = bit % BITMAP_WORD_BITS;
+       unsigned word_num = bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
+       BITMAP_WORD bit_val = ((BITMAP_WORD) 1) << bit_num;
+       bool res = (ptr->bits[word_num] & bit_val) != 0;
+       if (res)
+ 	{
+ 	  ptr->bits[word_num] &= ~bit_val;
+ 	  /* If we cleared the entire word, free up the element.  */
+ 	  if (!ptr->bits[word_num]
+ 	      && bitmap_element_zerop (ptr))
+ 	    {
+ 	      if (!head->tree_form)
+ 		bitmap_list_unlink_element (head, ptr);
+ 	      else
+ 		bitmap_tree_unlink_element (head, ptr);
+ 	    }
+ 	}
+ 
+       return res;
+     }
+ 
+   return false;
+ }
+ 
+ /* Set a single bit in a bitmap.  Return true if the bit changed.  */
+ 
+ bool
+ bitmap_set_bit (bitmap head, int bit)
+ {
+   unsigned indx = bit / BITMAP_ELEMENT_ALL_BITS;
+   bitmap_element *ptr;
+   if (!head->tree_form)
+     ptr = bitmap_list_find_element (head, indx);
+   else
+     ptr = bitmap_tree_find_element (head, indx);
+   unsigned word_num = bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
+   unsigned bit_num  = bit % BITMAP_WORD_BITS;
+   BITMAP_WORD bit_val = ((BITMAP_WORD) 1) << bit_num;
+ 
+   if (ptr != 0)
+     {
+       bool res = (ptr->bits[word_num] & bit_val) == 0;
+       if (res)
+ 	ptr->bits[word_num] |= bit_val;
+       return res;
+     }
+ 
+   ptr = bitmap_element_allocate (head);
+   ptr->indx = bit / BITMAP_ELEMENT_ALL_BITS;
+   ptr->bits[word_num] = bit_val;
+   if (!head->tree_form)
+     bitmap_list_link_element (head, ptr);
+   else
+     bitmap_tree_link_element (head, ptr);
+   return true;
+ }
+ 
+ /* Return whether a bit is set within a bitmap.  */
+ 
+ bool
+ bitmap_bit_p (const_bitmap head, int bit)
+ {
+   unsigned int indx = bit / BITMAP_ELEMENT_ALL_BITS;
+   const bitmap_element *ptr;
+   unsigned bit_num;
+   unsigned word_num;
+ 
+   if (!head->tree_form)
+     ptr = bitmap_list_find_element (const_cast<bitmap> (head), indx);
+   else
+     ptr = bitmap_tree_find_element (const_cast<bitmap> (head), indx);
+   if (ptr == 0)
+     return 0;
+ 
+   bit_num = bit % BITMAP_WORD_BITS;
+   word_num = bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
+ 
+   return (ptr->bits[word_num] >> bit_num) & 1;
+ }
+ 
+ /* Set CHUNK_SIZE bits at a time in bitmap HEAD.
+    Store CHUNK_VALUE starting at bits CHUNK * chunk_size.
+    This is the set routine for viewing bitmap as a multi-bit sparse array.  */
+ 
+ void
+ bitmap_set_aligned_chunk (bitmap head, unsigned int chunk,
+ 			  unsigned int chunk_size, BITMAP_WORD chunk_value)
+ {
+   // Ensure chunk size is a power of 2 and fits in BITMAP_WORD.
+   gcc_checking_assert (pow2p_hwi (chunk_size));
+   gcc_checking_assert (chunk_size < (sizeof (BITMAP_WORD) * CHAR_BIT));
+ 
+   // Ensure chunk_value is within range of chunk_size bits.
+   BITMAP_WORD max_value = (1 << chunk_size) - 1;
+   gcc_checking_assert (chunk_value <= max_value);
+ 
+   unsigned bit = chunk * chunk_size;
+   unsigned indx = bit / BITMAP_ELEMENT_ALL_BITS;
+   bitmap_element *ptr;
+   if (!head->tree_form)
+     ptr = bitmap_list_find_element (head, indx);
+   else
+     ptr = bitmap_tree_find_element (head, indx);
+   unsigned word_num = bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
+   unsigned bit_num  = bit % BITMAP_WORD_BITS;
+   BITMAP_WORD bit_val = chunk_value << bit_num;
+   BITMAP_WORD mask = ~(max_value << bit_num);
+ 
+   if (ptr != 0)
+     {
+       ptr->bits[word_num] &= mask;
+       ptr->bits[word_num] |= bit_val;
+       return;
+     }
+ 
+   ptr = bitmap_element_allocate (head);
+   ptr->indx = bit / BITMAP_ELEMENT_ALL_BITS;
+   ptr->bits[word_num] = bit_val;
+   if (!head->tree_form)
+     bitmap_list_link_element (head, ptr);
+   else
+     bitmap_tree_link_element (head, ptr);
+ }
+ 
+ /* This is the get routine for viewing bitmap as a multi-bit sparse array.
+    Return a set of CHUNK_SIZE consecutive bits from HEAD, starting at bit
+    CHUNK * chunk_size.   */
+ 
+ BITMAP_WORD
+ bitmap_get_aligned_chunk (const_bitmap head, unsigned int chunk,
+ 			  unsigned int chunk_size)
+ {
+   // Ensure chunk size is a power of 2, fits in BITMAP_WORD and is in range.
+   gcc_checking_assert (pow2p_hwi (chunk_size));
+   gcc_checking_assert (chunk_size < (sizeof (BITMAP_WORD) * CHAR_BIT));
+ 
+   BITMAP_WORD max_value = (1 << chunk_size) - 1;
+   unsigned bit = chunk * chunk_size;
+   unsigned int indx = bit / BITMAP_ELEMENT_ALL_BITS;
+   const bitmap_element *ptr;
+   unsigned bit_num;
+   unsigned word_num;
+ 
+   if (!head->tree_form)
+     ptr = bitmap_list_find_element (const_cast<bitmap> (head), indx);
+   else
+     ptr = bitmap_tree_find_element (const_cast<bitmap> (head), indx);
+   if (ptr == 0)
+     return 0;
+ 
+   bit_num = bit % BITMAP_WORD_BITS;
+   word_num = bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
+ 
+   // Return 4 bits.
+   return (ptr->bits[word_num] >> bit_num) & max_value;
+ }
+ 
+ #if GCC_VERSION < 3400
+ /* Table of number of set bits in a character, indexed by value of char.  */
+ static const unsigned char popcount_table[] =
+ {
+     0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
+     1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+     1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+     2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
+     1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
+     2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
+     2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
+     3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,
+ };
+ 
+ static unsigned long
+ bitmap_popcount (BITMAP_WORD a)
+ {
+   unsigned long ret = 0;
+   unsigned i;
+ 
+   /* Just do this the table way for now  */
+   for (i = 0; i < BITMAP_WORD_BITS; i+= 8)
+     ret += popcount_table[(a >> i) & 0xff];
+   return ret;
+ }
+ #endif
+ 
+ /* Count and return the number of bits set in the bitmap word BITS.  */
+ static unsigned long
+ bitmap_count_bits_in_word (const BITMAP_WORD *bits)
+ {
+   unsigned long count = 0;
+ 
+   for (unsigned ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
+     {
+ #if GCC_VERSION >= 3400
+       /* Note that popcountl matches BITMAP_WORD in type, so the actual size
+ 	 of BITMAP_WORD is not material.  */
+       count += __builtin_popcountl (bits[ix]);
+ #else
+       count += bitmap_popcount (bits[ix]);
+ #endif
+     }
+   return count;
+ }
+ 
+ /* Count the number of bits set in the bitmap, and return it.  */
+ 
+ unsigned long
+ bitmap_count_bits (const_bitmap a)
+ {
+   unsigned long count = 0;
+   const bitmap_element *elt;
+ 
+   gcc_checking_assert (!a->tree_form);
+   for (elt = a->first; elt; elt = elt->next)
+     count += bitmap_count_bits_in_word (elt->bits);
+ 
+   return count;
+ }
+ 
+ /* Count the number of unique bits set in A and B and return it.  */
+ 
+ unsigned long
+ bitmap_count_unique_bits (const_bitmap a, const_bitmap b)
+ {
+   unsigned long count = 0;
+   const bitmap_element *elt_a, *elt_b;
+ 
+   for (elt_a = a->first, elt_b = b->first; elt_a && elt_b; )
+     {
+       /* If we're at different indices, then count all the bits
+ 	 in the lower element.  If we're at the same index, then
+ 	 count the bits in the IOR of the two elements.  */
+       if (elt_a->indx < elt_b->indx)
+ 	{
+ 	  count += bitmap_count_bits_in_word (elt_a->bits);
+ 	  elt_a = elt_a->next;
+ 	}
+       else if (elt_b->indx < elt_a->indx)
+ 	{
+ 	  count += bitmap_count_bits_in_word (elt_b->bits);
+ 	  elt_b = elt_b->next;
+ 	}
+       else
+ 	{
+ 	  BITMAP_WORD bits[BITMAP_ELEMENT_WORDS];
+ 	  for (unsigned ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
+ 	    bits[ix] = elt_a->bits[ix] | elt_b->bits[ix];
+ 	  count += bitmap_count_bits_in_word (bits);
+ 	  elt_a = elt_a->next;
+ 	  elt_b = elt_b->next;
+ 	}
+     }
+   return count;
+ }
+ 
+ /* Return true if the bitmap has a single bit set.  Otherwise return
+    false.  */
+ 
+ bool
+ bitmap_single_bit_set_p (const_bitmap a)
+ {
+   unsigned long count = 0;
+   const bitmap_element *elt;
+   unsigned ix;
+ 
+   if (bitmap_empty_p (a))
+     return false;
+ 
+   elt = a->first;
+ 
+   /* As there are no completely empty bitmap elements, a second one
+      means we have more than one bit set.  */
+   if (elt->next != NULL
+       && (!a->tree_form || elt->prev != NULL))
+     return false;
+ 
+   for (ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
+     {
+ #if GCC_VERSION >= 3400
+       /* Note that popcountl matches BITMAP_WORD in type, so the actual size
+ 	 of BITMAP_WORD is not material.  */
+       count += __builtin_popcountl (elt->bits[ix]);
+ #else
+       count += bitmap_popcount (elt->bits[ix]);
+ #endif
+       if (count > 1)
+ 	return false;
+     }
+ 
+   return count == 1;
+ }
+ 
+ 
+ /* Return the bit number of the first set bit in the bitmap.  The
+    bitmap must be non-empty.  */
+ 
+ unsigned
+ bitmap_first_set_bit (const_bitmap a)
+ {
+   const bitmap_element *elt = a->first;
+   unsigned bit_no;
+   BITMAP_WORD word;
+   unsigned ix;
+ 
+   gcc_checking_assert (elt);
+ 
+   if (a->tree_form)
+     while (elt->prev)
+       elt = elt->prev;
+ 
+   bit_no = elt->indx * BITMAP_ELEMENT_ALL_BITS;
+   for (ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
+     {
+       word = elt->bits[ix];
+       if (word)
+ 	goto found_bit;
+     }
+   gcc_unreachable ();
+  found_bit:
+   bit_no += ix * BITMAP_WORD_BITS;
+ 
+ #if GCC_VERSION >= 3004
+   gcc_assert (sizeof (long) == sizeof (word));
+   bit_no += __builtin_ctzl (word);
+ #else
+   /* Binary search for the first set bit.  */
+ #if BITMAP_WORD_BITS > 64
+ #error "Fill out the table."
+ #endif
+ #if BITMAP_WORD_BITS > 32
+   if (!(word & 0xffffffff))
+     word >>= 32, bit_no += 32;
+ #endif
+   if (!(word & 0xffff))
+     word >>= 16, bit_no += 16;
+   if (!(word & 0xff))
+     word >>= 8, bit_no += 8;
+   if (!(word & 0xf))
+     word >>= 4, bit_no += 4;
+   if (!(word & 0x3))
+     word >>= 2, bit_no += 2;
+   if (!(word & 0x1))
+     word >>= 1, bit_no += 1;
+ 
+  gcc_checking_assert (word & 1);
+ #endif
+  return bit_no;
+ }
+ 
+ /* Return the bit number of the first set bit in the bitmap.  The
+    bitmap must be non-empty.  */
+ 
+ unsigned
+ bitmap_last_set_bit (const_bitmap a)
+ {
+   const bitmap_element *elt;
+   unsigned bit_no;
+   BITMAP_WORD word;
+   int ix;
+ 
+   if (a->tree_form)
+     elt = a->first;
+   else
+     elt = a->current ? a->current : a->first;
+   gcc_checking_assert (elt);
+ 
+   while (elt->next)
+     elt = elt->next;
+ 
+   bit_no = elt->indx * BITMAP_ELEMENT_ALL_BITS;
+   for (ix = BITMAP_ELEMENT_WORDS - 1; ix >= 1; ix--)
+     {
+       word = elt->bits[ix];
+       if (word)
+ 	goto found_bit;
+     }
+   gcc_assert (elt->bits[ix] != 0);
+  found_bit:
+   bit_no += ix * BITMAP_WORD_BITS;
+ #if GCC_VERSION >= 3004
+   gcc_assert (sizeof (long) == sizeof (word));
+   bit_no += BITMAP_WORD_BITS - __builtin_clzl (word) - 1;
+ #else
+   /* Hopefully this is a twos-complement host...  */
+   BITMAP_WORD x = word;
+   x |= (x >> 1);
+   x |= (x >> 2);
+   x |= (x >> 4);
+   x |= (x >> 8);
+   x |= (x >> 16);
+ #if BITMAP_WORD_BITS > 32
+   x |= (x >> 32);
+ #endif
+   bit_no += bitmap_popcount (x) - 1;
+ #endif
+ 
+   return bit_no;
+ }
+ 
+ 
+ /* DST = A & B.  */
+ 
+ void
+ bitmap_and (bitmap dst, const_bitmap a, const_bitmap b)
+ {
+   bitmap_element *dst_elt = dst->first;
+   const bitmap_element *a_elt = a->first;
+   const bitmap_element *b_elt = b->first;
+   bitmap_element *dst_prev = NULL;
+ 
+   gcc_checking_assert (!dst->tree_form && !a->tree_form && !b->tree_form);
+   gcc_assert (dst != a && dst != b);
+ 
+   if (a == b)
+     {
+       bitmap_copy (dst, a);
+       return;
+     }
+ 
+   while (a_elt && b_elt)
+     {
+       if (a_elt->indx < b_elt->indx)
+ 	a_elt = a_elt->next;
+       else if (b_elt->indx < a_elt->indx)
+ 	b_elt = b_elt->next;
+       else
+ 	{
+ 	  /* Matching elts, generate A & B.  */
+ 	  unsigned ix;
+ 	  BITMAP_WORD ior = 0;
+ 
+ 	  if (!dst_elt)
+ 	    dst_elt = bitmap_list_insert_element_after (dst, dst_prev,
+ 							a_elt->indx);
+ 	  else
+ 	    dst_elt->indx = a_elt->indx;
+ 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	    {
+ 	      BITMAP_WORD r = a_elt->bits[ix] & b_elt->bits[ix];
+ 
+ 	      dst_elt->bits[ix] = r;
+ 	      ior |= r;
+ 	    }
+ 	  if (ior)
+ 	    {
+ 	      dst_prev = dst_elt;
+ 	      dst_elt = dst_elt->next;
+ 	    }
+ 	  a_elt = a_elt->next;
+ 	  b_elt = b_elt->next;
+ 	}
+     }
+   /* Ensure that dst->current is valid.  */
+   dst->current = dst->first;
+   bitmap_elt_clear_from (dst, dst_elt);
+   gcc_checking_assert (!dst->current == !dst->first);
+   if (dst->current)
+     dst->indx = dst->current->indx;
+ }
+ 
+ /* A &= B.  Return true if A changed.  */
+ 
+ bool
+ bitmap_and_into (bitmap a, const_bitmap b)
+ {
+   bitmap_element *a_elt = a->first;
+   const bitmap_element *b_elt = b->first;
+   bitmap_element *next;
+   bool changed = false;
+ 
+   gcc_checking_assert (!a->tree_form && !b->tree_form);
+ 
+   if (a == b)
+     return false;
+ 
+   while (a_elt && b_elt)
+     {
+       if (a_elt->indx < b_elt->indx)
+ 	{
+ 	  next = a_elt->next;
+ 	  bitmap_list_unlink_element (a, a_elt);
+ 	  a_elt = next;
+ 	  changed = true;
+ 	}
+       else if (b_elt->indx < a_elt->indx)
+ 	b_elt = b_elt->next;
+       else
+ 	{
+ 	  /* Matching elts, generate A &= B.  */
+ 	  unsigned ix;
+ 	  BITMAP_WORD ior = 0;
+ 
+ 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	    {
+ 	      BITMAP_WORD r = a_elt->bits[ix] & b_elt->bits[ix];
+ 	      if (a_elt->bits[ix] != r)
+ 		changed = true;
+ 	      a_elt->bits[ix] = r;
+ 	      ior |= r;
+ 	    }
+ 	  next = a_elt->next;
+ 	  if (!ior)
+ 	    bitmap_list_unlink_element (a, a_elt);
+ 	  a_elt = next;
+ 	  b_elt = b_elt->next;
+ 	}
+     }
+ 
+   if (a_elt)
+     {
+       changed = true;
+       bitmap_elt_clear_from (a, a_elt);
+     }
+ 
+   gcc_checking_assert (!a->current == !a->first
+ 		       && (!a->current || a->indx == a->current->indx));
+ 
+   return changed;
+ }
+ 
+ 
+ /* Insert an element equal to SRC_ELT after DST_PREV, overwriting DST_ELT
+    if non-NULL.  CHANGED is true if the destination bitmap had already been
+    changed; the new value of CHANGED is returned.  */
+ 
+ static inline bool
+ bitmap_elt_copy (bitmap dst, bitmap_element *dst_elt, bitmap_element *dst_prev,
+ 		 const bitmap_element *src_elt, bool changed)
+ {
+   if (!changed && dst_elt && dst_elt->indx == src_elt->indx)
+     {
+       unsigned ix;
+ 
+       for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	if (src_elt->bits[ix] != dst_elt->bits[ix])
+ 	  {
+ 	    dst_elt->bits[ix] = src_elt->bits[ix];
+ 	    changed = true;
+ 	  }
+     }
+   else
+     {
+       changed = true;
+       if (!dst_elt)
+ 	dst_elt = bitmap_list_insert_element_after (dst, dst_prev,
+ 						    src_elt->indx);
+       else
+ 	dst_elt->indx = src_elt->indx;
+       memcpy (dst_elt->bits, src_elt->bits, sizeof (dst_elt->bits));
+     }
+   return changed;
+ }
+ 
+ 
+ 
+ /* DST = A & ~B  */
+ 
+ bool
+ bitmap_and_compl (bitmap dst, const_bitmap a, const_bitmap b)
+ {
+   bitmap_element *dst_elt = dst->first;
+   const bitmap_element *a_elt = a->first;
+   const bitmap_element *b_elt = b->first;
+   bitmap_element *dst_prev = NULL;
+   bitmap_element **dst_prev_pnext = &dst->first;
+   bool changed = false;
+ 
+   gcc_checking_assert (!dst->tree_form && !a->tree_form && !b->tree_form);
+   gcc_assert (dst != a && dst != b);
+ 
+   if (a == b)
+     {
+       changed = !bitmap_empty_p (dst);
+       bitmap_clear (dst);
+       return changed;
+     }
+ 
+   while (a_elt)
+     {
+       while (b_elt && b_elt->indx < a_elt->indx)
+ 	b_elt = b_elt->next;
+ 
+       if (!b_elt || b_elt->indx > a_elt->indx)
+ 	{
+ 	  changed = bitmap_elt_copy (dst, dst_elt, dst_prev, a_elt, changed);
+ 	  dst_prev = *dst_prev_pnext;
+ 	  dst_prev_pnext = &dst_prev->next;
+ 	  dst_elt = *dst_prev_pnext;
+ 	  a_elt = a_elt->next;
+ 	}
+ 
+       else
+ 	{
+ 	  /* Matching elts, generate A & ~B.  */
+ 	  unsigned ix;
+ 	  BITMAP_WORD ior = 0;
+ 
+ 	  if (!changed && dst_elt && dst_elt->indx == a_elt->indx)
+ 	    {
+ 	      for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 		{
+ 		  BITMAP_WORD r = a_elt->bits[ix] & ~b_elt->bits[ix];
+ 
+ 		  if (dst_elt->bits[ix] != r)
+ 		    {
+ 		      changed = true;
+ 		      dst_elt->bits[ix] = r;
+ 		    }
+ 		  ior |= r;
+ 		}
+ 	    }
+ 	  else
+ 	    {
+ 	      bool new_element;
+ 	      if (!dst_elt || dst_elt->indx > a_elt->indx)
+ 		{
+ 		  dst_elt = bitmap_list_insert_element_after (dst, dst_prev,
+ 							      a_elt->indx);
+ 		  new_element = true;
+ 		}
+ 	      else
+ 		{
+ 		  dst_elt->indx = a_elt->indx;
+ 		  new_element = false;
+ 		}
+ 
+ 	      for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 		{
+ 		  BITMAP_WORD r = a_elt->bits[ix] & ~b_elt->bits[ix];
+ 
+ 		  dst_elt->bits[ix] = r;
+ 		  ior |= r;
+ 		}
+ 
+ 	      if (ior)
+ 	        changed = true;
+ 	      else
+ 	        {
+ 	          changed |= !new_element;
+ 		  bitmap_list_unlink_element (dst, dst_elt);
+ 		  dst_elt = *dst_prev_pnext;
+ 		}
+ 	    }
+ 
+ 	  if (ior)
+ 	    {
+ 	      dst_prev = *dst_prev_pnext;
+ 	      dst_prev_pnext = &dst_prev->next;
+ 	      dst_elt = *dst_prev_pnext;
+ 	    }
+ 	  a_elt = a_elt->next;
+ 	  b_elt = b_elt->next;
+ 	}
+     }
+ 
+   /* Ensure that dst->current is valid.  */
+   dst->current = dst->first;
+ 
+   if (dst_elt)
+     {
+       changed = true;
+       bitmap_elt_clear_from (dst, dst_elt);
+     }
+   gcc_checking_assert (!dst->current == !dst->first);
+   if (dst->current)
+     dst->indx = dst->current->indx;
+ 
+   return changed;
+ }
+ 
+ /* A &= ~B. Returns true if A changes */
+ 
+ bool
+ bitmap_and_compl_into (bitmap a, const_bitmap b)
+ {
+   bitmap_element *a_elt = a->first;
+   const bitmap_element *b_elt = b->first;
+   bitmap_element *next;
+   BITMAP_WORD changed = 0;
+ 
+   gcc_checking_assert (!a->tree_form && !b->tree_form);
+ 
+   if (a == b)
+     {
+       if (bitmap_empty_p (a))
+ 	return false;
+       else
+ 	{
+ 	  bitmap_clear (a);
+ 	  return true;
+ 	}
+     }
+ 
+   while (a_elt && b_elt)
+     {
+       if (a_elt->indx < b_elt->indx)
+ 	a_elt = a_elt->next;
+       else if (b_elt->indx < a_elt->indx)
+ 	b_elt = b_elt->next;
+       else
+ 	{
+ 	  /* Matching elts, generate A &= ~B.  */
+ 	  unsigned ix;
+ 	  BITMAP_WORD ior = 0;
+ 
+ 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	    {
+ 	      BITMAP_WORD cleared = a_elt->bits[ix] & b_elt->bits[ix];
+ 	      BITMAP_WORD r = a_elt->bits[ix] ^ cleared;
+ 
+ 	      a_elt->bits[ix] = r;
+ 	      changed |= cleared;
+ 	      ior |= r;
+ 	    }
+ 	  next = a_elt->next;
+ 	  if (!ior)
+ 	    bitmap_list_unlink_element (a, a_elt);
+ 	  a_elt = next;
+ 	  b_elt = b_elt->next;
+ 	}
+     }
+   gcc_checking_assert (!a->current == !a->first
+ 		       && (!a->current || a->indx == a->current->indx));
+   return changed != 0;
+ }
+ 
+ /* Set COUNT bits from START in HEAD.  */
+ void
+ bitmap_set_range (bitmap head, unsigned int start, unsigned int count)
+ {
+   unsigned int first_index, end_bit_plus1, last_index;
+   bitmap_element *elt, *elt_prev;
+   unsigned int i;
+ 
+   gcc_checking_assert (!head->tree_form);
+ 
+   if (!count)
+     return;
+ 
+   if (count == 1)
+     {
+       bitmap_set_bit (head, start);
+       return;
+     }
+ 
+   first_index = start / BITMAP_ELEMENT_ALL_BITS;
+   end_bit_plus1 = start + count;
+   last_index = (end_bit_plus1 - 1) / BITMAP_ELEMENT_ALL_BITS;
+   elt = bitmap_list_find_element (head, first_index);
+ 
+   /* If bitmap_list_find_element returns zero, the current is the closest block
+      to the result.  Otherwise, just use bitmap_element_allocate to
+      ensure ELT is set; in the loop below, ELT == NULL means "insert
+      at the end of the bitmap".  */
+   if (!elt)
+     {
+       elt = bitmap_element_allocate (head);
+       elt->indx = first_index;
+       bitmap_list_link_element (head, elt);
+     }
+ 
+   gcc_checking_assert (elt->indx == first_index);
+   elt_prev = elt->prev;
+   for (i = first_index; i <= last_index; i++)
+     {
+       unsigned elt_start_bit = i * BITMAP_ELEMENT_ALL_BITS;
+       unsigned elt_end_bit_plus1 = elt_start_bit + BITMAP_ELEMENT_ALL_BITS;
+ 
+       unsigned int first_word_to_mod;
+       BITMAP_WORD first_mask;
+       unsigned int last_word_to_mod;
+       BITMAP_WORD last_mask;
+       unsigned int ix;
+ 
+       if (!elt || elt->indx != i)
+ 	elt = bitmap_list_insert_element_after (head, elt_prev, i);
+ 
+       if (elt_start_bit <= start)
+ 	{
+ 	  /* The first bit to turn on is somewhere inside this
+ 	     elt.  */
+ 	  first_word_to_mod = (start - elt_start_bit) / BITMAP_WORD_BITS;
+ 
+ 	  /* This mask should have 1s in all bits >= start position. */
+ 	  first_mask =
+ 	    (((BITMAP_WORD) 1) << ((start % BITMAP_WORD_BITS))) - 1;
+ 	  first_mask = ~first_mask;
+ 	}
+       else
+ 	{
+ 	  /* The first bit to turn on is below this start of this elt.  */
+ 	  first_word_to_mod = 0;
+ 	  first_mask = ~(BITMAP_WORD) 0;
+ 	}
+ 
+       if (elt_end_bit_plus1 <= end_bit_plus1)
+ 	{
+ 	  /* The last bit to turn on is beyond this elt.  */
+ 	  last_word_to_mod = BITMAP_ELEMENT_WORDS - 1;
+ 	  last_mask = ~(BITMAP_WORD) 0;
+ 	}
+       else
+ 	{
+ 	  /* The last bit to turn on is inside to this elt.  */
+ 	  last_word_to_mod =
+ 	    (end_bit_plus1 - elt_start_bit) / BITMAP_WORD_BITS;
+ 
+ 	  /* The last mask should have 1s below the end bit.  */
+ 	  last_mask =
+ 	    (((BITMAP_WORD) 1) << ((end_bit_plus1 % BITMAP_WORD_BITS))) - 1;
+ 	}
+ 
+       if (first_word_to_mod == last_word_to_mod)
+ 	{
+ 	  BITMAP_WORD mask = first_mask & last_mask;
+ 	  elt->bits[first_word_to_mod] |= mask;
+ 	}
+       else
+ 	{
+ 	  elt->bits[first_word_to_mod] |= first_mask;
+ 	  if (BITMAP_ELEMENT_WORDS > 2)
+ 	    for (ix = first_word_to_mod + 1; ix < last_word_to_mod; ix++)
+ 	      elt->bits[ix] = ~(BITMAP_WORD) 0;
+ 	  elt->bits[last_word_to_mod] |= last_mask;
+ 	}
+ 
+       elt_prev = elt;
+       elt = elt->next;
+     }
+ 
+   head->current = elt ? elt : elt_prev;
+   head->indx = head->current->indx;
+ }
+ 
+ /* Clear COUNT bits from START in HEAD.  */
+ void
+ bitmap_clear_range (bitmap head, unsigned int start, unsigned int count)
+ {
+   unsigned int first_index, end_bit_plus1, last_index;
+   bitmap_element *elt;
+ 
+   gcc_checking_assert (!head->tree_form);
+ 
+   if (!count)
+     return;
+ 
+   if (count == 1)
+     {
+       bitmap_clear_bit (head, start);
+       return;
+     }
+ 
+   first_index = start / BITMAP_ELEMENT_ALL_BITS;
+   end_bit_plus1 = start + count;
+   last_index = (end_bit_plus1 - 1) / BITMAP_ELEMENT_ALL_BITS;
+   elt = bitmap_list_find_element (head, first_index);
+ 
+   /* If bitmap_list_find_element returns zero, the current is the closest block
+      to the result.  If the current is less than first index, find the
+      next one.  Otherwise, just set elt to be current.  */
+   if (!elt)
+     {
+       if (head->current)
+ 	{
+ 	  if (head->indx < first_index)
+ 	    {
+ 	      elt = head->current->next;
+ 	      if (!elt)
+ 		return;
+ 	    }
+ 	  else
+ 	    elt = head->current;
+ 	}
+       else
+ 	return;
+     }
+ 
+   while (elt && (elt->indx <= last_index))
+     {
+       bitmap_element * next_elt = elt->next;
+       unsigned elt_start_bit = (elt->indx) * BITMAP_ELEMENT_ALL_BITS;
+       unsigned elt_end_bit_plus1 = elt_start_bit + BITMAP_ELEMENT_ALL_BITS;
+ 
+ 
+       if (elt_start_bit >= start && elt_end_bit_plus1 <= end_bit_plus1)
+ 	/* Get rid of the entire elt and go to the next one.  */
+ 	bitmap_list_unlink_element (head, elt);
+       else
+ 	{
+ 	  /* Going to have to knock out some bits in this elt.  */
+ 	  unsigned int first_word_to_mod;
+ 	  BITMAP_WORD first_mask;
+ 	  unsigned int last_word_to_mod;
+ 	  BITMAP_WORD last_mask;
+ 	  unsigned int i;
+ 	  bool clear = true;
+ 
+ 	  if (elt_start_bit <= start)
+ 	    {
+ 	      /* The first bit to turn off is somewhere inside this
+ 		 elt.  */
+ 	      first_word_to_mod = (start - elt_start_bit) / BITMAP_WORD_BITS;
+ 
+ 	      /* This mask should have 1s in all bits >= start position. */
+ 	      first_mask =
+ 		(((BITMAP_WORD) 1) << ((start % BITMAP_WORD_BITS))) - 1;
+ 	      first_mask = ~first_mask;
+ 	    }
+ 	  else
+ 	    {
+ 	      /* The first bit to turn off is below this start of this elt.  */
+ 	      first_word_to_mod = 0;
+ 	      first_mask = 0;
+ 	      first_mask = ~first_mask;
+ 	    }
+ 
+ 	  if (elt_end_bit_plus1 <= end_bit_plus1)
+ 	    {
+ 	      /* The last bit to turn off is beyond this elt.  */
+ 	      last_word_to_mod = BITMAP_ELEMENT_WORDS - 1;
+ 	      last_mask = 0;
+ 	      last_mask = ~last_mask;
+ 	    }
+ 	  else
+ 	    {
+ 	      /* The last bit to turn off is inside to this elt.  */
+ 	      last_word_to_mod =
+ 		(end_bit_plus1 - elt_start_bit) / BITMAP_WORD_BITS;
+ 
+ 	      /* The last mask should have 1s below the end bit.  */
+ 	      last_mask =
+ 		(((BITMAP_WORD) 1) << (((end_bit_plus1) % BITMAP_WORD_BITS))) - 1;
+ 	    }
+ 
+ 
+ 	  if (first_word_to_mod == last_word_to_mod)
+ 	    {
+ 	      BITMAP_WORD mask = first_mask & last_mask;
+ 	      elt->bits[first_word_to_mod] &= ~mask;
+ 	    }
+ 	  else
+ 	    {
+ 	      elt->bits[first_word_to_mod] &= ~first_mask;
+ 	      if (BITMAP_ELEMENT_WORDS > 2)
+ 	        for (i = first_word_to_mod + 1; i < last_word_to_mod; i++)
+ 		  elt->bits[i] = 0;
+ 	      elt->bits[last_word_to_mod] &= ~last_mask;
+ 	    }
+ 	  for (i = 0; i < BITMAP_ELEMENT_WORDS; i++)
+ 	    if (elt->bits[i])
+ 	      {
+ 		clear = false;
+ 		break;
+ 	      }
+ 	  /* Check to see if there are any bits left.  */
+ 	  if (clear)
+ 	    bitmap_list_unlink_element (head, elt);
+ 	}
+       elt = next_elt;
+     }
+ 
+   if (elt)
+     {
+       head->current = elt;
+       head->indx = head->current->indx;
+     }
+ }
+ 
+ /* A = ~A & B. */
+ 
+ void
+ bitmap_compl_and_into (bitmap a, const_bitmap b)
+ {
+   bitmap_element *a_elt = a->first;
+   const bitmap_element *b_elt = b->first;
+   bitmap_element *a_prev = NULL;
+   bitmap_element *next;
+ 
+   gcc_checking_assert (!a->tree_form && !b->tree_form);
+   gcc_assert (a != b);
+ 
+   if (bitmap_empty_p (a))
+     {
+       bitmap_copy (a, b);
+       return;
+     }
+   if (bitmap_empty_p (b))
+     {
+       bitmap_clear (a);
+       return;
+     }
+ 
+   while (a_elt || b_elt)
+     {
+       if (!b_elt || (a_elt && a_elt->indx < b_elt->indx))
+ 	{
+ 	  /* A is before B.  Remove A */
+ 	  next = a_elt->next;
+ 	  a_prev = a_elt->prev;
+ 	  bitmap_list_unlink_element (a, a_elt);
+ 	  a_elt = next;
+ 	}
+       else if (!a_elt || b_elt->indx < a_elt->indx)
+ 	{
+ 	  /* B is before A.  Copy B. */
+ 	  next = bitmap_list_insert_element_after (a, a_prev, b_elt->indx);
+ 	  memcpy (next->bits, b_elt->bits, sizeof (next->bits));
+ 	  a_prev = next;
+ 	  b_elt = b_elt->next;
+ 	}
+       else
+ 	{
+ 	  /* Matching elts, generate A = ~A & B.  */
+ 	  unsigned ix;
+ 	  BITMAP_WORD ior = 0;
+ 
+ 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	    {
+ 	      BITMAP_WORD cleared = a_elt->bits[ix] & b_elt->bits[ix];
+ 	      BITMAP_WORD r = b_elt->bits[ix] ^ cleared;
+ 
+ 	      a_elt->bits[ix] = r;
+ 	      ior |= r;
+ 	    }
+ 	  next = a_elt->next;
+ 	  if (!ior)
+ 	    bitmap_list_unlink_element (a, a_elt);
+ 	  else
+ 	    a_prev = a_elt;
+ 	  a_elt = next;
+ 	  b_elt = b_elt->next;
+ 	}
+     }
+   gcc_checking_assert (!a->current == !a->first
+ 		       && (!a->current || a->indx == a->current->indx));
+   return;
+ }
+ 
+ 
+ /* Insert an element corresponding to A_ELT | B_ELT after DST_PREV,
+    overwriting DST_ELT if non-NULL.  CHANGED is true if the destination bitmap
+    had already been changed; the new value of CHANGED is returned.  */
+ 
+ static inline bool
+ bitmap_elt_ior (bitmap dst, bitmap_element *dst_elt, bitmap_element *dst_prev,
+ 		const bitmap_element *a_elt, const bitmap_element *b_elt,
+ 		bool changed)
+ {
+   gcc_assert (a_elt || b_elt);
+ 
+   if (a_elt && b_elt && a_elt->indx == b_elt->indx)
+     {
+       /* Matching elts, generate A | B.  */
+       unsigned ix;
+ 
+       if (!changed && dst_elt && dst_elt->indx == a_elt->indx)
+ 	{
+ 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	    {
+ 	      BITMAP_WORD r = a_elt->bits[ix] | b_elt->bits[ix];
+ 	      if (r != dst_elt->bits[ix])
+ 		{
+ 		  dst_elt->bits[ix] = r;
+ 		  changed = true;
+ 		}
+ 	    }
+ 	}
+       else
+ 	{
+ 	  changed = true;
+ 	  if (!dst_elt)
+ 	    dst_elt = bitmap_list_insert_element_after (dst, dst_prev,
+ 							a_elt->indx);
+ 	  else
+ 	    dst_elt->indx = a_elt->indx;
+ 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	    {
+ 	      BITMAP_WORD r = a_elt->bits[ix] | b_elt->bits[ix];
+ 	      dst_elt->bits[ix] = r;
+ 	    }
+ 	}
+     }
+   else
+     {
+       /* Copy a single element.  */
+       const bitmap_element *src;
+ 
+       if (!b_elt || (a_elt && a_elt->indx < b_elt->indx))
+ 	src = a_elt;
+       else
+ 	src = b_elt;
+ 
+       gcc_checking_assert (src);
+       changed = bitmap_elt_copy (dst, dst_elt, dst_prev, src, changed);
+     }
+   return changed;
+ }
+ 
+ 
+ /* DST = A | B.  Return true if DST changes.  */
+ 
+ bool
+ bitmap_ior (bitmap dst, const_bitmap a, const_bitmap b)
+ {
+   bitmap_element *dst_elt = dst->first;
+   const bitmap_element *a_elt = a->first;
+   const bitmap_element *b_elt = b->first;
+   bitmap_element *dst_prev = NULL;
+   bitmap_element **dst_prev_pnext = &dst->first;
+   bool changed = false;
+ 
+   gcc_checking_assert (!dst->tree_form && !a->tree_form && !b->tree_form);
+   gcc_assert (dst != a && dst != b);
+ 
+   while (a_elt || b_elt)
+     {
+       changed = bitmap_elt_ior (dst, dst_elt, dst_prev, a_elt, b_elt, changed);
+ 
+       if (a_elt && b_elt && a_elt->indx == b_elt->indx)
+ 	{
+ 	  a_elt = a_elt->next;
+ 	  b_elt = b_elt->next;
+ 	}
+       else
+ 	{
+ 	  if (a_elt && (!b_elt || a_elt->indx <= b_elt->indx))
+             a_elt = a_elt->next;
+           else if (b_elt && (!a_elt || b_elt->indx <= a_elt->indx))
+             b_elt = b_elt->next;
+ 	}
+ 
+       dst_prev = *dst_prev_pnext;
+       dst_prev_pnext = &dst_prev->next;
+       dst_elt = *dst_prev_pnext;
+     }
+ 
+   if (dst_elt)
+     {
+       changed = true;
+       /* Ensure that dst->current is valid.  */
+       dst->current = dst->first;
+       bitmap_elt_clear_from (dst, dst_elt);
+     }
+   gcc_checking_assert (!dst->current == !dst->first);
+   if (dst->current)
+     dst->indx = dst->current->indx;
+   return changed;
+ }
+ 
+ /* A |= B.  Return true if A changes.  */
+ 
+ bool
+ bitmap_ior_into (bitmap a, const_bitmap b)
+ {
+   bitmap_element *a_elt = a->first;
+   const bitmap_element *b_elt = b->first;
+   bitmap_element *a_prev = NULL;
+   bitmap_element **a_prev_pnext = &a->first;
+   bool changed = false;
+ 
+   gcc_checking_assert (!a->tree_form && !b->tree_form);
+   if (a == b)
+     return false;
+ 
+   while (b_elt)
+     {
+       /* If A lags behind B, just advance it.  */
+       if (!a_elt || a_elt->indx == b_elt->indx)
+ 	{
+ 	  changed = bitmap_elt_ior (a, a_elt, a_prev, a_elt, b_elt, changed);
+ 	  b_elt = b_elt->next;
+ 	}
+       else if (a_elt->indx > b_elt->indx)
+ 	{
+           changed = bitmap_elt_copy (a, NULL, a_prev, b_elt, changed);
+ 	  b_elt = b_elt->next;
+ 	}
+ 
+       a_prev = *a_prev_pnext;
+       a_prev_pnext = &a_prev->next;
+       a_elt = *a_prev_pnext;
+     }
+ 
+   gcc_checking_assert (!a->current == !a->first);
+   if (a->current)
+     a->indx = a->current->indx;
+   return changed;
+ }
+ 
+ /* A |= B.  Return true if A changes.  Free B (re-using its storage
+    for the result).  */
+ 
+ bool
+ bitmap_ior_into_and_free (bitmap a, bitmap *b_)
+ {
+   bitmap b = *b_;
+   bitmap_element *a_elt = a->first;
+   bitmap_element *b_elt = b->first;
+   bitmap_element *a_prev = NULL;
+   bitmap_element **a_prev_pnext = &a->first;
+   bool changed = false;
+ 
+   gcc_checking_assert (!a->tree_form && !b->tree_form);
+   gcc_assert (a->obstack == b->obstack);
+   if (a == b)
+     return false;
+ 
+   while (b_elt)
+     {
+       /* If A lags behind B, just advance it.  */
+       if (!a_elt || a_elt->indx == b_elt->indx)
+ 	{
+ 	  changed = bitmap_elt_ior (a, a_elt, a_prev, a_elt, b_elt, changed);
+ 	  b_elt = b_elt->next;
+ 	}
+       else if (a_elt->indx > b_elt->indx)
+ 	{
+ 	  bitmap_element *b_elt_next = b_elt->next;
+ 	  bitmap_list_unlink_element (b, b_elt, false);
+ 	  bitmap_list_insert_element_after (a, a_prev, b_elt->indx, b_elt);
+ 	  b_elt = b_elt_next;
+ 	}
+ 
+       a_prev = *a_prev_pnext;
+       a_prev_pnext = &a_prev->next;
+       a_elt = *a_prev_pnext;
+     }
+ 
+   gcc_checking_assert (!a->current == !a->first);
+   if (a->current)
+     a->indx = a->current->indx;
+ 
+   if (b->obstack)
+     BITMAP_FREE (*b_);
+   else
+     bitmap_clear (b);
+   return changed;
+ }
+ 
+ /* DST = A ^ B  */
+ 
+ void
+ bitmap_xor (bitmap dst, const_bitmap a, const_bitmap b)
+ {
+   bitmap_element *dst_elt = dst->first;
+   const bitmap_element *a_elt = a->first;
+   const bitmap_element *b_elt = b->first;
+   bitmap_element *dst_prev = NULL;
+ 
+   gcc_checking_assert (!dst->tree_form && !a->tree_form && !b->tree_form);
+   gcc_assert (dst != a && dst != b);
+ 
+   if (a == b)
+     {
+       bitmap_clear (dst);
+       return;
+     }
+ 
+   while (a_elt || b_elt)
+     {
+       if (a_elt && b_elt && a_elt->indx == b_elt->indx)
+ 	{
+ 	  /* Matching elts, generate A ^ B.  */
+ 	  unsigned ix;
+ 	  BITMAP_WORD ior = 0;
+ 
+ 	  if (!dst_elt)
+ 	    dst_elt = bitmap_list_insert_element_after (dst, dst_prev,
+ 							a_elt->indx);
+ 	  else
+ 	    dst_elt->indx = a_elt->indx;
+ 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	    {
+ 	      BITMAP_WORD r = a_elt->bits[ix] ^ b_elt->bits[ix];
+ 
+ 	      ior |= r;
+ 	      dst_elt->bits[ix] = r;
+ 	    }
+ 	  a_elt = a_elt->next;
+ 	  b_elt = b_elt->next;
+ 	  if (ior)
+ 	    {
+ 	      dst_prev = dst_elt;
+ 	      dst_elt = dst_elt->next;
+ 	    }
+ 	}
+       else
+ 	{
+ 	  /* Copy a single element.  */
+ 	  const bitmap_element *src;
+ 
+ 	  if (!b_elt || (a_elt && a_elt->indx < b_elt->indx))
+ 	    {
+ 	      src = a_elt;
+ 	      a_elt = a_elt->next;
+ 	    }
+ 	  else
+ 	    {
+ 	      src = b_elt;
+ 	      b_elt = b_elt->next;
+ 	    }
+ 
+ 	  if (!dst_elt)
+ 	    dst_elt = bitmap_list_insert_element_after (dst, dst_prev,
+ 							src->indx);
+ 	  else
+ 	    dst_elt->indx = src->indx;
+ 	  memcpy (dst_elt->bits, src->bits, sizeof (dst_elt->bits));
+ 	  dst_prev = dst_elt;
+ 	  dst_elt = dst_elt->next;
+ 	}
+     }
+   /* Ensure that dst->current is valid.  */
+   dst->current = dst->first;
+   bitmap_elt_clear_from (dst, dst_elt);
+   gcc_checking_assert (!dst->current == !dst->first);
+   if (dst->current)
+     dst->indx = dst->current->indx;
+ }
+ 
+ /* A ^= B */
+ 
+ void
+ bitmap_xor_into (bitmap a, const_bitmap b)
+ {
+   bitmap_element *a_elt = a->first;
+   const bitmap_element *b_elt = b->first;
+   bitmap_element *a_prev = NULL;
+ 
+   gcc_checking_assert (!a->tree_form && !b->tree_form);
+ 
+   if (a == b)
+     {
+       bitmap_clear (a);
+       return;
+     }
+ 
+   while (b_elt)
+     {
+       if (!a_elt || b_elt->indx < a_elt->indx)
+ 	{
+ 	  /* Copy b_elt.  */
+ 	  bitmap_element *dst = bitmap_list_insert_element_after (a, a_prev,
+ 								  b_elt->indx);
+ 	  memcpy (dst->bits, b_elt->bits, sizeof (dst->bits));
+ 	  a_prev = dst;
+ 	  b_elt = b_elt->next;
+ 	}
+       else if (a_elt->indx < b_elt->indx)
+ 	{
+ 	  a_prev = a_elt;
+ 	  a_elt = a_elt->next;
+ 	}
+       else
+ 	{
+ 	  /* Matching elts, generate A ^= B.  */
+ 	  unsigned ix;
+ 	  BITMAP_WORD ior = 0;
+ 	  bitmap_element *next = a_elt->next;
+ 
+ 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	    {
+ 	      BITMAP_WORD r = a_elt->bits[ix] ^ b_elt->bits[ix];
+ 
+ 	      ior |= r;
+ 	      a_elt->bits[ix] = r;
+ 	    }
+ 	  b_elt = b_elt->next;
+ 	  if (ior)
+ 	    a_prev = a_elt;
+ 	  else
+ 	    bitmap_list_unlink_element (a, a_elt);
+ 	  a_elt = next;
+ 	}
+     }
+   gcc_checking_assert (!a->current == !a->first);
+   if (a->current)
+     a->indx = a->current->indx;
+ }
+ 
+ /* Return true if two bitmaps are identical.
+    We do not bother with a check for pointer equality, as that never
+    occurs in practice.  */
+ 
+ bool
+ bitmap_equal_p (const_bitmap a, const_bitmap b)
+ {
+   const bitmap_element *a_elt;
+   const bitmap_element *b_elt;
+   unsigned ix;
+ 
+   gcc_checking_assert (!a->tree_form && !b->tree_form);
+ 
+   for (a_elt = a->first, b_elt = b->first;
+        a_elt && b_elt;
+        a_elt = a_elt->next, b_elt = b_elt->next)
+     {
+       if (a_elt->indx != b_elt->indx)
+ 	return false;
+       for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	if (a_elt->bits[ix] != b_elt->bits[ix])
+ 	  return false;
+     }
+   return !a_elt && !b_elt;
+ }
+ 
+ /* Return true if A AND B is not empty.  */
+ 
+ bool
+ bitmap_intersect_p (const_bitmap a, const_bitmap b)
+ {
+   const bitmap_element *a_elt;
+   const bitmap_element *b_elt;
+   unsigned ix;
+ 
+   gcc_checking_assert (!a->tree_form && !b->tree_form);
+ 
+   for (a_elt = a->first, b_elt = b->first;
+        a_elt && b_elt;)
+     {
+       if (a_elt->indx < b_elt->indx)
+ 	a_elt = a_elt->next;
+       else if (b_elt->indx < a_elt->indx)
+ 	b_elt = b_elt->next;
+       else
+ 	{
+ 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	    if (a_elt->bits[ix] & b_elt->bits[ix])
+ 	      return true;
+ 	  a_elt = a_elt->next;
+ 	  b_elt = b_elt->next;
+ 	}
+     }
+   return false;
+ }
+ 
+ /* Return true if A AND NOT B is not empty.  */
+ 
+ bool
+ bitmap_intersect_compl_p (const_bitmap a, const_bitmap b)
+ {
+   const bitmap_element *a_elt;
+   const bitmap_element *b_elt;
+   unsigned ix;
+ 
+   gcc_checking_assert (!a->tree_form && !b->tree_form);
+ 
+   for (a_elt = a->first, b_elt = b->first;
+        a_elt && b_elt;)
+     {
+       if (a_elt->indx < b_elt->indx)
+ 	return true;
+       else if (b_elt->indx < a_elt->indx)
+ 	b_elt = b_elt->next;
+       else
+ 	{
+ 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	    if (a_elt->bits[ix] & ~b_elt->bits[ix])
+ 	      return true;
+ 	  a_elt = a_elt->next;
+ 	  b_elt = b_elt->next;
+ 	}
+     }
+   return a_elt != NULL;
+ }
+ 
+ 
+ /* DST = A | (FROM1 & ~FROM2).  Return true if DST changes.  */
+ 
+ bool
+ bitmap_ior_and_compl (bitmap dst, const_bitmap a, const_bitmap b, const_bitmap kill)
+ {
+   bool changed = false;
+ 
+   bitmap_element *dst_elt = dst->first;
+   const bitmap_element *a_elt = a->first;
+   const bitmap_element *b_elt = b->first;
+   const bitmap_element *kill_elt = kill->first;
+   bitmap_element *dst_prev = NULL;
+   bitmap_element **dst_prev_pnext = &dst->first;
+ 
+   gcc_checking_assert (!dst->tree_form && !a->tree_form && !b->tree_form
+ 		       && !kill->tree_form);
+   gcc_assert (dst != a && dst != b && dst != kill);
+ 
+   /* Special cases.  We don't bother checking for bitmap_equal_p (b, kill).  */
+   if (b == kill || bitmap_empty_p (b))
+     {
+       changed = !bitmap_equal_p (dst, a);
+       if (changed)
+ 	bitmap_copy (dst, a);
+       return changed;
+     }
+   if (bitmap_empty_p (kill))
+     return bitmap_ior (dst, a, b);
+   if (bitmap_empty_p (a))
+     return bitmap_and_compl (dst, b, kill);
+ 
+   while (a_elt || b_elt)
+     {
+       bool new_element = false;
+ 
+       if (b_elt)
+ 	while (kill_elt && kill_elt->indx < b_elt->indx)
+ 	  kill_elt = kill_elt->next;
+ 
+       if (b_elt && kill_elt && kill_elt->indx == b_elt->indx
+ 	  && (!a_elt || a_elt->indx >= b_elt->indx))
+         {
+ 	  bitmap_element tmp_elt;
+ 	  unsigned ix;
+ 
+ 	  BITMAP_WORD ior = 0;
+ 	  tmp_elt.indx = b_elt->indx;
+ 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+             {
+               BITMAP_WORD r = b_elt->bits[ix] & ~kill_elt->bits[ix];
+               ior |= r;
+               tmp_elt.bits[ix] = r;
+             }
+ 
+ 	  if (ior)
+ 	    {
+ 	      changed = bitmap_elt_ior (dst, dst_elt, dst_prev,
+ 				        a_elt, &tmp_elt, changed);
+ 	      new_element = true;
+ 	      if (a_elt && a_elt->indx == b_elt->indx)
+                 a_elt = a_elt->next;
+ 	    }
+ 
+ 	  b_elt = b_elt->next;
+ 	  kill_elt = kill_elt->next;
+ 	}
+       else
+ 	{
+ 	  changed = bitmap_elt_ior (dst, dst_elt, dst_prev,
+ 				    a_elt, b_elt, changed);
+ 	  new_element = true;
+ 
+           if (a_elt && b_elt && a_elt->indx == b_elt->indx)
+ 	    {
+ 	      a_elt = a_elt->next;
+ 	      b_elt = b_elt->next;
+ 	    }
+           else
+ 	    {
+ 	      if (a_elt && (!b_elt || a_elt->indx <= b_elt->indx))
+                 a_elt = a_elt->next;
+               else if (b_elt && (!a_elt || b_elt->indx <= a_elt->indx))
+                 b_elt = b_elt->next;
+ 	    }
+ 	}
+ 
+       if (new_element)
+ 	{
+ 	  dst_prev = *dst_prev_pnext;
+ 	  dst_prev_pnext = &dst_prev->next;
+ 	  dst_elt = *dst_prev_pnext;
+ 	}
+     }
+ 
+   if (dst_elt)
+     {
+       changed = true;
+       /* Ensure that dst->current is valid.  */
+       dst->current = dst->first;
+       bitmap_elt_clear_from (dst, dst_elt);
+     }
+   gcc_checking_assert (!dst->current == !dst->first);
+   if (dst->current)
+     dst->indx = dst->current->indx;
+ 
+   return changed;
+ }
+ 
+ /* A |= (B & ~C).  Return true if A changes.  */
+ 
+ bool
+ bitmap_ior_and_compl_into (bitmap a, const_bitmap b, const_bitmap c)
+ {
+   bitmap_element *a_elt = a->first;
+   const bitmap_element *b_elt = b->first;
+   const bitmap_element *c_elt = c->first;
+   bitmap_element and_elt;
+   bitmap_element *a_prev = NULL;
+   bitmap_element **a_prev_pnext = &a->first;
+   bool changed = false;
+   unsigned ix;
+ 
+   gcc_checking_assert (!a->tree_form && !b->tree_form && !c->tree_form);
+ 
+   if (a == b)
+     return false;
+   if (bitmap_empty_p (c))
+     return bitmap_ior_into (a, b);
+   else if (bitmap_empty_p (a))
+     return bitmap_and_compl (a, b, c);
+ 
+   and_elt.indx = -1;
+   while (b_elt)
+     {
+       /* Advance C.  */
+       while (c_elt && c_elt->indx < b_elt->indx)
+ 	c_elt = c_elt->next;
+ 
+       const bitmap_element *and_elt_ptr;
+       if (c_elt && c_elt->indx == b_elt->indx)
+ 	{
+ 	  BITMAP_WORD overall = 0;
+ 	  and_elt_ptr = &and_elt;
+ 	  and_elt.indx = b_elt->indx;
+ 	  for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	    {
+ 	      and_elt.bits[ix] = b_elt->bits[ix] & ~c_elt->bits[ix];
+ 	      overall |= and_elt.bits[ix];
+ 	    }
+ 	  if (!overall)
+ 	    {
+ 	      b_elt = b_elt->next;
+ 	      continue;
+ 	    }
+ 	}
+       else
+ 	and_elt_ptr = b_elt;
+ 
+       b_elt = b_elt->next;
+ 
+       /* Now find a place to insert AND_ELT.  */
+       do
+ 	{
+ 	  ix = a_elt ? a_elt->indx : and_elt_ptr->indx;
+           if (ix == and_elt_ptr->indx)
+ 	    changed = bitmap_elt_ior (a, a_elt, a_prev, a_elt,
+ 				      and_elt_ptr, changed);
+           else if (ix > and_elt_ptr->indx)
+ 	    changed = bitmap_elt_copy (a, NULL, a_prev, and_elt_ptr, changed);
+ 
+           a_prev = *a_prev_pnext;
+           a_prev_pnext = &a_prev->next;
+           a_elt = *a_prev_pnext;
+ 
+           /* If A lagged behind B/C, we advanced it so loop once more.  */
+ 	}
+       while (ix < and_elt_ptr->indx);
+     }
+ 
+   gcc_checking_assert (!a->current == !a->first);
+   if (a->current)
+     a->indx = a->current->indx;
+   return changed;
+ }
+ 
+ /* A |= (B & C).  Return true if A changes.  */
+ 
+ bool
+ bitmap_ior_and_into (bitmap a, const_bitmap b, const_bitmap c)
+ {
+   bitmap_element *a_elt = a->first;
+   const bitmap_element *b_elt = b->first;
+   const bitmap_element *c_elt = c->first;
+   bitmap_element and_elt;
+   bitmap_element *a_prev = NULL;
+   bitmap_element **a_prev_pnext = &a->first;
+   bool changed = false;
+   unsigned ix;
+ 
+   gcc_checking_assert (!a->tree_form && !b->tree_form && !c->tree_form);
+ 
+   if (b == c)
+     return bitmap_ior_into (a, b);
+   if (bitmap_empty_p (b) || bitmap_empty_p (c))
+     return false;
+ 
+   and_elt.indx = -1;
+   while (b_elt && c_elt)
+     {
+       BITMAP_WORD overall;
+ 
+       /* Find a common item of B and C.  */
+       while (b_elt->indx != c_elt->indx)
+ 	{
+           if (b_elt->indx < c_elt->indx)
+ 	    {
+ 	      b_elt = b_elt->next;
+ 	      if (!b_elt)
+ 		goto done;
+ 	    }
+           else
+ 	    {
+ 	      c_elt = c_elt->next;
+ 	      if (!c_elt)
+ 		goto done;
+ 	    }
+ 	}
+ 
+       overall = 0;
+       and_elt.indx = b_elt->indx;
+       for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++)
+ 	{
+ 	  and_elt.bits[ix] = b_elt->bits[ix] & c_elt->bits[ix];
+ 	  overall |= and_elt.bits[ix];
+ 	}
+ 
+       b_elt = b_elt->next;
+       c_elt = c_elt->next;
+       if (!overall)
+ 	continue;
+ 
+       /* Now find a place to insert AND_ELT.  */
+       do
+ 	{
+ 	  ix = a_elt ? a_elt->indx : and_elt.indx;
+           if (ix == and_elt.indx)
+ 	    changed = bitmap_elt_ior (a, a_elt, a_prev, a_elt, &and_elt, changed);
+           else if (ix > and_elt.indx)
+ 	    changed = bitmap_elt_copy (a, NULL, a_prev, &and_elt, changed);
+ 
+           a_prev = *a_prev_pnext;
+           a_prev_pnext = &a_prev->next;
+           a_elt = *a_prev_pnext;
+ 
+           /* If A lagged behind B/C, we advanced it so loop once more.  */
+ 	}
+       while (ix < and_elt.indx);
+     }
+ 
+  done:
+   gcc_checking_assert (!a->current == !a->first);
+   if (a->current)
+     a->indx = a->current->indx;
+   return changed;
+ }
+ 
+ /* Compute hash of bitmap (for purposes of hashing).  */
+ 
+ hashval_t
+ bitmap_hash (const_bitmap head)
+ {
+   const bitmap_element *ptr;
+   BITMAP_WORD hash = 0;
+   int ix;
+ 
+   gcc_checking_assert (!head->tree_form);
+ 
+   for (ptr = head->first; ptr; ptr = ptr->next)
+     {
+       hash ^= ptr->indx;
+       for (ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
+ 	hash ^= ptr->bits[ix];
+     }
+   return (hashval_t)hash;
+ }
+ 
+ 
+ /* Function to obtain a vector of bitmap elements in bit order from
+    HEAD in tree view.  */
+ 
+ static void
+ bitmap_tree_to_vec (vec<bitmap_element *> &elts, const_bitmap head)
+ {
+   gcc_checking_assert (head->tree_form);
+   auto_vec<bitmap_element *, 32> stack;
+   bitmap_element *e = head->first;
+   while (true)
+     {
+       while (e != NULL)
+ 	{
+ 	  stack.safe_push (e);
+ 	  e = e->prev;
+ 	}
+       if (stack.is_empty ())
+ 	break;
+ 
+       e = stack.pop ();
+       elts.safe_push (e);
+       e = e->next;
+     }
+ }
+ 
+ /* Debugging function to print out the contents of a bitmap element.  */
+ 
+ DEBUG_FUNCTION void
+ debug_bitmap_elt_file (FILE *file, const bitmap_element *ptr)
+ {
+   unsigned int i, j, col = 26;
+ 
+   fprintf (file, "\t" HOST_PTR_PRINTF " next = " HOST_PTR_PRINTF
+ 	   " prev = " HOST_PTR_PRINTF " indx = %u\n\t\tbits = {",
+ 	   (const void*) ptr, (const void*) ptr->next,
+ 	   (const void*) ptr->prev, ptr->indx);
+ 
+   for (i = 0; i < BITMAP_ELEMENT_WORDS; i++)
+     for (j = 0; j < BITMAP_WORD_BITS; j++)
+       if ((ptr->bits[i] >> j) & 1)
+ 	{
+ 	  if (col > 70)
+ 	    {
+ 	      fprintf (file, "\n\t\t\t");
+ 	      col = 24;
+ 	    }
+ 
+ 	  fprintf (file, " %u", (ptr->indx * BITMAP_ELEMENT_ALL_BITS
+ 				 + i * BITMAP_WORD_BITS + j));
+ 	  col += 4;
+ 	}
+ 
+   fprintf (file, " }\n");
+ }
+ 
+ /* Debugging function to print out the contents of a bitmap.  */
+ 
+ DEBUG_FUNCTION void
+ debug_bitmap_file (FILE *file, const_bitmap head)
+ {
+   const bitmap_element *ptr;
+ 
+   fprintf (file, "\nfirst = " HOST_PTR_PRINTF
+ 	   " current = " HOST_PTR_PRINTF " indx = %u\n",
+ 	   (void *) head->first, (void *) head->current, head->indx);
+ 
+   if (head->tree_form)
+     {
+       auto_vec<bitmap_element *, 32> elts;
+       bitmap_tree_to_vec (elts, head);
+       for (unsigned i = 0; i < elts.length (); ++i)
+ 	debug_bitmap_elt_file (file, elts[i]);
+     }
+   else
+     for (ptr = head->first; ptr; ptr = ptr->next)
+       debug_bitmap_elt_file (file, ptr);
+ }
+ 
+ /* Function to be called from the debugger to print the contents
+    of a bitmap.  */
+ 
+ DEBUG_FUNCTION void
+ debug_bitmap (const_bitmap head)
+ {
+   debug_bitmap_file (stderr, head);
+ }
+ 
+ /* Function to print out the contents of a bitmap.  Unlike debug_bitmap_file,
+    it does not print anything but the bits.  */
+ 
+ DEBUG_FUNCTION void
+ bitmap_print (FILE *file, const_bitmap head, const char *prefix,
+ 	      const char *suffix)
+ {
+   const char *comma = "";
+   unsigned i;
+ 
+   fputs (prefix, file);
+   if (head->tree_form)
+     {
+       auto_vec<bitmap_element *, 32> elts;
+       bitmap_tree_to_vec (elts, head);
+       for (i = 0; i < elts.length (); ++i)
+ 	for (unsigned ix = 0; ix != BITMAP_ELEMENT_WORDS; ++ix)
+ 	  {
+ 	    BITMAP_WORD word = elts[i]->bits[ix];
+ 	    for (unsigned bit = 0; bit != BITMAP_WORD_BITS; ++bit)
+ 	      if (word & ((BITMAP_WORD)1 << bit))
+ 		{
+ 		  fprintf (file, "%s%d", comma,
+ 			   (bit + BITMAP_WORD_BITS * ix
+ 			    + elts[i]->indx * BITMAP_ELEMENT_ALL_BITS));
+ 		  comma = ", ";
+ 		}
+ 	  }
+     }
+   else
+     {
+       bitmap_iterator bi;
+       EXECUTE_IF_SET_IN_BITMAP (head, 0, i, bi)
+ 	{
+ 	  fprintf (file, "%s%d", comma, i);
+ 	  comma = ", ";
+ 	}
+     }
+   fputs (suffix, file);
+ }
+ 
+ /* Output per-bitmap memory usage statistics.  */
+ void
+ dump_bitmap_statistics (void)
+ {
+   if (!GATHER_STATISTICS)
+     return;
+ 
+   bitmap_mem_desc.dump (BITMAP_ORIGIN);
+ }
+ 
+ DEBUG_FUNCTION void
+ debug (const bitmap_head &ref)
+ {
+   dump_bitmap (stderr, &ref);
+ }
+ 
+ DEBUG_FUNCTION void
+ debug (const bitmap_head *ptr)
+ {
+   if (ptr)
+     debug (*ptr);
+   else
+     fprintf (stderr, "<nil>\n");
+ }
+ 
+ DEBUG_FUNCTION void
+ debug (const auto_bitmap &ref)
+ {
+   debug ((const bitmap_head &) ref);
+ }
+ 
+ DEBUG_FUNCTION void
+ debug (const auto_bitmap *ptr)
+ {
+   debug ((const bitmap_head *) ptr);
+ }
+ 
+ void
+ bitmap_head::dump ()
+ {
+   debug (this);
+ }
+ 
+ #if CHECKING_P
+ 
+ namespace selftest {
+ 
+ /* Selftests for bitmaps.  */
+ 
+ /* Freshly-created bitmaps ought to be empty.  */
+ 
+ static void
+ test_gc_alloc ()
+ {
+   bitmap b = bitmap_gc_alloc ();
+   ASSERT_TRUE (bitmap_empty_p (b));
+ }
+ 
+ /* Verify bitmap_set_range.  */
+ 
+ static void
+ test_set_range ()
+ {
+   bitmap b = bitmap_gc_alloc ();
+   ASSERT_TRUE (bitmap_empty_p (b));
+ 
+   bitmap_set_range (b, 7, 5);
+   ASSERT_FALSE (bitmap_empty_p (b));
+   ASSERT_EQ (5, bitmap_count_bits (b));
+ 
+   /* Verify bitmap_bit_p at the boundaries.  */
+   ASSERT_FALSE (bitmap_bit_p (b, 6));
+   ASSERT_TRUE (bitmap_bit_p (b, 7));
+   ASSERT_TRUE (bitmap_bit_p (b, 11));
+   ASSERT_FALSE (bitmap_bit_p (b, 12));
+ }
+ 
+ /* Verify splitting a range into two pieces using bitmap_clear_bit.  */
+ 
+ static void
+ test_clear_bit_in_middle ()
+ {
+   bitmap b = bitmap_gc_alloc ();
+ 
+   /* Set b to [100..200].  */
+   bitmap_set_range (b, 100, 100);
+   ASSERT_EQ (100, bitmap_count_bits (b));
+ 
+   /* Clear a bit in the middle.  */
+   bool changed = bitmap_clear_bit (b, 150);
+   ASSERT_TRUE (changed);
+   ASSERT_EQ (99, bitmap_count_bits (b));
+   ASSERT_TRUE (bitmap_bit_p (b, 149));
+   ASSERT_FALSE (bitmap_bit_p (b, 150));
+   ASSERT_TRUE (bitmap_bit_p (b, 151));
+ }
+ 
+ /* Verify bitmap_copy.  */
+ 
+ static void
+ test_copying ()
+ {
+   bitmap src = bitmap_gc_alloc ();
+   bitmap_set_range (src, 40, 10);
+ 
+   bitmap dst = bitmap_gc_alloc ();
+   ASSERT_FALSE (bitmap_equal_p (src, dst));
+   bitmap_copy (dst, src);
+   ASSERT_TRUE (bitmap_equal_p (src, dst));
+ 
+   /* Verify that we can make them unequal again...  */
+   bitmap_set_range (src, 70, 5);
+   ASSERT_FALSE (bitmap_equal_p (src, dst));
+ 
+   /* ...and that changing src after the copy didn't affect
+      the other: */
+   ASSERT_FALSE (bitmap_bit_p (dst, 70));
+ }
+ 
+ /* Verify bitmap_single_bit_set_p.  */
+ 
+ static void
+ test_bitmap_single_bit_set_p ()
+ {
+   bitmap b = bitmap_gc_alloc ();
+ 
+   ASSERT_FALSE (bitmap_single_bit_set_p (b));
+ 
+   bitmap_set_range (b, 42, 1);
+   ASSERT_TRUE (bitmap_single_bit_set_p (b));
+   ASSERT_EQ (42, bitmap_first_set_bit (b));
+ 
+   bitmap_set_range (b, 1066, 1);
+   ASSERT_FALSE (bitmap_single_bit_set_p (b));
+   ASSERT_EQ (42, bitmap_first_set_bit (b));
+ 
+   bitmap_clear_range (b, 0, 100);
+   ASSERT_TRUE (bitmap_single_bit_set_p (b));
+   ASSERT_EQ (1066, bitmap_first_set_bit (b));
+ }
+ 
+ /* Verify accessing aligned bit chunks works as expected.  */
+ 
+ static void
+ test_aligned_chunk (unsigned num_bits)
+ {
+   bitmap b = bitmap_gc_alloc ();
+   int limit = 2 ^ num_bits;
+ 
+   int index = 3;
+   for (int x = 0; x < limit; x++)
+     {
+       bitmap_set_aligned_chunk (b, index, num_bits, (BITMAP_WORD) x);
+       ASSERT_TRUE ((int) bitmap_get_aligned_chunk (b, index, num_bits) == x);
+       ASSERT_TRUE ((int) bitmap_get_aligned_chunk (b, index + 1,
+ 						   num_bits) == 0);
+       ASSERT_TRUE ((int) bitmap_get_aligned_chunk (b, index - 1,
+ 						   num_bits) == 0);
+       index += 3;
+     }
+   index = 3;
+   for (int x = 0; x < limit ; x++)
+     {
+       ASSERT_TRUE ((int) bitmap_get_aligned_chunk (b, index, num_bits) == x);
+       index += 3;
+     }
+ }
+ 
+ /* Run all of the selftests within this file.  */
+ 
+ void
+ bitmap_cc_tests ()
+ {
+   test_gc_alloc ();
+   test_set_range ();
+   test_clear_bit_in_middle ();
+   test_copying ();
+   test_bitmap_single_bit_set_p ();
+   /* Test 2, 4 and 8 bit aligned chunks.  */
+   test_aligned_chunk (2);
+   test_aligned_chunk (4);
+   test_aligned_chunk (8);
+ }
+ 
+ } // namespace selftest
+ #endif /* CHECKING_P */
+ 
+ #include "gt-bitmap.h"
diff -Nrcpad gcc-11.3.0/gcc/bitmap.h gcc-12.1.0/gcc/bitmap.h
*** gcc-11.3.0/gcc/bitmap.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/bitmap.h	Fri May  6 07:30:56 2022
***************
*** 1,5 ****
  /* Functions to support general ended bitmaps.
!    Copyright (C) 1997-2021 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Functions to support general ended bitmaps.
!    Copyright (C) 1997-2022 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** extern bool bitmap_clear_bit (bitmap, in
*** 436,442 ****
  extern bool bitmap_set_bit (bitmap, int);
  
  /* Return true if a bit is set in a bitmap.  */
! extern int bitmap_bit_p (const_bitmap, int);
  
  /* Set and get multiple bit values in a sparse bitmap.  This allows a bitmap to
     function as a sparse array of bit patterns where the patterns are
--- 436,442 ----
  extern bool bitmap_set_bit (bitmap, int);
  
  /* Return true if a bit is set in a bitmap.  */
! extern bool bitmap_bit_p (const_bitmap, int);
  
  /* Set and get multiple bit values in a sparse bitmap.  This allows a bitmap to
     function as a sparse array of bit patterns where the patterns are
*************** class auto_bitmap
*** 958,971 ****
    // Prevent making a copy that references our bitmap.
    auto_bitmap (const auto_bitmap &);
    auto_bitmap &operator = (const auto_bitmap &);
- #if __cplusplus >= 201103L
    auto_bitmap (auto_bitmap &&);
    auto_bitmap &operator = (auto_bitmap &&);
- #endif
  
    bitmap_head m_bits;
  };
  
  /* Base class for bitmap_view; see there for details.  */
  template<typename T, typename Traits = array_traits<T> >
  class base_bitmap_view
--- 958,972 ----
    // Prevent making a copy that references our bitmap.
    auto_bitmap (const auto_bitmap &);
    auto_bitmap &operator = (const auto_bitmap &);
    auto_bitmap (auto_bitmap &&);
    auto_bitmap &operator = (auto_bitmap &&);
  
    bitmap_head m_bits;
  };
  
+ extern void debug (const auto_bitmap &ref);
+ extern void debug (const auto_bitmap *ptr);
+ 
  /* Base class for bitmap_view; see there for details.  */
  template<typename T, typename Traits = array_traits<T> >
  class base_bitmap_view
diff -Nrcpad gcc-11.3.0/gcc/brig/ChangeLog gcc-12.1.0/gcc/brig/ChangeLog
*** gcc-11.3.0/gcc/brig/ChangeLog	Thu Apr 21 07:59:16 2022
--- gcc-12.1.0/gcc/brig/ChangeLog	Thu Jan  1 00:00:00 1970
***************
*** 1,445 ****
- 2022-04-21  Release Manager
- 
- 	* GCC 11.3.0 released.
- 
- 2021-07-28  Release Manager
- 
- 	* GCC 11.2.0 released.
- 
- 2021-04-27  Release Manager
- 
- 	* GCC 11.1.0 released.
- 
- 2020-12-16  Martin Liska  <mliska@suse.cz>
- 
- 	* lang.opt: Remove usage of Report.
- 
- 2020-11-20  Jakub Jelinek  <jakub@redhat.com>
- 
- 	PR other/97911
- 	* Make-lang.in (brig.serial): Change from goal to a variable.
- 	(.PHONY): Drop brig.serial and brig.prev.
- 	(brig1$(exeext)): Depend on $(brig.serial) rather than brig.serial.
- 
- 2020-11-18  Jakub Jelinek  <jakub@redhat.com>
- 
- 	* Make-lang.in (brig.serial): New goal.
- 	(.PHONY): Add brig.serial brig.prev.
- 	(brig1$(exeext)): Depend on brig.prev.  Call LINK_PROGRESS.
- 
- 2020-08-03  Martin Jambor  <mjambor@suse.cz>
- 
- 	* brigfrontend/brig-util.h (hsa_type_packed_p): Declared.
- 	* brigfrontend/brig-util.cc (hsa_type_packed_p): Moved here from
- 	removed gcc/hsa-common.c.
- 	* brigfrontend/hsa-brig-format.h: New file.
- 
- 2020-01-01  Jakub Jelinek  <jakub@redhat.com>
- 
- 	Update copyright years.
- 
- 2019-10-04  Joseph Myers  <joseph@codesourcery.com>
- 
- 	* brig-lang.c (flag_isoc2x): New variable.
- 
- 2019-08-23  Jakub Jelinek  <jakub@redhat.com>
- 
- 	PR middle-end/91283
- 	* brig-lang.c (brig_langhook_post_options): Set flag_excess_precision
- 	instead of flag_excess_precision_cmdline.
- 
- 2019-06-25  Jozef Lawrynowicz  <jozef.l@mittosystems.com>
- 
- 	* brig-lang.c (brig_build_c_type_nodes): Accept "__intN__"
- 	format of "__intN" types for SIZE_TYPE.
- 
- 2019-05-16  Martin Sebor  <msebor@redhat.com>
- 
- 	* brigfrontend/brig-control-handler.cc
- 	(brig_directive_control_handler::operator): Remove trailing newline
- 	from a diagnostic.
- 	* brigfrontend/brig-module-handler.cc
- 	(brig_directive_module_handler::operator): Remove a duplicated space
- 	from a diagnostic.
- 
- 2019-01-01  Jakub Jelinek  <jakub@redhat.com>
- 
- 	Update copyright years.
- 
- 2018-10-17  David Malcolm  <dmalcolm@redhat.com>
- 
- 	* Make-lang.in (selftest-brig): New.
- 
- 2018-07-20  Martin Sebor  <msebor@redhat.com>
- 
- 	PR middle-end/82063
- 	* brig-lang.c (brig_langhook_handle_option): Change function
- 	argument to HOST_WIDE_INT.
- 
- 2018-07-04  Martin Jambor  <mjambor@suse.cz>
- 
- 	PR hsa/86371
- 	* Make-lang.in (BRIGINCLUDES): Remove erroneous include path in $HOME.
- 
- 2018-06-28  Martin Liska  <mliska@suse.cz>
- 
- 	* brigspec.c: Add missing header file inclusion.
- 
- 2018-06-08  David Malcolm  <dmalcolm@redhat.com>
- 
- 	* brigfrontend/brig-to-generic.cc
- 	(brig_to_generic::write_globals): Use TDF_NONE rather than 0.
- 	(dump_function): Likewise.
- 
- 2018-05-18  Richard Sandiford  <richard.sandiford@linaro.org>
- 
- 	* brigfrontend/brig-function.cc
- 	(brig_function::get_builtin_for_hsa_opcode): Use BUILT_IN_FMA
- 	for BRIG_OPCODE_FMA.
- 	(brig_function::get_tree_code_for_hsa_opcode): Treat BUILT_IN_FMA
- 	as a call.
- 
- 2018-05-04  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* brigfrontend/brig-basic-inst-handler.cc: Fix handling of NOPs.
- 
- 2018-05-04  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	Add flag -fassume-phsa that is on by default. If -fno-assume-phsa
- 	is given, these optimizations are disabled.  With this flag, gccbrig
- 	can generate GENERIC that assumes we are targeting a phsa-runtime
- 	based implementation, which allows us to expose the work-item context
- 	accesses to retrieve WI IDs etc.  which helps optimizers.
- 	First optimization that takes advantage of this is to get rid of
- 	the setworkitemid calls whenever we have non-inlined calls that
- 	use IDs internally.  Other optimizations added in this commit:
- 	- expand absoluteid to similar level of simplicity as workitemid.
- 	At the moment absoluteid is the best indexing ID to end up with
- 	WG vectorization.
- 	- propagate ID variables closer to their uses. This is mainly
- 	to avoid known useless casts, which confuse at least scalar
- 	evolution analysis.
- 	- use signed long long for storing IDs. Unsigned integers have
- 	defined wraparound semantics, which confuse at least scalar
- 	evolution analysis, leading to unvectorizable WI loops.
- 	- also refactor some BRIG function generation helpers to brig_function.
- 	- no point in having the wi-loop as a for-loop. It's really
- 	a do...while and SCEV can analyze it just fine still.
- 	- add consts to ptrs etc. in BRIG builtin defs.
- 	Improves optimization opportunities.
- 	- add qualifiers to generated function parameters.
- 	Const and restrict on the hidden local/private pointers,
- 	the arg buffer and the context pointer help some optimizations.
- 	* brigfrontend/brig-basic-inst-handler.cc: See above.
- 	* brigfrontend/brig-branch-inst-handler.cc: See above.
- 	* brigfrontend/brig-cmp-inst-handler.cc: See above.
- 	* brigfrontend/brig-code-entry-handler.cc: See above.
- 	* brigfrontend/brig-code-entry-handler.h: See above.
- 	* brigfrontend/brig-control-handler.cc: See above.
- 	* brigfrontend/brig-cvt-inst-handler.cc: See above.
- 	* brigfrontend/brig-function-handler.cc: See above.
- 	* brigfrontend/brig-function.cc: See above.
- 	* brigfrontend/brig-function.h: See above.
- 	* brigfrontend/brig-label-handler.cc: See above.
- 	* brigfrontend/brig-lane-inst-handler.cc: See above.
- 	* brigfrontend/brig-mem-inst-handler.cc: See above.
- 	* brigfrontend/phsa.h: See above.
- 	* lang.opt: See above.
- 
- 2018-05-04  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* brigfrontend/brig-function-handler.cc: Skip multiple forward
- 	declarations of the same function.
- 
- 2018-05-04  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* brig-lang.c: Do not allow optimizations based on known C
- 	builtins.
- 
- 2018-05-04  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* brig-lang.c: Allow controlling strict aliasing from
- 	cmd line.
- 
- 2018-05-04  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* brigfrontend/brig-code-entry-handler.cc: The modulo in
- 	ID computation should not be needed.
- 
- 2018-05-04  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* brig-lang.c: Add support for whole program
- 	optimizations by marking the kernels externally visible.
- 	* brigfrontend/brig-branch-inst-handler.cc: See above.
- 	* brigfrontend/brig-function-handler.cc: See above.
- 	* brigfrontend/brig-function.cc: See above.
- 	* brigfrontend/brig-to-generic.cc: See above.
- 	* brigfrontend/brig-to-generic.h: See above.
- 	* brigfrontend/brig-variable-handler.h: See above.
- 
- 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
- 	    Alan Hayward  <alan.hayward@arm.com>
- 	    David Sherwood  <david.sherwood@arm.com>
- 
- 	* brigfrontend/brig-to-generic.cc (get_unsigned_int_type): Handle
- 	polynomial TYPE_VECTOR_SUBPARTS.
- 	* brigfrontend/brig-util.h (gccbrig_type_vector_subparts): Likewise.
- 
- 2018-01-03  Jakub Jelinek  <jakub@redhat.com>
- 
- 	Update copyright years.
- 
- 2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
- 	    Alan Hayward  <alan.hayward@arm.com>
- 	    David Sherwood  <david.sherwood@arm.com>
- 
- 	* brigfrontend/brig-util.h (gccbrig_type_vector_subparts): New
- 	function.
- 	* brigfrontend/brig-basic-inst-handler.cc
- 	(brig_basic_inst_handler::build_shuffle): Use it instead of
- 	TYPE_VECTOR_SUBPARTS.
- 	(brig_basic_inst_handler::build_unpack): Likewise.
- 	(brig_basic_inst_handler::build_pack): Likewise.
- 	(brig_basic_inst_handler::build_unpack_lo_or_hi): Likewise.
- 	(brig_basic_inst_handler::operator ()): Likewise.
- 	(brig_basic_inst_handler::build_lower_element_broadcast): Likewise.
- 	* brigfrontend/brig-code-entry-handler.cc
- 	(brig_code_entry_handler::get_tree_cst_for_hsa_operand): Likewise.
- 	(brig_code_entry_handler::get_comparison_result_type): Likewise.
- 	(brig_code_entry_handler::expand_or_call_builtin): Likewise.
- 
- 2017-12-15  Jakub Jelinek  <jakub@redhat.com>
- 
- 	* brig-lang.c (brig_attribute_table): Swap affects_type_identity
- 	and handler fields, adjust comments.
- 
- 2017-12-08  Jakub Jelinek  <jakub@redhat.com>
- 
- 	* brig-lang.c (brig_attribute_table): Fix up comment.
- 
- 2017-11-28  Jakub Jelinek  <jakub@redhat.com>
- 
- 	* brigfrontend/brig-branch-inst-handler.cc
- 	(brig_branch_inst_handler::operator): Build SWITCH_EXPR using build2
- 	instead of build3.
- 
- 2017-11-17  Henry Linjamäki  <henry.linjamaki@parmance.com>
- 
- 	* brigfrontend/brig-util.cc: Fix sprintf format string type mismatch
- 	on 32b machines.
- 
- 2017-11-16  Henry Linjamäki  <henry.linjamaki@parmance.com>
- 
- 	Change internal representation of HSA registers. Instead
- 	representing HSA's untyped registers as unsigned int the gccbrig
- 	analyzes brig code and builds the register variables as a type
- 	used in tree expressions at most. This gives better chance to
- 	optimize CONVERT_VIEW_EXPRs away.
- 	* brigfrontend/brig-code-entry-handler.cc: Add analysis method for
- 	register type usage. Handle any-typed register variables.
- 	* brigfrontend/brig-code-entry-handler.h: New declarations for the
- 	above.
- 	* brigfrontend/brig-copy-move-inst-handler.cc: Handle any-typed
- 	register variables.
- 	* brigfrontend/brig-cvt-inst-handler.cc: Likewise.
- 	* brigfrontend/brig-function.cc: Build register variables as a
- 	type based on results of analysis phase.
- 	* brigfrontend/brig-function.h: Move HSA register count defines to
- 	brig-utils.h.
- 	* brigfrontend/brig-to-generic.cc: New analysis handler. Analyze
- 	HSA register usage.
- 	* brigfrontend/brig-to-generic.h: New declarations.
- 	* brigfrontend/brig-util.cc: New utility functions.
- 	* brigfrontend/brig-util.h: New declarations for the above.
- 
- 2017-11-16  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* gccbrig.texi: Added some documentation.
- 
- 2017-10-31  Henry Linjamäki  <henry.linjamaki@parmance.com>
- 
- 	* brig-lang.c (brig_langhook_type_for_mode): Fix PR 82771.
- 
- 2017-10-23  Richard Sandiford  <richard.sandiford@linaro.org>
- 
- 	* brig-lang.c (brig_langhook_type_for_mode): Use scalar_int_mode
- 	and scalar_float_mode.
- 
- 2017-10-09  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* brigfrontend/brig-to-generic.cc: Support BRIG_KIND_NONE
- 	directives.  These directives are legal everywhere.  They
- 	can be used to patch away BRIG entries at the binary level.
- 	Also add extra error detection for zeroed regions: make sure
- 	the byteCount field is never zero.
- 	* brigfrontend/phsa.h: Added a new error prefix for
- 	errors which are due to corrupted BRIG modules.
- 
- 2017-10-09  Henry Linjamäki  <henry.linjamaki@parmance.com>
- 
- 	* brigfrontend/brig-branch-inst-handler.cc: The call code
- 	still failed a few test cases. Now all PRM cases pass again.
- 
- 2017-10-03  Henry Linjamäki  <henry.linjamaki@parmance.com>
- 
- 	* brigfrontend/brig-branch-inst-handler.cc: Fix (more) crash with
- 	calls with more than 4 args.  It missed a reference which is required
- 	because vector expansion can move the object to another location.
- 
- 2017-09-29  Henry Linjamäki  <henry.linjamaki@parmance.com>
- 
- 	* brigfrontend/brig-branch-inst-handler.cc: Fix crash with
- 	calls with more than 4 args. Also fix a misexecution issue
- 	with kernels that have both unexpanded ID functions and
- 	calls to subfunctions.
- 
- 2017-09-28  Henry Linjamäki  <henry.linjamaki@parmance.com>
- 
- 	* brig-lang.c: Added function attributes and their handlers.
- 	Make BRIGFE 3-level optimize by default.
- 
- 2017-09-27  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* brig-lang.c: Improved support for function and module scope
- 	group segment variables.  PRM specs defines function and module
- 	scope group segment variables as an experimental feature. However,
- 	PRM test suite uses and hcc relies on them. In addition, hcc
- 	assumes certain group variable layout in its dynamic group segment
- 	allocation code.  We cannot have global group memory offsets if we
- 	want to both have kernel-specific group segment size and multiple
- 	kernels calling the same functions that use function scope group memory
- 	variables.  Now group segment is handled by separate book keeping of
- 	module scope and function (kernel) offsets. Each function has a "frame"
- 	in the group segment offset to which is given as an argument.
- 	* brigfrontend/brig-branch-inst-handler.cc: See above.
- 	* brigfrontend/brig-code-entry-handler.cc: See above.
- 	* brigfrontend/brig-fbarrier-handler.cc: See above.
- 	* brigfrontend/brig-function-handler.cc: See above.
- 	* brigfrontend/brig-function.cc: See above.
- 	* brigfrontend/brig-function.h: See above.
- 	* brigfrontend/brig-to-generic.cc: See above.
- 	* brigfrontend/brig-to-generic.h: See above.
- 	* brigfrontend/brig-util.cc: See above.
- 	* brigfrontend/brig-util.h: See above.
- 	* brigfrontend/brig-variable-handler.cc: See above.
- 
- 2017-09-25  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* brigfrontend/brig-to-generic.cc: Ensure per WI copies of
- 	private variables are aligned too.
- 
- 2017-09-17  Thomas Schwinge  <thomas@codesourcery.com>
- 
- 	* Make-lang.in (GO_TEXI_FILES): Rename to...
- 	(BRIG_TEXI_FILES): ... this.
- 	(doc/gccbrig.info, doc/gccbrig.dvi, doc/gccbrig.pdf, brig.info)
- 	(brig.srcinfo, brig.man, brig.srcman, brig.install-man)
- 	($(DESTDIR)$(man1dir)/$(GCCBRIG_INSTALL_NAME)$(man1ext)):
- 	Uncomment/enable targets.
- 	(gccbrig.pod): New target.
- 	* gccbrig.texi: New file.
- 
- 2017-08-04  Henry Linjamäki  <henry.linjamaki@parmance.com>
- 
- 	Fix PR 81713
- 	* brigfrontend/brig-basic-inst-handler.cc: replace build_int_cst with
- 	bitsize_int in building BIT_FIELD_REF.
- 	* brigfrontend/brig-code-entry-handler.cc: likewise.
- 
- 2017-07-05  Richard Sandiford  <richard.sandiford@linaro.org>
- 	    Alan Hayward  <alan.hayward@arm.com>
- 	    David Sherwood  <david.sherwood@arm.com>
- 
- 	* brig-c.h (brig_type_for_mode): Remove "enum" before "machine_mode".
- 	* brig-lang.c (brig_langhook_type_for_mode): Likewise.
- 
- 2017-07-04  Jakub Jelinek  <jakub@redhat.com>
- 
- 	* brigfrontend/brig-function.cc: Include profile-count.h.
- 	* brigfrontend/brig-to-generic.cc: Likewise.
- 
- 2017-05-18  Thomas Schwinge  <thomas@codesourcery.com>
- 
- 	* brigfrontend/brig-to-generic.h (class brig_to_generic): Use
- 	"dump_flags_t" for "m_dump_flags" member.
- 
- 2017-05-13  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* brigfrontend/brig-code-entry-handler.cc
- 	(brig_code_entry_handler::build_address_operand): Fix
- 	an assertion when doing an 'lda' of a private array
- 	offset.
- 
- 2017-05-03  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* brigfrontend/brig-code-entry-handler.cc
- 	(brig_code_entry_handler::build_address_operand): Fix a bug
- 	with reg+offset addressing on 32b segments. In large mode,
- 	the offset is treated as 32bits unless it's global, readonly or
- 	kernarg address space.
- 
- 2016-02-01  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* brigfrontend/brig-code-entry-handler.cc: fix address
- 	expressions which refer only to offset 0, but nothing else.
- 	* brigfrontend/brig-lane-inst-handler.cc: fix
- 	activelanepermute_b64 HSAIL instruction.
- 	* brigfrontend/brig-to-generic.cc: remove useless c_str()
- 	call. Add missing va_end (). Fix PR79250.
- 
- 2017-01-30  Jakub Jelinek  <jakub@redhat.com>
- 
- 	* brigfrontend/brig-code-entry-handler.cc
- 	(brig_code_entry_handler::get_tree_cst_for_hsa_operand): For %lu
- 	cast size_t arguments to unsigned long.
- 
- 2017-01-27  Pekka Jääskeläinen  <pekka.jaaskelainen@parmance.com>
- 
- 	* config-lang.in: Removed stale target-libbrig reference.
- 
- 2017-01-26  Jakub Jelinek  <jakub@redhat.com>
- 
- 	Update copyright years.
- 
- 2017-01-24  Pekka Jääskeläinen  <pekka@parmance.com>
- 	    Martin Jambor  <mjambor@suse.cz>
- 
- 	* Make-lang.in: New file.
- 	* brig-builtins.h: Likewise.
- 	* brig-c.h: Likewise.
- 	* brig-lang.c: Likewise.
- 	* brigspec.c: Likewise.
- 	* config-lang.in: Likewise.
- 	* lang-specs.h: Likewise.
- 	* lang.opt: Likewise.
- 	* brigfrontend/brig-arg-block-handler.cc: Likewise.
- 	* brigfrontend/brig-atomic-inst-handler.cc: Likewise.
- 	* brigfrontend/brig-basic-inst-handler.cc: Likewise.
- 	* brigfrontend/brig-branch-inst-handler.cc: Likewise.
- 	* brigfrontend/brig-cmp-inst-handler.cc: Likewise.
- 	* brigfrontend/brig-code-entry-handler.cc: Likewise.
- 	* brigfrontend/brig-code-entry-handler.h: Likewise.
- 	* brigfrontend/brig-comment-handler.cc: Likewise.
- 	* brigfrontend/brig-control-handler.cc: Likewise.
- 	* brigfrontend/brig-copy-move-inst-handler.cc: Likewise.
- 	* brigfrontend/brig-cvt-inst-handler.cc: Likewise.
- 	* brigfrontend/brig-fbarrier-handler.cc: Likewise.
- 	* brigfrontend/brig-function-handler.cc: Likewise.
- 	* brigfrontend/brig-function.cc: Likewise.
- 	* brigfrontend/brig-function.h: Likewise.
- 	* brigfrontend/brig-inst-mod-handler.cc: Likewise.
- 	* brigfrontend/brig-label-handler.cc: Likewise.
- 	* brigfrontend/brig-lane-inst-handler.cc: Likewise.
- 	* brigfrontend/brig-machine.c: Likewise.
- 	* brigfrontend/brig-machine.h: Likewise.
- 	* brigfrontend/brig-mem-inst-handler.cc: Likewise.
- 	* brigfrontend/brig-module-handler.cc: Likewise.
- 	* brigfrontend/brig-queue-inst-handler.cc: Likewise.
- 	* brigfrontend/brig-seg-inst-handler.cc: Likewise.
- 	* brigfrontend/brig-signal-inst-handler.cc: Likewise.
- 	* brigfrontend/brig-to-generic.cc: Likewise.
- 	* brigfrontend/brig-to-generic.h: Likewise.
- 	* brigfrontend/brig-util.cc: Likewise.
- 	* brigfrontend/brig-util.h: Likewise.
- 	* brigfrontend/brig-variable-handler.cc: Likewise.
- 	* brigfrontend/phsa.h: Likewise.
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/Make-lang.in gcc-12.1.0/gcc/brig/Make-lang.in
*** gcc-11.3.0/gcc/brig/Make-lang.in	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/Make-lang.in	Thu Jan  1 00:00:00 1970
***************
*** 1,251 ****
- # Make-lang.in -- Top level -*- makefile -*- fragment for gcc BRIG (HSAIL)
- # frontend.
- 
- # Copyright (C) 2015-2021 Free Software Foundation, Inc.
- 
- # This file is part of GCC.
- 
- # GCC is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 3, or (at your option)
- # any later version.
- 
- # GCC is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- # GNU General Public License for more details.
- 
- # You should have received a copy of the GNU General Public License
- # along with GCC; see the file COPYING3.  If not see
- # <http://www.gnu.org/licenses/>.
- 
- # This file provides the language dependent support in the main Makefile.
- 
- # Installation name.
- 
- GCCBRIG_INSTALL_NAME := $(shell echo gccbrig|sed '$(program_transform_name)')
- GCCBRIG_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gccbrig|sed \
- 	'$(program_transform_name)')
- 
- # The name for selecting brig in LANGUAGES.
- brig: brig1$(exeext)
- brig.serial = brig1$(exeext)
- 
- .PHONY: brig
- 
- CFLAGS-brig/brigspec.o += $(DRIVER_DEFINES)
- 
- GCCBRIG_OBJS = $(GCC_OBJS) brig/brigspec.o
- gccbrig$(exeext): $(GCCBRIG_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
- 	$(LIBDEPS)
- 	+$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
- 	  $(GCCBRIG_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
- 	  $(EXTRA_GCC_LIBS) $(LIBS)
- 
- # The cross-compiler version.  This is built mainly as a signal to the
- # brig.install-common target.  If this executable exists, it means that
- # brig.all.cross was run.
- gccbrig-cross$(exeext): gccbrig$(exeext)
- 	-rm -f gccbrig-cross$(exeext)
- 	cp gccbrig$(exeext) gccbrig-cross$(exeext)
- 
- # Use strict warnings.
- brig-warn = $(STRICT_WARN)
- 
- BRIG_OBJS = \
- 	brig/brig-lang.o \
- 	brig/brig-code-entry-handler.o \
- 	brig/brig-function-handler.o \
- 	brig/brig-variable-handler.o \
- 	brig/brig-fbarrier-handler.o \
- 	brig/brig-label-handler.o \
- 	brig/brig-comment-handler.o \
- 	brig/brig-basic-inst-handler.o \
- 	brig/brig-cvt-inst-handler.o \
- 	brig/brig-seg-inst-handler.o \
- 	brig/brig-lane-inst-handler.o \
- 	brig/brig-queue-inst-handler.o \
- 	brig/brig-copy-move-inst-handler.o \
- 	brig/brig-signal-inst-handler.o \
- 	brig/brig-atomic-inst-handler.o \
- 	brig/brig-arg-block-handler.o \
- 	brig/brig-control-handler.o \
- 	brig/brig-cmp-inst-handler.o \
- 	brig/brig-branch-inst-handler.o \
- 	brig/brig-mem-inst-handler.o \
- 	brig/brig-module-handler.o \
- 	brig/brig-inst-mod-handler.o \
- 	brig/brig-function.o \
- 	brig/brig-to-generic.o \
- 	brig/brig-machine.o \
- 	brig/brig-util.o
- 
- brig_OBJS = $(BRIG_OBJS) brig/brigspec.o
- 
- brig1$(exeext): $(BRIG_OBJS) attribs.o $(BACKEND) $(LIBDEPS) $(brig.prev)
- 	@$(call LINK_PROGRESS,$(INDEX.brig),start)
- 	+$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
- 	      $(BRIG_OBJS) attribs.o $(BACKEND) $(LIBS) \
- 		  $(BACKENDLIBS)
- 	@$(call LINK_PROGRESS,$(INDEX.brig),end)
- 
- # Documentation.
- 
- BRIG_TEXI_FILES = \
- 	brig/gccbrig.texi \
- 	$(gcc_docdir)/include/fdl.texi \
- 	$(gcc_docdir)/include/gpl_v3.texi \
- 	$(gcc_docdir)/include/gcc-common.texi \
- 	gcc-vers.texi
- 
- doc/gccbrig.info: $(BRIG_TEXI_FILES)
- 	if test "x$(BUILD_INFO)" = xinfo; then \
- 	  rm -f doc/gccbrig.info*; \
- 	  $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \
- 		-I $(gcc_docdir)/include -o $@ $<; \
- 	else true; fi
- 
- doc/gccbrig.dvi: $(BRIG_TEXI_FILES)
- 	$(TEXI2DVI) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<
- 
- doc/gccbrig.pdf: $(BRIG_TEXI_FILES)
- 	$(TEXI2PDF) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<
- 
- $(build_htmldir)/brig/index.html: $(BRIG_TEXI_FILES)
- 	$(mkinstalldirs) $(@D)
- 	rm -f $(@D)/*
- 	$(TEXI2HTML) -I $(gcc_docdir) -I $(gcc_docdir)/include \
- 		-I $(srcdir)/brig -o $(@D) $<
- 
- .INTERMEDIATE: gccbrig.pod
- 
- gccbrig.pod: brig/gccbrig.texi
- 	-$(TEXI2POD) -D gccbrig < $< > $@
- 
- # Build hooks.
- 
- brig.all.cross: gccbrig-cross$(exeext)
- brig.start.encap: gccbrig$(exeext)
- brig.rest.encap:
- brig.info: doc/gccbrig.info
- brig.dvi: doc/gccbrig.dvi
- brig.pdf: doc/gccbrig.pdf
- brig.html: $(build_htmldir)/brig/index.html
- brig.srcinfo: doc/gccbrig.info
- 	-cp -p $^ $(srcdir)/doc
- 
- brig.srcextra:
- brig.tags: force
- 	cd $(srcdir)/brig; \
- 	etags -o TAGS.sub *.c *.h; \
- 	etags --include TAGS.sub --include ../TAGS.sub
- 
- brig.man: doc/gccbrig.1
- brig.srcman: doc/gccbrig.1
- 	-cp -p $^ $(srcdir)/doc
- 
- lang_checks += check-brig
- 
- # No brig-specific selftests
- selftest-brig:
- 
- # Install hooks.
- 
- brig.install-common: installdirs
- 	-rm -f $(DESTDIR)$(bindir)/$(GCCBRIG_INSTALL_NAME)$(exeext)
- 	$(INSTALL_PROGRAM) gccbrig$(exeext) \
- 	$(DESTDIR)$(bindir)/$(GCCBRIG_INSTALL_NAME)$(exeext)
- 	-if test -f brig1$(exeext); then \
- 	  if test -f gccbrig-cross$(exeext); then \
- 	    :; \
- 	  else \
- 	    rm -f $(DESTDIR)$(bindir)/$(GCCBRIG_TARGET_INSTALL_NAME)$(exeext); \
- 	    ( cd $(DESTDIR)$(bindir) && \
- 	      $(LN) $(GCCBRIG_INSTALL_NAME)$(exeext) \
- 	      $(GCCBRIG_TARGET_INSTALL_NAME)$(exeext) ); \
- 	  fi; \
- 	fi
- 
- brig.install-plugin:
- 
- brig.install-info: #$(DESTDIR)$(infodir)/gccbrig.info
- 
- brig.install-pdf: doc/gccbrig.pdf
- 	@$(NORMAL_INSTALL)
- 	test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc"
- 	@for p in doc/gccbrig.pdf; do \
- 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- 	  f=$(pdf__strip_dir) \
- 	  echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \
- 	  $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \
- 	done
- 
- brig.install-html: $(build_htmldir)/brig
- 	@$(NORMAL_INSTALL)
- 	test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)"
- 	@for p in $(build_htmldir)/brig; do \
- 	  if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; \
- 	  fi; \
- 	  f=$(html__strip_dir) \
- 	  if test -d "$$d$$p"; then \
- 	    echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \
- 	    $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
- 	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
- 	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
- 	  else \
- 	    echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
- 	    $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
- 	  fi; \
- 	done
- 
- brig.install-man: $(DESTDIR)$(man1dir)/$(GCCBRIG_INSTALL_NAME)$(man1ext)
- 
- $(DESTDIR)$(man1dir)/$(GCCBRIG_INSTALL_NAME)$(man1ext): doc/gccbrig.1 \
- 	installdirs
- 	-rm -f $@
- 	-$(INSTALL_DATA) $< $@
- 	-chmod a-x $@
- 
- brig.uninstall:
- 	rm -rf $(DESTDIR)$(bindir)/$(GCCBRIG_INSTALL_NAME)$(exeext)
- 	rm -rf $(DESTDIR)$(man1dir)/$(GCCBRIG_INSTALL_NAME)$(man1ext)
- 	rm -rf $(DESTDIR)$(bindir)/$(GCCBRIG_TARGET_INSTALL_NAME)$(exeext)
- 	rm -rf $(DESTDIR)$(infodir)/gccbrig.info*
- 
- # Clean hooks.
- 
- brig.mostlyclean:
- 	-rm -f brig/*$(objext)
- 	-rm -f brig/*$(coverageexts)
- brig.clean:
- brig.distclean:
- brig.maintainer-clean:
- 	-rm -f $(docobjdir)/gccbrig.1
- 
- # Stage hooks.
- 
- brig.stage1: stage1-start
- 	-mv brig/*$(objext) stage1/brig
- brig.stage2: stage2-start
- 	-mv brig/*$(objext) stage2/brig
- brig.stage3: stage3-start
- 	-mv brig/*$(objext) stage3/brig
- brig.stage4: stage4-start
- 	-mv brig/*$(objext) stage4/brig
- brig.stageprofile: stageprofile-start
- 	-mv brig/*$(objext) stageprofile/brig
- brig.stagefeedback: stagefeedback-start
- 	-mv brig/*$(objext) stagefeedback/brig
- 
- CFLAGS-brig/brig-lang.o += -DDEFAULT_TARGET_VERSION=\"$(version)\" \
- 	-DDEFAULT_TARGET_MACHINE=\"$(target_noncanonical)\"
- 
- BRIGINCLUDES = -I $(srcdir)/brig -I $(srcdir)/brig/brigfrontend
- 
- brig/brig-machine.o: brig/brigfrontend/brig-machine.c
- 	$(COMPILE) $(BRIGINCLUDES) $<
- 	$(POSTCOMPILE)
- 
- brig/%.o: brig/brigfrontend/%.cc
- 	$(COMPILE) $(BRIGINCLUDES) $<
- 	$(POSTCOMPILE)
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brig-builtins.h gcc-12.1.0/gcc/brig/brig-builtins.h
*** gcc-11.3.0/gcc/brig/brig-builtins.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brig-builtins.h	Thu Jan  1 00:00:00 1970
***************
*** 1,99 ****
- /* brig-builtins.h -- brig builtin definitions
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
- 
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- enum built_in_attribute
- {
- #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
- #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
- #define DEF_ATTR_STRING(ENUM, VALUE) ENUM,
- #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
- #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
- #include "builtin-attrs.def"
- #undef DEF_ATTR_NULL_TREE
- #undef DEF_ATTR_INT
- #undef DEF_ATTR_STRING
- #undef DEF_ATTR_IDENT
- #undef DEF_ATTR_TREE_LIST
-   ATTR_LAST
- };
- 
- /* Builtin types.  */
- 
- enum brig_builtin_type
- {
- #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
- #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
- #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
- #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
- #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
- #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
- #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
- #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6) NAME,
- #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6, ARG7) NAME,
- #define DEF_FUNCTION_TYPE_8(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6, ARG7, ARG8) NAME,
- #define DEF_FUNCTION_TYPE_9(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6, ARG7, ARG8, ARG9) NAME,
- #define DEF_FUNCTION_TYPE_10(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			     ARG6, ARG7, ARG8, ARG9, ARG10) NAME,
- #define DEF_FUNCTION_TYPE_11(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			     ARG6, ARG7, ARG8, ARG9, ARG10, ARG11) NAME,
- #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
- #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
- #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
- #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
- #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
- #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
- 				NAME,
- #define DEF_FUNCTION_TYPE_VAR_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 				 ARG6) NAME,
- #define DEF_FUNCTION_TYPE_VAR_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 				ARG6, ARG7) NAME,
- #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
- #include "builtin-types.def"
- #undef DEF_PRIMITIVE_TYPE
- #undef DEF_FUNCTION_TYPE_0
- #undef DEF_FUNCTION_TYPE_1
- #undef DEF_FUNCTION_TYPE_2
- #undef DEF_FUNCTION_TYPE_3
- #undef DEF_FUNCTION_TYPE_4
- #undef DEF_FUNCTION_TYPE_5
- #undef DEF_FUNCTION_TYPE_6
- #undef DEF_FUNCTION_TYPE_7
- #undef DEF_FUNCTION_TYPE_8
- #undef DEF_FUNCTION_TYPE_9
- #undef DEF_FUNCTION_TYPE_10
- #undef DEF_FUNCTION_TYPE_11
- #undef DEF_FUNCTION_TYPE_VAR_0
- #undef DEF_FUNCTION_TYPE_VAR_1
- #undef DEF_FUNCTION_TYPE_VAR_2
- #undef DEF_FUNCTION_TYPE_VAR_3
- #undef DEF_FUNCTION_TYPE_VAR_4
- #undef DEF_FUNCTION_TYPE_VAR_5
- #undef DEF_FUNCTION_TYPE_VAR_6
- #undef DEF_FUNCTION_TYPE_VAR_7
- #undef DEF_POINTER_TYPE
-   BT_LAST
- };
- 
- typedef enum brig_builtin_type builtin_type;
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brig-c.h gcc-12.1.0/gcc/brig/brig-c.h
*** gcc-11.3.0/gcc/brig/brig-c.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brig-c.h	Thu Jan  1 00:00:00 1970
***************
*** 1,66 ****
- /* brig-c.h -- Header file for brig input's gcc C interface.
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #ifndef BRIG_BRIG_C_H
- #define BRIG_BRIG_C_H
- 
- #define BRIG_EXTERN_C
- 
- #include "machmode.h"
- 
- /* Functions defined in the Brig frontend proper called by the GCC
-    interface.  */
- 
- extern int brig_enable_dump (const char *);
- extern int brig_enable_optimize (const char *);
- 
- extern void brig_add_search_path (const char *);
- 
- extern void brig_create_brigbrig (int int_type_size, int pointer_size,
- 				  const char *pkgpath, const char *prefix,
- 				  const char *relative_import_path);
- 
- extern void brig_parse_input_files (const char **, unsigned int,
- 				    bool only_check_syntax,
- 				    bool require_return_statement);
- extern void brig_write_globals (void);
- 
- extern tree brig_type_for_size (unsigned int bits, int unsignedp);
- extern tree brig_type_for_mode (machine_mode, int unsignedp);
- 
- /* Functions defined in the GCC interface called by the Brig frontend
-    proper.  */
- 
- extern void brig_preserve_from_gc (tree);
- 
- extern const char *brig_localize_identifier (const char *);
- 
- extern unsigned int brig_field_alignment (tree);
- 
- extern void brig_trampoline_info (unsigned int *size, unsigned int *alignment);
- 
- extern void brig_imported_unsafe (void);
- 
- extern void brig_write_export_data (const char *, unsigned int);
- 
- extern const char *brig_read_export_data (int, off_t, char **, size_t *, int *);
- 
- #endif /* !defined (BRIG_BRIG_C_H) */
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brig-lang.c gcc-12.1.0/gcc/brig/brig-lang.c
*** gcc-11.3.0/gcc/brig/brig-lang.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brig-lang.c	Thu Jan  1 00:00:00 1970
***************
*** 1,958 ****
- /* brig-lang.c -- brig (HSAIL) input gcc interface.
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "config.h"
- #include "system.h"
- #include "ansidecl.h"
- #include "coretypes.h"
- #include "opts.h"
- #include "tree.h"
- #include "tree-iterator.h"
- #include "print-tree.h"
- #include "stringpool.h"
- #include "basic-block.h"
- #include "gimple-expr.h"
- #include "gimplify.h"
- #include "dumpfile.h"
- #include "stor-layout.h"
- #include "toplev.h"
- #include "debug.h"
- #include "options.h"
- #include "flags.h"
- #include "convert.h"
- #include "diagnostic.h"
- #include "langhooks.h"
- #include "langhooks-def.h"
- #include "target.h"
- #include "vec.h"
- #include "brigfrontend/brig-to-generic.h"
- #include "machmode.h"
- #include "fold-const.h"
- #include "common/common-target.h"
- #include <mpfr.h>
- #include "brig-c.h"
- #include "brig-builtins.h"
- 
- static tree handle_leaf_attribute (tree *, tree, tree, int, bool *);
- static tree handle_const_attribute (tree *, tree, tree, int, bool *);
- static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
- static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
- static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
- 
- /* This file is based on Go frontend's go-lang.c and gogo-tree.cc.  */
- 
- /* If -v set.  */
- 
- int gccbrig_verbose = 0;
- 
- /* Language-dependent contents of a type.  */
- 
- struct GTY (()) lang_type
- {
-   char dummy;
- };
- 
- /* Language-dependent contents of a decl.  */
- 
- struct GTY ((variable_size)) lang_decl
- {
-   char dummy;
- };
- 
- /* Language-dependent contents of an identifier.  This must include a
-    tree_identifier.  */
- 
- struct GTY (()) lang_identifier
- {
-   struct tree_identifier common;
- };
- 
- /* The resulting tree type.  */
- 
- union GTY ((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
- 	    chain_next ("CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), "
- 			"TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN "
- 			"(&%h.generic)) : NULL"))) lang_tree_node
- {
-   union tree_node GTY ((tag ("0"), desc ("tree_node_structure (&%h)"))) generic;
-   struct lang_identifier GTY ((tag ("1"))) identifier;
- };
- 
- /* We don't use language_function.  */
- 
- struct GTY (()) language_function
- {
-   int dummy;
- };
- 
- 
- /* The option mask.  */
- 
- static unsigned int
- brig_langhook_option_lang_mask (void)
- {
-   return CL_BRIG;
- }
- 
- /* Initialize the options structure.  */
- 
- static void
- brig_langhook_init_options_struct (struct gcc_options *opts)
- {
-   /* Signed overflow is precisely defined.  */
-   opts->x_flag_wrapv = 1;
- 
-   /* If we set this to one, the whole program optimizations internalize
-      all global variables, making them invisible to the dyn loader (and
-      thus the HSA runtime implementation).  */
-   opts->x_flag_whole_program = 1;
- 
-   /* The builtin math functions should not set errno.  */
-   opts->x_flag_errno_math = 0;
-   opts->frontend_set_flag_errno_math = false;
- 
-   opts->x_flag_exceptions = 0;
-   opts->x_flag_non_call_exceptions = 0;
- 
-   opts->x_flag_finite_math_only = 0;
-   opts->x_flag_signed_zeros = 1;
- 
-   opts->x_optimize = 3;
- 
-   flag_no_builtin = 1;
- }
- 
- /* Handle Brig specific options.  Return 0 if we didn't do anything.  */
- 
- static bool
- brig_langhook_handle_option
-   (size_t scode, const char *arg ATTRIBUTE_UNUSED,
-   HOST_WIDE_INT value ATTRIBUTE_UNUSED, int kind ATTRIBUTE_UNUSED,
-   location_t loc ATTRIBUTE_UNUSED,
-   const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED)
- {
-   enum opt_code code = (enum opt_code) scode;
-   switch (code)
-     {
-     case OPT_v:
-       gccbrig_verbose = 1;
-       break;
-     default:
-       break;
-     }
-   return 1;
- }
- 
- /* Run after parsing options.  */
- 
- static bool
- brig_langhook_post_options (const char **pfilename ATTRIBUTE_UNUSED)
- {
-   if (flag_excess_precision == EXCESS_PRECISION_DEFAULT)
-     flag_excess_precision = EXCESS_PRECISION_STANDARD;
- 
-   /* gccbrig casts pointers around like crazy, TBAA might produce broken
-      code if not disabling it by default.  Some PRM conformance tests such
-      as prm/core/memory/ordinary/ld/ld_u16 fail currently with strict
-      aliasing (to fix).  It can be enabled from the command line for cases
-      that are known not to break the C style aliasing requirements.  */
-   if (!global_options_set.x_flag_strict_aliasing)
-     flag_strict_aliasing = 0;
-   else
-     flag_strict_aliasing = global_options.x_flag_strict_aliasing;
- 
-   /* Returning false means that the backend should be used.  */
-   return false;
- }
- 
- static size_t
- get_file_size (FILE *file)
- {
-   size_t size;
-   fseek (file, 0, SEEK_END);
-   size = (size_t) ftell (file);
-   fseek (file, 0, SEEK_SET);
-   return size;
- }
- 
- static void
- brig_langhook_parse_file (void)
- {
-   brig_to_generic brig_to_gen;
- 
-   std::vector <char*> brig_blobs;
- 
-   for (unsigned int i = 0; i < num_in_fnames; ++i)
-     {
- 
-       FILE *f;
-       f = fopen (in_fnames[i], "r");
-       size_t fsize = get_file_size (f);
-       char *brig_blob = new char[fsize];
-       if (fread (brig_blob, 1, fsize, f) != fsize)
- 	{
- 	  error ("could not read the BRIG file");
- 	  exit (1);
- 	}
-       fclose (f);
- 
-       brig_to_gen.analyze (brig_blob);
-       brig_blobs.push_back (brig_blob);
-     }
- 
-   for (size_t i = 0; i < brig_blobs.size(); ++i)
-     {
-       char *brig_blob = brig_blobs.at(i);
-       brig_to_gen.parse (brig_blob);
-     }
- 
-   brig_to_gen.write_globals ();
- 
-   for (size_t i = 0; i < brig_blobs.size (); ++i)
-     delete brig_blobs[i];
- }
- 
- static tree
- brig_langhook_type_for_size (unsigned int bits,
- 			     int unsignedp)
- {
-   /* Copied from go-lang.c  */
-   tree type;
-   if (unsignedp)
-     {
-       if (bits == INT_TYPE_SIZE)
-         type = unsigned_type_node;
-       else if (bits == CHAR_TYPE_SIZE)
-         type = unsigned_char_type_node;
-       else if (bits == SHORT_TYPE_SIZE)
-         type = short_unsigned_type_node;
-       else if (bits == LONG_TYPE_SIZE)
-         type = long_unsigned_type_node;
-       else if (bits == LONG_LONG_TYPE_SIZE)
-         type = long_long_unsigned_type_node;
-       else
-         type = make_unsigned_type(bits);
-     }
-   else
-     {
-       if (bits == INT_TYPE_SIZE)
-         type = integer_type_node;
-       else if (bits == CHAR_TYPE_SIZE)
-         type = signed_char_type_node;
-       else if (bits == SHORT_TYPE_SIZE)
-         type = short_integer_type_node;
-       else if (bits == LONG_TYPE_SIZE)
-         type = long_integer_type_node;
-       else if (bits == LONG_LONG_TYPE_SIZE)
-         type = long_long_integer_type_node;
-       else
-         type = make_signed_type(bits);
-     }
-   return type;
- }
- 
- static tree
- brig_langhook_type_for_mode (machine_mode mode, int unsignedp)
- {
-   if (mode == TYPE_MODE (void_type_node))
-     return void_type_node;
- 
-   if (VECTOR_MODE_P (mode))
-     {
-       tree inner;
- 
-       inner = brig_langhook_type_for_mode (GET_MODE_INNER (mode), unsignedp);
-       if (inner != NULL_TREE)
- 	return build_vector_type_for_mode (inner, mode);
-       gcc_unreachable ();
-       return NULL_TREE;
-     }
- 
-   scalar_int_mode imode;
-   scalar_float_mode fmode;
-   if (is_float_mode (mode, &fmode))
-     {
-       switch (GET_MODE_BITSIZE (fmode))
- 	{
- 	case 32:
- 	  return float_type_node;
- 	case 64:
- 	  return double_type_node;
- 	default:
- 	  /* We have to check for long double in order to support
- 	     i386 excess precision.  */
- 	  if (fmode == TYPE_MODE (long_double_type_node))
- 	    return long_double_type_node;
- 
- 	  gcc_unreachable ();
- 	  return NULL_TREE;
- 	}
-     }
-   else if (is_int_mode (mode, &imode))
-     return brig_langhook_type_for_size (GET_MODE_BITSIZE (imode), unsignedp);
-   else
-     {
-       /* E.g., build_common_builtin_nodes () asks for modes/builtins
- 	       we do not generate or need.  Just ignore them silently for now.
-       */
-       return NULL_TREE;
-     }
-   return NULL_TREE;
- }
- 
- static tree
- brig_langhook_builtin_function (tree decl)
- {
-   return decl;
- }
- 
- static GTY(()) tree registered_builtin_types;
- 
- static void
- brig_langhook_register_builtin_type (tree type, const char *name)
- {
-   tree decl;
- 
-   if (!TYPE_NAME (type))
-     {
-       decl = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
- 			 get_identifier (name), type);
-       DECL_ARTIFICIAL (decl) = 1;
-       TYPE_NAME (type) = decl;
-     }
- 
-   registered_builtin_types = tree_cons (0, type, registered_builtin_types);
- }
- 
- 
- /* Return true if we are in the global binding level.  */
- 
- static bool
- brig_langhook_global_bindings_p (void)
- {
-   return current_function_decl == NULL_TREE;
- }
- 
- /* Push a declaration into the current binding level.  From Go: We can't
-    usefully implement this since we don't want to convert from tree
-    back to one of our internal data structures.  I think the only way
-    this is used is to record a decl which is to be returned by
-    getdecls, and we could implement it for that purpose if
-    necessary.  */
- 
- static tree
- brig_langhook_pushdecl (tree decl ATTRIBUTE_UNUSED)
- {
-   gcc_unreachable ();
- }
- 
- /* This hook is used to get the current list of declarations as trees.
-    From Go: We don't support that; instead we use the write_globals hook.
-    This can't simply crash because it is called by -gstabs.  */
- 
- static tree
- brig_langhook_getdecls (void)
- {
-   return NULL;
- }
- 
- static int
- brig_langhook_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED,
- 			     gimple_seq *post_p ATTRIBUTE_UNUSED)
- {
- 
-   /* Strip off the static chain info that appears to function
-      calls for some strange reason even though we don't add
-      nested functions.  Maybe something wrong with the function
-      declaration contexts? */
-   if (TREE_CODE (*expr_p) == CALL_EXPR
-       && CALL_EXPR_STATIC_CHAIN (*expr_p) != NULL_TREE)
-     CALL_EXPR_STATIC_CHAIN (*expr_p) = NULL_TREE;
-   return GS_UNHANDLED;
- }
- 
- static tree
- brig_langhook_eh_personality (void)
- {
-   gcc_unreachable ();
- }
- 
- /* Functions called directly by the generic backend.
-    Adapted from go-lang.c.  */
- 
- tree
- convert (tree type, tree expr)
- {
-   if (type == error_mark_node || expr == error_mark_node
-       || TREE_TYPE (expr) == error_mark_node)
-     return error_mark_node;
- 
-   if (type == TREE_TYPE (expr))
-     return expr;
- 
-   if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (TREE_TYPE (expr)))
-     return fold_convert (type, expr);
- 
-   switch (TREE_CODE (type))
-     {
-     case VOID_TYPE:
-     case BOOLEAN_TYPE:
-       return fold_convert (type, expr);
-     case INTEGER_TYPE:
-       return fold (convert_to_integer (type, expr));
-     case REAL_TYPE:
-       return fold (convert_to_real (type, expr));
-     case VECTOR_TYPE:
-       return fold (convert_to_vector (type, expr));
-     case POINTER_TYPE:
-       return build1 (VIEW_CONVERT_EXPR, type, convert (size_type_node, expr));
-     default:
-       break;
-     }
- 
-   gcc_unreachable ();
- }
- 
- static GTY (()) tree brig_gc_root;
- 
- /* Preserve trees that we create from the garbage collector.  */
- 
- void
- brig_preserve_from_gc (tree t)
- {
-   brig_gc_root = tree_cons (NULL_TREE, t, brig_gc_root);
- }
- 
- /* Convert an identifier for use in an error message.  */
- 
- const char *
- brig_localize_identifier (const char *ident)
- {
-   return identifier_to_locale (ident);
- }
- 
- /* Define supported attributes and their handlers. Code copied from
-    lto-lang.c */
- 
- /* Table of machine-independent attributes supported in GIMPLE.  */
- const struct attribute_spec brig_attribute_table[] =
- {
-   /* { name, min_len, max_len, decl_req, type_req, fn_type_req,
-        affects_type_identity, handler, exclude } */
-   { "leaf",		      0, 0, true,  false, false, false,
- 			      handle_leaf_attribute, NULL },
-   { "const",                  0, 0, true,  false, false, false,
- 			      handle_const_attribute, NULL },
-   { "pure",                   0, 0, true,  false, false, false,
- 			      handle_pure_attribute, NULL },
-   { "nothrow",                0, 0, true,  false, false, false,
- 			      handle_nothrow_attribute, NULL },
-   { "returns_twice",          0, 0, true,  false, false, false,
- 			      handle_returns_twice_attribute, NULL },
-   { NULL,                     0, 0, false, false, false, false, NULL, NULL }
- };
- 
- /* Attribute handlers.  */
- /* Handle a "leaf" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_leaf_attribute (tree *node, tree name,
- 		       tree ARG_UNUSED (args),
- 		       int ARG_UNUSED (flags), bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) != FUNCTION_DECL)
-     {
-       warning (OPT_Wattributes, "%qE attribute ignored", name);
-       *no_add_attrs = true;
-     }
-   if (!TREE_PUBLIC (*node))
-     {
-       warning (OPT_Wattributes,
- 	       "%qE attribute has no effect on unit local functions", name);
-       *no_add_attrs = true;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "const" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_const_attribute (tree *node, tree ARG_UNUSED (name),
- 			tree ARG_UNUSED (args), int ARG_UNUSED (flags),
- 			bool * ARG_UNUSED (no_add_attrs))
- {
-   tree type = TREE_TYPE (*node);
- 
-   /* See FIXME comment on noreturn in c_common_attribute_table.  */
-   if (TREE_CODE (*node) == FUNCTION_DECL)
-     TREE_READONLY (*node) = 1;
-   else if (TREE_CODE (type) == POINTER_TYPE
- 	   && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
-     TREE_TYPE (*node)
-       = build_pointer_type
- 	(build_type_variant (TREE_TYPE (type), 1,
- 			     TREE_THIS_VOLATILE (TREE_TYPE (type))));
-   else
-     gcc_unreachable ();
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "pure" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_pure_attribute (tree *node, tree ARG_UNUSED (name),
- 		       tree ARG_UNUSED (args), int ARG_UNUSED (flags),
- 		       bool * ARG_UNUSED (no_add_attrs))
- {
-   if (TREE_CODE (*node) == FUNCTION_DECL)
-     DECL_PURE_P (*node) = 1;
-   else
-     gcc_unreachable ();
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "nothrow" attribute; arguments as in
-    struct attribute_spec.handler.  */
- 
- static tree
- handle_nothrow_attribute (tree *node, tree ARG_UNUSED (name),
- 			  tree ARG_UNUSED (args), int ARG_UNUSED (flags),
- 			  bool * ARG_UNUSED (no_add_attrs))
- {
-   if (TREE_CODE (*node) == FUNCTION_DECL)
-     TREE_NOTHROW (*node) = 1;
-   else
-     gcc_unreachable ();
- 
-   return NULL_TREE;
- }
- 
- /* Handle a "returns_twice" attribute.  */
- 
- static tree
- handle_returns_twice_attribute (tree *node, tree ARG_UNUSED (name),
- 				tree ARG_UNUSED (args),
- 				int ARG_UNUSED (flags),
- 				bool * ARG_UNUSED (no_add_attrs))
- {
-   gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
- 
-   DECL_IS_RETURNS_TWICE (*node) = 1;
- 
-   return NULL_TREE;
- }
- 
- 
- /* Built-in initialization code cribbed from lto-lang.c which cribbed it
-    from c-common.c.  */
- 
- 
- static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
- 
- 
- static GTY(()) tree builtin_types[(int) BT_LAST + 1];
- 
- static GTY(()) tree string_type_node;
- static GTY(()) tree const_string_type_node;
- static GTY(()) tree wint_type_node;
- static GTY(()) tree intmax_type_node;
- static GTY(()) tree uintmax_type_node;
- static GTY(()) tree signed_size_type_node;
- 
- /* Flags needed to process builtins.def.  */
- int flag_isoc94;
- int flag_isoc99;
- int flag_isoc11;
- int flag_isoc2x;
- 
- static void
- def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
- {
-   tree t;
-   tree *args = XALLOCAVEC (tree, n);
-   va_list list;
-   int i;
-   bool err = false;
- 
-   va_start (list, n);
-   for (i = 0; i < n; ++i)
-     {
-       builtin_type a = (builtin_type) va_arg (list, int);
-       t = builtin_types[a];
-       if (t == error_mark_node)
- 	err = true;
-       args[i] = t;
-     }
-   va_end (list);
- 
-   t = builtin_types[ret];
-   if (err)
-     t = error_mark_node;
-   if (t == error_mark_node)
-     ;
-   else if (var)
-     t = build_varargs_function_type_array (t, n, args);
-   else
-     t = build_function_type_array (t, n, args);
- 
-   builtin_types[def] = t;
- }
- 
- /* Used to help initialize the builtin-types.def table.  When a type of
-    the correct size doesn't exist, use error_mark_node instead of NULL.
-    The later results in segfaults even when a decl using the type doesn't
-    get invoked.  */
- 
- static tree
- builtin_type_for_size (int size, bool unsignedp)
- {
-   tree type = brig_langhook_type_for_size (size, unsignedp);
-   return type ? type : error_mark_node;
- }
- 
- /* Support for DEF_BUILTIN.  */
- 
- static void
- def_builtin_1 (enum built_in_function fncode, const char *name,
- 	       enum built_in_class fnclass ATTRIBUTE_UNUSED,
- 	       tree fntype, tree libtype ATTRIBUTE_UNUSED,
- 	       bool both_p ATTRIBUTE_UNUSED, bool fallback_p,
- 	       bool nonansi_p ATTRIBUTE_UNUSED, tree fnattrs,
- 	       bool implicit_p)
- {
-   tree decl;
-   const char *libname;
- 
-   if (fntype == error_mark_node)
-     return;
- 
-   libname = name + strlen ("__builtin_");
-   decl = add_builtin_function (name, fntype, fncode, fnclass,
- 			       (fallback_p ? libname : NULL),
- 			       fnattrs);
- 
-   set_builtin_decl (fncode, decl, implicit_p);
- }
- 
- 
- /* Initialize the attribute table for all the supported builtins.  */
- 
- static void
- brig_init_attributes (void)
- {
-   /* Fill in the built_in_attributes array.  */
- #define DEF_ATTR_NULL_TREE(ENUM)				\
-   built_in_attributes[(int) ENUM] = NULL_TREE;
- #define DEF_ATTR_INT(ENUM, VALUE)				\
-   built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
- #define DEF_ATTR_STRING(ENUM, VALUE)				\
-   built_in_attributes[(int) ENUM] = build_string (strlen (VALUE), VALUE);
- #define DEF_ATTR_IDENT(ENUM, STRING)				\
-   built_in_attributes[(int) ENUM] = get_identifier (STRING);
- #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN)	\
-   built_in_attributes[(int) ENUM]			\
-     = tree_cons (built_in_attributes[(int) PURPOSE],	\
- 		 built_in_attributes[(int) VALUE],	\
- 		 built_in_attributes[(int) CHAIN]);
- #include "builtin-attrs.def"
- #undef DEF_ATTR_NULL_TREE
- #undef DEF_ATTR_INT
- #undef DEF_ATTR_STRING
- #undef DEF_ATTR_IDENT
- #undef DEF_ATTR_TREE_LIST
- }
- 
- /* Create builtin types and functions.  VA_LIST_REF_TYPE_NODE and
-    VA_LIST_ARG_TYPE_NODE are used in builtin-types.def.  */
- 
- static void
- brig_define_builtins (tree va_list_ref_type_node ATTRIBUTE_UNUSED,
- 		     tree va_list_arg_type_node ATTRIBUTE_UNUSED)
- {
- #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
-   builtin_types[ENUM] = VALUE;
- #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
-   def_fn_type (ENUM, RETURN, 0, 0);
- #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
-   def_fn_type (ENUM, RETURN, 0, 1, ARG1);
- #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
-   def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
- #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
-   def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
- #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
-   def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
- #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5)	\
-   def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
- #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6)					\
-   def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
- #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6, ARG7)					\
-   def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
- #define DEF_FUNCTION_TYPE_8(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6, ARG7, ARG8)				\
-   def_fn_type (ENUM, RETURN, 0, 8, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6,	\
- 	       ARG7, ARG8);
- #define DEF_FUNCTION_TYPE_9(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			    ARG6, ARG7, ARG8, ARG9)			\
-   def_fn_type (ENUM, RETURN, 0, 9, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6,	\
- 	       ARG7, ARG8, ARG9);
- #define DEF_FUNCTION_TYPE_10(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			     ARG6, ARG7, ARG8, ARG9, ARG10)		 \
-   def_fn_type (ENUM, RETURN, 0, 10, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6,	 \
- 	       ARG7, ARG8, ARG9, ARG10);
- #define DEF_FUNCTION_TYPE_11(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 			     ARG6, ARG7, ARG8, ARG9, ARG10, ARG11)	 \
-   def_fn_type (ENUM, RETURN, 0, 11, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6,	 \
- 	       ARG7, ARG8, ARG9, ARG10, ARG11);
- #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
-   def_fn_type (ENUM, RETURN, 1, 0);
- #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
-   def_fn_type (ENUM, RETURN, 1, 1, ARG1);
- #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
-   def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
- #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
-   def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
- #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
-   def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
- #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
-   def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
- #define DEF_FUNCTION_TYPE_VAR_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 				 ARG6)	\
-   def_fn_type (ENUM, RETURN, 1, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
- #define DEF_FUNCTION_TYPE_VAR_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
- 				ARG6, ARG7)				\
-   def_fn_type (ENUM, RETURN, 1, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
- #define DEF_POINTER_TYPE(ENUM, TYPE) \
-   builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
- 
- #include "builtin-types.def"
- 
- #undef DEF_PRIMITIVE_TYPE
- #undef DEF_FUNCTION_TYPE_0
- #undef DEF_FUNCTION_TYPE_1
- #undef DEF_FUNCTION_TYPE_2
- #undef DEF_FUNCTION_TYPE_3
- #undef DEF_FUNCTION_TYPE_4
- #undef DEF_FUNCTION_TYPE_5
- #undef DEF_FUNCTION_TYPE_6
- #undef DEF_FUNCTION_TYPE_7
- #undef DEF_FUNCTION_TYPE_8
- #undef DEF_FUNCTION_TYPE_9
- #undef DEF_FUNCTION_TYPE_10
- #undef DEF_FUNCTION_TYPE_11
- #undef DEF_FUNCTION_TYPE_VAR_0
- #undef DEF_FUNCTION_TYPE_VAR_1
- #undef DEF_FUNCTION_TYPE_VAR_2
- #undef DEF_FUNCTION_TYPE_VAR_3
- #undef DEF_FUNCTION_TYPE_VAR_4
- #undef DEF_FUNCTION_TYPE_VAR_5
- #undef DEF_FUNCTION_TYPE_VAR_6
- #undef DEF_FUNCTION_TYPE_VAR_7
- #undef DEF_POINTER_TYPE
-   builtin_types[(int) BT_LAST] = NULL_TREE;
- 
-   brig_init_attributes ();
- 
- #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P,\
- 		    NONANSI_P, ATTRS, IMPLICIT, COND)			\
-     if (NAME && COND)							\
-       def_builtin_1 (ENUM, NAME, CLASS, builtin_types[(int) TYPE],	\
- 		     builtin_types[(int) LIBTYPE], BOTH_P, FALLBACK_P,	\
- 		     NONANSI_P, built_in_attributes[(int) ATTRS], IMPLICIT);
- 
- #undef DEF_HSAIL_BUILTIN
- #define DEF_HSAIL_BUILTIN(ENUM, HSAIL_OPCODE, HSAIL_TYPE, NAME, TYPE, ATTRS) \
-   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
-               false, true, true, ATTRS, false, true)
- 
- /* HSAIL atomic builtins do not have separate identifying opcodes.  */
- 
- #undef DEF_HSAIL_ATOMIC_BUILTIN
- #define DEF_HSAIL_ATOMIC_BUILTIN(ENUM, ATOMIC_OPCODE, HSAIL_TYPE, NAME, \
-        TYPE, ATTRS) \
-   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
-               false, true, true, ATTRS, false, true)
- 
- /* HSAIL saturating arithmetics builtins.  */
- 
- #undef DEF_HSAIL_SAT_BUILTIN
- #define DEF_HSAIL_SAT_BUILTIN(ENUM, BRIG_OPCODE, HSAIL_TYPE, NAME, \
-        TYPE, ATTRS) \
-   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
-               false, true, true, ATTRS, false, true)
- 
- /* HSAIL builtins used internally by the frontend.  */
- 
- #undef DEF_HSAIL_INTR_BUILTIN
- #define DEF_HSAIL_INTR_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
-   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
-               false, true, true, ATTRS, false, true)
- 
- /* HSAIL saturated conversions.  */
- 
- #undef DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN
- #define DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN(ENUM, HSAIL_DEST_TYPE, HSAIL_SRC_TYPE, \
-   NAME, TYPE, ATTRS) \
-   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
-               false, true, true, ATTRS, false, true)
- 
- #include "builtins.def"
- }
- 
- /* Build nodes that would have be created by the C front-end; necessary
-    for including builtin-types.def and ultimately builtins.def.  Borrowed
-    from lto-lang.c.  */
- 
- static void
- brig_build_c_type_nodes (void)
- {
-   gcc_assert (void_type_node);
- 
-   void_list_node = build_tree_list (NULL_TREE, void_type_node);
-   string_type_node = build_pointer_type (char_type_node);
-   const_string_type_node
-     = build_pointer_type (build_qualified_type (char_type_node,
- 						TYPE_QUAL_CONST));
- 
-   if (strcmp (SIZE_TYPE, "unsigned int") == 0)
-     {
-       intmax_type_node = integer_type_node;
-       uintmax_type_node = unsigned_type_node;
-       signed_size_type_node = integer_type_node;
-     }
-   else if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
-     {
-       intmax_type_node = long_integer_type_node;
-       uintmax_type_node = long_unsigned_type_node;
-       signed_size_type_node = long_integer_type_node;
-     }
-   else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
-     {
-       intmax_type_node = long_long_integer_type_node;
-       uintmax_type_node = long_long_unsigned_type_node;
-       signed_size_type_node = long_long_integer_type_node;
-     }
-   else
-     {
-       int i;
- 
-       signed_size_type_node = NULL_TREE;
-       for (i = 0; i < NUM_INT_N_ENTS; i++)
- 	if (int_n_enabled_p[i])
- 	  {
- 	    char name[50], altname[50];
- 	    sprintf (name, "__int%d unsigned", int_n_data[i].bitsize);
- 	    sprintf (altname, "__int%d__ unsigned", int_n_data[i].bitsize);
- 
- 	    if (strcmp (name, SIZE_TYPE) == 0
- 		|| strcmp (altname, SIZE_TYPE) == 0)
- 	      {
- 		intmax_type_node = int_n_trees[i].signed_type;
- 		uintmax_type_node = int_n_trees[i].unsigned_type;
- 		signed_size_type_node = int_n_trees[i].signed_type;
- 	      }
- 	  }
-       if (signed_size_type_node == NULL_TREE)
- 	gcc_unreachable ();
-     }
- 
-   wint_type_node = unsigned_type_node;
-   pid_type_node = integer_type_node;
- }
- 
- 
- static bool
- brig_langhook_init (void)
- {
-   build_common_tree_nodes (false);
- 
-   /* Builtin initialization related code borrowed from lto-lang.c.  */
-   void_list_node = build_tree_list (NULL_TREE, void_type_node);
- 
-   brig_build_c_type_nodes ();
- 
-   if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
-     {
-       tree x = build_pointer_type (TREE_TYPE (va_list_type_node));
-       brig_define_builtins (x, x);
-     }
-   else
-     {
-       brig_define_builtins (build_reference_type (va_list_type_node),
- 			    va_list_type_node);
-     }
- 
-   targetm.init_builtins ();
-   build_common_builtin_nodes ();
- 
-   return true;
- }
- 
- #undef LANG_HOOKS_NAME
- #undef LANG_HOOKS_INIT
- #undef LANG_HOOKS_OPTION_LANG_MASK
- #undef LANG_HOOKS_INIT_OPTIONS_STRUCT
- #undef LANG_HOOKS_HANDLE_OPTION
- #undef LANG_HOOKS_POST_OPTIONS
- #undef LANG_HOOKS_PARSE_FILE
- #undef LANG_HOOKS_TYPE_FOR_MODE
- #undef LANG_HOOKS_TYPE_FOR_SIZE
- #undef LANG_HOOKS_REGISTER_BUILTIN_TYPE
- #undef LANG_HOOKS_BUILTIN_FUNCTION
- #undef LANG_HOOKS_GLOBAL_BINDINGS_P
- #undef LANG_HOOKS_PUSHDECL
- #undef LANG_HOOKS_GETDECLS
- #undef LANG_HOOKS_WRITE_GLOBALS
- #undef LANG_HOOKS_GIMPLIFY_EXPR
- #undef LANG_HOOKS_EH_PERSONALITY
- 
- #define LANG_HOOKS_NAME "GNU Brig"
- #define LANG_HOOKS_INIT brig_langhook_init
- #define LANG_HOOKS_OPTION_LANG_MASK brig_langhook_option_lang_mask
- #define LANG_HOOKS_INIT_OPTIONS_STRUCT brig_langhook_init_options_struct
- #define LANG_HOOKS_HANDLE_OPTION brig_langhook_handle_option
- #define LANG_HOOKS_POST_OPTIONS brig_langhook_post_options
- #define LANG_HOOKS_PARSE_FILE brig_langhook_parse_file
- #define LANG_HOOKS_TYPE_FOR_MODE brig_langhook_type_for_mode
- #define LANG_HOOKS_TYPE_FOR_SIZE brig_langhook_type_for_size
- #define LANG_HOOKS_REGISTER_BUILTIN_TYPE brig_langhook_register_builtin_type
- #define LANG_HOOKS_BUILTIN_FUNCTION brig_langhook_builtin_function
- #define LANG_HOOKS_GLOBAL_BINDINGS_P brig_langhook_global_bindings_p
- #define LANG_HOOKS_PUSHDECL brig_langhook_pushdecl
- #define LANG_HOOKS_GETDECLS brig_langhook_getdecls
- #define LANG_HOOKS_GIMPLIFY_EXPR brig_langhook_gimplify_expr
- #define LANG_HOOKS_EH_PERSONALITY brig_langhook_eh_personality
- 
- /* Attribute hooks.  */
- #undef LANG_HOOKS_COMMON_ATTRIBUTE_TABLE
- #define LANG_HOOKS_COMMON_ATTRIBUTE_TABLE brig_attribute_table
- 
- struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
- 
- #include "gt-brig-brig-lang.h"
- #include "gtype-brig.h"
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-arg-block-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-arg-block-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-arg-block-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-arg-block-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,66 ****
- /* brig-arg-block-handler.cc -- brig arg block start/end directive handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- #include "tree-iterator.h"
- #include "system.h"
- #include "errors.h"
- 
- #include "tree-pretty-print.h"
- #include "print-tree.h"
- 
- size_t
- brig_directive_arg_block_handler::operator () (const BrigBase *base)
- {
-   if (base->kind == BRIG_KIND_DIRECTIVE_ARG_BLOCK_START)
-     {
-       /* Initiate a new code block for the call site.  */
-       tree stmt_list = alloc_stmt_list ();
-       tree bind_expr
- 	= build3 (BIND_EXPR, void_type_node, NULL, stmt_list, NULL);
-       tree block = make_node (BLOCK);
-       BIND_EXPR_BLOCK (bind_expr) = block;
-       static int block_id = 0;
-       BLOCK_NUMBER (block) = block_id++;
-       TREE_USED (block) = 1;
-       tree m_parentblock = DECL_INITIAL (m_parent.m_cf->m_func_decl);
-       BLOCK_SUPERCONTEXT (block) = m_parentblock;
- 
-       chainon (BLOCK_SUBBLOCKS (m_parentblock), block);
- 
-       m_parent.m_cf->m_current_bind_expr = bind_expr;
-       m_parent.m_cf->m_generating_arg_block = true;
-     }
-   else if (base->kind == BRIG_KIND_DIRECTIVE_ARG_BLOCK_END)
-     {
-       /* Restore the used bind expression back to the function
- 	 scope.  */
-       tree new_bind_expr = m_parent.m_cf->m_current_bind_expr;
-       m_parent.m_cf->m_current_bind_expr
- 	= DECL_SAVED_TREE (m_parent.m_cf->m_func_decl);
-       m_parent.m_cf->append_statement (new_bind_expr);
-       m_parent.m_cf->m_generating_arg_block = false;
-     }
-   else
-     gcc_unreachable ();
- 
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-atomic-inst-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-atomic-inst-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-atomic-inst-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-atomic-inst-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,265 ****
- /* brig-atomic-inst-handler.cc -- brig atomic instruction handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
- 
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include <sstream>
- 
- #include "brig-code-entry-handler.h"
- #include "brig-util.h"
- #include "fold-const.h"
- #include "diagnostic.h"
- #include "tree-pretty-print.h"
- #include "print-tree.h"
- #include "convert.h"
- #include "langhooks.h"
- #include "gimple-expr.h"
- #include "stringpool.h"
- #include "brig-builtins.h"
- 
- brig_atomic_inst_handler::brig_atomic_inst_handler (brig_to_generic &parent)
-   : brig_code_entry_handler (parent)
- {
- }
- 
- size_t
- brig_atomic_inst_handler::generate_tree (const BrigInstBase &inst,
- 					 BrigAtomicOperation8_t atomic_opcode)
- {
-   tree_stl_vec operands = build_operands (inst);
-   const int first_input
-     = gccbrig_hsa_opcode_op_output_p (inst.opcode, 0) ? 1 : 0;
- 
-   tree instr_type = gccbrig_tree_type_for_hsa_type (inst.type);
- 
-   /* Utilize the atomic data types (from C++11 support) for implementing
-      atomic operations.  */
- 
-   tree atomic_type = build_qualified_type (instr_type, TYPE_QUAL_ATOMIC);
- 
-   gcc_assert (atomic_type != NULL_TREE);
- 
-   tree signal_handle = operands[first_input];
-   tree atomic_ptype = build_pointer_type (atomic_type);
-   tree casted_to_ptr = convert_to_pointer (atomic_ptype, signal_handle);
- 
-   tree src0 = NULL_TREE;
-   if (atomic_opcode != BRIG_ATOMIC_LD)
-     src0 = operands[first_input + 1];
- 
-   tree instr_expr = NULL_TREE;
- 
-   tree ptype = build_pointer_type (instr_type);
-   tree ptr = convert_to_pointer (ptype, operands[first_input]);
- 
-   if (atomic_opcode == BRIG_ATOMIC_ST)
-     {
-       tree mem_ref = build2 (MEM_REF, atomic_type, casted_to_ptr,
- 			     build_int_cst (atomic_ptype, 0));
-       instr_expr = build2 (MODIFY_EXPR, atomic_type, mem_ref, src0);
-     }
-   else if (atomic_opcode == BRIG_ATOMIC_LD
- 	   || (atomic_opcode >= BRIG_ATOMIC_WAIT_EQ
- 	       && atomic_opcode <= BRIG_ATOMIC_WAITTIMEOUT_GTE))
-     {
-       tree mem_ref = build2 (MEM_REF, atomic_type, casted_to_ptr,
- 			     build_int_cst (atomic_ptype, 0));
-       /* signal_wait* instructions can return spuriously before the
- 	 condition becomes true.  Therefore it's legal to return
- 	 right away.  TODO: builtin calls which can be
- 	 implemented with a power efficient sleep-wait.  */
-       instr_expr = mem_ref;
-     }
-   else if (atomic_opcode == BRIG_ATOMIC_CAS)
-     {
-       /* Special case for CAS due to the two args.  */
-       tree built_in = NULL_TREE;
-       switch (gccbrig_hsa_type_bit_size (inst.type))
- 	{
- 	case 32:
- 	  built_in
- 	    = builtin_decl_explicit (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4);
- 	  break;
- 	case 64:
- 	  built_in
- 	    = builtin_decl_explicit (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8);
- 	  break;
- 	default:
- 	  gcc_unreachable ();
- 	}
- 
-       tree src1 = operands[first_input + 2];
- 
-       tree src0_type
- 	= TREE_VALUE (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (built_in))));
- 
-       tree src1_type = TREE_VALUE
- 	(TREE_CHAIN (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (built_in)))));
- 
-       instr_expr = call_builtin (built_in, 3, instr_type, ptype, ptr,
- 				 src0_type, src0, src1_type, src1);
-     }
-   else
-     {
-       tree built_in = NULL_TREE;
-       /* The rest of the builtins have the same number of parameters.
- 	 Generate a big if..else that finds the correct builtin
- 	 automagically from the def file.  */
- #undef DEF_HSAIL_SAT_BUILTIN
- #undef DEF_HSAIL_BUILTIN
- #undef DEF_HSAIL_ATOMIC_BUILTIN
- #undef DEF_HSAIL_INTR_BUILTIN
- #undef DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN
- 
- #define DEF_HSAIL_ATOMIC_BUILTIN(ENUM, ATOMIC_OPCODE, HSAIL_TYPE,	\
- 				 NAME, TYPE, ATTRS)			\
-       if (atomic_opcode == ATOMIC_OPCODE && inst.type == HSAIL_TYPE)	\
- 	built_in = builtin_decl_explicit (ENUM);			\
-       else
- #include "brig-builtins.def"
-       switch (atomic_opcode)
- 	{
- 	case BRIG_ATOMIC_ADD:
- 	  switch (gccbrig_hsa_type_bit_size (inst.type))
- 	    {
- 	    case 32:
- 	      built_in
- 		= builtin_decl_explicit (BUILT_IN_SYNC_FETCH_AND_ADD_4);
- 	      break;
- 	    case 64:
- 	      built_in
- 		= builtin_decl_explicit (BUILT_IN_SYNC_FETCH_AND_ADD_8);
- 	      break;
- 	    default:
- 	      gcc_unreachable ();
- 	    }
- 	  break;
- 	case BRIG_ATOMIC_SUB:
- 	  switch (gccbrig_hsa_type_bit_size (inst.type))
- 	    {
- 	    case 32:
- 	      built_in
- 		= builtin_decl_explicit (BUILT_IN_SYNC_FETCH_AND_SUB_4);
- 	      break;
- 	    case 64:
- 	      built_in
- 		= builtin_decl_explicit (BUILT_IN_SYNC_FETCH_AND_SUB_8);
- 	      break;
- 	    default:
- 	      gcc_unreachable ();
- 	    }
- 	  break;
- 	case BRIG_ATOMIC_AND:
- 	  switch (gccbrig_hsa_type_bit_size (inst.type))
- 	    {
- 	    case 32:
- 	      built_in
- 		= builtin_decl_explicit (BUILT_IN_SYNC_FETCH_AND_AND_4);
- 	      break;
- 	    case 64:
- 	      built_in
- 		= builtin_decl_explicit (BUILT_IN_SYNC_FETCH_AND_AND_8);
- 	      break;
- 	    default:
- 	      gcc_unreachable ();
- 	    }
- 	  break;
- 	case BRIG_ATOMIC_XOR:
- 	  switch (gccbrig_hsa_type_bit_size (inst.type))
- 	    {
- 	    case 32:
- 	      built_in
- 		= builtin_decl_explicit (BUILT_IN_SYNC_FETCH_AND_XOR_4);
- 	      break;
- 	    case 64:
- 	      built_in
- 		= builtin_decl_explicit (BUILT_IN_SYNC_FETCH_AND_XOR_8);
- 	      break;
- 	    default:
- 	      gcc_unreachable ();
- 	    }
- 	  break;
- 	case BRIG_ATOMIC_OR:
- 	  switch (gccbrig_hsa_type_bit_size (inst.type))
- 	    {
- 	    case 32:
- 	      built_in
- 		= builtin_decl_explicit (BUILT_IN_SYNC_FETCH_AND_OR_4);
- 	      break;
- 	    case 64:
- 	      built_in
- 		= builtin_decl_explicit (BUILT_IN_SYNC_FETCH_AND_OR_8);
- 	      break;
- 	    default:
- 	      gcc_unreachable ();
- 	    }
- 	  break;
- 	case BRIG_ATOMIC_EXCH:
- 	  switch (gccbrig_hsa_type_bit_size (inst.type))
- 	    {
- 	    case 32:
- 	      built_in
- 		= builtin_decl_explicit (BUILT_IN_SYNC_LOCK_TEST_AND_SET_4);
- 	      break;
- 	    case 64:
- 	      built_in
- 		= builtin_decl_explicit (BUILT_IN_SYNC_LOCK_TEST_AND_SET_8);
- 	      break;
- 	    default:
- 	      gcc_unreachable ();
- 	    }
- 	  break;
- 	default:
- 	  gcc_unreachable ();
- 	};
- 
-       gcc_assert (built_in != NULL_TREE);
-       tree arg0_type
- 	= TREE_VALUE (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (built_in))));
- 
-       instr_expr = call_builtin (built_in, 2, instr_type, ptr_type_node,
- 				 ptr, arg0_type, src0);
- 
-       /* We need a temp variable for the result, because otherwise
- 	 the gimplifier drops a necessary (unsigned to signed) cast in
- 	 the output assignment and fails a check later.  */
-       tree tmp_var = create_tmp_var (arg0_type, "builtin_out");
-       tree tmp_assign
- 	= build2 (MODIFY_EXPR, TREE_TYPE (tmp_var), tmp_var, instr_expr);
-       m_parent.m_cf->append_statement (tmp_assign);
-       instr_expr = tmp_var;
-     }
- 
-   if (first_input > 0)
-     build_output_assignment (inst, operands[0], instr_expr);
-   else
-     m_parent.m_cf->append_statement (instr_expr);
- 
-   return inst.base.byteCount;
- }
- 
- size_t
- brig_atomic_inst_handler::operator () (const BrigBase *base)
- {
-   const BrigInstAtomic *inst = (const BrigInstAtomic *) base;
-   BrigAtomicOperation8_t atomic_opcode;
-   atomic_opcode = inst->atomicOperation;
- 
-   return generate_tree (inst->base, atomic_opcode);
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-basic-inst-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-basic-inst-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-basic-inst-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-basic-inst-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,735 ****
- /* brig-basic-inst-handler.cc -- brig basic instruction handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include <sstream>
- 
- #include "brig-code-entry-handler.h"
- #include "brig-util.h"
- 
- #include "errors.h"
- #include "gimple-expr.h"
- #include "convert.h"
- #include "print-tree.h"
- #include "tree-pretty-print.h"
- #include "langhooks.h"
- #include "stor-layout.h"
- #include "diagnostic-core.h"
- #include "brig-builtins.h"
- #include "fold-const.h"
- 
- brig_basic_inst_handler::brig_basic_inst_handler (brig_to_generic &parent)
-   : brig_code_entry_handler (parent)
- {
- }
- 
- class scalarized_sat_arithmetics : public tree_element_binary_visitor
- {
- public:
-   scalarized_sat_arithmetics (const BrigInstBase &brig_inst)
-     : m_brig_inst (brig_inst)
-   {
-     BrigType16_t element_type = brig_inst.type & BRIG_TYPE_BASE_MASK;
- 
- #undef DEF_HSAIL_SAT_BUILTIN
- #undef DEF_HSAIL_BUILTIN
- #undef DEF_HSAIL_ATOMIC_BUILTIN
- #undef DEF_HSAIL_INTR_BUILTIN
- #undef DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN
- 
- #define DEF_HSAIL_SAT_BUILTIN(ENUM, BRIG_OPCODE, HSAIL_TYPE,		\
- 			      NAME, TYPE, ATTRS)			\
-     if (brig_inst.opcode == BRIG_OPCODE && element_type == HSAIL_TYPE)	\
-       m_builtin = builtin_decl_explicit (ENUM);				\
-     else
- #include "brig-builtins.def"
-       gcc_unreachable ();
-   }
- 
-   virtual tree
-   visit_element (brig_code_entry_handler &, tree operand0, tree operand1)
-   {
-     /* Implement saturating arithmetics with scalar built-ins for now.
-        TODO: emit GENERIC nodes for the simplest cases or at least
-        emit vector built-ins.  */
-     return call_builtin (m_builtin, 2, TREE_TYPE (operand0),
- 			 TREE_TYPE (operand0), operand0,
- 			 TREE_TYPE (operand1), operand1);
-   }
-   const BrigInstBase &m_brig_inst;
-   tree m_builtin;
- };
- 
- /* Implements a vector shuffle.  ARITH_TYPE is the type of the vector,
-    OPERANDS[0] is the first vector, OPERAND[1] the second vector and
-    OPERANDS[2] the shuffle mask in HSAIL format.  The output is a VEC_PERM_EXPR
-    that implements the shuffle as a GENERIC expression.  */
- 
- tree
- brig_basic_inst_handler::build_shuffle (tree arith_type,
- 					tree_stl_vec &operands)
- {
-   tree element_type
-     = get_unsigned_int_type (TREE_TYPE (TREE_TYPE (operands[0])));
- 
-   /* Offsets to add to the mask values to convert from the
-      HSAIL mask to VEC_PERM_EXPR masks.  VEC_PERM_EXPR mask
-      assumes an index spanning from 0 to 2 times the vec
-      width while HSAIL refers separately to two different
-      input vectors, thus is not a "full shuffle" where all
-      output elements can originate from any input element.  */
-   vec<constructor_elt, va_gc> *mask_offset_vals = NULL;
- 
-   unsigned int element_count = gccbrig_type_vector_subparts (arith_type);
- 
-   vec<constructor_elt, va_gc> *input_mask_vals = NULL;
-   size_t input_mask_element_size = exact_log2 (element_count);
- 
-   /* Unpack the tightly packed mask elements to BIT_FIELD_REFs
-      from which to construct the mask vector as understood by
-      VEC_PERM_EXPR.  */
-   tree mask_operand
-     = m_parent.m_cf->add_temp_var ("shuffle_mask", operands[2]);
- 
-   tree mask_element_type
-     = build_nonstandard_integer_type (input_mask_element_size, true);
- 
-   for (size_t i = 0; i < element_count; ++i)
-     {
-       tree mask_element
- 	= build3 (BIT_FIELD_REF, mask_element_type, mask_operand,
- 		  bitsize_int (input_mask_element_size),
- 		  bitsize_int (i * input_mask_element_size));
- 
-       mask_element = convert (element_type, mask_element);
- 
-       tree offset;
-       if (i < element_count / 2)
- 	offset = build_int_cst (element_type, 0);
-       else
- 	offset = build_int_cst (element_type, element_count);
- 
-       CONSTRUCTOR_APPEND_ELT (mask_offset_vals, NULL_TREE, offset);
-       CONSTRUCTOR_APPEND_ELT (input_mask_vals, NULL_TREE, mask_element);
-     }
-   tree mask_vec_type = build_vector_type (element_type, element_count);
- 
-   tree mask_vec = build_constructor (mask_vec_type, input_mask_vals);
-   tree offset_vec = build_constructor (mask_vec_type, mask_offset_vals);
- 
-   tree mask = build2 (PLUS_EXPR, mask_vec_type, mask_vec, offset_vec);
- 
-   tree perm = build3 (VEC_PERM_EXPR, TREE_TYPE (operands[0]), operands[0],
- 		      operands[1], mask);
-   return perm;
- }
- 
- /* Unpacks (extracts) a scalar element with an index in OPERANDS[1]
-    from the vector expression in OPERANDS[0].  */
- 
- tree
- brig_basic_inst_handler::build_unpack (tree_stl_vec &operands)
- {
-   /* Implement the unpack with a shuffle that stores the unpacked
-      element to the lowest bit positions in the dest.  After that
-      a bitwise AND is used to clear the uppermost bits.  */
-   tree src_element_type = TREE_TYPE (TREE_TYPE (operands[0]));
- 
-   /* Perform the operations with a raw (unsigned int type) type.  */
-   tree element_type = get_unsigned_int_type (src_element_type);
- 
-   vec<constructor_elt, va_gc> *input_mask_vals = NULL;
-   vec<constructor_elt, va_gc> *and_mask_vals = NULL;
- 
-   size_t element_count
-     = gccbrig_type_vector_subparts (TREE_TYPE (operands[0]));
-   tree vec_type = build_vector_type (element_type, element_count);
- 
-   for (size_t i = 0; i < element_count; ++i)
-     {
-       tree mask_element;
-       if (i == 0)
- 	mask_element = convert (element_type, operands[1]);
-       else
- 	mask_element = build_int_cst (element_type, 0);
- 
-       CONSTRUCTOR_APPEND_ELT (input_mask_vals, NULL_TREE, mask_element);
- 
-       tree and_mask_element;
-       if (i == 0)
- 	and_mask_element = build_int_cst (element_type, -1);
-       else
- 	and_mask_element = build_int_cst (element_type, 0);
-       CONSTRUCTOR_APPEND_ELT (and_mask_vals, NULL_TREE, and_mask_element);
-     }
- 
-   tree mask_vec = build_constructor (vec_type, input_mask_vals);
- 
-   tree and_mask_vec = build_constructor (vec_type, and_mask_vals);
- 
-   tree perm = build3 (VEC_PERM_EXPR, vec_type,
- 		      build_resize_convert_view (vec_type, operands[0]),
- 		      build_resize_convert_view (vec_type, operands[0]),
- 		      mask_vec);
- 
-   tree cleared = build2 (BIT_AND_EXPR, vec_type, perm, and_mask_vec);
- 
-   size_t s = int_size_in_bytes (TREE_TYPE (cleared)) * BITS_PER_UNIT;
-   tree raw_type = build_nonstandard_integer_type (s, true);
- 
-   tree as_int = build_resize_convert_view (raw_type, cleared);
- 
-   if (int_size_in_bytes (src_element_type) < 4)
-     {
-       if (INTEGRAL_TYPE_P (src_element_type))
- 	return extend_int (as_int, uint32_type_node, src_element_type);
-     }
-   return as_int;
- }
- 
- /* Packs (inserts) a scalar element in OPERANDS[1]
-    to the vector in OPERANDS[0] at element position defined by
-    OPERANDS[2].  */
- 
- tree
- brig_basic_inst_handler::build_pack (tree_stl_vec &operands)
- {
-   /* Implement using a bit level insertion.
-      TODO: Reuse this for implementing 'bitinsert'
-      without a builtin call.  */
- 
-   size_t ecount = gccbrig_type_vector_subparts (TREE_TYPE (operands[0]));
-   size_t vecsize = int_size_in_bytes (TREE_TYPE (operands[0])) * BITS_PER_UNIT;
-   tree wide_type = build_nonstandard_integer_type (vecsize, 1);
- 
-   tree src_vect = build_resize_convert_view (wide_type, operands[0]);
-   src_vect = m_parent.m_cf->add_temp_var ("src_vect", src_vect);
- 
-   tree scalar = operands[1];
-   scalar = m_parent.m_cf->add_temp_var ("scalar",
- 					convert_to_integer (wide_type, scalar));
- 
-   tree pos = operands[2];
- 
-   /* The upper bits of the position can contain garbage.
-      Zero them for well-defined semantics.  */
-   tree t = build2 (BIT_AND_EXPR, TREE_TYPE (pos), operands[2],
- 		   build_int_cstu (TREE_TYPE (pos), ecount - 1));
-   pos = m_parent.m_cf->add_temp_var ("pos", convert (wide_type, t));
- 
-   tree element_type = TREE_TYPE (TREE_TYPE (operands[0]));
-   size_t element_width = int_size_in_bytes (element_type) * BITS_PER_UNIT;
-   tree ewidth = build_int_cstu (wide_type, element_width);
- 
-   tree bitoffset = build2 (MULT_EXPR, wide_type, ewidth, pos);
-   bitoffset = m_parent.m_cf->add_temp_var ("offset", bitoffset);
- 
-   uint64_t mask_int
-     = element_width == 64 ? (uint64_t) -1 : ((uint64_t) 1 << element_width) - 1;
- 
-   tree mask = build_int_cstu (wide_type, mask_int);
- 
-   mask = m_parent.m_cf->add_temp_var ("mask",
- 				      convert_to_integer (wide_type, mask));
- 
-   tree clearing_mask
-     = build1 (BIT_NOT_EXPR, wide_type,
- 	      build2 (LSHIFT_EXPR, wide_type, mask, bitoffset));
- 
-   tree zeroed_element
-     = build2 (BIT_AND_EXPR, wide_type, src_vect, clearing_mask);
- 
-   /* TODO: Is the AND necessary: does HSA define what
-      happens if the upper bits in the inserted element are not
-      zero? */
-   tree element_in_position
-     = build2 (LSHIFT_EXPR, wide_type,
- 	      build2 (BIT_AND_EXPR, wide_type, scalar, mask), bitoffset);
- 
-   tree inserted
-     = build2 (BIT_IOR_EXPR, wide_type, zeroed_element, element_in_position);
-   return inserted;
- }
- 
- /* Implement the unpack{lo,hi}.  BRIG_OPCODE should tell which one and
-    ARITH_TYPE describe the type of the vector arithmetics.
-    OPERANDS[0] and OPERANDS[1] are the input vectors.  */
- 
- tree
- brig_basic_inst_handler::build_unpack_lo_or_hi (BrigOpcode16_t brig_opcode,
- 						tree arith_type,
- 						tree_stl_vec &operands)
- {
-   tree element_type = get_unsigned_int_type (TREE_TYPE (arith_type));
-   tree mask_vec_type
-     = build_vector_type (element_type,
- 			 gccbrig_type_vector_subparts (arith_type));
- 
-   size_t element_count = gccbrig_type_vector_subparts (arith_type);
-   vec<constructor_elt, va_gc> *input_mask_vals = NULL;
- 
-   size_t offset = (brig_opcode == BRIG_OPCODE_UNPACKLO) ? 0 : element_count / 2;
- 
-   for (size_t i = 0; i < element_count / 2; ++i)
-     {
-       CONSTRUCTOR_APPEND_ELT (input_mask_vals, NULL_TREE,
- 			      build_int_cst (element_type, offset + i));
-       CONSTRUCTOR_APPEND_ELT (input_mask_vals, NULL_TREE,
- 			      build_int_cst (element_type,
- 					     offset + i + element_count));
-     }
- 
-   tree mask_vec = build_constructor (mask_vec_type, input_mask_vals);
- 
-   tree perm = build3 (VEC_PERM_EXPR, TREE_TYPE (operands[0]), operands[0],
- 		      operands[1], mask_vec);
-   return perm;
- }
- 
- /* Builds a basic instruction expression from a BRIG instruction.  BRIG_OPCODE
-    is the opcode, BRIG_TYPE the brig type of the instruction, ARITH_TYPE the
-    desired tree type for the instruction, and OPERANDS the instruction's
-    input operands already converted to tree nodes.  */
- 
- tree
- brig_basic_inst_handler::build_inst_expr (BrigOpcode16_t brig_opcode,
- 					  BrigType16_t brig_type,
- 					  tree arith_type,
- 					  tree_stl_vec &operands)
- {
-   tree_code opcode
-     = brig_function::get_tree_code_for_hsa_opcode (brig_opcode, brig_type);
- 
-   BrigType16_t inner_type = brig_type & BRIG_TYPE_BASE_MASK;
- 
-   tree instr_inner_type
-     = VECTOR_TYPE_P (arith_type) ? TREE_TYPE (arith_type) : arith_type;
- 
-   if (opcode == RSHIFT_EXPR || opcode == LSHIFT_EXPR)
-     {
-       /* HSA defines modulo/clipping behavior for shift amounts larger
- 	 than the bit width, while tree.def leaves it undefined.
- 	 We need to mask the upper bits to ensure the defined behavior.  */
-       tree scalar_mask
- 	= build_int_cst (instr_inner_type,
- 			 gccbrig_hsa_type_bit_size (inner_type) - 1);
- 
-       tree mask = VECTOR_TYPE_P (arith_type)
- 		    ? build_vector_from_val (arith_type, scalar_mask)
- 		    : scalar_mask;
- 
-       /* The shift amount is a scalar, broadcast it to produce
- 	 a vector shift.  */
-       if (VECTOR_TYPE_P (arith_type))
- 	operands[1] = build_vector_from_val (arith_type, operands[1]);
-       operands[1] = build2 (BIT_AND_EXPR, arith_type, operands[1], mask);
-     }
- 
-   size_t input_count = operands.size ();
-   size_t output_count = gccbrig_hsa_opcode_op_output_p (brig_opcode, 0) ?
-     1 : 0;
- 
-   if (opcode == TREE_LIST)
-     {
-       /* There was no direct GENERIC opcode for the instruction;
- 	 try to emulate it with a chain of GENERIC nodes.  */
-       if (brig_opcode == BRIG_OPCODE_MAD || brig_opcode == BRIG_OPCODE_MAD24)
- 	{
- 	  /* There doesn't seem to be a "standard" MAD built-in in gcc so let's
- 	     use a chain of multiply + add for now (double rounding method).
- 	     It should be easier for optimizers than a custom built-in call
- 	     WIDEN_MULT_EXPR is close, but requires a double size result
- 	     type.  */
- 	  tree mult_res
- 	    = build2 (MULT_EXPR, arith_type, operands[0], operands[1]);
- 	  return build2 (PLUS_EXPR, arith_type, mult_res, operands[2]);
- 	}
-       else if (brig_opcode == BRIG_OPCODE_MAD24HI)
- 	{
- 	  tree mult_res
- 	    = build2 (MULT_HIGHPART_EXPR, arith_type, operands[0], operands[1]);
- 	  return build2 (PLUS_EXPR, arith_type, mult_res, operands[2]);
- 	}
-       else if (brig_opcode == BRIG_OPCODE_SHUFFLE)
- 	{
- 	  return build_shuffle (arith_type, operands);
- 	}
-       else if (brig_opcode == BRIG_OPCODE_UNPACKLO
- 	       || brig_opcode == BRIG_OPCODE_UNPACKHI)
- 	{
- 	  return build_unpack_lo_or_hi (brig_opcode, arith_type, operands);
- 	}
-       else if (brig_opcode == BRIG_OPCODE_UNPACK)
- 	{
- 	  return build_unpack (operands);
- 	}
-       else if (brig_opcode == BRIG_OPCODE_PACK)
- 	{
- 	  return build_pack (operands);
- 	}
-       else if (brig_opcode == BRIG_OPCODE_NRSQRT)
- 	{
- 	  /* Implement as 1.0/sqrt (x) and assume gcc instruction selects to
- 	     native ISA other than a division, if available.
- 	     TODO: this will happen only with unsafe math optimizations
- 	     on which cannot be used in general to remain HSAIL compliant.
- 	     Perhaps a builtin call would be better option here.  */
- 	  return build2 (RDIV_EXPR, arith_type, build_one_cst (arith_type),
- 			 m_parent.m_cf->expand_or_call_builtin
- 			 (BRIG_OPCODE_SQRT, brig_type, arith_type, operands));
- 	}
-       else if (brig_opcode == BRIG_OPCODE_NRCP)
- 	{
- 	  /* Implement as 1.0/x and assume gcc instruction selects to
- 	     native ISA other than a division, if available.  */
- 	  return build2 (RDIV_EXPR, arith_type, build_one_cst (arith_type),
- 			 operands[0]);
- 	}
-       else if (brig_opcode == BRIG_OPCODE_LANEID
- 	       || brig_opcode == BRIG_OPCODE_MAXWAVEID
- 	       || brig_opcode == BRIG_OPCODE_WAVEID)
- 	{
- 	  /* Assuming WAVESIZE 1 (for now), therefore LANEID, WAVEID and
- 	     MAXWAVEID always return 0.  */
- 	  return build_zero_cst (arith_type);
- 	}
-       else
- 	gcc_unreachable ();
-     }
-   else if (opcode == CALL_EXPR)
-     return m_parent.m_cf->expand_or_call_builtin (brig_opcode, brig_type,
- 						  arith_type, operands);
-   else if (output_count == 1)
-     {
-       if (input_count == 1)
- 	{
- 	  if (opcode == MODIFY_EXPR)
- 	    return operands[0];
- 	  else
- 	    return build1 (opcode, arith_type, operands[0]);
- 	}
-       else if (input_count == 2)
- 	return build2 (opcode, arith_type, operands[0], operands[1]);
-       else if (input_count == 3)
- 	return build3 (opcode, arith_type, operands[0], operands[1],
- 		       operands[2]);
-       else
- 	gcc_unreachable ();
-     }
-   else
-     gcc_unreachable ();
- 
-   return NULL_TREE;
- }
- 
- /* Handles the basic instructions, including packed instructions. Deals
-    with the different packing modes by unpacking/packing the wanted
-    elements.  Delegates most of the instruction cases to build_inst_expr(). */
- 
- size_t
- brig_basic_inst_handler::operator () (const BrigBase *base)
- {
-   const BrigInstBase *brig_inst = (const BrigInstBase *) base;
-   if (brig_inst->opcode == BRIG_OPCODE_NOP)
-     return base->byteCount;
- 
-   tree_stl_vec operands = build_operands (*brig_inst);
- 
-   size_t output_count
-     = gccbrig_hsa_opcode_op_output_p (brig_inst->opcode, 0) ? 1 : 0;
-   size_t input_count
-     = operands.size () == 0 ? 0 : (operands.size () - output_count);
- 
-   gcc_assert (output_count == 0 || output_count == 1);
- 
-   tree_stl_vec::iterator first_input_i = operands.begin ();
-   if (output_count > 0 && operands.size () > 0)
-     ++first_input_i;
- 
-   tree_stl_vec in_operands;
-   in_operands.assign (first_input_i, operands.end ());
- 
-   BrigType16_t brig_inst_type = brig_inst->type;
- 
-   if (brig_inst->opcode == BRIG_OPCODE_FIRSTBIT
-       || brig_inst->opcode == BRIG_OPCODE_LASTBIT
-       || brig_inst->opcode == BRIG_OPCODE_SAD)
-     /* These instructions are reported to be always 32b in HSAIL, but we want
-        to treat them according to their input argument's type to select the
-        correct instruction/builtin.  */
-     brig_inst_type
-       = gccbrig_tree_type_to_hsa_type (TREE_TYPE (in_operands[0]));
- 
-   tree instr_type = gccbrig_tree_type_for_hsa_type (brig_inst_type);
- 
-   if (!instr_type)
-     {
-       gcc_unreachable ();
-       return base->byteCount;
-     }
- 
-   bool is_vec_instr = hsa_type_packed_p (brig_inst_type);
- 
-   size_t element_size_bits;
-   size_t element_count;
- 
-   if (is_vec_instr)
-     {
-       BrigType16_t brig_element_type = brig_inst_type & BRIG_TYPE_BASE_MASK;
-       element_size_bits = gccbrig_hsa_type_bit_size (brig_element_type);
-       element_count = gccbrig_hsa_type_bit_size (brig_inst_type)
- 	/ gccbrig_hsa_type_bit_size (brig_element_type);
-     }
-   else
-     {
-       element_size_bits = gccbrig_hsa_type_bit_size (brig_inst_type);
-       element_count = 1;
-     }
- 
-   /* The actual arithmetics type that should be performed with the
-      operation.  This is not always the same as the original BRIG
-      opcode's type due to implicit conversions of storage-only f16.  */
-   tree arith_type = gccbrig_is_bit_operation (brig_inst->opcode)
- 		      ? gccbrig_tree_type_for_hsa_type (brig_inst_type)
- 		      : get_tree_expr_type_for_hsa_type (brig_inst_type);
- 
-   tree instr_expr = NULL_TREE;
- 
-   BrigPack8_t p = BRIG_PACK_NONE;
-   if (brig_inst->base.kind == BRIG_KIND_INST_MOD)
-     p = ((const BrigInstMod *) brig_inst)->pack;
-   else if (brig_inst->base.kind == BRIG_KIND_INST_CMP)
-     p = ((const BrigInstCmp *) brig_inst)->pack;
- 
-   if (p == BRIG_PACK_PS || p == BRIG_PACK_PSSAT)
-     in_operands[1] = build_lower_element_broadcast (in_operands[1]);
-   else if (p == BRIG_PACK_SP || p == BRIG_PACK_SPSAT)
-     in_operands[0] = build_lower_element_broadcast (in_operands[0]);
- 
-   tree_code opcode
-     = brig_function::get_tree_code_for_hsa_opcode (brig_inst->opcode,
- 						   brig_inst_type);
- 
-   if (p >= BRIG_PACK_PPSAT && p <= BRIG_PACK_PSAT)
-     {
-       scalarized_sat_arithmetics sat_arith (*brig_inst);
-       gcc_assert (input_count == 2);
-       instr_expr = sat_arith (*this, in_operands[0], in_operands[1]);
-     }
-   else if (opcode == RETURN_EXPR)
-     {
-       if (m_parent.m_cf->m_is_kernel)
- 	{
- 	  tree goto_stmt
- 	    = build1 (GOTO_EXPR, void_type_node, m_parent.m_cf->m_exit_label);
- 	  m_parent.m_cf->append_statement (goto_stmt);
- 	  return base->byteCount;
- 	}
-       else
- 	{
- 	  m_parent.m_cf->append_return_stmt ();
- 	  return base->byteCount;
- 	}
-     }
-   else if (opcode == MULT_HIGHPART_EXPR &&
- 	   is_vec_instr && element_size_bits < 64)
-     {
-       /* MULT_HIGHPART_EXPR works only on target dependent vector sizes and
- 	 even the scalars do not seem to work at least for char elements.
- 
- 	 Let's fall back to scalarization and promotion of the vector elements
- 	 to larger types with the MULHI computed as a regular MUL.
- 	 MULHI for 2x64b seems to work with the Intel CPUs I've tested so
- 	 that is passed on for vector processing so there is no need for
- 	 128b scalar arithmetics.
- 
- 	 This is not modular as these type of things do not belong to the
- 	 frontend, there should be a legalization phase before the backend
- 	 that figures out the best way to compute the MULHI for any
- 	 integer vector datatype.
- 
- 	 TODO: promote to larger vector types instead.  For example
- 	 MULT_HIGHPART_EXPR with s8x8 doesn't work, but s16x8 seems to at least
- 	 with my x86-64.
-       */
-       tree_stl_vec operand0_elements;
-       if (input_count > 0)
- 	m_parent.m_cf->unpack (in_operands[0], operand0_elements);
- 
-       tree_stl_vec operand1_elements;
-       if (input_count > 1)
- 	m_parent.m_cf->unpack (in_operands[1], operand1_elements);
- 
-       tree_stl_vec result_elements;
- 
-       tree scalar_type = TREE_TYPE (arith_type);
-       BrigType16_t element_type = brig_inst_type & BRIG_TYPE_BASE_MASK;
-       tree promoted_type = short_integer_type_node;
-       switch (element_type)
- 	{
- 	case BRIG_TYPE_S8:
- 	  promoted_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_S16);
- 	  break;
- 	case BRIG_TYPE_U8:
- 	  promoted_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_U16);
- 	  break;
- 	case BRIG_TYPE_S16:
- 	  promoted_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_S32);
- 	  break;
- 	case BRIG_TYPE_U16:
- 	  promoted_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_U32);
- 	  break;
- 	case BRIG_TYPE_S32:
- 	  promoted_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_S64);
- 	  break;
- 	case BRIG_TYPE_U32:
- 	  promoted_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_U64);
- 	  break;
- 	default:
- 	  gcc_unreachable ();
- 	}
- 
-       size_t promoted_type_size = int_size_in_bytes (promoted_type) * 8;
-       size_t element_count = gccbrig_type_vector_subparts (arith_type);
-       for (size_t i = 0; i < element_count; ++i)
- 	{
- 	  tree operand0 = convert (promoted_type, operand0_elements.at (i));
- 	  tree operand1 = convert (promoted_type, operand1_elements.at (i));
- 
- 	  tree scalar_expr
- 	    = build2 (MULT_EXPR, promoted_type, operand0, operand1);
- 
- 	  scalar_expr
- 	    = build2 (RSHIFT_EXPR, promoted_type, scalar_expr,
- 		      build_int_cstu (promoted_type, promoted_type_size / 2));
- 
- 	  result_elements.push_back (convert (scalar_type, scalar_expr));
- 	}
-       instr_expr = m_parent.m_cf->pack (result_elements);
-     }
-   else
-     {
-       /* 'class' is always of b1 type, let's consider it by its
- 	 float type when building the instruction to find the
- 	 correct builtin.  */
-       if (brig_inst->opcode == BRIG_OPCODE_CLASS)
- 	brig_inst_type = ((const BrigInstSourceType *) base)->sourceType;
-       instr_expr = build_inst_expr (brig_inst->opcode, brig_inst_type,
- 				     arith_type, in_operands);
-     }
- 
-   if (instr_expr == NULL_TREE)
-     {
-       gcc_unreachable ();
-       return base->byteCount;
-     }
- 
-   if (p == BRIG_PACK_SS || p == BRIG_PACK_S || p == BRIG_PACK_SSSAT
-       || p == BRIG_PACK_SSAT)
-     {
-       /* In case of _s_ or _ss_, select only the lowest element
- 	 from the new input to the output.  We could extract
- 	 the element and use a scalar operation, but try
- 	 to keep data in vector registers as much as possible
- 	 to avoid copies between scalar and vector datapaths.  */
-       tree old_value;
-       tree half_storage_type = gccbrig_tree_type_for_hsa_type (brig_inst_type);
-       bool is_fp16_operation
- 	= (brig_inst_type & BRIG_TYPE_BASE_MASK) == BRIG_TYPE_F16
- 	&& !gccbrig_is_bit_operation (brig_inst->opcode);
- 
-       if (is_fp16_operation)
- 	old_value = build_h2f_conversion
- 	  (build_resize_convert_view (half_storage_type, operands[0]));
-       else
- 	old_value
- 	  = build_resize_convert_view (TREE_TYPE (instr_expr), operands[0]);
- 
-       size_t esize = is_fp16_operation ? 32 : element_size_bits;
- 
-       /* Construct a permutation mask where other elements than the lowest one
- 	 is picked from the old_value.  */
-       tree mask_inner_type = build_nonstandard_integer_type (esize, 1);
-       vec<constructor_elt, va_gc> *constructor_vals = NULL;
-       for (size_t i = 0; i < element_count; ++i)
- 	{
- 	  tree cst;
- 
- 	  if (i == 0)
- 	    cst = build_int_cstu (mask_inner_type, element_count);
- 	  else
- 	    cst = build_int_cstu (mask_inner_type, i);
- 	  CONSTRUCTOR_APPEND_ELT (constructor_vals, NULL_TREE, cst);
- 	}
-       tree mask_vec_type = build_vector_type (mask_inner_type, element_count);
-       tree mask = build_vector_from_ctor (mask_vec_type, constructor_vals);
- 
-       tree new_value = create_tmp_var (TREE_TYPE (instr_expr), "new_output");
-       tree assign
- 	= build2 (MODIFY_EXPR, TREE_TYPE (instr_expr), new_value, instr_expr);
-       m_parent.m_cf->append_statement (assign);
- 
-       instr_expr
- 	= build3 (VEC_PERM_EXPR, arith_type, old_value, new_value, mask);
- 
-       tree lower_output = create_tmp_var (TREE_TYPE (instr_expr), "s_output");
-       tree assign_lower = build2 (MODIFY_EXPR, TREE_TYPE (instr_expr),
- 				  lower_output, instr_expr);
-       m_parent.m_cf->append_statement (assign_lower);
-       instr_expr = lower_output;
-     }
- 
-   if (output_count == 1)
-     build_output_assignment (*brig_inst, operands[0], instr_expr);
-   else
-     m_parent.m_cf->append_statement (instr_expr);
-   return base->byteCount;
- }
- 
- /* Create an expression that broadcasts the lowest element of the
-    vector in VEC_OPERAND to all elements of the returned vector.  */
- 
- tree
- brig_basic_inst_handler::build_lower_element_broadcast (tree vec_operand)
- {
-   /* Build the broadcast using shuffle because there's no
-      direct broadcast in GENERIC and this way there's no need for
-      a separate extract of the lowest element.  */
-   tree element_type = TREE_TYPE (TREE_TYPE (vec_operand));
-   size_t esize = 8 * int_size_in_bytes (element_type);
- 
-   size_t element_count
-     = gccbrig_type_vector_subparts (TREE_TYPE (vec_operand));
-   tree mask_inner_type = build_nonstandard_integer_type (esize, 1);
-   vec<constructor_elt, va_gc> *constructor_vals = NULL;
- 
-   /* Construct the mask.  */
-   for (size_t i = 0; i < element_count; ++i)
-     {
-       tree cst = build_int_cstu (mask_inner_type, element_count);
-       CONSTRUCTOR_APPEND_ELT (constructor_vals, NULL_TREE, cst);
-     }
-   tree mask_vec_type = build_vector_type (mask_inner_type, element_count);
-   tree mask = build_vector_from_ctor (mask_vec_type, constructor_vals);
- 
-   return build3 (VEC_PERM_EXPR, TREE_TYPE (vec_operand), vec_operand,
- 		 vec_operand, mask);
- }
- 
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-branch-inst-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-branch-inst-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-branch-inst-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-branch-inst-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,238 ****
- /* brig-branch-inst-handler.cc -- brig branch instruction handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- 
- #include "errors.h"
- #include "brig-util.h"
- #include "tree-pretty-print.h"
- #include "print-tree.h"
- #include "vec.h"
- #include "fold-const.h"
- 
- size_t
- brig_branch_inst_handler::operator () (const BrigBase *base)
- {
-   const BrigInstBase *brig_inst
-     = (const BrigInstBase *) &((const BrigInstBasic *) base)->base;
- 
-   if (brig_inst->opcode == BRIG_OPCODE_CALL)
-     {
-       const BrigData *operand_entries
- 	= m_parent.get_brig_data_entry (brig_inst->operands);
-       tree func_ref = NULL_TREE;
-       vec<tree, va_gc> *out_args;
-       vec_alloc (out_args, 1);
-       vec<tree, va_gc> *in_args;
-       /* Ten elem initially, more reserved if needed. */
-       vec_alloc (in_args, 10);
- 
-       size_t operand_count = operand_entries->byteCount / 4;
-       gcc_assert (operand_count < 4);
- 
-       for (size_t i = 0; i < operand_count; ++i)
- 	{
- 	  uint32_t operand_offset
- 	    = ((const uint32_t *) &operand_entries->bytes)[i];
- 	  const BrigBase *operand_data
- 	    = m_parent.get_brig_operand_entry (operand_offset);
- 	  if (i == 1)
- 	    {
- 	      gcc_assert (operand_data->kind == BRIG_KIND_OPERAND_CODE_REF);
- 	      func_ref = build_tree_operand (*brig_inst, *operand_data);
- 	      continue;
- 	    }
- 	  gcc_assert (operand_data->kind == BRIG_KIND_OPERAND_CODE_LIST);
- 	  const BrigOperandCodeList *codelist
- 	    = (const BrigOperandCodeList *) operand_data;
- 	  const BrigData *data
- 	    = m_parent.get_brig_data_entry (codelist->elements);
- 
- 	  size_t bytes = data->byteCount;
- 	  const BrigOperandOffset32_t *operand_ptr
- 	    = (const BrigOperandOffset32_t *) data->bytes;
- 
- 	  bool out_args_p = i == 0;
- 
- 	  while (bytes > 0)
- 	    {
- 	      BrigOperandOffset32_t offset = *operand_ptr;
- 	      const BrigBase *code_element
- 		= m_parent.get_brig_code_entry (offset);
- 	      gcc_assert (code_element->kind == BRIG_KIND_DIRECTIVE_VARIABLE);
- 	      const BrigDirectiveVariable *brig_var
- 		= (const BrigDirectiveVariable *) code_element;
- 	      tree var = m_parent.m_cf->arg_variable (brig_var);
- 
- 	      if (brig_var->type & BRIG_TYPE_ARRAY)
- 		{
- 		  /* Array return values are passed as the first argument.  */
- 		  out_args_p = false;
- 		  /* Pass pointer to the element zero and use its element zero
- 		     as the base address.  */
- 		  tree etype = TREE_TYPE (TREE_TYPE (var));
- 		  tree ptype = build_pointer_type (etype);
- 		  tree element_zero
- 		    = build4 (ARRAY_REF, etype, var, integer_zero_node,
- 			      NULL_TREE, NULL_TREE);
- 		  var = build1 (ADDR_EXPR, ptype, element_zero);
- 		}
- 
- 	      gcc_assert (var != NULL_TREE);
- 	      vec_safe_push (out_args_p ? out_args : in_args, var);
- 	      ++operand_ptr;
- 	      bytes -= 4;
- 	    }
- 	}
- 
-       gcc_assert (func_ref != NULL_TREE);
-       gcc_assert (out_args->length () == 0 || out_args->length () == 1);
- 
-       tree ret_val_type = void_type_node;
-       tree ret_val = NULL_TREE;
-       if (out_args->length () == 1)
- 	{
- 	  ret_val = (*out_args)[0];
- 	  ret_val_type = TREE_TYPE (ret_val);
- 	}
- 
-       /* Pass the hidden kernel arguments along to the called functions as
- 	 they might call builtins that need them or access group/private
- 	 memory.  */
- 
-       tree group_local_offset
- 	= m_parent.m_cf->add_temp_var ("group_local_offset",
- 				       build_int_cst
- 				       (uint32_type_node,
- 					m_parent.m_cf->
- 					m_local_group_variables.size()));
- 
-       /* TODO: ensure the callee's frame is aligned!  */
- 
-       vec_safe_reserve (in_args, 4);
-       vec_safe_push (in_args, m_parent.m_cf->m_context_arg);
-       vec_safe_push (in_args, m_parent.m_cf->m_group_base_arg);
-       vec_safe_push (in_args, group_local_offset);
-       vec_safe_push (in_args, m_parent.m_cf->m_private_base_arg);
- 
-       tree call = build_call_vec (ret_val_type, build_fold_addr_expr (func_ref),
- 				  in_args);
-       TREE_NOTHROW (func_ref) = 1;
-       TREE_NOTHROW (call) = 1;
- 
-       if (ret_val != NULL_TREE)
- 	{
- 	  TREE_ADDRESSABLE (ret_val) = 1;
- 	  tree result_assign
- 	    = build2 (MODIFY_EXPR, TREE_TYPE (ret_val), ret_val, call);
- 	  m_parent.m_cf->append_statement (result_assign);
- 	}
-       else
- 	{
- 	  m_parent.m_cf->append_statement (call);
- 	}
- 
-       m_parent.m_cf->m_called_functions.push_back (func_ref);
-       if (DECL_EXTERNAL (func_ref))
- 	m_parent.add_decl_call (call);
-       m_parent.m_cf->start_new_bb ();
- 
-       return base->byteCount;
-     }
- 
-   tree instr_type = gccbrig_tree_type_for_hsa_type (brig_inst->type);
-   tree_stl_vec operands = build_operands (*brig_inst);
- 
-   if (brig_inst->opcode == BRIG_OPCODE_BR)
-     {
-       tree goto_stmt = build1 (GOTO_EXPR, instr_type, operands[0]);
-       m_parent.m_cf->append_statement (goto_stmt);
-     }
-   else if (brig_inst->opcode == BRIG_OPCODE_SBR)
-     {
-       tree select = operands[0];
-       tree cases = operands[1];
- 
-       tree switch_expr = build2 (SWITCH_EXPR, TREE_TYPE (select), select,
- 				 NULL_TREE);
- 
-       tree default_case
- 	= build_case_label (NULL_TREE, NULL_TREE,
- 			    create_artificial_label (UNKNOWN_LOCATION));
-       append_to_statement_list (default_case, &SWITCH_BODY (switch_expr));
- 
-       tree default_jump
- 	= build1 (GOTO_EXPR, void_type_node, TREE_VEC_ELT (cases, 0));
-       append_to_statement_list (default_jump, &SWITCH_BODY (switch_expr));
- 
-       for (int c = 0; c < TREE_VEC_LENGTH (cases); ++c)
- 	{
- 	  tree case_label
- 	    = build_case_label (build_int_cst (integer_type_node, c), NULL_TREE,
- 				create_artificial_label (UNKNOWN_LOCATION));
- 
- 	  append_to_statement_list (case_label, &SWITCH_BODY (switch_expr));
- 
- 	  tree jump
- 	    = build1 (GOTO_EXPR, void_type_node, TREE_VEC_ELT (cases, c));
- 	  append_to_statement_list (jump, &SWITCH_BODY (switch_expr));
- 	}
-       m_parent.m_cf->append_statement (switch_expr);
-     }
-   else if (brig_inst->opcode == BRIG_OPCODE_CBR)
-     {
-       tree condition = operands[0];
-       tree target_goto = build1 (GOTO_EXPR, void_type_node, operands[1]);
-       /* Represents the if..else as (condition)?(goto foo):(goto bar).  */
-       tree if_stmt
- 	= build3 (COND_EXPR, void_type_node, condition, target_goto, NULL_TREE);
-       m_parent.m_cf->append_statement (if_stmt);
-     }
-   else if (brig_inst->opcode == BRIG_OPCODE_WAVEBARRIER)
-     {
-       /* WAVEBARRIER is a NOP when WAVESIZE = 1.  */
-     }
-   else if (brig_inst->opcode == BRIG_OPCODE_BARRIER)
-     {
-       m_parent.m_cf->m_has_barriers = true;
-       tree_stl_vec call_operands;
-       /* FIXME.  We should add attributes (are there suitable ones in gcc?) that
- 	 ensure the barrier won't be duplicated or moved out of loops etc.
- 	 Like the 'noduplicate' of LLVM.  Same goes for fbarriers.  */
-       m_parent.m_cf->append_statement
- 	(m_parent.m_cf->expand_or_call_builtin (brig_inst->opcode,
- 						BRIG_TYPE_NONE, NULL_TREE,
- 						call_operands));
-     }
-   else if (brig_inst->opcode >= BRIG_OPCODE_ARRIVEFBAR
- 	   && brig_inst->opcode <= BRIG_OPCODE_WAITFBAR)
-     {
-       m_parent.m_cf->m_has_barriers = true;
-       m_parent.m_cf->append_statement
- 	(m_parent.m_cf->expand_or_call_builtin (brig_inst->opcode,
- 						BRIG_TYPE_NONE,
- 						uint32_type_node, operands));
-     }
-   else
-     gcc_unreachable ();
-   m_parent.m_cf->start_new_bb ();
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-cmp-inst-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-cmp-inst-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-cmp-inst-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-cmp-inst-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,198 ****
- /* brig-cmp-inst-handler.cc -- brig cmp instruction handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- #include "diagnostic.h"
- #include "tree-pretty-print.h"
- #include "print-tree.h"
- #include "brig-util.h"
- #include "convert.h"
- 
- size_t
- brig_cmp_inst_handler::operator () (const BrigBase *base)
- {
-   const BrigInstBase *inst_base = (const BrigInstBase *) base;
-   const BrigInstCmp *inst = (const BrigInstCmp *) base;
- 
-   tree cmp_type = get_tree_expr_type_for_hsa_type (inst->sourceType);
- 
-   /* The destination type to convert the comparison result to.  */
-   tree dest_type = gccbrig_tree_type_for_hsa_type (inst_base->type);
- 
-   const bool is_fp16_dest
-     = (inst_base->type & BRIG_TYPE_BASE_MASK) == BRIG_TYPE_F16;
-   const bool is_boolean_dest
-     = (inst_base->type & BRIG_TYPE_BASE_MASK) == BRIG_TYPE_B1;
- 
-   bool is_int_cmp = VECTOR_TYPE_P (cmp_type)
- 		      ? INTEGRAL_TYPE_P (TREE_TYPE (cmp_type))
- 		      : INTEGRAL_TYPE_P (cmp_type);
- 
-   /* The type for the GENERIC comparison.  It should match the
-      input operand width for vector comparisons, a boolean
-      otherwise.  */
-   tree result_type = get_comparison_result_type (cmp_type);
- 
-   /* Save the result as a boolean and extend/convert it to the
-      wanted destination type.  */
-   tree expr = NULL_TREE;
- 
-   std::vector<tree> operands = build_operands (*inst_base);
- 
-   switch (inst->compare)
-     {
-     case BRIG_COMPARE_SEQ:
-     case BRIG_COMPARE_EQ:
-       expr = build2 (EQ_EXPR, result_type, operands[1], operands[2]);
-       break;
-     case BRIG_COMPARE_SNE:
-     case BRIG_COMPARE_NE:
-       expr = build2 (NE_EXPR, result_type, operands[1], operands[2]);
- 
-       if (!is_int_cmp)
- 	expr = build2 (BIT_AND_EXPR, TREE_TYPE (expr),
- 		       expr,
- 		       build2 (ORDERED_EXPR, result_type, operands[1],
- 			       operands[2]));
-       break;
-     case BRIG_COMPARE_SLT:
-     case BRIG_COMPARE_LT:
-       expr = build2 (LT_EXPR, result_type, operands[1], operands[2]);
-       break;
-     case BRIG_COMPARE_SLE:
-     case BRIG_COMPARE_LE:
-       expr = build2 (LE_EXPR, result_type, operands[1], operands[2]);
-       break;
-     case BRIG_COMPARE_SGT:
-     case BRIG_COMPARE_GT:
-       expr = build2 (GT_EXPR, result_type, operands[1], operands[2]);
-       break;
-     case BRIG_COMPARE_SGE:
-     case BRIG_COMPARE_GE:
-       expr = build2 (GE_EXPR, result_type, operands[1], operands[2]);
-       break;
-     case BRIG_COMPARE_SEQU:
-     case BRIG_COMPARE_EQU:
-       expr = build2 (UNEQ_EXPR, result_type, operands[1], operands[2]);
-       break;
-     case BRIG_COMPARE_SNEU:
-     case BRIG_COMPARE_NEU:
-       expr = build2 (NE_EXPR, result_type, operands[1], operands[2]);
-       break;
-     case BRIG_COMPARE_SLTU:
-     case BRIG_COMPARE_LTU:
-       expr = build2 (UNLT_EXPR, result_type, operands[1], operands[2]);
-       break;
-     case BRIG_COMPARE_SLEU:
-     case BRIG_COMPARE_LEU:
-       expr = build2 (UNLE_EXPR, result_type, operands[1], operands[2]);
-       break;
-     case BRIG_COMPARE_SGTU:
-     case BRIG_COMPARE_GTU:
-       expr = build2 (UNGT_EXPR, result_type, operands[1], operands[2]);
-       break;
-     case BRIG_COMPARE_SGEU:
-     case BRIG_COMPARE_GEU:
-       expr = build2 (UNGE_EXPR, result_type, operands[1], operands[2]);
-       break;
-     case BRIG_COMPARE_SNUM:
-     case BRIG_COMPARE_NUM:
-       expr = build2 (ORDERED_EXPR, result_type, operands[1], operands[2]);
-       break;
-     case BRIG_COMPARE_SNAN:
-     case BRIG_COMPARE_NAN:
-       expr = build2 (UNORDERED_EXPR, result_type, operands[1], operands[2]);
-       break;
-     default:
-       break;
-     }
- 
-   if (expr == NULL_TREE)
-     gcc_unreachable ();
- 
-   if (is_fp16_dest)
-     {
-       expr = convert_to_real (brig_to_generic::s_fp32_type, expr);
-     }
-   else if (VECTOR_TYPE_P (dest_type) && ANY_INTEGRAL_TYPE_P (dest_type)
- 	   && !is_boolean_dest
- 	   && (inst->sourceType & BRIG_TYPE_BASE_MASK) != BRIG_TYPE_F16)
-     {
-       /* In later gcc versions, the output of comparison is not
- 	 all ones for vectors like still in 4.9.1.  We need to use
- 	 an additional VEC_COND_EXPR to produce the all ones 'true' value
- 	 required by HSA.
- 	 VEC_COND_EXPR <a == b, { -1, -1, -1, -1 }, { 0, 0, 0, 0 }>; */
- 
-       tree all_ones
- 	= build_vector_from_val (dest_type,
- 			       build_minus_one_cst (TREE_TYPE (dest_type)));
-       tree all_zeroes
- 	= build_vector_from_val (dest_type,
- 			       build_zero_cst (TREE_TYPE (dest_type)));
-       expr = build3 (VEC_COND_EXPR, dest_type, expr, all_ones, all_zeroes);
-     }
-   else if (INTEGRAL_TYPE_P (dest_type) && !is_boolean_dest)
-     {
-       /* We need to produce the all-ones pattern for the width of the whole
- 	 resulting integer type.  Use back and forth shifts for propagating
- 	 the lower 1.  */
-       tree signed_type = signed_type_for (dest_type);
-       tree signed_result = convert_to_integer (signed_type, expr);
- 
-       size_t result_width = int_size_in_bytes (dest_type) * BITS_PER_UNIT;
- 
-       tree shift_amount_cst
- 	= build_int_cstu (signed_type, result_width - 1);
- 
-       tree shift_left_result
- 	= build2 (LSHIFT_EXPR, signed_type, signed_result, shift_amount_cst);
- 
-       expr = build2 (RSHIFT_EXPR, signed_type, shift_left_result,
- 		     shift_amount_cst);
-     }
-   else if (SCALAR_FLOAT_TYPE_P (dest_type))
-     {
-       expr = convert_to_real (dest_type, expr);
-     }
-   else if (VECTOR_TYPE_P (dest_type)
- 	   && (inst->sourceType & BRIG_TYPE_BASE_MASK) == BRIG_TYPE_F16)
-     {
-       /* Because F16 comparison is emulated as an F32 comparison with S32
- 	 results, we must now truncate the result vector to S16s so it
- 	 fits to the destination register.  We can build the target vector
- 	 type from the f16 storage type (unsigned ints).  */
-       expr = m_parent.m_cf->add_temp_var ("wide_cmp_result", expr);
-       tree_stl_vec wide_elements;
-       tree_stl_vec shrunk_elements;
-       m_parent.m_cf->unpack (expr, wide_elements);
-       for (size_t i = 0; i < wide_elements.size (); ++i)
- 	{
- 	  tree wide = wide_elements.at (i);
- 	  shrunk_elements.push_back
- 	    (convert_to_integer (short_integer_type_node, wide));
- 	}
-       expr = m_parent.m_cf->pack (shrunk_elements);
-     }
-   build_output_assignment (*inst_base, operands[0], expr);
- 
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-code-entry-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-code-entry-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-code-entry-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-code-entry-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,1305 ****
- /* brig-code-entry-handler.cc -- a gccbrig base class
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- 
- #include "stringpool.h"
- #include "tree-iterator.h"
- #include "toplev.h"
- #include "diagnostic.h"
- #include "brig-machine.h"
- #include "brig-util.h"
- #include "errors.h"
- #include "real.h"
- #include "print-tree.h"
- #include "tree-pretty-print.h"
- #include "target.h"
- #include "langhooks.h"
- #include "gimple-expr.h"
- #include "convert.h"
- #include "brig-util.h"
- #include "builtins.h"
- #include "phsa.h"
- #include "brig-builtins.h"
- #include "fold-const.h"
- 
- brig_code_entry_handler::brig_code_entry_handler (brig_to_generic &parent)
-   : brig_entry_handler (parent)
- {
- }
- 
- /* Build a tree operand which is a reference to a piece of code.  REF is the
-    original reference as a BRIG object.  */
- 
- tree
- brig_code_entry_handler::build_code_ref (const BrigBase &ref)
- {
-   if (ref.kind == BRIG_KIND_DIRECTIVE_LABEL)
-     {
-       const BrigDirectiveLabel *brig_label = (const BrigDirectiveLabel *) &ref;
- 
-       const BrigData *label_name
- 	= m_parent.get_brig_data_entry (brig_label->name);
- 
-       std::string label_str ((const char *) (label_name->bytes),
- 			     label_name->byteCount);
-       return m_parent.m_cf->label (label_str);
-     }
-   else if (ref.kind == BRIG_KIND_DIRECTIVE_FUNCTION)
-     {
-       const BrigDirectiveExecutable *func
-        = (const BrigDirectiveExecutable *) &ref;
-       return m_parent.function_decl (m_parent.get_mangled_name (func));
-     }
-   else if (ref.kind == BRIG_KIND_DIRECTIVE_FBARRIER)
-     {
-       const BrigDirectiveFbarrier* fbar = (const BrigDirectiveFbarrier*)&ref;
- 
-       std::string var_name = m_parent.get_mangled_name (fbar);
-       uint64_t offset
- 	= m_parent.m_cf->group_variable_segment_offset (var_name);
- 
-       tree local_offset = build_int_cst (uint32_type_node, offset);
-       if (m_parent.m_cf->m_local_group_variables.has_variable (var_name))
- 	local_offset
- 	  = build2 (PLUS_EXPR, uint64_type_node, local_offset,
- 		    convert (uint64_type_node,
- 			     m_parent.m_cf->m_group_local_offset_arg));
-       return local_offset;
-     }
-   else
-     gcc_unreachable ();
- }
- 
- /* Produce a tree operand for the given BRIG_INST and its OPERAND.
-    OPERAND_TYPE should be the operand type in case it should not
-    be dictated by the BrigBase.  IS_INPUT indicates if the operand
-    is an input operand or a result.  */
- 
- tree
- brig_code_entry_handler::build_tree_operand (const BrigInstBase &brig_inst,
- 					     const BrigBase &operand,
- 					     tree operand_type, bool is_input)
- {
-   switch (operand.kind)
-     {
-     case BRIG_KIND_OPERAND_OPERAND_LIST:
-       {
- 	vec<constructor_elt, va_gc> *constructor_vals = NULL;
- 	const BrigOperandOperandList &oplist
- 	  = (const BrigOperandOperandList &) operand;
- 	const BrigData *data = m_parent.get_brig_data_entry (oplist.elements);
- 	size_t bytes = data->byteCount;
- 	const BrigOperandOffset32_t *operand_ptr
- 	  = (const BrigOperandOffset32_t *) data->bytes;
- 	while (bytes > 0)
- 	  {
- 	    BrigOperandOffset32_t offset = *operand_ptr;
- 	    const BrigBase *operand_element
- 	      = m_parent.get_brig_operand_entry (offset);
- 	    tree element
- 	      = build_tree_operand (brig_inst, *operand_element, operand_type);
- 
- 	    /* In case a vector is used an input, cast the elements to
- 	       correct size here so we don't need a separate unpack/pack for it.
- 	       fp16-fp32 conversion is done in build_operands ().  */
- 	    if (is_input && TREE_TYPE (element) != operand_type)
- 	      element = build_resize_convert_view (operand_type, element);
- 
- 	    CONSTRUCTOR_APPEND_ELT (constructor_vals, NULL_TREE, element);
- 	    ++operand_ptr;
- 	    bytes -= 4;
- 	  }
- 	size_t element_count = data->byteCount / 4;
- 	tree vec_type = build_vector_type (operand_type, element_count);
- 
- 	return build_constructor (vec_type, constructor_vals);
-       }
-     case BRIG_KIND_OPERAND_CODE_LIST:
-       {
- 	/* Build a TREE_VEC of code expressions.  */
- 
- 	const BrigOperandCodeList &oplist
- 	  = (const BrigOperandCodeList &) operand;
- 	const BrigData *data = m_parent.get_brig_data_entry (oplist.elements);
- 	size_t bytes = data->byteCount;
- 	const BrigOperandOffset32_t *operand_ptr
- 	  = (const BrigOperandOffset32_t *) data->bytes;
- 
- 	size_t case_index = 0;
- 	size_t element_count = data->byteCount / 4;
- 
- 	/* Create a TREE_VEC out of the labels in the list.  */
- 	tree vec = make_tree_vec (element_count);
- 
- 	while (bytes > 0)
- 	  {
- 	    BrigOperandOffset32_t offset = *operand_ptr;
- 	    const BrigBase *ref = m_parent.get_brig_code_entry (offset);
- 	    tree element = build_code_ref (*ref);
- 
- 	    gcc_assert (case_index < element_count);
- 	    TREE_VEC_ELT (vec, case_index) = element;
- 	    case_index++;
- 
- 	    ++operand_ptr;
- 	    bytes -= 4;
- 	  }
- 	return vec;
-       }
-     case BRIG_KIND_OPERAND_REGISTER:
-       {
- 	const BrigOperandRegister *brig_reg
- 	  = (const BrigOperandRegister *) &operand;
- 	return m_parent.m_cf->get_m_var_declfor_reg (brig_reg);
-       }
-     case BRIG_KIND_OPERAND_CONSTANT_BYTES:
-       {
- 	const BrigOperandConstantBytes *brigConst
- 	  = (const BrigOperandConstantBytes *) &operand;
- 	/* The constants can be of different type than the instruction
- 	   and are implicitly casted to the input operand.  */
- 	return get_tree_cst_for_hsa_operand (brigConst, NULL_TREE);
-       }
-     case BRIG_KIND_OPERAND_WAVESIZE:
-       {
- 	if (!INTEGRAL_TYPE_P (operand_type))
- 	  {
- 	    gcc_unreachable ();
- 	    return NULL_TREE;
- 	  }
- 	return build_int_cstu (operand_type, gccbrig_get_target_wavesize ());
-       }
-     case BRIG_KIND_OPERAND_CODE_REF:
-       {
- 	const BrigOperandCodeRef *brig_code_ref
- 	  = (const BrigOperandCodeRef *) &operand;
- 
- 	const BrigBase *ref = m_parent.get_brig_code_entry (brig_code_ref->ref);
- 
- 	return build_code_ref (*ref);
-       }
-     case BRIG_KIND_OPERAND_ADDRESS:
-       {
- 	return build_address_operand (brig_inst,
- 				      (const BrigOperandAddress &) operand);
-       }
-     default:
-       gcc_unreachable ();
-     }
- }
- 
- /* Build a tree node representing an address reference from a BRIG_INST and its
-    ADDR_OPERAND.  */
- 
- tree
- brig_code_entry_handler::build_address_operand
-   (const BrigInstBase &brig_inst, const BrigOperandAddress &addr_operand)
- {
-   tree instr_type = gccbrig_tree_type_for_hsa_type (brig_inst.type);
- 
-   BrigSegment8_t segment = BRIG_SEGMENT_GLOBAL;
-   if (brig_inst.opcode == BRIG_OPCODE_LDA)
-     segment = ((const BrigInstAddr &) brig_inst).segment;
-   else if (brig_inst.base.kind == BRIG_KIND_INST_MEM)
-     segment = ((const BrigInstMem &) brig_inst).segment;
-   else if (brig_inst.base.kind == BRIG_KIND_INST_ATOMIC)
-     segment = ((const BrigInstAtomic &) brig_inst).segment;
- 
-   tree var_offset = NULL_TREE;
-   tree const_offset = NULL_TREE;
-   tree symbol_base = NULL_TREE;
- 
-   if (addr_operand.symbol != 0)
-     {
-       const BrigDirectiveVariable *arg_symbol
- 	= (const BrigDirectiveVariable *) m_parent.get_brig_code_entry
- 	(addr_operand.symbol);
- 
-       std::string var_name = m_parent.get_mangled_name (arg_symbol);
- 
-       if (segment == BRIG_SEGMENT_KERNARG)
- 	{
- 	  /* Find the offset to the kernarg buffer for the given
- 	     kernel argument variable.  */
- 	  tree func = m_parent.m_cf->m_func_decl;
- 	  /* __args is the first parameter in kernel functions.  */
- 	  symbol_base = DECL_ARGUMENTS (func);
- 	  uint64_t offset = m_parent.m_cf->kernel_arg_offset (arg_symbol);
- 	  if (offset > 0)
- 	    const_offset = build_int_cst (size_type_node, offset);
- 	}
-       else if (segment == BRIG_SEGMENT_GROUP)
- 	{
- 	  uint64_t offset
- 	    = m_parent.m_cf->group_variable_segment_offset (var_name);
- 	  const_offset = build_int_cst (size_type_node, offset);
- 
- 	  /* If it's a local group variable reference, substract the local
- 	     group segment offset to get the group base ptr offset.  */
- 	  if (m_parent.m_cf->m_local_group_variables.has_variable (var_name))
- 	    const_offset
- 	      = build2 (PLUS_EXPR, uint64_type_node, const_offset,
- 			convert (uint64_type_node,
- 				 m_parent.m_cf->m_group_local_offset_arg));
- 
- 	}
-       else if (segment == BRIG_SEGMENT_PRIVATE || segment == BRIG_SEGMENT_SPILL)
- 	{
- 	  uint32_t offset = m_parent.private_variable_segment_offset (var_name);
- 
- 	  /* Compute the offset to the work item's copy:
- 
- 	     single-wi-offset * local_size + wiflatid * varsize
- 
- 	     This way the work items have the same variable in
- 	     successive elements to each other in the segment,
- 	     helping to achieve autovectorization of loads/stores
- 	     with stride 1.  */
- 
- 	  tree_stl_vec uint32_0
- 	    = tree_stl_vec (1, build_int_cst (uint32_type_node, 0));
- 
- 	  tree_stl_vec uint32_1
- 	    = tree_stl_vec (1, build_int_cst (uint32_type_node, 1));
- 
- 	  tree_stl_vec uint32_2
- 	    = tree_stl_vec (1, build_int_cst (uint32_type_node, 2));
- 
- 	  tree local_size
- 	    = build2 (MULT_EXPR, uint32_type_node,
- 		      m_parent.m_cf->expand_or_call_builtin
- 		      (BRIG_OPCODE_WORKGROUPSIZE, BRIG_TYPE_U32,
- 		       uint32_type_node, uint32_0),
- 		      m_parent.m_cf->expand_or_call_builtin
- 		      (BRIG_OPCODE_WORKGROUPSIZE, BRIG_TYPE_U32,
- 		       uint32_type_node, uint32_1));
- 
- 	  local_size
- 	    = build2 (MULT_EXPR, uint32_type_node,
- 		      m_parent.m_cf->expand_or_call_builtin
- 		      (BRIG_OPCODE_WORKGROUPSIZE, BRIG_TYPE_U32,
- 		       uint32_type_node, uint32_2),
- 		      local_size);
- 
- 	  tree var_region
- 	    = build2 (MULT_EXPR, uint32_type_node,
- 		      build_int_cst (uint32_type_node, offset), local_size);
- 
- 	  tree_stl_vec operands;
- 	  tree pos
- 	    = build2 (MULT_EXPR, uint32_type_node,
- 		      build_int_cst (uint32_type_node,
- 				     m_parent.private_variable_size (var_name)),
- 		      m_parent.m_cf->expand_or_call_builtin
- 		      (BRIG_OPCODE_WORKITEMFLATID, BRIG_TYPE_U32,
- 		       uint32_type_node, operands));
- 
- 	  tree var_offset
- 	    = build2 (PLUS_EXPR, uint32_type_node, var_region, pos);
- 
- 	  /* In case of LDA this is returned directly as an integer value.
- 	     For other mem-related instructions, we will convert this segment
- 	     offset to a flat address by adding it as an offset to a (private
- 	     or group) base pointer later on.  Same applies to group_var_offset.  */
- 	  symbol_base
- 	    = m_parent.m_cf->add_temp_var ("priv_var_offset",
- 					   convert (size_type_node,
- 						    var_offset));
- 	}
-       else if (segment == BRIG_SEGMENT_ARG)
- 	{
- 	  tree arg_var_decl;
- 	  if (m_parent.m_cf->m_ret_value_brig_var == arg_symbol)
- 	    arg_var_decl = m_parent.m_cf->m_ret_temp;
- 	  else
- 	    arg_var_decl = m_parent.m_cf->arg_variable (arg_symbol);
- 
- 	  gcc_assert (arg_var_decl != NULL_TREE);
- 
- 	  tree ptype = build_pointer_type (instr_type);
- 
- 	  if (arg_symbol->type & BRIG_TYPE_ARRAY)
- 	    {
- 
- 	      /* Two different type of array references in case of arguments
- 		 depending where they are referred at.  In the caller (argument
- 		 segment), the reference is to an array object and
- 		 in the callee, the array object has been passed as a pointer
- 		 to the array object.  */
- 
- 	      if (POINTER_TYPE_P (TREE_TYPE (arg_var_decl)))
- 		symbol_base = build_resize_convert_view (ptype, arg_var_decl);
- 	      else
- 		{
- 		  /* In case we are referring to an array (the argument in
- 		     call site), use its element zero as the base address.  */
- 		  tree element_zero
- 		    = build4 (ARRAY_REF, TREE_TYPE (TREE_TYPE (arg_var_decl)),
- 			      arg_var_decl, integer_zero_node, NULL_TREE,
- 			      NULL_TREE);
- 		  symbol_base = build1 (ADDR_EXPR, ptype, element_zero);
- 		}
- 	    }
- 	  else
- 	    symbol_base = build1 (ADDR_EXPR, ptype, arg_var_decl);
- 	}
-       else
- 	{
- 	  tree global_var_decl = m_parent.global_variable (var_name);
- 
- 	  /* In case the global variable hasn't been defined (yet),
- 	     use the host def indirection ptr variable.  */
- 	  if (global_var_decl == NULL_TREE)
- 	    {
- 	      std::string host_ptr_name
- 		= std::string (PHSA_HOST_DEF_PTR_PREFIX) + var_name;
- 	      tree host_defined_ptr = m_parent.global_variable (host_ptr_name);
- 	      gcc_assert (host_defined_ptr != NULL_TREE);
- 	      symbol_base = host_defined_ptr;
- 	    }
- 	  else
- 	    {
- 	      gcc_assert (global_var_decl != NULL_TREE);
- 
- 	      tree ptype = build_pointer_type (instr_type);
- 	      symbol_base = build1 (ADDR_EXPR, ptype, global_var_decl);
- 	    }
- 	}
-     }
- 
-   if (brig_inst.opcode != BRIG_OPCODE_LDA)
-     {
-       /* In case of lda_* we want to return the segment address because it's
- 	 used as a value, perhaps in address computation and later converted
- 	 explicitly to a flat address.
- 
- 	 In case of other instructions with memory operands we produce the flat
- 	 address directly here (assuming the target does not have a separate
- 	 address space for group/private segments for now).  */
-       if (segment == BRIG_SEGMENT_GROUP)
- 	symbol_base = m_parent.m_cf->m_group_base_arg;
-       else if (segment == BRIG_SEGMENT_PRIVATE
- 	       || segment == BRIG_SEGMENT_SPILL)
- 	{
- 	  if (symbol_base != NULL_TREE)
- 	    symbol_base = build2 (POINTER_PLUS_EXPR, ptr_type_node,
- 				  m_parent.m_cf->m_private_base_arg,
- 				  symbol_base);
- 	  else
- 	    symbol_base = m_parent.m_cf->m_private_base_arg;
- 	}
-     }
- 
-   if (addr_operand.reg != 0)
-     {
-       const BrigOperandRegister *mem_base_reg
- 	= (const BrigOperandRegister *) m_parent.get_brig_operand_entry
- 	(addr_operand.reg);
-       tree base_reg_var = m_parent.m_cf->get_m_var_declfor_reg (mem_base_reg);
-       tree as_uint = build_reinterpret_to_uint (base_reg_var);
-       var_offset = convert_to_pointer (ptr_type_node, as_uint);
- 
-       gcc_assert (var_offset != NULL_TREE);
-     }
-   /* The pointer type we use to access the memory.  Should be of the
-      width of the load/store instruction, not the target/data
-      register.  */
-   tree ptype = build_pointer_type (instr_type);
- 
-   gcc_assert (ptype != NULL_TREE);
- 
-   tree addr = NULL_TREE;
-   if (symbol_base != NULL_TREE && var_offset != NULL_TREE)
-     /* The most complex addressing mode: symbol + reg [+ const offset].  */
-     addr = build2 (POINTER_PLUS_EXPR, ptr_type_node,
- 		   convert (ptr_type_node, symbol_base),
- 		   convert (size_type_node, var_offset));
-   else if (var_offset != NULL)
-     addr = var_offset;
-   else if (symbol_base != NULL)
-     addr = symbol_base;
- 
-   if (const_offset != NULL_TREE)
-     {
-       if (addr == NULL_TREE)
- 	/* At least direct module-scope global group symbol access with LDA
- 	   has only the const_offset.  Group base ptr is not added as LDA should
- 	   return the segment address, not the flattened one.  */
- 	addr = const_offset;
-       else
- 	addr = build2 (POINTER_PLUS_EXPR, ptr_type_node,
- 		       addr, convert (size_type_node, const_offset));
-     }
- 
-   /* We might have two const offsets in case of group or private arrays
-      which have the first offset to the incoming group/private pointer
-      arg, and the second one an offset to it. It's also legal to have
-      a reference with a zero constant offset but no symbol.  I've seen
-      codes that reference kernarg segment like this.  Thus, if at this
-      point there is no address expression at all we assume it's an
-      access to offset 0. */
-   uint64_t offs = gccbrig_to_uint64_t (addr_operand.offset);
-   if (offs > 0 || addr == NULL_TREE)
-     {
-       /* In large mode, the offset is treated as 32bits unless it's
- 	 global, readonly or kernarg address space.
- 	 See:
- 	 http://www.hsafoundation.com/html_spec111/HSA_Library.htm
- 	 #PRM/Topics/02_ProgModel/small_and_large_machine_models.htm
- 	 #table_machine_model_data_sizes */
- 
-       int is64b_offset = segment == BRIG_SEGMENT_GLOBAL
- 	|| segment == BRIG_SEGMENT_READONLY
- 	|| segment == BRIG_SEGMENT_KERNARG;
- 
-       /* The original offset is signed and should be sign
- 	 extended for the pointer arithmetics.  */
-       tree const_offset_2 = is64b_offset
-         ? build_int_cst (size_type_node, offs)
-         : convert (long_integer_type_node,
-                    build_int_cst (integer_type_node, offs));
- 
-       if (addr == NULL_TREE)
- 	addr = const_offset_2;
-       else
- 	addr = build2 (POINTER_PLUS_EXPR, ptr_type_node,
- 		       /* Addr can be a constant offset in case this is
- 			  a private array access.  */
- 		       convert (ptr_type_node, addr),
- 		       convert (size_type_node, const_offset_2));
-     }
- 
-   gcc_assert (addr != NULL_TREE);
-   return convert_to_pointer (ptype, addr);
- }
- 
- /* Builds a tree operand with the given OPERAND_INDEX for the given
-    BRIG_INST with the desired tree OPERAND_TYPE.  OPERAND_TYPE can
-    be NULL in case the type is forced by the BRIG_INST type.  */
- 
- tree
- brig_code_entry_handler::build_tree_operand_from_brig
-   (const BrigInstBase *brig_inst, tree operand_type, size_t operand_index)
- {
-   const BrigData *operand_entries
-     = m_parent.get_brig_data_entry (brig_inst->operands);
- 
-   uint32_t operand_offset
-     = ((const uint32_t *) &operand_entries->bytes)[operand_index];
-   const BrigBase *operand_data
-     = m_parent.get_brig_operand_entry (operand_offset);
- 
-   bool inputp = !gccbrig_hsa_opcode_op_output_p (brig_inst->opcode,
- 						 operand_index);
-   return build_tree_operand (*brig_inst, *operand_data, operand_type, inputp);
- }
- 
- /* Builds a single (scalar) constant initialized element of type
-    ELEMENT_TYPE from the buffer pointed to by NEXT_DATA.  */
- 
- tree
- brig_code_entry_handler::build_tree_cst_element
-   (BrigType16_t element_type, const unsigned char *next_data) const
- {
- 
-   tree tree_element_type = gccbrig_tree_type_for_hsa_type (element_type);
- 
-   tree cst;
-   switch (element_type)
-     {
-     case BRIG_TYPE_F16:
-       {
- 	HOST_WIDE_INT low = *(const uint16_t *) next_data;
- 	cst = build_int_cst (uint16_type_node, low);
- 	break;
-       }
-     case BRIG_TYPE_F32:
-       {
- 	REAL_VALUE_TYPE val;
- 	ieee_single_format.decode (&ieee_single_format, &val,
- 				   (const long *) next_data);
- 	cst = build_real (tree_element_type, val);
- 	break;
-       }
-     case BRIG_TYPE_F64:
-       {
- 	long data[2];
- 	data[0] = *(const uint32_t *) next_data;
- 	data[1] = *(const uint32_t *) (next_data + 4);
- 	REAL_VALUE_TYPE val;
- 	ieee_double_format.decode (&ieee_double_format, &val, data);
- 	cst = build_real (tree_element_type, val);
- 	break;
-       }
-     case BRIG_TYPE_S8:
-     case BRIG_TYPE_S16:
-     case BRIG_TYPE_S32:
-     case BRIG_TYPE_S64:
-       {
- 	HOST_WIDE_INT low = *(const int64_t *) next_data;
- 	cst = build_int_cst (tree_element_type, low);
- 	break;
-       }
-     case BRIG_TYPE_U8:
-     case BRIG_TYPE_U16:
-     case BRIG_TYPE_U32:
-     case BRIG_TYPE_U64:
-       {
- 	unsigned HOST_WIDE_INT low = *(const uint64_t *) next_data;
- 	cst = build_int_cstu (tree_element_type, low);
- 	break;
-       }
-     case BRIG_TYPE_SIG64:
-       {
- 	unsigned HOST_WIDE_INT low = *(const uint64_t *) next_data;
- 	cst = build_int_cstu (uint64_type_node, low);
- 	break;
-       }
-     case BRIG_TYPE_SIG32:
-       {
- 	unsigned HOST_WIDE_INT low = *(const uint64_t *) next_data;
- 	cst = build_int_cstu (uint32_type_node, low);
- 	break;
-       }
-     default:
-       gcc_unreachable ();
-       return NULL_TREE;
-     }
-   return cst;
- }
- 
- /* Produce a tree constant type for the given BRIG constant (BRIG_CONST).
-    TYPE should be the forced instruction type, otherwise the type is
-    dictated by the BRIG_CONST.  */
- 
- tree
- brig_code_entry_handler::get_tree_cst_for_hsa_operand
-   (const BrigOperandConstantBytes *brig_const, tree type) const
- {
-   const BrigData *data = m_parent.get_brig_data_entry (brig_const->bytes);
- 
-   tree cst = NULL_TREE;
- 
-   if (type == NULL_TREE)
-     type = gccbrig_tree_type_for_hsa_type (brig_const->type);
- 
-   /* The type of a single (scalar) element inside an array,
-      vector or an array of vectors.  */
-   BrigType16_t scalar_element_type
-     = brig_const->type & BRIG_TYPE_BASE_MASK;
-   tree tree_element_type = type;
- 
-   vec<constructor_elt, va_gc> *constructor_vals = NULL;
- 
-   if (TREE_CODE (type) == ARRAY_TYPE)
-     tree_element_type = TREE_TYPE (type);
- 
-   size_t bytes_left = data->byteCount;
-   const unsigned char *next_data = data->bytes;
-   size_t scalar_element_size
-     = gccbrig_hsa_type_bit_size (scalar_element_type) / BITS_PER_UNIT;
- 
-   while (bytes_left > 0)
-     {
-       if (VECTOR_TYPE_P (tree_element_type))
- 	{
- 	  /* In case of vector type elements (or sole vectors),
- 	     create a vector ctor.  */
- 	  size_t element_count
- 	    = gccbrig_type_vector_subparts (tree_element_type);
- 	  if (bytes_left < scalar_element_size * element_count)
- 	    fatal_error (UNKNOWN_LOCATION,
- 			 "Not enough bytes left for the initializer "
- 			 "(%lu need %lu).", (unsigned long) bytes_left,
- 			 (unsigned long) (scalar_element_size
- 					  * element_count));
- 
- 	  vec<constructor_elt, va_gc> *vec_els = NULL;
- 	  for (size_t i = 0; i < element_count; ++i)
- 	    {
- 	      tree element
- 		= build_tree_cst_element (scalar_element_type, next_data);
- 	      CONSTRUCTOR_APPEND_ELT (vec_els, NULL_TREE, element);
- 	      bytes_left -= scalar_element_size;
- 	      next_data += scalar_element_size;
- 	    }
- 	  cst = build_vector_from_ctor (tree_element_type, vec_els);
- 	}
-       else
- 	{
- 	  if (bytes_left < scalar_element_size)
- 	    fatal_error (UNKNOWN_LOCATION,
- 			 "Not enough bytes left for the initializer "
- 			 "(%lu need %lu).", (unsigned long) bytes_left,
- 			 (unsigned long) scalar_element_size);
- 	  cst = build_tree_cst_element (scalar_element_type, next_data);
- 	  bytes_left -= scalar_element_size;
- 	  next_data += scalar_element_size;
- 	}
-       CONSTRUCTOR_APPEND_ELT (constructor_vals, NULL_TREE, cst);
-     }
- 
-   if (TREE_CODE (type) == ARRAY_TYPE)
-     return build_constructor (type, constructor_vals);
-   else
-     return cst;
- }
- 
- /* Return the matching tree instruction arithmetics type for the
-    given BRIG_TYPE.  The aritmethics type is the one with which
-    computation is done (in contrast to the storage type).  F16
-    arithmetics type is emulated using F32 for now.  */
- 
- tree
- brig_code_entry_handler::get_tree_expr_type_for_hsa_type
-   (BrigType16_t brig_type) const
- {
-   BrigType16_t brig_inner_type = brig_type & BRIG_TYPE_BASE_MASK;
-   if (brig_inner_type == BRIG_TYPE_F16)
-     {
-       if (brig_inner_type == brig_type)
- 	return m_parent.s_fp32_type;
-       size_t element_count = gccbrig_hsa_type_bit_size (brig_type) / 16;
-       return build_vector_type (m_parent.s_fp32_type, element_count);
-     }
-   else
-     return gccbrig_tree_type_for_hsa_type (brig_type);
- }
- 
- /* Return the correct GENERIC type for storing comparison results
-    of operand with the type given in SOURCE_TYPE.  */
- 
- tree
- brig_code_entry_handler::get_comparison_result_type (tree source_type)
- {
-   if (VECTOR_TYPE_P (source_type))
-     {
-       size_t element_size = int_size_in_bytes (TREE_TYPE (source_type));
-       return build_vector_type
- 	(build_nonstandard_boolean_type (element_size * BITS_PER_UNIT),
- 	 gccbrig_type_vector_subparts (source_type));
-     }
-   else
-     return gccbrig_tree_type_for_hsa_type (BRIG_TYPE_B1);
- }
- 
- /* Creates a FP32 to FP16 conversion call, assuming the source and destination
-    are FP32 type variables.  */
- 
- tree
- brig_code_entry_handler::build_f2h_conversion (tree source)
- {
-   return float_to_half () (*this, source);
- }
- 
- /* Creates a FP16 to FP32 conversion call, assuming the source and destination
-    are FP32 type variables.  */
- 
- tree
- brig_code_entry_handler::build_h2f_conversion (tree source)
- {
-   return half_to_float () (*this, source);
- }
- 
- /* Builds and "normalizes" the dest and source operands for the instruction
-    execution; converts the input operands to the expected instruction type,
-    performs half to float conversions, constant to correct type variable,
-    and flush to zero (if applicable).  */
- 
- tree_stl_vec
- brig_code_entry_handler::build_operands (const BrigInstBase &brig_inst)
- {
-   return build_or_analyze_operands (brig_inst, false);
- }
- 
- void
- brig_code_entry_handler::analyze_operands (const BrigInstBase &brig_inst)
- {
-   build_or_analyze_operands (brig_inst, true);
- }
- 
- /* Implements both the build_operands () and analyze_operands () call
-    so changes go in tandem.  Performs build_operands () when ANALYZE
-    is false.  Otherwise, only analyze operands and return empty
-    list.
- 
-    If analyzing record each HSA register operand with the
-    corresponding resolved operand tree type to
-    brig_to_generic::m_fn_regs_use_index.  */
- 
- tree_stl_vec
- brig_code_entry_handler::
- build_or_analyze_operands (const BrigInstBase &brig_inst, bool analyze)
- {
-   /* Flush to zero.  */
-   bool ftz = false;
-   const BrigBase *base = &brig_inst.base;
- 
-   if (base->kind == BRIG_KIND_INST_MOD)
-     {
-       const BrigInstMod *mod = (const BrigInstMod *) base;
-       ftz = mod->modifier & BRIG_ALU_FTZ;
-     }
-   else if (base->kind == BRIG_KIND_INST_CMP)
-     {
-       const BrigInstCmp *cmp = (const BrigInstCmp *) base;
-       ftz = cmp->modifier & BRIG_ALU_FTZ;
-     }
- 
-   bool is_vec_instr = hsa_type_packed_p (brig_inst.type);
- 
-   size_t element_count;
-   if (is_vec_instr)
-     {
-       BrigType16_t brig_element_type = brig_inst.type & BRIG_TYPE_BASE_MASK;
-       element_count = gccbrig_hsa_type_bit_size (brig_inst.type)
- 		      / gccbrig_hsa_type_bit_size (brig_element_type);
-     }
-   else
-     element_count = 1;
- 
-   bool is_fp16_arith = false;
- 
-   tree src_type;
-   tree dest_type;
-   if (base->kind == BRIG_KIND_INST_CMP)
-     {
-       const BrigInstCmp *cmp_inst = (const BrigInstCmp *) base;
-       src_type = gccbrig_tree_type_for_hsa_type (cmp_inst->sourceType);
-       dest_type = gccbrig_tree_type_for_hsa_type (brig_inst.type);
-       is_fp16_arith
- 	= (cmp_inst->sourceType & BRIG_TYPE_BASE_MASK) == BRIG_TYPE_F16;
-     }
-   else if (base->kind == BRIG_KIND_INST_SOURCE_TYPE)
-     {
-       const BrigInstSourceType *src_type_inst
- 	= (const BrigInstSourceType *) base;
-       src_type = gccbrig_tree_type_for_hsa_type (src_type_inst->sourceType);
-       dest_type = gccbrig_tree_type_for_hsa_type (brig_inst.type);
-       is_fp16_arith
- 	= (src_type_inst->sourceType & BRIG_TYPE_BASE_MASK) == BRIG_TYPE_F16
- 	&& !gccbrig_is_bit_operation (brig_inst.opcode);
-     }
-   else if (base->kind == BRIG_KIND_INST_SEG_CVT)
-     {
-       const BrigInstSegCvt *seg_cvt_inst = (const BrigInstSegCvt *) base;
-       src_type = gccbrig_tree_type_for_hsa_type (seg_cvt_inst->sourceType);
-       dest_type = gccbrig_tree_type_for_hsa_type (brig_inst.type);
-     }
-   else if (base->kind == BRIG_KIND_INST_MEM)
-     {
-       src_type = gccbrig_tree_type_for_hsa_type (brig_inst.type);
-       dest_type = src_type;
-       /* With mem instructions we don't want to cast the fp16
- 	 back and forth between fp32, because the load/stores
- 	 are not specific to the data type.  */
-       is_fp16_arith = false;
-     }
-   else if (base->kind == BRIG_KIND_INST_CVT)
-     {
-       const BrigInstCvt *cvt_inst = (const BrigInstCvt *) base;
- 
-       src_type = gccbrig_tree_type_for_hsa_type (cvt_inst->sourceType);
-       dest_type = gccbrig_tree_type_for_hsa_type (brig_inst.type);
-     }
-   else
-     {
-       switch (brig_inst.opcode)
- 	{
- 	case BRIG_OPCODE_INITFBAR:
- 	case BRIG_OPCODE_JOINFBAR:
- 	case BRIG_OPCODE_WAITFBAR:
- 	case BRIG_OPCODE_ARRIVEFBAR:
- 	case BRIG_OPCODE_LEAVEFBAR:
- 	case BRIG_OPCODE_RELEASEFBAR:
- 	  src_type = uint32_type_node;
- 	  break;
- 	default:
- 	  src_type = gccbrig_tree_type_for_hsa_type (brig_inst.type);
- 	  break;
- 	}
-       dest_type = src_type;
-       is_fp16_arith
- 	= !gccbrig_is_bit_operation (brig_inst.opcode)
- 	&& (brig_inst.type & BRIG_TYPE_BASE_MASK) == BRIG_TYPE_F16;
-     }
- 
-   /* Halfs are a tricky special case: their "storage format" is u16, but
-      scalars are stored in 32b regs while packed f16 are... well packed.  */
-   tree half_storage_type = element_count > 1
- 			     ? gccbrig_tree_type_for_hsa_type (brig_inst.type)
- 			     : uint32_type_node;
- 
-   const BrigData *operand_entries
-     = m_parent.get_brig_data_entry (brig_inst.operands);
-   std::vector<tree> operands;
-   for (size_t i = 0; i < operand_entries->byteCount / 4; ++i)
-     {
-       uint32_t operand_offset = ((const uint32_t *) &operand_entries->bytes)[i];
-       const BrigBase *operand_data
- 	= m_parent.get_brig_operand_entry (operand_offset);
- 
-       const bool is_output
- 	= gccbrig_hsa_opcode_op_output_p (brig_inst.opcode, i);
- 
-       tree operand_type = is_output ? dest_type : src_type;
- 
-       bool half_to_float = is_fp16_arith;
- 
-       /* Special cases for operand types.  */
-       if ((brig_inst.opcode == BRIG_OPCODE_SHL
- 	   || brig_inst.opcode == BRIG_OPCODE_SHR)
- 	  && i == 2)
- 	  /* The shift amount is always a scalar.  */
- 	operand_type
- 	  = VECTOR_TYPE_P (src_type) ? TREE_TYPE (src_type) : src_type;
-       else if (brig_inst.opcode == BRIG_OPCODE_SHUFFLE)
- 	{
- 	  if (i == 3)
- 	    /* HSAIL shuffle inputs the MASK vector as tightly packed bits
- 	       while GENERIC VEC_PERM_EXPR expects the mask elements to be
- 	       of the same size as the elements in the input vectors.  Let's
- 	       cast to a scalar type here and convert to the VEC_PERM_EXPR
- 	       format in instruction handling.  There are no arbitrary bit
- 	       width int types in GENERIC so we cannot use the original
- 	       vector type.  */
- 	    operand_type = uint32_type_node;
- 	  else
- 	    /* Always treat the element as unsigned ints to avoid
- 	       sign extensions/negative offsets with masks, which
- 	       are expected to be of the same element type as the
- 	       data in VEC_PERM_EXPR.  With shuffles the data type
- 	       should not matter as it's a "raw operation".  */
- 	    operand_type = get_unsigned_int_type (operand_type);
- 	}
-       else if (brig_inst.opcode == BRIG_OPCODE_PACK)
- 	{
- 	  if (i == 1)
- 	    operand_type = get_unsigned_int_type (dest_type);
- 	  else if (i == 2)
- 	    operand_type = get_unsigned_int_type (TREE_TYPE (dest_type));
- 	  else if (i == 3)
- 	    operand_type = uint32_type_node;
- 	}
-       else if (brig_inst.opcode == BRIG_OPCODE_UNPACK && i == 2)
- 	operand_type = uint32_type_node;
-       else if (brig_inst.opcode == BRIG_OPCODE_SAD && i == 3)
- 	operand_type = uint32_type_node;
-       else if (brig_inst.opcode == BRIG_OPCODE_CLASS && i == 2)
- 	{
- 	  operand_type = uint32_type_node;
- 	  half_to_float = false;
- 	}
-       else if (brig_inst.opcode == BRIG_OPCODE_ACTIVELANEPERMUTE && i == 4)
- 	{
- 	  operand_type = uint32_type_node;
- 	}
-       else if (half_to_float)
- 	/* Treat the operands as the storage type at this point.  */
- 	operand_type = half_storage_type;
- 
-       if (analyze)
- 	{
- 	  if (operand_data->kind == BRIG_KIND_OPERAND_REGISTER)
- 	    {
- 	      const BrigOperandRegister &brig_reg
- 		= (const BrigOperandRegister &) *operand_data;
- 	      m_parent.add_reg_used_as_type (brig_reg, operand_type);
- 	    }
- 	  continue;
- 	}
- 
-       tree operand = build_tree_operand (brig_inst, *operand_data, operand_type,
- 					 !is_output);
-       gcc_assert (operand);
- 
-       /* Cast/convert the inputs to correct types as expected by the GENERIC
- 	 opcode instruction.  */
-       if (!is_output)
- 	{
- 	  if (half_to_float)
- 	    operand = build_h2f_conversion
- 	      (build_resize_convert_view (half_storage_type, operand));
- 	  else if (TREE_CODE (operand) != LABEL_DECL
- 		   && TREE_CODE (operand) != TREE_VEC
- 		   && operand_data->kind != BRIG_KIND_OPERAND_ADDRESS
- 		   && operand_data->kind != BRIG_KIND_OPERAND_OPERAND_LIST)
- 	    {
- 	      operand = build_resize_convert_view (operand_type, operand);
- 	    }
- 	  else if (brig_inst.opcode == BRIG_OPCODE_SHUFFLE)
- 	    /* Force the operand type to be treated as the raw type.  */
- 	    operand = build_resize_convert_view (operand_type, operand);
- 
- 	  if (brig_inst.opcode == BRIG_OPCODE_CMOV && i == 1)
- 	    {
- 	      /* gcc expects the lower bit to be 1 (or all ones in case of
- 		 vectors) while CMOV assumes false iff 0.  Convert the input
- 		 here to what gcc likes by generating
- 		 'operand = operand != 0'.  */
- 	      tree cmp_res_type = get_comparison_result_type (operand_type);
- 	      operand = build2 (NE_EXPR, cmp_res_type, operand,
- 				build_zero_cst (TREE_TYPE (operand)));
- 	    }
- 
- 	  if (ftz)
- 	    operand = flush_to_zero (is_fp16_arith) (*this, operand);
- 	}
-       operands.push_back (operand);
-     }
-   return operands;
- }
- 
- /* Build the GENERIC for assigning the result of an instruction to the result
-    "register" (variable).  BRIG_INST is the original brig instruction,
-    OUTPUT the result variable/register, INST_EXPR the one producing the
-    result.  Required bitcasts and fp32 to fp16 conversions are added as
-    well.  */
- 
- tree
- brig_code_entry_handler::build_output_assignment (const BrigInstBase &brig_inst,
- 						  tree output, tree inst_expr)
- {
-   /* The result/input type might be different from the output register
-      variable type (can be any type; see get_m_var_declfor_reg @
-      brig-function.cc).  */
-   tree output_type = TREE_TYPE (output);
-   bool is_fp16 = (brig_inst.type & BRIG_TYPE_BASE_MASK) == BRIG_TYPE_F16
- 		 && brig_inst.base.kind != BRIG_KIND_INST_MEM
- 		 && !gccbrig_is_bit_operation (brig_inst.opcode);
- 
-   /* Flush to zero.  */
-   bool ftz = false;
-   const BrigBase *base = &brig_inst.base;
- 
-   if (m_parent.m_cf->is_id_val (inst_expr))
-     inst_expr = m_parent.m_cf->id_val (inst_expr);
- 
-   tree input_type = TREE_TYPE (inst_expr);
- 
-   m_parent.m_cf->add_reg_var_update (output, inst_expr);
- 
-   if (base->kind == BRIG_KIND_INST_MOD)
-     {
-       const BrigInstMod *mod = (const BrigInstMod *) base;
-       ftz = mod->modifier & BRIG_ALU_FTZ;
-     }
-   else if (base->kind == BRIG_KIND_INST_CMP)
-     {
-       const BrigInstCmp *cmp = (const BrigInstCmp *) base;
-       ftz = cmp->modifier & BRIG_ALU_FTZ;
-     }
- 
-   if (TREE_CODE (inst_expr) == CALL_EXPR)
-     {
-       tree func_decl = TREE_OPERAND (TREE_OPERAND (inst_expr, 1), 0);
-       input_type = TREE_TYPE (TREE_TYPE (func_decl));
-     }
- 
-   if (ftz && (VECTOR_FLOAT_TYPE_P (TREE_TYPE (inst_expr))
- 	      || SCALAR_FLOAT_TYPE_P (TREE_TYPE (inst_expr)) || is_fp16))
-     {
-       /* Ensure we don't duplicate the arithmetics to the arguments of the bit
- 	 field reference operators.  */
-       inst_expr = m_parent.m_cf->add_temp_var ("before_ftz", inst_expr);
-       inst_expr = flush_to_zero (is_fp16) (*this, inst_expr);
-     }
- 
-   if (is_fp16)
-     {
-       inst_expr = m_parent.m_cf->add_temp_var ("before_f2h", inst_expr);
-       tree f2h_output = build_f2h_conversion (inst_expr);
-       tree conv = build_resize_convert_view (output_type, f2h_output);
-       tree assign = build2 (MODIFY_EXPR, output_type, output, conv);
-       m_parent.m_cf->append_statement (assign);
-       return assign;
-     }
-   else if (VECTOR_TYPE_P (output_type) && TREE_CODE (output) == CONSTRUCTOR)
-     {
-       /* Expand/unpack the input value to the given vector elements.  */
-       size_t i;
-       tree input = inst_expr;
-       tree element_type = gccbrig_tree_type_for_hsa_type (brig_inst.type);
-       tree element;
-       tree last_assign = NULL_TREE;
-       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (output), i, element)
- 	{
- 	  tree element_ref
- 	    = build3 (BIT_FIELD_REF, element_type, input,
- 		      TYPE_SIZE (element_type),
- 		      bitsize_int (i * int_size_in_bytes (element_type)
- 				   *  BITS_PER_UNIT));
- 
- 	  last_assign
- 	    = build_output_assignment (brig_inst, element, element_ref);
- 	}
-       return last_assign;
-     }
-   else
-     {
-       /* All we do here is to bitcast the result and store it to the
- 	 'register' (variable).  Mainly need to take care of differing
- 	 bitwidths.  */
-       size_t src_width = int_size_in_bytes (input_type);
-       size_t dst_width = int_size_in_bytes (output_type);
-       tree input = inst_expr;
-       /* Integer results are extended to the target register width, using
- 	 the same sign as the inst_expr.  */
-       if (INTEGRAL_TYPE_P (TREE_TYPE (input)) && src_width != dst_width)
- 	{
- 	  bool unsigned_p = TYPE_UNSIGNED (TREE_TYPE (input));
- 	  tree resized_type
- 	    = build_nonstandard_integer_type (dst_width * BITS_PER_UNIT,
- 					      unsigned_p);
- 	  input = convert_to_integer (resized_type, input);
- 	}
-       input = build_resize_convert_view (output_type, input);
-       tree assign = build2 (MODIFY_EXPR, output_type, output, input);
-       m_parent.m_cf->append_statement (assign);
-       return assign;
-     }
-   return NULL_TREE;
- }
- 
- /* Appends a GENERIC statement (STMT) to the currently constructed function.  */
- 
- void
- brig_code_entry_handler::append_statement (tree stmt)
- {
-   m_parent.m_cf->append_statement (stmt);
- }
- 
- /* Visits the element(s) in the OPERAND, calling HANDLER to each of them.  */
- 
- tree
- tree_element_unary_visitor::operator () (brig_code_entry_handler &handler,
- 					tree operand)
- {
-   if (VECTOR_TYPE_P (TREE_TYPE (operand)))
-     {
-       size_t vec_size = int_size_in_bytes (TREE_TYPE (operand));
-       size_t element_size = int_size_in_bytes (TREE_TYPE (TREE_TYPE (operand)));
-       size_t element_count = vec_size / element_size;
- 
-       tree input_element_type = TREE_TYPE (TREE_TYPE (operand));
-       tree output_element_type = NULL_TREE;
- 
-       vec<constructor_elt, va_gc> *constructor_vals = NULL;
-       for (size_t i = 0; i < element_count; ++i)
- 	{
- 	  tree element = build3 (BIT_FIELD_REF, input_element_type, operand,
- 				 TYPE_SIZE (input_element_type),
- 				 bitsize_int (i * element_size
- 					      * BITS_PER_UNIT));
- 
- 	  tree output = visit_element (handler, element);
- 	  output_element_type = TREE_TYPE (output);
- 
- 	  CONSTRUCTOR_APPEND_ELT (constructor_vals, NULL_TREE, output);
- 	}
- 
-       tree vec_type = build_vector_type (output_element_type, element_count);
- 
-       /* build_constructor creates a vector type which is not a vector_cst
- 	 that requires compile time constant elements.  */
-       tree vec = build_constructor (vec_type, constructor_vals);
- 
-       /* Add a temp variable for readability.  */
-       tree tmp_var = create_tmp_var (vec_type, "vec_out");
-       tree vec_tmp_assign
- 	= build2 (MODIFY_EXPR, TREE_TYPE (tmp_var), tmp_var, vec);
-       handler.append_statement (vec_tmp_assign);
-       return tmp_var;
-     }
-   else
-     return visit_element (handler, operand);
- }
- 
- /* Visits the element pair(s) in the OPERAND0 and OPERAND1, calling HANDLER
-    to each of them.  */
- 
- tree
- tree_element_binary_visitor::operator () (brig_code_entry_handler &handler,
- 					 tree operand0, tree operand1)
- {
-   if (VECTOR_TYPE_P (TREE_TYPE (operand0)))
-     {
-       gcc_assert (VECTOR_TYPE_P (TREE_TYPE (operand1)));
-       size_t vec_size = int_size_in_bytes (TREE_TYPE (operand0));
-       size_t element_size
- 	= int_size_in_bytes (TREE_TYPE (TREE_TYPE (operand0)));
-       size_t element_count = vec_size / element_size;
- 
-       tree input_element_type = TREE_TYPE (TREE_TYPE (operand0));
-       tree output_element_type = NULL_TREE;
- 
-       vec<constructor_elt, va_gc> *constructor_vals = NULL;
-       for (size_t i = 0; i < element_count; ++i)
- 	{
- 
- 	  tree element0 = build3 (BIT_FIELD_REF, input_element_type, operand0,
- 				  TYPE_SIZE (input_element_type),
- 				  bitsize_int (i * element_size
- 					       * BITS_PER_UNIT));
- 
- 	  tree element1 = build3 (BIT_FIELD_REF, input_element_type, operand1,
- 				  TYPE_SIZE (input_element_type),
- 				  bitsize_int (i * element_size
- 					       * BITS_PER_UNIT));
- 
- 	  tree output = visit_element (handler, element0, element1);
- 	  output_element_type = TREE_TYPE (output);
- 
- 	  CONSTRUCTOR_APPEND_ELT (constructor_vals, NULL_TREE, output);
- 	}
- 
-       tree vec_type = build_vector_type (output_element_type, element_count);
- 
-       /* build_constructor creates a vector type which is not a vector_cst
- 	 that requires compile time constant elements.  */
-       tree vec = build_constructor (vec_type, constructor_vals);
- 
-       /* Add a temp variable for readability.  */
-       tree tmp_var = create_tmp_var (vec_type, "vec_out");
-       tree vec_tmp_assign
- 	= build2 (MODIFY_EXPR, TREE_TYPE (tmp_var), tmp_var, vec);
-       handler.append_statement (vec_tmp_assign);
-       return tmp_var;
-     }
-   else
-     return visit_element (handler, operand0, operand1);
- }
- 
- /* Generates GENERIC code that flushes the visited element to zero.  */
- 
- tree
- flush_to_zero::visit_element (brig_code_entry_handler &, tree operand)
- {
-   size_t size = int_size_in_bytes (TREE_TYPE (operand));
-   if (size == 4)
-     {
-       tree built_in
- 	= (m_fp16) ? builtin_decl_explicit (BUILT_IN_HSAIL_FTZ_F32_F16) :
- 	builtin_decl_explicit (BUILT_IN_HSAIL_FTZ_F32);
- 
-       return call_builtin (built_in, 1, float_type_node, float_type_node,
- 			   operand);
-     }
-   else if (size == 8)
-     {
-       return call_builtin (builtin_decl_explicit (BUILT_IN_HSAIL_FTZ_F64), 1,
- 			   double_type_node, double_type_node, operand);
-     }
-   else
-     gcc_unreachable ();
-   return NULL_TREE;
- }
- 
- /* Generates GENERIC code that converts a single precision float to half
-    precision float.  */
- 
- tree
- float_to_half::visit_element (brig_code_entry_handler &caller, tree operand)
- {
-   tree built_in = builtin_decl_explicit (BUILT_IN_HSAIL_F32_TO_F16);
- 
-   tree casted_operand = build_resize_convert_view (uint32_type_node, operand);
- 
-   tree call = call_builtin (built_in, 1, uint16_type_node, uint32_type_node,
- 			    casted_operand);
-   tree output
-     = create_tmp_var (TREE_TYPE (TREE_TYPE (built_in)), "fp16out");
-   tree assign = build2 (MODIFY_EXPR, TREE_TYPE (output), output, call);
-   caller.append_statement (assign);
-   return output;
- }
- 
- /* Generates GENERIC code that converts a half precision float to single
-    precision float.  */
- 
- tree
- half_to_float::visit_element (brig_code_entry_handler &caller, tree operand)
- {
-   tree built_in = builtin_decl_explicit (BUILT_IN_HSAIL_F16_TO_F32);
-   tree truncated_source = convert_to_integer (uint16_type_node, operand);
- 
-   tree call
-     = call_builtin (built_in, 1, uint32_type_node, uint16_type_node,
- 		    truncated_source);
- 
-   tree const_fp32_type
-     = build_type_variant (brig_to_generic::s_fp32_type, 1, 0);
- 
-   tree output = create_tmp_var (const_fp32_type, "fp32out");
-   tree casted_result
-     = build_resize_convert_view (brig_to_generic::s_fp32_type, call);
- 
-   tree assign = build2 (MODIFY_EXPR, TREE_TYPE (output), output, casted_result);
- 
-   caller.append_statement (assign);
- 
-   return output;
- }
- 
- /* Treats the INPUT as SRC_TYPE and sign or zero extends it to DEST_TYPE.  */
- 
- tree
- brig_code_entry_handler::extend_int (tree input, tree dest_type, tree src_type)
- {
-   /* Extend integer conversions according to the destination's
-      ext mode.  First we need to clip the input register to
-      the possible smaller integer size to ensure the correct sign
-      bit is extended.  */
-   tree clipped_input = convert_to_integer (src_type, input);
-   tree conversion_result;
- 
-   if (TYPE_UNSIGNED (src_type))
-     conversion_result
-       = convert_to_integer (unsigned_type_for (dest_type), clipped_input);
-   else
-     conversion_result
-       = convert_to_integer (signed_type_for (dest_type), clipped_input);
- 
-   /* Treat the result as unsigned so we do not sign extend to the
-      register width.  For some reason this GENERIC sequence sign
-      extends to the s register:
- 
-      D.1541 = (signed char) s1;
-      D.1542 = (signed short) D.1541;
-      s0 = (unsigned int) D.1542
-   */
- 
-   /* The converted result is then extended to the target register
-      width, using the same sign as the destination.  */
-   return convert_to_integer (dest_type, conversion_result);
- }
- 
- /* Returns the integer constant value of the given node.
-    If it's a cast, looks into the source of the cast.  */
- HOST_WIDE_INT
- brig_code_entry_handler::int_constant_value (tree node)
- {
-   tree n = node;
-   if (TREE_CODE (n) == VIEW_CONVERT_EXPR)
-     n = TREE_OPERAND (n, 0);
-   return int_cst_value (n);
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-code-entry-handler.h gcc-12.1.0/gcc/brig/brigfrontend/brig-code-entry-handler.h
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-code-entry-handler.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-code-entry-handler.h	Thu Jan  1 00:00:00 1970
***************
*** 1,410 ****
- /* brig-code-entry-handler.h -- a gccbrig base class
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #ifndef GCC_BRIG_CODE_ENTRY_HANDLER_H
- #define GCC_BRIG_CODE_ENTRY_HANDLER_H
- 
- #include "brig-to-generic.h"
- 
- #include <map>
- #include <vector>
- 
- class tree_element_unary_visitor;
- 
- /* An interface to organize the different types of element handlers
-    for the code section.  */
- 
- class brig_code_entry_handler : public brig_entry_handler
- {
- public:
-   brig_code_entry_handler (brig_to_generic &parent);
- 
-   /* Handles the brig_code data at the given pointer and adds it to the
-      currently built tree.  Returns the number of consumed bytes.  */
- 
-   virtual size_t operator () (const BrigBase *base) = 0;
- 
-   void append_statement (tree stmt);
- 
- protected:
- 
-   tree get_tree_expr_type_for_hsa_type (BrigType16_t brig_type) const;
-   tree get_tree_cst_for_hsa_operand (const BrigOperandConstantBytes *brigConst,
- 				     tree type) const;
-   tree get_comparison_result_type (tree source_type);
- 
-   tree build_code_ref (const BrigBase &ref);
- 
-   tree build_tree_operand (const BrigInstBase &brig_inst,
- 			   const BrigBase &operand,
- 			   tree operand_type = NULL_TREE,
- 			   bool is_input = false);
- 
-   tree build_address_operand (const BrigInstBase &brig_inst,
- 			      const BrigOperandAddress &addr_operand);
- 
-   tree build_tree_operand_from_brig (const BrigInstBase *brig_inst,
- 				     tree operand_type, size_t operand_index);
- 
-   tree build_tree_cst_element (BrigType16_t element_type,
- 			       const unsigned char *next_data) const;
- 
-   bool needs_workitem_context_data (BrigOpcode16_t brig_opcode) const;
- 
-   tree add_temp_var (std::string name, tree expr);
- 
-   tree build_f2h_conversion (tree source);
-   tree build_h2f_conversion (tree source);
- 
-   tree_stl_vec build_operands (const BrigInstBase &brig_inst);
-   void analyze_operands (const BrigInstBase &brig_inst);
-   tree build_output_assignment (const BrigInstBase &brig_inst, tree output,
- 				tree inst_expr);
- 
-   tree apply_to_all_elements (tree_element_unary_visitor &visitor,
- 			      tree operand);
- 
-   HOST_WIDE_INT int_constant_value (tree node);
- 
-   tree extend_int (tree input, tree dest_type, tree src_type);
- 
- private:
- 
-   tree_stl_vec build_or_analyze_operands (const BrigInstBase &brig_inst,
- 					  bool analyze);
- };
- 
- /* Implement the Visitor software pattern for performing various actions on
-    elements of vector operands.  This enables separating the vector element
-    traversal/extraction/packing code from whatever different actions are
-    performed to each element.  */
- 
- class tree_element_unary_visitor
- {
- public:
-   tree operator () (brig_code_entry_handler &handler, tree operand);
- 
-   /* Performs an action to a single element, which can have originally
-      been a vector element or a scalar.  */
- 
-   virtual tree visit_element (brig_code_entry_handler &handler, tree operand)
-     = 0;
- };
- 
- class tree_element_binary_visitor
- {
- public:
-   tree operator () (brig_code_entry_handler &handler, tree operand0,
- 		   tree operand1);
- 
-   /* Performs an action to a pair of elements, which can have originally
-      been a vector element or a scalar.  */
- 
-   virtual tree visit_element (brig_code_entry_handler &handler, tree operand0,
- 			      tree operand1)
-     = 0;
- };
- 
- /* Visitor for flushing float elements to zero.  */
- 
- class flush_to_zero : public tree_element_unary_visitor
- {
- public:
-   flush_to_zero (bool fp16) : m_fp16 (fp16)
-   {
-   }
- 
-   virtual tree visit_element (brig_code_entry_handler &caller, tree operand);
- 
- private:
- 
-   /* True if the value should be flushed according to fp16 limits.  */
- 
-   bool m_fp16;
- };
- 
- /* Visitor for converting F16 elements to F32.  */
- 
- class half_to_float : public tree_element_unary_visitor
- {
- public:
-   virtual tree visit_element (brig_code_entry_handler &caller, tree operand);
- };
- 
- /* Visitor for converting F32 elements to F16.  */
- 
- class float_to_half : public tree_element_unary_visitor
- {
- public:
-   virtual tree visit_element (brig_code_entry_handler &caller, tree operand);
- };
- 
- /* A base class for instruction types that support floating point
-    modifiers.
- 
-    operator () delegates to subclasses (template method pattern) in
-    type specific parts.  */
- 
- class brig_inst_mod_handler : public brig_code_entry_handler
- {
- public:
-   brig_inst_mod_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   virtual size_t generate (const BrigBase *base);
-   virtual const BrigAluModifier8_t *modifier (const BrigBase *base) const;
-   virtual const BrigRound8_t *round (const BrigBase *base) const;
- 
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_directive_function_handler : public brig_code_entry_handler
- {
- public:
-   brig_directive_function_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_directive_control_handler : public brig_code_entry_handler
- {
- public:
-   brig_directive_control_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_directive_variable_handler : public brig_code_entry_handler
- {
- public:
-   brig_directive_variable_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t operator () (const BrigBase *base);
- 
-   tree build_variable (const BrigDirectiveVariable *brigVar,
- 		       tree_code var_decltype = VAR_DECL);
- 
-   size_t get_brig_var_alignment (const BrigDirectiveVariable *brigVar);
- };
- 
- class brig_directive_fbarrier_handler : public brig_code_entry_handler
- {
- public:
-   brig_directive_fbarrier_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_directive_label_handler : public brig_code_entry_handler
- {
- public:
-   brig_directive_label_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_directive_comment_handler : public brig_code_entry_handler
- {
- public:
-   brig_directive_comment_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_directive_arg_block_handler : public brig_code_entry_handler
- {
- public:
-   brig_directive_arg_block_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_basic_inst_handler : public brig_code_entry_handler
- {
- public:
-   brig_basic_inst_handler (brig_to_generic &parent);
- 
-   size_t operator () (const BrigBase *base);
- 
- private:
-   tree build_lower_element_broadcast (tree vec_operand);
- 
-   bool must_be_scalarized (const BrigInstBase *brig_inst,
- 			   tree instr_type) const;
- 
-   tree build_inst_expr (BrigOpcode16_t brig_opcode, BrigType16_t brig_type,
- 			 tree arith_type, tree_stl_vec &operands);
- 
-   tree build_shuffle (tree arith_type, tree_stl_vec &operands);
-   tree build_unpack (tree_stl_vec &operands);
-   tree build_pack (tree_stl_vec &operands);
- 
-   tree build_unpack_lo_or_hi (BrigOpcode16_t brig_opcode, tree arith_type,
- 			      tree_stl_vec &operands);
- };
- 
- class brig_cvt_inst_handler : public brig_inst_mod_handler
- {
- public:
-   brig_cvt_inst_handler (brig_to_generic &parent)
-     : brig_inst_mod_handler (parent)
-   {
-   }
- 
-   virtual size_t generate (const BrigBase *base);
-   virtual const BrigAluModifier8_t *modifier (const BrigBase *base) const;
-   virtual const BrigRound8_t *round (const BrigBase *base) const;
- };
- 
- class brig_branch_inst_handler : public brig_code_entry_handler
- {
- public:
-   brig_branch_inst_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_mem_inst_handler : public brig_code_entry_handler
- {
- public:
-   brig_mem_inst_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t operator () (const BrigBase *base);
- 
- private:
-   tree build_mem_access (const BrigInstBase *brig_inst, tree addr, tree data);
- };
- 
- class brig_copy_move_inst_handler : public brig_code_entry_handler
- {
- public:
-   brig_copy_move_inst_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t operator () (const BrigBase *base);
- 
- private:
-   size_t handle_lda (const BrigInstBase *base);
- };
- 
- class brig_atomic_inst_handler : public brig_code_entry_handler
- {
- private:
-   typedef std::map<std::string, tree> atomic_builtins_map;
- 
- public:
-   brig_atomic_inst_handler (brig_to_generic &parent);
- 
-   size_t operator () (const BrigBase *base);
- 
- protected:
-   size_t generate_tree (const BrigInstBase &inst,
- 			BrigAtomicOperation8_t atomic_opcode);
- };
- 
- class brig_signal_inst_handler : public brig_atomic_inst_handler
- {
- public:
-   brig_signal_inst_handler (brig_to_generic &parent)
-     : brig_atomic_inst_handler (parent)
-   {
-   }
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_cmp_inst_handler : public brig_code_entry_handler
- {
- public:
-   brig_cmp_inst_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_seg_inst_handler : public brig_code_entry_handler
- {
- public:
-   brig_seg_inst_handler (brig_to_generic &parent);
- 
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_lane_inst_handler : public brig_code_entry_handler
- {
- public:
-   brig_lane_inst_handler (brig_to_generic &parent);
- 
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_queue_inst_handler : public brig_code_entry_handler
- {
- public:
-   brig_queue_inst_handler (brig_to_generic &parent);
- 
-   size_t operator () (const BrigBase *base);
- };
- 
- class brig_directive_module_handler : public brig_code_entry_handler
- {
- public:
-   brig_directive_module_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t operator () (const BrigBase *base);
- };
- 
- 
- #endif
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-comment-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-comment-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-comment-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-comment-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,38 ****
- /* brig-comment-handler.cc -- brig comment directive handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- 
- extern int gccbrig_verbose;
- 
- size_t
- brig_directive_comment_handler::operator () (const BrigBase *base)
- {
-   const BrigDirectiveComment *brig_comment
-     = (const BrigDirectiveComment *) base;
- 
-   if (gccbrig_verbose)
-     {
-       std::string cmnt = m_parent.get_string (brig_comment->name);
-       fprintf (stderr, "brig: Comment: '%s'\n", cmnt.c_str());
-     }
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-control-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-control-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-control-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-control-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,108 ****
- /* brig-control-handler.cc -- brig control directive handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- #include "diagnostic.h"
- #include "print-tree.h"
- 
- size_t
- brig_directive_control_handler::operator () (const BrigBase *base)
- {
-   const BrigDirectiveControl *inst = (const BrigDirectiveControl *) base;
-   const BrigData *operand_entries
-     = m_parent.get_brig_data_entry (inst->operands);
- 
-   /* Parse the constant integer operands.  */
-   std::vector<tree> operands;
-   for (size_t i = 0; i < operand_entries->byteCount / 4; ++i)
-     {
-       uint32_t operand_offset
- 	= ((const uint32_t *) &operand_entries->bytes)[i];
-       const BrigBase *operand_data
- 	= m_parent.get_brig_operand_entry (operand_offset);
- 
-       tree operand_type
- 	= (inst->control == BRIG_CONTROL_REQUIREDGRIDSIZE
- 	   || inst->control == BRIG_CONTROL_MAXFLATGRIDSIZE) ?
- 	uint64_type_node : uint32_type_node;
-       operands.push_back
- 	(build_tree_operand (*(const BrigInstBase*)inst, *operand_data,
- 			     operand_type));
-     }
- 
-   switch (inst->control)
-     {
-     case BRIG_CONTROL_MAXDYNAMICGROUPSIZE:
-       {
- 	m_parent.m_cf->m_descriptor.max_dynamic_group_size
- 	  = brig_function::int_constant_value (operands.at (0));
- 	break;
-       }
-     case BRIG_CONTROL_MAXFLATGRIDSIZE:
-       {
- 	m_parent.m_cf->m_descriptor.max_flat_grid_size
- 	  = brig_function::int_constant_value (operands.at (0));
- 	break;
-       }
-     case BRIG_CONTROL_MAXFLATWORKGROUPSIZE:
-       {
- 	m_parent.m_cf->m_descriptor.max_flat_workgroup_size
- 	  = brig_function::int_constant_value (operands.at (0));
- 	break;
-       }
-     case BRIG_CONTROL_REQUIREDDIM:
-       {
- 	m_parent.m_cf->m_descriptor.required_dim
- 	  = brig_function::int_constant_value (operands.at (0));
- 	break;
-       }
-     case BRIG_CONTROL_REQUIREDGRIDSIZE:
-       {
- 	m_parent.m_cf->m_descriptor.required_grid_size[0]
- 	  = brig_function::int_constant_value (operands.at (0));
- 	m_parent.m_cf->m_descriptor.required_grid_size[1]
- 	  = brig_function::int_constant_value (operands.at (1));
- 	m_parent.m_cf->m_descriptor.required_grid_size[2]
- 	  = brig_function::int_constant_value (operands.at (2));
- 	break;
-       }
-     case BRIG_CONTROL_REQUIREDWORKGROUPSIZE:
-       {
- 	m_parent.m_cf->m_descriptor.required_workgroup_size[0]
- 	  = brig_function::int_constant_value (operands.at (0));
- 	m_parent.m_cf->m_descriptor.required_workgroup_size[1]
- 	  = brig_function::int_constant_value (operands.at (1));
- 	m_parent.m_cf->m_descriptor.required_workgroup_size[2]
- 	  = brig_function::int_constant_value (operands.at (2));
- 	break;
-       }
-     case BRIG_CONTROL_REQUIRENOPARTIALWORKGROUPS:
-       /* Performance hint only, ignored for now.  */
-       break;
-     case BRIG_CONTROL_ENABLEBREAKEXCEPTIONS:
-     case BRIG_CONTROL_ENABLEDETECTEXCEPTIONS:
-       /* Unimplemented.  */
-       break;
-     default:
-       sorry ("Unsupported control directive %x.", inst->control);
-     }
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-copy-move-inst-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-copy-move-inst-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-copy-move-inst-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-copy-move-inst-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,73 ****
- /* brig-copy-move-inst-handler.cc -- brig copy/move instruction handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- #include "tree-pretty-print.h"
- #include "print-tree.h"
- #include "errors.h"
- #include "brig-util.h"
- 
- size_t
- brig_copy_move_inst_handler::handle_lda (const BrigInstBase *brig_inst)
- {
-   tree dest_type = gccbrig_tree_type_for_hsa_type (brig_inst->type);
- 
-   tree input = build_tree_operand_from_brig (brig_inst, NULL, 1);
-   tree output = build_tree_operand_from_brig (brig_inst, dest_type, 0);
- 
-   build_output_assignment (*brig_inst, output, input);
-   return brig_inst->base.byteCount;
- }
- 
- size_t
- brig_copy_move_inst_handler::operator () (const BrigBase *base)
- {
-   const BrigInstBase *brig_inst
-     = (const BrigInstBase *) &((const BrigInstBasic *) base)->base;
- 
-   if (brig_inst->opcode == BRIG_OPCODE_LDA)
-     return handle_lda (brig_inst);
- 
-   const BrigInstSourceType *inst_src_type = (const BrigInstSourceType *) base;
- 
-   tree source_type = gccbrig_tree_type_for_hsa_type (inst_src_type->sourceType);
-   tree dest_type = gccbrig_tree_type_for_hsa_type (brig_inst->type);
- 
-   tree input = build_tree_operand_from_brig (brig_inst, source_type, 1);
-   tree output = build_tree_operand_from_brig (brig_inst, dest_type, 0);
- 
-   if (brig_inst->opcode == BRIG_OPCODE_COMBINE)
-     {
-       /* For combine, a simple reinterpret cast from the array constructor
- 	 works.  */
-       tree casted = build_resize_convert_view (TREE_TYPE (output), input);
-       tree assign = build2 (MODIFY_EXPR, TREE_TYPE (output), output, casted);
-       m_parent.m_cf->append_statement (assign);
-     }
-   else if (brig_inst->opcode == BRIG_OPCODE_EXPAND)
-     build_output_assignment (*brig_inst, output, input);
-   else
-     {
-       brig_basic_inst_handler basic (m_parent);
-       return basic (base);
-     }
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-cvt-inst-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-cvt-inst-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-cvt-inst-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-cvt-inst-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,268 ****
- /* brig-cvt-inst-handler.cc -- brig cvt (convert) instruction handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include <sstream>
- 
- #include "brig-code-entry-handler.h"
- 
- #include "gimple-expr.h"
- #include "errors.h"
- #include "convert.h"
- #include "tree-pretty-print.h"
- #include "print-tree.h"
- #include "diagnostic-core.h"
- #include "brig-util.h"
- 
- const BrigAluModifier8_t *
- brig_cvt_inst_handler::modifier (const BrigBase *base) const
- {
-   const BrigInstCvt *inst = (const BrigInstCvt *) base;
-   return &inst->modifier;
- }
- 
- const BrigRound8_t *
- brig_cvt_inst_handler::round (const BrigBase *base) const
- {
-   const BrigInstCvt *inst = (const BrigInstCvt *) base;
-   return &inst->round;
- }
- 
- size_t
- brig_cvt_inst_handler::generate (const BrigBase *base)
- {
-   /* In cvt instructions there can be at least four data types involved:
- 
-      - the input register type
-      - the output register type
-      - the conversion source type
-      - the conversion destination type
-   */
- 
-   const BrigInstBase *brig_inst
-     = (const BrigInstBase *) &((const BrigInstBasic *) base)->base;
-   const BrigInstCvt *cvt_inst = (const BrigInstCvt *) base;
- 
-   const BrigAluModifier8_t *inst_modifier = modifier (base);
-   const bool FTZ = inst_modifier != NULL && (*inst_modifier) & BRIG_ALU_FTZ;
- 
-   /* The conversion source type.  */
-   tree src_type = get_tree_expr_type_for_hsa_type (cvt_inst->sourceType);
- 
-   bool src_is_fp16 = cvt_inst->sourceType == BRIG_TYPE_F16;
- 
-   /* The conversion destination type.  */
-   tree dest_type = gccbrig_tree_type_for_hsa_type (brig_inst->type);
- 
-   bool dest_is_fp16 = brig_inst->type == BRIG_TYPE_F16;
- 
-   if (!dest_type || !src_type)
-     {
-       gcc_unreachable ();
-       return base->byteCount;
-     }
- 
-   tree_stl_vec operands = build_operands (*brig_inst);
-   tree &input = operands.at (1);
-   tree &output = operands.at (0);
- 
-   if (m_parent.m_cf->is_id_val (input))
-     {
-       input = m_parent.m_cf->id_val (input);
-       src_type = TREE_TYPE (input);
-     }
- 
-   size_t conv_src_size = int_size_in_bytes (src_type);
-   size_t conv_dst_size = int_size_in_bytes (dest_type);
-   size_t src_reg_size = int_size_in_bytes (TREE_TYPE (input));
- 
-   /* The input register can be of different type&size than the
-      conversion input size.  First cast the input to the conversion
-      input type.  These casts are always bitcasts which can be
-      expressed as casts between different unsigned integers.  */
-   if (src_reg_size != conv_src_size)
-     {
-       tree unsigned_int_type = NULL_TREE;
-       if (INTEGRAL_TYPE_P (src_type))
- 	unsigned_int_type = unsigned_type_for (src_type);
-       else /* Find a matching size int type for the REAL type.  */
- 	{
- 	  if (conv_src_size == 2)
- 	    unsigned_int_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_U16);
- 	  else if (conv_src_size == 4)
- 	    unsigned_int_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_U32);
- 	  else if (conv_src_size == 8)
- 	    unsigned_int_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_U64);
- 	  else
- 	    gcc_unreachable ();
- 	}
-       input = convert_to_integer (unsigned_int_type, input);
-     }
- 
-   if (src_is_fp16)
-     input = build_h2f_conversion (input);
- 
-   /* Flush the float operand to zero if indicated with 'ftz'.  */
-   if (FTZ && SCALAR_FLOAT_TYPE_P (src_type))
-     {
-       tree casted_input = build_resize_convert_view (src_type, input);
-       input = flush_to_zero (src_is_fp16) (*this, casted_input);
-     }
- 
-   tree conversion_result = NULL_TREE;
-   if (brig_inst->type == BRIG_TYPE_B1)
-     {
-       /* When the destination is b1, cvt does a 'ztest' operation which is
- 	 defined as a != 0 for integers and similarly (!= 0.0f) for floats.  */
-       if (INTEGRAL_TYPE_P (src_type))
- 	{
- 	  /* Generate an integer not equal operation.  */
- 	  conversion_result = build2 (NE_EXPR, TREE_TYPE (input), input,
- 				      build_int_cst (TREE_TYPE (input), 0));
- 	}
-       else
- 	{
- 	  /* For REAL source types, ztest returns 1 if the value is not +- 0.0f.
- 	     We can perform this check with an integer comparison after
- 	     masking away the sign bit from a correct position.  This is safer
- 	     than using absf because of exceptions in case of a NaN
- 	     input (NaN exceptions are not generated with cvt).  */
- 	  tree unsigned_int_type = NULL_TREE;
- 	  /* Bit battern with all but the upper bit 1.  */
- 	  tree and_mask = NULL_TREE;
- 	  if (conv_src_size == 2)
- 	    {
- 	      unsigned_int_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_U16);
- 	      and_mask = build_int_cst (unsigned_int_type, 0x7FFF);
- 	    }
- 	  else if (conv_src_size == 4)
- 	    {
- 	      unsigned_int_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_U32);
- 	      and_mask = build_int_cst (unsigned_int_type, 0x7FFFFFFF);
- 	    }
- 	  else if (conv_src_size == 8)
- 	    {
- 	      unsigned_int_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_U64);
- 	      and_mask = build_int_cst (unsigned_int_type, 0x7FFFFFFFFFFFFFFF);
- 	    }
- 	  else
- 	    gcc_unreachable ();
- 	  tree casted_input = build_resize_convert_view (unsigned_int_type,
- 							 input);
- 	  tree masked_input
- 	    = build2 (BIT_AND_EXPR, unsigned_int_type, casted_input, and_mask);
- 	  conversion_result
- 	    = build2 (NE_EXPR, TREE_TYPE (masked_input), masked_input,
- 		      build_int_cst (unsigned_int_type, 0));
- 	}
-       /* The result from the comparison is a boolean, convert it to such.  */
-       conversion_result
- 	= convert_to_integer (gccbrig_tree_type_for_hsa_type (BRIG_TYPE_B1),
- 			      conversion_result);
-     }
-   else if (dest_is_fp16)
-     {
-       tree casted_input = build_resize_convert_view (src_type, input);
-       conversion_result
- 	= convert_to_real (brig_to_generic::s_fp32_type, casted_input);
-       if (FTZ)
- 	conversion_result = flush_to_zero (true) (*this, conversion_result);
-       conversion_result = build_f2h_conversion (conversion_result);
-     }
-   else if (SCALAR_FLOAT_TYPE_P (dest_type))
-     {
-       tree casted_input = build_resize_convert_view (src_type, input);
-       conversion_result = convert_to_real (dest_type, casted_input);
-     }
-   else if (INTEGRAL_TYPE_P (dest_type) && INTEGRAL_TYPE_P (src_type))
-     {
-       conversion_result = extend_int (input, dest_type, src_type);
-     }
-   else if (INTEGRAL_TYPE_P (dest_type) && SCALAR_FLOAT_TYPE_P (src_type))
-     {
- 
-       if (cvt_inst->round == BRIG_ROUND_INTEGER_ZERO_SAT)
- 	{
- 
- 	  /* Use builtins for the saturating conversions.  */
- #undef DEF_HSAIL_SAT_BUILTIN
- #undef DEF_HSAIL_BUILTIN
- #undef DEF_HSAIL_ATOMIC_BUILTIN
- #undef DEF_HSAIL_INTR_BUILTIN
- #undef DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN
- 
- 	  tree builtin = NULL_TREE;
- 	  BrigType16_t src_arith_type
- 	    = src_is_fp16
- 	    ? (BrigType16_t) BRIG_TYPE_F32 : cvt_inst->sourceType;
- #define DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN(ENUM, HSAIL_DST_TYPE, HSAIL_SRC_TYPE, \
- 					NAME, TYPE, ATTRS)		\
- 	  if (brig_inst->type == HSAIL_DST_TYPE				\
- 	      && src_arith_type == HSAIL_SRC_TYPE)		\
- 	    builtin = builtin_decl_explicit (ENUM);			\
- 	  else
- #include "brig-builtins.def"
- 	    gcc_unreachable ();
- 
- 	  tree casted_input = build_resize_convert_view (src_type, input);
- 	  conversion_result
- 	    = call_builtin (builtin, 1, dest_type, src_type, casted_input);
- 	}
-       else
- 	{
- 	  tree casted_input = build_resize_convert_view (src_type, input);
- 
- 	  /* Perform the float to int conversion.  */
- 	  conversion_result = convert_to_integer (dest_type, casted_input);
- 	}
-     }
-   else
-     {
-       /* Just use CONVERT_EXPR and hope for the best.  */
-       tree casted_input = build_resize_convert_view (dest_type, input);
-       conversion_result = build1 (CONVERT_EXPR, dest_type, casted_input);
-     }
- 
-   size_t dst_reg_size = int_size_in_bytes (TREE_TYPE (output));
- 
-   /* The output register can be of different type&size than the
-      conversion output size. Only need to handle signed integers, rest
-      is handled by reinterpret_cast.  */
-   tree casted_output = conversion_result;
-   if (dst_reg_size > conv_dst_size &&
-       INTEGRAL_TYPE_P (TREE_TYPE (casted_output)))
-     {
-       gcc_assert (!VECTOR_TYPE_P (casted_output));
- 
-       bool unsignedp = TYPE_UNSIGNED (TREE_TYPE (casted_output));
-       tree resized_int_type
-         = build_nonstandard_integer_type (dst_reg_size * BITS_PER_UNIT,
- 					  unsignedp);
-       casted_output = build1 (CONVERT_EXPR, resized_int_type, casted_output);
-     }
- 
-   casted_output
-     = build_resize_convert_view (TREE_TYPE (output), casted_output);
-   tree assign = build2 (MODIFY_EXPR, TREE_TYPE (output), output, casted_output);
- 
-   m_parent.m_cf->append_statement (assign);
- 
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-fbarrier-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-fbarrier-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-fbarrier-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-fbarrier-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,45 ****
- /* brig-fbarrier-handler.cc -- brig fbarrier directive handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- 
- #include "stringpool.h"
- #include "errors.h"
- 
- /* Allocate this many bytes from the group segment for each fbarrier.  */
- #define FBARRIER_STRUCT_SIZE 32
- 
- size_t
- brig_directive_fbarrier_handler::operator () (const BrigBase *base)
- {
-   /* Model fbarriers as group segment variables with fixed size
-      large enough to store whatever data the actual target needs
-      to store to maintain the barrier info.  The handle is the
-      offset to the beginning of the object.  */
- 
-   const BrigDirectiveFbarrier* fbar = (const BrigDirectiveFbarrier*)base;
-   if (m_parent.m_cf != NULL)
-     m_parent.m_cf->m_function_scope_vars.insert (base);
-   std::string var_name = m_parent.get_mangled_name (fbar);
-   m_parent.add_group_variable (var_name, FBARRIER_STRUCT_SIZE, 1,
- 			       m_parent.m_cf != NULL);
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-function-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-function-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-function-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-function-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,431 ****
- /* brig-code-entry-handler.cc -- brig function directive handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include <sstream>
- #include <iomanip>
- 
- #include "brig-code-entry-handler.h"
- 
- #include "brig-machine.h"
- #include "stringpool.h"
- #include "tree-iterator.h"
- #include "gimple-expr.h"
- #include "function.h"
- #include "phsa.h"
- 
- #include "tree-pretty-print.h"
- #include "print-tree.h"
- 
- extern int gccbrig_verbose;
- 
- size_t
- brig_directive_function_handler::operator () (const BrigBase *base)
- {
-   if (!m_parent.m_analyzing)
-     m_parent.finish_function ();
- 
-   size_t bytes_consumed = base->byteCount;
- 
-   const BrigDirectiveExecutable *exec = (const BrigDirectiveExecutable *) base;
- 
-   if (gccbrig_verbose)
-     {
-       printf ("brig: function name %s\n",
- 	      m_parent.get_string (exec->name).c_str());
-       printf ("brig: inargs %d outargs %d name offset %d\n", exec->inArgCount,
- 	      exec->outArgCount, exec->name);
-     }
- 
-   const bool is_definition
-     = exec->modifier & BRIG_EXECUTABLE_DEFINITION;
- 
-   const bool is_kernel = base->kind == BRIG_KIND_DIRECTIVE_KERNEL;
- 
-   /* There doesn't seem to be actual use cases for kernel declarations
-      as they cannot be called by the program.  Ignore them until there's
-      a reason not to.  */
-   if (is_kernel && !is_definition)
-     return bytes_consumed;
- 
-   std::string func_name = m_parent.get_mangled_name (exec);
-   if (is_kernel)
-     /* The generated kernel function is not the one that should be
-        called by the host.  */
-     func_name = std::string ("_") + func_name;
- 
-   m_parent.m_cf = new brig_function (exec, &m_parent);
-   m_parent.m_cf->m_name = func_name;
-   m_parent.m_cf->m_is_kernel = is_kernel;
- 
-   /* During the analyze step, the above information is all we need per
-      function.  */
-   if (m_parent.m_analyzing)
-     return bytes_consumed;
- 
-   /* There can be multiple forward declarations of the same function.
-      Skip all but the first one.  */
-   if (!is_definition && m_parent.function_decl (func_name) != NULL_TREE)
-     return bytes_consumed;
-   tree fndecl;
-   tree ret_value = NULL_TREE;
- 
-   tree stmt_list = alloc_stmt_list ();
- 
-   /* Add a function scope BIND_EXPR using which we can push local variables that
-      represent HSAIL registers.  */
-   tree bind_expr = build3 (BIND_EXPR, void_type_node, NULL, stmt_list, NULL);
- 
-   tree restrict_char_ptr
-     = build_qualified_type (build_pointer_type (char_type_node),
- 			    TYPE_QUAL_RESTRICT);
-   tree restrict_void_ptr
-     = build_qualified_type (build_pointer_type (void_type_node),
- 			    TYPE_QUAL_RESTRICT);
- 
-   tree restrict_const_char_ptr
-     = build_qualified_type (build_pointer_type
- 			    (build_qualified_type (char_type_node,
- 						   TYPE_QUAL_CONST)),
- 			    TYPE_QUAL_RESTRICT);
- 
-   tree restrict_const_void_ptr
-     = build_qualified_type (build_pointer_type
- 			    (build_qualified_type (void_type_node,
- 						   TYPE_QUAL_CONST)),
- 			    TYPE_QUAL_RESTRICT);
- 
-   if (is_kernel)
-     {
-       tree name_identifier
- 	= get_identifier_with_length (func_name.c_str (), func_name.size ());
- 
-       /* The generated kernel functions take the following arguments:
- 
- 	 1) a char* which is a starting address of the argument segment where
- 	 the call's arguments are stored by the launcher.
- 	 2) a void* parameter that points to a phsail-finalizer context object
- 	 which passes the hsa kernel packet etc.
- 	 3) a void* parameter that contains the first flat address of the group
- 	 region allocated to the current work-group.  */
- 
-       fndecl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL, name_identifier,
- 			   build_function_type_list (void_type_node,
- 						     restrict_const_char_ptr,
- 						     restrict_void_ptr,
- 						     restrict_char_ptr, NULL_TREE));
- 
-       SET_DECL_ASSEMBLER_NAME (fndecl, name_identifier);
- 
-       tree resdecl
- 	= build_decl (UNKNOWN_LOCATION, RESULT_DECL, NULL_TREE, void_type_node);
- 
-       tree typelist = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
-       tree argtype = TREE_VALUE (typelist);
-       TYPE_ADDR_SPACE (argtype)
- 	= gccbrig_get_target_addr_space_id (BRIG_SEGMENT_KERNARG);
- 
-       tree arg_arg = build_decl (UNKNOWN_LOCATION, PARM_DECL,
- 				 get_identifier ("__args"),
- 				 restrict_const_char_ptr);
-       DECL_ARGUMENTS (fndecl) = arg_arg;
-       DECL_ARG_TYPE (arg_arg) = restrict_const_char_ptr;
-       DECL_CONTEXT (arg_arg) = fndecl;
-       DECL_ARTIFICIAL (arg_arg) = 1;
-       TREE_READONLY (arg_arg) = 1;
-       TREE_USED (arg_arg) = 1;
- 
-       DECL_RESULT (fndecl) = resdecl;
-       DECL_CONTEXT (resdecl) = fndecl;
-       DECL_EXTERNAL (fndecl) = 0;
- 
-       /* Aggressive inlining to the kernel function is usually a good
- 	 idea with offlined functionality to enchance SIMD execution on
- 	 GPUs and vector units.  */
- 
-       DECL_ATTRIBUTES (fndecl)
- 	= tree_cons (get_identifier ("flatten"), NULL,
- 		     DECL_ATTRIBUTES (fndecl));
-     }
-   else
-     {
-       /* Build a regular function fingerprint to enable targets to optimize
- 	 the calling convention as they see fit.  */
-       tree name_identifier
- 	= get_identifier_with_length (func_name.c_str (), func_name.size ());
- 
-       m_parent.m_cf->m_arg_variables.clear ();
- 
-       brig_directive_variable_handler arg_handler (m_parent);
- 
-       vec<tree, va_gc> *args;
-       vec_alloc (args, 4);
- 
-       tree arg_decls = NULL_TREE;
- 
-       tree ret_type = void_type_node;
-       if (exec->outArgCount == 1)
- 	{
- 	  /* The return value variable should be the first entry after the
- 	     function directive.  */
- 	  const BrigBase *retval
- 	    = (const BrigBase *) ((const char *) base + base->byteCount);
- 	  gcc_assert (retval->kind == BRIG_KIND_DIRECTIVE_VARIABLE);
- 
- 	  const BrigDirectiveVariable *brigVar
- 	    = (const BrigDirectiveVariable *) retval;
- 
- 	  brig_directive_variable_handler varhandler (m_parent);
- 
- 	  if (brigVar->type & BRIG_TYPE_ARRAY)
- 	    {
- 	      /* Push array output arguments to the beginning of the
- 		 function argument list instead of regular function
- 		 return values.  */
- 
- 	      tree arg_var = varhandler.build_variable (brigVar, PARM_DECL);
- 	      vec_safe_push (args, TREE_TYPE (arg_var));
- 
- 	      m_parent.m_cf->add_arg_variable (brigVar, arg_var);
- 
- 	      if (arg_decls == NULL_TREE)
- 		arg_decls = arg_var;
- 	      else
- 		arg_decls = chainon (arg_decls, arg_var);
- 
- 	      m_parent.m_cf->add_arg_variable (brigVar, arg_var);
- 
- 	      ret_value = build_decl (UNKNOWN_LOCATION, RESULT_DECL, NULL_TREE,
- 				      void_type_node);
- 	    }
- 	  else
- 	    {
- 	      ret_value = varhandler.build_variable (brigVar, RESULT_DECL);
- 	      m_parent.m_cf->m_ret_value = ret_value;
- 	      ret_type = TREE_TYPE (ret_value);
- 	      m_parent.m_cf->m_ret_value_brig_var = brigVar;
- 	    }
- 	  bytes_consumed += retval->byteCount;
- 	}
-       else
- 	ret_value = build_decl (UNKNOWN_LOCATION, RESULT_DECL, NULL_TREE,
- 				void_type_node);
- 
-       TREE_ADDRESSABLE (ret_value) = 1;
- 
-       if (exec->inArgCount > 0)
- 	{
- 	  uint32_t arg_offset = exec->firstInArg;
- 	  for (size_t arg = 0; arg < exec->inArgCount; ++arg)
- 	    {
- 
- 	      const BrigDirectiveVariable *brigVar
- 		= (const BrigDirectiveVariable *) m_parent.get_brig_code_entry
- 		(arg_offset);
- 
- 	      gcc_assert (brigVar->base.kind == BRIG_KIND_DIRECTIVE_VARIABLE);
- 
- 	      /* Delegate to the brig_directive_variable_handler.  */
- 	      brig_directive_variable_handler varhandler (m_parent);
- 	      tree arg_var = varhandler.build_variable (brigVar, PARM_DECL);
- 	      arg_offset += brigVar->base.byteCount;
- 	      vec_safe_push (args, TREE_TYPE (arg_var));
- 
- 	      m_parent.m_cf->add_arg_variable (brigVar, arg_var);
- 	      arg_decls = chainon (arg_decls, arg_var);
- 	    }
- 	}
-       vec_safe_push (args, restrict_void_ptr);
-       vec_safe_push (args, restrict_char_ptr);
-       vec_safe_push (args, uint32_type_node);
-       vec_safe_push (args, restrict_char_ptr);
- 
-       fndecl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL, name_identifier,
- 			   build_function_type_vec (ret_type, args));
- 
-       DECL_RESULT (fndecl) = ret_value;
-       DECL_CONTEXT (ret_value) = fndecl;
-       DECL_EXTERNAL (fndecl) = 0;
-       DECL_ARGUMENTS (fndecl) = arg_decls;
-     }
- 
-   /* All functions need the hidden __context argument passed on
-      because they might call WI-specific functions which need
-      the context info.  Only kernels can write it, if they need
-      to update the local ids in the work-item loop.  */
- 
-   tree context_arg_type
-     = true ? restrict_void_ptr : restrict_const_void_ptr;
-   tree context_arg = build_decl (UNKNOWN_LOCATION, PARM_DECL,
- 				 get_identifier ("__context"),
- 				 context_arg_type);
-   DECL_ARGUMENTS (fndecl) = chainon (DECL_ARGUMENTS (fndecl), context_arg);
-   DECL_CONTEXT (context_arg) = fndecl;
-   DECL_ARG_TYPE (context_arg) = context_arg_type;
-   DECL_ARTIFICIAL (context_arg) = 1;
-   TREE_READONLY (context_arg) = 1;
-   TREE_USED (context_arg) = 1;
-   m_parent.m_cf->m_context_arg = context_arg;
- 
-   /* They can also access group memory, so we need to pass the
-      group pointer along too.  */
-   tree group_base_arg
-     = build_decl (UNKNOWN_LOCATION, PARM_DECL,
- 		  get_identifier ("__group_base_addr"),
- 		  restrict_char_ptr);
-   DECL_ARGUMENTS (fndecl) = chainon (DECL_ARGUMENTS (fndecl), group_base_arg);
-   DECL_ARG_TYPE (group_base_arg) = restrict_char_ptr;
-   DECL_CONTEXT (group_base_arg) = fndecl;
-   DECL_ARTIFICIAL (group_base_arg) = 1;
-   TREE_READONLY (group_base_arg) = 1;
-   TREE_USED (group_base_arg) = 1;
-   m_parent.m_cf->m_group_base_arg = group_base_arg;
- 
-   /* To implement call stack and (non-kernel) function scope group variables,
-      we need to pass an offset which describes how far are we from
-      group_base_ptr.
-      That must be substracted from any function local group variable offsets to
-      get the address related to the bottom of the group memory chunk.  */
-   tree group_local_offset_arg
-     = build_decl (UNKNOWN_LOCATION, PARM_DECL,
- 		  get_identifier ("__group_local_offset"), uint32_type_node);
-   DECL_ARGUMENTS (fndecl) = chainon (DECL_ARGUMENTS (fndecl), group_local_offset_arg);
-   DECL_ARG_TYPE (group_local_offset_arg) = uint32_type_node;
-   DECL_CONTEXT (group_local_offset_arg) = fndecl;
-   DECL_ARTIFICIAL (group_local_offset_arg) = 1;
-   TREE_READONLY (group_local_offset_arg) = 1;
-   TREE_USED (group_local_offset_arg) = 1;
-   m_parent.m_cf->m_group_local_offset_arg = group_local_offset_arg;
- 
-   /* Same for private.  */
-   tree private_base_arg
-     = build_decl (UNKNOWN_LOCATION, PARM_DECL,
- 		  get_identifier ("__private_base_addr"), restrict_char_ptr);
-   DECL_ARGUMENTS (fndecl) = chainon (DECL_ARGUMENTS (fndecl), private_base_arg);
-   DECL_ARG_TYPE (private_base_arg) = restrict_char_ptr;
-   DECL_CONTEXT (private_base_arg) = fndecl;
-   DECL_ARTIFICIAL (private_base_arg) = 1;
-   TREE_READONLY (private_base_arg) = 1;
-   TREE_USED (private_base_arg) = 1;
-   m_parent.m_cf->m_private_base_arg = private_base_arg;
- 
-   DECL_SAVED_TREE (fndecl) = bind_expr;
- 
-   if (base->kind == BRIG_KIND_DIRECTIVE_FUNCTION)
-     {
-       TREE_STATIC (fndecl) = 0;
-       TREE_PUBLIC (fndecl) = 1;
-       DECL_EXTERNAL (fndecl) = 0;
-       DECL_DECLARED_INLINE_P (fndecl) = 1;
-       set_inline (fndecl);
-       set_externally_visible (fndecl);
-     }
-   else if (base->kind == BRIG_KIND_DIRECTIVE_KERNEL)
-     {
-       TREE_STATIC (fndecl) = 0;
-       TREE_PUBLIC (fndecl) = 1;
-       DECL_EXTERNAL (fndecl) = 0;
-       set_externally_visible (fndecl);
-     }
-   else if (base->kind == BRIG_KIND_DIRECTIVE_SIGNATURE)
-     {
-       TREE_STATIC (fndecl) = 0;
-       TREE_PUBLIC (fndecl) = 1;
-       DECL_EXTERNAL (fndecl) = 1;
-       set_inline (fndecl);
-     }
-   else if (base->kind == BRIG_KIND_DIRECTIVE_INDIRECT_FUNCTION)
-     {
-       TREE_STATIC (fndecl) = 0;
-       TREE_PUBLIC (fndecl) = 1;
-     }
-   else
-     gcc_unreachable ();
- 
-   TREE_USED (fndecl) = 1;
-   DECL_ARTIFICIAL (fndecl) = 0;
- 
-   tree initial_block = make_node (BLOCK);
-   DECL_INITIAL (fndecl) = initial_block;
-   TREE_USED (DECL_INITIAL (fndecl)) = 1;
- 
-   if (ret_value != NULL_TREE && TREE_TYPE (ret_value) != void_type_node)
-     {
-       DECL_CONTEXT (ret_value) = fndecl;
-       DECL_CHAIN (ret_value) = BIND_EXPR_VARS (bind_expr);
-       BIND_EXPR_VARS (bind_expr) = ret_value;
-     }
- 
-   tree arg;
-   for (arg = DECL_ARGUMENTS (fndecl); arg != NULL_TREE; arg = TREE_CHAIN (arg))
-     {
-       DECL_CONTEXT (arg) = fndecl;
-       DECL_ARG_TYPE (arg) = TREE_TYPE (arg);
-     }
- 
-   m_parent.add_function_decl (func_name, fndecl);
-   m_parent.append_global (fndecl);
- 
- 
-   if (!is_definition)
-     {
-       DECL_EXTERNAL (fndecl) = 1;
-       return bytes_consumed;
-     }
- 
-   m_parent.start_function (fndecl);
-   m_parent.m_cf->m_func_decl = fndecl;
-   m_parent.m_cf->m_current_bind_expr = bind_expr;
- 
-   if (ret_value != NULL_TREE && TREE_TYPE (ret_value) != void_type_node)
-     {
-       /* We cannot assign to <<retval>> directly in gcc trunk.  We need to
- 	 create a local temporary variable which can be stored to and when
- 	 returning from the function, we'll copy it to the actual <<retval>>
- 	 in return statement's argument.  */
-       tree temp_var = m_parent.m_cf->m_ret_temp
- 	= m_parent.m_cf->add_local_variable ("_retvalue_temp",
- 					     TREE_TYPE (ret_value));
-       TREE_ADDRESSABLE (temp_var) = 1;
-     }
- 
-   if (is_kernel)
-     {
-       m_parent.m_cf->add_id_variables ();
- 
-       /* Create a single entry point in the function.  */
-       m_parent.m_cf->m_entry_label_stmt
- 	= build_stmt (LABEL_EXPR, m_parent.m_cf->label ("__kernel_entry"));
-       m_parent.m_cf->append_statement (m_parent.m_cf->m_entry_label_stmt);
- 
-       tree bind_expr = m_parent.m_cf->m_current_bind_expr;
-       tree stmts = BIND_EXPR_BODY (bind_expr);
- 
-       m_parent.m_cf->m_kernel_entry = tsi_last (stmts);
- 
-       /* Let's not append the exit label yet, but only after the
- 	 function has been built.  We need to build it so it can
- 	 be referred to because returns are converted to gotos to this
- 	 label.  */
-       m_parent.m_cf->m_exit_label = m_parent.m_cf->label ("__kernel_exit");
-     }
- 
-   return bytes_consumed;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-function.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-function.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-function.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-function.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,1602 ****
- /* brig-function.cc -- declaration of brig_function class.
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include <sstream>
- #include <iomanip>
- 
- #include "brig-function.h"
- #include "stringpool.h"
- #include "tree-iterator.h"
- #include "toplev.h"
- #include "gimplify.h"
- #include "gimple-expr.h"
- #include "print-tree.h"
- #include "hsa-brig-format.h"
- #include "stor-layout.h"
- #include "diagnostic-core.h"
- #include "brig-code-entry-handler.h"
- #include "brig-machine.h"
- #include "brig-util.h"
- #include "phsa.h"
- #include "tree-pretty-print.h"
- #include "dumpfile.h"
- #include "profile-count.h"
- #include "tree-cfg.h"
- #include "errors.h"
- #include "function.h"
- #include "brig-to-generic.h"
- #include "brig-builtins.h"
- #include "options.h"
- #include "fold-const.h"
- #include "target.h"
- #include "builtins.h"
- 
- brig_function::builtin_map brig_function::s_custom_builtins;
- 
- brig_function::brig_function (const BrigDirectiveExecutable *exec,
- 			      brig_to_generic *parent)
-   : m_brig_def (exec), m_is_kernel (false), m_is_finished (false), m_name (""),
-     m_current_bind_expr (NULL_TREE), m_func_decl (NULL_TREE),
-     m_context_arg (NULL_TREE), m_group_base_arg (NULL_TREE),
-     m_private_base_arg (NULL_TREE), m_ret_value (NULL_TREE),
-     m_next_kernarg_offset (0), m_kernarg_max_align (0),
-     m_ret_value_brig_var (NULL), m_has_barriers (false), m_has_allocas (false),
-     m_has_function_calls_with_barriers (false), m_calls_analyzed (false),
-     m_is_wg_function (false), m_has_unexpanded_dp_builtins (false),
-     m_generating_arg_block (false), m_parent (parent)
- {
-   memset (m_regs, 0,
- 	  BRIG_2_TREE_HSAIL_TOTAL_REG_COUNT * sizeof (BrigOperandRegister *));
-   memset (&m_descriptor, 0, sizeof (phsa_descriptor));
- 
-   if (s_custom_builtins.size () > 0) return;
- 
-   /* Populate the builtin index.  */
- #undef DEF_HSAIL_ATOMIC_BUILTIN
- #undef DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN
- #undef DEF_HSAIL_INTR_BUILTIN
- #undef DEF_HSAIL_SAT_BUILTIN
- #undef DEF_HSAIL_BUILTIN
- #define DEF_HSAIL_BUILTIN(ENUM, HSAIL_OPCODE, HSAIL_TYPE, NAME, TYPE, ATTRS) \
-   s_custom_builtins[std::make_pair (HSAIL_OPCODE, HSAIL_TYPE)]		\
-     = builtin_decl_explicit (ENUM);
- 
- #include "brig-builtins.def"
- }
- 
- brig_function::~brig_function ()
- {
-   for (size_t i = 0; i < BRIG_2_TREE_HSAIL_TOTAL_REG_COUNT; ++i)
-     {
-       if (m_regs[i] != NULL)
- 	{
- 	  delete m_regs[i];
- 	  m_regs[i] = NULL;
- 	}
-     }
- }
- 
- /* Returns a GENERIC label with the given name in the given function.
-    Creates it, if not yet found.  */
- 
- tree
- brig_function::label (const std::string &name)
- {
-   label_index::const_iterator i = m_label_index.find (name);
-   if (i == m_label_index.end ())
-     {
-       tree name_identifier
- 	= get_identifier_with_length (name.c_str (), name.size ());
- 
-       tree label_decl = build_decl (UNKNOWN_LOCATION, LABEL_DECL,
- 				    name_identifier, void_type_node);
- 
-       DECL_CONTEXT (label_decl) = m_func_decl;
-       DECL_ARTIFICIAL (label_decl) = 0;
- 
-       m_label_index[name] = label_decl;
-       return label_decl;
-     }
-   else
-     return (*i).second;
- }
- 
- /* Record an argument variable for later use.  This includes both local
-    variables inside arg blocks and incoming function arguments.  */
- 
- void
- brig_function::add_arg_variable (const BrigDirectiveVariable *brigVar,
- 				 tree treeDecl)
- {
-   m_arg_variables[brigVar] = treeDecl;
- }
- 
- tree
- brig_function::arg_variable (const BrigDirectiveVariable *var) const
- {
-   variable_index::const_iterator i = m_arg_variables.find (var);
-   if (i == m_arg_variables.end ())
-     return NULL_TREE;
-   else
-     return (*i).second;
- }
- 
- /* Appends a new kernel argument descriptor for the current kernel's
-    arg space.  */
- 
- void
- brig_function::append_kernel_arg (const BrigDirectiveVariable *var, size_t size,
- 				  size_t alignment)
- {
-   gcc_assert (m_func_decl != NULL_TREE);
-   gcc_assert (m_is_kernel);
- 
-   size_t align_padding = m_next_kernarg_offset % alignment == 0 ?
-     0 : (alignment - m_next_kernarg_offset % alignment);
-   m_next_kernarg_offset += align_padding;
-   m_kernarg_offsets[var] = m_next_kernarg_offset;
-   m_next_kernarg_offset += size;
- 
-   m_kernarg_max_align
-     = m_kernarg_max_align < alignment ? alignment : m_kernarg_max_align;
- }
- 
- size_t
- brig_function::kernel_arg_offset (const BrigDirectiveVariable *var) const
- {
-   var_offset_table::const_iterator i = m_kernarg_offsets.find (var);
-   gcc_assert (i != m_kernarg_offsets.end ());
-   return (*i).second;
- }
- 
- /* Add work-item ID variables to the beginning of the kernel function
-    which can be used for address computation as kernel dispatch packet
-    instructions can be expanded to GENERIC nodes referring to them.  */
- 
- void
- brig_function::add_id_variables ()
- {
-   tree bind_expr = m_current_bind_expr;
-   tree stmts = BIND_EXPR_BODY (bind_expr);
- 
-   /* Initialize the WG limits and local ids.  */
-   m_kernel_entry = tsi_start (stmts);
- 
-   for (int i = 0; i < 3; ++i)
-     {
-       char dim_char = (char) ((int) 'x' + i);
- 
-       /* The local sizes are limited to 16b values, but let's still use 32b
- 	 to avoid unnecessary casts (the ID functions are 32b).  */
-       m_local_id_vars[i]
- 	= add_local_variable (std::string ("__local_") + dim_char,
- 			      long_long_integer_type_node);
- 
-       tree workitemid_call
- 	= call_builtin (builtin_decl_explicit (BUILT_IN_HSAIL_WORKITEMID), 2,
- 			uint32_type_node, uint32_type_node,
- 			build_int_cst (uint32_type_node, i), ptr_type_node,
- 			m_context_arg);
- 
-       tree id_init = build2 (MODIFY_EXPR, TREE_TYPE (m_local_id_vars[i]),
- 			     m_local_id_vars[i],
- 			     convert (TREE_TYPE (m_local_id_vars[i]),
- 				      workitemid_call));
- 
-       append_statement (id_init);
- 
-       m_cur_wg_size_vars[i]
- 	= add_local_variable (std::string ("__cur_wg_size_") + dim_char,
- 			      long_long_integer_type_node);
- 
-       tree cwgz_call;
-       if (flag_assume_phsa)
- 	{
- 	  tree_stl_vec operands
- 	    = tree_stl_vec (1, build_int_cst (uint32_type_node, i));
- 	  cwgz_call
- 	    = expand_or_call_builtin (BRIG_OPCODE_CURRENTWORKGROUPSIZE,
- 				      BRIG_TYPE_U32, uint32_type_node,
- 				      operands);
- 	}
-       else
- 	cwgz_call = call_builtin
- 	  (builtin_decl_explicit (BUILT_IN_HSAIL_CURRENTWORKGROUPSIZE),
- 	   2, uint32_type_node, uint32_type_node,
- 	   build_int_cst (uint32_type_node, i), ptr_type_node, m_context_arg);
- 
-       tree limit_init = build2 (MODIFY_EXPR, TREE_TYPE (m_cur_wg_size_vars[i]),
- 				m_cur_wg_size_vars[i],
- 				convert (TREE_TYPE (m_cur_wg_size_vars[i]),
- 					 cwgz_call));
- 
-       append_statement (limit_init);
- 
-       m_wg_id_vars[i]
- 	= add_local_variable (std::string ("__workgroupid_") + dim_char,
- 			      uint32_type_node);
- 
-       tree wgid_call;
-       if (flag_assume_phsa)
- 	{
- 	  tree_stl_vec operands
- 	    = tree_stl_vec (1, build_int_cst (uint32_type_node, i));
- 	  wgid_call
- 	    = expand_or_call_builtin (BRIG_OPCODE_WORKGROUPID, BRIG_TYPE_U32,
- 				      uint32_type_node, operands);
- 	}
-       else
- 	wgid_call
- 	  = call_builtin (builtin_decl_explicit (BUILT_IN_HSAIL_WORKGROUPID),
- 			  2, uint32_type_node, uint32_type_node,
- 			  build_int_cst (uint32_type_node, i), ptr_type_node,
- 			  m_context_arg);
- 
-       tree wgid_init = build2 (MODIFY_EXPR, TREE_TYPE (m_wg_id_vars[i]),
- 			       m_wg_id_vars[i], wgid_call);
- 
-       append_statement (wgid_init);
- 
-       m_wg_size_vars[i]
- 	= add_local_variable (std::string ("__workgroupsize_") + dim_char,
- 			      uint32_type_node);
- 
-       tree wgsize_call;
-       if (flag_assume_phsa)
- 	{
- 	  tree_stl_vec operands
- 	    = tree_stl_vec (1, build_int_cst (uint32_type_node, i));
- 	  wgsize_call
- 	    = expand_or_call_builtin (BRIG_OPCODE_WORKGROUPSIZE, BRIG_TYPE_U32,
- 				      uint32_type_node, operands);
- 	}
-       else
- 	wgsize_call
- 	  = call_builtin (builtin_decl_explicit (BUILT_IN_HSAIL_WORKGROUPSIZE),
- 			  2, uint32_type_node, uint32_type_node,
- 			  build_int_cst (uint32_type_node, i), ptr_type_node,
- 			  m_context_arg);
- 
-       tree wgsize_init = build2 (MODIFY_EXPR, TREE_TYPE (m_wg_size_vars[i]),
- 				 m_wg_size_vars[i], wgsize_call);
- 
-       append_statement (wgsize_init);
- 
-       m_grid_size_vars[i]
- 	= add_local_variable (std::string ("__gridsize_") + dim_char,
- 			      uint32_type_node);
- 
-       tree gridsize_call
- 	= call_builtin (builtin_decl_explicit (BUILT_IN_HSAIL_GRIDSIZE), 2,
- 			uint32_type_node, uint32_type_node,
- 			build_int_cst (uint32_type_node, i), ptr_type_node,
- 			m_context_arg);
- 
-       tree gridsize_init = build2 (MODIFY_EXPR, TREE_TYPE (m_grid_size_vars[i]),
- 				   m_grid_size_vars[i], gridsize_call);
- 
-       append_statement (gridsize_init);
- 
-       m_abs_id_base_vars[i]
- 	= add_local_variable (std::string ("__abs_id_base_") + dim_char,
- 			      long_long_integer_type_node);
- 
-       m_abs_id_vars[i]
- 	= add_local_variable (std::string ("__abs_id_") + dim_char,
- 			      long_long_integer_type_node);
- 
-       tree abs_id_base
- 	= build2 (MULT_EXPR, long_long_integer_type_node,
- 		  convert (long_long_integer_type_node, m_wg_id_vars[i]),
- 		  convert (long_long_integer_type_node, m_wg_size_vars[i]));
-       tree abs_id
- 	= build2 (PLUS_EXPR, long_long_integer_type_node, abs_id_base,
- 		  convert (long_long_integer_type_node, m_local_id_vars[i]));
- 
-       tree abs_id_base_init
- 	= build2 (MODIFY_EXPR, TREE_TYPE (m_abs_id_base_vars[i]),
- 		  m_abs_id_base_vars[i], abs_id_base);
-       append_statement (abs_id_base_init);
- 
-       tree abs_id_init = build2 (MODIFY_EXPR,
- 				 TREE_TYPE (m_abs_id_vars[i]),
- 				 m_abs_id_vars[i], abs_id);
-       append_statement (abs_id_init);
-     }
- }
- 
- /* Creates a new local variable with the given NAME and given GENERIC
-    TYPE.  */
- 
- tree
- brig_function::add_local_variable (std::string name, tree type)
- {
-   tree name_identifier
-     = get_identifier_with_length (name.c_str (), name.size ());
-   tree variable
-     = build_decl (UNKNOWN_LOCATION, VAR_DECL, name_identifier, type);
- 
-   DECL_NONLOCAL (variable) = 0;
-   TREE_ADDRESSABLE (variable) = 0;
-   TREE_STATIC (variable) = 0;
-   TREE_USED (variable) = 1;
-   DECL_ARTIFICIAL (variable) = 0;
- 
-   tree bind_expr = DECL_SAVED_TREE (m_func_decl);
- 
-   DECL_CONTEXT (variable) = m_func_decl;
- 
-   DECL_CHAIN (variable) = BIND_EXPR_VARS (bind_expr);
-   BIND_EXPR_VARS (bind_expr) = variable;
-   return variable;
- }
- 
- /* Return tree type for an HSA register.
- 
-    The tree type can be anything (scalar, vector, int, float, etc.)
-    but its size is guaranteed to match the HSA register size.
- 
-    HSA registers are untyped but we select a type based on their use
-    to reduce (sometimes unoptimizable) VIEW_CONVERT_EXPR nodes (seems
-    to occur when use or def reaches over current BB).  */
- 
- tree
- brig_function::get_tree_type_for_hsa_reg (const BrigOperandRegister *reg) const
- {
-   size_t reg_size = gccbrig_reg_size (reg);
- 
-   /* The default type.  */
-   tree type = build_nonstandard_integer_type (reg_size, true);
- 
-   if (m_parent->m_fn_regs_use_index.count (m_name) == 0)
-     return type;
- 
-   const regs_use_index &index = m_parent->m_fn_regs_use_index[m_name];
-   size_t reg_id = gccbrig_hsa_reg_id (*reg);
-   if (index.count (reg_id) == 0)
-     return type;
- 
-   const reg_use_info &info = index.find (reg_id)->second;
-   std::vector<std::pair<tree, size_t> >::const_iterator it
-     = info.m_type_refs.begin ();
-   std::vector<std::pair<tree, size_t> >::const_iterator it_end
-     = info.m_type_refs.end ();
-   size_t max_refs_as_type_count = 0;
-   for (; it != it_end; it++)
-     {
-       size_t type_bit_size = int_size_in_bytes (it->first) * BITS_PER_UNIT;
-       if (type_bit_size != reg_size) continue;
-       if (it->second > max_refs_as_type_count)
- 	{
- 	  type = it->first;
- 	  max_refs_as_type_count = it->second;
- 	}
-     }
- 
-   return type;
- }
- 
- /* Returns a DECL_VAR for the given HSAIL operand register.
-    If it has not been created yet for the function being generated,
-    creates it as a type determined by analysis phase.  */
- 
- tree
- brig_function::get_m_var_declfor_reg (const BrigOperandRegister *reg)
- {
-   size_t offset = gccbrig_hsa_reg_id (*reg);
- 
-   reg_decl_index_entry *regEntry = m_regs[offset];
-   if (regEntry == NULL)
-     {
-       size_t reg_size = gccbrig_reg_size (reg);
-       tree type;
-       if (reg_size > 1)
- 	type = get_tree_type_for_hsa_reg (reg);
-       else
- 	type = boolean_type_node;
- 
-       /* Drop the const qualifier so we do not end up with a read only
- 	 register variable which cannot be written to later.  */
-       tree nonconst_type = build_type_variant (type, false, false);
- 
-       regEntry = new reg_decl_index_entry;
- 
-       regEntry->m_var_decl
- 	= add_local_variable (gccbrig_reg_name (reg), nonconst_type);
-       m_regs[offset] = regEntry;
-     }
-   return regEntry->m_var_decl;
- }
- 
- /* Builds a work-item do..while loop for a single DIM.  HEADER_ENTRY is
-    a statement after which the iteration variables should be initialized and
-    the loop body starts.  BRANCH_AFTER is the statement after which the loop
-    predicate check and the back edge goto will be appended.  */
- 
- void
- brig_function::add_wi_loop (int dim, tree_stmt_iterator *header_entry,
- 			    tree_stmt_iterator *branch_after)
- {
-   tree ivar = m_local_id_vars[dim];
-   tree abs_id_base_var = m_abs_id_base_vars[dim];
-   tree abs_id_var = m_abs_id_vars[dim];
-   tree ivar_max = m_cur_wg_size_vars[dim];
-   tree_stmt_iterator entry = *header_entry;
- 
-   /* TODO: this is not a parallel loop as we share the "register variables"
-      across work-items.  Should create a copy of them per WI instance.  That
-      is, declare temporaries for new definitions inside the loop body, not at
-      function scope.  */
- 
-   tree ivar_init = build2 (MODIFY_EXPR, TREE_TYPE (ivar), ivar,
- 			   build_zero_cst (TREE_TYPE (ivar)));
-   tsi_link_after (&entry, ivar_init, TSI_NEW_STMT);
- 
-   tree abs_id_var_init = build2 (MODIFY_EXPR, TREE_TYPE (abs_id_var),
- 				 abs_id_var,
- 				 convert (TREE_TYPE (abs_id_var),
- 					  abs_id_base_var));
-   tsi_link_after (&entry, abs_id_var_init, TSI_NEW_STMT);
- 
-   tree loop_body_label
-     = label (std::string ("__wi_loop_") + (char) ((int) 'x' + dim));
-   tree loop_body_label_stmt = build_stmt (LABEL_EXPR, loop_body_label);
- 
-   tsi_link_after (&entry, loop_body_label_stmt, TSI_NEW_STMT);
- 
-   if (m_has_unexpanded_dp_builtins)
-     {
-       if (!flag_assume_phsa)
- 	{
- 	  tree id_set_builtin
- 	    = builtin_decl_explicit (BUILT_IN_HSAIL_SETWORKITEMID);
- 	  /* Set the local ID to the current wi-loop iteration variable value
- 	     to ensure the builtins see the correct values.  */
- 	  tree id_set_call
- 	    = call_builtin (id_set_builtin, 3,
- 			    void_type_node, uint32_type_node,
- 			    build_int_cst (uint32_type_node, dim),
- 			    uint32_type_node, convert (uint32_type_node, ivar),
- 			    ptr_type_node, m_context_arg);
- 	  tsi_link_after (&entry, id_set_call, TSI_NEW_STMT);
- 	}
-       else
- 	{
- 	  tree ptr_type = build_pointer_type (uint32_type_node);
- 	  tree ctx = build2 (MEM_REF, uint32_type_node, m_context_arg,
- 			     build_int_cst (ptr_type, dim * 4));
- 	  tree assign = build2 (MODIFY_EXPR, uint32_type_node, ctx,
- 				convert (uint32_type_node, ivar));
- 
- 	  tsi_link_after (&entry, assign, TSI_NEW_STMT);
- 	}
-     }
- 
-   /* Increment the WI iteration variable.  */
-   tree incr = build2 (PREINCREMENT_EXPR, TREE_TYPE (ivar), ivar,
- 		      build_one_cst (TREE_TYPE (ivar)));
- 
-   tsi_link_after (branch_after, incr, TSI_NEW_STMT);
- 
-   /* ...and the abs id variable.  */
-   tree abs_id_incr = build2 (PREINCREMENT_EXPR, TREE_TYPE (abs_id_var),
- 			     abs_id_var,
- 			     build_one_cst (TREE_TYPE (abs_id_var)));
- 
-   tsi_link_after (branch_after, abs_id_incr, TSI_NEW_STMT);
- 
-   /* Append the predicate check with the back edge goto.  */
-   tree condition = build2 (LT_EXPR, TREE_TYPE (ivar), ivar, ivar_max);
-   tree target_goto = build1 (GOTO_EXPR, void_type_node, loop_body_label);
-   tree if_stmt
-     = build3 (COND_EXPR, void_type_node, condition, target_goto, NULL_TREE);
-   tsi_link_after (branch_after, if_stmt, TSI_NEW_STMT);
- }
- 
- /* Recursively analyzes the function and its callees for barrier usage.  */
- 
- void
- brig_function::analyze_calls ()
- {
-   if (m_calls_analyzed)
-     return;
- 
-   /* Set this early to not get stuck in case of recursive call graphs.
-      This is safe because if the function calls itself, either the function
-      has barrier calls which implies a call to a function with barrier calls,
-      or it doesn't in which case the result depends on the later called
-      functions.  */
-   m_calls_analyzed = true;
- 
-   for (size_t i = 0; i < m_called_functions.size (); ++i)
-     {
-       tree f = m_called_functions[i];
-       brig_function *called_f = m_parent->get_finished_function (f);
-       if (called_f == NULL)
- 	{
- 	  /* Unfinished function (only declaration within the set of BRIGs)
- 	     found.  Cannot finish the CG analysis.  Have to assume it does have
- 	     a barrier for safety.  */
- 	  m_has_function_calls_with_barriers = true;
- 	  m_has_unexpanded_dp_builtins = true;
- 	  break;
- 	}
-       called_f->analyze_calls ();
-       /* We can assume m_has_barriers has been correctly set during the
- 	 construction of the function decl.  No need to reanalyze it.  */
-       m_has_function_calls_with_barriers |= called_f->m_has_barriers;
- 
-       /* If the function or any of its called functions has dispatch
- 	 packet builtin calls that require the local id, we need to
- 	 set the local id to the context in the work item loop before
- 	 the functions are called.  If we analyze the opposite, these
- 	 function calls can be omitted.  */
-       m_has_unexpanded_dp_builtins |= called_f->m_has_unexpanded_dp_builtins;
-     }
- }
- 
- /* Tries to convert the current kernel to a work-group function that executes
-    all work-items using loops.  Returns true in case the conversion was
-    successful.  */
- 
- bool
- brig_function::convert_to_wg_function ()
- {
-   if (!m_calls_analyzed)
-     analyze_calls ();
- 
-   if (m_has_barriers || m_has_function_calls_with_barriers)
-     return false;
- 
-   /* The most trivial case: No barriers at all in the kernel.
-      We can create one big work-item loop around the whole kernel.  */
-   tree bind_expr = m_current_bind_expr;
-   tree stmts = BIND_EXPR_BODY (bind_expr);
- 
-   for (int i = 0; i < 3; ++i)
-     {
-       /* The previous loop has added a new label to the end of the function,
- 	 the next level loop should wrap around it also.  */
-       tree_stmt_iterator function_exit = tsi_last (stmts);
-       add_wi_loop (i, &m_kernel_entry, &function_exit);
-     }
- 
-   m_is_wg_function = true;
-   return false;
- }
- 
- /* Emits a kernel description to a special ELF section so it can be
-    utilized by an HSA runtime implementation.  The assembly block
-    must be emitted to a statement list of an function, which is given
-    as an argument.  Returns the assembly block used to emit the section. */
- 
- tree
- brig_function::emit_metadata (tree stmt_list)
- {
-   /* Emit an ELF section via an assembly directive that generates a special
-      ELF section for each kernel that contains raw bytes of a descriptor
-      object.  This is pretty disgusting, but life is never perfect ;)  */
- 
-   /* Use the original kernel name without the '_' prefix in the section name.  */
-   std::string kern_name = m_is_kernel ? m_name.substr (1) : m_name;
- 
-   std::ostringstream strstr;
-   strstr << std::endl
- 	 << ".pushsection " << PHSA_DESC_SECTION_PREFIX << kern_name
- 	 << std::endl
- 	 << "\t.p2align 1, 1, 1" << std::endl
- 	 << "\t.byte ";
- 
-   for (size_t i = 0; i < sizeof (phsa_descriptor); ++i)
-     {
-       strstr << "0x" << std::setw (2) << std::setfill ('0') << std::hex
- 	     << (unsigned) *((unsigned char *) &m_descriptor + i);
-       if (i + 1 < sizeof (phsa_descriptor))
- 	strstr << ", ";
-     }
- 
-   strstr << std::endl << ".popsection" << std::endl << std::endl;
- 
-   tree metadata_asm
-     = build_stmt (ASM_EXPR,
- 		  build_string (strstr.str ().size (), strstr.str ().c_str ()),
- 		  NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE);
- 
-   append_to_statement_list_force (metadata_asm, &stmt_list);
-   return metadata_asm;
- }
- 
- /* Emits the kernel launcher function.  Also emits the metadata section
-    creation statements in it.
- 
-    The launcher function calls the device-side runtime
-    that runs the kernel for all work-items.  In C:
- 
-    void KernelName (void* context, void* group_base_addr)
-    {
-      __hsail_launch_kernel (_KernelName, context, group_base_addr);
-    }
- 
-    or, in case of a successful conversion to a work-group function:
- 
-    void KernelName (void* context, void* group_base_addr)
-    {
-      __hsail_launch_wg_function (_KernelName, context, group_base_addr);
-    }
- 
-    The user/host sees this function as the kernel to call from the
-    outside.  The actual kernel generated from HSAIL was named _KernelName.
- */
- 
- tree
- brig_function::emit_launcher_and_metadata ()
- {
-   /* The original kernel name without the '_' prefix.  */
-   std::string kern_name = m_name.substr (1);
- 
-   tree name_identifier
-     = get_identifier_with_length (kern_name.c_str (), kern_name.size ());
- 
-   tree restrict_void_ptr
-     = build_qualified_type (build_pointer_type (void_type_node),
- 			    TYPE_QUAL_RESTRICT);
-   tree restrict_char_ptr
-     = build_qualified_type (build_pointer_type (char_type_node),
- 			    TYPE_QUAL_RESTRICT);
-   tree launcher
-     = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL, name_identifier,
- 		  build_function_type_list (void_type_node, restrict_void_ptr,
- 					    restrict_char_ptr, NULL_TREE));
- 
-   TREE_USED (launcher) = 1;
-   DECL_ARTIFICIAL (launcher) = 1;
- 
-   tree context_arg = build_decl (UNKNOWN_LOCATION, PARM_DECL,
- 				 get_identifier ("__context"),
- 				 restrict_void_ptr);
- 
-   DECL_ARGUMENTS (launcher) = context_arg;
-   DECL_ARG_TYPE (context_arg) = restrict_void_ptr;
-   DECL_CONTEXT (context_arg) = launcher;
-   TREE_USED (context_arg) = 1;
-   DECL_ARTIFICIAL (context_arg) = 1;
- 
-   tree group_base_addr_arg
-     = build_decl (UNKNOWN_LOCATION, PARM_DECL,
- 		  get_identifier ("__group_base_addr"), restrict_char_ptr);
- 
-   chainon (DECL_ARGUMENTS (launcher), group_base_addr_arg);
-   DECL_ARG_TYPE (group_base_addr_arg) = restrict_char_ptr;
-   DECL_CONTEXT (group_base_addr_arg) = launcher;
-   TREE_USED (group_base_addr_arg) = 1;
-   DECL_ARTIFICIAL (group_base_addr_arg) = 1;
- 
-   tree resdecl
-     = build_decl (UNKNOWN_LOCATION, RESULT_DECL, NULL_TREE, void_type_node);
- 
-   DECL_RESULT (launcher) = resdecl;
-   DECL_CONTEXT (resdecl) = launcher;
- 
-   DECL_INITIAL (launcher) = make_node (BLOCK);
-   TREE_USED (DECL_INITIAL (launcher)) = 1;
- 
-   tree stmt_list = alloc_stmt_list ();
- 
-   tree bind_expr = build3 (BIND_EXPR, void_type_node, NULL, stmt_list, NULL);
- 
-   TREE_STATIC (launcher) = 1;
-   TREE_PUBLIC (launcher) = 1;
- 
-   DECL_SAVED_TREE (launcher) = bind_expr;
- 
-   if (DECL_STRUCT_FUNCTION (launcher) == NULL)
-     push_struct_function (launcher);
-   else
-     push_cfun (DECL_STRUCT_FUNCTION (launcher));
- 
-   tree kernel_func_ptr = build1 (ADDR_EXPR, ptr_type_node, m_func_decl);
- 
-   tree phsail_launch_kernel_call;
- 
-   /* Compute the local group segment frame start pointer.  */
-   tree group_local_offset_temp
-     = create_tmp_var (uint32_type_node, "group_local_offset");
-   tree group_local_offset_arg
-     = build2 (MODIFY_EXPR, uint32_type_node,
- 	      group_local_offset_temp,
- 	      build_int_cst (uint32_type_node,
- 			     m_parent->m_module_group_variables.size()));
- 
-   /* Emit a launcher depending whether we converted the kernel function to
-      a work group function or not.  */
-   if (m_is_wg_function)
-     phsail_launch_kernel_call
-       = call_builtin (builtin_decl_explicit (BUILT_IN_HSAIL_LAUNCH_WG_FUNC),
- 		      4, void_type_node,
- 		      ptr_type_node, kernel_func_ptr, restrict_void_ptr,
- 		      context_arg, restrict_char_ptr, group_base_addr_arg,
- 		      uint32_type_node, group_local_offset_arg);
-   else
-     phsail_launch_kernel_call
-       = call_builtin (builtin_decl_explicit (BUILT_IN_HSAIL_LAUNCH_KERNEL),
- 		      4, void_type_node,
- 		      ptr_type_node, kernel_func_ptr, restrict_void_ptr,
- 		      context_arg, restrict_char_ptr, group_base_addr_arg,
- 		      uint32_type_node, group_local_offset_arg);
- 
-   append_to_statement_list_force (phsail_launch_kernel_call, &stmt_list);
- 
-   emit_metadata (stmt_list);
- 
-   set_externally_visible (launcher);
- 
-   return launcher;
- }
- 
- tree
- brig_function::append_statement (tree stmt)
- {
-   gcc_assert (m_func_decl != NULL);
- 
-   tree bind_expr = m_current_bind_expr;
-   tree stmts = BIND_EXPR_BODY (bind_expr);
- 
-   append_to_statement_list_force (stmt, &stmts);
-   return stmt;
- }
- 
- /* Creates a new "alloca frame" for the current function by
-    injecting an alloca frame push in the beginning of the function
-    and an alloca frame pop before all function exit points.  */
- 
- void
- brig_function::create_alloca_frame ()
- {
-   tree_stmt_iterator entry;
- 
-   /* Adds the alloca push only after the ids have been initialized
-      in case of a kernel function.  */
-   if (m_is_kernel)
-     entry = m_kernel_entry;
-   else
-     {
-       tree bind_expr = m_current_bind_expr;
-       tree stmts = BIND_EXPR_BODY (bind_expr);
-       entry = tsi_start (stmts);
-     }
- 
-   tree push_frame_builtin = builtin_decl_explicit (BUILT_IN_HSAIL_PUSH_FRAME);
-   tree push_frame_call
-     = call_builtin (push_frame_builtin, 1, void_type_node, ptr_type_node,
- 		    m_context_arg);
- 
-   tsi_link_before (&entry, push_frame_call, TSI_NEW_STMT);
- 
-   tree pop_frame_builtin = builtin_decl_explicit (BUILT_IN_HSAIL_POP_FRAME);
- 
-   do
-     {
-       tree stmt = tsi_stmt (entry);
-       if (TREE_CODE (stmt) == RETURN_EXPR)
- 	{
- 	  tree pop_frame_call
- 	    = call_builtin (pop_frame_builtin, 1, void_type_node,
- 			    ptr_type_node, m_context_arg);
- 
- 	  tsi_link_before (&entry, pop_frame_call, TSI_SAME_STMT);
- 	}
-       tsi_next (&entry);
-     }
-   while (!tsi_end_p (entry));
- }
- 
- /* Finishes the currently built function.  After calling this, no new
-    statements should be appeneded to the function.  */
- void
- brig_function::finish ()
- {
-   append_return_stmt ();
- 
-   /* Currently assume single alloca frame per WG.  */
-   if (m_has_allocas)
-     create_alloca_frame ();
- }
- 
- void
- brig_function::finish_kernel ()
- {
-   /* Kernel functions should have a single exit point.
-      Let's create one.  The return instructions should have
-      been converted to branches to this label.  */
-   append_statement (build_stmt (LABEL_EXPR, m_exit_label));
-   /* Attempt to convert the kernel to a work-group function that
-      executes all work-items of the WG using a loop.  */
-   convert_to_wg_function ();
- 
-   append_return_stmt ();
- 
-   /* Currently assume single alloca frame per WG.  */
-   if (m_has_allocas)
-     create_alloca_frame ();
- }
- 
- void
- brig_function::append_return_stmt ()
- {
-   gcc_assert (m_current_bind_expr != NULL_TREE);
-   tree stmts = BIND_EXPR_BODY (m_current_bind_expr);
- 
-   if (STATEMENT_LIST_TAIL (stmts) == NULL)
-     return; /* Empty function.  */
- 
-   tree last_stmt = tsi_stmt (tsi_last (stmts));
- 
-   if (TREE_CODE (last_stmt) == RETURN_EXPR)
-     return;
- 
-   if (m_ret_value != NULL_TREE)
-     {
-       tree result_assign
- 	= build2 (MODIFY_EXPR, TREE_TYPE (m_ret_value), m_ret_value,
- 		  m_ret_temp);
- 
-       tree return_expr
- 	= build1 (RETURN_EXPR, TREE_TYPE (result_assign), result_assign);
-       append_to_statement_list_force (return_expr, &stmts);
-     }
-   else
-     {
-       tree return_stmt = build_stmt (RETURN_EXPR, NULL);
-       append_to_statement_list_force (return_stmt, &stmts);
-     }
- }
- 
- bool
- brig_function::has_function_scope_var (const BrigBase* var) const
- {
-   return m_function_scope_vars.find (var) != m_function_scope_vars.end ();
- }
- 
- size_t
- brig_function::group_variable_segment_offset (const std::string &name) const
- {
-   if (m_local_group_variables.has_variable (name))
-     return m_local_group_variables.segment_offset (name);
- 
-   gcc_assert (m_parent->m_module_group_variables.has_variable (name));
-   return m_parent->m_module_group_variables.segment_offset (name);
- }
- 
- /* Try to expand the given builtin call to reuse a previously generated
-    variable, if possible.  If not, just call the given builtin.
-    BRIG_OPCODE and BRIG_TYPE identify the builtin's BRIG opcode/type,
-    ARITH_TYPE its GENERIC type, and OPERANDS contains the builtin's
-    input operands.  */
- 
- tree
- brig_function::expand_or_call_builtin (BrigOpcode16_t brig_opcode,
- 				       BrigType16_t brig_type,
- 				       tree arith_type,
- 				       tree_stl_vec &operands)
- {
-   if (needs_workitem_context_data (brig_opcode))
-     m_has_unexpanded_dp_builtins = true;
- 
-   if (can_expand_builtin (brig_opcode))
-     return expand_builtin (brig_opcode, operands);
- 
-   tree built_in
-     = get_builtin_for_hsa_opcode (arith_type, brig_opcode, brig_type);
- 
-   if (!VECTOR_TYPE_P (TREE_TYPE (TREE_TYPE (built_in)))
-       && arith_type != NULL_TREE && VECTOR_TYPE_P (arith_type)
-       && brig_opcode != BRIG_OPCODE_LERP
-       && brig_opcode != BRIG_OPCODE_PACKCVT
-       && brig_opcode != BRIG_OPCODE_SAD
-       && brig_opcode != BRIG_OPCODE_SADHI)
-     {
-       /* Call the scalar built-in for all elements in the vector.  */
-       tree_stl_vec operand0_elements;
-       if (operands.size () > 0)
- 	unpack (operands[0], operand0_elements);
- 
-       tree_stl_vec operand1_elements;
-       if (operands.size () > 1)
- 	unpack (operands[1], operand1_elements);
- 
-       tree_stl_vec result_elements;
- 
-       size_t element_count = gccbrig_type_vector_subparts (arith_type);
-       for (size_t i = 0; i < element_count; ++i)
- 	{
- 	  tree_stl_vec call_operands;
- 	  if (operand0_elements.size () > 0)
- 	    call_operands.push_back (operand0_elements.at (i));
- 
- 	  if (operand1_elements.size () > 0)
- 	    call_operands.push_back (operand1_elements.at (i));
- 
- 	  result_elements.push_back
- 	    (expand_or_call_builtin (brig_opcode, brig_type,
- 				     TREE_TYPE (arith_type),
- 				     call_operands));
- 	}
-       return pack (result_elements);
-     }
- 
-   tree_stl_vec call_operands;
-   tree_stl_vec operand_types;
- 
-   tree arg_type_chain = TYPE_ARG_TYPES (TREE_TYPE (built_in));
- 
-   for (size_t i = 0; i < operands.size (); ++i)
-     {
-       tree operand_type = TREE_VALUE (arg_type_chain);
-       call_operands.push_back (convert (operand_type, operands[i]));
-       operand_types.push_back (operand_type);
-       arg_type_chain = TREE_CHAIN (arg_type_chain);
-     }
- 
-   if (needs_workitem_context_data (brig_opcode))
-     {
-       call_operands.push_back (m_context_arg);
-       operand_types.push_back (ptr_type_node);
-     }
- 
-   size_t operand_count = call_operands.size ();
- 
-   call_operands.resize (4, NULL_TREE);
-   operand_types.resize (4, NULL_TREE);
-   for (size_t i = 0; i < operand_count; ++i)
-     call_operands.at (i) = build_resize_convert_view (operand_types.at (i),
- 						      call_operands.at (i));
- 
-   tree fnptr = build_fold_addr_expr (built_in);
-   return build_call_array (TREE_TYPE (TREE_TYPE (built_in)), fnptr,
- 			   operand_count, &call_operands[0]);
- }
- 
- /* Instead of calling a built-in function, use a more efficient mechanism
-    such as reuse a previously returned value known to be still valid, or
-    access the work-item context struct directly.  This is beneficial especially
-    for the work-item identification related builtins as not having them as
-    unanalyzable black box calls can lead to more easily vectorizable parallel
-    loops for multi work-item work-groups.  BRIG_OPCODE identifies the builtin
-    and OPERANDS store the operands.  */
- 
- tree
- brig_function::expand_builtin (BrigOpcode16_t brig_opcode,
- 			       tree_stl_vec &operands)
- {
-   tree_stl_vec uint32_0 = tree_stl_vec (1, build_int_cst (uint32_type_node, 0));
- 
-   tree_stl_vec uint32_1 = tree_stl_vec (1, build_int_cst (uint32_type_node, 1));
- 
-   tree_stl_vec uint32_2 = tree_stl_vec (1, build_int_cst (uint32_type_node, 2));
- 
-   if (brig_opcode == BRIG_OPCODE_WORKITEMFLATABSID)
-     {
-       tree id0 = expand_builtin (BRIG_OPCODE_WORKITEMABSID, uint32_0);
-       id0 = convert (uint64_type_node, id0);
- 
-       tree id1 = expand_builtin (BRIG_OPCODE_WORKITEMABSID, uint32_1);
-       id1 = convert (uint64_type_node, id1);
- 
-       tree id2 = expand_builtin (BRIG_OPCODE_WORKITEMABSID, uint32_2);
-       id2 = convert (uint64_type_node, id2);
- 
-       tree max0 = convert (uint64_type_node, m_grid_size_vars[0]);
-       tree max1 = convert (uint64_type_node, m_grid_size_vars[1]);
- 
-       tree id2_x_max0_x_max1 = build2 (MULT_EXPR, uint64_type_node, id2, max0);
-       id2_x_max0_x_max1
- 	= build2 (MULT_EXPR, uint64_type_node, id2_x_max0_x_max1, max1);
- 
-       tree id1_x_max0 = build2 (MULT_EXPR, uint64_type_node, id1, max0);
- 
-       tree sum = build2 (PLUS_EXPR, uint64_type_node, id0, id1_x_max0);
-       sum = build2 (PLUS_EXPR, uint64_type_node, sum, id2_x_max0_x_max1);
- 
-       return add_temp_var ("workitemflatabsid", sum);
-     }
-   else if (brig_opcode == BRIG_OPCODE_WORKITEMABSID)
-     {
-       HOST_WIDE_INT dim = int_constant_value (operands[0]);
-       return m_abs_id_vars[dim];
-     }
-   else if (brig_opcode == BRIG_OPCODE_WORKITEMFLATID)
-     {
- 
-       tree wg_size_x = expand_builtin (BRIG_OPCODE_WORKGROUPSIZE, uint32_0);
-       tree wg_size_y = expand_builtin (BRIG_OPCODE_WORKGROUPSIZE, uint32_1);
-       tree z_x_wgsx_wgsy
- 	= build2 (MULT_EXPR, uint32_type_node,
- 		  convert (uint32_type_node,
- 			   expand_builtin (BRIG_OPCODE_WORKITEMID, uint32_2)),
- 		  wg_size_x);
-       z_x_wgsx_wgsy = build2 (MULT_EXPR, uint32_type_node, z_x_wgsx_wgsy,
- 			      wg_size_y);
- 
-       tree y_x_wgsx
- 	= build2 (MULT_EXPR, uint32_type_node,
- 		  convert (uint32_type_node,
- 			   expand_builtin (BRIG_OPCODE_WORKITEMID, uint32_1)),
- 		  wg_size_x);
- 
-       tree sum = build2 (PLUS_EXPR, uint32_type_node, y_x_wgsx, z_x_wgsx_wgsy);
-       sum = build2 (PLUS_EXPR, uint32_type_node,
- 		    convert (uint32_type_node,
- 			     expand_builtin (BRIG_OPCODE_WORKITEMID, uint32_0)),
- 		    sum);
-       return add_temp_var ("workitemflatid", sum);
-     }
-   else if (brig_opcode == BRIG_OPCODE_WORKGROUPSIZE)
-     {
-       HOST_WIDE_INT dim = int_constant_value (operands[0]);
-       if (flag_assume_phsa)
- 	{
- 	  tree ptr_type = build_pointer_type (uint32_type_node);
- 	  tree ctx = build2 (MEM_REF, uint32_type_node, m_context_arg,
- 			     build_int_cst (ptr_type,
- 					    PHSA_CONTEXT_WG_SIZES
- 					    + dim * 4));
- 	  std::string name ("wgsize_x");
- 	  name [name.length() - 1] += dim;
- 	  return add_temp_var (name.c_str(), ctx);
- 	}
-       else if (m_is_kernel)
- 	{
- 	  /* For kernels without phsa we generate certain temps before
- 	     the WI loop, which means we don't need to rely on LICM to get
- 	     them moved out.  */
- 	  return m_wg_size_vars[dim];
- 	}
-       else
- 	gcc_unreachable ();
-     }
-   else if (brig_opcode == BRIG_OPCODE_WORKITEMID)
-     {
-       HOST_WIDE_INT dim = int_constant_value (operands[0]);
-       if (m_is_kernel)
- 	{
- 	  return m_local_id_vars [dim];
- 	}
-       else if (flag_assume_phsa)
- 	{
- 	  tree ptr_type = build_pointer_type (uint32_type_node);
- 	  tree ctx = build2 (MEM_REF, uint32_type_node, m_context_arg,
- 			     build_int_cst (ptr_type,
- 					    PHSA_CONTEXT_OFFS_WI_IDS
- 					    + dim * 4));
- 	  std::string name ("wiid_x");
- 	  name [name.length() - 1] += dim;
- 	  return add_temp_var (name.c_str(), ctx);
- 	}
-       else
- 	gcc_unreachable ();
-     }
-   else if (brig_opcode == BRIG_OPCODE_WORKGROUPID)
-     {
-       HOST_WIDE_INT dim = int_constant_value (operands[0]);
-       if (flag_assume_phsa)
- 	{
- 	  tree ptr_type = build_pointer_type (uint32_type_node);
- 	  tree ctx = build2 (MEM_REF, uint32_type_node, m_context_arg,
- 			     build_int_cst (ptr_type,
- 					    PHSA_CONTEXT_OFFS_WG_IDS
- 					    + dim * 4));
- 	  std::string name ("wgid_x");
- 	  name [name.length() - 1] += dim;
- 	  return add_temp_var (name.c_str(), ctx);
- 	} else if (m_is_kernel)
- 	return m_wg_id_vars [dim];
-       else
- 	gcc_unreachable ();
-     }
-   else if (brig_opcode == BRIG_OPCODE_CURRENTWORKGROUPSIZE)
-     {
-       HOST_WIDE_INT dim = int_constant_value (operands[0]);
-       if (flag_assume_phsa)
- 	{
- 	  tree ptr_type = build_pointer_type (uint32_type_node);
- 	  tree ctx = build2 (MEM_REF, uint32_type_node, m_context_arg,
- 			     build_int_cst (ptr_type,
- 					    PHSA_CONTEXT_CURRENT_WG_SIZES
- 					    + dim * 4));
- 	  std::string name ("curwgsize_x");
- 	  name [name.length() - 1] += dim;
- 	  return add_temp_var (name.c_str(), ctx);
- 	} else if (m_is_kernel)
- 	return m_cur_wg_size_vars[dim];
-       else
- 	gcc_unreachable ();
-     }
-   else
-     gcc_unreachable ();
- 
-   return NULL_TREE;
- }
- 
- /* Returns true in case the given opcode that would normally be generated
-    as a builtin call can be expanded to tree nodes.  */
- 
- bool
- brig_function::can_expand_builtin (BrigOpcode16_t brig_opcode) const
- {
-   switch (brig_opcode)
-     {
-     case BRIG_OPCODE_CURRENTWORKGROUPSIZE:
-     case BRIG_OPCODE_WORKITEMFLATID:
-     case BRIG_OPCODE_WORKITEMID:
-     case BRIG_OPCODE_WORKGROUPID:
-     case BRIG_OPCODE_WORKGROUPSIZE:
-       return m_is_kernel || flag_assume_phsa;
-     case BRIG_OPCODE_WORKITEMFLATABSID:
-     case BRIG_OPCODE_WORKITEMABSID:
-       return m_is_kernel;
-     default:
-       return false;
-     };
- }
- 
- /* In case the HSA instruction must be implemented using a builtin,
-    this function is called to get the correct builtin function.
-    TYPE is the instruction tree type, BRIG_OPCODE the opcode of the
-    brig instruction and BRIG_TYPE the brig instruction's type.  */
- 
- tree
- brig_function::get_builtin_for_hsa_opcode
-   (tree type, BrigOpcode16_t brig_opcode, BrigType16_t brig_type) const
- {
-   tree builtin = NULL_TREE;
-   tree builtin_type = type;
- 
-   /* For vector types, first find the scalar version of the builtin.  */
-   if (type != NULL_TREE && VECTOR_TYPE_P (type))
-     builtin_type = TREE_TYPE (type);
-   BrigType16_t brig_inner_type = brig_type & BRIG_TYPE_BASE_MASK;
- 
-   /* Some BRIG opcodes can use the same builtins for unsigned and
-      signed types.  Force these cases to unsigned types.  */
- 
-   if (brig_opcode == BRIG_OPCODE_BORROW
-       || brig_opcode == BRIG_OPCODE_CARRY
-       || brig_opcode == BRIG_OPCODE_LASTBIT
-       || brig_opcode == BRIG_OPCODE_BITINSERT)
-     {
-       if (brig_type == BRIG_TYPE_S32)
- 	brig_type = BRIG_TYPE_U32;
-       else if (brig_type == BRIG_TYPE_S64)
- 	brig_type = BRIG_TYPE_U64;
-     }
- 
-   switch (brig_opcode)
-     {
-     case BRIG_OPCODE_FLOOR:
-       builtin = mathfn_built_in (builtin_type, BUILT_IN_FLOOR);
-       break;
-     case BRIG_OPCODE_CEIL:
-       builtin = mathfn_built_in (builtin_type, BUILT_IN_CEIL);
-       break;
-     case BRIG_OPCODE_SQRT:
-     case BRIG_OPCODE_NSQRT:
-       builtin = mathfn_built_in (builtin_type, BUILT_IN_SQRT);
-       break;
-     case BRIG_OPCODE_RINT:
-       builtin = mathfn_built_in (builtin_type, BUILT_IN_RINT);
-       break;
-     case BRIG_OPCODE_TRUNC:
-       builtin = mathfn_built_in (builtin_type, BUILT_IN_TRUNC);
-       break;
-     case BRIG_OPCODE_COPYSIGN:
-       builtin = mathfn_built_in (builtin_type, BUILT_IN_COPYSIGN);
-       break;
-     case BRIG_OPCODE_NSIN:
-       builtin = mathfn_built_in (builtin_type, BUILT_IN_SIN);
-       break;
-     case BRIG_OPCODE_NLOG2:
-       builtin = mathfn_built_in (builtin_type, BUILT_IN_LOG2);
-       break;
-     case BRIG_OPCODE_NEXP2:
-       builtin = mathfn_built_in (builtin_type, BUILT_IN_EXP2);
-       break;
-     case BRIG_OPCODE_FMA:
-     case BRIG_OPCODE_NFMA:
-       builtin = mathfn_built_in (builtin_type, BUILT_IN_FMA);
-       break;
-     case BRIG_OPCODE_NCOS:
-       builtin = mathfn_built_in (builtin_type, BUILT_IN_COS);
-       break;
-     case BRIG_OPCODE_POPCOUNT:
-       /* Popcount should be typed by its argument type (the return value
- 	 is always u32).  Let's use a b64 version for also for b32 for now.  */
-       return builtin_decl_explicit (BUILT_IN_POPCOUNTL);
-     case BRIG_OPCODE_BORROW:
-       /* Borrow uses the same builtin for unsigned and signed types.  */
-       if (brig_type == BRIG_TYPE_S32 || brig_type == BRIG_TYPE_U32)
- 	return builtin_decl_explicit (BUILT_IN_HSAIL_BORROW_U32);
-       else
- 	return builtin_decl_explicit (BUILT_IN_HSAIL_BORROW_U64);
-     case BRIG_OPCODE_CARRY:
-       /* Carry also uses the same builtin for unsigned and signed types.  */
-       if (brig_type == BRIG_TYPE_S32 || brig_type == BRIG_TYPE_U32)
- 	return builtin_decl_explicit (BUILT_IN_HSAIL_CARRY_U32);
-       else
- 	return builtin_decl_explicit (BUILT_IN_HSAIL_CARRY_U64);
-     default:
- 
-       /* Use our builtin index for finding a proper builtin for the BRIG
- 	 opcode and BRIG type.  This takes care most of the builtin cases,
- 	 the special cases are handled in the separate 'case' statements
- 	 above.  */
-       builtin_map::const_iterator i
- 	= s_custom_builtins.find (std::make_pair (brig_opcode, brig_type));
-       if (i != s_custom_builtins.end ())
- 	return (*i).second;
- 
-       if (brig_inner_type != brig_type)
- 	{
- 	  /* Try to find a scalar built-in we could use.  */
- 	  i = s_custom_builtins.find
- 	    (std::make_pair (brig_opcode, brig_inner_type));
- 	  if (i != s_custom_builtins.end ())
- 	    return (*i).second;
- 	}
- 
-       /* In case this is an fp16 operation that is promoted to fp32,
- 	 try to find a fp32 scalar built-in.  */
-       if (brig_inner_type == BRIG_TYPE_F16)
- 	{
- 	  i = s_custom_builtins.find
- 	    (std::make_pair (brig_opcode, BRIG_TYPE_F32));
- 	  if (i != s_custom_builtins.end ())
- 	    return (*i).second;
- 	}
-       gcc_unreachable ();
-     }
- 
-   if (VECTOR_TYPE_P (type) && builtin != NULL_TREE)
-     {
-       /* Try to find a vectorized version of the built-in.
- 	 TODO: properly assert that builtin is a mathfn builtin? */
-       tree vec_builtin
- 	= targetm.vectorize.builtin_vectorized_function
- 	(builtin_mathfn_code (builtin), type, type);
-       if (vec_builtin != NULL_TREE)
- 	return vec_builtin;
-       else
- 	return builtin;
-     }
-   if (builtin == NULL_TREE)
-     gcc_unreachable ();
-   return builtin;
- }
- 
- /* Unpacks the elements of the vector in VALUE to scalars (bit field
-    references) in ELEMENTS.  */
- 
- void
- brig_function::unpack (tree value, tree_stl_vec &elements)
- {
-   size_t vec_size = int_size_in_bytes (TREE_TYPE (value));
-   size_t element_size
-     = int_size_in_bytes (TREE_TYPE (TREE_TYPE (value))) * BITS_PER_UNIT;
-   size_t element_count
-     = vec_size * BITS_PER_UNIT / element_size;
- 
-   tree input_element_type = TREE_TYPE (TREE_TYPE (value));
- 
-   value = add_temp_var ("unpack_input", value);
- 
-   for (size_t i = 0; i < element_count; ++i)
-     {
-       tree element
- 	= build3 (BIT_FIELD_REF, input_element_type, value,
- 		  TYPE_SIZE (input_element_type),
- 		  bitsize_int(i * element_size));
- 
-       element = add_temp_var ("scalar", element);
-       elements.push_back (element);
-     }
- }
- 
- /* Pack the elements of the scalars in ELEMENTS to the returned vector.  */
- 
- tree
- brig_function::pack (tree_stl_vec &elements)
- {
-   size_t element_count = elements.size ();
- 
-   gcc_assert (element_count > 1);
- 
-   tree output_element_type = TREE_TYPE (elements.at (0));
- 
-   vec<constructor_elt, va_gc> *constructor_vals = NULL;
-   for (size_t i = 0; i < element_count; ++i)
-     CONSTRUCTOR_APPEND_ELT (constructor_vals, NULL_TREE, elements.at (i));
- 
-   tree vec_type = build_vector_type (output_element_type, element_count);
- 
-   /* build_constructor creates a vector type which is not a vector_cst
-      that requires compile time constant elements.  */
-   tree vec = build_constructor (vec_type, constructor_vals);
- 
-   /* Add a temp variable for readability.  */
-   tree tmp_var = create_tmp_var (vec_type, "vec_out");
-   tree vec_tmp_assign = build2 (MODIFY_EXPR, TREE_TYPE (tmp_var), tmp_var, vec);
-   append_statement (vec_tmp_assign);
-   return tmp_var;
- }
- 
- /* Returns true in case the given opcode needs to know about work-item context
-    data.  In such case the context data is passed as a pointer to a work-item
-    context object, as the last argument in the builtin call.  */
- 
- bool
- brig_function::needs_workitem_context_data
- (BrigOpcode16_t brig_opcode)
- {
-   switch (brig_opcode)
-     {
-     case BRIG_OPCODE_WORKITEMABSID:
-     case BRIG_OPCODE_WORKITEMFLATABSID:
-     case BRIG_OPCODE_WORKITEMFLATID:
-     case BRIG_OPCODE_CURRENTWORKITEMFLATID:
-     case BRIG_OPCODE_WORKITEMID:
-     case BRIG_OPCODE_WORKGROUPID:
-     case BRIG_OPCODE_WORKGROUPSIZE:
-     case BRIG_OPCODE_CURRENTWORKGROUPSIZE:
-     case BRIG_OPCODE_GRIDGROUPS:
-     case BRIG_OPCODE_GRIDSIZE:
-     case BRIG_OPCODE_DIM:
-     case BRIG_OPCODE_PACKETID:
-     case BRIG_OPCODE_PACKETCOMPLETIONSIG:
-     case BRIG_OPCODE_BARRIER:
-     case BRIG_OPCODE_WAVEBARRIER:
-     case BRIG_OPCODE_ARRIVEFBAR:
-     case BRIG_OPCODE_INITFBAR:
-     case BRIG_OPCODE_JOINFBAR:
-     case BRIG_OPCODE_LEAVEFBAR:
-     case BRIG_OPCODE_RELEASEFBAR:
-     case BRIG_OPCODE_WAITFBAR:
-     case BRIG_OPCODE_CUID:
-     case BRIG_OPCODE_MAXCUID:
-     case BRIG_OPCODE_DEBUGTRAP:
-     case BRIG_OPCODE_GROUPBASEPTR:
-     case BRIG_OPCODE_KERNARGBASEPTR:
-     case BRIG_OPCODE_ALLOCA:
-       return true;
-     default:
-       return false;
-     };
- }
- 
- /* Appends and returns a new temp variable and an accompanying assignment
-    statement that stores the value of the given EXPR and has the given NAME.  */
- 
- tree
- brig_function::add_temp_var (std::string name, tree expr)
- {
-   tree temp_var = create_tmp_var (TREE_TYPE (expr), name.c_str ());
-   tree assign = build2 (MODIFY_EXPR, TREE_TYPE (temp_var), temp_var, expr);
-   append_statement (assign);
-   return temp_var;
- }
- 
- /* Returns the integer constant value of the given node.
-    If it's a cast, looks into the source of the cast.  */
- 
- HOST_WIDE_INT
- brig_function::int_constant_value (tree node)
- {
-   tree n = node;
-   if (TREE_CODE (n) == VIEW_CONVERT_EXPR)
-     n = TREE_OPERAND (n, 0);
-   return int_cst_value (n);
- }
- 
- /* Returns the tree code that should be used to implement the given
-    HSA instruction opcode (BRIG_OPCODE) for the given type of instruction
-    (BRIG_TYPE).  In case the opcode cannot be mapped to a TREE node directly,
-    returns TREE_LIST (if it can be emulated with a simple chain of tree
-    nodes) or CALL_EXPR if the opcode should be implemented using a builtin
-    call.  */
- 
- tree_code
- brig_function::get_tree_code_for_hsa_opcode
-   (BrigOpcode16_t brig_opcode, BrigType16_t brig_type)
- {
-   BrigType16_t brig_inner_type = brig_type & BRIG_TYPE_BASE_MASK;
-   switch (brig_opcode)
-     {
-     case BRIG_OPCODE_NOP:
-       return NOP_EXPR;
-     case BRIG_OPCODE_ADD:
-       return PLUS_EXPR;
-     case BRIG_OPCODE_CMOV:
-       if (brig_inner_type == brig_type)
- 	return COND_EXPR;
-       else
- 	return VEC_COND_EXPR;
-     case BRIG_OPCODE_SUB:
-       return MINUS_EXPR;
-     case BRIG_OPCODE_MUL:
-     case BRIG_OPCODE_MUL24:
-       return MULT_EXPR;
-     case BRIG_OPCODE_MULHI:
-     case BRIG_OPCODE_MUL24HI:
-       return MULT_HIGHPART_EXPR;
-     case BRIG_OPCODE_DIV:
-       if (gccbrig_is_float_type (brig_inner_type))
- 	return RDIV_EXPR;
-       else
- 	return TRUNC_DIV_EXPR;
-     case BRIG_OPCODE_NEG:
-       return NEGATE_EXPR;
-     case BRIG_OPCODE_MIN:
-       if (gccbrig_is_float_type (brig_inner_type))
- 	return CALL_EXPR;
-       else
- 	return MIN_EXPR;
-     case BRIG_OPCODE_MAX:
-       if (gccbrig_is_float_type (brig_inner_type))
- 	return CALL_EXPR;
-       else
- 	return MAX_EXPR;
-     case BRIG_OPCODE_ABS:
-       return ABS_EXPR;
-     case BRIG_OPCODE_SHL:
-       return LSHIFT_EXPR;
-     case BRIG_OPCODE_SHR:
-       return RSHIFT_EXPR;
-     case BRIG_OPCODE_OR:
-       return BIT_IOR_EXPR;
-     case BRIG_OPCODE_XOR:
-       return BIT_XOR_EXPR;
-     case BRIG_OPCODE_AND:
-       return BIT_AND_EXPR;
-     case BRIG_OPCODE_NOT:
-       return BIT_NOT_EXPR;
-     case BRIG_OPCODE_RET:
-       return RETURN_EXPR;
-     case BRIG_OPCODE_MOV:
-     case BRIG_OPCODE_LDF:
-       return MODIFY_EXPR;
-     case BRIG_OPCODE_LD:
-     case BRIG_OPCODE_ST:
-       return MEM_REF;
-     case BRIG_OPCODE_BR:
-       return GOTO_EXPR;
-     case BRIG_OPCODE_REM:
-       if (brig_type == BRIG_TYPE_U64 || brig_type == BRIG_TYPE_U32)
- 	return TRUNC_MOD_EXPR;
-       else
- 	return CALL_EXPR;
-     case BRIG_OPCODE_NRCP:
-     case BRIG_OPCODE_NRSQRT:
-       /* Implement as 1/f (x).  gcc should pattern detect that and
- 	 use a native instruction, if available, for it.  */
-       return TREE_LIST;
-     case BRIG_OPCODE_FMA:
-     case BRIG_OPCODE_FLOOR:
-     case BRIG_OPCODE_CEIL:
-     case BRIG_OPCODE_SQRT:
-     case BRIG_OPCODE_NSQRT:
-     case BRIG_OPCODE_RINT:
-     case BRIG_OPCODE_TRUNC:
-     case BRIG_OPCODE_POPCOUNT:
-     case BRIG_OPCODE_COPYSIGN:
-     case BRIG_OPCODE_NCOS:
-     case BRIG_OPCODE_NSIN:
-     case BRIG_OPCODE_NLOG2:
-     case BRIG_OPCODE_NEXP2:
-     case BRIG_OPCODE_NFMA:
-       /* Class has type B1 regardless of the float type, thus
- 	 the below builtin map search cannot find it.  */
-     case BRIG_OPCODE_CLASS:
-     case BRIG_OPCODE_WORKITEMABSID:
-       return CALL_EXPR;
-     default:
- 
-       /* Some BRIG opcodes can use the same builtins for unsigned and
- 	 signed types.  Force these cases to unsigned types.
-       */
- 
-       if (brig_opcode == BRIG_OPCODE_BORROW
- 	  || brig_opcode == BRIG_OPCODE_CARRY
- 	  || brig_opcode == BRIG_OPCODE_LASTBIT
- 	  || brig_opcode == BRIG_OPCODE_BITINSERT)
- 	{
- 	  if (brig_type == BRIG_TYPE_S32)
- 	    brig_type = BRIG_TYPE_U32;
- 	  else if (brig_type == BRIG_TYPE_S64)
- 	    brig_type = BRIG_TYPE_U64;
- 	}
- 
- 
-       builtin_map::const_iterator i
- 	= s_custom_builtins.find (std::make_pair (brig_opcode, brig_type));
-       if (i != s_custom_builtins.end ())
- 	return CALL_EXPR;
-       else if (s_custom_builtins.find
- 	       (std::make_pair (brig_opcode, brig_inner_type))
- 	       != s_custom_builtins.end ())
- 	return CALL_EXPR;
-       if (brig_inner_type == BRIG_TYPE_F16
- 	  && s_custom_builtins.find
- 	  (std::make_pair (brig_opcode, BRIG_TYPE_F32))
- 	  != s_custom_builtins.end ())
- 	return CALL_EXPR;
-       break;
-     }
-   return TREE_LIST; /* Emulate using a chain of nodes.  */
- }
- 
- /* Inform of an update to the REG_VAR.  */
- 
- void
- brig_function::add_reg_var_update (tree reg_var, tree var)
- {
-   if (var == m_abs_id_vars[0] || var == m_abs_id_vars[1]
-       || var == m_abs_id_vars[2] || var == m_local_id_vars[0]
-       || var == m_local_id_vars[1] || var == m_local_id_vars[2])
-     m_id_val_defs [reg_var] = var;
-   else
-     {
-       /* Possible overwrite of an ID value.  */
- 
-       id_val_map::iterator i = m_id_val_defs.find (reg_var);
-       if (i != m_id_val_defs.end())
- 	m_id_val_defs.erase (i);
-     }
- }
- 
- /* If the REG_VAR is known to contain an ID value at this point in
-    the basic block, return true.  */
- 
- bool
- brig_function::is_id_val (tree reg_var)
- {
-   id_val_map::iterator i = m_id_val_defs.find (reg_var);
-   return i != m_id_val_defs.end();
- }
- 
- /* Return an ID value for the given REG_VAR if its known to contain
-    one at this point in the BB, NULL_TREE otherwise.  */
- 
- tree
- brig_function::id_val (tree reg_var)
- {
-   id_val_map::iterator i = m_id_val_defs.find (reg_var);
-   if (i != m_id_val_defs.end())
-     return (*i).second;
-   else
-     return NULL_TREE;
- }
- 
- /* Informs of starting a new basic block.  Called when generating
-    a label, a call, a jump, or a return.  */
- 
- void
- brig_function::start_new_bb ()
- {
-   m_id_val_defs.clear ();
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-function.h gcc-12.1.0/gcc/brig/brigfrontend/brig-function.h
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-function.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-function.h	Thu Jan  1 00:00:00 1970
***************
*** 1,267 ****
- /* brig-function.h -- declaration of brig_function class.
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #ifndef BRIG_FUNCTION_H
- #define BRIG_FUNCTION_H
- 
- #include "config.h"
- #include "system.h"
- #include "ansidecl.h"
- #include "coretypes.h"
- #include "opts.h"
- #include "tree.h"
- #include "tree-iterator.h"
- #include "hsa-brig-format.h"
- #include "brig-util.h"
- 
- #include <map>
- #include <string>
- #include <vector>
- #include <set>
- 
- #include "phsa.h"
- 
- class brig_to_generic;
- 
- typedef std::map<std::string, tree> label_index;
- typedef std::map<const BrigDirectiveVariable *, tree> variable_index;
- typedef std::vector<tree> tree_stl_vec;
- 
- /* Holds data for the currently built GENERIC function.  */
- 
- class brig_function
- {
- public:
-   typedef std::map<const BrigDirectiveVariable *, size_t> var_offset_table;
- 
- private:
-   struct reg_decl_index_entry
-   {
-     tree m_var_decl;
-   };
- 
- public:
-   brig_function (const BrigDirectiveExecutable *exec, brig_to_generic *parent);
-   ~brig_function ();
- 
-   tree arg_variable (const BrigDirectiveVariable *var) const;
-   void add_arg_variable (const BrigDirectiveVariable *brigVar, tree treeDecl);
- 
-   void append_kernel_arg (const BrigDirectiveVariable *var, size_t size,
- 			  size_t alignment);
- 
-   size_t kernel_arg_offset (const BrigDirectiveVariable *var) const;
- 
-   void add_id_variables ();
- 
-   tree label (const std::string &name);
- 
-   tree add_local_variable (std::string name, tree type);
- 
-   size_t group_variable_segment_offset (const std::string &name) const;
- 
-   bool has_group_variable (const std::string &name) const;
- 
-   size_t group_segment_size () const;
- 
-   tree get_m_var_declfor_reg (const BrigOperandRegister *reg);
- 
-   bool convert_to_wg_function ();
- 
-   void add_wi_loop (int dim, tree_stmt_iterator *header_entry,
- 		    tree_stmt_iterator *branch_after);
- 
-   tree emit_metadata (tree stmt_list);
-   tree emit_launcher_and_metadata ();
- 
-   tree append_statement (tree stmt);
- 
-   void create_alloca_frame ();
- 
-   void finish ();
-   void finish_kernel ();
- 
-   void append_return_stmt ();
- 
-   bool has_function_scope_var (const BrigBase* var) const;
- 
-   void analyze_calls ();
- 
-   tree expand_builtin (BrigOpcode16_t brig_opcode, tree_stl_vec &operands);
- 
-   tree expand_or_call_builtin (BrigOpcode16_t brig_opcode,
- 			       BrigType16_t brig_type, tree arith_type,
- 			       tree_stl_vec &operands);
-   bool can_expand_builtin (BrigOpcode16_t brig_opcode) const;
- 
-   tree get_builtin_for_hsa_opcode (tree type, BrigOpcode16_t brig_opcode,
- 				   BrigType16_t brig_type) const;
- 
-   void unpack (tree value, tree_stl_vec &elements);
-   tree pack (tree_stl_vec &elements);
-   tree add_temp_var (std::string name, tree expr);
- 
-   static bool needs_workitem_context_data (BrigOpcode16_t brig_opcode);
-   static HOST_WIDE_INT int_constant_value (tree node);
-   static tree_code get_tree_code_for_hsa_opcode (BrigOpcode16_t brig_opcode,
- 						 BrigType16_t brig_type);
- 
-   void start_new_bb ();
-   void add_reg_var_update (tree reg_var, tree val);
-   bool is_id_val (tree reg_var);
-   tree id_val (tree reg_var);
- 
-   const BrigDirectiveExecutable *m_brig_def;
- 
-   bool m_is_kernel;
-   bool m_is_finished;
-   std::string m_name;
-   tree m_current_bind_expr;
-   tree m_func_decl;
-   tree m_entry_label_stmt;
-   tree m_exit_label;
- 
-   /* The __context function argument.  */
-   tree m_context_arg;
- 
-   /* The __group_base_ptr argument in the current function.
-      Points to the start of the group segment for the work-group.  */
-   tree m_group_base_arg;
- 
-    /* The __group_local_offset_ptr argument in the current function.  It
-       contains the offset related to the group_base_ptr where the function's
-       local area for group variables resides.  */
-   tree m_group_local_offset_arg;
- 
-   /* The __private_base_ptr argument in the current function.
-      Points to the start of the private segment.  */
-   tree m_private_base_arg;
- 
-   /* The return value variable for the current function.  */
-   tree m_ret_value;
- 
-   /* The offsets of the kernel arguments in the __arg blob
-      pointing to the kernel argument space.  */
-   size_t m_next_kernarg_offset;
- 
-   /* The largest kernel argument variable alignment.  */
-   size_t m_kernarg_max_align;
- 
-   var_offset_table m_kernarg_offsets;
- 
-   /* Argument variables in the currently handled binding expression
-      (argument segment).  */
-   variable_index m_arg_variables;
- 
-   /* The brig variable for the function return value.  */
-   const BrigDirectiveVariable *m_ret_value_brig_var;
- 
-   /* The function local temporary variable for the return value.  */
-   tree m_ret_temp;
- 
-   /* Labels in the current function are collected here so we can refer
-      to them from jumps before they have been placed to the function.  */
-   label_index m_label_index;
- 
-   /* If the kernel contains at least one barrier, this is set to true.  */
-   bool m_has_barriers;
- 
-   /* True if the function has at least one alloca instruction.  */
-   bool m_has_allocas;
- 
-   /* If the kernel contains at least one function call that _may_
-      contain a barrier call, this is set to true.  */
-   bool m_has_function_calls_with_barriers;
- 
-   /* Set to true after this function has been analyzed for barrier and
-      dispatch packet instruction usage in the final call graph analysis.  */
-   bool m_calls_analyzed;
- 
-   /* True in case the function was successfully converted to a WG function.  */
-   bool m_is_wg_function;
- 
-   /* Work-item ID related variables are cached in the entry of the kernel
-      function in order to use them directly in address computations, leading
-      to more efficient optimizations.  The references to the local variables
-      are stored here.  */
-   tree m_local_id_vars[3];
-   tree m_cur_wg_size_vars[3];
-   tree m_wg_id_vars[3];
-   tree m_wg_size_vars[3];
-   tree m_grid_size_vars[3];
-   /* Explicitly computed WG base for the absolute IDs which is used
-      as the initial value when looping that dimension.   We update
-      the abs id with ++ to make it easy for the vectorizer.  */
-   tree m_abs_id_base_vars[3];
-   tree m_abs_id_vars[3];
- 
-   /* Set to true in case the kernel contains at least one dispatch packet
-      (work-item ID-related) builtin call that could not be expanded to
-      tree nodes.  */
-   bool m_has_unexpanded_dp_builtins;
- 
-   /* Points to the instruction after which the real kernel code starts.
-      Usually points to the last WI ID variable initialization statement.  */
-   tree_stmt_iterator m_kernel_entry;
- 
-   /* True if we are currently generating the contents of an arg block.  */
-   bool m_generating_arg_block;
- 
-   /* A collection of function scope variables seen so far for resolving
-      variable references vs. module scope declarations.  */
-   std::set<const BrigBase*> m_function_scope_vars;
- 
-   /* The functions called by this function.  */
-   std::vector<tree> m_called_functions;
- 
-   /* Stores the kernel scope group variable offsets if the function is
-      a kernel.  */
-   group_variable_offset_index m_local_group_variables;
- 
-   brig_to_generic *m_parent;
-   /* The metadata of the function that should be stored with the binary and
-      passed to the HSA runtime:  */
-   phsa_descriptor m_descriptor;
- 
- private:
- 
-   tree get_tree_type_for_hsa_reg (const BrigOperandRegister *reg) const;
- 
-   /* Bookkeeping for the different HSA registers and their tree declarations
-      for the currently generated function.  */
-   reg_decl_index_entry *m_regs[BRIG_2_TREE_HSAIL_TOTAL_REG_COUNT];
- 
-   /* Map for keeping book reads of ID variables, which can be propagated
-      to uses in address expressions to produce cleaner indexing functions
-      with unnecessary casts stripped off, etc.  */
-   typedef std::map<tree, tree> id_val_map;
- 
-   /* Keeps track of ID values alive in registers in the currently
-      processed BB.  */
-   id_val_map m_id_val_defs;
- 
-   /* HSAIL-specific builtin functions not yet integrated to gcc.  */
-   typedef std::map<std::pair<BrigOpcode16_t, BrigType16_t>, tree> builtin_map;
- 
-   static builtin_map s_custom_builtins;
- };
- 
- #endif
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-inst-mod-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-inst-mod-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-inst-mod-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-inst-mod-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,58 ****
- /* brig-inst-mod-handler.cc -- brig rounding moded instruction handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- 
- #include "gimple-expr.h"
- #include "errors.h"
- 
- size_t
- brig_inst_mod_handler::generate (const BrigBase *base)
- {
-   brig_basic_inst_handler basic_handler (m_parent);
-   return basic_handler (base);
- }
- 
- const BrigAluModifier8_t *
- brig_inst_mod_handler::modifier (const BrigBase *base) const
- {
-   const BrigInstMod *inst = (const BrigInstMod *) base;
-   return &inst->modifier;
- }
- 
- const BrigRound8_t *
- brig_inst_mod_handler::round (const BrigBase *base) const
- {
-   const BrigInstMod *inst = (const BrigInstMod *) base;
-   return &inst->round;
- }
- 
- /* This used to inject fesetround () calls to control the rounding mode of the
-    actual executed floating point operation.  It turned out that supporting
-    conversions using fesetround calls won't work in gcc due to it not being
-    able to restrict code motions across calls at the moment.  This
-    functionality is therefore disabled for now until a better solution is
-    found or if fesetround () is fixed in gcc.  */
- size_t
- brig_inst_mod_handler::operator () (const BrigBase *base)
- {
-   return generate (base);
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-label-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-label-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-label-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-label-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,40 ****
- /* brig-label-handler.cc -- brig label directive handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- 
- size_t
- brig_directive_label_handler::operator () (const BrigBase *base)
- {
-   const BrigDirectiveLabel *brig_label = (const BrigDirectiveLabel *) base;
- 
-   const BrigData *label_name = m_parent.get_brig_data_entry (brig_label->name);
- 
-   std::string label_str ((const char *) (label_name->bytes),
- 			 label_name->byteCount);
- 
-   m_parent.m_cf->start_new_bb ();
- 
-   tree stmt = build_stmt (LABEL_EXPR, m_parent.m_cf->label (label_str));
-   m_parent.m_cf->append_statement (stmt);
- 
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-lane-inst-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-lane-inst-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-lane-inst-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-lane-inst-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,85 ****
- /* brig-lane-inst-handler.cc -- brig lane instruction handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- #include "errors.h"
- #include "diagnostic-core.h"
- #include "brig-util.h"
- 
- brig_lane_inst_handler::brig_lane_inst_handler (brig_to_generic &parent)
-   : brig_code_entry_handler (parent)
- {
- }
- 
- size_t
- brig_lane_inst_handler::operator () (const BrigBase *base)
- {
-   const BrigInstLane &inst = *(const BrigInstLane *) base;
-   tree_stl_vec operands = build_operands (inst.base);
- 
-   tree expr = NULL_TREE;
-   if (inst.base.opcode == BRIG_OPCODE_ACTIVELANECOUNT)
-     {
-       /* Because we are fixed to single WI per wave, it's enough to
- 	 just check the src value of the single work item itself.  */
-       expr = build2 (NE_EXPR, uint32_type_node,
- 		     build_zero_cst (uint32_type_node), operands[1]);
-     }
-   else if (inst.base.opcode == BRIG_OPCODE_ACTIVELANEID)
-     {
-       expr = build_zero_cst (uint32_type_node);
-     }
-   else if (inst.base.opcode == BRIG_OPCODE_ACTIVELANEMASK)
-     {
-       tree u64_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_U64);
-       tree zero_cst = build_zero_cst (u64_type);
-       expr = build2 (NE_EXPR, u64_type, zero_cst, operands[1]);
- 
-       tree_stl_vec elements;
-       elements.push_back (expr);
-       elements.push_back (zero_cst);
-       elements.push_back (zero_cst);
-       elements.push_back (zero_cst);
- 
-       expr = m_parent.m_cf->pack (elements);
-     }
-   else if (inst.base.opcode == BRIG_OPCODE_ACTIVELANEPERMUTE)
-     {
-       tree src = operands[1];
-       tree identity = operands[3];
-       tree use_identity = operands[4];
- 
-       /* When WAVESIZE is 1, we either select the src of the work-item
- 	 itself or 'identity' in case use_identity is 1.  */
- 
-       tree cmp = build2 (EQ_EXPR, uint32_type_node,
- 			 build_int_cstu (TREE_TYPE (use_identity), 1),
- 			 use_identity);
- 
-       expr = build3 (COND_EXPR, TREE_TYPE (src), cmp, identity, src);
-     }
-   else
-     gcc_unreachable ();
- 
-   build_output_assignment (inst.base, operands[0], expr);
- 
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-machine.c gcc-12.1.0/gcc/brig/brigfrontend/brig-machine.c
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-machine.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-machine.c	Thu Jan  1 00:00:00 1970
***************
*** 1,44 ****
- /* brig-machine.c -- gccbrig machine queries
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "brig-machine.h"
- 
- /* Return the numerical address space id for the segment in the current
-    target.  Currently a dummy function that always returns 0, serves as
-    a placeholder for multi-AS machines.  */
- 
- unsigned
- gccbrig_get_target_addr_space_id (BrigSegment8_t)
- {
-   return 0;
- }
- 
- /* Return the WAVESIZE for the current target.  For now a dummy placeholder
-    returning always 1.  */
- 
- unsigned
- gccbrig_get_target_wavesize ()
- {
-   return 1;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-machine.h gcc-12.1.0/gcc/brig/brigfrontend/brig-machine.h
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-machine.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-machine.h	Thu Jan  1 00:00:00 1970
***************
*** 1,33 ****
- /* brig-machine.h -- gccbrig machine queries
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #ifndef GCC_BRIG_MACHINE_H
- #define GCC_BRIG_MACHINE_H
- 
- #include "hsa-brig-format.h"
- 
- /* These functions should be eventually converted to machine info queries and
-    redefined at backends.  At that point make these functions delegate to
-    those.  */
- 
- unsigned gccbrig_get_target_addr_space_id (BrigSegment8_t segment);
- 
- unsigned gccbrig_get_target_wavesize ();
- 
- #endif
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-mem-inst-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-mem-inst-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-mem-inst-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-mem-inst-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,178 ****
- /* brig-mem-inst-handler.cc -- brig memory inst handler
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- 
- #include "errors.h"
- #include "brig-util.h"
- #include "gimple-expr.h"
- #include "print-tree.h"
- #include "tree-pretty-print.h"
- #include "convert.h"
- #include "diagnostic-core.h"
- 
- tree
- brig_mem_inst_handler::build_mem_access (const BrigInstBase *brig_inst,
- 					 tree addr, tree data)
- {
-   bool is_load = brig_inst->opcode == BRIG_OPCODE_LD;
-   bool is_store = brig_inst->opcode == BRIG_OPCODE_ST;
- 
-   if (!is_load && !is_store)
-     gcc_unreachable ();
- 
-   tree instr_type = gccbrig_tree_type_for_hsa_type (brig_inst->type);
- 
-   /* In case of {ld,st}_v{2,4}. Note: since 'register' variables may
-      be any type, even a vector type, we distinguish the registers
-      from operand lists by checking for constructor nodes (which
-      operand lists are represented as).  */
-   if (VECTOR_TYPE_P (TREE_TYPE (data)) && TREE_CODE (data) == CONSTRUCTOR)
-     instr_type = TREE_TYPE (data);
- 
-   tree ptype = build_pointer_type (instr_type);
- 
-   /* The HSAIL mem instructions are unaligned by default.
-      TODO: exploit the align modifier, it should lead to faster code.
-   */
-   tree unaligned_type = build_aligned_type (instr_type, 8);
- 
-   /* Create a mem ref from the previous result, without offset.  */
-   tree mem_ref
-     = build2 (MEM_REF, unaligned_type, addr, build_int_cst (ptype, 0));
- 
-   if (is_load)
-     {
-       /* Add a temporary variable so there won't be multiple
- 	 reads in case of vector unpack.  */
-       mem_ref = m_parent.m_cf->add_temp_var ("mem_read", mem_ref);
-       return build_output_assignment (*brig_inst, data, mem_ref);
-     }
-   else
-     {
-       tree stmt = build2 (MODIFY_EXPR, TREE_TYPE (mem_ref), mem_ref, data);
-       return m_parent.m_cf->append_statement (stmt);
-     }
-   return mem_ref;
- }
- 
- size_t
- brig_mem_inst_handler::operator () (const BrigBase *base)
- {
-   const BrigInstBase *brig_inst
-     = (const BrigInstBase *) &((const BrigInstBasic *) base)->base;
- 
-   if (brig_inst->opcode == BRIG_OPCODE_ALLOCA)
-     {
-       tree_stl_vec operands = build_operands (*brig_inst);
-       size_t alignment = 1;
-       const BrigInstMem *mem_inst = (const BrigInstMem *) brig_inst;
-       if (mem_inst->align != BRIG_ALIGNMENT_NONE)
- 	{
- 	  alignment = 1 << (mem_inst->align - 1);
- 	}
- 
-       tree align_opr = build_int_cstu (size_type_node, alignment);
-       tree_stl_vec inputs;
-       inputs.push_back (operands[1]);
-       inputs.push_back (align_opr);
-       tree builtin_call
- 	= m_parent.m_cf->expand_or_call_builtin (BRIG_OPCODE_ALLOCA,
- 						 BRIG_TYPE_U32,
- 						 uint32_type_node, inputs);
-       build_output_assignment (*brig_inst, operands[0], builtin_call);
-       m_parent.m_cf->m_has_allocas = true;
-       return base->byteCount;
-     }
- 
-   tree instr_type = gccbrig_tree_type_for_hsa_type (brig_inst->type);
- 
-   const BrigData *operand_entries
-     = m_parent.get_brig_data_entry (brig_inst->operands);
- 
-   uint32_t data_operand_offset;
-   memcpy (&data_operand_offset, &operand_entries->bytes, 4);
- 
-   const BrigBase *operand
-     = m_parent.get_brig_operand_entry (data_operand_offset);
- 
-   const BrigData *operandData = NULL;
- 
-   bool is_store = brig_inst->opcode == BRIG_OPCODE_ST;
- 
-   bool is_three_element_vector_access
-     = operand->kind == BRIG_KIND_OPERAND_OPERAND_LIST
-       && (operandData = m_parent.get_brig_data_entry
- 	  (((const BrigOperandOperandList *) operand)->elements))
-       && operandData->byteCount / 4 == 3;
- 
-   if (is_three_element_vector_access)
-     {
-       /* We need to scalarize the 3-element vector accesses here
- 	 because gcc assumes the GENERIC vector datatypes are of two exponent
- 	 size internally.  */
-       size_t bytes = operandData->byteCount;
-       const BrigOperandOffset32_t *operand_ptr
- 	= (const BrigOperandOffset32_t *) operandData->bytes;
- 
-       uint32_t addr_operand_offset;
-       memcpy (&addr_operand_offset, &operand_entries->bytes + 4, 4);
- 
-       const BrigOperandAddress *addr_operand
- 	= (const BrigOperandAddress *) m_parent.get_brig_operand_entry
- 	(addr_operand_offset);
- 
-       tree address_base = build_address_operand (*brig_inst, *addr_operand);
- 
-       uint32_t address_offset = 0;
-       while (bytes > 0)
- 	{
- 	  BrigOperandOffset32_t offset = *operand_ptr;
- 	  const BrigBase *operand_element
- 	    = m_parent.get_brig_operand_entry (offset);
- 	  tree data
- 	    = build_tree_operand (*brig_inst, *operand_element, instr_type);
- 
- 	  tree ptr_offset = build_int_cst (size_type_node, address_offset);
- 	  tree address = build2 (POINTER_PLUS_EXPR, TREE_TYPE (address_base),
- 				 address_base, ptr_offset);
- 
- 	  if (is_store && TREE_TYPE (data) != instr_type)
- 	    data = build_resize_convert_view (instr_type, data);
- 
- 	  build_mem_access (brig_inst, address, data);
- 
- 	  address_offset += int_size_in_bytes (instr_type);
- 	  ++operand_ptr;
- 	  bytes -= 4;
- 	}
-     }
-   else
-     {
-       tree_stl_vec operands = build_operands (*brig_inst);
- 
-       tree &data = operands.at (0);
-       tree &addr = operands.at (1);
-       build_mem_access (brig_inst, addr, data);
-     }
- 
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-module-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-module-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-module-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-module-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,41 ****
- /* brig-module-handler.cc -- brig module directive handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- #include "diagnostic-core.h"
- 
- size_t
- brig_directive_module_handler::operator () (const BrigBase *base)
- {
-   const BrigDirectiveModule* mod = (const BrigDirectiveModule*)base;
-   m_parent.m_module_name = m_parent.get_string (mod->name).substr (1);
-   if (mod->hsailMajor != 1 || mod->hsailMinor != 0)
-     fatal_error (UNKNOWN_LOCATION, PHSA_ERROR_PREFIX_INCOMPATIBLE_MODULE
- 		 "HSAIL version not supported. HSAIL 1.0 required.");
-   if (mod->machineModel != BRIG_MACHINE_LARGE)
-     fatal_error (UNKNOWN_LOCATION, PHSA_ERROR_PREFIX_INCOMPATIBLE_MODULE
- 		 "Only HSA 'large' machine model supported.");
-   /* Do not check for the profile as the runtime conformance suite tests
-      with 'full' profile BRIGs even though they don't use any full profile
-      features.  This allows us to run the conformance suite with the
-      BRIG FE.  */
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-queue-inst-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-queue-inst-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-queue-inst-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-queue-inst-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,93 ****
- /* brig-queue-inst-handler.cc -- brig user mode queue related instruction
-    handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include <sstream>
- 
- #include "brig-code-entry-handler.h"
- #include "brig-util.h"
- #include "convert.h"
- #include "tree-pretty-print.h"
- #include "errors.h"
- #include "diagnostic-core.h"
- #include "brig-builtins.h"
- 
- brig_queue_inst_handler::brig_queue_inst_handler (brig_to_generic &parent)
-   : brig_code_entry_handler (parent)
- {
- }
- 
- size_t
- brig_queue_inst_handler::operator () (const BrigBase *base)
- {
-   const BrigInstBase &inst_base = *(const BrigInstBase *) base;
- 
-   tree_stl_vec operands = build_operands (inst_base);
- 
-   if (inst_base.opcode == BRIG_OPCODE_LDQUEUEWRITEINDEX
-       || inst_base.opcode == BRIG_OPCODE_LDQUEUEREADINDEX)
-     {
-       tree builtin
- 	= inst_base.opcode == BRIG_OPCODE_LDQUEUEWRITEINDEX
- 	? builtin_decl_explicit (BUILT_IN_HSAIL_LDQUEUEWRITEINDEX)
- 	: builtin_decl_explicit (BUILT_IN_HSAIL_LDQUEUEREADINDEX);
- 
-       tree expr
- 	= call_builtin (builtin, 1, uint64_type_node,
- 			uint64_type_node, operands[1]);
-       build_output_assignment (inst_base, operands[0], expr);
-     }
-   else if (inst_base.opcode == BRIG_OPCODE_STQUEUEWRITEINDEX
- 	   || inst_base.opcode == BRIG_OPCODE_STQUEUEREADINDEX)
-     {
-       tree builtin
- 	= inst_base.opcode == BRIG_OPCODE_STQUEUEWRITEINDEX
- 	? builtin_decl_explicit (BUILT_IN_HSAIL_STQUEUEWRITEINDEX)
- 	: builtin_decl_explicit (BUILT_IN_HSAIL_STQUEUEREADINDEX);
- 
-       call_builtin (builtin, 2, void_type_node,
- 		    uint64_type_node, operands[0], uint64_type_node,
- 		    operands[1]);
-     }
-   else if (inst_base.opcode == BRIG_OPCODE_ADDQUEUEWRITEINDEX)
-     {
-       tree builtin = builtin_decl_explicit (BUILT_IN_HSAIL_ADDQUEUEWRITEINDEX);
- 
-       tree expr = call_builtin (builtin, 2,
- 				uint64_type_node, uint64_type_node, operands[1],
- 				uint64_type_node, operands[2]);
-       build_output_assignment (inst_base, operands[0], expr);
-     }
-   else if (inst_base.opcode == BRIG_OPCODE_CASQUEUEWRITEINDEX)
-     {
-       tree builtin = builtin_decl_explicit (BUILT_IN_HSAIL_CASQUEUEWRITEINDEX);
- 
-       tree expr
- 	= call_builtin (builtin, 3, uint64_type_node,
- 			uint64_type_node, operands[1], uint64_type_node,
- 			operands[2], uint64_type_node, operands[3]);
-       build_output_assignment (inst_base, operands[0], expr);
-     }
-   else
-     gcc_unreachable ();
- 
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-seg-inst-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-seg-inst-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-seg-inst-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-seg-inst-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,146 ****
- /* brig-seg-inst-handler.cc -- brig segment related instruction handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include <sstream>
- 
- #include "brig-code-entry-handler.h"
- #include "brig-util.h"
- #include "convert.h"
- #include "tree-pretty-print.h"
- #include "errors.h"
- #include "diagnostic-core.h"
- 
- brig_seg_inst_handler::brig_seg_inst_handler (brig_to_generic &parent)
-   : brig_code_entry_handler (parent)
- {
- }
- 
- size_t
- brig_seg_inst_handler::operator () (const BrigBase *base)
- {
-   const BrigInstBase &inst_base = *(const BrigInstBase *) base;
- 
-   std::vector<tree> operands = build_operands (inst_base);
- 
-   tree expr = NULL_TREE;
- 
-   if (inst_base.opcode == BRIG_OPCODE_STOF)
-     {
-       const BrigInstSegCvt &inst = *(const BrigInstSegCvt *) base;
- 
-       if (inst.segment == BRIG_SEGMENT_GROUP)
- 	expr = build2 (PLUS_EXPR, size_type_node,
- 		       convert_to_integer (size_type_node,
- 					   m_parent.m_cf->m_group_base_arg),
- 		       convert_to_integer (size_type_node, operands[1]));
-       else if (inst.segment == BRIG_SEGMENT_PRIVATE
- 	       || inst.segment == BRIG_SEGMENT_SPILL)
- 	expr = build2 (PLUS_EXPR, size_type_node,
- 		       convert_to_integer (size_type_node,
- 					   m_parent.m_cf->m_private_base_arg),
- 		       convert_to_integer (size_type_node, operands[1]));
-       else
-        gcc_unreachable ();
- 
-       if (!(inst.modifier & BRIG_SEG_CVT_NONULL))
- 	{
- 	  /* Need to convert the null value. -1 is used for 32b segments,
- 	     and 0 for flat/global.  */
- 	  tree cmp
- 	    = build2 (EQ_EXPR, uint32_type_node,
- 		      build_int_cstu (uint32_type_node, -1), operands[1]);
- 
- 	  tree null_check = build3 (COND_EXPR, size_type_node, cmp,
- 				    build_int_cstu (size_type_node, 0), expr);
- 
- 	  expr = null_check;
- 	}
-     }
-   else if (inst_base.opcode == BRIG_OPCODE_FTOS)
-     {
-       const BrigInstSegCvt &inst = *(const BrigInstSegCvt *) base;
- 
-       if (inst.segment == BRIG_SEGMENT_GROUP)
- 	expr = build2 (MINUS_EXPR, size_type_node,
- 		       convert_to_integer (size_type_node,
- 					   m_parent.m_cf->m_group_base_arg),
- 		       convert_to_integer (size_type_node, operands[1]));
-       else if (inst.segment == BRIG_SEGMENT_PRIVATE)
- 	expr = build2 (MINUS_EXPR, size_type_node,
- 		       convert_to_integer (size_type_node,
- 					   m_parent.m_cf->m_private_base_arg),
- 		       convert_to_integer (size_type_node, operands[1]));
-       else
- 	gcc_unreachable ();
- 
-       if (!(inst.modifier & BRIG_SEG_CVT_NONULL))
- 	{
- 	  /* Need to convert the null value. -1 is used for 32b segments,
- 	     and 0 for flat/global.  */
- 	  tree cmp = build2 (EQ_EXPR, size_type_node,
- 			     build_int_cstu (size_type_node, 0), operands[1]);
- 
- 	  tree null_check
- 	    = build3 (COND_EXPR, size_type_node, cmp,
- 		      build_int_cstu (uint32_type_node, -1), expr);
- 	  expr = null_check;
- 	}
-     }
-   else if (inst_base.opcode == BRIG_OPCODE_NULLPTR)
-     {
-       const BrigInstSeg &inst = *(const BrigInstSeg *) base;
-       if (inst.segment == BRIG_SEGMENT_GLOBAL
- 	  || inst.segment == BRIG_SEGMENT_FLAT
- 	  || inst.segment == BRIG_SEGMENT_READONLY)
- 	expr = build_int_cstu (uint64_type_node, 0);
-       else
- 	expr = build_int_cstu (uint32_type_node, -1);
-     }
-   else if (inst_base.opcode == BRIG_OPCODE_SEGMENTP)
-     {
-       const BrigInstSegCvt &inst = *(const BrigInstSegCvt *) base;
- 
-       tree builtin = NULL_TREE;
-       switch (inst.segment)
- 	{
- 	case BRIG_SEGMENT_GLOBAL:
- 	  builtin = builtin_decl_explicit (BUILT_IN_HSAIL_SEGMENTP_GLOBAL);
- 	  break;
- 	case BRIG_SEGMENT_GROUP:
- 	  builtin = builtin_decl_explicit (BUILT_IN_HSAIL_SEGMENTP_GROUP);
- 	  break;
- 	case BRIG_SEGMENT_PRIVATE:
- 	  builtin = builtin_decl_explicit (BUILT_IN_HSAIL_SEGMENTP_PRIVATE);
- 	  break;
- 	default:
- 	  gcc_unreachable ();
- 	}
- 
-       expr = call_builtin (builtin, 2,
- 			   uint32_type_node, uint64_type_node, operands[1],
- 			   ptr_type_node, m_parent.m_cf->m_context_arg);
-     }
-   else
-     gcc_unreachable ();
- 
-   build_output_assignment (inst_base, operands[0], expr);
-   return base->byteCount;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-signal-inst-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-signal-inst-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-signal-inst-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-signal-inst-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,42 ****
- /* brig-signal-inst-handler.cc -- brig signal instruction handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include <sstream>
- 
- #include "brig-code-entry-handler.h"
- #include "brig-util.h"
- #include "fold-const.h"
- #include "diagnostic.h"
- #include "tree-pretty-print.h"
- #include "print-tree.h"
- #include "convert.h"
- #include "langhooks.h"
- #include "gimple-expr.h"
- 
- size_t
- brig_signal_inst_handler::operator () (const BrigBase *base)
- {
-   const BrigInstSignal *inst = (const BrigInstSignal *) base;
-   BrigAtomicOperation8_t atomic_opcode;
-   atomic_opcode = inst->signalOperation;
- 
-   return generate_tree (inst->base, atomic_opcode);
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-to-generic.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-to-generic.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-to-generic.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-to-generic.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,1045 ****
- /* brig2tree.cc -- brig to gcc generic/gimple tree conversion
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include <cassert>
- #include <iostream>
- #include <iomanip>
- #include <sstream>
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "target.h"
- #include "function.h"
- #include "brig-to-generic.h"
- #include "stringpool.h"
- #include "tree-iterator.h"
- #include "toplev.h"
- #include "gimplify.h"
- #include "gimple-expr.h"
- #include "print-tree.h"
- #include "hsa-brig-format.h"
- #include "stor-layout.h"
- #include "diagnostic-core.h"
- #include "brig-code-entry-handler.h"
- #include "brig-machine.h"
- #include "brig-util.h"
- #include "phsa.h"
- #include "tree-pretty-print.h"
- #include "dumpfile.h"
- #include "profile-count.h"
- #include "tree-cfg.h"
- #include "errors.h"
- #include "fold-const.h"
- #include "cgraph.h"
- #include "dumpfile.h"
- #include "tree-pretty-print.h"
- #include "attribs.h"
- 
- extern int gccbrig_verbose;
- 
- tree brig_to_generic::s_fp16_type;
- tree brig_to_generic::s_fp32_type;
- tree brig_to_generic::s_fp64_type;
- 
- brig_to_generic::brig_to_generic ()
-   : m_cf (NULL), m_analyzing (true), m_total_group_segment_usage (0),
-     m_brig (NULL), m_next_private_offset (0)
- {
-   m_globals = NULL_TREE;
- 
-   /* Initialize the basic REAL types.
-      This doesn't work straight away because most of the targets
-      do not support fp16 natively.  Let's by default convert
-      to fp32 and back before and after each instruction (handle it as
-      a storage format only), and later add an optimization pass
-      that removes the extra converts (in case of multiple fp16 ops
-      in a row).  */
-   s_fp16_type = make_node (REAL_TYPE);
-   TYPE_PRECISION (s_fp16_type) = 16;
-   TYPE_SIZE (s_fp16_type) = bitsize_int (16);
-   TYPE_SIZE_UNIT (s_fp16_type) = size_int (2);
-   SET_TYPE_ALIGN (s_fp16_type, 16);
-   layout_type (s_fp16_type);
- 
-   s_fp32_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_F32);
-   s_fp64_type = gccbrig_tree_type_for_hsa_type (BRIG_TYPE_F64);
- 
-   /* TODO: (machine)query the preferred rounding mode that is set by
-      the machine by default.  This can be redefined by each BRIG module
-      header.  */
-   m_default_float_rounding_mode = BRIG_ROUND_FLOAT_ZERO;
- 
-   m_dump_file = dump_begin (TDI_original, &m_dump_flags);
- }
- 
- class unimplemented_entry_handler : public brig_code_entry_handler
- {
- public:
-   unimplemented_entry_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t
-   operator () (const BrigBase *base)
-   {
-     gcc_unreachable ();
-     return base->byteCount;
-   }
- };
- 
- /* Handler for entries that can be (and are) safely skipped for the purposes
-    of GENERIC generation.  */
- 
- class skipped_entry_handler : public brig_code_entry_handler
- {
- public:
-   skipped_entry_handler (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t
-   operator () (const BrigBase *base)
-   {
-     return base->byteCount;
-   }
- };
- 
- class brig_reg_use_analyzer : public brig_code_entry_handler
- {
- public:
-   brig_reg_use_analyzer (brig_to_generic &parent)
-     : brig_code_entry_handler (parent)
-   {
-   }
- 
-   size_t
-   operator () (const BrigBase *base)
-   {
-     const BrigInstBase *brig_inst = (const BrigInstBase *) base;
-     analyze_operands (*brig_inst);
-     return base->byteCount;
-   }
- 
- };
- 
- /* Helper struct for pairing a BrigKind and a BrigCodeEntryHandler that
-    should handle its data.  */
- 
- struct code_entry_handler_info
- {
-   BrigKind kind;
-   brig_code_entry_handler *handler;
- };
- 
- 
- /* Finds the BRIG file sections in the currently processed file.  */
- 
- void
- brig_to_generic::find_brig_sections ()
- {
-   m_data = m_code = m_operand = NULL;
-   const BrigModuleHeader *mheader = (const BrigModuleHeader *) m_brig;
- 
-   /* Find the positions of the different sections.  */
-   for (uint32_t sec = 0; sec < mheader->sectionCount; ++sec)
-     {
-       uint64_t offset
- 	= ((const uint64_t *) (m_brig + mheader->sectionIndex))[sec];
- 
-       const BrigSectionHeader *section_header
- 	= (const BrigSectionHeader *) (m_brig + offset);
- 
-       std::string name ((const char *) (&section_header->name),
- 			section_header->nameLength);
- 
-       if (sec == BRIG_SECTION_INDEX_DATA && name == "hsa_data")
- 	{
- 	  m_data = (const char *) section_header;
- 	  m_data_size = section_header->byteCount;
- 	}
-       else if (sec == BRIG_SECTION_INDEX_CODE && name == "hsa_code")
- 	{
- 	  m_code = (const char *) section_header;
- 	  m_code_size = section_header->byteCount;
- 	}
-       else if (sec == BRIG_SECTION_INDEX_OPERAND && name == "hsa_operand")
- 	{
- 	  m_operand = (const char *) section_header;
- 	  m_operand_size = section_header->byteCount;
- 	}
-       else
- 	{
- 	  gcc_unreachable ();
- 	}
-     }
- 
-   if (m_code == NULL)
-     gcc_unreachable ();
-   if (m_data == NULL)
-     gcc_unreachable ();
-   if (m_operand == NULL)
-     gcc_unreachable ();
- 
- }
- 
- /* Does a first pass over the given BRIG to collect data needed for the
-    actual parsing.  Currently this includes only collecting the
-    group segment variable usage to support the experimental HSA PRM feature
-    where group variables can be declared also in module and function scope
-    (in addition to kernel scope).
- */
- 
- void
- brig_to_generic::analyze (const char *brig_blob)
- {
-   const BrigModuleHeader *mheader = (const BrigModuleHeader *) brig_blob;
- 
-   if (strncmp (mheader->identification, "HSA BRIG", 8) != 0)
-     fatal_error (UNKNOWN_LOCATION, PHSA_ERROR_PREFIX_INCOMPATIBLE_MODULE
- 		 "Unrecognized file format.");
-   if (mheader->brigMajor != 1 || mheader->brigMinor != 0)
-     fatal_error (UNKNOWN_LOCATION, PHSA_ERROR_PREFIX_INCOMPATIBLE_MODULE
- 		 "BRIG version not supported. BRIG 1.0 required.");
- 
-   m_brig = brig_blob;
- 
-   find_brig_sections ();
- 
-   brig_directive_variable_handler var_handler (*this);
-   brig_directive_fbarrier_handler fbar_handler (*this);
-   brig_directive_function_handler func_handler (*this);
-   brig_reg_use_analyzer reg_use_analyzer (*this);
- 
-   /* Need this for grabbing the module names for mangling the
-      group variable names.  */
-   brig_directive_module_handler module_handler (*this);
-   skipped_entry_handler skipped_handler (*this);
- 
-   const BrigSectionHeader *csection_header = (const BrigSectionHeader *) m_code;
- 
-   code_entry_handler_info handlers[]
-     = {{BRIG_KIND_INST_BASIC, &reg_use_analyzer},
-        {BRIG_KIND_INST_MOD, &reg_use_analyzer},
-        {BRIG_KIND_INST_CMP, &reg_use_analyzer},
-        {BRIG_KIND_INST_MEM, &reg_use_analyzer},
-        {BRIG_KIND_INST_CVT, &reg_use_analyzer},
-        {BRIG_KIND_INST_SEG_CVT, &reg_use_analyzer},
-        {BRIG_KIND_INST_SEG, &reg_use_analyzer},
-        {BRIG_KIND_INST_ADDR, &reg_use_analyzer},
-        {BRIG_KIND_INST_SOURCE_TYPE, &reg_use_analyzer},
-        {BRIG_KIND_INST_ATOMIC, &reg_use_analyzer},
-        {BRIG_KIND_INST_SIGNAL, &reg_use_analyzer},
-        {BRIG_KIND_INST_BR, &reg_use_analyzer},
-        {BRIG_KIND_INST_LANE, &reg_use_analyzer},
-        {BRIG_KIND_INST_QUEUE, &reg_use_analyzer},
-        {BRIG_KIND_DIRECTIVE_VARIABLE, &var_handler},
-        {BRIG_KIND_DIRECTIVE_FBARRIER, &fbar_handler},
-        {BRIG_KIND_DIRECTIVE_KERNEL, &func_handler},
-        {BRIG_KIND_DIRECTIVE_MODULE, &module_handler},
-        {BRIG_KIND_DIRECTIVE_FUNCTION, &func_handler}};
- 
-   m_analyzing = true;
-   for (size_t b = csection_header->headerByteCount; b < m_code_size;)
-     {
-       const BrigBase *entry = (const BrigBase *) (m_code + b);
- 
-       brig_code_entry_handler *handler = &skipped_handler;
- 
-       if (m_cf != NULL && b >= m_cf->m_brig_def->nextModuleEntry)
- 	{
- 	  /* The function definition ended.  We can just discard the place
- 	     holder function. */
- 	  m_total_group_segment_usage += m_cf->m_local_group_variables.size ();
- 	  delete m_cf;
- 	  m_cf = NULL;
- 	}
- 
-       /* Find a handler.  */
-       for (size_t i = 0;
- 	   i < sizeof (handlers) / sizeof (code_entry_handler_info); ++i)
- 	{
- 	  if (handlers[i].kind == entry->kind)
- 	    handler = handlers[i].handler;
- 	}
- 
-       int bytes_processed = (*handler) (entry);
-       if (bytes_processed == 0)
- 	fatal_error (UNKNOWN_LOCATION, PHSA_ERROR_PREFIX_CORRUPTED_MODULE
- 		     "Element with 0 bytes.");
-       b += bytes_processed;
-     }
- 
-   if (m_cf != NULL)
-     {
-       m_total_group_segment_usage += m_cf->m_local_group_variables.size ();
-       delete m_cf;
-       m_cf = NULL;
-     }
- 
-   m_total_group_segment_usage += m_module_group_variables.size ();
-   m_analyzing = false;
- }
- 
- /* Parses the given BRIG blob.  */
- 
- void
- brig_to_generic::parse (const char *brig_blob)
- {
-   m_brig = brig_blob;
-   find_brig_sections ();
- 
-   brig_basic_inst_handler inst_handler (*this);
-   brig_branch_inst_handler branch_inst_handler (*this);
-   brig_cvt_inst_handler cvt_inst_handler (*this);
-   brig_seg_inst_handler seg_inst_handler (*this);
-   brig_copy_move_inst_handler copy_move_inst_handler (*this);
-   brig_signal_inst_handler signal_inst_handler (*this);
-   brig_atomic_inst_handler atomic_inst_handler (*this);
-   brig_cmp_inst_handler cmp_inst_handler (*this);
-   brig_mem_inst_handler mem_inst_handler (*this);
-   brig_inst_mod_handler inst_mod_handler (*this);
-   brig_directive_label_handler label_handler (*this);
-   brig_directive_variable_handler var_handler (*this);
-   brig_directive_fbarrier_handler fbar_handler (*this);
-   brig_directive_comment_handler comment_handler (*this);
-   brig_directive_function_handler func_handler (*this);
-   brig_directive_control_handler control_handler (*this);
-   brig_directive_arg_block_handler arg_block_handler (*this);
-   brig_directive_module_handler module_handler (*this);
-   brig_lane_inst_handler lane_inst_handler (*this);
-   brig_queue_inst_handler queue_inst_handler (*this);
-   skipped_entry_handler skipped_handler (*this);
-   unimplemented_entry_handler unimplemented_handler (*this);
- 
-   struct code_entry_handler_info
-   {
-     BrigKind kind;
-     brig_code_entry_handler *handler;
-   };
- 
-   /* TODO: Convert to a hash table / map.  For now, put the more common
-      entries to the top to keep the scan fast on average.  */
-   code_entry_handler_info handlers[]
-     = {{BRIG_KIND_INST_BASIC, &inst_handler},
-        {BRIG_KIND_INST_CMP, &cmp_inst_handler},
-        {BRIG_KIND_INST_MEM, &mem_inst_handler},
-        {BRIG_KIND_INST_MOD, &inst_mod_handler},
-        {BRIG_KIND_INST_CVT, &cvt_inst_handler},
-        {BRIG_KIND_INST_SEG_CVT, &seg_inst_handler},
-        {BRIG_KIND_INST_SEG, &seg_inst_handler},
-        {BRIG_KIND_INST_ADDR, &copy_move_inst_handler},
-        {BRIG_KIND_INST_SOURCE_TYPE, &copy_move_inst_handler},
-        {BRIG_KIND_INST_ATOMIC, &atomic_inst_handler},
-        {BRIG_KIND_INST_SIGNAL, &signal_inst_handler},
-        {BRIG_KIND_INST_BR, &branch_inst_handler},
-        {BRIG_KIND_INST_LANE, &lane_inst_handler},
-        {BRIG_KIND_INST_QUEUE, &queue_inst_handler},
-        /* Assuming fences are not needed.  FIXME: call builtins
- 	  when porting to a platform where they are.  */
-        {BRIG_KIND_INST_MEM_FENCE, &skipped_handler},
-        {BRIG_KIND_DIRECTIVE_LABEL, &label_handler},
-        {BRIG_KIND_DIRECTIVE_VARIABLE, &var_handler},
-        {BRIG_KIND_DIRECTIVE_ARG_BLOCK_START, &arg_block_handler},
-        {BRIG_KIND_DIRECTIVE_ARG_BLOCK_END, &arg_block_handler},
-        {BRIG_KIND_DIRECTIVE_FBARRIER, &fbar_handler},
-        {BRIG_KIND_DIRECTIVE_COMMENT, &comment_handler},
-        {BRIG_KIND_DIRECTIVE_KERNEL, &func_handler},
-        {BRIG_KIND_DIRECTIVE_SIGNATURE, &func_handler},
-        {BRIG_KIND_DIRECTIVE_FUNCTION, &func_handler},
-        {BRIG_KIND_DIRECTIVE_INDIRECT_FUNCTION, &func_handler},
-        {BRIG_KIND_DIRECTIVE_MODULE, &module_handler},
-        /* Skipping debug locations for now as not needed for conformance.  */
-        {BRIG_KIND_DIRECTIVE_LOC, &skipped_handler},
-        /* There are no supported pragmas at this moment.  */
-        {BRIG_KIND_DIRECTIVE_PRAGMA, &skipped_handler},
-        {BRIG_KIND_DIRECTIVE_CONTROL, &control_handler},
-        {BRIG_KIND_DIRECTIVE_EXTENSION, &skipped_handler},
-        /* BRIG_KIND_NONE entries are valid anywhere.  They can be used
- 	  for patching BRIGs before finalization.  */
-        {BRIG_KIND_NONE, &skipped_handler}};
- 
-   const BrigSectionHeader *csection_header = (const BrigSectionHeader *) m_code;
- 
-   for (size_t b = csection_header->headerByteCount; b < m_code_size;)
-     {
-       const BrigBase *entry = (const BrigBase *) (m_code + b);
- 
-       brig_code_entry_handler *handler = &unimplemented_handler;
- 
-       if (m_cf != NULL && b >= m_cf->m_brig_def->nextModuleEntry)
- 	finish_function (); /* The function definition ended.  */
- 
-       /* Find a handler.  */
-       for (size_t i = 0;
- 	   i < sizeof (handlers) / sizeof (code_entry_handler_info); ++i)
- 	{
- 	  if (handlers[i].kind == entry->kind)
- 	    handler = handlers[i].handler;
- 	}
-       b += (*handler) (entry);
-     }
- 
-   finish_function ();
- }
- 
- const BrigData *
- brig_to_generic::get_brig_data_entry (size_t entry_offset) const
- {
-   return (const BrigData *) (m_data + entry_offset);
- }
- 
- const BrigBase *
- brig_to_generic::get_brig_operand_entry (size_t entry_offset) const
- {
-   return (const BrigBase *) (m_operand + entry_offset);
- }
- 
- const BrigBase *
- brig_to_generic::get_brig_code_entry (size_t entry_offset) const
- {
-   return (const BrigBase *) (m_code + entry_offset);
- }
- 
- void
- brig_to_generic::append_global (tree g)
- {
-   if (m_globals == NULL_TREE)
-     {
-       m_globals = g;
-       return;
-     }
-   else
-     {
-       tree last = tree_last (m_globals);
-       TREE_CHAIN (last) = g;
-     }
- }
- 
- tree
- brig_to_generic::global_variable (const std::string &name) const
- {
-   label_index::const_iterator i = m_global_variables.find (name);
-   if (i == m_global_variables.end ())
-     return NULL_TREE;
-   else
-     return (*i).second;
- }
- 
- /* Returns a function declaration with the given name.  Assumes it has been
-    created previously via a DirectiveFunction or similar.  */
- 
- tree
- brig_to_generic::function_decl (const std::string &name)
- {
-   label_index::const_iterator i = m_function_index.find (name);
-   if (i == m_function_index.end ())
-     return NULL_TREE;
-   return (*i).second;
- }
- 
- void
- brig_to_generic::add_function_decl (const std::string &name, tree func_decl)
- {
-   m_function_index[name] = func_decl;
- }
- 
- /* Adds a GENERIC global variable VAR_DECL with the given NAME to the
-    current module.  If we have generated a host def var ptr (a place holder
-    for variables that are defined by the HSA host code) for this global
-    variable definition (because there was a declaration earlier which looked
-    like it might have been a host defined variable), we now have
-    to assign its address and make it private to allow the references to
-    point to the defined variable instead.  */
- 
- void
- brig_to_generic::add_global_variable (const std::string &name, tree var_decl)
- {
-   append_global (var_decl);
-   m_global_variables[name] = var_decl;
- 
-   std::string host_def_var_name
-     = std::string (PHSA_HOST_DEF_PTR_PREFIX) + name;
-   tree host_def_var = global_variable (host_def_var_name);
-   if (host_def_var == NULL_TREE)
-     return;
- 
-   tree ptype = build_pointer_type (TREE_TYPE (var_decl));
-   tree var_addr = build1 (ADDR_EXPR, ptype, var_decl);
- 
-   DECL_INITIAL (host_def_var) = var_addr;
-   TREE_PUBLIC (host_def_var) = 1;
- 
-   set_externally_visible (host_def_var);
- }
- 
- /* Adds an indirection pointer for a potential host-defined program scope
-    variable declaration.  */
- 
- void
- brig_to_generic::add_host_def_var_ptr (const std::string &name, tree var_decl)
- {
-   std::string var_name = std::string (PHSA_HOST_DEF_PTR_PREFIX) + name;
- 
-   tree name_identifier = get_identifier (var_name.c_str ());
- 
-   tree ptr_var = build_decl (UNKNOWN_LOCATION, VAR_DECL, name_identifier,
- 			     build_pointer_type (TREE_TYPE (var_decl)));
-   DECL_EXTERNAL (ptr_var) = 0;
-   DECL_ARTIFICIAL (ptr_var) = 0;
- 
-   TREE_PUBLIC (ptr_var) = 1;
-   TREE_USED (ptr_var) = 1;
-   TREE_ADDRESSABLE (ptr_var) = 1;
-   TREE_STATIC (ptr_var) = 1;
- 
-   set_externally_visible (ptr_var);
- 
-   append_global (ptr_var);
-   m_global_variables[var_name] = ptr_var;
- }
- 
- void
- brig_to_generic::add_decl_call (tree call)
- {
-   m_decl_call.push_back (call);
- }
- 
- /* Produce a "mangled name" for the given brig function or kernel.
-    The mangling is used to make unique global symbol name in case of
-    module scope functions.  Program scope functions are not mangled
-    (except for dropping the leading &), which makes the functions
-    directly visible for linking using the original function name.  */
- 
- std::string
- brig_to_generic::get_mangled_name
- (const BrigDirectiveExecutable *func) const
- {
-   /* Strip the leading &.  */
-   std::string func_name = get_string (func->name).substr (1);
-   if (func->linkage == BRIG_LINKAGE_MODULE)
-     {
-       /* Mangle the module scope function names with the module name and
- 	 make them public so they can be queried by the HSA runtime from
- 	 the produced binary.  Assume it's the currently processed function
- 	 we are always referring to.  */
-       func_name = "gccbrig." + m_module_name + "." + func_name;
-     }
-   return func_name;
- }
- 
- std::string
- brig_to_generic::get_string (size_t entry_offset) const
- {
-   const BrigData *data_item = get_brig_data_entry (entry_offset);
-   return std::string ((const char *) &data_item->bytes, data_item->byteCount);
- }
- 
- /* Adapted from c-semantics.c.  */
- 
- tree
- build_stmt (enum tree_code code, ...)
- {
-   tree ret;
-   int length, i;
-   va_list p;
-   bool side_effects;
- 
-   /* This function cannot be used to construct variably-sized nodes.  */
-   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
- 
-   va_start (p, code);
- 
-   ret = make_node (code);
-   TREE_TYPE (ret) = void_type_node;
-   length = TREE_CODE_LENGTH (code);
- 
-   /* TREE_SIDE_EFFECTS will already be set for statements with
-      implicit side effects.  Here we make sure it is set for other
-      expressions by checking whether the parameters have side
-      effects.  */
- 
-   side_effects = false;
-   for (i = 0; i < length; i++)
-     {
-       tree t = va_arg (p, tree);
-       if (t && !TYPE_P (t))
- 	side_effects |= TREE_SIDE_EFFECTS (t);
-       TREE_OPERAND (ret, i) = t;
-     }
- 
-   TREE_SIDE_EFFECTS (ret) |= side_effects;
- 
-   va_end (p);
-   return ret;
- }
- 
- /* BRIG regs are untyped, but GENERIC is not.  We need to add implicit casts
-    in case treating the operand with an instruction with a type different
-    than the created reg var type in order to select correct instruction type
-    later on.  This function creates the necessary reinterpret type cast from
-    a source variable to the destination type.  In case no cast is needed to
-    the same type, SOURCE is returned directly.
- 
-    In case of mismatched type sizes, casting:
-    - to narrower type the upper bits are clipped and
-    - to wider type the source value is zero extended.  */
- 
- tree
- build_resize_convert_view (tree destination_type, tree source)
- {
- 
-   gcc_assert (source && destination_type && TREE_TYPE (source) != NULL_TREE
- 	      && destination_type != NULL_TREE);
- 
-   tree source_type = TREE_TYPE (source);
-   if (TREE_CODE (source) == CALL_EXPR)
-     {
-       tree func_decl = TREE_OPERAND (TREE_OPERAND (source, 1), 0);
-       source_type = TREE_TYPE (TREE_TYPE (func_decl));
-     }
- 
-   if (destination_type == source_type)
-     return source;
- 
-   size_t src_size = int_size_in_bytes (source_type);
-   size_t dst_size = int_size_in_bytes (destination_type);
-   if (src_size == dst_size)
-     return build1 (VIEW_CONVERT_EXPR, destination_type, source);
-   else /* src_size != dst_size  */
-     {
-       /* The src_size can be smaller at least with f16 scalars which are
- 	 stored to 32b register variables.  First convert to an equivalent
- 	 size unsigned type, then extend to an unsigned type of the
- 	 target width, after which VIEW_CONVERT_EXPR can be used to
- 	 force to the target type.  */
-       tree resized = convert (get_scalar_unsigned_int_type (destination_type),
- 			      build_reinterpret_to_uint (source));
-       gcc_assert ((size_t)int_size_in_bytes (TREE_TYPE (resized)) == dst_size);
-       return build_resize_convert_view (destination_type, resized);
-     }
- }
- 
- /* Reinterprets SOURCE as a scalar unsigned int with the size
-    corresponding to the orignal.  */
- 
- tree build_reinterpret_to_uint (tree source)
- {
-   tree src_type = TREE_TYPE (source);
-   if (INTEGRAL_TYPE_P (src_type) && TYPE_UNSIGNED (src_type))
-     return source;
-   tree dest_type = get_scalar_unsigned_int_type (src_type);
-   return build1 (VIEW_CONVERT_EXPR, dest_type, source);
- }
- 
- /* Returns the finished brig_function for the given generic FUNC_DECL,
-    or NULL, if not found.  */
- 
- brig_function *
- brig_to_generic::get_finished_function (tree func_decl)
- {
-   std::string func_name
-     = identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (func_decl)));
-   std::map<std::string, brig_function *>::iterator i
-     = m_finished_functions.find (func_name);
-   if (i != m_finished_functions.end ())
-     return (*i).second;
-   else
-     return NULL;
- }
- 
- /* Adds a group variable to a correct book keeping structure depending
-    on its segment.  */
- 
- void
- brig_to_generic::add_group_variable (const std::string &name, size_t size,
- 				     size_t alignment, bool function_scope)
- {
-   /* Module and function scope group region variables are an experimental
-      feature.  We implement module scope group variables with a separate
-      book keeping inside brig_to_generic which is populated in the 'analyze()'
-      prepass.  This is to ensure we know the group segment offsets when
-      processing the functions that might refer to them.  */
-   if (!function_scope)
-     {
-       if (!m_module_group_variables.has_variable (name))
- 	m_module_group_variables.add (name, size, alignment);
-       return;
-     }
- 
-   if (!m_cf->m_local_group_variables.has_variable (name))
-     m_cf->m_local_group_variables.add (name, size, alignment);
- }
- 
- /* Finalizes the currently handled function.  Should be called before
-    setting a new function.  */
- 
- void
- brig_to_generic::finish_function ()
- {
-   if (m_cf == NULL || m_cf->m_func_decl == NULL_TREE)
-     {
-       /* It can be a finished func declaration fingerprint, in that case we
- 	 don't have m_func_decl.  */
-       m_cf = NULL;
-       return;
-     }
- 
-   if (!m_cf->m_is_kernel)
-     {
-       tree bind_expr = m_cf->m_current_bind_expr;
-       tree stmts = BIND_EXPR_BODY (bind_expr);
-       m_cf->finish ();
-       m_cf->emit_metadata (stmts);
-       dump_function (m_dump_file, m_cf);
-     }
-   else
-     /* Emit the kernel only at the very end so we can analyze the total
-        group and private memory usage.  */
-     m_kernels.push_back (m_cf);
- 
-   pop_cfun ();
- 
-   m_finished_functions[m_cf->m_name] = m_cf;
-   m_cf = NULL;
- }
- 
- /* Initializes a new currently handled function.  */
- 
- void
- brig_to_generic::start_function (tree f)
- {
-   if (DECL_STRUCT_FUNCTION (f) == NULL)
-     push_struct_function (f);
-   else
-     push_cfun (DECL_STRUCT_FUNCTION (f));
- 
-   m_cf->m_func_decl = f;
- }
- 
- /* Appends a new variable to the current kernel's private segment.  */
- 
- void
- brig_to_generic::append_private_variable (const std::string &name,
- 					  size_t size, size_t alignment)
- {
-   /* We need to take care of two cases of alignment with private
-      variables because of the layout where the same variable for
-      each work-item is laid out in successive addresses.
- 
-      1) Ensure the first work-item's variable is in an aligned
-      offset:  */
-   size_t align_padding = m_next_private_offset % alignment == 0 ?
-     0 : (alignment - m_next_private_offset % alignment);
- 
-   /* 2) Each successive per-work-item copy should be aligned.
-      If the variable has wider alignment than size then we need
-      to add extra padding to ensure it.  The padding must be
-      included in the size to allow per-work-item offset computation
-      to find their own aligned copy.  */
- 
-   size_t per_var_padding = size % alignment == 0 ?
-     0 : (alignment - size % alignment);
-   m_private_data_sizes[name] = size + per_var_padding;
- 
-   m_next_private_offset += align_padding;
-   m_private_offsets[name] = m_next_private_offset;
-   m_next_private_offset += size + per_var_padding;
- }
- 
- size_t
- brig_to_generic::private_variable_segment_offset
-   (const std::string &name) const
- {
-   var_offset_table::const_iterator i = m_private_offsets.find (name);
-   gcc_assert (i != m_private_offsets.end ());
-   return (*i).second;
- }
- 
- bool
- brig_to_generic::has_private_variable (const std::string &name) const
- {
-   std::map<std::string, size_t>::const_iterator i
-     = m_private_data_sizes.find (name);
-   return i != m_private_data_sizes.end ();
- }
- 
- size_t
- brig_to_generic::private_variable_size (const std::string &name) const
- {
-   std::map<std::string, size_t>::const_iterator i
-     = m_private_data_sizes.find (name);
-   gcc_assert (i != m_private_data_sizes.end ());
-   return (*i).second;
- }
- 
- 
- /* The size of private segment required by a single work-item executing
-    the currently processed kernel.  */
- 
- size_t
- brig_to_generic::private_segment_size () const
- {
-   return m_next_private_offset;
- }
- 
- /* Cached builtins indexed by name.  */
- 
- typedef std::map<std::string, tree> builtin_index;
- builtin_index builtin_cache_;
- 
- /* Build a call to a builtin function.  PDECL is the builtin function to
-    call.  NARGS is the number of input arguments, RETTYPE the built-in
-    functions return value type, and ... is the list of arguments passed to
-    the call with type first, then the value.  */
- 
- tree
- call_builtin (tree pdecl, int nargs, tree rettype, ...)
- {
-   if (rettype == error_mark_node)
-     return error_mark_node;
- 
-   tree *types = new tree[nargs];
-   tree *args = new tree[nargs];
- 
-   va_list ap;
-   va_start (ap, rettype);
-   for (int i = 0; i < nargs; ++i)
-     {
-       types[i] = va_arg (ap, tree);
-       tree arg = va_arg (ap, tree);
-       args[i] = build_resize_convert_view (types[i], arg);
-       if (types[i] == error_mark_node || args[i] == error_mark_node)
- 	{
- 	  delete[] types;
- 	  delete[] args;
- 	  va_end (ap);
- 	  return error_mark_node;
- 	}
-     }
-   va_end (ap);
- 
-   tree fnptr = build_fold_addr_expr (pdecl);
- 
-   tree ret = build_call_array (rettype, fnptr, nargs, args);
- 
-   delete[] types;
-   delete[] args;
- 
-   return ret;
- }
- 
- /* Generate all global declarations.  Should be called after the last
-    BRIG has been fed in.  */
- 
- void
- brig_to_generic::write_globals ()
- {
- 
-   /* Replace calls to declarations with calls to definitions.  Otherwise
-      inlining will fail to find the definition to inline from.  */
- 
-   for (size_t i = 0; i < m_decl_call.size(); ++i)
-     {
-       tree decl_call = m_decl_call.at(i);
-       tree func_decl = get_callee_fndecl (decl_call);
-       brig_function *brig_function = get_finished_function (func_decl);
- 
-       if (brig_function && brig_function->m_func_decl
- 	  && DECL_EXTERNAL (brig_function->m_func_decl) == 0
- 	  && brig_function->m_func_decl != func_decl)
- 	{
- 
- 	  decl_call = CALL_EXPR_FN (decl_call);
- 	  STRIP_NOPS (decl_call);
- 	  if (TREE_CODE (decl_call) == ADDR_EXPR
- 	      && TREE_CODE (TREE_OPERAND (decl_call, 0)) == FUNCTION_DECL)
- 	    TREE_OPERAND (decl_call, 0) = brig_function->m_func_decl;
- 	}
-     }
- 
-   for (std::map<std::string, brig_function *>::iterator i
- 	 = m_finished_functions.begin(), e = m_finished_functions.end();
-        i != e; ++i)
-     {
-       brig_function *brig_f = (*i).second;
-       if (brig_f->m_is_kernel)
- 	continue;
- 
-       /* Finalize only at this point to allow the cgraph analysis to
- 	 see definitions to calls to later functions.  */
-       gimplify_function_tree (brig_f->m_func_decl);
-       cgraph_node::finalize_function (brig_f->m_func_decl, true);
-     }
- 
-   /* Now that the whole BRIG module has been processed, build a launcher
-      and a metadata section for each built kernel.  */
-   for (size_t i = 0; i < m_kernels.size (); ++i)
-     {
-       brig_function *f = m_kernels[i];
- 
-       /* Finish kernels now that we know the call graphs and their barrier
- 	 usage.  */
-       f->finish_kernel ();
- 
-       dump_function (m_dump_file, f);
-       gimplify_function_tree (f->m_func_decl);
-       cgraph_node::finalize_function (f->m_func_decl, true);
- 
-       f->m_descriptor.is_kernel = 1;
-       /* TODO: analyze the kernel's actual private and group segment usage
- 	 using call graph.  Now the mem size is overly
- 	 pessimistic in case of multiple kernels in the same module.
-       */
-       f->m_descriptor.group_segment_size = m_total_group_segment_usage;
-       f->m_descriptor.private_segment_size = private_segment_size ();
- 
-       /* The kernarg size is rounded up to a multiple of 16 according to
- 	 the PRM specs.  */
-       f->m_descriptor.kernarg_segment_size = f->m_next_kernarg_offset;
-       if (f->m_descriptor.kernarg_segment_size % 16 > 0)
- 	f->m_descriptor.kernarg_segment_size
- 	  += 16 - f->m_next_kernarg_offset % 16;
-       f->m_descriptor.kernarg_max_align = f->m_kernarg_max_align;
- 
-       tree launcher = f->emit_launcher_and_metadata ();
- 
-       append_global (launcher);
- 
-       if (m_dump_file)
- 	{
- 	  std::string kern_name = f->m_name.substr (1);
- 	  fprintf (m_dump_file, "\n;; Function %s", kern_name.c_str());
- 	  fprintf (m_dump_file, "\n;; enabled by -%s\n\n",
- 		   dump_flag_name (TDI_original));
- 	  print_generic_decl (m_dump_file, launcher, TDF_NONE);
- 	  print_generic_expr (m_dump_file, DECL_SAVED_TREE (launcher),
- 			      TDF_NONE);
- 	  fprintf (m_dump_file, "\n");
- 	}
- 
-       gimplify_function_tree (launcher);
-       cgraph_node::finalize_function (launcher, true);
-       pop_cfun ();
-     }
- 
-   int no_globals = list_length (m_globals);
-   tree *vec = new tree[no_globals];
- 
-   int i = 0;
-   tree global = m_globals;
-   while (global)
-     {
-       vec[i] = global;
-       ++i;
-       global = TREE_CHAIN (global);
-     }
- 
-   wrapup_global_declarations (vec, no_globals);
- 
-   delete[] vec;
- 
- }
- 
- /* Returns an type with unsigned int elements corresponding to the
-    size and element count of ORIGINAL_TYPE.  */
- 
- tree
- get_unsigned_int_type (tree original_type)
- {
-   if (VECTOR_TYPE_P (original_type))
-     {
-       size_t esize
- 	= int_size_in_bytes (TREE_TYPE (original_type)) * BITS_PER_UNIT;
-       poly_uint64 ecount = TYPE_VECTOR_SUBPARTS (original_type);
-       return build_vector_type (build_nonstandard_integer_type (esize, true),
- 				ecount);
-     }
-   else
-     return build_nonstandard_integer_type (int_size_in_bytes (original_type)
- 					   * BITS_PER_UNIT,
- 					   true);
- }
- 
- /* Returns a type with unsigned int corresponding to the size
-    ORIGINAL_TYPE.  */
- 
- tree
- get_scalar_unsigned_int_type (tree original_type)
- {
-   return build_nonstandard_integer_type (int_size_in_bytes (original_type)
- 					 * BITS_PER_UNIT, true);
- }
- 
- /* Set the declaration externally visible so it won't get removed by
-    whole program optimizations.  */
- 
- void
- set_externally_visible (tree decl)
- {
-   if (!lookup_attribute ("externally_visible", DECL_ATTRIBUTES (decl)))
-     DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("externally_visible"),
- 					NULL, DECL_ATTRIBUTES (decl));
- }
- 
- void
- set_inline (tree decl)
- {
-   if (!lookup_attribute ("inline", DECL_ATTRIBUTES (decl)))
-     DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("inline"),
- 					NULL, DECL_ATTRIBUTES (decl));
- }
- 
- void
- dump_function (FILE *dump_file, brig_function *f)
- {
-   /* Dump the BRIG-specific tree IR.  */
-   if (dump_file)
-     {
-       fprintf (dump_file, "\n;; Function %s", f->m_name.c_str ());
-       fprintf (dump_file, "\n;; enabled by -%s\n\n",
- 	       dump_flag_name (TDI_original));
-       print_generic_decl (dump_file, f->m_func_decl, TDF_NONE);
-       print_generic_expr (dump_file, f->m_current_bind_expr, TDF_NONE);
-       fprintf (dump_file, "\n");
-     }
- }
- 
- /* Records use of the BRIG_REG as a TYPE in the current function.  */
- 
- void
- brig_to_generic::add_reg_used_as_type (const BrigOperandRegister &brig_reg,
- 				       tree type)
- {
-   gcc_assert (m_cf);
-   reg_use_info &info
-     = m_fn_regs_use_index[m_cf->m_name][gccbrig_hsa_reg_id (brig_reg)];
- 
-   if (info.m_type_refs_lookup.count (type))
-     info.m_type_refs[info.m_type_refs_lookup[type]].second++;
-   else
-     {
-       info.m_type_refs.push_back (std::make_pair (type, 1));
-       info.m_type_refs_lookup[type] = info.m_type_refs.size () - 1;
-     }
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-to-generic.h gcc-12.1.0/gcc/brig/brigfrontend/brig-to-generic.h
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-to-generic.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-to-generic.h	Thu Jan  1 00:00:00 1970
***************
*** 1,240 ****
- /* brig-to-generic.h -- brig to gcc generic conversion
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #ifndef BRIG_TO_GENERIC_H
- #define BRIG_TO_GENERIC_H
- 
- #include <string>
- #include <map>
- #include <vector>
- 
- #include "config.h"
- #include "system.h"
- #include "ansidecl.h"
- #include "coretypes.h"
- #include "opts.h"
- #include "tree.h"
- #include "tree-iterator.h"
- #include "hsa-brig-format.h"
- #include "brig-function.h"
- 
- struct reg_decl_index_entry;
- 
- /* Converts an HSAIL BRIG input to GENERIC.  This class holds global state
-    for the translation process.  Handling of the smaller pieces of BRIG data
-    is delegated to various handler classes declared in
-    brig-code-entry-handlers.h.  */
- 
- class brig_to_generic
- {
- public:
-   typedef std::map<const BrigDirectiveVariable *, tree> variable_index;
- 
- private:
-   typedef std::map<std::string, size_t> var_offset_table;
-   typedef std::map<const BrigBase *, std::string> name_index;
- 
- public:
-   brig_to_generic ();
- 
-   void analyze (const char *brig_blob);
-   void parse (const char *brig_blob);
- 
-   void write_globals ();
- 
-   std::string get_string (size_t entry_offset) const;
- 
-   const BrigData *get_brig_data_entry (size_t entry_offset) const;
-   const BrigBase *get_brig_operand_entry (size_t entry_offset) const;
-   const BrigBase *get_brig_code_entry (size_t entry_offset) const;
- 
-   void append_global (tree g);
- 
-   tree function_decl (const std::string &name);
-   void add_function_decl (const std::string &name, tree func_decl);
- 
-   tree global_variable (const std::string &name) const;
-   void add_global_variable (const std::string &name, tree var_decl);
-   void add_host_def_var_ptr (const std::string &name, tree var_decl);
-   void add_decl_call (tree call);
- 
-   void start_function (tree f);
-   void finish_function ();
- 
-   void append_private_variable (const std::string &name, size_t size,
- 				size_t alignment);
- 
-   size_t
-   private_variable_segment_offset (const std::string &name) const;
- 
-   bool
-   has_private_variable (const std::string &name) const;
- 
-   size_t private_variable_size (const std::string &name) const;
- 
-   template <typename T>
-     std::string
-     get_mangled_name_tmpl (const T *brigVar) const;
- 
-   std::string get_mangled_name (const BrigDirectiveFbarrier *fbar) const
-     { return get_mangled_name_tmpl (fbar); }
-   std::string get_mangled_name (const BrigDirectiveVariable *var) const
-     { return get_mangled_name_tmpl (var); }
-   std::string get_mangled_name (const BrigDirectiveExecutable *func) const;
- 
-   size_t private_segment_size () const;
- 
-   brig_function *get_finished_function (tree func_decl);
- 
-   void add_group_variable (const std::string &name, size_t size,
- 			   size_t alignment, bool function_scope);
- 
-   void add_reg_used_as_type (const BrigOperandRegister &brig_reg,
- 			     tree operand_type);
- 
-   static tree s_fp16_type;
-   static tree s_fp32_type;
-   static tree s_fp64_type;
- 
-   /* The default rounding mode that should be used for float instructions.
-      This can be set in each BRIG module header.  */
-   BrigRound8_t m_default_float_rounding_mode;
- 
-   /* The currently built function.  */
-   brig_function *m_cf;
- 
-   /* Stores the module and function scope group variable offsets.  */
-   group_variable_offset_index m_module_group_variables;
- 
-   /* The name of the currently handled BRIG module.  */
-   std::string m_module_name;
- 
-   /* Set to true if the compilation is in 'analyze' phase.  */
-   bool m_analyzing;
- 
-   /* Accumulates the total group segment usage.  */
-   size_t m_total_group_segment_usage;
- 
-   /* Statistics about register uses per function.  */
-   std::map<std::string, regs_use_index> m_fn_regs_use_index;
- 
- private:
- 
-   void find_brig_sections ();
-   /* The BRIG blob and its different sections of the file currently being
-      parsed.  */
-   const char *m_brig;
-   const char *m_data;
-   size_t m_data_size;
-   const char *m_operand;
-   size_t m_operand_size;
-   const char *m_code;
-   size_t m_code_size;
- 
-   tree m_globals;
- 
-   label_index m_global_variables;
- 
-   /* Calls to declarations to be fixed in the end of processing to call
-      defs instead.  */
-   std::vector<tree> m_decl_call;
- 
-   /* The size of each private variable, including the alignment padding.  */
-   std::map<std::string, size_t> m_private_data_sizes;
- 
-   /* And private.  */
-   size_t m_next_private_offset;
-   var_offset_table m_private_offsets;
- 
-   /* Name index for declared functions.  */
-   label_index m_function_index;
- 
-   /* Stores all processed kernels in order.  */
-   std::vector<brig_function *> m_kernels;
- 
-   /* Stores all already processed functions from the translation unit
-      for some interprocedural analysis.  */
-   std::map<std::string, brig_function *> m_finished_functions;
- 
-   /* The original dump file.  */
-   FILE *m_dump_file;
- 
-   /* The original dump file flags.  */
-   dump_flags_t m_dump_flags;
- };
- 
- /* Produce a "mangled name" for the given brig variable.  The mangling is used
-    to make unique global symbol names for module and function scope variables.
-    The templated version is suitable for most of the variable types.  Functions
-    and kernels (BrigDirectiveExecutable) are handled with a specialized
-    get_mangled_name() version.  */
- 
- template <typename T>
- std::string
- brig_to_generic::get_mangled_name_tmpl (const T *brigVar) const
- {
-   std::string var_name = get_string (brigVar->name).substr (1);
- 
-   /* Mangle the variable name using the function name and the module name
-      in case of a function scope variable.  */
-   if (m_cf != NULL
-       && m_cf->has_function_scope_var (&brigVar->base))
-     var_name = m_cf->m_name + "." + var_name;
- 
-   if (brigVar->linkage == BRIG_LINKAGE_MODULE)
-     var_name = "gccbrig." + m_module_name + "." + var_name;
-   return var_name;
- }
- 
- /* An interface to organize the different types of BRIG element handlers.  */
- 
- class brig_entry_handler
- {
- public:
-   brig_entry_handler (brig_to_generic &parent) : m_parent (parent)
-   {
-   }
- 
-   /* Handles the brig_code data at the given pointer and adds it to the
-      currently built tree.  Returns the number of consumed bytes;  */
-   virtual size_t operator () (const BrigBase *base) = 0;
- 
- protected:
-   brig_to_generic &m_parent;
- };
- 
- tree call_builtin (tree pdecl, int nargs, tree rettype, ...);
- 
- tree build_resize_convert_view (tree destination_type, tree source);
- tree build_reinterpret_to_uint (tree source);
- 
- tree build_stmt (enum tree_code code, ...);
- 
- tree get_unsigned_int_type (tree type);
- 
- tree get_scalar_unsigned_int_type (tree type);
- void set_externally_visible (tree decl);
- 
- void set_inline (tree decl);
- 
- void dump_function (FILE *dump_file, brig_function *f);
- 
- #endif
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-util.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-util.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-util.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-util.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,574 ****
- /* brig-util.cc -- gccbrig utility functions
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include <sstream>
- 
- #include "stdint.h"
- #include "hsa-brig-format.h"
- #include "brig-util.h"
- #include "errors.h"
- #include "diagnostic-core.h"
- #include "print-tree.h"
- 
- bool
- group_variable_offset_index::has_variable (const std::string &name) const
- {
-   varname_offset_table::const_iterator i = m_group_offsets.find (name);
-   return i != m_group_offsets.end ();
- }
- 
- /* Adds a new group segment variable.  */
- 
- void
- group_variable_offset_index::add (const std::string &name, size_t size,
- 				  size_t alignment)
- {
-   size_t align_padding = m_next_group_offset % alignment == 0 ?
-     0 : (alignment - m_next_group_offset % alignment);
-   m_next_group_offset += align_padding;
-   m_group_offsets[name] = m_next_group_offset;
-   m_next_group_offset += size;
- }
- 
- size_t
- group_variable_offset_index::segment_offset (const std::string &name) const
- {
-   varname_offset_table::const_iterator i = m_group_offsets.find (name);
-   gcc_assert (i != m_group_offsets.end ());
-   return (*i).second;
- }
- 
- /* Return true if operand number OPNUM of instruction with OPCODE is an output.
-    False if it is an input.  Some code reused from Martin Jambor's gcc-hsa
-    tree.  */
- 
- bool
- gccbrig_hsa_opcode_op_output_p (BrigOpcode16_t opcode, int opnum)
- {
-   switch (opcode)
-     {
-     case BRIG_OPCODE_BR:
-     case BRIG_OPCODE_SBR:
-     case BRIG_OPCODE_CBR:
-     case BRIG_OPCODE_ST:
-     case BRIG_OPCODE_ATOMICNORET:
-     case BRIG_OPCODE_SIGNALNORET:
-     case BRIG_OPCODE_INITFBAR:
-     case BRIG_OPCODE_JOINFBAR:
-     case BRIG_OPCODE_WAITFBAR:
-     case BRIG_OPCODE_ARRIVEFBAR:
-     case BRIG_OPCODE_LEAVEFBAR:
-     case BRIG_OPCODE_RELEASEFBAR:
-     case BRIG_OPCODE_DEBUGTRAP:
-       return false;
-     default:
-       return opnum == 0;
-     }
- }
- 
- unsigned
- gccbrig_hsa_type_bit_size (BrigType16_t t)
- {
- 
-   unsigned pack_type = t & ~BRIG_TYPE_BASE_MASK;
- 
-   if (pack_type == BRIG_TYPE_PACK_32)
-     return 32;
-   else if (pack_type == BRIG_TYPE_PACK_64)
-     return 64;
-   else if (pack_type == BRIG_TYPE_PACK_128)
-     return 128;
- 
-   switch (t)
-     {
-     case BRIG_TYPE_NONE:
-       return 0;
- 
-     case BRIG_TYPE_B1:
-       return 1;
- 
-     case BRIG_TYPE_U8:
-     case BRIG_TYPE_S8:
-     case BRIG_TYPE_B8:
-       return 8;
- 
-     case BRIG_TYPE_U16:
-     case BRIG_TYPE_S16:
-     case BRIG_TYPE_B16:
-     case BRIG_TYPE_F16:
-       return 16;
- 
-     case BRIG_TYPE_U32:
-     case BRIG_TYPE_S32:
-     case BRIG_TYPE_B32:
-     case BRIG_TYPE_F32:
-     case BRIG_TYPE_U8X4:
-     case BRIG_TYPE_U16X2:
-     case BRIG_TYPE_S8X4:
-     case BRIG_TYPE_S16X2:
-     case BRIG_TYPE_F16X2:
-     case BRIG_TYPE_SIG32:
-       return 32;
- 
-     case BRIG_TYPE_U64:
-     case BRIG_TYPE_S64:
-     case BRIG_TYPE_F64:
-     case BRIG_TYPE_B64:
-     case BRIG_TYPE_U8X8:
-     case BRIG_TYPE_U16X4:
-     case BRIG_TYPE_U32X2:
-     case BRIG_TYPE_S8X8:
-     case BRIG_TYPE_S16X4:
-     case BRIG_TYPE_S32X2:
-     case BRIG_TYPE_F16X4:
-     case BRIG_TYPE_F32X2:
-     case BRIG_TYPE_SIG64:
-       return 64;
- 
-     case BRIG_TYPE_B128:
-     case BRIG_TYPE_U8X16:
-     case BRIG_TYPE_U16X8:
-     case BRIG_TYPE_U32X4:
-     case BRIG_TYPE_U64X2:
-     case BRIG_TYPE_S8X16:
-     case BRIG_TYPE_S16X8:
-     case BRIG_TYPE_S32X4:
-     case BRIG_TYPE_S64X2:
-     case BRIG_TYPE_F16X8:
-     case BRIG_TYPE_F32X4:
-     case BRIG_TYPE_F64X2:
-       return 128;
- 
-     default:
-       printf ("HMM %d %x\n", t, t);
-       gcc_unreachable ();
-     }
- }
- 
- /* gcc-hsa borrowed code ENDS.  */
- 
- uint64_t
- gccbrig_to_uint64_t (const BrigUInt64 &brig_type)
- {
-   return (uint64_t (brig_type.hi) << 32) | uint64_t (brig_type.lo);
- }
- 
- int
- gccbrig_reg_size (const BrigOperandRegister *brig_reg)
- {
-   switch (brig_reg->regKind)
-     {
-     case BRIG_REGISTER_KIND_CONTROL:
-       return 1;
-     case BRIG_REGISTER_KIND_SINGLE:
-       return 32;
-     case BRIG_REGISTER_KIND_DOUBLE:
-       return 64;
-     case BRIG_REGISTER_KIND_QUAD:
-       return 128;
-     default:
-       gcc_unreachable ();
-       break;
-     }
- }
- 
- std::string
- gccbrig_reg_name (const BrigOperandRegister *reg)
- {
-   std::ostringstream strstr;
-   switch (reg->regKind)
-     {
-     case BRIG_REGISTER_KIND_CONTROL:
-       strstr << 'c';
-       break;
-     case BRIG_REGISTER_KIND_SINGLE:
-       strstr << 's';
-       break;
-     case BRIG_REGISTER_KIND_DOUBLE:
-       strstr << 'd';
-       break;
-     case BRIG_REGISTER_KIND_QUAD:
-       strstr << 'q';
-       break;
-     default:
-       gcc_unreachable ();
-       return "";
-     }
-   strstr << reg->regNum;
-   return strstr.str ();
- }
- 
- std::string
- gccbrig_type_name (BrigType16_t type)
- {
-   switch (type)
-     {
-     case BRIG_TYPE_U8:
-       return "u8";
-     case BRIG_TYPE_U16:
-       return "u16";
-     case BRIG_TYPE_U32:
-       return "u32";
-     case BRIG_TYPE_U64:
-       return "u64";
-     case BRIG_TYPE_S8:
-       return "s8";
-     case BRIG_TYPE_S16:
-       return "s16";
-     case BRIG_TYPE_S32:
-       return "s32";
-     case BRIG_TYPE_S64:
-       return "s64";
-     default:
-       gcc_unreachable ();
-       break;
-     }
- }
- 
- std::string
- gccbrig_segment_name (BrigSegment8_t segment)
- {
-   if (segment == BRIG_SEGMENT_GLOBAL)
-     return "global";
-   else if (segment == BRIG_SEGMENT_GROUP)
-     return "group";
-   else if (segment == BRIG_SEGMENT_PRIVATE)
-     return "private";
-   else
-     gcc_unreachable ();
- }
- 
- bool
- gccbrig_is_float_type (BrigType16_t type)
- {
-   return (type == BRIG_TYPE_F32 || type == BRIG_TYPE_F64
- 	  || type == BRIG_TYPE_F16);
- }
- 
- BrigType16_t
- gccbrig_tree_type_to_hsa_type (tree tree_type)
- {
-   if (INTEGRAL_TYPE_P (tree_type))
-     {
-       if (TYPE_UNSIGNED (tree_type))
- 	{
- 	  switch (int_size_in_bytes (tree_type))
- 	    {
- 	    case 1:
- 	      return BRIG_TYPE_U8;
- 	    case 2:
- 	      return BRIG_TYPE_U16;
- 	    case 4:
- 	      return BRIG_TYPE_U32;
- 	    case 8:
- 	      return BRIG_TYPE_U64;
- 	    default:
- 	      break;
- 	    }
- 	}
-       else
- 	{
- 	  switch (int_size_in_bytes (tree_type))
- 	    {
- 	    case 1:
- 	      return BRIG_TYPE_S8;
- 	    case 2:
- 	      return BRIG_TYPE_S16;
- 	    case 4:
- 	      return BRIG_TYPE_S32;
- 	    case 8:
- 	      return BRIG_TYPE_S64;
- 	    default:
- 	      break;
- 	    }
- 	}
-     }
-   else if (VECTOR_TYPE_P (tree_type))
-     {
-       tree element_type = TREE_TYPE (tree_type);
-       size_t element_size = int_size_in_bytes (element_type) * 8;
-       BrigType16_t brig_element_type;
-       switch (element_size)
- 	{
- 	case 8:
- 	  brig_element_type
- 	    = TYPE_UNSIGNED (element_type) ? BRIG_TYPE_U8 : BRIG_TYPE_S8;
- 	  break;
- 	case 16:
- 	  brig_element_type
- 	    = TYPE_UNSIGNED (element_type) ? BRIG_TYPE_U16 : BRIG_TYPE_S16;
- 	  break;
- 	case 32:
- 	  brig_element_type
- 	    = TYPE_UNSIGNED (element_type) ? BRIG_TYPE_U32 : BRIG_TYPE_S32;
- 	  break;
- 	case 64:
- 	  brig_element_type
- 	    = TYPE_UNSIGNED (element_type) ? BRIG_TYPE_U64 : BRIG_TYPE_S64;
- 	  break;
- 	default:
- 	  gcc_unreachable ();
- 	}
- 
-       BrigType16_t pack_type;
-       switch (int_size_in_bytes (tree_type) * 8)
- 	{
- 	case 32:
- 	  pack_type = BRIG_TYPE_PACK_32;
- 	  break;
- 	case 64:
- 	  pack_type = BRIG_TYPE_PACK_64;
- 	  break;
- 	case 128:
- 	  pack_type = BRIG_TYPE_PACK_128;
- 	  break;
- 	default:
- 	  gcc_unreachable ();
- 	}
-       return brig_element_type | pack_type;
-     }
-   gcc_unreachable ();
- }
- 
- /* Returns true in case the operation is a "bit level" operation,
-    that is, not having operand type depending semantical differences.  */
- 
- bool
- gccbrig_is_bit_operation (BrigOpcode16_t opcode)
- {
-   return opcode == BRIG_OPCODE_CMOV || opcode == BRIG_OPCODE_SHUFFLE
- 	 || opcode == BRIG_OPCODE_UNPACK || opcode == BRIG_OPCODE_UNPACKLO
- 	 || opcode == BRIG_OPCODE_UNPACKHI || opcode == BRIG_OPCODE_ST
- 	 || opcode == BRIG_OPCODE_PACK;
- }
- 
- /* The program scope definition can be left external within the
-    kernel binary which means it must be defined by the host via
-    HSA runtime.  For these we have special treatment:
-    Create additional pointer indirection when accessing the variable
-    value from kernel code through a generated pointer
-    __gccbrig_ptr_variable_name.  The pointer value then can be set either
-    within the kernel binary (in case of a later linked in definition)
-    or from the host.  */
- 
- bool
- gccbrig_might_be_host_defined_var_p (const BrigDirectiveVariable *brigVar)
- {
-   bool is_definition = brigVar->modifier & BRIG_VARIABLE_DEFINITION;
-   return (brigVar->segment == BRIG_SEGMENT_GLOBAL
- 	  || brigVar->segment == BRIG_SEGMENT_READONLY) && !is_definition
-     && brigVar->linkage == BRIG_LINKAGE_PROGRAM
-     && (brigVar->allocation == BRIG_ALLOCATION_PROGRAM
- 	|| brigVar->allocation == BRIG_ALLOCATION_AGENT);
- }
- 
- /* Produce a GENERIC type for the given HSA/BRIG type.  Returns the element
-    type in case of vector instructions.  */
- 
- tree
- gccbrig_tree_type_for_hsa_type (BrigType16_t brig_type)
- {
-   tree tree_type = NULL_TREE;
- 
-   if (hsa_type_packed_p (brig_type))
-     {
-       /* The element type is encoded in the bottom 5 bits.  */
-       BrigType16_t inner_brig_type = brig_type & BRIG_TYPE_BASE_MASK;
- 
-       unsigned full_size = gccbrig_hsa_type_bit_size (brig_type);
- 
-       if (inner_brig_type == BRIG_TYPE_F16)
- 	return build_vector_type (gccbrig_tree_type_for_hsa_type (BRIG_TYPE_U16),
- 				  full_size / 16);
- 
-       tree inner_type = gccbrig_tree_type_for_hsa_type (inner_brig_type);
- 
-       unsigned inner_size = gccbrig_hsa_type_bit_size (inner_brig_type);
-       unsigned nunits = full_size / inner_size;
-       tree_type = build_vector_type (inner_type, nunits);
-     }
-   else
-     {
-       switch (brig_type)
- 	{
- 	case BRIG_TYPE_NONE:
- 	  tree_type = void_type_node;
- 	  break;
- 	case BRIG_TYPE_B1:
- 	  tree_type = boolean_type_node;
- 	  break;
- 	case BRIG_TYPE_S8:
- 	case BRIG_TYPE_S16:
- 	case BRIG_TYPE_S32:
- 	case BRIG_TYPE_S64:
- 	  /* Ensure a fixed width integer.  */
- 	  tree_type
- 	    = build_nonstandard_integer_type
- 	    (gccbrig_hsa_type_bit_size (brig_type), false);
- 	  break;
- 	case BRIG_TYPE_U8:
- 	  return unsigned_char_type_node;
- 	case BRIG_TYPE_U16:
- 	case BRIG_TYPE_U32:
- 	case BRIG_TYPE_U64:
- 	case BRIG_TYPE_B8: /* Handle bit vectors as unsigned ints.  */
- 	case BRIG_TYPE_B16:
- 	case BRIG_TYPE_B32:
- 	case BRIG_TYPE_B64:
- 	case BRIG_TYPE_B128:
- 	case BRIG_TYPE_SIG32: /* Handle signals as integers for now.  */
- 	case BRIG_TYPE_SIG64:
- 	  tree_type = build_nonstandard_integer_type
- 	    (gccbrig_hsa_type_bit_size (brig_type), true);
- 	  break;
- 	case BRIG_TYPE_F16:
- 	  tree_type = uint16_type_node;
- 	  break;
- 	case BRIG_TYPE_F32:
- 	  /* TODO: make sure that the alignment of the float are at least as
- 	     strict than mandated by HSA, and conform to IEEE (like mandated
- 	     by HSA).  */
- 	  tree_type = float_type_node;
- 	  break;
- 	case BRIG_TYPE_F64:
- 	  tree_type = double_type_node;
- 	  break;
- 	case BRIG_TYPE_SAMP:
- 	case BRIG_TYPE_ROIMG:
- 	case BRIG_TYPE_WOIMG:
- 	case BRIG_TYPE_RWIMG:
- 	  {
- 	    /* Handle images and samplers as target-specific blobs of data
- 	       that should be allocated earlier on from the runtime side.
- 	       Create a void* that should be initialized to point to the blobs
- 	       by the kernel launcher.  Images and samplers are accessed
- 	       via builtins that take void* as the reference.  TODO: who and
- 	       how these arrays should be initialized?  */
- 	    tree void_ptr = build_pointer_type (void_type_node);
- 	    return void_ptr;
- 	  }
- 	default:
- 	  gcc_unreachable ();
- 	  break;
- 	}
-     }
- 
-   /* Drop const qualifiers.  */
-   return tree_type;
- }
- 
- /* Calculates numeric identifier for the HSA register REG.
- 
-    Returned value is bound to [0, BRIG_2_TREE_HSAIL_TOTAL_REG_COUNT].  */
- 
- size_t
- gccbrig_hsa_reg_id (const BrigOperandRegister &reg)
- {
-   size_t offset = reg.regNum;
-   switch (reg.regKind)
-     {
-     case BRIG_REGISTER_KIND_QUAD:
-       offset
- 	+= BRIG_2_TREE_HSAIL_D_REG_COUNT + BRIG_2_TREE_HSAIL_S_REG_COUNT
- 	+ BRIG_2_TREE_HSAIL_C_REG_COUNT;
-       break;
-     case BRIG_REGISTER_KIND_DOUBLE:
-       offset += BRIG_2_TREE_HSAIL_S_REG_COUNT + BRIG_2_TREE_HSAIL_C_REG_COUNT;
-       break;
-     case BRIG_REGISTER_KIND_SINGLE:
-       offset += BRIG_2_TREE_HSAIL_C_REG_COUNT;
-     case BRIG_REGISTER_KIND_CONTROL:
-       break;
-     default:
-       gcc_unreachable ();
-       break;
-     }
-   return offset;
- }
- 
- std::string
- gccbrig_hsa_reg_name_from_id (size_t reg_id)
- {
-   char reg_name[32];
-   long unsigned int reg_hash = (long unsigned int) reg_id;
-   if (reg_hash < BRIG_2_TREE_HSAIL_C_REG_COUNT)
-     {
-       sprintf (reg_name, "$c%lu", reg_hash);
-       return reg_name;
-     }
- 
-   reg_hash -= BRIG_2_TREE_HSAIL_C_REG_COUNT;
-   if (reg_hash < BRIG_2_TREE_HSAIL_S_REG_COUNT)
-     {
-       sprintf (reg_name, "$s%lu", reg_hash);
-       return reg_name;
-     }
- 
-   reg_hash -= BRIG_2_TREE_HSAIL_S_REG_COUNT;
-   if (reg_hash < BRIG_2_TREE_HSAIL_D_REG_COUNT)
-     {
-       sprintf (reg_name, "$d%lu", reg_hash);
-       return reg_name;
-     }
- 
-    reg_hash -= BRIG_2_TREE_HSAIL_D_REG_COUNT;
-    if (reg_hash < BRIG_2_TREE_HSAIL_Q_REG_COUNT)
-     {
-       sprintf (reg_name, "$q%lu", reg_hash);
-       return reg_name;
-     }
- 
-   gcc_unreachable ();
-   return "$??";
- }
- 
- /* Prints statistics of register usage to stdout.  */
- 
- void
- gccbrig_print_reg_use_info (FILE *dump, const regs_use_index &info)
- {
-   regs_use_index::const_iterator begin_it = info.begin ();
-   regs_use_index::const_iterator end_it = info.end ();
-   for (regs_use_index::const_iterator it = begin_it; it != end_it; it++)
-     {
-       std::string hsa_reg = gccbrig_hsa_reg_name_from_id (it->first);
-       printf ("%s:\n", hsa_reg.c_str ());
-       const reg_use_info &info = it->second;
-       typedef std::vector<std::pair<tree, size_t> >::const_iterator reg_use_it;
-       reg_use_it begin_it2 = info.m_type_refs.begin ();
-       reg_use_it end_it2 = info.m_type_refs.end ();
-       for (reg_use_it it2 = begin_it2; it2 != end_it2; it2++)
- 	{
- 	  fprintf (dump, "(%lu) ", (long unsigned int) it2->second);
- 	  print_node_brief (dump, "", it2->first, 0);
- 	  fprintf (dump, "\n");
- 	}
-     }
- }
- 
- /* Return true if TYPE is a packed HSA type.  */
- 
- bool
- hsa_type_packed_p (BrigType16_t type)
- {
-   return (type & BRIG_TYPE_PACK_MASK) != BRIG_TYPE_PACK_NONE;
- }
- 
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-util.h gcc-12.1.0/gcc/brig/brigfrontend/brig-util.h
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-util.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-util.h	Thu Jan  1 00:00:00 1970
***************
*** 1,120 ****
- /* brig-util.h -- gccbrig utility functions
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #ifndef GCC_BRIG_UTIL_H
- #define GCC_BRIG_UTIL_H
- 
- #include <map>
- #include <vector>
- 
- #include "config.h"
- #include "system.h"
- #include "ansidecl.h"
- #include "coretypes.h"
- #include "opts.h"
- #include "tree.h"
- 
- /* There are 128 c regs and 2048 s/d/q regs each in the HSAIL.  */
- #define BRIG_2_TREE_HSAIL_C_REG_COUNT (128)
- #define BRIG_2_TREE_HSAIL_S_REG_COUNT (2048)
- #define BRIG_2_TREE_HSAIL_D_REG_COUNT (2048)
- #define BRIG_2_TREE_HSAIL_Q_REG_COUNT (2048)
- #define BRIG_2_TREE_HSAIL_TOTAL_REG_COUNT				\
-   (BRIG_2_TREE_HSAIL_C_REG_COUNT + BRIG_2_TREE_HSAIL_S_REG_COUNT	\
-    + BRIG_2_TREE_HSAIL_D_REG_COUNT + BRIG_2_TREE_HSAIL_Q_REG_COUNT)
- 
- /* Helper class for keeping book of group variable offsets.  */
- 
- class group_variable_offset_index
- {
- public:
-   group_variable_offset_index () : m_next_group_offset (0) {}
- 
-   typedef std::map<std::string, size_t> varname_offset_table;
- 
-   bool has_variable (const std::string &name) const;
-   void add (const std::string &name, size_t size, size_t alignment);
-   size_t segment_offset (const std::string &name) const;
-   size_t size () const { return m_next_group_offset; }
- 
- private:
-   size_t m_next_group_offset;
-   varname_offset_table m_group_offsets;
- };
- 
- bool gccbrig_hsa_opcode_op_output_p (BrigOpcode16_t opcode, int opnum);
- 
- unsigned gccbrig_hsa_type_bit_size (BrigType16_t t);
- 
- uint64_t gccbrig_to_uint64_t (const BrigUInt64 &brig_type);
- 
- int gccbrig_reg_size (const BrigOperandRegister *brig_reg);
- 
- std::string gccbrig_reg_name (const BrigOperandRegister *reg);
- 
- std::string gccbrig_type_name (BrigType16_t type);
- 
- std::string gccbrig_segment_name (BrigSegment8_t segment);
- 
- bool gccbrig_is_float_type (BrigType16_t type);
- 
- bool gccbrig_is_bit_operation (BrigOpcode16_t opcode);
- 
- BrigType16_t gccbrig_tree_type_to_hsa_type (tree tree_type);
- tree gccbrig_tree_type_for_hsa_type (BrigType16_t brig_type);
- 
- bool gccbrig_might_be_host_defined_var_p (const BrigDirectiveVariable *brigVar);
- 
- /* From hsa.h.  */
- bool hsa_type_packed_p (BrigType16_t type);
- 
- struct reg_use_info
- {
-   /* This vector keeps count of the times an HSAIL register is used as
-      a tree type in generic expressions.  The count is used to select
-      type for 'register' variables to reduce emission of
-      VIEW_CONVERT_EXPR nodes.  The data is kept in vector (insertion
-      order) for determinism, in a case there is a tie with the
-      counts.  */
-   std::vector<std::pair<tree, size_t> > m_type_refs;
-   /* Tree to index.  Lookup for the above vector.  */
-   std::map<tree, size_t> m_type_refs_lookup;
- };
- 
- /* key = hsa register entry generated by gccbrig_hsa_reg_id ().  */
- typedef std::map<size_t, reg_use_info> regs_use_index;
- 
- size_t gccbrig_hsa_reg_id (const BrigOperandRegister &reg);
- std::string gccbrig_hsa_reg_name_from_id (size_t reg_hash);
- 
- void gccbrig_print_reg_use_info (FILE *dump, const regs_use_index &info);
- 
- /* Return the number of elements in a VECTOR_TYPE.  BRIG does not support
-    variable-length vectors.  */
- inline unsigned HOST_WIDE_INT
- gccbrig_type_vector_subparts (const_tree type)
- {
-   return TYPE_VECTOR_SUBPARTS (type).to_constant ();
- }
- 
- bool hsa_type_packed_p (BrigType16_t type);
- 
- #endif
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/brig-variable-handler.cc gcc-12.1.0/gcc/brig/brigfrontend/brig-variable-handler.cc
*** gcc-11.3.0/gcc/brig/brigfrontend/brig-variable-handler.cc	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/brig-variable-handler.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,270 ****
- /* brig-variable-handler.cc -- brig variable directive handling
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
-    This file is part of GCC.
- 
-    GCC is free software; you can redistribute it and/or modify it under
-    the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 3, or (at your option) any later
-    version.
- 
-    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-    WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
- 
-    You should have received a copy of the GNU General Public License
-    along with GCC; see the file COPYING3.  If not see
-    <http://www.gnu.org/licenses/>.  */
- 
- #include "brig-code-entry-handler.h"
- 
- #include "stringpool.h"
- #include "errors.h"
- #include "brig-machine.h"
- #include "brig-util.h"
- #include "print-tree.h"
- #include "diagnostic-core.h"
- #include "brig-to-generic.h"
- 
- tree
- brig_directive_variable_handler::build_variable
-   (const BrigDirectiveVariable *brigVar, tree_code var_decltype)
- {
-   std::string var_name = m_parent.get_mangled_name (brigVar);
- 
-   bool is_definition = brigVar->modifier & BRIG_VARIABLE_DEFINITION;
- 
-   tree name_identifier = get_identifier (var_name.c_str ());
- 
-   tree var_decl;
-   tree t;
-   if (brigVar->type & BRIG_TYPE_ARRAY)
-     {
-       tree element_type
- 	= gccbrig_tree_type_for_hsa_type (brigVar->type & ~BRIG_TYPE_ARRAY);
-       uint64_t element_count = gccbrig_to_uint64_t (brigVar->dim);
-       if (is_definition && element_count == 0)
- 	fatal_error (UNKNOWN_LOCATION, "Array definition with zero elements.");
-       if (var_decltype == PARM_DECL)
- 	t = build_pointer_type (element_type);
-       else
- 	t = build_array_type_nelts (element_type, element_count);
-     }
-   else
-     {
-       t = gccbrig_tree_type_for_hsa_type (brigVar->type);
-     }
- 
-   size_t alignment = get_brig_var_alignment (brigVar);
- 
-   if (brigVar->segment == BRIG_SEGMENT_READONLY
-       || brigVar->segment == BRIG_SEGMENT_KERNARG
-       || (brigVar->modifier & BRIG_VARIABLE_CONST))
-     TYPE_READONLY (t) = 1;
- 
-   TYPE_ADDR_SPACE (t) = gccbrig_get_target_addr_space_id (brigVar->segment);
- 
-   var_decl = build_decl (UNKNOWN_LOCATION, var_decltype, name_identifier, t);
- 
-   SET_DECL_ALIGN (var_decl, alignment * BITS_PER_UNIT);
- 
-   /* Force the HSA alignments.  */
-   DECL_USER_ALIGN (var_decl) = 1;
- 
-   TREE_USED (var_decl) = 1;
- 
-   TREE_PUBLIC (var_decl) = 1;
-   if (is_definition)
-     DECL_EXTERNAL (var_decl) = 0;
-   else
-     DECL_EXTERNAL (var_decl) = 1; /* The definition is elsewhere.  */
- 
-   if (brigVar->init != 0)
-     {
-       gcc_assert (brigVar->segment == BRIG_SEGMENT_READONLY
- 		  || brigVar->segment == BRIG_SEGMENT_GLOBAL);
- 
-       const BrigBase *cst_operand_data
- 	= m_parent.get_brig_operand_entry (brigVar->init);
- 
-       tree initializer = NULL_TREE;
-       if (cst_operand_data->kind == BRIG_KIND_OPERAND_CONSTANT_BYTES)
- 	initializer = get_tree_cst_for_hsa_operand
- 	  ((const BrigOperandConstantBytes *) cst_operand_data, t);
-       else
- 	error ("variable initializers of type %x not implemented",
- 	       cst_operand_data->kind);
-       gcc_assert (initializer != NULL_TREE);
-       DECL_INITIAL (var_decl) = initializer;
-     }
- 
-   if (var_decltype == PARM_DECL)
-     {
-       DECL_ARG_TYPE (var_decl) = TREE_TYPE (var_decl);
-       DECL_EXTERNAL (var_decl) = 0;
-       TREE_PUBLIC (var_decl) = 0;
-     }
- 
-   TREE_ADDRESSABLE (var_decl) = 1;
- 
-   TREE_USED (var_decl) = 1;
-   DECL_NONLOCAL (var_decl) = 1;
-   DECL_ARTIFICIAL (var_decl) = 0;
- 
-   return var_decl;
- }
- 
- size_t
- brig_directive_variable_handler::operator () (const BrigBase *base)
- {
-   const BrigDirectiveVariable *brigVar = (const BrigDirectiveVariable *) base;
- 
-   bool is_definition = brigVar->modifier & BRIG_VARIABLE_DEFINITION;
- 
-   size_t var_size;
-   tree var_type;
-   if (brigVar->type & BRIG_TYPE_ARRAY)
-     {
-       tree element_type
- 	= gccbrig_tree_type_for_hsa_type (brigVar->type & ~BRIG_TYPE_ARRAY);
-       uint64_t element_count = gccbrig_to_uint64_t (brigVar->dim);
-       if (is_definition && element_count == 0)
- 	fatal_error (UNKNOWN_LOCATION, "Array definition with zero elements.");
-       var_type = build_array_type_nelts (element_type, element_count);
-       size_t element_size = tree_to_uhwi (TYPE_SIZE (element_type));
-       var_size = element_size * element_count / 8;
-     }
-   else
-     {
-       var_type = gccbrig_tree_type_for_hsa_type (brigVar->type);
-       var_size = tree_to_uhwi (TYPE_SIZE (var_type)) / 8;
-     }
- 
-   size_t alignment = get_brig_var_alignment (brigVar);
- 
-   bool function_scope = m_parent.m_cf != NULL;
- 
-   if (function_scope)
-     m_parent.m_cf->m_function_scope_vars.insert (base);
- 
-   std::string var_name = m_parent.get_mangled_name (brigVar);
-   if (brigVar->segment == BRIG_SEGMENT_GROUP)
-     {
-       /* Non-kernel scope group variables have been added at the
- 	 'analyze' stage.  */
-       m_parent.add_group_variable (var_name, var_size, alignment,
- 				   function_scope);
-       return base->byteCount;
-     }
- 
-   /* During analyze, handle only (module scope) group variables.  */
-   if (m_parent.m_analyzing)
-     return base->byteCount;
- 
-   if (brigVar->segment == BRIG_SEGMENT_KERNARG)
-     {
-       /* Do not create a real variable, but only a table of
- 	 offsets to the kernarg segment buffer passed as the
- 	 single argument by the kernel launcher for later
- 	 reference.  Ignore kernel declarations.  */
-       if (m_parent.m_cf != NULL && m_parent.m_cf->m_func_decl != NULL_TREE)
- 	m_parent.m_cf->append_kernel_arg (brigVar, var_size, alignment);
-       return base->byteCount;
-     }
-   else if (brigVar->segment == BRIG_SEGMENT_PRIVATE
- 	   || brigVar->segment == BRIG_SEGMENT_SPILL)
-     {
-       /* Private variables are handled like group variables,
- 	 except that their offsets are multiplied by the work-item
- 	 flat id, when accessed.  */
-       if (!m_parent.has_private_variable (var_name))
- 	m_parent.append_private_variable (var_name, var_size, alignment);
-       return base->byteCount;
-     }
-   else if (brigVar->segment == BRIG_SEGMENT_GLOBAL
- 	   || brigVar->segment == BRIG_SEGMENT_READONLY)
-     {
-       tree def = is_definition ? NULL_TREE :
- 	m_parent.global_variable (var_name);
- 
-       if (!is_definition && def != NULL_TREE)
- 	{
- 	  /* We have a definition already for this declaration.
- 	     Use the definition instead of the declaration.  */
- 	}
-       else if (gccbrig_might_be_host_defined_var_p (brigVar))
- 	{
- 	  tree var_decl = build_variable (brigVar);
- 	  m_parent.add_host_def_var_ptr (var_name, var_decl);
- 	}
-       else
- 	{
- 	  tree var_decl = build_variable (brigVar);
- 	  /* Make all global variables program scope for now
- 	     so we can get their address from the Runtime API.  */
- 	  DECL_CONTEXT (var_decl) = NULL_TREE;
- 	  TREE_STATIC (var_decl) = 1;
- 	  TREE_PUBLIC (var_decl) = 1;
- 	  set_externally_visible (var_decl);
- 	  m_parent.add_global_variable (var_name, var_decl);
- 	}
-     }
-   else if (brigVar->segment == BRIG_SEGMENT_ARG)
-     {
- 
-       if (m_parent.m_cf->m_generating_arg_block)
- 	{
- 	  tree var_decl = build_variable (brigVar);
- 	  tree bind_expr = m_parent.m_cf->m_current_bind_expr;
- 
- 	  DECL_CONTEXT (var_decl) = m_parent.m_cf->m_func_decl;
- 	  DECL_CHAIN (var_decl) = BIND_EXPR_VARS (bind_expr);
- 	  BIND_EXPR_VARS (bind_expr) = var_decl;
- 	  TREE_PUBLIC (var_decl) = 0;
- 
- 	  m_parent.m_cf->add_arg_variable (brigVar, var_decl);
- 	}
-       else
- 	{
- 	  /* Must be an incoming function argument which has
- 	     been parsed in brig-function-handler.cc.  No
- 	     need to generate anything here.  */
- 	}
-     }
-   else
-     gcc_unreachable ();
- 
-   return base->byteCount;
- }
- 
- /* Returns the alignment for the given BRIG variable.  In case the variable
-    explicitly defines alignment and its larger than the natural alignment,
-    returns it instead of the natural one.  */
- 
- size_t
- brig_directive_variable_handler::get_brig_var_alignment
- (const BrigDirectiveVariable *brigVar)
- {
- 
-   size_t defined_alignment
-     = brigVar->align == BRIG_ALIGNMENT_NONE ? 0 : 1 << (brigVar->align - 1);
-   size_t natural_alignment;
-   if (brigVar->type & BRIG_TYPE_ARRAY)
-     {
-       tree element_type
- 	= gccbrig_tree_type_for_hsa_type (brigVar->type & ~BRIG_TYPE_ARRAY);
-       size_t element_size = tree_to_uhwi (TYPE_SIZE (element_type));
-       natural_alignment = element_size / BITS_PER_UNIT;
-     }
-   else
-     {
-       tree t = gccbrig_tree_type_for_hsa_type (brigVar->type);
-       natural_alignment = tree_to_uhwi (TYPE_SIZE (t)) / BITS_PER_UNIT;
-     }
- 
-   return natural_alignment > defined_alignment
-     ? natural_alignment : defined_alignment;
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/hsa-brig-format.h gcc-12.1.0/gcc/brig/brigfrontend/hsa-brig-format.h
*** gcc-11.3.0/gcc/brig/brigfrontend/hsa-brig-format.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/hsa-brig-format.h	Thu Jan  1 00:00:00 1970
***************
*** 1,1234 ****
- /* HSA BRIG (binary representation of HSAIL) 1.0.1 representation description.
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
- 
- GCC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.
- 
- The contents of the file was created by extracting data structures, enum,
- typedef and other definitions from HSA Programmer's Reference Manual Version
- 1.0.1 (http://www.hsafoundation.com/standards/).
- 
- HTML version is provided on the following link:
- http://www.hsafoundation.com/html/Content/PRM/Topics/PRM_title_page.htm */
- 
- #ifndef HSA_BRIG_FORMAT_H
- #define HSA_BRIG_FORMAT_H
- 
- struct BrigModuleHeader;
- typedef uint16_t BrigKind16_t;
- typedef uint32_t BrigVersion32_t;
- 
- typedef BrigModuleHeader *BrigModule_t;
- typedef uint32_t BrigDataOffset32_t;
- typedef uint32_t BrigCodeOffset32_t;
- typedef uint32_t BrigOperandOffset32_t;
- typedef BrigDataOffset32_t BrigDataOffsetString32_t;
- typedef BrigDataOffset32_t BrigDataOffsetCodeList32_t;
- typedef BrigDataOffset32_t BrigDataOffsetOperandList32_t;
- typedef uint8_t BrigAlignment8_t;
- 
- enum BrigAlignment
- {
-   BRIG_ALIGNMENT_NONE = 0,
-   BRIG_ALIGNMENT_1 = 1,
-   BRIG_ALIGNMENT_2 = 2,
-   BRIG_ALIGNMENT_4 = 3,
-   BRIG_ALIGNMENT_8 = 4,
-   BRIG_ALIGNMENT_16 = 5,
-   BRIG_ALIGNMENT_32 = 6,
-   BRIG_ALIGNMENT_64 = 7,
-   BRIG_ALIGNMENT_128 = 8,
-   BRIG_ALIGNMENT_256 = 9
- };
- 
- typedef uint8_t BrigAllocation8_t;
- 
- enum BrigAllocation
- {
-   BRIG_ALLOCATION_NONE = 0,
-   BRIG_ALLOCATION_PROGRAM = 1,
-   BRIG_ALLOCATION_AGENT = 2,
-   BRIG_ALLOCATION_AUTOMATIC = 3
- };
- 
- typedef uint8_t BrigAluModifier8_t;
- 
- enum BrigAluModifierMask
- {
-   BRIG_ALU_FTZ = 1
- };
- 
- typedef uint8_t BrigAtomicOperation8_t;
- 
- enum BrigAtomicOperation
- {
-   BRIG_ATOMIC_ADD = 0,
-   BRIG_ATOMIC_AND = 1,
-   BRIG_ATOMIC_CAS = 2,
-   BRIG_ATOMIC_EXCH = 3,
-   BRIG_ATOMIC_LD = 4,
-   BRIG_ATOMIC_MAX = 5,
-   BRIG_ATOMIC_MIN = 6,
-   BRIG_ATOMIC_OR = 7,
-   BRIG_ATOMIC_ST = 8,
-   BRIG_ATOMIC_SUB = 9,
-   BRIG_ATOMIC_WRAPDEC = 10,
-   BRIG_ATOMIC_WRAPINC = 11,
-   BRIG_ATOMIC_XOR = 12,
-   BRIG_ATOMIC_WAIT_EQ = 13,
-   BRIG_ATOMIC_WAIT_NE = 14,
-   BRIG_ATOMIC_WAIT_LT = 15,
-   BRIG_ATOMIC_WAIT_GTE = 16,
-   BRIG_ATOMIC_WAITTIMEOUT_EQ = 17,
-   BRIG_ATOMIC_WAITTIMEOUT_NE = 18,
-   BRIG_ATOMIC_WAITTIMEOUT_LT = 19,
-   BRIG_ATOMIC_WAITTIMEOUT_GTE = 20
- };
- 
- struct BrigBase
- {
-   uint16_t byteCount;
-   BrigKind16_t kind;
- };
- 
- typedef uint8_t BrigCompareOperation8_t;
- 
- enum BrigCompareOperation
- {
-   BRIG_COMPARE_EQ = 0,
-   BRIG_COMPARE_NE = 1,
-   BRIG_COMPARE_LT = 2,
-   BRIG_COMPARE_LE = 3,
-   BRIG_COMPARE_GT = 4,
-   BRIG_COMPARE_GE = 5,
-   BRIG_COMPARE_EQU = 6,
-   BRIG_COMPARE_NEU = 7,
-   BRIG_COMPARE_LTU = 8,
-   BRIG_COMPARE_LEU = 9,
-   BRIG_COMPARE_GTU = 10,
-   BRIG_COMPARE_GEU = 11,
-   BRIG_COMPARE_NUM = 12,
-   BRIG_COMPARE_NAN = 13,
-   BRIG_COMPARE_SEQ = 14,
-   BRIG_COMPARE_SNE = 15,
-   BRIG_COMPARE_SLT = 16,
-   BRIG_COMPARE_SLE = 17,
-   BRIG_COMPARE_SGT = 18,
-   BRIG_COMPARE_SGE = 19,
-   BRIG_COMPARE_SGEU = 20,
-   BRIG_COMPARE_SEQU = 21,
-   BRIG_COMPARE_SNEU = 22,
-   BRIG_COMPARE_SLTU = 23,
-   BRIG_COMPARE_SLEU = 24,
-   BRIG_COMPARE_SNUM = 25,
-   BRIG_COMPARE_SNAN = 26,
-   BRIG_COMPARE_SGTU = 27
- };
- 
- typedef uint16_t BrigControlDirective16_t;
- 
- enum BrigControlDirective
- {
-   BRIG_CONTROL_NONE = 0,
-   BRIG_CONTROL_ENABLEBREAKEXCEPTIONS = 1,
-   BRIG_CONTROL_ENABLEDETECTEXCEPTIONS = 2,
-   BRIG_CONTROL_MAXDYNAMICGROUPSIZE = 3,
-   BRIG_CONTROL_MAXFLATGRIDSIZE = 4,
-   BRIG_CONTROL_MAXFLATWORKGROUPSIZE = 5,
-   BRIG_CONTROL_REQUIREDDIM = 6,
-   BRIG_CONTROL_REQUIREDGRIDSIZE = 7,
-   BRIG_CONTROL_REQUIREDWORKGROUPSIZE = 8,
-   BRIG_CONTROL_REQUIRENOPARTIALWORKGROUPS = 9
- };
- 
- typedef uint32_t BrigExceptions32_t;
- 
- enum BrigExceptionsMask
- {
-   BRIG_EXCEPTIONS_INVALID_OPERATION = 1 << 0,
-   BRIG_EXCEPTIONS_DIVIDE_BY_ZERO = 1 << 1,
-   BRIG_EXCEPTIONS_OVERFLOW = 1 << 2,
-   BRIG_EXCEPTIONS_UNDERFLOW = 1 << 3,
-   BRIG_EXCEPTIONS_INEXACT = 1 << 4,
-   BRIG_EXCEPTIONS_FIRST_USER_DEFINED = 1 << 16
- };
- 
- typedef uint8_t BrigExecutableModifier8_t;
- 
- enum BrigExecutableModifierMask
- {
-   BRIG_EXECUTABLE_DEFINITION = 1
- };
- 
- typedef uint8_t BrigImageChannelOrder8_t;
- 
- enum BrigImageChannelOrder
- {
-   BRIG_CHANNEL_ORDER_A = 0,
-   BRIG_CHANNEL_ORDER_R = 1,
-   BRIG_CHANNEL_ORDER_RX = 2,
-   BRIG_CHANNEL_ORDER_RG = 3,
-   BRIG_CHANNEL_ORDER_RGX = 4,
-   BRIG_CHANNEL_ORDER_RA = 5,
-   BRIG_CHANNEL_ORDER_RGB = 6,
-   BRIG_CHANNEL_ORDER_RGBX = 7,
-   BRIG_CHANNEL_ORDER_RGBA = 8,
-   BRIG_CHANNEL_ORDER_BGRA = 9,
-   BRIG_CHANNEL_ORDER_ARGB = 10,
-   BRIG_CHANNEL_ORDER_ABGR = 11,
-   BRIG_CHANNEL_ORDER_SRGB = 12,
-   BRIG_CHANNEL_ORDER_SRGBX = 13,
-   BRIG_CHANNEL_ORDER_SRGBA = 14,
-   BRIG_CHANNEL_ORDER_SBGRA = 15,
-   BRIG_CHANNEL_ORDER_INTENSITY = 16,
-   BRIG_CHANNEL_ORDER_LUMINANCE = 17,
-   BRIG_CHANNEL_ORDER_DEPTH = 18,
-   BRIG_CHANNEL_ORDER_DEPTH_STENCIL = 19,
-   BRIG_CHANNEL_ORDER_FIRST_USER_DEFINED = 128
- };
- 
- typedef uint8_t BrigImageChannelType8_t;
- 
- enum BrigImageChannelType
- {
-   BRIG_CHANNEL_TYPE_SNORM_INT8 = 0,
-   BRIG_CHANNEL_TYPE_SNORM_INT16 = 1,
-   BRIG_CHANNEL_TYPE_UNORM_INT8 = 2,
-   BRIG_CHANNEL_TYPE_UNORM_INT16 = 3,
-   BRIG_CHANNEL_TYPE_UNORM_INT24 = 4,
-   BRIG_CHANNEL_TYPE_UNORM_SHORT_555 = 5,
-   BRIG_CHANNEL_TYPE_UNORM_SHORT_565 = 6,
-   BRIG_CHANNEL_TYPE_UNORM_INT_101010 = 7,
-   BRIG_CHANNEL_TYPE_SIGNED_INT8 = 8,
-   BRIG_CHANNEL_TYPE_SIGNED_INT16 = 9,
-   BRIG_CHANNEL_TYPE_SIGNED_INT32 = 10,
-   BRIG_CHANNEL_TYPE_UNSIGNED_INT8 = 11,
-   BRIG_CHANNEL_TYPE_UNSIGNED_INT16 = 12,
-   BRIG_CHANNEL_TYPE_UNSIGNED_INT32 = 13,
-   BRIG_CHANNEL_TYPE_HALF_FLOAT = 14,
-   BRIG_CHANNEL_TYPE_FLOAT = 15,
-   BRIG_CHANNEL_TYPE_FIRST_USER_DEFINED = 128
- };
- 
- typedef uint8_t BrigImageGeometry8_t;
- 
- enum BrigImageGeometry
- {
-   BRIG_GEOMETRY_1D = 0,
-   BRIG_GEOMETRY_2D = 1,
-   BRIG_GEOMETRY_3D = 2,
-   BRIG_GEOMETRY_1DA = 3,
-   BRIG_GEOMETRY_2DA = 4,
-   BRIG_GEOMETRY_1DB = 5,
-   BRIG_GEOMETRY_2DDEPTH = 6,
-   BRIG_GEOMETRY_2DADEPTH = 7,
-   BRIG_GEOMETRY_FIRST_USER_DEFINED = 128
- };
- 
- typedef uint8_t BrigImageQuery8_t;
- 
- enum BrigImageQuery
- {
-   BRIG_IMAGE_QUERY_WIDTH = 0,
-   BRIG_IMAGE_QUERY_HEIGHT = 1,
-   BRIG_IMAGE_QUERY_DEPTH = 2,
-   BRIG_IMAGE_QUERY_ARRAY = 3,
-   BRIG_IMAGE_QUERY_CHANNELORDER = 4,
-   BRIG_IMAGE_QUERY_CHANNELTYPE = 5
- };
- 
- enum BrigKind
- {
-   BRIG_KIND_NONE = 0x0000,
-   BRIG_KIND_DIRECTIVE_BEGIN = 0x1000,
-   BRIG_KIND_DIRECTIVE_ARG_BLOCK_END = 0x1000,
-   BRIG_KIND_DIRECTIVE_ARG_BLOCK_START = 0x1001,
-   BRIG_KIND_DIRECTIVE_COMMENT = 0x1002,
-   BRIG_KIND_DIRECTIVE_CONTROL = 0x1003,
-   BRIG_KIND_DIRECTIVE_EXTENSION = 0x1004,
-   BRIG_KIND_DIRECTIVE_FBARRIER = 0x1005,
-   BRIG_KIND_DIRECTIVE_FUNCTION = 0x1006,
-   BRIG_KIND_DIRECTIVE_INDIRECT_FUNCTION = 0x1007,
-   BRIG_KIND_DIRECTIVE_KERNEL = 0x1008,
-   BRIG_KIND_DIRECTIVE_LABEL = 0x1009,
-   BRIG_KIND_DIRECTIVE_LOC = 0x100a,
-   BRIG_KIND_DIRECTIVE_MODULE = 0x100b,
-   BRIG_KIND_DIRECTIVE_PRAGMA = 0x100c,
-   BRIG_KIND_DIRECTIVE_SIGNATURE = 0x100d,
-   BRIG_KIND_DIRECTIVE_VARIABLE = 0x100e,
-   BRIG_KIND_DIRECTIVE_END = 0x100f,
-   BRIG_KIND_INST_BEGIN = 0x2000,
-   BRIG_KIND_INST_ADDR = 0x2000,
-   BRIG_KIND_INST_ATOMIC = 0x2001,
-   BRIG_KIND_INST_BASIC = 0x2002,
-   BRIG_KIND_INST_BR = 0x2003,
-   BRIG_KIND_INST_CMP = 0x2004,
-   BRIG_KIND_INST_CVT = 0x2005,
-   BRIG_KIND_INST_IMAGE = 0x2006,
-   BRIG_KIND_INST_LANE = 0x2007,
-   BRIG_KIND_INST_MEM = 0x2008,
-   BRIG_KIND_INST_MEM_FENCE = 0x2009,
-   BRIG_KIND_INST_MOD = 0x200a,
-   BRIG_KIND_INST_QUERY_IMAGE = 0x200b,
-   BRIG_KIND_INST_QUERY_SAMPLER = 0x200c,
-   BRIG_KIND_INST_QUEUE = 0x200d,
-   BRIG_KIND_INST_SEG = 0x200e,
-   BRIG_KIND_INST_SEG_CVT = 0x200f,
-   BRIG_KIND_INST_SIGNAL = 0x2010,
-   BRIG_KIND_INST_SOURCE_TYPE = 0x2011,
-   BRIG_KIND_INST_END = 0x2012,
-   BRIG_KIND_OPERAND_BEGIN = 0x3000,
-   BRIG_KIND_OPERAND_ADDRESS = 0x3000,
-   BRIG_KIND_OPERAND_ALIGN = 0x3001,
-   BRIG_KIND_OPERAND_CODE_LIST = 0x3002,
-   BRIG_KIND_OPERAND_CODE_REF = 0x3003,
-   BRIG_KIND_OPERAND_CONSTANT_BYTES = 0x3004,
-   BRIG_KIND_OPERAND_RESERVED = 0x3005,
-   BRIG_KIND_OPERAND_CONSTANT_IMAGE = 0x3006,
-   BRIG_KIND_OPERAND_CONSTANT_OPERAND_LIST = 0x3007,
-   BRIG_KIND_OPERAND_CONSTANT_SAMPLER = 0x3008,
-   BRIG_KIND_OPERAND_OPERAND_LIST = 0x3009,
-   BRIG_KIND_OPERAND_REGISTER = 0x300a,
-   BRIG_KIND_OPERAND_STRING = 0x300b,
-   BRIG_KIND_OPERAND_WAVESIZE = 0x300c,
-   BRIG_KIND_OPERAND_END = 0x300d
- };
- 
- typedef uint8_t BrigLinkage8_t;
- 
- enum BrigLinkage
- {
-   BRIG_LINKAGE_NONE = 0,
-   BRIG_LINKAGE_PROGRAM = 1,
-   BRIG_LINKAGE_MODULE = 2,
-   BRIG_LINKAGE_FUNCTION = 3,
-   BRIG_LINKAGE_ARG = 4
- };
- 
- typedef uint8_t BrigMachineModel8_t;
- 
- enum BrigMachineModel
- {
-   BRIG_MACHINE_SMALL = 0,
-   BRIG_MACHINE_LARGE = 1
- };
- 
- typedef uint8_t BrigMemoryModifier8_t;
- 
- enum BrigMemoryModifierMask
- {
-   BRIG_MEMORY_CONST = 1
- };
- 
- typedef uint8_t BrigMemoryOrder8_t;
- 
- enum BrigMemoryOrder
- {
-   BRIG_MEMORY_ORDER_NONE = 0,
-   BRIG_MEMORY_ORDER_RELAXED = 1,
-   BRIG_MEMORY_ORDER_SC_ACQUIRE = 2,
-   BRIG_MEMORY_ORDER_SC_RELEASE = 3,
-   BRIG_MEMORY_ORDER_SC_ACQUIRE_RELEASE = 4
- };
- 
- typedef uint8_t BrigMemoryScope8_t;
- 
- enum BrigMemoryScope
- {
-   BRIG_MEMORY_SCOPE_NONE = 0,
-   BRIG_MEMORY_SCOPE_WORKITEM = 1,
-   BRIG_MEMORY_SCOPE_WAVEFRONT = 2,
-   BRIG_MEMORY_SCOPE_WORKGROUP = 3,
-   BRIG_MEMORY_SCOPE_AGENT = 4,
-   BRIG_MEMORY_SCOPE_SYSTEM = 5
- };
- 
- struct BrigModuleHeader
- {
-   char identification[8];
-   BrigVersion32_t brigMajor;
-   BrigVersion32_t brigMinor;
-   uint64_t byteCount;
-   uint8_t hash[64];
-   uint32_t reserved;
-   uint32_t sectionCount;
-   uint64_t sectionIndex;
- };
- 
- typedef uint16_t BrigOpcode16_t;
- 
- enum BrigOpcode
- {
-   BRIG_OPCODE_NOP = 0,
-   BRIG_OPCODE_ABS = 1,
-   BRIG_OPCODE_ADD = 2,
-   BRIG_OPCODE_BORROW = 3,
-   BRIG_OPCODE_CARRY = 4,
-   BRIG_OPCODE_CEIL = 5,
-   BRIG_OPCODE_COPYSIGN = 6,
-   BRIG_OPCODE_DIV = 7,
-   BRIG_OPCODE_FLOOR = 8,
-   BRIG_OPCODE_FMA = 9,
-   BRIG_OPCODE_FRACT = 10,
-   BRIG_OPCODE_MAD = 11,
-   BRIG_OPCODE_MAX = 12,
-   BRIG_OPCODE_MIN = 13,
-   BRIG_OPCODE_MUL = 14,
-   BRIG_OPCODE_MULHI = 15,
-   BRIG_OPCODE_NEG = 16,
-   BRIG_OPCODE_REM = 17,
-   BRIG_OPCODE_RINT = 18,
-   BRIG_OPCODE_SQRT = 19,
-   BRIG_OPCODE_SUB = 20,
-   BRIG_OPCODE_TRUNC = 21,
-   BRIG_OPCODE_MAD24 = 22,
-   BRIG_OPCODE_MAD24HI = 23,
-   BRIG_OPCODE_MUL24 = 24,
-   BRIG_OPCODE_MUL24HI = 25,
-   BRIG_OPCODE_SHL = 26,
-   BRIG_OPCODE_SHR = 27,
-   BRIG_OPCODE_AND = 28,
-   BRIG_OPCODE_NOT = 29,
-   BRIG_OPCODE_OR = 30,
-   BRIG_OPCODE_POPCOUNT = 31,
-   BRIG_OPCODE_XOR = 32,
-   BRIG_OPCODE_BITEXTRACT = 33,
-   BRIG_OPCODE_BITINSERT = 34,
-   BRIG_OPCODE_BITMASK = 35,
-   BRIG_OPCODE_BITREV = 36,
-   BRIG_OPCODE_BITSELECT = 37,
-   BRIG_OPCODE_FIRSTBIT = 38,
-   BRIG_OPCODE_LASTBIT = 39,
-   BRIG_OPCODE_COMBINE = 40,
-   BRIG_OPCODE_EXPAND = 41,
-   BRIG_OPCODE_LDA = 42,
-   BRIG_OPCODE_MOV = 43,
-   BRIG_OPCODE_SHUFFLE = 44,
-   BRIG_OPCODE_UNPACKHI = 45,
-   BRIG_OPCODE_UNPACKLO = 46,
-   BRIG_OPCODE_PACK = 47,
-   BRIG_OPCODE_UNPACK = 48,
-   BRIG_OPCODE_CMOV = 49,
-   BRIG_OPCODE_CLASS = 50,
-   BRIG_OPCODE_NCOS = 51,
-   BRIG_OPCODE_NEXP2 = 52,
-   BRIG_OPCODE_NFMA = 53,
-   BRIG_OPCODE_NLOG2 = 54,
-   BRIG_OPCODE_NRCP = 55,
-   BRIG_OPCODE_NRSQRT = 56,
-   BRIG_OPCODE_NSIN = 57,
-   BRIG_OPCODE_NSQRT = 58,
-   BRIG_OPCODE_BITALIGN = 59,
-   BRIG_OPCODE_BYTEALIGN = 60,
-   BRIG_OPCODE_PACKCVT = 61,
-   BRIG_OPCODE_UNPACKCVT = 62,
-   BRIG_OPCODE_LERP = 63,
-   BRIG_OPCODE_SAD = 64,
-   BRIG_OPCODE_SADHI = 65,
-   BRIG_OPCODE_SEGMENTP = 66,
-   BRIG_OPCODE_FTOS = 67,
-   BRIG_OPCODE_STOF = 68,
-   BRIG_OPCODE_CMP = 69,
-   BRIG_OPCODE_CVT = 70,
-   BRIG_OPCODE_LD = 71,
-   BRIG_OPCODE_ST = 72,
-   BRIG_OPCODE_ATOMIC = 73,
-   BRIG_OPCODE_ATOMICNORET = 74,
-   BRIG_OPCODE_SIGNAL = 75,
-   BRIG_OPCODE_SIGNALNORET = 76,
-   BRIG_OPCODE_MEMFENCE = 77,
-   BRIG_OPCODE_RDIMAGE = 78,
-   BRIG_OPCODE_LDIMAGE = 79,
-   BRIG_OPCODE_STIMAGE = 80,
-   BRIG_OPCODE_IMAGEFENCE = 81,
-   BRIG_OPCODE_QUERYIMAGE = 82,
-   BRIG_OPCODE_QUERYSAMPLER = 83,
-   BRIG_OPCODE_CBR = 84,
-   BRIG_OPCODE_BR = 85,
-   BRIG_OPCODE_SBR = 86,
-   BRIG_OPCODE_BARRIER = 87,
-   BRIG_OPCODE_WAVEBARRIER = 88,
-   BRIG_OPCODE_ARRIVEFBAR = 89,
-   BRIG_OPCODE_INITFBAR = 90,
-   BRIG_OPCODE_JOINFBAR = 91,
-   BRIG_OPCODE_LEAVEFBAR = 92,
-   BRIG_OPCODE_RELEASEFBAR = 93,
-   BRIG_OPCODE_WAITFBAR = 94,
-   BRIG_OPCODE_LDF = 95,
-   BRIG_OPCODE_ACTIVELANECOUNT = 96,
-   BRIG_OPCODE_ACTIVELANEID = 97,
-   BRIG_OPCODE_ACTIVELANEMASK = 98,
-   BRIG_OPCODE_ACTIVELANEPERMUTE = 99,
-   BRIG_OPCODE_CALL = 100,
-   BRIG_OPCODE_SCALL = 101,
-   BRIG_OPCODE_ICALL = 102,
-   BRIG_OPCODE_RET = 103,
-   BRIG_OPCODE_ALLOCA = 104,
-   BRIG_OPCODE_CURRENTWORKGROUPSIZE = 105,
-   BRIG_OPCODE_CURRENTWORKITEMFLATID = 106,
-   BRIG_OPCODE_DIM = 107,
-   BRIG_OPCODE_GRIDGROUPS = 108,
-   BRIG_OPCODE_GRIDSIZE = 109,
-   BRIG_OPCODE_PACKETCOMPLETIONSIG = 110,
-   BRIG_OPCODE_PACKETID = 111,
-   BRIG_OPCODE_WORKGROUPID = 112,
-   BRIG_OPCODE_WORKGROUPSIZE = 113,
-   BRIG_OPCODE_WORKITEMABSID = 114,
-   BRIG_OPCODE_WORKITEMFLATABSID = 115,
-   BRIG_OPCODE_WORKITEMFLATID = 116,
-   BRIG_OPCODE_WORKITEMID = 117,
-   BRIG_OPCODE_CLEARDETECTEXCEPT = 118,
-   BRIG_OPCODE_GETDETECTEXCEPT = 119,
-   BRIG_OPCODE_SETDETECTEXCEPT = 120,
-   BRIG_OPCODE_ADDQUEUEWRITEINDEX = 121,
-   BRIG_OPCODE_CASQUEUEWRITEINDEX = 122,
-   BRIG_OPCODE_LDQUEUEREADINDEX = 123,
-   BRIG_OPCODE_LDQUEUEWRITEINDEX = 124,
-   BRIG_OPCODE_STQUEUEREADINDEX = 125,
-   BRIG_OPCODE_STQUEUEWRITEINDEX = 126,
-   BRIG_OPCODE_CLOCK = 127,
-   BRIG_OPCODE_CUID = 128,
-   BRIG_OPCODE_DEBUGTRAP = 129,
-   BRIG_OPCODE_GROUPBASEPTR = 130,
-   BRIG_OPCODE_KERNARGBASEPTR = 131,
-   BRIG_OPCODE_LANEID = 132,
-   BRIG_OPCODE_MAXCUID = 133,
-   BRIG_OPCODE_MAXWAVEID = 134,
-   BRIG_OPCODE_NULLPTR = 135,
-   BRIG_OPCODE_WAVEID = 136,
-   BRIG_OPCODE_FIRST_USER_DEFINED = 32768
- };
- 
- typedef uint8_t BrigPack8_t;
- 
- enum BrigPack
- {
-   BRIG_PACK_NONE = 0,
-   BRIG_PACK_PP = 1,
-   BRIG_PACK_PS = 2,
-   BRIG_PACK_SP = 3,
-   BRIG_PACK_SS = 4,
-   BRIG_PACK_S = 5,
-   BRIG_PACK_P = 6,
-   BRIG_PACK_PPSAT = 7,
-   BRIG_PACK_PSSAT = 8,
-   BRIG_PACK_SPSAT = 9,
-   BRIG_PACK_SSSAT = 10,
-   BRIG_PACK_SSAT = 11,
-   BRIG_PACK_PSAT = 12
- };
- 
- typedef uint8_t BrigProfile8_t;
- 
- enum BrigProfile
- {
-   BRIG_PROFILE_BASE = 0,
-   BRIG_PROFILE_FULL = 1
- };
- 
- typedef uint16_t BrigRegisterKind16_t;
- 
- enum BrigRegisterKind
- {
-   BRIG_REGISTER_KIND_CONTROL = 0,
-   BRIG_REGISTER_KIND_SINGLE = 1,
-   BRIG_REGISTER_KIND_DOUBLE = 2,
-   BRIG_REGISTER_KIND_QUAD = 3
- };
- 
- typedef uint8_t BrigRound8_t;
- 
- enum BrigRound
- {
-   BRIG_ROUND_NONE = 0,
-   BRIG_ROUND_FLOAT_DEFAULT = 1,
-   BRIG_ROUND_FLOAT_NEAR_EVEN = 2,
-   BRIG_ROUND_FLOAT_ZERO = 3,
-   BRIG_ROUND_FLOAT_PLUS_INFINITY = 4,
-   BRIG_ROUND_FLOAT_MINUS_INFINITY = 5,
-   BRIG_ROUND_INTEGER_NEAR_EVEN = 6,
-   BRIG_ROUND_INTEGER_ZERO = 7,
-   BRIG_ROUND_INTEGER_PLUS_INFINITY = 8,
-   BRIG_ROUND_INTEGER_MINUS_INFINITY = 9,
-   BRIG_ROUND_INTEGER_NEAR_EVEN_SAT = 10,
-   BRIG_ROUND_INTEGER_ZERO_SAT = 11,
-   BRIG_ROUND_INTEGER_PLUS_INFINITY_SAT = 12,
-   BRIG_ROUND_INTEGER_MINUS_INFINITY_SAT = 13,
-   BRIG_ROUND_INTEGER_SIGNALING_NEAR_EVEN = 14,
-   BRIG_ROUND_INTEGER_SIGNALING_ZERO = 15,
-   BRIG_ROUND_INTEGER_SIGNALING_PLUS_INFINITY = 16,
-   BRIG_ROUND_INTEGER_SIGNALING_MINUS_INFINITY = 17,
-   BRIG_ROUND_INTEGER_SIGNALING_NEAR_EVEN_SAT = 18,
-   BRIG_ROUND_INTEGER_SIGNALING_ZERO_SAT = 19,
-   BRIG_ROUND_INTEGER_SIGNALING_PLUS_INFINITY_SAT = 20,
-   BRIG_ROUND_INTEGER_SIGNALING_MINUS_INFINITY_SAT = 21
- };
- 
- typedef uint8_t BrigSamplerAddressing8_t;
- 
- enum BrigSamplerAddressing
- {
-   BRIG_ADDRESSING_UNDEFINED = 0,
-   BRIG_ADDRESSING_CLAMP_TO_EDGE = 1,
-   BRIG_ADDRESSING_CLAMP_TO_BORDER = 2,
-   BRIG_ADDRESSING_REPEAT = 3,
-   BRIG_ADDRESSING_MIRRORED_REPEAT = 4,
-   BRIG_ADDRESSING_FIRST_USER_DEFINED = 128
- };
- 
- typedef uint8_t BrigSamplerCoordNormalization8_t;
- 
- enum BrigSamplerCoordNormalization
- {
-   BRIG_COORD_UNNORMALIZED = 0,
-   BRIG_COORD_NORMALIZED = 1
- };
- 
- typedef uint8_t BrigSamplerFilter8_t;
- 
- enum BrigSamplerFilter
- {
-   BRIG_FILTER_NEAREST = 0,
-   BRIG_FILTER_LINEAR = 1,
-   BRIG_FILTER_FIRST_USER_DEFINED = 128
- };
- 
- typedef uint8_t BrigSamplerQuery8_t;
- 
- enum BrigSamplerQuery
- {
-   BRIG_SAMPLER_QUERY_ADDRESSING = 0,
-   BRIG_SAMPLER_QUERY_COORD = 1,
-   BRIG_SAMPLER_QUERY_FILTER = 2
- };
- 
- typedef uint32_t BrigSectionIndex32_t;
- 
- enum BrigSectionIndex
- {
-   BRIG_SECTION_INDEX_DATA = 0,
-   BRIG_SECTION_INDEX_CODE = 1,
-   BRIG_SECTION_INDEX_OPERAND = 2,
-   BRIG_SECTION_INDEX_BEGIN_IMPLEMENTATION_DEFINED = 3
- };
- 
- struct BrigSectionHeader
- {
-   uint64_t byteCount;
-   uint32_t headerByteCount;
-   uint32_t nameLength;
-   uint8_t name[1];
- };
- 
- typedef uint8_t BrigSegCvtModifier8_t;
- 
- enum BrigSegCvtModifierMask
- {
-   BRIG_SEG_CVT_NONULL = 1
- };
- 
- typedef uint8_t BrigSegment8_t;
- 
- enum BrigSegment
- {
-   BRIG_SEGMENT_NONE = 0,
-   BRIG_SEGMENT_FLAT = 1,
-   BRIG_SEGMENT_GLOBAL = 2,
-   BRIG_SEGMENT_READONLY = 3,
-   BRIG_SEGMENT_KERNARG = 4,
-   BRIG_SEGMENT_GROUP = 5,
-   BRIG_SEGMENT_PRIVATE = 6,
-   BRIG_SEGMENT_SPILL = 7,
-   BRIG_SEGMENT_ARG = 8,
-   BRIG_SEGMENT_FIRST_USER_DEFINED = 128
- };
- 
- enum
- {
-   BRIG_TYPE_BASE_SIZE = 5,
-   BRIG_TYPE_PACK_SIZE = 2,
-   BRIG_TYPE_ARRAY_SIZE = 1,
- 
-   BRIG_TYPE_BASE_SHIFT = 0,
-   BRIG_TYPE_PACK_SHIFT = BRIG_TYPE_BASE_SHIFT + BRIG_TYPE_BASE_SIZE,
-   BRIG_TYPE_ARRAY_SHIFT = BRIG_TYPE_PACK_SHIFT + BRIG_TYPE_PACK_SIZE,
- 
-   BRIG_TYPE_BASE_MASK = ((1 << BRIG_TYPE_BASE_SIZE) - 1)
- 			<< BRIG_TYPE_BASE_SHIFT,
-   BRIG_TYPE_PACK_MASK = ((1 << BRIG_TYPE_PACK_SIZE) - 1)
- 			<< BRIG_TYPE_PACK_SHIFT,
-   BRIG_TYPE_ARRAY_MASK = ((1 << BRIG_TYPE_ARRAY_SIZE) - 1)
- 			 << BRIG_TYPE_ARRAY_SHIFT,
- 
-   BRIG_TYPE_PACK_NONE = 0 << BRIG_TYPE_PACK_SHIFT,
-   BRIG_TYPE_PACK_32 = 1 << BRIG_TYPE_PACK_SHIFT,
-   BRIG_TYPE_PACK_64 = 2 << BRIG_TYPE_PACK_SHIFT,
-   BRIG_TYPE_PACK_128 = 3 << BRIG_TYPE_PACK_SHIFT,
- 
-   BRIG_TYPE_ARRAY = 1 << BRIG_TYPE_ARRAY_SHIFT
- };
- 
- typedef uint16_t BrigType16_t;
- 
- enum BrigType
- {
-   BRIG_TYPE_NONE = 0,
- 
-   BRIG_TYPE_U8 = 1,
-   BRIG_TYPE_U16 = 2,
-   BRIG_TYPE_U32 = 3,
-   BRIG_TYPE_U64 = 4,
- 
-   BRIG_TYPE_S8 = 5,
-   BRIG_TYPE_S16 = 6,
-   BRIG_TYPE_S32 = 7,
-   BRIG_TYPE_S64 = 8,
- 
-   BRIG_TYPE_F16 = 9,
-   BRIG_TYPE_F32 = 10,
-   BRIG_TYPE_F64 = 11,
- 
-   BRIG_TYPE_B1 = 12,
-   BRIG_TYPE_B8 = 13,
-   BRIG_TYPE_B16 = 14,
-   BRIG_TYPE_B32 = 15,
-   BRIG_TYPE_B64 = 16,
-   BRIG_TYPE_B128 = 17,
- 
-   BRIG_TYPE_SAMP = 18,
-   BRIG_TYPE_ROIMG = 19,
-   BRIG_TYPE_WOIMG = 20,
-   BRIG_TYPE_RWIMG = 21,
- 
-   BRIG_TYPE_SIG32 = 22,
-   BRIG_TYPE_SIG64 = 23,
- 
-   BRIG_TYPE_U8X4 = BRIG_TYPE_U8 | BRIG_TYPE_PACK_32,
-   BRIG_TYPE_U8X8 = BRIG_TYPE_U8 | BRIG_TYPE_PACK_64,
-   BRIG_TYPE_U8X16 = BRIG_TYPE_U8 | BRIG_TYPE_PACK_128,
- 
-   BRIG_TYPE_U16X2 = BRIG_TYPE_U16 | BRIG_TYPE_PACK_32,
-   BRIG_TYPE_U16X4 = BRIG_TYPE_U16 | BRIG_TYPE_PACK_64,
-   BRIG_TYPE_U16X8 = BRIG_TYPE_U16 | BRIG_TYPE_PACK_128,
- 
-   BRIG_TYPE_U32X2 = BRIG_TYPE_U32 | BRIG_TYPE_PACK_64,
-   BRIG_TYPE_U32X4 = BRIG_TYPE_U32 | BRIG_TYPE_PACK_128,
- 
-   BRIG_TYPE_U64X2 = BRIG_TYPE_U64 | BRIG_TYPE_PACK_128,
- 
-   BRIG_TYPE_S8X4 = BRIG_TYPE_S8 | BRIG_TYPE_PACK_32,
-   BRIG_TYPE_S8X8 = BRIG_TYPE_S8 | BRIG_TYPE_PACK_64,
-   BRIG_TYPE_S8X16 = BRIG_TYPE_S8 | BRIG_TYPE_PACK_128,
- 
-   BRIG_TYPE_S16X2 = BRIG_TYPE_S16 | BRIG_TYPE_PACK_32,
-   BRIG_TYPE_S16X4 = BRIG_TYPE_S16 | BRIG_TYPE_PACK_64,
-   BRIG_TYPE_S16X8 = BRIG_TYPE_S16 | BRIG_TYPE_PACK_128,
- 
-   BRIG_TYPE_S32X2 = BRIG_TYPE_S32 | BRIG_TYPE_PACK_64,
-   BRIG_TYPE_S32X4 = BRIG_TYPE_S32 | BRIG_TYPE_PACK_128,
- 
-   BRIG_TYPE_S64X2 = BRIG_TYPE_S64 | BRIG_TYPE_PACK_128,
- 
-   BRIG_TYPE_F16X2 = BRIG_TYPE_F16 | BRIG_TYPE_PACK_32,
-   BRIG_TYPE_F16X4 = BRIG_TYPE_F16 | BRIG_TYPE_PACK_64,
-   BRIG_TYPE_F16X8 = BRIG_TYPE_F16 | BRIG_TYPE_PACK_128,
- 
-   BRIG_TYPE_F32X2 = BRIG_TYPE_F32 | BRIG_TYPE_PACK_64,
-   BRIG_TYPE_F32X4 = BRIG_TYPE_F32 | BRIG_TYPE_PACK_128,
- 
-   BRIG_TYPE_F64X2 = BRIG_TYPE_F64 | BRIG_TYPE_PACK_128,
- 
-   BRIG_TYPE_U8_ARRAY = BRIG_TYPE_U8 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_U16_ARRAY = BRIG_TYPE_U16 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_U32_ARRAY = BRIG_TYPE_U32 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_U64_ARRAY = BRIG_TYPE_U64 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_S8_ARRAY = BRIG_TYPE_S8 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_S16_ARRAY = BRIG_TYPE_S16 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_S32_ARRAY = BRIG_TYPE_S32 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_S64_ARRAY = BRIG_TYPE_S64 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_F16_ARRAY = BRIG_TYPE_F16 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_F32_ARRAY = BRIG_TYPE_F32 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_F64_ARRAY = BRIG_TYPE_F64 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_B8_ARRAY = BRIG_TYPE_B8 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_B16_ARRAY = BRIG_TYPE_B16 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_B32_ARRAY = BRIG_TYPE_B32 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_B64_ARRAY = BRIG_TYPE_B64 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_B128_ARRAY = BRIG_TYPE_B128 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_SAMP_ARRAY = BRIG_TYPE_SAMP | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_ROIMG_ARRAY = BRIG_TYPE_ROIMG | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_WOIMG_ARRAY = BRIG_TYPE_WOIMG | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_RWIMG_ARRAY = BRIG_TYPE_RWIMG | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_SIG32_ARRAY = BRIG_TYPE_SIG32 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_SIG64_ARRAY = BRIG_TYPE_SIG64 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_U8X4_ARRAY = BRIG_TYPE_U8X4 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_U8X8_ARRAY = BRIG_TYPE_U8X8 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_U8X16_ARRAY = BRIG_TYPE_U8X16 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_U16X2_ARRAY = BRIG_TYPE_U16X2 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_U16X4_ARRAY = BRIG_TYPE_U16X4 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_U16X8_ARRAY = BRIG_TYPE_U16X8 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_U32X2_ARRAY = BRIG_TYPE_U32X2 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_U32X4_ARRAY = BRIG_TYPE_U32X4 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_U64X2_ARRAY = BRIG_TYPE_U64X2 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_S8X4_ARRAY = BRIG_TYPE_S8X4 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_S8X8_ARRAY = BRIG_TYPE_S8X8 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_S8X16_ARRAY = BRIG_TYPE_S8X16 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_S16X2_ARRAY = BRIG_TYPE_S16X2 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_S16X4_ARRAY = BRIG_TYPE_S16X4 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_S16X8_ARRAY = BRIG_TYPE_S16X8 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_S32X2_ARRAY = BRIG_TYPE_S32X2 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_S32X4_ARRAY = BRIG_TYPE_S32X4 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_S64X2_ARRAY = BRIG_TYPE_S64X2 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_F16X2_ARRAY = BRIG_TYPE_F16X2 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_F16X4_ARRAY = BRIG_TYPE_F16X4 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_F16X8_ARRAY = BRIG_TYPE_F16X8 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_F32X2_ARRAY = BRIG_TYPE_F32X2 | BRIG_TYPE_ARRAY,
-   BRIG_TYPE_F32X4_ARRAY = BRIG_TYPE_F32X4 | BRIG_TYPE_ARRAY,
- 
-   BRIG_TYPE_F64X2_ARRAY = BRIG_TYPE_F64X2 | BRIG_TYPE_ARRAY
- };
- 
- struct BrigUInt64
- {
-   uint32_t lo;
-   uint32_t hi;
- };
- 
- typedef uint8_t BrigVariableModifier8_t;
- 
- enum BrigVariableModifierMask
- {
-   BRIG_VARIABLE_DEFINITION = 1,
-   BRIG_VARIABLE_CONST = 2
- };
- 
- enum BrigVersion
- {
-   BRIG_VERSION_HSAIL_MAJOR = 1,
-   BRIG_VERSION_HSAIL_MINOR = 0,
-   BRIG_VERSION_BRIG_MAJOR = 1,
-   BRIG_VERSION_BRIG_MINOR = 0
- };
- 
- typedef uint8_t BrigWidth8_t;
- 
- enum BrigWidth
- {
-   BRIG_WIDTH_NONE = 0,
-   BRIG_WIDTH_1 = 1,
-   BRIG_WIDTH_2 = 2,
-   BRIG_WIDTH_4 = 3,
-   BRIG_WIDTH_8 = 4,
-   BRIG_WIDTH_16 = 5,
-   BRIG_WIDTH_32 = 6,
-   BRIG_WIDTH_64 = 7,
-   BRIG_WIDTH_128 = 8,
-   BRIG_WIDTH_256 = 9,
-   BRIG_WIDTH_512 = 10,
-   BRIG_WIDTH_1024 = 11,
-   BRIG_WIDTH_2048 = 12,
-   BRIG_WIDTH_4096 = 13,
-   BRIG_WIDTH_8192 = 14,
-   BRIG_WIDTH_16384 = 15,
-   BRIG_WIDTH_32768 = 16,
-   BRIG_WIDTH_65536 = 17,
-   BRIG_WIDTH_131072 = 18,
-   BRIG_WIDTH_262144 = 19,
-   BRIG_WIDTH_524288 = 20,
-   BRIG_WIDTH_1048576 = 21,
-   BRIG_WIDTH_2097152 = 22,
-   BRIG_WIDTH_4194304 = 23,
-   BRIG_WIDTH_8388608 = 24,
-   BRIG_WIDTH_16777216 = 25,
-   BRIG_WIDTH_33554432 = 26,
-   BRIG_WIDTH_67108864 = 27,
-   BRIG_WIDTH_134217728 = 28,
-   BRIG_WIDTH_268435456 = 29,
-   BRIG_WIDTH_536870912 = 30,
-   BRIG_WIDTH_1073741824 = 31,
-   BRIG_WIDTH_2147483648 = 32,
-   BRIG_WIDTH_WAVESIZE = 33,
-   BRIG_WIDTH_ALL = 34
- };
- 
- struct BrigData
- {
-   uint32_t byteCount;
-   uint8_t bytes[1];
- };
- 
- struct BrigDirectiveArgBlock
- {
-   BrigBase base;
- };
- 
- struct BrigDirectiveComment
- {
-   BrigBase base;
-   BrigDataOffsetString32_t name;
- };
- 
- struct BrigDirectiveControl
- {
-   BrigBase base;
-   BrigControlDirective16_t control;
-   uint16_t reserved;
-   BrigDataOffsetOperandList32_t operands;
- };
- 
- struct BrigDirectiveExecutable
- {
-   BrigBase base;
-   BrigDataOffsetString32_t name;
-   uint16_t outArgCount;
-   uint16_t inArgCount;
-   BrigCodeOffset32_t firstInArg;
-   BrigCodeOffset32_t firstCodeBlockEntry;
-   BrigCodeOffset32_t nextModuleEntry;
-   BrigExecutableModifier8_t modifier;
-   BrigLinkage8_t linkage;
-   uint16_t reserved;
- };
- 
- struct BrigDirectiveExtension
- {
-   BrigBase base;
-   BrigDataOffsetString32_t name;
- };
- 
- struct BrigDirectiveFbarrier
- {
-   BrigBase base;
-   BrigDataOffsetString32_t name;
-   BrigVariableModifier8_t modifier;
-   BrigLinkage8_t linkage;
-   uint16_t reserved;
- };
- 
- struct BrigDirectiveLabel
- {
-   BrigBase base;
-   BrigDataOffsetString32_t name;
- };
- 
- struct BrigDirectiveLoc
- {
-   BrigBase base;
-   BrigDataOffsetString32_t filename;
-   uint32_t line;
-   uint32_t column;
- };
- 
- struct BrigDirectiveModule
- {
-   BrigBase base;
-   BrigDataOffsetString32_t name;
-   BrigVersion32_t hsailMajor;
-   BrigVersion32_t hsailMinor;
-   BrigProfile8_t profile;
-   BrigMachineModel8_t machineModel;
-   BrigRound8_t defaultFloatRound;
-   uint8_t reserved;
- };
- 
- struct BrigDirectiveNone
- {
-   BrigBase base;
- };
- 
- struct BrigDirectivePragma
- {
-   BrigBase base;
-   BrigDataOffsetOperandList32_t operands;
- };
- 
- struct BrigDirectiveVariable
- {
-   BrigBase base;
-   BrigDataOffsetString32_t name;
-   BrigOperandOffset32_t init;
-   BrigType16_t type;
-   BrigSegment8_t segment;
-   BrigAlignment8_t align;
-   BrigUInt64 dim;
-   BrigVariableModifier8_t modifier;
-   BrigLinkage8_t linkage;
-   BrigAllocation8_t allocation;
-   uint8_t reserved;
- };
- 
- struct BrigInstBase
- {
-   BrigBase base;
-   BrigOpcode16_t opcode;
-   BrigType16_t type;
-   BrigDataOffsetOperandList32_t operands;
- };
- 
- struct BrigInstAddr
- {
-   BrigInstBase base;
-   BrigSegment8_t segment;
-   uint8_t reserved[3];
- };
- 
- struct BrigInstAtomic
- {
-   BrigInstBase base;
-   BrigSegment8_t segment;
-   BrigMemoryOrder8_t memoryOrder;
-   BrigMemoryScope8_t memoryScope;
-   BrigAtomicOperation8_t atomicOperation;
-   uint8_t equivClass;
-   uint8_t reserved[3];
- };
- 
- struct BrigInstBasic
- {
-   BrigInstBase base;
- };
- 
- struct BrigInstBr
- {
-   BrigInstBase base;
-   BrigWidth8_t width;
-   uint8_t reserved[3];
- };
- 
- struct BrigInstCmp
- {
-   BrigInstBase base;
-   BrigType16_t sourceType;
-   BrigAluModifier8_t modifier;
-   BrigCompareOperation8_t compare;
-   BrigPack8_t pack;
-   uint8_t reserved[3];
- };
- 
- struct BrigInstCvt
- {
-   BrigInstBase base;
-   BrigType16_t sourceType;
-   BrigAluModifier8_t modifier;
-   BrigRound8_t round;
- };
- 
- struct BrigInstImage
- {
-   BrigInstBase base;
-   BrigType16_t imageType;
-   BrigType16_t coordType;
-   BrigImageGeometry8_t geometry;
-   uint8_t equivClass;
-   uint16_t reserved;
- };
- 
- struct BrigInstLane
- {
-   BrigInstBase base;
-   BrigType16_t sourceType;
-   BrigWidth8_t width;
-   uint8_t reserved;
- };
- 
- struct BrigInstMem
- {
-   BrigInstBase base;
-   BrigSegment8_t segment;
-   BrigAlignment8_t align;
-   uint8_t equivClass;
-   BrigWidth8_t width;
-   BrigMemoryModifier8_t modifier;
-   uint8_t reserved[3];
- };
- 
- struct BrigInstMemFence
- {
-   BrigInstBase base;
-   BrigMemoryOrder8_t memoryOrder;
-   BrigMemoryScope8_t globalSegmentMemoryScope;
-   BrigMemoryScope8_t groupSegmentMemoryScope;
-   BrigMemoryScope8_t imageSegmentMemoryScope;
- };
- 
- struct BrigInstMod
- {
-   BrigInstBase base;
-   BrigAluModifier8_t modifier;
-   BrigRound8_t round;
-   BrigPack8_t pack;
-   uint8_t reserved;
- };
- 
- struct BrigInstQueryImage
- {
-   BrigInstBase base;
-   BrigType16_t imageType;
-   BrigImageGeometry8_t geometry;
-   BrigImageQuery8_t query;
- };
- 
- struct BrigInstQuerySampler
- {
-   BrigInstBase base;
-   BrigSamplerQuery8_t query;
-   uint8_t reserved[3];
- };
- 
- struct BrigInstQueue
- {
-   BrigInstBase base;
-   BrigSegment8_t segment;
-   BrigMemoryOrder8_t memoryOrder;
-   uint16_t reserved;
- };
- 
- struct BrigInstSeg
- {
-   BrigInstBase base;
-   BrigSegment8_t segment;
-   uint8_t reserved[3];
- };
- 
- struct BrigInstSegCvt
- {
-   BrigInstBase base;
-   BrigType16_t sourceType;
-   BrigSegment8_t segment;
-   BrigSegCvtModifier8_t modifier;
- };
- 
- struct BrigInstSignal
- {
-   BrigInstBase base;
-   BrigType16_t signalType;
-   BrigMemoryOrder8_t memoryOrder;
-   BrigAtomicOperation8_t signalOperation;
- };
- 
- struct BrigInstSourceType
- {
-   BrigInstBase base;
-   BrigType16_t sourceType;
-   uint16_t reserved;
- };
- 
- struct BrigOperandAddress
- {
-   BrigBase base;
-   BrigCodeOffset32_t symbol;
-   BrigOperandOffset32_t reg;
-   BrigUInt64 offset;
- };
- 
- struct BrigOperandAlign
- {
-   BrigBase base;
-   BrigAlignment8_t align;
-   uint8_t reserved[3];
- };
- 
- struct BrigOperandCodeList
- {
-   BrigBase base;
-   BrigDataOffsetCodeList32_t elements;
- };
- 
- struct BrigOperandCodeRef
- {
-   BrigBase base;
-   BrigCodeOffset32_t ref;
- };
- 
- struct BrigOperandConstantBytes
- {
-   BrigBase base;
-   BrigType16_t type;
-   uint16_t reserved;
-   BrigDataOffsetString32_t bytes;
- };
- 
- struct BrigOperandConstantImage
- {
-   BrigBase base;
-   BrigType16_t type;
-   BrigImageGeometry8_t geometry;
-   BrigImageChannelOrder8_t channelOrder;
-   BrigImageChannelType8_t channelType;
-   uint8_t reserved[3];
-   BrigUInt64 width;
-   BrigUInt64 height;
-   BrigUInt64 depth;
-   BrigUInt64 array;
- };
- 
- struct BrigOperandConstantOperandList
- {
-   BrigBase base;
-   BrigType16_t type;
-   uint16_t reserved;
-   BrigDataOffsetOperandList32_t elements;
- };
- 
- struct BrigOperandConstantSampler
- {
-   BrigBase base;
-   BrigType16_t type;
-   BrigSamplerCoordNormalization8_t coord;
-   BrigSamplerFilter8_t filter;
-   BrigSamplerAddressing8_t addressing;
-   uint8_t reserved[3];
- };
- 
- struct BrigOperandOperandList
- {
-   BrigBase base;
-   BrigDataOffsetOperandList32_t elements;
- };
- 
- struct BrigOperandRegister
- {
-   BrigBase base;
-   BrigRegisterKind16_t regKind;
-   uint16_t regNum;
- };
- 
- struct BrigOperandString
- {
-   BrigBase base;
-   BrigDataOffsetString32_t string;
- };
- 
- struct BrigOperandWavesize
- {
-   BrigBase base;
- };
- 
- #endif /* HSA_BRIG_FORMAT_H */
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigfrontend/phsa.h gcc-12.1.0/gcc/brig/brigfrontend/phsa.h
*** gcc-11.3.0/gcc/brig/brigfrontend/phsa.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigfrontend/phsa.h	Thu Jan  1 00:00:00 1970
***************
*** 1,79 ****
- /* phsa.h -- interfacing between the gcc BRIG FE and the phsa runtime
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #ifndef PHSA_H
- #define PHSA_H
- 
- #include <stdint.h>
- 
- /* This struct is used to pass information from the BRIG FE to the
-    runtime of the finalizer kernel, its control directives etc.
-    The data is passed raw in a special ELF section named
-    phsa.kerneldesc.kernel_function_name.  */
- 
- typedef struct __attribute__((__packed__))
- {
-   /* Set to 1 in case the function is a kernel.  */
-   uint8_t is_kernel;
-   /* The size of the group segment used by the kernel.  */
-   uint32_t group_segment_size;
-   /* Size of the private segment used by a single work-item.  */
-   uint32_t private_segment_size;
-   /* Total size of the kernel arguments.  */
-   uint32_t kernarg_segment_size;
-   /* Maximum alignment of a kernel argument variable.  */
-   uint16_t kernarg_max_align;
-   /* Maximum size (in bytes) of dynamic group memory.  */
-   uint32_t max_dynamic_group_size;
-   /* Max number of work-items used to launch the kernel.  */
-   uint64_t max_flat_grid_size;
-   /* Max number of work-items in a work-group used to launch the kernel.  */
-   uint32_t max_flat_workgroup_size;
-   /* The grid size required by the kernel.  */
-   uint64_t required_grid_size[3];
-   /* The work group size required by the kernel.  */
-   uint32_t required_workgroup_size[3];
-   /* The number of dimensions required by the kernel.  */
-   uint8_t required_dim;
- 
- } phsa_descriptor;
- 
- /* The prefix to use in the ELF section containing descriptor for
-    a function.  */
- 
- #define PHSA_DESC_SECTION_PREFIX "phsa.desc."
- #define PHSA_HOST_DEF_PTR_PREFIX "__phsa.host_def."
- 
- /* The frontend error messages are parsed by the host runtime.  Known
-    prefix strings are used to separate the different runtime error
-    codes.  */
- 
- #define PHSA_ERROR_PREFIX_INCOMPATIBLE_MODULE "Incompatible module: "
- #define PHSA_ERROR_PREFIX_CORRUPTED_MODULE "Corrupted module: "
- 
- /* Offsets of attributes in the PHSA context structs.
-    Used by -fphsa-wi-context-opt.  */
- #define PHSA_CONTEXT_OFFS_WI_IDS 0
- #define PHSA_CONTEXT_OFFS_WG_IDS (PHSA_CONTEXT_OFFS_WI_IDS + 3 * 4)
- #define PHSA_CONTEXT_WG_SIZES (PHSA_CONTEXT_OFFS_WG_IDS + 3 * 4)
- #define PHSA_CONTEXT_CURRENT_WG_SIZES (PHSA_CONTEXT_WG_SIZES + 3 * 4)
- 
- #endif
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/brigspec.c gcc-12.1.0/gcc/brig/brigspec.c
*** gcc-11.3.0/gcc/brig/brigspec.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/brigspec.c	Thu Jan  1 00:00:00 1970
***************
*** 1,136 ****
- /* brigspec.c -- Specific flags and argument handling of the gcc BRIG front end.
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "tm.h"
- #include "opt-suggestions.h"
- #include "gcc.h"
- #include "opts.h"
- 
- /* This bit is set if we saw a `-xfoo' language specification.  */
- #define LANGSPEC (1 << 1)
- /* This bit is set if they did `-lm' or `-lmath'.  */
- #define MATHLIB (1 << 2)
- /* This bit is set if they did `-lpthread'.  */
- #define THREADLIB (1 << 3)
- /* This bit is set if they did `-lc'.  */
- #define WITHLIBC (1 << 4)
- /* Skip this option.  */
- #define SKIPOPT (1 << 5)
- 
- #ifndef MATH_LIBRARY
- #define MATH_LIBRARY "m"
- #endif
- #ifndef MATH_LIBRARY_PROFILE
- #define MATH_LIBRARY_PROFILE MATH_LIBRARY
- #endif
- 
- #define LIBHSAIL "hsail-rt"
- 
- void
- lang_specific_driver (struct cl_decoded_option **in_decoded_options,
- 		      unsigned int *in_decoded_options_count,
- 		      int *in_added_libraries)
- {
-   unsigned int i, j;
- 
-   /* The new argument list will be contained in this.  */
-   struct cl_decoded_option *new_decoded_options;
- 
-   /* An array used to flag each argument that needs a bit set for
-      LANGSPEC, MATHLIB, or WITHLIBC.  */
-   int *args;
- 
-   /* By default, we throw on the math library if we have one.  */
-   int need_math = (MATH_LIBRARY[0] != '\0');
- 
-   /* True if we should add -shared-libgcc to the command-line.  */
-   int shared_libgcc = 1;
- 
-   /* The total number of arguments with the new stuff.  */
-   unsigned int argc;
- 
-   /* The argument list.  */
-   struct cl_decoded_option *decoded_options;
- 
-   /* The number of libraries added in.  */
-   int added_libraries;
- 
-   /* The total number of arguments with the new stuff.  */
-   int num_args = 1;
- 
-   argc = *in_decoded_options_count;
-   decoded_options = *in_decoded_options;
-   added_libraries = *in_added_libraries;
- 
-   args = XCNEWVEC (int, argc);
- 
-   for (i = 1; i < argc; i++)
-     {
-       switch (decoded_options[i].opt_index)
- 	{
- 	case OPT_o:
- 	  break;
- 
- 	case OPT_SPECIAL_input_file:
- 	  break;
- 	}
-     }
- 
-   /* Make sure to have room for the trailing NULL argument.  */
-   num_args = argc + need_math + shared_libgcc + 10;
-   new_decoded_options = XNEWVEC (struct cl_decoded_option, num_args);
- 
-   i = 0;
-   j = 0;
- 
-   /* Copy the 0th argument, i.e., the name of the program itself.  */
-   new_decoded_options[j++] = decoded_options[i++];
- 
-   /* NOTE: We start at 1 now, not 0.  */
-   while (i < argc)
-     {
-       new_decoded_options[j] = decoded_options[i];
- 
-       if ((args[i] & SKIPOPT) != 0)
- 	--j;
- 
-       i++;
-       j++;
-     }
- 
-   generate_option (OPT_l, LIBHSAIL, 1, CL_DRIVER, &new_decoded_options[j]);
-   j++;
- 
-   *in_decoded_options_count = j;
-   *in_decoded_options = new_decoded_options;
-   *in_added_libraries = added_libraries;
- }
- 
- /* Called before linking.  Returns 0 on success and -1 on failure.  */
- 
- int lang_specific_pre_link (void) /* Not used for Brig.  */ { return 0; }
- 
- /* Number of extra output files that lang_specific_pre_link may generate.  */
- 
- int lang_specific_extra_outfiles = 0; /* Not used for Brig.  */
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/config-lang.in gcc-12.1.0/gcc/brig/config-lang.in
*** gcc-11.3.0/gcc/brig/config-lang.in	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/config-lang.in	Thu Jan  1 00:00:00 1970
***************
*** 1,41 ****
- # config-lang.in -- Top level configure fragment for gcc BRIG (HSAIL) frontend.
- 
- # Copyright (C) 2015-2021 Free Software Foundation, Inc.
- 
- # This file is part of GCC.
- 
- # GCC is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 3, or (at your option)
- # any later version.
- 
- # GCC is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- # GNU General Public License for more details.
- 
- # You should have received a copy of the GNU General Public License
- # along with GCC; see the file COPYING3.  If not see
- # <http://www.gnu.org/licenses/>.
- 
- # Configure looks for the existence of this file to auto-config each language.
- # We define several parameters used by configure:
- #
- # language	- name of language as it would appear in $(LANGUAGES)
- # compilers	- value to add to $(COMPILERS)
- 
- language="brig"
- 
- compilers="brig1\$(exeext)"
- 
- target_libs="target-libhsail-rt"
- 
- # The BRIG frontend is written in C++, so we need to build the C++
- # compiler during stage 1.  Note: when cross-compiling / not bootstrapping,
- # this can be safely removed. gcc 4.9.1 force enables c++/libstdc++ to the
- # target compiler due to this.
- lang_requires_boot_languages=c++
- 
- gtfiles="\$(srcdir)/brig/brig-lang.c \$(srcdir)/brig/brig-c.h"
- 
- build_by_default="no"
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/gccbrig.texi gcc-12.1.0/gcc/brig/gccbrig.texi
*** gcc-11.3.0/gcc/brig/gccbrig.texi	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/gccbrig.texi	Thu Jan  1 00:00:00 1970
***************
*** 1,153 ****
- \input texinfo @c -*-texinfo-*-
- @setfilename gccbrig.info
- @settitle The GNU BRIG (HSAIL) Compiler
- @set copyrights-brig 2017-2021
- 
- @c Merge the standard indexes into a single one.
- @syncodeindex fn cp
- @syncodeindex vr cp
- @syncodeindex ky cp
- @syncodeindex pg cp
- @syncodeindex tp cp
- 
- @include gcc-common.texi
- 
- @copying
- @c man begin COPYRIGHT
- Copyright @copyright{} @value{copyrights-brig} Free Software Foundation, Inc.
- 
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3 or
- any later version published by the Free Software Foundation; with no
- Invariant Sections, the Front-Cover Texts being (a) (see below), and
- with the Back-Cover Texts being (b) (see below).
- A copy of the license is included in the
- @c man end
- section entitled ``GNU Free Documentation License''.
- @ignore
- @c man begin COPYRIGHT
- man page gfdl(7).
- @c man end
- @end ignore
- 
- @c man begin COPYRIGHT
- 
- (a) The FSF's Front-Cover Text is:
- 
-      A GNU Manual
- 
- (b) The FSF's Back-Cover Text is:
- 
-      You have freedom to copy and modify this GNU Manual, like GNU
-      software.  Copies published by the Free Software Foundation raise
-      funds for GNU development.
- @c man end
- @end copying
- 
- @ifinfo
- @format
- @dircategory Software development
- @direntry
- * Gccbrig: (gccbrig).           A GCC-based compiler for BRIG/HSAIL finalization
- @end direntry
- @end format
- 
- @insertcopying
- @end ifinfo
- 
- @titlepage
- @title The GNU BRIG (HSAIL) Compiler
- @versionsubtitle
- @author Pekka Jääskeläinen
- 
- @page
- @vskip 0pt plus 1filll
- Published by the Free Software Foundation @*
- 51 Franklin Street, Fifth Floor@*
- Boston, MA 02110-1301, USA@*
- @sp 1
- @insertcopying
- @end titlepage
- @contents
- @page
- 
- @node Top
- @top Introduction
- 
- This manual describes how to use @command{gccbrig}, the GNU compiler for
- the binary representation (BRIG) of the HSA Intermediate Language (HSAIL).
- For more information about the Heterogeneous System Architecture (HSA)
- Foundation's standards in general, see @uref{http://www.hsafoundation.com/}.
- 
- @menu
- * Copying::                     The GNU General Public License.
- * GNU Free Documentation License::
-                                 How you can share and copy this manual.
- * Using Gccbrig::               How to use Gccbrig.
- * Index::                       Index.
- @end menu
- 
- @include gpl_v3.texi
- 
- @include fdl.texi
- 
- 
- @node Using Gccbrig
- @chapter Using Gccbrig
- 
- @c man title gccbrig A GCC-based compiler for HSAIL
- 
- @ignore
- @c man begin SYNOPSIS gccbrig
- gccbrig [@option{-c}|@option{-S}]
-         [@option{-O}@var{level}] [@option{-L}@var{dir}@dots{}]
-         [@option{-o} @var{outfile}] @var{infile}@dots{}
- 
- Gccbrig is typically not invoked from the command line, but
- through an HSA finalizer implementation.
- @c man end
- @c man begin SEEALSO
- The Info entry for @file{gccbrig} and
- @uref{https://github.com/HSAFoundation/phsa}
- @c man end
- @end ignore
- 
- @c man begin DESCRIPTION gccbrig
- 
- The BRIG frontend (@command{gccbrig}) differs from the
- other frontends in GCC on how it's typically used.  It's a translator
- for an intermediate language that is not meant to be written directly
- by programmers.  Its input format BRIG is a binary representation of
- HSAIL, which is a textual assembly format for an imaginary machine
- of which instruction set is defined in HSA Programmer Reference Manual
- (PRM) Specification.  Gccbrig currently implements the Base profile
- of the PRM version 1.0.
- 
- HSA Runtime Specification defines an API which includes means
- to build and launch ``kernels'' from a host program running on a CPU
- to one or more heterogeneous ``kernel agents''. A kernel Agent
- is typically a GPU or a DSP device controlled by the CPU.
- The build phase is called ``finalization'', which means translation of
- one or more target-independent BRIG files describing the program that
- one wants to run in the Agent to the Agent's instruction set.  Gccbrig
- implements the translation process by generating GENERIC, which is
- translated to the ISA of any supported GCC target by the GCC's backend
- framework, thus enabling potentially any GCC target to act as an HSA agent.
- 
- As the kernel finalization process can be only launched from the host API,
- @command{gccbrig} is not typically used directly from the command line by
- the end user, but through an HSA runtime implementation that implements
- the finalizer API running on the host CPU.  Gccbrig is
- designed to work with an open source HSA runtime implementation
- called ``phsa-runtime'', which can be installed from
- @uref{https://github.com/HSAFoundation/phsa-runtime}.  Phsa-runtime
- has an example Agent driver that allows any GCC-supported CPU to act as
- a kernel Agent.  The web page has further installation instructions for
- setting up it to work with a gccbrig binary installed with the GCC.
- 
- @node Index
- @unnumbered Index
- 
- @printindex cp
- 
- @bye
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/lang-specs.h gcc-12.1.0/gcc/brig/lang-specs.h
*** gcc-11.3.0/gcc/brig/lang-specs.h	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/lang-specs.h	Thu Jan  1 00:00:00 1970
***************
*** 1,28 ****
- /* lang-specs.h -- gcc driver specs for BRIG (HSAIL) frontend.
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- /* This is the contribution to the `default_compilers' array in gcc.c
-    for the BRIG (HSAIL) input.  */
- 
- {".brig", "@brig", 0, 1, 0},
-   {"@brig",
-    "brig1 %i %(cc1_options) %{I*} %{L*} %D %{!fsyntax-only:%(invoke_as)}", 0, 1,
-    0},
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig/lang.opt gcc-12.1.0/gcc/brig/lang.opt
*** gcc-11.3.0/gcc/brig/lang.opt	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig/lang.opt	Thu Jan  1 00:00:00 1970
***************
*** 1,46 ****
- ; lang.opt -- Options for the gcc BRIG (HSAIL) front end.
- 
- ; Copyright (C) 2015-2021 Free Software Foundation, Inc.
- ;
- ; This file is part of GCC.
- ;
- ; GCC is free software; you can redistribute it and/or modify it under
- ; the terms of the GNU General Public License as published by the Free
- ; Software Foundation; either version 3, or (at your option) any later
- ; version.
- ;
- ; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- ; WARRANTY; without even the implied warranty of MERCHANTABILITY or
- ; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- ; for more details.
- ;
- ; You should have received a copy of the GNU General Public License
- ; along with GCC; see the file COPYING3.  If not see
- ; <http://www.gnu.org/licenses/>.
- 
- ; See the GCC internals manual for a description of this file's format.
- 
- ; Please try to keep this file in ASCII collating order.
- 
- Language
- BRIG
- 
- -dump
- BRIG Separate Alias(d)
- 
- -dump=
- BRIG Joined Alias(d)
- 
- fassume-phsa
- BRIG Var(flag_assume_phsa) Init(1) Optimization
- Assume we are finalizing for phsa and its libhsail-rt.  Enables additional
- phsa-specific optimizations (default).
- 
- L
- BRIG Joined Separate
- ; Not documented
- 
- -output=
- BRIG Driver Joined Alias(o) MissingArgError(missing filename after %qs)
- 
- ; This comment is to ensure we retain the blank line above.
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/brig-builtins.def gcc-12.1.0/gcc/brig-builtins.def
*** gcc-11.3.0/gcc/brig-builtins.def	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/brig-builtins.def	Thu Jan  1 00:00:00 1970
***************
*** 1,675 ****
- /* This file contains the definitions and documentation for the
-    HSAIL builtins used in the GNU compiler.
-    Copyright (C) 2016-2021 Free Software Foundation, Inc.
- 
-    Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
-    for General Processor Tech.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- /* Following builtins are used by the BRIG (the binary representation of
-    HSAIL) frontend.  Software implementations are available in libhsail-rt.
-    Use leading double underscore in the name to avoid name space clashes
-    with kernel program symbols in case the builtin is implemented as
-    a function call.  */
- 
- /* Work-item ID related builtins are not constant in the work-group function
-    mode (each WI has a different return value).  */
- 
- #ifndef DEF_HSAIL_BUILTIN
- #define DEF_HSAIL_BUILTIN(ENUM, HSAIL_OPCODE, HSAIL_TYPE,	\
- 			  NAME, TYPE, ATTRS)
- #endif
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMABSID, BRIG_OPCODE_WORKITEMABSID,
- 		  BRIG_TYPE_U32, "__hsail_workitemabsid", BT_FN_UINT_UINT_PTR,
- 		  ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_GRIDSIZE, BRIG_OPCODE_GRIDSIZE,
- 		  BRIG_TYPE_U32, "__hsail_gridsize", BT_FN_UINT_UINT_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMFLATABSID_U32,
- 		  BRIG_OPCODE_WORKITEMFLATABSID, BRIG_TYPE_U32,
- 		  "__hsail_workitemflatabsid_u32", BT_FN_UINT_CONST_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMFLATABSID_U64,
- 		  BRIG_OPCODE_WORKITEMFLATABSID, BRIG_TYPE_U64,
- 		  "__hsail_workitemflatabsid_u64", BT_FN_ULONG_CONST_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMFLATID, BRIG_OPCODE_WORKITEMFLATID,
- 		  BRIG_TYPE_U32, "__hsail_workitemflatid", BT_FN_UINT_CONST_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMID, BRIG_OPCODE_WORKITEMID,
- 		  BRIG_TYPE_U32, "__hsail_workitemid",
- 		  BT_FN_UINT_UINT_CONST_PTR, ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKGROUPID, BRIG_OPCODE_WORKGROUPID,
- 		  BRIG_TYPE_U32, "__hsail_workgroupid",
- 		  BT_FN_UINT_UINT_CONST_PTR, ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CURRENTWORKITEMFLATID,
- 		  BRIG_OPCODE_CURRENTWORKITEMFLATID,
- 		  BRIG_TYPE_U32, "__hsail_currentworkitemflatid",
- 		  BT_FN_UINT_PTR, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMABSID_U64, BRIG_OPCODE_WORKITEMABSID,
- 		  BRIG_TYPE_U64, "__hsail_workitemabsid_u64",
- 		  BT_FN_ULONG_UINT_PTR, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKETID, BRIG_OPCODE_PACKETID,
- 		  BRIG_TYPE_U64, "__hsail_packetid", BT_FN_ULONG_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKETCOMPLETIONSIG_SIG64,
- 		  BRIG_OPCODE_PACKETCOMPLETIONSIG, BRIG_TYPE_SIG64,
- 		  "__hsail_packetcompletionsig_sig64", BT_FN_ULONG_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKETCOMPLETIONSIG_SIG32,
- 		  BRIG_OPCODE_PACKETCOMPLETIONSIG, BRIG_TYPE_SIG32,
- 		  "__hsail_packetcompletionsig_sig32", BT_FN_UINT_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CURRENTWORKGROUPSIZE,
- 		  BRIG_OPCODE_CURRENTWORKGROUPSIZE, BRIG_TYPE_U32,
- 		  "__hsail_currentworkgroupsize", BT_FN_UINT_UINT_CONST_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKGROUPSIZE, BRIG_OPCODE_WORKGROUPSIZE,
- 		  BRIG_TYPE_U32, "__hsail_workgroupsize",
- 		  BT_FN_UINT_UINT_CONST_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_DIM, BRIG_OPCODE_DIM,
- 		  BRIG_TYPE_U32, "__hsail_dim", BT_FN_UINT_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_GRIDGROUPS, BRIG_OPCODE_GRIDGROUPS,
- 		  BRIG_TYPE_U32, "__hsail_gridgroups", BT_FN_UINT_UINT_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_S32, BRIG_OPCODE_BITEXTRACT,
- 		  BRIG_TYPE_S32, "__hsail_bitextract_s32",
- 		  BT_FN_INT_INT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_U32, BRIG_OPCODE_BITEXTRACT,
- 		  BRIG_TYPE_U32, "__hsail_bitextract_u32",
- 		  BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_S64, BRIG_OPCODE_BITEXTRACT,
- 		  BRIG_TYPE_S64, "__hsail_bitextract_s64",
- 		  BT_FN_LONG_LONG_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_U64, BRIG_OPCODE_BITEXTRACT,
- 		  BRIG_TYPE_U64, "__hsail_bitextract_u64",
- 		  BT_FN_ULONG_ULONG_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITINSERT_U32, BRIG_OPCODE_BITINSERT,
- 		  BRIG_TYPE_U32, "__hsail_bitinsert_u32",
- 		  BT_FN_UINT_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITINSERT_U64, BRIG_OPCODE_BITINSERT,
- 		  BRIG_TYPE_U64, "__hsail_bitinsert_u64",
- 		  BT_FN_ULONG_ULONG_ULONG_UINT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITMASK_B32, BRIG_OPCODE_BITMASK,
- 		  BRIG_TYPE_B32, "__hsail_bitmask_u32", BT_FN_UINT_UINT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITMASK_B64, BRIG_OPCODE_BITMASK,
- 		  BRIG_TYPE_B64, "__hsail_bitmask_u64", BT_FN_ULONG_UINT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITREV_B32, BRIG_OPCODE_BITREV,
- 		  BRIG_TYPE_B32, "__hsail_bitrev_u32", BT_FN_UINT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITREV_B64, BRIG_OPCODE_BITREV,
- 		  BRIG_TYPE_B64, "__hsail_bitrev_u64", BT_FN_ULONG_ULONG,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITSELECT_B32, BRIG_OPCODE_BITSELECT,
- 		  BRIG_TYPE_B32, "__hsail_bitselect_u32",
- 		  BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITSELECT_U64, BRIG_OPCODE_BITSELECT,
- 		  BRIG_TYPE_B64, "__hsail_bitselect_u64",
- 		  BT_FN_ULONG_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_U32, BRIG_OPCODE_FIRSTBIT,
- 		  BRIG_TYPE_U32, "__hsail_firstbit_u32", BT_FN_UINT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_S32, BRIG_OPCODE_FIRSTBIT,
- 		  BRIG_TYPE_S32, "__hsail_firstbit_s32", BT_FN_UINT_INT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_U64, BRIG_OPCODE_FIRSTBIT,
- 		  BRIG_TYPE_U64, "__hsail_firstbit_u64", BT_FN_UINT_ULONG,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_S64, BRIG_OPCODE_FIRSTBIT,
- 		  BRIG_TYPE_S64, "__hsail_firstbit_s64", BT_FN_UINT_LONG,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LASTBIT_U32, BRIG_OPCODE_LASTBIT,
- 		  BRIG_TYPE_U32, "__hsail_lastbit_u32", BT_FN_UINT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LASTBIT_U64, BRIG_OPCODE_LASTBIT,
- 		  BRIG_TYPE_U64, "__hsail_lastbit_u64", BT_FN_UINT_ULONG,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BORROW_U32, BRIG_OPCODE_BORROW,
- 		  BRIG_TYPE_U32, "__hsail_borrow_u32", BT_FN_UINT_UINT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BORROW_U64, BRIG_OPCODE_BORROW,
- 		  BRIG_TYPE_U64, "__hsail_borrow_u64", BT_FN_ULONG_ULONG_ULONG,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CARRY_U32, BRIG_OPCODE_CARRY,
- 		  BRIG_TYPE_U32, "__hsail_carry_u32", BT_FN_UINT_UINT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CARRY_U64, BRIG_OPCODE_CARRY,
- 		  BRIG_TYPE_U64, "__hsail_carry_u64", BT_FN_ULONG_ULONG_ULONG,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_REM_S32, BRIG_OPCODE_REM,
- 		  BRIG_TYPE_S32, "__hsail_rem_s32", BT_FN_INT_INT_INT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_REM_S64, BRIG_OPCODE_REM,
- 		  BRIG_TYPE_S64, "__hsail_rem_s64", BT_FN_LONG_LONG_LONG,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MIN_F32, BRIG_OPCODE_MIN,
- 		  BRIG_TYPE_F32, "__hsail_min_f32", BT_FN_FLOAT_FLOAT_FLOAT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MAX_F32, BRIG_OPCODE_MAX,
- 		  BRIG_TYPE_F32, "__hsail_max_f32", BT_FN_FLOAT_FLOAT_FLOAT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MIN_F64, BRIG_OPCODE_MIN,
- 		  BRIG_TYPE_F64, "__hsail_min_f64", BT_FN_DOUBLE_DOUBLE_DOUBLE,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MAX_F64, BRIG_OPCODE_MAX,
- 		  BRIG_TYPE_F64, "__hsail_max_f64", BT_FN_DOUBLE_DOUBLE_DOUBLE,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLASS_F32, BRIG_OPCODE_CLASS,
- 		  BRIG_TYPE_F32, "__hsail_class_f32", BT_FN_UINT_FLOAT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLASS_F64, BRIG_OPCODE_CLASS,
- 		  BRIG_TYPE_F64, "__hsail_class_f64", BT_FN_UINT_DOUBLE_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLASS_F32_F16, BRIG_OPCODE_CLASS,
- 		  BRIG_TYPE_F16, "__hsail_class_f32_f16",
- 		  BT_FN_UINT_FLOAT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FRACT_F32, BRIG_OPCODE_FRACT,
- 		  BRIG_TYPE_F32, "__hsail_fract_f32", BT_FN_FLOAT_FLOAT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FRACT_F64, BRIG_OPCODE_FRACT,
- 		  BRIG_TYPE_F64, "__hsail_fract_f64", BT_FN_DOUBLE_DOUBLE,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BARRIER, BRIG_OPCODE_BARRIER,
- 		  BRIG_TYPE_NONE, "__hsail_barrier", BT_FN_VOID_PTR,
- 		  ATTR_RT_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_INITFBAR, BRIG_OPCODE_INITFBAR,
- 		  BRIG_TYPE_NONE, "__hsail_initfbar", BT_FN_VOID_UINT_PTR,
- 		  ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_JOINFBAR, BRIG_OPCODE_JOINFBAR,
- 		  BRIG_TYPE_NONE, "__hsail_joinfbar", BT_FN_VOID_UINT_PTR,
- 		  ATTR_NOTHROW_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WAITFBAR, BRIG_OPCODE_WAITFBAR,
- 		  BRIG_TYPE_NONE, "__hsail_waitfbar", BT_FN_VOID_UINT_PTR,
- 		  ATTR_RT_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_ARRIVEFBAR, BRIG_OPCODE_ARRIVEFBAR,
- 		  BRIG_TYPE_NONE, "__hsail_arrivefbar", BT_FN_VOID_UINT_PTR,
- 		  ATTR_RT_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LEAVEFBAR, BRIG_OPCODE_LEAVEFBAR,
- 		  BRIG_TYPE_NONE, "__hsail_leavefbar", BT_FN_VOID_UINT_PTR,
- 		  ATTR_NOTHROW_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_RELEASEFBAR, BRIG_OPCODE_RELEASEFBAR,
- 		  BRIG_TYPE_NONE, "__hsail_releasefbar", BT_FN_VOID_UINT_PTR,
- 		  ATTR_NOTHROW_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITALIGN, BRIG_OPCODE_BITALIGN,
- 		  BRIG_TYPE_B32, "__hsail_bitalign",
- 		  BT_FN_UINT_ULONG_ULONG_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BYTEALIGN, BRIG_OPCODE_BYTEALIGN,
- 		  BRIG_TYPE_B32, "__hsail_bytealign",
- 		  BT_FN_UINT_ULONG_ULONG_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LERP, BRIG_OPCODE_LERP,
- 		  BRIG_TYPE_U8X4, "__hsail_lerp", BT_FN_UINT_UINT_UINT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKCVT, BRIG_OPCODE_PACKCVT,
- 		  BRIG_TYPE_U8X4, "__hsail_packcvt",
- 		  BT_FN_UINT_FLOAT_FLOAT_FLOAT_FLOAT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_UNPACKCVT, BRIG_OPCODE_UNPACKCVT,
- 		  BRIG_TYPE_F32, "__hsail_unpackcvt", BT_FN_FLOAT_UINT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SAD_U16X2, BRIG_OPCODE_SAD,
- 		  BRIG_TYPE_U16X2, "__hsail_sad_u16x2",
- 		  BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SAD_U32, BRIG_OPCODE_SAD,
- 		  BRIG_TYPE_U32, "__hsail_sad_u32", BT_FN_UINT_UINT_UINT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SAD_U8X4, BRIG_OPCODE_SAD,
- 		  BRIG_TYPE_U8X4, "__hsail_sad_u8x4",
- 		  BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SADHI_U8X4, BRIG_OPCODE_SADHI,
- 		  BRIG_TYPE_U16X2, "__hsail_sadhi_u16x2_u8x4",
- 		  BT_FN_UINT_UINT_UINT_UINT,
- 		  ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLOCK, BRIG_OPCODE_CLOCK,
- 		  BRIG_TYPE_U64, "__hsail_clock", BT_FN_ULONG,
- 		  ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CUID, BRIG_OPCODE_CUID,
- 		  BRIG_TYPE_U32, "__hsail_cuid", BT_FN_UINT_PTR,
- 		  ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MAXCUID, BRIG_OPCODE_MAXCUID,
- 		  BRIG_TYPE_U32, "__hsail_maxcuid", BT_FN_UINT_PTR,
- 		  ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_DEBUGTRAP, BRIG_OPCODE_DEBUGTRAP,
- 		  BRIG_TYPE_U32, "__hsail_debugtrap", BT_FN_VOID_UINT_PTR,
- 		  ATTR_NORETURN_NOTHROW_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_GROUPBASEPTR, BRIG_OPCODE_GROUPBASEPTR,
- 		  BRIG_TYPE_U32, "__hsail_groupbaseptr", BT_FN_UINT_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_KERNARGBASEPTR_U64,
- 		  BRIG_OPCODE_KERNARGBASEPTR, BRIG_TYPE_U64,
- 		  "__hsail_kernargbaseptr_u64", BT_FN_ULONG_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_KERNARGBASEPTR_U32,
- 		  BRIG_OPCODE_KERNARGBASEPTR, BRIG_TYPE_U32,
- 		  "__hsail_kernargbaseptr_u32", BT_FN_UINT_PTR,
- 		  ATTR_PURE_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_ALLOCA, BRIG_OPCODE_ALLOCA,
- 		  BRIG_TYPE_U32, "__hsail_alloca", BT_FN_UINT_UINT_UINT_PTR,
- 		  ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LDQUEUEWRITEINDEX,
- 		  BRIG_OPCODE_LDQUEUEWRITEINDEX,
- 		  BRIG_TYPE_U64, "__hsail_ldqueuewriteindex",
- 		  BT_FN_ULONG_ULONG, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LDQUEUEREADINDEX,
- 		  BRIG_OPCODE_LDQUEUEREADINDEX,
- 		  BRIG_TYPE_U64, "__hsail_ldqueuereadindex",
- 		  BT_FN_ULONG_ULONG, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_STQUEUEWRITEINDEX,
- 		  BRIG_OPCODE_STQUEUEWRITEINDEX,
- 		  BRIG_TYPE_U64, "__hsail_stqueuewriteindex",
- 		  BT_FN_VOID_UINT64_UINT64, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_STQUEUEREADINDEX,
- 		  BRIG_OPCODE_STQUEUEREADINDEX,
- 		  BRIG_TYPE_U64, "__hsail_stqueuereadindex",
- 		  BT_FN_VOID_UINT64_UINT64, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_ADDQUEUEWRITEINDEX,
- 		  BRIG_OPCODE_ADDQUEUEWRITEINDEX,
- 		  BRIG_TYPE_U64, "__hsail_addqueuewriteindex",
- 		  BT_FN_ULONG_ULONG_ULONG, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CASQUEUEWRITEINDEX,
- 		  BRIG_OPCODE_CASQUEUEWRITEINDEX,
- 		  BRIG_TYPE_U64, "__hsail_casqueuewriteindex",
- 		  BT_FN_ULONG_ULONG_ULONG_ULONG, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SEGMENTP_GLOBAL,
- 		  BRIG_OPCODE_SEGMENTP,
- 		  BRIG_TYPE_U32, "__hsail_segmentp_global",
- 		  BT_FN_UINT32_UINT64_PTR, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SEGMENTP_GROUP,
- 		  BRIG_OPCODE_SEGMENTP,
- 		  BRIG_TYPE_U32, "__hsail_segmentp_group",
- 		  BT_FN_UINT32_UINT64_PTR, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SEGMENTP_PRIVATE,
- 		  BRIG_OPCODE_SEGMENTP,
- 		  BRIG_TYPE_U32, "__hsail_segmentp_private",
- 		  BT_FN_UINT32_UINT64_PTR, ATTR_NOTHROW_LEAF_LIST)
- 
- #ifndef DEF_HSAIL_ATOMIC_BUILTIN
- #define DEF_HSAIL_ATOMIC_BUILTIN(ENUM, ATOMIC_OPCODE, HSAIL_TYPE,	\
- 				 NAME, TYPE, ATTRS)
- #endif
- 
- DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MIN_S32, BRIG_ATOMIC_MIN,
- 			 BRIG_TYPE_S32, "__hsail_atomic_min_s32",
- 			 BT_FN_INT_PTR_INT, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MIN_S64, BRIG_ATOMIC_MIN,
- 			 BRIG_TYPE_S64, "__hsail_atomic_min_s64",
- 			 BT_FN_LONG_PTR_LONG, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MIN_U32, BRIG_ATOMIC_MIN,
- 			 BRIG_TYPE_U32, "__hsail_atomic_min_u32",
- 			 BT_FN_UINT_PTR_UINT, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MIN_U64, BRIG_ATOMIC_MIN,
- 			 BRIG_TYPE_U64, "__hsail_atomic_min_u64",
- 			 BT_FN_ULONG_PTR_ULONG, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MAX_S32, BRIG_ATOMIC_MAX,
- 			 BRIG_TYPE_S32, "__hsail_atomic_max_s32",
- 			 BT_FN_INT_PTR_INT, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MAX_S64, BRIG_ATOMIC_MAX,
- 			 BRIG_TYPE_S64, "__hsail_atomic_max_s64",
- 			 BT_FN_LONG_PTR_LONG, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MAX_U32, BRIG_ATOMIC_MAX,
- 			 BRIG_TYPE_U32, "__hsail_atomic_max_u32",
- 			 BT_FN_UINT_PTR_UINT, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MAX_U64, BRIG_ATOMIC_MAX,
- 			 BRIG_TYPE_U64, "__hsail_atomic_max_u64",
- 			 BT_FN_ULONG_PTR_ULONG, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_WRAPDEC_U32,
- 			 BRIG_ATOMIC_WRAPDEC, BRIG_TYPE_U32,
- 			 "__hsail_atomic_wrapdec_u32",
- 			 BT_FN_UINT_PTR_UINT, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_WRAPDEC_U64,
- 			 BRIG_ATOMIC_WRAPDEC, BRIG_TYPE_U64,
- 			 "__hsail_atomic_wrapdec_u64",
- 			 BT_FN_ULONG_PTR_ULONG, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_WRAPINC_U32,
- 			 BRIG_ATOMIC_WRAPINC, BRIG_TYPE_U32,
- 			 "__hsail_atomic_wrapinc_u32",
- 			 BT_FN_UINT_PTR_UINT, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_WRAPINC_U64,
- 			 BRIG_ATOMIC_WRAPINC, BRIG_TYPE_U64,
- 			 "__hsail_atomic_wrapinc_u64",
- 			 BT_FN_ULONG_PTR_ULONG, ATTR_NOTHROW_LEAF_LIST)
- 
- #ifndef DEF_HSAIL_SAT_BUILTIN
- #define DEF_HSAIL_SAT_BUILTIN(ENUM, HSAIL_OPCODE, HSAIL_TYPE,	\
- 			      NAME, TYPE, ATTRS)
- #endif
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U64, BRIG_OPCODE_ADD,
- 		      BRIG_TYPE_U64, "__hsail_sat_add_u64",
- 		      BT_FN_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S64, BRIG_OPCODE_ADD,
- 		      BRIG_TYPE_S64, "__hsail_sat_add_s64",
- 		      BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U32, BRIG_OPCODE_ADD,
- 		      BRIG_TYPE_U32, "__hsail_sat_add_u32",
- 		      BT_FN_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S32, BRIG_OPCODE_ADD,
- 		      BRIG_TYPE_S32, "__hsail_sat_add_s32",
- 		      BT_FN_INT_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U16, BRIG_OPCODE_ADD,
- 		      BRIG_TYPE_U16, "__hsail_sat_add_u16",
- 		      BT_FN_UINT16_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S16, BRIG_OPCODE_ADD,
- 		      BRIG_TYPE_S16, "__hsail_sat_add_s16",
- 		      BT_FN_INT16_INT16_INT16, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U8, BRIG_OPCODE_ADD,
- 		      BRIG_TYPE_U8, "__hsail_sat_add_u8",
- 		      BT_FN_UINT8_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S8, BRIG_OPCODE_ADD,
- 		      BRIG_TYPE_S8, "__hsail_sat_add_s8",
- 		      BT_FN_INT8_INT8_INT8, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U64, BRIG_OPCODE_SUB,
- 		      BRIG_TYPE_U64, "__hsail_sat_sub_u64",
- 		      BT_FN_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S64, BRIG_OPCODE_SUB,
- 		      BRIG_TYPE_S64, "__hsail_sat_sub_s64",
- 		      BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U32, BRIG_OPCODE_SUB,
- 		      BRIG_TYPE_U32, "__hsail_sat_sub_u32",
- 		      BT_FN_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S32, BRIG_OPCODE_SUB,
- 		      BRIG_TYPE_S32, "__hsail_sat_sub_s32",
- 		      BT_FN_INT_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U16, BRIG_OPCODE_SUB,
- 		      BRIG_TYPE_U16, "__hsail_sat_sub_u16",
- 		      BT_FN_UINT16_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S16, BRIG_OPCODE_SUB,
- 		      BRIG_TYPE_S16, "__hsail_sat_sub_s16",
- 		      BT_FN_INT16_INT16_INT16, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U8, BRIG_OPCODE_SUB,
- 		      BRIG_TYPE_U8, "__hsail_sat_sub_u8",
- 		      BT_FN_UINT8_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S8, BRIG_OPCODE_SUB,
- 		      BRIG_TYPE_S8, "__hsail_sat_sub_s8",
- 		      BT_FN_INT8_INT8_INT8, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U64, BRIG_OPCODE_MUL,
- 		      BRIG_TYPE_U64, "__hsail_sat_mul_u64",
- 		      BT_FN_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S64, BRIG_OPCODE_MUL,
- 		      BRIG_TYPE_S64, "__hsail_sat_mul_s64",
- 		      BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U32, BRIG_OPCODE_MUL,
- 		      BRIG_TYPE_U32, "__hsail_sat_mul_u32",
- 		      BT_FN_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S32, BRIG_OPCODE_MUL,
- 		      BRIG_TYPE_S32, "__hsail_sat_mul_s32",
- 		      BT_FN_INT_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U16, BRIG_OPCODE_MUL,
- 		      BRIG_TYPE_U16, "__hsail_sat_mul_u16",
- 		      BT_FN_UINT16_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S16, BRIG_OPCODE_MUL,
- 		      BRIG_TYPE_S16, "__hsail_sat_mul_s16",
- 		      BT_FN_INT16_INT16_INT16, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U8, BRIG_OPCODE_MUL,
- 		      BRIG_TYPE_U8, "__hsail_sat_mul_u8",
- 		      BT_FN_UINT8_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S8, BRIG_OPCODE_MUL,
- 		      BRIG_TYPE_S8, "__hsail_sat_mul_s8",
- 		      BT_FN_INT8_INT8_INT8, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- #ifndef DEF_HSAIL_INTR_BUILTIN
- #define DEF_HSAIL_INTR_BUILTIN(ENUM, NAME, TYPE, ATTRS)
- #endif
- 
- DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_FTZ_F32_F16, "__hsail_ftz_f32_f16",
- 		       BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_FTZ_F32, "__hsail_ftz_f32",
- 		       BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_FTZ_F64, "__hsail_ftz_f64",
- 		       BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_PUSH_FRAME, "__hsail_alloca_push_frame",
- 		       BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_POP_FRAME, "__hsail_alloca_pop_frame",
- 		       BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_SETWORKITEMID, "__hsail_setworkitemid",
- 		       BT_FN_VOID_UINT32_UINT32_PTR, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_LAUNCH_WG_FUNC,
- 		       "__hsail_launch_wg_function",
- 		       BT_FN_VOID_PTR_PTR_UINT32, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_LAUNCH_KERNEL,
- 		       "__hsail_launch_kernel",
- 		       BT_FN_VOID_PTR_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_F32_TO_F16, "__hsail_f32_to_f16",
- 		       BT_FN_UINT16_UINT32, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_F16_TO_F32, "__hsail_f16_to_f32",
- 		       BT_FN_UINT32_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- #ifndef DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN
- #define DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN(ENUM, HSAIL_DEST_TYPE, HSAIL_SRC_TYPE, \
- 	NAME, TYPE, ATTRS)
- #endif
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U8_F32,
- 				BRIG_TYPE_U8, BRIG_TYPE_F32,
- 		       		"__hsail_cvt_zeroi_sat_u8_f32",
- 				BT_FN_UINT8_FLOAT,
- 				ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S8_F32,
- 				BRIG_TYPE_S8, BRIG_TYPE_F32,
- 		       		"__hsail_cvt_zeroi_sat_s8_f32",
- 				BT_FN_INT8_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U16_F32,
- 				BRIG_TYPE_U16, BRIG_TYPE_F32,
- 		       		"__hsail_cvt_zeroi_sat_u16_f32",
- 				BT_FN_UINT16_FLOAT,
- 				ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S16_F32,
- 				BRIG_TYPE_S16, BRIG_TYPE_F32,
- 		       		"__hsail_cvt_zeroi_sat_s16_f32",
- 				BT_FN_INT16_FLOAT,
- 				ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U32_F32,
- 				BRIG_TYPE_U32, BRIG_TYPE_F32,
- 		       		"__hsail_cvt_zeroi_sat_u32_f32",
- 				BT_FN_UINT32_FLOAT,
- 				ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S32_F32,
- 				BRIG_TYPE_S32, BRIG_TYPE_F32,
- 		       		"__hsail_cvt_zeroi_sat_s32_f32",
- 				BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U64_F32,
- 				BRIG_TYPE_U64, BRIG_TYPE_F32,
- 		       		"__hsail_cvt_zeroi_sat_u64_f32",
- 				BT_FN_UINT64_FLOAT,
- 				ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S64_F32,
- 				BRIG_TYPE_S64, BRIG_TYPE_F32,
- 		       		"__hsail_cvt_zeroi_sat_s64_f32",
- 				BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U8_F64,
- 				BRIG_TYPE_U8, BRIG_TYPE_F64,
- 		       		"__hsail_cvt_zeroi_sat_u8_f64",
- 				BT_FN_UINT8_FLOAT,
- 				ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S8_F64,
- 				BRIG_TYPE_S8, BRIG_TYPE_F64,
- 		       		"__hsail_cvt_zeroi_sat_s8_f64",
- 				BT_FN_INT8_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U16_F64,
- 				BRIG_TYPE_U16, BRIG_TYPE_F64,
- 		       		"__hsail_cvt_zeroi_sat_u16_f64",
- 				BT_FN_UINT16_FLOAT,
- 				ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S16_F64,
- 				BRIG_TYPE_S16, BRIG_TYPE_F64,
- 		       		"__hsail_cvt_zeroi_sat_s16_f64",
- 				BT_FN_INT16_FLOAT,
- 				ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U32_F64,
- 				BRIG_TYPE_U32, BRIG_TYPE_F64,
- 		       		"__hsail_cvt_zeroi_sat_u32_f64",
- 				BT_FN_UINT32_FLOAT,
- 				ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S32_F64,
- 				BRIG_TYPE_S32, BRIG_TYPE_F64,
- 		       		"__hsail_cvt_zeroi_sat_s32_f64",
- 				BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U64_F64,
- 				BRIG_TYPE_U64, BRIG_TYPE_F64,
- 		       		"__hsail_cvt_zeroi_sat_u64_f64",
- 				BT_FN_UINT64_FLOAT,
- 				ATTR_CONST_NOTHROW_LEAF_LIST)
- 
- DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S64_F64,
- 				BRIG_TYPE_S64, BRIG_TYPE_F64,
- 		       		"__hsail_cvt_zeroi_sat_s64_f64",
- 				BT_FN_LONG_FLOAT,
- 				ATTR_CONST_NOTHROW_LEAF_LIST)
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/btfout.cc gcc-12.1.0/gcc/btfout.cc
*** gcc-11.3.0/gcc/btfout.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/btfout.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,1133 ----
+ /* Output BTF format from GCC.
+    Copyright (C) 2021-2022 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ /* This file contains routines to output the BPF Type Format (BTF). The BTF
+    debug format is very similar to CTF; as a result, the structure of this file
+    closely resembles that of ctfout.cc, and the same CTF container objects are
+    used.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "target.h"
+ #include "memmodel.h"
+ #include "tm_p.h"
+ #include "output.h"
+ #include "dwarf2asm.h"
+ #include "debug.h"
+ #include "ctfc.h"
+ #include "diagnostic-core.h"
+ #include "cgraph.h"
+ #include "varasm.h"
+ #include "dwarf2out.h" /* For lookup_decl_die.  */
+ 
+ static int btf_label_num;
+ 
+ static GTY (()) section * btf_info_section;
+ 
+ /* BTF debug info section.  */
+ 
+ #ifndef BTF_INFO_SECTION_NAME
+ #define BTF_INFO_SECTION_NAME  ".BTF"
+ #endif
+ 
+ #define BTF_INFO_SECTION_FLAGS (SECTION_DEBUG)
+ 
+ /* Maximum size (in bytes) for an artifically generated BTF label.  */
+ 
+ #define MAX_BTF_LABEL_BYTES 40
+ 
+ static char btf_info_section_label[MAX_BTF_LABEL_BYTES];
+ 
+ #ifndef BTF_INFO_SECTION_LABEL
+ #define BTF_INFO_SECTION_LABEL  "Lbtf"
+ #endif
+ 
+ /* BTF encodes void as type id 0.  */
+ 
+ #define BTF_VOID_TYPEID 0
+ #define BTF_INIT_TYPEID 1
+ 
+ #define BTF_INVALID_TYPEID 0xFFFFFFFF
+ 
+ /* Mapping of CTF variables to the IDs they will be assigned when they are
+    converted to BTF_KIND_VAR type records. Strictly accounts for the index
+    from the start of the variable type entries, does not include the number
+    of types emitted prior to the variable records.  */
+ static GTY (()) hash_map <ctf_dvdef_ref, unsigned> *btf_var_ids;
+ 
+ /* Mapping of type IDs from original CTF ID to BTF ID. Types do not map
+    1-to-1 from CTF to BTF. To avoid polluting the CTF container when updating
+    type references-by-ID, we use this map instead.  */
+ static ctf_id_t * btf_id_map = NULL;
+ 
+ /* Information for creating the BTF_KIND_DATASEC records.  */
+ typedef struct btf_datasec
+ {
+   const char *name;                    /* Section name, e.g. ".bss".  */
+   uint32_t name_offset;                /* Offset to name in string table.  */
+   vec<struct btf_var_secinfo> entries; /* Variable entries in this section.  */
+ } btf_datasec_t;
+ 
+ /* One BTF_KIND_DATASEC record is created for each output data section which
+    will hold at least one variable.  */
+ static vec<btf_datasec_t> datasecs;
+ 
+ /* Holes occur for types which are present in the CTF container, but are either
+    non-representable or redundant in BTF.  */
+ static vec<ctf_id_t> holes;
+ 
+ /* CTF definition(s) of void. Only one definition of void should be generated.
+    We should not encounter more than one definition of void, but use a vector
+    to be safe.  */
+ static vec<ctf_id_t> voids;
+ 
+ /* Functions in BTF have two separate type records - one for the prototype
+    (BTF_KIND_FUNC_PROTO), as well as a BTF_KIND_FUNC. CTF_K_FUNCTION types
+    map closely to BTF_KIND_FUNC_PROTO, but the BTF_KIND_FUNC records must be
+    created. This vector holds them.  */
+ static GTY (()) vec<ctf_dtdef_ref, va_gc> *funcs;
+ 
+ /* The number of BTF variables added to the TU CTF container.  */
+ static unsigned int num_vars_added = 0;
+ 
+ /* The number of BTF types added to the TU CTF container.  */
+ static unsigned int num_types_added = 0;
+ 
+ /* The number of types synthesized for BTF that do not correspond to
+    CTF types.  */
+ static unsigned int num_types_created = 0;
+ 
+ /* Map a CTF type kind to the corresponding BTF type kind.  */
+ 
+ static uint32_t
+ get_btf_kind (uint32_t ctf_kind)
+ {
+   /* N.B. the values encoding kinds are not in general the same for the
+      same kind between CTF and BTF. e.g. CTF_K_CONST != BTF_KIND_CONST.  */
+   switch (ctf_kind)
+     {
+     case CTF_K_INTEGER:  return BTF_KIND_INT;
+     case CTF_K_FLOAT:	 return BTF_KIND_FLOAT;
+     case CTF_K_POINTER:  return BTF_KIND_PTR;
+     case CTF_K_ARRAY:    return BTF_KIND_ARRAY;
+     case CTF_K_FUNCTION: return BTF_KIND_FUNC_PROTO;
+     case CTF_K_STRUCT:   return BTF_KIND_STRUCT;
+     case CTF_K_UNION:    return BTF_KIND_UNION;
+     case CTF_K_ENUM:     return BTF_KIND_ENUM;
+     case CTF_K_FORWARD:  return BTF_KIND_FWD;
+     case CTF_K_TYPEDEF:  return BTF_KIND_TYPEDEF;
+     case CTF_K_VOLATILE: return BTF_KIND_VOLATILE;
+     case CTF_K_CONST:    return BTF_KIND_CONST;
+     case CTF_K_RESTRICT: return BTF_KIND_RESTRICT;
+     default:;
+     }
+   return BTF_KIND_UNKN;
+ }
+ 
+ /* Allocate the btf_id_map, and initialize elements to BTF_INVALID_TYPEID.  */
+ 
+ static void
+ init_btf_id_map (size_t len)
+ {
+   btf_id_map = XNEWVEC (ctf_id_t, len);
+ 
+   btf_id_map[0] = BTF_VOID_TYPEID;
+   for (size_t i = 1; i < len; i++)
+     btf_id_map[i] = BTF_INVALID_TYPEID;
+ }
+ 
+ /* Return the BTF type ID of CTF type ID KEY, or BTF_INVALID_TYPEID if the CTF
+    type with ID KEY does not map to a BTF type.  */
+ 
+ ctf_id_t
+ get_btf_id (ctf_id_t key)
+ {
+   return btf_id_map[key];
+ }
+ 
+ /* Set the CTF type ID KEY to map to BTF type ID VAL.  */
+ 
+ static inline void
+ set_btf_id (ctf_id_t key, ctf_id_t val)
+ {
+   btf_id_map[key] = val;
+ }
+ 
+ /* Return TRUE iff the given CTF type ID maps to a BTF type which will
+    be emitted.  */
+ static inline bool
+ btf_emit_id_p (ctf_id_t id)
+ {
+   return ((btf_id_map[id] != BTF_VOID_TYPEID)
+ 	  && (btf_id_map[id] <= BTF_MAX_TYPE));
+ }
+ 
+ /* Each BTF type can be followed additional, variable-length information
+    completing the description of the type. Calculate the number of bytes
+    of variable information required to encode a given type.  */
+ 
+ static uint64_t
+ btf_calc_num_vbytes (ctf_dtdef_ref dtd)
+ {
+   uint64_t vlen_bytes = 0;
+ 
+   uint32_t kind = get_btf_kind (CTF_V2_INFO_KIND (dtd->dtd_data.ctti_info));
+   uint32_t vlen = CTF_V2_INFO_VLEN (dtd->dtd_data.ctti_info);
+ 
+   switch (kind)
+     {
+     case BTF_KIND_UNKN:
+     case BTF_KIND_PTR:
+     case BTF_KIND_FWD:
+     case BTF_KIND_TYPEDEF:
+     case BTF_KIND_VOLATILE:
+     case BTF_KIND_CONST:
+     case BTF_KIND_RESTRICT:
+     case BTF_KIND_FUNC:
+     /* These kinds have no vlen data.  */
+       break;
+ 
+     case BTF_KIND_INT:
+       /* Size 0 integers represent redundant definitions of void that will
+ 	 not be emitted. Don't allocate space for them.  */
+       if (dtd->dtd_data.ctti_size == 0)
+ 	break;
+ 
+       vlen_bytes += sizeof (uint32_t);
+       break;
+ 
+     case BTF_KIND_ARRAY:
+       vlen_bytes += sizeof (struct btf_array);
+       break;
+ 
+     case BTF_KIND_STRUCT:
+     case BTF_KIND_UNION:
+       vlen_bytes += vlen * sizeof (struct btf_member);
+       break;
+ 
+     case BTF_KIND_ENUM:
+       vlen_bytes += vlen * sizeof (struct btf_enum);
+       break;
+ 
+     case BTF_KIND_FUNC_PROTO:
+       vlen_bytes += vlen * sizeof (struct btf_param);
+       break;
+ 
+     case BTF_KIND_VAR:
+       vlen_bytes += sizeof (struct btf_var);
+       break;
+ 
+     case BTF_KIND_DATASEC:
+       vlen_bytes += vlen * sizeof (struct btf_var_secinfo);
+       break;
+ 
+     default:
+       break;
+     }
+   return vlen_bytes;
+ }
+ 
+ /* Initialize BTF section (.BTF) for output.  */
+ 
+ void
+ init_btf_sections (void)
+ {
+   btf_info_section = get_section (BTF_INFO_SECTION_NAME, BTF_INFO_SECTION_FLAGS,
+ 				  NULL);
+ 
+   ASM_GENERATE_INTERNAL_LABEL (btf_info_section_label,
+ 			       BTF_INFO_SECTION_LABEL, btf_label_num++);
+ }
+ 
+ /* Push a BTF datasec variable entry INFO into the datasec named SECNAME,
+    creating the datasec if it does not already exist.  */
+ 
+ static void
+ btf_datasec_push_entry (ctf_container_ref ctfc, const char *secname,
+ 			struct btf_var_secinfo info)
+ {
+   if (secname == NULL)
+     return;
+ 
+   for (size_t i = 0; i < datasecs.length (); i++)
+     if (strcmp (datasecs[i].name, secname) == 0)
+       {
+ 	datasecs[i].entries.safe_push (info);
+ 	return;
+       }
+ 
+   /* If we don't already have a datasec record for secname, make one.  */
+ 
+   uint32_t str_off;
+   ctf_add_string (ctfc, secname, &str_off, CTF_AUX_STRTAB);
+   if (strcmp (secname, ""))
+     ctfc->ctfc_aux_strlen += strlen (secname) + 1;
+ 
+   btf_datasec_t ds;
+   ds.name = secname;
+   ds.name_offset = str_off;
+ 
+   ds.entries.create (0);
+   ds.entries.safe_push (info);
+ 
+   datasecs.safe_push (ds);
+   num_types_created++;
+ }
+ 
+ /* Construct all BTF_KIND_DATASEC records for CTFC. One such record is created
+    for each non-empty data-containing section in the output. Each record is
+    followed by a variable number of entries describing the variables stored
+    in that section.  */
+ 
+ static void
+ btf_collect_datasec (ctf_container_ref ctfc)
+ {
+   /* See cgraph.h struct symtab_node, which varpool_node extends.  */
+   varpool_node *node;
+   FOR_EACH_VARIABLE (node)
+     {
+       dw_die_ref die = lookup_decl_die (node->decl);
+       if (die == NULL)
+ 	continue;
+ 
+       ctf_dvdef_ref dvd = ctf_dvd_lookup (ctfc, die);
+       if (dvd == NULL)
+ 	continue;
+ 
+       const char *section_name = node->get_section ();
+ 
+       if (section_name == NULL)
+ 	{
+ 	  switch (categorize_decl_for_section (node->decl, 0))
+ 	    {
+ 	    case SECCAT_BSS:
+ 	      section_name = ".bss";
+ 	      break;
+ 	    case SECCAT_DATA:
+ 	      section_name = ".data";
+ 	      break;
+ 	    case SECCAT_RODATA:
+ 	      section_name = ".rodata";
+ 	      break;
+ 	    default:
+ 	      continue;
+ 	    }
+ 	}
+ 
+       struct btf_var_secinfo info;
+ 
+       info.type = 0;
+       unsigned int *var_id = btf_var_ids->get (dvd);
+       if (var_id)
+ 	/* +1 for the sentinel type not in the types map.  */
+ 	info.type = *var_id + num_types_added + 1;
+       else
+ 	continue;
+ 
+       info.size = 0;
+       tree size = DECL_SIZE_UNIT (node->decl);
+       if (tree_fits_uhwi_p (size))
+ 	info.size = tree_to_uhwi (size);
+ 
+       /* Offset is left as 0 at compile time, to be filled in by loaders such
+ 	 as libbpf.  */
+       info.offset = 0;
+ 
+       btf_datasec_push_entry (ctfc, section_name, info);
+     }
+ }
+ 
+ /* Return true if the type ID is that of a type which will not be emitted (for
+    example, if it is not representable in BTF).  */
+ 
+ static bool
+ btf_removed_type_p (ctf_id_t id)
+ {
+   return holes.contains (id);
+ }
+ 
+ /* Adjust the given type ID to account for holes and duplicate definitions of
+    void.  */
+ 
+ static ctf_id_t
+ btf_adjust_type_id (ctf_id_t id)
+ {
+   size_t n;
+   ctf_id_t i = 0;
+ 
+   /* Do not adjust invalid type markers.  */
+   if (id == BTF_INVALID_TYPEID)
+     return id;
+ 
+   for (n = 0; n < voids.length (); n++)
+     if (id == voids[n])
+       return BTF_VOID_TYPEID;
+ 
+   for (n = 0; n < holes.length (); n++)
+     {
+       if (holes[n] < id)
+ 	i++;
+       else if (holes[n] == id)
+ 	return BTF_VOID_TYPEID;
+     }
+ 
+   return id - i;
+ }
+ 
+ /* Postprocessing callback routine for types.  */
+ 
+ int
+ btf_dtd_postprocess_cb (ctf_dtdef_ref *slot, ctf_container_ref arg_ctfc)
+ {
+   ctf_dtdef_ref ctftype = (ctf_dtdef_ref) * slot;
+ 
+   size_t index = ctftype->dtd_type;
+   gcc_assert (index <= arg_ctfc->ctfc_types->elements ());
+ 
+   uint32_t ctf_kind, btf_kind;
+ 
+   ctf_kind = CTF_V2_INFO_KIND (ctftype->dtd_data.ctti_info);
+   btf_kind = get_btf_kind (ctf_kind);
+ 
+   if (btf_kind == BTF_KIND_UNKN)
+     /* This type is not representable in BTF. Create a hole.  */
+     holes.safe_push (ctftype->dtd_type);
+ 
+   else if (btf_kind == BTF_KIND_INT && ctftype->dtd_data.ctti_size == 0)
+     {
+       /* This is a (redundant) definition of void.  */
+       voids.safe_push (ctftype->dtd_type);
+       holes.safe_push (ctftype->dtd_type);
+     }
+ 
+   arg_ctfc->ctfc_types_list[index] = ctftype;
+ 
+   return 1;
+ }
+ 
+ /* Preprocessing callback routine for variables.  */
+ 
+ int
+ btf_dvd_emit_preprocess_cb (ctf_dvdef_ref *slot, ctf_container_ref arg_ctfc)
+ {
+   ctf_dvdef_ref var = (ctf_dvdef_ref) * slot;
+ 
+   /* Do not add variables which refer to unsupported types.  */
+   if (btf_removed_type_p (var->dvd_type))
+     return 1;
+ 
+   arg_ctfc->ctfc_vars_list[num_vars_added] = var;
+   btf_var_ids->put (var, num_vars_added);
+ 
+   num_vars_added++;
+   num_types_created++;
+ 
+   return 1;
+ }
+ 
+ /* Preprocessing callback routine for types.  */
+ 
+ static void
+ btf_dtd_emit_preprocess_cb (ctf_container_ref ctfc, ctf_dtdef_ref dtd)
+ {
+   if (!btf_emit_id_p (dtd->dtd_type))
+     return;
+ 
+   uint32_t btf_kind
+     = get_btf_kind (CTF_V2_INFO_KIND (dtd->dtd_data.ctti_info));
+ 
+   if (btf_kind == BTF_KIND_FUNC_PROTO)
+     {
+       /* Functions actually get two types: a BTF_KIND_FUNC_PROTO, and
+ 	 also a BTF_KIND_FUNC. But the CTF container only allocates one
+ 	 type per function, which matches closely with BTF_KIND_FUNC_PROTO.
+ 	 For each such function, also allocate a BTF_KIND_FUNC entry.
+ 	 These will be output later.  */
+       ctf_dtdef_ref func_dtd = ggc_cleared_alloc<ctf_dtdef_t> ();
+       func_dtd->dtd_data = dtd->dtd_data;
+       func_dtd->dtd_data.ctti_type = dtd->dtd_type;
+ 
+       vec_safe_push (funcs, func_dtd);
+       num_types_created++;
+ 
+       /* Only the BTF_KIND_FUNC type actually references the name. The
+ 	 BTF_KIND_FUNC_PROTO is always anonymous.  */
+       dtd->dtd_data.ctti_name = 0;
+     }
+ 
+   ctfc->ctfc_num_vlen_bytes += btf_calc_num_vbytes (dtd);
+ }
+ 
+ /* Preprocess the CTF information to prepare for BTF output.  BTF is almost a
+    subset of CTF, with many small differences in encoding, and lacking support
+    for some types (notably floating point formats).
+ 
+    During the preprocessing pass:
+    - Ascertain that the sorted list of types has been prepared.  For the BTF
+      generation process, this is taken care of by the btf_init_postprocess ().
+ 
+    - BTF_KIND_FUNC and BTF_KIND_DATASEC records are constructed. These types do
+      not have analogues in CTF (the analogous type to CTF_K_FUNCTION is
+      BTF_KIND_FUNC_PROTO), but can be relatively easily deduced from CTF
+      information.
+ 
+    - Construct BTF_KIND_VAR records, representing variables.
+ 
+    - Calculate the total size in bytes of variable-length information following
+      BTF type records. This is used for outputting the BTF header.
+ 
+    After preprocessing, all BTF information is ready to be output:
+    - ctfc->ctfc_types_list holdstypes converted from CTF types. This does not
+      include KIND_VAR, KIND_FUNC, nor KIND_DATASEC types. These types have been
+      re-encoded to the appropriate representation in BTF.
+    - ctfc->ctfc_vars_list holds all variables which should be output.
+      Variables of unsupported types are not present in this list.
+    - Vector 'funcs' holds all BTF_KIND_FUNC types, one to match each
+      BTF_KIND_FUNC_PROTO.
+    - Vector 'datasecs' holds all BTF_KIND_DATASEC types.  */
+ 
+ static void
+ btf_emit_preprocess (ctf_container_ref ctfc)
+ {
+   size_t num_ctf_types = ctfc->ctfc_types->elements ();
+   size_t num_ctf_vars = ctfc->ctfc_vars->elements ();
+   size_t i;
+ 
+   if (num_ctf_types)
+     {
+       gcc_assert (ctfc->ctfc_types_list);
+       /* Preprocess the types.  */
+       for (i = 1; i <= num_ctf_types; i++)
+ 	btf_dtd_emit_preprocess_cb (ctfc, ctfc->ctfc_types_list[i]);
+     }
+ 
+   btf_var_ids = hash_map<ctf_dvdef_ref, unsigned int>::create_ggc (100);
+ 
+   if (num_ctf_vars)
+     {
+       /* Allocate and construct the list of variables. While BTF variables are
+ 	 not distinct from types (in that variables are simply types with
+ 	 BTF_KIND_VAR), it is simpler to maintain a separate list of variables
+ 	 and append them to the types list during output.  */
+       ctfc->ctfc_vars_list = ggc_vec_alloc<ctf_dvdef_ref>(num_ctf_vars);
+       ctfc->ctfc_vars->traverse<ctf_container_ref, btf_dvd_emit_preprocess_cb>
+ 	(ctfc);
+ 
+       ctfc->ctfc_num_vlen_bytes += (num_vars_added * sizeof (struct btf_var));
+     }
+ 
+   btf_collect_datasec (ctfc);
+ }
+ 
+ /* Return true iff DMD is a member description of a bit-field which can be
+    validly represented in BTF.  */
+ 
+ static bool
+ btf_dmd_representable_bitfield_p (ctf_container_ref ctfc, ctf_dmdef_t *dmd)
+ {
+   ctf_dtdef_ref ref_type = ctfc->ctfc_types_list[dmd->dmd_type];
+ 
+   if (CTF_V2_INFO_KIND (ref_type->dtd_data.ctti_info) == CTF_K_SLICE)
+     {
+       unsigned short word_offset = ref_type->dtd_u.dtu_slice.cts_offset;
+       unsigned short bits = ref_type->dtd_u.dtu_slice.cts_bits;
+       uint64_t sou_offset = dmd->dmd_offset;
+ 
+       if ((bits > 0xff) || ((sou_offset + word_offset) > 0xffffff))
+ 	return false;
+ 
+       return true;
+     }
+ 
+   return false;
+ }
+ 
+ /* BTF asm helper routines.  */
+ 
+ /* Asm'out a BTF type. This routine is responsible for the bulk of the task
+    of converting CTF types to their BTF representation.  */
+ 
+ static void
+ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd)
+ {
+   uint32_t btf_kind, btf_kflag, btf_vlen, btf_size_type;
+   uint32_t ctf_info = dtd->dtd_data.ctti_info;
+ 
+   btf_kind = get_btf_kind (CTF_V2_INFO_KIND (ctf_info));
+   btf_size_type = dtd->dtd_data.ctti_type;
+   btf_vlen = CTF_V2_INFO_VLEN (ctf_info);
+ 
+   /* By now any unrepresentable types have been removed.  */
+   gcc_assert (btf_kind != BTF_KIND_UNKN);
+ 
+   /* Size 0 integers are redundant definitions of void. None should remain
+      in the types list by this point.  */
+   gcc_assert (btf_kind != BTF_KIND_INT || btf_size_type >= 1);
+ 
+   /* Re-encode the ctti_info to BTF.  */
+   /* kflag is 1 for structs/unions with a bitfield member.
+      kflag is 1 for forwards to unions.
+      kflag is 0 in all other cases.  */
+   btf_kflag = 0;
+ 
+   if (btf_kind == BTF_KIND_STRUCT || btf_kind == BTF_KIND_UNION)
+     {
+       /* If a struct/union has ANY bitfield members, set kflag=1.
+ 	 Note that we must also change the encoding of every member to encode
+ 	 both member bitfield size (stealing most-significant 8 bits) and bit
+ 	 offset (LS 24 bits). This is done during preprocessing.  */
+       ctf_dmdef_t *dmd;
+       for (dmd = dtd->dtd_u.dtu_members;
+ 	   dmd != NULL; dmd = (ctf_dmdef_t *) ctf_dmd_list_next (dmd))
+ 	{
+ 	  /* Set kflag if this member is a representable bitfield.  */
+ 	  if (btf_dmd_representable_bitfield_p (ctfc, dmd))
+ 	    btf_kflag = 1;
+ 
+ 	  /* Struct members that refer to unsupported types or bitfield formats
+ 	     shall be skipped. These are marked during preprocessing.  */
+ 	  else if (!btf_emit_id_p (dmd->dmd_type))
+ 	    btf_vlen -= 1;
+ 	}
+     }
+ 
+   /* BTF forwards make use of KIND_FLAG to distinguish between forwards to
+      structs and forwards to unions. The dwarf2ctf conversion process stores
+      the kind of the forward in ctti_type, but for BTF this must be 0 for
+      forwards, with only the KIND_FLAG to distinguish.
+      At time of writing, BTF forwards to enums are unspecified.  */
+   if (btf_kind == BTF_KIND_FWD)
+     {
+       if (dtd->dtd_data.ctti_type == CTF_K_UNION)
+ 	btf_kflag = 1;
+ 
+       btf_size_type = 0;
+     }
+ 
+   dw2_asm_output_data (4, dtd->dtd_data.ctti_name, "btt_name");
+   dw2_asm_output_data (4, BTF_TYPE_INFO (btf_kind, btf_kflag, btf_vlen),
+ 		       "btt_info: kind=%u, kflag=%u, vlen=%u",
+ 		       btf_kind, btf_kflag, btf_vlen);
+   switch (btf_kind)
+     {
+     case BTF_KIND_INT:
+     case BTF_KIND_FLOAT:
+     case BTF_KIND_STRUCT:
+     case BTF_KIND_UNION:
+     case BTF_KIND_ENUM:
+     case BTF_KIND_DATASEC:
+       dw2_asm_output_data (4, dtd->dtd_data.ctti_size, "btt_size: %uB",
+ 			   dtd->dtd_data.ctti_size);
+       return;
+     default:
+       break;
+     }
+ 
+   dw2_asm_output_data (4, get_btf_id (dtd->dtd_data.ctti_type), "btt_type");
+ }
+ 
+ /* Asm'out the variable information following a BTF_KIND_ARRAY.  */
+ 
+ static void
+ btf_asm_array (ctf_dtdef_ref dtd)
+ {
+   dw2_asm_output_data (4, get_btf_id (dtd->dtd_u.dtu_arr.ctr_contents),
+ 		       "bta_contents");
+   dw2_asm_output_data (4, get_btf_id (dtd->dtd_u.dtu_arr.ctr_index),
+ 		       "bta_index");
+   dw2_asm_output_data (4, dtd->dtd_u.dtu_arr.ctr_nelems, "bta_nelems");
+ }
+ 
+ /* Asm'out a BTF_KIND_VAR.  */
+ 
+ static void
+ btf_asm_varent (ctf_dvdef_ref var)
+ {
+   dw2_asm_output_data (4, var->dvd_name_offset, "btv_name");
+   dw2_asm_output_data (4, BTF_TYPE_INFO (BTF_KIND_VAR, 0, 0), "btv_info");
+   dw2_asm_output_data (4, get_btf_id (var->dvd_type), "btv_type");
+   dw2_asm_output_data (4, (var->dvd_visibility ? 1 : 0), "btv_linkage");
+ }
+ 
+ /* Asm'out a member description following a BTF_KIND_STRUCT or
+    BTF_KIND_UNION.  */
+ 
+ static void
+ btf_asm_sou_member (ctf_container_ref ctfc, ctf_dmdef_t * dmd)
+ {
+   ctf_dtdef_ref ref_type = ctfc->ctfc_types_list[dmd->dmd_type];
+ 
+   /* Re-encode bitfields to BTF representation.  */
+   if (CTF_V2_INFO_KIND (ref_type->dtd_data.ctti_info) == CTF_K_SLICE)
+     {
+       ctf_id_t base_type = ref_type->dtd_u.dtu_slice.cts_type;
+       unsigned short word_offset = ref_type->dtd_u.dtu_slice.cts_offset;
+       unsigned short bits = ref_type->dtd_u.dtu_slice.cts_bits;
+       uint64_t sou_offset = dmd->dmd_offset;
+ 
+       /* Pack the bit offset and bitfield size together.  */
+       sou_offset += word_offset;
+ 
+       /* If this bitfield cannot be represented, do not output anything.
+ 	 The parent struct/union 'vlen' field has already been updated.  */
+       if ((bits > 0xff) || (sou_offset > 0xffffff))
+ 	return;
+ 
+       sou_offset &= 0x00ffffff;
+       sou_offset |= ((bits & 0xff) << 24);
+ 
+       /* Refer to the base type of the slice.  */
+       dw2_asm_output_data (4, dmd->dmd_name_offset, "btm_name_off");
+       dw2_asm_output_data (4, get_btf_id (base_type), "btm_type");
+       dw2_asm_output_data (4, sou_offset, "btm_offset");
+     }
+   else
+     {
+       dw2_asm_output_data (4, dmd->dmd_name_offset, "btm_name_off");
+       dw2_asm_output_data (4, get_btf_id (dmd->dmd_type), "btm_type");
+       dw2_asm_output_data (4, dmd->dmd_offset, "btm_offset");
+     }
+ }
+ 
+ /* Asm'out an enum constant following a BTF_KIND_ENUM.  */
+ 
+ static void
+ btf_asm_enum_const (ctf_dmdef_t * dmd)
+ {
+   dw2_asm_output_data (4, dmd->dmd_name_offset, "bte_name");
+   dw2_asm_output_data (4, dmd->dmd_value, "bte_value");
+ }
+ 
+ /* Asm'out a function parameter description following a BTF_KIND_FUNC_PROTO.  */
+ 
+ static void
+ btf_asm_func_arg (ctf_func_arg_t * farg, size_t stroffset)
+ {
+   /* If the function arg does not have a name, refer to the null string at
+      the start of the string table. This ensures correct encoding for varargs
+      '...' arguments.  */
+   if ((farg->farg_name != NULL) && strcmp (farg->farg_name, ""))
+     dw2_asm_output_data (4, farg->farg_name_offset + stroffset, "farg_name");
+   else
+     dw2_asm_output_data (4, 0, "farg_name");
+ 
+   dw2_asm_output_data (4, (btf_removed_type_p (farg->farg_type)
+ 			   ? BTF_VOID_TYPEID
+ 			   : get_btf_id (farg->farg_type)),
+ 		       "farg_type");
+ }
+ 
+ /* Asm'out a BTF_KIND_FUNC type.  */
+ 
+ static void
+ btf_asm_func_type (ctf_dtdef_ref dtd)
+ {
+   dw2_asm_output_data (4, dtd->dtd_data.ctti_name, "btt_name");
+   dw2_asm_output_data (4, BTF_TYPE_INFO (BTF_KIND_FUNC, 0, 0), "btt_info");
+   dw2_asm_output_data (4, get_btf_id (dtd->dtd_data.ctti_type), "btt_type");
+ }
+ 
+ /* Asm'out a variable entry following a BTF_KIND_DATASEC.  */
+ 
+ static void
+ btf_asm_datasec_entry (struct btf_var_secinfo info)
+ {
+   dw2_asm_output_data (4, info.type, "bts_type");
+   dw2_asm_output_data (4, info.offset, "bts_offset");
+   dw2_asm_output_data (4, info.size, "bts_size");
+ }
+ 
+ /* Asm'out a whole BTF_KIND_DATASEC, including its variable entries.  */
+ 
+ static void
+ btf_asm_datasec_type (btf_datasec_t ds, size_t stroffset)
+ {
+   dw2_asm_output_data (4, ds.name_offset + stroffset, "btt_name");
+   dw2_asm_output_data (4, BTF_TYPE_INFO (BTF_KIND_DATASEC, 0,
+ 					 ds.entries.length ()),
+ 		       "btt_info");
+   /* Note: the "total section size in bytes" is emitted as 0 and patched by
+      loaders such as libbpf.  */
+   dw2_asm_output_data (4, 0, "btt_size");
+   for (size_t i = 0; i < ds.entries.length (); i++)
+     btf_asm_datasec_entry (ds.entries[i]);
+ }
+ 
+ /* Compute and output the header information for a .BTF section.  */
+ 
+ static void
+ output_btf_header (ctf_container_ref ctfc)
+ {
+    switch_to_section (btf_info_section);
+    ASM_OUTPUT_LABEL (asm_out_file, btf_info_section_label);
+ 
+    /* BTF magic number, version, flags, and header length.  */
+    dw2_asm_output_data (2, BTF_MAGIC, "btf_magic");
+    dw2_asm_output_data (1, BTF_VERSION, "btf_version");
+    dw2_asm_output_data (1, 0, "btf_flags");
+    dw2_asm_output_data (4, sizeof (struct btf_header), "btf_hdr_len");
+ 
+    uint32_t type_off = 0, type_len = 0;
+    uint32_t str_off = 0, str_len = 0;
+    uint32_t datasec_vlen_bytes = 0;
+ 
+    if (!ctfc_is_empty_container (ctfc))
+      {
+        for (size_t i = 0; i < datasecs.length (); i++)
+ 	 {
+ 	   datasec_vlen_bytes += ((datasecs[i].entries.length ())
+ 				  * sizeof (struct btf_var_secinfo));
+ 	 }
+ 
+        /* Total length (bytes) of the types section.  */
+        type_len = (num_types_added * sizeof (struct btf_type))
+ 	 + (num_types_created * sizeof (struct btf_type))
+ 	 + datasec_vlen_bytes
+ 	 + ctfc->ctfc_num_vlen_bytes;
+ 
+        str_off = type_off + type_len;
+ 
+        str_len = ctfc->ctfc_strtable.ctstab_len
+ 	 + ctfc->ctfc_aux_strtable.ctstab_len;
+      }
+ 
+    /* Offset of type section.  */
+    dw2_asm_output_data (4, type_off, "type_off");
+    /* Length of type section in bytes.  */
+    dw2_asm_output_data (4, type_len, "type_len");
+     /* Offset of string section.  */
+    dw2_asm_output_data (4, str_off, "str_off");
+     /* Length of string section in bytes.  */
+    dw2_asm_output_data (4, str_len, "str_len");
+ }
+ 
+ /* Output all BTF_KIND_VARs in CTFC.  */
+ 
+ static void
+ output_btf_vars (ctf_container_ref ctfc)
+ {
+   size_t i;
+   size_t num_ctf_vars = num_vars_added;
+   if (num_ctf_vars)
+     {
+       for (i = 0; i < num_ctf_vars; i++)
+ 	btf_asm_varent (ctfc->ctfc_vars_list[i]);
+     }
+ }
+ 
+ /* Output BTF string records. The BTF strings section is a concatenation
+    of the standard and auxilliary string tables in the ctf container.  */
+ 
+ static void
+ output_btf_strs (ctf_container_ref ctfc)
+ {
+   ctf_string_t * ctf_string = ctfc->ctfc_strtable.ctstab_head;
+ 
+   while (ctf_string)
+     {
+       dw2_asm_output_nstring (ctf_string->cts_str, -1, "btf_string");
+       ctf_string = ctf_string->cts_next;
+     }
+ 
+   ctf_string = ctfc->ctfc_aux_strtable.ctstab_head;
+   while (ctf_string)
+     {
+       dw2_asm_output_nstring (ctf_string->cts_str, -1, "btf_aux_string");
+       ctf_string = ctf_string->cts_next;
+     }
+ }
+ 
+ /* Output all (representable) members of a BTF_KIND_STRUCT or
+    BTF_KIND_UNION type.  */
+ 
+ static void
+ output_asm_btf_sou_fields (ctf_container_ref ctfc, ctf_dtdef_ref dtd)
+ {
+   ctf_dmdef_t * dmd;
+ 
+   for (dmd = dtd->dtd_u.dtu_members;
+        dmd != NULL; dmd = (ctf_dmdef_t *) ctf_dmd_list_next (dmd))
+       btf_asm_sou_member (ctfc, dmd);
+ }
+ 
+ /* Output all enumerator constants following a BTF_KIND_ENUM.  */
+ 
+ static void
+ output_asm_btf_enum_list (ctf_container_ref ARG_UNUSED (ctfc),
+ 			  ctf_dtdef_ref dtd)
+ {
+   ctf_dmdef_t * dmd;
+ 
+   for (dmd = dtd->dtd_u.dtu_members;
+        dmd != NULL; dmd = (ctf_dmdef_t *) ctf_dmd_list_next (dmd))
+     btf_asm_enum_const (dmd);
+ }
+ 
+ /* Output all function arguments following a BTF_KIND_FUNC_PROTO.  */
+ 
+ static void
+ output_asm_btf_func_args_list (ctf_container_ref ctfc,
+ 			       ctf_dtdef_ref dtd)
+ {
+   size_t farg_name_offset = ctfc_get_strtab_len (ctfc, CTF_STRTAB);
+   ctf_func_arg_t * farg;
+   for (farg = dtd->dtd_u.dtu_argv;
+        farg != NULL; farg = (ctf_func_arg_t *) ctf_farg_list_next (farg))
+     btf_asm_func_arg (farg, farg_name_offset);
+ }
+ 
+ /* Output the variable portion of a BTF type record. The information depends
+    on the kind of the type.  */
+ 
+ static void
+ output_asm_btf_vlen_bytes (ctf_container_ref ctfc, ctf_dtdef_ref dtd)
+ {
+   uint32_t btf_kind, encoding;
+ 
+   btf_kind = get_btf_kind (CTF_V2_INFO_KIND (dtd->dtd_data.ctti_info));
+ 
+   if (btf_kind == BTF_KIND_UNKN)
+     return;
+ 
+   switch (btf_kind)
+     {
+     case BTF_KIND_INT:
+       /* Redundant definitions of void may still be hanging around in the type
+ 	 list as size 0 integers. Skip emitting them.  */
+       if (dtd->dtd_data.ctti_size < 1)
+ 	break;
+ 
+       encoding = BTF_INT_DATA (dtd->dtd_u.dtu_enc.cte_format,
+ 			       dtd->dtd_u.dtu_enc.cte_offset,
+ 			       dtd->dtd_u.dtu_enc.cte_bits);
+ 
+       dw2_asm_output_data (4, encoding, "bti_encoding");
+       break;
+ 
+     case BTF_KIND_ARRAY:
+       btf_asm_array (dtd);
+       break;
+ 
+     case BTF_KIND_STRUCT:
+     case BTF_KIND_UNION:
+       output_asm_btf_sou_fields (ctfc, dtd);
+       break;
+ 
+     case BTF_KIND_ENUM:
+       output_asm_btf_enum_list (ctfc, dtd);
+       break;
+ 
+     case BTF_KIND_FUNC_PROTO:
+       output_asm_btf_func_args_list (ctfc, dtd);
+       break;
+ 
+     case BTF_KIND_VAR:
+       /* BTF Variables are handled by output_btf_vars and btf_asm_varent.
+ 	 There should be no BTF_KIND_VAR types at this point.  */
+       gcc_unreachable ();
+ 
+     case BTF_KIND_DATASEC:
+       /* The BTF_KIND_DATASEC records are handled by output_btf_datasec_types
+ 	 and btf_asm_datasec_type. There should be no BTF_KIND_DATASEC types
+ 	 at this point.  */
+       gcc_unreachable ();
+ 
+     default:
+       /* All other BTF type kinds have no variable length data.  */
+       break;
+     }
+ }
+ 
+ /* Output a whole BTF type record for TYPE, including the fixed and variable
+    data portions.  */
+ 
+ static void
+ output_asm_btf_type (ctf_container_ref ctfc, ctf_dtdef_ref type)
+ {
+   if (btf_emit_id_p (type->dtd_type))
+     {
+       btf_asm_type (ctfc, type);
+       output_asm_btf_vlen_bytes (ctfc, type);
+     }
+ }
+ 
+ /* Output all BTF types in the container. This does not include synthesized
+    types: BTF_KIND_VAR, BTF_KIND_FUNC, nor BTF_KIND_DATASEC.  */
+ 
+ static void
+ output_btf_types (ctf_container_ref ctfc)
+ {
+   size_t i;
+   size_t num_types = ctfc->ctfc_types->elements ();
+   if (num_types)
+     {
+       for (i = 1; i <= num_types; i++)
+ 	output_asm_btf_type (ctfc, ctfc->ctfc_types_list[i]);
+     }
+ }
+ 
+ /* Output all BTF_KIND_FUNC type records.  */
+ 
+ static void
+ output_btf_func_types (void)
+ {
+   for (size_t i = 0; i < vec_safe_length (funcs); i++)
+     btf_asm_func_type ((*funcs)[i]);
+ }
+ 
+ /* Output all BTF_KIND_DATASEC records.  */
+ 
+ static void
+ output_btf_datasec_types (ctf_container_ref ctfc)
+ {
+   size_t name_offset = ctfc_get_strtab_len (ctfc, CTF_STRTAB);
+ 
+   for (size_t i = 0; i < datasecs.length(); i++)
+     btf_asm_datasec_type (datasecs[i], name_offset);
+ }
+ 
+ /* Postprocess the CTF debug data post initialization.
+ 
+    During the postprocess pass:
+ 
+    - Prepare the sorted list of BTF types.
+ 
+      The sorted list of BTF types is, firstly, used for lookup (during the BTF
+      generation process) of CTF/BTF types given a typeID.
+ 
+      Secondly, in the emitted BTF section, BTF Types need to be in the sorted
+      order of their type IDs.  The BTF types section is viewed as an array,
+      with type IDs used to index into that array.  It is essential that every
+      type be placed at the exact index corresponding to its ID, or else
+      references to that type from other types will no longer be correct.
+ 
+    - References to void types are converted to reference BTF_VOID_TYPEID. In
+      CTF, a distinct type is used to encode void.
+ 
+    - Bitfield struct/union members are converted to BTF encoding. CTF uses
+      slices to encode bitfields, but BTF does not have slices and encodes
+      bitfield information directly in the variable-length btf_member
+      descriptions following the struct or union type.
+ 
+    - Unrepresentable types are removed. We cannot have any invalid BTF types
+      appearing in the output so they must be removed, and type ids of other
+      types and references adjust accordingly. This also involves ensuring that
+      BTF descriptions of struct members referring to unrepresentable types are
+      not emitted, as they would be nonsensical.
+ 
+    - Adjust inner- and inter-type references-by-ID to account for removed
+      types, and construct the types list.  */
+ 
+ void
+ btf_init_postprocess (void)
+ {
+   ctf_container_ref tu_ctfc = ctf_get_tu_ctfc ();
+ 
+   size_t i;
+   size_t num_ctf_types = tu_ctfc->ctfc_types->elements ();
+ 
+   holes.create (0);
+   voids.create (0);
+ 
+   num_types_added = 0;
+   num_types_created = 0;
+ 
+   if (num_ctf_types)
+     {
+       init_btf_id_map (num_ctf_types + 1);
+ 
+       /* Allocate the types list and traverse all types, placing each type
+ 	 at the index according to its ID.  Add 1 because type ID 0 always
+ 	 represents VOID.  */
+       tu_ctfc->ctfc_types_list
+ 	= ggc_vec_alloc<ctf_dtdef_ref>(num_ctf_types + 1);
+       tu_ctfc->ctfc_types->traverse<ctf_container_ref, btf_dtd_postprocess_cb>
+ 	(tu_ctfc);
+ 
+       /* Build mapping of CTF type ID -> BTF type ID, and count total number
+ 	 of valid BTF types added.  */
+       for (i = 1; i <= num_ctf_types; i++)
+ 	{
+ 	  ctf_dtdef_ref dtd = tu_ctfc->ctfc_types_list[i];
+ 	  ctf_id_t btfid = btf_adjust_type_id (dtd->dtd_type);
+ 	  set_btf_id (dtd->dtd_type, btfid);
+ 	  if (btfid < BTF_MAX_TYPE && (btfid != BTF_VOID_TYPEID))
+ 	    num_types_added ++;
+ 	}
+     }
+ }
+ 
+ /* Process and output all BTF data. Entry point of btfout.  */
+ 
+ void
+ btf_output (const char * filename)
+ {
+   ctf_container_ref tu_ctfc = ctf_get_tu_ctfc ();
+ 
+   init_btf_sections ();
+ 
+   datasecs.create (0);
+   vec_alloc (funcs, 16);
+ 
+   ctf_add_cuname (tu_ctfc, filename);
+ 
+   btf_emit_preprocess (tu_ctfc);
+ 
+   output_btf_header (tu_ctfc);
+   output_btf_types (tu_ctfc);
+   output_btf_vars (tu_ctfc);
+   output_btf_func_types ();
+   output_btf_datasec_types (tu_ctfc);
+   output_btf_strs (tu_ctfc);
+ }
+ 
+ /* Reset all state for BTF generation so that we can rerun the compiler within
+    the same process.  */
+ 
+ void
+ btf_finalize (void)
+ {
+   btf_info_section = NULL;
+ 
+   /* Clear preprocessing state.  */
+   num_vars_added = 0;
+   num_types_added = 0;
+   num_types_created = 0;
+ 
+   holes.release ();
+   voids.release ();
+   for (size_t i = 0; i < datasecs.length (); i++)
+     datasecs[i].entries.release ();
+   datasecs.release ();
+ 
+   funcs = NULL;
+ 
+   btf_var_ids->empty ();
+   btf_var_ids = NULL;
+ 
+   free (btf_id_map);
+   btf_id_map = NULL;
+ 
+   ctf_container_ref tu_ctfc = ctf_get_tu_ctfc ();
+   ctfc_delete_container (tu_ctfc);
+   tu_ctfc = NULL;
+ }
+ 
+ #include "gt-btfout.h"
diff -Nrcpad gcc-11.3.0/gcc/builtin-attrs.def gcc-12.1.0/gcc/builtin-attrs.def
*** gcc-11.3.0/gcc/builtin-attrs.def	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/builtin-attrs.def	Fri May  6 07:30:56 2022
***************
*** 1,4 ****
! /* Copyright (C) 2001-2021 Free Software Foundation, Inc.
     Contributed by Joseph Myers <jsm28@cam.ac.uk>.
  
  This file is part of GCC.
--- 1,4 ----
! /* Copyright (C) 2001-2022 Free Software Foundation, Inc.
     Contributed by Joseph Myers <jsm28@cam.ac.uk>.
  
  This file is part of GCC.
diff -Nrcpad gcc-11.3.0/gcc/builtin-types.def gcc-12.1.0/gcc/builtin-types.def
*** gcc-11.3.0/gcc/builtin-types.def	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/builtin-types.def	Fri May  6 07:30:56 2022
***************
*** 1,4 ****
! /* Copyright (C) 2001-2021 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,4 ----
! /* Copyright (C) 2001-2022 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
*************** DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_VPTR_INT
*** 489,495 ****
  DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_SIZE_CONST_VPTR, BT_BOOL, BT_SIZE,
  		     BT_CONST_VOLATILE_PTR)
  DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_INT_BOOL, BT_BOOL, BT_INT, BT_BOOL)
- DEF_FUNCTION_TYPE_2 (BT_FN_VOID_UINT_UINT, BT_VOID, BT_UINT, BT_UINT)
  DEF_FUNCTION_TYPE_2 (BT_FN_UINT_UINT_PTR, BT_UINT, BT_UINT, BT_PTR)
  DEF_FUNCTION_TYPE_2 (BT_FN_UINT_UINT_CONST_PTR, BT_UINT, BT_UINT, BT_CONST_PTR)
  DEF_FUNCTION_TYPE_2 (BT_FN_PTR_CONST_PTR_SIZE, BT_PTR, BT_CONST_PTR, BT_SIZE)
--- 489,494 ----
*************** DEF_FUNCTION_TYPE_4 (BT_FN_BOOL_UINT_ULL
*** 680,685 ****
--- 679,686 ----
  		     BT_PTR_ULONGLONG)
  DEF_FUNCTION_TYPE_4 (BT_FN_VOID_UINT_PTR_INT_PTR, BT_VOID, BT_INT, BT_PTR,
  		     BT_INT, BT_PTR)
+ DEF_FUNCTION_TYPE_4 (BT_FN_BOOL_UINT_UINT_UINT_BOOL,
+ 		     BT_BOOL, BT_UINT, BT_UINT, BT_UINT, BT_BOOL)
  
  DEF_FUNCTION_TYPE_5 (BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VALIST_ARG,
  		     BT_INT, BT_STRING, BT_INT, BT_SIZE, BT_CONST_STRING,
diff -Nrcpad gcc-11.3.0/gcc/builtins.c gcc-12.1.0/gcc/builtins.c
*** gcc-11.3.0/gcc/builtins.c	Thu Apr 21 07:58:52 2022
--- gcc-12.1.0/gcc/builtins.c	Thu Jan  1 00:00:00 1970
***************
*** 1,14632 ****
- /* Expand builtin functions.
-    Copyright (C) 1988-2021 Free Software Foundation, Inc.
- 
- This file is part of GCC.
- 
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- 
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- for more details.
- 
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
- /* Legacy warning!  Please add no further builtin simplifications here
-    (apart from pure constant folding) - builtin simplifications should go
-    to match.pd or gimple-fold.c instead.  */
- 
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
- #include "backend.h"
- #include "target.h"
- #include "rtl.h"
- #include "tree.h"
- #include "memmodel.h"
- #include "gimple.h"
- #include "predict.h"
- #include "tm_p.h"
- #include "stringpool.h"
- #include "tree-vrp.h"
- #include "tree-ssanames.h"
- #include "expmed.h"
- #include "optabs.h"
- #include "emit-rtl.h"
- #include "recog.h"
- #include "diagnostic-core.h"
- #include "alias.h"
- #include "fold-const.h"
- #include "fold-const-call.h"
- #include "gimple-ssa-warn-restrict.h"
- #include "stor-layout.h"
- #include "calls.h"
- #include "varasm.h"
- #include "tree-object-size.h"
- #include "tree-ssa-strlen.h"
- #include "realmpfr.h"
- #include "cfgrtl.h"
- #include "except.h"
- #include "dojump.h"
- #include "explow.h"
- #include "stmt.h"
- #include "expr.h"
- #include "libfuncs.h"
- #include "output.h"
- #include "typeclass.h"
- #include "langhooks.h"
- #include "value-prof.h"
- #include "builtins.h"
- #include "stringpool.h"
- #include "attribs.h"
- #include "asan.h"
- #include "internal-fn.h"
- #include "case-cfn-macros.h"
- #include "gimple-fold.h"
- #include "intl.h"
- #include "file-prefix-map.h" /* remap_macro_filename()  */
- #include "gomp-constants.h"
- #include "omp-general.h"
- #include "tree-dfa.h"
- #include "gimple-iterator.h"
- #include "gimple-ssa.h"
- #include "tree-ssa-live.h"
- #include "tree-outof-ssa.h"
- #include "attr-fnspec.h"
- #include "demangle.h"
- 
- struct target_builtins default_target_builtins;
- #if SWITCHABLE_TARGET
- struct target_builtins *this_target_builtins = &default_target_builtins;
- #endif
- 
- /* Define the names of the builtin function types and codes.  */
- const char *const built_in_class_names[BUILT_IN_LAST]
-   = {"NOT_BUILT_IN", "BUILT_IN_FRONTEND", "BUILT_IN_MD", "BUILT_IN_NORMAL"};
- 
- #define DEF_BUILTIN(X, N, C, T, LT, B, F, NA, AT, IM, COND) #X,
- const char * built_in_names[(int) END_BUILTINS] =
- {
- #include "builtins.def"
- };
- 
- /* Setup an array of builtin_info_type, make sure each element decl is
-    initialized to NULL_TREE.  */
- builtin_info_type builtin_info[(int)END_BUILTINS];
- 
- /* Non-zero if __builtin_constant_p should be folded right away.  */
- bool force_folding_builtin_constant_p;
- 
- static int target_char_cast (tree, char *);
- static rtx get_memory_rtx (tree, tree);
- static int apply_args_size (void);
- static int apply_result_size (void);
- static rtx result_vector (int, rtx);
- static void expand_builtin_prefetch (tree);
- static rtx expand_builtin_apply_args (void);
- static rtx expand_builtin_apply_args_1 (void);
- static rtx expand_builtin_apply (rtx, rtx, rtx);
- static void expand_builtin_return (rtx);
- static enum type_class type_to_class (tree);
- static rtx expand_builtin_classify_type (tree);
- static rtx expand_builtin_mathfn_3 (tree, rtx, rtx);
- static rtx expand_builtin_mathfn_ternary (tree, rtx, rtx);
- static rtx expand_builtin_interclass_mathfn (tree, rtx);
- static rtx expand_builtin_sincos (tree);
- static rtx expand_builtin_cexpi (tree, rtx);
- static rtx expand_builtin_int_roundingfn (tree, rtx);
- static rtx expand_builtin_int_roundingfn_2 (tree, rtx);
- static rtx expand_builtin_next_arg (void);
- static rtx expand_builtin_va_start (tree);
- static rtx expand_builtin_va_end (tree);
- static rtx expand_builtin_va_copy (tree);
- static rtx inline_expand_builtin_bytecmp (tree, rtx);
- static rtx expand_builtin_strcmp (tree, rtx);
- static rtx expand_builtin_strncmp (tree, rtx, machine_mode);
- static rtx builtin_memcpy_read_str (void *, HOST_WIDE_INT, scalar_int_mode);
- static rtx expand_builtin_memchr (tree, rtx);
- static rtx expand_builtin_memcpy (tree, rtx);
- static rtx expand_builtin_memory_copy_args (tree dest, tree src, tree len,
- 					    rtx target, tree exp,
- 					    memop_ret retmode,
- 					    bool might_overlap);
- static rtx expand_builtin_memmove (tree, rtx);
- static rtx expand_builtin_mempcpy (tree, rtx);
- static rtx expand_builtin_mempcpy_args (tree, tree, tree, rtx, tree, memop_ret);
- static rtx expand_builtin_strcat (tree);
- static rtx expand_builtin_strcpy (tree, rtx);
- static rtx expand_builtin_strcpy_args (tree, tree, tree, rtx);
- static rtx expand_builtin_stpcpy (tree, rtx, machine_mode);
- static rtx expand_builtin_stpncpy (tree, rtx);
- static rtx expand_builtin_strncat (tree, rtx);
- static rtx expand_builtin_strncpy (tree, rtx);
- static rtx builtin_memset_gen_str (void *, HOST_WIDE_INT, scalar_int_mode);
- static rtx expand_builtin_memset (tree, rtx, machine_mode);
- static rtx expand_builtin_memset_args (tree, tree, tree, rtx, machine_mode, tree);
- static rtx expand_builtin_bzero (tree);
- static rtx expand_builtin_strlen (tree, rtx, machine_mode);
- static rtx expand_builtin_strnlen (tree, rtx, machine_mode);
- static rtx expand_builtin_alloca (tree);
- static rtx expand_builtin_unop (machine_mode, tree, rtx, rtx, optab);
- static rtx expand_builtin_frame_address (tree, tree);
- static tree stabilize_va_list_loc (location_t, tree, int);
- static rtx expand_builtin_expect (tree, rtx);
- static rtx expand_builtin_expect_with_probability (tree, rtx);
- static tree fold_builtin_constant_p (tree);
- static tree fold_builtin_classify_type (tree);
- static tree fold_builtin_strlen (location_t, tree, tree, tree);
- static tree fold_builtin_inf (location_t, tree, int);
- static tree rewrite_call_expr (location_t, tree, int, tree, int, ...);
- static bool validate_arg (const_tree, enum tree_code code);
- static rtx expand_builtin_fabs (tree, rtx, rtx);
- static rtx expand_builtin_signbit (tree, rtx);
- static tree fold_builtin_memcmp (location_t, tree, tree, tree);
- static tree fold_builtin_isascii (location_t, tree);
- static tree fold_builtin_toascii (location_t, tree);
- static tree fold_builtin_isdigit (location_t, tree);
- static tree fold_builtin_fabs (location_t, tree, tree);
- static tree fold_builtin_abs (location_t, tree, tree);
- static tree fold_builtin_unordered_cmp (location_t, tree, tree, tree, enum tree_code,
- 					enum tree_code);
- static tree fold_builtin_varargs (location_t, tree, tree*, int);
- 
- static tree fold_builtin_strpbrk (location_t, tree, tree, tree, tree);
- static tree fold_builtin_strspn (location_t, tree, tree, tree);
- static tree fold_builtin_strcspn (location_t, tree, tree, tree);
- 
- static rtx expand_builtin_object_size (tree);
- static rtx expand_builtin_memory_chk (tree, rtx, machine_mode,
- 				      enum built_in_function);
- static void maybe_emit_chk_warning (tree, enum built_in_function);
- static void maybe_emit_sprintf_chk_warning (tree, enum built_in_function);
- static tree fold_builtin_object_size (tree, tree);
- static bool check_read_access (tree, tree, tree = NULL_TREE, int = 1);
- static bool compute_objsize_r (tree, int, access_ref *, ssa_name_limit_t &,
- 			       pointer_query *);
- 
- unsigned HOST_WIDE_INT target_newline;
- unsigned HOST_WIDE_INT target_percent;
- static unsigned HOST_WIDE_INT target_c;
- static unsigned HOST_WIDE_INT target_s;
- char target_percent_c[3];
- char target_percent_s[3];
- char target_percent_s_newline[4];
- static tree do_mpfr_remquo (tree, tree, tree);
- static tree do_mpfr_lgamma_r (tree, tree, tree);
- static void expand_builtin_sync_synchronize (void);
- 
- access_ref::access_ref (tree bound /* = NULL_TREE */,
- 			bool minaccess /* = false */)
- : ref (), eval ([](tree x){ return x; }), deref (), trail1special (true),
-   base0 (true), parmarray ()
- {
-   /* Set to valid.  */
-   offrng[0] = offrng[1] = 0;
-   /* Invalidate.   */
-   sizrng[0] = sizrng[1] = -1;
- 
-   /* Set the default bounds of the access and adjust below.  */
-   bndrng[0] = minaccess ? 1 : 0;
-   bndrng[1] = HOST_WIDE_INT_M1U;
- 
-   /* When BOUND is nonnull and a range can be extracted from it,
-      set the bounds of the access to reflect both it and MINACCESS.
-      BNDRNG[0] is the size of the minimum access.  */
-   tree rng[2];
-   if (bound && get_size_range (bound, rng, SR_ALLOW_ZERO))
-     {
-       bndrng[0] = wi::to_offset (rng[0]);
-       bndrng[1] = wi::to_offset (rng[1]);
-       bndrng[0] = bndrng[0] > 0 && minaccess ? 1 : 0;
-     }
- }
- 
- /* Return the PHI node REF refers to or null if it doesn't.  */
- 
- gphi *
- access_ref::phi () const
- {
-   if (!ref || TREE_CODE (ref) != SSA_NAME)
-     return NULL;
- 
-   gimple *def_stmt = SSA_NAME_DEF_STMT (ref);
-   if (gimple_code (def_stmt) != GIMPLE_PHI)
-     return NULL;
- 
-   return as_a <gphi *> (def_stmt);
- }
- 
- /* Determine and return the largest object to which *THIS.  If *THIS
-    refers to a PHI and PREF is nonnull, fill *PREF with the details
-    of the object determined by compute_objsize(ARG, OSTYPE) for each
-    PHI argument ARG.  */
- 
- tree
- access_ref::get_ref (vec<access_ref> *all_refs,
- 		     access_ref *pref /* = NULL */,
- 		     int ostype /* = 1 */,
- 		     ssa_name_limit_t *psnlim /* = NULL */,
- 		     pointer_query *qry /* = NULL */) const
- {
-   gphi *phi_stmt = this->phi ();
-   if (!phi_stmt)
-     return ref;
- 
-   /* FIXME: Calling get_ref() with a null PSNLIM is dangerous and might
-      cause unbounded recursion.  */
-   ssa_name_limit_t snlim_buf;
-   if (!psnlim)
-     psnlim = &snlim_buf;
- 
-   if (!psnlim->visit_phi (ref))
-     return NULL_TREE;
- 
-   /* Reflects the range of offsets of all PHI arguments refer to the same
-      object (i.e., have the same REF).  */
-   access_ref same_ref;
-   /* The conservative result of the PHI reflecting the offset and size
-      of the largest PHI argument, regardless of whether or not they all
-      refer to the same object.  */
-   pointer_query empty_qry;
-   if (!qry)
-     qry = &empty_qry;
- 
-   access_ref phi_ref;
-   if (pref)
-     {
-       phi_ref = *pref;
-       same_ref = *pref;
-     }
- 
-   /* Set if any argument is a function array (or VLA) parameter not
-      declared [static].  */
-   bool parmarray = false;
-   /* The size of the smallest object referenced by the PHI arguments.  */
-   offset_int minsize = 0;
-   const offset_int maxobjsize = wi::to_offset (max_object_size ());
-   /* The offset of the PHI, not reflecting those of its arguments.  */
-   const offset_int orng[2] = { phi_ref.offrng[0], phi_ref.offrng[1] };
- 
-   const unsigned nargs = gimple_phi_num_args (phi_stmt);
-   for (unsigned i = 0; i < nargs; ++i)
-     {
-       access_ref phi_arg_ref;
-       tree arg = gimple_phi_arg_def (phi_stmt, i);
-       if (!compute_objsize_r (arg, ostype, &phi_arg_ref, *psnlim, qry)
- 	  || phi_arg_ref.sizrng[0] < 0)
- 	/* A PHI with all null pointer arguments.  */
- 	return NULL_TREE;
- 
-       /* Add PREF's offset to that of the argument.  */
-       phi_arg_ref.add_offset (orng[0], orng[1]);
-       if (TREE_CODE (arg) == SSA_NAME)
- 	qry->put_ref (arg, phi_arg_ref);
- 
-       if (all_refs)
- 	all_refs->safe_push (phi_arg_ref);
- 
-       const bool arg_known_size = (phi_arg_ref.sizrng[0] != 0
- 				   || phi_arg_ref.sizrng[1] != maxobjsize);
- 
-       parmarray |= phi_arg_ref.parmarray;
- 
-       const bool nullp = integer_zerop (arg) && (i || i + 1 < nargs);
- 
-       if (phi_ref.sizrng[0] < 0)
- 	{
- 	  if (!nullp)
- 	    same_ref = phi_arg_ref;
- 	  phi_ref = phi_arg_ref;
- 	  if (arg_known_size)
- 	    minsize = phi_arg_ref.sizrng[0];
- 	  continue;
- 	}
- 
-       const bool phi_known_size = (phi_ref.sizrng[0] != 0
- 				   || phi_ref.sizrng[1] != maxobjsize);
- 
-       if (phi_known_size && phi_arg_ref.sizrng[0] < minsize)
- 	minsize = phi_arg_ref.sizrng[0];
- 
-       /* Disregard null pointers in PHIs with two or more arguments.
- 	 TODO: Handle this better!  */
-       if (nullp)
- 	continue;
- 
-       /* Determine the amount of remaining space in the argument.  */
-       offset_int argrem[2];
-       argrem[1] = phi_arg_ref.size_remaining (argrem);
- 
-       /* Determine the amount of remaining space computed so far and
- 	 if the remaining space in the argument is more use it instead.  */
-       offset_int phirem[2];
-       phirem[1] = phi_ref.size_remaining (phirem);
- 
-       if (phi_arg_ref.ref != same_ref.ref)
- 	same_ref.ref = NULL_TREE;
- 
-       if (phirem[1] < argrem[1]
- 	  || (phirem[1] == argrem[1]
- 	      && phi_ref.sizrng[1] < phi_arg_ref.sizrng[1]))
- 	/* Use the argument with the most space remaining as the result,
- 	   or the larger one if the space is equal.  */
- 	phi_ref = phi_arg_ref;
- 
-       /* Set SAME_REF.OFFRNG to the maximum range of all arguments.  */
-       if (phi_arg_ref.offrng[0] < same_ref.offrng[0])
- 	same_ref.offrng[0] = phi_arg_ref.offrng[0];
-       if (same_ref.offrng[1] < phi_arg_ref.offrng[1])
- 	same_ref.offrng[1] = phi_arg_ref.offrng[1];
-     }
- 
-   if (!same_ref.ref && same_ref.offrng[0] != 0)
-     /* Clear BASE0 if not all the arguments refer to the same object and
-        if not all their offsets are zero-based.  This allows the final
-        PHI offset to out of bounds for some arguments but not for others
-        (or negative even of all the arguments are BASE0), which is overly
-        permissive.  */
-     phi_ref.base0 = false;
- 
-   if (same_ref.ref)
-     phi_ref = same_ref;
-   else
-     {
-       /* Replace the lower bound of the largest argument with the size
- 	 of the smallest argument, and set PARMARRAY if any argument
- 	 was one.  */
-       phi_ref.sizrng[0] = minsize;
-       phi_ref.parmarray = parmarray;
-     }
- 
-   if (phi_ref.sizrng[0] < 0)
-     {
-       /* Fail if none of the PHI's arguments resulted in updating PHI_REF
- 	 (perhaps because they have all been already visited by prior
- 	 recursive calls).  */
-       psnlim->leave_phi (ref);
-       return NULL_TREE;
-     }
- 
-   /* Avoid changing *THIS.  */
-   if (pref && pref != this)
-     *pref = phi_ref;
- 
-   psnlim->leave_phi (ref);
- 
-   return phi_ref.ref;
- }
- 
- /* Return the maximum amount of space remaining and if non-null, set
-    argument to the minimum.  */
- 
- offset_int
- access_ref::size_remaining (offset_int *pmin /* = NULL */) const
- {
-   offset_int minbuf;
-   if (!pmin)
-     pmin = &minbuf;
- 
-   /* add_offset() ensures the offset range isn't inverted.  */
-   gcc_checking_assert (offrng[0] <= offrng[1]);
- 
-   if (base0)
-     {
-       /* The offset into referenced object is zero-based (i.e., it's
- 	 not referenced by a pointer into middle of some unknown object).  */
-       if (offrng[0] < 0 && offrng[1] < 0)
- 	{
- 	  /* If the offset is negative the remaining size is zero.  */
- 	  *pmin = 0;
- 	  return 0;
- 	}
- 
-       if (sizrng[1] <= offrng[0])
- 	{
- 	  /* If the starting offset is greater than or equal to the upper
- 	     bound on the size of the object, the space remaining is zero.
- 	     As a special case, if it's equal, set *PMIN to -1 to let
- 	     the caller know the offset is valid and just past the end.  */
- 	  *pmin = sizrng[1] == offrng[0] ? -1 : 0;
- 	  return 0;
- 	}
- 
-       /* Otherwise return the size minus the lower bound of the offset.  */
-       offset_int or0 = offrng[0] < 0 ? 0 : offrng[0];
- 
-       *pmin = sizrng[0] - or0;
-       return sizrng[1] - or0;
-     }
- 
-   /* The offset to the referenced object isn't zero-based (i.e., it may
-      refer to a byte other than the first.  The size of such an object
-      is constrained only by the size of the address space (the result
-      of max_object_size()).  */
-   if (sizrng[1] <= offrng[0])
-     {
-       *pmin = 0;
-       return 0;
-     }
- 
-   offset_int or0 = offrng[0] < 0 ? 0 : offrng[0];
- 
-   *pmin = sizrng[0] - or0;
-   return sizrng[1] - or0;
- }
- 
- /* Add the range [MIN, MAX] to the offset range.  For known objects (with
-    zero-based offsets) at least one of whose offset's bounds is in range,
-    constrain the other (or both) to the bounds of the object (i.e., zero
-    and the upper bound of its size).  This improves the quality of
-    diagnostics.  */
- 
- void access_ref::add_offset (const offset_int &min, const offset_int &max)
- {
-   if (min <= max)
-     {
-       /* To add an ordinary range just add it to the bounds.  */
-       offrng[0] += min;
-       offrng[1] += max;
-     }
-   else if (!base0)
-     {
-       /* To add an inverted range to an offset to an unknown object
- 	 expand it to the maximum.  */
-       add_max_offset ();
-       return;
-     }
-   else
-     {
-       /* To add an inverted range to an offset to an known object set
- 	 the upper bound to the maximum representable offset value
- 	 (which may be greater than MAX_OBJECT_SIZE).
- 	 The lower bound is either the sum of the current offset and
- 	 MIN when abs(MAX) is greater than the former, or zero otherwise.
- 	 Zero because then then inverted range includes the negative of
- 	 the lower bound.  */
-       offset_int maxoff = wi::to_offset (TYPE_MAX_VALUE (ptrdiff_type_node));
-       offrng[1] = maxoff;
- 
-       if (max >= 0)
- 	{
- 	  offrng[0] = 0;
- 	  return;
- 	}
- 
-       offset_int absmax = wi::abs (max);
-       if (offrng[0] < absmax)
- 	{
- 	  offrng[0] += min;
- 	  /* Cap the lower bound at the upper (set to MAXOFF above)
- 	     to avoid inadvertently recreating an inverted range.  */
- 	  if (offrng[1] < offrng[0])
- 	    offrng[0] = offrng[1];
- 	}
-       else
- 	offrng[0] = 0;
-     }
- 
-   if (!base0)
-     return;
- 
-   /* When referencing a known object check to see if the offset computed
-      so far is in bounds... */
-   offset_int remrng[2];
-   remrng[1] = size_remaining (remrng);
-   if (remrng[1] > 0 || remrng[0] < 0)
-     {
-       /* ...if so, constrain it so that neither bound exceeds the size of
- 	 the object.  Out of bounds offsets are left unchanged, and, for
- 	 better or worse, become in bounds later.  They should be detected
- 	 and diagnosed at the point they first become invalid by
- 	 -Warray-bounds.  */
-       if (offrng[0] < 0)
- 	offrng[0] = 0;
-       if (offrng[1] > sizrng[1])
- 	offrng[1] = sizrng[1];
-     }
- }
- 
- /* Set a bit for the PHI in VISITED and return true if it wasn't
-    already set.  */
- 
- bool
- ssa_name_limit_t::visit_phi (tree ssa_name)
- {
-   if (!visited)
-     visited = BITMAP_ALLOC (NULL);
- 
-   /* Return false if SSA_NAME has already been visited.  */
-   return bitmap_set_bit (visited, SSA_NAME_VERSION (ssa_name));
- }
- 
- /* Clear a bit for the PHI in VISITED.  */
- 
- void
- ssa_name_limit_t::leave_phi (tree ssa_name)
- {
-   /* Return false if SSA_NAME has already been visited.  */
-   bitmap_clear_bit (visited, SSA_NAME_VERSION (ssa_name));
- }
- 
- /* Return false if the SSA_NAME chain length counter has reached
-    the limit, otherwise increment the counter and return true.  */
- 
- bool
- ssa_name_limit_t::next ()
- {
-   /* Return a negative value to let caller avoid recursing beyond
-      the specified limit.  */
-   if (ssa_def_max == 0)
-     return false;
- 
-   --ssa_def_max;
-   return true;
- }
- 
- /* If the SSA_NAME has already been "seen" return a positive value.
-    Otherwise add it to VISITED.  If the SSA_NAME limit has been
-    reached, return a negative value.  Otherwise return zero.  */
- 
- int
- ssa_name_limit_t::next_phi (tree ssa_name)
- {
-   {
-     gimple *def_stmt = SSA_NAME_DEF_STMT (ssa_name);
-     /* Return a positive value if the PHI has already been visited.  */
-     if (gimple_code (def_stmt) == GIMPLE_PHI
- 	&& !visit_phi (ssa_name))
-       return 1;
-   }
- 
-   /* Return a negative value to let caller avoid recursing beyond
-      the specified limit.  */
-   if (ssa_def_max == 0)
-     return -1;
- 
-   --ssa_def_max;
- 
-   return 0;
- }
- 
- ssa_name_limit_t::~ssa_name_limit_t ()
- {
-   if (visited)
-     BITMAP_FREE (visited);
- }
- 
- /* Default ctor.  Initialize object with pointers to the range_query
-    and cache_type instances to use or null.  */
- 
- pointer_query::pointer_query (range_query *qry /* = NULL */,
- 			      cache_type *cache /* = NULL */)
- : rvals (qry), var_cache (cache), hits (), misses (),
-   failures (), depth (), max_depth ()
- {
-   /* No op.  */
- }
- 
- /* Return a pointer to the cached access_ref instance for the SSA_NAME
-    PTR if it's there or null otherwise.  */
- 
- const access_ref *
- pointer_query::get_ref (tree ptr, int ostype /* = 1 */) const
- {
-   if (!var_cache)
-     {
-       ++misses;
-       return NULL;
-     }
- 
-   unsigned version = SSA_NAME_VERSION (ptr);
-   unsigned idx = version << 1 | (ostype & 1);
-   if (var_cache->indices.length () <= idx)
-     {
-       ++misses;
-       return NULL;
-     }
- 
-   unsigned cache_idx = var_cache->indices[idx];
-   if (var_cache->access_refs.length () <= cache_idx)
-     {
-       ++misses;
-       return NULL;
-     }
- 
-   access_ref &cache_ref = var_cache->access_refs[cache_idx];
-   if (cache_ref.ref)
-     {
-       ++hits;
-       return &cache_ref;
-     }
- 
-   ++misses;
-   return NULL;
- }
- 
- /* Retrieve the access_ref instance for a variable from the cache if it's
-    there or compute it and insert it into the cache if it's nonnonull.  */
- 
- bool
- pointer_query::get_ref (tree ptr, access_ref *pref, int ostype /* = 1 */)
- {
-   const unsigned version
-     = TREE_CODE (ptr) == SSA_NAME ? SSA_NAME_VERSION (ptr) : 0;
- 
-   if (var_cache && version)
-     {
-       unsigned idx = version << 1 | (ostype & 1);
-       if (idx < var_cache->indices.length ())
- 	{
- 	  unsigned cache_idx = var_cache->indices[idx] - 1;
- 	  if (cache_idx < var_cache->access_refs.length ()
- 	      && var_cache->access_refs[cache_idx].ref)
- 	    {
- 	      ++hits;
- 	      *pref = var_cache->access_refs[cache_idx];
- 	      return true;
- 	    }
- 	}
- 
-       ++misses;
-     }
- 
-   if (!compute_objsize (ptr, ostype, pref, this))
-     {
-       ++failures;
-       return false;
-     }
- 
-   return true;
- }
- 
- /* Add a copy of the access_ref REF for the SSA_NAME to the cache if it's
-    nonnull.  */
- 
- void
- pointer_query::put_ref (tree ptr, const access_ref &ref, int ostype /* = 1 */)
- {
-   /* Only add populated/valid entries.  */
-   if (!var_cache || !ref.ref || ref.sizrng[0] < 0)
-     return;
- 
-   /* Add REF to the two-level cache.  */
-   unsigned version = SSA_NAME_VERSION (ptr);
-   unsigned idx = version << 1 | (ostype & 1);
- 
-   /* Grow INDICES if necessary.  An index is valid if it's nonzero.
-      Its value minus one is the index into ACCESS_REFS.  Not all
-      entries are valid.  */
-   if (var_cache->indices.length () <= idx)
-     var_cache->indices.safe_grow_cleared (idx + 1);
- 
-   if (!var_cache->indices[idx])
-     var_cache->indices[idx] = var_cache->access_refs.length () + 1;
- 
-   /* Grow ACCESS_REF cache if necessary.  An entry is valid if its
-      REF member is nonnull.  All entries except for the last two
-      are valid.  Once nonnull, the REF value must stay unchanged.  */
-   unsigned cache_idx = var_cache->indices[idx];
-   if (var_cache->access_refs.length () <= cache_idx)
-     var_cache->access_refs.safe_grow_cleared (cache_idx + 1);
- 
-   access_ref cache_ref = var_cache->access_refs[cache_idx - 1];
-   if (cache_ref.ref)
-   {
-     gcc_checking_assert (cache_ref.ref == ref.ref);
-     return;
-   }
- 
-   cache_ref = ref;
- }
- 
- /* Flush the cache if it's nonnull.  */
- 
- void
- pointer_query::flush_cache ()
- {
-   if (!var_cache)
-     return;
-   var_cache->indices.release ();
-   var_cache->access_refs.release ();
- }
- 
- /* Return true if NAME starts with __builtin_ or __sync_.  */
- 
- static bool
- is_builtin_name (const char *name)
- {
-   if (strncmp (name, "__builtin_", 10) == 0)
-     return true;
-   if (strncmp (name, "__sync_", 7) == 0)
-     return true;
-   if (strncmp (name, "__atomic_", 9) == 0)
-     return true;
-   return false;
- }
- 
- /* Return true if NODE should be considered for inline expansion regardless
-    of the optimization level.  This means whenever a function is invoked with
-    its "internal" name, which normally contains the prefix "__builtin".  */
- 
- bool
- called_as_built_in (tree node)
- {
-   /* Note that we must use DECL_NAME, not DECL_ASSEMBLER_NAME_SET_P since
-      we want the name used to call the function, not the name it
-      will have. */
-   const char *name = IDENTIFIER_POINTER (DECL_NAME (node));
-   return is_builtin_name (name);
- }
- 
- /* Compute values M and N such that M divides (address of EXP - N) and such
-    that N < M.  If these numbers can be determined, store M in alignp and N in
-    *BITPOSP and return true.  Otherwise return false and store BITS_PER_UNIT to
-    *alignp and any bit-offset to *bitposp.
- 
-    Note that the address (and thus the alignment) computed here is based
-    on the address to which a symbol resolves, whereas DECL_ALIGN is based
-    on the address at which an object is actually located.  These two
-    addresses are not always the same.  For example, on ARM targets,
-    the address &foo of a Thumb function foo() has the lowest bit set,
-    whereas foo() itself starts on an even address.
- 
-    If ADDR_P is true we are taking the address of the memory reference EXP
-    and thus cannot rely on the access taking place.  */
- 
- static bool
- get_object_alignment_2 (tree exp, unsigned int *alignp,
- 			unsigned HOST_WIDE_INT *bitposp, bool addr_p)
- {
-   poly_int64 bitsize, bitpos;
-   tree offset;
-   machine_mode mode;
-   int unsignedp, reversep, volatilep;
-   unsigned int align = BITS_PER_UNIT;
-   bool known_alignment = false;
- 
-   /* Get the innermost object and the constant (bitpos) and possibly
-      variable (offset) offset of the access.  */
-   exp = get_inner_reference (exp, &bitsize, &bitpos, &offset, &mode,
- 			     &unsignedp, &reversep, &volatilep);
- 
-   /* Extract alignment information from the innermost object and
-      possibly adjust bitpos and offset.  */
-   if (TREE_CODE (exp) == FUNCTION_DECL)
-     {
-       /* Function addresses can encode extra information besides their
- 	 alignment.  However, if TARGET_PTRMEMFUNC_VBIT_LOCATION
- 	 allows the low bit to be used as a virtual bit, we know
- 	 that the address itself must be at least 2-byte aligned.  */
-       if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn)
- 	align = 2 * BITS_PER_UNIT;
-     }
-   else if (TREE_CODE (exp) == LABEL_DECL)
-     ;
-   else if (TREE_CODE (exp) == CONST_DECL)
-     {
-       /* The alignment of a CONST_DECL is determined by its initializer.  */
-       exp = DECL_INITIAL (exp);
-       align = TYPE_ALIGN (TREE_TYPE (exp));
-       if (CONSTANT_CLASS_P (exp))
- 	align = targetm.constant_alignment (exp, align);
- 
-       known_alignment = true;
-     }
-   else if (DECL_P (exp))
-     {
-       align = DECL_ALIGN (exp);
-       known_alignment = true;
-     }
-   else if (TREE_CODE (exp) == INDIRECT_REF
- 	   || TREE_CODE (exp) == MEM_REF
- 	   || TREE_CODE (exp) == TARGET_MEM_REF)
-     {
-       tree addr = TREE_OPERAND (exp, 0);
-       unsigned ptr_align;
-       unsigned HOST_WIDE_INT ptr_bitpos;
-       unsigned HOST_WIDE_INT ptr_bitmask = ~0;
- 
-       /* If the address is explicitely aligned, handle that.  */
-       if (TREE_CODE (addr) == BIT_AND_EXPR
- 	  && TREE_CODE (TREE_OPERAND (addr, 1)) == INTEGER_CST)
- 	{
- 	  ptr_bitmask = TREE_INT_CST_LOW (TREE_OPERAND (addr, 1));
- 	  ptr_bitmask *= BITS_PER_UNIT;
- 	  align = least_bit_hwi (ptr_bitmask);
- 	  addr = TREE_OPERAND (addr, 0);
- 	}
- 
-       known_alignment
- 	= get_pointer_alignment_1 (addr, &ptr_align, &ptr_bitpos);
-       align = MAX (ptr_align, align);
- 
-       /* Re-apply explicit alignment to the bitpos.  */
-       ptr_bitpos &= ptr_bitmask;
- 
-       /* The alignment of the pointer operand in a TARGET_MEM_REF
- 	 has to take the variable offset parts into account.  */
-       if (TREE_CODE (exp) == TARGET_MEM_REF)
- 	{
- 	  if (TMR_INDEX (exp))
- 	    {
- 	      unsigned HOST_WIDE_INT step = 1;
- 	      if (TMR_STEP (exp))
- 		step = TREE_INT_CST_LOW (TMR_STEP (exp));
- 	      align = MIN (align, least_bit_hwi (step) * BITS_PER_UNIT);
- 	    }
- 	  if (TMR_INDEX2 (exp))
- 	    align = BITS_PER_UNIT;
- 	  known_alignment = false;
- 	}
- 
-       /* When EXP is an actual memory reference then we can use
- 	 TYPE_ALIGN of a pointer indirection to derive alignment.
- 	 Do so only if get_pointer_alignment_1 did not reveal absolute
- 	 alignment knowledge and if using that alignment would
- 	 improve the situation.  */
-       unsigned int talign;
-       if (!addr_p && !known_alignment
- 	  && (talign = min_align_of_type (TREE_TYPE (exp)) * BITS_PER_UNIT)
- 	  && talign > align)
- 	align = talign;
-       else
- 	{
- 	  /* Else adjust bitpos accordingly.  */
- 	  bitpos += ptr_bitpos;
- 	  if (TREE_CODE (exp) == MEM_REF
- 	      || TREE_CODE (exp) == TARGET_MEM_REF)
- 	    bitpos += mem_ref_offset (exp).force_shwi () * BITS_PER_UNIT;
- 	}
-     }
-   else if (TREE_CODE (exp) == STRING_CST)
-     {
-       /* STRING_CST are the only constant objects we allow to be not
-          wrapped inside a CONST_DECL.  */
-       align = TYPE_ALIGN (TREE_TYPE (exp));
-       if (CONSTANT_CLASS_P (exp))
- 	align = targetm.constant_alignment (exp, align);
- 
-       known_alignment = true;
-     }
- 
-   /* If there is a non-constant offset part extract the maximum
-      alignment that can prevail.  */
-   if (offset)
-     {
-       unsigned int trailing_zeros = tree_ctz (offset);
-       if (trailing_zeros < HOST_BITS_PER_INT)
- 	{
- 	  unsigned int inner = (1U << trailing_zeros) * BITS_PER_UNIT;
- 	  if (inner)
- 	    align = MIN (align, inner);
- 	}
-     }
- 
-   /* Account for the alignment of runtime coefficients, so that the constant
-      bitpos is guaranteed to be accurate.  */
-   unsigned int alt_align = ::known_alignment (bitpos - bitpos.coeffs[0]);
-   if (alt_align != 0 && alt_align < align)
-     {
-       align = alt_align;
-       known_alignment = false;
-     }
- 
-   *alignp = align;
-   *bitposp = bitpos.coeffs[0] & (align - 1);
-   return known_alignment;
- }
- 
- /* For a memory reference expression EXP compute values M and N such that M
-    divides (&EXP - N) and such that N < M.  If these numbers can be determined,
-    store M in alignp and N in *BITPOSP and return true.  Otherwise return false
-    and store BITS_PER_UNIT to *alignp and any bit-offset to *bitposp.  */
- 
- bool
- get_object_alignment_1 (tree exp, unsigned int *alignp,
- 			unsigned HOST_WIDE_INT *bitposp)
- {
-   return get_object_alignment_2 (exp, alignp, bitposp, false);
- }
- 
- /* Return the alignment in bits of EXP, an object.  */
- 
- unsigned int
- get_object_alignment (tree exp)
- {
-   unsigned HOST_WIDE_INT bitpos = 0;
-   unsigned int align;
- 
-   get_object_alignment_1 (exp, &align, &bitpos);
- 
-   /* align and bitpos now specify known low bits of the pointer.
-      ptr & (align - 1) == bitpos.  */
- 
-   if (bitpos != 0)
-     align = least_bit_hwi (bitpos);
-   return align;
- }
- 
- /* For a pointer valued expression EXP compute values M and N such that M
-    divides (EXP - N) and such that N < M.  If these numbers can be determined,
-    store M in alignp and N in *BITPOSP and return true.  Return false if
-    the results are just a conservative approximation.
- 
-    If EXP is not a pointer, false is returned too.  */
- 
- bool
- get_pointer_alignment_1 (tree exp, unsigned int *alignp,
- 			 unsigned HOST_WIDE_INT *bitposp)
- {
-   STRIP_NOPS (exp);
- 
-   if (TREE_CODE (exp) == ADDR_EXPR)
-     return get_object_alignment_2 (TREE_OPERAND (exp, 0),
- 				   alignp, bitposp, true);
-   else if (TREE_CODE (exp) == POINTER_PLUS_EXPR)
-     {
-       unsigned int align;
-       unsigned HOST_WIDE_INT bitpos;
-       bool res = get_pointer_alignment_1 (TREE_OPERAND (exp, 0),
- 					  &align, &bitpos);
-       if (TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST)
- 	bitpos += TREE_INT_CST_LOW (TREE_OPERAND (exp, 1)) * BITS_PER_UNIT;
-       else
- 	{
- 	  unsigned int trailing_zeros = tree_ctz (TREE_OPERAND (exp, 1));
- 	  if (trailing_zeros < HOST_BITS_PER_INT)
- 	    {
- 	      unsigned int inner = (1U << trailing_zeros) * BITS_PER_UNIT;
- 	      if (inner)
- 		align = MIN (align, inner);
- 	    }
- 	}
-       *alignp = align;
-       *bitposp = bitpos & (align - 1);
-       return res;
-     }
-   else if (TREE_CODE (exp) == SSA_NAME
- 	   && POINTER_TYPE_P (TREE_TYPE (exp)))
-     {
-       unsigned int ptr_align, ptr_misalign;
-       struct ptr_info_def *pi = SSA_NAME_PTR_INFO (exp);
- 
-       if (pi && get_ptr_info_alignment (pi, &ptr_align, &ptr_misalign))
- 	{
- 	  *bitposp = ptr_misalign * BITS_PER_UNIT;
- 	  *alignp = ptr_align * BITS_PER_UNIT;
- 	  /* Make sure to return a sensible alignment when the multiplication
- 	     by BITS_PER_UNIT overflowed.  */
- 	  if (*alignp == 0)
- 	    *alignp = 1u << (HOST_BITS_PER_INT - 1);
- 	  /* We cannot really tell whether this result is an approximation.  */
- 	  return false;
- 	}
-       else
- 	{
- 	  *bitposp = 0;
- 	  *alignp = BITS_PER_UNIT;
- 	  return false;
- 	}
-     }
-   else if (TREE_CODE (exp) == INTEGER_CST)
-     {
-       *alignp = BIGGEST_ALIGNMENT;
-       *bitposp = ((TREE_INT_CST_LOW (exp) * BITS_PER_UNIT)
- 		  & (BIGGEST_ALIGNMENT - 1));
-       return true;
-     }
- 
-   *bitposp = 0;
-   *alignp = BITS_PER_UNIT;
-   return false;
- }
- 
- /* Return the alignment in bits of EXP, a pointer valued expression.
-    The alignment returned is, by default, the alignment of the thing that
-    EXP points to.  If it is not a POINTER_TYPE, 0 is returned.
- 
-    Otherwise, look at the expression to see if we can do better, i.e., if the
-    expression is actually pointing at an object whose alignment is tighter.  */
- 
- unsigned int
- get_pointer_alignment (tree exp)
- {
-   unsigned HOST_WIDE_INT bitpos = 0;
-   unsigned int align;
- 
-   get_pointer_alignment_1 (exp, &align, &bitpos);
- 
-   /* align and bitpos now specify known low bits of the pointer.
-      ptr & (align - 1) == bitpos.  */
- 
-   if (bitpos != 0)
-     align = least_bit_hwi (bitpos);
- 
-   return align;
- }
- 
- /* Return the number of leading non-zero elements in the sequence
-    [ PTR, PTR + MAXELTS ) where each element's size is ELTSIZE bytes.
-    ELTSIZE must be a power of 2 less than 8.  Used by c_strlen.  */
- 
- unsigned
- string_length (const void *ptr, unsigned eltsize, unsigned maxelts)
- {
-   gcc_checking_assert (eltsize == 1 || eltsize == 2 || eltsize == 4);
- 
-   unsigned n;
- 
-   if (eltsize == 1)
-     {
-       /* Optimize the common case of plain char.  */
-       for (n = 0; n < maxelts; n++)
- 	{
- 	  const char *elt = (const char*) ptr + n;
- 	  if (!*elt)
- 	    break;
- 	}
-     }
-   else
-     {
-       for (n = 0; n < maxelts; n++)
- 	{
- 	  const char *elt = (const char*) ptr + n * eltsize;
- 	  if (!memcmp (elt, "\0\0\0\0", eltsize))
- 	    break;
- 	}
-     }
-   return n;
- }
- 
- /* For a call EXPR at LOC to a function FNAME that expects a string
-    in the argument ARG, issue a diagnostic due to it being a called
-    with an argument that is a character array with no terminating
-    NUL.  SIZE is the EXACT size of the array, and BNDRNG the number
-    of characters in which the NUL is expected.  Either EXPR or FNAME
-    may be null but noth both.  SIZE may be null when BNDRNG is null.  */
- 
- void
- warn_string_no_nul (location_t loc, tree expr, const char *fname,
- 		    tree arg, tree decl, tree size /* = NULL_TREE */,
- 		    bool exact /* = false */,
- 		    const wide_int bndrng[2] /* = NULL */)
- {
-   if ((expr && TREE_NO_WARNING (expr)) || TREE_NO_WARNING (arg))
-     return;
- 
-   loc = expansion_point_location_if_in_system_header (loc);
-   bool warned;
- 
-   /* Format the bound range as a string to keep the nuber of messages
-      from exploding.  */
-   char bndstr[80];
-   *bndstr = 0;
-   if (bndrng)
-     {
-       if (bndrng[0] == bndrng[1])
- 	sprintf (bndstr, "%llu", (unsigned long long) bndrng[0].to_uhwi ());
-       else
- 	sprintf (bndstr, "[%llu, %llu]",
- 		 (unsigned long long) bndrng[0].to_uhwi (),
- 		 (unsigned long long) bndrng[1].to_uhwi ());
-     }
- 
-   const tree maxobjsize = max_object_size ();
-   const wide_int maxsiz = wi::to_wide (maxobjsize);
-   if (expr)
-     {
-       tree func = get_callee_fndecl (expr);
-       if (bndrng)
- 	{
- 	  if (wi::ltu_p (maxsiz, bndrng[0]))
- 	    warned = warning_at (loc, OPT_Wstringop_overread,
- 				 "%K%qD specified bound %s exceeds "
- 				 "maximum object size %E",
- 				 expr, func, bndstr, maxobjsize);
- 	  else
- 	    {
- 	      bool maybe = wi::to_wide (size) == bndrng[0];
- 	      warned = warning_at (loc, OPT_Wstringop_overread,
- 				   exact
- 				   ? G_("%K%qD specified bound %s exceeds "
- 					"the size %E of unterminated array")
- 				   : (maybe
- 				      ? G_("%K%qD specified bound %s may "
- 					   "exceed the size of at most %E "
- 					   "of unterminated array")
- 				      : G_("%K%qD specified bound %s exceeds "
- 					   "the size of at most %E "
- 					   "of unterminated array")),
- 				   expr, func, bndstr, size);
- 	    }
- 	}
-       else
- 	warned = warning_at (loc, OPT_Wstringop_overread,
- 			     "%K%qD argument missing terminating nul",
- 			     expr, func);
-     }
-   else
-     {
-       if (bndrng)
- 	{
- 	  if (wi::ltu_p (maxsiz, bndrng[0]))
- 	    warned = warning_at (loc, OPT_Wstringop_overread,
- 				 "%qs specified bound %s exceeds "
- 				 "maximum object size %E",
- 				 fname, bndstr, maxobjsize);
- 	  else
- 	    {
- 	      bool maybe = wi::to_wide (size) == bndrng[0];
- 	      warned = warning_at (loc, OPT_Wstringop_overread,
- 				   exact
- 				   ? G_("%qs specified bound %s exceeds "
- 					"the size %E of unterminated array")
- 				   : (maybe
- 				      ? G_("%qs specified bound %s may "
- 					   "exceed the size of at most %E "
- 					   "of unterminated array")
- 				      : G_("%qs specified bound %s exceeds "
- 					   "the size of at most %E "
- 					   "of unterminated array")),
- 				   fname, bndstr, size);
- 	    }
- 	}
-       else
- 	warned = warning_at (loc, OPT_Wstringop_overread,
- 			     "%qs argument missing terminating nul",
- 			     fname);
-     }
- 
-   if (warned)
-     {
-       inform (DECL_SOURCE_LOCATION (decl),
- 	      "referenced argument declared here");
-       TREE_NO_WARNING (arg) = 1;
-       if (expr)
- 	TREE_NO_WARNING (expr) = 1;
-     }
- }
- 
- /* For a call EXPR (which may be null) that expects a string argument
-    SRC as an argument, returns false if SRC is a character array with
-    no terminating NUL.  When nonnull, BOUND is the number of characters
-    in which to expect the terminating NUL.  RDONLY is true for read-only
-    accesses such as strcmp, false for read-write such as strcpy.  When
-    EXPR is also issues a warning.  */
- 
- bool
- check_nul_terminated_array (tree expr, tree src,
- 			    tree bound /* = NULL_TREE */)
- {
-   /* The constant size of the array SRC points to.  The actual size
-      may be less of EXACT is true, but not more.  */
-   tree size;
-   /* True if SRC involves a non-constant offset into the array.  */
-   bool exact;
-   /* The unterminated constant array SRC points to.  */
-   tree nonstr = unterminated_array (src, &size, &exact);
-   if (!nonstr)
-     return true;
- 
-   /* NONSTR refers to the non-nul terminated constant array and SIZE
-      is the constant size of the array in bytes.  EXACT is true when
-      SIZE is exact.  */
- 
-   wide_int bndrng[2];
-   if (bound)
-     {
-       if (TREE_CODE (bound) == INTEGER_CST)
- 	bndrng[0] = bndrng[1] = wi::to_wide (bound);
-       else
- 	{
- 	  value_range_kind rng = get_range_info (bound, bndrng, bndrng + 1);
- 	  if (rng != VR_RANGE)
- 	    return true;
- 	}
- 
-       if (exact)
- 	{
- 	  if (wi::leu_p (bndrng[0], wi::to_wide (size)))
- 	    return true;
- 	}
-       else if (wi::lt_p (bndrng[0], wi::to_wide (size), UNSIGNED))
- 	return true;
-     }
- 
-   if (expr)
-     warn_string_no_nul (EXPR_LOCATION (expr), expr, NULL, src, nonstr,
- 			size, exact, bound ? bndrng : NULL);
- 
-   return false;
- }
- 
- /* If EXP refers to an unterminated constant character array return
-    the declaration of the object of which the array is a member or
-    element and if SIZE is not null, set *SIZE to the size of
-    the unterminated array and set *EXACT if the size is exact or
-    clear it otherwise.  Otherwise return null.  */
- 
- tree
- unterminated_array (tree exp, tree *size /* = NULL */, bool *exact /* = NULL */)
- {
-   /* C_STRLEN will return NULL and set DECL in the info
-      structure if EXP references a unterminated array.  */
-   c_strlen_data lendata = { };
-   tree len = c_strlen (exp, 1, &lendata);
-   if (len == NULL_TREE && lendata.minlen && lendata.decl)
-      {
-        if (size)
- 	{
- 	  len = lendata.minlen;
- 	  if (lendata.off)
- 	    {
- 	      /* Constant offsets are already accounted for in LENDATA.MINLEN,
- 		 but not in a SSA_NAME + CST expression.  */
- 	      if (TREE_CODE (lendata.off) == INTEGER_CST)
- 		*exact = true;
- 	      else if (TREE_CODE (lendata.off) == PLUS_EXPR
- 		       && TREE_CODE (TREE_OPERAND (lendata.off, 1)) == INTEGER_CST)
- 		{
- 		  /* Subtract the offset from the size of the array.  */
- 		  *exact = false;
- 		  tree temp = TREE_OPERAND (lendata.off, 1);
- 		  temp = fold_convert (ssizetype, temp);
- 		  len = fold_build2 (MINUS_EXPR, ssizetype, len, temp);
- 		}
- 	      else
- 		*exact = false;
- 	    }
- 	  else
- 	    *exact = true;
- 
- 	  *size = len;
- 	}
-        return lendata.decl;
-      }
- 
-   return NULL_TREE;
- }
- 
- /* Compute the length of a null-terminated character string or wide
-    character string handling character sizes of 1, 2, and 4 bytes.
-    TREE_STRING_LENGTH is not the right way because it evaluates to
-    the size of the character array in bytes (as opposed to characters)
-    and because it can contain a zero byte in the middle.
- 
-    ONLY_VALUE should be nonzero if the result is not going to be emitted
-    into the instruction stream and zero if it is going to be expanded.
-    E.g. with i++ ? "foo" : "bar", if ONLY_VALUE is nonzero, constant 3
-    is returned, otherwise NULL, since
-    len = c_strlen (ARG, 1); if (len) expand_expr (len, ...); would not
-    evaluate the side-effects.
- 
-    If ONLY_VALUE is two then we do not emit warnings about out-of-bound
-    accesses.  Note that this implies the result is not going to be emitted
-    into the instruction stream.
- 
-    Additional information about the string accessed may be recorded
-    in DATA.  For example, if ARG references an unterminated string,
-    then the declaration will be stored in the DECL field.   If the
-    length of the unterminated string can be determined, it'll be
-    stored in the LEN field.  Note this length could well be different
-    than what a C strlen call would return.
- 
-    ELTSIZE is 1 for normal single byte character strings, and 2 or
-    4 for wide characer strings.  ELTSIZE is by default 1.
- 
-    The value returned is of type `ssizetype'.  */
- 
- tree
- c_strlen (tree arg, int only_value, c_strlen_data *data, unsigned eltsize)
- {
-   /* If we were not passed a DATA pointer, then get one to a local
-      structure.  That avoids having to check DATA for NULL before
-      each time we want to use it.  */
-   c_strlen_data local_strlen_data = { };
-   if (!data)
-     data = &local_strlen_data;
- 
-   gcc_checking_assert (eltsize == 1 || eltsize == 2 || eltsize == 4);
- 
-   tree src = STRIP_NOPS (arg);
-   if (TREE_CODE (src) == COND_EXPR
-       && (only_value || !TREE_SIDE_EFFECTS (TREE_OPERAND (src, 0))))
-     {
-       tree len1, len2;
- 
-       len1 = c_strlen (TREE_OPERAND (src, 1), only_value, data, eltsize);
-       len2 = c_strlen (TREE_OPERAND (src, 2), only_value, data, eltsize);
-       if (tree_int_cst_equal (len1, len2))
- 	return len1;
-     }
- 
-   if (TREE_CODE (src) == COMPOUND_EXPR
-       && (only_value || !TREE_SIDE_EFFECTS (TREE_OPERAND (src, 0))))
-     return c_strlen (TREE_OPERAND (src, 1), only_value, data, eltsize);
- 
-   location_t loc = EXPR_LOC_OR_LOC (src, input_location);
- 
-   /* Offset from the beginning of the string in bytes.  */
-   tree byteoff;
-   tree memsize;
-   tree decl;
-   src = string_constant (src, &byteoff, &memsize, &decl);
-   if (src == 0)
-     return NULL_TREE;
- 
-   /* Determine the size of the string element.  */
-   if (eltsize != tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (src)))))
-     return NULL_TREE;
- 
-   /* Set MAXELTS to sizeof (SRC) / sizeof (*SRC) - 1, the maximum possible
-      length of SRC.  Prefer TYPE_SIZE() to TREE_STRING_LENGTH() if possible
-      in case the latter is less than the size of the array, such as when
-      SRC refers to a short string literal used to initialize a large array.
-      In that case, the elements of the array after the terminating NUL are
-      all NUL.  */
-   HOST_WIDE_INT strelts = TREE_STRING_LENGTH (src);
-   strelts = strelts / eltsize;
- 
-   if (!tree_fits_uhwi_p (memsize))
-     return NULL_TREE;
- 
-   HOST_WIDE_INT maxelts = tree_to_uhwi (memsize) / eltsize;
- 
-   /* PTR can point to the byte representation of any string type, including
-      char* and wchar_t*.  */
-   const char *ptr = TREE_STRING_POINTER (src);
- 
-   if (byteoff && TREE_CODE (byteoff) != INTEGER_CST)
-     {
-       /* The code below works only for single byte character types.  */
-       if (eltsize != 1)
- 	return NULL_TREE;
- 
-       /* If the string has an internal NUL character followed by any
- 	 non-NUL characters (e.g., "foo\0bar"), we can't compute
- 	 the offset to the following NUL if we don't know where to
- 	 start searching for it.  */
-       unsigned len = string_length (ptr, eltsize, strelts);
- 
-       /* Return when an embedded null character is found or none at all.
- 	 In the latter case, set the DECL/LEN field in the DATA structure
- 	 so that callers may examine them.  */
-       if (len + 1 < strelts)
- 	return NULL_TREE;
-       else if (len >= maxelts)
- 	{
- 	  data->decl = decl;
- 	  data->off = byteoff;
- 	  data->minlen = ssize_int (len);
- 	  return NULL_TREE;
- 	}
- 
-       /* For empty strings the result should be zero.  */
-       if (len == 0)
- 	return ssize_int (0);
- 
-       /* We don't know the starting offset, but we do know that the string
- 	 has no internal zero bytes.  If the offset falls within the bounds
- 	 of the string subtract the offset from the length of the string,
- 	 and return that.  Otherwise the length is zero.  Take care to
- 	 use SAVE_EXPR in case the OFFSET has side-effects.  */
-       tree offsave = TREE_SIDE_EFFECTS (byteoff) ? save_expr (byteoff)
- 						 : byteoff;
-       offsave = fold_convert_loc (loc, sizetype, offsave);
-       tree condexp = fold_build2_loc (loc, LE_EXPR, boolean_type_node, offsave,
- 				      size_int (len));
-       tree lenexp = fold_build2_loc (loc, MINUS_EXPR, sizetype, size_int (len),
- 				     offsave);
-       lenexp = fold_convert_loc (loc, ssizetype, lenexp);
-       return fold_build3_loc (loc, COND_EXPR, ssizetype, condexp, lenexp,
- 			      build_zero_cst (ssizetype));
-     }
- 
-   /* Offset from the beginning of the string in elements.  */
-   HOST_WIDE_INT eltoff;
- 
-   /* We have a known offset into the string.  Start searching there for
-      a null character if we can represent it as a single HOST_WIDE_INT.  */
-   if (byteoff == 0)
-     eltoff = 0;
-   else if (! tree_fits_uhwi_p (byteoff) || tree_to_uhwi (byteoff) % eltsize)
-     eltoff = -1;
-   else
-     eltoff = tree_to_uhwi (byteoff) / eltsize;
- 
-   /* If the offset is known to be out of bounds, warn, and call strlen at
-      runtime.  */
-   if (eltoff < 0 || eltoff >= maxelts)
-     {
-       /* Suppress multiple warnings for propagated constant strings.  */
-       if (only_value != 2
- 	  && !TREE_NO_WARNING (arg)
- 	  && warning_at (loc, OPT_Warray_bounds,
- 			 "offset %qwi outside bounds of constant string",
- 			 eltoff))
- 	{
- 	  if (decl)
- 	    inform (DECL_SOURCE_LOCATION (decl), "%qE declared here", decl);
- 	  TREE_NO_WARNING (arg) = 1;
- 	}
-       return NULL_TREE;
-     }
- 
-   /* If eltoff is larger than strelts but less than maxelts the
-      string length is zero, since the excess memory will be zero.  */
-   if (eltoff > strelts)
-     return ssize_int (0);
- 
-   /* Use strlen to search for the first zero byte.  Since any strings
-      constructed with build_string will have nulls appended, we win even
-      if we get handed something like (char[4])"abcd".
- 
-      Since ELTOFF is our starting index into the string, no further
-      calculation is needed.  */
-   unsigned len = string_length (ptr + eltoff * eltsize, eltsize,
- 				strelts - eltoff);
- 
-   /* Don't know what to return if there was no zero termination.
-      Ideally this would turn into a gcc_checking_assert over time.
-      Set DECL/LEN so callers can examine them.  */
-   if (len >= maxelts - eltoff)
-     {
-       data->decl = decl;
-       data->off = byteoff;
-       data->minlen = ssize_int (len);
-       return NULL_TREE;
-     }
- 
-   return ssize_int (len);
- }
- 
- /* Return a constant integer corresponding to target reading
-    GET_MODE_BITSIZE (MODE) bits from string constant STR.  If
-    NULL_TERMINATED_P, reading stops after '\0' character, all further ones
-    are assumed to be zero, otherwise it reads as many characters
-    as needed.  */
- 
- rtx
- c_readstr (const char *str, scalar_int_mode mode,
- 	   bool null_terminated_p/*=true*/)
- {
-   HOST_WIDE_INT ch;
-   unsigned int i, j;
-   HOST_WIDE_INT tmp[MAX_BITSIZE_MODE_ANY_INT / HOST_BITS_PER_WIDE_INT];
- 
-   gcc_assert (GET_MODE_CLASS (mode) == MODE_INT);
-   unsigned int len = (GET_MODE_PRECISION (mode) + HOST_BITS_PER_WIDE_INT - 1)
-     / HOST_BITS_PER_WIDE_INT;
- 
-   gcc_assert (len <= MAX_BITSIZE_MODE_ANY_INT / HOST_BITS_PER_WIDE_INT);
-   for (i = 0; i < len; i++)
-     tmp[i] = 0;
- 
-   ch = 1;
-   for (i = 0; i < GET_MODE_SIZE (mode); i++)
-     {
-       j = i;
-       if (WORDS_BIG_ENDIAN)
- 	j = GET_MODE_SIZE (mode) - i - 1;
-       if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
- 	  && GET_MODE_SIZE (mode) >= UNITS_PER_WORD)
- 	j = j + UNITS_PER_WORD - 2 * (j % UNITS_PER_WORD) - 1;
-       j *= BITS_PER_UNIT;
- 
-       if (ch || !null_terminated_p)
- 	ch = (unsigned char) str[i];
-       tmp[j / HOST_BITS_PER_WIDE_INT] |= ch << (j % HOST_BITS_PER_WIDE_INT);
-     }
- 
-   wide_int c = wide_int::from_array (tmp, len, GET_MODE_PRECISION (mode));
-   return immed_wide_int_const (c, mode);
- }
- 
- /* Cast a target constant CST to target CHAR and if that value fits into
-    host char type, return zero and put that value into variable pointed to by
-    P.  */
- 
- static int
- target_char_cast (tree cst, char *p)
- {
-   unsigned HOST_WIDE_INT val, hostval;
- 
-   if (TREE_CODE (cst) != INTEGER_CST
-       || CHAR_TYPE_SIZE > HOST_BITS_PER_WIDE_INT)
-     return 1;
- 
-   /* Do not care if it fits or not right here.  */
-   val = TREE_INT_CST_LOW (cst);
- 
-   if (CHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT)
-     val &= (HOST_WIDE_INT_1U << CHAR_TYPE_SIZE) - 1;
- 
-   hostval = val;
-   if (HOST_BITS_PER_CHAR < HOST_BITS_PER_WIDE_INT)
-     hostval &= (HOST_WIDE_INT_1U << HOST_BITS_PER_CHAR) - 1;
- 
-   if (val != hostval)
-     return 1;
- 
-   *p = hostval;
-   return 0;
- }
- 
- /* Similar to save_expr, but assumes that arbitrary code is not executed
-    in between the multiple evaluations.  In particular, we assume that a
-    non-addressable local variable will not be modified.  */
- 
- static tree
- builtin_save_expr (tree exp)
- {
-   if (TREE_CODE (exp) == SSA_NAME
-       || (TREE_ADDRESSABLE (exp) == 0
- 	  && (TREE_CODE (exp) == PARM_DECL
- 	      || (VAR_P (exp) && !TREE_STATIC (exp)))))
-     return exp;
- 
-   return save_expr (exp);
- }
- 
- /* Given TEM, a pointer to a stack frame, follow the dynamic chain COUNT
-    times to get the address of either a higher stack frame, or a return
-    address located within it (depending on FNDECL_CODE).  */
- 
- static rtx
- expand_builtin_return_addr (enum built_in_function fndecl_code, int count)
- {
-   int i;
-   rtx tem = INITIAL_FRAME_ADDRESS_RTX;
-   if (tem == NULL_RTX)
-     {
-       /* For a zero count with __builtin_return_address, we don't care what
- 	 frame address we return, because target-specific definitions will
- 	 override us.  Therefore frame pointer elimination is OK, and using
- 	 the soft frame pointer is OK.
- 
- 	 For a nonzero count, or a zero count with __builtin_frame_address,
- 	 we require a stable offset from the current frame pointer to the
- 	 previous one, so we must use the hard frame pointer, and
- 	 we must disable frame pointer elimination.  */
-       if (count == 0 && fndecl_code == BUILT_IN_RETURN_ADDRESS)
- 	tem = frame_pointer_rtx;
-       else
- 	{
- 	  tem = hard_frame_pointer_rtx;
- 
- 	  /* Tell reload not to eliminate the frame pointer.  */
- 	  crtl->accesses_prior_frames = 1;
- 	}
-     }
- 
-   if (count > 0)
-     SETUP_FRAME_ADDRESSES ();
- 
-   /* On the SPARC, the return address is not in the frame, it is in a
-      register.  There is no way to access it off of the current frame
-      pointer, but it can be accessed off the previous frame pointer by
-      reading the value from the register window save area.  */
-   if (RETURN_ADDR_IN_PREVIOUS_FRAME && fndecl_code == BUILT_IN_RETURN_ADDRESS)
-     count--;
- 
-   /* Scan back COUNT frames to the specified frame.  */
-   for (i = 0; i < count; i++)
-     {
-       /* Assume the dynamic chain pointer is in the word that the
- 	 frame address points to, unless otherwise specified.  */
-       tem = DYNAMIC_CHAIN_ADDRESS (tem);
-       tem = memory_address (Pmode, tem);
-       tem = gen_frame_mem (Pmode, tem);
-       tem = copy_to_reg (tem);
-     }
- 
-   /* For __builtin_frame_address, return what we've got.  But, on
-      the SPARC for example, we may have to add a bias.  */
-   if (fndecl_code == BUILT_IN_FRAME_ADDRESS)
-     return FRAME_ADDR_RTX (tem);
- 
-   /* For __builtin_return_address, get the return address from that frame.  */
- #ifdef RETURN_ADDR_RTX
-   tem = RETURN_ADDR_RTX (count, tem);
- #else
-   tem = memory_address (Pmode,
- 			plus_constant (Pmode, tem, GET_MODE_SIZE (Pmode)));
-   tem = gen_frame_mem (Pmode, tem);
- #endif
-   return tem;
- }
- 
- /* Alias set used for setjmp buffer.  */
- static alias_set_type setjmp_alias_set = -1;
- 
- /* Construct the leading half of a __builtin_setjmp call.  Control will
-    return to RECEIVER_LABEL.  This is also called directly by the SJLJ
-    exception handling code.  */
- 
- void
- expand_builtin_setjmp_setup (rtx buf_addr, rtx receiver_label)
- {
-   machine_mode sa_mode = STACK_SAVEAREA_MODE (SAVE_NONLOCAL);
-   rtx stack_save;
-   rtx mem;
- 
-   if (setjmp_alias_set == -1)
-     setjmp_alias_set = new_alias_set ();
- 
-   buf_addr = convert_memory_address (Pmode, buf_addr);
- 
-   buf_addr = force_reg (Pmode, force_operand (buf_addr, NULL_RTX));
- 
-   /* We store the frame pointer and the address of receiver_label in
-      the buffer and use the rest of it for the stack save area, which
-      is machine-dependent.  */
- 
-   mem = gen_rtx_MEM (Pmode, buf_addr);
-   set_mem_alias_set (mem, setjmp_alias_set);
-   emit_move_insn (mem, hard_frame_pointer_rtx);
- 
-   mem = gen_rtx_MEM (Pmode, plus_constant (Pmode, buf_addr,
- 					   GET_MODE_SIZE (Pmode))),
-   set_mem_alias_set (mem, setjmp_alias_set);
- 
-   emit_move_insn (validize_mem (mem),
- 		  force_reg (Pmode, gen_rtx_LABEL_REF (Pmode, receiver_label)));
- 
-   stack_save = gen_rtx_MEM (sa_mode,
- 			    plus_constant (Pmode, buf_addr,
- 					   2 * GET_MODE_SIZE (Pmode)));
-   set_mem_alias_set (stack_save, setjmp_alias_set);
-   emit_stack_save (SAVE_NONLOCAL, &stack_save);
- 
-   /* If there is further processing to do, do it.  */
-   if (targetm.have_builtin_setjmp_setup ())
-     emit_insn (targetm.gen_builtin_setjmp_setup (buf_addr));
- 
-   /* We have a nonlocal label.   */
-   cfun->has_nonlocal_label = 1;
- }
- 
- /* Construct the trailing part of a __builtin_setjmp call.  This is
-    also called directly by the SJLJ exception handling code.
-    If RECEIVER_LABEL is NULL, instead contruct a nonlocal goto handler.  */
- 
- void
- expand_builtin_setjmp_receiver (rtx receiver_label)
- {
-   rtx chain;
- 
-   /* Mark the FP as used when we get here, so we have to make sure it's
-      marked as used by this function.  */
-   emit_use (hard_frame_pointer_rtx);
- 
-   /* Mark the static chain as clobbered here so life information
-      doesn't get messed up for it.  */
-   chain = rtx_for_static_chain (current_function_decl, true);
-   if (chain && REG_P (chain))
-     emit_clobber (chain);
- 
-   if (!HARD_FRAME_POINTER_IS_ARG_POINTER && fixed_regs[ARG_POINTER_REGNUM])
-     {
-       /* If the argument pointer can be eliminated in favor of the
- 	 frame pointer, we don't need to restore it.  We assume here
- 	 that if such an elimination is present, it can always be used.
- 	 This is the case on all known machines; if we don't make this
- 	 assumption, we do unnecessary saving on many machines.  */
-       size_t i;
-       static const struct elims {const int from, to;} elim_regs[] = ELIMINABLE_REGS;
- 
-       for (i = 0; i < ARRAY_SIZE (elim_regs); i++)
- 	if (elim_regs[i].from == ARG_POINTER_REGNUM
- 	    && elim_regs[i].to == HARD_FRAME_POINTER_REGNUM)
- 	  break;
- 
-       if (i == ARRAY_SIZE (elim_regs))
- 	{
- 	  /* Now restore our arg pointer from the address at which it
- 	     was saved in our stack frame.  */
- 	  emit_move_insn (crtl->args.internal_arg_pointer,
- 			  copy_to_reg (get_arg_pointer_save_area ()));
- 	}
-     }
- 
-   if (receiver_label != NULL && targetm.have_builtin_setjmp_receiver ())
-     emit_insn (targetm.gen_builtin_setjmp_receiver (receiver_label));
-   else if (targetm.have_nonlocal_goto_receiver ())
-     emit_insn (targetm.gen_nonlocal_goto_receiver ());
-   else
-     { /* Nothing */ }
- 
-   /* We must not allow the code we just generated to be reordered by
-      scheduling.  Specifically, the update of the frame pointer must
-      happen immediately, not later.  */
-   emit_insn (gen_blockage ());
- }
- 
- /* __builtin_longjmp is passed a pointer to an array of five words (not
-    all will be used on all machines).  It operates similarly to the C
-    library function of the same name, but is more efficient.  Much of
-    the code below is copied from the handling of non-local gotos.  */
- 
- static void
- expand_builtin_longjmp (rtx buf_addr, rtx value)
- {
-   rtx fp, lab, stack;
-   rtx_insn *insn, *last;
-   machine_mode sa_mode = STACK_SAVEAREA_MODE (SAVE_NONLOCAL);
- 
-   /* DRAP is needed for stack realign if longjmp is expanded to current
-      function  */
-   if (SUPPORTS_STACK_ALIGNMENT)
-     crtl->need_drap = true;
- 
-   if (setjmp_alias_set == -1)
-     setjmp_alias_set = new_alias_set ();
- 
-   buf_addr = convert_memory_address (Pmode, buf_addr);
- 
-   buf_addr = force_reg (Pmode, buf_addr);
- 
-   /* We require that the user must pass a second argument of 1, because
-      that is what builtin_setjmp will return.  */
-   gcc_assert (value == const1_rtx);
- 
-   last = get_last_insn ();
-   if (targetm.have_builtin_longjmp ())
-     emit_insn (targetm.gen_builtin_longjmp (buf_addr));
-   else
-     {
-       fp = gen_rtx_MEM (Pmode, buf_addr);
-       lab = gen_rtx_MEM (Pmode, plus_constant (Pmode, buf_addr,
- 					       GET_MODE_SIZE (Pmode)));
- 
-       stack = gen_rtx_MEM (sa_mode, plus_constant (Pmode, buf_addr,
- 						   2 * GET_MODE_SIZE (Pmode)));
-       set_mem_alias_set (fp, setjmp_alias_set);
-       set_mem_alias_set (lab, setjmp_alias_set);
-       set_mem_alias_set (stack, setjmp_alias_set);
- 
-       /* Pick up FP, label, and SP from the block and jump.  This code is
- 	 from expand_goto in stmt.c; see there for detailed comments.  */
-       if (targetm.have_nonlocal_goto ())
- 	/* We have to pass a value to the nonlocal_goto pattern that will
- 	   get copied into the static_chain pointer, but it does not matter
- 	   what that value is, because builtin_setjmp does not use it.  */
- 	emit_insn (targetm.gen_nonlocal_goto (value, lab, stack, fp));
-       else
- 	{
- 	  emit_clobber (gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)));
- 	  emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx));
- 
- 	  lab = copy_to_reg (lab);
- 
- 	  /* Restore the frame pointer and stack pointer.  We must use a
- 	     temporary since the setjmp buffer may be a local.  */
- 	  fp = copy_to_reg (fp);
- 	  emit_stack_restore (SAVE_NONLOCAL, stack);
- 
- 	  /* Ensure the frame pointer move is not optimized.  */
- 	  emit_insn (gen_blockage ());
- 	  emit_clobber (hard_frame_pointer_rtx);
- 	  emit_clobber (frame_pointer_rtx);
- 	  emit_move_insn (hard_frame_pointer_rtx, fp);
- 
- 	  emit_use (hard_frame_pointer_rtx);
- 	  emit_use (stack_pointer_rtx);
- 	  emit_indirect_jump (lab);
- 	}
-     }
- 
-   /* Search backwards and mark the jump insn as a non-local goto.
-      Note that this precludes the use of __builtin_longjmp to a
-      __builtin_setjmp target in the same function.  However, we've
-      already cautioned the user that these functions are for
-      internal exception handling use only.  */
-   for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
-     {
-       gcc_assert (insn != last);
- 
-       if (JUMP_P (insn))
- 	{
- 	  add_reg_note (insn, REG_NON_LOCAL_GOTO, const0_rtx);
- 	  break;
- 	}
-       else if (CALL_P (insn))
- 	break;
-     }
- }
- 
- static inline bool
- more_const_call_expr_args_p (const const_call_expr_arg_iterator *iter)
- {
-   return (iter->i < iter->n);
- }
- 
- /* This function validates the types of a function call argument list
-    against a specified list of tree_codes.  If the last specifier is a 0,
-    that represents an ellipsis, otherwise the last specifier must be a
-    VOID_TYPE.  */
- 
- static bool
- validate_arglist (const_tree callexpr, ...)
- {
-   enum tree_code code;
-   bool res = 0;
-   va_list ap;
-   const_call_expr_arg_iterator iter;
-   const_tree arg;
- 
-   va_start (ap, callexpr);
-   init_const_call_expr_arg_iterator (callexpr, &iter);
- 
-   /* Get a bitmap of pointer argument numbers declared attribute nonnull.  */
-   tree fn = CALL_EXPR_FN (callexpr);
-   bitmap argmap = get_nonnull_args (TREE_TYPE (TREE_TYPE (fn)));
- 
-   for (unsigned argno = 1; ; ++argno)
-     {
-       code = (enum tree_code) va_arg (ap, int);
- 
-       switch (code)
- 	{
- 	case 0:
- 	  /* This signifies an ellipses, any further arguments are all ok.  */
- 	  res = true;
- 	  goto end;
- 	case VOID_TYPE:
- 	  /* This signifies an endlink, if no arguments remain, return
- 	     true, otherwise return false.  */
- 	  res = !more_const_call_expr_args_p (&iter);
- 	  goto end;
- 	case POINTER_TYPE:
- 	  /* The actual argument must be nonnull when either the whole
- 	     called function has been declared nonnull, or when the formal
- 	     argument corresponding to the actual argument has been.  */
- 	  if (argmap
- 	      && (bitmap_empty_p (argmap) || bitmap_bit_p (argmap, argno)))
- 	    {
- 	      arg = next_const_call_expr_arg (&iter);
- 	      if (!validate_arg (arg, code) || integer_zerop (arg))
- 		goto end;
- 	      break;
- 	    }
- 	  /* FALLTHRU */
- 	default:
- 	  /* If no parameters remain or the parameter's code does not
- 	     match the specified code, return false.  Otherwise continue
- 	     checking any remaining arguments.  */
- 	  arg = next_const_call_expr_arg (&iter);
- 	  if (!validate_arg (arg, code))
- 	    goto end;
- 	  break;
- 	}
-     }
- 
-   /* We need gotos here since we can only have one VA_CLOSE in a
-      function.  */
-  end: ;
-   va_end (ap);
- 
-   BITMAP_FREE (argmap);
- 
-   return res;
- }
- 
- /* Expand a call to __builtin_nonlocal_goto.  We're passed the target label
-    and the address of the save area.  */
- 
- static rtx
- expand_builtin_nonlocal_goto (tree exp)
- {
-   tree t_label, t_save_area;
-   rtx r_label, r_save_area, r_fp, r_sp;
-   rtx_insn *insn;
- 
-   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   t_label = CALL_EXPR_ARG (exp, 0);
-   t_save_area = CALL_EXPR_ARG (exp, 1);
- 
-   r_label = expand_normal (t_label);
-   r_label = convert_memory_address (Pmode, r_label);
-   r_save_area = expand_normal (t_save_area);
-   r_save_area = convert_memory_address (Pmode, r_save_area);
-   /* Copy the address of the save location to a register just in case it was
-      based on the frame pointer.   */
-   r_save_area = copy_to_reg (r_save_area);
-   r_fp = gen_rtx_MEM (Pmode, r_save_area);
-   r_sp = gen_rtx_MEM (STACK_SAVEAREA_MODE (SAVE_NONLOCAL),
- 		      plus_constant (Pmode, r_save_area,
- 				     GET_MODE_SIZE (Pmode)));
- 
-   crtl->has_nonlocal_goto = 1;
- 
-   /* ??? We no longer need to pass the static chain value, afaik.  */
-   if (targetm.have_nonlocal_goto ())
-     emit_insn (targetm.gen_nonlocal_goto (const0_rtx, r_label, r_sp, r_fp));
-   else
-     {
-       emit_clobber (gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)));
-       emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx));
- 
-       r_label = copy_to_reg (r_label);
- 
-       /* Restore the frame pointer and stack pointer.  We must use a
- 	 temporary since the setjmp buffer may be a local.  */
-       r_fp = copy_to_reg (r_fp);
-       emit_stack_restore (SAVE_NONLOCAL, r_sp);
- 
-       /* Ensure the frame pointer move is not optimized.  */
-       emit_insn (gen_blockage ());
-       emit_clobber (hard_frame_pointer_rtx);
-       emit_clobber (frame_pointer_rtx);
-       emit_move_insn (hard_frame_pointer_rtx, r_fp);
- 
-       /* USE of hard_frame_pointer_rtx added for consistency;
- 	 not clear if really needed.  */
-       emit_use (hard_frame_pointer_rtx);
-       emit_use (stack_pointer_rtx);
- 
-       /* If the architecture is using a GP register, we must
- 	 conservatively assume that the target function makes use of it.
- 	 The prologue of functions with nonlocal gotos must therefore
- 	 initialize the GP register to the appropriate value, and we
- 	 must then make sure that this value is live at the point
- 	 of the jump.  (Note that this doesn't necessarily apply
- 	 to targets with a nonlocal_goto pattern; they are free
- 	 to implement it in their own way.  Note also that this is
- 	 a no-op if the GP register is a global invariant.)  */
-       unsigned regnum = PIC_OFFSET_TABLE_REGNUM;
-       if (regnum != INVALID_REGNUM && fixed_regs[regnum])
- 	emit_use (pic_offset_table_rtx);
- 
-       emit_indirect_jump (r_label);
-     }
- 
-   /* Search backwards to the jump insn and mark it as a
-      non-local goto.  */
-   for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
-     {
-       if (JUMP_P (insn))
- 	{
- 	  add_reg_note (insn, REG_NON_LOCAL_GOTO, const0_rtx);
- 	  break;
- 	}
-       else if (CALL_P (insn))
- 	break;
-     }
- 
-   return const0_rtx;
- }
- 
- /* __builtin_update_setjmp_buf is passed a pointer to an array of five words
-    (not all will be used on all machines) that was passed to __builtin_setjmp.
-    It updates the stack pointer in that block to the current value.  This is
-    also called directly by the SJLJ exception handling code.  */
- 
- void
- expand_builtin_update_setjmp_buf (rtx buf_addr)
- {
-   machine_mode sa_mode = STACK_SAVEAREA_MODE (SAVE_NONLOCAL);
-   buf_addr = convert_memory_address (Pmode, buf_addr);
-   rtx stack_save
-     = gen_rtx_MEM (sa_mode,
- 		   memory_address
- 		   (sa_mode,
- 		    plus_constant (Pmode, buf_addr,
- 				   2 * GET_MODE_SIZE (Pmode))));
- 
-   emit_stack_save (SAVE_NONLOCAL, &stack_save);
- }
- 
- /* Expand a call to __builtin_prefetch.  For a target that does not support
-    data prefetch, evaluate the memory address argument in case it has side
-    effects.  */
- 
- static void
- expand_builtin_prefetch (tree exp)
- {
-   tree arg0, arg1, arg2;
-   int nargs;
-   rtx op0, op1, op2;
- 
-   if (!validate_arglist (exp, POINTER_TYPE, 0))
-     return;
- 
-   arg0 = CALL_EXPR_ARG (exp, 0);
- 
-   /* Arguments 1 and 2 are optional; argument 1 (read/write) defaults to
-      zero (read) and argument 2 (locality) defaults to 3 (high degree of
-      locality).  */
-   nargs = call_expr_nargs (exp);
-   if (nargs > 1)
-     arg1 = CALL_EXPR_ARG (exp, 1);
-   else
-     arg1 = integer_zero_node;
-   if (nargs > 2)
-     arg2 = CALL_EXPR_ARG (exp, 2);
-   else
-     arg2 = integer_three_node;
- 
-   /* Argument 0 is an address.  */
-   op0 = expand_expr (arg0, NULL_RTX, Pmode, EXPAND_NORMAL);
- 
-   /* Argument 1 (read/write flag) must be a compile-time constant int.  */
-   if (TREE_CODE (arg1) != INTEGER_CST)
-     {
-       error ("second argument to %<__builtin_prefetch%> must be a constant");
-       arg1 = integer_zero_node;
-     }
-   op1 = expand_normal (arg1);
-   /* Argument 1 must be either zero or one.  */
-   if (INTVAL (op1) != 0 && INTVAL (op1) != 1)
-     {
-       warning (0, "invalid second argument to %<__builtin_prefetch%>;"
- 	       " using zero");
-       op1 = const0_rtx;
-     }
- 
-   /* Argument 2 (locality) must be a compile-time constant int.  */
-   if (TREE_CODE (arg2) != INTEGER_CST)
-     {
-       error ("third argument to %<__builtin_prefetch%> must be a constant");
-       arg2 = integer_zero_node;
-     }
-   op2 = expand_normal (arg2);
-   /* Argument 2 must be 0, 1, 2, or 3.  */
-   if (INTVAL (op2) < 0 || INTVAL (op2) > 3)
-     {
-       warning (0, "invalid third argument to %<__builtin_prefetch%>; using zero");
-       op2 = const0_rtx;
-     }
- 
-   if (targetm.have_prefetch ())
-     {
-       class expand_operand ops[3];
- 
-       create_address_operand (&ops[0], op0);
-       create_integer_operand (&ops[1], INTVAL (op1));
-       create_integer_operand (&ops[2], INTVAL (op2));
-       if (maybe_expand_insn (targetm.code_for_prefetch, 3, ops))
- 	return;
-     }
- 
-   /* Don't do anything with direct references to volatile memory, but
-      generate code to handle other side effects.  */
-   if (!MEM_P (op0) && side_effects_p (op0))
-     emit_insn (op0);
- }
- 
- /* Get a MEM rtx for expression EXP which is the address of an operand
-    to be used in a string instruction (cmpstrsi, cpymemsi, ..).  LEN is
-    the maximum length of the block of memory that might be accessed or
-    NULL if unknown.  */
- 
- static rtx
- get_memory_rtx (tree exp, tree len)
- {
-   tree orig_exp = exp;
-   rtx addr, mem;
- 
-   /* When EXP is not resolved SAVE_EXPR, MEM_ATTRS can be still derived
-      from its expression, for expr->a.b only <variable>.a.b is recorded.  */
-   if (TREE_CODE (exp) == SAVE_EXPR && !SAVE_EXPR_RESOLVED_P (exp))
-     exp = TREE_OPERAND (exp, 0);
- 
-   addr = expand_expr (orig_exp, NULL_RTX, ptr_mode, EXPAND_NORMAL);
-   mem = gen_rtx_MEM (BLKmode, memory_address (BLKmode, addr));
- 
-   /* Get an expression we can use to find the attributes to assign to MEM.
-      First remove any nops.  */
-   while (CONVERT_EXPR_P (exp)
- 	 && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (exp, 0))))
-     exp = TREE_OPERAND (exp, 0);
- 
-   /* Build a MEM_REF representing the whole accessed area as a byte blob,
-      (as builtin stringops may alias with anything).  */
-   exp = fold_build2 (MEM_REF,
- 		     build_array_type (char_type_node,
- 				       build_range_type (sizetype,
- 							 size_one_node, len)),
- 		     exp, build_int_cst (ptr_type_node, 0));
- 
-   /* If the MEM_REF has no acceptable address, try to get the base object
-      from the original address we got, and build an all-aliasing
-      unknown-sized access to that one.  */
-   if (is_gimple_mem_ref_addr (TREE_OPERAND (exp, 0)))
-     set_mem_attributes (mem, exp, 0);
-   else if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
- 	   && (exp = get_base_address (TREE_OPERAND (TREE_OPERAND (exp, 0),
- 						     0))))
-     {
-       exp = build_fold_addr_expr (exp);
-       exp = fold_build2 (MEM_REF,
- 			 build_array_type (char_type_node,
- 					   build_range_type (sizetype,
- 							     size_zero_node,
- 							     NULL)),
- 			 exp, build_int_cst (ptr_type_node, 0));
-       set_mem_attributes (mem, exp, 0);
-     }
-   set_mem_alias_set (mem, 0);
-   return mem;
- }
- 
- /* Built-in functions to perform an untyped call and return.  */
- 
- #define apply_args_mode \
-   (this_target_builtins->x_apply_args_mode)
- #define apply_result_mode \
-   (this_target_builtins->x_apply_result_mode)
- 
- /* Return the size required for the block returned by __builtin_apply_args,
-    and initialize apply_args_mode.  */
- 
- static int
- apply_args_size (void)
- {
-   static int size = -1;
-   int align;
-   unsigned int regno;
- 
-   /* The values computed by this function never change.  */
-   if (size < 0)
-     {
-       /* The first value is the incoming arg-pointer.  */
-       size = GET_MODE_SIZE (Pmode);
- 
-       /* The second value is the structure value address unless this is
- 	 passed as an "invisible" first argument.  */
-       if (targetm.calls.struct_value_rtx (cfun ? TREE_TYPE (cfun->decl) : 0, 0))
- 	size += GET_MODE_SIZE (Pmode);
- 
-       for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
- 	if (FUNCTION_ARG_REGNO_P (regno))
- 	  {
- 	    fixed_size_mode mode = targetm.calls.get_raw_arg_mode (regno);
- 
- 	    gcc_assert (mode != VOIDmode);
- 
- 	    align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
- 	    if (size % align != 0)
- 	      size = CEIL (size, align) * align;
- 	    size += GET_MODE_SIZE (mode);
- 	    apply_args_mode[regno] = mode;
- 	  }
- 	else
- 	  {
- 	    apply_args_mode[regno] = as_a <fixed_size_mode> (VOIDmode);
- 	  }
-     }
-   return size;
- }
- 
- /* Return the size required for the block returned by __builtin_apply,
-    and initialize apply_result_mode.  */
- 
- static int
- apply_result_size (void)
- {
-   static int size = -1;
-   int align, regno;
- 
-   /* The values computed by this function never change.  */
-   if (size < 0)
-     {
-       size = 0;
- 
-       for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
- 	if (targetm.calls.function_value_regno_p (regno))
- 	  {
- 	    fixed_size_mode mode = targetm.calls.get_raw_result_mode (regno);
- 
- 	    gcc_assert (mode != VOIDmode);
- 
- 	    align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
- 	    if (size % align != 0)
- 	      size = CEIL (size, align) * align;
- 	    size += GET_MODE_SIZE (mode);
- 	    apply_result_mode[regno] = mode;
- 	  }
- 	else
- 	  apply_result_mode[regno] = as_a <fixed_size_mode> (VOIDmode);
- 
-       /* Allow targets that use untyped_call and untyped_return to override
- 	 the size so that machine-specific information can be stored here.  */
- #ifdef APPLY_RESULT_SIZE
-       size = APPLY_RESULT_SIZE;
- #endif
-     }
-   return size;
- }
- 
- /* Create a vector describing the result block RESULT.  If SAVEP is true,
-    the result block is used to save the values; otherwise it is used to
-    restore the values.  */
- 
- static rtx
- result_vector (int savep, rtx result)
- {
-   int regno, size, align, nelts;
-   fixed_size_mode mode;
-   rtx reg, mem;
-   rtx *savevec = XALLOCAVEC (rtx, FIRST_PSEUDO_REGISTER);
- 
-   size = nelts = 0;
-   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
-     if ((mode = apply_result_mode[regno]) != VOIDmode)
-       {
- 	align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
- 	if (size % align != 0)
- 	  size = CEIL (size, align) * align;
- 	reg = gen_rtx_REG (mode, savep ? regno : INCOMING_REGNO (regno));
- 	mem = adjust_address (result, mode, size);
- 	savevec[nelts++] = (savep
- 			    ? gen_rtx_SET (mem, reg)
- 			    : gen_rtx_SET (reg, mem));
- 	size += GET_MODE_SIZE (mode);
-       }
-   return gen_rtx_PARALLEL (VOIDmode, gen_rtvec_v (nelts, savevec));
- }
- 
- /* Save the state required to perform an untyped call with the same
-    arguments as were passed to the current function.  */
- 
- static rtx
- expand_builtin_apply_args_1 (void)
- {
-   rtx registers, tem;
-   int size, align, regno;
-   fixed_size_mode mode;
-   rtx struct_incoming_value = targetm.calls.struct_value_rtx (cfun ? TREE_TYPE (cfun->decl) : 0, 1);
- 
-   /* Create a block where the arg-pointer, structure value address,
-      and argument registers can be saved.  */
-   registers = assign_stack_local (BLKmode, apply_args_size (), -1);
- 
-   /* Walk past the arg-pointer and structure value address.  */
-   size = GET_MODE_SIZE (Pmode);
-   if (targetm.calls.struct_value_rtx (cfun ? TREE_TYPE (cfun->decl) : 0, 0))
-     size += GET_MODE_SIZE (Pmode);
- 
-   /* Save each register used in calling a function to the block.  */
-   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
-     if ((mode = apply_args_mode[regno]) != VOIDmode)
-       {
- 	align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
- 	if (size % align != 0)
- 	  size = CEIL (size, align) * align;
- 
- 	tem = gen_rtx_REG (mode, INCOMING_REGNO (regno));
- 
- 	emit_move_insn (adjust_address (registers, mode, size), tem);
- 	size += GET_MODE_SIZE (mode);
-       }
- 
-   /* Save the arg pointer to the block.  */
-   tem = copy_to_reg (crtl->args.internal_arg_pointer);
-   /* We need the pointer as the caller actually passed them to us, not
-      as we might have pretended they were passed.  Make sure it's a valid
-      operand, as emit_move_insn isn't expected to handle a PLUS.  */
-   if (STACK_GROWS_DOWNWARD)
-     tem
-       = force_operand (plus_constant (Pmode, tem,
- 				      crtl->args.pretend_args_size),
- 		       NULL_RTX);
-   emit_move_insn (adjust_address (registers, Pmode, 0), tem);
- 
-   size = GET_MODE_SIZE (Pmode);
- 
-   /* Save the structure value address unless this is passed as an
-      "invisible" first argument.  */
-   if (struct_incoming_value)
-     emit_move_insn (adjust_address (registers, Pmode, size),
- 		    copy_to_reg (struct_incoming_value));
- 
-   /* Return the address of the block.  */
-   return copy_addr_to_reg (XEXP (registers, 0));
- }
- 
- /* __builtin_apply_args returns block of memory allocated on
-    the stack into which is stored the arg pointer, structure
-    value address, static chain, and all the registers that might
-    possibly be used in performing a function call.  The code is
-    moved to the start of the function so the incoming values are
-    saved.  */
- 
- static rtx
- expand_builtin_apply_args (void)
- {
-   /* Don't do __builtin_apply_args more than once in a function.
-      Save the result of the first call and reuse it.  */
-   if (apply_args_value != 0)
-     return apply_args_value;
-   {
-     /* When this function is called, it means that registers must be
-        saved on entry to this function.  So we migrate the
-        call to the first insn of this function.  */
-     rtx temp;
- 
-     start_sequence ();
-     temp = expand_builtin_apply_args_1 ();
-     rtx_insn *seq = get_insns ();
-     end_sequence ();
- 
-     apply_args_value = temp;
- 
-     /* Put the insns after the NOTE that starts the function.
-        If this is inside a start_sequence, make the outer-level insn
-        chain current, so the code is placed at the start of the
-        function.  If internal_arg_pointer is a non-virtual pseudo,
-        it needs to be placed after the function that initializes
-        that pseudo.  */
-     push_topmost_sequence ();
-     if (REG_P (crtl->args.internal_arg_pointer)
- 	&& REGNO (crtl->args.internal_arg_pointer) > LAST_VIRTUAL_REGISTER)
-       emit_insn_before (seq, parm_birth_insn);
-     else
-       emit_insn_before (seq, NEXT_INSN (entry_of_function ()));
-     pop_topmost_sequence ();
-     return temp;
-   }
- }
- 
- /* Perform an untyped call and save the state required to perform an
-    untyped return of whatever value was returned by the given function.  */
- 
- static rtx
- expand_builtin_apply (rtx function, rtx arguments, rtx argsize)
- {
-   int size, align, regno;
-   fixed_size_mode mode;
-   rtx incoming_args, result, reg, dest, src;
-   rtx_call_insn *call_insn;
-   rtx old_stack_level = 0;
-   rtx call_fusage = 0;
-   rtx struct_value = targetm.calls.struct_value_rtx (cfun ? TREE_TYPE (cfun->decl) : 0, 0);
- 
-   arguments = convert_memory_address (Pmode, arguments);
- 
-   /* Create a block where the return registers can be saved.  */
-   result = assign_stack_local (BLKmode, apply_result_size (), -1);
- 
-   /* Fetch the arg pointer from the ARGUMENTS block.  */
-   incoming_args = gen_reg_rtx (Pmode);
-   emit_move_insn (incoming_args, gen_rtx_MEM (Pmode, arguments));
-   if (!STACK_GROWS_DOWNWARD)
-     incoming_args = expand_simple_binop (Pmode, MINUS, incoming_args, argsize,
- 					 incoming_args, 0, OPTAB_LIB_WIDEN);
- 
-   /* Push a new argument block and copy the arguments.  Do not allow
-      the (potential) memcpy call below to interfere with our stack
-      manipulations.  */
-   do_pending_stack_adjust ();
-   NO_DEFER_POP;
- 
-   /* Save the stack with nonlocal if available.  */
-   if (targetm.have_save_stack_nonlocal ())
-     emit_stack_save (SAVE_NONLOCAL, &old_stack_level);
-   else
-     emit_stack_save (SAVE_BLOCK, &old_stack_level);
- 
-   /* Allocate a block of memory onto the stack and copy the memory
-      arguments to the outgoing arguments address.  We can pass TRUE
-      as the 4th argument because we just saved the stack pointer
-      and will restore it right after the call.  */
-   allocate_dynamic_stack_space (argsize, 0, BIGGEST_ALIGNMENT, -1, true);
- 
-   /* Set DRAP flag to true, even though allocate_dynamic_stack_space
-      may have already set current_function_calls_alloca to true.
-      current_function_calls_alloca won't be set if argsize is zero,
-      so we have to guarantee need_drap is true here.  */
-   if (SUPPORTS_STACK_ALIGNMENT)
-     crtl->need_drap = true;
- 
-   dest = virtual_outgoing_args_rtx;
-   if (!STACK_GROWS_DOWNWARD)
-     {
-       if (CONST_INT_P (argsize))
- 	dest = plus_constant (Pmode, dest, -INTVAL (argsize));
-       else
- 	dest = gen_rtx_PLUS (Pmode, dest, negate_rtx (Pmode, argsize));
-     }
-   dest = gen_rtx_MEM (BLKmode, dest);
-   set_mem_align (dest, PARM_BOUNDARY);
-   src = gen_rtx_MEM (BLKmode, incoming_args);
-   set_mem_align (src, PARM_BOUNDARY);
-   emit_block_move (dest, src, argsize, BLOCK_OP_NORMAL);
- 
-   /* Refer to the argument block.  */
-   apply_args_size ();
-   arguments = gen_rtx_MEM (BLKmode, arguments);
-   set_mem_align (arguments, PARM_BOUNDARY);
- 
-   /* Walk past the arg-pointer and structure value address.  */
-   size = GET_MODE_SIZE (Pmode);
-   if (struct_value)
-     size += GET_MODE_SIZE (Pmode);
- 
-   /* Restore each of the registers previously saved.  Make USE insns
-      for each of these registers for use in making the call.  */
-   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
-     if ((mode = apply_args_mode[regno]) != VOIDmode)
-       {
- 	align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
- 	if (size % align != 0)
- 	  size = CEIL (size, align) * align;
- 	reg = gen_rtx_REG (mode, regno);
- 	emit_move_insn (reg, adjust_address (arguments, mode, size));
- 	use_reg (&call_fusage, reg);
- 	size += GET_MODE_SIZE (mode);
-       }
- 
-   /* Restore the structure value address unless this is passed as an
-      "invisible" first argument.  */
-   size = GET_MODE_SIZE (Pmode);
-   if (struct_value)
-     {
-       rtx value = gen_reg_rtx (Pmode);
-       emit_move_insn (value, adjust_address (arguments, Pmode, size));
-       emit_move_insn (struct_value, value);
-       if (REG_P (struct_value))
- 	use_reg (&call_fusage, struct_value);
-     }
- 
-   /* All arguments and registers used for the call are set up by now!  */
-   function = prepare_call_address (NULL, function, NULL, &call_fusage, 0, 0);
- 
-   /* Ensure address is valid.  SYMBOL_REF is already valid, so no need,
-      and we don't want to load it into a register as an optimization,
-      because prepare_call_address already did it if it should be done.  */
-   if (GET_CODE (function) != SYMBOL_REF)
-     function = memory_address (FUNCTION_MODE, function);
- 
-   /* Generate the actual call instruction and save the return value.  */
-   if (targetm.have_untyped_call ())
-     {
-       rtx mem = gen_rtx_MEM (FUNCTION_MODE, function);
-       rtx_insn *seq = targetm.gen_untyped_call (mem, result,
- 						result_vector (1, result));
-       for (rtx_insn *insn = seq; insn; insn = NEXT_INSN (insn))
- 	if (CALL_P (insn))
- 	  add_reg_note (insn, REG_UNTYPED_CALL, NULL_RTX);
-       emit_insn (seq);
-     }
-   else if (targetm.have_call_value ())
-     {
-       rtx valreg = 0;
- 
-       /* Locate the unique return register.  It is not possible to
- 	 express a call that sets more than one return register using
- 	 call_value; use untyped_call for that.  In fact, untyped_call
- 	 only needs to save the return registers in the given block.  */
-       for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
- 	if ((mode = apply_result_mode[regno]) != VOIDmode)
- 	  {
- 	    gcc_assert (!valreg); /* have_untyped_call required.  */
- 
- 	    valreg = gen_rtx_REG (mode, regno);
- 	  }
- 
-       emit_insn (targetm.gen_call_value (valreg,
- 					 gen_rtx_MEM (FUNCTION_MODE, function),
- 					 const0_rtx, NULL_RTX, const0_rtx));
- 
-       emit_move_insn (adjust_address (result, GET_MODE (valreg), 0), valreg);
-     }
-   else
-     gcc_unreachable ();
- 
-   /* Find the CALL insn we just emitted, and attach the register usage
-      information.  */
-   call_insn = last_call_insn ();
-   add_function_usage_to (call_insn, call_fusage);
- 
-   /* Restore the stack.  */
-   if (targetm.have_save_stack_nonlocal ())
-     emit_stack_restore (SAVE_NONLOCAL, old_stack_level);
-   else
-     emit_stack_restore (SAVE_BLOCK, old_stack_level);
-   fixup_args_size_notes (call_insn, get_last_insn (), 0);
- 
-   OK_DEFER_POP;
- 
-   /* Return the address of the result block.  */
-   result = copy_addr_to_reg (XEXP (result, 0));
-   return convert_memory_address (ptr_mode, result);
- }
- 
- /* Perform an untyped return.  */
- 
- static void
- expand_builtin_return (rtx result)
- {
-   int size, align, regno;
-   fixed_size_mode mode;
-   rtx reg;
-   rtx_insn *call_fusage = 0;
- 
-   result = convert_memory_address (Pmode, result);
- 
-   apply_result_size ();
-   result = gen_rtx_MEM (BLKmode, result);
- 
-   if (targetm.have_untyped_return ())
-     {
-       rtx vector = result_vector (0, result);
-       emit_jump_insn (targetm.gen_untyped_return (result, vector));
-       emit_barrier ();
-       return;
-     }
- 
-   /* Restore the return value and note that each value is used.  */
-   size = 0;
-   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
-     if ((mode = apply_result_mode[regno]) != VOIDmode)
-       {
- 	align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
- 	if (size % align != 0)
- 	  size = CEIL (size, align) * align;
- 	reg = gen_rtx_REG (mode, INCOMING_REGNO (regno));
- 	emit_move_insn (reg, adjust_address (result, mode, size));
- 
- 	push_to_sequence (call_fusage);
- 	emit_use (reg);
- 	call_fusage = get_insns ();
- 	end_sequence ();
- 	size += GET_MODE_SIZE (mode);
-       }
- 
-   /* Put the USE insns before the return.  */
-   emit_insn (call_fusage);
- 
-   /* Return whatever values was restored by jumping directly to the end
-      of the function.  */
-   expand_naked_return ();
- }
- 
- /* Used by expand_builtin_classify_type and fold_builtin_classify_type.  */
- 
- static enum type_class
- type_to_class (tree type)
- {
-   switch (TREE_CODE (type))
-     {
-     case VOID_TYPE:	   return void_type_class;
-     case INTEGER_TYPE:	   return integer_type_class;
-     case ENUMERAL_TYPE:	   return enumeral_type_class;
-     case BOOLEAN_TYPE:	   return boolean_type_class;
-     case POINTER_TYPE:	   return pointer_type_class;
-     case REFERENCE_TYPE:   return reference_type_class;
-     case OFFSET_TYPE:	   return offset_type_class;
-     case REAL_TYPE:	   return real_type_class;
-     case COMPLEX_TYPE:	   return complex_type_class;
-     case FUNCTION_TYPE:	   return function_type_class;
-     case METHOD_TYPE:	   return method_type_class;
-     case RECORD_TYPE:	   return record_type_class;
-     case UNION_TYPE:
-     case QUAL_UNION_TYPE:  return union_type_class;
-     case ARRAY_TYPE:	   return (TYPE_STRING_FLAG (type)
- 				   ? string_type_class : array_type_class);
-     case LANG_TYPE:	   return lang_type_class;
-     case OPAQUE_TYPE:      return opaque_type_class;
-     default:		   return no_type_class;
-     }
- }
- 
- /* Expand a call EXP to __builtin_classify_type.  */
- 
- static rtx
- expand_builtin_classify_type (tree exp)
- {
-   if (call_expr_nargs (exp))
-     return GEN_INT (type_to_class (TREE_TYPE (CALL_EXPR_ARG (exp, 0))));
-   return GEN_INT (no_type_class);
- }
- 
- /* This helper macro, meant to be used in mathfn_built_in below, determines
-    which among a set of builtin math functions is appropriate for a given type
-    mode.  The `F' (float) and `L' (long double) are automatically generated
-    from the 'double' case.  If a function supports the _Float<N> and _Float<N>X
-    types, there are additional types that are considered with 'F32', 'F64',
-    'F128', etc. suffixes.  */
- #define CASE_MATHFN(MATHFN) \
-   CASE_CFN_##MATHFN: \
-   fcode = BUILT_IN_##MATHFN; fcodef = BUILT_IN_##MATHFN##F ; \
-   fcodel = BUILT_IN_##MATHFN##L ; break;
- /* Similar to the above, but also add support for the _Float<N> and _Float<N>X
-    types.  */
- #define CASE_MATHFN_FLOATN(MATHFN) \
-   CASE_CFN_##MATHFN: \
-   fcode = BUILT_IN_##MATHFN; fcodef = BUILT_IN_##MATHFN##F ; \
-   fcodel = BUILT_IN_##MATHFN##L ; fcodef16 = BUILT_IN_##MATHFN##F16 ; \
-   fcodef32 = BUILT_IN_##MATHFN##F32; fcodef64 = BUILT_IN_##MATHFN##F64 ; \
-   fcodef128 = BUILT_IN_##MATHFN##F128 ; fcodef32x = BUILT_IN_##MATHFN##F32X ; \
-   fcodef64x = BUILT_IN_##MATHFN##F64X ; fcodef128x = BUILT_IN_##MATHFN##F128X ;\
-   break;
- /* Similar to above, but appends _R after any F/L suffix.  */
- #define CASE_MATHFN_REENT(MATHFN) \
-   case CFN_BUILT_IN_##MATHFN##_R: \
-   case CFN_BUILT_IN_##MATHFN##F_R: \
-   case CFN_BUILT_IN_##MATHFN##L_R: \
-   fcode = BUILT_IN_##MATHFN##_R; fcodef = BUILT_IN_##MATHFN##F_R ; \
-   fcodel = BUILT_IN_##MATHFN##L_R ; break;
- 
- /* Return a function equivalent to FN but operating on floating-point
-    values of type TYPE, or END_BUILTINS if no such function exists.
-    This is purely an operation on function codes; it does not guarantee
-    that the target actually has an implementation of the function.  */
- 
- static built_in_function
- mathfn_built_in_2 (tree type, combined_fn fn)
- {
-   tree mtype;
-   built_in_function fcode, fcodef, fcodel;
-   built_in_function fcodef16 = END_BUILTINS;
-   built_in_function fcodef32 = END_BUILTINS;
-   built_in_function fcodef64 = END_BUILTINS;
-   built_in_function fcodef128 = END_BUILTINS;
-   built_in_function fcodef32x = END_BUILTINS;
-   built_in_function fcodef64x = END_BUILTINS;
-   built_in_function fcodef128x = END_BUILTINS;
- 
-   switch (fn)
-     {
- #define SEQ_OF_CASE_MATHFN			\
-     CASE_MATHFN (ACOS)				\
-     CASE_MATHFN (ACOSH)				\
-     CASE_MATHFN (ASIN)				\
-     CASE_MATHFN (ASINH)				\
-     CASE_MATHFN (ATAN)				\
-     CASE_MATHFN (ATAN2)				\
-     CASE_MATHFN (ATANH)				\
-     CASE_MATHFN (CBRT)				\
-     CASE_MATHFN_FLOATN (CEIL)			\
-     CASE_MATHFN (CEXPI)				\
-     CASE_MATHFN_FLOATN (COPYSIGN)		\
-     CASE_MATHFN (COS)				\
-     CASE_MATHFN (COSH)				\
-     CASE_MATHFN (DREM)				\
-     CASE_MATHFN (ERF)				\
-     CASE_MATHFN (ERFC)				\
-     CASE_MATHFN (EXP)				\
-     CASE_MATHFN (EXP10)				\
-     CASE_MATHFN (EXP2)				\
-     CASE_MATHFN (EXPM1)				\
-     CASE_MATHFN (FABS)				\
-     CASE_MATHFN (FDIM)				\
-     CASE_MATHFN_FLOATN (FLOOR)			\
-     CASE_MATHFN_FLOATN (FMA)			\
-     CASE_MATHFN_FLOATN (FMAX)			\
-     CASE_MATHFN_FLOATN (FMIN)			\
-     CASE_MATHFN (FMOD)				\
-     CASE_MATHFN (FREXP)				\
-     CASE_MATHFN (GAMMA)				\
-     CASE_MATHFN_REENT (GAMMA) /* GAMMA_R */	\
-     CASE_MATHFN (HUGE_VAL)			\
-     CASE_MATHFN (HYPOT)				\
-     CASE_MATHFN (ILOGB)				\
-     CASE_MATHFN (ICEIL)				\
-     CASE_MATHFN (IFLOOR)			\
-     CASE_MATHFN (INF)				\
-     CASE_MATHFN (IRINT)				\
-     CASE_MATHFN (IROUND)			\
-     CASE_MATHFN (ISINF)				\
-     CASE_MATHFN (J0)				\
-     CASE_MATHFN (J1)				\
-     CASE_MATHFN (JN)				\
-     CASE_MATHFN (LCEIL)				\
-     CASE_MATHFN (LDEXP)				\
-     CASE_MATHFN (LFLOOR)			\
-     CASE_MATHFN (LGAMMA)			\
-     CASE_MATHFN_REENT (LGAMMA) /* LGAMMA_R */	\
-     CASE_MATHFN (LLCEIL)			\
-     CASE_MATHFN (LLFLOOR)			\
-     CASE_MATHFN (LLRINT)			\
-     CASE_MATHFN (LLROUND)			\
-     CASE_MATHFN (LOG)				\
-     CASE_MATHFN (LOG10)				\
-     CASE_MATHFN (LOG1P)				\
-     CASE_MATHFN (LOG2)				\
-     CASE_MATHFN (LOGB)				\
-     CASE_MATHFN (LRINT)				\
-     CASE_MATHFN (LROUND)			\
-     CASE_MATHFN (MODF)				\
-     CASE_MATHFN (NAN)				\
-     CASE_MATHFN (NANS)				\
-     CASE_MATHFN_FLOATN (NEARBYINT)		\
-     CASE_MATHFN (NEXTAFTER)			\
-     CASE_MATHFN (NEXTTOWARD)			\
-     CASE_MATHFN (POW)				\
-     CASE_MATHFN (POWI)				\
-     CASE_MATHFN (POW10)				\
-     CASE_MATHFN (REMAINDER)			\
-     CASE_MATHFN (REMQUO)			\
-     CASE_MATHFN_FLOATN (RINT)			\
-     CASE_MATHFN_FLOATN (ROUND)			\
-     CASE_MATHFN_FLOATN (ROUNDEVEN)		\
-     CASE_MATHFN (SCALB)				\
-     CASE_MATHFN (SCALBLN)			\
-     CASE_MATHFN (SCALBN)			\
-     CASE_MATHFN (SIGNBIT)			\
-     CASE_MATHFN (SIGNIFICAND)			\
-     CASE_MATHFN (SIN)				\
-     CASE_MATHFN (SINCOS)			\
-     CASE_MATHFN (SINH)				\
-     CASE_MATHFN_FLOATN (SQRT)			\
-     CASE_MATHFN (TAN)				\
-     CASE_MATHFN (TANH)				\
-     CASE_MATHFN (TGAMMA)			\
-     CASE_MATHFN_FLOATN (TRUNC)			\
-     CASE_MATHFN (Y0)				\
-     CASE_MATHFN (Y1)				\
-     CASE_MATHFN (YN)
- 
-     SEQ_OF_CASE_MATHFN
- 
-     default:
-       return END_BUILTINS;
-     }
- 
-   mtype = TYPE_MAIN_VARIANT (type);
-   if (mtype == double_type_node)
-     return fcode;
-   else if (mtype == float_type_node)
-     return fcodef;
-   else if (mtype == long_double_type_node)
-     return fcodel;
-   else if (mtype == float16_type_node)
-     return fcodef16;
-   else if (mtype == float32_type_node)
-     return fcodef32;
-   else if (mtype == float64_type_node)
-     return fcodef64;
-   else if (mtype == float128_type_node)
-     return fcodef128;
-   else if (mtype == float32x_type_node)
-     return fcodef32x;
-   else if (mtype == float64x_type_node)
-     return fcodef64x;
-   else if (mtype == float128x_type_node)
-     return fcodef128x;
-   else
-     return END_BUILTINS;
- }
- 
- #undef CASE_MATHFN
- #undef CASE_MATHFN_FLOATN
- #undef CASE_MATHFN_REENT
- 
- /* Return mathematic function equivalent to FN but operating directly on TYPE,
-    if available.  If IMPLICIT_P is true use the implicit builtin declaration,
-    otherwise use the explicit declaration.  If we can't do the conversion,
-    return null.  */
- 
- static tree
- mathfn_built_in_1 (tree type, combined_fn fn, bool implicit_p)
- {
-   built_in_function fcode2 = mathfn_built_in_2 (type, fn);
-   if (fcode2 == END_BUILTINS)
-     return NULL_TREE;
- 
-   if (implicit_p && !builtin_decl_implicit_p (fcode2))
-     return NULL_TREE;
- 
-   return builtin_decl_explicit (fcode2);
- }
- 
- /* Like mathfn_built_in_1, but always use the implicit array.  */
- 
- tree
- mathfn_built_in (tree type, combined_fn fn)
- {
-   return mathfn_built_in_1 (type, fn, /*implicit=*/ 1);
- }
- 
- /* Like mathfn_built_in_1, but take a built_in_function and
-    always use the implicit array.  */
- 
- tree
- mathfn_built_in (tree type, enum built_in_function fn)
- {
-   return mathfn_built_in_1 (type, as_combined_fn (fn), /*implicit=*/ 1);
- }
- 
- /* Return the type associated with a built in function, i.e., the one
-    to be passed to mathfn_built_in to get the type-specific
-    function.  */
- 
- tree
- mathfn_built_in_type (combined_fn fn)
- {
- #define CASE_MATHFN(MATHFN)			\
-   case CFN_BUILT_IN_##MATHFN:			\
-     return double_type_node;			\
-   case CFN_BUILT_IN_##MATHFN##F:		\
-     return float_type_node;			\
-   case CFN_BUILT_IN_##MATHFN##L:		\
-     return long_double_type_node;
- 
- #define CASE_MATHFN_FLOATN(MATHFN)		\
-   CASE_MATHFN(MATHFN)				\
-   case CFN_BUILT_IN_##MATHFN##F16:		\
-     return float16_type_node;			\
-   case CFN_BUILT_IN_##MATHFN##F32:		\
-     return float32_type_node;			\
-   case CFN_BUILT_IN_##MATHFN##F64:		\
-     return float64_type_node;			\
-   case CFN_BUILT_IN_##MATHFN##F128:		\
-     return float128_type_node;			\
-   case CFN_BUILT_IN_##MATHFN##F32X:		\
-     return float32x_type_node;			\
-   case CFN_BUILT_IN_##MATHFN##F64X:		\
-     return float64x_type_node;			\
-   case CFN_BUILT_IN_##MATHFN##F128X:		\
-     return float128x_type_node;
- 
- /* Similar to above, but appends _R after any F/L suffix.  */
- #define CASE_MATHFN_REENT(MATHFN) \
-   case CFN_BUILT_IN_##MATHFN##_R:		\
-     return double_type_node;			\
-   case CFN_BUILT_IN_##MATHFN##F_R:		\
-     return float_type_node;			\
-   case CFN_BUILT_IN_##MATHFN##L_R:		\
-     return long_double_type_node;
- 
-   switch (fn)
-     {
-     SEQ_OF_CASE_MATHFN
- 
-     default:
-       return NULL_TREE;
-     }
- 
- #undef CASE_MATHFN
- #undef CASE_MATHFN_FLOATN
- #undef CASE_MATHFN_REENT
- #undef SEQ_OF_CASE_MATHFN
- }
- 
- /* If BUILT_IN_NORMAL function FNDECL has an associated internal function,
-    return its code, otherwise return IFN_LAST.  Note that this function
-    only tests whether the function is defined in internals.def, not whether
-    it is actually available on the target.  */
- 
- internal_fn
- associated_internal_fn (tree fndecl)
- {
-   gcc_checking_assert (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL);
-   tree return_type = TREE_TYPE (TREE_TYPE (fndecl));
-   switch (DECL_FUNCTION_CODE (fndecl))
-     {
- #define DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) \
-     CASE_FLT_FN (BUILT_IN_##NAME): return IFN_##NAME;
- #define DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) \
-     CASE_FLT_FN (BUILT_IN_##NAME): return IFN_##NAME; \
-     CASE_FLT_FN_FLOATN_NX (BUILT_IN_##NAME): return IFN_##NAME;
- #define DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) \
-     CASE_INT_FN (BUILT_IN_##NAME): return IFN_##NAME;
- #include "internal-fn.def"
- 
-     CASE_FLT_FN (BUILT_IN_POW10):
-       return IFN_EXP10;
- 
-     CASE_FLT_FN (BUILT_IN_DREM):
-       return IFN_REMAINDER;
- 
-     CASE_FLT_FN (BUILT_IN_SCALBN):
-     CASE_FLT_FN (BUILT_IN_SCALBLN):
-       if (REAL_MODE_FORMAT (TYPE_MODE (return_type))->b == 2)
- 	return IFN_LDEXP;
-       return IFN_LAST;
- 
-     default:
-       return IFN_LAST;
-     }
- }
- 
- /* If CALL is a call to a BUILT_IN_NORMAL function that could be replaced
-    on the current target by a call to an internal function, return the
-    code of that internal function, otherwise return IFN_LAST.  The caller
-    is responsible for ensuring that any side-effects of the built-in
-    call are dealt with correctly.  E.g. if CALL sets errno, the caller
-    must decide that the errno result isn't needed or make it available
-    in some other way.  */
- 
- internal_fn
- replacement_internal_fn (gcall *call)
- {
-   if (gimple_call_builtin_p (call, BUILT_IN_NORMAL))
-     {
-       internal_fn ifn = associated_internal_fn (gimple_call_fndecl (call));
-       if (ifn != IFN_LAST)
- 	{
- 	  tree_pair types = direct_internal_fn_types (ifn, call);
- 	  optimization_type opt_type = bb_optimization_type (gimple_bb (call));
- 	  if (direct_internal_fn_supported_p (ifn, types, opt_type))
- 	    return ifn;
- 	}
-     }
-   return IFN_LAST;
- }
- 
- /* Expand a call to the builtin trinary math functions (fma).
-    Return NULL_RTX if a normal call should be emitted rather than expanding the
-    function in-line.  EXP is the expression that is a call to the builtin
-    function; if convenient, the result should be placed in TARGET.
-    SUBTARGET may be used as the target for computing one of EXP's
-    operands.  */
- 
- static rtx
- expand_builtin_mathfn_ternary (tree exp, rtx target, rtx subtarget)
- {
-   optab builtin_optab;
-   rtx op0, op1, op2, result;
-   rtx_insn *insns;
-   tree fndecl = get_callee_fndecl (exp);
-   tree arg0, arg1, arg2;
-   machine_mode mode;
- 
-   if (!validate_arglist (exp, REAL_TYPE, REAL_TYPE, REAL_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   arg0 = CALL_EXPR_ARG (exp, 0);
-   arg1 = CALL_EXPR_ARG (exp, 1);
-   arg2 = CALL_EXPR_ARG (exp, 2);
- 
-   switch (DECL_FUNCTION_CODE (fndecl))
-     {
-     CASE_FLT_FN (BUILT_IN_FMA):
-     CASE_FLT_FN_FLOATN_NX (BUILT_IN_FMA):
-       builtin_optab = fma_optab; break;
-     default:
-       gcc_unreachable ();
-     }
- 
-   /* Make a suitable register to place result in.  */
-   mode = TYPE_MODE (TREE_TYPE (exp));
- 
-   /* Before working hard, check whether the instruction is available.  */
-   if (optab_handler (builtin_optab, mode) == CODE_FOR_nothing)
-     return NULL_RTX;
- 
-   result = gen_reg_rtx (mode);
- 
-   /* Always stabilize the argument list.  */
-   CALL_EXPR_ARG (exp, 0) = arg0 = builtin_save_expr (arg0);
-   CALL_EXPR_ARG (exp, 1) = arg1 = builtin_save_expr (arg1);
-   CALL_EXPR_ARG (exp, 2) = arg2 = builtin_save_expr (arg2);
- 
-   op0 = expand_expr (arg0, subtarget, VOIDmode, EXPAND_NORMAL);
-   op1 = expand_normal (arg1);
-   op2 = expand_normal (arg2);
- 
-   start_sequence ();
- 
-   /* Compute into RESULT.
-      Set RESULT to wherever the result comes back.  */
-   result = expand_ternary_op (mode, builtin_optab, op0, op1, op2,
- 			      result, 0);
- 
-   /* If we were unable to expand via the builtin, stop the sequence
-      (without outputting the insns) and call to the library function
-      with the stabilized argument list.  */
-   if (result == 0)
-     {
-       end_sequence ();
-       return expand_call (exp, target, target == const0_rtx);
-     }
- 
-   /* Output the entire sequence.  */
-   insns = get_insns ();
-   end_sequence ();
-   emit_insn (insns);
- 
-   return result;
- }
- 
- /* Expand a call to the builtin sin and cos math functions.
-    Return NULL_RTX if a normal call should be emitted rather than expanding the
-    function in-line.  EXP is the expression that is a call to the builtin
-    function; if convenient, the result should be placed in TARGET.
-    SUBTARGET may be used as the target for computing one of EXP's
-    operands.  */
- 
- static rtx
- expand_builtin_mathfn_3 (tree exp, rtx target, rtx subtarget)
- {
-   optab builtin_optab;
-   rtx op0;
-   rtx_insn *insns;
-   tree fndecl = get_callee_fndecl (exp);
-   machine_mode mode;
-   tree arg;
- 
-   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   arg = CALL_EXPR_ARG (exp, 0);
- 
-   switch (DECL_FUNCTION_CODE (fndecl))
-     {
-     CASE_FLT_FN (BUILT_IN_SIN):
-     CASE_FLT_FN (BUILT_IN_COS):
-       builtin_optab = sincos_optab; break;
-     default:
-       gcc_unreachable ();
-     }
- 
-   /* Make a suitable register to place result in.  */
-   mode = TYPE_MODE (TREE_TYPE (exp));
- 
-   /* Check if sincos insn is available, otherwise fallback
-      to sin or cos insn.  */
-   if (optab_handler (builtin_optab, mode) == CODE_FOR_nothing)
-     switch (DECL_FUNCTION_CODE (fndecl))
-       {
-       CASE_FLT_FN (BUILT_IN_SIN):
- 	builtin_optab = sin_optab; break;
-       CASE_FLT_FN (BUILT_IN_COS):
- 	builtin_optab = cos_optab; break;
-       default:
- 	gcc_unreachable ();
-       }
- 
-   /* Before working hard, check whether the instruction is available.  */
-   if (optab_handler (builtin_optab, mode) != CODE_FOR_nothing)
-     {
-       rtx result = gen_reg_rtx (mode);
- 
-       /* Wrap the computation of the argument in a SAVE_EXPR, as we may
- 	 need to expand the argument again.  This way, we will not perform
- 	 side-effects more the once.  */
-       CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
- 
-       op0 = expand_expr (arg, subtarget, VOIDmode, EXPAND_NORMAL);
- 
-       start_sequence ();
- 
-       /* Compute into RESULT.
- 	 Set RESULT to wherever the result comes back.  */
-       if (builtin_optab == sincos_optab)
- 	{
- 	  int ok;
- 
- 	  switch (DECL_FUNCTION_CODE (fndecl))
- 	    {
- 	    CASE_FLT_FN (BUILT_IN_SIN):
- 	      ok = expand_twoval_unop (builtin_optab, op0, 0, result, 0);
- 	      break;
- 	    CASE_FLT_FN (BUILT_IN_COS):
- 	      ok = expand_twoval_unop (builtin_optab, op0, result, 0, 0);
- 	      break;
- 	    default:
- 	      gcc_unreachable ();
- 	    }
- 	  gcc_assert (ok);
- 	}
-       else
- 	result = expand_unop (mode, builtin_optab, op0, result, 0);
- 
-       if (result != 0)
- 	{
- 	  /* Output the entire sequence.  */
- 	  insns = get_insns ();
- 	  end_sequence ();
- 	  emit_insn (insns);
- 	  return result;
- 	}
- 
-       /* If we were unable to expand via the builtin, stop the sequence
- 	 (without outputting the insns) and call to the library function
- 	 with the stabilized argument list.  */
-       end_sequence ();
-     }
- 
-   return expand_call (exp, target, target == const0_rtx);
- }
- 
- /* Given an interclass math builtin decl FNDECL and it's argument ARG
-    return an RTL instruction code that implements the functionality.
-    If that isn't possible or available return CODE_FOR_nothing.  */
- 
- static enum insn_code
- interclass_mathfn_icode (tree arg, tree fndecl)
- {
-   bool errno_set = false;
-   optab builtin_optab = unknown_optab;
-   machine_mode mode;
- 
-   switch (DECL_FUNCTION_CODE (fndecl))
-     {
-     CASE_FLT_FN (BUILT_IN_ILOGB):
-       errno_set = true; builtin_optab = ilogb_optab; break;
-     CASE_FLT_FN (BUILT_IN_ISINF):
-       builtin_optab = isinf_optab; break;
-     case BUILT_IN_ISNORMAL:
-     case BUILT_IN_ISFINITE:
-     CASE_FLT_FN (BUILT_IN_FINITE):
-     case BUILT_IN_FINITED32:
-     case BUILT_IN_FINITED64:
-     case BUILT_IN_FINITED128:
-     case BUILT_IN_ISINFD32:
-     case BUILT_IN_ISINFD64:
-     case BUILT_IN_ISINFD128:
-       /* These builtins have no optabs (yet).  */
-       break;
-     default:
-       gcc_unreachable ();
-     }
- 
-   /* There's no easy way to detect the case we need to set EDOM.  */
-   if (flag_errno_math && errno_set)
-     return CODE_FOR_nothing;
- 
-   /* Optab mode depends on the mode of the input argument.  */
-   mode = TYPE_MODE (TREE_TYPE (arg));
- 
-   if (builtin_optab)
-     return optab_handler (builtin_optab, mode);
-   return CODE_FOR_nothing;
- }
- 
- /* Expand a call to one of the builtin math functions that operate on
-    floating point argument and output an integer result (ilogb, isinf,
-    isnan, etc).
-    Return 0 if a normal call should be emitted rather than expanding the
-    function in-line.  EXP is the expression that is a call to the builtin
-    function; if convenient, the result should be placed in TARGET.  */
- 
- static rtx
- expand_builtin_interclass_mathfn (tree exp, rtx target)
- {
-   enum insn_code icode = CODE_FOR_nothing;
-   rtx op0;
-   tree fndecl = get_callee_fndecl (exp);
-   machine_mode mode;
-   tree arg;
- 
-   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   arg = CALL_EXPR_ARG (exp, 0);
-   icode = interclass_mathfn_icode (arg, fndecl);
-   mode = TYPE_MODE (TREE_TYPE (arg));
- 
-   if (icode != CODE_FOR_nothing)
-     {
-       class expand_operand ops[1];
-       rtx_insn *last = get_last_insn ();
-       tree orig_arg = arg;
- 
-       /* Wrap the computation of the argument in a SAVE_EXPR, as we may
- 	 need to expand the argument again.  This way, we will not perform
- 	 side-effects more the once.  */
-       CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
- 
-       op0 = expand_expr (arg, NULL_RTX, VOIDmode, EXPAND_NORMAL);
- 
-       if (mode != GET_MODE (op0))
- 	op0 = convert_to_mode (mode, op0, 0);
- 
-       create_output_operand (&ops[0], target, TYPE_MODE (TREE_TYPE (exp)));
-       if (maybe_legitimize_operands (icode, 0, 1, ops)
- 	  && maybe_emit_unop_insn (icode, ops[0].value, op0, UNKNOWN))
- 	return ops[0].value;
- 
-       delete_insns_since (last);
-       CALL_EXPR_ARG (exp, 0) = orig_arg;
-     }
- 
-   return NULL_RTX;
- }
- 
- /* Expand a call to the builtin sincos math function.
-    Return NULL_RTX if a normal call should be emitted rather than expanding the
-    function in-line.  EXP is the expression that is a call to the builtin
-    function.  */
- 
- static rtx
- expand_builtin_sincos (tree exp)
- {
-   rtx op0, op1, op2, target1, target2;
-   machine_mode mode;
-   tree arg, sinp, cosp;
-   int result;
-   location_t loc = EXPR_LOCATION (exp);
-   tree alias_type, alias_off;
- 
-   if (!validate_arglist (exp, REAL_TYPE,
-  			 POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   arg = CALL_EXPR_ARG (exp, 0);
-   sinp = CALL_EXPR_ARG (exp, 1);
-   cosp = CALL_EXPR_ARG (exp, 2);
- 
-   /* Make a suitable register to place result in.  */
-   mode = TYPE_MODE (TREE_TYPE (arg));
- 
-   /* Check if sincos insn is available, otherwise emit the call.  */
-   if (optab_handler (sincos_optab, mode) == CODE_FOR_nothing)
-     return NULL_RTX;
- 
-   target1 = gen_reg_rtx (mode);
-   target2 = gen_reg_rtx (mode);
- 
-   op0 = expand_normal (arg);
-   alias_type = build_pointer_type_for_mode (TREE_TYPE (arg), ptr_mode, true);
-   alias_off = build_int_cst (alias_type, 0);
-   op1 = expand_normal (fold_build2_loc (loc, MEM_REF, TREE_TYPE (arg),
- 					sinp, alias_off));
-   op2 = expand_normal (fold_build2_loc (loc, MEM_REF, TREE_TYPE (arg),
- 					cosp, alias_off));
- 
-   /* Compute into target1 and target2.
-      Set TARGET to wherever the result comes back.  */
-   result = expand_twoval_unop (sincos_optab, op0, target2, target1, 0);
-   gcc_assert (result);
- 
-   /* Move target1 and target2 to the memory locations indicated
-      by op1 and op2.  */
-   emit_move_insn (op1, target1);
-   emit_move_insn (op2, target2);
- 
-   return const0_rtx;
- }
- 
- /* Expand a call to the internal cexpi builtin to the sincos math function.
-    EXP is the expression that is a call to the builtin function; if convenient,
-    the result should be placed in TARGET.  */
- 
- static rtx
- expand_builtin_cexpi (tree exp, rtx target)
- {
-   tree fndecl = get_callee_fndecl (exp);
-   tree arg, type;
-   machine_mode mode;
-   rtx op0, op1, op2;
-   location_t loc = EXPR_LOCATION (exp);
- 
-   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   arg = CALL_EXPR_ARG (exp, 0);
-   type = TREE_TYPE (arg);
-   mode = TYPE_MODE (TREE_TYPE (arg));
- 
-   /* Try expanding via a sincos optab, fall back to emitting a libcall
-      to sincos or cexp.  We are sure we have sincos or cexp because cexpi
-      is only generated from sincos, cexp or if we have either of them.  */
-   if (optab_handler (sincos_optab, mode) != CODE_FOR_nothing)
-     {
-       op1 = gen_reg_rtx (mode);
-       op2 = gen_reg_rtx (mode);
- 
-       op0 = expand_expr (arg, NULL_RTX, VOIDmode, EXPAND_NORMAL);
- 
-       /* Compute into op1 and op2.  */
-       expand_twoval_unop (sincos_optab, op0, op2, op1, 0);
-     }
-   else if (targetm.libc_has_function (function_sincos, type))
-     {
-       tree call, fn = NULL_TREE;
-       tree top1, top2;
-       rtx op1a, op2a;
- 
-       if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPIF)
- 	fn = builtin_decl_explicit (BUILT_IN_SINCOSF);
-       else if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPI)
- 	fn = builtin_decl_explicit (BUILT_IN_SINCOS);
-       else if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPIL)
- 	fn = builtin_decl_explicit (BUILT_IN_SINCOSL);
-       else
- 	gcc_unreachable ();
- 
-       op1 = assign_temp (TREE_TYPE (arg), 1, 1);
-       op2 = assign_temp (TREE_TYPE (arg), 1, 1);
-       op1a = copy_addr_to_reg (XEXP (op1, 0));
-       op2a = copy_addr_to_reg (XEXP (op2, 0));
-       top1 = make_tree (build_pointer_type (TREE_TYPE (arg)), op1a);
-       top2 = make_tree (build_pointer_type (TREE_TYPE (arg)), op2a);
- 
-       /* Make sure not to fold the sincos call again.  */
-       call = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
-       expand_normal (build_call_nary (TREE_TYPE (TREE_TYPE (fn)),
- 				      call, 3, arg, top1, top2));
-     }
-   else
-     {
-       tree call, fn = NULL_TREE, narg;
-       tree ctype = build_complex_type (type);
- 
-       if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPIF)
- 	fn = builtin_decl_explicit (BUILT_IN_CEXPF);
-       else if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPI)
- 	fn = builtin_decl_explicit (BUILT_IN_CEXP);
-       else if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPIL)
- 	fn = builtin_decl_explicit (BUILT_IN_CEXPL);
-       else
- 	gcc_unreachable ();
- 
-       /* If we don't have a decl for cexp create one.  This is the
- 	 friendliest fallback if the user calls __builtin_cexpi
- 	 without full target C99 function support.  */
-       if (fn == NULL_TREE)
- 	{
- 	  tree fntype;
- 	  const char *name = NULL;
- 
- 	  if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPIF)
- 	    name = "cexpf";
- 	  else if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPI)
- 	    name = "cexp";
- 	  else if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPIL)
- 	    name = "cexpl";
- 
- 	  fntype = build_function_type_list (ctype, ctype, NULL_TREE);
- 	  fn = build_fn_decl (name, fntype);
- 	}
- 
-       narg = fold_build2_loc (loc, COMPLEX_EXPR, ctype,
- 			  build_real (type, dconst0), arg);
- 
-       /* Make sure not to fold the cexp call again.  */
-       call = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
-       return expand_expr (build_call_nary (ctype, call, 1, narg),
- 			  target, VOIDmode, EXPAND_NORMAL);
-     }
- 
-   /* Now build the proper return type.  */
-   return expand_expr (build2 (COMPLEX_EXPR, build_complex_type (type),
- 			      make_tree (TREE_TYPE (arg), op2),
- 			      make_tree (TREE_TYPE (arg), op1)),
- 		      target, VOIDmode, EXPAND_NORMAL);
- }
- 
- /* Conveniently construct a function call expression.  FNDECL names the
-    function to be called, N is the number of arguments, and the "..."
-    parameters are the argument expressions.  Unlike build_call_exr
-    this doesn't fold the call, hence it will always return a CALL_EXPR.  */
- 
- static tree
- build_call_nofold_loc (location_t loc, tree fndecl, int n, ...)
- {
-   va_list ap;
-   tree fntype = TREE_TYPE (fndecl);
-   tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
- 
-   va_start (ap, n);
-   fn = build_call_valist (TREE_TYPE (fntype), fn, n, ap);
-   va_end (ap);
-   SET_EXPR_LOCATION (fn, loc);
-   return fn;
- }
- 
- /* Expand a call to one of the builtin rounding functions gcc defines
-    as an extension (lfloor and lceil).  As these are gcc extensions we
-    do not need to worry about setting errno to EDOM.
-    If expanding via optab fails, lower expression to (int)(floor(x)).
-    EXP is the expression that is a call to the builtin function;
-    if convenient, the result should be placed in TARGET.  */
- 
- static rtx
- expand_builtin_int_roundingfn (tree exp, rtx target)
- {
-   convert_optab builtin_optab;
-   rtx op0, tmp;
-   rtx_insn *insns;
-   tree fndecl = get_callee_fndecl (exp);
-   enum built_in_function fallback_fn;
-   tree fallback_fndecl;
-   machine_mode mode;
-   tree arg;
- 
-   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   arg = CALL_EXPR_ARG (exp, 0);
- 
-   switch (DECL_FUNCTION_CODE (fndecl))
-     {
-     CASE_FLT_FN (BUILT_IN_ICEIL):
-     CASE_FLT_FN (BUILT_IN_LCEIL):
-     CASE_FLT_FN (BUILT_IN_LLCEIL):
-       builtin_optab = lceil_optab;
-       fallback_fn = BUILT_IN_CEIL;
-       break;
- 
-     CASE_FLT_FN (BUILT_IN_IFLOOR):
-     CASE_FLT_FN (BUILT_IN_LFLOOR):
-     CASE_FLT_FN (BUILT_IN_LLFLOOR):
-       builtin_optab = lfloor_optab;
-       fallback_fn = BUILT_IN_FLOOR;
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   /* Make a suitable register to place result in.  */
-   mode = TYPE_MODE (TREE_TYPE (exp));
- 
-   target = gen_reg_rtx (mode);
- 
-   /* Wrap the computation of the argument in a SAVE_EXPR, as we may
-      need to expand the argument again.  This way, we will not perform
-      side-effects more the once.  */
-   CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
- 
-   op0 = expand_expr (arg, NULL, VOIDmode, EXPAND_NORMAL);
- 
-   start_sequence ();
- 
-   /* Compute into TARGET.  */
-   if (expand_sfix_optab (target, op0, builtin_optab))
-     {
-       /* Output the entire sequence.  */
-       insns = get_insns ();
-       end_sequence ();
-       emit_insn (insns);
-       return target;
-     }
- 
-   /* If we were unable to expand via the builtin, stop the sequence
-      (without outputting the insns).  */
-   end_sequence ();
- 
-   /* Fall back to floating point rounding optab.  */
-   fallback_fndecl = mathfn_built_in (TREE_TYPE (arg), fallback_fn);
- 
-   /* For non-C99 targets we may end up without a fallback fndecl here
-      if the user called __builtin_lfloor directly.  In this case emit
-      a call to the floor/ceil variants nevertheless.  This should result
-      in the best user experience for not full C99 targets.  */
-   if (fallback_fndecl == NULL_TREE)
-     {
-       tree fntype;
-       const char *name = NULL;
- 
-       switch (DECL_FUNCTION_CODE (fndecl))
- 	{
- 	case BUILT_IN_ICEIL:
- 	case BUILT_IN_LCEIL:
- 	case BUILT_IN_LLCEIL:
- 	  name = "ceil";
- 	  break;
- 	case BUILT_IN_ICEILF:
- 	case BUILT_IN_LCEILF:
- 	case BUILT_IN_LLCEILF:
- 	  name = "ceilf";
- 	  break;
- 	case BUILT_IN_ICEILL:
- 	case BUILT_IN_LCEILL:
- 	case BUILT_IN_LLCEILL:
- 	  name = "ceill";
- 	  break;
- 	case BUILT_IN_IFLOOR:
- 	case BUILT_IN_LFLOOR:
- 	case BUILT_IN_LLFLOOR:
- 	  name = "floor";
- 	  break;
- 	case BUILT_IN_IFLOORF:
- 	case BUILT_IN_LFLOORF:
- 	case BUILT_IN_LLFLOORF:
- 	  name = "floorf";
- 	  break;
- 	case BUILT_IN_IFLOORL:
- 	case BUILT_IN_LFLOORL:
- 	case BUILT_IN_LLFLOORL:
- 	  name = "floorl";
- 	  break;
- 	default:
- 	  gcc_unreachable ();
- 	}
- 
-       fntype = build_function_type_list (TREE_TYPE (arg),
- 					 TREE_TYPE (arg), NULL_TREE);
-       fallback_fndecl = build_fn_decl (name, fntype);
-     }
- 
-   exp = build_call_nofold_loc (EXPR_LOCATION (exp), fallback_fndecl, 1, arg);
- 
-   tmp = expand_normal (exp);
-   tmp = maybe_emit_group_store (tmp, TREE_TYPE (exp));
- 
-   /* Truncate the result of floating point optab to integer
-      via expand_fix ().  */
-   target = gen_reg_rtx (mode);
-   expand_fix (target, tmp, 0);
- 
-   return target;
- }
- 
- /* Expand a call to one of the builtin math functions doing integer
-    conversion (lrint).
-    Return 0 if a normal call should be emitted rather than expanding the
-    function in-line.  EXP is the expression that is a call to the builtin
-    function; if convenient, the result should be placed in TARGET.  */
- 
- static rtx
- expand_builtin_int_roundingfn_2 (tree exp, rtx target)
- {
-   convert_optab builtin_optab;
-   rtx op0;
-   rtx_insn *insns;
-   tree fndecl = get_callee_fndecl (exp);
-   tree arg;
-   machine_mode mode;
-   enum built_in_function fallback_fn = BUILT_IN_NONE;
- 
-   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   arg = CALL_EXPR_ARG (exp, 0);
- 
-   switch (DECL_FUNCTION_CODE (fndecl))
-     {
-     CASE_FLT_FN (BUILT_IN_IRINT):
-       fallback_fn = BUILT_IN_LRINT;
-       gcc_fallthrough ();
-     CASE_FLT_FN (BUILT_IN_LRINT):
-     CASE_FLT_FN (BUILT_IN_LLRINT):
-       builtin_optab = lrint_optab;
-       break;
- 
-     CASE_FLT_FN (BUILT_IN_IROUND):
-       fallback_fn = BUILT_IN_LROUND;
-       gcc_fallthrough ();
-     CASE_FLT_FN (BUILT_IN_LROUND):
-     CASE_FLT_FN (BUILT_IN_LLROUND):
-       builtin_optab = lround_optab;
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   /* There's no easy way to detect the case we need to set EDOM.  */
-   if (flag_errno_math && fallback_fn == BUILT_IN_NONE)
-     return NULL_RTX;
- 
-   /* Make a suitable register to place result in.  */
-   mode = TYPE_MODE (TREE_TYPE (exp));
- 
-   /* There's no easy way to detect the case we need to set EDOM.  */
-   if (!flag_errno_math)
-     {
-       rtx result = gen_reg_rtx (mode);
- 
-       /* Wrap the computation of the argument in a SAVE_EXPR, as we may
- 	 need to expand the argument again.  This way, we will not perform
- 	 side-effects more the once.  */
-       CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
- 
-       op0 = expand_expr (arg, NULL, VOIDmode, EXPAND_NORMAL);
- 
-       start_sequence ();
- 
-       if (expand_sfix_optab (result, op0, builtin_optab))
- 	{
- 	  /* Output the entire sequence.  */
- 	  insns = get_insns ();
- 	  end_sequence ();
- 	  emit_insn (insns);
- 	  return result;
- 	}
- 
-       /* If we were unable to expand via the builtin, stop the sequence
- 	 (without outputting the insns) and call to the library function
- 	 with the stabilized argument list.  */
-       end_sequence ();
-     }
- 
-   if (fallback_fn != BUILT_IN_NONE)
-     {
-       /* Fall back to rounding to long int.  Use implicit_p 0 - for non-C99
- 	 targets, (int) round (x) should never be transformed into
- 	 BUILT_IN_IROUND and if __builtin_iround is called directly, emit
- 	 a call to lround in the hope that the target provides at least some
- 	 C99 functions.  This should result in the best user experience for
- 	 not full C99 targets.
- 	 As scalar float conversions with same mode are useless in GIMPLE,
- 	 we can end up e.g. with _Float32 argument passed to float builtin,
- 	 try to get the type from the builtin prototype first.  */
-       tree fallback_fndecl = NULL_TREE;
-       if (tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (fndecl)))
-         fallback_fndecl
-           = mathfn_built_in_1 (TREE_VALUE (argtypes),
- 			       as_combined_fn (fallback_fn), 0);
-       if (fallback_fndecl == NULL_TREE)
- 	fallback_fndecl
- 	  = mathfn_built_in_1 (TREE_TYPE (arg),
- 			       as_combined_fn (fallback_fn), 0);
-       if (fallback_fndecl)
- 	{
- 	  exp = build_call_nofold_loc (EXPR_LOCATION (exp),
- 				       fallback_fndecl, 1, arg);
- 
- 	  target = expand_call (exp, NULL_RTX, target == const0_rtx);
- 	  target = maybe_emit_group_store (target, TREE_TYPE (exp));
- 	  return convert_to_mode (mode, target, 0);
- 	}
-     }
- 
-   return expand_call (exp, target, target == const0_rtx);
- }
- 
- /* Expand a call to the powi built-in mathematical function.  Return NULL_RTX if
-    a normal call should be emitted rather than expanding the function
-    in-line.  EXP is the expression that is a call to the builtin
-    function; if convenient, the result should be placed in TARGET.  */
- 
- static rtx
- expand_builtin_powi (tree exp, rtx target)
- {
-   tree arg0, arg1;
-   rtx op0, op1;
-   machine_mode mode;
-   machine_mode mode2;
- 
-   if (! validate_arglist (exp, REAL_TYPE, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   arg0 = CALL_EXPR_ARG (exp, 0);
-   arg1 = CALL_EXPR_ARG (exp, 1);
-   mode = TYPE_MODE (TREE_TYPE (exp));
- 
-   /* Emit a libcall to libgcc.  */
- 
-   /* Mode of the 2nd argument must match that of an int.  */
-   mode2 = int_mode_for_size (INT_TYPE_SIZE, 0).require ();
- 
-   if (target == NULL_RTX)
-     target = gen_reg_rtx (mode);
- 
-   op0 = expand_expr (arg0, NULL_RTX, mode, EXPAND_NORMAL);
-   if (GET_MODE (op0) != mode)
-     op0 = convert_to_mode (mode, op0, 0);
-   op1 = expand_expr (arg1, NULL_RTX, mode2, EXPAND_NORMAL);
-   if (GET_MODE (op1) != mode2)
-     op1 = convert_to_mode (mode2, op1, 0);
- 
-   target = emit_library_call_value (optab_libfunc (powi_optab, mode),
- 				    target, LCT_CONST, mode,
- 				    op0, mode, op1, mode2);
- 
-   return target;
- }
- 
- /* Expand expression EXP which is a call to the strlen builtin.  Return
-    NULL_RTX if we failed and the caller should emit a normal call, otherwise
-    try to get the result in TARGET, if convenient.  */
- 
- static rtx
- expand_builtin_strlen (tree exp, rtx target,
- 		       machine_mode target_mode)
- {
-   if (!validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree src = CALL_EXPR_ARG (exp, 0);
-   if (!check_read_access (exp, src))
-     return NULL_RTX;
- 
-   /* If the length can be computed at compile-time, return it.  */
-   if (tree len = c_strlen (src, 0))
-     return expand_expr (len, target, target_mode, EXPAND_NORMAL);
- 
-   /* If the length can be computed at compile-time and is constant
-      integer, but there are side-effects in src, evaluate
-      src for side-effects, then return len.
-      E.g. x = strlen (i++ ? "xfoo" + 1 : "bar");
-      can be optimized into: i++; x = 3;  */
-   tree len = c_strlen (src, 1);
-   if (len && TREE_CODE (len) == INTEGER_CST)
-     {
-       expand_expr (src, const0_rtx, VOIDmode, EXPAND_NORMAL);
-       return expand_expr (len, target, target_mode, EXPAND_NORMAL);
-     }
- 
-   unsigned int align = get_pointer_alignment (src) / BITS_PER_UNIT;
- 
-   /* If SRC is not a pointer type, don't do this operation inline.  */
-   if (align == 0)
-     return NULL_RTX;
- 
-   /* Bail out if we can't compute strlen in the right mode.  */
-   machine_mode insn_mode;
-   enum insn_code icode = CODE_FOR_nothing;
-   FOR_EACH_MODE_FROM (insn_mode, target_mode)
-     {
-       icode = optab_handler (strlen_optab, insn_mode);
-       if (icode != CODE_FOR_nothing)
- 	break;
-     }
-   if (insn_mode == VOIDmode)
-     return NULL_RTX;
- 
-   /* Make a place to hold the source address.  We will not expand
-      the actual source until we are sure that the expansion will
-      not fail -- there are trees that cannot be expanded twice.  */
-   rtx src_reg = gen_reg_rtx (Pmode);
- 
-   /* Mark the beginning of the strlen sequence so we can emit the
-      source operand later.  */
-   rtx_insn *before_strlen = get_last_insn ();
- 
-   class expand_operand ops[4];
-   create_output_operand (&ops[0], target, insn_mode);
-   create_fixed_operand (&ops[1], gen_rtx_MEM (BLKmode, src_reg));
-   create_integer_operand (&ops[2], 0);
-   create_integer_operand (&ops[3], align);
-   if (!maybe_expand_insn (icode, 4, ops))
-     return NULL_RTX;
- 
-   /* Check to see if the argument was declared attribute nonstring
-      and if so, issue a warning since at this point it's not known
-      to be nul-terminated.  */
-   maybe_warn_nonstring_arg (get_callee_fndecl (exp), exp);
- 
-   /* Now that we are assured of success, expand the source.  */
-   start_sequence ();
-   rtx pat = expand_expr (src, src_reg, Pmode, EXPAND_NORMAL);
-   if (pat != src_reg)
-     {
- #ifdef POINTERS_EXTEND_UNSIGNED
-       if (GET_MODE (pat) != Pmode)
- 	pat = convert_to_mode (Pmode, pat,
- 			       POINTERS_EXTEND_UNSIGNED);
- #endif
-       emit_move_insn (src_reg, pat);
-     }
-   pat = get_insns ();
-   end_sequence ();
- 
-   if (before_strlen)
-     emit_insn_after (pat, before_strlen);
-   else
-     emit_insn_before (pat, get_insns ());
- 
-   /* Return the value in the proper mode for this function.  */
-   if (GET_MODE (ops[0].value) == target_mode)
-     target = ops[0].value;
-   else if (target != 0)
-     convert_move (target, ops[0].value, 0);
-   else
-     target = convert_to_mode (target_mode, ops[0].value, 0);
- 
-   return target;
- }
- 
- /* Expand call EXP to the strnlen built-in, returning the result
-    and setting it in TARGET.  Otherwise return NULL_RTX on failure.  */
- 
- static rtx
- expand_builtin_strnlen (tree exp, rtx target, machine_mode target_mode)
- {
-   if (!validate_arglist (exp, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree src = CALL_EXPR_ARG (exp, 0);
-   tree bound = CALL_EXPR_ARG (exp, 1);
- 
-   if (!bound)
-     return NULL_RTX;
- 
-   check_read_access (exp, src, bound);
- 
-   location_t loc = UNKNOWN_LOCATION;
-   if (EXPR_HAS_LOCATION (exp))
-     loc = EXPR_LOCATION (exp);
- 
-   /* FIXME: Change c_strlen() to return sizetype instead of ssizetype
-      so these conversions aren't necessary.  */
-   c_strlen_data lendata = { };
-   tree len = c_strlen (src, 0, &lendata, 1);
-   if (len)
-     len = fold_convert_loc (loc, TREE_TYPE (bound), len);
- 
-   if (TREE_CODE (bound) == INTEGER_CST)
-     {
-       if (!len)
- 	return NULL_RTX;
- 
-       len = fold_build2_loc (loc, MIN_EXPR, size_type_node, len, bound);
-       return expand_expr (len, target, target_mode, EXPAND_NORMAL);
-     }
- 
-   if (TREE_CODE (bound) != SSA_NAME)
-     return NULL_RTX;
- 
-   wide_int min, max;
-   enum value_range_kind rng = get_range_info (bound, &min, &max);
-   if (rng != VR_RANGE)
-     return NULL_RTX;
- 
-   if (!len || TREE_CODE (len) != INTEGER_CST)
-     {
-       bool exact;
-       lendata.decl = unterminated_array (src, &len, &exact);
-       if (!lendata.decl)
- 	return NULL_RTX;
-     }
- 
-   if (lendata.decl)
-     return NULL_RTX;
- 
-   if (wi::gtu_p (min, wi::to_wide (len)))
-     return expand_expr (len, target, target_mode, EXPAND_NORMAL);
- 
-   len = fold_build2_loc (loc, MIN_EXPR, TREE_TYPE (len), len, bound);
-   return expand_expr (len, target, target_mode, EXPAND_NORMAL);
- }
- 
- /* Callback routine for store_by_pieces.  Read GET_MODE_BITSIZE (MODE)
-    bytes from bytes at DATA + OFFSET and return it reinterpreted as
-    a target constant.  */
- 
- static rtx
- builtin_memcpy_read_str (void *data, HOST_WIDE_INT offset,
- 			 scalar_int_mode mode)
- {
-   /* The REPresentation pointed to by DATA need not be a nul-terminated
-      string but the caller guarantees it's large enough for MODE.  */
-   const char *rep = (const char *) data;
- 
-   return c_readstr (rep + offset, mode, /*nul_terminated=*/false);
- }
- 
- /* LEN specify length of the block of memcpy/memset operation.
-    Figure out its range and put it into MIN_SIZE/MAX_SIZE. 
-    In some cases we can make very likely guess on max size, then we
-    set it into PROBABLE_MAX_SIZE.  */
- 
- static void
- determine_block_size (tree len, rtx len_rtx,
- 		      unsigned HOST_WIDE_INT *min_size,
- 		      unsigned HOST_WIDE_INT *max_size,
- 		      unsigned HOST_WIDE_INT *probable_max_size)
- {
-   if (CONST_INT_P (len_rtx))
-     {
-       *min_size = *max_size = *probable_max_size = UINTVAL (len_rtx);
-       return;
-     }
-   else
-     {
-       wide_int min, max;
-       enum value_range_kind range_type = VR_UNDEFINED;
- 
-       /* Determine bounds from the type.  */
-       if (tree_fits_uhwi_p (TYPE_MIN_VALUE (TREE_TYPE (len))))
- 	*min_size = tree_to_uhwi (TYPE_MIN_VALUE (TREE_TYPE (len)));
-       else
- 	*min_size = 0;
-       if (tree_fits_uhwi_p (TYPE_MAX_VALUE (TREE_TYPE (len))))
- 	*probable_max_size = *max_size
- 	  = tree_to_uhwi (TYPE_MAX_VALUE (TREE_TYPE (len)));
-       else
- 	*probable_max_size = *max_size = GET_MODE_MASK (GET_MODE (len_rtx));
- 
-       if (TREE_CODE (len) == SSA_NAME)
- 	range_type = get_range_info (len, &min, &max);
-       if (range_type == VR_RANGE)
- 	{
- 	  if (wi::fits_uhwi_p (min) && *min_size < min.to_uhwi ())
- 	    *min_size = min.to_uhwi ();
- 	  if (wi::fits_uhwi_p (max) && *max_size > max.to_uhwi ())
- 	    *probable_max_size = *max_size = max.to_uhwi ();
- 	}
-       else if (range_type == VR_ANTI_RANGE)
- 	{
- 	  /* Code like
- 
- 	     int n;
- 	     if (n < 100)
- 	       memcpy (a, b, n)
- 
- 	     Produce anti range allowing negative values of N.  We still
- 	     can use the information and make a guess that N is not negative.
- 	     */
- 	  if (!wi::leu_p (max, 1 << 30) && wi::fits_uhwi_p (min))
- 	    *probable_max_size = min.to_uhwi () - 1;
- 	}
-     }
-   gcc_checking_assert (*max_size <=
- 		       (unsigned HOST_WIDE_INT)
- 			  GET_MODE_MASK (GET_MODE (len_rtx)));
- }
- 
- /* Issue a warning OPT for a bounded call EXP with a bound in RANGE
-    accessing an object with SIZE.  */
- 
- static bool
- maybe_warn_for_bound (int opt, location_t loc, tree exp, tree func,
- 		      tree bndrng[2], tree size, const access_data *pad = NULL)
- {
-   if (!bndrng[0] || TREE_NO_WARNING (exp))
-     return false;
- 
-   tree maxobjsize = max_object_size ();
- 
-   bool warned = false;
- 
-   if (opt == OPT_Wstringop_overread)
-     {
-       bool maybe = pad && pad->src.phi ();
- 
-       if (tree_int_cst_lt (maxobjsize, bndrng[0]))
- 	{
- 	  if (bndrng[0] == bndrng[1])
- 	    warned = (func
- 		      ? warning_at (loc, opt,
- 				    (maybe
- 				     ? G_("%K%qD specified bound %E may "
- 					  "exceed maximum object size %E")
- 				     : G_("%K%qD specified bound %E "
- 					  "exceeds maximum object size %E")),
- 				    exp, func, bndrng[0], maxobjsize)
- 		      : warning_at (loc, opt,
- 				    (maybe
- 				     ? G_("%Kspecified bound %E may "
- 					  "exceed maximum object size %E")
- 				     : G_("%Kspecified bound %E "
- 					  "exceeds maximum object size %E")),
- 				    exp, bndrng[0], maxobjsize));
- 	  else
- 	    warned = (func
- 		      ? warning_at (loc, opt,
- 				    (maybe
- 				     ? G_("%K%qD specified bound [%E, %E] may "
- 					  "exceed maximum object size %E")
- 				     : G_("%K%qD specified bound [%E, %E] "
- 					  "exceeds maximum object size %E")),
- 				    exp, func,
- 				    bndrng[0], bndrng[1], maxobjsize)
- 		      : warning_at (loc, opt,
- 				    (maybe
- 				     ? G_("%Kspecified bound [%E, %E] may "
- 					  "exceed maximum object size %E")
- 				     : G_("%Kspecified bound [%E, %E] "
- 					  "exceeds maximum object size %E")),
- 				    exp, bndrng[0], bndrng[1], maxobjsize));
- 	}
-       else if (!size || tree_int_cst_le (bndrng[0], size))
- 	return false;
-       else if (tree_int_cst_equal (bndrng[0], bndrng[1]))
- 	warned = (func
- 		  ? warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%K%qD specified bound %E may exceed "
- 				      "source size %E")
- 				 : G_("%K%qD specified bound %E exceeds "
- 				      "source size %E")),
- 				exp, func, bndrng[0], size)
- 		  : warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%Kspecified bound %E may exceed "
- 				      "source size %E")
- 				 : G_("%Kspecified bound %E exceeds "
- 				      "source size %E")),
- 				exp, bndrng[0], size));
-       else
- 	warned = (func
- 		  ? warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%K%qD specified bound [%E, %E] may "
- 				      "exceed source size %E")
- 				 : G_("%K%qD specified bound [%E, %E] exceeds "
- 				      "source size %E")),
- 				exp, func, bndrng[0], bndrng[1], size)
- 		  : warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%Kspecified bound [%E, %E] may exceed "
- 				      "source size %E")
- 				 : G_("%Kspecified bound [%E, %E] exceeds "
- 				      "source size %E")),
- 				exp, bndrng[0], bndrng[1], size));
-       if (warned)
- 	{
- 	  if (pad && pad->src.ref)
- 	    {
- 	      if (DECL_P (pad->src.ref))
- 		inform (DECL_SOURCE_LOCATION (pad->src.ref),
- 			"source object declared here");
- 	      else if (EXPR_HAS_LOCATION (pad->src.ref))
- 		inform (EXPR_LOCATION (pad->src.ref),
- 			"source object allocated here");
- 	    }
- 	  TREE_NO_WARNING (exp) = true;
- 	}
- 
-       return warned;
-     }
- 
-   bool maybe = pad && pad->dst.phi ();
-   if (tree_int_cst_lt (maxobjsize, bndrng[0]))
-     {
-       if (bndrng[0] == bndrng[1])
- 	warned = (func
- 		  ? warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%K%qD specified size %E may "
- 				      "exceed maximum object size %E")
- 				 : G_("%K%qD specified size %E "
- 				      "exceeds maximum object size %E")),
- 				exp, func, bndrng[0], maxobjsize)
- 		  : warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%Kspecified size %E may exceed "
- 				      "maximum object size %E")
- 				 : G_("%Kspecified size %E exceeds "
- 				      "maximum object size %E")),
- 				exp, bndrng[0], maxobjsize));
-       else
- 	warned = (func
- 		  ? warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%K%qD specified size between %E and %E "
- 				      "may exceed maximum object size %E")
- 				 : G_("%K%qD specified size between %E and %E "
- 				      "exceeds maximum object size %E")),
- 				exp, func,
- 				bndrng[0], bndrng[1], maxobjsize)
- 		  : warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%Kspecified size between %E and %E "
- 				      "may exceed maximum object size %E")
- 				 : G_("%Kspecified size between %E and %E "
- 				      "exceeds maximum object size %E")),
- 				exp, bndrng[0], bndrng[1], maxobjsize));
-     }
-   else if (!size || tree_int_cst_le (bndrng[0], size))
-     return false;
-   else if (tree_int_cst_equal (bndrng[0], bndrng[1]))
-     warned = (func
- 	      ? warning_at (loc, OPT_Wstringop_overflow_,
- 			    (maybe
- 			     ? G_("%K%qD specified bound %E may exceed "
- 				  "destination size %E")
- 			     : G_("%K%qD specified bound %E exceeds "
- 				  "destination size %E")),
- 			    exp, func, bndrng[0], size)
- 	      : warning_at (loc, OPT_Wstringop_overflow_,
- 			    (maybe
- 			     ? G_("%Kspecified bound %E may exceed "
- 				  "destination size %E")
- 			     : G_("%Kspecified bound %E exceeds "
- 				  "destination size %E")),
- 			    exp, bndrng[0], size));
-   else
-     warned = (func
- 	      ? warning_at (loc, OPT_Wstringop_overflow_,
- 			    (maybe
- 			     ? G_("%K%qD specified bound [%E, %E] may exceed "
- 				  "destination size %E")
- 			     : G_("%K%qD specified bound [%E, %E] exceeds "
- 				  "destination size %E")),
- 			    exp, func, bndrng[0], bndrng[1], size)
- 	      : warning_at (loc, OPT_Wstringop_overflow_,
- 			    (maybe
- 			     ? G_("%Kspecified bound [%E, %E] exceeds "
- 				  "destination size %E")
- 			     : G_("%Kspecified bound [%E, %E] exceeds "
- 				  "destination size %E")),
- 			    exp, bndrng[0], bndrng[1], size));
- 
-   if (warned)
-     {
-       if (pad && pad->dst.ref)
- 	{
- 	  if (DECL_P (pad->dst.ref))
- 	    inform (DECL_SOURCE_LOCATION (pad->dst.ref),
- 		    "destination object declared here");
- 	  else if (EXPR_HAS_LOCATION (pad->dst.ref))
- 	    inform (EXPR_LOCATION (pad->dst.ref),
- 		    "destination object allocated here");
- 	}
-       TREE_NO_WARNING (exp) = true;
-     }
- 
-   return warned;
- }
- 
- /* For an expression EXP issue an access warning controlled by option OPT
-    with access to a region SIZE bytes in size in the RANGE of sizes.
-    WRITE is true for a write access, READ for a read access, neither for
-    call that may or may not perform an access but for which the range
-    is expected to valid.
-    Returns true when a warning has been issued.  */
- 
- static bool
- warn_for_access (location_t loc, tree func, tree exp, int opt, tree range[2],
- 		 tree size, bool write, bool read, bool maybe)
- {
-   bool warned = false;
- 
-   if (write && read)
-     {
-       if (tree_int_cst_equal (range[0], range[1]))
- 	warned = (func
- 		  ? warning_n (loc, opt, tree_to_uhwi (range[0]),
- 			       (maybe
- 				? G_("%K%qD may access %E byte in a region "
- 				     "of size %E")
- 				: G_("%K%qD accessing %E byte in a region "
- 				     "of size %E")),
- 				(maybe
- 				 ? G_ ("%K%qD may access %E bytes in a region "
- 				       "of size %E")
- 				 : G_ ("%K%qD accessing %E bytes in a region "
- 				       "of size %E")),
- 			       exp, func, range[0], size)
- 		  : warning_n (loc, opt, tree_to_uhwi (range[0]),
- 			       (maybe
- 				? G_("%Kmay access %E byte in a region "
- 				     "of size %E")
- 				: G_("%Kaccessing %E byte in a region "
- 				     "of size %E")),
- 			       (maybe
- 				? G_("%Kmay access %E bytes in a region "
- 				     "of size %E")
- 				: G_("%Kaccessing %E bytes in a region "
- 				     "of size %E")),
- 			       exp, range[0], size));
-       else if (tree_int_cst_sign_bit (range[1]))
- 	{
- 	  /* Avoid printing the upper bound if it's invalid.  */
- 	  warned = (func
- 		    ? warning_at (loc, opt,
- 				  (maybe
- 				   ? G_("%K%qD may access %E or more bytes "
- 					"in a region of size %E")
- 				   : G_("%K%qD accessing %E or more bytes "
- 					"in a region of size %E")),
- 				  exp, func, range[0], size)
- 		    : warning_at (loc, opt,
- 				  (maybe
- 				   ? G_("%Kmay access %E or more bytes "
- 					"in a region of size %E")
- 				   : G_("%Kaccessing %E or more bytes "
- 					"in a region of size %E")),
- 				  exp, range[0], size));
- 	}
-       else
- 	warned = (func
- 		  ? warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%K%qD may access between %E and %E "
- 				      "bytes in a region of size %E")
- 				 : G_("%K%qD accessing between %E and %E "
- 				      "bytes in a region of size %E")),
- 				exp, func, range[0], range[1],
- 				size)
- 		  : warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%Kmay access between %E and %E bytes "
- 				      "in a region of size %E")
- 				 : G_("%Kaccessing between %E and %E bytes "
- 				      "in a region of size %E")),
- 				exp, range[0], range[1],
- 				size));
-       return warned;
-     }
- 
-   if (write)
-     {
-       if (tree_int_cst_equal (range[0], range[1]))
- 	warned = (func
- 		  ? warning_n (loc, opt, tree_to_uhwi (range[0]),
- 			       (maybe
- 				? G_("%K%qD may write %E byte into a region "
- 				     "of size %E")
- 				: G_("%K%qD writing %E byte into a region "
- 				     "of size %E overflows the destination")),
- 			       (maybe
- 				? G_("%K%qD may write %E bytes into a region "
- 				     "of size %E")
- 				: G_("%K%qD writing %E bytes into a region "
- 				     "of size %E overflows the destination")),
- 			       exp, func, range[0], size)
- 		  : warning_n (loc, opt, tree_to_uhwi (range[0]),
- 			       (maybe
- 				? G_("%Kmay write %E byte into a region "
- 				     "of size %E")
- 				: G_("%Kwriting %E byte into a region "
- 				     "of size %E overflows the destination")),
- 			       (maybe
- 				? G_("%Kmay write %E bytes into a region "
- 				     "of size %E")
- 				: G_("%Kwriting %E bytes into a region "
- 				     "of size %E overflows the destination")),
- 			       exp, range[0], size));
-       else if (tree_int_cst_sign_bit (range[1]))
- 	{
- 	  /* Avoid printing the upper bound if it's invalid.  */
- 	  warned = (func
- 		    ? warning_at (loc, opt,
- 				  (maybe
- 				   ? G_("%K%qD may write %E or more bytes "
- 					"into a region of size %E")
- 				   : G_("%K%qD writing %E or more bytes "
- 					"into a region of size %E overflows "
- 					"the destination")),
- 				  exp, func, range[0], size)
- 		    : warning_at (loc, opt,
- 				  (maybe
- 				   ? G_("%Kmay write %E or more bytes into "
- 					"a region of size %E")
- 				   : G_("%Kwriting %E or more bytes into "
- 					"a region of size %E overflows "
- 					"the destination")),
- 				  exp, range[0], size));
- 	}
-       else
- 	warned = (func
- 		  ? warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%K%qD may write between %E and %E bytes "
- 				      "into a region of size %E")
- 				 : G_("%K%qD writing between %E and %E bytes "
- 				      "into a region of size %E overflows "
- 				      "the destination")),
- 				exp, func, range[0], range[1],
- 				size)
- 		  : warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%Kmay write between %E and %E bytes "
- 				      "into a region of size %E")
- 				 : G_("%Kwriting between %E and %E bytes "
- 				      "into a region of size %E overflows "
- 				      "the destination")),
- 				exp, range[0], range[1],
- 				size));
-       return warned;
-     }
- 
-   if (read)
-     {
-       if (tree_int_cst_equal (range[0], range[1]))
- 	warned = (func
- 		  ? warning_n (loc, OPT_Wstringop_overread,
- 			       tree_to_uhwi (range[0]),
- 			       (maybe
- 				? G_("%K%qD may read %E byte from a region "
- 				     "of size %E")
- 				: G_("%K%qD reading %E byte from a region "
- 				     "of size %E")),
- 			       (maybe
- 				? G_("%K%qD may read %E bytes from a region "
- 				     "of size %E")
- 				: G_("%K%qD reading %E bytes from a region "
- 				     "of size %E")),
- 			       exp, func, range[0], size)
- 		  : warning_n (loc, OPT_Wstringop_overread,
- 			       tree_to_uhwi (range[0]),
- 			       (maybe
- 				? G_("%Kmay read %E byte from a region "
- 				     "of size %E")
- 				: G_("%Kreading %E byte from a region "
- 				     "of size %E")),
- 			       (maybe
- 				? G_("%Kmay read %E bytes from a region "
- 				     "of size %E")
- 				: G_("%Kreading %E bytes from a region "
- 				     "of size %E")),
- 			       exp, range[0], size));
-       else if (tree_int_cst_sign_bit (range[1]))
- 	{
- 	  /* Avoid printing the upper bound if it's invalid.  */
- 	  warned = (func
- 		    ? warning_at (loc, OPT_Wstringop_overread,
- 				  (maybe
- 				   ? G_("%K%qD may read %E or more bytes "
- 					"from a region of size %E")
- 				   : G_("%K%qD reading %E or more bytes "
- 					"from a region of size %E")),
- 				  exp, func, range[0], size)
- 		    : warning_at (loc, OPT_Wstringop_overread,
- 				  (maybe
- 				   ? G_("%Kmay read %E or more bytes "
- 					"from a region of size %E")
- 				   : G_("%Kreading %E or more bytes "
- 					"from a region of size %E")),
- 				  exp, range[0], size));
- 	}
-       else
- 	warned = (func
- 		  ? warning_at (loc, OPT_Wstringop_overread,
- 				(maybe
- 				 ? G_("%K%qD may read between %E and %E bytes "
- 				      "from a region of size %E")
- 				 : G_("%K%qD reading between %E and %E bytes "
- 				      "from a region of size %E")),
- 				exp, func, range[0], range[1], size)
- 		  : warning_at (loc, opt,
- 				(maybe
- 				 ? G_("%Kmay read between %E and %E bytes "
- 				      "from a region of size %E")
- 				 : G_("%Kreading between %E and %E bytes "
- 				      "from a region of size %E")),
- 				exp, range[0], range[1], size));
- 
-       if (warned)
- 	TREE_NO_WARNING (exp) = true;
- 
-       return warned;
-     }
- 
-   if (tree_int_cst_equal (range[0], range[1])
-       || tree_int_cst_sign_bit (range[1]))
-     warned = (func
- 	      ? warning_n (loc, OPT_Wstringop_overread,
- 			   tree_to_uhwi (range[0]),
- 			   "%K%qD expecting %E byte in a region of size %E",
- 			   "%K%qD expecting %E bytes in a region of size %E",
- 			   exp, func, range[0], size)
- 	      : warning_n (loc, OPT_Wstringop_overread,
- 			   tree_to_uhwi (range[0]),
- 			   "%Kexpecting %E byte in a region of size %E",
- 			   "%Kexpecting %E bytes in a region of size %E",
- 			   exp, range[0], size));
-   else if (tree_int_cst_sign_bit (range[1]))
-     {
-       /* Avoid printing the upper bound if it's invalid.  */
-       warned = (func
- 		? warning_at (loc, OPT_Wstringop_overread,
- 			      "%K%qD expecting %E or more bytes in a region "
- 			      "of size %E",
- 			      exp, func, range[0], size)
- 		: warning_at (loc, OPT_Wstringop_overread,
- 			      "%Kexpecting %E or more bytes in a region "
- 			      "of size %E",
- 			      exp, range[0], size));
-     }
-   else
-     warned = (func
- 	      ? warning_at (loc, OPT_Wstringop_overread,
- 			    "%K%qD expecting between %E and %E bytes in "
- 			    "a region of size %E",
- 			    exp, func, range[0], range[1], size)
- 	      : warning_at (loc, OPT_Wstringop_overread,
- 			    "%Kexpecting between %E and %E bytes in "
- 			    "a region of size %E",
- 			    exp, range[0], range[1], size));
- 
-   if (warned)
-     TREE_NO_WARNING (exp) = true;
- 
-   return warned;
- }
- 
- /* Issue one inform message describing each target of an access REF.
-    WRITE is set for a write access and clear for a read access.  */
- 
- void
- access_ref::inform_access (access_mode mode) const
- {
-   const access_ref &aref = *this;
-   if (!aref.ref)
-     return;
- 
-   if (aref.phi ())
-     {
-       /* Set MAXREF to refer to the largest object and fill ALL_REFS
- 	 with data for all objects referenced by the PHI arguments.  */
-       access_ref maxref;
-       auto_vec<access_ref> all_refs;
-       if (!get_ref (&all_refs, &maxref))
- 	return;
- 
-       /* Except for MAXREF, the rest of the arguments' offsets need not
- 	 reflect one added to the PHI itself.  Determine the latter from
- 	 MAXREF on which the result is based.  */
-       const offset_int orng[] =
- 	{
- 	  offrng[0] - maxref.offrng[0],
- 	  wi::smax (offrng[1] - maxref.offrng[1], offrng[0]),
- 	};
- 
-       /* Add the final PHI's offset to that of each of the arguments
- 	 and recurse to issue an inform message for it.  */
-       for (unsigned i = 0; i != all_refs.length (); ++i)
- 	{
- 	  /* Skip any PHIs; those could lead to infinite recursion.  */
- 	  if (all_refs[i].phi ())
- 	    continue;
- 
- 	  all_refs[i].add_offset (orng[0], orng[1]);
- 	  all_refs[i].inform_access (mode);
- 	}
-       return;
-     }
- 
-   /* Convert offset range and avoid including a zero range since it
-      isn't necessarily meaningful.  */
-   HOST_WIDE_INT diff_min = tree_to_shwi (TYPE_MIN_VALUE (ptrdiff_type_node));
-   HOST_WIDE_INT diff_max = tree_to_shwi (TYPE_MAX_VALUE (ptrdiff_type_node));
-   HOST_WIDE_INT minoff;
-   HOST_WIDE_INT maxoff = diff_max;
-   if (wi::fits_shwi_p (aref.offrng[0]))
-     minoff = aref.offrng[0].to_shwi ();
-   else
-     minoff = aref.offrng[0] < 0 ? diff_min : diff_max;
- 
-   if (wi::fits_shwi_p (aref.offrng[1]))
-     maxoff = aref.offrng[1].to_shwi ();
- 
-   if (maxoff <= diff_min || maxoff >= diff_max)
-     /* Avoid mentioning an upper bound that's equal to or in excess
-        of the maximum of ptrdiff_t.  */
-     maxoff = minoff;
- 
-   /* Convert size range and always include it since all sizes are
-      meaningful. */
-   unsigned long long minsize = 0, maxsize = 0;
-   if (wi::fits_shwi_p (aref.sizrng[0])
-       && wi::fits_shwi_p (aref.sizrng[1]))
-     {
-       minsize = aref.sizrng[0].to_shwi ();
-       maxsize = aref.sizrng[1].to_shwi ();
-     }
- 
-   /* SIZRNG doesn't necessarily have the same range as the allocation
-      size determined by gimple_call_alloc_size ().  */
-   char sizestr[80];
-   if (minsize == maxsize)
-     sprintf (sizestr, "%llu", minsize);
-   else
-     sprintf (sizestr, "[%llu, %llu]", minsize, maxsize);
- 
-   char offstr[80];
-   if (minoff == 0
-       && (maxoff == 0 || aref.sizrng[1] <= maxoff))
-     offstr[0] = '\0';
-   else if (minoff == maxoff)
-     sprintf (offstr, "%lli", (long long) minoff);
-   else
-     sprintf (offstr, "[%lli, %lli]", (long long) minoff, (long long) maxoff);
- 
-   location_t loc = UNKNOWN_LOCATION;
- 
-   tree ref = this->ref;
-   tree allocfn = NULL_TREE;
-   if (TREE_CODE (ref) == SSA_NAME)
-     {
-       gimple *stmt = SSA_NAME_DEF_STMT (ref);
-       if (is_gimple_call (stmt))
- 	{
- 	  loc = gimple_location (stmt);
- 	  if (gimple_call_builtin_p (stmt, BUILT_IN_ALLOCA_WITH_ALIGN))
- 	    {
- 	      /* Strip the SSA_NAME suffix from the variable name and
- 		 recreate an identifier with the VLA's original name.  */
- 	      ref = gimple_call_lhs (stmt);
- 	      if (SSA_NAME_IDENTIFIER (ref))
- 		{
- 		  ref = SSA_NAME_IDENTIFIER (ref);
- 		  const char *id = IDENTIFIER_POINTER (ref);
- 		  size_t len = strcspn (id, ".$");
- 		  if (!len)
- 		    len = strlen (id);
- 		  ref = get_identifier_with_length (id, len);
- 		}
- 	    }
- 	  else
- 	    {
- 	      /* Except for VLAs, retrieve the allocation function.  */
- 	      allocfn = gimple_call_fndecl (stmt);
- 	      if (!allocfn)
- 		allocfn = gimple_call_fn (stmt);
- 	      if (TREE_CODE (allocfn) == SSA_NAME)
- 		{
- 		  /* For an ALLOC_CALL via a function pointer make a small
- 		     effort to determine the destination of the pointer.  */
- 		  gimple *def = SSA_NAME_DEF_STMT (allocfn);
- 		  if (gimple_assign_single_p (def))
- 		    {
- 		      tree rhs = gimple_assign_rhs1 (def);
- 		      if (DECL_P (rhs))
- 			allocfn = rhs;
- 		      else if (TREE_CODE (rhs) == COMPONENT_REF)
- 			allocfn = TREE_OPERAND (rhs, 1);
- 		    }
- 		}
- 	    }
- 	}
-       else if (gimple_nop_p (stmt))
- 	/* Handle DECL_PARM below.  */
- 	ref = SSA_NAME_VAR (ref);
-     }
- 
-   if (DECL_P (ref))
-     loc = DECL_SOURCE_LOCATION (ref);
-   else if (EXPR_P (ref) && EXPR_HAS_LOCATION (ref))
-     loc = EXPR_LOCATION (ref);
-   else if (TREE_CODE (ref) != IDENTIFIER_NODE
- 	   && TREE_CODE (ref) != SSA_NAME)
-     return;
- 
-   if (mode == access_read_write || mode == access_write_only)
-     {
-       if (allocfn == NULL_TREE)
- 	{
- 	  if (*offstr)
- 	    inform (loc, "at offset %s into destination object %qE of size %s",
- 		    offstr, ref, sizestr);
- 	  else
- 	    inform (loc, "destination object %qE of size %s", ref, sizestr);
- 	  return;
- 	}
- 
-       if (*offstr)
- 	inform (loc,
- 		"at offset %s into destination object of size %s "
- 		"allocated by %qE", offstr, sizestr, allocfn);
-       else
- 	inform (loc, "destination object of size %s allocated by %qE",
- 		sizestr, allocfn);
-       return;
-     }
- 
-   if (allocfn == NULL_TREE)
-     {
-       if (*offstr)
- 	inform (loc, "at offset %s into source object %qE of size %s",
- 		offstr, ref, sizestr);
-       else
- 	inform (loc, "source object %qE of size %s", ref, sizestr);
- 
-       return;
-     }
- 
-   if (*offstr)
-     inform (loc,
- 	    "at offset %s into source object of size %s allocated by %qE",
- 	    offstr, sizestr, allocfn);
-   else
-     inform (loc, "source object of size %s allocated by %qE",
- 	    sizestr, allocfn);
- }
- 
- /* Helper to set RANGE to the range of BOUND if it's nonnull, bounded
-    by BNDRNG if nonnull and valid.  */
- 
- static void
- get_size_range (tree bound, tree range[2], const offset_int bndrng[2])
- {
-   if (bound)
-     get_size_range (bound, range);
- 
-   if (!bndrng || (bndrng[0] == 0 && bndrng[1] == HOST_WIDE_INT_M1U))
-     return;
- 
-   if (range[0] && TREE_CODE (range[0]) == INTEGER_CST)
-     {
-       offset_int r[] =
- 	{ wi::to_offset (range[0]), wi::to_offset (range[1]) };
-       if (r[0] < bndrng[0])
- 	range[0] = wide_int_to_tree (sizetype, bndrng[0]);
-       if (bndrng[1] < r[1])
- 	range[1] = wide_int_to_tree (sizetype, bndrng[1]);
-     }
-   else
-     {
-       range[0] = wide_int_to_tree (sizetype, bndrng[0]);
-       range[1] = wide_int_to_tree (sizetype, bndrng[1]);
-     }
- }
- 
- /* Try to verify that the sizes and lengths of the arguments to a string
-    manipulation function given by EXP are within valid bounds and that
-    the operation does not lead to buffer overflow or read past the end.
-    Arguments other than EXP may be null.  When non-null, the arguments
-    have the following meaning:
-    DST is the destination of a copy call or NULL otherwise.
-    SRC is the source of a copy call or NULL otherwise.
-    DSTWRITE is the number of bytes written into the destination obtained
-    from the user-supplied size argument to the function (such as in
-    memcpy(DST, SRCs, DSTWRITE) or strncpy(DST, DRC, DSTWRITE).
-    MAXREAD is the user-supplied bound on the length of the source sequence
-    (such as in strncat(d, s, N).  It specifies the upper limit on the number
-    of bytes to write.  If NULL, it's taken to be the same as DSTWRITE.
-    SRCSTR is the source string (such as in strcpy(DST, SRC)) when the
-    expression EXP is a string function call (as opposed to a memory call
-    like memcpy).  As an exception, SRCSTR can also be an integer denoting
-    the precomputed size of the source string or object (for functions like
-    memcpy).
-    DSTSIZE is the size of the destination object.
- 
-    When DSTWRITE is null LEN is checked to verify that it doesn't exceed
-    SIZE_MAX.
- 
-    WRITE is true for write accesses, READ is true for reads.  Both are
-    false for simple size checks in calls to functions that neither read
-    from nor write to the region.
- 
-    When nonnull, PAD points to a more detailed description of the access.
- 
-    If the call is successfully verified as safe return true, otherwise
-    return false.  */
- 
- bool
- check_access (tree exp, tree dstwrite,
- 	      tree maxread, tree srcstr, tree dstsize,
- 	      access_mode mode, const access_data *pad /* = NULL */)
- {
-   /* The size of the largest object is half the address space, or
-      PTRDIFF_MAX.  (This is way too permissive.)  */
-   tree maxobjsize = max_object_size ();
- 
-   /* Either an approximate/minimum the length of the source string for
-      string functions or the size of the source object for raw memory
-      functions.  */
-   tree slen = NULL_TREE;
- 
-   /* The range of the access in bytes; first set to the write access
-      for functions that write and then read for those that also (or
-      just) read.  */
-   tree range[2] = { NULL_TREE, NULL_TREE };
- 
-   /* Set to true when the exact number of bytes written by a string
-      function like strcpy is not known and the only thing that is
-      known is that it must be at least one (for the terminating nul).  */
-   bool at_least_one = false;
-   if (srcstr)
-     {
-       /* SRCSTR is normally a pointer to string but as a special case
- 	 it can be an integer denoting the length of a string.  */
-       if (POINTER_TYPE_P (TREE_TYPE (srcstr)))
- 	{
- 	  if (!check_nul_terminated_array (exp, srcstr, maxread))
- 	    return false;
- 	  /* Try to determine the range of lengths the source string
- 	     refers to.  If it can be determined and is less than
- 	     the upper bound given by MAXREAD add one to it for
- 	     the terminating nul.  Otherwise, set it to one for
- 	     the same reason, or to MAXREAD as appropriate.  */
- 	  c_strlen_data lendata = { };
- 	  get_range_strlen (srcstr, &lendata, /* eltsize = */ 1);
- 	  range[0] = lendata.minlen;
- 	  range[1] = lendata.maxbound ? lendata.maxbound : lendata.maxlen;
- 	  if (range[0]
- 	      && TREE_CODE (range[0]) == INTEGER_CST
- 	      && TREE_CODE (range[1]) == INTEGER_CST
- 	      && (!maxread || TREE_CODE (maxread) == INTEGER_CST))
- 	    {
- 	      if (maxread && tree_int_cst_le (maxread, range[0]))
- 		range[0] = range[1] = maxread;
- 	      else
- 		range[0] = fold_build2 (PLUS_EXPR, size_type_node,
- 					range[0], size_one_node);
- 
- 	      if (maxread && tree_int_cst_le (maxread, range[1]))
- 		range[1] = maxread;
- 	      else if (!integer_all_onesp (range[1]))
- 		range[1] = fold_build2 (PLUS_EXPR, size_type_node,
- 					range[1], size_one_node);
- 
- 	      slen = range[0];
- 	    }
- 	  else
- 	    {
- 	      at_least_one = true;
- 	      slen = size_one_node;
- 	    }
- 	}
-       else
- 	slen = srcstr;
-     }
- 
-   if (!dstwrite && !maxread)
-     {
-       /* When the only available piece of data is the object size
- 	 there is nothing to do.  */
-       if (!slen)
- 	return true;
- 
-       /* Otherwise, when the length of the source sequence is known
- 	 (as with strlen), set DSTWRITE to it.  */
-       if (!range[0])
- 	dstwrite = slen;
-     }
- 
-   if (!dstsize)
-     dstsize = maxobjsize;
- 
-   /* Set RANGE to that of DSTWRITE if non-null, bounded by PAD->DST.BNDRNG
-      if valid.  */
-   get_size_range (dstwrite, range, pad ? pad->dst.bndrng : NULL);
- 
-   tree func = get_callee_fndecl (exp);
-   /* Read vs write access by built-ins can be determined from the const
-      qualifiers on the pointer argument.  In the absence of attribute
-      access, non-const qualified pointer arguments to user-defined
-      functions are assumed to both read and write the objects.  */
-   const bool builtin = func ? fndecl_built_in_p (func) : false;
- 
-   /* First check the number of bytes to be written against the maximum
-      object size.  */
-   if (range[0]
-       && TREE_CODE (range[0]) == INTEGER_CST
-       && tree_int_cst_lt (maxobjsize, range[0]))
-     {
-       location_t loc = tree_inlined_location (exp);
-       maybe_warn_for_bound (OPT_Wstringop_overflow_, loc, exp, func, range,
- 			    NULL_TREE, pad);
-       return false;
-     }
- 
-   /* The number of bytes to write is "exact" if DSTWRITE is non-null,
-      constant, and in range of unsigned HOST_WIDE_INT.  */
-   bool exactwrite = dstwrite && tree_fits_uhwi_p (dstwrite);
- 
-   /* Next check the number of bytes to be written against the destination
-      object size.  */
-   if (range[0] || !exactwrite || integer_all_onesp (dstwrite))
-     {
-       if (range[0]
- 	  && TREE_CODE (range[0]) == INTEGER_CST
- 	  && ((tree_fits_uhwi_p (dstsize)
- 	       && tree_int_cst_lt (dstsize, range[0]))
- 	      || (dstwrite
- 		  && tree_fits_uhwi_p (dstwrite)
- 		  && tree_int_cst_lt (dstwrite, range[0]))))
- 	{
- 	  if (TREE_NO_WARNING (exp)
- 	      || (pad && pad->dst.ref && TREE_NO_WARNING (pad->dst.ref)))
- 	    return false;
- 
- 	  location_t loc = tree_inlined_location (exp);
- 	  bool warned = false;
- 	  if (dstwrite == slen && at_least_one)
- 	    {
- 	      /* This is a call to strcpy with a destination of 0 size
- 		 and a source of unknown length.  The call will write
- 		 at least one byte past the end of the destination.  */
- 	      warned = (func
- 			? warning_at (loc, OPT_Wstringop_overflow_,
- 				      "%K%qD writing %E or more bytes into "
- 				      "a region of size %E overflows "
- 				      "the destination",
- 				      exp, func, range[0], dstsize)
- 			: warning_at (loc, OPT_Wstringop_overflow_,
- 				      "%Kwriting %E or more bytes into "
- 				      "a region of size %E overflows "
- 				      "the destination",
- 				      exp, range[0], dstsize));
- 	    }
- 	  else
- 	    {
- 	      const bool read
- 		= mode == access_read_only || mode == access_read_write;
- 	      const bool write
- 		= mode == access_write_only || mode == access_read_write;
- 	      const bool maybe = pad && pad->dst.parmarray;
- 	      warned = warn_for_access (loc, func, exp,
- 					OPT_Wstringop_overflow_,
- 					range, dstsize,
- 					write, read && !builtin, maybe);
- 	    }
- 
- 	  if (warned)
- 	    {
- 	      TREE_NO_WARNING (exp) = true;
- 	      if (pad)
- 		pad->dst.inform_access (pad->mode);
- 	    }
- 
- 	  /* Return error when an overflow has been detected.  */
- 	  return false;
- 	}
-     }
- 
-   /* Check the maximum length of the source sequence against the size
-      of the destination object if known, or against the maximum size
-      of an object.  */
-   if (maxread)
-     {
-       /* Set RANGE to that of MAXREAD, bounded by PAD->SRC.BNDRNG if
- 	 PAD is nonnull and BNDRNG is valid.  */
-       get_size_range (maxread, range, pad ? pad->src.bndrng : NULL);
- 
-       location_t loc = tree_inlined_location (exp);
-       tree size = dstsize;
-       if (pad && pad->mode == access_read_only)
- 	size = wide_int_to_tree (sizetype, pad->src.sizrng[1]);
- 
-       if (range[0] && maxread && tree_fits_uhwi_p (size))
- 	{
- 	  if (tree_int_cst_lt (maxobjsize, range[0]))
- 	    {
- 	      maybe_warn_for_bound (OPT_Wstringop_overread, loc, exp, func,
- 				    range, size, pad);
- 	      return false;
- 	    }
- 
- 	  if (size != maxobjsize && tree_int_cst_lt (size, range[0]))
- 	    {
- 	      int opt = (dstwrite || mode != access_read_only
- 			 ? OPT_Wstringop_overflow_
- 			 : OPT_Wstringop_overread);
- 	      maybe_warn_for_bound (opt, loc, exp, func, range, size, pad);
- 	      return false;
- 	    }
- 	}
- 
-       maybe_warn_nonstring_arg (func, exp);
-     }
- 
-   /* Check for reading past the end of SRC.  */
-   bool overread = (slen
- 		   && slen == srcstr
- 		   && dstwrite
- 		   && range[0]
- 		   && TREE_CODE (slen) == INTEGER_CST
- 		   && tree_int_cst_lt (slen, range[0]));
-   /* If none is determined try to get a better answer based on the details
-      in PAD.  */
-   if (!overread
-       && pad
-       && pad->src.sizrng[1] >= 0
-       && pad->src.offrng[0] >= 0
-       && (pad->src.offrng[1] < 0
- 	  || pad->src.offrng[0] <= pad->src.offrng[1]))
-     {
-       /* Set RANGE to that of MAXREAD, bounded by PAD->SRC.BNDRNG if
- 	 PAD is nonnull and BNDRNG is valid.  */
-       get_size_range (maxread, range, pad ? pad->src.bndrng : NULL);
-       /* Set OVERREAD for reads starting just past the end of an object.  */
-       overread = pad->src.sizrng[1] - pad->src.offrng[0] < pad->src.bndrng[0];
-       range[0] = wide_int_to_tree (sizetype, pad->src.bndrng[0]);
-       slen = size_zero_node;
-     }
- 
-   if (overread)
-     {
-       if (TREE_NO_WARNING (exp)
- 	  || (srcstr && TREE_NO_WARNING (srcstr))
- 	  || (pad && pad->src.ref && TREE_NO_WARNING (pad->src.ref)))
- 	return false;
- 
-       location_t loc = tree_inlined_location (exp);
-       const bool read
- 	= mode == access_read_only || mode == access_read_write;
-       const bool maybe = pad && pad->dst.parmarray;
-       if (warn_for_access (loc, func, exp, OPT_Wstringop_overread, range,
- 			   slen, false, read, maybe))
- 	{
- 	  TREE_NO_WARNING (exp) = true;
- 	  if (pad)
- 	    pad->src.inform_access (access_read_only);
- 	}
-       return false;
-     }
- 
-   return true;
- }
- 
- /* A convenience wrapper for check_access above to check access
-    by a read-only function like puts.  */
- 
- static bool
- check_read_access (tree exp, tree src, tree bound /* = NULL_TREE */,
- 		   int ost /* = 1 */)
- {
-   if (!warn_stringop_overread)
-     return true;
- 
-   if (bound && !useless_type_conversion_p (size_type_node, TREE_TYPE (bound)))
-     bound = fold_convert (size_type_node, bound);
-   access_data data (exp, access_read_only, NULL_TREE, false, bound, true);
-   compute_objsize (src, ost, &data.src);
-   return check_access (exp, /*dstwrite=*/ NULL_TREE, /*maxread=*/ bound,
- 		       /*srcstr=*/ src, /*dstsize=*/ NULL_TREE, data.mode,
- 		       &data);
- }
- 
- /* If STMT is a call to an allocation function, returns the constant
-    maximum size of the object allocated by the call represented as
-    sizetype.  If nonnull, sets RNG1[] to the range of the size.
-    When nonnull, uses RVALS for range information, otherwise calls
-    get_range_info to get it.
-    Returns null when STMT is not a call to a valid allocation function.  */
- 
- tree
- gimple_call_alloc_size (gimple *stmt, wide_int rng1[2] /* = NULL */,
- 			range_query * /* = NULL */)
- {
-   if (!stmt || !is_gimple_call (stmt))
-     return NULL_TREE;
- 
-   tree allocfntype;
-   if (tree fndecl = gimple_call_fndecl (stmt))
-     allocfntype = TREE_TYPE (fndecl);
-   else
-     allocfntype = gimple_call_fntype (stmt);
- 
-   if (!allocfntype)
-     return NULL_TREE;
- 
-   unsigned argidx1 = UINT_MAX, argidx2 = UINT_MAX;
-   tree at = lookup_attribute ("alloc_size", TYPE_ATTRIBUTES (allocfntype));
-   if (!at)
-     {
-       if (!gimple_call_builtin_p (stmt, BUILT_IN_ALLOCA_WITH_ALIGN))
- 	return NULL_TREE;
- 
-       argidx1 = 0;
-     }
- 
-   unsigned nargs = gimple_call_num_args (stmt);
- 
-   if (argidx1 == UINT_MAX)
-     {
-       tree atval = TREE_VALUE (at);
-       if (!atval)
- 	return NULL_TREE;
- 
-       argidx1 = TREE_INT_CST_LOW (TREE_VALUE (atval)) - 1;
-       if (nargs <= argidx1)
- 	return NULL_TREE;
- 
-       atval = TREE_CHAIN (atval);
-       if (atval)
- 	{
- 	  argidx2 = TREE_INT_CST_LOW (TREE_VALUE (atval)) - 1;
- 	  if (nargs <= argidx2)
- 	    return NULL_TREE;
- 	}
-     }
- 
-   tree size = gimple_call_arg (stmt, argidx1);
- 
-   wide_int rng1_buf[2];
-   /* If RNG1 is not set, use the buffer.  */
-   if (!rng1)
-     rng1 = rng1_buf;
- 
-   /* Use maximum precision to avoid overflow below.  */
-   const int prec = ADDR_MAX_PRECISION;
- 
-   {
-     tree r[2];
-     /* Determine the largest valid range size, including zero.  */
-     if (!get_size_range (size, r, SR_ALLOW_ZERO | SR_USE_LARGEST))
-       return NULL_TREE;
-     rng1[0] = wi::to_wide (r[0], prec);
-     rng1[1] = wi::to_wide (r[1], prec);
-   }
- 
-   if (argidx2 > nargs && TREE_CODE (size) == INTEGER_CST)
-     return fold_convert (sizetype, size);
- 
-   /* To handle ranges do the math in wide_int and return the product
-      of the upper bounds as a constant.  Ignore anti-ranges.  */
-   tree n = argidx2 < nargs ? gimple_call_arg (stmt, argidx2) : integer_one_node;
-   wide_int rng2[2];
-   {
-     tree r[2];
-       /* As above, use the full non-negative range on failure.  */
-     if (!get_size_range (n, r, SR_ALLOW_ZERO | SR_USE_LARGEST))
-       return NULL_TREE;
-     rng2[0] = wi::to_wide (r[0], prec);
-     rng2[1] = wi::to_wide (r[1], prec);
-   }
- 
-   /* Compute products of both bounds for the caller but return the lesser
-      of SIZE_MAX and the product of the upper bounds as a constant.  */
-   rng1[0] = rng1[0] * rng2[0];
-   rng1[1] = rng1[1] * rng2[1];
- 
-   const tree size_max = TYPE_MAX_VALUE (sizetype);
-   if (wi::gtu_p (rng1[1], wi::to_wide (size_max, prec)))
-     {
-       rng1[1] = wi::to_wide (size_max, prec);
-       return size_max;
-     }
- 
-   return wide_int_to_tree (sizetype, rng1[1]);
- }
- 
- /* For an access to an object referenced to by the function parameter PTR
-    of pointer type, and set RNG[] to the range of sizes of the object
-    obtainedfrom the attribute access specification for the current function.
-    Set STATIC_ARRAY if the array parameter has been declared [static].
-    Return the function parameter on success and null otherwise.  */
- 
- tree
- gimple_parm_array_size (tree ptr, wide_int rng[2],
- 			bool *static_array /* = NULL */)
- {
-   /* For a function argument try to determine the byte size of the array
-      from the current function declaratation (e.g., attribute access or
-      related).  */
-   tree var = SSA_NAME_VAR (ptr);
-   if (TREE_CODE (var) != PARM_DECL)
-     return NULL_TREE;
- 
-   const unsigned prec = TYPE_PRECISION (sizetype);
- 
-   rdwr_map rdwr_idx;
-   attr_access *access = get_parm_access (rdwr_idx, var);
-   if (!access)
-     return NULL_TREE;
- 
-   if (access->sizarg != UINT_MAX)
-     {
-       /* TODO: Try to extract the range from the argument based on
- 	 those of subsequent assertions or based on known calls to
- 	 the current function.  */
-       return NULL_TREE;
-     }
- 
-   if (!access->minsize)
-     return NULL_TREE;
- 
-   /* Only consider ordinary array bound at level 2 (or above if it's
-      ever added).  */
-   if (warn_array_parameter < 2 && !access->static_p)
-     return NULL_TREE;
- 
-   if (static_array)
-     *static_array = access->static_p;
- 
-   rng[0] = wi::zero (prec);
-   rng[1] = wi::uhwi (access->minsize, prec);
-   /* Multiply the array bound encoded in the attribute by the size
-      of what the pointer argument to which it decays points to.  */
-   tree eltype = TREE_TYPE (TREE_TYPE (ptr));
-   tree size = TYPE_SIZE_UNIT (eltype);
-   if (!size || TREE_CODE (size) != INTEGER_CST)
-     return NULL_TREE;
- 
-   rng[1] *= wi::to_wide (size, prec);
-   return var;
- }
- 
- /* Wrapper around the wide_int overload of get_range that accepts
-    offset_int instead.  For middle end expressions returns the same
-    result.  For a subset of nonconstamt expressions emitted by the front
-    end determines a more precise range than would be possible otherwise.  */
- 
- static bool
- get_offset_range (tree x, gimple *stmt, offset_int r[2], range_query *rvals)
- {
-   offset_int add = 0;
-   if (TREE_CODE (x) == PLUS_EXPR)
-     {
-       /* Handle constant offsets in pointer addition expressions seen
- 	 n the front end IL.  */
-       tree op = TREE_OPERAND (x, 1);
-       if (TREE_CODE (op) == INTEGER_CST)
- 	{
- 	  op = fold_convert (signed_type_for (TREE_TYPE (op)), op);
- 	  add = wi::to_offset (op);
- 	  x = TREE_OPERAND (x, 0);
- 	}
-     }
- 
-   if (TREE_CODE (x) == NOP_EXPR)
-     /* Also handle conversions to sizetype seen in the front end IL.  */
-     x = TREE_OPERAND (x, 0);
- 
-   tree type = TREE_TYPE (x);
-   if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
-     return false;
- 
-    if (TREE_CODE (x) != INTEGER_CST
-       && TREE_CODE (x) != SSA_NAME)
-     {
-       if (TYPE_UNSIGNED (type)
- 	  && TYPE_PRECISION (type) == TYPE_PRECISION (sizetype))
- 	type = signed_type_for (type);
- 
-       r[0] = wi::to_offset (TYPE_MIN_VALUE (type)) + add;
-       r[1] = wi::to_offset (TYPE_MAX_VALUE (type)) + add;
-       return x;
-     }
- 
-   wide_int wr[2];
-   if (!get_range (x, stmt, wr, rvals))
-     return false;
- 
-   signop sgn = SIGNED;
-   /* Only convert signed integers or unsigned sizetype to a signed
-      offset and avoid converting large positive values in narrower
-      types to negative offsets.  */
-   if (TYPE_UNSIGNED (type)
-       && wr[0].get_precision () < TYPE_PRECISION (sizetype))
-     sgn = UNSIGNED;
- 
-   r[0] = offset_int::from (wr[0], sgn);
-   r[1] = offset_int::from (wr[1], sgn);
-   return true;
- }
- 
- /* Return the argument that the call STMT to a built-in function returns
-    or null if it doesn't.  On success, set OFFRNG[] to the range of offsets
-    from the argument reflected in the value returned by the built-in if it
-    can be determined, otherwise to 0 and HWI_M1U respectively.  */
- 
- static tree
- gimple_call_return_array (gimple *stmt, offset_int offrng[2],
- 			  range_query *rvals)
- {
-   {
-     /* Check for attribute fn spec to see if the function returns one
-        of its arguments.  */
-     attr_fnspec fnspec = gimple_call_fnspec (as_a <gcall *>(stmt));
-     unsigned int argno;
-     if (fnspec.returns_arg (&argno))
-       {
- 	offrng[0] = offrng[1] = 0;
- 	return gimple_call_arg (stmt, argno);
-       }
-   }
- 
-   if (gimple_call_num_args (stmt) < 1)
-     return NULL_TREE;
- 
-   tree fn = gimple_call_fndecl (stmt);
-   if (!gimple_call_builtin_p (stmt, BUILT_IN_NORMAL))
-     {
-       /* See if this is a call to placement new.  */
-       if (!fn
- 	  || !DECL_IS_OPERATOR_NEW_P (fn)
- 	  || DECL_IS_REPLACEABLE_OPERATOR_NEW_P (fn))
- 	return NULL_TREE;
- 
-       /* Check the mangling, keeping in mind that operator new takes
- 	 a size_t which could be unsigned int or unsigned long.  */
-       tree fname = DECL_ASSEMBLER_NAME (fn);
-       if (!id_equal (fname, "_ZnwjPv")       // ordinary form
- 	  && !id_equal (fname, "_ZnwmPv")    // ordinary form
- 	  && !id_equal (fname, "_ZnajPv")    // array form
- 	  && !id_equal (fname, "_ZnamPv"))   // array form
- 	return NULL_TREE;
- 
-       if (gimple_call_num_args (stmt) != 2)
- 	return NULL_TREE;
- 
-       offrng[0] = offrng[1] = 0;
-       return gimple_call_arg (stmt, 1);
-     }
- 
-   switch (DECL_FUNCTION_CODE (fn))
-     {
-     case BUILT_IN_MEMCPY:
-     case BUILT_IN_MEMCPY_CHK:
-     case BUILT_IN_MEMMOVE:
-     case BUILT_IN_MEMMOVE_CHK:
-     case BUILT_IN_MEMSET:
-     case BUILT_IN_STPCPY:
-     case BUILT_IN_STPCPY_CHK:
-     case BUILT_IN_STPNCPY:
-     case BUILT_IN_STPNCPY_CHK:
-     case BUILT_IN_STRCAT:
-     case BUILT_IN_STRCAT_CHK:
-     case BUILT_IN_STRCPY:
-     case BUILT_IN_STRCPY_CHK:
-     case BUILT_IN_STRNCAT:
-     case BUILT_IN_STRNCAT_CHK:
-     case BUILT_IN_STRNCPY:
-     case BUILT_IN_STRNCPY_CHK:
-       offrng[0] = offrng[1] = 0;
-       return gimple_call_arg (stmt, 0);
- 
-     case BUILT_IN_MEMPCPY:
-     case BUILT_IN_MEMPCPY_CHK:
-       {
- 	tree off = gimple_call_arg (stmt, 2);
- 	if (!get_offset_range (off, stmt, offrng, rvals))
- 	  {
- 	    offrng[0] = 0;
- 	    offrng[1] = HOST_WIDE_INT_M1U;
- 	  }
- 	return gimple_call_arg (stmt, 0);
-       }
- 
-     case BUILT_IN_MEMCHR:
-       {
- 	tree off = gimple_call_arg (stmt, 2);
- 	if (get_offset_range (off, stmt, offrng, rvals))
- 	  offrng[0] = 0;
- 	else
- 	  {
- 	    offrng[0] = 0;
- 	    offrng[1] = HOST_WIDE_INT_M1U;
- 	  }
- 	return gimple_call_arg (stmt, 0);
-       }
- 
-     case BUILT_IN_STRCHR:
-     case BUILT_IN_STRRCHR:
-     case BUILT_IN_STRSTR:
-       {
- 	offrng[0] = 0;
- 	offrng[1] = HOST_WIDE_INT_M1U;
-       }
-       return gimple_call_arg (stmt, 0);
- 
-     default:
-       break;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* A helper of compute_objsize_r() to determine the size from an assignment
-    statement STMT with the RHS of either MIN_EXPR or MAX_EXPR.  */
- 
- static bool
- handle_min_max_size (gimple *stmt, int ostype, access_ref *pref,
- 		     ssa_name_limit_t &snlim, pointer_query *qry)
- {
-   tree_code code = gimple_assign_rhs_code (stmt);
- 
-   tree ptr = gimple_assign_rhs1 (stmt);
- 
-   /* In a valid MAX_/MIN_EXPR both operands must refer to the same array.
-      Determine the size/offset of each and use the one with more or less
-      space remaining, respectively.  If either fails, use the information
-      determined from the other instead, adjusted up or down as appropriate
-      for the expression.  */
-   access_ref aref[2] = { *pref, *pref };
-   if (!compute_objsize_r (ptr, ostype, &aref[0], snlim, qry))
-     {
-       aref[0].base0 = false;
-       aref[0].offrng[0] = aref[0].offrng[1] = 0;
-       aref[0].add_max_offset ();
-       aref[0].set_max_size_range ();
-     }
- 
-   ptr = gimple_assign_rhs2 (stmt);
-   if (!compute_objsize_r (ptr, ostype, &aref[1], snlim, qry))
-     {
-       aref[1].base0 = false;
-       aref[1].offrng[0] = aref[1].offrng[1] = 0;
-       aref[1].add_max_offset ();
-       aref[1].set_max_size_range ();
-     }
- 
-   if (!aref[0].ref && !aref[1].ref)
-     /* Fail if the identity of neither argument could be determined.  */
-     return false;
- 
-   bool i0 = false;
-   if (aref[0].ref && aref[0].base0)
-     {
-       if (aref[1].ref && aref[1].base0)
- 	{
- 	  /* If the object referenced by both arguments has been determined
- 	     set *PREF to the one with more or less space remainng, whichever
- 	     is appopriate for CODE.
- 	     TODO: Indicate when the objects are distinct so it can be
- 	     diagnosed.  */
- 	  i0 = code == MAX_EXPR;
- 	  const bool i1 = !i0;
- 
- 	  if (aref[i0].size_remaining () < aref[i1].size_remaining ())
- 	    *pref = aref[i1];
- 	  else
- 	    *pref = aref[i0];
- 	  return true;
- 	}
- 
-       /* If only the object referenced by one of the arguments could be
- 	 determined, use it and...  */
-       *pref = aref[0];
-       i0 = true;
-     }
-   else
-     *pref = aref[1];
- 
-   const bool i1 = !i0;
-   /* ...see if the offset obtained from the other pointer can be used
-      to tighten up the bound on the offset obtained from the first.  */
-   if ((code == MAX_EXPR && aref[i1].offrng[1] < aref[i0].offrng[0])
-       || (code == MIN_EXPR && aref[i0].offrng[0] < aref[i1].offrng[1]))
-     {
-       pref->offrng[0] = aref[i0].offrng[0];
-       pref->offrng[1] = aref[i0].offrng[1];
-     }
-   return true;
- }
- 
- /* A helper of compute_objsize_r() to determine the size from ARRAY_REF
-    AREF.  ADDR is true if PTR is the operand of ADDR_EXPR.  Return true
-    on success and false on failure.  */
- 
- static bool
- handle_array_ref (tree aref, bool addr, int ostype, access_ref *pref,
- 		  ssa_name_limit_t &snlim, pointer_query *qry)
- {
-   gcc_assert (TREE_CODE (aref) == ARRAY_REF);
- 
-   ++pref->deref;
- 
-   tree arefop = TREE_OPERAND (aref, 0);
-   tree reftype = TREE_TYPE (arefop);
-   if (!addr && TREE_CODE (TREE_TYPE (reftype)) == POINTER_TYPE)
-     /* Avoid arrays of pointers.  FIXME: Hande pointers to arrays
-        of known bound.  */
-     return false;
- 
-   if (!compute_objsize_r (arefop, ostype, pref, snlim, qry))
-     return false;
- 
-   offset_int orng[2];
-   tree off = pref->eval (TREE_OPERAND (aref, 1));
-   range_query *const rvals = qry ? qry->rvals : NULL;
-   if (!get_offset_range (off, NULL, orng, rvals))
-     {
-       /* Set ORNG to the maximum offset representable in ptrdiff_t.  */
-       orng[1] = wi::to_offset (TYPE_MAX_VALUE (ptrdiff_type_node));
-       orng[0] = -orng[1] - 1;
-     }
- 
-   /* Convert the array index range determined above to a byte
-      offset.  */
-   tree lowbnd = array_ref_low_bound (aref);
-   if (!integer_zerop (lowbnd) && tree_fits_uhwi_p (lowbnd))
-     {
-       /* Adjust the index by the low bound of the array domain
- 	 (normally zero but 1 in Fortran).  */
-       unsigned HOST_WIDE_INT lb = tree_to_uhwi (lowbnd);
-       orng[0] -= lb;
-       orng[1] -= lb;
-     }
- 
-   tree eltype = TREE_TYPE (aref);
-   tree tpsize = TYPE_SIZE_UNIT (eltype);
-   if (!tpsize || TREE_CODE (tpsize) != INTEGER_CST)
-     {
-       pref->add_max_offset ();
-       return true;
-     }
- 
-   offset_int sz = wi::to_offset (tpsize);
-   orng[0] *= sz;
-   orng[1] *= sz;
- 
-   if (ostype && TREE_CODE (eltype) == ARRAY_TYPE)
-     {
-       /* Except for the permissive raw memory functions which use
- 	 the size of the whole object determined above, use the size
- 	 of the referenced array.  Because the overall offset is from
- 	 the beginning of the complete array object add this overall
- 	 offset to the size of array.  */
-       offset_int sizrng[2] =
- 	{
- 	 pref->offrng[0] + orng[0] + sz,
- 	 pref->offrng[1] + orng[1] + sz
- 	};
-       if (sizrng[1] < sizrng[0])
- 	std::swap (sizrng[0], sizrng[1]);
-       if (sizrng[0] >= 0 && sizrng[0] <= pref->sizrng[0])
- 	pref->sizrng[0] = sizrng[0];
-       if (sizrng[1] >= 0 && sizrng[1] <= pref->sizrng[1])
- 	pref->sizrng[1] = sizrng[1];
-     }
- 
-   pref->add_offset (orng[0], orng[1]);
-   return true;
- }
- 
- /* A helper of compute_objsize_r() to determine the size from MEM_REF
-    MREF.  Return true on success and false on failure.  */
- 
- static bool
- handle_mem_ref (tree mref, int ostype, access_ref *pref,
- 		ssa_name_limit_t &snlim, pointer_query *qry)
- {
-   gcc_assert (TREE_CODE (mref) == MEM_REF);
- 
-   ++pref->deref;
- 
-   if (VECTOR_TYPE_P (TREE_TYPE (mref)))
-     {
-       /* Hack: Give up for MEM_REFs of vector types; those may be
- 	 synthesized from multiple assignments to consecutive data
- 	 members (see PR 93200 and 96963).
- 	 FIXME: Vectorized assignments should only be present after
- 	 vectorization so this hack is only necessary after it has
- 	 run and could be avoided in calls from prior passes (e.g.,
- 	 tree-ssa-strlen.c).
- 	 FIXME: Deal with this more generally, e.g., by marking up
- 	 such MEM_REFs at the time they're created.  */
-       return false;
-     }
- 
-   tree mrefop = TREE_OPERAND (mref, 0);
-   if (!compute_objsize_r (mrefop, ostype, pref, snlim, qry))
-     return false;
- 
-   offset_int orng[2];
-   tree off = pref->eval (TREE_OPERAND (mref, 1));
-   range_query *const rvals = qry ? qry->rvals : NULL;
-   if (!get_offset_range (off, NULL, orng, rvals))
-     {
-       /* Set ORNG to the maximum offset representable in ptrdiff_t.  */
-       orng[1] = wi::to_offset (TYPE_MAX_VALUE (ptrdiff_type_node));
-       orng[0] = -orng[1] - 1;
-     }
- 
-   pref->add_offset (orng[0], orng[1]);
-   return true;
- }
- 
- /* Helper to compute the size of the object referenced by the PTR
-    expression which must have pointer type, using Object Size type
-    OSTYPE (only the least significant 2 bits are used).
-    On success, sets PREF->REF to the DECL of the referenced object
-    if it's unique, otherwise to null, PREF->OFFRNG to the range of
-    offsets into it, and PREF->SIZRNG to the range of sizes of
-    the object(s).
-    SNLIM is used to avoid visiting the same PHI operand multiple
-    times, and, when nonnull, RVALS to determine range information.
-    Returns true on success, false when a meaningful size (or range)
-    cannot be determined.
- 
-    The function is intended for diagnostics and should not be used
-    to influence code generation or optimization.  */
- 
- static bool
- compute_objsize_r (tree ptr, int ostype, access_ref *pref,
- 		   ssa_name_limit_t &snlim, pointer_query *qry)
- {
-   STRIP_NOPS (ptr);
- 
-   const bool addr = TREE_CODE (ptr) == ADDR_EXPR;
-   if (addr)
-     {
-       --pref->deref;
-       ptr = TREE_OPERAND (ptr, 0);
-     }
- 
-   if (DECL_P (ptr))
-     {
-       pref->ref = ptr;
- 
-       if (!addr && POINTER_TYPE_P (TREE_TYPE (ptr)))
- 	{
- 	  /* Set the maximum size if the reference is to the pointer
- 	     itself (as opposed to what it points to), and clear
- 	     BASE0 since the offset isn't necessarily zero-based.  */
- 	  pref->set_max_size_range ();
- 	  pref->base0 = false;
- 	  return true;
- 	}
- 
-       if (tree size = decl_init_size (ptr, false))
- 	if (TREE_CODE (size) == INTEGER_CST)
- 	  {
- 	    pref->sizrng[0] = pref->sizrng[1] = wi::to_offset (size);
- 	    return true;
- 	  }
- 
-       pref->set_max_size_range ();
-       return true;
-     }
- 
-   const tree_code code = TREE_CODE (ptr);
-   range_query *const rvals = qry ? qry->rvals : NULL;
- 
-   if (code == BIT_FIELD_REF)
-     {
-       tree ref = TREE_OPERAND (ptr, 0);
-       if (!compute_objsize_r (ref, ostype, pref, snlim, qry))
- 	return false;
- 
-       offset_int off = wi::to_offset (pref->eval (TREE_OPERAND (ptr, 2)));
-       pref->add_offset (off / BITS_PER_UNIT);
-       return true;
-     }
- 
-   if (code == COMPONENT_REF)
-     {
-       tree ref = TREE_OPERAND (ptr, 0);
-       if (TREE_CODE (TREE_TYPE (ref)) == UNION_TYPE)
- 	/* In accesses through union types consider the entire unions
- 	   rather than just their members.  */
- 	ostype = 0;
-       tree field = TREE_OPERAND (ptr, 1);
- 
-       if (ostype == 0)
- 	{
- 	  /* In OSTYPE zero (for raw memory functions like memcpy), use
- 	     the maximum size instead if the identity of the enclosing
- 	     object cannot be determined.  */
- 	  if (!compute_objsize_r (ref, ostype, pref, snlim, qry))
- 	    return false;
- 
- 	  /* Otherwise, use the size of the enclosing object and add
- 	     the offset of the member to the offset computed so far.  */
- 	  tree offset = byte_position (field);
- 	  if (TREE_CODE (offset) == INTEGER_CST)
- 	    pref->add_offset (wi::to_offset (offset));
- 	  else
- 	    pref->add_max_offset ();
- 
- 	  if (!pref->ref)
- 	    /* REF may have been already set to an SSA_NAME earlier
- 	       to provide better context for diagnostics.  In that case,
- 	       leave it unchanged.  */
- 	    pref->ref = ref;
- 	  return true;
- 	}
- 
-       pref->ref = field;
- 
-       if (!addr && POINTER_TYPE_P (TREE_TYPE (field)))
- 	{
- 	  /* Set maximum size if the reference is to the pointer member
- 	     itself (as opposed to what it points to).  */
- 	  pref->set_max_size_range ();
- 	  return true;
- 	}
- 
-       /* SAM is set for array members that might need special treatment.  */
-       special_array_member sam;
-       tree size = component_ref_size (ptr, &sam);
-       if (sam == special_array_member::int_0)
- 	pref->sizrng[0] = pref->sizrng[1] = 0;
-       else if (!pref->trail1special && sam == special_array_member::trail_1)
- 	pref->sizrng[0] = pref->sizrng[1] = 1;
-       else if (size && TREE_CODE (size) == INTEGER_CST)
- 	pref->sizrng[0] = pref->sizrng[1] = wi::to_offset (size);
-       else
- 	{
- 	  /* When the size of the member is unknown it's either a flexible
- 	     array member or a trailing special array member (either zero
- 	     length or one-element).  Set the size to the maximum minus
- 	     the constant size of the type.  */
- 	  pref->sizrng[0] = 0;
- 	  pref->sizrng[1] = wi::to_offset (TYPE_MAX_VALUE (ptrdiff_type_node));
- 	  if (tree recsize = TYPE_SIZE_UNIT (TREE_TYPE (ref)))
- 	    if (TREE_CODE (recsize) == INTEGER_CST)
- 	      pref->sizrng[1] -= wi::to_offset (recsize);
- 	}
-       return true;
-     }
- 
-   if (code == ARRAY_REF)
-     return handle_array_ref (ptr, addr, ostype, pref, snlim, qry);
- 
-   if (code == MEM_REF)
-     return handle_mem_ref (ptr, ostype, pref, snlim, qry);
- 
-   if (code == TARGET_MEM_REF)
-     {
-       tree ref = TREE_OPERAND (ptr, 0);
-       if (!compute_objsize_r (ref, ostype, pref, snlim, qry))
- 	return false;
- 
-       /* TODO: Handle remaining operands.  Until then, add maximum offset.  */
-       pref->ref = ptr;
-       pref->add_max_offset ();
-       return true;
-     }
- 
-   if (code == INTEGER_CST)
-     {
-       /* Pointer constants other than null smaller than param_min_pagesize
- 	 might be the result of erroneous null pointer addition/subtraction.
- 	 Unless zero is a valid address set size to zero.  For null pointers,
- 	 set size to the maximum for now since those may be the result of
- 	 jump threading.  Similarly, for values >= param_min_pagesize in
- 	 order to support (type *) 0x7cdeab00.  */
-       if (integer_zerop (ptr)
- 	  || wi::to_widest (ptr) >= param_min_pagesize)
- 	pref->set_max_size_range ();
-       else
- 	pref->sizrng[0] = pref->sizrng[1] = 0;
-       pref->ref = ptr;
- 
-       return true;
-     }
- 
-   if (code == STRING_CST)
-     {
-       pref->sizrng[0] = pref->sizrng[1] = TREE_STRING_LENGTH (ptr);
-       pref->ref = ptr;
-       return true;
-     }
- 
-   if (code == POINTER_PLUS_EXPR)
-     {
-       tree ref = TREE_OPERAND (ptr, 0);
-       if (!compute_objsize_r (ref, ostype, pref, snlim, qry))
- 	return false;
- 
-       /* Clear DEREF since the offset is being applied to the target
- 	 of the dereference.  */
-       pref->deref = 0;
- 
-       offset_int orng[2];
-       tree off = pref->eval (TREE_OPERAND (ptr, 1));
-       if (get_offset_range (off, NULL, orng, rvals))
- 	pref->add_offset (orng[0], orng[1]);
-       else
- 	pref->add_max_offset ();
-       return true;
-     }
- 
-   if (code == VIEW_CONVERT_EXPR)
-     {
-       ptr = TREE_OPERAND (ptr, 0);
-       return compute_objsize_r (ptr, ostype, pref, snlim, qry);
-     }
- 
-   if (code == SSA_NAME)
-     {
-       if (!snlim.next ())
- 	return false;
- 
-       /* Only process an SSA_NAME if the recursion limit has not yet
- 	 been reached.  */
-       if (qry)
- 	{
- 	  if (++qry->depth)
- 	    qry->max_depth = qry->depth;
- 	  if (const access_ref *cache_ref = qry->get_ref (ptr))
- 	    {
- 	      /* If the pointer is in the cache set *PREF to what it refers
- 		 to and return success.  */
- 	      *pref = *cache_ref;
- 	      return true;
- 	    }
- 	}
- 
-       gimple *stmt = SSA_NAME_DEF_STMT (ptr);
-       if (is_gimple_call (stmt))
- 	{
- 	  /* If STMT is a call to an allocation function get the size
- 	     from its argument(s).  If successful, also set *PREF->REF
- 	     to PTR for the caller to include in diagnostics.  */
- 	  wide_int wr[2];
- 	  if (gimple_call_alloc_size (stmt, wr, rvals))
- 	    {
- 	      pref->ref = ptr;
- 	      pref->sizrng[0] = offset_int::from (wr[0], UNSIGNED);
- 	      pref->sizrng[1] = offset_int::from (wr[1], UNSIGNED);
- 	      /* Constrain both bounds to a valid size.  */
- 	      offset_int maxsize = wi::to_offset (max_object_size ());
- 	      if (pref->sizrng[0] > maxsize)
- 		pref->sizrng[0] = maxsize;
- 	      if (pref->sizrng[1] > maxsize)
- 		pref->sizrng[1] = maxsize;
- 	    }
- 	  else
- 	    {
- 	      /* For functions known to return one of their pointer arguments
- 		 try to determine what the returned pointer points to, and on
- 		 success add OFFRNG which was set to the offset added by
- 		 the function (e.g., memchr) to the overall offset.  */
- 	      offset_int offrng[2];
- 	      if (tree ret = gimple_call_return_array (stmt, offrng, rvals))
- 		{
- 		  if (!compute_objsize_r (ret, ostype, pref, snlim, qry))
- 		    return false;
- 
- 		  /* Cap OFFRNG[1] to at most the remaining size of
- 		     the object.  */
- 		  offset_int remrng[2];
- 		  remrng[1] = pref->size_remaining (remrng);
- 		  if (remrng[1] < offrng[1])
- 		    offrng[1] = remrng[1];
- 		  pref->add_offset (offrng[0], offrng[1]);
- 		}
- 	      else
- 		{
- 		  /* For other calls that might return arbitrary pointers
- 		     including into the middle of objects set the size
- 		     range to maximum, clear PREF->BASE0, and also set
- 		     PREF->REF to include in diagnostics.  */
- 		  pref->set_max_size_range ();
- 		  pref->base0 = false;
- 		  pref->ref = ptr;
- 		}
- 	    }
- 	  qry->put_ref (ptr, *pref);
- 	  return true;
- 	}
- 
-       if (gimple_nop_p (stmt))
- 	{
- 	  /* For a function argument try to determine the byte size
- 	     of the array from the current function declaratation
- 	     (e.g., attribute access or related).  */
- 	  wide_int wr[2];
- 	  bool static_array = false;
- 	  if (tree ref = gimple_parm_array_size (ptr, wr, &static_array))
- 	    {
- 	      pref->parmarray = !static_array;
- 	      pref->sizrng[0] = offset_int::from (wr[0], UNSIGNED);
- 	      pref->sizrng[1] = offset_int::from (wr[1], UNSIGNED);
- 	      pref->ref = ref;
- 	      qry->put_ref (ptr, *pref);
- 	      return true;
- 	    }
- 
- 	  pref->set_max_size_range ();
- 	  pref->base0 = false;
- 	  pref->ref = ptr;
- 	  qry->put_ref (ptr, *pref);
- 	  return true;
- 	}
- 
-       if (gimple_code (stmt) == GIMPLE_PHI)
- 	{
- 	  pref->ref = ptr;
- 	  access_ref phi_ref = *pref;
- 	  if (!pref->get_ref (NULL, &phi_ref, ostype, &snlim, qry))
- 	    return false;
- 	  *pref = phi_ref;
- 	  pref->ref = ptr;
- 	  qry->put_ref (ptr, *pref);
- 	  return true;
- 	}
- 
-       if (!is_gimple_assign (stmt))
- 	{
- 	  /* Clear BASE0 since the assigned pointer might point into
- 	     the middle of the object, set the maximum size range and,
- 	     if the SSA_NAME refers to a function argumnent, set
- 	     PREF->REF to it.  */
- 	  pref->base0 = false;
- 	  pref->set_max_size_range ();
- 	  pref->ref = ptr;
- 	  return true;
- 	}
- 
-       tree_code code = gimple_assign_rhs_code (stmt);
- 
-       if (code == MAX_EXPR || code == MIN_EXPR)
- 	{
- 	  if (!handle_min_max_size (stmt, ostype, pref, snlim, qry))
- 	    return false;
- 	  qry->put_ref (ptr, *pref);
- 	  return true;
- 	}
- 
-       tree rhs = gimple_assign_rhs1 (stmt);
- 
-       if (code == POINTER_PLUS_EXPR
- 	  && TREE_CODE (TREE_TYPE (rhs)) == POINTER_TYPE)
- 	{
- 	  /* Compute the size of the object first. */
- 	  if (!compute_objsize_r (rhs, ostype, pref, snlim, qry))
- 	    return false;
- 
- 	  offset_int orng[2];
- 	  tree off = gimple_assign_rhs2 (stmt);
- 	  if (get_offset_range (off, stmt, orng, rvals))
- 	    pref->add_offset (orng[0], orng[1]);
- 	  else
- 	    pref->add_max_offset ();
- 	  qry->put_ref (ptr, *pref);
- 	  return true;
- 	}
- 
-       if (code == ADDR_EXPR
- 	  || code == SSA_NAME)
- 	return compute_objsize_r (rhs, ostype, pref, snlim, qry);
- 
-       /* (This could also be an assignment from a nonlocal pointer.)  Save
- 	 PTR to mention in diagnostics but otherwise treat it as a pointer
- 	 to an unknown object.  */
-       pref->ref = rhs;
-       pref->base0 = false;
-       pref->set_max_size_range ();
-       return true;
-     }
- 
-   /* Assume all other expressions point into an unknown object
-      of the maximum valid size.  */
-   pref->ref = ptr;
-   pref->base0 = false;
-   pref->set_max_size_range ();
-   if (TREE_CODE (ptr) == SSA_NAME)
-     qry->put_ref (ptr, *pref);
-   return true;
- }
- 
- /* A "public" wrapper around the above.  Clients should use this overload
-    instead.  */
- 
- tree
- compute_objsize (tree ptr, int ostype, access_ref *pref,
- 		 range_query *rvals /* = NULL */)
- {
-   pointer_query qry;
-   qry.rvals = rvals;
-   ssa_name_limit_t snlim;
-   if (!compute_objsize_r (ptr, ostype, pref, snlim, &qry))
-     return NULL_TREE;
- 
-   offset_int maxsize = pref->size_remaining ();
-   if (pref->base0 && pref->offrng[0] < 0 && pref->offrng[1] >= 0)
-     pref->offrng[0] = 0;
-   return wide_int_to_tree (sizetype, maxsize);
- }
- 
- /* Transitional wrapper.  The function should be removed once callers
-    transition to the pointer_query API.  */
- 
- tree
- compute_objsize (tree ptr, int ostype, access_ref *pref, pointer_query *ptr_qry)
- {
-   pointer_query qry;
-   if (ptr_qry)
-     ptr_qry->depth = 0;
-   else
-     ptr_qry = &qry;
- 
-   ssa_name_limit_t snlim;
-   if (!compute_objsize_r (ptr, ostype, pref, snlim, ptr_qry))
-     return NULL_TREE;
- 
-   offset_int maxsize = pref->size_remaining ();
-   if (pref->base0 && pref->offrng[0] < 0 && pref->offrng[1] >= 0)
-     pref->offrng[0] = 0;
-   return wide_int_to_tree (sizetype, maxsize);
- }
- 
- /* Legacy wrapper around the above.  The function should be removed
-    once callers transition to one of the two above.  */
- 
- tree
- compute_objsize (tree ptr, int ostype, tree *pdecl /* = NULL */,
- 		 tree *poff /* = NULL */, range_query *rvals /* = NULL */)
- {
-   /* Set the initial offsets to zero and size to negative to indicate
-      none has been computed yet.  */
-   access_ref ref;
-   tree size = compute_objsize (ptr, ostype, &ref, rvals);
-   if (!size || !ref.base0)
-     return NULL_TREE;
- 
-   if (pdecl)
-     *pdecl = ref.ref;
- 
-   if (poff)
-     *poff = wide_int_to_tree (ptrdiff_type_node, ref.offrng[ref.offrng[0] < 0]);
- 
-   return size;
- }
- 
- /* Helper to determine and check the sizes of the source and the destination
-    of calls to __builtin_{bzero,memcpy,mempcpy,memset} calls.  EXP is the
-    call expression, DEST is the destination argument, SRC is the source
-    argument or null, and LEN is the number of bytes.  Use Object Size type-0
-    regardless of the OPT_Wstringop_overflow_ setting.  Return true on success
-    (no overflow or invalid sizes), false otherwise.  */
- 
- static bool
- check_memop_access (tree exp, tree dest, tree src, tree size)
- {
-   /* For functions like memset and memcpy that operate on raw memory
-      try to determine the size of the largest source and destination
-      object using type-0 Object Size regardless of the object size
-      type specified by the option.  */
-   access_data data (exp, access_read_write);
-   tree srcsize = src ? compute_objsize (src, 0, &data.src) : NULL_TREE;
-   tree dstsize = compute_objsize (dest, 0, &data.dst);
- 
-   return check_access (exp, size, /*maxread=*/NULL_TREE,
- 		       srcsize, dstsize, data.mode, &data);
- }
- 
- /* Validate memchr arguments without performing any expansion.
-    Return NULL_RTX.  */
- 
- static rtx
- expand_builtin_memchr (tree exp, rtx)
- {
-   if (!validate_arglist (exp,
-  			 POINTER_TYPE, INTEGER_TYPE, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree arg1 = CALL_EXPR_ARG (exp, 0);
-   tree len = CALL_EXPR_ARG (exp, 2);
- 
-   check_read_access (exp, arg1, len, 0);
- 
-   return NULL_RTX;
- }
- 
- /* Expand a call EXP to the memcpy builtin.
-    Return NULL_RTX if we failed, the caller should emit a normal call,
-    otherwise try to get the result in TARGET, if convenient (and in
-    mode MODE if that's convenient).  */
- 
- static rtx
- expand_builtin_memcpy (tree exp, rtx target)
- {
-   if (!validate_arglist (exp,
-  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree dest = CALL_EXPR_ARG (exp, 0);
-   tree src = CALL_EXPR_ARG (exp, 1);
-   tree len = CALL_EXPR_ARG (exp, 2);
- 
-   check_memop_access (exp, dest, src, len);
- 
-   return expand_builtin_memory_copy_args (dest, src, len, target, exp,
- 					  /*retmode=*/ RETURN_BEGIN, false);
- }
- 
- /* Check a call EXP to the memmove built-in for validity.
-    Return NULL_RTX on both success and failure.  */
- 
- static rtx
- expand_builtin_memmove (tree exp, rtx target)
- {
-   if (!validate_arglist (exp,
-  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree dest = CALL_EXPR_ARG (exp, 0);
-   tree src = CALL_EXPR_ARG (exp, 1);
-   tree len = CALL_EXPR_ARG (exp, 2);
- 
-   check_memop_access (exp, dest, src, len);
- 
-   return expand_builtin_memory_copy_args (dest, src, len, target, exp,
- 					  /*retmode=*/ RETURN_BEGIN, true);
- }
- 
- /* Expand a call EXP to the mempcpy builtin.
-    Return NULL_RTX if we failed; the caller should emit a normal call,
-    otherwise try to get the result in TARGET, if convenient (and in
-    mode MODE if that's convenient).  */
- 
- static rtx
- expand_builtin_mempcpy (tree exp, rtx target)
- {
-   if (!validate_arglist (exp,
-  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree dest = CALL_EXPR_ARG (exp, 0);
-   tree src = CALL_EXPR_ARG (exp, 1);
-   tree len = CALL_EXPR_ARG (exp, 2);
- 
-   /* Policy does not generally allow using compute_objsize (which
-      is used internally by check_memop_size) to change code generation
-      or drive optimization decisions.
- 
-      In this instance it is safe because the code we generate has
-      the same semantics regardless of the return value of
-      check_memop_sizes.   Exactly the same amount of data is copied
-      and the return value is exactly the same in both cases.
- 
-      Furthermore, check_memop_size always uses mode 0 for the call to
-      compute_objsize, so the imprecise nature of compute_objsize is
-      avoided.  */
- 
-   /* Avoid expanding mempcpy into memcpy when the call is determined
-      to overflow the buffer.  This also prevents the same overflow
-      from being diagnosed again when expanding memcpy.  */
-   if (!check_memop_access (exp, dest, src, len))
-     return NULL_RTX;
- 
-   return expand_builtin_mempcpy_args (dest, src, len,
- 				      target, exp, /*retmode=*/ RETURN_END);
- }
- 
- /* Helper function to do the actual work for expand of memory copy family
-    functions (memcpy, mempcpy, stpcpy).  Expansing should assign LEN bytes
-    of memory from SRC to DEST and assign to TARGET if convenient.  Return
-    value is based on RETMODE argument.  */
- 
- static rtx
- expand_builtin_memory_copy_args (tree dest, tree src, tree len,
- 				 rtx target, tree exp, memop_ret retmode,
- 				 bool might_overlap)
- {
-   unsigned int src_align = get_pointer_alignment (src);
-   unsigned int dest_align = get_pointer_alignment (dest);
-   rtx dest_mem, src_mem, dest_addr, len_rtx;
-   HOST_WIDE_INT expected_size = -1;
-   unsigned int expected_align = 0;
-   unsigned HOST_WIDE_INT min_size;
-   unsigned HOST_WIDE_INT max_size;
-   unsigned HOST_WIDE_INT probable_max_size;
- 
-   bool is_move_done;
- 
-   /* If DEST is not a pointer type, call the normal function.  */
-   if (dest_align == 0)
-     return NULL_RTX;
- 
-   /* If either SRC is not a pointer type, don't do this
-      operation in-line.  */
-   if (src_align == 0)
-     return NULL_RTX;
- 
-   if (currently_expanding_gimple_stmt)
-     stringop_block_profile (currently_expanding_gimple_stmt,
- 			    &expected_align, &expected_size);
- 
-   if (expected_align < dest_align)
-     expected_align = dest_align;
-   dest_mem = get_memory_rtx (dest, len);
-   set_mem_align (dest_mem, dest_align);
-   len_rtx = expand_normal (len);
-   determine_block_size (len, len_rtx, &min_size, &max_size,
- 			&probable_max_size);
- 
-   /* Try to get the byte representation of the constant SRC points to,
-      with its byte size in NBYTES.  */
-   unsigned HOST_WIDE_INT nbytes;
-   const char *rep = getbyterep (src, &nbytes);
- 
-   /* If the function's constant bound LEN_RTX is less than or equal
-      to the byte size of the representation of the constant argument,
-      and if block move would be done by pieces, we can avoid loading
-      the bytes from memory and only store the computed constant.
-      This works in the overlap (memmove) case as well because
-      store_by_pieces just generates a series of stores of constants
-      from the representation returned by getbyterep().  */
-   if (rep
-       && CONST_INT_P (len_rtx)
-       && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= nbytes
-       && can_store_by_pieces (INTVAL (len_rtx), builtin_memcpy_read_str,
- 			      CONST_CAST (char *, rep),
- 			      dest_align, false))
-     {
-       dest_mem = store_by_pieces (dest_mem, INTVAL (len_rtx),
- 				  builtin_memcpy_read_str,
- 				  CONST_CAST (char *, rep),
- 				  dest_align, false, retmode);
-       dest_mem = force_operand (XEXP (dest_mem, 0), target);
-       dest_mem = convert_memory_address (ptr_mode, dest_mem);
-       return dest_mem;
-     }
- 
-   src_mem = get_memory_rtx (src, len);
-   set_mem_align (src_mem, src_align);
- 
-   /* Copy word part most expediently.  */
-   enum block_op_methods method = BLOCK_OP_NORMAL;
-   if (CALL_EXPR_TAILCALL (exp)
-       && (retmode == RETURN_BEGIN || target == const0_rtx))
-     method = BLOCK_OP_TAILCALL;
-   bool use_mempcpy_call = (targetm.libc_has_fast_function (BUILT_IN_MEMPCPY)
- 			   && retmode == RETURN_END
- 			   && !might_overlap
- 			   && target != const0_rtx);
-   if (use_mempcpy_call)
-     method = BLOCK_OP_NO_LIBCALL_RET;
-   dest_addr = emit_block_move_hints (dest_mem, src_mem, len_rtx, method,
- 				     expected_align, expected_size,
- 				     min_size, max_size, probable_max_size,
- 				     use_mempcpy_call, &is_move_done,
- 				     might_overlap);
- 
-   /* Bail out when a mempcpy call would be expanded as libcall and when
-      we have a target that provides a fast implementation
-      of mempcpy routine.  */
-   if (!is_move_done)
-     return NULL_RTX;
- 
-   if (dest_addr == pc_rtx)
-     return NULL_RTX;
- 
-   if (dest_addr == 0)
-     {
-       dest_addr = force_operand (XEXP (dest_mem, 0), target);
-       dest_addr = convert_memory_address (ptr_mode, dest_addr);
-     }
- 
-   if (retmode != RETURN_BEGIN && target != const0_rtx)
-     {
-       dest_addr = gen_rtx_PLUS (ptr_mode, dest_addr, len_rtx);
-       /* stpcpy pointer to last byte.  */
-       if (retmode == RETURN_END_MINUS_ONE)
- 	dest_addr = gen_rtx_MINUS (ptr_mode, dest_addr, const1_rtx);
-     }
- 
-   return dest_addr;
- }
- 
- static rtx
- expand_builtin_mempcpy_args (tree dest, tree src, tree len,
- 			     rtx target, tree orig_exp, memop_ret retmode)
- {
-   return expand_builtin_memory_copy_args (dest, src, len, target, orig_exp,
- 					  retmode, false);
- }
- 
- /* Expand into a movstr instruction, if one is available.  Return NULL_RTX if
-    we failed, the caller should emit a normal call, otherwise try to
-    get the result in TARGET, if convenient.
-    Return value is based on RETMODE argument.  */
- 
- static rtx
- expand_movstr (tree dest, tree src, rtx target, memop_ret retmode)
- {
-   class expand_operand ops[3];
-   rtx dest_mem;
-   rtx src_mem;
- 
-   if (!targetm.have_movstr ())
-     return NULL_RTX;
- 
-   dest_mem = get_memory_rtx (dest, NULL);
-   src_mem = get_memory_rtx (src, NULL);
-   if (retmode == RETURN_BEGIN)
-     {
-       target = force_reg (Pmode, XEXP (dest_mem, 0));
-       dest_mem = replace_equiv_address (dest_mem, target);
-     }
- 
-   create_output_operand (&ops[0],
- 			 retmode != RETURN_BEGIN ? target : NULL_RTX, Pmode);
-   create_fixed_operand (&ops[1], dest_mem);
-   create_fixed_operand (&ops[2], src_mem);
-   if (!maybe_expand_insn (targetm.code_for_movstr, 3, ops))
-     return NULL_RTX;
- 
-   if (retmode != RETURN_BEGIN && target != const0_rtx)
-     {
-       target = ops[0].value;
-       /* movstr is supposed to set end to the address of the NUL
- 	 terminator.  If the caller requested a mempcpy-like return value,
- 	 adjust it.  */
-       if (retmode == RETURN_END)
- 	{
- 	  rtx tem = plus_constant (GET_MODE (target),
- 				   gen_lowpart (GET_MODE (target), target), 1);
- 	  emit_move_insn (target, force_operand (tem, NULL_RTX));
- 	}
-     }
-   return target;
- }
- 
- /* Do some very basic size validation of a call to the strcpy builtin
-    given by EXP.  Return NULL_RTX to have the built-in expand to a call
-    to the library function.  */
- 
- static rtx
- expand_builtin_strcat (tree exp)
- {
-   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)
-       || !warn_stringop_overflow)
-     return NULL_RTX;
- 
-   tree dest = CALL_EXPR_ARG (exp, 0);
-   tree src = CALL_EXPR_ARG (exp, 1);
- 
-   /* There is no way here to determine the length of the string in
-      the destination to which the SRC string is being appended so
-      just diagnose cases when the souce string is longer than
-      the destination object.  */
-   access_data data (exp, access_read_write, NULL_TREE, true,
- 		    NULL_TREE, true);
-   const int ost = warn_stringop_overflow ? warn_stringop_overflow - 1 : 1;
-   compute_objsize (src, ost, &data.src);
-   tree destsize = compute_objsize (dest, ost, &data.dst);
- 
-   check_access (exp, /*dstwrite=*/NULL_TREE, /*maxread=*/NULL_TREE,
- 		src, destsize, data.mode, &data);
- 
-   return NULL_RTX;
- }
- 
- /* Expand expression EXP, which is a call to the strcpy builtin.  Return
-    NULL_RTX if we failed the caller should emit a normal call, otherwise
-    try to get the result in TARGET, if convenient (and in mode MODE if that's
-    convenient).  */
- 
- static rtx
- expand_builtin_strcpy (tree exp, rtx target)
- {
-   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree dest = CALL_EXPR_ARG (exp, 0);
-   tree src = CALL_EXPR_ARG (exp, 1);
- 
-   if (warn_stringop_overflow)
-     {
-       access_data data (exp, access_read_write, NULL_TREE, true,
- 			NULL_TREE, true);
-       const int ost = warn_stringop_overflow ? warn_stringop_overflow - 1 : 1;
-       compute_objsize (src, ost, &data.src);
-       tree dstsize = compute_objsize (dest, ost, &data.dst);
-       check_access (exp, /*dstwrite=*/ NULL_TREE,
- 		    /*maxread=*/ NULL_TREE, /*srcstr=*/ src,
- 		    dstsize, data.mode, &data);
-     }
- 
-   if (rtx ret = expand_builtin_strcpy_args (exp, dest, src, target))
-     {
-       /* Check to see if the argument was declared attribute nonstring
- 	 and if so, issue a warning since at this point it's not known
- 	 to be nul-terminated.  */
-       tree fndecl = get_callee_fndecl (exp);
-       maybe_warn_nonstring_arg (fndecl, exp);
-       return ret;
-     }
- 
-   return NULL_RTX;
- }
- 
- /* Helper function to do the actual work for expand_builtin_strcpy.  The
-    arguments to the builtin_strcpy call DEST and SRC are broken out
-    so that this can also be called without constructing an actual CALL_EXPR.
-    The other arguments and return value are the same as for
-    expand_builtin_strcpy.  */
- 
- static rtx
- expand_builtin_strcpy_args (tree exp, tree dest, tree src, rtx target)
- {
-   /* Detect strcpy calls with unterminated arrays..  */
-   tree size;
-   bool exact;
-   if (tree nonstr = unterminated_array (src, &size, &exact))
-     {
-       /* NONSTR refers to the non-nul terminated constant array.  */
-       warn_string_no_nul (EXPR_LOCATION (exp), exp, NULL, src, nonstr,
- 			  size, exact);
-       return NULL_RTX;
-     }
- 
-   return expand_movstr (dest, src, target, /*retmode=*/ RETURN_BEGIN);
- }
- 
- /* Expand a call EXP to the stpcpy builtin.
-    Return NULL_RTX if we failed the caller should emit a normal call,
-    otherwise try to get the result in TARGET, if convenient (and in
-    mode MODE if that's convenient).  */
- 
- static rtx
- expand_builtin_stpcpy_1 (tree exp, rtx target, machine_mode mode)
- {
-   tree dst, src;
-   location_t loc = EXPR_LOCATION (exp);
- 
-   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   dst = CALL_EXPR_ARG (exp, 0);
-   src = CALL_EXPR_ARG (exp, 1);
- 
-   if (warn_stringop_overflow)
-     {
-       access_data data (exp, access_read_write);
-       tree destsize = compute_objsize (dst, warn_stringop_overflow - 1,
- 				       &data.dst);
-       check_access (exp, /*dstwrite=*/NULL_TREE, /*maxread=*/NULL_TREE,
- 		    src, destsize, data.mode, &data);
-     }
- 
-   /* If return value is ignored, transform stpcpy into strcpy.  */
-   if (target == const0_rtx && builtin_decl_implicit (BUILT_IN_STRCPY))
-     {
-       tree fn = builtin_decl_implicit (BUILT_IN_STRCPY);
-       tree result = build_call_nofold_loc (loc, fn, 2, dst, src);
-       return expand_expr (result, target, mode, EXPAND_NORMAL);
-     }
-   else
-     {
-       tree len, lenp1;
-       rtx ret;
- 
-       /* Ensure we get an actual string whose length can be evaluated at
- 	 compile-time, not an expression containing a string.  This is
- 	 because the latter will potentially produce pessimized code
- 	 when used to produce the return value.  */
-       c_strlen_data lendata = { };
-       if (!c_getstr (src)
- 	  || !(len = c_strlen (src, 0, &lendata, 1)))
- 	return expand_movstr (dst, src, target,
- 			      /*retmode=*/ RETURN_END_MINUS_ONE);
- 
-       if (lendata.decl)
- 	warn_string_no_nul (EXPR_LOCATION (exp), exp, NULL, src, lendata.decl);
- 
-       lenp1 = size_binop_loc (loc, PLUS_EXPR, len, ssize_int (1));
-       ret = expand_builtin_mempcpy_args (dst, src, lenp1,
- 					 target, exp,
- 					 /*retmode=*/ RETURN_END_MINUS_ONE);
- 
-       if (ret)
- 	return ret;
- 
-       if (TREE_CODE (len) == INTEGER_CST)
- 	{
- 	  rtx len_rtx = expand_normal (len);
- 
- 	  if (CONST_INT_P (len_rtx))
- 	    {
- 	      ret = expand_builtin_strcpy_args (exp, dst, src, target);
- 
- 	      if (ret)
- 		{
- 		  if (! target)
- 		    {
- 		      if (mode != VOIDmode)
- 			target = gen_reg_rtx (mode);
- 		      else
- 			target = gen_reg_rtx (GET_MODE (ret));
- 		    }
- 		  if (GET_MODE (target) != GET_MODE (ret))
- 		    ret = gen_lowpart (GET_MODE (target), ret);
- 
- 		  ret = plus_constant (GET_MODE (ret), ret, INTVAL (len_rtx));
- 		  ret = emit_move_insn (target, force_operand (ret, NULL_RTX));
- 		  gcc_assert (ret);
- 
- 		  return target;
- 		}
- 	    }
- 	}
- 
-       return expand_movstr (dst, src, target,
- 			    /*retmode=*/ RETURN_END_MINUS_ONE);
-     }
- }
- 
- /* Expand a call EXP to the stpcpy builtin and diagnose uses of nonstring
-    arguments while being careful to avoid duplicate warnings (which could
-    be issued if the expander were to expand the call, resulting in it
-    being emitted in expand_call().  */
- 
- static rtx
- expand_builtin_stpcpy (tree exp, rtx target, machine_mode mode)
- {
-   if (rtx ret = expand_builtin_stpcpy_1 (exp, target, mode))
-     {
-       /* The call has been successfully expanded.  Check for nonstring
- 	 arguments and issue warnings as appropriate.  */
-       maybe_warn_nonstring_arg (get_callee_fndecl (exp), exp);
-       return ret;
-     }
- 
-   return NULL_RTX;
- }
- 
- /* Check a call EXP to the stpncpy built-in for validity.
-    Return NULL_RTX on both success and failure.  */
- 
- static rtx
- expand_builtin_stpncpy (tree exp, rtx)
- {
-   if (!validate_arglist (exp,
- 			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)
-       || !warn_stringop_overflow)
-     return NULL_RTX;
- 
-   /* The source and destination of the call.  */
-   tree dest = CALL_EXPR_ARG (exp, 0);
-   tree src = CALL_EXPR_ARG (exp, 1);
- 
-   /* The exact number of bytes to write (not the maximum).  */
-   tree len = CALL_EXPR_ARG (exp, 2);
-   access_data data (exp, access_read_write);
-   /* The size of the destination object.  */
-   tree destsize = compute_objsize (dest, warn_stringop_overflow - 1, &data.dst);
-   check_access (exp, len, /*maxread=*/len, src, destsize, data.mode, &data);
-   return NULL_RTX;
- }
- 
- /* Callback routine for store_by_pieces.  Read GET_MODE_BITSIZE (MODE)
-    bytes from constant string DATA + OFFSET and return it as target
-    constant.  */
- 
- rtx
- builtin_strncpy_read_str (void *data, HOST_WIDE_INT offset,
- 			  scalar_int_mode mode)
- {
-   const char *str = (const char *) data;
- 
-   if ((unsigned HOST_WIDE_INT) offset > strlen (str))
-     return const0_rtx;
- 
-   return c_readstr (str + offset, mode);
- }
- 
- /* Helper to check the sizes of sequences and the destination of calls
-    to __builtin_strncat and __builtin___strncat_chk.  Returns true on
-    success (no overflow or invalid sizes), false otherwise.  */
- 
- static bool
- check_strncat_sizes (tree exp, tree objsize)
- {
-   tree dest = CALL_EXPR_ARG (exp, 0);
-   tree src = CALL_EXPR_ARG (exp, 1);
-   tree maxread = CALL_EXPR_ARG (exp, 2);
- 
-   /* Try to determine the range of lengths that the source expression
-      refers to.  */
-   c_strlen_data lendata = { };
-   get_range_strlen (src, &lendata, /* eltsize = */ 1);
- 
-   /* Try to verify that the destination is big enough for the shortest
-      string.  */
- 
-   access_data data (exp, access_read_write, maxread, true);
-   if (!objsize && warn_stringop_overflow)
-     {
-       /* If it hasn't been provided by __strncat_chk, try to determine
- 	 the size of the destination object into which the source is
- 	 being copied.  */
-       objsize = compute_objsize (dest, warn_stringop_overflow - 1, &data.dst);
-     }
- 
-   /* Add one for the terminating nul.  */
-   tree srclen = (lendata.minlen
- 		 ? fold_build2 (PLUS_EXPR, size_type_node, lendata.minlen,
- 				size_one_node)
- 		 : NULL_TREE);
- 
-   /* The strncat function copies at most MAXREAD bytes and always appends
-      the terminating nul so the specified upper bound should never be equal
-      to (or greater than) the size of the destination.  */
-   if (tree_fits_uhwi_p (maxread) && tree_fits_uhwi_p (objsize)
-       && tree_int_cst_equal (objsize, maxread))
-     {
-       location_t loc = tree_inlined_location (exp);
-       warning_at (loc, OPT_Wstringop_overflow_,
- 		  "%K%qD specified bound %E equals destination size",
- 		  exp, get_callee_fndecl (exp), maxread);
- 
-       return false;
-     }
- 
-   if (!srclen
-       || (maxread && tree_fits_uhwi_p (maxread)
- 	  && tree_fits_uhwi_p (srclen)
- 	  && tree_int_cst_lt (maxread, srclen)))
-     srclen = maxread;
- 
-   /* The number of bytes to write is LEN but check_access will alsoa
-      check SRCLEN if LEN's value isn't known.  */
-   return check_access (exp, /*dstwrite=*/NULL_TREE, maxread, srclen,
- 		       objsize, data.mode, &data);
- }
- 
- /* Similar to expand_builtin_strcat, do some very basic size validation
-    of a call to the strcpy builtin given by EXP.  Return NULL_RTX to have
-    the built-in expand to a call to the library function.  */
- 
- static rtx
- expand_builtin_strncat (tree exp, rtx)
- {
-   if (!validate_arglist (exp,
- 			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)
-       || !warn_stringop_overflow)
-     return NULL_RTX;
- 
-   tree dest = CALL_EXPR_ARG (exp, 0);
-   tree src = CALL_EXPR_ARG (exp, 1);
-   /* The upper bound on the number of bytes to write.  */
-   tree maxread = CALL_EXPR_ARG (exp, 2);
- 
-   /* Detect unterminated source (only).  */
-   if (!check_nul_terminated_array (exp, src, maxread))
-     return NULL_RTX;
- 
-   /* The length of the source sequence.  */
-   tree slen = c_strlen (src, 1);
- 
-   /* Try to determine the range of lengths that the source expression
-      refers to.  Since the lengths are only used for warning and not
-      for code generation disable strict mode below.  */
-   tree maxlen = slen;
-   if (!maxlen)
-     {
-       c_strlen_data lendata = { };
-       get_range_strlen (src, &lendata, /* eltsize = */ 1);
-       maxlen = lendata.maxbound;
-     }
- 
-   access_data data (exp, access_read_write);
-   /* Try to verify that the destination is big enough for the shortest
-      string.  First try to determine the size of the destination object
-      into which the source is being copied.  */
-   tree destsize = compute_objsize (dest, warn_stringop_overflow - 1, &data.dst);
- 
-   /* Add one for the terminating nul.  */
-   tree srclen = (maxlen
- 		 ? fold_build2 (PLUS_EXPR, size_type_node, maxlen,
- 				size_one_node)
- 		 : NULL_TREE);
- 
-   /* The strncat function copies at most MAXREAD bytes and always appends
-      the terminating nul so the specified upper bound should never be equal
-      to (or greater than) the size of the destination.  */
-   if (tree_fits_uhwi_p (maxread) && tree_fits_uhwi_p (destsize)
-       && tree_int_cst_equal (destsize, maxread))
-     {
-       location_t loc = tree_inlined_location (exp);
-       warning_at (loc, OPT_Wstringop_overflow_,
- 		  "%K%qD specified bound %E equals destination size",
- 		  exp, get_callee_fndecl (exp), maxread);
- 
-       return NULL_RTX;
-     }
- 
-   if (!srclen
-       || (maxread && tree_fits_uhwi_p (maxread)
- 	  && tree_fits_uhwi_p (srclen)
- 	  && tree_int_cst_lt (maxread, srclen)))
-     srclen = maxread;
- 
-   check_access (exp, /*dstwrite=*/NULL_TREE, maxread, srclen,
- 		destsize, data.mode, &data);
-   return NULL_RTX;
- }
- 
- /* Expand expression EXP, which is a call to the strncpy builtin.  Return
-    NULL_RTX if we failed the caller should emit a normal call.  */
- 
- static rtx
- expand_builtin_strncpy (tree exp, rtx target)
- {
-   location_t loc = EXPR_LOCATION (exp);
- 
-   if (!validate_arglist (exp,
- 			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
-   tree dest = CALL_EXPR_ARG (exp, 0);
-   tree src = CALL_EXPR_ARG (exp, 1);
-   /* The number of bytes to write (not the maximum).  */
-   tree len = CALL_EXPR_ARG (exp, 2);
- 
-   /* The length of the source sequence.  */
-   tree slen = c_strlen (src, 1);
- 
-   if (warn_stringop_overflow)
-     {
-       access_data data (exp, access_read_write, len, true, len, true);
-       const int ost = warn_stringop_overflow ? warn_stringop_overflow - 1 : 1;
-       compute_objsize (src, ost, &data.src);
-       tree dstsize = compute_objsize (dest, ost, &data.dst);
-       /* The number of bytes to write is LEN but check_access will also
- 	 check SLEN if LEN's value isn't known.  */
-       check_access (exp, /*dstwrite=*/len,
- 		    /*maxread=*/len, src, dstsize, data.mode, &data);
-     }
- 
-   /* We must be passed a constant len and src parameter.  */
-   if (!tree_fits_uhwi_p (len) || !slen || !tree_fits_uhwi_p (slen))
-     return NULL_RTX;
- 
-   slen = size_binop_loc (loc, PLUS_EXPR, slen, ssize_int (1));
- 
-   /* We're required to pad with trailing zeros if the requested
-      len is greater than strlen(s2)+1.  In that case try to
-      use store_by_pieces, if it fails, punt.  */
-   if (tree_int_cst_lt (slen, len))
-     {
-       unsigned int dest_align = get_pointer_alignment (dest);
-       const char *p = c_getstr (src);
-       rtx dest_mem;
- 
-       if (!p || dest_align == 0 || !tree_fits_uhwi_p (len)
- 	  || !can_store_by_pieces (tree_to_uhwi (len),
- 				   builtin_strncpy_read_str,
- 				   CONST_CAST (char *, p),
- 				   dest_align, false))
- 	return NULL_RTX;
- 
-       dest_mem = get_memory_rtx (dest, len);
-       store_by_pieces (dest_mem, tree_to_uhwi (len),
- 		       builtin_strncpy_read_str,
- 		       CONST_CAST (char *, p), dest_align, false,
- 		       RETURN_BEGIN);
-       dest_mem = force_operand (XEXP (dest_mem, 0), target);
-       dest_mem = convert_memory_address (ptr_mode, dest_mem);
-       return dest_mem;
-     }
- 
-   return NULL_RTX;
- }
- 
- /* Callback routine for store_by_pieces.  Read GET_MODE_BITSIZE (MODE)
-    bytes from constant string DATA + OFFSET and return it as target
-    constant.  */
- 
- rtx
- builtin_memset_read_str (void *data, HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
- 			 scalar_int_mode mode)
- {
-   const char *c = (const char *) data;
-   char *p = XALLOCAVEC (char, GET_MODE_SIZE (mode));
- 
-   memset (p, *c, GET_MODE_SIZE (mode));
- 
-   return c_readstr (p, mode);
- }
- 
- /* Callback routine for store_by_pieces.  Return the RTL of a register
-    containing GET_MODE_SIZE (MODE) consecutive copies of the unsigned
-    char value given in the RTL register data.  For example, if mode is
-    4 bytes wide, return the RTL for 0x01010101*data.  */
- 
- static rtx
- builtin_memset_gen_str (void *data, HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
- 			scalar_int_mode mode)
- {
-   rtx target, coeff;
-   size_t size;
-   char *p;
- 
-   size = GET_MODE_SIZE (mode);
-   if (size == 1)
-     return (rtx) data;
- 
-   p = XALLOCAVEC (char, size);
-   memset (p, 1, size);
-   coeff = c_readstr (p, mode);
- 
-   target = convert_to_mode (mode, (rtx) data, 1);
-   target = expand_mult (mode, target, coeff, NULL_RTX, 1);
-   return force_reg (mode, target);
- }
- 
- /* Expand expression EXP, which is a call to the memset builtin.  Return
-    NULL_RTX if we failed the caller should emit a normal call, otherwise
-    try to get the result in TARGET, if convenient (and in mode MODE if that's
-    convenient).  */
- 
- static rtx
- expand_builtin_memset (tree exp, rtx target, machine_mode mode)
- {
-   if (!validate_arglist (exp,
-  			 POINTER_TYPE, INTEGER_TYPE, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree dest = CALL_EXPR_ARG (exp, 0);
-   tree val = CALL_EXPR_ARG (exp, 1);
-   tree len = CALL_EXPR_ARG (exp, 2);
- 
-   check_memop_access (exp, dest, NULL_TREE, len);
- 
-   return expand_builtin_memset_args (dest, val, len, target, mode, exp);
- }
- 
- /* Helper function to do the actual work for expand_builtin_memset.  The
-    arguments to the builtin_memset call DEST, VAL, and LEN are broken out
-    so that this can also be called without constructing an actual CALL_EXPR.
-    The other arguments and return value are the same as for
-    expand_builtin_memset.  */
- 
- static rtx
- expand_builtin_memset_args (tree dest, tree val, tree len,
- 			    rtx target, machine_mode mode, tree orig_exp)
- {
-   tree fndecl, fn;
-   enum built_in_function fcode;
-   machine_mode val_mode;
-   char c;
-   unsigned int dest_align;
-   rtx dest_mem, dest_addr, len_rtx;
-   HOST_WIDE_INT expected_size = -1;
-   unsigned int expected_align = 0;
-   unsigned HOST_WIDE_INT min_size;
-   unsigned HOST_WIDE_INT max_size;
-   unsigned HOST_WIDE_INT probable_max_size;
- 
-   dest_align = get_pointer_alignment (dest);
- 
-   /* If DEST is not a pointer type, don't do this operation in-line.  */
-   if (dest_align == 0)
-     return NULL_RTX;
- 
-   if (currently_expanding_gimple_stmt)
-     stringop_block_profile (currently_expanding_gimple_stmt,
- 			    &expected_align, &expected_size);
- 
-   if (expected_align < dest_align)
-     expected_align = dest_align;
- 
-   /* If the LEN parameter is zero, return DEST.  */
-   if (integer_zerop (len))
-     {
-       /* Evaluate and ignore VAL in case it has side-effects.  */
-       expand_expr (val, const0_rtx, VOIDmode, EXPAND_NORMAL);
-       return expand_expr (dest, target, mode, EXPAND_NORMAL);
-     }
- 
-   /* Stabilize the arguments in case we fail.  */
-   dest = builtin_save_expr (dest);
-   val = builtin_save_expr (val);
-   len = builtin_save_expr (len);
- 
-   len_rtx = expand_normal (len);
-   determine_block_size (len, len_rtx, &min_size, &max_size,
- 			&probable_max_size);
-   dest_mem = get_memory_rtx (dest, len);
-   val_mode = TYPE_MODE (unsigned_char_type_node);
- 
-   if (TREE_CODE (val) != INTEGER_CST)
-     {
-       rtx val_rtx;
- 
-       val_rtx = expand_normal (val);
-       val_rtx = convert_to_mode (val_mode, val_rtx, 0);
- 
-       /* Assume that we can memset by pieces if we can store
-        * the coefficients by pieces (in the required modes).
-        * We can't pass builtin_memset_gen_str as that emits RTL.  */
-       c = 1;
-       if (tree_fits_uhwi_p (len)
- 	  && can_store_by_pieces (tree_to_uhwi (len),
- 				  builtin_memset_read_str, &c, dest_align,
- 				  true))
- 	{
- 	  val_rtx = force_reg (val_mode, val_rtx);
- 	  store_by_pieces (dest_mem, tree_to_uhwi (len),
- 			   builtin_memset_gen_str, val_rtx, dest_align,
- 			   true, RETURN_BEGIN);
- 	}
-       else if (!set_storage_via_setmem (dest_mem, len_rtx, val_rtx,
- 					dest_align, expected_align,
- 					expected_size, min_size, max_size,
- 					probable_max_size))
- 	goto do_libcall;
- 
-       dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
-       dest_mem = convert_memory_address (ptr_mode, dest_mem);
-       return dest_mem;
-     }
- 
-   if (target_char_cast (val, &c))
-     goto do_libcall;
- 
-   if (c)
-     {
-       if (tree_fits_uhwi_p (len)
- 	  && can_store_by_pieces (tree_to_uhwi (len),
- 				  builtin_memset_read_str, &c, dest_align,
- 				  true))
- 	store_by_pieces (dest_mem, tree_to_uhwi (len),
- 			 builtin_memset_read_str, &c, dest_align, true,
- 			 RETURN_BEGIN);
-       else if (!set_storage_via_setmem (dest_mem, len_rtx,
- 					gen_int_mode (c, val_mode),
- 					dest_align, expected_align,
- 					expected_size, min_size, max_size,
- 					probable_max_size))
- 	goto do_libcall;
- 
-       dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
-       dest_mem = convert_memory_address (ptr_mode, dest_mem);
-       return dest_mem;
-     }
- 
-   set_mem_align (dest_mem, dest_align);
-   dest_addr = clear_storage_hints (dest_mem, len_rtx,
- 				   CALL_EXPR_TAILCALL (orig_exp)
- 				   ? BLOCK_OP_TAILCALL : BLOCK_OP_NORMAL,
- 				   expected_align, expected_size,
- 				   min_size, max_size,
- 				   probable_max_size);
- 
-   if (dest_addr == 0)
-     {
-       dest_addr = force_operand (XEXP (dest_mem, 0), NULL_RTX);
-       dest_addr = convert_memory_address (ptr_mode, dest_addr);
-     }
- 
-   return dest_addr;
- 
-  do_libcall:
-   fndecl = get_callee_fndecl (orig_exp);
-   fcode = DECL_FUNCTION_CODE (fndecl);
-   if (fcode == BUILT_IN_MEMSET)
-     fn = build_call_nofold_loc (EXPR_LOCATION (orig_exp), fndecl, 3,
- 				dest, val, len);
-   else if (fcode == BUILT_IN_BZERO)
-     fn = build_call_nofold_loc (EXPR_LOCATION (orig_exp), fndecl, 2,
- 				dest, len);
-   else
-     gcc_unreachable ();
-   gcc_assert (TREE_CODE (fn) == CALL_EXPR);
-   CALL_EXPR_TAILCALL (fn) = CALL_EXPR_TAILCALL (orig_exp);
-   return expand_call (fn, target, target == const0_rtx);
- }
- 
- /* Expand expression EXP, which is a call to the bzero builtin.  Return
-    NULL_RTX if we failed the caller should emit a normal call.  */
- 
- static rtx
- expand_builtin_bzero (tree exp)
- {
-   if (!validate_arglist (exp, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree dest = CALL_EXPR_ARG (exp, 0);
-   tree size = CALL_EXPR_ARG (exp, 1);
- 
-   check_memop_access (exp, dest, NULL_TREE, size);
- 
-   /* New argument list transforming bzero(ptr x, int y) to
-      memset(ptr x, int 0, size_t y).   This is done this way
-      so that if it isn't expanded inline, we fallback to
-      calling bzero instead of memset.  */
- 
-   location_t loc = EXPR_LOCATION (exp);
- 
-   return expand_builtin_memset_args (dest, integer_zero_node,
- 				     fold_convert_loc (loc,
- 						       size_type_node, size),
- 				     const0_rtx, VOIDmode, exp);
- }
- 
- /* Try to expand cmpstr operation ICODE with the given operands.
-    Return the result rtx on success, otherwise return null.  */
- 
- static rtx
- expand_cmpstr (insn_code icode, rtx target, rtx arg1_rtx, rtx arg2_rtx,
- 	       HOST_WIDE_INT align)
- {
-   machine_mode insn_mode = insn_data[icode].operand[0].mode;
- 
-   if (target && (!REG_P (target) || HARD_REGISTER_P (target)))
-     target = NULL_RTX;
- 
-   class expand_operand ops[4];
-   create_output_operand (&ops[0], target, insn_mode);
-   create_fixed_operand (&ops[1], arg1_rtx);
-   create_fixed_operand (&ops[2], arg2_rtx);
-   create_integer_operand (&ops[3], align);
-   if (maybe_expand_insn (icode, 4, ops))
-     return ops[0].value;
-   return NULL_RTX;
- }
- 
- /* Expand expression EXP, which is a call to the memcmp built-in function.
-    Return NULL_RTX if we failed and the caller should emit a normal call,
-    otherwise try to get the result in TARGET, if convenient.
-    RESULT_EQ is true if we can relax the returned value to be either zero
-    or nonzero, without caring about the sign.  */
- 
- static rtx
- expand_builtin_memcmp (tree exp, rtx target, bool result_eq)
- {
-   if (!validate_arglist (exp,
-  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree arg1 = CALL_EXPR_ARG (exp, 0);
-   tree arg2 = CALL_EXPR_ARG (exp, 1);
-   tree len = CALL_EXPR_ARG (exp, 2);
- 
-   /* Diagnose calls where the specified length exceeds the size of either
-      object.  */
-   if (!check_read_access (exp, arg1, len, 0)
-       || !check_read_access (exp, arg2, len, 0))
-     return NULL_RTX;
- 
-   /* Due to the performance benefit, always inline the calls first
-      when result_eq is false.  */
-   rtx result = NULL_RTX;
-   enum built_in_function fcode = DECL_FUNCTION_CODE (get_callee_fndecl (exp));
-   if (!result_eq && fcode != BUILT_IN_BCMP)
-     {
-       result = inline_expand_builtin_bytecmp (exp, target);
-       if (result)
- 	return result;
-     }
- 
-   machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
-   location_t loc = EXPR_LOCATION (exp);
- 
-   unsigned int arg1_align = get_pointer_alignment (arg1) / BITS_PER_UNIT;
-   unsigned int arg2_align = get_pointer_alignment (arg2) / BITS_PER_UNIT;
- 
-   /* If we don't have POINTER_TYPE, call the function.  */
-   if (arg1_align == 0 || arg2_align == 0)
-     return NULL_RTX;
- 
-   rtx arg1_rtx = get_memory_rtx (arg1, len);
-   rtx arg2_rtx = get_memory_rtx (arg2, len);
-   rtx len_rtx = expand_normal (fold_convert_loc (loc, sizetype, len));
- 
-   /* Set MEM_SIZE as appropriate.  */
-   if (CONST_INT_P (len_rtx))
-     {
-       set_mem_size (arg1_rtx, INTVAL (len_rtx));
-       set_mem_size (arg2_rtx, INTVAL (len_rtx));
-     }
- 
-   by_pieces_constfn constfn = NULL;
- 
-   /* Try to get the byte representation of the constant ARG2 (or, only
-      when the function's result is used for equality to zero, ARG1)
-      points to, with its byte size in NBYTES.  */
-   unsigned HOST_WIDE_INT nbytes;
-   const char *rep = getbyterep (arg2, &nbytes);
-   if (result_eq && rep == NULL)
-     {
-       /* For equality to zero the arguments are interchangeable.  */
-       rep = getbyterep (arg1, &nbytes);
-       if (rep != NULL)
- 	std::swap (arg1_rtx, arg2_rtx);
-     }
- 
-   /* If the function's constant bound LEN_RTX is less than or equal
-      to the byte size of the representation of the constant argument,
-      and if block move would be done by pieces, we can avoid loading
-      the bytes from memory and only store the computed constant result.  */
-   if (rep
-       && CONST_INT_P (len_rtx)
-       && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= nbytes)
-     constfn = builtin_memcpy_read_str;
- 
-   result = emit_block_cmp_hints (arg1_rtx, arg2_rtx, len_rtx,
- 				 TREE_TYPE (len), target,
- 				 result_eq, constfn,
- 				 CONST_CAST (char *, rep));
- 
-   if (result)
-     {
-       /* Return the value in the proper mode for this function.  */
-       if (GET_MODE (result) == mode)
- 	return result;
- 
-       if (target != 0)
- 	{
- 	  convert_move (target, result, 0);
- 	  return target;
- 	}
- 
-       return convert_to_mode (mode, result, 0);
-     }
- 
-   return NULL_RTX;
- }
- 
- /* Expand expression EXP, which is a call to the strcmp builtin.  Return NULL_RTX
-    if we failed the caller should emit a normal call, otherwise try to get
-    the result in TARGET, if convenient.  */
- 
- static rtx
- expand_builtin_strcmp (tree exp, ATTRIBUTE_UNUSED rtx target)
- {
-   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree arg1 = CALL_EXPR_ARG (exp, 0);
-   tree arg2 = CALL_EXPR_ARG (exp, 1);
- 
-   if (!check_read_access (exp, arg1)
-       || !check_read_access (exp, arg2))
-     return NULL_RTX;
- 
-   /* Due to the performance benefit, always inline the calls first.  */
-   rtx result = NULL_RTX;
-   result = inline_expand_builtin_bytecmp (exp, target);
-   if (result)
-     return result;
- 
-   insn_code cmpstr_icode = direct_optab_handler (cmpstr_optab, SImode);
-   insn_code cmpstrn_icode = direct_optab_handler (cmpstrn_optab, SImode);
-   if (cmpstr_icode == CODE_FOR_nothing && cmpstrn_icode == CODE_FOR_nothing)
-     return NULL_RTX;
- 
-   unsigned int arg1_align = get_pointer_alignment (arg1) / BITS_PER_UNIT;
-   unsigned int arg2_align = get_pointer_alignment (arg2) / BITS_PER_UNIT;
- 
-   /* If we don't have POINTER_TYPE, call the function.  */
-   if (arg1_align == 0 || arg2_align == 0)
-     return NULL_RTX;
- 
-   /* Stabilize the arguments in case gen_cmpstr(n)si fail.  */
-   arg1 = builtin_save_expr (arg1);
-   arg2 = builtin_save_expr (arg2);
- 
-   rtx arg1_rtx = get_memory_rtx (arg1, NULL);
-   rtx arg2_rtx = get_memory_rtx (arg2, NULL);
- 
-   /* Try to call cmpstrsi.  */
-   if (cmpstr_icode != CODE_FOR_nothing)
-     result = expand_cmpstr (cmpstr_icode, target, arg1_rtx, arg2_rtx,
- 			    MIN (arg1_align, arg2_align));
- 
-   /* Try to determine at least one length and call cmpstrnsi.  */
-   if (!result && cmpstrn_icode != CODE_FOR_nothing)
-     {
-       tree len;
-       rtx arg3_rtx;
- 
-       tree len1 = c_strlen (arg1, 1);
-       tree len2 = c_strlen (arg2, 1);
- 
-       if (len1)
- 	len1 = size_binop (PLUS_EXPR, ssize_int (1), len1);
-       if (len2)
- 	len2 = size_binop (PLUS_EXPR, ssize_int (1), len2);
- 
-       /* If we don't have a constant length for the first, use the length
- 	 of the second, if we know it.  We don't require a constant for
- 	 this case; some cost analysis could be done if both are available
- 	 but neither is constant.  For now, assume they're equally cheap,
- 	 unless one has side effects.  If both strings have constant lengths,
- 	 use the smaller.  */
- 
-       if (!len1)
- 	len = len2;
-       else if (!len2)
- 	len = len1;
-       else if (TREE_SIDE_EFFECTS (len1))
- 	len = len2;
-       else if (TREE_SIDE_EFFECTS (len2))
- 	len = len1;
-       else if (TREE_CODE (len1) != INTEGER_CST)
- 	len = len2;
-       else if (TREE_CODE (len2) != INTEGER_CST)
- 	len = len1;
-       else if (tree_int_cst_lt (len1, len2))
- 	len = len1;
-       else
- 	len = len2;
- 
-       /* If both arguments have side effects, we cannot optimize.  */
-       if (len && !TREE_SIDE_EFFECTS (len))
- 	{
- 	  arg3_rtx = expand_normal (len);
- 	  result = expand_cmpstrn_or_cmpmem
- 	    (cmpstrn_icode, target, arg1_rtx, arg2_rtx, TREE_TYPE (len),
- 	     arg3_rtx, MIN (arg1_align, arg2_align));
- 	}
-     }
- 
-   tree fndecl = get_callee_fndecl (exp);
-   if (result)
-     {
-       /* Check to see if the argument was declared attribute nonstring
- 	 and if so, issue a warning since at this point it's not known
- 	 to be nul-terminated.  */
-       maybe_warn_nonstring_arg (fndecl, exp);
- 
-       /* Return the value in the proper mode for this function.  */
-       machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
-       if (GET_MODE (result) == mode)
- 	return result;
-       if (target == 0)
- 	return convert_to_mode (mode, result, 0);
-       convert_move (target, result, 0);
-       return target;
-     }
- 
-   /* Expand the library call ourselves using a stabilized argument
-      list to avoid re-evaluating the function's arguments twice.  */
-   tree fn = build_call_nofold_loc (EXPR_LOCATION (exp), fndecl, 2, arg1, arg2);
-   gcc_assert (TREE_CODE (fn) == CALL_EXPR);
-   CALL_EXPR_TAILCALL (fn) = CALL_EXPR_TAILCALL (exp);
-   return expand_call (fn, target, target == const0_rtx);
- }
- 
- /* Expand expression EXP, which is a call to the strncmp builtin. Return
-    NULL_RTX if we failed the caller should emit a normal call, otherwise
-    try to get the result in TARGET, if convenient.  */
- 
- static rtx
- expand_builtin_strncmp (tree exp, ATTRIBUTE_UNUSED rtx target,
- 			ATTRIBUTE_UNUSED machine_mode mode)
- {
-   if (!validate_arglist (exp,
-  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree arg1 = CALL_EXPR_ARG (exp, 0);
-   tree arg2 = CALL_EXPR_ARG (exp, 1);
-   tree arg3 = CALL_EXPR_ARG (exp, 2);
- 
-   if (!check_nul_terminated_array (exp, arg1, arg3)
-       || !check_nul_terminated_array (exp, arg2, arg3))
-     return NULL_RTX;
- 
-   location_t loc = tree_inlined_location (exp);
-   tree len1 = c_strlen (arg1, 1);
-   tree len2 = c_strlen (arg2, 1);
- 
-   if (!len1 || !len2)
-     {
-       /* Check to see if the argument was declared attribute nonstring
- 	 and if so, issue a warning since at this point it's not known
- 	 to be nul-terminated.  */
-       if (!maybe_warn_nonstring_arg (get_callee_fndecl (exp), exp)
- 	  && !len1 && !len2)
- 	{
- 	  /* A strncmp read is constrained not just by the bound but
- 	     also by the length of the shorter string.  Specifying
- 	     a bound that's larger than the size of either array makes
- 	     no sense and is likely a bug.  When the length of neither
- 	     of the two strings is known but the sizes of both of
- 	     the arrays they are stored in is, issue a warning if
- 	     the bound is larger than than the size of the larger
- 	     of the two arrays.  */
- 
- 	  access_ref ref1 (arg3, true);
- 	  access_ref ref2 (arg3, true);
- 
- 	  tree bndrng[2] = { NULL_TREE, NULL_TREE };
- 	  get_size_range (arg3, bndrng, ref1.bndrng);
- 
- 	  tree size1 = compute_objsize (arg1, 1, &ref1);
- 	  tree size2 = compute_objsize (arg2, 1, &ref2);
- 	  tree func = get_callee_fndecl (exp);
- 
- 	  if (size1 && size2 && bndrng[0] && !integer_zerop (bndrng[0]))
- 	    {
- 	      offset_int rem1 = ref1.size_remaining ();
- 	      offset_int rem2 = ref2.size_remaining ();
- 	      if (rem1 == 0 || rem2 == 0)
- 		maybe_warn_for_bound (OPT_Wstringop_overread, loc, exp, func,
- 				      bndrng, integer_zero_node);
- 	      else
- 		{
- 		  offset_int maxrem = wi::max (rem1, rem2, UNSIGNED);
- 		  if (maxrem < wi::to_offset (bndrng[0]))
- 		    maybe_warn_for_bound (OPT_Wstringop_overread, loc, exp,
- 					  func, bndrng,
- 					  wide_int_to_tree (sizetype, maxrem));
- 		}
- 	    }
- 	  else if (bndrng[0]
- 		   && !integer_zerop (bndrng[0])
- 		   && ((size1 && integer_zerop (size1))
- 		       || (size2 && integer_zerop (size2))))
- 	    maybe_warn_for_bound (OPT_Wstringop_overread, loc, exp, func,
- 				  bndrng, integer_zero_node);
- 	}
-     }
- 
-   /* Due to the performance benefit, always inline the calls first.  */
-   rtx result = NULL_RTX;
-   result = inline_expand_builtin_bytecmp (exp, target);
-   if (result)
-     return result;
- 
-   /* If c_strlen can determine an expression for one of the string
-      lengths, and it doesn't have side effects, then emit cmpstrnsi
-      using length MIN(strlen(string)+1, arg3).  */
-   insn_code cmpstrn_icode = direct_optab_handler (cmpstrn_optab, SImode);
-   if (cmpstrn_icode == CODE_FOR_nothing)
-     return NULL_RTX;
- 
-   tree len;
- 
-   unsigned int arg1_align = get_pointer_alignment (arg1) / BITS_PER_UNIT;
-   unsigned int arg2_align = get_pointer_alignment (arg2) / BITS_PER_UNIT;
- 
-   if (len1)
-     len1 = size_binop_loc (loc, PLUS_EXPR, ssize_int (1), len1);
-   if (len2)
-     len2 = size_binop_loc (loc, PLUS_EXPR, ssize_int (1), len2);
- 
-   tree len3 = fold_convert_loc (loc, sizetype, arg3);
- 
-   /* If we don't have a constant length for the first, use the length
-      of the second, if we know it.  If neither string is constant length,
-      use the given length argument.  We don't require a constant for
-      this case; some cost analysis could be done if both are available
-      but neither is constant.  For now, assume they're equally cheap,
-      unless one has side effects.  If both strings have constant lengths,
-      use the smaller.  */
- 
-   if (!len1 && !len2)
-     len = len3;
-   else if (!len1)
-     len = len2;
-   else if (!len2)
-     len = len1;
-   else if (TREE_SIDE_EFFECTS (len1))
-     len = len2;
-   else if (TREE_SIDE_EFFECTS (len2))
-     len = len1;
-   else if (TREE_CODE (len1) != INTEGER_CST)
-     len = len2;
-   else if (TREE_CODE (len2) != INTEGER_CST)
-     len = len1;
-   else if (tree_int_cst_lt (len1, len2))
-     len = len1;
-   else
-     len = len2;
- 
-   /* If we are not using the given length, we must incorporate it here.
-      The actual new length parameter will be MIN(len,arg3) in this case.  */
-   if (len != len3)
-     {
-       len = fold_convert_loc (loc, sizetype, len);
-       len = fold_build2_loc (loc, MIN_EXPR, TREE_TYPE (len), len, len3);
-     }
-   rtx arg1_rtx = get_memory_rtx (arg1, len);
-   rtx arg2_rtx = get_memory_rtx (arg2, len);
-   rtx arg3_rtx = expand_normal (len);
-   result = expand_cmpstrn_or_cmpmem (cmpstrn_icode, target, arg1_rtx,
- 				     arg2_rtx, TREE_TYPE (len), arg3_rtx,
- 				     MIN (arg1_align, arg2_align));
- 
-   tree fndecl = get_callee_fndecl (exp);
-   if (result)
-     {
-       /* Return the value in the proper mode for this function.  */
-       mode = TYPE_MODE (TREE_TYPE (exp));
-       if (GET_MODE (result) == mode)
- 	return result;
-       if (target == 0)
- 	return convert_to_mode (mode, result, 0);
-       convert_move (target, result, 0);
-       return target;
-     }
- 
-   /* Expand the library call ourselves using a stabilized argument
-      list to avoid re-evaluating the function's arguments twice.  */
-   tree call = build_call_nofold_loc (loc, fndecl, 3, arg1, arg2, len);
-   if (TREE_NO_WARNING (exp))
-     TREE_NO_WARNING (call) = true;
-   gcc_assert (TREE_CODE (call) == CALL_EXPR);
-   CALL_EXPR_TAILCALL (call) = CALL_EXPR_TAILCALL (exp);
-   return expand_call (call, target, target == const0_rtx);
- }
- 
- /* Expand a call to __builtin_saveregs, generating the result in TARGET,
-    if that's convenient.  */
- 
- rtx
- expand_builtin_saveregs (void)
- {
-   rtx val;
-   rtx_insn *seq;
- 
-   /* Don't do __builtin_saveregs more than once in a function.
-      Save the result of the first call and reuse it.  */
-   if (saveregs_value != 0)
-     return saveregs_value;
- 
-   /* When this function is called, it means that registers must be
-      saved on entry to this function.  So we migrate the call to the
-      first insn of this function.  */
- 
-   start_sequence ();
- 
-   /* Do whatever the machine needs done in this case.  */
-   val = targetm.calls.expand_builtin_saveregs ();
- 
-   seq = get_insns ();
-   end_sequence ();
- 
-   saveregs_value = val;
- 
-   /* Put the insns after the NOTE that starts the function.  If this
-      is inside a start_sequence, make the outer-level insn chain current, so
-      the code is placed at the start of the function.  */
-   push_topmost_sequence ();
-   emit_insn_after (seq, entry_of_function ());
-   pop_topmost_sequence ();
- 
-   return val;
- }
- 
- /* Expand a call to __builtin_next_arg.  */
- 
- static rtx
- expand_builtin_next_arg (void)
- {
-   /* Checking arguments is already done in fold_builtin_next_arg
-      that must be called before this function.  */
-   return expand_binop (ptr_mode, add_optab,
- 		       crtl->args.internal_arg_pointer,
- 		       crtl->args.arg_offset_rtx,
- 		       NULL_RTX, 0, OPTAB_LIB_WIDEN);
- }
- 
- /* Make it easier for the backends by protecting the valist argument
-    from multiple evaluations.  */
- 
- static tree
- stabilize_va_list_loc (location_t loc, tree valist, int needs_lvalue)
- {
-   tree vatype = targetm.canonical_va_list_type (TREE_TYPE (valist));
- 
-   /* The current way of determining the type of valist is completely
-      bogus.  We should have the information on the va builtin instead.  */
-   if (!vatype)
-     vatype = targetm.fn_abi_va_list (cfun->decl);
- 
-   if (TREE_CODE (vatype) == ARRAY_TYPE)
-     {
-       if (TREE_SIDE_EFFECTS (valist))
- 	valist = save_expr (valist);
- 
-       /* For this case, the backends will be expecting a pointer to
- 	 vatype, but it's possible we've actually been given an array
- 	 (an actual TARGET_CANONICAL_VA_LIST_TYPE (valist)).
- 	 So fix it.  */
-       if (TREE_CODE (TREE_TYPE (valist)) == ARRAY_TYPE)
- 	{
- 	  tree p1 = build_pointer_type (TREE_TYPE (vatype));
- 	  valist = build_fold_addr_expr_with_type_loc (loc, valist, p1);
- 	}
-     }
-   else
-     {
-       tree pt = build_pointer_type (vatype);
- 
-       if (! needs_lvalue)
- 	{
- 	  if (! TREE_SIDE_EFFECTS (valist))
- 	    return valist;
- 
- 	  valist = fold_build1_loc (loc, ADDR_EXPR, pt, valist);
- 	  TREE_SIDE_EFFECTS (valist) = 1;
- 	}
- 
-       if (TREE_SIDE_EFFECTS (valist))
- 	valist = save_expr (valist);
-       valist = fold_build2_loc (loc, MEM_REF,
- 				vatype, valist, build_int_cst (pt, 0));
-     }
- 
-   return valist;
- }
- 
- /* The "standard" definition of va_list is void*.  */
- 
- tree
- std_build_builtin_va_list (void)
- {
-   return ptr_type_node;
- }
- 
- /* The "standard" abi va_list is va_list_type_node.  */
- 
- tree
- std_fn_abi_va_list (tree fndecl ATTRIBUTE_UNUSED)
- {
-   return va_list_type_node;
- }
- 
- /* The "standard" type of va_list is va_list_type_node.  */
- 
- tree
- std_canonical_va_list_type (tree type)
- {
-   tree wtype, htype;
- 
-   wtype = va_list_type_node;
-   htype = type;
- 
-   if (TREE_CODE (wtype) == ARRAY_TYPE)
-     {
-       /* If va_list is an array type, the argument may have decayed
- 	 to a pointer type, e.g. by being passed to another function.
- 	 In that case, unwrap both types so that we can compare the
- 	 underlying records.  */
-       if (TREE_CODE (htype) == ARRAY_TYPE
- 	  || POINTER_TYPE_P (htype))
- 	{
- 	  wtype = TREE_TYPE (wtype);
- 	  htype = TREE_TYPE (htype);
- 	}
-     }
-   if (TYPE_MAIN_VARIANT (wtype) == TYPE_MAIN_VARIANT (htype))
-     return va_list_type_node;
- 
-   return NULL_TREE;
- }
- 
- /* The "standard" implementation of va_start: just assign `nextarg' to
-    the variable.  */
- 
- void
- std_expand_builtin_va_start (tree valist, rtx nextarg)
- {
-   rtx va_r = expand_expr (valist, NULL_RTX, VOIDmode, EXPAND_WRITE);
-   convert_move (va_r, nextarg, 0);
- }
- 
- /* Expand EXP, a call to __builtin_va_start.  */
- 
- static rtx
- expand_builtin_va_start (tree exp)
- {
-   rtx nextarg;
-   tree valist;
-   location_t loc = EXPR_LOCATION (exp);
- 
-   if (call_expr_nargs (exp) < 2)
-     {
-       error_at (loc, "too few arguments to function %<va_start%>");
-       return const0_rtx;
-     }
- 
-   if (fold_builtin_next_arg (exp, true))
-     return const0_rtx;
- 
-   nextarg = expand_builtin_next_arg ();
-   valist = stabilize_va_list_loc (loc, CALL_EXPR_ARG (exp, 0), 1);
- 
-   if (targetm.expand_builtin_va_start)
-     targetm.expand_builtin_va_start (valist, nextarg);
-   else
-     std_expand_builtin_va_start (valist, nextarg);
- 
-   return const0_rtx;
- }
- 
- /* Expand EXP, a call to __builtin_va_end.  */
- 
- static rtx
- expand_builtin_va_end (tree exp)
- {
-   tree valist = CALL_EXPR_ARG (exp, 0);
- 
-   /* Evaluate for side effects, if needed.  I hate macros that don't
-      do that.  */
-   if (TREE_SIDE_EFFECTS (valist))
-     expand_expr (valist, const0_rtx, VOIDmode, EXPAND_NORMAL);
- 
-   return const0_rtx;
- }
- 
- /* Expand EXP, a call to __builtin_va_copy.  We do this as a
-    builtin rather than just as an assignment in stdarg.h because of the
-    nastiness of array-type va_list types.  */
- 
- static rtx
- expand_builtin_va_copy (tree exp)
- {
-   tree dst, src, t;
-   location_t loc = EXPR_LOCATION (exp);
- 
-   dst = CALL_EXPR_ARG (exp, 0);
-   src = CALL_EXPR_ARG (exp, 1);
- 
-   dst = stabilize_va_list_loc (loc, dst, 1);
-   src = stabilize_va_list_loc (loc, src, 0);
- 
-   gcc_assert (cfun != NULL && cfun->decl != NULL_TREE);
- 
-   if (TREE_CODE (targetm.fn_abi_va_list (cfun->decl)) != ARRAY_TYPE)
-     {
-       t = build2 (MODIFY_EXPR, targetm.fn_abi_va_list (cfun->decl), dst, src);
-       TREE_SIDE_EFFECTS (t) = 1;
-       expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
-     }
-   else
-     {
-       rtx dstb, srcb, size;
- 
-       /* Evaluate to pointers.  */
-       dstb = expand_expr (dst, NULL_RTX, Pmode, EXPAND_NORMAL);
-       srcb = expand_expr (src, NULL_RTX, Pmode, EXPAND_NORMAL);
-       size = expand_expr (TYPE_SIZE_UNIT (targetm.fn_abi_va_list (cfun->decl)),
-       		  NULL_RTX, VOIDmode, EXPAND_NORMAL);
- 
-       dstb = convert_memory_address (Pmode, dstb);
-       srcb = convert_memory_address (Pmode, srcb);
- 
-       /* "Dereference" to BLKmode memories.  */
-       dstb = gen_rtx_MEM (BLKmode, dstb);
-       set_mem_alias_set (dstb, get_alias_set (TREE_TYPE (TREE_TYPE (dst))));
-       set_mem_align (dstb, TYPE_ALIGN (targetm.fn_abi_va_list (cfun->decl)));
-       srcb = gen_rtx_MEM (BLKmode, srcb);
-       set_mem_alias_set (srcb, get_alias_set (TREE_TYPE (TREE_TYPE (src))));
-       set_mem_align (srcb, TYPE_ALIGN (targetm.fn_abi_va_list (cfun->decl)));
- 
-       /* Copy.  */
-       emit_block_move (dstb, srcb, size, BLOCK_OP_NORMAL);
-     }
- 
-   return const0_rtx;
- }
- 
- /* Expand a call to one of the builtin functions __builtin_frame_address or
-    __builtin_return_address.  */
- 
- static rtx
- expand_builtin_frame_address (tree fndecl, tree exp)
- {
-   /* The argument must be a nonnegative integer constant.
-      It counts the number of frames to scan up the stack.
-      The value is either the frame pointer value or the return
-      address saved in that frame.  */
-   if (call_expr_nargs (exp) == 0)
-     /* Warning about missing arg was already issued.  */
-     return const0_rtx;
-   else if (! tree_fits_uhwi_p (CALL_EXPR_ARG (exp, 0)))
-     {
-       error ("invalid argument to %qD", fndecl);
-       return const0_rtx;
-     }
-   else
-     {
-       /* Number of frames to scan up the stack.  */
-       unsigned HOST_WIDE_INT count = tree_to_uhwi (CALL_EXPR_ARG (exp, 0));
- 
-       rtx tem = expand_builtin_return_addr (DECL_FUNCTION_CODE (fndecl), count);
- 
-       /* Some ports cannot access arbitrary stack frames.  */
-       if (tem == NULL)
- 	{
- 	  warning (0, "unsupported argument to %qD", fndecl);
- 	  return const0_rtx;
- 	}
- 
-       if (count)
- 	{
- 	  /* Warn since no effort is made to ensure that any frame
- 	     beyond the current one exists or can be safely reached.  */
- 	  warning (OPT_Wframe_address, "calling %qD with "
- 		   "a nonzero argument is unsafe", fndecl);
- 	}
- 
-       /* For __builtin_frame_address, return what we've got.  */
-       if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FRAME_ADDRESS)
- 	return tem;
- 
-       if (!REG_P (tem)
- 	  && ! CONSTANT_P (tem))
- 	tem = copy_addr_to_reg (tem);
-       return tem;
-     }
- }
- 
- /* Expand EXP, a call to the alloca builtin.  Return NULL_RTX if we
-    failed and the caller should emit a normal call.  */
- 
- static rtx
- expand_builtin_alloca (tree exp)
- {
-   rtx op0;
-   rtx result;
-   unsigned int align;
-   tree fndecl = get_callee_fndecl (exp);
-   HOST_WIDE_INT max_size;
-   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
-   bool alloca_for_var = CALL_ALLOCA_FOR_VAR_P (exp);
-   bool valid_arglist
-     = (fcode == BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX
-        ? validate_arglist (exp, INTEGER_TYPE, INTEGER_TYPE, INTEGER_TYPE,
- 			   VOID_TYPE)
-        : fcode == BUILT_IN_ALLOCA_WITH_ALIGN
- 	 ? validate_arglist (exp, INTEGER_TYPE, INTEGER_TYPE, VOID_TYPE)
- 	 : validate_arglist (exp, INTEGER_TYPE, VOID_TYPE));
- 
-   if (!valid_arglist)
-     return NULL_RTX;
- 
-   if ((alloca_for_var
-        && warn_vla_limit >= HOST_WIDE_INT_MAX
-        && warn_alloc_size_limit < warn_vla_limit)
-       || (!alloca_for_var
- 	  && warn_alloca_limit >= HOST_WIDE_INT_MAX
- 	  && warn_alloc_size_limit < warn_alloca_limit
- 	  ))
-     {
-       /* -Walloca-larger-than and -Wvla-larger-than settings of
- 	 less than HOST_WIDE_INT_MAX override the more general
- 	 -Walloc-size-larger-than so unless either of the former
- 	 options is smaller than the last one (wchich would imply
- 	 that the call was already checked), check the alloca
- 	 arguments for overflow.  */
-       tree args[] = { CALL_EXPR_ARG (exp, 0), NULL_TREE };
-       int idx[] = { 0, -1 };
-       maybe_warn_alloc_args_overflow (fndecl, exp, args, idx);
-     }
- 
-   /* Compute the argument.  */
-   op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
- 
-   /* Compute the alignment.  */
-   align = (fcode == BUILT_IN_ALLOCA
- 	   ? BIGGEST_ALIGNMENT
- 	   : TREE_INT_CST_LOW (CALL_EXPR_ARG (exp, 1)));
- 
-   /* Compute the maximum size.  */
-   max_size = (fcode == BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX
-               ? TREE_INT_CST_LOW (CALL_EXPR_ARG (exp, 2))
-               : -1);
- 
-   /* Allocate the desired space.  If the allocation stems from the declaration
-      of a variable-sized object, it cannot accumulate.  */
-   result
-     = allocate_dynamic_stack_space (op0, 0, align, max_size, alloca_for_var);
-   result = convert_memory_address (ptr_mode, result);
- 
-   /* Dynamic allocations for variables are recorded during gimplification.  */
-   if (!alloca_for_var && (flag_callgraph_info & CALLGRAPH_INFO_DYNAMIC_ALLOC))
-     record_dynamic_alloc (exp);
- 
-   return result;
- }
- 
- /* Emit a call to __asan_allocas_unpoison call in EXP.  Add to second argument
-    of the call virtual_stack_dynamic_rtx - stack_pointer_rtx, which is the
-    STACK_DYNAMIC_OFFSET value.  See motivation for this in comment to
-    handle_builtin_stack_restore function.  */
- 
- static rtx
- expand_asan_emit_allocas_unpoison (tree exp)
- {
-   tree arg0 = CALL_EXPR_ARG (exp, 0);
-   tree arg1 = CALL_EXPR_ARG (exp, 1);
-   rtx top = expand_expr (arg0, NULL_RTX, ptr_mode, EXPAND_NORMAL);
-   rtx bot = expand_expr (arg1, NULL_RTX, ptr_mode, EXPAND_NORMAL);
-   rtx off = expand_simple_binop (Pmode, MINUS, virtual_stack_dynamic_rtx,
- 				 stack_pointer_rtx, NULL_RTX, 0,
- 				 OPTAB_LIB_WIDEN);
-   off = convert_modes (ptr_mode, Pmode, off, 0);
-   bot = expand_simple_binop (ptr_mode, PLUS, bot, off, NULL_RTX, 0,
- 			     OPTAB_LIB_WIDEN);
-   rtx ret = init_one_libfunc ("__asan_allocas_unpoison");
-   ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode,
- 				 top, ptr_mode, bot, ptr_mode);
-   return ret;
- }
- 
- /* Expand a call to bswap builtin in EXP.
-    Return NULL_RTX if a normal call should be emitted rather than expanding the
-    function in-line.  If convenient, the result should be placed in TARGET.
-    SUBTARGET may be used as the target for computing one of EXP's operands.  */
- 
- static rtx
- expand_builtin_bswap (machine_mode target_mode, tree exp, rtx target,
- 		      rtx subtarget)
- {
-   tree arg;
-   rtx op0;
- 
-   if (!validate_arglist (exp, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   arg = CALL_EXPR_ARG (exp, 0);
-   op0 = expand_expr (arg,
- 		     subtarget && GET_MODE (subtarget) == target_mode
- 		     ? subtarget : NULL_RTX,
- 		     target_mode, EXPAND_NORMAL);
-   if (GET_MODE (op0) != target_mode)
-     op0 = convert_to_mode (target_mode, op0, 1);
- 
-   target = expand_unop (target_mode, bswap_optab, op0, target, 1);
- 
-   gcc_assert (target);
- 
-   return convert_to_mode (target_mode, target, 1);
- }
- 
- /* Expand a call to a unary builtin in EXP.
-    Return NULL_RTX if a normal call should be emitted rather than expanding the
-    function in-line.  If convenient, the result should be placed in TARGET.
-    SUBTARGET may be used as the target for computing one of EXP's operands.  */
- 
- static rtx
- expand_builtin_unop (machine_mode target_mode, tree exp, rtx target,
- 		     rtx subtarget, optab op_optab)
- {
-   rtx op0;
- 
-   if (!validate_arglist (exp, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   /* Compute the argument.  */
-   op0 = expand_expr (CALL_EXPR_ARG (exp, 0),
- 		     (subtarget
- 		      && (TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (exp, 0)))
- 			  == GET_MODE (subtarget))) ? subtarget : NULL_RTX,
- 		     VOIDmode, EXPAND_NORMAL);
-   /* Compute op, into TARGET if possible.
-      Set TARGET to wherever the result comes back.  */
-   target = expand_unop (TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (exp, 0))),
- 			op_optab, op0, target, op_optab != clrsb_optab);
-   gcc_assert (target);
- 
-   return convert_to_mode (target_mode, target, 0);
- }
- 
- /* Expand a call to __builtin_expect.  We just return our argument
-    as the builtin_expect semantic should've been already executed by
-    tree branch prediction pass. */
- 
- static rtx
- expand_builtin_expect (tree exp, rtx target)
- {
-   tree arg;
- 
-   if (call_expr_nargs (exp) < 2)
-     return const0_rtx;
-   arg = CALL_EXPR_ARG (exp, 0);
- 
-   target = expand_expr (arg, target, VOIDmode, EXPAND_NORMAL);
-   /* When guessing was done, the hints should be already stripped away.  */
-   gcc_assert (!flag_guess_branch_prob
- 	      || optimize == 0 || seen_error ());
-   return target;
- }
- 
- /* Expand a call to __builtin_expect_with_probability.  We just return our
-    argument as the builtin_expect semantic should've been already executed by
-    tree branch prediction pass.  */
- 
- static rtx
- expand_builtin_expect_with_probability (tree exp, rtx target)
- {
-   tree arg;
- 
-   if (call_expr_nargs (exp) < 3)
-     return const0_rtx;
-   arg = CALL_EXPR_ARG (exp, 0);
- 
-   target = expand_expr (arg, target, VOIDmode, EXPAND_NORMAL);
-   /* When guessing was done, the hints should be already stripped away.  */
-   gcc_assert (!flag_guess_branch_prob
- 	      || optimize == 0 || seen_error ());
-   return target;
- }
- 
- 
- /* Expand a call to __builtin_assume_aligned.  We just return our first
-    argument as the builtin_assume_aligned semantic should've been already
-    executed by CCP.  */
- 
- static rtx
- expand_builtin_assume_aligned (tree exp, rtx target)
- {
-   if (call_expr_nargs (exp) < 2)
-     return const0_rtx;
-   target = expand_expr (CALL_EXPR_ARG (exp, 0), target, VOIDmode,
- 			EXPAND_NORMAL);
-   gcc_assert (!TREE_SIDE_EFFECTS (CALL_EXPR_ARG (exp, 1))
- 	      && (call_expr_nargs (exp) < 3
- 		  || !TREE_SIDE_EFFECTS (CALL_EXPR_ARG (exp, 2))));
-   return target;
- }
- 
- void
- expand_builtin_trap (void)
- {
-   if (targetm.have_trap ())
-     {
-       rtx_insn *insn = emit_insn (targetm.gen_trap ());
-       /* For trap insns when not accumulating outgoing args force
- 	 REG_ARGS_SIZE note to prevent crossjumping of calls with
- 	 different args sizes.  */
-       if (!ACCUMULATE_OUTGOING_ARGS)
- 	add_args_size_note (insn, stack_pointer_delta);
-     }
-   else
-     {
-       tree fn = builtin_decl_implicit (BUILT_IN_ABORT);
-       tree call_expr = build_call_expr (fn, 0);
-       expand_call (call_expr, NULL_RTX, false);
-     }
- 
-   emit_barrier ();
- }
- 
- /* Expand a call to __builtin_unreachable.  We do nothing except emit
-    a barrier saying that control flow will not pass here.
- 
-    It is the responsibility of the program being compiled to ensure
-    that control flow does never reach __builtin_unreachable.  */
- static void
- expand_builtin_unreachable (void)
- {
-   emit_barrier ();
- }
- 
- /* Expand EXP, a call to fabs, fabsf or fabsl.
-    Return NULL_RTX if a normal call should be emitted rather than expanding
-    the function inline.  If convenient, the result should be placed
-    in TARGET.  SUBTARGET may be used as the target for computing
-    the operand.  */
- 
- static rtx
- expand_builtin_fabs (tree exp, rtx target, rtx subtarget)
- {
-   machine_mode mode;
-   tree arg;
-   rtx op0;
- 
-   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   arg = CALL_EXPR_ARG (exp, 0);
-   CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
-   mode = TYPE_MODE (TREE_TYPE (arg));
-   op0 = expand_expr (arg, subtarget, VOIDmode, EXPAND_NORMAL);
-   return expand_abs (mode, op0, target, 0, safe_from_p (target, arg, 1));
- }
- 
- /* Expand EXP, a call to copysign, copysignf, or copysignl.
-    Return NULL is a normal call should be emitted rather than expanding the
-    function inline.  If convenient, the result should be placed in TARGET.
-    SUBTARGET may be used as the target for computing the operand.  */
- 
- static rtx
- expand_builtin_copysign (tree exp, rtx target, rtx subtarget)
- {
-   rtx op0, op1;
-   tree arg;
- 
-   if (!validate_arglist (exp, REAL_TYPE, REAL_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   arg = CALL_EXPR_ARG (exp, 0);
-   op0 = expand_expr (arg, subtarget, VOIDmode, EXPAND_NORMAL);
- 
-   arg = CALL_EXPR_ARG (exp, 1);
-   op1 = expand_normal (arg);
- 
-   return expand_copysign (op0, op1, target);
- }
- 
- /* Emit a call to __builtin___clear_cache.  */
- 
- void
- default_emit_call_builtin___clear_cache (rtx begin, rtx end)
- {
-   rtx callee = gen_rtx_SYMBOL_REF (Pmode,
- 				   BUILTIN_ASM_NAME_PTR
- 				   (BUILT_IN_CLEAR_CACHE));
- 
-   emit_library_call (callee,
- 		     LCT_NORMAL, VOIDmode,
- 		     convert_memory_address (ptr_mode, begin), ptr_mode,
- 		     convert_memory_address (ptr_mode, end), ptr_mode);
- }
- 
- /* Emit a call to __builtin___clear_cache, unless the target specifies
-    it as do-nothing.  This function can be used by trampoline
-    finalizers to duplicate the effects of expanding a call to the
-    clear_cache builtin.  */
- 
- void
- maybe_emit_call_builtin___clear_cache (rtx begin, rtx end)
- {
-   gcc_assert ((GET_MODE (begin) == ptr_mode || GET_MODE (begin) == Pmode
- 	       || CONST_INT_P (begin))
- 	      && (GET_MODE (end) == ptr_mode || GET_MODE (end) == Pmode
- 		  || CONST_INT_P (end)));
- 
-   if (targetm.have_clear_cache ())
-     {
-       /* We have a "clear_cache" insn, and it will handle everything.  */
-       class expand_operand ops[2];
- 
-       create_address_operand (&ops[0], begin);
-       create_address_operand (&ops[1], end);
- 
-       if (maybe_expand_insn (targetm.code_for_clear_cache, 2, ops))
- 	return;
-     }
-   else
-     {
- #ifndef CLEAR_INSN_CACHE
-       /* There is no "clear_cache" insn, and __clear_cache() in libgcc
- 	 does nothing.  There is no need to call it.  Do nothing.  */
-       return;
- #endif /* CLEAR_INSN_CACHE */
-     }
- 
-   targetm.calls.emit_call_builtin___clear_cache (begin, end);
- }
- 
- /* Expand a call to __builtin___clear_cache.  */
- 
- static void
- expand_builtin___clear_cache (tree exp)
- {
-   tree begin, end;
-   rtx begin_rtx, end_rtx;
- 
-   /* We must not expand to a library call.  If we did, any
-      fallback library function in libgcc that might contain a call to
-      __builtin___clear_cache() would recurse infinitely.  */
-   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
-     {
-       error ("both arguments to %<__builtin___clear_cache%> must be pointers");
-       return;
-     }
- 
-   begin = CALL_EXPR_ARG (exp, 0);
-   begin_rtx = expand_expr (begin, NULL_RTX, Pmode, EXPAND_NORMAL);
- 
-   end = CALL_EXPR_ARG (exp, 1);
-   end_rtx = expand_expr (end, NULL_RTX, Pmode, EXPAND_NORMAL);
- 
-   maybe_emit_call_builtin___clear_cache (begin_rtx, end_rtx);
- }
- 
- /* Given a trampoline address, make sure it satisfies TRAMPOLINE_ALIGNMENT.  */
- 
- static rtx
- round_trampoline_addr (rtx tramp)
- {
-   rtx temp, addend, mask;
- 
-   /* If we don't need too much alignment, we'll have been guaranteed
-      proper alignment by get_trampoline_type.  */
-   if (TRAMPOLINE_ALIGNMENT <= STACK_BOUNDARY)
-     return tramp;
- 
-   /* Round address up to desired boundary.  */
-   temp = gen_reg_rtx (Pmode);
-   addend = gen_int_mode (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT - 1, Pmode);
-   mask = gen_int_mode (-TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT, Pmode);
- 
-   temp  = expand_simple_binop (Pmode, PLUS, tramp, addend,
- 			       temp, 0, OPTAB_LIB_WIDEN);
-   tramp = expand_simple_binop (Pmode, AND, temp, mask,
- 			       temp, 0, OPTAB_LIB_WIDEN);
- 
-   return tramp;
- }
- 
- static rtx
- expand_builtin_init_trampoline (tree exp, bool onstack)
- {
-   tree t_tramp, t_func, t_chain;
-   rtx m_tramp, r_tramp, r_chain, tmp;
- 
-   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE,
- 			 POINTER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   t_tramp = CALL_EXPR_ARG (exp, 0);
-   t_func = CALL_EXPR_ARG (exp, 1);
-   t_chain = CALL_EXPR_ARG (exp, 2);
- 
-   r_tramp = expand_normal (t_tramp);
-   m_tramp = gen_rtx_MEM (BLKmode, r_tramp);
-   MEM_NOTRAP_P (m_tramp) = 1;
- 
-   /* If ONSTACK, the TRAMP argument should be the address of a field
-      within the local function's FRAME decl.  Either way, let's see if
-      we can fill in the MEM_ATTRs for this memory.  */
-   if (TREE_CODE (t_tramp) == ADDR_EXPR)
-     set_mem_attributes (m_tramp, TREE_OPERAND (t_tramp, 0), true);
- 
-   /* Creator of a heap trampoline is responsible for making sure the
-      address is aligned to at least STACK_BOUNDARY.  Normally malloc
-      will ensure this anyhow.  */
-   tmp = round_trampoline_addr (r_tramp);
-   if (tmp != r_tramp)
-     {
-       m_tramp = change_address (m_tramp, BLKmode, tmp);
-       set_mem_align (m_tramp, TRAMPOLINE_ALIGNMENT);
-       set_mem_size (m_tramp, TRAMPOLINE_SIZE);
-     }
- 
-   /* The FUNC argument should be the address of the nested function.
-      Extract the actual function decl to pass to the hook.  */
-   gcc_assert (TREE_CODE (t_func) == ADDR_EXPR);
-   t_func = TREE_OPERAND (t_func, 0);
-   gcc_assert (TREE_CODE (t_func) == FUNCTION_DECL);
- 
-   r_chain = expand_normal (t_chain);
- 
-   /* Generate insns to initialize the trampoline.  */
-   targetm.calls.trampoline_init (m_tramp, t_func, r_chain);
- 
-   if (onstack)
-     {
-       trampolines_created = 1;
- 
-       if (targetm.calls.custom_function_descriptors != 0)
- 	warning_at (DECL_SOURCE_LOCATION (t_func), OPT_Wtrampolines,
- 		    "trampoline generated for nested function %qD", t_func);
-     }
- 
-   return const0_rtx;
- }
- 
- static rtx
- expand_builtin_adjust_trampoline (tree exp)
- {
-   rtx tramp;
- 
-   if (!validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tramp = expand_normal (CALL_EXPR_ARG (exp, 0));
-   tramp = round_trampoline_addr (tramp);
-   if (targetm.calls.trampoline_adjust_address)
-     tramp = targetm.calls.trampoline_adjust_address (tramp);
- 
-   return tramp;
- }
- 
- /* Expand a call to the builtin descriptor initialization routine.
-    A descriptor is made up of a couple of pointers to the static
-    chain and the code entry in this order.  */
- 
- static rtx
- expand_builtin_init_descriptor (tree exp)
- {
-   tree t_descr, t_func, t_chain;
-   rtx m_descr, r_descr, r_func, r_chain;
- 
-   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, POINTER_TYPE,
- 			 VOID_TYPE))
-     return NULL_RTX;
- 
-   t_descr = CALL_EXPR_ARG (exp, 0);
-   t_func = CALL_EXPR_ARG (exp, 1);
-   t_chain = CALL_EXPR_ARG (exp, 2);
- 
-   r_descr = expand_normal (t_descr);
-   m_descr = gen_rtx_MEM (BLKmode, r_descr);
-   MEM_NOTRAP_P (m_descr) = 1;
-   set_mem_align (m_descr, GET_MODE_ALIGNMENT (ptr_mode));
- 
-   r_func = expand_normal (t_func);
-   r_chain = expand_normal (t_chain);
- 
-   /* Generate insns to initialize the descriptor.  */
-   emit_move_insn (adjust_address_nv (m_descr, ptr_mode, 0), r_chain);
-   emit_move_insn (adjust_address_nv (m_descr, ptr_mode,
- 				     POINTER_SIZE / BITS_PER_UNIT), r_func);
- 
-   return const0_rtx;
- }
- 
- /* Expand a call to the builtin descriptor adjustment routine.  */
- 
- static rtx
- expand_builtin_adjust_descriptor (tree exp)
- {
-   rtx tramp;
- 
-   if (!validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tramp = expand_normal (CALL_EXPR_ARG (exp, 0));
- 
-   /* Unalign the descriptor to allow runtime identification.  */
-   tramp = plus_constant (ptr_mode, tramp,
- 			 targetm.calls.custom_function_descriptors);
- 
-   return force_operand (tramp, NULL_RTX);
- }
- 
- /* Expand the call EXP to the built-in signbit, signbitf or signbitl
-    function.  The function first checks whether the back end provides
-    an insn to implement signbit for the respective mode.  If not, it
-    checks whether the floating point format of the value is such that
-    the sign bit can be extracted.  If that is not the case, error out.
-    EXP is the expression that is a call to the builtin function; if
-    convenient, the result should be placed in TARGET.  */
- static rtx
- expand_builtin_signbit (tree exp, rtx target)
- {
-   const struct real_format *fmt;
-   scalar_float_mode fmode;
-   scalar_int_mode rmode, imode;
-   tree arg;
-   int word, bitpos;
-   enum insn_code icode;
-   rtx temp;
-   location_t loc = EXPR_LOCATION (exp);
- 
-   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   arg = CALL_EXPR_ARG (exp, 0);
-   fmode = SCALAR_FLOAT_TYPE_MODE (TREE_TYPE (arg));
-   rmode = SCALAR_INT_TYPE_MODE (TREE_TYPE (exp));
-   fmt = REAL_MODE_FORMAT (fmode);
- 
-   arg = builtin_save_expr (arg);
- 
-   /* Expand the argument yielding a RTX expression. */
-   temp = expand_normal (arg);
- 
-   /* Check if the back end provides an insn that handles signbit for the
-      argument's mode. */
-   icode = optab_handler (signbit_optab, fmode);
-   if (icode != CODE_FOR_nothing)
-     {
-       rtx_insn *last = get_last_insn ();
-       target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
-       if (maybe_emit_unop_insn (icode, target, temp, UNKNOWN))
- 	return target;
-       delete_insns_since (last);
-     }
- 
-   /* For floating point formats without a sign bit, implement signbit
-      as "ARG < 0.0".  */
-   bitpos = fmt->signbit_ro;
-   if (bitpos < 0)
-   {
-     /* But we can't do this if the format supports signed zero.  */
-     gcc_assert (!fmt->has_signed_zero || !HONOR_SIGNED_ZEROS (fmode));
- 
-     arg = fold_build2_loc (loc, LT_EXPR, TREE_TYPE (exp), arg,
- 		       build_real (TREE_TYPE (arg), dconst0));
-     return expand_expr (arg, target, VOIDmode, EXPAND_NORMAL);
-   }
- 
-   if (GET_MODE_SIZE (fmode) <= UNITS_PER_WORD)
-     {
-       imode = int_mode_for_mode (fmode).require ();
-       temp = gen_lowpart (imode, temp);
-     }
-   else
-     {
-       imode = word_mode;
-       /* Handle targets with different FP word orders.  */
-       if (FLOAT_WORDS_BIG_ENDIAN)
- 	word = (GET_MODE_BITSIZE (fmode) - bitpos) / BITS_PER_WORD;
-       else
- 	word = bitpos / BITS_PER_WORD;
-       temp = operand_subword_force (temp, word, fmode);
-       bitpos = bitpos % BITS_PER_WORD;
-     }
- 
-   /* Force the intermediate word_mode (or narrower) result into a
-      register.  This avoids attempting to create paradoxical SUBREGs
-      of floating point modes below.  */
-   temp = force_reg (imode, temp);
- 
-   /* If the bitpos is within the "result mode" lowpart, the operation
-      can be implement with a single bitwise AND.  Otherwise, we need
-      a right shift and an AND.  */
- 
-   if (bitpos < GET_MODE_BITSIZE (rmode))
-     {
-       wide_int mask = wi::set_bit_in_zero (bitpos, GET_MODE_PRECISION (rmode));
- 
-       if (GET_MODE_SIZE (imode) > GET_MODE_SIZE (rmode))
- 	temp = gen_lowpart (rmode, temp);
-       temp = expand_binop (rmode, and_optab, temp,
- 			   immed_wide_int_const (mask, rmode),
- 			   NULL_RTX, 1, OPTAB_LIB_WIDEN);
-     }
-   else
-     {
-       /* Perform a logical right shift to place the signbit in the least
- 	 significant bit, then truncate the result to the desired mode
- 	 and mask just this bit.  */
-       temp = expand_shift (RSHIFT_EXPR, imode, temp, bitpos, NULL_RTX, 1);
-       temp = gen_lowpart (rmode, temp);
-       temp = expand_binop (rmode, and_optab, temp, const1_rtx,
- 			   NULL_RTX, 1, OPTAB_LIB_WIDEN);
-     }
- 
-   return temp;
- }
- 
- /* Expand fork or exec calls.  TARGET is the desired target of the
-    call.  EXP is the call. FN is the
-    identificator of the actual function.  IGNORE is nonzero if the
-    value is to be ignored.  */
- 
- static rtx
- expand_builtin_fork_or_exec (tree fn, tree exp, rtx target, int ignore)
- {
-   tree id, decl;
-   tree call;
- 
-   if (DECL_FUNCTION_CODE (fn) != BUILT_IN_FORK)
-     {
-       tree path = CALL_EXPR_ARG (exp, 0);
-       /* Detect unterminated path.  */
-       if (!check_read_access (exp, path))
- 	return NULL_RTX;
- 
-       /* Also detect unterminated first argument.  */
-       switch (DECL_FUNCTION_CODE (fn))
- 	{
- 	case BUILT_IN_EXECL:
- 	case BUILT_IN_EXECLE:
- 	case BUILT_IN_EXECLP:
- 	  if (!check_read_access (exp, path))
- 	    return NULL_RTX;
- 	default:
- 	  break;
- 	}
-     }
- 
- 
-   /* If we are not profiling, just call the function.  */
-   if (!profile_arc_flag)
-     return NULL_RTX;
- 
-   /* Otherwise call the wrapper.  This should be equivalent for the rest of
-      compiler, so the code does not diverge, and the wrapper may run the
-      code necessary for keeping the profiling sane.  */
- 
-   switch (DECL_FUNCTION_CODE (fn))
-     {
-     case BUILT_IN_FORK:
-       id = get_identifier ("__gcov_fork");
-       break;
- 
-     case BUILT_IN_EXECL:
-       id = get_identifier ("__gcov_execl");
-       break;
- 
-     case BUILT_IN_EXECV:
-       id = get_identifier ("__gcov_execv");
-       break;
- 
-     case BUILT_IN_EXECLP:
-       id = get_identifier ("__gcov_execlp");
-       break;
- 
-     case BUILT_IN_EXECLE:
-       id = get_identifier ("__gcov_execle");
-       break;
- 
-     case BUILT_IN_EXECVP:
-       id = get_identifier ("__gcov_execvp");
-       break;
- 
-     case BUILT_IN_EXECVE:
-       id = get_identifier ("__gcov_execve");
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   decl = build_decl (DECL_SOURCE_LOCATION (fn),
- 		     FUNCTION_DECL, id, TREE_TYPE (fn));
-   DECL_EXTERNAL (decl) = 1;
-   TREE_PUBLIC (decl) = 1;
-   DECL_ARTIFICIAL (decl) = 1;
-   TREE_NOTHROW (decl) = 1;
-   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
-   DECL_VISIBILITY_SPECIFIED (decl) = 1;
-   call = rewrite_call_expr (EXPR_LOCATION (exp), exp, 0, decl, 0);
-   return expand_call (call, target, ignore);
-  }
- 
- 
- 
- /* Reconstitute a mode for a __sync intrinsic operation.  Since the type of
-    the pointer in these functions is void*, the tree optimizers may remove
-    casts.  The mode computed in expand_builtin isn't reliable either, due
-    to __sync_bool_compare_and_swap.
- 
-    FCODE_DIFF should be fcode - base, where base is the FOO_1 code for the
-    group of builtins.  This gives us log2 of the mode size.  */
- 
- static inline machine_mode
- get_builtin_sync_mode (int fcode_diff)
- {
-   /* The size is not negotiable, so ask not to get BLKmode in return
-      if the target indicates that a smaller size would be better.  */
-   return int_mode_for_size (BITS_PER_UNIT << fcode_diff, 0).require ();
- }
- 
- /* Expand the memory expression LOC and return the appropriate memory operand
-    for the builtin_sync operations.  */
- 
- static rtx
- get_builtin_sync_mem (tree loc, machine_mode mode)
- {
-   rtx addr, mem;
-   int addr_space = TYPE_ADDR_SPACE (POINTER_TYPE_P (TREE_TYPE (loc))
- 				    ? TREE_TYPE (TREE_TYPE (loc))
- 				    : TREE_TYPE (loc));
-   scalar_int_mode addr_mode = targetm.addr_space.address_mode (addr_space);
- 
-   addr = expand_expr (loc, NULL_RTX, addr_mode, EXPAND_SUM);
-   addr = convert_memory_address (addr_mode, addr);
- 
-   /* Note that we explicitly do not want any alias information for this
-      memory, so that we kill all other live memories.  Otherwise we don't
-      satisfy the full barrier semantics of the intrinsic.  */
-   mem = gen_rtx_MEM (mode, addr);
- 
-   set_mem_addr_space (mem, addr_space);
- 
-   mem = validize_mem (mem);
- 
-   /* The alignment needs to be at least according to that of the mode.  */
-   set_mem_align (mem, MAX (GET_MODE_ALIGNMENT (mode),
- 			   get_pointer_alignment (loc)));
-   set_mem_alias_set (mem, ALIAS_SET_MEMORY_BARRIER);
-   MEM_VOLATILE_P (mem) = 1;
- 
-   return mem;
- }
- 
- /* Make sure an argument is in the right mode.
-    EXP is the tree argument. 
-    MODE is the mode it should be in.  */
- 
- static rtx
- expand_expr_force_mode (tree exp, machine_mode mode)
- {
-   rtx val;
-   machine_mode old_mode;
- 
-   if (TREE_CODE (exp) == SSA_NAME
-       && TYPE_MODE (TREE_TYPE (exp)) != mode)
-     {
-       /* Undo argument promotion if possible, as combine might not
- 	 be able to do it later due to MEM_VOLATILE_P uses in the
- 	 patterns.  */
-       gimple *g = get_gimple_for_ssa_name (exp);
-       if (g && gimple_assign_cast_p (g))
- 	{
- 	  tree rhs = gimple_assign_rhs1 (g);
- 	  tree_code code = gimple_assign_rhs_code (g);
- 	  if (CONVERT_EXPR_CODE_P (code)
- 	      && TYPE_MODE (TREE_TYPE (rhs)) == mode
- 	      && INTEGRAL_TYPE_P (TREE_TYPE (exp))
- 	      && INTEGRAL_TYPE_P (TREE_TYPE (rhs))
- 	      && (TYPE_PRECISION (TREE_TYPE (exp))
- 		  > TYPE_PRECISION (TREE_TYPE (rhs))))
- 	    exp = rhs;
- 	}
-     }
- 
-   val = expand_expr (exp, NULL_RTX, mode, EXPAND_NORMAL);
-   /* If VAL is promoted to a wider mode, convert it back to MODE.  Take care
-      of CONST_INTs, where we know the old_mode only from the call argument.  */
- 
-   old_mode = GET_MODE (val);
-   if (old_mode == VOIDmode)
-     old_mode = TYPE_MODE (TREE_TYPE (exp));
-   val = convert_modes (mode, old_mode, val, 1);
-   return val;
- }
- 
- 
- /* Expand the __sync_xxx_and_fetch and __sync_fetch_and_xxx intrinsics.
-    EXP is the CALL_EXPR.  CODE is the rtx code
-    that corresponds to the arithmetic or logical operation from the name;
-    an exception here is that NOT actually means NAND.  TARGET is an optional
-    place for us to store the results; AFTER is true if this is the
-    fetch_and_xxx form.  */
- 
- static rtx
- expand_builtin_sync_operation (machine_mode mode, tree exp,
- 			       enum rtx_code code, bool after,
- 			       rtx target)
- {
-   rtx val, mem;
-   location_t loc = EXPR_LOCATION (exp);
- 
-   if (code == NOT && warn_sync_nand)
-     {
-       tree fndecl = get_callee_fndecl (exp);
-       enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
- 
-       static bool warned_f_a_n, warned_n_a_f;
- 
-       switch (fcode)
- 	{
- 	case BUILT_IN_SYNC_FETCH_AND_NAND_1:
- 	case BUILT_IN_SYNC_FETCH_AND_NAND_2:
- 	case BUILT_IN_SYNC_FETCH_AND_NAND_4:
- 	case BUILT_IN_SYNC_FETCH_AND_NAND_8:
- 	case BUILT_IN_SYNC_FETCH_AND_NAND_16:
- 	  if (warned_f_a_n)
- 	    break;
- 
- 	  fndecl = builtin_decl_implicit (BUILT_IN_SYNC_FETCH_AND_NAND_N);
- 	  inform (loc, "%qD changed semantics in GCC 4.4", fndecl);
- 	  warned_f_a_n = true;
- 	  break;
- 
- 	case BUILT_IN_SYNC_NAND_AND_FETCH_1:
- 	case BUILT_IN_SYNC_NAND_AND_FETCH_2:
- 	case BUILT_IN_SYNC_NAND_AND_FETCH_4:
- 	case BUILT_IN_SYNC_NAND_AND_FETCH_8:
- 	case BUILT_IN_SYNC_NAND_AND_FETCH_16:
- 	  if (warned_n_a_f)
- 	    break;
- 
- 	 fndecl = builtin_decl_implicit (BUILT_IN_SYNC_NAND_AND_FETCH_N);
- 	  inform (loc, "%qD changed semantics in GCC 4.4", fndecl);
- 	  warned_n_a_f = true;
- 	  break;
- 
- 	default:
- 	  gcc_unreachable ();
- 	}
-     }
- 
-   /* Expand the operands.  */
-   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
-   val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
- 
-   return expand_atomic_fetch_op (target, mem, val, code, MEMMODEL_SYNC_SEQ_CST,
- 				 after);
- }
- 
- /* Expand the __sync_val_compare_and_swap and __sync_bool_compare_and_swap
-    intrinsics. EXP is the CALL_EXPR.  IS_BOOL is
-    true if this is the boolean form.  TARGET is a place for us to store the
-    results; this is NOT optional if IS_BOOL is true.  */
- 
- static rtx
- expand_builtin_compare_and_swap (machine_mode mode, tree exp,
- 				 bool is_bool, rtx target)
- {
-   rtx old_val, new_val, mem;
-   rtx *pbool, *poval;
- 
-   /* Expand the operands.  */
-   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
-   old_val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
-   new_val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 2), mode);
- 
-   pbool = poval = NULL;
-   if (target != const0_rtx)
-     {
-       if (is_bool)
- 	pbool = &target;
-       else
- 	poval = &target;
-     }
-   if (!expand_atomic_compare_and_swap (pbool, poval, mem, old_val, new_val,
- 				       false, MEMMODEL_SYNC_SEQ_CST,
- 				       MEMMODEL_SYNC_SEQ_CST))
-     return NULL_RTX;
- 
-   return target;
- }
- 
- /* Expand the __sync_lock_test_and_set intrinsic.  Note that the most
-    general form is actually an atomic exchange, and some targets only
-    support a reduced form with the second argument being a constant 1.
-    EXP is the CALL_EXPR; TARGET is an optional place for us to store
-    the results.  */
- 
- static rtx
- expand_builtin_sync_lock_test_and_set (machine_mode mode, tree exp,
- 				       rtx target)
- {
-   rtx val, mem;
- 
-   /* Expand the operands.  */
-   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
-   val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
- 
-   return expand_sync_lock_test_and_set (target, mem, val);
- }
- 
- /* Expand the __sync_lock_release intrinsic.  EXP is the CALL_EXPR.  */
- 
- static void
- expand_builtin_sync_lock_release (machine_mode mode, tree exp)
- {
-   rtx mem;
- 
-   /* Expand the operands.  */
-   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
- 
-   expand_atomic_store (mem, const0_rtx, MEMMODEL_SYNC_RELEASE, true);
- }
- 
- /* Given an integer representing an ``enum memmodel'', verify its
-    correctness and return the memory model enum.  */
- 
- static enum memmodel
- get_memmodel (tree exp)
- {
-   rtx op;
-   unsigned HOST_WIDE_INT val;
-   location_t loc
-     = expansion_point_location_if_in_system_header (input_location);
- 
-   /* If the parameter is not a constant, it's a run time value so we'll just
-      convert it to MEMMODEL_SEQ_CST to avoid annoying runtime checking.  */
-   if (TREE_CODE (exp) != INTEGER_CST)
-     return MEMMODEL_SEQ_CST;
- 
-   op = expand_normal (exp);
- 
-   val = INTVAL (op);
-   if (targetm.memmodel_check)
-     val = targetm.memmodel_check (val);
-   else if (val & ~MEMMODEL_MASK)
-     {
-       warning_at (loc, OPT_Winvalid_memory_model,
- 		  "unknown architecture specifier in memory model to builtin");
-       return MEMMODEL_SEQ_CST;
-     }
- 
-   /* Should never see a user explicit SYNC memodel model, so >= LAST works. */
-   if (memmodel_base (val) >= MEMMODEL_LAST)
-     {
-       warning_at (loc, OPT_Winvalid_memory_model,
- 		  "invalid memory model argument to builtin");
-       return MEMMODEL_SEQ_CST;
-     }
- 
-   /* Workaround for Bugzilla 59448. GCC doesn't track consume properly, so
-      be conservative and promote consume to acquire.  */
-   if (val == MEMMODEL_CONSUME)
-     val = MEMMODEL_ACQUIRE;
- 
-   return (enum memmodel) val;
- }
- 
- /* Expand the __atomic_exchange intrinsic:
-    	TYPE __atomic_exchange (TYPE *object, TYPE desired, enum memmodel)
-    EXP is the CALL_EXPR.
-    TARGET is an optional place for us to store the results.  */
- 
- static rtx
- expand_builtin_atomic_exchange (machine_mode mode, tree exp, rtx target)
- {
-   rtx val, mem;
-   enum memmodel model;
- 
-   model = get_memmodel (CALL_EXPR_ARG (exp, 2));
- 
-   if (!flag_inline_atomics)
-     return NULL_RTX;
- 
-   /* Expand the operands.  */
-   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
-   val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
- 
-   return expand_atomic_exchange (target, mem, val, model);
- }
- 
- /* Expand the __atomic_compare_exchange intrinsic:
-    	bool __atomic_compare_exchange (TYPE *object, TYPE *expect, 
- 					TYPE desired, BOOL weak, 
- 					enum memmodel success,
- 					enum memmodel failure)
-    EXP is the CALL_EXPR.
-    TARGET is an optional place for us to store the results.  */
- 
- static rtx
- expand_builtin_atomic_compare_exchange (machine_mode mode, tree exp, 
- 					rtx target)
- {
-   rtx expect, desired, mem, oldval;
-   rtx_code_label *label;
-   enum memmodel success, failure;
-   tree weak;
-   bool is_weak;
-   location_t loc
-     = expansion_point_location_if_in_system_header (input_location);
- 
-   success = get_memmodel (CALL_EXPR_ARG (exp, 4));
-   failure = get_memmodel (CALL_EXPR_ARG (exp, 5));
- 
-   if (failure > success)
-     {
-       warning_at (loc, OPT_Winvalid_memory_model,
- 		  "failure memory model cannot be stronger than success "
- 		  "memory model for %<__atomic_compare_exchange%>");
-       success = MEMMODEL_SEQ_CST;
-     }
-  
-   if (is_mm_release (failure) || is_mm_acq_rel (failure))
-     {
-       warning_at (loc, OPT_Winvalid_memory_model,
- 		  "invalid failure memory model for "
- 		  "%<__atomic_compare_exchange%>");
-       failure = MEMMODEL_SEQ_CST;
-       success = MEMMODEL_SEQ_CST;
-     }
- 
-  
-   if (!flag_inline_atomics)
-     return NULL_RTX;
- 
-   /* Expand the operands.  */
-   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
- 
-   expect = expand_normal (CALL_EXPR_ARG (exp, 1));
-   expect = convert_memory_address (Pmode, expect);
-   expect = gen_rtx_MEM (mode, expect);
-   desired = expand_expr_force_mode (CALL_EXPR_ARG (exp, 2), mode);
- 
-   weak = CALL_EXPR_ARG (exp, 3);
-   is_weak = false;
-   if (tree_fits_shwi_p (weak) && tree_to_shwi (weak) != 0)
-     is_weak = true;
- 
-   if (target == const0_rtx)
-     target = NULL;
- 
-   /* Lest the rtl backend create a race condition with an imporoper store
-      to memory, always create a new pseudo for OLDVAL.  */
-   oldval = NULL;
- 
-   if (!expand_atomic_compare_and_swap (&target, &oldval, mem, expect, desired,
- 				       is_weak, success, failure))
-     return NULL_RTX;
- 
-   /* Conditionally store back to EXPECT, lest we create a race condition
-      with an improper store to memory.  */
-   /* ??? With a rearrangement of atomics at the gimple level, we can handle
-      the normal case where EXPECT is totally private, i.e. a register.  At
-      which point the store can be unconditional.  */
-   label = gen_label_rtx ();
-   emit_cmp_and_jump_insns (target, const0_rtx, NE, NULL,
- 			   GET_MODE (target), 1, label);
-   emit_move_insn (expect, oldval);
-   emit_label (label);
- 
-   return target;
- }
- 
- /* Helper function for expand_ifn_atomic_compare_exchange - expand
-    internal ATOMIC_COMPARE_EXCHANGE call into __atomic_compare_exchange_N
-    call.  The weak parameter must be dropped to match the expected parameter
-    list and the expected argument changed from value to pointer to memory
-    slot.  */
- 
- static void
- expand_ifn_atomic_compare_exchange_into_call (gcall *call, machine_mode mode)
- {
-   unsigned int z;
-   vec<tree, va_gc> *vec;
- 
-   vec_alloc (vec, 5);
-   vec->quick_push (gimple_call_arg (call, 0));
-   tree expected = gimple_call_arg (call, 1);
-   rtx x = assign_stack_temp_for_type (mode, GET_MODE_SIZE (mode),
- 				      TREE_TYPE (expected));
-   rtx expd = expand_expr (expected, x, mode, EXPAND_NORMAL);
-   if (expd != x)
-     emit_move_insn (x, expd);
-   tree v = make_tree (TREE_TYPE (expected), x);
-   vec->quick_push (build1 (ADDR_EXPR,
- 			   build_pointer_type (TREE_TYPE (expected)), v));
-   vec->quick_push (gimple_call_arg (call, 2));
-   /* Skip the boolean weak parameter.  */
-   for (z = 4; z < 6; z++)
-     vec->quick_push (gimple_call_arg (call, z));
-   /* At present we only have BUILT_IN_ATOMIC_COMPARE_EXCHANGE_{1,2,4,8,16}.  */
-   unsigned int bytes_log2 = exact_log2 (GET_MODE_SIZE (mode).to_constant ());
-   gcc_assert (bytes_log2 < 5);
-   built_in_function fncode
-     = (built_in_function) ((int) BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1
- 			   + bytes_log2);
-   tree fndecl = builtin_decl_explicit (fncode);
-   tree fn = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fndecl)),
- 		    fndecl);
-   tree exp = build_call_vec (boolean_type_node, fn, vec);
-   tree lhs = gimple_call_lhs (call);
-   rtx boolret = expand_call (exp, NULL_RTX, lhs == NULL_TREE);
-   if (lhs)
-     {
-       rtx target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
-       if (GET_MODE (boolret) != mode)
- 	boolret = convert_modes (mode, GET_MODE (boolret), boolret, 1);
-       x = force_reg (mode, x);
-       write_complex_part (target, boolret, true);
-       write_complex_part (target, x, false);
-     }
- }
- 
- /* Expand IFN_ATOMIC_COMPARE_EXCHANGE internal function.  */
- 
- void
- expand_ifn_atomic_compare_exchange (gcall *call)
- {
-   int size = tree_to_shwi (gimple_call_arg (call, 3)) & 255;
-   gcc_assert (size == 1 || size == 2 || size == 4 || size == 8 || size == 16);
-   machine_mode mode = int_mode_for_size (BITS_PER_UNIT * size, 0).require ();
-   rtx expect, desired, mem, oldval, boolret;
-   enum memmodel success, failure;
-   tree lhs;
-   bool is_weak;
-   location_t loc
-     = expansion_point_location_if_in_system_header (gimple_location (call));
- 
-   success = get_memmodel (gimple_call_arg (call, 4));
-   failure = get_memmodel (gimple_call_arg (call, 5));
- 
-   if (failure > success)
-     {
-       warning_at (loc, OPT_Winvalid_memory_model,
- 		  "failure memory model cannot be stronger than success "
- 		  "memory model for %<__atomic_compare_exchange%>");
-       success = MEMMODEL_SEQ_CST;
-     }
- 
-   if (is_mm_release (failure) || is_mm_acq_rel (failure))
-     {
-       warning_at (loc, OPT_Winvalid_memory_model,
- 		  "invalid failure memory model for "
- 		  "%<__atomic_compare_exchange%>");
-       failure = MEMMODEL_SEQ_CST;
-       success = MEMMODEL_SEQ_CST;
-     }
- 
-   if (!flag_inline_atomics)
-     {
-       expand_ifn_atomic_compare_exchange_into_call (call, mode);
-       return;
-     }
- 
-   /* Expand the operands.  */
-   mem = get_builtin_sync_mem (gimple_call_arg (call, 0), mode);
- 
-   expect = expand_expr_force_mode (gimple_call_arg (call, 1), mode);
-   desired = expand_expr_force_mode (gimple_call_arg (call, 2), mode);
- 
-   is_weak = (tree_to_shwi (gimple_call_arg (call, 3)) & 256) != 0;
- 
-   boolret = NULL;
-   oldval = NULL;
- 
-   if (!expand_atomic_compare_and_swap (&boolret, &oldval, mem, expect, desired,
- 				       is_weak, success, failure))
-     {
-       expand_ifn_atomic_compare_exchange_into_call (call, mode);
-       return;
-     }
- 
-   lhs = gimple_call_lhs (call);
-   if (lhs)
-     {
-       rtx target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
-       if (GET_MODE (boolret) != mode)
- 	boolret = convert_modes (mode, GET_MODE (boolret), boolret, 1);
-       write_complex_part (target, boolret, true);
-       write_complex_part (target, oldval, false);
-     }
- }
- 
- /* Expand the __atomic_load intrinsic:
-    	TYPE __atomic_load (TYPE *object, enum memmodel)
-    EXP is the CALL_EXPR.
-    TARGET is an optional place for us to store the results.  */
- 
- static rtx
- expand_builtin_atomic_load (machine_mode mode, tree exp, rtx target)
- {
-   rtx mem;
-   enum memmodel model;
- 
-   model = get_memmodel (CALL_EXPR_ARG (exp, 1));
-   if (is_mm_release (model) || is_mm_acq_rel (model))
-     {
-       location_t loc
- 	= expansion_point_location_if_in_system_header (input_location);
-       warning_at (loc, OPT_Winvalid_memory_model,
- 		  "invalid memory model for %<__atomic_load%>");
-       model = MEMMODEL_SEQ_CST;
-     }
- 
-   if (!flag_inline_atomics)
-     return NULL_RTX;
- 
-   /* Expand the operand.  */
-   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
- 
-   return expand_atomic_load (target, mem, model);
- }
- 
- 
- /* Expand the __atomic_store intrinsic:
-    	void __atomic_store (TYPE *object, TYPE desired, enum memmodel)
-    EXP is the CALL_EXPR.
-    TARGET is an optional place for us to store the results.  */
- 
- static rtx
- expand_builtin_atomic_store (machine_mode mode, tree exp)
- {
-   rtx mem, val;
-   enum memmodel model;
- 
-   model = get_memmodel (CALL_EXPR_ARG (exp, 2));
-   if (!(is_mm_relaxed (model) || is_mm_seq_cst (model)
- 	|| is_mm_release (model)))
-     {
-       location_t loc
- 	= expansion_point_location_if_in_system_header (input_location);
-       warning_at (loc, OPT_Winvalid_memory_model,
- 		  "invalid memory model for %<__atomic_store%>");
-       model = MEMMODEL_SEQ_CST;
-     }
- 
-   if (!flag_inline_atomics)
-     return NULL_RTX;
- 
-   /* Expand the operands.  */
-   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
-   val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
- 
-   return expand_atomic_store (mem, val, model, false);
- }
- 
- /* Expand the __atomic_fetch_XXX intrinsic:
-    	TYPE __atomic_fetch_XXX (TYPE *object, TYPE val, enum memmodel)
-    EXP is the CALL_EXPR.
-    TARGET is an optional place for us to store the results.
-    CODE is the operation, PLUS, MINUS, ADD, XOR, or IOR.
-    FETCH_AFTER is true if returning the result of the operation.
-    FETCH_AFTER is false if returning the value before the operation.
-    IGNORE is true if the result is not used.
-    EXT_CALL is the correct builtin for an external call if this cannot be
-    resolved to an instruction sequence.  */
- 
- static rtx
- expand_builtin_atomic_fetch_op (machine_mode mode, tree exp, rtx target,
- 				enum rtx_code code, bool fetch_after,
- 				bool ignore, enum built_in_function ext_call)
- {
-   rtx val, mem, ret;
-   enum memmodel model;
-   tree fndecl;
-   tree addr;
- 
-   model = get_memmodel (CALL_EXPR_ARG (exp, 2));
- 
-   /* Expand the operands.  */
-   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
-   val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
- 
-   /* Only try generating instructions if inlining is turned on.  */
-   if (flag_inline_atomics)
-     {
-       ret = expand_atomic_fetch_op (target, mem, val, code, model, fetch_after);
-       if (ret)
- 	return ret;
-     }
- 
-   /* Return if a different routine isn't needed for the library call.  */
-   if (ext_call == BUILT_IN_NONE)
-     return NULL_RTX;
- 
-   /* Change the call to the specified function.  */
-   fndecl = get_callee_fndecl (exp);
-   addr = CALL_EXPR_FN (exp);
-   STRIP_NOPS (addr);
- 
-   gcc_assert (TREE_OPERAND (addr, 0) == fndecl);
-   TREE_OPERAND (addr, 0) = builtin_decl_explicit (ext_call);
- 
-   /* If we will emit code after the call, the call cannot be a tail call.
-      If it is emitted as a tail call, a barrier is emitted after it, and
-      then all trailing code is removed.  */
-   if (!ignore)
-     CALL_EXPR_TAILCALL (exp) = 0;
- 
-   /* Expand the call here so we can emit trailing code.  */
-   ret = expand_call (exp, target, ignore);
- 
-   /* Replace the original function just in case it matters.  */
-   TREE_OPERAND (addr, 0) = fndecl;
- 
-   /* Then issue the arithmetic correction to return the right result.  */
-   if (!ignore)
-     {
-       if (code == NOT)
- 	{
- 	  ret = expand_simple_binop (mode, AND, ret, val, NULL_RTX, true,
- 				     OPTAB_LIB_WIDEN);
- 	  ret = expand_simple_unop (mode, NOT, ret, target, true);
- 	}
-       else
- 	ret = expand_simple_binop (mode, code, ret, val, target, true,
- 				   OPTAB_LIB_WIDEN);
-     }
-   return ret;
- }
- 
- /* Expand IFN_ATOMIC_BIT_TEST_AND_* internal function.  */
- 
- void
- expand_ifn_atomic_bit_test_and (gcall *call)
- {
-   tree ptr = gimple_call_arg (call, 0);
-   tree bit = gimple_call_arg (call, 1);
-   tree flag = gimple_call_arg (call, 2);
-   tree lhs = gimple_call_lhs (call);
-   enum memmodel model = MEMMODEL_SYNC_SEQ_CST;
-   machine_mode mode = TYPE_MODE (TREE_TYPE (flag));
-   enum rtx_code code;
-   optab optab;
-   class expand_operand ops[5];
- 
-   gcc_assert (flag_inline_atomics);
- 
-   if (gimple_call_num_args (call) == 4)
-     model = get_memmodel (gimple_call_arg (call, 3));
- 
-   rtx mem = get_builtin_sync_mem (ptr, mode);
-   rtx val = expand_expr_force_mode (bit, mode);
- 
-   switch (gimple_call_internal_fn (call))
-     {
-     case IFN_ATOMIC_BIT_TEST_AND_SET:
-       code = IOR;
-       optab = atomic_bit_test_and_set_optab;
-       break;
-     case IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT:
-       code = XOR;
-       optab = atomic_bit_test_and_complement_optab;
-       break;
-     case IFN_ATOMIC_BIT_TEST_AND_RESET:
-       code = AND;
-       optab = atomic_bit_test_and_reset_optab;
-       break;
-     default:
-       gcc_unreachable ();
-     }
- 
-   if (lhs == NULL_TREE)
-     {
-       val = expand_simple_binop (mode, ASHIFT, const1_rtx,
- 				 val, NULL_RTX, true, OPTAB_DIRECT);
-       if (code == AND)
- 	val = expand_simple_unop (mode, NOT, val, NULL_RTX, true);
-       expand_atomic_fetch_op (const0_rtx, mem, val, code, model, false);
-       return;
-     }
- 
-   rtx target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
-   enum insn_code icode = direct_optab_handler (optab, mode);
-   gcc_assert (icode != CODE_FOR_nothing);
-   create_output_operand (&ops[0], target, mode);
-   create_fixed_operand (&ops[1], mem);
-   create_convert_operand_to (&ops[2], val, mode, true);
-   create_integer_operand (&ops[3], model);
-   create_integer_operand (&ops[4], integer_onep (flag));
-   if (maybe_expand_insn (icode, 5, ops))
-     return;
- 
-   rtx bitval = val;
-   val = expand_simple_binop (mode, ASHIFT, const1_rtx,
- 			     val, NULL_RTX, true, OPTAB_DIRECT);
-   rtx maskval = val;
-   if (code == AND)
-     val = expand_simple_unop (mode, NOT, val, NULL_RTX, true);
-   rtx result = expand_atomic_fetch_op (gen_reg_rtx (mode), mem, val,
- 				       code, model, false);
-   if (integer_onep (flag))
-     {
-       result = expand_simple_binop (mode, ASHIFTRT, result, bitval,
- 				    NULL_RTX, true, OPTAB_DIRECT);
-       result = expand_simple_binop (mode, AND, result, const1_rtx, target,
- 				    true, OPTAB_DIRECT);
-     }
-   else
-     result = expand_simple_binop (mode, AND, result, maskval, target, true,
- 				  OPTAB_DIRECT);
-   if (result != target)
-     emit_move_insn (target, result);
- }
- 
- /* Expand an atomic clear operation.
- 	void _atomic_clear (BOOL *obj, enum memmodel)
-    EXP is the call expression.  */
- 
- static rtx
- expand_builtin_atomic_clear (tree exp) 
- {
-   machine_mode mode;
-   rtx mem, ret;
-   enum memmodel model;
- 
-   mode = int_mode_for_size (BOOL_TYPE_SIZE, 0).require ();
-   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
-   model = get_memmodel (CALL_EXPR_ARG (exp, 1));
- 
-   if (is_mm_consume (model) || is_mm_acquire (model) || is_mm_acq_rel (model))
-     {
-       location_t loc
- 	= expansion_point_location_if_in_system_header (input_location);
-       warning_at (loc, OPT_Winvalid_memory_model,
- 		  "invalid memory model for %<__atomic_store%>");
-       model = MEMMODEL_SEQ_CST;
-     }
- 
-   /* Try issuing an __atomic_store, and allow fallback to __sync_lock_release.
-      Failing that, a store is issued by __atomic_store.  The only way this can
-      fail is if the bool type is larger than a word size.  Unlikely, but
-      handle it anyway for completeness.  Assume a single threaded model since
-      there is no atomic support in this case, and no barriers are required.  */
-   ret = expand_atomic_store (mem, const0_rtx, model, true);
-   if (!ret)
-     emit_move_insn (mem, const0_rtx);
-   return const0_rtx;
- }
- 
- /* Expand an atomic test_and_set operation.
- 	bool _atomic_test_and_set (BOOL *obj, enum memmodel)
-    EXP is the call expression.  */
- 
- static rtx
- expand_builtin_atomic_test_and_set (tree exp, rtx target)
- {
-   rtx mem;
-   enum memmodel model;
-   machine_mode mode;
- 
-   mode = int_mode_for_size (BOOL_TYPE_SIZE, 0).require ();
-   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
-   model = get_memmodel (CALL_EXPR_ARG (exp, 1));
- 
-   return expand_atomic_test_and_set (target, mem, model);
- }
- 
- 
- /* Return true if (optional) argument ARG1 of size ARG0 is always lock free on
-    this architecture.  If ARG1 is NULL, use typical alignment for size ARG0.  */
- 
- static tree
- fold_builtin_atomic_always_lock_free (tree arg0, tree arg1)
- {
-   int size;
-   machine_mode mode;
-   unsigned int mode_align, type_align;
- 
-   if (TREE_CODE (arg0) != INTEGER_CST)
-     return NULL_TREE;
- 
-   /* We need a corresponding integer mode for the access to be lock-free.  */
-   size = INTVAL (expand_normal (arg0)) * BITS_PER_UNIT;
-   if (!int_mode_for_size (size, 0).exists (&mode))
-     return boolean_false_node;
- 
-   mode_align = GET_MODE_ALIGNMENT (mode);
- 
-   if (TREE_CODE (arg1) == INTEGER_CST)
-     {
-       unsigned HOST_WIDE_INT val = UINTVAL (expand_normal (arg1));
- 
-       /* Either this argument is null, or it's a fake pointer encoding
-          the alignment of the object.  */
-       val = least_bit_hwi (val);
-       val *= BITS_PER_UNIT;
- 
-       if (val == 0 || mode_align < val)
-         type_align = mode_align;
-       else
-         type_align = val;
-     }
-   else
-     {
-       tree ttype = TREE_TYPE (arg1);
- 
-       /* This function is usually invoked and folded immediately by the front
- 	 end before anything else has a chance to look at it.  The pointer
- 	 parameter at this point is usually cast to a void *, so check for that
- 	 and look past the cast.  */
-       if (CONVERT_EXPR_P (arg1)
- 	  && POINTER_TYPE_P (ttype)
- 	  && VOID_TYPE_P (TREE_TYPE (ttype))
- 	  && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (arg1, 0))))
- 	arg1 = TREE_OPERAND (arg1, 0);
- 
-       ttype = TREE_TYPE (arg1);
-       gcc_assert (POINTER_TYPE_P (ttype));
- 
-       /* Get the underlying type of the object.  */
-       ttype = TREE_TYPE (ttype);
-       type_align = TYPE_ALIGN (ttype);
-     }
- 
-   /* If the object has smaller alignment, the lock free routines cannot
-      be used.  */
-   if (type_align < mode_align)
-     return boolean_false_node;
- 
-   /* Check if a compare_and_swap pattern exists for the mode which represents
-      the required size.  The pattern is not allowed to fail, so the existence
-      of the pattern indicates support is present.  Also require that an
-      atomic load exists for the required size.  */
-   if (can_compare_and_swap_p (mode, true) && can_atomic_load_p (mode))
-     return boolean_true_node;
-   else
-     return boolean_false_node;
- }
- 
- /* Return true if the parameters to call EXP represent an object which will
-    always generate lock free instructions.  The first argument represents the
-    size of the object, and the second parameter is a pointer to the object 
-    itself.  If NULL is passed for the object, then the result is based on 
-    typical alignment for an object of the specified size.  Otherwise return 
-    false.  */
- 
- static rtx
- expand_builtin_atomic_always_lock_free (tree exp)
- {
-   tree size;
-   tree arg0 = CALL_EXPR_ARG (exp, 0);
-   tree arg1 = CALL_EXPR_ARG (exp, 1);
- 
-   if (TREE_CODE (arg0) != INTEGER_CST)
-     {
-       error ("non-constant argument 1 to %qs", "__atomic_always_lock_free");
-       return const0_rtx;
-     }
- 
-   size = fold_builtin_atomic_always_lock_free (arg0, arg1);
-   if (size == boolean_true_node)
-     return const1_rtx;
-   return const0_rtx;
- }
- 
- /* Return a one or zero if it can be determined that object ARG1 of size ARG 
-    is lock free on this architecture.  */
- 
- static tree
- fold_builtin_atomic_is_lock_free (tree arg0, tree arg1)
- {
-   if (!flag_inline_atomics)
-     return NULL_TREE;
-   
-   /* If it isn't always lock free, don't generate a result.  */
-   if (fold_builtin_atomic_always_lock_free (arg0, arg1) == boolean_true_node)
-     return boolean_true_node;
- 
-   return NULL_TREE;
- }
- 
- /* Return true if the parameters to call EXP represent an object which will
-    always generate lock free instructions.  The first argument represents the
-    size of the object, and the second parameter is a pointer to the object 
-    itself.  If NULL is passed for the object, then the result is based on 
-    typical alignment for an object of the specified size.  Otherwise return 
-    NULL*/
- 
- static rtx
- expand_builtin_atomic_is_lock_free (tree exp)
- {
-   tree size;
-   tree arg0 = CALL_EXPR_ARG (exp, 0);
-   tree arg1 = CALL_EXPR_ARG (exp, 1);
- 
-   if (!INTEGRAL_TYPE_P (TREE_TYPE (arg0)))
-     {
-       error ("non-integer argument 1 to %qs", "__atomic_is_lock_free");
-       return NULL_RTX;
-     }
- 
-   if (!flag_inline_atomics)
-     return NULL_RTX; 
- 
-   /* If the value is known at compile time, return the RTX for it.  */
-   size = fold_builtin_atomic_is_lock_free (arg0, arg1);
-   if (size == boolean_true_node)
-     return const1_rtx;
- 
-   return NULL_RTX;
- }
- 
- /* Expand the __atomic_thread_fence intrinsic:
-    	void __atomic_thread_fence (enum memmodel)
-    EXP is the CALL_EXPR.  */
- 
- static void
- expand_builtin_atomic_thread_fence (tree exp)
- {
-   enum memmodel model = get_memmodel (CALL_EXPR_ARG (exp, 0));
-   expand_mem_thread_fence (model);
- }
- 
- /* Expand the __atomic_signal_fence intrinsic:
-    	void __atomic_signal_fence (enum memmodel)
-    EXP is the CALL_EXPR.  */
- 
- static void
- expand_builtin_atomic_signal_fence (tree exp)
- {
-   enum memmodel model = get_memmodel (CALL_EXPR_ARG (exp, 0));
-   expand_mem_signal_fence (model);
- }
- 
- /* Expand the __sync_synchronize intrinsic.  */
- 
- static void
- expand_builtin_sync_synchronize (void)
- {
-   expand_mem_thread_fence (MEMMODEL_SYNC_SEQ_CST);
- }
- 
- static rtx
- expand_builtin_thread_pointer (tree exp, rtx target)
- {
-   enum insn_code icode;
-   if (!validate_arglist (exp, VOID_TYPE))
-     return const0_rtx;
-   icode = direct_optab_handler (get_thread_pointer_optab, Pmode);
-   if (icode != CODE_FOR_nothing)
-     {
-       class expand_operand op;
-       /* If the target is not sutitable then create a new target. */
-       if (target == NULL_RTX
- 	  || !REG_P (target)
- 	  || GET_MODE (target) != Pmode)
- 	target = gen_reg_rtx (Pmode);
-       create_output_operand (&op, target, Pmode);
-       expand_insn (icode, 1, &op);
-       return target;
-     }
-   error ("%<__builtin_thread_pointer%> is not supported on this target");
-   return const0_rtx;
- }
- 
- static void
- expand_builtin_set_thread_pointer (tree exp)
- {
-   enum insn_code icode;
-   if (!validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
-     return;
-   icode = direct_optab_handler (set_thread_pointer_optab, Pmode);
-   if (icode != CODE_FOR_nothing)
-     {
-       class expand_operand op;
-       rtx val = expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX,
- 			     Pmode, EXPAND_NORMAL);      
-       create_input_operand (&op, val, Pmode);
-       expand_insn (icode, 1, &op);
-       return;
-     }
-   error ("%<__builtin_set_thread_pointer%> is not supported on this target");
- }
- 
- 
- /* Emit code to restore the current value of stack.  */
- 
- static void
- expand_stack_restore (tree var)
- {
-   rtx_insn *prev;
-   rtx sa = expand_normal (var);
- 
-   sa = convert_memory_address (Pmode, sa);
- 
-   prev = get_last_insn ();
-   emit_stack_restore (SAVE_BLOCK, sa);
- 
-   record_new_stack_level ();
- 
-   fixup_args_size_notes (prev, get_last_insn (), 0);
- }
- 
- /* Emit code to save the current value of stack.  */
- 
- static rtx
- expand_stack_save (void)
- {
-   rtx ret = NULL_RTX;
- 
-   emit_stack_save (SAVE_BLOCK, &ret);
-   return ret;
- }
- 
- /* Emit code to get the openacc gang, worker or vector id or size.  */
- 
- static rtx
- expand_builtin_goacc_parlevel_id_size (tree exp, rtx target, int ignore)
- {
-   const char *name;
-   rtx fallback_retval;
-   rtx_insn *(*gen_fn) (rtx, rtx);
-   switch (DECL_FUNCTION_CODE (get_callee_fndecl (exp)))
-     {
-     case BUILT_IN_GOACC_PARLEVEL_ID:
-       name = "__builtin_goacc_parlevel_id";
-       fallback_retval = const0_rtx;
-       gen_fn = targetm.gen_oacc_dim_pos;
-       break;
-     case BUILT_IN_GOACC_PARLEVEL_SIZE:
-       name = "__builtin_goacc_parlevel_size";
-       fallback_retval = const1_rtx;
-       gen_fn = targetm.gen_oacc_dim_size;
-       break;
-     default:
-       gcc_unreachable ();
-     }
- 
-   if (oacc_get_fn_attrib (current_function_decl) == NULL_TREE)
-     {
-       error ("%qs only supported in OpenACC code", name);
-       return const0_rtx;
-     }
- 
-   tree arg = CALL_EXPR_ARG (exp, 0);
-   if (TREE_CODE (arg) != INTEGER_CST)
-     {
-       error ("non-constant argument 0 to %qs", name);
-       return const0_rtx;
-     }
- 
-   int dim = TREE_INT_CST_LOW (arg);
-   switch (dim)
-     {
-     case GOMP_DIM_GANG:
-     case GOMP_DIM_WORKER:
-     case GOMP_DIM_VECTOR:
-       break;
-     default:
-       error ("illegal argument 0 to %qs", name);
-       return const0_rtx;
-     }
- 
-   if (ignore)
-     return target;
- 
-   if (target == NULL_RTX)
-     target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
- 
-   if (!targetm.have_oacc_dim_size ())
-     {
-       emit_move_insn (target, fallback_retval);
-       return target;
-     }
- 
-   rtx reg = MEM_P (target) ? gen_reg_rtx (GET_MODE (target)) : target;
-   emit_insn (gen_fn (reg, GEN_INT (dim)));
-   if (reg != target)
-     emit_move_insn (target, reg);
- 
-   return target;
- }
- 
- /* Expand a string compare operation using a sequence of char comparison
-    to get rid of the calling overhead, with result going to TARGET if
-    that's convenient.
- 
-    VAR_STR is the variable string source;
-    CONST_STR is the constant string source;
-    LENGTH is the number of chars to compare;
-    CONST_STR_N indicates which source string is the constant string;
-    IS_MEMCMP indicates whether it's a memcmp or strcmp.
-   
-    to: (assume const_str_n is 2, i.e., arg2 is a constant string)
- 
-    target = (int) (unsigned char) var_str[0]
- 	    - (int) (unsigned char) const_str[0];
-    if (target != 0)
-      goto ne_label;
-      ...
-    target = (int) (unsigned char) var_str[length - 2]
- 	    - (int) (unsigned char) const_str[length - 2];
-    if (target != 0)
-      goto ne_label;
-    target = (int) (unsigned char) var_str[length - 1]
- 	    - (int) (unsigned char) const_str[length - 1];
-    ne_label:
-   */
- 
- static rtx
- inline_string_cmp (rtx target, tree var_str, const char *const_str,
- 		   unsigned HOST_WIDE_INT length,
- 		   int const_str_n, machine_mode mode)
- {
-   HOST_WIDE_INT offset = 0;
-   rtx var_rtx_array
-     = get_memory_rtx (var_str, build_int_cst (unsigned_type_node,length));
-   rtx var_rtx = NULL_RTX;
-   rtx const_rtx = NULL_RTX;
-   rtx result = target ? target : gen_reg_rtx (mode);
-   rtx_code_label *ne_label = gen_label_rtx ();
-   tree unit_type_node = unsigned_char_type_node;
-   scalar_int_mode unit_mode
-     = as_a <scalar_int_mode> TYPE_MODE (unit_type_node);
- 
-   start_sequence ();
- 
-   for (unsigned HOST_WIDE_INT i = 0; i < length; i++)
-     {
-       var_rtx
- 	= adjust_address (var_rtx_array, TYPE_MODE (unit_type_node), offset);
-       const_rtx = c_readstr (const_str + offset, unit_mode);
-       rtx op0 = (const_str_n == 1) ? const_rtx : var_rtx;
-       rtx op1 = (const_str_n == 1) ? var_rtx : const_rtx;
- 
-       op0 = convert_modes (mode, unit_mode, op0, 1);
-       op1 = convert_modes (mode, unit_mode, op1, 1);
-       result = expand_simple_binop (mode, MINUS, op0, op1,
- 				    result, 1, OPTAB_WIDEN);
-       if (i < length - 1)
- 	emit_cmp_and_jump_insns (result, CONST0_RTX (mode), NE, NULL_RTX,
- 	    			 mode, true, ne_label);
-       offset += GET_MODE_SIZE (unit_mode);
-     }
- 
-   emit_label (ne_label);
-   rtx_insn *insns = get_insns ();
-   end_sequence ();
-   emit_insn (insns);
- 
-   return result;
- }
- 
- /* Inline expansion of a call to str(n)cmp and memcmp, with result going
-    to TARGET if that's convenient.
-    If the call is not been inlined, return NULL_RTX.  */
- 
- static rtx
- inline_expand_builtin_bytecmp (tree exp, rtx target)
- {
-   tree fndecl = get_callee_fndecl (exp);
-   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
-   bool is_ncmp = (fcode == BUILT_IN_STRNCMP || fcode == BUILT_IN_MEMCMP);
- 
-   /* Do NOT apply this inlining expansion when optimizing for size or
-      optimization level below 2.  */
-   if (optimize < 2 || optimize_insn_for_size_p ())
-     return NULL_RTX;
- 
-   gcc_checking_assert (fcode == BUILT_IN_STRCMP
- 		       || fcode == BUILT_IN_STRNCMP
- 		       || fcode == BUILT_IN_MEMCMP);
- 
-   /* On a target where the type of the call (int) has same or narrower presicion
-      than unsigned char, give up the inlining expansion.  */
-   if (TYPE_PRECISION (unsigned_char_type_node)
-       >= TYPE_PRECISION (TREE_TYPE (exp)))
-     return NULL_RTX;
- 
-   tree arg1 = CALL_EXPR_ARG (exp, 0);
-   tree arg2 = CALL_EXPR_ARG (exp, 1);
-   tree len3_tree = is_ncmp ? CALL_EXPR_ARG (exp, 2) : NULL_TREE;
- 
-   unsigned HOST_WIDE_INT len1 = 0;
-   unsigned HOST_WIDE_INT len2 = 0;
-   unsigned HOST_WIDE_INT len3 = 0;
- 
-   /* Get the object representation of the initializers of ARG1 and ARG2
-      as strings, provided they refer to constant objects, with their byte
-      sizes in LEN1 and LEN2, respectively.  */
-   const char *bytes1 = getbyterep (arg1, &len1);
-   const char *bytes2 = getbyterep (arg2, &len2);
- 
-   /* Fail if neither argument refers to an initialized constant.  */
-   if (!bytes1 && !bytes2)
-     return NULL_RTX;
- 
-   if (is_ncmp)
-     {
-       /* Fail if the memcmp/strncmp bound is not a constant.  */
-       if (!tree_fits_uhwi_p (len3_tree))
- 	return NULL_RTX;
- 
-       len3 = tree_to_uhwi (len3_tree);
- 
-       if (fcode == BUILT_IN_MEMCMP)
- 	{
- 	  /* Fail if the memcmp bound is greater than the size of either
- 	     of the two constant objects.  */
- 	  if ((bytes1 && len1 < len3)
- 	      || (bytes2 && len2 < len3))
- 	    return NULL_RTX;
- 	}
-     }
- 
-   if (fcode != BUILT_IN_MEMCMP)
-     {
-       /* For string functions (i.e., strcmp and strncmp) reduce LEN1
- 	 and LEN2 to the length of the nul-terminated string stored
- 	 in each.  */
-       if (bytes1 != NULL)
- 	len1 = strnlen (bytes1, len1) + 1;
-       if (bytes2 != NULL)
- 	len2 = strnlen (bytes2, len2) + 1;
-     }
- 
-   /* See inline_string_cmp.  */
-   int const_str_n;
-   if (!len1)
-     const_str_n = 2;
-   else if (!len2)
-     const_str_n = 1;
-   else if (len2 > len1)
-     const_str_n = 1;
-   else
-     const_str_n = 2;
- 
-   /* For strncmp only, compute the new bound as the smallest of
-      the lengths of the two strings (plus 1) and the bound provided
-      to the function.  */
-   unsigned HOST_WIDE_INT bound = (const_str_n == 1) ? len1 : len2;
-   if (is_ncmp && len3 < bound)
-     bound = len3;
- 
-   /* If the bound of the comparison is larger than the threshold,
-      do nothing.  */
-   if (bound > (unsigned HOST_WIDE_INT) param_builtin_string_cmp_inline_length)
-     return NULL_RTX;
- 
-   machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
- 
-   /* Now, start inline expansion the call.  */
-   return inline_string_cmp (target, (const_str_n == 1) ? arg2 : arg1,
- 			    (const_str_n == 1) ? bytes1 : bytes2, bound,
- 			    const_str_n, mode);
- }
- 
- /* Expand a call to __builtin_speculation_safe_value_<N>.  MODE
-    represents the size of the first argument to that call, or VOIDmode
-    if the argument is a pointer.  IGNORE will be true if the result
-    isn't used.  */
- static rtx
- expand_speculation_safe_value (machine_mode mode, tree exp, rtx target,
- 			       bool ignore)
- {
-   rtx val, failsafe;
-   unsigned nargs = call_expr_nargs (exp);
- 
-   tree arg0 = CALL_EXPR_ARG (exp, 0);
- 
-   if (mode == VOIDmode)
-     {
-       mode = TYPE_MODE (TREE_TYPE (arg0));
-       gcc_assert (GET_MODE_CLASS (mode) == MODE_INT);
-     }
- 
-   val = expand_expr (arg0, NULL_RTX, mode, EXPAND_NORMAL);
- 
-   /* An optional second argument can be used as a failsafe value on
-      some machines.  If it isn't present, then the failsafe value is
-      assumed to be 0.  */
-   if (nargs > 1)
-     {
-       tree arg1 = CALL_EXPR_ARG (exp, 1);
-       failsafe = expand_expr (arg1, NULL_RTX, mode, EXPAND_NORMAL);
-     }
-   else
-     failsafe = const0_rtx;
- 
-   /* If the result isn't used, the behavior is undefined.  It would be
-      nice to emit a warning here, but path splitting means this might
-      happen with legitimate code.  So simply drop the builtin
-      expansion in that case; we've handled any side-effects above.  */
-   if (ignore)
-     return const0_rtx;
- 
-   /* If we don't have a suitable target, create one to hold the result.  */
-   if (target == NULL || GET_MODE (target) != mode)
-     target = gen_reg_rtx (mode);
- 
-   if (GET_MODE (val) != mode && GET_MODE (val) != VOIDmode)
-     val = convert_modes (mode, VOIDmode, val, false);
- 
-   return targetm.speculation_safe_value (mode, target, val, failsafe);
- }
- 
- /* Expand an expression EXP that calls a built-in function,
-    with result going to TARGET if that's convenient
-    (and in mode MODE if that's convenient).
-    SUBTARGET may be used as the target for computing one of EXP's operands.
-    IGNORE is nonzero if the value is to be ignored.  */
- 
- rtx
- expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
- 		int ignore)
- {
-   tree fndecl = get_callee_fndecl (exp);
-   machine_mode target_mode = TYPE_MODE (TREE_TYPE (exp));
-   int flags;
- 
-   if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
-     return targetm.expand_builtin (exp, target, subtarget, mode, ignore);
- 
-   /* When ASan is enabled, we don't want to expand some memory/string
-      builtins and rely on libsanitizer's hooks.  This allows us to avoid
-      redundant checks and be sure, that possible overflow will be detected
-      by ASan.  */
- 
-   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
-   if ((flag_sanitize & SANITIZE_ADDRESS) && asan_intercepted_p (fcode))
-     return expand_call (exp, target, ignore);
- 
-   /* When not optimizing, generate calls to library functions for a certain
-      set of builtins.  */
-   if (!optimize
-       && !called_as_built_in (fndecl)
-       && fcode != BUILT_IN_FORK
-       && fcode != BUILT_IN_EXECL
-       && fcode != BUILT_IN_EXECV
-       && fcode != BUILT_IN_EXECLP
-       && fcode != BUILT_IN_EXECLE
-       && fcode != BUILT_IN_EXECVP
-       && fcode != BUILT_IN_EXECVE
-       && fcode != BUILT_IN_CLEAR_CACHE
-       && !ALLOCA_FUNCTION_CODE_P (fcode)
-       && fcode != BUILT_IN_FREE)
-     return expand_call (exp, target, ignore);
- 
-   /* The built-in function expanders test for target == const0_rtx
-      to determine whether the function's result will be ignored.  */
-   if (ignore)
-     target = const0_rtx;
- 
-   /* If the result of a pure or const built-in function is ignored, and
-      none of its arguments are volatile, we can avoid expanding the
-      built-in call and just evaluate the arguments for side-effects.  */
-   if (target == const0_rtx
-       && ((flags = flags_from_decl_or_type (fndecl)) & (ECF_CONST | ECF_PURE))
-       && !(flags & ECF_LOOPING_CONST_OR_PURE))
-     {
-       bool volatilep = false;
-       tree arg;
-       call_expr_arg_iterator iter;
- 
-       FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
- 	if (TREE_THIS_VOLATILE (arg))
- 	  {
- 	    volatilep = true;
- 	    break;
- 	  }
- 
-       if (! volatilep)
- 	{
- 	  FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
- 	    expand_expr (arg, const0_rtx, VOIDmode, EXPAND_NORMAL);
- 	  return const0_rtx;
- 	}
-     }
- 
-   switch (fcode)
-     {
-     CASE_FLT_FN (BUILT_IN_FABS):
-     CASE_FLT_FN_FLOATN_NX (BUILT_IN_FABS):
-     case BUILT_IN_FABSD32:
-     case BUILT_IN_FABSD64:
-     case BUILT_IN_FABSD128:
-       target = expand_builtin_fabs (exp, target, subtarget);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_FLT_FN (BUILT_IN_COPYSIGN):
-     CASE_FLT_FN_FLOATN_NX (BUILT_IN_COPYSIGN):
-       target = expand_builtin_copysign (exp, target, subtarget);
-       if (target)
- 	return target;
-       break;
- 
-       /* Just do a normal library call if we were unable to fold
- 	 the values.  */
-     CASE_FLT_FN (BUILT_IN_CABS):
-       break;
- 
-     CASE_FLT_FN (BUILT_IN_FMA):
-     CASE_FLT_FN_FLOATN_NX (BUILT_IN_FMA):
-       target = expand_builtin_mathfn_ternary (exp, target, subtarget);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_FLT_FN (BUILT_IN_ILOGB):
-       if (! flag_unsafe_math_optimizations)
- 	break;
-       gcc_fallthrough ();
-     CASE_FLT_FN (BUILT_IN_ISINF):
-     CASE_FLT_FN (BUILT_IN_FINITE):
-     case BUILT_IN_ISFINITE:
-     case BUILT_IN_ISNORMAL:
-       target = expand_builtin_interclass_mathfn (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_FLT_FN (BUILT_IN_ICEIL):
-     CASE_FLT_FN (BUILT_IN_LCEIL):
-     CASE_FLT_FN (BUILT_IN_LLCEIL):
-     CASE_FLT_FN (BUILT_IN_LFLOOR):
-     CASE_FLT_FN (BUILT_IN_IFLOOR):
-     CASE_FLT_FN (BUILT_IN_LLFLOOR):
-       target = expand_builtin_int_roundingfn (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_FLT_FN (BUILT_IN_IRINT):
-     CASE_FLT_FN (BUILT_IN_LRINT):
-     CASE_FLT_FN (BUILT_IN_LLRINT):
-     CASE_FLT_FN (BUILT_IN_IROUND):
-     CASE_FLT_FN (BUILT_IN_LROUND):
-     CASE_FLT_FN (BUILT_IN_LLROUND):
-       target = expand_builtin_int_roundingfn_2 (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_FLT_FN (BUILT_IN_POWI):
-       target = expand_builtin_powi (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_FLT_FN (BUILT_IN_CEXPI):
-       target = expand_builtin_cexpi (exp, target);
-       gcc_assert (target);
-       return target;
- 
-     CASE_FLT_FN (BUILT_IN_SIN):
-     CASE_FLT_FN (BUILT_IN_COS):
-       if (! flag_unsafe_math_optimizations)
- 	break;
-       target = expand_builtin_mathfn_3 (exp, target, subtarget);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_FLT_FN (BUILT_IN_SINCOS):
-       if (! flag_unsafe_math_optimizations)
- 	break;
-       target = expand_builtin_sincos (exp);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_APPLY_ARGS:
-       return expand_builtin_apply_args ();
- 
-       /* __builtin_apply (FUNCTION, ARGUMENTS, ARGSIZE) invokes
- 	 FUNCTION with a copy of the parameters described by
- 	 ARGUMENTS, and ARGSIZE.  It returns a block of memory
- 	 allocated on the stack into which is stored all the registers
- 	 that might possibly be used for returning the result of a
- 	 function.  ARGUMENTS is the value returned by
- 	 __builtin_apply_args.  ARGSIZE is the number of bytes of
- 	 arguments that must be copied.  ??? How should this value be
- 	 computed?  We'll also need a safe worst case value for varargs
- 	 functions.  */
-     case BUILT_IN_APPLY:
-       if (!validate_arglist (exp, POINTER_TYPE,
- 			     POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)
- 	  && !validate_arglist (exp, REFERENCE_TYPE,
- 				POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
- 	return const0_rtx;
-       else
- 	{
- 	  rtx ops[3];
- 
- 	  ops[0] = expand_normal (CALL_EXPR_ARG (exp, 0));
- 	  ops[1] = expand_normal (CALL_EXPR_ARG (exp, 1));
- 	  ops[2] = expand_normal (CALL_EXPR_ARG (exp, 2));
- 
- 	  return expand_builtin_apply (ops[0], ops[1], ops[2]);
- 	}
- 
-       /* __builtin_return (RESULT) causes the function to return the
- 	 value described by RESULT.  RESULT is address of the block of
- 	 memory returned by __builtin_apply.  */
-     case BUILT_IN_RETURN:
-       if (validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
- 	expand_builtin_return (expand_normal (CALL_EXPR_ARG (exp, 0)));
-       return const0_rtx;
- 
-     case BUILT_IN_SAVEREGS:
-       return expand_builtin_saveregs ();
- 
-     case BUILT_IN_VA_ARG_PACK:
-       /* All valid uses of __builtin_va_arg_pack () are removed during
- 	 inlining.  */
-       error ("%Kinvalid use of %<__builtin_va_arg_pack ()%>", exp);
-       return const0_rtx;
- 
-     case BUILT_IN_VA_ARG_PACK_LEN:
-       /* All valid uses of __builtin_va_arg_pack_len () are removed during
- 	 inlining.  */
-       error ("%Kinvalid use of %<__builtin_va_arg_pack_len ()%>", exp);
-       return const0_rtx;
- 
-       /* Return the address of the first anonymous stack arg.  */
-     case BUILT_IN_NEXT_ARG:
-       if (fold_builtin_next_arg (exp, false))
- 	return const0_rtx;
-       return expand_builtin_next_arg ();
- 
-     case BUILT_IN_CLEAR_CACHE:
-       expand_builtin___clear_cache (exp);
-       return const0_rtx;
- 
-     case BUILT_IN_CLASSIFY_TYPE:
-       return expand_builtin_classify_type (exp);
- 
-     case BUILT_IN_CONSTANT_P:
-       return const0_rtx;
- 
-     case BUILT_IN_FRAME_ADDRESS:
-     case BUILT_IN_RETURN_ADDRESS:
-       return expand_builtin_frame_address (fndecl, exp);
- 
-     /* Returns the address of the area where the structure is returned.
-        0 otherwise.  */
-     case BUILT_IN_AGGREGATE_INCOMING_ADDRESS:
-       if (call_expr_nargs (exp) != 0
- 	  || ! AGGREGATE_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl)))
- 	  || !MEM_P (DECL_RTL (DECL_RESULT (current_function_decl))))
- 	return const0_rtx;
-       else
- 	return XEXP (DECL_RTL (DECL_RESULT (current_function_decl)), 0);
- 
-     CASE_BUILT_IN_ALLOCA:
-       target = expand_builtin_alloca (exp);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_ASAN_ALLOCAS_UNPOISON:
-       return expand_asan_emit_allocas_unpoison (exp);
- 
-     case BUILT_IN_STACK_SAVE:
-       return expand_stack_save ();
- 
-     case BUILT_IN_STACK_RESTORE:
-       expand_stack_restore (CALL_EXPR_ARG (exp, 0));
-       return const0_rtx;
- 
-     case BUILT_IN_BSWAP16:
-     case BUILT_IN_BSWAP32:
-     case BUILT_IN_BSWAP64:
-     case BUILT_IN_BSWAP128:
-       target = expand_builtin_bswap (target_mode, exp, target, subtarget);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_INT_FN (BUILT_IN_FFS):
-       target = expand_builtin_unop (target_mode, exp, target,
- 				    subtarget, ffs_optab);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_INT_FN (BUILT_IN_CLZ):
-       target = expand_builtin_unop (target_mode, exp, target,
- 				    subtarget, clz_optab);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_INT_FN (BUILT_IN_CTZ):
-       target = expand_builtin_unop (target_mode, exp, target,
- 				    subtarget, ctz_optab);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_INT_FN (BUILT_IN_CLRSB):
-       target = expand_builtin_unop (target_mode, exp, target,
- 				    subtarget, clrsb_optab);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_INT_FN (BUILT_IN_POPCOUNT):
-       target = expand_builtin_unop (target_mode, exp, target,
- 				    subtarget, popcount_optab);
-       if (target)
- 	return target;
-       break;
- 
-     CASE_INT_FN (BUILT_IN_PARITY):
-       target = expand_builtin_unop (target_mode, exp, target,
- 				    subtarget, parity_optab);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_STRLEN:
-       target = expand_builtin_strlen (exp, target, target_mode);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_STRNLEN:
-       target = expand_builtin_strnlen (exp, target, target_mode);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_STRCAT:
-       target = expand_builtin_strcat (exp);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_GETTEXT:
-     case BUILT_IN_PUTS:
-     case BUILT_IN_PUTS_UNLOCKED:
-     case BUILT_IN_STRDUP:
-       if (validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
- 	check_read_access (exp, CALL_EXPR_ARG (exp, 0));
-       break;
- 
-     case BUILT_IN_INDEX:
-     case BUILT_IN_RINDEX:
-     case BUILT_IN_STRCHR:
-     case BUILT_IN_STRRCHR:
-       if (validate_arglist (exp, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
- 	check_read_access (exp, CALL_EXPR_ARG (exp, 0));
-       break;
- 
-     case BUILT_IN_FPUTS:
-     case BUILT_IN_FPUTS_UNLOCKED:
-       if (validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
- 	check_read_access (exp, CALL_EXPR_ARG (exp, 0));
-       break;
- 
-     case BUILT_IN_STRNDUP:
-       if (validate_arglist (exp, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
- 	check_read_access (exp, CALL_EXPR_ARG (exp, 0), CALL_EXPR_ARG (exp, 1));
-       break;
- 
-     case BUILT_IN_STRCASECMP:
-     case BUILT_IN_STRPBRK:
-     case BUILT_IN_STRSPN:
-     case BUILT_IN_STRCSPN:
-     case BUILT_IN_STRSTR:
-       if (validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
- 	{
- 	  check_read_access (exp, CALL_EXPR_ARG (exp, 0));
- 	  check_read_access (exp, CALL_EXPR_ARG (exp, 1));
- 	}
-       break;
- 
-     case BUILT_IN_STRCPY:
-       target = expand_builtin_strcpy (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_STRNCAT:
-       target = expand_builtin_strncat (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_STRNCPY:
-       target = expand_builtin_strncpy (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_STPCPY:
-       target = expand_builtin_stpcpy (exp, target, mode);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_STPNCPY:
-       target = expand_builtin_stpncpy (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_MEMCHR:
-       target = expand_builtin_memchr (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_MEMCPY:
-       target = expand_builtin_memcpy (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_MEMMOVE:
-       target = expand_builtin_memmove (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_MEMPCPY:
-       target = expand_builtin_mempcpy (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_MEMSET:
-       target = expand_builtin_memset (exp, target, mode);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_BZERO:
-       target = expand_builtin_bzero (exp);
-       if (target)
- 	return target;
-       break;
- 
-     /* Expand it as BUILT_IN_MEMCMP_EQ first. If not successful, change it
-        back to a BUILT_IN_STRCMP. Remember to delete the 3rd paramater
-        when changing it to a strcmp call.  */
-     case BUILT_IN_STRCMP_EQ:
-       target = expand_builtin_memcmp (exp, target, true);
-       if (target)
- 	return target;
- 
-       /* Change this call back to a BUILT_IN_STRCMP.  */
-       TREE_OPERAND (exp, 1)
- 	= build_fold_addr_expr (builtin_decl_explicit (BUILT_IN_STRCMP));
- 
-       /* Delete the last parameter.  */
-       unsigned int i;
-       vec<tree, va_gc> *arg_vec;
-       vec_alloc (arg_vec, 2);
-       for (i = 0; i < 2; i++)
- 	arg_vec->quick_push (CALL_EXPR_ARG (exp, i));
-       exp = build_call_vec (TREE_TYPE (exp), CALL_EXPR_FN (exp), arg_vec);
-       /* FALLTHROUGH */
- 
-     case BUILT_IN_STRCMP:
-       target = expand_builtin_strcmp (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     /* Expand it as BUILT_IN_MEMCMP_EQ first. If not successful, change it
-        back to a BUILT_IN_STRNCMP.  */
-     case BUILT_IN_STRNCMP_EQ:
-       target = expand_builtin_memcmp (exp, target, true);
-       if (target)
- 	return target;
- 
-       /* Change it back to a BUILT_IN_STRNCMP.  */
-       TREE_OPERAND (exp, 1)
- 	= build_fold_addr_expr (builtin_decl_explicit (BUILT_IN_STRNCMP));
-       /* FALLTHROUGH */
- 
-     case BUILT_IN_STRNCMP:
-       target = expand_builtin_strncmp (exp, target, mode);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_BCMP:
-     case BUILT_IN_MEMCMP:
-     case BUILT_IN_MEMCMP_EQ:
-       target = expand_builtin_memcmp (exp, target, fcode == BUILT_IN_MEMCMP_EQ);
-       if (target)
- 	return target;
-       if (fcode == BUILT_IN_MEMCMP_EQ)
- 	{
- 	  tree newdecl = builtin_decl_explicit (BUILT_IN_MEMCMP);
- 	  TREE_OPERAND (exp, 1) = build_fold_addr_expr (newdecl);
- 	}
-       break;
- 
-     case BUILT_IN_SETJMP:
-       /* This should have been lowered to the builtins below.  */
-       gcc_unreachable ();
- 
-     case BUILT_IN_SETJMP_SETUP:
-       /* __builtin_setjmp_setup is passed a pointer to an array of five words
-           and the receiver label.  */
-       if (validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
- 	{
- 	  rtx buf_addr = expand_expr (CALL_EXPR_ARG (exp, 0), subtarget,
- 				      VOIDmode, EXPAND_NORMAL);
- 	  tree label = TREE_OPERAND (CALL_EXPR_ARG (exp, 1), 0);
- 	  rtx_insn *label_r = label_rtx (label);
- 
- 	  /* This is copied from the handling of non-local gotos.  */
- 	  expand_builtin_setjmp_setup (buf_addr, label_r);
- 	  nonlocal_goto_handler_labels
- 	    = gen_rtx_INSN_LIST (VOIDmode, label_r,
- 				 nonlocal_goto_handler_labels);
- 	  /* ??? Do not let expand_label treat us as such since we would
- 	     not want to be both on the list of non-local labels and on
- 	     the list of forced labels.  */
- 	  FORCED_LABEL (label) = 0;
- 	  return const0_rtx;
- 	}
-       break;
- 
-     case BUILT_IN_SETJMP_RECEIVER:
-        /* __builtin_setjmp_receiver is passed the receiver label.  */
-       if (validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
- 	{
- 	  tree label = TREE_OPERAND (CALL_EXPR_ARG (exp, 0), 0);
- 	  rtx_insn *label_r = label_rtx (label);
- 
- 	  expand_builtin_setjmp_receiver (label_r);
- 	  return const0_rtx;
- 	}
-       break;
- 
-       /* __builtin_longjmp is passed a pointer to an array of five words.
- 	 It's similar to the C library longjmp function but works with
- 	 __builtin_setjmp above.  */
-     case BUILT_IN_LONGJMP:
-       if (validate_arglist (exp, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
- 	{
- 	  rtx buf_addr = expand_expr (CALL_EXPR_ARG (exp, 0), subtarget,
- 				      VOIDmode, EXPAND_NORMAL);
- 	  rtx value = expand_normal (CALL_EXPR_ARG (exp, 1));
- 
- 	  if (value != const1_rtx)
- 	    {
- 	      error ("%<__builtin_longjmp%> second argument must be 1");
- 	      return const0_rtx;
- 	    }
- 
- 	  expand_builtin_longjmp (buf_addr, value);
- 	  return const0_rtx;
- 	}
-       break;
- 
-     case BUILT_IN_NONLOCAL_GOTO:
-       target = expand_builtin_nonlocal_goto (exp);
-       if (target)
- 	return target;
-       break;
- 
-       /* This updates the setjmp buffer that is its argument with the value
- 	 of the current stack pointer.  */
-     case BUILT_IN_UPDATE_SETJMP_BUF:
-       if (validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
- 	{
- 	  rtx buf_addr
- 	    = expand_normal (CALL_EXPR_ARG (exp, 0));
- 
- 	  expand_builtin_update_setjmp_buf (buf_addr);
- 	  return const0_rtx;
- 	}
-       break;
- 
-     case BUILT_IN_TRAP:
-       expand_builtin_trap ();
-       return const0_rtx;
- 
-     case BUILT_IN_UNREACHABLE:
-       expand_builtin_unreachable ();
-       return const0_rtx;
- 
-     CASE_FLT_FN (BUILT_IN_SIGNBIT):
-     case BUILT_IN_SIGNBITD32:
-     case BUILT_IN_SIGNBITD64:
-     case BUILT_IN_SIGNBITD128:
-       target = expand_builtin_signbit (exp, target);
-       if (target)
- 	return target;
-       break;
- 
-       /* Various hooks for the DWARF 2 __throw routine.  */
-     case BUILT_IN_UNWIND_INIT:
-       expand_builtin_unwind_init ();
-       return const0_rtx;
-     case BUILT_IN_DWARF_CFA:
-       return virtual_cfa_rtx;
- #ifdef DWARF2_UNWIND_INFO
-     case BUILT_IN_DWARF_SP_COLUMN:
-       return expand_builtin_dwarf_sp_column ();
-     case BUILT_IN_INIT_DWARF_REG_SIZES:
-       expand_builtin_init_dwarf_reg_sizes (CALL_EXPR_ARG (exp, 0));
-       return const0_rtx;
- #endif
-     case BUILT_IN_FROB_RETURN_ADDR:
-       return expand_builtin_frob_return_addr (CALL_EXPR_ARG (exp, 0));
-     case BUILT_IN_EXTRACT_RETURN_ADDR:
-       return expand_builtin_extract_return_addr (CALL_EXPR_ARG (exp, 0));
-     case BUILT_IN_EH_RETURN:
-       expand_builtin_eh_return (CALL_EXPR_ARG (exp, 0),
- 				CALL_EXPR_ARG (exp, 1));
-       return const0_rtx;
-     case BUILT_IN_EH_RETURN_DATA_REGNO:
-       return expand_builtin_eh_return_data_regno (exp);
-     case BUILT_IN_EXTEND_POINTER:
-       return expand_builtin_extend_pointer (CALL_EXPR_ARG (exp, 0));
-     case BUILT_IN_EH_POINTER:
-       return expand_builtin_eh_pointer (exp);
-     case BUILT_IN_EH_FILTER:
-       return expand_builtin_eh_filter (exp);
-     case BUILT_IN_EH_COPY_VALUES:
-       return expand_builtin_eh_copy_values (exp);
- 
-     case BUILT_IN_VA_START:
-       return expand_builtin_va_start (exp);
-     case BUILT_IN_VA_END:
-       return expand_builtin_va_end (exp);
-     case BUILT_IN_VA_COPY:
-       return expand_builtin_va_copy (exp);
-     case BUILT_IN_EXPECT:
-       return expand_builtin_expect (exp, target);
-     case BUILT_IN_EXPECT_WITH_PROBABILITY:
-       return expand_builtin_expect_with_probability (exp, target);
-     case BUILT_IN_ASSUME_ALIGNED:
-       return expand_builtin_assume_aligned (exp, target);
-     case BUILT_IN_PREFETCH:
-       expand_builtin_prefetch (exp);
-       return const0_rtx;
- 
-     case BUILT_IN_INIT_TRAMPOLINE:
-       return expand_builtin_init_trampoline (exp, true);
-     case BUILT_IN_INIT_HEAP_TRAMPOLINE:
-       return expand_builtin_init_trampoline (exp, false);
-     case BUILT_IN_ADJUST_TRAMPOLINE:
-       return expand_builtin_adjust_trampoline (exp);
- 
-     case BUILT_IN_INIT_DESCRIPTOR:
-       return expand_builtin_init_descriptor (exp);
-     case BUILT_IN_ADJUST_DESCRIPTOR:
-       return expand_builtin_adjust_descriptor (exp);
- 
-     case BUILT_IN_FORK:
-     case BUILT_IN_EXECL:
-     case BUILT_IN_EXECV:
-     case BUILT_IN_EXECLP:
-     case BUILT_IN_EXECLE:
-     case BUILT_IN_EXECVP:
-     case BUILT_IN_EXECVE:
-       target = expand_builtin_fork_or_exec (fndecl, exp, target, ignore);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_FETCH_AND_ADD_1:
-     case BUILT_IN_SYNC_FETCH_AND_ADD_2:
-     case BUILT_IN_SYNC_FETCH_AND_ADD_4:
-     case BUILT_IN_SYNC_FETCH_AND_ADD_8:
-     case BUILT_IN_SYNC_FETCH_AND_ADD_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_FETCH_AND_ADD_1);
-       target = expand_builtin_sync_operation (mode, exp, PLUS, false, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_FETCH_AND_SUB_1:
-     case BUILT_IN_SYNC_FETCH_AND_SUB_2:
-     case BUILT_IN_SYNC_FETCH_AND_SUB_4:
-     case BUILT_IN_SYNC_FETCH_AND_SUB_8:
-     case BUILT_IN_SYNC_FETCH_AND_SUB_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_FETCH_AND_SUB_1);
-       target = expand_builtin_sync_operation (mode, exp, MINUS, false, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_FETCH_AND_OR_1:
-     case BUILT_IN_SYNC_FETCH_AND_OR_2:
-     case BUILT_IN_SYNC_FETCH_AND_OR_4:
-     case BUILT_IN_SYNC_FETCH_AND_OR_8:
-     case BUILT_IN_SYNC_FETCH_AND_OR_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_FETCH_AND_OR_1);
-       target = expand_builtin_sync_operation (mode, exp, IOR, false, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_FETCH_AND_AND_1:
-     case BUILT_IN_SYNC_FETCH_AND_AND_2:
-     case BUILT_IN_SYNC_FETCH_AND_AND_4:
-     case BUILT_IN_SYNC_FETCH_AND_AND_8:
-     case BUILT_IN_SYNC_FETCH_AND_AND_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_FETCH_AND_AND_1);
-       target = expand_builtin_sync_operation (mode, exp, AND, false, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_FETCH_AND_XOR_1:
-     case BUILT_IN_SYNC_FETCH_AND_XOR_2:
-     case BUILT_IN_SYNC_FETCH_AND_XOR_4:
-     case BUILT_IN_SYNC_FETCH_AND_XOR_8:
-     case BUILT_IN_SYNC_FETCH_AND_XOR_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_FETCH_AND_XOR_1);
-       target = expand_builtin_sync_operation (mode, exp, XOR, false, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_FETCH_AND_NAND_1:
-     case BUILT_IN_SYNC_FETCH_AND_NAND_2:
-     case BUILT_IN_SYNC_FETCH_AND_NAND_4:
-     case BUILT_IN_SYNC_FETCH_AND_NAND_8:
-     case BUILT_IN_SYNC_FETCH_AND_NAND_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_FETCH_AND_NAND_1);
-       target = expand_builtin_sync_operation (mode, exp, NOT, false, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_ADD_AND_FETCH_1:
-     case BUILT_IN_SYNC_ADD_AND_FETCH_2:
-     case BUILT_IN_SYNC_ADD_AND_FETCH_4:
-     case BUILT_IN_SYNC_ADD_AND_FETCH_8:
-     case BUILT_IN_SYNC_ADD_AND_FETCH_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_ADD_AND_FETCH_1);
-       target = expand_builtin_sync_operation (mode, exp, PLUS, true, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_SUB_AND_FETCH_1:
-     case BUILT_IN_SYNC_SUB_AND_FETCH_2:
-     case BUILT_IN_SYNC_SUB_AND_FETCH_4:
-     case BUILT_IN_SYNC_SUB_AND_FETCH_8:
-     case BUILT_IN_SYNC_SUB_AND_FETCH_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_SUB_AND_FETCH_1);
-       target = expand_builtin_sync_operation (mode, exp, MINUS, true, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_OR_AND_FETCH_1:
-     case BUILT_IN_SYNC_OR_AND_FETCH_2:
-     case BUILT_IN_SYNC_OR_AND_FETCH_4:
-     case BUILT_IN_SYNC_OR_AND_FETCH_8:
-     case BUILT_IN_SYNC_OR_AND_FETCH_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_OR_AND_FETCH_1);
-       target = expand_builtin_sync_operation (mode, exp, IOR, true, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_AND_AND_FETCH_1:
-     case BUILT_IN_SYNC_AND_AND_FETCH_2:
-     case BUILT_IN_SYNC_AND_AND_FETCH_4:
-     case BUILT_IN_SYNC_AND_AND_FETCH_8:
-     case BUILT_IN_SYNC_AND_AND_FETCH_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_AND_AND_FETCH_1);
-       target = expand_builtin_sync_operation (mode, exp, AND, true, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_XOR_AND_FETCH_1:
-     case BUILT_IN_SYNC_XOR_AND_FETCH_2:
-     case BUILT_IN_SYNC_XOR_AND_FETCH_4:
-     case BUILT_IN_SYNC_XOR_AND_FETCH_8:
-     case BUILT_IN_SYNC_XOR_AND_FETCH_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_XOR_AND_FETCH_1);
-       target = expand_builtin_sync_operation (mode, exp, XOR, true, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_NAND_AND_FETCH_1:
-     case BUILT_IN_SYNC_NAND_AND_FETCH_2:
-     case BUILT_IN_SYNC_NAND_AND_FETCH_4:
-     case BUILT_IN_SYNC_NAND_AND_FETCH_8:
-     case BUILT_IN_SYNC_NAND_AND_FETCH_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_NAND_AND_FETCH_1);
-       target = expand_builtin_sync_operation (mode, exp, NOT, true, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1:
-     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2:
-     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4:
-     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8:
-     case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16:
-       if (mode == VOIDmode)
- 	mode = TYPE_MODE (boolean_type_node);
-       if (!target || !register_operand (target, mode))
- 	target = gen_reg_rtx (mode);
- 
-       mode = get_builtin_sync_mode 
- 				(fcode - BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1);
-       target = expand_builtin_compare_and_swap (mode, exp, true, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1:
-     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2:
-     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4:
-     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8:
-     case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_16:
-       mode = get_builtin_sync_mode 
- 				(fcode - BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1);
-       target = expand_builtin_compare_and_swap (mode, exp, false, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_1:
-     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_2:
-     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_4:
-     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_8:
-     case BUILT_IN_SYNC_LOCK_TEST_AND_SET_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_LOCK_TEST_AND_SET_1);
-       target = expand_builtin_sync_lock_test_and_set (mode, exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_SYNC_LOCK_RELEASE_1:
-     case BUILT_IN_SYNC_LOCK_RELEASE_2:
-     case BUILT_IN_SYNC_LOCK_RELEASE_4:
-     case BUILT_IN_SYNC_LOCK_RELEASE_8:
-     case BUILT_IN_SYNC_LOCK_RELEASE_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_LOCK_RELEASE_1);
-       expand_builtin_sync_lock_release (mode, exp);
-       return const0_rtx;
- 
-     case BUILT_IN_SYNC_SYNCHRONIZE:
-       expand_builtin_sync_synchronize ();
-       return const0_rtx;
- 
-     case BUILT_IN_ATOMIC_EXCHANGE_1:
-     case BUILT_IN_ATOMIC_EXCHANGE_2:
-     case BUILT_IN_ATOMIC_EXCHANGE_4:
-     case BUILT_IN_ATOMIC_EXCHANGE_8:
-     case BUILT_IN_ATOMIC_EXCHANGE_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_EXCHANGE_1);
-       target = expand_builtin_atomic_exchange (mode, exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1:
-     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2:
-     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4:
-     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8:
-     case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16:
-       {
- 	unsigned int nargs, z;
- 	vec<tree, va_gc> *vec;
- 
- 	mode = 
- 	    get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1);
- 	target = expand_builtin_atomic_compare_exchange (mode, exp, target);
- 	if (target)
- 	  return target;
- 
- 	/* If this is turned into an external library call, the weak parameter
- 	   must be dropped to match the expected parameter list.  */
- 	nargs = call_expr_nargs (exp);
- 	vec_alloc (vec, nargs - 1);
- 	for (z = 0; z < 3; z++)
- 	  vec->quick_push (CALL_EXPR_ARG (exp, z));
- 	/* Skip the boolean weak parameter.  */
- 	for (z = 4; z < 6; z++)
- 	  vec->quick_push (CALL_EXPR_ARG (exp, z));
- 	exp = build_call_vec (TREE_TYPE (exp), CALL_EXPR_FN (exp), vec);
- 	break;
-       }
- 
-     case BUILT_IN_ATOMIC_LOAD_1:
-     case BUILT_IN_ATOMIC_LOAD_2:
-     case BUILT_IN_ATOMIC_LOAD_4:
-     case BUILT_IN_ATOMIC_LOAD_8:
-     case BUILT_IN_ATOMIC_LOAD_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_LOAD_1);
-       target = expand_builtin_atomic_load (mode, exp, target);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_ATOMIC_STORE_1:
-     case BUILT_IN_ATOMIC_STORE_2:
-     case BUILT_IN_ATOMIC_STORE_4:
-     case BUILT_IN_ATOMIC_STORE_8:
-     case BUILT_IN_ATOMIC_STORE_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_STORE_1);
-       target = expand_builtin_atomic_store (mode, exp);
-       if (target)
- 	return const0_rtx;
-       break;
- 
-     case BUILT_IN_ATOMIC_ADD_FETCH_1:
-     case BUILT_IN_ATOMIC_ADD_FETCH_2:
-     case BUILT_IN_ATOMIC_ADD_FETCH_4:
-     case BUILT_IN_ATOMIC_ADD_FETCH_8:
-     case BUILT_IN_ATOMIC_ADD_FETCH_16:
-       {
- 	enum built_in_function lib;
- 	mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_ADD_FETCH_1);
- 	lib = (enum built_in_function)((int)BUILT_IN_ATOMIC_FETCH_ADD_1 + 
- 				       (fcode - BUILT_IN_ATOMIC_ADD_FETCH_1));
- 	target = expand_builtin_atomic_fetch_op (mode, exp, target, PLUS, true,
- 						 ignore, lib);
- 	if (target)
- 	  return target;
- 	break;
-       }
-     case BUILT_IN_ATOMIC_SUB_FETCH_1:
-     case BUILT_IN_ATOMIC_SUB_FETCH_2:
-     case BUILT_IN_ATOMIC_SUB_FETCH_4:
-     case BUILT_IN_ATOMIC_SUB_FETCH_8:
-     case BUILT_IN_ATOMIC_SUB_FETCH_16:
-       {
- 	enum built_in_function lib;
- 	mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_SUB_FETCH_1);
- 	lib = (enum built_in_function)((int)BUILT_IN_ATOMIC_FETCH_SUB_1 + 
- 				       (fcode - BUILT_IN_ATOMIC_SUB_FETCH_1));
- 	target = expand_builtin_atomic_fetch_op (mode, exp, target, MINUS, true,
- 						 ignore, lib);
- 	if (target)
- 	  return target;
- 	break;
-       }
-     case BUILT_IN_ATOMIC_AND_FETCH_1:
-     case BUILT_IN_ATOMIC_AND_FETCH_2:
-     case BUILT_IN_ATOMIC_AND_FETCH_4:
-     case BUILT_IN_ATOMIC_AND_FETCH_8:
-     case BUILT_IN_ATOMIC_AND_FETCH_16:
-       {
- 	enum built_in_function lib;
- 	mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_AND_FETCH_1);
- 	lib = (enum built_in_function)((int)BUILT_IN_ATOMIC_FETCH_AND_1 + 
- 				       (fcode - BUILT_IN_ATOMIC_AND_FETCH_1));
- 	target = expand_builtin_atomic_fetch_op (mode, exp, target, AND, true,
- 						 ignore, lib);
- 	if (target)
- 	  return target;
- 	break;
-       }
-     case BUILT_IN_ATOMIC_NAND_FETCH_1:
-     case BUILT_IN_ATOMIC_NAND_FETCH_2:
-     case BUILT_IN_ATOMIC_NAND_FETCH_4:
-     case BUILT_IN_ATOMIC_NAND_FETCH_8:
-     case BUILT_IN_ATOMIC_NAND_FETCH_16:
-       {
- 	enum built_in_function lib;
- 	mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_NAND_FETCH_1);
- 	lib = (enum built_in_function)((int)BUILT_IN_ATOMIC_FETCH_NAND_1 + 
- 				       (fcode - BUILT_IN_ATOMIC_NAND_FETCH_1));
- 	target = expand_builtin_atomic_fetch_op (mode, exp, target, NOT, true,
- 						 ignore, lib);
- 	if (target)
- 	  return target;
- 	break;
-       }
-     case BUILT_IN_ATOMIC_XOR_FETCH_1:
-     case BUILT_IN_ATOMIC_XOR_FETCH_2:
-     case BUILT_IN_ATOMIC_XOR_FETCH_4:
-     case BUILT_IN_ATOMIC_XOR_FETCH_8:
-     case BUILT_IN_ATOMIC_XOR_FETCH_16:
-       {
- 	enum built_in_function lib;
- 	mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_XOR_FETCH_1);
- 	lib = (enum built_in_function)((int)BUILT_IN_ATOMIC_FETCH_XOR_1 + 
- 				       (fcode - BUILT_IN_ATOMIC_XOR_FETCH_1));
- 	target = expand_builtin_atomic_fetch_op (mode, exp, target, XOR, true,
- 						 ignore, lib);
- 	if (target)
- 	  return target;
- 	break;
-       }
-     case BUILT_IN_ATOMIC_OR_FETCH_1:
-     case BUILT_IN_ATOMIC_OR_FETCH_2:
-     case BUILT_IN_ATOMIC_OR_FETCH_4:
-     case BUILT_IN_ATOMIC_OR_FETCH_8:
-     case BUILT_IN_ATOMIC_OR_FETCH_16:
-       {
- 	enum built_in_function lib;
- 	mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_OR_FETCH_1);
- 	lib = (enum built_in_function)((int)BUILT_IN_ATOMIC_FETCH_OR_1 + 
- 				       (fcode - BUILT_IN_ATOMIC_OR_FETCH_1));
- 	target = expand_builtin_atomic_fetch_op (mode, exp, target, IOR, true,
- 						 ignore, lib);
- 	if (target)
- 	  return target;
- 	break;
-       }
-     case BUILT_IN_ATOMIC_FETCH_ADD_1:
-     case BUILT_IN_ATOMIC_FETCH_ADD_2:
-     case BUILT_IN_ATOMIC_FETCH_ADD_4:
-     case BUILT_IN_ATOMIC_FETCH_ADD_8:
-     case BUILT_IN_ATOMIC_FETCH_ADD_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_FETCH_ADD_1);
-       target = expand_builtin_atomic_fetch_op (mode, exp, target, PLUS, false,
- 					       ignore, BUILT_IN_NONE);
-       if (target)
- 	return target;
-       break;
-  
-     case BUILT_IN_ATOMIC_FETCH_SUB_1:
-     case BUILT_IN_ATOMIC_FETCH_SUB_2:
-     case BUILT_IN_ATOMIC_FETCH_SUB_4:
-     case BUILT_IN_ATOMIC_FETCH_SUB_8:
-     case BUILT_IN_ATOMIC_FETCH_SUB_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_FETCH_SUB_1);
-       target = expand_builtin_atomic_fetch_op (mode, exp, target, MINUS, false,
- 					       ignore, BUILT_IN_NONE);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_ATOMIC_FETCH_AND_1:
-     case BUILT_IN_ATOMIC_FETCH_AND_2:
-     case BUILT_IN_ATOMIC_FETCH_AND_4:
-     case BUILT_IN_ATOMIC_FETCH_AND_8:
-     case BUILT_IN_ATOMIC_FETCH_AND_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_FETCH_AND_1);
-       target = expand_builtin_atomic_fetch_op (mode, exp, target, AND, false,
- 					       ignore, BUILT_IN_NONE);
-       if (target)
- 	return target;
-       break;
-   
-     case BUILT_IN_ATOMIC_FETCH_NAND_1:
-     case BUILT_IN_ATOMIC_FETCH_NAND_2:
-     case BUILT_IN_ATOMIC_FETCH_NAND_4:
-     case BUILT_IN_ATOMIC_FETCH_NAND_8:
-     case BUILT_IN_ATOMIC_FETCH_NAND_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_FETCH_NAND_1);
-       target = expand_builtin_atomic_fetch_op (mode, exp, target, NOT, false,
- 					       ignore, BUILT_IN_NONE);
-       if (target)
- 	return target;
-       break;
-  
-     case BUILT_IN_ATOMIC_FETCH_XOR_1:
-     case BUILT_IN_ATOMIC_FETCH_XOR_2:
-     case BUILT_IN_ATOMIC_FETCH_XOR_4:
-     case BUILT_IN_ATOMIC_FETCH_XOR_8:
-     case BUILT_IN_ATOMIC_FETCH_XOR_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_FETCH_XOR_1);
-       target = expand_builtin_atomic_fetch_op (mode, exp, target, XOR, false,
- 					       ignore, BUILT_IN_NONE);
-       if (target)
- 	return target;
-       break;
-  
-     case BUILT_IN_ATOMIC_FETCH_OR_1:
-     case BUILT_IN_ATOMIC_FETCH_OR_2:
-     case BUILT_IN_ATOMIC_FETCH_OR_4:
-     case BUILT_IN_ATOMIC_FETCH_OR_8:
-     case BUILT_IN_ATOMIC_FETCH_OR_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_FETCH_OR_1);
-       target = expand_builtin_atomic_fetch_op (mode, exp, target, IOR, false,
- 					       ignore, BUILT_IN_NONE);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_ATOMIC_TEST_AND_SET:
-       return expand_builtin_atomic_test_and_set (exp, target);
- 
-     case BUILT_IN_ATOMIC_CLEAR:
-       return expand_builtin_atomic_clear (exp);
-  
-     case BUILT_IN_ATOMIC_ALWAYS_LOCK_FREE:
-       return expand_builtin_atomic_always_lock_free (exp);
- 
-     case BUILT_IN_ATOMIC_IS_LOCK_FREE:
-       target = expand_builtin_atomic_is_lock_free (exp);
-       if (target)
-         return target;
-       break;
- 
-     case BUILT_IN_ATOMIC_THREAD_FENCE:
-       expand_builtin_atomic_thread_fence (exp);
-       return const0_rtx;
- 
-     case BUILT_IN_ATOMIC_SIGNAL_FENCE:
-       expand_builtin_atomic_signal_fence (exp);
-       return const0_rtx;
- 
-     case BUILT_IN_OBJECT_SIZE:
-       return expand_builtin_object_size (exp);
- 
-     case BUILT_IN_MEMCPY_CHK:
-     case BUILT_IN_MEMPCPY_CHK:
-     case BUILT_IN_MEMMOVE_CHK:
-     case BUILT_IN_MEMSET_CHK:
-       target = expand_builtin_memory_chk (exp, target, mode, fcode);
-       if (target)
- 	return target;
-       break;
- 
-     case BUILT_IN_STRCPY_CHK:
-     case BUILT_IN_STPCPY_CHK:
-     case BUILT_IN_STRNCPY_CHK:
-     case BUILT_IN_STPNCPY_CHK:
-     case BUILT_IN_STRCAT_CHK:
-     case BUILT_IN_STRNCAT_CHK:
-     case BUILT_IN_SNPRINTF_CHK:
-     case BUILT_IN_VSNPRINTF_CHK:
-       maybe_emit_chk_warning (exp, fcode);
-       break;
- 
-     case BUILT_IN_SPRINTF_CHK:
-     case BUILT_IN_VSPRINTF_CHK:
-       maybe_emit_sprintf_chk_warning (exp, fcode);
-       break;
- 
-     case BUILT_IN_THREAD_POINTER:
-       return expand_builtin_thread_pointer (exp, target);
- 
-     case BUILT_IN_SET_THREAD_POINTER:
-       expand_builtin_set_thread_pointer (exp);
-       return const0_rtx;
- 
-     case BUILT_IN_ACC_ON_DEVICE:
-       /* Do library call, if we failed to expand the builtin when
- 	 folding.  */
-       break;
- 
-     case BUILT_IN_GOACC_PARLEVEL_ID:
-     case BUILT_IN_GOACC_PARLEVEL_SIZE:
-       return expand_builtin_goacc_parlevel_id_size (exp, target, ignore);
- 
-     case BUILT_IN_SPECULATION_SAFE_VALUE_PTR:
-       return expand_speculation_safe_value (VOIDmode, exp, target, ignore);
- 
-     case BUILT_IN_SPECULATION_SAFE_VALUE_1:
-     case BUILT_IN_SPECULATION_SAFE_VALUE_2:
-     case BUILT_IN_SPECULATION_SAFE_VALUE_4:
-     case BUILT_IN_SPECULATION_SAFE_VALUE_8:
-     case BUILT_IN_SPECULATION_SAFE_VALUE_16:
-       mode = get_builtin_sync_mode (fcode - BUILT_IN_SPECULATION_SAFE_VALUE_1);
-       return expand_speculation_safe_value (mode, exp, target, ignore);
- 
-     default:	/* just do library call, if unknown builtin */
-       break;
-     }
- 
-   /* The switch statement above can drop through to cause the function
-      to be called normally.  */
-   return expand_call (exp, target, ignore);
- }
- 
- /* Determine whether a tree node represents a call to a built-in
-    function.  If the tree T is a call to a built-in function with
-    the right number of arguments of the appropriate types, return
-    the DECL_FUNCTION_CODE of the call, e.g. BUILT_IN_SQRT.
-    Otherwise the return value is END_BUILTINS.  */
- 
- enum built_in_function
- builtin_mathfn_code (const_tree t)
- {
-   const_tree fndecl, arg, parmlist;
-   const_tree argtype, parmtype;
-   const_call_expr_arg_iterator iter;
- 
-   if (TREE_CODE (t) != CALL_EXPR)
-     return END_BUILTINS;
- 
-   fndecl = get_callee_fndecl (t);
-   if (fndecl == NULL_TREE || !fndecl_built_in_p (fndecl, BUILT_IN_NORMAL))
-       return END_BUILTINS;
- 
-   parmlist = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
-   init_const_call_expr_arg_iterator (t, &iter);
-   for (; parmlist; parmlist = TREE_CHAIN (parmlist))
-     {
-       /* If a function doesn't take a variable number of arguments,
- 	 the last element in the list will have type `void'.  */
-       parmtype = TREE_VALUE (parmlist);
-       if (VOID_TYPE_P (parmtype))
- 	{
- 	  if (more_const_call_expr_args_p (&iter))
- 	    return END_BUILTINS;
- 	  return DECL_FUNCTION_CODE (fndecl);
- 	}
- 
-       if (! more_const_call_expr_args_p (&iter))
- 	return END_BUILTINS;
- 
-       arg = next_const_call_expr_arg (&iter);
-       argtype = TREE_TYPE (arg);
- 
-       if (SCALAR_FLOAT_TYPE_P (parmtype))
- 	{
- 	  if (! SCALAR_FLOAT_TYPE_P (argtype))
- 	    return END_BUILTINS;
- 	}
-       else if (COMPLEX_FLOAT_TYPE_P (parmtype))
- 	{
- 	  if (! COMPLEX_FLOAT_TYPE_P (argtype))
- 	    return END_BUILTINS;
- 	}
-       else if (POINTER_TYPE_P (parmtype))
- 	{
- 	  if (! POINTER_TYPE_P (argtype))
- 	    return END_BUILTINS;
- 	}
-       else if (INTEGRAL_TYPE_P (parmtype))
- 	{
- 	  if (! INTEGRAL_TYPE_P (argtype))
- 	    return END_BUILTINS;
- 	}
-       else
- 	return END_BUILTINS;
-     }
- 
-   /* Variable-length argument list.  */
-   return DECL_FUNCTION_CODE (fndecl);
- }
- 
- /* Fold a call to __builtin_constant_p, if we know its argument ARG will
-    evaluate to a constant.  */
- 
- static tree
- fold_builtin_constant_p (tree arg)
- {
-   /* We return 1 for a numeric type that's known to be a constant
-      value at compile-time or for an aggregate type that's a
-      literal constant.  */
-   STRIP_NOPS (arg);
- 
-   /* If we know this is a constant, emit the constant of one.  */
-   if (CONSTANT_CLASS_P (arg)
-       || (TREE_CODE (arg) == CONSTRUCTOR
- 	  && TREE_CONSTANT (arg)))
-     return integer_one_node;
-   if (TREE_CODE (arg) == ADDR_EXPR)
-     {
-        tree op = TREE_OPERAND (arg, 0);
-        if (TREE_CODE (op) == STRING_CST
- 	   || (TREE_CODE (op) == ARRAY_REF
- 	       && integer_zerop (TREE_OPERAND (op, 1))
- 	       && TREE_CODE (TREE_OPERAND (op, 0)) == STRING_CST))
- 	 return integer_one_node;
-     }
- 
-   /* If this expression has side effects, show we don't know it to be a
-      constant.  Likewise if it's a pointer or aggregate type since in
-      those case we only want literals, since those are only optimized
-      when generating RTL, not later.
-      And finally, if we are compiling an initializer, not code, we
-      need to return a definite result now; there's not going to be any
-      more optimization done.  */
-   if (TREE_SIDE_EFFECTS (arg)
-       || AGGREGATE_TYPE_P (TREE_TYPE (arg))
-       || POINTER_TYPE_P (TREE_TYPE (arg))
-       || cfun == 0
-       || folding_initializer
-       || force_folding_builtin_constant_p)
-     return integer_zero_node;
- 
-   return NULL_TREE;
- }
- 
- /* Create builtin_expect or builtin_expect_with_probability
-    with PRED and EXPECTED as its arguments and return it as a truthvalue.
-    Fortran FE can also produce builtin_expect with PREDICTOR as third argument.
-    builtin_expect_with_probability instead uses third argument as PROBABILITY
-    value.  */
- 
- static tree
- build_builtin_expect_predicate (location_t loc, tree pred, tree expected,
- 				tree predictor, tree probability)
- {
-   tree fn, arg_types, pred_type, expected_type, call_expr, ret_type;
- 
-   fn = builtin_decl_explicit (probability == NULL_TREE ? BUILT_IN_EXPECT
- 			      : BUILT_IN_EXPECT_WITH_PROBABILITY);
-   arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
-   ret_type = TREE_TYPE (TREE_TYPE (fn));
-   pred_type = TREE_VALUE (arg_types);
-   expected_type = TREE_VALUE (TREE_CHAIN (arg_types));
- 
-   pred = fold_convert_loc (loc, pred_type, pred);
-   expected = fold_convert_loc (loc, expected_type, expected);
- 
-   if (probability)
-     call_expr = build_call_expr_loc (loc, fn, 3, pred, expected, probability);
-   else
-     call_expr = build_call_expr_loc (loc, fn, predictor ? 3 : 2, pred, expected,
- 				     predictor);
- 
-   return build2 (NE_EXPR, TREE_TYPE (pred), call_expr,
- 		 build_int_cst (ret_type, 0));
- }
- 
- /* Fold a call to builtin_expect with arguments ARG0, ARG1, ARG2, ARG3.  Return
-    NULL_TREE if no simplification is possible.  */
- 
- tree
- fold_builtin_expect (location_t loc, tree arg0, tree arg1, tree arg2,
- 		     tree arg3)
- {
-   tree inner, fndecl, inner_arg0;
-   enum tree_code code;
- 
-   /* Distribute the expected value over short-circuiting operators.
-      See through the cast from truthvalue_type_node to long.  */
-   inner_arg0 = arg0;
-   while (CONVERT_EXPR_P (inner_arg0)
- 	 && INTEGRAL_TYPE_P (TREE_TYPE (inner_arg0))
- 	 && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (inner_arg0, 0))))
-     inner_arg0 = TREE_OPERAND (inner_arg0, 0);
- 
-   /* If this is a builtin_expect within a builtin_expect keep the
-      inner one.  See through a comparison against a constant.  It
-      might have been added to create a thruthvalue.  */
-   inner = inner_arg0;
- 
-   if (COMPARISON_CLASS_P (inner)
-       && TREE_CODE (TREE_OPERAND (inner, 1)) == INTEGER_CST)
-     inner = TREE_OPERAND (inner, 0);
- 
-   if (TREE_CODE (inner) == CALL_EXPR
-       && (fndecl = get_callee_fndecl (inner))
-       && (fndecl_built_in_p (fndecl, BUILT_IN_EXPECT)
- 	  || fndecl_built_in_p (fndecl, BUILT_IN_EXPECT_WITH_PROBABILITY)))
-     return arg0;
- 
-   inner = inner_arg0;
-   code = TREE_CODE (inner);
-   if (code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)
-     {
-       tree op0 = TREE_OPERAND (inner, 0);
-       tree op1 = TREE_OPERAND (inner, 1);
-       arg1 = save_expr (arg1);
- 
-       op0 = build_builtin_expect_predicate (loc, op0, arg1, arg2, arg3);
-       op1 = build_builtin_expect_predicate (loc, op1, arg1, arg2, arg3);
-       inner = build2 (code, TREE_TYPE (inner), op0, op1);
- 
-       return fold_convert_loc (loc, TREE_TYPE (arg0), inner);
-     }
- 
-   /* If the argument isn't invariant then there's nothing else we can do.  */
-   if (!TREE_CONSTANT (inner_arg0))
-     return NULL_TREE;
- 
-   /* If we expect that a comparison against the argument will fold to
-      a constant return the constant.  In practice, this means a true
-      constant or the address of a non-weak symbol.  */
-   inner = inner_arg0;
-   STRIP_NOPS (inner);
-   if (TREE_CODE (inner) == ADDR_EXPR)
-     {
-       do
- 	{
- 	  inner = TREE_OPERAND (inner, 0);
- 	}
-       while (TREE_CODE (inner) == COMPONENT_REF
- 	     || TREE_CODE (inner) == ARRAY_REF);
-       if (VAR_OR_FUNCTION_DECL_P (inner) && DECL_WEAK (inner))
- 	return NULL_TREE;
-     }
- 
-   /* Otherwise, ARG0 already has the proper type for the return value.  */
-   return arg0;
- }
- 
- /* Fold a call to __builtin_classify_type with argument ARG.  */
- 
- static tree
- fold_builtin_classify_type (tree arg)
- {
-   if (arg == 0)
-     return build_int_cst (integer_type_node, no_type_class);
- 
-   return build_int_cst (integer_type_node, type_to_class (TREE_TYPE (arg)));
- }
- 
- /* Fold a call EXPR (which may be null) to __builtin_strlen with argument
-    ARG.  */
- 
- static tree
- fold_builtin_strlen (location_t loc, tree expr, tree type, tree arg)
- {
-   if (!validate_arg (arg, POINTER_TYPE))
-     return NULL_TREE;
-   else
-     {
-       c_strlen_data lendata = { };
-       tree len = c_strlen (arg, 0, &lendata);
- 
-       if (len)
- 	return fold_convert_loc (loc, type, len);
- 
-       if (!lendata.decl)
- 	c_strlen (arg, 1, &lendata);
- 
-       if (lendata.decl)
- 	{
- 	  if (EXPR_HAS_LOCATION (arg))
- 	    loc = EXPR_LOCATION (arg);
- 	  else if (loc == UNKNOWN_LOCATION)
- 	    loc = input_location;
- 	  warn_string_no_nul (loc, expr, "strlen", arg, lendata.decl);
- 	}
- 
-       return NULL_TREE;
-     }
- }
- 
- /* Fold a call to __builtin_inf or __builtin_huge_val.  */
- 
- static tree
- fold_builtin_inf (location_t loc, tree type, int warn)
- {
-   REAL_VALUE_TYPE real;
- 
-   /* __builtin_inff is intended to be usable to define INFINITY on all
-      targets.  If an infinity is not available, INFINITY expands "to a
-      positive constant of type float that overflows at translation
-      time", footnote "In this case, using INFINITY will violate the
-      constraint in 6.4.4 and thus require a diagnostic." (C99 7.12#4).
-      Thus we pedwarn to ensure this constraint violation is
-      diagnosed.  */
-   if (!MODE_HAS_INFINITIES (TYPE_MODE (type)) && warn)
-     pedwarn (loc, 0, "target format does not support infinity");
- 
-   real_inf (&real);
-   return build_real (type, real);
- }
- 
- /* Fold function call to builtin sincos, sincosf, or sincosl.  Return
-    NULL_TREE if no simplification can be made.  */
- 
- static tree
- fold_builtin_sincos (location_t loc,
- 		     tree arg0, tree arg1, tree arg2)
- {
-   tree type;
-   tree fndecl, call = NULL_TREE;
- 
-   if (!validate_arg (arg0, REAL_TYPE)
-       || !validate_arg (arg1, POINTER_TYPE)
-       || !validate_arg (arg2, POINTER_TYPE))
-     return NULL_TREE;
- 
-   type = TREE_TYPE (arg0);
- 
-   /* Calculate the result when the argument is a constant.  */
-   built_in_function fn = mathfn_built_in_2 (type, CFN_BUILT_IN_CEXPI);
-   if (fn == END_BUILTINS)
-     return NULL_TREE;
- 
-   /* Canonicalize sincos to cexpi.  */
-   if (TREE_CODE (arg0) == REAL_CST)
-     {
-       tree complex_type = build_complex_type (type);
-       call = fold_const_call (as_combined_fn (fn), complex_type, arg0);
-     }
-   if (!call)
-     {
-       if (!targetm.libc_has_function (function_c99_math_complex, type)
- 	  || !builtin_decl_implicit_p (fn))
- 	return NULL_TREE;
-       fndecl = builtin_decl_explicit (fn);
-       call = build_call_expr_loc (loc, fndecl, 1, arg0);
-       call = builtin_save_expr (call);
-     }
- 
-   tree ptype = build_pointer_type (type);
-   arg1 = fold_convert (ptype, arg1);
-   arg2 = fold_convert (ptype, arg2);
-   return build2 (COMPOUND_EXPR, void_type_node,
- 		 build2 (MODIFY_EXPR, void_type_node,
- 			 build_fold_indirect_ref_loc (loc, arg1),
- 			 fold_build1_loc (loc, IMAGPART_EXPR, type, call)),
- 		 build2 (MODIFY_EXPR, void_type_node,
- 			 build_fold_indirect_ref_loc (loc, arg2),
- 			 fold_build1_loc (loc, REALPART_EXPR, type, call)));
- }
- 
- /* Fold function call to builtin memcmp with arguments ARG1 and ARG2.
-    Return NULL_TREE if no simplification can be made.  */
- 
- static tree
- fold_builtin_memcmp (location_t loc, tree arg1, tree arg2, tree len)
- {
-   if (!validate_arg (arg1, POINTER_TYPE)
-       || !validate_arg (arg2, POINTER_TYPE)
-       || !validate_arg (len, INTEGER_TYPE))
-     return NULL_TREE;
- 
-   /* If the LEN parameter is zero, return zero.  */
-   if (integer_zerop (len))
-     return omit_two_operands_loc (loc, integer_type_node, integer_zero_node,
- 			      arg1, arg2);
- 
-   /* If ARG1 and ARG2 are the same (and not volatile), return zero.  */
-   if (operand_equal_p (arg1, arg2, 0))
-     return omit_one_operand_loc (loc, integer_type_node, integer_zero_node, len);
- 
-   /* If len parameter is one, return an expression corresponding to
-      (*(const unsigned char*)arg1 - (const unsigned char*)arg2).  */
-   if (tree_fits_uhwi_p (len) && tree_to_uhwi (len) == 1)
-     {
-       tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
-       tree cst_uchar_ptr_node
- 	= build_pointer_type_for_mode (cst_uchar_node, ptr_mode, true);
- 
-       tree ind1
- 	= fold_convert_loc (loc, integer_type_node,
- 			    build1 (INDIRECT_REF, cst_uchar_node,
- 				    fold_convert_loc (loc,
- 						      cst_uchar_ptr_node,
- 						      arg1)));
-       tree ind2
- 	= fold_convert_loc (loc, integer_type_node,
- 			    build1 (INDIRECT_REF, cst_uchar_node,
- 				    fold_convert_loc (loc,
- 						      cst_uchar_ptr_node,
- 						      arg2)));
-       return fold_build2_loc (loc, MINUS_EXPR, integer_type_node, ind1, ind2);
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Fold a call to builtin isascii with argument ARG.  */
- 
- static tree
- fold_builtin_isascii (location_t loc, tree arg)
- {
-   if (!validate_arg (arg, INTEGER_TYPE))
-     return NULL_TREE;
-   else
-     {
-       /* Transform isascii(c) -> ((c & ~0x7f) == 0).  */
-       arg = fold_build2 (BIT_AND_EXPR, integer_type_node, arg,
- 			 build_int_cst (integer_type_node,
- 					~ (unsigned HOST_WIDE_INT) 0x7f));
-       return fold_build2_loc (loc, EQ_EXPR, integer_type_node,
- 			      arg, integer_zero_node);
-     }
- }
- 
- /* Fold a call to builtin toascii with argument ARG.  */
- 
- static tree
- fold_builtin_toascii (location_t loc, tree arg)
- {
-   if (!validate_arg (arg, INTEGER_TYPE))
-     return NULL_TREE;
- 
-   /* Transform toascii(c) -> (c & 0x7f).  */
-   return fold_build2_loc (loc, BIT_AND_EXPR, integer_type_node, arg,
- 			  build_int_cst (integer_type_node, 0x7f));
- }
- 
- /* Fold a call to builtin isdigit with argument ARG.  */
- 
- static tree
- fold_builtin_isdigit (location_t loc, tree arg)
- {
-   if (!validate_arg (arg, INTEGER_TYPE))
-     return NULL_TREE;
-   else
-     {
-       /* Transform isdigit(c) -> (unsigned)(c) - '0' <= 9.  */
-       /* According to the C standard, isdigit is unaffected by locale.
- 	 However, it definitely is affected by the target character set.  */
-       unsigned HOST_WIDE_INT target_digit0
- 	= lang_hooks.to_target_charset ('0');
- 
-       if (target_digit0 == 0)
- 	return NULL_TREE;
- 
-       arg = fold_convert_loc (loc, unsigned_type_node, arg);
-       arg = fold_build2 (MINUS_EXPR, unsigned_type_node, arg,
- 			 build_int_cst (unsigned_type_node, target_digit0));
-       return fold_build2_loc (loc, LE_EXPR, integer_type_node, arg,
- 			  build_int_cst (unsigned_type_node, 9));
-     }
- }
- 
- /* Fold a call to fabs, fabsf or fabsl with argument ARG.  */
- 
- static tree
- fold_builtin_fabs (location_t loc, tree arg, tree type)
- {
-   if (!validate_arg (arg, REAL_TYPE))
-     return NULL_TREE;
- 
-   arg = fold_convert_loc (loc, type, arg);
-   return fold_build1_loc (loc, ABS_EXPR, type, arg);
- }
- 
- /* Fold a call to abs, labs, llabs or imaxabs with argument ARG.  */
- 
- static tree
- fold_builtin_abs (location_t loc, tree arg, tree type)
- {
-   if (!validate_arg (arg, INTEGER_TYPE))
-     return NULL_TREE;
- 
-   arg = fold_convert_loc (loc, type, arg);
-   return fold_build1_loc (loc, ABS_EXPR, type, arg);
- }
- 
- /* Fold a call to builtin carg(a+bi) -> atan2(b,a).  */
- 
- static tree
- fold_builtin_carg (location_t loc, tree arg, tree type)
- {
-   if (validate_arg (arg, COMPLEX_TYPE)
-       && TREE_CODE (TREE_TYPE (TREE_TYPE (arg))) == REAL_TYPE)
-     {
-       tree atan2_fn = mathfn_built_in (type, BUILT_IN_ATAN2);
- 
-       if (atan2_fn)
-         {
-   	  tree new_arg = builtin_save_expr (arg);
- 	  tree r_arg = fold_build1_loc (loc, REALPART_EXPR, type, new_arg);
- 	  tree i_arg = fold_build1_loc (loc, IMAGPART_EXPR, type, new_arg);
- 	  return build_call_expr_loc (loc, atan2_fn, 2, i_arg, r_arg);
- 	}
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Fold a call to builtin frexp, we can assume the base is 2.  */
- 
- static tree
- fold_builtin_frexp (location_t loc, tree arg0, tree arg1, tree rettype)
- {
-   if (! validate_arg (arg0, REAL_TYPE) || ! validate_arg (arg1, POINTER_TYPE))
-     return NULL_TREE;
- 
-   STRIP_NOPS (arg0);
- 
-   if (!(TREE_CODE (arg0) == REAL_CST && ! TREE_OVERFLOW (arg0)))
-     return NULL_TREE;
- 
-   arg1 = build_fold_indirect_ref_loc (loc, arg1);
- 
-   /* Proceed if a valid pointer type was passed in.  */
-   if (TYPE_MAIN_VARIANT (TREE_TYPE (arg1)) == integer_type_node)
-     {
-       const REAL_VALUE_TYPE *const value = TREE_REAL_CST_PTR (arg0);
-       tree frac, exp;
- 
-       switch (value->cl)
-       {
-       case rvc_zero:
- 	/* For +-0, return (*exp = 0, +-0).  */
- 	exp = integer_zero_node;
- 	frac = arg0;
- 	break;
-       case rvc_nan:
-       case rvc_inf:
- 	/* For +-NaN or +-Inf, *exp is unspecified, return arg0.  */
- 	return omit_one_operand_loc (loc, rettype, arg0, arg1);
-       case rvc_normal:
- 	{
- 	  /* Since the frexp function always expects base 2, and in
- 	     GCC normalized significands are already in the range
- 	     [0.5, 1.0), we have exactly what frexp wants.  */
- 	  REAL_VALUE_TYPE frac_rvt = *value;
- 	  SET_REAL_EXP (&frac_rvt, 0);
- 	  frac = build_real (rettype, frac_rvt);
- 	  exp = build_int_cst (integer_type_node, REAL_EXP (value));
- 	}
- 	break;
-       default:
- 	gcc_unreachable ();
-       }
- 
-       /* Create the COMPOUND_EXPR (*arg1 = trunc, frac). */
-       arg1 = fold_build2_loc (loc, MODIFY_EXPR, rettype, arg1, exp);
-       TREE_SIDE_EFFECTS (arg1) = 1;
-       return fold_build2_loc (loc, COMPOUND_EXPR, rettype, arg1, frac);
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Fold a call to builtin modf.  */
- 
- static tree
- fold_builtin_modf (location_t loc, tree arg0, tree arg1, tree rettype)
- {
-   if (! validate_arg (arg0, REAL_TYPE) || ! validate_arg (arg1, POINTER_TYPE))
-     return NULL_TREE;
- 
-   STRIP_NOPS (arg0);
- 
-   if (!(TREE_CODE (arg0) == REAL_CST && ! TREE_OVERFLOW (arg0)))
-     return NULL_TREE;
- 
-   arg1 = build_fold_indirect_ref_loc (loc, arg1);
- 
-   /* Proceed if a valid pointer type was passed in.  */
-   if (TYPE_MAIN_VARIANT (TREE_TYPE (arg1)) == TYPE_MAIN_VARIANT (rettype))
-     {
-       const REAL_VALUE_TYPE *const value = TREE_REAL_CST_PTR (arg0);
-       REAL_VALUE_TYPE trunc, frac;
- 
-       switch (value->cl)
-       {
-       case rvc_nan:
-       case rvc_zero:
- 	/* For +-NaN or +-0, return (*arg1 = arg0, arg0).  */
- 	trunc = frac = *value;
- 	break;
-       case rvc_inf:
- 	/* For +-Inf, return (*arg1 = arg0, +-0).  */
- 	frac = dconst0;
- 	frac.sign = value->sign;
- 	trunc = *value;
- 	break;
-       case rvc_normal:
- 	/* Return (*arg1 = trunc(arg0), arg0-trunc(arg0)).  */
- 	real_trunc (&trunc, VOIDmode, value);
- 	real_arithmetic (&frac, MINUS_EXPR, value, &trunc);
- 	/* If the original number was negative and already
- 	   integral, then the fractional part is -0.0.  */
- 	if (value->sign && frac.cl == rvc_zero)
- 	  frac.sign = value->sign;
- 	break;
-       }
- 
-       /* Create the COMPOUND_EXPR (*arg1 = trunc, frac). */
-       arg1 = fold_build2_loc (loc, MODIFY_EXPR, rettype, arg1,
- 			  build_real (rettype, trunc));
-       TREE_SIDE_EFFECTS (arg1) = 1;
-       return fold_build2_loc (loc, COMPOUND_EXPR, rettype, arg1,
- 			  build_real (rettype, frac));
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Given a location LOC, an interclass builtin function decl FNDECL
-    and its single argument ARG, return an folded expression computing
-    the same, or NULL_TREE if we either couldn't or didn't want to fold
-    (the latter happen if there's an RTL instruction available).  */
- 
- static tree
- fold_builtin_interclass_mathfn (location_t loc, tree fndecl, tree arg)
- {
-   machine_mode mode;
- 
-   if (!validate_arg (arg, REAL_TYPE))
-     return NULL_TREE;
- 
-   if (interclass_mathfn_icode (arg, fndecl) != CODE_FOR_nothing)
-     return NULL_TREE;
- 
-   mode = TYPE_MODE (TREE_TYPE (arg));
- 
-   bool is_ibm_extended = MODE_COMPOSITE_P (mode);
- 
-   /* If there is no optab, try generic code.  */
-   switch (DECL_FUNCTION_CODE (fndecl))
-     {
-       tree result;
- 
-     CASE_FLT_FN (BUILT_IN_ISINF):
-       {
- 	/* isinf(x) -> isgreater(fabs(x),DBL_MAX).  */
- 	tree const isgr_fn = builtin_decl_explicit (BUILT_IN_ISGREATER);
- 	tree type = TREE_TYPE (arg);
- 	REAL_VALUE_TYPE r;
- 	char buf[128];
- 
- 	if (is_ibm_extended)
- 	  {
- 	    /* NaN and Inf are encoded in the high-order double value
- 	       only.  The low-order value is not significant.  */
- 	    type = double_type_node;
- 	    mode = DFmode;
- 	    arg = fold_build1_loc (loc, NOP_EXPR, type, arg);
- 	  }
- 	get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false);
- 	real_from_string (&r, buf);
- 	result = build_call_expr (isgr_fn, 2,
- 				  fold_build1_loc (loc, ABS_EXPR, type, arg),
- 				  build_real (type, r));
- 	return result;
-       }
-     CASE_FLT_FN (BUILT_IN_FINITE):
-     case BUILT_IN_ISFINITE:
-       {
- 	/* isfinite(x) -> islessequal(fabs(x),DBL_MAX).  */
- 	tree const isle_fn = builtin_decl_explicit (BUILT_IN_ISLESSEQUAL);
- 	tree type = TREE_TYPE (arg);
- 	REAL_VALUE_TYPE r;
- 	char buf[128];
- 
- 	if (is_ibm_extended)
- 	  {
- 	    /* NaN and Inf are encoded in the high-order double value
- 	       only.  The low-order value is not significant.  */
- 	    type = double_type_node;
- 	    mode = DFmode;
- 	    arg = fold_build1_loc (loc, NOP_EXPR, type, arg);
- 	  }
- 	get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false);
- 	real_from_string (&r, buf);
- 	result = build_call_expr (isle_fn, 2,
- 				  fold_build1_loc (loc, ABS_EXPR, type, arg),
- 				  build_real (type, r));
- 	/*result = fold_build2_loc (loc, UNGT_EXPR,
- 				  TREE_TYPE (TREE_TYPE (fndecl)),
- 				  fold_build1_loc (loc, ABS_EXPR, type, arg),
- 				  build_real (type, r));
- 	result = fold_build1_loc (loc, TRUTH_NOT_EXPR,
- 				  TREE_TYPE (TREE_TYPE (fndecl)),
- 				  result);*/
- 	return result;
-       }
-     case BUILT_IN_ISNORMAL:
-       {
- 	/* isnormal(x) -> isgreaterequal(fabs(x),DBL_MIN) &
- 	   islessequal(fabs(x),DBL_MAX).  */
- 	tree const isle_fn = builtin_decl_explicit (BUILT_IN_ISLESSEQUAL);
- 	tree type = TREE_TYPE (arg);
- 	tree orig_arg, max_exp, min_exp;
- 	machine_mode orig_mode = mode;
- 	REAL_VALUE_TYPE rmax, rmin;
- 	char buf[128];
- 
- 	orig_arg = arg = builtin_save_expr (arg);
- 	if (is_ibm_extended)
- 	  {
- 	    /* Use double to test the normal range of IBM extended
- 	       precision.  Emin for IBM extended precision is
- 	       different to emin for IEEE double, being 53 higher
- 	       since the low double exponent is at least 53 lower
- 	       than the high double exponent.  */
- 	    type = double_type_node;
- 	    mode = DFmode;
- 	    arg = fold_build1_loc (loc, NOP_EXPR, type, arg);
- 	  }
- 	arg = fold_build1_loc (loc, ABS_EXPR, type, arg);
- 
- 	get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false);
- 	real_from_string (&rmax, buf);
- 	sprintf (buf, "0x1p%d", REAL_MODE_FORMAT (orig_mode)->emin - 1);
- 	real_from_string (&rmin, buf);
- 	max_exp = build_real (type, rmax);
- 	min_exp = build_real (type, rmin);
- 
- 	max_exp = build_call_expr (isle_fn, 2, arg, max_exp);
- 	if (is_ibm_extended)
- 	  {
- 	    /* Testing the high end of the range is done just using
- 	       the high double, using the same test as isfinite().
- 	       For the subnormal end of the range we first test the
- 	       high double, then if its magnitude is equal to the
- 	       limit of 0x1p-969, we test whether the low double is
- 	       non-zero and opposite sign to the high double.  */
- 	    tree const islt_fn = builtin_decl_explicit (BUILT_IN_ISLESS);
- 	    tree const isgt_fn = builtin_decl_explicit (BUILT_IN_ISGREATER);
- 	    tree gt_min = build_call_expr (isgt_fn, 2, arg, min_exp);
- 	    tree eq_min = fold_build2 (EQ_EXPR, integer_type_node,
- 				       arg, min_exp);
- 	    tree as_complex = build1 (VIEW_CONVERT_EXPR,
- 				      complex_double_type_node, orig_arg);
- 	    tree hi_dbl = build1 (REALPART_EXPR, type, as_complex);
- 	    tree lo_dbl = build1 (IMAGPART_EXPR, type, as_complex);
- 	    tree zero = build_real (type, dconst0);
- 	    tree hilt = build_call_expr (islt_fn, 2, hi_dbl, zero);
- 	    tree lolt = build_call_expr (islt_fn, 2, lo_dbl, zero);
- 	    tree logt = build_call_expr (isgt_fn, 2, lo_dbl, zero);
- 	    tree ok_lo = fold_build1 (TRUTH_NOT_EXPR, integer_type_node,
- 				      fold_build3 (COND_EXPR,
- 						   integer_type_node,
- 						   hilt, logt, lolt));
- 	    eq_min = fold_build2 (TRUTH_ANDIF_EXPR, integer_type_node,
- 				  eq_min, ok_lo);
- 	    min_exp = fold_build2 (TRUTH_ORIF_EXPR, integer_type_node,
- 				   gt_min, eq_min);
- 	  }
- 	else
- 	  {
- 	    tree const isge_fn
- 	      = builtin_decl_explicit (BUILT_IN_ISGREATEREQUAL);
- 	    min_exp = build_call_expr (isge_fn, 2, arg, min_exp);
- 	  }
- 	result = fold_build2 (BIT_AND_EXPR, integer_type_node,
- 			      max_exp, min_exp);
- 	return result;
-       }
-     default:
-       break;
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Fold a call to __builtin_isnan(), __builtin_isinf, __builtin_finite.
-    ARG is the argument for the call.  */
- 
- static tree
- fold_builtin_classify (location_t loc, tree fndecl, tree arg, int builtin_index)
- {
-   tree type = TREE_TYPE (TREE_TYPE (fndecl));
- 
-   if (!validate_arg (arg, REAL_TYPE))
-     return NULL_TREE;
- 
-   switch (builtin_index)
-     {
-     case BUILT_IN_ISINF:
-       if (tree_expr_infinite_p (arg))
- 	return omit_one_operand_loc (loc, type, integer_one_node, arg);
-       if (!tree_expr_maybe_infinite_p (arg))
- 	return omit_one_operand_loc (loc, type, integer_zero_node, arg);
-       return NULL_TREE;
- 
-     case BUILT_IN_ISINF_SIGN:
-       {
- 	/* isinf_sign(x) -> isinf(x) ? (signbit(x) ? -1 : 1) : 0 */
- 	/* In a boolean context, GCC will fold the inner COND_EXPR to
- 	   1.  So e.g. "if (isinf_sign(x))" would be folded to just
- 	   "if (isinf(x) ? 1 : 0)" which becomes "if (isinf(x))". */
- 	tree signbit_fn = builtin_decl_explicit (BUILT_IN_SIGNBIT);
- 	tree isinf_fn = builtin_decl_explicit (BUILT_IN_ISINF);
- 	tree tmp = NULL_TREE;
- 
- 	arg = builtin_save_expr (arg);
- 
- 	if (signbit_fn && isinf_fn)
- 	  {
- 	    tree signbit_call = build_call_expr_loc (loc, signbit_fn, 1, arg);
- 	    tree isinf_call = build_call_expr_loc (loc, isinf_fn, 1, arg);
- 
- 	    signbit_call = fold_build2_loc (loc, NE_EXPR, integer_type_node,
- 					signbit_call, integer_zero_node);
- 	    isinf_call = fold_build2_loc (loc, NE_EXPR, integer_type_node,
- 				      isinf_call, integer_zero_node);
- 
- 	    tmp = fold_build3_loc (loc, COND_EXPR, integer_type_node, signbit_call,
- 			       integer_minus_one_node, integer_one_node);
- 	    tmp = fold_build3_loc (loc, COND_EXPR, integer_type_node,
- 			       isinf_call, tmp,
- 			       integer_zero_node);
- 	  }
- 
- 	return tmp;
-       }
- 
-     case BUILT_IN_ISFINITE:
-       if (tree_expr_finite_p (arg))
- 	return omit_one_operand_loc (loc, type, integer_one_node, arg);
-       if (tree_expr_nan_p (arg) || tree_expr_infinite_p (arg))
- 	return omit_one_operand_loc (loc, type, integer_zero_node, arg);
-       return NULL_TREE;
- 
-     case BUILT_IN_ISNAN:
-       if (tree_expr_nan_p (arg))
- 	return omit_one_operand_loc (loc, type, integer_one_node, arg);
-       if (!tree_expr_maybe_nan_p (arg))
- 	return omit_one_operand_loc (loc, type, integer_zero_node, arg);
- 
-       {
- 	bool is_ibm_extended = MODE_COMPOSITE_P (TYPE_MODE (TREE_TYPE (arg)));
- 	if (is_ibm_extended)
- 	  {
- 	    /* NaN and Inf are encoded in the high-order double value
- 	       only.  The low-order value is not significant.  */
- 	    arg = fold_build1_loc (loc, NOP_EXPR, double_type_node, arg);
- 	  }
-       }
-       arg = builtin_save_expr (arg);
-       return fold_build2_loc (loc, UNORDERED_EXPR, type, arg, arg);
- 
-     default:
-       gcc_unreachable ();
-     }
- }
- 
- /* Fold a call to __builtin_fpclassify(int, int, int, int, int, ...).
-    This builtin will generate code to return the appropriate floating
-    point classification depending on the value of the floating point
-    number passed in.  The possible return values must be supplied as
-    int arguments to the call in the following order: FP_NAN, FP_INFINITE,
-    FP_NORMAL, FP_SUBNORMAL and FP_ZERO.  The ellipses is for exactly
-    one floating point argument which is "type generic".  */
- 
- static tree
- fold_builtin_fpclassify (location_t loc, tree *args, int nargs)
- {
-   tree fp_nan, fp_infinite, fp_normal, fp_subnormal, fp_zero,
-     arg, type, res, tmp;
-   machine_mode mode;
-   REAL_VALUE_TYPE r;
-   char buf[128];
- 
-   /* Verify the required arguments in the original call.  */
-   if (nargs != 6
-       || !validate_arg (args[0], INTEGER_TYPE)
-       || !validate_arg (args[1], INTEGER_TYPE)
-       || !validate_arg (args[2], INTEGER_TYPE)
-       || !validate_arg (args[3], INTEGER_TYPE)
-       || !validate_arg (args[4], INTEGER_TYPE)
-       || !validate_arg (args[5], REAL_TYPE))
-     return NULL_TREE;
- 
-   fp_nan = args[0];
-   fp_infinite = args[1];
-   fp_normal = args[2];
-   fp_subnormal = args[3];
-   fp_zero = args[4];
-   arg = args[5];
-   type = TREE_TYPE (arg);
-   mode = TYPE_MODE (type);
-   arg = builtin_save_expr (fold_build1_loc (loc, ABS_EXPR, type, arg));
- 
-   /* fpclassify(x) ->
-        isnan(x) ? FP_NAN :
-          (fabs(x) == Inf ? FP_INFINITE :
- 	   (fabs(x) >= DBL_MIN ? FP_NORMAL :
- 	     (x == 0 ? FP_ZERO : FP_SUBNORMAL))).  */
- 
-   tmp = fold_build2_loc (loc, EQ_EXPR, integer_type_node, arg,
- 		     build_real (type, dconst0));
-   res = fold_build3_loc (loc, COND_EXPR, integer_type_node,
- 		     tmp, fp_zero, fp_subnormal);
- 
-   sprintf (buf, "0x1p%d", REAL_MODE_FORMAT (mode)->emin - 1);
-   real_from_string (&r, buf);
-   tmp = fold_build2_loc (loc, GE_EXPR, integer_type_node,
- 		     arg, build_real (type, r));
-   res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp, fp_normal, res);
- 
-   if (tree_expr_maybe_infinite_p (arg))
-     {
-       real_inf (&r);
-       tmp = fold_build2_loc (loc, EQ_EXPR, integer_type_node, arg,
- 			 build_real (type, r));
-       res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp,
- 			 fp_infinite, res);
-     }
- 
-   if (tree_expr_maybe_nan_p (arg))
-     {
-       tmp = fold_build2_loc (loc, ORDERED_EXPR, integer_type_node, arg, arg);
-       res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp, res, fp_nan);
-     }
- 
-   return res;
- }
- 
- /* Fold a call to an unordered comparison function such as
-    __builtin_isgreater().  FNDECL is the FUNCTION_DECL for the function
-    being called and ARG0 and ARG1 are the arguments for the call.
-    UNORDERED_CODE and ORDERED_CODE are comparison codes that give
-    the opposite of the desired result.  UNORDERED_CODE is used
-    for modes that can hold NaNs and ORDERED_CODE is used for
-    the rest.  */
- 
- static tree
- fold_builtin_unordered_cmp (location_t loc, tree fndecl, tree arg0, tree arg1,
- 			    enum tree_code unordered_code,
- 			    enum tree_code ordered_code)
- {
-   tree type = TREE_TYPE (TREE_TYPE (fndecl));
-   enum tree_code code;
-   tree type0, type1;
-   enum tree_code code0, code1;
-   tree cmp_type = NULL_TREE;
- 
-   type0 = TREE_TYPE (arg0);
-   type1 = TREE_TYPE (arg1);
- 
-   code0 = TREE_CODE (type0);
-   code1 = TREE_CODE (type1);
- 
-   if (code0 == REAL_TYPE && code1 == REAL_TYPE)
-     /* Choose the wider of two real types.  */
-     cmp_type = TYPE_PRECISION (type0) >= TYPE_PRECISION (type1)
-       ? type0 : type1;
-   else if (code0 == REAL_TYPE && code1 == INTEGER_TYPE)
-     cmp_type = type0;
-   else if (code0 == INTEGER_TYPE && code1 == REAL_TYPE)
-     cmp_type = type1;
- 
-   arg0 = fold_convert_loc (loc, cmp_type, arg0);
-   arg1 = fold_convert_loc (loc, cmp_type, arg1);
- 
-   if (unordered_code == UNORDERED_EXPR)
-     {
-       if (tree_expr_nan_p (arg0) || tree_expr_nan_p (arg1))
- 	return omit_two_operands_loc (loc, type, integer_one_node, arg0, arg1);
-       if (!tree_expr_maybe_nan_p (arg0) && !tree_expr_maybe_nan_p (arg1))
- 	return omit_two_operands_loc (loc, type, integer_zero_node, arg0, arg1);
-       return fold_build2_loc (loc, UNORDERED_EXPR, type, arg0, arg1);
-     }
- 
-   code = (tree_expr_maybe_nan_p (arg0) || tree_expr_maybe_nan_p (arg1))
- 	 ? unordered_code : ordered_code;
-   return fold_build1_loc (loc, TRUTH_NOT_EXPR, type,
- 		      fold_build2_loc (loc, code, type, arg0, arg1));
- }
- 
- /* Fold __builtin_{,s,u}{add,sub,mul}{,l,ll}_overflow, either into normal
-    arithmetics if it can never overflow, or into internal functions that
-    return both result of arithmetics and overflowed boolean flag in
-    a complex integer result, or some other check for overflow.
-    Similarly fold __builtin_{add,sub,mul}_overflow_p to just the overflow
-    checking part of that.  */
- 
- static tree
- fold_builtin_arith_overflow (location_t loc, enum built_in_function fcode,
- 			     tree arg0, tree arg1, tree arg2)
- {
-   enum internal_fn ifn = IFN_LAST;
-   /* The code of the expression corresponding to the built-in.  */
-   enum tree_code opcode = ERROR_MARK;
-   bool ovf_only = false;
- 
-   switch (fcode)
-     {
-     case BUILT_IN_ADD_OVERFLOW_P:
-       ovf_only = true;
-       /* FALLTHRU */
-     case BUILT_IN_ADD_OVERFLOW:
-     case BUILT_IN_SADD_OVERFLOW:
-     case BUILT_IN_SADDL_OVERFLOW:
-     case BUILT_IN_SADDLL_OVERFLOW:
-     case BUILT_IN_UADD_OVERFLOW:
-     case BUILT_IN_UADDL_OVERFLOW:
-     case BUILT_IN_UADDLL_OVERFLOW:
-       opcode = PLUS_EXPR;
-       ifn = IFN_ADD_OVERFLOW;
-       break;
-     case BUILT_IN_SUB_OVERFLOW_P:
-       ovf_only = true;
-       /* FALLTHRU */
-     case BUILT_IN_SUB_OVERFLOW:
-     case BUILT_IN_SSUB_OVERFLOW:
-     case BUILT_IN_SSUBL_OVERFLOW:
-     case BUILT_IN_SSUBLL_OVERFLOW:
-     case BUILT_IN_USUB_OVERFLOW:
-     case BUILT_IN_USUBL_OVERFLOW:
-     case BUILT_IN_USUBLL_OVERFLOW:
-       opcode = MINUS_EXPR;
-       ifn = IFN_SUB_OVERFLOW;
-       break;
-     case BUILT_IN_MUL_OVERFLOW_P:
-       ovf_only = true;
-       /* FALLTHRU */
-     case BUILT_IN_MUL_OVERFLOW:
-     case BUILT_IN_SMUL_OVERFLOW:
-     case BUILT_IN_SMULL_OVERFLOW:
-     case BUILT_IN_SMULLL_OVERFLOW:
-     case BUILT_IN_UMUL_OVERFLOW:
-     case BUILT_IN_UMULL_OVERFLOW:
-     case BUILT_IN_UMULLL_OVERFLOW:
-       opcode = MULT_EXPR;
-       ifn = IFN_MUL_OVERFLOW;
-       break;
-     default:
-       gcc_unreachable ();
-     }
- 
-   /* For the "generic" overloads, the first two arguments can have different
-      types and the last argument determines the target type to use to check
-      for overflow.  The arguments of the other overloads all have the same
-      type.  */
-   tree type = ovf_only ? TREE_TYPE (arg2) : TREE_TYPE (TREE_TYPE (arg2));
- 
-   /* For the __builtin_{add,sub,mul}_overflow_p builtins, when the first two
-      arguments are constant, attempt to fold the built-in call into a constant
-      expression indicating whether or not it detected an overflow.  */
-   if (ovf_only
-       && TREE_CODE (arg0) == INTEGER_CST
-       && TREE_CODE (arg1) == INTEGER_CST)
-     /* Perform the computation in the target type and check for overflow.  */
-     return omit_one_operand_loc (loc, boolean_type_node,
- 				 arith_overflowed_p (opcode, type, arg0, arg1)
- 				 ? boolean_true_node : boolean_false_node,
- 				 arg2);
- 
-   tree intres, ovfres;
-   if (TREE_CODE (arg0) == INTEGER_CST && TREE_CODE (arg1) == INTEGER_CST)
-     {
-       intres = fold_binary_loc (loc, opcode, type,
- 				fold_convert_loc (loc, type, arg0),
- 				fold_convert_loc (loc, type, arg1));
-       if (TREE_OVERFLOW (intres))
- 	intres = drop_tree_overflow (intres);
-       ovfres = (arith_overflowed_p (opcode, type, arg0, arg1)
- 		? boolean_true_node : boolean_false_node);
-     }
-   else
-     {
-       tree ctype = build_complex_type (type);
-       tree call = build_call_expr_internal_loc (loc, ifn, ctype, 2,
- 						arg0, arg1);
-       tree tgt = save_expr (call);
-       intres = build1_loc (loc, REALPART_EXPR, type, tgt);
-       ovfres = build1_loc (loc, IMAGPART_EXPR, type, tgt);
-       ovfres = fold_convert_loc (loc, boolean_type_node, ovfres);
-     }
- 
-   if (ovf_only)
-     return omit_one_operand_loc (loc, boolean_type_node, ovfres, arg2);
- 
-   tree mem_arg2 = build_fold_indirect_ref_loc (loc, arg2);
-   tree store
-     = fold_build2_loc (loc, MODIFY_EXPR, void_type_node, mem_arg2, intres);
-   return build2_loc (loc, COMPOUND_EXPR, boolean_type_node, store, ovfres);
- }
- 
- /* Fold a call to __builtin_FILE to a constant string.  */
- 
- static inline tree
- fold_builtin_FILE (location_t loc)
- {
-   if (const char *fname = LOCATION_FILE (loc))
-     {
-       /* The documentation says this builtin is equivalent to the preprocessor
- 	 __FILE__ macro so it appears appropriate to use the same file prefix
- 	 mappings.  */
-       fname = remap_macro_filename (fname);
-     return build_string_literal (strlen (fname) + 1, fname);
-     }
- 
-   return build_string_literal (1, "");
- }
- 
- /* Fold a call to __builtin_FUNCTION to a constant string.  */
- 
- static inline tree
- fold_builtin_FUNCTION ()
- {
-   const char *name = "";
- 
-   if (current_function_decl)
-     name = lang_hooks.decl_printable_name (current_function_decl, 0);
- 
-   return build_string_literal (strlen (name) + 1, name);
- }
- 
- /* Fold a call to __builtin_LINE to an integer constant.  */
- 
- static inline tree
- fold_builtin_LINE (location_t loc, tree type)
- {
-   return build_int_cst (type, LOCATION_LINE (loc));
- }
- 
- /* Fold a call to built-in function FNDECL with 0 arguments.
-    This function returns NULL_TREE if no simplification was possible.  */
- 
- static tree
- fold_builtin_0 (location_t loc, tree fndecl)
- {
-   tree type = TREE_TYPE (TREE_TYPE (fndecl));
-   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
-   switch (fcode)
-     {
-     case BUILT_IN_FILE:
-       return fold_builtin_FILE (loc);
- 
-     case BUILT_IN_FUNCTION:
-       return fold_builtin_FUNCTION ();
- 
-     case BUILT_IN_LINE:
-       return fold_builtin_LINE (loc, type);
- 
-     CASE_FLT_FN (BUILT_IN_INF):
-     CASE_FLT_FN_FLOATN_NX (BUILT_IN_INF):
-     case BUILT_IN_INFD32:
-     case BUILT_IN_INFD64:
-     case BUILT_IN_INFD128:
-       return fold_builtin_inf (loc, type, true);
- 
-     CASE_FLT_FN (BUILT_IN_HUGE_VAL):
-     CASE_FLT_FN_FLOATN_NX (BUILT_IN_HUGE_VAL):
-       return fold_builtin_inf (loc, type, false);
- 
-     case BUILT_IN_CLASSIFY_TYPE:
-       return fold_builtin_classify_type (NULL_TREE);
- 
-     default:
-       break;
-     }
-   return NULL_TREE;
- }
- 
- /* Fold a call to built-in function FNDECL with 1 argument, ARG0.
-    This function returns NULL_TREE if no simplification was possible.  */
- 
- static tree
- fold_builtin_1 (location_t loc, tree expr, tree fndecl, tree arg0)
- {
-   tree type = TREE_TYPE (TREE_TYPE (fndecl));
-   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
- 
-   if (TREE_CODE (arg0) == ERROR_MARK)
-     return NULL_TREE;
- 
-   if (tree ret = fold_const_call (as_combined_fn (fcode), type, arg0))
-     return ret;
- 
-   switch (fcode)
-     {
-     case BUILT_IN_CONSTANT_P:
-       {
- 	tree val = fold_builtin_constant_p (arg0);
- 
- 	/* Gimplification will pull the CALL_EXPR for the builtin out of
- 	   an if condition.  When not optimizing, we'll not CSE it back.
- 	   To avoid link error types of regressions, return false now.  */
- 	if (!val && !optimize)
- 	  val = integer_zero_node;
- 
- 	return val;
-       }
- 
-     case BUILT_IN_CLASSIFY_TYPE:
-       return fold_builtin_classify_type (arg0);
- 
-     case BUILT_IN_STRLEN:
-       return fold_builtin_strlen (loc, expr, type, arg0);
- 
-     CASE_FLT_FN (BUILT_IN_FABS):
-     CASE_FLT_FN_FLOATN_NX (BUILT_IN_FABS):
-     case BUILT_IN_FABSD32:
-     case BUILT_IN_FABSD64:
-     case BUILT_IN_FABSD128:
-       return fold_builtin_fabs (loc, arg0, type);
- 
-     case BUILT_IN_ABS:
-     case BUILT_IN_LABS:
-     case BUILT_IN_LLABS:
-     case BUILT_IN_IMAXABS:
-       return fold_builtin_abs (loc, arg0, type);
- 
-     CASE_FLT_FN (BUILT_IN_CONJ):
-       if (validate_arg (arg0, COMPLEX_TYPE)
- 	&& TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE)
- 	return fold_build1_loc (loc, CONJ_EXPR, type, arg0);
-     break;
- 
-     CASE_FLT_FN (BUILT_IN_CREAL):
-       if (validate_arg (arg0, COMPLEX_TYPE)
- 	&& TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE)
- 	return non_lvalue_loc (loc, fold_build1_loc (loc, REALPART_EXPR, type, arg0));
-     break;
- 
-     CASE_FLT_FN (BUILT_IN_CIMAG):
-       if (validate_arg (arg0, COMPLEX_TYPE)
- 	  && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE)
- 	return non_lvalue_loc (loc, fold_build1_loc (loc, IMAGPART_EXPR, type, arg0));
-     break;
- 
-     CASE_FLT_FN (BUILT_IN_CARG):
-       return fold_builtin_carg (loc, arg0, type);
- 
-     case BUILT_IN_ISASCII:
-       return fold_builtin_isascii (loc, arg0);
- 
-     case BUILT_IN_TOASCII:
-       return fold_builtin_toascii (loc, arg0);
- 
-     case BUILT_IN_ISDIGIT:
-       return fold_builtin_isdigit (loc, arg0);
- 
-     CASE_FLT_FN (BUILT_IN_FINITE):
-     case BUILT_IN_FINITED32:
-     case BUILT_IN_FINITED64:
-     case BUILT_IN_FINITED128:
-     case BUILT_IN_ISFINITE:
-       {
- 	tree ret = fold_builtin_classify (loc, fndecl, arg0, BUILT_IN_ISFINITE);
- 	if (ret)
- 	  return ret;
- 	return fold_builtin_interclass_mathfn (loc, fndecl, arg0);
-       }
- 
-     CASE_FLT_FN (BUILT_IN_ISINF):
-     case BUILT_IN_ISINFD32:
-     case BUILT_IN_ISINFD64:
-     case BUILT_IN_ISINFD128:
-       {
- 	tree ret = fold_builtin_classify (loc, fndecl, arg0, BUILT_IN_ISINF);
- 	if (ret)
- 	  return ret;
- 	return fold_builtin_interclass_mathfn (loc, fndecl, arg0);
-       }
- 
-     case BUILT_IN_ISNORMAL:
-       return fold_builtin_interclass_mathfn (loc, fndecl, arg0);
- 
-     case BUILT_IN_ISINF_SIGN:
-       return fold_builtin_classify (loc, fndecl, arg0, BUILT_IN_ISINF_SIGN);
- 
-     CASE_FLT_FN (BUILT_IN_ISNAN):
-     case BUILT_IN_ISNAND32:
-     case BUILT_IN_ISNAND64:
-     case BUILT_IN_ISNAND128:
-       return fold_builtin_classify (loc, fndecl, arg0, BUILT_IN_ISNAN);
- 
-     case BUILT_IN_FREE:
-       if (integer_zerop (arg0))
- 	return build_empty_stmt (loc);
-       break;
- 
-     default:
-       break;
-     }
- 
-   return NULL_TREE;
- 
- }
- 
- /* Folds a call EXPR (which may be null) to built-in function FNDECL
-    with 2 arguments, ARG0 and ARG1.  This function returns NULL_TREE
-    if no simplification was possible.  */
- 
- static tree
- fold_builtin_2 (location_t loc, tree expr, tree fndecl, tree arg0, tree arg1)
- {
-   tree type = TREE_TYPE (TREE_TYPE (fndecl));
-   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
- 
-   if (TREE_CODE (arg0) == ERROR_MARK
-       || TREE_CODE (arg1) == ERROR_MARK)
-     return NULL_TREE;
- 
-   if (tree ret = fold_const_call (as_combined_fn (fcode), type, arg0, arg1))
-     return ret;
- 
-   switch (fcode)
-     {
-     CASE_FLT_FN_REENT (BUILT_IN_GAMMA): /* GAMMA_R */
-     CASE_FLT_FN_REENT (BUILT_IN_LGAMMA): /* LGAMMA_R */
-       if (validate_arg (arg0, REAL_TYPE)
- 	  && validate_arg (arg1, POINTER_TYPE))
- 	return do_mpfr_lgamma_r (arg0, arg1, type);
-     break;
- 
-     CASE_FLT_FN (BUILT_IN_FREXP):
-       return fold_builtin_frexp (loc, arg0, arg1, type);
- 
-     CASE_FLT_FN (BUILT_IN_MODF):
-       return fold_builtin_modf (loc, arg0, arg1, type);
- 
-     case BUILT_IN_STRSPN:
-       return fold_builtin_strspn (loc, expr, arg0, arg1);
- 
-     case BUILT_IN_STRCSPN:
-       return fold_builtin_strcspn (loc, expr, arg0, arg1);
- 
-     case BUILT_IN_STRPBRK:
-       return fold_builtin_strpbrk (loc, expr, arg0, arg1, type);
- 
-     case BUILT_IN_EXPECT:
-       return fold_builtin_expect (loc, arg0, arg1, NULL_TREE, NULL_TREE);
- 
-     case BUILT_IN_ISGREATER:
-       return fold_builtin_unordered_cmp (loc, fndecl,
- 					 arg0, arg1, UNLE_EXPR, LE_EXPR);
-     case BUILT_IN_ISGREATEREQUAL:
-       return fold_builtin_unordered_cmp (loc, fndecl,
- 					 arg0, arg1, UNLT_EXPR, LT_EXPR);
-     case BUILT_IN_ISLESS:
-       return fold_builtin_unordered_cmp (loc, fndecl,
- 					 arg0, arg1, UNGE_EXPR, GE_EXPR);
-     case BUILT_IN_ISLESSEQUAL:
-       return fold_builtin_unordered_cmp (loc, fndecl,
- 					 arg0, arg1, UNGT_EXPR, GT_EXPR);
-     case BUILT_IN_ISLESSGREATER:
-       return fold_builtin_unordered_cmp (loc, fndecl,
- 					 arg0, arg1, UNEQ_EXPR, EQ_EXPR);
-     case BUILT_IN_ISUNORDERED:
-       return fold_builtin_unordered_cmp (loc, fndecl,
- 					 arg0, arg1, UNORDERED_EXPR,
- 					 NOP_EXPR);
- 
-       /* We do the folding for va_start in the expander.  */
-     case BUILT_IN_VA_START:
-       break;
- 
-     case BUILT_IN_OBJECT_SIZE:
-       return fold_builtin_object_size (arg0, arg1);
- 
-     case BUILT_IN_ATOMIC_ALWAYS_LOCK_FREE:
-       return fold_builtin_atomic_always_lock_free (arg0, arg1);
- 
-     case BUILT_IN_ATOMIC_IS_LOCK_FREE:
-       return fold_builtin_atomic_is_lock_free (arg0, arg1);
- 
-     default:
-       break;
-     }
-   return NULL_TREE;
- }
- 
- /* Fold a call to built-in function FNDECL with 3 arguments, ARG0, ARG1,
-    and ARG2.
-    This function returns NULL_TREE if no simplification was possible.  */
- 
- static tree
- fold_builtin_3 (location_t loc, tree fndecl,
- 		tree arg0, tree arg1, tree arg2)
- {
-   tree type = TREE_TYPE (TREE_TYPE (fndecl));
-   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
- 
-   if (TREE_CODE (arg0) == ERROR_MARK
-       || TREE_CODE (arg1) == ERROR_MARK
-       || TREE_CODE (arg2) == ERROR_MARK)
-     return NULL_TREE;
- 
-   if (tree ret = fold_const_call (as_combined_fn (fcode), type,
- 				  arg0, arg1, arg2))
-     return ret;
- 
-   switch (fcode)
-     {
- 
-     CASE_FLT_FN (BUILT_IN_SINCOS):
-       return fold_builtin_sincos (loc, arg0, arg1, arg2);
- 
-     CASE_FLT_FN (BUILT_IN_REMQUO):
-       if (validate_arg (arg0, REAL_TYPE)
- 	  && validate_arg (arg1, REAL_TYPE)
- 	  && validate_arg (arg2, POINTER_TYPE))
- 	return do_mpfr_remquo (arg0, arg1, arg2);
-     break;
- 
-     case BUILT_IN_MEMCMP:
-       return fold_builtin_memcmp (loc, arg0, arg1, arg2);
- 
-     case BUILT_IN_EXPECT:
-       return fold_builtin_expect (loc, arg0, arg1, arg2, NULL_TREE);
- 
-     case BUILT_IN_EXPECT_WITH_PROBABILITY:
-       return fold_builtin_expect (loc, arg0, arg1, NULL_TREE, arg2);
- 
-     case BUILT_IN_ADD_OVERFLOW:
-     case BUILT_IN_SUB_OVERFLOW:
-     case BUILT_IN_MUL_OVERFLOW:
-     case BUILT_IN_ADD_OVERFLOW_P:
-     case BUILT_IN_SUB_OVERFLOW_P:
-     case BUILT_IN_MUL_OVERFLOW_P:
-     case BUILT_IN_SADD_OVERFLOW:
-     case BUILT_IN_SADDL_OVERFLOW:
-     case BUILT_IN_SADDLL_OVERFLOW:
-     case BUILT_IN_SSUB_OVERFLOW:
-     case BUILT_IN_SSUBL_OVERFLOW:
-     case BUILT_IN_SSUBLL_OVERFLOW:
-     case BUILT_IN_SMUL_OVERFLOW:
-     case BUILT_IN_SMULL_OVERFLOW:
-     case BUILT_IN_SMULLL_OVERFLOW:
-     case BUILT_IN_UADD_OVERFLOW:
-     case BUILT_IN_UADDL_OVERFLOW:
-     case BUILT_IN_UADDLL_OVERFLOW:
-     case BUILT_IN_USUB_OVERFLOW:
-     case BUILT_IN_USUBL_OVERFLOW:
-     case BUILT_IN_USUBLL_OVERFLOW:
-     case BUILT_IN_UMUL_OVERFLOW:
-     case BUILT_IN_UMULL_OVERFLOW:
-     case BUILT_IN_UMULLL_OVERFLOW:
-       return fold_builtin_arith_overflow (loc, fcode, arg0, arg1, arg2);
- 
-     default:
-       break;
-     }
-   return NULL_TREE;
- }
- 
- /* Folds a call EXPR (which may be null) to built-in function FNDECL.
-    ARGS is an array of NARGS arguments.  IGNORE is true if the result
-    of the function call is ignored.  This function returns NULL_TREE
-    if no simplification was possible.  */
- 
- static tree
- fold_builtin_n (location_t loc, tree expr, tree fndecl, tree *args,
- 		int nargs, bool)
- {
-   tree ret = NULL_TREE;
- 
-   switch (nargs)
-     {
-     case 0:
-       ret = fold_builtin_0 (loc, fndecl);
-       break;
-     case 1:
-       ret = fold_builtin_1 (loc, expr, fndecl, args[0]);
-       break;
-     case 2:
-       ret = fold_builtin_2 (loc, expr, fndecl, args[0], args[1]);
-       break;
-     case 3:
-       ret = fold_builtin_3 (loc, fndecl, args[0], args[1], args[2]);
-       break;
-     default:
-       ret = fold_builtin_varargs (loc, fndecl, args, nargs);
-       break;
-     }
-   if (ret)
-     {
-       ret = build1 (NOP_EXPR, TREE_TYPE (ret), ret);
-       SET_EXPR_LOCATION (ret, loc);
-       return ret;
-     }
-   return NULL_TREE;
- }
- 
- /* Construct a new CALL_EXPR to FNDECL using the tail of the argument
-    list ARGS along with N new arguments in NEWARGS.  SKIP is the number
-    of arguments in ARGS to be omitted.  OLDNARGS is the number of
-    elements in ARGS.  */
- 
- static tree
- rewrite_call_expr_valist (location_t loc, int oldnargs, tree *args,
- 			  int skip, tree fndecl, int n, va_list newargs)
- {
-   int nargs = oldnargs - skip + n;
-   tree *buffer;
- 
-   if (n > 0)
-     {
-       int i, j;
- 
-       buffer = XALLOCAVEC (tree, nargs);
-       for (i = 0; i < n; i++)
- 	buffer[i] = va_arg (newargs, tree);
-       for (j = skip; j < oldnargs; j++, i++)
- 	buffer[i] = args[j];
-     }
-   else
-     buffer = args + skip;
- 
-   return build_call_expr_loc_array (loc, fndecl, nargs, buffer);
- }
- 
- /* Return true if FNDECL shouldn't be folded right now.
-    If a built-in function has an inline attribute always_inline
-    wrapper, defer folding it after always_inline functions have
-    been inlined, otherwise e.g. -D_FORTIFY_SOURCE checking
-    might not be performed.  */
- 
- bool
- avoid_folding_inline_builtin (tree fndecl)
- {
-   return (DECL_DECLARED_INLINE_P (fndecl)
- 	  && DECL_DISREGARD_INLINE_LIMITS (fndecl)
- 	  && cfun
- 	  && !cfun->always_inline_functions_inlined
- 	  && lookup_attribute ("always_inline", DECL_ATTRIBUTES (fndecl)));
- }
- 
- /* A wrapper function for builtin folding that prevents warnings for
-    "statement without effect" and the like, caused by removing the
-    call node earlier than the warning is generated.  */
- 
- tree
- fold_call_expr (location_t loc, tree exp, bool ignore)
- {
-   tree ret = NULL_TREE;
-   tree fndecl = get_callee_fndecl (exp);
-   if (fndecl && fndecl_built_in_p (fndecl)
-       /* If CALL_EXPR_VA_ARG_PACK is set, the arguments aren't finalized
- 	 yet.  Defer folding until we see all the arguments
- 	 (after inlining).  */
-       && !CALL_EXPR_VA_ARG_PACK (exp))
-     {
-       int nargs = call_expr_nargs (exp);
- 
-       /* Before gimplification CALL_EXPR_VA_ARG_PACK is not set, but
- 	 instead last argument is __builtin_va_arg_pack ().  Defer folding
- 	 even in that case, until arguments are finalized.  */
-       if (nargs && TREE_CODE (CALL_EXPR_ARG (exp, nargs - 1)) == CALL_EXPR)
- 	{
- 	  tree fndecl2 = get_callee_fndecl (CALL_EXPR_ARG (exp, nargs - 1));
- 	  if (fndecl2 && fndecl_built_in_p (fndecl2, BUILT_IN_VA_ARG_PACK))
- 	    return NULL_TREE;
- 	}
- 
-       if (avoid_folding_inline_builtin (fndecl))
- 	return NULL_TREE;
- 
-       if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
-         return targetm.fold_builtin (fndecl, call_expr_nargs (exp),
- 				     CALL_EXPR_ARGP (exp), ignore);
-       else
- 	{
- 	  tree *args = CALL_EXPR_ARGP (exp);
- 	  ret = fold_builtin_n (loc, exp, fndecl, args, nargs, ignore);
- 	  if (ret)
- 	    return ret;
- 	}
-     }
-   return NULL_TREE;
- }
- 
- /* Fold a CALL_EXPR with type TYPE with FN as the function expression.
-    N arguments are passed in the array ARGARRAY.  Return a folded
-    expression or NULL_TREE if no simplification was possible.  */
- 
- tree
- fold_builtin_call_array (location_t loc, tree,
- 			 tree fn,
- 			 int n,
- 			 tree *argarray)
- {
-   if (TREE_CODE (fn) != ADDR_EXPR)
-     return NULL_TREE;
- 
-   tree fndecl = TREE_OPERAND (fn, 0);
-   if (TREE_CODE (fndecl) == FUNCTION_DECL
-       && fndecl_built_in_p (fndecl))
-     {
-       /* If last argument is __builtin_va_arg_pack (), arguments to this
- 	 function are not finalized yet.  Defer folding until they are.  */
-       if (n && TREE_CODE (argarray[n - 1]) == CALL_EXPR)
- 	{
- 	  tree fndecl2 = get_callee_fndecl (argarray[n - 1]);
- 	  if (fndecl2 && fndecl_built_in_p (fndecl2, BUILT_IN_VA_ARG_PACK))
- 	    return NULL_TREE;
- 	}
-       if (avoid_folding_inline_builtin (fndecl))
- 	return NULL_TREE;
-       if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
- 	return targetm.fold_builtin (fndecl, n, argarray, false);
-       else
- 	return fold_builtin_n (loc, NULL_TREE, fndecl, argarray, n, false);
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Construct a new CALL_EXPR using the tail of the argument list of EXP
-    along with N new arguments specified as the "..." parameters.  SKIP
-    is the number of arguments in EXP to be omitted.  This function is used
-    to do varargs-to-varargs transformations.  */
- 
- static tree
- rewrite_call_expr (location_t loc, tree exp, int skip, tree fndecl, int n, ...)
- {
-   va_list ap;
-   tree t;
- 
-   va_start (ap, n);
-   t = rewrite_call_expr_valist (loc, call_expr_nargs (exp),
- 				CALL_EXPR_ARGP (exp), skip, fndecl, n, ap);
-   va_end (ap);
- 
-   return t;
- }
- 
- /* Validate a single argument ARG against a tree code CODE representing
-    a type.  Return true when argument is valid.  */
- 
- static bool
- validate_arg (const_tree arg, enum tree_code code)
- {
-   if (!arg)
-     return false;
-   else if (code == POINTER_TYPE)
-     return POINTER_TYPE_P (TREE_TYPE (arg));
-   else if (code == INTEGER_TYPE)
-     return INTEGRAL_TYPE_P (TREE_TYPE (arg));
-   return code == TREE_CODE (TREE_TYPE (arg));
- }
- 
- /* This function validates the types of a function call argument list
-    against a specified list of tree_codes.  If the last specifier is a 0,
-    that represents an ellipses, otherwise the last specifier must be a
-    VOID_TYPE.
- 
-    This is the GIMPLE version of validate_arglist.  Eventually we want to
-    completely convert builtins.c to work from GIMPLEs and the tree based
-    validate_arglist will then be removed.  */
- 
- bool
- validate_gimple_arglist (const gcall *call, ...)
- {
-   enum tree_code code;
-   bool res = 0;
-   va_list ap;
-   const_tree arg;
-   size_t i;
- 
-   va_start (ap, call);
-   i = 0;
- 
-   do
-     {
-       code = (enum tree_code) va_arg (ap, int);
-       switch (code)
- 	{
- 	case 0:
- 	  /* This signifies an ellipses, any further arguments are all ok.  */
- 	  res = true;
- 	  goto end;
- 	case VOID_TYPE:
- 	  /* This signifies an endlink, if no arguments remain, return
- 	     true, otherwise return false.  */
- 	  res = (i == gimple_call_num_args (call));
- 	  goto end;
- 	default:
- 	  /* If no parameters remain or the parameter's code does not
- 	     match the specified code, return false.  Otherwise continue
- 	     checking any remaining arguments.  */
- 	  arg = gimple_call_arg (call, i++);
- 	  if (!validate_arg (arg, code))
- 	    goto end;
- 	  break;
- 	}
-     }
-   while (1);
- 
-   /* We need gotos here since we can only have one VA_CLOSE in a
-      function.  */
-  end: ;
-   va_end (ap);
- 
-   return res;
- }
- 
- /* Default target-specific builtin expander that does nothing.  */
- 
- rtx
- default_expand_builtin (tree exp ATTRIBUTE_UNUSED,
- 			rtx target ATTRIBUTE_UNUSED,
- 			rtx subtarget ATTRIBUTE_UNUSED,
- 			machine_mode mode ATTRIBUTE_UNUSED,
- 			int ignore ATTRIBUTE_UNUSED)
- {
-   return NULL_RTX;
- }
- 
- /* Returns true is EXP represents data that would potentially reside
-    in a readonly section.  */
- 
- bool
- readonly_data_expr (tree exp)
- {
-   STRIP_NOPS (exp);
- 
-   if (TREE_CODE (exp) != ADDR_EXPR)
-     return false;
- 
-   exp = get_base_address (TREE_OPERAND (exp, 0));
-   if (!exp)
-     return false;
- 
-   /* Make sure we call decl_readonly_section only for trees it
-      can handle (since it returns true for everything it doesn't
-      understand).  */
-   if (TREE_CODE (exp) == STRING_CST
-       || TREE_CODE (exp) == CONSTRUCTOR
-       || (VAR_P (exp) && TREE_STATIC (exp)))
-     return decl_readonly_section (exp, 0);
-   else
-     return false;
- }
- 
- /* Simplify a call to the strpbrk builtin.  S1 and S2 are the arguments
-    to the call, and TYPE is its return type.
- 
-    Return NULL_TREE if no simplification was possible, otherwise return the
-    simplified form of the call as a tree.
- 
-    The simplified form may be a constant or other expression which
-    computes the same value, but in a more efficient manner (including
-    calls to other builtin functions).
- 
-    The call may contain arguments which need to be evaluated, but
-    which are not useful to determine the result of the call.  In
-    this case we return a chain of COMPOUND_EXPRs.  The LHS of each
-    COMPOUND_EXPR will be an argument which must be evaluated.
-    COMPOUND_EXPRs are chained through their RHS.  The RHS of the last
-    COMPOUND_EXPR in the chain will contain the tree for the simplified
-    form of the builtin function call.  */
- 
- static tree
- fold_builtin_strpbrk (location_t loc, tree, tree s1, tree s2, tree type)
- {
-   if (!validate_arg (s1, POINTER_TYPE)
-       || !validate_arg (s2, POINTER_TYPE))
-     return NULL_TREE;
- 
-   tree fn;
-   const char *p1, *p2;
- 
-   p2 = c_getstr (s2);
-   if (p2 == NULL)
-     return NULL_TREE;
- 
-   p1 = c_getstr (s1);
-   if (p1 != NULL)
-     {
-       const char *r = strpbrk (p1, p2);
-       tree tem;
- 
-       if (r == NULL)
- 	return build_int_cst (TREE_TYPE (s1), 0);
- 
-       /* Return an offset into the constant string argument.  */
-       tem = fold_build_pointer_plus_hwi_loc (loc, s1, r - p1);
-       return fold_convert_loc (loc, type, tem);
-     }
- 
-   if (p2[0] == '\0')
-     /* strpbrk(x, "") == NULL.
-        Evaluate and ignore s1 in case it had side-effects.  */
-     return omit_one_operand_loc (loc, type, integer_zero_node, s1);
- 
-   if (p2[1] != '\0')
-     return NULL_TREE;  /* Really call strpbrk.  */
- 
-   fn = builtin_decl_implicit (BUILT_IN_STRCHR);
-   if (!fn)
-     return NULL_TREE;
- 
-   /* New argument list transforming strpbrk(s1, s2) to
-      strchr(s1, s2[0]).  */
-   return build_call_expr_loc (loc, fn, 2, s1,
- 			      build_int_cst (integer_type_node, p2[0]));
- }
- 
- /* Simplify a call to the strspn builtin.  S1 and S2 are the arguments
-    to the call.
- 
-    Return NULL_TREE if no simplification was possible, otherwise return the
-    simplified form of the call as a tree.
- 
-    The simplified form may be a constant or other expression which
-    computes the same value, but in a more efficient manner (including
-    calls to other builtin functions).
- 
-    The call may contain arguments which need to be evaluated, but
-    which are not useful to determine the result of the call.  In
-    this case we return a chain of COMPOUND_EXPRs.  The LHS of each
-    COMPOUND_EXPR will be an argument which must be evaluated.
-    COMPOUND_EXPRs are chained through their RHS.  The RHS of the last
-    COMPOUND_EXPR in the chain will contain the tree for the simplified
-    form of the builtin function call.  */
- 
- static tree
- fold_builtin_strspn (location_t loc, tree expr, tree s1, tree s2)
- {
-   if (!validate_arg (s1, POINTER_TYPE)
-       || !validate_arg (s2, POINTER_TYPE))
-     return NULL_TREE;
- 
-   if (!check_nul_terminated_array (expr, s1)
-       || !check_nul_terminated_array (expr, s2))
-     return NULL_TREE;
- 
-   const char *p1 = c_getstr (s1), *p2 = c_getstr (s2);
- 
-   /* If either argument is "", return NULL_TREE.  */
-   if ((p1 && *p1 == '\0') || (p2 && *p2 == '\0'))
-     /* Evaluate and ignore both arguments in case either one has
-        side-effects.  */
-     return omit_two_operands_loc (loc, size_type_node, size_zero_node,
- 				  s1, s2);
-   return NULL_TREE;
- }
- 
- /* Simplify a call to the strcspn builtin.  S1 and S2 are the arguments
-    to the call.
- 
-    Return NULL_TREE if no simplification was possible, otherwise return the
-    simplified form of the call as a tree.
- 
-    The simplified form may be a constant or other expression which
-    computes the same value, but in a more efficient manner (including
-    calls to other builtin functions).
- 
-    The call may contain arguments which need to be evaluated, but
-    which are not useful to determine the result of the call.  In
-    this case we return a chain of COMPOUND_EXPRs.  The LHS of each
-    COMPOUND_EXPR will be an argument which must be evaluated.
-    COMPOUND_EXPRs are chained through their RHS.  The RHS of the last
-    COMPOUND_EXPR in the chain will contain the tree for the simplified
-    form of the builtin function call.  */
- 
- static tree
- fold_builtin_strcspn (location_t loc, tree expr, tree s1, tree s2)
- {
-   if (!validate_arg (s1, POINTER_TYPE)
-       || !validate_arg (s2, POINTER_TYPE))
-     return NULL_TREE;
- 
-   if (!check_nul_terminated_array (expr, s1)
-       || !check_nul_terminated_array (expr, s2))
-     return NULL_TREE;
- 
-   /* If the first argument is "", return NULL_TREE.  */
-   const char *p1 = c_getstr (s1);
-   if (p1 && *p1 == '\0')
-     {
-       /* Evaluate and ignore argument s2 in case it has
- 	 side-effects.  */
-       return omit_one_operand_loc (loc, size_type_node,
- 				   size_zero_node, s2);
-     }
- 
-   /* If the second argument is "", return __builtin_strlen(s1).  */
-   const char *p2 = c_getstr (s2);
-   if (p2 && *p2 == '\0')
-     {
-       tree fn = builtin_decl_implicit (BUILT_IN_STRLEN);
- 
-       /* If the replacement _DECL isn't initialized, don't do the
- 	 transformation.  */
-       if (!fn)
- 	return NULL_TREE;
- 
-       return build_call_expr_loc (loc, fn, 1, s1);
-     }
-   return NULL_TREE;
- }
- 
- /* Fold the next_arg or va_start call EXP. Returns true if there was an error
-    produced.  False otherwise.  This is done so that we don't output the error
-    or warning twice or three times.  */
- 
- bool
- fold_builtin_next_arg (tree exp, bool va_start_p)
- {
-   tree fntype = TREE_TYPE (current_function_decl);
-   int nargs = call_expr_nargs (exp);
-   tree arg;
-   /* There is good chance the current input_location points inside the
-      definition of the va_start macro (perhaps on the token for
-      builtin) in a system header, so warnings will not be emitted.
-      Use the location in real source code.  */
-   location_t current_location =
-     linemap_unwind_to_first_non_reserved_loc (line_table, input_location,
- 					      NULL);
- 
-   if (!stdarg_p (fntype))
-     {
-       error ("%<va_start%> used in function with fixed arguments");
-       return true;
-     }
- 
-   if (va_start_p)
-     {
-       if (va_start_p && (nargs != 2))
- 	{
- 	  error ("wrong number of arguments to function %<va_start%>");
- 	  return true;
- 	}
-       arg = CALL_EXPR_ARG (exp, 1);
-     }
-   /* We use __builtin_va_start (ap, 0, 0) or __builtin_next_arg (0, 0)
-      when we checked the arguments and if needed issued a warning.  */
-   else
-     {
-       if (nargs == 0)
- 	{
- 	  /* Evidently an out of date version of <stdarg.h>; can't validate
- 	     va_start's second argument, but can still work as intended.  */
- 	  warning_at (current_location,
- 		      OPT_Wvarargs,
- 		   "%<__builtin_next_arg%> called without an argument");
- 	  return true;
- 	}
-       else if (nargs > 1)
- 	{
- 	  error ("wrong number of arguments to function %<__builtin_next_arg%>");
- 	  return true;
- 	}
-       arg = CALL_EXPR_ARG (exp, 0);
-     }
- 
-   if (TREE_CODE (arg) == SSA_NAME
-       && SSA_NAME_VAR (arg))
-     arg = SSA_NAME_VAR (arg);
- 
-   /* We destructively modify the call to be __builtin_va_start (ap, 0)
-      or __builtin_next_arg (0) the first time we see it, after checking
-      the arguments and if needed issuing a warning.  */
-   if (!integer_zerop (arg))
-     {
-       tree last_parm = tree_last (DECL_ARGUMENTS (current_function_decl));
- 
-       /* Strip off all nops for the sake of the comparison.  This
- 	 is not quite the same as STRIP_NOPS.  It does more.
- 	 We must also strip off INDIRECT_EXPR for C++ reference
- 	 parameters.  */
-       while (CONVERT_EXPR_P (arg)
- 	     || TREE_CODE (arg) == INDIRECT_REF)
- 	arg = TREE_OPERAND (arg, 0);
-       if (arg != last_parm)
- 	{
- 	  /* FIXME: Sometimes with the tree optimizers we can get the
- 	     not the last argument even though the user used the last
- 	     argument.  We just warn and set the arg to be the last
- 	     argument so that we will get wrong-code because of
- 	     it.  */
- 	  warning_at (current_location,
- 		      OPT_Wvarargs,
- 		      "second parameter of %<va_start%> not last named argument");
- 	}
- 
-       /* Undefined by C99 7.15.1.4p4 (va_start):
-          "If the parameter parmN is declared with the register storage
-          class, with a function or array type, or with a type that is
-          not compatible with the type that results after application of
-          the default argument promotions, the behavior is undefined."
-       */
-       else if (DECL_REGISTER (arg))
- 	{
- 	  warning_at (current_location,
- 		      OPT_Wvarargs,
- 		      "undefined behavior when second parameter of "
- 		      "%<va_start%> is declared with %<register%> storage");
- 	}
- 
-       /* We want to verify the second parameter just once before the tree
- 	 optimizers are run and then avoid keeping it in the tree,
- 	 as otherwise we could warn even for correct code like:
- 	 void foo (int i, ...)
- 	 { va_list ap; i++; va_start (ap, i); va_end (ap); }  */
-       if (va_start_p)
- 	CALL_EXPR_ARG (exp, 1) = integer_zero_node;
-       else
- 	CALL_EXPR_ARG (exp, 0) = integer_zero_node;
-     }
-   return false;
- }
- 
- 
- /* Expand a call EXP to __builtin_object_size.  */
- 
- static rtx
- expand_builtin_object_size (tree exp)
- {
-   tree ost;
-   int object_size_type;
-   tree fndecl = get_callee_fndecl (exp);
- 
-   if (!validate_arglist (exp, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
-     {
-       error ("%Kfirst argument of %qD must be a pointer, second integer constant",
- 	     exp, fndecl);
-       expand_builtin_trap ();
-       return const0_rtx;
-     }
- 
-   ost = CALL_EXPR_ARG (exp, 1);
-   STRIP_NOPS (ost);
- 
-   if (TREE_CODE (ost) != INTEGER_CST
-       || tree_int_cst_sgn (ost) < 0
-       || compare_tree_int (ost, 3) > 0)
-     {
-       error ("%Klast argument of %qD is not integer constant between 0 and 3",
- 	     exp, fndecl);
-       expand_builtin_trap ();
-       return const0_rtx;
-     }
- 
-   object_size_type = tree_to_shwi (ost);
- 
-   return object_size_type < 2 ? constm1_rtx : const0_rtx;
- }
- 
- /* Expand EXP, a call to the __mem{cpy,pcpy,move,set}_chk builtin.
-    FCODE is the BUILT_IN_* to use.
-    Return NULL_RTX if we failed; the caller should emit a normal call,
-    otherwise try to get the result in TARGET, if convenient (and in
-    mode MODE if that's convenient).  */
- 
- static rtx
- expand_builtin_memory_chk (tree exp, rtx target, machine_mode mode,
- 			   enum built_in_function fcode)
- {
-   if (!validate_arglist (exp,
- 			 POINTER_TYPE,
- 			 fcode == BUILT_IN_MEMSET_CHK
- 			 ? INTEGER_TYPE : POINTER_TYPE,
- 			 INTEGER_TYPE, INTEGER_TYPE, VOID_TYPE))
-     return NULL_RTX;
- 
-   tree dest = CALL_EXPR_ARG (exp, 0);
-   tree src = CALL_EXPR_ARG (exp, 1);
-   tree len = CALL_EXPR_ARG (exp, 2);
-   tree size = CALL_EXPR_ARG (exp, 3);
- 
-   /* FIXME: Set access mode to write only for memset et al.  */
-   bool sizes_ok = check_access (exp, len, /*maxread=*/NULL_TREE,
- 				/*srcstr=*/NULL_TREE, size, access_read_write);
- 
-   if (!tree_fits_uhwi_p (size))
-     return NULL_RTX;
- 
-   if (tree_fits_uhwi_p (len) || integer_all_onesp (size))
-     {
-       /* Avoid transforming the checking call to an ordinary one when
- 	 an overflow has been detected or when the call couldn't be
- 	 validated because the size is not constant.  */
-       if (!sizes_ok && !integer_all_onesp (size) && tree_int_cst_lt (size, len))
- 	return NULL_RTX;
- 
-       tree fn = NULL_TREE;
-       /* If __builtin_mem{cpy,pcpy,move,set}_chk is used, assume
- 	 mem{cpy,pcpy,move,set} is available.  */
-       switch (fcode)
- 	{
- 	case BUILT_IN_MEMCPY_CHK:
- 	  fn = builtin_decl_explicit (BUILT_IN_MEMCPY);
- 	  break;
- 	case BUILT_IN_MEMPCPY_CHK:
- 	  fn = builtin_decl_explicit (BUILT_IN_MEMPCPY);
- 	  break;
- 	case BUILT_IN_MEMMOVE_CHK:
- 	  fn = builtin_decl_explicit (BUILT_IN_MEMMOVE);
- 	  break;
- 	case BUILT_IN_MEMSET_CHK:
- 	  fn = builtin_decl_explicit (BUILT_IN_MEMSET);
- 	  break;
- 	default:
- 	  break;
- 	}
- 
-       if (! fn)
- 	return NULL_RTX;
- 
-       fn = build_call_nofold_loc (EXPR_LOCATION (exp), fn, 3, dest, src, len);
-       gcc_assert (TREE_CODE (fn) == CALL_EXPR);
-       CALL_EXPR_TAILCALL (fn) = CALL_EXPR_TAILCALL (exp);
-       return expand_expr (fn, target, mode, EXPAND_NORMAL);
-     }
-   else if (fcode == BUILT_IN_MEMSET_CHK)
-     return NULL_RTX;
-   else
-     {
-       unsigned int dest_align = get_pointer_alignment (dest);
- 
-       /* If DEST is not a pointer type, call the normal function.  */
-       if (dest_align == 0)
- 	return NULL_RTX;
- 
-       /* If SRC and DEST are the same (and not volatile), do nothing.  */
-       if (operand_equal_p (src, dest, 0))
- 	{
- 	  tree expr;
- 
- 	  if (fcode != BUILT_IN_MEMPCPY_CHK)
- 	    {
- 	      /* Evaluate and ignore LEN in case it has side-effects.  */
- 	      expand_expr (len, const0_rtx, VOIDmode, EXPAND_NORMAL);
- 	      return expand_expr (dest, target, mode, EXPAND_NORMAL);
- 	    }
- 
- 	  expr = fold_build_pointer_plus (dest, len);
- 	  return expand_expr (expr, target, mode, EXPAND_NORMAL);
- 	}
- 
-       /* __memmove_chk special case.  */
-       if (fcode == BUILT_IN_MEMMOVE_CHK)
- 	{
- 	  unsigned int src_align = get_pointer_alignment (src);
- 
- 	  if (src_align == 0)
- 	    return NULL_RTX;
- 
- 	  /* If src is categorized for a readonly section we can use
- 	     normal __memcpy_chk.  */
- 	  if (readonly_data_expr (src))
- 	    {
- 	      tree fn = builtin_decl_explicit (BUILT_IN_MEMCPY_CHK);
- 	      if (!fn)
- 		return NULL_RTX;
- 	      fn = build_call_nofold_loc (EXPR_LOCATION (exp), fn, 4,
- 					  dest, src, len, size);
- 	      gcc_assert (TREE_CODE (fn) == CALL_EXPR);
- 	      CALL_EXPR_TAILCALL (fn) = CALL_EXPR_TAILCALL (exp);
- 	      return expand_expr (fn, target, mode, EXPAND_NORMAL);
- 	    }
- 	}
-       return NULL_RTX;
-     }
- }
- 
- /* Emit warning if a buffer overflow is detected at compile time.  */
- 
- static void
- maybe_emit_chk_warning (tree exp, enum built_in_function fcode)
- {
-   /* The source string.  */
-   tree srcstr = NULL_TREE;
-   /* The size of the destination object returned by __builtin_object_size.  */
-   tree objsize = NULL_TREE;
-   /* The string that is being concatenated with (as in __strcat_chk)
-      or null if it isn't.  */
-   tree catstr = NULL_TREE;
-   /* The maximum length of the source sequence in a bounded operation
-      (such as __strncat_chk) or null if the operation isn't bounded
-      (such as __strcat_chk).  */
-   tree maxread = NULL_TREE;
-   /* The exact size of the access (such as in __strncpy_chk).  */
-   tree size = NULL_TREE;
-   /* The access by the function that's checked.  Except for snprintf
-      both writing and reading is checked.  */
-   access_mode mode = access_read_write;
- 
-   switch (fcode)
-     {
-     case BUILT_IN_STRCPY_CHK:
-     case BUILT_IN_STPCPY_CHK:
-       srcstr = CALL_EXPR_ARG (exp, 1);
-       objsize = CALL_EXPR_ARG (exp, 2);
-       break;
- 
-     case BUILT_IN_STRCAT_CHK:
-       /* For __strcat_chk the warning will be emitted only if overflowing
- 	 by at least strlen (dest) + 1 bytes.  */
-       catstr = CALL_EXPR_ARG (exp, 0);
-       srcstr = CALL_EXPR_ARG (exp, 1);
-       objsize = CALL_EXPR_ARG (exp, 2);
-       break;
- 
-     case BUILT_IN_STRNCAT_CHK:
-       catstr = CALL_EXPR_ARG (exp, 0);
-       srcstr = CALL_EXPR_ARG (exp, 1);
-       maxread = CALL_EXPR_ARG (exp, 2);
-       objsize = CALL_EXPR_ARG (exp, 3);
-       break;
- 
-     case BUILT_IN_STRNCPY_CHK:
-     case BUILT_IN_STPNCPY_CHK:
-       srcstr = CALL_EXPR_ARG (exp, 1);
-       size = CALL_EXPR_ARG (exp, 2);
-       objsize = CALL_EXPR_ARG (exp, 3);
-       break;
- 
-     case BUILT_IN_SNPRINTF_CHK:
-     case BUILT_IN_VSNPRINTF_CHK:
-       maxread = CALL_EXPR_ARG (exp, 1);
-       objsize = CALL_EXPR_ARG (exp, 3);
-       /* The only checked access the write to the destination.  */
-       mode = access_write_only;
-       break;
-     default:
-       gcc_unreachable ();
-     }
- 
-   if (catstr && maxread)
-     {
-       /* Check __strncat_chk.  There is no way to determine the length
- 	 of the string to which the source string is being appended so
- 	 just warn when the length of the source string is not known.  */
-       check_strncat_sizes (exp, objsize);
-       return;
-     }
- 
-   check_access (exp, size, maxread, srcstr, objsize, mode);
- }
- 
- /* Emit warning if a buffer overflow is detected at compile time
-    in __sprintf_chk/__vsprintf_chk calls.  */
- 
- static void
- maybe_emit_sprintf_chk_warning (tree exp, enum built_in_function fcode)
- {
-   tree size, len, fmt;
-   const char *fmt_str;
-   int nargs = call_expr_nargs (exp);
- 
-   /* Verify the required arguments in the original call.  */
- 
-   if (nargs < 4)
-     return;
-   size = CALL_EXPR_ARG (exp, 2);
-   fmt = CALL_EXPR_ARG (exp, 3);
- 
-   if (! tree_fits_uhwi_p (size) || integer_all_onesp (size))
-     return;
- 
-   /* Check whether the format is a literal string constant.  */
-   fmt_str = c_getstr (fmt);
-   if (fmt_str == NULL)
-     return;
- 
-   if (!init_target_chars ())
-     return;
- 
-   /* If the format doesn't contain % args or %%, we know its size.  */
-   if (strchr (fmt_str, target_percent) == 0)
-     len = build_int_cstu (size_type_node, strlen (fmt_str));
-   /* If the format is "%s" and first ... argument is a string literal,
-      we know it too.  */
-   else if (fcode == BUILT_IN_SPRINTF_CHK
- 	   && strcmp (fmt_str, target_percent_s) == 0)
-     {
-       tree arg;
- 
-       if (nargs < 5)
- 	return;
-       arg = CALL_EXPR_ARG (exp, 4);
-       if (! POINTER_TYPE_P (TREE_TYPE (arg)))
- 	return;
- 
-       len = c_strlen (arg, 1);
-       if (!len || ! tree_fits_uhwi_p (len))
- 	return;
-     }
-   else
-     return;
- 
-   /* Add one for the terminating nul.  */
-   len = fold_build2 (PLUS_EXPR, TREE_TYPE (len), len, size_one_node);
- 
-   check_access (exp, /*size=*/NULL_TREE, /*maxread=*/NULL_TREE, len, size,
- 		access_write_only);
- }
- 
- /* Return true if STMT is a call to an allocation function.  Unless
-    ALL_ALLOC is set, consider only functions that return dynmamically
-    allocated objects.  Otherwise return true even for all forms of
-    alloca (including VLA).  */
- 
- static bool
- fndecl_alloc_p (tree fndecl, bool all_alloc)
- {
-   if (!fndecl)
-     return false;
- 
-   /* A call to operator new isn't recognized as one to a built-in.  */
-   if (DECL_IS_OPERATOR_NEW_P (fndecl))
-     return true;
- 
-   if (fndecl_built_in_p (fndecl, BUILT_IN_NORMAL))
-     {
-       switch (DECL_FUNCTION_CODE (fndecl))
- 	{
- 	case BUILT_IN_ALLOCA:
- 	case BUILT_IN_ALLOCA_WITH_ALIGN:
- 	  return all_alloc;
- 	case BUILT_IN_ALIGNED_ALLOC:
- 	case BUILT_IN_CALLOC:
- 	case BUILT_IN_GOMP_ALLOC:
- 	case BUILT_IN_MALLOC:
- 	case BUILT_IN_REALLOC:
- 	case BUILT_IN_STRDUP:
- 	case BUILT_IN_STRNDUP:
- 	  return true;
- 	default:
- 	  break;
- 	}
-     }
- 
-   /* A function is considered an allocation function if it's declared
-      with attribute malloc with an argument naming its associated
-      deallocation function.  */
-   tree attrs = DECL_ATTRIBUTES (fndecl);
-   if (!attrs)
-     return false;
- 
-   for (tree allocs = attrs;
-        (allocs = lookup_attribute ("malloc", allocs));
-        allocs = TREE_CHAIN (allocs))
-     {
-       tree args = TREE_VALUE (allocs);
-       if (!args)
- 	continue;
- 
-       if (TREE_VALUE (args))
- 	return true;
-     }
- 
-   return false;
- }
- 
- /* Return true if STMT is a call to an allocation function.  A wrapper
-    around fndecl_alloc_p.  */
- 
- static bool
- gimple_call_alloc_p (gimple *stmt, bool all_alloc = false)
- {
-   return fndecl_alloc_p (gimple_call_fndecl (stmt), all_alloc);
- }
- 
- /* Return the zero-based number corresponding to the argument being
-    deallocated if STMT is a call to a deallocation function or UINT_MAX
-    if it isn't.  */
- 
- static unsigned
- call_dealloc_argno (tree exp)
- {
-   tree fndecl = get_callee_fndecl (exp);
-   if (!fndecl)
-     return UINT_MAX;
- 
-   return fndecl_dealloc_argno (fndecl);
- }
- 
- /* Return the zero-based number corresponding to the argument being
-    deallocated if FNDECL is a deallocation function or UINT_MAX
-    if it isn't.  */
- 
- unsigned
- fndecl_dealloc_argno (tree fndecl)
- {
-   /* A call to operator delete isn't recognized as one to a built-in.  */
-   if (DECL_IS_OPERATOR_DELETE_P (fndecl))
-     {
-       if (DECL_IS_REPLACEABLE_OPERATOR (fndecl))
- 	return 0;
- 
-       /* Avoid placement delete that's not been inlined.  */
-       tree fname = DECL_ASSEMBLER_NAME (fndecl);
-       if (id_equal (fname, "_ZdlPvS_")       // ordinary form
- 	  || id_equal (fname, "_ZdaPvS_"))   // array form
- 	return UINT_MAX;
-       return 0;
-     }
- 
-   /* TODO: Handle user-defined functions with attribute malloc?  Handle
-      known non-built-ins like fopen?  */
-   if (fndecl_built_in_p (fndecl, BUILT_IN_NORMAL))
-     {
-       switch (DECL_FUNCTION_CODE (fndecl))
- 	{
- 	case BUILT_IN_FREE:
- 	case BUILT_IN_REALLOC:
- 	  return 0;
- 	default:
- 	  break;
- 	}
-       return UINT_MAX;
-     }
- 
-   tree attrs = DECL_ATTRIBUTES (fndecl);
-   if (!attrs)
-     return UINT_MAX;
- 
-   for (tree atfree = attrs;
-        (atfree = lookup_attribute ("*dealloc", atfree));
-        atfree = TREE_CHAIN (atfree))
-     {
-       tree alloc = TREE_VALUE (atfree);
-       if (!alloc)
- 	continue;
- 
-       tree pos = TREE_CHAIN (alloc);
-       if (!pos)
- 	return 0;
- 
-       pos = TREE_VALUE (pos);
-       return TREE_INT_CST_LOW (pos) - 1;
-     }
- 
-   return UINT_MAX;
- }
- 
- /* Return true if DELC doesn't refer to an operator delete that's
-    suitable to call with a pointer returned from the operator new
-    described by NEWC.  */
- 
- static bool
- new_delete_mismatch_p (const demangle_component &newc,
- 		       const demangle_component &delc)
- {
-   if (newc.type != delc.type)
-     return true;
- 
-   switch (newc.type)
-     {
-     case DEMANGLE_COMPONENT_NAME:
-       {
- 	int len = newc.u.s_name.len;
- 	const char *news = newc.u.s_name.s;
- 	const char *dels = delc.u.s_name.s;
- 	if (len != delc.u.s_name.len || memcmp (news, dels, len))
- 	  return true;
- 
- 	if (news[len] == 'n')
- 	  {
- 	    if (news[len + 1] == 'a')
- 	      return dels[len] != 'd' || dels[len + 1] != 'a';
- 	    if (news[len + 1] == 'w')
- 	      return dels[len] != 'd' || dels[len + 1] != 'l';
- 	  }
- 	return false;
-       }
- 
-     case DEMANGLE_COMPONENT_OPERATOR:
-       /* Operator mismatches are handled above.  */
-       return false;
- 
-     case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
-       if (newc.u.s_extended_operator.args != delc.u.s_extended_operator.args)
- 	return true;
-       return new_delete_mismatch_p (*newc.u.s_extended_operator.name,
- 				    *delc.u.s_extended_operator.name);
- 
-     case DEMANGLE_COMPONENT_FIXED_TYPE:
-       if (newc.u.s_fixed.accum != delc.u.s_fixed.accum
- 	  || newc.u.s_fixed.sat != delc.u.s_fixed.sat)
- 	return true;
-       return new_delete_mismatch_p (*newc.u.s_fixed.length,
- 				    *delc.u.s_fixed.length);
- 
-     case DEMANGLE_COMPONENT_CTOR:
-       if (newc.u.s_ctor.kind != delc.u.s_ctor.kind)
- 	return true;
-       return new_delete_mismatch_p (*newc.u.s_ctor.name,
- 				    *delc.u.s_ctor.name);
- 
-     case DEMANGLE_COMPONENT_DTOR:
-       if (newc.u.s_dtor.kind != delc.u.s_dtor.kind)
- 	return true;
-       return new_delete_mismatch_p (*newc.u.s_dtor.name,
- 				    *delc.u.s_dtor.name);
- 
-     case DEMANGLE_COMPONENT_BUILTIN_TYPE:
-       {
- 	/* The demangler API provides no better way to compare built-in
- 	   types except to by comparing their demangled names. */
- 	size_t nsz, dsz;
- 	demangle_component *pnc = const_cast<demangle_component *>(&newc);
- 	demangle_component *pdc = const_cast<demangle_component *>(&delc);
- 	char *nts = cplus_demangle_print (0, pnc, 16, &nsz);
- 	char *dts = cplus_demangle_print (0, pdc, 16, &dsz);
- 	if (!nts != !dts)
- 	  return true;
- 	bool mismatch = strcmp (nts, dts);
- 	free (nts);
- 	free (dts);
- 	return mismatch;
-       }
- 
-     case DEMANGLE_COMPONENT_SUB_STD:
-       if (newc.u.s_string.len != delc.u.s_string.len)
- 	return true;
-       return memcmp (newc.u.s_string.string, delc.u.s_string.string,
- 		     newc.u.s_string.len);
- 
-     case DEMANGLE_COMPONENT_FUNCTION_PARAM:
-     case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
-       return newc.u.s_number.number != delc.u.s_number.number;
- 
-     case DEMANGLE_COMPONENT_CHARACTER:
-       return newc.u.s_character.character != delc.u.s_character.character;
- 
-     case DEMANGLE_COMPONENT_DEFAULT_ARG:
-     case DEMANGLE_COMPONENT_LAMBDA:
-       if (newc.u.s_unary_num.num != delc.u.s_unary_num.num)
- 	return true;
-       return new_delete_mismatch_p (*newc.u.s_unary_num.sub,
- 				    *delc.u.s_unary_num.sub);
-     default:
-       break;
-     }
- 
-   if (!newc.u.s_binary.left != !delc.u.s_binary.left)
-     return true;
- 
-   if (!newc.u.s_binary.left)
-     return false;
- 
-   if (new_delete_mismatch_p (*newc.u.s_binary.left, *delc.u.s_binary.left)
-       || !newc.u.s_binary.right != !delc.u.s_binary.right)
-     return true;
- 
-   if (newc.u.s_binary.right)
-     return new_delete_mismatch_p (*newc.u.s_binary.right,
- 				  *delc.u.s_binary.right);
-   return false;
- }
- 
- /* Return true if DELETE_DECL is an operator delete that's not suitable
-    to call with a pointer returned fron NEW_DECL.  */
- 
- static bool
- new_delete_mismatch_p (tree new_decl, tree delete_decl)
- {
-   tree new_name = DECL_ASSEMBLER_NAME (new_decl);
-   tree delete_name = DECL_ASSEMBLER_NAME (delete_decl);
- 
-   /* valid_new_delete_pair_p() returns a conservative result (currently
-      it only handles global operators).  A true result is reliable but
-      a false result doesn't necessarily mean the operators don't match.  */
-   if (valid_new_delete_pair_p (new_name, delete_name))
-     return false;
- 
-   /* For anything not handled by valid_new_delete_pair_p() such as member
-      operators compare the individual demangled components of the mangled
-      name.  */
-   const char *new_str = IDENTIFIER_POINTER (new_name);
-   const char *del_str = IDENTIFIER_POINTER (delete_name);
- 
-   void *np = NULL, *dp = NULL;
-   demangle_component *ndc = cplus_demangle_v3_components (new_str, 0, &np);
-   demangle_component *ddc = cplus_demangle_v3_components (del_str, 0, &dp);
-   bool mismatch = new_delete_mismatch_p (*ndc, *ddc);
-   free (np);
-   free (dp);
-   return mismatch;
- }
- 
- /* ALLOC_DECL and DEALLOC_DECL are pair of allocation and deallocation
-    functions.  Return true if the latter is suitable to deallocate objects
-    allocated by calls to the former.  */
- 
- static bool
- matching_alloc_calls_p (tree alloc_decl, tree dealloc_decl)
- {
-   /* Set to alloc_kind_t::builtin if ALLOC_DECL is associated with
-      a built-in deallocator.  */
-   enum class alloc_kind_t { none, builtin, user }
-   alloc_dealloc_kind = alloc_kind_t::none;
- 
-   if (DECL_IS_OPERATOR_NEW_P (alloc_decl))
-     {
-       if (DECL_IS_OPERATOR_DELETE_P (dealloc_decl))
- 	/* Return true iff both functions are of the same array or
- 	   singleton form and false otherwise.  */
- 	return !new_delete_mismatch_p (alloc_decl, dealloc_decl);
- 
-       /* Return false for deallocation functions that are known not
- 	 to match.  */
-       if (fndecl_built_in_p (dealloc_decl, BUILT_IN_FREE)
- 	  || fndecl_built_in_p (dealloc_decl, BUILT_IN_REALLOC))
- 	return false;
-       /* Otherwise proceed below to check the deallocation function's
- 	 "*dealloc" attributes to look for one that mentions this operator
- 	 new.  */
-     }
-   else if (fndecl_built_in_p (alloc_decl, BUILT_IN_NORMAL))
-     {
-       switch (DECL_FUNCTION_CODE (alloc_decl))
- 	{
- 	case BUILT_IN_ALLOCA:
- 	case BUILT_IN_ALLOCA_WITH_ALIGN:
- 	  return false;
- 
- 	case BUILT_IN_ALIGNED_ALLOC:
- 	case BUILT_IN_CALLOC:
- 	case BUILT_IN_GOMP_ALLOC:
- 	case BUILT_IN_MALLOC:
- 	case BUILT_IN_REALLOC:
- 	case BUILT_IN_STRDUP:
- 	case BUILT_IN_STRNDUP:
- 	  if (DECL_IS_OPERATOR_DELETE_P (dealloc_decl))
- 	    return false;
- 
- 	  if (fndecl_built_in_p (dealloc_decl, BUILT_IN_FREE)
- 	      || fndecl_built_in_p (dealloc_decl, BUILT_IN_REALLOC))
- 	    return true;
- 
- 	  alloc_dealloc_kind = alloc_kind_t::builtin;
- 	  break;
- 
- 	default:
- 	  break;
- 	}
-     }
- 
-   /* Set if DEALLOC_DECL both allocates and deallocates.  */
-   alloc_kind_t realloc_kind = alloc_kind_t::none;
- 
-   if (fndecl_built_in_p (dealloc_decl, BUILT_IN_NORMAL))
-     {
-       built_in_function dealloc_code = DECL_FUNCTION_CODE (dealloc_decl);
-       if (dealloc_code == BUILT_IN_REALLOC)
- 	realloc_kind = alloc_kind_t::builtin;
- 
-       for (tree amats = DECL_ATTRIBUTES (alloc_decl);
- 	   (amats = lookup_attribute ("malloc", amats));
- 	   amats = TREE_CHAIN (amats))
- 	{
- 	  tree args = TREE_VALUE (amats);
- 	  if (!args)
- 	    continue;
- 
- 	  tree fndecl = TREE_VALUE (args);
- 	  if (!fndecl || !DECL_P (fndecl))
- 	    continue;
- 
- 	  if (fndecl_built_in_p (fndecl, BUILT_IN_NORMAL)
- 	      && dealloc_code == DECL_FUNCTION_CODE (fndecl))
- 	    return true;
- 	}
-     }
- 
-   const bool alloc_builtin = fndecl_built_in_p (alloc_decl, BUILT_IN_NORMAL);
-   alloc_kind_t realloc_dealloc_kind = alloc_kind_t::none;
- 
-   /* If DEALLOC_DECL has an internal "*dealloc" attribute scan the list
-      of its associated allocation functions for ALLOC_DECL.
-      If the corresponding ALLOC_DECL is found they're a matching pair,
-      otherwise they're not.
-      With DDATS set to the Deallocator's *Dealloc ATtributes...  */
-   for (tree ddats = DECL_ATTRIBUTES (dealloc_decl);
-        (ddats = lookup_attribute ("*dealloc", ddats));
-        ddats = TREE_CHAIN (ddats))
-     {
-       tree args = TREE_VALUE (ddats);
-       if (!args)
- 	continue;
- 
-       tree alloc = TREE_VALUE (args);
-       if (!alloc)
- 	continue;
- 
-       if (alloc == DECL_NAME (dealloc_decl))
- 	realloc_kind = alloc_kind_t::user;
- 
-       if (DECL_P (alloc))
- 	{
- 	  gcc_checking_assert (fndecl_built_in_p (alloc, BUILT_IN_NORMAL));
- 
- 	  switch (DECL_FUNCTION_CODE (alloc))
- 	    {
- 	    case BUILT_IN_ALIGNED_ALLOC:
- 	    case BUILT_IN_CALLOC:
- 	    case BUILT_IN_GOMP_ALLOC:
- 	    case BUILT_IN_MALLOC:
- 	    case BUILT_IN_REALLOC:
- 	    case BUILT_IN_STRDUP:
- 	    case BUILT_IN_STRNDUP:
- 	      realloc_dealloc_kind = alloc_kind_t::builtin;
- 	      break;
- 	    default:
- 	      break;
- 	    }
- 
- 	  if (!alloc_builtin)
- 	    continue;
- 
- 	  if (DECL_FUNCTION_CODE (alloc) != DECL_FUNCTION_CODE (alloc_decl))
- 	    continue;
- 
- 	  return true;
- 	}
- 
-       if (alloc == DECL_NAME (alloc_decl))
- 	return true;
-     }
- 
-   if (realloc_kind == alloc_kind_t::none)
-     return false;
- 
-   hash_set<tree> common_deallocs;
-   /* Special handling for deallocators.  Iterate over both the allocator's
-      and the reallocator's associated deallocator functions looking for
-      the first one in common.  If one is found, the de/reallocator is
-      a match for the allocator even though the latter isn't directly
-      associated with the former.  This simplifies declarations in system
-      headers.
-      With AMATS set to the Allocator's Malloc ATtributes,
-      and  RMATS set to Reallocator's Malloc ATtributes...  */
-   for (tree amats = DECL_ATTRIBUTES (alloc_decl),
- 	 rmats = DECL_ATTRIBUTES (dealloc_decl);
-        (amats = lookup_attribute ("malloc", amats))
- 	 || (rmats = lookup_attribute ("malloc", rmats));
-        amats = amats ? TREE_CHAIN (amats) : NULL_TREE,
- 	 rmats = rmats ? TREE_CHAIN (rmats) : NULL_TREE)
-     {
-       if (tree args = amats ? TREE_VALUE (amats) : NULL_TREE)
- 	if (tree adealloc = TREE_VALUE (args))
- 	  {
- 	    if (DECL_P (adealloc)
- 		&& fndecl_built_in_p (adealloc, BUILT_IN_NORMAL))
- 	      {
- 		built_in_function fncode = DECL_FUNCTION_CODE (adealloc);
- 		if (fncode == BUILT_IN_FREE || fncode == BUILT_IN_REALLOC)
- 		  {
- 		    if (realloc_kind == alloc_kind_t::builtin)
- 		      return true;
- 		    alloc_dealloc_kind = alloc_kind_t::builtin;
- 		  }
- 		continue;
- 	      }
- 
- 	    common_deallocs.add (adealloc);
- 	  }
- 
-       if (tree args = rmats ? TREE_VALUE (rmats) : NULL_TREE)
- 	if (tree ddealloc = TREE_VALUE (args))
- 	  {
- 	    if (DECL_P (ddealloc)
- 		&& fndecl_built_in_p (ddealloc, BUILT_IN_NORMAL))
- 	      {
- 		built_in_function fncode = DECL_FUNCTION_CODE (ddealloc);
- 		if (fncode == BUILT_IN_FREE || fncode == BUILT_IN_REALLOC)
- 		  {
- 		    if (alloc_dealloc_kind == alloc_kind_t::builtin)
- 		      return true;
- 		    realloc_dealloc_kind = alloc_kind_t::builtin;
- 		  }
- 		continue;
- 	      }
- 
- 	    if (common_deallocs.add (ddealloc))
- 	      return true;
- 	  }
-     }
- 
-   /* Succeed only if ALLOC_DECL and the reallocator DEALLOC_DECL share
-      a built-in deallocator.  */
-   return  (alloc_dealloc_kind == alloc_kind_t::builtin
- 	   && realloc_dealloc_kind == alloc_kind_t::builtin);
- }
- 
- /* Return true if DEALLOC_DECL is a function suitable to deallocate
-    objectes allocated by the ALLOC call.  */
- 
- static bool
- matching_alloc_calls_p (gimple *alloc, tree dealloc_decl)
- {
-   tree alloc_decl = gimple_call_fndecl (alloc);
-   if (!alloc_decl)
-     return true;
- 
-   return matching_alloc_calls_p (alloc_decl, dealloc_decl);
- }
- 
- /* Diagnose a call EXP to deallocate a pointer referenced by AREF if it
-    includes a nonzero offset.  Such a pointer cannot refer to the beginning
-    of an allocated object.  A negative offset may refer to it only if
-    the target pointer is unknown.  */
- 
- static bool
- warn_dealloc_offset (location_t loc, tree exp, const access_ref &aref)
- {
-   if (aref.deref || aref.offrng[0] <= 0 || aref.offrng[1] <= 0)
-     return false;
- 
-   tree dealloc_decl = get_callee_fndecl (exp);
-   if (!dealloc_decl)
-     return false;
- 
-   if (DECL_IS_OPERATOR_DELETE_P (dealloc_decl)
-       && !DECL_IS_REPLACEABLE_OPERATOR (dealloc_decl))
-     {
-       /* A call to a user-defined operator delete with a pointer plus offset
- 	 may be valid if it's returned from an unknown function (i.e., one
- 	 that's not operator new).  */
-       if (TREE_CODE (aref.ref) == SSA_NAME)
- 	{
- 	  gimple *def_stmt = SSA_NAME_DEF_STMT (aref.ref);
- 	  if (is_gimple_call (def_stmt))
- 	    {
- 	      tree alloc_decl = gimple_call_fndecl (def_stmt);
- 	      if (!alloc_decl || !DECL_IS_OPERATOR_NEW_P (alloc_decl))
- 		return false;
- 	    }
- 	}
-     }
- 
-   char offstr[80];
-   offstr[0] = '\0';
-   if (wi::fits_shwi_p (aref.offrng[0]))
-     {
-       if (aref.offrng[0] == aref.offrng[1]
- 	  || !wi::fits_shwi_p (aref.offrng[1]))
- 	sprintf (offstr, " %lli",
- 		 (long long)aref.offrng[0].to_shwi ());
-       else
- 	sprintf (offstr, " [%lli, %lli]",
- 		 (long long)aref.offrng[0].to_shwi (),
- 		 (long long)aref.offrng[1].to_shwi ());
-     }
- 
-   if (!warning_at (loc, OPT_Wfree_nonheap_object,
- 		   "%K%qD called on pointer %qE with nonzero offset%s",
- 		   exp, dealloc_decl, aref.ref, offstr))
-     return false;
- 
-   if (DECL_P (aref.ref))
-     inform (DECL_SOURCE_LOCATION (aref.ref), "declared here");
-   else if (TREE_CODE (aref.ref) == SSA_NAME)
-     {
-       gimple *def_stmt = SSA_NAME_DEF_STMT (aref.ref);
-       if (is_gimple_call (def_stmt))
- 	{
- 	  location_t def_loc = gimple_location (def_stmt);
- 	  tree alloc_decl = gimple_call_fndecl (def_stmt);
- 	  if (alloc_decl)
- 	    inform (def_loc,
- 		    "returned from %qD", alloc_decl);
- 	  else if (tree alloc_fntype = gimple_call_fntype (def_stmt))
- 	    inform (def_loc,
- 		    "returned from %qT", alloc_fntype);
- 	  else
- 	    inform (def_loc,  "obtained here");
- 	}
-     }
- 
-   return true;
- }
- 
- /* Issue a warning if a deallocation function such as free, realloc,
-    or C++ operator delete is called with an argument not returned by
-    a matching allocation function such as malloc or the corresponding
-    form of C++ operatorn new.  */
- 
- void
- maybe_emit_free_warning (tree exp)
- {
-   tree fndecl = get_callee_fndecl (exp);
-   if (!fndecl)
-     return;
- 
-   unsigned argno = call_dealloc_argno (exp);
-   if ((unsigned) call_expr_nargs (exp) <= argno)
-     return;
- 
-   tree ptr = CALL_EXPR_ARG (exp, argno);
-   if (integer_zerop (ptr))
-     return;
- 
-   access_ref aref;
-   if (!compute_objsize (ptr, 0, &aref))
-     return;
- 
-   tree ref = aref.ref;
-   if (integer_zerop (ref))
-     return;
- 
-   tree dealloc_decl = get_callee_fndecl (exp);
-   location_t loc = tree_inlined_location (exp);
- 
-   if (DECL_P (ref) || EXPR_P (ref))
-     {
-       /* Diagnose freeing a declared object.  */
-       if (aref.ref_declared ()
- 	  && warning_at (loc, OPT_Wfree_nonheap_object,
- 			 "%K%qD called on unallocated object %qD",
- 			 exp, dealloc_decl, ref))
- 	{
- 	  loc = (DECL_P (ref)
- 		 ? DECL_SOURCE_LOCATION (ref)
- 		 : EXPR_LOCATION (ref));
- 	  inform (loc, "declared here");
- 	  return;
- 	}
- 
-       /* Diagnose freeing a pointer that includes a positive offset.
- 	 Such a pointer cannot refer to the beginning of an allocated
- 	 object.  A negative offset may refer to it.  */
-       if (aref.sizrng[0] != aref.sizrng[1]
- 	  && warn_dealloc_offset (loc, exp, aref))
- 	return;
-     }
-   else if (CONSTANT_CLASS_P (ref))
-     {
-       if (warning_at (loc, OPT_Wfree_nonheap_object,
- 		      "%K%qD called on a pointer to an unallocated "
- 		      "object %qE", exp, dealloc_decl, ref))
- 	{
- 	  if (TREE_CODE (ptr) == SSA_NAME)
- 	    {
- 	      gimple *def_stmt = SSA_NAME_DEF_STMT (ptr);
- 	      if (is_gimple_assign (def_stmt))
- 		{
- 		  location_t loc = gimple_location (def_stmt);
- 		  inform (loc, "assigned here");
- 		}
- 	    }
- 	  return;
- 	}
-     }
-   else if (TREE_CODE (ref) == SSA_NAME)
-     {
-       /* Also warn if the pointer argument refers to the result
- 	 of an allocation call like alloca or VLA.  */
-       gimple *def_stmt = SSA_NAME_DEF_STMT (ref);
-       if (is_gimple_call (def_stmt))
- 	{
- 	  bool warned = false;
- 	  if (gimple_call_alloc_p (def_stmt))
- 	    {
- 	      if (matching_alloc_calls_p (def_stmt, dealloc_decl))
- 		{
- 		  if (warn_dealloc_offset (loc, exp, aref))
- 		    return;
- 		}
- 	      else
- 		{
- 		  tree alloc_decl = gimple_call_fndecl (def_stmt);
- 		  int opt = (DECL_IS_OPERATOR_NEW_P (alloc_decl)
- 			     || DECL_IS_OPERATOR_DELETE_P (dealloc_decl)
- 			     ? OPT_Wmismatched_new_delete
- 			     : OPT_Wmismatched_dealloc);
- 		  warned = warning_at (loc, opt,
- 				       "%K%qD called on pointer returned "
- 				       "from a mismatched allocation "
- 				       "function", exp, dealloc_decl);
- 		}
- 	    }
- 	  else if (gimple_call_builtin_p (def_stmt, BUILT_IN_ALLOCA)
- 	    	   || gimple_call_builtin_p (def_stmt,
- 	    				     BUILT_IN_ALLOCA_WITH_ALIGN))
- 	    warned = warning_at (loc, OPT_Wfree_nonheap_object,
- 				 "%K%qD called on pointer to "
- 				 "an unallocated object",
- 				 exp, dealloc_decl);
- 	  else if (warn_dealloc_offset (loc, exp, aref))
- 	    return;
- 
- 	  if (warned)
- 	    {
- 	      tree fndecl = gimple_call_fndecl (def_stmt);
- 	      inform (gimple_location (def_stmt),
- 		      "returned from %qD", fndecl);
- 	      return;
- 	    }
- 	}
-       else if (gimple_nop_p (def_stmt))
- 	{
- 	  ref = SSA_NAME_VAR (ref);
- 	  /* Diagnose freeing a pointer that includes a positive offset.  */
- 	  if (TREE_CODE (ref) == PARM_DECL
- 	      && !aref.deref
- 	      && aref.sizrng[0] != aref.sizrng[1]
- 	      && aref.offrng[0] > 0 && aref.offrng[1] > 0
- 	      && warn_dealloc_offset (loc, exp, aref))
- 	    return;
- 	}
-     }
- }
- 
- /* Fold a call to __builtin_object_size with arguments PTR and OST,
-    if possible.  */
- 
- static tree
- fold_builtin_object_size (tree ptr, tree ost)
- {
-   unsigned HOST_WIDE_INT bytes;
-   int object_size_type;
- 
-   if (!validate_arg (ptr, POINTER_TYPE)
-       || !validate_arg (ost, INTEGER_TYPE))
-     return NULL_TREE;
- 
-   STRIP_NOPS (ost);
- 
-   if (TREE_CODE (ost) != INTEGER_CST
-       || tree_int_cst_sgn (ost) < 0
-       || compare_tree_int (ost, 3) > 0)
-     return NULL_TREE;
- 
-   object_size_type = tree_to_shwi (ost);
- 
-   /* __builtin_object_size doesn't evaluate side-effects in its arguments;
-      if there are any side-effects, it returns (size_t) -1 for types 0 and 1
-      and (size_t) 0 for types 2 and 3.  */
-   if (TREE_SIDE_EFFECTS (ptr))
-     return build_int_cst_type (size_type_node, object_size_type < 2 ? -1 : 0);
- 
-   if (TREE_CODE (ptr) == ADDR_EXPR)
-     {
-       compute_builtin_object_size (ptr, object_size_type, &bytes);
-       if (wi::fits_to_tree_p (bytes, size_type_node))
- 	return build_int_cstu (size_type_node, bytes);
-     }
-   else if (TREE_CODE (ptr) == SSA_NAME)
-     {
-       /* If object size is not known yet, delay folding until
-        later.  Maybe subsequent passes will help determining
-        it.  */
-       if (compute_builtin_object_size (ptr, object_size_type, &bytes)
- 	  && wi::fits_to_tree_p (bytes, size_type_node))
- 	return build_int_cstu (size_type_node, bytes);
-     }
- 
-   return NULL_TREE;
- }
- 
- /* Builtins with folding operations that operate on "..." arguments
-    need special handling; we need to store the arguments in a convenient
-    data structure before attempting any folding.  Fortunately there are
-    only a few builtins that fall into this category.  FNDECL is the
-    function, EXP is the CALL_EXPR for the call.  */
- 
- static tree
- fold_builtin_varargs (location_t loc, tree fndecl, tree *args, int nargs)
- {
-   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
-   tree ret = NULL_TREE;
- 
-   switch (fcode)
-     {
-     case BUILT_IN_FPCLASSIFY:
-       ret = fold_builtin_fpclassify (loc, args, nargs);
-       break;
- 
-     default:
-       break;
-     }
-   if (ret)
-     {
-       ret = build1 (NOP_EXPR, TREE_TYPE (ret), ret);
-       SET_EXPR_LOCATION (ret, loc);
-       TREE_NO_WARNING (ret) = 1;
-       return ret;
-     }
-   return NULL_TREE;
- }
- 
- /* Initialize format string characters in the target charset.  */
- 
- bool
- init_target_chars (void)
- {
-   static bool init;
-   if (!init)
-     {
-       target_newline = lang_hooks.to_target_charset ('\n');
-       target_percent = lang_hooks.to_target_charset ('%');
-       target_c = lang_hooks.to_target_charset ('c');
-       target_s = lang_hooks.to_target_charset ('s');
-       if (target_newline == 0 || target_percent == 0 || target_c == 0
- 	  || target_s == 0)
- 	return false;
- 
-       target_percent_c[0] = target_percent;
-       target_percent_c[1] = target_c;
-       target_percent_c[2] = '\0';
- 
-       target_percent_s[0] = target_percent;
-       target_percent_s[1] = target_s;
-       target_percent_s[2] = '\0';
- 
-       target_percent_s_newline[0] = target_percent;
-       target_percent_s_newline[1] = target_s;
-       target_percent_s_newline[2] = target_newline;
-       target_percent_s_newline[3] = '\0';
- 
-       init = true;
-     }
-   return true;
- }
- 
- /* Helper function for do_mpfr_arg*().  Ensure M is a normal number
-    and no overflow/underflow occurred.  INEXACT is true if M was not
-    exactly calculated.  TYPE is the tree type for the result.  This
-    function assumes that you cleared the MPFR flags and then
-    calculated M to see if anything subsequently set a flag prior to
-    entering this function.  Return NULL_TREE if any checks fail.  */
- 
- static tree
- do_mpfr_ckconv (mpfr_srcptr m, tree type, int inexact)
- {
-   /* Proceed iff we get a normal number, i.e. not NaN or Inf and no
-      overflow/underflow occurred.  If -frounding-math, proceed iff the
-      result of calling FUNC was exact.  */
-   if (mpfr_number_p (m) && !mpfr_overflow_p () && !mpfr_underflow_p ()
-       && (!flag_rounding_math || !inexact))
-     {
-       REAL_VALUE_TYPE rr;
- 
-       real_from_mpfr (&rr, m, type, MPFR_RNDN);
-       /* Proceed iff GCC's REAL_VALUE_TYPE can hold the MPFR value,
- 	 check for overflow/underflow.  If the REAL_VALUE_TYPE is zero
- 	 but the mpft_t is not, then we underflowed in the
- 	 conversion.  */
-       if (real_isfinite (&rr)
- 	  && (rr.cl == rvc_zero) == (mpfr_zero_p (m) != 0))
-         {
- 	  REAL_VALUE_TYPE rmode;
- 
- 	  real_convert (&rmode, TYPE_MODE (type), &rr);
- 	  /* Proceed iff the specified mode can hold the value.  */
- 	  if (real_identical (&rmode, &rr))
- 	    return build_real (type, rmode);
- 	}
-     }
-   return NULL_TREE;
- }
- 
- /* Helper function for do_mpc_arg*().  Ensure M is a normal complex
-    number and no overflow/underflow occurred.  INEXACT is true if M
-    was not exactly calculated.  TYPE is the tree type for the result.
-    This function assumes that you cleared the MPFR flags and then
-    calculated M to see if anything subsequently set a flag prior to
-    entering this function.  Return NULL_TREE if any checks fail, if
-    FORCE_CONVERT is true, then bypass the checks.  */
- 
- static tree
- do_mpc_ckconv (mpc_srcptr m, tree type, int inexact, int force_convert)
- {
-   /* Proceed iff we get a normal number, i.e. not NaN or Inf and no
-      overflow/underflow occurred.  If -frounding-math, proceed iff the
-      result of calling FUNC was exact.  */
-   if (force_convert
-       || (mpfr_number_p (mpc_realref (m)) && mpfr_number_p (mpc_imagref (m))
- 	  && !mpfr_overflow_p () && !mpfr_underflow_p ()
- 	  && (!flag_rounding_math || !inexact)))
-     {
-       REAL_VALUE_TYPE re, im;
- 
-       real_from_mpfr (&re, mpc_realref (m), TREE_TYPE (type), MPFR_RNDN);
-       real_from_mpfr (&im, mpc_imagref (m), TREE_TYPE (type), MPFR_RNDN);
-       /* Proceed iff GCC's REAL_VALUE_TYPE can hold the MPFR values,
- 	 check for overflow/underflow.  If the REAL_VALUE_TYPE is zero
- 	 but the mpft_t is not, then we underflowed in the
- 	 conversion.  */
-       if (force_convert
- 	  || (real_isfinite (&re) && real_isfinite (&im)
- 	      && (re.cl == rvc_zero) == (mpfr_zero_p (mpc_realref (m)) != 0)
- 	      && (im.cl == rvc_zero) == (mpfr_zero_p (mpc_imagref (m)) != 0)))
-         {
- 	  REAL_VALUE_TYPE re_mode, im_mode;
- 
- 	  real_convert (&re_mode, TYPE_MODE (TREE_TYPE (type)), &re);
- 	  real_convert (&im_mode, TYPE_MODE (TREE_TYPE (type)), &im);
- 	  /* Proceed iff the specified mode can hold the value.  */
- 	  if (force_convert
- 	      || (real_identical (&re_mode, &re)
- 		  && real_identical (&im_mode, &im)))
- 	    return build_complex (type, build_real (TREE_TYPE (type), re_mode),
- 				  build_real (TREE_TYPE (type), im_mode));
- 	}
-     }
-   return NULL_TREE;
- }
- 
- /* If arguments ARG0 and ARG1 are REAL_CSTs, call mpfr_remquo() to set
-    the pointer *(ARG_QUO) and return the result.  The type is taken
-    from the type of ARG0 and is used for setting the precision of the
-    calculation and results.  */
- 
- static tree
- do_mpfr_remquo (tree arg0, tree arg1, tree arg_quo)
- {
-   tree const type = TREE_TYPE (arg0);
-   tree result = NULL_TREE;
- 
-   STRIP_NOPS (arg0);
-   STRIP_NOPS (arg1);
- 
-   /* To proceed, MPFR must exactly represent the target floating point
-      format, which only happens when the target base equals two.  */
-   if (REAL_MODE_FORMAT (TYPE_MODE (type))->b == 2
-       && TREE_CODE (arg0) == REAL_CST && !TREE_OVERFLOW (arg0)
-       && TREE_CODE (arg1) == REAL_CST && !TREE_OVERFLOW (arg1))
-     {
-       const REAL_VALUE_TYPE *const ra0 = TREE_REAL_CST_PTR (arg0);
-       const REAL_VALUE_TYPE *const ra1 = TREE_REAL_CST_PTR (arg1);
- 
-       if (real_isfinite (ra0) && real_isfinite (ra1))
-         {
- 	  const struct real_format *fmt = REAL_MODE_FORMAT (TYPE_MODE (type));
- 	  const int prec = fmt->p;
- 	  const mpfr_rnd_t rnd = fmt->round_towards_zero? MPFR_RNDZ : MPFR_RNDN;
- 	  tree result_rem;
- 	  long integer_quo;
- 	  mpfr_t m0, m1;
- 
- 	  mpfr_inits2 (prec, m0, m1, NULL);
- 	  mpfr_from_real (m0, ra0, MPFR_RNDN);
- 	  mpfr_from_real (m1, ra1, MPFR_RNDN);
- 	  mpfr_clear_flags ();
- 	  mpfr_remquo (m0, &integer_quo, m0, m1, rnd);
- 	  /* Remquo is independent of the rounding mode, so pass
- 	     inexact=0 to do_mpfr_ckconv().  */
- 	  result_rem = do_mpfr_ckconv (m0, type, /*inexact=*/ 0);
- 	  mpfr_clears (m0, m1, NULL);
- 	  if (result_rem)
- 	    {
- 	      /* MPFR calculates quo in the host's long so it may
- 		 return more bits in quo than the target int can hold
- 		 if sizeof(host long) > sizeof(target int).  This can
- 		 happen even for native compilers in LP64 mode.  In
- 		 these cases, modulo the quo value with the largest
- 		 number that the target int can hold while leaving one
- 		 bit for the sign.  */
- 	      if (sizeof (integer_quo) * CHAR_BIT > INT_TYPE_SIZE)
- 		integer_quo %= (long)(1UL << (INT_TYPE_SIZE - 1));
- 
- 	      /* Dereference the quo pointer argument.  */
- 	      arg_quo = build_fold_indirect_ref (arg_quo);
- 	      /* Proceed iff a valid pointer type was passed in.  */
- 	      if (TYPE_MAIN_VARIANT (TREE_TYPE (arg_quo)) == integer_type_node)
- 	        {
- 		  /* Set the value. */
- 		  tree result_quo
- 		    = fold_build2 (MODIFY_EXPR, TREE_TYPE (arg_quo), arg_quo,
- 				   build_int_cst (TREE_TYPE (arg_quo),
- 						  integer_quo));
- 		  TREE_SIDE_EFFECTS (result_quo) = 1;
- 		  /* Combine the quo assignment with the rem.  */
- 		  result = non_lvalue (fold_build2 (COMPOUND_EXPR, type,
- 						    result_quo, result_rem));
- 		}
- 	    }
- 	}
-     }
-   return result;
- }
- 
- /* If ARG is a REAL_CST, call mpfr_lgamma() on it and return the
-    resulting value as a tree with type TYPE.  The mpfr precision is
-    set to the precision of TYPE.  We assume that this mpfr function
-    returns zero if the result could be calculated exactly within the
-    requested precision.  In addition, the integer pointer represented
-    by ARG_SG will be dereferenced and set to the appropriate signgam
-    (-1,1) value.  */
- 
- static tree
- do_mpfr_lgamma_r (tree arg, tree arg_sg, tree type)
- {
-   tree result = NULL_TREE;
- 
-   STRIP_NOPS (arg);
- 
-   /* To proceed, MPFR must exactly represent the target floating point
-      format, which only happens when the target base equals two.  Also
-      verify ARG is a constant and that ARG_SG is an int pointer.  */
-   if (REAL_MODE_FORMAT (TYPE_MODE (type))->b == 2
-       && TREE_CODE (arg) == REAL_CST && !TREE_OVERFLOW (arg)
-       && TREE_CODE (TREE_TYPE (arg_sg)) == POINTER_TYPE
-       && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (arg_sg))) == integer_type_node)
-     {
-       const REAL_VALUE_TYPE *const ra = TREE_REAL_CST_PTR (arg);
- 
-       /* In addition to NaN and Inf, the argument cannot be zero or a
- 	 negative integer.  */
-       if (real_isfinite (ra)
- 	  && ra->cl != rvc_zero
- 	  && !(real_isneg (ra) && real_isinteger (ra, TYPE_MODE (type))))
-         {
- 	  const struct real_format *fmt = REAL_MODE_FORMAT (TYPE_MODE (type));
- 	  const int prec = fmt->p;
- 	  const mpfr_rnd_t rnd = fmt->round_towards_zero? MPFR_RNDZ : MPFR_RNDN;
- 	  int inexact, sg;
- 	  mpfr_t m;
- 	  tree result_lg;
- 
- 	  mpfr_init2 (m, prec);
- 	  mpfr_from_real (m, ra, MPFR_RNDN);
- 	  mpfr_clear_flags ();
- 	  inexact = mpfr_lgamma (m, &sg, m, rnd);
- 	  result_lg = do_mpfr_ckconv (m, type, inexact);
- 	  mpfr_clear (m);
- 	  if (result_lg)
- 	    {
- 	      tree result_sg;
- 
- 	      /* Dereference the arg_sg pointer argument.  */
- 	      arg_sg = build_fold_indirect_ref (arg_sg);
- 	      /* Assign the signgam value into *arg_sg. */
- 	      result_sg = fold_build2 (MODIFY_EXPR,
- 				       TREE_TYPE (arg_sg), arg_sg,
- 				       build_int_cst (TREE_TYPE (arg_sg), sg));
- 	      TREE_SIDE_EFFECTS (result_sg) = 1;
- 	      /* Combine the signgam assignment with the lgamma result.  */
- 	      result = non_lvalue (fold_build2 (COMPOUND_EXPR, type,
- 						result_sg, result_lg));
- 	    }
- 	}
-     }
- 
-   return result;
- }
- 
- /* If arguments ARG0 and ARG1 are a COMPLEX_CST, call the two-argument
-    mpc function FUNC on it and return the resulting value as a tree
-    with type TYPE.  The mpfr precision is set to the precision of
-    TYPE.  We assume that function FUNC returns zero if the result
-    could be calculated exactly within the requested precision.  If
-    DO_NONFINITE is true, then fold expressions containing Inf or NaN
-    in the arguments and/or results.  */
- 
- tree
- do_mpc_arg2 (tree arg0, tree arg1, tree type, int do_nonfinite,
- 	     int (*func)(mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t))
- {
-   tree result = NULL_TREE;
- 
-   STRIP_NOPS (arg0);
-   STRIP_NOPS (arg1);
- 
-   /* To proceed, MPFR must exactly represent the target floating point
-      format, which only happens when the target base equals two.  */
-   if (TREE_CODE (arg0) == COMPLEX_CST && !TREE_OVERFLOW (arg0)
-       && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE
-       && TREE_CODE (arg1) == COMPLEX_CST && !TREE_OVERFLOW (arg1)
-       && TREE_CODE (TREE_TYPE (TREE_TYPE (arg1))) == REAL_TYPE
-       && REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (TREE_TYPE (arg0))))->b == 2)
-     {
-       const REAL_VALUE_TYPE *const re0 = TREE_REAL_CST_PTR (TREE_REALPART (arg0));
-       const REAL_VALUE_TYPE *const im0 = TREE_REAL_CST_PTR (TREE_IMAGPART (arg0));
-       const REAL_VALUE_TYPE *const re1 = TREE_REAL_CST_PTR (TREE_REALPART (arg1));
-       const REAL_VALUE_TYPE *const im1 = TREE_REAL_CST_PTR (TREE_IMAGPART (arg1));
- 
-       if (do_nonfinite
- 	  || (real_isfinite (re0) && real_isfinite (im0)
- 	      && real_isfinite (re1) && real_isfinite (im1)))
-         {
- 	  const struct real_format *const fmt =
- 	    REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (type)));
- 	  const int prec = fmt->p;
- 	  const mpfr_rnd_t rnd = fmt->round_towards_zero
- 				 ? MPFR_RNDZ : MPFR_RNDN;
- 	  const mpc_rnd_t crnd = fmt->round_towards_zero ? MPC_RNDZZ : MPC_RNDNN;
- 	  int inexact;
- 	  mpc_t m0, m1;
- 
- 	  mpc_init2 (m0, prec);
- 	  mpc_init2 (m1, prec);
- 	  mpfr_from_real (mpc_realref (m0), re0, rnd);
- 	  mpfr_from_real (mpc_imagref (m0), im0, rnd);
- 	  mpfr_from_real (mpc_realref (m1), re1, rnd);
- 	  mpfr_from_real (mpc_imagref (m1), im1, rnd);
- 	  mpfr_clear_flags ();
- 	  inexact = func (m0, m0, m1, crnd);
- 	  result = do_mpc_ckconv (m0, type, inexact, do_nonfinite);
- 	  mpc_clear (m0);
- 	  mpc_clear (m1);
- 	}
-     }
- 
-   return result;
- }
- 
- /* A wrapper function for builtin folding that prevents warnings for
-    "statement without effect" and the like, caused by removing the
-    call node earlier than the warning is generated.  */
- 
- tree
- fold_call_stmt (gcall *stmt, bool ignore)
- {
-   tree ret = NULL_TREE;
-   tree fndecl = gimple_call_fndecl (stmt);
-   location_t loc = gimple_location (stmt);
-   if (fndecl && fndecl_built_in_p (fndecl)
-       && !gimple_call_va_arg_pack_p (stmt))
-     {
-       int nargs = gimple_call_num_args (stmt);
-       tree *args = (nargs > 0
- 		    ? gimple_call_arg_ptr (stmt, 0)
- 		    : &error_mark_node);
- 
-       if (avoid_folding_inline_builtin (fndecl))
- 	return NULL_TREE;
-       if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
-         {
- 	  return targetm.fold_builtin (fndecl, nargs, args, ignore);
-         }
-       else
- 	{
- 	  ret = fold_builtin_n (loc, NULL_TREE, fndecl, args, nargs, ignore);
- 	  if (ret)
- 	    {
- 	      /* Propagate location information from original call to
- 		 expansion of builtin.  Otherwise things like
- 		 maybe_emit_chk_warning, that operate on the expansion
- 		 of a builtin, will use the wrong location information.  */
- 	      if (gimple_has_location (stmt))
-                 {
- 		  tree realret = ret;
- 		  if (TREE_CODE (ret) == NOP_EXPR)
- 		    realret = TREE_OPERAND (ret, 0);
- 		  if (CAN_HAVE_LOCATION_P (realret)
- 		      && !EXPR_HAS_LOCATION (realret))
- 		    SET_EXPR_LOCATION (realret, loc);
-                   return realret;
-                 }
- 	      return ret;
- 	    }
- 	}
-     }
-   return NULL_TREE;
- }
- 
- /* Look up the function in builtin_decl that corresponds to DECL
-    and set ASMSPEC as its user assembler name.  DECL must be a
-    function decl that declares a builtin.  */
- 
- void
- set_builtin_user_assembler_name (tree decl, const char *asmspec)
- {
-   gcc_assert (fndecl_built_in_p (decl, BUILT_IN_NORMAL)
- 	      && asmspec != 0);
- 
-   tree builtin = builtin_decl_explicit (DECL_FUNCTION_CODE (decl));
-   set_user_assembler_name (builtin, asmspec);
- 
-   if (DECL_FUNCTION_CODE (decl) == BUILT_IN_FFS
-       && INT_TYPE_SIZE < BITS_PER_WORD)
-     {
-       scalar_int_mode mode = int_mode_for_size (INT_TYPE_SIZE, 0).require ();
-       set_user_assembler_libfunc ("ffs", asmspec);
-       set_optab_libfunc (ffs_optab, mode, "ffs");
-     }
- }
- 
- /* Return true if DECL is a builtin that expands to a constant or similarly
-    simple code.  */
- bool
- is_simple_builtin (tree decl)
- {
-   if (decl && fndecl_built_in_p (decl, BUILT_IN_NORMAL))
-     switch (DECL_FUNCTION_CODE (decl))
-       {
- 	/* Builtins that expand to constants.  */
-       case BUILT_IN_CONSTANT_P:
-       case BUILT_IN_EXPECT:
-       case BUILT_IN_OBJECT_SIZE:
-       case BUILT_IN_UNREACHABLE:
- 	/* Simple register moves or loads from stack.  */
-       case BUILT_IN_ASSUME_ALIGNED:
-       case BUILT_IN_RETURN_ADDRESS:
-       case BUILT_IN_EXTRACT_RETURN_ADDR:
-       case BUILT_IN_FROB_RETURN_ADDR:
-       case BUILT_IN_RETURN:
-       case BUILT_IN_AGGREGATE_INCOMING_ADDRESS:
-       case BUILT_IN_FRAME_ADDRESS:
-       case BUILT_IN_VA_END:
-       case BUILT_IN_STACK_SAVE:
-       case BUILT_IN_STACK_RESTORE:
- 	/* Exception state returns or moves registers around.  */
-       case BUILT_IN_EH_FILTER:
-       case BUILT_IN_EH_POINTER:
-       case BUILT_IN_EH_COPY_VALUES:
- 	return true;
- 
-       default:
- 	return false;
-       }
- 
-   return false;
- }
- 
- /* Return true if DECL is a builtin that is not expensive, i.e., they are
-    most probably expanded inline into reasonably simple code.  This is a
-    superset of is_simple_builtin.  */
- bool
- is_inexpensive_builtin (tree decl)
- {
-   if (!decl)
-     return false;
-   else if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_MD)
-     return true;
-   else if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
-     switch (DECL_FUNCTION_CODE (decl))
-       {
-       case BUILT_IN_ABS:
-       CASE_BUILT_IN_ALLOCA:
-       case BUILT_IN_BSWAP16:
-       case BUILT_IN_BSWAP32:
-       case BUILT_IN_BSWAP64:
-       case BUILT_IN_BSWAP128:
-       case BUILT_IN_CLZ:
-       case BUILT_IN_CLZIMAX:
-       case BUILT_IN_CLZL:
-       case BUILT_IN_CLZLL:
-       case BUILT_IN_CTZ:
-       case BUILT_IN_CTZIMAX:
-       case BUILT_IN_CTZL:
-       case BUILT_IN_CTZLL:
-       case BUILT_IN_FFS:
-       case BUILT_IN_FFSIMAX:
-       case BUILT_IN_FFSL:
-       case BUILT_IN_FFSLL:
-       case BUILT_IN_IMAXABS:
-       case BUILT_IN_FINITE:
-       case BUILT_IN_FINITEF:
-       case BUILT_IN_FINITEL:
-       case BUILT_IN_FINITED32:
-       case BUILT_IN_FINITED64:
-       case BUILT_IN_FINITED128:
-       case BUILT_IN_FPCLASSIFY:
-       case BUILT_IN_ISFINITE:
-       case BUILT_IN_ISINF_SIGN:
-       case BUILT_IN_ISINF:
-       case BUILT_IN_ISINFF:
-       case BUILT_IN_ISINFL:
-       case BUILT_IN_ISINFD32:
-       case BUILT_IN_ISINFD64:
-       case BUILT_IN_ISINFD128:
-       case BUILT_IN_ISNAN:
-       case BUILT_IN_ISNANF:
-       case BUILT_IN_ISNANL:
-       case BUILT_IN_ISNAND32:
-       case BUILT_IN_ISNAND64:
-       case BUILT_IN_ISNAND128:
-       case BUILT_IN_ISNORMAL:
-       case BUILT_IN_ISGREATER:
-       case BUILT_IN_ISGREATEREQUAL:
-       case BUILT_IN_ISLESS:
-       case BUILT_IN_ISLESSEQUAL:
-       case BUILT_IN_ISLESSGREATER:
-       case BUILT_IN_ISUNORDERED:
-       case BUILT_IN_VA_ARG_PACK:
-       case BUILT_IN_VA_ARG_PACK_LEN:
-       case BUILT_IN_VA_COPY:
-       case BUILT_IN_TRAP:
-       case BUILT_IN_SAVEREGS:
-       case BUILT_IN_POPCOUNTL:
-       case BUILT_IN_POPCOUNTLL:
-       case BUILT_IN_POPCOUNTIMAX:
-       case BUILT_IN_POPCOUNT:
-       case BUILT_IN_PARITYL:
-       case BUILT_IN_PARITYLL:
-       case BUILT_IN_PARITYIMAX:
-       case BUILT_IN_PARITY:
-       case BUILT_IN_LABS:
-       case BUILT_IN_LLABS:
-       case BUILT_IN_PREFETCH:
-       case BUILT_IN_ACC_ON_DEVICE:
- 	return true;
- 
-       default:
- 	return is_simple_builtin (decl);
-       }
- 
-   return false;
- }
- 
- /* Return true if T is a constant and the value cast to a target char
-    can be represented by a host char.
-    Store the casted char constant in *P if so.  */
- 
- bool
- target_char_cst_p (tree t, char *p)
- {
-   if (!tree_fits_uhwi_p (t) || CHAR_TYPE_SIZE != HOST_BITS_PER_CHAR)
-     return false;
- 
-   *p = (char)tree_to_uhwi (t);
-   return true;
- }
- 
- /* Return true if the builtin DECL is implemented in a standard library.
-    Otherwise returns false which doesn't guarantee it is not (thus the list of
-    handled builtins below may be incomplete).  */
- 
- bool
- builtin_with_linkage_p (tree decl)
- {
-   if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
-     switch (DECL_FUNCTION_CODE (decl))
-     {
-       CASE_FLT_FN (BUILT_IN_ACOS):
-       CASE_FLT_FN (BUILT_IN_ACOSH):
-       CASE_FLT_FN (BUILT_IN_ASIN):
-       CASE_FLT_FN (BUILT_IN_ASINH):
-       CASE_FLT_FN (BUILT_IN_ATAN):
-       CASE_FLT_FN (BUILT_IN_ATANH):
-       CASE_FLT_FN (BUILT_IN_ATAN2):
-       CASE_FLT_FN (BUILT_IN_CBRT):
-       CASE_FLT_FN (BUILT_IN_CEIL):
-       CASE_FLT_FN_FLOATN_NX (BUILT_IN_CEIL):
-       CASE_FLT_FN (BUILT_IN_COPYSIGN):
-       CASE_FLT_FN_FLOATN_NX (BUILT_IN_COPYSIGN):
-       CASE_FLT_FN (BUILT_IN_COS):
-       CASE_FLT_FN (BUILT_IN_COSH):
-       CASE_FLT_FN (BUILT_IN_ERF):
-       CASE_FLT_FN (BUILT_IN_ERFC):
-       CASE_FLT_FN (BUILT_IN_EXP):
-       CASE_FLT_FN (BUILT_IN_EXP2):
-       CASE_FLT_FN (BUILT_IN_EXPM1):
-       CASE_FLT_FN (BUILT_IN_FABS):
-       CASE_FLT_FN_FLOATN_NX (BUILT_IN_FABS):
-       CASE_FLT_FN (BUILT_IN_FDIM):
-       CASE_FLT_FN (BUILT_IN_FLOOR):
-       CASE_FLT_FN_FLOATN_NX (BUILT_IN_FLOOR):
-       CASE_FLT_FN (BUILT_IN_FMA):
-       CASE_FLT_FN_FLOATN_NX (BUILT_IN_FMA):
-       CASE_FLT_FN (BUILT_IN_FMAX):
-       CASE_FLT_FN_FLOATN_NX (BUILT_IN_FMAX):
-       CASE_FLT_FN (BUILT_IN_FMIN):
-       CASE_FLT_FN_FLOATN_NX (BUILT_IN_FMIN):
-       CASE_FLT_FN (BUILT_IN_FMOD):
-       CASE_FLT_FN (BUILT_IN_FREXP):
-       CASE_FLT_FN (BUILT_IN_HYPOT):
-       CASE_FLT_FN (BUILT_IN_ILOGB):
-       CASE_FLT_FN (BUILT_IN_LDEXP):
-       CASE_FLT_FN (BUILT_IN_LGAMMA):
-       CASE_FLT_FN (BUILT_IN_LLRINT):
-       CASE_FLT_FN (BUILT_IN_LLROUND):
-       CASE_FLT_FN (BUILT_IN_LOG):
-       CASE_FLT_FN (BUILT_IN_LOG10):
-       CASE_FLT_FN (BUILT_IN_LOG1P):
-       CASE_FLT_FN (BUILT_IN_LOG2):
-       CASE_FLT_FN (BUILT_IN_LOGB):
-       CASE_FLT_FN (BUILT_IN_LRINT):
-       CASE_FLT_FN (BUILT_IN_LROUND):
-       CASE_FLT_FN (BUILT_IN_MODF):
-       CASE_FLT_FN (BUILT_IN_NAN):
-       CASE_FLT_FN (BUILT_IN_NEARBYINT):
-       CASE_FLT_FN_FLOATN_NX (BUILT_IN_NEARBYINT):
-       CASE_FLT_FN (BUILT_IN_NEXTAFTER):
-       CASE_FLT_FN (BUILT_IN_NEXTTOWARD):
-       CASE_FLT_FN (BUILT_IN_POW):
-       CASE_FLT_FN (BUILT_IN_REMAINDER):
-       CASE_FLT_FN (BUILT_IN_REMQUO):
-       CASE_FLT_FN (BUILT_IN_RINT):
-       CASE_FLT_FN_FLOATN_NX (BUILT_IN_RINT):
-       CASE_FLT_FN (BUILT_IN_ROUND):
-       CASE_FLT_FN_FLOATN_NX (BUILT_IN_ROUND):
-       CASE_FLT_FN (BUILT_IN_SCALBLN):
-       CASE_FLT_FN (BUILT_IN_SCALBN):
-       CASE_FLT_FN (BUILT_IN_SIN):
-       CASE_FLT_FN (BUILT_IN_SINH):
-       CASE_FLT_FN (BUILT_IN_SINCOS):
-       CASE_FLT_FN (BUILT_IN_SQRT):
-       CASE_FLT_FN_FLOATN_NX (BUILT_IN_SQRT):
-       CASE_FLT_FN (BUILT_IN_TAN):
-       CASE_FLT_FN (BUILT_IN_TANH):
-       CASE_FLT_FN (BUILT_IN_TGAMMA):
-       CASE_FLT_FN (BUILT_IN_TRUNC):
-       CASE_FLT_FN_FLOATN_NX (BUILT_IN_TRUNC):
- 	return true;
-       default:
- 	break;
-     }
-   return false;
- }
- 
- /* Return true if OFFRNG is bounded to a subrange of offset values
-    valid for the largest possible object.  */
- 
- bool
- access_ref::offset_bounded () const
- {
-   tree min = TYPE_MIN_VALUE (ptrdiff_type_node);
-   tree max = TYPE_MAX_VALUE (ptrdiff_type_node);
-   return wi::to_offset (min) <= offrng[0] && offrng[1] <= wi::to_offset (max);
- }
- 
- /* If CALLEE has known side effects, fill in INFO and return true.
-    See tree-ssa-structalias.c:find_func_aliases
-    for the list of builtins we might need to handle here.  */
- 
- attr_fnspec
- builtin_fnspec (tree callee)
- {
-   built_in_function code = DECL_FUNCTION_CODE (callee);
- 
-   switch (code)
-     {
-       /* All the following functions read memory pointed to by
- 	 their second argument and write memory pointed to by first
- 	 argument.
- 	 strcat/strncat additionally reads memory pointed to by the first
- 	 argument.  */
-       case BUILT_IN_STRCAT:
-       case BUILT_IN_STRCAT_CHK:
- 	return "1cW 1 ";
-       case BUILT_IN_STRNCAT:
-       case BUILT_IN_STRNCAT_CHK:
- 	return "1cW 13";
-       case BUILT_IN_STRCPY:
-       case BUILT_IN_STRCPY_CHK:
- 	return "1cO 1 ";
-       case BUILT_IN_STPCPY:
-       case BUILT_IN_STPCPY_CHK:
- 	return ".cO 1 ";
-       case BUILT_IN_STRNCPY:
-       case BUILT_IN_MEMCPY:
-       case BUILT_IN_MEMMOVE:
-       case BUILT_IN_TM_MEMCPY:
-       case BUILT_IN_TM_MEMMOVE:
-       case BUILT_IN_STRNCPY_CHK:
-       case BUILT_IN_MEMCPY_CHK:
-       case BUILT_IN_MEMMOVE_CHK:
- 	return "1cO313";
-       case BUILT_IN_MEMPCPY:
-       case BUILT_IN_MEMPCPY_CHK:
- 	return ".cO313";
-       case BUILT_IN_STPNCPY:
-       case BUILT_IN_STPNCPY_CHK:
- 	return ".cO313";
-       case BUILT_IN_BCOPY:
- 	return ".c23O3";
-       case BUILT_IN_BZERO:
- 	return ".cO2";
-       case BUILT_IN_MEMCMP:
-       case BUILT_IN_MEMCMP_EQ:
-       case BUILT_IN_BCMP:
-       case BUILT_IN_STRNCMP:
-       case BUILT_IN_STRNCMP_EQ:
-       case BUILT_IN_STRNCASECMP:
- 	return ".cR3R3";
- 
-       /* The following functions read memory pointed to by their
- 	 first argument.  */
-       CASE_BUILT_IN_TM_LOAD (1):
-       CASE_BUILT_IN_TM_LOAD (2):
-       CASE_BUILT_IN_TM_LOAD (4):
-       CASE_BUILT_IN_TM_LOAD (8):
-       CASE_BUILT_IN_TM_LOAD (FLOAT):
-       CASE_BUILT_IN_TM_LOAD (DOUBLE):
-       CASE_BUILT_IN_TM_LOAD (LDOUBLE):
-       CASE_BUILT_IN_TM_LOAD (M64):
-       CASE_BUILT_IN_TM_LOAD (M128):
-       CASE_BUILT_IN_TM_LOAD (M256):
-       case BUILT_IN_TM_LOG:
-       case BUILT_IN_TM_LOG_1:
-       case BUILT_IN_TM_LOG_2:
-       case BUILT_IN_TM_LOG_4:
-       case BUILT_IN_TM_LOG_8:
-       case BUILT_IN_TM_LOG_FLOAT:
-       case BUILT_IN_TM_LOG_DOUBLE:
-       case BUILT_IN_TM_LOG_LDOUBLE:
-       case BUILT_IN_TM_LOG_M64:
-       case BUILT_IN_TM_LOG_M128:
-       case BUILT_IN_TM_LOG_M256:
- 	return ".cR ";
- 
-       case BUILT_IN_INDEX:
-       case BUILT_IN_RINDEX:
-       case BUILT_IN_STRCHR:
-       case BUILT_IN_STRLEN:
-       case BUILT_IN_STRRCHR:
- 	return ".cR ";
-       case BUILT_IN_STRNLEN:
- 	return ".cR2";
- 
-       /* These read memory pointed to by the first argument.
- 	 Allocating memory does not have any side-effects apart from
- 	 being the definition point for the pointer.
- 	 Unix98 specifies that errno is set on allocation failure.  */
-       case BUILT_IN_STRDUP:
- 	return "mCR ";
-       case BUILT_IN_STRNDUP:
- 	return "mCR2";
-       /* Allocating memory does not have any side-effects apart from
- 	 being the definition point for the pointer.  */
-       case BUILT_IN_MALLOC:
-       case BUILT_IN_ALIGNED_ALLOC:
-       case BUILT_IN_CALLOC:
-       case BUILT_IN_GOMP_ALLOC:
- 	return "mC";
-       CASE_BUILT_IN_ALLOCA:
- 	return "mc";
-       /* These read memory pointed to by the first argument with size
- 	 in the third argument.  */
-       case BUILT_IN_MEMCHR:
- 	return ".cR3";
-       /* These read memory pointed to by the first and second arguments.  */
-       case BUILT_IN_STRSTR:
-       case BUILT_IN_STRPBRK:
-       case BUILT_IN_STRCASECMP:
-       case BUILT_IN_STRCSPN:
-       case BUILT_IN_STRSPN:
-       case BUILT_IN_STRCMP:
-       case BUILT_IN_STRCMP_EQ:
- 	return ".cR R ";
-       /* Freeing memory kills the pointed-to memory.  More importantly
- 	 the call has to serve as a barrier for moving loads and stores
- 	 across it.  */
-       case BUILT_IN_STACK_RESTORE:
-       case BUILT_IN_FREE:
-       case BUILT_IN_GOMP_FREE:
- 	return ".co ";
-       case BUILT_IN_VA_END:
- 	return ".cO ";
-       /* Realloc serves both as allocation point and deallocation point.  */
-       case BUILT_IN_REALLOC:
- 	return ".Cw ";
-       case BUILT_IN_GAMMA_R:
-       case BUILT_IN_GAMMAF_R:
-       case BUILT_IN_GAMMAL_R:
-       case BUILT_IN_LGAMMA_R:
-       case BUILT_IN_LGAMMAF_R:
-       case BUILT_IN_LGAMMAL_R:
- 	return ".C. Ot";
-       case BUILT_IN_FREXP:
-       case BUILT_IN_FREXPF:
-       case BUILT_IN_FREXPL:
-       case BUILT_IN_MODF:
-       case BUILT_IN_MODFF:
-       case BUILT_IN_MODFL:
- 	return ".c. Ot";
-       case BUILT_IN_REMQUO:
-       case BUILT_IN_REMQUOF:
-       case BUILT_IN_REMQUOL:
- 	return ".c. . Ot";
-       case BUILT_IN_SINCOS:
-       case BUILT_IN_SINCOSF:
-       case BUILT_IN_SINCOSL:
- 	return ".c. OtOt";
-       case BUILT_IN_MEMSET:
-       case BUILT_IN_MEMSET_CHK:
-       case BUILT_IN_TM_MEMSET:
- 	return "1cO3";
-       CASE_BUILT_IN_TM_STORE (1):
-       CASE_BUILT_IN_TM_STORE (2):
-       CASE_BUILT_IN_TM_STORE (4):
-       CASE_BUILT_IN_TM_STORE (8):
-       CASE_BUILT_IN_TM_STORE (FLOAT):
-       CASE_BUILT_IN_TM_STORE (DOUBLE):
-       CASE_BUILT_IN_TM_STORE (LDOUBLE):
-       CASE_BUILT_IN_TM_STORE (M64):
-       CASE_BUILT_IN_TM_STORE (M128):
-       CASE_BUILT_IN_TM_STORE (M256):
- 	return ".cO ";
-       case BUILT_IN_STACK_SAVE:
- 	return ".c";
-       case BUILT_IN_ASSUME_ALIGNED:
- 	return "1cX ";
-       /* But posix_memalign stores a pointer into the memory pointed to
- 	 by its first argument.  */
-       case BUILT_IN_POSIX_MEMALIGN:
- 	return ".cOt";
- 
-       default:
- 	return "";
-     }
- }
--- 0 ----
diff -Nrcpad gcc-11.3.0/gcc/builtins.cc gcc-12.1.0/gcc/builtins.cc
*** gcc-11.3.0/gcc/builtins.cc	Thu Jan  1 00:00:00 1970
--- gcc-12.1.0/gcc/builtins.cc	Fri May  6 07:30:56 2022
***************
*** 0 ****
--- 1,11275 ----
+ /* Expand builtin functions.
+    Copyright (C) 1988-2022 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ /* Legacy warning!  Please add no further builtin simplifications here
+    (apart from pure constant folding) - builtin simplifications should go
+    to match.pd or gimple-fold.cc instead.  */
+ 
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "backend.h"
+ #include "target.h"
+ #include "rtl.h"
+ #include "tree.h"
+ #include "memmodel.h"
+ #include "gimple.h"
+ #include "predict.h"
+ #include "tm_p.h"
+ #include "stringpool.h"
+ #include "tree-vrp.h"
+ #include "tree-ssanames.h"
+ #include "expmed.h"
+ #include "optabs.h"
+ #include "emit-rtl.h"
+ #include "recog.h"
+ #include "diagnostic-core.h"
+ #include "alias.h"
+ #include "fold-const.h"
+ #include "fold-const-call.h"
+ #include "gimple-ssa-warn-access.h"
+ #include "stor-layout.h"
+ #include "calls.h"
+ #include "varasm.h"
+ #include "tree-object-size.h"
+ #include "tree-ssa-strlen.h"
+ #include "realmpfr.h"
+ #include "cfgrtl.h"
+ #include "except.h"
+ #include "dojump.h"
+ #include "explow.h"
+ #include "stmt.h"
+ #include "expr.h"
+ #include "libfuncs.h"
+ #include "output.h"
+ #include "typeclass.h"
+ #include "langhooks.h"
+ #include "value-prof.h"
+ #include "builtins.h"
+ #include "stringpool.h"
+ #include "attribs.h"
+ #include "asan.h"
+ #include "internal-fn.h"
+ #include "case-cfn-macros.h"
+ #include "gimple-fold.h"
+ #include "intl.h"
+ #include "file-prefix-map.h" /* remap_macro_filename()  */
+ #include "gomp-constants.h"
+ #include "omp-general.h"
+ #include "tree-dfa.h"
+ #include "gimple-iterator.h"
+ #include "gimple-ssa.h"
+ #include "tree-ssa-live.h"
+ #include "tree-outof-ssa.h"
+ #include "attr-fnspec.h"
+ #include "demangle.h"
+ #include "gimple-range.h"
+ #include "pointer-query.h"
+ 
+ struct target_builtins default_target_builtins;
+ #if SWITCHABLE_TARGET
+ struct target_builtins *this_target_builtins = &default_target_builtins;
+ #endif
+ 
+ /* Define the names of the builtin function types and codes.  */
+ const char *const built_in_class_names[BUILT_IN_LAST]
+   = {"NOT_BUILT_IN", "BUILT_IN_FRONTEND", "BUILT_IN_MD", "BUILT_IN_NORMAL"};
+ 
+ #define DEF_BUILTIN(X, N, C, T, LT, B, F, NA, AT, IM, COND) #X,
+ const char * built_in_names[(int) END_BUILTINS] =
+ {
+ #include "builtins.def"
+ };
+ 
+ /* Setup an array of builtin_info_type, make sure each element decl is
+    initialized to NULL_TREE.  */
+ builtin_info_type builtin_info[(int)END_BUILTINS];
+ 
+ /* Non-zero if __builtin_constant_p should be folded right away.  */
+ bool force_folding_builtin_constant_p;
+ 
+ static int target_char_cast (tree, char *);
+ static int apply_args_size (void);
+ static int apply_result_size (void);
+ static rtx result_vector (int, rtx);
+ static void expand_builtin_prefetch (tree);
+ static rtx expand_builtin_apply_args (void);
+ static rtx expand_builtin_apply_args_1 (void);
+ static rtx expand_builtin_apply (rtx, rtx, rtx);
+ static void expand_builtin_return (rtx);
+ static enum type_class type_to_class (tree);
+ static rtx expand_builtin_classify_type (tree);
+ static rtx expand_builtin_mathfn_3 (tree, rtx, rtx);
+ static rtx expand_builtin_mathfn_ternary (tree, rtx, rtx);
+ static rtx expand_builtin_interclass_mathfn (tree, rtx);
+ static rtx expand_builtin_sincos (tree);
+ static rtx expand_builtin_fegetround (tree, rtx, machine_mode);
+ static rtx expand_builtin_feclear_feraise_except (tree, rtx, machine_mode,
+ 						  optab);
+ static rtx expand_builtin_cexpi (tree, rtx);
+ static rtx expand_builtin_int_roundingfn (tree, rtx);
+ static rtx expand_builtin_int_roundingfn_2 (tree, rtx);
+ static rtx expand_builtin_next_arg (void);
+ static rtx expand_builtin_va_start (tree);
+ static rtx expand_builtin_va_end (tree);
+ static rtx expand_builtin_va_copy (tree);
+ static rtx inline_expand_builtin_bytecmp (tree, rtx);
+ static rtx expand_builtin_strcmp (tree, rtx);
+ static rtx expand_builtin_strncmp (tree, rtx, machine_mode);
+ static rtx expand_builtin_memcpy (tree, rtx);
+ static rtx expand_builtin_memory_copy_args (tree dest, tree src, tree len,
+ 					    rtx target, tree exp,
+ 					    memop_ret retmode,
+ 					    bool might_overlap);
+ static rtx expand_builtin_memmove (tree, rtx);
+ static rtx expand_builtin_mempcpy (tree, rtx);
+ static rtx expand_builtin_mempcpy_args (tree, tree, tree, rtx, tree, memop_ret);
+ static rtx expand_builtin_strcpy (tree, rtx);
+ static rtx expand_builtin_strcpy_args (tree, tree, tree, rtx);
+ static rtx expand_builtin_stpcpy (tree, rtx, machine_mode);
+ static rtx expand_builtin_strncpy (tree, rtx);
+ static rtx expand_builtin_memset_args (tree, tree, tree, rtx, machine_mode, tree);
+ static rtx expand_builtin_bzero (tree);
+ static rtx expand_builtin_strlen (tree, rtx, machine_mode);
+ static rtx expand_builtin_strnlen (tree, rtx, machine_mode);
+ static rtx expand_builtin_alloca (tree);
+ static rtx expand_builtin_unop (machine_mode, tree, rtx, rtx, optab);
+ static rtx expand_builtin_frame_address (tree, tree);
+ static tree stabilize_va_list_loc (location_t, tree, int);
+ static rtx expand_builtin_expect (tree, rtx);
+ static rtx expand_builtin_expect_with_probability (tree, rtx);
+ static tree fold_builtin_constant_p (tree);
+ static tree fold_builtin_classify_type (tree);
+ static tree fold_builtin_strlen (location_t, tree, tree, tree);
+ static tree fold_builtin_inf (location_t, tree, int);
+ static tree rewrite_call_expr (location_t, tree, int, tree, int, ...);
+ static bool validate_arg (const_tree, enum tree_code code);
+ static rtx expand_builtin_fabs (tree, rtx, rtx);
+ static rtx expand_builtin_signbit (tree, rtx);
+ static tree fold_builtin_memcmp (location_t, tree, tree, tree);
+ static tree fold_builtin_isascii (location_t, tree);
+ static tree fold_builtin_toascii (location_t, tree);
+ static tree fold_builtin_isdigit (location_t, tree);
+ static tree fold_builtin_fabs (location_t, tree, tree);
+ static tree fold_builtin_abs (location_t, tree, tree);
+ static tree fold_builtin_unordered_cmp (location_t, tree, tree, tree, enum tree_code,
+ 					enum tree_code);
+ static tree fold_builtin_varargs (location_t, tree, tree*, int);
+ 
+ static tree fold_builtin_strpbrk (location_t, tree, tree, tree, tree);
+ static tree fold_builtin_strspn (location_t, tree, tree, tree);
+ static tree fold_builtin_strcspn (location_t, tree, tree, tree);
+ 
+ static rtx expand_builtin_object_size (tree);
+ static rtx expand_builtin_memory_chk (tree, rtx, machine_mode,
+ 				      enum built_in_function);
+ static void maybe_emit_chk_warning (tree, enum built_in_function);
+ static void maybe_emit_sprintf_chk_warning (tree, enum built_in_function);
+ static tree fold_builtin_object_size (tree, tree, enum built_in_function);
+ 
+ unsigned HOST_WIDE_INT target_newline;
+ unsigned HOST_WIDE_INT target_percent;
+ static unsigned HOST_WIDE_INT target_c;
+ static unsigned HOST_WIDE_INT target_s;
+ char target_percent_c[3];
+ char target_percent_s[3];
+ char target_percent_s_newline[4];
+ static tree do_mpfr_remquo (tree, tree, tree);
+ static tree do_mpfr_lgamma_r (tree, tree, tree);
+ static void expand_builtin_sync_synchronize (void);
+ 
+ /* Return true if NAME starts with __builtin_ or __sync_.  */
+ 
+ static bool
+ is_builtin_name (const char *name)
+ {
+   return (startswith (name, "__builtin_")
+ 	  || startswith (name, "__sync_")
+ 	  || startswith (name, "__atomic_"));
+ }
+ 
+ /* Return true if NODE should be considered for inline expansion regardless
+    of the optimization level.  This means whenever a function is invoked with
+    its "internal" name, which normally contains the prefix "__builtin".  */
+ 
+ bool
+ called_as_built_in (tree node)
+ {
+   /* Note that we must use DECL_NAME, not DECL_ASSEMBLER_NAME_SET_P since
+      we want the name used to call the function, not the name it
+      will have. */
+   const char *name = IDENTIFIER_POINTER (DECL_NAME (node));
+   return is_builtin_name (name);
+ }
+ 
+ /* Compute values M and N such that M divides (address of EXP - N) and such
+    that N < M.  If these numbers can be determined, store M in alignp and N in
+    *BITPOSP and return true.  Otherwise return false and store BITS_PER_UNIT to
+    *alignp and any bit-offset to *bitposp.
+ 
+    Note that the address (and thus the alignment) computed here is based
+    on the address to which a symbol resolves, whereas DECL_ALIGN is based
+    on the address at which an object is actually located.  These two
+    addresses are not always the same.  For example, on ARM targets,
+    the address &foo of a Thumb function foo() has the lowest bit set,
+    whereas foo() itself starts on an even address.
+ 
+    If ADDR_P is true we are taking the address of the memory reference EXP
+    and thus cannot rely on the access taking place.  */
+ 
+ bool
+ get_object_alignment_2 (tree exp, unsigned int *alignp,
+ 			unsigned HOST_WIDE_INT *bitposp, bool addr_p)
+ {
+   poly_int64 bitsize, bitpos;
+   tree offset;
+   machine_mode mode;
+   int unsignedp, reversep, volatilep;
+   unsigned int align = BITS_PER_UNIT;
+   bool known_alignment = false;
+ 
+   /* Get the innermost object and the constant (bitpos) and possibly
+      variable (offset) offset of the access.  */
+   exp = get_inner_reference (exp, &bitsize, &bitpos, &offset, &mode,
+ 			     &unsignedp, &reversep, &volatilep);
+ 
+   /* Extract alignment information from the innermost object and
+      possibly adjust bitpos and offset.  */
+   if (TREE_CODE (exp) == FUNCTION_DECL)
+     {
+       /* Function addresses can encode extra information besides their
+ 	 alignment.  However, if TARGET_PTRMEMFUNC_VBIT_LOCATION
+ 	 allows the low bit to be used as a virtual bit, we know
+ 	 that the address itself must be at least 2-byte aligned.  */
+       if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn)
+ 	align = 2 * BITS_PER_UNIT;
+     }
+   else if (TREE_CODE (exp) == LABEL_DECL)
+     ;
+   else if (TREE_CODE (exp) == CONST_DECL)
+     {
+       /* The alignment of a CONST_DECL is determined by its initializer.  */
+       exp = DECL_INITIAL (exp);
+       align = TYPE_ALIGN (TREE_TYPE (exp));
+       if (CONSTANT_CLASS_P (exp))
+ 	align = targetm.constant_alignment (exp, align);
+ 
+       known_alignment = true;
+     }
+   else if (DECL_P (exp))
+     {
+       align = DECL_ALIGN (exp);
+       known_alignment = true;
+     }
+   else if (TREE_CODE (exp) == INDIRECT_REF
+ 	   || TREE_CODE (exp) == MEM_REF
+ 	   || TREE_CODE (exp) == TARGET_MEM_REF)
+     {
+       tree addr = TREE_OPERAND (exp, 0);
+       unsigned ptr_align;
+       unsigned HOST_WIDE_INT ptr_bitpos;
+       unsigned HOST_WIDE_INT ptr_bitmask = ~0;
+ 
+       /* If the address is explicitely aligned, handle that.  */
+       if (TREE_CODE (addr) == BIT_AND_EXPR
+ 	  && TREE_CODE (TREE_OPERAND (addr, 1)) == INTEGER_CST)
+ 	{
+ 	  ptr_bitmask = TREE_INT_CST_LOW (TREE_OPERAND (addr, 1));
+ 	  ptr_bitmask *= BITS_PER_UNIT;
+ 	  align = least_bit_hwi (ptr_bitmask);
+ 	  addr = TREE_OPERAND (addr, 0);
+ 	}
+ 
+       known_alignment
+ 	= get_pointer_alignment_1 (addr, &ptr_align, &ptr_bitpos);
+       align = MAX (ptr_align, align);
+ 
+       /* Re-apply explicit alignment to the bitpos.  */
+       ptr_bitpos &= ptr_bitmask;
+ 
+       /* The alignment of the pointer operand in a TARGET_MEM_REF
+ 	 has to take the variable offset parts into account.  */
+       if (TREE_CODE (exp) == TARGET_MEM_REF)
+ 	{
+ 	  if (TMR_INDEX (exp))
+ 	    {
+ 	      unsigned HOST_WIDE_INT step = 1;
+ 	      if (TMR_STEP (exp))
+ 		step = TREE_INT_CST_LOW (TMR_STEP (exp));
+ 	      align = MIN (align, least_bit_hwi (step) * BITS_PER_UNIT);
+ 	    }
+ 	  if (TMR_INDEX2 (exp))
+ 	    align = BITS_PER_UNIT;
+ 	  known_alignment = false;
+ 	}
+ 
+       /* When EXP is an actual memory reference then we can use
+ 	 TYPE_ALIGN of a pointer indirection to derive alignment.
+ 	 Do so only if get_pointer_alignment_1 did not reveal absolute
+ 	 alignment knowledge and if using that alignment would
+ 	 improve the situation.  */
+       unsigned int talign;
+       if (!addr_p && !known_alignment
+ 	  && (talign = min_align_of_type (TREE_TYPE (exp)) * BITS_PER_UNIT)
+ 	  && talign > align)
+ 	align = talign;
+       else
+ 	{
+ 	  /* Else adjust bitpos accordingly.  */
+ 	  bitpos += ptr_bitpos;
+ 	  if (TREE_CODE (exp) == MEM_REF
+ 	      || TREE_CODE (exp) == TARGET_MEM_REF)
+ 	    bitpos += mem_ref_offset (exp).force_shwi () * BITS_PER_UNIT;
+ 	}
+     }
+   else if (TREE_CODE (exp) == STRING_CST)
+     {
+       /* STRING_CST are the only constant objects we allow to be not
+          wrapped inside a CONST_DECL.  */
+       align = TYPE_ALIGN (TREE_TYPE (exp));
+       if (CONSTANT_CLASS_P (exp))
+ 	align = targetm.constant_alignment (exp, align);
+ 
+       known_alignment = true;
+     }
+ 
+   /* If there is a non-constant offset part extract the maximum
+      alignment that can prevail.  */
+   if (offset)
+     {
+       unsigned int trailing_zeros = tree_ctz (offset);
+       if (trailing_zeros < HOST_BITS_PER_INT)
+ 	{
+ 	  unsigned int inner = (1U << trailing_zeros) * BITS_PER_UNIT;
+ 	  if (inner)
+ 	    align = MIN (align, inner);
+ 	}
+     }
+ 
+   /* Account for the alignment of runtime coefficients, so that the constant
+      bitpos is guaranteed to be accurate.  */
+   unsigned int alt_align = ::known_alignment (bitpos - bitpos.coeffs[0]);
+   if (alt_align != 0 && alt_align < align)
+     {
+       align = alt_align;
+       known_alignment = false;
+     }
+ 
+   *alignp = align;
+   *bitposp = bitpos.coeffs[0] & (align - 1);
+   return known_alignment;
+ }
+ 
+ /* For a memory reference expression EXP compute values M and N such that M
+    divides (&EXP - N) and such that N < M.  If these numbers can be determined,
+    store M in alignp and N in *BITPOSP and return true.  Otherwise return false
+    and store BITS_PER_UNIT to *alignp and any bit-offset to *bitposp.  */
+ 
+ bool
+ get_object_alignment_1 (tree exp, unsigned int *alignp,
+ 			unsigned HOST_WIDE_INT *bitposp)
+ {
+   /* Strip a WITH_SIZE_EXPR, get_inner_reference doesn't know how to deal
+      with it.  */
+   if (TREE_CODE (exp) == WITH_SIZE_EXPR)
+     exp = TREE_OPERAND (exp, 0);
+   return get_object_alignment_2 (exp, alignp, bitposp, false);
+ }
+ 
+ /* Return the alignment in bits of EXP, an object.  */
+ 
+ unsigned int
+ get_object_alignment (tree exp)
+ {
+   unsigned HOST_WIDE_INT bitpos = 0;
+   unsigned int align;
+ 
+   get_object_alignment_1 (exp, &align, &bitpos);
+ 
+   /* align and bitpos now specify known low bits of the pointer.
+      ptr & (align - 1) == bitpos.  */
+ 
+   if (bitpos != 0)
+     align = least_bit_hwi (bitpos);
+   return align;
+ }
+ 
+ /* For a pointer valued expression EXP compute values M and N such that M
+    divides (EXP - N) and such that N < M.  If these numbers can be determined,
+    store M in alignp and N in *BITPOSP and return true.  Return false if
+    the results are just a conservative approximation.
+ 
+    If EXP is not a pointer, false is returned too.  */
+ 
+ bool
+ get_pointer_alignment_1 (tree exp, unsigned int *alignp,
+ 			 unsigned HOST_WIDE_INT *bitposp)
+ {
+   STRIP_NOPS (exp);
+ 
+   if (TREE_CODE (exp) == ADDR_EXPR)
+     return get_object_alignment_2 (TREE_OPERAND (exp, 0),
+ 				   alignp, bitposp, true);
+   else if (TREE_CODE (exp) == POINTER_PLUS_EXPR)
+     {
+       unsigned int align;
+       unsigned HOST_WIDE_INT bitpos;
+       bool res = get_pointer_alignment_1 (TREE_OPERAND (exp, 0),
+ 					  &align, &bitpos);
+       if (TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST)
+ 	bitpos += TREE_INT_CST_LOW (TREE_OPERAND (exp, 1)) * BITS_PER_UNIT;
+       else
+ 	{
+ 	  unsigned int trailing_zeros = tree_ctz (TREE_OPERAND (exp, 1));
+ 	  if (trailing_zeros < HOST_BITS_PER_INT)
+ 	    {
+ 	      unsigned int inner = (1U << trailing_zeros) * BITS_PER_UNIT;
+ 	      if (inner)
+ 		align = MIN (align, inner);
+ 	    }
+ 	}
+       *alignp = align;
+       *bitposp = bitpos & (align - 1);
+       return res;
+     }
+   else if (TREE_CODE (exp) == SSA_NAME
+ 	   && POINTER_TYPE_P (TREE_TYPE (exp)))
+     {
+       unsigned int ptr_align, ptr_misalign;
+       struct ptr_info_def *pi = SSA_NAME_PTR_INFO (exp);
+ 
+       if (pi && get_ptr_info_alignment (pi, &ptr_align, &ptr_misalign))
+ 	{
+ 	  *bitposp = ptr_misalign * BITS_PER_UNIT;
+ 	  *alignp = ptr_align * BITS_PER_UNIT;
+ 	  /* Make sure to return a sensible alignment when the multiplication
+ 	     by BITS_PER_UNIT overflowed.  */
+ 	  if (*alignp == 0)
+ 	    *alignp = 1u << (HOST_BITS_PER_INT - 1);
+ 	  /* We cannot really tell whether this result is an approximation.  */
+ 	  return false;
+ 	}
+       else
+ 	{
+ 	  *bitposp = 0;
+ 	  *alignp = BITS_PER_UNIT;
+ 	  return false;
+ 	}
+     }
+   else if (TREE_CODE (exp) == INTEGER_CST)
+     {
+       *alignp = BIGGEST_ALIGNMENT;
+       *bitposp = ((TREE_INT_CST_LOW (exp) * BITS_PER_UNIT)
+ 		  & (BIGGEST_ALIGNMENT - 1));
+       return true;
+     }
+ 
+   *bitposp = 0;
+   *alignp = BITS_PER_UNIT;
+   return false;
+ }
+ 
+ /* Return the alignment in bits of EXP, a pointer valued expression.
+    The alignment returned is, by default, the alignment of the thing that
+    EXP points to.  If it is not a POINTER_TYPE, 0 is returned.
+ 
+    Otherwise, look at the expression to see if we can do better, i.e., if the
+    expression is actually pointing at an object whose alignment is tighter.  */
+ 
+ unsigned int
+ get_pointer_alignment (tree exp)
+ {
+   unsigned HOST_WIDE_INT bitpos = 0;
+   unsigned int align;
+ 
+   get_pointer_alignment_1 (exp, &align, &bitpos);
+ 
+   /* align and bitpos now specify known low bits of the pointer.
+      ptr & (align - 1) == bitpos.  */
+ 
+   if (bitpos != 0)
+     align = least_bit_hwi (bitpos);
+ 
+   return align;
+ }
+ 
+ /* Return the number of leading non-zero elements in the sequence
+    [ PTR, PTR + MAXELTS ) where each element's size is ELTSIZE bytes.
+    ELTSIZE must be a power of 2 less than 8.  Used by c_strlen.  */
+ 
+ unsigned
+ string_length (const void *ptr, unsigned eltsize, unsigned maxelts)
+ {
+   gcc_checking_assert (eltsize == 1 || eltsize == 2 || eltsize == 4);
+ 
+   unsigned n;
+ 
+   if (eltsize == 1)
+     {
+       /* Optimize the common case of plain char.  */
+       for (n = 0; n < maxelts; n++)
+ 	{
+ 	  const char *elt = (const char*) ptr + n;
+ 	  if (!*elt)
+ 	    break;
+ 	}
+     }
+   else
+     {
+       for (n = 0; n < maxelts; n++)
+ 	{
+ 	  const char *elt = (const char*) ptr + n * eltsize;
+ 	  if (!memcmp (elt, "\0\0\0\0", eltsize))
+ 	    break;
+ 	}
+     }
+   return n;
+ }
+ 
+ /* Compute the length of a null-terminated character string or wide
+    character string handling character sizes of 1, 2, and 4 bytes.
+    TREE_STRING_LENGTH is not the right way because it evaluates to
+    the size of the character array in bytes (as opposed to characters)
+    and because it can contain a zero byte in the middle.
+ 
+    ONLY_VALUE should be nonzero if the result is not going to be emitted
+    into the instruction stream and zero if it is going to be expanded.
+    E.g. with i++ ? "foo" : "bar", if ONLY_VALUE is nonzero, constant 3
+    is returned, otherwise NULL, since
+    len = c_strlen (ARG, 1); if (len) expand_expr (len, ...); would not
+    evaluate the side-effects.
+ 
+    If ONLY_VALUE is two then we do not emit warnings about out-of-bound
+    accesses.  Note that this implies the result is not going to be emitted
+    into the instruction stream.
+ 
+    Additional information about the string accessed may be recorded
+    in DATA.  For example, if ARG references an unterminated string,
+    then the declaration will be stored in the DECL field.   If the
+    length of the unterminated string can be determined, it'll be
+    stored in the LEN field.  Note this length could well be different
+    than what a C strlen call would return.
+ 
+    ELTSIZE is 1 for normal single byte character strings, and 2 or
+    4 for wide characer strings.  ELTSIZE is by default 1.
+ 
+    The value returned is of type `ssizetype'.  */
+ 
+ tree
+ c_strlen (tree arg, int only_value, c_strlen_data *data, unsigned eltsize)
+ {
+   /* If we were not passed a DATA pointer, then get one to a local
+      structure.  That avoids having to check DATA for NULL before
+      each time we want to use it.  */
+   c_strlen_data local_strlen_data = { };
+   if (!data)
+     data = &local_strlen_data;
+ 
+   gcc_checking_assert (eltsize == 1 || eltsize == 2 || eltsize == 4);
+ 
+   tree src = STRIP_NOPS (arg);
+   if (TREE_CODE (src) == COND_EXPR
+       && (only_value || !TREE_SIDE_EFFECTS (TREE_OPERAND (src, 0))))
+     {
+       tree len1, len2;
+ 
+       len1 = c_strlen (TREE_OPERAND (src, 1), only_value, data, eltsize);
+       len2 = c_strlen (TREE_OPERAND (src, 2), only_value, data, eltsize);
+       if (tree_int_cst_equal (len1, len2))
+ 	return len1;
+     }
+ 
+   if (TREE_CODE (src) == COMPOUND_EXPR
+       && (only_value || !TREE_SIDE_EFFECTS (TREE_OPERAND (src, 0))))
+     return c_strlen (TREE_OPERAND (src, 1), only_value, data, eltsize);
+ 
+   location_t loc = EXPR_LOC_OR_LOC (src, input_location);
+ 
+   /* Offset from the beginning of the string in bytes.  */
+   tree byteoff;
+   tree memsize;
+   tree decl;
+   src = string_constant (src, &byteoff, &memsize, &decl);
+   if (src == 0)
+     return NULL_TREE;
+ 
+   /* Determine the size of the string element.  */
+   if (eltsize != tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (src)))))
+     return NULL_TREE;
+ 
+   /* Set MAXELTS to sizeof (SRC) / sizeof (*SRC) - 1, the maximum possible
+      length of SRC.  Prefer TYPE_SIZE() to TREE_STRING_LENGTH() if possible
+      in case the latter is less than the size of the array, such as when
+      SRC refers to a short string literal used to initialize a large array.
+      In that case, the elements of the array after the terminating NUL are
+      all NUL.  */
+   HOST_WIDE_INT strelts = TREE_STRING_LENGTH (src);
+   strelts = strelts / eltsize;
+ 
+   if (!tree_fits_uhwi_p (memsize))
+     return NULL_TREE;
+ 
+   HOST_WIDE_INT maxelts = tree_to_uhwi (memsize) / eltsize;
+ 
+   /* PTR can point to the byte representation of any string type, including
+      char* and wchar_t*.  */
+   const char *ptr = TREE_STRING_POINTER (src);
+ 
+   if (byteoff && TREE_CODE (byteoff) != INTEGER_CST)
+     {
+       /* The code below works only for single byte character types.  */
+       if (eltsize != 1)
+ 	return NULL_TREE;
+ 
+       /* If the string has an internal NUL character followed by any
+ 	 non-NUL characters (e.g., "foo\0bar"), we can't compute
+ 	 the offset to the following NUL if we don't know where to
+ 	 start searching for it.  */
+       unsigned len = string_length (ptr, eltsize, strelts);
+ 
+       /* Return when an embedded null character is found or none at all.
+ 	 In the latter case, set the DECL/LEN field in the DATA structure
+ 	 so that callers may examine them.  */
+       if (len + 1 < strelts)
+ 	return NULL_TREE;
+       else if (len >= maxelts)
+ 	{
+ 	  data->decl = decl;
+ 	  data->off = byteoff;
+ 	  data->minlen = ssize_int (len);
+ 	  return NULL_TREE;
+ 	}
+ 
+       /* For empty strings the result should be zero.  */
+       if (len == 0)
+ 	return ssize_int (0);
+ 
+       /* We don't know the starting offset, but we do know that the string
+ 	 has no internal zero bytes.  If the offset falls within the bounds
+ 	 of the string subtract the offset from the length of the string,
+ 	 and return that.  Otherwise the length is zero.  Take care to
+ 	 use SAVE_EXPR in case the OFFSET has side-effects.  */
+       tree offsave = TREE_SIDE_EFFECTS (byteoff) ? save_expr (byteoff)
+ 						 : byteoff;
+       offsave = fold_convert_loc (loc, sizetype, offsave);
+       tree condexp = fold_build2_loc (loc, LE_EXPR, boolean_type_node, offsave,
+ 				      size_int (len));
+       tree lenexp = fold_build2_loc (loc, MINUS_EXPR, sizetype, size_int (len),
+ 				     offsave);
+       lenexp = fold_convert_loc (loc, ssizetype, lenexp);
+       return fold_build3_loc (loc, COND_EXPR, ssizetype, condexp, lenexp,
+ 			      build_zero_cst (ssizetype));
+     }
+ 
+   /* Offset from the beginning of the string in elements.  */
+   HOST_WIDE_INT eltoff;
+ 
+   /* We have a known offset into the string.  Start searching there for
+      a null character if we can represent it as a single HOST_WIDE_INT.  */
+   if (byteoff == 0)
+     eltoff = 0;
+   else if (! tree_fits_uhwi_p (byteoff) || tree_to_uhwi (byteoff) % eltsize)
+     eltoff = -1;
+   else
+     eltoff = tree_to_uhwi (byteoff) / eltsize;
+ 
+   /* If the offset is known to be out of bounds, warn, and call strlen at
+      runtime.  */
+   if (eltoff < 0 || eltoff >= maxelts)
+     {
+       /* Suppress multiple warnings for propagated constant strings.  */
+       if (only_value != 2
+ 	  && !warning_suppressed_p (arg, OPT_Warray_bounds)
+ 	  && warning_at (loc, OPT_Warray_bounds,
+ 			 "offset %qwi outside bounds of constant string",
+ 			 eltoff))
+ 	{
+ 	  if (decl)
+ 	    inform (DECL_SOURCE_LOCATION (decl), "%qE declared here", decl);
+ 	  suppress_warning (arg, OPT_Warray_bounds);
+ 	}
+       return NULL_TREE;
+     }
+ 
+   /* If eltoff is larger than strelts but less than maxelts the
+      string length is zero, since the excess memory will be zero.  */
+   if (eltoff > strelts)
+     return ssize_int (0);
+ 
+   /* Use strlen to search for the first zero byte.  Since any strings
+      constructed with build_string will have nulls appended, we win even
+      if we get handed something like (char[4])"abcd".
+ 
+      Since ELTOFF is our starting index into the string, no further
+      calculation is needed.  */
+   unsigned len = string_length (ptr + eltoff * eltsize, eltsize,
+ 				strelts - eltoff);
+ 
+   /* Don't know what to return if there was no zero termination.
+      Ideally this would turn into a gcc_checking_assert over time.
+      Set DECL/LEN so callers can examine them.  */
+   if (len >= maxelts - eltoff)
+     {
+       data->decl = decl;
+       data->off = byteoff;
+       data->minlen = ssize_int (len);
+       return NULL_TREE;
+     }
+ 
+   return ssize_int (len);
+ }
+ 
+ /* Return a constant integer corresponding to target reading
+    GET_MODE_BITSIZE (MODE) bits from string constant STR.  If
+    NULL_TERMINATED_P, reading stops after '\0' character, all further ones
+    are assumed to be zero, otherwise it reads as many characters
+    as needed.  */
+ 
+ rtx
+ c_readstr (const char *str, scalar_int_mode mode,
+ 	   bool null_terminated_p/*=true*/)
+ {
+   HOST_WIDE_INT ch;
+   unsigned int i, j;
+   HOST_WIDE_INT tmp[MAX_BITSIZE_MODE_ANY_INT / HOST_BITS_PER_WIDE_INT];
+ 
+   gcc_assert (GET_MODE_CLASS (mode) == MODE_INT);
+   unsigned int len = (GET_MODE_PRECISION (mode) + HOST_BITS_PER_WIDE_INT - 1)
+     / HOST_BITS_PER_WIDE_INT;
+ 
+   gcc_assert (len <= MAX_BITSIZE_MODE_ANY_INT / HOST_BITS_PER_WIDE_INT);
+   for (i = 0; i < len; i++)
+     tmp[i] = 0;
+ 
+   ch = 1;
+   for (i = 0; i < GET_MODE_SIZE (mode); i++)
+     {
+       j = i;
+       if (WORDS_BIG_ENDIAN)
+ 	j = GET_MODE_SIZE (mode) - i - 1;
+       if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
+ 	  && GET_MODE_SIZE (mode) >= UNITS_PER_WORD)
+ 	j = j + UNITS_PER_WORD - 2 * (j % UNITS_PER_WORD) - 1;
+       j *= BITS_PER_UNIT;
+ 
+       if (ch || !null_terminated_p)
+ 	ch = (unsigned char) str[i];
+       tmp[j / HOST_BITS_PER_WIDE_INT] |= ch << (j % HOST_BITS_PER_WIDE_INT);
+     }
+ 
+   wide_int c = wide_int::from_array (tmp, len, GET_MODE_PRECISION (mode));
+   return immed_wide_int_const (c, mode);
+ }
+ 
+ /* Cast a target constant CST to target CHAR and if that value fits into
+    host char type, return zero and put that value into variable pointed to by
+    P.  */
+ 
+ static int
+ target_char_cast (tree cst, char *p)
+ {
+   unsigned HOST_WIDE_INT val, hostval;
+ 
+   if (TREE_CODE (cst) != INTEGER_CST
+       || CHAR_TYPE_SIZE > HOST_BITS_PER_WIDE_INT)
+     return 1;
+ 
+   /* Do not care if it fits or not right here.  */
+   val = TREE_INT_CST_LOW (cst);
+ 
+   if (CHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT)
+     val &= (HOST_WIDE_INT_1U << CHAR_TYPE_SIZE) - 1;
+ 
+   hostval = val;
+   if (HOST_BITS_PER_CHAR < HOST_BITS_PER_WIDE_INT)
+     hostval &= (HOST_WIDE_INT_1U << HOST_BITS_PER_CHAR) - 1;
+ 
+   if (val != hostval)
+     return 1;
+ 
+   *p = hostval;
+   return 0;
+ }
+ 
+ /* Similar to save_expr, but assumes that arbitrary code is not executed
+    in between the multiple evaluations.  In particular, we assume that a
+    non-addressable local variable will not be modified.  */
+ 
+ static tree
+ builtin_save_expr (tree exp)
+ {
+   if (TREE_CODE (exp) == SSA_NAME
+       || (TREE_ADDRESSABLE (exp) == 0
+ 	  && (TREE_CODE (exp) == PARM_DECL
+ 	      || (VAR_P (exp) && !TREE_STATIC (exp)))))
+     return exp;
+ 
+   return save_expr (exp);
+ }
+ 
+ /* Given TEM, a pointer to a stack frame, follow the dynamic chain COUNT
+    times to get the address of either a higher stack frame, or a return
+    address located within it (depending on FNDECL_CODE).  */
+ 
+ static rtx
+ expand_builtin_return_addr (enum built_in_function fndecl_code, int count)
+ {
+   int i;
+   rtx tem = INITIAL_FRAME_ADDRESS_RTX;
+   if (tem == NULL_RTX)
+     {
+       /* For a zero count with __builtin_return_address, we don't care what
+ 	 frame address we return, because target-specific definitions will
+ 	 override us.  Therefore frame pointer elimination is OK, and using
+ 	 the soft frame pointer is OK.
+ 
+ 	 For a nonzero count, or a zero count with __builtin_frame_address,
+ 	 we require a stable offset from the current frame pointer to the
+ 	 previous one, so we must use the hard frame pointer, and
+ 	 we must disable frame pointer elimination.  */
+       if (count == 0 && fndecl_code == BUILT_IN_RETURN_ADDRESS)
+ 	tem = frame_pointer_rtx;
+       else
+ 	{
+ 	  tem = hard_frame_pointer_rtx;
+ 
+ 	  /* Tell reload not to eliminate the frame pointer.  */
+ 	  crtl->accesses_prior_frames = 1;
+ 	}
+     }
+ 
+   if (count > 0)
+     SETUP_FRAME_ADDRESSES ();
+ 
+   /* On the SPARC, the return address is not in the frame, it is in a
+      register.  There is no way to access it off of the current frame
+      pointer, but it can be accessed off the previous frame pointer by
+      reading the value from the register window save area.  */
+   if (RETURN_ADDR_IN_PREVIOUS_FRAME && fndecl_code == BUILT_IN_RETURN_ADDRESS)
+     count--;
+ 
+   /* Scan back COUNT frames to the specified frame.  */
+   for (i = 0; i < count; i++)
+     {
+       /* Assume the dynamic chain pointer is in the word that the
+ 	 frame address points to, unless otherwise specified.  */
+       tem = DYNAMIC_CHAIN_ADDRESS (tem);
+       tem = memory_address (Pmode, tem);
+       tem = gen_frame_mem (Pmode, tem);
+       tem = copy_to_reg (tem);
+     }
+ 
+   /* For __builtin_frame_address, return what we've got.  But, on
+      the SPARC for example, we may have to add a bias.  */
+   if (fndecl_code == BUILT_IN_FRAME_ADDRESS)
+     return FRAME_ADDR_RTX (tem);
+ 
+   /* For __builtin_return_address, get the return address from that frame.  */
+ #ifdef RETURN_ADDR_RTX
+   tem = RETURN_ADDR_RTX (count, tem);
+ #else
+   tem = memory_address (Pmode,
+ 			plus_constant (Pmode, tem, GET_MODE_SIZE (Pmode)));
+   tem = gen_frame_mem (Pmode, tem);
+ #endif
+   return tem;
+ }
+ 
+ /* Alias set used for setjmp buffer.  */
+ static alias_set_type setjmp_alias_set = -1;
+ 
+ /* Construct the leading half of a __builtin_setjmp call.  Control will
+    return to RECEIVER_LABEL.  This is also called directly by the SJLJ
+    exception handling code.  */
+ 
+ void
+ expand_builtin_setjmp_setup (rtx buf_addr, rtx receiver_label)
+ {
+   machine_mode sa_mode = STACK_SAVEAREA_MODE (SAVE_NONLOCAL);
+   rtx stack_save;
+   rtx mem;
+ 
+   if (setjmp_alias_set == -1)
+     setjmp_alias_set = new_alias_set ();
+ 
+   buf_addr = convert_memory_address (Pmode, buf_addr);
+ 
+   buf_addr = force_reg (Pmode, force_operand (buf_addr, NULL_RTX));
+ 
+   /* We store the frame pointer and the address of receiver_label in
+      the buffer and use the rest of it for the stack save area, which
+      is machine-dependent.  */
+ 
+   mem = gen_rtx_MEM (Pmode, buf_addr);
+   set_mem_alias_set (mem, setjmp_alias_set);
+   emit_move_insn (mem, hard_frame_pointer_rtx);
+ 
+   mem = gen_rtx_MEM (Pmode, plus_constant (Pmode, buf_addr,
+ 					   GET_MODE_SIZE (Pmode))),
+   set_mem_alias_set (mem, setjmp_alias_set);
+ 
+   emit_move_insn (validize_mem (mem),
+ 		  force_reg (Pmode, gen_rtx_LABEL_REF (Pmode, receiver_label)));
+ 
+   stack_save = gen_rtx_MEM (sa_mode,
+ 			    plus_constant (Pmode, buf_addr,
+ 					   2 * GET_MODE_SIZE (Pmode)));
+   set_mem_alias_set (stack_save, setjmp_alias_set);
+   emit_stack_save (SAVE_NONLOCAL, &stack_save);
+ 
+   /* If there is further processing to do, do it.  */
+   if (targetm.have_builtin_setjmp_setup ())
+     emit_insn (targetm.gen_builtin_setjmp_setup (buf_addr));
+ 
+   /* We have a nonlocal label.   */
+   cfun->has_nonlocal_label = 1;
+ }
+ 
+ /* Construct the trailing part of a __builtin_setjmp call.  This is
+    also called directly by the SJLJ exception handling code.
+    If RECEIVER_LABEL is NULL, instead contruct a nonlocal goto handler.  */
+ 
+ void
+ expand_builtin_setjmp_receiver (rtx receiver_label)
+ {
+   rtx chain;
+ 
+   /* Mark the FP as used when we get here, so we have to make sure it's
+      marked as used by this function.  */
+   emit_use (hard_frame_pointer_rtx);
+ 
+   /* Mark the static chain as clobbered here so life information
+      doesn't get messed up for it.  */
+   chain = rtx_for_static_chain (current_function_decl, true);
+   if (chain && REG_P (chain))
+     emit_clobber (chain);
+ 
+   if (!HARD_FRAME_POINTER_IS_ARG_POINTER && fixed_regs[ARG_POINTER_REGNUM])
+     {
+       /* If the argument pointer can be eliminated in favor of the
+ 	 frame pointer, we don't need to restore it.  We assume here
+ 	 that if such an elimination is present, it can always be used.
+ 	 This is the case on all known machines; if we don't make this
+ 	 assumption, we do unnecessary saving on many machines.  */
+       size_t i;
+       static const struct elims {const int from, to;} elim_regs[] = ELIMINABLE_REGS;
+ 
+       for (i = 0; i < ARRAY_SIZE (elim_regs); i++)
+ 	if (elim_regs[i].from == ARG_POINTER_REGNUM
+ 	    && elim_regs[i].to == HARD_FRAME_POINTER_REGNUM)
+ 	  break;
+ 
+       if (i == ARRAY_SIZE (elim_regs))
+ 	{
+ 	  /* Now restore our arg pointer from the address at which it
+ 	     was saved in our stack frame.  */
+ 	  emit_move_insn (crtl->args.internal_arg_pointer,
+ 			  copy_to_reg (get_arg_pointer_save_area ()));
+ 	}
+     }
+ 
+   if (receiver_label != NULL && targetm.have_builtin_setjmp_receiver ())
+     emit_insn (targetm.gen_builtin_setjmp_receiver (receiver_label));
+   else if (targetm.have_nonlocal_goto_receiver ())
+     emit_insn (targetm.gen_nonlocal_goto_receiver ());
+   else
+     { /* Nothing */ }
+ 
+   /* We must not allow the code we just generated to be reordered by
+      scheduling.  Specifically, the update of the frame pointer must
+      happen immediately, not later.  */
+   emit_insn (gen_blockage ());
+ }
+ 
+ /* __builtin_longjmp is passed a pointer to an array of five words (not
+    all will be used on all machines).  It operates similarly to the C
+    library function of the same name, but is more efficient.  Much of
+    the code below is copied from the handling of non-local gotos.  */
+ 
+ static void
+ expand_builtin_longjmp (rtx buf_addr, rtx value)
+ {
+   rtx fp, lab, stack;
+   rtx_insn *insn, *last;
+   machine_mode sa_mode = STACK_SAVEAREA_MODE (SAVE_NONLOCAL);
+ 
+   /* DRAP is needed for stack realign if longjmp is expanded to current
+      function  */
+   if (SUPPORTS_STACK_ALIGNMENT)
+     crtl->need_drap = true;
+ 
+   if (setjmp_alias_set == -1)
+     setjmp_alias_set = new_alias_set ();
+ 
+   buf_addr = convert_memory_address (Pmode, buf_addr);
+ 
+   buf_addr = force_reg (Pmode, buf_addr);
+ 
+   /* We require that the user must pass a second argument of 1, because
+      that is what builtin_setjmp will return.  */
+   gcc_assert (value == const1_rtx);
+ 
+   last = get_last_insn ();
+   if (targetm.have_builtin_longjmp ())
+     emit_insn (targetm.gen_builtin_longjmp (buf_addr));
+   else
+     {
+       fp = gen_rtx_MEM (Pmode, buf_addr);
+       lab = gen_rtx_MEM (Pmode, plus_constant (Pmode, buf_addr,
+ 					       GET_MODE_SIZE (Pmode)));
+ 
+       stack = gen_rtx_MEM (sa_mode, plus_constant (Pmode, buf_addr,
+ 						   2 * GET_MODE_SIZE (Pmode)));
+       set_mem_alias_set (fp, setjmp_alias_set);
+       set_mem_alias_set (lab, setjmp_alias_set);
+       set_mem_alias_set (stack, setjmp_alias_set);
+ 
+       /* Pick up FP, label, and SP from the block and jump.  This code is
+ 	 from expand_goto in stmt.cc; see there for detailed comments.  */
+       if (targetm.have_nonlocal_goto ())
+ 	/* We have to pass a value to the nonlocal_goto pattern that will
+ 	   get copied into the static_chain pointer, but it does not matter
+ 	   what that value is, because builtin_setjmp does not use it.  */
+ 	emit_insn (targetm.gen_nonlocal_goto (value, lab, stack, fp));
+       else
+ 	{
+ 	  emit_clobber (gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)));
+ 	  emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx));
+ 
+ 	  lab = copy_to_reg (lab);
+ 
+ 	  /* Restore the frame pointer and stack pointer.  We must use a
+ 	     temporary since the setjmp buffer may be a local.  */
+ 	  fp = copy_to_reg (fp);
+ 	  emit_stack_restore (SAVE_NONLOCAL, stack);
+ 
+ 	  /* Ensure the frame pointer move is not optimized.  */
+ 	  emit_insn (gen_blockage ());
+ 	  emit_clobber (hard_frame_pointer_rtx);
+ 	  emit_clobber (frame_pointer_rtx);
+ 	  emit_move_insn (hard_frame_pointer_rtx, fp);
+ 
+ 	  emit_use (hard_frame_pointer_rtx);
+ 	  emit_use (stack_pointer_rtx);
+ 	  emit_indirect_jump (lab);
+ 	}
+     }
+ 
+   /* Search backwards and mark the jump insn as a non-local goto.
+      Note that this precludes the use of __builtin_longjmp to a
+      __builtin_setjmp target in the same function.  However, we've
+      already cautioned the user that these functions are for
+      internal exception handling use only.  */
+   for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
+     {
+       gcc_assert (insn != last);
+ 
+       if (JUMP_P (insn))
+ 	{
+ 	  add_reg_note (insn, REG_NON_LOCAL_GOTO, const0_rtx);
+ 	  break;
+ 	}
+       else if (CALL_P (insn))
+ 	break;
+     }
+ }
+ 
+ static inline bool
+ more_const_call_expr_args_p (const const_call_expr_arg_iterator *iter)
+ {
+   return (iter->i < iter->n);
+ }
+ 
+ /* This function validates the types of a function call argument list
+    against a specified list of tree_codes.  If the last specifier is a 0,
+    that represents an ellipsis, otherwise the last specifier must be a
+    VOID_TYPE.  */
+ 
+ static bool
+ validate_arglist (const_tree callexpr, ...)
+ {
+   enum tree_code code;
+   bool res = 0;
+   va_list ap;
+   const_call_expr_arg_iterator iter;
+   const_tree arg;
+ 
+   va_start (ap, callexpr);
+   init_const_call_expr_arg_iterator (callexpr, &iter);
+ 
+   /* Get a bitmap of pointer argument numbers declared attribute nonnull.  */
+   tree fn = CALL_EXPR_FN (callexpr);
+   bitmap argmap = get_nonnull_args (TREE_TYPE (TREE_TYPE (fn)));
+ 
+   for (unsigned argno = 1; ; ++argno)
+     {
+       code = (enum tree_code) va_arg (ap, int);
+ 
+       switch (code)
+ 	{
+ 	case 0:
+ 	  /* This signifies an ellipses, any further arguments are all ok.  */
+ 	  res = true;
+ 	  goto end;
+ 	case VOID_TYPE:
+ 	  /* This signifies an endlink, if no arguments remain, return
+ 	     true, otherwise return false.  */
+ 	  res = !more_const_call_expr_args_p (&iter);
+ 	  goto end;
+ 	case POINTER_TYPE:
+ 	  /* The actual argument must be nonnull when either the whole
+ 	     called function has been declared nonnull, or when the formal
+ 	     argument corresponding to the actual argument has been.  */
+ 	  if (argmap
+ 	      && (bitmap_empty_p (argmap) || bitmap_bit_p (argmap, argno)))
+ 	    {
+ 	      arg = next_const_call_expr_arg (&iter);
+ 	      if (!validate_arg (arg, code) || integer_zerop (arg))
+ 		goto end;
+ 	      break;
+ 	    }
+ 	  /* FALLTHRU */
+ 	default:
+ 	  /* If no parameters remain or the parameter's code does not
+ 	     match the specified code, return false.  Otherwise continue
+ 	     checking any remaining arguments.  */
+ 	  arg = next_const_call_expr_arg (&iter);
+ 	  if (!validate_arg (arg, code))
+ 	    goto end;
+ 	  break;
+ 	}
+     }
+ 
+   /* We need gotos here since we can only have one VA_CLOSE in a
+      function.  */
+  end: ;
+   va_end (ap);
+ 
+   BITMAP_FREE (argmap);
+ 
+   return res;
+ }
+ 
+ /* Expand a call to __builtin_nonlocal_goto.  We're passed the target label
+    and the address of the save area.  */
+ 
+ static rtx
+ expand_builtin_nonlocal_goto (tree exp)
+ {
+   tree t_label, t_save_area;
+   rtx r_label, r_save_area, r_fp, r_sp;
+   rtx_insn *insn;
+ 
+   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   t_label = CALL_EXPR_ARG (exp, 0);
+   t_save_area = CALL_EXPR_ARG (exp, 1);
+ 
+   r_label = expand_normal (t_label);
+   r_label = convert_memory_address (Pmode, r_label);
+   r_save_area = expand_normal (t_save_area);
+   r_save_area = convert_memory_address (Pmode, r_save_area);
+   /* Copy the address of the save location to a register just in case it was
+      based on the frame pointer.   */
+   r_save_area = copy_to_reg (r_save_area);
+   r_fp = gen_rtx_MEM (Pmode, r_save_area);
+   r_sp = gen_rtx_MEM (STACK_SAVEAREA_MODE (SAVE_NONLOCAL),
+ 		      plus_constant (Pmode, r_save_area,
+ 				     GET_MODE_SIZE (Pmode)));
+ 
+   crtl->has_nonlocal_goto = 1;
+ 
+   /* ??? We no longer need to pass the static chain value, afaik.  */
+   if (targetm.have_nonlocal_goto ())
+     emit_insn (targetm.gen_nonlocal_goto (const0_rtx, r_label, r_sp, r_fp));
+   else
+     {
+       emit_clobber (gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)));
+       emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx));
+ 
+       r_label = copy_to_reg (r_label);
+ 
+       /* Restore the frame pointer and stack pointer.  We must use a
+ 	 temporary since the setjmp buffer may be a local.  */
+       r_fp = copy_to_reg (r_fp);
+       emit_stack_restore (SAVE_NONLOCAL, r_sp);
+ 
+       /* Ensure the frame pointer move is not optimized.  */
+       emit_insn (gen_blockage ());
+       emit_clobber (hard_frame_pointer_rtx);
+       emit_clobber (frame_pointer_rtx);
+       emit_move_insn (hard_frame_pointer_rtx, r_fp);
+ 
+       /* USE of hard_frame_pointer_rtx added for consistency;
+ 	 not clear if really needed.  */
+       emit_use (hard_frame_pointer_rtx);
+       emit_use (stack_pointer_rtx);
+ 
+       /* If the architecture is using a GP register, we must
+ 	 conservatively assume that the target function makes use of it.
+ 	 The prologue of functions with nonlocal gotos must therefore
+ 	 initialize the GP register to the appropriate value, and we
+ 	 must then make sure that this value is live at the point
+ 	 of the jump.  (Note that this doesn't necessarily apply
+ 	 to targets with a nonlocal_goto pattern; they are free
+ 	 to implement it in their own way.  Note also that this is
+ 	 a no-op if the GP register is a global invariant.)  */
+       unsigned regnum = PIC_OFFSET_TABLE_REGNUM;
+       if (regnum != INVALID_REGNUM && fixed_regs[regnum])
+ 	emit_use (pic_offset_table_rtx);
+ 
+       emit_indirect_jump (r_label);
+     }
+ 
+   /* Search backwards to the jump insn and mark it as a
+      non-local goto.  */
+   for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
+     {
+       if (JUMP_P (insn))
+ 	{
+ 	  add_reg_note (insn, REG_NON_LOCAL_GOTO, const0_rtx);
+ 	  break;
+ 	}
+       else if (CALL_P (insn))
+ 	break;
+     }
+ 
+   return const0_rtx;
+ }
+ 
+ /* __builtin_update_setjmp_buf is passed a pointer to an array of five words
+    (not all will be used on all machines) that was passed to __builtin_setjmp.
+    It updates the stack pointer in that block to the current value.  This is
+    also called directly by the SJLJ exception handling code.  */
+ 
+ void
+ expand_builtin_update_setjmp_buf (rtx buf_addr)
+ {
+   machine_mode sa_mode = STACK_SAVEAREA_MODE (SAVE_NONLOCAL);
+   buf_addr = convert_memory_address (Pmode, buf_addr);
+   rtx stack_save
+     = gen_rtx_MEM (sa_mode,
+ 		   memory_address
+ 		   (sa_mode,
+ 		    plus_constant (Pmode, buf_addr,
+ 				   2 * GET_MODE_SIZE (Pmode))));
+ 
+   emit_stack_save (SAVE_NONLOCAL, &stack_save);
+ }
+ 
+ /* Expand a call to __builtin_prefetch.  For a target that does not support
+    data prefetch, evaluate the memory address argument in case it has side
+    effects.  */
+ 
+ static void
+ expand_builtin_prefetch (tree exp)
+ {
+   tree arg0, arg1, arg2;
+   int nargs;
+   rtx op0, op1, op2;
+ 
+   if (!validate_arglist (exp, POINTER_TYPE, 0))
+     return;
+ 
+   arg0 = CALL_EXPR_ARG (exp, 0);
+ 
+   /* Arguments 1 and 2 are optional; argument 1 (read/write) defaults to
+      zero (read) and argument 2 (locality) defaults to 3 (high degree of
+      locality).  */
+   nargs = call_expr_nargs (exp);
+   if (nargs > 1)
+     arg1 = CALL_EXPR_ARG (exp, 1);
+   else
+     arg1 = integer_zero_node;
+   if (nargs > 2)
+     arg2 = CALL_EXPR_ARG (exp, 2);
+   else
+     arg2 = integer_three_node;
+ 
+   /* Argument 0 is an address.  */
+   op0 = expand_expr (arg0, NULL_RTX, Pmode, EXPAND_NORMAL);
+ 
+   /* Argument 1 (read/write flag) must be a compile-time constant int.  */
+   if (TREE_CODE (arg1) != INTEGER_CST)
+     {
+       error ("second argument to %<__builtin_prefetch%> must be a constant");
+       arg1 = integer_zero_node;
+     }
+   op1 = expand_normal (arg1);
+   /* Argument 1 must be either zero or one.  */
+   if (INTVAL (op1) != 0 && INTVAL (op1) != 1)
+     {
+       warning (0, "invalid second argument to %<__builtin_prefetch%>;"
+ 	       " using zero");
+       op1 = const0_rtx;
+     }
+ 
+   /* Argument 2 (locality) must be a compile-time constant int.  */
+   if (TREE_CODE (arg2) != INTEGER_CST)
+     {
+       error ("third argument to %<__builtin_prefetch%> must be a constant");
+       arg2 = integer_zero_node;
+     }
+   op2 = expand_normal (arg2);
+   /* Argument 2 must be 0, 1, 2, or 3.  */
+   if (INTVAL (op2) < 0 || INTVAL (op2) > 3)
+     {
+       warning (0, "invalid third argument to %<__builtin_prefetch%>; using zero");
+       op2 = const0_rtx;
+     }
+ 
+   if (targetm.have_prefetch ())
+     {
+       class expand_operand ops[3];
+ 
+       create_address_operand (&ops[0], op0);
+       create_integer_operand (&ops[1], INTVAL (op1));
+       create_integer_operand (&ops[2], INTVAL (op2));
+       if (maybe_expand_insn (targetm.code_for_prefetch, 3, ops))
+ 	return;
+     }
+ 
+   /* Don't do anything with direct references to volatile memory, but
+      generate code to handle other side effects.  */
+   if (!MEM_P (op0) && side_effects_p (op0))
+     emit_insn (op0);
+ }
+ 
+ /* Get a MEM rtx for expression EXP which is the address of an operand
+    to be used in a string instruction (cmpstrsi, cpymemsi, ..).  LEN is
+    the maximum length of the block of memory that might be accessed or
+    NULL if unknown.  */
+ 
+ rtx
+ get_memory_rtx (tree exp, tree len)
+ {
+   tree orig_exp = exp;
+   rtx addr, mem;
+ 
+   /* When EXP is not resolved SAVE_EXPR, MEM_ATTRS can be still derived
+      from its expression, for expr->a.b only <variable>.a.b is recorded.  */
+   if (TREE_CODE (exp) == SAVE_EXPR && !SAVE_EXPR_RESOLVED_P (exp))
+     exp = TREE_OPERAND (exp, 0);
+ 
+   addr = expand_expr (orig_exp, NULL_RTX, ptr_mode, EXPAND_NORMAL);
+   mem = gen_rtx_MEM (BLKmode, memory_address (BLKmode, addr));
+ 
+   /* Get an expression we can use to find the attributes to assign to MEM.
+      First remove any nops.  */
+   while (CONVERT_EXPR_P (exp)
+ 	 && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (exp, 0))))
+     exp = TREE_OPERAND (exp, 0);
+ 
+   /* Build a MEM_REF representing the whole accessed area as a byte blob,
+      (as builtin stringops may alias with anything).  */
+   exp = fold_build2 (MEM_REF,
+ 		     build_array_type (char_type_node,
+ 				       build_range_type (sizetype,
+ 							 size_one_node, len)),
+ 		     exp, build_int_cst (ptr_type_node, 0));
+ 
+   /* If the MEM_REF has no acceptable address, try to get the base object
+      from the original address we got, and build an all-aliasing
+      unknown-sized access to that one.  */
+   if (is_gimple_mem_ref_addr (TREE_OPERAND (exp, 0)))
+     set_mem_attributes (mem, exp, 0);
+   else if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
+ 	   && (exp = get_base_address (TREE_OPERAND (TREE_OPERAND (exp, 0),
+ 						     0))))
+     {
+       exp = build_fold_addr_expr (exp);
+       exp = fold_build2 (MEM_REF,
+ 			 build_array_type (char_type_node,
+ 					   build_range_type (sizetype,
+ 							     size_zero_node,
+ 							     NULL)),
+ 			 exp, build_int_cst (ptr_type_node, 0));
+       set_mem_attributes (mem, exp, 0);
+     }
+   set_mem_alias_set (mem, 0);
+   return mem;
+ }
+ 
+ /* Built-in functions to perform an untyped call and return.  */
+ 
+ #define apply_args_mode \
+   (this_target_builtins->x_apply_args_mode)
+ #define apply_result_mode \
+   (this_target_builtins->x_apply_result_mode)
+ 
+ /* Return the size required for the block returned by __builtin_apply_args,
+    and initialize apply_args_mode.  */
+ 
+ static int
+ apply_args_size (void)
+ {
+   static int size = -1;
+   int align;
+   unsigned int regno;
+ 
+   /* The values computed by this function never change.  */
+   if (size < 0)
+     {
+       /* The first value is the incoming arg-pointer.  */
+       size = GET_MODE_SIZE (Pmode);
+ 
+       /* The second value is the structure value address unless this is
+ 	 passed as an "invisible" first argument.  */
+       if (targetm.calls.struct_value_rtx (cfun ? TREE_TYPE (cfun->decl) : 0, 0))
+ 	size += GET_MODE_SIZE (Pmode);
+ 
+       for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+ 	if (FUNCTION_ARG_REGNO_P (regno))
+ 	  {
+ 	    fixed_size_mode mode = targetm.calls.get_raw_arg_mode (regno);
+ 
+ 	    gcc_assert (mode != VOIDmode);
+ 
+ 	    align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
+ 	    if (size % align != 0)
+ 	      size = CEIL (size, align) * align;
+ 	    size += GET_MODE_SIZE (mode);
+ 	    apply_args_mode[regno] = mode;
+ 	  }
+ 	else
+ 	  {
+ 	    apply_args_mode[regno] = as_a <fixed_size_mode> (VOIDmode);
+ 	  }
+     }
+   return size;
+ }
+ 
+ /* Return the size required for the block returned by __builtin_apply,
+    and initialize apply_result_mode.  */
+ 
+ static int
+ apply_result_size (void)
+ {
+   static int size = -1;
+   int align, regno;
+ 
+   /* The values computed by this function never change.  */
+   if (size < 0)
+     {
+       size = 0;
+ 
+       for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+ 	if (targetm.calls.function_value_regno_p (regno))
+ 	  {
+ 	    fixed_size_mode mode = targetm.calls.get_raw_result_mode (regno);
+ 
+ 	    gcc_assert (mode != VOIDmode);
+ 
+ 	    align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
+ 	    if (size % align != 0)
+ 	      size = CEIL (size, align) * align;
+ 	    size += GET_MODE_SIZE (mode);
+ 	    apply_result_mode[regno] = mode;
+ 	  }
+ 	else
+ 	  apply_result_mode[regno] = as_a <fixed_size_mode> (VOIDmode);
+ 
+       /* Allow targets that use untyped_call and untyped_return to override
+ 	 the size so that machine-specific information can be stored here.  */
+ #ifdef APPLY_RESULT_SIZE
+       size = APPLY_RESULT_SIZE;
+ #endif
+     }
+   return size;
+ }
+ 
+ /* Create a vector describing the result block RESULT.  If SAVEP is true,
+    the result block is used to save the values; otherwise it is used to
+    restore the values.  */
+ 
+ static rtx
+ result_vector (int savep, rtx result)
+ {
+   int regno, size, align, nelts;
+   fixed_size_mode mode;
+   rtx reg, mem;
+   rtx *savevec = XALLOCAVEC (rtx, FIRST_PSEUDO_REGISTER);
+ 
+   size = nelts = 0;
+   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+     if ((mode = apply_result_mode[regno]) != VOIDmode)
+       {
+ 	align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
+ 	if (size % align != 0)
+ 	  size = CEIL (size, align) * align;
+ 	reg = gen_rtx_REG (mode, savep ? regno : INCOMING_REGNO (regno));
+ 	mem = adjust_address (result, mode, size);
+ 	savevec[nelts++] = (savep
+ 			    ? gen_rtx_SET (mem, reg)
+ 			    : gen_rtx_SET (reg, mem));
+ 	size += GET_MODE_SIZE (mode);
+       }
+   return gen_rtx_PARALLEL (VOIDmode, gen_rtvec_v (nelts, savevec));
+ }
+ 
+ /* Save the state required to perform an untyped call with the same
+    arguments as were passed to the current function.  */
+ 
+ static rtx
+ expand_builtin_apply_args_1 (void)
+ {
+   rtx registers, tem;
+   int size, align, regno;
+   fixed_size_mode mode;
+   rtx struct_incoming_value = targetm.calls.struct_value_rtx (cfun ? TREE_TYPE (cfun->decl) : 0, 1);
+ 
+   /* Create a block where the arg-pointer, structure value address,
+      and argument registers can be saved.  */
+   registers = assign_stack_local (BLKmode, apply_args_size (), -1);
+ 
+   /* Walk past the arg-pointer and structure value address.  */
+   size = GET_MODE_SIZE (Pmode);
+   if (targetm.calls.struct_value_rtx (cfun ? TREE_TYPE (cfun->decl) : 0, 0))
+     size += GET_MODE_SIZE (Pmode);
+ 
+   /* Save each register used in calling a function to the block.  */
+   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+     if ((mode = apply_args_mode[regno]) != VOIDmode)
+       {
+ 	align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
+ 	if (size % align != 0)
+ 	  size = CEIL (size, align) * align;
+ 
+ 	tem = gen_rtx_REG (mode, INCOMING_REGNO (regno));
+ 
+ 	emit_move_insn (adjust_address (registers, mode, size), tem);
+ 	size += GET_MODE_SIZE (mode);
+       }
+ 
+   /* Save the arg pointer to the block.  */
+   tem = copy_to_reg (crtl->args.internal_arg_pointer);
+   /* We need the pointer as the caller actually passed them to us, not
+      as we might have pretended they were passed.  Make sure it's a valid
+      operand, as emit_move_insn isn't expected to handle a PLUS.  */
+   if (STACK_GROWS_DOWNWARD)
+     tem
+       = force_operand (plus_constant (Pmode, tem,
+ 				      crtl->args.pretend_args_size),
+ 		       NULL_RTX);
+   emit_move_insn (adjust_address (registers, Pmode, 0), tem);
+ 
+   size = GET_MODE_SIZE (Pmode);
+ 
+   /* Save the structure value address unless this is passed as an
+      "invisible" first argument.  */
+   if (struct_incoming_value)
+     emit_move_insn (adjust_address (registers, Pmode, size),
+ 		    copy_to_reg (struct_incoming_value));
+ 
+   /* Return the address of the block.  */
+   return copy_addr_to_reg (XEXP (registers, 0));
+ }
+ 
+ /* __builtin_apply_args returns block of memory allocated on
+    the stack into which is stored the arg pointer, structure
+    value address, static chain, and all the registers that might
+    possibly be used in performing a function call.  The code is
+    moved to the start of the function so the incoming values are
+    saved.  */
+ 
+ static rtx
+ expand_builtin_apply_args (void)
+ {
+   /* Don't do __builtin_apply_args more than once in a function.
+      Save the result of the first call and reuse it.  */
+   if (apply_args_value != 0)
+     return apply_args_value;
+   {
+     /* When this function is called, it means that registers must be
+        saved on entry to this function.  So we migrate the
+        call to the first insn of this function.  */
+     rtx temp;
+ 
+     start_sequence ();
+     temp = expand_builtin_apply_args_1 ();
+     rtx_insn *seq = get_insns ();
+     end_sequence ();
+ 
+     apply_args_value = temp;
+ 
+     /* Put the insns after the NOTE that starts the function.
+        If this is inside a start_sequence, make the outer-level insn
+        chain current, so the code is placed at the start of the
+        function.  If internal_arg_pointer is a non-virtual pseudo,
+        it needs to be placed after the function that initializes
+        that pseudo.  */
+     push_topmost_sequence ();
+     if (REG_P (crtl->args.internal_arg_pointer)
+ 	&& REGNO (crtl->args.internal_arg_pointer) > LAST_VIRTUAL_REGISTER)
+       emit_insn_before (seq, parm_birth_insn);
+     else
+       emit_insn_before (seq, NEXT_INSN (entry_of_function ()));
+     pop_topmost_sequence ();
+     return temp;
+   }
+ }
+ 
+ /* Perform an untyped call and save the state required to perform an
+    untyped return of whatever value was returned by the given function.  */
+ 
+ static rtx
+ expand_builtin_apply (rtx function, rtx arguments, rtx argsize)
+ {
+   int size, align, regno;
+   fixed_size_mode mode;
+   rtx incoming_args, result, reg, dest, src;
+   rtx_call_insn *call_insn;
+   rtx old_stack_level = 0;
+   rtx call_fusage = 0;
+   rtx struct_value = targetm.calls.struct_value_rtx (cfun ? TREE_TYPE (cfun->decl) : 0, 0);
+ 
+   arguments = convert_memory_address (Pmode, arguments);
+ 
+   /* Create a block where the return registers can be saved.  */
+   result = assign_stack_local (BLKmode, apply_result_size (), -1);
+ 
+   /* Fetch the arg pointer from the ARGUMENTS block.  */
+   incoming_args = gen_reg_rtx (Pmode);
+   emit_move_insn (incoming_args, gen_rtx_MEM (Pmode, arguments));
+   if (!STACK_GROWS_DOWNWARD)
+     incoming_args = expand_simple_binop (Pmode, MINUS, incoming_args, argsize,
+ 					 incoming_args, 0, OPTAB_LIB_WIDEN);
+ 
+   /* Push a new argument block and copy the arguments.  Do not allow
+      the (potential) memcpy call below to interfere with our stack
+      manipulations.  */
+   do_pending_stack_adjust ();
+   NO_DEFER_POP;
+ 
+   /* Save the stack with nonlocal if available.  */
+   if (targetm.have_save_stack_nonlocal ())
+     emit_stack_save (SAVE_NONLOCAL, &old_stack_level);
+   else
+     emit_stack_save (SAVE_BLOCK, &old_stack_level);
+ 
+   /* Allocate a block of memory onto the stack and copy the memory
+      arguments to the outgoing arguments address.  We can pass TRUE
+      as the 4th argument because we just saved the stack pointer
+      and will restore it right after the call.  */
+   allocate_dynamic_stack_space (argsize, 0, BIGGEST_ALIGNMENT, -1, true);
+ 
+   /* Set DRAP flag to true, even though allocate_dynamic_stack_space
+      may have already set current_function_calls_alloca to true.
+      current_function_calls_alloca won't be set if argsize is zero,
+      so we have to guarantee need_drap is true here.  */
+   if (SUPPORTS_STACK_ALIGNMENT)
+     crtl->need_drap = true;
+ 
+   dest = virtual_outgoing_args_rtx;
+   if (!STACK_GROWS_DOWNWARD)
+     {
+       if (CONST_INT_P (argsize))
+ 	dest = plus_constant (Pmode, dest, -INTVAL (argsize));
+       else
+ 	dest = gen_rtx_PLUS (Pmode, dest, negate_rtx (Pmode, argsize));
+     }
+   dest = gen_rtx_MEM (BLKmode, dest);
+   set_mem_align (dest, PARM_BOUNDARY);
+   src = gen_rtx_MEM (BLKmode, incoming_args);
+   set_mem_align (src, PARM_BOUNDARY);
+   emit_block_move (dest, src, argsize, BLOCK_OP_NORMAL);
+ 
+   /* Refer to the argument block.  */
+   apply_args_size ();
+   arguments = gen_rtx_MEM (BLKmode, arguments);
+   set_mem_align (arguments, PARM_BOUNDARY);
+ 
+   /* Walk past the arg-pointer and structure value address.  */
+   size = GET_MODE_SIZE (Pmode);
+   if (struct_value)
+     size += GET_MODE_SIZE (Pmode);
+ 
+   /* Restore each of the registers previously saved.  Make USE insns
+      for each of these registers for use in making the call.  */
+   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+     if ((mode = apply_args_mode[regno]) != VOIDmode)
+       {
+ 	align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
+ 	if (size % align != 0)
+ 	  size = CEIL (size, align) * align;
+ 	reg = gen_rtx_REG (mode, regno);
+ 	emit_move_insn (reg, adjust_address (arguments, mode, size));
+ 	use_reg (&call_fusage, reg);
+ 	size += GET_MODE_SIZE (mode);
+       }
+ 
+   /* Restore the structure value address unless this is passed as an
+      "invisible" first argument.  */
+   size = GET_MODE_SIZE (Pmode);
+   if (struct_value)
+     {
+       rtx value = gen_reg_rtx (Pmode);
+       emit_move_insn (value, adjust_address (arguments, Pmode, size));
+       emit_move_insn (struct_value, value);
+       if (REG_P (struct_value))
+ 	use_reg (&call_fusage, struct_value);
+     }
+ 
+   /* All arguments and registers used for the call are set up by now!  */
+   function = prepare_call_address (NULL, function, NULL, &call_fusage, 0, 0);
+ 
+   /* Ensure address is valid.  SYMBOL_REF is already valid, so no need,
+      and we don't want to load it into a register as an optimization,
+      because prepare_call_address already did it if it should be done.  */
+   if (GET_CODE (function) != SYMBOL_REF)
+     function = memory_address (FUNCTION_MODE, function);
+ 
+   /* Generate the actual call instruction and save the return value.  */
+   if (targetm.have_untyped_call ())
+     {
+       rtx mem = gen_rtx_MEM (FUNCTION_MODE, function);
+       rtx_insn *seq = targetm.gen_untyped_call (mem, result,
+ 						result_vector (1, result));
+       for (rtx_insn *insn = seq; insn; insn = NEXT_INSN (insn))
+ 	if (CALL_P (insn))
+ 	  add_reg_note (insn, REG_UNTYPED_CALL, NULL_RTX);
+       emit_insn (seq);
+     }
+   else if (targetm.have_call_value ())
+     {
+       rtx valreg = 0;
+ 
+       /* Locate the unique return register.  It is not possible to
+ 	 express a call that sets more than one return register using
+ 	 call_value; use untyped_call for that.  In fact, untyped_call
+ 	 only needs to save the return registers in the given block.  */
+       for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+ 	if ((mode = apply_result_mode[regno]) != VOIDmode)
+ 	  {
+ 	    gcc_assert (!valreg); /* have_untyped_call required.  */
+ 
+ 	    valreg = gen_rtx_REG (mode, regno);
+ 	  }
+ 
+       emit_insn (targetm.gen_call_value (valreg,
+ 					 gen_rtx_MEM (FUNCTION_MODE, function),
+ 					 const0_rtx, NULL_RTX, const0_rtx));
+ 
+       emit_move_insn (adjust_address (result, GET_MODE (valreg), 0), valreg);
+     }
+   else
+     gcc_unreachable ();
+ 
+   /* Find the CALL insn we just emitted, and attach the register usage
+      information.  */
+   call_insn = last_call_insn ();
+   add_function_usage_to (call_insn, call_fusage);
+ 
+   /* Restore the stack.  */
+   if (targetm.have_save_stack_nonlocal ())
+     emit_stack_restore (SAVE_NONLOCAL, old_stack_level);
+   else
+     emit_stack_restore (SAVE_BLOCK, old_stack_level);
+   fixup_args_size_notes (call_insn, get_last_insn (), 0);
+ 
+   OK_DEFER_POP;
+ 
+   /* Return the address of the result block.  */
+   result = copy_addr_to_reg (XEXP (result, 0));
+   return convert_memory_address (ptr_mode, result);
+ }
+ 
+ /* Perform an untyped return.  */
+ 
+ static void
+ expand_builtin_return (rtx result)
+ {
+   int size, align, regno;
+   fixed_size_mode mode;
+   rtx reg;
+   rtx_insn *call_fusage = 0;
+ 
+   result = convert_memory_address (Pmode, result);
+ 
+   apply_result_size ();
+   result = gen_rtx_MEM (BLKmode, result);
+ 
+   if (targetm.have_untyped_return ())
+     {
+       rtx vector = result_vector (0, result);
+       emit_jump_insn (targetm.gen_untyped_return (result, vector));
+       emit_barrier ();
+       return;
+     }
+ 
+   /* Restore the return value and note that each value is used.  */
+   size = 0;
+   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+     if ((mode = apply_result_mode[regno]) != VOIDmode)
+       {
+ 	align = GET_MODE_ALIGNMENT (mode) / BITS_PER_UNIT;
+ 	if (size % align != 0)
+ 	  size = CEIL (size, align) * align;
+ 	reg = gen_rtx_REG (mode, INCOMING_REGNO (regno));
+ 	emit_move_insn (reg, adjust_address (result, mode, size));
+ 
+ 	push_to_sequence (call_fusage);
+ 	emit_use (reg);
+ 	call_fusage = get_insns ();
+ 	end_sequence ();
+ 	size += GET_MODE_SIZE (mode);
+       }
+ 
+   /* Put the USE insns before the return.  */
+   emit_insn (call_fusage);
+ 
+   /* Return whatever values was restored by jumping directly to the end
+      of the function.  */
+   expand_naked_return ();
+ }
+ 
+ /* Used by expand_builtin_classify_type and fold_builtin_classify_type.  */
+ 
+ static enum type_class
+ type_to_class (tree type)
+ {
+   switch (TREE_CODE (type))
+     {
+     case VOID_TYPE:	   return void_type_class;
+     case INTEGER_TYPE:	   return integer_type_class;
+     case ENUMERAL_TYPE:	   return enumeral_type_class;
+     case BOOLEAN_TYPE:	   return boolean_type_class;
+     case POINTER_TYPE:	   return pointer_type_class;
+     case REFERENCE_TYPE:   return reference_type_class;
+     case OFFSET_TYPE:	   return offset_type_class;
+     case REAL_TYPE:	   return real_type_class;
+     case COMPLEX_TYPE:	   return complex_type_class;
+     case FUNCTION_TYPE:	   return function_type_class;
+     case METHOD_TYPE:	   return method_type_class;
+     case RECORD_TYPE:	   return record_type_class;
+     case UNION_TYPE:
+     case QUAL_UNION_TYPE:  return union_type_class;
+     case ARRAY_TYPE:	   return (TYPE_STRING_FLAG (type)
+ 				   ? string_type_class : array_type_class);
+     case LANG_TYPE:	   return lang_type_class;
+     case OPAQUE_TYPE:      return opaque_type_class;
+     default:		   return no_type_class;
+     }
+ }
+ 
+ /* Expand a call EXP to __builtin_classify_type.  */
+ 
+ static rtx
+ expand_builtin_classify_type (tree exp)
+ {
+   if (call_expr_nargs (exp))
+     return GEN_INT (type_to_class (TREE_TYPE (CALL_EXPR_ARG (exp, 0))));
+   return GEN_INT (no_type_class);
+ }
+ 
+ /* This helper macro, meant to be used in mathfn_built_in below, determines
+    which among a set of builtin math functions is appropriate for a given type
+    mode.  The `F' (float) and `L' (long double) are automatically generated
+    from the 'double' case.  If a function supports the _Float<N> and _Float<N>X
+    types, there are additional types that are considered with 'F32', 'F64',
+    'F128', etc. suffixes.  */
+ #define CASE_MATHFN(MATHFN) \
+   CASE_CFN_##MATHFN: \
+   fcode = BUILT_IN_##MATHFN; fcodef = BUILT_IN_##MATHFN##F ; \
+   fcodel = BUILT_IN_##MATHFN##L ; break;
+ /* Similar to the above, but also add support for the _Float<N> and _Float<N>X
+    types.  */
+ #define CASE_MATHFN_FLOATN(MATHFN) \
+   CASE_CFN_##MATHFN: \
+   fcode = BUILT_IN_##MATHFN; fcodef = BUILT_IN_##MATHFN##F ; \
+   fcodel = BUILT_IN_##MATHFN##L ; fcodef16 = BUILT_IN_##MATHFN##F16 ; \
+   fcodef32 = BUILT_IN_##MATHFN##F32; fcodef64 = BUILT_IN_##MATHFN##F64 ; \
+   fcodef128 = BUILT_IN_##MATHFN##F128 ; fcodef32x = BUILT_IN_##MATHFN##F32X ; \
+   fcodef64x = BUILT_IN_##MATHFN##F64X ; fcodef128x = BUILT_IN_##MATHFN##F128X ;\
+   break;
+ /* Similar to above, but appends _R after any F/L suffix.  */
+ #define CASE_MATHFN_REENT(MATHFN) \
+   case CFN_BUILT_IN_##MATHFN##_R: \
+   case CFN_BUILT_IN_##MATHFN##F_R: \
+   case CFN_BUILT_IN_##MATHFN##L_R: \
+   fcode = BUILT_IN_##MATHFN##_R; fcodef = BUILT_IN_##MATHFN##F_R ; \
+   fcodel = BUILT_IN_##MATHFN##L_R ; break;
+ 
+ /* Return a function equivalent to FN but operating on floating-point
+    values of type TYPE, or END_BUILTINS if no such function exists.
+    This is purely an operation on function codes; it does not guarantee
+    that the target actually has an implementation of the function.  */
+ 
+ static built_in_function
+ mathfn_built_in_2 (tree type, combined_fn fn)
+ {
+   tree mtype;
+   built_in_function fcode, fcodef, fcodel;
+   built_in_function fcodef16 = END_BUILTINS;
+   built_in_function fcodef32 = END_BUILTINS;
+   built_in_function fcodef64 = END_BUILTINS;
+   built_in_function fcodef128 = END_BUILTINS;
+   built_in_function fcodef32x = END_BUILTINS;
+   built_in_function fcodef64x = END_BUILTINS;
+   built_in_function fcodef128x = END_BUILTINS;
+ 
+   switch (fn)
+     {
+ #define SEQ_OF_CASE_MATHFN			\
+     CASE_MATHFN (ACOS)				\
+     CASE_MATHFN (ACOSH)				\
+     CASE_MATHFN (ASIN)				\
+     CASE_MATHFN (ASINH)				\
+     CASE_MATHFN (ATAN)				\
+     CASE_MATHFN (ATAN2)				\
+     CASE_MATHFN (ATANH)				\
+     CASE_MATHFN (CBRT)				\
+     CASE_MATHFN_FLOATN (CEIL)			\
+     CASE_MATHFN (CEXPI)				\
+     CASE_MATHFN_FLOATN (COPYSIGN)		\
+     CASE_MATHFN (COS)				\
+     CASE_MATHFN (COSH)				\
+     CASE_MATHFN (DREM)				\
+     CASE_MATHFN (ERF)				\
+     CASE_MATHFN (ERFC)				\
+     CASE_MATHFN (EXP)				\
+     CASE_MATHFN (EXP10)				\
+     CASE_MATHFN (EXP2)				\
+     CASE_MATHFN (EXPM1)				\
+     CASE_MATHFN (FABS)				\
+     CASE_MATHFN (FDIM)				\
+     CASE_MATHFN_FLOATN (FLOOR)			\
+     CASE_MATHFN_FLOATN (FMA)			\
+     CASE_MATHFN_FLOATN (FMAX)			\
+     CASE_MATHFN_FLOATN (FMIN)			\
+     CASE_MATHFN (FMOD)				\
+     CASE_MATHFN (FREXP)				\
+     CASE_MATHFN (GAMMA)				\
+     CASE_MATHFN_REENT (GAMMA) /* GAMMA_R */	\
+     CASE_MATHFN (HUGE_VAL)			\
+     CASE_MATHFN (HYPOT)				\
+     CASE_MATHFN (ILOGB)				\
+     CASE_MATHFN (ICEIL)				\
+     CASE_MATHFN (IFLOOR)			\
+     CASE_MATHFN (INF)				\
+     CASE_MATHFN (IRINT)				\
+     CASE_MATHFN (IROUND)			\
+     CASE_MATHFN (ISINF)				\
+     CASE_MATHFN (J0)				\
+     CASE_MATHFN (J1)				\
+     CASE_MATHFN (JN)				\
+     CASE_MATHFN (LCEIL)				\
+     CASE_MATHFN (LDEXP)				\
+     CASE_MATHFN (LFLOOR)			\
+     CASE_MATHFN (LGAMMA)			\
+     CASE_MATHFN_REENT (LGAMMA) /* LGAMMA_R */	\
+     CASE_MATHFN (LLCEIL)			\
+     CASE_MATHFN (LLFLOOR)			\
+     CASE_MATHFN (LLRINT)			\
+     CASE_MATHFN (LLROUND)			\
+     CASE_MATHFN (LOG)				\
+     CASE_MATHFN (LOG10)				\
+     CASE_MATHFN (LOG1P)				\
+     CASE_MATHFN (LOG2)				\
+     CASE_MATHFN (LOGB)				\
+     CASE_MATHFN (LRINT)				\
+     CASE_MATHFN (LROUND)			\
+     CASE_MATHFN (MODF)				\
+     CASE_MATHFN (NAN)				\
+     CASE_MATHFN (NANS)				\
+     CASE_MATHFN_FLOATN (NEARBYINT)		\
+     CASE_MATHFN (NEXTAFTER)			\
+     CASE_MATHFN (NEXTTOWARD)			\
+     CASE_MATHFN (POW)				\
+     CASE_MATHFN (POWI)				\
+     CASE_MATHFN (POW10)				\
+     CASE_MATHFN (REMAINDER)			\
+     CASE_MATHFN (REMQUO)			\
+     CASE_MATHFN_FLOATN (RINT)			\
+     CASE_MATHFN_FLOATN (ROUND)			\
+     CASE_MATHFN_FLOATN (ROUNDEVEN)		\
+     CASE_MATHFN (SCALB)				\
+     CASE_MATHFN (SCALBLN)			\
+     CASE_MATHFN (SCALBN)			\
+     CASE_MATHFN (SIGNBIT)			\
+     CASE_MATHFN (SIGNIFICAND)			\
+     CASE_MATHFN (SIN)				\
+     CASE_MATHFN (SINCOS)			\
+     CASE_MATHFN (SINH)				\
+     CASE_MATHFN_FLOATN (SQRT)			\
+     CASE_MATHFN (TAN)				\
+     CASE_MATHFN (TANH)				\
+     CASE_MATHFN (TGAMMA)			\
+     CASE_MATHFN_FLOATN (TRUNC)			\
+     CASE_MATHFN (Y0)				\
+     CASE_MATHFN (Y1)				\
+     CASE_MATHFN (YN)
+ 
+     SEQ_OF_CASE_MATHFN
+ 
+     default:
+       return END_BUILTINS;
+     }
+ 
+   mtype = TYPE_MAIN_VARIANT (type);
+   if (mtype == double_type_node)
+     return fcode;
+   else if (mtype == float_type_node)
+     return fcodef;
+   else if (mtype == long_double_type_node)
+     return fcodel;
+   else if (mtype == float16_type_node)
+     return fcodef16;
+   else if (mtype == float32_type_node)
+     return fcodef32;
+   else if (mtype == float64_type_node)
+     return fcodef64;
+   else if (mtype == float128_type_node)
+     return fcodef128;
+   else if (mtype == float32x_type_node)
+     return fcodef32x;
+   else if (mtype == float64x_type_node)
+     return fcodef64x;
+   else if (mtype == float128x_type_node)
+     return fcodef128x;
+   else
+     return END_BUILTINS;
+ }
+ 
+ #undef CASE_MATHFN
+ #undef CASE_MATHFN_FLOATN
+ #undef CASE_MATHFN_REENT
+ 
+ /* Return mathematic function equivalent to FN but operating directly on TYPE,
+    if available.  If IMPLICIT_P is true use the implicit builtin declaration,
+    otherwise use the explicit declaration.  If we can't do the conversion,
+    return null.  */
+ 
+ static tree
+ mathfn_built_in_1 (tree type, combined_fn fn, bool implicit_p)
+ {
+   built_in_function fcode2 = mathfn_built_in_2 (type, fn);
+   if (fcode2 == END_BUILTINS)
+     return NULL_TREE;
+ 
+   if (implicit_p && !builtin_decl_implicit_p (fcode2))
+     return NULL_TREE;
+ 
+   return builtin_decl_explicit (fcode2);
+ }
+ 
+ /* Like mathfn_built_in_1, but always use the implicit array.  */
+ 
+ tree
+ mathfn_built_in (tree type, combined_fn fn)
+ {
+   return mathfn_built_in_1 (type, fn, /*implicit=*/ 1);
+ }
+ 
+ /* Like mathfn_built_in_1, but take a built_in_function and
+    always use the implicit array.  */
+ 
+ tree
+ mathfn_built_in (tree type, enum built_in_function fn)
+ {
+   return mathfn_built_in_1 (type, as_combined_fn (fn), /*implicit=*/ 1);
+ }
+ 
+ /* Return the type associated with a built in function, i.e., the one
+    to be passed to mathfn_built_in to get the type-specific
+    function.  */
+ 
+ tree
+ mathfn_built_in_type (combined_fn fn)
+ {
+ #define CASE_MATHFN(MATHFN)			\
+   case CFN_BUILT_IN_##MATHFN:			\
+     return double_type_node;			\
+   case CFN_BUILT_IN_##MATHFN##F:		\
+     return float_type_node;			\
+   case CFN_BUILT_IN_##MATHFN##L:		\
+     return long_double_type_node;
+ 
+ #define CASE_MATHFN_FLOATN(MATHFN)		\
+   CASE_MATHFN(MATHFN)				\
+   case CFN_BUILT_IN_##MATHFN##F16:		\
+     return float16_type_node;			\
+   case CFN_BUILT_IN_##MATHFN##F32:		\
+     return float32_type_node;			\
+   case CFN_BUILT_IN_##MATHFN##F64:		\
+     return float64_type_node;			\
+   case CFN_BUILT_IN_##MATHFN##F128:		\
+     return float128_type_node;			\
+   case CFN_BUILT_IN_##MATHFN##F32X:		\
+     return float32x_type_node;			\
+   case CFN_BUILT_IN_##MATHFN##F64X:		\
+     return float64x_type_node;			\
+   case CFN_BUILT_IN_##MATHFN##F128X:		\
+     return float128x_type_node;
+ 
+ /* Similar to above, but appends _R after any F/L suffix.  */
+ #define CASE_MATHFN_REENT(MATHFN) \
+   case CFN_BUILT_IN_##MATHFN##_R:		\
+     return double_type_node;			\
+   case CFN_BUILT_IN_##MATHFN##F_R:		\
+     return float_type_node;			\
+   case CFN_BUILT_IN_##MATHFN##L_R:		\
+     return long_double_type_node;
+ 
+   switch (fn)
+     {
+     SEQ_OF_CASE_MATHFN
+ 
+     default:
+       return NULL_TREE;
+     }
+ 
+ #undef CASE_MATHFN
+ #undef CASE_MATHFN_FLOATN
+ #undef CASE_MATHFN_REENT
+ #undef SEQ_OF_CASE_MATHFN
+ }
+ 
+ /* Check whether there is an internal function associated with function FN
+    and return type RETURN_TYPE.  Return the function if so, otherwise return
+    IFN_LAST.
+ 
+    Note that this function only tests whether the function is defined in
+    internals.def, not whether it is actually available on the target.  */
+ 
+ static internal_fn
+ associated_internal_fn (built_in_function fn, tree return_type)
+ {
+   switch (fn)
+     {
+ #define DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) \
+     CASE_FLT_FN (BUILT_IN_##NAME): return IFN_##NAME;
+ #define DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) \
+     CASE_FLT_FN (BUILT_IN_##NAME): return IFN_##NAME; \
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_##NAME): return IFN_##NAME;
+ #define DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) \
+     CASE_INT_FN (BUILT_IN_##NAME): return IFN_##NAME;
+ #include "internal-fn.def"
+ 
+     CASE_FLT_FN (BUILT_IN_POW10):
+       return IFN_EXP10;
+ 
+     CASE_FLT_FN (BUILT_IN_DREM):
+       return IFN_REMAINDER;
+ 
+     CASE_FLT_FN (BUILT_IN_SCALBN):
+     CASE_FLT_FN (BUILT_IN_SCALBLN):
+       if (REAL_MODE_FORMAT (TYPE_MODE (return_type))->b == 2)
+ 	return IFN_LDEXP;
+       return IFN_LAST;
+ 
+     default:
+       return IFN_LAST;
+     }
+ }
+ 
+ /* If BUILT_IN_NORMAL function FNDECL has an associated internal function,
+    return its code, otherwise return IFN_LAST.  Note that this function
+    only tests whether the function is defined in internals.def, not whether
+    it is actually available on the target.  */
+ 
+ internal_fn
+ associated_internal_fn (tree fndecl)
+ {
+   gcc_checking_assert (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL);
+   return associated_internal_fn (DECL_FUNCTION_CODE (fndecl),
+ 				 TREE_TYPE (TREE_TYPE (fndecl)));
+ }
+ 
+ /* Check whether there is an internal function associated with function CFN
+    and return type RETURN_TYPE.  Return the function if so, otherwise return
+    IFN_LAST.
+ 
+    Note that this function only tests whether the function is defined in
+    internals.def, not whether it is actually available on the target.  */
+ 
+ internal_fn
+ associated_internal_fn (combined_fn cfn, tree return_type)
+ {
+   if (internal_fn_p (cfn))
+     return as_internal_fn (cfn);
+   return associated_internal_fn (as_builtin_fn (cfn), return_type);
+ }
+ 
+ /* If CALL is a call to a BUILT_IN_NORMAL function that could be replaced
+    on the current target by a call to an internal function, return the
+    code of that internal function, otherwise return IFN_LAST.  The caller
+    is responsible for ensuring that any side-effects of the built-in
+    call are dealt with correctly.  E.g. if CALL sets errno, the caller
+    must decide that the errno result isn't needed or make it available
+    in some other way.  */
+ 
+ internal_fn
+ replacement_internal_fn (gcall *call)
+ {
+   if (gimple_call_builtin_p (call, BUILT_IN_NORMAL))
+     {
+       internal_fn ifn = associated_internal_fn (gimple_call_fndecl (call));
+       if (ifn != IFN_LAST)
+ 	{
+ 	  tree_pair types = direct_internal_fn_types (ifn, call);
+ 	  optimization_type opt_type = bb_optimization_type (gimple_bb (call));
+ 	  if (direct_internal_fn_supported_p (ifn, types, opt_type))
+ 	    return ifn;
+ 	}
+     }
+   return IFN_LAST;
+ }
+ 
+ /* Expand a call to the builtin trinary math functions (fma).
+    Return NULL_RTX if a normal call should be emitted rather than expanding the
+    function in-line.  EXP is the expression that is a call to the builtin
+    function; if convenient, the result should be placed in TARGET.
+    SUBTARGET may be used as the target for computing one of EXP's
+    operands.  */
+ 
+ static rtx
+ expand_builtin_mathfn_ternary (tree exp, rtx target, rtx subtarget)
+ {
+   optab builtin_optab;
+   rtx op0, op1, op2, result;
+   rtx_insn *insns;
+   tree fndecl = get_callee_fndecl (exp);
+   tree arg0, arg1, arg2;
+   machine_mode mode;
+ 
+   if (!validate_arglist (exp, REAL_TYPE, REAL_TYPE, REAL_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   arg0 = CALL_EXPR_ARG (exp, 0);
+   arg1 = CALL_EXPR_ARG (exp, 1);
+   arg2 = CALL_EXPR_ARG (exp, 2);
+ 
+   switch (DECL_FUNCTION_CODE (fndecl))
+     {
+     CASE_FLT_FN (BUILT_IN_FMA):
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_FMA):
+       builtin_optab = fma_optab; break;
+     default:
+       gcc_unreachable ();
+     }
+ 
+   /* Make a suitable register to place result in.  */
+   mode = TYPE_MODE (TREE_TYPE (exp));
+ 
+   /* Before working hard, check whether the instruction is available.  */
+   if (optab_handler (builtin_optab, mode) == CODE_FOR_nothing)
+     return NULL_RTX;
+ 
+   result = gen_reg_rtx (mode);
+ 
+   /* Always stabilize the argument list.  */
+   CALL_EXPR_ARG (exp, 0) = arg0 = builtin_save_expr (arg0);
+   CALL_EXPR_ARG (exp, 1) = arg1 = builtin_save_expr (arg1);
+   CALL_EXPR_ARG (exp, 2) = arg2 = builtin_save_expr (arg2);
+ 
+   op0 = expand_expr (arg0, subtarget, VOIDmode, EXPAND_NORMAL);
+   op1 = expand_normal (arg1);
+   op2 = expand_normal (arg2);
+ 
+   start_sequence ();
+ 
+   /* Compute into RESULT.
+      Set RESULT to wherever the result comes back.  */
+   result = expand_ternary_op (mode, builtin_optab, op0, op1, op2,
+ 			      result, 0);
+ 
+   /* If we were unable to expand via the builtin, stop the sequence
+      (without outputting the insns) and call to the library function
+      with the stabilized argument list.  */
+   if (result == 0)
+     {
+       end_sequence ();
+       return expand_call (exp, target, target == const0_rtx);
+     }
+ 
+   /* Output the entire sequence.  */
+   insns = get_insns ();
+   end_sequence ();
+   emit_insn (insns);
+ 
+   return result;
+ }
+ 
+ /* Expand a call to the builtin sin and cos math functions.
+    Return NULL_RTX if a normal call should be emitted rather than expanding the
+    function in-line.  EXP is the expression that is a call to the builtin
+    function; if convenient, the result should be placed in TARGET.
+    SUBTARGET may be used as the target for computing one of EXP's
+    operands.  */
+ 
+ static rtx
+ expand_builtin_mathfn_3 (tree exp, rtx target, rtx subtarget)
+ {
+   optab builtin_optab;
+   rtx op0;
+   rtx_insn *insns;
+   tree fndecl = get_callee_fndecl (exp);
+   machine_mode mode;
+   tree arg;
+ 
+   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   arg = CALL_EXPR_ARG (exp, 0);
+ 
+   switch (DECL_FUNCTION_CODE (fndecl))
+     {
+     CASE_FLT_FN (BUILT_IN_SIN):
+     CASE_FLT_FN (BUILT_IN_COS):
+       builtin_optab = sincos_optab; break;
+     default:
+       gcc_unreachable ();
+     }
+ 
+   /* Make a suitable register to place result in.  */
+   mode = TYPE_MODE (TREE_TYPE (exp));
+ 
+   /* Check if sincos insn is available, otherwise fallback
+      to sin or cos insn.  */
+   if (optab_handler (builtin_optab, mode) == CODE_FOR_nothing)
+     switch (DECL_FUNCTION_CODE (fndecl))
+       {
+       CASE_FLT_FN (BUILT_IN_SIN):
+ 	builtin_optab = sin_optab; break;
+       CASE_FLT_FN (BUILT_IN_COS):
+ 	builtin_optab = cos_optab; break;
+       default:
+ 	gcc_unreachable ();
+       }
+ 
+   /* Before working hard, check whether the instruction is available.  */
+   if (optab_handler (builtin_optab, mode) != CODE_FOR_nothing)
+     {
+       rtx result = gen_reg_rtx (mode);
+ 
+       /* Wrap the computation of the argument in a SAVE_EXPR, as we may
+ 	 need to expand the argument again.  This way, we will not perform
+ 	 side-effects more the once.  */
+       CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
+ 
+       op0 = expand_expr (arg, subtarget, VOIDmode, EXPAND_NORMAL);
+ 
+       start_sequence ();
+ 
+       /* Compute into RESULT.
+ 	 Set RESULT to wherever the result comes back.  */
+       if (builtin_optab == sincos_optab)
+ 	{
+ 	  int ok;
+ 
+ 	  switch (DECL_FUNCTION_CODE (fndecl))
+ 	    {
+ 	    CASE_FLT_FN (BUILT_IN_SIN):
+ 	      ok = expand_twoval_unop (builtin_optab, op0, 0, result, 0);
+ 	      break;
+ 	    CASE_FLT_FN (BUILT_IN_COS):
+ 	      ok = expand_twoval_unop (builtin_optab, op0, result, 0, 0);
+ 	      break;
+ 	    default:
+ 	      gcc_unreachable ();
+ 	    }
+ 	  gcc_assert (ok);
+ 	}
+       else
+ 	result = expand_unop (mode, builtin_optab, op0, result, 0);
+ 
+       if (result != 0)
+ 	{
+ 	  /* Output the entire sequence.  */
+ 	  insns = get_insns ();
+ 	  end_sequence ();
+ 	  emit_insn (insns);
+ 	  return result;
+ 	}
+ 
+       /* If we were unable to expand via the builtin, stop the sequence
+ 	 (without outputting the insns) and call to the library function
+ 	 with the stabilized argument list.  */
+       end_sequence ();
+     }
+ 
+   return expand_call (exp, target, target == const0_rtx);
+ }
+ 
+ /* Given an interclass math builtin decl FNDECL and it's argument ARG
+    return an RTL instruction code that implements the functionality.
+    If that isn't possible or available return CODE_FOR_nothing.  */
+ 
+ static enum insn_code
+ interclass_mathfn_icode (tree arg, tree fndecl)
+ {
+   bool errno_set = false;
+   optab builtin_optab = unknown_optab;
+   machine_mode mode;
+ 
+   switch (DECL_FUNCTION_CODE (fndecl))
+     {
+     CASE_FLT_FN (BUILT_IN_ILOGB):
+       errno_set = true; builtin_optab = ilogb_optab; break;
+     CASE_FLT_FN (BUILT_IN_ISINF):
+       builtin_optab = isinf_optab; break;
+     case BUILT_IN_ISNORMAL:
+     case BUILT_IN_ISFINITE:
+     CASE_FLT_FN (BUILT_IN_FINITE):
+     case BUILT_IN_FINITED32:
+     case BUILT_IN_FINITED64:
+     case BUILT_IN_FINITED128:
+     case BUILT_IN_ISINFD32:
+     case BUILT_IN_ISINFD64:
+     case BUILT_IN_ISINFD128:
+       /* These builtins have no optabs (yet).  */
+       break;
+     default:
+       gcc_unreachable ();
+     }
+ 
+   /* There's no easy way to detect the case we need to set EDOM.  */
+   if (flag_errno_math && errno_set)
+     return CODE_FOR_nothing;
+ 
+   /* Optab mode depends on the mode of the input argument.  */
+   mode = TYPE_MODE (TREE_TYPE (arg));
+ 
+   if (builtin_optab)
+     return optab_handler (builtin_optab, mode);
+   return CODE_FOR_nothing;
+ }
+ 
+ /* Expand a call to one of the builtin math functions that operate on
+    floating point argument and output an integer result (ilogb, isinf,
+    isnan, etc).
+    Return 0 if a normal call should be emitted rather than expanding the
+    function in-line.  EXP is the expression that is a call to the builtin
+    function; if convenient, the result should be placed in TARGET.  */
+ 
+ static rtx
+ expand_builtin_interclass_mathfn (tree exp, rtx target)
+ {
+   enum insn_code icode = CODE_FOR_nothing;
+   rtx op0;
+   tree fndecl = get_callee_fndecl (exp);
+   machine_mode mode;
+   tree arg;
+ 
+   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   arg = CALL_EXPR_ARG (exp, 0);
+   icode = interclass_mathfn_icode (arg, fndecl);
+   mode = TYPE_MODE (TREE_TYPE (arg));
+ 
+   if (icode != CODE_FOR_nothing)
+     {
+       class expand_operand ops[1];
+       rtx_insn *last = get_last_insn ();
+       tree orig_arg = arg;
+ 
+       /* Wrap the computation of the argument in a SAVE_EXPR, as we may
+ 	 need to expand the argument again.  This way, we will not perform
+ 	 side-effects more the once.  */
+       CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
+ 
+       op0 = expand_expr (arg, NULL_RTX, VOIDmode, EXPAND_NORMAL);
+ 
+       if (mode != GET_MODE (op0))
+ 	op0 = convert_to_mode (mode, op0, 0);
+ 
+       create_output_operand (&ops[0], target, TYPE_MODE (TREE_TYPE (exp)));
+       if (maybe_legitimize_operands (icode, 0, 1, ops)
+ 	  && maybe_emit_unop_insn (icode, ops[0].value, op0, UNKNOWN))
+ 	return ops[0].value;
+ 
+       delete_insns_since (last);
+       CALL_EXPR_ARG (exp, 0) = orig_arg;
+     }
+ 
+   return NULL_RTX;
+ }
+ 
+ /* Expand a call to the builtin sincos math function.
+    Return NULL_RTX if a normal call should be emitted rather than expanding the
+    function in-line.  EXP is the expression that is a call to the builtin
+    function.  */
+ 
+ static rtx
+ expand_builtin_sincos (tree exp)
+ {
+   rtx op0, op1, op2, target1, target2;
+   machine_mode mode;
+   tree arg, sinp, cosp;
+   int result;
+   location_t loc = EXPR_LOCATION (exp);
+   tree alias_type, alias_off;
+ 
+   if (!validate_arglist (exp, REAL_TYPE,
+  			 POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   arg = CALL_EXPR_ARG (exp, 0);
+   sinp = CALL_EXPR_ARG (exp, 1);
+   cosp = CALL_EXPR_ARG (exp, 2);
+ 
+   /* Make a suitable register to place result in.  */
+   mode = TYPE_MODE (TREE_TYPE (arg));
+ 
+   /* Check if sincos insn is available, otherwise emit the call.  */
+   if (optab_handler (sincos_optab, mode) == CODE_FOR_nothing)
+     return NULL_RTX;
+ 
+   target1 = gen_reg_rtx (mode);
+   target2 = gen_reg_rtx (mode);
+ 
+   op0 = expand_normal (arg);
+   alias_type = build_pointer_type_for_mode (TREE_TYPE (arg), ptr_mode, true);
+   alias_off = build_int_cst (alias_type, 0);
+   op1 = expand_normal (fold_build2_loc (loc, MEM_REF, TREE_TYPE (arg),
+ 					sinp, alias_off));
+   op2 = expand_normal (fold_build2_loc (loc, MEM_REF, TREE_TYPE (arg),
+ 					cosp, alias_off));
+ 
+   /* Compute into target1 and target2.
+      Set TARGET to wherever the result comes back.  */
+   result = expand_twoval_unop (sincos_optab, op0, target2, target1, 0);
+   gcc_assert (result);
+ 
+   /* Move target1 and target2 to the memory locations indicated
+      by op1 and op2.  */
+   emit_move_insn (op1, target1);
+   emit_move_insn (op2, target2);
+ 
+   return const0_rtx;
+ }
+ 
+ /* Expand call EXP to the fegetround builtin (from C99 fenv.h), returning the
+    result and setting it in TARGET.  Otherwise return NULL_RTX on failure.  */
+ static rtx
+ expand_builtin_fegetround (tree exp, rtx target, machine_mode target_mode)
+ {
+   if (!validate_arglist (exp, VOID_TYPE))
+     return NULL_RTX;
+ 
+   insn_code icode = direct_optab_handler (fegetround_optab, SImode);
+   if (icode == CODE_FOR_nothing)
+     return NULL_RTX;
+ 
+   if (target == 0
+       || GET_MODE (target) != target_mode
+       || !(*insn_data[icode].operand[0].predicate) (target, target_mode))
+     target = gen_reg_rtx (target_mode);
+ 
+   rtx pat = GEN_FCN (icode) (target);
+   if (!pat)
+     return NULL_RTX;
+   emit_insn (pat);
+ 
+   return target;
+ }
+ 
+ /* Expand call EXP to either feclearexcept or feraiseexcept builtins (from C99
+    fenv.h), returning the result and setting it in TARGET.  Otherwise return
+    NULL_RTX on failure.  */
+ static rtx
+ expand_builtin_feclear_feraise_except (tree exp, rtx target,
+ 				       machine_mode target_mode, optab op_optab)
+ {
+   if (!validate_arglist (exp, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+   rtx op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
+ 
+   insn_code icode = direct_optab_handler (op_optab, SImode);
+   if (icode == CODE_FOR_nothing)
+     return NULL_RTX;
+ 
+   if (!(*insn_data[icode].operand[1].predicate) (op0, GET_MODE (op0)))
+     return NULL_RTX;
+ 
+   if (target == 0
+       || GET_MODE (target) != target_mode
+       || !(*insn_data[icode].operand[0].predicate) (target, target_mode))
+     target = gen_reg_rtx (target_mode);
+ 
+   rtx pat = GEN_FCN (icode) (target, op0);
+   if (!pat)
+     return NULL_RTX;
+   emit_insn (pat);
+ 
+   return target;
+ }
+ 
+ /* Expand a call to the internal cexpi builtin to the sincos math function.
+    EXP is the expression that is a call to the builtin function; if convenient,
+    the result should be placed in TARGET.  */
+ 
+ static rtx
+ expand_builtin_cexpi (tree exp, rtx target)
+ {
+   tree fndecl = get_callee_fndecl (exp);
+   tree arg, type;
+   machine_mode mode;
+   rtx op0, op1, op2;
+   location_t loc = EXPR_LOCATION (exp);
+ 
+   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   arg = CALL_EXPR_ARG (exp, 0);
+   type = TREE_TYPE (arg);
+   mode = TYPE_MODE (TREE_TYPE (arg));
+ 
+   /* Try expanding via a sincos optab, fall back to emitting a libcall
+      to sincos or cexp.  We are sure we have sincos or cexp because cexpi
+      is only generated from sincos, cexp or if we have either of them.  */
+   if (optab_handler (sincos_optab, mode) != CODE_FOR_nothing)
+     {
+       op1 = gen_reg_rtx (mode);
+       op2 = gen_reg_rtx (mode);
+ 
+       op0 = expand_expr (arg, NULL_RTX, VOIDmode, EXPAND_NORMAL);
+ 
+       /* Compute into op1 and op2.  */
+       expand_twoval_unop (sincos_optab, op0, op2, op1, 0);
+     }
+   else if (targetm.libc_has_function (function_sincos, type))
+     {
+       tree call, fn = NULL_TREE;
+       tree top1, top2;
+       rtx op1a, op2a;
+ 
+       if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPIF)
+ 	fn = builtin_decl_explicit (BUILT_IN_SINCOSF);
+       else if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPI)
+ 	fn = builtin_decl_explicit (BUILT_IN_SINCOS);
+       else if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPIL)
+ 	fn = builtin_decl_explicit (BUILT_IN_SINCOSL);
+       else
+ 	gcc_unreachable ();
+ 
+       op1 = assign_temp (TREE_TYPE (arg), 1, 1);
+       op2 = assign_temp (TREE_TYPE (arg), 1, 1);
+       op1a = copy_addr_to_reg (XEXP (op1, 0));
+       op2a = copy_addr_to_reg (XEXP (op2, 0));
+       top1 = make_tree (build_pointer_type (TREE_TYPE (arg)), op1a);
+       top2 = make_tree (build_pointer_type (TREE_TYPE (arg)), op2a);
+ 
+       /* Make sure not to fold the sincos call again.  */
+       call = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
+       expand_normal (build_call_nary (TREE_TYPE (TREE_TYPE (fn)),
+ 				      call, 3, arg, top1, top2));
+     }
+   else
+     {
+       tree call, fn = NULL_TREE, narg;
+       tree ctype = build_complex_type (type);
+ 
+       if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPIF)
+ 	fn = builtin_decl_explicit (BUILT_IN_CEXPF);
+       else if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPI)
+ 	fn = builtin_decl_explicit (BUILT_IN_CEXP);
+       else if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPIL)
+ 	fn = builtin_decl_explicit (BUILT_IN_CEXPL);
+       else
+ 	gcc_unreachable ();
+ 
+       /* If we don't have a decl for cexp create one.  This is the
+ 	 friendliest fallback if the user calls __builtin_cexpi
+ 	 without full target C99 function support.  */
+       if (fn == NULL_TREE)
+ 	{
+ 	  tree fntype;
+ 	  const char *name = NULL;
+ 
+ 	  if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPIF)
+ 	    name = "cexpf";
+ 	  else if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPI)
+ 	    name = "cexp";
+ 	  else if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CEXPIL)
+ 	    name = "cexpl";
+ 
+ 	  fntype = build_function_type_list (ctype, ctype, NULL_TREE);
+ 	  fn = build_fn_decl (name, fntype);
+ 	}
+ 
+       narg = fold_build2_loc (loc, COMPLEX_EXPR, ctype,
+ 			  build_real (type, dconst0), arg);
+ 
+       /* Make sure not to fold the cexp call again.  */
+       call = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
+       return expand_expr (build_call_nary (ctype, call, 1, narg),
+ 			  target, VOIDmode, EXPAND_NORMAL);
+     }
+ 
+   /* Now build the proper return type.  */
+   return expand_expr (build2 (COMPLEX_EXPR, build_complex_type (type),
+ 			      make_tree (TREE_TYPE (arg), op2),
+ 			      make_tree (TREE_TYPE (arg), op1)),
+ 		      target, VOIDmode, EXPAND_NORMAL);
+ }
+ 
+ /* Conveniently construct a function call expression.  FNDECL names the
+    function to be called, N is the number of arguments, and the "..."
+    parameters are the argument expressions.  Unlike build_call_exr
+    this doesn't fold the call, hence it will always return a CALL_EXPR.  */
+ 
+ static tree
+ build_call_nofold_loc (location_t loc, tree fndecl, int n, ...)
+ {
+   va_list ap;
+   tree fntype = TREE_TYPE (fndecl);
+   tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
+ 
+   va_start (ap, n);
+   fn = build_call_valist (TREE_TYPE (fntype), fn, n, ap);
+   va_end (ap);
+   SET_EXPR_LOCATION (fn, loc);
+   return fn;
+ }
+ 
+ /* Expand a call to one of the builtin rounding functions gcc defines
+    as an extension (lfloor and lceil).  As these are gcc extensions we
+    do not need to worry about setting errno to EDOM.
+    If expanding via optab fails, lower expression to (int)(floor(x)).
+    EXP is the expression that is a call to the builtin function;
+    if convenient, the result should be placed in TARGET.  */
+ 
+ static rtx
+ expand_builtin_int_roundingfn (tree exp, rtx target)
+ {
+   convert_optab builtin_optab;
+   rtx op0, tmp;
+   rtx_insn *insns;
+   tree fndecl = get_callee_fndecl (exp);
+   enum built_in_function fallback_fn;
+   tree fallback_fndecl;
+   machine_mode mode;
+   tree arg;
+ 
+   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   arg = CALL_EXPR_ARG (exp, 0);
+ 
+   switch (DECL_FUNCTION_CODE (fndecl))
+     {
+     CASE_FLT_FN (BUILT_IN_ICEIL):
+     CASE_FLT_FN (BUILT_IN_LCEIL):
+     CASE_FLT_FN (BUILT_IN_LLCEIL):
+       builtin_optab = lceil_optab;
+       fallback_fn = BUILT_IN_CEIL;
+       break;
+ 
+     CASE_FLT_FN (BUILT_IN_IFLOOR):
+     CASE_FLT_FN (BUILT_IN_LFLOOR):
+     CASE_FLT_FN (BUILT_IN_LLFLOOR):
+       builtin_optab = lfloor_optab;
+       fallback_fn = BUILT_IN_FLOOR;
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   /* Make a suitable register to place result in.  */
+   mode = TYPE_MODE (TREE_TYPE (exp));
+ 
+   target = gen_reg_rtx (mode);
+ 
+   /* Wrap the computation of the argument in a SAVE_EXPR, as we may
+      need to expand the argument again.  This way, we will not perform
+      side-effects more the once.  */
+   CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
+ 
+   op0 = expand_expr (arg, NULL, VOIDmode, EXPAND_NORMAL);
+ 
+   start_sequence ();
+ 
+   /* Compute into TARGET.  */
+   if (expand_sfix_optab (target, op0, builtin_optab))
+     {
+       /* Output the entire sequence.  */
+       insns = get_insns ();
+       end_sequence ();
+       emit_insn (insns);
+       return target;
+     }
+ 
+   /* If we were unable to expand via the builtin, stop the sequence
+      (without outputting the insns).  */
+   end_sequence ();
+ 
+   /* Fall back to floating point rounding optab.  */
+   fallback_fndecl = mathfn_built_in (TREE_TYPE (arg), fallback_fn);
+ 
+   /* For non-C99 targets we may end up without a fallback fndecl here
+      if the user called __builtin_lfloor directly.  In this case emit
+      a call to the floor/ceil variants nevertheless.  This should result
+      in the best user experience for not full C99 targets.  */
+   if (fallback_fndecl == NULL_TREE)
+     {
+       tree fntype;
+       const char *name = NULL;
+ 
+       switch (DECL_FUNCTION_CODE (fndecl))
+ 	{
+ 	case BUILT_IN_ICEIL:
+ 	case BUILT_IN_LCEIL:
+ 	case BUILT_IN_LLCEIL:
+ 	  name = "ceil";
+ 	  break;
+ 	case BUILT_IN_ICEILF:
+ 	case BUILT_IN_LCEILF:
+ 	case BUILT_IN_LLCEILF:
+ 	  name = "ceilf";
+ 	  break;
+ 	case BUILT_IN_ICEILL:
+ 	case BUILT_IN_LCEILL:
+ 	case BUILT_IN_LLCEILL:
+ 	  name = "ceill";
+ 	  break;
+ 	case BUILT_IN_IFLOOR:
+ 	case BUILT_IN_LFLOOR:
+ 	case BUILT_IN_LLFLOOR:
+ 	  name = "floor";
+ 	  break;
+ 	case BUILT_IN_IFLOORF:
+ 	case BUILT_IN_LFLOORF:
+ 	case BUILT_IN_LLFLOORF:
+ 	  name = "floorf";
+ 	  break;
+ 	case BUILT_IN_IFLOORL:
+ 	case BUILT_IN_LFLOORL:
+ 	case BUILT_IN_LLFLOORL:
+ 	  name = "floorl";
+ 	  break;
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+ 
+       fntype = build_function_type_list (TREE_TYPE (arg),
+ 					 TREE_TYPE (arg), NULL_TREE);
+       fallback_fndecl = build_fn_decl (name, fntype);
+     }
+ 
+   exp = build_call_nofold_loc (EXPR_LOCATION (exp), fallback_fndecl, 1, arg);
+ 
+   tmp = expand_normal (exp);
+   tmp = maybe_emit_group_store (tmp, TREE_TYPE (exp));
+ 
+   /* Truncate the result of floating point optab to integer
+      via expand_fix ().  */
+   target = gen_reg_rtx (mode);
+   expand_fix (target, tmp, 0);
+ 
+   return target;
+ }
+ 
+ /* Expand a call to one of the builtin math functions doing integer
+    conversion (lrint).
+    Return 0 if a normal call should be emitted rather than expanding the
+    function in-line.  EXP is the expression that is a call to the builtin
+    function; if convenient, the result should be placed in TARGET.  */
+ 
+ static rtx
+ expand_builtin_int_roundingfn_2 (tree exp, rtx target)
+ {
+   convert_optab builtin_optab;
+   rtx op0;
+   rtx_insn *insns;
+   tree fndecl = get_callee_fndecl (exp);
+   tree arg;
+   machine_mode mode;
+   enum built_in_function fallback_fn = BUILT_IN_NONE;
+ 
+   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   arg = CALL_EXPR_ARG (exp, 0);
+ 
+   switch (DECL_FUNCTION_CODE (fndecl))
+     {
+     CASE_FLT_FN (BUILT_IN_IRINT):
+       fallback_fn = BUILT_IN_LRINT;
+       gcc_fallthrough ();
+     CASE_FLT_FN (BUILT_IN_LRINT):
+     CASE_FLT_FN (BUILT_IN_LLRINT):
+       builtin_optab = lrint_optab;
+       break;
+ 
+     CASE_FLT_FN (BUILT_IN_IROUND):
+       fallback_fn = BUILT_IN_LROUND;
+       gcc_fallthrough ();
+     CASE_FLT_FN (BUILT_IN_LROUND):
+     CASE_FLT_FN (BUILT_IN_LLROUND):
+       builtin_optab = lround_optab;
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   /* There's no easy way to detect the case we need to set EDOM.  */
+   if (flag_errno_math && fallback_fn == BUILT_IN_NONE)
+     return NULL_RTX;
+ 
+   /* Make a suitable register to place result in.  */
+   mode = TYPE_MODE (TREE_TYPE (exp));
+ 
+   /* There's no easy way to detect the case we need to set EDOM.  */
+   if (!flag_errno_math)
+     {
+       rtx result = gen_reg_rtx (mode);
+ 
+       /* Wrap the computation of the argument in a SAVE_EXPR, as we may
+ 	 need to expand the argument again.  This way, we will not perform
+ 	 side-effects more the once.  */
+       CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
+ 
+       op0 = expand_expr (arg, NULL, VOIDmode, EXPAND_NORMAL);
+ 
+       start_sequence ();
+ 
+       if (expand_sfix_optab (result, op0, builtin_optab))
+ 	{
+ 	  /* Output the entire sequence.  */
+ 	  insns = get_insns ();
+ 	  end_sequence ();
+ 	  emit_insn (insns);
+ 	  return result;
+ 	}
+ 
+       /* If we were unable to expand via the builtin, stop the sequence
+ 	 (without outputting the insns) and call to the library function
+ 	 with the stabilized argument list.  */
+       end_sequence ();
+     }
+ 
+   if (fallback_fn != BUILT_IN_NONE)
+     {
+       /* Fall back to rounding to long int.  Use implicit_p 0 - for non-C99
+ 	 targets, (int) round (x) should never be transformed into
+ 	 BUILT_IN_IROUND and if __builtin_iround is called directly, emit
+ 	 a call to lround in the hope that the target provides at least some
+ 	 C99 functions.  This should result in the best user experience for
+ 	 not full C99 targets.
+ 	 As scalar float conversions with same mode are useless in GIMPLE,
+ 	 we can end up e.g. with _Float32 argument passed to float builtin,
+ 	 try to get the type from the builtin prototype first.  */
+       tree fallback_fndecl = NULL_TREE;
+       if (tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (fndecl)))
+         fallback_fndecl
+           = mathfn_built_in_1 (TREE_VALUE (argtypes),
+ 			       as_combined_fn (fallback_fn), 0);
+       if (fallback_fndecl == NULL_TREE)
+ 	fallback_fndecl
+ 	  = mathfn_built_in_1 (TREE_TYPE (arg),
+ 			       as_combined_fn (fallback_fn), 0);
+       if (fallback_fndecl)
+ 	{
+ 	  exp = build_call_nofold_loc (EXPR_LOCATION (exp),
+ 				       fallback_fndecl, 1, arg);
+ 
+ 	  target = expand_call (exp, NULL_RTX, target == const0_rtx);
+ 	  target = maybe_emit_group_store (target, TREE_TYPE (exp));
+ 	  return convert_to_mode (mode, target, 0);
+ 	}
+     }
+ 
+   return expand_call (exp, target, target == const0_rtx);
+ }
+ 
+ /* Expand a call to the powi built-in mathematical function.  Return NULL_RTX if
+    a normal call should be emitted rather than expanding the function
+    in-line.  EXP is the expression that is a call to the builtin
+    function; if convenient, the result should be placed in TARGET.  */
+ 
+ static rtx
+ expand_builtin_powi (tree exp, rtx target)
+ {
+   tree arg0, arg1;
+   rtx op0, op1;
+   machine_mode mode;
+   machine_mode mode2;
+ 
+   if (! validate_arglist (exp, REAL_TYPE, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   arg0 = CALL_EXPR_ARG (exp, 0);
+   arg1 = CALL_EXPR_ARG (exp, 1);
+   mode = TYPE_MODE (TREE_TYPE (exp));
+ 
+   /* Emit a libcall to libgcc.  */
+ 
+   /* Mode of the 2nd argument must match that of an int.  */
+   mode2 = int_mode_for_size (INT_TYPE_SIZE, 0).require ();
+ 
+   if (target == NULL_RTX)
+     target = gen_reg_rtx (mode);
+ 
+   op0 = expand_expr (arg0, NULL_RTX, mode, EXPAND_NORMAL);
+   if (GET_MODE (op0) != mode)
+     op0 = convert_to_mode (mode, op0, 0);
+   op1 = expand_expr (arg1, NULL_RTX, mode2, EXPAND_NORMAL);
+   if (GET_MODE (op1) != mode2)
+     op1 = convert_to_mode (mode2, op1, 0);
+ 
+   target = emit_library_call_value (optab_libfunc (powi_optab, mode),
+ 				    target, LCT_CONST, mode,
+ 				    op0, mode, op1, mode2);
+ 
+   return target;
+ }
+ 
+ /* Expand expression EXP which is a call to the strlen builtin.  Return
+    NULL_RTX if we failed and the caller should emit a normal call, otherwise
+    try to get the result in TARGET, if convenient.  */
+ 
+ static rtx
+ expand_builtin_strlen (tree exp, rtx target,
+ 		       machine_mode target_mode)
+ {
+   if (!validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tree src = CALL_EXPR_ARG (exp, 0);
+ 
+   /* If the length can be computed at compile-time, return it.  */
+   if (tree len = c_strlen (src, 0))
+     return expand_expr (len, target, target_mode, EXPAND_NORMAL);
+ 
+   /* If the length can be computed at compile-time and is constant
+      integer, but there are side-effects in src, evaluate
+      src for side-effects, then return len.
+      E.g. x = strlen (i++ ? "xfoo" + 1 : "bar");
+      can be optimized into: i++; x = 3;  */
+   tree len = c_strlen (src, 1);
+   if (len && TREE_CODE (len) == INTEGER_CST)
+     {
+       expand_expr (src, const0_rtx, VOIDmode, EXPAND_NORMAL);
+       return expand_expr (len, target, target_mode, EXPAND_NORMAL);
+     }
+ 
+   unsigned int align = get_pointer_alignment (src) / BITS_PER_UNIT;
+ 
+   /* If SRC is not a pointer type, don't do this operation inline.  */
+   if (align == 0)
+     return NULL_RTX;
+ 
+   /* Bail out if we can't compute strlen in the right mode.  */
+   machine_mode insn_mode;
+   enum insn_code icode = CODE_FOR_nothing;
+   FOR_EACH_MODE_FROM (insn_mode, target_mode)
+     {
+       icode = optab_handler (strlen_optab, insn_mode);
+       if (icode != CODE_FOR_nothing)
+ 	break;
+     }
+   if (insn_mode == VOIDmode)
+     return NULL_RTX;
+ 
+   /* Make a place to hold the source address.  We will not expand
+      the actual source until we are sure that the expansion will
+      not fail -- there are trees that cannot be expanded twice.  */
+   rtx src_reg = gen_reg_rtx (Pmode);
+ 
+   /* Mark the beginning of the strlen sequence so we can emit the
+      source operand later.  */
+   rtx_insn *before_strlen = get_last_insn ();
+ 
+   class expand_operand ops[4];
+   create_output_operand (&ops[0], target, insn_mode);
+   create_fixed_operand (&ops[1], gen_rtx_MEM (BLKmode, src_reg));
+   create_integer_operand (&ops[2], 0);
+   create_integer_operand (&ops[3], align);
+   if (!maybe_expand_insn (icode, 4, ops))
+     return NULL_RTX;
+ 
+   /* Check to see if the argument was declared attribute nonstring
+      and if so, issue a warning since at this point it's not known
+      to be nul-terminated.  */
+   maybe_warn_nonstring_arg (get_callee_fndecl (exp), exp);
+ 
+   /* Now that we are assured of success, expand the source.  */
+   start_sequence ();
+   rtx pat = expand_expr (src, src_reg, Pmode, EXPAND_NORMAL);
+   if (pat != src_reg)
+     {
+ #ifdef POINTERS_EXTEND_UNSIGNED
+       if (GET_MODE (pat) != Pmode)
+ 	pat = convert_to_mode (Pmode, pat,
+ 			       POINTERS_EXTEND_UNSIGNED);
+ #endif
+       emit_move_insn (src_reg, pat);
+     }
+   pat = get_insns ();
+   end_sequence ();
+ 
+   if (before_strlen)
+     emit_insn_after (pat, before_strlen);
+   else
+     emit_insn_before (pat, get_insns ());
+ 
+   /* Return the value in the proper mode for this function.  */
+   if (GET_MODE (ops[0].value) == target_mode)
+     target = ops[0].value;
+   else if (target != 0)
+     convert_move (target, ops[0].value, 0);
+   else
+     target = convert_to_mode (target_mode, ops[0].value, 0);
+ 
+   return target;
+ }
+ 
+ /* Expand call EXP to the strnlen built-in, returning the result
+    and setting it in TARGET.  Otherwise return NULL_RTX on failure.  */
+ 
+ static rtx
+ expand_builtin_strnlen (tree exp, rtx target, machine_mode target_mode)
+ {
+   if (!validate_arglist (exp, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tree src = CALL_EXPR_ARG (exp, 0);
+   tree bound = CALL_EXPR_ARG (exp, 1);
+ 
+   if (!bound)
+     return NULL_RTX;
+ 
+   location_t loc = UNKNOWN_LOCATION;
+   if (EXPR_HAS_LOCATION (exp))
+     loc = EXPR_LOCATION (exp);
+ 
+   /* FIXME: Change c_strlen() to return sizetype instead of ssizetype
+      so these conversions aren't necessary.  */
+   c_strlen_data lendata = { };
+   tree len = c_strlen (src, 0, &lendata, 1);
+   if (len)
+     len = fold_convert_loc (loc, TREE_TYPE (bound), len);
+ 
+   if (TREE_CODE (bound) == INTEGER_CST)
+     {
+       if (!len)
+ 	return NULL_RTX;
+ 
+       len = fold_build2_loc (loc, MIN_EXPR, size_type_node, len, bound);
+       return expand_expr (len, target, target_mode, EXPAND_NORMAL);
+     }
+ 
+   if (TREE_CODE (bound) != SSA_NAME)
+     return NULL_RTX;
+ 
+   wide_int min, max;
+   value_range r;
+   get_global_range_query ()->range_of_expr (r, bound);
+   if (r.kind () != VR_RANGE)
+     return NULL_RTX;
+   min = r.lower_bound ();
+   max = r.upper_bound ();
+ 
+   if (!len || TREE_CODE (len) != INTEGER_CST)
+     {
+       bool exact;
+       lendata.decl = unterminated_array (src, &len, &exact);
+       if (!lendata.decl)
+ 	return NULL_RTX;
+     }
+ 
+   if (lendata.decl)
+     return NULL_RTX;
+ 
+   if (wi::gtu_p (min, wi::to_wide (len)))
+     return expand_expr (len, target, target_mode, EXPAND_NORMAL);
+ 
+   len = fold_build2_loc (loc, MIN_EXPR, TREE_TYPE (len), len, bound);
+   return expand_expr (len, target, target_mode, EXPAND_NORMAL);
+ }
+ 
+ /* Callback routine for store_by_pieces.  Read GET_MODE_BITSIZE (MODE)
+    bytes from bytes at DATA + OFFSET and return it reinterpreted as
+    a target constant.  */
+ 
+ static rtx
+ builtin_memcpy_read_str (void *data, void *, HOST_WIDE_INT offset,
+ 			 fixed_size_mode mode)
+ {
+   /* The REPresentation pointed to by DATA need not be a nul-terminated
+      string but the caller guarantees it's large enough for MODE.  */
+   const char *rep = (const char *) data;
+ 
+   /* The by-pieces infrastructure does not try to pick a vector mode
+      for memcpy expansion.  */
+   return c_readstr (rep + offset, as_a <scalar_int_mode> (mode),
+ 		    /*nul_terminated=*/false);
+ }
+ 
+ /* LEN specify length of the block of memcpy/memset operation.
+    Figure out its range and put it into MIN_SIZE/MAX_SIZE. 
+    In some cases we can make very likely guess on max size, then we
+    set it into PROBABLE_MAX_SIZE.  */
+ 
+ static void
+ determine_block_size (tree len, rtx len_rtx,
+ 		      unsigned HOST_WIDE_INT *min_size,
+ 		      unsigned HOST_WIDE_INT *max_size,
+ 		      unsigned HOST_WIDE_INT *probable_max_size)
+ {
+   if (CONST_INT_P (len_rtx))
+     {
+       *min_size = *max_size = *probable_max_size = UINTVAL (len_rtx);
+       return;
+     }
+   else
+     {
+       wide_int min, max;
+       enum value_range_kind range_type = VR_UNDEFINED;
+ 
+       /* Determine bounds from the type.  */
+       if (tree_fits_uhwi_p (TYPE_MIN_VALUE (TREE_TYPE (len))))
+ 	*min_size = tree_to_uhwi (TYPE_MIN_VALUE (TREE_TYPE (len)));
+       else
+ 	*min_size = 0;
+       if (tree_fits_uhwi_p (TYPE_MAX_VALUE (TREE_TYPE (len))))
+ 	*probable_max_size = *max_size
+ 	  = tree_to_uhwi (TYPE_MAX_VALUE (TREE_TYPE (len)));
+       else
+ 	*probable_max_size = *max_size = GET_MODE_MASK (GET_MODE (len_rtx));
+ 
+       if (TREE_CODE (len) == SSA_NAME)
+ 	{
+ 	  value_range r;
+ 	  get_global_range_query ()->range_of_expr (r, len);
+ 	  range_type = r.kind ();
+ 	  if (range_type != VR_UNDEFINED)
+ 	    {
+ 	      min = wi::to_wide (r.min ());
+ 	      max = wi::to_wide (r.max ());
+ 	    }
+ 	}
+       if (range_type == VR_RANGE)
+ 	{
+ 	  if (wi::fits_uhwi_p (min) && *min_size < min.to_uhwi ())
+ 	    *min_size = min.to_uhwi ();
+ 	  if (wi::fits_uhwi_p (max) && *max_size > max.to_uhwi ())
+ 	    *probable_max_size = *max_size = max.to_uhwi ();
+ 	}
+       else if (range_type == VR_ANTI_RANGE)
+ 	{
+ 	  /* Code like
+ 
+ 	     int n;
+ 	     if (n < 100)
+ 	       memcpy (a, b, n)
+ 
+ 	     Produce anti range allowing negative values of N.  We still
+ 	     can use the information and make a guess that N is not negative.
+ 	     */
+ 	  if (!wi::leu_p (max, 1 << 30) && wi::fits_uhwi_p (min))
+ 	    *probable_max_size = min.to_uhwi () - 1;
+ 	}
+     }
+   gcc_checking_assert (*max_size <=
+ 		       (unsigned HOST_WIDE_INT)
+ 			  GET_MODE_MASK (GET_MODE (len_rtx)));
+ }
+ 
+ /* Expand a call EXP to the memcpy builtin.
+    Return NULL_RTX if we failed, the caller should emit a normal call,
+    otherwise try to get the result in TARGET, if convenient (and in
+    mode MODE if that's convenient).  */
+ 
+ static rtx
+ expand_builtin_memcpy (tree exp, rtx target)
+ {
+   if (!validate_arglist (exp,
+  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tree dest = CALL_EXPR_ARG (exp, 0);
+   tree src = CALL_EXPR_ARG (exp, 1);
+   tree len = CALL_EXPR_ARG (exp, 2);
+ 
+   return expand_builtin_memory_copy_args (dest, src, len, target, exp,
+ 					  /*retmode=*/ RETURN_BEGIN, false);
+ }
+ 
+ /* Check a call EXP to the memmove built-in for validity.
+    Return NULL_RTX on both success and failure.  */
+ 
+ static rtx
+ expand_builtin_memmove (tree exp, rtx target)
+ {
+   if (!validate_arglist (exp,
+  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tree dest = CALL_EXPR_ARG (exp, 0);
+   tree src = CALL_EXPR_ARG (exp, 1);
+   tree len = CALL_EXPR_ARG (exp, 2);
+ 
+   return expand_builtin_memory_copy_args (dest, src, len, target, exp,
+ 					  /*retmode=*/ RETURN_BEGIN, true);
+ }
+ 
+ /* Expand a call EXP to the mempcpy builtin.
+    Return NULL_RTX if we failed; the caller should emit a normal call,
+    otherwise try to get the result in TARGET, if convenient (and in
+    mode MODE if that's convenient).  */
+ 
+ static rtx
+ expand_builtin_mempcpy (tree exp, rtx target)
+ {
+   if (!validate_arglist (exp,
+  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tree dest = CALL_EXPR_ARG (exp, 0);
+   tree src = CALL_EXPR_ARG (exp, 1);
+   tree len = CALL_EXPR_ARG (exp, 2);
+ 
+   /* Policy does not generally allow using compute_objsize (which
+      is used internally by check_memop_size) to change code generation
+      or drive optimization decisions.
+ 
+      In this instance it is safe because the code we generate has
+      the same semantics regardless of the return value of
+      check_memop_sizes.   Exactly the same amount of data is copied
+      and the return value is exactly the same in both cases.
+ 
+      Furthermore, check_memop_size always uses mode 0 for the call to
+      compute_objsize, so the imprecise nature of compute_objsize is
+      avoided.  */
+ 
+   /* Avoid expanding mempcpy into memcpy when the call is determined
+      to overflow the buffer.  This also prevents the same overflow
+      from being diagnosed again when expanding memcpy.  */
+ 
+   return expand_builtin_mempcpy_args (dest, src, len,
+ 				      target, exp, /*retmode=*/ RETURN_END);
+ }
+ 
+ /* Helper function to do the actual work for expand of memory copy family
+    functions (memcpy, mempcpy, stpcpy).  Expansing should assign LEN bytes
+    of memory from SRC to DEST and assign to TARGET if convenient.  Return
+    value is based on RETMODE argument.  */
+ 
+ static rtx
+ expand_builtin_memory_copy_args (tree dest, tree src, tree len,
+ 				 rtx target, tree exp, memop_ret retmode,
+ 				 bool might_overlap)
+ {
+   unsigned int src_align = get_pointer_alignment (src);
+   unsigned int dest_align = get_pointer_alignment (dest);
+   rtx dest_mem, src_mem, dest_addr, len_rtx;
+   HOST_WIDE_INT expected_size = -1;
+   unsigned int expected_align = 0;
+   unsigned HOST_WIDE_INT min_size;
+   unsigned HOST_WIDE_INT max_size;
+   unsigned HOST_WIDE_INT probable_max_size;
+ 
+   bool is_move_done;
+ 
+   /* If DEST is not a pointer type, call the normal function.  */
+   if (dest_align == 0)
+     return NULL_RTX;
+ 
+   /* If either SRC is not a pointer type, don't do this
+      operation in-line.  */
+   if (src_align == 0)
+     return NULL_RTX;
+ 
+   if (currently_expanding_gimple_stmt)
+     stringop_block_profile (currently_expanding_gimple_stmt,
+ 			    &expected_align, &expected_size);
+ 
+   if (expected_align < dest_align)
+     expected_align = dest_align;
+   dest_mem = get_memory_rtx (dest, len);
+   set_mem_align (dest_mem, dest_align);
+   len_rtx = expand_normal (len);
+   determine_block_size (len, len_rtx, &min_size, &max_size,
+ 			&probable_max_size);
+ 
+   /* Try to get the byte representation of the constant SRC points to,
+      with its byte size in NBYTES.  */
+   unsigned HOST_WIDE_INT nbytes;
+   const char *rep = getbyterep (src, &nbytes);
+ 
+   /* If the function's constant bound LEN_RTX is less than or equal
+      to the byte size of the representation of the constant argument,
+      and if block move would be done by pieces, we can avoid loading
+      the bytes from memory and only store the computed constant.
+      This works in the overlap (memmove) case as well because
+      store_by_pieces just generates a series of stores of constants
+      from the representation returned by getbyterep().  */
+   if (rep
+       && CONST_INT_P (len_rtx)
+       && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= nbytes
+       && can_store_by_pieces (INTVAL (len_rtx), builtin_memcpy_read_str,
+ 			      CONST_CAST (char *, rep),
+ 			      dest_align, false))
+     {
+       dest_mem = store_by_pieces (dest_mem, INTVAL (len_rtx),
+ 				  builtin_memcpy_read_str,
+ 				  CONST_CAST (char *, rep),
+ 				  dest_align, false, retmode);
+       dest_mem = force_operand (XEXP (dest_mem, 0), target);
+       dest_mem = convert_memory_address (ptr_mode, dest_mem);
+       return dest_mem;
+     }
+ 
+   src_mem = get_memory_rtx (src, len);
+   set_mem_align (src_mem, src_align);
+ 
+   /* Copy word part most expediently.  */
+   enum block_op_methods method = BLOCK_OP_NORMAL;
+   if (CALL_EXPR_TAILCALL (exp)
+       && (retmode == RETURN_BEGIN || target == const0_rtx))
+     method = BLOCK_OP_TAILCALL;
+   bool use_mempcpy_call = (targetm.libc_has_fast_function (BUILT_IN_MEMPCPY)
+ 			   && retmode == RETURN_END
+ 			   && !might_overlap
+ 			   && target != const0_rtx);
+   if (use_mempcpy_call)
+     method = BLOCK_OP_NO_LIBCALL_RET;
+   dest_addr = emit_block_move_hints (dest_mem, src_mem, len_rtx, method,
+ 				     expected_align, expected_size,
+ 				     min_size, max_size, probable_max_size,
+ 				     use_mempcpy_call, &is_move_done,
+ 				     might_overlap);
+ 
+   /* Bail out when a mempcpy call would be expanded as libcall and when
+      we have a target that provides a fast implementation
+      of mempcpy routine.  */
+   if (!is_move_done)
+     return NULL_RTX;
+ 
+   if (dest_addr == pc_rtx)
+     return NULL_RTX;
+ 
+   if (dest_addr == 0)
+     {
+       dest_addr = force_operand (XEXP (dest_mem, 0), target);
+       dest_addr = convert_memory_address (ptr_mode, dest_addr);
+     }
+ 
+   if (retmode != RETURN_BEGIN && target != const0_rtx)
+     {
+       dest_addr = gen_rtx_PLUS (ptr_mode, dest_addr, len_rtx);
+       /* stpcpy pointer to last byte.  */
+       if (retmode == RETURN_END_MINUS_ONE)
+ 	dest_addr = gen_rtx_MINUS (ptr_mode, dest_addr, const1_rtx);
+     }
+ 
+   return dest_addr;
+ }
+ 
+ static rtx
+ expand_builtin_mempcpy_args (tree dest, tree src, tree len,
+ 			     rtx target, tree orig_exp, memop_ret retmode)
+ {
+   return expand_builtin_memory_copy_args (dest, src, len, target, orig_exp,
+ 					  retmode, false);
+ }
+ 
+ /* Expand into a movstr instruction, if one is available.  Return NULL_RTX if
+    we failed, the caller should emit a normal call, otherwise try to
+    get the result in TARGET, if convenient.
+    Return value is based on RETMODE argument.  */
+ 
+ static rtx
+ expand_movstr (tree dest, tree src, rtx target, memop_ret retmode)
+ {
+   class expand_operand ops[3];
+   rtx dest_mem;
+   rtx src_mem;
+ 
+   if (!targetm.have_movstr ())
+     return NULL_RTX;
+ 
+   dest_mem = get_memory_rtx (dest, NULL);
+   src_mem = get_memory_rtx (src, NULL);
+   if (retmode == RETURN_BEGIN)
+     {
+       target = force_reg (Pmode, XEXP (dest_mem, 0));
+       dest_mem = replace_equiv_address (dest_mem, target);
+     }
+ 
+   create_output_operand (&ops[0],
+ 			 retmode != RETURN_BEGIN ? target : NULL_RTX, Pmode);
+   create_fixed_operand (&ops[1], dest_mem);
+   create_fixed_operand (&ops[2], src_mem);
+   if (!maybe_expand_insn (targetm.code_for_movstr, 3, ops))
+     return NULL_RTX;
+ 
+   if (retmode != RETURN_BEGIN && target != const0_rtx)
+     {
+       target = ops[0].value;
+       /* movstr is supposed to set end to the address of the NUL
+ 	 terminator.  If the caller requested a mempcpy-like return value,
+ 	 adjust it.  */
+       if (retmode == RETURN_END)
+ 	{
+ 	  rtx tem = plus_constant (GET_MODE (target),
+ 				   gen_lowpart (GET_MODE (target), target), 1);
+ 	  emit_move_insn (target, force_operand (tem, NULL_RTX));
+ 	}
+     }
+   return target;
+ }
+ 
+ /* Expand expression EXP, which is a call to the strcpy builtin.  Return
+    NULL_RTX if we failed the caller should emit a normal call, otherwise
+    try to get the result in TARGET, if convenient (and in mode MODE if that's
+    convenient).  */
+ 
+ static rtx
+ expand_builtin_strcpy (tree exp, rtx target)
+ {
+   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tree dest = CALL_EXPR_ARG (exp, 0);
+   tree src = CALL_EXPR_ARG (exp, 1);
+ 
+   return expand_builtin_strcpy_args (exp, dest, src, target);
+ }
+ 
+ /* Helper function to do the actual work for expand_builtin_strcpy.  The
+    arguments to the builtin_strcpy call DEST and SRC are broken out
+    so that this can also be called without constructing an actual CALL_EXPR.
+    The other arguments and return value are the same as for
+    expand_builtin_strcpy.  */
+ 
+ static rtx
+ expand_builtin_strcpy_args (tree, tree dest, tree src, rtx target)
+ {
+   return expand_movstr (dest, src, target, /*retmode=*/ RETURN_BEGIN);
+ }
+ 
+ /* Expand a call EXP to the stpcpy builtin.
+    Return NULL_RTX if we failed the caller should emit a normal call,
+    otherwise try to get the result in TARGET, if convenient (and in
+    mode MODE if that's convenient).  */
+ 
+ static rtx
+ expand_builtin_stpcpy_1 (tree exp, rtx target, machine_mode mode)
+ {
+   tree dst, src;
+   location_t loc = EXPR_LOCATION (exp);
+ 
+   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   dst = CALL_EXPR_ARG (exp, 0);
+   src = CALL_EXPR_ARG (exp, 1);
+ 
+   /* If return value is ignored, transform stpcpy into strcpy.  */
+   if (target == const0_rtx && builtin_decl_implicit (BUILT_IN_STRCPY))
+     {
+       tree fn = builtin_decl_implicit (BUILT_IN_STRCPY);
+       tree result = build_call_nofold_loc (loc, fn, 2, dst, src);
+       return expand_expr (result, target, mode, EXPAND_NORMAL);
+     }
+   else
+     {
+       tree len, lenp1;
+       rtx ret;
+ 
+       /* Ensure we get an actual string whose length can be evaluated at
+ 	 compile-time, not an expression containing a string.  This is
+ 	 because the latter will potentially produce pessimized code
+ 	 when used to produce the return value.  */
+       c_strlen_data lendata = { };
+       if (!c_getstr (src)
+ 	  || !(len = c_strlen (src, 0, &lendata, 1)))
+ 	return expand_movstr (dst, src, target,
+ 			      /*retmode=*/ RETURN_END_MINUS_ONE);
+ 
+       lenp1 = size_binop_loc (loc, PLUS_EXPR, len, ssize_int (1));
+       ret = expand_builtin_mempcpy_args (dst, src, lenp1,
+ 					 target, exp,
+ 					 /*retmode=*/ RETURN_END_MINUS_ONE);
+ 
+       if (ret)
+ 	return ret;
+ 
+       if (TREE_CODE (len) == INTEGER_CST)
+ 	{
+ 	  rtx len_rtx = expand_normal (len);
+ 
+ 	  if (CONST_INT_P (len_rtx))
+ 	    {
+ 	      ret = expand_builtin_strcpy_args (exp, dst, src, target);
+ 
+ 	      if (ret)
+ 		{
+ 		  if (! target)
+ 		    {
+ 		      if (mode != VOIDmode)
+ 			target = gen_reg_rtx (mode);
+ 		      else
+ 			target = gen_reg_rtx (GET_MODE (ret));
+ 		    }
+ 		  if (GET_MODE (target) != GET_MODE (ret))
+ 		    ret = gen_lowpart (GET_MODE (target), ret);
+ 
+ 		  ret = plus_constant (GET_MODE (ret), ret, INTVAL (len_rtx));
+ 		  ret = emit_move_insn (target, force_operand (ret, NULL_RTX));
+ 		  gcc_assert (ret);
+ 
+ 		  return target;
+ 		}
+ 	    }
+ 	}
+ 
+       return expand_movstr (dst, src, target,
+ 			    /*retmode=*/ RETURN_END_MINUS_ONE);
+     }
+ }
+ 
+ /* Expand a call EXP to the stpcpy builtin and diagnose uses of nonstring
+    arguments while being careful to avoid duplicate warnings (which could
+    be issued if the expander were to expand the call, resulting in it
+    being emitted in expand_call().  */
+ 
+ static rtx
+ expand_builtin_stpcpy (tree exp, rtx target, machine_mode mode)
+ {
+   if (rtx ret = expand_builtin_stpcpy_1 (exp, target, mode))
+     {
+       /* The call has been successfully expanded.  Check for nonstring
+ 	 arguments and issue warnings as appropriate.  */
+       maybe_warn_nonstring_arg (get_callee_fndecl (exp), exp);
+       return ret;
+     }
+ 
+   return NULL_RTX;
+ }
+ 
+ /* Callback routine for store_by_pieces.  Read GET_MODE_BITSIZE (MODE)
+    bytes from constant string DATA + OFFSET and return it as target
+    constant.  */
+ 
+ rtx
+ builtin_strncpy_read_str (void *data, void *, HOST_WIDE_INT offset,
+ 			  fixed_size_mode mode)
+ {
+   const char *str = (const char *) data;
+ 
+   if ((unsigned HOST_WIDE_INT) offset > strlen (str))
+     return const0_rtx;
+ 
+   /* The by-pieces infrastructure does not try to pick a vector mode
+      for strncpy expansion.  */
+   return c_readstr (str + offset, as_a <scalar_int_mode> (mode));
+ }
+ 
+ /* Helper to check the sizes of sequences and the destination of calls
+    to __builtin_strncat and __builtin___strncat_chk.  Returns true on
+    success (no overflow or invalid sizes), false otherwise.  */
+ 
+ static bool
+ check_strncat_sizes (tree exp, tree objsize)
+ {
+   tree dest = CALL_EXPR_ARG (exp, 0);
+   tree src = CALL_EXPR_ARG (exp, 1);
+   tree maxread = CALL_EXPR_ARG (exp, 2);
+ 
+   /* Try to determine the range of lengths that the source expression
+      refers to.  */
+   c_strlen_data lendata = { };
+   get_range_strlen (src, &lendata, /* eltsize = */ 1);
+ 
+   /* Try to verify that the destination is big enough for the shortest
+      string.  */
+ 
+   access_data data (nullptr, exp, access_read_write, maxread, true);
+   if (!objsize && warn_stringop_overflow)
+     {
+       /* If it hasn't been provided by __strncat_chk, try to determine
+ 	 the size of the destination object into which the source is
+ 	 being copied.  */
+       objsize = compute_objsize (dest, warn_stringop_overflow - 1, &data.dst);
+     }
+ 
+   /* Add one for the terminating nul.  */
+   tree srclen = (lendata.minlen
+ 		 ? fold_build2 (PLUS_EXPR, size_type_node, lendata.minlen,
+ 				size_one_node)
+ 		 : NULL_TREE);
+ 
+   /* The strncat function copies at most MAXREAD bytes and always appends
+      the terminating nul so the specified upper bound should never be equal
+      to (or greater than) the size of the destination.  */
+   if (tree_fits_uhwi_p (maxread) && tree_fits_uhwi_p (objsize)
+       && tree_int_cst_equal (objsize, maxread))
+     {
+       location_t loc = EXPR_LOCATION (exp);
+       warning_at (loc, OPT_Wstringop_overflow_,
+ 		  "%qD specified bound %E equals destination size",
+ 		  get_callee_fndecl (exp), maxread);
+ 
+       return false;
+     }
+ 
+   if (!srclen
+       || (maxread && tree_fits_uhwi_p (maxread)
+ 	  && tree_fits_uhwi_p (srclen)
+ 	  && tree_int_cst_lt (maxread, srclen)))
+     srclen = maxread;
+ 
+   /* The number of bytes to write is LEN but check_access will alsoa
+      check SRCLEN if LEN's value isn't known.  */
+   return check_access (exp, /*dstwrite=*/NULL_TREE, maxread, srclen,
+ 		       objsize, data.mode, &data);
+ }
+ 
+ /* Expand expression EXP, which is a call to the strncpy builtin.  Return
+    NULL_RTX if we failed the caller should emit a normal call.  */
+ 
+ static rtx
+ expand_builtin_strncpy (tree exp, rtx target)
+ {
+   location_t loc = EXPR_LOCATION (exp);
+ 
+   if (!validate_arglist (exp,
+ 			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+   tree dest = CALL_EXPR_ARG (exp, 0);
+   tree src = CALL_EXPR_ARG (exp, 1);
+   /* The number of bytes to write (not the maximum).  */
+   tree len = CALL_EXPR_ARG (exp, 2);
+ 
+   /* The length of the source sequence.  */
+   tree slen = c_strlen (src, 1);
+ 
+   /* We must be passed a constant len and src parameter.  */
+   if (!tree_fits_uhwi_p (len) || !slen || !tree_fits_uhwi_p (slen))
+     return NULL_RTX;
+ 
+   slen = size_binop_loc (loc, PLUS_EXPR, slen, ssize_int (1));
+ 
+   /* We're required to pad with trailing zeros if the requested
+      len is greater than strlen(s2)+1.  In that case try to
+      use store_by_pieces, if it fails, punt.  */
+   if (tree_int_cst_lt (slen, len))
+     {
+       unsigned int dest_align = get_pointer_alignment (dest);
+       const char *p = c_getstr (src);
+       rtx dest_mem;
+ 
+       if (!p || dest_align == 0 || !tree_fits_uhwi_p (len)
+ 	  || !can_store_by_pieces (tree_to_uhwi (len),
+ 				   builtin_strncpy_read_str,
+ 				   CONST_CAST (char *, p),
+ 				   dest_align, false))
+ 	return NULL_RTX;
+ 
+       dest_mem = get_memory_rtx (dest, len);
+       store_by_pieces (dest_mem, tree_to_uhwi (len),
+ 		       builtin_strncpy_read_str,
+ 		       CONST_CAST (char *, p), dest_align, false,
+ 		       RETURN_BEGIN);
+       dest_mem = force_operand (XEXP (dest_mem, 0), target);
+       dest_mem = convert_memory_address (ptr_mode, dest_mem);
+       return dest_mem;
+     }
+ 
+   return NULL_RTX;
+ }
+ 
+ /* Return the RTL of a register in MODE generated from PREV in the
+    previous iteration.  */
+ 
+ static rtx
+ gen_memset_value_from_prev (by_pieces_prev *prev, fixed_size_mode mode)
+ {
+   rtx target = nullptr;
+   if (prev != nullptr && prev->data != nullptr)
+     {
+       /* Use the previous data in the same mode.  */
+       if (prev->mode == mode)
+ 	return prev->data;
+ 
+       fixed_size_mode prev_mode = prev->mode;
+ 
+       /* Don't use the previous data to write QImode if it is in a
+ 	 vector mode.  */
+       if (VECTOR_MODE_P (prev_mode) && mode == QImode)
+ 	return target;
+ 
+       rtx prev_rtx = prev->data;
+ 
+       if (REG_P (prev_rtx)
+ 	  && HARD_REGISTER_P (prev_rtx)
+ 	  && lowpart_subreg_regno (REGNO (prev_rtx), prev_mode, mode) < 0)
+ 	{
+ 	  /* This case occurs when PREV_MODE is a vector and when
+ 	     MODE is too small to store using vector operations.
+ 	     After register allocation, the code will need to move the
+ 	     lowpart of the vector register into a non-vector register.
+ 
+ 	     Also, the target has chosen to use a hard register
+ 	     instead of going with the default choice of using a
+ 	     pseudo register.  We should respect that choice and try to
+ 	     avoid creating a pseudo register with the same mode as the
+ 	     current hard register.
+ 
+ 	     In principle, we could just use a lowpart MODE subreg of
+ 	     the vector register.  However, the vector register mode might
+ 	     be too wide for non-vector registers, and we already know
+ 	     that the non-vector mode is too small for vector registers.
+ 	     It's therefore likely that we'd need to spill to memory in
+ 	     the vector mode and reload the non-vector value from there.
+ 
+ 	     Try to avoid that by reducing the vector register to the
+ 	     smallest size that it can hold.  This should increase the
+ 	     chances that non-vector registers can hold both the inner
+ 	     and outer modes of the subreg that we generate later.  */
+ 	  machine_mode m;
+ 	  fixed_size_mode candidate;
+ 	  FOR_EACH_MODE_IN_CLASS (m, GET_MODE_CLASS (mode))
+ 	    if (is_a<fixed_size_mode> (m, &candidate))
+ 	      {
+ 		if (GET_MODE_SIZE (candidate)
+ 		    >= GET_MODE_SIZE (prev_mode))
+ 		  break;
+ 		if (GET_MODE_SIZE (candidate) >= GET_MODE_SIZE (mode)
+ 		    && lowpart_subreg_regno (REGNO (prev_rtx),
+ 					     prev_mode, candidate) >= 0)
+ 		  {
+ 		    target = lowpart_subreg (candidate, prev_rtx,
+ 					     prev_mode);
+ 		    prev_rtx = target;
+ 		    prev_mode = candidate;
+ 		    break;
+ 		  }
+ 	      }
+ 	  if (target == nullptr)
+ 	    prev_rtx = copy_to_reg (prev_rtx);
+ 	}
+ 
+       target = lowpart_subreg (mode, prev_rtx, prev_mode);
+     }
+   return target;
+ }
+ 
+ /* Callback routine for store_by_pieces.  Read GET_MODE_BITSIZE (MODE)
+    bytes from constant string DATA + OFFSET and return it as target
+    constant.  If PREV isn't nullptr, it has the RTL info from the
+    previous iteration.  */
+ 
+ rtx
+ builtin_memset_read_str (void *data, void *prev,
+ 			 HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
+ 			 fixed_size_mode mode)
+ {
+   const char *c = (const char *) data;
+   unsigned int size = GET_MODE_SIZE (mode);
+ 
+   rtx target = gen_memset_value_from_prev ((by_pieces_prev *) prev,
+ 					   mode);
+   if (target != nullptr)
+     return target;
+   rtx src = gen_int_mode (*c, QImode);
+ 
+   if (VECTOR_MODE_P (mode))
+     {
+       gcc_assert (GET_MODE_INNER (mode) == QImode);
+ 
+       rtx const_vec = gen_const_vec_duplicate (mode, src);
+       if (prev == NULL)
+ 	/* Return CONST_VECTOR when called by a query function.  */
+ 	return const_vec;
+ 
+       /* Use the move expander with CONST_VECTOR.  */
+       target = targetm.gen_memset_scratch_rtx (mode);
+       emit_move_insn (target, const_vec);
+       return target;
+     }
+ 
+   char *p = XALLOCAVEC (char, size);
+ 
+   memset (p, *c, size);
+ 
+   /* Vector modes should be handled above.  */
+   return c_readstr (p, as_a <scalar_int_mode> (mode));
+ }
+ 
+ /* Callback routine for store_by_pieces.  Return the RTL of a register
+    containing GET_MODE_SIZE (MODE) consecutive copies of the unsigned
+    char value given in the RTL register data.  For example, if mode is
+    4 bytes wide, return the RTL for 0x01010101*data.  If PREV isn't
+    nullptr, it has the RTL info from the previous iteration.  */
+ 
+ static rtx
+ builtin_memset_gen_str (void *data, void *prev,
+ 			HOST_WIDE_INT offset ATTRIBUTE_UNUSED,
+ 			fixed_size_mode mode)
+ {
+   rtx target, coeff;
+   size_t size;
+   char *p;
+ 
+   size = GET_MODE_SIZE (mode);
+   if (size == 1)
+     return (rtx) data;
+ 
+   target = gen_memset_value_from_prev ((by_pieces_prev *) prev, mode);
+   if (target != nullptr)
+     return target;
+ 
+   if (VECTOR_MODE_P (mode))
+     {
+       gcc_assert (GET_MODE_INNER (mode) == QImode);
+ 
+       /* vec_duplicate_optab is a precondition to pick a vector mode for
+ 	 the memset expander.  */
+       insn_code icode = optab_handler (vec_duplicate_optab, mode);
+ 
+       target = targetm.gen_memset_scratch_rtx (mode);
+       class expand_operand ops[2];
+       create_output_operand (&ops[0], target, mode);
+       create_input_operand (&ops[1], (rtx) data, QImode);
+       expand_insn (icode, 2, ops);
+       if (!rtx_equal_p (target, ops[0].value))
+ 	emit_move_insn (target, ops[0].value);
+ 
+       return target;
+     }
+ 
+   p = XALLOCAVEC (char, size);
+   memset (p, 1, size);
+   /* Vector modes should be handled above.  */
+   coeff = c_readstr (p, as_a <scalar_int_mode> (mode));
+ 
+   target = convert_to_mode (mode, (rtx) data, 1);
+   target = expand_mult (mode, target, coeff, NULL_RTX, 1);
+   return force_reg (mode, target);
+ }
+ 
+ /* Expand expression EXP, which is a call to the memset builtin.  Return
+    NULL_RTX if we failed the caller should emit a normal call, otherwise
+    try to get the result in TARGET, if convenient (and in mode MODE if that's
+    convenient).  */
+ 
+ rtx
+ expand_builtin_memset (tree exp, rtx target, machine_mode mode)
+ {
+   if (!validate_arglist (exp,
+  			 POINTER_TYPE, INTEGER_TYPE, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tree dest = CALL_EXPR_ARG (exp, 0);
+   tree val = CALL_EXPR_ARG (exp, 1);
+   tree len = CALL_EXPR_ARG (exp, 2);
+ 
+   return expand_builtin_memset_args (dest, val, len, target, mode, exp);
+ }
+ 
+ /* Try to store VAL (or, if NULL_RTX, VALC) in LEN bytes starting at TO.
+    Return TRUE if successful, FALSE otherwise.  TO is assumed to be
+    aligned at an ALIGN-bits boundary.  LEN must be a multiple of
+    1<<CTZ_LEN between MIN_LEN and MAX_LEN.
+ 
+    The strategy is to issue one store_by_pieces for each power of two,
+    from most to least significant, guarded by a test on whether there
+    are at least that many bytes left to copy in LEN.
+ 
+    ??? Should we skip some powers of two in favor of loops?  Maybe start
+    at the max of TO/LEN/word alignment, at least when optimizing for
+    size, instead of ensuring O(log len) dynamic compares?  */
+ 
+ bool
+ try_store_by_multiple_pieces (rtx to, rtx len, unsigned int ctz_len,
+ 			      unsigned HOST_WIDE_INT min_len,
+ 			      unsigned HOST_WIDE_INT max_len,
+ 			      rtx val, char valc, unsigned int align)
+ {
+   int max_bits = floor_log2 (max_len);
+   int min_bits = floor_log2 (min_len);
+   int sctz_len = ctz_len;
+ 
+   gcc_checking_assert (sctz_len >= 0);
+ 
+   if (val)
+     valc = 1;
+ 
+   /* Bits more significant than TST_BITS are part of the shared prefix
+      in the binary representation of both min_len and max_len.  Since
+      they're identical, we don't need to test them in the loop.  */
+   int tst_bits = (max_bits != min_bits ? max_bits
+ 		  : floor_log2 (max_len ^ min_len));
+ 
+   /* Check whether it's profitable to start by storing a fixed BLKSIZE
+      bytes, to lower max_bits.  In the unlikely case of a constant LEN
+      (implied by identical MAX_LEN and MIN_LEN), we want to issue a
+      single store_by_pieces, but otherwise, select the minimum multiple
+      of the ALIGN (in bytes) and of the MCD of the possible LENs, that
+      brings MAX_LEN below TST_BITS, if that's lower than min_len.  */
+   unsigned HOST_WIDE_INT blksize;
+   if (max_len > min_len)
+     {
+       unsigned HOST_WIDE_INT alrng = MAX (HOST_WIDE_INT_1U << ctz_len,
+ 					  align / BITS_PER_UNIT);
+       blksize = max_len - (HOST_WIDE_INT_1U << tst_bits) + alrng;
+       blksize &= ~(alrng - 1);
+     }
+   else if (max_len == min_len)
+     blksize = max_len;
+   else
+     /* Huh, max_len < min_len?  Punt.  See pr100843.c.  */
+     return false;
+   if (min_len >= blksize)
+     {
+       min_len -= blksize;
+       min_bits = floor_log2 (min_len);
+       max_len -= blksize;
+       max_bits = floor_log2 (max_len);
+ 
+       tst_bits = (max_bits != min_bits ? max_bits
+ 		 : floor_log2 (max_len ^ min_len));
+     }
+   else
+     blksize = 0;
+ 
+   /* Check that we can use store by pieces for the maximum store count
+      we may issue (initial fixed-size block, plus conditional
+      power-of-two-sized from max_bits to ctz_len.  */
+   unsigned HOST_WIDE_INT xlenest = blksize;
+   if (max_bits >= 0)
+     xlenest += ((HOST_WIDE_INT_1U << max_bits) * 2
+ 		- (HOST_WIDE_INT_1U << ctz_len));
+   if (!can_store_by_pieces (xlenest, builtin_memset_read_str,
+ 			    &valc, align, true))
+     return false;
+ 
+   by_pieces_constfn constfun;
+   void *constfundata;
+   if (val)
+     {
+       constfun = builtin_memset_gen_str;
+       constfundata = val = force_reg (TYPE_MODE (unsigned_char_type_node),
+ 				      val);
+     }
+   else
+     {
+       constfun = builtin_memset_read_str;
+       constfundata = &valc;
+     }
+ 
+   rtx ptr = copy_addr_to_reg (XEXP (to, 0));
+   rtx rem = copy_to_mode_reg (ptr_mode, convert_to_mode (ptr_mode, len, 0));
+   to = replace_equiv_address (to, ptr);
+   set_mem_align (to, align);
+ 
+   if (blksize)
+     {
+       to = store_by_pieces (to, blksize,
+ 			    constfun, constfundata,
+ 			    align, true,
+ 			    max_len != 0 ? RETURN_END : RETURN_BEGIN);
+       if (max_len == 0)
+ 	return true;
+ 
+       /* Adjust PTR, TO and REM.  Since TO's address is likely
+ 	 PTR+offset, we have to replace it.  */
+       emit_move_insn (ptr, force_operand (XEXP (to, 0), NULL_RTX));
+       to = replace_equiv_address (to, ptr);
+       rtx rem_minus_blksize = plus_constant (ptr_mode, rem, -blksize);
+       emit_move_insn (rem, force_operand (rem_minus_blksize, NULL_RTX));
+     }
+ 
+   /* Iterate over power-of-two block sizes from the maximum length to
+      the least significant bit possibly set in the length.  */
+   for (int i = max_bits; i >= sctz_len; i--)
+     {
+       rtx_code_label *label = NULL;
+       blksize = HOST_WIDE_INT_1U << i;
+ 
+       /* If we're past the bits shared between min_ and max_len, expand
+ 	 a test on the dynamic length, comparing it with the
+ 	 BLKSIZE.  */
+       if (i <= tst_bits)
+ 	{
+ 	  label = gen_label_rtx ();
+ 	  emit_cmp_and_jump_insns (rem, GEN_INT (blksize), LT, NULL,
+ 				   ptr_mode, 1, label,
+ 				   profile_probability::even ());
+ 	}
+       /* If we are at a bit that is in the prefix shared by min_ and
+ 	 max_len, skip this BLKSIZE if the bit is clear.  */
+       else if ((max_len & blksize) == 0)
+ 	continue;
+ 
+       /* Issue a store of BLKSIZE bytes.  */
+       to = store_by_pieces (to, blksize,
+ 			    constfun, constfundata,
+ 			    align, true,
+ 			    i != sctz_len ? RETURN_END : RETURN_BEGIN);
+ 
+       /* Adjust REM and PTR, unless this is the last iteration.  */
+       if (i != sctz_len)
+ 	{
+ 	  emit_move_insn (ptr, force_operand (XEXP (to, 0), NULL_RTX));
+ 	  to = replace_equiv_address (to, ptr);
+ 	  rtx rem_minus_blksize = plus_constant (ptr_mode, rem, -blksize);
+ 	  emit_move_insn (rem, force_operand (rem_minus_blksize, NULL_RTX));
+ 	}
+ 
+       if (label)
+ 	{
+ 	  emit_label (label);
+ 
+ 	  /* Given conditional stores, the offset can no longer be
+ 	     known, so clear it.  */
+ 	  clear_mem_offset (to);
+ 	}
+     }
+ 
+   return true;
+ }
+ 
+ /* Helper function to do the actual work for expand_builtin_memset.  The
+    arguments to the builtin_memset call DEST, VAL, and LEN are broken out
+    so that this can also be called without constructing an actual CALL_EXPR.
+    The other arguments and return value are the same as for
+    expand_builtin_memset.  */
+ 
+ static rtx
+ expand_builtin_memset_args (tree dest, tree val, tree len,
+ 			    rtx target, machine_mode mode, tree orig_exp)
+ {
+   tree fndecl, fn;
+   enum built_in_function fcode;
+   machine_mode val_mode;
+   char c;
+   unsigned int dest_align;
+   rtx dest_mem, dest_addr, len_rtx;
+   HOST_WIDE_INT expected_size = -1;
+   unsigned int expected_align = 0;
+   unsigned HOST_WIDE_INT min_size;
+   unsigned HOST_WIDE_INT max_size;
+   unsigned HOST_WIDE_INT probable_max_size;
+ 
+   dest_align = get_pointer_alignment (dest);
+ 
+   /* If DEST is not a pointer type, don't do this operation in-line.  */
+   if (dest_align == 0)
+     return NULL_RTX;
+ 
+   if (currently_expanding_gimple_stmt)
+     stringop_block_profile (currently_expanding_gimple_stmt,
+ 			    &expected_align, &expected_size);
+ 
+   if (expected_align < dest_align)
+     expected_align = dest_align;
+ 
+   /* If the LEN parameter is zero, return DEST.  */
+   if (integer_zerop (len))
+     {
+       /* Evaluate and ignore VAL in case it has side-effects.  */
+       expand_expr (val, const0_rtx, VOIDmode, EXPAND_NORMAL);
+       return expand_expr (dest, target, mode, EXPAND_NORMAL);
+     }
+ 
+   /* Stabilize the arguments in case we fail.  */
+   dest = builtin_save_expr (dest);
+   val = builtin_save_expr (val);
+   len = builtin_save_expr (len);
+ 
+   len_rtx = expand_normal (len);
+   determine_block_size (len, len_rtx, &min_size, &max_size,
+ 			&probable_max_size);
+   dest_mem = get_memory_rtx (dest, len);
+   val_mode = TYPE_MODE (unsigned_char_type_node);
+ 
+   if (TREE_CODE (val) != INTEGER_CST
+       || target_char_cast (val, &c))
+     {
+       rtx val_rtx;
+ 
+       val_rtx = expand_normal (val);
+       val_rtx = convert_to_mode (val_mode, val_rtx, 0);
+ 
+       /* Assume that we can memset by pieces if we can store
+        * the coefficients by pieces (in the required modes).
+        * We can't pass builtin_memset_gen_str as that emits RTL.  */
+       c = 1;
+       if (tree_fits_uhwi_p (len)
+ 	  && can_store_by_pieces (tree_to_uhwi (len),
+ 				  builtin_memset_read_str, &c, dest_align,
+ 				  true))
+ 	{
+ 	  val_rtx = force_reg (val_mode, val_rtx);
+ 	  store_by_pieces (dest_mem, tree_to_uhwi (len),
+ 			   builtin_memset_gen_str, val_rtx, dest_align,
+ 			   true, RETURN_BEGIN);
+ 	}
+       else if (!set_storage_via_setmem (dest_mem, len_rtx, val_rtx,
+ 					dest_align, expected_align,
+ 					expected_size, min_size, max_size,
+ 					probable_max_size)
+ 	       && !try_store_by_multiple_pieces (dest_mem, len_rtx,
+ 						 tree_ctz (len),
+ 						 min_size, max_size,
+ 						 val_rtx, 0,
+ 						 dest_align))
+ 	goto do_libcall;
+ 
+       dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
+       dest_mem = convert_memory_address (ptr_mode, dest_mem);
+       return dest_mem;
+     }
+ 
+   if (c)
+     {
+       if (tree_fits_uhwi_p (len)
+ 	  && can_store_by_pieces (tree_to_uhwi (len),
+ 				  builtin_memset_read_str, &c, dest_align,
+ 				  true))
+ 	store_by_pieces (dest_mem, tree_to_uhwi (len),
+ 			 builtin_memset_read_str, &c, dest_align, true,
+ 			 RETURN_BEGIN);
+       else if (!set_storage_via_setmem (dest_mem, len_rtx,
+ 					gen_int_mode (c, val_mode),
+ 					dest_align, expected_align,
+ 					expected_size, min_size, max_size,
+ 					probable_max_size)
+ 	       && !try_store_by_multiple_pieces (dest_mem, len_rtx,
+ 						 tree_ctz (len),
+ 						 min_size, max_size,
+ 						 NULL_RTX, c,
+ 						 dest_align))
+ 	goto do_libcall;
+ 
+       dest_mem = force_operand (XEXP (dest_mem, 0), NULL_RTX);
+       dest_mem = convert_memory_address (ptr_mode, dest_mem);
+       return dest_mem;
+     }
+ 
+   set_mem_align (dest_mem, dest_align);
+   dest_addr = clear_storage_hints (dest_mem, len_rtx,
+ 				   CALL_EXPR_TAILCALL (orig_exp)
+ 				   ? BLOCK_OP_TAILCALL : BLOCK_OP_NORMAL,
+ 				   expected_align, expected_size,
+ 				   min_size, max_size,
+ 				   probable_max_size, tree_ctz (len));
+ 
+   if (dest_addr == 0)
+     {
+       dest_addr = force_operand (XEXP (dest_mem, 0), NULL_RTX);
+       dest_addr = convert_memory_address (ptr_mode, dest_addr);
+     }
+ 
+   return dest_addr;
+ 
+  do_libcall:
+   fndecl = get_callee_fndecl (orig_exp);
+   fcode = DECL_FUNCTION_CODE (fndecl);
+   if (fcode == BUILT_IN_MEMSET)
+     fn = build_call_nofold_loc (EXPR_LOCATION (orig_exp), fndecl, 3,
+ 				dest, val, len);
+   else if (fcode == BUILT_IN_BZERO)
+     fn = build_call_nofold_loc (EXPR_LOCATION (orig_exp), fndecl, 2,
+ 				dest, len);
+   else
+     gcc_unreachable ();
+   gcc_assert (TREE_CODE (fn) == CALL_EXPR);
+   CALL_EXPR_TAILCALL (fn) = CALL_EXPR_TAILCALL (orig_exp);
+   return expand_call (fn, target, target == const0_rtx);
+ }
+ 
+ /* Expand expression EXP, which is a call to the bzero builtin.  Return
+    NULL_RTX if we failed the caller should emit a normal call.  */
+ 
+ static rtx
+ expand_builtin_bzero (tree exp)
+ {
+   if (!validate_arglist (exp, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tree dest = CALL_EXPR_ARG (exp, 0);
+   tree size = CALL_EXPR_ARG (exp, 1);
+ 
+   /* New argument list transforming bzero(ptr x, int y) to
+      memset(ptr x, int 0, size_t y).   This is done this way
+      so that if it isn't expanded inline, we fallback to
+      calling bzero instead of memset.  */
+ 
+   location_t loc = EXPR_LOCATION (exp);
+ 
+   return expand_builtin_memset_args (dest, integer_zero_node,
+ 				     fold_convert_loc (loc,
+ 						       size_type_node, size),
+ 				     const0_rtx, VOIDmode, exp);
+ }
+ 
+ /* Try to expand cmpstr operation ICODE with the given operands.
+    Return the result rtx on success, otherwise return null.  */
+ 
+ static rtx
+ expand_cmpstr (insn_code icode, rtx target, rtx arg1_rtx, rtx arg2_rtx,
+ 	       HOST_WIDE_INT align)
+ {
+   machine_mode insn_mode = insn_data[icode].operand[0].mode;
+ 
+   if (target && (!REG_P (target) || HARD_REGISTER_P (target)))
+     target = NULL_RTX;
+ 
+   class expand_operand ops[4];
+   create_output_operand (&ops[0], target, insn_mode);
+   create_fixed_operand (&ops[1], arg1_rtx);
+   create_fixed_operand (&ops[2], arg2_rtx);
+   create_integer_operand (&ops[3], align);
+   if (maybe_expand_insn (icode, 4, ops))
+     return ops[0].value;
+   return NULL_RTX;
+ }
+ 
+ /* Expand expression EXP, which is a call to the memcmp built-in function.
+    Return NULL_RTX if we failed and the caller should emit a normal call,
+    otherwise try to get the result in TARGET, if convenient.
+    RESULT_EQ is true if we can relax the returned value to be either zero
+    or nonzero, without caring about the sign.  */
+ 
+ static rtx
+ expand_builtin_memcmp (tree exp, rtx target, bool result_eq)
+ {
+   if (!validate_arglist (exp,
+  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tree arg1 = CALL_EXPR_ARG (exp, 0);
+   tree arg2 = CALL_EXPR_ARG (exp, 1);
+   tree len = CALL_EXPR_ARG (exp, 2);
+ 
+   /* Due to the performance benefit, always inline the calls first
+      when result_eq is false.  */
+   rtx result = NULL_RTX;
+   enum built_in_function fcode = DECL_FUNCTION_CODE (get_callee_fndecl (exp));
+   if (!result_eq && fcode != BUILT_IN_BCMP)
+     {
+       result = inline_expand_builtin_bytecmp (exp, target);
+       if (result)
+ 	return result;
+     }
+ 
+   machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
+   location_t loc = EXPR_LOCATION (exp);
+ 
+   unsigned int arg1_align = get_pointer_alignment (arg1) / BITS_PER_UNIT;
+   unsigned int arg2_align = get_pointer_alignment (arg2) / BITS_PER_UNIT;
+ 
+   /* If we don't have POINTER_TYPE, call the function.  */
+   if (arg1_align == 0 || arg2_align == 0)
+     return NULL_RTX;
+ 
+   rtx arg1_rtx = get_memory_rtx (arg1, len);
+   rtx arg2_rtx = get_memory_rtx (arg2, len);
+   rtx len_rtx = expand_normal (fold_convert_loc (loc, sizetype, len));
+ 
+   /* Set MEM_SIZE as appropriate.  */
+   if (CONST_INT_P (len_rtx))
+     {
+       set_mem_size (arg1_rtx, INTVAL (len_rtx));
+       set_mem_size (arg2_rtx, INTVAL (len_rtx));
+     }
+ 
+   by_pieces_constfn constfn = NULL;
+ 
+   /* Try to get the byte representation of the constant ARG2 (or, only
+      when the function's result is used for equality to zero, ARG1)
+      points to, with its byte size in NBYTES.  */
+   unsigned HOST_WIDE_INT nbytes;
+   const char *rep = getbyterep (arg2, &nbytes);
+   if (result_eq && rep == NULL)
+     {
+       /* For equality to zero the arguments are interchangeable.  */
+       rep = getbyterep (arg1, &nbytes);
+       if (rep != NULL)
+ 	std::swap (arg1_rtx, arg2_rtx);
+     }
+ 
+   /* If the function's constant bound LEN_RTX is less than or equal
+      to the byte size of the representation of the constant argument,
+      and if block move would be done by pieces, we can avoid loading
+      the bytes from memory and only store the computed constant result.  */
+   if (rep
+       && CONST_INT_P (len_rtx)
+       && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= nbytes)
+     constfn = builtin_memcpy_read_str;
+ 
+   result = emit_block_cmp_hints (arg1_rtx, arg2_rtx, len_rtx,
+ 				 TREE_TYPE (len), target,
+ 				 result_eq, constfn,
+ 				 CONST_CAST (char *, rep));
+ 
+   if (result)
+     {
+       /* Return the value in the proper mode for this function.  */
+       if (GET_MODE (result) == mode)
+ 	return result;
+ 
+       if (target != 0)
+ 	{
+ 	  convert_move (target, result, 0);
+ 	  return target;
+ 	}
+ 
+       return convert_to_mode (mode, result, 0);
+     }
+ 
+   return NULL_RTX;
+ }
+ 
+ /* Expand expression EXP, which is a call to the strcmp builtin.  Return NULL_RTX
+    if we failed the caller should emit a normal call, otherwise try to get
+    the result in TARGET, if convenient.  */
+ 
+ static rtx
+ expand_builtin_strcmp (tree exp, ATTRIBUTE_UNUSED rtx target)
+ {
+   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tree arg1 = CALL_EXPR_ARG (exp, 0);
+   tree arg2 = CALL_EXPR_ARG (exp, 1);
+ 
+   /* Due to the performance benefit, always inline the calls first.  */
+   rtx result = NULL_RTX;
+   result = inline_expand_builtin_bytecmp (exp, target);
+   if (result)
+     return result;
+ 
+   insn_code cmpstr_icode = direct_optab_handler (cmpstr_optab, SImode);
+   insn_code cmpstrn_icode = direct_optab_handler (cmpstrn_optab, SImode);
+   if (cmpstr_icode == CODE_FOR_nothing && cmpstrn_icode == CODE_FOR_nothing)
+     return NULL_RTX;
+ 
+   unsigned int arg1_align = get_pointer_alignment (arg1) / BITS_PER_UNIT;
+   unsigned int arg2_align = get_pointer_alignment (arg2) / BITS_PER_UNIT;
+ 
+   /* If we don't have POINTER_TYPE, call the function.  */
+   if (arg1_align == 0 || arg2_align == 0)
+     return NULL_RTX;
+ 
+   /* Stabilize the arguments in case gen_cmpstr(n)si fail.  */
+   arg1 = builtin_save_expr (arg1);
+   arg2 = builtin_save_expr (arg2);
+ 
+   rtx arg1_rtx = get_memory_rtx (arg1, NULL);
+   rtx arg2_rtx = get_memory_rtx (arg2, NULL);
+ 
+   /* Try to call cmpstrsi.  */
+   if (cmpstr_icode != CODE_FOR_nothing)
+     result = expand_cmpstr (cmpstr_icode, target, arg1_rtx, arg2_rtx,
+ 			    MIN (arg1_align, arg2_align));
+ 
+   /* Try to determine at least one length and call cmpstrnsi.  */
+   if (!result && cmpstrn_icode != CODE_FOR_nothing)
+     {
+       tree len;
+       rtx arg3_rtx;
+ 
+       tree len1 = c_strlen (arg1, 1);
+       tree len2 = c_strlen (arg2, 1);
+ 
+       if (len1)
+ 	len1 = size_binop (PLUS_EXPR, ssize_int (1), len1);
+       if (len2)
+ 	len2 = size_binop (PLUS_EXPR, ssize_int (1), len2);
+ 
+       /* If we don't have a constant length for the first, use the length
+ 	 of the second, if we know it.  We don't require a constant for
+ 	 this case; some cost analysis could be done if both are available
+ 	 but neither is constant.  For now, assume they're equally cheap,
+ 	 unless one has side effects.  If both strings have constant lengths,
+ 	 use the smaller.  */
+ 
+       if (!len1)
+ 	len = len2;
+       else if (!len2)
+ 	len = len1;
+       else if (TREE_SIDE_EFFECTS (len1))
+ 	len = len2;
+       else if (TREE_SIDE_EFFECTS (len2))
+ 	len = len1;
+       else if (TREE_CODE (len1) != INTEGER_CST)
+ 	len = len2;
+       else if (TREE_CODE (len2) != INTEGER_CST)
+ 	len = len1;
+       else if (tree_int_cst_lt (len1, len2))
+ 	len = len1;
+       else
+ 	len = len2;
+ 
+       /* If both arguments have side effects, we cannot optimize.  */
+       if (len && !TREE_SIDE_EFFECTS (len))
+ 	{
+ 	  arg3_rtx = expand_normal (len);
+ 	  result = expand_cmpstrn_or_cmpmem
+ 	    (cmpstrn_icode, target, arg1_rtx, arg2_rtx, TREE_TYPE (len),
+ 	     arg3_rtx, MIN (arg1_align, arg2_align));
+ 	}
+     }
+ 
+   tree fndecl = get_callee_fndecl (exp);
+   if (result)
+     {
+       /* Return the value in the proper mode for this function.  */
+       machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
+       if (GET_MODE (result) == mode)
+ 	return result;
+       if (target == 0)
+ 	return convert_to_mode (mode, result, 0);
+       convert_move (target, result, 0);
+       return target;
+     }
+ 
+   /* Expand the library call ourselves using a stabilized argument
+      list to avoid re-evaluating the function's arguments twice.  */
+   tree fn = build_call_nofold_loc (EXPR_LOCATION (exp), fndecl, 2, arg1, arg2);
+   copy_warning (fn, exp);
+   gcc_assert (TREE_CODE (fn) == CALL_EXPR);
+   CALL_EXPR_TAILCALL (fn) = CALL_EXPR_TAILCALL (exp);
+   return expand_call (fn, target, target == const0_rtx);
+ }
+ 
+ /* Expand expression EXP, which is a call to the strncmp builtin. Return
+    NULL_RTX if we failed the caller should emit a normal call, otherwise
+    try to get the result in TARGET, if convenient.  */
+ 
+ static rtx
+ expand_builtin_strncmp (tree exp, ATTRIBUTE_UNUSED rtx target,
+ 			ATTRIBUTE_UNUSED machine_mode mode)
+ {
+   if (!validate_arglist (exp,
+  			 POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tree arg1 = CALL_EXPR_ARG (exp, 0);
+   tree arg2 = CALL_EXPR_ARG (exp, 1);
+   tree arg3 = CALL_EXPR_ARG (exp, 2);
+ 
+   location_t loc = EXPR_LOCATION (exp);
+   tree len1 = c_strlen (arg1, 1);
+   tree len2 = c_strlen (arg2, 1);
+ 
+   /* Due to the performance benefit, always inline the calls first.  */
+   rtx result = NULL_RTX;
+   result = inline_expand_builtin_bytecmp (exp, target);
+   if (result)
+     return result;
+ 
+   /* If c_strlen can determine an expression for one of the string
+      lengths, and it doesn't have side effects, then emit cmpstrnsi
+      using length MIN(strlen(string)+1, arg3).  */
+   insn_code cmpstrn_icode = direct_optab_handler (cmpstrn_optab, SImode);
+   if (cmpstrn_icode == CODE_FOR_nothing)
+     return NULL_RTX;
+ 
+   tree len;
+ 
+   unsigned int arg1_align = get_pointer_alignment (arg1) / BITS_PER_UNIT;
+   unsigned int arg2_align = get_pointer_alignment (arg2) / BITS_PER_UNIT;
+ 
+   if (len1)
+     len1 = size_binop_loc (loc, PLUS_EXPR, ssize_int (1), len1);
+   if (len2)
+     len2 = size_binop_loc (loc, PLUS_EXPR, ssize_int (1), len2);
+ 
+   tree len3 = fold_convert_loc (loc, sizetype, arg3);
+ 
+   /* If we don't have a constant length for the first, use the length
+      of the second, if we know it.  If neither string is constant length,
+      use the given length argument.  We don't require a constant for
+      this case; some cost analysis could be done if both are available
+      but neither is constant.  For now, assume they're equally cheap,
+      unless one has side effects.  If both strings have constant lengths,
+      use the smaller.  */
+ 
+   if (!len1 && !len2)
+     len = len3;
+   else if (!len1)
+     len = len2;
+   else if (!len2)
+     len = len1;
+   else if (TREE_SIDE_EFFECTS (len1))
+     len = len2;
+   else if (TREE_SIDE_EFFECTS (len2))
+     len = len1;
+   else if (TREE_CODE (len1) != INTEGER_CST)
+     len = len2;
+   else if (TREE_CODE (len2) != INTEGER_CST)
+     len = len1;
+   else if (tree_int_cst_lt (len1, len2))
+     len = len1;
+   else
+     len = len2;
+ 
+   /* If we are not using the given length, we must incorporate it here.
+      The actual new length parameter will be MIN(len,arg3) in this case.  */
+   if (len != len3)
+     {
+       len = fold_convert_loc (loc, sizetype, len);
+       len = fold_build2_loc (loc, MIN_EXPR, TREE_TYPE (len), len, len3);
+     }
+   rtx arg1_rtx = get_memory_rtx (arg1, len);
+   rtx arg2_rtx = get_memory_rtx (arg2, len);
+   rtx arg3_rtx = expand_normal (len);
+   result = expand_cmpstrn_or_cmpmem (cmpstrn_icode, target, arg1_rtx,
+ 				     arg2_rtx, TREE_TYPE (len), arg3_rtx,
+ 				     MIN (arg1_align, arg2_align));
+ 
+   tree fndecl = get_callee_fndecl (exp);
+   if (result)
+     {
+       /* Return the value in the proper mode for this function.  */
+       mode = TYPE_MODE (TREE_TYPE (exp));
+       if (GET_MODE (result) == mode)
+ 	return result;
+       if (target == 0)
+ 	return convert_to_mode (mode, result, 0);
+       convert_move (target, result, 0);
+       return target;
+     }
+ 
+   /* Expand the library call ourselves using a stabilized argument
+      list to avoid re-evaluating the function's arguments twice.  */
+   tree call = build_call_nofold_loc (loc, fndecl, 3, arg1, arg2, len);
+   copy_warning (call, exp);
+   gcc_assert (TREE_CODE (call) == CALL_EXPR);
+   CALL_EXPR_TAILCALL (call) = CALL_EXPR_TAILCALL (exp);
+   return expand_call (call, target, target == const0_rtx);
+ }
+ 
+ /* Expand a call to __builtin_saveregs, generating the result in TARGET,
+    if that's convenient.  */
+ 
+ rtx
+ expand_builtin_saveregs (void)
+ {
+   rtx val;
+   rtx_insn *seq;
+ 
+   /* Don't do __builtin_saveregs more than once in a function.
+      Save the result of the first call and reuse it.  */
+   if (saveregs_value != 0)
+     return saveregs_value;
+ 
+   /* When this function is called, it means that registers must be
+      saved on entry to this function.  So we migrate the call to the
+      first insn of this function.  */
+ 
+   start_sequence ();
+ 
+   /* Do whatever the machine needs done in this case.  */
+   val = targetm.calls.expand_builtin_saveregs ();
+ 
+   seq = get_insns ();
+   end_sequence ();
+ 
+   saveregs_value = val;
+ 
+   /* Put the insns after the NOTE that starts the function.  If this
+      is inside a start_sequence, make the outer-level insn chain current, so
+      the code is placed at the start of the function.  */
+   push_topmost_sequence ();
+   emit_insn_after (seq, entry_of_function ());
+   pop_topmost_sequence ();
+ 
+   return val;
+ }
+ 
+ /* Expand a call to __builtin_next_arg.  */
+ 
+ static rtx
+ expand_builtin_next_arg (void)
+ {
+   /* Checking arguments is already done in fold_builtin_next_arg
+      that must be called before this function.  */
+   return expand_binop (ptr_mode, add_optab,
+ 		       crtl->args.internal_arg_pointer,
+ 		       crtl->args.arg_offset_rtx,
+ 		       NULL_RTX, 0, OPTAB_LIB_WIDEN);
+ }
+ 
+ /* Make it easier for the backends by protecting the valist argument
+    from multiple evaluations.  */
+ 
+ static tree
+ stabilize_va_list_loc (location_t loc, tree valist, int needs_lvalue)
+ {
+   tree vatype = targetm.canonical_va_list_type (TREE_TYPE (valist));
+ 
+   /* The current way of determining the type of valist is completely
+      bogus.  We should have the information on the va builtin instead.  */
+   if (!vatype)
+     vatype = targetm.fn_abi_va_list (cfun->decl);
+ 
+   if (TREE_CODE (vatype) == ARRAY_TYPE)
+     {
+       if (TREE_SIDE_EFFECTS (valist))
+ 	valist = save_expr (valist);
+ 
+       /* For this case, the backends will be expecting a pointer to
+ 	 vatype, but it's possible we've actually been given an array
+ 	 (an actual TARGET_CANONICAL_VA_LIST_TYPE (valist)).
+ 	 So fix it.  */
+       if (TREE_CODE (TREE_TYPE (valist)) == ARRAY_TYPE)
+ 	{
+ 	  tree p1 = build_pointer_type (TREE_TYPE (vatype));
+ 	  valist = build_fold_addr_expr_with_type_loc (loc, valist, p1);
+ 	}
+     }
+   else
+     {
+       tree pt = build_pointer_type (vatype);
+ 
+       if (! needs_lvalue)
+ 	{
+ 	  if (! TREE_SIDE_EFFECTS (valist))
+ 	    return valist;
+ 
+ 	  valist = fold_build1_loc (loc, ADDR_EXPR, pt, valist);
+ 	  TREE_SIDE_EFFECTS (valist) = 1;
+ 	}
+ 
+       if (TREE_SIDE_EFFECTS (valist))
+ 	valist = save_expr (valist);
+       valist = fold_build2_loc (loc, MEM_REF,
+ 				vatype, valist, build_int_cst (pt, 0));
+     }
+ 
+   return valist;
+ }
+ 
+ /* The "standard" definition of va_list is void*.  */
+ 
+ tree
+ std_build_builtin_va_list (void)
+ {
+   return ptr_type_node;
+ }
+ 
+ /* The "standard" abi va_list is va_list_type_node.  */
+ 
+ tree
+ std_fn_abi_va_list (tree fndecl ATTRIBUTE_UNUSED)
+ {
+   return va_list_type_node;
+ }
+ 
+ /* The "standard" type of va_list is va_list_type_node.  */
+ 
+ tree
+ std_canonical_va_list_type (tree type)
+ {
+   tree wtype, htype;
+ 
+   wtype = va_list_type_node;
+   htype = type;
+ 
+   if (TREE_CODE (wtype) == ARRAY_TYPE)
+     {
+       /* If va_list is an array type, the argument may have decayed
+ 	 to a pointer type, e.g. by being passed to another function.
+ 	 In that case, unwrap both types so that we can compare the
+ 	 underlying records.  */
+       if (TREE_CODE (htype) == ARRAY_TYPE
+ 	  || POINTER_TYPE_P (htype))
+ 	{
+ 	  wtype = TREE_TYPE (wtype);
+ 	  htype = TREE_TYPE (htype);
+ 	}
+     }
+   if (TYPE_MAIN_VARIANT (wtype) == TYPE_MAIN_VARIANT (htype))
+     return va_list_type_node;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* The "standard" implementation of va_start: just assign `nextarg' to
+    the variable.  */
+ 
+ void
+ std_expand_builtin_va_start (tree valist, rtx nextarg)
+ {
+   rtx va_r = expand_expr (valist, NULL_RTX, VOIDmode, EXPAND_WRITE);
+   convert_move (va_r, nextarg, 0);
+ }
+ 
+ /* Expand EXP, a call to __builtin_va_start.  */
+ 
+ static rtx
+ expand_builtin_va_start (tree exp)
+ {
+   rtx nextarg;
+   tree valist;
+   location_t loc = EXPR_LOCATION (exp);
+ 
+   if (call_expr_nargs (exp) < 2)
+     {
+       error_at (loc, "too few arguments to function %<va_start%>");
+       return const0_rtx;
+     }
+ 
+   if (fold_builtin_next_arg (exp, true))
+     return const0_rtx;
+ 
+   nextarg = expand_builtin_next_arg ();
+   valist = stabilize_va_list_loc (loc, CALL_EXPR_ARG (exp, 0), 1);
+ 
+   if (targetm.expand_builtin_va_start)
+     targetm.expand_builtin_va_start (valist, nextarg);
+   else
+     std_expand_builtin_va_start (valist, nextarg);
+ 
+   return const0_rtx;
+ }
+ 
+ /* Expand EXP, a call to __builtin_va_end.  */
+ 
+ static rtx
+ expand_builtin_va_end (tree exp)
+ {
+   tree valist = CALL_EXPR_ARG (exp, 0);
+ 
+   /* Evaluate for side effects, if needed.  I hate macros that don't
+      do that.  */
+   if (TREE_SIDE_EFFECTS (valist))
+     expand_expr (valist, const0_rtx, VOIDmode, EXPAND_NORMAL);
+ 
+   return const0_rtx;
+ }
+ 
+ /* Expand EXP, a call to __builtin_va_copy.  We do this as a
+    builtin rather than just as an assignment in stdarg.h because of the
+    nastiness of array-type va_list types.  */
+ 
+ static rtx
+ expand_builtin_va_copy (tree exp)
+ {
+   tree dst, src, t;
+   location_t loc = EXPR_LOCATION (exp);
+ 
+   dst = CALL_EXPR_ARG (exp, 0);
+   src = CALL_EXPR_ARG (exp, 1);
+ 
+   dst = stabilize_va_list_loc (loc, dst, 1);
+   src = stabilize_va_list_loc (loc, src, 0);
+ 
+   gcc_assert (cfun != NULL && cfun->decl != NULL_TREE);
+ 
+   if (TREE_CODE (targetm.fn_abi_va_list (cfun->decl)) != ARRAY_TYPE)
+     {
+       t = build2 (MODIFY_EXPR, targetm.fn_abi_va_list (cfun->decl), dst, src);
+       TREE_SIDE_EFFECTS (t) = 1;
+       expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
+     }
+   else
+     {
+       rtx dstb, srcb, size;
+ 
+       /* Evaluate to pointers.  */
+       dstb = expand_expr (dst, NULL_RTX, Pmode, EXPAND_NORMAL);
+       srcb = expand_expr (src, NULL_RTX, Pmode, EXPAND_NORMAL);
+       size = expand_expr (TYPE_SIZE_UNIT (targetm.fn_abi_va_list (cfun->decl)),
+       		  NULL_RTX, VOIDmode, EXPAND_NORMAL);
+ 
+       dstb = convert_memory_address (Pmode, dstb);
+       srcb = convert_memory_address (Pmode, srcb);
+ 
+       /* "Dereference" to BLKmode memories.  */
+       dstb = gen_rtx_MEM (BLKmode, dstb);
+       set_mem_alias_set (dstb, get_alias_set (TREE_TYPE (TREE_TYPE (dst))));
+       set_mem_align (dstb, TYPE_ALIGN (targetm.fn_abi_va_list (cfun->decl)));
+       srcb = gen_rtx_MEM (BLKmode, srcb);
+       set_mem_alias_set (srcb, get_alias_set (TREE_TYPE (TREE_TYPE (src))));
+       set_mem_align (srcb, TYPE_ALIGN (targetm.fn_abi_va_list (cfun->decl)));
+ 
+       /* Copy.  */
+       emit_block_move (dstb, srcb, size, BLOCK_OP_NORMAL);
+     }
+ 
+   return const0_rtx;
+ }
+ 
+ /* Expand a call to one of the builtin functions __builtin_frame_address or
+    __builtin_return_address.  */
+ 
+ static rtx
+ expand_builtin_frame_address (tree fndecl, tree exp)
+ {
+   /* The argument must be a nonnegative integer constant.
+      It counts the number of frames to scan up the stack.
+      The value is either the frame pointer value or the return
+      address saved in that frame.  */
+   if (call_expr_nargs (exp) == 0)
+     /* Warning about missing arg was already issued.  */
+     return const0_rtx;
+   else if (! tree_fits_uhwi_p (CALL_EXPR_ARG (exp, 0)))
+     {
+       error ("invalid argument to %qD", fndecl);
+       return const0_rtx;
+     }
+   else
+     {
+       /* Number of frames to scan up the stack.  */
+       unsigned HOST_WIDE_INT count = tree_to_uhwi (CALL_EXPR_ARG (exp, 0));
+ 
+       rtx tem = expand_builtin_return_addr (DECL_FUNCTION_CODE (fndecl), count);
+ 
+       /* Some ports cannot access arbitrary stack frames.  */
+       if (tem == NULL)
+ 	{
+ 	  warning (0, "unsupported argument to %qD", fndecl);
+ 	  return const0_rtx;
+ 	}
+ 
+       if (count)
+ 	{
+ 	  /* Warn since no effort is made to ensure that any frame
+ 	     beyond the current one exists or can be safely reached.  */
+ 	  warning (OPT_Wframe_address, "calling %qD with "
+ 		   "a nonzero argument is unsafe", fndecl);
+ 	}
+ 
+       /* For __builtin_frame_address, return what we've got.  */
+       if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FRAME_ADDRESS)
+ 	return tem;
+ 
+       if (!REG_P (tem)
+ 	  && ! CONSTANT_P (tem))
+ 	tem = copy_addr_to_reg (tem);
+       return tem;
+     }
+ }
+ 
+ /* Expand EXP, a call to the alloca builtin.  Return NULL_RTX if we
+    failed and the caller should emit a normal call.  */
+ 
+ static rtx
+ expand_builtin_alloca (tree exp)
+ {
+   rtx op0;
+   rtx result;
+   unsigned int align;
+   tree fndecl = get_callee_fndecl (exp);
+   HOST_WIDE_INT max_size;
+   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
+   bool alloca_for_var = CALL_ALLOCA_FOR_VAR_P (exp);
+   bool valid_arglist
+     = (fcode == BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX
+        ? validate_arglist (exp, INTEGER_TYPE, INTEGER_TYPE, INTEGER_TYPE,
+ 			   VOID_TYPE)
+        : fcode == BUILT_IN_ALLOCA_WITH_ALIGN
+ 	 ? validate_arglist (exp, INTEGER_TYPE, INTEGER_TYPE, VOID_TYPE)
+ 	 : validate_arglist (exp, INTEGER_TYPE, VOID_TYPE));
+ 
+   if (!valid_arglist)
+     return NULL_RTX;
+ 
+   /* Compute the argument.  */
+   op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
+ 
+   /* Compute the alignment.  */
+   align = (fcode == BUILT_IN_ALLOCA
+ 	   ? BIGGEST_ALIGNMENT
+ 	   : TREE_INT_CST_LOW (CALL_EXPR_ARG (exp, 1)));
+ 
+   /* Compute the maximum size.  */
+   max_size = (fcode == BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX
+               ? TREE_INT_CST_LOW (CALL_EXPR_ARG (exp, 2))
+               : -1);
+ 
+   /* Allocate the desired space.  If the allocation stems from the declaration
+      of a variable-sized object, it cannot accumulate.  */
+   result
+     = allocate_dynamic_stack_space (op0, 0, align, max_size, alloca_for_var);
+   result = convert_memory_address (ptr_mode, result);
+ 
+   /* Dynamic allocations for variables are recorded during gimplification.  */
+   if (!alloca_for_var && (flag_callgraph_info & CALLGRAPH_INFO_DYNAMIC_ALLOC))
+     record_dynamic_alloc (exp);
+ 
+   return result;
+ }
+ 
+ /* Emit a call to __asan_allocas_unpoison call in EXP.  Add to second argument
+    of the call virtual_stack_dynamic_rtx - stack_pointer_rtx, which is the
+    STACK_DYNAMIC_OFFSET value.  See motivation for this in comment to
+    handle_builtin_stack_restore function.  */
+ 
+ static rtx
+ expand_asan_emit_allocas_unpoison (tree exp)
+ {
+   tree arg0 = CALL_EXPR_ARG (exp, 0);
+   tree arg1 = CALL_EXPR_ARG (exp, 1);
+   rtx top = expand_expr (arg0, NULL_RTX, ptr_mode, EXPAND_NORMAL);
+   rtx bot = expand_expr (arg1, NULL_RTX, ptr_mode, EXPAND_NORMAL);
+   rtx off = expand_simple_binop (Pmode, MINUS, virtual_stack_dynamic_rtx,
+ 				 stack_pointer_rtx, NULL_RTX, 0,
+ 				 OPTAB_LIB_WIDEN);
+   off = convert_modes (ptr_mode, Pmode, off, 0);
+   bot = expand_simple_binop (ptr_mode, PLUS, bot, off, NULL_RTX, 0,
+ 			     OPTAB_LIB_WIDEN);
+   rtx ret = init_one_libfunc ("__asan_allocas_unpoison");
+   ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode,
+ 				 top, ptr_mode, bot, ptr_mode);
+   return ret;
+ }
+ 
+ /* Expand a call to bswap builtin in EXP.
+    Return NULL_RTX if a normal call should be emitted rather than expanding the
+    function in-line.  If convenient, the result should be placed in TARGET.
+    SUBTARGET may be used as the target for computing one of EXP's operands.  */
+ 
+ static rtx
+ expand_builtin_bswap (machine_mode target_mode, tree exp, rtx target,
+ 		      rtx subtarget)
+ {
+   tree arg;
+   rtx op0;
+ 
+   if (!validate_arglist (exp, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   arg = CALL_EXPR_ARG (exp, 0);
+   op0 = expand_expr (arg,
+ 		     subtarget && GET_MODE (subtarget) == target_mode
+ 		     ? subtarget : NULL_RTX,
+ 		     target_mode, EXPAND_NORMAL);
+   if (GET_MODE (op0) != target_mode)
+     op0 = convert_to_mode (target_mode, op0, 1);
+ 
+   target = expand_unop (target_mode, bswap_optab, op0, target, 1);
+ 
+   gcc_assert (target);
+ 
+   return convert_to_mode (target_mode, target, 1);
+ }
+ 
+ /* Expand a call to a unary builtin in EXP.
+    Return NULL_RTX if a normal call should be emitted rather than expanding the
+    function in-line.  If convenient, the result should be placed in TARGET.
+    SUBTARGET may be used as the target for computing one of EXP's operands.  */
+ 
+ static rtx
+ expand_builtin_unop (machine_mode target_mode, tree exp, rtx target,
+ 		     rtx subtarget, optab op_optab)
+ {
+   rtx op0;
+ 
+   if (!validate_arglist (exp, INTEGER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   /* Compute the argument.  */
+   op0 = expand_expr (CALL_EXPR_ARG (exp, 0),
+ 		     (subtarget
+ 		      && (TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (exp, 0)))
+ 			  == GET_MODE (subtarget))) ? subtarget : NULL_RTX,
+ 		     VOIDmode, EXPAND_NORMAL);
+   /* Compute op, into TARGET if possible.
+      Set TARGET to wherever the result comes back.  */
+   target = expand_unop (TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (exp, 0))),
+ 			op_optab, op0, target, op_optab != clrsb_optab);
+   gcc_assert (target);
+ 
+   return convert_to_mode (target_mode, target, 0);
+ }
+ 
+ /* Expand a call to __builtin_expect.  We just return our argument
+    as the builtin_expect semantic should've been already executed by
+    tree branch prediction pass. */
+ 
+ static rtx
+ expand_builtin_expect (tree exp, rtx target)
+ {
+   tree arg;
+ 
+   if (call_expr_nargs (exp) < 2)
+     return const0_rtx;
+   arg = CALL_EXPR_ARG (exp, 0);
+ 
+   target = expand_expr (arg, target, VOIDmode, EXPAND_NORMAL);
+   /* When guessing was done, the hints should be already stripped away.  */
+   gcc_assert (!flag_guess_branch_prob
+ 	      || optimize == 0 || seen_error ());
+   return target;
+ }
+ 
+ /* Expand a call to __builtin_expect_with_probability.  We just return our
+    argument as the builtin_expect semantic should've been already executed by
+    tree branch prediction pass.  */
+ 
+ static rtx
+ expand_builtin_expect_with_probability (tree exp, rtx target)
+ {
+   tree arg;
+ 
+   if (call_expr_nargs (exp) < 3)
+     return const0_rtx;
+   arg = CALL_EXPR_ARG (exp, 0);
+ 
+   target = expand_expr (arg, target, VOIDmode, EXPAND_NORMAL);
+   /* When guessing was done, the hints should be already stripped away.  */
+   gcc_assert (!flag_guess_branch_prob
+ 	      || optimize == 0 || seen_error ());
+   return target;
+ }
+ 
+ 
+ /* Expand a call to __builtin_assume_aligned.  We just return our first
+    argument as the builtin_assume_aligned semantic should've been already
+    executed by CCP.  */
+ 
+ static rtx
+ expand_builtin_assume_aligned (tree exp, rtx target)
+ {
+   if (call_expr_nargs (exp) < 2)
+     return const0_rtx;
+   target = expand_expr (CALL_EXPR_ARG (exp, 0), target, VOIDmode,
+ 			EXPAND_NORMAL);
+   gcc_assert (!TREE_SIDE_EFFECTS (CALL_EXPR_ARG (exp, 1))
+ 	      && (call_expr_nargs (exp) < 3
+ 		  || !TREE_SIDE_EFFECTS (CALL_EXPR_ARG (exp, 2))));
+   return target;
+ }
+ 
+ void
+ expand_builtin_trap (void)
+ {
+   if (targetm.have_trap ())
+     {
+       rtx_insn *insn = emit_insn (targetm.gen_trap ());
+       /* For trap insns when not accumulating outgoing args force
+ 	 REG_ARGS_SIZE note to prevent crossjumping of calls with
+ 	 different args sizes.  */
+       if (!ACCUMULATE_OUTGOING_ARGS)
+ 	add_args_size_note (insn, stack_pointer_delta);
+     }
+   else
+     {
+       tree fn = builtin_decl_implicit (BUILT_IN_ABORT);
+       tree call_expr = build_call_expr (fn, 0);
+       expand_call (call_expr, NULL_RTX, false);
+     }
+ 
+   emit_barrier ();
+ }
+ 
+ /* Expand a call to __builtin_unreachable.  We do nothing except emit
+    a barrier saying that control flow will not pass here.
+ 
+    It is the responsibility of the program being compiled to ensure
+    that control flow does never reach __builtin_unreachable.  */
+ static void
+ expand_builtin_unreachable (void)
+ {
+   emit_barrier ();
+ }
+ 
+ /* Expand EXP, a call to fabs, fabsf or fabsl.
+    Return NULL_RTX if a normal call should be emitted rather than expanding
+    the function inline.  If convenient, the result should be placed
+    in TARGET.  SUBTARGET may be used as the target for computing
+    the operand.  */
+ 
+ static rtx
+ expand_builtin_fabs (tree exp, rtx target, rtx subtarget)
+ {
+   machine_mode mode;
+   tree arg;
+   rtx op0;
+ 
+   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   arg = CALL_EXPR_ARG (exp, 0);
+   CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
+   mode = TYPE_MODE (TREE_TYPE (arg));
+   op0 = expand_expr (arg, subtarget, VOIDmode, EXPAND_NORMAL);
+   return expand_abs (mode, op0, target, 0, safe_from_p (target, arg, 1));
+ }
+ 
+ /* Expand EXP, a call to copysign, copysignf, or copysignl.
+    Return NULL is a normal call should be emitted rather than expanding the
+    function inline.  If convenient, the result should be placed in TARGET.
+    SUBTARGET may be used as the target for computing the operand.  */
+ 
+ static rtx
+ expand_builtin_copysign (tree exp, rtx target, rtx subtarget)
+ {
+   rtx op0, op1;
+   tree arg;
+ 
+   if (!validate_arglist (exp, REAL_TYPE, REAL_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   arg = CALL_EXPR_ARG (exp, 0);
+   op0 = expand_expr (arg, subtarget, VOIDmode, EXPAND_NORMAL);
+ 
+   arg = CALL_EXPR_ARG (exp, 1);
+   op1 = expand_normal (arg);
+ 
+   return expand_copysign (op0, op1, target);
+ }
+ 
+ /* Emit a call to __builtin___clear_cache.  */
+ 
+ void
+ default_emit_call_builtin___clear_cache (rtx begin, rtx end)
+ {
+   rtx callee = gen_rtx_SYMBOL_REF (Pmode,
+ 				   BUILTIN_ASM_NAME_PTR
+ 				   (BUILT_IN_CLEAR_CACHE));
+ 
+   emit_library_call (callee,
+ 		     LCT_NORMAL, VOIDmode,
+ 		     convert_memory_address (ptr_mode, begin), ptr_mode,
+ 		     convert_memory_address (ptr_mode, end), ptr_mode);
+ }
+ 
+ /* Emit a call to __builtin___clear_cache, unless the target specifies
+    it as do-nothing.  This function can be used by trampoline
+    finalizers to duplicate the effects of expanding a call to the
+    clear_cache builtin.  */
+ 
+ void
+ maybe_emit_call_builtin___clear_cache (rtx begin, rtx end)
+ {
+   gcc_assert ((GET_MODE (begin) == ptr_mode || GET_MODE (begin) == Pmode
+ 	       || CONST_INT_P (begin))
+ 	      && (GET_MODE (end) == ptr_mode || GET_MODE (end) == Pmode
+ 		  || CONST_INT_P (end)));
+ 
+   if (targetm.have_clear_cache ())
+     {
+       /* We have a "clear_cache" insn, and it will handle everything.  */
+       class expand_operand ops[2];
+ 
+       create_address_operand (&ops[0], begin);
+       create_address_operand (&ops[1], end);
+ 
+       if (maybe_expand_insn (targetm.code_for_clear_cache, 2, ops))
+ 	return;
+     }
+   else
+     {
+ #ifndef CLEAR_INSN_CACHE
+       /* There is no "clear_cache" insn, and __clear_cache() in libgcc
+ 	 does nothing.  There is no need to call it.  Do nothing.  */
+       return;
+ #endif /* CLEAR_INSN_CACHE */
+     }
+ 
+   targetm.calls.emit_call_builtin___clear_cache (begin, end);
+ }
+ 
+ /* Expand a call to __builtin___clear_cache.  */
+ 
+ static void
+ expand_builtin___clear_cache (tree exp)
+ {
+   tree begin, end;
+   rtx begin_rtx, end_rtx;
+ 
+   /* We must not expand to a library call.  If we did, any
+      fallback library function in libgcc that might contain a call to
+      __builtin___clear_cache() would recurse infinitely.  */
+   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
+     {
+       error ("both arguments to %<__builtin___clear_cache%> must be pointers");
+       return;
+     }
+ 
+   begin = CALL_EXPR_ARG (exp, 0);
+   begin_rtx = expand_expr (begin, NULL_RTX, Pmode, EXPAND_NORMAL);
+ 
+   end = CALL_EXPR_ARG (exp, 1);
+   end_rtx = expand_expr (end, NULL_RTX, Pmode, EXPAND_NORMAL);
+ 
+   maybe_emit_call_builtin___clear_cache (begin_rtx, end_rtx);
+ }
+ 
+ /* Given a trampoline address, make sure it satisfies TRAMPOLINE_ALIGNMENT.  */
+ 
+ static rtx
+ round_trampoline_addr (rtx tramp)
+ {
+   rtx temp, addend, mask;
+ 
+   /* If we don't need too much alignment, we'll have been guaranteed
+      proper alignment by get_trampoline_type.  */
+   if (TRAMPOLINE_ALIGNMENT <= STACK_BOUNDARY)
+     return tramp;
+ 
+   /* Round address up to desired boundary.  */
+   temp = gen_reg_rtx (Pmode);
+   addend = gen_int_mode (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT - 1, Pmode);
+   mask = gen_int_mode (-TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT, Pmode);
+ 
+   temp  = expand_simple_binop (Pmode, PLUS, tramp, addend,
+ 			       temp, 0, OPTAB_LIB_WIDEN);
+   tramp = expand_simple_binop (Pmode, AND, temp, mask,
+ 			       temp, 0, OPTAB_LIB_WIDEN);
+ 
+   return tramp;
+ }
+ 
+ static rtx
+ expand_builtin_init_trampoline (tree exp, bool onstack)
+ {
+   tree t_tramp, t_func, t_chain;
+   rtx m_tramp, r_tramp, r_chain, tmp;
+ 
+   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE,
+ 			 POINTER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   t_tramp = CALL_EXPR_ARG (exp, 0);
+   t_func = CALL_EXPR_ARG (exp, 1);
+   t_chain = CALL_EXPR_ARG (exp, 2);
+ 
+   r_tramp = expand_normal (t_tramp);
+   m_tramp = gen_rtx_MEM (BLKmode, r_tramp);
+   MEM_NOTRAP_P (m_tramp) = 1;
+ 
+   /* If ONSTACK, the TRAMP argument should be the address of a field
+      within the local function's FRAME decl.  Either way, let's see if
+      we can fill in the MEM_ATTRs for this memory.  */
+   if (TREE_CODE (t_tramp) == ADDR_EXPR)
+     set_mem_attributes (m_tramp, TREE_OPERAND (t_tramp, 0), true);
+ 
+   /* Creator of a heap trampoline is responsible for making sure the
+      address is aligned to at least STACK_BOUNDARY.  Normally malloc
+      will ensure this anyhow.  */
+   tmp = round_trampoline_addr (r_tramp);
+   if (tmp != r_tramp)
+     {
+       m_tramp = change_address (m_tramp, BLKmode, tmp);
+       set_mem_align (m_tramp, TRAMPOLINE_ALIGNMENT);
+       set_mem_size (m_tramp, TRAMPOLINE_SIZE);
+     }
+ 
+   /* The FUNC argument should be the address of the nested function.
+      Extract the actual function decl to pass to the hook.  */
+   gcc_assert (TREE_CODE (t_func) == ADDR_EXPR);
+   t_func = TREE_OPERAND (t_func, 0);
+   gcc_assert (TREE_CODE (t_func) == FUNCTION_DECL);
+ 
+   r_chain = expand_normal (t_chain);
+ 
+   /* Generate insns to initialize the trampoline.  */
+   targetm.calls.trampoline_init (m_tramp, t_func, r_chain);
+ 
+   if (onstack)
+     {
+       trampolines_created = 1;
+ 
+       if (targetm.calls.custom_function_descriptors != 0)
+ 	warning_at (DECL_SOURCE_LOCATION (t_func), OPT_Wtrampolines,
+ 		    "trampoline generated for nested function %qD", t_func);
+     }
+ 
+   return const0_rtx;
+ }
+ 
+ static rtx
+ expand_builtin_adjust_trampoline (tree exp)
+ {
+   rtx tramp;
+ 
+   if (!validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tramp = expand_normal (CALL_EXPR_ARG (exp, 0));
+   tramp = round_trampoline_addr (tramp);
+   if (targetm.calls.trampoline_adjust_address)
+     tramp = targetm.calls.trampoline_adjust_address (tramp);
+ 
+   return tramp;
+ }
+ 
+ /* Expand a call to the builtin descriptor initialization routine.
+    A descriptor is made up of a couple of pointers to the static
+    chain and the code entry in this order.  */
+ 
+ static rtx
+ expand_builtin_init_descriptor (tree exp)
+ {
+   tree t_descr, t_func, t_chain;
+   rtx m_descr, r_descr, r_func, r_chain;
+ 
+   if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, POINTER_TYPE,
+ 			 VOID_TYPE))
+     return NULL_RTX;
+ 
+   t_descr = CALL_EXPR_ARG (exp, 0);
+   t_func = CALL_EXPR_ARG (exp, 1);
+   t_chain = CALL_EXPR_ARG (exp, 2);
+ 
+   r_descr = expand_normal (t_descr);
+   m_descr = gen_rtx_MEM (BLKmode, r_descr);
+   MEM_NOTRAP_P (m_descr) = 1;
+   set_mem_align (m_descr, GET_MODE_ALIGNMENT (ptr_mode));
+ 
+   r_func = expand_normal (t_func);
+   r_chain = expand_normal (t_chain);
+ 
+   /* Generate insns to initialize the descriptor.  */
+   emit_move_insn (adjust_address_nv (m_descr, ptr_mode, 0), r_chain);
+   emit_move_insn (adjust_address_nv (m_descr, ptr_mode,
+ 				     POINTER_SIZE / BITS_PER_UNIT), r_func);
+ 
+   return const0_rtx;
+ }
+ 
+ /* Expand a call to the builtin descriptor adjustment routine.  */
+ 
+ static rtx
+ expand_builtin_adjust_descriptor (tree exp)
+ {
+   rtx tramp;
+ 
+   if (!validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   tramp = expand_normal (CALL_EXPR_ARG (exp, 0));
+ 
+   /* Unalign the descriptor to allow runtime identification.  */
+   tramp = plus_constant (ptr_mode, tramp,
+ 			 targetm.calls.custom_function_descriptors);
+ 
+   return force_operand (tramp, NULL_RTX);
+ }
+ 
+ /* Expand the call EXP to the built-in signbit, signbitf or signbitl
+    function.  The function first checks whether the back end provides
+    an insn to implement signbit for the respective mode.  If not, it
+    checks whether the floating point format of the value is such that
+    the sign bit can be extracted.  If that is not the case, error out.
+    EXP is the expression that is a call to the builtin function; if
+    convenient, the result should be placed in TARGET.  */
+ static rtx
+ expand_builtin_signbit (tree exp, rtx target)
+ {
+   const struct real_format *fmt;
+   scalar_float_mode fmode;
+   scalar_int_mode rmode, imode;
+   tree arg;
+   int word, bitpos;
+   enum insn_code icode;
+   rtx temp;
+   location_t loc = EXPR_LOCATION (exp);
+ 
+   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
+     return NULL_RTX;
+ 
+   arg = CALL_EXPR_ARG (exp, 0);
+   fmode = SCALAR_FLOAT_TYPE_MODE (TREE_TYPE (arg));
+   rmode = SCALAR_INT_TYPE_MODE (TREE_TYPE (exp));
+   fmt = REAL_MODE_FORMAT (fmode);
+ 
+   arg = builtin_save_expr (arg);
+ 
+   /* Expand the argument yielding a RTX expression. */
+   temp = expand_normal (arg);
+ 
+   /* Check if the back end provides an insn that handles signbit for the
+      argument's mode. */
+   icode = optab_handler (signbit_optab, fmode);
+   if (icode != CODE_FOR_nothing)
+     {
+       rtx_insn *last = get_last_insn ();
+       target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
+       if (maybe_emit_unop_insn (icode, target, temp, UNKNOWN))
+ 	return target;
+       delete_insns_since (last);
+     }
+ 
+   /* For floating point formats without a sign bit, implement signbit
+      as "ARG < 0.0".  */
+   bitpos = fmt->signbit_ro;
+   if (bitpos < 0)
+   {
+     /* But we can't do this if the format supports signed zero.  */
+     gcc_assert (!fmt->has_signed_zero || !HONOR_SIGNED_ZEROS (fmode));
+ 
+     arg = fold_build2_loc (loc, LT_EXPR, TREE_TYPE (exp), arg,
+ 		       build_real (TREE_TYPE (arg), dconst0));
+     return expand_expr (arg, target, VOIDmode, EXPAND_NORMAL);
+   }
+ 
+   if (GET_MODE_SIZE (fmode) <= UNITS_PER_WORD)
+     {
+       imode = int_mode_for_mode (fmode).require ();
+       temp = gen_lowpart (imode, temp);
+     }
+   else
+     {
+       imode = word_mode;
+       /* Handle targets with different FP word orders.  */
+       if (FLOAT_WORDS_BIG_ENDIAN)
+ 	word = (GET_MODE_BITSIZE (fmode) - bitpos) / BITS_PER_WORD;
+       else
+ 	word = bitpos / BITS_PER_WORD;
+       temp = operand_subword_force (temp, word, fmode);
+       bitpos = bitpos % BITS_PER_WORD;
+     }
+ 
+   /* Force the intermediate word_mode (or narrower) result into a
+      register.  This avoids attempting to create paradoxical SUBREGs
+      of floating point modes below.  */
+   temp = force_reg (imode, temp);
+ 
+   /* If the bitpos is within the "result mode" lowpart, the operation
+      can be implement with a single bitwise AND.  Otherwise, we need
+      a right shift and an AND.  */
+ 
+   if (bitpos < GET_MODE_BITSIZE (rmode))
+     {
+       wide_int mask = wi::set_bit_in_zero (bitpos, GET_MODE_PRECISION (rmode));
+ 
+       if (GET_MODE_SIZE (imode) > GET_MODE_SIZE (rmode))
+ 	temp = gen_lowpart (rmode, temp);
+       temp = expand_binop (rmode, and_optab, temp,
+ 			   immed_wide_int_const (mask, rmode),
+ 			   NULL_RTX, 1, OPTAB_LIB_WIDEN);
+     }
+   else
+     {
+       /* Perform a logical right shift to place the signbit in the least
+ 	 significant bit, then truncate the result to the desired mode
+ 	 and mask just this bit.  */
+       temp = expand_shift (RSHIFT_EXPR, imode, temp, bitpos, NULL_RTX, 1);
+       temp = gen_lowpart (rmode, temp);
+       temp = expand_binop (rmode, and_optab, temp, const1_rtx,
+ 			   NULL_RTX, 1, OPTAB_LIB_WIDEN);
+     }
+ 
+   return temp;
+ }
+ 
+ /* Expand fork or exec calls.  TARGET is the desired target of the
+    call.  EXP is the call. FN is the
+    identificator of the actual function.  IGNORE is nonzero if the
+    value is to be ignored.  */
+ 
+ static rtx
+ expand_builtin_fork_or_exec (tree fn, tree exp, rtx target, int ignore)
+ {
+   tree id, decl;
+   tree call;
+ 
+   /* If we are not profiling, just call the function.  */
+   if (!profile_arc_flag)
+     return NULL_RTX;
+ 
+   /* Otherwise call the wrapper.  This should be equivalent for the rest of
+      compiler, so the code does not diverge, and the wrapper may run the
+      code necessary for keeping the profiling sane.  */
+ 
+   switch (DECL_FUNCTION_CODE (fn))
+     {
+     case BUILT_IN_FORK:
+       id = get_identifier ("__gcov_fork");
+       break;
+ 
+     case BUILT_IN_EXECL:
+       id = get_identifier ("__gcov_execl");
+       break;
+ 
+     case BUILT_IN_EXECV:
+       id = get_identifier ("__gcov_execv");
+       break;
+ 
+     case BUILT_IN_EXECLP:
+       id = get_identifier ("__gcov_execlp");
+       break;
+ 
+     case BUILT_IN_EXECLE:
+       id = get_identifier ("__gcov_execle");
+       break;
+ 
+     case BUILT_IN_EXECVP:
+       id = get_identifier ("__gcov_execvp");
+       break;
+ 
+     case BUILT_IN_EXECVE:
+       id = get_identifier ("__gcov_execve");
+       break;
+ 
+     default:
+       gcc_unreachable ();
+     }
+ 
+   decl = build_decl (DECL_SOURCE_LOCATION (fn),
+ 		     FUNCTION_DECL, id, TREE_TYPE (fn));
+   DECL_EXTERNAL (decl) = 1;
+   TREE_PUBLIC (decl) = 1;
+   DECL_ARTIFICIAL (decl) = 1;
+   TREE_NOTHROW (decl) = 1;
+   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
+   DECL_VISIBILITY_SPECIFIED (decl) = 1;
+   call = rewrite_call_expr (EXPR_LOCATION (exp), exp, 0, decl, 0);
+   return expand_call (call, target, ignore);
+  }
+ 
+ 
+ 
+ /* Reconstitute a mode for a __sync intrinsic operation.  Since the type of
+    the pointer in these functions is void*, the tree optimizers may remove
+    casts.  The mode computed in expand_builtin isn't reliable either, due
+    to __sync_bool_compare_and_swap.
+ 
+    FCODE_DIFF should be fcode - base, where base is the FOO_1 code for the
+    group of builtins.  This gives us log2 of the mode size.  */
+ 
+ static inline machine_mode
+ get_builtin_sync_mode (int fcode_diff)
+ {
+   /* The size is not negotiable, so ask not to get BLKmode in return
+      if the target indicates that a smaller size would be better.  */
+   return int_mode_for_size (BITS_PER_UNIT << fcode_diff, 0).require ();
+ }
+ 
+ /* Expand the memory expression LOC and return the appropriate memory operand
+    for the builtin_sync operations.  */
+ 
+ static rtx
+ get_builtin_sync_mem (tree loc, machine_mode mode)
+ {
+   rtx addr, mem;
+   int addr_space = TYPE_ADDR_SPACE (POINTER_TYPE_P (TREE_TYPE (loc))
+ 				    ? TREE_TYPE (TREE_TYPE (loc))
+ 				    : TREE_TYPE (loc));
+   scalar_int_mode addr_mode = targetm.addr_space.address_mode (addr_space);
+ 
+   addr = expand_expr (loc, NULL_RTX, addr_mode, EXPAND_SUM);
+   addr = convert_memory_address (addr_mode, addr);
+ 
+   /* Note that we explicitly do not want any alias information for this
+      memory, so that we kill all other live memories.  Otherwise we don't
+      satisfy the full barrier semantics of the intrinsic.  */
+   mem = gen_rtx_MEM (mode, addr);
+ 
+   set_mem_addr_space (mem, addr_space);
+ 
+   mem = validize_mem (mem);
+ 
+   /* The alignment needs to be at least according to that of the mode.  */
+   set_mem_align (mem, MAX (GET_MODE_ALIGNMENT (mode),
+ 			   get_pointer_alignment (loc)));
+   set_mem_alias_set (mem, ALIAS_SET_MEMORY_BARRIER);
+   MEM_VOLATILE_P (mem) = 1;
+ 
+   return mem;
+ }
+ 
+ /* Make sure an argument is in the right mode.
+    EXP is the tree argument. 
+    MODE is the mode it should be in.  */
+ 
+ static rtx
+ expand_expr_force_mode (tree exp, machine_mode mode)
+ {
+   rtx val;
+   machine_mode old_mode;
+ 
+   if (TREE_CODE (exp) == SSA_NAME
+       && TYPE_MODE (TREE_TYPE (exp)) != mode)
+     {
+       /* Undo argument promotion if possible, as combine might not
+ 	 be able to do it later due to MEM_VOLATILE_P uses in the
+ 	 patterns.  */
+       gimple *g = get_gimple_for_ssa_name (exp);
+       if (g && gimple_assign_cast_p (g))
+ 	{
+ 	  tree rhs = gimple_assign_rhs1 (g);
+ 	  tree_code code = gimple_assign_rhs_code (g);
+ 	  if (CONVERT_EXPR_CODE_P (code)
+ 	      && TYPE_MODE (TREE_TYPE (rhs)) == mode
+ 	      && INTEGRAL_TYPE_P (TREE_TYPE (exp))
+ 	      && INTEGRAL_TYPE_P (TREE_TYPE (rhs))
+ 	      && (TYPE_PRECISION (TREE_TYPE (exp))
+ 		  > TYPE_PRECISION (TREE_TYPE (rhs))))
+ 	    exp = rhs;
+ 	}
+     }
+ 
+   val = expand_expr (exp, NULL_RTX, mode, EXPAND_NORMAL);
+   /* If VAL is promoted to a wider mode, convert it back to MODE.  Take care
+      of CONST_INTs, where we know the old_mode only from the call argument.  */
+ 
+   old_mode = GET_MODE (val);
+   if (old_mode == VOIDmode)
+     old_mode = TYPE_MODE (TREE_TYPE (exp));
+   val = convert_modes (mode, old_mode, val, 1);
+   return val;
+ }
+ 
+ 
+ /* Expand the __sync_xxx_and_fetch and __sync_fetch_and_xxx intrinsics.
+    EXP is the CALL_EXPR.  CODE is the rtx code
+    that corresponds to the arithmetic or logical operation from the name;
+    an exception here is that NOT actually means NAND.  TARGET is an optional
+    place for us to store the results; AFTER is true if this is the
+    fetch_and_xxx form.  */
+ 
+ static rtx
+ expand_builtin_sync_operation (machine_mode mode, tree exp,
+ 			       enum rtx_code code, bool after,
+ 			       rtx target)
+ {
+   rtx val, mem;
+   location_t loc = EXPR_LOCATION (exp);
+ 
+   if (code == NOT && warn_sync_nand)
+     {
+       tree fndecl = get_callee_fndecl (exp);
+       enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
+ 
+       static bool warned_f_a_n, warned_n_a_f;
+ 
+       switch (fcode)
+ 	{
+ 	case BUILT_IN_SYNC_FETCH_AND_NAND_1:
+ 	case BUILT_IN_SYNC_FETCH_AND_NAND_2:
+ 	case BUILT_IN_SYNC_FETCH_AND_NAND_4:
+ 	case BUILT_IN_SYNC_FETCH_AND_NAND_8:
+ 	case BUILT_IN_SYNC_FETCH_AND_NAND_16:
+ 	  if (warned_f_a_n)
+ 	    break;
+ 
+ 	  fndecl = builtin_decl_implicit (BUILT_IN_SYNC_FETCH_AND_NAND_N);
+ 	  inform (loc, "%qD changed semantics in GCC 4.4", fndecl);
+ 	  warned_f_a_n = true;
+ 	  break;
+ 
+ 	case BUILT_IN_SYNC_NAND_AND_FETCH_1:
+ 	case BUILT_IN_SYNC_NAND_AND_FETCH_2:
+ 	case BUILT_IN_SYNC_NAND_AND_FETCH_4:
+ 	case BUILT_IN_SYNC_NAND_AND_FETCH_8:
+ 	case BUILT_IN_SYNC_NAND_AND_FETCH_16:
+ 	  if (warned_n_a_f)
+ 	    break;
+ 
+ 	 fndecl = builtin_decl_implicit (BUILT_IN_SYNC_NAND_AND_FETCH_N);
+ 	  inform (loc, "%qD changed semantics in GCC 4.4", fndecl);
+ 	  warned_n_a_f = true;
+ 	  break;
+ 
+ 	default:
+ 	  gcc_unreachable ();
+ 	}
+     }
+ 
+   /* Expand the operands.  */
+   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
+   val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
+ 
+   return expand_atomic_fetch_op (target, mem, val, code, MEMMODEL_SYNC_SEQ_CST,
+ 				 after);
+ }
+ 
+ /* Expand the __sync_val_compare_and_swap and __sync_bool_compare_and_swap
+    intrinsics. EXP is the CALL_EXPR.  IS_BOOL is
+    true if this is the boolean form.  TARGET is a place for us to store the
+    results; this is NOT optional if IS_BOOL is true.  */
+ 
+ static rtx
+ expand_builtin_compare_and_swap (machine_mode mode, tree exp,
+ 				 bool is_bool, rtx target)
+ {
+   rtx old_val, new_val, mem;
+   rtx *pbool, *poval;
+ 
+   /* Expand the operands.  */
+   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
+   old_val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
+   new_val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 2), mode);
+ 
+   pbool = poval = NULL;
+   if (target != const0_rtx)
+     {
+       if (is_bool)
+ 	pbool = &target;
+       else
+ 	poval = &target;
+     }
+   if (!expand_atomic_compare_and_swap (pbool, poval, mem, old_val, new_val,
+ 				       false, MEMMODEL_SYNC_SEQ_CST,
+ 				       MEMMODEL_SYNC_SEQ_CST))
+     return NULL_RTX;
+ 
+   return target;
+ }
+ 
+ /* Expand the __sync_lock_test_and_set intrinsic.  Note that the most
+    general form is actually an atomic exchange, and some targets only
+    support a reduced form with the second argument being a constant 1.
+    EXP is the CALL_EXPR; TARGET is an optional place for us to store
+    the results.  */
+ 
+ static rtx
+ expand_builtin_sync_lock_test_and_set (machine_mode mode, tree exp,
+ 				       rtx target)
+ {
+   rtx val, mem;
+ 
+   /* Expand the operands.  */
+   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
+   val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
+ 
+   return expand_sync_lock_test_and_set (target, mem, val);
+ }
+ 
+ /* Expand the __sync_lock_release intrinsic.  EXP is the CALL_EXPR.  */
+ 
+ static void
+ expand_builtin_sync_lock_release (machine_mode mode, tree exp)
+ {
+   rtx mem;
+ 
+   /* Expand the operands.  */
+   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
+ 
+   expand_atomic_store (mem, const0_rtx, MEMMODEL_SYNC_RELEASE, true);
+ }
+ 
+ /* Given an integer representing an ``enum memmodel'', verify its
+    correctness and return the memory model enum.  */
+ 
+ static enum memmodel
+ get_memmodel (tree exp)
+ {
+   /* If the parameter is not a constant, it's a run time value so we'll just
+      convert it to MEMMODEL_SEQ_CST to avoid annoying runtime checking.  */
+   if (TREE_CODE (exp) != INTEGER_CST)
+     return MEMMODEL_SEQ_CST;
+ 
+   rtx op = expand_normal (exp);
+ 
+   unsigned HOST_WIDE_INT val = INTVAL (op);
+   if (targetm.memmodel_check)
+     val = targetm.memmodel_check (val);
+   else if (val & ~MEMMODEL_MASK)
+     return MEMMODEL_SEQ_CST;
+ 
+   /* Should never see a user explicit SYNC memodel model, so >= LAST works. */
+   if (memmodel_base (val) >= MEMMODEL_LAST)
+     return MEMMODEL_SEQ_CST;
+ 
+   /* Workaround for Bugzilla 59448. GCC doesn't track consume properly, so
+      be conservative and promote consume to acquire.  */
+   if (val == MEMMODEL_CONSUME)
+     val = MEMMODEL_ACQUIRE;
+ 
+   return (enum memmodel) val;
+ }
+ 
+ /* Expand the __atomic_exchange intrinsic:
+    	TYPE __atomic_exchange (TYPE *object, TYPE desired, enum memmodel)
+    EXP is the CALL_EXPR.
+    TARGET is an optional place for us to store the results.  */
+ 
+ static rtx
+ expand_builtin_atomic_exchange (machine_mode mode, tree exp, rtx target)
+ {
+   rtx val, mem;
+   enum memmodel model;
+ 
+   model = get_memmodel (CALL_EXPR_ARG (exp, 2));
+ 
+   if (!flag_inline_atomics)
+     return NULL_RTX;
+ 
+   /* Expand the operands.  */
+   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
+   val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
+ 
+   return expand_atomic_exchange (target, mem, val, model);
+ }
+ 
+ /* Expand the __atomic_compare_exchange intrinsic:
+    	bool __atomic_compare_exchange (TYPE *object, TYPE *expect, 
+ 					TYPE desired, BOOL weak, 
+ 					enum memmodel success,
+ 					enum memmodel failure)
+    EXP is the CALL_EXPR.
+    TARGET is an optional place for us to store the results.  */
+ 
+ static rtx
+ expand_builtin_atomic_compare_exchange (machine_mode mode, tree exp, 
+ 					rtx target)
+ {
+   rtx expect, desired, mem, oldval;
+   rtx_code_label *label;
+   tree weak;
+   bool is_weak;
+ 
+   memmodel success = get_memmodel (CALL_EXPR_ARG (exp, 4));
+   memmodel failure = get_memmodel (CALL_EXPR_ARG (exp, 5));
+ 
+   if (failure > success)
+     success = MEMMODEL_SEQ_CST;
+  
+   if (is_mm_release (failure) || is_mm_acq_rel (failure))
+     {
+       failure = MEMMODEL_SEQ_CST;
+       success = MEMMODEL_SEQ_CST;
+     }
+ 
+  
+   if (!flag_inline_atomics)
+     return NULL_RTX;
+ 
+   /* Expand the operands.  */
+   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
+ 
+   expect = expand_normal (CALL_EXPR_ARG (exp, 1));
+   expect = convert_memory_address (Pmode, expect);
+   expect = gen_rtx_MEM (mode, expect);
+   desired = expand_expr_force_mode (CALL_EXPR_ARG (exp, 2), mode);
+ 
+   weak = CALL_EXPR_ARG (exp, 3);
+   is_weak = false;
+   if (tree_fits_shwi_p (weak) && tree_to_shwi (weak) != 0)
+     is_weak = true;
+ 
+   if (target == const0_rtx)
+     target = NULL;
+ 
+   /* Lest the rtl backend create a race condition with an imporoper store
+      to memory, always create a new pseudo for OLDVAL.  */
+   oldval = NULL;
+ 
+   if (!expand_atomic_compare_and_swap (&target, &oldval, mem, expect, desired,
+ 				       is_weak, success, failure))
+     return NULL_RTX;
+ 
+   /* Conditionally store back to EXPECT, lest we create a race condition
+      with an improper store to memory.  */
+   /* ??? With a rearrangement of atomics at the gimple level, we can handle
+      the normal case where EXPECT is totally private, i.e. a register.  At
+      which point the store can be unconditional.  */
+   label = gen_label_rtx ();
+   emit_cmp_and_jump_insns (target, const0_rtx, NE, NULL,
+ 			   GET_MODE (target), 1, label);
+   emit_move_insn (expect, oldval);
+   emit_label (label);
+ 
+   return target;
+ }
+ 
+ /* Helper function for expand_ifn_atomic_compare_exchange - expand
+    internal ATOMIC_COMPARE_EXCHANGE call into __atomic_compare_exchange_N
+    call.  The weak parameter must be dropped to match the expected parameter
+    list and the expected argument changed from value to pointer to memory
+    slot.  */
+ 
+ static void
+ expand_ifn_atomic_compare_exchange_into_call (gcall *call, machine_mode mode)
+ {
+   unsigned int z;
+   vec<tree, va_gc> *vec;
+ 
+   vec_alloc (vec, 5);
+   vec->quick_push (gimple_call_arg (call, 0));
+   tree expected = gimple_call_arg (call, 1);
+   rtx x = assign_stack_temp_for_type (mode, GET_MODE_SIZE (mode),
+ 				      TREE_TYPE (expected));
+   rtx expd = expand_expr (expected, x, mode, EXPAND_NORMAL);
+   if (expd != x)
+     emit_move_insn (x, expd);
+   tree v = make_tree (TREE_TYPE (expected), x);
+   vec->quick_push (build1 (ADDR_EXPR,
+ 			   build_pointer_type (TREE_TYPE (expected)), v));
+   vec->quick_push (gimple_call_arg (call, 2));
+   /* Skip the boolean weak parameter.  */
+   for (z = 4; z < 6; z++)
+     vec->quick_push (gimple_call_arg (call, z));
+   /* At present we only have BUILT_IN_ATOMIC_COMPARE_EXCHANGE_{1,2,4,8,16}.  */
+   unsigned int bytes_log2 = exact_log2 (GET_MODE_SIZE (mode).to_constant ());
+   gcc_assert (bytes_log2 < 5);
+   built_in_function fncode
+     = (built_in_function) ((int) BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1
+ 			   + bytes_log2);
+   tree fndecl = builtin_decl_explicit (fncode);
+   tree fn = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fndecl)),
+ 		    fndecl);
+   tree exp = build_call_vec (boolean_type_node, fn, vec);
+   tree lhs = gimple_call_lhs (call);
+   rtx boolret = expand_call (exp, NULL_RTX, lhs == NULL_TREE);
+   if (lhs)
+     {
+       rtx target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
+       if (GET_MODE (boolret) != mode)
+ 	boolret = convert_modes (mode, GET_MODE (boolret), boolret, 1);
+       x = force_reg (mode, x);
+       write_complex_part (target, boolret, true);
+       write_complex_part (target, x, false);
+     }
+ }
+ 
+ /* Expand IFN_ATOMIC_COMPARE_EXCHANGE internal function.  */
+ 
+ void
+ expand_ifn_atomic_compare_exchange (gcall *call)
+ {
+   int size = tree_to_shwi (gimple_call_arg (call, 3)) & 255;
+   gcc_assert (size == 1 || size == 2 || size == 4 || size == 8 || size == 16);
+   machine_mode mode = int_mode_for_size (BITS_PER_UNIT * size, 0).require ();
+ 
+   memmodel success = get_memmodel (gimple_call_arg (call, 4));
+   memmodel failure = get_memmodel (gimple_call_arg (call, 5));
+ 
+   if (failure > success)
+     success = MEMMODEL_SEQ_CST;
+ 
+   if (is_mm_release (failure) || is_mm_acq_rel (failure))
+     {
+       failure = MEMMODEL_SEQ_CST;
+       success = MEMMODEL_SEQ_CST;
+     }
+ 
+   if (!flag_inline_atomics)
+     {
+       expand_ifn_atomic_compare_exchange_into_call (call, mode);
+       return;
+     }
+ 
+   /* Expand the operands.  */
+   rtx mem = get_builtin_sync_mem (gimple_call_arg (call, 0), mode);
+ 
+   rtx expect = expand_expr_force_mode (gimple_call_arg (call, 1), mode);
+   rtx desired = expand_expr_force_mode (gimple_call_arg (call, 2), mode);
+ 
+   bool is_weak = (tree_to_shwi (gimple_call_arg (call, 3)) & 256) != 0;
+ 
+   rtx boolret = NULL;
+   rtx oldval = NULL;
+ 
+   if (!expand_atomic_compare_and_swap (&boolret, &oldval, mem, expect, desired,
+ 				       is_weak, success, failure))
+     {
+       expand_ifn_atomic_compare_exchange_into_call (call, mode);
+       return;
+     }
+ 
+   tree lhs = gimple_call_lhs (call);
+   if (lhs)
+     {
+       rtx target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
+       if (GET_MODE (boolret) != mode)
+ 	boolret = convert_modes (mode, GET_MODE (boolret), boolret, 1);
+       write_complex_part (target, boolret, true);
+       write_complex_part (target, oldval, false);
+     }
+ }
+ 
+ /* Expand the __atomic_load intrinsic:
+    	TYPE __atomic_load (TYPE *object, enum memmodel)
+    EXP is the CALL_EXPR.
+    TARGET is an optional place for us to store the results.  */
+ 
+ static rtx
+ expand_builtin_atomic_load (machine_mode mode, tree exp, rtx target)
+ {
+   memmodel model = get_memmodel (CALL_EXPR_ARG (exp, 1));
+   if (is_mm_release (model) || is_mm_acq_rel (model))
+     model = MEMMODEL_SEQ_CST;
+ 
+   if (!flag_inline_atomics)
+     return NULL_RTX;
+ 
+   /* Expand the operand.  */
+   rtx mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
+ 
+   return expand_atomic_load (target, mem, model);
+ }
+ 
+ 
+ /* Expand the __atomic_store intrinsic:
+    	void __atomic_store (TYPE *object, TYPE desired, enum memmodel)
+    EXP is the CALL_EXPR.
+    TARGET is an optional place for us to store the results.  */
+ 
+ static rtx
+ expand_builtin_atomic_store (machine_mode mode, tree exp)
+ {
+   memmodel model = get_memmodel (CALL_EXPR_ARG (exp, 2));
+   if (!(is_mm_relaxed (model) || is_mm_seq_cst (model)
+ 	|| is_mm_release (model)))
+     model = MEMMODEL_SEQ_CST;
+ 
+   if (!flag_inline_atomics)
+     return NULL_RTX;
+ 
+   /* Expand the operands.  */
+   rtx mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
+   rtx val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
+ 
+   return expand_atomic_store (mem, val, model, false);
+ }
+ 
+ /* Expand the __atomic_fetch_XXX intrinsic:
+    	TYPE __atomic_fetch_XXX (TYPE *object, TYPE val, enum memmodel)
+    EXP is the CALL_EXPR.
+    TARGET is an optional place for us to store the results.
+    CODE is the operation, PLUS, MINUS, ADD, XOR, or IOR.
+    FETCH_AFTER is true if returning the result of the operation.
+    FETCH_AFTER is false if returning the value before the operation.
+    IGNORE is true if the result is not used.
+    EXT_CALL is the correct builtin for an external call if this cannot be
+    resolved to an instruction sequence.  */
+ 
+ static rtx
+ expand_builtin_atomic_fetch_op (machine_mode mode, tree exp, rtx target,
+ 				enum rtx_code code, bool fetch_after,
+ 				bool ignore, enum built_in_function ext_call)
+ {
+   rtx val, mem, ret;
+   enum memmodel model;
+   tree fndecl;
+   tree addr;
+ 
+   model = get_memmodel (CALL_EXPR_ARG (exp, 2));
+ 
+   /* Expand the operands.  */
+   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
+   val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
+ 
+   /* Only try generating instructions if inlining is turned on.  */
+   if (flag_inline_atomics)
+     {
+       ret = expand_atomic_fetch_op (target, mem, val, code, model, fetch_after);
+       if (ret)
+ 	return ret;
+     }
+ 
+   /* Return if a different routine isn't needed for the library call.  */
+   if (ext_call == BUILT_IN_NONE)
+     return NULL_RTX;
+ 
+   /* Change the call to the specified function.  */
+   fndecl = get_callee_fndecl (exp);
+   addr = CALL_EXPR_FN (exp);
+   STRIP_NOPS (addr);
+ 
+   gcc_assert (TREE_OPERAND (addr, 0) == fndecl);
+   TREE_OPERAND (addr, 0) = builtin_decl_explicit (ext_call);
+ 
+   /* If we will emit code after the call, the call cannot be a tail call.
+      If it is emitted as a tail call, a barrier is emitted after it, and
+      then all trailing code is removed.  */
+   if (!ignore)
+     CALL_EXPR_TAILCALL (exp) = 0;
+ 
+   /* Expand the call here so we can emit trailing code.  */
+   ret = expand_call (exp, target, ignore);
+ 
+   /* Replace the original function just in case it matters.  */
+   TREE_OPERAND (addr, 0) = fndecl;
+ 
+   /* Then issue the arithmetic correction to return the right result.  */
+   if (!ignore)
+     {
+       if (code == NOT)
+ 	{
+ 	  ret = expand_simple_binop (mode, AND, ret, val, NULL_RTX, true,
+ 				     OPTAB_LIB_WIDEN);
+ 	  ret = expand_simple_unop (mode, NOT, ret, target, true);
+ 	}
+       else
+ 	ret = expand_simple_binop (mode, code, ret, val, target, true,
+ 				   OPTAB_LIB_WIDEN);
+     }
+   return ret;
+ }
+ 
+ /* Expand IFN_ATOMIC_BIT_TEST_AND_* internal function.  */
+ 
+ void
+ expand_ifn_atomic_bit_test_and (gcall *call)
+ {
+   tree ptr = gimple_call_arg (call, 0);
+   tree bit = gimple_call_arg (call, 1);
+   tree flag = gimple_call_arg (call, 2);
+   tree lhs = gimple_call_lhs (call);
+   enum memmodel model = MEMMODEL_SYNC_SEQ_CST;
+   machine_mode mode = TYPE_MODE (TREE_TYPE (flag));
+   enum rtx_code code;
+   optab optab;
+   class expand_operand ops[5];
+ 
+   gcc_assert (flag_inline_atomics);
+ 
+   if (gimple_call_num_args (call) == 4)
+     model = get_memmodel (gimple_call_arg (call, 3));
+ 
+   rtx mem = get_builtin_sync_mem (ptr, mode);
+   rtx val = expand_expr_force_mode (bit, mode);
+ 
+   switch (gimple_call_internal_fn (call))
+     {
+     case IFN_ATOMIC_BIT_TEST_AND_SET:
+       code = IOR;
+       optab = atomic_bit_test_and_set_optab;
+       break;
+     case IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT:
+       code = XOR;
+       optab = atomic_bit_test_and_complement_optab;
+       break;
+     case IFN_ATOMIC_BIT_TEST_AND_RESET:
+       code = AND;
+       optab = atomic_bit_test_and_reset_optab;
+       break;
+     default:
+       gcc_unreachable ();
+     }
+ 
+   if (lhs == NULL_TREE)
+     {
+       val = expand_simple_binop (mode, ASHIFT, const1_rtx,
+ 				 val, NULL_RTX, true, OPTAB_DIRECT);
+       if (code == AND)
+ 	val = expand_simple_unop (mode, NOT, val, NULL_RTX, true);
+       expand_atomic_fetch_op (const0_rtx, mem, val, code, model, false);
+       return;
+     }
+ 
+   rtx target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
+   enum insn_code icode = direct_optab_handler (optab, mode);
+   gcc_assert (icode != CODE_FOR_nothing);
+   create_output_operand (&ops[0], target, mode);
+   create_fixed_operand (&ops[1], mem);
+   create_convert_operand_to (&ops[2], val, mode, true);
+   create_integer_operand (&ops[3], model);
+   create_integer_operand (&ops[4], integer_onep (flag));
+   if (maybe_expand_insn (icode, 5, ops))
+     return;
+ 
+   rtx bitval = val;
+   val = expand_simple_binop (mode, ASHIFT, const1_rtx,
+ 			     val, NULL_RTX, true, OPTAB_DIRECT);
+   rtx maskval = val;
+   if (code == AND)
+     val = expand_simple_unop (mode, NOT, val, NULL_RTX, true);
+   rtx result = expand_atomic_fetch_op (gen_reg_rtx (mode), mem, val,
+ 				       code, model, false);
+   if (integer_onep (flag))
+     {
+       result = expand_simple_binop (mode, ASHIFTRT, result, bitval,
+ 				    NULL_RTX, true, OPTAB_DIRECT);
+       result = expand_simple_binop (mode, AND, result, const1_rtx, target,
+ 				    true, OPTAB_DIRECT);
+     }
+   else
+     result = expand_simple_binop (mode, AND, result, maskval, target, true,
+ 				  OPTAB_DIRECT);
+   if (result != target)
+     emit_move_insn (target, result);
+ }
+ 
+ /* Expand IFN_ATOMIC_*_FETCH_CMP_0 internal function.  */
+ 
+ void
+ expand_ifn_atomic_op_fetch_cmp_0 (gcall *call)
+ {
+   tree cmp = gimple_call_arg (call, 0);
+   tree ptr = gimple_call_arg (call, 1);
+   tree arg = gimple_call_arg (call, 2);
+   tree lhs = gimple_call_lhs (call);
+   enum memmodel model = MEMMODEL_SYNC_SEQ_CST;
+   machine_mode mode = TYPE_MODE (TREE_TYPE (cmp));
+   optab optab;
+   rtx_code code;
+   class expand_operand ops[5];
+ 
+   gcc_assert (flag_inline_atomics);
+ 
+   if (gimple_call_num_args (call) == 4)
+     model = get_memmodel (gimple_call_arg (call, 3));
+ 
+   rtx mem = get_builtin_sync_mem (ptr, mode);
+   rtx op = expand_expr_force_mode (arg, mode);
+ 
+   switch (gimple_call_internal_fn (call))
+     {
+     case IFN_ATOMIC_ADD_FETCH_CMP_0:
+       code = PLUS;
+       optab = atomic_add_fetch_cmp_0_optab;
+       break;
+     case IFN_ATOMIC_SUB_FETCH_CMP_0:
+       code = MINUS;
+       optab = atomic_sub_fetch_cmp_0_optab;
+       break;
+     case IFN_ATOMIC_AND_FETCH_CMP_0:
+       code = AND;
+       optab = atomic_and_fetch_cmp_0_optab;
+       break;
+     case IFN_ATOMIC_OR_FETCH_CMP_0:
+       code = IOR;
+       optab = atomic_or_fetch_cmp_0_optab;
+       break;
+     case IFN_ATOMIC_XOR_FETCH_CMP_0:
+       code = XOR;
+       optab = atomic_xor_fetch_cmp_0_optab;
+       break;
+     default:
+       gcc_unreachable ();
+     }
+ 
+   enum rtx_code comp = UNKNOWN;
+   switch (tree_to_uhwi (cmp))
+     {
+     case ATOMIC_OP_FETCH_CMP_0_EQ: comp = EQ; break;
+     case ATOMIC_OP_FETCH_CMP_0_NE: comp = NE; break;
+     case ATOMIC_OP_FETCH_CMP_0_GT: comp = GT; break;
+     case ATOMIC_OP_FETCH_CMP_0_GE: comp = GE; break;
+     case ATOMIC_OP_FETCH_CMP_0_LT: comp = LT; break;
+     case ATOMIC_OP_FETCH_CMP_0_LE: comp = LE; break;
+     default: gcc_unreachable ();
+     }
+ 
+   rtx target;
+   if (lhs == NULL_TREE)
+     target = gen_reg_rtx (TYPE_MODE (boolean_type_node));
+   else
+     target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
+   enum insn_code icode = direct_optab_handler (optab, mode);
+   gcc_assert (icode != CODE_FOR_nothing);
+   create_output_operand (&ops[0], target, TYPE_MODE (boolean_type_node));
+   create_fixed_operand (&ops[1], mem);
+   create_convert_operand_to (&ops[2], op, mode, true);
+   create_integer_operand (&ops[3], model);
+   create_integer_operand (&ops[4], comp);
+   if (maybe_expand_insn (icode, 5, ops))
+     return;
+ 
+   rtx result = expand_atomic_fetch_op (gen_reg_rtx (mode), mem, op,
+ 				       code, model, true);
+   if (lhs)
+     {
+       result = emit_store_flag_force (target, comp, result, const0_rtx, mode,
+ 				      0, 1);
+       if (result != target)
+ 	emit_move_insn (target, result);
+     }
+ }
+ 
+ /* Expand an atomic clear operation.
+ 	void _atomic_clear (BOOL *obj, enum memmodel)
+    EXP is the call expression.  */
+ 
+ static rtx
+ expand_builtin_atomic_clear (tree exp) 
+ {
+   machine_mode mode = int_mode_for_size (BOOL_TYPE_SIZE, 0).require ();
+   rtx mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
+   memmodel model = get_memmodel (CALL_EXPR_ARG (exp, 1));
+ 
+   if (is_mm_consume (model) || is_mm_acquire (model) || is_mm_acq_rel (model))
+     model = MEMMODEL_SEQ_CST;
+ 
+   /* Try issuing an __atomic_store, and allow fallback to __sync_lock_release.
+      Failing that, a store is issued by __atomic_store.  The only way this can
+      fail is if the bool type is larger than a word size.  Unlikely, but
+      handle it anyway for completeness.  Assume a single threaded model since
+      there is no atomic support in this case, and no barriers are required.  */
+   rtx ret = expand_atomic_store (mem, const0_rtx, model, true);
+   if (!ret)
+     emit_move_insn (mem, const0_rtx);
+   return const0_rtx;
+ }
+ 
+ /* Expand an atomic test_and_set operation.
+ 	bool _atomic_test_and_set (BOOL *obj, enum memmodel)
+    EXP is the call expression.  */
+ 
+ static rtx
+ expand_builtin_atomic_test_and_set (tree exp, rtx target)
+ {
+   rtx mem;
+   enum memmodel model;
+   machine_mode mode;
+ 
+   mode = int_mode_for_size (BOOL_TYPE_SIZE, 0).require ();
+   mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
+   model = get_memmodel (CALL_EXPR_ARG (exp, 1));
+ 
+   return expand_atomic_test_and_set (target, mem, model);
+ }
+ 
+ 
+ /* Return true if (optional) argument ARG1 of size ARG0 is always lock free on
+    this architecture.  If ARG1 is NULL, use typical alignment for size ARG0.  */
+ 
+ static tree
+ fold_builtin_atomic_always_lock_free (tree arg0, tree arg1)
+ {
+   int size;
+   machine_mode mode;
+   unsigned int mode_align, type_align;
+ 
+   if (TREE_CODE (arg0) != INTEGER_CST)
+     return NULL_TREE;
+ 
+   /* We need a corresponding integer mode for the access to be lock-free.  */
+   size = INTVAL (expand_normal (arg0)) * BITS_PER_UNIT;
+   if (!int_mode_for_size (size, 0).exists (&mode))
+     return boolean_false_node;
+ 
+   mode_align = GET_MODE_ALIGNMENT (mode);
+ 
+   if (TREE_CODE (arg1) == INTEGER_CST)
+     {
+       unsigned HOST_WIDE_INT val = UINTVAL (expand_normal (arg1));
+ 
+       /* Either this argument is null, or it's a fake pointer encoding
+          the alignment of the object.  */
+       val = least_bit_hwi (val);
+       val *= BITS_PER_UNIT;
+ 
+       if (val == 0 || mode_align < val)
+         type_align = mode_align;
+       else
+         type_align = val;
+     }
+   else
+     {
+       tree ttype = TREE_TYPE (arg1);
+ 
+       /* This function is usually invoked and folded immediately by the front
+ 	 end before anything else has a chance to look at it.  The pointer
+ 	 parameter at this point is usually cast to a void *, so check for that
+ 	 and look past the cast.  */
+       if (CONVERT_EXPR_P (arg1)
+ 	  && POINTER_TYPE_P (ttype)
+ 	  && VOID_TYPE_P (TREE_TYPE (ttype))
+ 	  && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (arg1, 0))))
+ 	arg1 = TREE_OPERAND (arg1, 0);
+ 
+       ttype = TREE_TYPE (arg1);
+       gcc_assert (POINTER_TYPE_P (ttype));
+ 
+       /* Get the underlying type of the object.  */
+       ttype = TREE_TYPE (ttype);
+       type_align = TYPE_ALIGN (ttype);
+     }
+ 
+   /* If the object has smaller alignment, the lock free routines cannot
+      be used.  */
+   if (type_align < mode_align)
+     return boolean_false_node;
+ 
+   /* Check if a compare_and_swap pattern exists for the mode which represents
+      the required size.  The pattern is not allowed to fail, so the existence
+      of the pattern indicates support is present.  Also require that an
+      atomic load exists for the required size.  */
+   if (can_compare_and_swap_p (mode, true) && can_atomic_load_p (mode))
+     return boolean_true_node;
+   else
+     return boolean_false_node;
+ }
+ 
+ /* Return true if the parameters to call EXP represent an object which will
+    always generate lock free instructions.  The first argument represents the
+    size of the object, and the second parameter is a pointer to the object 
+    itself.  If NULL is passed for the object, then the result is based on 
+    typical alignment for an object of the specified size.  Otherwise return 
+    false.  */
+ 
+ static rtx
+ expand_builtin_atomic_always_lock_free (tree exp)
+ {
+   tree size;
+   tree arg0 = CALL_EXPR_ARG (exp, 0);
+   tree arg1 = CALL_EXPR_ARG (exp, 1);
+ 
+   if (TREE_CODE (arg0) != INTEGER_CST)
+     {
+       error ("non-constant argument 1 to %qs", "__atomic_always_lock_free");
+       return const0_rtx;
+     }
+ 
+   size = fold_builtin_atomic_always_lock_free (arg0, arg1);
+   if (size == boolean_true_node)
+     return const1_rtx;
+   return const0_rtx;
+ }
+ 
+ /* Return a one or zero if it can be determined that object ARG1 of size ARG 
+    is lock free on this architecture.  */
+ 
+ static tree
+ fold_builtin_atomic_is_lock_free (tree arg0, tree arg1)
+ {
+   if (!flag_inline_atomics)
+     return NULL_TREE;
+   
+   /* If it isn't always lock free, don't generate a result.  */
+   if (fold_builtin_atomic_always_lock_free (arg0, arg1) == boolean_true_node)
+     return boolean_true_node;
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Return true if the parameters to call EXP represent an object which will
+    always generate lock free instructions.  The first argument represents the
+    size of the object, and the second parameter is a pointer to the object 
+    itself.  If NULL is passed for the object, then the result is based on 
+    typical alignment for an object of the specified size.  Otherwise return 
+    NULL*/
+ 
+ static rtx
+ expand_builtin_atomic_is_lock_free (tree exp)
+ {
+   tree size;
+   tree arg0 = CALL_EXPR_ARG (exp, 0);
+   tree arg1 = CALL_EXPR_ARG (exp, 1);
+ 
+   if (!INTEGRAL_TYPE_P (TREE_TYPE (arg0)))
+     {
+       error ("non-integer argument 1 to %qs", "__atomic_is_lock_free");
+       return NULL_RTX;
+     }
+ 
+   if (!flag_inline_atomics)
+     return NULL_RTX; 
+ 
+   /* If the value is known at compile time, return the RTX for it.  */
+   size = fold_builtin_atomic_is_lock_free (arg0, arg1);
+   if (size == boolean_true_node)
+     return const1_rtx;
+ 
+   return NULL_RTX;
+ }
+ 
+ /* Expand the __atomic_thread_fence intrinsic:
+    	void __atomic_thread_fence (enum memmodel)
+    EXP is the CALL_EXPR.  */
+ 
+ static void
+ expand_builtin_atomic_thread_fence (tree exp)
+ {
+   enum memmodel model = get_memmodel (CALL_EXPR_ARG (exp, 0));
+   expand_mem_thread_fence (model);
+ }
+ 
+ /* Expand the __atomic_signal_fence intrinsic:
+    	void __atomic_signal_fence (enum memmodel)
+    EXP is the CALL_EXPR.  */
+ 
+ static void
+ expand_builtin_atomic_signal_fence (tree exp)
+ {
+   enum memmodel model = get_memmodel (CALL_EXPR_ARG (exp, 0));
+   expand_mem_signal_fence (model);
+ }
+ 
+ /* Expand the __sync_synchronize intrinsic.  */
+ 
+ static void
+ expand_builtin_sync_synchronize (void)
+ {
+   expand_mem_thread_fence (MEMMODEL_SYNC_SEQ_CST);
+ }
+ 
+ static rtx
+ expand_builtin_thread_pointer (tree exp, rtx target)
+ {
+   enum insn_code icode;
+   if (!validate_arglist (exp, VOID_TYPE))
+     return const0_rtx;
+   icode = direct_optab_handler (get_thread_pointer_optab, Pmode);
+   if (icode != CODE_FOR_nothing)
+     {
+       class expand_operand op;
+       /* If the target is not sutitable then create a new target. */
+       if (target == NULL_RTX
+ 	  || !REG_P (target)
+ 	  || GET_MODE (target) != Pmode)
+ 	target = gen_reg_rtx (Pmode);
+       create_output_operand (&op, target, Pmode);
+       expand_insn (icode, 1, &op);
+       return target;
+     }
+   error ("%<__builtin_thread_pointer%> is not supported on this target");
+   return const0_rtx;
+ }
+ 
+ static void
+ expand_builtin_set_thread_pointer (tree exp)
+ {
+   enum insn_code icode;
+   if (!validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
+     return;
+   icode = direct_optab_handler (set_thread_pointer_optab, Pmode);
+   if (icode != CODE_FOR_nothing)
+     {
+       class expand_operand op;
+       rtx val = expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX,
+ 			     Pmode, EXPAND_NORMAL);      
+       create_input_operand (&op, val, Pmode);
+       expand_insn (icode, 1, &op);
+       return;
+     }
+   error ("%<__builtin_set_thread_pointer%> is not supported on this target");
+ }
+ 
+ 
+ /* Emit code to restore the current value of stack.  */
+ 
+ static void
+ expand_stack_restore (tree var)
+ {
+   rtx_insn *prev;
+   rtx sa = expand_normal (var);
+ 
+   sa = convert_memory_address (Pmode, sa);
+ 
+   prev = get_last_insn ();
+   emit_stack_restore (SAVE_BLOCK, sa);
+ 
+   record_new_stack_level ();
+ 
+   fixup_args_size_notes (prev, get_last_insn (), 0);
+ }
+ 
+ /* Emit code to save the current value of stack.  */
+ 
+ static rtx
+ expand_stack_save (void)
+ {
+   rtx ret = NULL_RTX;
+ 
+   emit_stack_save (SAVE_BLOCK, &ret);
+   return ret;
+ }
+ 
+ /* Emit code to get the openacc gang, worker or vector id or size.  */
+ 
+ static rtx
+ expand_builtin_goacc_parlevel_id_size (tree exp, rtx target, int ignore)
+ {
+   const char *name;
+   rtx fallback_retval;
+   rtx_insn *(*gen_fn) (rtx, rtx);
+   switch (DECL_FUNCTION_CODE (get_callee_fndecl (exp)))
+     {
+     case BUILT_IN_GOACC_PARLEVEL_ID:
+       name = "__builtin_goacc_parlevel_id";
+       fallback_retval = const0_rtx;
+       gen_fn = targetm.gen_oacc_dim_pos;
+       break;
+     case BUILT_IN_GOACC_PARLEVEL_SIZE:
+       name = "__builtin_goacc_parlevel_size";
+       fallback_retval = const1_rtx;
+       gen_fn = targetm.gen_oacc_dim_size;
+       break;
+     default:
+       gcc_unreachable ();
+     }
+ 
+   if (oacc_get_fn_attrib (current_function_decl) == NULL_TREE)
+     {
+       error ("%qs only supported in OpenACC code", name);
+       return const0_rtx;
+     }
+ 
+   tree arg = CALL_EXPR_ARG (exp, 0);
+   if (TREE_CODE (arg) != INTEGER_CST)
+     {
+       error ("non-constant argument 0 to %qs", name);
+       return const0_rtx;
+     }
+ 
+   int dim = TREE_INT_CST_LOW (arg);
+   switch (dim)
+     {
+     case GOMP_DIM_GANG:
+     case GOMP_DIM_WORKER:
+     case GOMP_DIM_VECTOR:
+       break;
+     default:
+       error ("illegal argument 0 to %qs", name);
+       return const0_rtx;
+     }
+ 
+   if (ignore)
+     return target;
+ 
+   if (target == NULL_RTX)
+     target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
+ 
+   if (!targetm.have_oacc_dim_size ())
+     {
+       emit_move_insn (target, fallback_retval);
+       return target;
+     }
+ 
+   rtx reg = MEM_P (target) ? gen_reg_rtx (GET_MODE (target)) : target;
+   emit_insn (gen_fn (reg, GEN_INT (dim)));
+   if (reg != target)
+     emit_move_insn (target, reg);
+ 
+   return target;
+ }
+ 
+ /* Expand a string compare operation using a sequence of char comparison
+    to get rid of the calling overhead, with result going to TARGET if
+    that's convenient.
+ 
+    VAR_STR is the variable string source;
+    CONST_STR is the constant string source;
+    LENGTH is the number of chars to compare;
+    CONST_STR_N indicates which source string is the constant string;
+    IS_MEMCMP indicates whether it's a memcmp or strcmp.
+   
+    to: (assume const_str_n is 2, i.e., arg2 is a constant string)
+ 
+    target = (int) (unsigned char) var_str[0]
+ 	    - (int) (unsigned char) const_str[0];
+    if (target != 0)
+      goto ne_label;
+      ...
+    target = (int) (unsigned char) var_str[length - 2]
+ 	    - (int) (unsigned char) const_str[length - 2];
+    if (target != 0)
+      goto ne_label;
+    target = (int) (unsigned char) var_str[length - 1]
+ 	    - (int) (unsigned char) const_str[length - 1];
+    ne_label:
+   */
+ 
+ static rtx
+ inline_string_cmp (rtx target, tree var_str, const char *const_str,
+ 		   unsigned HOST_WIDE_INT length,
+ 		   int const_str_n, machine_mode mode)
+ {
+   HOST_WIDE_INT offset = 0;
+   rtx var_rtx_array
+     = get_memory_rtx (var_str, build_int_cst (unsigned_type_node,length));
+   rtx var_rtx = NULL_RTX;
+   rtx const_rtx = NULL_RTX;
+   rtx result = target ? target : gen_reg_rtx (mode);
+   rtx_code_label *ne_label = gen_label_rtx ();
+   tree unit_type_node = unsigned_char_type_node;
+   scalar_int_mode unit_mode
+     = as_a <scalar_int_mode> TYPE_MODE (unit_type_node);
+ 
+   start_sequence ();
+ 
+   for (unsigned HOST_WIDE_INT i = 0; i < length; i++)
+     {
+       var_rtx
+ 	= adjust_address (var_rtx_array, TYPE_MODE (unit_type_node), offset);
+       const_rtx = c_readstr (const_str + offset, unit_mode);
+       rtx op0 = (const_str_n == 1) ? const_rtx : var_rtx;
+       rtx op1 = (const_str_n == 1) ? var_rtx : const_rtx;
+ 
+       op0 = convert_modes (mode, unit_mode, op0, 1);
+       op1 = convert_modes (mode, unit_mode, op1, 1);
+       result = expand_simple_binop (mode, MINUS, op0, op1,
+ 				    result, 1, OPTAB_WIDEN);
+       if (i < length - 1)
+ 	emit_cmp_and_jump_insns (result, CONST0_RTX (mode), NE, NULL_RTX,
+ 	    			 mode, true, ne_label);
+       offset += GET_MODE_SIZE (unit_mode);
+     }
+ 
+   emit_label (ne_label);
+   rtx_insn *insns = get_insns ();
+   end_sequence ();
+   emit_insn (insns);
+ 
+   return result;
+ }
+ 
+ /* Inline expansion of a call to str(n)cmp and memcmp, with result going
+    to TARGET if that's convenient.
+    If the call is not been inlined, return NULL_RTX.  */
+ 
+ static rtx
+ inline_expand_builtin_bytecmp (tree exp, rtx target)
+ {
+   tree fndecl = get_callee_fndecl (exp);
+   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
+   bool is_ncmp = (fcode == BUILT_IN_STRNCMP || fcode == BUILT_IN_MEMCMP);
+ 
+   /* Do NOT apply this inlining expansion when optimizing for size or
+      optimization level below 2.  */
+   if (optimize < 2 || optimize_insn_for_size_p ())
+     return NULL_RTX;
+ 
+   gcc_checking_assert (fcode == BUILT_IN_STRCMP
+ 		       || fcode == BUILT_IN_STRNCMP
+ 		       || fcode == BUILT_IN_MEMCMP);
+ 
+   /* On a target where the type of the call (int) has same or narrower presicion
+      than unsigned char, give up the inlining expansion.  */
+   if (TYPE_PRECISION (unsigned_char_type_node)
+       >= TYPE_PRECISION (TREE_TYPE (exp)))
+     return NULL_RTX;
+ 
+   tree arg1 = CALL_EXPR_ARG (exp, 0);
+   tree arg2 = CALL_EXPR_ARG (exp, 1);
+   tree len3_tree = is_ncmp ? CALL_EXPR_ARG (exp, 2) : NULL_TREE;
+ 
+   unsigned HOST_WIDE_INT len1 = 0;
+   unsigned HOST_WIDE_INT len2 = 0;
+   unsigned HOST_WIDE_INT len3 = 0;
+ 
+   /* Get the object representation of the initializers of ARG1 and ARG2
+      as strings, provided they refer to constant objects, with their byte
+      sizes in LEN1 and LEN2, respectively.  */
+   const char *bytes1 = getbyterep (arg1, &len1);
+   const char *bytes2 = getbyterep (arg2, &len2);
+ 
+   /* Fail if neither argument refers to an initialized constant.  */
+   if (!bytes1 && !bytes2)
+     return NULL_RTX;
+ 
+   if (is_ncmp)
+     {
+       /* Fail if the memcmp/strncmp bound is not a constant.  */
+       if (!tree_fits_uhwi_p (len3_tree))
+ 	return NULL_RTX;
+ 
+       len3 = tree_to_uhwi (len3_tree);
+ 
+       if (fcode == BUILT_IN_MEMCMP)
+ 	{
+ 	  /* Fail if the memcmp bound is greater than the size of either
+ 	     of the two constant objects.  */
+ 	  if ((bytes1 && len1 < len3)
+ 	      || (bytes2 && len2 < len3))
+ 	    return NULL_RTX;
+ 	}
+     }
+ 
+   if (fcode != BUILT_IN_MEMCMP)
+     {
+       /* For string functions (i.e., strcmp and strncmp) reduce LEN1
+ 	 and LEN2 to the length of the nul-terminated string stored
+ 	 in each.  */
+       if (bytes1 != NULL)
+ 	len1 = strnlen (bytes1, len1) + 1;
+       if (bytes2 != NULL)
+ 	len2 = strnlen (bytes2, len2) + 1;
+     }
+ 
+   /* See inline_string_cmp.  */
+   int const_str_n;
+   if (!len1)
+     const_str_n = 2;
+   else if (!len2)
+     const_str_n = 1;
+   else if (len2 > len1)
+     const_str_n = 1;
+   else
+     const_str_n = 2;
+ 
+   /* For strncmp only, compute the new bound as the smallest of
+      the lengths of the two strings (plus 1) and the bound provided
+      to the function.  */
+   unsigned HOST_WIDE_INT bound = (const_str_n == 1) ? len1 : len2;
+   if (is_ncmp && len3 < bound)
+     bound = len3;
+ 
+   /* If the bound of the comparison is larger than the threshold,
+      do nothing.  */
+   if (bound > (unsigned HOST_WIDE_INT) param_builtin_string_cmp_inline_length)
+     return NULL_RTX;
+ 
+   machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
+ 
+   /* Now, start inline expansion the call.  */
+   return inline_string_cmp (target, (const_str_n == 1) ? arg2 : arg1,
+ 			    (const_str_n == 1) ? bytes1 : bytes2, bound,
+ 			    const_str_n, mode);
+ }
+ 
+ /* Expand a call to __builtin_speculation_safe_value_<N>.  MODE
+    represents the size of the first argument to that call, or VOIDmode
+    if the argument is a pointer.  IGNORE will be true if the result
+    isn't used.  */
+ static rtx
+ expand_speculation_safe_value (machine_mode mode, tree exp, rtx target,
+ 			       bool ignore)
+ {
+   rtx val, failsafe;
+   unsigned nargs = call_expr_nargs (exp);
+ 
+   tree arg0 = CALL_EXPR_ARG (exp, 0);
+ 
+   if (mode == VOIDmode)
+     {
+       mode = TYPE_MODE (TREE_TYPE (arg0));
+       gcc_assert (GET_MODE_CLASS (mode) == MODE_INT);
+     }
+ 
+   val = expand_expr (arg0, NULL_RTX, mode, EXPAND_NORMAL);
+ 
+   /* An optional second argument can be used as a failsafe value on
+      some machines.  If it isn't present, then the failsafe value is
+      assumed to be 0.  */
+   if (nargs > 1)
+     {
+       tree arg1 = CALL_EXPR_ARG (exp, 1);
+       failsafe = expand_expr (arg1, NULL_RTX, mode, EXPAND_NORMAL);
+     }
+   else
+     failsafe = const0_rtx;
+ 
+   /* If the result isn't used, the behavior is undefined.  It would be
+      nice to emit a warning here, but path splitting means this might
+      happen with legitimate code.  So simply drop the builtin
+      expansion in that case; we've handled any side-effects above.  */
+   if (ignore)
+     return const0_rtx;
+ 
+   /* If we don't have a suitable target, create one to hold the result.  */
+   if (target == NULL || GET_MODE (target) != mode)
+     target = gen_reg_rtx (mode);
+ 
+   if (GET_MODE (val) != mode && GET_MODE (val) != VOIDmode)
+     val = convert_modes (mode, VOIDmode, val, false);
+ 
+   return targetm.speculation_safe_value (mode, target, val, failsafe);
+ }
+ 
+ /* Expand an expression EXP that calls a built-in function,
+    with result going to TARGET if that's convenient
+    (and in mode MODE if that's convenient).
+    SUBTARGET may be used as the target for computing one of EXP's operands.
+    IGNORE is nonzero if the value is to be ignored.  */
+ 
+ rtx
+ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
+ 		int ignore)
+ {
+   tree fndecl = get_callee_fndecl (exp);
+   machine_mode target_mode = TYPE_MODE (TREE_TYPE (exp));
+   int flags;
+ 
+   if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
+     return targetm.expand_builtin (exp, target, subtarget, mode, ignore);
+ 
+   /* When ASan is enabled, we don't want to expand some memory/string
+      builtins and rely on libsanitizer's hooks.  This allows us to avoid
+      redundant checks and be sure, that possible overflow will be detected
+      by ASan.  */
+ 
+   enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
+   if ((flag_sanitize & SANITIZE_ADDRESS) && asan_intercepted_p (fcode))
+     return expand_call (exp, target, ignore);
+ 
+   /* When not optimizing, generate calls to library functions for a certain
+      set of builtins.  */
+   if (!optimize
+       && !called_as_built_in (fndecl)
+       && fcode != BUILT_IN_FORK
+       && fcode != BUILT_IN_EXECL
+       && fcode != BUILT_IN_EXECV
+       && fcode != BUILT_IN_EXECLP
+       && fcode != BUILT_IN_EXECLE
+       && fcode != BUILT_IN_EXECVP
+       && fcode != BUILT_IN_EXECVE
+       && fcode != BUILT_IN_CLEAR_CACHE
+       && !ALLOCA_FUNCTION_CODE_P (fcode)
+       && fcode != BUILT_IN_FREE)
+     return expand_call (exp, target, ignore);
+ 
+   /* The built-in function expanders test for target == const0_rtx
+      to determine whether the function's result will be ignored.  */
+   if (ignore)
+     target = const0_rtx;
+ 
+   /* If the result of a pure or const built-in function is ignored, and
+      none of its arguments are volatile, we can avoid expanding the
+      built-in call and just evaluate the arguments for side-effects.  */
+   if (target == const0_rtx
+       && ((flags = flags_from_decl_or_type (fndecl)) & (ECF_CONST | ECF_PURE))
+       && !(flags & ECF_LOOPING_CONST_OR_PURE))
+     {
+       bool volatilep = false;
+       tree arg;
+       call_expr_arg_iterator iter;
+ 
+       FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
+ 	if (TREE_THIS_VOLATILE (arg))
+ 	  {
+ 	    volatilep = true;
+ 	    break;
+ 	  }
+ 
+       if (! volatilep)
+ 	{
+ 	  FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
+ 	    expand_expr (arg, const0_rtx, VOIDmode, EXPAND_NORMAL);
+ 	  return const0_rtx;
+ 	}
+     }
+ 
+   switch (fcode)
+     {
+     CASE_FLT_FN (BUILT_IN_FABS):
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_FABS):
+     case BUILT_IN_FABSD32:
+     case BUILT_IN_FABSD64:
+     case BUILT_IN_FABSD128:
+       target = expand_builtin_fabs (exp, target, subtarget);
+       if (target)
+ 	return target;
+       break;
+ 
+     CASE_FLT_FN (BUILT_IN_COPYSIGN):
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_COPYSIGN):
+       target = expand_builtin_copysign (exp, target, subtarget);
+       if (target)
+ 	return target;
+       break;
+ 
+       /* Just do a normal library call if we were unable to fold
+ 	 the values.  */
+     CASE_FLT_FN (BUILT_IN_CABS):
+       break;
+ 
+     CASE_FLT_FN (BUILT_IN_FMA):
+     CASE_FLT_FN_FLOATN_NX (BUILT_IN_FMA):
+       target = expand_builtin_mathfn_ternary (exp, target, subtarget);
+       if (target)
+ 	return target;
+       break;
+ 
+     CASE_FLT_FN (BUILT_IN_ILOGB):
+       if (! flag_unsafe_math_optimizations)
+ 	break;
+       gcc_fallthrough ();
+     CASE_FLT_FN (BUILT_IN_ISINF):
+     CASE_FLT_FN (BUILT_IN_FINITE):
+     case BUILT_IN_ISFINITE:
+     case BUILT_IN_ISNORMAL:
+       target = expand_builtin_interclass_mathfn (exp, target);
+       if (target)
+ 	return target;
+       break;
+ 
+     CASE_FLT_FN (BUILT_IN_ICEIL):
+     CASE_FLT_FN (BUILT_IN_LCEIL):
+     CASE_FLT_FN (BUILT_IN_LLCEIL):
+     CASE_FLT_FN (BUILT_IN_LFLOOR):
+     CASE_FLT_FN (BUILT_IN_IFLOOR):
+     CASE_FLT_FN (BUILT_IN_LLFLOOR):
+       target = expand_builtin_int_roundingfn (exp, target);
+       if (target)
+ 	return target;
+       break;
+ 
+     CASE_FLT_FN (BUILT_IN_IRINT):
+     CASE_FLT_FN (BUILT_IN_LRINT):
+     CASE_FLT_FN (BUILT_IN_LLRINT):
+     CASE_FLT_FN (BUILT_IN_IROUND):
+     CASE_FLT_FN (BUILT_IN_LROUND):
+     CASE_FLT_FN (BUILT_IN_LLROUND):
+       target = expand_builtin_int_roundingfn_2 (exp, target);
+       if (target)
+ 	return target;
+       break;
+ 
+     CASE_FLT_FN (BUILT_IN_POWI):
+       target = expand_builtin_powi (exp, target);
+       if (target)
+ 	return target;
+       break;
+ 
+     CASE_FLT_FN (BUILT_IN_CEXPI):
+       target = expand_builtin_cexpi (exp, target);
+       gcc_assert (target);
+       return target;
+ 
+     CASE_FLT_FN (BUILT_IN_SIN):
+     CASE_FLT_FN (BUILT_IN_COS):
+       if (! flag_unsafe_math_optimizations)
+ 	break;
+       target = expand_builtin_mathfn_3 (exp, target, subtarget);
+       if (target)
+ 	return target;
+       break;
+ 
+     CASE_FLT_FN (BUILT_IN_SINCOS):
+       if (! flag_unsafe_math_optimizations)
+ 	break;
+       target = expand_builtin_sincos (exp);
+       if (target)
+ 	return target;
+       break;
+ 
+     case BUILT_IN_FEGETROUND:
+       target = expand_builtin_fegetround (exp, target, target_mode);
+       if (target)
+ 	return target;
+       break;
+ 
+     case BUILT_IN_FECLEAREXCEPT:
+       target = expand_builtin_feclear_feraise_except (exp, target, target_mode,
+ 						      feclearexcept_optab);
+       if (target)
+ 	return target;
+       break;
+ 
+     case BUILT_IN_FERAISEEXCEPT:
+       target = expand_builtin_feclear_feraise_except (exp, target, target_mode,
+ 						      feraiseexcept_optab);
+       if (target)
+ 	return target;
+       break;
+ 
+     case BUILT_IN_APPLY_ARGS:
+       return expand_builtin_apply_args ();
+ 
+       /* __builtin_apply (FUNCTION, ARGUMENTS, ARGSIZE) invokes
+ 	 FUNCTION with a copy of the parameters described by
+ 	 ARGUMENTS, and ARGSIZE.  It returns a block of memory
+ 	 allocated on the stack into which is stored all the registers
+ 	 that might possibly be used f